summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--MAINTAINERS22
-rw-r--r--Makefile.inc1188
-rw-r--r--ObsoleteFiles.inc16
-rw-r--r--UPDATING9
-rw-r--r--bin/csh/config_p.h2
-rwxr-xr-xbin/ls/tests/ls_tests.sh12
-rw-r--r--cddl/contrib/opensolaris/cmd/zfs/zfs.829
-rw-r--r--cddl/contrib/opensolaris/cmd/zfs/zfs_main.c54
-rw-r--r--cddl/contrib/opensolaris/tools/ctf/cvt/dwarf.c4
-rw-r--r--cddl/usr.sbin/dtrace/tests/Makefile.inc12
-rw-r--r--contrib/bmake/ChangeLog37
-rw-r--r--contrib/bmake/FILES2
-rw-r--r--contrib/bmake/Makefile5
-rw-r--r--contrib/bmake/arch.c14
-rw-r--r--contrib/bmake/compat.c54
-rw-r--r--contrib/bmake/cond.c12
-rw-r--r--contrib/bmake/configure.in5
-rw-r--r--contrib/bmake/for.c8
-rw-r--r--contrib/bmake/job.c13
-rw-r--r--contrib/bmake/main.c40
-rwxr-xr-xcontrib/bmake/make-bootstrap.sh.in2
-rw-r--r--contrib/bmake/make.c8
-rw-r--r--contrib/bmake/make.h11
-rw-r--r--contrib/bmake/meta.c29
-rw-r--r--contrib/bmake/metachar.c88
-rw-r--r--contrib/bmake/metachar.h (renamed from sys/arm/samsung/s3c2xx0/s3c24x0var.h)56
-rw-r--r--contrib/bmake/mk/ChangeLog45
-rw-r--r--contrib/bmake/mk/auto.obj.mk7
-rw-r--r--contrib/bmake/mk/dirdeps.mk17
-rw-r--r--contrib/bmake/mk/doc.mk18
-rw-r--r--contrib/bmake/mk/gendirdeps.mk8
-rw-r--r--contrib/bmake/mk/host-target.mk17
-rw-r--r--contrib/bmake/mk/install-mk4
-rw-r--r--contrib/bmake/mk/meta.autodep.mk4
-rw-r--r--contrib/bmake/mk/meta.stage.mk37
-rw-r--r--contrib/bmake/mk/meta.sys.mk7
-rw-r--r--contrib/bmake/mk/own.mk5
-rw-r--r--contrib/bmake/mk/rst2htm.mk13
-rw-r--r--contrib/bmake/nonints.h6
-rwxr-xr-xcontrib/bmake/os.sh12
-rw-r--r--contrib/bmake/parse.c22
-rw-r--r--contrib/bmake/suff.c10
-rw-r--r--contrib/bmake/unit-tests/varmisc.exp18
-rw-r--r--contrib/bmake/unit-tests/varmisc.mk38
-rw-r--r--contrib/bmake/var.c229
-rw-r--r--contrib/gdb/gdb/arm-tdep.c15
-rw-r--r--contrib/groff/tmac/doc-syms1
-rw-r--r--contrib/groff/tmac/groff_mdoc.man2
-rw-r--r--contrib/jemalloc/ChangeLog26
-rw-r--r--contrib/jemalloc/FREEBSD-diffs4
-rw-r--r--contrib/jemalloc/VERSION2
-rw-r--r--contrib/jemalloc/doc/jemalloc.310
-rw-r--r--contrib/jemalloc/include/jemalloc/internal/jemalloc_internal.h4
-rw-r--r--contrib/jemalloc/include/jemalloc/jemalloc.h6
-rw-r--r--contrib/jemalloc/src/arena.c16
-rw-r--r--contrib/jemalloc/src/huge.c30
-rw-r--r--contrib/jemalloc/src/prof.c22
-rw-r--r--contrib/jemalloc/src/tsd.c3
-rw-r--r--contrib/libucl/CMakeLists.txt260
-rw-r--r--contrib/libucl/ChangeLog.md5
-rw-r--r--contrib/libucl/README.md15
-rw-r--r--contrib/libucl/cmake/CMakeLists.txt127
-rw-r--r--contrib/libucl/configure.ac5
-rw-r--r--contrib/libucl/doc/Makefile.am4
-rw-r--r--contrib/libucl/doc/lua_api.md4
-rw-r--r--contrib/libucl/examples/ucl_cpp.cc26
-rw-r--r--contrib/libucl/include/ucl++.h422
-rw-r--r--contrib/libucl/include/ucl.h212
-rw-r--r--contrib/libucl/klib/kvec.h2
-rw-r--r--contrib/libucl/lua/lua_ucl.c360
-rw-r--r--contrib/libucl/m4/ax_lua.m4664
-rw-r--r--contrib/libucl/python/setup.py37
-rw-r--r--contrib/libucl/python/src/uclmodule.c156
-rwxr-xr-xcontrib/libucl/python/test.sh6
-rwxr-xr-xcontrib/libucl/python/test_uclmodule.py100
-rw-r--r--contrib/libucl/src/Makefile.am5
-rw-r--r--contrib/libucl/src/tree.h27
-rw-r--r--contrib/libucl/src/ucl_chartable.h3
-rw-r--r--contrib/libucl/src/ucl_emitter.c136
-rw-r--r--contrib/libucl/src/ucl_emitter_utils.c8
-rw-r--r--contrib/libucl/src/ucl_hash.c173
-rw-r--r--contrib/libucl/src/ucl_internal.h155
-rw-r--r--contrib/libucl/src/ucl_msgpack.c1600
-rw-r--r--contrib/libucl/src/ucl_parser.c476
-rw-r--r--contrib/libucl/src/ucl_sexp.c224
-rw-r--r--contrib/libucl/src/ucl_util.c901
-rw-r--r--contrib/libucl/src/xxhash.c666
-rw-r--r--contrib/libucl/src/xxhash.h139
-rw-r--r--contrib/libucl/tests/Makefile.am13
-rw-r--r--contrib/libucl/tests/basic/13.in2
-rw-r--r--contrib/libucl/tests/basic/15.in24
-rw-r--r--contrib/libucl/tests/basic/15.inc3
-rw-r--r--contrib/libucl/tests/basic/15.res7
-rw-r--r--contrib/libucl/tests/basic/16.in12
-rw-r--r--contrib/libucl/tests/basic/16.inc3
-rw-r--r--contrib/libucl/tests/basic/16.res7
-rw-r--r--contrib/libucl/tests/basic/17.in2
-rw-r--r--contrib/libucl/tests/basic/17.res2
-rw-r--r--contrib/libucl/tests/basic/18.in10
-rw-r--r--contrib/libucl/tests/basic/18.res11
-rw-r--r--contrib/libucl/tests/basic/19-append.inc8
-rw-r--r--contrib/libucl/tests/basic/19-merge.inc8
-rw-r--r--contrib/libucl/tests/basic/19-rewrite.inc8
-rw-r--r--contrib/libucl/tests/basic/19.in28
-rw-r--r--contrib/libucl/tests/basic/19.res36
-rw-r--r--contrib/libucl/tests/basic/20.in2
-rw-r--r--contrib/libucl/tests/basic/20.res5
-rw-r--r--contrib/libucl/tests/basic/21.in2
-rw-r--r--contrib/libucl/tests/basic/21.res10
-rw-r--r--contrib/libucl/tests/basic/22.in2
-rw-r--r--contrib/libucl/tests/basic/22.res2
-rwxr-xr-xcontrib/libucl/tests/msgpack.test3
-rw-r--r--contrib/libucl/tests/test_basic.c43
-rw-r--r--contrib/libucl/tests/test_msgpack.c340
-rw-r--r--contrib/libucl/tests/test_schema.c12
-rw-r--r--contrib/libucl/utils/Makefile.am6
-rw-r--r--contrib/libucl/utils/chargen.c6
-rw-r--r--contrib/libucl/utils/objdump.c25
-rw-r--r--contrib/libucl/utils/ucl-tool.c168
-rw-r--r--contrib/llvm/tools/lldb/source/Plugins/Process/FreeBSD/POSIXThread.cpp4
-rw-r--r--contrib/mdocml/lib.in1
-rw-r--r--contrib/netbsd-tests/lib/libc/ssp/h_readlink.c3
-rw-r--r--contrib/ntp/ChangeLog155
-rw-r--r--contrib/ntp/CommitLog4981
-rw-r--r--contrib/ntp/FREEBSD-Xlist2
-rw-r--r--contrib/ntp/FREEBSD-upgrade55
-rw-r--r--contrib/ntp/Makefile.am2
-rw-r--r--contrib/ntp/Makefile.in6
-rw-r--r--contrib/ntp/NEWS495
-rw-r--r--contrib/ntp/aclocal.m41
-rw-r--r--contrib/ntp/adjtimed/Makefile.in4
-rw-r--r--contrib/ntp/adjtimed/adjtimed.c2
-rw-r--r--contrib/ntp/clockstuff/Makefile.in4
-rw-r--r--contrib/ntp/clockstuff/chutest.c2
-rw-r--r--contrib/ntp/clockstuff/propdelay.c2
-rwxr-xr-xcontrib/ntp/configure243
-rw-r--r--contrib/ntp/configure.ac58
-rw-r--r--contrib/ntp/html/decode.html4
-rw-r--r--contrib/ntp/html/miscopt.html4
-rw-r--r--contrib/ntp/html/stats.html48
-rw-r--r--contrib/ntp/include/Makefile.am1
-rw-r--r--contrib/ntp/include/Makefile.in5
-rw-r--r--contrib/ntp/include/isc/Makefile.in4
-rw-r--r--contrib/ntp/include/ntp_assert.h4
-rw-r--r--contrib/ntp/include/ntp_calendar.h13
-rw-r--r--contrib/ntp/include/ntp_config.h4
-rw-r--r--contrib/ntp/include/ntp_control.h2
-rw-r--r--contrib/ntp/include/ntp_lists.h6
-rw-r--r--contrib/ntp/include/ntp_stdlib.h1
-rw-r--r--contrib/ntp/include/ntp_syslog.h1
-rw-r--r--contrib/ntp/include/ntp_types.h3
-rw-r--r--contrib/ntp/include/rc_cmdlength.h2
-rw-r--r--contrib/ntp/kernel/Makefile.in4
-rw-r--r--contrib/ntp/kernel/sys/Makefile.in4
-rw-r--r--contrib/ntp/libntp/Makefile.in4
-rw-r--r--contrib/ntp/libntp/atolfp.c2
-rw-r--r--contrib/ntp/libntp/audio.c13
-rw-r--r--contrib/ntp/libntp/authkeys.c12
-rw-r--r--contrib/ntp/libntp/authreadkeys.c89
-rw-r--r--contrib/ntp/libntp/caljulian.c2
-rw-r--r--contrib/ntp/libntp/caltontp.c14
-rw-r--r--contrib/ntp/libntp/decodenetnum.c9
-rw-r--r--contrib/ntp/libntp/emalloc.c2
-rw-r--r--contrib/ntp/libntp/icom.c28
-rw-r--r--contrib/ntp/libntp/machines.c6
-rw-r--r--contrib/ntp/libntp/msyslog.c24
-rw-r--r--contrib/ntp/libntp/ntp_calendar.c786
-rw-r--r--contrib/ntp/libntp/ntp_intres.c24
-rw-r--r--contrib/ntp/libntp/ntp_lineedit.c2
-rw-r--r--contrib/ntp/libntp/ntp_rfc2553.c2
-rw-r--r--contrib/ntp/libntp/ntp_worker.c2
-rw-r--r--contrib/ntp/libntp/prettydate.c2
-rw-r--r--contrib/ntp/libntp/recvbuff.c2
-rw-r--r--contrib/ntp/libntp/socket.c4
-rw-r--r--contrib/ntp/libntp/socktohost.c2
-rw-r--r--contrib/ntp/libntp/statestr.c2
-rw-r--r--contrib/ntp/libparse/Makefile.in4
-rw-r--r--contrib/ntp/ntpd/Makefile.am3
-rw-r--r--contrib/ntp/ntpd/Makefile.in7
-rw-r--r--contrib/ntp/ntpd/invoke-ntp.conf.texi15
-rw-r--r--contrib/ntp/ntpd/invoke-ntp.keys.texi2
-rw-r--r--contrib/ntp/ntpd/invoke-ntpd.texi4
-rw-r--r--contrib/ntp/ntpd/ntp.conf.5man19
-rw-r--r--contrib/ntp/ntpd/ntp.conf.5mdoc17
-rw-r--r--contrib/ntp/ntpd/ntp.conf.def13
-rw-r--r--contrib/ntp/ntpd/ntp.conf.html15
-rw-r--r--contrib/ntp/ntpd/ntp.conf.man.in19
-rw-r--r--contrib/ntp/ntpd/ntp.conf.mdoc.in17
-rw-r--r--contrib/ntp/ntpd/ntp.keys.5man4
-rw-r--r--contrib/ntp/ntpd/ntp.keys.5mdoc4
-rw-r--r--contrib/ntp/ntpd/ntp.keys.html2
-rw-r--r--contrib/ntp/ntpd/ntp.keys.man.in4
-rw-r--r--contrib/ntp/ntpd/ntp.keys.mdoc.in4
-rw-r--r--contrib/ntp/ntpd/ntp_config.c59
-rw-r--r--contrib/ntp/ntpd/ntp_control.c88
-rw-r--r--contrib/ntp/ntpd/ntp_crypto.c134
-rw-r--r--contrib/ntp/ntpd/ntp_io.c105
-rw-r--r--contrib/ntp/ntpd/ntp_loopfilter.c8
-rw-r--r--contrib/ntp/ntpd/ntp_monitor.c6
-rw-r--r--contrib/ntp/ntpd/ntp_parser.c2399
-rw-r--r--contrib/ntp/ntpd/ntp_parser.h442
-rw-r--r--contrib/ntp/ntpd/ntp_peer.c13
-rw-r--r--contrib/ntp/ntpd/ntp_proto.c297
-rw-r--r--contrib/ntp/ntpd/ntp_refclock.c2
-rw-r--r--contrib/ntp/ntpd/ntp_request.c10
-rw-r--r--contrib/ntp/ntpd/ntp_restrict.c28
-rw-r--r--contrib/ntp/ntpd/ntp_timer.c6
-rw-r--r--contrib/ntp/ntpd/ntpd-opts.c14
-rw-r--r--contrib/ntp/ntpd/ntpd-opts.def6
-rw-r--r--contrib/ntp/ntpd/ntpd-opts.h6
-rw-r--r--contrib/ntp/ntpd/ntpd.1ntpdman12
-rw-r--r--contrib/ntp/ntpd/ntpd.1ntpdmdoc10
-rw-r--r--contrib/ntp/ntpd/ntpd.c104
-rw-r--r--contrib/ntp/ntpd/ntpd.html4
-rw-r--r--contrib/ntp/ntpd/ntpd.man.in12
-rw-r--r--contrib/ntp/ntpd/ntpd.mdoc.in10
-rw-r--r--contrib/ntp/ntpd/rc_cmdlength.c1
-rw-r--r--contrib/ntp/ntpd/refclock_arc.c2
-rw-r--r--contrib/ntp/ntpd/refclock_chu.c2
-rw-r--r--contrib/ntp/ntpd/refclock_gpsdjson.c18
-rw-r--r--contrib/ntp/ntpd/refclock_local.c18
-rw-r--r--contrib/ntp/ntpd/refclock_nmea.c7
-rw-r--r--contrib/ntp/ntpd/refclock_palisade.c4
-rw-r--r--contrib/ntp/ntpd/refclock_parse.c3
-rw-r--r--contrib/ntp/ntpd/refclock_wwv.c6
-rw-r--r--contrib/ntp/ntpdate/Makefile.in4
-rw-r--r--contrib/ntp/ntpdate/ntpdate.c2
-rw-r--r--contrib/ntp/ntpdc/Makefile.in4
-rw-r--r--contrib/ntp/ntpdc/invoke-ntpdc.texi4
-rw-r--r--contrib/ntp/ntpdc/ntpdc-opts.c14
-rw-r--r--contrib/ntp/ntpdc/ntpdc-opts.h6
-rw-r--r--contrib/ntp/ntpdc/ntpdc.1ntpdcman6
-rw-r--r--contrib/ntp/ntpdc/ntpdc.1ntpdcmdoc4
-rw-r--r--contrib/ntp/ntpdc/ntpdc.c4
-rw-r--r--contrib/ntp/ntpdc/ntpdc.html4
-rw-r--r--contrib/ntp/ntpdc/ntpdc.man.in6
-rw-r--r--contrib/ntp/ntpdc/ntpdc.mdoc.in4
-rw-r--r--contrib/ntp/ntpq/Makefile.in4
-rw-r--r--contrib/ntp/ntpq/invoke-ntpq.texi4
-rw-r--r--contrib/ntp/ntpq/libntpq.h2
-rw-r--r--contrib/ntp/ntpq/ntpq-opts.c14
-rw-r--r--contrib/ntp/ntpq/ntpq-opts.h6
-rw-r--r--contrib/ntp/ntpq/ntpq-subs.c16
-rw-r--r--contrib/ntp/ntpq/ntpq.1ntpqman6
-rw-r--r--contrib/ntp/ntpq/ntpq.1ntpqmdoc4
-rw-r--r--contrib/ntp/ntpq/ntpq.c24
-rw-r--r--contrib/ntp/ntpq/ntpq.html4
-rw-r--r--contrib/ntp/ntpq/ntpq.man.in6
-rw-r--r--contrib/ntp/ntpq/ntpq.mdoc.in4
-rw-r--r--contrib/ntp/ntpsnmpd/Makefile.in4
-rw-r--r--contrib/ntp/ntpsnmpd/invoke-ntpsnmpd.texi4
-rw-r--r--contrib/ntp/ntpsnmpd/ntpsnmpd-opts.c14
-rw-r--r--contrib/ntp/ntpsnmpd/ntpsnmpd-opts.h6
-rw-r--r--contrib/ntp/ntpsnmpd/ntpsnmpd.1ntpsnmpdman6
-rw-r--r--contrib/ntp/ntpsnmpd/ntpsnmpd.1ntpsnmpdmdoc4
-rw-r--r--contrib/ntp/ntpsnmpd/ntpsnmpd.html2
-rw-r--r--contrib/ntp/ntpsnmpd/ntpsnmpd.man.in6
-rw-r--r--contrib/ntp/ntpsnmpd/ntpsnmpd.mdoc.in4
-rw-r--r--contrib/ntp/packageinfo.sh2
-rw-r--r--contrib/ntp/parseutil/Makefile.in4
-rw-r--r--contrib/ntp/scripts/Makefile.in4
-rw-r--r--contrib/ntp/scripts/build/Makefile.in4
-rw-r--r--contrib/ntp/scripts/calc_tickadj/Makefile.in4
-rw-r--r--contrib/ntp/scripts/calc_tickadj/calc_tickadj.1calc_tickadjman6
-rw-r--r--contrib/ntp/scripts/calc_tickadj/calc_tickadj.1calc_tickadjmdoc4
-rw-r--r--contrib/ntp/scripts/calc_tickadj/calc_tickadj.html2
-rw-r--r--contrib/ntp/scripts/calc_tickadj/calc_tickadj.man.in6
-rw-r--r--contrib/ntp/scripts/calc_tickadj/calc_tickadj.mdoc.in4
-rw-r--r--contrib/ntp/scripts/calc_tickadj/invoke-calc_tickadj.texi2
-rw-r--r--contrib/ntp/scripts/invoke-plot_summary.texi4
-rw-r--r--contrib/ntp/scripts/invoke-summary.texi4
-rw-r--r--contrib/ntp/scripts/lib/Makefile.in4
-rw-r--r--contrib/ntp/scripts/lib/NTP/Util.pm9
-rw-r--r--contrib/ntp/scripts/ntp-wait/Makefile.in4
-rw-r--r--contrib/ntp/scripts/ntp-wait/invoke-ntp-wait.texi4
-rw-r--r--contrib/ntp/scripts/ntp-wait/ntp-wait-opts4
-rw-r--r--contrib/ntp/scripts/ntp-wait/ntp-wait.1ntp-waitman6
-rw-r--r--contrib/ntp/scripts/ntp-wait/ntp-wait.1ntp-waitmdoc4
-rw-r--r--contrib/ntp/scripts/ntp-wait/ntp-wait.html4
-rw-r--r--contrib/ntp/scripts/ntp-wait/ntp-wait.man.in6
-rw-r--r--contrib/ntp/scripts/ntp-wait/ntp-wait.mdoc.in4
-rw-r--r--contrib/ntp/scripts/ntpsweep/Makefile.in4
-rw-r--r--contrib/ntp/scripts/ntpsweep/invoke-ntpsweep.texi4
-rw-r--r--contrib/ntp/scripts/ntpsweep/ntpsweep-opts4
-rw-r--r--contrib/ntp/scripts/ntpsweep/ntpsweep.1ntpsweepman6
-rw-r--r--contrib/ntp/scripts/ntpsweep/ntpsweep.1ntpsweepmdoc4
-rw-r--r--contrib/ntp/scripts/ntpsweep/ntpsweep.html4
-rw-r--r--contrib/ntp/scripts/ntpsweep/ntpsweep.in3
-rw-r--r--contrib/ntp/scripts/ntpsweep/ntpsweep.man.in6
-rw-r--r--contrib/ntp/scripts/ntpsweep/ntpsweep.mdoc.in4
-rw-r--r--contrib/ntp/scripts/ntptrace/Makefile.in4
-rw-r--r--contrib/ntp/scripts/ntptrace/invoke-ntptrace.texi4
-rw-r--r--contrib/ntp/scripts/ntptrace/ntptrace-opts4
-rw-r--r--contrib/ntp/scripts/ntptrace/ntptrace.1ntptraceman6
-rw-r--r--contrib/ntp/scripts/ntptrace/ntptrace.1ntptracemdoc4
-rw-r--r--contrib/ntp/scripts/ntptrace/ntptrace.html4
-rw-r--r--contrib/ntp/scripts/ntptrace/ntptrace.man.in6
-rw-r--r--contrib/ntp/scripts/ntptrace/ntptrace.mdoc.in4
-rw-r--r--contrib/ntp/scripts/plot_summary-opts4
-rw-r--r--contrib/ntp/scripts/plot_summary.1plot_summaryman6
-rw-r--r--contrib/ntp/scripts/plot_summary.1plot_summarymdoc4
-rw-r--r--contrib/ntp/scripts/plot_summary.html4
-rw-r--r--contrib/ntp/scripts/plot_summary.man.in6
-rw-r--r--contrib/ntp/scripts/plot_summary.mdoc.in4
-rw-r--r--contrib/ntp/scripts/summary-opts4
-rw-r--r--contrib/ntp/scripts/summary.1summaryman6
-rw-r--r--contrib/ntp/scripts/summary.1summarymdoc4
-rw-r--r--contrib/ntp/scripts/summary.html4
-rw-r--r--contrib/ntp/scripts/summary.man.in6
-rw-r--r--contrib/ntp/scripts/summary.mdoc.in4
-rw-r--r--contrib/ntp/scripts/update-leap/Makefile.in4
-rw-r--r--contrib/ntp/scripts/update-leap/invoke-update-leap.texi2
-rw-r--r--contrib/ntp/scripts/update-leap/update-leap-opts4
-rw-r--r--contrib/ntp/scripts/update-leap/update-leap.1update-leapman6
-rw-r--r--contrib/ntp/scripts/update-leap/update-leap.1update-leapmdoc4
-rw-r--r--contrib/ntp/scripts/update-leap/update-leap.html2
-rw-r--r--contrib/ntp/scripts/update-leap/update-leap.man.in6
-rw-r--r--contrib/ntp/scripts/update-leap/update-leap.mdoc.in4
-rw-r--r--contrib/ntp/sntp/Makefile.am41
-rw-r--r--contrib/ntp/sntp/Makefile.in36
-rwxr-xr-xcontrib/ntp/sntp/configure131
-rw-r--r--contrib/ntp/sntp/configure.ac1
-rw-r--r--contrib/ntp/sntp/include/Makefile.in3
-rw-r--r--contrib/ntp/sntp/include/version.def2
-rw-r--r--contrib/ntp/sntp/include/version.texi6
-rw-r--r--contrib/ntp/sntp/invoke-sntp.texi4
-rw-r--r--contrib/ntp/sntp/libevent/Makefile.am2
-rw-r--r--contrib/ntp/sntp/libevent/Makefile.in277
-rw-r--r--contrib/ntp/sntp/libevent/sample/dns-example.c248
-rw-r--r--contrib/ntp/sntp/libevent/sample/event-read-fifo.c162
-rw-r--r--contrib/ntp/sntp/libevent/sample/hello-world.c141
-rw-r--r--contrib/ntp/sntp/libevent/sample/hostcheck.c217
-rw-r--r--contrib/ntp/sntp/libevent/sample/hostcheck.h30
-rw-r--r--contrib/ntp/sntp/libevent/sample/http-server.c418
-rw-r--r--contrib/ntp/sntp/libevent/sample/https-client.c439
-rw-r--r--contrib/ntp/sntp/libevent/sample/include.am53
-rw-r--r--contrib/ntp/sntp/libevent/sample/le-proxy.c288
-rw-r--r--contrib/ntp/sntp/libevent/sample/openssl_hostname_validation.c172
-rw-r--r--contrib/ntp/sntp/libevent/sample/openssl_hostname_validation.h56
-rw-r--r--contrib/ntp/sntp/libevent/sample/signal-test.c75
-rw-r--r--contrib/ntp/sntp/libevent/sample/time-test.c107
-rw-r--r--contrib/ntp/sntp/libevent/test/bench_httpclient.c4
-rw-r--r--contrib/ntp/sntp/libevent/test/regress.c4
-rw-r--r--contrib/ntp/sntp/libevent/test/regress_dns.c5
-rw-r--r--contrib/ntp/sntp/libevent/test/regress_http.c4
-rw-r--r--contrib/ntp/sntp/libevent/test/regress_minheap.c1
-rw-r--r--contrib/ntp/sntp/libevent/test/test-ratelim.c4
-rw-r--r--contrib/ntp/sntp/libevent/test/test-time.c1
-rw-r--r--contrib/ntp/sntp/libopts/Makefile.in3
-rw-r--r--contrib/ntp/sntp/libopts/compat/pathfind.c13
-rw-r--r--contrib/ntp/sntp/log.c21
-rw-r--r--contrib/ntp/sntp/log.h2
-rw-r--r--contrib/ntp/sntp/m4/ntp_libevent.m421
-rw-r--r--contrib/ntp/sntp/m4/ntp_libntp.m415
-rw-r--r--contrib/ntp/sntp/m4/ntp_problemtests.m456
-rw-r--r--contrib/ntp/sntp/m4/ntp_rlimit.m461
-rw-r--r--contrib/ntp/sntp/m4/openldap-thread-check.m49
-rw-r--r--contrib/ntp/sntp/m4/os_cflags.m434
-rw-r--r--contrib/ntp/sntp/m4/version.m42
-rw-r--r--contrib/ntp/sntp/networking.c2
-rw-r--r--contrib/ntp/sntp/scripts/Makefile.in3
-rw-r--r--contrib/ntp/sntp/sntp-opts.c14
-rw-r--r--contrib/ntp/sntp/sntp-opts.h6
-rw-r--r--contrib/ntp/sntp/sntp.1sntpman6
-rw-r--r--contrib/ntp/sntp/sntp.1sntpmdoc4
-rw-r--r--contrib/ntp/sntp/sntp.html4
-rw-r--r--contrib/ntp/sntp/sntp.man.in6
-rw-r--r--contrib/ntp/sntp/sntp.mdoc.in4
-rw-r--r--contrib/ntp/sntp/tests/Makefile.am169
-rw-r--r--contrib/ntp/sntp/tests/Makefile.in698
-rw-r--r--contrib/ntp/sntp/tests/crypto.c31
-rw-r--r--contrib/ntp/sntp/tests/fileHandlingTest.c74
-rw-r--r--contrib/ntp/sntp/tests/fileHandlingTest.h100
-rw-r--r--contrib/ntp/sntp/tests/fileHandlingTest.h.in87
-rw-r--r--contrib/ntp/sntp/tests/g_fileHandlingTest.h64
-rw-r--r--contrib/ntp/sntp/tests/g_networking.cpp5
-rw-r--r--contrib/ntp/sntp/tests/g_packetHandling.cpp264
-rw-r--r--contrib/ntp/sntp/tests/g_packetProcessing.cpp334
-rw-r--r--contrib/ntp/sntp/tests/g_sntptest.h35
-rw-r--r--contrib/ntp/sntp/tests/keyFile.c63
-rw-r--r--contrib/ntp/sntp/tests/kodDatabase.c73
-rw-r--r--contrib/ntp/sntp/tests/kodFile.c74
-rw-r--r--contrib/ntp/sntp/tests/packetHandling.c92
-rw-r--r--contrib/ntp/sntp/tests/packetProcessing.c118
-rw-r--r--contrib/ntp/sntp/tests/run-crypto.c23
-rw-r--r--contrib/ntp/sntp/tests/run-keyFile.c31
-rw-r--r--contrib/ntp/sntp/tests/run-kodDatabase.c33
-rw-r--r--contrib/ntp/sntp/tests/run-kodFile.c35
-rw-r--r--contrib/ntp/sntp/tests/run-networking.c9
-rw-r--r--contrib/ntp/sntp/tests/run-packetHandling.c36
-rw-r--r--contrib/ntp/sntp/tests/run-packetProcessing.c47
-rw-r--r--contrib/ntp/sntp/tests/run-t-log.c57
-rw-r--r--contrib/ntp/sntp/tests/run-utilities.c41
-rw-r--r--contrib/ntp/sntp/tests/sntptest.c33
-rw-r--r--contrib/ntp/sntp/tests/sntptest.h26
-rw-r--r--contrib/ntp/sntp/tests/t-log.c68
-rw-r--r--contrib/ntp/sntp/tests/utilities.c70
-rw-r--r--contrib/ntp/sntp/tests_main.cpp29
-rw-r--r--contrib/ntp/sntp/tests_main.h22
-rw-r--r--contrib/ntp/sntp/unity/Makefile.am4
-rw-r--r--contrib/ntp/sntp/unity/Makefile.in7
-rw-r--r--contrib/ntp/sntp/unity/auto/generate_test_runner.rb311
-rwxr-xr-xcontrib/ntp/sntp/unity/auto/parseOutput.rb191
-rwxr-xr-xcontrib/ntp/sntp/unity/auto/type_sanitizer.rb8
-rwxr-xr-xcontrib/ntp/sntp/unity/auto/unity_test_summary.py135
-rw-r--r--contrib/ntp/sntp/unity/auto/unity_test_summary.rb73
-rw-r--r--contrib/ntp/sntp/unity/unity.c4
-rw-r--r--contrib/ntp/sntp/unity/unity_config.h12
-rw-r--r--contrib/ntp/sntp/unity/unity_internals.h12
-rw-r--r--contrib/ntp/sntp/version.c2
-rw-r--r--contrib/ntp/tests/Makefile.am14
-rw-r--r--contrib/ntp/tests/Makefile.in12
-rw-r--r--contrib/ntp/tests/bug-2803/Makefile.am2
-rw-r--r--contrib/ntp/tests/bug-2803/Makefile.in7
-rw-r--r--contrib/ntp/tests/bug-2803/run-bug-2803.c12
-rw-r--r--contrib/ntp/tests/libntp/Makefile.am631
-rw-r--r--contrib/ntp/tests/libntp/Makefile.in2426
-rw-r--r--contrib/ntp/tests/libntp/a_md5encrypt.c54
-rw-r--r--contrib/ntp/tests/libntp/atoint.c9
-rw-r--r--contrib/ntp/tests/libntp/atouint.c18
-rw-r--r--contrib/ntp/tests/libntp/authkeys.c59
-rw-r--r--contrib/ntp/tests/libntp/buftvtots.c35
-rw-r--r--contrib/ntp/tests/libntp/calendar.c521
-rw-r--r--contrib/ntp/tests/libntp/caljulian.c86
-rw-r--r--contrib/ntp/tests/libntp/caltontp.c7
-rw-r--r--contrib/ntp/tests/libntp/calyearstart.c17
-rw-r--r--contrib/ntp/tests/libntp/clocktime.c85
-rw-r--r--contrib/ntp/tests/libntp/decodenetnum.c54
-rw-r--r--contrib/ntp/tests/libntp/g_a_md5encrypt.cpp89
-rw-r--r--contrib/ntp/tests/libntp/g_atoint.cpp48
-rw-r--r--contrib/ntp/tests/libntp/g_atouint.cpp40
-rw-r--r--contrib/ntp/tests/libntp/g_authkeys.cpp100
-rw-r--r--contrib/ntp/tests/libntp/g_buftvtots.cpp61
-rw-r--r--contrib/ntp/tests/libntp/g_calendar.cpp337
-rw-r--r--contrib/ntp/tests/libntp/g_caljulian.cpp94
-rw-r--r--contrib/ntp/tests/libntp/g_caltontp.cpp49
-rw-r--r--contrib/ntp/tests/libntp/g_calyearstart.cpp43
-rw-r--r--contrib/ntp/tests/libntp/g_clocktime.cpp187
-rw-r--r--contrib/ntp/tests/libntp/g_decodenetnum.cpp93
-rw-r--r--contrib/ntp/tests/libntp/g_hextoint.cpp42
-rw-r--r--contrib/ntp/tests/libntp/g_hextolfp.cpp58
-rw-r--r--contrib/ntp/tests/libntp/g_humandate.cpp41
-rw-r--r--contrib/ntp/tests/libntp/g_lfpfunc.cpp547
-rw-r--r--contrib/ntp/tests/libntp/g_lfptest.h32
-rw-r--r--contrib/ntp/tests/libntp/g_lfptostr.cpp103
-rw-r--r--contrib/ntp/tests/libntp/g_libntptest.cpp27
-rw-r--r--contrib/ntp/tests/libntp/g_libntptest.h15
-rw-r--r--contrib/ntp/tests/libntp/g_modetoa.cpp16
-rw-r--r--contrib/ntp/tests/libntp/g_msyslog.cpp137
-rw-r--r--contrib/ntp/tests/libntp/g_netof.cpp69
-rw-r--r--contrib/ntp/tests/libntp/g_numtoa.cpp18
-rw-r--r--contrib/ntp/tests/libntp/g_numtohost.cpp15
-rw-r--r--contrib/ntp/tests/libntp/g_octtoint.cpp57
-rw-r--r--contrib/ntp/tests/libntp/g_prettydate.cpp16
-rw-r--r--contrib/ntp/tests/libntp/g_recvbuff.cpp38
-rw-r--r--contrib/ntp/tests/libntp/g_refnumtoa.cpp52
-rw-r--r--contrib/ntp/tests/libntp/g_sfptostr.cpp71
-rw-r--r--contrib/ntp/tests/libntp/g_sockaddrtest.h59
-rw-r--r--contrib/ntp/tests/libntp/g_socktoa.cpp100
-rw-r--r--contrib/ntp/tests/libntp/g_ssl_init.cpp50
-rw-r--r--contrib/ntp/tests/libntp/g_statestr.cpp28
-rw-r--r--contrib/ntp/tests/libntp/g_strtolfp.cpp107
-rw-r--r--contrib/ntp/tests/libntp/g_timespecops.cpp475
-rw-r--r--contrib/ntp/tests/libntp/g_timestructs.cpp156
-rw-r--r--contrib/ntp/tests/libntp/g_timestructs.h185
-rw-r--r--contrib/ntp/tests/libntp/g_timevalops.cpp480
-rw-r--r--contrib/ntp/tests/libntp/g_tstotv.cpp57
-rw-r--r--contrib/ntp/tests/libntp/g_tvtots.cpp54
-rw-r--r--contrib/ntp/tests/libntp/g_uglydate.cpp18
-rw-r--r--contrib/ntp/tests/libntp/g_vi64ops.cpp64
-rw-r--r--contrib/ntp/tests/libntp/g_ymd2yd.cpp23
-rw-r--r--contrib/ntp/tests/libntp/hextoint.c6
-rw-r--r--contrib/ntp/tests/libntp/hextolfp.c44
-rw-r--r--contrib/ntp/tests/libntp/humandate.c22
-rw-r--r--contrib/ntp/tests/libntp/lfpfunc.c397
-rw-r--r--contrib/ntp/tests/libntp/lfptest.c11
-rw-r--r--contrib/ntp/tests/libntp/lfptest.h20
-rw-r--r--contrib/ntp/tests/libntp/lfptostr.c76
-rw-r--r--contrib/ntp/tests/libntp/modetoa.c13
-rw-r--r--contrib/ntp/tests/libntp/msyslog.c22
-rw-r--r--contrib/ntp/tests/libntp/netof.c8
-rw-r--r--contrib/ntp/tests/libntp/numtoa.c30
-rw-r--r--contrib/ntp/tests/libntp/numtohost.c9
-rw-r--r--contrib/ntp/tests/libntp/octtoint.c10
-rw-r--r--contrib/ntp/tests/libntp/prettydate.c5
-rw-r--r--contrib/ntp/tests/libntp/recvbuff.c4
-rw-r--r--contrib/ntp/tests/libntp/refidsmear.c9
-rw-r--r--contrib/ntp/tests/libntp/refnumtoa.c22
-rw-r--r--contrib/ntp/tests/libntp/run-a_md5encrypt.c29
-rw-r--r--contrib/ntp/tests/libntp/run-atoint.c19
-rw-r--r--contrib/ntp/tests/libntp/run-atouint.c28
-rw-r--r--contrib/ntp/tests/libntp/run-authkeys.c34
-rw-r--r--contrib/ntp/tests/libntp/run-buftvtots.c28
-rw-r--r--contrib/ntp/tests/libntp/run-calendar.c62
-rw-r--r--contrib/ntp/tests/libntp/run-caljulian.c28
-rw-r--r--contrib/ntp/tests/libntp/run-caltontp.c16
-rw-r--r--contrib/ntp/tests/libntp/run-calyearstart.c22
-rw-r--r--contrib/ntp/tests/libntp/run-clocktime.c42
-rw-r--r--contrib/ntp/tests/libntp/run-decodenetnum.c22
-rw-r--r--contrib/ntp/tests/libntp/run-hextoint.c20
-rw-r--r--contrib/ntp/tests/libntp/run-hextolfp.c23
-rw-r--r--contrib/ntp/tests/libntp/run-humandate.c11
-rw-r--r--contrib/ntp/tests/libntp/run-lfpfunc.c48
-rw-r--r--contrib/ntp/tests/libntp/run-lfptostr.c29
-rw-r--r--contrib/ntp/tests/libntp/run-modetoa.c12
-rw-r--r--contrib/ntp/tests/libntp/run-msyslog.c25
-rw-r--r--contrib/ntp/tests/libntp/run-netof.c19
-rw-r--r--contrib/ntp/tests/libntp/run-numtoa.c13
-rw-r--r--contrib/ntp/tests/libntp/run-numtohost.c11
-rw-r--r--contrib/ntp/tests/libntp/run-octtoint.c22
-rw-r--r--contrib/ntp/tests/libntp/run-prettydate.c12
-rw-r--r--contrib/ntp/tests/libntp/run-recvbuff.c14
-rw-r--r--contrib/ntp/tests/libntp/run-refidsmear.c14
-rw-r--r--contrib/ntp/tests/libntp/run-refnumtoa.c17
-rw-r--r--contrib/ntp/tests/libntp/run-sfptostr.c23
-rw-r--r--contrib/ntp/tests/libntp/run-socktoa.c24
-rw-r--r--contrib/ntp/tests/libntp/run-ssl_init.c28
-rw-r--r--contrib/ntp/tests/libntp/run-statestr.c18
-rw-r--r--contrib/ntp/tests/libntp/run-strtolfp.c22
-rw-r--r--contrib/ntp/tests/libntp/run-timespecops.c124
-rw-r--r--contrib/ntp/tests/libntp/run-timevalops.c123
-rw-r--r--contrib/ntp/tests/libntp/run-tstotv.c15
-rw-r--r--contrib/ntp/tests/libntp/run-tvtots.c14
-rw-r--r--contrib/ntp/tests/libntp/run-uglydate.c11
-rw-r--r--contrib/ntp/tests/libntp/run-vi64ops.c22
-rw-r--r--contrib/ntp/tests/libntp/run-ymd2yd.c16
-rw-r--r--contrib/ntp/tests/libntp/sfptostr.c10
-rw-r--r--contrib/ntp/tests/libntp/sockaddrtest.c51
-rw-r--r--contrib/ntp/tests/libntp/sockaddrtest.h50
-rw-r--r--contrib/ntp/tests/libntp/socktoa.c56
-rw-r--r--contrib/ntp/tests/libntp/ssl_init.c23
-rw-r--r--contrib/ntp/tests/libntp/statestr.c31
-rw-r--r--contrib/ntp/tests/libntp/strtolfp.c15
-rw-r--r--contrib/ntp/tests/libntp/test-libntp.c17
-rw-r--r--contrib/ntp/tests/libntp/test-libntp.h5
-rw-r--r--contrib/ntp/tests/libntp/timespecops.c259
-rw-r--r--contrib/ntp/tests/libntp/timevalops.c264
-rw-r--r--contrib/ntp/tests/libntp/tstotv.c11
-rw-r--r--contrib/ntp/tests/libntp/tvtots.c38
-rw-r--r--contrib/ntp/tests/libntp/uglydate.c4
-rw-r--r--contrib/ntp/tests/libntp/vi64ops.c42
-rw-r--r--contrib/ntp/tests/libntp/ymd2yd.c36
-rw-r--r--contrib/ntp/tests/ntpd/Makefile.am197
-rw-r--r--contrib/ntp/tests/ntpd/Makefile.in663
-rw-r--r--contrib/ntp/tests/ntpd/leapsec.c (renamed from contrib/ntp/tests/ntpd/leapsec.cpp)698
-rw-r--r--contrib/ntp/tests/ntpd/ntp_prio_q.c262
-rw-r--r--contrib/ntp/tests/ntpd/ntp_restrict.c198
-rw-r--r--contrib/ntp/tests/ntpd/ntpdtest.cpp27
-rw-r--r--contrib/ntp/tests/ntpd/ntpdtest.h15
-rw-r--r--contrib/ntp/tests/ntpd/rc_cmdlength.c38
-rw-r--r--contrib/ntp/tests/ntpd/run-leapsec.c122
-rw-r--r--contrib/ntp/tests/ntpd/run-ntp_prio_q.c69
-rw-r--r--contrib/ntp/tests/ntpd/run-ntp_restrict.c68
-rw-r--r--contrib/ntp/tests/ntpd/run-rc_cmdlength.c57
-rw-r--r--contrib/ntp/tests/ntpd/run-t-ntp_scanner.c72
-rw-r--r--contrib/ntp/tests/ntpd/run-t-ntp_signd.c66
-rw-r--r--contrib/ntp/tests/ntpd/t-ntp_scanner.c136
-rw-r--r--contrib/ntp/tests/ntpd/t-ntp_signd.c116
-rw-r--r--contrib/ntp/tests/ntpq/Makefile.am96
-rw-r--r--contrib/ntp/tests/ntpq/Makefile.in1286
-rw-r--r--contrib/ntp/tests/ntpq/run-t-ntpq.c54
-rw-r--r--contrib/ntp/tests/ntpq/t-ntpq.c37
-rw-r--r--contrib/ntp/tests/sandbox/Makefile.am25
-rw-r--r--contrib/ntp/tests/sandbox/Makefile.in42
-rw-r--r--contrib/ntp/tests/sandbox/run-modetoa.c11
-rw-r--r--contrib/ntp/tests/sandbox/run-uglydate.c13
-rw-r--r--contrib/ntp/tests/sandbox/run-ut-2803.c11
-rw-r--r--contrib/ntp/tests/sandbox/smeartest.c12
-rw-r--r--contrib/ntp/tests/sec-2853/Makefile.am2
-rw-r--r--contrib/ntp/tests/sec-2853/Makefile.in8
-rw-r--r--contrib/ntp/tests/sec-2853/run-sec-2853.c13
-rw-r--r--contrib/ntp/tests/sec-2853/sec-2853.c4
-rw-r--r--contrib/ntp/util/Makefile.in4
-rw-r--r--contrib/ntp/util/invoke-ntp-keygen.texi4
-rw-r--r--contrib/ntp/util/ntp-keygen-opts.c14
-rw-r--r--contrib/ntp/util/ntp-keygen-opts.h6
-rw-r--r--contrib/ntp/util/ntp-keygen.1ntp-keygenman6
-rw-r--r--contrib/ntp/util/ntp-keygen.1ntp-keygenmdoc4
-rw-r--r--contrib/ntp/util/ntp-keygen.c6
-rw-r--r--contrib/ntp/util/ntp-keygen.html4
-rw-r--r--contrib/ntp/util/ntp-keygen.man.in6
-rw-r--r--contrib/ntp/util/ntp-keygen.mdoc.in4
-rw-r--r--contrib/ntp/util/ntptime.c4
-rw-r--r--crypto/openssl/CHANGES437
-rwxr-xr-xcrypto/openssl/Configure224
-rw-r--r--crypto/openssl/FAQ40
-rw-r--r--crypto/openssl/Makefile46
-rw-r--r--crypto/openssl/Makefile.org38
-rw-r--r--crypto/openssl/NEWS25
-rw-r--r--crypto/openssl/README40
-rw-r--r--crypto/openssl/apps/apps.c254
-rw-r--r--crypto/openssl/apps/apps.h22
-rw-r--r--crypto/openssl/apps/ca.c22
-rw-r--r--crypto/openssl/apps/ciphers.c16
-rw-r--r--crypto/openssl/apps/cms.c146
-rw-r--r--crypto/openssl/apps/crl.c92
-rw-r--r--crypto/openssl/apps/dgst.c38
-rw-r--r--crypto/openssl/apps/dhparam.c9
-rw-r--r--crypto/openssl/apps/ecparam.c3
-rw-r--r--crypto/openssl/apps/genrsa.c2
-rw-r--r--crypto/openssl/apps/ocsp.c96
-rw-r--r--crypto/openssl/apps/openssl.cnf2
-rw-r--r--crypto/openssl/apps/pkcs8.c10
-rw-r--r--crypto/openssl/apps/s_apps.h33
-rw-r--r--crypto/openssl/apps/s_cb.c792
-rw-r--r--crypto/openssl/apps/s_client.c354
-rw-r--r--crypto/openssl/apps/s_server.c782
-rw-r--r--crypto/openssl/apps/s_socket.c11
-rw-r--r--crypto/openssl/apps/smime.c6
-rw-r--r--crypto/openssl/apps/speed.c129
-rw-r--r--crypto/openssl/apps/verify.c7
-rw-r--r--crypto/openssl/apps/x509.c74
-rwxr-xr-xcrypto/openssl/config25
-rw-r--r--crypto/openssl/crypto/Makefile8
-rw-r--r--crypto/openssl/crypto/aes/Makefile20
-rw-r--r--crypto/openssl/crypto/aes/aes_wrap.c186
-rw-r--r--crypto/openssl/crypto/aes/aes_x86core.c6
-rwxr-xr-xcrypto/openssl/crypto/aes/asm/aes-586.pl283
-rwxr-xr-xcrypto/openssl/crypto/aes/asm/aes-armv4.pl139
-rwxr-xr-xcrypto/openssl/crypto/aes/asm/aes-mips.pl813
-rwxr-xr-xcrypto/openssl/crypto/aes/asm/aes-ppc.pl113
-rwxr-xr-xcrypto/openssl/crypto/aes/asm/aes-x86_64.pl250
-rwxr-xr-xcrypto/openssl/crypto/aes/asm/aesni-mb-x86_64.pl1395
-rwxr-xr-xcrypto/openssl/crypto/aes/asm/aesni-sha1-x86_64.pl1121
-rwxr-xr-xcrypto/openssl/crypto/aes/asm/aesni-sha256-x86_64.pl1708
-rwxr-xr-xcrypto/openssl/crypto/aes/asm/aesni-x86.pl644
-rwxr-xr-xcrypto/openssl/crypto/aes/asm/aesni-x86_64.pl2917
-rwxr-xr-xcrypto/openssl/crypto/aes/asm/aesp8-ppc.pl1942
-rwxr-xr-xcrypto/openssl/crypto/aes/asm/aest4-sparcv9.pl919
-rwxr-xr-xcrypto/openssl/crypto/aes/asm/aesv8-armx.pl989
-rwxr-xr-xcrypto/openssl/crypto/aes/asm/bsaes-armv7.pl2469
-rwxr-xr-xcrypto/openssl/crypto/aes/asm/bsaes-x86_64.pl74
-rwxr-xr-xcrypto/openssl/crypto/aes/asm/vpaes-ppc.pl1512
-rwxr-xr-xcrypto/openssl/crypto/aes/asm/vpaes-x86.pl110
-rwxr-xr-xcrypto/openssl/crypto/aes/asm/vpaes-x86_64.pl100
-rw-r--r--crypto/openssl/crypto/arm64cpuid.S46
-rw-r--r--crypto/openssl/crypto/arm_arch.h35
-rw-r--r--crypto/openssl/crypto/armcap.c97
-rw-r--r--crypto/openssl/crypto/armv4cpuid.S109
-rw-r--r--crypto/openssl/crypto/asn1/Makefile5
-rw-r--r--crypto/openssl/crypto/asn1/a_gentm.c46
-rw-r--r--crypto/openssl/crypto/asn1/a_time.c30
-rw-r--r--crypto/openssl/crypto/asn1/a_utctm.c92
-rw-r--r--crypto/openssl/crypto/asn1/ameth_lib.c24
-rw-r--r--crypto/openssl/crypto/asn1/asn1.h10
-rw-r--r--crypto/openssl/crypto/asn1/asn1_locl.h3
-rw-r--r--crypto/openssl/crypto/asn1/t_x509.c15
-rw-r--r--crypto/openssl/crypto/asn1/x_crl.c4
-rw-r--r--crypto/openssl/crypto/asn1/x_x509.c20
-rw-r--r--crypto/openssl/crypto/bio/b_dump.c25
-rw-r--r--crypto/openssl/crypto/bio/b_sock.c8
-rw-r--r--crypto/openssl/crypto/bio/bio.h8
-rw-r--r--crypto/openssl/crypto/bio/bio_err.c2
-rw-r--r--crypto/openssl/crypto/bio/bss_acpt.c2
-rw-r--r--crypto/openssl/crypto/bio/bss_conn.c2
-rw-r--r--crypto/openssl/crypto/bio/bss_dgram.c84
-rw-r--r--crypto/openssl/crypto/bio/bss_fd.c22
-rw-r--r--crypto/openssl/crypto/bn/Makefile20
-rwxr-xr-xcrypto/openssl/crypto/bn/asm/armv4-gf2m.pl169
-rwxr-xr-xcrypto/openssl/crypto/bn/asm/armv4-mont.pl484
-rwxr-xr-xcrypto/openssl/crypto/bn/asm/mips-mont.pl2
-rwxr-xr-xcrypto/openssl/crypto/bn/asm/mips.pl2
-rw-r--r--crypto/openssl/crypto/bn/asm/mips3.s2201
-rwxr-xr-xcrypto/openssl/crypto/bn/asm/modexp512-x86_64.pl1497
-rwxr-xr-xcrypto/openssl/crypto/bn/asm/ppc-mont.pl1
-rw-r--r--crypto/openssl/crypto/bn/asm/ppc.pl10
-rwxr-xr-xcrypto/openssl/crypto/bn/asm/ppc64-mont.pl660
-rwxr-xr-xcrypto/openssl/crypto/bn/asm/rsaz-avx2.pl1898
-rwxr-xr-xcrypto/openssl/crypto/bn/asm/rsaz-x86_64.pl2144
-rwxr-xr-xcrypto/openssl/crypto/bn/asm/sparct4-mont.pl1222
-rwxr-xr-xcrypto/openssl/crypto/bn/asm/sparcv9-gf2m.pl190
-rwxr-xr-xcrypto/openssl/crypto/bn/asm/vis3-mont.pl373
-rw-r--r--crypto/openssl/crypto/bn/asm/x86_64-gcc.c110
-rwxr-xr-xcrypto/openssl/crypto/bn/asm/x86_64-mont.pl1289
-rwxr-xr-xcrypto/openssl/crypto/bn/asm/x86_64-mont5.pl2908
-rw-r--r--crypto/openssl/crypto/bn/bn.h18
-rw-r--r--crypto/openssl/crypto/bn/bn_asm.c243
-rw-r--r--crypto/openssl/crypto/bn/bn_exp.c326
-rw-r--r--crypto/openssl/crypto/bn/bn_gf2m.c3
-rw-r--r--crypto/openssl/crypto/bn/bn_lcl.h27
-rw-r--r--crypto/openssl/crypto/bn/bntest.c3
-rw-r--r--crypto/openssl/crypto/bn/rsaz_exp.c346
-rw-r--r--crypto/openssl/crypto/bn/rsaz_exp.h56
-rw-r--r--crypto/openssl/crypto/buffer/buf_str.c11
-rw-r--r--crypto/openssl/crypto/buffer/buffer.h1
-rw-r--r--crypto/openssl/crypto/camellia/Makefile2
-rwxr-xr-xcrypto/openssl/crypto/camellia/asm/cmll-x86_64.pl4
-rwxr-xr-xcrypto/openssl/crypto/camellia/asm/cmllt4-sparcv9.pl929
-rw-r--r--crypto/openssl/crypto/cast/cast_lcl.h2
-rw-r--r--crypto/openssl/crypto/cms/Makefile49
-rw-r--r--crypto/openssl/crypto/cms/cms.h52
-rw-r--r--crypto/openssl/crypto/cms/cms_asn1.c86
-rw-r--r--crypto/openssl/crypto/cms/cms_env.c320
-rw-r--r--crypto/openssl/crypto/cms/cms_err.c18
-rw-r--r--crypto/openssl/crypto/cms/cms_kari.c465
-rw-r--r--crypto/openssl/crypto/cms/cms_lcl.h32
-rw-r--r--crypto/openssl/crypto/cms/cms_lib.c59
-rw-r--r--crypto/openssl/crypto/cms/cms_sd.c205
-rw-r--r--crypto/openssl/crypto/cms/cms_smime.c54
-rw-r--r--crypto/openssl/crypto/cryptlib.c35
-rw-r--r--crypto/openssl/crypto/cversion.c4
-rw-r--r--crypto/openssl/crypto/des/Makefile2
-rw-r--r--crypto/openssl/crypto/des/asm/des-586.pl4
-rw-r--r--crypto/openssl/crypto/des/asm/des_enc.m42
-rwxr-xr-xcrypto/openssl/crypto/des/asm/dest4-sparcv9.pl617
-rw-r--r--crypto/openssl/crypto/des/des_locl.h4
-rw-r--r--crypto/openssl/crypto/des/read_pwd.c2
-rw-r--r--crypto/openssl/crypto/dh/Makefile50
-rw-r--r--crypto/openssl/crypto/dh/dh.h105
-rw-r--r--crypto/openssl/crypto/dh/dh_ameth.c519
-rw-r--r--crypto/openssl/crypto/dh/dh_asn1.c98
-rw-r--r--crypto/openssl/crypto/dh/dh_check.c46
-rw-r--r--crypto/openssl/crypto/dh/dh_err.c8
-rw-r--r--crypto/openssl/crypto/dh/dh_kdf.c187
-rw-r--r--crypto/openssl/crypto/dh/dh_key.c14
-rw-r--r--crypto/openssl/crypto/dh/dh_pmeth.c322
-rw-r--r--crypto/openssl/crypto/dh/dh_rfc5114.c285
-rw-r--r--crypto/openssl/crypto/dh/dhtest.c323
-rw-r--r--crypto/openssl/crypto/dsa/dsa.h3
-rw-r--r--crypto/openssl/crypto/dsa/dsa_ameth.c6
-rw-r--r--crypto/openssl/crypto/dsa/dsa_err.c5
-rw-r--r--crypto/openssl/crypto/dsa/dsa_gen.c369
-rw-r--r--crypto/openssl/crypto/dsa/dsa_locl.h8
-rw-r--r--crypto/openssl/crypto/dsa/dsa_ossl.c6
-rw-r--r--crypto/openssl/crypto/dsa/dsa_pmeth.c4
-rw-r--r--crypto/openssl/crypto/ebcdic.c2
-rw-r--r--crypto/openssl/crypto/ec/Makefile41
-rwxr-xr-xcrypto/openssl/crypto/ec/asm/ecp_nistz256-avx2.pl2093
-rwxr-xr-xcrypto/openssl/crypto/ec/asm/ecp_nistz256-x86_64.pl2997
-rw-r--r--crypto/openssl/crypto/ec/ec.h91
-rw-r--r--crypto/openssl/crypto/ec/ec_ameth.c340
-rw-r--r--crypto/openssl/crypto/ec/ec_curve.c643
-rw-r--r--crypto/openssl/crypto/ec/ec_cvt.c12
-rw-r--r--crypto/openssl/crypto/ec/ec_err.c15
-rw-r--r--crypto/openssl/crypto/ec/ec_lcl.h25
-rw-r--r--crypto/openssl/crypto/ec/ec_lib.c81
-rw-r--r--crypto/openssl/crypto/ec/ec_pmeth.c220
-rw-r--r--crypto/openssl/crypto/ec/eck_prn.c8
-rw-r--r--crypto/openssl/crypto/ec/ecp_nistp521.c10
-rw-r--r--crypto/openssl/crypto/ec/ecp_nistz256.c1521
-rw-r--r--crypto/openssl/crypto/ec/ecp_nistz256_table.c9533
-rw-r--r--crypto/openssl/crypto/ecdh/Makefile12
-rw-r--r--crypto/openssl/crypto/ecdh/ecdh.h7
-rw-r--r--crypto/openssl/crypto/ecdh/ecdhtest.c170
-rw-r--r--crypto/openssl/crypto/ecdh/ech_kdf.c111
-rw-r--r--crypto/openssl/crypto/ecdh/ech_ossl.c10
-rw-r--r--crypto/openssl/crypto/ecdsa/ecdsa.h75
-rw-r--r--crypto/openssl/crypto/ecdsa/ecs_err.c1
-rw-r--r--crypto/openssl/crypto/ecdsa/ecs_lib.c77
-rw-r--r--crypto/openssl/crypto/ecdsa/ecs_locl.h6
-rw-r--r--crypto/openssl/crypto/ecdsa/ecs_ossl.c28
-rw-r--r--crypto/openssl/crypto/engine/Makefile18
-rw-r--r--crypto/openssl/crypto/engine/eng_all.c3
-rw-r--r--crypto/openssl/crypto/engine/eng_cryptodev.c70
-rw-r--r--crypto/openssl/crypto/engine/eng_rsax.c701
-rw-r--r--crypto/openssl/crypto/engine/engine.h1
-rw-r--r--crypto/openssl/crypto/evp/Makefile52
-rw-r--r--crypto/openssl/crypto/evp/c_allc.c11
-rw-r--r--crypto/openssl/crypto/evp/digest.c12
-rw-r--r--crypto/openssl/crypto/evp/e_aes.c962
-rw-r--r--crypto/openssl/crypto/evp/e_aes_cbc_hmac_sha1.c460
-rw-r--r--crypto/openssl/crypto/evp/e_aes_cbc_hmac_sha256.c973
-rw-r--r--crypto/openssl/crypto/evp/e_camellia.c321
-rw-r--r--crypto/openssl/crypto/evp/e_des.c59
-rw-r--r--crypto/openssl/crypto/evp/e_des3.c273
-rw-r--r--crypto/openssl/crypto/evp/e_null.c3
-rw-r--r--crypto/openssl/crypto/evp/encode.c2
-rw-r--r--crypto/openssl/crypto/evp/evp.h56
-rw-r--r--crypto/openssl/crypto/evp/evp_enc.c17
-rw-r--r--crypto/openssl/crypto/evp/evp_err.c5
-rw-r--r--crypto/openssl/crypto/evp/evp_extra_test.c2
-rw-r--r--crypto/openssl/crypto/evp/evp_fips.c310
-rw-r--r--crypto/openssl/crypto/evp/evp_lib.c62
-rw-r--r--crypto/openssl/crypto/evp/evp_locl.h3
-rw-r--r--crypto/openssl/crypto/evp/evp_test.c202
-rw-r--r--crypto/openssl/crypto/evp/evptests.txt67
-rw-r--r--crypto/openssl/crypto/evp/m_dss.c2
-rw-r--r--crypto/openssl/crypto/evp/m_dss1.c3
-rw-r--r--crypto/openssl/crypto/evp/m_ecdsa.c2
-rw-r--r--crypto/openssl/crypto/evp/m_sha1.c28
-rw-r--r--crypto/openssl/crypto/evp/m_sigver.c44
-rw-r--r--crypto/openssl/crypto/evp/p_lib.c2
-rw-r--r--crypto/openssl/crypto/evp/pmeth_lib.c6
-rw-r--r--crypto/openssl/crypto/hmac/hm_ameth.c2
-rw-r--r--crypto/openssl/crypto/hmac/hmac.c10
-rw-r--r--crypto/openssl/crypto/hmac/hmactest.c3
-rw-r--r--crypto/openssl/crypto/jpake/jpake.c1
-rw-r--r--crypto/openssl/crypto/md32_common.h38
-rw-r--r--crypto/openssl/crypto/md5/Makefile3
-rwxr-xr-xcrypto/openssl/crypto/md5/asm/md5-sparcv9.pl430
-rw-r--r--crypto/openssl/crypto/md5/md5_locl.h2
-rw-r--r--crypto/openssl/crypto/modes/Makefile24
-rwxr-xr-xcrypto/openssl/crypto/modes/asm/aesni-gcm-x86_64.pl1057
-rwxr-xr-xcrypto/openssl/crypto/modes/asm/ghash-armv4.pl232
-rwxr-xr-xcrypto/openssl/crypto/modes/asm/ghash-s390x.pl6
-rwxr-xr-xcrypto/openssl/crypto/modes/asm/ghash-sparcv9.pl247
-rwxr-xr-xcrypto/openssl/crypto/modes/asm/ghash-x86.pl199
-rwxr-xr-xcrypto/openssl/crypto/modes/asm/ghash-x86_64.pl1149
-rwxr-xr-xcrypto/openssl/crypto/modes/asm/ghashp8-ppc.pl234
-rwxr-xr-xcrypto/openssl/crypto/modes/asm/ghashv8-armx.pl409
-rw-r--r--crypto/openssl/crypto/modes/cbc128.c2
-rw-r--r--crypto/openssl/crypto/modes/gcm128.c98
-rw-r--r--crypto/openssl/crypto/modes/modes.h10
-rw-r--r--crypto/openssl/crypto/modes/modes_lcl.h50
-rw-r--r--crypto/openssl/crypto/modes/wrap128.c138
-rw-r--r--crypto/openssl/crypto/o_str.c2
-rw-r--r--crypto/openssl/crypto/o_time.c126
-rw-r--r--crypto/openssl/crypto/o_time.h2
-rw-r--r--crypto/openssl/crypto/objects/obj_dat.h234
-rw-r--r--crypto/openssl/crypto/objects/obj_mac.h163
-rw-r--r--crypto/openssl/crypto/objects/obj_mac.num38
-rw-r--r--crypto/openssl/crypto/objects/obj_xref.h25
-rw-r--r--crypto/openssl/crypto/objects/obj_xref.txt12
-rw-r--r--crypto/openssl/crypto/objects/objects.txt58
-rwxr-xr-xcrypto/openssl/crypto/objects/objxref.pl3
-rw-r--r--crypto/openssl/crypto/ocsp/ocsp.h17
-rw-r--r--crypto/openssl/crypto/ocsp/ocsp_ht.c151
-rw-r--r--crypto/openssl/crypto/ocsp/ocsp_lib.c2
-rw-r--r--crypto/openssl/crypto/opensslconf.h12
-rw-r--r--crypto/openssl/crypto/opensslv.h6
-rw-r--r--crypto/openssl/crypto/ossl_typ.h2
-rw-r--r--crypto/openssl/crypto/pem/Makefile13
-rw-r--r--crypto/openssl/crypto/pem/pem.h12
-rw-r--r--crypto/openssl/crypto/pem/pem_all.c5
-rw-r--r--crypto/openssl/crypto/pem/pem_err.c4
-rw-r--r--crypto/openssl/crypto/pem/pem_lib.c17
-rw-r--r--crypto/openssl/crypto/pem/pem_pkey.c50
-rwxr-xr-xcrypto/openssl/crypto/perlasm/ppc-xlate.pl81
-rwxr-xr-xcrypto/openssl/crypto/perlasm/sparcv9_modes.pl1687
-rwxr-xr-xcrypto/openssl/crypto/perlasm/x86_64-xlate.pl86
-rw-r--r--crypto/openssl/crypto/perlasm/x86asm.pl38
-rwxr-xr-xcrypto/openssl/crypto/perlasm/x86gas.pl13
-rwxr-xr-xcrypto/openssl/crypto/perlasm/x86masm.pl4
-rw-r--r--crypto/openssl/crypto/perlasm/x86nasm.pl4
-rw-r--r--crypto/openssl/crypto/pkcs12/p12_decr.c12
-rw-r--r--crypto/openssl/crypto/pkcs12/p12_p8e.c6
-rw-r--r--crypto/openssl/crypto/ppc_arch.h10
-rw-r--r--crypto/openssl/crypto/ppccap.c54
-rwxr-xr-xcrypto/openssl/crypto/ppccpuid.pl16
-rw-r--r--crypto/openssl/crypto/rc4/Makefile4
-rw-r--r--crypto/openssl/crypto/rc4/asm/rc4-586.pl8
-rw-r--r--crypto/openssl/crypto/rc4/rc4_enc.c2
-rw-r--r--crypto/openssl/crypto/rc5/rc5_locl.h5
-rw-r--r--crypto/openssl/crypto/rsa/Makefile15
-rw-r--r--crypto/openssl/crypto/rsa/rsa.h58
-rw-r--r--crypto/openssl/crypto/rsa/rsa_ameth.c538
-rw-r--r--crypto/openssl/crypto/rsa/rsa_asn1.c8
-rw-r--r--crypto/openssl/crypto/rsa/rsa_err.c18
-rw-r--r--crypto/openssl/crypto/rsa/rsa_oaep.c110
-rw-r--r--crypto/openssl/crypto/rsa/rsa_pmeth.c159
-rw-r--r--crypto/openssl/crypto/rsa/rsa_sign.c15
-rw-r--r--crypto/openssl/crypto/sha/Makefile17
-rw-r--r--crypto/openssl/crypto/sha/asm/sha1-586.pl357
-rwxr-xr-xcrypto/openssl/crypto/sha/asm/sha1-armv4-large.pl451
-rwxr-xr-xcrypto/openssl/crypto/sha/asm/sha1-armv8.pl338
-rwxr-xr-xcrypto/openssl/crypto/sha/asm/sha1-mb-x86_64.pl1574
-rwxr-xr-xcrypto/openssl/crypto/sha/asm/sha1-mips.pl98
-rwxr-xr-xcrypto/openssl/crypto/sha/asm/sha1-ppc.pl46
-rwxr-xr-xcrypto/openssl/crypto/sha/asm/sha1-sparcv9.pl165
-rwxr-xr-xcrypto/openssl/crypto/sha/asm/sha1-x86_64.pl1210
-rwxr-xr-xcrypto/openssl/crypto/sha/asm/sha256-586.pl1266
-rwxr-xr-xcrypto/openssl/crypto/sha/asm/sha256-armv4.pl644
-rwxr-xr-xcrypto/openssl/crypto/sha/asm/sha256-mb-x86_64.pl1560
-rwxr-xr-xcrypto/openssl/crypto/sha/asm/sha512-586.pl517
-rwxr-xr-xcrypto/openssl/crypto/sha/asm/sha512-armv4.pl69
-rwxr-xr-xcrypto/openssl/crypto/sha/asm/sha512-armv8.pl422
-rwxr-xr-xcrypto/openssl/crypto/sha/asm/sha512-ia64.pl351
-rwxr-xr-xcrypto/openssl/crypto/sha/asm/sha512-mips.pl79
-rwxr-xr-xcrypto/openssl/crypto/sha/asm/sha512-ppc.pl460
-rwxr-xr-xcrypto/openssl/crypto/sha/asm/sha512-sparcv9.pl320
-rwxr-xr-xcrypto/openssl/crypto/sha/asm/sha512-x86_64.pl2043
-rwxr-xr-xcrypto/openssl/crypto/sha/asm/sha512p8-ppc.pl424
-rw-r--r--crypto/openssl/crypto/sha/sha512.c13
-rw-r--r--crypto/openssl/crypto/sparc_arch.h101
-rw-r--r--crypto/openssl/crypto/sparccpuid.S127
-rw-r--r--crypto/openssl/crypto/sparcv9cap.c157
-rw-r--r--crypto/openssl/crypto/srp/Makefile3
-rw-r--r--crypto/openssl/crypto/srp/srptest.c1
-rw-r--r--crypto/openssl/crypto/stack/safestack.h148
-rw-r--r--crypto/openssl/crypto/stack/stack.c34
-rw-r--r--crypto/openssl/crypto/stack/stack.h1
-rw-r--r--crypto/openssl/crypto/symhacks.h34
-rw-r--r--crypto/openssl/crypto/ts/ts_rsp_sign.c7
-rw-r--r--crypto/openssl/crypto/ts/ts_rsp_verify.c2
-rw-r--r--crypto/openssl/crypto/ui/ui_openssl.c2
-rwxr-xr-xcrypto/openssl/crypto/whrlpool/asm/wp-mmx.pl42
-rwxr-xr-xcrypto/openssl/crypto/whrlpool/asm/wp-x86_64.pl43
-rw-r--r--crypto/openssl/crypto/x509/Makefile22
-rw-r--r--crypto/openssl/crypto/x509/verify_extra_test.c3
-rw-r--r--crypto/openssl/crypto/x509/vpm_int.h70
-rw-r--r--crypto/openssl/crypto/x509/x509.h26
-rw-r--r--crypto/openssl/crypto/x509/x509_cmp.c159
-rw-r--r--crypto/openssl/crypto/x509/x509_err.c10
-rw-r--r--crypto/openssl/crypto/x509/x509_lu.c26
-rw-r--r--crypto/openssl/crypto/x509/x509_set.c5
-rw-r--r--crypto/openssl/crypto/x509/x509_trs.c8
-rw-r--r--crypto/openssl/crypto/x509/x509_txt.c20
-rw-r--r--crypto/openssl/crypto/x509/x509_vfy.c338
-rw-r--r--crypto/openssl/crypto/x509/x509_vfy.h56
-rw-r--r--crypto/openssl/crypto/x509/x509_vpm.c246
-rw-r--r--crypto/openssl/crypto/x509/x_all.c14
-rw-r--r--crypto/openssl/crypto/x509v3/Makefile20
-rw-r--r--crypto/openssl/crypto/x509v3/ext_dat.h3
-rw-r--r--crypto/openssl/crypto/x509v3/v3_lib.c22
-rw-r--r--crypto/openssl/crypto/x509v3/v3_purp.c29
-rw-r--r--crypto/openssl/crypto/x509v3/v3_scts.c332
-rw-r--r--crypto/openssl/crypto/x509v3/v3_utl.c427
-rw-r--r--crypto/openssl/crypto/x509v3/v3err.c9
-rw-r--r--crypto/openssl/crypto/x509v3/v3nametest.c336
-rw-r--r--crypto/openssl/crypto/x509v3/x509v3.h44
-rw-r--r--crypto/openssl/crypto/x86_64cpuid.pl29
-rw-r--r--crypto/openssl/crypto/x86cpuid.pl31
-rw-r--r--crypto/openssl/doc/apps/c_rehash.pod43
-rw-r--r--crypto/openssl/doc/apps/ciphers.pod73
-rw-r--r--crypto/openssl/doc/apps/cms.pod47
-rw-r--r--crypto/openssl/doc/apps/genpkey.pod13
-rw-r--r--crypto/openssl/doc/apps/ocsp.pod2
-rw-r--r--crypto/openssl/doc/apps/pkcs8.pod12
-rw-r--r--crypto/openssl/doc/apps/req.pod4
-rw-r--r--crypto/openssl/doc/apps/s_client.pod24
-rw-r--r--crypto/openssl/doc/apps/s_server.pod22
-rw-r--r--crypto/openssl/doc/apps/smime.pod2
-rw-r--r--crypto/openssl/doc/apps/verify.pod43
-rw-r--r--crypto/openssl/doc/apps/x509.pod10
-rw-r--r--crypto/openssl/doc/crypto/ASN1_STRING_length.pod2
-rw-r--r--crypto/openssl/doc/crypto/ASN1_STRING_print_ex.pod2
-rw-r--r--crypto/openssl/doc/crypto/ASN1_TIME_set.pod129
-rw-r--r--crypto/openssl/doc/crypto/BIO_f_ssl.pod2
-rw-r--r--crypto/openssl/doc/crypto/BIO_find_type.pod2
-rw-r--r--crypto/openssl/doc/crypto/BIO_s_accept.pod2
-rw-r--r--crypto/openssl/doc/crypto/BIO_s_connect.pod2
-rw-r--r--crypto/openssl/doc/crypto/BN_BLINDING_new.pod4
-rw-r--r--crypto/openssl/doc/crypto/BN_CTX_new.pod10
-rw-r--r--crypto/openssl/doc/crypto/BN_generate_prime.pod90
-rw-r--r--crypto/openssl/doc/crypto/BN_rand.pod2
-rw-r--r--crypto/openssl/doc/crypto/CMS_add0_cert.pod2
-rw-r--r--crypto/openssl/doc/crypto/CMS_get0_RecipientInfos.pod16
-rw-r--r--crypto/openssl/doc/crypto/CMS_get0_SignerInfos.pod8
-rw-r--r--crypto/openssl/doc/crypto/CMS_verify.pod2
-rw-r--r--crypto/openssl/doc/crypto/DH_generate_parameters.pod43
-rw-r--r--crypto/openssl/doc/crypto/DSA_generate_parameters.pod54
-rw-r--r--crypto/openssl/doc/crypto/EC_GFp_simple_method.pod60
-rw-r--r--crypto/openssl/doc/crypto/EC_GROUP_copy.pod174
-rw-r--r--crypto/openssl/doc/crypto/EC_GROUP_new.pod95
-rw-r--r--crypto/openssl/doc/crypto/EC_KEY_new.pod108
-rw-r--r--crypto/openssl/doc/crypto/EC_POINT_add.pod72
-rw-r--r--crypto/openssl/doc/crypto/EC_POINT_new.pod128
-rw-r--r--crypto/openssl/doc/crypto/ERR_remove_state.pod21
-rw-r--r--crypto/openssl/doc/crypto/EVP_BytesToKey.pod9
-rw-r--r--crypto/openssl/doc/crypto/EVP_DigestInit.pod10
-rw-r--r--crypto/openssl/doc/crypto/EVP_DigestVerifyInit.pod2
-rw-r--r--crypto/openssl/doc/crypto/EVP_EncryptInit.pod95
-rw-r--r--crypto/openssl/doc/crypto/EVP_PKEY_CTX_ctrl.pod10
-rw-r--r--crypto/openssl/doc/crypto/EVP_PKEY_cmp.pod4
-rw-r--r--crypto/openssl/doc/crypto/OPENSSL_VERSION_NUMBER.pod2
-rw-r--r--crypto/openssl/doc/crypto/OPENSSL_config.pod11
-rw-r--r--crypto/openssl/doc/crypto/OPENSSL_ia32cap.pod113
-rw-r--r--crypto/openssl/doc/crypto/OPENSSL_instrument_bus.pod42
-rw-r--r--crypto/openssl/doc/crypto/OPENSSL_load_builtin_modules.pod2
-rw-r--r--crypto/openssl/doc/crypto/OpenSSL_add_all_algorithms.pod2
-rw-r--r--crypto/openssl/doc/crypto/PKCS7_verify.pod6
-rw-r--r--crypto/openssl/doc/crypto/RAND_egd.pod2
-rw-r--r--crypto/openssl/doc/crypto/RSA_generate_key.pod39
-rw-r--r--crypto/openssl/doc/crypto/SSLeay_version.pod74
-rw-r--r--crypto/openssl/doc/crypto/X509_NAME_add_entry_by_txt.pod2
-rw-r--r--crypto/openssl/doc/crypto/X509_STORE_CTX_get_error.pod8
-rw-r--r--crypto/openssl/doc/crypto/X509_VERIFY_PARAM_set_flags.pod81
-rw-r--r--crypto/openssl/doc/crypto/X509_check_host.pod140
-rw-r--r--crypto/openssl/doc/crypto/crypto.pod2
-rw-r--r--crypto/openssl/doc/crypto/d2i_DSAPublicKey.pod2
-rw-r--r--crypto/openssl/doc/crypto/d2i_ECPKParameters.pod84
-rw-r--r--crypto/openssl/doc/crypto/d2i_X509.pod27
-rw-r--r--crypto/openssl/doc/crypto/d2i_X509_CRL.pod2
-rw-r--r--crypto/openssl/doc/crypto/ec.pod201
-rw-r--r--crypto/openssl/doc/crypto/ecdsa.pod2
-rw-r--r--crypto/openssl/doc/crypto/evp.pod66
-rw-r--r--crypto/openssl/doc/crypto/hmac.pod4
-rw-r--r--crypto/openssl/doc/crypto/i2d_PKCS7_bio_stream.pod2
-rw-r--r--crypto/openssl/doc/crypto/rand.pod2
-rw-r--r--crypto/openssl/doc/crypto/sha.pod64
-rw-r--r--crypto/openssl/doc/ssl/SSL_CIPHER_get_name.pod13
-rw-r--r--crypto/openssl/doc/ssl/SSL_COMP_add_compression_method.pod12
-rw-r--r--crypto/openssl/doc/ssl/SSL_CONF_CTX_new.pod40
-rw-r--r--crypto/openssl/doc/ssl/SSL_CONF_CTX_set1_prefix.pod49
-rw-r--r--crypto/openssl/doc/ssl/SSL_CONF_CTX_set_flags.pod68
-rw-r--r--crypto/openssl/doc/ssl/SSL_CONF_CTX_set_ssl_ctx.pod47
-rw-r--r--crypto/openssl/doc/ssl/SSL_CONF_cmd.pod438
-rw-r--r--crypto/openssl/doc/ssl/SSL_CONF_cmd_argv.pod42
-rw-r--r--crypto/openssl/doc/ssl/SSL_CTX_add1_chain_cert.pod150
-rw-r--r--crypto/openssl/doc/ssl/SSL_CTX_add_extra_chain_cert.pod13
-rw-r--r--crypto/openssl/doc/ssl/SSL_CTX_get0_param.pod55
-rw-r--r--crypto/openssl/doc/ssl/SSL_CTX_sess_set_cache_size.pod6
-rw-r--r--crypto/openssl/doc/ssl/SSL_CTX_set1_curves.pod103
-rw-r--r--crypto/openssl/doc/ssl/SSL_CTX_set1_verify_cert_store.pod91
-rw-r--r--crypto/openssl/doc/ssl/SSL_CTX_set_cert_cb.pod68
-rw-r--r--crypto/openssl/doc/ssl/SSL_CTX_set_cert_store.pod7
-rw-r--r--crypto/openssl/doc/ssl/SSL_CTX_set_cipher_list.pod2
-rw-r--r--crypto/openssl/doc/ssl/SSL_CTX_set_custom_cli_ext.pod133
-rw-r--r--crypto/openssl/doc/ssl/SSL_CTX_set_tmp_rsa_callback.pod2
-rw-r--r--crypto/openssl/doc/ssl/SSL_CTX_use_certificate.pod24
-rw-r--r--crypto/openssl/doc/ssl/SSL_CTX_use_psk_identity_hint.pod12
-rw-r--r--crypto/openssl/doc/ssl/SSL_CTX_use_serverinfo.pod46
-rw-r--r--crypto/openssl/doc/ssl/SSL_accept.pod5
-rw-r--r--crypto/openssl/doc/ssl/SSL_do_handshake.pod5
-rw-r--r--crypto/openssl/doc/ssl/SSL_shutdown.pod2
-rw-r--r--crypto/openssl/doc/ssl/ssl.pod6
-rw-r--r--crypto/openssl/doc/ssleay.txt2
-rw-r--r--crypto/openssl/e_os.h15
-rw-r--r--crypto/openssl/e_os2.h2
-rw-r--r--crypto/openssl/engines/Makefile30
-rw-r--r--crypto/openssl/engines/ccgost/Makefile11
-rw-r--r--crypto/openssl/engines/ccgost/gost89.c19
-rw-r--r--crypto/openssl/engines/ccgost/gost_crypt.c4
-rw-r--r--crypto/openssl/engines/ccgost/gost_pmeth.c8
-rw-r--r--crypto/openssl/engines/e_capi.c142
-rw-r--r--crypto/openssl/engines/vendor_defns/hwcryptohook.h188
-rw-r--r--crypto/openssl/ssl/Makefile101
-rw-r--r--crypto/openssl/ssl/d1_both.c142
-rw-r--r--crypto/openssl/ssl/d1_clnt.c918
-rw-r--r--crypto/openssl/ssl/d1_enc.c251
-rw-r--r--crypto/openssl/ssl/d1_lib.c92
-rw-r--r--crypto/openssl/ssl/d1_meth.c18
-rw-r--r--crypto/openssl/ssl/d1_pkt.c66
-rw-r--r--crypto/openssl/ssl/d1_srtp.c3
-rw-r--r--crypto/openssl/ssl/d1_srvr.c903
-rw-r--r--crypto/openssl/ssl/dtls1.h6
-rw-r--r--crypto/openssl/ssl/heartbeat_test.c38
-rw-r--r--crypto/openssl/ssl/s23_clnt.c24
-rw-r--r--crypto/openssl/ssl/s23_srvr.c5
-rw-r--r--crypto/openssl/ssl/s2_clnt.c16
-rw-r--r--crypto/openssl/ssl/s2_lib.c5
-rw-r--r--crypto/openssl/ssl/s3_both.c119
-rw-r--r--crypto/openssl/ssl/s3_cbc.c2
-rw-r--r--crypto/openssl/ssl/s3_clnt.c466
-rw-r--r--crypto/openssl/ssl/s3_enc.c36
-rw-r--r--crypto/openssl/ssl/s3_lib.c656
-rw-r--r--crypto/openssl/ssl/s3_pkt.c198
-rw-r--r--crypto/openssl/ssl/s3_srvr.c455
-rw-r--r--crypto/openssl/ssl/srtp.h1
-rw-r--r--crypto/openssl/ssl/ssl.h422
-rw-r--r--crypto/openssl/ssl/ssl3.h62
-rw-r--r--crypto/openssl/ssl/ssl_algs.c4
-rw-r--r--crypto/openssl/ssl/ssl_cert.c544
-rw-r--r--crypto/openssl/ssl/ssl_ciph.c181
-rw-r--r--crypto/openssl/ssl/ssl_conf.c683
-rw-r--r--crypto/openssl/ssl/ssl_err.c267
-rw-r--r--crypto/openssl/ssl/ssl_lib.c431
-rw-r--r--crypto/openssl/ssl/ssl_locl.h316
-rw-r--r--crypto/openssl/ssl/ssl_rsa.c292
-rw-r--r--crypto/openssl/ssl/ssl_sess.c35
-rw-r--r--crypto/openssl/ssl/ssl_txt.c2
-rw-r--r--crypto/openssl/ssl/ssltest.c566
-rw-r--r--crypto/openssl/ssl/t1_clnt.c8
-rw-r--r--crypto/openssl/ssl/t1_enc.c68
-rw-r--r--crypto/openssl/ssl/t1_ext.c298
-rw-r--r--crypto/openssl/ssl/t1_lib.c2223
-rw-r--r--crypto/openssl/ssl/t1_meth.c9
-rw-r--r--crypto/openssl/ssl/t1_srvr.c9
-rw-r--r--crypto/openssl/ssl/t1_trce.c1266
-rw-r--r--crypto/openssl/ssl/tls1.h41
-rwxr-xr-xcrypto/openssl/util/copy-if-different.pl78
-rwxr-xr-xcrypto/openssl/util/files.pl8
-rw-r--r--crypto/openssl/util/libeay.num102
-rwxr-xr-xcrypto/openssl/util/mk1mf.pl132
-rwxr-xr-xcrypto/openssl/util/mkdef.pl9
-rw-r--r--crypto/openssl/util/mkerr.pl5
-rwxr-xr-xcrypto/openssl/util/mkstack.pl4
-rw-r--r--crypto/openssl/util/pl/BC-32.pl2
-rw-r--r--crypto/openssl/util/pl/VC-32.pl34
-rw-r--r--crypto/openssl/util/pl/unix.pl350
-rw-r--r--crypto/openssl/util/ssleay.num49
-rw-r--r--etc/Makefile27
-rw-r--r--etc/defaults/rc.conf1
-rw-r--r--etc/etc.amd64/ttys6
-rw-r--r--etc/etc.i386/ttys6
-rw-r--r--etc/etc.mips/ttys8
-rw-r--r--etc/etc.pc98/ttys8
-rw-r--r--etc/etc.powerpc/ttys8
-rw-r--r--etc/etc.sparc64/ttys8
-rw-r--r--etc/mtree/BSD.debug.dist6
-rw-r--r--etc/mtree/BSD.lib32.dist14
-rw-r--r--etc/mtree/BSD.tests.dist4
-rw-r--r--etc/mtree/BSD.usr.dist6
-rw-r--r--etc/mtree/Makefile4
-rwxr-xr-xetc/netstart3
-rwxr-xr-xetc/rc.d/jail2
-rwxr-xr-xetc/rc.d/local_unbound21
-rwxr-xr-xetc/rc.d/mdconfig2
-rwxr-xr-xetc/rc.d/mdconfig22
-rwxr-xr-xetc/rc.d/mountcritlocal38
-rwxr-xr-xetc/rc.d/othermta2
-rw-r--r--etc/rc.shutdown2
-rw-r--r--etc/rc.subr6
-rw-r--r--gnu/usr.bin/gdb/kgdb/trgt_arm.c10
-rw-r--r--gnu/usr.bin/groff/src/devices/xditview/Makefile34
-rw-r--r--include/stdio.h3
-rw-r--r--lib/libc/gen/getgrent.c15
-rw-r--r--lib/libc/gen/getpwent.c10
-rw-r--r--lib/libc/iconv/bsd_iconv.c44
-rw-r--r--lib/libc/iconv/citrus_esdb.c2
-rw-r--r--lib/libc/resolv/res_data.c91
-rw-r--r--lib/libc/stdio/fdopen.c4
-rw-r--r--lib/libc/stdio/findfp.c1
-rw-r--r--lib/libc/stdio/fmemopen.c3
-rw-r--r--lib/libc/stdio/fopen.c4
-rw-r--r--lib/libc/stdio/freopen.c5
-rw-r--r--lib/libc/stdio/ftell.c41
-rw-r--r--lib/libc/stdio/stdio.c2
-rw-r--r--lib/libc/sys/cpuset.25
-rw-r--r--lib/libc/sys/cpuset_getaffinity.25
-rw-r--r--lib/libc/sys/ptrace.24
-rw-r--r--lib/libc/tests/Makefile1
-rw-r--r--lib/libc/tests/ssp/Makefile12
-rw-r--r--lib/libdpv/dpv.36
-rw-r--r--lib/libedit/vi.c12
-rw-r--r--lib/libfigpar/figpar.36
-rw-r--r--lib/libgpib/Makefile28
-rw-r--r--lib/libgpib/gpib.3741
-rw-r--r--lib/libgpib/ibfoo.c647
-rw-r--r--lib/libucl/Makefile2
-rw-r--r--lib/msun/tests/Makefile4
-rw-r--r--libexec/dma/dma-mbox-create/Makefile.depend21
-rw-r--r--libexec/dma/dmagent/Makefile.depend29
-rw-r--r--libexec/rtld-elf/libmap.c12
-rw-r--r--libexec/rtld-elf/malloc.c1
-rw-r--r--libexec/rtld-elf/paths.h (renamed from sys/arm/samsung/s3c2xx0/uart_cpu_s3c2410.c)82
-rw-r--r--libexec/rtld-elf/rtld.c32
-rw-r--r--libexec/rtld-elf/rtld.h16
-rw-r--r--sbin/atm/atmconfig/Makefile4
-rw-r--r--sbin/camcontrol/modeedit.c2
-rw-r--r--sbin/devd/devd.cc2
-rw-r--r--sbin/fsck_ffs/fsck.h2
-rw-r--r--sbin/fsck_ffs/globs.c2
-rw-r--r--sbin/ipfw/tables.c10
-rw-r--r--sbin/natd/natd.c2
-rw-r--r--sbin/newfs_msdos/mkfs_msdos.h92
-rw-r--r--sbin/newfs_nandfs/newfs_nandfs.c2
-rw-r--r--sbin/pfctl/pfctl.c1
-rw-r--r--sbin/rcorder/rcorder.c4
-rw-r--r--sbin/savecore/savecore.c12
-rw-r--r--sbin/sysctl/sysctl.c29
-rw-r--r--secure/lib/libcrypto/Makefile53
-rw-r--r--secure/lib/libcrypto/Makefile.asm19
-rw-r--r--secure/lib/libcrypto/Makefile.inc15
-rw-r--r--secure/lib/libcrypto/Makefile.man255
-rw-r--r--secure/lib/libcrypto/amd64/aes-x86_64.S341
-rw-r--r--secure/lib/libcrypto/amd64/aesni-gcm-x86_64.S16
-rw-r--r--secure/lib/libcrypto/amd64/aesni-mb-x86_64.S507
-rw-r--r--secure/lib/libcrypto/amd64/aesni-sha1-x86_64.S2003
-rw-r--r--secure/lib/libcrypto/amd64/aesni-sha256-x86_64.S58
-rw-r--r--secure/lib/libcrypto/amd64/aesni-x86_64.S2594
-rw-r--r--secure/lib/libcrypto/amd64/bsaes-x86_64.S82
-rw-r--r--secure/lib/libcrypto/amd64/cmll-x86_64.S12
-rw-r--r--secure/lib/libcrypto/amd64/ecp_nistz256-x86_64.S2005
-rw-r--r--secure/lib/libcrypto/amd64/ghash-x86_64.S570
-rw-r--r--secure/lib/libcrypto/amd64/md5-x86_64.S4
-rw-r--r--secure/lib/libcrypto/amd64/modexp512-x86_64.S1774
-rw-r--r--secure/lib/libcrypto/amd64/rc4-x86_64.S28
-rw-r--r--secure/lib/libcrypto/amd64/rsaz-avx2.S26
-rw-r--r--secure/lib/libcrypto/amd64/rsaz-x86_64.S1118
-rw-r--r--secure/lib/libcrypto/amd64/sha1-mb-x86_64.S2935
-rw-r--r--secure/lib/libcrypto/amd64/sha1-x86_64.S2725
-rw-r--r--secure/lib/libcrypto/amd64/sha256-mb-x86_64.S3259
-rw-r--r--secure/lib/libcrypto/amd64/sha256-x86_64.S2817
-rw-r--r--secure/lib/libcrypto/amd64/sha512-x86_64.S1527
-rw-r--r--secure/lib/libcrypto/amd64/vpaes-x86_64.S105
-rw-r--r--secure/lib/libcrypto/amd64/wp-x86_64.S323
-rw-r--r--secure/lib/libcrypto/amd64/x86_64-gf2m.S6
-rw-r--r--secure/lib/libcrypto/amd64/x86_64-mont.S848
-rw-r--r--secure/lib/libcrypto/amd64/x86_64-mont5.S1464
-rw-r--r--secure/lib/libcrypto/amd64/x86_64cpuid.S33
-rw-r--r--secure/lib/libcrypto/engines/Makefile4
-rw-r--r--secure/lib/libcrypto/engines/libcapi/Makefile6
-rw-r--r--secure/lib/libcrypto/engines/libgost/Makefile7
-rw-r--r--secure/lib/libcrypto/i386/aes-586.s480
-rw-r--r--secure/lib/libcrypto/i386/aesni-x86.s1159
-rw-r--r--secure/lib/libcrypto/i386/bn-586.s2
-rw-r--r--secure/lib/libcrypto/i386/cast-586.s934
-rw-r--r--secure/lib/libcrypto/i386/des-586.s5
-rw-r--r--secure/lib/libcrypto/i386/ghash-x86.s226
-rw-r--r--secure/lib/libcrypto/i386/rc4-586.s4
-rw-r--r--secure/lib/libcrypto/i386/sha1-586.s1335
-rw-r--r--secure/lib/libcrypto/i386/sha256-586.s4551
-rw-r--r--secure/lib/libcrypto/i386/sha512-586.s2246
-rw-r--r--secure/lib/libcrypto/i386/vpaes-x86.s88
-rw-r--r--secure/lib/libcrypto/i386/wp-mmx.s322
-rw-r--r--secure/lib/libcrypto/i386/x86-gf2m.s2
-rw-r--r--secure/lib/libcrypto/i386/x86-mont.s2
-rw-r--r--secure/lib/libcrypto/i386/x86cpuid.s117
-rw-r--r--secure/lib/libcrypto/man/ASN1_OBJECT_new.32
-rw-r--r--secure/lib/libcrypto/man/ASN1_STRING_length.34
-rw-r--r--secure/lib/libcrypto/man/ASN1_STRING_new.32
-rw-r--r--secure/lib/libcrypto/man/ASN1_STRING_print_ex.34
-rw-r--r--secure/lib/libcrypto/man/ASN1_TIME_set.3264
-rw-r--r--secure/lib/libcrypto/man/ASN1_generate_nconf.32
-rw-r--r--secure/lib/libcrypto/man/BIO_ctrl.32
-rw-r--r--secure/lib/libcrypto/man/BIO_f_base64.32
-rw-r--r--secure/lib/libcrypto/man/BIO_f_buffer.32
-rw-r--r--secure/lib/libcrypto/man/BIO_f_cipher.32
-rw-r--r--secure/lib/libcrypto/man/BIO_f_md.32
-rw-r--r--secure/lib/libcrypto/man/BIO_f_null.32
-rw-r--r--secure/lib/libcrypto/man/BIO_f_ssl.34
-rw-r--r--secure/lib/libcrypto/man/BIO_find_type.34
-rw-r--r--secure/lib/libcrypto/man/BIO_new.32
-rw-r--r--secure/lib/libcrypto/man/BIO_new_CMS.32
-rw-r--r--secure/lib/libcrypto/man/BIO_push.32
-rw-r--r--secure/lib/libcrypto/man/BIO_read.32
-rw-r--r--secure/lib/libcrypto/man/BIO_s_accept.34
-rw-r--r--secure/lib/libcrypto/man/BIO_s_bio.32
-rw-r--r--secure/lib/libcrypto/man/BIO_s_connect.34
-rw-r--r--secure/lib/libcrypto/man/BIO_s_fd.32
-rw-r--r--secure/lib/libcrypto/man/BIO_s_file.32
-rw-r--r--secure/lib/libcrypto/man/BIO_s_mem.32
-rw-r--r--secure/lib/libcrypto/man/BIO_s_null.32
-rw-r--r--secure/lib/libcrypto/man/BIO_s_socket.32
-rw-r--r--secure/lib/libcrypto/man/BIO_set_callback.32
-rw-r--r--secure/lib/libcrypto/man/BIO_should_retry.32
-rw-r--r--secure/lib/libcrypto/man/BN_BLINDING_new.36
-rw-r--r--secure/lib/libcrypto/man/BN_CTX_new.316
-rw-r--r--secure/lib/libcrypto/man/BN_CTX_start.32
-rw-r--r--secure/lib/libcrypto/man/BN_add.32
-rw-r--r--secure/lib/libcrypto/man/BN_add_word.32
-rw-r--r--secure/lib/libcrypto/man/BN_bn2bin.32
-rw-r--r--secure/lib/libcrypto/man/BN_cmp.32
-rw-r--r--secure/lib/libcrypto/man/BN_copy.32
-rw-r--r--secure/lib/libcrypto/man/BN_generate_prime.393
-rw-r--r--secure/lib/libcrypto/man/BN_mod_inverse.32
-rw-r--r--secure/lib/libcrypto/man/BN_mod_mul_montgomery.32
-rw-r--r--secure/lib/libcrypto/man/BN_mod_mul_reciprocal.32
-rw-r--r--secure/lib/libcrypto/man/BN_new.32
-rw-r--r--secure/lib/libcrypto/man/BN_num_bytes.32
-rw-r--r--secure/lib/libcrypto/man/BN_rand.34
-rw-r--r--secure/lib/libcrypto/man/BN_set_bit.32
-rw-r--r--secure/lib/libcrypto/man/BN_swap.32
-rw-r--r--secure/lib/libcrypto/man/BN_zero.32
-rw-r--r--secure/lib/libcrypto/man/CMS_add0_cert.36
-rw-r--r--secure/lib/libcrypto/man/CMS_add1_recipient_cert.32
-rw-r--r--secure/lib/libcrypto/man/CMS_add1_signer.32
-rw-r--r--secure/lib/libcrypto/man/CMS_compress.32
-rw-r--r--secure/lib/libcrypto/man/CMS_decrypt.32
-rw-r--r--secure/lib/libcrypto/man/CMS_encrypt.32
-rw-r--r--secure/lib/libcrypto/man/CMS_final.32
-rw-r--r--secure/lib/libcrypto/man/CMS_get0_RecipientInfos.320
-rw-r--r--secure/lib/libcrypto/man/CMS_get0_SignerInfos.312
-rw-r--r--secure/lib/libcrypto/man/CMS_get0_type.32
-rw-r--r--secure/lib/libcrypto/man/CMS_get1_ReceiptRequest.32
-rw-r--r--secure/lib/libcrypto/man/CMS_sign.32
-rw-r--r--secure/lib/libcrypto/man/CMS_sign_receipt.32
-rw-r--r--secure/lib/libcrypto/man/CMS_uncompress.32
-rw-r--r--secure/lib/libcrypto/man/CMS_verify.36
-rw-r--r--secure/lib/libcrypto/man/CMS_verify_receipt.32
-rw-r--r--secure/lib/libcrypto/man/CONF_modules_free.32
-rw-r--r--secure/lib/libcrypto/man/CONF_modules_load_file.32
-rw-r--r--secure/lib/libcrypto/man/CRYPTO_set_ex_data.32
-rw-r--r--secure/lib/libcrypto/man/DH_generate_key.32
-rw-r--r--secure/lib/libcrypto/man/DH_generate_parameters.346
-rw-r--r--secure/lib/libcrypto/man/DH_get_ex_new_index.32
-rw-r--r--secure/lib/libcrypto/man/DH_new.32
-rw-r--r--secure/lib/libcrypto/man/DH_set_method.32
-rw-r--r--secure/lib/libcrypto/man/DH_size.32
-rw-r--r--secure/lib/libcrypto/man/DSA_SIG_new.32
-rw-r--r--secure/lib/libcrypto/man/DSA_do_sign.32
-rw-r--r--secure/lib/libcrypto/man/DSA_dup_DH.32
-rw-r--r--secure/lib/libcrypto/man/DSA_generate_key.32
-rw-r--r--secure/lib/libcrypto/man/DSA_generate_parameters.358
-rw-r--r--secure/lib/libcrypto/man/DSA_get_ex_new_index.32
-rw-r--r--secure/lib/libcrypto/man/DSA_new.32
-rw-r--r--secure/lib/libcrypto/man/DSA_set_method.32
-rw-r--r--secure/lib/libcrypto/man/DSA_sign.32
-rw-r--r--secure/lib/libcrypto/man/DSA_size.32
-rw-r--r--secure/lib/libcrypto/man/EC_GFp_simple_method.3193
-rw-r--r--secure/lib/libcrypto/man/EC_GROUP_copy.3308
-rw-r--r--secure/lib/libcrypto/man/EC_GROUP_new.3230
-rw-r--r--secure/lib/libcrypto/man/EC_KEY_new.3239
-rw-r--r--secure/lib/libcrypto/man/EC_POINT_add.3203
-rw-r--r--secure/lib/libcrypto/man/EC_POINT_new.3260
-rw-r--r--secure/lib/libcrypto/man/ERR_GET_LIB.32
-rw-r--r--secure/lib/libcrypto/man/ERR_clear_error.32
-rw-r--r--secure/lib/libcrypto/man/ERR_error_string.32
-rw-r--r--secure/lib/libcrypto/man/ERR_get_error.32
-rw-r--r--secure/lib/libcrypto/man/ERR_load_crypto_strings.32
-rw-r--r--secure/lib/libcrypto/man/ERR_load_strings.32
-rw-r--r--secure/lib/libcrypto/man/ERR_print_errors.32
-rw-r--r--secure/lib/libcrypto/man/ERR_put_error.32
-rw-r--r--secure/lib/libcrypto/man/ERR_remove_state.325
-rw-r--r--secure/lib/libcrypto/man/ERR_set_mark.32
-rw-r--r--secure/lib/libcrypto/man/EVP_BytesToKey.311
-rw-r--r--secure/lib/libcrypto/man/EVP_DigestInit.312
-rw-r--r--secure/lib/libcrypto/man/EVP_DigestSignInit.32
-rw-r--r--secure/lib/libcrypto/man/EVP_DigestVerifyInit.34
-rw-r--r--secure/lib/libcrypto/man/EVP_EncryptInit.3103
-rw-r--r--secure/lib/libcrypto/man/EVP_OpenInit.32
-rw-r--r--secure/lib/libcrypto/man/EVP_PKEY_CTX_ctrl.312
-rw-r--r--secure/lib/libcrypto/man/EVP_PKEY_CTX_new.32
-rw-r--r--secure/lib/libcrypto/man/EVP_PKEY_cmp.36
-rw-r--r--secure/lib/libcrypto/man/EVP_PKEY_decrypt.32
-rw-r--r--secure/lib/libcrypto/man/EVP_PKEY_derive.32
-rw-r--r--secure/lib/libcrypto/man/EVP_PKEY_encrypt.32
-rw-r--r--secure/lib/libcrypto/man/EVP_PKEY_get_default_digest.32
-rw-r--r--secure/lib/libcrypto/man/EVP_PKEY_keygen.32
-rw-r--r--secure/lib/libcrypto/man/EVP_PKEY_new.32
-rw-r--r--secure/lib/libcrypto/man/EVP_PKEY_print_private.32
-rw-r--r--secure/lib/libcrypto/man/EVP_PKEY_set1_RSA.32
-rw-r--r--secure/lib/libcrypto/man/EVP_PKEY_sign.32
-rw-r--r--secure/lib/libcrypto/man/EVP_PKEY_verify.32
-rw-r--r--secure/lib/libcrypto/man/EVP_PKEY_verify_recover.32
-rw-r--r--secure/lib/libcrypto/man/EVP_SealInit.32
-rw-r--r--secure/lib/libcrypto/man/EVP_SignInit.32
-rw-r--r--secure/lib/libcrypto/man/EVP_VerifyInit.32
-rw-r--r--secure/lib/libcrypto/man/OBJ_nid2obj.32
-rw-r--r--secure/lib/libcrypto/man/OPENSSL_Applink.32
-rw-r--r--secure/lib/libcrypto/man/OPENSSL_VERSION_NUMBER.34
-rw-r--r--secure/lib/libcrypto/man/OPENSSL_config.312
-rw-r--r--secure/lib/libcrypto/man/OPENSSL_ia32cap.3106
-rw-r--r--secure/lib/libcrypto/man/OPENSSL_instrument_bus.3178
-rw-r--r--secure/lib/libcrypto/man/OPENSSL_load_builtin_modules.34
-rw-r--r--secure/lib/libcrypto/man/OpenSSL_add_all_algorithms.34
-rw-r--r--secure/lib/libcrypto/man/PEM_write_bio_CMS_stream.32
-rw-r--r--secure/lib/libcrypto/man/PEM_write_bio_PKCS7_stream.32
-rw-r--r--secure/lib/libcrypto/man/PKCS12_create.32
-rw-r--r--secure/lib/libcrypto/man/PKCS12_parse.32
-rw-r--r--secure/lib/libcrypto/man/PKCS7_decrypt.32
-rw-r--r--secure/lib/libcrypto/man/PKCS7_encrypt.32
-rw-r--r--secure/lib/libcrypto/man/PKCS7_sign.32
-rw-r--r--secure/lib/libcrypto/man/PKCS7_sign_add_signer.32
-rw-r--r--secure/lib/libcrypto/man/PKCS7_verify.38
-rw-r--r--secure/lib/libcrypto/man/RAND_add.32
-rw-r--r--secure/lib/libcrypto/man/RAND_bytes.32
-rw-r--r--secure/lib/libcrypto/man/RAND_cleanup.32
-rw-r--r--secure/lib/libcrypto/man/RAND_egd.34
-rw-r--r--secure/lib/libcrypto/man/RAND_load_file.32
-rw-r--r--secure/lib/libcrypto/man/RAND_set_rand_method.32
-rw-r--r--secure/lib/libcrypto/man/RSA_blinding_on.32
-rw-r--r--secure/lib/libcrypto/man/RSA_check_key.32
-rw-r--r--secure/lib/libcrypto/man/RSA_generate_key.343
-rw-r--r--secure/lib/libcrypto/man/RSA_get_ex_new_index.32
-rw-r--r--secure/lib/libcrypto/man/RSA_new.32
-rw-r--r--secure/lib/libcrypto/man/RSA_padding_add_PKCS1_type_1.32
-rw-r--r--secure/lib/libcrypto/man/RSA_print.32
-rw-r--r--secure/lib/libcrypto/man/RSA_private_encrypt.32
-rw-r--r--secure/lib/libcrypto/man/RSA_public_encrypt.32
-rw-r--r--secure/lib/libcrypto/man/RSA_set_method.32
-rw-r--r--secure/lib/libcrypto/man/RSA_sign.32
-rw-r--r--secure/lib/libcrypto/man/RSA_sign_ASN1_OCTET_STRING.32
-rw-r--r--secure/lib/libcrypto/man/RSA_size.32
-rw-r--r--secure/lib/libcrypto/man/SMIME_read_CMS.32
-rw-r--r--secure/lib/libcrypto/man/SMIME_read_PKCS7.32
-rw-r--r--secure/lib/libcrypto/man/SMIME_write_CMS.32
-rw-r--r--secure/lib/libcrypto/man/SMIME_write_PKCS7.32
-rw-r--r--secure/lib/libcrypto/man/SSLeay_version.3192
-rw-r--r--secure/lib/libcrypto/man/X509_NAME_ENTRY_get_object.32
-rw-r--r--secure/lib/libcrypto/man/X509_NAME_add_entry_by_txt.34
-rw-r--r--secure/lib/libcrypto/man/X509_NAME_get_index_by_NID.32
-rw-r--r--secure/lib/libcrypto/man/X509_NAME_print_ex.32
-rw-r--r--secure/lib/libcrypto/man/X509_STORE_CTX_get_error.310
-rw-r--r--secure/lib/libcrypto/man/X509_STORE_CTX_get_ex_new_index.32
-rw-r--r--secure/lib/libcrypto/man/X509_STORE_CTX_new.32
-rw-r--r--secure/lib/libcrypto/man/X509_STORE_CTX_set_verify_cb.32
-rw-r--r--secure/lib/libcrypto/man/X509_STORE_set_verify_cb_func.32
-rw-r--r--secure/lib/libcrypto/man/X509_VERIFY_PARAM_set_flags.383
-rw-r--r--secure/lib/libcrypto/man/X509_check_host.3269
-rw-r--r--secure/lib/libcrypto/man/X509_new.32
-rw-r--r--secure/lib/libcrypto/man/X509_verify_cert.32
-rw-r--r--secure/lib/libcrypto/man/bio.32
-rw-r--r--secure/lib/libcrypto/man/blowfish.32
-rw-r--r--secure/lib/libcrypto/man/bn.32
-rw-r--r--secure/lib/libcrypto/man/bn_internal.32
-rw-r--r--secure/lib/libcrypto/man/buffer.32
-rw-r--r--secure/lib/libcrypto/man/crypto.34
-rw-r--r--secure/lib/libcrypto/man/d2i_ASN1_OBJECT.32
-rw-r--r--secure/lib/libcrypto/man/d2i_CMS_ContentInfo.32
-rw-r--r--secure/lib/libcrypto/man/d2i_DHparams.32
-rw-r--r--secure/lib/libcrypto/man/d2i_DSAPublicKey.34
-rw-r--r--secure/lib/libcrypto/man/d2i_ECPKParameters.3216
-rw-r--r--secure/lib/libcrypto/man/d2i_ECPrivateKey.32
-rw-r--r--secure/lib/libcrypto/man/d2i_PKCS8PrivateKey.32
-rw-r--r--secure/lib/libcrypto/man/d2i_RSAPublicKey.32
-rw-r--r--secure/lib/libcrypto/man/d2i_X509.329
-rw-r--r--secure/lib/libcrypto/man/d2i_X509_ALGOR.32
-rw-r--r--secure/lib/libcrypto/man/d2i_X509_CRL.34
-rw-r--r--secure/lib/libcrypto/man/d2i_X509_NAME.32
-rw-r--r--secure/lib/libcrypto/man/d2i_X509_REQ.32
-rw-r--r--secure/lib/libcrypto/man/d2i_X509_SIG.32
-rw-r--r--secure/lib/libcrypto/man/des.32
-rw-r--r--secure/lib/libcrypto/man/dh.32
-rw-r--r--secure/lib/libcrypto/man/dsa.32
-rw-r--r--secure/lib/libcrypto/man/ec.3333
-rw-r--r--secure/lib/libcrypto/man/ecdsa.34
-rw-r--r--secure/lib/libcrypto/man/engine.32
-rw-r--r--secure/lib/libcrypto/man/err.32
-rw-r--r--secure/lib/libcrypto/man/evp.349
-rw-r--r--secure/lib/libcrypto/man/hmac.36
-rw-r--r--secure/lib/libcrypto/man/i2d_CMS_bio_stream.32
-rw-r--r--secure/lib/libcrypto/man/i2d_PKCS7_bio_stream.34
-rw-r--r--secure/lib/libcrypto/man/lh_stats.32
-rw-r--r--secure/lib/libcrypto/man/lhash.32
-rw-r--r--secure/lib/libcrypto/man/md5.32
-rw-r--r--secure/lib/libcrypto/man/mdc2.32
-rw-r--r--secure/lib/libcrypto/man/pem.32
-rw-r--r--secure/lib/libcrypto/man/rand.34
-rw-r--r--secure/lib/libcrypto/man/rc4.32
-rw-r--r--secure/lib/libcrypto/man/ripemd.32
-rw-r--r--secure/lib/libcrypto/man/rsa.32
-rw-r--r--secure/lib/libcrypto/man/sha.366
-rw-r--r--secure/lib/libcrypto/man/threads.32
-rw-r--r--secure/lib/libcrypto/man/ui.32
-rw-r--r--secure/lib/libcrypto/man/ui_compat.32
-rw-r--r--secure/lib/libcrypto/man/x509.32
-rw-r--r--secure/lib/libcrypto/opensslconf-aarch64.h14
-rw-r--r--secure/lib/libcrypto/opensslconf-arm.h14
-rw-r--r--secure/lib/libcrypto/opensslconf-mips.h14
-rw-r--r--secure/lib/libcrypto/opensslconf-powerpc.h14
-rw-r--r--secure/lib/libcrypto/opensslconf-sparc64.h14
-rw-r--r--secure/lib/libcrypto/opensslconf-x86.h14
-rw-r--r--secure/lib/libssl/Makefile14
-rw-r--r--secure/lib/libssl/Makefile.man55
-rw-r--r--secure/lib/libssl/man/SSL_CIPHER_get_name.315
-rw-r--r--secure/lib/libssl/man/SSL_COMP_add_compression_method.314
-rw-r--r--secure/lib/libssl/man/SSL_CONF_CTX_new.3172
-rw-r--r--secure/lib/libssl/man/SSL_CONF_CTX_set1_prefix.3180
-rw-r--r--secure/lib/libssl/man/SSL_CONF_CTX_set_flags.3191
-rw-r--r--secure/lib/libssl/man/SSL_CONF_CTX_set_ssl_ctx.3178
-rw-r--r--secure/lib/libssl/man/SSL_CONF_cmd.3536
-rw-r--r--secure/lib/libssl/man/SSL_CONF_cmd_argv.3174
-rw-r--r--secure/lib/libssl/man/SSL_CTX_add1_chain_cert.3280
-rw-r--r--secure/lib/libssl/man/SSL_CTX_add_extra_chain_cert.315
-rw-r--r--secure/lib/libssl/man/SSL_CTX_add_session.32
-rw-r--r--secure/lib/libssl/man/SSL_CTX_ctrl.32
-rw-r--r--secure/lib/libssl/man/SSL_CTX_flush_sessions.32
-rw-r--r--secure/lib/libssl/man/SSL_CTX_free.32
-rw-r--r--secure/lib/libssl/man/SSL_CTX_get0_param.3187
-rw-r--r--secure/lib/libssl/man/SSL_CTX_get_ex_new_index.32
-rw-r--r--secure/lib/libssl/man/SSL_CTX_get_verify_mode.32
-rw-r--r--secure/lib/libssl/man/SSL_CTX_load_verify_locations.32
-rw-r--r--secure/lib/libssl/man/SSL_CTX_new.32
-rw-r--r--secure/lib/libssl/man/SSL_CTX_sess_number.32
-rw-r--r--secure/lib/libssl/man/SSL_CTX_sess_set_cache_size.38
-rw-r--r--secure/lib/libssl/man/SSL_CTX_sess_set_get_cb.32
-rw-r--r--secure/lib/libssl/man/SSL_CTX_sessions.32
-rw-r--r--secure/lib/libssl/man/SSL_CTX_set1_curves.3236
-rw-r--r--secure/lib/libssl/man/SSL_CTX_set1_verify_cert_store.3222
-rw-r--r--secure/lib/libssl/man/SSL_CTX_set_cert_cb.3201
-rw-r--r--secure/lib/libssl/man/SSL_CTX_set_cert_store.38
-rw-r--r--secure/lib/libssl/man/SSL_CTX_set_cert_verify_callback.32
-rw-r--r--secure/lib/libssl/man/SSL_CTX_set_cipher_list.34
-rw-r--r--secure/lib/libssl/man/SSL_CTX_set_client_CA_list.32
-rw-r--r--secure/lib/libssl/man/SSL_CTX_set_client_cert_cb.32
-rw-r--r--secure/lib/libssl/man/SSL_CTX_set_custom_cli_ext.3264
-rw-r--r--secure/lib/libssl/man/SSL_CTX_set_default_passwd_cb.32
-rw-r--r--secure/lib/libssl/man/SSL_CTX_set_generate_session_id.32
-rw-r--r--secure/lib/libssl/man/SSL_CTX_set_info_callback.32
-rw-r--r--secure/lib/libssl/man/SSL_CTX_set_max_cert_list.32
-rw-r--r--secure/lib/libssl/man/SSL_CTX_set_mode.32
-rw-r--r--secure/lib/libssl/man/SSL_CTX_set_msg_callback.32
-rw-r--r--secure/lib/libssl/man/SSL_CTX_set_options.32
-rw-r--r--secure/lib/libssl/man/SSL_CTX_set_psk_client_callback.32
-rw-r--r--secure/lib/libssl/man/SSL_CTX_set_quiet_shutdown.32
-rw-r--r--secure/lib/libssl/man/SSL_CTX_set_read_ahead.32
-rw-r--r--secure/lib/libssl/man/SSL_CTX_set_session_cache_mode.32
-rw-r--r--secure/lib/libssl/man/SSL_CTX_set_session_id_context.32
-rw-r--r--secure/lib/libssl/man/SSL_CTX_set_ssl_version.32
-rw-r--r--secure/lib/libssl/man/SSL_CTX_set_timeout.32
-rw-r--r--secure/lib/libssl/man/SSL_CTX_set_tlsext_ticket_key_cb.32
-rw-r--r--secure/lib/libssl/man/SSL_CTX_set_tmp_dh_callback.32
-rw-r--r--secure/lib/libssl/man/SSL_CTX_set_tmp_rsa_callback.34
-rw-r--r--secure/lib/libssl/man/SSL_CTX_set_verify.32
-rw-r--r--secure/lib/libssl/man/SSL_CTX_use_certificate.326
-rw-r--r--secure/lib/libssl/man/SSL_CTX_use_psk_identity_hint.312
-rw-r--r--secure/lib/libssl/man/SSL_CTX_use_serverinfo.3179
-rw-r--r--secure/lib/libssl/man/SSL_SESSION_free.32
-rw-r--r--secure/lib/libssl/man/SSL_SESSION_get_ex_new_index.32
-rw-r--r--secure/lib/libssl/man/SSL_SESSION_get_time.32
-rw-r--r--secure/lib/libssl/man/SSL_accept.37
-rw-r--r--secure/lib/libssl/man/SSL_alert_type_string.32
-rw-r--r--secure/lib/libssl/man/SSL_clear.32
-rw-r--r--secure/lib/libssl/man/SSL_connect.32
-rw-r--r--secure/lib/libssl/man/SSL_do_handshake.37
-rw-r--r--secure/lib/libssl/man/SSL_free.32
-rw-r--r--secure/lib/libssl/man/SSL_get_SSL_CTX.32
-rw-r--r--secure/lib/libssl/man/SSL_get_ciphers.32
-rw-r--r--secure/lib/libssl/man/SSL_get_client_CA_list.32
-rw-r--r--secure/lib/libssl/man/SSL_get_current_cipher.32
-rw-r--r--secure/lib/libssl/man/SSL_get_default_timeout.32
-rw-r--r--secure/lib/libssl/man/SSL_get_error.32
-rw-r--r--secure/lib/libssl/man/SSL_get_ex_data_X509_STORE_CTX_idx.32
-rw-r--r--secure/lib/libssl/man/SSL_get_ex_new_index.32
-rw-r--r--secure/lib/libssl/man/SSL_get_fd.32
-rw-r--r--secure/lib/libssl/man/SSL_get_peer_cert_chain.32
-rw-r--r--secure/lib/libssl/man/SSL_get_peer_certificate.32
-rw-r--r--secure/lib/libssl/man/SSL_get_psk_identity.32
-rw-r--r--secure/lib/libssl/man/SSL_get_rbio.32
-rw-r--r--secure/lib/libssl/man/SSL_get_session.32
-rw-r--r--secure/lib/libssl/man/SSL_get_verify_result.32
-rw-r--r--secure/lib/libssl/man/SSL_get_version.32
-rw-r--r--secure/lib/libssl/man/SSL_library_init.32
-rw-r--r--secure/lib/libssl/man/SSL_load_client_CA_file.32
-rw-r--r--secure/lib/libssl/man/SSL_new.32
-rw-r--r--secure/lib/libssl/man/SSL_pending.32
-rw-r--r--secure/lib/libssl/man/SSL_read.32
-rw-r--r--secure/lib/libssl/man/SSL_rstate_string.32
-rw-r--r--secure/lib/libssl/man/SSL_session_reused.32
-rw-r--r--secure/lib/libssl/man/SSL_set_bio.32
-rw-r--r--secure/lib/libssl/man/SSL_set_connect_state.32
-rw-r--r--secure/lib/libssl/man/SSL_set_fd.32
-rw-r--r--secure/lib/libssl/man/SSL_set_session.32
-rw-r--r--secure/lib/libssl/man/SSL_set_shutdown.32
-rw-r--r--secure/lib/libssl/man/SSL_set_verify_result.32
-rw-r--r--secure/lib/libssl/man/SSL_shutdown.36
-rw-r--r--secure/lib/libssl/man/SSL_state_string.32
-rw-r--r--secure/lib/libssl/man/SSL_want.32
-rw-r--r--secure/lib/libssl/man/SSL_write.32
-rw-r--r--secure/lib/libssl/man/d2i_SSL_SESSION.32
-rw-r--r--secure/lib/libssl/man/ssl.310
-rw-r--r--secure/usr.bin/openssl/man/CA.pl.12
-rw-r--r--secure/usr.bin/openssl/man/asn1parse.12
-rw-r--r--secure/usr.bin/openssl/man/c_rehash.137
-rw-r--r--secure/usr.bin/openssl/man/ca.12
-rw-r--r--secure/usr.bin/openssl/man/ciphers.182
-rw-r--r--secure/usr.bin/openssl/man/cms.155
-rw-r--r--secure/usr.bin/openssl/man/crl.12
-rw-r--r--secure/usr.bin/openssl/man/crl2pkcs7.12
-rw-r--r--secure/usr.bin/openssl/man/dgst.12
-rw-r--r--secure/usr.bin/openssl/man/dhparam.12
-rw-r--r--secure/usr.bin/openssl/man/dsa.12
-rw-r--r--secure/usr.bin/openssl/man/dsaparam.12
-rw-r--r--secure/usr.bin/openssl/man/ec.12
-rw-r--r--secure/usr.bin/openssl/man/ecparam.12
-rw-r--r--secure/usr.bin/openssl/man/enc.12
-rw-r--r--secure/usr.bin/openssl/man/errstr.12
-rw-r--r--secure/usr.bin/openssl/man/gendsa.12
-rw-r--r--secure/usr.bin/openssl/man/genpkey.116
-rw-r--r--secure/usr.bin/openssl/man/genrsa.12
-rw-r--r--secure/usr.bin/openssl/man/nseq.12
-rw-r--r--secure/usr.bin/openssl/man/ocsp.14
-rw-r--r--secure/usr.bin/openssl/man/openssl.12
-rw-r--r--secure/usr.bin/openssl/man/passwd.12
-rw-r--r--secure/usr.bin/openssl/man/pkcs12.12
-rw-r--r--secure/usr.bin/openssl/man/pkcs7.12
-rw-r--r--secure/usr.bin/openssl/man/pkcs8.115
-rw-r--r--secure/usr.bin/openssl/man/pkey.12
-rw-r--r--secure/usr.bin/openssl/man/pkeyparam.12
-rw-r--r--secure/usr.bin/openssl/man/pkeyutl.12
-rw-r--r--secure/usr.bin/openssl/man/rand.12
-rw-r--r--secure/usr.bin/openssl/man/req.16
-rw-r--r--secure/usr.bin/openssl/man/rsa.12
-rw-r--r--secure/usr.bin/openssl/man/rsautl.12
-rw-r--r--secure/usr.bin/openssl/man/s_client.126
-rw-r--r--secure/usr.bin/openssl/man/s_server.121
-rw-r--r--secure/usr.bin/openssl/man/s_time.12
-rw-r--r--secure/usr.bin/openssl/man/sess_id.12
-rw-r--r--secure/usr.bin/openssl/man/smime.14
-rw-r--r--secure/usr.bin/openssl/man/speed.12
-rw-r--r--secure/usr.bin/openssl/man/spkac.12
-rw-r--r--secure/usr.bin/openssl/man/ts.12
-rw-r--r--secure/usr.bin/openssl/man/tsget.12
-rw-r--r--secure/usr.bin/openssl/man/verify.140
-rw-r--r--secure/usr.bin/openssl/man/version.12
-rw-r--r--secure/usr.bin/openssl/man/x509.111
-rw-r--r--secure/usr.bin/openssl/man/x509v3_config.12
-rw-r--r--share/colldef/Makefile2
-rw-r--r--share/ctypedef/Makefile2
-rw-r--r--share/examples/smbfs/Makefile2
-rw-r--r--share/examples/smbfs/print/Makefile2
-rw-r--r--share/keys/pkg/trusted/Makefile2
-rw-r--r--share/man/man4/Makefile3
-rw-r--r--share/man/man4/cloudabi.47
-rw-r--r--share/man/man4/ioat.479
-rw-r--r--share/man/man4/isp.454
-rw-r--r--share/man/man4/tcp.413
-rw-r--r--share/man/man4/wlan.43
-rw-r--r--share/man/man5/style.Makefile.59
-rw-r--r--share/man/man7/build.716
-rw-r--r--share/man/man9/BUS_ADD_CHILD.921
-rw-r--r--share/man/man9/Makefile30
-rw-r--r--share/man/man9/bitset.919
-rw-r--r--share/man/man9/cpuset.9352
-rw-r--r--share/man/man9/device_add_child.916
-rw-r--r--share/man/man9/getenv.920
-rw-r--r--share/man/man9/sysctl.938
-rw-r--r--share/misc/bsd-family-tree30
-rw-r--r--share/misc/committers-src.dot11
-rw-r--r--share/misc/scsi_modes2
-rw-r--r--share/mk/bsd.README1
-rw-r--r--share/mk/bsd.compiler.mk31
-rw-r--r--share/mk/bsd.confs.mk18
-rw-r--r--share/mk/bsd.crunchgen.mk156
-rw-r--r--share/mk/bsd.files.mk3
-rw-r--r--share/mk/bsd.man.mk34
-rw-r--r--share/mk/bsd.progs.mk10
-rw-r--r--share/mk/bsd.subdir.mk82
-rw-r--r--share/mk/src.opts.mk21
-rw-r--r--share/monetdef/Makefile2
-rw-r--r--share/msgdef/Makefile2
-rw-r--r--share/numericdef/Makefile2
-rw-r--r--share/sendmail/Makefile2
-rw-r--r--share/skel/Makefile4
-rw-r--r--sys/amd64/Makefile7
-rw-r--r--sys/amd64/amd64/initcpu.c13
-rw-r--r--sys/amd64/amd64/pmap.c47
-rw-r--r--sys/amd64/cloudabi64/cloudabi64_sysvec.c119
-rw-r--r--sys/amd64/include/cpufunc.h7
-rw-r--r--sys/amd64/include/xen/xen-os.h134
-rw-r--r--sys/amd64/linux/linux_proto.h2
-rw-r--r--sys/amd64/linux/linux_syscall.h2
-rw-r--r--sys/amd64/linux/linux_syscalls.c2
-rw-r--r--sys/amd64/linux/linux_sysent.c2
-rw-r--r--sys/amd64/linux/linux_systrace_args.c12
-rw-r--r--sys/amd64/linux/syscalls.master6
-rw-r--r--sys/amd64/linux32/linux.h2
-rw-r--r--sys/amd64/linux32/linux32_locore.s4
-rw-r--r--sys/amd64/linux32/linux32_proto.h562
-rw-r--r--sys/amd64/linux32/linux32_syscall.h634
-rw-r--r--sys/amd64/linux32/linux32_syscalls.c4
-rw-r--r--sys/amd64/linux32/linux32_sysent.c4
-rw-r--r--sys/amd64/linux32/linux32_sysvec.c12
-rw-r--r--sys/amd64/linux32/syscalls.conf8
-rw-r--r--sys/amd64/linux32/syscalls.master2
-rw-r--r--sys/arm/amlogic/aml8726/aml8726_machdep.c2
-rw-r--r--sys/arm/arm/busdma_machdep-v6.c513
-rw-r--r--sys/arm/arm/busdma_machdep.c718
-rw-r--r--sys/arm/arm/cpufunc.c2
-rw-r--r--sys/arm/arm/cpuinfo.c79
-rw-r--r--sys/arm/arm/gic.c10
-rw-r--r--sys/arm/arm/locore-v6.S6
-rw-r--r--sys/arm/arm/mp_machdep.c6
-rw-r--r--sys/arm/arm/pmap-v6-new.c12
-rw-r--r--sys/arm/arm/pmap-v6.c6
-rw-r--r--sys/arm/broadcom/bcm2835/bcm2835_mbox.c2
-rw-r--r--sys/arm/broadcom/bcm2835/bcm2835_vcbus.h2
-rw-r--r--sys/arm/conf/ARMADAXP1
-rw-r--r--sys/arm/conf/DB-78XXX1
-rw-r--r--sys/arm/conf/DB-88F5XXX1
-rw-r--r--sys/arm/conf/DB-88F6XXX1
-rw-r--r--sys/arm/conf/DOCKSTAR1
-rw-r--r--sys/arm/conf/DREAMPLUG-10011
-rw-r--r--sys/arm/conf/EP80219111
-rw-r--r--sys/arm/conf/IQ31244110
-rw-r--r--sys/arm/conf/LN2410SBC90
-rw-r--r--sys/arm/conf/NOTES6
-rw-r--r--sys/arm/conf/SHEEVAPLUG1
-rw-r--r--sys/arm/conf/TS78001
-rw-r--r--sys/arm/include/cpu-v6.h75
-rw-r--r--sys/arm/include/cpuinfo.h19
-rw-r--r--sys/arm/include/pmap-v6.h5
-rw-r--r--sys/arm/include/pmap.h1
-rw-r--r--sys/arm/samsung/s3c2xx0/files.s3c2xx014
-rw-r--r--sys/arm/samsung/s3c2xx0/s3c2410reg.h96
-rw-r--r--sys/arm/samsung/s3c2xx0/s3c2410var.h49
-rw-r--r--sys/arm/samsung/s3c2xx0/s3c2440reg.h109
-rw-r--r--sys/arm/samsung/s3c2xx0/s3c24x0.c802
-rw-r--r--sys/arm/samsung/s3c2xx0/s3c24x0_clk.c287
-rw-r--r--sys/arm/samsung/s3c2xx0/s3c24x0_machdep.c405
-rw-r--r--sys/arm/samsung/s3c2xx0/s3c24x0_rtc.c162
-rw-r--r--sys/arm/samsung/s3c2xx0/s3c24x0reg.h718
-rw-r--r--sys/arm/samsung/s3c2xx0/s3c2xx0board.h36
-rw-r--r--sys/arm/samsung/s3c2xx0/s3c2xx0reg.h139
-rw-r--r--sys/arm/samsung/s3c2xx0/s3c2xx0var.h84
-rw-r--r--sys/arm/samsung/s3c2xx0/std.ln2410sbc10
-rw-r--r--sys/arm/samsung/s3c2xx0/std.s3c24108
-rw-r--r--sys/arm/samsung/s3c2xx0/uart_bus_s3c2410.c60
-rw-r--r--sys/arm/samsung/s3c2xx0/uart_dev_s3c2410.c406
-rw-r--r--sys/arm/samsung/s3c2xx0/uart_dev_s3c2410.h88
-rw-r--r--sys/arm/ti/am335x/am335x_pmic.c2
-rw-r--r--sys/arm/ti/am335x/tda19988.c2
-rw-r--r--sys/arm64/arm64/busdma_bounce.c100
-rw-r--r--sys/arm64/arm64/gic_v3_its.c6
-rw-r--r--sys/arm64/arm64/locore.S78
-rw-r--r--sys/arm64/arm64/trap.c14
-rw-r--r--sys/arm64/cavium/thunder_pcie.c42
-rw-r--r--sys/arm64/cloudabi64/cloudabi64_sysvec.c162
-rw-r--r--sys/arm64/conf/GENERIC1
-rw-r--r--sys/arm64/include/armreg.h4
-rw-r--r--sys/arm64/include/asm.h2
-rwxr-xr-xsys/boot/common/newvers.sh12
-rw-r--r--sys/cam/ctl/ctl.c192
-rw-r--r--sys/cam/ctl/ctl.h3
-rw-r--r--sys/cam/ctl/ctl_backend_block.c2
-rw-r--r--sys/cam/ctl/ctl_frontend_cam_sim.c11
-rw-r--r--sys/cam/ctl/ctl_frontend_iscsi.c61
-rw-r--r--sys/cam/ctl/scsi_ctl.c60
-rw-r--r--sys/cam/scsi/scsi_message.h6
-rw-r--r--sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c31
-rw-r--r--sys/cddl/dev/systrace/systrace.c44
-rw-r--r--sys/compat/cloudabi64/cloudabi64_module.c148
-rw-r--r--sys/compat/cloudabi64/cloudabi64_util.h10
-rw-r--r--sys/compat/linux/linux_misc.c11
-rw-r--r--sys/compat/linuxkpi/common/include/asm/atomic-long.h (renamed from sys/ofed/include/asm/atomic-long.h)3
-rw-r--r--sys/compat/linuxkpi/common/include/asm/atomic.h (renamed from sys/ofed/include/asm/atomic.h)3
-rw-r--r--sys/compat/linuxkpi/common/include/asm/byteorder.h (renamed from sys/ofed/include/asm/byteorder.h)3
-rw-r--r--sys/compat/linuxkpi/common/include/asm/fcntl.h (renamed from sys/ofed/include/asm/fcntl.h)2
-rw-r--r--sys/compat/linuxkpi/common/include/asm/io.h (renamed from sys/ofed/include/asm/io.h)5
-rw-r--r--sys/compat/linuxkpi/common/include/asm/pgtable.h (renamed from sys/ofed/include/asm/pgtable.h)2
-rw-r--r--sys/compat/linuxkpi/common/include/asm/types.h (renamed from sys/ofed/include/asm/types.h)3
-rw-r--r--sys/compat/linuxkpi/common/include/asm/uaccess.h (renamed from sys/ofed/include/asm/uaccess.h)3
-rw-r--r--sys/compat/linuxkpi/common/include/linux/bitops.h (renamed from sys/ofed/include/linux/bitops.h)143
-rw-r--r--sys/compat/linuxkpi/common/include/linux/cache.h (renamed from sys/ofed/include/linux/cache.h)3
-rw-r--r--sys/compat/linuxkpi/common/include/linux/cdev.h (renamed from sys/ofed/include/linux/cdev.h)3
-rw-r--r--sys/compat/linuxkpi/common/include/linux/clocksource.h (renamed from sys/ofed/include/linux/clocksource.h)3
-rw-r--r--sys/compat/linuxkpi/common/include/linux/compat.h (renamed from sys/ofed/include/linux/compat.h)3
-rw-r--r--sys/compat/linuxkpi/common/include/linux/compiler.h (renamed from sys/ofed/include/linux/compiler.h)13
-rw-r--r--sys/compat/linuxkpi/common/include/linux/completion.h (renamed from sys/ofed/include/linux/completion.h)3
-rw-r--r--sys/compat/linuxkpi/common/include/linux/delay.h (renamed from sys/ofed/include/linux/delay.h)28
-rw-r--r--sys/compat/linuxkpi/common/include/linux/device.h (renamed from sys/ofed/include/linux/device.h)2
-rw-r--r--sys/compat/linuxkpi/common/include/linux/dma-attrs.h (renamed from sys/ofed/include/linux/dma-attrs.h)2
-rw-r--r--sys/compat/linuxkpi/common/include/linux/dma-mapping.h (renamed from sys/ofed/include/linux/dma-mapping.h)2
-rw-r--r--sys/compat/linuxkpi/common/include/linux/dmapool.h (renamed from sys/ofed/include/linux/dmapool.h)3
-rw-r--r--sys/compat/linuxkpi/common/include/linux/err.h (renamed from sys/ofed/include/linux/err.h)11
-rw-r--r--sys/compat/linuxkpi/common/include/linux/errno.h (renamed from sys/ofed/include/linux/errno.h)5
-rw-r--r--sys/compat/linuxkpi/common/include/linux/etherdevice.h62
-rw-r--r--sys/compat/linuxkpi/common/include/linux/file.h (renamed from sys/ofed/include/linux/file.h)2
-rw-r--r--sys/compat/linuxkpi/common/include/linux/fs.h (renamed from sys/ofed/include/linux/fs.h)2
-rw-r--r--sys/compat/linuxkpi/common/include/linux/gfp.h (renamed from sys/ofed/include/linux/gfp.h)3
-rw-r--r--sys/compat/linuxkpi/common/include/linux/hardirq.h (renamed from sys/ofed/include/linux/hardirq.h)2
-rw-r--r--sys/compat/linuxkpi/common/include/linux/idr.h (renamed from sys/ofed/include/linux/idr.h)3
-rw-r--r--sys/compat/linuxkpi/common/include/linux/if_arp.h (renamed from sys/ofed/include/linux/if_arp.h)2
-rw-r--r--sys/compat/linuxkpi/common/include/linux/if_ether.h (renamed from sys/ofed/include/linux/if_ether.h)2
-rw-r--r--sys/compat/linuxkpi/common/include/linux/if_vlan.h (renamed from sys/ofed/include/linux/if_vlan.h)3
-rw-r--r--sys/compat/linuxkpi/common/include/linux/in.h (renamed from sys/ofed/include/linux/in.h)2
-rw-r--r--sys/compat/linuxkpi/common/include/linux/in6.h (renamed from sys/ofed/include/linux/in6.h)3
-rw-r--r--sys/compat/linuxkpi/common/include/linux/inetdevice.h (renamed from sys/ofed/include/linux/inetdevice.h)3
-rw-r--r--sys/compat/linuxkpi/common/include/linux/interrupt.h (renamed from sys/ofed/include/linux/interrupt.h)22
-rw-r--r--sys/compat/linuxkpi/common/include/linux/io-mapping.h (renamed from sys/ofed/include/linux/io-mapping.h)3
-rw-r--r--sys/compat/linuxkpi/common/include/linux/io.h (renamed from sys/ofed/include/linux/io.h)3
-rw-r--r--sys/compat/linuxkpi/common/include/linux/ioctl.h (renamed from sys/ofed/include/linux/ioctl.h)3
-rw-r--r--sys/compat/linuxkpi/common/include/linux/jhash.h (renamed from sys/ofed/include/linux/jhash.h)2
-rw-r--r--sys/compat/linuxkpi/common/include/linux/jiffies.h (renamed from sys/ofed/include/linux/jiffies.h)40
-rw-r--r--sys/compat/linuxkpi/common/include/linux/kdev_t.h (renamed from sys/ofed/include/linux/kdev_t.h)3
-rw-r--r--sys/compat/linuxkpi/common/include/linux/kernel.h (renamed from sys/ofed/include/linux/kernel.h)42
-rw-r--r--sys/compat/linuxkpi/common/include/linux/kmod.h (renamed from sys/ofed/include/linux/kmod.h)3
-rw-r--r--sys/compat/linuxkpi/common/include/linux/kobject.h (renamed from sys/ofed/include/linux/kobject.h)2
-rw-r--r--sys/compat/linuxkpi/common/include/linux/kref.h (renamed from sys/ofed/include/linux/kref.h)36
-rw-r--r--sys/compat/linuxkpi/common/include/linux/kthread.h (renamed from sys/ofed/include/linux/kthread.h)2
-rw-r--r--sys/compat/linuxkpi/common/include/linux/ktime.h135
-rw-r--r--sys/compat/linuxkpi/common/include/linux/list.h (renamed from sys/ofed/include/linux/list.h)39
-rw-r--r--sys/compat/linuxkpi/common/include/linux/lockdep.h (renamed from sys/ofed/include/linux/lockdep.h)3
-rw-r--r--sys/compat/linuxkpi/common/include/linux/log2.h (renamed from sys/ofed/include/linux/log2.h)57
-rw-r--r--sys/compat/linuxkpi/common/include/linux/math64.h (renamed from sys/ofed/include/linux/math64.h)3
-rw-r--r--sys/compat/linuxkpi/common/include/linux/miscdevice.h (renamed from sys/ofed/include/linux/miscdevice.h)3
-rw-r--r--sys/compat/linuxkpi/common/include/linux/mm.h (renamed from sys/ofed/include/linux/mm.h)26
-rw-r--r--sys/compat/linuxkpi/common/include/linux/module.h (renamed from sys/ofed/include/linux/module.h)2
-rw-r--r--sys/compat/linuxkpi/common/include/linux/moduleparam.h (renamed from sys/ofed/include/linux/moduleparam.h)3
-rw-r--r--sys/compat/linuxkpi/common/include/linux/mutex.h (renamed from sys/ofed/include/linux/mutex.h)2
-rw-r--r--sys/compat/linuxkpi/common/include/linux/net.h (renamed from sys/ofed/include/linux/net.h)3
-rw-r--r--sys/compat/linuxkpi/common/include/linux/netdevice.h (renamed from sys/ofed/include/linux/netdevice.h)2
-rw-r--r--sys/compat/linuxkpi/common/include/linux/notifier.h (renamed from sys/ofed/include/linux/notifier.h)3
-rw-r--r--sys/compat/linuxkpi/common/include/linux/page.h (renamed from sys/ofed/include/linux/page.h)2
-rw-r--r--sys/compat/linuxkpi/common/include/linux/pci.h (renamed from sys/ofed/include/linux/pci.h)3
-rw-r--r--sys/compat/linuxkpi/common/include/linux/poll.h (renamed from sys/ofed/include/linux/poll.h)3
-rw-r--r--sys/compat/linuxkpi/common/include/linux/printk.h (renamed from sys/ofed/include/linux/printk.h)3
-rw-r--r--sys/compat/linuxkpi/common/include/linux/radix-tree.h (renamed from sys/ofed/include/linux/radix-tree.h)3
-rw-r--r--sys/compat/linuxkpi/common/include/linux/random.h (renamed from sys/ofed/include/linux/random.h)3
-rw-r--r--sys/compat/linuxkpi/common/include/linux/rbtree.h (renamed from sys/ofed/include/linux/rbtree.h)2
-rw-r--r--sys/compat/linuxkpi/common/include/linux/rwlock.h (renamed from sys/ofed/include/linux/rwlock.h)2
-rw-r--r--sys/compat/linuxkpi/common/include/linux/rwsem.h (renamed from sys/ofed/include/linux/rwsem.h)2
-rw-r--r--sys/compat/linuxkpi/common/include/linux/scatterlist.h (renamed from sys/ofed/include/linux/scatterlist.h)174
-rw-r--r--sys/compat/linuxkpi/common/include/linux/sched.h (renamed from sys/ofed/include/linux/sched.h)11
-rw-r--r--sys/compat/linuxkpi/common/include/linux/semaphore.h (renamed from sys/ofed/include/linux/semaphore.h)2
-rw-r--r--sys/compat/linuxkpi/common/include/linux/slab.h (renamed from sys/ofed/include/linux/slab.h)2
-rw-r--r--sys/compat/linuxkpi/common/include/linux/socket.h (renamed from sys/ofed/include/linux/socket.h)2
-rw-r--r--sys/compat/linuxkpi/common/include/linux/spinlock.h (renamed from sys/ofed/include/linux/spinlock.h)2
-rw-r--r--sys/compat/linuxkpi/common/include/linux/string.h (renamed from sys/ofed/include/linux/string.h)3
-rw-r--r--sys/compat/linuxkpi/common/include/linux/sysfs.h (renamed from sys/ofed/include/linux/sysfs.h)3
-rw-r--r--sys/compat/linuxkpi/common/include/linux/time.h131
-rw-r--r--sys/compat/linuxkpi/common/include/linux/timer.h (renamed from sys/ofed/include/linux/timer.h)2
-rw-r--r--sys/compat/linuxkpi/common/include/linux/types.h (renamed from sys/ofed/include/linux/types.h)4
-rw-r--r--sys/compat/linuxkpi/common/include/linux/uaccess.h (renamed from sys/ofed/include/linux/uaccess.h)19
-rw-r--r--sys/compat/linuxkpi/common/include/linux/usb.h (renamed from sys/dev/usb/usb_compat_linux.h)0
-rw-r--r--sys/compat/linuxkpi/common/include/linux/vmalloc.h (renamed from sys/ofed/include/linux/vmalloc.h)3
-rw-r--r--sys/compat/linuxkpi/common/include/linux/wait.h (renamed from sys/ofed/include/linux/wait.h)2
-rw-r--r--sys/compat/linuxkpi/common/include/linux/workqueue.h (renamed from sys/ofed/include/linux/workqueue.h)2
-rw-r--r--sys/compat/linuxkpi/common/include/net/if_inet6.h (renamed from sys/ofed/include/net/if_inet6.h)3
-rw-r--r--sys/compat/linuxkpi/common/include/net/ip.h (renamed from sys/ofed/include/net/ip.h)3
-rw-r--r--sys/compat/linuxkpi/common/include/net/ipv6.h (renamed from sys/ofed/include/net/ipv6.h)3
-rw-r--r--sys/compat/linuxkpi/common/include/net/netevent.h (renamed from sys/ofed/include/net/netevent.h)3
-rw-r--r--sys/compat/linuxkpi/common/include/net/tcp.h (renamed from sys/ofed/include/net/tcp.h)3
-rw-r--r--sys/compat/linuxkpi/common/src/linux_compat.c (renamed from sys/ofed/include/linux/linux_compat.c)9
-rw-r--r--sys/compat/linuxkpi/common/src/linux_idr.c (renamed from sys/ofed/include/linux/linux_idr.c)3
-rw-r--r--sys/compat/linuxkpi/common/src/linux_kmod.c (renamed from sys/ofed/include/linux/linux_kmod.c)8
-rw-r--r--sys/compat/linuxkpi/common/src/linux_pci.c (renamed from sys/ofed/include/linux/linux_pci.c)4
-rw-r--r--sys/compat/linuxkpi/common/src/linux_radix.c (renamed from sys/ofed/include/linux/linux_radix.c)3
-rw-r--r--sys/compat/linuxkpi/common/src/linux_usb.c (renamed from sys/dev/usb/usb_compat_linux.c)13
-rw-r--r--sys/conf/NOTES3
-rw-r--r--sys/conf/files31
-rw-r--r--sys/conf/files.arm1
-rw-r--r--sys/conf/files.arm642
-rw-r--r--sys/conf/files.i3861
-rw-r--r--sys/conf/files.mips2
-rw-r--r--sys/conf/files.pc981
-rw-r--r--sys/conf/files.powerpc1
-rw-r--r--sys/conf/files.sparc641
-rw-r--r--sys/conf/kern.pre.mk6
-rw-r--r--sys/conf/options2
-rw-r--r--sys/contrib/rdma/krping/krping.c2
-rw-r--r--sys/contrib/vchiq/interface/vchiq_arm/vchiq_2835_arm.c26
-rw-r--r--sys/dev/ata/chipsets/ata-jmicron.c5
-rw-r--r--sys/dev/cxgb/ulp/iw_cxgb/iw_cxgb.c2
-rw-r--r--sys/dev/cxgbe/iw_cxgbe/device.c2
-rw-r--r--sys/dev/cxgbe/iw_cxgbe/iw_cxgbe.h8
-rw-r--r--sys/dev/cxgbe/iw_cxgbe/qp.c3
-rw-r--r--sys/dev/cxgbe/tom/t4_cpl_io.c2
-rw-r--r--sys/dev/drm2/i915/i915_dma.c326
-rw-r--r--sys/dev/drm2/i915/i915_drv.c661
-rw-r--r--sys/dev/drm2/i915/i915_gem_execbuffer.c107
-rw-r--r--sys/dev/drm2/i915/i915_irq.c1000
-rw-r--r--sys/dev/drm2/i915/intel_crt.c14
-rw-r--r--sys/dev/drm2/i915/intel_display.c161
-rw-r--r--sys/dev/drm2/i915/intel_pm.c68
-rw-r--r--sys/dev/drm2/i915/intel_ringbuffer.c87
-rw-r--r--sys/dev/drm2/i915/intel_ringbuffer.h15
-rw-r--r--sys/dev/etherswitch/arswitch/arswitch_8327.c10
-rw-r--r--sys/dev/etherswitch/e6000sw/e6000sw.c976
-rw-r--r--sys/dev/etherswitch/e6000sw/e6000swreg.h185
-rw-r--r--sys/dev/filemon/filemon.c3
-rw-r--r--sys/dev/iicbus/icee.c157
-rw-r--r--sys/dev/iicbus/iicbb.c17
-rw-r--r--sys/dev/iicbus/iicbus.c9
-rw-r--r--sys/dev/iicbus/iicoc.c1
-rw-r--r--sys/dev/iicbus/iiconf.c15
-rw-r--r--sys/dev/iicbus/iiconf.h2
-rw-r--r--sys/dev/iicbus/iicsmb.c6
-rw-r--r--sys/dev/ioat/ioat.c1147
-rw-r--r--sys/dev/ioat/ioat.h22
-rw-r--r--sys/dev/ioat/ioat_hw.h58
-rw-r--r--sys/dev/ioat/ioat_internal.h64
-rw-r--r--sys/dev/ioat/ioat_test.c411
-rw-r--r--sys/dev/ioat/ioat_test.h54
-rw-r--r--sys/dev/isp/isp.c782
-rw-r--r--sys/dev/isp/isp_freebsd.c1162
-rw-r--r--sys/dev/isp/isp_freebsd.h25
-rw-r--r--sys/dev/isp/isp_library.c312
-rw-r--r--sys/dev/isp/isp_library.h6
-rw-r--r--sys/dev/isp/isp_pci.c85
-rw-r--r--sys/dev/isp/isp_sbus.c16
-rw-r--r--sys/dev/isp/isp_stds.h2
-rw-r--r--sys/dev/isp/isp_target.c23
-rw-r--r--sys/dev/isp/isp_target.h4
-rw-r--r--sys/dev/isp/ispmbox.h154
-rw-r--r--sys/dev/isp/ispreg.h31
-rw-r--r--sys/dev/isp/ispvar.h13
-rw-r--r--sys/dev/ispfw/asm_2400.h42656
-rw-r--r--sys/dev/ispfw/asm_2500.h40601
-rw-r--r--sys/dev/ispfw/ispfw.c67
-rw-r--r--sys/dev/iwm/if_iwm.c10
-rw-r--r--sys/dev/iwn/if_iwn.c16
-rw-r--r--sys/dev/mge/if_mge.c404
-rw-r--r--sys/dev/mge/if_mgevar.h30
-rw-r--r--sys/dev/ntb/if_ntb/if_ntb.c225
-rw-r--r--sys/dev/ntb/ntb_hw/ntb_hw.c792
-rw-r--r--sys/dev/ntb/ntb_hw/ntb_hw.h17
-rw-r--r--sys/dev/ntb/ntb_hw/ntb_regs.h104
-rw-r--r--sys/dev/nvd/nvd.c1
-rw-r--r--sys/dev/nvme/nvme.h1
-rw-r--r--sys/dev/nvme/nvme_ns.c16
-rw-r--r--sys/dev/ofw/ofw_iicbus.c6
-rw-r--r--sys/dev/otus/if_otus.c179
-rw-r--r--sys/dev/otus/if_otusreg.h40
-rw-r--r--sys/dev/qlxgbe/ql_hw.c3
-rw-r--r--sys/dev/qlxgbe/ql_os.c2
-rw-r--r--sys/dev/qlxgbe/ql_ver.h2
-rw-r--r--sys/dev/ral/rt2860.c22
-rw-r--r--sys/dev/ral/rt2860var.h2
-rw-r--r--sys/dev/sound/midi/midi.c12
-rw-r--r--sys/dev/usb/controller/dwc_otg.c17
-rw-r--r--sys/dev/usb/usb_device.c4
-rw-r--r--sys/dev/usb/usb_dynamic.c30
-rw-r--r--sys/dev/usb/usb_dynamic.h3
-rw-r--r--sys/dev/usb/wlan/if_run.c33
-rw-r--r--sys/dev/usb/wlan/if_urtwn.c212
-rw-r--r--sys/dev/usb/wlan/if_urtwnreg.h55
-rw-r--r--sys/dev/usb/wlan/if_urtwnvar.h8
-rw-r--r--sys/dev/wpi/if_wpi.c8
-rw-r--r--sys/dev/wtap/if_wtap.c6
-rw-r--r--sys/dev/xen/balloon/balloon.c10
-rw-r--r--sys/dev/xen/blkback/blkback.c2
-rw-r--r--sys/dev/xen/control/control.c2
-rw-r--r--sys/dev/xen/grant_table/grant_table.c9
-rw-r--r--sys/dev/xen/netback/netback.c6
-rw-r--r--sys/dev/xen/netfront/netfront.c447
-rw-r--r--sys/dev/xen/xenpci/xenpci.c3
-rw-r--r--sys/dev/xen/xenstore/xenstore.c2
-rw-r--r--sys/i386/i386/exception.s24
-rw-r--r--sys/i386/i386/initcpu.c12
-rw-r--r--sys/i386/i386/pmap.c43
-rw-r--r--sys/i386/include/asmacros.h6
-rw-r--r--sys/i386/include/cpufunc.h7
-rw-r--r--sys/i386/include/xen/xen-os.h190
-rw-r--r--sys/kern/Make.tags.inc44
-rw-r--r--sys/kern/bus_if.m4
-rw-r--r--sys/kern/init_sysent.c2
-rw-r--r--sys/kern/kern_fork.c3
-rw-r--r--sys/kern/kern_physio.c8
-rw-r--r--sys/kern/kern_sysctl.c64
-rw-r--r--sys/kern/kern_thread.c2
-rw-r--r--sys/kern/kern_umtx.c134
-rw-r--r--sys/kern/makesyscalls.sh4
-rw-r--r--sys/kern/subr_busdma_bufalloc.c4
-rw-r--r--sys/kern/subr_syscall.c3
-rw-r--r--sys/kern/sys_process.c19
-rw-r--r--sys/kern/syscalls.c2
-rw-r--r--sys/kern/vfs_aio.c11
-rw-r--r--sys/kern/vfs_bio.c9
-rw-r--r--sys/kern/vfs_mountroot.c97
-rw-r--r--sys/libkern/ffs.c2
-rw-r--r--sys/libkern/ffsl.c2
-rw-r--r--sys/libkern/ffsll.c (renamed from sys/arm/samsung/s3c2xx0/board_ln2410sbc.c)37
-rw-r--r--sys/libkern/fls.c2
-rw-r--r--sys/libkern/flsl.c2
-rw-r--r--sys/libkern/flsll.c2
-rw-r--r--sys/mips/atheros/if_arge.c138
-rw-r--r--sys/mips/atheros/if_argevar.h11
-rw-r--r--sys/mips/conf/TL-WR740Nv453
-rw-r--r--sys/mips/conf/TL-WR740Nv4.hints87
-rw-r--r--sys/mips/conf/TP-MR30203
-rw-r--r--sys/mips/include/cpuregs.h2
-rw-r--r--sys/mips/include/pmap.h3
-rw-r--r--sys/mips/mips/busdma_machdep.c339
-rw-r--r--sys/mips/mips/pmap.c48
-rw-r--r--sys/modules/Makefile47
-rw-r--r--sys/modules/cloudabi64/Makefile6
-rw-r--r--sys/modules/cxgb/iw_cxgb/Makefile1
-rw-r--r--sys/modules/cxgbe/iw_cxgbe/Makefile1
-rw-r--r--sys/modules/dtrace/Makefile5
-rw-r--r--sys/modules/dtrace/systrace_linux/Makefile18
-rw-r--r--sys/modules/dtrace/systrace_linux32/Makefile6
-rw-r--r--sys/modules/hwpmc/Makefile4
-rw-r--r--sys/modules/i2c/iicbb/Makefile3
-rw-r--r--sys/modules/ibcore/Makefile5
-rw-r--r--sys/modules/ipoib/Makefile5
-rw-r--r--sys/modules/ispfw/Makefile2
-rw-r--r--sys/modules/ispfw/isp_2400_multi/Makefile35
-rw-r--r--sys/modules/ispfw/isp_2500_multi/Makefile35
-rw-r--r--sys/modules/linuxapi/Makefile18
-rw-r--r--sys/modules/linuxkpi/Makefile21
-rw-r--r--sys/modules/mlx4/Makefile4
-rw-r--r--sys/modules/mlx4ib/Makefile4
-rw-r--r--sys/modules/mlxen/Makefile3
-rw-r--r--sys/modules/mthca/Makefile2
-rw-r--r--sys/modules/rdma/krping/Makefile5
-rw-r--r--sys/modules/uart/Makefile4
-rw-r--r--sys/modules/usb/usb/Makefile2
-rw-r--r--sys/net/if.c4
-rw-r--r--sys/net/if_gre.c8
-rw-r--r--sys/net/if_lagg.c129
-rw-r--r--sys/net/if_lagg.h8
-rw-r--r--sys/net/if_tap.c2
-rw-r--r--sys/net/pfvar.h5
-rw-r--r--sys/net/route.c2
-rw-r--r--sys/net80211/ieee80211.c2
-rw-r--r--sys/net80211/ieee80211_proto.c24
-rw-r--r--sys/net80211/ieee80211_proto.h1
-rw-r--r--sys/net80211/ieee80211_var.h1
-rw-r--r--sys/netgraph/bluetooth/hci/ng_hci_evnt.c3
-rw-r--r--sys/netgraph/bluetooth/hci/ng_hci_ulpi.c31
-rw-r--r--sys/netgraph/bluetooth/hci/ng_hci_ulpi.h1
-rw-r--r--sys/netgraph/bluetooth/include/ng_btsocket.h2
-rw-r--r--sys/netgraph/bluetooth/include/ng_btsocket_l2cap.h8
-rw-r--r--sys/netgraph/bluetooth/include/ng_hci.h8
-rw-r--r--sys/netgraph/bluetooth/include/ng_l2cap.h9
-rw-r--r--sys/netgraph/bluetooth/l2cap/ng_l2cap_evnt.c6
-rw-r--r--sys/netgraph/bluetooth/l2cap/ng_l2cap_llpi.c52
-rw-r--r--sys/netgraph/bluetooth/l2cap/ng_l2cap_llpi.h1
-rw-r--r--sys/netgraph/bluetooth/l2cap/ng_l2cap_main.c4
-rw-r--r--sys/netgraph/bluetooth/l2cap/ng_l2cap_misc.c8
-rw-r--r--sys/netgraph/bluetooth/l2cap/ng_l2cap_ulpi.c106
-rw-r--r--sys/netgraph/bluetooth/l2cap/ng_l2cap_ulpi.h2
-rw-r--r--sys/netgraph/bluetooth/l2cap/ng_l2cap_var.h3
-rw-r--r--sys/netgraph/bluetooth/socket/ng_btsocket_l2cap.c128
-rw-r--r--sys/netinet/ip_ipsec.c4
-rw-r--r--sys/netinet/sctp_input.c4
-rw-r--r--sys/netinet/tcp_input.c45
-rw-r--r--sys/netinet/tcp_sack.c6
-rw-r--r--sys/netinet/tcp_subr.c3
-rw-r--r--sys/netinet/tcp_var.h14
-rw-r--r--sys/netinet6/frag6.c4
-rw-r--r--sys/netipsec/ipsec.c6
-rw-r--r--sys/netpfil/pf/pf.c10
-rw-r--r--sys/ofed/drivers/infiniband/core/cma.c3
-rw-r--r--sys/ofed/drivers/infiniband/core/device.c2
-rw-r--r--sys/ofed/drivers/infiniband/core/fmr_pool.c3
-rw-r--r--sys/ofed/drivers/infiniband/core/uverbs_main.c2
-rw-r--r--sys/ofed/drivers/infiniband/hw/mlx4/main.c2
-rw-r--r--sys/ofed/drivers/infiniband/hw/mthca/mthca_main.c2
-rw-r--r--sys/ofed/drivers/infiniband/ulp/ipoib/ipoib_main.c2
-rw-r--r--sys/ofed/drivers/net/mlx4/en_main.c2
-rw-r--r--sys/ofed/drivers/net/mlx4/en_netdev.c3
-rw-r--r--sys/ofed/drivers/net/mlx4/main.c2
-rw-r--r--sys/ofed/include/linux/etherdevice.h97
-rw-r--r--sys/ofed/include/linux/ktime.h300
-rw-r--r--sys/powerpc/powerpc/machdep.c8
-rw-r--r--sys/sys/_bitset.h2
-rw-r--r--sys/sys/imgact_elf.h1
-rw-r--r--sys/sys/ktr_class.h2
-rw-r--r--sys/sys/libkern.h3
-rw-r--r--sys/sys/param.h2
-rw-r--r--sys/sys/proc.h2
-rw-r--r--sys/sys/ptrace.h2
-rw-r--r--sys/sys/syscall.h2
-rw-r--r--sys/sys/syscall.mk2
-rw-r--r--sys/sys/sysctl.h44
-rw-r--r--sys/sys/sysproto.h2
-rw-r--r--sys/sys/umtx.h1
-rw-r--r--sys/ufs/ffs/ffs_balloc.c8
-rw-r--r--sys/vm/vm_page.h5
-rw-r--r--sys/vm/vnode_pager.c120
-rw-r--r--sys/x86/include/apicvar.h1
-rw-r--r--sys/x86/include/xen/xen-os.h38
-rw-r--r--sys/x86/x86/busdma_bounce.c1
-rw-r--r--sys/x86/x86/identcpu.c12
-rw-r--r--sys/x86/xen/xen_intr.c39
-rw-r--r--sys/xen/blkif.h4
-rw-r--r--sys/xen/hypervisor.h53
-rw-r--r--sys/xen/xen-os.h28
-rw-r--r--sys/xen/xen_intr.h2
-rw-r--r--targets/pseudo/userland/Makefile.depend1
-rw-r--r--targets/pseudo/userland/lib/Makefile.depend1
-rw-r--r--tests/sys/kern/Makefile1
-rw-r--r--tests/sys/kern/kern_copyin.c86
-rw-r--r--tools/bsdbox/Makefile.base2
-rw-r--r--tools/build/mk/OptionalObsoleteFiles.inc35
-rw-r--r--tools/build/options/WITHOUT_DEBUG_FILES3
-rw-r--r--tools/regression/net80211/ccmp/test_ccmp.c64
-rw-r--r--tools/regression/net80211/tkip/test_tkip.c69
-rw-r--r--tools/regression/net80211/wep/test_wep.c69
-rw-r--r--tools/regression/security/open_to_operation/Makefile2
-rw-r--r--tools/regression/security/open_to_operation/open_to_operation.c27
-rw-r--r--tools/test/README16
-rw-r--r--tools/test/net/Makefile9
-rw-r--r--tools/test/net/connect.c86
-rw-r--r--tools/test/net/listen.c106
-rw-r--r--tools/tools/ioat/Makefile1
-rw-r--r--tools/tools/ioat/ioatcontrol.8105
-rw-r--r--tools/tools/ioat/ioatcontrol.c173
-rw-r--r--usr.bin/Makefile6
-rw-r--r--usr.bin/ar/write.c9
-rw-r--r--usr.bin/bmake/Makefile5
-rw-r--r--usr.bin/calendar/parsedata.c2
-rw-r--r--usr.bin/dpv/dpv.16
-rw-r--r--usr.bin/dtc/HACKING24
-rw-r--r--usr.bin/dtc/Makefile2
-rw-r--r--usr.bin/dtc/checking.cc33
-rw-r--r--usr.bin/dtc/checking.hh26
-rw-r--r--usr.bin/dtc/dtb.cc11
-rw-r--r--usr.bin/dtc/dtb.hh2
-rw-r--r--usr.bin/dtc/dtc.cc2
-rw-r--r--usr.bin/dtc/fdt.cc612
-rw-r--r--usr.bin/dtc/fdt.hh138
-rw-r--r--usr.bin/dtc/input_buffer.cc16
-rw-r--r--usr.bin/dtc/input_buffer.hh6
-rw-r--r--usr.bin/dtc/string.hh17
-rw-r--r--usr.bin/getconf/sysconf.gperf2
-rw-r--r--usr.bin/gzip/gzip.114
-rw-r--r--usr.bin/gzip/gzip.c3
-rw-r--r--usr.bin/indent/indent.12
-rw-r--r--usr.bin/locale/locale.c4
-rw-r--r--usr.bin/look/look.12
-rw-r--r--usr.bin/mkdep/mkdep.110
-rw-r--r--usr.bin/mkimg/mkimg.12
-rw-r--r--usr.bin/mt/mt.c4
-rw-r--r--usr.bin/patch/pch.c2
-rw-r--r--usr.bin/pr/egetopt.c2
-rw-r--r--usr.bin/sed/compile.c2
-rw-r--r--usr.bin/sockstat/sockstat.c6
-rw-r--r--usr.bin/sort/sort.1.in33
-rw-r--r--usr.bin/sort/sort.c10
-rw-r--r--usr.bin/systat/Makefile2
-rw-r--r--usr.bin/systat/cmdtab.c3
-rw-r--r--usr.bin/systat/extern.h1
-rw-r--r--usr.bin/systat/sctp.c362
-rw-r--r--usr.bin/systat/systat.19
-rw-r--r--usr.bin/timeout/timeout.c2
-rw-r--r--usr.bin/truss/Makefile5
-rw-r--r--usr.bin/truss/aarch64-cloudabi64.c90
-rw-r--r--usr.bin/truss/amd64-cloudabi64.c87
-rw-r--r--usr.bin/truss/cloudabi.c122
-rw-r--r--usr.bin/truss/cloudabi.h (renamed from lib/libgpib/gpib.h)9
-rw-r--r--usr.bin/vgrind/regexp.c2
-rw-r--r--usr.bin/vi/catalog/Makefile2
-rw-r--r--usr.sbin/Makefile1
-rw-r--r--usr.sbin/bhyve/bhyverun.c3
-rw-r--r--usr.sbin/bhyve/pci_emul.c2
-rw-r--r--usr.sbin/bluetooth/sdpcontrol/search.c52
-rwxr-xr-xusr.sbin/bsdconfig/bsdconfig2
-rw-r--r--usr.sbin/config/config.h2
-rw-r--r--usr.sbin/ctld/ctld.c2
-rw-r--r--usr.sbin/fwcontrol/fwmpegts.c2
-rw-r--r--usr.sbin/jail/command.c2
-rw-r--r--usr.sbin/jail/jailp.h2
-rw-r--r--usr.sbin/jail/jailparse.y2
-rw-r--r--usr.sbin/jls/jls.c2
-rw-r--r--usr.sbin/makefs/Makefile6
-rw-r--r--usr.sbin/makefs/cd9660.c5
-rw-r--r--usr.sbin/makefs/cd9660/cd9660_write.c6
-rw-r--r--usr.sbin/makefs/cd9660/iso9660_rrip.c9
-rw-r--r--usr.sbin/makefs/makefs.815
-rw-r--r--usr.sbin/makefs/makefs.c6
-rw-r--r--usr.sbin/makefs/tests/Makefile15
-rwxr-xr-xusr.sbin/makefs/tests/makefs_cd9660_tests.sh315
-rwxr-xr-xusr.sbin/makefs/tests/makefs_ffs_tests.sh172
-rwxr-xr-xusr.sbin/makefs/tests/makefs_tests_common.sh145
-rw-r--r--usr.sbin/mfiutil/mfiutil.88
-rw-r--r--usr.sbin/mpsutil/Makefile22
-rw-r--r--usr.sbin/mpsutil/Makefile.depend (renamed from lib/libgpib/Makefile.depend)2
-rw-r--r--usr.sbin/mpsutil/mpr_ioctl.h388
-rw-r--r--usr.sbin/mpsutil/mps_cmd.c673
-rw-r--r--usr.sbin/mpsutil/mps_ioctl.h387
-rw-r--r--usr.sbin/mpsutil/mps_show.c772
-rw-r--r--usr.sbin/mpsutil/mpsutil.8129
-rw-r--r--usr.sbin/mpsutil/mpsutil.c207
-rw-r--r--usr.sbin/mpsutil/mpsutil.h144
-rw-r--r--usr.sbin/mptable/mptable.c3
-rw-r--r--usr.sbin/nandsim/nandsim.82
-rw-r--r--usr.sbin/nandsim/nandsim.c2
-rw-r--r--usr.sbin/nandsim/nandsim_cfgparse.c4
-rw-r--r--usr.sbin/ndiscvt/Makefile3
-rw-r--r--usr.sbin/ndp/ndp.c2
-rw-r--r--usr.sbin/newsyslog/newsyslog.c61
-rw-r--r--usr.sbin/newsyslog/newsyslog.conf.519
-rw-r--r--usr.sbin/ntp/config.h10
-rw-r--r--usr.sbin/ntp/doc/ntp-keygen.84
-rw-r--r--usr.sbin/ntp/doc/ntp.conf.554
-rw-r--r--usr.sbin/ntp/doc/ntp.keys.56
-rw-r--r--usr.sbin/ntp/doc/ntpd.827
-rw-r--r--usr.sbin/ntp/doc/ntpdc.84
-rw-r--r--usr.sbin/ntp/doc/ntpq.816
-rw-r--r--usr.sbin/ntp/doc/sntp.87
-rwxr-xr-xusr.sbin/ntp/scripts/mkver2
-rw-r--r--usr.sbin/pmcstudy/eval_expr.c2
-rw-r--r--usr.sbin/ppp/ip.c2
-rw-r--r--usr.sbin/ppp/ppp.84
-rw-r--r--usr.sbin/pw/pw_group.c2
-rw-r--r--usr.sbin/pw/pw_user.c9
-rw-r--r--usr.sbin/rtadvd/config.c5
-rw-r--r--usr.sbin/rtadvd/if.c3
-rw-r--r--usr.sbin/rtsold/rtsold.c10
-rw-r--r--usr.sbin/rtsold/rtsold.h2
-rw-r--r--usr.sbin/tzsetup/tzsetup.c26
-rw-r--r--usr.sbin/uefisign/magic.h2
-rw-r--r--usr.sbin/uefisign/pe.c2
-rw-r--r--usr.sbin/ypbind/ypbind.c2
-rw-r--r--usr.sbin/ypserv/ypinit.sh2
-rw-r--r--usr.sbin/zic/zdump/Makefile2
-rw-r--r--usr.sbin/zic/zic/Makefile2
2142 files changed, 203154 insertions, 110743 deletions
diff --git a/MAINTAINERS b/MAINTAINERS
index 7e6610f..19222d7 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -18,6 +18,12 @@ However, this is not a 'big stick', it is an offer to help and a source
of guidance. It does not override the communal nature of the tree.
It is not a registry of 'turf' or private property.
+***
+This list is prone to becoming stale quickly. The best way to find the recent
+maintainer of a sub-system is to check recent logs for that directory or
+sub-system.
+***
+
subsystem login notes
-----------------------------
kqueue jmg Pre-commit review requested. Documentation Required.
@@ -31,8 +37,6 @@ sys/security/audit rwatson Pre-commit review requested.
ath(4) adrian Pre-commit review requested, send to freebsd-wireless@freebsd.org
ahc(4) gibbs Pre-commit review requested.
ahd(4) gibbs Pre-commit review requested.
-PC Card imp Pre-commit review requested.
-CardBus imp Pre-commit review requested.
pci bus imp,jhb Pre-commit review requested.
cdboot jhb Pre-commit review requested.
pxeboot jhb Pre-commit review requested.
@@ -66,8 +70,7 @@ net80211 adrian Pre-commit review requested, send to freebsd-wireless@freebsd.or
nvi peter Try not to break it.
libz peter Try not to break it.
groff ru Recommends pre-commit review.
-share/mk ru This is a vital component of the build system, so I
- offer a pre-commit review for anything non-trivial.
+share/mk imp, bapt, bdrewery, emaste, sjg Make is hard.
ipfw ipfw Pre-commit review preferred. send to ipfw@freebsd.org
drm rnoland Just keep me informed of changes, try not to break it.
unifdef(1) fanf Pre-commit review requested.
@@ -81,6 +84,7 @@ file obrien Insists to keep file blocked from other's unapproved
contrib/bzip2 obrien Pre-commit review required.
contrib/netbsd-tests freebsd-testing,ngie Pre-commit review requested.
contrib/pjdfstest freebsd-testing,ngie Pre-commit review requested.
+geom freebsd-geom@FreeBSD.org
geom_concat pjd Pre-commit review preferred.
geom_eli pjd Pre-commit review preferred.
geom_gate pjd Pre-commit review preferred.
@@ -92,16 +96,16 @@ geom_shsec pjd Pre-commit review preferred.
geom_stripe pjd Pre-commit review preferred.
geom_zero pjd Pre-commit review preferred.
sbin/geom pjd Pre-commit review preferred.
-zfs pjd Pre-commit review preferred.
-nfs alfred Will be happy to review code, but not mandatory.
-rpc.lockd alfred Will be happy to review code, but not mandatory.
-truss alfred Will be happy to review code, but not mandatory.
-rpc alfred Pre-commit review requested.
+zfs freebsd-fs@FreeBSD.org
+nfs freebsd-fs@FreeBSD.org, rmacklem is best for reviews.
linux emul emulation Please discuss changes here.
bs{diff,patch} cperciva Pre-commit review requested.
portsnap cperciva Pre-commit review requested.
freebsd-update cperciva Pre-commit review requested.
openssl benl,jkim Pre-commit review requested.
+sys/dev/usb hselasky If in doubt, ask.
+sys/dev/sound/usb hselasky If in doubt, ask.
+sys/compat/linuxkpi hselasky If in doubt, ask.
sys/netgraph/bluetooth emax Pre-commit review preferred.
lib/libbluetooth emax Pre-commit review preferred.
lib/libsdp emax Pre-commit review preferred.
diff --git a/Makefile.inc1 b/Makefile.inc1
index 2c79d96..767387a 100644
--- a/Makefile.inc1
+++ b/Makefile.inc1
@@ -30,6 +30,8 @@
# BUILDENV_SHELL= shell to launch for the buildenv target (def:/bin/sh)
# WORLD_FLAGS= additional flags to pass to make(1) during buildworld
# KERNEL_FLAGS= additional flags to pass to make(1) during buildkernel
+# SUBDIR_OVERRIDE="list of dirs" to build rather than everything.
+# All libraries and includes, and some build tools will still build.
#
# The intended user-driven targets are:
@@ -59,7 +61,7 @@
# system here would require fine-grained ordering of all components based
# on their dependencies.
SRCDIR?= ${.CURDIR}
-.if defined(SUBDIR_OVERRIDE)
+.if !empty(SUBDIR_OVERRIDE)
SUBDIR= ${SUBDIR_OVERRIDE}
.else
SUBDIR= lib libexec
@@ -113,7 +115,6 @@ SUBDIR+= ${_DIR}
.warning ${_DIR} not added to SUBDIR list. See UPDATING 20141121.
.endif
.endfor
-.endif
# We must do etc/ last as it hooks into building the man whatis file
# by calling 'makedb' in share/man. This is only relevant for
@@ -124,7 +125,10 @@ SUBDIR+=.WAIT
.endif
SUBDIR+=etc
+.endif # !empty(SUBDIR_OVERRIDE)
+
.if defined(NOCLEAN)
+.warning NOCLEAN option is deprecated. Use NO_CLEAN instead.
NO_CLEAN= ${NOCLEAN}
.endif
.if defined(NO_CLEANDIR)
@@ -394,6 +398,9 @@ TARGET_ABI= gnueabi
.if defined(X_COMPILER_TYPE) && ${X_COMPILER_TYPE} == gcc
XCFLAGS+= -isystem ${WORLDTMP}/usr/include -L${WORLDTMP}/usr/lib
XCXXFLAGS+= -I${WORLDTMP}/usr/include/c++/v1 -std=gnu++11 -L${WORLDTMP}/../lib/libc++
+# XXX: DEPFLAGS is a workaround for not properly passing CXXFLAGS to sub-makes
+# due to CXX="${XCXX} ${XCXXFLAGS}". bsd.dep.mk does use CXXFLAGS when
+# building C++ files so this can come out if passing CXXFLAGS down is fixed.
DEPFLAGS+= -I${WORLDTMP}/usr/include/c++/v1
.else
TARGET_ABI?= unknown
@@ -513,7 +520,7 @@ KMAKE= ${KMAKEENV} ${MAKE} ${.MAKEFLAGS} ${KERNEL_FLAGS} KERNEL=${INSTKERNNAME}
# Attempt to rebuild the entire system, with reasonable chance of
# success, regardless of how old your existing system is.
#
-_worldtmp:
+_worldtmp: .PHONY
.if ${.CURDIR:C/[^,]//g} != ""
# The m4 build of sendmail files doesn't like it if ',' is used
# anywhere in the path of it's files.
@@ -560,6 +567,16 @@ _worldtmp:
mtree -deU -f ${.CURDIR}/etc/mtree/BSD.debug.dist \
-p ${WORLDTMP}/usr/lib >/dev/null
.endif
+.if ${MK_LIB32} != "no"
+ mtree -deU -f ${.CURDIR}/etc/mtree/BSD.lib32.dist \
+ -p ${WORLDTMP}/usr >/dev/null
+.if ${MK_DEBUG_FILES} != "no"
+ mtree -deU -f ${.CURDIR}/etc/mtree/BSD.lib32.dist \
+ -p ${WORLDTMP}/legacy/usr/lib/debug/usr >/dev/null
+ mtree -deU -f ${.CURDIR}/etc/mtree/BSD.lib32.dist \
+ -p ${WORLDTMP}/usr/lib/debug/usr >/dev/null
+.endif
+.endif
.if ${MK_TESTS} != "no"
mkdir -p ${WORLDTMP}${TESTSBASE}
mtree -deU -f ${.CURDIR}/etc/mtree/BSD.tests.dist \
@@ -620,8 +637,16 @@ _includes:
@echo "--------------------------------------------------------------"
@echo ">>> stage 4.1: building includes"
@echo "--------------------------------------------------------------"
+# Special handling for SUBDIR_OVERRIDE in buildworld as they most likely need
+# headers from default SUBDIR. Do SUBDIR_OVERRIDE includes last.
+ ${_+_}cd ${.CURDIR}; ${WMAKE} SUBDIR_OVERRIDE= SHARED=symlinks \
+ buildincludes
+ ${_+_}cd ${.CURDIR}; ${WMAKE} SUBDIR_OVERRIDE= SHARED=symlinks \
+ installincludes
+.if !empty(SUBDIR_OVERRIDE) && make(buildworld)
${_+_}cd ${.CURDIR}; ${WMAKE} SHARED=symlinks buildincludes
${_+_}cd ${.CURDIR}; ${WMAKE} SHARED=symlinks installincludes
+.endif
_libraries:
@echo
@echo "--------------------------------------------------------------"
@@ -643,7 +668,7 @@ everything:
@echo "--------------------------------------------------------------"
${_+_}cd ${.CURDIR}; ${WMAKE} par-all
.if defined(LIB32TMP)
-build32:
+build32: .PHONY
@echo
@echo "--------------------------------------------------------------"
@echo ">>> stage 5.1: building 32 bit shim libraries"
@@ -653,73 +678,76 @@ build32:
-p ${LIB32TMP}/usr >/dev/null
mtree -deU -f ${.CURDIR}/etc/mtree/BSD.include.dist \
-p ${LIB32TMP}/usr/include >/dev/null
+ mtree -deU -f ${.CURDIR}/etc/mtree/BSD.lib32.dist \
+ -p ${LIB32TMP}/usr >/dev/null
.if ${MK_DEBUG_FILES} != "no"
mtree -deU -f ${.CURDIR}/etc/mtree/BSD.debug.dist \
-p ${LIB32TMP}/usr/lib >/dev/null
+ mtree -deU -f ${.CURDIR}/etc/mtree/BSD.lib32.dist \
+ -p ${LIB32TMP}/usr/lib/debug/usr >/dev/null
.endif
mkdir -p ${WORLDTMP}
ln -sf ${.CURDIR}/sys ${WORLDTMP}
.for _t in obj includes
- cd ${.CURDIR}/include; ${LIB32WMAKE} DIRPRFX=include/ ${_t}
- cd ${.CURDIR}/lib; ${LIB32WMAKE} DIRPRFX=lib/ ${_t}
+ ${_+_}cd ${.CURDIR}/include; ${LIB32WMAKE} DIRPRFX=include/ ${_t}
+ ${_+_}cd ${.CURDIR}/lib; ${LIB32WMAKE} DIRPRFX=lib/ ${_t}
.if ${MK_CDDL} != "no"
- cd ${.CURDIR}/cddl/lib; ${LIB32WMAKE} DIRPRFX=cddl/lib/ ${_t}
+ ${_+_}cd ${.CURDIR}/cddl/lib; ${LIB32WMAKE} DIRPRFX=cddl/lib/ ${_t}
.endif
- cd ${.CURDIR}/gnu/lib; ${LIB32WMAKE} DIRPRFX=gnu/lib/ ${_t}
+ ${_+_}cd ${.CURDIR}/gnu/lib; ${LIB32WMAKE} DIRPRFX=gnu/lib/ ${_t}
.if ${MK_CRYPT} != "no"
- cd ${.CURDIR}/secure/lib; ${LIB32WMAKE} DIRPRFX=secure/lib/ ${_t}
+ ${_+_}cd ${.CURDIR}/secure/lib; ${LIB32WMAKE} DIRPRFX=secure/lib/ ${_t}
.endif
.if ${MK_KERBEROS} != "no"
- cd ${.CURDIR}/kerberos5/lib; ${LIB32WMAKE} DIRPRFX=kerberos5/lib ${_t}
+ ${_+_}cd ${.CURDIR}/kerberos5/lib; ${LIB32WMAKE} DIRPRFX=kerberos5/lib ${_t}
.endif
.endfor
.for _dir in usr.bin/lex/lib
- cd ${.CURDIR}/${_dir}; ${LIB32WMAKE} DIRPRFX=${_dir}/ obj
+ ${_+_}cd ${.CURDIR}/${_dir}; ${LIB32WMAKE} DIRPRFX=${_dir}/ obj
.endfor
.for _dir in lib/ncurses/ncurses lib/ncurses/ncursesw lib/libmagic
- cd ${.CURDIR}/${_dir}; \
+ ${_+_}cd ${.CURDIR}/${_dir}; \
WORLDTMP=${WORLDTMP} \
MAKEFLAGS="-m ${.CURDIR}/tools/build/mk ${.MAKEFLAGS}" \
MAKEOBJDIRPREFIX=${LIB32_OBJTREE} ${MAKE} SSP_CFLAGS= DESTDIR= \
DIRPRFX=${_dir}/ -DNO_LINT -DNO_CPU_CFLAGS MK_WARNS=no MK_CTF=no \
build-tools
.endfor
- cd ${.CURDIR}; \
+ ${_+_}cd ${.CURDIR}; \
${LIB32WMAKE} -f Makefile.inc1 libraries
.for _t in obj depend all
- cd ${.CURDIR}/libexec/rtld-elf; PROG=ld-elf32.so.1 ${LIB32WMAKE} \
+ ${_+_}cd ${.CURDIR}/libexec/rtld-elf; PROG=ld-elf32.so.1 ${LIB32WMAKE} \
DIRPRFX=libexec/rtld-elf/ ${_t}
- cd ${.CURDIR}/usr.bin/ldd; PROG=ldd32 ${LIB32WMAKE} \
+ ${_+_}cd ${.CURDIR}/usr.bin/ldd; PROG=ldd32 ${LIB32WMAKE} \
DIRPRFX=usr.bin/ldd ${_t}
.endfor
-distribute32 install32:
- cd ${.CURDIR}/lib; ${LIB32IMAKE} ${.TARGET:S/32$//}
+distribute32 install32: .MAKE .PHONY
+ ${_+_}cd ${.CURDIR}/lib; ${LIB32IMAKE} ${.TARGET:S/32$//}
.if ${MK_CDDL} != "no"
- cd ${.CURDIR}/cddl/lib; ${LIB32IMAKE} ${.TARGET:S/32$//}
+ ${_+_}cd ${.CURDIR}/cddl/lib; ${LIB32IMAKE} ${.TARGET:S/32$//}
.endif
- cd ${.CURDIR}/gnu/lib; ${LIB32IMAKE} ${.TARGET:S/32$//}
+ ${_+_}cd ${.CURDIR}/gnu/lib; ${LIB32IMAKE} ${.TARGET:S/32$//}
.if ${MK_CRYPT} != "no"
- cd ${.CURDIR}/secure/lib; ${LIB32IMAKE} ${.TARGET:S/32$//}
+ ${_+_}cd ${.CURDIR}/secure/lib; ${LIB32IMAKE} ${.TARGET:S/32$//}
.endif
.if ${MK_KERBEROS} != "no"
- cd ${.CURDIR}/kerberos5/lib; ${LIB32IMAKE} ${.TARGET:S/32$//}
+ ${_+_}cd ${.CURDIR}/kerberos5/lib; ${LIB32IMAKE} ${.TARGET:S/32$//}
.endif
- cd ${.CURDIR}/libexec/rtld-elf; \
+ ${_+_}cd ${.CURDIR}/libexec/rtld-elf; \
PROG=ld-elf32.so.1 ${LIB32IMAKE} ${.TARGET:S/32$//}
- cd ${.CURDIR}/usr.bin/ldd; PROG=ldd32 ${LIB32IMAKE} ${.TARGET:S/32$//}
+ ${_+_}cd ${.CURDIR}/usr.bin/ldd; PROG=ldd32 ${LIB32IMAKE} \
+ ${.TARGET:S/32$//}
.endif
WMAKE_TGTS=
-.if !defined(SUBDIR_OVERRIDE)
-WMAKE_TGTS+= _worldtmp _legacy _bootstrap-tools
-.endif
-WMAKE_TGTS+= _cleanobj _obj _build-tools
-.if !defined(SUBDIR_OVERRIDE)
-WMAKE_TGTS+= _cross-tools
+WMAKE_TGTS+= _worldtmp _legacy
+.if empty(SUBDIR_OVERRIDE)
+WMAKE_TGTS+= _bootstrap-tools
.endif
+WMAKE_TGTS+= _cleanobj _obj _build-tools _cross-tools
WMAKE_TGTS+= _includes _libraries _depend everything
-.if defined(LIB32TMP) && ${MK_LIB32} != "no"
+.if defined(LIB32TMP) && ${MK_LIB32} != "no" && empty(SUBDIR_OVERRIDE)
WMAKE_TGTS+= build32
.endif
@@ -901,6 +929,14 @@ distributeworld installworld: _installcheck_world
mtree -deU -f ${.CURDIR}/etc/mtree/BSD.debug.dist \
-p ${DESTDIR}/${DISTDIR}/${dist}/usr/lib >/dev/null
.endif
+.if ${MK_LIB32} != "no"
+ mtree -deU -f ${.CURDIR}/etc/mtree/BSD.lib32.dist \
+ -p ${DESTDIR}/${DISTDIR}/${dist}/usr >/dev/null
+.if ${MK_DEBUG_FILES} != "no"
+ mtree -deU -f ${.CURDIR}/etc/mtree/BSD.lib32.dist \
+ -p ${DESTDIR}/${DISTDIR}/${dist}/usr/lib/debug/usr >/dev/null
+.endif
+.endif
.if ${MK_TESTS} != "no" && ${dist} == "tests"
-mkdir -p ${DESTDIR}/${DISTDIR}/${dist}${TESTSBASE}
mtree -deU -f ${.CURDIR}/etc/mtree/BSD.tests.dist \
@@ -917,10 +953,14 @@ distributeworld installworld: _installcheck_world
sed -e 's#^\./#./${dist}/usr/#' >> ${METALOG}
${IMAKEENV} mtree -C -f ${.CURDIR}/etc/mtree/BSD.include.dist | \
sed -e 's#^\./#./${dist}/usr/include/#' >> ${METALOG}
+.if ${MK_LIB32} != "no"
+ ${IMAKEENV} mtree -C -f ${.CURDIR}/etc/mtree/BSD.lib32.dist | \
+ sed -e 's#^\./#./${dist}/usr/#' >> ${METALOG}
+.endif
.endif
.endfor
-mkdir ${DESTDIR}/${DISTDIR}/base
- cd ${.CURDIR}/etc; ${CROSSENV} PATH=${TMPPATH} ${MAKE} \
+ ${_+_}cd ${.CURDIR}/etc; ${CROSSENV} PATH=${TMPPATH} ${MAKE} \
METALOG=${METALOG} ${IMAKE_INSTALL} ${IMAKE_MTREE} \
DISTBASE=/base DESTDIR=${DESTDIR}/${DISTDIR}/base \
LOCAL_MTREE=${LOCAL_MTREE:Q} distrib-dirs
@@ -988,7 +1028,7 @@ packageworld:
# and do a 'make reinstall' on the *client* to install new binaries from the
# most recent server build.
#
-reinstall: .MAKE
+reinstall: .MAKE .PHONY
@echo "--------------------------------------------------------------"
@echo ">>> Making hierarchy"
@echo "--------------------------------------------------------------"
@@ -1003,7 +1043,7 @@ reinstall: .MAKE
${_+_}cd ${.CURDIR}; ${MAKE} -f Makefile.inc1 install32
.endif
-redistribute: .MAKE
+redistribute: .MAKE .PHONY
@echo "--------------------------------------------------------------"
@echo ">>> Distributing everything"
@echo "--------------------------------------------------------------"
@@ -1013,12 +1053,12 @@ redistribute: .MAKE
DISTRIBUTION=lib32
.endif
-distrib-dirs: .MAKE
- cd ${.CURDIR}/etc; ${CROSSENV} PATH=${TMPPATH} ${MAKE} \
+distrib-dirs: .MAKE .PHONY
+ ${_+_}cd ${.CURDIR}/etc; ${CROSSENV} PATH=${TMPPATH} ${MAKE} \
${IMAKE_INSTALL} ${IMAKE_MTREE} METALOG=${METALOG} ${.TARGET}
-distribution: .MAKE
- cd ${.CURDIR}/etc; ${CROSSENV} PATH=${TMPPATH} ${MAKE} \
+distribution: .MAKE .PHONY
+ ${_+_}cd ${.CURDIR}/etc; ${CROSSENV} PATH=${TMPPATH} ${MAKE} \
${IMAKE_INSTALL} ${IMAKE_MTREE} METALOG=${METALOG} ${.TARGET}
${_+_}cd ${.CURDIR}; ${CROSSENV} PATH=${TMPPATH} \
${MAKE} -f Makefile.inc1 ${IMAKE_INSTALL} \
@@ -1071,14 +1111,14 @@ INSTALLKERNEL= ${_kernel}
.endif
.endfor
-buildkernel ${WMAKE_TGTS:N_worldtmp:Nbuild32} ${.ALLTARGETS:M_*:N_worldtmp}: .MAKE .PHONY
+${WMAKE_TGTS:N_worldtmp:Nbuild32} ${.ALLTARGETS:M_*:N_worldtmp}: .MAKE .PHONY
#
# buildkernel
#
# Builds all kernels defined by BUILDKERNELS.
#
-buildkernel:
+buildkernel: .MAKE .PHONY
.if empty(BUILDKERNELS)
@echo "ERROR: Missing kernel configuration file(s) (${KERNCONF})."; \
false
@@ -1105,14 +1145,14 @@ buildkernel:
@echo "--------------------------------------------------------------"
@echo ">>> stage 2.1: cleaning up the object tree"
@echo "--------------------------------------------------------------"
- cd ${KRNLOBJDIR}/${_kernel}; ${KMAKE} ${CLEANDIR}
+ ${_+_}cd ${KRNLOBJDIR}/${_kernel}; ${KMAKE} ${CLEANDIR}
.endif
.if !defined(NO_KERNELOBJ)
@echo
@echo "--------------------------------------------------------------"
@echo ">>> stage 2.2: rebuilding the object tree"
@echo "--------------------------------------------------------------"
- cd ${KRNLOBJDIR}/${_kernel}; ${KMAKE} obj
+ ${_+_}cd ${KRNLOBJDIR}/${_kernel}; ${KMAKE} obj
.endif
@echo
@echo "--------------------------------------------------------------"
@@ -1124,13 +1164,13 @@ buildkernel:
@echo "--------------------------------------------------------------"
@echo ">>> stage 3.1: making dependencies"
@echo "--------------------------------------------------------------"
- cd ${KRNLOBJDIR}/${_kernel}; ${KMAKE} depend -DNO_MODULES_OBJ
+ ${_+_}cd ${KRNLOBJDIR}/${_kernel}; ${KMAKE} depend -DNO_MODULES_OBJ
.endif
@echo
@echo "--------------------------------------------------------------"
@echo ">>> stage 3.2: building everything"
@echo "--------------------------------------------------------------"
- cd ${KRNLOBJDIR}/${_kernel}; ${KMAKE} all -DNO_MODULES_OBJ
+ ${_+_}cd ${KRNLOBJDIR}/${_kernel}; ${KMAKE} all -DNO_MODULES_OBJ
@echo "--------------------------------------------------------------"
@echo ">>> Kernel build for ${_kernel} completed on `LC_ALL=C date`"
@echo "--------------------------------------------------------------"
@@ -1231,12 +1271,12 @@ packagekernel:
#
# Build the API documentation with doxygen
#
-doxygen:
+doxygen: .PHONY
@if [ ! -x `/usr/bin/which doxygen` ]; then \
echo "You need doxygen (devel/doxygen) to generate the API documentation of the kernel." | /usr/bin/fmt; \
exit 1; \
fi
- cd ${.CURDIR}/tools/kerneldoc/subsys && ${MAKE} obj all
+ ${_+_}cd ${.CURDIR}/tools/kerneldoc/subsys && ${MAKE} obj all
#
# update
@@ -1471,7 +1511,6 @@ _gcc_tools= gnu/usr.bin/cc/cc_tools
_rescue=rescue/rescue
.endif
-build-tools: .MAKE
.for _tool in \
bin/csh \
bin/sh \
@@ -1485,18 +1524,22 @@ build-tools: .MAKE
usr.bin/mkesdb_static \
usr.bin/mkcsmapper_static \
usr.bin/vi/catalog
+build-tools_${_tool}: .PHONY
${_+_}@${ECHODIR} "===> ${_tool} (obj,build-tools)"; \
cd ${.CURDIR}/${_tool} && \
${MAKE} DIRPRFX=${_tool}/ obj && \
${MAKE} DIRPRFX=${_tool}/ build-tools
+build-tools: build-tools_${_tool}
.endfor
.for _tool in \
${_gcc_tools}
+build-tools_${_tool}: .PHONY
${_+_}@${ECHODIR} "===> ${_tool} (obj,depend,all)"; \
cd ${.CURDIR}/${_tool} && \
${MAKE} DIRPRFX=${_tool}/ obj && \
${MAKE} DIRPRFX=${_tool}/ depend && \
${MAKE} DIRPRFX=${_tool}/ all
+build-tools: build-tools_${_tool}
.endfor
#
@@ -1562,7 +1605,7 @@ _cc= gnu/usr.bin/cc
_usb_tools= sys/boot/usb/tools
.endif
-cross-tools: .MAKE
+cross-tools: .MAKE .PHONY
.for _tool in \
${_clang_libs} \
${_clang} \
@@ -1581,12 +1624,13 @@ cross-tools: .MAKE
${MAKE} DIRPRFX=${_tool}/ DESTDIR=${MAKEOBJDIRPREFIX} install
.endfor
+NXBDESTDIR= ${OBJTREE}/nxb-bin
NXBENV= MAKEOBJDIRPREFIX=${OBJTREE}/nxb \
INSTALL="sh ${.CURDIR}/tools/install.sh" \
PATH=${PATH}:${OBJTREE}/gperf_for_gcc/usr/bin
NXBMAKE= ${NXBENV} ${MAKE} \
- TBLGEN=${OBJTREE}/nxb-bin/usr/bin/tblgen \
- CLANG_TBLGEN=${OBJTREE}/nxb-bin/usr/bin/clang-tblgen \
+ TBLGEN=${NXBDESTDIR}/usr/bin/tblgen \
+ CLANG_TBLGEN=${NXBDESTDIR}/usr/bin/clang-tblgen \
MACHINE=${TARGET} MACHINE_ARCH=${TARGET_ARCH} \
MK_GDB=no MK_TESTS=no \
SSP_CFLAGS= \
@@ -1601,7 +1645,7 @@ NXBMAKE= ${NXBENV} ${MAKE} \
# For non-clang enabled targets that are still using the in tree gcc
# we must build a gperf binary for one instance of its Makefiles. On
# clang-enabled systems, the gperf binary is obsolete.
-native-xtools:
+native-xtools: .PHONY
.if ${MK_GCC_BOOTSTRAP} != "no"
mkdir -p ${OBJTREE}/gperf_for_gcc/usr/bin
${_+_}@${ECHODIR} "===> ${_gperf} (obj,depend,all,install)"; \
@@ -1611,13 +1655,15 @@ native-xtools:
${NXBMAKE} DIRPRFX=${_gperf}/ all && \
${NXBMAKE} DIRPRFX=${_gperf}/ DESTDIR=${OBJTREE}/gperf_for_gcc install
.endif
- mkdir -p ${OBJTREE}/nxb-bin/bin
- mkdir -p ${OBJTREE}/nxb-bin/sbin
- mkdir -p ${OBJTREE}/nxb-bin/usr
+ mkdir -p ${NXBDESTDIR}/bin ${NXBDESTDIR}/sbin ${NXBDESTDIR}/usr
mtree -deU -f ${.CURDIR}/etc/mtree/BSD.usr.dist \
- -p ${OBJTREE}/nxb-bin/usr >/dev/null
+ -p ${NXBDESTDIR}/usr >/dev/null
mtree -deU -f ${.CURDIR}/etc/mtree/BSD.include.dist \
- -p ${OBJTREE}/nxb-bin/usr/include >/dev/null
+ -p ${NXBDESTDIR}/usr/include >/dev/null
+.if ${MK_DEBUG_FILES} != "no"
+ mtree -deU -f ${.CURDIR}/etc/mtree/BSD.debug.dist \
+ -p ${NXBDESTDIR}/usr/lib >/dev/null
+.endif
.for _tool in \
bin/cat \
bin/chmod \
@@ -1682,14 +1728,14 @@ native-xtools:
${NXBMAKE} DIRPRFX=${_tool}/ obj && \
${NXBMAKE} DIRPRFX=${_tool}/ depend && \
${NXBMAKE} DIRPRFX=${_tool}/ all && \
- ${NXBMAKE} DIRPRFX=${_tool}/ DESTDIR=${OBJTREE}/nxb-bin install
+ ${NXBMAKE} DIRPRFX=${_tool}/ DESTDIR=${NXBDESTDIR} install
.endfor
#
# hierarchy - ensure that all the needed directories are present
#
-hierarchy hier: .MAKE
- cd ${.CURDIR}/etc && ${HMAKE} distrib-dirs
+hierarchy hier: .MAKE .PHONY
+ ${_+_}cd ${.CURDIR}/etc && ${HMAKE} distrib-dirs
#
# libraries - build all libraries, and install them under ${DESTDIR}.
@@ -1698,8 +1744,8 @@ hierarchy hier: .MAKE
# interdependencies (__L) are built automatically by the
# ${.CURDIR}/tools/make_libdeps.sh script.
#
-libraries: .MAKE
- cd ${.CURDIR} && \
+libraries: .MAKE .PHONY
+ ${_+_}cd ${.CURDIR} && \
${MAKE} -f Makefile.inc1 _prereq_libs && \
${MAKE} -f Makefile.inc1 _startup_libs && \
${MAKE} -f Makefile.inc1 _prebuild_libs && \
@@ -2197,12 +2243,12 @@ xdev: xdev-build xdev-install
.ORDER: _xb-worldtmp _xb-bootstrap-tools _xb-build-tools _xb-cross-tools
xdev-build: _xb-worldtmp _xb-bootstrap-tools _xb-build-tools _xb-cross-tools
-_xb-worldtmp:
+_xb-worldtmp: .PHONY
mkdir -p ${CDTMP}/usr
mtree -deU -f ${.CURDIR}/etc/mtree/BSD.usr.dist \
-p ${CDTMP}/usr >/dev/null
-_xb-bootstrap-tools:
+_xb-bootstrap-tools: .PHONY
.for _tool in \
${_clang_tblgen} \
${_gperf}
@@ -2214,11 +2260,11 @@ _xb-bootstrap-tools:
${CDMAKE} DIRPRFX=${_tool}/ DESTDIR=${CDTMP} install
.endfor
-_xb-build-tools:
+_xb-build-tools: .PHONY
${_+_}@cd ${.CURDIR}; \
${CDBENV} ${MAKE} -f Makefile.inc1 ${NOFUN} build-tools
-_xb-cross-tools:
+_xb-cross-tools: .PHONY
.for _tool in \
${_binutils} \
${_elftctools} \
@@ -2233,7 +2279,7 @@ _xb-cross-tools:
${CDMAKE} DIRPRFX=${_tool}/ all
.endfor
-_xi-mtree:
+_xi-mtree: .PHONY
${_+_}@${ECHODIR} "mtree populating ${XDDESTDIR}"
mkdir -p ${XDDESTDIR}
mtree -deU -f ${.CURDIR}/etc/mtree/BSD.root.dist \
@@ -2242,6 +2288,10 @@ _xi-mtree:
-p ${XDDESTDIR}/usr >/dev/null
mtree -deU -f ${.CURDIR}/etc/mtree/BSD.include.dist \
-p ${XDDESTDIR}/usr/include >/dev/null
+.if ${MK_LIB32} != "no"
+ mtree -deU -f ${.CURDIR}/etc/mtree/BSD.lib32.dist \
+ -p ${XDDESTDIR}/usr >/dev/null
+.endif
.if ${MK_TESTS} != "no"
mkdir -p ${XDDESTDIR}${TESTSBASE}
mtree -deU -f ${.CURDIR}/etc/mtree/BSD.tests.dist \
@@ -2251,7 +2301,7 @@ _xi-mtree:
.ORDER: xdev-build _xi-mtree _xi-cross-tools _xi-includes _xi-libraries
xdev-install: xdev-build _xi-mtree _xi-cross-tools _xi-includes _xi-libraries
-_xi-cross-tools:
+_xi-cross-tools: .PHONY
@echo "_xi-cross-tools"
.for _tool in \
${_binutils} \
@@ -2265,17 +2315,17 @@ _xi-cross-tools:
${CDMAKE} DIRPRFX=${_tool}/ install DESTDIR=${XDDESTDIR}
.endfor
-_xi-includes:
+_xi-includes: .PHONY
${_+_}cd ${.CURDIR}; ${CD2MAKE} -f Makefile.inc1 buildincludes \
DESTDIR=${XDDESTDIR}
${_+_}cd ${.CURDIR}; ${CD2MAKE} -f Makefile.inc1 installincludes \
DESTDIR=${XDDESTDIR}
-_xi-libraries:
+_xi-libraries: .PHONY
${_+_}cd ${.CURDIR}; ${CD2MAKE} -f Makefile.inc1 libraries \
DESTDIR=${XDDESTDIR}
-xdev-links:
+xdev-links: .PHONY
${_+_}cd ${XDDESTDIR}/usr/bin; \
mkdir -p ../../../../usr/bin; \
for i in *; do \
diff --git a/ObsoleteFiles.inc b/ObsoleteFiles.inc
index c04479e..0af25db 100644
--- a/ObsoleteFiles.inc
+++ b/ObsoleteFiles.inc
@@ -97,6 +97,15 @@ OLD_FILES+=usr/bin/colldef
OLD_FILES+=usr/share/man/man1/colldef.1.gz
OLD_FILES+=usr/bin/mklocale
OLD_FILES+=usr/share/man/man1/mklocale.1.gz
+# 20151030: OpenSSL 1.0.2d import
+OLD_FILES+=usr/share/openssl/man/man3/CMS_set1_signer_certs.3.gz
+OLD_FILES+=usr/share/openssl/man/man3/EVP_PKEY_ctrl.3.gz
+OLD_FILES+=usr/share/openssl/man/man3/EVP_PKEY_ctrl_str.3.gz
+OLD_FILES+=usr/share/openssl/man/man3/d2i_509_CRL_fp.3.gz
+OLD_LIBS+=lib/libcrypto.so.7
+OLD_LIBS+=usr/lib/libssl.so.7
+OLD_LIBS+=usr/lib32/libcrypto.so.7
+OLD_LIBS+=usr/lib32/libssl.so.7
# 20151015: test symbols moved to /usr/lib/debug
OLD_DIRS+=usr/tests/lib/atf/libatf-c++/.debug
OLD_FILES+=usr/tests/lib/atf/libatf-c++/.debug/atf_c++_test.debug
@@ -503,6 +512,8 @@ OLD_DIRS+=usr/share/doc/legal/intel_wpi
OLD_FILES+=usr/share/doc/legal/intel_wpi/LICENSE
# 20151006: new libc++ import
OLD_FILES+=usr/include/c++/__tuple_03
+OLD_FILES+=usr/include/c++/v1/__tuple_03
+OLD_FILES+=usr/include/c++/v1/tr1/__tuple_03
# 20151006: new clang import which bumps version from 3.6.1 to 3.7.0.
OLD_FILES+=usr/lib/clang/3.6.1/include/__stddef_max_align_t.h
OLD_FILES+=usr/lib/clang/3.6.1/include/__wmmintrin_aes.h
@@ -589,11 +600,16 @@ OLD_FILES+=usr/share/man/man4/dtrace-proc.4.gz
OLD_FILES+=usr/share/man/man4/dtrace-sched.4.gz
OLD_FILES+=usr/share/man/man4/dtrace-tcp.4.gz
OLD_FILES+=usr/share/man/man4/dtrace-udp.4.gz
+# 20150704: nvlist private headers no longer installed
+OLD_FILES+=usr/include/sys/nv_impl.h
+OLD_FILES+=usr/include/sys/nvlist_impl.h
+OLD_FILES+=usr/include/sys/nvpair_impl.h
# 20150624
OLD_LIBS+=usr/lib/libugidfw.so.4
OLD_LIBS+=usr/lib32/libugidfw.so.4
# 20150604: Move nvlist man pages to section 9.
OLD_FILES+=usr/share/man/man3/libnv.3.gz
+OLD_FILES+=usr/share/man/man3/nv.3.gz
OLD_FILES+=usr/share/man/man3/nvlist.3.gz
OLD_FILES+=usr/share/man/man3/nvlist_add_binary.3.gz
OLD_FILES+=usr/share/man/man3/nvlist_add_bool.3.gz
diff --git a/UPDATING b/UPDATING
index 1095ba6..a26c317 100644
--- a/UPDATING
+++ b/UPDATING
@@ -31,6 +31,15 @@ NOTE TO PEOPLE WHO THINK THAT FreeBSD 11.x IS SLOW:
disable the most expensive debugging functionality run
"ln -s 'abort:false,junk:false' /etc/malloc.conf".)
+20151030:
+ The OpenSSL has been upgraded to 1.0.2d. Any binaries requiring
+ libcrypto.so.7 or libssl.so.7 must be recompiled.
+
+20151020:
+ Qlogic 24xx/25xx firmware images were updated from 5.5.0 to 7.3.0.
+ Kernel modules isp_2400_multi and isp_2500_multi were removed and
+ should be replaced with isp_2400 and isp_2500 modules respectively.
+
20151017:
The build previously allowed using 'make -n' to not recurse into
sub-directories while showing what commands would be executed, and
diff --git a/bin/csh/config_p.h b/bin/csh/config_p.h
index a1bbea6..0006fe0 100644
--- a/bin/csh/config_p.h
+++ b/bin/csh/config_p.h
@@ -9,7 +9,7 @@
#ifndef _h_config
#define _h_config
-/****************** System dependant compilation flags ****************/
+/****************** System dependent compilation flags ****************/
/*
* POSIX This system supports IEEE Std 1003.1-1988 (POSIX).
*/
diff --git a/bin/ls/tests/ls_tests.sh b/bin/ls/tests/ls_tests.sh
index 39c8569..fbbf24d 100755
--- a/bin/ls/tests/ls_tests.sh
+++ b/bin/ls/tests/ls_tests.sh
@@ -418,10 +418,10 @@ T_flag_body()
atf_check -e empty -o empty -s exit:0 touch a.file
- birthtime_in_secs=$(stat -f %B -t %s a.file)
- birthtime=$(date -j -f %s $birthtime_in_secs +"[[:space:]]+%b[[:space:]]+%e[[:space:]]+%H:%M:%S[[:space:]]+%Y")
+ mtime_in_secs=$(stat -f %m -t %s a.file)
+ mtime=$(date -j -f %s $mtime_in_secs +"[[:space:]]+%b[[:space:]]+%e[[:space:]]+%H:%M:%S[[:space:]]+%Y")
- atf_check -e empty -o match:"$birthtime"'[[:space:]]+a\.file' \
+ atf_check -e empty -o match:"$mtime"'[[:space:]]+a\.file' \
-s exit:0 ls -lT a.file
}
@@ -626,10 +626,10 @@ l_flag_body()
atf_check -e empty -o empty -s exit:0 touch a.file
- birthtime_in_secs=$(stat -f "%B" -t "%s" a.file)
- birthtime=$(date -j -f "%s" $birthtime_in_secs +"%b[[:space:]]+%e[[:space:]]+%H:%M")
+ mtime_in_secs=$(stat -f "%m" -t "%s" a.file)
+ mtime=$(date -j -f "%s" $mtime_in_secs +"%b[[:space:]]+%e[[:space:]]+%H:%M")
- expected_output=$(stat -f "%Sp[[:space:]]+%l[[:space:]]+%Su[[:space:]]+%Sg[[:space:]]+%z[[:space:]]+$birthtime[[:space:]]+a\\.file" a.file)
+ expected_output=$(stat -f "%Sp[[:space:]]+%l[[:space:]]+%Su[[:space:]]+%Sg[[:space:]]+%z[[:space:]]+$mtime[[:space:]]+a\\.file" a.file)
atf_check -e empty -o match:"$expected_output" -s exit:0 ls -l a.file
}
diff --git a/cddl/contrib/opensolaris/cmd/zfs/zfs.8 b/cddl/contrib/opensolaris/cmd/zfs/zfs.8
index 5eca00f..418f253 100644
--- a/cddl/contrib/opensolaris/cmd/zfs/zfs.8
+++ b/cddl/contrib/opensolaris/cmd/zfs/zfs.8
@@ -31,7 +31,7 @@
.\"
.\" $FreeBSD$
.\"
-.Dd September 14, 2015
+.Dd October 24, 2015
.Dt ZFS 8
.Os
.Sh NAME
@@ -272,8 +272,10 @@
.Ar tag snapshot Ns ...
.Nm
.Cm holds
-.Op Fl r
-.Ar snapshot Ns ...
+.Op Fl Hp
+.Op Fl r Ns | Ns Fl d Ar depth
+.Ar filesystem Ns | Ns Ar volume Ns | Ns Ar snapshot Ns
+.Ns ...
.Nm
.Cm release
.Op Fl r
@@ -3159,15 +3161,26 @@ snapshots of all descendent file systems.
.It Xo
.Nm
.Cm holds
-.Op Fl r
-.Ar snapshot Ns ...
+.Op Fl Hp
+.Op Fl r Ns | Ns Fl d Ar depth
+.Ar filesystem Ns | Ns Ar volume Ns | Ns Ar snapshot Ns
+.Ns ...
.Xc
.Pp
-Lists all existing user references for the given snapshot or snapshots.
+Lists all existing user references for the given dataset or datasets.
.Bl -tag -width indent
+.It Fl H
+Used for scripting mode. Do not print headers and separate fields by a single
+tab instead of arbitrary white space.
+.It Fl p
+Display numbers in parsable (exact) values.
.It Fl r
-Lists the holds that are set on the named descendent snapshots, in addition to
-listing the holds on the named snapshot.
+Lists the holds that are set on the descendent snapshots of the named datasets
+or snapshots, in addition to listing the holds on the named snapshots, if any.
+.It Fl d Ar depth
+Recursively display any holds on the named snapshots, or descendent snapshots of
+the named datasets or snapshots, limiting the recursion to
+.Ar depth .
.El
.It Xo
.Nm
diff --git a/cddl/contrib/opensolaris/cmd/zfs/zfs_main.c b/cddl/contrib/opensolaris/cmd/zfs/zfs_main.c
index b8466fe..9db2f73 100644
--- a/cddl/contrib/opensolaris/cmd/zfs/zfs_main.c
+++ b/cddl/contrib/opensolaris/cmd/zfs/zfs_main.c
@@ -329,7 +329,8 @@ get_usage(zfs_help_t idx)
case HELP_HOLD:
return (gettext("\thold [-r] <tag> <snapshot> ...\n"));
case HELP_HOLDS:
- return (gettext("\tholds [-r] <snapshot> ...\n"));
+ return (gettext("\tholds [-Hp] [-r|-d depth] "
+ "<filesystem|volume|snapshot> ...\n"));
case HELP_RELEASE:
return (gettext("\trelease [-r] <tag> <snapshot> ...\n"));
case HELP_DIFF:
@@ -5543,7 +5544,8 @@ typedef struct holds_cbdata {
*
*/
static void
-print_holds(boolean_t scripted, size_t nwidth, size_t tagwidth, nvlist_t *nvl)
+print_holds(boolean_t scripted, boolean_t literal, size_t nwidth,
+ size_t tagwidth, nvlist_t *nvl)
{
int i;
nvpair_t *nvp = NULL;
@@ -5576,10 +5578,14 @@ print_holds(boolean_t scripted, size_t nwidth, size_t tagwidth, nvlist_t *nvl)
size_t sepnum = scripted ? 1 : 2;
(void) nvpair_value_uint64(nvp2, &val);
- time = (time_t)val;
- (void) localtime_r(&time, &t);
- (void) strftime(tsbuf, DATETIME_BUF_LEN,
- gettext(STRFTIME_FMT_STR), &t);
+ if (literal)
+ snprintf(tsbuf, DATETIME_BUF_LEN, "%llu", val);
+ else {
+ time = (time_t)val;
+ (void) localtime_r(&time, &t);
+ (void) strftime(tsbuf, DATETIME_BUF_LEN,
+ gettext(STRFTIME_FMT_STR), &t);
+ }
(void) printf("%-*s%*c%-*s%*c%s\n", nwidth, zname,
sepnum, sep, tagwidth, tagname, sepnum, sep, tsbuf);
@@ -5600,7 +5606,7 @@ holds_callback(zfs_handle_t *zhp, void *data)
const char *zname = zfs_get_name(zhp);
size_t znamelen = strnlen(zname, ZFS_MAXNAMELEN);
- if (cbp->cb_recursive) {
+ if (cbp->cb_recursive && cbp->cb_snapname != NULL) {
const char *snapname;
char *delim = strchr(zname, '@');
if (delim == NULL)
@@ -5628,9 +5634,12 @@ holds_callback(zfs_handle_t *zhp, void *data)
}
/*
- * zfs holds [-r] <snap> ...
+ * zfs holds [-Hp] [-r | -d max] <dataset|snap> ...
*
- * -r Recursively hold
+ * -H Suppress header output
+ * -p Output literal values
+ * -r Recursively search for holds
+ * -d max Limit depth of recursive search
*/
static int
zfs_do_holds(int argc, char **argv)
@@ -5639,8 +5648,9 @@ zfs_do_holds(int argc, char **argv)
int c;
int i;
boolean_t scripted = B_FALSE;
+ boolean_t literal = B_FALSE;
boolean_t recursive = B_FALSE;
- const char *opts = "rH";
+ const char *opts = "d:rHp";
nvlist_t *nvl;
int types = ZFS_TYPE_SNAPSHOT;
@@ -5653,12 +5663,19 @@ zfs_do_holds(int argc, char **argv)
/* check options */
while ((c = getopt(argc, argv, opts)) != -1) {
switch (c) {
+ case 'd':
+ limit = parse_depth(optarg, &flags);
+ recursive = B_TRUE;
+ break;
case 'r':
recursive = B_TRUE;
break;
case 'H':
scripted = B_TRUE;
break;
+ case 'p':
+ literal = B_TRUE;
+ break;
case '?':
(void) fprintf(stderr, gettext("invalid option '%c'\n"),
optopt);
@@ -5684,18 +5701,14 @@ zfs_do_holds(int argc, char **argv)
for (i = 0; i < argc; ++i) {
char *snapshot = argv[i];
const char *delim;
- const char *snapname;
+ const char *snapname = NULL;
delim = strchr(snapshot, '@');
- if (delim == NULL) {
- (void) fprintf(stderr,
- gettext("'%s' is not a snapshot\n"), snapshot);
- ++errors;
- continue;
+ if (delim != NULL) {
+ snapname = delim + 1;
+ if (recursive)
+ snapshot[delim - snapshot] = '\0';
}
- snapname = delim + 1;
- if (recursive)
- snapshot[delim - snapshot] = '\0';
cb.cb_recursive = recursive;
cb.cb_snapname = snapname;
@@ -5713,7 +5726,8 @@ zfs_do_holds(int argc, char **argv)
/*
* 2. print holds data
*/
- print_holds(scripted, cb.cb_max_namelen, cb.cb_max_taglen, nvl);
+ print_holds(scripted, literal, cb.cb_max_namelen, cb.cb_max_taglen,
+ nvl);
if (nvlist_empty(nvl))
(void) printf(gettext("no datasets available\n"));
diff --git a/cddl/contrib/opensolaris/tools/ctf/cvt/dwarf.c b/cddl/contrib/opensolaris/tools/ctf/cvt/dwarf.c
index b7cb66f..e439f04 100644
--- a/cddl/contrib/opensolaris/tools/ctf/cvt/dwarf.c
+++ b/cddl/contrib/opensolaris/tools/ctf/cvt/dwarf.c
@@ -683,6 +683,10 @@ tdesc_array_create(dwarf_t *dw, Dwarf_Die dim, tdesc_t *arrtdp,
ar->ad_nelems = uval + 1;
else if (die_signed(dw, dim, DW_AT_upper_bound, &sval, 0))
ar->ad_nelems = sval + 1;
+ else if (die_unsigned(dw, dim, DW_AT_count, &uval, 0))
+ ar->ad_nelems = uval;
+ else if (die_signed(dw, dim, DW_AT_count, &sval, 0))
+ ar->ad_nelems = sval;
else
ar->ad_nelems = 0;
diff --git a/cddl/usr.sbin/dtrace/tests/Makefile.inc1 b/cddl/usr.sbin/dtrace/tests/Makefile.inc1
index 6958f78..6e7cc07 100644
--- a/cddl/usr.sbin/dtrace/tests/Makefile.inc1
+++ b/cddl/usr.sbin/dtrace/tests/Makefile.inc1
@@ -4,7 +4,6 @@ TESTGROUP= ${.CURDIR:H:T}/${.CURDIR:T}
TESTSRC= ${.CURDIR:H:H:H:H:H}/contrib/opensolaris/cmd/dtrace/test/tst/${TESTGROUP}
TESTSDIR= ${TESTSBASE}/cddl/usr.sbin/dtrace/${TESTGROUP}
-.if !defined(_RECURSING_PROGS)
FILESGROUPS+= FILES ${TESTGROUP} ${TESTGROUP}EXE
${TESTGROUP}= ${TESTFILES}
@@ -25,7 +24,6 @@ ${TESTWRAPPER}.sh: ${GENTEST} ${EXCLUDE} ${${TESTGROUP}}
sh ${GENTEST} -e ${EXCLUDE} ${TESTGROUP} ${${TESTGROUP}:S/ */ /} > ${.TARGET}
CLEANFILES+= ${TESTWRAPPER}.sh
-.endif # !defined(_RECURSING_PROGS)
.PATH: ${TESTSRC}
diff --git a/contrib/bmake/ChangeLog b/contrib/bmake/ChangeLog
index e1d6f10..ec3255e 100644
--- a/contrib/bmake/ChangeLog
+++ b/contrib/bmake/ChangeLog
@@ -1,3 +1,40 @@
+2015-10-20 Simon J. Gerraty <sjg@bad.crufty.net>
+
+ * Makefile (MAKE_VERSION): 20151020
+ Merge with NetBSD make, pick up
+ o var.c: fix uninitialized var
+
+2015-10-12 Simon J. Gerraty <sjg@bad.crufty.net>
+
+ * var.c: the conditional expressions used with ':?' can be
+ expensive, if already discarding do not evaluate or expand
+ anything.
+
+2015-10-10 Simon J. Gerraty <sjg@bad.crufty.net>
+
+ * Makefile (MAKE_VERSION): 20151010
+ Merge with NetBSD make, pick up
+ o Add Boolean wantit flag to Var_Subst and Var_Parse
+ when FALSE we know we are discarding the result and can
+ skip operations like Cmd_Exec.
+
+2015-10-09 Simon J. Gerraty <sjg@bad.crufty.net>
+
+ * Makefile (MAKE_VERSION): 20151009
+ Merge with NetBSD make, pick up
+ o var.c: don't check for NULL before free()
+ o meta.c: meta_oodate, do not hard code ignore of makeDependfile
+
+2015-09-10 Simon J. Gerraty <sjg@bad.crufty.net>
+
+ * Makefile (MAKE_VERSION): 20150910
+ Merge with NetBSD make, pick up
+ o main.c: with -w print Enter/Leaving messages for objdir too
+ if necessary.
+ o centralize shell metachar handling
+
+ * FILES: add metachar.[ch]
+
2015-06-06 Simon J. Gerraty <sjg@bad.crufty.net>
* Makefile (MAKE_VERSION): 20150606
diff --git a/contrib/bmake/FILES b/contrib/bmake/FILES
index c46e74b..720eb1b 100644
--- a/contrib/bmake/FILES
+++ b/contrib/bmake/FILES
@@ -71,6 +71,8 @@ make_malloc.h
makefile.in
meta.c
meta.h
+metachar.c
+metachar.h
missing/sys/cdefs.h
mkdeps.sh
nonints.h
diff --git a/contrib/bmake/Makefile b/contrib/bmake/Makefile
index e5427a8..a059ec4 100644
--- a/contrib/bmake/Makefile
+++ b/contrib/bmake/Makefile
@@ -1,7 +1,7 @@
-# $Id: Makefile,v 1.39 2015/06/07 15:54:37 sjg Exp $
+# $Id: Makefile,v 1.44 2015/10/20 21:41:40 sjg Exp $
# Base version on src date
-MAKE_VERSION= 20150606
+MAKE_VERSION= 20151020
PROG= bmake
@@ -18,6 +18,7 @@ SRCS= \
make.c \
make_malloc.c \
meta.c \
+ metachar.c \
parse.c \
str.c \
strlist.c \
diff --git a/contrib/bmake/arch.c b/contrib/bmake/arch.c
index 943f41e..9ceee10 100644
--- a/contrib/bmake/arch.c
+++ b/contrib/bmake/arch.c
@@ -1,4 +1,4 @@
-/* $NetBSD: arch.c,v 1.63 2012/06/12 19:21:50 joerg Exp $ */
+/* $NetBSD: arch.c,v 1.64 2015/10/11 04:51:24 sjg Exp $ */
/*
* Copyright (c) 1988, 1989, 1990, 1993
@@ -69,14 +69,14 @@
*/
#ifndef MAKE_NATIVE
-static char rcsid[] = "$NetBSD: arch.c,v 1.63 2012/06/12 19:21:50 joerg Exp $";
+static char rcsid[] = "$NetBSD: arch.c,v 1.64 2015/10/11 04:51:24 sjg Exp $";
#else
#include <sys/cdefs.h>
#ifndef lint
#if 0
static char sccsid[] = "@(#)arch.c 8.2 (Berkeley) 1/2/94";
#else
-__RCSID("$NetBSD: arch.c,v 1.63 2012/06/12 19:21:50 joerg Exp $");
+__RCSID("$NetBSD: arch.c,v 1.64 2015/10/11 04:51:24 sjg Exp $");
#endif
#endif /* not lint */
#endif
@@ -310,7 +310,7 @@ Arch_ParseArchive(char **linePtr, Lst nodeLst, GNode *ctxt)
void *freeIt;
char *result;
- result = Var_Parse(cp, ctxt, TRUE, &length, &freeIt);
+ result = Var_Parse(cp, ctxt, TRUE, TRUE, &length, &freeIt);
if (freeIt)
free(freeIt);
if (result == var_Error) {
@@ -325,7 +325,7 @@ Arch_ParseArchive(char **linePtr, Lst nodeLst, GNode *ctxt)
*cp++ = '\0';
if (subLibName) {
- libName = Var_Subst(NULL, libName, ctxt, TRUE);
+ libName = Var_Subst(NULL, libName, ctxt, TRUE, TRUE);
}
@@ -351,7 +351,7 @@ Arch_ParseArchive(char **linePtr, Lst nodeLst, GNode *ctxt)
void *freeIt;
char *result;
- result = Var_Parse(cp, ctxt, TRUE, &length, &freeIt);
+ result = Var_Parse(cp, ctxt, TRUE, TRUE, &length, &freeIt);
if (freeIt)
free(freeIt);
if (result == var_Error) {
@@ -404,7 +404,7 @@ Arch_ParseArchive(char **linePtr, Lst nodeLst, GNode *ctxt)
char *oldMemName = memName;
size_t sz;
- memName = Var_Subst(NULL, memName, ctxt, TRUE);
+ memName = Var_Subst(NULL, memName, ctxt, TRUE, TRUE);
/*
* Now form an archive spec and recurse to deal with nested
diff --git a/contrib/bmake/compat.c b/contrib/bmake/compat.c
index fd00eb7..6cf963f 100644
--- a/contrib/bmake/compat.c
+++ b/contrib/bmake/compat.c
@@ -1,4 +1,4 @@
-/* $NetBSD: compat.c,v 1.96 2014/09/07 20:55:34 joerg Exp $ */
+/* $NetBSD: compat.c,v 1.101 2015/10/11 04:51:24 sjg Exp $ */
/*
* Copyright (c) 1988, 1989, 1990 The Regents of the University of California.
@@ -70,14 +70,14 @@
*/
#ifndef MAKE_NATIVE
-static char rcsid[] = "$NetBSD: compat.c,v 1.96 2014/09/07 20:55:34 joerg Exp $";
+static char rcsid[] = "$NetBSD: compat.c,v 1.101 2015/10/11 04:51:24 sjg Exp $";
#else
#include <sys/cdefs.h>
#ifndef lint
#if 0
static char sccsid[] = "@(#)compat.c 8.2 (Berkeley) 3/19/94";
#else
-__RCSID("$NetBSD: compat.c,v 1.96 2014/09/07 20:55:34 joerg Exp $");
+__RCSID("$NetBSD: compat.c,v 1.101 2015/10/11 04:51:24 sjg Exp $");
#endif
#endif /* not lint */
#endif
@@ -111,37 +111,14 @@ __RCSID("$NetBSD: compat.c,v 1.96 2014/09/07 20:55:34 joerg Exp $");
#include "hash.h"
#include "dir.h"
#include "job.h"
+#include "metachar.h"
#include "pathnames.h"
-/*
- * The following array is used to make a fast determination of which
- * characters are interpreted specially by the shell. If a command
- * contains any of these characters, it is executed by the shell, not
- * directly by us.
- */
-
-static char meta[256];
static GNode *curTarg = NULL;
static GNode *ENDNode;
static void CompatInterrupt(int);
-static void
-Compat_Init(void)
-{
- const char *cp;
-
- Shell_Init(); /* setup default shell */
-
- for (cp = "~#=|^(){};&<>*?[]:$`\\\n"; *cp != '\0'; cp++) {
- meta[(unsigned char) *cp] = 1;
- }
- /*
- * The null character serves as a sentinel in the string.
- */
- meta[0] = 1;
-}
-
/*-
*-----------------------------------------------------------------------
* CompatInterrupt --
@@ -236,7 +213,7 @@ CompatRunCommand(void *cmdp, void *gnp)
doIt = FALSE;
cmdNode = Lst_Member(gn->commands, cmd);
- cmdStart = Var_Subst(NULL, cmd, gn, FALSE);
+ cmdStart = Var_Subst(NULL, cmd, gn, FALSE, TRUE);
/*
* brk_string will return an argv with a NULL in av[0], thus causing
@@ -271,8 +248,8 @@ CompatRunCommand(void *cmdp, void *gnp)
break;
case '+':
doIt = TRUE;
- if (!meta[0]) /* we came here from jobs */
- Compat_Init();
+ if (!shellName) /* we came here from jobs */
+ Shell_Init();
break;
}
cmd++;
@@ -300,11 +277,13 @@ CompatRunCommand(void *cmdp, void *gnp)
* Search for meta characters in the command. If there are no meta
* characters, there's no need to execute a shell to execute the
* command.
+ *
+ * Additionally variable assignments and empty commands
+ * go to the shell. Therefore treat '=' and ':' like shell
+ * meta characters as documented in make(1).
*/
- for (cp = cmd; !meta[(unsigned char)*cp]; cp++) {
- continue;
- }
- useShell = (*cp != '\0');
+
+ useShell = needshell(cmd, FALSE);
#endif
/*
@@ -512,8 +491,8 @@ Compat_Make(void *gnp, void *pgnp)
GNode *gn = (GNode *)gnp;
GNode *pgn = (GNode *)pgnp;
- if (!meta[0]) /* we came here from jobs */
- Compat_Init();
+ if (!shellName) /* we came here from jobs */
+ Shell_Init();
if (gn->made == UNMADE && (gn == pgn || (pgn->type & OP_MADE) == 0)) {
/*
* First mark ourselves to be made, then apply whatever transformations
@@ -693,7 +672,8 @@ Compat_Run(Lst targs)
GNode *gn = NULL;/* Current root target */
int errors; /* Number of targets not remade due to errors */
- Compat_Init();
+ if (!shellName)
+ Shell_Init();
if (bmake_signal(SIGINT, SIG_IGN) != SIG_IGN) {
bmake_signal(SIGINT, CompatInterrupt);
diff --git a/contrib/bmake/cond.c b/contrib/bmake/cond.c
index b05a56c..2d2f087 100644
--- a/contrib/bmake/cond.c
+++ b/contrib/bmake/cond.c
@@ -1,4 +1,4 @@
-/* $NetBSD: cond.c,v 1.68 2015/05/05 21:51:09 sjg Exp $ */
+/* $NetBSD: cond.c,v 1.69 2015/10/11 04:51:24 sjg Exp $ */
/*
* Copyright (c) 1988, 1989, 1990 The Regents of the University of California.
@@ -70,14 +70,14 @@
*/
#ifndef MAKE_NATIVE
-static char rcsid[] = "$NetBSD: cond.c,v 1.68 2015/05/05 21:51:09 sjg Exp $";
+static char rcsid[] = "$NetBSD: cond.c,v 1.69 2015/10/11 04:51:24 sjg Exp $";
#else
#include <sys/cdefs.h>
#ifndef lint
#if 0
static char sccsid[] = "@(#)cond.c 8.2 (Berkeley) 1/2/94";
#else
-__RCSID("$NetBSD: cond.c,v 1.68 2015/05/05 21:51:09 sjg Exp $");
+__RCSID("$NetBSD: cond.c,v 1.69 2015/10/11 04:51:24 sjg Exp $");
#endif
#endif /* not lint */
#endif
@@ -289,7 +289,7 @@ CondGetArg(char **linePtr, char **argPtr, const char *func)
int len;
void *freeIt;
- cp2 = Var_Parse(cp, VAR_CMD, TRUE, &len, &freeIt);
+ cp2 = Var_Parse(cp, VAR_CMD, TRUE, TRUE, &len, &freeIt);
Buf_AddBytes(&buf, strlen(cp2), cp2);
if (freeIt)
free(freeIt);
@@ -571,7 +571,7 @@ CondGetString(Boolean doEval, Boolean *quoted, void **freeIt, Boolean strictLHS)
case '$':
/* if we are in quotes, then an undefined variable is ok */
str = Var_Parse(condExpr, VAR_CMD, (qt ? 0 : doEval),
- &len, freeIt);
+ TRUE, &len, freeIt);
if (str == var_Error) {
if (*freeIt) {
free(*freeIt);
@@ -823,7 +823,7 @@ get_mpt_arg(char **linePtr, char **argPtr, const char *func MAKE_ATTR_UNUSED)
/* We do all the work here and return the result as the length */
*argPtr = NULL;
- val = Var_Parse(cp - 1, VAR_CMD, FALSE, &length, &freeIt);
+ val = Var_Parse(cp - 1, VAR_CMD, FALSE, TRUE, &length, &freeIt);
/*
* Advance *linePtr to beyond the closing ). Note that
* we subtract one because 'length' is calculated from 'cp - 1'.
diff --git a/contrib/bmake/configure.in b/contrib/bmake/configure.in
index e2249b0..ae3e425 100644
--- a/contrib/bmake/configure.in
+++ b/contrib/bmake/configure.in
@@ -1,11 +1,11 @@
dnl
dnl RCSid:
-dnl $Id: configure.in,v 1.53 2014/11/06 01:49:40 sjg Exp $
+dnl $Id: configure.in,v 1.54 2015/10/10 04:17:10 sjg Exp $
dnl
dnl Process this file with autoconf to produce a configure script
dnl
AC_PREREQ(2.50)
-AC_INIT([bmake], [20140214], [sjg@NetBSD.org])
+AC_INIT([bmake], [20151009], [sjg@NetBSD.org])
AC_CONFIG_HEADERS(config.h)
dnl make srcdir absolute
@@ -105,6 +105,7 @@ AC_CHECK_HEADERS( \
ar.h \
err.h \
fcntl.h \
+ limits.h \
paths.h \
poll.h \
ranlib.h \
diff --git a/contrib/bmake/for.c b/contrib/bmake/for.c
index 33bcf13..7f10e56 100644
--- a/contrib/bmake/for.c
+++ b/contrib/bmake/for.c
@@ -1,4 +1,4 @@
-/* $NetBSD: for.c,v 1.49 2012/06/03 04:29:40 sjg Exp $ */
+/* $NetBSD: for.c,v 1.50 2015/10/11 04:51:24 sjg Exp $ */
/*
* Copyright (c) 1992, The Regents of the University of California.
@@ -30,14 +30,14 @@
*/
#ifndef MAKE_NATIVE
-static char rcsid[] = "$NetBSD: for.c,v 1.49 2012/06/03 04:29:40 sjg Exp $";
+static char rcsid[] = "$NetBSD: for.c,v 1.50 2015/10/11 04:51:24 sjg Exp $";
#else
#include <sys/cdefs.h>
#ifndef lint
#if 0
static char sccsid[] = "@(#)for.c 8.1 (Berkeley) 6/6/93";
#else
-__RCSID("$NetBSD: for.c,v 1.49 2012/06/03 04:29:40 sjg Exp $");
+__RCSID("$NetBSD: for.c,v 1.50 2015/10/11 04:51:24 sjg Exp $");
#endif
#endif /* not lint */
#endif
@@ -216,7 +216,7 @@ For_Eval(char *line)
* We can't do the escapes here - because we don't know whether
* we are substuting into ${...} or $(...).
*/
- sub = Var_Subst(NULL, ptr, VAR_GLOBAL, FALSE);
+ sub = Var_Subst(NULL, ptr, VAR_GLOBAL, FALSE, TRUE);
/*
* Split into words allowing for quoted strings.
diff --git a/contrib/bmake/job.c b/contrib/bmake/job.c
index 8a7a902..20f693a 100644
--- a/contrib/bmake/job.c
+++ b/contrib/bmake/job.c
@@ -1,4 +1,4 @@
-/* $NetBSD: job.c,v 1.180 2015/04/16 13:31:03 joerg Exp $ */
+/* $NetBSD: job.c,v 1.181 2015/10/11 04:51:24 sjg Exp $ */
/*
* Copyright (c) 1988, 1989, 1990 The Regents of the University of California.
@@ -70,14 +70,14 @@
*/
#ifndef MAKE_NATIVE
-static char rcsid[] = "$NetBSD: job.c,v 1.180 2015/04/16 13:31:03 joerg Exp $";
+static char rcsid[] = "$NetBSD: job.c,v 1.181 2015/10/11 04:51:24 sjg Exp $";
#else
#include <sys/cdefs.h>
#ifndef lint
#if 0
static char sccsid[] = "@(#)job.c 8.2 (Berkeley) 3/19/94";
#else
-__RCSID("$NetBSD: job.c,v 1.180 2015/04/16 13:31:03 joerg Exp $");
+__RCSID("$NetBSD: job.c,v 1.181 2015/10/11 04:51:24 sjg Exp $");
#endif
#endif /* not lint */
#endif
@@ -731,7 +731,7 @@ JobPrintCommand(void *cmdp, void *jobp)
numCommands += 1;
- cmdStart = cmd = Var_Subst(NULL, cmd, job->node, FALSE);
+ cmdStart = cmd = Var_Subst(NULL, cmd, job->node, FALSE, TRUE);
cmdTemplate = "%s\n";
@@ -919,7 +919,7 @@ JobPrintCommand(void *cmdp, void *jobp)
static int
JobSaveCommand(void *cmd, void *gn)
{
- cmd = Var_Subst(NULL, (char *)cmd, (GNode *)gn, FALSE);
+ cmd = Var_Subst(NULL, (char *)cmd, (GNode *)gn, FALSE, TRUE);
(void)Lst_AtEnd(postCommands->commands, cmd);
return(0);
}
@@ -2211,7 +2211,8 @@ Job_SetPrefix(void)
Var_Set(MAKE_JOB_PREFIX, "---", VAR_GLOBAL, 0);
}
- targPrefix = Var_Subst(NULL, "${" MAKE_JOB_PREFIX "}", VAR_GLOBAL, 0);
+ targPrefix = Var_Subst(NULL, "${" MAKE_JOB_PREFIX "}",
+ VAR_GLOBAL, FALSE, TRUE);
}
/*-
diff --git a/contrib/bmake/main.c b/contrib/bmake/main.c
index 3287115..d7fe534 100644
--- a/contrib/bmake/main.c
+++ b/contrib/bmake/main.c
@@ -1,4 +1,4 @@
-/* $NetBSD: main.c,v 1.232 2015/03/26 22:20:42 sjg Exp $ */
+/* $NetBSD: main.c,v 1.234 2015/10/11 04:51:24 sjg Exp $ */
/*
* Copyright (c) 1988, 1989, 1990, 1993
@@ -69,7 +69,7 @@
*/
#ifndef MAKE_NATIVE
-static char rcsid[] = "$NetBSD: main.c,v 1.232 2015/03/26 22:20:42 sjg Exp $";
+static char rcsid[] = "$NetBSD: main.c,v 1.234 2015/10/11 04:51:24 sjg Exp $";
#else
#include <sys/cdefs.h>
#ifndef lint
@@ -81,7 +81,7 @@ __COPYRIGHT("@(#) Copyright (c) 1988, 1989, 1990, 1993\
#if 0
static char sccsid[] = "@(#)main.c 8.3 (Berkeley) 3/19/94";
#else
-__RCSID("$NetBSD: main.c,v 1.232 2015/03/26 22:20:42 sjg Exp $");
+__RCSID("$NetBSD: main.c,v 1.234 2015/10/11 04:51:24 sjg Exp $");
#endif
#endif /* not lint */
#endif
@@ -172,6 +172,7 @@ Boolean keepgoing; /* -k flag */
Boolean queryFlag; /* -q flag */
Boolean touchFlag; /* -t flag */
Boolean enterFlag; /* -w flag */
+Boolean enterFlagObj; /* -w and objdir != srcdir */
Boolean ignoreErrors; /* -i flag */
Boolean beSilent; /* -s flag */
Boolean oldVars; /* variable substitution style */
@@ -722,7 +723,7 @@ Main_SetObjdir(const char *path)
/* expand variable substitutions */
if (strchr(path, '$') != 0) {
snprintf(buf, MAXPATHLEN, "%s", path);
- path = p = Var_Subst(NULL, buf, VAR_GLOBAL, 0);
+ path = p = Var_Subst(NULL, buf, VAR_GLOBAL, FALSE, TRUE);
}
if (path[0] != '/') {
@@ -741,6 +742,8 @@ Main_SetObjdir(const char *path)
setenv("PWD", objdir, 1);
Dir_InitDot();
rc = TRUE;
+ if (enterFlag && strcmp(objdir, curdir) != 0)
+ enterFlagObj = TRUE;
}
}
@@ -803,7 +806,8 @@ MakeMode(const char *mode)
char *mp = NULL;
if (!mode)
- mode = mp = Var_Subst(NULL, "${" MAKE_MODE ":tl}", VAR_GLOBAL, 0);
+ mode = mp = Var_Subst(NULL, "${" MAKE_MODE ":tl}",
+ VAR_GLOBAL, FALSE, TRUE);
if (mode && *mode) {
if (strstr(mode, "compat")) {
@@ -1249,7 +1253,7 @@ main(int argc, char **argv)
(char *)Lst_Datum(ln));
} else {
p1 = Var_Subst(NULL, "${" MAKEFILE_PREFERENCE "}",
- VAR_CMD, 0);
+ VAR_CMD, FALSE, TRUE);
if (p1) {
(void)str2Lst_Append(makefiles, p1, NULL);
(void)Lst_Find(makefiles, NULL, ReadMakefile);
@@ -1260,12 +1264,15 @@ main(int argc, char **argv)
/* In particular suppress .depend for '-r -V .OBJDIR -f /dev/null' */
if (!noBuiltins || !printVars) {
makeDependfile = Var_Subst(NULL, "${.MAKE.DEPENDFILE:T}",
- VAR_CMD, 0);
+ VAR_CMD, FALSE, TRUE);
doing_depend = TRUE;
(void)ReadMakefile(makeDependfile, NULL);
doing_depend = FALSE;
}
+ if (enterFlagObj)
+ printf("%s: Entering directory `%s'\n", progname, objdir);
+
MakeMode(NULL);
Var_Append("MFLAGS", Var_Value(MAKEFLAGS, VAR_GLOBAL, &p1), VAR_GLOBAL);
@@ -1295,7 +1302,7 @@ main(int argc, char **argv)
*/
static char VPATH[] = "${VPATH}";
- vpath = Var_Subst(NULL, VPATH, VAR_CMD, FALSE);
+ vpath = Var_Subst(NULL, VPATH, VAR_CMD, FALSE, TRUE);
path = vpath;
do {
/* skip to end of directory */
@@ -1342,14 +1349,16 @@ main(int argc, char **argv)
char *value;
if (strchr(var, '$')) {
- value = p1 = Var_Subst(NULL, var, VAR_GLOBAL, 0);
+ value = p1 = Var_Subst(NULL, var, VAR_GLOBAL,
+ FALSE, TRUE);
} else if (expandVars) {
char tmp[128];
if (snprintf(tmp, sizeof(tmp), "${%s}", var) >= (int)(sizeof(tmp)))
Fatal("%s: variable name too big: %s",
progname, var);
- value = p1 = Var_Subst(NULL, tmp, VAR_GLOBAL, 0);
+ value = p1 = Var_Subst(NULL, tmp, VAR_GLOBAL,
+ FALSE, TRUE);
} else {
value = Var_Value(var, VAR_GLOBAL, &p1);
}
@@ -1406,6 +1415,8 @@ main(int argc, char **argv)
Trace_Log(MAKEEND, 0);
+ if (enterFlagObj)
+ printf("%s: Leaving directory `%s'\n", progname, objdir);
if (enterFlag)
printf("%s: Leaving directory `%s'\n", progname, curdir);
@@ -1885,7 +1896,7 @@ PrintOnError(GNode *gn, const char *s)
}
strncpy(tmp, "${MAKE_PRINT_VAR_ON_ERROR:@v@$v='${$v}'\n@}",
sizeof(tmp) - 1);
- cp = Var_Subst(NULL, tmp, VAR_GLOBAL, 0);
+ cp = Var_Subst(NULL, tmp, VAR_GLOBAL, FALSE, TRUE);
if (cp) {
if (*cp)
printf("%s", cp);
@@ -1914,7 +1925,7 @@ Main_ExportMAKEFLAGS(Boolean first)
strncpy(tmp, "${.MAKEFLAGS} ${.MAKEOVERRIDES:O:u:@v@$v=${$v:Q}@}",
sizeof(tmp));
- s = Var_Subst(NULL, tmp, VAR_CMD, 0);
+ s = Var_Subst(NULL, tmp, VAR_CMD, FALSE, TRUE);
if (s && *s) {
#ifdef POSIX
setenv("MAKEFLAGS", s, 1);
@@ -1936,7 +1947,8 @@ getTmpdir(void)
* Honor $TMPDIR but only if it is valid.
* Ensure it ends with /.
*/
- tmpdir = Var_Subst(NULL, "${TMPDIR:tA:U" _PATH_TMP "}/", VAR_GLOBAL, 0);
+ tmpdir = Var_Subst(NULL, "${TMPDIR:tA:U" _PATH_TMP "}/", VAR_GLOBAL,
+ FALSE, TRUE);
if (stat(tmpdir, &st) < 0 || !S_ISDIR(st.st_mode)) {
free(tmpdir);
tmpdir = bmake_strdup(_PATH_TMP);
@@ -1991,7 +2003,7 @@ getBoolean(const char *name, Boolean bf)
char *cp;
if (snprintf(tmp, sizeof(tmp), "${%s:tl}", name) < (int)(sizeof(tmp))) {
- cp = Var_Subst(NULL, tmp, VAR_GLOBAL, 0);
+ cp = Var_Subst(NULL, tmp, VAR_GLOBAL, FALSE, TRUE);
if (cp) {
switch(*cp) {
diff --git a/contrib/bmake/make-bootstrap.sh.in b/contrib/bmake/make-bootstrap.sh.in
index 2bb4c25..638e293 100755
--- a/contrib/bmake/make-bootstrap.sh.in
+++ b/contrib/bmake/make-bootstrap.sh.in
@@ -52,7 +52,7 @@ do_link() {
}
BASE_OBJECTS="arch.o buf.o compat.o cond.o dir.o for.o getopt hash.o \
-job.o make.o make_malloc.o parse.o sigcompat.o str.o strlist.o \
+job.o make.o make_malloc.o metachar.o parse.o sigcompat.o str.o strlist.o \
suff.o targ.o trace.o var.o util.o"
LST_OBJECTS="lstAppend.o lstDupl.o lstInit.o lstOpen.o \
diff --git a/contrib/bmake/make.c b/contrib/bmake/make.c
index fde1850..b43bfd5 100644
--- a/contrib/bmake/make.c
+++ b/contrib/bmake/make.c
@@ -1,4 +1,4 @@
-/* $NetBSD: make.c,v 1.91 2014/10/18 08:33:30 snj Exp $ */
+/* $NetBSD: make.c,v 1.92 2015/10/11 04:51:24 sjg Exp $ */
/*
* Copyright (c) 1988, 1989, 1990, 1993
@@ -69,14 +69,14 @@
*/
#ifndef MAKE_NATIVE
-static char rcsid[] = "$NetBSD: make.c,v 1.91 2014/10/18 08:33:30 snj Exp $";
+static char rcsid[] = "$NetBSD: make.c,v 1.92 2015/10/11 04:51:24 sjg Exp $";
#else
#include <sys/cdefs.h>
#ifndef lint
#if 0
static char sccsid[] = "@(#)make.c 8.1 (Berkeley) 6/6/93";
#else
-__RCSID("$NetBSD: make.c,v 1.91 2014/10/18 08:33:30 snj Exp $");
+__RCSID("$NetBSD: make.c,v 1.92 2015/10/11 04:51:24 sjg Exp $");
#endif
#endif /* not lint */
#endif
@@ -485,7 +485,7 @@ Make_HandleUse(GNode *cgn, GNode *pgn)
if (gn->name)
free(gn->name);
}
- gn->name = Var_Subst(NULL, gn->uname, pgn, FALSE);
+ gn->name = Var_Subst(NULL, gn->uname, pgn, FALSE, TRUE);
if (gn->name && gn->uname && strcmp(gn->name, gn->uname) != 0) {
/* See if we have a target for this node. */
tgn = Targ_FindNode(gn->name, TARG_NOCREATE);
diff --git a/contrib/bmake/make.h b/contrib/bmake/make.h
index 9cf7243..7cf34d8 100644
--- a/contrib/bmake/make.h
+++ b/contrib/bmake/make.h
@@ -1,4 +1,4 @@
-/* $NetBSD: make.h,v 1.95 2014/09/07 20:55:34 joerg Exp $ */
+/* $NetBSD: make.h,v 1.96 2015/09/21 21:50:16 pooka Exp $ */
/*
* Copyright (c) 1988, 1989, 1990, 1993
@@ -519,8 +519,15 @@ int str2Lst_Append(Lst, char *, const char *);
#define MAX(a, b) ((a > b) ? a : b)
#endif
+/* At least GNU/Hurd systems lack hardcoded MAXPATHLEN/PATH_MAX */
+#ifdef HAVE_LIMITS_H
+#include <limits.h>
+#endif
#ifndef MAXPATHLEN
-#define MAXPATHLEN BMAKE_PATH_MAX
+#define MAXPATHLEN BMAKE_PATH_MAX
+#endif
+#ifndef PATH_MAX
+#define PATH_MAX MAXPATHLEN
#endif
#endif /* _MAKE_H_ */
diff --git a/contrib/bmake/meta.c b/contrib/bmake/meta.c
index 5600a77..09febfc 100644
--- a/contrib/bmake/meta.c
+++ b/contrib/bmake/meta.c
@@ -1,4 +1,4 @@
-/* $NetBSD: meta.c,v 1.38 2015/04/11 05:24:30 sjg Exp $ */
+/* $NetBSD: meta.c,v 1.40 2015/10/11 04:51:24 sjg Exp $ */
/*
* Implement 'meta' mode.
@@ -324,7 +324,7 @@ is_submake(void *cmdp, void *gnp)
}
cp = strchr(cmd, '$');
if ((cp)) {
- mp = Var_Subst(NULL, cmd, gn, FALSE);
+ mp = Var_Subst(NULL, cmd, gn, FALSE, TRUE);
cmd = mp;
}
cp2 = strstr(cmd, p_make);
@@ -367,7 +367,7 @@ printCMD(void *cmdp, void *mfpp)
char *cp = NULL;
if (strchr(cmd, '$')) {
- cmd = cp = Var_Subst(NULL, cmd, mfp->gn, FALSE);
+ cmd = cp = Var_Subst(NULL, cmd, mfp->gn, FALSE, TRUE);
}
fprintf(mfp->fp, "CMD %s\n", cmd);
if (cp)
@@ -462,7 +462,7 @@ meta_create(BuildMon *pbm, GNode *gn)
char *mp;
/* Describe the target we are building */
- mp = Var_Subst(NULL, "${" MAKE_META_PREFIX "}", gn, 0);
+ mp = Var_Subst(NULL, "${" MAKE_META_PREFIX "}", gn, FALSE, TRUE);
if (*mp)
fprintf(stdout, "%s\n", mp);
free(mp);
@@ -605,7 +605,8 @@ meta_mode_init(const char *make_mode)
* We consider ourselves master of all within ${.MAKE.META.BAILIWICK}
*/
metaBailiwick = Lst_Init(FALSE);
- cp = Var_Subst(NULL, "${.MAKE.META.BAILIWICK:O:u:tA}", VAR_GLOBAL, 0);
+ cp = Var_Subst(NULL, "${.MAKE.META.BAILIWICK:O:u:tA}", VAR_GLOBAL,
+ FALSE, TRUE);
if (cp) {
str2Lst_Append(metaBailiwick, cp, NULL);
}
@@ -616,7 +617,8 @@ meta_mode_init(const char *make_mode)
Var_Append(MAKE_META_IGNORE_PATHS,
"/dev /etc /proc /tmp /var/run /var/tmp ${TMPDIR}", VAR_GLOBAL);
cp = Var_Subst(NULL,
- "${" MAKE_META_IGNORE_PATHS ":O:u:tA}", VAR_GLOBAL, 0);
+ "${" MAKE_META_IGNORE_PATHS ":O:u:tA}", VAR_GLOBAL,
+ FALSE, TRUE);
if (cp) {
str2Lst_Append(metaIgnorePaths, cp, NULL);
}
@@ -727,7 +729,8 @@ meta_job_output(Job *job, char *cp, const char *nl)
if (!meta_prefix) {
char *cp2;
- meta_prefix = Var_Subst(NULL, "${" MAKE_META_PREFIX "}", VAR_GLOBAL, 0);
+ meta_prefix = Var_Subst(NULL, "${" MAKE_META_PREFIX "}",
+ VAR_GLOBAL, FALSE, TRUE);
if ((cp2 = strchr(meta_prefix, '$')))
meta_prefix_len = cp2 - meta_prefix;
else
@@ -1209,16 +1212,6 @@ meta_oodate(GNode *gn, Boolean oodate)
break;
}
- if ((cp = strrchr(p, '/'))) {
- cp++;
- /*
- * We don't normally expect to see this,
- * but we do expect it to change.
- */
- if (strcmp(cp, makeDependfile) == 0)
- break;
- }
-
/*
* The rest of the record is the file name.
* Check if it's not an absolute path.
@@ -1322,7 +1315,7 @@ meta_oodate(GNode *gn, Boolean oodate)
if (DEBUG(META))
fprintf(debug_file, "%s: %d: cannot compare command using .OODATE\n", fname, lineno);
}
- cmd = Var_Subst(NULL, cmd, gn, TRUE);
+ cmd = Var_Subst(NULL, cmd, gn, TRUE, TRUE);
if ((cp = strchr(cmd, '\n'))) {
int n;
diff --git a/contrib/bmake/metachar.c b/contrib/bmake/metachar.c
new file mode 100644
index 0000000..4960338
--- /dev/null
+++ b/contrib/bmake/metachar.c
@@ -0,0 +1,88 @@
+/* $NetBSD: metachar.c,v 1.5 2015/06/19 08:03:35 mlelstv Exp $ */
+
+/*-
+ * Copyright (c) 2015 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Christos Zoulas.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#if HAVE_NBTOOL_CONFIG_H
+#include "nbtool_config.h"
+#endif
+
+#if defined(MAKE_NATIVE) || defined(HAVE_NBTOOL_CONFIG_H)
+#include <sys/cdefs.h>
+#endif
+
+#if defined(__RCSID) && !defined(lint)
+__RCSID("$NetBSD: metachar.c,v 1.5 2015/06/19 08:03:35 mlelstv Exp $");
+#endif
+
+#include "metachar.h"
+/*
+ * The following array is used to make a fast determination of which
+ * characters are interpreted specially by the shell. If a command
+ * contains any of these characters, it is executed by the shell, not
+ * directly by us.
+ *
+ * perhaps move it to ctype?
+ */
+
+unsigned char _metachar[128] = {
+// nul soh stx etx eot enq ack bel
+ 1, 0, 0, 0, 0, 0, 0, 0,
+// bs ht nl vt np cr so si
+ 0, 0, 1, 0, 0, 0, 0, 0,
+// dle dc1 dc2 dc3 dc4 nak syn etb
+ 0, 0, 0, 0, 0, 0, 0, 0,
+// can em sub esc fs gs rs us
+ 0, 0, 0, 0, 0, 0, 0, 0,
+// sp ! " # $ % & '
+ 0, 1, 1, 1, 1, 0, 1, 1,
+// ( ) * + , - . /
+ 1, 1, 1, 0, 0, 0, 0, 0,
+// 0 1 2 3 4 5 6 7
+ 0, 0, 0, 0, 0, 0, 0, 0,
+// 8 9 : ; < = > ?
+ 0, 0, 0, 1, 1, 0, 1, 1,
+// @ A B C D E F G
+ 0, 0, 0, 0, 0, 0, 0, 0,
+// H I J K L M N O
+ 0, 0, 0, 0, 0, 0, 0, 0,
+// P Q R S T U V W
+ 0, 0, 0, 0, 0, 0, 0, 0,
+// X Y Z [ \ ] ^ _
+ 0, 0, 0, 1, 1, 1, 1, 0,
+// ` a b c d e f g
+ 1, 0, 0, 0, 0, 0, 0, 0,
+// h i j k l m n o
+ 0, 0, 0, 0, 0, 0, 0, 0,
+// p q r s t u v w
+ 0, 0, 0, 0, 0, 0, 0, 0,
+// x y z { | } ~ del
+ 0, 0, 0, 1, 1, 1, 1, 0,
+};
+
diff --git a/sys/arm/samsung/s3c2xx0/s3c24x0var.h b/contrib/bmake/metachar.h
index 2ee042e..db88d67 100644
--- a/sys/arm/samsung/s3c2xx0/s3c24x0var.h
+++ b/contrib/bmake/metachar.h
@@ -1,8 +1,11 @@
-/* $NetBSD: s3c24x0var.h,v 1.1 2003/07/31 19:49:44 bsh Exp $ */
+/* $NetBSD: metachar.h,v 1.4 2015/06/21 20:26:02 christos Exp $ */
/*-
- * Copyright (c) 2003 Genetec corporation. All rights reserved.
- * Written by Hiroyuki Bessho for Genetec corporation.
+ * Copyright (c) 2015 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Christos Zoulas.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -12,14 +15,11 @@
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
- * 3. The name of Genetec corporation may not be used to endorse
- * or promote products derived from this software without specific prior
- * written permission.
*
- * THIS SOFTWARE IS PROVIDED BY GENETEC CORP. ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GENETEC CORP.
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
@@ -27,25 +27,35 @@
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
- *
- * $FreeBSD$
*/
+#ifndef _METACHAR_H
+#define _METACHAR_H
+
+#include <ctype.h>
-#ifndef _ARM_S3C24X0VAR_H_
-#define _ARM_S3C24X0VAR_H_
+extern unsigned char _metachar[];
-#include <arm/samsung/s3c2xx0/s3c2xx0var.h>
+#define ismeta(c) _metachar[(c) & 0x7f]
-struct s3c24x0_softc {
- struct s3c2xx0_softc sc_sx;
+static inline int
+hasmeta(const char *cmd)
+{
+ while (!ismeta(*cmd))
+ cmd++;
- bus_space_handle_t sc_timer_ioh; /* Timer control registers */
-};
+ return *cmd != '\0';
+}
-void s3c24x0_clock_freq(struct s3c2xx0_softc *);
-void s3c2410_clock_freq2(vm_offset_t, int *, int *, int *);
-void s3c2440_clock_freq2(vm_offset_t, int *, int *, int *);
+static inline int
+needshell(const char *cmd, int white)
+{
+ while (!ismeta(*cmd) && *cmd != ':' && *cmd != '=') {
+ if (white && isspace((unsigned char)*cmd))
+ break;
+ cmd++;
+ }
-void s3c24x0_sleep(int);
+ return *cmd != '\0';
+}
-#endif /* _ARM_S3C24X0VAR_H_ */
+#endif /* _METACHAR_H */
diff --git a/contrib/bmake/mk/ChangeLog b/contrib/bmake/mk/ChangeLog
index 85c8ae1..e7f71b5 100644
--- a/contrib/bmake/mk/ChangeLog
+++ b/contrib/bmake/mk/ChangeLog
@@ -1,3 +1,48 @@
+2015-10-20 Simon J. Gerraty <sjg@bad.crufty.net>
+
+ * install-mk (MK_VERSION): 20151020
+
+ * dirdeps.mk: Add logic for
+ make -f dirdeps.mk some/dir.${TARGET_SPEC}
+
+2015-10-14 Simon J. Gerraty <sjg@bad.crufty.net>
+
+ * install-mk (MK_VERSION): 20151010
+
+2015-10-02 Simon J. Gerraty <sjg@bad.crufty.net>
+
+ * meta.stage.mk: use staging: ${STAGE_TARGETS:...
+ to have stage_lins run last in non-jobs mode.
+ Use .ORDER only for jobs mode.
+
+2015-09-02 Simon J. Gerraty <sjg@bad.crufty.net>
+
+ * rst2htm.mk: allow for per target flags etc.
+
+2015-09-01 Simon J. Gerraty <sjg@bad.crufty.net>
+
+ * install-mk (MK_VERSION): 20150901
+
+ * doc.mk: create dir if needed use DOC_INSTALL_OWN
+
+2015-06-15 Simon J. Gerraty <sjg@bad.crufty.net>
+
+ * install-mk (MK_VERSION): 20150615
+
+ * auto.obj.mk: allow use of MAKEOBJDIRPREFIX too.
+ Follow make's normal precedence rules.
+
+ * gendirdeps.mk: allow customization of the header.
+ eg. for FreeBSD:
+ GENDIRDEPS_HEADER= echo '\# ${FreeBSD:L:@v@$$$v$$ @:M*F*}';
+
+ * meta.autodep.mk: ignore dirdeps.cache*
+
+ * meta.stage.mk: when bootstrapping options it can be handy to
+ throw warnings rather than errors for staging conflicts.
+
+ * meta.sys.mk: include local.meta.sys.mk for customization
+
2015-06-06 Simon J. Gerraty <sjg@bad.crufty.net>
* install-mk (MK_VERSION): 20150606
diff --git a/contrib/bmake/mk/auto.obj.mk b/contrib/bmake/mk/auto.obj.mk
index e25a721..fee3de2 100644
--- a/contrib/bmake/mk/auto.obj.mk
+++ b/contrib/bmake/mk/auto.obj.mk
@@ -1,4 +1,4 @@
-# $Id: auto.obj.mk,v 1.10 2015/04/16 16:59:00 sjg Exp $
+# $Id: auto.obj.mk,v 1.11 2015/06/16 06:28:21 sjg Exp $
#
# @(#) Copyright (c) 2004, Simon J. Gerraty
#
@@ -40,7 +40,10 @@ MKOBJDIRS= auto
.if !defined(NOOBJ) && !defined(NO_OBJ) && ${MKOBJDIRS:Uno} == auto
# Use __objdir here so it is easier to tweak without impacting
# the logic.
-__objdir?= ${MAKEOBJDIR}
+.if !empty(MAKEOBJDIRPREFIX) && exists(${MAKEOBJDIRPREFIX})
+__objdir?= ${MAKEOBJDIRPREFIX}${.CURDIR}
+.endif
+__objdir?= ${MAKEOBJDIR:Uobj}
__objdir:= ${__objdir:tA}
.if ${.OBJDIR} != ${__objdir}
# We need to chdir, make the directory if needed
diff --git a/contrib/bmake/mk/dirdeps.mk b/contrib/bmake/mk/dirdeps.mk
index 4aa101f..823115d 100644
--- a/contrib/bmake/mk/dirdeps.mk
+++ b/contrib/bmake/mk/dirdeps.mk
@@ -1,4 +1,4 @@
-# $Id: dirdeps.mk,v 1.54 2015/06/08 20:55:11 sjg Exp $
+# $Id: dirdeps.mk,v 1.55 2015/10/20 22:04:53 sjg Exp $
# Copyright (c) 2010-2013, Juniper Networks, Inc.
# All rights reserved.
@@ -242,6 +242,21 @@ DEP_${TARGET_SPEC_VARS:[$i]} := ${_tspec:[$i]}
DEP_MACHINE := ${_DEP_TARGET_SPEC}
.endif
+.if ${MAKEFILE:T} == ${.PARSEFILE} && empty(DIRDEPS) && ${.TARGETS:Uall:M*/*} != ""
+# This little trick let's us do
+#
+# mk -f dirdeps.mk some/dir.${TARGET_SPEC}
+#
+all:
+${.TARGETS:Nall}: all
+DIRDEPS := ${.TARGETS:M*/*}
+# so that -DNO_DIRDEPS works
+DEP_RELDIR := ${DIRDEPS:R:[1]}
+# disable DIRDEPS_CACHE as it does not like this trick
+MK_DIRDEPS_CACHE = no
+.endif
+
+
# pickup customizations
# as below you can use !target(_DIRDEP_USE) to protect things
# which should only be done once.
diff --git a/contrib/bmake/mk/doc.mk b/contrib/bmake/mk/doc.mk
index d496c42..d1385e9 100644
--- a/contrib/bmake/mk/doc.mk
+++ b/contrib/bmake/mk/doc.mk
@@ -1,4 +1,4 @@
-# $Id: doc.mk,v 1.4 2012/11/11 22:37:02 sjg Exp $
+# $Id: doc.mk,v 1.5 2015/09/08 06:15:31 sjg Exp $
.if !target(__${.PARSEFILE}__)
__${.PARSEFILE}__:
@@ -47,17 +47,19 @@ install:
.else
FILES?= ${SRCS}
install:
- ${INSTALL} -c -o ${BINOWN} -g ${BINGRP} -m 444 \
- Makefile ${FILES} ${EXTRA} ${DESTDIR}${BINDIR}/${DIR}
+ test -d ${DESTDIR}${DOCDIR}/${DIR} || \
+ ${INSTALL} -d ${DOC_INSTALL_OWN} -m ${DIRMODE} ${DESTDIR}${DOCDIR}/${DIR}
+ ${INSTALL} ${COPY} ${DOC_INSTALL_OWN} -m ${DOCMODE} \
+ Makefile ${FILES} ${EXTRA} ${DESTDIR}${DOCDIR}/${DIR}
.endif
spell: ${SRCS}
spell ${SRCS} | sort | comm -23 - spell.ok > paper.spell
-BINDIR?= /usr/share/doc
-BINGRP?= bin
-BINOWN?= bin
-BINMODE?= 444
-
.include <own.mk>
+
+.if !empty(DOCOWN)
+DOC_INSTALL_OWN?= -o ${DOCOWN} -g ${DOGGRP}
+.endif
+
.endif
diff --git a/contrib/bmake/mk/gendirdeps.mk b/contrib/bmake/mk/gendirdeps.mk
index 614a20e..2497f85 100644
--- a/contrib/bmake/mk/gendirdeps.mk
+++ b/contrib/bmake/mk/gendirdeps.mk
@@ -1,4 +1,4 @@
-# $Id: gendirdeps.mk,v 1.27 2015/06/08 20:55:11 sjg Exp $
+# $Id: gendirdeps.mk,v 1.29 2015/10/03 05:00:46 sjg Exp $
# Copyright (c) 2010-2013, Juniper Networks, Inc.
# All rights reserved.
@@ -157,7 +157,7 @@ M2D_OBJROOTS += ${SB_BACKING_SB}/${SB_OBJPREFIX}
.endif
# we are only interested in the dirs
-# sepecifically those we read something from.
+# specifically those we read something from.
# we canonicalize them to keep things simple
# if we are using a split-fs sandbox, it gets a little messier.
_objtop := ${_OBJTOP:tA}
@@ -310,7 +310,7 @@ CAT_DEPEND ?= .depend
# The sed command at the end of the stream, allows for the filters
# to output _{VAR} tokens which we will turn into proper ${VAR} references.
${_DEPENDFILE}: ${CAT_DEPEND:M.depend} ${META_FILES:O:u:@m@${exists($m):?$m:}@} ${_this} ${META2DEPS}
- @(echo '# Autogenerated - do NOT edit!'; echo; \
+ @(${GENDIRDEPS_HEADER} echo '# Autogenerated - do NOT edit!'; echo; \
echo 'DIRDEPS = \'; \
echo '${DIRDEPS:@d@ $d \\${.newline}@}'; echo; \
${_include_src_dirdeps} \
@@ -330,7 +330,7 @@ DIRDEPS := ${SUBDIR:S,^,${RELDIR}/,:O:u}
all: ${_DEPENDFILE}
${_DEPENDFILE}: ${MAKEFILE} ${_this}
- @(echo '# Autogenerated - do NOT edit!'; echo; \
+ @(${GENDIRDEPS_HEADER} echo '# Autogenerated - do NOT edit!'; echo; \
echo 'DIRDEPS = \'; \
echo '${DIRDEPS:@d@ $d \\${.newline}@}'; echo; \
echo '.include <dirdeps.mk>'; \
diff --git a/contrib/bmake/mk/host-target.mk b/contrib/bmake/mk/host-target.mk
index eacdf1d..b67c34d 100644
--- a/contrib/bmake/mk/host-target.mk
+++ b/contrib/bmake/mk/host-target.mk
@@ -1,5 +1,5 @@
# RCSid:
-# $Id: host-target.mk,v 1.7 2014/05/16 17:54:52 sjg Exp $
+# $Id: host-target.mk,v 1.9 2015/09/10 18:42:57 sjg Exp $
# Host platform information; may be overridden
.if !defined(_HOST_OSNAME)
@@ -10,16 +10,25 @@ _HOST_OSNAME != uname -s
_HOST_OSREL != uname -r
.export _HOST_OSREL
.endif
+.if !defined(_HOST_MACHINE)
+_HOST_MACHINE != uname -m
+.export _HOST_MACHINE
+.endif
.if !defined(_HOST_ARCH)
-_HOST_ARCH != uname -p 2>/dev/null || uname -m
+# for NetBSD prefer $MACHINE (amd64 rather than x86_64)
+.if ${_HOST_OSNAME:NNetBSD} == ""
+_HOST_ARCH := ${_HOST_MACHINE}
+.else
+_HOST_ARCH != uname -p 2> /dev/null || uname -m
# uname -p may produce garbage on linux
.if ${_HOST_ARCH:[\#]} > 1
-_HOST_ARCH != uname -m
+_HOST_ARCH := ${_HOST_MACHINE}
+.endif
.endif
.export _HOST_ARCH
.endif
.if !defined(HOST_MACHINE)
-HOST_MACHINE != uname -m
+HOST_MACHINE := ${_HOST_MACHINE}
.export HOST_MACHINE
.endif
diff --git a/contrib/bmake/mk/install-mk b/contrib/bmake/mk/install-mk
index 05facd5..eca75e0 100644
--- a/contrib/bmake/mk/install-mk
+++ b/contrib/bmake/mk/install-mk
@@ -55,7 +55,7 @@
# Simon J. Gerraty <sjg@crufty.net>
# RCSid:
-# $Id: install-mk,v 1.112 2015/06/08 20:55:11 sjg Exp $
+# $Id: install-mk,v 1.115 2015/10/20 22:04:53 sjg Exp $
#
# @(#) Copyright (c) 1994 Simon J. Gerraty
#
@@ -70,7 +70,7 @@
# sjg@crufty.net
#
-MK_VERSION=20150606
+MK_VERSION=20151020
OWNER=
GROUP=
MODE=444
diff --git a/contrib/bmake/mk/meta.autodep.mk b/contrib/bmake/mk/meta.autodep.mk
index 64bc30b..a062e47 100644
--- a/contrib/bmake/mk/meta.autodep.mk
+++ b/contrib/bmake/mk/meta.autodep.mk
@@ -1,4 +1,4 @@
-# $Id: meta.autodep.mk,v 1.36 2014/08/02 23:10:29 sjg Exp $
+# $Id: meta.autodep.mk,v 1.37 2015/06/16 06:29:17 sjg Exp $
#
# @(#) Copyright (c) 2010, Simon J. Gerraty
@@ -97,6 +97,8 @@ UPDATE_DEPENDFILE = no
# for example the result of running configure
# just make sure this is not empty
META_FILE_FILTER ?= N.meta
+# never consider these
+META_FILE_FILTER += Ndirdeps.cache*
.if !empty(DPADD)
# if we have any non-libs in DPADD,
diff --git a/contrib/bmake/mk/meta.stage.mk b/contrib/bmake/mk/meta.stage.mk
index 588f50e..4337c0e 100644
--- a/contrib/bmake/mk/meta.stage.mk
+++ b/contrib/bmake/mk/meta.stage.mk
@@ -1,4 +1,4 @@
-# $Id: meta.stage.mk,v 1.35 2015/05/20 06:40:33 sjg Exp $
+# $Id: meta.stage.mk,v 1.40 2015/10/04 17:36:54 sjg Exp $
#
# @(#) Copyright (c) 2011, Simon J. Gerraty
#
@@ -23,6 +23,8 @@ _dirdep = ${RELDIR}.${MACHINE}
_dirdep = ${RELDIR}
.endif
+CLEANFILES+= .dirdep
+
# this allows us to trace dependencies back to their src dir
.dirdep:
@echo '${_dirdep}' > $@
@@ -59,14 +61,23 @@ LN_CP_SCRIPT = LnCp() { \
ln $$1 $$2 2> /dev/null || \
cp -p $$1 $$2; }
+# a staging conflict should cause an error
+# a warning is handy when bootstapping different options.
+STAGE_CONFLICT?= ERROR
+.if ${STAGE_CONFLICT:tl} == "error"
+STAGE_CONFLICT_ACTION= exit 1;
+.else
+STAGE_CONFLICT_ACTION=
+.endif
+
# it is an error for more than one src dir to try and stage
# the same file
STAGE_DIRDEP_SCRIPT = ${LN_CP_SCRIPT}; StageDirdep() { \
t=$$1; \
if [ -s $$t.dirdep ]; then \
cmp -s .dirdep $$t.dirdep && return; \
- echo "ERROR: $$t installed by `cat $$t.dirdep` not ${_dirdep}" >&2; \
- exit 1; \
+ echo "${STAGE_CONFLICT}: $$t installed by `cat $$t.dirdep` not ${_dirdep}" >&2; \
+ ${STAGE_CONFLICT_ACTION} \
fi; \
LnCp .dirdep $$t.dirdep || exit 1; }
@@ -124,7 +135,7 @@ _STAGE_AS_BASENAME_USE: .USE ${.TARGET:T}
.if !empty(STAGE_INCSDIR)
STAGE_TARGETS += stage_incs
-STAGE_INCS ?= ${.ALLSRC:N.dirdep}
+STAGE_INCS ?= ${.ALLSRC:N.dirdep:Nstage_*}
stage_includes: stage_incs
stage_incs: .dirdep
@@ -135,7 +146,7 @@ stage_incs: .dirdep
.if !empty(STAGE_LIBDIR)
STAGE_TARGETS += stage_libs
-STAGE_LIBS ?= ${.ALLSRC:N.dirdep}
+STAGE_LIBS ?= ${.ALLSRC:N.dirdep:Nstage_*}
stage_libs: .dirdep
@${STAGE_FILE_SCRIPT}; StageFiles ${STAGE_LIBDIR:${STAGE_DIR_FILTER}} ${STAGE_LIBS}
@@ -167,8 +178,8 @@ CLEANFILES += ${STAGE_SETS:@s@stage*$s@}
# some makefiles need to populate multiple directories
.for s in ${STAGE_SETS:O:u}
-STAGE_FILES.$s ?= ${.ALLSRC:N.dirdep}
-STAGE_SYMLINKS.$s ?= ${.ALLSRC:N.dirdep}
+STAGE_FILES.$s ?= ${.ALLSRC:N.dirdep:Nstage_*}
+STAGE_SYMLINKS.$s ?= ${.ALLSRC:N.dirdep:Nstage_*}
STAGE_LINKS_DIR.$s ?= ${STAGE_OBJTOP}
STAGE_SYMLINKS_DIR.$s ?= ${STAGE_OBJTOP}
@@ -214,7 +225,7 @@ STAGE_TARGETS += stage_as
# each ${file} will be staged as ${STAGE_AS_${file:T}}
# one could achieve the same with SYMLINKS
.for s in ${STAGE_AS_SETS:O:u}
-STAGE_AS.$s ?= ${.ALLSRC:N.dirdep}
+STAGE_AS.$s ?= ${.ALLSRC:N.dirdep:Nstage_*}
stage_as: stage_as.$s
stage_as.$s: .dirdep
@@ -227,13 +238,15 @@ stage_as.$s: .dirdep
CLEANFILES += ${STAGE_TARGETS} stage_incs stage_includes
# stage_*links usually needs to follow any others.
+# for non-jobs mode the order here matters
+staging: ${STAGE_TARGETS:N*_links} ${STAGE_TARGETS:M*_links}
+
+.if ${.MAKE.JOBS:U0} > 0 && ${STAGE_TARGETS:M*_links} != ""
+# the above isn't sufficient
.for t in ${STAGE_TARGETS:N*links:O:u}
.ORDER: $t stage_links
-.ORDER: $t stage_symlinks
.endfor
-
-# make sure this exists
-staging:
+.endif
# generally we want staging to wait until everything else is done
STAGING_WAIT ?= .WAIT
diff --git a/contrib/bmake/mk/meta.sys.mk b/contrib/bmake/mk/meta.sys.mk
index 1f7ac49..1d1ba53 100644
--- a/contrib/bmake/mk/meta.sys.mk
+++ b/contrib/bmake/mk/meta.sys.mk
@@ -1,4 +1,4 @@
-# $Id: meta.sys.mk,v 1.21 2015/06/01 22:43:49 sjg Exp $
+# $Id: meta.sys.mk,v 1.22 2015/06/16 06:31:05 sjg Exp $
#
# @(#) Copyright (c) 2010, Simon J. Gerraty
@@ -20,6 +20,10 @@
.if ${MAKE_VERSION:U0} > 20100901
.if !target(.ERROR)
+.-include "local.meta.sys.mk"
+
+# absoulte path to what we are reading.
+_PARSEDIR = ${.PARSEDIR:tA}
META_MODE += meta verbose
.MAKE.MODE ?= ${META_MODE}
@@ -69,6 +73,7 @@ MACHINE = host
# for example, if using Makefild.depend for multiple machines,
# allowing only MACHINE0 to update can keep things simple.
MACHINE0 := ${MACHINE}
+.export MACHINE0
.if defined(PYTHON) && exists(${PYTHON})
# we prefer the python version of this - it is much faster
diff --git a/contrib/bmake/mk/own.mk b/contrib/bmake/mk/own.mk
index f090bbe..3fdb16b 100644
--- a/contrib/bmake/mk/own.mk
+++ b/contrib/bmake/mk/own.mk
@@ -1,4 +1,4 @@
-# $Id: own.mk,v 1.28 2015/04/16 16:59:00 sjg Exp $
+# $Id: own.mk,v 1.29 2015/09/08 06:15:31 sjg Exp $
.if !target(__${.PARSEFILE}__)
__${.PARSEFILE}__:
@@ -133,7 +133,9 @@ USERGRP!= id -g
.for x in BIN CONF DOC INFO KMOD LIB MAN NLS SHARE
$xOWN= ${USER}
$xGRP= ${USERGRP}
+$x_INSTALL_OWN=
.endfor
+PROG_INSTALL_OWN=
.endif
.endif
@@ -143,6 +145,7 @@ BINGRP?= ${ROOT_GROUP}
BINOWN?= root
BINMODE?= 555
NONBINMODE?= 444
+DIRMODE?= 755
# Define MANZ to have the man pages compressed (gzip)
#MANZ= 1
diff --git a/contrib/bmake/mk/rst2htm.mk b/contrib/bmake/mk/rst2htm.mk
index 4d4c940..296b73c 100644
--- a/contrib/bmake/mk/rst2htm.mk
+++ b/contrib/bmake/mk/rst2htm.mk
@@ -1,4 +1,4 @@
-# $Id: rst2htm.mk,v 1.9 2014/02/22 01:52:41 sjg Exp $
+# $Id: rst2htm.mk,v 1.10 2015/09/08 22:17:46 sjg Exp $
#
# @(#) Copyright (c) 2009, Simon J. Gerraty
#
@@ -26,7 +26,12 @@ RST2PDF ?= rst2pdf
RST2S5 ?= rst2s5.py
# the following will run RST2S5 if the target name contains the word 'slides'
# otherwise it uses RST2HTML
-RST2HTM = ${"${.TARGET:T:M*slides*}":?${RST2S5} ${RST2S5_FLAGS}:${RST2HTML} ${RST2HTML_FLAGS}}
+RST2HTM = ${"${.TARGET:T:M*slides*}":?${RST2S5}:${RST2HTML}}
+RST2HTM_SLIDES_FLAGS ?= ${RST2S5_FLAGS}
+RST2HTM_DOC_FLAGS ?= ${RST2HTML_FLAGS}
+RST2HTM_FLAGS ?= ${"${.TARGET:T:M*slides*}":?${RST2HTM_SLIDES_FLAGS}:${RST2HTM_DOC_FLAGS}}
+
+RST2PDF_FLAGS ?= ${"${.TARGET:T:M*slides*}":?${RST2PDF_SLIDES_FLAGS}:${RST2PDF_DOC_FLAGS}}
RST_SUFFIXES ?= .rst .txt
@@ -37,10 +42,10 @@ html: ${HTMFILES}
.SUFFIXES: ${RST_SUFFIXES} .htm .pdf
${RST_SUFFIXES:@s@$s.htm@}:
- ${RST2HTM} ${.IMPSRC} ${.TARGET}
+ ${RST2HTM} ${RST2HTM_FLAGS} ${FLAGS.${.TARGET}} ${.IMPSRC} ${.TARGET}
${RST_SUFFIXES:@s@$s.pdf@}:
- ${RST2PDF} ${.IMPSRC} ${.TARGET}
+ ${RST2PDF} ${RST2PDF_FLAGS} ${FLAGS.${.TARGET}} ${.IMPSRC} ${.TARGET}
.for s in ${RSTSRCS:O:u}
${s:R:T}.htm: $s
diff --git a/contrib/bmake/nonints.h b/contrib/bmake/nonints.h
index 9eaebc2..2332858 100644
--- a/contrib/bmake/nonints.h
+++ b/contrib/bmake/nonints.h
@@ -1,4 +1,4 @@
-/* $NetBSD: nonints.h,v 1.68 2015/05/05 21:51:09 sjg Exp $ */
+/* $NetBSD: nonints.h,v 1.69 2015/10/11 04:51:24 sjg Exp $ */
/*-
* Copyright (c) 1988, 1989, 1990, 1993
@@ -184,8 +184,8 @@ void Var_Set(const char *, const char *, GNode *, int);
void Var_Append(const char *, const char *, GNode *);
Boolean Var_Exists(const char *, GNode *);
char *Var_Value(const char *, GNode *, char **);
-char *Var_Parse(const char *, GNode *, Boolean, int *, void **);
-char *Var_Subst(const char *, const char *, GNode *, Boolean);
+char *Var_Parse(const char *, GNode *, Boolean, Boolean, int *, void **);
+char *Var_Subst(const char *, const char *, GNode *, Boolean, Boolean);
char *Var_GetTail(const char *);
char *Var_GetHead(const char *);
void Var_Init(void);
diff --git a/contrib/bmake/os.sh b/contrib/bmake/os.sh
index b714eb7..1df67b8 100755
--- a/contrib/bmake/os.sh
+++ b/contrib/bmake/os.sh
@@ -17,7 +17,7 @@
# Simon J. Gerraty <sjg@crufty.net>
# RCSid:
-# $Id: os.sh,v 1.46 2014/05/19 16:38:09 sjg Exp $
+# $Id: os.sh,v 1.47 2015/09/10 05:53:10 sjg Exp $
#
# @(#) Copyright (c) 1994 Simon J. Gerraty
#
@@ -137,7 +137,10 @@ SunOS)
# NetBSD at least has good backward compatibility
# so NetBSD/i386 is good enough
case $OS in
- NetBSD) SHARE_ARCH=$OS/${MACHINE_ARCH:-$MACHINE};;
+ NetBSD)
+ HOST_ARCH=$MACHINE
+ SHARE_ARCH=$OS/$HOST
+ ;;
OpenBSD)
arch=`Which arch /usr/bin:/usr/ucb:$PATH`
MACHINE_ARCH=`$arch -s`
@@ -203,13 +206,14 @@ esac
TMP_DIRS=${TMP_DIRS:-"/tmp /var/tmp"}
MACHINE_ARCH=${MACHINE_ARCH:-$MACHINE}
+HOST_ARCH=${HOST_ARCH:-$MACHINE_ARCH}
# we mount server:/share/arch/$SHARE_ARCH as /usr/local
-SHARE_ARCH=${SHARE_ARCH:-$OS/$OSMAJOR.X/$MACHINE_ARCH}
+SHARE_ARCH=${SHARE_ARCH:-$OS/$OSMAJOR.X/$HOST_ARCH}
LN=${LN:-ln}
TR=${TR:-tr}
# Some people like have /share/$HOST_TARGET/bin etc.
-HOST_TARGET=`echo ${OS}${OSMAJOR}-${MACHINE_ARCH} | toLower`
+HOST_TARGET=`echo ${OS}${OSMAJOR}-$HOST_ARCH | toLower`
export HOST_TARGET
case `echo -n .` in -n*) N=; C="\c";; *) N=-n; C=;; esac
diff --git a/contrib/bmake/parse.c b/contrib/bmake/parse.c
index a55582e..1718470 100644
--- a/contrib/bmake/parse.c
+++ b/contrib/bmake/parse.c
@@ -1,4 +1,4 @@
-/* $NetBSD: parse.c,v 1.204 2014/09/18 08:06:13 dholland Exp $ */
+/* $NetBSD: parse.c,v 1.205 2015/10/11 04:51:24 sjg Exp $ */
/*
* Copyright (c) 1988, 1989, 1990, 1993
@@ -69,14 +69,14 @@
*/
#ifndef MAKE_NATIVE
-static char rcsid[] = "$NetBSD: parse.c,v 1.204 2014/09/18 08:06:13 dholland Exp $";
+static char rcsid[] = "$NetBSD: parse.c,v 1.205 2015/10/11 04:51:24 sjg Exp $";
#else
#include <sys/cdefs.h>
#ifndef lint
#if 0
static char sccsid[] = "@(#)parse.c 8.3 (Berkeley) 3/19/94";
#else
-__RCSID("$NetBSD: parse.c,v 1.204 2014/09/18 08:06:13 dholland Exp $");
+__RCSID("$NetBSD: parse.c,v 1.205 2015/10/11 04:51:24 sjg Exp $");
#endif
#endif /* not lint */
#endif
@@ -812,7 +812,7 @@ ParseMessage(char *line)
while (isspace((u_char)*line))
line++;
- line = Var_Subst(NULL, line, VAR_CMD, 0);
+ line = Var_Subst(NULL, line, VAR_CMD, FALSE, TRUE);
Parse_Error(mtype, "%s", line);
free(line);
@@ -1229,7 +1229,7 @@ ParseDoDependency(char *line)
int length;
void *freeIt;
- (void)Var_Parse(cp, VAR_CMD, TRUE, &length, &freeIt);
+ (void)Var_Parse(cp, VAR_CMD, TRUE, TRUE, &length, &freeIt);
if (freeIt)
free(freeIt);
cp += length-1;
@@ -1944,7 +1944,7 @@ Parse_DoVar(char *line, GNode *ctxt)
if (!Var_Exists(line, ctxt))
Var_Set(line, "", ctxt, 0);
- cp = Var_Subst(NULL, cp, ctxt, FALSE);
+ cp = Var_Subst(NULL, cp, ctxt, FALSE, TRUE);
oldVars = oldOldVars;
freeCp = TRUE;
@@ -1959,7 +1959,7 @@ Parse_DoVar(char *line, GNode *ctxt)
* expansion on the whole thing. The resulting string will need
* freeing when we're done, so set freeCmd to TRUE.
*/
- cp = Var_Subst(NULL, cp, VAR_CMD, TRUE);
+ cp = Var_Subst(NULL, cp, VAR_CMD, TRUE, TRUE);
freeCp = TRUE;
}
@@ -2298,7 +2298,7 @@ ParseDoInclude(char *line)
* Substitute for any variables in the file name before trying to
* find the thing.
*/
- file = Var_Subst(NULL, file, VAR_CMD, FALSE);
+ file = Var_Subst(NULL, file, VAR_CMD, FALSE, TRUE);
Parse_include_file(file, endc == '>', silent);
free(file);
@@ -2524,7 +2524,7 @@ ParseTraditionalInclude(char *line)
* Substitute for any variables in the file name before trying to
* find the thing.
*/
- all_files = Var_Subst(NULL, file, VAR_CMD, FALSE);
+ all_files = Var_Subst(NULL, file, VAR_CMD, FALSE, TRUE);
if (*file == '\0') {
Parse_Error(PARSE_FATAL,
@@ -2592,7 +2592,7 @@ ParseGmakeExport(char *line)
/*
* Expand the value before putting it in the environment.
*/
- value = Var_Subst(NULL, value, VAR_CMD, FALSE);
+ value = Var_Subst(NULL, value, VAR_CMD, FALSE, TRUE);
setenv(variable, value, 1);
}
#endif
@@ -3141,7 +3141,7 @@ Parse_File(const char *name, int fd)
* variables expanded before being parsed. Tell the variable
* module to complain if some variable is undefined...
*/
- line = Var_Subst(NULL, line, VAR_CMD, TRUE);
+ line = Var_Subst(NULL, line, VAR_CMD, TRUE, TRUE);
/*
* Need a non-circular list for the target nodes
diff --git a/contrib/bmake/suff.c b/contrib/bmake/suff.c
index c42d2ec..15a3cc8 100644
--- a/contrib/bmake/suff.c
+++ b/contrib/bmake/suff.c
@@ -1,4 +1,4 @@
-/* $NetBSD: suff.c,v 1.73 2014/09/07 20:55:34 joerg Exp $ */
+/* $NetBSD: suff.c,v 1.74 2015/10/11 04:51:24 sjg Exp $ */
/*
* Copyright (c) 1988, 1989, 1990, 1993
@@ -69,14 +69,14 @@
*/
#ifndef MAKE_NATIVE
-static char rcsid[] = "$NetBSD: suff.c,v 1.73 2014/09/07 20:55:34 joerg Exp $";
+static char rcsid[] = "$NetBSD: suff.c,v 1.74 2015/10/11 04:51:24 sjg Exp $";
#else
#include <sys/cdefs.h>
#ifndef lint
#if 0
static char sccsid[] = "@(#)suff.c 8.4 (Berkeley) 3/21/94";
#else
-__RCSID("$NetBSD: suff.c,v 1.73 2014/09/07 20:55:34 joerg Exp $");
+__RCSID("$NetBSD: suff.c,v 1.74 2015/10/11 04:51:24 sjg Exp $");
#endif
#endif /* not lint */
#endif
@@ -1543,7 +1543,7 @@ SuffExpandChildren(LstNode cln, GNode *pgn)
if (DEBUG(SUFF)) {
fprintf(debug_file, "Expanding \"%s\"...", cgn->name);
}
- cp = Var_Subst(NULL, cgn->name, pgn, TRUE);
+ cp = Var_Subst(NULL, cgn->name, pgn, TRUE, TRUE);
if (cp != NULL) {
Lst members = Lst_Init(FALSE);
@@ -1596,7 +1596,7 @@ SuffExpandChildren(LstNode cln, GNode *pgn)
int len;
void *freeIt;
- junk = Var_Parse(cp, pgn, TRUE, &len, &freeIt);
+ junk = Var_Parse(cp, pgn, TRUE, TRUE, &len, &freeIt);
if (junk != var_Error) {
cp += len - 1;
}
diff --git a/contrib/bmake/unit-tests/varmisc.exp b/contrib/bmake/unit-tests/varmisc.exp
index 1636aaf..e2af496 100644
--- a/contrib/bmake/unit-tests/varmisc.exp
+++ b/contrib/bmake/unit-tests/varmisc.exp
@@ -1,2 +1,20 @@
+:D expanded when var set
+true
+TRUE
+:U expanded when var undef
+true
+TRUE
+:D skipped if var undef
+
+:U skipped when var set
+is set
+:? only lhs when value true
+true
+TRUE
+:? only rhs when value false
+false
+FALSE
+do not evaluate or expand :? if discarding
+is set
exit status 0
diff --git a/contrib/bmake/unit-tests/varmisc.mk b/contrib/bmake/unit-tests/varmisc.mk
index 4b4a931..14b52d2 100644
--- a/contrib/bmake/unit-tests/varmisc.mk
+++ b/contrib/bmake/unit-tests/varmisc.mk
@@ -1,8 +1,42 @@
-# $Id: varmisc.mk,v 1.2 2014/08/30 22:25:14 sjg Exp $
+# $Id: varmisc.mk,v 1.5 2015/10/12 17:10:48 sjg Exp $
#
# Miscellaneous variable tests.
-all: unmatched_var_paren
+all: unmatched_var_paren D_true U_true D_false U_false Q_lhs Q_rhs NQ_none
unmatched_var_paren:
@echo ${foo::=foo-text}
+
+True = ${echo true >&2:L:sh}TRUE
+False= ${echo false >&2:L:sh}FALSE
+
+VSET= is set
+.undef UNDEF
+
+U_false:
+ @echo :U skipped when var set
+ @echo ${VSET:U${False}}
+
+D_false:
+ @echo :D skipped if var undef
+ @echo ${UNDEF:D${False}}
+
+U_true:
+ @echo :U expanded when var undef
+ @echo ${UNDEF:U${True}}
+
+D_true:
+ @echo :D expanded when var set
+ @echo ${VSET:D${True}}
+
+Q_lhs:
+ @echo :? only lhs when value true
+ @echo ${1:L:?${True}:${False}}
+
+Q_rhs:
+ @echo :? only rhs when value false
+ @echo ${0:L:?${True}:${False}}
+
+NQ_none:
+ @echo do not evaluate or expand :? if discarding
+ @echo ${VSET:U${1:L:?${True}:${False}}}
diff --git a/contrib/bmake/var.c b/contrib/bmake/var.c
index e15c301..6fd3825 100644
--- a/contrib/bmake/var.c
+++ b/contrib/bmake/var.c
@@ -1,4 +1,4 @@
-/* $NetBSD: var.c,v 1.192 2015/05/05 21:51:09 sjg Exp $ */
+/* $NetBSD: var.c,v 1.199 2015/10/20 21:30:57 sjg Exp $ */
/*
* Copyright (c) 1988, 1989, 1990, 1993
@@ -69,14 +69,14 @@
*/
#ifndef MAKE_NATIVE
-static char rcsid[] = "$NetBSD: var.c,v 1.192 2015/05/05 21:51:09 sjg Exp $";
+static char rcsid[] = "$NetBSD: var.c,v 1.199 2015/10/20 21:30:57 sjg Exp $";
#else
#include <sys/cdefs.h>
#ifndef lint
#if 0
static char sccsid[] = "@(#)var.c 8.3 (Berkeley) 3/19/94";
#else
-__RCSID("$NetBSD: var.c,v 1.192 2015/05/05 21:51:09 sjg Exp $");
+__RCSID("$NetBSD: var.c,v 1.199 2015/10/20 21:30:57 sjg Exp $");
#endif
#endif /* not lint */
#endif
@@ -138,6 +138,7 @@ __RCSID("$NetBSD: var.c,v 1.192 2015/05/05 21:51:09 sjg Exp $");
#include "buf.h"
#include "dir.h"
#include "job.h"
+#include "metachar.h"
extern int makelevel;
/*
@@ -541,7 +542,7 @@ Var_Delete(const char *name, GNode *ctxt)
char *cp;
if (strchr(name, '$')) {
- cp = Var_Subst(NULL, name, VAR_GLOBAL, 0);
+ cp = Var_Subst(NULL, name, VAR_GLOBAL, FALSE, TRUE);
} else {
cp = (char *)name;
}
@@ -632,7 +633,7 @@ Var_Export1(const char *name, int parent)
}
n = snprintf(tmp, sizeof(tmp), "${%s}", name);
if (n < (int)sizeof(tmp)) {
- val = Var_Subst(NULL, tmp, VAR_GLOBAL, 0);
+ val = Var_Subst(NULL, tmp, VAR_GLOBAL, FALSE, TRUE);
setenv(name, val, 1);
free(val);
}
@@ -700,7 +701,7 @@ Var_ExportVars(void)
int ac;
int i;
- val = Var_Subst(NULL, tmp, VAR_GLOBAL, 0);
+ val = Var_Subst(NULL, tmp, VAR_GLOBAL, FALSE, TRUE);
av = brk_string(val, &ac, FALSE, &as);
for (i = 0; i < ac; i++) {
Var_Export1(av[i], 0);
@@ -738,7 +739,7 @@ Var_Export(char *str, int isExport)
} else {
track = VAR_EXPORT_PARENT;
}
- val = Var_Subst(NULL, str, VAR_GLOBAL, 0);
+ val = Var_Subst(NULL, str, VAR_GLOBAL, FALSE, TRUE);
av = brk_string(val, &ac, FALSE, &as);
for (i = 0; i < ac; i++) {
name = av[i];
@@ -826,7 +827,7 @@ Var_UnExport(char *str)
/* Using .MAKE.EXPORTED */
n = snprintf(tmp, sizeof(tmp), "${" MAKE_EXPORTED ":O:u}");
if (n < (int)sizeof(tmp)) {
- vlist = Var_Subst(NULL, tmp, VAR_GLOBAL, 0);
+ vlist = Var_Subst(NULL, tmp, VAR_GLOBAL, FALSE, TRUE);
}
}
if (vlist) {
@@ -856,7 +857,7 @@ Var_UnExport(char *str)
n = snprintf(tmp, sizeof(tmp),
"${" MAKE_EXPORTED ":N%s}", v->name);
if (n < (int)sizeof(tmp)) {
- cp = Var_Subst(NULL, tmp, VAR_GLOBAL, 0);
+ cp = Var_Subst(NULL, tmp, VAR_GLOBAL, FALSE, TRUE);
Var_Set(MAKE_EXPORTED, cp, VAR_GLOBAL, 0);
free(cp);
}
@@ -911,7 +912,7 @@ Var_Set(const char *name, const char *val, GNode *ctxt, int flags)
* point in searching them all just to save a bit of memory...
*/
if (strchr(name, '$') != NULL) {
- expanded_name = Var_Subst(NULL, name, ctxt, 0);
+ expanded_name = Var_Subst(NULL, name, ctxt, FALSE, TRUE);
if (expanded_name[0] == 0) {
if (DEBUG(VAR)) {
fprintf(debug_file, "Var_Set(\"%s\", \"%s\", ...) "
@@ -982,8 +983,7 @@ Var_Set(const char *name, const char *val, GNode *ctxt, int flags)
out:
- if (expanded_name != NULL)
- free(expanded_name);
+ free(expanded_name);
if (v != NULL)
VarFreeEnv(v, TRUE);
}
@@ -1023,7 +1023,7 @@ Var_Append(const char *name, const char *val, GNode *ctxt)
char *expanded_name = NULL;
if (strchr(name, '$') != NULL) {
- expanded_name = Var_Subst(NULL, name, ctxt, 0);
+ expanded_name = Var_Subst(NULL, name, ctxt, FALSE, TRUE);
if (expanded_name[0] == 0) {
if (DEBUG(VAR)) {
fprintf(debug_file, "Var_Append(\"%s\", \"%s\", ...) "
@@ -1061,8 +1061,7 @@ Var_Append(const char *name, const char *val, GNode *ctxt)
Hash_SetValue(h, v);
}
}
- if (expanded_name != NULL)
- free(expanded_name);
+ free(expanded_name);
}
/*-
@@ -1089,12 +1088,10 @@ Var_Exists(const char *name, GNode *ctxt)
char *cp;
if ((cp = strchr(name, '$')) != NULL) {
- cp = Var_Subst(NULL, name, ctxt, FALSE);
+ cp = Var_Subst(NULL, name, ctxt, FALSE, TRUE);
}
v = VarFind(cp ? cp : name, ctxt, FIND_CMD|FIND_GLOBAL|FIND_ENV);
- if (cp != NULL) {
- free(cp);
- }
+ free(cp);
if (v == NULL) {
return(FALSE);
} else {
@@ -1389,7 +1386,7 @@ VarSYSVMatch(GNode *ctx, Var_Parse_State *vpstate,
addSpace = TRUE;
if ((ptr = Str_SYSVMatch(word, pat->lhs, &len)) != NULL) {
- varexp = Var_Subst(NULL, pat->rhs, ctx, 0);
+ varexp = Var_Subst(NULL, pat->rhs, ctx, FALSE, TRUE);
Str_SYSVSubst(buf, varexp, ptr, len);
free(varexp);
} else {
@@ -1809,7 +1806,7 @@ VarLoopExpand(GNode *ctx MAKE_ATTR_UNUSED,
if (word && *word) {
Var_Set(loop->tvar, word, loop->ctxt, VAR_NO_EXPORT);
- s = Var_Subst(NULL, loop->str, loop->ctxt, loop->errnum);
+ s = Var_Subst(NULL, loop->str, loop->ctxt, loop->errnum, TRUE);
if (s != NULL && *s != '\0') {
if (addSpace && *s != '\n')
Buf_AddByte(buf, ' ');
@@ -2190,10 +2187,9 @@ VarGetPattern(GNode *ctxt, Var_Parse_State *vpstate MAKE_ATTR_UNUSED,
* delimiter, assume it's a variable
* substitution and recurse.
*/
- cp2 = Var_Parse(cp, ctxt, errnum, &len, &freeIt);
+ cp2 = Var_Parse(cp, ctxt, errnum, TRUE, &len, &freeIt);
Buf_AddBytes(&buf, strlen(cp2), cp2);
- if (freeIt)
- free(freeIt);
+ free(freeIt);
cp += len - 1;
} else {
const char *cp2 = &cp[1];
@@ -2246,7 +2242,7 @@ VarGetPattern(GNode *ctxt, Var_Parse_State *vpstate MAKE_ATTR_UNUSED,
/*-
*-----------------------------------------------------------------------
* VarQuote --
- * Quote shell meta-characters in the string
+ * Quote shell meta-characters and space characters in the string
*
* Results:
* The quoted string
@@ -2261,29 +2257,25 @@ VarQuote(char *str)
{
Buffer buf;
- /* This should cover most shells :-( */
- static const char meta[] = "\n \t'`\";&<>()|*?{}[]\\$!#^~";
const char *newline;
- size_t len, nlen;
+ size_t nlen;
if ((newline = Shell_GetNewline()) == NULL)
newline = "\\\n";
nlen = strlen(newline);
Buf_Init(&buf, 0);
- while (*str != '\0') {
- if ((len = strcspn(str, meta)) != 0) {
- Buf_AddBytes(&buf, len, str);
- str += len;
- } else if (*str == '\n') {
+
+ for (; *str != '\0'; str++) {
+ if (*str == '\n') {
Buf_AddBytes(&buf, nlen, newline);
- ++str;
- } else {
- Buf_AddByte(&buf, '\\');
- Buf_AddByte(&buf, *str);
- ++str;
+ continue;
}
+ if (isspace((unsigned char)*str) || ismeta((unsigned char)*str))
+ Buf_AddByte(&buf, '\\');
+ Buf_AddByte(&buf, *str);
}
+
str = Buf_Destroy(&buf, FALSE);
if (DEBUG(VAR))
fprintf(debug_file, "QuoteMeta: [%s]\n", str);
@@ -2468,7 +2460,7 @@ VarStrftime(const char *fmt, int zulu)
static char *
ApplyModifiers(char *nstr, const char *tstr,
int startc, int endc,
- Var *v, GNode *ctxt, Boolean errnum,
+ Var *v, GNode *ctxt, Boolean errnum, Boolean wantit,
int *lengthPtr, void **freePtr)
{
const char *start;
@@ -2499,7 +2491,7 @@ ApplyModifiers(char *nstr, const char *tstr,
int rlen;
int c;
- rval = Var_Parse(tstr, ctxt, errnum, &rlen, &freeIt);
+ rval = Var_Parse(tstr, ctxt, errnum, wantit, &rlen, &freeIt);
/*
* If we have not parsed up to endc or ':',
@@ -2509,8 +2501,7 @@ ApplyModifiers(char *nstr, const char *tstr,
(c = tstr[rlen]) != '\0' &&
c != ':' &&
c != endc) {
- if (freeIt)
- free(freeIt);
+ free(freeIt);
goto apply_mods;
}
@@ -2526,17 +2517,15 @@ ApplyModifiers(char *nstr, const char *tstr,
nstr = ApplyModifiers(nstr, rval,
0, 0,
- v, ctxt, errnum, &used, freePtr);
+ v, ctxt, errnum, wantit, &used, freePtr);
if (nstr == var_Error
|| (nstr == varNoError && errnum == 0)
|| strlen(rval) != (size_t) used) {
- if (freeIt)
- free(freeIt);
+ free(freeIt);
goto out; /* error already reported */
}
}
- if (freeIt)
- free(freeIt);
+ free(freeIt);
if (*tstr == ':')
tstr++;
else if (!*tstr && endc) {
@@ -2565,6 +2554,7 @@ ApplyModifiers(char *nstr, const char *tstr,
char *sv_name;
VarPattern pattern;
int how;
+ int flags;
if (v->name[0] == 0)
goto bad_modifier;
@@ -2600,8 +2590,9 @@ ApplyModifiers(char *nstr, const char *tstr,
delim = startc == PROPEN ? PRCLOSE : BRCLOSE;
pattern.flags = 0;
+ flags = (wantit) ? 0 : VAR_NOSUBST;
pattern.rhs = VarGetPattern(ctxt, &parsestate, errnum,
- &cp, delim, NULL,
+ &cp, delim, &flags,
&pattern.rightLen,
NULL);
if (v->flags & VAR_JUNK) {
@@ -2615,26 +2606,27 @@ ApplyModifiers(char *nstr, const char *tstr,
termc = *--cp;
delim = '\0';
- switch (how) {
- case '+':
- Var_Append(v->name, pattern.rhs, v_ctxt);
- break;
- case '!':
- newStr = Cmd_Exec(pattern.rhs, &emsg);
- if (emsg)
- Error(emsg, nstr);
- else
- Var_Set(v->name, newStr, v_ctxt, 0);
- if (newStr)
+ if (wantit) {
+ switch (how) {
+ case '+':
+ Var_Append(v->name, pattern.rhs, v_ctxt);
+ break;
+ case '!':
+ newStr = Cmd_Exec(pattern.rhs, &emsg);
+ if (emsg)
+ Error(emsg, nstr);
+ else
+ Var_Set(v->name, newStr, v_ctxt, 0);
free(newStr);
- break;
- case '?':
- if ((v->flags & VAR_JUNK) == 0)
break;
- /* FALLTHROUGH */
- default:
- Var_Set(v->name, pattern.rhs, v_ctxt, 0);
- break;
+ case '?':
+ if ((v->flags & VAR_JUNK) == 0)
+ break;
+ /* FALLTHROUGH */
+ default:
+ Var_Set(v->name, pattern.rhs, v_ctxt, 0);
+ break;
+ }
}
free(UNCONST(pattern.rhs));
newStr = varNoError;
@@ -2676,8 +2668,15 @@ ApplyModifiers(char *nstr, const char *tstr,
case 'U':
{
Buffer buf; /* Buffer for patterns */
- int wantit; /* want data in buffer */
+ int wantit_; /* want data in buffer */
+ if (wantit) {
+ if (*tstr == 'U')
+ wantit_ = ((v->flags & VAR_JUNK) != 0);
+ else
+ wantit_ = ((v->flags & VAR_JUNK) == 0);
+ } else
+ wantit_ = wantit;
/*
* Pass through tstr looking for 1) escaped delimiters,
* '$'s and backslashes (place the escaped character in
@@ -2706,10 +2705,9 @@ ApplyModifiers(char *nstr, const char *tstr,
int len;
void *freeIt;
- cp2 = Var_Parse(cp, ctxt, errnum, &len, &freeIt);
+ cp2 = Var_Parse(cp, ctxt, errnum, wantit_, &len, &freeIt);
Buf_AddBytes(&buf, strlen(cp2), cp2);
- if (freeIt)
- free(freeIt);
+ free(freeIt);
cp += len - 1;
} else {
Buf_AddByte(&buf, *cp);
@@ -2718,13 +2716,9 @@ ApplyModifiers(char *nstr, const char *tstr,
termc = *cp;
- if (*tstr == 'U')
- wantit = ((v->flags & VAR_JUNK) != 0);
- else
- wantit = ((v->flags & VAR_JUNK) == 0);
if ((v->flags & VAR_JUNK) != 0)
v->flags |= VAR_KEEP;
- if (wantit) {
+ if (wantit_) {
newStr = Buf_Destroy(&buf, FALSE);
} else {
newStr = nstr;
@@ -2769,14 +2763,17 @@ ApplyModifiers(char *nstr, const char *tstr,
pattern.flags = 0;
delim = '!';
-
+ emsg = NULL;
cp = ++tstr;
if ((pattern.rhs = VarGetPattern(ctxt, &parsestate, errnum,
&cp, delim,
NULL, &pattern.rightLen,
NULL)) == NULL)
goto cleanup;
- newStr = Cmd_Exec(pattern.rhs, &emsg);
+ if (wantit)
+ newStr = Cmd_Exec(pattern.rhs, &emsg);
+ else
+ newStr = varNoError;
free(UNCONST(pattern.rhs));
if (emsg)
Error(emsg, nstr);
@@ -3152,7 +3149,7 @@ ApplyModifiers(char *nstr, const char *tstr,
* expand it.
*/
cp2 = pattern;
- pattern = Var_Subst(NULL, cp2, ctxt, errnum);
+ pattern = Var_Subst(NULL, cp2, ctxt, errnum, TRUE);
free(cp2);
}
if (DEBUG(VAR))
@@ -3238,15 +3235,32 @@ ApplyModifiers(char *nstr, const char *tstr,
{
VarPattern pattern;
Boolean value;
-
+ int cond_rc;
+ int lhs_flags, rhs_flags;
+
/* find ':', and then substitute accordingly */
-
+ if (wantit) {
+ cond_rc = Cond_EvalExpression(NULL, v->name, &value, 0, FALSE);
+ if (cond_rc == COND_INVALID) {
+ lhs_flags = rhs_flags = VAR_NOSUBST;
+ } else if (value) {
+ lhs_flags = 0;
+ rhs_flags = VAR_NOSUBST;
+ } else {
+ lhs_flags = VAR_NOSUBST;
+ rhs_flags = 0;
+ }
+ } else {
+ /* we are just consuming and discarding */
+ cond_rc = value = 0;
+ lhs_flags = rhs_flags = VAR_NOSUBST;
+ }
pattern.flags = 0;
cp = ++tstr;
delim = ':';
if ((pattern.lhs = VarGetPattern(ctxt, &parsestate, errnum,
- &cp, delim, NULL,
+ &cp, delim, &lhs_flags,
&pattern.leftLen,
NULL)) == NULL)
goto cleanup;
@@ -3254,15 +3268,14 @@ ApplyModifiers(char *nstr, const char *tstr,
/* BROPEN or PROPEN */
delim = endc;
if ((pattern.rhs = VarGetPattern(ctxt, &parsestate, errnum,
- &cp, delim, NULL,
+ &cp, delim, &rhs_flags,
&pattern.rightLen,
NULL)) == NULL)
goto cleanup;
termc = *--cp;
delim = '\0';
- if (Cond_EvalExpression(NULL, v->name, &value, 0, FALSE)
- == COND_INVALID) {
+ if (cond_rc == COND_INVALID) {
Error("Bad conditional expression `%s' in %s?%s:%s",
v->name, v->name, pattern.lhs, pattern.rhs);
goto cleanup;
@@ -3424,9 +3437,12 @@ ApplyModifiers(char *nstr, const char *tstr,
case 's':
if (tstr[1] == 'h' && (tstr[2] == endc || tstr[2] == ':')) {
const char *emsg;
- newStr = Cmd_Exec(nstr, &emsg);
- if (emsg)
- Error(emsg, nstr);
+ if (wantit) {
+ newStr = Cmd_Exec(nstr, &emsg);
+ if (emsg)
+ Error(emsg, nstr);
+ } else
+ newStr = varNoError;
cp = tstr + 2;
termc = *cp;
break;
@@ -3547,10 +3563,8 @@ ApplyModifiers(char *nstr, const char *tstr,
if (delim != '\0')
Error("Unclosed substitution for %s (%c missing)",
v->name, delim);
- if (*freePtr) {
- free(*freePtr);
- *freePtr = NULL;
- }
+ free(*freePtr);
+ *freePtr = NULL;
return (var_Error);
}
@@ -3565,6 +3579,7 @@ ApplyModifiers(char *nstr, const char *tstr,
* str The string to parse
* ctxt The context for the variable
* errnum TRUE if undefined variables are an error
+ * wantit TRUE if we actually want the result
* lengthPtr OUT: The length of the specification
* freePtr OUT: Non-NULL if caller should free *freePtr
*
@@ -3583,8 +3598,9 @@ ApplyModifiers(char *nstr, const char *tstr,
*/
/* coverity[+alloc : arg-*4] */
char *
-Var_Parse(const char *str, GNode *ctxt, Boolean errnum, int *lengthPtr,
- void **freePtr)
+Var_Parse(const char *str, GNode *ctxt,
+ Boolean errnum, Boolean wantit,
+ int *lengthPtr, void **freePtr)
{
const char *tstr; /* Pointer into str */
Var *v; /* Variable in invocation */
@@ -3689,12 +3705,11 @@ Var_Parse(const char *str, GNode *ctxt, Boolean errnum, int *lengthPtr,
if (*tstr == '$') {
int rlen;
void *freeIt;
- char *rval = Var_Parse(tstr, ctxt, errnum, &rlen, &freeIt);
+ char *rval = Var_Parse(tstr, ctxt, errnum, wantit, &rlen, &freeIt);
if (rval != NULL) {
Buf_AddBytes(&buf, strlen(rval), rval);
}
- if (freeIt)
- free(freeIt);
+ free(freeIt);
tstr += rlen - 1;
}
else
@@ -3837,7 +3852,7 @@ Var_Parse(const char *str, GNode *ctxt, Boolean errnum, int *lengthPtr,
*/
nstr = Buf_GetAll(&v->val, NULL);
if (strchr(nstr, '$') != NULL) {
- nstr = Var_Subst(NULL, nstr, ctxt, errnum);
+ nstr = Var_Subst(NULL, nstr, ctxt, errnum, wantit);
*freePtr = nstr;
}
@@ -3850,7 +3865,7 @@ Var_Parse(const char *str, GNode *ctxt, Boolean errnum, int *lengthPtr,
extraFree = NULL;
if (extramodifiers != NULL) {
nstr = ApplyModifiers(nstr, extramodifiers, '(', ')',
- v, ctxt, errnum, &used, &extraFree);
+ v, ctxt, errnum, wantit, &used, &extraFree);
}
if (haveModifier) {
@@ -3858,11 +3873,9 @@ Var_Parse(const char *str, GNode *ctxt, Boolean errnum, int *lengthPtr,
tstr++;
nstr = ApplyModifiers(nstr, tstr, startc, endc,
- v, ctxt, errnum, &used, freePtr);
+ v, ctxt, errnum, wantit, &used, freePtr);
tstr += used;
- if (extraFree) {
- free(extraFree);
- }
+ free(extraFree);
} else {
*freePtr = extraFree;
}
@@ -3924,6 +3937,7 @@ Var_Parse(const char *str, GNode *ctxt, Boolean errnum, int *lengthPtr,
* str the string which to substitute
* ctxt the context wherein to find variables
* undefErr TRUE if undefineds are an error
+ * wantit TRUE if we actually want the result
*
* Results:
* The resulting string.
@@ -3933,7 +3947,8 @@ Var_Parse(const char *str, GNode *ctxt, Boolean errnum, int *lengthPtr,
*-----------------------------------------------------------------------
*/
char *
-Var_Subst(const char *var, const char *str, GNode *ctxt, Boolean undefErr)
+Var_Subst(const char *var, const char *str, GNode *ctxt,
+ Boolean undefErr, Boolean wantit)
{
Buffer buf; /* Buffer for forming things */
char *val; /* Value to substitute for a variable */
@@ -4031,7 +4046,7 @@ Var_Subst(const char *var, const char *str, GNode *ctxt, Boolean undefErr)
continue;
}
- val = Var_Parse(str, ctxt, undefErr, &length, &freeIt);
+ val = Var_Parse(str, ctxt, undefErr, wantit, &length, &freeIt);
/*
* When we come down here, val should either point to the
@@ -4079,10 +4094,8 @@ Var_Subst(const char *var, const char *str, GNode *ctxt, Boolean undefErr)
Buf_AddBytes(&buf, length, val);
trailingBslash = length > 0 && val[length - 1] == '\\';
}
- if (freeIt) {
- free(freeIt);
- freeIt = NULL;
- }
+ free(freeIt);
+ freeIt = NULL;
}
}
diff --git a/contrib/gdb/gdb/arm-tdep.c b/contrib/gdb/gdb/arm-tdep.c
index 128219f..cec9061 100644
--- a/contrib/gdb/gdb/arm-tdep.c
+++ b/contrib/gdb/gdb/arm-tdep.c
@@ -2580,6 +2580,21 @@ arm_elf_osabi_sniffer (bfd *abfd)
osabi = GDB_OSABI_ARM_EABI_V2;
break;
+ case EF_ARM_EABI_VER3:
+ case EF_ARM_EABI_VER4:
+ case EF_ARM_EABI_VER5:
+ /*
+ * GDB does not support these EABI versions. Fallback
+ * to the highest known to make the KGDB working with
+ * kernel ELF image.
+ */
+ osabi = GDB_OSABI_ARM_EABI_V2;
+ printf ("\n%s:%d "
+ "arm_elf_osabi_sniffer: Unsupported ARM EABI "
+ "version 0x%x, falling back to 0x%x\n",
+ __FILE__, __LINE__, eflags, EF_ARM_EABI_VER2);
+ break;
+
case EF_ARM_EABI_UNKNOWN:
/* Assume GNU tools. */
osabi = GDB_OSABI_ARM_APCS;
diff --git a/contrib/groff/tmac/doc-syms b/contrib/groff/tmac/doc-syms
index 4e736cb..e89b658 100644
--- a/contrib/groff/tmac/doc-syms
+++ b/contrib/groff/tmac/doc-syms
@@ -780,7 +780,6 @@
.ds doc-str-Lb-libfetch File Transfer Library for URLs (libfetch, \-lfetch)
.ds doc-str-Lb-libform Curses Form Library (libform, \-lform)
.ds doc-str-Lb-libgeom Userland API Library for kernel GEOM subsystem (libgeom, \-lgeom)
-.ds doc-str-Lb-libgpib General-Purpose Instrument Bus (GPIB) library (libgpib, \-lgpib)
.ds doc-str-Lb-libi386 i386 Architecture Library (libi386, \-li386)
.ds doc-str-Lb-libintl Internationalized Message Handling Library (libintl, \-lintl)
.ds doc-str-Lb-libipsec IPsec Policy Control Library (libipsec, \-lipsec)
diff --git a/contrib/groff/tmac/groff_mdoc.man b/contrib/groff/tmac/groff_mdoc.man
index c3ad6b4..b9d0c36 100644
--- a/contrib/groff/tmac/groff_mdoc.man
+++ b/contrib/groff/tmac/groff_mdoc.man
@@ -1732,8 +1732,6 @@ and their results are:
.Lb libform
.It Li libgeom
.Lb libgeom
-.It Li libgpib
-.Lb libgpib
.It Li libi386
.Lb libi386
.It Li libintl
diff --git a/contrib/jemalloc/ChangeLog b/contrib/jemalloc/ChangeLog
index 58e4462..8ed42cb 100644
--- a/contrib/jemalloc/ChangeLog
+++ b/contrib/jemalloc/ChangeLog
@@ -4,6 +4,32 @@ brevity. Much more detail can be found in the git revision history:
https://github.com/jemalloc/jemalloc
+* 4.0.4 (October 24, 2015)
+
+ This bugfix release fixes another xallocx() regression. No other regressions
+ have come to light in over a month, so this is likely a good starting point
+ for people who prefer to wait for "dot one" releases with all the major issues
+ shaken out.
+
+ Bug fixes:
+ - Fix xallocx(..., MALLOCX_ZERO to zero the last full trailing page of large
+ allocations that have been randomly assigned an offset of 0 when
+ --enable-cache-oblivious configure option is enabled.
+
+* 4.0.3 (September 24, 2015)
+
+ This bugfix release continues the trend of xallocx() and heap profiling fixes.
+
+ Bug fixes:
+ - Fix xallocx(..., MALLOCX_ZERO) to zero all trailing bytes of large
+ allocations when --enable-cache-oblivious configure option is enabled.
+ - Fix xallocx(..., MALLOCX_ZERO) to zero trailing bytes of huge allocations
+ when resizing from/to a size class that is not a multiple of the chunk size.
+ - Fix prof_tctx_dump_iter() to filter out nodes that were created after heap
+ profile dumping started.
+ - Work around a potentially bad thread-specific data initialization
+ interaction with NPTL (glibc's pthreads implementation).
+
* 4.0.2 (September 21, 2015)
This bugfix release addresses a few bugs specific to heap profiling.
diff --git a/contrib/jemalloc/FREEBSD-diffs b/contrib/jemalloc/FREEBSD-diffs
index 25e823c..5700c51 100644
--- a/contrib/jemalloc/FREEBSD-diffs
+++ b/contrib/jemalloc/FREEBSD-diffs
@@ -1,5 +1,5 @@
diff --git a/doc/jemalloc.xml.in b/doc/jemalloc.xml.in
-index 8fc774b..fdbef95 100644
+index 26a5e14..2a801b7 100644
--- a/doc/jemalloc.xml.in
+++ b/doc/jemalloc.xml.in
@@ -53,11 +53,23 @@
@@ -47,7 +47,7 @@ index 8fc774b..fdbef95 100644
+ </refsect1>
</refentry>
diff --git a/include/jemalloc/internal/jemalloc_internal.h.in b/include/jemalloc/internal/jemalloc_internal.h.in
-index 8536a3e..0c2a81f 100644
+index 654cd08..ad5382d 100644
--- a/include/jemalloc/internal/jemalloc_internal.h.in
+++ b/include/jemalloc/internal/jemalloc_internal.h.in
@@ -8,6 +8,9 @@
diff --git a/contrib/jemalloc/VERSION b/contrib/jemalloc/VERSION
index 210a4fe..f9b6da9 100644
--- a/contrib/jemalloc/VERSION
+++ b/contrib/jemalloc/VERSION
@@ -1 +1 @@
-4.0.2-0-g486d249fb4715fd3de679b6c2a04f7e657883111
+4.0.4-0-g91010a9e2ebfc84b1ac1ed7fdde3bfed4f65f180
diff --git a/contrib/jemalloc/doc/jemalloc.3 b/contrib/jemalloc/doc/jemalloc.3
index 2582062..57e163d 100644
--- a/contrib/jemalloc/doc/jemalloc.3
+++ b/contrib/jemalloc/doc/jemalloc.3
@@ -2,12 +2,12 @@
.\" Title: JEMALLOC
.\" Author: Jason Evans
.\" Generator: DocBook XSL Stylesheets v1.76.1 <http://docbook.sf.net/>
-.\" Date: 09/21/2015
+.\" Date: 10/24/2015
.\" Manual: User Manual
-.\" Source: jemalloc 4.0.2-0-g486d249fb4715fd3de679b6c2a04f7e657883111
+.\" Source: jemalloc 4.0.4-0-g91010a9e2ebfc84b1ac1ed7fdde3bfed4f65f180
.\" Language: English
.\"
-.TH "JEMALLOC" "3" "09/21/2015" "jemalloc 4.0.2-0-g486d249fb471" "User Manual"
+.TH "JEMALLOC" "3" "10/24/2015" "jemalloc 4.0.4-0-g91010a9e2ebf" "User Manual"
.\" -----------------------------------------------------------------
.\" * Define some portability stuff
.\" -----------------------------------------------------------------
@@ -31,7 +31,7 @@
jemalloc \- general purpose memory allocation functions
.SH "LIBRARY"
.PP
-This manual describes jemalloc 4\&.0\&.2\-0\-g486d249fb4715fd3de679b6c2a04f7e657883111\&. More information can be found at the
+This manual describes jemalloc 4\&.0\&.4\-0\-g91010a9e2ebfc84b1ac1ed7fdde3bfed4f65f180\&. More information can be found at the
\m[blue]\fBjemalloc website\fR\m[]\&\s-2\u[1]\d\s+2\&.
.PP
The following configuration options are enabled in libc\*(Aqs built\-in jemalloc:
@@ -1041,7 +1041,7 @@ Flush calling thread\*(Aqs thread\-specific cache (tcache)\&. This interface rel
.PP
"thread\&.prof\&.name" (\fBconst char *\fR) r\- or \-w [\fB\-\-enable\-prof\fR]
.RS 4
-Get/set the descriptive name associated with the calling thread in memory profile dumps\&. An internal copy of the name string is created, so the input string need not be maintained after this interface completes execution\&. The output string of this interface should be copied for non\-ephemeral uses, because multiple implementation details can cause asynchronous string deallocation\&. Furthermore, each invocation of this interface can only read or write; simultaneous read/write is not supported due to string lifetime limitations\&. The name string must nil\-terminated and comprised only of characters in the sets recognized by
+Get/set the descriptive name associated with the calling thread in memory profile dumps\&. An internal copy of the name string is created, so the input string need not be maintained after this interface completes execution\&. The output string of this interface should be copied for non\-ephemeral uses, because multiple implementation details can cause asynchronous string deallocation\&. Furthermore, each invocation of this interface can only read or write; simultaneous read/write is not supported due to string lifetime limitations\&. The name string must be nil\-terminated and comprised only of characters in the sets recognized by
\fBisgraph\fR(3)
and
\fBisblank\fR(3)\&.
diff --git a/contrib/jemalloc/include/jemalloc/internal/jemalloc_internal.h b/contrib/jemalloc/include/jemalloc/internal/jemalloc_internal.h
index 6c3cc18..fe0160a 100644
--- a/contrib/jemalloc/include/jemalloc/internal/jemalloc_internal.h
+++ b/contrib/jemalloc/include/jemalloc/internal/jemalloc_internal.h
@@ -314,6 +314,10 @@ typedef unsigned szind_t;
#define PAGE ((size_t)(1U << LG_PAGE))
#define PAGE_MASK ((size_t)(PAGE - 1))
+/* Return the page base address for the page containing address a. */
+#define PAGE_ADDR2BASE(a) \
+ ((void *)((uintptr_t)(a) & ~PAGE_MASK))
+
/* Return the smallest pagesize multiple that is >= s. */
#define PAGE_CEILING(s) \
(((s) + PAGE_MASK) & ~PAGE_MASK)
diff --git a/contrib/jemalloc/include/jemalloc/jemalloc.h b/contrib/jemalloc/include/jemalloc/jemalloc.h
index 95a3a51..d632d1e 100644
--- a/contrib/jemalloc/include/jemalloc/jemalloc.h
+++ b/contrib/jemalloc/include/jemalloc/jemalloc.h
@@ -79,12 +79,12 @@ extern "C" {
#include <limits.h>
#include <strings.h>
-#define JEMALLOC_VERSION "4.0.2-0-g486d249fb4715fd3de679b6c2a04f7e657883111"
+#define JEMALLOC_VERSION "4.0.4-0-g91010a9e2ebfc84b1ac1ed7fdde3bfed4f65f180"
#define JEMALLOC_VERSION_MAJOR 4
#define JEMALLOC_VERSION_MINOR 0
-#define JEMALLOC_VERSION_BUGFIX 2
+#define JEMALLOC_VERSION_BUGFIX 4
#define JEMALLOC_VERSION_NREV 0
-#define JEMALLOC_VERSION_GID "486d249fb4715fd3de679b6c2a04f7e657883111"
+#define JEMALLOC_VERSION_GID "91010a9e2ebfc84b1ac1ed7fdde3bfed4f65f180"
# define MALLOCX_LG_ALIGN(la) (la)
# if LG_SIZEOF_PTR == 2
diff --git a/contrib/jemalloc/src/arena.c b/contrib/jemalloc/src/arena.c
index 7f4a6ca..43733cc 100644
--- a/contrib/jemalloc/src/arena.c
+++ b/contrib/jemalloc/src/arena.c
@@ -2679,6 +2679,22 @@ arena_ralloc_large_grow(arena_t *arena, arena_chunk_t *chunk, void *ptr,
if (arena_run_split_large(arena, run, splitsize, zero))
goto label_fail;
+ if (config_cache_oblivious && zero) {
+ /*
+ * Zero the trailing bytes of the original allocation's
+ * last page, since they are in an indeterminate state.
+ * There will always be trailing bytes, because ptr's
+ * offset from the beginning of the run is a multiple of
+ * CACHELINE in [0 .. PAGE).
+ */
+ void *zbase = (void *)((uintptr_t)ptr + oldsize);
+ void *zpast = PAGE_ADDR2BASE((void *)((uintptr_t)zbase +
+ PAGE));
+ size_t nzero = (uintptr_t)zpast - (uintptr_t)zbase;
+ assert(nzero > 0);
+ memset(zbase, 0, nzero);
+ }
+
size = oldsize + splitsize;
npages = (size + large_pad) >> LG_PAGE;
diff --git a/contrib/jemalloc/src/huge.c b/contrib/jemalloc/src/huge.c
index f8778db..1e9a665 100644
--- a/contrib/jemalloc/src/huge.c
+++ b/contrib/jemalloc/src/huge.c
@@ -133,7 +133,7 @@ huge_ralloc_no_move_similar(void *ptr, size_t oldsize, size_t usize_min,
extent_node_t *node;
arena_t *arena;
chunk_hooks_t chunk_hooks = CHUNK_HOOKS_INITIALIZER;
- bool zeroed;
+ bool pre_zeroed, post_zeroed;
/* Increase usize to incorporate extra. */
for (usize = usize_min; usize < usize_max && (usize_next = s2u(usize+1))
@@ -145,26 +145,27 @@ huge_ralloc_no_move_similar(void *ptr, size_t oldsize, size_t usize_min,
node = huge_node_get(ptr);
arena = extent_node_arena_get(node);
+ pre_zeroed = extent_node_zeroed_get(node);
/* Fill if necessary (shrinking). */
if (oldsize > usize) {
size_t sdiff = oldsize - usize;
if (config_fill && unlikely(opt_junk_free)) {
memset((void *)((uintptr_t)ptr + usize), 0x5a, sdiff);
- zeroed = false;
+ post_zeroed = false;
} else {
- zeroed = !chunk_purge_wrapper(arena, &chunk_hooks, ptr,
- CHUNK_CEILING(oldsize), usize, sdiff);
+ post_zeroed = !chunk_purge_wrapper(arena, &chunk_hooks,
+ ptr, CHUNK_CEILING(oldsize), usize, sdiff);
}
} else
- zeroed = true;
+ post_zeroed = pre_zeroed;
malloc_mutex_lock(&arena->huge_mtx);
/* Update the size of the huge allocation. */
assert(extent_node_size_get(node) != usize);
extent_node_size_set(node, usize);
- /* Clear node's zeroed field if zeroing failed above. */
- extent_node_zeroed_set(node, extent_node_zeroed_get(node) && zeroed);
+ /* Update zeroed. */
+ extent_node_zeroed_set(node, post_zeroed);
malloc_mutex_unlock(&arena->huge_mtx);
arena_chunk_ralloc_huge_similar(arena, ptr, oldsize, usize);
@@ -172,7 +173,7 @@ huge_ralloc_no_move_similar(void *ptr, size_t oldsize, size_t usize_min,
/* Fill if necessary (growing). */
if (oldsize < usize) {
if (zero || (config_fill && unlikely(opt_zero))) {
- if (!zeroed) {
+ if (!pre_zeroed) {
memset((void *)((uintptr_t)ptr + oldsize), 0,
usize - oldsize);
}
@@ -190,10 +191,11 @@ huge_ralloc_no_move_shrink(void *ptr, size_t oldsize, size_t usize)
arena_t *arena;
chunk_hooks_t chunk_hooks;
size_t cdiff;
- bool zeroed;
+ bool pre_zeroed, post_zeroed;
node = huge_node_get(ptr);
arena = extent_node_arena_get(node);
+ pre_zeroed = extent_node_zeroed_get(node);
chunk_hooks = chunk_hooks_get(arena);
assert(oldsize > usize);
@@ -209,21 +211,21 @@ huge_ralloc_no_move_shrink(void *ptr, size_t oldsize, size_t usize)
if (config_fill && unlikely(opt_junk_free)) {
huge_dalloc_junk((void *)((uintptr_t)ptr + usize),
sdiff);
- zeroed = false;
+ post_zeroed = false;
} else {
- zeroed = !chunk_purge_wrapper(arena, &chunk_hooks,
+ post_zeroed = !chunk_purge_wrapper(arena, &chunk_hooks,
CHUNK_ADDR2BASE((uintptr_t)ptr + usize),
CHUNK_CEILING(oldsize),
CHUNK_ADDR2OFFSET((uintptr_t)ptr + usize), sdiff);
}
} else
- zeroed = true;
+ post_zeroed = pre_zeroed;
malloc_mutex_lock(&arena->huge_mtx);
/* Update the size of the huge allocation. */
extent_node_size_set(node, usize);
- /* Clear node's zeroed field if zeroing failed above. */
- extent_node_zeroed_set(node, extent_node_zeroed_get(node) && zeroed);
+ /* Update zeroed. */
+ extent_node_zeroed_set(node, post_zeroed);
malloc_mutex_unlock(&arena->huge_mtx);
/* Zap the excess chunks. */
diff --git a/contrib/jemalloc/src/prof.c b/contrib/jemalloc/src/prof.c
index 0a08062..5d2b959 100644
--- a/contrib/jemalloc/src/prof.c
+++ b/contrib/jemalloc/src/prof.c
@@ -1102,11 +1102,23 @@ prof_tctx_dump_iter(prof_tctx_tree_t *tctxs, prof_tctx_t *tctx, void *arg)
{
bool propagate_err = *(bool *)arg;
- if (prof_dump_printf(propagate_err,
- " t%"FMTu64": %"FMTu64": %"FMTu64" [%"FMTu64": %"FMTu64"]\n",
- tctx->thr_uid, tctx->dump_cnts.curobjs, tctx->dump_cnts.curbytes,
- tctx->dump_cnts.accumobjs, tctx->dump_cnts.accumbytes))
- return (tctx);
+ switch (tctx->state) {
+ case prof_tctx_state_initializing:
+ case prof_tctx_state_nominal:
+ /* Not captured by this dump. */
+ break;
+ case prof_tctx_state_dumping:
+ case prof_tctx_state_purgatory:
+ if (prof_dump_printf(propagate_err,
+ " t%"FMTu64": %"FMTu64": %"FMTu64" [%"FMTu64": "
+ "%"FMTu64"]\n", tctx->thr_uid, tctx->dump_cnts.curobjs,
+ tctx->dump_cnts.curbytes, tctx->dump_cnts.accumobjs,
+ tctx->dump_cnts.accumbytes))
+ return (tctx);
+ break;
+ default:
+ not_reached();
+ }
return (NULL);
}
diff --git a/contrib/jemalloc/src/tsd.c b/contrib/jemalloc/src/tsd.c
index 2100833..9ffe9af 100644
--- a/contrib/jemalloc/src/tsd.c
+++ b/contrib/jemalloc/src/tsd.c
@@ -73,6 +73,9 @@ tsd_cleanup(void *arg)
tsd_t *tsd = (tsd_t *)arg;
switch (tsd->state) {
+ case tsd_state_uninitialized:
+ /* Do nothing. */
+ break;
case tsd_state_nominal:
#define O(n, t) \
n##_cleanup(tsd);
diff --git a/contrib/libucl/CMakeLists.txt b/contrib/libucl/CMakeLists.txt
new file mode 100644
index 0000000..ae28a89
--- /dev/null
+++ b/contrib/libucl/CMakeLists.txt
@@ -0,0 +1,260 @@
+PROJECT(libucl C)
+CMAKE_MINIMUM_REQUIRED(VERSION 2.6.0 FATAL_ERROR)
+
+SET(LIBUCL_VERSION_MAJOR 0)
+SET(LIBUCL_VERSION_MINOR 5)
+SET(LIBUCL_VERSION_PATCH 0)
+
+SET(LIBUCL_VERSION
+ "${LIBUCL_VERSION_MAJOR}.${LIBUCL_VERSION_MINOR}.${LIBUCL_VERSION_PATCH}")
+
+INCLUDE(CheckCCompilerFlag)
+INCLUDE(FindOpenSSL)
+
+OPTION(ENABLE_URL_INCLUDE "Enable urls in ucl includes (requires libcurl or libfetch) [default: OFF]" OFF)
+OPTION(ENABLE_URL_SIGN "Enable signatures check in ucl includes (requires openssl) [default: OFF]" OFF)
+OPTION(BUILD_SHARED_LIBS "Build Shared Libraries [default: OFF]" OFF)
+OPTION(ENABLE_LUA "Enable lua support [default: OFF]" OFF)
+OPTION(ENABLE_LUAJIT "Enable luajit support [default: OFF]" OFF)
+
+# Find lua installation
+MACRO(FindLua)
+ # Find lua libraries
+ UNSET(LUA_INCLUDE_DIR CACHE)
+ UNSET(LUA_LIBRARY CACHE)
+ CMAKE_PARSE_ARGUMENTS(LUA "" "VERSION_MAJOR;VERSION_MINOR;ROOT" "" ${ARGN})
+
+ IF(NOT LUA_VERSION_MAJOR OR NOT LUA_VERSION_MINOR)
+ MESSAGE(FATAL_ERROR "Invalid FindLua invocation: ${ARGN}")
+ ENDIF()
+
+ IF(ENABLE_LUAJIT MATCHES "ON")
+ MESSAGE(STATUS "Check for luajit ${LUA_VERSION_MAJOR}.${LUA_VERSION_MINOR}")
+ FIND_PATH(LUA_INCLUDE_DIR luajit.h
+ HINTS
+ "${RSPAMD_SEARCH_PATH}" "${LUA_ROOT}"
+ $ENV{LUA_DIR}
+ PATH_SUFFIXES "include/luajit-2.0"
+ "include/luajit${LUA_VERSION_MAJOR}${LUA_VERSION_MINOR}"
+ "include/luajit${LUA_VERSION_MAJOR}.${LUA_VERSION_MINOR}"
+ "include/luajit-${LUA_VERSION_MAJOR}.${LUA_VERSION_MINOR}"
+ "include/luajit"
+ "include/lua${LUA_VERSION_MAJOR}${LUA_VERSION_MINOR}"
+ "include/lua${LUA_VERSION_MAJOR}.${LUA_VERSION_MINOR}"
+ "include/lua-${LUA_VERSION_MAJOR}.${LUA_VERSION_MINOR}"
+ include/lua include
+ PATHS ${RSPAMD_DEFAULT_INCLUDE_PATHS}
+ )
+ FIND_LIBRARY(LUA_LIBRARY
+ NAMES luajit
+ "luajit-2.0"
+ "luajit2.0"
+ "luajit${LUA_VERSION_MAJOR}${LUA_VERSION_MINOR}"
+ "luajit${LUA_VERSION_MAJOR}.${LUA_VERSION_MINOR}"
+ "luajit-${LUA_VERSION_MAJOR}.${LUA_VERSION_MINOR}"
+ HINTS
+ "${RSPAMD_SEARCH_PATH}" "${LUA_ROOT}"
+ $ENV{LUA_DIR}
+ PATH_SUFFIXES lib64 lib
+ PATHS ${RSPAMD_DEFAULT_LIBRARY_PATHS}
+ DOC "Lua library"
+ )
+
+ IF(NOT LUA_LIBRARY OR NOT LUA_INCLUDE_DIR)
+ MESSAGE(STATUS "Fallback from luajit to plain lua")
+ SET(ENABLE_LUAJIT "OFF")
+ MESSAGE(STATUS "Check for lua ${LUA_VERSION_MAJOR}.${LUA_VERSION_MINOR}")
+ FIND_PATH(LUA_INCLUDE_DIR lua.h
+ HINTS
+ "${RSPAMD_SEARCH_PATH}" "${LUA_ROOT}"
+ $ENV{LUA_DIR}
+ PATH_SUFFIXES "include/lua${LUA_VERSION_MAJOR}${LUA_VERSION_MINOR}"
+ "include/lua${LUA_VERSION_MAJOR}.${LUA_VERSION_MINOR}"
+ "include/lua-${LUA_VERSION_MAJOR}.${LUA_VERSION_MINOR}"
+ include/lua include
+ PATHS ${RSPAMD_DEFAULT_INCLUDE_PATHS}
+ )
+ FIND_LIBRARY(LUA_LIBRARY
+ NAMES lua
+ "lua${LUA_VERSION_MAJOR}${LUA_VERSION_MINOR}"
+ "lua${LUA_VERSION_MAJOR}.${LUA_VERSION_MINOR}"
+ "lua-${LUA_VERSION_MAJOR}.${LUA_VERSION_MINOR}"
+ HINTS
+ "${RSPAMD_SEARCH_PATH}" "${LUA_ROOT}"
+ $ENV{LUA_DIR}
+ PATH_SUFFIXES lib64 lib
+ PATHS ${RSPAMD_DEFAULT_LIBRARY_PATHS}
+ DOC "Lua library"
+ )
+ ENDIF()
+ ELSE(ENABLE_LUAJIT MATCHES "ON")
+ MESSAGE(STATUS "Check for lua ${LUA_VERSION_MAJOR}.${LUA_VERSION_MINOR}")
+ FIND_PATH(LUA_INCLUDE_DIR lua.h
+ HINTS
+ "${RSPAMD_SEARCH_PATH}" "${LUA_ROOT}"
+ $ENV{LUA_DIR}
+ PATH_SUFFIXES "include/lua${LUA_VERSION_MAJOR}${LUA_VERSION_MINOR}"
+ "include/lua${LUA_VERSION_MAJOR}.${LUA_VERSION_MINOR}"
+ "include/lua-${LUA_VERSION_MAJOR}.${LUA_VERSION_MINOR}"
+ include/lua include
+ PATHS ${RSPAMD_DEFAULT_INCLUDE_PATHS}
+ )
+ FIND_LIBRARY(LUA_LIBRARY
+ NAMES lua
+ "lua${LUA_VERSION_MAJOR}${LUA_VERSION_MINOR}"
+ "lua${LUA_VERSION_MAJOR}.${LUA_VERSION_MINOR}"
+ "lua-${LUA_VERSION_MAJOR}.${LUA_VERSION_MINOR}"
+ HINTS
+ "${RSPAMD_SEARCH_PATH}" "${LUA_ROOT}"
+ $ENV{LUA_DIR}
+ PATH_SUFFIXES lib64 lib
+ PATHS ${RSPAMD_DEFAULT_LIBRARY_PATHS}
+ DOC "Lua library"
+ )
+ ENDIF(ENABLE_LUAJIT MATCHES "ON")
+
+ IF(LUA_LIBRARY AND LUA_INCLUDE_DIR)
+ SET(LUA_FOUND 1)
+ IF(NOT LUA_VERSION_MAJOR OR NOT LUA_VERSION_MINOR)
+ SET(LUA_VERSION_MAJOR ${LUA_VERSION_MAJOR})
+ SET(LUA_VERSION_MINOR ${LUA_VERSION_MINOR})
+ ENDIF(NOT LUA_VERSION_MAJOR OR NOT LUA_VERSION_MINOR)
+ IF(ENABLE_LUAJIT MATCHES "ON")
+ MESSAGE(STATUS "Found luajit ${LUA_VERSION_MAJOR}.${LUA_VERSION_MINOR}")
+ ELSE(ENABLE_LUAJIT MATCHES "ON")
+ MESSAGE(STATUS "Found lua ${LUA_VERSION_MAJOR}.${LUA_VERSION_MINOR}")
+ ENDIF(ENABLE_LUAJIT MATCHES "ON")
+ ENDIF(LUA_LIBRARY AND LUA_INCLUDE_DIR)
+ENDMACRO()
+
+IF(CMAKE_SYSTEM_NAME STREQUAL "Linux")
+ LIST(APPEND CMAKE_REQUIRED_LIBRARIES rt)
+ENDIF(CMAKE_SYSTEM_NAME STREQUAL "Linux")
+
+IF(ENABLE_URL_INCLUDE MATCHES "ON")
+ FIND_LIBRARY(LIBFETCH_LIBRARY NAMES fetch PATHS PATH_SUFFIXES lib64 lib
+ PATHS
+ ~/Library/Frameworks
+ /Library/Frameworks
+ /usr/local
+ /usr
+ /sw
+ /opt/local
+ /opt/csw
+ /opt
+ DOC "Path where the libfetch library can be found")
+ IF(LIBFETCH_LIBRARY)
+ FIND_FILE(HAVE_FETCH_H NAMES fetch.h PATHS /usr/include
+ /opt/include
+ /usr/local/include
+ DOC "Path to libfetch header")
+ ELSE(LIBFETCH_LIBRARY)
+ # Try to find libcurl
+ ProcessPackage(CURL libcurl)
+ IF(NOT CURL_FOUND)
+ MESSAGE(WARNING "Neither libcurl nor libfetch were found, no support of URL includes in configuration")
+ ENDIF(NOT CURL_FOUND)
+ ENDIF(LIBFETCH_LIBRARY)
+ENDIF(ENABLE_URL_INCLUDE MATCHES "ON")
+
+SET(CMAKE_C_WARN_FLAGS "")
+CHECK_C_COMPILER_FLAG(-Wall SUPPORT_WALL)
+CHECK_C_COMPILER_FLAG(-W SUPPORT_W)
+CHECK_C_COMPILER_FLAG(-Wno-unused-parameter SUPPORT_WPARAM)
+CHECK_C_COMPILER_FLAG(-Wno-pointer-sign SUPPORT_WPOINTER_SIGN)
+CHECK_C_COMPILER_FLAG(-Wstrict-prototypes SUPPORT_WSTRICT_PROTOTYPES)
+IF(NOT "${CMAKE_C_COMPILER_ID}" MATCHES SunPro)
+ CHECK_C_COMPILER_FLAG("-std=c99" SUPPORT_STD_FLAG)
+ENDIF(NOT "${CMAKE_C_COMPILER_ID}" MATCHES SunPro)
+IF(SUPPORT_W)
+ SET(CMAKE_C_WARN_FLAGS "${CMAKE_C_WARN_FLAGS} -W")
+ENDIF(SUPPORT_W)
+IF(SUPPORT_WALL)
+ SET(CMAKE_C_WARN_FLAGS "${CMAKE_C_WARN_FLAGS} -Wall")
+ENDIF(SUPPORT_WALL)
+IF(SUPPORT_WPARAM)
+ SET(CMAKE_C_WARN_FLAGS "${CMAKE_C_WARN_FLAGS} -Wno-unused-parameter")
+ENDIF(SUPPORT_WPARAM)
+IF(SUPPORT_WPOINTER_SIGN)
+ SET(CMAKE_C_WARN_FLAGS "${CMAKE_C_WARN_FLAGS} -Wno-pointer-sign")
+ENDIF(SUPPORT_WPOINTER_SIGN)
+IF(SUPPORT_WSTRICT_PROTOTYPES)
+ SET(CMAKE_C_WARN_FLAGS "${CMAKE_C_WARN_FLAGS} -Wstrict-prototypes")
+ENDIF(SUPPORT_WSTRICT_PROTOTYPES)
+IF(SUPPORT_STD_FLAG)
+ SET(CMAKE_C_WARN_FLAGS "${CMAKE_C_WARN_FLAGS} -std=c99")
+ENDIF(SUPPORT_STD_FLAG)
+
+IF(ENABLE_URL_SIGN MATCHES "ON")
+ IF(OPENSSL_FOUND)
+ SET(HAVE_OPENSSL 1)
+ INCLUDE_DIRECTORIES("${OPENSSL_INCLUDE_DIR}")
+ ENDIF(OPENSSL_FOUND)
+ENDIF(ENABLE_URL_SIGN MATCHES "ON")
+
+INCLUDE_DIRECTORIES("src")
+INCLUDE_DIRECTORIES("include")
+INCLUDE_DIRECTORIES("uthash")
+INCLUDE_DIRECTORIES("klib")
+
+SET(UCLSRC src/ucl_util.c
+ src/ucl_parser.c
+ src/ucl_emitter.c
+ src/ucl_emitter_streamline.c
+ src/ucl_emitter_utils.c
+ src/ucl_hash.c
+ src/ucl_schema.c
+ src/ucl_msgpack.c
+ src/ucl_sexp.c
+ src/xxhash.c)
+
+
+SET (LIB_TYPE STATIC)
+IF (BUILD_SHARED_LIBS)
+ SET (LIB_TYPE SHARED)
+ENDIF (BUILD_SHARED_LIBS)
+ADD_LIBRARY(ucl ${LIB_TYPE} ${UCLSRC})
+SET_TARGET_PROPERTIES(ucl PROPERTIES VERSION ${LIBUCL_VERSION} SOVERSION ${LIBUCL_VERSION_MAJOR})
+
+IF(ENABLE_LUA MATCHES "ON")
+ IF(ENABLE_LUAJIT MATCHES "ON")
+ FindLua(VERSION_MAJOR "5" VERSION_MINOR "1" ROOT "${LUA_ROOT}")
+ IF(NOT LUA_FOUND)
+ MESSAGE(FATAL_ERROR "Lua not found, lua support is required")
+ ELSE(NOT LUA_FOUND)
+ INCLUDE_DIRECTORIES("${LUA_INCLUDE_DIR}")
+ ENDIF(NOT LUA_FOUND)
+ ELSE(ENABLE_LUAJIT MATCHES "ON")
+ FindLua(VERSION_MAJOR "5" VERSION_MINOR "2" ROOT "${LUA_ROOT}")
+ IF(NOT LUA_FOUND)
+ FindLua(VERSION_MAJOR "5" VERSION_MINOR "1" ROOT "${LUA_ROOT}")
+ ENDIF(NOT LUA_FOUND)
+ IF(NOT LUA_FOUND)
+ MESSAGE(FATAL_ERROR "Lua not found, lua support is required")
+ ELSE(NOT LUA_FOUND)
+ INCLUDE_DIRECTORIES("${LUA_INCLUDE_DIR}")
+ ENDIF(NOT LUA_FOUND)
+ ENDIF(ENABLE_LUAJIT MATCHES "ON")
+ SET(UCL_LUA_SRC lua/lua_ucl.c)
+ ADD_LIBRARY(lua-ucl ${LIB_TYPE} ${UCL_LUA_SRC})
+ IF(ENABLE_LUAJIT MATCHES "ON")
+ TARGET_LINK_LIBRARIES(lua-ucl "${LUAJIT_LIBRARY}")
+ ELSE(ENABLE_LUAJIT MATCHES "ON")
+ TARGET_LINK_LIBRARIES(lua-ucl "${LUA_LIBRARY}")
+ ENDIF(ENABLE_LUAJIT MATCHES "ON")
+ TARGET_LINK_LIBRARIES(lua-ucl ucl)
+ SET_TARGET_PROPERTIES(lua-ucl PROPERTIES VERSION ${LIBUCL_VERSION} SOVERSION ${LIBUCL_VERSION_MAJOR})
+ENDIF()
+
+IF(HAVE_FETCH_H)
+ TARGET_LINK_LIBRARIES(ucl fetch)
+ELSE(HAVE_FETCH_H)
+ IF(CURL_FOUND)
+ TARGET_LINK_LIBRARIES(ucl ${CURL_LIBRARIES})
+ ENDIF(CURL_FOUND)
+ENDIF(HAVE_FETCH_H)
+IF(ENABLE_URL_SIGN MATCHES "ON")
+ IF(OPENSSL_FOUND)
+ TARGET_LINK_LIBRARIES(ucl ${OPENSSL_LIBRARIES})
+ ENDIF(OPENSSL_FOUND)
+ENDIF(ENABLE_URL_SIGN MATCHES "ON")
diff --git a/contrib/libucl/ChangeLog.md b/contrib/libucl/ChangeLog.md
index 093ff97..f714f40 100644
--- a/contrib/libucl/ChangeLog.md
+++ b/contrib/libucl/ChangeLog.md
@@ -32,3 +32,8 @@
### Libucl 0.7.2
- Fixed serious bugs in schema and arrays iteration
+
+### Libucl 0.7.3
+
+- Fixed a bug with macroes that come after an empty object
+- Fixed a bug in include processing when an incorrect variable has been destroyed (use-after-free)
diff --git a/contrib/libucl/README.md b/contrib/libucl/README.md
index 797278b..a742db1 100644
--- a/contrib/libucl/README.md
+++ b/contrib/libucl/README.md
@@ -21,7 +21,7 @@
- [Performance](#performance)
- [Conclusion](#conclusion)
-## Introduction
+## Introduction
This document describes the main features and principles of the configuration
language called `UCL` - universal configuration language.
@@ -262,7 +262,20 @@ parser is created but before any configurations are parsed.
all files that matches the specified pattern (normally the format of patterns is defined in `glob` manual page
for your operating system). This option is meaningless for URL includes.
* `url` (default: **true**) - allow URL includes.
+* `path` (default: empty) - A UCL_ARRAY of directories to search for the include file.
+Search ends after the first patch, unless `glob` is true, then all matches are included.
+* `prefix` (default false) - Put included contents inside an object, instead
+of loading them into the root. If no `key` is provided, one is automatically generated based on each files basename()
+* `key` (default: <empty string>) - Key to load contents of include into. If
+the key already exists, it must be the correct type
+* `target` (default: object) - Specify if the `prefix` `key` should be an
+object or an array.
* `priority` (default: 0) - specify priority for the include (see below).
+* `duplicate` (default: 'append') - specify policy of duplicates resolving:
+ - `append` - default strategy, if we have new object of higher priority then it replaces old one, if we have new object with less priority it is ignored completely, and if we have two duplicate objects with the same priority then we have a multi-value key (implicit array)
+ - `merge` - if we have object or array, then new keys are merged inside, if we have a plain object then an implicit array is formed (regardeless of priorities)
+ - `error` - create error on duplicate keys and stop parsing
+ - `rewrite` - always rewrite an old value with new one (ignoring priorities)
Priorities are used by UCL parser to manage the policy of objects rewriting during including other files
as following:
diff --git a/contrib/libucl/cmake/CMakeLists.txt b/contrib/libucl/cmake/CMakeLists.txt
deleted file mode 100644
index e84f619..0000000
--- a/contrib/libucl/cmake/CMakeLists.txt
+++ /dev/null
@@ -1,127 +0,0 @@
-PROJECT(libucl C)
-
-SET(LIBUCL_VERSION_MAJOR 0)
-SET(LIBUCL_VERSION_MINOR 5)
-SET(LIBUCL_VERSION_PATCH 0)
-
-SET(LIBUCL_VERSION "${LIBUCL_VERSION_MAJOR}.${LIBUCL_VERSION_MINOR}.${LIBUCL_VERSION_PATCH}")
-
-INCLUDE(CheckCCompilerFlag)
-INCLUDE(FindOpenSSL)
-CMAKE_MINIMUM_REQUIRED(VERSION 2.6.0 FATAL_ERROR)
-
-OPTION(ENABLE_URL_INCLUDE "Enable urls in ucl includes (requires libcurl or libfetch) [default: OFF]" OFF)
-OPTION(ENABLE_URL_SIGN "Enable signatures check in ucl includes (requires openssl) [default: OFF]" OFF)
-OPTION(BUILD_SHARED_LIBS "Build Shared Libraries [default: OFF]" OFF)
-
-IF(CMAKE_SYSTEM_NAME STREQUAL "Linux")
- LIST(APPEND CMAKE_REQUIRED_LIBRARIES rt)
-ENDIF(CMAKE_SYSTEM_NAME STREQUAL "Linux")
-
-IF(ENABLE_URL_INCLUDE MATCHES "ON")
- FIND_LIBRARY(LIBFETCH_LIBRARY NAMES fetch PATHS PATH_SUFFIXES lib64 lib
- PATHS
- ~/Library/Frameworks
- /Library/Frameworks
- /usr/local
- /usr
- /sw
- /opt/local
- /opt/csw
- /opt
- DOC "Path where the libfetch library can be found")
- IF(LIBFETCH_LIBRARY)
- FIND_FILE(HAVE_FETCH_H NAMES fetch.h PATHS /usr/include
- /opt/include
- /usr/local/include
- DOC "Path to libfetch header")
- ELSE(LIBFETCH_LIBRARY)
- # Try to find libcurl
- ProcessPackage(CURL libcurl)
- IF(NOT CURL_FOUND)
- MESSAGE(WARNING "Neither libcurl nor libfetch were found, no support of URL includes in configuration")
- ENDIF(NOT CURL_FOUND)
- ENDIF(LIBFETCH_LIBRARY)
-ENDIF(ENABLE_URL_INCLUDE MATCHES "ON")
-
-SET(CMAKE_C_WARN_FLAGS "")
-CHECK_C_COMPILER_FLAG(-Wall SUPPORT_WALL)
-CHECK_C_COMPILER_FLAG(-W SUPPORT_W)
-CHECK_C_COMPILER_FLAG(-Wno-unused-parameter SUPPORT_WPARAM)
-CHECK_C_COMPILER_FLAG(-Wno-pointer-sign SUPPORT_WPOINTER_SIGN)
-CHECK_C_COMPILER_FLAG(-Wstrict-prototypes SUPPORT_WSTRICT_PROTOTYPES)
-IF(NOT "${CMAKE_C_COMPILER_ID}" MATCHES SunPro)
- CHECK_C_COMPILER_FLAG("-std=c99" SUPPORT_STD_FLAG)
-ENDIF(NOT "${CMAKE_C_COMPILER_ID}" MATCHES SunPro)
-IF(SUPPORT_W)
- SET(CMAKE_C_WARN_FLAGS "${CMAKE_C_WARN_FLAGS} -W")
-ENDIF(SUPPORT_W)
-IF(SUPPORT_WALL)
- SET(CMAKE_C_WARN_FLAGS "${CMAKE_C_WARN_FLAGS} -Wall")
-ENDIF(SUPPORT_WALL)
-IF(SUPPORT_WPARAM)
- SET(CMAKE_C_WARN_FLAGS "${CMAKE_C_WARN_FLAGS} -Wno-unused-parameter")
-ENDIF(SUPPORT_WPARAM)
-IF(SUPPORT_WPOINTER_SIGN)
- SET(CMAKE_C_WARN_FLAGS "${CMAKE_C_WARN_FLAGS} -Wno-pointer-sign")
-ENDIF(SUPPORT_WPOINTER_SIGN)
-IF(SUPPORT_WSTRICT_PROTOTYPES)
- SET(CMAKE_C_WARN_FLAGS "${CMAKE_C_WARN_FLAGS} -Wstrict-prototypes")
-ENDIF(SUPPORT_WSTRICT_PROTOTYPES)
-IF(SUPPORT_STD_FLAG)
- SET(CMAKE_C_WARN_FLAGS "${CMAKE_C_WARN_FLAGS} -std=c99")
-ENDIF(SUPPORT_STD_FLAG)
-
-IF(ENABLE_URL_SIGN MATCHES "ON")
- IF(OPENSSL_FOUND)
- SET(HAVE_OPENSSL 1)
- INCLUDE_DIRECTORIES("${OPENSSL_INCLUDE_DIR}")
- ENDIF(OPENSSL_FOUND)
-ENDIF(ENABLE_URL_SIGN MATCHES "ON")
-
-INCLUDE_DIRECTORIES("${CMAKE_CURRENT_SOURCE_DIR}/../src")
-INCLUDE_DIRECTORIES("${CMAKE_CURRENT_SOURCE_DIR}/../include")
-INCLUDE_DIRECTORIES("${CMAKE_CURRENT_SOURCE_DIR}/../uthash")
-INCLUDE_DIRECTORIES("${CMAKE_CURRENT_SOURCE_DIR}/../klib")
-
-SET(UCLSRC ../src/ucl_util.c
- ../src/ucl_parser.c
- ../src/ucl_emitter.c
- ../src/ucl_emitter_streamline.c
- ../src/ucl_emitter_utils.c
- ../src/ucl_hash.c
- ../src/ucl_schema.c
- ../src/xxhash.c)
-
-
-SET (LIB_TYPE STATIC)
-IF (BUILD_SHARED_LIBS)
- SET (LIB_TYPE SHARED)
-ENDIF (BUILD_SHARED_LIBS)
-ADD_LIBRARY(ucl ${LIB_TYPE} ${UCLSRC})
-SET_TARGET_PROPERTIES(ucl PROPERTIES VERSION ${LIBUCL_VERSION} SOVERSION ${LIBUCL_VERSION_MAJOR})
-
-IF(WITH_LUA)
- SET(UCL_LUA_SRC ../lua/lua_ucl.c)
- ADD_LIBRARY(lua-ucl ${LIB_TYPE} ${UCL_LUA_SRC})
- IF(ENABLE_LUAJIT MATCHES "ON")
- TARGET_LINK_LIBRARIES(lua-ucl "${LUAJIT_LIBRARY}")
- ELSE(ENABLE_LUAJIT MATCHES "ON")
- TARGET_LINK_LIBRARIES(lua-ucl "${LUA_LIBRARY}")
- ENDIF(ENABLE_LUAJIT MATCHES "ON")
- TARGET_LINK_LIBRARIES(lua-ucl ucl)
- SET_TARGET_PROPERTIES(lua-ucl PROPERTIES VERSION ${LIBUCL_VERSION} SOVERSION ${LIBUCL_VERSION_MAJOR})
-ENDIF(WITH_LUA)
-
-IF(HAVE_FETCH_H)
- TARGET_LINK_LIBRARIES(ucl fetch)
-ELSE(HAVE_FETCH_H)
- IF(CURL_FOUND)
- TARGET_LINK_LIBRARIES(ucl ${CURL_LIBRARIES})
- ENDIF(CURL_FOUND)
-ENDIF(HAVE_FETCH_H)
-IF(ENABLE_URL_SIGN MATCHES "ON")
- IF(OPENSSL_FOUND)
- TARGET_LINK_LIBRARIES(ucl ${OPENSSL_LIBRARIES})
- ENDIF(OPENSSL_FOUND)
-ENDIF(ENABLE_URL_SIGN MATCHES "ON")
diff --git a/contrib/libucl/configure.ac b/contrib/libucl/configure.ac
index be6f652..73d3227 100644
--- a/contrib/libucl/configure.ac
+++ b/contrib/libucl/configure.ac
@@ -1,7 +1,7 @@
m4_define([maj_ver], [0])
m4_define([med_ver], [7])
-m4_define([min_ver], [2])
-m4_define([so_version], [5:0:1])
+m4_define([min_ver], [3])
+m4_define([so_version], [5:0:2])
m4_define([ucl_version], [maj_ver.med_ver.min_ver])
AC_INIT([libucl],[ucl_version],[https://github.com/vstakhov/libucl],[libucl])
@@ -47,6 +47,7 @@ AC_CHECK_HEADERS_ONCE([libgen.h])
AC_CHECK_HEADERS_ONCE([stdio.h])
AC_CHECK_HEADERS_ONCE([float.h])
AC_CHECK_HEADERS_ONCE([math.h])
+AC_CHECK_HEADERS_ONCE([endian.h sys/endian.h machine/endian.h])
dnl Example of default-disabled feature
AC_ARG_ENABLE([urls], AS_HELP_STRING([--enable-urls],
diff --git a/contrib/libucl/doc/Makefile.am b/contrib/libucl/doc/Makefile.am
index 2c7a588..dcfacf6 100644
--- a/contrib/libucl/doc/Makefile.am
+++ b/contrib/libucl/doc/Makefile.am
@@ -4,6 +4,6 @@ dist_man_MANS = libucl.3
gen-man: @PANDOC@
tail -n +$$(grep -n '# Synopsis' api.md | cut -d':' -f1) api.md | \
- cat pandoc.template - | sed -e 's/^# \(.*\)/# \U\1/' \
+ cat pandoc.template - | sed -e 's/^# \(.*\)/# \U\1/' \
-e "s/%%date%%/$$(LANG=C date +'%d %B, %Y')/" | \
- @PANDOC@ -s -f markdown -t man -o libucl.3
+ @PANDOC@ -s -f markdown -t man -o libucl.3
diff --git a/contrib/libucl/doc/lua_api.md b/contrib/libucl/doc/lua_api.md
index a53353b..f7af3ca 100644
--- a/contrib/libucl/doc/lua_api.md
+++ b/contrib/libucl/doc/lua_api.md
@@ -16,7 +16,7 @@ if not res then
else
local obj = parser:get_object()
local got = ucl.to_format(obj, 'json')
-endif
+end
local table = {
str = 'value',
@@ -25,6 +25,7 @@ local table = {
func = function ()
return 'huh'
end
+}
print(ucl.to_format(table, 'ucl'))
@@ -115,6 +116,7 @@ local table = {
func = function ()
return 'huh'
end
+}
print(ucl.to_format(table, 'ucl'))
diff --git a/contrib/libucl/examples/ucl_cpp.cc b/contrib/libucl/examples/ucl_cpp.cc
new file mode 100644
index 0000000..2d15d84
--- /dev/null
+++ b/contrib/libucl/examples/ucl_cpp.cc
@@ -0,0 +1,26 @@
+#include <iostream>
+#include <string>
+#include "ucl++.h"
+
+int main(int argc, char **argv)
+{
+ std::string input, err;
+
+ input.assign((std::istreambuf_iterator<char>(std::cin)),
+ std::istreambuf_iterator<char>());
+
+ auto obj = ucl::Ucl::parse(input, err);
+
+ if (obj) {
+ std::cout << obj.dump(UCL_EMIT_CONFIG) << std::endl;
+
+ for (const auto &o : obj) {
+ std::cout << o.dump(UCL_EMIT_CONFIG) << std::endl;
+ }
+ }
+ else {
+ std::cerr << "Error: " << err << std::endl;
+
+ return 1;
+ }
+}
diff --git a/contrib/libucl/include/ucl++.h b/contrib/libucl/include/ucl++.h
new file mode 100644
index 0000000..87d2041
--- /dev/null
+++ b/contrib/libucl/include/ucl++.h
@@ -0,0 +1,422 @@
+/*
+ * Copyright (c) 2015, Vsevolod Stakhov
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY AUTHOR ''AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL AUTHOR BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#pragma once
+#include <string>
+#include <memory>
+#include <iostream>
+#include <strstream>
+
+#include "ucl.h"
+
+// C++11 API inspired by json11: https://github.com/dropbox/json11/
+
+namespace ucl {
+
+struct ucl_map_construct_t { };
+constexpr ucl_map_construct_t ucl_map_construct = ucl_map_construct_t();
+struct ucl_array_construct_t { };
+constexpr ucl_array_construct_t ucl_array_construct = ucl_array_construct_t();
+
+class Ucl final {
+private:
+
+ struct ucl_deleter {
+ void operator() (ucl_object_t *obj) {
+ ucl_object_unref (obj);
+ }
+ };
+
+ static int
+ append_char (unsigned char c, size_t nchars, void *ud)
+ {
+ std::string *out = reinterpret_cast<std::string *>(ud);
+
+ out->append (nchars, (char)c);
+
+ return nchars;
+ }
+ static int
+ append_len (unsigned const char *str, size_t len, void *ud)
+ {
+ std::string *out = reinterpret_cast<std::string *>(ud);
+
+ out->append ((const char *)str, len);
+
+ return len;
+ }
+ static int
+ append_int (int64_t elt, void *ud)
+ {
+ std::string *out = reinterpret_cast<std::string *>(ud);
+ auto nstr = std::to_string (elt);
+
+ out->append (nstr);
+
+ return nstr.size ();
+ }
+ static int
+ append_double (double elt, void *ud)
+ {
+ std::string *out = reinterpret_cast<std::string *>(ud);
+ auto nstr = std::to_string (elt);
+
+ out->append (nstr);
+
+ return nstr.size ();
+ }
+
+ static struct ucl_emitter_functions default_emit_funcs()
+ {
+ struct ucl_emitter_functions func = {
+ Ucl::append_char,
+ Ucl::append_len,
+ Ucl::append_int,
+ Ucl::append_double,
+ nullptr,
+ nullptr
+ };
+
+ return func;
+ };
+
+ std::unique_ptr<ucl_object_t, ucl_deleter> obj;
+
+public:
+ class const_iterator {
+ private:
+ struct ucl_iter_deleter {
+ void operator() (ucl_object_iter_t it) {
+ ucl_object_iterate_free (it);
+ }
+ };
+ std::shared_ptr<void> it;
+ std::unique_ptr<Ucl> cur;
+ public:
+ typedef std::forward_iterator_tag iterator_category;
+
+ const_iterator(const Ucl &obj) {
+ it = std::shared_ptr<void>(ucl_object_iterate_new (obj.obj.get()),
+ ucl_iter_deleter());
+ cur.reset (new Ucl(ucl_object_iterate_safe (it.get(), true)));
+ }
+
+ const_iterator() {}
+ const_iterator(const const_iterator &other) {
+ it = other.it;
+ }
+ ~const_iterator() {}
+
+ const_iterator& operator=(const const_iterator &other) {
+ it = other.it;
+ return *this;
+ }
+
+ bool operator==(const const_iterator &other) const
+ {
+ if (cur && other.cur) {
+ return cur->obj.get() == other.cur->obj.get();
+ }
+
+ return !cur && !other.cur;
+ }
+
+ bool operator!=(const const_iterator &other) const
+ {
+ return !(*this == other);
+ }
+
+ const_iterator& operator++()
+ {
+ if (it) {
+ cur.reset (new Ucl(ucl_object_iterate_safe (it.get(), true)));
+ }
+
+ if (!*cur) {
+ it.reset ();
+ cur.reset ();
+ }
+
+ return *this;
+ }
+
+ const Ucl& operator*() const
+ {
+ return *cur;
+ }
+ const Ucl* operator->() const
+ {
+ return cur.get();
+ }
+ };
+
+ // We grab ownership if get non-const ucl_object_t
+ Ucl(ucl_object_t *other) {
+ obj.reset (other);
+ }
+
+ // Shared ownership
+ Ucl(const ucl_object_t *other) {
+ obj.reset (ucl_object_ref (other));
+ }
+
+ Ucl(const Ucl &other) {
+ obj.reset (ucl_object_ref (other.obj.get()));
+ }
+
+ Ucl(Ucl &&other) {
+ obj.swap (other.obj);
+ }
+
+ Ucl() noexcept {
+ obj.reset (ucl_object_typed_new (UCL_NULL));
+ }
+ Ucl(std::nullptr_t) noexcept {
+ obj.reset (ucl_object_typed_new (UCL_NULL));
+ }
+ Ucl(double value) {
+ obj.reset (ucl_object_typed_new (UCL_FLOAT));
+ obj->value.dv = value;
+ }
+ Ucl(int64_t value) {
+ obj.reset (ucl_object_typed_new (UCL_INT));
+ obj->value.iv = value;
+ }
+ Ucl(bool value) {
+ obj.reset (ucl_object_typed_new (UCL_BOOLEAN));
+ obj->value.iv = static_cast<int64_t>(value);
+ }
+ Ucl(const std::string &value) {
+ obj.reset (ucl_object_fromstring_common (value.data (), value.size (),
+ UCL_STRING_RAW));
+ }
+ Ucl(const char * value) {
+ obj.reset (ucl_object_fromstring_common (value, 0, UCL_STRING_RAW));
+ }
+
+ // Implicit constructor: anything with a to_json() function.
+ template <class T, class = decltype(&T::to_ucl)>
+ Ucl(const T & t) : Ucl(t.to_ucl()) {}
+
+ // Implicit constructor: map-like objects (std::map, std::unordered_map, etc)
+ template <class M, typename std::enable_if<
+ std::is_constructible<std::string, typename M::key_type>::value
+ && std::is_constructible<Ucl, typename M::mapped_type>::value,
+ int>::type = 0>
+ Ucl(const M & m) {
+ obj.reset (ucl_object_typed_new (UCL_OBJECT));
+ auto cobj = obj.get ();
+
+ for (const auto &e : m) {
+ ucl_object_insert_key (cobj, ucl_object_ref (e.second.obj.get()),
+ e.first.data (), e.first.size (), true);
+ }
+ }
+
+ // Implicit constructor: vector-like objects (std::list, std::vector, std::set, etc)
+ template <class V, typename std::enable_if<
+ std::is_constructible<Ucl, typename V::value_type>::value,
+ int>::type = 0>
+ Ucl(const V & v) {
+ obj.reset (ucl_object_typed_new (UCL_ARRAY));
+ auto cobj = obj.get ();
+
+ for (const auto &e : v) {
+ ucl_array_append (cobj, ucl_object_ref (e.obj.get()));
+ }
+ }
+
+ ucl_type_t type () const {
+ if (obj) {
+ return ucl_object_type (obj.get ());
+ }
+ return UCL_NULL;
+ }
+
+ const std::string key () const {
+ std::string res;
+
+ if (obj->key) {
+ res.assign (obj->key, obj->keylen);
+ }
+
+ return res;
+ }
+
+ double number_value () const
+ {
+ if (obj) {
+ return ucl_object_todouble (obj.get());
+ }
+
+ return 0.0;
+ }
+
+ int64_t int_value () const
+ {
+ if (obj) {
+ return ucl_object_toint (obj.get());
+ }
+
+ return 0;
+ }
+
+ bool bool_value () const
+ {
+ if (obj) {
+ return ucl_object_toboolean (obj.get());
+ }
+
+ return false;
+ }
+
+ const std::string string_value () const
+ {
+ std::string res;
+
+ if (obj) {
+ res.assign (ucl_object_tostring (obj.get()));
+ }
+
+ return res;
+ }
+
+ const Ucl operator[] (size_t i) const
+ {
+ if (type () == UCL_ARRAY) {
+ return Ucl (ucl_array_find_index (obj.get(), i));
+ }
+
+ return Ucl (nullptr);
+ }
+
+ const Ucl operator[](const std::string &key) const
+ {
+ if (type () == UCL_OBJECT) {
+ return Ucl (ucl_object_find_keyl (obj.get(),
+ key.data (), key.size ()));
+ }
+
+ return Ucl (nullptr);
+ }
+ // Serialize.
+ void dump (std::string &out, ucl_emitter_t type = UCL_EMIT_JSON) const
+ {
+ struct ucl_emitter_functions cbdata;
+
+ cbdata = Ucl::default_emit_funcs();
+ cbdata.ud = reinterpret_cast<void *>(&out);
+
+ ucl_object_emit_full (obj.get(), type, &cbdata);
+ }
+
+ std::string dump (ucl_emitter_t type = UCL_EMIT_JSON) const
+ {
+ std::string out;
+
+ dump (out, type);
+
+ return out;
+ }
+
+ static Ucl parse (const std::string & in, std::string & err)
+ {
+ auto parser = ucl_parser_new (UCL_PARSER_DEFAULT);
+
+ if (!ucl_parser_add_chunk (parser, (const unsigned char *)in.data (),
+ in.size ())) {
+ err.assign (ucl_parser_get_error (parser));
+ ucl_parser_free (parser);
+
+ return nullptr;
+ }
+
+ auto obj = ucl_parser_get_object (parser);
+ ucl_parser_free (parser);
+
+ // Obj will handle ownership
+ return Ucl (obj);
+ }
+
+ static Ucl parse (const char * in, std::string & err)
+ {
+ if (in) {
+ return parse (std::string(in), err);
+ } else {
+ err = "null input";
+ return nullptr;
+ }
+ }
+
+ static Ucl parse (std::istream &ifs, std::string &err)
+ {
+ return Ucl::parse (std::string(std::istreambuf_iterator<char>(ifs),
+ std::istreambuf_iterator<char>()), err);
+ }
+
+ bool operator== (const Ucl &rhs) const
+ {
+ return ucl_object_compare (obj.get(), rhs.obj.get ()) == 0;
+ }
+ bool operator< (const Ucl &rhs) const
+ {
+ return ucl_object_compare (obj.get(), rhs.obj.get ()) < 0;
+ }
+ bool operator!= (const Ucl &rhs) const { return !(*this == rhs); }
+ bool operator<= (const Ucl &rhs) const { return !(rhs < *this); }
+ bool operator> (const Ucl &rhs) const { return (rhs < *this); }
+ bool operator>= (const Ucl &rhs) const { return !(*this < rhs); }
+
+ operator bool () const
+ {
+ if (!obj || type() == UCL_NULL) {
+ return false;
+ }
+
+ if (type () == UCL_BOOLEAN) {
+ return bool_value ();
+ }
+
+ return true;
+ }
+
+ const_iterator begin() const
+ {
+ return const_iterator(*this);
+ }
+ const_iterator cbegin() const
+ {
+ return const_iterator(*this);
+ }
+ const_iterator end() const
+ {
+ return const_iterator();
+ }
+ const_iterator cend() const
+ {
+ return const_iterator();
+ }
+};
+
+};
diff --git a/contrib/libucl/include/ucl.h b/contrib/libucl/include/ucl.h
index 823ac8d..82a1fd1 100644
--- a/contrib/libucl/include/ucl.h
+++ b/contrib/libucl/include/ucl.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2013, Vsevolod Stakhov
+/* Copyright (c) 2013-2015, Vsevolod Stakhov
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -135,7 +135,9 @@ typedef enum ucl_emitter {
UCL_EMIT_JSON = 0, /**< Emit fine formatted JSON */
UCL_EMIT_JSON_COMPACT, /**< Emit compacted JSON */
UCL_EMIT_CONFIG, /**< Emit human readable config format */
- UCL_EMIT_YAML /**< Emit embedded YAML format */
+ UCL_EMIT_YAML, /**< Emit embedded YAML format */
+ UCL_EMIT_MSGPACK, /**< Emit msgpack output */
+ UCL_EMIT_MAX /**< Unsupported emitter type */
} ucl_emitter_t;
/**
@@ -145,6 +147,7 @@ typedef enum ucl_emitter {
* UCL still has to perform copying implicitly.
*/
typedef enum ucl_parser_flags {
+ UCL_PARSER_DEFAULT = 0x0, /**< No special flags */
UCL_PARSER_KEY_LOWERCASE = 0x1, /**< Convert all keys to lower case */
UCL_PARSER_ZEROCOPY = 0x2, /**< Parse input in zero-copy mode if possible */
UCL_PARSER_NO_TIME = 0x4, /**< Do not parse time and treat time values as strings */
@@ -155,6 +158,7 @@ typedef enum ucl_parser_flags {
* String conversion flags, that are used in #ucl_object_fromstring_common function.
*/
typedef enum ucl_string_flags {
+ UCL_STRING_RAW = 0x0, /**< Treat string as is */
UCL_STRING_ESCAPE = 0x1, /**< Perform JSON escape */
UCL_STRING_TRIM = 0x2, /**< Trim leading and trailing whitespaces */
UCL_STRING_PARSE_BOOLEAN = 0x4, /**< Parse passed string and detect boolean */
@@ -172,15 +176,36 @@ typedef enum ucl_string_flags {
* Basic flags for an object
*/
typedef enum ucl_object_flags {
- UCL_OBJECT_ALLOCATED_KEY = 0x1, /**< An object has key allocated internally */
- UCL_OBJECT_ALLOCATED_VALUE = 0x2, /**< An object has a string value allocated internally */
- UCL_OBJECT_NEED_KEY_ESCAPE = 0x4, /**< The key of an object need to be escaped on output */
- UCL_OBJECT_EPHEMERAL = 0x8, /**< Temporary object that does not need to be freed really */
- UCL_OBJECT_MULTILINE = 0x10, /**< String should be displayed as multiline string */
- UCL_OBJECT_MULTIVALUE = 0x20 /**< Object is a key with multiple values */
+ UCL_OBJECT_ALLOCATED_KEY = (1 << 0), /**< An object has key allocated internally */
+ UCL_OBJECT_ALLOCATED_VALUE = (1 << 1), /**< An object has a string value allocated internally */
+ UCL_OBJECT_NEED_KEY_ESCAPE = (1 << 2), /**< The key of an object need to be escaped on output */
+ UCL_OBJECT_EPHEMERAL = (1 << 3), /**< Temporary object that does not need to be freed really */
+ UCL_OBJECT_MULTILINE = (1 << 4), /**< String should be displayed as multiline string */
+ UCL_OBJECT_MULTIVALUE = (1 << 5), /**< Object is a key with multiple values */
+ UCL_OBJECT_INHERITED = (1 << 6), /**< Object has been inherited from another */
+ UCL_OBJECT_BINARY = (1 << 7) /**< Object contains raw binary data */
} ucl_object_flags_t;
/**
+ * Duplicate policy types
+ */
+enum ucl_duplicate_strategy {
+ UCL_DUPLICATE_APPEND = 0, /**< Default policy to merge based on priorities */
+ UCL_DUPLICATE_MERGE, /**< Merge new object with old one */
+ UCL_DUPLICATE_REWRITE, /**< Rewrite old keys */
+ UCL_DUPLICATE_ERROR /**< Stop parsing on duplicate found */
+};
+
+/**
+ * Input format type
+ */
+enum ucl_parse_type {
+ UCL_PARSE_UCL = 0, /**< Default ucl format */
+ UCL_PARSE_MSGPACK, /**< Message pack input format */
+ UCL_PARSE_CSEXP /**< Canonical S-expressions */
+};
+
+/**
* UCL object structure. Please mention that the most of fields should not be touched by
* UCL users. In future, this structure may be converted to private one.
*/
@@ -190,7 +215,7 @@ typedef struct ucl_object_s {
*/
union {
int64_t iv; /**< Int value of an object */
- const char *sv; /**< String value of an object */
+ const char *sv; /**< String value of an object */
double dv; /**< Double value of an object */
void *av; /**< Array */
void *ov; /**< Object */
@@ -496,6 +521,15 @@ UCL_EXTERN const ucl_object_t* ucl_array_find_index (const ucl_object_t *top,
unsigned int index);
/**
+ * Return the index of `elt` in the array `top`
+ * @param top object to get a key from (must be of type UCL_ARRAY)
+ * @param elt element to find index of (must NOT be NULL)
+ * @return index of `elt` in the array `top or (unsigned int)-1 if `elt` is not found
+ */
+UCL_EXTERN unsigned int ucl_array_index_of (ucl_object_t *top,
+ ucl_object_t *elt);
+
+/**
* Replace an element in an array with a different element, returning the object
* that was replaced. This object is not released, caller must unref the
* returned object when it is no longer needed.
@@ -612,6 +646,19 @@ UCL_EXTERN const ucl_object_t* ucl_object_find_key (const ucl_object_t *obj,
const char *key);
/**
+ * Return object identified by a key in the specified object, if the first key is
+ * not found then look for the next one. This process is repeated unless
+ * the next argument in the list is not NULL. So, `ucl_object_find_any_key(obj, key, NULL)`
+ * is equal to `ucl_object_find_key(obj, key)`
+ * @param obj object to get a key from (must be of type UCL_OBJECT)
+ * @param key key to search
+ * @param ... list of alternative keys to search (NULL terminated)
+ * @return object matching the specified key or NULL if key was not found
+ */
+UCL_EXTERN const ucl_object_t* ucl_object_find_any_key (const ucl_object_t *obj,
+ const char *key, ...);
+
+/**
* Return object identified by a fixed size key in the specified object
* @param obj object to get a key from (must be of type UCL_OBJECT)
* @param key key to search
@@ -631,6 +678,16 @@ UCL_EXTERN const ucl_object_t *ucl_lookup_path (const ucl_object_t *obj,
const char *path);
/**
+ * Return object identified by object notation string using arbitrary delimiter
+ * @param obj object to search in
+ * @param path dot.notation.path to the path to lookup. May use numeric .index on arrays
+ * @param sep the sepatorator to use in place of . (incase keys have . in them)
+ * @return object matched the specified path or NULL if path is not found
+ */
+UCL_EXTERN const ucl_object_t *ucl_lookup_path_char (const ucl_object_t *obj,
+ const char *path, char sep);
+
+/**
* Returns a key of an object as a NULL terminated string
* @param obj CL object
* @return key or NULL if there is no key
@@ -683,7 +740,7 @@ UCL_EXTERN int ucl_object_compare (const ucl_object_t *o1,
* @param cmp
*/
UCL_EXTERN void ucl_object_array_sort (ucl_object_t *ar,
- int (*cmp)(const ucl_object_t *o1, const ucl_object_t *o2));
+ int (*cmp)(const ucl_object_t **o1, const ucl_object_t **o2));
/**
* Get the priority for specific UCL object
@@ -769,6 +826,21 @@ typedef bool (*ucl_macro_handler) (const unsigned char *data, size_t len,
const ucl_object_t *arguments,
void* ud);
+/**
+ * Context dependent macro handler for a parser
+ * @param data the content of macro
+ * @param len the length of content
+ * @param arguments arguments object
+ * @param context previously parsed context
+ * @param ud opaque user data
+ * @param err error pointer
+ * @return true if macro has been parsed
+ */
+typedef bool (*ucl_context_macro_handler) (const unsigned char *data, size_t len,
+ const ucl_object_t *arguments,
+ const ucl_object_t *context,
+ void* ud);
+
/* Opaque parser */
struct ucl_parser;
@@ -780,16 +852,38 @@ struct ucl_parser;
UCL_EXTERN struct ucl_parser* ucl_parser_new (int flags);
/**
+ * Sets the default priority for the parser applied to chunks that does not
+ * specify priority explicitly
+ * @param parser parser object
+ * @param prio default priority (0 .. 16)
+ * @return true if parser's default priority was set
+ */
+UCL_EXTERN bool ucl_parser_set_default_priority (struct ucl_parser *parser,
+ unsigned prio);
+/**
* Register new handler for a macro
* @param parser parser object
* @param macro macro name (without leading dot)
* @param handler handler (it is called immediately after macro is parsed)
* @param ud opaque user data for a handler
*/
-UCL_EXTERN void ucl_parser_register_macro (struct ucl_parser *parser, const char *macro,
+UCL_EXTERN void ucl_parser_register_macro (struct ucl_parser *parser,
+ const char *macro,
ucl_macro_handler handler, void* ud);
/**
+ * Register new context dependent handler for a macro
+ * @param parser parser object
+ * @param macro macro name (without leading dot)
+ * @param handler handler (it is called immediately after macro is parsed)
+ * @param ud opaque user data for a handler
+ */
+UCL_EXTERN void ucl_parser_register_context_macro (struct ucl_parser *parser,
+ const char *macro,
+ ucl_context_macro_handler handler,
+ void* ud);
+
+/**
* Handler to detect unregistered variables
* @param data variable data
* @param len length of variable
@@ -843,6 +937,21 @@ UCL_EXTERN bool ucl_parser_add_chunk_priority (struct ucl_parser *parser,
const unsigned char *data, size_t len, unsigned priority);
/**
+ * Full version of ucl_add_chunk with priority and duplicate strategy
+ * @param parser parser structure
+ * @param data the pointer to the beginning of a chunk
+ * @param len the length of a chunk
+ * @param priority the desired priority of a chunk (only 4 least significant bits
+ * are considered for this parameter)
+ * @param strat duplicates merging strategy
+ * @param parse_type input format
+ * @return true if chunk has been added and false in case of error
+ */
+UCL_EXTERN bool ucl_parser_add_chunk_full (struct ucl_parser *parser,
+ const unsigned char *data, size_t len, unsigned priority,
+ enum ucl_duplicate_strategy strat, enum ucl_parse_type parse_type);
+
+/**
* Load ucl object from a string
* @param parser parser structure
* @param data the pointer to the string
@@ -853,6 +962,18 @@ UCL_EXTERN bool ucl_parser_add_string (struct ucl_parser *parser,
const char *data,size_t len);
/**
+ * Load ucl object from a string
+ * @param parser parser structure
+ * @param data the pointer to the string
+ * @param len the length of the string, if `len` is 0 then `data` must be zero-terminated string
+ * @param priority the desired priority of a chunk (only 4 least significant bits
+ * are considered for this parameter)
+ * @return true if string has been added and false in case of error
+ */
+UCL_EXTERN bool ucl_parser_add_string_priority (struct ucl_parser *parser,
+ const char *data, size_t len, unsigned priority);
+
+/**
* Load and add data from a file
* @param parser parser structure
* @param filename the name of file
@@ -863,6 +984,18 @@ UCL_EXTERN bool ucl_parser_add_file (struct ucl_parser *parser,
const char *filename);
/**
+ * Load and add data from a file
+ * @param parser parser structure
+ * @param filename the name of file
+ * @param err if *err is NULL it is set to parser error
+ * @param priority the desired priority of a chunk (only 4 least significant bits
+ * are considered for this parameter)
+ * @return true if chunk has been added and false in case of error
+ */
+UCL_EXTERN bool ucl_parser_add_file_priority (struct ucl_parser *parser,
+ const char *filename, unsigned priority);
+
+/**
* Load and add data from a file descriptor
* @param parser parser structure
* @param filename the name of file
@@ -873,6 +1006,28 @@ UCL_EXTERN bool ucl_parser_add_fd (struct ucl_parser *parser,
int fd);
/**
+ * Load and add data from a file descriptor
+ * @param parser parser structure
+ * @param filename the name of file
+ * @param err if *err is NULL it is set to parser error
+ * @param priority the desired priority of a chunk (only 4 least significant bits
+ * are considered for this parameter)
+ * @return true if chunk has been added and false in case of error
+ */
+UCL_EXTERN bool ucl_parser_add_fd_priority (struct ucl_parser *parser,
+ int fd, unsigned priority);
+
+/**
+ * Provide a UCL_ARRAY of paths to search for include files. The object is
+ * copied so caller must unref the object.
+ * @param parser parser structure
+ * @param paths UCL_ARRAY of paths to search
+ * @return true if the path search array was replaced in the parser
+ */
+UCL_EXTERN bool ucl_set_include_path (struct ucl_parser *parser,
+ ucl_object_t *paths);
+
+/**
* Get a top object for a parser (refcount is increased)
* @param parser parser structure
* @param err if *err is NULL it is set to parser error
@@ -881,12 +1036,34 @@ UCL_EXTERN bool ucl_parser_add_fd (struct ucl_parser *parser,
UCL_EXTERN ucl_object_t* ucl_parser_get_object (struct ucl_parser *parser);
/**
- * Get the error string if failing
+ * Get the error string if parsing has been failed
* @param parser parser object
+ * @return error description
*/
UCL_EXTERN const char *ucl_parser_get_error(struct ucl_parser *parser);
/**
+ * Get the code of the last error
+ * @param parser parser object
+ * @return error code
+ */
+UCL_EXTERN int ucl_parser_get_error_code(struct ucl_parser *parser);
+
+/**
+ * Get the current column number within parser
+ * @param parser parser object
+ * @return current column number
+ */
+UCL_EXTERN unsigned ucl_parser_get_column(struct ucl_parser *parser);
+
+/**
+ * Get the current line number within parser
+ * @param parser parser object
+ * @return current line number
+ */
+UCL_EXTERN unsigned ucl_parser_get_linenum(struct ucl_parser *parser);
+
+/**
* Clear the error in the parser
* @param parser parser object
*/
@@ -994,6 +1171,17 @@ UCL_EXTERN unsigned char *ucl_object_emit (const ucl_object_t *obj,
enum ucl_emitter emit_type);
/**
+ * Emit object to a string that can contain `\0` inside
+ * @param obj object
+ * @param emit_type if type is #UCL_EMIT_JSON then emit json, if type is
+ * #UCL_EMIT_CONFIG then emit config like object
+ * @param len the resulting length
+ * @return dump of an object (must be freed after using) or NULL in case of error
+ */
+UCL_EXTERN unsigned char *ucl_object_emit_len (const ucl_object_t *obj,
+ enum ucl_emitter emit_type, size_t *len);
+
+/**
* Emit object to a string
* @param obj object
* @param emit_type if type is #UCL_EMIT_JSON then emit json, if type is
diff --git a/contrib/libucl/klib/kvec.h b/contrib/libucl/klib/kvec.h
index b5cce85..b0a7504 100644
--- a/contrib/libucl/klib/kvec.h
+++ b/contrib/libucl/klib/kvec.h
@@ -89,7 +89,7 @@ int main() {
#define kv_concat(type, v1, v0) do { \
if ((v1).m < (v0).n + (v1).n) kv_resize(type, v1, (v0).n + (v1).n); \
- memcpy((v1).a + (v1).n, (v0).a, sizeof(type) * ((v0).n + (v1).n)); \
+ memcpy((v1).a + (v1).n, (v0).a, sizeof(type) * (v0).n); \
(v1).n = (v0).n + (v1).n; \
} while (0)
diff --git a/contrib/libucl/lua/lua_ucl.c b/contrib/libucl/lua/lua_ucl.c
index 682b0b5..b6162b4 100644
--- a/contrib/libucl/lua/lua_ucl.c
+++ b/contrib/libucl/lua/lua_ucl.c
@@ -69,6 +69,7 @@ func = "huh";
#define PARSER_META "ucl.parser.meta"
#define EMITTER_META "ucl.emitter.meta"
#define NULL_META "null.emitter.meta"
+#define OBJECT_META "ucl.object.meta"
static int ucl_object_lua_push_array (lua_State *L, const ucl_object_t *obj);
static int ucl_object_lua_push_scalar (lua_State *L, const ucl_object_t *obj, bool allow_array);
@@ -172,19 +173,33 @@ static int
ucl_object_lua_push_array (lua_State *L, const ucl_object_t *obj)
{
const ucl_object_t *cur;
+ ucl_object_iter_t it;
int i = 1, nelt = 0;
- /* Optimize allocation by preallocation of table */
- LL_FOREACH (obj, cur) {
- nelt ++;
+ if (obj->type == UCL_ARRAY) {
+ nelt = obj->len;
+ it = ucl_object_iterate_new (obj);
+ lua_createtable (L, nelt, 0);
+
+ while ((cur = ucl_object_iterate_safe (it, true))) {
+ ucl_object_push_lua (L, cur, false);
+ lua_rawseti (L, -2, i);
+ i ++;
+ }
}
+ else {
+ /* Optimize allocation by preallocation of table */
+ LL_FOREACH (obj, cur) {
+ nelt ++;
+ }
- lua_createtable (L, nelt, 0);
+ lua_createtable (L, nelt, 0);
- LL_FOREACH (obj, cur) {
- ucl_object_push_lua (L, cur, false);
- lua_rawseti (L, -2, i);
- i ++;
+ LL_FOREACH (obj, cur) {
+ ucl_object_push_lua (L, cur, false);
+ lua_rawseti (L, -2, i);
+ i ++;
+ }
}
return 1;
@@ -259,7 +274,7 @@ ucl_object_push_lua (lua_State *L, const ucl_object_t *obj, bool allow_array)
case UCL_OBJECT:
return ucl_object_lua_push_object (L, obj, allow_array);
case UCL_ARRAY:
- return ucl_object_lua_push_array (L, obj->value.av);
+ return ucl_object_lua_push_array (L, obj);
default:
return ucl_object_lua_push_scalar (L, obj, allow_array);
}
@@ -322,6 +337,7 @@ ucl_object_lua_fromtable (lua_State *L, int idx)
if (obj != NULL) {
ucl_array_append (top, obj);
}
+ lua_pop (L, 1);
}
}
else {
@@ -446,6 +462,24 @@ ucl_object_lua_import (lua_State *L, int idx)
}
static int
+lua_ucl_to_string (lua_State *L, const ucl_object_t *obj, enum ucl_emitter type)
+{
+ unsigned char *result;
+
+ result = ucl_object_emit (obj, type);
+
+ if (result != NULL) {
+ lua_pushstring (L, (const char *)result);
+ free (result);
+ }
+ else {
+ lua_pushnil (L);
+ }
+
+ return 1;
+}
+
+static int
lua_ucl_parser_init (lua_State *L)
{
struct ucl_parser *parser, **pparser;
@@ -474,6 +508,12 @@ lua_ucl_parser_get (lua_State *L, int index)
return *((struct ucl_parser **) luaL_checkudata(L, index, PARSER_META));
}
+static ucl_object_t *
+lua_ucl_object_get (lua_State *L, int index)
+{
+ return *((ucl_object_t **) luaL_checkudata(L, index, OBJECT_META));
+}
+
/***
* @method parser:parse_file(name)
* Parse UCL object from file.
@@ -579,6 +619,108 @@ lua_ucl_parser_get_object (lua_State *L)
return ret;
}
+/***
+ * @method parser:get_object_wrapped()
+ * Get top object from parser and export it to userdata object without
+ * unwrapping to lua.
+ * @return {ucl.object or nil} ucl object wrapped variable
+ */
+static int
+lua_ucl_parser_get_object_wrapped (lua_State *L)
+{
+ struct ucl_parser *parser;
+ ucl_object_t *obj, **pobj;
+ int ret = 1;
+
+ parser = lua_ucl_parser_get (L, 1);
+ obj = ucl_parser_get_object (parser);
+
+ if (obj != NULL) {
+ pobj = lua_newuserdata (L, sizeof (*pobj));
+ *pobj = obj;
+ luaL_getmetatable (L, OBJECT_META);
+ lua_setmetatable (L, -2);
+ }
+ else {
+ lua_pushnil (L);
+ }
+
+ return ret;
+}
+
+/***
+ * @method parser:validate(schema)
+ * Validates the top object in the parser against schema. Schema might be
+ * another object or a string that represents file to load schema from.
+ *
+ * @param {string/table} schema input schema
+ * @return {result,err} two values: boolean result and the corresponding error
+ *
+ */
+static int
+lua_ucl_parser_validate (lua_State *L)
+{
+ struct ucl_parser *parser, *schema_parser;
+ ucl_object_t *schema;
+ const char *schema_file;
+ struct ucl_schema_error err;
+
+ parser = lua_ucl_parser_get (L, 1);
+
+ if (parser && parser->top_obj) {
+ if (lua_type (L, 2) == LUA_TTABLE) {
+ schema = ucl_object_lua_import (L, 2);
+
+ if (schema == NULL) {
+ lua_pushboolean (L, false);
+ lua_pushstring (L, "cannot load schema from lua table");
+
+ return 2;
+ }
+ }
+ else if (lua_type (L, 2) == LUA_TSTRING) {
+ schema_parser = ucl_parser_new (0);
+ schema_file = luaL_checkstring (L, 2);
+
+ if (!ucl_parser_add_file (schema_parser, schema_file)) {
+ lua_pushboolean (L, false);
+ lua_pushfstring (L, "cannot parse schema file \"%s\": "
+ "%s", schema_file, ucl_parser_get_error (parser));
+ ucl_parser_free (schema_parser);
+
+ return 2;
+ }
+
+ schema = ucl_parser_get_object (schema_parser);
+ ucl_parser_free (schema_parser);
+ }
+ else {
+ lua_pushboolean (L, false);
+ lua_pushstring (L, "invalid schema argument");
+
+ return 2;
+ }
+
+ if (!ucl_object_validate (schema, parser->top_obj, &err)) {
+ lua_pushboolean (L, false);
+ lua_pushfstring (L, "validation error: "
+ "%s", err.msg);
+ }
+ else {
+ lua_pushboolean (L, true);
+ lua_pushnil (L);
+ }
+
+ ucl_object_unref (schema);
+ }
+ else {
+ lua_pushboolean (L, false);
+ lua_pushstring (L, "invalid parser or empty top object");
+ }
+
+ return 2;
+}
+
static int
lua_ucl_parser_gc (lua_State *L)
{
@@ -590,6 +732,161 @@ lua_ucl_parser_gc (lua_State *L)
return 0;
}
+/***
+ * @method object:unwrap()
+ * Unwraps opaque ucl object to the native lua object (performing copying)
+ * @return {variant} any lua object
+ */
+static int
+lua_ucl_object_unwrap (lua_State *L)
+{
+ ucl_object_t *obj;
+
+ obj = lua_ucl_object_get (L, 1);
+
+ if (obj) {
+ ucl_object_push_lua (L, obj, true);
+ }
+ else {
+ lua_pushnil (L);
+ }
+
+ return 1;
+}
+
+/***
+ * @method object:tostring(type)
+ * Unwraps opaque ucl object to string (json by default). Optionally you can
+ * specify output format:
+ *
+ * - `json` - fine printed json
+ * - `json-compact` - compacted json
+ * - `config` - fine printed configuration
+ * - `ucl` - same as `config`
+ * - `yaml` - embedded yaml
+ * @param {string} type optional
+ * @return {string} string representation of the opaque ucl object
+ */
+static int
+lua_ucl_object_tostring (lua_State *L)
+{
+ ucl_object_t *obj;
+ enum ucl_emitter format = UCL_EMIT_JSON_COMPACT;
+
+ obj = lua_ucl_object_get (L, 1);
+
+ if (obj) {
+ if (lua_gettop (L) > 1) {
+ if (lua_type (L, 2) == LUA_TSTRING) {
+ const char *strtype = lua_tostring (L, 2);
+
+ if (strcasecmp (strtype, "json") == 0) {
+ format = UCL_EMIT_JSON;
+ }
+ else if (strcasecmp (strtype, "json-compact") == 0) {
+ format = UCL_EMIT_JSON_COMPACT;
+ }
+ else if (strcasecmp (strtype, "yaml") == 0) {
+ format = UCL_EMIT_YAML;
+ }
+ else if (strcasecmp (strtype, "config") == 0 ||
+ strcasecmp (strtype, "ucl") == 0) {
+ format = UCL_EMIT_CONFIG;
+ }
+ }
+ }
+
+ return lua_ucl_to_string (L, obj, format);
+ }
+ else {
+ lua_pushnil (L);
+ }
+
+ return 1;
+}
+
+/***
+ * @method object:validate(schema, path)
+ * Validates the given ucl object using schema object represented as another
+ * opaque ucl object. You can also specify path in the form `#/path/def` to
+ * specify the specific schema element to perform validation.
+ *
+ * @param {ucl.object} schema schema object
+ * @param {string} path optional path for validation procedure
+ * @return {result,err} two values: boolean result and the corresponding error
+ */
+static int
+lua_ucl_object_validate (lua_State *L)
+{
+ ucl_object_t *obj, *schema;
+ const ucl_object_t *schema_elt;
+ bool res = false;
+ struct ucl_schema_error err;
+ const char *path = NULL;
+
+ obj = lua_ucl_object_get (L, 1);
+ schema = lua_ucl_object_get (L, 2);
+
+ if (schema && obj && ucl_object_type (schema) == UCL_OBJECT) {
+ if (lua_gettop (L) > 2 && lua_type (L, 3) == LUA_TSTRING) {
+ path = lua_tostring (L, 3);
+ if (path[0] == '#') {
+ path ++;
+ }
+ }
+
+ if (path) {
+ schema_elt = ucl_lookup_path_char (schema, path, '/');
+ }
+ else {
+ /* Use the top object */
+ schema_elt = schema;
+ }
+
+ if (schema_elt) {
+ res = ucl_object_validate (schema_elt, obj, &err);
+
+ if (res) {
+ lua_pushboolean (L, res);
+ lua_pushnil (L);
+ }
+ else {
+ lua_pushboolean (L, res);
+ lua_pushfstring (L, "validation error: %s", err.msg);
+ }
+ }
+ else {
+ lua_pushboolean (L, res);
+
+ if (path) {
+ lua_pushfstring (L, "cannot find the requested path: %s", path);
+ }
+ else {
+ /* Should not be reached */
+ lua_pushstring (L, "unknown error");
+ }
+ }
+ }
+ else {
+ lua_pushboolean (L, res);
+ lua_pushstring (L, "invalid object or schema");
+ }
+
+ return 2;
+}
+
+static int
+lua_ucl_object_gc (lua_State *L)
+{
+ ucl_object_t *obj;
+
+ obj = lua_ucl_object_get (L, 1);
+
+ ucl_object_unref (obj);
+
+ return 0;
+}
+
static void
lua_ucl_parser_mt (lua_State *L)
{
@@ -610,25 +907,45 @@ lua_ucl_parser_mt (lua_State *L)
lua_pushcfunction (L, lua_ucl_parser_get_object);
lua_setfield (L, -2, "get_object");
+ lua_pushcfunction (L, lua_ucl_parser_get_object_wrapped);
+ lua_setfield (L, -2, "get_object_wrapped");
+
+ lua_pushcfunction (L, lua_ucl_parser_validate);
+ lua_setfield (L, -2, "validate");
+
lua_pop (L, 1);
}
-static int
-lua_ucl_to_string (lua_State *L, const ucl_object_t *obj, enum ucl_emitter type)
+static void
+lua_ucl_object_mt (lua_State *L)
{
- unsigned char *result;
+ luaL_newmetatable (L, OBJECT_META);
- result = ucl_object_emit (obj, type);
+ lua_pushvalue(L, -1);
+ lua_setfield(L, -2, "__index");
- if (result != NULL) {
- lua_pushstring (L, (const char *)result);
- free (result);
- }
- else {
- lua_pushnil (L);
- }
+ lua_pushcfunction (L, lua_ucl_object_gc);
+ lua_setfield (L, -2, "__gc");
- return 1;
+ lua_pushcfunction (L, lua_ucl_object_tostring);
+ lua_setfield (L, -2, "__tostring");
+
+ lua_pushcfunction (L, lua_ucl_object_tostring);
+ lua_setfield (L, -2, "tostring");
+
+ lua_pushcfunction (L, lua_ucl_object_unwrap);
+ lua_setfield (L, -2, "unwrap");
+
+ lua_pushcfunction (L, lua_ucl_object_unwrap);
+ lua_setfield (L, -2, "tolua");
+
+ lua_pushcfunction (L, lua_ucl_object_validate);
+ lua_setfield (L, -2, "validate");
+
+ lua_pushstring (L, OBJECT_META);
+ lua_setfield (L, -2, "class");
+
+ lua_pop (L, 1);
}
static int
@@ -774,6 +1091,7 @@ luaopen_ucl (lua_State *L)
{
lua_ucl_parser_mt (L);
lua_ucl_null_mt (L);
+ lua_ucl_object_mt (L);
/* Create the refs weak table: */
lua_createtable (L, 0, 2);
diff --git a/contrib/libucl/m4/ax_lua.m4 b/contrib/libucl/m4/ax_lua.m4
new file mode 100644
index 0000000..f8e2fd4
--- /dev/null
+++ b/contrib/libucl/m4/ax_lua.m4
@@ -0,0 +1,664 @@
+# ===========================================================================
+# http://www.gnu.org/software/autoconf-archive/ax_lua.html
+# ===========================================================================
+#
+# SYNOPSIS
+#
+# AX_PROG_LUA[([MINIMUM-VERSION], [TOO-BIG-VERSION], [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])]
+# AX_LUA_HEADERS[([ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])]
+# AX_LUA_LIBS[([ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])]
+# AX_LUA_READLINE[([ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])]
+#
+# DESCRIPTION
+#
+# Detect a Lua interpreter, optionally specifying a minimum and maximum
+# version number. Set up important Lua paths, such as the directories in
+# which to install scripts and modules (shared libraries).
+#
+# Also detect Lua headers and libraries. The Lua version contained in the
+# header is checked to match the Lua interpreter version exactly. When
+# searching for Lua libraries, the version number is used as a suffix.
+# This is done with the goal of supporting multiple Lua installs (5.1,
+# 5.2, and 5.3 side-by-side).
+#
+# A note on compatibility with previous versions: This file has been
+# mostly rewritten for serial 18. Most developers should be able to use
+# these macros without needing to modify configure.ac. Care has been taken
+# to preserve each macro's behavior, but there are some differences:
+#
+# 1) AX_WITH_LUA is deprecated; it now expands to the exact same thing as
+# AX_PROG_LUA with no arguments.
+#
+# 2) AX_LUA_HEADERS now checks that the version number defined in lua.h
+# matches the interpreter version. AX_LUA_HEADERS_VERSION is therefore
+# unnecessary, so it is deprecated and does not expand to anything.
+#
+# 3) The configure flag --with-lua-suffix no longer exists; the user
+# should instead specify the LUA precious variable on the command line.
+# See the AX_PROG_LUA description for details.
+#
+# Please read the macro descriptions below for more information.
+#
+# This file was inspired by Andrew Dalke's and James Henstridge's
+# python.m4 and Tom Payne's, Matthieu Moy's, and Reuben Thomas's ax_lua.m4
+# (serial 17). Basically, this file is a mash-up of those two files. I
+# like to think it combines the best of the two!
+#
+# AX_PROG_LUA: Search for the Lua interpreter, and set up important Lua
+# paths. Adds precious variable LUA, which may contain the path of the Lua
+# interpreter. If LUA is blank, the user's path is searched for an
+# suitable interpreter.
+#
+# If MINIMUM-VERSION is supplied, then only Lua interpreters with a
+# version number greater or equal to MINIMUM-VERSION will be accepted. If
+# TOO-BIG-VERSION is also supplied, then only Lua interpreters with a
+# version number greater or equal to MINIMUM-VERSION and less than
+# TOO-BIG-VERSION will be accepted.
+#
+# The Lua version number, LUA_VERSION, is found from the interpreter, and
+# substituted. LUA_PLATFORM is also found, but not currently supported (no
+# standard representation).
+#
+# Finally, the macro finds four paths:
+#
+# luadir Directory to install Lua scripts.
+# pkgluadir $luadir/$PACKAGE
+# luaexecdir Directory to install Lua modules.
+# pkgluaexecdir $luaexecdir/$PACKAGE
+#
+# These paths are found based on $prefix, $exec_prefix, Lua's
+# package.path, and package.cpath. The first path of package.path
+# beginning with $prefix is selected as luadir. The first path of
+# package.cpath beginning with $exec_prefix is used as luaexecdir. This
+# should work on all reasonable Lua installations. If a path cannot be
+# determined, a default path is used. Of course, the user can override
+# these later when invoking make.
+#
+# luadir Default: $prefix/share/lua/$LUA_VERSION
+# luaexecdir Default: $exec_prefix/lib/lua/$LUA_VERSION
+#
+# These directories can be used by Automake as install destinations. The
+# variable name minus 'dir' needs to be used as a prefix to the
+# appropriate Automake primary, e.g. lua_SCRIPS or luaexec_LIBRARIES.
+#
+# If an acceptable Lua interpreter is found, then ACTION-IF-FOUND is
+# performed, otherwise ACTION-IF-NOT-FOUND is preformed. If ACTION-IF-NOT-
+# FOUND is blank, then it will default to printing an error. To prevent
+# the default behavior, give ':' as an action.
+#
+# AX_LUA_HEADERS: Search for Lua headers. Requires that AX_PROG_LUA be
+# expanded before this macro. Adds precious variable LUA_INCLUDE, which
+# may contain Lua specific include flags, e.g. -I/usr/include/lua5.1. If
+# LUA_INCLUDE is blank, then this macro will attempt to find suitable
+# flags.
+#
+# LUA_INCLUDE can be used by Automake to compile Lua modules or
+# executables with embedded interpreters. The *_CPPFLAGS variables should
+# be used for this purpose, e.g. myprog_CPPFLAGS = $(LUA_INCLUDE).
+#
+# This macro searches for the header lua.h (and others). The search is
+# performed with a combination of CPPFLAGS, CPATH, etc, and LUA_INCLUDE.
+# If the search is unsuccessful, then some common directories are tried.
+# If the headers are then found, then LUA_INCLUDE is set accordingly.
+#
+# The paths automatically searched are:
+#
+# * /usr/include/luaX.Y
+# * /usr/include/lua/X.Y
+# * /usr/include/luaXY
+# * /usr/local/include/luaX.Y
+# * /usr/local/include/lua-X.Y
+# * /usr/local/include/lua/X.Y
+# * /usr/local/include/luaXY
+#
+# (Where X.Y is the Lua version number, e.g. 5.1.)
+#
+# The Lua version number found in the headers is always checked to match
+# the Lua interpreter's version number. Lua headers with mismatched
+# version numbers are not accepted.
+#
+# If headers are found, then ACTION-IF-FOUND is performed, otherwise
+# ACTION-IF-NOT-FOUND is performed. If ACTION-IF-NOT-FOUND is blank, then
+# it will default to printing an error. To prevent the default behavior,
+# set the action to ':'.
+#
+# AX_LUA_LIBS: Search for Lua libraries. Requires that AX_PROG_LUA be
+# expanded before this macro. Adds precious variable LUA_LIB, which may
+# contain Lua specific linker flags, e.g. -llua5.1. If LUA_LIB is blank,
+# then this macro will attempt to find suitable flags.
+#
+# LUA_LIB can be used by Automake to link Lua modules or executables with
+# embedded interpreters. The *_LIBADD and *_LDADD variables should be used
+# for this purpose, e.g. mymod_LIBADD = $(LUA_LIB).
+#
+# This macro searches for the Lua library. More technically, it searches
+# for a library containing the function lua_load. The search is performed
+# with a combination of LIBS, LIBRARY_PATH, and LUA_LIB.
+#
+# If the search determines that some linker flags are missing, then those
+# flags will be added to LUA_LIB.
+#
+# If libraries are found, then ACTION-IF-FOUND is performed, otherwise
+# ACTION-IF-NOT-FOUND is performed. If ACTION-IF-NOT-FOUND is blank, then
+# it will default to printing an error. To prevent the default behavior,
+# set the action to ':'.
+#
+# AX_LUA_READLINE: Search for readline headers and libraries. Requires the
+# AX_LIB_READLINE macro, which is provided by ax_lib_readline.m4 from the
+# Autoconf Archive.
+#
+# If a readline compatible library is found, then ACTION-IF-FOUND is
+# performed, otherwise ACTION-IF-NOT-FOUND is performed.
+#
+# LICENSE
+#
+# Copyright (c) 2015 Reuben Thomas <rrt@sc3d.org>
+# Copyright (c) 2014 Tim Perkins <tprk77@gmail.com>
+#
+# This program is free software: you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by the
+# Free Software Foundation, either version 3 of the License, or (at your
+# option) any later version.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
+# Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+# As a special exception, the respective Autoconf Macro's copyright owner
+# gives unlimited permission to copy, distribute and modify the configure
+# scripts that are the output of Autoconf when processing the Macro. You
+# need not follow the terms of the GNU General Public License when using
+# or distributing such scripts, even though portions of the text of the
+# Macro appear in them. The GNU General Public License (GPL) does govern
+# all other use of the material that constitutes the Autoconf Macro.
+#
+# This special exception to the GPL applies to versions of the Autoconf
+# Macro released by the Autoconf Archive. When you make and distribute a
+# modified version of the Autoconf Macro, you may extend this special
+# exception to the GPL to apply to your modified version as well.
+
+#serial 39
+
+dnl =========================================================================
+dnl AX_PROG_LUA([MINIMUM-VERSION], [TOO-BIG-VERSION],
+dnl [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
+dnl =========================================================================
+AC_DEFUN([AX_PROG_LUA],
+[
+ dnl Check for required tools.
+ AC_REQUIRE([AC_PROG_GREP])
+ AC_REQUIRE([AC_PROG_SED])
+
+ dnl Make LUA a precious variable.
+ AC_ARG_VAR([LUA], [The Lua interpreter, e.g. /usr/bin/lua5.1])
+
+ dnl Find a Lua interpreter.
+ m4_define_default([_AX_LUA_INTERPRETER_LIST],
+ [lua lua5.3 lua53 lua5.2 lua52 lua5.1 lua51 lua50])
+
+ m4_if([$1], [],
+ [ dnl No version check is needed. Find any Lua interpreter.
+ AS_IF([test "x$LUA" = 'x'],
+ [AC_PATH_PROGS([LUA], [_AX_LUA_INTERPRETER_LIST], [:])])
+ ax_display_LUA='lua'
+
+ AS_IF([test "x$LUA" != 'x:'],
+ [ dnl At least check if this is a Lua interpreter.
+ AC_MSG_CHECKING([if $LUA is a Lua interpreter])
+ _AX_LUA_CHK_IS_INTRP([$LUA],
+ [AC_MSG_RESULT([yes])],
+ [ AC_MSG_RESULT([no])
+ AC_MSG_ERROR([not a Lua interpreter])
+ ])
+ ])
+ ],
+ [ dnl A version check is needed.
+ AS_IF([test "x$LUA" != 'x'],
+ [ dnl Check if this is a Lua interpreter.
+ AC_MSG_CHECKING([if $LUA is a Lua interpreter])
+ _AX_LUA_CHK_IS_INTRP([$LUA],
+ [AC_MSG_RESULT([yes])],
+ [ AC_MSG_RESULT([no])
+ AC_MSG_ERROR([not a Lua interpreter])
+ ])
+ dnl Check the version.
+ m4_if([$2], [],
+ [_ax_check_text="whether $LUA version >= $1"],
+ [_ax_check_text="whether $LUA version >= $1, < $2"])
+ AC_MSG_CHECKING([$_ax_check_text])
+ _AX_LUA_CHK_VER([$LUA], [$1], [$2],
+ [AC_MSG_RESULT([yes])],
+ [ AC_MSG_RESULT([no])
+ AC_MSG_ERROR([version is out of range for specified LUA])])
+ ax_display_LUA=$LUA
+ ],
+ [ dnl Try each interpreter until we find one that satisfies VERSION.
+ m4_if([$2], [],
+ [_ax_check_text="for a Lua interpreter with version >= $1"],
+ [_ax_check_text="for a Lua interpreter with version >= $1, < $2"])
+ AC_CACHE_CHECK([$_ax_check_text],
+ [ax_cv_pathless_LUA],
+ [ for ax_cv_pathless_LUA in _AX_LUA_INTERPRETER_LIST none; do
+ test "x$ax_cv_pathless_LUA" = 'xnone' && break
+ _AX_LUA_CHK_IS_INTRP([$ax_cv_pathless_LUA], [], [continue])
+ _AX_LUA_CHK_VER([$ax_cv_pathless_LUA], [$1], [$2], [break])
+ done
+ ])
+ dnl Set $LUA to the absolute path of $ax_cv_pathless_LUA.
+ AS_IF([test "x$ax_cv_pathless_LUA" = 'xnone'],
+ [LUA=':'],
+ [AC_PATH_PROG([LUA], [$ax_cv_pathless_LUA])])
+ ax_display_LUA=$ax_cv_pathless_LUA
+ ])
+ ])
+
+ AS_IF([test "x$LUA" = 'x:'],
+ [ dnl Run any user-specified action, or abort.
+ m4_default([$4], [AC_MSG_ERROR([cannot find suitable Lua interpreter])])
+ ],
+ [ dnl Query Lua for its version number.
+ AC_CACHE_CHECK([for $ax_display_LUA version],
+ [ax_cv_lua_version],
+ [ dnl Get the interpreter version in X.Y format. This should work for
+ dnl interpreters version 5.0 and beyond.
+ ax_cv_lua_version=[`$LUA -e '
+ -- return a version number in X.Y format
+ local _, _, ver = string.find(_VERSION, "^Lua (%d+%.%d+)")
+ print(ver)'`]
+ ])
+ AS_IF([test "x$ax_cv_lua_version" = 'x'],
+ [AC_MSG_ERROR([invalid Lua version number])])
+ AC_SUBST([LUA_VERSION], [$ax_cv_lua_version])
+ AC_SUBST([LUA_SHORT_VERSION], [`echo "$LUA_VERSION" | $SED 's|\.||'`])
+
+ dnl The following check is not supported:
+ dnl At times (like when building shared libraries) you may want to know
+ dnl which OS platform Lua thinks this is.
+ AC_CACHE_CHECK([for $ax_display_LUA platform],
+ [ax_cv_lua_platform],
+ [ax_cv_lua_platform=[`$LUA -e 'print("unknown")'`]])
+ AC_SUBST([LUA_PLATFORM], [$ax_cv_lua_platform])
+
+ dnl Use the values of $prefix and $exec_prefix for the corresponding
+ dnl values of LUA_PREFIX and LUA_EXEC_PREFIX. These are made distinct
+ dnl variables so they can be overridden if need be. However, the general
+ dnl consensus is that you shouldn't need this ability.
+ AC_SUBST([LUA_PREFIX], ['${prefix}'])
+ AC_SUBST([LUA_EXEC_PREFIX], ['${exec_prefix}'])
+
+ dnl Lua provides no way to query the script directory, and instead
+ dnl provides LUA_PATH. However, we should be able to make a safe educated
+ dnl guess. If the built-in search path contains a directory which is
+ dnl prefixed by $prefix, then we can store scripts there. The first
+ dnl matching path will be used.
+ AC_CACHE_CHECK([for $ax_display_LUA script directory],
+ [ax_cv_lua_luadir],
+ [ AS_IF([test "x$prefix" = 'xNONE'],
+ [ax_lua_prefix=$ac_default_prefix],
+ [ax_lua_prefix=$prefix])
+
+ dnl Initialize to the default path.
+ ax_cv_lua_luadir="$LUA_PREFIX/share/lua/$LUA_VERSION"
+
+ dnl Try to find a path with the prefix.
+ _AX_LUA_FND_PRFX_PTH([$LUA], [$ax_lua_prefix], [script])
+ AS_IF([test "x$ax_lua_prefixed_path" != 'x'],
+ [ dnl Fix the prefix.
+ _ax_strip_prefix=`echo "$ax_lua_prefix" | $SED 's|.|.|g'`
+ ax_cv_lua_luadir=`echo "$ax_lua_prefixed_path" | \
+ $SED "s|^$_ax_strip_prefix|$LUA_PREFIX|"`
+ ])
+ ])
+ AC_SUBST([luadir], [$ax_cv_lua_luadir])
+ AC_SUBST([pkgluadir], [\${luadir}/$PACKAGE])
+
+ dnl Lua provides no way to query the module directory, and instead
+ dnl provides LUA_PATH. However, we should be able to make a safe educated
+ dnl guess. If the built-in search path contains a directory which is
+ dnl prefixed by $exec_prefix, then we can store modules there. The first
+ dnl matching path will be used.
+ AC_CACHE_CHECK([for $ax_display_LUA module directory],
+ [ax_cv_lua_luaexecdir],
+ [ AS_IF([test "x$exec_prefix" = 'xNONE'],
+ [ax_lua_exec_prefix=$ax_lua_prefix],
+ [ax_lua_exec_prefix=$exec_prefix])
+
+ dnl Initialize to the default path.
+ ax_cv_lua_luaexecdir="$LUA_EXEC_PREFIX/lib/lua/$LUA_VERSION"
+
+ dnl Try to find a path with the prefix.
+ _AX_LUA_FND_PRFX_PTH([$LUA],
+ [$ax_lua_exec_prefix], [module])
+ AS_IF([test "x$ax_lua_prefixed_path" != 'x'],
+ [ dnl Fix the prefix.
+ _ax_strip_prefix=`echo "$ax_lua_exec_prefix" | $SED 's|.|.|g'`
+ ax_cv_lua_luaexecdir=`echo "$ax_lua_prefixed_path" | \
+ $SED "s|^$_ax_strip_prefix|$LUA_EXEC_PREFIX|"`
+ ])
+ ])
+ AC_SUBST([luaexecdir], [$ax_cv_lua_luaexecdir])
+ AC_SUBST([pkgluaexecdir], [\${luaexecdir}/$PACKAGE])
+
+ dnl Run any user specified action.
+ $3
+ ])
+])
+
+dnl AX_WITH_LUA is now the same thing as AX_PROG_LUA.
+AC_DEFUN([AX_WITH_LUA],
+[
+ AC_MSG_WARN([[$0 is deprecated, please use AX_PROG_LUA instead]])
+ AX_PROG_LUA
+])
+
+
+dnl =========================================================================
+dnl _AX_LUA_CHK_IS_INTRP(PROG, [ACTION-IF-TRUE], [ACTION-IF-FALSE])
+dnl =========================================================================
+AC_DEFUN([_AX_LUA_CHK_IS_INTRP],
+[
+ dnl A minimal Lua factorial to prove this is an interpreter. This should work
+ dnl for Lua interpreters version 5.0 and beyond.
+ _ax_lua_factorial=[`$1 2>/dev/null -e '
+ -- a simple factorial
+ function fact (n)
+ if n == 0 then
+ return 1
+ else
+ return n * fact(n-1)
+ end
+ end
+ print("fact(5) is " .. fact(5))'`]
+ AS_IF([test "$_ax_lua_factorial" = 'fact(5) is 120'],
+ [$2], [$3])
+])
+
+
+dnl =========================================================================
+dnl _AX_LUA_CHK_VER(PROG, MINIMUM-VERSION, [TOO-BIG-VERSION],
+dnl [ACTION-IF-TRUE], [ACTION-IF-FALSE])
+dnl =========================================================================
+AC_DEFUN([_AX_LUA_CHK_VER],
+[
+ dnl Check that the Lua version is within the bounds. Only the major and minor
+ dnl version numbers are considered. This should work for Lua interpreters
+ dnl version 5.0 and beyond.
+ _ax_lua_good_version=[`$1 -e '
+ -- a script to compare versions
+ function verstr2num(verstr)
+ local _, _, majorver, minorver = string.find(verstr, "^(%d+)%.(%d+)")
+ if majorver and minorver then
+ return tonumber(majorver) * 100 + tonumber(minorver)
+ end
+ end
+ local minver = verstr2num("$2")
+ local _, _, trimver = string.find(_VERSION, "^Lua (.*)")
+ local ver = verstr2num(trimver)
+ local maxver = verstr2num("$3") or 1e9
+ if minver <= ver and ver < maxver then
+ print("yes")
+ else
+ print("no")
+ end'`]
+ AS_IF([test "x$_ax_lua_good_version" = "xyes"],
+ [$4], [$5])
+])
+
+
+dnl =========================================================================
+dnl _AX_LUA_FND_PRFX_PTH(PROG, PREFIX, SCRIPT-OR-MODULE-DIR)
+dnl =========================================================================
+AC_DEFUN([_AX_LUA_FND_PRFX_PTH],
+[
+ dnl Get the script or module directory by querying the Lua interpreter,
+ dnl filtering on the given prefix, and selecting the shallowest path. If no
+ dnl path is found matching the prefix, the result will be an empty string.
+ dnl The third argument determines the type of search, it can be 'script' or
+ dnl 'module'. Supplying 'script' will perform the search with package.path
+ dnl and LUA_PATH, and supplying 'module' will search with package.cpath and
+ dnl LUA_CPATH. This is done for compatibility with Lua 5.0.
+
+ ax_lua_prefixed_path=[`$1 -e '
+ -- get the path based on search type
+ local searchtype = "$3"
+ local paths = ""
+ if searchtype == "script" then
+ paths = (package and package.path) or LUA_PATH
+ elseif searchtype == "module" then
+ paths = (package and package.cpath) or LUA_CPATH
+ end
+ -- search for the prefix
+ local prefix = "'$2'"
+ local minpath = ""
+ local mindepth = 1e9
+ string.gsub(paths, "(@<:@^;@:>@+)",
+ function (path)
+ path = string.gsub(path, "%?.*$", "")
+ path = string.gsub(path, "/@<:@^/@:>@*$", "")
+ if string.find(path, prefix) then
+ local depth = string.len(string.gsub(path, "@<:@^/@:>@", ""))
+ if depth < mindepth then
+ minpath = path
+ mindepth = depth
+ end
+ end
+ end)
+ print(minpath)'`]
+])
+
+
+dnl =========================================================================
+dnl AX_LUA_HEADERS([ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
+dnl =========================================================================
+AC_DEFUN([AX_LUA_HEADERS],
+[
+ dnl Check for LUA_VERSION.
+ AC_MSG_CHECKING([if LUA_VERSION is defined])
+ AS_IF([test "x$LUA_VERSION" != 'x'],
+ [AC_MSG_RESULT([yes])],
+ [ AC_MSG_RESULT([no])
+ AC_MSG_ERROR([cannot check Lua headers without knowing LUA_VERSION])
+ ])
+
+ dnl Make LUA_INCLUDE a precious variable.
+ AC_ARG_VAR([LUA_INCLUDE], [The Lua includes, e.g. -I/usr/include/lua5.1])
+
+ dnl Some default directories to search.
+ LUA_SHORT_VERSION=`echo "$LUA_VERSION" | $SED 's|\.||'`
+ m4_define_default([_AX_LUA_INCLUDE_LIST],
+ [ /usr/include/lua$LUA_VERSION \
+ /usr/include/lua-$LUA_VERSION \
+ /usr/include/lua/$LUA_VERSION \
+ /usr/include/lua$LUA_SHORT_VERSION \
+ /usr/local/include/lua$LUA_VERSION \
+ /usr/local/include/lua-$LUA_VERSION \
+ /usr/local/include/lua/$LUA_VERSION \
+ /usr/local/include/lua$LUA_SHORT_VERSION \
+ ])
+
+ dnl Try to find the headers.
+ _ax_lua_saved_cppflags=$CPPFLAGS
+ CPPFLAGS="$CPPFLAGS $LUA_INCLUDE"
+ AC_CHECK_HEADERS([lua.h lualib.h lauxlib.h luaconf.h])
+ CPPFLAGS=$_ax_lua_saved_cppflags
+
+ dnl Try some other directories if LUA_INCLUDE was not set.
+ AS_IF([test "x$LUA_INCLUDE" = 'x' &&
+ test "x$ac_cv_header_lua_h" != 'xyes'],
+ [ dnl Try some common include paths.
+ for _ax_include_path in _AX_LUA_INCLUDE_LIST; do
+ test ! -d "$_ax_include_path" && continue
+
+ AC_MSG_CHECKING([for Lua headers in])
+ AC_MSG_RESULT([$_ax_include_path])
+
+ AS_UNSET([ac_cv_header_lua_h])
+ AS_UNSET([ac_cv_header_lualib_h])
+ AS_UNSET([ac_cv_header_lauxlib_h])
+ AS_UNSET([ac_cv_header_luaconf_h])
+
+ _ax_lua_saved_cppflags=$CPPFLAGS
+ CPPFLAGS="$CPPFLAGS -I$_ax_include_path"
+ AC_CHECK_HEADERS([lua.h lualib.h lauxlib.h luaconf.h])
+ CPPFLAGS=$_ax_lua_saved_cppflags
+
+ AS_IF([test "x$ac_cv_header_lua_h" = 'xyes'],
+ [ LUA_INCLUDE="-I$_ax_include_path"
+ break
+ ])
+ done
+ ])
+
+ AS_IF([test "x$ac_cv_header_lua_h" = 'xyes'],
+ [ dnl Make a program to print LUA_VERSION defined in the header.
+ dnl TODO It would be really nice if we could do this without compiling a
+ dnl program, then it would work when cross compiling. But I'm not sure how
+ dnl to do this reliably. For now, assume versions match when cross compiling.
+
+ AS_IF([test "x$cross_compiling" != 'xyes'],
+ [ AC_CACHE_CHECK([for Lua header version],
+ [ax_cv_lua_header_version],
+ [ _ax_lua_saved_cppflags=$CPPFLAGS
+ CPPFLAGS="$CPPFLAGS $LUA_INCLUDE"
+ AC_RUN_IFELSE(
+ [ AC_LANG_SOURCE([[
+#include <lua.h>
+#include <stdlib.h>
+#include <stdio.h>
+int main(int argc, char ** argv)
+{
+ if(argc > 1) printf("%s", LUA_VERSION);
+ exit(EXIT_SUCCESS);
+}
+]])
+ ],
+ [ ax_cv_lua_header_version=`./conftest$EXEEXT p | \
+ $SED -n "s|^Lua \(@<:@0-9@:>@\{1,\}\.@<:@0-9@:>@\{1,\}\).\{0,\}|\1|p"`
+ ],
+ [ax_cv_lua_header_version='unknown'])
+ CPPFLAGS=$_ax_lua_saved_cppflags
+ ])
+
+ dnl Compare this to the previously found LUA_VERSION.
+ AC_MSG_CHECKING([if Lua header version matches $LUA_VERSION])
+ AS_IF([test "x$ax_cv_lua_header_version" = "x$LUA_VERSION"],
+ [ AC_MSG_RESULT([yes])
+ ax_header_version_match='yes'
+ ],
+ [ AC_MSG_RESULT([no])
+ ax_header_version_match='no'
+ ])
+ ],
+ [ AC_MSG_WARN([cross compiling so assuming header version number matches])
+ ax_header_version_match='yes'
+ ])
+ ])
+
+ dnl Was LUA_INCLUDE specified?
+ AS_IF([test "x$ax_header_version_match" != 'xyes' &&
+ test "x$LUA_INCLUDE" != 'x'],
+ [AC_MSG_ERROR([cannot find headers for specified LUA_INCLUDE])])
+
+ dnl Test the final result and run user code.
+ AS_IF([test "x$ax_header_version_match" = 'xyes'], [$1],
+ [m4_default([$2], [AC_MSG_ERROR([cannot find Lua includes])])])
+])
+
+dnl AX_LUA_HEADERS_VERSION no longer exists, use AX_LUA_HEADERS.
+AC_DEFUN([AX_LUA_HEADERS_VERSION],
+[
+ AC_MSG_WARN([[$0 is deprecated, please use AX_LUA_HEADERS instead]])
+])
+
+
+dnl =========================================================================
+dnl AX_LUA_LIBS([ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
+dnl =========================================================================
+AC_DEFUN([AX_LUA_LIBS],
+[
+ dnl TODO Should this macro also check various -L flags?
+
+ dnl Check for LUA_VERSION.
+ AC_MSG_CHECKING([if LUA_VERSION is defined])
+ AS_IF([test "x$LUA_VERSION" != 'x'],
+ [AC_MSG_RESULT([yes])],
+ [ AC_MSG_RESULT([no])
+ AC_MSG_ERROR([cannot check Lua libs without knowing LUA_VERSION])
+ ])
+
+ dnl Make LUA_LIB a precious variable.
+ AC_ARG_VAR([LUA_LIB], [The Lua library, e.g. -llua5.1])
+
+ AS_IF([test "x$LUA_LIB" != 'x'],
+ [ dnl Check that LUA_LIBS works.
+ _ax_lua_saved_libs=$LIBS
+ LIBS="$LUA_LIB $LIBS"
+ AC_SEARCH_LIBS([lua_load], [],
+ [_ax_found_lua_libs='yes'],
+ [_ax_found_lua_libs='no'])
+ LIBS=$_ax_lua_saved_libs
+
+ dnl Check the result.
+ AS_IF([test "x$_ax_found_lua_libs" != 'xyes'],
+ [AC_MSG_ERROR([cannot find libs for specified LUA_LIB])])
+ ],
+ [ dnl First search for extra libs.
+ _ax_lua_extra_libs=''
+
+ _ax_lua_saved_libs=$LIBS
+ LIBS="$LUA_LIB $LIBS"
+ AC_SEARCH_LIBS([exp], [m])
+ AC_SEARCH_LIBS([dlopen], [dl])
+ LIBS=$_ax_lua_saved_libs
+
+ AS_IF([test "x$ac_cv_search_exp" != 'xno' &&
+ test "x$ac_cv_search_exp" != 'xnone required'],
+ [_ax_lua_extra_libs="$_ax_lua_extra_libs $ac_cv_search_exp"])
+
+ AS_IF([test "x$ac_cv_search_dlopen" != 'xno' &&
+ test "x$ac_cv_search_dlopen" != 'xnone required'],
+ [_ax_lua_extra_libs="$_ax_lua_extra_libs $ac_cv_search_dlopen"])
+
+ dnl Try to find the Lua libs.
+ _ax_lua_saved_libs=$LIBS
+ LIBS="$LUA_LIB $LIBS"
+ AC_SEARCH_LIBS([lua_load],
+ [ lua$LUA_VERSION \
+ lua$LUA_SHORT_VERSION \
+ lua-$LUA_VERSION \
+ lua-$LUA_SHORT_VERSION \
+ lua \
+ ],
+ [_ax_found_lua_libs='yes'],
+ [_ax_found_lua_libs='no'],
+ [$_ax_lua_extra_libs])
+ LIBS=$_ax_lua_saved_libs
+
+ AS_IF([test "x$ac_cv_search_lua_load" != 'xno' &&
+ test "x$ac_cv_search_lua_load" != 'xnone required'],
+ [LUA_LIB="$ac_cv_search_lua_load $_ax_lua_extra_libs"])
+ ])
+
+ dnl Test the result and run user code.
+ AS_IF([test "x$_ax_found_lua_libs" = 'xyes'], [$1],
+ [m4_default([$2], [AC_MSG_ERROR([cannot find Lua libs])])])
+])
+
+
+dnl =========================================================================
+dnl AX_LUA_READLINE([ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
+dnl =========================================================================
+AC_DEFUN([AX_LUA_READLINE],
+[
+ AX_LIB_READLINE
+ AS_IF([test "x$ac_cv_header_readline_readline_h" != 'x' &&
+ test "x$ac_cv_header_readline_history_h" != 'x'],
+ [ LUA_LIBS_CFLAGS="-DLUA_USE_READLINE $LUA_LIBS_CFLAGS"
+ $1
+ ],
+ [$2])
+])
diff --git a/contrib/libucl/python/setup.py b/contrib/libucl/python/setup.py
new file mode 100644
index 0000000..b2b8981
--- /dev/null
+++ b/contrib/libucl/python/setup.py
@@ -0,0 +1,37 @@
+import distutils.ccompiler
+import distutils.sysconfig
+from distutils.core import setup, Extension
+import os
+
+
+compiler = distutils.ccompiler.new_compiler()
+search_paths=[os.path.expanduser('~/{}'), '/opt/local/{}', '/usr/local/{}', '/usr/{}']
+lib_paths = [ a.format("lib") for a in search_paths]
+inc_paths = [ a.format("include") for a in search_paths]
+
+uclmodule = Extension('ucl',
+ include_dirs = inc_paths,
+ library_dirs = lib_paths,
+ libraries = ['ucl'],
+ sources = ['src/uclmodule.c'],
+ runtime_library_dirs = lib_paths,
+ language='c')
+
+setup(name='ucl',
+ version='1.0',
+ description='ucl parser and emmitter',
+ ext_modules = [uclmodule],
+ author="Eitan Adler",
+ author_email="lists@eitanadler.com",
+ url="https://github.com/vstakhov/libucl/",
+ license="MIT",
+ classifiers=["Development Status :: 3 - Alpha",
+ "Intended Audience :: Developers",
+ "License :: DFSG approved",
+ "License :: OSI Approved :: MIT License",
+ "Programming Language :: C",
+ "Programming Language :: Python :: 3",
+ "Programming Language :: Python :: Implementation :: CPython",
+ "Topic :: Software Development :: Libraries",
+ ]
+ )
diff --git a/contrib/libucl/python/src/uclmodule.c b/contrib/libucl/python/src/uclmodule.c
new file mode 100644
index 0000000..d63b73a
--- /dev/null
+++ b/contrib/libucl/python/src/uclmodule.c
@@ -0,0 +1,156 @@
+// Attempts to load a UCL structure from a string
+#include <ucl.h>
+#include <Python.h>
+
+static PyObject*
+_basic_ucl_type(ucl_object_t const * const obj) {
+ if (obj->type == UCL_INT) {
+ return Py_BuildValue("L", (long long)ucl_object_toint (obj));
+ }
+ else if (obj->type == UCL_FLOAT) {
+ return Py_BuildValue("d", ucl_object_todouble (obj));
+ }
+ else if (obj->type == UCL_STRING) {
+ return Py_BuildValue("s", ucl_object_tostring (obj));
+ }
+ else if (obj->type == UCL_BOOLEAN) {
+ // maybe used 'p' here?
+ return Py_BuildValue("s", ucl_object_tostring_forced (obj));
+ }
+ else if (obj->type == UCL_TIME) {
+ return Py_BuildValue("d", ucl_object_todouble (obj));
+ }
+ return NULL;
+}
+
+static PyObject*
+_iterate_valid_ucl(ucl_object_t const * obj) {
+ const ucl_object_t *tmp;
+ ucl_object_iter_t it = NULL;
+
+ tmp = obj;
+
+ while ((obj = ucl_iterate_object (tmp, &it, false))) {
+
+ PyObject* val;
+
+ val = _basic_ucl_type(obj);
+ if (!val) {
+ PyObject* key = NULL;
+ if (obj->key != NULL) {
+ key = Py_BuildValue("s", ucl_object_key(obj));
+ }
+
+ PyObject* ret;
+ ret = PyDict_New();
+ if (obj->type == UCL_OBJECT) {
+ val = PyDict_New();
+ const ucl_object_t *cur;
+ ucl_object_iter_t it_obj = NULL;
+ while ((cur = ucl_iterate_object (obj, &it_obj, true))) {
+ PyObject* keyobj = Py_BuildValue("s",ucl_object_key(cur));
+ PyDict_SetItem(val, keyobj, _iterate_valid_ucl(cur));
+ }
+ }
+ else if (obj->type == UCL_ARRAY) {
+ val = PyList_New(0);
+ const ucl_object_t *cur;
+ ucl_object_iter_t it_obj = NULL;
+ while ((cur = ucl_iterate_object (obj, &it_obj, true))) {
+ PyList_Append(val, _iterate_valid_ucl(cur));
+ }
+ }
+ else if (obj->type == UCL_USERDATA) {
+ // XXX: this should be
+ // PyBytes_FromStringAndSize; where is the
+ // length from?
+ val = PyBytes_FromString(obj->value.ud);
+ }
+ }
+ return val;
+ }
+
+ PyErr_SetString(PyExc_SystemError, "unhandled type");
+ return NULL;
+}
+
+static PyObject*
+_internal_load_ucl(char* uclstr) {
+ PyObject* ret;
+
+ struct ucl_parser *parser = ucl_parser_new (UCL_PARSER_NO_TIME);
+
+ bool r = ucl_parser_add_string(parser, uclstr, 0);
+ if (r) {
+ if (ucl_parser_get_error (parser)) {
+ PyErr_SetString(PyExc_ValueError, ucl_parser_get_error(parser));
+ ucl_parser_free(parser);
+ ret = NULL;
+ goto return_with_parser;
+ } else {
+ ucl_object_t* uclobj = ucl_parser_get_object(parser);
+ ret = _iterate_valid_ucl(uclobj);
+ ucl_object_unref(uclobj);
+ goto return_with_parser;
+ }
+
+ } else {
+ PyErr_SetString(PyExc_ValueError, ucl_parser_get_error (parser));
+ ret = NULL;
+ goto return_with_parser;
+ }
+
+return_with_parser:
+ ucl_parser_free(parser);
+ return ret;
+}
+
+static PyObject*
+ucl_load(PyObject *self, PyObject *args) {
+ char* uclstr;
+ if (PyArg_ParseTuple(args, "z", &uclstr)) {
+ if (!uclstr) {
+ Py_RETURN_NONE;
+ }
+ return _internal_load_ucl(uclstr);
+ }
+ return NULL;
+}
+
+static PyObject*
+ucl_validate(PyObject *self, PyObject *args) {
+ char *uclstr, *schema;
+ if (PyArg_ParseTuple(args, "zz", &uclstr, &schema)) {
+ if (!uclstr || !schema) {
+ Py_RETURN_NONE;
+ }
+ PyErr_SetString(PyExc_NotImplementedError, "schema validation is not yet supported");
+ return NULL;
+ }
+ return NULL;
+}
+
+static PyMethodDef uclMethods[] = {
+ {"load", ucl_load, METH_VARARGS, "Load UCL from stream"},
+ {"validate", ucl_validate, METH_VARARGS, "Validate ucl stream against schema"},
+ {NULL, NULL, 0, NULL}
+};
+
+#if PY_MAJOR_VERSION >= 3
+static struct PyModuleDef uclmodule = {
+ PyModuleDef_HEAD_INIT,
+ "ucl",
+ NULL,
+ -1,
+ uclMethods
+};
+
+PyMODINIT_FUNC
+PyInit_ucl(void) {
+ return PyModule_Create(&uclmodule);
+}
+#else
+void initucl(void) {
+ Py_InitModule("ucl", uclMethods);
+}
+#endif
diff --git a/contrib/libucl/python/test.sh b/contrib/libucl/python/test.sh
new file mode 100755
index 0000000..53af6a3
--- /dev/null
+++ b/contrib/libucl/python/test.sh
@@ -0,0 +1,6 @@
+#!/bin/sh
+set -xe
+python3.4 setup.py build_ext --inplace
+./test_uclmodule.py -v
+rm -rfv build
+rm ucl.so
diff --git a/contrib/libucl/python/test_uclmodule.py b/contrib/libucl/python/test_uclmodule.py
new file mode 100755
index 0000000..de295dc
--- /dev/null
+++ b/contrib/libucl/python/test_uclmodule.py
@@ -0,0 +1,100 @@
+#!/usr/bin/env python
+import json
+import unittest
+import ucl
+import sys
+
+if sys.version_info[:2] == (2, 7):
+ unittest.TestCase.assertRaisesRegex = unittest.TestCase.assertRaisesRegexp
+
+
+class TestUcl(unittest.TestCase):
+ def test_no_args(self):
+ with self.assertRaises(TypeError):
+ ucl.load()
+
+ def test_multi_args(self):
+ with self.assertRaises(TypeError):
+ ucl.load(0,0)
+
+ def test_none(self):
+ r = ucl.load(None)
+ self.assertEqual(r, None)
+
+ def test_int(self):
+ r = ucl.load("a : 1")
+ self.assertEqual(ucl.load("a : 1"), { "a" : 1 } )
+
+ def test_braced_int(self):
+ self.assertEqual(ucl.load("{a : 1}"), { "a" : 1 } )
+
+ def test_nested_int(self):
+ self.assertEqual(ucl.load("a : { b : 1 }"), { "a" : { "b" : 1 } })
+
+ def test_str(self):
+ self.assertEqual(ucl.load("a : b"), {"a" : "b"})
+
+ def test_float(self):
+ self.assertEqual(ucl.load("a : 1.1"), {"a" : 1.1})
+
+ def test_empty_ucl(self):
+ r = ucl.load("{}")
+ self.assertEqual(r, {})
+
+ def test_single_brace(self):
+ self.assertEqual(ucl.load("{"), {})
+
+ def test_single_back_brace(self):
+ ucl.load("}")
+
+ def test_single_square_forward(self):
+ self.assertEqual(ucl.load("["), [])
+
+ def test_invalid_ucl(self):
+ with self.assertRaisesRegex(ValueError, "unfinished key$"):
+ ucl.load('{ "var"')
+
+ def test_comment_ignored(self):
+ self.assertEqual(ucl.load("{/*1*/}"), {})
+
+ def test_1_in(self):
+ with open("../tests/basic/1.in", "r") as in1:
+ self.assertEqual(ucl.load(in1.read()), {'key1': 'value'})
+
+ def test_every_type(self):
+ totest="""{
+ "key1": value;
+ "key2": value2;
+ "key3": "value;"
+ "key4": 1.0,
+ "key5": -0xdeadbeef
+ "key6": 0xdeadbeef.1
+ "key7": 0xreadbeef
+ "key8": -1e-10,
+ "key9": 1
+ "key10": true
+ "key11": no
+ "key12": yes
+ }"""
+ correct = {
+ 'key1': 'value',
+ 'key2': 'value2',
+ 'key3': 'value;',
+ 'key4': 1.0,
+ 'key5': -3735928559,
+ 'key6': '0xdeadbeef.1',
+ 'key7': '0xreadbeef',
+ 'key8': -1e-10,
+ 'key9': 1,
+ 'key10': 'true',
+ 'key11': 'false',
+ 'key12': 'true',
+ }
+ self.assertEqual(ucl.load(totest), correct)
+
+ def test_validation_useless(self):
+ with self.assertRaises(NotImplementedError):
+ ucl.validate("","")
+
+if __name__ == '__main__':
+ unittest.main()
diff --git a/contrib/libucl/src/Makefile.am b/contrib/libucl/src/Makefile.am
index c3f0c9f..c2f3a4b 100644
--- a/contrib/libucl/src/Makefile.am
+++ b/contrib/libucl/src/Makefile.am
@@ -11,6 +11,8 @@ libucl_la_SOURCES= ucl_emitter.c \
ucl_parser.c \
ucl_schema.c \
ucl_util.c \
+ ucl_msgpack.c \
+ ucl_sexp.c \
xxhash.c
libucl_la_CFLAGS= $(libucl_common_cflags) \
@CURL_CFLAGS@
@@ -20,7 +22,8 @@ libucl_la_LIBADD= @LIBFETCH_LIBS@ \
@LIBREGEX_LIB@ \
@CURL_LIBS@
-include_HEADERS= $(top_srcdir)/include/ucl.h
+include_HEADERS= $(top_srcdir)/include/ucl.h \
+ $(top_srcdir)/include/ucl++.h
noinst_HEADERS= ucl_internal.h \
xxhash.h \
ucl_hash.h \
diff --git a/contrib/libucl/src/tree.h b/contrib/libucl/src/tree.h
index cee9373..404b4a8 100644
--- a/contrib/libucl/src/tree.h
+++ b/contrib/libucl/src/tree.h
@@ -44,6 +44,13 @@
#define TREE_DELTA_MAX 1
+#ifndef _HU_FUNCTION
+# if defined(__GNUC__) || defined(__clang__)
+# define _HU_FUNCTION(x) __attribute__((__unused__)) x
+# else
+# define _HU_FUNCTION(x) x
+# endif
+#endif
#define TREE_ENTRY(type) \
struct { \
@@ -68,9 +75,9 @@
#define TREE_DEFINE(node, field) \
\
- struct node *TREE_BALANCE_##node##_##field(struct node *); \
+ static struct node *_HU_FUNCTION(TREE_BALANCE_##node##_##field)(struct node *); \
\
- struct node *TREE_ROTL_##node##_##field(struct node *self) \
+ static struct node *_HU_FUNCTION(TREE_ROTL_##node##_##field)(struct node *self) \
{ \
struct node *r= self->field.avl_right; \
self->field.avl_right= r->field.avl_left; \
@@ -78,7 +85,7 @@
return TREE_BALANCE_##node##_##field(r); \
} \
\
- struct node *TREE_ROTR_##node##_##field(struct node *self) \
+ static struct node *_HU_FUNCTION(TREE_ROTR_##node##_##field)(struct node *self) \
{ \
struct node *l= self->field.avl_left; \
self->field.avl_left= l->field.avl_right; \
@@ -86,7 +93,7 @@
return TREE_BALANCE_##node##_##field(l); \
} \
\
- struct node *TREE_BALANCE_##node##_##field(struct node *self) \
+ static struct node *_HU_FUNCTION(TREE_BALANCE_##node##_##field)(struct node *self) \
{ \
int delta= TREE_DELTA(self, field); \
\
@@ -111,7 +118,7 @@
return self; \
} \
\
- struct node *TREE_INSERT_##node##_##field \
+ static struct node *_HU_FUNCTION(TREE_INSERT_##node##_##field) \
(struct node *self, struct node *elm, int (*compare)(struct node *lhs, struct node *rhs)) \
{ \
if (!self) \
@@ -123,7 +130,7 @@
return TREE_BALANCE_##node##_##field(self); \
} \
\
- struct node *TREE_FIND_##node##_##field \
+ static struct node *_HU_FUNCTION(TREE_FIND_##node##_##field) \
(struct node *self, struct node *elm, int (*compare)(struct node *lhs, struct node *rhs)) \
{ \
if (!self) \
@@ -136,7 +143,7 @@
return TREE_FIND_##node##_##field(self->field.avl_right, elm, compare); \
} \
\
- struct node *TREE_MOVE_RIGHT(struct node *self, struct node *rhs) \
+ static struct node *_HU_FUNCTION(TREE_MOVE_RIGHT)(struct node *self, struct node *rhs) \
{ \
if (!self) \
return rhs; \
@@ -144,7 +151,7 @@
return TREE_BALANCE_##node##_##field(self); \
} \
\
- struct node *TREE_REMOVE_##node##_##field \
+ static struct node *_HU_FUNCTION(TREE_REMOVE_##node##_##field) \
(struct node *self, struct node *elm, int (*compare)(struct node *lhs, struct node *rhs)) \
{ \
if (!self) return 0; \
@@ -163,7 +170,7 @@
return TREE_BALANCE_##node##_##field(self); \
} \
\
- void TREE_FORWARD_APPLY_ALL_##node##_##field \
+ static void _HU_FUNCTION(TREE_FORWARD_APPLY_ALL_##node##_##field) \
(struct node *self, void (*function)(struct node *node, void *data), void *data) \
{ \
if (self) \
@@ -174,7 +181,7 @@
} \
} \
\
- void TREE_REVERSE_APPLY_ALL_##node##_##field \
+ static void _HU_FUNCTION(TREE_REVERSE_APPLY_ALL_##node##_##field) \
(struct node *self, void (*function)(struct node *node, void *data), void *data) \
{ \
if (self) \
diff --git a/contrib/libucl/src/ucl_chartable.h b/contrib/libucl/src/ucl_chartable.h
index 5248e11..db9f029 100644
--- a/contrib/libucl/src/ucl_chartable.h
+++ b/contrib/libucl/src/ucl_chartable.h
@@ -26,7 +26,7 @@
#include "ucl_internal.h"
-static const unsigned int ucl_chartable[255] = {
+static const unsigned int ucl_chartable[256] = {
UCL_CHARACTER_VALUE_END, UCL_CHARACTER_DENIED, UCL_CHARACTER_DENIED,
UCL_CHARACTER_DENIED, UCL_CHARACTER_DENIED, UCL_CHARACTER_DENIED,
UCL_CHARACTER_DENIED, UCL_CHARACTER_DENIED,
@@ -255,6 +255,7 @@ UCL_CHARACTER_KEY_START|UCL_CHARACTER_KEY|UCL_CHARACTER_VALUE_STR,
UCL_CHARACTER_KEY_START|UCL_CHARACTER_KEY|UCL_CHARACTER_VALUE_STR,
UCL_CHARACTER_KEY_START|UCL_CHARACTER_KEY|UCL_CHARACTER_VALUE_STR,
UCL_CHARACTER_KEY_START|UCL_CHARACTER_KEY|UCL_CHARACTER_VALUE_STR,
+UCL_CHARACTER_KEY_START|UCL_CHARACTER_KEY|UCL_CHARACTER_VALUE_STR,
UCL_CHARACTER_KEY_START|UCL_CHARACTER_KEY|UCL_CHARACTER_VALUE_STR
};
diff --git a/contrib/libucl/src/ucl_emitter.c b/contrib/libucl/src/ucl_emitter.c
index 9ddf358..8bfbf09 100644
--- a/contrib/libucl/src/ucl_emitter.c
+++ b/contrib/libucl/src/ucl_emitter.c
@@ -62,6 +62,7 @@ UCL_EMIT_TYPE_OPS(json);
UCL_EMIT_TYPE_OPS(json_compact);
UCL_EMIT_TYPE_OPS(config);
UCL_EMIT_TYPE_OPS(yaml);
+UCL_EMIT_TYPE_OPS(msgpack);
#define UCL_EMIT_TYPE_CONTENT(type) { \
.ucl_emitter_write_elt = ucl_emit_ ## type ## _elt, \
@@ -71,12 +72,12 @@ UCL_EMIT_TYPE_OPS(yaml);
.ucl_emitter_end_array = ucl_emit_ ## type ##_end_array \
}
-
const struct ucl_emitter_operations ucl_standartd_emitter_ops[] = {
[UCL_EMIT_JSON] = UCL_EMIT_TYPE_CONTENT(json),
[UCL_EMIT_JSON_COMPACT] = UCL_EMIT_TYPE_CONTENT(json_compact),
[UCL_EMIT_CONFIG] = UCL_EMIT_TYPE_CONTENT(config),
- [UCL_EMIT_YAML] = UCL_EMIT_TYPE_CONTENT(yaml)
+ [UCL_EMIT_YAML] = UCL_EMIT_TYPE_CONTENT(yaml),
+ [UCL_EMIT_MSGPACK] = UCL_EMIT_TYPE_CONTENT(msgpack)
};
/*
@@ -469,19 +470,150 @@ UCL_EMIT_TYPE_IMPL(json_compact, true)
UCL_EMIT_TYPE_IMPL(config, false)
UCL_EMIT_TYPE_IMPL(yaml, false)
+static void
+ucl_emit_msgpack_elt (struct ucl_emitter_context *ctx,
+ const ucl_object_t *obj, bool first, bool print_key)
+{
+ ucl_object_iter_t it;
+ struct ucl_object_userdata *ud;
+ const char *ud_out;
+ const ucl_object_t *cur, *celt;
+
+ switch (obj->type) {
+ case UCL_INT:
+ ucl_emitter_print_key_msgpack (print_key, ctx, obj);
+ ucl_emitter_print_int_msgpack (ctx, ucl_object_toint (obj));
+ break;
+
+ case UCL_FLOAT:
+ case UCL_TIME:
+ ucl_emitter_print_key_msgpack (print_key, ctx, obj);
+ ucl_emitter_print_double_msgpack (ctx, ucl_object_todouble (obj));
+ break;
+
+ case UCL_BOOLEAN:
+ ucl_emitter_print_key_msgpack (print_key, ctx, obj);
+ ucl_emitter_print_bool_msgpack (ctx, ucl_object_toboolean (obj));
+ break;
+
+ case UCL_STRING:
+ ucl_emitter_print_key_msgpack (print_key, ctx, obj);
+
+ if (obj->flags & UCL_OBJECT_BINARY) {
+ ucl_emitter_print_binary_string_msgpack (ctx, obj->value.sv,
+ obj->len);
+ }
+ else {
+ ucl_emitter_print_string_msgpack (ctx, obj->value.sv, obj->len);
+ }
+ break;
+
+ case UCL_NULL:
+ ucl_emitter_print_key_msgpack (print_key, ctx, obj);
+ ucl_emitter_print_null_msgpack (ctx);
+ break;
+
+ case UCL_OBJECT:
+ ucl_emitter_print_key_msgpack (print_key, ctx, obj);
+ ucl_emit_msgpack_start_obj (ctx, obj, print_key);
+ it = NULL;
+
+ while ((cur = ucl_iterate_object (obj, &it, true)) != NULL) {
+ LL_FOREACH (cur, celt) {
+ ucl_emit_msgpack_elt (ctx, celt, false, true);
+ /* XXX:
+ * in msgpack the length of objects is encoded within a single elt
+ * so in case of multi-value keys we are using merely the first
+ * element ignoring others
+ */
+ break;
+ }
+ }
+
+ break;
+
+ case UCL_ARRAY:
+ ucl_emitter_print_key_msgpack (print_key, ctx, obj);
+ ucl_emit_msgpack_start_array (ctx, obj, print_key);
+ it = NULL;
+
+ while ((cur = ucl_iterate_object (obj, &it, true)) != NULL) {
+ ucl_emit_msgpack_elt (ctx, cur, false, false);
+ }
+
+ break;
+
+ case UCL_USERDATA:
+ ud = (struct ucl_object_userdata *)obj;
+ ucl_emitter_print_key_msgpack (print_key, ctx, obj);
+
+ if (ud->emitter) {
+ ud_out = ud->emitter (obj->value.ud);
+ if (ud_out == NULL) {
+ ud_out = "null";
+ }
+ }
+ ucl_emitter_print_string_msgpack (ctx, obj->value.sv, obj->len);
+ break;
+ }
+}
+
+static void
+ucl_emit_msgpack_start_obj (struct ucl_emitter_context *ctx,
+ const ucl_object_t *obj, bool print_key)
+{
+ ucl_emitter_print_object_msgpack (ctx, obj->len);
+}
+
+static void
+ucl_emit_msgpack_start_array (struct ucl_emitter_context *ctx,
+ const ucl_object_t *obj, bool print_key)
+{
+ ucl_emitter_print_array_msgpack (ctx, obj->len);
+}
+
+static void
+ucl_emit_msgpack_end_object (struct ucl_emitter_context *ctx,
+ const ucl_object_t *obj)
+{
+
+}
+
+static void
+ucl_emit_msgpack_end_array (struct ucl_emitter_context *ctx,
+ const ucl_object_t *obj)
+{
+
+}
+
unsigned char *
ucl_object_emit (const ucl_object_t *obj, enum ucl_emitter emit_type)
{
+ return ucl_object_emit_len (obj, emit_type, NULL);
+}
+
+unsigned char *
+ucl_object_emit_len (const ucl_object_t *obj, enum ucl_emitter emit_type,
+ size_t *outlen)
+{
unsigned char *res = NULL;
struct ucl_emitter_functions *func;
+ UT_string *s;
+
if (obj == NULL) {
return NULL;
}
func = ucl_object_emit_memory_funcs ((void **)&res);
+ s = func->ud;
if (func != NULL) {
ucl_object_emit_full (obj, emit_type, func);
+
+ if (outlen != NULL) {
+ *outlen = s->i;
+ }
+
ucl_object_emit_funcs_free (func);
}
diff --git a/contrib/libucl/src/ucl_emitter_utils.c b/contrib/libucl/src/ucl_emitter_utils.c
index 91cad78..95ac9a5 100644
--- a/contrib/libucl/src/ucl_emitter_utils.c
+++ b/contrib/libucl/src/ucl_emitter_utils.c
@@ -62,6 +62,12 @@ static const struct ucl_emitter_context ucl_standard_emitters[] = {
.id = UCL_EMIT_YAML,
.func = NULL,
.ops = &ucl_standartd_emitter_ops[UCL_EMIT_YAML]
+ },
+ [UCL_EMIT_MSGPACK] = {
+ .name = "msgpack",
+ .id = UCL_EMIT_MSGPACK,
+ .func = NULL,
+ .ops = &ucl_standartd_emitter_ops[UCL_EMIT_MSGPACK]
}
};
@@ -73,7 +79,7 @@ static const struct ucl_emitter_context ucl_standard_emitters[] = {
const struct ucl_emitter_context *
ucl_emit_get_standard_context (enum ucl_emitter emit_type)
{
- if (emit_type >= UCL_EMIT_JSON && emit_type <= UCL_EMIT_YAML) {
+ if (emit_type >= UCL_EMIT_JSON && emit_type < UCL_EMIT_MAX) {
return &ucl_standard_emitters[emit_type];
}
diff --git a/contrib/libucl/src/ucl_hash.c b/contrib/libucl/src/ucl_hash.c
index 275e84d..7de8196 100644
--- a/contrib/libucl/src/ucl_hash.c
+++ b/contrib/libucl/src/ucl_hash.c
@@ -26,6 +26,9 @@
#include "khash.h"
#include "kvec.h"
+#include <time.h>
+#include <limits.h>
+
struct ucl_hash_elt {
const ucl_object_t *obj;
size_t ar_idx;
@@ -37,11 +40,78 @@ struct ucl_hash_struct {
bool caseless;
};
+static uint64_t
+ucl_hash_seed (void)
+{
+ static uint64_t seed;
+
+ if (seed == 0) {
+#ifdef UCL_RANDOM_FUNCTION
+ seed = UCL_RANDOM_FUNCTION;
+#else
+ /* Not very random but can be useful for our purposes */
+ seed = time (NULL);
+#endif
+ }
+
+ return seed;
+}
+
+static const unsigned char lc_map[256] = {
+ 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
+ 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
+ 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
+ 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f,
+ 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27,
+ 0x28, 0x29, 0x2a, 0x2b, 0x2c, 0x2d, 0x2e, 0x2f,
+ 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,
+ 0x38, 0x39, 0x3a, 0x3b, 0x3c, 0x3d, 0x3e, 0x3f,
+ 0x40, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
+ 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f,
+ 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
+ 0x78, 0x79, 0x7a, 0x5b, 0x5c, 0x5d, 0x5e, 0x5f,
+ 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
+ 0x68, 0x69, 0x6a, 0x6b, 0x6c, 0x6d, 0x6e, 0x6f,
+ 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77,
+ 0x78, 0x79, 0x7a, 0x7b, 0x7c, 0x7d, 0x7e, 0x7f,
+ 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87,
+ 0x88, 0x89, 0x8a, 0x8b, 0x8c, 0x8d, 0x8e, 0x8f,
+ 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97,
+ 0x98, 0x99, 0x9a, 0x9b, 0x9c, 0x9d, 0x9e, 0x9f,
+ 0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7,
+ 0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf,
+ 0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7,
+ 0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf,
+ 0xc0, 0xc1, 0xc2, 0xc3, 0xc4, 0xc5, 0xc6, 0xc7,
+ 0xc8, 0xc9, 0xca, 0xcb, 0xcc, 0xcd, 0xce, 0xcf,
+ 0xd0, 0xd1, 0xd2, 0xd3, 0xd4, 0xd5, 0xd6, 0xd7,
+ 0xd8, 0xd9, 0xda, 0xdb, 0xdc, 0xdd, 0xde, 0xdf,
+ 0xe0, 0xe1, 0xe2, 0xe3, 0xe4, 0xe5, 0xe6, 0xe7,
+ 0xe8, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xee, 0xef,
+ 0xf0, 0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7,
+ 0xf8, 0xf9, 0xfa, 0xfb, 0xfc, 0xfd, 0xfe, 0xff
+};
+
+#if (defined(WORD_BIT) && WORD_BIT == 64) || \
+ (defined(__WORDSIZE) && __WORDSIZE == 64) || \
+ defined(__x86_64__) || \
+ defined(__amd64__)
+#define UCL64_BIT_HASH 1
+#endif
+
+#ifdef UCL64_BIT_HASH
+static inline uint32_t
+ucl_hash_func (const ucl_object_t *o)
+{
+ return XXH64 (o->key, o->keylen, ucl_hash_seed ());
+}
+#else
static inline uint32_t
ucl_hash_func (const ucl_object_t *o)
{
- return XXH32 (o->key, o->keylen, 0xdeadbeef);
+ return XXH32 (o->key, o->keylen, ucl_hash_seed ());
}
+#endif
static inline int
ucl_hash_equal (const ucl_object_t *k1, const ucl_object_t *k2)
@@ -56,33 +126,91 @@ ucl_hash_equal (const ucl_object_t *k1, const ucl_object_t *k2)
KHASH_INIT (ucl_hash_node, const ucl_object_t *, struct ucl_hash_elt, 1,
ucl_hash_func, ucl_hash_equal)
+#ifdef UCL64_BIT_HASH
static inline uint32_t
ucl_hash_caseless_func (const ucl_object_t *o)
{
- void *xxh = XXH32_init (0xdeadbeef);
- char hash_buf[64], *c;
- const char *p;
- ssize_t remain = o->keylen;
-
- p = o->key;
- c = &hash_buf[0];
+ unsigned len = o->keylen;
+ unsigned leftover = o->keylen % 4;
+ unsigned fp, i;
+ const uint8_t* s = (const uint8_t*)o->key;
+ union {
+ struct {
+ unsigned char c1, c2, c3, c4;
+ } c;
+ uint32_t pp;
+ } u;
+ XXH64_state_t st;
+
+ fp = len - leftover;
+ XXH64_reset (&st, ucl_hash_seed ());
+
+ for (i = 0; i != fp; i += 4) {
+ u.c.c1 = s[i], u.c.c2 = s[i + 1], u.c.c3 = s[i + 2], u.c.c4 = s[i + 3];
+ u.c.c1 = lc_map[u.c.c1];
+ u.c.c2 = lc_map[u.c.c2];
+ u.c.c3 = lc_map[u.c.c3];
+ u.c.c4 = lc_map[u.c.c4];
+ XXH64_update (&st, &u.pp, sizeof (u));
+ }
- while (remain > 0) {
- *c++ = tolower (*p++);
+ u.pp = 0;
+ switch (leftover) {
+ case 3:
+ u.c.c3 = lc_map[(unsigned char)s[i++]];
+ case 2:
+ u.c.c2 = lc_map[(unsigned char)s[i++]];
+ case 1:
+ u.c.c1 = lc_map[(unsigned char)s[i]];
+ XXH64_update (&st, &u.pp, leftover);
+ break;
+ }
- if (c - &hash_buf[0] == sizeof (hash_buf)) {
- XXH32_update (xxh, hash_buf, sizeof (hash_buf));
- c = &hash_buf[0];
- }
- remain --;
+ return XXH64_digest (&st);
+}
+#else
+static inline uint32_t
+ucl_hash_caseless_func (const ucl_object_t *o)
+{
+ unsigned len = o->keylen;
+ unsigned leftover = o->keylen % 4;
+ unsigned fp, i;
+ const uint8_t* s = (const uint8_t*)o->key;
+ union {
+ struct {
+ unsigned char c1, c2, c3, c4;
+ } c;
+ uint32_t pp;
+ } u;
+ XXH32_state_t st;
+
+ fp = len - leftover;
+ XXH32_reset (&st, ucl_hash_seed ());
+
+ for (i = 0; i != fp; i += 4) {
+ u.c.c1 = s[i], u.c.c2 = s[i + 1], u.c.c3 = s[i + 2], u.c.c4 = s[i + 3];
+ u.c.c1 = lc_map[u.c.c1];
+ u.c.c2 = lc_map[u.c.c2];
+ u.c.c3 = lc_map[u.c.c3];
+ u.c.c4 = lc_map[u.c.c4];
+ XXH32_update (&st, &u.pp, sizeof (u));
}
- if (c - &hash_buf[0] != 0) {
- XXH32_update (xxh, hash_buf, c - &hash_buf[0]);
+ u.pp = 0;
+ switch (leftover) {
+ case 3:
+ u.c.c3 = lc_map[(unsigned char)s[i++]];
+ case 2:
+ u.c.c2 = lc_map[(unsigned char)s[i++]];
+ case 1:
+ u.c.c1 = lc_map[(unsigned char)s[i]];
+ XXH32_update (&st, &u.pp, leftover);
+ break;
}
- return XXH32_digest (xxh);
+ return XXH32_digest (&st);
}
+#endif
static inline int
ucl_hash_caseless_equal (const ucl_object_t *k1, const ucl_object_t *k2)
@@ -254,6 +382,11 @@ ucl_hash_iterate (ucl_hash_t *hashlin, ucl_hash_iter_t *iter)
if (it == NULL) {
it = UCL_ALLOC (sizeof (*it));
+
+ if (it == NULL) {
+ return NULL;
+ }
+
it->cur = &hashlin->ar.a[0];
it->end = it->cur + hashlin->ar.n;
}
@@ -336,7 +469,7 @@ ucl_hash_delete (ucl_hash_t* hashlin, const ucl_object_t *obj)
k = kh_get (ucl_hash_caseless_node, h, obj);
if (k != kh_end (h)) {
elt = &kh_value (h, k);
- kv_A (hashlin->ar, elt->ar_idx) = NULL;
+ kv_del (const ucl_object_t *, hashlin->ar, elt->ar_idx);
kh_del (ucl_hash_caseless_node, h, k);
}
}
@@ -346,7 +479,7 @@ ucl_hash_delete (ucl_hash_t* hashlin, const ucl_object_t *obj)
k = kh_get (ucl_hash_node, h, obj);
if (k != kh_end (h)) {
elt = &kh_value (h, k);
- kv_A (hashlin->ar, elt->ar_idx) = NULL;
+ kv_del (const ucl_object_t *, hashlin->ar, elt->ar_idx);
kh_del (ucl_hash_node, h, k);
}
}
diff --git a/contrib/libucl/src/ucl_internal.h b/contrib/libucl/src/ucl_internal.h
index bdbe691..31d6b13 100644
--- a/contrib/libucl/src/ucl_internal.h
+++ b/contrib/libucl/src/ucl_internal.h
@@ -145,15 +145,19 @@ enum ucl_character_type {
struct ucl_macro {
char *name;
- ucl_macro_handler handler;
+ union {
+ ucl_macro_handler handler;
+ ucl_context_macro_handler context_handler;
+ } h;
void* ud;
+ bool is_context;
UT_hash_handle hh;
};
struct ucl_stack {
ucl_object_t *obj;
struct ucl_stack *next;
- int level;
+ uint64_t level;
};
struct ucl_chunk {
@@ -164,6 +168,8 @@ struct ucl_chunk {
unsigned int line;
unsigned int column;
unsigned priority;
+ enum ucl_duplicate_strategy strategy;
+ enum ucl_parse_type parse_type;
struct ucl_chunk *next;
};
@@ -191,8 +197,12 @@ struct ucl_parser {
enum ucl_parser_state prev_state;
unsigned int recursion;
int flags;
+ unsigned default_priority;
+ int err_code;
ucl_object_t *top_obj;
ucl_object_t *cur_obj;
+ ucl_object_t *trash_objs;
+ ucl_object_t *includepaths;
char *cur_file;
struct ucl_macro *macroes;
struct ucl_stack *stack;
@@ -220,13 +230,21 @@ size_t ucl_unescape_json_string (char *str, size_t len);
* Handle include macro
* @param data include data
* @param len length of data
+ * @param args UCL object representing arguments to the macro
* @param ud user data
- * @param err error ptr
* @return
*/
bool ucl_include_handler (const unsigned char *data, size_t len,
const ucl_object_t *args, void* ud);
+/**
+ * Handle tryinclude macro
+ * @param data include data
+ * @param len length of data
+ * @param args UCL object representing arguments to the macro
+ * @param ud user data
+ * @return
+ */
bool ucl_try_include_handler (const unsigned char *data, size_t len,
const ucl_object_t *args, void* ud);
@@ -234,17 +252,52 @@ bool ucl_try_include_handler (const unsigned char *data, size_t len,
* Handle includes macro
* @param data include data
* @param len length of data
+ * @param args UCL object representing arguments to the macro
* @param ud user data
- * @param err error ptr
* @return
*/
bool ucl_includes_handler (const unsigned char *data, size_t len,
const ucl_object_t *args, void* ud);
+/**
+ * Handle priority macro
+ * @param data include data
+ * @param len length of data
+ * @param args UCL object representing arguments to the macro
+ * @param ud user data
+ * @return
+ */
+bool ucl_priority_handler (const unsigned char *data, size_t len,
+ const ucl_object_t *args, void* ud);
+
+/**
+ * Handle load macro
+ * @param data include data
+ * @param len length of data
+ * @param args UCL object representing arguments to the macro
+ * @param ud user data
+ * @return
+ */
+bool ucl_load_handler (const unsigned char *data, size_t len,
+ const ucl_object_t *args, void* ud);
+/**
+ * Handle inherit macro
+ * @param data include data
+ * @param len length of data
+ * @param args UCL object representing arguments to the macro
+ * @param ctx the current context object
+ * @param ud user data
+ * @return
+ */
+bool ucl_inherit_handler (const unsigned char *data, size_t len,
+ const ucl_object_t *args, const ucl_object_t *ctx, void* ud);
+
size_t ucl_strlcpy (char *dst, const char *src, size_t siz);
size_t ucl_strlcpy_unsafe (char *dst, const char *src, size_t siz);
size_t ucl_strlcpy_tolower (char *dst, const char *src, size_t siz);
+char *ucl_strnstr (const char *s, const char *find, int len);
+char *ucl_strncasestr (const char *s, const char *find, int len);
#ifdef __GNUC__
static inline void
@@ -252,9 +305,10 @@ ucl_create_err (UT_string **err, const char *fmt, ...)
__attribute__ (( format( printf, 2, 3) ));
#endif
+#undef UCL_FATAL_ERRORS
+
static inline void
ucl_create_err (UT_string **err, const char *fmt, ...)
-
{
if (*err == NULL) {
utstring_new (*err);
@@ -263,6 +317,10 @@ ucl_create_err (UT_string **err, const char *fmt, ...)
utstring_printf_va (*err, fmt, ap);
va_end (ap);
}
+
+#ifdef UCL_FATAL_ERRORS
+ assert (0);
+#endif
}
/**
@@ -311,7 +369,7 @@ ucl_maybe_parse_boolean (ucl_object_t *obj, const unsigned char *start, size_t l
}
}
- if (ret) {
+ if (ret && obj != NULL) {
obj->type = UCL_BOOLEAN;
obj->value.iv = val;
}
@@ -396,4 +454,89 @@ unsigned char * ucl_object_emit_single_json (const ucl_object_t *obj);
*/
bool ucl_maybe_long_string (const ucl_object_t *obj);
+/**
+ * Print integer to the msgpack output
+ * @param ctx
+ * @param val
+ */
+void ucl_emitter_print_int_msgpack (struct ucl_emitter_context *ctx,
+ int64_t val);
+/**
+ * Print integer to the msgpack output
+ * @param ctx
+ * @param val
+ */
+void ucl_emitter_print_double_msgpack (struct ucl_emitter_context *ctx,
+ double val);
+/**
+ * Print double to the msgpack output
+ * @param ctx
+ * @param val
+ */
+void ucl_emitter_print_bool_msgpack (struct ucl_emitter_context *ctx,
+ bool val);
+/**
+ * Print string to the msgpack output
+ * @param ctx
+ * @param s
+ * @param len
+ */
+void ucl_emitter_print_string_msgpack (struct ucl_emitter_context *ctx,
+ const char *s, size_t len);
+
+/**
+ * Print binary string to the msgpack output
+ * @param ctx
+ * @param s
+ * @param len
+ */
+void ucl_emitter_print_binary_string_msgpack (struct ucl_emitter_context *ctx,
+ const char *s, size_t len);
+
+/**
+ * Print array preamble for msgpack
+ * @param ctx
+ * @param len
+ */
+void ucl_emitter_print_array_msgpack (struct ucl_emitter_context *ctx,
+ size_t len);
+
+/**
+ * Print object preamble for msgpack
+ * @param ctx
+ * @param len
+ */
+void ucl_emitter_print_object_msgpack (struct ucl_emitter_context *ctx,
+ size_t len);
+/**
+ * Print NULL to the msgpack output
+ * @param ctx
+ */
+void ucl_emitter_print_null_msgpack (struct ucl_emitter_context *ctx);
+/**
+ * Print object's key if needed to the msgpack output
+ * @param print_key
+ * @param ctx
+ * @param obj
+ */
+void ucl_emitter_print_key_msgpack (bool print_key,
+ struct ucl_emitter_context *ctx,
+ const ucl_object_t *obj);
+
+/**
+ * Add new element to an object using the current merge strategy and priority
+ * @param parser
+ * @param nobj
+ * @return
+ */
+bool ucl_parser_process_object_element (struct ucl_parser *parser,
+ ucl_object_t *nobj);
+
+/**
+ * Parse msgpack chunk
+ * @param parser
+ * @return
+ */
+bool ucl_parse_msgpack (struct ucl_parser *parser);
+
#endif /* UCL_INTERNAL_H_ */
diff --git a/contrib/libucl/src/ucl_msgpack.c b/contrib/libucl/src/ucl_msgpack.c
new file mode 100644
index 0000000..e8ebfba
--- /dev/null
+++ b/contrib/libucl/src/ucl_msgpack.c
@@ -0,0 +1,1600 @@
+/*
+ * Copyright (c) 2015, Vsevolod Stakhov
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY AUTHOR ''AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL AUTHOR BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include "ucl.h"
+#include "ucl_internal.h"
+
+#ifdef HAVE_ENDIAN_H
+#include <endian.h>
+#elif defined(HAVE_SYS_ENDIAN_H)
+#include <sys/endian.h>
+#elif defined(HAVE_MACHINE_ENDIAN_H)
+#include <machine/endian.h>
+#endif
+
+#if !defined(__LITTLE_ENDIAN__) && !defined(__BIG_ENDIAN__)
+ #if __BYTE_ORDER == __LITTLE_ENDIAN
+ #define __LITTLE_ENDIAN__
+ #elif __BYTE_ORDER == __BIG_ENDIAN
+ #define __BIG_ENDIAN__
+ #elif _WIN32
+ #define __LITTLE_ENDIAN__
+ #endif
+#endif
+
+#define SWAP_LE_BE16(val) ((uint16_t) ( \
+ (uint16_t) ((uint16_t) (val) >> 8) | \
+ (uint16_t) ((uint16_t) (val) << 8)))
+
+#if defined(__clang__) || (defined(__GNUC__) && __GNUC__ >= 4 && defined (__GNUC_MINOR__) && __GNUC_MINOR__ >= 3)
+# define SWAP_LE_BE32(val) ((uint32_t)__builtin_bswap32 ((uint32_t)(val)))
+# define SWAP_LE_BE64(val) ((uint64_t)__builtin_bswap64 ((uint64_t)(val)))
+#else
+ #define SWAP_LE_BE32(val) ((uint32_t)( \
+ (((uint32_t)(val) & (uint32_t)0x000000ffU) << 24) | \
+ (((uint32_t)(val) & (uint32_t)0x0000ff00U) << 8) | \
+ (((uint32_t)(val) & (uint32_t)0x00ff0000U) >> 8) | \
+ (((uint32_t)(val) & (uint32_t)0xff000000U) >> 24)))
+
+ #define SWAP_LE_BE64(val) ((uint64_t)( \
+ (((uint64_t)(val) & \
+ (uint64_t)(0x00000000000000ffULL)) << 56) | \
+ (((uint64_t)(val) & \
+ (uint64_t)(0x000000000000ff00ULL)) << 40) | \
+ (((uint64_t)(val) & \
+ (uint64_t)(0x0000000000ff0000ULL)) << 24) | \
+ (((uint64_t)(val) & \
+ (uint64_t) (0x00000000ff000000ULL)) << 8) | \
+ (((uint64_t)(val) & \
+ (uint64_t)(0x000000ff00000000ULL)) >> 8) | \
+ (((uint64_t)(val) & \
+ (uint64_t)(0x0000ff0000000000ULL)) >> 24) | \
+ (((uint64_t)(val) & \
+ (uint64_t)(0x00ff000000000000ULL)) >> 40) | \
+ (((uint64_t)(val) & \
+ (uint64_t)(0xff00000000000000ULL)) >> 56)))
+#endif
+
+#ifdef __LITTLE_ENDIAN__
+#define TO_BE16 SWAP_LE_BE16
+#define TO_BE32 SWAP_LE_BE32
+#define TO_BE64 SWAP_LE_BE64
+#define FROM_BE16 SWAP_LE_BE16
+#define FROM_BE32 SWAP_LE_BE32
+#define FROM_BE64 SWAP_LE_BE64
+#else
+#define TO_BE16(val) (uint16_t)(val)
+#define TO_BE32(val) (uint32_t)(val)
+#define TO_BE64(val) (uint64_t)(val)
+#define FROM_BE16(val) (uint16_t)(val)
+#define FROM_BE32(val) (uint32_t)(val)
+#define FROM_BE64(val) (uint64_t)(val)
+#endif
+
+void
+ucl_emitter_print_int_msgpack (struct ucl_emitter_context *ctx, int64_t val)
+{
+ const struct ucl_emitter_functions *func = ctx->func;
+ unsigned char buf[sizeof(uint64_t) + 1];
+ const unsigned char mask_positive = 0x7f, mask_negative = 0xe0,
+ uint8_ch = 0xcc, uint16_ch = 0xcd, uint32_ch = 0xce, uint64_ch = 0xcf,
+ int8_ch = 0xd0, int16_ch = 0xd1, int32_ch = 0xd2, int64_ch = 0xd3;
+ unsigned len;
+
+ if (val >= 0) {
+ if (val <= 0x7f) {
+ /* Fixed num 7 bits */
+ len = 1;
+ buf[0] = mask_positive & val;
+ }
+ else if (val <= 0xff) {
+ len = 2;
+ buf[0] = uint8_ch;
+ buf[1] = val & 0xff;
+ }
+ else if (val <= 0xffff) {
+ uint16_t v = TO_BE16 (val);
+
+ len = 3;
+ buf[0] = uint16_ch;
+ memcpy (&buf[1], &v, sizeof (v));
+ }
+ else if (val <= 0xffffffff) {
+ uint32_t v = TO_BE32 (val);
+
+ len = 5;
+ buf[0] = uint32_ch;
+ memcpy (&buf[1], &v, sizeof (v));
+ }
+ else {
+ uint64_t v = TO_BE64 (val);
+
+ len = 9;
+ buf[0] = uint64_ch;
+ memcpy (&buf[1], &v, sizeof (v));
+ }
+ }
+ else {
+ uint64_t uval;
+ /* Bithack abs */
+ uval = ((val ^ (val >> 63)) - (val >> 63));
+
+ if (val > -(1 << 5)) {
+ len = 1;
+ buf[0] = (mask_negative | uval) & 0xff;
+ }
+ else if (uval <= 0xff) {
+ len = 2;
+ buf[0] = int8_ch;
+ buf[1] = (unsigned char)val;
+ }
+ else if (uval <= 0xffff) {
+ uint16_t v = TO_BE16 (val);
+
+ len = 3;
+ buf[0] = int16_ch;
+ memcpy (&buf[1], &v, sizeof (v));
+ }
+ else if (uval <= 0xffffffff) {
+ uint32_t v = TO_BE32 (val);
+
+ len = 5;
+ buf[0] = int32_ch;
+ memcpy (&buf[1], &v, sizeof (v));
+ }
+ else {
+ uint64_t v = TO_BE64 (val);
+
+ len = 9;
+ buf[0] = int64_ch;
+ memcpy (&buf[1], &v, sizeof (v));
+ }
+ }
+
+ func->ucl_emitter_append_len (buf, len, func->ud);
+}
+
+void
+ucl_emitter_print_double_msgpack (struct ucl_emitter_context *ctx, double val)
+{
+ const struct ucl_emitter_functions *func = ctx->func;
+ union {
+ double d;
+ uint64_t i;
+ } u;
+ const unsigned char dbl_ch = 0xcb;
+ unsigned char buf[sizeof(double) + 1];
+
+ /* Convert to big endian */
+ u.d = val;
+ u.i = TO_BE64 (u.i);
+
+ buf[0] = dbl_ch;
+ memcpy (&buf[1], &u.d, sizeof (double));
+ func->ucl_emitter_append_len (buf, sizeof (buf), func->ud);
+}
+
+void
+ucl_emitter_print_bool_msgpack (struct ucl_emitter_context *ctx, bool val)
+{
+ const struct ucl_emitter_functions *func = ctx->func;
+ const unsigned char true_ch = 0xc3, false_ch = 0xc2;
+
+ func->ucl_emitter_append_character (val ? true_ch : false_ch, 1, func->ud);
+}
+
+void
+ucl_emitter_print_string_msgpack (struct ucl_emitter_context *ctx,
+ const char *s, size_t len)
+{
+ const struct ucl_emitter_functions *func = ctx->func;
+ const unsigned char fix_mask = 0xA0, l8_ch = 0xd9, l16_ch = 0xda, l32_ch = 0xdb;
+ unsigned char buf[5];
+ unsigned blen;
+
+ if (len <= 0x1F) {
+ blen = 1;
+ buf[0] = (len | fix_mask) & 0xff;
+ }
+ else if (len <= 0xff) {
+ blen = 2;
+ buf[0] = l8_ch;
+ buf[1] = len & 0xff;
+ }
+ else if (len <= 0xffff) {
+ uint16_t bl = TO_BE16 (len);
+
+ blen = 3;
+ buf[0] = l16_ch;
+ memcpy (&buf[1], &bl, sizeof (bl));
+ }
+ else {
+ uint32_t bl = TO_BE32 (len);
+
+ blen = 5;
+ buf[0] = l32_ch;
+ memcpy (&buf[1], &bl, sizeof (bl));
+ }
+
+ func->ucl_emitter_append_len (buf, blen, func->ud);
+ func->ucl_emitter_append_len (s, len, func->ud);
+}
+
+void
+ucl_emitter_print_binary_string_msgpack (struct ucl_emitter_context *ctx,
+ const char *s, size_t len)
+{
+ const struct ucl_emitter_functions *func = ctx->func;
+ const unsigned char l8_ch = 0xc4, l16_ch = 0xc5, l32_ch = 0xc6;
+ unsigned char buf[5];
+ unsigned blen;
+
+ if (len <= 0xff) {
+ blen = 2;
+ buf[0] = l8_ch;
+ buf[1] = len & 0xff;
+ }
+ else if (len <= 0xffff) {
+ uint16_t bl = TO_BE16 (len);
+
+ blen = 3;
+ buf[0] = l16_ch;
+ memcpy (&buf[1], &bl, sizeof (bl));
+ }
+ else {
+ uint32_t bl = TO_BE32 (len);
+
+ blen = 5;
+ buf[0] = l32_ch;
+ memcpy (&buf[1], &bl, sizeof (bl));
+ }
+
+ func->ucl_emitter_append_len (buf, blen, func->ud);
+ func->ucl_emitter_append_len (s, len, func->ud);
+}
+
+void
+ucl_emitter_print_null_msgpack (struct ucl_emitter_context *ctx)
+{
+ const struct ucl_emitter_functions *func = ctx->func;
+ const unsigned char nil = 0xc0;
+
+ func->ucl_emitter_append_character (nil, 1, func->ud);
+}
+
+void
+ucl_emitter_print_key_msgpack (bool print_key, struct ucl_emitter_context *ctx,
+ const ucl_object_t *obj)
+{
+ if (print_key) {
+ ucl_emitter_print_string_msgpack (ctx, obj->key, obj->keylen);
+ }
+}
+
+void
+ucl_emitter_print_array_msgpack (struct ucl_emitter_context *ctx, size_t len)
+{
+ const struct ucl_emitter_functions *func = ctx->func;
+ const unsigned char fix_mask = 0x90, l16_ch = 0xdc, l32_ch = 0xdd;
+ unsigned char buf[5];
+ unsigned blen;
+
+ if (len <= 0xF) {
+ blen = 1;
+ buf[0] = (len | fix_mask) & 0xff;
+ }
+ else if (len <= 0xffff) {
+ uint16_t bl = TO_BE16 (len);
+
+ blen = 3;
+ buf[0] = l16_ch;
+ memcpy (&buf[1], &bl, sizeof (bl));
+ }
+ else {
+ uint32_t bl = TO_BE32 (len);
+
+ blen = 5;
+ buf[0] = l32_ch;
+ memcpy (&buf[1], &bl, sizeof (bl));
+ }
+
+ func->ucl_emitter_append_len (buf, blen, func->ud);
+}
+
+void
+ucl_emitter_print_object_msgpack (struct ucl_emitter_context *ctx, size_t len)
+{
+ const struct ucl_emitter_functions *func = ctx->func;
+ const unsigned char fix_mask = 0x80, l16_ch = 0xde, l32_ch = 0xdf;
+ unsigned char buf[5];
+ unsigned blen;
+
+ if (len <= 0xF) {
+ blen = 1;
+ buf[0] = (len | fix_mask) & 0xff;
+ }
+ else if (len <= 0xffff) {
+ uint16_t bl = TO_BE16 (len);
+
+ blen = 3;
+ buf[0] = l16_ch;
+ memcpy (&buf[1], &bl, sizeof (bl));
+ }
+ else {
+ uint32_t bl = TO_BE32 (len);
+
+ blen = 5;
+ buf[0] = l32_ch;
+ memcpy (&buf[1], &bl, sizeof (bl));
+ }
+
+ func->ucl_emitter_append_len (buf, blen, func->ud);
+}
+
+
+enum ucl_msgpack_format {
+ msgpack_positive_fixint = 0,
+ msgpack_fixmap,
+ msgpack_fixarray,
+ msgpack_fixstr,
+ msgpack_nil,
+ msgpack_false,
+ msgpack_true,
+ msgpack_bin8,
+ msgpack_bin16,
+ msgpack_bin32,
+ msgpack_ext8,
+ msgpack_ext16,
+ msgpack_ext32,
+ msgpack_float32,
+ msgpack_float64,
+ msgpack_uint8,
+ msgpack_uint16,
+ msgpack_uint32,
+ msgpack_uint64,
+ msgpack_int8,
+ msgpack_int16,
+ msgpack_int32,
+ msgpack_int64,
+ msgpack_fixext1,
+ msgpack_fixext2,
+ msgpack_fixext4,
+ msgpack_fixext8,
+ msgpack_fixext16,
+ msgpack_str8,
+ msgpack_str16,
+ msgpack_str32,
+ msgpack_array16,
+ msgpack_array32,
+ msgpack_map16,
+ msgpack_map32,
+ msgpack_negative_fixint,
+ msgpack_invalid
+};
+
+typedef ssize_t (*ucl_msgpack_parse_function)(struct ucl_parser *parser,
+ struct ucl_stack *container, size_t len, enum ucl_msgpack_format fmt,
+ const unsigned char *pos, size_t remain);
+
+static ssize_t ucl_msgpack_parse_map (struct ucl_parser *parser,
+ struct ucl_stack *container, size_t len, enum ucl_msgpack_format fmt,
+ const unsigned char *pos, size_t remain);
+static ssize_t ucl_msgpack_parse_array (struct ucl_parser *parser,
+ struct ucl_stack *container, size_t len, enum ucl_msgpack_format fmt,
+ const unsigned char *pos, size_t remain);
+static ssize_t ucl_msgpack_parse_string (struct ucl_parser *parser,
+ struct ucl_stack *container, size_t len, enum ucl_msgpack_format fmt,
+ const unsigned char *pos, size_t remain);
+static ssize_t ucl_msgpack_parse_int (struct ucl_parser *parser,
+ struct ucl_stack *container, size_t len, enum ucl_msgpack_format fmt,
+ const unsigned char *pos, size_t remain);
+static ssize_t ucl_msgpack_parse_float (struct ucl_parser *parser,
+ struct ucl_stack *container, size_t len, enum ucl_msgpack_format fmt,
+ const unsigned char *pos, size_t remain);
+static ssize_t ucl_msgpack_parse_bool (struct ucl_parser *parser,
+ struct ucl_stack *container, size_t len, enum ucl_msgpack_format fmt,
+ const unsigned char *pos, size_t remain);
+static ssize_t ucl_msgpack_parse_null (struct ucl_parser *parser,
+ struct ucl_stack *container, size_t len, enum ucl_msgpack_format fmt,
+ const unsigned char *pos, size_t remain);
+static ssize_t ucl_msgpack_parse_ignore (struct ucl_parser *parser,
+ struct ucl_stack *container, size_t len, enum ucl_msgpack_format fmt,
+ const unsigned char *pos, size_t remain);
+
+#define MSGPACK_FLAG_FIXED (1 << 0)
+#define MSGPACK_FLAG_CONTAINER (1 << 1)
+#define MSGPACK_FLAG_TYPEVALUE (1 << 2)
+#define MSGPACK_FLAG_EXT (1 << 3)
+#define MSGPACK_FLAG_ASSOC (1 << 4)
+#define MSGPACK_FLAG_KEY (1 << 5)
+#define MSGPACK_CONTAINER_BIT (1ULL << 62)
+
+/*
+ * Search tree packed in array
+ */
+struct ucl_msgpack_parser {
+ uint8_t prefix; /* Prefix byte */
+ uint8_t prefixlen; /* Length of prefix in bits */
+ uint8_t fmt; /* The desired format */
+ uint8_t len; /* Length of the object
+ (either length bytes
+ or length of value in case
+ of fixed objects */
+ uint8_t flags; /* Flags of the specified type */
+ ucl_msgpack_parse_function func; /* Parser function */
+} parsers[] = {
+ {
+ 0xa0,
+ 3,
+ msgpack_fixstr,
+ 0,
+ MSGPACK_FLAG_FIXED|MSGPACK_FLAG_KEY,
+ ucl_msgpack_parse_string
+ },
+ {
+ 0x0,
+ 1,
+ msgpack_positive_fixint,
+ 0,
+ MSGPACK_FLAG_FIXED|MSGPACK_FLAG_TYPEVALUE,
+ ucl_msgpack_parse_int
+ },
+ {
+ 0xe0,
+ 3,
+ msgpack_negative_fixint,
+ 0,
+ MSGPACK_FLAG_FIXED|MSGPACK_FLAG_TYPEVALUE,
+ ucl_msgpack_parse_int
+ },
+ {
+ 0x80,
+ 4,
+ msgpack_fixmap,
+ 0,
+ MSGPACK_FLAG_FIXED|MSGPACK_FLAG_CONTAINER|MSGPACK_FLAG_ASSOC,
+ ucl_msgpack_parse_map
+ },
+ {
+ 0x90,
+ 4,
+ msgpack_fixarray,
+ 0,
+ MSGPACK_FLAG_FIXED|MSGPACK_FLAG_CONTAINER,
+ ucl_msgpack_parse_array
+ },
+ {
+ 0xd9,
+ 8,
+ msgpack_str8,
+ 1,
+ MSGPACK_FLAG_KEY,
+ ucl_msgpack_parse_string
+ },
+ {
+ 0xc4,
+ 8,
+ msgpack_bin8,
+ 1,
+ MSGPACK_FLAG_KEY,
+ ucl_msgpack_parse_string
+ },
+ {
+ 0xcf,
+ 8,
+ msgpack_uint64,
+ 8,
+ MSGPACK_FLAG_FIXED,
+ ucl_msgpack_parse_int
+ },
+ {
+ 0xd3,
+ 8,
+ msgpack_int64,
+ 8,
+ MSGPACK_FLAG_FIXED,
+ ucl_msgpack_parse_int
+ },
+ {
+ 0xce,
+ 8,
+ msgpack_uint32,
+ 4,
+ MSGPACK_FLAG_FIXED,
+ ucl_msgpack_parse_int
+ },
+ {
+ 0xd2,
+ 8,
+ msgpack_int32,
+ 4,
+ MSGPACK_FLAG_FIXED,
+ ucl_msgpack_parse_int
+ },
+ {
+ 0xcb,
+ 8,
+ msgpack_float64,
+ 8,
+ MSGPACK_FLAG_FIXED,
+ ucl_msgpack_parse_float
+ },
+ {
+ 0xca,
+ 8,
+ msgpack_float32,
+ 4,
+ MSGPACK_FLAG_FIXED,
+ ucl_msgpack_parse_float
+ },
+ {
+ 0xc2,
+ 8,
+ msgpack_false,
+ 1,
+ MSGPACK_FLAG_FIXED | MSGPACK_FLAG_TYPEVALUE,
+ ucl_msgpack_parse_bool
+ },
+ {
+ 0xc3,
+ 8,
+ msgpack_true,
+ 1,
+ MSGPACK_FLAG_FIXED | MSGPACK_FLAG_TYPEVALUE,
+ ucl_msgpack_parse_bool
+ },
+ {
+ 0xcc,
+ 8,
+ msgpack_uint8,
+ 1,
+ MSGPACK_FLAG_FIXED,
+ ucl_msgpack_parse_int
+ },
+ {
+ 0xcd,
+ 8,
+ msgpack_uint16,
+ 2,
+ MSGPACK_FLAG_FIXED,
+ ucl_msgpack_parse_int
+ },
+ {
+ 0xd0,
+ 8,
+ msgpack_int8,
+ 1,
+ MSGPACK_FLAG_FIXED,
+ ucl_msgpack_parse_int
+ },
+ {
+ 0xd1,
+ 8,
+ msgpack_int16,
+ 2,
+ MSGPACK_FLAG_FIXED,
+ ucl_msgpack_parse_int
+ },
+ {
+ 0xc0,
+ 8,
+ msgpack_nil,
+ 0,
+ MSGPACK_FLAG_FIXED | MSGPACK_FLAG_TYPEVALUE,
+ ucl_msgpack_parse_null
+ },
+ {
+ 0xda,
+ 8,
+ msgpack_str16,
+ 2,
+ MSGPACK_FLAG_KEY,
+ ucl_msgpack_parse_string
+ },
+ {
+ 0xdb,
+ 8,
+ msgpack_str32,
+ 4,
+ MSGPACK_FLAG_KEY,
+ ucl_msgpack_parse_string
+ },
+ {
+ 0xc5,
+ 8,
+ msgpack_bin16,
+ 2,
+ MSGPACK_FLAG_KEY,
+ ucl_msgpack_parse_string
+ },
+ {
+ 0xc6,
+ 8,
+ msgpack_bin32,
+ 4,
+ MSGPACK_FLAG_KEY,
+ ucl_msgpack_parse_string
+ },
+ {
+ 0xdc,
+ 8,
+ msgpack_array16,
+ 2,
+ MSGPACK_FLAG_CONTAINER,
+ ucl_msgpack_parse_array
+ },
+ {
+ 0xdd,
+ 8,
+ msgpack_array32,
+ 4,
+ MSGPACK_FLAG_CONTAINER,
+ ucl_msgpack_parse_array
+ },
+ {
+ 0xde,
+ 8,
+ msgpack_map16,
+ 2,
+ MSGPACK_FLAG_CONTAINER|MSGPACK_FLAG_ASSOC,
+ ucl_msgpack_parse_map
+ },
+ {
+ 0xdf,
+ 8,
+ msgpack_map32,
+ 4,
+ MSGPACK_FLAG_CONTAINER|MSGPACK_FLAG_ASSOC,
+ ucl_msgpack_parse_map
+ },
+ {
+ 0xc7,
+ 8,
+ msgpack_ext8,
+ 1,
+ MSGPACK_FLAG_EXT,
+ ucl_msgpack_parse_ignore
+ },
+ {
+ 0xc8,
+ 8,
+ msgpack_ext16,
+ 2,
+ MSGPACK_FLAG_EXT,
+ ucl_msgpack_parse_ignore
+ },
+ {
+ 0xc9,
+ 8,
+ msgpack_ext32,
+ 4,
+ MSGPACK_FLAG_EXT,
+ ucl_msgpack_parse_ignore
+ },
+ {
+ 0xd4,
+ 8,
+ msgpack_fixext1,
+ 1,
+ MSGPACK_FLAG_FIXED | MSGPACK_FLAG_EXT,
+ ucl_msgpack_parse_ignore
+ },
+ {
+ 0xd5,
+ 8,
+ msgpack_fixext2,
+ 2,
+ MSGPACK_FLAG_FIXED | MSGPACK_FLAG_EXT,
+ ucl_msgpack_parse_ignore
+ },
+ {
+ 0xd6,
+ 8,
+ msgpack_fixext4,
+ 4,
+ MSGPACK_FLAG_FIXED | MSGPACK_FLAG_EXT,
+ ucl_msgpack_parse_ignore
+ },
+ {
+ 0xd7,
+ 8,
+ msgpack_fixext8,
+ 8,
+ MSGPACK_FLAG_FIXED | MSGPACK_FLAG_EXT,
+ ucl_msgpack_parse_ignore
+ },
+ {
+ 0xd8,
+ 8,
+ msgpack_fixext16,
+ 16,
+ MSGPACK_FLAG_FIXED | MSGPACK_FLAG_EXT,
+ ucl_msgpack_parse_ignore
+ }
+};
+
+#undef MSGPACK_DEBUG_PARSER
+
+static inline struct ucl_msgpack_parser *
+ucl_msgpack_get_parser_from_type (unsigned char t)
+{
+ unsigned int i, shift, mask;
+
+ for (i = 0; i < sizeof (parsers) / sizeof (parsers[0]); i ++) {
+ shift = CHAR_BIT - parsers[i].prefixlen;
+ mask = parsers[i].prefix >> shift;
+
+ if (mask == (t >> shift)) {
+ return &parsers[i];
+ }
+ }
+
+ return NULL;
+}
+
+static inline struct ucl_stack *
+ucl_msgpack_get_container (struct ucl_parser *parser,
+ struct ucl_msgpack_parser *obj_parser, uint64_t len)
+{
+ struct ucl_stack *stack;
+
+ assert (obj_parser != NULL);
+
+ if (obj_parser->flags & MSGPACK_FLAG_CONTAINER) {
+ assert ((len & MSGPACK_CONTAINER_BIT) == 0);
+ /*
+ * Insert new container to the stack
+ */
+ if (parser->stack == NULL) {
+ parser->stack = calloc (1, sizeof (struct ucl_stack));
+
+ if (parser->stack == NULL) {
+ ucl_create_err (&parser->err, "no memory");
+ return NULL;
+ }
+ }
+ else {
+ stack = calloc (1, sizeof (struct ucl_stack));
+
+ if (stack == NULL) {
+ ucl_create_err (&parser->err, "no memory");
+ return NULL;
+ }
+
+ stack->next = parser->stack;
+ parser->stack = stack;
+ }
+
+ parser->stack->level = len | MSGPACK_CONTAINER_BIT;
+
+#ifdef MSGPACK_DEBUG_PARSER
+ stack = parser->stack;
+ while (stack) {
+ fprintf(stderr, "+");
+ stack = stack->next;
+ }
+
+ fprintf(stderr, "%s -> %d\n", obj_parser->flags & MSGPACK_FLAG_ASSOC ? "object" : "array", (int)len);
+#endif
+ }
+ else {
+ /*
+ * Get the current stack top
+ */
+ if (parser->stack) {
+ return parser->stack;
+ }
+ else {
+ ucl_create_err (&parser->err, "bad top level object for msgpack");
+ return NULL;
+ }
+ }
+
+ return parser->stack;
+}
+
+static bool
+ucl_msgpack_is_container_finished (struct ucl_stack *container)
+{
+ uint64_t level;
+
+ assert (container != NULL);
+
+ if (container->level & MSGPACK_CONTAINER_BIT) {
+ level = container->level & ~MSGPACK_CONTAINER_BIT;
+
+ if (level == 0) {
+ return true;
+ }
+ }
+
+ return false;
+}
+
+static bool
+ucl_msgpack_insert_object (struct ucl_parser *parser,
+ const unsigned char *key,
+ size_t keylen, ucl_object_t *obj)
+{
+ uint64_t level;
+ struct ucl_stack *container;
+
+ container = parser->stack;
+ assert (container != NULL);
+ assert (container->level > 0);
+ assert (obj != NULL);
+ assert (container->obj != NULL);
+
+ if (container->obj->type == UCL_ARRAY) {
+ ucl_array_append (container->obj, obj);
+ }
+ else if (container->obj->type == UCL_OBJECT) {
+ if (key == NULL || keylen == 0) {
+ ucl_create_err (&parser->err, "cannot insert object with no key");
+ return false;
+ }
+
+ obj->key = key;
+ obj->keylen = keylen;
+
+ if (!(parser->flags & UCL_PARSER_ZEROCOPY)) {
+ ucl_copy_key_trash (obj);
+ }
+
+ ucl_parser_process_object_element (parser, obj);
+ }
+ else {
+ ucl_create_err (&parser->err, "bad container type");
+ return false;
+ }
+
+ if (container->level & MSGPACK_CONTAINER_BIT) {
+ level = container->level & ~MSGPACK_CONTAINER_BIT;
+ container->level = (level - 1) | MSGPACK_CONTAINER_BIT;
+ }
+
+ return true;
+}
+
+static struct ucl_stack *
+ucl_msgpack_get_next_container (struct ucl_parser *parser)
+{
+ struct ucl_stack *cur = NULL;
+ uint64_t level;
+
+ cur = parser->stack;
+
+ if (cur == NULL) {
+ return NULL;
+ }
+
+ if (cur->level & MSGPACK_CONTAINER_BIT) {
+ level = cur->level & ~MSGPACK_CONTAINER_BIT;
+
+ if (level == 0) {
+ /* We need to switch to the previous container */
+ parser->stack = cur->next;
+ parser->cur_obj = cur->obj;
+ free (cur);
+
+#ifdef MSGPACK_DEBUG_PARSER
+ cur = parser->stack;
+ while (cur) {
+ fprintf(stderr, "-");
+ cur = cur->next;
+ }
+ fprintf(stderr, "-%s -> %d\n", parser->cur_obj->type == UCL_OBJECT ? "object" : "array", (int)parser->cur_obj->len);
+#endif
+
+ return ucl_msgpack_get_next_container (parser);
+ }
+ }
+
+ /*
+ * For UCL containers we don't know length, so we just insert the whole
+ * message pack blob into the top level container
+ */
+
+ assert (cur->obj != NULL);
+
+ return cur;
+}
+
+#define CONSUME_RET do { \
+ if (ret != -1) { \
+ p += ret; \
+ remain -= ret; \
+ obj_parser = NULL; \
+ assert (remain >= 0); \
+ } \
+ else { \
+ ucl_create_err (&parser->err, \
+ "cannot parse type %d of len %u", \
+ (int)obj_parser->fmt, \
+ (unsigned)len); \
+ return false; \
+ } \
+} while(0)
+
+#define GET_NEXT_STATE do { \
+ container = ucl_msgpack_get_next_container (parser); \
+ if (container == NULL) { \
+ ucl_create_err (&parser->err, \
+ "empty container"); \
+ return false; \
+ } \
+ next_state = container->obj->type == UCL_OBJECT ? \
+ read_assoc_key : read_array_value; \
+} while(0)
+
+static bool
+ucl_msgpack_consume (struct ucl_parser *parser)
+{
+ const unsigned char *p, *end, *key = NULL;
+ struct ucl_stack *container;
+ enum e_msgpack_parser_state {
+ read_type,
+ start_assoc,
+ start_array,
+ read_assoc_key,
+ read_assoc_value,
+ finish_assoc_value,
+ read_array_value,
+ finish_array_value,
+ error_state
+ } state = read_type, next_state = error_state;
+ struct ucl_msgpack_parser *obj_parser;
+ uint64_t len;
+ ssize_t ret, remain, keylen = 0;
+#ifdef MSGPACK_DEBUG_PARSER
+ uint64_t i;
+ enum e_msgpack_parser_state hist[256];
+#endif
+
+ p = parser->chunks->begin;
+ remain = parser->chunks->remain;
+ end = p + remain;
+
+
+ while (p < end) {
+#ifdef MSGPACK_DEBUG_PARSER
+ hist[i++ % 256] = state;
+#endif
+ switch (state) {
+ case read_type:
+ obj_parser = ucl_msgpack_get_parser_from_type (*p);
+
+ if (obj_parser == NULL) {
+ ucl_create_err (&parser->err, "unknown msgpack format: %x",
+ (unsigned int)*p);
+
+ return false;
+ }
+ /* Now check length sanity */
+ if (obj_parser->flags & MSGPACK_FLAG_FIXED) {
+ if (obj_parser->len == 0) {
+ /* We have an embedded size */
+ len = *p & ~obj_parser->prefix;
+ }
+ else {
+ if (remain < obj_parser->len) {
+ ucl_create_err (&parser->err, "not enough data remain to "
+ "read object's length: %u remain, %u needed",
+ (unsigned)remain, obj_parser->len);
+
+ return false;
+ }
+
+ len = obj_parser->len;
+ }
+
+ if (!(obj_parser->flags & MSGPACK_FLAG_TYPEVALUE)) {
+ /* We must pass value as the second byte */
+ if (remain > 0) {
+ p ++;
+ remain --;
+ }
+ }
+ else {
+ /* Len is irrelevant now */
+ len = 0;
+ }
+ }
+ else {
+ /* Length is not embedded */
+ if (remain < obj_parser->len) {
+ ucl_create_err (&parser->err, "not enough data remain to "
+ "read object's length: %u remain, %u needed",
+ (unsigned)remain, obj_parser->len);
+
+ return false;
+ }
+
+ p ++;
+ remain --;
+
+ switch (obj_parser->len) {
+ case 1:
+ len = *p;
+ break;
+ case 2:
+ len = FROM_BE16 (*(uint16_t *)p);
+ break;
+ case 4:
+ len = FROM_BE32 (*(uint32_t *)p);
+ break;
+ case 8:
+ len = FROM_BE64 (*(uint64_t *)p);
+ break;
+ default:
+ assert (0);
+ break;
+ }
+
+ p += obj_parser->len;
+ remain -= obj_parser->len;
+ }
+
+ if (obj_parser->flags & MSGPACK_FLAG_ASSOC) {
+ /* We have just read the new associative map */
+ state = start_assoc;
+ }
+ else if (obj_parser->flags & MSGPACK_FLAG_CONTAINER){
+ state = start_array;
+ }
+ else {
+ state = next_state;
+ }
+
+ break;
+ case start_assoc:
+ parser->cur_obj = ucl_object_new_full (UCL_OBJECT,
+ parser->chunks->priority);
+ /* Insert to the previous level container */
+ if (parser->stack && !ucl_msgpack_insert_object (parser,
+ key, keylen, parser->cur_obj)) {
+ return false;
+ }
+ /* Get new container */
+ container = ucl_msgpack_get_container (parser, obj_parser, len);
+
+ if (container == NULL) {
+ return false;
+ }
+
+ ret = obj_parser->func (parser, container, len, obj_parser->fmt,
+ p, remain);
+ CONSUME_RET;
+ key = NULL;
+ keylen = 0;
+
+ if (len > 0) {
+ state = read_type;
+ next_state = read_assoc_key;
+ }
+ else {
+ /* Empty object */
+ state = finish_assoc_value;
+ }
+ break;
+
+ case start_array:
+ parser->cur_obj = ucl_object_new_full (UCL_ARRAY,
+ parser->chunks->priority);
+ /* Insert to the previous level container */
+ if (parser->stack && !ucl_msgpack_insert_object (parser,
+ key, keylen, parser->cur_obj)) {
+ return false;
+ }
+ /* Get new container */
+ container = ucl_msgpack_get_container (parser, obj_parser, len);
+
+ if (container == NULL) {
+ return false;
+ }
+
+ ret = obj_parser->func (parser, container, len, obj_parser->fmt,
+ p, remain);
+ CONSUME_RET;
+
+ if (len > 0) {
+ state = read_type;
+ next_state = read_array_value;
+ }
+ else {
+ /* Empty array */
+ state = finish_array_value;
+ }
+ break;
+
+ case read_array_value:
+ /*
+ * p is now at the value start, len now contains length read and
+ * obj_parser contains the corresponding specific parser
+ */
+ container = parser->stack;
+
+ if (container == NULL) {
+ return false;
+ }
+
+ ret = obj_parser->func (parser, container, len, obj_parser->fmt,
+ p, remain);
+ CONSUME_RET;
+
+
+ /* Insert value to the container and check if we have finished array */
+ if (!ucl_msgpack_insert_object (parser, NULL, 0,
+ parser->cur_obj)) {
+ return false;
+ }
+
+ if (ucl_msgpack_is_container_finished (container)) {
+ state = finish_array_value;
+ }
+ else {
+ /* Read more elements */
+ state = read_type;
+ next_state = read_array_value;
+ }
+
+ break;
+
+ case read_assoc_key:
+ /*
+ * Keys must have string type for ucl msgpack
+ */
+ if (!(obj_parser->flags & MSGPACK_FLAG_KEY)) {
+ ucl_create_err (&parser->err, "bad type for key: %u, expected "
+ "string", (unsigned)obj_parser->fmt);
+
+ return false;
+ }
+
+ key = p;
+ keylen = len;
+
+ if (keylen > remain || keylen == 0) {
+ ucl_create_err (&parser->err, "too long or empty key");
+ return false;
+ }
+
+ p += len;
+ remain -= len;
+
+ state = read_type;
+ next_state = read_assoc_value;
+ break;
+
+ case read_assoc_value:
+ /*
+ * p is now at the value start, len now contains length read and
+ * obj_parser contains the corresponding specific parser
+ */
+ container = parser->stack;
+
+ if (container == NULL) {
+ return false;
+ }
+
+ ret = obj_parser->func (parser, container, len, obj_parser->fmt,
+ p, remain);
+ CONSUME_RET;
+
+ assert (key != NULL && keylen > 0);
+
+ if (!ucl_msgpack_insert_object (parser, key, keylen,
+ parser->cur_obj)) {
+ return false;
+ }
+
+ key = NULL;
+ keylen = 0;
+
+ if (ucl_msgpack_is_container_finished (container)) {
+ state = finish_assoc_value;
+ }
+ else {
+ /* Read more elements */
+ state = read_type;
+ next_state = read_assoc_key;
+ }
+ break;
+
+ case finish_array_value:
+ case finish_assoc_value:
+ GET_NEXT_STATE;
+ state = read_type;
+ break;
+
+ case error_state:
+ ucl_create_err (&parser->err, "invalid state machine state");
+
+ return false;
+ }
+ }
+
+ /* Check the finishing state */
+ switch (state) {
+ case start_array:
+ case start_assoc:
+ /* Empty container at the end */
+ if (len != 0) {
+ ucl_create_err (&parser->err, "invalid non-empty container at the end");
+
+ return false;
+ }
+
+ parser->cur_obj = ucl_object_new_full (
+ state == start_array ? UCL_ARRAY : UCL_OBJECT,
+ parser->chunks->priority);
+ /* Insert to the previous level container */
+ if (!ucl_msgpack_insert_object (parser,
+ key, keylen, parser->cur_obj)) {
+ return false;
+ }
+ /* Get new container */
+ container = ucl_msgpack_get_container (parser, obj_parser, len);
+
+ if (container == NULL) {
+ return false;
+ }
+
+ ret = obj_parser->func (parser, container, len, obj_parser->fmt,
+ p, remain);
+ break;
+
+ case read_array_value:
+ case read_assoc_value:
+ if (len != 0) {
+ ucl_create_err (&parser->err, "unfinished value at the end");
+
+ return false;
+ }
+
+ container = parser->stack;
+
+ if (container == NULL) {
+ return false;
+ }
+
+ ret = obj_parser->func (parser, container, len, obj_parser->fmt,
+ p, remain);
+ CONSUME_RET;
+
+
+ /* Insert value to the container and check if we have finished array */
+ if (!ucl_msgpack_insert_object (parser, NULL, 0,
+ parser->cur_obj)) {
+ return false;
+ }
+ break;
+ case finish_array_value:
+ case finish_assoc_value:
+ case read_type:
+ /* Valid finishing state */
+ break;
+ default:
+ /* Invalid finishing state */
+ ucl_create_err (&parser->err, "invalid state machine finishing state: %d",
+ state);
+
+ return false;
+ }
+
+ /* Rewind to the top level container */
+ ucl_msgpack_get_next_container (parser);
+ assert (parser->stack == NULL ||
+ (parser->stack->level & MSGPACK_CONTAINER_BIT) == 0);
+
+ return true;
+}
+
+bool
+ucl_parse_msgpack (struct ucl_parser *parser)
+{
+ ucl_object_t *container = NULL;
+ const unsigned char *p;
+ bool ret;
+
+ assert (parser != NULL);
+ assert (parser->chunks != NULL);
+ assert (parser->chunks->begin != NULL);
+ assert (parser->chunks->remain != 0);
+
+ p = parser->chunks->begin;
+
+ if (parser->stack) {
+ container = parser->stack->obj;
+ }
+
+ /*
+ * When we start parsing message pack chunk, we must ensure that we
+ * have either a valid container or the top object inside message pack is
+ * of container type
+ */
+ if (container == NULL) {
+ if ((*p & 0x80) != 0x80 && !(*p >= 0xdc && *p <= 0xdf)) {
+ ucl_create_err (&parser->err, "bad top level object for msgpack");
+ return false;
+ }
+ }
+
+ ret = ucl_msgpack_consume (parser);
+
+ if (ret && parser->top_obj == NULL) {
+ parser->top_obj = parser->cur_obj;
+ }
+
+ return ret;
+}
+
+static ssize_t
+ucl_msgpack_parse_map (struct ucl_parser *parser,
+ struct ucl_stack *container, size_t len, enum ucl_msgpack_format fmt,
+ const unsigned char *pos, size_t remain)
+{
+ container->obj = parser->cur_obj;
+
+ return 0;
+}
+
+static ssize_t
+ucl_msgpack_parse_array (struct ucl_parser *parser,
+ struct ucl_stack *container, size_t len, enum ucl_msgpack_format fmt,
+ const unsigned char *pos, size_t remain)
+{
+ container->obj = parser->cur_obj;
+
+ return 0;
+}
+
+static ssize_t
+ucl_msgpack_parse_string (struct ucl_parser *parser,
+ struct ucl_stack *container, size_t len, enum ucl_msgpack_format fmt,
+ const unsigned char *pos, size_t remain)
+{
+ ucl_object_t *obj;
+
+ if (len > remain) {
+ return -1;
+ }
+
+ obj = ucl_object_new_full (UCL_STRING, parser->chunks->priority);
+ obj->value.sv = pos;
+ obj->len = len;
+
+ if (fmt >= msgpack_bin8 && fmt <= msgpack_bin32) {
+ obj->flags |= UCL_OBJECT_BINARY;
+ }
+
+ if (!(parser->flags & UCL_PARSER_ZEROCOPY)) {
+ if (obj->flags & UCL_OBJECT_BINARY) {
+ obj->trash_stack[UCL_TRASH_VALUE] = malloc (len);
+
+ if (obj->trash_stack[UCL_TRASH_VALUE] != NULL) {
+ memcpy (obj->trash_stack[UCL_TRASH_VALUE], pos, len);
+ }
+ }
+ else {
+ ucl_copy_value_trash (obj);
+ }
+ }
+
+ parser->cur_obj = obj;
+
+ return len;
+}
+
+static ssize_t
+ucl_msgpack_parse_int (struct ucl_parser *parser,
+ struct ucl_stack *container, size_t len, enum ucl_msgpack_format fmt,
+ const unsigned char *pos, size_t remain)
+{
+ ucl_object_t *obj;
+
+ if (len > remain) {
+ return -1;
+ }
+
+ obj = ucl_object_new_full (UCL_INT, parser->chunks->priority);
+
+ switch (fmt) {
+ case msgpack_positive_fixint:
+ obj->value.iv = (*pos & 0x7f);
+ len = 1;
+ break;
+ case msgpack_negative_fixint:
+ obj->value.iv = - (*pos & 0x1f);
+ len = 1;
+ break;
+ case msgpack_uint8:
+ obj->value.iv = (unsigned char)*pos;
+ len = 1;
+ break;
+ case msgpack_int8:
+ obj->value.iv = (signed char)*pos;
+ len = 1;
+ break;
+ case msgpack_int16:
+ obj->value.iv = FROM_BE16 (*(int16_t *)pos);
+ len = 2;
+ break;
+ case msgpack_uint16:
+ obj->value.iv = FROM_BE16 (*(uint16_t *)pos);
+ len = 2;
+ break;
+ case msgpack_int32:
+ obj->value.iv = FROM_BE32 (*(int32_t *)pos);
+ len = 4;
+ break;
+ case msgpack_uint32:
+ obj->value.iv = FROM_BE32 (*(uint32_t *)pos);
+ len = 4;
+ break;
+ case msgpack_int64:
+ obj->value.iv = FROM_BE64 (*(int64_t *)pos);
+ len = 8;
+ break;
+ case msgpack_uint64:
+ obj->value.iv = FROM_BE64 (*(uint64_t *)pos);
+ len = 8;
+ break;
+ default:
+ assert (0);
+ break;
+ }
+
+ parser->cur_obj = obj;
+
+ return len;
+}
+
+static ssize_t
+ucl_msgpack_parse_float (struct ucl_parser *parser,
+ struct ucl_stack *container, size_t len, enum ucl_msgpack_format fmt,
+ const unsigned char *pos, size_t remain)
+{
+ ucl_object_t *obj;
+ union {
+ uint32_t i;
+ float f;
+ } d;
+
+ if (len > remain) {
+ return -1;
+ }
+
+ obj = ucl_object_new_full (UCL_FLOAT, parser->chunks->priority);
+
+ switch (fmt) {
+ case msgpack_float32:
+ d.i = FROM_BE32 (*(uint32_t *)pos);
+ /* XXX: can be slow */
+ obj->value.dv = d.f;
+ len = 4;
+ break;
+ case msgpack_float64:
+ obj->value.iv = FROM_BE64 (*(uint64_t *)pos);
+ len = 8;
+ break;
+ default:
+ assert (0);
+ break;
+ }
+
+ parser->cur_obj = obj;
+
+ return len;
+}
+
+static ssize_t
+ucl_msgpack_parse_bool (struct ucl_parser *parser,
+ struct ucl_stack *container, size_t len, enum ucl_msgpack_format fmt,
+ const unsigned char *pos, size_t remain)
+{
+ ucl_object_t *obj;
+
+ if (len > remain) {
+ return -1;
+ }
+
+ obj = ucl_object_new_full (UCL_BOOLEAN, parser->chunks->priority);
+
+ switch (fmt) {
+ case msgpack_true:
+ obj->value.iv = true;
+ break;
+ case msgpack_false:
+ obj->value.iv = false;
+ break;
+ default:
+ assert (0);
+ break;
+ }
+
+ parser->cur_obj = obj;
+
+ return 1;
+}
+
+static ssize_t
+ucl_msgpack_parse_null (struct ucl_parser *parser,
+ struct ucl_stack *container, size_t len, enum ucl_msgpack_format fmt,
+ const unsigned char *pos, size_t remain)
+{
+ ucl_object_t *obj;
+
+ if (len > remain) {
+ return -1;
+ }
+
+ obj = ucl_object_new_full (UCL_NULL, parser->chunks->priority);
+ parser->cur_obj = obj;
+
+ return 1;
+}
+
+static ssize_t
+ucl_msgpack_parse_ignore (struct ucl_parser *parser,
+ struct ucl_stack *container, size_t len, enum ucl_msgpack_format fmt,
+ const unsigned char *pos, size_t remain)
+{
+ if (len > remain) {
+ return -1;
+ }
+
+ switch (fmt) {
+ case msgpack_fixext1:
+ len = 2;
+ break;
+ case msgpack_fixext2:
+ len = 3;
+ break;
+ case msgpack_fixext4:
+ len = 5;
+ break;
+ case msgpack_fixext8:
+ len = 9;
+ break;
+ case msgpack_fixext16:
+ len = 17;
+ break;
+ case msgpack_ext8:
+ case msgpack_ext16:
+ case msgpack_ext32:
+ len = len + 1;
+ break;
+ default:
+ ucl_create_err (&parser->err, "bad type: %x", (unsigned)fmt);
+ return -1;
+ }
+
+ return len;
+}
diff --git a/contrib/libucl/src/ucl_parser.c b/contrib/libucl/src/ucl_parser.c
index 75acba8..9bd4139 100644
--- a/contrib/libucl/src/ucl_parser.c
+++ b/contrib/libucl/src/ucl_parser.c
@@ -67,6 +67,7 @@ ucl_set_err (struct ucl_parser *parser, int code, const char *str, UT_string **e
else {
filename = "<unknown>";
}
+
if (chunk->pos < chunk->end) {
if (isgraph (*chunk->pos)) {
fmt_string = "error while parsing %s: "
@@ -84,6 +85,8 @@ ucl_set_err (struct ucl_parser *parser, int code, const char *str, UT_string **e
ucl_create_err (err, "error while parsing %s: at the end of chunk: %s",
filename, str);
}
+
+ parser->err_code = code;
}
/**
@@ -513,7 +516,7 @@ ucl_copy_or_store_ptr (struct ucl_parser *parser,
/* Copy string */
*dst = UCL_ALLOC (in_len + 1);
if (*dst == NULL) {
- ucl_set_err (parser, 0, "cannot allocate memory for a string",
+ ucl_set_err (parser, UCL_EINTERNAL, "cannot allocate memory for a string",
&parser->err);
return false;
}
@@ -559,7 +562,8 @@ ucl_copy_or_store_ptr (struct ucl_parser *parser,
* @return
*/
static inline ucl_object_t *
-ucl_add_parser_stack (ucl_object_t *obj, struct ucl_parser *parser, bool is_array, int level)
+ucl_parser_add_container (ucl_object_t *obj, struct ucl_parser *parser,
+ bool is_array, int level)
{
struct ucl_stack *st;
@@ -570,7 +574,9 @@ ucl_add_parser_stack (ucl_object_t *obj, struct ucl_parser *parser, bool is_arra
else {
obj->type = UCL_OBJECT;
}
- obj->value.ov = ucl_hash_create (parser->flags & UCL_PARSER_KEY_LOWERCASE);
+ if (obj->value.ov == NULL) {
+ obj->value.ov = ucl_hash_create (parser->flags & UCL_PARSER_KEY_LOWERCASE);
+ }
parser->state = UCL_STATE_KEY;
}
else {
@@ -585,7 +591,7 @@ ucl_add_parser_stack (ucl_object_t *obj, struct ucl_parser *parser, bool is_arra
st = UCL_ALLOC (sizeof (struct ucl_stack));
if (st == NULL) {
- ucl_set_err (parser, 0, "cannot allocate memory for an object",
+ ucl_set_err (parser, UCL_EINTERNAL, "cannot allocate memory for an object",
&parser->err);
ucl_object_unref (obj);
return NULL;
@@ -834,19 +840,21 @@ ucl_maybe_parse_number (ucl_object_t *obj,
*pos = c;
return EINVAL;
- set_obj:
- if (allow_double && (need_double || is_time)) {
- if (!is_time) {
- obj->type = UCL_FLOAT;
+set_obj:
+ if (obj != NULL) {
+ if (allow_double && (need_double || is_time)) {
+ if (!is_time) {
+ obj->type = UCL_FLOAT;
+ }
+ else {
+ obj->type = UCL_TIME;
+ }
+ obj->value.dv = is_neg ? (-dv) : dv;
}
else {
- obj->type = UCL_TIME;
+ obj->type = UCL_INT;
+ obj->value.iv = is_neg ? (-lv) : lv;
}
- obj->value.dv = is_neg ? (-dv) : dv;
- }
- else {
- obj->type = UCL_INT;
- obj->value.iv = is_neg ? (-lv) : lv;
}
*pos = p;
return 0;
@@ -856,6 +864,7 @@ ucl_maybe_parse_number (ucl_object_t *obj,
* Parse possible number
* @param parser
* @param chunk
+ * @param obj
* @return true if a number has been parsed
*/
static bool
@@ -875,7 +884,8 @@ ucl_lex_number (struct ucl_parser *parser,
return true;
}
else if (ret == ERANGE) {
- ucl_set_err (parser, ERANGE, "numeric value out of range", &parser->err);
+ ucl_set_err (parser, UCL_ESYNTAX, "numeric value out of range",
+ &parser->err);
}
return false;
@@ -885,6 +895,9 @@ ucl_lex_number (struct ucl_parser *parser,
* Parse quoted string with possible escapes
* @param parser
* @param chunk
+ * @param need_unescape
+ * @param ucl_escape
+ * @param var_expand
* @return true if a string has been parsed
*/
static bool
@@ -971,6 +984,7 @@ ucl_parser_append_elt (struct ucl_parser *parser, ucl_hash_t *cont,
/* Implicit array */
top->flags |= UCL_OBJECT_MULTIVALUE;
DL_APPEND (top, elt);
+ parser->stack->obj->len ++;
}
else {
if ((top->flags & UCL_OBJECT_MULTIVALUE) != 0) {
@@ -979,34 +993,127 @@ ucl_parser_append_elt (struct ucl_parser *parser, ucl_hash_t *cont,
}
else {
/* Convert to an array */
- ucl_hash_delete (cont, top);
nobj = ucl_object_typed_new (UCL_ARRAY);
nobj->key = top->key;
nobj->keylen = top->keylen;
nobj->flags |= UCL_OBJECT_MULTIVALUE;
ucl_array_append (nobj, top);
ucl_array_append (nobj, elt);
- ucl_hash_insert (cont, nobj, nobj->key, nobj->keylen);
+ ucl_hash_replace (cont, top, nobj);
+ }
+ }
+}
+
+bool
+ucl_parser_process_object_element (struct ucl_parser *parser, ucl_object_t *nobj)
+{
+ ucl_hash_t *container;
+ ucl_object_t *tobj;
+
+ container = parser->stack->obj->value.ov;
+
+ tobj = __DECONST (ucl_object_t *, ucl_hash_search_obj (container, nobj));
+ if (tobj == NULL) {
+ container = ucl_hash_insert_object (container, nobj,
+ parser->flags & UCL_PARSER_KEY_LOWERCASE);
+ nobj->prev = nobj;
+ nobj->next = NULL;
+ parser->stack->obj->len ++;
+ }
+ else {
+ unsigned priold = ucl_object_get_priority (tobj),
+ prinew = ucl_object_get_priority (nobj);
+ switch (parser->chunks->strategy) {
+
+ case UCL_DUPLICATE_APPEND:
+ /*
+ * The logic here is the following:
+ *
+ * - if we have two objects with the same priority, then we form an
+ * implicit or explicit array
+ * - if a new object has bigger priority, then we overwrite an old one
+ * - if a new object has lower priority, then we ignore it
+ */
+
+
+ /* Special case for inherited objects */
+ if (tobj->flags & UCL_OBJECT_INHERITED) {
+ prinew = priold + 1;
+ }
+
+ if (priold == prinew) {
+ ucl_parser_append_elt (parser, container, tobj, nobj);
+ }
+ else if (priold > prinew) {
+ /*
+ * We add this new object to a list of trash objects just to ensure
+ * that it won't come to any real object
+ * XXX: rather inefficient approach
+ */
+ DL_APPEND (parser->trash_objs, nobj);
+ }
+ else {
+ ucl_hash_replace (container, tobj, nobj);
+ ucl_object_unref (tobj);
+ }
+
+ break;
+
+ case UCL_DUPLICATE_REWRITE:
+ /* We just rewrite old values regardless of priority */
+ ucl_hash_replace (container, tobj, nobj);
+ ucl_object_unref (tobj);
+
+ break;
+
+ case UCL_DUPLICATE_ERROR:
+ ucl_create_err (&parser->err, "error while parsing %s: "
+ "line: %d, column: %d: duplicate element for key '%s' "
+ "has been found",
+ parser->cur_file ? parser->cur_file : "<unknown>",
+ parser->chunks->line, parser->chunks->column, nobj->key);
+ return false;
+
+ case UCL_DUPLICATE_MERGE:
+ /*
+ * Here we do have some old object so we just push it on top of objects stack
+ */
+ if (tobj->type == UCL_OBJECT || tobj->type == UCL_ARRAY) {
+ ucl_object_unref (nobj);
+ nobj = tobj;
+ }
+ else {
+ /* For other types we create implicit array as usual */
+ ucl_parser_append_elt (parser, container, tobj, nobj);
+ }
+ break;
}
}
+
+ parser->stack->obj->value.ov = container;
+ parser->cur_obj = nobj;
+
+ return true;
}
/**
* Parse a key in an object
* @param parser
* @param chunk
+ * @param next_key
+ * @param end_of_object
* @return true if a key has been parsed
*/
static bool
-ucl_parse_key (struct ucl_parser *parser, struct ucl_chunk *chunk, bool *next_key, bool *end_of_object)
+ucl_parse_key (struct ucl_parser *parser, struct ucl_chunk *chunk,
+ bool *next_key, bool *end_of_object)
{
const unsigned char *p, *c = NULL, *end, *t;
const char *key = NULL;
bool got_quote = false, got_eq = false, got_semicolon = false,
need_unescape = false, ucl_escape = false, var_expand = false,
got_content = false, got_sep = false;
- ucl_object_t *nobj, *tobj;
- ucl_hash_t *container;
+ ucl_object_t *nobj;
ssize_t keylen;
p = chunk->pos;
@@ -1191,47 +1298,17 @@ ucl_parse_key (struct ucl_parser *parser, struct ucl_chunk *chunk, bool *next_ke
return false;
}
- container = parser->stack->obj->value.ov;
nobj->key = key;
nobj->keylen = keylen;
- tobj = __DECONST (ucl_object_t *, ucl_hash_search_obj (container, nobj));
- if (tobj == NULL) {
- container = ucl_hash_insert_object (container, nobj,
- parser->flags & UCL_PARSER_KEY_LOWERCASE);
- nobj->prev = nobj;
- nobj->next = NULL;
- parser->stack->obj->len ++;
- }
- else {
- /*
- * The logic here is the following:
- *
- * - if we have two objects with the same priority, then we form an
- * implicit or explicit array
- * - if a new object has bigger priority, then we overwrite an old one
- * - if a new object has lower priority, then we ignore it
- */
- unsigned priold = ucl_object_get_priority (tobj),
- prinew = ucl_object_get_priority (nobj);
- if (priold == prinew) {
- ucl_parser_append_elt (parser, container, tobj, nobj);
- }
- else if (priold > prinew) {
- ucl_object_unref (nobj);
- return true;
- }
- else {
- ucl_hash_replace (container, tobj, nobj);
- ucl_object_unref (tobj);
- }
+
+ if (!ucl_parser_process_object_element (parser, nobj)) {
+ return false;
}
if (ucl_escape) {
nobj->flags |= UCL_OBJECT_NEED_KEY_ESCAPE;
}
- parser->stack->obj->value.ov = container;
- parser->cur_obj = nobj;
return true;
}
@@ -1240,6 +1317,8 @@ ucl_parse_key (struct ucl_parser *parser, struct ucl_chunk *chunk, bool *next_ke
* Parse a cl string
* @param parser
* @param chunk
+ * @param var_expand
+ * @param need_unescape
* @return true if a key has been parsed
*/
static bool
@@ -1309,6 +1388,8 @@ ucl_parse_string_value (struct ucl_parser *parser,
* @param chunk
* @param term
* @param term_len
+ * @param beg
+ * @param var_expand
* @return size of multiline string or 0 in case of error
*/
static int
@@ -1360,8 +1441,8 @@ ucl_parse_multiline_string (struct ucl_parser *parser,
return len;
}
-static ucl_object_t*
-ucl_get_value_object (struct ucl_parser *parser)
+static inline ucl_object_t*
+ucl_parser_get_container (struct ucl_parser *parser)
{
ucl_object_t *t, *obj = NULL;
@@ -1373,7 +1454,12 @@ ucl_get_value_object (struct ucl_parser *parser)
/* Object must be allocated */
obj = ucl_object_new_full (UCL_NULL, parser->chunks->priority);
t = parser->stack->obj;
- ucl_array_append (t, obj);
+
+ if (!ucl_array_append (t, obj)) {
+ ucl_object_unref (obj);
+ return NULL;
+ }
+
parser->cur_obj = obj;
}
else {
@@ -1417,42 +1503,51 @@ ucl_parse_value (struct ucl_parser *parser, struct ucl_chunk *chunk)
c = p;
switch (*p) {
case '"':
- obj = ucl_get_value_object (parser);
ucl_chunk_skipc (chunk, p);
- if (!ucl_lex_json_string (parser, chunk, &need_unescape, &ucl_escape, &var_expand)) {
+
+ if (!ucl_lex_json_string (parser, chunk, &need_unescape, &ucl_escape,
+ &var_expand)) {
return false;
}
+
+ obj = ucl_parser_get_container (parser);
str_len = chunk->pos - c - 2;
obj->type = UCL_STRING;
- if ((str_len = ucl_copy_or_store_ptr (parser, c + 1, &obj->trash_stack[UCL_TRASH_VALUE],
- &obj->value.sv, str_len, need_unescape, false, var_expand)) == -1) {
+ if ((str_len = ucl_copy_or_store_ptr (parser, c + 1,
+ &obj->trash_stack[UCL_TRASH_VALUE],
+ &obj->value.sv, str_len, need_unescape, false,
+ var_expand)) == -1) {
return false;
}
obj->len = str_len;
+
parser->state = UCL_STATE_AFTER_VALUE;
p = chunk->pos;
+
return true;
break;
case '{':
- obj = ucl_get_value_object (parser);
+ obj = ucl_parser_get_container (parser);
/* We have a new object */
- obj = ucl_add_parser_stack (obj, parser, false, parser->stack->level);
+ obj = ucl_parser_add_container (obj, parser, false, parser->stack->level);
if (obj == NULL) {
return false;
}
ucl_chunk_skipc (chunk, p);
+
return true;
break;
case '[':
- obj = ucl_get_value_object (parser);
+ obj = ucl_parser_get_container (parser);
/* We have a new array */
- obj = ucl_add_parser_stack (obj, parser, true, parser->stack->level);
+ obj = ucl_parser_add_container (obj, parser, true, parser->stack->level);
if (obj == NULL) {
return false;
}
ucl_chunk_skipc (chunk, p);
+
return true;
break;
case ']':
@@ -1466,7 +1561,7 @@ ucl_parse_value (struct ucl_parser *parser, struct ucl_chunk *chunk)
}
break;
case '<':
- obj = ucl_get_value_object (parser);
+ obj = ucl_parser_get_container (parser);
/* We have something like multiline value, which must be <<[A-Z]+\n */
if (chunk->end - p > 3) {
if (memcmp (p, "<<", 2) == 0) {
@@ -1488,13 +1583,19 @@ ucl_parse_value (struct ucl_parser *parser, struct ucl_chunk *chunk)
"unterminated multiline value", &parser->err);
return false;
}
+
obj->type = UCL_STRING;
- if ((str_len = ucl_copy_or_store_ptr (parser, c, &obj->trash_stack[UCL_TRASH_VALUE],
- &obj->value.sv, str_len - 1, false, false, var_expand)) == -1) {
+ obj->flags |= UCL_OBJECT_MULTILINE;
+ if ((str_len = ucl_copy_or_store_ptr (parser, c,
+ &obj->trash_stack[UCL_TRASH_VALUE],
+ &obj->value.sv, str_len - 1, false,
+ false, var_expand)) == -1) {
return false;
}
obj->len = str_len;
+
parser->state = UCL_STATE_AFTER_VALUE;
+
return true;
}
}
@@ -1503,8 +1604,9 @@ ucl_parse_value (struct ucl_parser *parser, struct ucl_chunk *chunk)
default:
parse_string:
if (obj == NULL) {
- obj = ucl_get_value_object (parser);
+ obj = ucl_parser_get_container (parser);
}
+
/* Parse atom */
if (ucl_test_character (*p, UCL_CHARACTER_VALUE_DIGIT_START)) {
if (!ucl_lex_number (parser, chunk, obj)) {
@@ -1519,7 +1621,8 @@ parse_string:
/* Fallback to normal string */
}
- if (!ucl_parse_string_value (parser, chunk, &var_expand, &need_unescape)) {
+ if (!ucl_parse_string_value (parser, chunk, &var_expand,
+ &need_unescape)) {
return false;
}
/* Cut trailing spaces */
@@ -1530,7 +1633,7 @@ parse_string:
}
str_len = chunk->pos - c - stripped_spaces;
if (str_len <= 0) {
- ucl_set_err (parser, 0, "string value must not be empty",
+ ucl_set_err (parser, UCL_ESYNTAX, "string value must not be empty",
&parser->err);
return false;
}
@@ -1540,7 +1643,8 @@ parse_string:
}
else if (!ucl_maybe_parse_boolean (obj, c, str_len)) {
obj->type = UCL_STRING;
- if ((str_len = ucl_copy_or_store_ptr (parser, c, &obj->trash_stack[UCL_TRASH_VALUE],
+ if ((str_len = ucl_copy_or_store_ptr (parser, c,
+ &obj->trash_stack[UCL_TRASH_VALUE],
&obj->value.sv, str_len, need_unescape,
false, var_expand)) == -1) {
return false;
@@ -1652,6 +1756,9 @@ ucl_parse_after_value (struct ucl_parser *parser, struct ucl_chunk *chunk)
* Handle macro data
* @param parser
* @param chunk
+ * @param marco
+ * @param macro_start
+ * @param macro_len
* @return
*/
static bool
@@ -1790,6 +1897,7 @@ ucl_parse_macro_arguments (struct ucl_parser *parser,
if (chunk->remain == 0) {
goto restore_chunk;
}
+ args_len ++;
ucl_chunk_skipc (chunk, p);
break;
case 99:
@@ -1842,8 +1950,6 @@ restore_chunk:
/**
* Handle the main states of rcl parser
* @param parser parser structure
- * @param data the pointer to the beginning of a chunk
- * @param len the length of a chunk
* @return true if chunk has been parsed and false in case of error
*/
static bool
@@ -1858,17 +1964,6 @@ ucl_state_machine (struct ucl_parser *parser)
bool next_key = false, end_of_object = false, ret;
if (parser->top_obj == NULL) {
- if (*chunk->pos == '[') {
- obj = ucl_add_parser_stack (NULL, parser, true, 0);
- }
- else {
- obj = ucl_add_parser_stack (NULL, parser, false, 0);
- }
- if (obj == NULL) {
- return false;
- }
- parser->top_obj = obj;
- parser->cur_obj = obj;
parser->state = UCL_STATE_INIT;
}
@@ -1892,7 +1987,9 @@ ucl_state_machine (struct ucl_parser *parser)
UCL_CHARACTER_WHITESPACE_UNSAFE)) {
ucl_chunk_skipc (chunk, p);
}
+
p = chunk->pos;
+
if (*p == '[') {
parser->state = UCL_STATE_VALUE;
ucl_chunk_skipc (chunk, p);
@@ -1903,6 +2000,23 @@ ucl_state_machine (struct ucl_parser *parser)
ucl_chunk_skipc (chunk, p);
}
}
+
+ if (parser->top_obj == NULL) {
+ if (parser->state == UCL_STATE_VALUE) {
+ obj = ucl_parser_add_container (NULL, parser, true, 0);
+ }
+ else {
+ obj = ucl_parser_add_container (NULL, parser, false, 0);
+ }
+
+ if (obj == NULL) {
+ return false;
+ }
+
+ parser->top_obj = obj;
+ parser->cur_obj = obj;
+ }
+
}
break;
case UCL_STATE_KEY:
@@ -1936,7 +2050,7 @@ ucl_state_machine (struct ucl_parser *parser)
else if (parser->state != UCL_STATE_MACRO_NAME) {
if (next_key && parser->stack->obj->type == UCL_OBJECT) {
/* Parse more keys and nest objects accordingly */
- obj = ucl_add_parser_stack (parser->cur_obj, parser, false,
+ obj = ucl_parser_add_container (parser->cur_obj, parser, false,
parser->stack->level + 1);
if (obj == NULL) {
return false;
@@ -1967,6 +2081,7 @@ ucl_state_machine (struct ucl_parser *parser)
parser->state = UCL_STATE_ERROR;
return false;
}
+
if (parser->stack != NULL) {
if (parser->stack->obj->type == UCL_OBJECT) {
parser->state = UCL_STATE_KEY;
@@ -1987,20 +2102,36 @@ ucl_state_machine (struct ucl_parser *parser)
*p != '(') {
ucl_chunk_skipc (chunk, p);
}
- else if (p - c > 0) {
- /* We got macro name */
- macro_len = (size_t)(p - c);
- HASH_FIND (hh, parser->macroes, c, macro_len, macro);
- if (macro == NULL) {
- ucl_create_err (&parser->err, "error on line %d at column %d: "
- "unknown macro: '%.*s', character: '%c'",
- chunk->line, chunk->column, (int)(p - c), c, *chunk->pos);
+ else {
+ if (p - c > 0) {
+ /* We got macro name */
+ macro_len = (size_t) (p - c);
+ HASH_FIND (hh, parser->macroes, c, macro_len, macro);
+ if (macro == NULL) {
+ ucl_create_err (&parser->err,
+ "error on line %d at column %d: "
+ "unknown macro: '%.*s', character: '%c'",
+ chunk->line,
+ chunk->column,
+ (int) (p - c),
+ c,
+ *chunk->pos);
+ parser->state = UCL_STATE_ERROR;
+ return false;
+ }
+ /* Now we need to skip all spaces */
+ SKIP_SPACES_COMMENTS(parser, chunk, p);
+ parser->state = UCL_STATE_MACRO;
+ }
+ else {
+ /* We have invalid macro name */
+ ucl_create_err (&parser->err,
+ "error on line %d at column %d: invalid macro name",
+ chunk->line,
+ chunk->column);
parser->state = UCL_STATE_ERROR;
return false;
}
- /* Now we need to skip all spaces */
- SKIP_SPACES_COMMENTS(parser, chunk, p);
- parser->state = UCL_STATE_MACRO;
}
break;
case UCL_STATE_MACRO:
@@ -2024,14 +2155,36 @@ ucl_state_machine (struct ucl_parser *parser)
macro_start, macro_len);
parser->state = parser->prev_state;
if (macro_escaped == NULL) {
- ret = macro->handler (macro_start, macro_len, macro_args,
- macro->ud);
+ if (macro->is_context) {
+ ret = macro->h.context_handler (macro_start, macro_len,
+ macro_args,
+ parser->top_obj,
+ macro->ud);
+ }
+ else {
+ ret = macro->h.handler (macro_start, macro_len, macro_args,
+ macro->ud);
+ }
}
else {
- ret = macro->handler (macro_escaped, macro_len, macro_args,
+ if (macro->is_context) {
+ ret = macro->h.context_handler (macro_escaped, macro_len,
+ macro_args,
+ parser->top_obj,
+ macro->ud);
+ }
+ else {
+ ret = macro->h.handler (macro_escaped, macro_len, macro_args,
macro->ud);
+ }
+
UCL_FREE (macro_len + 1, macro_escaped);
}
+
+ /*
+ * Chunk can be modified within macro handler
+ */
+ chunk = parser->chunks;
p = chunk->pos;
if (macro_args) {
ucl_object_unref (macro_args);
@@ -2061,13 +2214,18 @@ ucl_parser_new (int flags)
if (new == NULL) {
return NULL;
}
+
memset (new, 0, sizeof (struct ucl_parser));
ucl_parser_register_macro (new, "include", ucl_include_handler, new);
ucl_parser_register_macro (new, "try_include", ucl_try_include_handler, new);
ucl_parser_register_macro (new, "includes", ucl_includes_handler, new);
+ ucl_parser_register_macro (new, "priority", ucl_priority_handler, new);
+ ucl_parser_register_macro (new, "load", ucl_load_handler, new);
+ ucl_parser_register_context_macro (new, "inherit", ucl_inherit_handler, new);
new->flags = flags;
+ new->includepaths = NULL;
/* Initial assumption about filevars */
ucl_parser_set_filevars (new, NULL, false);
@@ -2075,6 +2233,17 @@ ucl_parser_new (int flags)
return new;
}
+bool
+ucl_parser_set_default_priority (struct ucl_parser *parser, unsigned prio)
+{
+ if (parser == NULL) {
+ return false;
+ }
+
+ parser->default_priority = prio;
+
+ return true;
+}
void
ucl_parser_register_macro (struct ucl_parser *parser, const char *macro,
@@ -2085,14 +2254,39 @@ ucl_parser_register_macro (struct ucl_parser *parser, const char *macro,
if (macro == NULL || handler == NULL) {
return;
}
+
+ new = UCL_ALLOC (sizeof (struct ucl_macro));
+ if (new == NULL) {
+ return;
+ }
+
+ memset (new, 0, sizeof (struct ucl_macro));
+ new->h.handler = handler;
+ new->name = strdup (macro);
+ new->ud = ud;
+ HASH_ADD_KEYPTR (hh, parser->macroes, new->name, strlen (new->name), new);
+}
+
+void
+ucl_parser_register_context_macro (struct ucl_parser *parser, const char *macro,
+ ucl_context_macro_handler handler, void* ud)
+{
+ struct ucl_macro *new;
+
+ if (macro == NULL || handler == NULL) {
+ return;
+ }
+
new = UCL_ALLOC (sizeof (struct ucl_macro));
if (new == NULL) {
return;
}
+
memset (new, 0, sizeof (struct ucl_macro));
- new->handler = handler;
+ new->h.context_handler = handler;
new->name = strdup (macro);
new->ud = ud;
+ new->is_context = true;
HASH_ADD_KEYPTR (hh, parser->macroes, new->name, strlen (new->name), new);
}
@@ -2159,11 +2353,16 @@ ucl_parser_set_variables_handler (struct ucl_parser *parser,
}
bool
-ucl_parser_add_chunk_priority (struct ucl_parser *parser, const unsigned char *data,
- size_t len, unsigned priority)
+ucl_parser_add_chunk_full (struct ucl_parser *parser, const unsigned char *data,
+ size_t len, unsigned priority, enum ucl_duplicate_strategy strat,
+ enum ucl_parse_type parse_type)
{
struct ucl_chunk *chunk;
+ if (parser == NULL) {
+ return false;
+ }
+
if (data == NULL) {
ucl_create_err (&parser->err, "invalid chunk added");
return false;
@@ -2185,14 +2384,24 @@ ucl_parser_add_chunk_priority (struct ucl_parser *parser, const unsigned char *d
chunk->line = 1;
chunk->column = 0;
chunk->priority = priority;
+ chunk->strategy = strat;
+ chunk->parse_type = parse_type;
LL_PREPEND (parser->chunks, chunk);
parser->recursion ++;
+
if (parser->recursion > UCL_MAX_RECURSION) {
ucl_create_err (&parser->err, "maximum include nesting limit is reached: %d",
parser->recursion);
return false;
}
- return ucl_state_machine (parser);
+
+ switch (parse_type) {
+ default:
+ case UCL_PARSE_UCL:
+ return ucl_state_machine (parser);
+ case UCL_PARSE_MSGPACK:
+ return ucl_parse_msgpack (parser);
+ }
}
ucl_create_err (&parser->err, "a parser is in an invalid state");
@@ -2201,15 +2410,33 @@ ucl_parser_add_chunk_priority (struct ucl_parser *parser, const unsigned char *d
}
bool
+ucl_parser_add_chunk_priority (struct ucl_parser *parser,
+ const unsigned char *data, size_t len, unsigned priority)
+{
+ /* We dereference parser, so this check is essential */
+ if (parser == NULL) {
+ return false;
+ }
+
+ return ucl_parser_add_chunk_full (parser, data, len,
+ priority, UCL_DUPLICATE_APPEND, UCL_PARSE_UCL);
+}
+
+bool
ucl_parser_add_chunk (struct ucl_parser *parser, const unsigned char *data,
size_t len)
{
- return ucl_parser_add_chunk_priority (parser, data, len, 0);
+ if (parser == NULL) {
+ return false;
+ }
+
+ return ucl_parser_add_chunk_full (parser, data, len,
+ parser->default_priority, UCL_DUPLICATE_APPEND, UCL_PARSE_UCL);
}
bool
-ucl_parser_add_string (struct ucl_parser *parser, const char *data,
- size_t len)
+ucl_parser_add_string_priority (struct ucl_parser *parser, const char *data,
+ size_t len, unsigned priority)
{
if (data == NULL) {
ucl_create_err (&parser->err, "invalid string added");
@@ -2219,5 +2446,40 @@ ucl_parser_add_string (struct ucl_parser *parser, const char *data,
len = strlen (data);
}
- return ucl_parser_add_chunk (parser, (const unsigned char *)data, len);
+ return ucl_parser_add_chunk_priority (parser,
+ (const unsigned char *)data, len, priority);
+}
+
+bool
+ucl_parser_add_string (struct ucl_parser *parser, const char *data,
+ size_t len)
+{
+ if (parser == NULL) {
+ return false;
+ }
+
+ return ucl_parser_add_string_priority (parser,
+ (const unsigned char *)data, len, parser->default_priority);
+}
+
+bool
+ucl_set_include_path (struct ucl_parser *parser, ucl_object_t *paths)
+{
+ if (parser == NULL || paths == NULL) {
+ return false;
+ }
+
+ if (parser->includepaths == NULL) {
+ parser->includepaths = ucl_object_copy (paths);
+ }
+ else {
+ ucl_object_unref (parser->includepaths);
+ parser->includepaths = ucl_object_copy (paths);
+ }
+
+ if (parser->includepaths == NULL) {
+ return false;
+ }
+
+ return true;
}
diff --git a/contrib/libucl/src/ucl_sexp.c b/contrib/libucl/src/ucl_sexp.c
new file mode 100644
index 0000000..3ca7eb1
--- /dev/null
+++ b/contrib/libucl/src/ucl_sexp.c
@@ -0,0 +1,224 @@
+/*
+ * Copyright (c) 2015, Vsevolod Stakhov
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY AUTHOR ''AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL AUTHOR BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <ucl.h>
+#include "ucl.h"
+#include "ucl_internal.h"
+#include "utlist.h"
+
+#define NEXT_STATE do { \
+if (p >= end) { \
+ if (state != read_ebrace) { \
+ ucl_create_err (&parser->err,\
+ "extra data");\
+ state = parse_err; \
+ } \
+} \
+else { \
+switch (*p) { \
+ case '(': \
+ state = read_obrace; \
+ break; \
+ case ')': \
+ state = read_ebrace; \
+ break; \
+ default: \
+ len = 0; \
+ mult = 1; \
+ state = read_length; \
+ break; \
+ } \
+} \
+} while(0)
+
+bool
+ucl_parse_csexp (struct ucl_parser *parser)
+{
+ const unsigned char *p, *end;
+ ucl_object_t *obj;
+ struct ucl_stack *st;
+ uint64_t len = 0, mult = 1;
+ enum {
+ start_parse,
+ read_obrace,
+ read_length,
+ read_value,
+ read_ebrace,
+ parse_err
+ } state = start_parse;
+
+ assert (parser != NULL);
+ assert (parser->chunks != NULL);
+ assert (parser->chunks->begin != NULL);
+ assert (parser->chunks->remain != 0);
+
+ p = parser->chunks->begin;
+ end = p + parser->chunks->remain;
+
+ while (p < end) {
+ switch (state) {
+ case start_parse:
+ /* At this point we expect open brace */
+ if (*p == '(') {
+ state = read_obrace;
+ }
+ else {
+ ucl_create_err (&parser->err, "bad starting character for "
+ "sexp block: %x", (int)*p);
+ state = parse_err;
+ }
+ break;
+
+ case read_obrace:
+ st = calloc (1, sizeof (*st));
+
+ if (st == NULL) {
+ ucl_create_err (&parser->err, "no memory");
+ state = parse_err;
+ continue;
+ }
+
+ st->obj = ucl_object_typed_new (UCL_ARRAY);
+
+ if (st->obj == NULL) {
+ ucl_create_err (&parser->err, "no memory");
+ state = parse_err;
+ continue;
+ }
+
+ if (parser->stack == NULL) {
+ /* We have no stack */
+ parser->stack = st;
+
+ if (parser->top_obj == NULL) {
+ parser->top_obj = st->obj;
+ }
+ }
+ else {
+ /* Prepend new element to the stack */
+ LL_PREPEND (parser->stack, st);
+ }
+
+ p ++;
+ NEXT_STATE;
+
+ break;
+
+ case read_length:
+ if (*p == ':') {
+ if (len == 0) {
+ ucl_create_err (&parser->err, "zero length element");
+ state = parse_err;
+ continue;
+ }
+
+ state = read_value;
+ }
+ else if (*p >= '0' && *p <= '9') {
+ len += (*p - '0') * mult;
+ mult *= 10;
+
+ if (len > UINT32_MAX) {
+ ucl_create_err (&parser->err, "too big length of an "
+ "element");
+ state = parse_err;
+ continue;
+ }
+ }
+ else {
+ ucl_create_err (&parser->err, "bad length character: %x",
+ (int)*p);
+ state = parse_err;
+ continue;
+ }
+
+ p ++;
+ break;
+
+ case read_value:
+ if ((uint64_t)(end - p) > len || len == 0) {
+ ucl_create_err (&parser->err, "invalid length: %llu, %ld "
+ "remain", (long long unsigned)len, (long)(end - p));
+ state = parse_err;
+ continue;
+ }
+ obj = ucl_object_typed_new (UCL_STRING);
+
+ obj->value.sv = (const char*)p;
+ obj->len = len;
+ obj->flags |= UCL_OBJECT_BINARY;
+
+ if (!(parser->flags & UCL_PARSER_ZEROCOPY)) {
+ ucl_copy_value_trash (obj);
+ }
+
+ ucl_array_append (parser->stack->obj, obj);
+ p += len;
+ NEXT_STATE;
+ break;
+
+ case read_ebrace:
+ if (parser->stack == NULL) {
+ /* We have an extra end brace */
+ ucl_create_err (&parser->err, "invalid length: %llu, %ld "
+ "remain", (long long unsigned)len, (long)(end - p));
+ state = parse_err;
+ continue;
+ }
+ /* Pop the container */
+ st = parser->stack;
+ parser->stack = st->next;
+
+ if (parser->stack->obj->type == UCL_ARRAY) {
+ ucl_array_append (parser->stack->obj, st->obj);
+ }
+ else {
+ ucl_create_err (&parser->err, "bad container object, array "
+ "expected");
+ state = parse_err;
+ continue;
+ }
+
+ free (st);
+ p++;
+ NEXT_STATE;
+ break;
+
+ case parse_err:
+ default:
+ return false;
+ }
+ }
+
+ if (state != read_ebrace) {
+ ucl_create_err (&parser->err, "invalid finishing state: %d", state);
+ return false;
+ }
+
+ return true;
+} \ No newline at end of file
diff --git a/contrib/libucl/src/ucl_util.c b/contrib/libucl/src/ucl_util.c
index 41e012b..730a5c4 100644
--- a/contrib/libucl/src/ucl_util.c
+++ b/contrib/libucl/src/ucl_util.c
@@ -1,4 +1,5 @@
/* Copyright (c) 2013, Vsevolod Stakhov
+ * Copyright (c) 2015 Allan Jude <allanjude@freebsd.org>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -25,6 +26,7 @@
#include "ucl_internal.h"
#include "ucl_chartable.h"
#include "kvec.h"
+#include <stdarg.h>
#ifndef _WIN32
#include <glob.h>
@@ -230,11 +232,13 @@ ucl_object_free_internal (ucl_object_t *obj, bool allow_rec, ucl_object_dtor dto
kv_destroy (*vec);
UCL_FREE (sizeof (*vec), vec);
}
+ obj->value.av = NULL;
}
else if (obj->type == UCL_OBJECT) {
if (obj->value.ov != NULL) {
ucl_hash_destroy (obj->value.ov, (ucl_hash_free_func *)dtor);
}
+ obj->value.ov = NULL;
}
tmp = obj->next;
dtor (obj);
@@ -266,6 +270,17 @@ ucl_unescape_json_string (char *str, size_t len)
while (len) {
if (*h == '\\') {
h ++;
+
+ if (len == 1) {
+ /*
+ * If \ is last, then do not try to go further
+ * Issue: #74
+ */
+ len --;
+ *t++ = '\\';
+ continue;
+ }
+
switch (*h) {
case 'n':
*t++ = '\n';
@@ -350,7 +365,10 @@ ucl_unescape_json_string (char *str, size_t len)
else {
*t++ = *h++;
}
- len --;
+
+ if (len > 0) {
+ len --;
+ }
}
*t = '\0';
@@ -392,11 +410,24 @@ ucl_copy_value_trash (const ucl_object_t *obj)
if (obj->type == UCL_STRING) {
/* Special case for strings */
- deconst->trash_stack[UCL_TRASH_VALUE] = malloc (obj->len + 1);
- if (deconst->trash_stack[UCL_TRASH_VALUE] != NULL) {
- memcpy (deconst->trash_stack[UCL_TRASH_VALUE], obj->value.sv, obj->len);
- deconst->trash_stack[UCL_TRASH_VALUE][obj->len] = '\0';
- deconst->value.sv = obj->trash_stack[UCL_TRASH_VALUE];
+ if (obj->flags & UCL_OBJECT_BINARY) {
+ deconst->trash_stack[UCL_TRASH_VALUE] = malloc (obj->len);
+ if (deconst->trash_stack[UCL_TRASH_VALUE] != NULL) {
+ memcpy (deconst->trash_stack[UCL_TRASH_VALUE],
+ obj->value.sv,
+ obj->len);
+ deconst->value.sv = obj->trash_stack[UCL_TRASH_VALUE];
+ }
+ }
+ else {
+ deconst->trash_stack[UCL_TRASH_VALUE] = malloc (obj->len + 1);
+ if (deconst->trash_stack[UCL_TRASH_VALUE] != NULL) {
+ memcpy (deconst->trash_stack[UCL_TRASH_VALUE],
+ obj->value.sv,
+ obj->len);
+ deconst->trash_stack[UCL_TRASH_VALUE][obj->len] = '\0';
+ deconst->value.sv = obj->trash_stack[UCL_TRASH_VALUE];
+ }
}
}
else {
@@ -406,10 +437,11 @@ ucl_copy_value_trash (const ucl_object_t *obj)
}
deconst->flags |= UCL_OBJECT_ALLOCATED_VALUE;
}
+
return obj->trash_stack[UCL_TRASH_VALUE];
}
-UCL_EXTERN ucl_object_t*
+ucl_object_t*
ucl_parser_get_object (struct ucl_parser *parser)
{
if (parser->state != UCL_STATE_ERROR && parser->top_obj != NULL) {
@@ -419,7 +451,7 @@ ucl_parser_get_object (struct ucl_parser *parser)
return NULL;
}
-UCL_EXTERN void
+void
ucl_parser_free (struct ucl_parser *parser)
{
struct ucl_stack *stack, *stmp;
@@ -427,6 +459,7 @@ ucl_parser_free (struct ucl_parser *parser)
struct ucl_chunk *chunk, *ctmp;
struct ucl_pubkey *key, *ktmp;
struct ucl_variable *var, *vtmp;
+ ucl_object_t *tr, *trtmp;
if (parser == NULL) {
return;
@@ -436,6 +469,10 @@ ucl_parser_free (struct ucl_parser *parser)
ucl_object_unref (parser->top_obj);
}
+ if (parser->includepaths != NULL) {
+ ucl_object_unref (parser->includepaths);
+ }
+
LL_FOREACH_SAFE (parser->stack, stack, stmp) {
free (stack);
}
@@ -455,6 +492,9 @@ ucl_parser_free (struct ucl_parser *parser)
free (var->var);
UCL_FREE (sizeof (struct ucl_variable), var);
}
+ LL_FOREACH_SAFE (parser->trash_objs, tr, trtmp) {
+ ucl_object_free_internal (tr, false, ucl_object_dtor_free);
+ }
if (parser->err != NULL) {
utstring_free (parser->err);
@@ -467,29 +507,61 @@ ucl_parser_free (struct ucl_parser *parser)
UCL_FREE (sizeof (struct ucl_parser), parser);
}
-UCL_EXTERN const char *
+const char *
ucl_parser_get_error(struct ucl_parser *parser)
{
if (parser == NULL) {
return NULL;
}
- if (parser->err == NULL)
+ if (parser->err == NULL) {
return NULL;
+ }
- return utstring_body(parser->err);
+ return utstring_body (parser->err);
}
-UCL_EXTERN void
+int
+ucl_parser_get_error_code(struct ucl_parser *parser)
+{
+ if (parser == NULL) {
+ return 0;
+ }
+
+ return parser->err_code;
+}
+
+unsigned
+ucl_parser_get_column(struct ucl_parser *parser)
+{
+ if (parser == NULL || parser->chunks == NULL) {
+ return 0;
+ }
+
+ return parser->chunks->column;
+}
+
+unsigned
+ucl_parser_get_linenum(struct ucl_parser *parser)
+{
+ if (parser == NULL || parser->chunks == NULL) {
+ return 0;
+ }
+
+ return parser->chunks->line;
+}
+
+void
ucl_parser_clear_error(struct ucl_parser *parser)
{
if (parser != NULL && parser->err != NULL) {
utstring_free(parser->err);
parser->err = NULL;
+ parser->err_code = 0;
}
}
-UCL_EXTERN bool
+bool
ucl_pubkey_add (struct ucl_parser *parser, const unsigned char *key, size_t len)
{
#ifndef HAVE_OPENSSL
@@ -738,6 +810,20 @@ ucl_sig_check (const unsigned char *data, size_t datalen,
}
#endif
+struct ucl_include_params {
+ bool check_signature;
+ bool must_exist;
+ bool use_glob;
+ bool use_prefix;
+ bool soft_fail;
+ bool allow_glob;
+ unsigned priority;
+ enum ucl_duplicate_strategy strat;
+ enum ucl_parse_type parse_type;
+ const char *prefix;
+ const char *target;
+};
+
/**
* Include an url to configuration
* @param data
@@ -748,8 +834,8 @@ ucl_sig_check (const unsigned char *data, size_t datalen,
*/
static bool
ucl_include_url (const unsigned char *data, size_t len,
- struct ucl_parser *parser, bool check_signature, bool must_exist,
- unsigned priority)
+ struct ucl_parser *parser,
+ struct ucl_include_params *params)
{
bool res;
@@ -761,11 +847,11 @@ ucl_include_url (const unsigned char *data, size_t len,
snprintf (urlbuf, sizeof (urlbuf), "%.*s", (int)len, data);
- if (!ucl_fetch_url (urlbuf, &buf, &buflen, &parser->err, must_exist)) {
- return (!must_exist || false);
+ if (!ucl_fetch_url (urlbuf, &buf, &buflen, &parser->err, params->must_exist)) {
+ return (!params->must_exist || false);
}
- if (check_signature) {
+ if (params->check_signature) {
#if (defined(HAVE_OPENSSL) && OPENSSL_VERSION_NUMBER >= 0x10000000L)
unsigned char *sigbuf = NULL;
size_t siglen = 0;
@@ -792,7 +878,8 @@ ucl_include_url (const unsigned char *data, size_t len,
prev_state = parser->state;
parser->state = UCL_STATE_INIT;
- res = ucl_parser_add_chunk_priority (parser, buf, buflen, priority);
+ res = ucl_parser_add_chunk_full (parser, buf, buflen, params->priority,
+ params->strat, params->parse_type);
if (res == true) {
/* Remove chunk from the stack */
chunk = parser->chunks;
@@ -821,22 +908,27 @@ ucl_include_url (const unsigned char *data, size_t len,
*/
static bool
ucl_include_file_single (const unsigned char *data, size_t len,
- struct ucl_parser *parser, bool check_signature, bool must_exist,
- unsigned priority)
+ struct ucl_parser *parser, struct ucl_include_params *params)
{
bool res;
struct ucl_chunk *chunk;
unsigned char *buf = NULL;
- char *old_curfile;
- size_t buflen;
+ char *old_curfile, *ext;
+ size_t buflen = 0;
char filebuf[PATH_MAX], realbuf[PATH_MAX];
int prev_state;
struct ucl_variable *cur_var, *tmp_var, *old_curdir = NULL,
*old_filename = NULL;
+ ucl_object_t *nest_obj = NULL, *old_obj = NULL, *new_obj = NULL;
+ ucl_hash_t *container = NULL;
+ struct ucl_stack *st = NULL;
snprintf (filebuf, sizeof (filebuf), "%.*s", (int)len, data);
if (ucl_realpath (filebuf, realbuf) == NULL) {
- if (!must_exist) {
+ if (params->soft_fail) {
+ return false;
+ }
+ if (!params->must_exist) {
return true;
}
ucl_create_err (&parser->err, "cannot open file %s: %s",
@@ -847,16 +939,23 @@ ucl_include_file_single (const unsigned char *data, size_t len,
if (parser->cur_file && strcmp (realbuf, parser->cur_file) == 0) {
/* We are likely including the file itself */
+ if (params->soft_fail) {
+ return false;
+ }
+
ucl_create_err (&parser->err, "trying to include the file %s from itself",
realbuf);
return false;
}
- if (!ucl_fetch_file (realbuf, &buf, &buflen, &parser->err, must_exist)) {
- return (!must_exist || false);
+ if (!ucl_fetch_file (realbuf, &buf, &buflen, &parser->err, params->must_exist)) {
+ if (params->soft_fail) {
+ return false;
+ }
+ return (!params->must_exist || false);
}
- if (check_signature) {
+ if (params->check_signature) {
#if (defined(HAVE_OPENSSL) && OPENSSL_VERSION_NUMBER >= 0x10000000L)
unsigned char *sigbuf = NULL;
size_t siglen = 0;
@@ -900,14 +999,128 @@ ucl_include_file_single (const unsigned char *data, size_t len,
prev_state = parser->state;
parser->state = UCL_STATE_INIT;
- res = ucl_parser_add_chunk_priority (parser, buf, buflen, priority);
- if (!res && !must_exist) {
+ if (params->use_prefix && params->prefix == NULL) {
+ /* Auto generate a key name based on the included filename */
+ params->prefix = basename (realbuf);
+ ext = strrchr (params->prefix, '.');
+ if (ext != NULL && (strcmp (ext, ".conf") == 0 || strcmp (ext, ".ucl") == 0)) {
+ /* Strip off .conf or .ucl */
+ *ext = '\0';
+ }
+ }
+ if (params->prefix != NULL) {
+ /* This is a prefixed include */
+ container = parser->stack->obj->value.ov;
+
+ old_obj = __DECONST (ucl_object_t *, ucl_hash_search (container,
+ params->prefix, strlen (params->prefix)));
+
+ if (strcasecmp (params->target, "array") == 0 && old_obj == NULL) {
+ /* Create an array with key: prefix */
+ old_obj = ucl_object_new_full (UCL_ARRAY, params->priority);
+ old_obj->key = params->prefix;
+ old_obj->keylen = strlen (params->prefix);
+ ucl_copy_key_trash(old_obj);
+ old_obj->prev = old_obj;
+ old_obj->next = NULL;
+
+ container = ucl_hash_insert_object (container, old_obj,
+ parser->flags & UCL_PARSER_KEY_LOWERCASE);
+ parser->stack->obj->len ++;
+
+ nest_obj = ucl_object_new_full (UCL_OBJECT, params->priority);
+ nest_obj->prev = nest_obj;
+ nest_obj->next = NULL;
+
+ ucl_array_append (old_obj, nest_obj);
+ }
+ else if (old_obj == NULL) {
+ /* Create an object with key: prefix */
+ nest_obj = ucl_object_new_full (UCL_OBJECT, params->priority);
+ nest_obj->key = params->prefix;
+ nest_obj->keylen = strlen (params->prefix);
+ ucl_copy_key_trash(nest_obj);
+ nest_obj->prev = nest_obj;
+ nest_obj->next = NULL;
+
+ container = ucl_hash_insert_object (container, nest_obj,
+ parser->flags & UCL_PARSER_KEY_LOWERCASE);
+ parser->stack->obj->len ++;
+ }
+ else if (strcasecmp (params->target, "array") == 0 ||
+ ucl_object_type(old_obj) == UCL_ARRAY) {
+ if (ucl_object_type(old_obj) == UCL_ARRAY) {
+ /* Append to the existing array */
+ nest_obj = ucl_object_new_full (UCL_OBJECT, params->priority);
+ nest_obj->prev = nest_obj;
+ nest_obj->next = NULL;
+
+ ucl_array_append (old_obj, nest_obj);
+ }
+ else {
+ /* Convert the object to an array */
+ new_obj = ucl_object_typed_new (UCL_ARRAY);
+ new_obj->key = old_obj->key;
+ new_obj->keylen = old_obj->keylen;
+ new_obj->flags |= UCL_OBJECT_MULTIVALUE;
+ new_obj->prev = new_obj;
+ new_obj->next = NULL;
+
+ nest_obj = ucl_object_new_full (UCL_OBJECT, params->priority);
+ nest_obj->prev = nest_obj;
+ nest_obj->next = NULL;
+
+ ucl_array_append (new_obj, old_obj);
+ ucl_array_append (new_obj, nest_obj);
+ ucl_hash_replace (container, old_obj, new_obj);
+ }
+ }
+ else {
+ if (ucl_object_type (old_obj) == UCL_OBJECT) {
+ /* Append to existing Object*/
+ nest_obj = old_obj;
+ }
+ else {
+ /* The key is not an object */
+ ucl_create_err (&parser->err,
+ "Conflicting type for key: %s",
+ params->prefix);
+ return false;
+ }
+ }
+
+ /* Put all of the content of the include inside that object */
+ parser->stack->obj->value.ov = container;
+
+ if (nest_obj != NULL) {
+ st = UCL_ALLOC (sizeof (struct ucl_stack));
+ if (st == NULL) {
+ ucl_create_err (&parser->err, "cannot allocate memory for an object");
+ ucl_object_unref (nest_obj);
+ return NULL;
+ }
+ st->obj = nest_obj;
+ st->level = parser->stack->level;
+ LL_PREPEND (parser->stack, st);
+ parser->cur_obj = nest_obj;
+ }
+ }
+
+ res = ucl_parser_add_chunk_full (parser, buf, buflen, params->priority,
+ params->strat, params->parse_type);
+ if (!res && !params->must_exist) {
/* Free error */
utstring_free (parser->err);
parser->err = NULL;
parser->state = UCL_STATE_AFTER_VALUE;
}
+ /* Stop nesting the include, take 1 level off the stack */
+ if (params->prefix != NULL && nest_obj != NULL) {
+ parser->stack = st->next;
+ UCL_FREE (sizeof (struct ucl_stack), st);
+ }
+
/* Remove chunk from the stack */
chunk = parser->chunks;
if (chunk != NULL) {
@@ -917,6 +1130,10 @@ ucl_include_file_single (const unsigned char *data, size_t len,
}
/* Restore old file vars */
+ if (parser->cur_file) {
+ free (parser->cur_file);
+ }
+
parser->cur_file = old_curfile;
DL_FOREACH_SAFE (parser->variables, cur_var, tmp_var) {
if (strcmp (cur_var->var, "CURDIR") == 0 && old_curdir) {
@@ -938,9 +1155,6 @@ ucl_include_file_single (const unsigned char *data, size_t len,
if (old_curdir) {
DL_APPEND (parser->variables, old_curdir);
}
- if (old_curfile) {
- free (old_curfile);
- }
parser->state = prev_state;
@@ -961,8 +1175,7 @@ ucl_include_file_single (const unsigned char *data, size_t len,
*/
static bool
ucl_include_file (const unsigned char *data, size_t len,
- struct ucl_parser *parser, bool check_signature, bool must_exist,
- bool allow_glob, unsigned priority)
+ struct ucl_parser *parser, struct ucl_include_params *params)
{
const unsigned char *p = data, *end = data + len;
bool need_glob = false;
@@ -971,9 +1184,8 @@ ucl_include_file (const unsigned char *data, size_t len,
size_t i;
#ifndef _WIN32
- if (!allow_glob) {
- return ucl_include_file_single (data, len, parser, check_signature,
- must_exist, priority);
+ if (!params->allow_glob) {
+ return ucl_include_file_single (data, len, parser, params);
}
else {
/* Check for special symbols in a filename */
@@ -987,14 +1199,17 @@ ucl_include_file (const unsigned char *data, size_t len,
if (need_glob) {
glob_t globbuf;
memset (&globbuf, 0, sizeof (globbuf));
- ucl_strlcpy (glob_pattern, (const char *)data, sizeof (glob_pattern));
+ ucl_strlcpy (glob_pattern, (const char *)data,
+ (len + 1 < sizeof (glob_pattern) ? len + 1 : sizeof (glob_pattern)));
if (glob (glob_pattern, 0, NULL, &globbuf) != 0) {
- return (!must_exist || false);
+ return (!params->must_exist || false);
}
for (i = 0; i < globbuf.gl_pathc; i ++) {
if (!ucl_include_file_single ((unsigned char *)globbuf.gl_pathv[i],
- strlen (globbuf.gl_pathv[i]), parser, check_signature,
- must_exist, priority)) {
+ strlen (globbuf.gl_pathv[i]), parser, params)) {
+ if (params->soft_fail) {
+ continue;
+ }
globfree (&globbuf);
return false;
}
@@ -1002,22 +1217,20 @@ ucl_include_file (const unsigned char *data, size_t len,
}
globfree (&globbuf);
- if (cnt == 0 && must_exist) {
+ if (cnt == 0 && params->must_exist) {
ucl_create_err (&parser->err, "cannot match any files for pattern %s",
glob_pattern);
return false;
}
}
else {
- return ucl_include_file_single (data, len, parser, check_signature,
- must_exist, priority);
+ return ucl_include_file_single (data, len, parser, params);
}
}
#else
/* Win32 compilers do not support globbing. Therefore, for Win32,
treat allow_glob/need_glob as a NOOP and just return */
- return ucl_include_file_single (data, len, parser, check_signature,
- must_exist, priority);
+ return ucl_include_file_single (data, len, parser, params);
#endif
return true;
@@ -1039,52 +1252,123 @@ ucl_include_common (const unsigned char *data, size_t len,
bool default_try,
bool default_sign)
{
- bool try_load, allow_glob, allow_url, need_sign;
- unsigned priority;
+ bool allow_url, search;
+ const char *duplicate;
const ucl_object_t *param;
- ucl_object_iter_t it = NULL;
+ ucl_object_iter_t it = NULL, ip = NULL;
+ char ipath[PATH_MAX];
+ struct ucl_include_params params;
/* Default values */
- try_load = default_try;
- allow_glob = false;
- allow_url = true;
- need_sign = default_sign;
- priority = 0;
+ params.soft_fail = default_try;
+ params.allow_glob = false;
+ params.check_signature = default_sign;
+ params.use_prefix = false;
+ params.target = "object";
+ params.prefix = NULL;
+ params.priority = 0;
+ params.parse_type = UCL_PARSE_UCL;
+ params.strat = UCL_DUPLICATE_APPEND;
+ params.must_exist = !default_try;
+
+ search = false;
/* Process arguments */
if (args != NULL && args->type == UCL_OBJECT) {
while ((param = ucl_iterate_object (args, &it, true)) != NULL) {
if (param->type == UCL_BOOLEAN) {
- if (strcmp (param->key, "try") == 0) {
- try_load = ucl_object_toboolean (param);
+ if (strncmp (param->key, "try", param->keylen) == 0) {
+ params.must_exist = !ucl_object_toboolean (param);
+ }
+ else if (strncmp (param->key, "sign", param->keylen) == 0) {
+ params.check_signature = ucl_object_toboolean (param);
+ }
+ else if (strncmp (param->key, "glob", param->keylen) == 0) {
+ params.allow_glob = ucl_object_toboolean (param);
+ }
+ else if (strncmp (param->key, "url", param->keylen) == 0) {
+ allow_url = ucl_object_toboolean (param);
+ }
+ else if (strncmp (param->key, "prefix", param->keylen) == 0) {
+ params.use_prefix = ucl_object_toboolean (param);
+ }
+ }
+ else if (param->type == UCL_STRING) {
+ if (strncmp (param->key, "key", param->keylen) == 0) {
+ params.prefix = ucl_object_tostring (param);
}
- else if (strcmp (param->key, "sign") == 0) {
- need_sign = ucl_object_toboolean (param);
+ else if (strncmp (param->key, "target", param->keylen) == 0) {
+ params.target = ucl_object_tostring (param);
}
- else if (strcmp (param->key, "glob") == 0) {
- allow_glob = ucl_object_toboolean (param);
+ else if (strncmp (param->key, "duplicate", param->keylen) == 0) {
+ duplicate = ucl_object_tostring (param);
+
+ if (strcmp (duplicate, "append") == 0) {
+ params.strat = UCL_DUPLICATE_APPEND;
+ }
+ else if (strcmp (duplicate, "merge") == 0) {
+ params.strat = UCL_DUPLICATE_MERGE;
+ }
+ else if (strcmp (duplicate, "rewrite") == 0) {
+ params.strat = UCL_DUPLICATE_REWRITE;
+ }
+ else if (strcmp (duplicate, "error") == 0) {
+ params.strat = UCL_DUPLICATE_ERROR;
+ }
}
- else if (strcmp (param->key, "url") == 0) {
- allow_url = ucl_object_toboolean (param);
+ }
+ else if (param->type == UCL_ARRAY) {
+ if (strncmp (param->key, "path", param->keylen) == 0) {
+ ucl_set_include_path (parser, __DECONST(ucl_object_t *, param));
}
}
else if (param->type == UCL_INT) {
- if (strcmp (param->key, "priority") == 0) {
- priority = ucl_object_toint (param);
+ if (strncmp (param->key, "priority", param->keylen) == 0) {
+ params.priority = ucl_object_toint (param);
}
}
}
}
- if (*data == '/' || *data == '.') {
- /* Try to load a file */
- return ucl_include_file (data, len, parser, need_sign, !try_load,
- allow_glob, priority);
+ if (parser->includepaths == NULL) {
+ if (allow_url && ucl_strnstr (data, "://", len) != NULL) {
+ /* Globbing is not used for URL's */
+ return ucl_include_url (data, len, parser, &params);
+ }
+ else if (data != NULL) {
+ /* Try to load a file */
+ return ucl_include_file (data, len, parser, &params);
+ }
}
- else if (allow_url) {
- /* Globbing is not used for URL's */
- return ucl_include_url (data, len, parser, need_sign, !try_load,
- priority);
+ else {
+ if (allow_url && ucl_strnstr (data, "://", len) != NULL) {
+ /* Globbing is not used for URL's */
+ return ucl_include_url (data, len, parser, &params);
+ }
+
+ ip = ucl_object_iterate_new (parser->includepaths);
+ while ((param = ucl_object_iterate_safe (ip, true)) != NULL) {
+ if (ucl_object_type(param) == UCL_STRING) {
+ snprintf (ipath, sizeof (ipath), "%s/%.*s", ucl_object_tostring(param),
+ (int)len, data);
+ if ((search = ucl_include_file (ipath, strlen (ipath),
+ parser, &params))) {
+ if (!params.allow_glob) {
+ break;
+ }
+ }
+ }
+ }
+ ucl_object_iterate_free (ip);
+ if (search == true) {
+ return true;
+ }
+ else {
+ ucl_create_err (&parser->err,
+ "cannot find file: %.*s in search path",
+ (int)len, data);
+ return false;
+ }
}
return false;
@@ -1094,11 +1378,11 @@ ucl_include_common (const unsigned char *data, size_t len,
* Handle include macro
* @param data include data
* @param len length of data
+ * @param args UCL object representing arguments to the macro
* @param ud user data
- * @param err error ptr
* @return
*/
-UCL_EXTERN bool
+bool
ucl_include_handler (const unsigned char *data, size_t len,
const ucl_object_t *args, void* ud)
{
@@ -1111,11 +1395,11 @@ ucl_include_handler (const unsigned char *data, size_t len,
* Handle includes macro
* @param data include data
* @param len length of data
+ * @param args UCL object representing arguments to the macro
* @param ud user data
- * @param err error ptr
* @return
*/
-UCL_EXTERN bool
+bool
ucl_includes_handler (const unsigned char *data, size_t len,
const ucl_object_t *args, void* ud)
{
@@ -1124,8 +1408,15 @@ ucl_includes_handler (const unsigned char *data, size_t len,
return ucl_include_common (data, len, args, parser, false, true);
}
-
-UCL_EXTERN bool
+/**
+ * Handle tryinclude macro
+ * @param data include data
+ * @param len length of data
+ * @param args UCL object representing arguments to the macro
+ * @param ud user data
+ * @return
+ */
+bool
ucl_try_include_handler (const unsigned char *data, size_t len,
const ucl_object_t *args, void* ud)
{
@@ -1134,7 +1425,251 @@ ucl_try_include_handler (const unsigned char *data, size_t len,
return ucl_include_common (data, len, args, parser, true, false);
}
-UCL_EXTERN bool
+/**
+ * Handle priority macro
+ * @param data include data
+ * @param len length of data
+ * @param args UCL object representing arguments to the macro
+ * @param ud user data
+ * @return
+ */
+bool
+ucl_priority_handler (const unsigned char *data, size_t len,
+ const ucl_object_t *args, void* ud)
+{
+ struct ucl_parser *parser = ud;
+ unsigned priority = 255;
+ const ucl_object_t *param;
+ bool found = false;
+ char *value = NULL, *leftover = NULL;
+ ucl_object_iter_t it = NULL;
+
+ if (parser == NULL) {
+ return false;
+ }
+
+ /* Process arguments */
+ if (args != NULL && args->type == UCL_OBJECT) {
+ while ((param = ucl_iterate_object (args, &it, true)) != NULL) {
+ if (param->type == UCL_INT) {
+ if (strncmp (param->key, "priority", param->keylen) == 0) {
+ priority = ucl_object_toint (param);
+ found = true;
+ }
+ }
+ }
+ }
+
+ if (len > 0) {
+ value = malloc(len + 1);
+ ucl_strlcpy(value, (const char *)data, len + 1);
+ priority = strtol(value, &leftover, 10);
+ if (*leftover != '\0') {
+ ucl_create_err (&parser->err, "Invalid priority value in macro: %s",
+ value);
+ free(value);
+ return false;
+ }
+ free(value);
+ found = true;
+ }
+
+ if (found == true) {
+ parser->chunks->priority = priority;
+ return true;
+ }
+
+ ucl_create_err (&parser->err, "Unable to parse priority macro");
+ return false;
+}
+
+/**
+ * Handle load macro
+ * @param data include data
+ * @param len length of data
+ * @param args UCL object representing arguments to the macro
+ * @param ud user data
+ * @return
+ */
+bool
+ucl_load_handler (const unsigned char *data, size_t len,
+ const ucl_object_t *args, void* ud)
+{
+ struct ucl_parser *parser = ud;
+ const ucl_object_t *param;
+ ucl_object_t *obj, *old_obj;
+ ucl_object_iter_t it = NULL;
+ bool try_load, multiline, test;
+ const char *target, *prefix;
+ char *load_file, *tmp;
+ unsigned char *buf;
+ size_t buflen;
+ unsigned priority;
+ int64_t iv;
+ ucl_hash_t *container = NULL;
+ enum ucl_string_flags flags;
+
+ /* Default values */
+ try_load = false;
+ multiline = false;
+ test = false;
+ target = "string";
+ prefix = NULL;
+ load_file = NULL;
+ buf = NULL;
+ buflen = 0;
+ priority = 0;
+ obj = NULL;
+ old_obj = NULL;
+ flags = 0;
+
+ if (parser == NULL) {
+ return false;
+ }
+
+ /* Process arguments */
+ if (args != NULL && args->type == UCL_OBJECT) {
+ while ((param = ucl_iterate_object (args, &it, true)) != NULL) {
+ if (param->type == UCL_BOOLEAN) {
+ if (strncmp (param->key, "try", param->keylen) == 0) {
+ try_load = ucl_object_toboolean (param);
+ }
+ else if (strncmp (param->key, "multiline", param->keylen) == 0) {
+ multiline = ucl_object_toboolean (param);
+ }
+ else if (strncmp (param->key, "escape", param->keylen) == 0) {
+ test = ucl_object_toboolean (param);
+ if (test) {
+ flags |= UCL_STRING_ESCAPE;
+ }
+ }
+ else if (strncmp (param->key, "trim", param->keylen) == 0) {
+ test = ucl_object_toboolean (param);
+ if (test) {
+ flags |= UCL_STRING_TRIM;
+ }
+ }
+ }
+ else if (param->type == UCL_STRING) {
+ if (strncmp (param->key, "key", param->keylen) == 0) {
+ prefix = ucl_object_tostring (param);
+ }
+ else if (strncmp (param->key, "target", param->keylen) == 0) {
+ target = ucl_object_tostring (param);
+ }
+ }
+ else if (param->type == UCL_INT) {
+ if (strncmp (param->key, "priority", param->keylen) == 0) {
+ priority = ucl_object_toint (param);
+ }
+ }
+ }
+ }
+
+ if (prefix == NULL || strlen(prefix) == 0) {
+ ucl_create_err (&parser->err, "No Key specified in load macro");
+ return false;
+ }
+
+ if (len > 0) {
+ asprintf (&load_file, "%.*s", (int)len, data);
+ if (!ucl_fetch_file (load_file, &buf, &buflen, &parser->err, !try_load)) {
+ return (try_load || false);
+ }
+
+ container = parser->stack->obj->value.ov;
+ old_obj = __DECONST (ucl_object_t *, ucl_hash_search (container, prefix, strlen (prefix)));
+ if (old_obj != NULL) {
+ ucl_create_err (&parser->err, "Key %s already exists", prefix);
+ return false;
+ }
+
+ if (strcasecmp (target, "string") == 0) {
+ obj = ucl_object_fromstring_common (buf, buflen, flags);
+ ucl_copy_value_trash (obj);
+ if (multiline) {
+ obj->flags |= UCL_OBJECT_MULTILINE;
+ }
+ }
+ else if (strcasecmp (target, "int") == 0) {
+ asprintf(&tmp, "%.*s", (int)buflen, buf);
+ iv = strtoll(tmp, NULL, 10);
+ obj = ucl_object_fromint(iv);
+ }
+
+ if (buflen > 0) {
+ ucl_munmap (buf, buflen);
+ }
+
+ if (obj != NULL) {
+ obj->key = prefix;
+ obj->keylen = strlen (prefix);
+ ucl_copy_key_trash(obj);
+ obj->prev = obj;
+ obj->next = NULL;
+ ucl_object_set_priority (obj, priority);
+ container = ucl_hash_insert_object (container, obj,
+ parser->flags & UCL_PARSER_KEY_LOWERCASE);
+ parser->stack->obj->value.ov = container;
+ }
+ return true;
+ }
+
+ ucl_create_err (&parser->err, "Unable to parse load macro");
+ return false;
+}
+
+bool
+ucl_inherit_handler (const unsigned char *data, size_t len,
+ const ucl_object_t *args, const ucl_object_t *ctx, void* ud)
+{
+ const ucl_object_t *parent, *cur;
+ ucl_object_t *target, *copy;
+ ucl_object_iter_t it = NULL;
+ bool replace = false;
+ struct ucl_parser *parser = ud;
+
+ parent = ucl_object_find_keyl (ctx, data, len);
+
+ /* Some sanity checks */
+ if (parent == NULL || ucl_object_type (parent) != UCL_OBJECT) {
+ ucl_create_err (&parser->err, "Unable to find inherited object %*.s",
+ (int)len, data);
+ return false;
+ }
+
+ if (parser->stack == NULL || parser->stack->obj == NULL ||
+ ucl_object_type (parser->stack->obj) != UCL_OBJECT) {
+ ucl_create_err (&parser->err, "Invalid inherit context");
+ return false;
+ }
+
+ target = parser->stack->obj;
+
+ if (args && (cur = ucl_object_find_key (args, "replace")) != NULL) {
+ replace = ucl_object_toboolean (cur);
+ }
+
+ while ((cur = ucl_iterate_object (parent, &it, true))) {
+ /* We do not replace existing keys */
+ if (!replace && ucl_object_find_keyl (target, cur->key, cur->keylen)) {
+ continue;
+ }
+
+ copy = ucl_object_copy (cur);
+
+ if (!replace) {
+ copy->flags |= UCL_OBJECT_INHERITED;
+ }
+
+ ucl_object_insert_key (target, copy, copy->key,
+ copy->keylen, false);
+ }
+
+ return true;
+}
+
+bool
ucl_parser_set_filevars (struct ucl_parser *parser, const char *filename, bool need_expand)
{
char realbuf[PATH_MAX], *curdir;
@@ -1164,8 +1699,9 @@ ucl_parser_set_filevars (struct ucl_parser *parser, const char *filename, bool n
return true;
}
-UCL_EXTERN bool
-ucl_parser_add_file (struct ucl_parser *parser, const char *filename)
+bool
+ucl_parser_add_file_priority (struct ucl_parser *parser, const char *filename,
+ unsigned priority)
{
unsigned char *buf;
size_t len;
@@ -1188,7 +1724,7 @@ ucl_parser_add_file (struct ucl_parser *parser, const char *filename)
}
parser->cur_file = strdup (realbuf);
ucl_parser_set_filevars (parser, realbuf, false);
- ret = ucl_parser_add_chunk (parser, buf, len);
+ ret = ucl_parser_add_chunk_priority (parser, buf, len, priority);
if (len > 0) {
ucl_munmap (buf, len);
@@ -1197,8 +1733,20 @@ ucl_parser_add_file (struct ucl_parser *parser, const char *filename)
return ret;
}
-UCL_EXTERN bool
-ucl_parser_add_fd (struct ucl_parser *parser, int fd)
+bool
+ucl_parser_add_file (struct ucl_parser *parser, const char *filename)
+{
+ if (parser == NULL) {
+ return false;
+ }
+
+ return ucl_parser_add_file_priority(parser, filename,
+ parser->default_priority);
+}
+
+bool
+ucl_parser_add_fd_priority (struct ucl_parser *parser, int fd,
+ unsigned priority)
{
unsigned char *buf;
size_t len;
@@ -1221,7 +1769,7 @@ ucl_parser_add_fd (struct ucl_parser *parser, int fd)
}
parser->cur_file = NULL;
len = st.st_size;
- ret = ucl_parser_add_chunk (parser, buf, len);
+ ret = ucl_parser_add_chunk_priority (parser, buf, len, priority);
if (len > 0) {
ucl_munmap (buf, len);
@@ -1230,6 +1778,16 @@ ucl_parser_add_fd (struct ucl_parser *parser, int fd)
return ret;
}
+bool
+ucl_parser_add_fd (struct ucl_parser *parser, int fd)
+{
+ if (parser == NULL) {
+ return false;
+ }
+
+ return ucl_parser_add_fd_priority(parser, fd, parser->default_priority);
+}
+
size_t
ucl_strlcpy (char *dst, const char *src, size_t siz)
{
@@ -1285,6 +1843,51 @@ ucl_strlcpy_tolower (char *dst, const char *src, size_t siz)
return (s - src); /* count does not include NUL */
}
+/*
+ * Find the first occurrence of find in s
+ */
+char *
+ucl_strnstr (const char *s, const char *find, int len)
+{
+ char c, sc;
+ int mlen;
+
+ if ((c = *find++) != 0) {
+ mlen = strlen (find);
+ do {
+ do {
+ if ((sc = *s++) == 0 || len-- == 0)
+ return (NULL);
+ } while (sc != c);
+ } while (strncmp (s, find, mlen) != 0);
+ s--;
+ }
+ return ((char *)s);
+}
+
+/*
+ * Find the first occurrence of find in s, ignore case.
+ */
+char *
+ucl_strncasestr (const char *s, const char *find, int len)
+{
+ char c, sc;
+ int mlen;
+
+ if ((c = *find++) != 0) {
+ c = tolower (c);
+ mlen = strlen (find);
+ do {
+ do {
+ if ((sc = *s++) == 0 || len-- == 0)
+ return (NULL);
+ } while (tolower (sc) != c);
+ } while (strncasecmp (s, find, mlen) != 0);
+ s--;
+ }
+ return ((char *)s);
+}
+
ucl_object_t *
ucl_object_fromstring_common (const char *str, size_t len, enum ucl_string_flags flags)
{
@@ -1539,7 +2142,7 @@ ucl_object_delete_keyl (ucl_object_t *top, const char *key, size_t keylen)
bool
ucl_object_delete_key (ucl_object_t *top, const char *key)
{
- return ucl_object_delete_keyl (top, key, strlen(key));
+ return ucl_object_delete_keyl (top, key, strlen (key));
}
ucl_object_t*
@@ -1564,7 +2167,7 @@ ucl_object_pop_keyl (ucl_object_t *top, const char *key, size_t keylen)
ucl_object_t*
ucl_object_pop_key (ucl_object_t *top, const char *key)
{
- return ucl_object_pop_keyl (top, key, strlen(key));
+ return ucl_object_pop_keyl (top, key, strlen (key));
}
bool
@@ -1642,10 +2245,45 @@ ucl_object_find_keyl (const ucl_object_t *obj, const char *key, size_t klen)
const ucl_object_t *
ucl_object_find_key (const ucl_object_t *obj, const char *key)
{
- if (key == NULL)
+ if (key == NULL) {
return NULL;
+ }
- return ucl_object_find_keyl (obj, key, strlen(key));
+ return ucl_object_find_keyl (obj, key, strlen (key));
+}
+
+const ucl_object_t*
+ucl_object_find_any_key (const ucl_object_t *obj,
+ const char *key, ...)
+{
+ va_list ap;
+ const ucl_object_t *ret = NULL;
+ const char *nk = NULL;
+
+ if (obj == NULL || key == NULL) {
+ return NULL;
+ }
+
+ ret = ucl_object_find_keyl (obj, key, strlen (key));
+
+ if (ret == NULL) {
+ va_start (ap, key);
+
+ while (ret == NULL) {
+ nk = va_arg (ap, const char *);
+
+ if (nk == NULL) {
+ break;
+ }
+ else {
+ ret = ucl_object_find_keyl (obj, nk, strlen (nk));
+ }
+ }
+
+ va_end (ap);
+ }
+
+ return ret;
}
const ucl_object_t*
@@ -1792,6 +2430,12 @@ ucl_object_iterate_free (ucl_object_iter_t it)
const ucl_object_t *
ucl_lookup_path (const ucl_object_t *top, const char *path_in) {
+ return ucl_lookup_path_char (top, path_in, '.');
+}
+
+
+const ucl_object_t *
+ucl_lookup_path_char (const ucl_object_t *top, const char *path_in, const char sep) {
const ucl_object_t *o = NULL, *found;
const char *p, *c;
char *err_str;
@@ -1805,20 +2449,20 @@ ucl_lookup_path (const ucl_object_t *top, const char *path_in) {
p = path_in;
/* Skip leading dots */
- while (*p == '.') {
+ while (*p == sep) {
p ++;
}
c = p;
while (*p != '\0') {
p ++;
- if (*p == '.' || *p == '\0') {
+ if (*p == sep || *p == '\0') {
if (p > c) {
switch (top->type) {
case UCL_ARRAY:
/* Key should be an int */
index = strtoul (c, &err_str, 10);
- if (err_str != NULL && (*err_str != '.' && *err_str != '\0')) {
+ if (err_str != NULL && (*err_str != sep && *err_str != '\0')) {
return NULL;
}
o = ucl_array_find_index (top, index);
@@ -1913,6 +2557,10 @@ ucl_object_new_userdata (ucl_userdata_dtor dtor, ucl_userdata_emitter emitter)
ucl_type_t
ucl_object_type (const ucl_object_t *obj)
{
+ if (obj == NULL) {
+ return UCL_NULL;
+ }
+
return obj->type;
}
@@ -1981,6 +2629,11 @@ ucl_array_append (ucl_object_t *top, ucl_object_t *elt)
if (vec == NULL) {
vec = UCL_ALLOC (sizeof (*vec));
+
+ if (vec == NULL) {
+ return false;
+ }
+
kv_init (*vec);
top->value.av = (void *)vec;
}
@@ -2021,14 +2674,23 @@ bool
ucl_array_merge (ucl_object_t *top, ucl_object_t *elt, bool copy)
{
unsigned i;
+ ucl_object_t *cp = NULL;
ucl_object_t **obj;
- UCL_ARRAY_GET (v1, top);
- UCL_ARRAY_GET (v2, elt);
if (elt == NULL || top == NULL || top->type != UCL_ARRAY || elt->type != UCL_ARRAY) {
return false;
}
+ if (copy) {
+ cp = ucl_object_copy (elt);
+ }
+ else {
+ cp = ucl_object_ref (elt);
+ }
+
+ UCL_ARRAY_GET (v1, top);
+ UCL_ARRAY_GET (v2, cp);
+
kv_concat (ucl_object_t *, *v1, *v2);
for (i = v2->n; i < v1->n; i ++) {
@@ -2036,14 +2698,7 @@ ucl_array_merge (ucl_object_t *top, ucl_object_t *elt, bool copy)
if (*obj == NULL) {
continue;
}
-
top->len ++;
- if (copy) {
- *obj = ucl_object_copy (*obj);
- }
- else {
- ucl_object_ref (*obj);
- }
}
return true;
@@ -2056,6 +2711,10 @@ ucl_array_delete (ucl_object_t *top, ucl_object_t *elt)
ucl_object_t *ret = NULL;
unsigned i;
+ if (vec == NULL) {
+ return NULL;
+ }
+
for (i = 0; i < vec->n; i ++) {
if (kv_A (*vec, i) == elt) {
kv_del (ucl_object_t *, *vec, i);
@@ -2073,7 +2732,8 @@ ucl_array_head (const ucl_object_t *top)
{
UCL_ARRAY_GET (vec, top);
- if (top == NULL || top->type != UCL_ARRAY || top->value.av == NULL) {
+ if (vec == NULL || top == NULL || top->type != UCL_ARRAY ||
+ top->value.av == NULL) {
return NULL;
}
@@ -2136,6 +2796,25 @@ ucl_array_find_index (const ucl_object_t *top, unsigned int index)
return NULL;
}
+unsigned int
+ucl_array_index_of (ucl_object_t *top, ucl_object_t *elt)
+{
+ UCL_ARRAY_GET (vec, top);
+ unsigned i;
+
+ if (vec == NULL) {
+ return (unsigned int)(-1);
+ }
+
+ for (i = 0; i < vec->n; i ++) {
+ if (kv_A (*vec, i) == elt) {
+ return i;
+ }
+ }
+
+ return (unsigned int)(-1);
+}
+
ucl_object_t *
ucl_array_replace_index (ucl_object_t *top, ucl_object_t *elt,
unsigned int index)
@@ -2265,7 +2944,9 @@ ucl_object_tostring_safe (const ucl_object_t *obj, const char **target)
switch (obj->type) {
case UCL_STRING:
- *target = ucl_copy_value_trash (obj);
+ if (!(obj->flags & UCL_OBJECT_BINARY)) {
+ *target = ucl_copy_value_trash (obj);
+ }
break;
default:
return false;
@@ -2286,7 +2967,12 @@ ucl_object_tostring (const ucl_object_t *obj)
const char *
ucl_object_tostring_forced (const ucl_object_t *obj)
{
- return ucl_copy_value_trash (obj);
+ /* TODO: For binary strings we might encode string here */
+ if (!(obj->flags & UCL_OBJECT_BINARY)) {
+ return ucl_copy_value_trash (obj);
+ }
+
+ return NULL;
}
bool
@@ -2533,7 +3219,7 @@ ucl_object_compare (const ucl_object_t *o1, const ucl_object_t *o2)
void
ucl_object_array_sort (ucl_object_t *ar,
- int (*cmp)(const ucl_object_t *o1, const ucl_object_t *o2))
+ int (*cmp)(const ucl_object_t **o1, const ucl_object_t **o2))
{
UCL_ARRAY_GET (vec, ar);
@@ -2563,6 +3249,9 @@ ucl_object_set_priority (ucl_object_t *obj,
{
if (obj != NULL) {
priority &= (0x1 << PRIOBITS) - 1;
- obj->flags |= priority << ((sizeof (obj->flags) * NBBY) - PRIOBITS);
+ priority <<= ((sizeof (obj->flags) * NBBY) - PRIOBITS);
+ priority |= obj->flags & ((1 << ((sizeof (obj->flags) * NBBY) -
+ PRIOBITS)) - 1);
+ obj->flags = priority;
}
}
diff --git a/contrib/libucl/src/xxhash.c b/contrib/libucl/src/xxhash.c
index fc44633..3473eb4 100644
--- a/contrib/libucl/src/xxhash.c
+++ b/contrib/libucl/src/xxhash.c
@@ -1,6 +1,6 @@
/*
xxHash - Fast Hash algorithm
-Copyright (C) 2012-2013, Yann Collet.
+Copyright (C) 2012-2014, Yann Collet.
BSD 2-Clause License (http://www.opensource.org/licenses/bsd-license.php)
Redistribution and use in source and binary forms, with or without
@@ -28,6 +28,7 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
You can contact the author at :
- xxHash source repository : http://code.google.com/p/xxhash/
+- public discussion board : https://groups.google.com/forum/#!forum/lz4c
*/
@@ -47,7 +48,7 @@ You can contact the author at :
// When this option is enabled, xxHash output for null input pointers will be the same as a null-length input.
// This option has a very small performance cost (only measurable on small inputs).
// By default, this option is disabled. To enable it, uncomment below define :
-//#define XXH_ACCEPT_NULL_INPUT_POINTER 1
+// #define XXH_ACCEPT_NULL_INPUT_POINTER 1
// XXH_FORCE_NATIVE_FORMAT :
// By default, xxHash library provides endian-independant Hash values, based on little-endian convention.
@@ -58,7 +59,6 @@ You can contact the author at :
// This option has no impact on Little_Endian CPU.
#define XXH_FORCE_NATIVE_FORMAT 0
-
//**************************************
// Compiler Specific Options
//**************************************
@@ -68,28 +68,30 @@ You can contact the author at :
#endif
#ifdef _MSC_VER // Visual Studio
-# define forceinline static __forceinline
-#else
+# define FORCE_INLINE static __forceinline
+#else
# ifdef __GNUC__
-# define forceinline static inline __attribute__((always_inline))
+# define FORCE_INLINE static inline __attribute__((always_inline))
# else
-# define forceinline static inline
+# define FORCE_INLINE static inline
# endif
#endif
-
//**************************************
// Includes & Memory related functions
//**************************************
#include "xxhash.h"
-// Modify the local functions below should you wish to use some other memory related routines
+// Modify the local functions below should you wish to use some other memory routines
// for malloc(), free()
#include <stdlib.h>
-forceinline void* XXH_malloc(size_t s) { return malloc(s); }
-forceinline void XXH_free (void* p) { free(p); }
+static void* XXH_malloc(size_t s) { return malloc(s); }
+static void XXH_free (void* p) { free(p); }
// for memcpy()
#include <string.h>
-forceinline void* XXH_memcpy(void* dest, const void* src, size_t size) { return memcpy(dest,src,size); }
+static void* XXH_memcpy(void* dest, const void* src, size_t size)
+{
+ return memcpy(dest,src,size);
+}
//**************************************
@@ -97,17 +99,17 @@ forceinline void* XXH_memcpy(void* dest, const void* src, size_t size) { return
//**************************************
#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L // C99
# include <stdint.h>
- typedef uint8_t BYTE;
- typedef uint16_t U16;
- typedef uint32_t U32;
- typedef int32_t S32;
- typedef uint64_t U64;
+typedef uint8_t BYTE;
+typedef uint16_t U16;
+typedef uint32_t U32;
+typedef int32_t S32;
+typedef uint64_t U64;
#else
- typedef unsigned char BYTE;
- typedef unsigned short U16;
- typedef unsigned int U32;
- typedef signed int S32;
- typedef unsigned long long U64;
+typedef unsigned char BYTE;
+typedef unsigned short U16;
+typedef unsigned int U32;
+typedef signed int S32;
+typedef uint64_t U64;
#endif
#if defined(__GNUC__) && !defined(XXH_USE_UNALIGNED_ACCESS)
@@ -124,13 +126,21 @@ forceinline void* XXH_memcpy(void* dest, const void* src, size_t size) { return
# endif
#endif
-typedef struct _U32_S { U32 v; } _PACKED U32_S;
+typedef struct _U32_S
+{
+ U32 v;
+} _PACKED U32_S;
+typedef struct _U64_S
+{
+ U64 v;
+} _PACKED U64_S;
#if !defined(XXH_USE_UNALIGNED_ACCESS) && !defined(__GNUC__)
# pragma pack(pop)
#endif
#define A32(x) (((U32_S *)(x))->v)
+#define A64(x) (((U64_S *)(x))->v)
//***************************************
@@ -141,20 +151,37 @@ typedef struct _U32_S { U32 v; } _PACKED U32_S;
// Note : although _rotl exists for minGW (GCC under windows), performance seems poor
#if defined(_MSC_VER)
# define XXH_rotl32(x,r) _rotl(x,r)
+# define XXH_rotl64(x,r) _rotl64(x,r)
#else
# define XXH_rotl32(x,r) ((x << r) | (x >> (32 - r)))
+# define XXH_rotl64(x,r) ((x << r) | (x >> (64 - r)))
#endif
#if defined(_MSC_VER) // Visual Studio
# define XXH_swap32 _byteswap_ulong
-#elif GCC_VERSION >= 403
+# define XXH_swap64 _byteswap_uint64
+#elif GCC_VERSION >= 403 || defined(__clang__)
# define XXH_swap32 __builtin_bswap32
+# define XXH_swap64 __builtin_bswap64
#else
-static inline U32 XXH_swap32 (U32 x) {
+static inline U32 XXH_swap32 (U32 x)
+{
return ((x << 24) & 0xff000000 ) |
- ((x << 8) & 0x00ff0000 ) |
- ((x >> 8) & 0x0000ff00 ) |
- ((x >> 24) & 0x000000ff );}
+ ((x << 8) & 0x00ff0000 ) |
+ ((x >> 8) & 0x0000ff00 ) |
+ ((x >> 24) & 0x000000ff );
+}
+static inline U64 XXH_swap64 (U64 x)
+{
+ return ((x << 56) & 0xff00000000000000ULL) |
+ ((x << 40) & 0x00ff000000000000ULL) |
+ ((x << 24) & 0x0000ff0000000000ULL) |
+ ((x << 8) & 0x000000ff00000000ULL) |
+ ((x >> 8) & 0x00000000ff000000ULL) |
+ ((x >> 24) & 0x0000000000ff0000ULL) |
+ ((x >> 40) & 0x000000000000ff00ULL) |
+ ((x >> 56) & 0x00000000000000ffULL);
+}
#endif
@@ -167,13 +194,18 @@ static inline U32 XXH_swap32 (U32 x) {
#define PRIME32_4 668265263U
#define PRIME32_5 374761393U
+#define PRIME64_1 11400714785074694791ULL
+#define PRIME64_2 14029467366897019727ULL
+#define PRIME64_3 1609587929392839161ULL
+#define PRIME64_4 9650029242287828579ULL
+#define PRIME64_5 2870177450012600261ULL
//**************************************
// Architecture Macros
//**************************************
typedef enum { XXH_bigEndian=0, XXH_littleEndian=1 } XXH_endianess;
#ifndef XXH_CPU_LITTLE_ENDIAN // It is possible to define XXH_CPU_LITTLE_ENDIAN externally, for example using a compiler switch
- static const int one = 1;
+static const int one = 1;
# define XXH_CPU_LITTLE_ENDIAN (*(char*)(&one))
#endif
@@ -189,28 +221,49 @@ typedef enum { XXH_bigEndian=0, XXH_littleEndian=1 } XXH_endianess;
//****************************
typedef enum { XXH_aligned, XXH_unaligned } XXH_alignment;
-forceinline U32 XXH_readLE32_align(const U32* ptr, XXH_endianess endian, XXH_alignment align)
-{
+FORCE_INLINE U32 XXH_readLE32_align(const void* ptr, XXH_endianess endian, XXH_alignment align)
+{
if (align==XXH_unaligned)
- return endian==XXH_littleEndian ? A32(ptr) : XXH_swap32(A32(ptr));
+ return endian==XXH_littleEndian ? A32(ptr) : XXH_swap32(A32(ptr));
else
- return endian==XXH_littleEndian ? *ptr : XXH_swap32(*ptr);
+ return endian==XXH_littleEndian ? *(U32*)ptr : XXH_swap32(*(U32*)ptr);
}
-forceinline U32 XXH_readLE32(const U32* ptr, XXH_endianess endian) { return XXH_readLE32_align(ptr, endian, XXH_unaligned); }
+FORCE_INLINE U32 XXH_readLE32(const void* ptr, XXH_endianess endian)
+{
+ return XXH_readLE32_align(ptr, endian, XXH_unaligned);
+}
+
+FORCE_INLINE U64 XXH_readLE64_align(const void* ptr, XXH_endianess endian, XXH_alignment align)
+{
+ if (align==XXH_unaligned)
+ return endian==XXH_littleEndian ? A64(ptr) : XXH_swap64(A64(ptr));
+ else
+ return endian==XXH_littleEndian ? *(U64*)ptr : XXH_swap64(*(U64*)ptr);
+}
+
+FORCE_INLINE U64 XXH_readLE64(const void* ptr, XXH_endianess endian)
+{
+ return XXH_readLE64_align(ptr, endian, XXH_unaligned);
+}
//****************************
// Simple Hash Functions
//****************************
-forceinline U32 XXH32_endian_align(const void* input, int len, U32 seed, XXH_endianess endian, XXH_alignment align)
+FORCE_INLINE U32 XXH32_endian_align(const void* input, size_t len, U32 seed, XXH_endianess endian, XXH_alignment align)
{
const BYTE* p = (const BYTE*)input;
- const BYTE* const bEnd = p + len;
+ const BYTE* bEnd = p + len;
U32 h32;
+#define XXH_get32bits(p) XXH_readLE32_align(p, endian, align)
#ifdef XXH_ACCEPT_NULL_INPUT_POINTER
- if (p==NULL) { len=0; p=(const BYTE*)(size_t)16; }
+ if (p==NULL)
+ {
+ len=0;
+ bEnd=p=(const BYTE*)(size_t)16;
+ }
#endif
if (len>=16)
@@ -223,11 +276,24 @@ forceinline U32 XXH32_endian_align(const void* input, int len, U32 seed, XXH_end
do
{
- v1 += XXH_readLE32_align((const U32*)p, endian, align) * PRIME32_2; v1 = XXH_rotl32(v1, 13); v1 *= PRIME32_1; p+=4;
- v2 += XXH_readLE32_align((const U32*)p, endian, align) * PRIME32_2; v2 = XXH_rotl32(v2, 13); v2 *= PRIME32_1; p+=4;
- v3 += XXH_readLE32_align((const U32*)p, endian, align) * PRIME32_2; v3 = XXH_rotl32(v3, 13); v3 *= PRIME32_1; p+=4;
- v4 += XXH_readLE32_align((const U32*)p, endian, align) * PRIME32_2; v4 = XXH_rotl32(v4, 13); v4 *= PRIME32_1; p+=4;
- } while (p<=limit);
+ v1 += XXH_get32bits(p) * PRIME32_2;
+ v1 = XXH_rotl32(v1, 13);
+ v1 *= PRIME32_1;
+ p+=4;
+ v2 += XXH_get32bits(p) * PRIME32_2;
+ v2 = XXH_rotl32(v2, 13);
+ v2 *= PRIME32_1;
+ p+=4;
+ v3 += XXH_get32bits(p) * PRIME32_2;
+ v3 = XXH_rotl32(v3, 13);
+ v3 *= PRIME32_1;
+ p+=4;
+ v4 += XXH_get32bits(p) * PRIME32_2;
+ v4 = XXH_rotl32(v4, 13);
+ v4 *= PRIME32_1;
+ p+=4;
+ }
+ while (p<=limit);
h32 = XXH_rotl32(v1, 1) + XXH_rotl32(v2, 7) + XXH_rotl32(v3, 12) + XXH_rotl32(v4, 18);
}
@@ -238,9 +304,9 @@ forceinline U32 XXH32_endian_align(const void* input, int len, U32 seed, XXH_end
h32 += (U32) len;
- while (p<=bEnd-4)
+ while (p+4<=bEnd)
{
- h32 += XXH_readLE32_align((const U32*)p, endian, align) * PRIME32_3;
+ h32 += XXH_get32bits(p) * PRIME32_3;
h32 = XXH_rotl32(h32, 17) * PRIME32_4 ;
p+=4;
}
@@ -262,18 +328,19 @@ forceinline U32 XXH32_endian_align(const void* input, int len, U32 seed, XXH_end
}
-U32 XXH32(const void* input, int len, U32 seed)
+unsigned int XXH32 (const void* input, size_t len, unsigned seed)
{
#if 0
// Simple version, good for code maintenance, but unfortunately slow for small inputs
- void* state = XXH32_init(seed);
- XXH32_update(state, input, len);
- return XXH32_digest(state);
+ XXH32_state_t state;
+ XXH32_reset(&state, seed);
+ XXH32_update(&state, input, len);
+ return XXH32_digest(&state);
#else
XXH_endianess endian_detected = (XXH_endianess)XXH_CPU_LITTLE_ENDIAN;
# if !defined(XXH_USE_UNALIGNED_ACCESS)
- if (!(((size_t)input) & 3)) // Input is aligned, let's leverage the speed advantage
+ if ((((size_t)input) & 3) == 0) // Input is aligned, let's leverage the speed advantage
{
if ((endian_detected==XXH_littleEndian) || XXH_FORCE_NATIVE_FORMAT)
return XXH32_endian_align(input, len, seed, XXH_littleEndian, XXH_aligned);
@@ -289,12 +356,152 @@ U32 XXH32(const void* input, int len, U32 seed)
#endif
}
+FORCE_INLINE U64 XXH64_endian_align(const void* input, size_t len, U64 seed, XXH_endianess endian, XXH_alignment align)
+{
+ const BYTE* p = (const BYTE*)input;
+ const BYTE* bEnd = p + len;
+ U64 h64;
+#define XXH_get64bits(p) XXH_readLE64_align(p, endian, align)
-//****************************
-// Advanced Hash Functions
-//****************************
+#ifdef XXH_ACCEPT_NULL_INPUT_POINTER
+ if (p==NULL)
+ {
+ len=0;
+ bEnd=p=(const BYTE*)(size_t)32;
+ }
+#endif
+
+ if (len>=32)
+ {
+ const BYTE* const limit = bEnd - 32;
+ U64 v1 = seed + PRIME64_1 + PRIME64_2;
+ U64 v2 = seed + PRIME64_2;
+ U64 v3 = seed + 0;
+ U64 v4 = seed - PRIME64_1;
+
+ do
+ {
+ v1 += XXH_get64bits(p) * PRIME64_2;
+ p+=8;
+ v1 = XXH_rotl64(v1, 31);
+ v1 *= PRIME64_1;
+ v2 += XXH_get64bits(p) * PRIME64_2;
+ p+=8;
+ v2 = XXH_rotl64(v2, 31);
+ v2 *= PRIME64_1;
+ v3 += XXH_get64bits(p) * PRIME64_2;
+ p+=8;
+ v3 = XXH_rotl64(v3, 31);
+ v3 *= PRIME64_1;
+ v4 += XXH_get64bits(p) * PRIME64_2;
+ p+=8;
+ v4 = XXH_rotl64(v4, 31);
+ v4 *= PRIME64_1;
+ }
+ while (p<=limit);
+
+ h64 = XXH_rotl64(v1, 1) + XXH_rotl64(v2, 7) + XXH_rotl64(v3, 12) + XXH_rotl64(v4, 18);
+
+ v1 *= PRIME64_2;
+ v1 = XXH_rotl64(v1, 31);
+ v1 *= PRIME64_1;
+ h64 ^= v1;
+ h64 = h64 * PRIME64_1 + PRIME64_4;
+
+ v2 *= PRIME64_2;
+ v2 = XXH_rotl64(v2, 31);
+ v2 *= PRIME64_1;
+ h64 ^= v2;
+ h64 = h64 * PRIME64_1 + PRIME64_4;
+
+ v3 *= PRIME64_2;
+ v3 = XXH_rotl64(v3, 31);
+ v3 *= PRIME64_1;
+ h64 ^= v3;
+ h64 = h64 * PRIME64_1 + PRIME64_4;
+
+ v4 *= PRIME64_2;
+ v4 = XXH_rotl64(v4, 31);
+ v4 *= PRIME64_1;
+ h64 ^= v4;
+ h64 = h64 * PRIME64_1 + PRIME64_4;
+ }
+ else
+ {
+ h64 = seed + PRIME64_5;
+ }
+
+ h64 += (U64) len;
+
+ while (p+8<=bEnd)
+ {
+ U64 k1 = XXH_get64bits(p);
+ k1 *= PRIME64_2;
+ k1 = XXH_rotl64(k1,31);
+ k1 *= PRIME64_1;
+ h64 ^= k1;
+ h64 = XXH_rotl64(h64,27) * PRIME64_1 + PRIME64_4;
+ p+=8;
+ }
-struct XXH_state32_t
+ if (p+4<=bEnd)
+ {
+ h64 ^= (U64)(XXH_get32bits(p)) * PRIME64_1;
+ h64 = XXH_rotl64(h64, 23) * PRIME64_2 + PRIME64_3;
+ p+=4;
+ }
+
+ while (p<bEnd)
+ {
+ h64 ^= (*p) * PRIME64_5;
+ h64 = XXH_rotl64(h64, 11) * PRIME64_1;
+ p++;
+ }
+
+ h64 ^= h64 >> 33;
+ h64 *= PRIME64_2;
+ h64 ^= h64 >> 29;
+ h64 *= PRIME64_3;
+ h64 ^= h64 >> 32;
+
+ return h64;
+}
+
+
+uint64_t XXH64 (const void* input, size_t len, uint64_t seed)
+{
+#if 0
+ // Simple version, good for code maintenance, but unfortunately slow for small inputs
+ XXH64_state_t state;
+ XXH64_reset(&state, seed);
+ XXH64_update(&state, input, len);
+ return XXH64_digest(&state);
+#else
+ XXH_endianess endian_detected = (XXH_endianess)XXH_CPU_LITTLE_ENDIAN;
+
+# if !defined(XXH_USE_UNALIGNED_ACCESS)
+ if ((((size_t)input) & 7)==0) // Input is aligned, let's leverage the speed advantage
+ {
+ if ((endian_detected==XXH_littleEndian) || XXH_FORCE_NATIVE_FORMAT)
+ return XXH64_endian_align(input, len, seed, XXH_littleEndian, XXH_aligned);
+ else
+ return XXH64_endian_align(input, len, seed, XXH_bigEndian, XXH_aligned);
+ }
+# endif
+
+ if ((endian_detected==XXH_littleEndian) || XXH_FORCE_NATIVE_FORMAT)
+ return XXH64_endian_align(input, len, seed, XXH_littleEndian, XXH_unaligned);
+ else
+ return XXH64_endian_align(input, len, seed, XXH_bigEndian, XXH_unaligned);
+#endif
+}
+
+/****************************************************
+ * Advanced Hash Functions
+****************************************************/
+
+/*** Allocation ***/
+typedef struct
{
U64 total_len;
U32 seed;
@@ -302,21 +509,60 @@ struct XXH_state32_t
U32 v2;
U32 v3;
U32 v4;
- int memsize;
- char memory[16];
-};
+ U32 mem32[4]; /* defined as U32 for alignment */
+ U32 memsize;
+} XXH_istate32_t;
+
+typedef struct
+{
+ U64 total_len;
+ U64 seed;
+ U64 v1;
+ U64 v2;
+ U64 v3;
+ U64 v4;
+ U64 mem64[4]; /* defined as U64 for alignment */
+ U32 memsize;
+} XXH_istate64_t;
+
+XXH32_state_t* XXH32_createState(void)
+{
+ XXH_STATIC_ASSERT(sizeof(XXH32_state_t) >= sizeof(XXH_istate32_t)); // A compilation error here means XXH32_state_t is not large enough
+ return (XXH32_state_t*)XXH_malloc(sizeof(XXH32_state_t));
+}
-int XXH32_sizeofState(void)
+void* XXH32_init (unsigned seed)
{
- XXH_STATIC_ASSERT(XXH32_SIZEOFSTATE >= sizeof(struct XXH_state32_t)); // A compilation error here means XXH32_SIZEOFSTATE is not large enough
- return sizeof(struct XXH_state32_t);
+ XXH32_state_t *st = XXH32_createState();
+ XXH32_reset(st, seed);
+
+ return st;
}
+XXH_errorcode XXH32_freeState(XXH32_state_t* statePtr)
+{
+ XXH_free(statePtr);
+ return XXH_OK;
+};
+
+XXH64_state_t* XXH64_createState(void)
+{
+ XXH_STATIC_ASSERT(sizeof(XXH64_state_t) >= sizeof(XXH_istate64_t)); // A compilation error here means XXH64_state_t is not large enough
+ return (XXH64_state_t*)XXH_malloc(sizeof(XXH64_state_t));
+}
+XXH_errorcode XXH64_freeState(XXH64_state_t* statePtr)
+{
+ XXH_free(statePtr);
+ return XXH_OK;
+};
-XXH_errorcode XXH32_resetState(void* state_in, U32 seed)
-{
- struct XXH_state32_t * state = (struct XXH_state32_t *) state_in;
+
+/*** Hash feed ***/
+
+XXH_errorcode XXH32_reset(XXH32_state_t* state_in, U32 seed)
+{
+ XXH_istate32_t* state = (XXH_istate32_t*) state_in;
state->seed = seed;
state->v1 = seed + PRIME32_1 + PRIME32_2;
state->v2 = seed + PRIME32_2;
@@ -327,18 +573,23 @@ XXH_errorcode XXH32_resetState(void* state_in, U32 seed)
return XXH_OK;
}
-
-void* XXH32_init (U32 seed)
+XXH_errorcode XXH64_reset(XXH64_state_t* state_in, uint64_t seed)
{
- void* state = XXH_malloc (sizeof(struct XXH_state32_t));
- XXH32_resetState(state, seed);
- return state;
+ XXH_istate64_t* state = (XXH_istate64_t*) state_in;
+ state->seed = seed;
+ state->v1 = seed + PRIME64_1 + PRIME64_2;
+ state->v2 = seed + PRIME64_2;
+ state->v3 = seed + 0;
+ state->v4 = seed - PRIME64_1;
+ state->total_len = 0;
+ state->memsize = 0;
+ return XXH_OK;
}
-forceinline XXH_errorcode XXH32_update_endian (void* state_in, const void* input, int len, XXH_endianess endian)
+FORCE_INLINE XXH_errorcode XXH32_update_endian (XXH32_state_t* state_in, const void* input, size_t len, XXH_endianess endian)
{
- struct XXH_state32_t * state = (struct XXH_state32_t *) state_in;
+ XXH_istate32_t* state = (XXH_istate32_t *) state_in;
const BYTE* p = (const BYTE*)input;
const BYTE* const bEnd = p + len;
@@ -350,20 +601,32 @@ forceinline XXH_errorcode XXH32_update_endian (void* state_in, const void* input
if (state->memsize + len < 16) // fill in tmp buffer
{
- XXH_memcpy(state->memory + state->memsize, input, len);
- state->memsize += len;
+ XXH_memcpy((BYTE*)(state->mem32) + state->memsize, input, len);
+ state->memsize += (U32)len;
return XXH_OK;
}
if (state->memsize) // some data left from previous update
{
- XXH_memcpy(state->memory + state->memsize, input, 16-state->memsize);
+ XXH_memcpy((BYTE*)(state->mem32) + state->memsize, input, 16-state->memsize);
{
- const U32* p32 = (const U32*)state->memory;
- state->v1 += XXH_readLE32(p32, endian) * PRIME32_2; state->v1 = XXH_rotl32(state->v1, 13); state->v1 *= PRIME32_1; p32++;
- state->v2 += XXH_readLE32(p32, endian) * PRIME32_2; state->v2 = XXH_rotl32(state->v2, 13); state->v2 *= PRIME32_1; p32++;
- state->v3 += XXH_readLE32(p32, endian) * PRIME32_2; state->v3 = XXH_rotl32(state->v3, 13); state->v3 *= PRIME32_1; p32++;
- state->v4 += XXH_readLE32(p32, endian) * PRIME32_2; state->v4 = XXH_rotl32(state->v4, 13); state->v4 *= PRIME32_1; p32++;
+ const U32* p32 = state->mem32;
+ state->v1 += XXH_readLE32(p32, endian) * PRIME32_2;
+ state->v1 = XXH_rotl32(state->v1, 13);
+ state->v1 *= PRIME32_1;
+ p32++;
+ state->v2 += XXH_readLE32(p32, endian) * PRIME32_2;
+ state->v2 = XXH_rotl32(state->v2, 13);
+ state->v2 *= PRIME32_1;
+ p32++;
+ state->v3 += XXH_readLE32(p32, endian) * PRIME32_2;
+ state->v3 = XXH_rotl32(state->v3, 13);
+ state->v3 *= PRIME32_1;
+ p32++;
+ state->v4 += XXH_readLE32(p32, endian) * PRIME32_2;
+ state->v4 = XXH_rotl32(state->v4, 13);
+ state->v4 *= PRIME32_1;
+ p32++;
}
p += 16-state->memsize;
state->memsize = 0;
@@ -379,11 +642,24 @@ forceinline XXH_errorcode XXH32_update_endian (void* state_in, const void* input
do
{
- v1 += XXH_readLE32((const U32*)p, endian) * PRIME32_2; v1 = XXH_rotl32(v1, 13); v1 *= PRIME32_1; p+=4;
- v2 += XXH_readLE32((const U32*)p, endian) * PRIME32_2; v2 = XXH_rotl32(v2, 13); v2 *= PRIME32_1; p+=4;
- v3 += XXH_readLE32((const U32*)p, endian) * PRIME32_2; v3 = XXH_rotl32(v3, 13); v3 *= PRIME32_1; p+=4;
- v4 += XXH_readLE32((const U32*)p, endian) * PRIME32_2; v4 = XXH_rotl32(v4, 13); v4 *= PRIME32_1; p+=4;
- } while (p<=limit);
+ v1 += XXH_readLE32(p, endian) * PRIME32_2;
+ v1 = XXH_rotl32(v1, 13);
+ v1 *= PRIME32_1;
+ p+=4;
+ v2 += XXH_readLE32(p, endian) * PRIME32_2;
+ v2 = XXH_rotl32(v2, 13);
+ v2 *= PRIME32_1;
+ p+=4;
+ v3 += XXH_readLE32(p, endian) * PRIME32_2;
+ v3 = XXH_rotl32(v3, 13);
+ v3 *= PRIME32_1;
+ p+=4;
+ v4 += XXH_readLE32(p, endian) * PRIME32_2;
+ v4 = XXH_rotl32(v4, 13);
+ v4 *= PRIME32_1;
+ p+=4;
+ }
+ while (p<=limit);
state->v1 = v1;
state->v2 = v2;
@@ -393,17 +669,17 @@ forceinline XXH_errorcode XXH32_update_endian (void* state_in, const void* input
if (p < bEnd)
{
- XXH_memcpy(state->memory, p, bEnd-p);
+ XXH_memcpy(state->mem32, p, bEnd-p);
state->memsize = (int)(bEnd-p);
}
return XXH_OK;
}
-XXH_errorcode XXH32_update (void* state_in, const void* input, int len)
+XXH_errorcode XXH32_update (XXH32_state_t* state_in, const void* input, size_t len)
{
XXH_endianess endian_detected = (XXH_endianess)XXH_CPU_LITTLE_ENDIAN;
-
+
if ((endian_detected==XXH_littleEndian) || XXH_FORCE_NATIVE_FORMAT)
return XXH32_update_endian(state_in, input, len, XXH_littleEndian);
else
@@ -412,11 +688,11 @@ XXH_errorcode XXH32_update (void* state_in, const void* input, int len)
-forceinline U32 XXH32_intermediateDigest_endian (void* state_in, XXH_endianess endian)
+FORCE_INLINE U32 XXH32_digest_endian (const XXH32_state_t* state_in, XXH_endianess endian)
{
- struct XXH_state32_t * state = (struct XXH_state32_t *) state_in;
- const BYTE * p = (const BYTE*)state->memory;
- BYTE* bEnd = (BYTE*)state->memory + state->memsize;
+ XXH_istate32_t* state = (XXH_istate32_t*) state_in;
+ const BYTE * p = (const BYTE*)state->mem32;
+ BYTE* bEnd = (BYTE*)(state->mem32) + state->memsize;
U32 h32;
if (state->total_len >= 16)
@@ -430,9 +706,9 @@ forceinline U32 XXH32_intermediateDigest_endian (void* state_in, XXH_endianess e
h32 += (U32) state->total_len;
- while (p<=bEnd-4)
+ while (p+4<=bEnd)
{
- h32 += XXH_readLE32((const U32*)p, endian) * PRIME32_3;
+ h32 += XXH_readLE32(p, endian) * PRIME32_3;
h32 = XXH_rotl32(h32, 17) * PRIME32_4;
p+=4;
}
@@ -449,27 +725,217 @@ forceinline U32 XXH32_intermediateDigest_endian (void* state_in, XXH_endianess e
h32 ^= h32 >> 13;
h32 *= PRIME32_3;
h32 ^= h32 >> 16;
-
+#if 0
+ XXH32_freeState((XXH32_state_t *)state_in);
+#endif
return h32;
}
-U32 XXH32_intermediateDigest (void* state_in)
+U32 XXH32_digest (const XXH32_state_t* state_in)
{
XXH_endianess endian_detected = (XXH_endianess)XXH_CPU_LITTLE_ENDIAN;
-
+
if ((endian_detected==XXH_littleEndian) || XXH_FORCE_NATIVE_FORMAT)
- return XXH32_intermediateDigest_endian(state_in, XXH_littleEndian);
+ return XXH32_digest_endian(state_in, XXH_littleEndian);
else
- return XXH32_intermediateDigest_endian(state_in, XXH_bigEndian);
+ return XXH32_digest_endian(state_in, XXH_bigEndian);
}
-U32 XXH32_digest (void* state_in)
+FORCE_INLINE XXH_errorcode XXH64_update_endian (XXH64_state_t* state_in, const void* input, size_t len, XXH_endianess endian)
{
- U32 h32 = XXH32_intermediateDigest(state_in);
+ XXH_istate64_t * state = (XXH_istate64_t *) state_in;
+ const BYTE* p = (const BYTE*)input;
+ const BYTE* const bEnd = p + len;
+
+#ifdef XXH_ACCEPT_NULL_INPUT_POINTER
+ if (input==NULL) return XXH_ERROR;
+#endif
- XXH_free(state_in);
+ state->total_len += len;
- return h32;
+ if (state->memsize + len < 32) // fill in tmp buffer
+ {
+ XXH_memcpy(((BYTE*)state->mem64) + state->memsize, input, len);
+ state->memsize += (U32)len;
+ return XXH_OK;
+ }
+
+ if (state->memsize) // some data left from previous update
+ {
+ XXH_memcpy(((BYTE*)state->mem64) + state->memsize, input, 32-state->memsize);
+ {
+ const U64* p64 = state->mem64;
+ state->v1 += XXH_readLE64(p64, endian) * PRIME64_2;
+ state->v1 = XXH_rotl64(state->v1, 31);
+ state->v1 *= PRIME64_1;
+ p64++;
+ state->v2 += XXH_readLE64(p64, endian) * PRIME64_2;
+ state->v2 = XXH_rotl64(state->v2, 31);
+ state->v2 *= PRIME64_1;
+ p64++;
+ state->v3 += XXH_readLE64(p64, endian) * PRIME64_2;
+ state->v3 = XXH_rotl64(state->v3, 31);
+ state->v3 *= PRIME64_1;
+ p64++;
+ state->v4 += XXH_readLE64(p64, endian) * PRIME64_2;
+ state->v4 = XXH_rotl64(state->v4, 31);
+ state->v4 *= PRIME64_1;
+ p64++;
+ }
+ p += 32-state->memsize;
+ state->memsize = 0;
+ }
+
+ if (p+32 <= bEnd)
+ {
+ const BYTE* const limit = bEnd - 32;
+ U64 v1 = state->v1;
+ U64 v2 = state->v2;
+ U64 v3 = state->v3;
+ U64 v4 = state->v4;
+
+ do
+ {
+ v1 += XXH_readLE64(p, endian) * PRIME64_2;
+ v1 = XXH_rotl64(v1, 31);
+ v1 *= PRIME64_1;
+ p+=8;
+ v2 += XXH_readLE64(p, endian) * PRIME64_2;
+ v2 = XXH_rotl64(v2, 31);
+ v2 *= PRIME64_1;
+ p+=8;
+ v3 += XXH_readLE64(p, endian) * PRIME64_2;
+ v3 = XXH_rotl64(v3, 31);
+ v3 *= PRIME64_1;
+ p+=8;
+ v4 += XXH_readLE64(p, endian) * PRIME64_2;
+ v4 = XXH_rotl64(v4, 31);
+ v4 *= PRIME64_1;
+ p+=8;
+ }
+ while (p<=limit);
+
+ state->v1 = v1;
+ state->v2 = v2;
+ state->v3 = v3;
+ state->v4 = v4;
+ }
+
+ if (p < bEnd)
+ {
+ XXH_memcpy(state->mem64, p, bEnd-p);
+ state->memsize = (int)(bEnd-p);
+ }
+
+ return XXH_OK;
+}
+
+XXH_errorcode XXH64_update (XXH64_state_t* state_in, const void* input, size_t len)
+{
+ XXH_endianess endian_detected = (XXH_endianess)XXH_CPU_LITTLE_ENDIAN;
+
+ if ((endian_detected==XXH_littleEndian) || XXH_FORCE_NATIVE_FORMAT)
+ return XXH64_update_endian(state_in, input, len, XXH_littleEndian);
+ else
+ return XXH64_update_endian(state_in, input, len, XXH_bigEndian);
+}
+
+
+
+FORCE_INLINE U64 XXH64_digest_endian (const XXH64_state_t* state_in, XXH_endianess endian)
+{
+ XXH_istate64_t * state = (XXH_istate64_t *) state_in;
+ const BYTE * p = (const BYTE*)state->mem64;
+ BYTE* bEnd = (BYTE*)state->mem64 + state->memsize;
+ U64 h64;
+
+ if (state->total_len >= 32)
+ {
+ U64 v1 = state->v1;
+ U64 v2 = state->v2;
+ U64 v3 = state->v3;
+ U64 v4 = state->v4;
+
+ h64 = XXH_rotl64(v1, 1) + XXH_rotl64(v2, 7) + XXH_rotl64(v3, 12) + XXH_rotl64(v4, 18);
+
+ v1 *= PRIME64_2;
+ v1 = XXH_rotl64(v1, 31);
+ v1 *= PRIME64_1;
+ h64 ^= v1;
+ h64 = h64*PRIME64_1 + PRIME64_4;
+
+ v2 *= PRIME64_2;
+ v2 = XXH_rotl64(v2, 31);
+ v2 *= PRIME64_1;
+ h64 ^= v2;
+ h64 = h64*PRIME64_1 + PRIME64_4;
+
+ v3 *= PRIME64_2;
+ v3 = XXH_rotl64(v3, 31);
+ v3 *= PRIME64_1;
+ h64 ^= v3;
+ h64 = h64*PRIME64_1 + PRIME64_4;
+
+ v4 *= PRIME64_2;
+ v4 = XXH_rotl64(v4, 31);
+ v4 *= PRIME64_1;
+ h64 ^= v4;
+ h64 = h64*PRIME64_1 + PRIME64_4;
+ }
+ else
+ {
+ h64 = state->seed + PRIME64_5;
+ }
+
+ h64 += (U64) state->total_len;
+
+ while (p+8<=bEnd)
+ {
+ U64 k1 = XXH_readLE64(p, endian);
+ k1 *= PRIME64_2;
+ k1 = XXH_rotl64(k1,31);
+ k1 *= PRIME64_1;
+ h64 ^= k1;
+ h64 = XXH_rotl64(h64,27) * PRIME64_1 + PRIME64_4;
+ p+=8;
+ }
+
+ if (p+4<=bEnd)
+ {
+ h64 ^= (U64)(XXH_readLE32(p, endian)) * PRIME64_1;
+ h64 = XXH_rotl64(h64, 23) * PRIME64_2 + PRIME64_3;
+ p+=4;
+ }
+
+ while (p<bEnd)
+ {
+ h64 ^= (*p) * PRIME64_5;
+ h64 = XXH_rotl64(h64, 11) * PRIME64_1;
+ p++;
+ }
+
+ h64 ^= h64 >> 33;
+ h64 *= PRIME64_2;
+ h64 ^= h64 >> 29;
+ h64 *= PRIME64_3;
+ h64 ^= h64 >> 32;
+#if 0
+ XXH64_freeState((XXH64_state_t *)state_in);
+#endif
+ return h64;
+}
+
+
+uint64_t XXH64_digest (const XXH64_state_t* state_in)
+{
+ XXH_endianess endian_detected = (XXH_endianess)XXH_CPU_LITTLE_ENDIAN;
+
+ if ((endian_detected==XXH_littleEndian) || XXH_FORCE_NATIVE_FORMAT)
+ return XXH64_digest_endian(state_in, XXH_littleEndian);
+ else
+ return XXH64_digest_endian(state_in, XXH_bigEndian);
}
+
+
diff --git a/contrib/libucl/src/xxhash.h b/contrib/libucl/src/xxhash.h
index b892388..49b0239 100644
--- a/contrib/libucl/src/xxhash.h
+++ b/contrib/libucl/src/xxhash.h
@@ -1,20 +1,20 @@
/*
- xxHash - Fast Hash algorithm
+ xxHash - Extremely Fast Hash algorithm
Header File
- Copyright (C) 2012-2013, Yann Collet.
+ Copyright (C) 2012-2014, Yann Collet.
BSD 2-Clause License (http://www.opensource.org/licenses/bsd-license.php)
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are
met:
-
+
* Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above
copyright notice, this list of conditions and the following disclaimer
in the documentation and/or other materials provided with the
distribution.
-
+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
@@ -52,113 +52,114 @@ CRC32 0.43 GB/s 9
MD5-32 0.33 GB/s 10 Ronald L. Rivest
SHA1-32 0.28 GB/s 10
-Q.Score is a measure of quality of the hash function.
-It depends on successfully passing SMHasher test set.
+Q.Score is a measure of quality of the hash function.
+It depends on successfully passing SMHasher test set.
10 is a perfect score.
*/
-
-#pragma once
+#ifndef LIBUCL_XXHASH_H
+#define LIBUCL_XXHASH_H
#if defined (__cplusplus)
extern "C" {
#endif
-//****************************
-// Type
-//****************************
+/*****************************
+ Includes
+*****************************/
+#include <stddef.h> /* size_t */
+#include <stdint.h>
+
+
+/*****************************
+ Type
+*****************************/
typedef enum { XXH_OK=0, XXH_ERROR } XXH_errorcode;
-//****************************
-// Simple Hash Functions
-//****************************
+/*****************************
+ Simple Hash Functions
+*****************************/
-unsigned int XXH32 (const void* input, int len, unsigned int seed);
+unsigned int XXH32 (const void* input, size_t length, unsigned seed);
+uint64_t XXH64 (const void* input, size_t length, uint64_t seed);
/*
XXH32() :
- Calculate the 32-bits hash of sequence of length "len" stored at memory address "input".
- The memory between input & input+len must be valid (allocated and read-accessible).
+ Calculate the 32-bits hash of sequence "length" bytes stored at memory address "input".
+ The memory between input & input+length must be valid (allocated and read-accessible).
"seed" can be used to alter the result predictably.
This function successfully passes all SMHasher tests.
Speed on Core 2 Duo @ 3 GHz (single thread, SMHasher benchmark) : 5.4 GB/s
- Note that "len" is type "int", which means it is limited to 2^31-1.
- If your data is larger, use the advanced functions below.
+XXH64() :
+ Calculate the 64-bits hash of sequence of length "len" stored at memory address "input".
*/
-//****************************
-// Advanced Hash Functions
-//****************************
-
-void* XXH32_init (unsigned int seed);
-XXH_errorcode XXH32_update (void* state, const void* input, int len);
-unsigned int XXH32_digest (void* state);
+/*****************************
+ Advanced Hash Functions
+*****************************/
+typedef struct { int64_t ll[ 6]; } XXH32_state_t;
+typedef struct { int64_t ll[11]; } XXH64_state_t;
/*
-These functions calculate the xxhash of an input provided in several small packets,
-as opposed to an input provided as a single block.
-
-It must be started with :
-void* XXH32_init()
-The function returns a pointer which holds the state of calculation.
+These structures allow static allocation of XXH states.
+States must then be initialized using XXHnn_reset() before first use.
-This pointer must be provided as "void* state" parameter for XXH32_update().
-XXH32_update() can be called as many times as necessary.
-The user must provide a valid (allocated) input.
-The function returns an error code, with 0 meaning OK, and any other value meaning there is an error.
-Note that "len" is type "int", which means it is limited to 2^31-1.
-If your data is larger, it is recommended to chunk your data into blocks
-of size for example 2^30 (1GB) to avoid any "int" overflow issue.
-
-Finally, you can end the calculation anytime, by using XXH32_digest().
-This function returns the final 32-bits hash.
-You must provide the same "void* state" parameter created by XXH32_init().
-Memory will be freed by XXH32_digest().
+If you prefer dynamic allocation, please refer to functions below.
*/
+/*
+ * !!!
+ * Rspamd specific: we use the legacy method to free state when digest is obtained
+ * !!!
+ */
+void * XXH32_init (unsigned seed);
+XXH32_state_t* XXH32_createState(void);
+XXH_errorcode XXH32_freeState(XXH32_state_t* statePtr);
-int XXH32_sizeofState(void);
-XXH_errorcode XXH32_resetState(void* state, unsigned int seed);
+XXH64_state_t* XXH64_createState(void);
+XXH_errorcode XXH64_freeState(XXH64_state_t* statePtr);
-#define XXH32_SIZEOFSTATE 48
-typedef struct { long long ll[(XXH32_SIZEOFSTATE+(sizeof(long long)-1))/sizeof(long long)]; } XXH32_stateSpace_t;
/*
-These functions allow user application to make its own allocation for state.
+These functions create and release memory for XXH state.
+States must then be initialized using XXHnn_reset() before first use.
+*/
-XXH32_sizeofState() is used to know how much space must be allocated for the xxHash 32-bits state.
-Note that the state must be aligned to access 'long long' fields. Memory must be allocated and referenced by a pointer.
-This pointer must then be provided as 'state' into XXH32_resetState(), which initializes the state.
-For static allocation purposes (such as allocation on stack, or freestanding systems without malloc()),
-use the structure XXH32_stateSpace_t, which will ensure that memory space is large enough and correctly aligned to access 'long long' fields.
-*/
+XXH_errorcode XXH32_reset (XXH32_state_t* statePtr, unsigned seed);
+XXH_errorcode XXH32_update (XXH32_state_t* statePtr, const void* input, size_t length);
+unsigned int XXH32_digest (const XXH32_state_t* statePtr);
+XXH_errorcode XXH64_reset (XXH64_state_t* statePtr, uint64_t seed);
+XXH_errorcode XXH64_update (XXH64_state_t* statePtr, const void* input, size_t length);
+uint64_t XXH64_digest (const XXH64_state_t* statePtr);
-unsigned int XXH32_intermediateDigest (void* state);
/*
-This function does the same as XXH32_digest(), generating a 32-bit hash,
-but preserve memory context.
-This way, it becomes possible to generate intermediate hashes, and then continue feeding data with XXH32_update().
-To free memory context, use XXH32_digest(), or free().
-*/
+These functions calculate the xxHash of an input provided in multiple smaller packets,
+as opposed to an input provided as a single block.
+XXH state space must first be allocated, using either static or dynamic method provided above.
+Start a new hash by initializing state with a seed, using XXHnn_reset().
-//****************************
-// Deprecated function names
-//****************************
-// The following translations are provided to ease code transition
-// You are encouraged to no longer this function names
-#define XXH32_feed XXH32_update
-#define XXH32_result XXH32_digest
-#define XXH32_getIntermediateResult XXH32_intermediateDigest
+Then, feed the hash state by calling XXHnn_update() as many times as necessary.
+Obviously, input must be valid, meaning allocated and read accessible.
+The function returns an error code, with 0 meaning OK, and any other value meaning there is an error.
+Finally, you can produce a hash anytime, by using XXHnn_digest().
+This function returns the final nn-bits hash.
+You can nonetheless continue feeding the hash state with more input,
+and therefore get some new hashes, by calling again XXHnn_digest().
+
+When you are done, don't forget to free XXH state space, using typically XXHnn_freeState().
+*/
#if defined (__cplusplus)
}
#endif
+
+#endif
diff --git a/contrib/libucl/tests/Makefile.am b/contrib/libucl/tests/Makefile.am
index 5b17e1f..055eb8b 100644
--- a/contrib/libucl/tests/Makefile.am
+++ b/contrib/libucl/tests/Makefile.am
@@ -1,10 +1,12 @@
-EXTRA_DIST = $(TESTS) basic schema generate.res streamline.res rcl_test.json.xz
+EXTRA_DIST = $(TESTS) basic schema generate.res \
+ streamline.res rcl_test.json.xz
TESTS = basic.test \
generate.test \
schema.test \
+ msgpack.test \
speed.test \
- streamline.test
+ msgpack.test
TESTS_ENVIRONMENT = $(SH) \
TEST_DIR=$(top_srcdir)/tests \
TEST_OUT_DIR=$(top_builddir)/tests \
@@ -35,4 +37,9 @@ test_streamline_SOURCES = test_streamline.c
test_streamline_LDADD = $(common_test_ldadd)
test_streamline_CFLAGS = $(common_test_cflags)
-check_PROGRAMS = test_basic test_speed test_generate test_schema test_streamline \ No newline at end of file
+test_msgpack_SOURCES = test_msgpack.c
+test_msgpack_LDADD = $(common_test_ldadd)
+test_msgpack_CFLAGS = $(common_test_cflags)
+
+check_PROGRAMS = test_basic test_speed test_generate test_schema test_streamline \
+ test_msgpack \ No newline at end of file
diff --git a/contrib/libucl/tests/basic/13.in b/contrib/libucl/tests/basic/13.in
index 81f03a6..6e31e9c 100644
--- a/contrib/libucl/tests/basic/13.in
+++ b/contrib/libucl/tests/basic/13.in
@@ -1,7 +1,7 @@
key = value_orig;
# test glob
-.include(glob=true) "${CURDIR}/include_dir/test*.conf"
+.include(glob=true,something="test") "${CURDIR}/include_dir/test*.conf"
.include(priority=1) "${CURDIR}/include_dir/pri1.conf"
.include(priority=2) "${CURDIR}/include_dir/pri2.conf"
diff --git a/contrib/libucl/tests/basic/15.in b/contrib/libucl/tests/basic/15.in
new file mode 100644
index 0000000..1329b8c
--- /dev/null
+++ b/contrib/libucl/tests/basic/15.in
@@ -0,0 +1,24 @@
+# In this test we test include override bug
+
+.include(priority = 1) "${CURDIR}/15.inc"
+
+section = {
+ value = "test";
+}
+
+overrided = {
+ value = "not-to-be-shown";
+}
+
+/*
+ BUGGED UCL:
+ overrided {
+ key = "overrided";
+ }
+ !!! So overrided has actually rewritten the previous key
+ section {
+ value {
+ value = "not-to-be-shown";
+ }
+ }
+*/
diff --git a/contrib/libucl/tests/basic/15.inc b/contrib/libucl/tests/basic/15.inc
new file mode 100644
index 0000000..a9ab027
--- /dev/null
+++ b/contrib/libucl/tests/basic/15.inc
@@ -0,0 +1,3 @@
+overrided {
+ key = "overrided";
+}
diff --git a/contrib/libucl/tests/basic/15.res b/contrib/libucl/tests/basic/15.res
new file mode 100644
index 0000000..b6b4e26
--- /dev/null
+++ b/contrib/libucl/tests/basic/15.res
@@ -0,0 +1,7 @@
+overrided {
+ key = "overrided";
+}
+section {
+ value = "test";
+}
+
diff --git a/contrib/libucl/tests/basic/16.in b/contrib/libucl/tests/basic/16.in
new file mode 100644
index 0000000..0712252
--- /dev/null
+++ b/contrib/libucl/tests/basic/16.in
@@ -0,0 +1,12 @@
+.include(priority = 1) "${CURDIR}/16.inc"
+
+section = {
+ value = "test";
+}
+
+overrided = {
+ value = "not-to-be-shown";
+}
+overrided = {
+ value2 = "implicit-array";
+}
diff --git a/contrib/libucl/tests/basic/16.inc b/contrib/libucl/tests/basic/16.inc
new file mode 100644
index 0000000..34b6085
--- /dev/null
+++ b/contrib/libucl/tests/basic/16.inc
@@ -0,0 +1,3 @@
+overrided {
+ key = "overrided";
+}
diff --git a/contrib/libucl/tests/basic/16.res b/contrib/libucl/tests/basic/16.res
new file mode 100644
index 0000000..b6b4e26
--- /dev/null
+++ b/contrib/libucl/tests/basic/16.res
@@ -0,0 +1,7 @@
+overrided {
+ key = "overrided";
+}
+section {
+ value = "test";
+}
+
diff --git a/contrib/libucl/tests/basic/17.in b/contrib/libucl/tests/basic/17.in
new file mode 100644
index 0000000..bae66fb
--- /dev/null
+++ b/contrib/libucl/tests/basic/17.in
@@ -0,0 +1,2 @@
+# issue 74
+string that ends in slash\ \ No newline at end of file
diff --git a/contrib/libucl/tests/basic/17.res b/contrib/libucl/tests/basic/17.res
new file mode 100644
index 0000000..9870b04
--- /dev/null
+++ b/contrib/libucl/tests/basic/17.res
@@ -0,0 +1,2 @@
+string = "that ends in slash\\";
+
diff --git a/contrib/libucl/tests/basic/18.in b/contrib/libucl/tests/basic/18.in
new file mode 100644
index 0000000..bd12c01
--- /dev/null
+++ b/contrib/libucl/tests/basic/18.in
@@ -0,0 +1,10 @@
+defaults {
+ key = "val"
+ foo = "bar"
+ many = "values here"
+}
+
+mything {
+ .inherit "defaults"
+ key = "newval"
+}
diff --git a/contrib/libucl/tests/basic/18.res b/contrib/libucl/tests/basic/18.res
new file mode 100644
index 0000000..a6272d5
--- /dev/null
+++ b/contrib/libucl/tests/basic/18.res
@@ -0,0 +1,11 @@
+defaults {
+ key = "val";
+ foo = "bar";
+ many = "values here";
+}
+mything {
+ key = "newval";
+ foo = "bar";
+ many = "values here";
+}
+
diff --git a/contrib/libucl/tests/basic/19-append.inc b/contrib/libucl/tests/basic/19-append.inc
new file mode 100644
index 0000000..909dfce
--- /dev/null
+++ b/contrib/libucl/tests/basic/19-append.inc
@@ -0,0 +1,8 @@
+okey_append = {
+ key = value1;
+ key1 = value2
+}
+
+akey_append = ["value3"];
+
+skey_append = "value4";
diff --git a/contrib/libucl/tests/basic/19-merge.inc b/contrib/libucl/tests/basic/19-merge.inc
new file mode 100644
index 0000000..46deccb
--- /dev/null
+++ b/contrib/libucl/tests/basic/19-merge.inc
@@ -0,0 +1,8 @@
+okey_merge = {
+ key = value1;
+ key1 = value2;
+}
+
+akey_merge = ["value3"];
+
+skey_merge = "value4";
diff --git a/contrib/libucl/tests/basic/19-rewrite.inc b/contrib/libucl/tests/basic/19-rewrite.inc
new file mode 100644
index 0000000..5a7094b
--- /dev/null
+++ b/contrib/libucl/tests/basic/19-rewrite.inc
@@ -0,0 +1,8 @@
+okey_rewrite = {
+ key = value1;
+ key1 = value2;
+}
+
+akey_rewrite = ["value3"];
+
+skey_rewrite = "value4";
diff --git a/contrib/libucl/tests/basic/19.in b/contrib/libucl/tests/basic/19.in
new file mode 100644
index 0000000..717aed8
--- /dev/null
+++ b/contrib/libucl/tests/basic/19.in
@@ -0,0 +1,28 @@
+okey_append = {
+ key = value;
+}
+
+akey_append = ["value"];
+
+skey_append = "value";
+
+okey_merge = {
+ key = value;
+ source = original;
+}
+
+akey_merge = ["value"];
+
+skey_merge = "value";
+
+okey_rewrite = {
+ key = value;
+}
+
+akey_rewrite = ["value"];
+
+skey_rewrite = "value";
+
+.include(duplicate="append") "${CURDIR}/19-append.inc"
+.include(duplicate="merge") "${CURDIR}/19-merge.inc"
+.include(duplicate="rewrite") "${CURDIR}/19-rewrite.inc"
diff --git a/contrib/libucl/tests/basic/19.res b/contrib/libucl/tests/basic/19.res
new file mode 100644
index 0000000..ca7bc41
--- /dev/null
+++ b/contrib/libucl/tests/basic/19.res
@@ -0,0 +1,36 @@
+okey_append {
+ key = "value";
+}
+okey_append {
+ key = "value1";
+ key1 = "value2";
+}
+akey_append [
+ "value",
+]
+akey_append [
+ "value3",
+]
+skey_append = "value";
+skey_append = "value4";
+okey_merge {
+ key = "value";
+ key = "value1";
+ source = "original";
+ key1 = "value2";
+}
+akey_merge [
+ "value",
+ "value3",
+]
+skey_merge = "value";
+skey_merge = "value4";
+okey_rewrite {
+ key = "value1";
+ key1 = "value2";
+}
+akey_rewrite [
+ "value3",
+]
+skey_rewrite = "value4";
+
diff --git a/contrib/libucl/tests/basic/20.in b/contrib/libucl/tests/basic/20.in
new file mode 100644
index 0000000..f9d4088
--- /dev/null
+++ b/contrib/libucl/tests/basic/20.in
@@ -0,0 +1,2 @@
+# issue 112
+[[0 \ No newline at end of file
diff --git a/contrib/libucl/tests/basic/20.res b/contrib/libucl/tests/basic/20.res
new file mode 100644
index 0000000..abfbbf0
--- /dev/null
+++ b/contrib/libucl/tests/basic/20.res
@@ -0,0 +1,5 @@
+[
+ [
+ 0,
+ ]
+]
diff --git a/contrib/libucl/tests/basic/21.in b/contrib/libucl/tests/basic/21.in
new file mode 100644
index 0000000..8f4b328
--- /dev/null
+++ b/contrib/libucl/tests/basic/21.in
@@ -0,0 +1,2 @@
+ [9
+{0 [[0 \ No newline at end of file
diff --git a/contrib/libucl/tests/basic/21.res b/contrib/libucl/tests/basic/21.res
new file mode 100644
index 0000000..db091ce
--- /dev/null
+++ b/contrib/libucl/tests/basic/21.res
@@ -0,0 +1,10 @@
+[
+ 9,
+ {
+ 0 [
+ [
+ 0,
+ ]
+ ]
+ }
+]
diff --git a/contrib/libucl/tests/basic/22.in b/contrib/libucl/tests/basic/22.in
new file mode 100644
index 0000000..244cea0
--- /dev/null
+++ b/contrib/libucl/tests/basic/22.in
@@ -0,0 +1,2 @@
+# issue 113
+ÿ=1 \ No newline at end of file
diff --git a/contrib/libucl/tests/basic/22.res b/contrib/libucl/tests/basic/22.res
new file mode 100644
index 0000000..d4bf94d
--- /dev/null
+++ b/contrib/libucl/tests/basic/22.res
@@ -0,0 +1,2 @@
+ÿ = 1;
+
diff --git a/contrib/libucl/tests/msgpack.test b/contrib/libucl/tests/msgpack.test
new file mode 100755
index 0000000..67a3c93
--- /dev/null
+++ b/contrib/libucl/tests/msgpack.test
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+${TEST_BINARY_DIR}/test_msgpack \ No newline at end of file
diff --git a/contrib/libucl/tests/test_basic.c b/contrib/libucl/tests/test_basic.c
index 5859c0b..45a9c8b 100644
--- a/contrib/libucl/tests/test_basic.c
+++ b/contrib/libucl/tests/test_basic.c
@@ -27,13 +27,14 @@
int
main (int argc, char **argv)
{
- char inbuf[8192], *test_in = NULL;
+ char *inbuf;
struct ucl_parser *parser = NULL, *parser2 = NULL;
ucl_object_t *obj;
+ ssize_t bufsize, r;
FILE *in, *out;
unsigned char *emitted = NULL;
const char *fname_in = NULL, *fname_out = NULL;
- int ret = 0, inlen, opt, json = 0, compact = 0, yaml = 0;
+ int ret = 0, opt, json = 0, compact = 0, yaml = 0;
while ((opt = getopt(argc, argv, "jcy")) != -1) {
switch (opt) {
@@ -82,16 +83,28 @@ main (int argc, char **argv)
ucl_parser_set_filevars (parser, fname_in, true);
}
- while (!feof (in)) {
- memset (inbuf, 0, sizeof (inbuf));
- if (fread (inbuf, 1, sizeof (inbuf) - 1, in) == 0) {
- break;
+ inbuf = malloc (BUFSIZ);
+ bufsize = BUFSIZ;
+ r = 0;
+
+ while (!feof (in) && !ferror (in)) {
+ if (r == bufsize) {
+ inbuf = realloc (inbuf, bufsize * 2);
+ bufsize *= 2;
+ if (inbuf == NULL) {
+ perror ("realloc");
+ exit (EXIT_FAILURE);
+ }
}
- inlen = strlen (inbuf);
- test_in = malloc (inlen);
- memcpy (test_in, inbuf, inlen);
- ucl_parser_add_chunk (parser, (const unsigned char *)test_in, inlen);
+ r += fread (inbuf + r, 1, bufsize - r, in);
+ }
+
+ if (ferror (in)) {
+ fprintf (stderr, "Failed to read the input file.\n");
+ exit (EXIT_FAILURE);
}
+
+ ucl_parser_add_chunk (parser, (const unsigned char *)inbuf, r);
fclose (in);
if (fname_out != NULL) {
@@ -103,12 +116,15 @@ main (int argc, char **argv)
else {
out = stdout;
}
+
if (ucl_parser_get_error (parser) != NULL) {
fprintf (out, "Error occurred: %s\n", ucl_parser_get_error(parser));
ret = 1;
goto end;
}
+
obj = ucl_parser_get_object (parser);
+
if (json) {
if (compact) {
emitted = ucl_object_emit (obj, UCL_EMIT_JSON_COMPACT);
@@ -123,6 +139,7 @@ main (int argc, char **argv)
else {
emitted = ucl_object_emit (obj, UCL_EMIT_CONFIG);
}
+
ucl_parser_free (parser);
ucl_object_unref (obj);
parser2 = ucl_parser_new (UCL_PARSER_KEY_LOWERCASE);
@@ -134,9 +151,11 @@ main (int argc, char **argv)
ret = 1;
goto end;
}
+
if (emitted != NULL) {
free (emitted);
}
+
obj = ucl_parser_get_object (parser2);
if (json) {
if (compact) {
@@ -163,8 +182,8 @@ end:
if (parser2 != NULL) {
ucl_parser_free (parser2);
}
- if (test_in != NULL) {
- free (test_in);
+ if (inbuf != NULL) {
+ free (inbuf);
}
fclose (out);
diff --git a/contrib/libucl/tests/test_msgpack.c b/contrib/libucl/tests/test_msgpack.c
new file mode 100644
index 0000000..dd5860e
--- /dev/null
+++ b/contrib/libucl/tests/test_msgpack.c
@@ -0,0 +1,340 @@
+/*
+ * Copyright (c) 2015, Vsevolod Stakhov
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY AUTHOR ''AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL AUTHOR BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "ucl.h"
+#include "ucl_internal.h"
+#include <ctype.h>
+
+static const int niter = 1000;
+static const int ntests = 100;
+static const int nelt = 10;
+
+static int recursion = 0;
+
+typedef ucl_object_t* (*ucl_msgpack_test)(void);
+
+static ucl_object_t* ucl_test_integer (void);
+static ucl_object_t* ucl_test_string (void);
+static ucl_object_t* ucl_test_boolean (void);
+static ucl_object_t* ucl_test_map (void);
+static ucl_object_t* ucl_test_array (void);
+
+ucl_msgpack_test tests[] = {
+ ucl_test_integer,
+ ucl_test_string,
+ ucl_test_boolean,
+ ucl_test_map,
+ ucl_test_array,
+};
+
+#define NTESTS (sizeof(tests) / sizeof(tests[0]))
+
+typedef struct
+{
+ uint64_t state;
+ uint64_t inc;
+} pcg32_random_t;
+
+pcg32_random_t rng;
+
+/*
+ * From http://www.pcg-random.org/
+ */
+static uint32_t
+pcg32_random (void)
+{
+ uint64_t oldstate = rng.state;
+
+ rng.state = oldstate * 6364136223846793005ULL + (rng.inc | 1);
+ uint32_t xorshifted = ((oldstate >> 18u) ^ oldstate) >> 27u;
+ uint32_t rot = oldstate >> 59u;
+ return (xorshifted >> rot) | (xorshifted << ((-rot) & 31));
+}
+
+static const char *
+random_key (size_t *lenptr)
+{
+ static char keybuf[512];
+ int keylen, i;
+ char c;
+
+ keylen = pcg32_random () % (sizeof (keybuf) - 1) + 1;
+
+ for (i = 0; i < keylen; i ++) {
+ do {
+ c = pcg32_random () & 0xFF;
+ } while (!isgraph (c));
+
+ keybuf[i] = c;
+ }
+
+ *lenptr = keylen;
+ return keybuf;
+}
+
+int
+main (int argc, char **argv)
+{
+ int fd, i, j;
+ uint32_t sel;
+ ucl_object_t *obj, *elt;
+ struct ucl_parser *parser;
+ size_t klen, elen, elen2;
+ const char *key;
+ unsigned char *emitted, *emitted2;
+ FILE *out;
+ const char *fname_out = NULL;
+
+ switch (argc) {
+ case 2:
+ fname_out = argv[1];
+ break;
+ }
+
+ /* Seed prng */
+ fd = open ("/dev/urandom", O_RDONLY);
+ assert (fd != -1);
+ assert (read (fd, &rng, sizeof (rng)) == sizeof (rng));
+ close (fd);
+
+ for (i = 0; i < niter; i ++) {
+ if (fname_out != NULL) {
+ out = fopen (fname_out, "w");
+ if (out == NULL) {
+ exit (-errno);
+ }
+ }
+ else {
+ out = NULL;
+ }
+
+ /* Generate phase */
+ obj = ucl_object_typed_new (UCL_OBJECT);
+
+ for (j = 0; j < ntests; j ++) {
+ sel = pcg32_random () % NTESTS;
+
+ key = random_key (&klen);
+ recursion = 0;
+ elt = tests[sel]();
+ assert (elt != NULL);
+ assert (klen != 0);
+
+ ucl_object_insert_key (obj, elt, key, klen, true);
+ }
+
+ emitted = ucl_object_emit_len (obj, UCL_EMIT_MSGPACK, &elen);
+
+ assert (emitted != NULL);
+
+ if (out) {
+ fprintf (out, "%*.s\n", (int)elen, emitted);
+
+ fclose (out);
+ }
+ ucl_object_unref (obj);
+
+ parser = ucl_parser_new (0);
+
+ if (!ucl_parser_add_chunk_full (parser, emitted, elen, 0,
+ UCL_DUPLICATE_APPEND, UCL_PARSE_MSGPACK)) {
+ fprintf (stderr, "error parsing input: %s",
+ ucl_parser_get_error (parser));
+ assert (0);
+ }
+
+ obj = ucl_parser_get_object (parser);
+ assert (obj != NULL);
+
+ emitted2 = ucl_object_emit_len (obj, UCL_EMIT_MSGPACK, &elen2);
+
+ assert (emitted2 != NULL);
+ assert (elen2 == elen);
+ assert (memcmp (emitted, emitted2, elen) == 0);
+
+ ucl_parser_free (parser);
+ ucl_object_unref (obj);
+ free (emitted);
+ free (emitted2);
+ }
+
+ return 0;
+}
+
+
+static ucl_object_t*
+ucl_test_integer (void)
+{
+ ucl_object_t *res;
+ int count, i;
+ uint64_t cur;
+
+ res = ucl_object_typed_new (UCL_ARRAY);
+ count = pcg32_random () % nelt;
+
+ for (i = 0; i < count; i ++) {
+ cur = ((uint64_t)pcg32_random ()) << 32 | pcg32_random ();
+ ucl_array_append (res, ucl_object_fromint (cur % 128));
+ cur = ((uint64_t)pcg32_random ()) << 32 | pcg32_random ();
+ ucl_array_append (res, ucl_object_fromint (-cur % 128));
+ cur = ((uint64_t)pcg32_random ()) << 32 | pcg32_random ();
+ ucl_array_append (res, ucl_object_fromint (cur % 65536));
+ cur = ((uint64_t)pcg32_random ()) << 32 | pcg32_random ();
+ ucl_array_append (res, ucl_object_fromint (cur % INT32_MAX));
+ cur = ((uint64_t)pcg32_random ()) << 32 | pcg32_random ();
+ ucl_array_append (res, ucl_object_fromint (cur));
+ }
+
+ return res;
+}
+
+static ucl_object_t*
+ucl_test_string (void)
+{
+ ucl_object_t *res, *elt;
+ int count, i;
+ uint32_t cur_len;
+ char *str;
+
+ res = ucl_object_typed_new (UCL_ARRAY);
+ count = pcg32_random () % nelt;
+
+ for (i = 0; i < count; i ++) {
+ while ((cur_len = pcg32_random ()) % 128 == 0);
+
+ str = malloc (cur_len % 128);
+ ucl_array_append (res, ucl_object_fromstring_common (str, cur_len % 128,
+ UCL_STRING_RAW));
+ free (str);
+
+ while ((cur_len = pcg32_random ()) % 512 == 0);
+ str = malloc (cur_len % 512);
+ ucl_array_append (res, ucl_object_fromstring_common (str, cur_len % 512,
+ UCL_STRING_RAW));
+ free (str);
+
+ while ((cur_len = pcg32_random ()) % 128 == 0);
+ str = malloc (cur_len % 128);
+ elt = ucl_object_fromstring_common (str, cur_len % 128,
+ UCL_STRING_RAW);
+ elt->flags |= UCL_OBJECT_BINARY;
+ ucl_array_append (res, elt);
+ free (str);
+
+ while ((cur_len = pcg32_random ()) % 512 == 0);
+ str = malloc (cur_len % 512);
+ elt = ucl_object_fromstring_common (str, cur_len % 512,
+ UCL_STRING_RAW);
+ elt->flags |= UCL_OBJECT_BINARY;
+ ucl_array_append (res, elt);
+ free (str);
+ }
+
+ return res;
+}
+
+static ucl_object_t*
+ucl_test_boolean (void)
+{
+ ucl_object_t *res;
+ int count, i;
+
+ res = ucl_object_typed_new (UCL_ARRAY);
+ count = pcg32_random () % nelt;
+
+ for (i = 0; i < count; i ++) {
+ ucl_array_append (res, ucl_object_frombool (pcg32_random () % 2));
+ }
+
+ return res;
+}
+
+static ucl_object_t*
+ucl_test_map (void)
+{
+ ucl_object_t *res, *cur;
+ int count, i;
+ uint32_t cur_len, sel;
+ size_t klen;
+ const char *key;
+
+ res = ucl_object_typed_new (UCL_OBJECT);
+ count = pcg32_random () % nelt;
+
+ recursion ++;
+
+ for (i = 0; i < count; i ++) {
+
+ if (recursion > 10) {
+ sel = pcg32_random () % (NTESTS - 2);
+ }
+ else {
+ sel = pcg32_random () % NTESTS;
+ }
+
+ key = random_key (&klen);
+ cur = tests[sel]();
+ assert (cur != NULL);
+ assert (klen != 0);
+
+ ucl_object_insert_key (res, cur, key, klen, true);
+
+ /* Multi value key */
+ cur = tests[sel]();
+ assert (cur != NULL);
+
+ ucl_object_insert_key (res, cur, key, klen, true);
+ }
+
+ return res;
+}
+
+static ucl_object_t*
+ucl_test_array (void)
+{
+ ucl_object_t *res, *cur;
+ int count, i;
+ uint32_t cur_len, sel;
+
+ res = ucl_object_typed_new (UCL_ARRAY);
+ count = pcg32_random () % nelt;
+
+ recursion ++;
+
+ for (i = 0; i < count; i ++) {
+ if (recursion > 10) {
+ sel = pcg32_random () % (NTESTS - 2);
+ }
+ else {
+ sel = pcg32_random () % NTESTS;
+ }
+
+ cur = tests[sel]();
+ assert (cur != NULL);
+
+ ucl_array_append (res, cur);
+ }
+
+ return res;
+}
diff --git a/contrib/libucl/tests/test_schema.c b/contrib/libucl/tests/test_schema.c
index 4f075dae..39eb7f3 100644
--- a/contrib/libucl/tests/test_schema.c
+++ b/contrib/libucl/tests/test_schema.c
@@ -40,20 +40,24 @@ read_stdin (char **buf)
p = *buf;
remain = size;
- while ((ret = read (STDIN_FILENO, p, remain)) > 0) {
+ while ((ret = read (STDIN_FILENO, p, remain - 1)) > 0) {
remain -= ret;
p += ret;
- if (remain == 0) {
+
+ if (remain <= 1) {
*buf = realloc (*buf, size * 2);
if (*buf == NULL) {
return -1;
}
- p = *buf + size;
- remain = size;
+
+ p = *buf + size - 1;
+ remain = size + 1;
size *= 2;
}
}
+ *p = '\0';
+
return ret;
}
diff --git a/contrib/libucl/utils/Makefile.am b/contrib/libucl/utils/Makefile.am
index 23eeeac..ec85aaa 100644
--- a/contrib/libucl/utils/Makefile.am
+++ b/contrib/libucl/utils/Makefile.am
@@ -11,8 +11,12 @@ ucl_objdump_SOURCES = objdump.c
ucl_objdump_LDADD = $(common_utils_ldadd)
ucl_objdump_CFLAGS = $(common_utils_cflags)
+ucl_tool_SOURCES = ucl-tool.c
+ucl_tool_LDADD = $(common_utils_ldadd)
+ucl_tool_CFLAGS = $(common_utils_cflags)
+
if UTILS
-UTL = ucl_chargen ucl_objdump
+UTL = ucl_chargen ucl_objdump ucl_tool
else
UTL =
endif
diff --git a/contrib/libucl/utils/chargen.c b/contrib/libucl/utils/chargen.c
index d6fa86a..3981340 100644
--- a/contrib/libucl/utils/chargen.c
+++ b/contrib/libucl/utils/chargen.c
@@ -54,9 +54,9 @@ main (int argc, char **argv)
name = argv[1];
}
- printf ("static const unsigned int %s[255] = {\n", name);
+ printf ("static const unsigned int %s[256] = {\n", name);
- for (i = 0; i < 255; i ++) {
+ for (i = 0; i < 256; i ++) {
need_or = false;
r = 0;
/* UCL_CHARACTER_VALUE_END */
@@ -110,7 +110,7 @@ main (int argc, char **argv)
if (isprint (i)) {
r += sprintf (valbuf + r, " /* %c */", i);
}
- if (i != 254) {
+ if (i != 255) {
r += sprintf (valbuf + r, ", ");
}
col += r;
diff --git a/contrib/libucl/utils/objdump.c b/contrib/libucl/utils/objdump.c
index 74581ba..6fde2f4 100644
--- a/contrib/libucl/utils/objdump.c
+++ b/contrib/libucl/utils/objdump.c
@@ -99,9 +99,10 @@ int
main(int argc, char **argv)
{
const char *fn = NULL;
- unsigned char inbuf[8192];
+ unsigned char *inbuf;
struct ucl_parser *parser;
int k, ret = 0, r = 0;
+ ssize_t bufsize;
ucl_object_t *obj = NULL;
const ucl_object_t *par;
FILE *in;
@@ -121,9 +122,27 @@ main(int argc, char **argv)
}
parser = ucl_parser_new (0);
- while (!feof (in) && r < (int)sizeof (inbuf)) {
- r += fread (inbuf + r, 1, sizeof (inbuf) - r, in);
+ inbuf = malloc (BUFSIZ);
+ bufsize = BUFSIZ;
+ r = 0;
+
+ while (!feof (in) && !ferror (in)) {
+ if (r == bufsize) {
+ inbuf = realloc (inbuf, bufsize * 2);
+ bufsize *= 2;
+ if (inbuf == NULL) {
+ perror ("realloc");
+ exit (EXIT_FAILURE);
+ }
+ }
+ r += fread (inbuf + r, 1, bufsize - r, in);
}
+
+ if (ferror (in)) {
+ fprintf (stderr, "Failed to read the input file.\n");
+ exit (EXIT_FAILURE);
+ }
+
ucl_parser_add_chunk (parser, inbuf, r);
fclose (in);
if (ucl_parser_get_error(parser)) {
diff --git a/contrib/libucl/utils/ucl-tool.c b/contrib/libucl/utils/ucl-tool.c
new file mode 100644
index 0000000..feea9c2
--- /dev/null
+++ b/contrib/libucl/utils/ucl-tool.c
@@ -0,0 +1,168 @@
+/* Copyright (c) 2015, Cesanta Software
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED ''AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL AUTHOR BE LIABLE FOR ANY
+ * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <stdio.h>
+#include <getopt.h>
+#include <stdlib.h>
+
+#include "ucl.h"
+
+static struct option opts[] = {
+ {"help", no_argument, NULL, 'h'},
+ {"in", required_argument, NULL, 'i' },
+ {"out", required_argument, NULL, 'o' },
+ {"schema", required_argument, NULL, 's'},
+ {"format", required_argument, NULL, 'f'},
+ {0, 0, 0, 0}
+};
+
+void usage(const char *name, FILE *out) {
+ fprintf(out, "Usage: %s [--help] [-i|--in file] [-o|--out file]\n", name);
+ fprintf(out, " [-s|--schema file] [-f|--format format]\n\n");
+ fprintf(out, " --help - print this message and exit\n");
+ fprintf(out, " --in - specify input filename "
+ "(default: standard input)\n");
+ fprintf(out, " --out - specify output filename "
+ "(default: standard output)\n");
+ fprintf(out, " --schema - specify schema file for validation\n");
+ fprintf(out, " --format - output format. Options: ucl (default), "
+ "json, compact_json, yaml, msgpack\n");
+}
+
+int main(int argc, char **argv) {
+ char ch;
+ FILE *in = stdin, *out = stdout;
+ const char *schema = NULL;
+ unsigned char *buf = NULL;
+ size_t size = 0, r = 0;
+ struct ucl_parser *parser = NULL;
+ ucl_object_t *obj = NULL;
+ ucl_emitter_t emitter = UCL_EMIT_CONFIG;
+
+ while((ch = getopt_long(argc, argv, "hi:o:s:f:", opts, NULL)) != -1) {
+ switch (ch) {
+ case 'i':
+ in = fopen(optarg, "r");
+ if (in == NULL) {
+ perror("fopen on input file");
+ exit(EXIT_FAILURE);
+ }
+ break;
+ case 'o':
+ out = fopen(optarg, "w");
+ if (out == NULL) {
+ perror("fopen on output file");
+ exit(EXIT_FAILURE);
+ }
+ break;
+ case 's':
+ schema = optarg;
+ break;
+ case 'f':
+ if (strcmp(optarg, "ucl") == 0) {
+ emitter = UCL_EMIT_CONFIG;
+ } else if (strcmp(optarg, "json") == 0) {
+ emitter = UCL_EMIT_JSON;
+ } else if (strcmp(optarg, "yaml") == 0) {
+ emitter = UCL_EMIT_YAML;
+ } else if (strcmp(optarg, "compact_json") == 0) {
+ emitter = UCL_EMIT_JSON_COMPACT;
+ } else if (strcmp(optarg, "msgpack") == 0) {
+ emitter = UCL_EMIT_MSGPACK;
+ } else {
+ fprintf(stderr, "Unknown output format: %s\n", optarg);
+ exit(EXIT_FAILURE);
+ }
+ break;
+ case 'h':
+ usage(argv[0], stdout);
+ exit(0);
+ default:
+ usage(argv[0], stderr);
+ exit(EXIT_FAILURE);
+ break;
+ }
+ }
+
+ parser = ucl_parser_new(0);
+ buf = malloc(BUFSIZ);
+ size = BUFSIZ;
+ while(!feof(in) && !ferror(in)) {
+ if (r == size) {
+ buf = realloc(buf, size*2);
+ size *= 2;
+ if (buf == NULL) {
+ perror("realloc");
+ exit(EXIT_FAILURE);
+ }
+ }
+ r += fread(buf + r, 1, size - r, in);
+ }
+ if (ferror(in)) {
+ fprintf(stderr, "Failed to read the input file.\n");
+ exit(EXIT_FAILURE);
+ }
+ fclose(in);
+ if (!ucl_parser_add_chunk(parser, buf, r)) {
+ fprintf(stderr, "Failed to parse input file: %s\n",
+ ucl_parser_get_error(parser));
+ exit(EXIT_FAILURE);
+ }
+ if ((obj = ucl_parser_get_object(parser)) == NULL) {
+ fprintf(stderr, "Failed to get root object: %s\n",
+ ucl_parser_get_error(parser));
+ exit(EXIT_FAILURE);
+ }
+ if (schema != NULL) {
+ struct ucl_parser *schema_parser = ucl_parser_new(0);
+ ucl_object_t *schema_obj = NULL;
+ struct ucl_schema_error error;
+
+ if (!ucl_parser_add_file(schema_parser, schema)) {
+ fprintf(stderr, "Failed to parse schema file: %s\n",
+ ucl_parser_get_error(schema_parser));
+ exit(EXIT_FAILURE);
+ }
+ if ((schema_obj = ucl_parser_get_object(schema_parser)) == NULL) {
+ fprintf(stderr, "Failed to get root object: %s\n",
+ ucl_parser_get_error(schema_parser));
+ exit(EXIT_FAILURE);
+ }
+ if (!ucl_object_validate(schema_obj, obj, &error)) {
+ fprintf(stderr, "Validation failed: %s\n", error.msg);
+ exit(EXIT_FAILURE);
+ }
+ }
+
+ if (emitter != UCL_EMIT_MSGPACK) {
+ fprintf(out, "%s\n", ucl_object_emit(obj, emitter));
+ }
+ else {
+ size_t len;
+ unsigned char *res;
+
+ res = ucl_object_emit_len(obj, emitter, &len);
+ fwrite(res, 1, len, out);
+ }
+
+ return 0;
+}
diff --git a/contrib/llvm/tools/lldb/source/Plugins/Process/FreeBSD/POSIXThread.cpp b/contrib/llvm/tools/lldb/source/Plugins/Process/FreeBSD/POSIXThread.cpp
index 854796f..7d95e96 100644
--- a/contrib/llvm/tools/lldb/source/Plugins/Process/FreeBSD/POSIXThread.cpp
+++ b/contrib/llvm/tools/lldb/source/Plugins/Process/FreeBSD/POSIXThread.cpp
@@ -36,6 +36,7 @@
#include "RegisterContextPOSIXProcessMonitor_powerpc.h"
#include "RegisterContextPOSIXProcessMonitor_x86.h"
#include "Plugins/Process/Utility/RegisterContextFreeBSD_arm.h"
+#include "Plugins/Process/Utility/RegisterContextFreeBSD_arm64.h"
#include "Plugins/Process/Utility/RegisterContextFreeBSD_i386.h"
#include "Plugins/Process/Utility/RegisterContextFreeBSD_mips64.h"
#include "Plugins/Process/Utility/RegisterContextFreeBSD_powerpc.h"
@@ -160,6 +161,9 @@ POSIXThread::GetRegisterContext()
case llvm::Triple::FreeBSD:
switch (target_arch.GetMachine())
{
+ case llvm::Triple::aarch64:
+ reg_interface = new RegisterContextFreeBSD_arm64(target_arch);
+ break;
case llvm::Triple::arm:
reg_interface = new RegisterContextFreeBSD_arm(target_arch);
break;
diff --git a/contrib/mdocml/lib.in b/contrib/mdocml/lib.in
index a1ce062..d69a654 100644
--- a/contrib/mdocml/lib.in
+++ b/contrib/mdocml/lib.in
@@ -57,7 +57,6 @@ LINE("libfsid", "Filesystem Identification Library (libfsid, \\-lfsid)")
LINE("libftpio", "FTP Connection Management Library (libftpio, \\-lftpio)")
LINE("libform", "Curses Form Library (libform, \\-lform)")
LINE("libgeom", "Userland API Library for Kernel GEOM subsystem (libgeom, \\-lgeom)")
-LINE("libgpib", "General-Purpose Instrument Bus (GPIB) library (libgpib, \\-lgpib)")
LINE("libgpio", "General-Purpose Input Output (GPIO) library (libgpio, \\-lgpio)")
LINE("libhammer", "HAMMER Filesystem Userland Library (libhammer, \\-lhammer)")
LINE("libi386", "i386 Architecture Library (libi386, \\-li386)")
diff --git a/contrib/netbsd-tests/lib/libc/ssp/h_readlink.c b/contrib/netbsd-tests/lib/libc/ssp/h_readlink.c
index 7e8bff6..30e9c1e 100644
--- a/contrib/netbsd-tests/lib/libc/ssp/h_readlink.c
+++ b/contrib/netbsd-tests/lib/libc/ssp/h_readlink.c
@@ -46,7 +46,6 @@ main(int argc, char *argv[])
{
#ifdef __FreeBSD__
char b[512], *sl;
- int n;
size_t len = atoi(argv[1]);
sl = malloc(len);
memset(sl, 'a', len);
@@ -54,7 +53,7 @@ main(int argc, char *argv[])
unlink("symlink");
if (symlink(sl, "symlink") == -1)
err(1, "symlink()");
- n = readlink("symlink", b, len);
+ (void)readlink("symlink", b, len);
unlink("symlink");
#else
char b[MAXPATHLEN];
diff --git a/contrib/ntp/ChangeLog b/contrib/ntp/ChangeLog
index 738ae22..5d8346b 100644
--- a/contrib/ntp/ChangeLog
+++ b/contrib/ntp/ChangeLog
@@ -1,4 +1,159 @@
---
+(4.2.8p4) 2015/10/21 Released by Harlan Stenn <stenn@ntp.org>
+(4.2.8p4-RC1) 2015/10/06 Released by Harlan Stenn <stenn@ntp.org>
+
+* [Sec 2899] CVE-2014-9297 perlinger@ntp.org
+* [Sec 2901] Drop invalid packet before checking KoD. Check for all KoD's.
+ Danny Mayer. Log incoming packets that fail TEST2. Harlan Stenn.
+* [Sec 2902] configuration directives "pidfile" and "driftfile"
+ should be local-only. perlinger@ntp.org (patch by Miroslav Lichvar)
+* [Sec 2909] added missing call to 'free()' in ntp_crypto.c. perlinger@ntp.org
+* [Sec 2913] TALOS-CAN-0052: crash by loop counter underrun. perlinger@ntp.org
+* [Sec 2916] TALOS-CAN-0054: memory corruption in password store. JPerlinger
+* [Sec 2917] TALOS-CAN-0055: Infinite loop if extended logging enabled and
+ the logfile and keyfile are the same. perlinger@ntp.org
+* [Sec 1918] TALOS-CAN-0062: prevent directory traversal for VMS, too, when
+ using 'saveconfig' command. perlinger@ntp.org
+* [Bug 2919] TALOS-CAN-0063: avoid buffer overrun in ntpq. perlinger@ntp.org
+* [Sec 2020] TALOS-CAN-0064: signed/unsiged clash could lead to buffer overun
+ and memory corruption. perlinger@ntp.org
+* [Sec 2921] TALOS-CAN-0065: password length memory corruption. JPerlinger.
+* [Sec 2922] decodenetnum() will ASSERT botch instead of returning FAIL
+ on some bogus values. Harlan Stenn.
+* [Sec 2941] NAK to the Future: Symmetric association authentication
+ bypass via crypto-NAK. Patch applied. perlinger@ntp.org
+* [Bug 2332] (reopened) Exercise thread cancellation once before dropping
+ privileges and limiting resources in NTPD removes the need to link
+ forcefully against 'libgcc_s' which does not always work. J.Perlinger
+* [Bug 2595] ntpdate man page quirks. Hal Murray, Harlan Stenn.
+* [Bug 2625] Deprecate flag1 in local refclock. Hal Murray, Harlan Stenn.
+* [Bug 2817] Stop locking ntpd into memory by default under Linux. H.Stenn.
+* [Bug 2821] minor build issues: fixed refclock_gpsdjson.c. perlinger@ntp.org
+* [Bug 2823] ntpsweep with recursive peers option doesn't work. H.Stenn.
+* [Bug 2849] Systems with more than one default route may never
+ synchronize. Brian Utterback. Note that this patch might need to
+ be reverted once Bug 2043 has been fixed.
+* [Bug 2864] 4.2.8p3 fails to compile on Windows. Juergen Perlinger
+* [Bug 2866] segmentation fault at initgroups(). Harlan Stenn.
+* [Bug 2867] ntpd with autokey active crashed by 'ntpq -crv'. J.Perlinger
+* [Bug 2873] libevent should not include .deps/ in the tarball. H.Stenn
+* [Bug 2874] Don't distribute generated sntp/tests/fileHandlingTest.h. H.Stenn
+* [Bug 2875] sntp/Makefile.am: Get rid of DIST_SUBDIRS. libevent must
+ be configured for the distribution targets. Harlan Stenn.
+* [Bug 2883] ntpd crashes on exit with empty driftfile. Miroslav Lichvar.
+* [Bug 2886] Mis-spelling: "outlyer" should be "outlier". dave@horsfall.org
+* [Bug 2888] streamline calendar functions. perlinger@ntp.org
+* [Bug 2889] ntp-dev-4.3.67 does not build on Windows. perlinger@ntp.org
+* [Bug 2890] Ignore ENOBUFS on routing netlink socket. Konstantin Khlebnikov.
+* [Bug 2906] make check needs better support for pthreads. Harlan Stenn.
+* [Bug 2907] dist* build targets require our libevent/ to be enabled. HStenn.
+* [Bug 2912] no munlockall() under Windows. David Taylor, Harlan Stenn.
+* libntp/emalloc.c: Remove explicit include of stdint.h. Harlan Stenn.
+* Put Unity CPPFLAGS items in unity_config.h. Harlan Stenn.
+* tests/ntpd/g_leapsec.cpp typo fix. Harlan Stenn.
+* Phase 1 deprecation of google test in sntp/tests/. Harlan Stenn.
+* On some versions of HP-UX, inttypes.h does not include stdint.h. H.Stenn.
+* top_srcdir can change based on ntp v. sntp. Harlan Stenn.
+* sntp/tests/ function parameter list cleanup. Damir Tomić.
+* tests/libntp/ function parameter list cleanup. Damir Tomić.
+* tests/ntpd/ function parameter list cleanup. Damir Tomić.
+* sntp/unity/unity_config.h: handle stdint.h. Harlan Stenn.
+* sntp/unity/unity_internals.h: handle *INTPTR_MAX on old Solaris. H.Stenn.
+* tests/libntp/timevalops.c and timespecops.c fixed error printing. D.Tomić.
+* tests/libntp/ improvements in code and fixed error printing. Damir Tomić.
+* tests/libntp: a_md5encrypt.c, authkeys.c, buftvtots.c, calendar.c, caljulian.c,
+ caltontp.c, clocktime.c, humandate.c, hextolfp.c, decodenetnum.c - fixed
+ formatting; first declaration, then code (C90); deleted unnecessary comments;
+ changed from sprintf to snprintf; fixed order of includes. Tomasz Flendrich
+* tests/libntp/lfpfunc.c remove unnecessary include, remove old comments,
+ fix formatting, cleanup. Tomasz Flendrich
+* tests/libntp/lfptostr.c remove unnecessary include, add consts, fix formatting.
+ Tomasz Flendrich
+* tests/libntp/statestr.c remove empty functions, remove unnecessary include,
+ fix formatting. Tomasz Flendrich
+* tests/libntp/modetoa.c fixed formatting. Tomasz Flendrich
+* tests/libntp/msyslog.c fixed formatting. Tomasz Flendrich
+* tests/libntp/numtoa.c deleted unnecessary empty functions, fixed formatting.
+ Tomasz Flendrich
+* tests/libntp/numtohost.c added const, fixed formatting. Tomasz Flendrich
+* tests/libntp/refnumtoa.c fixed formatting. Tomasz Flendrich
+* tests/libntp/ssl_init.c fixed formatting. Tomasz Flendrich
+* tests/libntp/tvtots.c fixed a bug, fixed formatting. Tomasz Flendrich
+* tests/libntp/uglydate.c removed an unnecessary include. Tomasz Flendrich
+* tests/libntp/vi64ops.c removed an unnecessary comment, fixed formatting.
+* tests/libntp/ymd3yd.c removed an empty function and an unnecessary include,
+fixed formatting. Tomasz Flendrich
+* tests/libntp/timespecops.c fixed formatting, fixed the order of includes,
+ removed unnecessary comments, cleanup. Tomasz Flendrich
+* tests/libntp/timevalops.c fixed the order of includes, deleted unnecessary
+ comments, cleanup. Tomasz Flendrich
+* tests/libntp/sockaddrtest.h making it agree to NTP's conventions of formatting.
+ Tomasz Flendrich
+* tests/libntp/lfptest.h cleanup. Tomasz Flendrich
+* tests/libntp/test-libntp.c fix formatting. Tomasz Flendrich
+* sntp/tests/crypto.c is now using proper Unity's assertions, fixed formatting.
+ Tomasz Flendrich
+* sntp/tests/kodDatabase.c added consts, deleted empty function,
+ fixed formatting. Tomasz Flendrich
+* sntp/tests/kodFile.c cleanup, fixed formatting. Tomasz Flendrich
+* sntp/tests/packetHandling.c is now using proper Unity's assertions,
+ fixed formatting, deleted unused variable. Tomasz Flendrich
+* sntp/tests/keyFile.c is now using proper Unity's assertions, fixed formatting.
+ Tomasz Flendrich
+* sntp/tests/packetProcessing.c changed from sprintf to snprintf,
+ fixed formatting. Tomasz Flendrich
+* sntp/tests/utilities.c is now using proper Unity's assertions, changed
+ the order of includes, fixed formatting, removed unnecessary comments.
+ Tomasz Flendrich
+* sntp/tests/sntptest.h fixed formatting. Tomasz Flendrich
+* sntp/tests/fileHandlingTest.h.in fixed a possible buffer overflow problem,
+ made one function do its job, deleted unnecessary prints, fixed formatting.
+ Tomasz Flendrich
+* sntp/unity/Makefile.am added a missing header. Tomasz Flendrich
+* sntp/unity/unity_config.h: Distribute it. Harlan Stenn.
+* sntp/libevent/evconfig-private.h: remove generated filefrom SCM. H.Stenn.
+* sntp/unity/Makefile.am: fix some broken paths. Harlan Stenn.
+* sntp/unity/unity.c: Clean up a printf(). Harlan Stenn.
+* Phase 1 deprecation of google test in tests/libntp/. Harlan Stenn.
+* Don't build sntp/libevent/sample/. Harlan Stenn.
+* tests/libntp/test_caltontp needs -lpthread. Harlan Stenn.
+* br-flock: --enable-local-libevent. Harlan Stenn.
+* Wrote tests for ntpd/ntp_prio_q.c. Tomasz Flendrich
+* scripts/lib/NTP/Util.pm: stratum output is version-dependent. Harlan Stenn.
+* Get rid of the NTP_ prefix on our assertion macros. Harlan Stenn.
+* Code cleanup. Harlan Stenn.
+* libntp/icom.c: Typo fix. Harlan Stenn.
+* util/ntptime.c: initialization nit. Harlan Stenn.
+* ntpd/ntp_peer.c:newpeer(): added a DEBUG_REQUIRE(srcadr). Harlan Stenn.
+* Add std_unity_tests to various Makefile.am files. Harlan Stenn.
+* ntpd/ntp_restrict.c: added a few assertions, created tests for this file.
+ Tomasz Flendrich
+* Changed progname to be const in many files - now it's consistent. Tomasz
+ Flendrich
+* Typo fix for GCC warning suppression. Harlan Stenn.
+* Added tests/ntpd/ntp_scanner.c test. Damir Tomić.
+* Added declarations to all Unity tests, and did minor fixes to them.
+ Reduced the number of warnings by half. Damir Tomić.
+* Updated generate_test_runner.rb and updated the sntp/unity/auto directory
+ with the latest Unity updates from Mark. Damir Tomić.
+* Retire google test - phase I. Harlan Stenn.
+* Unity test cleanup: move declaration of 'initializing'. Harlan Stenn.
+* Update the NEWS file. Harlan Stenn.
+* Autoconf cleanup. Harlan Stenn.
+* Unit test dist cleanup. Harlan Stenn.
+* Cleanup various test Makefile.am files. Harlan Stenn.
+* Pthread autoconf macro cleanup. Harlan Stenn.
+* Fix progname definition in unity runner scripts. Harlan Stenn.
+* Clean trailing whitespace in tests/ntpd/Makefile.am. Harlan Stenn.
+* Update the patch for bug 2817. Harlan Stenn.
+* More updates for bug 2817. Harlan Stenn.
+* Fix bugs in tests/ntpd/ntp_prio_q.c. Harlan Stenn.
+* gcc on older HPUX may need +allowdups. Harlan Stenn.
+* Adding missing MCAST protection. Harlan Stenn.
+* Disable certain test programs on certain platforms. Harlan Stenn.
+* Implement --enable-problem-tests (on by default). Harlan Stenn.
+* build system tweaks. Harlan Stenn.
+---
(4.2.8p3) 2015/06/29 Released by Harlan Stenn <stenn@ntp.org>
* [Sec 2853] Crafted remote config packet can crash some versions of
diff --git a/contrib/ntp/CommitLog b/contrib/ntp/CommitLog
index b1f2a30..3366f2f 100644
--- a/contrib/ntp/CommitLog
+++ b/contrib/ntp/CommitLog
@@ -1,3 +1,4916 @@
+ChangeSet@1.3577, 2015-10-21 12:42:02-04:00, stenn@deacon.udel.edu
+ NTP_4_2_8P4
+ TAG: NTP_4_2_8P4
+
+ ChangeLog@1.1757 +1 -0
+ NTP_4_2_8P4
+
+ ntpd/invoke-ntp.conf.texi@1.193 +1 -1
+ NTP_4_2_8P4
+
+ ntpd/invoke-ntp.keys.texi@1.185 +1 -1
+ NTP_4_2_8P4
+
+ ntpd/invoke-ntpd.texi@1.502 +2 -2
+ NTP_4_2_8P4
+
+ ntpd/ntp.conf.5man@1.227 +3 -3
+ NTP_4_2_8P4
+
+ ntpd/ntp.conf.5mdoc@1.227 +2 -2
+ NTP_4_2_8P4
+
+ ntpd/ntp.conf.html@1.181 +94 -107
+ NTP_4_2_8P4
+
+ ntpd/ntp.conf.man.in@1.227 +3 -3
+ NTP_4_2_8P4
+
+ ntpd/ntp.conf.mdoc.in@1.227 +2 -2
+ NTP_4_2_8P4
+
+ ntpd/ntp.keys.5man@1.219 +2 -2
+ NTP_4_2_8P4
+
+ ntpd/ntp.keys.5mdoc@1.219 +3 -3
+ NTP_4_2_8P4
+
+ ntpd/ntp.keys.html@1.181 +21 -33
+ NTP_4_2_8P4
+
+ ntpd/ntp.keys.man.in@1.219 +2 -2
+ NTP_4_2_8P4
+
+ ntpd/ntp.keys.mdoc.in@1.219 +3 -3
+ NTP_4_2_8P4
+
+ ntpd/ntpd-opts.c@1.524 +245 -245
+ NTP_4_2_8P4
+
+ ntpd/ntpd-opts.h@1.523 +3 -3
+ NTP_4_2_8P4
+
+ ntpd/ntpd.1ntpdman@1.331 +3 -3
+ NTP_4_2_8P4
+
+ ntpd/ntpd.1ntpdmdoc@1.331 +2 -2
+ NTP_4_2_8P4
+
+ ntpd/ntpd.html@1.175 +142 -186
+ NTP_4_2_8P4
+
+ ntpd/ntpd.man.in@1.331 +3 -3
+ NTP_4_2_8P4
+
+ ntpd/ntpd.mdoc.in@1.331 +2 -2
+ NTP_4_2_8P4
+
+ ntpdc/invoke-ntpdc.texi@1.499 +2 -2
+ NTP_4_2_8P4
+
+ ntpdc/ntpdc-opts.c@1.517 +107 -107
+ NTP_4_2_8P4
+
+ ntpdc/ntpdc-opts.h@1.516 +3 -3
+ NTP_4_2_8P4
+
+ ntpdc/ntpdc.1ntpdcman@1.330 +3 -3
+ NTP_4_2_8P4
+
+ ntpdc/ntpdc.1ntpdcmdoc@1.330 +2 -2
+ NTP_4_2_8P4
+
+ ntpdc/ntpdc.html@1.343 +75 -95
+ NTP_4_2_8P4
+
+ ntpdc/ntpdc.man.in@1.330 +3 -3
+ NTP_4_2_8P4
+
+ ntpdc/ntpdc.mdoc.in@1.330 +2 -2
+ NTP_4_2_8P4
+
+ ntpq/invoke-ntpq.texi@1.506 +2 -2
+ NTP_4_2_8P4
+
+ ntpq/ntpq-opts.c@1.523 +106 -106
+ NTP_4_2_8P4
+
+ ntpq/ntpq-opts.h@1.521 +3 -3
+ NTP_4_2_8P4
+
+ ntpq/ntpq.1ntpqman@1.334 +3 -3
+ NTP_4_2_8P4
+
+ ntpq/ntpq.1ntpqmdoc@1.334 +2 -2
+ NTP_4_2_8P4
+
+ ntpq/ntpq.html@1.172 +132 -155
+ NTP_4_2_8P4
+
+ ntpq/ntpq.man.in@1.334 +3 -3
+ NTP_4_2_8P4
+
+ ntpq/ntpq.mdoc.in@1.334 +2 -2
+ NTP_4_2_8P4
+
+ ntpsnmpd/invoke-ntpsnmpd.texi@1.501 +2 -2
+ NTP_4_2_8P4
+
+ ntpsnmpd/ntpsnmpd-opts.c@1.519 +68 -68
+ NTP_4_2_8P4
+
+ ntpsnmpd/ntpsnmpd-opts.h@1.518 +3 -3
+ NTP_4_2_8P4
+
+ ntpsnmpd/ntpsnmpd.1ntpsnmpdman@1.330 +3 -3
+ NTP_4_2_8P4
+
+ ntpsnmpd/ntpsnmpd.1ntpsnmpdmdoc@1.330 +2 -2
+ NTP_4_2_8P4
+
+ ntpsnmpd/ntpsnmpd.html@1.170 +10 -14
+ NTP_4_2_8P4
+
+ ntpsnmpd/ntpsnmpd.man.in@1.330 +3 -3
+ NTP_4_2_8P4
+
+ ntpsnmpd/ntpsnmpd.mdoc.in@1.330 +2 -2
+ NTP_4_2_8P4
+
+ packageinfo.sh@1.520 +3 -3
+ NTP_4_2_8P4
+
+ scripts/calc_tickadj/calc_tickadj.1calc_tickadjman@1.91 +3 -3
+ NTP_4_2_8P4
+
+ scripts/calc_tickadj/calc_tickadj.1calc_tickadjmdoc@1.92 +2 -2
+ NTP_4_2_8P4
+
+ scripts/calc_tickadj/calc_tickadj.html@1.93 +30 -42
+ NTP_4_2_8P4
+
+ scripts/calc_tickadj/calc_tickadj.man.in@1.90 +3 -3
+ NTP_4_2_8P4
+
+ scripts/calc_tickadj/calc_tickadj.mdoc.in@1.92 +2 -2
+ NTP_4_2_8P4
+
+ scripts/calc_tickadj/invoke-calc_tickadj.texi@1.95 +1 -1
+ NTP_4_2_8P4
+
+ scripts/invoke-plot_summary.texi@1.112 +2 -2
+ NTP_4_2_8P4
+
+ scripts/invoke-summary.texi@1.112 +2 -2
+ NTP_4_2_8P4
+
+ scripts/ntp-wait/invoke-ntp-wait.texi@1.322 +2 -2
+ NTP_4_2_8P4
+
+ scripts/ntp-wait/ntp-wait-opts@1.58 +2 -2
+ NTP_4_2_8P4
+
+ scripts/ntp-wait/ntp-wait.1ntp-waitman@1.319 +3 -3
+ NTP_4_2_8P4
+
+ scripts/ntp-wait/ntp-wait.1ntp-waitmdoc@1.320 +2 -2
+ NTP_4_2_8P4
+
+ scripts/ntp-wait/ntp-wait.html@1.339 +41 -59
+ NTP_4_2_8P4
+
+ scripts/ntp-wait/ntp-wait.man.in@1.319 +3 -3
+ NTP_4_2_8P4
+
+ scripts/ntp-wait/ntp-wait.mdoc.in@1.320 +2 -2
+ NTP_4_2_8P4
+
+ scripts/ntpsweep/invoke-ntpsweep.texi@1.110 +2 -2
+ NTP_4_2_8P4
+
+ scripts/ntpsweep/ntpsweep-opts@1.60 +2 -2
+ NTP_4_2_8P4
+
+ scripts/ntpsweep/ntpsweep.1ntpsweepman@1.98 +3 -3
+ NTP_4_2_8P4
+
+ scripts/ntpsweep/ntpsweep.1ntpsweepmdoc@1.98 +2 -2
+ NTP_4_2_8P4
+
+ scripts/ntpsweep/ntpsweep.html@1.111 +46 -57
+ NTP_4_2_8P4
+
+ scripts/ntpsweep/ntpsweep.man.in@1.98 +3 -3
+ NTP_4_2_8P4
+
+ scripts/ntpsweep/ntpsweep.mdoc.in@1.99 +2 -2
+ NTP_4_2_8P4
+
+ scripts/ntptrace/invoke-ntptrace.texi@1.111 +2 -2
+ NTP_4_2_8P4
+
+ scripts/ntptrace/ntptrace-opts@1.60 +2 -2
+ NTP_4_2_8P4
+
+ scripts/ntptrace/ntptrace.1ntptraceman@1.98 +3 -3
+ NTP_4_2_8P4
+
+ scripts/ntptrace/ntptrace.1ntptracemdoc@1.99 +2 -2
+ NTP_4_2_8P4
+
+ scripts/ntptrace/ntptrace.html@1.112 +38 -47
+ NTP_4_2_8P4
+
+ scripts/ntptrace/ntptrace.man.in@1.98 +3 -3
+ NTP_4_2_8P4
+
+ scripts/ntptrace/ntptrace.mdoc.in@1.100 +2 -2
+ NTP_4_2_8P4
+
+ scripts/plot_summary-opts@1.60 +2 -2
+ NTP_4_2_8P4
+
+ scripts/plot_summary.1plot_summaryman@1.110 +3 -3
+ NTP_4_2_8P4
+
+ scripts/plot_summary.1plot_summarymdoc@1.110 +2 -2
+ NTP_4_2_8P4
+
+ scripts/plot_summary.html@1.113 +40 -58
+ NTP_4_2_8P4
+
+ scripts/plot_summary.man.in@1.110 +3 -3
+ NTP_4_2_8P4
+
+ scripts/plot_summary.mdoc.in@1.110 +2 -2
+ NTP_4_2_8P4
+
+ scripts/summary-opts@1.60 +2 -2
+ NTP_4_2_8P4
+
+ scripts/summary.1summaryman@1.110 +3 -3
+ NTP_4_2_8P4
+
+ scripts/summary.1summarymdoc@1.110 +2 -2
+ NTP_4_2_8P4
+
+ scripts/summary.html@1.113 +37 -49
+ NTP_4_2_8P4
+
+ scripts/summary.man.in@1.110 +3 -3
+ NTP_4_2_8P4
+
+ scripts/summary.mdoc.in@1.110 +2 -2
+ NTP_4_2_8P4
+
+ scripts/update-leap/invoke-update-leap.texi@1.11 +1 -1
+ NTP_4_2_8P4
+
+ scripts/update-leap/update-leap-opts@1.11 +2 -2
+ NTP_4_2_8P4
+
+ scripts/update-leap/update-leap.1update-leapman@1.11 +3 -3
+ NTP_4_2_8P4
+
+ scripts/update-leap/update-leap.1update-leapmdoc@1.11 +2 -2
+ NTP_4_2_8P4
+
+ scripts/update-leap/update-leap.html@1.11 +48 -72
+ NTP_4_2_8P4
+
+ scripts/update-leap/update-leap.man.in@1.11 +3 -3
+ NTP_4_2_8P4
+
+ scripts/update-leap/update-leap.mdoc.in@1.11 +2 -2
+ NTP_4_2_8P4
+
+ sntp/invoke-sntp.texi@1.499 +2 -2
+ NTP_4_2_8P4
+
+ sntp/sntp-opts.c@1.518 +159 -159
+ NTP_4_2_8P4
+
+ sntp/sntp-opts.h@1.516 +3 -3
+ NTP_4_2_8P4
+
+ sntp/sntp.1sntpman@1.334 +3 -3
+ NTP_4_2_8P4
+
+ sntp/sntp.1sntpmdoc@1.334 +2 -2
+ NTP_4_2_8P4
+
+ sntp/sntp.html@1.514 +111 -135
+ NTP_4_2_8P4
+
+ sntp/sntp.man.in@1.334 +3 -3
+ NTP_4_2_8P4
+
+ sntp/sntp.mdoc.in@1.334 +2 -2
+ NTP_4_2_8P4
+
+ util/invoke-ntp-keygen.texi@1.502 +2 -2
+ NTP_4_2_8P4
+
+ util/ntp-keygen-opts.c@1.520 +173 -173
+ NTP_4_2_8P4
+
+ util/ntp-keygen-opts.h@1.518 +3 -3
+ NTP_4_2_8P4
+
+ util/ntp-keygen.1ntp-keygenman@1.330 +3 -3
+ NTP_4_2_8P4
+
+ util/ntp-keygen.1ntp-keygenmdoc@1.330 +2 -2
+ NTP_4_2_8P4
+
+ util/ntp-keygen.html@1.176 +157 -216
+ NTP_4_2_8P4
+
+ util/ntp-keygen.man.in@1.330 +3 -3
+ NTP_4_2_8P4
+
+ util/ntp-keygen.mdoc.in@1.330 +2 -2
+ NTP_4_2_8P4
+
+ChangeSet@1.3576, 2015-10-21 11:58:26-04:00, stenn@deacon.udel.edu
+ 4.2.8p4
+
+ packageinfo.sh@1.519 +1 -1
+ 4.2.8p4
+
+ChangeSet@1.3575, 2015-10-21 15:35:31+00:00, stenn@psp-deb1.ntp.org
+ Update severity information
+
+ NEWS@1.150 +2 -2
+ Update severity information
+
+ChangeSet@1.3574, 2015-10-20 08:00:43+00:00, stenn@psp-deb1.ntp.org
+ Update CVEs
+
+ NEWS@1.149 +16 -16
+ Update CVEs
+
+ChangeSet@1.3573, 2015-10-17 06:28:49+00:00, stenn@psp-deb1.ntp.org
+ ntp-4.2.8p4-sec-RC2
+
+ NEWS@1.148 +336 -4
+ ntp-4.2.8p4-sec-RC2
+
+ ntpd/invoke-ntp.conf.texi@1.192 +1 -1
+ ntp-4.2.8p4-sec-RC2
+
+ ntpd/invoke-ntp.keys.texi@1.184 +1 -1
+ ntp-4.2.8p4-sec-RC2
+
+ ntpd/invoke-ntpd.texi@1.501 +2 -2
+ ntp-4.2.8p4-sec-RC2
+
+ ntpd/ntp.conf.5man@1.226 +3 -3
+ ntp-4.2.8p4-sec-RC2
+
+ ntpd/ntp.conf.5mdoc@1.226 +2 -2
+ ntp-4.2.8p4-sec-RC2
+
+ ntpd/ntp.conf.html@1.180 +107 -94
+ ntp-4.2.8p4-sec-RC2
+
+ ntpd/ntp.conf.man.in@1.226 +3 -3
+ ntp-4.2.8p4-sec-RC2
+
+ ntpd/ntp.conf.mdoc.in@1.226 +2 -2
+ ntp-4.2.8p4-sec-RC2
+
+ ntpd/ntp.keys.5man@1.218 +2 -2
+ ntp-4.2.8p4-sec-RC2
+
+ ntpd/ntp.keys.5mdoc@1.218 +3 -3
+ ntp-4.2.8p4-sec-RC2
+
+ ntpd/ntp.keys.html@1.180 +33 -21
+ ntp-4.2.8p4-sec-RC2
+
+ ntpd/ntp.keys.man.in@1.218 +2 -2
+ ntp-4.2.8p4-sec-RC2
+
+ ntpd/ntp.keys.mdoc.in@1.218 +3 -3
+ ntp-4.2.8p4-sec-RC2
+
+ ntpd/ntpd-opts.c@1.523 +245 -245
+ ntp-4.2.8p4-sec-RC2
+
+ ntpd/ntpd-opts.h@1.522 +3 -3
+ ntp-4.2.8p4-sec-RC2
+
+ ntpd/ntpd.1ntpdman@1.330 +3 -3
+ ntp-4.2.8p4-sec-RC2
+
+ ntpd/ntpd.1ntpdmdoc@1.330 +2 -2
+ ntp-4.2.8p4-sec-RC2
+
+ ntpd/ntpd.html@1.174 +186 -142
+ ntp-4.2.8p4-sec-RC2
+
+ ntpd/ntpd.man.in@1.330 +3 -3
+ ntp-4.2.8p4-sec-RC2
+
+ ntpd/ntpd.mdoc.in@1.330 +2 -2
+ ntp-4.2.8p4-sec-RC2
+
+ ntpdc/invoke-ntpdc.texi@1.498 +2 -2
+ ntp-4.2.8p4-sec-RC2
+
+ ntpdc/ntpdc-opts.c@1.516 +107 -107
+ ntp-4.2.8p4-sec-RC2
+
+ ntpdc/ntpdc-opts.h@1.515 +3 -3
+ ntp-4.2.8p4-sec-RC2
+
+ ntpdc/ntpdc.1ntpdcman@1.329 +3 -3
+ ntp-4.2.8p4-sec-RC2
+
+ ntpdc/ntpdc.1ntpdcmdoc@1.329 +2 -2
+ ntp-4.2.8p4-sec-RC2
+
+ ntpdc/ntpdc.html@1.342 +95 -75
+ ntp-4.2.8p4-sec-RC2
+
+ ntpdc/ntpdc.man.in@1.329 +3 -3
+ ntp-4.2.8p4-sec-RC2
+
+ ntpdc/ntpdc.mdoc.in@1.329 +2 -2
+ ntp-4.2.8p4-sec-RC2
+
+ ntpq/invoke-ntpq.texi@1.505 +2 -2
+ ntp-4.2.8p4-sec-RC2
+
+ ntpq/ntpq-opts.c@1.522 +106 -106
+ ntp-4.2.8p4-sec-RC2
+
+ ntpq/ntpq-opts.h@1.520 +3 -3
+ ntp-4.2.8p4-sec-RC2
+
+ ntpq/ntpq.1ntpqman@1.333 +3 -3
+ ntp-4.2.8p4-sec-RC2
+
+ ntpq/ntpq.1ntpqmdoc@1.333 +2 -2
+ ntp-4.2.8p4-sec-RC2
+
+ ntpq/ntpq.html@1.171 +155 -132
+ ntp-4.2.8p4-sec-RC2
+
+ ntpq/ntpq.man.in@1.333 +3 -3
+ ntp-4.2.8p4-sec-RC2
+
+ ntpq/ntpq.mdoc.in@1.333 +2 -2
+ ntp-4.2.8p4-sec-RC2
+
+ ntpsnmpd/invoke-ntpsnmpd.texi@1.500 +2 -2
+ ntp-4.2.8p4-sec-RC2
+
+ ntpsnmpd/ntpsnmpd-opts.c@1.518 +68 -68
+ ntp-4.2.8p4-sec-RC2
+
+ ntpsnmpd/ntpsnmpd-opts.h@1.517 +3 -3
+ ntp-4.2.8p4-sec-RC2
+
+ ntpsnmpd/ntpsnmpd.1ntpsnmpdman@1.329 +3 -3
+ ntp-4.2.8p4-sec-RC2
+
+ ntpsnmpd/ntpsnmpd.1ntpsnmpdmdoc@1.329 +2 -2
+ ntp-4.2.8p4-sec-RC2
+
+ ntpsnmpd/ntpsnmpd.html@1.169 +14 -10
+ ntp-4.2.8p4-sec-RC2
+
+ ntpsnmpd/ntpsnmpd.man.in@1.329 +3 -3
+ ntp-4.2.8p4-sec-RC2
+
+ ntpsnmpd/ntpsnmpd.mdoc.in@1.329 +2 -2
+ ntp-4.2.8p4-sec-RC2
+
+ packageinfo.sh@1.518 +2 -2
+ ntp-4.2.8p4-sec-RC2
+
+ scripts/calc_tickadj/calc_tickadj.1calc_tickadjman@1.90 +3 -3
+ ntp-4.2.8p4-sec-RC2
+
+ scripts/calc_tickadj/calc_tickadj.1calc_tickadjmdoc@1.91 +2 -2
+ ntp-4.2.8p4-sec-RC2
+
+ scripts/calc_tickadj/calc_tickadj.html@1.92 +42 -30
+ ntp-4.2.8p4-sec-RC2
+
+ scripts/calc_tickadj/calc_tickadj.man.in@1.89 +3 -3
+ ntp-4.2.8p4-sec-RC2
+
+ scripts/calc_tickadj/calc_tickadj.mdoc.in@1.91 +2 -2
+ ntp-4.2.8p4-sec-RC2
+
+ scripts/calc_tickadj/invoke-calc_tickadj.texi@1.94 +1 -1
+ ntp-4.2.8p4-sec-RC2
+
+ scripts/invoke-plot_summary.texi@1.111 +2 -2
+ ntp-4.2.8p4-sec-RC2
+
+ scripts/invoke-summary.texi@1.111 +2 -2
+ ntp-4.2.8p4-sec-RC2
+
+ scripts/ntp-wait/invoke-ntp-wait.texi@1.321 +2 -2
+ ntp-4.2.8p4-sec-RC2
+
+ scripts/ntp-wait/ntp-wait-opts@1.57 +2 -2
+ ntp-4.2.8p4-sec-RC2
+
+ scripts/ntp-wait/ntp-wait.1ntp-waitman@1.318 +3 -3
+ ntp-4.2.8p4-sec-RC2
+
+ scripts/ntp-wait/ntp-wait.1ntp-waitmdoc@1.319 +2 -2
+ ntp-4.2.8p4-sec-RC2
+
+ scripts/ntp-wait/ntp-wait.html@1.338 +59 -41
+ ntp-4.2.8p4-sec-RC2
+
+ scripts/ntp-wait/ntp-wait.man.in@1.318 +3 -3
+ ntp-4.2.8p4-sec-RC2
+
+ scripts/ntp-wait/ntp-wait.mdoc.in@1.319 +2 -2
+ ntp-4.2.8p4-sec-RC2
+
+ scripts/ntpsweep/invoke-ntpsweep.texi@1.109 +2 -2
+ ntp-4.2.8p4-sec-RC2
+
+ scripts/ntpsweep/ntpsweep-opts@1.59 +2 -2
+ ntp-4.2.8p4-sec-RC2
+
+ scripts/ntpsweep/ntpsweep.1ntpsweepman@1.97 +3 -3
+ ntp-4.2.8p4-sec-RC2
+
+ scripts/ntpsweep/ntpsweep.1ntpsweepmdoc@1.97 +2 -2
+ ntp-4.2.8p4-sec-RC2
+
+ scripts/ntpsweep/ntpsweep.html@1.110 +57 -46
+ ntp-4.2.8p4-sec-RC2
+
+ scripts/ntpsweep/ntpsweep.man.in@1.97 +3 -3
+ ntp-4.2.8p4-sec-RC2
+
+ scripts/ntpsweep/ntpsweep.mdoc.in@1.98 +2 -2
+ ntp-4.2.8p4-sec-RC2
+
+ scripts/ntptrace/invoke-ntptrace.texi@1.110 +2 -2
+ ntp-4.2.8p4-sec-RC2
+
+ scripts/ntptrace/ntptrace-opts@1.59 +2 -2
+ ntp-4.2.8p4-sec-RC2
+
+ scripts/ntptrace/ntptrace.1ntptraceman@1.97 +3 -3
+ ntp-4.2.8p4-sec-RC2
+
+ scripts/ntptrace/ntptrace.1ntptracemdoc@1.98 +2 -2
+ ntp-4.2.8p4-sec-RC2
+
+ scripts/ntptrace/ntptrace.html@1.111 +47 -38
+ ntp-4.2.8p4-sec-RC2
+
+ scripts/ntptrace/ntptrace.man.in@1.97 +3 -3
+ ntp-4.2.8p4-sec-RC2
+
+ scripts/ntptrace/ntptrace.mdoc.in@1.99 +2 -2
+ ntp-4.2.8p4-sec-RC2
+
+ scripts/plot_summary-opts@1.59 +2 -2
+ ntp-4.2.8p4-sec-RC2
+
+ scripts/plot_summary.1plot_summaryman@1.109 +3 -3
+ ntp-4.2.8p4-sec-RC2
+
+ scripts/plot_summary.1plot_summarymdoc@1.109 +2 -2
+ ntp-4.2.8p4-sec-RC2
+
+ scripts/plot_summary.html@1.112 +58 -40
+ ntp-4.2.8p4-sec-RC2
+
+ scripts/plot_summary.man.in@1.109 +3 -3
+ ntp-4.2.8p4-sec-RC2
+
+ scripts/plot_summary.mdoc.in@1.109 +2 -2
+ ntp-4.2.8p4-sec-RC2
+
+ scripts/summary-opts@1.59 +2 -2
+ ntp-4.2.8p4-sec-RC2
+
+ scripts/summary.1summaryman@1.109 +3 -3
+ ntp-4.2.8p4-sec-RC2
+
+ scripts/summary.1summarymdoc@1.109 +2 -2
+ ntp-4.2.8p4-sec-RC2
+
+ scripts/summary.html@1.112 +49 -37
+ ntp-4.2.8p4-sec-RC2
+
+ scripts/summary.man.in@1.109 +3 -3
+ ntp-4.2.8p4-sec-RC2
+
+ scripts/summary.mdoc.in@1.109 +2 -2
+ ntp-4.2.8p4-sec-RC2
+
+ scripts/update-leap/invoke-update-leap.texi@1.10 +1 -1
+ ntp-4.2.8p4-sec-RC2
+
+ scripts/update-leap/update-leap-opts@1.10 +2 -2
+ ntp-4.2.8p4-sec-RC2
+
+ scripts/update-leap/update-leap.1update-leapman@1.10 +3 -3
+ ntp-4.2.8p4-sec-RC2
+
+ scripts/update-leap/update-leap.1update-leapmdoc@1.10 +2 -2
+ ntp-4.2.8p4-sec-RC2
+
+ scripts/update-leap/update-leap.html@1.10 +72 -48
+ ntp-4.2.8p4-sec-RC2
+
+ scripts/update-leap/update-leap.man.in@1.10 +3 -3
+ ntp-4.2.8p4-sec-RC2
+
+ scripts/update-leap/update-leap.mdoc.in@1.10 +2 -2
+ ntp-4.2.8p4-sec-RC2
+
+ sntp/invoke-sntp.texi@1.498 +2 -2
+ ntp-4.2.8p4-sec-RC2
+
+ sntp/sntp-opts.c@1.517 +159 -159
+ ntp-4.2.8p4-sec-RC2
+
+ sntp/sntp-opts.h@1.515 +3 -3
+ ntp-4.2.8p4-sec-RC2
+
+ sntp/sntp.1sntpman@1.333 +3 -3
+ ntp-4.2.8p4-sec-RC2
+
+ sntp/sntp.1sntpmdoc@1.333 +2 -2
+ ntp-4.2.8p4-sec-RC2
+
+ sntp/sntp.html@1.513 +135 -111
+ ntp-4.2.8p4-sec-RC2
+
+ sntp/sntp.man.in@1.333 +3 -3
+ ntp-4.2.8p4-sec-RC2
+
+ sntp/sntp.mdoc.in@1.333 +2 -2
+ ntp-4.2.8p4-sec-RC2
+
+ util/invoke-ntp-keygen.texi@1.501 +2 -2
+ ntp-4.2.8p4-sec-RC2
+
+ util/ntp-keygen-opts.c@1.519 +173 -173
+ ntp-4.2.8p4-sec-RC2
+
+ util/ntp-keygen-opts.h@1.517 +3 -3
+ ntp-4.2.8p4-sec-RC2
+
+ util/ntp-keygen.1ntp-keygenman@1.329 +3 -3
+ ntp-4.2.8p4-sec-RC2
+
+ util/ntp-keygen.1ntp-keygenmdoc@1.329 +2 -2
+ ntp-4.2.8p4-sec-RC2
+
+ util/ntp-keygen.html@1.175 +216 -157
+ ntp-4.2.8p4-sec-RC2
+
+ util/ntp-keygen.man.in@1.329 +3 -3
+ ntp-4.2.8p4-sec-RC2
+
+ util/ntp-keygen.mdoc.in@1.329 +2 -2
+ ntp-4.2.8p4-sec-RC2
+
+ChangeSet@1.3572, 2015-10-17 03:10:01+00:00, stenn@psp-deb1.ntp.org
+ cleanup
+
+ ChangeLog@1.1756 +1 -5
+ cleanup
+
+ChangeSet@1.3571, 2015-10-17 01:39:22+00:00, stenn@psp-deb1.ntp.org
+ [Sec 2941] NAK to the Future: Symmetric association authentication bypass via crypto-NAK
+
+ ChangeLog@1.1755 +4 -1
+ [Sec 2941] NAK to the Future: Symmetric association authentication bypass via crypto-NAK
+
+ChangeSet@1.3558.3.3, 2015-10-11 08:10:20+02:00, jnperlin@hydra.localnet
+ [Bug 2941] NAK to the Future: Symmetric association authentication bypass via crypto-NAK
+
+ ChangeLog@1.1743.3.3 +3 -0
+ [Bug 2941] NAK to the Future: Symmetric association authentication bypass via crypto-NAK
+
+ ntpd/ntp_proto.c@1.364.1.1 +18 -0
+ [Bug 2941] NAK to the Future: Symmetric association authentication bypass via crypto-NAK
+
+ChangeSet@1.3558.3.2, 2015-10-06 06:25:48-04:00, stenn@deacon.udel.edu
+ NTP_4_2_8P4_RC1
+ TAG: NTP_4_2_8P4_RC1
+
+ ChangeLog@1.1743.3.2 +1 -0
+ NTP_4_2_8P4_RC1
+
+ ntpd/invoke-ntp.conf.texi@1.191 +1 -1
+ NTP_4_2_8P4_RC1
+
+ ntpd/invoke-ntp.keys.texi@1.183 +1 -1
+ NTP_4_2_8P4_RC1
+
+ ntpd/invoke-ntpd.texi@1.500 +2 -2
+ NTP_4_2_8P4_RC1
+
+ ntpd/ntp.conf.5man@1.225 +3 -3
+ NTP_4_2_8P4_RC1
+
+ ntpd/ntp.conf.5mdoc@1.225 +2 -2
+ NTP_4_2_8P4_RC1
+
+ ntpd/ntp.conf.html@1.179 +1196 -1524
+ NTP_4_2_8P4_RC1
+
+ ntpd/ntp.conf.man.in@1.225 +3 -3
+ NTP_4_2_8P4_RC1
+
+ ntpd/ntp.conf.mdoc.in@1.225 +2 -2
+ NTP_4_2_8P4_RC1
+
+ ntpd/ntp.keys.5man@1.217 +2 -2
+ NTP_4_2_8P4_RC1
+
+ ntpd/ntp.keys.5mdoc@1.217 +2 -2
+ NTP_4_2_8P4_RC1
+
+ ntpd/ntp.keys.html@1.179 +1 -1
+ NTP_4_2_8P4_RC1
+
+ ntpd/ntp.keys.man.in@1.217 +2 -2
+ NTP_4_2_8P4_RC1
+
+ ntpd/ntp.keys.mdoc.in@1.217 +2 -2
+ NTP_4_2_8P4_RC1
+
+ ntpd/ntpd-opts.c@1.522 +245 -245
+ NTP_4_2_8P4_RC1
+
+ ntpd/ntpd-opts.h@1.521 +3 -3
+ NTP_4_2_8P4_RC1
+
+ ntpd/ntpd.1ntpdman@1.329 +8 -4
+ NTP_4_2_8P4_RC1
+
+ ntpd/ntpd.1ntpdmdoc@1.329 +7 -3
+ NTP_4_2_8P4_RC1
+
+ ntpd/ntpd.html@1.173 +2 -2
+ NTP_4_2_8P4_RC1
+
+ ntpd/ntpd.man.in@1.329 +8 -4
+ NTP_4_2_8P4_RC1
+
+ ntpd/ntpd.mdoc.in@1.329 +7 -3
+ NTP_4_2_8P4_RC1
+
+ ntpdc/invoke-ntpdc.texi@1.497 +2 -2
+ NTP_4_2_8P4_RC1
+
+ ntpdc/ntpdc-opts.c@1.515 +107 -107
+ NTP_4_2_8P4_RC1
+
+ ntpdc/ntpdc-opts.h@1.514 +3 -3
+ NTP_4_2_8P4_RC1
+
+ ntpdc/ntpdc.1ntpdcman@1.328 +3 -3
+ NTP_4_2_8P4_RC1
+
+ ntpdc/ntpdc.1ntpdcmdoc@1.328 +2 -2
+ NTP_4_2_8P4_RC1
+
+ ntpdc/ntpdc.html@1.341 +2 -2
+ NTP_4_2_8P4_RC1
+
+ ntpdc/ntpdc.man.in@1.328 +3 -3
+ NTP_4_2_8P4_RC1
+
+ ntpdc/ntpdc.mdoc.in@1.328 +2 -2
+ NTP_4_2_8P4_RC1
+
+ ntpq/invoke-ntpq.texi@1.504 +2 -2
+ NTP_4_2_8P4_RC1
+
+ ntpq/ntpq-opts.c@1.521 +106 -106
+ NTP_4_2_8P4_RC1
+
+ ntpq/ntpq-opts.h@1.519 +3 -3
+ NTP_4_2_8P4_RC1
+
+ ntpq/ntpq.1ntpqman@1.332 +3 -3
+ NTP_4_2_8P4_RC1
+
+ ntpq/ntpq.1ntpqmdoc@1.332 +2 -2
+ NTP_4_2_8P4_RC1
+
+ ntpq/ntpq.html@1.170 +2 -2
+ NTP_4_2_8P4_RC1
+
+ ntpq/ntpq.man.in@1.332 +3 -3
+ NTP_4_2_8P4_RC1
+
+ ntpq/ntpq.mdoc.in@1.332 +2 -2
+ NTP_4_2_8P4_RC1
+
+ ntpsnmpd/invoke-ntpsnmpd.texi@1.499 +2 -2
+ NTP_4_2_8P4_RC1
+
+ ntpsnmpd/ntpsnmpd-opts.c@1.517 +68 -68
+ NTP_4_2_8P4_RC1
+
+ ntpsnmpd/ntpsnmpd-opts.h@1.516 +3 -3
+ NTP_4_2_8P4_RC1
+
+ ntpsnmpd/ntpsnmpd.1ntpsnmpdman@1.328 +3 -3
+ NTP_4_2_8P4_RC1
+
+ ntpsnmpd/ntpsnmpd.1ntpsnmpdmdoc@1.328 +2 -2
+ NTP_4_2_8P4_RC1
+
+ ntpsnmpd/ntpsnmpd.html@1.168 +1 -1
+ NTP_4_2_8P4_RC1
+
+ ntpsnmpd/ntpsnmpd.man.in@1.328 +3 -3
+ NTP_4_2_8P4_RC1
+
+ ntpsnmpd/ntpsnmpd.mdoc.in@1.328 +2 -2
+ NTP_4_2_8P4_RC1
+
+ packageinfo.sh@1.517 +2 -2
+ NTP_4_2_8P4_RC1
+
+ scripts/calc_tickadj/calc_tickadj.1calc_tickadjman@1.89 +3 -3
+ NTP_4_2_8P4_RC1
+
+ scripts/calc_tickadj/calc_tickadj.1calc_tickadjmdoc@1.90 +2 -2
+ NTP_4_2_8P4_RC1
+
+ scripts/calc_tickadj/calc_tickadj.html@1.91 +1 -1
+ NTP_4_2_8P4_RC1
+
+ scripts/calc_tickadj/calc_tickadj.man.in@1.88 +3 -3
+ NTP_4_2_8P4_RC1
+
+ scripts/calc_tickadj/calc_tickadj.mdoc.in@1.90 +2 -2
+ NTP_4_2_8P4_RC1
+
+ scripts/calc_tickadj/invoke-calc_tickadj.texi@1.93 +1 -1
+ NTP_4_2_8P4_RC1
+
+ scripts/invoke-plot_summary.texi@1.110 +2 -2
+ NTP_4_2_8P4_RC1
+
+ scripts/invoke-summary.texi@1.110 +2 -2
+ NTP_4_2_8P4_RC1
+
+ scripts/ntp-wait/invoke-ntp-wait.texi@1.320 +2 -2
+ NTP_4_2_8P4_RC1
+
+ scripts/ntp-wait/ntp-wait-opts@1.56 +2 -2
+ NTP_4_2_8P4_RC1
+
+ scripts/ntp-wait/ntp-wait.1ntp-waitman@1.317 +3 -3
+ NTP_4_2_8P4_RC1
+
+ scripts/ntp-wait/ntp-wait.1ntp-waitmdoc@1.318 +2 -2
+ NTP_4_2_8P4_RC1
+
+ scripts/ntp-wait/ntp-wait.html@1.337 +2 -2
+ NTP_4_2_8P4_RC1
+
+ scripts/ntp-wait/ntp-wait.man.in@1.317 +3 -3
+ NTP_4_2_8P4_RC1
+
+ scripts/ntp-wait/ntp-wait.mdoc.in@1.318 +2 -2
+ NTP_4_2_8P4_RC1
+
+ scripts/ntpsweep/invoke-ntpsweep.texi@1.108 +2 -2
+ NTP_4_2_8P4_RC1
+
+ scripts/ntpsweep/ntpsweep-opts@1.58 +2 -2
+ NTP_4_2_8P4_RC1
+
+ scripts/ntpsweep/ntpsweep.1ntpsweepman@1.96 +3 -3
+ NTP_4_2_8P4_RC1
+
+ scripts/ntpsweep/ntpsweep.1ntpsweepmdoc@1.96 +2 -2
+ NTP_4_2_8P4_RC1
+
+ scripts/ntpsweep/ntpsweep.html@1.109 +2 -2
+ NTP_4_2_8P4_RC1
+
+ scripts/ntpsweep/ntpsweep.man.in@1.96 +3 -3
+ NTP_4_2_8P4_RC1
+
+ scripts/ntpsweep/ntpsweep.mdoc.in@1.97 +2 -2
+ NTP_4_2_8P4_RC1
+
+ scripts/ntptrace/invoke-ntptrace.texi@1.109 +2 -2
+ NTP_4_2_8P4_RC1
+
+ scripts/ntptrace/ntptrace-opts@1.58 +2 -2
+ NTP_4_2_8P4_RC1
+
+ scripts/ntptrace/ntptrace.1ntptraceman@1.96 +3 -3
+ NTP_4_2_8P4_RC1
+
+ scripts/ntptrace/ntptrace.1ntptracemdoc@1.97 +2 -2
+ NTP_4_2_8P4_RC1
+
+ scripts/ntptrace/ntptrace.html@1.110 +2 -2
+ NTP_4_2_8P4_RC1
+
+ scripts/ntptrace/ntptrace.man.in@1.96 +3 -3
+ NTP_4_2_8P4_RC1
+
+ scripts/ntptrace/ntptrace.mdoc.in@1.98 +2 -2
+ NTP_4_2_8P4_RC1
+
+ scripts/plot_summary-opts@1.58 +2 -2
+ NTP_4_2_8P4_RC1
+
+ scripts/plot_summary.1plot_summaryman@1.108 +3 -3
+ NTP_4_2_8P4_RC1
+
+ scripts/plot_summary.1plot_summarymdoc@1.108 +2 -2
+ NTP_4_2_8P4_RC1
+
+ scripts/plot_summary.html@1.111 +2 -2
+ NTP_4_2_8P4_RC1
+
+ scripts/plot_summary.man.in@1.108 +3 -3
+ NTP_4_2_8P4_RC1
+
+ scripts/plot_summary.mdoc.in@1.108 +2 -2
+ NTP_4_2_8P4_RC1
+
+ scripts/summary-opts@1.58 +2 -2
+ NTP_4_2_8P4_RC1
+
+ scripts/summary.1summaryman@1.108 +3 -3
+ NTP_4_2_8P4_RC1
+
+ scripts/summary.1summarymdoc@1.108 +2 -2
+ NTP_4_2_8P4_RC1
+
+ scripts/summary.html@1.111 +2 -2
+ NTP_4_2_8P4_RC1
+
+ scripts/summary.man.in@1.108 +3 -3
+ NTP_4_2_8P4_RC1
+
+ scripts/summary.mdoc.in@1.108 +2 -2
+ NTP_4_2_8P4_RC1
+
+ scripts/update-leap/invoke-update-leap.texi@1.9 +1 -1
+ NTP_4_2_8P4_RC1
+
+ scripts/update-leap/update-leap-opts@1.9 +2 -2
+ NTP_4_2_8P4_RC1
+
+ scripts/update-leap/update-leap.1update-leapman@1.9 +3 -3
+ NTP_4_2_8P4_RC1
+
+ scripts/update-leap/update-leap.1update-leapmdoc@1.9 +2 -2
+ NTP_4_2_8P4_RC1
+
+ scripts/update-leap/update-leap.html@1.9 +1 -1
+ NTP_4_2_8P4_RC1
+
+ scripts/update-leap/update-leap.man.in@1.9 +3 -3
+ NTP_4_2_8P4_RC1
+
+ scripts/update-leap/update-leap.mdoc.in@1.9 +2 -2
+ NTP_4_2_8P4_RC1
+
+ sntp/invoke-sntp.texi@1.497 +2 -2
+ NTP_4_2_8P4_RC1
+
+ sntp/sntp-opts.c@1.516 +159 -159
+ NTP_4_2_8P4_RC1
+
+ sntp/sntp-opts.h@1.514 +3 -3
+ NTP_4_2_8P4_RC1
+
+ sntp/sntp.1sntpman@1.332 +3 -3
+ NTP_4_2_8P4_RC1
+
+ sntp/sntp.1sntpmdoc@1.332 +2 -2
+ NTP_4_2_8P4_RC1
+
+ sntp/sntp.html@1.512 +2 -2
+ NTP_4_2_8P4_RC1
+
+ sntp/sntp.man.in@1.332 +3 -3
+ NTP_4_2_8P4_RC1
+
+ sntp/sntp.mdoc.in@1.332 +2 -2
+ NTP_4_2_8P4_RC1
+
+ util/invoke-ntp-keygen.texi@1.500 +2 -2
+ NTP_4_2_8P4_RC1
+
+ util/ntp-keygen-opts.c@1.518 +173 -173
+ NTP_4_2_8P4_RC1
+
+ util/ntp-keygen-opts.h@1.516 +3 -3
+ NTP_4_2_8P4_RC1
+
+ util/ntp-keygen.1ntp-keygenman@1.328 +3 -3
+ NTP_4_2_8P4_RC1
+
+ util/ntp-keygen.1ntp-keygenmdoc@1.328 +2 -2
+ NTP_4_2_8P4_RC1
+
+ util/ntp-keygen.html@1.174 +2 -2
+ NTP_4_2_8P4_RC1
+
+ util/ntp-keygen.man.in@1.328 +3 -3
+ NTP_4_2_8P4_RC1
+
+ util/ntp-keygen.mdoc.in@1.328 +2 -2
+ NTP_4_2_8P4_RC1
+
+ChangeSet@1.3558.3.1, 2015-10-06 05:40:23-04:00, stenn@deacon.udel.edu
+ Prepare for 4.2.8p4-RC1
+
+ ChangeLog@1.1743.3.1 +1 -0
+ Prepare for 4.2.8p4-RC1
+
+ NEWS@1.147 +143 -4
+ Prepare for 4.2.8p4-RC1
+
+ packageinfo.sh@1.516 +1 -1
+ Prepare for 4.2.8p4-RC1
+
+ChangeSet@1.3568, 2015-10-06 08:51:27+00:00, stenn@psp-deb1.ntp.org
+ [Sec 2922] decodenetnum() will ASSERT botch instead of returning FAIL on some bogus values. Harlan Stenn.
+
+ ChangeLog@1.1752 +2 -0
+ [Sec 2922] decodenetnum() will ASSERT botch instead of returning FAIL on some [Sec 2922] decodenetnum() will ASSERT botch instead of returning FAIL on some bogus values. Harlan Stenn.
+
+ libntp/decodenetnum.c@1.18 +4 -1
+ [Sec 2922] decodenetnum() will ASSERT botch instead of returning FAIL on some [Sec 2922] decodenetnum() will ASSERT botch instead of returning FAIL on some bogus values. Harlan Stenn.
+
+ChangeSet@1.3567, 2015-10-06 08:02:23+00:00, stenn@psp-deb1.ntp.org
+ Log incoming packets that fail TEST2. Harlan Stenn.
+
+ ChangeLog@1.1751 +1 -1
+ Log incoming packets that fail TEST2. Harlan Stenn.
+
+ ntpd/ntp_proto.c@1.367 +7 -1
+ Log incoming packets that fail TEST2. Harlan Stenn.
+
+ChangeSet@1.3566, 2015-10-06 07:47:24+00:00, stenn@psp-deb1.ntp.org
+ cleanup
+
+ ChangeLog@1.1750 +2 -1
+ cleanup
+
+ ntpd/ntp_proto.c@1.366 +113 -95
+ cleanup
+
+ChangeSet@1.3564, 2015-10-06 03:56:29+00:00, stenn@psp-deb1.ntp.org
+ [Sec 2921] TALOS-CAN-0065: password length memory corruption. JPerlinger.
+
+ ChangeLog@1.1748 +1 -0
+ [Sec 2921] TALOS-CAN-0065: password length memory corruption. JPerlinger.
+ Fixed as part of [Sec 2916] TALOS-CAN-0054: memory corruption in password store. JPerlinger.
+
+ChangeSet@1.3562, 2015-10-05 21:11:21+00:00, stenn@psp-deb1.ntp.org
+ typo
+
+ libntp/authreadkeys.c@1.22 +1 -1
+ typo
+
+ChangeSet@1.3552.9.2, 2015-10-05 11:11:54+00:00, stenn@psp-deb1.ntp.org
+ 2909 is a security bug
+
+ ChangeLog@1.1739.5.2 +1 -1
+ 2909 is a security bug
+
+ChangeSet@1.3558.2.2, 2015-10-05 11:03:39+00:00, stenn@psp-deb1.ntp.org
+ 2902 is a security bug
+
+ ChangeLog@1.1743.2.2 +2 -2
+ 2902 is a security bug
+
+ChangeSet@1.3558.1.4, 2015-10-05 10:49:30+00:00, stenn@psp-deb1.ntp.org
+ Update the ChangeLog for 2899
+
+ ChangeLog@1.1743.1.4 +1 -1
+ Update the ChangeLog for 2899
+
+ChangeSet@1.3552.4.2, 2015-10-05 10:32:02+00:00, stenn@psp-deb1.ntp.org
+ typos
+
+ ntpd/ntp_crypto.c@1.183 +4 -4
+ typos
+
+ChangeSet@1.3558.1.2, 2015-10-05 06:26:46+00:00, stenn@psp-deb1.ntp.org
+ [Bug 2912] no munlockall() under Windows. David Taylor, Harlan Stenn.
+
+ ChangeLog@1.1743.1.2 +1 -0
+ [Bug 2912] no munlockall() under Windows. David Taylor, Harlan Stenn.
+
+ ntpd/ntp_config.c@1.335 +4 -0
+ [Bug 2912] no munlockall() under Windows. David Taylor, Harlan Stenn.
+
+ChangeSet@1.3561, 2015-10-03 09:08:20+02:00, jnperlin@hydra.localnet
+ [TALOS-CAN-0055] Infinite loop if extended logging enabled and the logfile and keyfile are the same
+
+ ChangeLog@1.1746 +2 -0
+ [TALOS-CAN-0055] Infinite loop if extended logging enabled and the logfile and keyfile are the same
+
+ include/ntp_stdlib.h@1.79 +1 -0
+ [TALOS-CAN-0055] Infinite loop if extended logging enabled and the logfile and keyfile are the same
+ - add 'mvsyslog()' function to make wrapping calls to syslog easier
+
+ include/ntp_syslog.h@1.9 +1 -0
+ [TALOS-CAN-0055] Infinite loop if extended logging enabled and the logfile and keyfile are the same
+ - add 'mvsyslog()' function to make wrapping calls to syslog easier
+
+ libntp/authreadkeys.c@1.21 +71 -18
+ [TALOS-CAN-0055] Infinite loop if extended logging enabled and the logfile and keyfile are the same
+ - Avoid endless loop by logging only the first 5 errors explicitely, counting the next 10 silently, and aborting
+ the parsing of the file with proper diagnostic when more than 15 errors where encountered.
+
+ libntp/msyslog.c@1.53 +12 -0
+ [TALOS-CAN-0055] Infinite loop if extended logging enabled and the logfile and keyfile are the same
+ - add 'mvsyslog()' function to make wrapping calls to syslog easier
+
+ChangeSet@1.3558.1.1, 2015-10-01 03:27:35-04:00, stenn@deacon.udel.edu
+ build system tweaks. Harlan Stenn.
+
+ ChangeLog@1.1743.1.1 +2 -1
+ build system tweaks. Harlan Stenn.
+
+ Makefile.am@1.134 +1 -1
+ build system tweaks. Harlan Stenn.
+
+ sntp/m4/ntp_problemtests.m4@1.3 +14 -14
+ build system tweaks. Harlan Stenn.
+
+ChangeSet@1.3560, 2015-09-30 22:47:45+02:00, jnperlin@hydra.localnet
+ [TALOS-CAN-0062] prevent directory traversal for VMS, too, when using 'saveconfig' command.
+
+ ChangeLog@1.1745 +2 -0
+ [TALOS-CAN-0062] prevent directory traversal for VMS, too, when using 'saveconfig' command.
+
+ ntpd/ntp_control.c@1.204 +25 -9
+ [TALOS-CAN-0062] prevent directory traversal for VMS, too, when using 'saveconfig' command.
+
+ChangeSet@1.3559, 2015-09-30 21:55:09+02:00, jnperlin@hydra.localnet
+ [TALOS-CAN-0064] signed/unsiged clash could lead to buffer overun
+
+ BitKeeper/etc/ignore@1.89 +4 -0
+ keep cscope files away from repo
+
+ ChangeLog@1.1744 +2 -0
+ [TALOS-CAN-0064] signed/unsiged clash could lead to buffer overun
+
+ ntpd/ntp_io.c@1.408 +9 -6
+ [TALOS-CAN-0064] signed/unsiged clash could lead to buffer overun
+
+ChangeSet@1.3552.11.4, 2015-09-30 20:15:13+02:00, jnperlin@hydra.localnet
+ [TALOS-CAN-0063] avoid buffer overrun in ntpq
+
+ ChangeLog@1.1739.7.3 +1 -0
+ [TALOS-CAN-0063] avoid buffer overrun in ntpq
+
+ ntpq/ntpq.c@1.162 +6 -1
+ [TALOS-CAN-0063] avoid buffer overrun in ntpq
+
+ChangeSet@1.3552.11.3, 2015-09-30 18:44:18+02:00, jnperlin@hydra.localnet
+ [TALOS-CAN-0054] memory corruption
+ - make sure there's *always* a new buffer for storing the key again
+
+ libntp/authkeys.c@1.27 +9 -5
+ [TALOS-CAN-0054] memory corruption
+ - make sure there's *always* a new buffer for storing the key again
+
+ChangeSet@1.3552.1.32, 2015-09-30 07:40:52+00:00, stenn@psp-deb1.ntp.org
+ formatting cleanup
+
+ ChangeLog@1.1739.1.18 +1 -1
+ formatting cleanup
+
+ChangeSet@1.3552.12.2, 2015-09-30 06:45:59+00:00, stenn@psp-deb1.ntp.org
+ Implement --disable-problem-tests (off by default). Harlan Stenn.
+
+ ChangeLog@1.1739.8.1 +1 -0
+ Implement --disable-problem-tests (off by default). Harlan Stenn.
+
+ sntp/m4/ntp_problemtests.m4@1.2 +20 -6
+ Implement --disable-problem-tests (off by default). Harlan Stenn.
+
+ChangeSet@1.3552.12.1, 2015-09-30 06:11:05+00:00, stenn@psp-deb1.ntp.org
+ whitespace cleanup
+
+ ntpd/ntp_io.c@1.407 +13 -13
+ whitespace cleanup
+
+ChangeSet@1.3552.11.2, 2015-09-29 23:13:13+02:00, jnperlin@hydra.localnet
+ [TALOS-CAN-0054] memory corruption in password store
+
+ ChangeLog@1.1739.7.2 +1 -0
+ [TALOS-CAN-0054] memory corruption in password store
+
+ libntp/authkeys.c@1.26 +4 -0
+ [TALOS-CAN-0054] memory corruption in password store
+ - make sure deallocated pointers are NULLed and new storage is allocated on demand
+
+ChangeSet@1.3552.11.1, 2015-09-29 22:00:10+02:00, jnperlin@hydra.localnet
+ [TALOS-CAN-0052] crash by loop counter underrun.
+
+ ChangeLog@1.1739.7.1 +1 -0
+ [TALOS-CAN-0052] crash by loop counter underrun.
+
+ ntpd/ntp_request.c@1.114 +7 -3
+ [TALOS-CAN-0052] crash by loop counter underrun.
+ - add missing reload of loop counter
+
+ChangeSet@1.3552.10.2, 2015-09-29 20:34:05+02:00, jnperlin@hydra.localnet
+ [Bug 2902] configuration directives "pidfile" and "driftfile" should be local-only.
+
+ ChangeLog@1.1739.6.2 +2 -0
+ [Bug 2902] configuration directives "pidfile" and "driftfile" should be local-only.
+
+ ntpd/ntp_parser.c@1.99 +235 -226
+ [Bug 2902] configuration directives "pidfile" and "driftfile" should be local-only.
+ - update bison-generated files
+
+ ntpd/ntp_parser.h@1.64 +3 -5
+ [Bug 2902] configuration directives "pidfile" and "driftfile" should be local-only.
+ - update bison-generated files
+
+ ntpd/ntp_parser.y@1.89 +26 -15
+ [Bug 2902] configuration directives "pidfile" and "driftfile" should be local-only.
+ - applied patch from Miroslav Lichvar, plus minor cosmetic changes
+
+ChangeSet@1.3552.10.1, 2015-09-29 06:10:38-04:00, stenn@pogo.udel.edu
+ Disable certain test programs on certain platforms. Harlan Stenn.
+
+ ChangeLog@1.1739.6.1 +1 -0
+ Disable certain test programs on certain platforms. Harlan Stenn.
+
+ configure.ac@1.602 +2 -0
+ Disable certain test programs on certain platforms. Harlan Stenn.
+
+ sntp/m4/ntp_problemtests.m4@1.1 +42 -0
+ BitKeeper file /pogo/users/stenn/ntp-stable/sntp/m4/ntp_problemtests.m4
+
+ sntp/m4/ntp_problemtests.m4@1.0 +0 -0
+
+ tests/ntpd/Makefile.am@1.28 +14 -3
+ Disable certain test programs on certain platforms. Harlan Stenn.
+
+ChangeSet@1.3552.9.1, 2015-09-28 18:22:06+02:00, jnperlin@hydra.localnet
+ [Bug 2909] - Slow memory leak in CRYPTO_ASSOC
+ - added missing call to 'free()' in ntp_crypto.c.
+
+ ChangeLog@1.1739.5.1 +1 -0
+ [Bug 2909] - Slow memory leak in CRYPTO_ASSOC
+ - added missing call to 'free()' in ntp_crypto.c.
+
+ ntpd/ntp_crypto.c@1.181.1.1 +1 -0
+ [Bug 2909] - Slow memory leak in CRYPTO_ASSOC
+ - added missing call to 'free()' in ntp_crypto.c.
+
+ChangeSet@1.3556, 2015-09-27 12:52:27+02:00, jnperlin@hydra.localnet
+ [Bug2888] Fixed compiler warnings, converted C++ comments to C comments
+
+ tests/libntp/buftvtots.c@1.5 +7 -7
+ [Bug2888] Fixed compiler warnings, converted C++ comments to C comments
+
+ tests/libntp/calendar.c@1.9 +45 -35
+ [Bug2888] Fixed compiler warnings, converted C++ comments to C comments
+
+ tests/libntp/clocktime.c@1.8 +16 -16
+ [Bug2888] Fixed compiler warnings, converted C++ comments to C comments
+
+ tests/libntp/hextolfp.c@1.9 +9 -9
+ [Bug2888] Fixed compiler warnings, converted C++ comments to C comments
+
+ tests/libntp/lfptostr.c@1.7 +14 -14
+ [Bug2888] Fixed compiler warnings, converted C++ comments to C comments
+
+ tests/libntp/prettydate.c@1.4 +1 -1
+ [Bug2888] Fixed compiler warnings, converted C++ comments to C comments
+
+ tests/libntp/strtolfp.c@1.6 +3 -3
+ [Bug2888] Fixed compiler warnings, converted C++ comments to C comments
+
+ tests/libntp/tstotv.c@1.4 +3 -3
+ [Bug2888] Fixed compiler warnings, converted C++ comments to C comments
+
+ tests/libntp/tvtots.c@1.6 +10 -10
+ [Bug2888] Fixed compiler warnings, converted C++ comments to C comments
+
+ tests/libntp/uglydate.c@1.8 +1 -1
+ [Bug2888] Fixed compiler warnings, converted C++ comments to C comments
+
+ChangeSet@1.3552.8.1, 2015-09-27 02:30:13+00:00, mayer@psp-deb1.ntp.org
+ Drop invalid packet before checking KoD. Check for all KoD's
+
+ ChangeLog@1.1739.4.1 +1 -0
+ Drop invalid packet before checking KoD. Check for all KoD's
+
+ ntpd/ntp_proto.c@1.365 +66 -9
+ Drop invalid packet before checking KoD. Check for all KoD's
+
+ChangeSet@1.3552.1.29, 2015-09-26 13:17:13+00:00, perlinger@psp-deb1.ntp.org
+ [bug2332] Create & cancel a dummy thread to warm-up the pthread runtime
+ instead of linking against libgcc_s on Linux targets
+
+ ChangeLog@1.1739.1.15 +3 -0
+ [Bug2332](reopened) fixed
+
+ ntpd/ntpd.c@1.165 +74 -0
+ [bug2332] Create & cancel a dummy thread to warm-up the pthread runtime
+
+ sntp/m4/ntp_libntp.m4@1.32 +0 -14
+ [bug2332] Remove the forced link against 'libgcc_s' since it breaks other targets
+
+ChangeSet@1.3552.7.6, 2015-09-25 06:51:35+00:00, stenn@psp-deb1.ntp.org
+ gcc on older HPUX may need +allowdups. Harlan Stenn.
+
+ sntp/m4/os_cflags.m4@1.12 +1 -1
+ gcc on older HPUX may need +allowdups. Harlan Stenn.
+
+ChangeSet@1.3552.7.5, 2015-09-25 04:21:37+00:00, stenn@psp-deb1.ntp.org
+ Adding missing MCAST protection. Harlan Stenn.
+
+ ChangeLog@1.1739.1.14 +1 -0
+ Adding missing MCAST protection. Harlan Stenn.
+
+ ntpd/ntp_io.c@1.406 +2 -0
+ Adding missing MCAST protection. Harlan Stenn.
+
+ChangeSet@1.3552.7.4, 2015-09-25 04:13:23+00:00, stenn@psp-deb1.ntp.org
+ gcc on older HPUX may need +allowdups. Harlan Stenn.
+
+ ChangeLog@1.1739.1.13 +1 -0
+ gcc on older HPUX may need +allowdups. Harlan Stenn.
+
+ sntp/m4/os_cflags.m4@1.11 +32 -2
+ gcc on older HPUX may need +allowdups. Harlan Stenn.
+
+ChangeSet@1.3552.7.3, 2015-09-24 11:27:07+00:00, stenn@psp-deb1.ntp.org
+ More updates for bug 2817. Harlan Stenn.
+
+ ntpd/ntpd.c@1.164 +1 -1
+ More updates for bug 2817. Harlan Stenn.
+
+ChangeSet@1.3552.7.2, 2015-09-24 10:27:51+00:00, stenn@psp-deb1.ntp.org
+ More updates for bug 2817. Harlan Stenn.
+
+ ntpd/ntpd.c@1.163 +6 -3
+ More updates for bug 2817. Harlan Stenn.
+
+ChangeSet@1.3552.7.1, 2015-09-24 05:44:53+00:00, stenn@psp-deb1.ntp.org
+ Fix bugs in tests/ntpd/ntp_prio_q.c. Harlan Stenn.
+
+ ChangeLog@1.1739.1.12 +1 -0
+ Fix bugs in tests/ntpd/ntp_prio_q.c. Harlan Stenn.
+
+ tests/ntpd/ntp_prio_q.c@1.2 +8 -7
+ Fix bugs in tests/ntpd/ntp_prio_q.c. Harlan Stenn.
+
+ChangeSet@1.3552.1.23, 2015-09-23 07:49:24-04:00, stenn@deacon.udel.edu
+ More updates for bug 2817. Harlan Stenn.
+
+ sntp/m4/ntp_rlimit.m4@1.5 +5 -5
+ More updates for bug 2817. Harlan Stenn.
+
+ChangeSet@1.3552.1.22, 2015-09-23 10:29:51+00:00, stenn@psp-deb1.ntp.org
+ More updates for bug 2817. Harlan Stenn.
+
+ ChangeLog@1.1739.1.11 +1 -0
+ More updates for bug 2817. Harlan Stenn.
+
+ html/miscopt.html@1.83 +2 -2
+ More updates for bug 2817. Harlan Stenn.
+
+ include/ntp_config.h@1.83 +2 -2
+ More updates for bug 2817. Harlan Stenn.
+
+ ntpd/invoke-ntp.conf.texi@1.190 +8 -5
+ More updates for bug 2817. Harlan Stenn.
+
+ ntpd/ntp.conf.5man@1.224 +9 -6
+ More updates for bug 2817. Harlan Stenn.
+
+ ntpd/ntp.conf.5mdoc@1.224 +9 -6
+ More updates for bug 2817. Harlan Stenn.
+
+ ntpd/ntp.conf.def@1.20 +6 -3
+ More updates for bug 2817. Harlan Stenn.
+
+ ntpd/ntp.conf.man.in@1.224 +9 -6
+ More updates for bug 2817. Harlan Stenn.
+
+ ntpd/ntp.conf.mdoc.in@1.224 +9 -6
+ More updates for bug 2817. Harlan Stenn.
+
+ ntpd/ntp_config.c@1.334 +26 -4
+ More updates for bug 2817. Harlan Stenn.
+
+ ntpd/ntpd.c@1.162 +1 -1
+ More updates for bug 2817. Harlan Stenn.
+
+ sntp/m4/ntp_rlimit.m4@1.4 +2 -2
+ More updates for bug 2817. Harlan Stenn.
+
+ChangeSet@1.3552.1.21, 2015-09-21 10:53:44+00:00, stenn@psp-deb1.ntp.org
+ Update the patch for bug 2817. Harlan Stenn.
+
+ ChangeLog@1.1739.1.10 +1 -0
+ Update the patch for bug 2817. Harlan Stenn.
+
+ configure.ac@1.601 +0 -54
+ Update the patch for bug 2817. Harlan Stenn.
+
+ sntp/m4/ntp_rlimit.m4@1.3 +57 -2
+ Update the patch for bug 2817. Harlan Stenn.
+
+ChangeSet@1.3552.1.20, 2015-09-21 10:30:35+00:00, stenn@psp-deb1.ntp.org
+ Clean trailing whitespace in tests/ntpd/Makefile.am. Harlan Stenn.
+
+ ChangeLog@1.1739.1.9 +1 -0
+ Clean trailing whitespace in tests/ntpd/Makefile.am. Harlan Stenn.
+
+ tests/ntpd/Makefile.am@1.27 +5 -5
+ Clean trailing whitespace in tests/ntpd/Makefile.am. Harlan Stenn.
+
+ChangeSet@1.3552.1.19, 2015-09-21 08:09:33+00:00, stenn@psp-deb1.ntp.org
+ Fix progname definition in unity runner scripts. Harlan Stenn.
+
+ ChangeLog@1.1739.1.8 +1 -0
+ Fix progname definition in unity runner scripts. Harlan Stenn.
+
+ sntp/tests/run-packetProcessing.c@1.9 +1 -1
+ Fix progname definition in unity runner scripts. Harlan Stenn.
+
+ sntp/tests/run-t-log.c@1.3 +1 -1
+ Fix progname definition in unity runner scripts. Harlan Stenn.
+
+ sntp/unity/auto/generate_test_runner.rb@1.10 +1 -1
+ Fix progname definition in unity runner scripts. Harlan Stenn.
+
+ tests/libntp/run-a_md5encrypt.c@1.14 +1 -1
+ Fix progname definition in unity runner scripts. Harlan Stenn.
+
+ tests/libntp/run-atoint.c@1.8 +1 -1
+ Fix progname definition in unity runner scripts. Harlan Stenn.
+
+ tests/libntp/run-atouint.c@1.9 +1 -1
+ Fix progname definition in unity runner scripts. Harlan Stenn.
+
+ tests/libntp/run-authkeys.c@1.11 +1 -1
+ Fix progname definition in unity runner scripts. Harlan Stenn.
+
+ tests/libntp/run-buftvtots.c@1.6 +1 -1
+ Fix progname definition in unity runner scripts. Harlan Stenn.
+
+ tests/libntp/run-calendar.c@1.8.1.1 +1 -1
+ Fix progname definition in unity runner scripts. Harlan Stenn.
+
+ tests/libntp/run-caljulian.c@1.13 +1 -1
+ Fix progname definition in unity runner scripts. Harlan Stenn.
+
+ tests/libntp/run-caltontp.c@1.5 +1 -1
+ Fix progname definition in unity runner scripts. Harlan Stenn.
+
+ tests/libntp/run-calyearstart.c@1.7 +1 -1
+ Fix progname definition in unity runner scripts. Harlan Stenn.
+
+ tests/libntp/run-clocktime.c@1.10 +1 -1
+ Fix progname definition in unity runner scripts. Harlan Stenn.
+
+ tests/libntp/run-decodenetnum.c@1.9 +1 -1
+ Fix progname definition in unity runner scripts. Harlan Stenn.
+
+ tests/libntp/run-hextoint.c@1.9 +1 -1
+ Fix progname definition in unity runner scripts. Harlan Stenn.
+
+ tests/libntp/run-hextolfp.c@1.8 +1 -1
+ Fix progname definition in unity runner scripts. Harlan Stenn.
+
+ tests/libntp/run-humandate.c@1.6 +1 -1
+ Fix progname definition in unity runner scripts. Harlan Stenn.
+
+ tests/libntp/run-lfpfunc.c@1.17 +1 -1
+ Fix progname definition in unity runner scripts. Harlan Stenn.
+
+ tests/libntp/run-lfptostr.c@1.7 +12 -12
+ Fix progname definition in unity runner scripts. Harlan Stenn.
+
+ tests/libntp/run-modetoa.c@1.11 +1 -1
+ Fix progname definition in unity runner scripts. Harlan Stenn.
+
+ tests/libntp/run-msyslog.c@1.8 +1 -1
+ Fix progname definition in unity runner scripts. Harlan Stenn.
+
+ tests/libntp/run-netof.c@1.7 +2 -1
+ Fix progname definition in unity runner scripts. Harlan Stenn.
+
+ tests/libntp/run-numtoa.c@1.10 +1 -1
+ Fix progname definition in unity runner scripts. Harlan Stenn.
+
+ tests/libntp/run-numtohost.c@1.10 +1 -1
+ Fix progname definition in unity runner scripts. Harlan Stenn.
+
+ tests/libntp/run-octtoint.c@1.7 +1 -1
+ Fix progname definition in unity runner scripts. Harlan Stenn.
+
+ tests/libntp/run-prettydate.c@1.5 +1 -1
+ Fix progname definition in unity runner scripts. Harlan Stenn.
+
+ tests/libntp/run-recvbuff.c@1.5 +1 -1
+ Fix progname definition in unity runner scripts. Harlan Stenn.
+
+ tests/libntp/run-refidsmear.c@1.6 +1 -1
+ Fix progname definition in unity runner scripts. Harlan Stenn.
+
+ tests/libntp/run-refnumtoa.c@1.8 +1 -1
+ Fix progname definition in unity runner scripts. Harlan Stenn.
+
+ tests/libntp/run-sfptostr.c@1.5 +1 -1
+ Fix progname definition in unity runner scripts. Harlan Stenn.
+
+ tests/libntp/run-socktoa.c@1.12 +1 -1
+ Fix progname definition in unity runner scripts. Harlan Stenn.
+
+ tests/libntp/run-ssl_init.c@1.9 +1 -1
+ Fix progname definition in unity runner scripts. Harlan Stenn.
+
+ tests/libntp/run-statestr.c@1.10 +1 -1
+ Fix progname definition in unity runner scripts. Harlan Stenn.
+
+ tests/libntp/run-strtolfp.c@1.5 +1 -1
+ Fix progname definition in unity runner scripts. Harlan Stenn.
+
+ tests/libntp/run-timespecops.c@1.10 +1 -1
+ Fix progname definition in unity runner scripts. Harlan Stenn.
+
+ tests/libntp/run-timevalops.c@1.12 +1 -1
+ Fix progname definition in unity runner scripts. Harlan Stenn.
+
+ tests/libntp/run-tstotv.c@1.5 +1 -1
+ Fix progname definition in unity runner scripts. Harlan Stenn.
+
+ tests/libntp/run-tvtots.c@1.6 +1 -1
+ Fix progname definition in unity runner scripts. Harlan Stenn.
+
+ tests/libntp/run-uglydate.c@1.10 +1 -1
+ Fix progname definition in unity runner scripts. Harlan Stenn.
+
+ tests/libntp/run-vi64ops.c@1.8 +1 -1
+ Fix progname definition in unity runner scripts. Harlan Stenn.
+
+ tests/libntp/run-ymd2yd.c@1.11 +1 -1
+ Fix progname definition in unity runner scripts. Harlan Stenn.
+
+ tests/ntpd/run-leapsec.c@1.5 +1 -1
+ Fix progname definition in unity runner scripts. Harlan Stenn.
+
+ tests/ntpd/run-ntp_prio_q.c@1.4 +1 -1
+ Fix progname definition in unity runner scripts. Harlan Stenn.
+
+ tests/ntpd/run-rc_cmdlength.c@1.3 +1 -1
+ Fix progname definition in unity runner scripts. Harlan Stenn.
+
+ tests/ntpd/run-t-ntp_scanner.c@1.5 +1 -1
+ Fix progname definition in unity runner scripts. Harlan Stenn.
+
+ tests/ntpd/run-t-ntp_signd.c@1.8 +1 -1
+ Fix progname definition in unity runner scripts. Harlan Stenn.
+
+ tests/ntpq/run-t-ntpq.c@1.3 +1 -1
+ Fix progname definition in unity runner scripts. Harlan Stenn.
+
+ChangeSet@1.3552.1.18, 2015-09-21 08:06:14+00:00, stenn@psp-deb1.ntp.org
+ Pthread autoconf macro cleanup. Harlan Stenn.
+
+ ChangeLog@1.1739.1.7 +1 -0
+ Pthread autoconf macro cleanup. Harlan Stenn.
+
+ sntp/m4/ntp_libevent.m4@1.15 +15 -19
+ Pthread autoconf macro cleanup. Harlan Stenn.
+
+ sntp/m4/ntp_libntp.m4@1.31 +5 -2
+ Pthread autoconf macro cleanup. Harlan Stenn.
+
+ sntp/m4/openldap-thread-check.m4@1.7 +6 -0
+ Pthread autoconf macro cleanup. Harlan Stenn.
+
+ChangeSet@1.3552.1.16, 2015-09-17 11:09:07+00:00, stenn@psp-deb1.ntp.org
+ Avoid spurious SCCS get
+
+ ntpd/Makefile.am@1.134 +3 -0
+ Avoid spurious SCCS get
+
+ChangeSet@1.3552.6.3, 2015-09-16 11:10:41+00:00, stenn@psp-deb1.ntp.org
+ Cleanup various test Makefile.am files. Harlan Stenn.
+
+ ChangeLog@1.1739.1.6 +1 -0
+ Cleanup various test Makefile.am files. Harlan Stenn.
+
+ sntp/tests/Makefile.am@1.64.1.3 +5 -5
+ Cleanup various test Makefile.am files. Harlan Stenn.
+
+ tests/libntp/Makefile.am@1.93 +23 -23
+ Cleanup various test Makefile.am files. Harlan Stenn.
+
+ tests/ntpd/Makefile.am@1.22.1.3 +7 -12
+ Cleanup various test Makefile.am files. Harlan Stenn.
+
+ tests/ntpq/Makefile.am@1.5.1.1 +3 -10
+ Cleanup various test Makefile.am files. Harlan Stenn.
+
+ChangeSet@1.3552.6.2, 2015-09-15 10:44:48+00:00, stenn@psp-deb1.ntp.org
+ Unit test dist cleanup. Harlan Stenn
+
+ ChangeLog@1.1739.1.5 +1 -0
+ Unit test dist cleanup. Harlan Stenn
+
+ sntp/configure.ac@1.82 +1 -0
+ Unit test dist cleanup. Harlan Stenn
+
+ sntp/tests/Makefile.am@1.64.1.2 +2 -0
+ Unit test dist cleanup. Harlan Stenn
+
+ tests/Makefile.am@1.17.1.1 +1 -0
+ Unit test dist cleanup. Harlan Stenn
+
+ tests/ntpd/Makefile.am@1.22.1.2 +0 -9
+ Unit test dist cleanup. Harlan Stenn
+
+ChangeSet@1.3552.5.6, 2015-09-15 07:45:39+00:00, stenn@psp-deb1.ntp.org
+ [Bug 2906] make check needs better support for pthreads. Harlan Stenn.
+
+ sntp/m4/ntp_libevent.m4@1.14 +23 -0
+ [Bug 2906] make check needs better support for pthreads. Harlan Stenn.
+
+ChangeSet@1.3552.5.5, 2015-09-15 07:12:08+00:00, stenn@psp-deb1.ntp.org
+ documentation notes
+
+ sntp/m4/openldap-thread-check.m4@1.6 +3 -0
+ documentation notes
+
+ChangeSet@1.3552.5.4, 2015-09-14 06:36:37+00:00, stenn@psp-deb1.ntp.org
+ [Bug 2906] "make check" needs better support for pthreads
+
+ ChangeLog@1.1739.3.4 +1 -0
+ [Bug 2906] "make check" needs better support for pthreads
+
+ sntp/m4/ntp_libevent.m4@1.13 +2 -0
+ [Bug 2906] "make check" needs better support for pthreads
+
+ sntp/tests/Makefile.am@1.62.2.1 +5 -0
+ [Bug 2906] "make check" needs better support for pthreads
+
+ tests/libntp/Makefile.am@1.90.1.1 +12 -12
+ [Bug 2906] "make check" needs better support for pthreads
+
+ tests/ntpd/Makefile.am@1.12.3.1 +4 -2
+ [Bug 2906] "make check" needs better support for pthreads
+
+ChangeSet@1.3552.5.3, 2015-09-14 05:50:02+00:00, stenn@psp-deb1.ntp.org
+ [Bug 2907] dist* build targets require our libevent/ to be enabled. HStenn.
+
+ ChangeLog@1.1739.3.3 +1 -0
+ [Bug 2907] dist* build targets require our libevent/ to be enabled. HStenn.
+
+ sntp/Makefile.am@1.86.1.1 +7 -4
+ [Bug 2907] dist* build targets require our libevent/ to be enabled. HStenn.
+
+ChangeSet@1.3552.5.2, 2015-09-13 22:11:31+00:00, stenn@psp-deb1.ntp.org
+ Autoconf cleanup
+
+ ChangeLog@1.1739.3.2 +1 -0
+ Autoconf cleanup
+
+ configure.ac@1.598.1.1 +1 -0
+ Autoconf cleanup
+
+ChangeSet@1.3552.5.1, 2015-09-13 22:10:03+00:00, stenn@psp-deb1.ntp.org
+ Update the NEWS file
+
+ ChangeLog@1.1739.3.1 +1 -0
+ Update the NEWS file
+
+ NEWS@1.146 +14 -0
+ Update the NEWS file
+
+ChangeSet@1.3552.1.15, 2015-08-20 17:13:37+02:00, viperus@ubuntu.(none)
+ t-ntp_scanner.c:
+ Rename: tests/ntpd/ntp_scanner.c -> tests/ntpd/t-ntp_scanner.c
+ new static functions tested
+ run-t-ntp_scanner.c:
+ Rename: tests/ntpd/run-ntp_scanner.c -> tests/ntpd/run-t-ntp_scanner.c
+ Makefile.am:
+ updates required for include *.c to work
+ run-t-ntp_scanner.c:
+ update
+
+ tests/ntpd/Makefile.am@1.25 +6 -5
+ updates required for include *.c to work
+
+ tests/ntpd/run-t-ntp_scanner.c@1.4 +18 -7
+ update
+
+ tests/ntpd/run-t-ntp_scanner.c@1.3 +0 -0
+ Rename: tests/ntpd/run-ntp_scanner.c -> tests/ntpd/run-t-ntp_scanner.c
+
+ tests/ntpd/t-ntp_scanner.c@1.5 +73 -2
+ new static functions tested
+
+ tests/ntpd/t-ntp_scanner.c@1.4 +0 -0
+ Rename: tests/ntpd/ntp_scanner.c -> tests/ntpd/t-ntp_scanner.c
+
+ChangeSet@1.3552.1.14, 2015-08-20 16:35:29+02:00, viperus@ubuntu.(none)
+ t-ntpq.c:
+ disabled for now, very trick to test static functions.
+ run-t-ntpq.c:
+ update
+ ntp_scanner.c:
+ added new test
+ Makefile.am:
+ added more include dirs
+
+ tests/ntpd/ntp_scanner.c@1.3 +11 -3
+ added new test
+
+ tests/ntpq/Makefile.am@1.7 +2 -3
+ added more include dirs
+
+ tests/ntpq/run-t-ntpq.c@1.2 +1 -2
+ update
+
+ tests/ntpq/t-ntpq.c@1.3 +25 -2
+ disabled for now, very trick to test static functions.
+
+ChangeSet@1.3552.1.13, 2015-08-20 10:15:12+02:00, viperus@ubuntu.(none)
+ http-server.c:
+ reverted emalloc (and similar) to malloc + added checks if malloc is NULL, because emalloc is not linked here.
+ Many files:
+ reverted emalloc (and similar) to malloc + added checks if malloc is NULL, because emalloc is not linked here.
+
+
+ sntp/libevent/sample/http-server.c@1.12 +6 -2
+ reverted emalloc (and similar) to malloc + added checks if malloc is NULL, because emalloc is not linked here.
+
+ sntp/libevent/test/bench_httpclient.c@1.8 +5 -1
+ reverted emalloc (and similar) to malloc + added checks if malloc is NULL, because emalloc is not linked here.
+
+
+ sntp/libevent/test/regress.c@1.8 +6 -2
+ reverted emalloc (and similar) to malloc + added checks if malloc is NULL, because emalloc is not linked here.
+
+
+ sntp/libevent/test/regress_dns.c@1.10 +6 -5
+ reverted emalloc (and similar) to malloc + added checks if malloc is NULL, because emalloc is not linked here.
+
+
+ sntp/libevent/test/regress_http.c@1.10 +8 -4
+ reverted emalloc (and similar) to malloc + added checks if malloc is NULL, because emalloc is not linked here.
+
+
+ sntp/libevent/test/regress_minheap.c@1.5 +2 -1
+ reverted emalloc (and similar) to malloc + added checks if malloc is NULL, because emalloc is not linked here.
+
+
+ sntp/libevent/test/test-ratelim.c@1.11 +6 -2
+ reverted emalloc (and similar) to malloc + added checks if malloc is NULL, because emalloc is not linked here.
+
+
+ sntp/libevent/test/test-time.c@1.7 +2 -1
+ reverted emalloc (and similar) to malloc + added checks if malloc is NULL, because emalloc is not linked here.
+
+
+ChangeSet@1.3552.1.12, 2015-08-20 01:10:57+02:00, viperus@ubuntu.(none)
+ Makefile.am:
+ added 2 more temp files to CLEANFILES and DISTCLEAN, because it prevented make distcheck from finishing properly
+ pathfind.c:
+ reverted emalloc to malloc with if(result == NULL)... because sntp/ doesn't link libntp...probably for a reason unknown to me.
+
+ sntp/libopts/compat/pathfind.c@1.13 +17 -6
+ reverted emalloc to malloc with if(result == NULL)... because sntp/ doesn't link libntp...probably for a reason unknown to me.
+
+ sntp/tests/Makefile.am@1.65 +4 -0
+ added 2 more temp files to CLEANFILES and DISTCLEAN, because it prevented make distcheck from finishing properly
+
+ChangeSet@1.3552.1.11, 2015-08-20 01:04:40+02:00, viperus@ubuntu.(none)
+ run-packetProcessing.c:
+ manually updated due to char / const char progname issues when autogenerating
+ Makefile.am:
+ re-enabled ntpq dir
+
+ sntp/tests/run-packetProcessing.c@1.8 +1 -1
+ manually updated due to char / const char progname issues when autogenerating
+
+ tests/Makefile.am@1.18 +1 -0
+ re-enabled ntpq dir
+
+ChangeSet@1.3552.1.10, 2015-08-20 00:23:42+02:00, viperus@ubuntu.(none)
+ machines.c:
+ Fixing bug 2898, replacing malloc with emalloc, calloc with emalloc_zero, strdup with estrup etc.
+ Many files:
+ Fixing bug 2898, replacing malloc with emalloc, calloc with emalloc_zero, strdup with estrup etc.
+
+
+ libntp/machines.c@1.26 +3 -3
+ Fixing bug 2898, replacing malloc with emalloc, calloc with emalloc_zero, strdup with estrup etc.
+
+ ntpd/refclock_palisade.c@1.43 +2 -2
+ Fixing bug 2898, replacing malloc with emalloc, calloc with emalloc_zero, strdup with estrup etc.
+
+
+ ntpq/ntpq.c@1.161 +7 -7
+ Fixing bug 2898, replacing malloc with emalloc, calloc with emalloc_zero, strdup with estrup etc.
+
+
+ sntp/libevent/sample/http-server.c@1.11 +2 -2
+ Fixing bug 2898, replacing malloc with emalloc, calloc with emalloc_zero, strdup with estrup etc.
+
+
+ sntp/libevent/test/bench_httpclient.c@1.7 +1 -1
+ Fixing bug 2898, replacing malloc with emalloc, calloc with emalloc_zero, strdup with estrup etc.
+
+
+ sntp/libevent/test/regress.c@1.7 +2 -2
+ Fixing bug 2898, replacing malloc with emalloc, calloc with emalloc_zero, strdup with estrup etc.
+
+
+ sntp/libevent/test/regress_dns.c@1.9 +4 -4
+ Fixing bug 2898, replacing malloc with emalloc, calloc with emalloc_zero, strdup with estrup etc.
+
+
+ sntp/libevent/test/regress_http.c@1.9 +3 -3
+ Fixing bug 2898, replacing malloc with emalloc, calloc with emalloc_zero, strdup with estrup etc.
+
+
+ sntp/libevent/test/regress_minheap.c@1.4 +1 -1
+ Fixing bug 2898, replacing malloc with emalloc, calloc with emalloc_zero, strdup with estrup etc.
+
+
+ sntp/libevent/test/test-ratelim.c@1.10 +2 -2
+ Fixing bug 2898, replacing malloc with emalloc, calloc with emalloc_zero, strdup with estrup etc.
+
+
+ sntp/libevent/test/test-time.c@1.6 +1 -1
+ Fixing bug 2898, replacing malloc with emalloc, calloc with emalloc_zero, strdup with estrup etc.
+
+
+ sntp/libopts/compat/pathfind.c@1.12 +5 -5
+ Fixing bug 2898, replacing malloc with emalloc, calloc with emalloc_zero, strdup with estrup etc.
+
+
+ sntp/tests/fileHandlingTest.c@1.3 +1 -1
+ Fixing bug 2898, replacing malloc with emalloc, calloc with emalloc_zero, strdup with estrup etc.
+
+
+ sntp/tests/packetProcessing.c@1.8 +1 -1
+ Fixing bug 2898, replacing malloc with emalloc, calloc with emalloc_zero, strdup with estrup etc.
+
+
+ tests/libntp/a_md5encrypt.c@1.12 +1 -1
+ Fixing bug 2898, replacing malloc with emalloc, calloc with emalloc_zero, strdup with estrup etc.
+
+
+ tests/libntp/calendar.c@1.6.1.1 +4 -4
+ Fixing bug 2898, replacing malloc with emalloc, calloc with emalloc_zero, strdup with estrup etc.
+
+
+ tests/libntp/caljulian.c@1.10 +1 -1
+ Fixing bug 2898, replacing malloc with emalloc, calloc with emalloc_zero, strdup with estrup etc.
+
+
+ChangeSet@1.3552.1.9, 2015-08-17 13:56:23+02:00, viperus@ubuntu.(none)
+ Makefile.am:
+ fixed minor typo which caused me a lot of headache
+ t-ntp_signd.c:
+ added a new test
+ run-t-ntp_signd.c:
+ autogen update
+ Makefile.am:
+ removed unnecessary CFLAG
+ t-ntp_signd.c:
+ minor update
+
+ tests/ntpd/Makefile.am@1.24 +2 -1
+ fixed minor typo which caused me a lot of headache
+
+ tests/ntpd/Makefile.am@1.23 +0 -3
+ removed unnecessary CFLAG
+
+ tests/ntpd/run-t-ntp_signd.c@1.7 +10 -5
+ autogen update
+
+ tests/ntpd/t-ntp_signd.c@1.10 +23 -14
+ added a new test
+
+ tests/ntpd/t-ntp_signd.c@1.9 +10 -3
+ minor update
+
+ChangeSet@1.3552.1.8, 2015-08-17 12:21:45+02:00, viperus@ubuntu.(none)
+ run-t-ntp_signd.c:
+ added more tests manually
+
+ tests/ntpd/run-t-ntp_signd.c@1.6 +2 -1
+ added more tests manually
+
+ tests/ntpd/t-ntp_signd.c@1.8 +0 -1
+
+ChangeSet@1.3552.1.7, 2015-08-17 12:15:56+02:00, viperus@ubuntu.(none)
+ t-ntp_signd.c:
+ adding more tests , added mocked functinos section
+
+ tests/ntpd/t-ntp_signd.c@1.7 +34 -0
+ adding more tests , added mocked functinos section
+
+ChangeSet@1.3552.1.6, 2015-08-17 11:28:21+02:00, viperus@ubuntu.(none)
+ t-ntp_signd.c:
+ new tests added
+ run-t-ntp_signd.c:
+ I had some issues with bk and this file
+ t-ntp_signd.c:
+ basic mocking concept added. connect() is mocked, and always returns 1
+
+ tests/ntpd/run-t-ntp_signd.c@1.5 +4 -2
+ I had some issues with bk and this file
+
+ tests/ntpd/t-ntp_signd.c@1.6 +13 -9
+ basic mocking concept added. connect() is mocked, and always returns 1
+
+ tests/ntpd/t-ntp_signd.c@1.5 +22 -2
+ new tests added
+
+ChangeSet@1.3552.4.1, 2015-08-17 07:54:01+02:00, jnperlin@hydra.(none)
+ CVE-2014-9297
+
+ ChangeLog@1.1739.2.1 +1 -0
+ CVE-2014-9297
+
+ ntpd/ntp_crypto.c@1.182 +78 -27
+ CVE-2014-9297: buffer overrun checks
+
+ChangeSet@1.3552.3.1, 2015-08-14 12:05:44+02:00, viperus@ubuntu.(none)
+ Makefile.am:
+ removed unnecessary CFLAGS
+
+ tests/ntpq/Makefile.am@1.6 +0 -5
+ removed unnecessary CFLAGS
+
+ChangeSet@1.3552.1.4, 2015-08-14 08:24:21+00:00, stenn@psp-at1.ntp.org
+ Unity test cleanup: move declaration of 'initializing'. Harlan Stenn.
+
+ ChangeLog@1.1739.1.3 +1 -0
+ Unity test cleanup: move declaration of 'initializing'. Harlan Stenn.
+
+ ntpd/ntp_timer.c@1.92 +6 -0
+ Unity test cleanup: move declaration of 'initializing'. Harlan Stenn.
+
+ ntpd/ntpd.c@1.161 +0 -6
+ Unity test cleanup: move declaration of 'initializing'. Harlan Stenn.
+
+ChangeSet@1.3552.1.3, 2015-08-10 13:15:13+02:00, viperus@ubuntu.(none)
+ run-ntp_util.c:
+ new file, I guess?
+ Makefile.am:
+ changes to harlan's makefile after merge
+ run-ntp_prio_q.c:
+ hopefully, fixes stuff. Why is this here? Did harlan pull something from tfendrich?
+
+ tests/ntpd/Makefile.am@1.22 +13 -13
+ changes to harlan's makefile after merge
+
+ tests/ntpd/run-ntp_prio_q.c@1.3 +1 -1
+ hopefully, fixes stuff. Why is this here? Did harlan pull something from tfendrich?
+
+ tests/ntpd/run-ntp_util.c@1.1 +60 -0
+ new file, I guess?
+
+ tests/ntpd/run-ntp_util.c@1.0 +0 -0
+
+ChangeSet@1.3552.2.1, 2015-08-10 09:50:16+00:00, stenn@psp-at1.ntp.org
+ Retire google test - phase I. Harlan Stenn.
+
+ BitKeeper/deleted/07/g_packetHandling.cpp~2e07085e82bde6c@1.2 +0 -0
+ Delete: sntp/tests/g_packetHandling.cpp
+
+ BitKeeper/deleted/09/tvtots.cpp~c58754a7b62dde1c@1.9 +0 -0
+ Delete: tests/libntp/g_tvtots.cpp
+
+ BitKeeper/deleted/0a/sntptest.h~c408c7764b75cd4f@1.7 +0 -0
+ Delete: sntp/tests/g_sntptest.h
+
+ BitKeeper/deleted/0a/utilities.cpp~2657edd0f94e49eb@1.12 +0 -0
+ Delete: sntp/tests/g_utilities.cpp
+
+ BitKeeper/deleted/0c/buftvtots.cpp~eababa3e59583108@1.6 +0 -0
+ Delete: tests/libntp/g_buftvtots.cpp
+
+ BitKeeper/deleted/0f/uglydate.cpp~a0fdfbbfdc636411@1.5 +0 -0
+ Delete: tests/libntp/g_uglydate.cpp
+
+ BitKeeper/deleted/10/sfptostr.cpp~cef5595e4f89eac8@1.4 +0 -0
+ Delete: tests/libntp/g_sfptostr.cpp
+
+ BitKeeper/deleted/13/g_lfptostr.cpp~386d730e91bb76de@1.3 +0 -0
+ Delete: tests/libntp/g_lfptostr.cpp
+
+ BitKeeper/deleted/14/humandate.cpp~c3b455ca717b631a@1.5 +0 -0
+ Delete: tests/libntp/g_humandate.cpp
+
+ BitKeeper/deleted/15/g_nameresolution.cpp~23956912aa26e0b9@1.2 +0 -0
+ Delete: sntp/tests/g_nameresolution.cpp
+
+ BitKeeper/deleted/17/a_md5encrypt.cpp~1013ff09a55a7336@1.8 +0 -0
+ Delete: tests/libntp/g_a_md5encrypt.cpp
+
+ BitKeeper/deleted/1c/crypto.cpp~77bbd0102246a5@1.7 +0 -0
+ Delete: sntp/tests/g_crypto.cpp
+
+ BitKeeper/deleted/24/atoint.cpp~533534d530ae4081@1.5 +0 -0
+ Delete: tests/libntp/g_atoint.cpp
+
+ BitKeeper/deleted/29/networking.cpp~a6f1b3f0b76192c9@1.11 +0 -0
+ Delete: sntp/tests/g_networking.cpp
+
+ BitKeeper/deleted/29/refnumtoa.cpp~ed3c5e075503bdf4@1.5 +0 -0
+ Delete: tests/libntp/g_refnumtoa.cpp
+
+ BitKeeper/deleted/2d/libntptest.h~1990ef7fb70295d6@1.6 +0 -0
+ Delete: tests/libntp/g_libntptest.h
+
+ BitKeeper/deleted/30/g_recvbuff.cpp~7b0d3114520a0616@1.3 +0 -0
+ Delete: tests/libntp/g_recvbuff.cpp
+
+ BitKeeper/deleted/30/main.cpp~62ec7f38f7d49413@1.10 +0 -0
+ Delete: sntp/tests_main.cpp
+
+ BitKeeper/deleted/37/statestr.cpp~65497a98bac68a52@1.5 +0 -0
+ Delete: tests/libntp/g_statestr.cpp
+
+ BitKeeper/deleted/3b/tvalops.cpp~fa0bb1554d1d08d4@1.11 +0 -0
+ Delete: tests/libntp/g_timevalops.cpp
+
+ BitKeeper/deleted/3c/g_octtoint.cpp~8124d76dd2b395e5@1.3 +0 -0
+ Delete: tests/libntp/g_octtoint.cpp
+
+ BitKeeper/deleted/3f/calendar.cpp~72447c9b8c0deced@1.4 +0 -0
+ Delete: tests/libntp/g_calendar.cpp
+
+ BitKeeper/deleted/4e/g_hextolfp.cpp~ba8561698c15b354@1.3 +0 -0
+ Delete: tests/libntp/g_hextolfp.cpp
+
+ BitKeeper/deleted/57/ntpdtest.h~25bdfa3eeda7b121@1.3 +0 -0
+ Delete: tests/ntpd/g_ntpdtest.h
+
+ BitKeeper/deleted/5b/sockaddrtest.h~4bf7e82961607bf0@1.6 +0 -0
+ Delete: tests/libntp/g_sockaddrtest.h
+
+ BitKeeper/deleted/5f/authkeys.cpp~24496a9d93173937@1.10 +0 -0
+ Delete: tests/libntp/g_authkeys.cpp
+
+ BitKeeper/deleted/62/g_strtolfp.cpp~5a50a9b282094e7f@1.3 +0 -0
+ Delete: tests/libntp/g_strtolfp.cpp
+
+ BitKeeper/deleted/77/lfpfunc.cpp~9ed51f8dc31368eb@1.5 +0 -0
+ Delete: tests/libntp/g_lfpfunc.cpp
+
+ BitKeeper/deleted/82/clocktime.cpp~7dd85c09c049ffd4@1.7 +0 -0
+ Delete: tests/libntp/g_clocktime.cpp
+
+ BitKeeper/deleted/8b/atouint.cpp~43abc72d64a1857a@1.4 +0 -0
+ Delete: tests/libntp/g_atouint.cpp
+
+ BitKeeper/deleted/8b/leapsec.cpp~11be64d438063292@1.17 +0 -0
+ Delete: tests/ntpd/g_leapsec.cpp
+
+ BitKeeper/deleted/93/g_vi64ops.cpp~e023cb72bff45261@1.3 +0 -0
+ Delete: tests/libntp/g_vi64ops.cpp
+
+ BitKeeper/deleted/96/numtoa.cpp~b3b85b1ebc36fc2b@1.5 +0 -0
+ Delete: tests/libntp/g_numtoa.cpp
+
+ BitKeeper/deleted/98/g_tstotv.cpp~37896736f73c48b0@1.3 +0 -0
+ Delete: tests/libntp/g_tstotv.cpp
+
+ BitKeeper/deleted/9a/packetProcessing.cpp~4822a1d49ca16be5@1.8 +0 -0
+ Delete: sntp/tests/g_packetProcessing.cpp
+
+ BitKeeper/deleted/9c/kodDatabase.cpp~f9244577ca9f0aa9@1.6 +0 -0
+ Delete: sntp/tests/g_kodDatabase.cpp
+
+ BitKeeper/deleted/a4/g_msyslog.cpp~ec51c9e8395b3e4b@1.3 +0 -0
+ Delete: tests/libntp/g_msyslog.cpp
+
+ BitKeeper/deleted/ae/lfptest.h~a452179b90fdedaa@1.8 +0 -0
+ Delete: tests/libntp/g_lfptest.h
+
+ BitKeeper/deleted/af/calyearstart.cpp~586f44f58a75b25e@1.6 +0 -0
+ Delete: tests/libntp/g_calyearstart.cpp
+
+ BitKeeper/deleted/b2/ntpdtest.cpp~d4e605db974f754d@1.4 +0 -0
+ Delete: tests/ntpd/g_ntpdtest.cpp
+
+ BitKeeper/deleted/b3/timestructs.cpp~2bc53cc52f6599d5@1.7 +0 -0
+ Delete: tests/libntp/g_timestructs.cpp
+
+ BitKeeper/deleted/c1/ssl_init.cpp~81ce47bbb0e4fbbc@1.6 +0 -0
+ Delete: tests/libntp/g_ssl_init.cpp
+
+ BitKeeper/deleted/c3/modetoa.cpp~50f2955120b0ed6f@1.4 +0 -0
+ Delete: tests/libntp/g_modetoa.cpp
+
+ BitKeeper/deleted/c6/kodFile.cpp~c593859a65c8e9e3@1.11 +0 -0
+ Delete: sntp/tests/g_kodFile.cpp
+
+ BitKeeper/deleted/c9/main.h~44cc5c4040b89c30@1.9 +0 -0
+ Delete: sntp/tests_main.h
+
+ BitKeeper/deleted/ce/timestructs.h~a7213e57006326f@1.6 +0 -0
+ Delete: tests/libntp/g_timestructs.h
+
+ BitKeeper/deleted/cf/libntptest.cpp~fb911e064fe18517@1.6 +0 -0
+ Delete: tests/libntp/g_libntptest.cpp
+
+ BitKeeper/deleted/d0/g_caltontp.cpp~ea2471ca2734873a@1.3 +0 -0
+ Delete: tests/libntp/g_caltontp.cpp
+
+ BitKeeper/deleted/d8/hextoint.cpp~78aeb35b2f896bed@1.6 +0 -0
+ Delete: tests/libntp/g_hextoint.cpp
+
+ BitKeeper/deleted/dd/keyFile.cpp~7ca67d971ffc97ae@1.9 +0 -0
+ Delete: sntp/tests/g_keyFile.cpp
+
+ BitKeeper/deleted/e0/g_socktoa.cpp~9f28a4451c7f0c1a@1.3 +0 -0
+ Delete: tests/libntp/g_socktoa.cpp
+
+ BitKeeper/deleted/eb/g_prettydate.cpp~7800800c1dbf9688@1.3 +0 -0
+ Delete: tests/libntp/g_prettydate.cpp
+
+ BitKeeper/deleted/ee/caljulian.cpp~4c368703107f888@1.8 +0 -0
+ Delete: tests/libntp/g_caljulian.cpp
+
+ BitKeeper/deleted/ef/fileHandlingTest.h~212fb01783c1dfd7@1.7 +0 -0
+ Delete: sntp/tests/g_fileHandlingTest.h
+
+ BitKeeper/deleted/f6/g_decodenetnum.cpp~5b151a58bf8417a2@1.3 +0 -0
+ Delete: tests/libntp/g_decodenetnum.cpp
+
+ BitKeeper/deleted/f8/g_netof.cpp~a772fe4f2f1b84e8@1.3 +0 -0
+ Delete: tests/libntp/g_netof.cpp
+
+ BitKeeper/deleted/fa/tspecops.cpp~fabae81f65cd8134@1.11 +0 -0
+ Delete: tests/libntp/g_timespecops.cpp
+
+ BitKeeper/deleted/fd/ymd2yd.cpp~eeb76d1d2a534b6@1.4 +0 -0
+ Delete: tests/libntp/g_ymd2yd.cpp
+
+ BitKeeper/deleted/ff/numtohost.cpp~c346ee31ae5ffefe@1.4 +0 -0
+ Delete: tests/libntp/g_numtohost.cpp
+
+ ChangeLog@1.1739.1.2 +1 -1
+ Retire google test - phase I. Harlan Stenn.
+
+ ChangeLog@1.1739.1.1 +1 -0
+ Retire google test - phase I
+
+ sntp/Makefile.am@1.87 +0 -1
+ Retire google test - phase I. Harlan Stenn.
+
+ sntp/tests/Makefile.am@1.62.1.1 +15 -28
+ Retire google test - phase I. Harlan Stenn.
+
+ tests/Makefile.am@1.12.1.1 +0 -13
+ Retire google test - phase I. Harlan Stenn.
+
+ tests/libntp/Makefile.am@1.91 +0 -63
+ Retire google test - phase I. Harlan Stenn.
+
+ tests/ntpd/Makefile.am@1.12.2.1 +32 -50
+ Retire google test - phase I. Harlan Stenn.
+
+ tests/sandbox/Makefile.am@1.7 +14 -5
+ Retire google test - phase I. Harlan Stenn.
+
+ChangeSet@1.3548.1.16, 2015-08-07 08:07:50+02:00, viperus@ubuntu.(none)
+ Makefile.am:
+ re-added ntpq, works now
+ run-t-ntpq.c:
+ added
+ Makefile.am:
+ minor cleanup
+ configure.ac:
+ added ntpq dir
+
+ configure.ac@1.599 +1 -0
+ added ntpq dir
+
+ tests/Makefile.am@1.16 +2 -0
+ re-added ntpq, works now
+
+ tests/ntpq/Makefile.am@1.5 +0 -1
+ minor cleanup
+
+ tests/ntpq/run-t-ntpq.c@1.1 +55 -0
+ added
+
+ tests/ntpq/run-t-ntpq.c@1.0 +0 -0
+
+ChangeSet@1.3548.1.15, 2015-08-06 21:42:18+02:00, viperus@ubuntu.(none)
+ Makefile.am:
+ removed ntpq becuase it doesnt work?!
+
+ tests/Makefile.am@1.15 +0 -2
+ removed ntpq becuase it doesnt work?!
+
+ChangeSet@1.3548.1.14, 2015-08-06 21:03:10+02:00, viperus@ubuntu.(none)
+ Makefile.am:
+ adding new Makefile
+ minor change
+ Makefile.am, t-ntpq.c:
+ update
+
+ tests/Makefile.am@1.14 +1 -0
+ update
+
+ tests/ntpq/Makefile.am@1.4 +3 -1
+ minor change
+
+ tests/ntpq/Makefile.am@1.3 +6 -15
+ adding new Makefile
+
+ tests/ntpq/t-ntpq.c@1.2 +1 -1
+ update
+
+ChangeSet@1.3548.1.13, 2015-08-06 20:41:02+02:00, viperus@ubuntu.(none)
+ socktoa.c:
+ fixed. Tests are skipped when you do ./build --disable-ipv6
+
+ t-ntpq.c:
+ new test file
+ decodenetnum.c:
+ fixed. Tests are skipped when you do ./build --disable-ipv6
+ Makefile.am:
+ changes
+ run-t-log.c:
+ updated
+
+ sntp/tests/run-t-log.c@1.2 +4 -3
+ updated
+
+ tests/libntp/decodenetnum.c@1.9 +3 -3
+ fixed. Tests are skipped when you do ./build --disable-ipv6
+
+ tests/libntp/socktoa.c@1.9 +2 -2
+ fixed. Tests are skipped when you do ./build --disable-ipv6
+
+
+ tests/ntpq/Makefile.am@1.2 +8 -37
+ changes
+
+ tests/ntpq/t-ntpq.c@1.1 +14 -0
+ new test file
+
+ tests/ntpq/t-ntpq.c@1.0 +0 -0
+
+ChangeSet@1.3548.1.12, 2015-08-06 20:24:05+02:00, viperus@ubuntu.(none)
+ log.c:
+ modified to allow calling of multiple atexit(cleanup_log) without causing a segfault.
+ t-log.c:
+ minor cleanup, fixes, stuff works (in combination with updated log.c)
+
+ sntp/log.c@1.24 +15 -6
+ modified to allow calling of multiple atexit(cleanup_log) without causing a segfault.
+
+ sntp/tests/t-log.c@1.2 +13 -11
+ minor cleanup, fixes, stuff works (in combination with updated log.c)
+
+ChangeSet@1.3548.1.11, 2015-08-06 10:27:35+02:00, viperus@ubuntu.(none)
+ Makefile.am:
+ small fix
+ socktoa.c, run-decodenetnum.c:
+ update
+ decodenetnum.c:
+ Minor changes due to the autogenerated ruby script
+ run-socktoa.c:
+ Minor changes due to the autogenerated ruby script
+
+
+ tests/libntp/decodenetnum.c@1.8 +22 -6
+ Minor changes due to the autogenerated ruby script
+
+ tests/libntp/run-decodenetnum.c@1.8 +4 -5
+ update
+
+ tests/libntp/run-socktoa.c@1.11 +7 -7
+ Minor changes due to the autogenerated ruby script
+
+
+ tests/libntp/socktoa.c@1.8 +22 -6
+ update
+
+ tests/ntpd/Makefile.am@1.20 +0 -1
+ small fix
+
+ChangeSet@1.3548.1.10, 2015-08-05 16:53:22+02:00, viperus@ubuntu.(none)
+ Makefile.am:
+ new file
+ added ntpq dir
+ added a new test, test-log
+ t-log.c:
+ removed the 2nd test because only one open_logfile per program can be used (segfault otherwise)
+ run-t-log.c:
+ new file, HAS ISSUES WITH CONST CHAR *progname.
+
+ sntp/tests/Makefile.am@1.63 +11 -0
+ added a new test, test-log
+
+ sntp/tests/run-t-log.c@1.1 +56 -0
+ new file, HAS ISSUES WITH CONST CHAR *progname.
+
+ sntp/tests/run-t-log.c@1.0 +0 -0
+
+ sntp/tests/t-log.c@1.1 +66 -0
+ removed the 2nd test because only one open_logfile per program can be used (segfault otherwise)
+
+ sntp/tests/t-log.c@1.0 +0 -0
+
+ tests/Makefile.am@1.13 +2 -0
+ added ntpq dir
+
+ tests/ntpq/Makefile.am@1.1 +146 -0
+ BitKeeper file /home/viperus/Desktop/ntp-stable-unity/tests/ntpq/Makefile.am
+
+ tests/ntpq/Makefile.am@1.0 +0 -0
+
+ChangeSet@1.3554, 2015-08-03 20:59:21+02:00, jnperlin@nemesis.localnet
+ [Bug 2888] streamline calendar functions
+ - MSVC compilation issue
+
+ libntp/ntp_calendar.c@1.17 +3 -1
+ [Bug 2888] streamline calendar functions
+ - 'uint' not known with MSVC; use u_int instead
+
+ChangeSet@1.3529.4.1, 2015-08-03 20:34:01+02:00, jnperlin@hydra.(none)
+ [Bug 2888] streamline calendar functions.
+
+ ChangeLog@1.1725.2.1 +1 -1
+ [Bug 2888] streamline calendar functions.
+
+ include/ntp_calendar.h@1.18 +13 -0
+ [Bug 2888] streamline calendar functions.
+
+ libntp/ntp_calendar.c@1.16 +495 -321
+ [Bug 2888] streamline calendar functions.
+ - reduce number of divisions for gregorian calendar
+ - rewrite divisions to use explicit 2's complement calculation via unsigned types
+ - avoid branches in calculations where possible
+
+ tests/libntp/calendar.c@1.7 +211 -132
+ [Bug 2888] streamline calendar functions.
+ - added tests for ISO8601 week calendar
+ - streamlined string formatting
+ - converted struct-by-value to struct-by-pointer in several cases
+ - fixed prototypes
+
+ tests/libntp/run-calendar.c@1.9 +19 -11
+ [Bug 2888] streamline calendar functions.
+ - update of test runner
+
+ChangeSet@1.3548.1.9, 2015-08-03 11:43:07+02:00, viperus@ubuntu.(none)
+ Makefile.am:
+ changed signdT -> t-ntp_signd. All tests files will from now on be named t-name.c , where name.c is the name of the tested file.
+ run-ntp_signdT.c~8aba306cc0dcbfc:
+ Delete: tests/ntpd/run-ntp_signdT.c
+ run-t-ntp_signd.c:
+ Rename: tests/ntpd/run-ntp_signd.c -> tests/ntpd/run-t-ntp_signd.c
+ t-ntp_signd.c:
+ Rename: tests/ntpd/ntp_signdT.c -> tests/ntpd/t-ntp_signd.c
+
+ BitKeeper/deleted/3a/run-ntp_signdT.c~8aba306cc0dcbfc@1.3 +0 -0
+ Delete: tests/ntpd/run-ntp_signdT.c
+
+ tests/ntpd/Makefile.am@1.19 +17 -17
+ changed signdT -> t-ntp_signd. All tests files will from now on be named t-name.c , where name.c is the name of the tested file.
+
+ tests/ntpd/run-t-ntp_signd.c@1.4 +0 -0
+ Rename: tests/ntpd/run-ntp_signd.c -> tests/ntpd/run-t-ntp_signd.c
+
+ tests/ntpd/t-ntp_signd.c@1.4 +0 -0
+ Rename: tests/ntpd/ntp_signdT.c -> tests/ntpd/t-ntp_signd.c
+
+ChangeSet@1.3548.1.8, 2015-08-03 08:48:00+00:00, viperus@psp-deb1.ntp.org
+ Makefile.am:
+ minor fixes, trying to link on psp-deb1
+
+ tests/ntpd/Makefile.am@1.18 +3 -4
+ minor fixes, trying to link on psp-deb1
+
+ChangeSet@1.3548.1.7, 2015-08-03 10:36:05+02:00, viperus@ubuntu.(none)
+ ntp_signdT.c:
+ added extern, hopefully, it will work
+
+ tests/ntpd/ntp_signdT.c@1.3 +1 -1
+ added extern, hopefully, it will work
+
+ChangeSet@1.3548.1.6, 2015-08-03 10:18:52+02:00, viperus@ubuntu.(none)
+ Makefile.am:
+ added rc_cmdlength.o
+
+ tests/ntpd/Makefile.am@1.17 +1 -0
+ added rc_cmdlength.o
+
+ChangeSet@1.3548.1.5, 2015-08-03 10:14:12+02:00, viperus@ubuntu.(none)
+ Makefile.am:
+ minor fix
+
+ tests/ntpd/Makefile.am@1.16 +1 -1
+ minor fix
+
+ChangeSet@1.3547.1.1, 2015-08-03 12:30:29+05:30, loki@dadasgift.(none)
+ ntp_util.c:
+ new file
+
+ tests/libntp/decodenetnum.c@1.7 +7 -1
+
+ tests/libntp/socktoa.c@1.7 +8 -1
+
+ tests/ntpd/Makefile.am@1.12.1.1 +23 -0
+
+ tests/ntpd/ntp_util.c@1.1 +74 -0
+ BitKeeper file /home/loki/ntp_gsoc/2_damir_code/ntp-stable-unity/tests/ntpd/ntp_util.c
+
+ tests/ntpd/ntp_util.c@1.0 +0 -0
+
+ChangeSet@1.3548.1.3, 2015-08-03 08:51:53+02:00, viperus@ubuntu.(none)
+ ntp_signd.c~736d4c4a37ef4b86:
+ Delete: tests/ntpd/ntp_signd.c
+
+ BitKeeper/deleted/7f/ntp_signd.c~736d4c4a37ef4b86@1.3 +0 -0
+ Delete: tests/ntpd/ntp_signd.c
+
+ChangeSet@1.3552, 2015-08-03 08:16:57+02:00, jnperlin@nemesis.localnet
+ [Bug 2889] ntp-dev-4.3.67 does not build on Windows
+
+ ChangeLog@1.1739 +1 -0
+ [Bug 2889] ntp-dev-4.3.67 does not build on Windows
+
+ libntp/msyslog.c@1.52 +2 -2
+ [Bug 2889] ntp-dev-4.3.67 does not build on Windows
+ - fixed a Windows-specific const clash in string processing
+
+ChangeSet@1.3548.1.2, 2015-08-01 22:40:51+02:00, viperus@ubuntu.(none)
+ ntp_signdT.c:
+ MUST ADD #define HAVE_NTP_NAME above the #include "ntp_NAME.c"
+ Makefile.am:
+
+
+ Added test ntp_singd again, renamed it to ntp_signdT (including the original ntp_signd.c doesn't work if you have 2 files with the same name).
+ I included the original ntp_signd.c, so static functions can be tested.
+ Additional .o objects had to be added for everyhting to work.
+
+
+ run-ntp_signdT.c:
+ autogenerated
+
+ tests/ntpd/Makefile.am@1.14 +7 -2
+
+
+ Added test ntp_singd again, renamed it to ntp_signdT (including the original ntp_signd.c doesn't work if you have 2 files with the same name).
+ I included the original ntp_signd.c, so static functions can be tested.
+ Additional .o objects had to be added for everyhting to work.
+
+
+
+ tests/ntpd/ntp_signdT.c@1.2 +17 -2
+ MUST ADD #define HAVE_NTP_NAME above the #include "ntp_NAME.c"
+
+ tests/ntpd/run-ntp_signdT.c@1.2 +2 -2
+ autogenerated
+
+ChangeSet@1.3548.1.1, 2015-08-01 20:49:22+02:00, viperus@ubuntu.(none)
+ Makefile.am:
+ added ntp_signdT
+ ntp_signdT.c, run-ntp_signdT.c:
+ new file
+
+ tests/ntpd/Makefile.am@1.13 +11 -9
+ added ntp_signdT
+
+ tests/ntpd/ntp_signdT.c@1.1 +28 -0
+ new file
+
+ tests/ntpd/ntp_signdT.c@1.0 +0 -0
+
+ tests/ntpd/run-ntp_signdT.c@1.1 +58 -0
+ new file
+
+ tests/ntpd/run-ntp_signdT.c@1.0 +0 -0
+
+ChangeSet@1.3549.1.1, 2015-07-31 07:58:11+00:00, stenn@psp-at1.ntp.org
+ [Bug 2890] Ignore ENOBUFS on routing netlink socket. Konstantin Khlebnikov.
+
+ ChangeLog@1.1736.1.1 +1 -0
+ [Bug 2890] Ignore ENOBUFS on routing netlink socket. Konstantin Khlebnikov.
+
+ ntpd/ntp_io.c@1.405 +9 -4
+ [Bug 2890] Ignore ENOBUFS on routing netlink socket. Konstantin Khlebnikov.
+
+ChangeSet@1.3550, 2015-07-29 22:50:29+02:00, jnperlin@hydra.(none)
+ Bug 2821: minor build issues: fixed refclock_gpsdjson.c
+
+ ChangeLog@1.1737 +1 -0
+ Bug 2821: minor build issues: fixed refclock_gpsdjson.c
+
+ ntpd/refclock_gpsdjson.c@1.23 +9 -9
+ Bug 2821: minor build issues: fixed refclock_gpsdjson.c
+ - 'isprint()' is called with u_char argument
+ - unified 'unsigned char' and 'u_char' to 'u_char'
+
+ChangeSet@1.3549, 2015-07-29 10:04:53+00:00, stenn@psp-at1.ntp.org
+ ChangeLog cleanup
+
+ ChangeLog@1.1736 +5 -3
+ ChangeLog cleanup
+
+ChangeSet@1.3548, 2015-07-29 12:01:10+02:00, viperus@ubuntu.(none)
+ ChangeLog:
+ updated ChangeLog
+
+ ChangeLog@1.1735 +3 -1
+ updated ChangeLog
+
+ChangeSet@1.3529.3.1, 2015-07-29 13:18:47+05:30, loki@dadasgift.(none)
+ ntp_util
+
+ tests/ntpd/Makefile.am@1.6.2.1 +13 -10
+
+ChangeSet@1.3545, 2015-07-28 09:37:25+00:00, stenn@psp-at1.ntp.org
+ update tests/libntp/run-socktoa.c
+
+ tests/libntp/run-socktoa.c@1.8.1.1 +6 -6
+ update tests/libntp/run-socktoa.c
+
+ChangeSet@1.3544, 2015-07-28 09:36:24+00:00, stenn@psp-at1.ntp.org
+ Typo fix for GCC warning suppression. Harlan Stenn.
+
+ ChangeLog@1.1734 +1 -0
+ Typo fix for GCC warning suppression. Harlan Stenn.
+
+ ntpd/ntp_config.c@1.333 +5 -5
+ Typo fix for GCC warning suppression. Harlan Stenn.
+
+ ntpd/ntp_proto.c@1.364 +1 -1
+ Typo fix for GCC warning suppression. Harlan Stenn.
+
+ChangeSet@1.3529.1.18, 2015-07-27 19:46:25+02:00, viperus@ubuntu.(none)
+ Many files:
+ update
+
+ run-leapsec.c:
+ minor change
+ run-ntp_scanner.c, run-decodenetnum.c:
+ update
+ ntp_scanner.c:
+ Added more tests
+ lfptest.h:
+ minor move after merge with lokesh
+ Makefile.am:
+ Merge
+
+ tests/libntp/lfptest.h@1.5.1.2 +0 -16
+ minor move after merge with lokesh
+
+ tests/libntp/run-decodenetnum.c@1.7 +1 -0
+ update
+
+ tests/libntp/run-lfptostr.c@1.6 +11 -11
+ update
+
+
+ tests/libntp/run-netof.c@1.6 +0 -1
+ update
+
+
+ tests/libntp/run-socktoa.c@1.9 +6 -6
+ update
+
+
+ tests/ntpd/Makefile.am@1.6.1.4 +8 -3
+ Merge
+
+ tests/ntpd/ntp_scanner.c@1.2 +30 -2
+ Added more tests
+
+ tests/ntpd/run-leapsec.c@1.4 +9 -3
+ minor change
+
+ tests/ntpd/run-ntp_scanner.c@1.2 +7 -1
+ update
+
+ tests/ntpd/run-ntp_signd.c@1.3 +2 -2
+ update
+
+
+ tests/ntpd/run-rc_cmdlength.c@1.2 +8 -3
+ update
+
+
+ChangeSet@1.3543, 2015-07-27 04:11:08+00:00, stenn@psp-at1.ntp.org
+ [Bug 2595] ntpdate man page quirks. Hal Murray, Harlan Stenn
+
+ ChangeLog@1.1733 +1 -0
+ [Bug 2595] ntpdate man page quirks. Hal Murray, Harlan Stenn
+
+ ntpd/ntp.conf.def@1.19 +1 -1
+ [Bug 2595] ntpdate man page quirks. Hal Murray, Harlan Stenn
+
+ ntpd/ntpd-opts.def@1.13 +5 -1
+ [Bug 2595] ntpdate man page quirks. Hal Murray, Harlan Stenn
+
+ChangeSet@1.3542, 2015-07-27 03:16:04+00:00, stenn@psp-at1.ntp.org
+ [Bug 2625] Deprecate flag1 in local refclock. Hal Murray, Harlan Stenn.
+
+ ChangeLog@1.1732 +1 -0
+ [Bug 2625] Deprecate flag1 in local refclock. Hal Murray, Harlan Stenn.
+
+ ntpd/refclock_local.c@1.21 +2 -16
+ [Bug 2625] Deprecate flag1 in local refclock. Hal Murray, Harlan Stenn.
+
+ChangeSet@1.3540, 2015-07-27 00:07:00+00:00, tflendrich@psp-at1.ntp.org
+ ChangeLog:
+ updated with info about progname and ntp_restrict.c
+
+ ChangeLog@1.1730 +4 -0
+ updated with info about progname and ntp_restrict.c
+
+ChangeSet@1.3529.2.1, 2015-07-26 22:04:07+00:00, stenn@psp-at1.ntp.org
+ [Bug 2817] Stop locking ntpd into memory by default under Linux. H.Stenn.
+
+ ChangeLog@1.1725.1.8 +1 -0
+ [Bug 2817] Stop locking ntpd into memory by default under Linux. H.Stenn.
+
+ sntp/m4/ntp_rlimit.m4@1.2 +5 -1
+ [Bug 2817] Stop locking ntpd into memory by default under Linux. H.Stenn.
+
+ChangeSet@1.3529.1.17, 2015-07-26 21:48:29+02:00, viperus@ubuntu.(none)
+ run-ntp_scanner.c, ntp_scanner.c:
+ new file
+
+ tests/ntpd/ntp_scanner.c@1.1 +29 -0
+ BitKeeper file /home/viperus/Desktop/ntp-stable-unity/tests/ntpd/ntp_scanner.c
+
+ tests/ntpd/ntp_scanner.c@1.0 +0 -0
+
+ tests/ntpd/run-ntp_scanner.c@1.1 +55 -0
+ BitKeeper file /home/viperus/Desktop/ntp-stable-unity/tests/ntpd/run-ntp_scanner.c
+
+ tests/ntpd/run-ntp_scanner.c@1.0 +0 -0
+
+ChangeSet@1.3529.1.16, 2015-07-26 21:34:45+02:00, viperus@ubuntu.(none)
+
+ tests/ntpd/Makefile.am@1.6.1.3 +20 -1
+
+ tests/ntpd/ntp_signd.c@1.2 +3 -1
+
+ tests/ntpd/run-ntp_signd.c@1.2 +9 -3
+
+ChangeSet@1.3529.1.14, 2015-07-26 07:23:22+00:00, stenn@psp-at1.ntp.org
+ update tests/sec-2853/run-sec-2853.
+
+ tests/sec-2853/run-sec-2853.c@1.3.1.1 +4 -5
+ update
+
+ChangeSet@1.3529.1.13, 2015-07-26 07:14:53+00:00, stenn@psp-at1.ntp.org
+ Add std_unity_tests to various Makefile.am files. Harlan Stenn.
+
+ ChangeLog@1.1725.1.7 +1 -0
+ Add std_unity_tests to various Makefile.am files. Harlan Stenn.
+
+ sntp/tests/Makefile.am@1.62 +4 -0
+ Add std_unity_tests to various Makefile.am files. Harlan Stenn.
+
+ tests/libntp/Makefile.am@1.85.1.4 +4 -0
+ Add std_unity_tests to various Makefile.am files. Harlan Stenn.
+
+ tests/ntpd/Makefile.am@1.4.1.1 +4 -0
+ Add std_unity_tests to various Makefile.am files. Harlan Stenn.
+
+ tests/sandbox/Makefile.am@1.6 +4 -0
+ Add std_unity_tests to various Makefile.am files. Harlan Stenn.
+
+ChangeSet@1.3529.1.12, 2015-07-26 06:43:54+00:00, stenn@psp-at1.ntp.org
+ [Bug 2886] Mis-spelling: "outlyer" should be "outlier". dave@horsfall.org
+
+ NEWS@1.145 +10 -0
+ [Bug 2886] Mis-spelling: "outlyer" should be "outlier". dave@horsfall.org
+
+ChangeSet@1.3529.1.11, 2015-07-26 06:37:30+00:00, stenn@psp-at1.ntp.org
+ [Bug 2886] Mis-spelling: "outlyer" should be "outlier". dave@horsfall.org
+
+ ChangeLog@1.1725.1.6 +1 -0
+ [Bug 2886] Mis-spelling: "outlyer" should be "outlier". dave@horsfall.org
+
+ html/decode.html@1.26 +2 -2
+ [Bug 2886] Mis-spelling: "outlyer" should be "outlier". dave@horsfall.org
+
+ html/stats.html@1.4 +24 -24
+ [Bug 2886] Mis-spelling: "outlyer" should be "outlier". dave@horsfall.org
+
+ include/ntp_control.h@1.59 +1 -1
+ [Bug 2886] Mis-spelling: "outlyer" should be "outlier". dave@horsfall.org
+
+ libntp/statestr.c@1.28 +1 -1
+ [Bug 2886] Mis-spelling: "outlyer" should be "outlier". dave@horsfall.org
+
+ ntpd/invoke-ntp.conf.texi@1.189 +2 -2
+ [Bug 2886] Mis-spelling: "outlyer" should be "outlier". dave@horsfall.org
+
+ ntpd/ntp.conf.5man@1.223 +4 -4
+ [Bug 2886] Mis-spelling: "outlyer" should be "outlier". dave@horsfall.org
+
+ ntpd/ntp.conf.5mdoc@1.223 +3 -3
+ [Bug 2886] Mis-spelling: "outlyer" should be "outlier". dave@horsfall.org
+
+ ntpd/ntp.conf.def@1.18 +1 -1
+ [Bug 2886] Mis-spelling: "outlyer" should be "outlier". dave@horsfall.org
+
+ ntpd/ntp.conf.html@1.178 +1522 -1191
+ [Bug 2886] Mis-spelling: "outlyer" should be "outlier". dave@horsfall.org
+
+ ntpd/ntp.conf.man.in@1.223 +4 -4
+ [Bug 2886] Mis-spelling: "outlyer" should be "outlier". dave@horsfall.org
+
+ ntpd/ntp.conf.mdoc.in@1.223 +3 -3
+ [Bug 2886] Mis-spelling: "outlyer" should be "outlier". dave@horsfall.org
+
+ ntpd/ntp_loopfilter.c@1.185 +4 -4
+ [Bug 2886] Mis-spelling: "outlyer" should be "outlier". dave@horsfall.org
+
+ ntpd/ntp_proto.c@1.363 +1 -1
+ [Bug 2886] Mis-spelling: "outlyer" should be "outlier". dave@horsfall.org
+
+ ntpq/libntpq.h@1.10 +1 -1
+ [Bug 2886] Mis-spelling: "outlyer" should be "outlier". dave@horsfall.org
+
+ ntpq/ntpq-subs.c@1.111 +1 -1
+ [Bug 2886] Mis-spelling: "outlyer" should be "outlier". dave@horsfall.org
+
+ChangeSet@1.3537, 2015-07-25 18:08:16+02:00, tomek@tomek-n56vz.(none)
+ Changed "char * progname;" variable to be "char const * progname;", so now it is consistent
+ Many files:
+ changed a variable to be const
+ autogenerated
+
+ adjtimed/adjtimed.c@1.5 +1 -1
+ changed a variable to be const
+
+ clockstuff/chutest.c@1.7 +1 -1
+ changed a variable to be const
+
+ clockstuff/propdelay.c@1.8 +1 -1
+ changed a variable to be const
+
+ libntp/msyslog.c@1.51 +3 -3
+ changed a variable to be const
+
+ libntp/ntp_lineedit.c@1.13 +1 -1
+ changed a variable to be const
+
+ ntpdate/ntpdate.c@1.94 +1 -1
+ changed a variable to be const
+
+ ntpdc/ntpdc.c@1.104 +1 -1
+ changed a variable to be const
+
+ ntpq/ntpq.c@1.160 +1 -1
+ changed a variable to be const
+
+ sntp/log.c@1.23 +1 -1
+ changed a variable to be const
+
+ sntp/log.h@1.12 +1 -1
+ changed a variable to be const
+
+ sntp/tests/run-crypto.c@1.6 +1 -1
+ autogenerated
+
+ sntp/tests/run-keyFile.c@1.9 +1 -1
+ autogenerated
+
+ sntp/tests/run-kodDatabase.c@1.7 +1 -1
+ autogenerated
+
+ sntp/tests/run-kodFile.c@1.7 +1 -1
+ autogenerated
+
+ sntp/tests/run-networking.c@1.3 +1 -1
+ autogenerated
+
+ sntp/tests/run-packetHandling.c@1.6 +1 -1
+ autogenerated
+
+ sntp/tests/run-packetProcessing.c@1.7 +1 -1
+ autogenerated
+
+ sntp/tests/run-utilities.c@1.6 +1 -1
+ autogenerated
+
+ tests/ntpd/run-ntp_restrict.c@1.4 +1 -1
+ autogenerated
+
+ tests/sandbox/run-modetoa.c@1.3 +7 -4
+ autogenerated
+
+ tests/sandbox/run-uglydate.c@1.3 +9 -4
+ autogenerated
+
+ tests/sandbox/run-ut-2803.c@1.2 +7 -4
+ autogenerated
+
+ util/ntp-keygen.c@1.106 +1 -1
+ changed a variable to be const
+
+ util/ntptime.c@1.27 +1 -1
+ changed a variable to be const
+
+ChangeSet@1.3529.1.10, 2015-07-25 16:54:29+02:00, viperus@ubuntu.(none)
+ Many files:
+ added declarations
+
+ lfpfunc.c:
+ adding declarations, reorganizing
+ Many files:
+ adding declarations
+
+ update
+
+ run-clocktime.c:
+ update
+ clocktime.c:
+ adding declarations
+ socktoa.c:
+ added declarations
+
+ tests/libntp/clocktime.c@1.7 +1 -0
+ adding declarations
+
+ tests/libntp/lfpfunc.c@1.13 +28 -7
+ adding declarations, reorganizing
+
+ tests/libntp/netof.c@1.3.1.1 +8 -0
+ adding declarations
+
+
+ tests/libntp/numtoa.c@1.6 +2 -0
+ adding declarations
+
+
+ tests/libntp/numtohost.c@1.5 +2 -0
+ adding declarations
+
+
+ tests/libntp/octtoint.c@1.3.1.1 +10 -0
+ adding declarations
+
+
+ tests/libntp/prettydate.c@1.3 +3 -0
+ adding declarations
+
+
+ tests/libntp/recvbuff.c@1.5 +4 -0
+ adding declarations
+
+
+ tests/libntp/refidsmear.c@1.5 +6 -3
+ adding declarations
+
+
+ tests/libntp/refnumtoa.c@1.5 +4 -0
+ adding declarations
+
+
+ tests/libntp/run-clocktime.c@1.9 +1 -1
+ update
+
+ tests/libntp/run-lfpfunc.c@1.16 +9 -9
+ update
+
+
+ tests/libntp/run-netof.c@1.5 +4 -4
+ update
+
+
+ tests/libntp/run-numtoa.c@1.9 +2 -2
+ update
+
+
+ tests/libntp/run-numtohost.c@1.9 +1 -1
+ update
+
+
+ tests/libntp/run-octtoint.c@1.6 +7 -7
+ update
+
+
+ tests/libntp/run-prettydate.c@1.4 +1 -1
+ update
+
+
+ tests/libntp/run-recvbuff.c@1.4 +3 -3
+ update
+
+
+ tests/libntp/run-refidsmear.c@1.5 +1 -1
+ update
+
+
+ tests/libntp/run-refnumtoa.c@1.7 +2 -2
+ update
+
+
+ tests/libntp/run-sfptostr.c@1.4 +7 -7
+ update
+
+
+ tests/libntp/run-socktoa.c@1.8 +6 -6
+ update
+
+
+ tests/libntp/run-ssl_init.c@1.8 +5 -5
+ update
+
+
+ tests/libntp/run-statestr.c@1.9 +4 -4
+ update
+
+
+ tests/libntp/run-strtolfp.c@1.4 +6 -6
+ update
+
+
+ tests/libntp/run-timespecops.c@1.9 +28 -28
+ update
+
+
+ tests/libntp/run-timevalops.c@1.11 +28 -28
+ update
+
+
+ tests/libntp/run-tstotv.c@1.4 +3 -3
+ update
+
+
+ tests/libntp/run-tvtots.c@1.5 +3 -3
+ update
+
+
+ tests/libntp/run-vi64ops.c@1.7 +3 -3
+ update
+
+
+ tests/libntp/run-ymd2yd.c@1.10 +4 -4
+ update
+
+
+ tests/libntp/sfptostr.c@1.3 +10 -0
+ update
+
+
+ tests/libntp/sockaddrtest.c@1.2 +1 -0
+ update
+
+
+ tests/libntp/socktoa.c@1.3.1.1 +6 -0
+ added declarations
+
+ tests/libntp/ssl_init.c@1.8 +6 -0
+ added declarations
+
+
+ tests/libntp/statestr.c@1.5 +4 -0
+ added declarations
+
+
+ tests/libntp/strtolfp.c@1.2.1.1 +9 -0
+ added declarations
+
+
+ tests/libntp/timespecops.c@1.8 +40 -1
+ added declarations
+
+
+ tests/libntp/timevalops.c@1.11 +37 -1
+ added declarations
+
+
+ tests/libntp/tstotv.c@1.3 +5 -0
+ added declarations
+
+
+ tests/libntp/tvtots.c@1.5 +3 -0
+ added declarations
+
+
+ tests/libntp/vi64ops.c@1.6 +6 -0
+ added declarations
+
+
+ tests/libntp/ymd2yd.c@1.6 +5 -0
+ added declarations
+
+
+ChangeSet@1.3536, 2015-07-25 02:08:32+02:00, tomek@tomek-n56vz.(none)
+ run-ntp_restrict.c:
+ autogenerated, but modified manually...
+ Makefile.am:
+ removed something not longer in use
+ ntp_restrict.c:
+ added another test
+ run-ntp_restrict.c, run-ntp_prio_q.c, run-sec-2853.c, run-bug-2803.c:
+ autogenerated
+
+ tests/bug-2803/run-bug-2803.c@1.8 +8 -4
+ autogenerated
+
+ tests/ntpd/Makefile.am@1.9 +0 -3
+ removed something not longer in use
+
+ tests/ntpd/ntp_restrict.c@1.2 +17 -4
+ added another test
+
+ tests/ntpd/run-ntp_prio_q.c@1.2 +9 -4
+ autogenerated
+
+ tests/ntpd/run-ntp_restrict.c@1.3 +1 -1
+ autogenerated, but modified manually...
+
+ tests/ntpd/run-ntp_restrict.c@1.2 +8 -4
+ autogenerated
+
+ tests/sec-2853/run-sec-2853.c@1.4 +5 -6
+ autogenerated
+
+ChangeSet@1.3529.1.9, 2015-07-24 18:38:05+02:00, viperus@ubuntu.(none)
+ calendar.c:
+ added function declarations + minor comment fixes
+
+ Many files:
+ added declarations
+
+ updated
+
+ run-buftvtots.c, run-calendar.c:
+ update
+ lfptest.c:
+ added #include
+ buftvtots.c:
+ added function declarations
+ caljulian.c:
+ added declarations
+ run-caljulian.c:
+ updated
+
+ tests/libntp/buftvtots.c@1.4 +4 -0
+ added function declarations
+
+ tests/libntp/calendar.c@1.6 +42 -18
+ added function declarations + minor comment fixes
+
+
+ tests/libntp/caljulian.c@1.9 +10 -0
+ added declarations
+
+ tests/libntp/caltontp.c@1.3 +5 -0
+ added declarations
+
+
+ tests/libntp/calyearstart.c@1.4 +5 -0
+ added declarations
+
+
+ tests/libntp/clocktime.c@1.6 +11 -0
+ added declarations
+
+
+ tests/libntp/decodenetnum.c@1.3.1.1 +7 -0
+ added declarations
+
+
+ tests/libntp/hextoint.c@1.4 +6 -0
+ added declarations
+
+
+ tests/libntp/hextolfp.c@1.5.1.1 +7 -0
+ added declarations
+
+
+ tests/libntp/humandate.c@1.5 +4 -0
+ added declarations
+
+
+ tests/libntp/lfpfunc.c@1.12 +13 -0
+ added declarations
+
+
+ tests/libntp/lfptest.c@1.2 +1 -0
+ added #include
+
+ tests/libntp/lfptostr.c@1.3.1.1 +15 -0
+ added declarations
+
+
+ tests/libntp/modetoa.c@1.7 +3 -0
+ added declarations
+
+
+ tests/libntp/msyslog.c@1.6 +10 -0
+ added declarations
+
+
+ tests/libntp/run-buftvtots.c@1.5 +10 -10
+ update
+
+ tests/libntp/run-calendar.c@1.8 +11 -11
+ update
+
+ tests/libntp/run-caljulian.c@1.12 +4 -4
+ updated
+
+ tests/libntp/run-caltontp.c@1.4 +4 -4
+ updated
+
+
+ tests/libntp/run-calyearstart.c@1.6 +3 -3
+ updated
+
+
+ tests/libntp/run-clocktime.c@1.8 +8 -8
+ updated
+
+
+ tests/libntp/run-decodenetnum.c@1.6 +6 -6
+ updated
+
+
+ tests/libntp/run-hextoint.c@1.8 +5 -5
+ updated
+
+
+ tests/libntp/run-hextolfp.c@1.7 +6 -6
+ updated
+
+
+ tests/libntp/run-humandate.c@1.5 +2 -2
+ updated
+
+
+ tests/libntp/run-lfpfunc.c@1.15 +9 -9
+ updated
+
+
+ tests/libntp/run-lfptostr.c@1.5 +10 -10
+ updated
+
+
+ tests/libntp/run-modetoa.c@1.10 +2 -2
+ updated
+
+
+ tests/libntp/run-msyslog.c@1.7 +8 -8
+ updated
+
+
+ChangeSet@1.3523.2.7, 2015-07-24 12:01:24+05:30, loki@dadasgift.(none)
+ ntp signd testing
+
+ tests/ntpd/ntp_signd.c@1.1 +24 -0
+ BitKeeper file /home/loki/ntp_gsoc/2_damir_code/ntp-stable-unity/tests/ntpd/ntp_signd.c
+
+ tests/ntpd/ntp_signd.c@1.0 +0 -0
+
+ChangeSet@1.3523.2.6, 2015-07-24 11:55:00+05:30, loki@dadasgift.(none)
+ ntp_signd test changes
+
+ tests/ntpd/Makefile.am@1.6.1.1 +21 -0
+
+ tests/ntpd/run-ntp_signd.c@1.1 +52 -0
+ BitKeeper file /home/loki/ntp_gsoc/2_damir_code/ntp-stable-unity/tests/ntpd/run-ntp_signd.c
+
+ tests/ntpd/run-ntp_signd.c@1.0 +0 -0
+
+ChangeSet@1.3535, 2015-07-23 19:19:08+02:00, tomek@tomek-n56vz.(none)
+ Wrote tests for ntpd/ntp_restrict.c
+ ntp_restrict.c, run-ntp_restrict.c:
+ new file
+ Makefile.am:
+ added ntp_restrict.c test
+ ntp_restrict.c:
+ added assertions (I prefer them to a segfault)
+
+ ntpd/ntp_restrict.c@1.39 +6 -0
+ added assertions (I prefer them to a segfault)
+
+ tests/ntpd/Makefile.am@1.8 +25 -0
+ added ntp_restrict.c test
+
+ tests/ntpd/ntp_restrict.c@1.1 +185 -0
+ BitKeeper file /home/tomek/ntp/ntpd_tests/ntp-stable-unity/tests/ntpd/ntp_restrict.c
+
+ tests/ntpd/ntp_restrict.c@1.0 +0 -0
+
+ tests/ntpd/run-ntp_restrict.c@1.1 +64 -0
+ BitKeeper file /home/tomek/ntp/ntpd_tests/ntp-stable-unity/tests/ntpd/run-ntp_restrict.c
+
+ tests/ntpd/run-ntp_restrict.c@1.0 +0 -0
+
+ChangeSet@1.3529.1.8, 2015-07-23 18:37:16+02:00, viperus@ubuntu.(none)
+ reduced number of warnings in sntp/tests/
+
+ sntp/tests/crypto.c@1.9 +6 -0
+ added declarations for tests
+
+ sntp/tests/fileHandlingTest.c@1.2 +1 -1
+ commented out unnecessary array
+
+ sntp/tests/keyFile.c@1.7 +4 -0
+ added declarations for tests
+
+
+ sntp/tests/kodDatabase.c@1.7 +6 -0
+ added declarations for tests
+
+
+ sntp/tests/kodFile.c@1.8 +8 -0
+ added declarations for tests
+
+
+ sntp/tests/nameresolution.c@1.2 +3 -0
+ added declarations for tests
+
+
+ sntp/tests/packetHandling.c@1.5 +13 -0
+ added declarations for tests
+
+
+ sntp/tests/packetProcessing.c@1.7 +24 -0
+ added declarations for tests
+
+
+ sntp/tests/run-crypto.c@1.5 +5 -5
+ added declarations for tests
+
+
+ sntp/tests/run-keyFile.c@1.8 +4 -4
+ updated
+
+ sntp/tests/run-kodDatabase.c@1.6 +5 -5
+ updated
+
+ sntp/tests/run-kodFile.c@1.6 +6 -6
+ updated
+
+ sntp/tests/run-packetHandling.c@1.5 +10 -10
+ updated
+
+ sntp/tests/run-packetProcessing.c@1.6 +18 -18
+ updated
+
+ sntp/tests/run-utilities.c@1.5 +7 -7
+ updated
+
+ sntp/tests/utilities.c@1.4 +12 -0
+ added declarations for tests
+
+
+ChangeSet@1.3529.1.7, 2015-07-22 20:09:39+02:00, viperus@ubuntu.(none)
+ Updated unity ruby testRunner generator with mark's latest fixes. Modified tests/libntp/Makefile.am and sntp/tests/Makefile.am accordingly. Also, split some .h files into .h and .c because they contained declarations and definitions which caused error in the newly generated test runners. Started fixing some warnings. We can add both declarations and defitions in a single test.c file without any issues now. Autogenerated tests will be run in order of the declarations in the test file.
+
+ sntp/tests/Makefile.am@1.61 +4 -0
+ New ruby generator script required some changes. Removed some definitions form header files and created their own .c files.
+
+ sntp/tests/crypto.c@1.8 +2 -0
+ started adding declarations at the top of the file
+
+ sntp/tests/fileHandlingTest.c@1.1 +74 -0
+ new file. Contains definitions from fileHandlingTest.h.in
+
+ sntp/tests/fileHandlingTest.c@1.0 +0 -0
+
+ sntp/tests/fileHandlingTest.h.in@1.14 +7 -46
+ changes stuff a bit, to work with the updated ruby generator
+
+ sntp/tests/keyFile.c@1.6 +4 -0
+ added declarations to avoid warnings
+
+ sntp/tests/run-crypto.c@1.4 +12 -9
+ updated autogenerated code
+
+ sntp/tests/run-keyFile.c@1.7 +12 -8
+ updated autogenerated code
+
+
+ sntp/tests/run-kodDatabase.c@1.5 +9 -3
+ updated autogenerated code
+
+
+ sntp/tests/run-kodFile.c@1.5 +7 -3
+ updated autogenerated code
+
+
+ sntp/tests/run-networking.c@1.2 +5 -2
+ updated autogenerated code
+
+
+ sntp/tests/run-packetHandling.c@1.4 +11 -3
+ updated autogenerated code
+
+
+ sntp/tests/run-packetProcessing.c@1.5 +6 -3
+ updated autogenerated code
+
+
+ sntp/tests/run-utilities.c@1.4 +8 -3
+ updated autogenerated code
+
+
+ sntp/tests/sntptest.c@1.1 +33 -0
+ definitions placed from .h to .c
+
+ sntp/tests/sntptest.c@1.0 +0 -0
+
+ sntp/tests/sntptest.h@1.6 +0 -29
+ added sntptest.c and put definitions in it.
+
+ sntp/unity/auto/generate_test_runner.rb@1.9 +3 -3
+ some changes were needed after mark's update to work better with NTP
+
+ sntp/unity/auto/generate_test_runner.rb@1.8 +209 -110
+ updated the ruby script with new stuff from Mark
+
+ sntp/unity/auto/parseOutput.rb@1.1 +191 -0
+ mark's new file from the update
+
+ sntp/unity/auto/parseOutput.rb@1.0 +0 -0
+
+ sntp/unity/auto/type_sanitizer.rb@1.1 +8 -0
+ mark's new file from the update
+
+
+ sntp/unity/auto/type_sanitizer.rb@1.0 +0 -0
+
+ sntp/unity/auto/unity_test_summary.py@1.1 +135 -0
+ mark's new file from the update
+
+
+ sntp/unity/auto/unity_test_summary.py@1.0 +0 -0
+
+ sntp/unity/auto/unity_test_summary.rb@1.3 +48 -25
+ added Marks new changes
+
+ tests/libntp/Makefile.am@1.85.1.3 +7 -0
+ New ruby generator script required some changes. Removed some definitions form header files and created their own .c files.
+
+
+ tests/libntp/a_md5encrypt.c@1.11 +8 -0
+ added declarations
+
+ tests/libntp/atoint.c@1.4 +9 -0
+ added declarations
+
+
+ tests/libntp/atouint.c@1.5 +8 -0
+ added declarations
+
+
+ tests/libntp/authkeys.c@1.10 +17 -6
+ added declarations
+
+
+ tests/libntp/lfptest.c@1.1 +10 -0
+ new file, contains definitions from lfptest.h
+
+ tests/libntp/lfptest.c@1.0 +0 -0
+
+ tests/libntp/lfptest.h@1.4.1.3 +2 -8
+ split to .h and .c which now contains definitions
+
+ tests/libntp/run-a_md5encrypt.c@1.13 +9 -7
+ autogenerated file update
+
+ tests/libntp/run-atoint.c@1.7 +10 -7
+ autogenerated file update
+
+
+ tests/libntp/run-atouint.c@1.8 +10 -7
+ autogenerated file update
+
+
+ tests/libntp/run-authkeys.c@1.10 +12 -9
+ autogenerated file update
+
+
+ tests/libntp/run-buftvtots.c@1.4 +8 -3
+ autogenerated file update
+
+
+ tests/libntp/run-calendar.c@1.7 +6 -3
+ autogenerated file update
+
+
+ tests/libntp/run-caljulian.c@1.11 +7 -3
+ autogenerated file update
+
+
+ tests/libntp/run-caltontp.c@1.3 +4 -3
+ autogenerated file update
+
+
+ tests/libntp/run-calyearstart.c@1.5 +6 -3
+ autogenerated file update
+
+
+ tests/libntp/run-clocktime.c@1.7 +6 -3
+ autogenerated file update
+
+
+ tests/libntp/run-decodenetnum.c@1.5 +5 -3
+ autogenerated file update
+
+
+ tests/libntp/run-hextoint.c@1.7 +6 -2
+ autogenerated file update
+
+
+ tests/libntp/run-hextolfp.c@1.6 +6 -3
+ autogenerated file update
+
+
+ tests/libntp/run-humandate.c@1.4 +5 -3
+ autogenerated file update
+
+
+ tests/libntp/run-lfpfunc.c@1.14 +7 -3
+ autogenerated file update
+
+
+ tests/libntp/run-lfptostr.c@1.4 +5 -3
+ autogenerated file update
+
+
+ tests/libntp/run-modetoa.c@1.9 +4 -3
+ autogenerated file update
+
+
+ tests/libntp/run-msyslog.c@1.6 +4 -3
+ autogenerated file update
+
+
+ tests/libntp/run-netof.c@1.4 +6 -3
+ autogenerated file update
+
+
+ tests/libntp/run-numtoa.c@1.8 +5 -3
+ autogenerated file update
+
+
+ tests/libntp/run-numtohost.c@1.8 +5 -3
+ autogenerated file update
+
+
+ tests/libntp/run-octtoint.c@1.5 +4 -2
+ autogenerated file update
+
+
+ tests/libntp/run-prettydate.c@1.3 +6 -2
+ autogenerated file update
+
+
+ tests/libntp/run-recvbuff.c@1.3 +4 -2
+ autogenerated file update
+
+
+ tests/libntp/run-refidsmear.c@1.4 +7 -3
+ autogenerated file update
+
+
+ tests/libntp/run-refnumtoa.c@1.6 +5 -3
+ autogenerated file update
+
+
+ tests/libntp/run-sfptostr.c@1.3 +4 -3
+ autogenerated file update
+
+
+ tests/libntp/run-socktoa.c@1.7 +6 -2
+ autogenerated file update
+
+
+ tests/libntp/run-ssl_init.c@1.7 +4 -3
+ autogenerated file update
+
+
+ tests/libntp/run-statestr.c@1.8 +6 -3
+ autogenerated file update
+
+
+ tests/libntp/run-strtolfp.c@1.3 +6 -2
+ autogenerated file update
+
+
+ tests/libntp/run-timespecops.c@1.8 +8 -3
+ autogenerated file update
+
+
+ tests/libntp/run-timevalops.c@1.10 +7 -3
+ autogenerated file update
+
+
+ tests/libntp/run-tstotv.c@1.3 +5 -2
+ autogenerated file update
+
+
+ tests/libntp/run-tvtots.c@1.4 +6 -3
+ autogenerated file update
+
+
+ tests/libntp/run-uglydate.c@1.9 +6 -4
+ autogenerated file update
+
+
+ tests/libntp/run-vi64ops.c@1.6 +5 -3
+ autogenerated file update
+
+
+ tests/libntp/run-ymd2yd.c@1.9 +4 -3
+ autogenerated file update
+
+
+ tests/libntp/sockaddrtest.c@1.1 +50 -0
+ New file created by splitting sockaddrtest.h.
+
+ tests/libntp/sockaddrtest.c@1.0 +0 -0
+
+ tests/libntp/sockaddrtest.h@1.6 +4 -45
+ removed definitions and placed them in sockaddrtest.c
+
+ tests/libntp/uglydate.c@1.7 +1 -0
+ added some declarations to test the new generator. Unfinished
+
+ChangeSet@1.3523.3.18, 2015-07-21 06:47:23+00:00, stenn@psp-deb1.ntp.org
+ [Bug 2883] ntpd crashes on exit with empty driftfile. Miroslav Lichvar.
+
+ ChangeLog@1.1708.1.19 +1 -0
+ [Bug 2883] ntpd crashes on exit with empty driftfile. Miroslav Lichvar.
+
+ ntpd/ntp_parser.c@1.98 +1141 -1381
+ [Bug 2883] ntpd crashes on exit with empty driftfile. Miroslav Lichvar.
+
+ ntpd/ntp_parser.h@1.63 +216 -230
+ [Bug 2883] ntpd crashes on exit with empty driftfile. Miroslav Lichvar.
+
+ ntpd/ntp_parser.y@1.88 +1 -1
+ [Bug 2883] ntpd crashes on exit with empty driftfile. Miroslav Lichvar.
+
+ChangeSet@1.3523.3.17, 2015-07-20 07:32:09+00:00, stenn@psp-at1.ntp.org
+ ntpd/ntp_peer.c:newpeer(): added a DEBUG_REQUIRE(srcadr). Harlan Stenn.
+
+ ChangeLog@1.1708.1.18 +1 -0
+ ntpd/ntp_peer.c:newpeer(): added a DEBUG_REQUIRE(srcadr). Harlan Stenn.
+
+ ntpd/ntp_peer.c@1.158 +2 -0
+ ntpd/ntp_peer.c:newpeer(): added a DEBUG_REQUIRE(srcadr). Harlan Stenn.
+
+ChangeSet@1.3523.3.16, 2015-07-20 07:20:04+00:00, stenn@psp-at1.ntp.org
+ [Bug 2849] Systems with more than one default route may never synchronize. Brian Utterback.
+
+ ChangeLog@1.1708.1.17 +3 -0
+ [Bug 2849] Systems with more than one default route may never synchronize. Brian Utterback.
+
+ ntpd/ntp_peer.c@1.157 +7 -3
+ [Bug 2849] Systems with more than one default route may never synchronize. Brian Utterback.
+
+ChangeSet@1.3523.3.15, 2015-07-20 06:38:37+00:00, stenn@psp-at1.ntp.org
+ util/ntptime.c: initialization nit. Harlan Stenn.
+
+ ChangeLog@1.1708.1.16 +1 -0
+ util/ntptime.c: initialization nit. Harlan Stenn.
+
+ util/ntptime.c@1.26 +1 -1
+ util/ntptime.c: initialization nit. Harlan Stenn.
+
+ChangeSet@1.3523.3.14, 2015-07-19 21:49:06-04:00, stenn@deacon.udel.edu
+ Typo
+
+ ChangeLog@1.1708.1.15 +1 -1
+ Typo
+
+ChangeSet@1.3523.3.13, 2015-07-19 21:46:59-04:00, stenn@deacon.udel.edu
+ libntp/icom.c: Typos fix. Harlan Stenn.
+
+ ChangeLog@1.1708.1.14 +1 -0
+ libntp/icom.c: Typos fix. Harlan Stenn.
+
+ libntp/icom.c@1.20 +1 -1
+ libntp/icom.c: Typos fix. Harlan Stenn.
+
+ChangeSet@1.3523.3.12, 2015-07-19 05:37:40+00:00, stenn@psp-at1.ntp.org
+ Code cleanup. Harlan Stenn.
+
+ ChangeLog@1.1708.1.13 +1 -0
+ Code cleanup. Harlan Stenn.
+
+ include/Makefile.am@1.52 +1 -0
+ Code cleanup. Harlan Stenn.
+
+ include/rc_cmdlength.h@1.1 +2 -0
+ BitKeeper file /a/etc/amd.stage/thump2-g3/export/ntp/home/stenn/ntp-stable/include/rc_cmdlength.h
+
+ include/rc_cmdlength.h@1.0 +0 -0
+
+ libntp/audio.c@1.36 +8 -5
+ Code cleanup. Harlan Stenn.
+
+ libntp/icom.c@1.19 +23 -7
+ Code cleanup. Harlan Stenn.
+
+ libntp/ntp_worker.c@1.5 +1 -1
+ Code cleanup. Harlan Stenn.
+
+ ntpd/ntp_config.c@1.332 +10 -0
+ Code cleanup. Harlan Stenn.
+
+ ntpd/ntp_control.c@1.203 +1 -2
+ Code cleanup. Harlan Stenn.
+
+ ntpd/ntp_crypto.c@1.181 +1 -1
+ Code cleanup. Harlan Stenn.
+
+ ntpd/ntp_monitor.c@1.44 +4 -0
+ Code cleanup. Harlan Stenn.
+
+ ntpd/ntp_peer.c@1.156 +1 -0
+ Code cleanup. Harlan Stenn.
+
+ ntpd/ntp_proto.c@1.362 +3 -1
+ Code cleanup. Harlan Stenn.
+
+ ntpd/ntp_restrict.c@1.38 +4 -0
+ Code cleanup. Harlan Stenn.
+
+ ntpd/rc_cmdlength.c@1.2 +1 -0
+ Code cleanup. Harlan Stenn.
+
+ ntpd/refclock_arc.c@1.33 +1 -1
+ Code cleanup. Harlan Stenn.
+
+ ntpd/refclock_chu.c@1.57 +1 -1
+ Code cleanup. Harlan Stenn.
+
+ ntpd/refclock_nmea.c@1.78 +4 -3
+ Code cleanup. Harlan Stenn.
+
+ ntpd/refclock_parse.c@1.81 +3 -0
+ Code cleanup. Harlan Stenn.
+
+ ntpd/refclock_wwv.c@1.80 +4 -2
+ Code cleanup. Harlan Stenn.
+
+ ntpq/ntpq.c@1.159 +0 -1
+ Code cleanup. Harlan Stenn.
+
+ sntp/networking.c@1.66 +1 -1
+ Code cleanup. Harlan Stenn.
+
+ tests/sec-2853/run-sec-2853.c@1.3 +2 -2
+ Code cleanup. Harlan Stenn.
+
+ tests/sec-2853/sec-2853.c@1.5 +2 -2
+ Code cleanup. Harlan Stenn.
+
+ util/ntp-keygen.c@1.105 +2 -2
+ Code cleanup. Harlan Stenn.
+
+ChangeSet@1.3523.3.11, 2015-07-16 07:37:32+00:00, stenn@psp-at1.ntp.org
+ Get rid of the NTP_ prefix on our assertion macros. Harlan Stenn.
+
+ ChangeLog@1.1708.1.12 +1 -0
+ Get rid of the NTP_ prefix on our assertion macros. Harlan Stenn.
+
+ include/ntp_assert.h@1.9 +0 -4
+ Get rid of the NTP_ prefix on our assertion macros. Harlan Stenn.
+
+ include/ntp_lists.h@1.15 +3 -3
+ Get rid of the NTP_ prefix on our assertion macros. Harlan Stenn.
+
+ libntp/atolfp.c@1.6 +1 -1
+ Get rid of the NTP_ prefix on our assertion macros. Harlan Stenn.
+
+ libntp/caljulian.c@1.16 +1 -1
+ Get rid of the NTP_ prefix on our assertion macros. Harlan Stenn.
+
+ libntp/caltontp.c@1.7 +8 -8
+ Get rid of the NTP_ prefix on our assertion macros. Harlan Stenn.
+
+ libntp/decodenetnum.c@1.17 +3 -3
+ Get rid of the NTP_ prefix on our assertion macros. Harlan Stenn.
+
+ libntp/msyslog.c@1.50 +1 -1
+ Get rid of the NTP_ prefix on our assertion macros. Harlan Stenn.
+
+ libntp/ntp_intres.c@1.99 +12 -12
+ Get rid of the NTP_ prefix on our assertion macros. Harlan Stenn.
+
+ libntp/ntp_rfc2553.c@1.48 +1 -1
+ Get rid of the NTP_ prefix on our assertion macros. Harlan Stenn.
+
+ libntp/prettydate.c@1.20 +1 -1
+ Get rid of the NTP_ prefix on our assertion macros. Harlan Stenn.
+
+ libntp/recvbuff.c@1.40 +1 -1
+ Get rid of the NTP_ prefix on our assertion macros. Harlan Stenn.
+
+ libntp/socket.c@1.10 +2 -2
+ Get rid of the NTP_ prefix on our assertion macros. Harlan Stenn.
+
+ libntp/socktohost.c@1.15 +1 -1
+ Get rid of the NTP_ prefix on our assertion macros. Harlan Stenn.
+
+ ntpd/ntp_config.c@1.331 +7 -8
+ Get rid of the NTP_ prefix on our assertion macros. Harlan Stenn.
+
+ ntpd/ntp_control.c@1.202 +18 -18
+ Get rid of the NTP_ prefix on our assertion macros. Harlan Stenn.
+
+ ntpd/ntp_crypto.c@1.180 +14 -14
+ Get rid of the NTP_ prefix on our assertion macros. Harlan Stenn.
+
+ ntpd/ntp_io.c@1.404 +15 -15
+ Get rid of the NTP_ prefix on our assertion macros. Harlan Stenn.
+
+ ntpd/ntp_monitor.c@1.43 +1 -1
+ Get rid of the NTP_ prefix on our assertion macros. Harlan Stenn.
+
+ ntpd/ntp_peer.c@1.155 +1 -1
+ Get rid of the NTP_ prefix on our assertion macros. Harlan Stenn.
+
+ ntpd/ntp_refclock.c@1.120 +1 -1
+ Get rid of the NTP_ prefix on our assertion macros. Harlan Stenn.
+
+ ntpd/ntp_restrict.c@1.37 +9 -9
+ Get rid of the NTP_ prefix on our assertion macros. Harlan Stenn.
+
+ ntpdc/ntpdc.c@1.103 +1 -1
+ Get rid of the NTP_ prefix on our assertion macros. Harlan Stenn.
+
+ ntpq/ntpq-subs.c@1.110 +7 -7
+ Get rid of the NTP_ prefix on our assertion macros. Harlan Stenn.
+
+ ports/winnt/libntp/termios.c@1.31 +1 -1
+ Get rid of the NTP_ prefix on our assertion macros. Harlan Stenn.
+
+ ports/winnt/ntpd/nt_clockstuff.c@1.66 +1 -1
+ Get rid of the NTP_ prefix on our assertion macros. Harlan Stenn.
+
+ ports/winnt/ntpd/ntp_iocompletionport.c@1.71 +7 -8
+ Get rid of the NTP_ prefix on our assertion macros. Harlan Stenn.
+
+ChangeSet@1.3523.3.10, 2015-07-13 04:28:29+00:00, stenn@psp-at1.ntp.org
+ [Bug 2823] ntpsweep with recursive peers option doesn't work. H.Stenn.
+
+ ChangeLog@1.1708.1.11 +1 -0
+ [Bug 2823] ntpsweep with recursive peers option doesn't work. H.Stenn.
+
+ scripts/ntpsweep/ntpsweep.in@1.9 +2 -1
+ [Bug 2823] ntpsweep with recursive peers option doesn't work. H.Stenn.
+
+ChangeSet@1.3523.3.9, 2015-07-13 04:18:36+00:00, stenn@psp-at1.ntp.org
+ scripts/lib/NTP/Util.pm: stratum output is version-dependent. Harlan Stenn.
+
+ ChangeLog@1.1708.1.10 +1 -0
+ scripts/lib/NTP/Util.pm: stratum output is version-dependent. Harlan Stenn.
+
+ scripts/lib/NTP/Util.pm@1.5 +8 -1
+ scripts/lib/NTP/Util.pm: stratum output is version-dependent. Harlan Stenn.
+
+ChangeSet@1.3531, 2015-07-13 04:21:50+02:00, tomek@tomek-n56vz.(none)
+ wrote tests for ntpd/ntp_prio_q.c
+
+ Makefile.am:
+ added ntp_prio_q.c
+ ntp_prio_q.c, run-ntp_prio_q.c:
+ new file
+ ChangeLog:
+ added info about the test of ntpd/ntp_prio_q.c
+
+ ChangeLog@1.1726 +1 -0
+ added info about the test of ntpd/ntp_prio_q.c
+
+ tests/ntpd/Makefile.am@1.7 +28 -0
+ added ntp_prio_q.c
+
+ tests/ntpd/ntp_prio_q.c@1.1 +261 -0
+ BitKeeper file /home/tomek/ntp/ntpd_tests/ntp-stable-unity/tests/ntpd/ntp_prio_q.c
+
+ tests/ntpd/ntp_prio_q.c@1.0 +0 -0
+
+ tests/ntpd/run-ntp_prio_q.c@1.1 +64 -0
+ BitKeeper file /home/tomek/ntp/ntpd_tests/ntp-stable-unity/tests/ntpd/run-ntp_prio_q.c
+
+ tests/ntpd/run-ntp_prio_q.c@1.0 +0 -0
+
+ChangeSet@1.3523.2.5, 2015-07-12 22:59:46+05:30, loki@dadasgift.(none)
+ rc_cmdlength test
+
+ tests/ntpd/rc_cmdlength.c@1.2 +20 -4
+
+ tests/ntpd/run-rc_cmdlength.c@1.1 +52 -0
+ BitKeeper file /home/loki/ntp_gsoc/2_damir_code/ntp-stable-unity/tests/ntpd/run-rc_cmdlength.c
+
+ tests/ntpd/run-rc_cmdlength.c@1.0 +0 -0
+
+ChangeSet@1.3523.3.8, 2015-07-11 19:20:33-04:00, stenn@deacon.udel.edu
+ br-flock: --enable-local-libevent. Harlan Stenn.
+
+ ChangeLog@1.1708.1.9 +1 -0
+ br-flock: --enable-local-libevent. Harlan Stenn.
+
+ br-flock@1.17 +1 -1
+ br-flock: --enable-local-libevent. Harlan Stenn.
+
+ChangeSet@1.3523.3.7, 2015-07-11 18:46:20-04:00, stenn@deacon.udel.edu
+ [Bug 2875] libevent is improperly bundled in the tarball
+
+ Makefile.am@1.133 +1 -1
+ [Bug 2875] libevent is improperly bundled in the tarball
+
+ChangeSet@1.3523.4.1, 2015-07-11 20:28:26+00:00, stenn@psp-at1.ntp.org
+ [Bug 2875] sntp/Makefile.am: Get rid of DIST_SUBDIRS. libevent must be configured for the distribution targets. Harlan Stenn.
+
+ ChangeLog@1.1708.2.1 +2 -0
+ [Bug 2875] sntp/Makefile.am: Get rid of DIST_SUBDIRS. libevent must be configured for the distribution targets. Harlan Stenn.
+
+ sntp/Makefile.am@1.86 +13 -24
+ [Bug 2875] sntp/Makefile.am: Get rid of DIST_SUBDIRS. libevent must be configured for the distribution targets. Harlan Stenn.
+
+ChangeSet@1.3523.2.4, 2015-07-11 00:19:36+05:30, loki@dadasgift.(none)
+ rc_cmdlength testing
+
+ tests/ntpd/Makefile.am@1.6 +20 -0
+
+ tests/ntpd/rc_cmdlength.c@1.1 +22 -0
+ BitKeeper file /home/loki/ntp_gsoc/2_damir_code/ntp-stable-unity/tests/ntpd/rc_cmdlength.c
+
+ tests/ntpd/rc_cmdlength.c@1.0 +0 -0
+
+ChangeSet@1.3523.3.5, 2015-07-09 09:03:46+00:00, stenn@psp-at1.ntp.org
+ tests/libntp/test_caltontp needs -lpthread. Harlan Stenn.
+
+ ChangeLog@1.1708.1.7 +1 -0
+ tests/libntp/test_caltontp needs -lpthread. Harlan Stenn.
+
+ tests/libntp/Makefile.am@1.85.1.2 +5 -0
+ tests/libntp/test_caltontp needs -lpthread. Harlan Stenn.
+
+ChangeSet@1.3523.3.4, 2015-07-09 03:42:45-04:00, stenn@deacon.udel.edu
+ Don't build sntp/libevent/sample/. Harlan Stenn.
+
+ ChangeLog@1.1708.1.6 +1 -0
+ Don't build sntp/libevent/sample/. Harlan Stenn.
+
+ sntp/libevent/Makefile.am@1.14 +1 -1
+ Don't build sntp/libevent/sample/. Harlan Stenn.
+
+ChangeSet@1.3523.3.3, 2015-07-09 06:06:50+00:00, stenn@psp-at1.ntp.org
+ Phase 1 deprecation of google test in tests/libntp/. Harlan Stenn.
+
+ ChangeLog@1.1708.1.5 +1 -0
+ Phase 1 deprecation of google test in tests/libntp/. Harlan Stenn.
+
+ tests/libntp/Makefile.am@1.85.1.1 +113 -408
+ Phase 1 deprecation of google test in tests/libntp/. Harlan Stenn.
+
+ChangeSet@1.3527, 2015-07-09 04:25:01+02:00, tomek@tomek-n56vz.(none)
+ lfptest.h:
+ now it uses NTP's conventions
+ ChangeLog:
+ add info about lfptest.h
+ test-libntp.c:
+ fixed formatting
+ sockaddrtest.h:
+ formatting fix
+ kodDatabase.c:
+ formatting, adding const, adding a missing library
+ ChangeLog:
+ added info about timespecops.c
+ kodFile.c:
+ formatting, changes to usage of unity macros to get better print messages, cleanup
+ crypto.c, lfptest.h:
+ cleanup
+ ChangeLog:
+ add info about test-libntp.c
+ timespecops.c:
+ further formatting changes
+ ChangeLog:
+ added info about timevalops.c
+ fileHandlingTest.h.in:
+ fixed buffer overflow problem and fixed one function that previously did nothing
+ timevalops.c:
+ fixed the order of includes, deleted unnecessary
+ packetProcessing.c:
+ formatting, sprintf->snprintf
+ packetHandling.c:
+ formatting, using better unity functions, using proper unity functions, deleting unused variable
+ keyFile.c:
+ formatting, using proper unity's macros
+ ChangeLog:
+ fileHandlingTest.h info
+ updating with info about sockaddrtest.h
+ timespecops.c:
+ forgot to delete one comment
+ ChangeLog:
+ added info about my code review changes in sntp/tests/
+ kodDatabase.c:
+ missed something in formatting
+ sntptest.h:
+ formatting
+ Many files:
+ autogenerated
+ kodDatabase.c:
+ added a header. now it's windows compliant too!
+ fileHandlingTest.h.in:
+ formatting, deleted unnecessary prints
+ timespecops.c:
+ fixed formatting, fixed the order of includes,
+ removed unnecessary comments, cleanup
+ utilities.c:
+ the order of includes, formatting, removing unnecessary comments, using proper unity assertions
+
+ ChangeLog@1.1723 +2 -1
+ fileHandlingTest.h info
+
+ ChangeLog@1.1722 +17 -0
+ added info about my code review changes in sntp/tests/
+
+ ChangeLog@1.1721 +1 -0
+ add info about test-libntp.c
+
+ ChangeLog@1.1720 +2 -0
+ updating with info about sockaddrtest.h
+
+ ChangeLog@1.1719 +1 -0
+ add info about lfptest.h
+
+ ChangeLog@1.1718 +2 -0
+ added info about timevalops.c
+
+ ChangeLog@1.1717 +3 -1
+ added info about timespecops.c
+
+ sntp/tests/crypto.c@1.7 +14 -8
+ cleanup
+
+ sntp/tests/fileHandlingTest.h.in@1.13 +6 -6
+ fixed buffer overflow problem and fixed one function that previously did nothing
+
+ sntp/tests/fileHandlingTest.h.in@1.12 +13 -39
+ formatting, deleted unnecessary prints
+
+ sntp/tests/keyFile.c@1.5 +33 -24
+ formatting, using proper unity's macros
+
+ sntp/tests/kodDatabase.c@1.6 +1 -1
+ added a header. now it's windows compliant too!
+
+ sntp/tests/kodDatabase.c@1.5 +1 -2
+ missed something in formatting
+
+ sntp/tests/kodDatabase.c@1.4 +39 -31
+ formatting, adding const, adding a missing library
+
+ sntp/tests/kodFile.c@1.7 +34 -32
+ formatting, changes to usage of unity macros to get better print messages, cleanup
+
+ sntp/tests/packetHandling.c@1.4 +46 -31
+ formatting, using better unity functions, using proper unity functions, deleting unused variable
+
+ sntp/tests/packetProcessing.c@1.6 +67 -25
+ formatting, sprintf->snprintf
+
+ sntp/tests/run-crypto.c@1.3 +6 -6
+ autogenerated
+
+ sntp/tests/run-keyFile.c@1.6 +5 -5
+ autogenerated
+
+ sntp/tests/run-kodDatabase.c@1.4 +5 -5
+ autogenerated
+
+ sntp/tests/run-kodDatabase.c@1.3 +4 -4
+ autogenerated
+
+ sntp/tests/run-kodFile.c@1.4 +5 -5
+ autogenerated
+
+ sntp/tests/run-packetHandling.c@1.3 +10 -10
+ autogenerated
+
+ sntp/tests/run-packetProcessing.c@1.4 +18 -18
+ autogenerated
+
+ sntp/tests/run-utilities.c@1.3 +7 -7
+ autogenerated
+
+ sntp/tests/sntptest.h@1.5 +9 -3
+ formatting
+
+ sntp/tests/utilities.c@1.3 +38 -20
+ the order of includes, formatting, removing unnecessary comments, using proper unity assertions
+
+ tests/libntp/lfptest.h@1.4.1.2 +2 -3
+ now it uses NTP's conventions
+
+ tests/libntp/lfptest.h@1.4.1.1 +7 -16
+ cleanup
+
+ tests/libntp/run-timespecops.c@1.5.1.3 +28 -28
+ autogenerated
+
+ tests/libntp/run-timespecops.c@1.5.1.2 +28 -28
+ autogenerated
+
+ tests/libntp/run-timespecops.c@1.5.1.1 +28 -28
+ autogenerated
+
+ tests/libntp/run-timevalops.c@1.7.1.1 +28 -28
+ autogenerated
+
+ tests/libntp/sockaddrtest.h@1.5 +6 -5
+ formatting fix
+
+ tests/libntp/test-libntp.c@1.10 +6 -11
+ fixed formatting
+
+ tests/libntp/timespecops.c@1.5.1.3 +7 -6
+ further formatting changes
+
+ tests/libntp/timespecops.c@1.5.1.2 +0 -1
+ forgot to delete one comment
+
+ tests/libntp/timespecops.c@1.5.1.1 +129 -85
+ fixed formatting, fixed the order of includes,
+ removed unnecessary comments, cleanup
+
+ tests/libntp/timevalops.c@1.8.1.1 +137 -87
+ fixed the order of includes, deleted unnecessary
+
+ChangeSet@1.3523.3.2, 2015-07-07 01:27:49+00:00, stenn@psp-at1.ntp.org
+ sntp/unity/unity.c: Clean up a printf(). Harlan Stenn
+
+ ChangeLog@1.1708.1.4 +1 -0
+ sntp/unity/unity.c: Clean up a printf(). Harlan Stenn
+
+ sntp/unity/unity.c@1.3 +1 -3
+ sntp/unity/unity.c: Clean up a printf(). Harlan Stenn
+
+ChangeSet@1.3523.3.1, 2015-07-07 01:21:36+00:00, stenn@psp-at1.ntp.org
+ [Bug 2873] libevent should not include .deps/ in the tarball. H.Stenn
+
+ ChangeLog@1.1708.1.3 +1 -0
+ [Bug 2873] libevent should not include .deps/ in the tarball. H.Stenn
+
+ sntp/Makefile.am@1.85 +1 -1
+ [Bug 2873] libevent should not include .deps/ in the tarball. H.Stenn
+
+ChangeSet@1.3523.2.2, 2015-07-06 20:30:39+05:30, loki@dadasgift.(none)
+ code review changes
+
+ tests/libntp/lfptest.h@1.5 +7 -6
+
+ tests/libntp/strtolfp.c@1.3 +20 -19
+
+ChangeSet@1.3514.1.2, 2015-07-06 19:55:50+05:30, loki@dadasgift.(none)
+ Code review changes
+
+ tests/libntp/decodenetnum.c@1.2.1.1 +13 -9
+
+ tests/libntp/hextolfp.c@1.4.1.1 +0 -1
+
+ tests/libntp/lfptostr.c@1.2.1.1 +23 -12
+
+ tests/libntp/netof.c@1.4 +9 -6
+
+ tests/libntp/octtoint.c@1.4 +14 -7
+
+ tests/libntp/socktoa.c@1.4 +16 -13
+
+ChangeSet@1.3523.1.3, 2015-07-06 08:37:13+00:00, stenn@psp-at1.ntp.org
+ [Bug 2874] Don't distribute generated sntp/tests/fileHandlingTest.h. H.Stenn
+
+ ChangeLog@1.1708.1.2 +1 -0
+ [Bug 2874] Don't distribute generated sntp/tests/fileHandlingTest.h. H.Stenn
+
+ sntp/tests/Makefile.am@1.60 +0 -1
+ [Bug 2874] Don't distribute generated sntp/tests/fileHandlingTest.h. H.Stenn
+
+ChangeSet@1.3523.1.2, 2015-07-06 08:31:19+00:00, stenn@psp-at1.ntp.org
+ update tests/libntp/run-lfpfunc.c
+
+ tests/libntp/run-lfpfunc.c@1.13 +9 -9
+ update
+
+ChangeSet@1.3523.1.1, 2015-07-06 05:48:25+00:00, stenn@psp-at1.ntp.org
+ sntp/unity/Makefile.am: fix some broken paths. Harlan Stenn.
+
+ ChangeLog@1.1708.1.1 +1 -0
+ sntp/unity/Makefile.am: fix some broken paths. Harlan Stenn.
+
+ sntp/tests/Makefile.am@1.59 +4 -4
+ sntp/unity/Makefile.am: fix some broken paths. Harlan Stenn.
+
+ChangeSet@1.3524, 2015-07-05 23:58:57+02:00, tomek@tomek-n56vz.(none)
+ vi64ops.c:
+ deleted a comment
+ ymd2yd.c:
+ fixed formatting, deleted empty setUp() and tearDown()
+ ssl_init.c:
+ fixed formatting
+ ChangeLog:
+ updated the changes to vi64ops.c
+ vi64ops.c:
+ fixed formatting (trailing spaces, the order of includes, return type of a function in a new line)
+ ChangeLog:
+ info about tvtots.c
+ ymd2yd.c:
+ removed an include
+ ChangeLog:
+ info about ymd2yd.c
+ uglydate.c:
+ removed an unnecessary include
+ ChangeLog:
+ info about uglydate.c
+ statestr.c:
+ deleted unnecessary empty functions, fixed formatting, removed an unnecessary include
+ ChangeLog:
+ info about vi64ops.c
+ tvtots.c:
+ fixed a bug, fixed formatting
+ Many files:
+ autogenerated
+
+ ChangeLog@1.1714 +2 -3
+ info about ymd2yd.c
+
+ ChangeLog@1.1713 +2 -0
+ info about ymd2yd.c
+
+ ChangeLog@1.1712 +2 -1
+ updated the changes to vi64ops.c
+
+ ChangeLog@1.1711 +1 -0
+ info about vi64ops.c
+
+ ChangeLog@1.1710 +1 -0
+ info about uglydate.c
+
+ ChangeLog@1.1709 +4 -0
+ info about tvtots.c
+
+ tests/libntp/run-ssl_init.c@1.6 +5 -5
+ autogenerated
+
+ tests/libntp/run-statestr.c@1.7 +5 -4
+ autogenerated
+
+ tests/libntp/run-tvtots.c@1.3 +4 -3
+ autogenerated
+
+ tests/libntp/run-uglydate.c@1.8 +2 -1
+ autogenerated
+
+ tests/libntp/run-vi64ops.c@1.5 +3 -3
+ autogenerated
+
+ tests/libntp/run-ymd2yd.c@1.8 +4 -4
+ autogenerated
+
+ tests/libntp/run-ymd2yd.c@1.7 +5 -4
+ autogenerated
+
+ tests/libntp/ssl_init.c@1.7 +11 -6
+ fixed formatting
+
+ tests/libntp/statestr.c@1.4 +12 -15
+ deleted unnecessary empty functions, fixed formatting, removed an unnecessary include
+
+ tests/libntp/tvtots.c@1.4 +12 -5
+ fixed a bug, fixed formatting
+
+ tests/libntp/uglydate.c@1.6 +0 -1
+ removed an unnecessary include
+
+ tests/libntp/vi64ops.c@1.5 +1 -1
+ deleted a comment
+
+ tests/libntp/vi64ops.c@1.4 +17 -14
+ fixed formatting (trailing spaces, the order of includes, return type of a function in a new line)
+
+ tests/libntp/ymd2yd.c@1.5 +0 -1
+ removed an include
+
+ tests/libntp/ymd2yd.c@1.4 +14 -16
+ fixed formatting, deleted empty setUp() and tearDown()
+
+ChangeSet@1.3523, 2015-07-05 18:41:36+02:00, tomek@tomek-n56vz.(none)
+ refnumtoa.c:
+ fixed formatting
+ numtoa.c:
+ remove unnecessary empty functions, fix formatting
+ lfpfunc.c:
+ remove unnecessary include, remove old comments, fix formatting, cleanup
+ numtohost.c:
+ added const, fixed formatting
+ lfptostr.c:
+ fix formatting, delete an include
+ lfpfunc.c:
+ removed an endline
+ ChangeLog:
+ update with new changes to numtoa.c
+ numtoa.c:
+ added "const"
+ ChangeLog:
+ changes with numtohost.c
+ added changes to lfpfunc.c
+ add info about numtoa.c
+ updated with modetoa.c changes
+ add info about lfptostr.c
+ msyslog.c, modetoa.c:
+ fix formatting
+ Many files:
+ autogenerated
+ ChangeLog:
+ add info about msyslog.c
+ lfpfunc.c:
+ added spaces after the commas
+ ChangeLog:
+ updated info about refnumtoa.c
+
+ ChangeLog@1.1708 +1 -0
+ updated info about refnumtoa.c
+
+ ChangeLog@1.1707 +1 -0
+ changes with numtohost.c
+
+ ChangeLog@1.1706 +2 -2
+ update with new changes to numtoa.c
+
+ ChangeLog@1.1705 +2 -0
+ add info about numtoa.c
+
+ ChangeLog@1.1704 +1 -0
+ add info about msyslog.c
+
+ ChangeLog@1.1703 +1 -0
+ updated with modetoa.c changes
+
+ ChangeLog@1.1702 +3 -1
+ add info about lfptostr.c
+
+ ChangeLog@1.1701 +2 -0
+ added changes to lfpfunc.c
+
+ tests/libntp/lfpfunc.c@1.11 +0 -2
+ removed an endline
+
+ tests/libntp/lfpfunc.c@1.10 +55 -55
+ added spaces after the commas
+
+ tests/libntp/lfpfunc.c@1.9 +100 -188
+ remove unnecessary include, remove old comments, fix formatting, cleanup
+
+ tests/libntp/lfptostr.c@1.3 +20 -13
+ fix formatting, delete an include
+
+ tests/libntp/modetoa.c@1.6 +5 -5
+ fix formatting
+
+ tests/libntp/msyslog.c@1.5 +11 -2
+ fix formatting
+
+ tests/libntp/numtoa.c@1.5 +3 -3
+ added "const"
+
+ tests/libntp/numtoa.c@1.4 +12 -20
+ remove unnecessary empty functions, fix formatting
+
+ tests/libntp/numtohost.c@1.4 +3 -4
+ added const, fixed formatting
+
+ tests/libntp/refnumtoa.c@1.4 +10 -12
+ fixed formatting
+
+ tests/libntp/run-lfpfunc.c@1.12 +9 -9
+ autogenerated
+
+ tests/libntp/run-lfptostr.c@1.3 +11 -10
+ autogenerated
+
+ tests/libntp/run-modetoa.c@1.8 +2 -1
+ autogenerated
+
+ tests/libntp/run-msyslog.c@1.5 +8 -8
+ autogenerated
+
+ tests/libntp/run-numtoa.c@1.7 +3 -2
+ autogenerated
+
+ tests/libntp/run-numtohost.c@1.7 +1 -0
+ autogenerated
+
+ tests/libntp/run-refnumtoa.c@1.5 +1 -1
+ autogenerated
+
+ChangeSet@1.3514.2.2, 2015-07-04 21:58:49+00:00, stenn@psp-at1.ntp.org
+ sntp/libevent/evconfig-private.h: remove generated filefrom SCM. H.Stenn.
+
+ BitKeeper/deleted/42/evconfig-private.h~c311ed41afa56d3b@1.2 +0 -0
+ Delete: sntp/libevent/evconfig-private.h
+
+ ChangeLog@1.1695.1.2 +1 -0
+ sntp/libevent/evconfig-private.h: remove generated filefrom SCM. H.Stenn.
+
+ChangeSet@1.3514.2.1, 2015-07-04 21:44:33+00:00, stenn@psp-at1.ntp.org
+ sntp/unity/unity_config.h: Distribute it. Harlan Stenn.
+
+ ChangeLog@1.1695.1.1 +1 -0
+ sntp/unity/unity_config.h: Distribute it. Harlan Stenn.
+
+ sntp/unity/Makefile.am@1.6.1.1 +1 -0
+ sntp/unity/unity_config.h: Distribute it. Harlan Stenn.
+
+ChangeSet@1.3513.1.1, 2015-07-04 23:32:08+02:00, viperus@ubuntu.(none)
+ timevalops.c:
+ added timevaltoa() and fixed the printfs
+ timespecops.c:
+ added timespectoa() and fixed the printfs
+
+ tests/libntp/run-timespecops.c@1.6 +28 -28
+
+ tests/libntp/run-timevalops.c@1.8 +28 -28
+
+ tests/libntp/timespecops.c@1.6 +58 -1
+ added timespectoa() and fixed the printfs
+
+ tests/libntp/timevalops.c@1.9 +53 -1
+ added timevaltoa() and fixed the printfs
+
+ChangeSet@1.3520, 2015-07-04 14:10:34+00:00, tflendrich@psp-deb1.ntp.org
+ ChangeLog:
+ updated my changes
+
+ ChangeLog@1.1698 +1 -0
+ updated my changs
+
+ChangeSet@1.3519, 2015-07-04 15:41:50+02:00, tomek@tomek-n56vz.(none)
+ ChangeLog:
+ updated to match my changes
+
+ ChangeLog@1.1697 +3 -3
+ updated to match my changes
+
+ChangeSet@1.3518, 2015-07-04 15:39:51+02:00, tomek@tomek-n56vz.(none)
+ humandate.c:
+ reordered code so that it is C90-compilant, renamed variables so that they are different that function names, fixed formatting to match NTP's convention
+ hextolfp.c:
+ removed a trailing endline, changed formatting to match NTP's convention,
+ decodenetnum.c:
+ changed the order of imports, removed an unnecessary import, removed a trailing space, changed the return type from a function to be in a new line
+ run-humandate.c, run-hextolfp.c, run-decodenetnum.c:
+ autogenerated
+
+ tests/libntp/decodenetnum.c@1.3 +16 -11
+ changed the order of imports, removed an unnecessary import, removed a trailing space, changed the return type from a function to be in a new line
+
+ tests/libntp/hextolfp.c@1.5 +12 -7
+ removed a trailing endline, changed formatting to match NTP's convention,
+
+ tests/libntp/humandate.c@1.4 +11 -9
+ reordered code so that it is C90-compilant, renamed variables so that they are different that function names, fixed formatting to match NTP's convention
+
+ tests/libntp/run-decodenetnum.c@1.4 +5 -5
+ autogenerated
+
+ tests/libntp/run-hextolfp.c@1.5 +6 -6
+ autogenerated
+
+ tests/libntp/run-humandate.c@1.3 +3 -2
+ autogenerated
+
+ChangeSet@1.3517, 2015-07-04 12:38:08+00:00, tflendrich@psp-deb1.ntp.org
+ Makefile.am:
+ adding a forgotten header, so that "make distcheck" works
+
+ sntp/unity/Makefile.am@1.7 +1 -0
+ adding a forgotten header, so that "make distcheck" works
+
+ChangeSet@1.3516, 2015-07-04 11:55:26+00:00, tflendrich@psp-deb1.ntp.org
+ ChangeLog:
+ updated with my changes
+
+ ChangeLog@1.1696 +4 -0
+ updated with my changes
+
+ChangeSet@1.3499.1.1, 2015-07-04 13:39:28+02:00, tomek@tomek-n56vz.(none)
+ buftvtots.c:
+ fix formatting, declarations before code (C90)
+ authkeys.c:
+ fixed formatting, removed unnecessary comment
+ calendar.c:
+ further cleanup: deleted unnecessary comments, made first declaration, then code
+ clocktime.c:
+ removed comments, fixed formatting
+ a_md5encrypt.c:
+ fix formatting, add (void) as argument to a function etc
+ caltontp.c:
+ fixed the order of #includes
+ run-buftvtots.c, run-a_md5encrypt.c:
+ adding autogenerated file
+ calendar.c:
+ deleted comments, fixed formatting, used snprintf instead of sprintf, change variable names to be meaningful,
+ caljulian.c:
+ changed sprintf to snprintf, fixed formatting etc
+ a_md5encrypt.c:
+ changed to first declaration, then code (C90 compatibility)
+ Many files:
+ autogenerated
+ authkeys.c:
+ further changes of formatting
+
+ tests/libntp/a_md5encrypt.c@1.9 +8 -3
+ changed to first declaration, then code (C90 compatibility)
+
+ tests/libntp/a_md5encrypt.c@1.8 +17 -21
+ fix formatting, add (void) as argument to a function etc
+
+ tests/libntp/authkeys.c@1.8 +20 -10
+ further changes of formatting
+
+ tests/libntp/authkeys.c@1.7 +5 -11
+ fixed formatting, removed unnecessary comment
+
+ tests/libntp/buftvtots.c@1.2 +10 -7
+ fix formatting, declarations before code (C90)
+
+ tests/libntp/calendar.c@1.4 +12 -7
+ further cleanup: deleted unnecessary comments, made first declaration, then code
+
+ tests/libntp/calendar.c@1.3 +121 -114
+ deleted comments, fixed formatting, used snprintf instead of sprintf, change variable names to be meaningful,
+
+ tests/libntp/caljulian.c@1.7 +41 -39
+ changed sprintf to snprintf, fixed formatting etc
+
+ tests/libntp/caltontp.c@1.2 +1 -1
+ fixed the order of #includes
+
+ tests/libntp/clocktime.c@1.4 +24 -15
+ removed comments, fixed formatting
+
+ tests/libntp/run-a_md5encrypt.c@1.11 +4 -4
+ adding autogenerated file
+
+ tests/libntp/run-a_md5encrypt.c@1.10 +10 -10
+ adding autogenerated file
+
+ tests/libntp/run-authkeys.c@1.8 +6 -5
+ autogenerated
+
+ tests/libntp/run-buftvtots.c@1.2 +9 -8
+ adding autogenerated file
+
+ tests/libntp/run-calendar.c@1.5 +10 -10
+ autogenerated
+
+ tests/libntp/run-calendar.c@1.4 +22 -21
+ autogenerated
+
+ tests/libntp/run-caljulian.c@1.9 +7 -7
+ autogenerated
+
+ tests/libntp/run-caltontp.c@1.2 +1 -0
+ autogenerated
+
+ tests/libntp/run-clocktime.c@1.5 +17 -16
+ autogenerated
+
+ChangeSet@1.3514, 2015-07-04 10:24:57+00:00, viperus@psp-at1.ntp.org
+ cleanup
+
+ ChangeLog@1.1695 +2 -3
+ cleanup
+
+ChangeSet@1.3512, 2015-07-04 12:19:42+02:00, viperus@ubuntu.(none)
+ fixes to unsigned printing in timespecops.c and timevalops.c
+
+ tests/libntp/timespecops.c@1.5 +1 -1
+
+ tests/libntp/timevalops.c@1.8 +1 -1
+
+ChangeSet@1.3511, 2015-07-04 12:15:31+02:00, viperus@ubuntu.(none)
+ ChangeLog:
+ added my changes
+ timespecops.c:
+ many fixes, better printfs etc.
+ minor fixes to printf, formatting, etc.
+ timevalops.c:
+ minor fixes to printf, formatting, etc.
+
+ ChangeLog@1.1692.1.1 +3 -0
+ added my changes
+
+ tests/libntp/run-timespecops.c@1.5 +28 -28
+
+ tests/libntp/run-timevalops.c@1.7 +28 -28
+
+ tests/libntp/timespecops.c@1.4 +7 -13
+ many fixes, better printfs etc.
+ minor fixes to printf, formatting, etc.
+
+ tests/libntp/timevalops.c@1.7 +5 -9
+ minor fixes to printf, formatting, etc.
+
+ChangeSet@1.3509.1.1, 2015-07-04 09:34:18+00:00, stenn@psp-at1.ntp.org
+ [Bug 2866] segmentation fault at initgroups(). Harlan Stenn.
+
+ ChangeLog@1.1693 +1 -0
+ [Bug 2866] segmentation fault at initgroups(). Harlan Stenn.
+
+ ntpd/ntpd.c@1.160 +11 -4
+ [Bug 2866] segmentation fault at initgroups(). Harlan Stenn.
+
+ChangeSet@1.3510, 2015-07-04 11:27:04+02:00, viperus@ubuntu.(none)
+ sockaddrtest.h:
+ fully converted some tricky cout to printf (af_inet, sockaddr etc.)
+
+ tests/libntp/sockaddrtest.h@1.4 +3 -7
+ fully converted some tricky cout to printf (af_inet, sockaddr etc.)
+
+ChangeSet@1.3505.1.3, 2015-07-04 09:19:48+00:00, stenn@psp-at1.ntp.org
+ sntp/unity/unity_internals.h: handle *INTPTR_MAX on old Solaris. Harlan Stenn.
+
+ ChangeLog@1.1690.1.2 +1 -0
+ sntp/unity/unity_internals.h: handle *INTPTR_MAX on old Solaris. Harlan Stenn.
+
+ sntp/unity/unity_internals.h@1.4 +6 -6
+ sntp/unity/unity_internals.h: handle *INTPTR_MAX on old Solaris. Harlan Stenn.
+
+ChangeSet@1.3505.1.2, 2015-07-04 09:16:51+00:00, stenn@psp-at1.ntp.org
+ sntp/unity/unity_config.h: handle stdint.h. Harlan Stenn.
+
+ ChangeLog@1.1690.1.1 +1 -0
+ sntp/unity/unity_config.h: handle stdint.h. Harlan Stenn.
+
+ sntp/unity/unity_config.h@1.2 +4 -0
+ sntp/unity/unity_config.h: handle stdint.h. Harlan Stenn.
+
+ChangeSet@1.3508, 2015-07-04 09:11:47+00:00, stenn@psp-at1.ntp.org
+ tests/{libntp,ntpd} function parameter cleanup from Damir
+
+ ChangeLog@1.1691 +2 -0
+ tests/{libntp,ntpd} function parameter cleanup from Damir
+
+ChangeSet@1.3505.1.1, 2015-07-04 08:56:15+00:00, stenn@psp-at1.ntp.org
+ Update sntp/tests/run-crypto.c
+
+ sntp/tests/run-crypto.c@1.2 +6 -6
+ Update sntp/tests/run-crypto.c
+
+ChangeSet@1.3504.1.2, 2015-07-04 10:38:08+02:00, viperus@ubuntu.(none)
+ minor fixes, adding void, cleanup...
+
+ tests/libntp/a_md5encrypt.c@1.7.1.1 +5 -5
+
+ tests/libntp/atouint.c@1.4 +5 -5
+
+ tests/libntp/authkeys.c@1.6.1.1 +6 -6
+
+ tests/libntp/buftvtots.c@1.1.1.1 +4 -4
+
+ tests/libntp/calendar.c@1.2.1.1 +27 -32
+
+ tests/libntp/caljulian.c@1.6.1.1 +6 -8
+
+ tests/libntp/calyearstart.c@1.3 +6 -6
+
+ tests/libntp/clocktime.c@1.3.1.1 +10 -10
+
+ tests/libntp/lfpfunc.c@1.8 +9 -10
+
+ tests/libntp/lfptest.h@1.4 +2 -0
+
+ tests/libntp/msyslog.c@1.4 +0 -1
+
+ tests/libntp/refnumtoa.c@1.3 +2 -2
+
+ tests/libntp/run-a_md5encrypt.c@1.9.1.1 +5 -5
+
+ tests/libntp/run-atouint.c@1.7 +6 -5
+
+ tests/libntp/run-authkeys.c@1.7.1.1 +7 -6
+
+ tests/libntp/run-buftvtots.c@1.1.1.1 +5 -4
+
+ tests/libntp/run-calendar.c@1.3.1.1 +23 -22
+
+ tests/libntp/run-caljulian.c@1.8.1.1 +8 -8
+
+ tests/libntp/run-calyearstart.c@1.4 +4 -3
+
+ tests/libntp/run-clocktime.c@1.4.1.1 +9 -8
+
+ tests/libntp/run-lfpfunc.c@1.11 +17 -17
+
+ tests/libntp/run-msyslog.c@1.4 +8 -8
+
+ tests/libntp/run-refidsmear.c@1.3 +1 -1
+
+ tests/libntp/run-refnumtoa.c@1.4 +3 -2
+
+ tests/libntp/run-ssl_init.c@1.5 +6 -5
+
+ tests/libntp/run-timespecops.c@1.4 +29 -28
+
+ tests/libntp/run-timevalops.c@1.6 +29 -28
+
+ tests/libntp/run-vi64ops.c@1.4 +6 -6
+
+ tests/libntp/ssl_init.c@1.6 +5 -5
+
+ tests/libntp/timespecops.c@1.3 +28 -28
+
+ tests/libntp/timevalops.c@1.6 +37 -37
+
+ tests/libntp/vi64ops.c@1.3 +10 -11
+
+ChangeSet@1.3504.1.1, 2015-07-04 10:08:41+02:00, viperus@ubuntu.(none)
+ minor warning fixes, adding voids etc.
+
+ tests/ntpd/leapsec.c@1.3 +40 -45
+
+ tests/ntpd/run-leapsec.c@1.3 +66 -66
+
+ChangeSet@1.3505, 2015-07-04 08:08:23+00:00, stenn@psp-at1.ntp.org
+ sntp/tests/ function parameter list cleanup. Damir Tomi\xc4\x87.
+
+ ChangeLog@1.1690 +1 -0
+ sntp/tests/ function parameter list cleanup. Damir Tomi\xc4\x87.
+
+ChangeSet@1.3504, 2015-07-04 09:49:26+02:00, viperus@ubuntu.(none)
+ minor warning fixes like adding void etc.
+
+ sntp/tests/crypto.c@1.6 +1 -0
+
+ sntp/tests/keyFile.c@1.4 +5 -5
+
+ sntp/tests/kodDatabase.c@1.3 +5 -5
+
+ sntp/tests/kodFile.c@1.6 +8 -8
+
+ sntp/tests/packetProcessing.c@1.5 +2 -2
+
+ sntp/tests/run-keyFile.c@1.5 +6 -5
+
+ sntp/tests/run-kodDatabase.c@1.2 +6 -5
+
+ sntp/tests/run-kodFile.c@1.3 +7 -6
+
+ sntp/tests/run-utilities.c@1.2 +14 -14
+
+ sntp/tests/sntptest.h@1.4 +6 -3
+
+ sntp/tests/utilities.c@1.2 +7 -9
+
+ChangeSet@1.3503, 2015-07-04 07:25:15+00:00, stenn@psp-at1.ntp.org
+ top_srcdir can change based on ntp v. sntp. Harlan Stenn.
+
+ ChangeLog@1.1689 +1 -0
+ top_srcdir can change based on ntp v. sntp. Harlan Stenn.
+
+ sntp/tests/Makefile.am@1.58 +1 -1
+ top_srcdir can change based on ntp v. sntp. Harlan Stenn.
+
+ChangeSet@1.3502, 2015-07-04 00:44:41-04:00, stenn@deacon.udel.edu
+ On some versions of HP-UX, inttypes.h does not include stdint.h. H.Stenn.
+
+ ChangeLog@1.1688 +1 -0
+ On some versions of HP-UX, inttypes.h does not include stdint.h. H.Stenn.
+
+ include/ntp_types.h@1.35 +2 -1
+ On some versions of HP-UX, inttypes.h does not include stdint.h. H.Stenn.
+
+ChangeSet@1.3501, 2015-07-04 03:49:10+00:00, stenn@psp-at1.ntp.org
+ Phase 1 deprecation of google test in sntp/tests/. Harlan Stenn.
+
+ ChangeLog@1.1687 +1 -0
+ Phase 1 deprecation of google test in sntp/tests/. Harlan Stenn.
+
+ sntp/tests/Makefile.am@1.57 +20 -97
+ Phase 1 deprecation of google test in sntp/tests/. Harlan Stenn.
+
+ChangeSet@1.3500, 2015-07-03 20:30:06+00:00, stenn@psp-fb1.ntp.org
+ tests/ntpd/g_leapsec.cpp typo fix. Harlan Stenn.
+
+ ChangeLog@1.1686 +1 -0
+ tests/ntpd/g_leapsec.cpp typo fix. Harlan Stenn.
+
+ tests/ntpd/g_leapsec.cpp@1.16 +1 -1
+ tests/ntpd/g_leapsec.cpp typo fix. Harlan Stenn.
+
+ChangeSet@1.3498, 2015-07-03 19:27:53+00:00, stenn@psp-at1.ntp.org
+ Put Unity CPPFLAGS items in unity_config.h. Harlan Stenn.
+
+ ChangeLog@1.1685 +1 -0
+ Put Unity CPPFLAGS items in unity_config.h. Harlan Stenn.
+
+ sntp/tests/Makefile.am@1.56 +4 -2
+ Put Unity CPPFLAGS items in unity_config.h. Harlan Stenn.
+
+ sntp/unity/Makefile.am@1.6 +1 -1
+ Put Unity CPPFLAGS items in unity_config.h. Harlan Stenn.
+
+ sntp/unity/unity_config.h@1.1 +8 -0
+ BitKeeper file /a/etc/amd.stage/thump2-g3/export/ntp/home/stenn/ntp-stable-unity/sntp/unity/unity_config.h
+
+ sntp/unity/unity_config.h@1.0 +0 -0
+
+ tests/bug-2803/Makefile.am@1.13 +2 -0
+ Put Unity CPPFLAGS items in unity_config.h. Harlan Stenn.
+
+ tests/libntp/Makefile.am@1.83.1.1 +2 -4
+ Put Unity CPPFLAGS items in unity_config.h. Harlan Stenn.
+
+ tests/ntpd/Makefile.am@1.1.1.1 +2 -0
+ Put Unity CPPFLAGS items in unity_config.h. Harlan Stenn.
+
+ tests/sandbox/Makefile.am@1.5 +2 -0
+ Put Unity CPPFLAGS items in unity_config.h. Harlan Stenn.
+
+ tests/sandbox/smeartest.c@1.3.1.3 +12 -0
+ Put Unity CPPFLAGS items in unity_config.h. Harlan Stenn.
+
+ tests/sec-2853/Makefile.am@1.3 +2 -0
+ Put Unity CPPFLAGS items in unity_config.h. Harlan Stenn.
+
+ChangeSet@1.3497, 2015-07-03 09:30:02+00:00, stenn@psp-at1.ntp.org
+ libntp/emalloc.c: Remove explicit include of stdint.h. Harlan Stenn.
+
+ ChangeLog@1.1684 +1 -0
+ libntp/emalloc.c: Remove explicit include of stdint.h. Harlan Stenn.
+
+ libntp/emalloc.c@1.19 +0 -2
+ libntp/emalloc.c: Remove explicit include of stdint.h. Harlan Stenn.
+
+ChangeSet@1.3492.1.3, 2015-07-02 09:34:06+00:00, stenn@psp-at1.ntp.org
+ Fix ChangeLog
+
+ ChangeLog@1.1680.1.2 +3 -1
+ Fix ChangeLog
+
+ChangeSet@1.3495, 2015-07-02 09:32:14+00:00, stenn@psp-at1.ntp.org
+ Fix ChangeLog
+
+ ChangeLog@1.1682 +3 -1
+ Fix ChangeLog
+
+ChangeSet@1.3473.1.23, 2015-07-01 10:06:49+02:00, viperus@ubuntu.(none)
+ leapsec.c:
+ added include to fix everything, yey!
+ Makefile.am:
+ changed the order of libntp.a and libntpd.a, stuff builds now
+
+ tests/ntpd/Makefile.am@1.3 +11 -9
+ changed the order of libntp.a and libntpd.a, stuff builds now
+
+ tests/ntpd/leapsec.c@1.2 +8 -4
+ added include to fix everything, yey!
+
+ tests/ntpd/run-leapsec.c@1.2 +33 -33
+
+ChangeSet@1.3473.1.22, 2015-07-01 09:31:35+02:00, viperus@ubuntu.(none)
+ g_leapsec.cpp:
+ Rename: tests/ntpd/leapsec.cpp -> tests/ntpd/g_leapsec.cpp
+ run-leapsec.c, leapsec.c:
+ new file
+ Makefile.am:
+ added /tests/ntpd/ dir
+ unity tests
+ removed a comment line
+ g_ntpdtest.h:
+ Rename: tests/ntpd/ntpdtest.h -> tests/ntpd/g_ntpdtest.h
+ Makefile.am:
+ added support for unity tests
+ test-libntp.h:
+ added new headers
+ g_ntpdtest.cpp:
+ minor change in the header name
+ Rename: tests/ntpd/ntpdtest.cpp -> tests/ntpd/g_ntpdtest.cpp
+
+ tests/Makefile.am@1.9.1.1 +6 -5
+ added /tests/ntpd/ dir
+ unity tests
+
+ tests/libntp/Makefile.am@1.84 +0 -1
+ removed a comment line
+
+ tests/libntp/test-libntp.h@1.7 +5 -0
+ added new headers
+
+ tests/ntpd/Makefile.am@1.2 +62 -6
+ added support for unity tests
+
+ tests/ntpd/g_leapsec.cpp@1.15 +0 -0
+ Rename: tests/ntpd/leapsec.cpp -> tests/ntpd/g_leapsec.cpp
+
+ tests/ntpd/g_ntpdtest.cpp@1.3 +1 -1
+ minor change in the header name
+
+ tests/ntpd/g_ntpdtest.cpp@1.2 +0 -0
+ Rename: tests/ntpd/ntpdtest.cpp -> tests/ntpd/g_ntpdtest.cpp
+
+ tests/ntpd/g_ntpdtest.h@1.2 +0 -0
+ Rename: tests/ntpd/ntpdtest.h -> tests/ntpd/g_ntpdtest.h
+
+ tests/ntpd/leapsec.c@1.1 +1230 -0
+ BitKeeper file /home/viperus/Desktop/ntp-stable-unity/tests/ntpd/leapsec.c
+
+ tests/ntpd/leapsec.c@1.0 +0 -0
+
+ tests/ntpd/run-leapsec.c@1.1 +116 -0
+ BitKeeper file /home/viperus/Desktop/ntp-stable-unity/tests/ntpd/run-leapsec.c
+
+ tests/ntpd/run-leapsec.c@1.0 +0 -0
+
+ChangeSet@1.3492.2.1, 2015-07-01 03:11:28-04:00, stenn@deacon.udel.edu
+ Update the repo's description and contact email
+
+ BitKeeper/etc/config@1.11 +2 -2
+ Update the repo's description and contact email
+
+ChangeSet@1.3492.1.1, 2015-07-01 08:53:24+02:00, jnperlin@hydra.(none)
+ [Bug 2867] ntpd with autokey active crashed by 'ntpq -crv'
+
+ ChangeLog@1.1680.1.1 +1 -0
+ [Bug 2867] ntpd with autokey active crashed by 'ntpq -crv'
+
+
+ ntpd/ntp_control.c@1.201 +5 -2
+ [Bug 2867] ntpd with autokey active crashed by 'ntpq -crv'
+ make sure 'ctl_var' table matches indices (CS_LEAPSMEAR* is unconditionally defined and affects AUTOKEY vars)
+
+ChangeSet@1.3493, 2015-07-01 08:40:44+02:00, jnperlin@nemesis.localnet
+ [Bug 2864] 4.2.8p3 fails to compile on Windows.
+ fixed project files. (tested with VS2008 and VS2013)
+
+ ChangeLog@1.1681 +1 -0
+ [Bug 2864] 4.2.8p3 fails to compile on Windows.
+ fix project files. (tested with VS2008 and VS2013)
+
+ ports/winnt/vs2005/ntpd.vcproj@1.20 +22 -0
+ [Bug 2864] 4.2.8p3 fails to compile on Windows.
+ fixed project files. (UNTESTED!)
+
+ ports/winnt/vs2008/ntpd/ntpd.vcproj@1.49 +4 -0
+ [Bug 2864] 4.2.8p3 fails to compile on Windows.
+ fixed project files. (tested)
+
+ ports/winnt/vs2013/ntpd/ntpd.vcxproj@1.7 +1 -0
+ [Bug 2864] 4.2.8p3 fails to compile on Windows.
+ fixed project files. (tested)
+
+ ports/winnt/vs2013/ntpd/ntpd.vcxproj.filters@1.5 +3 -0
+ [Bug 2864] 4.2.8p3 fails to compile on Windows.
+ fixed project files. (tested)
+
+ChangeSet@1.3492, 2015-06-29 16:52:34-04:00, stenn@deacon.udel.edu
+ Makefile.in should not be checked in
+
+ BitKeeper/deleted/bd/Makefile.in~a06c74c485656b20@1.3 +0 -0
+ Delete: tests/sec-2853/Makefile.in
+
ChangeSet@1.3491, 2015-06-29 16:34:44-04:00, stenn@deacon.udel.edu
NTP_4_2_8P3
TAG: NTP_4_2_8P3
@@ -344,7 +5257,16 @@ ChangeSet@1.3489, 2015-06-29 19:33:22+00:00, stenn@psp-at1.ntp.org
NEWS@1.144 +18 -3
NEWS file update for bug 2853
-ChangeSet@1.3473.1.40, 2015-06-29 06:00:52+00:00, stenn@psp-at1.ntp.org
+ChangeSet@1.3473.1.21, 2015-06-29 20:33:15+02:00, viperus@ubuntu.(none)
+ a_md5encrypt.c:
+ minor change to memory compare, suggested by Tomasz
+
+ tests/libntp/a_md5encrypt.c@1.7 +2 -1
+ minor change to memory compare, suggested by Tomasz
+
+ tests/libntp/run-a_md5encrypt.c@1.9 +5 -4
+
+ChangeSet@1.3473.3.23, 2015-06-29 06:00:52+00:00, stenn@psp-at1.ntp.org
html/miscopt.html: Document leapsmearinterval, other cleanup. Harlan Stenn.
ChangeLog@1.1666.1.19 +1 -0
@@ -353,7 +5275,7 @@ ChangeSet@1.3473.1.40, 2015-06-29 06:00:52+00:00, stenn@psp-at1.ntp.org
html/miscopt.html@1.82 +18 -15
html/miscopt.html: Document leapsmearinterval, other cleanup. Harlan Stenn.
-ChangeSet@1.3473.1.39, 2015-06-29 05:28:47+00:00, stenn@psp-at1.ntp.org
+ChangeSet@1.3473.3.22, 2015-06-29 05:28:47+00:00, stenn@psp-at1.ntp.org
ntpd/ntp.conf.def: Document DSCP and leapsmearinterval. Harlan Stenn.
ChangeLog@1.1666.1.18 +1 -0
@@ -383,14 +5305,14 @@ ChangeSet@1.3486, 2015-06-29 03:39:39+00:00, stenn@psp-at1.ntp.org
ChangeLog@1.1677 +2 -1
Updated entry for Sec 2853
-ChangeSet@1.3473.3.2, 2015-06-29 04:57:16+02:00, tomek@tomek-n56vz.(none)
+ChangeSet@1.3473.4.2, 2015-06-29 04:57:16+02:00, tomek@tomek-n56vz.(none)
ChangeLog:
moved a change to the proper place
ChangeLog@1.1666.2.2 +1 -1
moved a change to the proper place
-ChangeSet@1.3473.3.1, 2015-06-29 04:50:55+02:00, tomek@tomek-n56vz.(none)
+ChangeSet@1.3473.4.1, 2015-06-29 04:50:55+02:00, tomek@tomek-n56vz.(none)
ChangeLog:
updated my changes
msyslog.c:
@@ -407,7 +5329,7 @@ ChangeSet@1.3473.3.1, 2015-06-29 04:50:55+02:00, tomek@tomek-n56vz.(none)
tests/libntp/run-msyslog.c@1.3 +1 -0
checking in the autogenerated file
-ChangeSet@1.3473.1.37, 2015-06-29 01:16:44+00:00, stenn@psp-at1.ntp.org
+ChangeSet@1.3473.3.20, 2015-06-29 01:16:44+00:00, stenn@psp-at1.ntp.org
[Bug 2860] ntpq ifstats sanity check is too stringent. Frank Kardel.
ChangeLog@1.1666.1.16 +1 -0
@@ -419,13 +5341,13 @@ ChangeSet@1.3473.1.37, 2015-06-29 01:16:44+00:00, stenn@psp-at1.ntp.org
ntpq/ntpq-subs.c@1.109 +1 -1
[Bug 2860] ntpq ifstats sanity check is too stringent. Frank Kardel.
-ChangeSet@1.3473.1.36, 2015-06-29 01:13:38+00:00, stenn@psp-at1.ntp.org
+ChangeSet@1.3473.3.19, 2015-06-29 01:13:38+00:00, stenn@psp-at1.ntp.org
Update the NEWS file with info about README.leapsmear
NEWS@1.142 +2 -1
Update the NEWS file with info about README.leapsmear
-ChangeSet@1.3473.1.35, 2015-06-29 00:10:53+00:00, stenn@psp-at1.ntp.org
+ChangeSet@1.3473.3.18, 2015-06-29 00:10:53+00:00, stenn@psp-at1.ntp.org
README.leapsmear edited. Harlan Stenn.
ChangeLog@1.1666.1.15 +1 -0
@@ -434,7 +5356,7 @@ ChangeSet@1.3473.1.35, 2015-06-29 00:10:53+00:00, stenn@psp-at1.ntp.org
README.leapsmear@1.2 +240 -75
README.leapsmear edited. Harlan Stenn.
-ChangeSet@1.3473.1.34, 2015-06-28 21:20:27+00:00, stenn@psp-at1.ntp.org
+ChangeSet@1.3473.3.17, 2015-06-28 21:20:27+00:00, stenn@psp-at1.ntp.org
README.leapsmear added. Martin Burnicki.
ChangeLog@1.1666.1.14 +1 -0
@@ -448,19 +5370,19 @@ ChangeSet@1.3473.1.34, 2015-06-28 21:20:27+00:00, stenn@psp-at1.ntp.org
README.leapsmear@1.0 +0 -0
-ChangeSet@1.3473.1.33, 2015-06-27 23:05:51-04:00, stenn@deacon.udel.edu
+ChangeSet@1.3473.3.16, 2015-06-27 23:05:51-04:00, stenn@deacon.udel.edu
[Bug 2846] Report 'unsynchronized' status during the leap second. Fixed in Martin's changes to Bug 2855. Martin Burnicki.
ChangeLog@1.1666.1.13 +2 -0
[Bug 2846] Report 'unsynchronized' status during the leap second. Fixed in Martin's changes to Bug 2855. Martin Burnicki.
-ChangeSet@1.3473.1.32, 2015-06-27 21:34:55+00:00, stenn@psp-at1.ntp.org
+ChangeSet@1.3473.3.15, 2015-06-27 21:34:55+00:00, stenn@psp-at1.ntp.org
NEWS file update
NEWS@1.141 +12 -0
NEWS file update
-ChangeSet@1.3473.1.31, 2015-06-27 19:25:39+00:00, stenn@psp-at1.ntp.org
+ChangeSet@1.3473.3.14, 2015-06-27 19:25:39+00:00, stenn@psp-at1.ntp.org
[Bug 2859] Improve raw DCF77 robustness deconding. Frank Kardel.
ChangeLog@1.1666.1.12 +4 -0
@@ -487,7 +5409,7 @@ ChangeSet@1.3473.1.31, 2015-06-27 19:25:39+00:00, stenn@psp-at1.ntp.org
parseutil/testdcf.c@1.11 +1 -1
[Bug 2859] Improve raw DCF77 robustness deconding. Frank Kardel.
-ChangeSet@1.3473.1.30, 2015-06-27 05:21:56-04:00, stenn@deacon.udel.edu
+ChangeSet@1.3473.3.13, 2015-06-27 05:21:56-04:00, stenn@deacon.udel.edu
NTP_4_2_8P3_RC3
TAG: NTP_4_2_8P3_RC3
@@ -821,13 +5743,13 @@ ChangeSet@1.3473.1.30, 2015-06-27 05:21:56-04:00, stenn@deacon.udel.edu
util/ntp-keygen.mdoc.in@1.326 +2 -2
NTP_4_2_8P3_RC3
-ChangeSet@1.3473.1.29, 2015-06-27 04:45:02-04:00, stenn@deacon.udel.edu
+ChangeSet@1.3473.3.12, 2015-06-27 04:45:02-04:00, stenn@deacon.udel.edu
Update the NEWS file for 4.2.8p3-RC3
NEWS@1.140 +26 -0
Update the NEWS file for 4.2.8p3-RC3
-ChangeSet@1.3473.1.28, 2015-06-27 04:20:07-04:00, stenn@deacon.udel.edu
+ChangeSet@1.3473.3.11, 2015-06-27 04:20:07-04:00, stenn@deacon.udel.edu
html/drivers/driver22.html: typo fix. Harlan Stenn.
ChangeLog@1.1666.1.10 +1 -0
@@ -836,7 +5758,7 @@ ChangeSet@1.3473.1.28, 2015-06-27 04:20:07-04:00, stenn@deacon.udel.edu
html/drivers/driver22.html@1.23 +1 -1
html/drivers/driver22.html: typo fix. Harlan Stenn.
-ChangeSet@1.3473.1.27, 2015-06-27 02:22:09-04:00, stenn@deacon.udel.edu
+ChangeSet@1.3473.3.10, 2015-06-27 02:22:09-04:00, stenn@deacon.udel.edu
[Bug 2857] Stratus VOS does not support SIGIO. Paul Green.
ChangeLog@1.1666.1.9 +1 -0
@@ -848,7 +5770,7 @@ ChangeSet@1.3473.1.27, 2015-06-27 02:22:09-04:00, stenn@deacon.udel.edu
sntp/m4/ntp_libntp.m4@1.30 +9 -0
[Bug 2857] Stratus VOS does not support SIGIO. Paul Green.
-ChangeSet@1.3473.1.26, 2015-06-27 01:58:07-04:00, stenn@deacon.udel.edu
+ChangeSet@1.3473.3.9, 2015-06-27 01:58:07-04:00, stenn@deacon.udel.edu
[Bug 2856] ntpd should wait() on terminated child processes. Paul Green.
ChangeLog@1.1666.1.8 +1 -0
@@ -857,7 +5779,7 @@ ChangeSet@1.3473.1.26, 2015-06-27 01:58:07-04:00, stenn@deacon.udel.edu
libntp/work_fork.c@1.14 +23 -4
[Bug 2856] ntpd should wait() on terminated child processes. Paul Green.
-ChangeSet@1.3473.1.25, 2015-06-27 05:12:21+00:00, stenn@psp-at1.ntp.org
+ChangeSet@1.3473.3.8, 2015-06-27 05:12:21+00:00, stenn@psp-at1.ntp.org
[Bug 2855] Report leap smear in the REFID. Harlan Stenn.
ChangeLog@1.1666.1.7 +1 -0
@@ -866,7 +5788,7 @@ ChangeSet@1.3473.1.25, 2015-06-27 05:12:21+00:00, stenn@psp-at1.ntp.org
ntpd/ntp_proto.c@1.361 +8 -2
[Bug 2855] Report leap smear in the REFID. Harlan Stenn.
-ChangeSet@1.3473.1.24, 2015-06-27 04:53:42+00:00, stenn@psp-at1.ntp.org
+ChangeSet@1.3473.3.7, 2015-06-27 04:53:42+00:00, stenn@psp-at1.ntp.org
refidsmear test cleanup. Tomasz Flendrich.
ChangeLog@1.1666.1.6 +1 -0
@@ -875,14 +5797,14 @@ ChangeSet@1.3473.1.24, 2015-06-27 04:53:42+00:00, stenn@psp-at1.ntp.org
tests/libntp/refidsmear.c@1.4 +4 -5
refidsmear test cleanup. Tomasz Flendrich.
-ChangeSet@1.3473.1.23, 2015-06-27 06:44:17+02:00, tomek@tomek-n56vz.(none)
+ChangeSet@1.3473.3.6, 2015-06-27 06:44:17+02:00, tomek@tomek-n56vz.(none)
refidsmear.c:
moved assertions to proper places
tests/libntp/refidsmear.c@1.3 +4 -2
moved assertions to proper places
-ChangeSet@1.3473.1.22, 2015-06-27 04:46:21+02:00, tomek@tomek-n56vz.(none)
+ChangeSet@1.3473.3.5, 2015-06-27 04:46:21+02:00, tomek@tomek-n56vz.(none)
run-refidsmear.c:
updated autogenerated file
refidsmear.c:
@@ -894,7 +5816,7 @@ ChangeSet@1.3473.1.22, 2015-06-27 04:46:21+02:00, tomek@tomek-n56vz.(none)
tests/libntp/run-refidsmear.c@1.2 +1 -1
updated autogenerated file
-ChangeSet@1.3473.1.21, 2015-06-27 01:16:47+00:00, stenn@psp-at1.ntp.org
+ChangeSet@1.3473.3.4, 2015-06-27 01:16:47+00:00, stenn@psp-at1.ntp.org
refidsmear function support and tests. Harlan Stenn.
ChangeLog@1.1666.1.5 +1 -0
@@ -929,24 +5851,31 @@ ChangeSet@1.3473.1.21, 2015-06-27 01:16:47+00:00, stenn@psp-at1.ntp.org
tests/libntp/run-refidsmear.c@1.0 +0 -0
-ChangeSet@1.3473.1.20, 2015-06-26 22:45:16+00:00, stenn@psp-at1.ntp.org
+ChangeSet@1.3473.3.3, 2015-06-26 22:45:16+00:00, stenn@psp-at1.ntp.org
tests/sandbox/smeartest.c: Harlan Stenn, Damir Tomic, Juergen Perlinger.
ChangeLog@1.1666.1.4 +1 -0
tests/sandbox/smeartest.c: Harlan Stenn, Damir Tomic, Juergen Perlinger.
-ChangeSet@1.3473.1.19, 2015-06-26 20:10:51+00:00, stenn@psp-at1.ntp.org
+ChangeSet@1.3473.3.2, 2015-06-26 20:10:51+00:00, stenn@psp-at1.ntp.org
smeartest.c fixes from Harlan
- tests/sandbox/smeartest.c@1.5 +52 -1
+ tests/sandbox/smeartest.c@1.3.1.2 +52 -1
smeartest.c fixes from Harlan
-ChangeSet@1.3473.1.18, 2015-06-26 18:43:39+00:00, stenn@psp-at1.ntp.org
+ChangeSet@1.3473.3.1, 2015-06-26 18:43:39+00:00, stenn@psp-at1.ntp.org
smeartest.c fixes from Juergen, Damir, and Harlan
- tests/sandbox/smeartest.c@1.4 +26 -17
+ tests/sandbox/smeartest.c@1.3.1.1 +26 -17
smeartest.c fixes from Juergen, Damir, and Harlan
+ChangeSet@1.3473.1.18, 2015-06-26 15:17:10+02:00, viperus@ubuntu.(none)
+ smeartest.c:
+ maybed fixed both funtions, needs checking!!!
+
+ tests/sandbox/smeartest.c@1.4 +69 -26
+ maybed fixed both funtions, needs checking!!!
+
ChangeSet@1.3473.1.17, 2015-06-26 11:24:43+00:00, stenn@psp-at1.ntp.org
smeartest.c - Harlan Stenn
diff --git a/contrib/ntp/FREEBSD-Xlist b/contrib/ntp/FREEBSD-Xlist
deleted file mode 100644
index 16cfc18..0000000
--- a/contrib/ntp/FREEBSD-Xlist
+++ /dev/null
@@ -1,2 +0,0 @@
-*ports
-*html/pic
diff --git a/contrib/ntp/FREEBSD-upgrade b/contrib/ntp/FREEBSD-upgrade
deleted file mode 100644
index 3253274..0000000
--- a/contrib/ntp/FREEBSD-upgrade
+++ /dev/null
@@ -1,55 +0,0 @@
-# ex:ts=8
-#
-# $FreeBSD$
-
-NTP 4.2.8
- originals can be found on http://www.ntp.org/downloads.html
-
-Import
-------
-
-For the import of NTP the following files were removed:
-
- ports/* NT files
- html/pic/* GIF files
- html/build/hints/solaris.xtra.4095849 Trigger merge conflict script
-
-The stripped down version was created using FREEBSD-Xlist during
-extraction:
-
- tar -X FREEBSD-Xlist -xvzf ntp-4.2.8.tar.gz
- mv ntp-4.2.8 4.2.8
-
-Imported by:
- See procedure on
-https://www.freebsd.org/doc/en_US.ISO8859-1/articles/committers-guide/subversion-primer.html
-
-Updating usr.sbin/ntp
----------------------
-
-./configure --disable-all-clocks --enable-NMEA --enable-ONCORE
---enable-RAWDCF --with-crypto --disable-debugging
---enable-LOCAL-CLOCK --with-sntp --with-arlib --prefix=/usr
-
-config.h was generated by running configure and excluding almost all clock
-drivers (what is included is DCF77 -- what I use --, NMEA, Motorola OnCORE
-and local clocks).
-
-The file is then edited to edit the value of "NO_PARENB_IGNPAR" because we
-need to set no parity on the serial port (needed for DCF77). All clock
-drivers are then disabled (some of them are included by default by ntpd).
-
-Note that there are two #ifdef to support other architectures (WRT to long
-size and endianness). They'll need to be redone for each upgrade to the
-vendor branch to keep config.h in sync.
-
-ntpd/ntp_control.c is now the only file that is different from the vendor
-branch for unsigned char/int fixes and removal of a DoS.
-
-Documentation in /usr/share/doc/ntp is generated from the HTML files with
-lynx (without the GIF files of course).
-
-A patch to fix IPV6_MULTICAST_LOOP was committed to head as r222444 and
-filed as http://bugs.ntp.org/show_bug.cgi?id=1936. Check if still needed
-or re-apply on update.
-
diff --git a/contrib/ntp/Makefile.am b/contrib/ntp/Makefile.am
index 11b20bf..43f45ed 100644
--- a/contrib/ntp/Makefile.am
+++ b/contrib/ntp/Makefile.am
@@ -23,7 +23,7 @@ SUBDIRS = \
tests \
$(NULL)
-DISTCHECK_CONFIGURE_FLAGS = -C --with-sntp
+DISTCHECK_CONFIGURE_FLAGS = -C --with-sntp --enable-local-libevent $(NTP_DCF)
EXTRA_DIST = \
$(srcdir)/COPYRIGHT \
diff --git a/contrib/ntp/Makefile.in b/contrib/ntp/Makefile.in
index 4d71d85..bc2327f 100644
--- a/contrib/ntp/Makefile.in
+++ b/contrib/ntp/Makefile.in
@@ -115,6 +115,7 @@ am__aclocal_m4_deps = $(top_srcdir)/sntp/libopts/m4/libopts.m4 \
$(top_srcdir)/sntp/m4/ntp_locinfo.m4 \
$(top_srcdir)/sntp/m4/ntp_openssl.m4 \
$(top_srcdir)/sntp/m4/ntp_pkg_config.m4 \
+ $(top_srcdir)/sntp/m4/ntp_problemtests.m4 \
$(top_srcdir)/sntp/m4/ntp_prog_cc.m4 \
$(top_srcdir)/sntp/m4/ntp_rlimit.m4 \
$(top_srcdir)/sntp/m4/ntp_sntp.m4 \
@@ -262,6 +263,7 @@ AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
+BUILD_THREAD = @BUILD_THREAD@
CALC_TICKADJ_DB = @CALC_TICKADJ_DB@
CALC_TICKADJ_DL = @CALC_TICKADJ_DL@
CALC_TICKADJ_DS = @CALC_TICKADJ_DS@
@@ -270,6 +272,7 @@ CALC_TICKADJ_NI = @CALC_TICKADJ_NI@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
+CFLAGS_LIBEVENT = @CFLAGS_LIBEVENT@
CFLAGS_NTP = @CFLAGS_NTP@
CHUTEST = @CHUTEST@
CONFIG_SHELL = @CONFIG_SHELL@
@@ -331,6 +334,7 @@ LIBTOOL_DEPS = @LIBTOOL_DEPS@
LIPO = @LIPO@
LN_S = @LN_S@
LSCF = @LSCF@
+LTHREAD_LIBS = @LTHREAD_LIBS@
LTLIBOBJS = @LTLIBOBJS@
MAKEINFO = @MAKEINFO@
MAKE_ADJTIMED = @MAKE_ADJTIMED@
@@ -539,7 +543,7 @@ SUBDIRS = \
tests \
$(NULL)
-DISTCHECK_CONFIGURE_FLAGS = -C --with-sntp
+DISTCHECK_CONFIGURE_FLAGS = -C --with-sntp --enable-local-libevent $(NTP_DCF)
EXTRA_DIST = \
$(srcdir)/COPYRIGHT \
ChangeLog \
diff --git a/contrib/ntp/NEWS b/contrib/ntp/NEWS
index 4e61d1b..e16d937 100644
--- a/contrib/ntp/NEWS
+++ b/contrib/ntp/NEWS
@@ -1,4 +1,499 @@
---
+NTP 4.2.8p4
+
+Focus: Security, Bug fies, enhancements.
+
+Severity: MEDIUM
+
+In addition to bug fixes and enhancements, this release fixes the
+following 13 low- and medium-severity vulnerabilities:
+
+* Incomplete vallen (value length) checks in ntp_crypto.c, leading
+ to potential crashes or potential code injection/information leakage.
+
+ References: Sec 2899, Sec 2671, CVE-2015-7691, CVE-2015-7692, CVE-2015-7702
+ Affects: All ntp-4 releases up to, but not including 4.2.8p4,
+ and 4.3.0 up to, but not including 4.3.77
+ CVSS: (AV:N/AC:H/Au:M/C:N/I:N/A:C) Base Score: 4.6
+ Summary: The fix for CVE-2014-9750 was incomplete in that there were
+ certain code paths where a packet with particular autokey operations
+ that contained malicious data was not always being completely
+ validated. Receipt of these packets can cause ntpd to crash.
+ Mitigation:
+ Don't use autokey.
+ Upgrade to 4.2.8p4, or later, from the NTP Project Download
+ Page or the NTP Public Services Project Download Page
+ Monitor your ntpd instances.
+ Credit: This weakness was discovered by Tenable Network Security.
+
+* Clients that receive a KoD should validate the origin timestamp field.
+
+ References: Sec 2901 / CVE-2015-7704, CVE-2015-7705
+ Affects: All ntp-4 releases up to, but not including 4.2.8p4,
+ and 4.3.0 up to, but not including 4.3.77
+ CVSS: (AV:N/AC:M/Au:N/C:N/I:N/A:P) Base Score: 4.3-5.0 at worst
+ Summary: An ntpd client that honors Kiss-of-Death responses will honor
+ KoD messages that have been forged by an attacker, causing it to
+ delay or stop querying its servers for time updates. Also, an
+ attacker can forge packets that claim to be from the target and
+ send them to servers often enough that a server that implements
+ KoD rate limiting will send the target machine a KoD response to
+ attempt to reduce the rate of incoming packets, or it may also
+ trigger a firewall block at the server for packets from the target
+ machine. For either of these attacks to succeed, the attacker must
+ know what servers the target is communicating with. An attacker
+ can be anywhere on the Internet and can frequently learn the
+ identity of the target's time source by sending the target a
+ time query.
+ Mitigation:
+ Implement BCP-38.
+ Upgrade to 4.2.8p4, or later, from the NTP Project Download Page
+ or the NTP Public Services Project Download Page
+ If you can't upgrade, restrict who can query ntpd to learn who
+ its servers are, and what IPs are allowed to ask your system
+ for the time. This mitigation is heavy-handed.
+ Monitor your ntpd instances.
+ Note:
+ 4.2.8p4 protects against the first attack. For the second attack,
+ all we can do is warn when it is happening, which we do in 4.2.8p4.
+ Credit: This weakness was discovered by Aanchal Malhotra,
+ Issac E. Cohen, and Sharon Goldberg of Boston University.
+
+* configuration directives to change "pidfile" and "driftfile" should
+ only be allowed locally.
+
+ References: Sec 2902 / CVE-2015-5196
+ Affects: All ntp-4 releases up to, but not including 4.2.8p4,
+ and 4.3.0 up to, but not including 4.3.77
+ CVSS: (AV:N/AC:H/Au:M/C:N/I:C/A:C) Base Score: 6.2 worst case
+ Summary: If ntpd is configured to allow for remote configuration,
+ and if the (possibly spoofed) source IP address is allowed to
+ send remote configuration requests, and if the attacker knows
+ the remote configuration password, it's possible for an attacker
+ to use the "pidfile" or "driftfile" directives to potentially
+ overwrite other files.
+ Mitigation:
+ Implement BCP-38.
+ Upgrade to 4.2.8p4, or later, from the NTP Project Download
+ Page or the NTP Public Services Project Download Page
+ If you cannot upgrade, don't enable remote configuration.
+ If you must enable remote configuration and cannot upgrade,
+ remote configuration of NTF's ntpd requires:
+ - an explicitly configured trustedkey, and you should also
+ configure a controlkey.
+ - access from a permitted IP. You choose the IPs.
+ - authentication. Don't disable it. Practice secure key safety.
+ Monitor your ntpd instances.
+ Credit: This weakness was discovered by Miroslav Lichvar of Red Hat.
+
+* Slow memory leak in CRYPTO_ASSOC
+
+ References: Sec 2909 / CVE-2015-7701
+ Affects: All ntp-4 releases that use autokey up to, but not
+ including 4.2.8p4, and 4.3.0 up to, but not including 4.3.77
+ CVSS: (AV:N/AC:H/Au:M/C:N/I:N/A:C) Base Score: 0.0 best/usual case,
+ 4.6 otherwise
+ Summary: If ntpd is configured to use autokey, then an attacker can
+ send packets to ntpd that will, after several days of ongoing
+ attack, cause it to run out of memory.
+ Mitigation:
+ Don't use autokey.
+ Upgrade to 4.2.8p4, or later, from the NTP Project Download
+ Page or the NTP Public Services Project Download Page
+ Monitor your ntpd instances.
+ Credit: This weakness was discovered by Tenable Network Security.
+
+* mode 7 loop counter underrun
+
+ References: Sec 2913 / CVE-2015-7848 / TALOS-CAN-0052
+ Affects: All ntp-4 releases up to, but not including 4.2.8p4,
+ and 4.3.0 up to, but not including 4.3.77
+ CVSS: (AV:N/AC:H/Au:M/C:N/I:N/A:C) Base Score: 4.6
+ Summary: If ntpd is configured to enable mode 7 packets, and if the
+ use of mode 7 packets is not properly protected thru the use of
+ the available mode 7 authentication and restriction mechanisms,
+ and if the (possibly spoofed) source IP address is allowed to
+ send mode 7 queries, then an attacker can send a crafted packet
+ to ntpd that will cause it to crash.
+ Mitigation:
+ Implement BCP-38.
+ Upgrade to 4.2.8p4, or later, from the NTP Project Download
+ Page or the NTP Public Services Project Download Page.
+ If you are unable to upgrade:
+ In ntp-4.2.8, mode 7 is disabled by default. Don't enable it.
+ If you must enable mode 7:
+ configure the use of a requestkey to control who can issue
+ mode 7 requests.
+ configure restrict noquery to further limit mode 7 requests
+ to trusted sources.
+ Monitor your ntpd instances.
+Credit: This weakness was discovered by Aleksandar Nikolic of Cisco Talos.
+
+* memory corruption in password store
+
+ References: Sec 2916 / CVE-2015-7849 / TALOS-CAN-0054
+ Affects: All ntp-4 releases up to, but not including 4.2.8p4, and 4.3.0 up to, but not including 4.3.77
+ CVSS: (AV:N/AC:H/Au:M/C:N/I:C/A:C) Base Score: 6.8, worst case
+ Summary: If ntpd is configured to allow remote configuration, and if
+ the (possibly spoofed) source IP address is allowed to send
+ remote configuration requests, and if the attacker knows the
+ remote configuration password or if ntpd was configured to
+ disable authentication, then an attacker can send a set of
+ packets to ntpd that may cause a crash or theoretically
+ perform a code injection attack.
+ Mitigation:
+ Implement BCP-38.
+ Upgrade to 4.2.8p4, or later, from the NTP Project Download
+ Page or the NTP Public Services Project Download Page.
+ If you are unable to upgrade, remote configuration of NTF's
+ ntpd requires:
+ an explicitly configured "trusted" key. Only configure
+ this if you need it.
+ access from a permitted IP address. You choose the IPs.
+ authentication. Don't disable it. Practice secure key safety.
+ Monitor your ntpd instances.
+ Credit: This weakness was discovered by Yves Younan of Cisco Talos.
+
+* Infinite loop if extended logging enabled and the logfile and
+ keyfile are the same.
+
+ References: Sec 2917 / CVE-2015-7850 / TALOS-CAN-0055
+ Affects: All ntp-4 releases up to, but not including 4.2.8p4,
+ and 4.3.0 up to, but not including 4.3.77
+ CVSS: (AV:N/AC:H/Au:M/C:N/I:N/A:C) Base Score: 4.6, worst case
+ Summary: If ntpd is configured to allow remote configuration, and if
+ the (possibly spoofed) source IP address is allowed to send
+ remote configuration requests, and if the attacker knows the
+ remote configuration password or if ntpd was configured to
+ disable authentication, then an attacker can send a set of
+ packets to ntpd that will cause it to crash and/or create a
+ potentially huge log file. Specifically, the attacker could
+ enable extended logging, point the key file at the log file,
+ and cause what amounts to an infinite loop.
+ Mitigation:
+ Implement BCP-38.
+ Upgrade to 4.2.8p4, or later, from the NTP Project Download
+ Page or the NTP Public Services Project Download Page.
+ If you are unable to upgrade, remote configuration of NTF's ntpd
+ requires:
+ an explicitly configured "trusted" key. Only configure this
+ if you need it.
+ access from a permitted IP address. You choose the IPs.
+ authentication. Don't disable it. Practice secure key safety.
+ Monitor your ntpd instances.
+ Credit: This weakness was discovered by Yves Younan of Cisco Talos.
+
+* Potential path traversal vulnerability in the config file saving of
+ ntpd on VMS.
+
+ References: Sec 2918 / CVE-2015-7851 / TALOS-CAN-0062
+ Affects: All ntp-4 releases running under VMS up to, but not
+ including 4.2.8p4, and 4.3.0 up to, but not including 4.3.77
+ CVSS: (AV:N/AC:H/Au:M/C:N/I:P/A:C) Base Score: 5.2, worst case
+ Summary: If ntpd is configured to allow remote configuration, and if
+ the (possibly spoofed) IP address is allowed to send remote
+ configuration requests, and if the attacker knows the remote
+ configuration password or if ntpd was configured to disable
+ authentication, then an attacker can send a set of packets to
+ ntpd that may cause ntpd to overwrite files.
+ Mitigation:
+ Implement BCP-38.
+ Upgrade to 4.2.8p4, or later, from the NTP Project Download
+ Page or the NTP Public Services Project Download Page.
+ If you are unable to upgrade, remote configuration of NTF's ntpd
+ requires:
+ an explicitly configured "trusted" key. Only configure
+ this if you need it.
+ access from permitted IP addresses. You choose the IPs.
+ authentication. Don't disable it. Practice key security safety.
+ Monitor your ntpd instances.
+ Credit: This weakness was discovered by Yves Younan of Cisco Talos.
+
+* ntpq atoascii() potential memory corruption
+
+ References: Sec 2919 / CVE-2015-7852 / TALOS-CAN-0063
+ Affects: All ntp-4 releases running up to, but not including 4.2.8p4,
+ and 4.3.0 up to, but not including 4.3.77
+ CVSS: (AV:N/AC:H/Au:N/C:N/I:P/A:P) Base Score: 4.0, worst case
+ Summary: If an attacker can figure out the precise moment that ntpq
+ is listening for data and the port number it is listening on or
+ if the attacker can provide a malicious instance ntpd that
+ victims will connect to then an attacker can send a set of
+ crafted mode 6 response packets that, if received by ntpq,
+ can cause ntpq to crash.
+ Mitigation:
+ Implement BCP-38.
+ Upgrade to 4.2.8p4, or later, from the NTP Project Download
+ Page or the NTP Public Services Project Download Page.
+ If you are unable to upgrade and you run ntpq against a server
+ and ntpq crashes, try again using raw mode. Build or get a
+ patched ntpq and see if that fixes the problem. Report new
+ bugs in ntpq or abusive servers appropriately.
+ If you use ntpq in scripts, make sure ntpq does what you expect
+ in your scripts.
+ Credit: This weakness was discovered by Yves Younan and
+ Aleksander Nikolich of Cisco Talos.
+
+* Invalid length data provided by a custom refclock driver could cause
+ a buffer overflow.
+
+ References: Sec 2920 / CVE-2015-7853 / TALOS-CAN-0064
+ Affects: Potentially all ntp-4 releases running up to, but not
+ including 4.2.8p4, and 4.3.0 up to, but not including 4.3.77
+ that have custom refclocks
+ CVSS: (AV:L/AC:H/Au:M/C:C/I:C/A:C) Base Score: 0.0 usual case,
+ 5.9 unusual worst case
+ Summary: A negative value for the datalen parameter will overflow a
+ data buffer. NTF's ntpd driver implementations always set this
+ value to 0 and are therefore not vulnerable to this weakness.
+ If you are running a custom refclock driver in ntpd and that
+ driver supplies a negative value for datalen (no custom driver
+ of even minimal competence would do this) then ntpd would
+ overflow a data buffer. It is even hypothetically possible
+ in this case that instead of simply crashing ntpd the attacker
+ could effect a code injection attack.
+ Mitigation:
+ Upgrade to 4.2.8p4, or later, from the NTP Project Download
+ Page or the NTP Public Services Project Download Page.
+ If you are unable to upgrade:
+ If you are running custom refclock drivers, make sure
+ the signed datalen value is either zero or positive.
+ Monitor your ntpd instances.
+ Credit: This weakness was discovered by Yves Younan of Cisco Talos.
+
+* Password Length Memory Corruption Vulnerability
+
+ References: Sec 2921 / CVE-2015-7854 / TALOS-CAN-0065
+ Affects: All ntp-4 releases up to, but not including 4.2.8p4, and
+ 4.3.0 up to, but not including 4.3.77
+ CVSS: (AV:N/AC:H/Au:M/C:C/I:C/A:C) Base Score: 0.0 best case,
+ 1.7 usual case, 6.8, worst case
+ Summary: If ntpd is configured to allow remote configuration, and if
+ the (possibly spoofed) source IP address is allowed to send
+ remote configuration requests, and if the attacker knows the
+ remote configuration password or if ntpd was (foolishly)
+ configured to disable authentication, then an attacker can
+ send a set of packets to ntpd that may cause it to crash,
+ with the hypothetical possibility of a small code injection.
+ Mitigation:
+ Implement BCP-38.
+ Upgrade to 4.2.8p4, or later, from the NTP Project Download
+ Page or the NTP Public Services Project Download Page.
+ If you are unable to upgrade, remote configuration of NTF's
+ ntpd requires:
+ an explicitly configured "trusted" key. Only configure
+ this if you need it.
+ access from a permitted IP address. You choose the IPs.
+ authentication. Don't disable it. Practice secure key safety.
+ Monitor your ntpd instances.
+ Credit: This weakness was discovered by Yves Younan and
+ Aleksander Nikolich of Cisco Talos.
+
+* decodenetnum() will ASSERT botch instead of returning FAIL on some
+ bogus values.
+
+ References: Sec 2922 / CVE-2015-7855
+ Affects: All ntp-4 releases up to, but not including 4.2.8p4, and
+ 4.3.0 up to, but not including 4.3.77
+ CVSS: (AV:N/AC:H/Au:M/C:N/I:N/A:C) Base Score: 4.6, worst case
+ Summary: If ntpd is fed a crafted mode 6 or mode 7 packet containing
+ an unusually long data value where a network address is expected,
+ the decodenetnum() function will abort with an assertion failure
+ instead of simply returning a failure condition.
+ Mitigation:
+ Implement BCP-38.
+ Upgrade to 4.2.8p4, or later, from the NTP Project Download
+ Page or the NTP Public Services Project Download Page.
+ If you are unable to upgrade:
+ mode 7 is disabled by default. Don't enable it.
+ Use restrict noquery to limit who can send mode 6
+ and mode 7 requests.
+ Configure and use the controlkey and requestkey
+ authentication directives to limit who can
+ send mode 6 and mode 7 requests.
+ Monitor your ntpd instances.
+ Credit: This weakness was discovered by John D "Doug" Birdwell of IDA.org.
+
+* NAK to the Future: Symmetric association authentication bypass via
+ crypto-NAK.
+
+ References: Sec 2941 / CVE-2015-7871
+ Affects: All ntp-4 releases between 4.2.5p186 up to but not including
+ 4.2.8p4, and 4.3.0 up to but not including 4.3.77
+ CVSS: (AV:N/AC:L/Au:N/C:N/I:P/A:P) Base Score: 6.4
+ Summary: Crypto-NAK packets can be used to cause ntpd to accept time
+ from unauthenticated ephemeral symmetric peers by bypassing the
+ authentication required to mobilize peer associations. This
+ vulnerability appears to have been introduced in ntp-4.2.5p186
+ when the code handling mobilization of new passive symmetric
+ associations (lines 1103-1165) was refactored.
+ Mitigation:
+ Implement BCP-38.
+ Upgrade to 4.2.8p4, or later, from the NTP Project Download
+ Page or the NTP Public Services Project Download Page.
+ If you are unable to upgrade:
+ Apply the patch to the bottom of the "authentic" check
+ block around line 1136 of ntp_proto.c.
+ Monitor your ntpd instances.
+ Credit: This weakness was discovered by Stephen Gray <stepgray@cisco.com>.
+
+Backward-Incompatible changes:
+* [Bug 2817] Default on Linux is now "rlimit memlock -1".
+While the general default of 32M is still the case, under Linux
+the default value has been changed to -1 (do not lock ntpd into
+ memory). A value of 0 means "lock ntpd into memory with whatever
+ memory it needs." If your ntp.conf file has an explicit "rlimit memlock"
+ value in it, that value will continue to be used.
+
+* [Bug 2886] Misspelling: "outlyer" should be "outlier".
+ If you've written a script that looks for this case in, say, the
+ output of ntpq, you probably want to change your regex matches
+ from 'outlyer' to 'outl[iy]er'.
+
+New features in this release:
+* 'rlimit memlock' now has finer-grained control. A value of -1 means
+ "don't lock ntpd into memore". This is the default for Linux boxes.
+ A value of 0 means "lock ntpd into memory" with no limits. Otherwise
+ the value is the number of megabytes of memory to lock. The default
+ is 32 megabytes.
+
+* The old Google Test framework has been replaced with a new framework,
+ based on http://www.throwtheswitch.org/unity/ .
+
+Bug Fixes and Improvements:
+* [Bug 2332] (reopened) Exercise thread cancellation once before dropping
+ privileges and limiting resources in NTPD removes the need to link
+ forcefully against 'libgcc_s' which does not always work. J.Perlinger
+* [Bug 2595] ntpdate man page quirks. Hal Murray, Harlan Stenn.
+* [Bug 2625] Deprecate flag1 in local refclock. Hal Murray, Harlan Stenn.
+* [Bug 2817] Stop locking ntpd into memory by default under Linux. H.Stenn.
+* [Bug 2821] minor build issues: fixed refclock_gpsdjson.c. perlinger@ntp.org
+* [Bug 2823] ntpsweep with recursive peers option doesn't work. H.Stenn.
+* [Bug 2849] Systems with more than one default route may never
+ synchronize. Brian Utterback. Note that this patch might need to
+ be reverted once Bug 2043 has been fixed.
+* [Bug 2864] 4.2.8p3 fails to compile on Windows. Juergen Perlinger
+* [Bug 2866] segmentation fault at initgroups(). Harlan Stenn.
+* [Bug 2867] ntpd with autokey active crashed by 'ntpq -crv'. J.Perlinger
+* [Bug 2873] libevent should not include .deps/ in the tarball. H.Stenn
+* [Bug 2874] Don't distribute generated sntp/tests/fileHandlingTest.h. H.Stenn
+* [Bug 2875] sntp/Makefile.am: Get rid of DIST_SUBDIRS. libevent must
+ be configured for the distribution targets. Harlan Stenn.
+* [Bug 2883] ntpd crashes on exit with empty driftfile. Miroslav Lichvar.
+* [Bug 2886] Mis-spelling: "outlyer" should be "outlier". dave@horsfall.org
+* [Bug 2888] streamline calendar functions. perlinger@ntp.org
+* [Bug 2889] ntp-dev-4.3.67 does not build on Windows. perlinger@ntp.org
+* [Bug 2890] Ignore ENOBUFS on routing netlink socket. Konstantin Khlebnikov.
+* [Bug 2906] make check needs better support for pthreads. Harlan Stenn.
+* [Bug 2907] dist* build targets require our libevent/ to be enabled. HStenn.
+* [Bug 2912] no munlockall() under Windows. David Taylor, Harlan Stenn.
+* libntp/emalloc.c: Remove explicit include of stdint.h. Harlan Stenn.
+* Put Unity CPPFLAGS items in unity_config.h. Harlan Stenn.
+* tests/ntpd/g_leapsec.cpp typo fix. Harlan Stenn.
+* Phase 1 deprecation of google test in sntp/tests/. Harlan Stenn.
+* On some versions of HP-UX, inttypes.h does not include stdint.h. H.Stenn.
+* top_srcdir can change based on ntp v. sntp. Harlan Stenn.
+* sntp/tests/ function parameter list cleanup. Damir Tomić.
+* tests/libntp/ function parameter list cleanup. Damir Tomić.
+* tests/ntpd/ function parameter list cleanup. Damir Tomić.
+* sntp/unity/unity_config.h: handle stdint.h. Harlan Stenn.
+* sntp/unity/unity_internals.h: handle *INTPTR_MAX on old Solaris. H.Stenn.
+* tests/libntp/timevalops.c and timespecops.c fixed error printing. D.Tomić.
+* tests/libntp/ improvements in code and fixed error printing. Damir Tomić.
+* tests/libntp: a_md5encrypt.c, authkeys.c, buftvtots.c, calendar.c, caljulian.c,
+ caltontp.c, clocktime.c, humandate.c, hextolfp.c, decodenetnum.c - fixed
+ formatting; first declaration, then code (C90); deleted unnecessary comments;
+ changed from sprintf to snprintf; fixed order of includes. Tomasz Flendrich
+* tests/libntp/lfpfunc.c remove unnecessary include, remove old comments,
+ fix formatting, cleanup. Tomasz Flendrich
+* tests/libntp/lfptostr.c remove unnecessary include, add consts, fix formatting.
+ Tomasz Flendrich
+* tests/libntp/statestr.c remove empty functions, remove unnecessary include,
+ fix formatting. Tomasz Flendrich
+* tests/libntp/modetoa.c fixed formatting. Tomasz Flendrich
+* tests/libntp/msyslog.c fixed formatting. Tomasz Flendrich
+* tests/libntp/numtoa.c deleted unnecessary empty functions, fixed formatting.
+ Tomasz Flendrich
+* tests/libntp/numtohost.c added const, fixed formatting. Tomasz Flendrich
+* tests/libntp/refnumtoa.c fixed formatting. Tomasz Flendrich
+* tests/libntp/ssl_init.c fixed formatting. Tomasz Flendrich
+* tests/libntp/tvtots.c fixed a bug, fixed formatting. Tomasz Flendrich
+* tests/libntp/uglydate.c removed an unnecessary include. Tomasz Flendrich
+* tests/libntp/vi64ops.c removed an unnecessary comment, fixed formatting.
+* tests/libntp/ymd3yd.c removed an empty function and an unnecessary include,
+fixed formatting. Tomasz Flendrich
+* tests/libntp/timespecops.c fixed formatting, fixed the order of includes,
+ removed unnecessary comments, cleanup. Tomasz Flendrich
+* tests/libntp/timevalops.c fixed the order of includes, deleted unnecessary
+ comments, cleanup. Tomasz Flendrich
+* tests/libntp/sockaddrtest.h making it agree to NTP's conventions of formatting.
+ Tomasz Flendrich
+* tests/libntp/lfptest.h cleanup. Tomasz Flendrich
+* tests/libntp/test-libntp.c fix formatting. Tomasz Flendrich
+* sntp/tests/crypto.c is now using proper Unity's assertions, fixed formatting.
+ Tomasz Flendrich
+* sntp/tests/kodDatabase.c added consts, deleted empty function,
+ fixed formatting. Tomasz Flendrich
+* sntp/tests/kodFile.c cleanup, fixed formatting. Tomasz Flendrich
+* sntp/tests/packetHandling.c is now using proper Unity's assertions,
+ fixed formatting, deleted unused variable. Tomasz Flendrich
+* sntp/tests/keyFile.c is now using proper Unity's assertions, fixed formatting.
+ Tomasz Flendrich
+* sntp/tests/packetProcessing.c changed from sprintf to snprintf,
+ fixed formatting. Tomasz Flendrich
+* sntp/tests/utilities.c is now using proper Unity's assertions, changed
+ the order of includes, fixed formatting, removed unnecessary comments.
+ Tomasz Flendrich
+* sntp/tests/sntptest.h fixed formatting. Tomasz Flendrich
+* sntp/tests/fileHandlingTest.h.in fixed a possible buffer overflow problem,
+ made one function do its job, deleted unnecessary prints, fixed formatting.
+ Tomasz Flendrich
+* sntp/unity/Makefile.am added a missing header. Tomasz Flendrich
+* sntp/unity/unity_config.h: Distribute it. Harlan Stenn.
+* sntp/libevent/evconfig-private.h: remove generated filefrom SCM. H.Stenn.
+* sntp/unity/Makefile.am: fix some broken paths. Harlan Stenn.
+* sntp/unity/unity.c: Clean up a printf(). Harlan Stenn.
+* Phase 1 deprecation of google test in tests/libntp/. Harlan Stenn.
+* Don't build sntp/libevent/sample/. Harlan Stenn.
+* tests/libntp/test_caltontp needs -lpthread. Harlan Stenn.
+* br-flock: --enable-local-libevent. Harlan Stenn.
+* Wrote tests for ntpd/ntp_prio_q.c. Tomasz Flendrich
+* scripts/lib/NTP/Util.pm: stratum output is version-dependent. Harlan Stenn.
+* Get rid of the NTP_ prefix on our assertion macros. Harlan Stenn.
+* Code cleanup. Harlan Stenn.
+* libntp/icom.c: Typo fix. Harlan Stenn.
+* util/ntptime.c: initialization nit. Harlan Stenn.
+* ntpd/ntp_peer.c:newpeer(): added a DEBUG_REQUIRE(srcadr). Harlan Stenn.
+* Add std_unity_tests to various Makefile.am files. Harlan Stenn.
+* ntpd/ntp_restrict.c: added a few assertions, created tests for this file.
+ Tomasz Flendrich
+* Changed progname to be const in many files - now it's consistent. Tomasz
+ Flendrich
+* Typo fix for GCC warning suppression. Harlan Stenn.
+* Added tests/ntpd/ntp_scanner.c test. Damir Tomić.
+* Added declarations to all Unity tests, and did minor fixes to them.
+ Reduced the number of warnings by half. Damir Tomić.
+* Updated generate_test_runner.rb and updated the sntp/unity/auto directory
+ with the latest Unity updates from Mark. Damir Tomić.
+* Retire google test - phase I. Harlan Stenn.
+* Unity test cleanup: move declaration of 'initializing'. Harlan Stenn.
+* Update the NEWS file. Harlan Stenn.
+* Autoconf cleanup. Harlan Stenn.
+* Unit test dist cleanup. Harlan Stenn.
+* Cleanup various test Makefile.am files. Harlan Stenn.
+* Pthread autoconf macro cleanup. Harlan Stenn.
+* Fix progname definition in unity runner scripts. Harlan Stenn.
+* Clean trailing whitespace in tests/ntpd/Makefile.am. Harlan Stenn.
+* Update the patch for bug 2817. Harlan Stenn.
+* More updates for bug 2817. Harlan Stenn.
+* Fix bugs in tests/ntpd/ntp_prio_q.c. Harlan Stenn.
+* gcc on older HPUX may need +allowdups. Harlan Stenn.
+* Adding missing MCAST protection. Harlan Stenn.
+* Disable certain test programs on certain platforms. Harlan Stenn.
+* Implement --enable-problem-tests (on by default). Harlan Stenn.
+* build system tweaks. Harlan Stenn.
+
+---
NTP 4.2.8p3 (Harlan Stenn <stenn@ntp.org>, 2015/06/29)
Focus: 1 Security fix. Bug fixes and enhancements. Leap-second improvements.
diff --git a/contrib/ntp/aclocal.m4 b/contrib/ntp/aclocal.m4
index bbc54be..0c81f43 100644
--- a/contrib/ntp/aclocal.m4
+++ b/contrib/ntp/aclocal.m4
@@ -1355,6 +1355,7 @@ m4_include([sntp/m4/ntp_lineeditlibs.m4])
m4_include([sntp/m4/ntp_locinfo.m4])
m4_include([sntp/m4/ntp_openssl.m4])
m4_include([sntp/m4/ntp_pkg_config.m4])
+m4_include([sntp/m4/ntp_problemtests.m4])
m4_include([sntp/m4/ntp_prog_cc.m4])
m4_include([sntp/m4/ntp_rlimit.m4])
m4_include([sntp/m4/ntp_sntp.m4])
diff --git a/contrib/ntp/adjtimed/Makefile.in b/contrib/ntp/adjtimed/Makefile.in
index 716b940..7a546ef 100644
--- a/contrib/ntp/adjtimed/Makefile.in
+++ b/contrib/ntp/adjtimed/Makefile.in
@@ -124,6 +124,7 @@ am__aclocal_m4_deps = $(top_srcdir)/sntp/libopts/m4/libopts.m4 \
$(top_srcdir)/sntp/m4/ntp_locinfo.m4 \
$(top_srcdir)/sntp/m4/ntp_openssl.m4 \
$(top_srcdir)/sntp/m4/ntp_pkg_config.m4 \
+ $(top_srcdir)/sntp/m4/ntp_problemtests.m4 \
$(top_srcdir)/sntp/m4/ntp_prog_cc.m4 \
$(top_srcdir)/sntp/m4/ntp_rlimit.m4 \
$(top_srcdir)/sntp/m4/ntp_sntp.m4 \
@@ -229,6 +230,7 @@ AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
+BUILD_THREAD = @BUILD_THREAD@
CALC_TICKADJ_DB = @CALC_TICKADJ_DB@
CALC_TICKADJ_DL = @CALC_TICKADJ_DL@
CALC_TICKADJ_DS = @CALC_TICKADJ_DS@
@@ -237,6 +239,7 @@ CALC_TICKADJ_NI = @CALC_TICKADJ_NI@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
+CFLAGS_LIBEVENT = @CFLAGS_LIBEVENT@
CFLAGS_NTP = @CFLAGS_NTP@
CHUTEST = @CHUTEST@
CONFIG_SHELL = @CONFIG_SHELL@
@@ -298,6 +301,7 @@ LIBTOOL_DEPS = @LIBTOOL_DEPS@
LIPO = @LIPO@
LN_S = @LN_S@
LSCF = @LSCF@
+LTHREAD_LIBS = @LTHREAD_LIBS@
LTLIBOBJS = @LTLIBOBJS@
MAKEINFO = @MAKEINFO@
MAKE_ADJTIMED = @MAKE_ADJTIMED@
diff --git a/contrib/ntp/adjtimed/adjtimed.c b/contrib/ntp/adjtimed/adjtimed.c
index f38e66d..fd28dfb 100644
--- a/contrib/ntp/adjtimed/adjtimed.c
+++ b/contrib/ntp/adjtimed/adjtimed.c
@@ -58,7 +58,7 @@ void Exit (int);
/* emacs cc-mode goes nuts if we split the next line... */
#define tvtod(tv) ((double)tv.tv_sec + ((double)tv.tv_usec / (double)MILLION))
-char *progname = NULL;
+char const *progname = NULL;
int verbose = 0;
int sysdebug = 0;
static int mqid;
diff --git a/contrib/ntp/clockstuff/Makefile.in b/contrib/ntp/clockstuff/Makefile.in
index 0236354..e75f4c0 100644
--- a/contrib/ntp/clockstuff/Makefile.in
+++ b/contrib/ntp/clockstuff/Makefile.in
@@ -117,6 +117,7 @@ am__aclocal_m4_deps = $(top_srcdir)/sntp/libopts/m4/libopts.m4 \
$(top_srcdir)/sntp/m4/ntp_locinfo.m4 \
$(top_srcdir)/sntp/m4/ntp_openssl.m4 \
$(top_srcdir)/sntp/m4/ntp_pkg_config.m4 \
+ $(top_srcdir)/sntp/m4/ntp_problemtests.m4 \
$(top_srcdir)/sntp/m4/ntp_prog_cc.m4 \
$(top_srcdir)/sntp/m4/ntp_rlimit.m4 \
$(top_srcdir)/sntp/m4/ntp_sntp.m4 \
@@ -224,6 +225,7 @@ AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
+BUILD_THREAD = @BUILD_THREAD@
CALC_TICKADJ_DB = @CALC_TICKADJ_DB@
CALC_TICKADJ_DL = @CALC_TICKADJ_DL@
CALC_TICKADJ_DS = @CALC_TICKADJ_DS@
@@ -232,6 +234,7 @@ CALC_TICKADJ_NI = @CALC_TICKADJ_NI@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
+CFLAGS_LIBEVENT = @CFLAGS_LIBEVENT@
CFLAGS_NTP = @CFLAGS_NTP@
CHUTEST = @CHUTEST@
CONFIG_SHELL = @CONFIG_SHELL@
@@ -293,6 +296,7 @@ LIBTOOL_DEPS = @LIBTOOL_DEPS@
LIPO = @LIPO@
LN_S = @LN_S@
LSCF = @LSCF@
+LTHREAD_LIBS = @LTHREAD_LIBS@
LTLIBOBJS = @LTLIBOBJS@
MAKEINFO = @MAKEINFO@
MAKE_ADJTIMED = @MAKE_ADJTIMED@
diff --git a/contrib/ntp/clockstuff/chutest.c b/contrib/ntp/clockstuff/chutest.c
index 488a0d1..78f6c5f 100644
--- a/contrib/ntp/clockstuff/chutest.c
+++ b/contrib/ntp/clockstuff/chutest.c
@@ -56,7 +56,7 @@ struct chucode {
#define STREQ(a, b) (*(a) == *(b) && strcmp((a), (b)) == 0)
-char *progname;
+char const *progname;
int dofilter = 0; /* set to 1 when we should run filter algorithm */
int showtimes = 0; /* set to 1 when we should show char arrival times */
diff --git a/contrib/ntp/clockstuff/propdelay.c b/contrib/ntp/clockstuff/propdelay.c
index 52c2032..a3b9fc0 100644
--- a/contrib/ntp/clockstuff/propdelay.c
+++ b/contrib/ntp/clockstuff/propdelay.c
@@ -117,7 +117,7 @@ int Cflag = 0;
int Gflag = 0;
int height;
-char *progname;
+char const *progname;
static void doit (double, double, double, double, double, char *);
static double latlong (char *, int);
diff --git a/contrib/ntp/configure b/contrib/ntp/configure
index 1d686cb..04813a8 100755
--- a/contrib/ntp/configure
+++ b/contrib/ntp/configure
@@ -1,6 +1,6 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for ntp 4.2.8p3.
+# Generated by GNU Autoconf 2.69 for ntp 4.2.8p4.
#
# Report bugs to <http://bugs.ntp.org./>.
#
@@ -590,8 +590,8 @@ MAKEFLAGS=
# Identity of this package.
PACKAGE_NAME='ntp'
PACKAGE_TARNAME='ntp'
-PACKAGE_VERSION='4.2.8p3'
-PACKAGE_STRING='ntp 4.2.8p3'
+PACKAGE_VERSION='4.2.8p4'
+PACKAGE_STRING='ntp 4.2.8p4'
PACKAGE_BUGREPORT='http://bugs.ntp.org./'
PACKAGE_URL='http://www.ntp.org./'
@@ -639,6 +639,12 @@ LTLIBOBJS
subdirs
PERLLIBDIR
NTP_KEYSDIR
+BUILD_TEST_NTP_SIGND_FALSE
+BUILD_TEST_NTP_SIGND_TRUE
+BUILD_TEST_NTP_SCANNER_FALSE
+BUILD_TEST_NTP_SCANNER_TRUE
+BUILD_TEST_NTP_RESTRICT_FALSE
+BUILD_TEST_NTP_RESTRICT_TRUE
GTEST_AVAILABLE_FALSE
GTEST_AVAILABLE_TRUE
GTEST_CPPFLAGS
@@ -689,6 +695,8 @@ PTHREADS_FALSE
PTHREADS_TRUE
LIBISC_PTHREADS_NOTHREADS
PTHREAD_LIBS
+LTHREAD_LIBS
+BUILD_THREAD
HAVE_INLINE
LDADD_LIBUTIL
ALLOCA
@@ -701,6 +709,7 @@ BUILD_LIBEVENT_FALSE
BUILD_LIBEVENT_TRUE
LDADD_LIBEVENT
CPPFLAGS_LIBEVENT
+CFLAGS_LIBEVENT
PKG_CONFIG
LIBOPTS_DIR
LIBOPTS_CFLAGS
@@ -1050,6 +1059,7 @@ enable_getifaddrs
enable_saveconfig
enable_leap_smear
with_gtest
+enable_problem_tests
'
ac_precious_vars='build_alias
host_alias
@@ -1606,7 +1616,7 @@ if test "$ac_init_help" = "long"; then
# Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF
-\`configure' configures ntp 4.2.8p3 to adapt to many kinds of systems.
+\`configure' configures ntp 4.2.8p4 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -1676,7 +1686,7 @@ fi
if test -n "$ac_init_help"; then
case $ac_init_help in
- short | recursive ) echo "Configuration of ntp 4.2.8p3:";;
+ short | recursive ) echo "Configuration of ntp 4.2.8p4:";;
esac
cat <<\_ACEOF
@@ -1724,7 +1734,7 @@ Optional Features and Packages:
--enable-libseccomp EXPERIMENTAL: enable support for libseccomp
sandboxing (default is no)
--with-stack-limit ? =50 (200 for openbsd) 4k pages
- --with-memlock ? =32 (megabytes)
+ --with-memlock ? =32 (-1 on linux) megabytes
--enable-debug-timing - include processing time debugging code (costs
performance)
--enable-dst-minutes =60 minutes per DST adjustment
@@ -1821,6 +1831,7 @@ Optional Features and Packages:
--enable-saveconfig + saveconfig mechanism
--enable-leap-smear - experimental leap smear code
--with-gtest Use the gtest framework (Default: if it's available)
+ --enable-problem-tests + enable tests with undiagnosed problems
Some influential environment variables:
CC C compiler command
@@ -1908,7 +1919,7 @@ fi
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
-ntp configure 4.2.8p3
+ntp configure 4.2.8p4
generated by GNU Autoconf 2.69
Copyright (C) 2012 Free Software Foundation, Inc.
@@ -2738,7 +2749,7 @@ cat >config.log <<_ACEOF
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
-It was created by ntp $as_me 4.2.8p3, which was
+It was created by ntp $as_me 4.2.8p4, which was
generated by GNU Autoconf 2.69. Invocation command line was
$ $0 $@
@@ -3117,6 +3128,12 @@ ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var.
ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var.
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
@@ -3733,7 +3750,7 @@ fi
# Define the identity of the package.
PACKAGE='ntp'
- VERSION='4.2.8p3'
+ VERSION='4.2.8p4'
cat >>confdefs.h <<_ACEOF
@@ -6768,7 +6785,7 @@ esac
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking additional compiler flags" >&5
$as_echo_n "checking additional compiler flags... " >&6; }
- # allow ntp_os_flags to be preset to skip this stuff
+ # allow ntp_os_cflags to be preset to skip this stuff
case "${ntp_os_cflags+set}" in
set)
;;
@@ -6856,7 +6873,7 @@ $as_echo_n "checking additional compiler flags... " >&6; }
;;
esac
esac
- case "$ntp_os_flags" in
+ case "$ntp_os_cflags" in
'')
ntp_os_cflags_msg="none needed"
;;
@@ -6867,6 +6884,38 @@ $as_echo_n "checking additional compiler flags... " >&6; }
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ntp_os_cflags_msg" >&5
$as_echo "$ntp_os_cflags_msg" >&6; }
{ ntp_os_cflags_msg=; unset ntp_os_cflags_msg;}
+ ###
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking additional linker flags" >&5
+$as_echo_n "checking additional linker flags... " >&6; }
+ # HMS: The following might still need tweaking
+ # allow ntp_os_ldflags to be preset to skip this stuff
+ case "${ntp_os_ldflags+set}" in
+ set)
+ ;;
+ *)
+ ntp_os_ldflags=
+ case "$host_os" in
+ hpux*)
+ case "$GCC" in
+ yes)
+ ntp_os_ldflags="-Wl,+allowdups"
+ ;;
+ esac
+ ;;
+ esac
+ ;;
+ esac
+ case "$ntp_os_ldflags" in
+ '')
+ ntp_os_ldflags_msg="none needed"
+ ;;
+ *)
+ ntp_os_ldflags_msg="$ntp_os_ldflags"
+ esac
+ LDFLAGS_NTP="$LDFLAGS_NTP $ntp_os_ldflags"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ntp_os_ldflags_msg" >&5
+$as_echo "$ntp_os_ldflags_msg" >&6; }
+ { ntp_os_ldflags_msg=; unset ntp_os_ldflags_msg;}
@@ -19945,6 +19994,7 @@ ntp_libevent_tearoff=sntp/libevent
+
case "$ntp_use_local_libevent" in
yes)
;;
@@ -19958,6 +20008,7 @@ $as_echo_n "checking if libevent $ntp_libevent_min_version or later is installed
ntp_use_local_libevent=no
{ $as_echo "$as_me:${as_lineno-$LINENO}: Using the installed libevent" >&5
$as_echo "$as_me: Using the installed libevent" >&6;}
+ CFLAGS_LIBEVENT=`$PKG_CONFIG --cflags libevent_pthreads`
CPPFLAGS_LIBEVENT=`$PKG_CONFIG --cflags-only-I libevent`
# HMS: I hope the following is accurate.
# We don't need -levent, we only need -levent_core.
@@ -19987,6 +20038,9 @@ $as_echo "$as_me: Using the installed libevent" >&6;}
$as_echo "yes" >&6; }
else
ntp_use_local_libevent=yes
+ # HMS: do we only need to do this if LIBISC_PTHREADS_NOTHREADS
+ # is "pthreads"?
+ CFLAGS_LIBEVENT=`$PKG_CONFIG --cflags libevent_pthreads`
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
fi
@@ -20012,6 +20066,7 @@ $as_echo "$as_me: Using libevent tearoff" >&6;}
esac
esac
+
if test "x$ntp_use_local_libevent" = "xyes"; then
BUILD_LIBEVENT_TRUE=
BUILD_LIBEVENT_FALSE='#'
@@ -22941,7 +22996,8 @@ fi
have_pthreads=no
case "$enable_thread_support" in
- yes)
+ no) ;;
+ *)
ol_found_pthreads=no
@@ -26358,6 +26414,9 @@ $as_echo "$ol_cv_pthread_lib_lpthreads" >&6; }
fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: ol_link_threads: <$ol_link_threads> ol_link_pthreads <$ol_link_pthreads>" >&5
+$as_echo "$as_me: ol_link_threads: <$ol_link_threads> ol_link_pthreads <$ol_link_pthreads>" >&6;}
+
if test $ol_link_threads != no ; then
LTHREAD_LIBS="$LTHREAD_LIBS $ol_link_pthreads"
@@ -27398,6 +27457,10 @@ ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $
ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+
+
case "$ol_found_pthreads" in
yes)
saved_LIBS="$LIBS"
@@ -27423,56 +27486,6 @@ done
yes)
PTHREAD_LIBS="$LTHREAD_LIBS"
have_pthreads=yes
- # Bug 2332: With GCC we need to force a reference to libgcc_s
- # (if libgcc_s exists) or the combination of
- # threads + setuid + mlockall does not work on linux because
- # thread cancellation fails to load libgcc_s with dlopen().
- # We have to pass this all as linker options to avoid argument
- # reordering by libtool.
- case "$GCC$with_gnu_ld" in
- yesyes)
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for exit in -lgcc_s" >&5
-$as_echo_n "checking for exit in -lgcc_s... " >&6; }
-if ${ac_cv_lib_gcc_s_exit+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-lgcc_s $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char exit ();
-int
-main ()
-{
-return exit ();
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- ac_cv_lib_gcc_s_exit=yes
-else
- ac_cv_lib_gcc_s_exit=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_gcc_s_exit" >&5
-$as_echo "$ac_cv_lib_gcc_s_exit" >&6; }
-if test "x$ac_cv_lib_gcc_s_exit" = xyes; then :
- PTHREAD_LIBS="$LTHREAD_LIBS -Wl,--no-as-needed,-lgcc_s,--as-needed"
-fi
-
- ;;
- esac
esac
esac
esac
@@ -31236,10 +31249,15 @@ rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ntp_cv_rlimit_memlock" >&5
$as_echo "$ntp_cv_rlimit_memlock" >&6; }
+case "$host" in
+ *-*-*linux*)
+ ntp_dflt_rlimit_memlock="-1" ;;
+ *) ntp_dflt_rlimit_memlock="32" ;;
+esac
case "$ntp_cv_rlimit_memlock" in
yes)
- HAVE_RLIMIT_MEMLOCK=" memlock 32"
+ HAVE_RLIMIT_MEMLOCK=" memlock $ntp_dflt_rlimit_memlock" ;;
esac
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for RLIMIT_STACK" >&5
@@ -31288,8 +31306,6 @@ case "$ntp_cv_rlimit_stack" in
HAVE_RLIMIT_STACK=" stacksize 50"
esac
-
-
# HMS: Only if we are doing the MLOCKALL stuff...
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for the default number of 4k stack pages" >&5
$as_echo_n "checking for the default number of 4k stack pages... " >&6; }
@@ -31339,7 +31355,7 @@ fi
case "$ans" in
yes | no)
- ans=32
+ ans=$ntp_dflt_rlimit_memlock
;;
[1-9][0-9]*) ;;
*) as_fn_error $? "\"--with-memlock requires an integer argument.\"" "$LINENO" 5
@@ -31354,6 +31370,7 @@ _ACEOF
+
# some OSes prefer _exit() in forked children to exit()
for ac_func in _exit
do :
@@ -36995,6 +37012,81 @@ fi
+
+case "$build" in
+ $host) cross=0 ;;
+ *) cross=1 ;;
+esac
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if we want to enable tests with undiagnosed problems" >&5
+$as_echo_n "checking if we want to enable tests with undiagnosed problems... " >&6; }
+# Check whether --enable-problem-tests was given.
+if test "${enable_problem_tests+set}" = set; then :
+ enableval=$enable_problem_tests; ntp_ept=$enableval
+else
+ ntp_ept=yes
+
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ntp_ept" >&5
+$as_echo "$ntp_ept" >&6; }
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can run test-ntp_restrict" >&5
+$as_echo_n "checking if we can run test-ntp_restrict... " >&6; }
+ntp_test_ntp_restrict="no"
+case "$ntp_ept:$cross:$host" in
+ no:0:*-*-solaris*) ;;
+ no:0:*-*-hpux-11.23*) ;;
+ *) ntp_test_ntp_restrict="yes" ;;
+esac
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ntp_test_ntp_restrict" >&5
+$as_echo "$ntp_test_ntp_restrict" >&6; }
+ if test x$ntp_test_ntp_restrict = xyes; then
+ BUILD_TEST_NTP_RESTRICT_TRUE=
+ BUILD_TEST_NTP_RESTRICT_FALSE='#'
+else
+ BUILD_TEST_NTP_RESTRICT_TRUE='#'
+ BUILD_TEST_NTP_RESTRICT_FALSE=
+fi
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can run test-ntp_scanner" >&5
+$as_echo_n "checking if we can run test-ntp_scanner... " >&6; }
+ntp_test_ntp_scanner="no"
+case "$ntp_ept:$cross:$host" in
+ no:0:*-*-solaris*) ;;
+ *) ntp_test_ntp_scanner="yes" ;;
+esac
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ntp_test_ntp_scanner" >&5
+$as_echo "$ntp_test_ntp_scanner" >&6; }
+ if test x$ntp_test_ntp_scanner = xyes; then
+ BUILD_TEST_NTP_SCANNER_TRUE=
+ BUILD_TEST_NTP_SCANNER_FALSE='#'
+else
+ BUILD_TEST_NTP_SCANNER_TRUE='#'
+ BUILD_TEST_NTP_SCANNER_FALSE=
+fi
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can run test-ntp_signd" >&5
+$as_echo_n "checking if we can run test-ntp_signd... " >&6; }
+ntp_test_ntp_signd="no"
+case "$ntp_ept:$cross:$host" in
+ no:0:*-*-solaris*) ;;
+ *) ntp_test_ntp_signd="yes" ;;
+esac
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ntp_test_ntp_signd" >&5
+$as_echo "$ntp_test_ntp_signd" >&6; }
+ if test x$ntp_test_ntp_signd = xyes; then
+ BUILD_TEST_NTP_SIGND_TRUE=
+ BUILD_TEST_NTP_SIGND_FALSE='#'
+else
+ BUILD_TEST_NTP_SIGND_TRUE='#'
+ BUILD_TEST_NTP_SIGND_FALSE=
+fi
+
+
+
###
@@ -37091,6 +37183,8 @@ ac_config_files="$ac_config_files tests/libntp/Makefile"
ac_config_files="$ac_config_files tests/ntpd/Makefile"
+ac_config_files="$ac_config_files tests/ntpq/Makefile"
+
ac_config_files="$ac_config_files tests/sandbox/Makefile"
ac_config_files="$ac_config_files tests/sec-2853/Makefile"
@@ -37333,6 +37427,18 @@ if test -z "${GTEST_AVAILABLE_TRUE}" && test -z "${GTEST_AVAILABLE_FALSE}"; then
as_fn_error $? "conditional \"GTEST_AVAILABLE\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
fi
+if test -z "${BUILD_TEST_NTP_RESTRICT_TRUE}" && test -z "${BUILD_TEST_NTP_RESTRICT_FALSE}"; then
+ as_fn_error $? "conditional \"BUILD_TEST_NTP_RESTRICT\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${BUILD_TEST_NTP_SCANNER_TRUE}" && test -z "${BUILD_TEST_NTP_SCANNER_FALSE}"; then
+ as_fn_error $? "conditional \"BUILD_TEST_NTP_SCANNER\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${BUILD_TEST_NTP_SIGND_TRUE}" && test -z "${BUILD_TEST_NTP_SIGND_FALSE}"; then
+ as_fn_error $? "conditional \"BUILD_TEST_NTP_SIGND\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
: "${CONFIG_STATUS=./config.status}"
ac_write_fail=0
@@ -37730,7 +37836,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
# report actual input values of CONFIG_FILES etc. instead of their
# values after options handling.
ac_log="
-This file was extended by ntp $as_me 4.2.8p3, which was
+This file was extended by ntp $as_me 4.2.8p4, which was
generated by GNU Autoconf 2.69. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@@ -37797,7 +37903,7 @@ _ACEOF
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
ac_cs_version="\\
-ntp config.status 4.2.8p3
+ntp config.status 4.2.8p4
configured by $0, generated by GNU Autoconf 2.69,
with options \\"\$ac_cs_config\\"
@@ -38344,6 +38450,7 @@ do
"tests/bug-2803/Makefile") CONFIG_FILES="$CONFIG_FILES tests/bug-2803/Makefile" ;;
"tests/libntp/Makefile") CONFIG_FILES="$CONFIG_FILES tests/libntp/Makefile" ;;
"tests/ntpd/Makefile") CONFIG_FILES="$CONFIG_FILES tests/ntpd/Makefile" ;;
+ "tests/ntpq/Makefile") CONFIG_FILES="$CONFIG_FILES tests/ntpq/Makefile" ;;
"tests/sandbox/Makefile") CONFIG_FILES="$CONFIG_FILES tests/sandbox/Makefile" ;;
"tests/sec-2853/Makefile") CONFIG_FILES="$CONFIG_FILES tests/sec-2853/Makefile" ;;
"util/Makefile") CONFIG_FILES="$CONFIG_FILES util/Makefile" ;;
diff --git a/contrib/ntp/configure.ac b/contrib/ntp/configure.ac
index de60430..42e18a4 100644
--- a/contrib/ntp/configure.ac
+++ b/contrib/ntp/configure.ac
@@ -11,6 +11,7 @@ AC_INIT(
)
AC_CONFIG_MACRO_DIR([sntp/m4])
AC_CONFIG_AUX_DIR([sntp/libevent/build-aux])
+AC_LANG([C])
AC_PRESERVE_HELP_ORDER
@@ -928,60 +929,6 @@ esac
NTP_RLIMIT_ITEMS
-# HMS: Only if we are doing the MLOCKALL stuff...
-AC_MSG_CHECKING([for the default number of 4k stack pages])
-AC_ARG_WITH(
- [stack-limit],
- [AS_HELP_STRING(
- [--with-stack-limit],
- [? =50 (200 for openbsd) 4k pages]
- )],
- [ans=$withval],
- [ans=yes]
-)
-case "$ans" in
- yes | no)
- case "$host" in
- *-*-openbsd*)
- ans=200
- ;;
- *) ans=50
- ;;
- esac
- ;;
- [[1-9]][[0-9]]*)
- ;;
- *) AC_MSG_ERROR(["--with-stack-limit requires an integer argument."])
- ;;
-esac
-AC_MSG_RESULT([$ans])
-AC_DEFINE_UNQUOTED([DFLT_RLIMIT_STACK], [$ans],
- [Default number of 4k pages for RLIMIT_STACK])
-
-# HMS: only if we have RLIMIT_MEMLOCK
-AC_MSG_CHECKING([for the default number of megabytes to MEMLOCK])
-AC_ARG_WITH(
- [memlock],
- [AS_HELP_STRING(
- [--with-memlock],
- [? =32 (megabytes)]
- )],
- [ans=$withval],
- [ans=yes]
-)
-case "$ans" in
- yes | no)
- ans=32
- ;;
- [[1-9]][[0-9]]*) ;;
- *) AC_MSG_ERROR(["--with-memlock requires an integer argument."])
- ;;
-esac
-AC_MSG_RESULT([$ans])
-AC_DEFINE_UNQUOTED([DFLT_RLIMIT_MEMLOCK], [$ans],
- [Default number of megabytes for RLIMIT_MEMLOCK])
-
-
# some OSes prefer _exit() in forked children to exit()
AC_CHECK_FUNCS([_exit])
ntp_worker_child_exit=exit
@@ -4382,6 +4329,8 @@ dnl require a C++ compiler only if we will use gtest, but AC_PROG_CXX
dnl can't be conditionalized.
NTP_GOOGLETEST
+NTP_PROBLEM_TESTS
+
###
AC_DEFINE_DIR([NTP_KEYSDIR], [sysconfdir],
@@ -4425,6 +4374,7 @@ AC_CONFIG_FILES([tests/Makefile])
AC_CONFIG_FILES([tests/bug-2803/Makefile])
AC_CONFIG_FILES([tests/libntp/Makefile])
AC_CONFIG_FILES([tests/ntpd/Makefile])
+AC_CONFIG_FILES([tests/ntpq/Makefile])
AC_CONFIG_FILES([tests/sandbox/Makefile])
AC_CONFIG_FILES([tests/sec-2853/Makefile])
AC_CONFIG_FILES([util/Makefile])
diff --git a/contrib/ntp/html/decode.html b/contrib/ntp/html/decode.html
index 51603ad..a15046f 100644
--- a/contrib/ntp/html/decode.html
+++ b/contrib/ntp/html/decode.html
@@ -11,7 +11,7 @@
<img src="pic/alice47.gif" alt="gif" align="left"><a href="http://www.eecis.udel.edu/%7emills/pictures.html">from <i>Alice's Adventures in Wonderland</i>, Lewis Carroll</a>
<p>Caterpillar knows all the error codes, which is more than most of us do.</p>
<p>Last update:
- <!-- #BeginDate format:En2m -->16-Jul-2014 04:48<!-- #EndDate -->
+ <!-- #BeginDate format:En2m -->26-Jul-2015 06:26<!-- #EndDate -->
UTC</p>
</p>
<br clear="left">
@@ -296,7 +296,7 @@
</tr>
<tr>
<td><tt>3</tt></td>
- <td><tt>sel_outlyer</tt></td>
+ <td><tt>sel_outlier</tt></td>
<td><tt>-</tt></td>
<td>discarded by the cluster algorithm</td>
</tr>
diff --git a/contrib/ntp/html/miscopt.html b/contrib/ntp/html/miscopt.html
index ac32419..c619022 100644
--- a/contrib/ntp/html/miscopt.html
+++ b/contrib/ntp/html/miscopt.html
@@ -11,7 +11,7 @@
<img src="pic/boom3.gif" alt="gif" align="left"><a href="http://www.eecis.udel.edu/~mills/pictures.html">from <i>Pogo</i>, Walt Kelly</a>
<p>We have three, now looking for more.</p>
<p>Last update:
- <!-- #BeginDate format:En2m -->29-Jun-2015 05:56<!-- #EndDate -->
+ <!-- #BeginDate format:En2m -->23-Sep-2015 10:20<!-- #EndDate -->
UTC</p>
<br clear="left">
<h4>Related Links</h4>
@@ -105,7 +105,7 @@
<dd>
<dl>
<dt><tt>memlock <i>Nmegabytes</i></tt></dt>
- <dd>Specify the number of megabytes of memory that can be allocated. Probably only available under Linux, this option is useful when dropping root (the <tt>-i</tt> option). The default is 32 megabytes. Setting this to zero will prevent any attemp to lock memory.</dd>
+ <dd>Specify the number of megabytes of memory that should be allocated and locked. Probably only available under Linux, this option may be useful when dropping root (the <tt>-i</tt> option). The default is 32 megabytes on non-Linux machines, and -1 under Linux. -1 means "do not lock the process into memory". 0 means "lock whatever memory the process wants into memory".</dd>
<dt><tt>stacksize <i>N4kPages</i></tt></dt>
<dd>Specifies the maximum size of the process stack on systems with the <tt>mlockall()</tt> function. Defaults to 50 4k pages (200 4k pages in OpenBSD).</dd>
<dt><tt>filenum <i>Nfiledescriptors</i></tt></dt>
diff --git a/contrib/ntp/html/stats.html b/contrib/ntp/html/stats.html
index 9438517..c5bc34c 100644
--- a/contrib/ntp/html/stats.html
+++ b/contrib/ntp/html/stats.html
@@ -7,9 +7,9 @@
<link href="scripts/style.css" type="text/css" rel="stylesheet">
</head>
<body>
-<h3>Performance Metrics</h3>
+<h3>Performance Metrics</h3>
<p>Last update:
- <!-- #BeginDate format:En2m -->10-Mar-2014 05:23<!-- #EndDate -->
+ <!-- #BeginDate format:En2m -->26-Jul-2015 06:29<!-- #EndDate -->
UTC</p>
<h4>Related Links</h4>
<script type="text/javascript" language="javascript" src="scripts/special.txt"></script>
@@ -25,45 +25,45 @@
<p>This page describes several statistics provided in the NTP specification and reference implementation and how they determine the accuracy and error measured during routine and exceptional operation. These statistics provide the following information.</p>
<ul>
- <li>Nominal estimate of the server clock time relative to the client clock time. This is called <em>clock offset</em> symbolized by the Greek letter &theta;.</li>
- <li>Roundtrip system and network delay measured by the on-wire protocol. This is call <em>roundtrip delay</em> symbolized by the Greek letter &delta;.</li>
- <li>Potential clock offset error due to the maximum uncorrected system clock frequency error. This is called <em>dispersion</em> symbolized by the Greek letter &epsilon;.</li>
- <li>Expected error, consisting of the root mean square (RMS) nominal clock offset sample differencess in a sliding window of several samples. This is called <em>jitter</em> symbolized by the Greek letter &phi;.</li>
+ <li>Nominal estimate of the server clock time relative to the client clock time. This is called <em>clock offset</em> symbolized by the Greek letter &theta;.</li>
+ <li>Roundtrip system and network delay measured by the on-wire protocol. This is call <em>roundtrip delay</em> symbolized by the Greek letter &delta;.</li>
+ <li>Potential clock offset error due to the maximum uncorrected system clock frequency error. This is called <em>dispersion</em> symbolized by the Greek letter &epsilon;.</li>
+ <li>Expected error, consisting of the root mean square (RMS) nominal clock offset sample differencess in a sliding window of several samples. This is called <em>jitter</em> symbolized by the Greek letter &phi;.</li>
</ul>
<p> Figure 1 shows how the various measured statistics are collected and compiled to calibrate NTP performance.</p>
<div align="center">
<img src="pic/stats.gif" alt="gif">
<p>Figure 1. Statistics Budget</p>
</div>
-<p>The data represented in boxes labeled Server are contained in fields in packet received from the server. The data represented in boxes labeled Peer are computed by the on-wire protocol, as described below. The algorithms of the box labeled Selection and Combining Algorithms process the peer data to select a system peer. The System box represents summary data inherited from the system peer. These data are available to application programs and dependent downstream clients.</p>
+<p>The data represented in boxes labeled Server are contained in fields in packet received from the server. The data represented in boxes labeled Peer are computed by the on-wire protocol, as described below. The algorithms of the box labeled Selection and Combining Algorithms process the peer data to select a system peer. The System box represents summary data inherited from the system peer. These data are available to application programs and dependent downstream clients.</p>
<h4 id="budget">2. Statistics Summary</h4>
-<p>Each NTP synchronization source is characterized by the offset &theta; and delay &delta; samples measured by the on-wire protocol, as described on the <a href="warp.html">How NTP Works</a> page. In addition, the dispersion &epsilon; sample is initialized with the sum of the source precision &rho;<sub>R</sub> and the client precision &rho; (not shown) as each source packet is received. The dispersion increases at a rate of 15 &mu;s/s after that. For this purpose, the precision is equal to the latency to read the system clock. The offset, delay and dispersion are called the sample statistics.</p>
+<p>Each NTP synchronization source is characterized by the offset &theta; and delay &delta; samples measured by the on-wire protocol, as described on the <a href="warp.html">How NTP Works</a> page. In addition, the dispersion &epsilon; sample is initialized with the sum of the source precision &rho;<sub>R</sub> and the client precision &rho; (not shown) as each source packet is received. The dispersion increases at a rate of 15 &mu;s/s after that. For this purpose, the precision is equal to the latency to read the system clock. The offset, delay and dispersion are called the sample statistics.</p>
<blockquote>
- <p>Note. In very fast networks where the client clock frequency is not within 1 PPM or so of the the server clock frequency, the roundtrip delay may have small negative values. This is usually a temporary condition when the client is first started. When using the roundtrip delay in calculations, negative values are assumed zero.</p>
+ <p>Note. In very fast networks where the client clock frequency is not within 1 PPM or so of the the server clock frequency, the roundtrip delay may have small negative values. This is usually a temporary condition when the client is first started. When using the roundtrip delay in calculations, negative values are assumed zero.</p>
</blockquote>
-<p> In a window of eight (offset, delay, dispersion) samples, the algorithm described on the <a href="filter.html">Clock Filter Algorithm</a> page selects the sample with minimum delay, which generally represents the most accurate offset statistic. The selected offset sample determines the <em>peer offset</em> and <em>peer delay </em>statistics. The <em>peer dispersion</em> is a weighted average of the dispersion samples in the window. These quantities are recalculated as each update is received from the source. Between updates, both the sample dispersion and peer dispersion continue to grow at the same rate, 15 &mu;s/s. Finally, the <em>peer jitter</em> &phi; is determined as the RMS differences between the offset samples in the window relative to the selected offset sample. The peer statistics are recorded by the <tt>peerstats</tt> option of the <a href="monopt.html#filegen"><tt>filegen</tt></a> command. Peer variables are displayed by the <tt>rv</tt> command of the <a href="ntpq.html#peer"><tt>ntpq</tt></a> program.</p>
-<p> The clock filter algorithm continues to process updates in this way until the source is no longer reachable. Reachability is determined by an eight-bit shift register, which is shifted left by one bit as each poll packet is sent, with 0 replacing the vacated rightmost bit. Each time a valid update is received, the rightmost bit is set to 1. The source is considered reachable if any bit is set to 1 in the register; otherwise, it is considered unreachable. When a source becomes unreachable, a dummy sample with &quot;infinite&quot; dispersion is inserted in the filter window at each poll, thus displacing old samples. This causes the peer dispersion to increase eventually to infinity.</p>
-<p>The composition of the source population and the system peer selection is redetermined as each update from each source is received. The system peer and system variables are determined as described on the <a href="prefer.html">Mitigation Rules and the <tt>prefer</tt> Keyword</a> page. The system variables &Theta;, &Delta;, &Epsilon; and &Phi; are updated from the system peer variables of the same name and the system stratum set one greater than the system peer stratum. The system statistics are recorded by the <tt>loopstats</tt> option of the <a href="monopt.html#filegen"><tt>filegen</tt></a> command. System variables are displayed by the <tt>rv</tt> command of the <a href="ntpq.html#system"><tt>ntpq</tt></a> program.</p>
-<p>Although it might seem counterintuitive, a cardinal rule in the selection process is, once a sample has been selected by the clock filter algorithm, older samples are no longer selectable. This applies also to the clock select algorithm. Once the peer variables for a source have been selected, older variables of the same or other sources are no longer selectable. The reason for these rules is to limit the time delay in the clock discipline algorithm. This is necessary to preserve the optimum impulse response and thus the risetime and overshoot.</p>
+<p> In a window of eight (offset, delay, dispersion) samples, the algorithm described on the <a href="filter.html">Clock Filter Algorithm</a> page selects the sample with minimum delay, which generally represents the most accurate offset statistic. The selected offset sample determines the <em>peer offset</em> and <em>peer delay </em>statistics. The <em>peer dispersion</em> is a weighted average of the dispersion samples in the window. These quantities are recalculated as each update is received from the source. Between updates, both the sample dispersion and peer dispersion continue to grow at the same rate, 15 &mu;s/s. Finally, the <em>peer jitter</em> &phi; is determined as the RMS differences between the offset samples in the window relative to the selected offset sample. The peer statistics are recorded by the <tt>peerstats</tt> option of the <a href="monopt.html#filegen"><tt>filegen</tt></a> command. Peer variables are displayed by the <tt>rv</tt> command of the <a href="ntpq.html#peer"><tt>ntpq</tt></a> program.</p>
+<p> The clock filter algorithm continues to process updates in this way until the source is no longer reachable. Reachability is determined by an eight-bit shift register, which is shifted left by one bit as each poll packet is sent, with 0 replacing the vacated rightmost bit. Each time a valid update is received, the rightmost bit is set to 1. The source is considered reachable if any bit is set to 1 in the register; otherwise, it is considered unreachable. When a source becomes unreachable, a dummy sample with &quot;infinite&quot; dispersion is inserted in the filter window at each poll, thus displacing old samples. This causes the peer dispersion to increase eventually to infinity.</p>
+<p>The composition of the source population and the system peer selection is redetermined as each update from each source is received. The system peer and system variables are determined as described on the <a href="prefer.html">Mitigation Rules and the <tt>prefer</tt> Keyword</a> page. The system variables &Theta;, &Delta;, &Epsilon; and &Phi; are updated from the system peer variables of the same name and the system stratum set one greater than the system peer stratum. The system statistics are recorded by the <tt>loopstats</tt> option of the <a href="monopt.html#filegen"><tt>filegen</tt></a> command. System variables are displayed by the <tt>rv</tt> command of the <a href="ntpq.html#system"><tt>ntpq</tt></a> program.</p>
+<p>Although it might seem counterintuitive, a cardinal rule in the selection process is, once a sample has been selected by the clock filter algorithm, older samples are no longer selectable. This applies also to the clock select algorithm. Once the peer variables for a source have been selected, older variables of the same or other sources are no longer selectable. The reason for these rules is to limit the time delay in the clock discipline algorithm. This is necessary to preserve the optimum impulse response and thus the risetime and overshoot.</p>
<p>This means that not every sample can be used to update the peer variables, and up to seven samples can be ignored between selected samples. This fact has been carefully considered in the discipline algorithm design with due consideration for feedback loop delay and minimum sampling rate. In engineering terms, even if only one sample in eight survives, the resulting sample rate is twice the Nyquist rate at any time constant and poll interval.</p>
<h4 id="quality">3. Quality of Service</h4>
-<p>This section discusses how an NTP client determines the system performance using a peer population including reference clocks and remote servers. This is determined for each peer from two statistics, <em>peer jitter</em> and <em>root distance.</em> Peer jitter is determined from various jitter components as described above. It represents the expected error in determining the clock offset estimate. Root distance represents the maximum error of the estimate due to all causes.</p>
-<p>The root distance statistic is computed as one-half the <em> root delay</em> of the primary source of time; i.e., the reference clock, plus the <em> root dispersion</em> of that source. The root variables are included in the NTP packet header received from each source. At each update the root delay is recomputed as the sum of the root delay in the packet plus the peer delay, while the root dispersion is recomputed as the sum of the root dispersion in the packet plus the peer dispersion.</p>
+<p>This section discusses how an NTP client determines the system performance using a peer population including reference clocks and remote servers. This is determined for each peer from two statistics, <em>peer jitter</em> and <em>root distance.</em> Peer jitter is determined from various jitter components as described above. It represents the expected error in determining the clock offset estimate. Root distance represents the maximum error of the estimate due to all causes.</p>
+<p>The root distance statistic is computed as one-half the <em> root delay</em> of the primary source of time; i.e., the reference clock, plus the <em> root dispersion</em> of that source. The root variables are included in the NTP packet header received from each source. At each update the root delay is recomputed as the sum of the root delay in the packet plus the peer delay, while the root dispersion is recomputed as the sum of the root dispersion in the packet plus the peer dispersion.</p>
<blockquote>
- <p>Note. In order to avoid timing loops, the root distance is adjusted to the maximum of the above computation and a <em>minimum threshold.</em> The minimum threshold defaults to 1 ms, but can be changed according to client preference using the <tt>mindist</tt> option of the <a href="miscopt.html#tos"><tt>tos</tt></a> command.</p>
+ <p>Note. In order to avoid timing loops, the root distance is adjusted to the maximum of the above computation and a <em>minimum threshold.</em> The minimum threshold defaults to 1 ms, but can be changed according to client preference using the <tt>mindist</tt> option of the <a href="miscopt.html#tos"><tt>tos</tt></a> command.</p>
</blockquote>
-<p>A source is considered selectable only if its root distance is less than the <em>select threshold</em>, by default 1.5 s, but can be changed according to client preference using the <tt>maxdist</tt> option of the <a href="miscopt.html#tos"><tt>tos</tt></a> command. When an upstream server loses all sources, its root distance apparent to dependent clients continues to increase. The clients are not aware of this condition and continue to accept synchronization as long as the root distance is less than the select threshold.</p>
-<p>The root distance statistic is used by the select, cluster and mitigation algorithms. In this respect, it is sometimes called the <em>synchronization distance</em> often shortened simply to <em>distance</em>. The root distance is also used in the following ways.</p>
+<p>A source is considered selectable only if its root distance is less than the <em>select threshold</em>, by default 1.5 s, but can be changed according to client preference using the <tt>maxdist</tt> option of the <a href="miscopt.html#tos"><tt>tos</tt></a> command. When an upstream server loses all sources, its root distance apparent to dependent clients continues to increase. The clients are not aware of this condition and continue to accept synchronization as long as the root distance is less than the select threshold.</p>
+<p>The root distance statistic is used by the select, cluster and mitigation algorithms. In this respect, it is sometimes called the <em>synchronization distance</em> often shortened simply to <em>distance</em>. The root distance is also used in the following ways.</p>
<ul>
<li>Root distance defines the maximum error of the clock offset estimate due to all causes as long as the source remains reachable..</li>
- <li>Root distance defines the upper and lower limits of the correctness interval. This interval represents the maximum clock offset for each of possibly several sources. The clock select algorithm computes the intersection of the correctness intervals to determine the truechimers from the selectable source population.</li>
- <li>Root distance is used by the clock cluster algorithm as a weight factor when pruning outlyers from the truechimer population.</li>
+ <li>Root distance defines the upper and lower limits of the correctness interval. This interval represents the maximum clock offset for each of possibly several sources. The clock select algorithm computes the intersection of the correctness intervals to determine the truechimers from the selectable source population.</li>
+ <li>Root distance is used by the clock cluster algorithm as a weight factor when pruning outliers from the truechimer population.</li>
<li>The (normalized) reciprocal of the root distance is used as a weight factor by the combine algorithm when computing the system clock offset and system jitter.</li>
- <li>Root distance is used by the mitigation algorithm to select the system peer from among the cluster algorithm survivors.</li>
+ <li>Root distance is used by the mitigation algorithm to select the system peer from among the cluster algorithm survivors.</li>
</ul>
-<p>The root distance thus functions as a metric in the selection and weighting of the various available sources. The strategy is to select the system peer as the source with the minimum root distance and thus the minimum maximum error. The reference implementation uses the Bellman-Ford algorithm described in the literature, where the goal is to minimize the root distance. The algorithm selects the <em>system peer</em>, from which the system root delay and system root dispersion are inherited.</p>
-<p>The algorithms described on the <a href="prefer.html">Mitigation Rules and the <tt>prefer</tt> Keyword</a> page deliver several important statistics. The <em>system offset</em> and <em>system jitter</em> are weighted averages computed by the clock combine algorithm. System offset is best interpreted as the maximum-likelihood estimate of the system clock offset, while system jitter, also called estimated error, is best interpreted as the expected error of this estimate. <em>System delay</em> is the root delay inherited from the system peer, while <em>s</em><em>ystem dispersion</em> is the root dispersion plus contributions due to jitter and the absolute value of the system offset.</p>
-<p>The maximum system error, or <em>system distance</em>, is computed as one-half the system delay plus the system dispersion. In order to simplify discussion, certain minor contributions to the maximum error statistic are ignored. If the precision time kernel support is available, both the estimated error and maximum error are reported to user programs via the <tt>ntp_adjtime()</tt> kernel system call. See the <a href="kern.html">Kernel Model for Precision Timekeeping</a> page for further information.</p>
+<p>The root distance thus functions as a metric in the selection and weighting of the various available sources. The strategy is to select the system peer as the source with the minimum root distance and thus the minimum maximum error. The reference implementation uses the Bellman-Ford algorithm described in the literature, where the goal is to minimize the root distance. The algorithm selects the <em>system peer</em>, from which the system root delay and system root dispersion are inherited.</p>
+<p>The algorithms described on the <a href="prefer.html">Mitigation Rules and the <tt>prefer</tt> Keyword</a> page deliver several important statistics. The <em>system offset</em> and <em>system jitter</em> are weighted averages computed by the clock combine algorithm. System offset is best interpreted as the maximum-likelihood estimate of the system clock offset, while system jitter, also called estimated error, is best interpreted as the expected error of this estimate. <em>System delay</em> is the root delay inherited from the system peer, while <em>s</em><em>ystem dispersion</em> is the root dispersion plus contributions due to jitter and the absolute value of the system offset.</p>
+<p>The maximum system error, or <em>system distance</em>, is computed as one-half the system delay plus the system dispersion. In order to simplify discussion, certain minor contributions to the maximum error statistic are ignored. If the precision time kernel support is available, both the estimated error and maximum error are reported to user programs via the <tt>ntp_adjtime()</tt> kernel system call. See the <a href="kern.html">Kernel Model for Precision Timekeeping</a> page for further information.</p>
<hr>
<script type="text/javascript" language="javascript" src="scripts/footer.txt"></script>
</body>
diff --git a/contrib/ntp/include/Makefile.am b/contrib/ntp/include/Makefile.am
index 8b063c3..f032c97 100644
--- a/contrib/ntp/include/Makefile.am
+++ b/contrib/ntp/include/Makefile.am
@@ -62,6 +62,7 @@ noinst_HEADERS = \
ntpsim.h \
parse.h \
parse_conf.h \
+ rc_cmdlength.h \
recvbuff.h \
refclock_atom.h \
refidsmear.h \
diff --git a/contrib/ntp/include/Makefile.in b/contrib/ntp/include/Makefile.in
index 408118b..8f0968b 100644
--- a/contrib/ntp/include/Makefile.in
+++ b/contrib/ntp/include/Makefile.in
@@ -116,6 +116,7 @@ am__aclocal_m4_deps = $(top_srcdir)/sntp/libopts/m4/libopts.m4 \
$(top_srcdir)/sntp/m4/ntp_locinfo.m4 \
$(top_srcdir)/sntp/m4/ntp_openssl.m4 \
$(top_srcdir)/sntp/m4/ntp_pkg_config.m4 \
+ $(top_srcdir)/sntp/m4/ntp_problemtests.m4 \
$(top_srcdir)/sntp/m4/ntp_prog_cc.m4 \
$(top_srcdir)/sntp/m4/ntp_rlimit.m4 \
$(top_srcdir)/sntp/m4/ntp_sntp.m4 \
@@ -227,6 +228,7 @@ AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
+BUILD_THREAD = @BUILD_THREAD@
CALC_TICKADJ_DB = @CALC_TICKADJ_DB@
CALC_TICKADJ_DL = @CALC_TICKADJ_DL@
CALC_TICKADJ_DS = @CALC_TICKADJ_DS@
@@ -235,6 +237,7 @@ CALC_TICKADJ_NI = @CALC_TICKADJ_NI@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
+CFLAGS_LIBEVENT = @CFLAGS_LIBEVENT@
CFLAGS_NTP = @CFLAGS_NTP@
CHUTEST = @CHUTEST@
CONFIG_SHELL = @CONFIG_SHELL@
@@ -296,6 +299,7 @@ LIBTOOL_DEPS = @LIBTOOL_DEPS@
LIPO = @LIPO@
LN_S = @LN_S@
LSCF = @LSCF@
+LTHREAD_LIBS = @LTHREAD_LIBS@
LTLIBOBJS = @LTLIBOBJS@
MAKEINFO = @MAKEINFO@
MAKE_ADJTIMED = @MAKE_ADJTIMED@
@@ -543,6 +547,7 @@ noinst_HEADERS = \
ntpsim.h \
parse.h \
parse_conf.h \
+ rc_cmdlength.h \
recvbuff.h \
refclock_atom.h \
refidsmear.h \
diff --git a/contrib/ntp/include/isc/Makefile.in b/contrib/ntp/include/isc/Makefile.in
index 7cbcae3..5bd25d6 100644
--- a/contrib/ntp/include/isc/Makefile.in
+++ b/contrib/ntp/include/isc/Makefile.in
@@ -116,6 +116,7 @@ am__aclocal_m4_deps = $(top_srcdir)/sntp/libopts/m4/libopts.m4 \
$(top_srcdir)/sntp/m4/ntp_locinfo.m4 \
$(top_srcdir)/sntp/m4/ntp_openssl.m4 \
$(top_srcdir)/sntp/m4/ntp_pkg_config.m4 \
+ $(top_srcdir)/sntp/m4/ntp_problemtests.m4 \
$(top_srcdir)/sntp/m4/ntp_prog_cc.m4 \
$(top_srcdir)/sntp/m4/ntp_rlimit.m4 \
$(top_srcdir)/sntp/m4/ntp_sntp.m4 \
@@ -185,6 +186,7 @@ AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
+BUILD_THREAD = @BUILD_THREAD@
CALC_TICKADJ_DB = @CALC_TICKADJ_DB@
CALC_TICKADJ_DL = @CALC_TICKADJ_DL@
CALC_TICKADJ_DS = @CALC_TICKADJ_DS@
@@ -193,6 +195,7 @@ CALC_TICKADJ_NI = @CALC_TICKADJ_NI@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
+CFLAGS_LIBEVENT = @CFLAGS_LIBEVENT@
CFLAGS_NTP = @CFLAGS_NTP@
CHUTEST = @CHUTEST@
CONFIG_SHELL = @CONFIG_SHELL@
@@ -254,6 +257,7 @@ LIBTOOL_DEPS = @LIBTOOL_DEPS@
LIPO = @LIPO@
LN_S = @LN_S@
LSCF = @LSCF@
+LTHREAD_LIBS = @LTHREAD_LIBS@
LTLIBOBJS = @LTLIBOBJS@
MAKEINFO = @MAKEINFO@
MAKE_ADJTIMED = @MAKE_ADJTIMED@
diff --git a/contrib/ntp/include/ntp_assert.h b/contrib/ntp/include/ntp_assert.h
index 2f3bbc8..42d78ac 100644
--- a/contrib/ntp/include/ntp_assert.h
+++ b/contrib/ntp/include/ntp_assert.h
@@ -88,10 +88,6 @@ extern void calysto_assert(unsigned char cnd); /* check whether this holds */
* We initially used NTP_REQUIRE() instead of REQUIRE() etc, but that
* is unneccesarily verbose, as libisc use of REQUIRE() etc shows.
*/
-#define NTP_REQUIRE(x) REQUIRE(x)
-#define NTP_INSIST(x) INSIST(x)
-#define NTP_INVARIANT(x) INVARIANT(x)
-#define NTP_ENSURE(x) ENSURE(x)
# ifdef DEBUG
#define DEBUG_REQUIRE(x) REQUIRE(x)
diff --git a/contrib/ntp/include/ntp_calendar.h b/contrib/ntp/include/ntp_calendar.h
index 3afb627..6f36c07 100644
--- a/contrib/ntp/include/ntp_calendar.h
+++ b/contrib/ntp/include/ntp_calendar.h
@@ -157,6 +157,12 @@ ntpcal_daysplit(const vint64 *);
extern vint64
ntpcal_dayjoin(int32_t /* days */, int32_t /* seconds */);
+/* Get the number of leap years since epoch for the number of elapsed
+ * full years
+ */
+extern int32_t
+ntpcal_leapyears_in_years(int32_t /* years */);
+
/*
* Convert elapsed years in Era into elapsed days in Era.
*/
@@ -220,6 +226,9 @@ ntpcal_date_to_rd(const struct calendar * /* jt */);
*
* if 'isleapyear' is not NULL, it will receive an integer that is 0
* for regular years and a non-zero value for leap years.
+ *
+ * The input is limited to [-2^30, 2^30-1]. If the days exceed this
+ * range, errno is set to EDOM and the result is saturated.
*/
extern ntpcal_split
ntpcal_split_eradays(int32_t /* days */, int/*BOOL*/ * /* isleapyear */);
@@ -330,6 +339,10 @@ ntpcal_date_to_time(const struct calendar * /* jd */);
extern int32_t
isocal_weeks_in_years(int32_t /* years */);
+/*
+ * The input is limited to [-2^30, 2^30-1]. If the weeks exceed this
+ * range, errno is set to EDOM and the result is saturated.
+ */
extern ntpcal_split
isocal_split_eraweeks(int32_t /* weeks */);
diff --git a/contrib/ntp/include/ntp_config.h b/contrib/ntp/include/ntp_config.h
index a74cd55..bd8f595 100644
--- a/contrib/ntp/include/ntp_config.h
+++ b/contrib/ntp/include/ntp_config.h
@@ -46,8 +46,8 @@
extern int cmdline_server_count;
extern char ** cmdline_servers;
-/* set to zero if admin doesn't want memory locked */
-extern int do_memlock;
+/* set to zero if we're not locking memory */
+extern int cur_memlock;
typedef struct int_range_tag {
int first;
diff --git a/contrib/ntp/include/ntp_control.h b/contrib/ntp/include/ntp_control.h
index be5b16d..85f4105 100644
--- a/contrib/ntp/include/ntp_control.h
+++ b/contrib/ntp/include/ntp_control.h
@@ -104,7 +104,7 @@ struct ntp_control {
#define CTL_PST_SEL_REJECT 0 /* reject */
#define CTL_PST_SEL_SANE 1 /* x falsetick */
#define CTL_PST_SEL_CORRECT 2 /* . excess */
-#define CTL_PST_SEL_SELCAND 3 /* - outlyer */
+#define CTL_PST_SEL_SELCAND 3 /* - outlier */
#define CTL_PST_SEL_SYNCCAND 4 /* + candidate */
#define CTL_PST_SEL_EXCESS 5 /* # backup */
#define CTL_PST_SEL_SYSPEER 6 /* * sys.peer */
diff --git a/contrib/ntp/include/ntp_lists.h b/contrib/ntp/include/ntp_lists.h
index 2b6e616..d741974 100644
--- a/contrib/ntp/include/ntp_lists.h
+++ b/contrib/ntp/include/ntp_lists.h
@@ -215,9 +215,9 @@ do { \
\
for (pentry = (listhead); \
pentry != NULL; \
- pentry = pentry->nextlink){ \
- NTP_INSIST(pentry != pentry->nextlink); \
- NTP_INSIST((listhead) != pentry->nextlink); \
+ pentry = pentry->nextlink) { \
+ INSIST(pentry != pentry->nextlink); \
+ INSIST((listhead) != pentry->nextlink); \
} \
} while (FALSE)
diff --git a/contrib/ntp/include/ntp_stdlib.h b/contrib/ntp/include/ntp_stdlib.h
index bad2697..a2e62da 100644
--- a/contrib/ntp/include/ntp_stdlib.h
+++ b/contrib/ntp/include/ntp_stdlib.h
@@ -31,6 +31,7 @@ extern int mvsnprintf(char *, size_t, const char *, va_list)
extern int msnprintf(char *, size_t, const char *, ...)
NTP_PRINTF(3, 4);
extern void msyslog(int, const char *, ...) NTP_PRINTF(2, 3);
+extern void mvsyslog(int, const char *, va_list) NTP_PRINTF(2, 0);
extern void init_logging (const char *, u_int32, int);
extern int change_logfile (const char *, int);
extern void setup_logfile (const char *);
diff --git a/contrib/ntp/include/ntp_syslog.h b/contrib/ntp/include/ntp_syslog.h
index a0152b5..ecc6346 100644
--- a/contrib/ntp/include/ntp_syslog.h
+++ b/contrib/ntp/include/ntp_syslog.h
@@ -9,6 +9,7 @@
#ifdef VMS
extern void msyslog();
+extern void mvsyslog();
#else
# ifndef SYS_VXWORKS
# include <syslog.h>
diff --git a/contrib/ntp/include/ntp_types.h b/contrib/ntp/include/ntp_types.h
index 1c66165..a947f30 100644
--- a/contrib/ntp/include/ntp_types.h
+++ b/contrib/ntp/include/ntp_types.h
@@ -15,7 +15,8 @@
#include <sys/types.h>
#if defined(HAVE_INTTYPES_H)
# include <inttypes.h>
-#elif defined(HAVE_STDINT_H)
+#endif
+#if defined(HAVE_STDINT_H)
# include <stdint.h>
#endif
diff --git a/contrib/ntp/include/rc_cmdlength.h b/contrib/ntp/include/rc_cmdlength.h
new file mode 100644
index 0000000..8794757
--- /dev/null
+++ b/contrib/ntp/include/rc_cmdlength.h
@@ -0,0 +1,2 @@
+
+extern size_t remoteconfig_cmdlength( const char *src_buf, const char *src_end );
diff --git a/contrib/ntp/kernel/Makefile.in b/contrib/ntp/kernel/Makefile.in
index d66d994..dd00144 100644
--- a/contrib/ntp/kernel/Makefile.in
+++ b/contrib/ntp/kernel/Makefile.in
@@ -115,6 +115,7 @@ am__aclocal_m4_deps = $(top_srcdir)/sntp/libopts/m4/libopts.m4 \
$(top_srcdir)/sntp/m4/ntp_locinfo.m4 \
$(top_srcdir)/sntp/m4/ntp_openssl.m4 \
$(top_srcdir)/sntp/m4/ntp_pkg_config.m4 \
+ $(top_srcdir)/sntp/m4/ntp_problemtests.m4 \
$(top_srcdir)/sntp/m4/ntp_prog_cc.m4 \
$(top_srcdir)/sntp/m4/ntp_rlimit.m4 \
$(top_srcdir)/sntp/m4/ntp_sntp.m4 \
@@ -224,6 +225,7 @@ AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
+BUILD_THREAD = @BUILD_THREAD@
CALC_TICKADJ_DB = @CALC_TICKADJ_DB@
CALC_TICKADJ_DL = @CALC_TICKADJ_DL@
CALC_TICKADJ_DS = @CALC_TICKADJ_DS@
@@ -232,6 +234,7 @@ CALC_TICKADJ_NI = @CALC_TICKADJ_NI@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
+CFLAGS_LIBEVENT = @CFLAGS_LIBEVENT@
CFLAGS_NTP = @CFLAGS_NTP@
CHUTEST = @CHUTEST@
CONFIG_SHELL = @CONFIG_SHELL@
@@ -293,6 +296,7 @@ LIBTOOL_DEPS = @LIBTOOL_DEPS@
LIPO = @LIPO@
LN_S = @LN_S@
LSCF = @LSCF@
+LTHREAD_LIBS = @LTHREAD_LIBS@
LTLIBOBJS = @LTLIBOBJS@
MAKEINFO = @MAKEINFO@
MAKE_ADJTIMED = @MAKE_ADJTIMED@
diff --git a/contrib/ntp/kernel/sys/Makefile.in b/contrib/ntp/kernel/sys/Makefile.in
index a9cefad..58b0b6e 100644
--- a/contrib/ntp/kernel/sys/Makefile.in
+++ b/contrib/ntp/kernel/sys/Makefile.in
@@ -116,6 +116,7 @@ am__aclocal_m4_deps = $(top_srcdir)/sntp/libopts/m4/libopts.m4 \
$(top_srcdir)/sntp/m4/ntp_locinfo.m4 \
$(top_srcdir)/sntp/m4/ntp_openssl.m4 \
$(top_srcdir)/sntp/m4/ntp_pkg_config.m4 \
+ $(top_srcdir)/sntp/m4/ntp_problemtests.m4 \
$(top_srcdir)/sntp/m4/ntp_prog_cc.m4 \
$(top_srcdir)/sntp/m4/ntp_rlimit.m4 \
$(top_srcdir)/sntp/m4/ntp_sntp.m4 \
@@ -185,6 +186,7 @@ AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
+BUILD_THREAD = @BUILD_THREAD@
CALC_TICKADJ_DB = @CALC_TICKADJ_DB@
CALC_TICKADJ_DL = @CALC_TICKADJ_DL@
CALC_TICKADJ_DS = @CALC_TICKADJ_DS@
@@ -193,6 +195,7 @@ CALC_TICKADJ_NI = @CALC_TICKADJ_NI@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
+CFLAGS_LIBEVENT = @CFLAGS_LIBEVENT@
CFLAGS_NTP = @CFLAGS_NTP@
CHUTEST = @CHUTEST@
CONFIG_SHELL = @CONFIG_SHELL@
@@ -254,6 +257,7 @@ LIBTOOL_DEPS = @LIBTOOL_DEPS@
LIPO = @LIPO@
LN_S = @LN_S@
LSCF = @LSCF@
+LTHREAD_LIBS = @LTHREAD_LIBS@
LTLIBOBJS = @LTLIBOBJS@
MAKEINFO = @MAKEINFO@
MAKE_ADJTIMED = @MAKE_ADJTIMED@
diff --git a/contrib/ntp/libntp/Makefile.in b/contrib/ntp/libntp/Makefile.in
index b4b1d81..6e40cd4 100644
--- a/contrib/ntp/libntp/Makefile.in
+++ b/contrib/ntp/libntp/Makefile.in
@@ -117,6 +117,7 @@ am__aclocal_m4_deps = $(top_srcdir)/sntp/libopts/m4/libopts.m4 \
$(top_srcdir)/sntp/m4/ntp_locinfo.m4 \
$(top_srcdir)/sntp/m4/ntp_openssl.m4 \
$(top_srcdir)/sntp/m4/ntp_pkg_config.m4 \
+ $(top_srcdir)/sntp/m4/ntp_problemtests.m4 \
$(top_srcdir)/sntp/m4/ntp_prog_cc.m4 \
$(top_srcdir)/sntp/m4/ntp_rlimit.m4 \
$(top_srcdir)/sntp/m4/ntp_sntp.m4 \
@@ -345,6 +346,7 @@ AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
+BUILD_THREAD = @BUILD_THREAD@
CALC_TICKADJ_DB = @CALC_TICKADJ_DB@
CALC_TICKADJ_DL = @CALC_TICKADJ_DL@
CALC_TICKADJ_DS = @CALC_TICKADJ_DS@
@@ -353,6 +355,7 @@ CALC_TICKADJ_NI = @CALC_TICKADJ_NI@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
+CFLAGS_LIBEVENT = @CFLAGS_LIBEVENT@
CFLAGS_NTP = @CFLAGS_NTP@
CHUTEST = @CHUTEST@
CONFIG_SHELL = @CONFIG_SHELL@
@@ -414,6 +417,7 @@ LIBTOOL_DEPS = @LIBTOOL_DEPS@
LIPO = @LIPO@
LN_S = @LN_S@
LSCF = @LSCF@
+LTHREAD_LIBS = @LTHREAD_LIBS@
LTLIBOBJS = @LTLIBOBJS@
MAKEINFO = @MAKEINFO@
MAKE_ADJTIMED = @MAKE_ADJTIMED@
diff --git a/contrib/ntp/libntp/atolfp.c b/contrib/ntp/libntp/atolfp.c
index 3a65f6b..9a2f691 100644
--- a/contrib/ntp/libntp/atolfp.c
+++ b/contrib/ntp/libntp/atolfp.c
@@ -40,7 +40,7 @@ atolfp(
int isneg;
static const char *digits = "0123456789";
- NTP_REQUIRE(str != NULL);
+ REQUIRE(str != NULL);
isneg = 0;
dec_i = dec_f = 0;
diff --git a/contrib/ntp/libntp/audio.c b/contrib/ntp/libntp/audio.c
index 6f2262c..726dfa9 100644
--- a/contrib/ntp/libntp/audio.c
+++ b/contrib/ntp/libntp/audio.c
@@ -377,7 +377,9 @@ audio_gain(
#ifdef PCM_STYLE_SOUND
int l, r;
- rval = 0;
+# ifdef GCC
+ rval = 0; /* GCC thinks rval is used uninitialized */
+# endif
r = l = 100 * gain / 255; /* Normalize to 0-100 */
# ifdef DEBUG
@@ -392,10 +394,11 @@ audio_gain(
if (cf_agc[0] != '\0')
rval = ioctl(ctl_fd, agc, &l);
else
- if (2 == port)
- rval = ioctl(ctl_fd, SOUND_MIXER_WRITE_LINE, &l);
- else
- rval = ioctl(ctl_fd, SOUND_MIXER_WRITE_MIC, &l);
+ rval = ioctl(ctl_fd
+ , (2 == port)
+ ? SOUND_MIXER_WRITE_LINE
+ : SOUND_MIXER_WRITE_MIC
+ , &l);
if (-1 == rval) {
printf("audio_gain: agc write: %s\n", strerror(errno));
return rval;
diff --git a/contrib/ntp/libntp/authkeys.c b/contrib/ntp/libntp/authkeys.c
index 68771ff..667ca29 100644
--- a/contrib/ntp/libntp/authkeys.c
+++ b/contrib/ntp/libntp/authkeys.c
@@ -534,6 +534,12 @@ MD5auth_setkey(
bucket = &key_hash[KEYHASH(keyno)];
for (sk = *bucket; sk != NULL; sk = sk->hlink) {
if (keyno == sk->keyid) {
+ /* TALOS-CAN-0054: make sure we have a new buffer! */
+ if (NULL != sk->secret) {
+ memset(sk->secret, 0, sk->secretsize);
+ free(sk->secret);
+ }
+ sk->secret = emalloc(len);
sk->type = (u_short)keytype;
secretsize = len;
sk->secretsize = (u_short)secretsize;
@@ -593,12 +599,14 @@ auth_delkeys(void)
}
/*
- * Don't lose info as to which keys are trusted.
+ * Don't lose info as to which keys are trusted. Make
+ * sure there are no dangling pointers!
*/
if (KEY_TRUSTED & sk->flags) {
if (sk->secret != NULL) {
- memset(sk->secret, '\0', sk->secretsize);
+ memset(sk->secret, 0, sk->secretsize);
free(sk->secret);
+ sk->secret = NULL; /* TALOS-CAN-0054 */
}
sk->secretsize = 0;
sk->lifetime = 0;
diff --git a/contrib/ntp/libntp/authreadkeys.c b/contrib/ntp/libntp/authreadkeys.c
index e8ddc94..1c4c07c 100644
--- a/contrib/ntp/libntp/authreadkeys.c
+++ b/contrib/ntp/libntp/authreadkeys.c
@@ -62,6 +62,40 @@ nexttok(
}
+/* TALOS-CAN-0055: possibly DoS attack by setting the key file to the
+ * log file. This is hard to prevent (it would need to check two files
+ * to be the same on the inode level, which will not work so easily with
+ * Windows or VMS) but we can avoid the self-amplification loop: We only
+ * log the first 5 errors, silently ignore the next 10 errors, and give
+ * up when when we have found more than 15 errors.
+ *
+ * This avoids the endless file iteration we will end up with otherwise,
+ * and also avoids overflowing the log file.
+ *
+ * Nevertheless, once this happens, the keys are gone since this would
+ * require a save/swap strategy that is not easy to apply due to the
+ * data on global/static level.
+ */
+
+static const size_t nerr_loglimit = 5u;
+static const size_t nerr_maxlimit = 15;
+
+static void log_maybe(size_t*, const char*, ...) NTP_PRINTF(2, 3);
+
+static void
+log_maybe(
+ size_t *pnerr,
+ const char *fmt ,
+ ...)
+{
+ va_list ap;
+ if (++(*pnerr) <= nerr_loglimit) {
+ va_start(ap, fmt);
+ mvsyslog(LOG_ERR, fmt, ap);
+ va_end(ap);
+ }
+}
+
/*
* authreadkeys - (re)read keys from a file.
*/
@@ -79,7 +113,7 @@ authreadkeys(
u_char keystr[32]; /* Bug 2537 */
size_t len;
size_t j;
-
+ size_t nerr;
/*
* Open file. Complain and return if it can't be opened.
*/
@@ -99,7 +133,10 @@ authreadkeys(
/*
* Now read lines from the file, looking for key entries
*/
+ nerr = 0;
while ((line = fgets(buf, sizeof buf, fp)) != NULL) {
+ if (nerr > nerr_maxlimit)
+ break;
token = nexttok(&line);
if (token == NULL)
continue;
@@ -109,15 +146,16 @@ authreadkeys(
*/
keyno = atoi(token);
if (keyno == 0) {
- msyslog(LOG_ERR,
- "authreadkeys: cannot change key %s", token);
+ log_maybe(&nerr,
+ "authreadkeys: cannot change key %s",
+ token);
continue;
}
if (keyno > NTP_MAXKEY) {
- msyslog(LOG_ERR,
- "authreadkeys: key %s > %d reserved for Autokey",
- token, NTP_MAXKEY);
+ log_maybe(&nerr,
+ "authreadkeys: key %s > %d reserved for Autokey",
+ token, NTP_MAXKEY);
continue;
}
@@ -126,8 +164,9 @@ authreadkeys(
*/
token = nexttok(&line);
if (token == NULL) {
- msyslog(LOG_ERR,
- "authreadkeys: no key type for key %d", keyno);
+ log_maybe(&nerr,
+ "authreadkeys: no key type for key %d",
+ keyno);
continue;
}
#ifdef OPENSSL
@@ -139,13 +178,15 @@ authreadkeys(
*/
keytype = keytype_from_text(token, NULL);
if (keytype == 0) {
- msyslog(LOG_ERR,
- "authreadkeys: invalid type for key %d", keyno);
+ log_maybe(&nerr,
+ "authreadkeys: invalid type for key %d",
+ keyno);
continue;
}
if (EVP_get_digestbynid(keytype) == NULL) {
- msyslog(LOG_ERR,
- "authreadkeys: no algorithm for key %d", keyno);
+ log_maybe(&nerr,
+ "authreadkeys: no algorithm for key %d",
+ keyno);
continue;
}
#else /* !OPENSSL follows */
@@ -155,8 +196,9 @@ authreadkeys(
* 'm' for compatibility.
*/
if (!(*token == 'M' || *token == 'm')) {
- msyslog(LOG_ERR,
- "authreadkeys: invalid type for key %d", keyno);
+ log_maybe(&nerr,
+ "authreadkeys: invalid type for key %d",
+ keyno);
continue;
}
keytype = KEY_TYPE_MD5;
@@ -170,8 +212,8 @@ authreadkeys(
*/
token = nexttok(&line);
if (token == NULL) {
- msyslog(LOG_ERR,
- "authreadkeys: no key for key %d", keyno);
+ log_maybe(&nerr,
+ "authreadkeys: no key for key %d", keyno);
continue;
}
len = strlen(token);
@@ -195,13 +237,24 @@ authreadkeys(
keystr[j / 2] = temp << 4;
}
if (j < jlim) {
- msyslog(LOG_ERR,
- "authreadkeys: invalid hex digit for key %d", keyno);
+ log_maybe(&nerr,
+ "authreadkeys: invalid hex digit for key %d",
+ keyno);
continue;
}
MD5auth_setkey(keyno, keytype, keystr, jlim / 2);
}
}
fclose(fp);
+ if (nerr > nerr_maxlimit) {
+ msyslog(LOG_ERR,
+ "authreadkeys: emergency break after %u errors",
+ nerr);
+ return (0);
+ } else if (nerr > nerr_loglimit) {
+ msyslog(LOG_ERR,
+ "authreadkeys: found %u more error(s)",
+ nerr - nerr_loglimit);
+ }
return (1);
}
diff --git a/contrib/ntp/libntp/caljulian.c b/contrib/ntp/libntp/caljulian.c
index 6463699..4a30603 100644
--- a/contrib/ntp/libntp/caljulian.c
+++ b/contrib/ntp/libntp/caljulian.c
@@ -28,7 +28,7 @@ caljulian(
ntpcal_split split;
- NTP_INSIST(NULL != jt);
+ INSIST(NULL != jt);
/*
* Unfold ntp time around current time into NTP domain. Split
diff --git a/contrib/ntp/libntp/caltontp.c b/contrib/ntp/libntp/caltontp.c
index 4246a6a..808c94c 100644
--- a/contrib/ntp/libntp/caltontp.c
+++ b/contrib/ntp/libntp/caltontp.c
@@ -40,14 +40,14 @@ caltontp(
int32_t eraday; /* CE Rata Die number */
vint64 ntptime;/* resulting NTP time */
- NTP_INSIST(jt != NULL);
+ REQUIRE(jt != NULL);
- NTP_REQUIRE(jt->month <= 13); /* permit month 0..13! */
- NTP_REQUIRE(jt->monthday <= 32);
- NTP_REQUIRE(jt->yearday <= 366);
- NTP_REQUIRE(jt->hour <= 24);
- NTP_REQUIRE(jt->minute <= MINSPERHR);
- NTP_REQUIRE(jt->second <= SECSPERMIN);
+ REQUIRE(jt->month <= 13); /* permit month 0..13! */
+ REQUIRE(jt->monthday <= 32);
+ REQUIRE(jt->yearday <= 366);
+ REQUIRE(jt->hour <= 24);
+ REQUIRE(jt->minute <= MINSPERHR);
+ REQUIRE(jt->second <= SECSPERMIN);
/*
* First convert the date to he corresponding RataDie
diff --git a/contrib/ntp/libntp/decodenetnum.c b/contrib/ntp/libntp/decodenetnum.c
index 187d5ca..35b908f 100644
--- a/contrib/ntp/libntp/decodenetnum.c
+++ b/contrib/ntp/libntp/decodenetnum.c
@@ -35,8 +35,11 @@ decodenetnum(
char *np;
char name[80];
- NTP_REQUIRE(num != NULL);
- NTP_REQUIRE(strlen(num) < sizeof(name));
+ REQUIRE(num != NULL);
+
+ if (strlen(num) >= sizeof(name)) {
+ return 0;
+ }
port_str = NULL;
if ('[' != num[0]) {
@@ -72,7 +75,7 @@ decodenetnum(
err = getaddrinfo(cp, "ntp", &hints, &ai);
if (err != 0)
return 0;
- NTP_INSIST(ai->ai_addrlen <= sizeof(*netnum));
+ INSIST(ai->ai_addrlen <= sizeof(*netnum));
ZERO(*netnum);
memcpy(netnum, ai->ai_addr, ai->ai_addrlen);
freeaddrinfo(ai);
diff --git a/contrib/ntp/libntp/emalloc.c b/contrib/ntp/libntp/emalloc.c
index 95d293f..8b7ef99 100644
--- a/contrib/ntp/libntp/emalloc.c
+++ b/contrib/ntp/libntp/emalloc.c
@@ -76,8 +76,6 @@ ereallocz(
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
-#include <stdint.h>
-
/*
* This is sqrt(SIZE_MAX+1), as s1*s2 <= SIZE_MAX
* if both s1 < MUL_NO_OVERFLOW and s2 < MUL_NO_OVERFLOW
diff --git a/contrib/ntp/libntp/icom.c b/contrib/ntp/libntp/icom.c
index 8070011..2e95db5 100644
--- a/contrib/ntp/libntp/icom.c
+++ b/contrib/ntp/libntp/icom.c
@@ -6,14 +6,16 @@
* frequency. All other parameters must be manually set before use.
*/
#include <config.h>
-#include "icom.h"
+#include <ntp_stdlib.h>
+#include <ntp_tty.h>
+#include <l_stdlib.h>
+#include <icom.h>
+
#include <unistd.h>
#include <stdio.h>
#include <fcntl.h>
#include <errno.h>
-#include "ntp_tty.h"
-#include "l_stdlib.h"
#ifdef SYS_WINNT
#undef write /* ports/winnt/include/config.h: #define write _write */
@@ -60,9 +62,14 @@ static void doublefreq (double, u_char *, int);
/*
* icom_freq(fd, ident, freq) - load radio frequency
+ *
+ * returns:
+ * 0 (ok)
+ * -1 (error)
+ * 1 (short write to device)
*/
int
-icom_freq( /* returns 0 (ok), EIO (error) */
+icom_freq(
int fd, /* file descriptor */
int ident, /* ICOM radio identifier */
double freq /* frequency (MHz) */
@@ -71,6 +78,7 @@ icom_freq( /* returns 0 (ok), EIO (error) */
u_char cmd[] = {PAD, PR, PR, 0, TX, V_SFREQ, 0, 0, 0, 0, FI,
FI};
int temp;
+ int rc;
cmd[3] = (char)ident;
if (ident == IC735)
@@ -78,9 +86,17 @@ icom_freq( /* returns 0 (ok), EIO (error) */
else
temp = 5;
doublefreq(freq * 1e6, &cmd[6], temp);
- temp = write(fd, cmd, temp + 7);
+ rc = write(fd, cmd, temp + 7);
+ if (rc == -1) {
+ msyslog(LOG_ERR, "icom_freq: write() failed: %m");
+ return -1;
+ } else if (rc != temp + 7) {
+ msyslog(LOG_ERR, "icom_freq: only wrote %d of %d bytes.",
+ rc, temp+7);
+ return 1;
+ }
- return (0);
+ return 0;
}
diff --git a/contrib/ntp/libntp/machines.c b/contrib/ntp/libntp/machines.c
index 43944f9..7a29ac0 100644
--- a/contrib/ntp/libntp/machines.c
+++ b/contrib/ntp/libntp/machines.c
@@ -40,7 +40,7 @@ struct hostent *gethostbyname(char *name)
{
struct hostent *host1;
h_errno = 0; /* we are always successful!!! */
- host1 = (struct hostent *) malloc (sizeof(struct hostent));
+ host1 = (struct hostent *) emalloc (sizeof(struct hostent));
host1->h_name = name;
host1->h_addrtype = AF_INET;
host1->h_aliases = name;
@@ -54,7 +54,7 @@ struct hostent *gethostbyaddr(char *name, int size, int addr_type)
{
struct hostent *host1;
h_errno = 0; /* we are always successful!!! */
- host1 = (struct hostent *) malloc (sizeof(struct hostent));
+ host1 = (struct hostent *) emalloc (sizeof(struct hostent));
host1->h_name = name;
host1->h_addrtype = AF_INET;
host1->h_aliases = name;
@@ -66,7 +66,7 @@ struct hostent *gethostbyaddr(char *name, int size, int addr_type)
struct servent *getservbyname (char *name, char *type)
{
struct servent *serv1;
- serv1 = (struct servent *) malloc (sizeof(struct servent));
+ serv1 = (struct servent *) emalloc (sizeof(struct servent));
serv1->s_name = "ntp"; /* official service name */
serv1->s_aliases = NULL; /* alias list */
serv1->s_port = 123; /* port # */
diff --git a/contrib/ntp/libntp/msyslog.c b/contrib/ntp/libntp/msyslog.c
index 283414d..cc8868f 100644
--- a/contrib/ntp/libntp/msyslog.c
+++ b/contrib/ntp/libntp/msyslog.c
@@ -38,7 +38,7 @@ char * syslog_abs_fname;
#define INIT_NTP_SYSLOGMASK ~(u_int32)0
u_int32 ntp_syslogmask = INIT_NTP_SYSLOGMASK;
-extern char * progname;
+extern char const * progname;
/* Declare the local functions */
void addto_syslog (int, const char *);
@@ -145,8 +145,8 @@ addto_syslog(
const char * msg
)
{
- static char * prevcall_progname;
- static char * prog;
+ static char const * prevcall_progname;
+ static char const * prog;
const char nl[] = "\n";
const char empty[] = "";
FILE * term_file;
@@ -357,6 +357,18 @@ msyslog(
addto_syslog(level, buf);
}
+void
+mvsyslog(
+ int level,
+ const char * fmt,
+ va_list ap
+ )
+{
+ char buf[1024];
+ mvsnprintf(buf, sizeof(buf), fmt, ap);
+ addto_syslog(level, buf);
+}
+
/*
* Initialize the logging
@@ -371,7 +383,7 @@ init_logging(
)
{
static int was_daemon;
- const char * cp;
+ char * cp;
const char * pname;
/*
@@ -402,7 +414,7 @@ init_logging(
#ifdef SYS_WINNT /* strip ".exe" */
cp = strrchr(progname, '.');
if (NULL != cp && !strcasecmp(cp, ".exe"))
- progname[cp - progname] = '\0';
+ *cp = '\0';
#endif
#if !defined(VMS)
@@ -454,7 +466,7 @@ change_logfile(
size_t octets;
#endif /* POSIX */
- NTP_REQUIRE(fname != NULL);
+ REQUIRE(fname != NULL);
log_fname = fname;
/*
diff --git a/contrib/ntp/libntp/ntp_calendar.c b/contrib/ntp/libntp/ntp_calendar.c
index ff91fcf..ff6ead3 100644
--- a/contrib/ntp/libntp/ntp_calendar.c
+++ b/contrib/ntp/libntp/ntp_calendar.c
@@ -3,7 +3,55 @@
*
* Written by Juergen Perlinger (perlinger@ntp.org) for the NTP project.
* The contents of 'html/copyright.html' apply.
+ *
+ * --------------------------------------------------------------------
+ * Some notes on the implementation:
+ *
+ * Calendar algorithms thrive on the division operation, which is one of
+ * the slowest numerical operations in any CPU. What saves us here from
+ * abysmal performance is the fact that all divisions are divisions by
+ * constant numbers, and most compilers can do this by a multiplication
+ * operation. But this might not work when using the div/ldiv/lldiv
+ * function family, because many compilers are not able to do inline
+ * expansion of the code with following optimisation for the
+ * constant-divider case.
+ *
+ * Also div/ldiv/lldiv are defined in terms of int/long/longlong, which
+ * are inherently target dependent. Nothing that could not be cured with
+ * autoconf, but still a mess...
+ *
+ * Furthermore, we need floor division in many places. C either leaves
+ * the division behaviour undefined (< C99) or demands truncation to
+ * zero (>= C99), so additional steps are required to make sure the
+ * algorithms work. The {l,ll}div function family is requested to
+ * truncate towards zero, which is also the wrong direction for our
+ * purpose.
+ *
+ * For all this, all divisions by constant are coded manually, even when
+ * there is a joined div/mod operation: The optimiser should sort that
+ * out, if possible. Most of the calculations are done with unsigned
+ * types, explicitely using two's complement arithmetics where
+ * necessary. This minimises the dependecies to compiler and target,
+ * while still giving reasonable to good performance.
+ *
+ * The implementation uses a few tricks that exploit properties of the
+ * two's complement: Floor division on negative dividents can be
+ * executed by using the one's complement of the divident. One's
+ * complement can be easily created using XOR and a mask.
+ *
+ * Finally, check for overflow conditions is minimal. There are only two
+ * calculation steps in the whole calendar that suffer from an internal
+ * overflow, and these conditions are checked: errno is set to EDOM and
+ * the results are clamped/saturated in this case. All other functions
+ * do not suffer from internal overflow and simply return the result
+ * truncated to 32 bits.
+ *
+ * This is a sacrifice made for execution speed. Since a 32-bit day
+ * counter covers +/- 5,879,610 years and the clamp limits the effective
+ * range to +/-2.9 million years, this should not pose a problem here.
+ *
*/
+
#include <config.h>
#include <sys/types.h>
@@ -13,6 +61,33 @@
#include "ntp_fp.h"
#include "ntp_unixtime.h"
+/* For now, let's take the conservative approach: if the target property
+ * macros are not defined, check a few well-known compiler/architecture
+ * settings. Default is to assume that the representation of signed
+ * integers is unknown and shift-arithmetic-right is not available.
+ */
+#ifndef TARGET_HAS_2CPL
+# if defined(__GNUC__)
+# if defined(__i386__) || defined(__x86_64__) || defined(__arm__)
+# define TARGET_HAS_2CPL 1
+# else
+# define TARGET_HAS_2CPL 0
+# endif
+# elif defined(_MSC_VER)
+# if defined(_M_IX86) || defined(_M_X64) || defined(_M_ARM)
+# define TARGET_HAS_2CPL 1
+# else
+# define TARGET_HAS_2CPL 0
+# endif
+# else
+# define TARGET_HAS_2CPL 0
+# endif
+#endif
+
+#ifndef TARGET_HAS_SAR
+# define TARGET_HAS_SAR 0
+#endif
+
/*
*---------------------------------------------------------------------
* replacing the 'time()' function
@@ -47,6 +122,117 @@ now(void)
/*
*---------------------------------------------------------------------
+ * Get sign extension mask and unsigned 2cpl rep for a signed integer
+ *---------------------------------------------------------------------
+ */
+
+static inline uint32_t
+int32_sflag(
+ const int32_t v)
+{
+# if TARGET_HAS_2CPL && TARGET_HAS_SAR && SIZEOF_INT >= 4
+
+ /* Let's assume that shift is the fastest way to get the sign
+ * extension of of a signed integer. This might not always be
+ * true, though -- On 8bit CPUs or machines without barrel
+ * shifter this will kill the performance. So we make sure
+ * we do this only if 'int' has at least 4 bytes.
+ */
+ return (uint32_t)(v >> 31);
+
+# else
+
+ /* This should be a rather generic approach for getting a sign
+ * extension mask...
+ */
+ return UINT32_C(0) - (uint32_t)(v < 0);
+
+# endif
+}
+
+static inline uint32_t
+int32_to_uint32_2cpl(
+ const int32_t v)
+{
+ uint32_t vu;
+
+# if TARGET_HAS_2CPL
+
+ /* Just copy through the 32 bits from the signed value if we're
+ * on a two's complement target.
+ */
+ vu = (uint32_t)v;
+
+# else
+
+ /* Convert from signed int to unsigned int two's complement. Do
+ * not make any assumptions about the representation of signed
+ * integers, but make sure signed integer overflow cannot happen
+ * here. A compiler on a two's complement target *might* find
+ * out that this is just a complicated cast (as above), but your
+ * mileage might vary.
+ */
+ if (v < 0)
+ vu = ~(uint32_t)(-(v + 1));
+ else
+ vu = (uint32_t)v;
+
+# endif
+
+ return vu;
+}
+
+static inline int32_t
+uint32_2cpl_to_int32(
+ const uint32_t vu)
+{
+ int32_t v;
+
+# if TARGET_HAS_2CPL
+
+ /* Just copy through the 32 bits from the unsigned value if
+ * we're on a two's complement target.
+ */
+ v = (int32_t)vu;
+
+# else
+
+ /* Convert to signed integer, making sure signed integer
+ * overflow cannot happen. Again, the optimiser might or might
+ * not find out that this is just a copy of 32 bits on a target
+ * with two's complement representation for signed integers.
+ */
+ if (vu > INT32_MAX)
+ v = -(int32_t)(~vu) - 1;
+ else
+ v = (int32_t)vu;
+
+# endif
+
+ return v;
+}
+
+/* Some of the calculations need to multiply the input by 4 before doing
+ * a division. This can cause overflow and strange results. Therefore we
+ * clamp / saturate the input operand. And since we do the calculations
+ * in unsigned int with an extra sign flag/mask, we only loose one bit
+ * of the input value range.
+ */
+static inline uint32_t
+uint32_saturate(
+ uint32_t vu,
+ uint32_t mu)
+{
+ static const uint32_t limit = UINT32_MAX/4u;
+ if ((mu ^ vu) > limit) {
+ vu = mu ^ limit;
+ errno = EDOM;
+ }
+ return vu;
+}
+
+/*
+ *---------------------------------------------------------------------
* Convert between 'time_t' and 'vint64'
*---------------------------------------------------------------------
*/
@@ -60,7 +246,7 @@ time_to_vint64(
tt = *ptt;
-#if SIZEOF_TIME_T <= 4
+# if SIZEOF_TIME_T <= 4
res.D_s.hi = 0;
if (tt < 0) {
@@ -70,11 +256,11 @@ time_to_vint64(
res.D_s.lo = (uint32_t)tt;
}
-#elif defined(HAVE_INT64)
+# elif defined(HAVE_INT64)
res.q_s = tt;
-#else
+# else
/*
* shifting negative signed quantities is compiler-dependent, so
* we better avoid it and do it all manually. And shifting more
@@ -90,7 +276,7 @@ time_to_vint64(
res.D_s.hi = (uint32_t)(tt >> 32);
}
-#endif
+# endif
return res;
}
@@ -103,19 +289,19 @@ vint64_to_time(
{
time_t res;
-#if SIZEOF_TIME_T <= 4
+# if SIZEOF_TIME_T <= 4
res = (time_t)tv->D_s.lo;
-#elif defined(HAVE_INT64)
+# elif defined(HAVE_INT64)
res = (time_t)tv->q_s;
-#else
+# else
res = ((time_t)tv->d_s.hi << 32) | tv->D_s.lo;
-#endif
+# endif
return res;
}
@@ -153,11 +339,11 @@ ntpcal_get_build_date(
* problem.
*
*/
-#ifdef MKREPRO_DATE
+# ifdef MKREPRO_DATE
static const char build[] = MKREPRO_TIME "/" MKREPRO_DATE;
-#else
+# else
static const char build[] = __TIME__ "/" __DATE__;
-#endif
+# endif
static const char mlist[] = "JanFebMarAprMayJunJulAugSepOctNovDec";
char monstr[4];
@@ -167,16 +353,16 @@ ntpcal_get_build_date(
* so using 'uint16_t' is contra-indicated!
*/
-#ifdef DEBUG
+# ifdef DEBUG
static int ignore = 0;
-#endif
+# endif
ZERO(*jd);
jd->year = 1970;
jd->month = 1;
jd->monthday = 1;
-#ifdef DEBUG
+# ifdef DEBUG
/* check environment if build date should be ignored */
if (0 == ignore) {
const char * envstr;
@@ -185,7 +371,7 @@ ntpcal_get_build_date(
}
if (ignore > 1)
return FALSE;
-#endif
+# endif
if (6 == sscanf(build, "%hu:%hu:%hu/%3s %hu %hu",
&hour, &minute, &second, monstr, &day, &year)) {
@@ -254,37 +440,8 @@ static const uint16_t real_month_table[2][13] = {
* (day number). This is the number of days elapsed since 0000-12-31
* in the proleptic Gregorian calendar. The begin of the Christian Era
* (0001-01-01) is RD(1).
- *
- *
- * Some notes on the implementation:
- *
- * Calendar algorithms thrive on the division operation, which is one of
- * the slowest numerical operations in any CPU. What saves us here from
- * abysmal performance is the fact that all divisions are divisions by
- * constant numbers, and most compilers can do this by a multiplication
- * operation. But this might not work when using the div/ldiv/lldiv
- * function family, because many compilers are not able to do inline
- * expansion of the code with following optimisation for the
- * constant-divider case.
- *
- * Also div/ldiv/lldiv are defined in terms of int/long/longlong, which
- * are inherently target dependent. Nothing that could not be cured with
- * autoconf, but still a mess...
- *
- * Furthermore, we need floor division while C demands truncation to
- * zero, so additional steps are required to make sure the algorithms
- * work.
- *
- * For all this, all divisions by constant are coded manually, even when
- * there is a joined div/mod operation: The optimiser should sort that
- * out, if possible.
- *
- * Finally, the functions do not check for overflow conditions. This
- * is a sacrifice made for execution speed; since a 32-bit day counter
- * covers +/- 5,879,610 years, this should not pose a problem here.
*/
-
/*
* ==================================================================
*
@@ -363,22 +520,23 @@ ntpcal_periodic_extend(
* Get absolute difference as unsigned quantity and
* the complement flag. This is done by always
* subtracting the smaller value from the bigger
- * one. This implementation works only on a two's
- * complement machine!
+ * one.
*/
if (value >= pivot) {
- diff = (uint32_t)value - (uint32_t)pivot;
+ diff = int32_to_uint32_2cpl(value)
+ - int32_to_uint32_2cpl(pivot);
} else {
- diff = (uint32_t)pivot - (uint32_t)value;
+ diff = int32_to_uint32_2cpl(pivot)
+ - int32_to_uint32_2cpl(value);
cpl ^= 1;
}
diff %= (uint32_t)cycle;
if (diff) {
if (cpl)
- diff = cycle - diff;
+ diff = (uint32_t)cycle - diff;
if (neg)
diff = ~diff + 1;
- pivot += diff;
+ pivot += uint32_2cpl_to_int32(diff);
}
}
return pivot;
@@ -405,7 +563,7 @@ ntpcal_ntp_to_time(
{
vint64 res;
-#ifdef HAVE_INT64
+# if defined(HAVE_INT64)
res.q_s = (pivot != NULL)
? *pivot
@@ -415,7 +573,7 @@ ntpcal_ntp_to_time(
ntp -= res.D_s.lo; /* cycle difference */
res.Q_s += (uint64_t)ntp; /* get expanded time */
-#else /* no 64bit scalars */
+# else /* no 64bit scalars */
time_t tmp;
@@ -428,7 +586,7 @@ ntpcal_ntp_to_time(
ntp -= res.D_s.lo; /* cycle difference */
M_ADD(res.D_s.hi, res.D_s.lo, 0, ntp);
-#endif /* no 64bit scalars */
+# endif /* no 64bit scalars */
return res;
}
@@ -454,7 +612,7 @@ ntpcal_ntp_to_ntp(
{
vint64 res;
-#ifdef HAVE_INT64
+# if defined(HAVE_INT64)
res.q_s = (pivot)
? *pivot
@@ -464,7 +622,7 @@ ntpcal_ntp_to_ntp(
ntp -= res.D_s.lo; /* cycle difference */
res.Q_s += (uint64_t)ntp; /* get expanded time */
-#else /* no 64bit scalars */
+# else /* no 64bit scalars */
time_t tmp;
@@ -477,7 +635,7 @@ ntpcal_ntp_to_ntp(
ntp -= res.D_s.lo; /* cycle difference */
M_ADD(res.D_s.hi, res.D_s.lo, 0, ntp);
-#endif /* no 64bit scalars */
+# endif /* no 64bit scalars */
return res;
}
@@ -505,78 +663,75 @@ ntpcal_daysplit(
)
{
ntpcal_split res;
+ uint32_t Q;
+
+# if defined(HAVE_INT64)
+
+ /* Manual floor division by SECSPERDAY. This uses the one's
+ * complement trick, too, but without an extra flag value: The
+ * flag would be 64bit, and that's a bit of overkill on a 32bit
+ * target that has to use a register pair for a 64bit number.
+ */
+ if (ts->q_s < 0)
+ Q = ~(uint32_t)(~ts->Q_s / SECSPERDAY);
+ else
+ Q = (uint32_t)(ts->Q_s / SECSPERDAY);
-#ifdef HAVE_INT64
+# else
- /* manual floor division by SECSPERDAY */
- res.hi = (int32_t)(ts->q_s / SECSPERDAY);
- res.lo = (int32_t)(ts->q_s % SECSPERDAY);
- if (res.lo < 0) {
- res.hi -= 1;
- res.lo += SECSPERDAY;
- }
+ uint32_t ah, al, sflag, A;
-#else
+ /* get operand into ah/al (either ts or ts' one's complement,
+ * for later floor division)
+ */
+ sflag = int32_sflag(ts->d_s.hi);
+ ah = sflag ^ ts->D_s.hi;
+ al = sflag ^ ts->D_s.lo;
+
+ /* Since 86400 == 128*675 we can drop the least 7 bits and
+ * divide by 675 instead of 86400. Then the maximum remainder
+ * after each devision step is 674, and we need 10 bits for
+ * that. So in the next step we can shift in 22 bits from the
+ * numerator.
+ *
+ * Therefore we load the accu with the top 13 bits (51..63) in
+ * the first shot. We don't have to remember the quotient -- it
+ * would be shifted out anyway.
+ */
+ A = ah >> 19;
+ if (A >= 675)
+ A = (A % 675u);
+
+ /* Now assemble the remainder with bits 29..50 from the
+ * numerator and divide. This creates the upper ten bits of the
+ * quotient. (Well, the top 22 bits of a 44bit result. But that
+ * will be truncated to 32 bits anyway.)
+ */
+ A = (A << 19) | (ah & 0x0007FFFFu);
+ A = (A << 3) | (al >> 29);
+ Q = A / 675u;
+ A = A % 675u;
- /*
- * since we do not have 64bit ops, we have to this by hand.
- * Luckily SECSPERDAY is 86400 is 675*128, so we do the division
- * using chained 32/16 bit divisions and shifts.
+ /* Now assemble the remainder with bits 7..28 from the numerator
+ * and do a final division step.
*/
- vint64 op;
- uint32_t q, r, a;
- int isneg;
+ A = (A << 22) | ((al >> 7) & 0x003FFFFFu);
+ Q = (Q << 22) | (A / 675u);
- memcpy(&op, ts, sizeof(op));
- /* fix sign */
- isneg = M_ISNEG(op.D_s.hi);
- if (isneg)
- M_NEG(op.D_s.hi, op.D_s.lo);
-
- /* save remainder of DIV 128, shift for divide */
- r = op.D_s.lo & 127; /* save remainder bits */
- op.D_s.lo = (op.D_s.lo >> 7) | (op.D_s.hi << 25);
- op.D_s.hi = (op.D_s.hi >> 7);
-
- /* now do a mnual division, trying to remove as many ops as
- * possible -- division is always slow! An since we do not have
- * the advantage of a specific 64/32 bit or even a specific 32/16
- * bit division op, but must use the general 32/32bit division
- * even if we *know* the divider fits into unsigned 16 bits, the
- * exra code pathes should pay off.
+ /* The last 7 bits get simply dropped, as they have no affect on
+ * the quotient when dividing by 86400.
*/
- a = op.D_s.hi;
- if (a > 675u)
- a = a % 675u;
- if (a) {
- a = (a << 16) | op.W_s.lh;
- q = a / 675u;
- a = a % 675u;
-
- a = (a << 16) | op.W_s.ll;
- q = (q << 16) | (a / 675u);
- } else {
- a = op.D_s.lo;
- q = a / 675u;
- }
- a = a % 675u;
-
- /* assemble remainder */
- r |= a << 7;
-
- /* fix sign of result */
- if (isneg) {
- if (r) {
- r = SECSPERDAY - r;
- q = ~q;
- } else
- q = ~q + 1;
- }
- res.hi = q;
- res.lo = r;
+ /* apply sign correction and calculate the true floor
+ * remainder.
+ */
+ Q ^= sflag;
+
+# endif
+
+ res.hi = uint32_2cpl_to_int32(Q);
+ res.lo = ts->D_s.lo - Q * SECSPERDAY;
-#endif
return res;
}
@@ -593,25 +748,28 @@ priv_timesplit(
int32_t ts
)
{
- int32_t days = 0;
-
- /* make sure we have a positive offset into a day */
- if (ts < 0 || ts >= SECSPERDAY) {
- days = ts / SECSPERDAY;
- ts = ts % SECSPERDAY;
- if (ts < 0) {
- days -= 1;
- ts += SECSPERDAY;
- }
- }
+ /* Do 3 chained floor divisions by positive constants, using the
+ * one's complement trick and factoring out the intermediate XOR
+ * ops to reduce the number of operations.
+ */
+ uint32_t us, um, uh, ud, sflag;
- /* get secs, mins, hours */
- split[2] = (uint8_t)(ts % SECSPERMIN);
- ts /= SECSPERMIN;
- split[1] = (uint8_t)(ts % MINSPERHR);
- split[0] = (uint8_t)(ts / MINSPERHR);
+ sflag = int32_sflag(ts);
+ us = int32_to_uint32_2cpl(ts);
- return days;
+ um = (sflag ^ us) / SECSPERMIN;
+ uh = um / MINSPERHR;
+ ud = uh / HRSPERDAY;
+
+ um ^= sflag;
+ uh ^= sflag;
+ ud ^= sflag;
+
+ split[0] = (int32_t)(uh - ud * HRSPERDAY );
+ split[1] = (int32_t)(um - uh * MINSPERHR );
+ split[2] = (int32_t)(us - um * SECSPERMIN);
+
+ return uint32_2cpl_to_int32(ud);
}
/*
@@ -630,46 +788,45 @@ ntpcal_split_eradays(
int *isleapyear
)
{
- ntpcal_split res;
- int32_t n400, n100, n004, n001, yday; /* calendar year cycles */
-
- /*
- * Split off calendar cycles, using floor division in the first
- * step. After that first step, simple division does it because
- * all operands are positive; alas, we have to be aware of the
- * possibe cycle overflows for 100 years and 1 year, caused by
- * the additional leap day.
+ /* Use the fast cyclesplit algorithm here, to calculate the
+ * centuries and years in a century with one division each. This
+ * reduces the number of division operations to two, but is
+ * susceptible to internal range overflow. We make sure the
+ * input operands are in the safe range; this still gives us
+ * approx +/-2.9 million years.
*/
- n400 = days / GREGORIAN_CYCLE_DAYS;
- yday = days % GREGORIAN_CYCLE_DAYS;
- if (yday < 0) {
- n400 -= 1;
- yday += GREGORIAN_CYCLE_DAYS;
- }
- n100 = yday / GREGORIAN_NORMAL_CENTURY_DAYS;
- yday = yday % GREGORIAN_NORMAL_CENTURY_DAYS;
- n004 = yday / GREGORIAN_NORMAL_LEAP_CYCLE_DAYS;
- yday = yday % GREGORIAN_NORMAL_LEAP_CYCLE_DAYS;
- n001 = yday / DAYSPERYEAR;
- yday = yday % DAYSPERYEAR;
-
- /*
- * check for leap cycle overflows and calculate the leap flag
- * if needed
+ ntpcal_split res;
+ int32_t n100, n001; /* calendar year cycles */
+ uint32_t uday, Q, sflag;
+
+ /* split off centuries first */
+ sflag = int32_sflag(days);
+ uday = uint32_saturate(int32_to_uint32_2cpl(days), sflag);
+ uday = (4u * uday) | 3u;
+ Q = sflag ^ ((sflag ^ uday) / GREGORIAN_CYCLE_DAYS);
+ uday = uday - Q * GREGORIAN_CYCLE_DAYS;
+ n100 = uint32_2cpl_to_int32(Q);
+
+ /* Split off years in century -- days >= 0 here, and we're far
+ * away from integer overflow trouble now. */
+ uday |= 3;
+ n001 = uday / GREGORIAN_NORMAL_LEAP_CYCLE_DAYS;
+ uday = uday % GREGORIAN_NORMAL_LEAP_CYCLE_DAYS;
+
+ /* Assemble the year and day in year */
+ res.hi = n100 * 100 + n001;
+ res.lo = uday / 4u;
+
+ /* Eventually set the leap year flag. Note: 0 <= n001 <= 99 and
+ * Q is still the two's complement representation of the
+ * centuries: The modulo 4 ops can be done with masking here.
+ * We also shift the year and the century by one, so the tests
+ * can be done against zero instead of 3.
*/
- if ((n001 | n100) > 3) {
- /* hit last day of leap year */
- n001 -= 1;
- yday += DAYSPERYEAR;
- if (isleapyear)
- *isleapyear = 1;
- } else if (isleapyear)
- *isleapyear = (n001 == 3) && ((n004 != 24) || (n100 == 3));
-
- /* now merge the cycles to elapsed years, using horner scheme */
- res.hi = ((4*n400 + n100)*25 + n004)*4 + n001;
- res.lo = yday;
-
+ if (isleapyear)
+ *isleapyear = !((n001+1) & 3)
+ && ((n001 != 99) || !((Q+1) & 3));
+
return res;
}
@@ -719,11 +876,9 @@ ntpcal_rd_to_date(
)
{
ntpcal_split split;
- int leaps;
- int retv;
+ int leapy;
+ u_int ymask;
- leaps = 0;
- retv = 0;
/* Get day-of-week first. Since rd is signed, the remainder can
* be in the range [-6..+6], but the assignment to an unsigned
* variable maps the negative values to positive values >=7.
@@ -731,26 +886,28 @@ ntpcal_rd_to_date(
* causes the needed wrap-around into the desired value range of
* zero to six, both inclusive.
*/
- jd->weekday = rd % 7;
- if (jd->weekday >= 7) /* unsigned! */
- jd->weekday += 7;
-
- split = ntpcal_split_eradays(rd - 1, &leaps);
- retv = leaps;
- /* get year and day-of-year */
- jd->year = (uint16_t)split.hi + 1;
- if (jd->year != split.hi + 1) {
- jd->year = 0;
- retv = -1; /* bletch. overflow trouble. */
- }
+ jd->weekday = rd % DAYSPERWEEK;
+ if (jd->weekday >= DAYSPERWEEK) /* weekday is unsigned! */
+ jd->weekday += DAYSPERWEEK;
+
+ split = ntpcal_split_eradays(rd - 1, &leapy);
+ /* Get year and day-of-year, with overflow check. If any of the
+ * upper 16 bits is set after shifting to unity-based years, we
+ * will have an overflow when converting to an unsigned 16bit
+ * year. Shifting to the right is OK here, since it does not
+ * matter if the shift is logic or arithmetic.
+ */
+ split.hi += 1;
+ ymask = 0u - ((split.hi >> 16) == 0);
+ jd->year = (uint16_t)(split.hi & ymask);
jd->yearday = (uint16_t)split.lo + 1;
/* convert to month and mday */
- split = ntpcal_split_yeardays(split.lo, leaps);
+ split = ntpcal_split_yeardays(split.lo, leapy);
jd->month = (uint8_t)split.hi + 1;
jd->monthday = (uint8_t)split.lo + 1;
- return retv ? retv : leaps;
+ return ymask ? leapy : -1;
}
/*
@@ -765,25 +922,24 @@ ntpcal_rd_to_tm(
)
{
ntpcal_split split;
- int leaps;
+ int leapy;
- leaps = 0;
/* get day-of-week first */
- utm->tm_wday = rd % 7;
+ utm->tm_wday = rd % DAYSPERWEEK;
if (utm->tm_wday < 0)
- utm->tm_wday += 7;
+ utm->tm_wday += DAYSPERWEEK;
/* get year and day-of-year */
- split = ntpcal_split_eradays(rd - 1, &leaps);
+ split = ntpcal_split_eradays(rd - 1, &leapy);
utm->tm_year = split.hi - 1899;
utm->tm_yday = split.lo; /* 0-based */
/* convert to month and mday */
- split = ntpcal_split_yeardays(split.lo, leaps);
+ split = ntpcal_split_yeardays(split.lo, leapy);
utm->tm_mon = split.hi; /* 0-based */
utm->tm_mday = split.lo + 1; /* 1-based */
- return leaps;
+ return leapy;
}
/*
@@ -918,13 +1074,13 @@ ntpcal_dayjoin(
{
vint64 res;
-#ifdef HAVE_INT64
+# if defined(HAVE_INT64)
res.q_s = days;
res.q_s *= SECSPERDAY;
res.q_s += secs;
-#else
+# else
uint32_t p1, p2;
int isneg;
@@ -963,47 +1119,57 @@ ntpcal_dayjoin(
}
M_ADD(res.D_s.hi, res.D_s.lo, p2, p1);
-#endif
+# endif
return res;
}
/*
*---------------------------------------------------------------------
- * Convert elapsed years in Era into elapsed days in Era.
- *
- * To accomodate for negative values of years, floor division would be
- * required for all division operations. This can be eased by first
- * splitting the years into full 400-year cycles and years in the
- * cycle. Only this operation must be coded as a full floor division; as
- * the years in the cycle is a non-negative number, all other divisions
- * can be regular truncated divisions.
+ * get leap years since epoch in elapsed years
*---------------------------------------------------------------------
*/
int32_t
-ntpcal_days_in_years(
+ntpcal_leapyears_in_years(
int32_t years
)
{
- int32_t cycle; /* full gregorian cycle */
-
- /* split off full calendar cycles, using floor division */
- cycle = years / 400;
- years = years % 400;
- if (years < 0) {
- cycle -= 1;
- years += 400;
- }
+ /* We use the in-out-in algorithm here, using the one's
+ * complement division trick for negative numbers. The chained
+ * division sequence by 4/25/4 gives the compiler the chance to
+ * get away with only one true division and doing shifts otherwise.
+ */
- /*
- * Calculate days in cycle. years now is a non-negative number,
- * holding the number of years in the 400-year cycle.
+ uint32_t sflag, sum, uyear;
+
+ sflag = int32_sflag(years);
+ uyear = int32_to_uint32_2cpl(years);
+ uyear ^= sflag;
+
+ sum = (uyear /= 4u); /* 4yr rule --> IN */
+ sum -= (uyear /= 25u); /* 100yr rule --> OUT */
+ sum += (uyear /= 4u); /* 400yr rule --> IN */
+
+ /* Thanks to the alternation of IN/OUT/IN we can do the sum
+ * directly and have a single one's complement operation
+ * here. (Only if the years are negative, of course.) Otherwise
+ * the one's complement would have to be done when
+ * adding/subtracting the terms.
*/
- return cycle * GREGORIAN_CYCLE_DAYS
- + years * DAYSPERYEAR /* days inregular years */
- + years / 4 /* 4 year leap rule */
- - years / 100; /* 100 year leap rule */
- /* the 400-year rule does not apply due to full-cycle split-off */
+ return uint32_2cpl_to_int32(sflag ^ sum);
+}
+
+/*
+ *---------------------------------------------------------------------
+ * Convert elapsed years in Era into elapsed days in Era.
+ *---------------------------------------------------------------------
+ */
+int32_t
+ntpcal_days_in_years(
+ int32_t years
+ )
+{
+ return years * DAYSPERYEAR + ntpcal_leapyears_in_years(years);
}
/*
@@ -1029,26 +1195,22 @@ ntpcal_days_in_months(
{
ntpcal_split res;
- /* normalize month into range */
- res.hi = 0;
- res.lo = m;
- if (res.lo < 0 || res.lo >= 12) {
- res.hi = res.lo / 12;
- res.lo = res.lo % 12;
- if (res.lo < 0) {
- res.hi -= 1;
- res.lo += 12;
- }
- }
+ /* Add ten months and correct if needed. (It likely is...) */
+ res.lo = m + 10;
+ res.hi = (res.lo >= 12);
+ if (res.hi)
+ res.lo -= 12;
- /* add 10 month for year starting with march */
- if (res.lo < 2)
- res.lo += 10;
- else {
- res.hi += 1;
- res.lo -= 2;
+ /* if still out of range, normalise by floor division ... */
+ if (res.lo < 0 || res.lo >= 12) {
+ uint32_t mu, Q, sflag;
+ sflag = int32_sflag(res.lo);
+ mu = int32_to_uint32_2cpl(res.lo);
+ Q = sflag ^ ((sflag ^ mu) / 12u);
+ res.hi += uint32_2cpl_to_int32(Q);
+ res.lo = mu - Q * 12u;
}
-
+
/* get cummulated days in year with unshift */
res.lo = shift_month_table[res.lo] - 306;
@@ -1451,37 +1613,42 @@ int32_t
isocal_weeks_in_years(
int32_t years
)
-{
+{
/*
* use: w = (y * 53431 + b[c]) / 1024 as interpolation
*/
- static const int32_t bctab[4] = { 449, 157, 889, 597 };
- int32_t cycle; /* full gregorian cycle */
- int32_t cents; /* full centuries */
- int32_t weeks; /* accumulated weeks */
-
- /* split off full calendar cycles, using floor division */
- cycle = years / 400;
- years = years % 400;
- if (years < 0) {
- cycle -= 1;
- years += 400;
- }
-
- /* split off full centuries */
- cents = years / 100;
- years = years % 100;
-
- /*
- * calculate elapsed weeks, taking into account that the
- * first, third and fourth century have 5218 weeks but the
- * second century falls short by one week.
+ static const uint16_t bctab[4] = { 157, 449, 597, 889 };
+
+ int32_t cs, cw;
+ uint32_t cc, ci, yu, sflag;
+
+ sflag = int32_sflag(years);
+ yu = int32_to_uint32_2cpl(years);
+
+ /* split off centuries, using floor division */
+ cc = sflag ^ ((sflag ^ yu) / 100u);
+ yu -= cc * 100u;
+
+ /* calculate century cycles shift and cycle index:
+ * Assuming a century is 5217 weeks, we have to add a cycle
+ * shift that is 3 for every 4 centuries, because 3 of the four
+ * centuries have 5218 weeks. So '(cc*3 + 1) / 4' is the actual
+ * correction, and the second century is the defective one.
+ *
+ * Needs floor division by 4, which is done with masking and
+ * shifting.
+ */
+ ci = cc * 3u + 1;
+ cs = uint32_2cpl_to_int32(sflag ^ ((sflag ^ ci) / 4u));
+ ci = ci % 4u;
+
+ /* Get weeks in century. Can use plain division here as all ops
+ * are >= 0, and let the compiler sort out the possible
+ * optimisations.
*/
- weeks = (years * 53431 + bctab[cents]) / 1024;
+ cw = (yu * 53431u + bctab[ci]) / 1024u;
- return cycle * GREGORIAN_CYCLE_WEEKS
- + cents * 5218 - (cents > 1)
- + weeks;
+ return uint32_2cpl_to_int32(cc) * 5217 + cs + cw;
}
/*
@@ -1498,35 +1665,41 @@ isocal_split_eraweeks(
/*
* use: y = (w * 157 + b[c]) / 8192 as interpolation
*/
- static const int32_t bctab[4] = { 85, 131, 17, 62 };
+
+ static const uint16_t bctab[4] = { 85, 130, 17, 62 };
+
ntpcal_split res;
- int32_t cents;
+ int32_t cc, ci;
+ uint32_t sw, cy, Q, sflag;
- /*
- * split off 400-year cycles, using the fact that a 400-year
- * cycle has 146097 days, which is exactly 20871 weeks.
+ /* Use two fast cycle-split divisions here. This is again
+ * susceptible to internal overflow, so we check the range. This
+ * still permits more than +/-20 million years, so this is
+ * likely a pure academical problem.
+ *
+ * We want to execute '(weeks * 4 + 2) /% 20871' under floor
+ * division rules in the first step.
*/
- res.hi = weeks / GREGORIAN_CYCLE_WEEKS;
- res.lo = weeks % GREGORIAN_CYCLE_WEEKS;
- if (res.lo < 0) {
- res.hi -= 1;
- res.lo += GREGORIAN_CYCLE_WEEKS;
- }
- res.hi *= 400;
-
- /*
- * split off centuries, taking into account that the first,
- * third and fourth century have 5218 weeks but that the
- * second century falls short by one week.
+ sflag = int32_sflag(weeks);
+ sw = uint32_saturate(int32_to_uint32_2cpl(weeks), sflag);
+ sw = 4u * sw + 2;
+ Q = sflag ^ ((sflag ^ sw) / GREGORIAN_CYCLE_WEEKS);
+ sw -= Q * GREGORIAN_CYCLE_WEEKS;
+ ci = Q % 4u;
+ cc = uint32_2cpl_to_int32(Q);
+
+ /* Split off years; sw >= 0 here! The scaled weeks in the years
+ * are scaled up by 157 afterwards.
+ */
+ sw = (sw / 4u) * 157u + bctab[ci];
+ cy = sw / 8192u; /* ws >> 13 , let the compiler sort it out */
+ sw = sw % 8192u; /* ws & 8191, let the compiler sort it out */
+
+ /* assemble elapsed years and downscale the elapsed weeks in
+ * the year.
*/
- res.lo += (res.lo >= 10435);
- cents = res.lo / 5218;
- res.lo %= 5218; /* res.lo is weeks in century now */
-
- /* convert elapsed weeks in century to elapsed years and weeks */
- res.lo = res.lo * 157 + bctab[cents];
- res.hi += cents * 100 + res.lo / 8192;
- res.lo = (res.lo % 8192) / 157;
+ res.hi = 100*cc + cy;
+ res.lo = sw / 157u;
return res;
}
@@ -1544,6 +1717,7 @@ isocal_ntp64_to_date(
{
ntpcal_split ds;
int32_t ts[3];
+ uint32_t uw, ud, sflag;
/*
* Split NTP time into days and seconds, shift days into CE
@@ -1557,16 +1731,18 @@ isocal_ntp64_to_date(
id->minute = (uint8_t)ts[1];
id->second = (uint8_t)ts[2];
- /* split date part */
- ds.lo = ds.hi + DAY_NTP_STARTS - 1; /* elapsed era days */
- ds.hi = ds.lo / 7; /* elapsed era weeks */
- ds.lo = ds.lo % 7; /* elapsed week days */
- if (ds.lo < 0) { /* floor division! */
- ds.hi -= 1;
- ds.lo += 7;
- }
+ /* split days into days and weeks, using floor division in unsigned */
+ ds.hi += DAY_NTP_STARTS - 1; /* shift from NTP to RDN */
+ sflag = int32_sflag(ds.hi);
+ ud = int32_to_uint32_2cpl(ds.hi);
+ uw = sflag ^ ((sflag ^ ud) / DAYSPERWEEK);
+ ud -= uw * DAYSPERWEEK;
+ ds.hi = uint32_2cpl_to_int32(uw);
+ ds.lo = ud;
+
id->weekday = (uint8_t)ds.lo + 1; /* weekday result */
+ /* get year and week in year */
ds = isocal_split_eraweeks(ds.hi); /* elapsed years&week*/
id->year = (uint16_t)ds.hi + 1; /* shift to current */
id->week = (uint8_t )ds.lo + 1;
diff --git a/contrib/ntp/libntp/ntp_intres.c b/contrib/ntp/libntp/ntp_intres.c
index eea88a1..b0f5620 100644
--- a/contrib/ntp/libntp/ntp_intres.c
+++ b/contrib/ntp/libntp/ntp_intres.c
@@ -249,12 +249,12 @@ getaddrinfo_sometime(
size_t servsize;
time_t now;
- NTP_REQUIRE(NULL != node);
+ REQUIRE(NULL != node);
if (NULL != hints) {
- NTP_REQUIRE(0 == hints->ai_addrlen);
- NTP_REQUIRE(NULL == hints->ai_addr);
- NTP_REQUIRE(NULL == hints->ai_canonname);
- NTP_REQUIRE(NULL == hints->ai_next);
+ REQUIRE(0 == hints->ai_addrlen);
+ REQUIRE(NULL == hints->ai_addr);
+ REQUIRE(NULL == hints->ai_canonname);
+ REQUIRE(NULL == hints->ai_next);
}
idx = get_dnschild_ctx();
@@ -420,7 +420,7 @@ blocking_getaddrinfo(
ai = ai_res;
while (NULL != ai) {
- NTP_INSIST(ai->ai_addrlen <= sizeof(sockaddr_u));
+ INSIST(ai->ai_addrlen <= sizeof(sockaddr_u));
memcpy(cp, ai->ai_addr, ai->ai_addrlen);
cp += sizeof(sockaddr_u);
@@ -568,7 +568,7 @@ getaddrinfo_sometime_complete(
ai[i].ai_canonname += (size_t)canon_start;
}
- NTP_ENSURE((char *)psau == canon_start);
+ ENSURE((char *)psau == canon_start);
if (!gai_resp->ai_count)
ai = NULL;
@@ -634,8 +634,8 @@ getnameinfo_sometime(
dnschild_ctx * child_ctx;
time_t time_now;
- NTP_REQUIRE(hostoctets);
- NTP_REQUIRE(hostoctets + servoctets < 1024);
+ REQUIRE(hostoctets);
+ REQUIRE(hostoctets + servoctets < 1024);
idx = get_dnschild_ctx();
child_ctx = dnschild_contexts[idx];
@@ -699,7 +699,7 @@ blocking_getnameinfo(
* large allocations. We only need room for the host
* and service names.
*/
- NTP_REQUIRE(octets < sizeof(host));
+ REQUIRE(octets < sizeof(host));
service = host + gni_req->hostoctets;
worker_ctx = get_worker_context(c, gni_req->dns_idx);
@@ -775,8 +775,8 @@ blocking_getnameinfo(
cp += gni_resp->servoctets;
}
- NTP_INSIST((size_t)(cp - (char *)resp) == resp_octets);
- NTP_INSIST(resp_octets - sizeof(*resp) == gni_resp->octets);
+ INSIST((size_t)(cp - (char *)resp) == resp_octets);
+ INSIST(resp_octets - sizeof(*resp) == gni_resp->octets);
rc = queue_blocking_response(c, resp, resp_octets, req);
if (rc)
diff --git a/contrib/ntp/libntp/ntp_lineedit.c b/contrib/ntp/libntp/ntp_lineedit.c
index e3bc002..a2b2d29 100644
--- a/contrib/ntp/libntp/ntp_lineedit.c
+++ b/contrib/ntp/libntp/ntp_lineedit.c
@@ -36,7 +36,7 @@
* external references
*/
-extern char * progname;
+extern char const * progname;
/*
* globals, private prototypes
diff --git a/contrib/ntp/libntp/ntp_rfc2553.c b/contrib/ntp/libntp/ntp_rfc2553.c
index f267999..a9ebb4b 100644
--- a/contrib/ntp/libntp/ntp_rfc2553.c
+++ b/contrib/ntp/libntp/ntp_rfc2553.c
@@ -221,7 +221,7 @@ copy_addrinfo_common(
}
++ai_cpy;
}
- NTP_ENSURE(pcanon == ((char *)dst + octets));
+ ENSURE(pcanon == ((char *)dst + octets));
return dst;
}
diff --git a/contrib/ntp/libntp/ntp_worker.c b/contrib/ntp/libntp/ntp_worker.c
index bb1cb87..32970da 100644
--- a/contrib/ntp/libntp/ntp_worker.c
+++ b/contrib/ntp/libntp/ntp_worker.c
@@ -278,7 +278,7 @@ blocking_child_common(
req = receive_blocking_req_internal(c);
if (NULL == req) {
say_bye = TRUE;
- break;
+ continue;
}
DEBUG_REQUIRE(BLOCKING_REQ_MAGIC == req->magic_sig);
diff --git a/contrib/ntp/libntp/prettydate.c b/contrib/ntp/libntp/prettydate.c
index 5da5ecc..25b085e 100644
--- a/contrib/ntp/libntp/prettydate.c
+++ b/contrib/ntp/libntp/prettydate.c
@@ -141,7 +141,7 @@ get_struct_tm(
return NULL; /* That's truly pathological! */
/* 'tm' surely not NULL here! */
- NTP_INSIST(tm != NULL);
+ INSIST(tm != NULL);
if (folds != 0) {
tm->tm_year += folds * SOLAR_CYCLE_YEARS;
if (tm->tm_year <= 0 || tm->tm_year >= 200)
diff --git a/contrib/ntp/libntp/recvbuff.c b/contrib/ntp/libntp/recvbuff.c
index 83a9ee1..73ebe88 100644
--- a/contrib/ntp/libntp/recvbuff.c
+++ b/contrib/ntp/libntp/recvbuff.c
@@ -216,7 +216,7 @@ get_free_recv_buffer_alloc(void)
create_buffers(RECV_INC);
buffer = get_free_recv_buffer();
}
- NTP_ENSURE(buffer != NULL);
+ ENSURE(buffer != NULL);
return (buffer);
}
#endif
diff --git a/contrib/ntp/libntp/socket.c b/contrib/ntp/libntp/socket.c
index de678c6..11fb0046 100644
--- a/contrib/ntp/libntp/socket.c
+++ b/contrib/ntp/libntp/socket.c
@@ -78,7 +78,7 @@ move_fd(
static SOCKET socket_boundary = -1;
SOCKET newfd;
- NTP_REQUIRE((int)fd >= 0);
+ REQUIRE((int)fd >= 0);
/*
* check whether boundary has be set up
@@ -115,7 +115,7 @@ move_fd(
socket_boundary));
} while (socket_boundary > 0);
#else
- NTP_REQUIRE((int)fd >= 0);
+ ENSURE((int)fd >= 0);
#endif /* !defined(SYS_WINNT) && defined(F_DUPFD) */
return fd;
}
diff --git a/contrib/ntp/libntp/socktohost.c b/contrib/ntp/libntp/socktohost.c
index c61e571..3d9ab960 100644
--- a/contrib/ntp/libntp/socktohost.c
+++ b/contrib/ntp/libntp/socktohost.c
@@ -79,7 +79,7 @@ socktohost(
if (a_info)
goto forward_fail;
- NTP_INSIST(alist != NULL);
+ INSIST(alist != NULL);
for (ai = alist; ai != NULL; ai = ai->ai_next) {
/*
diff --git a/contrib/ntp/libntp/statestr.c b/contrib/ntp/libntp/statestr.c
index cd98eb3..313cd46 100644
--- a/contrib/ntp/libntp/statestr.c
+++ b/contrib/ntp/libntp/statestr.c
@@ -60,7 +60,7 @@ static const struct codestring select_codes[] = {
{ CTL_PST_SEL_REJECT, "sel_reject" },
{ CTL_PST_SEL_SANE, "sel_falsetick" },
{ CTL_PST_SEL_CORRECT, "sel_excess" },
- { CTL_PST_SEL_SELCAND, "sel_outlyer" },
+ { CTL_PST_SEL_SELCAND, "sel_outlier" },
{ CTL_PST_SEL_SYNCCAND, "sel_candidate" },
{ CTL_PST_SEL_EXCESS, "sel_backup" },
{ CTL_PST_SEL_SYSPEER, "sel_sys.peer" },
diff --git a/contrib/ntp/libparse/Makefile.in b/contrib/ntp/libparse/Makefile.in
index 4b15dd6..2f13e1f 100644
--- a/contrib/ntp/libparse/Makefile.in
+++ b/contrib/ntp/libparse/Makefile.in
@@ -118,6 +118,7 @@ am__aclocal_m4_deps = $(top_srcdir)/sntp/libopts/m4/libopts.m4 \
$(top_srcdir)/sntp/m4/ntp_locinfo.m4 \
$(top_srcdir)/sntp/m4/ntp_openssl.m4 \
$(top_srcdir)/sntp/m4/ntp_pkg_config.m4 \
+ $(top_srcdir)/sntp/m4/ntp_problemtests.m4 \
$(top_srcdir)/sntp/m4/ntp_prog_cc.m4 \
$(top_srcdir)/sntp/m4/ntp_rlimit.m4 \
$(top_srcdir)/sntp/m4/ntp_sntp.m4 \
@@ -252,6 +253,7 @@ AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
+BUILD_THREAD = @BUILD_THREAD@
CALC_TICKADJ_DB = @CALC_TICKADJ_DB@
CALC_TICKADJ_DL = @CALC_TICKADJ_DL@
CALC_TICKADJ_DS = @CALC_TICKADJ_DS@
@@ -260,6 +262,7 @@ CALC_TICKADJ_NI = @CALC_TICKADJ_NI@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
+CFLAGS_LIBEVENT = @CFLAGS_LIBEVENT@
CFLAGS_NTP = @CFLAGS_NTP@
CHUTEST = @CHUTEST@
CONFIG_SHELL = @CONFIG_SHELL@
@@ -321,6 +324,7 @@ LIBTOOL_DEPS = @LIBTOOL_DEPS@
LIPO = @LIPO@
LN_S = @LN_S@
LSCF = @LSCF@
+LTHREAD_LIBS = @LTHREAD_LIBS@
LTLIBOBJS = @LTLIBOBJS@
MAKEINFO = @MAKEINFO@
MAKE_ADJTIMED = @MAKE_ADJTIMED@
diff --git a/contrib/ntp/ntpd/Makefile.am b/contrib/ntp/ntpd/Makefile.am
index c94f7c0..a5690b7 100644
--- a/contrib/ntp/ntpd/Makefile.am
+++ b/contrib/ntp/ntpd/Makefile.am
@@ -432,6 +432,9 @@ version.c: $(ntpd_OBJECTS) ../libntp/libntp.a @LIBPARSE@ Makefile $(top_srcdir)/
version.o: version.c
env CCACHE_DISABLE=1 $(COMPILE) -c version.c -o version.o
+$(srcdir)/Makefile.am:
+ @: do-nothing
+
include $(top_srcdir)/bincheck.mf
include $(top_srcdir)/check-libopts.mf
include $(top_srcdir)/sntp/check-libntp.mf
diff --git a/contrib/ntp/ntpd/Makefile.in b/contrib/ntp/ntpd/Makefile.in
index 7f30846..2304e33 100644
--- a/contrib/ntp/ntpd/Makefile.in
+++ b/contrib/ntp/ntpd/Makefile.in
@@ -125,6 +125,7 @@ am__aclocal_m4_deps = $(top_srcdir)/sntp/libopts/m4/libopts.m4 \
$(top_srcdir)/sntp/m4/ntp_locinfo.m4 \
$(top_srcdir)/sntp/m4/ntp_openssl.m4 \
$(top_srcdir)/sntp/m4/ntp_pkg_config.m4 \
+ $(top_srcdir)/sntp/m4/ntp_problemtests.m4 \
$(top_srcdir)/sntp/m4/ntp_prog_cc.m4 \
$(top_srcdir)/sntp/m4/ntp_rlimit.m4 \
$(top_srcdir)/sntp/m4/ntp_sntp.m4 \
@@ -343,6 +344,7 @@ AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
+BUILD_THREAD = @BUILD_THREAD@
CALC_TICKADJ_DB = @CALC_TICKADJ_DB@
CALC_TICKADJ_DL = @CALC_TICKADJ_DL@
CALC_TICKADJ_DS = @CALC_TICKADJ_DS@
@@ -351,6 +353,7 @@ CALC_TICKADJ_NI = @CALC_TICKADJ_NI@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
+CFLAGS_LIBEVENT = @CFLAGS_LIBEVENT@
CFLAGS_NTP = @CFLAGS_NTP@
CHUTEST = @CHUTEST@
CONFIG_SHELL = @CONFIG_SHELL@
@@ -412,6 +415,7 @@ LIBTOOL_DEPS = @LIBTOOL_DEPS@
LIPO = @LIPO@
LN_S = @LN_S@
LSCF = @LSCF@
+LTHREAD_LIBS = @LTHREAD_LIBS@
LTLIBOBJS = @LTLIBOBJS@
MAKEINFO = @MAKEINFO@
MAKE_ADJTIMED = @MAKE_ADJTIMED@
@@ -1827,6 +1831,9 @@ version.c: $(ntpd_OBJECTS) ../libntp/libntp.a @LIBPARSE@ Makefile $(top_srcdir)/
version.o: version.c
env CCACHE_DISABLE=1 $(COMPILE) -c version.c -o version.o
+$(srcdir)/Makefile.am:
+ @: do-nothing
+
install-exec-hook:
@test -z "${bin_PROGRAMS}${bin_SCRIPTS}" \
|| for i in ${bin_PROGRAMS} ${bin_SCRIPTS} " "; do \
diff --git a/contrib/ntp/ntpd/invoke-ntp.conf.texi b/contrib/ntp/ntpd/invoke-ntp.conf.texi
index d7a9d13..37427d6 100644
--- a/contrib/ntp/ntpd/invoke-ntp.conf.texi
+++ b/contrib/ntp/ntpd/invoke-ntp.conf.texi
@@ -6,7 +6,7 @@
#
# EDIT THIS FILE WITH CAUTION (invoke-ntp.conf.texi)
#
-# It has been AutoGen-ed June 29, 2015 at 04:30:28 PM by AutoGen 5.18.5
+# It has been AutoGen-ed October 21, 2015 at 12:38:16 PM by AutoGen 5.18.5
# From the definitions ntp.conf.def
# and the template file agtexi-file.tpl
@end ignore
@@ -1837,7 +1837,7 @@ re-associate accordingly.
Some administrators prefer to avoid running
@code{ntpd(1ntpdmdoc)}
continuously and run either
-@code{ntpdate(8)}
+@code{sntp(1sntpmdoc)}
or
@code{ntpd(1ntpdmdoc)}
@code{-q}
@@ -1921,7 +1921,7 @@ peers remaining.
This value defaults to 1, but can be changed
to any number from 1 to 15.
@item @code{minclock} @kbd{minclock}
-The clustering algorithm repeatedly casts out outlyer
+The clustering algorithm repeatedly casts out outlier
associations until no more than
@code{minclock}
associations remain.
@@ -2578,12 +2578,15 @@ pulses will not be suppressed.
@item @code{rlimit} @code{[@code{memlock} @kbd{Nmegabytes} | @code{stacksize} @kbd{N4kPages} @code{filenum} @kbd{Nfiledescriptors}]}
@table @asis
@item @code{memlock} @kbd{Nmegabytes}
-Specify the number of megabytes of memory that can be allocated.
-Probably only available under Linux, this option is useful
+Specify the number of megabytes of memory that should be
+allocated and locked.
+Probably only available under Linux, this option may be useful
when dropping root (the
@code{-i}
option).
-The default is 32 megabytes. Setting this to zero will prevent any attemp to lock memory.
+The default is 32 megabytes on non-Linux machines, and -1 under Linux.
+-1 means "do not lock the process into memory".
+0 means "lock whatever memory the process wants into memory".
@item @code{stacksize} @kbd{N4kPages}
Specifies the maximum size of the process stack on systems with the
@code{mlockall()}
diff --git a/contrib/ntp/ntpd/invoke-ntp.keys.texi b/contrib/ntp/ntpd/invoke-ntp.keys.texi
index 622c4ff..33fdb89 100644
--- a/contrib/ntp/ntpd/invoke-ntp.keys.texi
+++ b/contrib/ntp/ntpd/invoke-ntp.keys.texi
@@ -6,7 +6,7 @@
#
# EDIT THIS FILE WITH CAUTION (invoke-ntp.keys.texi)
#
-# It has been AutoGen-ed June 29, 2015 at 04:30:31 PM by AutoGen 5.18.5
+# It has been AutoGen-ed October 21, 2015 at 12:38:19 PM by AutoGen 5.18.5
# From the definitions ntp.keys.def
# and the template file agtexi-file.tpl
@end ignore
diff --git a/contrib/ntp/ntpd/invoke-ntpd.texi b/contrib/ntp/ntpd/invoke-ntpd.texi
index 6936dda..a781b26 100644
--- a/contrib/ntp/ntpd/invoke-ntpd.texi
+++ b/contrib/ntp/ntpd/invoke-ntpd.texi
@@ -6,7 +6,7 @@
#
# EDIT THIS FILE WITH CAUTION (invoke-ntpd.texi)
#
-# It has been AutoGen-ed June 29, 2015 at 04:30:33 PM by AutoGen 5.18.5
+# It has been AutoGen-ed October 21, 2015 at 12:38:21 PM by AutoGen 5.18.5
# From the definitions ntpd-opts.def
# and the template file agtexi-cmd.tpl
@end ignore
@@ -142,7 +142,7 @@ with a status code of 0.
@exampleindent 0
@example
-ntpd - NTP daemon program - Ver. 4.2.8p3
+ntpd - NTP daemon program - Ver. 4.2.8p4
Usage: ntpd [ -<flag> [<val>] | --<name>[@{=| @}<val>] ]... \
[ <server1> ... <serverN> ]
Flg Arg Option-Name Description
diff --git a/contrib/ntp/ntpd/ntp.conf.5man b/contrib/ntp/ntpd/ntp.conf.5man
index 14438bd..ee457df4 100644
--- a/contrib/ntp/ntpd/ntp.conf.5man
+++ b/contrib/ntp/ntpd/ntp.conf.5man
@@ -10,11 +10,11 @@
.ds B-Font B
.ds I-Font I
.ds R-Font R
-.TH ntp.conf 5man "29 Jun 2015" "4.2.8p3" "File Formats"
+.TH ntp.conf 5man "21 Oct 2015" "4.2.8p4" "File Formats"
.\"
-.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-R0aO7B/ag-30aG6B)
+.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-9oaqYI/ag-OpaiXI)
.\"
-.\" It has been AutoGen-ed June 29, 2015 at 04:30:16 PM by AutoGen 5.18.5
+.\" It has been AutoGen-ed October 21, 2015 at 12:38:01 PM by AutoGen 5.18.5
.\" From the definitions ntp.conf.def
.\" and the template file agman-cmd.tpl
.SH NAME
@@ -2080,7 +2080,7 @@ re-associate accordingly.
Some administrators prefer to avoid running
\fCntpd\f[]\fR(1ntpdmdoc)\f[]
continuously and run either
-\fCntpdate\f[]\fR(8)\f[]
+\fCsntp\f[]\fR(1sntpmdoc)\f[]
or
\fCntpd\f[]\fR(1ntpdmdoc)\f[]
\f\*[B-Font]\-q\f[]
@@ -2170,7 +2170,7 @@ This value defaults to 1, but can be changed
to any number from 1 to 15.
.TP 7
.NOP \f\*[B-Font]minclock\f[] \f\*[I-Font]minclock\f[]
-The clustering algorithm repeatedly casts out outlyer
+The clustering algorithm repeatedly casts out outlier
associations until no more than
\f\*[B-Font]minclock\f[]
associations remain.
@@ -2897,12 +2897,15 @@ pulses will not be suppressed.
.RS
.TP 7
.NOP \f\*[B-Font]memlock\f[] \f\*[I-Font]Nmegabytes\f[]
-Specify the number of megabytes of memory that can be allocated.
-Probably only available under Linux, this option is useful
+Specify the number of megabytes of memory that should be
+allocated and locked.
+Probably only available under Linux, this option may be useful
when dropping root (the
\f\*[B-Font]\-i\f[]
option).
-The default is 32 megabytes. Setting this to zero will prevent any attemp to lock memory.
+The default is 32 megabytes on non-Linux machines, and \-1 under Linux.
+-1 means "do not lock the process into memory".
+0 means "lock whatever memory the process wants into memory".
.TP 7
.NOP \f\*[B-Font]stacksize\f[] \f\*[I-Font]N4kPages\f[]
Specifies the maximum size of the process stack on systems with the
diff --git a/contrib/ntp/ntpd/ntp.conf.5mdoc b/contrib/ntp/ntpd/ntp.conf.5mdoc
index 938acf6..a883aab 100644
--- a/contrib/ntp/ntpd/ntp.conf.5mdoc
+++ b/contrib/ntp/ntpd/ntp.conf.5mdoc
@@ -1,9 +1,9 @@
-.Dd June 29 2015
+.Dd October 21 2015
.Dt NTP_CONF 5mdoc File Formats
.Os
.\" EDIT THIS FILE WITH CAUTION (ntp.mdoc)
.\"
-.\" It has been AutoGen-ed June 29, 2015 at 04:30:36 PM by AutoGen 5.18.5
+.\" It has been AutoGen-ed October 21, 2015 at 12:38:24 PM by AutoGen 5.18.5
.\" From the definitions ntp.conf.def
.\" and the template file agmdoc-cmd.tpl
.Sh NAME
@@ -1903,7 +1903,7 @@ re\-associate accordingly.
Some administrators prefer to avoid running
.Xr ntpd 1ntpdmdoc
continuously and run either
-.Xr ntpdate 8
+.Xr sntp 1sntpmdoc
or
.Xr ntpd 1ntpdmdoc
.Fl q
@@ -1995,7 +1995,7 @@ peers remaining.
This value defaults to 1, but can be changed
to any number from 1 to 15.
.It Cm minclock Ar minclock
-The clustering algorithm repeatedly casts out outlyer
+The clustering algorithm repeatedly casts out outlier
associations until no more than
.Cm minclock
associations remain.
@@ -2725,12 +2725,15 @@ pulses will not be suppressed.
.Xc
.Bl -tag -width indent
.It Cm memlock Ar Nmegabytes
-Specify the number of megabytes of memory that can be allocated.
-Probably only available under Linux, this option is useful
+Specify the number of megabytes of memory that should be
+allocated and locked.
+Probably only available under Linux, this option may be useful
when dropping root (the
.Fl i
option).
-The default is 32 megabytes. Setting this to zero will prevent any attemp to lock memory.
+The default is 32 megabytes on non\-Linux machines, and \-1 under Linux.
+-1 means "do not lock the process into memory".
+0 means "lock whatever memory the process wants into memory".
.It Cm stacksize Ar N4kPages
Specifies the maximum size of the process stack on systems with the
.Fn mlockall
diff --git a/contrib/ntp/ntpd/ntp.conf.def b/contrib/ntp/ntpd/ntp.conf.def
index 7e09c03..43835bc 100644
--- a/contrib/ntp/ntpd/ntp.conf.def
+++ b/contrib/ntp/ntpd/ntp.conf.def
@@ -1905,7 +1905,7 @@ re-associate accordingly.
Some administrators prefer to avoid running
.Xr ntpd 1ntpdmdoc
continuously and run either
-.Xr ntpdate 8
+.Xr sntp 1sntpmdoc
or
.Xr ntpd 1ntpdmdoc
.Fl q
@@ -1997,7 +1997,7 @@ peers remaining.
This value defaults to 1, but can be changed
to any number from 1 to 15.
.It Cm minclock Ar minclock
-The clustering algorithm repeatedly casts out outlyer
+The clustering algorithm repeatedly casts out outlier
associations until no more than
.Cm minclock
associations remain.
@@ -2727,12 +2727,15 @@ pulses will not be suppressed.
.Xc
.Bl -tag -width indent
.It Cm memlock Ar Nmegabytes
-Specify the number of megabytes of memory that can be allocated.
-Probably only available under Linux, this option is useful
+Specify the number of megabytes of memory that should be
+allocated and locked.
+Probably only available under Linux, this option may be useful
when dropping root (the
.Fl i
option).
-The default is 32 megabytes. Setting this to zero will prevent any attemp to lock memory.
+The default is 32 megabytes on non-Linux machines, and -1 under Linux.
+-1 means "do not lock the process into memory".
+0 means "lock whatever memory the process wants into memory".
.It Cm stacksize Ar N4kPages
Specifies the maximum size of the process stack on systems with the
.Fn mlockall
diff --git a/contrib/ntp/ntpd/ntp.conf.html b/contrib/ntp/ntpd/ntp.conf.html
index ad64355..1f0c819 100644
--- a/contrib/ntp/ntpd/ntp.conf.html
+++ b/contrib/ntp/ntpd/ntp.conf.html
@@ -33,7 +33,7 @@ Up:&nbsp;<a rel="up" accesskey="u" href="#dir">(dir)</a>
<p>This document describes the configuration file for the NTP Project's
<code>ntpd</code> program.
- <p>This document applies to version 4.2.8p3 of <code>ntp.conf</code>.
+ <p>This document applies to version 4.2.8p4 of <code>ntp.conf</code>.
<div class="shortcontents">
<h2>Short Contents</h2>
@@ -1839,7 +1839,7 @@ re-associate accordingly.
<p>Some administrators prefer to avoid running
<code>ntpd(1ntpdmdoc)</code>
continuously and run either
-<code>ntpdate(8)</code>
+<code>sntp(1sntpmdoc)</code>
or
<code>ntpd(1ntpdmdoc)</code>
<code>-q</code>
@@ -1922,7 +1922,7 @@ will be discarded if there are at least
peers remaining.
This value defaults to 1, but can be changed
to any number from 1 to 15.
-<br><dt><code>minclock</code> <kbd>minclock</kbd><dd>The clustering algorithm repeatedly casts out outlyer
+<br><dt><code>minclock</code> <kbd>minclock</kbd><dd>The clustering algorithm repeatedly casts out outlier
associations until no more than
<code>minclock</code>
associations remain.
@@ -2546,12 +2546,15 @@ pulses will not be suppressed.
</dl>
<br><dt><code>rlimit</code> <code>[memlock </code><kbd>Nmegabytes</kbd><code> | stacksize </code><kbd>N4kPages</kbd><code> filenum </code><kbd>Nfiledescriptors</kbd><code>]</code><dd>
<dl>
-<dt><code>memlock</code> <kbd>Nmegabytes</kbd><dd>Specify the number of megabytes of memory that can be allocated.
-Probably only available under Linux, this option is useful
+<dt><code>memlock</code> <kbd>Nmegabytes</kbd><dd>Specify the number of megabytes of memory that should be
+allocated and locked.
+Probably only available under Linux, this option may be useful
when dropping root (the
<code>-i</code>
option).
-The default is 32 megabytes. Setting this to zero will prevent any attemp to lock memory.
+The default is 32 megabytes on non-Linux machines, and -1 under Linux.
+-1 means "do not lock the process into memory".
+0 means "lock whatever memory the process wants into memory".
<br><dt><code>stacksize</code> <kbd>N4kPages</kbd><dd>Specifies the maximum size of the process stack on systems with the
<code>mlockall()</code>
function.
diff --git a/contrib/ntp/ntpd/ntp.conf.man.in b/contrib/ntp/ntpd/ntp.conf.man.in
index ef9e14d..7c8a39f 100644
--- a/contrib/ntp/ntpd/ntp.conf.man.in
+++ b/contrib/ntp/ntpd/ntp.conf.man.in
@@ -10,11 +10,11 @@
.ds B-Font B
.ds I-Font I
.ds R-Font R
-.TH ntp.conf 5 "29 Jun 2015" "4.2.8p3" "File Formats"
+.TH ntp.conf 5 "21 Oct 2015" "4.2.8p4" "File Formats"
.\"
-.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-R0aO7B/ag-30aG6B)
+.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-9oaqYI/ag-OpaiXI)
.\"
-.\" It has been AutoGen-ed June 29, 2015 at 04:30:16 PM by AutoGen 5.18.5
+.\" It has been AutoGen-ed October 21, 2015 at 12:38:01 PM by AutoGen 5.18.5
.\" From the definitions ntp.conf.def
.\" and the template file agman-cmd.tpl
.SH NAME
@@ -2080,7 +2080,7 @@ re-associate accordingly.
Some administrators prefer to avoid running
\fCntpd\f[]\fR(@NTPD_MS@)\f[]
continuously and run either
-\fCntpdate\f[]\fR(8)\f[]
+\fCsntp\f[]\fR(@SNTP_MS@)\f[]
or
\fCntpd\f[]\fR(@NTPD_MS@)\f[]
\f\*[B-Font]\-q\f[]
@@ -2170,7 +2170,7 @@ This value defaults to 1, but can be changed
to any number from 1 to 15.
.TP 7
.NOP \f\*[B-Font]minclock\f[] \f\*[I-Font]minclock\f[]
-The clustering algorithm repeatedly casts out outlyer
+The clustering algorithm repeatedly casts out outlier
associations until no more than
\f\*[B-Font]minclock\f[]
associations remain.
@@ -2897,12 +2897,15 @@ pulses will not be suppressed.
.RS
.TP 7
.NOP \f\*[B-Font]memlock\f[] \f\*[I-Font]Nmegabytes\f[]
-Specify the number of megabytes of memory that can be allocated.
-Probably only available under Linux, this option is useful
+Specify the number of megabytes of memory that should be
+allocated and locked.
+Probably only available under Linux, this option may be useful
when dropping root (the
\f\*[B-Font]\-i\f[]
option).
-The default is 32 megabytes. Setting this to zero will prevent any attemp to lock memory.
+The default is 32 megabytes on non-Linux machines, and \-1 under Linux.
+-1 means "do not lock the process into memory".
+0 means "lock whatever memory the process wants into memory".
.TP 7
.NOP \f\*[B-Font]stacksize\f[] \f\*[I-Font]N4kPages\f[]
Specifies the maximum size of the process stack on systems with the
diff --git a/contrib/ntp/ntpd/ntp.conf.mdoc.in b/contrib/ntp/ntpd/ntp.conf.mdoc.in
index 93c638d..613ee7a 100644
--- a/contrib/ntp/ntpd/ntp.conf.mdoc.in
+++ b/contrib/ntp/ntpd/ntp.conf.mdoc.in
@@ -1,9 +1,9 @@
-.Dd June 29 2015
+.Dd October 21 2015
.Dt NTP_CONF 5 File Formats
.Os
.\" EDIT THIS FILE WITH CAUTION (ntp.mdoc)
.\"
-.\" It has been AutoGen-ed June 29, 2015 at 04:30:36 PM by AutoGen 5.18.5
+.\" It has been AutoGen-ed October 21, 2015 at 12:38:24 PM by AutoGen 5.18.5
.\" From the definitions ntp.conf.def
.\" and the template file agmdoc-cmd.tpl
.Sh NAME
@@ -1903,7 +1903,7 @@ re\-associate accordingly.
Some administrators prefer to avoid running
.Xr ntpd @NTPD_MS@
continuously and run either
-.Xr ntpdate 8
+.Xr sntp @SNTP_MS@
or
.Xr ntpd @NTPD_MS@
.Fl q
@@ -1995,7 +1995,7 @@ peers remaining.
This value defaults to 1, but can be changed
to any number from 1 to 15.
.It Cm minclock Ar minclock
-The clustering algorithm repeatedly casts out outlyer
+The clustering algorithm repeatedly casts out outlier
associations until no more than
.Cm minclock
associations remain.
@@ -2725,12 +2725,15 @@ pulses will not be suppressed.
.Xc
.Bl -tag -width indent
.It Cm memlock Ar Nmegabytes
-Specify the number of megabytes of memory that can be allocated.
-Probably only available under Linux, this option is useful
+Specify the number of megabytes of memory that should be
+allocated and locked.
+Probably only available under Linux, this option may be useful
when dropping root (the
.Fl i
option).
-The default is 32 megabytes. Setting this to zero will prevent any attemp to lock memory.
+The default is 32 megabytes on non\-Linux machines, and \-1 under Linux.
+-1 means "do not lock the process into memory".
+0 means "lock whatever memory the process wants into memory".
.It Cm stacksize Ar N4kPages
Specifies the maximum size of the process stack on systems with the
.Fn mlockall
diff --git a/contrib/ntp/ntpd/ntp.keys.5man b/contrib/ntp/ntpd/ntp.keys.5man
index 63d4553..3e5cb54 100644
--- a/contrib/ntp/ntpd/ntp.keys.5man
+++ b/contrib/ntp/ntpd/ntp.keys.5man
@@ -1,8 +1,8 @@
-.TH ntp.keys 5man "29 Jun 2015" "4.2.8p3" "File Formats"
+.TH ntp.keys 5man "21 Oct 2015" "4.2.8p4" "File Formats"
.\"
.\" EDIT THIS FILE WITH CAUTION (ntp.man)
.\"
-.\" It has been AutoGen-ed June 29, 2015 at 04:30:21 PM by AutoGen 5.18.5
+.\" It has been AutoGen-ed October 21, 2015 at 12:38:08 PM by AutoGen 5.18.5
.\" From the definitions ntp.keys.def
.\" and the template file agman-file.tpl
.Sh NAME
diff --git a/contrib/ntp/ntpd/ntp.keys.5mdoc b/contrib/ntp/ntpd/ntp.keys.5mdoc
index 47e5f81..6355a39 100644
--- a/contrib/ntp/ntpd/ntp.keys.5mdoc
+++ b/contrib/ntp/ntpd/ntp.keys.5mdoc
@@ -1,9 +1,9 @@
-.Dd June 29 2015
+.Dd October 21 2015
.Dt NTP_KEYS 5mdoc File Formats
.Os SunOS 5.10
.\" EDIT THIS FILE WITH CAUTION (ntp.mdoc)
.\"
-.\" It has been AutoGen-ed June 29, 2015 at 04:30:39 PM by AutoGen 5.18.5
+.\" It has been AutoGen-ed October 21, 2015 at 12:38:28 PM by AutoGen 5.18.5
.\" From the definitions ntp.keys.def
.\" and the template file agmdoc-file.tpl
.Sh NAME
diff --git a/contrib/ntp/ntpd/ntp.keys.html b/contrib/ntp/ntpd/ntp.keys.html
index f096f63..3671aaa 100644
--- a/contrib/ntp/ntpd/ntp.keys.html
+++ b/contrib/ntp/ntpd/ntp.keys.html
@@ -33,7 +33,7 @@ Up:&nbsp;<a rel="up" accesskey="u" href="#dir">(dir)</a>
<p>This document describes the symmetric key file for the NTP Project's
<code>ntpd</code> program.
- <p>This document applies to version 4.2.8p3 of <code>ntp.keys</code>.
+ <p>This document applies to version 4.2.8p4 of <code>ntp.keys</code>.
<div class="shortcontents">
<h2>Short Contents</h2>
diff --git a/contrib/ntp/ntpd/ntp.keys.man.in b/contrib/ntp/ntpd/ntp.keys.man.in
index 1080b91..bd64756 100644
--- a/contrib/ntp/ntpd/ntp.keys.man.in
+++ b/contrib/ntp/ntpd/ntp.keys.man.in
@@ -1,8 +1,8 @@
-.TH ntp.keys 5 "29 Jun 2015" "4.2.8p3" "File Formats"
+.TH ntp.keys 5 "21 Oct 2015" "4.2.8p4" "File Formats"
.\"
.\" EDIT THIS FILE WITH CAUTION (ntp.man)
.\"
-.\" It has been AutoGen-ed June 29, 2015 at 04:30:21 PM by AutoGen 5.18.5
+.\" It has been AutoGen-ed October 21, 2015 at 12:38:08 PM by AutoGen 5.18.5
.\" From the definitions ntp.keys.def
.\" and the template file agman-file.tpl
.Sh NAME
diff --git a/contrib/ntp/ntpd/ntp.keys.mdoc.in b/contrib/ntp/ntpd/ntp.keys.mdoc.in
index 6bd1c09..6600d57 100644
--- a/contrib/ntp/ntpd/ntp.keys.mdoc.in
+++ b/contrib/ntp/ntpd/ntp.keys.mdoc.in
@@ -1,9 +1,9 @@
-.Dd June 29 2015
+.Dd October 21 2015
.Dt NTP_KEYS 5 File Formats
.Os SunOS 5.10
.\" EDIT THIS FILE WITH CAUTION (ntp.mdoc)
.\"
-.\" It has been AutoGen-ed June 29, 2015 at 04:30:39 PM by AutoGen 5.18.5
+.\" It has been AutoGen-ed October 21, 2015 at 12:38:28 PM by AutoGen 5.18.5
.\" From the definitions ntp.keys.def
.\" and the template file agmdoc-file.tpl
.Sh NAME
diff --git a/contrib/ntp/ntpd/ntp_config.c b/contrib/ntp/ntpd/ntp_config.c
index 3007732..1c754bd 100644
--- a/contrib/ntp/ntpd/ntp_config.c
+++ b/contrib/ntp/ntpd/ntp_config.c
@@ -53,13 +53,21 @@
#include "ntp_parser.h"
#include "ntpd-opts.h"
+/* Bug 2817 */
+#if defined(HAVE_SYS_MMAN_H)
+# include <sys/mman.h>
+#endif
/* list of servers from command line for config_peers() */
int cmdline_server_count;
char ** cmdline_servers;
-/* set to zero if admin doesn't want memory locked */
-int do_memlock = 1;
+/* Current state of memory locking:
+ * -1: default
+ * 0: memory locking disabled
+ * 1: Memory locking enabled
+ */
+int cur_memlock = -1;
/*
* "logconfig" building blocks
@@ -1152,9 +1160,8 @@ create_address_node(
{
address_node *my_node;
- NTP_REQUIRE(NULL != addr);
- NTP_REQUIRE(AF_INET == type ||
- AF_INET6 == type || AF_UNSPEC == type);
+ REQUIRE(NULL != addr);
+ REQUIRE(AF_INET == type || AF_INET6 == type || AF_UNSPEC == type);
my_node = emalloc_zero(sizeof(*my_node));
my_node->address = addr;
my_node->type = (u_short)type;
@@ -1170,7 +1177,7 @@ destroy_address_node(
{
if (NULL == my_node)
return;
- NTP_REQUIRE(NULL != my_node->address);
+ REQUIRE(NULL != my_node->address);
free(my_node->address);
free(my_node);
@@ -1567,7 +1574,7 @@ create_nic_rule_node(
{
nic_rule_node *my_node;
- NTP_REQUIRE(match_class != 0 || if_name != NULL);
+ REQUIRE(match_class != 0 || if_name != NULL);
my_node = emalloc_zero(sizeof(*my_node));
my_node->match_class = match_class;
@@ -1826,7 +1833,9 @@ config_auth(
/* Crypto Command */
#ifdef AUTOKEY
+# ifdef __GNUC__
item = -1; /* quiet warning */
+# endif
my_val = HEAD_PFIFO(ptree->auth.crypto_cmd_list);
for (; my_val != NULL; my_val = my_val->link) {
switch (my_val->attr) {
@@ -1979,7 +1988,9 @@ config_tos(
int item;
double val;
+#ifdef __GNUC__
item = -1; /* quiet warning */
+#endif
tos = HEAD_PFIFO(ptree->orphan_cmds);
for (; tos != NULL; tos = tos->link) {
val = tos->value.d;
@@ -2610,18 +2621,36 @@ config_rlimit(
break;
case T_Memlock:
- if (rlimit_av->value.i != 0) {
+ /* What if we HAVE_OPT(SAVECONFIGQUIT) ? */
+ if (rlimit_av->value.i == -1) {
+# if defined(HAVE_MLOCKALL)
+ if (cur_memlock != 0) {
+ if (-1 == munlockall()) {
+ msyslog(LOG_ERR, "munlockall() failed: %m");
+ }
+ }
+ cur_memlock = 0;
+# endif /* HAVE_MLOCKALL */
+ } else if (rlimit_av->value.i >= 0) {
#if defined(RLIMIT_MEMLOCK)
+# if defined(HAVE_MLOCKALL)
+ if (cur_memlock != 1) {
+ if (-1 == mlockall(MCL_CURRENT|MCL_FUTURE)) {
+ msyslog(LOG_ERR, "mlockall() failed: %m");
+ }
+ }
+# endif /* HAVE_MLOCKALL */
ntp_rlimit(RLIMIT_MEMLOCK,
(rlim_t)(rlimit_av->value.i * 1024 * 1024),
1024 * 1024,
"MB");
+ cur_memlock = 1;
#else
/* STDERR as well would be fine... */
msyslog(LOG_WARNING, "'rlimit memlock' specified but is not available on this system.");
#endif /* RLIMIT_MEMLOCK */
} else {
- do_memlock = 0;
+ msyslog(LOG_WARNING, "'rlimit memlock' value of %d is unexpected!", rlimit_av->value.i);
}
break;
@@ -2662,7 +2691,9 @@ config_tinker(
attr_val * tinker;
int item;
+#ifdef __GNUC__
item = -1; /* quiet warning */
+#endif
tinker = HEAD_PFIFO(ptree->tinker);
for (; tinker != NULL; tinker = tinker->link) {
switch (tinker->attr) {
@@ -2776,12 +2807,14 @@ config_nic_rules(
switch (curr_node->match_class) {
default:
+#ifdef __GNUC__
/*
* this assignment quiets a gcc "may be used
* uninitialized" warning and is here for no
* other reason.
*/
match_type = MATCH_ALL;
+#endif
INSIST(FALSE);
break;
@@ -2834,12 +2867,14 @@ config_nic_rules(
switch (curr_node->action) {
default:
+#ifdef __GNUC__
/*
* this assignment quiets a gcc "may be used
* uninitialized" warning and is here for no
* other reason.
*/
action = ACTION_LISTEN;
+#endif
INSIST(FALSE);
break;
@@ -4880,9 +4915,9 @@ getnetnum(
enum gnn_type a_type /* ignored */
)
{
- NTP_REQUIRE(AF_UNSPEC == AF(addr) ||
- AF_INET == AF(addr) ||
- AF_INET6 == AF(addr));
+ REQUIRE(AF_UNSPEC == AF(addr) ||
+ AF_INET == AF(addr) ||
+ AF_INET6 == AF(addr));
if (!is_ip_address(num, AF(addr), addr))
return 0;
diff --git a/contrib/ntp/ntpd/ntp_control.c b/contrib/ntp/ntpd/ntp_control.c
index 43d2b27..7736311 100644
--- a/contrib/ntp/ntpd/ntp_control.c
+++ b/contrib/ntp/ntpd/ntp_control.c
@@ -3,10 +3,6 @@
* traps. Provides service to ntpq and others.
*/
-/*
- * $FreeBSD: head/contrib/ntp/ntpd/ntp_control.c 276071 2014-12-22 18:54:55Z delphij $
- */
-
#ifdef HAVE_CONFIG_H
# include <config.h>
#endif
@@ -32,15 +28,11 @@
#include "ntp_leapsec.h"
#include "ntp_md5.h" /* provides OpenSSL digest API */
#include "lib_strbuf.h"
+#include <rc_cmdlength.h>
#ifdef KERNEL_PLL
# include "ntp_syscall.h"
#endif
-extern size_t remoteconfig_cmdlength( const char *src_buf, const char *src_end );
-
-#ifndef MIN
-#define MIN(a, b) (((a) <= (b)) ? (a) : (b))
-#endif
/*
* Structure to hold request procedure information
@@ -428,10 +420,10 @@ static const struct ctl_var sys_var[] = {
{ CS_TIMER_XMTS, RO, "timer_xmts" }, /* 87 */
{ CS_FUZZ, RO, "fuzz" }, /* 88 */
{ CS_WANDER_THRESH, RO, "clk_wander_threshold" }, /* 89 */
-#ifdef LEAP_SMEAR
+
{ CS_LEAPSMEARINTV, RO, "leapsmearinterval" }, /* 90 */
{ CS_LEAPSMEAROFFS, RO, "leapsmearoffset" }, /* 91 */
-#endif /* LEAP_SMEAR */
+
#ifdef AUTOKEY
{ CS_FLAGS, RO, "flags" }, /* 1 + CS_MAX_NOAUTOKEY */
{ CS_HOST, RO, "host" }, /* 2 + CS_MAX_NOAUTOKEY */
@@ -892,6 +884,28 @@ save_config(
int restrict_mask
)
{
+ /* block directory traversal by searching for characters that
+ * indicate directory components in a file path.
+ *
+ * Conceptually we should be searching for DIRSEP in filename,
+ * however Windows actually recognizes both forward and
+ * backslashes as equivalent directory separators at the API
+ * level. On POSIX systems we could allow '\\' but such
+ * filenames are tricky to manipulate from a shell, so just
+ * reject both types of slashes on all platforms.
+ */
+ /* TALOS-CAN-0062: block directory traversal for VMS, too */
+ static const char * illegal_in_filename =
+#if defined(VMS)
+ ":[]" /* do not allow drive and path components here */
+#elif defined(SYS_WINNT)
+ ":\\/" /* path and drive separators */
+#else
+ "\\/" /* separator and critical char for POSIX */
+#endif
+ ;
+
+
char reply[128];
#ifdef SAVECONFIG
char filespec[128];
@@ -946,15 +960,9 @@ save_config(
localtime(&now)))
strlcpy(filename, filespec, sizeof(filename));
- /*
- * Conceptually we should be searching for DIRSEP in filename,
- * however Windows actually recognizes both forward and
- * backslashes as equivalent directory separators at the API
- * level. On POSIX systems we could allow '\\' but such
- * filenames are tricky to manipulate from a shell, so just
- * reject both types of slashes on all platforms.
- */
- if (strchr(filename, '\\') || strchr(filename, '/')) {
+ /* block directory/drive traversal */
+ /* TALOS-CAN-0062: block directory traversal for VMS, too */
+ if (NULL != strpbrk(filename, illegal_in_filename)) {
snprintf(reply, sizeof(reply),
"saveconfig does not allow directory in filename");
ctl_putdata(reply, strlen(reply), 0);
@@ -1409,7 +1417,7 @@ ctl_putstr(
memcpy(buffer, tag, tl);
cp = buffer + tl;
if (len > 0) {
- NTP_INSIST(tl + 3 + len <= sizeof(buffer));
+ INSIST(tl + 3 + len <= sizeof(buffer));
*cp++ = '=';
*cp++ = '"';
memcpy(cp, data, len);
@@ -1444,7 +1452,7 @@ ctl_putunqstr(
memcpy(buffer, tag, tl);
cp = buffer + tl;
if (len > 0) {
- NTP_INSIST(tl + 1 + len <= sizeof(buffer));
+ INSIST(tl + 1 + len <= sizeof(buffer));
*cp++ = '=';
memcpy(cp, data, len);
cp += len;
@@ -1473,7 +1481,7 @@ ctl_putdblf(
while (*cq != '\0')
*cp++ = *cq++;
*cp++ = '=';
- NTP_INSIST((size_t)(cp - buffer) < sizeof(buffer));
+ INSIST((size_t)(cp - buffer) < sizeof(buffer));
snprintf(cp, sizeof(buffer) - (cp - buffer), use_f ? "%.*f" : "%.*g",
precision, d);
cp += strlen(cp);
@@ -1499,7 +1507,7 @@ ctl_putuint(
*cp++ = *cq++;
*cp++ = '=';
- NTP_INSIST((cp - buffer) < (int)sizeof(buffer));
+ INSIST((cp - buffer) < (int)sizeof(buffer));
snprintf(cp, sizeof(buffer) - (cp - buffer), "%lu", uval);
cp += strlen(cp);
ctl_putdata(buffer, (unsigned)( cp - buffer ), 0);
@@ -1526,7 +1534,7 @@ ctl_putcal(
pcal->hour,
pcal->minute
);
- NTP_INSIST(numch < sizeof(buffer));
+ INSIST(numch < sizeof(buffer));
ctl_putdata(buffer, numch, 0);
return;
@@ -1557,7 +1565,7 @@ ctl_putfs(
tm = gmtime(&fstamp);
if (NULL == tm)
return;
- NTP_INSIST((cp - buffer) < (int)sizeof(buffer));
+ INSIST((cp - buffer) < (int)sizeof(buffer));
snprintf(cp, sizeof(buffer) - (cp - buffer),
"%04d%02d%02d%02d%02d", tm->tm_year + 1900,
tm->tm_mon + 1, tm->tm_mday, tm->tm_hour, tm->tm_min);
@@ -1586,7 +1594,7 @@ ctl_puthex(
*cp++ = *cq++;
*cp++ = '=';
- NTP_INSIST((cp - buffer) < (int)sizeof(buffer));
+ INSIST((cp - buffer) < (int)sizeof(buffer));
snprintf(cp, sizeof(buffer) - (cp - buffer), "0x%lx", uval);
cp += strlen(cp);
ctl_putdata(buffer,(unsigned)( cp - buffer ), 0);
@@ -1612,7 +1620,7 @@ ctl_putint(
*cp++ = *cq++;
*cp++ = '=';
- NTP_INSIST((cp - buffer) < (int)sizeof(buffer));
+ INSIST((cp - buffer) < (int)sizeof(buffer));
snprintf(cp, sizeof(buffer) - (cp - buffer), "%ld", ival);
cp += strlen(cp);
ctl_putdata(buffer, (unsigned)( cp - buffer ), 0);
@@ -1638,7 +1646,7 @@ ctl_putts(
*cp++ = *cq++;
*cp++ = '=';
- NTP_INSIST((size_t)(cp - buffer) < sizeof(buffer));
+ INSIST((size_t)(cp - buffer) < sizeof(buffer));
snprintf(cp, sizeof(buffer) - (cp - buffer), "0x%08x.%08x",
(u_int)ts->l_ui, (u_int)ts->l_uf);
cp += strlen(cp);
@@ -1670,7 +1678,7 @@ ctl_putadr(
cq = numtoa(addr32);
else
cq = stoa(addr);
- NTP_INSIST((cp - buffer) < (int)sizeof(buffer));
+ INSIST((cp - buffer) < (int)sizeof(buffer));
snprintf(cp, sizeof(buffer) - (cp - buffer), "%s", cq);
cp += strlen(cp);
ctl_putdata(buffer, (unsigned)(cp - buffer), 0);
@@ -1741,7 +1749,7 @@ ctl_putarray(
if (i == 0)
i = NTP_SHIFT;
i--;
- NTP_INSIST((cp - buffer) < (int)sizeof(buffer));
+ INSIST((cp - buffer) < (int)sizeof(buffer));
snprintf(cp, sizeof(buffer) - (cp - buffer),
" %.2f", arr[i] * 1e3);
cp += strlen(cp);
@@ -2410,6 +2418,9 @@ ctl_putsys(
ntohl(hostval.tstamp));
break;
#endif /* AUTOKEY */
+
+ default:
+ break;
}
}
@@ -2933,7 +2944,6 @@ ctl_getitem(
* Look for a first character match on the tag. If we find
* one, see if it is a full match.
*/
- v = var_list;
cp = reqpt;
for (v = var_list; !(EOV & v->flags); v++) {
if (!(PADDING & v->flags) && *cp == *(v->text)) {
@@ -3115,7 +3125,7 @@ read_peervars(void)
ctl_error(CERR_UNKNOWNVAR);
return;
}
- NTP_INSIST(v->code < COUNTOF(wants));
+ INSIST(v->code < COUNTOF(wants));
wants[v->code] = 1;
gotvar = 1;
}
@@ -3158,19 +3168,19 @@ read_sysvars(void)
gotvar = 0;
while (NULL != (v = ctl_getitem(sys_var, &valuep))) {
if (!(EOV & v->flags)) {
- NTP_INSIST(v->code < wants_count);
+ INSIST(v->code < wants_count);
wants[v->code] = 1;
gotvar = 1;
} else {
v = ctl_getitem(ext_sys_var, &valuep);
- NTP_INSIST(v != NULL);
+ INSIST(v != NULL);
if (EOV & v->flags) {
ctl_error(CERR_UNKNOWNVAR);
free(wants);
return;
}
n = v->code + CS_MAXCODE + 1;
- NTP_INSIST(n < wants_count);
+ INSIST(n < wants_count);
wants[n] = 1;
gotvar = 1;
}
@@ -4404,7 +4414,7 @@ read_clockstatus(
gotvar = TRUE;
} else {
v = ctl_getitem(kv, &valuep);
- NTP_INSIST(NULL != v);
+ INSIST(NULL != v);
if (EOV & v->flags) {
ctl_error(CERR_UNKNOWNVAR);
free(wants);
@@ -4800,7 +4810,7 @@ report_event(
for (i = 1; i <= CS_VARLIST; i++)
ctl_putsys(i);
} else {
- NTP_INSIST(peer != NULL);
+ INSIST(peer != NULL);
rpkt.associd = htons(peer->associd);
rpkt.status = htons(ctlpeerstatus(peer));
@@ -4905,7 +4915,7 @@ count_var(
while (!(EOV & (k++)->flags))
c++;
- NTP_ENSURE(c <= USHRT_MAX);
+ ENSURE(c <= USHRT_MAX);
return (u_short)c;
}
diff --git a/contrib/ntp/ntpd/ntp_crypto.c b/contrib/ntp/ntpd/ntp_crypto.c
index 2be501d..376b5b5 100644
--- a/contrib/ntp/ntpd/ntp_crypto.c
+++ b/contrib/ntp/ntpd/ntp_crypto.c
@@ -202,6 +202,7 @@ static void cert_free (struct cert_info *);
static struct pkey_info *crypto_key (char *, char *, sockaddr_u *);
static void bighash (BIGNUM *, BIGNUM *);
static struct cert_info *crypto_cert (char *);
+static u_int exten_payload_size(const struct exten *);
#ifdef SYS_WINNT
int
@@ -380,7 +381,7 @@ make_keylist(
EVP_SignUpdate(&ctx, (u_char *)vp, 12);
EVP_SignUpdate(&ctx, vp->ptr, sizeof(struct autokey));
if (EVP_SignFinal(&ctx, vp->sig, &len, sign_pkey)) {
- NTP_INSIST(len <= sign_siglen);
+ INSIST(len <= sign_siglen);
vp->siglen = htonl(len);
peer->flags |= FLAG_ASSOC;
}
@@ -419,7 +420,7 @@ crypto_recv(
struct autokey *ap, *bp; /* autokey pointer */
struct exten *ep, *fp; /* extension pointers */
struct cert_info *xinfo; /* certificate info pointer */
- int has_mac; /* length of MAC field */
+ int macbytes; /* length of MAC field, signed by intention */
int authlen; /* offset of MAC field */
associd_t associd; /* association ID */
tstamp_t fstamp = 0; /* filestamp */
@@ -446,7 +447,11 @@ crypto_recv(
*/
authlen = LEN_PKT_NOMAC;
hismode = (int)PKT_MODE((&rbufp->recv_pkt)->li_vn_mode);
- while ((has_mac = rbufp->recv_length - authlen) > (int)MAX_MAC_LEN) {
+ while ((macbytes = rbufp->recv_length - authlen) > (int)MAX_MAC_LEN) {
+ /* We can be reasonably sure that we can read at least
+ * the opcode and the size field here. More stringent
+ * checks follow up shortly.
+ */
pkt = (u_int32 *)&rbufp->recv_pkt + authlen / 4;
ep = (struct exten *)pkt;
code = ntohl(ep->opcode) & 0xffff0000;
@@ -467,6 +472,18 @@ crypto_recv(
code |= CRYPTO_ERROR;
}
+ /* Check if the declared size fits into the remaining
+ * buffer.
+ */
+ if (len > macbytes) {
+ DPRINTF(1, ("crypto_recv: possible attack detected, associd %d\n",
+ associd));
+ return XEVNT_LEN;
+ }
+
+ /* Check if the paylod of the extension fits into the
+ * declared frame.
+ */
if (len >= VALUE_LEN) {
fstamp = ntohl(ep->fstamp);
vallen = ntohl(ep->vallen);
@@ -508,6 +525,7 @@ crypto_recv(
rval = XEVNT_ERR;
break;
}
+ free(peer->cmmd); /* will be set again! */
}
fp = emalloc(len);
memcpy(fp, ep, len);
@@ -1153,9 +1171,8 @@ crypto_xmit(
* choice.
*/
case CRYPTO_CERT | CRYPTO_RESP:
- vallen = ntohl(ep->vallen); /* Must be <64k */
- if (vallen == 0 || vallen > MAXHOSTNAME ||
- len - VALUE_LEN < vallen) {
+ vallen = exten_payload_size(ep); /* Must be <64k */
+ if (vallen == 0 || vallen >= sizeof(certname) ) {
rval = XEVNT_LEN;
break;
}
@@ -1591,7 +1608,7 @@ crypto_encrypt(
EVP_SignUpdate(&ctx, (u_char *)&vp->tstamp, 12);
EVP_SignUpdate(&ctx, vp->ptr, vallen);
if (EVP_SignFinal(&ctx, vp->sig, &vallen, sign_pkey)) {
- NTP_INSIST(vallen <= sign_siglen);
+ INSIST(vallen <= sign_siglen);
vp->siglen = htonl(vallen);
}
return (XEVNT_OK);
@@ -1770,7 +1787,7 @@ crypto_send(
if (j * 4 < siglen)
ep->pkt[i + j++] = 0;
memcpy(&ep->pkt[i], vp->sig, siglen);
- i += j;
+ /* i += j; */ /* We don't use i after this */
}
opcode = ntohl(ep->opcode);
ep->opcode = htonl((opcode & 0xffff0000) | len);
@@ -1825,7 +1842,7 @@ crypto_update(void)
EVP_SignUpdate(&ctx, (u_char *)&pubkey, 12);
EVP_SignUpdate(&ctx, pubkey.ptr, ntohl(pubkey.vallen));
if (EVP_SignFinal(&ctx, pubkey.sig, &len, sign_pkey)) {
- NTP_INSIST(len <= sign_siglen);
+ INSIST(len <= sign_siglen);
pubkey.siglen = htonl(len);
}
}
@@ -1846,7 +1863,7 @@ crypto_update(void)
EVP_SignUpdate(&ctx, cp->cert.ptr,
ntohl(cp->cert.vallen));
if (EVP_SignFinal(&ctx, cp->cert.sig, &len, sign_pkey)) {
- NTP_INSIST(len <= sign_siglen);
+ INSIST(len <= sign_siglen);
cp->cert.siglen = htonl(len);
}
}
@@ -1896,7 +1913,7 @@ crypto_update(void)
EVP_SignUpdate(&ctx, (u_char *)&tai_leap, 12);
EVP_SignUpdate(&ctx, tai_leap.ptr, len);
if (EVP_SignFinal(&ctx, tai_leap.sig, &len, sign_pkey)) {
- NTP_INSIST(len <= sign_siglen);
+ INSIST(len <= sign_siglen);
tai_leap.siglen = htonl(len);
}
crypto_flags |= CRYPTO_FLAG_TAI;
@@ -1997,9 +2014,9 @@ asn_to_calendar (
* 100. Dontcha love ASN.1? Better than MIL-188.
*/
len = asn1time->length;
- NTP_REQUIRE(len < sizeof(v));
+ REQUIRE(len < sizeof(v));
(void)strncpy(v, (char *)(asn1time->data), len);
- NTP_REQUIRE(len >= 13);
+ REQUIRE(len >= 13);
temp = strtoul(v+len-3, NULL, 10);
pjd->second = temp;
v[len-3] = '\0';
@@ -2169,7 +2186,7 @@ crypto_alice(
EVP_SignUpdate(&ctx, (u_char *)&vp->tstamp, 12);
EVP_SignUpdate(&ctx, vp->ptr, len);
if (EVP_SignFinal(&ctx, vp->sig, &len, sign_pkey)) {
- NTP_INSIST(len <= sign_siglen);
+ INSIST(len <= sign_siglen);
vp->siglen = htonl(len);
}
return (XEVNT_OK);
@@ -2197,8 +2214,7 @@ crypto_bob(
tstamp_t tstamp; /* NTP timestamp */
BIGNUM *bn, *bk, *r;
u_char *ptr;
- u_int len; /* extension field length */
- u_int vallen = 0; /* value length */
+ u_int len; /* extension field value length */
/*
* If the IFF parameters are not valid, something awful
@@ -2213,11 +2229,10 @@ crypto_bob(
/*
* Extract r from the challenge.
*/
- vallen = ntohl(ep->vallen);
- len = ntohl(ep->opcode) & 0x0000ffff;
- if (vallen == 0 || len < VALUE_LEN || len - VALUE_LEN < vallen)
- return XEVNT_LEN;
- if ((r = BN_bin2bn((u_char *)ep->pkt, vallen, NULL)) == NULL) {
+ len = exten_payload_size(ep);
+ if (len == 0 || len > MAX_VALLEN)
+ return (XEVNT_LEN);
+ if ((r = BN_bin2bn((u_char *)ep->pkt, len, NULL)) == NULL) {
msyslog(LOG_ERR, "crypto_bob: %s",
ERR_error_string(ERR_get_error(), NULL));
return (XEVNT_ERR);
@@ -2229,7 +2244,7 @@ crypto_bob(
*/
bctx = BN_CTX_new(); bk = BN_new(); bn = BN_new();
sdsa = DSA_SIG_new();
- BN_rand(bk, vallen * 8, -1, 1); /* k */
+ BN_rand(bk, len * 8, -1, 1); /* k */
BN_mod_mul(bn, dsa->priv_key, r, dsa->q, bctx); /* b r mod q */
BN_add(bn, bn, bk);
BN_mod(bn, bn, dsa->q, bctx); /* k + b r mod q */
@@ -2248,16 +2263,16 @@ crypto_bob(
* Encode the values in ASN.1 and sign. The filestamp is from
* the local file.
*/
- vallen = i2d_DSA_SIG(sdsa, NULL);
- if (vallen == 0) {
+ len = i2d_DSA_SIG(sdsa, NULL);
+ if (len == 0) {
msyslog(LOG_ERR, "crypto_bob: %s",
ERR_error_string(ERR_get_error(), NULL));
DSA_SIG_free(sdsa);
return (XEVNT_ERR);
}
- if (vallen > MAX_VALLEN) {
- msyslog(LOG_ERR, "crypto_bob: signature is too big: %d",
- vallen);
+ if (len > MAX_VALLEN) {
+ msyslog(LOG_ERR, "crypto_bob: signature is too big: %u",
+ len);
DSA_SIG_free(sdsa);
return (XEVNT_LEN);
}
@@ -2265,8 +2280,8 @@ crypto_bob(
tstamp = crypto_time();
vp->tstamp = htonl(tstamp);
vp->fstamp = htonl(iffkey_info->fstamp);
- vp->vallen = htonl(vallen);
- ptr = emalloc(vallen);
+ vp->vallen = htonl(len);
+ ptr = emalloc(len);
vp->ptr = ptr;
i2d_DSA_SIG(sdsa, &ptr);
DSA_SIG_free(sdsa);
@@ -2277,10 +2292,10 @@ crypto_bob(
vp->sig = emalloc(sign_siglen);
EVP_SignInit(&ctx, sign_digest);
EVP_SignUpdate(&ctx, (u_char *)&vp->tstamp, 12);
- EVP_SignUpdate(&ctx, vp->ptr, vallen);
- if (EVP_SignFinal(&ctx, vp->sig, &vallen, sign_pkey)) {
- NTP_INSIST(vallen <= sign_siglen);
- vp->siglen = htonl(vallen);
+ EVP_SignUpdate(&ctx, vp->ptr, len);
+ if (EVP_SignFinal(&ctx, vp->sig, &len, sign_pkey)) {
+ INSIST(len <= sign_siglen);
+ vp->siglen = htonl(len);
}
return (XEVNT_OK);
}
@@ -2486,7 +2501,7 @@ crypto_alice2(
EVP_SignUpdate(&ctx, (u_char *)&vp->tstamp, 12);
EVP_SignUpdate(&ctx, vp->ptr, len);
if (EVP_SignFinal(&ctx, vp->sig, &len, sign_pkey)) {
- NTP_INSIST(len <= sign_siglen);
+ INSIST(len <= sign_siglen);
vp->siglen = htonl(len);
}
return (XEVNT_OK);
@@ -2530,7 +2545,9 @@ crypto_bob2(
/*
* Extract r from the challenge.
*/
- len = ntohl(ep->vallen);
+ len = exten_payload_size(ep);
+ if (len == 0 || len > MAX_VALLEN)
+ return (XEVNT_LEN);
if ((r = BN_bin2bn((u_char *)ep->pkt, len, NULL)) == NULL) {
msyslog(LOG_ERR, "crypto_bob2: %s",
ERR_error_string(ERR_get_error(), NULL));
@@ -2586,7 +2603,7 @@ crypto_bob2(
EVP_SignUpdate(&ctx, (u_char *)&vp->tstamp, 12);
EVP_SignUpdate(&ctx, vp->ptr, len);
if (EVP_SignFinal(&ctx, vp->sig, &len, sign_pkey)) {
- NTP_INSIST(len <= sign_siglen);
+ INSIST(len <= sign_siglen);
vp->siglen = htonl(len);
}
return (XEVNT_OK);
@@ -2817,7 +2834,7 @@ crypto_alice3(
EVP_SignUpdate(&ctx, (u_char *)&vp->tstamp, 12);
EVP_SignUpdate(&ctx, vp->ptr, len);
if (EVP_SignFinal(&ctx, vp->sig, &len, sign_pkey)) {
- NTP_INSIST(len <= sign_siglen);
+ INSIST(len <= sign_siglen);
vp->siglen = htonl(len);
}
return (XEVNT_OK);
@@ -2859,7 +2876,9 @@ crypto_bob3(
/*
* Extract r from the challenge.
*/
- len = ntohl(ep->vallen);
+ len = exten_payload_size(ep);
+ if (len == 0 || len > MAX_VALLEN)
+ return (XEVNT_LEN);
if ((r = BN_bin2bn((u_char *)ep->pkt, len, NULL)) == NULL) {
msyslog(LOG_ERR, "crypto_bob3: %s",
ERR_error_string(ERR_get_error(), NULL));
@@ -2919,7 +2938,7 @@ crypto_bob3(
EVP_SignUpdate(&ctx, (u_char *)&vp->tstamp, 12);
EVP_SignUpdate(&ctx, vp->ptr, len);
if (EVP_SignFinal(&ctx, vp->sig, &len, sign_pkey)) {
- NTP_INSIST(len <= sign_siglen);
+ INSIST(len <= sign_siglen);
vp->siglen = htonl(len);
}
return (XEVNT_OK);
@@ -3078,8 +3097,11 @@ cert_sign(
if (tstamp == 0)
return (XEVNT_TSP);
+ len = exten_payload_size(ep);
+ if (len == 0 || len > MAX_VALLEN)
+ return (XEVNT_LEN);
cptr = (void *)ep->pkt;
- if ((req = d2i_X509(NULL, &cptr, ntohl(ep->vallen))) == NULL) {
+ if ((req = d2i_X509(NULL, &cptr, len)) == NULL) {
msyslog(LOG_ERR, "cert_sign: %s",
ERR_error_string(ERR_get_error(), NULL));
return (XEVNT_CRT);
@@ -3158,7 +3180,7 @@ cert_sign(
EVP_SignUpdate(&ctx, (u_char *)vp, 12);
EVP_SignUpdate(&ctx, vp->ptr, len);
if (EVP_SignFinal(&ctx, vp->sig, &len, sign_pkey)) {
- NTP_INSIST(len <= sign_siglen);
+ INSIST(len <= sign_siglen);
vp->siglen = htonl(len);
}
}
@@ -4028,6 +4050,36 @@ crypto_config(
break;
}
}
+
+/*
+ * Get the payload size (internal value length) of an extension packet.
+ * If the inner value size does not match the outer packet size (that
+ * is, the value would end behind the frame given by the opcode/size
+ * field) the function will effectively return UINT_MAX. If the frame is
+ * too short to hold a variable-sized value, the return value is zero.
+ */
+static u_int
+exten_payload_size(
+ const struct exten * ep)
+{
+ typedef const u_char *BPTR;
+
+ size_t extn_size;
+ size_t data_size;
+ size_t head_size;
+
+ data_size = 0;
+ if (NULL != ep) {
+ head_size = (BPTR)(&ep->vallen + 1) - (BPTR)ep;
+ extn_size = (uint16_t)(ntohl(ep->opcode) & 0x0000ffff);
+ if (extn_size >= head_size) {
+ data_size = (uint32_t)ntohl(ep->vallen);
+ if (data_size > extn_size - head_size)
+ data_size = ~(size_t)0u;
+ }
+ }
+ return (u_int)data_size;
+}
# else /* !AUTOKEY follows */
int ntp_crypto_bs_pubkey;
# endif /* !AUTOKEY */
diff --git a/contrib/ntp/ntpd/ntp_io.c b/contrib/ntp/ntpd/ntp_io.c
index 2b5a003..5fc6ed5 100644
--- a/contrib/ntp/ntpd/ntp_io.c
+++ b/contrib/ntp/ntpd/ntp_io.c
@@ -216,7 +216,7 @@ static int is_wildcard_addr (const sockaddr_u *);
* Multicast functions
*/
static isc_boolean_t addr_ismulticast (sockaddr_u *);
-static isc_boolean_t is_not_bindable (sockaddr_u *,
+static isc_boolean_t is_anycast (sockaddr_u *,
const char *);
/*
@@ -371,7 +371,7 @@ maintain_activefds(
maxactivefd = i;
break;
}
- NTP_INSIST(fd != maxactivefd);
+ INSIST(fd != maxactivefd);
}
}
}
@@ -687,8 +687,8 @@ addr_samesubnet(
const u_int32 * pm;
size_t loops;
- NTP_REQUIRE(AF(a) == AF(a_mask));
- NTP_REQUIRE(AF(b) == AF(b_mask));
+ REQUIRE(AF(a) == AF(a_mask));
+ REQUIRE(AF(b) == AF(b_mask));
/*
* With address and mask families verified to match, comparing
* the masks also validates the address's families match.
@@ -735,8 +735,8 @@ is_ip_address(
char tmpbuf[128];
char *pch;
- NTP_REQUIRE(host != NULL);
- NTP_REQUIRE(addr != NULL);
+ REQUIRE(host != NULL);
+ REQUIRE(addr != NULL);
ZERO_SOCK(addr);
@@ -1250,15 +1250,15 @@ add_nic_rule(
rule->action = action;
if (MATCH_IFNAME == match_type) {
- NTP_REQUIRE(NULL != if_name);
+ REQUIRE(NULL != if_name);
rule->if_name = estrdup(if_name);
} else if (MATCH_IFADDR == match_type) {
- NTP_REQUIRE(NULL != if_name);
+ REQUIRE(NULL != if_name);
/* set rule->addr */
is_ip = is_ip_address(if_name, AF_UNSPEC, &rule->addr);
- NTP_REQUIRE(is_ip);
+ REQUIRE(is_ip);
} else
- NTP_REQUIRE(NULL == if_name);
+ REQUIRE(NULL == if_name);
LINK_SLIST(nic_rule_list, rule, next);
}
@@ -1278,7 +1278,7 @@ action_text(
t = "ERROR"; /* quiet uninit warning */
DPRINTF(1, ("fatal: unknown nic_rule_action %d\n",
action));
- NTP_ENSURE(0);
+ ENSURE(0);
break;
case ACTION_LISTEN:
@@ -1666,11 +1666,9 @@ check_flags6(
u_int32 flags6
)
{
-#if defined(INCLUDE_IPV6_SUPPORT) && defined(SIOCGIFAFLAG_IN6) && \
- (defined(IN6_IFF_ANYCAST) || defined(IN6_IFF_NOTREADY))
+#if defined(INCLUDE_IPV6_SUPPORT) && defined(SIOCGIFAFLAG_IN6)
struct in6_ifreq ifr6;
int fd;
- u_int32 exclude = 0;
if (psau->sa.sa_family != AF_INET6)
return ISC_FALSE;
@@ -1684,21 +1682,14 @@ check_flags6(
return ISC_FALSE;
}
close(fd);
- flags6 = ifr6.ifr_ifru.ifru_flags6;
-#if defined(IN6_IFF_ANYCAST)
- exclude |= IN6_IFF_ANYCAST;
-#endif /* !IN6_IFF_ANYCAST */
-#if defined(IN6_IFF_NOTREADY)
- exclude |= IN6_IFF_NOTREADY;
-#endif /* !IN6_IFF_NOTREADY */
- if ((flags6 & exclude) != 0)
+ if ((ifr6.ifr_ifru.ifru_flags6 & flags6) != 0)
return ISC_TRUE;
-#endif /* INCLUDE_IPV6_SUPPORT && SIOCGIFAFLAG_IN6 && (IN6_IFF_ANYCAST && IN6_IFF_NOTREADY) */
+#endif /* INCLUDE_IPV6_SUPPORT && SIOCGIFAFLAG_IN6 */
return ISC_FALSE;
}
static isc_boolean_t
-is_not_bindable(
+is_anycast(
sockaddr_u *psau,
const char *name
)
@@ -1859,7 +1850,7 @@ update_interfaces(
if (is_wildcard_addr(&enumep.sin))
continue;
- if (is_not_bindable(&enumep.sin, isc_if.name))
+ if (is_anycast(&enumep.sin, isc_if.name))
continue;
/*
@@ -2031,6 +2022,7 @@ update_interfaces(
if (sys_bclient)
io_setbclient();
+#ifdef MCAST
/*
* Check multicast interfaces and try to join multicast groups if
* not joined yet.
@@ -2056,6 +2048,7 @@ update_interfaces(
}
}
}
+#endif /* MCAST */
return new_interface_found;
}
@@ -2406,7 +2399,7 @@ enable_multicast_if(
u_int off6 = 0;
#endif
- NTP_REQUIRE(AF(maddr) == AF(&iface->sin));
+ REQUIRE(AF(maddr) == AF(&iface->sin));
switch (AF(&iface->sin)) {
@@ -2466,9 +2459,9 @@ socket_multicast_enable(
)
{
struct ip_mreq mreq;
-#ifdef INCLUDE_IPV6_MULTICAST_SUPPORT
+# ifdef INCLUDE_IPV6_MULTICAST_SUPPORT
struct ipv6_mreq mreq6;
-#endif
+# endif
switch (AF(maddr)) {
case AF_INET:
@@ -2495,7 +2488,7 @@ socket_multicast_enable(
break;
case AF_INET6:
-#ifdef INCLUDE_IPV6_MULTICAST_SUPPORT
+# ifdef INCLUDE_IPV6_MULTICAST_SUPPORT
/*
* Enable reception of multicast packets.
* If the address is link-local we can get the
@@ -2519,9 +2512,9 @@ socket_multicast_enable(
DPRINTF(4, ("Added IPv6 multicast group on socket %d, addr %s for interface %u (%s)\n",
iface->fd, stoa(&iface->sin),
mreq6.ipv6mr_interface, stoa(maddr)));
-#else
+# else
return ISC_FALSE;
-#endif /* INCLUDE_IPV6_MULTICAST_SUPPORT */
+# endif /* INCLUDE_IPV6_MULTICAST_SUPPORT */
}
iface->flags |= INT_MCASTOPEN;
iface->num_mcast++;
@@ -2543,9 +2536,9 @@ socket_multicast_disable(
sockaddr_u * maddr
)
{
-#ifdef INCLUDE_IPV6_MULTICAST_SUPPORT
+# ifdef INCLUDE_IPV6_MULTICAST_SUPPORT
struct ipv6_mreq mreq6;
-#endif
+# endif
struct ip_mreq mreq;
ZERO(mreq);
@@ -2574,7 +2567,7 @@ socket_multicast_disable(
}
break;
case AF_INET6:
-#ifdef INCLUDE_IPV6_MULTICAST_SUPPORT
+# ifdef INCLUDE_IPV6_MULTICAST_SUPPORT
/*
* Disable reception of multicast packets
* If the address is link-local we can get the
@@ -2596,9 +2589,9 @@ socket_multicast_disable(
return ISC_FALSE;
}
break;
-#else
+# else
return ISC_FALSE;
-#endif /* INCLUDE_IPV6_MULTICAST_SUPPORT */
+# endif /* INCLUDE_IPV6_MULTICAST_SUPPORT */
}
iface->num_mcast--;
@@ -2638,7 +2631,7 @@ io_setbclient(void)
continue;
/* Only IPv4 addresses are valid for broadcast */
- NTP_REQUIRE(IS_IPV4(&interf->sin));
+ REQUIRE(IS_IPV4(&interf->sin));
/* Do we already have the broadcast address open? */
if (interf->flags & INT_BCASTOPEN) {
@@ -2744,7 +2737,7 @@ io_multicast_add(
return;
}
-#ifndef MULTICAST_NONEWSOCKET
+# ifndef MULTICAST_NONEWSOCKET
ep = new_interface(NULL);
/*
@@ -2794,7 +2787,7 @@ io_multicast_add(
}
{ /* in place of the { following for in #else clause */
one_ep = ep;
-#else /* MULTICAST_NONEWSOCKET follows */
+# else /* MULTICAST_NONEWSOCKET follows */
/*
* For the case where we can't use a separate socket (Windows)
* join each applicable endpoint socket to the group address.
@@ -2809,7 +2802,7 @@ io_multicast_add(
(INT_LOOPBACK | INT_WILDCARD) & ep->flags)
continue;
one_ep = ep;
-#endif /* MULTICAST_NONEWSOCKET */
+# endif /* MULTICAST_NONEWSOCKET */
if (socket_multicast_enable(ep, addr))
msyslog(LOG_INFO,
"Joined %s socket to multicast group %s",
@@ -3249,7 +3242,7 @@ read_refclock_packet(
l_fp ts
)
{
- int i;
+ u_int read_count;
int buflen;
int saved_errno;
int consumed;
@@ -3268,12 +3261,15 @@ read_refclock_packet(
return (buflen);
}
- i = (rp->datalen == 0
- || rp->datalen > (int)sizeof(rb->recv_space))
- ? (int)sizeof(rb->recv_space)
- : rp->datalen;
+ /* TALOS-CAN-0064: avoid signed/unsigned clashes that can lead
+ * to buffer overrun and memory corruption
+ */
+ if (rp->datalen <= 0 || rp->datalen > sizeof(rb->recv_space))
+ read_count = sizeof(rb->recv_space);
+ else
+ read_count = (u_int)rp->datalen;
do {
- buflen = read(fd, (char *)&rb->recv_space, (u_int)i);
+ buflen = read(fd, (char *)&rb->recv_space, read_count);
} while (buflen < 0 && EINTR == errno);
if (buflen <= 0) {
@@ -4088,7 +4084,7 @@ calc_addr_distance(
int a1_greater;
int i;
- NTP_REQUIRE(AF(a1) == AF(a2));
+ REQUIRE(AF(a1) == AF(a2));
ZERO_SOCK(dist);
AF(dist) = AF(a1);
@@ -4139,7 +4135,7 @@ cmp_addr_distance(
{
int i;
- NTP_REQUIRE(AF(d1) == AF(d2));
+ REQUIRE(AF(d1) == AF(d2));
if (IS_IPV4(d1)) {
if (SRCADR(d1) < SRCADR(d2))
@@ -4631,10 +4627,15 @@ process_routing_msgs(struct asyncio_reader *reader)
cnt = read(reader->fd, buffer, sizeof(buffer));
if (cnt < 0) {
- msyslog(LOG_ERR,
- "i/o error on routing socket %m - disabling");
- remove_asyncio_reader(reader);
- delete_asyncio_reader(reader);
+ if (errno == ENOBUFS) {
+ msyslog(LOG_ERR,
+ "routing socket reports: %m");
+ } else {
+ msyslog(LOG_ERR,
+ "routing socket reports: %m - disabling");
+ remove_asyncio_reader(reader);
+ delete_asyncio_reader(reader);
+ }
return;
}
diff --git a/contrib/ntp/ntpd/ntp_loopfilter.c b/contrib/ntp/ntpd/ntp_loopfilter.c
index cb183b9..42c30de 100644
--- a/contrib/ntp/ntpd/ntp_loopfilter.c
+++ b/contrib/ntp/ntpd/ntp_loopfilter.c
@@ -577,7 +577,7 @@ local_clock(
switch (state) {
/*
- * In SYNC state we ignore the first outlyer and switch
+ * In SYNC state we ignore the first outlier and switch
* to SPIK state.
*/
case EVNT_SYNC:
@@ -588,8 +588,8 @@ local_clock(
return (0);
/*
- * In FREQ state we ignore outlyers and inlyers. At the
- * first outlyer after the stepout threshold, compute
+ * In FREQ state we ignore outliers and inlyers. At the
+ * first outlier after the stepout threshold, compute
* the apparent frequency correction and step the phase.
*/
case EVNT_FREQ:
@@ -601,7 +601,7 @@ local_clock(
/* fall through to EVNT_SPIK */
/*
- * In SPIK state we ignore succeeding outlyers until
+ * In SPIK state we ignore succeeding outliers until
* either an inlyer is found or the stepout threshold is
* exceeded.
*/
diff --git a/contrib/ntp/ntpd/ntp_monitor.c b/contrib/ntp/ntpd/ntp_monitor.c
index 02fd757..a07a1aa 100644
--- a/contrib/ntp/ntpd/ntp_monitor.c
+++ b/contrib/ntp/ntpd/ntp_monitor.c
@@ -133,7 +133,7 @@ remove_from_hash(
hash = MON_HASH(&mon->rmtadr);
UNLINK_SLIST(punlinked, mon_hash[hash], mon, hash_next,
mon_entry);
- NTP_ENSURE(punlinked == mon);
+ ENSURE(punlinked == mon);
}
@@ -325,6 +325,8 @@ ntp_monitor(
int leak; /* new headway */
int limit; /* average threshold */
+ REQUIRE(rbufp != NULL);
+
if (mon_enabled == MON_OFF)
return ~(RES_LIMITED | RES_KOD) & flags;
@@ -466,6 +468,8 @@ ntp_monitor(
}
}
+ INSIST(mon != NULL);
+
/*
* Got one, initialize it
*/
diff --git a/contrib/ntp/ntpd/ntp_parser.c b/contrib/ntp/ntpd/ntp_parser.c
index d76ac33..6235033 100644
--- a/contrib/ntp/ntpd/ntp_parser.c
+++ b/contrib/ntp/ntpd/ntp_parser.c
@@ -1,19 +1,19 @@
-/* A Bison parser, made by GNU Bison 2.7.12-4996. */
+/* A Bison parser, made by GNU Bison 3.0.2. */
/* Bison implementation for Yacc-like parsers in C
-
- Copyright (C) 1984, 1989-1990, 2000-2013 Free Software Foundation, Inc.
-
+
+ Copyright (C) 1984, 1989-1990, 2000-2013 Free Software Foundation, Inc.
+
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
-
+
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
-
+
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. */
@@ -26,7 +26,7 @@
special exception, which will cause the skeleton and the resulting
Bison output files to be licensed under the GNU General Public
License without this special exception.
-
+
This special exception was added by the Free Software Foundation in
version 2.2 of Bison. */
@@ -44,7 +44,7 @@
#define YYBISON 1
/* Bison version. */
-#define YYBISON_VERSION "2.7.12-4996"
+#define YYBISON_VERSION "3.0.2"
/* Skeleton name. */
#define YYSKELETON_NAME "yacc.c"
@@ -62,8 +62,7 @@
/* Copy the first part of user declarations. */
-/* Line 371 of yacc.c */
-#line 11 "../../ntpd/ntp_parser.y"
+#line 11 "../../ntpd/ntp_parser.y" /* yacc.c:339 */
#ifdef HAVE_CONFIG_H
# include <config.h>
@@ -97,14 +96,13 @@
# define ONLY_SIM(a) NULL
#endif
-/* Line 371 of yacc.c */
-#line 102 "ntp_parser.c"
+#line 100 "../../ntpd/ntp_parser.c" /* yacc.c:339 */
-# ifndef YY_NULL
+# ifndef YY_NULLPTR
# if defined __cplusplus && 201103L <= __cplusplus
-# define YY_NULL nullptr
+# define YY_NULLPTR nullptr
# else
-# define YY_NULL 0
+# define YY_NULLPTR 0
# endif
# endif
@@ -118,9 +116,9 @@
/* In a future release of Bison, this section will be replaced
by #include "y.tab.h". */
-#ifndef YY_YY_NTP_PARSER_H_INCLUDED
-# define YY_YY_NTP_PARSER_H_INCLUDED
-/* Enabling traces. */
+#ifndef YY_YY__NTPD_NTP_PARSER_H_INCLUDED
+# define YY_YY__NTPD_NTP_PARSER_H_INCLUDED
+/* Debug traces. */
#ifndef YYDEBUG
# define YYDEBUG 1
#endif
@@ -128,204 +126,203 @@
extern int yydebug;
#endif
-/* Tokens. */
+/* Token type. */
#ifndef YYTOKENTYPE
# define YYTOKENTYPE
- /* Put the tokens into the symbol table, so that GDB and other debuggers
- know about them. */
- enum yytokentype {
- T_Abbrev = 258,
- T_Age = 259,
- T_All = 260,
- T_Allan = 261,
- T_Allpeers = 262,
- T_Auth = 263,
- T_Autokey = 264,
- T_Automax = 265,
- T_Average = 266,
- T_Bclient = 267,
- T_Beacon = 268,
- T_Broadcast = 269,
- T_Broadcastclient = 270,
- T_Broadcastdelay = 271,
- T_Burst = 272,
- T_Calibrate = 273,
- T_Ceiling = 274,
- T_Clockstats = 275,
- T_Cohort = 276,
- T_ControlKey = 277,
- T_Crypto = 278,
- T_Cryptostats = 279,
- T_Ctl = 280,
- T_Day = 281,
- T_Default = 282,
- T_Digest = 283,
- T_Disable = 284,
- T_Discard = 285,
- T_Dispersion = 286,
- T_Double = 287,
- T_Driftfile = 288,
- T_Drop = 289,
- T_Dscp = 290,
- T_Ellipsis = 291,
- T_Enable = 292,
- T_End = 293,
- T_False = 294,
- T_File = 295,
- T_Filegen = 296,
- T_Filenum = 297,
- T_Flag1 = 298,
- T_Flag2 = 299,
- T_Flag3 = 300,
- T_Flag4 = 301,
- T_Flake = 302,
- T_Floor = 303,
- T_Freq = 304,
- T_Fudge = 305,
- T_Host = 306,
- T_Huffpuff = 307,
- T_Iburst = 308,
- T_Ident = 309,
- T_Ignore = 310,
- T_Incalloc = 311,
- T_Incmem = 312,
- T_Initalloc = 313,
- T_Initmem = 314,
- T_Includefile = 315,
- T_Integer = 316,
- T_Interface = 317,
- T_Intrange = 318,
- T_Io = 319,
- T_Ipv4 = 320,
- T_Ipv4_flag = 321,
- T_Ipv6 = 322,
- T_Ipv6_flag = 323,
- T_Kernel = 324,
- T_Key = 325,
- T_Keys = 326,
- T_Keysdir = 327,
- T_Kod = 328,
- T_Mssntp = 329,
- T_Leapfile = 330,
- T_Leapsmearinterval = 331,
- T_Limited = 332,
- T_Link = 333,
- T_Listen = 334,
- T_Logconfig = 335,
- T_Logfile = 336,
- T_Loopstats = 337,
- T_Lowpriotrap = 338,
- T_Manycastclient = 339,
- T_Manycastserver = 340,
- T_Mask = 341,
- T_Maxage = 342,
- T_Maxclock = 343,
- T_Maxdepth = 344,
- T_Maxdist = 345,
- T_Maxmem = 346,
- T_Maxpoll = 347,
- T_Mdnstries = 348,
- T_Mem = 349,
- T_Memlock = 350,
- T_Minclock = 351,
- T_Mindepth = 352,
- T_Mindist = 353,
- T_Minimum = 354,
- T_Minpoll = 355,
- T_Minsane = 356,
- T_Mode = 357,
- T_Mode7 = 358,
- T_Monitor = 359,
- T_Month = 360,
- T_Mru = 361,
- T_Multicastclient = 362,
- T_Nic = 363,
- T_Nolink = 364,
- T_Nomodify = 365,
- T_Nomrulist = 366,
- T_None = 367,
- T_Nonvolatile = 368,
- T_Nopeer = 369,
- T_Noquery = 370,
- T_Noselect = 371,
- T_Noserve = 372,
- T_Notrap = 373,
- T_Notrust = 374,
- T_Ntp = 375,
- T_Ntpport = 376,
- T_NtpSignDsocket = 377,
- T_Orphan = 378,
- T_Orphanwait = 379,
- T_Panic = 380,
- T_Peer = 381,
- T_Peerstats = 382,
- T_Phone = 383,
- T_Pid = 384,
- T_Pidfile = 385,
- T_Pool = 386,
- T_Port = 387,
- T_Preempt = 388,
- T_Prefer = 389,
- T_Protostats = 390,
- T_Pw = 391,
- T_Randfile = 392,
- T_Rawstats = 393,
- T_Refid = 394,
- T_Requestkey = 395,
- T_Reset = 396,
- T_Restrict = 397,
- T_Revoke = 398,
- T_Rlimit = 399,
- T_Saveconfigdir = 400,
- T_Server = 401,
- T_Setvar = 402,
- T_Source = 403,
- T_Stacksize = 404,
- T_Statistics = 405,
- T_Stats = 406,
- T_Statsdir = 407,
- T_Step = 408,
- T_Stepback = 409,
- T_Stepfwd = 410,
- T_Stepout = 411,
- T_Stratum = 412,
- T_String = 413,
- T_Sys = 414,
- T_Sysstats = 415,
- T_Tick = 416,
- T_Time1 = 417,
- T_Time2 = 418,
- T_Timer = 419,
- T_Timingstats = 420,
- T_Tinker = 421,
- T_Tos = 422,
- T_Trap = 423,
- T_True = 424,
- T_Trustedkey = 425,
- T_Ttl = 426,
- T_Type = 427,
- T_U_int = 428,
- T_Unconfig = 429,
- T_Unpeer = 430,
- T_Version = 431,
- T_WanderThreshold = 432,
- T_Week = 433,
- T_Wildcard = 434,
- T_Xleave = 435,
- T_Year = 436,
- T_Flag = 437,
- T_EOC = 438,
- T_Simulate = 439,
- T_Beep_Delay = 440,
- T_Sim_Duration = 441,
- T_Server_Offset = 442,
- T_Duration = 443,
- T_Freq_Offset = 444,
- T_Wander = 445,
- T_Jitter = 446,
- T_Prop_Delay = 447,
- T_Proc_Delay = 448
- };
+ enum yytokentype
+ {
+ T_Abbrev = 258,
+ T_Age = 259,
+ T_All = 260,
+ T_Allan = 261,
+ T_Allpeers = 262,
+ T_Auth = 263,
+ T_Autokey = 264,
+ T_Automax = 265,
+ T_Average = 266,
+ T_Bclient = 267,
+ T_Beacon = 268,
+ T_Broadcast = 269,
+ T_Broadcastclient = 270,
+ T_Broadcastdelay = 271,
+ T_Burst = 272,
+ T_Calibrate = 273,
+ T_Ceiling = 274,
+ T_Clockstats = 275,
+ T_Cohort = 276,
+ T_ControlKey = 277,
+ T_Crypto = 278,
+ T_Cryptostats = 279,
+ T_Ctl = 280,
+ T_Day = 281,
+ T_Default = 282,
+ T_Digest = 283,
+ T_Disable = 284,
+ T_Discard = 285,
+ T_Dispersion = 286,
+ T_Double = 287,
+ T_Driftfile = 288,
+ T_Drop = 289,
+ T_Dscp = 290,
+ T_Ellipsis = 291,
+ T_Enable = 292,
+ T_End = 293,
+ T_False = 294,
+ T_File = 295,
+ T_Filegen = 296,
+ T_Filenum = 297,
+ T_Flag1 = 298,
+ T_Flag2 = 299,
+ T_Flag3 = 300,
+ T_Flag4 = 301,
+ T_Flake = 302,
+ T_Floor = 303,
+ T_Freq = 304,
+ T_Fudge = 305,
+ T_Host = 306,
+ T_Huffpuff = 307,
+ T_Iburst = 308,
+ T_Ident = 309,
+ T_Ignore = 310,
+ T_Incalloc = 311,
+ T_Incmem = 312,
+ T_Initalloc = 313,
+ T_Initmem = 314,
+ T_Includefile = 315,
+ T_Integer = 316,
+ T_Interface = 317,
+ T_Intrange = 318,
+ T_Io = 319,
+ T_Ipv4 = 320,
+ T_Ipv4_flag = 321,
+ T_Ipv6 = 322,
+ T_Ipv6_flag = 323,
+ T_Kernel = 324,
+ T_Key = 325,
+ T_Keys = 326,
+ T_Keysdir = 327,
+ T_Kod = 328,
+ T_Mssntp = 329,
+ T_Leapfile = 330,
+ T_Leapsmearinterval = 331,
+ T_Limited = 332,
+ T_Link = 333,
+ T_Listen = 334,
+ T_Logconfig = 335,
+ T_Logfile = 336,
+ T_Loopstats = 337,
+ T_Lowpriotrap = 338,
+ T_Manycastclient = 339,
+ T_Manycastserver = 340,
+ T_Mask = 341,
+ T_Maxage = 342,
+ T_Maxclock = 343,
+ T_Maxdepth = 344,
+ T_Maxdist = 345,
+ T_Maxmem = 346,
+ T_Maxpoll = 347,
+ T_Mdnstries = 348,
+ T_Mem = 349,
+ T_Memlock = 350,
+ T_Minclock = 351,
+ T_Mindepth = 352,
+ T_Mindist = 353,
+ T_Minimum = 354,
+ T_Minpoll = 355,
+ T_Minsane = 356,
+ T_Mode = 357,
+ T_Mode7 = 358,
+ T_Monitor = 359,
+ T_Month = 360,
+ T_Mru = 361,
+ T_Multicastclient = 362,
+ T_Nic = 363,
+ T_Nolink = 364,
+ T_Nomodify = 365,
+ T_Nomrulist = 366,
+ T_None = 367,
+ T_Nonvolatile = 368,
+ T_Nopeer = 369,
+ T_Noquery = 370,
+ T_Noselect = 371,
+ T_Noserve = 372,
+ T_Notrap = 373,
+ T_Notrust = 374,
+ T_Ntp = 375,
+ T_Ntpport = 376,
+ T_NtpSignDsocket = 377,
+ T_Orphan = 378,
+ T_Orphanwait = 379,
+ T_Panic = 380,
+ T_Peer = 381,
+ T_Peerstats = 382,
+ T_Phone = 383,
+ T_Pid = 384,
+ T_Pidfile = 385,
+ T_Pool = 386,
+ T_Port = 387,
+ T_Preempt = 388,
+ T_Prefer = 389,
+ T_Protostats = 390,
+ T_Pw = 391,
+ T_Randfile = 392,
+ T_Rawstats = 393,
+ T_Refid = 394,
+ T_Requestkey = 395,
+ T_Reset = 396,
+ T_Restrict = 397,
+ T_Revoke = 398,
+ T_Rlimit = 399,
+ T_Saveconfigdir = 400,
+ T_Server = 401,
+ T_Setvar = 402,
+ T_Source = 403,
+ T_Stacksize = 404,
+ T_Statistics = 405,
+ T_Stats = 406,
+ T_Statsdir = 407,
+ T_Step = 408,
+ T_Stepback = 409,
+ T_Stepfwd = 410,
+ T_Stepout = 411,
+ T_Stratum = 412,
+ T_String = 413,
+ T_Sys = 414,
+ T_Sysstats = 415,
+ T_Tick = 416,
+ T_Time1 = 417,
+ T_Time2 = 418,
+ T_Timer = 419,
+ T_Timingstats = 420,
+ T_Tinker = 421,
+ T_Tos = 422,
+ T_Trap = 423,
+ T_True = 424,
+ T_Trustedkey = 425,
+ T_Ttl = 426,
+ T_Type = 427,
+ T_U_int = 428,
+ T_Unconfig = 429,
+ T_Unpeer = 430,
+ T_Version = 431,
+ T_WanderThreshold = 432,
+ T_Week = 433,
+ T_Wildcard = 434,
+ T_Xleave = 435,
+ T_Year = 436,
+ T_Flag = 437,
+ T_EOC = 438,
+ T_Simulate = 439,
+ T_Beep_Delay = 440,
+ T_Sim_Duration = 441,
+ T_Server_Offset = 442,
+ T_Duration = 443,
+ T_Freq_Offset = 444,
+ T_Wander = 445,
+ T_Jitter = 446,
+ T_Prop_Delay = 447,
+ T_Proc_Delay = 448
+ };
#endif
/* Tokens. */
#define T_Abbrev 258
@@ -520,13 +517,12 @@ extern int yydebug;
#define T_Prop_Delay 447
#define T_Proc_Delay 448
-
-
+/* Value type. */
#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
-typedef union YYSTYPE
+typedef union YYSTYPE YYSTYPE;
+union YYSTYPE
{
-/* Line 387 of yacc.c */
-#line 51 "../../ntpd/ntp_parser.y"
+#line 51 "../../ntpd/ntp_parser.y" /* yacc.c:355 */
char * String;
double Double;
@@ -545,37 +541,22 @@ typedef union YYSTYPE
script_info * Sim_script;
script_info_fifo * Sim_script_fifo;
-
-/* Line 387 of yacc.c */
-#line 551 "ntp_parser.c"
-} YYSTYPE;
+#line 545 "../../ntpd/ntp_parser.c" /* yacc.c:355 */
+};
# define YYSTYPE_IS_TRIVIAL 1
-# define yystype YYSTYPE /* obsolescent; will be withdrawn */
# define YYSTYPE_IS_DECLARED 1
#endif
+
extern YYSTYPE yylval;
-#ifdef YYPARSE_PARAM
-#if defined __STDC__ || defined __cplusplus
-int yyparse (void *YYPARSE_PARAM);
-#else
-int yyparse ();
-#endif
-#else /* ! YYPARSE_PARAM */
-#if defined __STDC__ || defined __cplusplus
int yyparse (void);
-#else
-int yyparse ();
-#endif
-#endif /* ! YYPARSE_PARAM */
-#endif /* !YY_YY_NTP_PARSER_H_INCLUDED */
+#endif /* !YY_YY__NTPD_NTP_PARSER_H_INCLUDED */
/* Copy the second part of user declarations. */
-/* Line 390 of yacc.c */
-#line 579 "ntp_parser.c"
+#line 560 "../../ntpd/ntp_parser.c" /* yacc.c:358 */
#ifdef short
# undef short
@@ -589,11 +570,8 @@ typedef unsigned char yytype_uint8;
#ifdef YYTYPE_INT8
typedef YYTYPE_INT8 yytype_int8;
-#elif (defined __STDC__ || defined __C99__FUNC__ \
- || defined __cplusplus || defined _MSC_VER)
-typedef signed char yytype_int8;
#else
-typedef short int yytype_int8;
+typedef signed char yytype_int8;
#endif
#ifdef YYTYPE_UINT16
@@ -613,8 +591,7 @@ typedef short int yytype_int16;
# define YYSIZE_T __SIZE_TYPE__
# elif defined size_t
# define YYSIZE_T size_t
-# elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \
- || defined __cplusplus || defined _MSC_VER)
+# elif ! defined YYSIZE_T
# include <stddef.h> /* INFRINGES ON USER NAME SPACE */
# define YYSIZE_T size_t
# else
@@ -636,11 +613,30 @@ typedef short int yytype_int16;
# endif
#endif
-#ifndef __attribute__
-/* This feature is available in gcc versions 2.5 and later. */
-# if (! defined __GNUC__ || __GNUC__ < 2 \
- || (__GNUC__ == 2 && __GNUC_MINOR__ < 5))
-# define __attribute__(Spec) /* empty */
+#ifndef YY_ATTRIBUTE
+# if (defined __GNUC__ \
+ && (2 < __GNUC__ || (__GNUC__ == 2 && 96 <= __GNUC_MINOR__))) \
+ || defined __SUNPRO_C && 0x5110 <= __SUNPRO_C
+# define YY_ATTRIBUTE(Spec) __attribute__(Spec)
+# else
+# define YY_ATTRIBUTE(Spec) /* empty */
+# endif
+#endif
+
+#ifndef YY_ATTRIBUTE_PURE
+# define YY_ATTRIBUTE_PURE YY_ATTRIBUTE ((__pure__))
+#endif
+
+#ifndef YY_ATTRIBUTE_UNUSED
+# define YY_ATTRIBUTE_UNUSED YY_ATTRIBUTE ((__unused__))
+#endif
+
+#if !defined _Noreturn \
+ && (!defined __STDC_VERSION__ || __STDC_VERSION__ < 201112)
+# if defined _MSC_VER && 1200 <= _MSC_VER
+# define _Noreturn __declspec (noreturn)
+# else
+# define _Noreturn YY_ATTRIBUTE ((__noreturn__))
# endif
#endif
@@ -651,25 +647,26 @@ typedef short int yytype_int16;
# define YYUSE(E) /* empty */
#endif
-
-/* Identity function, used to suppress warnings about constant conditions. */
-#ifndef lint
-# define YYID(N) (N)
-#else
-#if (defined __STDC__ || defined __C99__FUNC__ \
- || defined __cplusplus || defined _MSC_VER)
-static int
-YYID (int yyi)
+#if defined __GNUC__ && 407 <= __GNUC__ * 100 + __GNUC_MINOR__
+/* Suppress an incorrect diagnostic about yylval being uninitialized. */
+# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \
+ _Pragma ("GCC diagnostic push") \
+ _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")\
+ _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"")
+# define YY_IGNORE_MAYBE_UNINITIALIZED_END \
+ _Pragma ("GCC diagnostic pop")
#else
-static int
-YYID (yyi)
- int yyi;
+# define YY_INITIAL_VALUE(Value) Value
#endif
-{
- return yyi;
-}
+#ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
+# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
+# define YY_IGNORE_MAYBE_UNINITIALIZED_END
+#endif
+#ifndef YY_INITIAL_VALUE
+# define YY_INITIAL_VALUE(Value) /* Nothing. */
#endif
+
#if ! defined yyoverflow || YYERROR_VERBOSE
/* The parser invokes alloca or malloc; define the necessary symbols. */
@@ -687,8 +684,7 @@ YYID (yyi)
# define alloca _alloca
# else
# define YYSTACK_ALLOC alloca
-# if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
- || defined __cplusplus || defined _MSC_VER)
+# if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS
# include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
/* Use EXIT_SUCCESS as a witness for stdlib.h. */
# ifndef EXIT_SUCCESS
@@ -700,8 +696,8 @@ YYID (yyi)
# endif
# ifdef YYSTACK_ALLOC
- /* Pacify GCC's `empty if-body' warning. */
-# define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0))
+ /* Pacify GCC's 'empty if-body' warning. */
+# define YYSTACK_FREE(Ptr) do { /* empty */; } while (0)
# ifndef YYSTACK_ALLOC_MAXIMUM
/* The OS might guarantee only one guard page at the bottom of the stack,
and a page size can be as small as 4096 bytes. So we cannot safely
@@ -717,7 +713,7 @@ YYID (yyi)
# endif
# if (defined __cplusplus && ! defined EXIT_SUCCESS \
&& ! ((defined YYMALLOC || defined malloc) \
- && (defined YYFREE || defined free)))
+ && (defined YYFREE || defined free)))
# include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
# ifndef EXIT_SUCCESS
# define EXIT_SUCCESS 0
@@ -725,15 +721,13 @@ YYID (yyi)
# endif
# ifndef YYMALLOC
# define YYMALLOC malloc
-# if ! defined malloc && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
- || defined __cplusplus || defined _MSC_VER)
+# if ! defined malloc && ! defined EXIT_SUCCESS
void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
# endif
# endif
# ifndef YYFREE
# define YYFREE free
-# if ! defined free && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
- || defined __cplusplus || defined _MSC_VER)
+# if ! defined free && ! defined EXIT_SUCCESS
void free (void *); /* INFRINGES ON USER NAME SPACE */
# endif
# endif
@@ -743,7 +737,7 @@ void free (void *); /* INFRINGES ON USER NAME SPACE */
#if (! defined yyoverflow \
&& (! defined __cplusplus \
- || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
+ || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
/* A type that is properly aligned for any stack member. */
union yyalloc
@@ -768,16 +762,16 @@ union yyalloc
elements in the stack, and YYPTR gives the new location of the
stack. Advance YYPTR to a properly aligned location for the next
stack. */
-# define YYSTACK_RELOCATE(Stack_alloc, Stack) \
- do \
- { \
- YYSIZE_T yynewbytes; \
- YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \
- Stack = &yyptr->Stack_alloc; \
- yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
- yyptr += yynewbytes / sizeof (*yyptr); \
- } \
- while (YYID (0))
+# define YYSTACK_RELOCATE(Stack_alloc, Stack) \
+ do \
+ { \
+ YYSIZE_T yynewbytes; \
+ YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \
+ Stack = &yyptr->Stack_alloc; \
+ yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
+ yyptr += yynewbytes / sizeof (*yyptr); \
+ } \
+ while (0)
#endif
@@ -796,7 +790,7 @@ union yyalloc
for (yyi = 0; yyi < (Count); yyi++) \
(Dst)[yyi] = (Src)[yyi]; \
} \
- while (YYID (0))
+ while (0)
# endif
# endif
#endif /* !YYCOPY_NEEDED */
@@ -812,17 +806,19 @@ union yyalloc
#define YYNNTS 105
/* YYNRULES -- Number of rules. */
#define YYNRULES 313
-/* YYNRULES -- Number of states. */
+/* YYNSTATES -- Number of states. */
#define YYNSTATES 419
-/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */
+/* YYTRANSLATE[YYX] -- Symbol number corresponding to YYX as returned
+ by yylex, with out-of-bounds checking. */
#define YYUNDEFTOK 2
#define YYMAXUTOK 448
-#define YYTRANSLATE(YYX) \
+#define YYTRANSLATE(YYX) \
((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
-/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */
+/* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM
+ as returned by yylex, without out-of-bounds checking. */
static const yytype_uint8 yytranslate[] =
{
0, 2, 2, 2, 2, 2, 2, 2, 2, 2,
@@ -873,127 +869,7 @@ static const yytype_uint8 yytranslate[] =
};
#if YYDEBUG
-/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
- YYRHS. */
-static const yytype_uint16 yyprhs[] =
-{
- 0, 0, 3, 5, 9, 12, 15, 16, 18, 20,
- 22, 24, 26, 28, 30, 32, 34, 36, 38, 40,
- 42, 46, 48, 50, 52, 54, 56, 58, 61, 63,
- 65, 67, 68, 71, 73, 75, 77, 79, 81, 83,
- 85, 87, 89, 91, 93, 95, 98, 101, 103, 105,
- 107, 109, 111, 113, 116, 118, 121, 123, 125, 127,
- 130, 133, 136, 139, 142, 145, 148, 151, 154, 157,
- 160, 163, 164, 167, 170, 173, 175, 177, 179, 181,
- 183, 186, 189, 191, 194, 197, 200, 202, 204, 206,
- 208, 210, 212, 214, 216, 218, 220, 223, 226, 230,
- 233, 235, 237, 239, 241, 243, 245, 247, 249, 251,
- 252, 255, 258, 261, 263, 265, 267, 269, 271, 273,
- 275, 277, 279, 281, 283, 285, 287, 290, 293, 297,
- 303, 307, 312, 317, 321, 322, 325, 327, 329, 331,
- 333, 335, 337, 339, 341, 343, 345, 347, 349, 351,
- 353, 355, 358, 360, 363, 365, 367, 369, 372, 374,
- 377, 379, 381, 383, 385, 387, 389, 391, 393, 397,
- 400, 402, 405, 408, 411, 414, 417, 419, 421, 423,
- 425, 427, 429, 432, 435, 437, 440, 442, 444, 446,
- 449, 452, 455, 457, 459, 461, 463, 465, 467, 469,
- 471, 473, 475, 477, 480, 483, 485, 488, 490, 492,
- 494, 496, 498, 500, 502, 504, 506, 508, 510, 512,
- 515, 518, 521, 524, 528, 530, 533, 536, 539, 542,
- 546, 549, 551, 553, 555, 557, 559, 561, 563, 565,
- 567, 569, 571, 574, 575, 580, 582, 583, 584, 587,
- 590, 593, 596, 598, 600, 604, 608, 610, 612, 614,
- 616, 618, 620, 622, 624, 626, 629, 632, 634, 636,
- 638, 640, 642, 644, 646, 648, 651, 653, 656, 658,
- 660, 662, 668, 671, 673, 676, 678, 680, 682, 684,
- 686, 688, 694, 696, 700, 703, 707, 709, 711, 714,
- 716, 722, 727, 731, 734, 736, 743, 747, 750, 754,
- 756, 758, 760, 762
-};
-
-/* YYRHS -- A `-1'-separated list of the rules' RHS. */
-static const yytype_int16 yyrhs[] =
-{
- 200, 0, -1, 201, -1, 201, 202, 183, -1, 202,
- 183, -1, 1, 183, -1, -1, 203, -1, 216, -1,
- 218, -1, 219, -1, 228, -1, 236, -1, 223, -1,
- 245, -1, 250, -1, 254, -1, 259, -1, 263, -1,
- 290, -1, 204, 205, 208, -1, 146, -1, 131, -1,
- 126, -1, 14, -1, 84, -1, 206, -1, 207, 158,
- -1, 158, -1, 66, -1, 68, -1, -1, 208, 209,
- -1, 210, -1, 212, -1, 214, -1, 211, -1, 9,
- -1, 17, -1, 53, -1, 116, -1, 133, -1, 134,
- -1, 169, -1, 180, -1, 213, 61, -1, 213, 173,
- -1, 70, -1, 100, -1, 92, -1, 171, -1, 102,
- -1, 176, -1, 215, 158, -1, 54, -1, 217, 205,
- -1, 174, -1, 175, -1, 15, -1, 85, 287, -1,
- 107, 287, -1, 93, 61, -1, 10, 61, -1, 22,
- 61, -1, 23, 220, -1, 71, 158, -1, 72, 158,
- -1, 140, 61, -1, 143, 61, -1, 170, 283, -1,
- 122, 158, -1, -1, 220, 221, -1, 222, 158, -1,
- 143, 61, -1, 51, -1, 54, -1, 136, -1, 137,
- -1, 28, -1, 167, 224, -1, 224, 225, -1, 225,
- -1, 226, 61, -1, 227, 289, -1, 21, 288, -1,
- 19, -1, 48, -1, 123, -1, 124, -1, 101, -1,
- 13, -1, 98, -1, 90, -1, 96, -1, 88, -1,
- 150, 229, -1, 152, 158, -1, 41, 230, 231, -1,
- 229, 230, -1, 230, -1, 20, -1, 24, -1, 82,
- -1, 127, -1, 138, -1, 160, -1, 165, -1, 135,
- -1, -1, 231, 232, -1, 40, 158, -1, 172, 235,
- -1, 233, -1, 234, -1, 78, -1, 109, -1, 37,
- -1, 29, -1, 112, -1, 129, -1, 26, -1, 178,
- -1, 105, -1, 181, -1, 4, -1, 30, 239, -1,
- 106, 242, -1, 142, 205, 237, -1, 142, 206, 86,
- 206, 237, -1, 142, 27, 237, -1, 142, 66, 27,
- 237, -1, 142, 68, 27, 237, -1, 142, 148, 237,
- -1, -1, 237, 238, -1, 47, -1, 55, -1, 73,
- -1, 74, -1, 77, -1, 83, -1, 110, -1, 111,
- -1, 114, -1, 115, -1, 117, -1, 118, -1, 119,
- -1, 121, -1, 176, -1, 239, 240, -1, 240, -1,
- 241, 61, -1, 11, -1, 99, -1, 104, -1, 242,
- 243, -1, 243, -1, 244, 61, -1, 56, -1, 57,
- -1, 58, -1, 59, -1, 87, -1, 89, -1, 91,
- -1, 97, -1, 50, 205, 246, -1, 246, 247, -1,
- 247, -1, 248, 289, -1, 249, 288, -1, 157, 61,
- -1, 3, 158, -1, 139, 158, -1, 162, -1, 163,
- -1, 43, -1, 44, -1, 45, -1, 46, -1, 144,
- 251, -1, 251, 252, -1, 252, -1, 253, 61, -1,
- 95, -1, 149, -1, 42, -1, 37, 255, -1, 29,
- 255, -1, 255, 256, -1, 256, -1, 257, -1, 258,
- -1, 8, -1, 12, -1, 18, -1, 69, -1, 104,
- -1, 120, -1, 103, -1, 151, -1, 166, 260, -1,
- 260, 261, -1, 261, -1, 262, 289, -1, 6, -1,
- 31, -1, 49, -1, 52, -1, 125, -1, 153, -1,
- 154, -1, 155, -1, 156, -1, 161, -1, 275, -1,
- 279, -1, 264, 289, -1, 265, 61, -1, 266, 158,
- -1, 267, 158, -1, 60, 158, 202, -1, 38, -1,
- 33, 268, -1, 80, 273, -1, 128, 286, -1, 147,
- 269, -1, 168, 206, 271, -1, 171, 282, -1, 16,
- -1, 113, -1, 161, -1, 35, -1, 76, -1, 54,
- -1, 75, -1, 130, -1, 81, -1, 145, -1, 158,
- -1, 158, 32, -1, -1, 158, 194, 158, 270, -1,
- 27, -1, -1, -1, 271, 272, -1, 132, 61, -1,
- 62, 206, -1, 273, 274, -1, 274, -1, 158, -1,
- 276, 278, 277, -1, 276, 278, 158, -1, 62, -1,
- 108, -1, 5, -1, 65, -1, 67, -1, 179, -1,
- 79, -1, 55, -1, 34, -1, 141, 280, -1, 280,
- 281, -1, 281, -1, 7, -1, 8, -1, 25, -1,
- 64, -1, 94, -1, 159, -1, 164, -1, 282, 61,
- -1, 61, -1, 283, 284, -1, 284, -1, 61, -1,
- 285, -1, 195, 61, 36, 61, 196, -1, 286, 158,
- -1, 158, -1, 287, 205, -1, 205, -1, 61, -1,
- 169, -1, 39, -1, 61, -1, 32, -1, 291, 197,
- 292, 295, 198, -1, 184, -1, 292, 293, 183, -1,
- 293, 183, -1, 294, 194, 289, -1, 185, -1, 186,
- -1, 295, 296, -1, 296, -1, 298, 197, 297, 299,
- 198, -1, 187, 194, 289, 183, -1, 146, 194, 205,
- -1, 299, 300, -1, 300, -1, 188, 194, 289, 197,
- 301, 198, -1, 301, 302, 183, -1, 302, 183, -1,
- 303, 194, 289, -1, 189, -1, 190, -1, 191, -1,
- 192, -1, 193, -1
-};
-
-/* YYRLINE[YYN] -- source line where rule number YYN was defined. */
+ /* YYRLINE[YYN] -- Source line where rule number YYN was defined. */
static const yytype_uint16 yyrline[] =
{
0, 366, 366, 370, 371, 372, 387, 388, 389, 390,
@@ -1019,15 +895,15 @@ static const yytype_uint16 yyrline[] =
1073, 1077, 1078, 1086, 1091, 1096, 1104, 1109, 1110, 1111,
1112, 1113, 1114, 1115, 1116, 1117, 1118, 1127, 1128, 1129,
1136, 1143, 1150, 1166, 1185, 1187, 1189, 1191, 1193, 1195,
- 1202, 1207, 1208, 1209, 1213, 1217, 1226, 1227, 1228, 1232,
- 1233, 1237, 1244, 1254, 1263, 1268, 1270, 1275, 1276, 1284,
- 1286, 1294, 1299, 1307, 1332, 1339, 1349, 1350, 1354, 1355,
- 1356, 1357, 1361, 1362, 1363, 1367, 1372, 1377, 1385, 1386,
- 1387, 1388, 1389, 1390, 1391, 1401, 1406, 1414, 1419, 1427,
- 1429, 1433, 1438, 1443, 1451, 1456, 1464, 1473, 1474, 1478,
- 1479, 1488, 1506, 1510, 1515, 1523, 1528, 1529, 1533, 1538,
- 1546, 1551, 1556, 1561, 1566, 1574, 1579, 1584, 1592, 1597,
- 1598, 1599, 1600, 1601
+ 1202, 1207, 1208, 1209, 1213, 1217, 1226, 1227, 1231, 1232,
+ 1233, 1237, 1248, 1262, 1274, 1279, 1281, 1286, 1287, 1295,
+ 1297, 1305, 1310, 1318, 1343, 1350, 1360, 1361, 1365, 1366,
+ 1367, 1368, 1372, 1373, 1374, 1378, 1383, 1388, 1396, 1397,
+ 1398, 1399, 1400, 1401, 1402, 1412, 1417, 1425, 1430, 1438,
+ 1440, 1444, 1449, 1454, 1462, 1467, 1475, 1484, 1485, 1489,
+ 1490, 1499, 1517, 1521, 1526, 1534, 1539, 1540, 1544, 1549,
+ 1557, 1562, 1567, 1572, 1577, 1585, 1590, 1595, 1603, 1608,
+ 1609, 1610, 1611, 1612
};
#endif
@@ -1105,13 +981,13 @@ static const char *const yytname[] =
"sim_init_statement_list", "sim_init_statement", "sim_init_keyword",
"sim_server_list", "sim_server", "sim_server_offset", "sim_server_name",
"sim_act_list", "sim_act", "sim_act_stmt_list", "sim_act_stmt",
- "sim_act_keyword", YY_NULL
+ "sim_act_keyword", YY_NULLPTR
};
#endif
# ifdef YYPRINT
-/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
- token YYLEX-NUM. */
+/* YYTOKNUM[NUM] -- (External) token number corresponding to the
+ (internal) symbol number NUM (which must be that of a token). */
static const yytype_uint16 yytoknum[] =
{
0, 256, 257, 258, 259, 260, 261, 262, 263, 264,
@@ -1137,148 +1013,18 @@ static const yytype_uint16 yytoknum[] =
};
# endif
-/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
-static const yytype_uint16 yyr1[] =
-{
- 0, 199, 200, 201, 201, 201, 202, 202, 202, 202,
- 202, 202, 202, 202, 202, 202, 202, 202, 202, 202,
- 203, 204, 204, 204, 204, 204, 205, 205, 206, 207,
- 207, 208, 208, 209, 209, 209, 210, 211, 211, 211,
- 211, 211, 211, 211, 211, 212, 212, 213, 213, 213,
- 213, 213, 213, 214, 215, 216, 217, 217, 218, 218,
- 218, 218, 219, 219, 219, 219, 219, 219, 219, 219,
- 219, 220, 220, 221, 221, 222, 222, 222, 222, 222,
- 223, 224, 224, 225, 225, 225, 226, 226, 226, 226,
- 226, 226, 227, 227, 227, 227, 228, 228, 228, 229,
- 229, 230, 230, 230, 230, 230, 230, 230, 230, 231,
- 231, 232, 232, 232, 232, 233, 233, 234, 234, 235,
- 235, 235, 235, 235, 235, 235, 236, 236, 236, 236,
- 236, 236, 236, 236, 237, 237, 238, 238, 238, 238,
- 238, 238, 238, 238, 238, 238, 238, 238, 238, 238,
- 238, 239, 239, 240, 241, 241, 241, 242, 242, 243,
- 244, 244, 244, 244, 244, 244, 244, 244, 245, 246,
- 246, 247, 247, 247, 247, 247, 248, 248, 249, 249,
- 249, 249, 250, 251, 251, 252, 253, 253, 253, 254,
- 254, 255, 255, 256, 256, 257, 257, 257, 257, 257,
- 257, 258, 258, 259, 260, 260, 261, 262, 262, 262,
- 262, 262, 262, 262, 262, 262, 262, 263, 263, 263,
- 263, 263, 263, 263, 263, 263, 263, 263, 263, 263,
- 263, 264, 264, 264, 265, 265, 266, 266, 266, 267,
- 267, 268, 268, 268, 269, 270, 270, 271, 271, 272,
- 272, 273, 273, 274, 275, 275, 276, 276, 277, 277,
- 277, 277, 278, 278, 278, 279, 280, 280, 281, 281,
- 281, 281, 281, 281, 281, 282, 282, 283, 283, 284,
- 284, 285, 286, 286, 287, 287, 288, 288, 288, 289,
- 289, 290, 291, 292, 292, 293, 294, 294, 295, 295,
- 296, 297, 298, 299, 299, 300, 301, 301, 302, 303,
- 303, 303, 303, 303
-};
+#define YYPACT_NINF -185
-/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
-static const yytype_uint8 yyr2[] =
-{
- 0, 2, 1, 3, 2, 2, 0, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 3, 1, 1, 1, 1, 1, 1, 2, 1, 1,
- 1, 0, 2, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 2, 2, 1, 1, 1,
- 1, 1, 1, 2, 1, 2, 1, 1, 1, 2,
- 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
- 2, 0, 2, 2, 2, 1, 1, 1, 1, 1,
- 2, 2, 1, 2, 2, 2, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 2, 2, 3, 2,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 0,
- 2, 2, 2, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 2, 2, 3, 5,
- 3, 4, 4, 3, 0, 2, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 2, 1, 2, 1, 1, 1, 2, 1, 2,
- 1, 1, 1, 1, 1, 1, 1, 1, 3, 2,
- 1, 2, 2, 2, 2, 2, 1, 1, 1, 1,
- 1, 1, 2, 2, 1, 2, 1, 1, 1, 2,
- 2, 2, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 2, 2, 1, 2, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 2,
- 2, 2, 2, 3, 1, 2, 2, 2, 2, 3,
- 2, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 2, 0, 4, 1, 0, 0, 2, 2,
- 2, 2, 1, 1, 3, 3, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 2, 2, 1, 1, 1,
- 1, 1, 1, 1, 1, 2, 1, 2, 1, 1,
- 1, 5, 2, 1, 2, 1, 1, 1, 1, 1,
- 1, 5, 1, 3, 2, 3, 1, 1, 2, 1,
- 5, 4, 3, 2, 1, 6, 3, 2, 3, 1,
- 1, 1, 1, 1
-};
+#define yypact_value_is_default(Yystate) \
+ (!!((Yystate) == (-185)))
-/* YYDEFACT[STATE-NAME] -- Default reduction number in state STATE-NUM.
- Performed when YYTABLE doesn't specify something else to do. Zero
- means the default is an error. */
-static const yytype_uint16 yydefact[] =
-{
- 0, 0, 0, 24, 58, 231, 0, 71, 0, 0,
- 243, 234, 0, 224, 0, 0, 236, 0, 256, 0,
- 0, 237, 235, 0, 239, 25, 0, 0, 0, 0,
- 257, 232, 0, 23, 0, 238, 22, 0, 0, 0,
- 0, 0, 240, 21, 0, 0, 0, 233, 0, 0,
- 0, 0, 0, 56, 57, 292, 0, 2, 0, 7,
- 0, 8, 0, 9, 10, 13, 11, 12, 14, 15,
- 16, 17, 18, 0, 0, 0, 0, 217, 0, 218,
- 19, 0, 5, 62, 63, 64, 195, 196, 197, 198,
- 201, 199, 200, 202, 190, 192, 193, 194, 154, 155,
- 156, 126, 152, 0, 241, 225, 189, 101, 102, 103,
- 104, 108, 105, 106, 107, 109, 29, 30, 28, 0,
- 26, 0, 6, 65, 66, 253, 226, 252, 285, 59,
- 61, 160, 161, 162, 163, 164, 165, 166, 167, 127,
- 158, 0, 60, 70, 283, 227, 67, 268, 269, 270,
- 271, 272, 273, 274, 265, 267, 134, 29, 30, 134,
- 134, 26, 68, 188, 186, 187, 182, 184, 0, 0,
- 228, 96, 100, 97, 207, 208, 209, 210, 211, 212,
- 213, 214, 215, 216, 203, 205, 0, 91, 86, 0,
- 87, 95, 93, 94, 92, 90, 88, 89, 80, 82,
- 0, 0, 247, 279, 0, 69, 278, 280, 276, 230,
- 1, 0, 4, 31, 55, 290, 289, 219, 220, 221,
- 222, 264, 263, 262, 0, 0, 79, 75, 76, 77,
- 78, 0, 72, 0, 191, 151, 153, 242, 98, 0,
- 178, 179, 180, 181, 0, 0, 176, 177, 168, 170,
- 0, 0, 27, 223, 251, 284, 157, 159, 282, 266,
- 130, 134, 134, 133, 128, 0, 183, 185, 0, 99,
- 204, 206, 288, 286, 287, 85, 81, 83, 84, 229,
- 0, 277, 275, 3, 20, 258, 259, 260, 255, 261,
- 254, 296, 297, 0, 0, 0, 74, 73, 118, 117,
- 0, 115, 116, 0, 110, 113, 114, 174, 175, 173,
- 169, 171, 172, 136, 137, 138, 139, 140, 141, 142,
- 143, 144, 145, 146, 147, 148, 149, 150, 135, 131,
- 132, 134, 246, 0, 0, 248, 0, 37, 38, 39,
- 54, 47, 49, 48, 51, 40, 41, 42, 43, 50,
- 52, 44, 32, 33, 36, 34, 0, 35, 0, 0,
- 0, 0, 299, 0, 294, 0, 111, 125, 121, 123,
- 119, 120, 122, 124, 112, 129, 245, 244, 250, 249,
- 0, 45, 46, 53, 0, 293, 291, 298, 0, 295,
- 281, 302, 0, 0, 0, 0, 0, 304, 0, 0,
- 300, 303, 301, 0, 0, 309, 310, 311, 312, 313,
- 0, 0, 0, 305, 0, 307, 0, 306, 308
-};
+#define YYTABLE_NINF -7
-/* YYDEFGOTO[NTERM-NUM]. */
-static const yytype_int16 yydefgoto[] =
-{
- -1, 56, 57, 58, 59, 60, 128, 120, 121, 284,
- 352, 353, 354, 355, 356, 357, 358, 61, 62, 63,
- 64, 85, 232, 233, 65, 198, 199, 200, 201, 66,
- 171, 115, 238, 304, 305, 306, 374, 67, 260, 328,
- 101, 102, 103, 139, 140, 141, 68, 248, 249, 250,
- 251, 69, 166, 167, 168, 70, 94, 95, 96, 97,
- 71, 184, 185, 186, 72, 73, 74, 75, 76, 105,
- 170, 377, 279, 335, 126, 127, 77, 78, 290, 224,
- 79, 154, 155, 209, 205, 206, 207, 145, 129, 275,
- 217, 80, 81, 293, 294, 295, 361, 362, 393, 363,
- 396, 397, 410, 411, 412
-};
+#define yytable_value_is_error(Yytable_value) \
+ 0
-/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
- STATE-NUM. */
-#define YYPACT_NINF -185
+ /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
+ STATE-NUM. */
static const yytype_int16 yypact[] =
{
78, -169, -34, -185, -185, -185, -29, -185, 17, 43,
@@ -1325,7 +1071,56 @@ static const yytype_int16 yypact[] =
98, 57, 47, -185, 60, -185, -12, -185, -185
};
-/* YYPGOTO[NTERM-NUM]. */
+ /* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
+ Performed when YYTABLE does not specify something else to do. Zero
+ means the default is an error. */
+static const yytype_uint16 yydefact[] =
+{
+ 0, 0, 0, 24, 58, 231, 0, 71, 0, 0,
+ 243, 234, 0, 224, 0, 0, 236, 0, 256, 0,
+ 0, 237, 235, 0, 238, 25, 0, 0, 0, 0,
+ 257, 232, 0, 23, 0, 239, 22, 0, 0, 0,
+ 0, 0, 240, 21, 0, 0, 0, 233, 0, 0,
+ 0, 0, 0, 56, 57, 292, 0, 2, 0, 7,
+ 0, 8, 0, 9, 10, 13, 11, 12, 14, 15,
+ 16, 17, 18, 0, 0, 0, 0, 217, 0, 218,
+ 19, 0, 5, 62, 63, 64, 195, 196, 197, 198,
+ 201, 199, 200, 202, 190, 192, 193, 194, 154, 155,
+ 156, 126, 152, 0, 241, 225, 189, 101, 102, 103,
+ 104, 108, 105, 106, 107, 109, 29, 30, 28, 0,
+ 26, 0, 6, 65, 66, 253, 226, 252, 285, 59,
+ 61, 160, 161, 162, 163, 164, 165, 166, 167, 127,
+ 158, 0, 60, 70, 283, 227, 67, 268, 269, 270,
+ 271, 272, 273, 274, 265, 267, 134, 29, 30, 134,
+ 134, 26, 68, 188, 186, 187, 182, 184, 0, 0,
+ 228, 96, 100, 97, 207, 208, 209, 210, 211, 212,
+ 213, 214, 215, 216, 203, 205, 0, 91, 86, 0,
+ 87, 95, 93, 94, 92, 90, 88, 89, 80, 82,
+ 0, 0, 247, 279, 0, 69, 278, 280, 276, 230,
+ 1, 0, 4, 31, 55, 290, 289, 219, 220, 221,
+ 222, 264, 263, 262, 0, 0, 79, 75, 76, 77,
+ 78, 0, 72, 0, 191, 151, 153, 242, 98, 0,
+ 178, 179, 180, 181, 0, 0, 176, 177, 168, 170,
+ 0, 0, 27, 223, 251, 284, 157, 159, 282, 266,
+ 130, 134, 134, 133, 128, 0, 183, 185, 0, 99,
+ 204, 206, 288, 286, 287, 85, 81, 83, 84, 229,
+ 0, 277, 275, 3, 20, 258, 259, 260, 255, 261,
+ 254, 296, 297, 0, 0, 0, 74, 73, 118, 117,
+ 0, 115, 116, 0, 110, 113, 114, 174, 175, 173,
+ 169, 171, 172, 136, 137, 138, 139, 140, 141, 142,
+ 143, 144, 145, 146, 147, 148, 149, 150, 135, 131,
+ 132, 134, 246, 0, 0, 248, 0, 37, 38, 39,
+ 54, 47, 49, 48, 51, 40, 41, 42, 43, 50,
+ 52, 44, 32, 33, 36, 34, 0, 35, 0, 0,
+ 0, 0, 299, 0, 294, 0, 111, 125, 121, 123,
+ 119, 120, 122, 124, 112, 129, 245, 244, 250, 249,
+ 0, 45, 46, 53, 0, 293, 291, 298, 0, 295,
+ 281, 302, 0, 0, 0, 0, 0, 304, 0, 0,
+ 300, 303, 301, 0, 0, 309, 310, 311, 312, 313,
+ 0, 0, 0, 305, 0, 307, 0, 306, 308
+};
+
+ /* YYPGOTO[NTERM-NUM]. */
static const yytype_int16 yypgoto[] =
{
-185, -185, -185, -44, -185, -185, -15, -38, -185, -185,
@@ -1341,10 +1136,25 @@ static const yytype_int16 yypgoto[] =
-185, -113, -185, -126, -185
};
-/* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If
- positive, shift that token. If negative, reduce the rule which
- number is the opposite. If YYTABLE_NINF, syntax error. */
-#define YYTABLE_NINF -7
+ /* YYDEFGOTO[NTERM-NUM]. */
+static const yytype_int16 yydefgoto[] =
+{
+ -1, 56, 57, 58, 59, 60, 128, 120, 121, 284,
+ 352, 353, 354, 355, 356, 357, 358, 61, 62, 63,
+ 64, 85, 232, 233, 65, 198, 199, 200, 201, 66,
+ 171, 115, 238, 304, 305, 306, 374, 67, 260, 328,
+ 101, 102, 103, 139, 140, 141, 68, 248, 249, 250,
+ 251, 69, 166, 167, 168, 70, 94, 95, 96, 97,
+ 71, 184, 185, 186, 72, 73, 74, 75, 76, 105,
+ 170, 377, 279, 335, 126, 127, 77, 78, 290, 224,
+ 79, 154, 155, 209, 205, 206, 207, 145, 129, 275,
+ 217, 80, 81, 293, 294, 295, 361, 362, 393, 363,
+ 396, 397, 410, 411, 412
+};
+
+ /* YYTABLE[YYPACT[STATE-NUM]] -- What to do in state STATE-NUM. If
+ positive, shift that token. If negative, reduce the rule whose
+ number is the opposite. If YYTABLE_NINF, syntax error. */
static const yytype_int16 yytable[] =
{
119, 161, 271, 285, 272, 203, 381, 263, 264, 172,
@@ -1414,12 +1224,6 @@ static const yytype_int16 yytable[] =
350, 0, 0, 0, 351, 0, 196, 197
};
-#define yypact_value_is_default(Yystate) \
- (!!((Yystate) == (-185)))
-
-#define yytable_value_is_error(Yytable_value) \
- YYID (0)
-
static const yytype_int16 yycheck[] =
{
15, 39, 186, 5, 39, 61, 61, 159, 160, 45,
@@ -1489,8 +1293,8 @@ static const yytype_int16 yycheck[] =
176, -1, -1, -1, 180, -1, 123, 124
};
-/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
- symbol of state STATE-NUM. */
+ /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
+ symbol of state STATE-NUM. */
static const yytype_uint16 yystos[] =
{
0, 1, 10, 14, 15, 16, 22, 23, 29, 30,
@@ -1537,30 +1341,90 @@ static const yytype_uint16 yystos[] =
301, 302, 303, 198, 302, 183, 194, 183, 289
};
-#define yyerrok (yyerrstatus = 0)
-#define yyclearin (yychar = YYEMPTY)
-#define YYEMPTY (-2)
-#define YYEOF 0
-
-#define YYACCEPT goto yyacceptlab
-#define YYABORT goto yyabortlab
-#define YYERROR goto yyerrorlab
-
-
-/* Like YYERROR except do call yyerror. This remains here temporarily
- to ease the transition to the new meaning of YYERROR, for GCC.
- Once GCC version 2 has supplanted version 1, this can go. However,
- YYFAIL appears to be in use. Nevertheless, it is formally deprecated
- in Bison 2.4.2's NEWS entry, where a plan to phase it out is
- discussed. */
-
-#define YYFAIL goto yyerrlab
-#if defined YYFAIL
- /* This is here to suppress warnings from the GCC cpp's
- -Wunused-macros. Normally we don't worry about that warning, but
- some users do, and we want to make it easy for users to remove
- YYFAIL uses, which will produce warnings from Bison 2.5. */
-#endif
+ /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
+static const yytype_uint16 yyr1[] =
+{
+ 0, 199, 200, 201, 201, 201, 202, 202, 202, 202,
+ 202, 202, 202, 202, 202, 202, 202, 202, 202, 202,
+ 203, 204, 204, 204, 204, 204, 205, 205, 206, 207,
+ 207, 208, 208, 209, 209, 209, 210, 211, 211, 211,
+ 211, 211, 211, 211, 211, 212, 212, 213, 213, 213,
+ 213, 213, 213, 214, 215, 216, 217, 217, 218, 218,
+ 218, 218, 219, 219, 219, 219, 219, 219, 219, 219,
+ 219, 220, 220, 221, 221, 222, 222, 222, 222, 222,
+ 223, 224, 224, 225, 225, 225, 226, 226, 226, 226,
+ 226, 226, 227, 227, 227, 227, 228, 228, 228, 229,
+ 229, 230, 230, 230, 230, 230, 230, 230, 230, 231,
+ 231, 232, 232, 232, 232, 233, 233, 234, 234, 235,
+ 235, 235, 235, 235, 235, 235, 236, 236, 236, 236,
+ 236, 236, 236, 236, 237, 237, 238, 238, 238, 238,
+ 238, 238, 238, 238, 238, 238, 238, 238, 238, 238,
+ 238, 239, 239, 240, 241, 241, 241, 242, 242, 243,
+ 244, 244, 244, 244, 244, 244, 244, 244, 245, 246,
+ 246, 247, 247, 247, 247, 247, 248, 248, 249, 249,
+ 249, 249, 250, 251, 251, 252, 253, 253, 253, 254,
+ 254, 255, 255, 256, 256, 257, 257, 257, 257, 257,
+ 257, 258, 258, 259, 260, 260, 261, 262, 262, 262,
+ 262, 262, 262, 262, 262, 262, 262, 263, 263, 263,
+ 263, 263, 263, 263, 263, 263, 263, 263, 263, 263,
+ 263, 264, 264, 264, 265, 265, 266, 266, 267, 267,
+ 267, 268, 268, 268, 269, 270, 270, 271, 271, 272,
+ 272, 273, 273, 274, 275, 275, 276, 276, 277, 277,
+ 277, 277, 278, 278, 278, 279, 280, 280, 281, 281,
+ 281, 281, 281, 281, 281, 282, 282, 283, 283, 284,
+ 284, 285, 286, 286, 287, 287, 288, 288, 288, 289,
+ 289, 290, 291, 292, 292, 293, 294, 294, 295, 295,
+ 296, 297, 298, 299, 299, 300, 301, 301, 302, 303,
+ 303, 303, 303, 303
+};
+
+ /* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */
+static const yytype_uint8 yyr2[] =
+{
+ 0, 2, 1, 3, 2, 2, 0, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 3, 1, 1, 1, 1, 1, 1, 2, 1, 1,
+ 1, 0, 2, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 2, 2, 1, 1, 1,
+ 1, 1, 1, 2, 1, 2, 1, 1, 1, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 0, 2, 2, 2, 1, 1, 1, 1, 1,
+ 2, 2, 1, 2, 2, 2, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 2, 2, 3, 2,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 0,
+ 2, 2, 2, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 2, 2, 3, 5,
+ 3, 4, 4, 3, 0, 2, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 2, 1, 2, 1, 1, 1, 2, 1, 2,
+ 1, 1, 1, 1, 1, 1, 1, 1, 3, 2,
+ 1, 2, 2, 2, 2, 2, 1, 1, 1, 1,
+ 1, 1, 2, 2, 1, 2, 1, 1, 1, 2,
+ 2, 2, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 2, 2, 1, 2, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 2,
+ 2, 2, 2, 3, 1, 2, 2, 2, 2, 3,
+ 2, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 2, 0, 4, 1, 0, 0, 2, 2,
+ 2, 2, 1, 1, 3, 3, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 2, 2, 1, 1, 1,
+ 1, 1, 1, 1, 1, 2, 1, 2, 1, 1,
+ 1, 5, 2, 1, 2, 1, 1, 1, 1, 1,
+ 1, 5, 1, 3, 2, 3, 1, 1, 2, 1,
+ 5, 4, 3, 2, 1, 6, 3, 2, 3, 1,
+ 1, 1, 1, 1
+};
+
+
+#define yyerrok (yyerrstatus = 0)
+#define yyclearin (yychar = YYEMPTY)
+#define YYEMPTY (-2)
+#define YYEOF 0
+
+#define YYACCEPT goto yyacceptlab
+#define YYABORT goto yyabortlab
+#define YYERROR goto yyerrorlab
+
#define YYRECOVERING() (!!yyerrstatus)
@@ -1577,27 +1441,15 @@ do \
else \
{ \
yyerror (YY_("syntax error: cannot back up")); \
- YYERROR; \
- } \
-while (YYID (0))
+ YYERROR; \
+ } \
+while (0)
/* Error token number */
-#define YYTERROR 1
-#define YYERRCODE 256
-
-
-/* This macro is provided for backward compatibility. */
-#ifndef YY_LOCATION_PRINT
-# define YY_LOCATION_PRINT(File, Loc) ((void) 0)
-#endif
+#define YYTERROR 1
+#define YYERRCODE 256
-/* YYLEX -- calling `yylex' with the right arguments. */
-#ifdef YYLEX_PARAM
-# define YYLEX yylex (YYLEX_PARAM)
-#else
-# define YYLEX yylex ()
-#endif
/* Enable debugging if requested. */
#if YYDEBUG
@@ -1607,40 +1459,36 @@ while (YYID (0))
# define YYFPRINTF fprintf
# endif
-# define YYDPRINTF(Args) \
-do { \
- if (yydebug) \
- YYFPRINTF Args; \
-} while (YYID (0))
+# define YYDPRINTF(Args) \
+do { \
+ if (yydebug) \
+ YYFPRINTF Args; \
+} while (0)
-# define YY_SYMBOL_PRINT(Title, Type, Value, Location) \
-do { \
- if (yydebug) \
- { \
- YYFPRINTF (stderr, "%s ", Title); \
- yy_symbol_print (stderr, \
- Type, Value); \
- YYFPRINTF (stderr, "\n"); \
- } \
-} while (YYID (0))
+/* This macro is provided for backward compatibility. */
+#ifndef YY_LOCATION_PRINT
+# define YY_LOCATION_PRINT(File, Loc) ((void) 0)
+#endif
-/*--------------------------------.
-| Print this symbol on YYOUTPUT. |
-`--------------------------------*/
+# define YY_SYMBOL_PRINT(Title, Type, Value, Location) \
+do { \
+ if (yydebug) \
+ { \
+ YYFPRINTF (stderr, "%s ", Title); \
+ yy_symbol_print (stderr, \
+ Type, Value); \
+ YYFPRINTF (stderr, "\n"); \
+ } \
+} while (0)
+
+
+/*----------------------------------------.
+| Print this symbol's value on YYOUTPUT. |
+`----------------------------------------*/
-/*ARGSUSED*/
-#if (defined __STDC__ || defined __C99__FUNC__ \
- || defined __cplusplus || defined _MSC_VER)
static void
yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
-#else
-static void
-yy_symbol_value_print (yyoutput, yytype, yyvaluep)
- FILE *yyoutput;
- int yytype;
- YYSTYPE const * const yyvaluep;
-#endif
{
FILE *yyo = yyoutput;
YYUSE (yyo);
@@ -1649,8 +1497,6 @@ yy_symbol_value_print (yyoutput, yytype, yyvaluep)
# ifdef YYPRINT
if (yytype < YYNTOKENS)
YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
-# else
- YYUSE (yyoutput);
# endif
YYUSE (yytype);
}
@@ -1660,22 +1506,11 @@ yy_symbol_value_print (yyoutput, yytype, yyvaluep)
| Print this symbol on YYOUTPUT. |
`--------------------------------*/
-#if (defined __STDC__ || defined __C99__FUNC__ \
- || defined __cplusplus || defined _MSC_VER)
static void
yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
-#else
-static void
-yy_symbol_print (yyoutput, yytype, yyvaluep)
- FILE *yyoutput;
- int yytype;
- YYSTYPE const * const yyvaluep;
-#endif
{
- if (yytype < YYNTOKENS)
- YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
- else
- YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
+ YYFPRINTF (yyoutput, "%s %s (",
+ yytype < YYNTOKENS ? "token" : "nterm", yytname[yytype]);
yy_symbol_value_print (yyoutput, yytype, yyvaluep);
YYFPRINTF (yyoutput, ")");
@@ -1686,16 +1521,8 @@ yy_symbol_print (yyoutput, yytype, yyvaluep)
| TOP (included). |
`------------------------------------------------------------------*/
-#if (defined __STDC__ || defined __C99__FUNC__ \
- || defined __cplusplus || defined _MSC_VER)
static void
yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop)
-#else
-static void
-yy_stack_print (yybottom, yytop)
- yytype_int16 *yybottom;
- yytype_int16 *yytop;
-#endif
{
YYFPRINTF (stderr, "Stack now");
for (; yybottom <= yytop; yybottom++)
@@ -1706,49 +1533,42 @@ yy_stack_print (yybottom, yytop)
YYFPRINTF (stderr, "\n");
}
-# define YY_STACK_PRINT(Bottom, Top) \
-do { \
- if (yydebug) \
- yy_stack_print ((Bottom), (Top)); \
-} while (YYID (0))
+# define YY_STACK_PRINT(Bottom, Top) \
+do { \
+ if (yydebug) \
+ yy_stack_print ((Bottom), (Top)); \
+} while (0)
/*------------------------------------------------.
| Report that the YYRULE is going to be reduced. |
`------------------------------------------------*/
-#if (defined __STDC__ || defined __C99__FUNC__ \
- || defined __cplusplus || defined _MSC_VER)
static void
-yy_reduce_print (YYSTYPE *yyvsp, int yyrule)
-#else
-static void
-yy_reduce_print (yyvsp, yyrule)
- YYSTYPE *yyvsp;
- int yyrule;
-#endif
+yy_reduce_print (yytype_int16 *yyssp, YYSTYPE *yyvsp, int yyrule)
{
+ unsigned long int yylno = yyrline[yyrule];
int yynrhs = yyr2[yyrule];
int yyi;
- unsigned long int yylno = yyrline[yyrule];
YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n",
- yyrule - 1, yylno);
+ yyrule - 1, yylno);
/* The symbols being reduced. */
for (yyi = 0; yyi < yynrhs; yyi++)
{
YYFPRINTF (stderr, " $%d = ", yyi + 1);
- yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi],
- &(yyvsp[(yyi + 1) - (yynrhs)])
- );
+ yy_symbol_print (stderr,
+ yystos[yyssp[yyi + 1 - yynrhs]],
+ &(yyvsp[(yyi + 1) - (yynrhs)])
+ );
YYFPRINTF (stderr, "\n");
}
}
-# define YY_REDUCE_PRINT(Rule) \
-do { \
- if (yydebug) \
- yy_reduce_print (yyvsp, Rule); \
-} while (YYID (0))
+# define YY_REDUCE_PRINT(Rule) \
+do { \
+ if (yydebug) \
+ yy_reduce_print (yyssp, yyvsp, Rule); \
+} while (0)
/* Nonzero means print parse trace. It is left uninitialized so that
multiple parsers can coexist. */
@@ -1762,7 +1582,7 @@ int yydebug;
/* YYINITDEPTH -- initial size of the parser's stacks. */
-#ifndef YYINITDEPTH
+#ifndef YYINITDEPTH
# define YYINITDEPTH 200
#endif
@@ -1785,15 +1605,8 @@ int yydebug;
# define yystrlen strlen
# else
/* Return the length of YYSTR. */
-#if (defined __STDC__ || defined __C99__FUNC__ \
- || defined __cplusplus || defined _MSC_VER)
static YYSIZE_T
yystrlen (const char *yystr)
-#else
-static YYSIZE_T
-yystrlen (yystr)
- const char *yystr;
-#endif
{
YYSIZE_T yylen;
for (yylen = 0; yystr[yylen]; yylen++)
@@ -1809,16 +1622,8 @@ yystrlen (yystr)
# else
/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
YYDEST. */
-#if (defined __STDC__ || defined __C99__FUNC__ \
- || defined __cplusplus || defined _MSC_VER)
static char *
yystpcpy (char *yydest, const char *yysrc)
-#else
-static char *
-yystpcpy (yydest, yysrc)
- char *yydest;
- const char *yysrc;
-#endif
{
char *yyd = yydest;
const char *yys = yysrc;
@@ -1848,27 +1653,27 @@ yytnamerr (char *yyres, const char *yystr)
char const *yyp = yystr;
for (;;)
- switch (*++yyp)
- {
- case '\'':
- case ',':
- goto do_not_strip_quotes;
-
- case '\\':
- if (*++yyp != '\\')
- goto do_not_strip_quotes;
- /* Fall through. */
- default:
- if (yyres)
- yyres[yyn] = *yyp;
- yyn++;
- break;
-
- case '"':
- if (yyres)
- yyres[yyn] = '\0';
- return yyn;
- }
+ switch (*++yyp)
+ {
+ case '\'':
+ case ',':
+ goto do_not_strip_quotes;
+
+ case '\\':
+ if (*++yyp != '\\')
+ goto do_not_strip_quotes;
+ /* Fall through. */
+ default:
+ if (yyres)
+ yyres[yyn] = *yyp;
+ yyn++;
+ break;
+
+ case '"':
+ if (yyres)
+ yyres[yyn] = '\0';
+ return yyn;
+ }
do_not_strip_quotes: ;
}
@@ -1891,11 +1696,11 @@ static int
yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg,
yytype_int16 *yyssp, int yytoken)
{
- YYSIZE_T yysize0 = yytnamerr (YY_NULL, yytname[yytoken]);
+ YYSIZE_T yysize0 = yytnamerr (YY_NULLPTR, yytname[yytoken]);
YYSIZE_T yysize = yysize0;
enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
/* Internationalized format string. */
- const char *yyformat = YY_NULL;
+ const char *yyformat = YY_NULLPTR;
/* Arguments of yyformat. */
char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
/* Number of reported tokens (one for the "unexpected", one per
@@ -1903,10 +1708,6 @@ yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg,
int yycount = 0;
/* There are many possibilities here to consider:
- - Assume YYFAIL is not used. It's too flawed to consider. See
- <http://lists.gnu.org/archive/html/bison-patches/2009-12/msg00024.html>
- for details. YYERROR is fine as it does not invoke this
- function.
- If this state is a consistent state with a default action, then
the only way this function was invoked is if the default action
is an error action. In that case, don't check for expected
@@ -1956,7 +1757,7 @@ yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg,
}
yyarg[yycount++] = yytname[yyx];
{
- YYSIZE_T yysize1 = yysize + yytnamerr (YY_NULL, yytname[yyx]);
+ YYSIZE_T yysize1 = yysize + yytnamerr (YY_NULLPTR, yytname[yyx]);
if (! (yysize <= yysize1
&& yysize1 <= YYSTACK_ALLOC_MAXIMUM))
return 2;
@@ -2023,26 +1824,17 @@ yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg,
| Release the memory associated to this symbol. |
`-----------------------------------------------*/
-/*ARGSUSED*/
-#if (defined __STDC__ || defined __C99__FUNC__ \
- || defined __cplusplus || defined _MSC_VER)
static void
yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep)
-#else
-static void
-yydestruct (yymsg, yytype, yyvaluep)
- const char *yymsg;
- int yytype;
- YYSTYPE *yyvaluep;
-#endif
{
YYUSE (yyvaluep);
-
if (!yymsg)
yymsg = "Deleting";
YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
+ YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
YYUSE (yytype);
+ YY_IGNORE_MAYBE_UNINITIALIZED_END
}
@@ -2051,18 +1843,8 @@ yydestruct (yymsg, yytype, yyvaluep)
/* The lookahead symbol. */
int yychar;
-
-#ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
-# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
-# define YY_IGNORE_MAYBE_UNINITIALIZED_END
-#endif
-#ifndef YY_INITIAL_VALUE
-# define YY_INITIAL_VALUE(Value) /* Nothing. */
-#endif
-
/* The semantic value of the lookahead symbol. */
-YYSTYPE yylval YY_INITIAL_VALUE(yyval_default);
-
+YYSTYPE yylval;
/* Number of syntax errors so far. */
int yynerrs;
@@ -2071,35 +1853,16 @@ int yynerrs;
| yyparse. |
`----------*/
-#ifdef YYPARSE_PARAM
-#if (defined __STDC__ || defined __C99__FUNC__ \
- || defined __cplusplus || defined _MSC_VER)
-int
-yyparse (void *YYPARSE_PARAM)
-#else
-int
-yyparse (YYPARSE_PARAM)
- void *YYPARSE_PARAM;
-#endif
-#else /* ! YYPARSE_PARAM */
-#if (defined __STDC__ || defined __C99__FUNC__ \
- || defined __cplusplus || defined _MSC_VER)
int
yyparse (void)
-#else
-int
-yyparse ()
-
-#endif
-#endif
{
int yystate;
/* Number of tokens to shift before error messages enabled. */
int yyerrstatus;
/* The stacks and their tools:
- `yyss': related to states.
- `yyvs': related to semantic values.
+ 'yyss': related to states.
+ 'yyvs': related to semantic values.
Refer to the stacks through separate pointers, to allow yyoverflow
to reallocate them elsewhere. */
@@ -2167,23 +1930,23 @@ yyparse ()
#ifdef yyoverflow
{
- /* Give user a chance to reallocate the stack. Use copies of
- these so that the &'s don't force the real ones into
- memory. */
- YYSTYPE *yyvs1 = yyvs;
- yytype_int16 *yyss1 = yyss;
-
- /* Each stack pointer address is followed by the size of the
- data in use in that stack, in bytes. This used to be a
- conditional around just the two extra args, but that might
- be undefined if yyoverflow is a macro. */
- yyoverflow (YY_("memory exhausted"),
- &yyss1, yysize * sizeof (*yyssp),
- &yyvs1, yysize * sizeof (*yyvsp),
- &yystacksize);
-
- yyss = yyss1;
- yyvs = yyvs1;
+ /* Give user a chance to reallocate the stack. Use copies of
+ these so that the &'s don't force the real ones into
+ memory. */
+ YYSTYPE *yyvs1 = yyvs;
+ yytype_int16 *yyss1 = yyss;
+
+ /* Each stack pointer address is followed by the size of the
+ data in use in that stack, in bytes. This used to be a
+ conditional around just the two extra args, but that might
+ be undefined if yyoverflow is a macro. */
+ yyoverflow (YY_("memory exhausted"),
+ &yyss1, yysize * sizeof (*yyssp),
+ &yyvs1, yysize * sizeof (*yyvsp),
+ &yystacksize);
+
+ yyss = yyss1;
+ yyvs = yyvs1;
}
#else /* no yyoverflow */
# ifndef YYSTACK_RELOCATE
@@ -2191,22 +1954,22 @@ yyparse ()
# else
/* Extend the stack our own way. */
if (YYMAXDEPTH <= yystacksize)
- goto yyexhaustedlab;
+ goto yyexhaustedlab;
yystacksize *= 2;
if (YYMAXDEPTH < yystacksize)
- yystacksize = YYMAXDEPTH;
+ yystacksize = YYMAXDEPTH;
{
- yytype_int16 *yyss1 = yyss;
- union yyalloc *yyptr =
- (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
- if (! yyptr)
- goto yyexhaustedlab;
- YYSTACK_RELOCATE (yyss_alloc, yyss);
- YYSTACK_RELOCATE (yyvs_alloc, yyvs);
+ yytype_int16 *yyss1 = yyss;
+ union yyalloc *yyptr =
+ (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
+ if (! yyptr)
+ goto yyexhaustedlab;
+ YYSTACK_RELOCATE (yyss_alloc, yyss);
+ YYSTACK_RELOCATE (yyvs_alloc, yyvs);
# undef YYSTACK_RELOCATE
- if (yyss1 != yyssa)
- YYSTACK_FREE (yyss1);
+ if (yyss1 != yyssa)
+ YYSTACK_FREE (yyss1);
}
# endif
#endif /* no yyoverflow */
@@ -2215,10 +1978,10 @@ yyparse ()
yyvsp = yyvs + yysize - 1;
YYDPRINTF ((stderr, "Stack size increased to %lu\n",
- (unsigned long int) yystacksize));
+ (unsigned long int) yystacksize));
if (yyss + yystacksize - 1 <= yyssp)
- YYABORT;
+ YYABORT;
}
YYDPRINTF ((stderr, "Entering state %d\n", yystate));
@@ -2247,7 +2010,7 @@ yybackup:
if (yychar == YYEMPTY)
{
YYDPRINTF ((stderr, "Reading a token: "));
- yychar = YYLEX;
+ yychar = yylex ();
}
if (yychar <= YYEOF)
@@ -2312,7 +2075,7 @@ yyreduce:
yylen = yyr2[yyn];
/* If YYLEN is nonzero, implement the default value of the action:
- `$$ = $1'.
+ '$$ = $1'.
Otherwise, the following line sets YYVAL to garbage.
This behavior is undocumented and Bison
@@ -2326,8 +2089,7 @@ yyreduce:
switch (yyn)
{
case 5:
-/* Line 1787 of yacc.c */
-#line 373 "../../ntpd/ntp_parser.y"
+#line 373 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
/* I will need to incorporate much more fine grained
* error messages. The following should suffice for
@@ -2340,433 +2102,433 @@ yyreduce:
ip_ctx->errpos.nline,
ip_ctx->errpos.ncol);
}
+#line 2106 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 20:
-/* Line 1787 of yacc.c */
-#line 409 "../../ntpd/ntp_parser.y"
+#line 409 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
peer_node *my_node;
- my_node = create_peer_node((yyvsp[(1) - (3)].Integer), (yyvsp[(2) - (3)].Address_node), (yyvsp[(3) - (3)].Attr_val_fifo));
+ my_node = create_peer_node((yyvsp[-2].Integer), (yyvsp[-1].Address_node), (yyvsp[0].Attr_val_fifo));
APPEND_G_FIFO(cfgt.peers, my_node);
}
+#line 2117 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 27:
-/* Line 1787 of yacc.c */
-#line 428 "../../ntpd/ntp_parser.y"
- { (yyval.Address_node) = create_address_node((yyvsp[(2) - (2)].String), (yyvsp[(1) - (2)].Integer)); }
+#line 428 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ { (yyval.Address_node) = create_address_node((yyvsp[0].String), (yyvsp[-1].Integer)); }
+#line 2123 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 28:
-/* Line 1787 of yacc.c */
-#line 433 "../../ntpd/ntp_parser.y"
- { (yyval.Address_node) = create_address_node((yyvsp[(1) - (1)].String), AF_UNSPEC); }
+#line 433 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ { (yyval.Address_node) = create_address_node((yyvsp[0].String), AF_UNSPEC); }
+#line 2129 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 29:
-/* Line 1787 of yacc.c */
-#line 438 "../../ntpd/ntp_parser.y"
+#line 438 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{ (yyval.Integer) = AF_INET; }
+#line 2135 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 30:
-/* Line 1787 of yacc.c */
-#line 440 "../../ntpd/ntp_parser.y"
+#line 440 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{ (yyval.Integer) = AF_INET6; }
+#line 2141 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 31:
-/* Line 1787 of yacc.c */
-#line 445 "../../ntpd/ntp_parser.y"
+#line 445 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{ (yyval.Attr_val_fifo) = NULL; }
+#line 2147 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 32:
-/* Line 1787 of yacc.c */
-#line 447 "../../ntpd/ntp_parser.y"
+#line 447 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
- (yyval.Attr_val_fifo) = (yyvsp[(1) - (2)].Attr_val_fifo);
- APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[(2) - (2)].Attr_val));
+ (yyval.Attr_val_fifo) = (yyvsp[-1].Attr_val_fifo);
+ APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[0].Attr_val));
}
+#line 2156 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 36:
-/* Line 1787 of yacc.c */
-#line 461 "../../ntpd/ntp_parser.y"
- { (yyval.Attr_val) = create_attr_ival(T_Flag, (yyvsp[(1) - (1)].Integer)); }
+#line 461 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ { (yyval.Attr_val) = create_attr_ival(T_Flag, (yyvsp[0].Integer)); }
+#line 2162 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 45:
-/* Line 1787 of yacc.c */
-#line 477 "../../ntpd/ntp_parser.y"
- { (yyval.Attr_val) = create_attr_ival((yyvsp[(1) - (2)].Integer), (yyvsp[(2) - (2)].Integer)); }
+#line 477 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ { (yyval.Attr_val) = create_attr_ival((yyvsp[-1].Integer), (yyvsp[0].Integer)); }
+#line 2168 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 46:
-/* Line 1787 of yacc.c */
-#line 479 "../../ntpd/ntp_parser.y"
- { (yyval.Attr_val) = create_attr_uval((yyvsp[(1) - (2)].Integer), (yyvsp[(2) - (2)].Integer)); }
+#line 479 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ { (yyval.Attr_val) = create_attr_uval((yyvsp[-1].Integer), (yyvsp[0].Integer)); }
+#line 2174 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 53:
-/* Line 1787 of yacc.c */
-#line 493 "../../ntpd/ntp_parser.y"
- { (yyval.Attr_val) = create_attr_sval((yyvsp[(1) - (2)].Integer), (yyvsp[(2) - (2)].String)); }
+#line 493 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ { (yyval.Attr_val) = create_attr_sval((yyvsp[-1].Integer), (yyvsp[0].String)); }
+#line 2180 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 55:
-/* Line 1787 of yacc.c */
-#line 507 "../../ntpd/ntp_parser.y"
+#line 507 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
unpeer_node *my_node;
- my_node = create_unpeer_node((yyvsp[(2) - (2)].Address_node));
+ my_node = create_unpeer_node((yyvsp[0].Address_node));
if (my_node)
APPEND_G_FIFO(cfgt.unpeers, my_node);
}
+#line 2192 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 58:
-/* Line 1787 of yacc.c */
-#line 528 "../../ntpd/ntp_parser.y"
+#line 528 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{ cfgt.broadcastclient = 1; }
+#line 2198 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 59:
-/* Line 1787 of yacc.c */
-#line 530 "../../ntpd/ntp_parser.y"
- { CONCAT_G_FIFOS(cfgt.manycastserver, (yyvsp[(2) - (2)].Address_fifo)); }
+#line 530 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ { CONCAT_G_FIFOS(cfgt.manycastserver, (yyvsp[0].Address_fifo)); }
+#line 2204 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 60:
-/* Line 1787 of yacc.c */
-#line 532 "../../ntpd/ntp_parser.y"
- { CONCAT_G_FIFOS(cfgt.multicastclient, (yyvsp[(2) - (2)].Address_fifo)); }
+#line 532 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ { CONCAT_G_FIFOS(cfgt.multicastclient, (yyvsp[0].Address_fifo)); }
+#line 2210 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 61:
-/* Line 1787 of yacc.c */
-#line 534 "../../ntpd/ntp_parser.y"
- { cfgt.mdnstries = (yyvsp[(2) - (2)].Integer); }
+#line 534 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ { cfgt.mdnstries = (yyvsp[0].Integer); }
+#line 2216 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 62:
-/* Line 1787 of yacc.c */
-#line 545 "../../ntpd/ntp_parser.y"
+#line 545 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
attr_val *atrv;
- atrv = create_attr_ival((yyvsp[(1) - (2)].Integer), (yyvsp[(2) - (2)].Integer));
+ atrv = create_attr_ival((yyvsp[-1].Integer), (yyvsp[0].Integer));
APPEND_G_FIFO(cfgt.vars, atrv);
}
+#line 2227 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 63:
-/* Line 1787 of yacc.c */
-#line 552 "../../ntpd/ntp_parser.y"
- { cfgt.auth.control_key = (yyvsp[(2) - (2)].Integer); }
+#line 552 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ { cfgt.auth.control_key = (yyvsp[0].Integer); }
+#line 2233 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 64:
-/* Line 1787 of yacc.c */
-#line 554 "../../ntpd/ntp_parser.y"
+#line 554 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
cfgt.auth.cryptosw++;
- CONCAT_G_FIFOS(cfgt.auth.crypto_cmd_list, (yyvsp[(2) - (2)].Attr_val_fifo));
+ CONCAT_G_FIFOS(cfgt.auth.crypto_cmd_list, (yyvsp[0].Attr_val_fifo));
}
+#line 2242 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 65:
-/* Line 1787 of yacc.c */
-#line 559 "../../ntpd/ntp_parser.y"
- { cfgt.auth.keys = (yyvsp[(2) - (2)].String); }
+#line 559 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ { cfgt.auth.keys = (yyvsp[0].String); }
+#line 2248 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 66:
-/* Line 1787 of yacc.c */
-#line 561 "../../ntpd/ntp_parser.y"
- { cfgt.auth.keysdir = (yyvsp[(2) - (2)].String); }
+#line 561 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ { cfgt.auth.keysdir = (yyvsp[0].String); }
+#line 2254 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 67:
-/* Line 1787 of yacc.c */
-#line 563 "../../ntpd/ntp_parser.y"
- { cfgt.auth.request_key = (yyvsp[(2) - (2)].Integer); }
+#line 563 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ { cfgt.auth.request_key = (yyvsp[0].Integer); }
+#line 2260 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 68:
-/* Line 1787 of yacc.c */
-#line 565 "../../ntpd/ntp_parser.y"
- { cfgt.auth.revoke = (yyvsp[(2) - (2)].Integer); }
+#line 565 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ { cfgt.auth.revoke = (yyvsp[0].Integer); }
+#line 2266 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 69:
-/* Line 1787 of yacc.c */
-#line 567 "../../ntpd/ntp_parser.y"
+#line 567 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
- cfgt.auth.trusted_key_list = (yyvsp[(2) - (2)].Attr_val_fifo);
+ cfgt.auth.trusted_key_list = (yyvsp[0].Attr_val_fifo);
// if (!cfgt.auth.trusted_key_list)
// cfgt.auth.trusted_key_list = $2;
// else
// LINK_SLIST(cfgt.auth.trusted_key_list, $2, link);
}
+#line 2279 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 70:
-/* Line 1787 of yacc.c */
-#line 576 "../../ntpd/ntp_parser.y"
- { cfgt.auth.ntp_signd_socket = (yyvsp[(2) - (2)].String); }
+#line 576 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ { cfgt.auth.ntp_signd_socket = (yyvsp[0].String); }
+#line 2285 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 71:
-/* Line 1787 of yacc.c */
-#line 581 "../../ntpd/ntp_parser.y"
+#line 581 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{ (yyval.Attr_val_fifo) = NULL; }
+#line 2291 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 72:
-/* Line 1787 of yacc.c */
-#line 583 "../../ntpd/ntp_parser.y"
+#line 583 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
- (yyval.Attr_val_fifo) = (yyvsp[(1) - (2)].Attr_val_fifo);
- APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[(2) - (2)].Attr_val));
+ (yyval.Attr_val_fifo) = (yyvsp[-1].Attr_val_fifo);
+ APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[0].Attr_val));
}
+#line 2300 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 73:
-/* Line 1787 of yacc.c */
-#line 591 "../../ntpd/ntp_parser.y"
- { (yyval.Attr_val) = create_attr_sval((yyvsp[(1) - (2)].Integer), (yyvsp[(2) - (2)].String)); }
+#line 591 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ { (yyval.Attr_val) = create_attr_sval((yyvsp[-1].Integer), (yyvsp[0].String)); }
+#line 2306 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 74:
-/* Line 1787 of yacc.c */
-#line 593 "../../ntpd/ntp_parser.y"
+#line 593 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
(yyval.Attr_val) = NULL;
- cfgt.auth.revoke = (yyvsp[(2) - (2)].Integer);
+ cfgt.auth.revoke = (yyvsp[0].Integer);
msyslog(LOG_WARNING,
"'crypto revoke %d' is deprecated, "
"please use 'revoke %d' instead.",
cfgt.auth.revoke, cfgt.auth.revoke);
}
+#line 2319 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 80:
-/* Line 1787 of yacc.c */
-#line 618 "../../ntpd/ntp_parser.y"
- { CONCAT_G_FIFOS(cfgt.orphan_cmds, (yyvsp[(2) - (2)].Attr_val_fifo)); }
+#line 618 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ { CONCAT_G_FIFOS(cfgt.orphan_cmds, (yyvsp[0].Attr_val_fifo)); }
+#line 2325 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 81:
-/* Line 1787 of yacc.c */
-#line 623 "../../ntpd/ntp_parser.y"
+#line 623 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
- (yyval.Attr_val_fifo) = (yyvsp[(1) - (2)].Attr_val_fifo);
- APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[(2) - (2)].Attr_val));
+ (yyval.Attr_val_fifo) = (yyvsp[-1].Attr_val_fifo);
+ APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[0].Attr_val));
}
+#line 2334 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 82:
-/* Line 1787 of yacc.c */
-#line 628 "../../ntpd/ntp_parser.y"
+#line 628 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
(yyval.Attr_val_fifo) = NULL;
- APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[(1) - (1)].Attr_val));
+ APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[0].Attr_val));
}
+#line 2343 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 83:
-/* Line 1787 of yacc.c */
-#line 636 "../../ntpd/ntp_parser.y"
- { (yyval.Attr_val) = create_attr_dval((yyvsp[(1) - (2)].Integer), (double)(yyvsp[(2) - (2)].Integer)); }
+#line 636 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ { (yyval.Attr_val) = create_attr_dval((yyvsp[-1].Integer), (double)(yyvsp[0].Integer)); }
+#line 2349 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 84:
-/* Line 1787 of yacc.c */
-#line 638 "../../ntpd/ntp_parser.y"
- { (yyval.Attr_val) = create_attr_dval((yyvsp[(1) - (2)].Integer), (yyvsp[(2) - (2)].Double)); }
+#line 638 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ { (yyval.Attr_val) = create_attr_dval((yyvsp[-1].Integer), (yyvsp[0].Double)); }
+#line 2355 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 85:
-/* Line 1787 of yacc.c */
-#line 640 "../../ntpd/ntp_parser.y"
- { (yyval.Attr_val) = create_attr_dval((yyvsp[(1) - (2)].Integer), (double)(yyvsp[(2) - (2)].Integer)); }
+#line 640 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ { (yyval.Attr_val) = create_attr_dval((yyvsp[-1].Integer), (double)(yyvsp[0].Integer)); }
+#line 2361 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 96:
-/* Line 1787 of yacc.c */
-#line 666 "../../ntpd/ntp_parser.y"
- { CONCAT_G_FIFOS(cfgt.stats_list, (yyvsp[(2) - (2)].Int_fifo)); }
+#line 666 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ { CONCAT_G_FIFOS(cfgt.stats_list, (yyvsp[0].Int_fifo)); }
+#line 2367 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 97:
-/* Line 1787 of yacc.c */
-#line 668 "../../ntpd/ntp_parser.y"
+#line 668 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
if (lex_from_file()) {
- cfgt.stats_dir = (yyvsp[(2) - (2)].String);
+ cfgt.stats_dir = (yyvsp[0].String);
} else {
- YYFREE((yyvsp[(2) - (2)].String));
+ YYFREE((yyvsp[0].String));
yyerror("statsdir remote configuration ignored");
}
}
+#line 2380 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 98:
-/* Line 1787 of yacc.c */
-#line 677 "../../ntpd/ntp_parser.y"
+#line 677 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
filegen_node *fgn;
- fgn = create_filegen_node((yyvsp[(2) - (3)].Integer), (yyvsp[(3) - (3)].Attr_val_fifo));
+ fgn = create_filegen_node((yyvsp[-1].Integer), (yyvsp[0].Attr_val_fifo));
APPEND_G_FIFO(cfgt.filegen_opts, fgn);
}
+#line 2391 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 99:
-/* Line 1787 of yacc.c */
-#line 687 "../../ntpd/ntp_parser.y"
+#line 687 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
- (yyval.Int_fifo) = (yyvsp[(1) - (2)].Int_fifo);
- APPEND_G_FIFO((yyval.Int_fifo), create_int_node((yyvsp[(2) - (2)].Integer)));
+ (yyval.Int_fifo) = (yyvsp[-1].Int_fifo);
+ APPEND_G_FIFO((yyval.Int_fifo), create_int_node((yyvsp[0].Integer)));
}
+#line 2400 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 100:
-/* Line 1787 of yacc.c */
-#line 692 "../../ntpd/ntp_parser.y"
+#line 692 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
(yyval.Int_fifo) = NULL;
- APPEND_G_FIFO((yyval.Int_fifo), create_int_node((yyvsp[(1) - (1)].Integer)));
+ APPEND_G_FIFO((yyval.Int_fifo), create_int_node((yyvsp[0].Integer)));
}
+#line 2409 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 109:
-/* Line 1787 of yacc.c */
-#line 711 "../../ntpd/ntp_parser.y"
+#line 711 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{ (yyval.Attr_val_fifo) = NULL; }
+#line 2415 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 110:
-/* Line 1787 of yacc.c */
-#line 713 "../../ntpd/ntp_parser.y"
+#line 713 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
- (yyval.Attr_val_fifo) = (yyvsp[(1) - (2)].Attr_val_fifo);
- APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[(2) - (2)].Attr_val));
+ (yyval.Attr_val_fifo) = (yyvsp[-1].Attr_val_fifo);
+ APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[0].Attr_val));
}
+#line 2424 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 111:
-/* Line 1787 of yacc.c */
-#line 721 "../../ntpd/ntp_parser.y"
+#line 721 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
if (lex_from_file()) {
- (yyval.Attr_val) = create_attr_sval((yyvsp[(1) - (2)].Integer), (yyvsp[(2) - (2)].String));
+ (yyval.Attr_val) = create_attr_sval((yyvsp[-1].Integer), (yyvsp[0].String));
} else {
(yyval.Attr_val) = NULL;
- YYFREE((yyvsp[(2) - (2)].String));
+ YYFREE((yyvsp[0].String));
yyerror("filegen file remote config ignored");
}
}
+#line 2438 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 112:
-/* Line 1787 of yacc.c */
-#line 731 "../../ntpd/ntp_parser.y"
+#line 731 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
if (lex_from_file()) {
- (yyval.Attr_val) = create_attr_ival((yyvsp[(1) - (2)].Integer), (yyvsp[(2) - (2)].Integer));
+ (yyval.Attr_val) = create_attr_ival((yyvsp[-1].Integer), (yyvsp[0].Integer));
} else {
(yyval.Attr_val) = NULL;
yyerror("filegen type remote config ignored");
}
}
+#line 2451 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 113:
-/* Line 1787 of yacc.c */
-#line 740 "../../ntpd/ntp_parser.y"
+#line 740 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
const char *err;
if (lex_from_file()) {
- (yyval.Attr_val) = create_attr_ival(T_Flag, (yyvsp[(1) - (1)].Integer));
+ (yyval.Attr_val) = create_attr_ival(T_Flag, (yyvsp[0].Integer));
} else {
(yyval.Attr_val) = NULL;
- if (T_Link == (yyvsp[(1) - (1)].Integer))
+ if (T_Link == (yyvsp[0].Integer))
err = "filegen link remote config ignored";
else
err = "filegen nolink remote config ignored";
yyerror(err);
}
}
+#line 2470 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 114:
-/* Line 1787 of yacc.c */
-#line 755 "../../ntpd/ntp_parser.y"
- { (yyval.Attr_val) = create_attr_ival(T_Flag, (yyvsp[(1) - (1)].Integer)); }
+#line 755 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ { (yyval.Attr_val) = create_attr_ival(T_Flag, (yyvsp[0].Integer)); }
+#line 2476 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 126:
-/* Line 1787 of yacc.c */
-#line 785 "../../ntpd/ntp_parser.y"
+#line 785 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
- CONCAT_G_FIFOS(cfgt.discard_opts, (yyvsp[(2) - (2)].Attr_val_fifo));
+ CONCAT_G_FIFOS(cfgt.discard_opts, (yyvsp[0].Attr_val_fifo));
}
+#line 2484 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 127:
-/* Line 1787 of yacc.c */
-#line 789 "../../ntpd/ntp_parser.y"
+#line 789 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
- CONCAT_G_FIFOS(cfgt.mru_opts, (yyvsp[(2) - (2)].Attr_val_fifo));
+ CONCAT_G_FIFOS(cfgt.mru_opts, (yyvsp[0].Attr_val_fifo));
}
+#line 2492 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 128:
-/* Line 1787 of yacc.c */
-#line 793 "../../ntpd/ntp_parser.y"
+#line 793 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
restrict_node *rn;
- rn = create_restrict_node((yyvsp[(2) - (3)].Address_node), NULL, (yyvsp[(3) - (3)].Int_fifo),
+ rn = create_restrict_node((yyvsp[-1].Address_node), NULL, (yyvsp[0].Int_fifo),
lex_current()->curpos.nline);
APPEND_G_FIFO(cfgt.restrict_opts, rn);
}
+#line 2504 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 129:
-/* Line 1787 of yacc.c */
-#line 801 "../../ntpd/ntp_parser.y"
+#line 801 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
restrict_node *rn;
- rn = create_restrict_node((yyvsp[(2) - (5)].Address_node), (yyvsp[(4) - (5)].Address_node), (yyvsp[(5) - (5)].Int_fifo),
+ rn = create_restrict_node((yyvsp[-3].Address_node), (yyvsp[-1].Address_node), (yyvsp[0].Int_fifo),
lex_current()->curpos.nline);
APPEND_G_FIFO(cfgt.restrict_opts, rn);
}
+#line 2516 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 130:
-/* Line 1787 of yacc.c */
-#line 809 "../../ntpd/ntp_parser.y"
+#line 809 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
restrict_node *rn;
- rn = create_restrict_node(NULL, NULL, (yyvsp[(3) - (3)].Int_fifo),
+ rn = create_restrict_node(NULL, NULL, (yyvsp[0].Int_fifo),
lex_current()->curpos.nline);
APPEND_G_FIFO(cfgt.restrict_opts, rn);
}
+#line 2528 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 131:
-/* Line 1787 of yacc.c */
-#line 817 "../../ntpd/ntp_parser.y"
+#line 817 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
restrict_node *rn;
@@ -2777,15 +2539,15 @@ yyreduce:
create_address_node(
estrdup("0.0.0.0"),
AF_INET),
- (yyvsp[(4) - (4)].Int_fifo),
+ (yyvsp[0].Int_fifo),
lex_current()->curpos.nline);
APPEND_G_FIFO(cfgt.restrict_opts, rn);
}
+#line 2547 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 132:
-/* Line 1787 of yacc.c */
-#line 832 "../../ntpd/ntp_parser.y"
+#line 832 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
restrict_node *rn;
@@ -2796,320 +2558,320 @@ yyreduce:
create_address_node(
estrdup("::"),
AF_INET6),
- (yyvsp[(4) - (4)].Int_fifo),
+ (yyvsp[0].Int_fifo),
lex_current()->curpos.nline);
APPEND_G_FIFO(cfgt.restrict_opts, rn);
}
+#line 2566 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 133:
-/* Line 1787 of yacc.c */
-#line 847 "../../ntpd/ntp_parser.y"
+#line 847 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
restrict_node * rn;
- APPEND_G_FIFO((yyvsp[(3) - (3)].Int_fifo), create_int_node((yyvsp[(2) - (3)].Integer)));
+ APPEND_G_FIFO((yyvsp[0].Int_fifo), create_int_node((yyvsp[-1].Integer)));
rn = create_restrict_node(
- NULL, NULL, (yyvsp[(3) - (3)].Int_fifo), lex_current()->curpos.nline);
+ NULL, NULL, (yyvsp[0].Int_fifo), lex_current()->curpos.nline);
APPEND_G_FIFO(cfgt.restrict_opts, rn);
}
+#line 2579 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 134:
-/* Line 1787 of yacc.c */
-#line 859 "../../ntpd/ntp_parser.y"
+#line 859 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{ (yyval.Int_fifo) = NULL; }
+#line 2585 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 135:
-/* Line 1787 of yacc.c */
-#line 861 "../../ntpd/ntp_parser.y"
+#line 861 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
- (yyval.Int_fifo) = (yyvsp[(1) - (2)].Int_fifo);
- APPEND_G_FIFO((yyval.Int_fifo), create_int_node((yyvsp[(2) - (2)].Integer)));
+ (yyval.Int_fifo) = (yyvsp[-1].Int_fifo);
+ APPEND_G_FIFO((yyval.Int_fifo), create_int_node((yyvsp[0].Integer)));
}
+#line 2594 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 151:
-/* Line 1787 of yacc.c */
-#line 887 "../../ntpd/ntp_parser.y"
+#line 887 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
- (yyval.Attr_val_fifo) = (yyvsp[(1) - (2)].Attr_val_fifo);
- APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[(2) - (2)].Attr_val));
+ (yyval.Attr_val_fifo) = (yyvsp[-1].Attr_val_fifo);
+ APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[0].Attr_val));
}
+#line 2603 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 152:
-/* Line 1787 of yacc.c */
-#line 892 "../../ntpd/ntp_parser.y"
+#line 892 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
(yyval.Attr_val_fifo) = NULL;
- APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[(1) - (1)].Attr_val));
+ APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[0].Attr_val));
}
+#line 2612 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 153:
-/* Line 1787 of yacc.c */
-#line 900 "../../ntpd/ntp_parser.y"
- { (yyval.Attr_val) = create_attr_ival((yyvsp[(1) - (2)].Integer), (yyvsp[(2) - (2)].Integer)); }
+#line 900 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ { (yyval.Attr_val) = create_attr_ival((yyvsp[-1].Integer), (yyvsp[0].Integer)); }
+#line 2618 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 157:
-/* Line 1787 of yacc.c */
-#line 911 "../../ntpd/ntp_parser.y"
+#line 911 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
- (yyval.Attr_val_fifo) = (yyvsp[(1) - (2)].Attr_val_fifo);
- APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[(2) - (2)].Attr_val));
+ (yyval.Attr_val_fifo) = (yyvsp[-1].Attr_val_fifo);
+ APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[0].Attr_val));
}
+#line 2627 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 158:
-/* Line 1787 of yacc.c */
-#line 916 "../../ntpd/ntp_parser.y"
+#line 916 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
(yyval.Attr_val_fifo) = NULL;
- APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[(1) - (1)].Attr_val));
+ APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[0].Attr_val));
}
+#line 2636 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 159:
-/* Line 1787 of yacc.c */
-#line 924 "../../ntpd/ntp_parser.y"
- { (yyval.Attr_val) = create_attr_ival((yyvsp[(1) - (2)].Integer), (yyvsp[(2) - (2)].Integer)); }
+#line 924 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ { (yyval.Attr_val) = create_attr_ival((yyvsp[-1].Integer), (yyvsp[0].Integer)); }
+#line 2642 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 168:
-/* Line 1787 of yacc.c */
-#line 944 "../../ntpd/ntp_parser.y"
+#line 944 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
addr_opts_node *aon;
- aon = create_addr_opts_node((yyvsp[(2) - (3)].Address_node), (yyvsp[(3) - (3)].Attr_val_fifo));
+ aon = create_addr_opts_node((yyvsp[-1].Address_node), (yyvsp[0].Attr_val_fifo));
APPEND_G_FIFO(cfgt.fudge, aon);
}
+#line 2653 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 169:
-/* Line 1787 of yacc.c */
-#line 954 "../../ntpd/ntp_parser.y"
+#line 954 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
- (yyval.Attr_val_fifo) = (yyvsp[(1) - (2)].Attr_val_fifo);
- APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[(2) - (2)].Attr_val));
+ (yyval.Attr_val_fifo) = (yyvsp[-1].Attr_val_fifo);
+ APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[0].Attr_val));
}
+#line 2662 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 170:
-/* Line 1787 of yacc.c */
-#line 959 "../../ntpd/ntp_parser.y"
+#line 959 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
(yyval.Attr_val_fifo) = NULL;
- APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[(1) - (1)].Attr_val));
+ APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[0].Attr_val));
}
+#line 2671 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 171:
-/* Line 1787 of yacc.c */
-#line 967 "../../ntpd/ntp_parser.y"
- { (yyval.Attr_val) = create_attr_dval((yyvsp[(1) - (2)].Integer), (yyvsp[(2) - (2)].Double)); }
+#line 967 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ { (yyval.Attr_val) = create_attr_dval((yyvsp[-1].Integer), (yyvsp[0].Double)); }
+#line 2677 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 172:
-/* Line 1787 of yacc.c */
-#line 969 "../../ntpd/ntp_parser.y"
- { (yyval.Attr_val) = create_attr_ival((yyvsp[(1) - (2)].Integer), (yyvsp[(2) - (2)].Integer)); }
+#line 969 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ { (yyval.Attr_val) = create_attr_ival((yyvsp[-1].Integer), (yyvsp[0].Integer)); }
+#line 2683 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 173:
-/* Line 1787 of yacc.c */
-#line 971 "../../ntpd/ntp_parser.y"
- { (yyval.Attr_val) = create_attr_ival((yyvsp[(1) - (2)].Integer), (yyvsp[(2) - (2)].Integer)); }
+#line 971 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ { (yyval.Attr_val) = create_attr_ival((yyvsp[-1].Integer), (yyvsp[0].Integer)); }
+#line 2689 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 174:
-/* Line 1787 of yacc.c */
-#line 973 "../../ntpd/ntp_parser.y"
- { (yyval.Attr_val) = create_attr_sval((yyvsp[(1) - (2)].Integer), (yyvsp[(2) - (2)].String)); }
+#line 973 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ { (yyval.Attr_val) = create_attr_sval((yyvsp[-1].Integer), (yyvsp[0].String)); }
+#line 2695 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 175:
-/* Line 1787 of yacc.c */
-#line 975 "../../ntpd/ntp_parser.y"
- { (yyval.Attr_val) = create_attr_sval((yyvsp[(1) - (2)].Integer), (yyvsp[(2) - (2)].String)); }
+#line 975 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ { (yyval.Attr_val) = create_attr_sval((yyvsp[-1].Integer), (yyvsp[0].String)); }
+#line 2701 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 182:
-/* Line 1787 of yacc.c */
-#line 996 "../../ntpd/ntp_parser.y"
- { CONCAT_G_FIFOS(cfgt.rlimit, (yyvsp[(2) - (2)].Attr_val_fifo)); }
+#line 996 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ { CONCAT_G_FIFOS(cfgt.rlimit, (yyvsp[0].Attr_val_fifo)); }
+#line 2707 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 183:
-/* Line 1787 of yacc.c */
-#line 1001 "../../ntpd/ntp_parser.y"
+#line 1001 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
- (yyval.Attr_val_fifo) = (yyvsp[(1) - (2)].Attr_val_fifo);
- APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[(2) - (2)].Attr_val));
+ (yyval.Attr_val_fifo) = (yyvsp[-1].Attr_val_fifo);
+ APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[0].Attr_val));
}
+#line 2716 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 184:
-/* Line 1787 of yacc.c */
-#line 1006 "../../ntpd/ntp_parser.y"
+#line 1006 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
(yyval.Attr_val_fifo) = NULL;
- APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[(1) - (1)].Attr_val));
+ APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[0].Attr_val));
}
+#line 2725 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 185:
-/* Line 1787 of yacc.c */
-#line 1014 "../../ntpd/ntp_parser.y"
- { (yyval.Attr_val) = create_attr_ival((yyvsp[(1) - (2)].Integer), (yyvsp[(2) - (2)].Integer)); }
+#line 1014 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ { (yyval.Attr_val) = create_attr_ival((yyvsp[-1].Integer), (yyvsp[0].Integer)); }
+#line 2731 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 189:
-/* Line 1787 of yacc.c */
-#line 1030 "../../ntpd/ntp_parser.y"
- { CONCAT_G_FIFOS(cfgt.enable_opts, (yyvsp[(2) - (2)].Attr_val_fifo)); }
+#line 1030 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ { CONCAT_G_FIFOS(cfgt.enable_opts, (yyvsp[0].Attr_val_fifo)); }
+#line 2737 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 190:
-/* Line 1787 of yacc.c */
-#line 1032 "../../ntpd/ntp_parser.y"
- { CONCAT_G_FIFOS(cfgt.disable_opts, (yyvsp[(2) - (2)].Attr_val_fifo)); }
+#line 1032 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ { CONCAT_G_FIFOS(cfgt.disable_opts, (yyvsp[0].Attr_val_fifo)); }
+#line 2743 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 191:
-/* Line 1787 of yacc.c */
-#line 1037 "../../ntpd/ntp_parser.y"
+#line 1037 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
- (yyval.Attr_val_fifo) = (yyvsp[(1) - (2)].Attr_val_fifo);
- APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[(2) - (2)].Attr_val));
+ (yyval.Attr_val_fifo) = (yyvsp[-1].Attr_val_fifo);
+ APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[0].Attr_val));
}
+#line 2752 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 192:
-/* Line 1787 of yacc.c */
-#line 1042 "../../ntpd/ntp_parser.y"
+#line 1042 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
(yyval.Attr_val_fifo) = NULL;
- APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[(1) - (1)].Attr_val));
+ APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[0].Attr_val));
}
+#line 2761 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 193:
-/* Line 1787 of yacc.c */
-#line 1050 "../../ntpd/ntp_parser.y"
- { (yyval.Attr_val) = create_attr_ival(T_Flag, (yyvsp[(1) - (1)].Integer)); }
+#line 1050 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ { (yyval.Attr_val) = create_attr_ival(T_Flag, (yyvsp[0].Integer)); }
+#line 2767 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 194:
-/* Line 1787 of yacc.c */
-#line 1052 "../../ntpd/ntp_parser.y"
+#line 1052 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
if (lex_from_file()) {
- (yyval.Attr_val) = create_attr_ival(T_Flag, (yyvsp[(1) - (1)].Integer));
+ (yyval.Attr_val) = create_attr_ival(T_Flag, (yyvsp[0].Integer));
} else {
char err_str[128];
(yyval.Attr_val) = NULL;
snprintf(err_str, sizeof(err_str),
"enable/disable %s remote configuration ignored",
- keyword((yyvsp[(1) - (1)].Integer)));
+ keyword((yyvsp[0].Integer)));
yyerror(err_str);
}
}
+#line 2785 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 203:
-/* Line 1787 of yacc.c */
-#line 1087 "../../ntpd/ntp_parser.y"
- { CONCAT_G_FIFOS(cfgt.tinker, (yyvsp[(2) - (2)].Attr_val_fifo)); }
+#line 1087 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ { CONCAT_G_FIFOS(cfgt.tinker, (yyvsp[0].Attr_val_fifo)); }
+#line 2791 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 204:
-/* Line 1787 of yacc.c */
-#line 1092 "../../ntpd/ntp_parser.y"
+#line 1092 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
- (yyval.Attr_val_fifo) = (yyvsp[(1) - (2)].Attr_val_fifo);
- APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[(2) - (2)].Attr_val));
+ (yyval.Attr_val_fifo) = (yyvsp[-1].Attr_val_fifo);
+ APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[0].Attr_val));
}
+#line 2800 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 205:
-/* Line 1787 of yacc.c */
-#line 1097 "../../ntpd/ntp_parser.y"
+#line 1097 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
(yyval.Attr_val_fifo) = NULL;
- APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[(1) - (1)].Attr_val));
+ APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[0].Attr_val));
}
+#line 2809 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 206:
-/* Line 1787 of yacc.c */
-#line 1105 "../../ntpd/ntp_parser.y"
- { (yyval.Attr_val) = create_attr_dval((yyvsp[(1) - (2)].Integer), (yyvsp[(2) - (2)].Double)); }
+#line 1105 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ { (yyval.Attr_val) = create_attr_dval((yyvsp[-1].Integer), (yyvsp[0].Double)); }
+#line 2815 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 219:
-/* Line 1787 of yacc.c */
-#line 1130 "../../ntpd/ntp_parser.y"
+#line 1130 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
attr_val *av;
- av = create_attr_dval((yyvsp[(1) - (2)].Integer), (yyvsp[(2) - (2)].Double));
+ av = create_attr_dval((yyvsp[-1].Integer), (yyvsp[0].Double));
APPEND_G_FIFO(cfgt.vars, av);
}
+#line 2826 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 220:
-/* Line 1787 of yacc.c */
-#line 1137 "../../ntpd/ntp_parser.y"
+#line 1137 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
attr_val *av;
- av = create_attr_ival((yyvsp[(1) - (2)].Integer), (yyvsp[(2) - (2)].Integer));
+ av = create_attr_ival((yyvsp[-1].Integer), (yyvsp[0].Integer));
APPEND_G_FIFO(cfgt.vars, av);
}
+#line 2837 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 221:
-/* Line 1787 of yacc.c */
-#line 1144 "../../ntpd/ntp_parser.y"
+#line 1144 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
attr_val *av;
- av = create_attr_sval((yyvsp[(1) - (2)].Integer), (yyvsp[(2) - (2)].String));
+ av = create_attr_sval((yyvsp[-1].Integer), (yyvsp[0].String));
APPEND_G_FIFO(cfgt.vars, av);
}
+#line 2848 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 222:
-/* Line 1787 of yacc.c */
-#line 1151 "../../ntpd/ntp_parser.y"
+#line 1151 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
char error_text[64];
attr_val *av;
if (lex_from_file()) {
- av = create_attr_sval((yyvsp[(1) - (2)].Integer), (yyvsp[(2) - (2)].String));
+ av = create_attr_sval((yyvsp[-1].Integer), (yyvsp[0].String));
APPEND_G_FIFO(cfgt.vars, av);
} else {
- YYFREE((yyvsp[(2) - (2)].String));
+ YYFREE((yyvsp[0].String));
snprintf(error_text, sizeof(error_text),
"%s remote config ignored",
- keyword((yyvsp[(1) - (2)].Integer)));
+ keyword((yyvsp[-1].Integer)));
yyerror(error_text);
}
}
+#line 2868 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 223:
-/* Line 1787 of yacc.c */
-#line 1167 "../../ntpd/ntp_parser.y"
+#line 1167 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
if (!lex_from_file()) {
- YYFREE((yyvsp[(2) - (3)].String)); /* avoid leak */
+ YYFREE((yyvsp[-1].String)); /* avoid leak */
yyerror("remote includefile ignored");
break;
}
@@ -3117,486 +2879,497 @@ yyreduce:
fprintf(stderr, "getconfig: Maximum include file level exceeded.\n");
msyslog(LOG_ERR, "getconfig: Maximum include file level exceeded.");
} else {
- const char * path = FindConfig((yyvsp[(2) - (3)].String)); /* might return $2! */
+ const char * path = FindConfig((yyvsp[-1].String)); /* might return $2! */
if (!lex_push_file(path, "r")) {
fprintf(stderr, "getconfig: Couldn't open <%s>\n", path);
msyslog(LOG_ERR, "getconfig: Couldn't open <%s>", path);
}
}
- YYFREE((yyvsp[(2) - (3)].String)); /* avoid leak */
+ YYFREE((yyvsp[-1].String)); /* avoid leak */
}
+#line 2891 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 224:
-/* Line 1787 of yacc.c */
-#line 1186 "../../ntpd/ntp_parser.y"
+#line 1186 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{ lex_flush_stack(); }
+#line 2897 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 225:
-/* Line 1787 of yacc.c */
-#line 1188 "../../ntpd/ntp_parser.y"
+#line 1188 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{ /* see drift_parm below for actions */ }
+#line 2903 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 226:
-/* Line 1787 of yacc.c */
-#line 1190 "../../ntpd/ntp_parser.y"
- { CONCAT_G_FIFOS(cfgt.logconfig, (yyvsp[(2) - (2)].Attr_val_fifo)); }
+#line 1190 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ { CONCAT_G_FIFOS(cfgt.logconfig, (yyvsp[0].Attr_val_fifo)); }
+#line 2909 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 227:
-/* Line 1787 of yacc.c */
-#line 1192 "../../ntpd/ntp_parser.y"
- { CONCAT_G_FIFOS(cfgt.phone, (yyvsp[(2) - (2)].String_fifo)); }
+#line 1192 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ { CONCAT_G_FIFOS(cfgt.phone, (yyvsp[0].String_fifo)); }
+#line 2915 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 228:
-/* Line 1787 of yacc.c */
-#line 1194 "../../ntpd/ntp_parser.y"
- { APPEND_G_FIFO(cfgt.setvar, (yyvsp[(2) - (2)].Set_var)); }
+#line 1194 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ { APPEND_G_FIFO(cfgt.setvar, (yyvsp[0].Set_var)); }
+#line 2921 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 229:
-/* Line 1787 of yacc.c */
-#line 1196 "../../ntpd/ntp_parser.y"
+#line 1196 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
addr_opts_node *aon;
- aon = create_addr_opts_node((yyvsp[(2) - (3)].Address_node), (yyvsp[(3) - (3)].Attr_val_fifo));
+ aon = create_addr_opts_node((yyvsp[-1].Address_node), (yyvsp[0].Attr_val_fifo));
APPEND_G_FIFO(cfgt.trap, aon);
}
+#line 2932 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 230:
-/* Line 1787 of yacc.c */
-#line 1203 "../../ntpd/ntp_parser.y"
- { CONCAT_G_FIFOS(cfgt.ttl, (yyvsp[(2) - (2)].Attr_val_fifo)); }
+#line 1203 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ { CONCAT_G_FIFOS(cfgt.ttl, (yyvsp[0].Attr_val_fifo)); }
+#line 2938 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 235:
-/* Line 1787 of yacc.c */
-#line 1218 "../../ntpd/ntp_parser.y"
+#line 1218 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
#ifndef LEAP_SMEAR
yyerror("Built without LEAP_SMEAR support.");
#endif
}
+#line 2948 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 241:
-/* Line 1787 of yacc.c */
-#line 1238 "../../ntpd/ntp_parser.y"
+#line 1238 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
- attr_val *av;
-
- av = create_attr_sval(T_Driftfile, (yyvsp[(1) - (1)].String));
- APPEND_G_FIFO(cfgt.vars, av);
+ if (lex_from_file()) {
+ attr_val *av;
+ av = create_attr_sval(T_Driftfile, (yyvsp[0].String));
+ APPEND_G_FIFO(cfgt.vars, av);
+ } else {
+ YYFREE((yyvsp[0].String));
+ yyerror("driftfile remote configuration ignored");
+ }
}
+#line 2963 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 242:
-/* Line 1787 of yacc.c */
-#line 1245 "../../ntpd/ntp_parser.y"
+#line 1249 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
- attr_val *av;
-
- av = create_attr_sval(T_Driftfile, (yyvsp[(1) - (2)].String));
- APPEND_G_FIFO(cfgt.vars, av);
- av = create_attr_dval(T_WanderThreshold, (yyvsp[(2) - (2)].Double));
- APPEND_G_FIFO(cfgt.vars, av);
+ if (lex_from_file()) {
+ attr_val *av;
+ av = create_attr_sval(T_Driftfile, (yyvsp[-1].String));
+ APPEND_G_FIFO(cfgt.vars, av);
+ av = create_attr_dval(T_WanderThreshold, (yyvsp[0].Double));
+ APPEND_G_FIFO(cfgt.vars, av);
+ } else {
+ YYFREE((yyvsp[-1].String));
+ yyerror("driftfile remote configuration ignored");
+ }
}
+#line 2980 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 243:
-/* Line 1787 of yacc.c */
-#line 1254 "../../ntpd/ntp_parser.y"
+#line 1262 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
- attr_val *av;
-
- av = create_attr_sval(T_Driftfile, "");
- APPEND_G_FIFO(cfgt.vars, av);
+ if (lex_from_file()) {
+ attr_val *av;
+ av = create_attr_sval(T_Driftfile, estrdup(""));
+ APPEND_G_FIFO(cfgt.vars, av);
+ } else {
+ yyerror("driftfile remote configuration ignored");
+ }
}
+#line 2994 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 244:
-/* Line 1787 of yacc.c */
-#line 1264 "../../ntpd/ntp_parser.y"
- { (yyval.Set_var) = create_setvar_node((yyvsp[(1) - (4)].String), (yyvsp[(3) - (4)].String), (yyvsp[(4) - (4)].Integer)); }
+#line 1275 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ { (yyval.Set_var) = create_setvar_node((yyvsp[-3].String), (yyvsp[-1].String), (yyvsp[0].Integer)); }
+#line 3000 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 246:
-/* Line 1787 of yacc.c */
-#line 1270 "../../ntpd/ntp_parser.y"
+#line 1281 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{ (yyval.Integer) = 0; }
+#line 3006 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 247:
-/* Line 1787 of yacc.c */
-#line 1275 "../../ntpd/ntp_parser.y"
+#line 1286 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{ (yyval.Attr_val_fifo) = NULL; }
+#line 3012 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 248:
-/* Line 1787 of yacc.c */
-#line 1277 "../../ntpd/ntp_parser.y"
+#line 1288 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
- (yyval.Attr_val_fifo) = (yyvsp[(1) - (2)].Attr_val_fifo);
- APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[(2) - (2)].Attr_val));
+ (yyval.Attr_val_fifo) = (yyvsp[-1].Attr_val_fifo);
+ APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[0].Attr_val));
}
+#line 3021 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 249:
-/* Line 1787 of yacc.c */
-#line 1285 "../../ntpd/ntp_parser.y"
- { (yyval.Attr_val) = create_attr_ival((yyvsp[(1) - (2)].Integer), (yyvsp[(2) - (2)].Integer)); }
+#line 1296 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ { (yyval.Attr_val) = create_attr_ival((yyvsp[-1].Integer), (yyvsp[0].Integer)); }
+#line 3027 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 250:
-/* Line 1787 of yacc.c */
-#line 1287 "../../ntpd/ntp_parser.y"
+#line 1298 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
- (yyval.Attr_val) = create_attr_sval((yyvsp[(1) - (2)].Integer), estrdup((yyvsp[(2) - (2)].Address_node)->address));
- destroy_address_node((yyvsp[(2) - (2)].Address_node));
+ (yyval.Attr_val) = create_attr_sval((yyvsp[-1].Integer), estrdup((yyvsp[0].Address_node)->address));
+ destroy_address_node((yyvsp[0].Address_node));
}
+#line 3036 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 251:
-/* Line 1787 of yacc.c */
-#line 1295 "../../ntpd/ntp_parser.y"
+#line 1306 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
- (yyval.Attr_val_fifo) = (yyvsp[(1) - (2)].Attr_val_fifo);
- APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[(2) - (2)].Attr_val));
+ (yyval.Attr_val_fifo) = (yyvsp[-1].Attr_val_fifo);
+ APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[0].Attr_val));
}
+#line 3045 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 252:
-/* Line 1787 of yacc.c */
-#line 1300 "../../ntpd/ntp_parser.y"
+#line 1311 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
(yyval.Attr_val_fifo) = NULL;
- APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[(1) - (1)].Attr_val));
+ APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[0].Attr_val));
}
+#line 3054 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 253:
-/* Line 1787 of yacc.c */
-#line 1308 "../../ntpd/ntp_parser.y"
+#line 1319 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
char prefix;
char * type;
- switch ((yyvsp[(1) - (1)].String)[0]) {
+ switch ((yyvsp[0].String)[0]) {
case '+':
case '-':
case '=':
- prefix = (yyvsp[(1) - (1)].String)[0];
- type = (yyvsp[(1) - (1)].String) + 1;
+ prefix = (yyvsp[0].String)[0];
+ type = (yyvsp[0].String) + 1;
break;
default:
prefix = '=';
- type = (yyvsp[(1) - (1)].String);
+ type = (yyvsp[0].String);
}
(yyval.Attr_val) = create_attr_sval(prefix, estrdup(type));
- YYFREE((yyvsp[(1) - (1)].String));
+ YYFREE((yyvsp[0].String));
}
+#line 3080 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 254:
-/* Line 1787 of yacc.c */
-#line 1333 "../../ntpd/ntp_parser.y"
+#line 1344 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
nic_rule_node *nrn;
- nrn = create_nic_rule_node((yyvsp[(3) - (3)].Integer), NULL, (yyvsp[(2) - (3)].Integer));
+ nrn = create_nic_rule_node((yyvsp[0].Integer), NULL, (yyvsp[-1].Integer));
APPEND_G_FIFO(cfgt.nic_rules, nrn);
}
+#line 3091 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 255:
-/* Line 1787 of yacc.c */
-#line 1340 "../../ntpd/ntp_parser.y"
+#line 1351 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
nic_rule_node *nrn;
- nrn = create_nic_rule_node(0, (yyvsp[(3) - (3)].String), (yyvsp[(2) - (3)].Integer));
+ nrn = create_nic_rule_node(0, (yyvsp[0].String), (yyvsp[-1].Integer));
APPEND_G_FIFO(cfgt.nic_rules, nrn);
}
+#line 3102 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 265:
-/* Line 1787 of yacc.c */
-#line 1368 "../../ntpd/ntp_parser.y"
- { CONCAT_G_FIFOS(cfgt.reset_counters, (yyvsp[(2) - (2)].Int_fifo)); }
+#line 1379 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ { CONCAT_G_FIFOS(cfgt.reset_counters, (yyvsp[0].Int_fifo)); }
+#line 3108 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 266:
-/* Line 1787 of yacc.c */
-#line 1373 "../../ntpd/ntp_parser.y"
+#line 1384 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
- (yyval.Int_fifo) = (yyvsp[(1) - (2)].Int_fifo);
- APPEND_G_FIFO((yyval.Int_fifo), create_int_node((yyvsp[(2) - (2)].Integer)));
+ (yyval.Int_fifo) = (yyvsp[-1].Int_fifo);
+ APPEND_G_FIFO((yyval.Int_fifo), create_int_node((yyvsp[0].Integer)));
}
+#line 3117 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 267:
-/* Line 1787 of yacc.c */
-#line 1378 "../../ntpd/ntp_parser.y"
+#line 1389 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
(yyval.Int_fifo) = NULL;
- APPEND_G_FIFO((yyval.Int_fifo), create_int_node((yyvsp[(1) - (1)].Integer)));
+ APPEND_G_FIFO((yyval.Int_fifo), create_int_node((yyvsp[0].Integer)));
}
+#line 3126 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 275:
-/* Line 1787 of yacc.c */
-#line 1402 "../../ntpd/ntp_parser.y"
+#line 1413 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
- (yyval.Attr_val_fifo) = (yyvsp[(1) - (2)].Attr_val_fifo);
- APPEND_G_FIFO((yyval.Attr_val_fifo), create_int_node((yyvsp[(2) - (2)].Integer)));
+ (yyval.Attr_val_fifo) = (yyvsp[-1].Attr_val_fifo);
+ APPEND_G_FIFO((yyval.Attr_val_fifo), create_int_node((yyvsp[0].Integer)));
}
+#line 3135 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 276:
-/* Line 1787 of yacc.c */
-#line 1407 "../../ntpd/ntp_parser.y"
+#line 1418 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
(yyval.Attr_val_fifo) = NULL;
- APPEND_G_FIFO((yyval.Attr_val_fifo), create_int_node((yyvsp[(1) - (1)].Integer)));
+ APPEND_G_FIFO((yyval.Attr_val_fifo), create_int_node((yyvsp[0].Integer)));
}
+#line 3144 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 277:
-/* Line 1787 of yacc.c */
-#line 1415 "../../ntpd/ntp_parser.y"
+#line 1426 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
- (yyval.Attr_val_fifo) = (yyvsp[(1) - (2)].Attr_val_fifo);
- APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[(2) - (2)].Attr_val));
+ (yyval.Attr_val_fifo) = (yyvsp[-1].Attr_val_fifo);
+ APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[0].Attr_val));
}
+#line 3153 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 278:
-/* Line 1787 of yacc.c */
-#line 1420 "../../ntpd/ntp_parser.y"
+#line 1431 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
(yyval.Attr_val_fifo) = NULL;
- APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[(1) - (1)].Attr_val));
+ APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[0].Attr_val));
}
+#line 3162 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 279:
-/* Line 1787 of yacc.c */
-#line 1428 "../../ntpd/ntp_parser.y"
- { (yyval.Attr_val) = create_attr_ival('i', (yyvsp[(1) - (1)].Integer)); }
+#line 1439 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ { (yyval.Attr_val) = create_attr_ival('i', (yyvsp[0].Integer)); }
+#line 3168 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 281:
-/* Line 1787 of yacc.c */
-#line 1434 "../../ntpd/ntp_parser.y"
- { (yyval.Attr_val) = create_attr_rangeval('-', (yyvsp[(2) - (5)].Integer), (yyvsp[(4) - (5)].Integer)); }
+#line 1445 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ { (yyval.Attr_val) = create_attr_rangeval('-', (yyvsp[-3].Integer), (yyvsp[-1].Integer)); }
+#line 3174 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 282:
-/* Line 1787 of yacc.c */
-#line 1439 "../../ntpd/ntp_parser.y"
+#line 1450 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
- (yyval.String_fifo) = (yyvsp[(1) - (2)].String_fifo);
- APPEND_G_FIFO((yyval.String_fifo), create_string_node((yyvsp[(2) - (2)].String)));
+ (yyval.String_fifo) = (yyvsp[-1].String_fifo);
+ APPEND_G_FIFO((yyval.String_fifo), create_string_node((yyvsp[0].String)));
}
+#line 3183 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 283:
-/* Line 1787 of yacc.c */
-#line 1444 "../../ntpd/ntp_parser.y"
+#line 1455 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
(yyval.String_fifo) = NULL;
- APPEND_G_FIFO((yyval.String_fifo), create_string_node((yyvsp[(1) - (1)].String)));
+ APPEND_G_FIFO((yyval.String_fifo), create_string_node((yyvsp[0].String)));
}
+#line 3192 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 284:
-/* Line 1787 of yacc.c */
-#line 1452 "../../ntpd/ntp_parser.y"
+#line 1463 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
- (yyval.Address_fifo) = (yyvsp[(1) - (2)].Address_fifo);
- APPEND_G_FIFO((yyval.Address_fifo), (yyvsp[(2) - (2)].Address_node));
+ (yyval.Address_fifo) = (yyvsp[-1].Address_fifo);
+ APPEND_G_FIFO((yyval.Address_fifo), (yyvsp[0].Address_node));
}
+#line 3201 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 285:
-/* Line 1787 of yacc.c */
-#line 1457 "../../ntpd/ntp_parser.y"
+#line 1468 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
(yyval.Address_fifo) = NULL;
- APPEND_G_FIFO((yyval.Address_fifo), (yyvsp[(1) - (1)].Address_node));
+ APPEND_G_FIFO((yyval.Address_fifo), (yyvsp[0].Address_node));
}
+#line 3210 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 286:
-/* Line 1787 of yacc.c */
-#line 1465 "../../ntpd/ntp_parser.y"
+#line 1476 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
- if ((yyvsp[(1) - (1)].Integer) != 0 && (yyvsp[(1) - (1)].Integer) != 1) {
+ if ((yyvsp[0].Integer) != 0 && (yyvsp[0].Integer) != 1) {
yyerror("Integer value is not boolean (0 or 1). Assuming 1");
(yyval.Integer) = 1;
} else {
- (yyval.Integer) = (yyvsp[(1) - (1)].Integer);
+ (yyval.Integer) = (yyvsp[0].Integer);
}
}
+#line 3223 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 287:
-/* Line 1787 of yacc.c */
-#line 1473 "../../ntpd/ntp_parser.y"
+#line 1484 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{ (yyval.Integer) = 1; }
+#line 3229 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 288:
-/* Line 1787 of yacc.c */
-#line 1474 "../../ntpd/ntp_parser.y"
+#line 1485 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{ (yyval.Integer) = 0; }
+#line 3235 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 289:
-/* Line 1787 of yacc.c */
-#line 1478 "../../ntpd/ntp_parser.y"
- { (yyval.Double) = (double)(yyvsp[(1) - (1)].Integer); }
+#line 1489 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ { (yyval.Double) = (double)(yyvsp[0].Integer); }
+#line 3241 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 291:
-/* Line 1787 of yacc.c */
-#line 1489 "../../ntpd/ntp_parser.y"
+#line 1500 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
sim_node *sn;
- sn = create_sim_node((yyvsp[(3) - (5)].Attr_val_fifo), (yyvsp[(4) - (5)].Sim_server_fifo));
+ sn = create_sim_node((yyvsp[-2].Attr_val_fifo), (yyvsp[-1].Sim_server_fifo));
APPEND_G_FIFO(cfgt.sim_details, sn);
/* Revert from ; to \n for end-of-command */
old_config_style = 1;
}
+#line 3255 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 292:
-/* Line 1787 of yacc.c */
-#line 1506 "../../ntpd/ntp_parser.y"
+#line 1517 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{ old_config_style = 0; }
+#line 3261 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 293:
-/* Line 1787 of yacc.c */
-#line 1511 "../../ntpd/ntp_parser.y"
+#line 1522 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
- (yyval.Attr_val_fifo) = (yyvsp[(1) - (3)].Attr_val_fifo);
- APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[(2) - (3)].Attr_val));
+ (yyval.Attr_val_fifo) = (yyvsp[-2].Attr_val_fifo);
+ APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[-1].Attr_val));
}
+#line 3270 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 294:
-/* Line 1787 of yacc.c */
-#line 1516 "../../ntpd/ntp_parser.y"
+#line 1527 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
(yyval.Attr_val_fifo) = NULL;
- APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[(1) - (2)].Attr_val));
+ APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[-1].Attr_val));
}
+#line 3279 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 295:
-/* Line 1787 of yacc.c */
-#line 1524 "../../ntpd/ntp_parser.y"
- { (yyval.Attr_val) = create_attr_dval((yyvsp[(1) - (3)].Integer), (yyvsp[(3) - (3)].Double)); }
+#line 1535 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ { (yyval.Attr_val) = create_attr_dval((yyvsp[-2].Integer), (yyvsp[0].Double)); }
+#line 3285 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 298:
-/* Line 1787 of yacc.c */
-#line 1534 "../../ntpd/ntp_parser.y"
+#line 1545 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
- (yyval.Sim_server_fifo) = (yyvsp[(1) - (2)].Sim_server_fifo);
- APPEND_G_FIFO((yyval.Sim_server_fifo), (yyvsp[(2) - (2)].Sim_server));
+ (yyval.Sim_server_fifo) = (yyvsp[-1].Sim_server_fifo);
+ APPEND_G_FIFO((yyval.Sim_server_fifo), (yyvsp[0].Sim_server));
}
+#line 3294 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 299:
-/* Line 1787 of yacc.c */
-#line 1539 "../../ntpd/ntp_parser.y"
+#line 1550 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
(yyval.Sim_server_fifo) = NULL;
- APPEND_G_FIFO((yyval.Sim_server_fifo), (yyvsp[(1) - (1)].Sim_server));
+ APPEND_G_FIFO((yyval.Sim_server_fifo), (yyvsp[0].Sim_server));
}
+#line 3303 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 300:
-/* Line 1787 of yacc.c */
-#line 1547 "../../ntpd/ntp_parser.y"
- { (yyval.Sim_server) = ONLY_SIM(create_sim_server((yyvsp[(1) - (5)].Address_node), (yyvsp[(3) - (5)].Double), (yyvsp[(4) - (5)].Sim_script_fifo))); }
+#line 1558 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ { (yyval.Sim_server) = ONLY_SIM(create_sim_server((yyvsp[-4].Address_node), (yyvsp[-2].Double), (yyvsp[-1].Sim_script_fifo))); }
+#line 3309 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 301:
-/* Line 1787 of yacc.c */
-#line 1552 "../../ntpd/ntp_parser.y"
- { (yyval.Double) = (yyvsp[(3) - (4)].Double); }
+#line 1563 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ { (yyval.Double) = (yyvsp[-1].Double); }
+#line 3315 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 302:
-/* Line 1787 of yacc.c */
-#line 1557 "../../ntpd/ntp_parser.y"
- { (yyval.Address_node) = (yyvsp[(3) - (3)].Address_node); }
+#line 1568 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ { (yyval.Address_node) = (yyvsp[0].Address_node); }
+#line 3321 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 303:
-/* Line 1787 of yacc.c */
-#line 1562 "../../ntpd/ntp_parser.y"
+#line 1573 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
- (yyval.Sim_script_fifo) = (yyvsp[(1) - (2)].Sim_script_fifo);
- APPEND_G_FIFO((yyval.Sim_script_fifo), (yyvsp[(2) - (2)].Sim_script));
+ (yyval.Sim_script_fifo) = (yyvsp[-1].Sim_script_fifo);
+ APPEND_G_FIFO((yyval.Sim_script_fifo), (yyvsp[0].Sim_script));
}
+#line 3330 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 304:
-/* Line 1787 of yacc.c */
-#line 1567 "../../ntpd/ntp_parser.y"
+#line 1578 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
(yyval.Sim_script_fifo) = NULL;
- APPEND_G_FIFO((yyval.Sim_script_fifo), (yyvsp[(1) - (1)].Sim_script));
+ APPEND_G_FIFO((yyval.Sim_script_fifo), (yyvsp[0].Sim_script));
}
+#line 3339 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 305:
-/* Line 1787 of yacc.c */
-#line 1575 "../../ntpd/ntp_parser.y"
- { (yyval.Sim_script) = ONLY_SIM(create_sim_script_info((yyvsp[(3) - (6)].Double), (yyvsp[(5) - (6)].Attr_val_fifo))); }
+#line 1586 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ { (yyval.Sim_script) = ONLY_SIM(create_sim_script_info((yyvsp[-3].Double), (yyvsp[-1].Attr_val_fifo))); }
+#line 3345 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 306:
-/* Line 1787 of yacc.c */
-#line 1580 "../../ntpd/ntp_parser.y"
+#line 1591 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
- (yyval.Attr_val_fifo) = (yyvsp[(1) - (3)].Attr_val_fifo);
- APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[(2) - (3)].Attr_val));
+ (yyval.Attr_val_fifo) = (yyvsp[-2].Attr_val_fifo);
+ APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[-1].Attr_val));
}
+#line 3354 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 307:
-/* Line 1787 of yacc.c */
-#line 1585 "../../ntpd/ntp_parser.y"
+#line 1596 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
{
(yyval.Attr_val_fifo) = NULL;
- APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[(1) - (2)].Attr_val));
+ APPEND_G_FIFO((yyval.Attr_val_fifo), (yyvsp[-1].Attr_val));
}
+#line 3363 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
case 308:
-/* Line 1787 of yacc.c */
-#line 1593 "../../ntpd/ntp_parser.y"
- { (yyval.Attr_val) = create_attr_dval((yyvsp[(1) - (3)].Integer), (yyvsp[(3) - (3)].Double)); }
+#line 1604 "../../ntpd/ntp_parser.y" /* yacc.c:1646 */
+ { (yyval.Attr_val) = create_attr_dval((yyvsp[-2].Integer), (yyvsp[0].Double)); }
+#line 3369 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
break;
-/* Line 1787 of yacc.c */
-#line 3600 "ntp_parser.c"
+#line 3373 "../../ntpd/ntp_parser.c" /* yacc.c:1646 */
default: break;
}
/* User semantic actions sometimes alter yychar, and that requires
@@ -3618,7 +3391,7 @@ yyreduce:
*++yyvsp = yyval;
- /* Now `shift' the result of the reduction. Determine what state
+ /* Now 'shift' the result of the reduction. Determine what state
that goes to, based on the state we popped back to and the rule
number reduced by. */
@@ -3633,9 +3406,9 @@ yyreduce:
goto yynewstate;
-/*------------------------------------.
-| yyerrlab -- here on detecting error |
-`------------------------------------*/
+/*--------------------------------------.
+| yyerrlab -- here on detecting error. |
+`--------------------------------------*/
yyerrlab:
/* Make sure we have latest lookahead translation. See comments at
user semantic actions for why this is necessary. */
@@ -3686,20 +3459,20 @@ yyerrlab:
if (yyerrstatus == 3)
{
/* If just tried and failed to reuse lookahead token after an
- error, discard it. */
+ error, discard it. */
if (yychar <= YYEOF)
- {
- /* Return failure if at end of input. */
- if (yychar == YYEOF)
- YYABORT;
- }
+ {
+ /* Return failure if at end of input. */
+ if (yychar == YYEOF)
+ YYABORT;
+ }
else
- {
- yydestruct ("Error: discarding",
- yytoken, &yylval);
- yychar = YYEMPTY;
- }
+ {
+ yydestruct ("Error: discarding",
+ yytoken, &yylval);
+ yychar = YYEMPTY;
+ }
}
/* Else will try to reuse lookahead token after shifting the error
@@ -3718,7 +3491,7 @@ yyerrorlab:
if (/*CONSTCOND*/ 0)
goto yyerrorlab;
- /* Do not reclaim the symbols of the rule which action triggered
+ /* Do not reclaim the symbols of the rule whose action triggered
this YYERROR. */
YYPOPSTACK (yylen);
yylen = 0;
@@ -3731,29 +3504,29 @@ yyerrorlab:
| yyerrlab1 -- common code for both syntax error and YYERROR. |
`-------------------------------------------------------------*/
yyerrlab1:
- yyerrstatus = 3; /* Each real token shifted decrements this. */
+ yyerrstatus = 3; /* Each real token shifted decrements this. */
for (;;)
{
yyn = yypact[yystate];
if (!yypact_value_is_default (yyn))
- {
- yyn += YYTERROR;
- if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
- {
- yyn = yytable[yyn];
- if (0 < yyn)
- break;
- }
- }
+ {
+ yyn += YYTERROR;
+ if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
+ {
+ yyn = yytable[yyn];
+ if (0 < yyn)
+ break;
+ }
+ }
/* Pop the current state because it cannot handle the error token. */
if (yyssp == yyss)
- YYABORT;
+ YYABORT;
yydestruct ("Error: popping",
- yystos[yystate], yyvsp);
+ yystos[yystate], yyvsp);
YYPOPSTACK (1);
yystate = *yyssp;
YY_STACK_PRINT (yyss, yyssp);
@@ -3804,14 +3577,14 @@ yyreturn:
yydestruct ("Cleanup: discarding lookahead",
yytoken, &yylval);
}
- /* Do not reclaim the symbols of the rule which action triggered
+ /* Do not reclaim the symbols of the rule whose action triggered
this YYABORT or YYACCEPT. */
YYPOPSTACK (yylen);
YY_STACK_PRINT (yyss, yyssp);
while (yyssp != yyss)
{
yydestruct ("Cleanup: popping",
- yystos[*yyssp], yyvsp);
+ yystos[*yyssp], yyvsp);
YYPOPSTACK (1);
}
#ifndef yyoverflow
@@ -3822,13 +3595,9 @@ yyreturn:
if (yymsg != yymsgbuf)
YYSTACK_FREE (yymsg);
#endif
- /* Make sure YYID is used. */
- return YYID (yyresult);
+ return yyresult;
}
-
-
-/* Line 2050 of yacc.c */
-#line 1604 "../../ntpd/ntp_parser.y"
+#line 1615 "../../ntpd/ntp_parser.y" /* yacc.c:1906 */
void
diff --git a/contrib/ntp/ntpd/ntp_parser.h b/contrib/ntp/ntpd/ntp_parser.h
index b474fc2..1ec7f8c 100644
--- a/contrib/ntp/ntpd/ntp_parser.h
+++ b/contrib/ntp/ntpd/ntp_parser.h
@@ -1,19 +1,19 @@
-/* A Bison parser, made by GNU Bison 2.7.12-4996. */
+/* A Bison parser, made by GNU Bison 3.0.2. */
/* Bison interface for Yacc-like parsers in C
-
- Copyright (C) 1984, 1989-1990, 2000-2013 Free Software Foundation, Inc.
-
+
+ Copyright (C) 1984, 1989-1990, 2000-2013 Free Software Foundation, Inc.
+
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
-
+
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
-
+
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. */
@@ -26,13 +26,13 @@
special exception, which will cause the skeleton and the resulting
Bison output files to be licensed under the GNU General Public
License without this special exception.
-
+
This special exception was added by the Free Software Foundation in
version 2.2 of Bison. */
-#ifndef YY_YY_NTP_PARSER_H_INCLUDED
-# define YY_YY_NTP_PARSER_H_INCLUDED
-/* Enabling traces. */
+#ifndef YY_YY__NTPD_NTP_PARSER_H_INCLUDED
+# define YY_YY__NTPD_NTP_PARSER_H_INCLUDED
+/* Debug traces. */
#ifndef YYDEBUG
# define YYDEBUG 1
#endif
@@ -40,204 +40,203 @@
extern int yydebug;
#endif
-/* Tokens. */
+/* Token type. */
#ifndef YYTOKENTYPE
# define YYTOKENTYPE
- /* Put the tokens into the symbol table, so that GDB and other debuggers
- know about them. */
- enum yytokentype {
- T_Abbrev = 258,
- T_Age = 259,
- T_All = 260,
- T_Allan = 261,
- T_Allpeers = 262,
- T_Auth = 263,
- T_Autokey = 264,
- T_Automax = 265,
- T_Average = 266,
- T_Bclient = 267,
- T_Beacon = 268,
- T_Broadcast = 269,
- T_Broadcastclient = 270,
- T_Broadcastdelay = 271,
- T_Burst = 272,
- T_Calibrate = 273,
- T_Ceiling = 274,
- T_Clockstats = 275,
- T_Cohort = 276,
- T_ControlKey = 277,
- T_Crypto = 278,
- T_Cryptostats = 279,
- T_Ctl = 280,
- T_Day = 281,
- T_Default = 282,
- T_Digest = 283,
- T_Disable = 284,
- T_Discard = 285,
- T_Dispersion = 286,
- T_Double = 287,
- T_Driftfile = 288,
- T_Drop = 289,
- T_Dscp = 290,
- T_Ellipsis = 291,
- T_Enable = 292,
- T_End = 293,
- T_False = 294,
- T_File = 295,
- T_Filegen = 296,
- T_Filenum = 297,
- T_Flag1 = 298,
- T_Flag2 = 299,
- T_Flag3 = 300,
- T_Flag4 = 301,
- T_Flake = 302,
- T_Floor = 303,
- T_Freq = 304,
- T_Fudge = 305,
- T_Host = 306,
- T_Huffpuff = 307,
- T_Iburst = 308,
- T_Ident = 309,
- T_Ignore = 310,
- T_Incalloc = 311,
- T_Incmem = 312,
- T_Initalloc = 313,
- T_Initmem = 314,
- T_Includefile = 315,
- T_Integer = 316,
- T_Interface = 317,
- T_Intrange = 318,
- T_Io = 319,
- T_Ipv4 = 320,
- T_Ipv4_flag = 321,
- T_Ipv6 = 322,
- T_Ipv6_flag = 323,
- T_Kernel = 324,
- T_Key = 325,
- T_Keys = 326,
- T_Keysdir = 327,
- T_Kod = 328,
- T_Mssntp = 329,
- T_Leapfile = 330,
- T_Leapsmearinterval = 331,
- T_Limited = 332,
- T_Link = 333,
- T_Listen = 334,
- T_Logconfig = 335,
- T_Logfile = 336,
- T_Loopstats = 337,
- T_Lowpriotrap = 338,
- T_Manycastclient = 339,
- T_Manycastserver = 340,
- T_Mask = 341,
- T_Maxage = 342,
- T_Maxclock = 343,
- T_Maxdepth = 344,
- T_Maxdist = 345,
- T_Maxmem = 346,
- T_Maxpoll = 347,
- T_Mdnstries = 348,
- T_Mem = 349,
- T_Memlock = 350,
- T_Minclock = 351,
- T_Mindepth = 352,
- T_Mindist = 353,
- T_Minimum = 354,
- T_Minpoll = 355,
- T_Minsane = 356,
- T_Mode = 357,
- T_Mode7 = 358,
- T_Monitor = 359,
- T_Month = 360,
- T_Mru = 361,
- T_Multicastclient = 362,
- T_Nic = 363,
- T_Nolink = 364,
- T_Nomodify = 365,
- T_Nomrulist = 366,
- T_None = 367,
- T_Nonvolatile = 368,
- T_Nopeer = 369,
- T_Noquery = 370,
- T_Noselect = 371,
- T_Noserve = 372,
- T_Notrap = 373,
- T_Notrust = 374,
- T_Ntp = 375,
- T_Ntpport = 376,
- T_NtpSignDsocket = 377,
- T_Orphan = 378,
- T_Orphanwait = 379,
- T_Panic = 380,
- T_Peer = 381,
- T_Peerstats = 382,
- T_Phone = 383,
- T_Pid = 384,
- T_Pidfile = 385,
- T_Pool = 386,
- T_Port = 387,
- T_Preempt = 388,
- T_Prefer = 389,
- T_Protostats = 390,
- T_Pw = 391,
- T_Randfile = 392,
- T_Rawstats = 393,
- T_Refid = 394,
- T_Requestkey = 395,
- T_Reset = 396,
- T_Restrict = 397,
- T_Revoke = 398,
- T_Rlimit = 399,
- T_Saveconfigdir = 400,
- T_Server = 401,
- T_Setvar = 402,
- T_Source = 403,
- T_Stacksize = 404,
- T_Statistics = 405,
- T_Stats = 406,
- T_Statsdir = 407,
- T_Step = 408,
- T_Stepback = 409,
- T_Stepfwd = 410,
- T_Stepout = 411,
- T_Stratum = 412,
- T_String = 413,
- T_Sys = 414,
- T_Sysstats = 415,
- T_Tick = 416,
- T_Time1 = 417,
- T_Time2 = 418,
- T_Timer = 419,
- T_Timingstats = 420,
- T_Tinker = 421,
- T_Tos = 422,
- T_Trap = 423,
- T_True = 424,
- T_Trustedkey = 425,
- T_Ttl = 426,
- T_Type = 427,
- T_U_int = 428,
- T_Unconfig = 429,
- T_Unpeer = 430,
- T_Version = 431,
- T_WanderThreshold = 432,
- T_Week = 433,
- T_Wildcard = 434,
- T_Xleave = 435,
- T_Year = 436,
- T_Flag = 437,
- T_EOC = 438,
- T_Simulate = 439,
- T_Beep_Delay = 440,
- T_Sim_Duration = 441,
- T_Server_Offset = 442,
- T_Duration = 443,
- T_Freq_Offset = 444,
- T_Wander = 445,
- T_Jitter = 446,
- T_Prop_Delay = 447,
- T_Proc_Delay = 448
- };
+ enum yytokentype
+ {
+ T_Abbrev = 258,
+ T_Age = 259,
+ T_All = 260,
+ T_Allan = 261,
+ T_Allpeers = 262,
+ T_Auth = 263,
+ T_Autokey = 264,
+ T_Automax = 265,
+ T_Average = 266,
+ T_Bclient = 267,
+ T_Beacon = 268,
+ T_Broadcast = 269,
+ T_Broadcastclient = 270,
+ T_Broadcastdelay = 271,
+ T_Burst = 272,
+ T_Calibrate = 273,
+ T_Ceiling = 274,
+ T_Clockstats = 275,
+ T_Cohort = 276,
+ T_ControlKey = 277,
+ T_Crypto = 278,
+ T_Cryptostats = 279,
+ T_Ctl = 280,
+ T_Day = 281,
+ T_Default = 282,
+ T_Digest = 283,
+ T_Disable = 284,
+ T_Discard = 285,
+ T_Dispersion = 286,
+ T_Double = 287,
+ T_Driftfile = 288,
+ T_Drop = 289,
+ T_Dscp = 290,
+ T_Ellipsis = 291,
+ T_Enable = 292,
+ T_End = 293,
+ T_False = 294,
+ T_File = 295,
+ T_Filegen = 296,
+ T_Filenum = 297,
+ T_Flag1 = 298,
+ T_Flag2 = 299,
+ T_Flag3 = 300,
+ T_Flag4 = 301,
+ T_Flake = 302,
+ T_Floor = 303,
+ T_Freq = 304,
+ T_Fudge = 305,
+ T_Host = 306,
+ T_Huffpuff = 307,
+ T_Iburst = 308,
+ T_Ident = 309,
+ T_Ignore = 310,
+ T_Incalloc = 311,
+ T_Incmem = 312,
+ T_Initalloc = 313,
+ T_Initmem = 314,
+ T_Includefile = 315,
+ T_Integer = 316,
+ T_Interface = 317,
+ T_Intrange = 318,
+ T_Io = 319,
+ T_Ipv4 = 320,
+ T_Ipv4_flag = 321,
+ T_Ipv6 = 322,
+ T_Ipv6_flag = 323,
+ T_Kernel = 324,
+ T_Key = 325,
+ T_Keys = 326,
+ T_Keysdir = 327,
+ T_Kod = 328,
+ T_Mssntp = 329,
+ T_Leapfile = 330,
+ T_Leapsmearinterval = 331,
+ T_Limited = 332,
+ T_Link = 333,
+ T_Listen = 334,
+ T_Logconfig = 335,
+ T_Logfile = 336,
+ T_Loopstats = 337,
+ T_Lowpriotrap = 338,
+ T_Manycastclient = 339,
+ T_Manycastserver = 340,
+ T_Mask = 341,
+ T_Maxage = 342,
+ T_Maxclock = 343,
+ T_Maxdepth = 344,
+ T_Maxdist = 345,
+ T_Maxmem = 346,
+ T_Maxpoll = 347,
+ T_Mdnstries = 348,
+ T_Mem = 349,
+ T_Memlock = 350,
+ T_Minclock = 351,
+ T_Mindepth = 352,
+ T_Mindist = 353,
+ T_Minimum = 354,
+ T_Minpoll = 355,
+ T_Minsane = 356,
+ T_Mode = 357,
+ T_Mode7 = 358,
+ T_Monitor = 359,
+ T_Month = 360,
+ T_Mru = 361,
+ T_Multicastclient = 362,
+ T_Nic = 363,
+ T_Nolink = 364,
+ T_Nomodify = 365,
+ T_Nomrulist = 366,
+ T_None = 367,
+ T_Nonvolatile = 368,
+ T_Nopeer = 369,
+ T_Noquery = 370,
+ T_Noselect = 371,
+ T_Noserve = 372,
+ T_Notrap = 373,
+ T_Notrust = 374,
+ T_Ntp = 375,
+ T_Ntpport = 376,
+ T_NtpSignDsocket = 377,
+ T_Orphan = 378,
+ T_Orphanwait = 379,
+ T_Panic = 380,
+ T_Peer = 381,
+ T_Peerstats = 382,
+ T_Phone = 383,
+ T_Pid = 384,
+ T_Pidfile = 385,
+ T_Pool = 386,
+ T_Port = 387,
+ T_Preempt = 388,
+ T_Prefer = 389,
+ T_Protostats = 390,
+ T_Pw = 391,
+ T_Randfile = 392,
+ T_Rawstats = 393,
+ T_Refid = 394,
+ T_Requestkey = 395,
+ T_Reset = 396,
+ T_Restrict = 397,
+ T_Revoke = 398,
+ T_Rlimit = 399,
+ T_Saveconfigdir = 400,
+ T_Server = 401,
+ T_Setvar = 402,
+ T_Source = 403,
+ T_Stacksize = 404,
+ T_Statistics = 405,
+ T_Stats = 406,
+ T_Statsdir = 407,
+ T_Step = 408,
+ T_Stepback = 409,
+ T_Stepfwd = 410,
+ T_Stepout = 411,
+ T_Stratum = 412,
+ T_String = 413,
+ T_Sys = 414,
+ T_Sysstats = 415,
+ T_Tick = 416,
+ T_Time1 = 417,
+ T_Time2 = 418,
+ T_Timer = 419,
+ T_Timingstats = 420,
+ T_Tinker = 421,
+ T_Tos = 422,
+ T_Trap = 423,
+ T_True = 424,
+ T_Trustedkey = 425,
+ T_Ttl = 426,
+ T_Type = 427,
+ T_U_int = 428,
+ T_Unconfig = 429,
+ T_Unpeer = 430,
+ T_Version = 431,
+ T_WanderThreshold = 432,
+ T_Week = 433,
+ T_Wildcard = 434,
+ T_Xleave = 435,
+ T_Year = 436,
+ T_Flag = 437,
+ T_EOC = 438,
+ T_Simulate = 439,
+ T_Beep_Delay = 440,
+ T_Sim_Duration = 441,
+ T_Server_Offset = 442,
+ T_Duration = 443,
+ T_Freq_Offset = 444,
+ T_Wander = 445,
+ T_Jitter = 446,
+ T_Prop_Delay = 447,
+ T_Proc_Delay = 448
+ };
#endif
/* Tokens. */
#define T_Abbrev 258
@@ -432,13 +431,12 @@ extern int yydebug;
#define T_Prop_Delay 447
#define T_Proc_Delay 448
-
-
+/* Value type. */
#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
-typedef union YYSTYPE
+typedef union YYSTYPE YYSTYPE;
+union YYSTYPE
{
-/* Line 2053 of yacc.c */
-#line 51 "../../ntpd/ntp_parser.y"
+#line 51 "../../ntpd/ntp_parser.y" /* yacc.c:1909 */
char * String;
double Double;
@@ -457,29 +455,15 @@ typedef union YYSTYPE
script_info * Sim_script;
script_info_fifo * Sim_script_fifo;
-
-/* Line 2053 of yacc.c */
-#line 463 "ntp_parser.h"
-} YYSTYPE;
+#line 459 "../../ntpd/ntp_parser.h" /* yacc.c:1909 */
+};
# define YYSTYPE_IS_TRIVIAL 1
-# define yystype YYSTYPE /* obsolescent; will be withdrawn */
# define YYSTYPE_IS_DECLARED 1
#endif
+
extern YYSTYPE yylval;
-#ifdef YYPARSE_PARAM
-#if defined __STDC__ || defined __cplusplus
-int yyparse (void *YYPARSE_PARAM);
-#else
-int yyparse ();
-#endif
-#else /* ! YYPARSE_PARAM */
-#if defined __STDC__ || defined __cplusplus
int yyparse (void);
-#else
-int yyparse ();
-#endif
-#endif /* ! YYPARSE_PARAM */
-#endif /* !YY_YY_NTP_PARSER_H_INCLUDED */
+#endif /* !YY_YY__NTPD_NTP_PARSER_H_INCLUDED */
diff --git a/contrib/ntp/ntpd/ntp_peer.c b/contrib/ntp/ntpd/ntp_peer.c
index d42d804..cc23a38 100644
--- a/contrib/ntp/ntpd/ntp_peer.c
+++ b/contrib/ntp/ntpd/ntp_peer.c
@@ -718,9 +718,13 @@ refresh_all_peerinterfaces(void)
/*
* this is called when the interface list has changed
* give all peers a chance to find a better interface
+ * but only if either they don't have an address already
+ * or if the one they have hasn't worked for a while.
*/
- for (p = peer_list; p != NULL; p = p->p_link)
- peer_refresh_interface(p);
+ for (p = peer_list; p != NULL; p = p->p_link) {
+ if (!(p->dstadr && (p->reach & 0x3))) // Bug 2849 XOR 2043
+ peer_refresh_interface(p);
+ }
}
@@ -746,6 +750,8 @@ newpeer(
struct peer * peer;
u_int hash;
+ DEBUG_REQUIRE(srcadr);
+
#ifdef AUTOKEY
/*
* If Autokey is requested but not configured, complain loudly.
@@ -764,7 +770,7 @@ newpeer(
/*
* For now only pool associations have a hostname.
*/
- NTP_INSIST(NULL == hostname || (MDF_POOL & cast_flags));
+ INSIST(NULL == hostname || (MDF_POOL & cast_flags));
/*
* First search from the beginning for an association with given
@@ -817,6 +823,7 @@ newpeer(
if (peer_free_count == 0)
getmorepeermem();
UNLINK_HEAD_SLIST(peer, peer_free, p_link);
+ INSIST(peer != NULL);
peer_free_count--;
peer_associations++;
if (FLAG_PREEMPT & flags)
diff --git a/contrib/ntp/ntpd/ntp_proto.c b/contrib/ntp/ntpd/ntp_proto.c
index 4062406..2a15d72 100644
--- a/contrib/ntp/ntpd/ntp_proto.c
+++ b/contrib/ntp/ntpd/ntp_proto.c
@@ -28,8 +28,8 @@
* This macro defines the authentication state. If x is 1 authentication
* is required; othewise it is optional.
*/
-#define AUTH(x, y) ((x) ? (y) == AUTH_OK : (y) == AUTH_OK || \
- (y) == AUTH_NONE)
+#define AUTH(x, y) ((x) ? (y) == AUTH_OK \
+ : (y) == AUTH_OK || (y) == AUTH_NONE)
#define AUTH_NONE 0 /* authentication not required */
#define AUTH_OK 1 /* authentication OK */
@@ -37,6 +37,19 @@
#define AUTH_CRYPTO 3 /* crypto_NAK */
/*
+ * Set up Kiss Code values
+ */
+
+enum kiss_codes {
+ NOKISS, /* No Kiss Code */
+ RATEKISS, /* Rate limit Kiss Code */
+ DENYKISS, /* Deny Kiss */
+ RSTRKISS, /* Restricted Kiss */
+ XKISS, /* Experimental Kiss */
+ UNKNOWNKISS /* Unknown Kiss Code */
+};
+
+/*
* traffic shaping parameters
*/
#define NTP_IBURST 6 /* packets in iburst */
@@ -139,6 +152,7 @@ u_long sys_declined; /* declined */
u_long sys_limitrejected; /* rate exceeded */
u_long sys_kodsent; /* KoD sent */
+static int kiss_code_check(u_char hisleap, u_char hisstratum, u_char hismode, u_int32 refid);
static double root_distance (struct peer *);
static void clock_combine (peer_select *, int, int);
static void peer_xmit (struct peer *);
@@ -185,7 +199,34 @@ set_sys_leap(u_char new_sys_leap) {
}
}
+/*
+ * Kiss Code check
+ */
+int kiss_code_check(u_char hisleap, u_char hisstratum, u_char hismode, u_int32 refid) {
+ if ( hismode == MODE_SERVER
+ && hisleap == LEAP_NOTINSYNC
+ && hisstratum == STRATUM_UNSPEC) {
+ if(memcmp(&refid,"RATE", 4) == 0) {
+ return (RATEKISS);
+ }
+ else if(memcmp(&refid,"DENY", 4) == 0) {
+ return (DENYKISS);
+ }
+ else if(memcmp(&refid,"RSTR", 4) == 0) {
+ return (RSTRKISS);
+ }
+ else if(memcmp(&refid,"X", 1) == 0) {
+ return (XKISS);
+ }
+ else {
+ return (UNKNOWNKISS);
+ }
+ }
+ else {
+ return (NOKISS);
+ }
+}
/*
* transmit - transmit procedure called by poll timeout
*/
@@ -235,8 +276,8 @@ transmit(
peer->unreach = 0;
peer->ttl = 0;
peer_xmit(peer);
- } else if (sys_survivors < sys_minclock ||
- peer_associations < sys_maxclock) {
+ } else if ( sys_survivors < sys_minclock
+ || peer_associations < sys_maxclock) {
if (peer->ttl < (u_int32)sys_ttlmax)
peer->ttl++;
peer_xmit(peer);
@@ -260,9 +301,9 @@ transmit(
*/
if (peer->cast_flags & MDF_POOL) {
peer->outdate = current_time;
- if ((peer_associations <= 2 * sys_maxclock) &&
- (peer_associations < sys_maxclock ||
- sys_survivors < sys_minclock))
+ if ( (peer_associations <= 2 * sys_maxclock)
+ && ( peer_associations < sys_maxclock
+ || sys_survivors < sys_minclock))
pool_xmit(peer);
poll_update(peer, hpoll);
return;
@@ -297,8 +338,8 @@ transmit(
peer_unfit(peer);
report_event(PEVNT_UNREACH, peer, NULL);
}
- if ((peer->flags & FLAG_IBURST) &&
- peer->retry == 0)
+ if ( (peer->flags & FLAG_IBURST)
+ && peer->retry == 0)
peer->retry = NTP_RETRY;
} else {
@@ -312,8 +353,9 @@ transmit(
hpoll = sys_poll;
if (!(peer->flags & FLAG_PREEMPT))
peer->unreach = 0;
- if ((peer->flags & FLAG_BURST) && peer->retry ==
- 0 && !peer_unfit(peer))
+ if ( (peer->flags & FLAG_BURST)
+ && peer->retry == 0
+ && !peer_unfit(peer))
peer->retry = NTP_RETRY;
}
@@ -334,9 +376,9 @@ transmit(
unpeer(peer);
return;
}
- if ((peer->flags & FLAG_PREEMPT) &&
- (peer_associations > sys_maxclock) &&
- score_all(peer)) {
+ if ( (peer->flags & FLAG_PREEMPT)
+ && (peer_associations > sys_maxclock)
+ && score_all(peer)) {
report_event(PEVNT_RESTART, peer, "timeout");
peer_clear(peer, "TIME");
unpeer(peer);
@@ -392,6 +434,7 @@ receive(
u_char hismode; /* packet mode */
u_char hisstratum; /* packet stratum */
u_short restrict_mask; /* restrict bits */
+ int kissCode = NOKISS; /* Kiss Code */
int has_mac; /* length of MAC field */
int authlen; /* offset of MAC field */
int is_authentic = 0; /* cryptosum ok */
@@ -483,8 +526,8 @@ receive(
*/
if (hisversion == NTP_VERSION) {
sys_newversion++; /* new version */
- } else if (!(restrict_mask & RES_VERSION) && hisversion >=
- NTP_OLDVERSION) {
+ } else if ( !(restrict_mask & RES_VERSION)
+ && hisversion >= NTP_OLDVERSION) {
sys_oldversion++; /* previous version */
} else {
sys_badlength++;
@@ -538,8 +581,9 @@ receive(
} else {
opcode = ntohl(((u_int32 *)pkt)[authlen / 4]);
len = opcode & 0xffff;
- if (len % 4 != 0 || len < 4 || (int)len +
- authlen > rbufp->recv_length) {
+ if ( len % 4 != 0
+ || len < 4
+ || (int)len + authlen > rbufp->recv_length) {
sys_badlength++;
return; /* bad length */
}
@@ -549,13 +593,13 @@ receive(
* sys_groupname is non-NULL, there must be
* a group name provided to elicit a response.
*/
- if ((opcode & 0x3fff0000) == CRYPTO_ASSOC &&
- sys_groupname != NULL) {
+ if ( (opcode & 0x3fff0000) == CRYPTO_ASSOC
+ && sys_groupname != NULL) {
ep = (struct exten *)&((u_int32 *)pkt)[authlen / 4];
hostlen = ntohl(ep->vallen);
- if (hostlen >= sizeof(hostname) ||
- hostlen > len -
- offsetof(struct exten, pkt)) {
+ if ( hostlen >= sizeof(hostname)
+ || hostlen > len -
+ offsetof(struct exten, pkt)) {
sys_badlength++;
return; /* bad length */
}
@@ -599,8 +643,9 @@ receive(
restrict_mask = ntp_monitor(rbufp, restrict_mask);
if (restrict_mask & RES_LIMITED) {
sys_limitrejected++;
- if (!(restrict_mask & RES_KOD) || MODE_BROADCAST ==
- hismode || MODE_SERVER == hismode) {
+ if ( !(restrict_mask & RES_KOD)
+ || MODE_BROADCAST == hismode
+ || MODE_SERVER == hismode) {
if (MODE_SERVER == hismode)
DPRINTF(1, ("Possibly self-induced rate limiting of MODE_SERVER from %s\n",
stoa(&rbufp->recv_srcadr)));
@@ -698,10 +743,11 @@ receive(
* This is described in Microsoft's WSPP docs, in MS-SNTP:
* http://msdn.microsoft.com/en-us/library/cc212930.aspx
*/
- } else if (has_mac == MAX_MD5_LEN && (restrict_mask & RES_MSSNTP) &&
- (retcode == AM_FXMIT || retcode == AM_NEWPASS) &&
- (memcmp(zero_key, (char *)pkt + authlen + 4, MAX_MD5_LEN - 4) ==
- 0)) {
+ } else if ( has_mac == MAX_MD5_LEN
+ && (restrict_mask & RES_MSSNTP)
+ && (retcode == AM_FXMIT || retcode == AM_NEWPASS)
+ && (memcmp(zero_key, (char *)pkt + authlen + 4,
+ MAX_MD5_LEN - 4) == 0)) {
is_authentic = AUTH_NONE;
#endif /* HAVE_NTP_SIGND */
@@ -754,8 +800,9 @@ receive(
* mobilized. However, if this is from
* the wildcard interface, game over.
*/
- if (crypto_flags && rbufp->dstadr ==
- ANY_INTERFACE_CHOOSE(&rbufp->recv_srcadr)) {
+ if ( crypto_flags
+ && rbufp->dstadr ==
+ ANY_INTERFACE_CHOOSE(&rbufp->recv_srcadr)) {
sys_restricted++;
return; /* no wildcard */
}
@@ -882,10 +929,10 @@ receive(
* stratum is greater than the manycaster or the
* manycaster has already synchronized to us.
*/
- if (sys_leap == LEAP_NOTINSYNC || sys_stratum >=
- hisstratum || (!sys_cohort && sys_stratum ==
- hisstratum + 1) || rbufp->dstadr->addr_refid ==
- pkt->refid) {
+ if ( sys_leap == LEAP_NOTINSYNC
+ || sys_stratum >= hisstratum
+ || (!sys_cohort && sys_stratum == hisstratum + 1)
+ || rbufp->dstadr->addr_refid == pkt->refid) {
sys_declined++;
return; /* no help */
}
@@ -933,9 +980,10 @@ receive(
sys_restricted++;
return; /* not enabled */
}
- if (!AUTH((!(peer2->cast_flags & MDF_POOL) &&
- sys_authenticate) | (restrict_mask & (RES_NOPEER |
- RES_DONTTRUST)), is_authentic)) {
+ if (!AUTH( (!(peer2->cast_flags & MDF_POOL)
+ && sys_authenticate)
+ || (restrict_mask & (RES_NOPEER |
+ RES_DONTTRUST)), is_authentic)) {
sys_restricted++;
return; /* access denied */
}
@@ -944,8 +992,9 @@ receive(
* Do not respond if unsynchronized or stratum is below
* the floor or at or above the ceiling.
*/
- if (hisleap == LEAP_NOTINSYNC || hisstratum <
- sys_floor || hisstratum >= sys_ceiling) {
+ if ( hisleap == LEAP_NOTINSYNC
+ || hisstratum < sys_floor
+ || hisstratum >= sys_ceiling) {
sys_declined++;
return; /* no help */
}
@@ -1007,8 +1056,9 @@ receive(
* Do not respond if unsynchronized or stratum is below
* the floor or at or above the ceiling.
*/
- if (hisleap == LEAP_NOTINSYNC || hisstratum <
- sys_floor || hisstratum >= sys_ceiling) {
+ if ( hisleap == LEAP_NOTINSYNC
+ || hisstratum < sys_floor
+ || hisstratum >= sys_ceiling) {
sys_declined++;
return; /* no help */
}
@@ -1018,8 +1068,8 @@ receive(
* Do not respond if Autokey and the opcode is not a
* CRYPTO_ASSOC response with association ID.
*/
- if (crypto_flags && skeyid > NTP_MAXKEY && (opcode &
- 0xffff0000) != (CRYPTO_ASSOC | CRYPTO_RESP)) {
+ if ( crypto_flags && skeyid > NTP_MAXKEY
+ && (opcode & 0xffff0000) != (CRYPTO_ASSOC | CRYPTO_RESP)) {
sys_declined++;
return; /* protocol error */
}
@@ -1133,6 +1183,24 @@ receive(
sys_restricted++;
return;
}
+ /* [Bug 2941]
+ * If we got here, the packet isn't part of an
+ * existing association, it isn't correctly
+ * authenticated, and it didn't meet either of
+ * the previous two special cases so we should
+ * just drop it on the floor. For example,
+ * crypto-NAKs (is_authentic == AUTH_CRYPTO)
+ * will make it this far. This is just
+ * debug-printed and not logged to avoid log
+ * flooding.
+ */
+ DPRINTF(1, ("receive: at %ld refusing to mobilize passive association"
+ " with unknown peer %s mode %d keyid %08x len %d auth %d\n",
+ current_time, stoa(&rbufp->recv_srcadr),
+ hismode, skeyid, (authlen + has_mac),
+ is_authentic));
+ sys_declined++;
+ return;
}
/*
@@ -1145,8 +1213,8 @@ receive(
* we will spin an ephemeral association in response to
* MODE_ACTIVE KoDs, which will time out eventually.
*/
- if (hisleap != LEAP_NOTINSYNC && (hisstratum <
- sys_floor || hisstratum >= sys_ceiling)) {
+ if ( hisleap != LEAP_NOTINSYNC
+ && (hisstratum < sys_floor || hisstratum >= sys_ceiling)) {
sys_declined++;
return; /* no help */
}
@@ -1205,9 +1273,9 @@ receive(
* have a public key ID; if not, the packet must have a
* symmetric key ID.
*/
- if (is_authentic != AUTH_CRYPTO && (((peer->flags &
- FLAG_SKEY) && skeyid <= NTP_MAXKEY) || (!(peer->flags &
- FLAG_SKEY) && skeyid > NTP_MAXKEY))) {
+ if ( is_authentic != AUTH_CRYPTO
+ && ( ((peer->flags & FLAG_SKEY) && skeyid <= NTP_MAXKEY)
+ || (!(peer->flags & FLAG_SKEY) && skeyid > NTP_MAXKEY))) {
sys_badauth++;
return;
}
@@ -1256,16 +1324,23 @@ receive(
* Check for bogus packet in basic mode. If found, switch to
* interleaved mode and resynchronize, but only after confirming
* the packet is not bogus in symmetric interleaved mode.
+ *
+ * This could also mean somebody is forging packets claiming to
+ * be from us, attempting to cause our server to KoD us.
*/
} else if (peer->flip == 0) {
if (!L_ISEQU(&p_org, &peer->aorg)) {
peer->bogusorg++;
peer->flash |= TEST2; /* bogus */
- if (!L_ISZERO(&peer->dst) && L_ISEQU(&p_org,
- &peer->dst)) {
+ msyslog(LOG_INFO,
+ "receive: Unexpected origin timestamp from %s",
+ ntoa(&peer->srcadr));
+ if ( !L_ISZERO(&peer->dst)
+ && L_ISEQU(&p_org, &peer->dst)) {
peer->flip = 1;
report_event(PEVNT_XLEAVE, peer, NULL);
}
+ return; /* Bogus packet, we are done */
} else {
L_CLR(&peer->aorg);
}
@@ -1282,11 +1357,12 @@ receive(
* can happen if a packet is lost, duplicated or crossed. If
* found, flip and resynchronize.
*/
- } else if (!L_ISZERO(&peer->dst) && !L_ISEQU(&p_org,
- &peer->dst)) {
+ } else if ( !L_ISZERO(&peer->dst)
+ && !L_ISEQU(&p_org, &peer->dst)) {
peer->bogusorg++;
peer->flags |= FLAG_XBOGUS;
peer->flash |= TEST2; /* bogus */
+ return; /* Bogus packet, we are done */
}
/*
@@ -1321,8 +1397,8 @@ receive(
report_event(PEVNT_AUTH, peer, "digest");
peer->flash |= TEST5; /* bad auth */
peer->badauth++;
- if (has_mac &&
- (hismode == MODE_ACTIVE || hismode == MODE_PASSIVE))
+ if ( has_mac
+ && (hismode == MODE_ACTIVE || hismode == MODE_PASSIVE))
fast_xmit(rbufp, MODE_ACTIVE, 0, restrict_mask);
if (peer->flags & FLAG_PREEMPT) {
unpeer(peer);
@@ -1351,11 +1427,22 @@ receive(
* this maximum and advance the headway to give the sender some
* headroom. Very intricate.
*/
+
+ /*
+ * Check for any kiss codes. Note this is only used when a server
+ * responds to a packet request
+ */
+
+ kissCode = kiss_code_check(hisleap, hisstratum, hismode, pkt->refid);
+
+ /*
+ * Check to see if this is a RATE Kiss Code
+ * Currently this kiss code will accept whatever poll
+ * rate that the server sends
+ */
peer->ppoll = max(peer->minpoll, pkt->ppoll);
- if (hismode == MODE_SERVER && hisleap == LEAP_NOTINSYNC &&
- hisstratum == STRATUM_UNSPEC && memcmp(&pkt->refid,
- "RATE", 4) == 0) {
- peer->selbroken++;
+ if (kissCode == RATEKISS) {
+ peer->selbroken++; /* Increment the KoD count */
report_event(PEVNT_RATE, peer, NULL);
if (pkt->ppoll > peer->minpoll)
peer->minpoll = peer->ppoll;
@@ -1364,6 +1451,11 @@ receive(
poll_update(peer, pkt->ppoll);
return; /* kiss-o'-death */
}
+ if (kissCode != NOKISS) {
+ peer->selbroken++; /* Increment the KoD count */
+ return; /* Drop any other kiss code packets */
+ }
+
/*
* That was hard and I am sweaty, but the packet is squeaky
@@ -1455,8 +1547,8 @@ receive(
int i;
for (i = 0; ; i++) {
- if (tkeyid == peer->pkeyid ||
- tkeyid == ap->key) {
+ if ( tkeyid == peer->pkeyid
+ || tkeyid == ap->key) {
peer->flash &= ~TEST8;
peer->pkeyid = skeyid;
ap->seq -= i;
@@ -1589,8 +1681,8 @@ process_packet(
* Verify the server is synchronized; that is, the leap bits,
* stratum and root distance are valid.
*/
- if (pleap == LEAP_NOTINSYNC || /* test 6 */
- pstratum < sys_floor || pstratum >= sys_ceiling)
+ if ( pleap == LEAP_NOTINSYNC /* test 6 */
+ || pstratum < sys_floor || pstratum >= sys_ceiling)
peer->flash |= TEST6; /* bad synch or strat */
if (p_del / 2 + p_disp >= MAXDISPERSE) /* test 7 */
peer->flash |= TEST7; /* bad header */
@@ -1823,8 +1915,9 @@ process_packet(
* client mode when the client is fit and the autokey dance is
* complete.
*/
- if ((FLAG_BC_VOL & peer->flags) && MODE_CLIENT == peer->hmode &&
- !(TEST11 & peer_unfit(peer))) { /* distance exceeded */
+ if ( (FLAG_BC_VOL & peer->flags)
+ && MODE_CLIENT == peer->hmode
+ && !(TEST11 & peer_unfit(peer))) { /* distance exceeded */
#ifdef AUTOKEY
if (peer->flags & FLAG_SKEY) {
if (!(~peer->crypto & CRYPTO_FLAG_ALL))
@@ -1865,8 +1958,8 @@ clock_update(
sys_poll = peer->maxpoll;
poll_update(peer, sys_poll);
sys_stratum = min(peer->stratum + 1, STRATUM_UNSPEC);
- if (peer->stratum == STRATUM_REFCLOCK ||
- peer->stratum == STRATUM_UNSPEC)
+ if ( peer->stratum == STRATUM_REFCLOCK
+ || peer->stratum == STRATUM_UNSPEC)
sys_refid = peer->refid;
else
sys_refid = addr2refid(&peer->srcadr);
@@ -1992,12 +2085,12 @@ clock_update(
* once is mostly harmless.)
*/
if (leapsec == LSPROX_NOWARN) {
- if (leap_vote_ins > leap_vote_del
+ if ( leap_vote_ins > leap_vote_del
&& leap_vote_ins > sys_survivors / 2) {
get_systime(&now);
leapsec_add_dyn(TRUE, now.l_ui, NULL);
}
- if (leap_vote_del > leap_vote_ins
+ if ( leap_vote_del > leap_vote_ins
&& leap_vote_del > sys_survivors / 2) {
get_systime(&now);
leapsec_add_dyn(FALSE, now.l_ui, NULL);
@@ -2320,8 +2413,8 @@ clock_filter(
m = 0;
for (i = 0; i < NTP_SHIFT; i++) {
peer->filter_order[i] = (u_char) ord[i];
- if (dst[i] >= MAXDISPERSE || (m >= 2 && dst[i] >=
- sys_maxdist))
+ if ( dst[i] >= MAXDISPERSE
+ || (m >= 2 && dst[i] >= sys_maxdist))
continue;
m++;
}
@@ -2367,10 +2460,11 @@ clock_filter(
* than twice the host poll interval, consider the new sample
* a popcorn spike and ignore it.
*/
- if (peer->disp < sys_maxdist && peer->filter_disp[k] <
- sys_maxdist && etemp > CLOCK_SGATE * peer->jitter &&
- peer->filter_epoch[k] - peer->epoch < 2. *
- ULOGTOD(peer->hpoll)) {
+ if ( peer->disp < sys_maxdist
+ && peer->filter_disp[k] < sys_maxdist
+ && etemp > CLOCK_SGATE * peer->jitter
+ && peer->filter_epoch[k] - peer->epoch
+ < 2. * ULOGTOD(peer->hpoll)) {
snprintf(tbuf, sizeof(tbuf), "%.6f s", etemp);
report_event(PEVNT_POPCORN, peer, tbuf);
return;
@@ -2547,14 +2641,14 @@ clock_select(void)
if (!(peer->flags & FLAG_PREFER)) {
switch (peer->refclktype) {
case REFCLK_LOCALCLOCK:
- if (current_time > orphwait &&
- typelocal == NULL)
+ if ( current_time > orphwait
+ && typelocal == NULL)
typelocal = peer;
continue;
case REFCLK_ACTS:
- if (current_time > orphwait &&
- typeacts == NULL)
+ if ( current_time > orphwait
+ && typeacts == NULL)
typeacts = peer;
continue;
}
@@ -2684,8 +2778,10 @@ clock_select(void)
peer = peers[i].peer;
h = peers[i].synch;
- if ((high <= low || peer->offset + h < low ||
- peer->offset - h > high) && !(peer->flags & FLAG_TRUE))
+ if (( high <= low
+ || peer->offset + h < low
+ || peer->offset - h > high
+ ) && !(peer->flags & FLAG_TRUE))
continue;
#ifdef REFCLOCK
@@ -2742,7 +2838,7 @@ clock_select(void)
}
/*
- * Now, vote outlyers off the island by select jitter weighted
+ * Now, vote outliers off the island by select jitter weighted
* by root distance. Continue voting as long as there are more
* than sys_minclock survivors and the select jitter of the peer
* with the worst metric is greater than the minimum peer
@@ -2772,8 +2868,9 @@ clock_select(void)
}
}
g = max(g, LOGTOD(sys_precision));
- if (nlist <= max(1, sys_minclock) || g <= d ||
- ((FLAG_TRUE | FLAG_PREFER) & peers[k].peer->flags))
+ if ( nlist <= max(1, sys_minclock)
+ || g <= d
+ || ((FLAG_TRUE | FLAG_PREFER) & peers[k].peer->flags))
break;
DPRINTF(3, ("select: drop %s seljit %.6f jit %.6f\n",
@@ -2898,10 +2995,12 @@ clock_select(void)
* if there is a prefer peer or there are no survivors and none
* are required.
*/
- if (typepps != NULL && fabs(sys_offset) < 0.4 &&
- (typepps->refclktype != REFCLK_ATOM_PPS ||
- (typepps->refclktype == REFCLK_ATOM_PPS && (sys_prefer !=
- NULL || (typesystem == NULL && sys_minsane == 0))))) {
+ if ( typepps != NULL
+ && fabs(sys_offset) < 0.4
+ && ( typepps->refclktype != REFCLK_ATOM_PPS
+ || ( typepps->refclktype == REFCLK_ATOM_PPS
+ && ( sys_prefer != NULL
+ || (typesystem == NULL && sys_minsane == 0))))) {
typesystem = typepps;
sys_clockhop = 0;
typesystem->new_status = CTL_PST_SEL_PPS;
@@ -3240,16 +3339,16 @@ peer_xmit(
* autokey sequence, the autokey exchange is
* used to retrieve the autokey values.
*/
- else if (sys_leap != LEAP_NOTINSYNC &&
- peer->leap != LEAP_NOTINSYNC &&
- !(peer->crypto & CRYPTO_FLAG_COOK))
+ else if ( sys_leap != LEAP_NOTINSYNC
+ && peer->leap != LEAP_NOTINSYNC
+ && !(peer->crypto & CRYPTO_FLAG_COOK))
exten = crypto_args(peer, CRYPTO_COOK,
peer->associd, NULL);
else if (!(peer->crypto & CRYPTO_FLAG_AUTO))
exten = crypto_args(peer, CRYPTO_AUTO,
peer->associd, NULL);
- else if (peer->flags & FLAG_ASSOC &&
- peer->crypto & CRYPTO_FLAG_SIGN)
+ else if ( peer->flags & FLAG_ASSOC
+ && peer->crypto & CRYPTO_FLAG_SIGN)
exten = crypto_args(peer, CRYPTO_AUTO |
CRYPTO_RESP, peer->assoc, NULL);
@@ -3693,7 +3792,7 @@ pool_xmit(
pool->hostname));
else
msyslog(LOG_ERR,
- "unable to start pool DNS %s %m",
+ "unable to start pool DNS %s: %m",
pool->hostname);
return;
}
@@ -3883,8 +3982,9 @@ peer_unfit(
* synchronized, (2) the server stratum is below the floor or
* greater than or equal to the ceiling.
*/
- if (peer->leap == LEAP_NOTINSYNC || peer->stratum < sys_floor ||
- peer->stratum >= sys_ceiling)
+ if ( peer->leap == LEAP_NOTINSYNC
+ || peer->stratum < sys_floor
+ || peer->stratum >= sys_ceiling)
rval |= TEST10; /* bad synch or stratum */
/*
@@ -3892,8 +3992,9 @@ peer_unfit(
* distance is greater than or equal to the distance threshold
* plus the increment due to one host poll interval.
*/
- if (!(peer->flags & FLAG_REFCLOCK) && root_distance(peer) >=
- sys_maxdist + clock_phi * ULOGTOD(peer->hpoll))
+ if ( !(peer->flags & FLAG_REFCLOCK)
+ && root_distance(peer) >= sys_maxdist
+ + clock_phi * ULOGTOD(peer->hpoll))
rval |= TEST11; /* distance exceeded */
/*
diff --git a/contrib/ntp/ntpd/ntp_refclock.c b/contrib/ntp/ntpd/ntp_refclock.c
index f0e9b9e..1f16ca7 100644
--- a/contrib/ntp/ntpd/ntp_refclock.c
+++ b/contrib/ntp/ntpd/ntp_refclock.c
@@ -1049,7 +1049,7 @@ refclock_control(
if (NULL == peer)
return;
- NTP_INSIST(peer->procptr != NULL);
+ INSIST(peer->procptr != NULL);
pp = peer->procptr;
/*
diff --git a/contrib/ntp/ntpd/ntp_request.c b/contrib/ntp/ntpd/ntp_request.c
index 8ffebad..6073f99 100644
--- a/contrib/ntp/ntpd/ntp_request.c
+++ b/contrib/ntp/ntpd/ntp_request.c
@@ -1757,10 +1757,12 @@ do_restrict(
}
/*
- * Looks okay, try it out
+ * Looks okay, try it out. Needs to reload data pointer and
+ * item counter. (Talos-CAN-0052)
*/
ZERO_SOCK(&matchaddr);
ZERO_SOCK(&matchmask);
+ items = INFO_NITEMS(inpkt->err_nitems);
datap = inpkt->u.data;
while (items-- > 0) {
@@ -1917,9 +1919,11 @@ reset_peer(
}
/*
- * Now do it in earnest.
+ * Now do it in earnest. Needs to reload data pointer and item
+ * counter. (Talos-CAN-0052)
*/
-
+
+ items = INFO_NITEMS(inpkt->err_nitems);
datap = inpkt->u.data;
while (items-- > 0) {
ZERO(cp);
diff --git a/contrib/ntp/ntpd/ntp_restrict.c b/contrib/ntp/ntpd/ntp_restrict.c
index 9948d54..82bbaef 100644
--- a/contrib/ntp/ntpd/ntp_restrict.c
+++ b/contrib/ntp/ntpd/ntp_restrict.c
@@ -173,7 +173,7 @@ alloc_res4(void)
LINK_SLIST(resfree4, res, link);
res = (void *)((char *)res - cb);
}
- NTP_INSIST(rl == res);
+ INSIST(rl == res);
/* allocate the first */
return res;
}
@@ -199,7 +199,7 @@ alloc_res6(void)
LINK_SLIST(resfree6, res, link);
res = (void *)((char *)res - cb);
}
- NTP_INSIST(rl == res);
+ INSIST(rl == res);
/* allocate the first */
return res;
}
@@ -223,7 +223,7 @@ free_res(
else
plisthead = &restrictlist4;
UNLINK_SLIST(unlinked, *plisthead, res, link, restrict_u);
- NTP_INSIST(unlinked == res);
+ INSIST(unlinked == res);
if (v6) {
zero_mem(res, V6_SIZEOF_RESTRICT_U);
@@ -291,7 +291,7 @@ match_restrict6_addr(
for (res = restrictlist6; res != NULL; res = next) {
next = res->link;
- NTP_INSIST(next != res);
+ INSIST(next != res);
if (res->expire &&
res->expire <= current_time)
free_res(res, v6);
@@ -435,6 +435,9 @@ restrictions(
match = match_restrict4_addr(SRCADR(srcadr),
SRCPORT(srcadr));
+
+ INSIST(match != NULL);
+
match->count++;
/*
* res_not_found counts only use of the final default
@@ -461,6 +464,7 @@ restrictions(
return (int)RES_IGNORE;
match = match_restrict6_addr(pin6, SRCPORT(srcadr));
+ INSIST(match != NULL);
match->count++;
if (&restrict_def6 == match)
res_not_found++;
@@ -494,8 +498,8 @@ hack_restrict(
op, stoa(resaddr), stoa(resmask), mflags, flags));
if (NULL == resaddr) {
- NTP_REQUIRE(NULL == resmask);
- NTP_REQUIRE(RESTRICT_FLAGS == op);
+ REQUIRE(NULL == resmask);
+ REQUIRE(RESTRICT_FLAGS == op);
restrict_source_flags = flags;
restrict_source_mflags = mflags;
restrict_source_enabled = 1;
@@ -503,9 +507,13 @@ hack_restrict(
}
ZERO(match);
+
+#if 0
/* silence VC9 potentially uninit warnings */
+ // HMS: let's use a compiler-specific "enable" for this.
res = NULL;
v6 = 0;
+#endif
if (IS_IPV4(resaddr)) {
v6 = 0;
@@ -528,7 +536,7 @@ hack_restrict(
&match.u.v6.mask);
} else /* not IPv4 nor IPv6 */
- NTP_REQUIRE(0);
+ REQUIRE(0);
match.flags = flags;
match.mflags = mflags;
@@ -600,7 +608,7 @@ hack_restrict(
break;
default: /* unknown op */
- NTP_INSIST(0);
+ INSIST(0);
break;
}
@@ -626,7 +634,7 @@ restrict_source(
IS_MCAST(addr) || ISREFCLOCKADR(addr))
return;
- NTP_REQUIRE(AF_INET == AF(addr) || AF_INET6 == AF(addr));
+ REQUIRE(AF_INET == AF(addr) || AF_INET6 == AF(addr));
SET_HOSTMASK(&onesmask, AF(addr));
if (farewell) {
@@ -647,10 +655,12 @@ restrict_source(
*/
if (IS_IPV4(addr)) {
res = match_restrict4_addr(SRCADR(addr), SRCPORT(addr));
+ INSIST(res != NULL);
found_specific = (SRCADR(&onesmask) == res->u.v4.mask);
} else {
res = match_restrict6_addr(&SOCK_ADDR6(addr),
SRCPORT(addr));
+ INSIST(res != NULL);
found_specific = ADDR6_EQ(&res->u.v6.mask,
&SOCK_ADDR6(&onesmask));
}
diff --git a/contrib/ntp/ntpd/ntp_timer.c b/contrib/ntp/ntpd/ntp_timer.c
index 5cbb892..828aa8c 100644
--- a/contrib/ntp/ntpd/ntp_timer.c
+++ b/contrib/ntp/ntpd/ntp_timer.c
@@ -57,6 +57,12 @@ static void check_leapsec(u_int32, const time_t*, int/*BOOL*/);
volatile int interface_interval; /* init_io() sets def. 300s */
/*
+ * Initializing flag. All async routines watch this and only do their
+ * thing when it is clear.
+ */
+int initializing;
+
+/*
* Alarm flag. The mainline code imports this.
*/
volatile int alarm_flag;
diff --git a/contrib/ntp/ntpd/ntpd-opts.c b/contrib/ntp/ntpd/ntpd-opts.c
index 2d547a1..1bbecfa 100644
--- a/contrib/ntp/ntpd/ntpd-opts.c
+++ b/contrib/ntp/ntpd/ntpd-opts.c
@@ -1,7 +1,7 @@
/*
* EDIT THIS FILE WITH CAUTION (ntpd-opts.c)
*
- * It has been AutoGen-ed June 29, 2015 at 04:28:19 PM by AutoGen 5.18.5
+ * It has been AutoGen-ed October 21, 2015 at 12:36:00 PM by AutoGen 5.18.5
* From the definitions ntpd-opts.def
* and the template file options
*
@@ -75,7 +75,7 @@ extern FILE * option_usage_fp;
* static const strings for ntpd options
*/
static char const ntpd_opt_strs[3129] =
-/* 0 */ "ntpd 4.2.8p3\n"
+/* 0 */ "ntpd 4.2.8p4\n"
"Copyright (C) 1992-2015 The University of Delaware and Network Time Foundation, all rights reserved.\n"
"This is free software. It is licensed for use, modification and\n"
"redistribution under the terms of the NTP License, copies of which\n"
@@ -205,12 +205,12 @@ static char const ntpd_opt_strs[3129] =
/* 2900 */ "output version information and exit\0"
/* 2936 */ "version\0"
/* 2944 */ "NTPD\0"
-/* 2949 */ "ntpd - NTP daemon program - Ver. 4.2.8p3\n"
+/* 2949 */ "ntpd - NTP daemon program - Ver. 4.2.8p4\n"
"Usage: %s [ -<flag> [<val>] | --<name>[{=| }<val>] ]... \\\n"
"\t\t[ <server1> ... <serverN> ]\n\0"
/* 3080 */ "http://bugs.ntp.org, bugs@ntp.org\0"
/* 3114 */ "\n\0"
-/* 3116 */ "ntpd 4.2.8p3";
+/* 3116 */ "ntpd 4.2.8p4";
/**
* ipv4 option description with
@@ -1529,7 +1529,7 @@ static void bogus_function(void) {
translate option names.
*/
/* referenced via ntpdOptions.pzCopyright */
- puts(_("ntpd 4.2.8p3\n\
+ puts(_("ntpd 4.2.8p4\n\
Copyright (C) 1992-2015 The University of Delaware and Network Time Foundation, all rights reserved.\n\
This is free software. It is licensed for use, modification and\n\
redistribution under the terms of the NTP License, copies of which\n\
@@ -1670,7 +1670,7 @@ implied warranty.\n"));
puts(_("output version information and exit"));
/* referenced via ntpdOptions.pzUsageTitle */
- puts(_("ntpd - NTP daemon program - Ver. 4.2.8p3\n\
+ puts(_("ntpd - NTP daemon program - Ver. 4.2.8p4\n\
Usage: %s [ -<flag> [<val>] | --<name>[{=| }<val>] ]... \\\n\
\t\t[ <server1> ... <serverN> ]\n"));
@@ -1678,7 +1678,7 @@ Usage: %s [ -<flag> [<val>] | --<name>[{=| }<val>] ]... \\\n\
puts(_("\n"));
/* referenced via ntpdOptions.pzFullVersion */
- puts(_("ntpd 4.2.8p3"));
+ puts(_("ntpd 4.2.8p4"));
/* referenced via ntpdOptions.pzFullUsage */
puts(_("<<<NOT-FOUND>>>"));
diff --git a/contrib/ntp/ntpd/ntpd-opts.def b/contrib/ntp/ntpd/ntpd-opts.def
index dee484d..00d3511 100644
--- a/contrib/ntp/ntpd/ntpd-opts.def
+++ b/contrib/ntp/ntpd/ntpd-opts.def
@@ -236,6 +236,8 @@ when you have permission to do so from the owner of the target host.
Finally,
in the past many startup scripts would run
.Xr ntpdate 1ntpdatemdoc
+or
+.Xr sntp 1sntpmdoc
to get the system clock close to correct before starting
.Xr ntpd 1ntpdmdoc ,
but this was never more than a mediocre hack and is no longer needed.
@@ -245,7 +247,9 @@ and you still need to set the system time before starting
.Nm ,
please open a bug report and document what is going on,
and then look at using
-.Xr sntp 1sntpmdoc .
+.Xr sntp 1sntpmdoc
+if you really need to set the clock before starting
+.Nm .
.Pp
There is a way to start
.Xr ntpd 1ntpdmdoc
diff --git a/contrib/ntp/ntpd/ntpd-opts.h b/contrib/ntp/ntpd/ntpd-opts.h
index 21142d8..d87c221 100644
--- a/contrib/ntp/ntpd/ntpd-opts.h
+++ b/contrib/ntp/ntpd/ntpd-opts.h
@@ -1,7 +1,7 @@
/*
* EDIT THIS FILE WITH CAUTION (ntpd-opts.h)
*
- * It has been AutoGen-ed June 29, 2015 at 04:28:18 PM by AutoGen 5.18.5
+ * It has been AutoGen-ed October 21, 2015 at 12:35:59 PM by AutoGen 5.18.5
* From the definitions ntpd-opts.def
* and the template file options
*
@@ -106,9 +106,9 @@ typedef enum {
/** count of all options for ntpd */
#define OPTION_CT 38
/** ntpd version */
-#define NTPD_VERSION "4.2.8p3"
+#define NTPD_VERSION "4.2.8p4"
/** Full ntpd version text */
-#define NTPD_FULL_VERSION "ntpd 4.2.8p3"
+#define NTPD_FULL_VERSION "ntpd 4.2.8p4"
/**
* Interface defines for all options. Replace "n" with the UPPER_CASED
diff --git a/contrib/ntp/ntpd/ntpd.1ntpdman b/contrib/ntp/ntpd/ntpd.1ntpdman
index c231b7f..187a79a 100644
--- a/contrib/ntp/ntpd/ntpd.1ntpdman
+++ b/contrib/ntp/ntpd/ntpd.1ntpdman
@@ -10,11 +10,11 @@
.ds B-Font B
.ds I-Font I
.ds R-Font R
-.TH ntpd 1ntpdman "29 Jun 2015" "4.2.8p3" "User Commands"
+.TH ntpd 1ntpdman "21 Oct 2015" "4.2.8p4" "User Commands"
.\"
-.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-LZaapD/ag-XZa4nD)
+.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-dUaOfK/ag-qUaGeK)
.\"
-.\" It has been AutoGen-ed June 29, 2015 at 04:30:24 PM by AutoGen 5.18.5
+.\" It has been AutoGen-ed October 21, 2015 at 12:38:11 PM by AutoGen 5.18.5
.\" From the definitions ntpd-opts.def
.\" and the template file agman-cmd.tpl
.SH NAME
@@ -602,6 +602,8 @@ when you have permission to do so from the owner of the target host.
Finally,
in the past many startup scripts would run
\fCntpdate\f[]\fR(1ntpdatemdoc)\f[]
+or
+\fCsntp\f[]\fR(1sntpmdoc)\f[]
to get the system clock close to correct before starting
\fCntpd\f[]\fR(1ntpdmdoc)\f[],
but this was never more than a mediocre hack and is no longer needed.
@@ -611,7 +613,9 @@ and you still need to set the system time before starting
\f\*[B-Font]ntpd\fP,
please open a bug report and document what is going on,
and then look at using
-\fCsntp\f[]\fR(1sntpmdoc)\f[].
+\fCsntp\f[]\fR(1sntpmdoc)\f[]
+if you really need to set the clock before starting
+\f\*[B-Font]ntpd\fP.
.sp \n(Ppu
.ne 2
diff --git a/contrib/ntp/ntpd/ntpd.1ntpdmdoc b/contrib/ntp/ntpd/ntpd.1ntpdmdoc
index 08d7655..139de52 100644
--- a/contrib/ntp/ntpd/ntpd.1ntpdmdoc
+++ b/contrib/ntp/ntpd/ntpd.1ntpdmdoc
@@ -1,9 +1,9 @@
-.Dd June 29 2015
+.Dd October 21 2015
.Dt NTPD 1ntpdmdoc User Commands
.Os
.\" EDIT THIS FILE WITH CAUTION (ntpd-opts.mdoc)
.\"
-.\" It has been AutoGen-ed June 29, 2015 at 04:30:41 PM by AutoGen 5.18.5
+.\" It has been AutoGen-ed October 21, 2015 at 12:38:30 PM by AutoGen 5.18.5
.\" From the definitions ntpd-opts.def
.\" and the template file agmdoc-cmd.tpl
.Sh NAME
@@ -532,6 +532,8 @@ when you have permission to do so from the owner of the target host.
Finally,
in the past many startup scripts would run
.Xr ntpdate 1ntpdatemdoc
+or
+.Xr sntp 1sntpmdoc
to get the system clock close to correct before starting
.Xr ntpd 1ntpdmdoc ,
but this was never more than a mediocre hack and is no longer needed.
@@ -541,7 +543,9 @@ and you still need to set the system time before starting
.Nm ,
please open a bug report and document what is going on,
and then look at using
-.Xr sntp 1sntpmdoc .
+.Xr sntp 1sntpmdoc
+if you really need to set the clock before starting
+.Nm .
.Pp
There is a way to start
.Xr ntpd 1ntpdmdoc
diff --git a/contrib/ntp/ntpd/ntpd.c b/contrib/ntp/ntpd/ntpd.c
index 529e6ce..a517391 100644
--- a/contrib/ntp/ntpd/ntpd.c
+++ b/contrib/ntp/ntpd/ntpd.c
@@ -27,6 +27,14 @@
#include "ntp_libopts.h"
#include "ntpd-opts.h"
+/* there's a short treatise below what the thread stuff is for */
+#if defined(HAVE_PTHREADS) && HAVE_PTHREADS && !defined(NO_THREADS)
+# ifdef HAVE_PTHREAD_H
+# include <pthread.h>
+# endif
+# define NEED_PTHREAD_WARMUP
+#endif
+
#ifdef HAVE_UNISTD_H
# include <unistd.h>
#endif
@@ -180,12 +188,6 @@ int waitsync_fd_to_close = -1; /* -w/--wait-sync */
#endif
/*
- * Initializing flag. All async routines watch this and only do their
- * thing when it is clear.
- */
-int initializing;
-
-/*
* Version declaration
*/
extern const char *Version;
@@ -238,6 +240,68 @@ static void library_unexpected_error(const char *, int,
#endif /* !SIM */
+/* Bug2332 unearthed a problem in the interaction of reduced user
+ * privileges, the limits on memory usage and some versions of the
+ * pthread library on Linux systems. The 'pthread_cancel()' function and
+ * likely some others need to track the stack of the thread involved,
+ * and uses a function that comes from GCC (--> libgcc_s.so) to do
+ * this. Unfortunately the developers of glibc decided to load the
+ * library on demand, which speeds up program start but can cause
+ * trouble here: Due to all the things NTPD does to limit its resource
+ * usage, this deferred load of libgcc_s does not always work once the
+ * restrictions are in effect.
+ *
+ * One way out of this was attempting a forced link against libgcc_s
+ * when possible because it makes the library available immediately
+ * without deferred load. (The symbol resolution would still be dynamic
+ * and on demand, but the code would already be in the process image.)
+ *
+ * This is a tricky thing to do, since it's not necessary everywhere,
+ * not possible everywhere, has shown to break the build of other
+ * programs in the NTP suite and is now generally frowned upon.
+ *
+ * So we take a different approach here: We creat a worker thread that does
+ * actually nothing except waiting for cancellation and cancel it. If
+ * this is done before all the limitations are put in place, the
+ * machinery is pre-heated and all the runtime stuff should be in place
+ * and useable when needed.
+ *
+ * This uses only the standard pthread API and should work with all
+ * implementations of pthreads. It is not necessary everywhere, but it's
+ * cheap enough to go on nearly unnoticed.
+ */
+#ifdef NEED_PTHREAD_WARMUP
+
+/* simple thread function: sleep until cancelled, just to exercise
+ * thread cancellation.
+ */
+static void*
+my_pthread_warmup_worker(
+ void *thread_args)
+{
+ (void)thread_args;
+ for (;;)
+ sleep(10);
+ return NULL;
+}
+
+/* pre-heat threading: create a thread and cancel it, just to exercise
+ * thread cancellation.
+ */
+static void
+my_pthread_warmup(void)
+{
+ pthread_t thread;
+ int rc;
+ rc = pthread_create(
+ &thread, NULL, my_pthread_warmup_worker, NULL);
+ if (0 == rc) {
+ pthread_cancel(thread);
+ pthread_join(thread, NULL);
+ }
+}
+
+#endif /*defined(NEED_PTHREAD_WARMUP)*/
void
@@ -451,6 +515,10 @@ ntpdmain(
int zero;
# endif
+# ifdef NEED_PTHREAD_WARMUP
+ my_pthread_warmup();
+# endif
+
# ifdef HAVE_UMASK
uv = umask(0);
if (uv)
@@ -791,13 +859,16 @@ ntpdmain(
*/
getconfig(argc, argv);
- if (do_memlock) {
+ if (-1 == cur_memlock) {
# if defined(HAVE_MLOCKALL)
/*
* lock the process into memory
*/
- if (!HAVE_OPT(SAVECONFIGQUIT) &&
- 0 != mlockall(MCL_CURRENT|MCL_FUTURE))
+ if ( !HAVE_OPT(SAVECONFIGQUIT)
+# ifdef RLIMIT_MEMLOCK
+ && -1 != DFLT_RLIMIT_MEMLOCK
+# endif
+ && 0 != mlockall(MCL_CURRENT|MCL_FUTURE))
msyslog(LOG_ERR, "mlockall(): %m");
# else /* !HAVE_MLOCKALL follows */
# ifdef HAVE_PLOCK
@@ -937,10 +1008,17 @@ getgroup:
msyslog(LOG_ERR, "Cannot setegid() to group `%s': %m", group);
exit (-1);
}
- if (group)
- setgroups(1, &sw_gid);
- else
- initgroups(pw->pw_name, pw->pw_gid);
+ if (group) {
+ if (0 != setgroups(1, &sw_gid)) {
+ msyslog(LOG_ERR, "setgroups(1, %d) failed: %m", sw_gid);
+ exit (-1);
+ }
+ }
+ else if (pw)
+ if (0 != initgroups(pw->pw_name, pw->pw_gid)) {
+ msyslog(LOG_ERR, "initgroups(<%s>, %d) filed: %m", pw->pw_name, pw->pw_gid);
+ exit (-1);
+ }
if (user && setuid(sw_uid)) {
msyslog(LOG_ERR, "Cannot setuid() to user `%s': %m", user);
exit (-1);
diff --git a/contrib/ntp/ntpd/ntpd.html b/contrib/ntp/ntpd/ntpd.html
index 7af6d98..8d6f9d6 100644
--- a/contrib/ntp/ntpd/ntpd.html
+++ b/contrib/ntp/ntpd/ntpd.html
@@ -39,7 +39,7 @@ The program can operate in any of several modes, including client/server,
symmetric and broadcast modes, and with both symmetric-key and public-key
cryptography.
- <p>This document applies to version 4.2.8p3 of <code>ntpd</code>.
+ <p>This document applies to version 4.2.8p4 of <code>ntpd</code>.
<ul class="menu">
<li><a accesskey="1" href="#ntpd-Description">ntpd Description</a>: Description
@@ -220,7 +220,7 @@ the usage text by passing it through a pager program.
used to select the program, defaulting to <span class="file">more</span>. Both will exit
with a status code of 0.
-<pre class="example">ntpd - NTP daemon program - Ver. 4.2.8p3-RC3
+<pre class="example">ntpd - NTP daemon program - Ver. 4.2.8p4-sec-RC2
Usage: ntpd [ -&lt;flag&gt; [&lt;val&gt;] | --&lt;name&gt;[{=| }&lt;val&gt;] ]... \
[ &lt;server1&gt; ... &lt;serverN&gt; ]
Flg Arg Option-Name Description
diff --git a/contrib/ntp/ntpd/ntpd.man.in b/contrib/ntp/ntpd/ntpd.man.in
index c7c4eec..21bd884 100644
--- a/contrib/ntp/ntpd/ntpd.man.in
+++ b/contrib/ntp/ntpd/ntpd.man.in
@@ -10,11 +10,11 @@
.ds B-Font B
.ds I-Font I
.ds R-Font R
-.TH ntpd @NTPD_MS@ "29 Jun 2015" "4.2.8p3" "User Commands"
+.TH ntpd @NTPD_MS@ "21 Oct 2015" "4.2.8p4" "User Commands"
.\"
-.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-LZaapD/ag-XZa4nD)
+.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-dUaOfK/ag-qUaGeK)
.\"
-.\" It has been AutoGen-ed June 29, 2015 at 04:30:24 PM by AutoGen 5.18.5
+.\" It has been AutoGen-ed October 21, 2015 at 12:38:11 PM by AutoGen 5.18.5
.\" From the definitions ntpd-opts.def
.\" and the template file agman-cmd.tpl
.SH NAME
@@ -602,6 +602,8 @@ when you have permission to do so from the owner of the target host.
Finally,
in the past many startup scripts would run
\fCntpdate\f[]\fR(@NTPDATE_MS@)\f[]
+or
+\fCsntp\f[]\fR(@SNTP_MS@)\f[]
to get the system clock close to correct before starting
\fCntpd\f[]\fR(@NTPD_MS@)\f[],
but this was never more than a mediocre hack and is no longer needed.
@@ -611,7 +613,9 @@ and you still need to set the system time before starting
\f\*[B-Font]ntpd\fP,
please open a bug report and document what is going on,
and then look at using
-\fCsntp\f[]\fR(@SNTP_MS@)\f[].
+\fCsntp\f[]\fR(@SNTP_MS@)\f[]
+if you really need to set the clock before starting
+\f\*[B-Font]ntpd\fP.
.sp \n(Ppu
.ne 2
diff --git a/contrib/ntp/ntpd/ntpd.mdoc.in b/contrib/ntp/ntpd/ntpd.mdoc.in
index 7d87d85..ad71af9 100644
--- a/contrib/ntp/ntpd/ntpd.mdoc.in
+++ b/contrib/ntp/ntpd/ntpd.mdoc.in
@@ -1,9 +1,9 @@
-.Dd June 29 2015
+.Dd October 21 2015
.Dt NTPD @NTPD_MS@ User Commands
.Os
.\" EDIT THIS FILE WITH CAUTION (ntpd-opts.mdoc)
.\"
-.\" It has been AutoGen-ed June 29, 2015 at 04:30:41 PM by AutoGen 5.18.5
+.\" It has been AutoGen-ed October 21, 2015 at 12:38:30 PM by AutoGen 5.18.5
.\" From the definitions ntpd-opts.def
.\" and the template file agmdoc-cmd.tpl
.Sh NAME
@@ -532,6 +532,8 @@ when you have permission to do so from the owner of the target host.
Finally,
in the past many startup scripts would run
.Xr ntpdate @NTPDATE_MS@
+or
+.Xr sntp @SNTP_MS@
to get the system clock close to correct before starting
.Xr ntpd @NTPD_MS@ ,
but this was never more than a mediocre hack and is no longer needed.
@@ -541,7 +543,9 @@ and you still need to set the system time before starting
.Nm ,
please open a bug report and document what is going on,
and then look at using
-.Xr sntp @SNTP_MS@ .
+.Xr sntp @SNTP_MS@
+if you really need to set the clock before starting
+.Nm .
.Pp
There is a way to start
.Xr ntpd @NTPD_MS@
diff --git a/contrib/ntp/ntpd/rc_cmdlength.c b/contrib/ntp/ntpd/rc_cmdlength.c
index 2807d2a..922312e 100644
--- a/contrib/ntp/ntpd/rc_cmdlength.c
+++ b/contrib/ntp/ntpd/rc_cmdlength.c
@@ -1,4 +1,5 @@
#include <config.h>
+#include <rc_cmdlength.h>
#if HAVE_UNISTD_H
# include <unistd.h>
diff --git a/contrib/ntp/ntpd/refclock_arc.c b/contrib/ntp/ntpd/refclock_arc.c
index e5d4cb4..7daae8d 100644
--- a/contrib/ntp/ntpd/refclock_arc.c
+++ b/contrib/ntp/ntpd/refclock_arc.c
@@ -657,7 +657,7 @@ arc_start(
return 0;
}
close(temp_fd);
- temp_fd = -1;
+ temp_fd = -1; /* not used after this, at *this* time. */
#ifndef SYS_WINNT
if (-1 == fcntl(fd, F_SETFL, 0)) /* clear the descriptor flags */
diff --git a/contrib/ntp/ntpd/refclock_chu.c b/contrib/ntp/ntpd/refclock_chu.c
index 6b1ae55..1f02a1c 100644
--- a/contrib/ntp/ntpd/refclock_chu.c
+++ b/contrib/ntp/ntpd/refclock_chu.c
@@ -1194,7 +1194,7 @@ chu_a(
* only if the maximum distance is at least MINSYNC.
*/
up->syndist = k = 0;
- val = -16;
+ // val = -16;
for (i = -1; i < 2; i++) {
temp = up->cbuf[i + 4] & 0xf;
if (i >= 0)
diff --git a/contrib/ntp/ntpd/refclock_gpsdjson.c b/contrib/ntp/ntpd/refclock_gpsdjson.c
index 0a88cec..c2bf09a 100644
--- a/contrib/ntp/ntpd/refclock_gpsdjson.c
+++ b/contrib/ntp/ntpd/refclock_gpsdjson.c
@@ -1113,9 +1113,9 @@ strtojint(
/* Now try to convert a sequence of digits. */
hold = cp;
accu = 0;
- while (isdigit(*(const unsigned char*)cp)) {
+ while (isdigit(*(const u_char*)cp)) {
flags |= (accu > limit_lo);
- accu = accu * 10 + (*(const unsigned char*)cp++ - '0');
+ accu = accu * 10 + (*(const u_char*)cp++ - '0');
flags |= (accu > limit_hi);
}
/* Check for empty conversion (no digits seen). */
@@ -2086,8 +2086,8 @@ convert_ascii_time(
return FALSE; /* could not parse the mandatory stuff! */
if (*ep == '.') {
dw = 100000000u;
- while (isdigit(*(unsigned char*)++ep)) {
- ts.tv_nsec += (*(unsigned char*)ep - '0') * dw;
+ while (isdigit(*(u_char*)++ep)) {
+ ts.tv_nsec += (*(u_char*)ep - '0') * dw;
dw /= 10u;
}
}
@@ -2189,16 +2189,16 @@ log_data(
char *dtop = s_lbuf + sizeof(s_lbuf) - 1; /* for NUL */
while (sptr != stop && dptr != dtop) {
- if (*sptr == '\\') {
+ u_char uch = (u_char)*sptr++;
+ if (uch == '\\') {
dptr = add_string(dptr, dtop, "\\\\");
- } else if (isprint(*sptr)) {
- *dptr++ = *sptr;
+ } else if (isprint(uch)) {
+ *dptr++ = (char)uch;
} else {
char fbuf[6];
- snprintf(fbuf, sizeof(fbuf), "\\%03o", *(const u_char*)sptr);
+ snprintf(fbuf, sizeof(fbuf), "\\%03o", uch);
dptr = add_string(dptr, dtop, fbuf);
}
- sptr++;
}
*dptr = '\0';
mprintf("%s[%s]: '%s'\n", up->logname, what, s_lbuf);
diff --git a/contrib/ntp/ntpd/refclock_local.c b/contrib/ntp/ntpd/refclock_local.c
index d1b2871..d816c55 100644
--- a/contrib/ntp/ntpd/refclock_local.c
+++ b/contrib/ntp/ntpd/refclock_local.c
@@ -55,15 +55,7 @@
*
* Fudge Factors
*
- * If fudge flag1 is lit, the leap second bit is set in the peer
- * status word. It should be set early in the day of a leap second
- * event and set dark on the day after the event.
- *
- * Note the fudge time1 and time2 have been deprecated. The fudge time1
- * was intended to apply a bias offset. This can be done using the Unix
- * date command. The fudge time2 was intended to apply a bias frequency.
- * This can be done using the frequency file and/or the freq
- * configuration command.
+ * None currently supported.
*/
/*
* Local interface definitions
@@ -179,9 +171,7 @@ local_poll(
/*
* Ramble through the usual filtering and grooming code, which
* is essentially a no-op and included mostly for pretty
- * billboards. We allow a one-time time adjustment using fudge
- * time1 (s) and a continuous frequency adjustment using fudge
- * time 2 (ppm).
+ * billboards.
*/
poll_time = current_time;
refclock_process_offset(pp, pp->lastrec, pp->lastrec, 0);
@@ -215,10 +205,6 @@ local_poll(
pp->disp = 0;
pp->jitter = 0;
#else /* KERNEL_PLL LOCKCLOCK */
- if (pp->sloppyclockflag & CLK_FLAG1)
- pp->leap = LEAP_ADDSECOND;
- else
- pp->leap = LEAP_NOWARNING;
pp->disp = DISPERSION;
pp->jitter = 0;
#endif /* KERNEL_PLL LOCKCLOCK */
diff --git a/contrib/ntp/ntpd/refclock_nmea.c b/contrib/ntp/ntpd/refclock_nmea.c
index 126b530..b1ea294 100644
--- a/contrib/ntp/ntpd/refclock_nmea.c
+++ b/contrib/ntp/ntpd/refclock_nmea.c
@@ -810,9 +810,10 @@ nmea_receive(
ZERO(tofs);
ZERO(date);
ZERO(gpsw);
- sentence = 0;
- rc_date = 0;
- rc_time = 0;
+ sentence = 0; // Should never be needed.
+ rc_date = 0; // Should never be needed.
+ rc_time = 0; // Should never be needed.
+
/*
* Read the timecode and timestamp, then initialise field
* processing. The <CR><LF> at the NMEA line end is translated
diff --git a/contrib/ntp/ntpd/refclock_palisade.c b/contrib/ntp/ntpd/refclock_palisade.c
index 0520311..921c815 100644
--- a/contrib/ntp/ntpd/refclock_palisade.c
+++ b/contrib/ntp/ntpd/refclock_palisade.c
@@ -218,7 +218,7 @@ init_thunderbolt (
struct packettx tx;
tx.size = 0;
- tx.data = (u_char *) malloc(100);
+ tx.data = (u_char *) emalloc(100);
/* set UTC time */
sendsupercmd (&tx, 0x8E, 0xA2);
@@ -246,7 +246,7 @@ init_acutime (
struct packettx tx;
tx.size = 0;
- tx.data = (u_char *) malloc(100);
+ tx.data = (u_char *) emalloc(100);
sendsupercmd(&tx, 0x8E, 0xA5);
sendbyte(&tx, 0x02);
diff --git a/contrib/ntp/ntpd/refclock_parse.c b/contrib/ntp/ntpd/refclock_parse.c
index 147a462..8e90595 100644
--- a/contrib/ntp/ntpd/refclock_parse.c
+++ b/contrib/ntp/ntpd/refclock_parse.c
@@ -2587,6 +2587,9 @@ parsestate(
i++;
}
t = ap(buffer, size, t, ")");
+ /* t is unused here, but if we don't track it and
+ * need it later, that's a bug waiting to happen.
+ */
}
return buffer;
}
diff --git a/contrib/ntp/ntpd/refclock_wwv.c b/contrib/ntp/ntpd/refclock_wwv.c
index 79c0afd..2736cfa 100644
--- a/contrib/ntp/ntpd/refclock_wwv.c
+++ b/contrib/ntp/ntpd/refclock_wwv.c
@@ -2241,6 +2241,7 @@ wwv_tsec(
temp = carry(&up->decvec[HR]);
if (temp == 0)
temp = carry(&up->decvec[HR + 1]);
+ // XXX: Does temp have an expected value here?
/*
* Decode the current minute and day. Set leap day if the
@@ -2271,7 +2272,7 @@ wwv_tsec(
if (minute != 1440)
return;
- minute = 0;
+ // minute = 0;
while (carry(&up->decvec[HR]) != 0); /* advance to minute 0 */
while (carry(&up->decvec[HR + 1]) != 0);
day++;
@@ -2280,6 +2281,7 @@ wwv_tsec(
temp = carry(&up->decvec[DA + 1]);
if (temp == 0)
temp = carry(&up->decvec[DA + 2]);
+ // XXX: Is there an expected value of temp here?
/*
* Roll the year if this the first day and propagate carries
@@ -2288,7 +2290,7 @@ wwv_tsec(
if (day != (isleap ? 365 : 366))
return;
- day = 1;
+ // day = 1;
while (carry(&up->decvec[DA]) != 1); /* advance to day 1 */
while (carry(&up->decvec[DA + 1]) != 0);
while (carry(&up->decvec[DA + 2]) != 0);
diff --git a/contrib/ntp/ntpdate/Makefile.in b/contrib/ntp/ntpdate/Makefile.in
index feae7e4..79f5251 100644
--- a/contrib/ntp/ntpdate/Makefile.in
+++ b/contrib/ntp/ntpdate/Makefile.in
@@ -122,6 +122,7 @@ am__aclocal_m4_deps = $(top_srcdir)/sntp/libopts/m4/libopts.m4 \
$(top_srcdir)/sntp/m4/ntp_locinfo.m4 \
$(top_srcdir)/sntp/m4/ntp_openssl.m4 \
$(top_srcdir)/sntp/m4/ntp_pkg_config.m4 \
+ $(top_srcdir)/sntp/m4/ntp_problemtests.m4 \
$(top_srcdir)/sntp/m4/ntp_prog_cc.m4 \
$(top_srcdir)/sntp/m4/ntp_rlimit.m4 \
$(top_srcdir)/sntp/m4/ntp_sntp.m4 \
@@ -229,6 +230,7 @@ AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
+BUILD_THREAD = @BUILD_THREAD@
CALC_TICKADJ_DB = @CALC_TICKADJ_DB@
CALC_TICKADJ_DL = @CALC_TICKADJ_DL@
CALC_TICKADJ_DS = @CALC_TICKADJ_DS@
@@ -237,6 +239,7 @@ CALC_TICKADJ_NI = @CALC_TICKADJ_NI@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
+CFLAGS_LIBEVENT = @CFLAGS_LIBEVENT@
CFLAGS_NTP = @CFLAGS_NTP@
CHUTEST = @CHUTEST@
CONFIG_SHELL = @CONFIG_SHELL@
@@ -298,6 +301,7 @@ LIBTOOL_DEPS = @LIBTOOL_DEPS@
LIPO = @LIPO@
LN_S = @LN_S@
LSCF = @LSCF@
+LTHREAD_LIBS = @LTHREAD_LIBS@
LTLIBOBJS = @LTLIBOBJS@
MAKEINFO = @MAKEINFO@
MAKE_ADJTIMED = @MAKE_ADJTIMED@
diff --git a/contrib/ntp/ntpdate/ntpdate.c b/contrib/ntp/ntpdate/ntpdate.c
index 08edc8b..9831929 100644
--- a/contrib/ntp/ntpdate/ntpdate.c
+++ b/contrib/ntp/ntpdate/ntpdate.c
@@ -149,7 +149,7 @@ int unpriv_port = 0;
/*
* Program name.
*/
-char *progname;
+char const *progname;
/*
* Systemwide parameters and flags
diff --git a/contrib/ntp/ntpdc/Makefile.in b/contrib/ntp/ntpdc/Makefile.in
index be8cd55..c85588e 100644
--- a/contrib/ntp/ntpdc/Makefile.in
+++ b/contrib/ntp/ntpdc/Makefile.in
@@ -123,6 +123,7 @@ am__aclocal_m4_deps = $(top_srcdir)/sntp/libopts/m4/libopts.m4 \
$(top_srcdir)/sntp/m4/ntp_locinfo.m4 \
$(top_srcdir)/sntp/m4/ntp_openssl.m4 \
$(top_srcdir)/sntp/m4/ntp_pkg_config.m4 \
+ $(top_srcdir)/sntp/m4/ntp_problemtests.m4 \
$(top_srcdir)/sntp/m4/ntp_prog_cc.m4 \
$(top_srcdir)/sntp/m4/ntp_rlimit.m4 \
$(top_srcdir)/sntp/m4/ntp_sntp.m4 \
@@ -269,6 +270,7 @@ AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
+BUILD_THREAD = @BUILD_THREAD@
CALC_TICKADJ_DB = @CALC_TICKADJ_DB@
CALC_TICKADJ_DL = @CALC_TICKADJ_DL@
CALC_TICKADJ_DS = @CALC_TICKADJ_DS@
@@ -277,6 +279,7 @@ CALC_TICKADJ_NI = @CALC_TICKADJ_NI@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
+CFLAGS_LIBEVENT = @CFLAGS_LIBEVENT@
CFLAGS_NTP = @CFLAGS_NTP@
CHUTEST = @CHUTEST@
CONFIG_SHELL = @CONFIG_SHELL@
@@ -338,6 +341,7 @@ LIBTOOL_DEPS = @LIBTOOL_DEPS@
LIPO = @LIPO@
LN_S = @LN_S@
LSCF = @LSCF@
+LTHREAD_LIBS = @LTHREAD_LIBS@
LTLIBOBJS = @LTLIBOBJS@
MAKEINFO = @MAKEINFO@
MAKE_ADJTIMED = @MAKE_ADJTIMED@
diff --git a/contrib/ntp/ntpdc/invoke-ntpdc.texi b/contrib/ntp/ntpdc/invoke-ntpdc.texi
index 253b8ae..0146069 100644
--- a/contrib/ntp/ntpdc/invoke-ntpdc.texi
+++ b/contrib/ntp/ntpdc/invoke-ntpdc.texi
@@ -6,7 +6,7 @@
#
# EDIT THIS FILE WITH CAUTION (invoke-ntpdc.texi)
#
-# It has been AutoGen-ed June 29, 2015 at 04:31:05 PM by AutoGen 5.18.5
+# It has been AutoGen-ed October 21, 2015 at 12:38:54 PM by AutoGen 5.18.5
# From the definitions ntpdc-opts.def
# and the template file agtexi-cmd.tpl
@end ignore
@@ -76,7 +76,7 @@ with a status code of 0.
@exampleindent 0
@example
-ntpdc - vendor-specific NTPD control program - Ver. 4.2.8p3
+ntpdc - vendor-specific NTPD control program - Ver. 4.2.8p4
Usage: ntpdc [ -<flag> [<val>] | --<name>[@{=| @}<val>] ]... [ host ...]
Flg Arg Option-Name Description
-4 no ipv4 Force IPv4 DNS name resolution
diff --git a/contrib/ntp/ntpdc/ntpdc-opts.c b/contrib/ntp/ntpdc/ntpdc-opts.c
index 3e68aa2..6b4617a 100644
--- a/contrib/ntp/ntpdc/ntpdc-opts.c
+++ b/contrib/ntp/ntpdc/ntpdc-opts.c
@@ -1,7 +1,7 @@
/*
* EDIT THIS FILE WITH CAUTION (ntpdc-opts.c)
*
- * It has been AutoGen-ed June 29, 2015 at 04:30:51 PM by AutoGen 5.18.5
+ * It has been AutoGen-ed October 21, 2015 at 12:38:40 PM by AutoGen 5.18.5
* From the definitions ntpdc-opts.def
* and the template file options
*
@@ -69,7 +69,7 @@ extern FILE * option_usage_fp;
* static const strings for ntpdc options
*/
static char const ntpdc_opt_strs[1911] =
-/* 0 */ "ntpdc 4.2.8p3\n"
+/* 0 */ "ntpdc 4.2.8p4\n"
"Copyright (C) 1992-2015 The University of Delaware and Network Time Foundation, all rights reserved.\n"
"This is free software. It is licensed for use, modification and\n"
"redistribution under the terms of the NTP License, copies of which\n"
@@ -128,14 +128,14 @@ static char const ntpdc_opt_strs[1911] =
/* 1694 */ "no-load-opts\0"
/* 1707 */ "no\0"
/* 1710 */ "NTPDC\0"
-/* 1716 */ "ntpdc - vendor-specific NTPD control program - Ver. 4.2.8p3\n"
+/* 1716 */ "ntpdc - vendor-specific NTPD control program - Ver. 4.2.8p4\n"
"Usage: %s [ -<flag> [<val>] | --<name>[{=| }<val>] ]... [ host ...]\n\0"
/* 1846 */ "$HOME\0"
/* 1852 */ ".\0"
/* 1854 */ ".ntprc\0"
/* 1861 */ "http://bugs.ntp.org, bugs@ntp.org\0"
/* 1895 */ "\n\0"
-/* 1897 */ "ntpdc 4.2.8p3";
+/* 1897 */ "ntpdc 4.2.8p4";
/**
* ipv4 option description with
@@ -796,7 +796,7 @@ static void bogus_function(void) {
translate option names.
*/
/* referenced via ntpdcOptions.pzCopyright */
- puts(_("ntpdc 4.2.8p3\n\
+ puts(_("ntpdc 4.2.8p4\n\
Copyright (C) 1992-2015 The University of Delaware and Network Time Foundation, all rights reserved.\n\
This is free software. It is licensed for use, modification and\n\
redistribution under the terms of the NTP License, copies of which\n\
@@ -862,14 +862,14 @@ implied warranty.\n"));
puts(_("load options from a config file"));
/* referenced via ntpdcOptions.pzUsageTitle */
- puts(_("ntpdc - vendor-specific NTPD control program - Ver. 4.2.8p3\n\
+ puts(_("ntpdc - vendor-specific NTPD control program - Ver. 4.2.8p4\n\
Usage: %s [ -<flag> [<val>] | --<name>[{=| }<val>] ]... [ host ...]\n"));
/* referenced via ntpdcOptions.pzExplain */
puts(_("\n"));
/* referenced via ntpdcOptions.pzFullVersion */
- puts(_("ntpdc 4.2.8p3"));
+ puts(_("ntpdc 4.2.8p4"));
/* referenced via ntpdcOptions.pzFullUsage */
puts(_("<<<NOT-FOUND>>>"));
diff --git a/contrib/ntp/ntpdc/ntpdc-opts.h b/contrib/ntp/ntpdc/ntpdc-opts.h
index e4965a0..d2494fe 100644
--- a/contrib/ntp/ntpdc/ntpdc-opts.h
+++ b/contrib/ntp/ntpdc/ntpdc-opts.h
@@ -1,7 +1,7 @@
/*
* EDIT THIS FILE WITH CAUTION (ntpdc-opts.h)
*
- * It has been AutoGen-ed June 29, 2015 at 04:30:50 PM by AutoGen 5.18.5
+ * It has been AutoGen-ed October 21, 2015 at 12:38:39 PM by AutoGen 5.18.5
* From the definitions ntpdc-opts.def
* and the template file options
*
@@ -83,9 +83,9 @@ typedef enum {
/** count of all options for ntpdc */
#define OPTION_CT 15
/** ntpdc version */
-#define NTPDC_VERSION "4.2.8p3"
+#define NTPDC_VERSION "4.2.8p4"
/** Full ntpdc version text */
-#define NTPDC_FULL_VERSION "ntpdc 4.2.8p3"
+#define NTPDC_FULL_VERSION "ntpdc 4.2.8p4"
/**
* Interface defines for all options. Replace "n" with the UPPER_CASED
diff --git a/contrib/ntp/ntpdc/ntpdc.1ntpdcman b/contrib/ntp/ntpdc/ntpdc.1ntpdcman
index cbc58d0..71fd545 100644
--- a/contrib/ntp/ntpdc/ntpdc.1ntpdcman
+++ b/contrib/ntp/ntpdc/ntpdc.1ntpdcman
@@ -10,11 +10,11 @@
.ds B-Font B
.ds I-Font I
.ds R-Font R
-.TH ntpdc 1ntpdcman "29 Jun 2015" "4.2.8p3" "User Commands"
+.TH ntpdc 1ntpdcman "21 Oct 2015" "4.2.8p4" "User Commands"
.\"
-.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-91aOeF/ag-i2aGdF)
+.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-Gvay7L/ag-Svaq6L)
.\"
-.\" It has been AutoGen-ed June 29, 2015 at 04:31:01 PM by AutoGen 5.18.5
+.\" It has been AutoGen-ed October 21, 2015 at 12:38:51 PM by AutoGen 5.18.5
.\" From the definitions ntpdc-opts.def
.\" and the template file agman-cmd.tpl
.SH NAME
diff --git a/contrib/ntp/ntpdc/ntpdc.1ntpdcmdoc b/contrib/ntp/ntpdc/ntpdc.1ntpdcmdoc
index 534a6d4..ff7656c 100644
--- a/contrib/ntp/ntpdc/ntpdc.1ntpdcmdoc
+++ b/contrib/ntp/ntpdc/ntpdc.1ntpdcmdoc
@@ -1,9 +1,9 @@
-.Dd June 29 2015
+.Dd October 21 2015
.Dt NTPDC 1ntpdcmdoc User Commands
.Os
.\" EDIT THIS FILE WITH CAUTION (ntpdc-opts.mdoc)
.\"
-.\" It has been AutoGen-ed June 29, 2015 at 04:31:08 PM by AutoGen 5.18.5
+.\" It has been AutoGen-ed October 21, 2015 at 12:38:57 PM by AutoGen 5.18.5
.\" From the definitions ntpdc-opts.def
.\" and the template file agmdoc-cmd.tpl
.Sh NAME
diff --git a/contrib/ntp/ntpdc/ntpdc.c b/contrib/ntp/ntpdc/ntpdc.c
index ce35bd4..ab17788 100644
--- a/contrib/ntp/ntpdc/ntpdc.c
+++ b/contrib/ntp/ntpdc/ntpdc.c
@@ -240,7 +240,7 @@ static FILE *current_output;
*/
extern struct xcmd opcmds[];
-char *progname;
+char const *progname;
#ifdef NO_MAIN_ALLOWED
CALL(ntpdc,"ntpdc",ntpdcmain);
@@ -1443,7 +1443,7 @@ getnetnum(
LENHOSTNAME, NULL, 0, 0);
return 1;
} else if (getaddrinfo(hname, "ntp", &hints, &ai) == 0) {
- NTP_INSIST(sizeof(*num) >= ai->ai_addrlen);
+ INSIST(sizeof(*num) >= ai->ai_addrlen);
memcpy(num, ai->ai_addr, ai->ai_addrlen);
if (fullhost != NULL) {
if (ai->ai_canonname != NULL)
diff --git a/contrib/ntp/ntpdc/ntpdc.html b/contrib/ntp/ntpdc/ntpdc.html
index 34cfcc1..cc552ca 100644
--- a/contrib/ntp/ntpdc/ntpdc.html
+++ b/contrib/ntp/ntpdc/ntpdc.html
@@ -36,7 +36,7 @@ display the time offset of the system clock relative to the server
clock. Run as root, it can correct the system clock to this offset as
well. It can be run as an interactive command or from a cron job.
- <p>This document applies to version 4.2.8p3 of <code>ntpdc</code>.
+ <p>This document applies to version 4.2.8p4 of <code>ntpdc</code>.
<p>The program implements the SNTP protocol as defined by RFC 5905, the NTPv4
IETF specification.
@@ -152,7 +152,7 @@ the usage text by passing it through a pager program.
used to select the program, defaulting to <span class="file">more</span>. Both will exit
with a status code of 0.
-<pre class="example">ntpdc - vendor-specific NTPD control program - Ver. 4.2.8p3
+<pre class="example">ntpdc - vendor-specific NTPD control program - Ver. 4.2.8p4
Usage: ntpdc [ -&lt;flag&gt; [&lt;val&gt;] | --&lt;name&gt;[{=| }&lt;val&gt;] ]... [ host ...]
Flg Arg Option-Name Description
-4 no ipv4 Force IPv4 DNS name resolution
diff --git a/contrib/ntp/ntpdc/ntpdc.man.in b/contrib/ntp/ntpdc/ntpdc.man.in
index 84266fb..f5df744 100644
--- a/contrib/ntp/ntpdc/ntpdc.man.in
+++ b/contrib/ntp/ntpdc/ntpdc.man.in
@@ -10,11 +10,11 @@
.ds B-Font B
.ds I-Font I
.ds R-Font R
-.TH ntpdc @NTPDC_MS@ "29 Jun 2015" "4.2.8p3" "User Commands"
+.TH ntpdc @NTPDC_MS@ "21 Oct 2015" "4.2.8p4" "User Commands"
.\"
-.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-91aOeF/ag-i2aGdF)
+.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-Gvay7L/ag-Svaq6L)
.\"
-.\" It has been AutoGen-ed June 29, 2015 at 04:31:01 PM by AutoGen 5.18.5
+.\" It has been AutoGen-ed October 21, 2015 at 12:38:51 PM by AutoGen 5.18.5
.\" From the definitions ntpdc-opts.def
.\" and the template file agman-cmd.tpl
.SH NAME
diff --git a/contrib/ntp/ntpdc/ntpdc.mdoc.in b/contrib/ntp/ntpdc/ntpdc.mdoc.in
index 649e895..5a6e292 100644
--- a/contrib/ntp/ntpdc/ntpdc.mdoc.in
+++ b/contrib/ntp/ntpdc/ntpdc.mdoc.in
@@ -1,9 +1,9 @@
-.Dd June 29 2015
+.Dd October 21 2015
.Dt NTPDC @NTPDC_MS@ User Commands
.Os
.\" EDIT THIS FILE WITH CAUTION (ntpdc-opts.mdoc)
.\"
-.\" It has been AutoGen-ed June 29, 2015 at 04:31:08 PM by AutoGen 5.18.5
+.\" It has been AutoGen-ed October 21, 2015 at 12:38:57 PM by AutoGen 5.18.5
.\" From the definitions ntpdc-opts.def
.\" and the template file agmdoc-cmd.tpl
.Sh NAME
diff --git a/contrib/ntp/ntpq/Makefile.in b/contrib/ntp/ntpq/Makefile.in
index 39b1b65..c93c677 100644
--- a/contrib/ntp/ntpq/Makefile.in
+++ b/contrib/ntp/ntpq/Makefile.in
@@ -124,6 +124,7 @@ am__aclocal_m4_deps = $(top_srcdir)/sntp/libopts/m4/libopts.m4 \
$(top_srcdir)/sntp/m4/ntp_locinfo.m4 \
$(top_srcdir)/sntp/m4/ntp_openssl.m4 \
$(top_srcdir)/sntp/m4/ntp_pkg_config.m4 \
+ $(top_srcdir)/sntp/m4/ntp_problemtests.m4 \
$(top_srcdir)/sntp/m4/ntp_prog_cc.m4 \
$(top_srcdir)/sntp/m4/ntp_rlimit.m4 \
$(top_srcdir)/sntp/m4/ntp_sntp.m4 \
@@ -277,6 +278,7 @@ AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
+BUILD_THREAD = @BUILD_THREAD@
CALC_TICKADJ_DB = @CALC_TICKADJ_DB@
CALC_TICKADJ_DL = @CALC_TICKADJ_DL@
CALC_TICKADJ_DS = @CALC_TICKADJ_DS@
@@ -285,6 +287,7 @@ CALC_TICKADJ_NI = @CALC_TICKADJ_NI@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
+CFLAGS_LIBEVENT = @CFLAGS_LIBEVENT@
CFLAGS_NTP = @CFLAGS_NTP@
CHUTEST = @CHUTEST@
CONFIG_SHELL = @CONFIG_SHELL@
@@ -346,6 +349,7 @@ LIBTOOL_DEPS = @LIBTOOL_DEPS@
LIPO = @LIPO@
LN_S = @LN_S@
LSCF = @LSCF@
+LTHREAD_LIBS = @LTHREAD_LIBS@
LTLIBOBJS = @LTLIBOBJS@
MAKEINFO = @MAKEINFO@
MAKE_ADJTIMED = @MAKE_ADJTIMED@
diff --git a/contrib/ntp/ntpq/invoke-ntpq.texi b/contrib/ntp/ntpq/invoke-ntpq.texi
index 7c28d92..fa0f5d7 100644
--- a/contrib/ntp/ntpq/invoke-ntpq.texi
+++ b/contrib/ntp/ntpq/invoke-ntpq.texi
@@ -6,7 +6,7 @@
#
# EDIT THIS FILE WITH CAUTION (invoke-ntpq.texi)
#
-# It has been AutoGen-ed June 29, 2015 at 04:31:39 PM by AutoGen 5.18.5
+# It has been AutoGen-ed October 21, 2015 at 12:39:27 PM by AutoGen 5.18.5
# From the definitions ntpq-opts.def
# and the template file agtexi-cmd.tpl
@end ignore
@@ -847,7 +847,7 @@ with a status code of 0.
@exampleindent 0
@example
-ntpq - standard NTP query program - Ver. 4.2.8p3
+ntpq - standard NTP query program - Ver. 4.2.8p4
Usage: ntpq [ -<flag> [<val>] | --<name>[@{=| @}<val>] ]... [ host ...]
Flg Arg Option-Name Description
-4 no ipv4 Force IPv4 DNS name resolution
diff --git a/contrib/ntp/ntpq/libntpq.h b/contrib/ntp/ntpq/libntpq.h
index 82a8740..84a622b 100644
--- a/contrib/ntp/ntpq/libntpq.h
+++ b/contrib/ntp/ntpq/libntpq.h
@@ -36,7 +36,7 @@
#define NTP_STATUS_INVALID 0
#define NTP_STATUS_FALSETICKER 1
#define NTP_STATUS_EXCESS 2
-#define NTP_STATUS_OUTLYER 3
+#define NTP_STATUS_OUTLIER 3
#define NTP_STATUS_CANDIDATE 4
#define NTP_STATUS_SELECTED 5
#define NTP_STATUS_SYSPEER 6
diff --git a/contrib/ntp/ntpq/ntpq-opts.c b/contrib/ntp/ntpq/ntpq-opts.c
index 798a0cd..2232928 100644
--- a/contrib/ntp/ntpq/ntpq-opts.c
+++ b/contrib/ntp/ntpq/ntpq-opts.c
@@ -1,7 +1,7 @@
/*
* EDIT THIS FILE WITH CAUTION (ntpq-opts.c)
*
- * It has been AutoGen-ed June 29, 2015 at 04:31:10 PM by AutoGen 5.18.5
+ * It has been AutoGen-ed October 21, 2015 at 12:39:00 PM by AutoGen 5.18.5
* From the definitions ntpq-opts.def
* and the template file options
*
@@ -69,7 +69,7 @@ extern FILE * option_usage_fp;
* static const strings for ntpq options
*/
static char const ntpq_opt_strs[1925] =
-/* 0 */ "ntpq 4.2.8p3\n"
+/* 0 */ "ntpq 4.2.8p4\n"
"Copyright (C) 1992-2015 The University of Delaware and Network Time Foundation, all rights reserved.\n"
"This is free software. It is licensed for use, modification and\n"
"redistribution under the terms of the NTP License, copies of which\n"
@@ -129,13 +129,13 @@ static char const ntpq_opt_strs[1925] =
/* 1723 */ "no-load-opts\0"
/* 1736 */ "no\0"
/* 1739 */ "NTPQ\0"
-/* 1744 */ "ntpq - standard NTP query program - Ver. 4.2.8p3\n"
+/* 1744 */ "ntpq - standard NTP query program - Ver. 4.2.8p4\n"
"Usage: %s [ -<flag> [<val>] | --<name>[{=| }<val>] ]... [ host ...]\n\0"
/* 1863 */ "$HOME\0"
/* 1869 */ ".\0"
/* 1871 */ ".ntprc\0"
/* 1878 */ "http://bugs.ntp.org, bugs@ntp.org\0"
-/* 1912 */ "ntpq 4.2.8p3";
+/* 1912 */ "ntpq 4.2.8p4";
/**
* ipv4 option description with
@@ -786,7 +786,7 @@ static void bogus_function(void) {
translate option names.
*/
/* referenced via ntpqOptions.pzCopyright */
- puts(_("ntpq 4.2.8p3\n\
+ puts(_("ntpq 4.2.8p4\n\
Copyright (C) 1992-2015 The University of Delaware and Network Time Foundation, all rights reserved.\n\
This is free software. It is licensed for use, modification and\n\
redistribution under the terms of the NTP License, copies of which\n\
@@ -852,11 +852,11 @@ implied warranty.\n"));
puts(_("load options from a config file"));
/* referenced via ntpqOptions.pzUsageTitle */
- puts(_("ntpq - standard NTP query program - Ver. 4.2.8p3\n\
+ puts(_("ntpq - standard NTP query program - Ver. 4.2.8p4\n\
Usage: %s [ -<flag> [<val>] | --<name>[{=| }<val>] ]... [ host ...]\n"));
/* referenced via ntpqOptions.pzFullVersion */
- puts(_("ntpq 4.2.8p3"));
+ puts(_("ntpq 4.2.8p4"));
/* referenced via ntpqOptions.pzFullUsage */
puts(_("<<<NOT-FOUND>>>"));
diff --git a/contrib/ntp/ntpq/ntpq-opts.h b/contrib/ntp/ntpq/ntpq-opts.h
index fecb970..f82ccae 100644
--- a/contrib/ntp/ntpq/ntpq-opts.h
+++ b/contrib/ntp/ntpq/ntpq-opts.h
@@ -1,7 +1,7 @@
/*
* EDIT THIS FILE WITH CAUTION (ntpq-opts.h)
*
- * It has been AutoGen-ed June 29, 2015 at 04:31:10 PM by AutoGen 5.18.5
+ * It has been AutoGen-ed October 21, 2015 at 12:39:00 PM by AutoGen 5.18.5
* From the definitions ntpq-opts.def
* and the template file options
*
@@ -83,9 +83,9 @@ typedef enum {
/** count of all options for ntpq */
#define OPTION_CT 15
/** ntpq version */
-#define NTPQ_VERSION "4.2.8p3"
+#define NTPQ_VERSION "4.2.8p4"
/** Full ntpq version text */
-#define NTPQ_FULL_VERSION "ntpq 4.2.8p3"
+#define NTPQ_FULL_VERSION "ntpq 4.2.8p4"
/**
* Interface defines for all options. Replace "n" with the UPPER_CASED
diff --git a/contrib/ntp/ntpq/ntpq-subs.c b/contrib/ntp/ntpq/ntpq-subs.c
index c647870..78143b3 100644
--- a/contrib/ntp/ntpq/ntpq-subs.c
+++ b/contrib/ntp/ntpq/ntpq-subs.c
@@ -1202,7 +1202,7 @@ printassoc(
break;
case CTL_PST_SEL_SELCAND:
- condition = "outlyer";
+ condition = "outlier";
break;
case CTL_PST_SEL_SYNCCAND:
@@ -2387,7 +2387,7 @@ add_mru(
}
UNLINK_DLIST(mon, mlink);
UNLINK_SLIST(unlinked, hash_table[hash], mon, hlink, mru);
- NTP_INSIST(unlinked == mon);
+ INSIST(unlinked == mon);
mru_dupes++;
TRACE(2, ("(updated from %08x.%08x) ", mon->last.l_ui,
mon->last.l_uf));
@@ -2482,7 +2482,7 @@ collect_mru_list(
mru_count = 0;
INIT_DLIST(mru_list, mlink);
cb = NTP_HASH_SIZE * sizeof(*hash_table);
- NTP_INSIST(NULL == hash_table);
+ INSIST(NULL == hash_table);
hash_table = emalloc_zero(cb);
c_mru_l_rc = FALSE;
@@ -2526,7 +2526,7 @@ collect_mru_list(
ri);
while (ri--) {
recent = HEAD_DLIST(mru_list, mlink);
- NTP_INSIST(recent != NULL);
+ INSIST(recent != NULL);
if (debug)
fprintf(stderr,
"tossing prior entry %s to resync\n",
@@ -2535,7 +2535,7 @@ collect_mru_list(
hash = NTP_HASH_ADDR(&recent->addr);
UNLINK_SLIST(unlinked, hash_table[hash],
recent, hlink, mru);
- NTP_INSIST(unlinked == recent);
+ INSIST(unlinked == recent);
free(recent);
mru_count--;
}
@@ -2777,7 +2777,7 @@ collect_mru_list(
if (have_now)
list_complete = TRUE;
if (list_complete) {
- NTP_INSIST(0 == ri || have_addr_older);
+ INSIST(0 == ri || have_addr_older);
}
if (mrulist_interrupted) {
printf("mrulist retrieval interrupted by operator.\n"
@@ -3145,13 +3145,13 @@ mrulist(
ppentry = sorted;
if (MRUSORT_R_DEF != order) {
ITER_DLIST_BEGIN(mru_list, recent, mlink, mru)
- NTP_INSIST(ppentry < sorted + mru_count);
+ INSIST(ppentry < sorted + mru_count);
*ppentry = recent;
ppentry++;
ITER_DLIST_END()
} else {
REV_ITER_DLIST_BEGIN(mru_list, recent, mlink, mru)
- NTP_INSIST(ppentry < sorted + mru_count);
+ INSIST(ppentry < sorted + mru_count);
*ppentry = recent;
ppentry++;
REV_ITER_DLIST_END()
diff --git a/contrib/ntp/ntpq/ntpq.1ntpqman b/contrib/ntp/ntpq/ntpq.1ntpqman
index afdd8cb..b4e45b2 100644
--- a/contrib/ntp/ntpq/ntpq.1ntpqman
+++ b/contrib/ntp/ntpq/ntpq.1ntpqman
@@ -10,11 +10,11 @@
.ds B-Font B
.ds I-Font I
.ds R-Font R
-.TH ntpq 1ntpqman "29 Jun 2015" "4.2.8p3" "User Commands"
+.TH ntpq 1ntpqman "21 Oct 2015" "4.2.8p4" "User Commands"
.\"
-.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-6GaipG/ag-fHaaoG)
+.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-joa4fN/ag-voaWeN)
.\"
-.\" It has been AutoGen-ed June 29, 2015 at 04:31:32 PM by AutoGen 5.18.5
+.\" It has been AutoGen-ed October 21, 2015 at 12:39:23 PM by AutoGen 5.18.5
.\" From the definitions ntpq-opts.def
.\" and the template file agman-cmd.tpl
.SH NAME
diff --git a/contrib/ntp/ntpq/ntpq.1ntpqmdoc b/contrib/ntp/ntpq/ntpq.1ntpqmdoc
index 4ed69cf..8239434 100644
--- a/contrib/ntp/ntpq/ntpq.1ntpqmdoc
+++ b/contrib/ntp/ntpq/ntpq.1ntpqmdoc
@@ -1,9 +1,9 @@
-.Dd June 29 2015
+.Dd October 21 2015
.Dt NTPQ 1ntpqmdoc User Commands
.Os
.\" EDIT THIS FILE WITH CAUTION (ntpq-opts.mdoc)
.\"
-.\" It has been AutoGen-ed June 29, 2015 at 04:31:41 PM by AutoGen 5.18.5
+.\" It has been AutoGen-ed October 21, 2015 at 12:39:29 PM by AutoGen 5.18.5
.\" From the definitions ntpq-opts.def
.\" and the template file agmdoc-cmd.tpl
.Sh NAME
diff --git a/contrib/ntp/ntpq/ntpq.c b/contrib/ntp/ntpq/ntpq.c
index af5f681..c8d5ece 100644
--- a/contrib/ntp/ntpq/ntpq.c
+++ b/contrib/ntp/ntpq/ntpq.c
@@ -405,7 +405,7 @@ FILE *current_output;
*/
extern struct xcmd opcmds[];
-char *progname;
+char const *progname;
#ifdef NO_MAIN_ALLOWED
#ifndef BUILD_AS_LIB
@@ -489,7 +489,7 @@ ntpqmain(
builtins[icmd].desc[0] = "md5";
fmt = "set key type to use for authenticated requests (%s)";
#endif
- msg = malloc(strlen(fmt) + strlen(list) - strlen("%s") +1);
+ msg = emalloc(strlen(fmt) + strlen(list) - strlen("%s") +1);
sprintf(msg, fmt, list);
builtins[icmd].comment = msg;
free(list);
@@ -3206,7 +3206,6 @@ tstflags(
register const char *sep;
sep = "";
- i = 0;
s = cp = circ_buf[nextcb];
if (++nextcb >= NUMCB)
nextcb = 0;
@@ -3362,12 +3361,17 @@ cookedprint(
}
if (output_raw != 0) {
+ /* TALOS-CAN-0063: avoid buffer overrun */
atoascii(name, MAXVARLEN, bn, sizeof(bn));
- atoascii(value, MAXVALLEN, bv, sizeof(bv));
if (output_raw != '*') {
+ atoascii(value, MAXVALLEN,
+ bv, sizeof(bv) - 1);
len = strlen(bv);
bv[len] = output_raw;
bv[len+1] = '\0';
+ } else {
+ atoascii(value, MAXVALLEN,
+ bv, sizeof(bv));
}
output(fp, bn, bv);
}
@@ -3503,7 +3507,7 @@ static void list_md_fn(const EVP_MD *m, const char *from, const char *to, void *
if (!strcmp(*seen, name))
return;
n = (seen - hstate->seen) + 2;
- hstate->seen = realloc(hstate->seen, n * sizeof(*seen));
+ hstate->seen = erealloc(hstate->seen, n * sizeof(*seen));
hstate->seen[n-2] = name;
hstate->seen[n-1] = NULL;
@@ -3521,10 +3525,10 @@ static void list_md_fn(const EVP_MD *m, const char *from, const char *to, void *
len += (hstate->idx >= K_PER_LINE)? strlen(K_NL_PFX_STR): strlen(K_DELIM_STR);
if (hstate->list == NULL) {
- hstate->list = (char *)malloc(len);
+ hstate->list = (char *)emalloc(len);
hstate->list[0] = '\0';
} else
- hstate->list = (char *)realloc(hstate->list, len);
+ hstate->list = (char *)erealloc(hstate->list, len);
sprintf(hstate->list + strlen(hstate->list), "%s%s",
((hstate->idx >= K_PER_LINE)? K_NL_PFX_STR : K_DELIM_STR),
@@ -3545,18 +3549,18 @@ static char *list_digest_names(void)
# ifdef HAVE_EVP_MD_DO_ALL_SORTED
struct hstate hstate = { NULL, NULL, K_PER_LINE+1 };
- hstate.seen = (const char **)calloc(1, sizeof( const char * ));
+ hstate.seen = (const char **) emalloc_zero(1*sizeof( const char * )); // replaces -> calloc(1, sizeof( const char * ));
INIT_SSL();
EVP_MD_do_all_sorted(list_md_fn, &hstate);
list = hstate.list;
free(hstate.seen);
# else
- list = (char *)malloc(sizeof("md5, others (upgrade to OpenSSL-1.0 for full list)"));
+ list = (char *)emalloc(sizeof("md5, others (upgrade to OpenSSL-1.0 for full list)"));
strcpy(list, "md5, others (upgrade to OpenSSL-1.0 for full list)");
# endif
#else
- list = (char *)malloc(sizeof("md5"));
+ list = (char *)emalloc(sizeof("md5"));
strcpy(list, "md5");
#endif
diff --git a/contrib/ntp/ntpq/ntpq.html b/contrib/ntp/ntpq/ntpq.html
index e567419..e2c3740 100644
--- a/contrib/ntp/ntpq/ntpq.html
+++ b/contrib/ntp/ntpq/ntpq.html
@@ -44,7 +44,7 @@ monitor the operational status
and determine the performance of
<code>ntpd</code>, the NTP daemon.
- <p>This document applies to version 4.2.8p3 of <code>ntpq</code>.
+ <p>This document applies to version 4.2.8p4 of <code>ntpq</code>.
<ul class="menu">
<li><a accesskey="1" href="#ntpq-Description">ntpq Description</a>
@@ -769,7 +769,7 @@ the usage text by passing it through a pager program.
used to select the program, defaulting to <span class="file">more</span>. Both will exit
with a status code of 0.
-<pre class="example">ntpq - standard NTP query program - Ver. 4.2.8p3-RC3
+<pre class="example">ntpq - standard NTP query program - Ver. 4.2.8p4-sec-RC2
Usage: ntpq [ -&lt;flag&gt; [&lt;val&gt;] | --&lt;name&gt;[{=| }&lt;val&gt;] ]... [ host ...]
Flg Arg Option-Name Description
-4 no ipv4 Force IPv4 DNS name resolution
diff --git a/contrib/ntp/ntpq/ntpq.man.in b/contrib/ntp/ntpq/ntpq.man.in
index 7d5dcd3..0c0af5b 100644
--- a/contrib/ntp/ntpq/ntpq.man.in
+++ b/contrib/ntp/ntpq/ntpq.man.in
@@ -10,11 +10,11 @@
.ds B-Font B
.ds I-Font I
.ds R-Font R
-.TH ntpq @NTPQ_MS@ "29 Jun 2015" "4.2.8p3" "User Commands"
+.TH ntpq @NTPQ_MS@ "21 Oct 2015" "4.2.8p4" "User Commands"
.\"
-.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-6GaipG/ag-fHaaoG)
+.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-joa4fN/ag-voaWeN)
.\"
-.\" It has been AutoGen-ed June 29, 2015 at 04:31:32 PM by AutoGen 5.18.5
+.\" It has been AutoGen-ed October 21, 2015 at 12:39:23 PM by AutoGen 5.18.5
.\" From the definitions ntpq-opts.def
.\" and the template file agman-cmd.tpl
.SH NAME
diff --git a/contrib/ntp/ntpq/ntpq.mdoc.in b/contrib/ntp/ntpq/ntpq.mdoc.in
index 69c28e4..2b20ddc 100644
--- a/contrib/ntp/ntpq/ntpq.mdoc.in
+++ b/contrib/ntp/ntpq/ntpq.mdoc.in
@@ -1,9 +1,9 @@
-.Dd June 29 2015
+.Dd October 21 2015
.Dt NTPQ @NTPQ_MS@ User Commands
.Os
.\" EDIT THIS FILE WITH CAUTION (ntpq-opts.mdoc)
.\"
-.\" It has been AutoGen-ed June 29, 2015 at 04:31:41 PM by AutoGen 5.18.5
+.\" It has been AutoGen-ed October 21, 2015 at 12:39:29 PM by AutoGen 5.18.5
.\" From the definitions ntpq-opts.def
.\" and the template file agmdoc-cmd.tpl
.Sh NAME
diff --git a/contrib/ntp/ntpsnmpd/Makefile.in b/contrib/ntp/ntpsnmpd/Makefile.in
index 34a267f..7b7f566 100644
--- a/contrib/ntp/ntpsnmpd/Makefile.in
+++ b/contrib/ntp/ntpsnmpd/Makefile.in
@@ -122,6 +122,7 @@ am__aclocal_m4_deps = $(top_srcdir)/sntp/libopts/m4/libopts.m4 \
$(top_srcdir)/sntp/m4/ntp_locinfo.m4 \
$(top_srcdir)/sntp/m4/ntp_openssl.m4 \
$(top_srcdir)/sntp/m4/ntp_pkg_config.m4 \
+ $(top_srcdir)/sntp/m4/ntp_problemtests.m4 \
$(top_srcdir)/sntp/m4/ntp_prog_cc.m4 \
$(top_srcdir)/sntp/m4/ntp_rlimit.m4 \
$(top_srcdir)/sntp/m4/ntp_sntp.m4 \
@@ -263,6 +264,7 @@ AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
+BUILD_THREAD = @BUILD_THREAD@
CALC_TICKADJ_DB = @CALC_TICKADJ_DB@
CALC_TICKADJ_DL = @CALC_TICKADJ_DL@
CALC_TICKADJ_DS = @CALC_TICKADJ_DS@
@@ -271,6 +273,7 @@ CALC_TICKADJ_NI = @CALC_TICKADJ_NI@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
+CFLAGS_LIBEVENT = @CFLAGS_LIBEVENT@
CFLAGS_NTP = @CFLAGS_NTP@
CHUTEST = @CHUTEST@
CONFIG_SHELL = @CONFIG_SHELL@
@@ -332,6 +335,7 @@ LIBTOOL_DEPS = @LIBTOOL_DEPS@
LIPO = @LIPO@
LN_S = @LN_S@
LSCF = @LSCF@
+LTHREAD_LIBS = @LTHREAD_LIBS@
LTLIBOBJS = @LTLIBOBJS@
MAKEINFO = @MAKEINFO@
MAKE_ADJTIMED = @MAKE_ADJTIMED@
diff --git a/contrib/ntp/ntpsnmpd/invoke-ntpsnmpd.texi b/contrib/ntp/ntpsnmpd/invoke-ntpsnmpd.texi
index c38de6e..ac8e69c 100644
--- a/contrib/ntp/ntpsnmpd/invoke-ntpsnmpd.texi
+++ b/contrib/ntp/ntpsnmpd/invoke-ntpsnmpd.texi
@@ -6,7 +6,7 @@
#
# EDIT THIS FILE WITH CAUTION (invoke-ntpsnmpd.texi)
#
-# It has been AutoGen-ed June 29, 2015 at 04:31:53 PM by AutoGen 5.18.5
+# It has been AutoGen-ed October 21, 2015 at 12:39:43 PM by AutoGen 5.18.5
# From the definitions ntpsnmpd-opts.def
# and the template file agtexi-cmd.tpl
@end ignore
@@ -47,7 +47,7 @@ with a status code of 0.
@exampleindent 0
@example
-ntpsnmpd - NTP SNMP MIB agent - Ver. 4.2.8p3
+ntpsnmpd - NTP SNMP MIB agent - Ver. 4.2.8p4
Usage: ntpsnmpd [ -<flag> [<val>] | --<name>[@{=| @}<val>] ]...
Flg Arg Option-Name Description
-n no nofork Do not fork
diff --git a/contrib/ntp/ntpsnmpd/ntpsnmpd-opts.c b/contrib/ntp/ntpsnmpd/ntpsnmpd-opts.c
index dbad371..01013fb 100644
--- a/contrib/ntp/ntpsnmpd/ntpsnmpd-opts.c
+++ b/contrib/ntp/ntpsnmpd/ntpsnmpd-opts.c
@@ -1,7 +1,7 @@
/*
* EDIT THIS FILE WITH CAUTION (ntpsnmpd-opts.c)
*
- * It has been AutoGen-ed June 29, 2015 at 04:31:44 PM by AutoGen 5.18.5
+ * It has been AutoGen-ed October 21, 2015 at 12:39:32 PM by AutoGen 5.18.5
* From the definitions ntpsnmpd-opts.def
* and the template file options
*
@@ -61,7 +61,7 @@ extern FILE * option_usage_fp;
* static const strings for ntpsnmpd options
*/
static char const ntpsnmpd_opt_strs[1610] =
-/* 0 */ "ntpsnmpd 4.2.8p3\n"
+/* 0 */ "ntpsnmpd 4.2.8p4\n"
"Copyright (C) 1992-2015 The University of Delaware and Network Time Foundation, all rights reserved.\n"
"This is free software. It is licensed for use, modification and\n"
"redistribution under the terms of the NTP License, copies of which\n"
@@ -101,14 +101,14 @@ static char const ntpsnmpd_opt_strs[1610] =
/* 1414 */ "no-load-opts\0"
/* 1427 */ "no\0"
/* 1430 */ "NTPSNMPD\0"
-/* 1439 */ "ntpsnmpd - NTP SNMP MIB agent - Ver. 4.2.8p3\n"
+/* 1439 */ "ntpsnmpd - NTP SNMP MIB agent - Ver. 4.2.8p4\n"
"Usage: %s [ -<flag> [<val>] | --<name>[{=| }<val>] ]...\n\0"
/* 1542 */ "$HOME\0"
/* 1548 */ ".\0"
/* 1550 */ ".ntprc\0"
/* 1557 */ "http://bugs.ntp.org, bugs@ntp.org\0"
/* 1591 */ "\n\0"
-/* 1593 */ "ntpsnmpd 4.2.8p3";
+/* 1593 */ "ntpsnmpd 4.2.8p4";
/**
* nofork option description:
@@ -554,7 +554,7 @@ static void bogus_function(void) {
translate option names.
*/
/* referenced via ntpsnmpdOptions.pzCopyright */
- puts(_("ntpsnmpd 4.2.8p3\n\
+ puts(_("ntpsnmpd 4.2.8p4\n\
Copyright (C) 1992-2015 The University of Delaware and Network Time Foundation, all rights reserved.\n\
This is free software. It is licensed for use, modification and\n\
redistribution under the terms of the NTP License, copies of which\n\
@@ -599,14 +599,14 @@ implied warranty.\n"));
puts(_("load options from a config file"));
/* referenced via ntpsnmpdOptions.pzUsageTitle */
- puts(_("ntpsnmpd - NTP SNMP MIB agent - Ver. 4.2.8p3\n\
+ puts(_("ntpsnmpd - NTP SNMP MIB agent - Ver. 4.2.8p4\n\
Usage: %s [ -<flag> [<val>] | --<name>[{=| }<val>] ]...\n"));
/* referenced via ntpsnmpdOptions.pzExplain */
puts(_("\n"));
/* referenced via ntpsnmpdOptions.pzFullVersion */
- puts(_("ntpsnmpd 4.2.8p3"));
+ puts(_("ntpsnmpd 4.2.8p4"));
/* referenced via ntpsnmpdOptions.pzFullUsage */
puts(_("<<<NOT-FOUND>>>"));
diff --git a/contrib/ntp/ntpsnmpd/ntpsnmpd-opts.h b/contrib/ntp/ntpsnmpd/ntpsnmpd-opts.h
index c5000c8..07756dd 100644
--- a/contrib/ntp/ntpsnmpd/ntpsnmpd-opts.h
+++ b/contrib/ntp/ntpsnmpd/ntpsnmpd-opts.h
@@ -1,7 +1,7 @@
/*
* EDIT THIS FILE WITH CAUTION (ntpsnmpd-opts.h)
*
- * It has been AutoGen-ed June 29, 2015 at 04:31:44 PM by AutoGen 5.18.5
+ * It has been AutoGen-ed October 21, 2015 at 12:39:32 PM by AutoGen 5.18.5
* From the definitions ntpsnmpd-opts.def
* and the template file options
*
@@ -76,9 +76,9 @@ typedef enum {
/** count of all options for ntpsnmpd */
#define OPTION_CT 8
/** ntpsnmpd version */
-#define NTPSNMPD_VERSION "4.2.8p3"
+#define NTPSNMPD_VERSION "4.2.8p4"
/** Full ntpsnmpd version text */
-#define NTPSNMPD_FULL_VERSION "ntpsnmpd 4.2.8p3"
+#define NTPSNMPD_FULL_VERSION "ntpsnmpd 4.2.8p4"
/**
* Interface defines for all options. Replace "n" with the UPPER_CASED
diff --git a/contrib/ntp/ntpsnmpd/ntpsnmpd.1ntpsnmpdman b/contrib/ntp/ntpsnmpd/ntpsnmpd.1ntpsnmpdman
index aaf0297..1a5dff3 100644
--- a/contrib/ntp/ntpsnmpd/ntpsnmpd.1ntpsnmpdman
+++ b/contrib/ntp/ntpsnmpd/ntpsnmpd.1ntpsnmpdman
@@ -10,11 +10,11 @@
.ds B-Font B
.ds I-Font I
.ds R-Font R
-.TH ntpsnmpd 1ntpsnmpdman "29 Jun 2015" "4.2.8p3" "User Commands"
+.TH ntpsnmpd 1ntpsnmpdman "21 Oct 2015" "4.2.8p4" "User Commands"
.\"
-.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-_XaaxH/ag-lYa4vH)
+.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-Xna4nO/ag-9naWmO)
.\"
-.\" It has been AutoGen-ed June 29, 2015 at 04:31:50 PM by AutoGen 5.18.5
+.\" It has been AutoGen-ed October 21, 2015 at 12:39:39 PM by AutoGen 5.18.5
.\" From the definitions ntpsnmpd-opts.def
.\" and the template file agman-cmd.tpl
.SH NAME
diff --git a/contrib/ntp/ntpsnmpd/ntpsnmpd.1ntpsnmpdmdoc b/contrib/ntp/ntpsnmpd/ntpsnmpd.1ntpsnmpdmdoc
index b93deaf..e13b816 100644
--- a/contrib/ntp/ntpsnmpd/ntpsnmpd.1ntpsnmpdmdoc
+++ b/contrib/ntp/ntpsnmpd/ntpsnmpd.1ntpsnmpdmdoc
@@ -1,9 +1,9 @@
-.Dd June 29 2015
+.Dd October 21 2015
.Dt NTPSNMPD 1ntpsnmpdmdoc User Commands
.Os
.\" EDIT THIS FILE WITH CAUTION (ntpsnmpd-opts.mdoc)
.\"
-.\" It has been AutoGen-ed June 29, 2015 at 04:31:56 PM by AutoGen 5.18.5
+.\" It has been AutoGen-ed October 21, 2015 at 12:39:45 PM by AutoGen 5.18.5
.\" From the definitions ntpsnmpd-opts.def
.\" and the template file agmdoc-cmd.tpl
.Sh NAME
diff --git a/contrib/ntp/ntpsnmpd/ntpsnmpd.html b/contrib/ntp/ntpsnmpd/ntpsnmpd.html
index 668eca6..1ad4ffc 100644
--- a/contrib/ntp/ntpsnmpd/ntpsnmpd.html
+++ b/contrib/ntp/ntpsnmpd/ntpsnmpd.html
@@ -42,7 +42,7 @@ Up:&nbsp;<a rel="up" accesskey="u" href="#dir">(dir)</a>
<p>The <code>ntpsnmpd</code> utility program is used to monitor NTP daemon <code>ntpd</code>
operations and determine performance. It uses the standard NTP mode 6 control
- <p>This document applies to version 4.2.8p3 of <code>ntpsnmpd</code>.
+ <p>This document applies to version 4.2.8p4 of <code>ntpsnmpd</code>.
<ul class="menu">
<li><a accesskey="1" href="#ntpsnmpd-Description">ntpsnmpd Description</a>: Description
diff --git a/contrib/ntp/ntpsnmpd/ntpsnmpd.man.in b/contrib/ntp/ntpsnmpd/ntpsnmpd.man.in
index 9db71b9..0da76ff 100644
--- a/contrib/ntp/ntpsnmpd/ntpsnmpd.man.in
+++ b/contrib/ntp/ntpsnmpd/ntpsnmpd.man.in
@@ -10,11 +10,11 @@
.ds B-Font B
.ds I-Font I
.ds R-Font R
-.TH ntpsnmpd @NTPSNMPD_MS@ "29 Jun 2015" "4.2.8p3" "User Commands"
+.TH ntpsnmpd @NTPSNMPD_MS@ "21 Oct 2015" "4.2.8p4" "User Commands"
.\"
-.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-_XaaxH/ag-lYa4vH)
+.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-Xna4nO/ag-9naWmO)
.\"
-.\" It has been AutoGen-ed June 29, 2015 at 04:31:50 PM by AutoGen 5.18.5
+.\" It has been AutoGen-ed October 21, 2015 at 12:39:39 PM by AutoGen 5.18.5
.\" From the definitions ntpsnmpd-opts.def
.\" and the template file agman-cmd.tpl
.SH NAME
diff --git a/contrib/ntp/ntpsnmpd/ntpsnmpd.mdoc.in b/contrib/ntp/ntpsnmpd/ntpsnmpd.mdoc.in
index 343b1fa..d2cebc4 100644
--- a/contrib/ntp/ntpsnmpd/ntpsnmpd.mdoc.in
+++ b/contrib/ntp/ntpsnmpd/ntpsnmpd.mdoc.in
@@ -1,9 +1,9 @@
-.Dd June 29 2015
+.Dd October 21 2015
.Dt NTPSNMPD @NTPSNMPD_MS@ User Commands
.Os
.\" EDIT THIS FILE WITH CAUTION (ntpsnmpd-opts.mdoc)
.\"
-.\" It has been AutoGen-ed June 29, 2015 at 04:31:56 PM by AutoGen 5.18.5
+.\" It has been AutoGen-ed October 21, 2015 at 12:39:45 PM by AutoGen 5.18.5
.\" From the definitions ntpsnmpd-opts.def
.\" and the template file agmdoc-cmd.tpl
.Sh NAME
diff --git a/contrib/ntp/packageinfo.sh b/contrib/ntp/packageinfo.sh
index 444ad4d..1e0a228 100644
--- a/contrib/ntp/packageinfo.sh
+++ b/contrib/ntp/packageinfo.sh
@@ -83,7 +83,7 @@ CLTAG=NTP_4_2_0
# - Numeric values increment
# - empty 'increments' to 1
# - NEW 'increments' to empty
-point=3
+point=4
### betapoint is normally modified by script.
# ntp-stable Beta number (betapoint)
diff --git a/contrib/ntp/parseutil/Makefile.in b/contrib/ntp/parseutil/Makefile.in
index c550bd2..a23d6e4 100644
--- a/contrib/ntp/parseutil/Makefile.in
+++ b/contrib/ntp/parseutil/Makefile.in
@@ -117,6 +117,7 @@ am__aclocal_m4_deps = $(top_srcdir)/sntp/libopts/m4/libopts.m4 \
$(top_srcdir)/sntp/m4/ntp_locinfo.m4 \
$(top_srcdir)/sntp/m4/ntp_openssl.m4 \
$(top_srcdir)/sntp/m4/ntp_pkg_config.m4 \
+ $(top_srcdir)/sntp/m4/ntp_problemtests.m4 \
$(top_srcdir)/sntp/m4/ntp_prog_cc.m4 \
$(top_srcdir)/sntp/m4/ntp_rlimit.m4 \
$(top_srcdir)/sntp/m4/ntp_sntp.m4 \
@@ -224,6 +225,7 @@ AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
+BUILD_THREAD = @BUILD_THREAD@
CALC_TICKADJ_DB = @CALC_TICKADJ_DB@
CALC_TICKADJ_DL = @CALC_TICKADJ_DL@
CALC_TICKADJ_DS = @CALC_TICKADJ_DS@
@@ -232,6 +234,7 @@ CALC_TICKADJ_NI = @CALC_TICKADJ_NI@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
+CFLAGS_LIBEVENT = @CFLAGS_LIBEVENT@
CFLAGS_NTP = @CFLAGS_NTP@
CHUTEST = @CHUTEST@
CONFIG_SHELL = @CONFIG_SHELL@
@@ -293,6 +296,7 @@ LIBTOOL_DEPS = @LIBTOOL_DEPS@
LIPO = @LIPO@
LN_S = @LN_S@
LSCF = @LSCF@
+LTHREAD_LIBS = @LTHREAD_LIBS@
LTLIBOBJS = @LTLIBOBJS@
MAKEINFO = @MAKEINFO@
MAKE_ADJTIMED = @MAKE_ADJTIMED@
diff --git a/contrib/ntp/scripts/Makefile.in b/contrib/ntp/scripts/Makefile.in
index 9fc296b..447a1b3 100644
--- a/contrib/ntp/scripts/Makefile.in
+++ b/contrib/ntp/scripts/Makefile.in
@@ -117,6 +117,7 @@ am__aclocal_m4_deps = $(top_srcdir)/sntp/libopts/m4/libopts.m4 \
$(top_srcdir)/sntp/m4/ntp_locinfo.m4 \
$(top_srcdir)/sntp/m4/ntp_openssl.m4 \
$(top_srcdir)/sntp/m4/ntp_pkg_config.m4 \
+ $(top_srcdir)/sntp/m4/ntp_problemtests.m4 \
$(top_srcdir)/sntp/m4/ntp_prog_cc.m4 \
$(top_srcdir)/sntp/m4/ntp_rlimit.m4 \
$(top_srcdir)/sntp/m4/ntp_sntp.m4 \
@@ -261,6 +262,7 @@ AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
+BUILD_THREAD = @BUILD_THREAD@
CALC_TICKADJ_DB = @CALC_TICKADJ_DB@
CALC_TICKADJ_DL = @CALC_TICKADJ_DL@
CALC_TICKADJ_DS = @CALC_TICKADJ_DS@
@@ -269,6 +271,7 @@ CALC_TICKADJ_NI = @CALC_TICKADJ_NI@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
+CFLAGS_LIBEVENT = @CFLAGS_LIBEVENT@
CFLAGS_NTP = @CFLAGS_NTP@
CHUTEST = @CHUTEST@
CONFIG_SHELL = @CONFIG_SHELL@
@@ -330,6 +333,7 @@ LIBTOOL_DEPS = @LIBTOOL_DEPS@
LIPO = @LIPO@
LN_S = @LN_S@
LSCF = @LSCF@
+LTHREAD_LIBS = @LTHREAD_LIBS@
LTLIBOBJS = @LTLIBOBJS@
MAKEINFO = @MAKEINFO@
MAKE_ADJTIMED = @MAKE_ADJTIMED@
diff --git a/contrib/ntp/scripts/build/Makefile.in b/contrib/ntp/scripts/build/Makefile.in
index 3d52e81..d758d61 100644
--- a/contrib/ntp/scripts/build/Makefile.in
+++ b/contrib/ntp/scripts/build/Makefile.in
@@ -116,6 +116,7 @@ am__aclocal_m4_deps = $(top_srcdir)/sntp/libopts/m4/libopts.m4 \
$(top_srcdir)/sntp/m4/ntp_locinfo.m4 \
$(top_srcdir)/sntp/m4/ntp_openssl.m4 \
$(top_srcdir)/sntp/m4/ntp_pkg_config.m4 \
+ $(top_srcdir)/sntp/m4/ntp_problemtests.m4 \
$(top_srcdir)/sntp/m4/ntp_prog_cc.m4 \
$(top_srcdir)/sntp/m4/ntp_rlimit.m4 \
$(top_srcdir)/sntp/m4/ntp_sntp.m4 \
@@ -166,6 +167,7 @@ AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
+BUILD_THREAD = @BUILD_THREAD@
CALC_TICKADJ_DB = @CALC_TICKADJ_DB@
CALC_TICKADJ_DL = @CALC_TICKADJ_DL@
CALC_TICKADJ_DS = @CALC_TICKADJ_DS@
@@ -174,6 +176,7 @@ CALC_TICKADJ_NI = @CALC_TICKADJ_NI@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
+CFLAGS_LIBEVENT = @CFLAGS_LIBEVENT@
CFLAGS_NTP = @CFLAGS_NTP@
CHUTEST = @CHUTEST@
CONFIG_SHELL = @CONFIG_SHELL@
@@ -235,6 +238,7 @@ LIBTOOL_DEPS = @LIBTOOL_DEPS@
LIPO = @LIPO@
LN_S = @LN_S@
LSCF = @LSCF@
+LTHREAD_LIBS = @LTHREAD_LIBS@
LTLIBOBJS = @LTLIBOBJS@
MAKEINFO = @MAKEINFO@
MAKE_ADJTIMED = @MAKE_ADJTIMED@
diff --git a/contrib/ntp/scripts/calc_tickadj/Makefile.in b/contrib/ntp/scripts/calc_tickadj/Makefile.in
index c1b6576..c68c31d 100644
--- a/contrib/ntp/scripts/calc_tickadj/Makefile.in
+++ b/contrib/ntp/scripts/calc_tickadj/Makefile.in
@@ -118,6 +118,7 @@ am__aclocal_m4_deps = $(top_srcdir)/sntp/libopts/m4/libopts.m4 \
$(top_srcdir)/sntp/m4/ntp_locinfo.m4 \
$(top_srcdir)/sntp/m4/ntp_openssl.m4 \
$(top_srcdir)/sntp/m4/ntp_pkg_config.m4 \
+ $(top_srcdir)/sntp/m4/ntp_problemtests.m4 \
$(top_srcdir)/sntp/m4/ntp_prog_cc.m4 \
$(top_srcdir)/sntp/m4/ntp_rlimit.m4 \
$(top_srcdir)/sntp/m4/ntp_sntp.m4 \
@@ -203,6 +204,7 @@ AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
+BUILD_THREAD = @BUILD_THREAD@
CALC_TICKADJ_DB = @CALC_TICKADJ_DB@
CALC_TICKADJ_DL = @CALC_TICKADJ_DL@
CALC_TICKADJ_DS = @CALC_TICKADJ_DS@
@@ -211,6 +213,7 @@ CALC_TICKADJ_NI = @CALC_TICKADJ_NI@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
+CFLAGS_LIBEVENT = @CFLAGS_LIBEVENT@
CFLAGS_NTP = @CFLAGS_NTP@
CHUTEST = @CHUTEST@
CONFIG_SHELL = @CONFIG_SHELL@
@@ -272,6 +275,7 @@ LIBTOOL_DEPS = @LIBTOOL_DEPS@
LIPO = @LIPO@
LN_S = @LN_S@
LSCF = @LSCF@
+LTHREAD_LIBS = @LTHREAD_LIBS@
LTLIBOBJS = @LTLIBOBJS@
MAKEINFO = @MAKEINFO@
MAKE_ADJTIMED = @MAKE_ADJTIMED@
diff --git a/contrib/ntp/scripts/calc_tickadj/calc_tickadj.1calc_tickadjman b/contrib/ntp/scripts/calc_tickadj/calc_tickadj.1calc_tickadjman
index 8649b81..9057b89 100644
--- a/contrib/ntp/scripts/calc_tickadj/calc_tickadj.1calc_tickadjman
+++ b/contrib/ntp/scripts/calc_tickadj/calc_tickadj.1calc_tickadjman
@@ -10,11 +10,11 @@
.ds B-Font B
.ds I-Font I
.ds R-Font R
-.TH calc_tickadj 1calc_tickadjman "29 Jun 2015" "ntp (4.2.8p3)" "User Commands"
+.TH calc_tickadj 1calc_tickadjman "21 Oct 2015" "ntp (4.2.8p4)" "User Commands"
.\"
-.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-XJaWrs/ag-9Ja4qs)
+.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-3baGnz/ag-dcaOmz)
.\"
-.\" It has been AutoGen-ed June 29, 2015 at 04:26:21 PM by AutoGen 5.18.5
+.\" It has been AutoGen-ed October 21, 2015 at 12:33:58 PM by AutoGen 5.18.5
.\" From the definitions calc_tickadj-opts.def
.\" and the template file agman-cmd.tpl
.SH NAME
diff --git a/contrib/ntp/scripts/calc_tickadj/calc_tickadj.1calc_tickadjmdoc b/contrib/ntp/scripts/calc_tickadj/calc_tickadj.1calc_tickadjmdoc
index 79a1cc6..9c1245b 100644
--- a/contrib/ntp/scripts/calc_tickadj/calc_tickadj.1calc_tickadjmdoc
+++ b/contrib/ntp/scripts/calc_tickadj/calc_tickadj.1calc_tickadjmdoc
@@ -1,9 +1,9 @@
-.Dd June 29 2015
+.Dd October 21 2015
.Dt CALC_TICKADJ 1calc_tickadjmdoc User Commands
.Os
.\" EDIT THIS FILE WITH CAUTION (calc_tickadj-opts.mdoc)
.\"
-.\" It has been AutoGen-ed June 29, 2015 at 04:26:25 PM by AutoGen 5.18.5
+.\" It has been AutoGen-ed October 21, 2015 at 12:34:02 PM by AutoGen 5.18.5
.\" From the definitions calc_tickadj-opts.def
.\" and the template file agmdoc-cmd.tpl
.Sh NAME
diff --git a/contrib/ntp/scripts/calc_tickadj/calc_tickadj.html b/contrib/ntp/scripts/calc_tickadj/calc_tickadj.html
index c0493a4..a88e28f 100644
--- a/contrib/ntp/scripts/calc_tickadj/calc_tickadj.html
+++ b/contrib/ntp/scripts/calc_tickadj/calc_tickadj.html
@@ -31,7 +31,7 @@ Up:&nbsp;<a rel="up" accesskey="u" href="#dir">(dir)</a>
<h2 class="unnumbered">calc_tickadj User's Manual</h2>
<p>This document describes the use of the NTP Project's <code>calc_tickadj</code> program.
-This document applies to version 4.2.8p3 of <code>calc_tickadj</code>.
+This document applies to version 4.2.8p4 of <code>calc_tickadj</code>.
<div class="shortcontents">
<h2>Short Contents</h2>
diff --git a/contrib/ntp/scripts/calc_tickadj/calc_tickadj.man.in b/contrib/ntp/scripts/calc_tickadj/calc_tickadj.man.in
index 8649b81..9057b89 100644
--- a/contrib/ntp/scripts/calc_tickadj/calc_tickadj.man.in
+++ b/contrib/ntp/scripts/calc_tickadj/calc_tickadj.man.in
@@ -10,11 +10,11 @@
.ds B-Font B
.ds I-Font I
.ds R-Font R
-.TH calc_tickadj 1calc_tickadjman "29 Jun 2015" "ntp (4.2.8p3)" "User Commands"
+.TH calc_tickadj 1calc_tickadjman "21 Oct 2015" "ntp (4.2.8p4)" "User Commands"
.\"
-.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-XJaWrs/ag-9Ja4qs)
+.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-3baGnz/ag-dcaOmz)
.\"
-.\" It has been AutoGen-ed June 29, 2015 at 04:26:21 PM by AutoGen 5.18.5
+.\" It has been AutoGen-ed October 21, 2015 at 12:33:58 PM by AutoGen 5.18.5
.\" From the definitions calc_tickadj-opts.def
.\" and the template file agman-cmd.tpl
.SH NAME
diff --git a/contrib/ntp/scripts/calc_tickadj/calc_tickadj.mdoc.in b/contrib/ntp/scripts/calc_tickadj/calc_tickadj.mdoc.in
index 79a1cc6..9c1245b 100644
--- a/contrib/ntp/scripts/calc_tickadj/calc_tickadj.mdoc.in
+++ b/contrib/ntp/scripts/calc_tickadj/calc_tickadj.mdoc.in
@@ -1,9 +1,9 @@
-.Dd June 29 2015
+.Dd October 21 2015
.Dt CALC_TICKADJ 1calc_tickadjmdoc User Commands
.Os
.\" EDIT THIS FILE WITH CAUTION (calc_tickadj-opts.mdoc)
.\"
-.\" It has been AutoGen-ed June 29, 2015 at 04:26:25 PM by AutoGen 5.18.5
+.\" It has been AutoGen-ed October 21, 2015 at 12:34:02 PM by AutoGen 5.18.5
.\" From the definitions calc_tickadj-opts.def
.\" and the template file agmdoc-cmd.tpl
.Sh NAME
diff --git a/contrib/ntp/scripts/calc_tickadj/invoke-calc_tickadj.texi b/contrib/ntp/scripts/calc_tickadj/invoke-calc_tickadj.texi
index f1d7c71..2c66634 100644
--- a/contrib/ntp/scripts/calc_tickadj/invoke-calc_tickadj.texi
+++ b/contrib/ntp/scripts/calc_tickadj/invoke-calc_tickadj.texi
@@ -6,7 +6,7 @@
#
# EDIT THIS FILE WITH CAUTION (invoke-calc_tickadj.texi)
#
-# It has been AutoGen-ed June 29, 2015 at 04:26:27 PM by AutoGen 5.18.5
+# It has been AutoGen-ed October 21, 2015 at 12:34:04 PM by AutoGen 5.18.5
# From the definitions calc_tickadj-opts.def
# and the template file agtexi-cmd.tpl
@end ignore
diff --git a/contrib/ntp/scripts/invoke-plot_summary.texi b/contrib/ntp/scripts/invoke-plot_summary.texi
index 09bb00b..914c37b 100644
--- a/contrib/ntp/scripts/invoke-plot_summary.texi
+++ b/contrib/ntp/scripts/invoke-plot_summary.texi
@@ -6,7 +6,7 @@
#
# EDIT THIS FILE WITH CAUTION (invoke-plot_summary.texi)
#
-# It has been AutoGen-ed June 29, 2015 at 04:27:09 PM by AutoGen 5.18.5
+# It has been AutoGen-ed October 21, 2015 at 12:34:48 PM by AutoGen 5.18.5
# From the definitions plot_summary-opts.def
# and the template file agtexi-cmd.tpl
@end ignore
@@ -41,7 +41,7 @@ with a status code of 0.
@exampleindent 0
@example
-plot_summary - plot statistics generated by summary script - Ver. 4.2.8p3
+plot_summary - plot statistics generated by summary script - Ver. 4.2.8p4
USAGE: plot_summary [ -<flag> [<val>] | --<name>[@{=| @}<val>] ]...
--directory=str Where the summary files are
diff --git a/contrib/ntp/scripts/invoke-summary.texi b/contrib/ntp/scripts/invoke-summary.texi
index 4156372..dc0dca7 100644
--- a/contrib/ntp/scripts/invoke-summary.texi
+++ b/contrib/ntp/scripts/invoke-summary.texi
@@ -6,7 +6,7 @@
#
# EDIT THIS FILE WITH CAUTION (invoke-summary.texi)
#
-# It has been AutoGen-ed June 29, 2015 at 04:27:14 PM by AutoGen 5.18.5
+# It has been AutoGen-ed October 21, 2015 at 12:34:54 PM by AutoGen 5.18.5
# From the definitions summary-opts.def
# and the template file agtexi-cmd.tpl
@end ignore
@@ -42,7 +42,7 @@ with a status code of 0.
@exampleindent 0
@example
-summary - compute various stastics from NTP stat files - Ver. 4.2.8p3
+summary - compute various stastics from NTP stat files - Ver. 4.2.8p4
USAGE: summary [ -<flag> [<val>] | --<name>[@{=| @}<val>] ]...
--directory=str Directory containing stat files
diff --git a/contrib/ntp/scripts/lib/Makefile.in b/contrib/ntp/scripts/lib/Makefile.in
index 8b05f29..4a41610 100644
--- a/contrib/ntp/scripts/lib/Makefile.in
+++ b/contrib/ntp/scripts/lib/Makefile.in
@@ -116,6 +116,7 @@ am__aclocal_m4_deps = $(top_srcdir)/sntp/libopts/m4/libopts.m4 \
$(top_srcdir)/sntp/m4/ntp_locinfo.m4 \
$(top_srcdir)/sntp/m4/ntp_openssl.m4 \
$(top_srcdir)/sntp/m4/ntp_pkg_config.m4 \
+ $(top_srcdir)/sntp/m4/ntp_problemtests.m4 \
$(top_srcdir)/sntp/m4/ntp_prog_cc.m4 \
$(top_srcdir)/sntp/m4/ntp_rlimit.m4 \
$(top_srcdir)/sntp/m4/ntp_sntp.m4 \
@@ -194,6 +195,7 @@ AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
+BUILD_THREAD = @BUILD_THREAD@
CALC_TICKADJ_DB = @CALC_TICKADJ_DB@
CALC_TICKADJ_DL = @CALC_TICKADJ_DL@
CALC_TICKADJ_DS = @CALC_TICKADJ_DS@
@@ -202,6 +204,7 @@ CALC_TICKADJ_NI = @CALC_TICKADJ_NI@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
+CFLAGS_LIBEVENT = @CFLAGS_LIBEVENT@
CFLAGS_NTP = @CFLAGS_NTP@
CHUTEST = @CHUTEST@
CONFIG_SHELL = @CONFIG_SHELL@
@@ -263,6 +266,7 @@ LIBTOOL_DEPS = @LIBTOOL_DEPS@
LIPO = @LIPO@
LN_S = @LN_S@
LSCF = @LSCF@
+LTHREAD_LIBS = @LTHREAD_LIBS@
LTLIBOBJS = @LTLIBOBJS@
MAKEINFO = @MAKEINFO@
MAKE_ADJTIMED = @MAKE_ADJTIMED@
diff --git a/contrib/ntp/scripts/lib/NTP/Util.pm b/contrib/ntp/scripts/lib/NTP/Util.pm
index f37aeaa..69d4df1 100644
--- a/contrib/ntp/scripts/lib/NTP/Util.pm
+++ b/contrib/ntp/scripts/lib/NTP/Util.pm
@@ -139,7 +139,14 @@ sub ntp_sntp_line {
my @output = split / /;
$offset = $output[3];
- ($stratum = $output[7]) =~ s/s(\d{1,2})/$1/;
+ if (0) {
+ } elsif ($output[7] =~ /s(\d{1,2})/) {
+ $stratum = $1;
+ # warn "Found stratum at #7\n";
+ } elsif ($output[8] =~ /s(\d{1,2})/) {
+ $stratum = $1;
+ # warn "Found stratum at #8\n";
+ }
}
close $fh or croak "running sntp failed: $! (exit status $?)";
return ($offset, $stratum);
diff --git a/contrib/ntp/scripts/ntp-wait/Makefile.in b/contrib/ntp/scripts/ntp-wait/Makefile.in
index 9b0b1b6..a16d91f 100644
--- a/contrib/ntp/scripts/ntp-wait/Makefile.in
+++ b/contrib/ntp/scripts/ntp-wait/Makefile.in
@@ -117,6 +117,7 @@ am__aclocal_m4_deps = $(top_srcdir)/sntp/libopts/m4/libopts.m4 \
$(top_srcdir)/sntp/m4/ntp_locinfo.m4 \
$(top_srcdir)/sntp/m4/ntp_openssl.m4 \
$(top_srcdir)/sntp/m4/ntp_pkg_config.m4 \
+ $(top_srcdir)/sntp/m4/ntp_problemtests.m4 \
$(top_srcdir)/sntp/m4/ntp_prog_cc.m4 \
$(top_srcdir)/sntp/m4/ntp_rlimit.m4 \
$(top_srcdir)/sntp/m4/ntp_sntp.m4 \
@@ -202,6 +203,7 @@ AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
+BUILD_THREAD = @BUILD_THREAD@
CALC_TICKADJ_DB = @CALC_TICKADJ_DB@
CALC_TICKADJ_DL = @CALC_TICKADJ_DL@
CALC_TICKADJ_DS = @CALC_TICKADJ_DS@
@@ -210,6 +212,7 @@ CALC_TICKADJ_NI = @CALC_TICKADJ_NI@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
+CFLAGS_LIBEVENT = @CFLAGS_LIBEVENT@
CFLAGS_NTP = @CFLAGS_NTP@
CHUTEST = @CHUTEST@
CONFIG_SHELL = @CONFIG_SHELL@
@@ -271,6 +274,7 @@ LIBTOOL_DEPS = @LIBTOOL_DEPS@
LIPO = @LIPO@
LN_S = @LN_S@
LSCF = @LSCF@
+LTHREAD_LIBS = @LTHREAD_LIBS@
LTLIBOBJS = @LTLIBOBJS@
MAKEINFO = @MAKEINFO@
MAKE_ADJTIMED = @MAKE_ADJTIMED@
diff --git a/contrib/ntp/scripts/ntp-wait/invoke-ntp-wait.texi b/contrib/ntp/scripts/ntp-wait/invoke-ntp-wait.texi
index 5d5948e7..f626f33 100644
--- a/contrib/ntp/scripts/ntp-wait/invoke-ntp-wait.texi
+++ b/contrib/ntp/scripts/ntp-wait/invoke-ntp-wait.texi
@@ -6,7 +6,7 @@
#
# EDIT THIS FILE WITH CAUTION (invoke-ntp-wait.texi)
#
-# It has been AutoGen-ed June 29, 2015 at 04:26:33 PM by AutoGen 5.18.5
+# It has been AutoGen-ed October 21, 2015 at 12:34:12 PM by AutoGen 5.18.5
# From the definitions ntp-wait-opts.def
# and the template file agtexi-cmd.tpl
@end ignore
@@ -61,7 +61,7 @@ with a status code of 0.
@exampleindent 0
@example
-ntp-wait - Wait for ntpd to stabilize the system clock - Ver. 4.2.8p3
+ntp-wait - Wait for ntpd to stabilize the system clock - Ver. 4.2.8p4
USAGE: ntp-wait [ -<flag> [<val>] | --<name>[@{=| @}<val>] ]...
-n, --tries=num Number of times to check ntpd
diff --git a/contrib/ntp/scripts/ntp-wait/ntp-wait-opts b/contrib/ntp/scripts/ntp-wait/ntp-wait-opts
index ebb947c..e2e2897 100644
--- a/contrib/ntp/scripts/ntp-wait/ntp-wait-opts
+++ b/contrib/ntp/scripts/ntp-wait/ntp-wait-opts
@@ -1,6 +1,6 @@
# EDIT THIS FILE WITH CAUTION (ntp-wait-opts)
#
-# It has been AutoGen-ed June 29, 2015 at 04:26:28 PM by AutoGen 5.18.5
+# It has been AutoGen-ed October 21, 2015 at 12:34:06 PM by AutoGen 5.18.5
# From the definitions ntp-wait-opts.def
# and the template file perlopt
@@ -40,7 +40,7 @@ sub processOptions {
'help|?', 'more-help'));
$usage = <<'USAGE';
-ntp-wait - Wait for ntpd to stabilize the system clock - Ver. 4.2.8p3
+ntp-wait - Wait for ntpd to stabilize the system clock - Ver. 4.2.8p4
USAGE: ntp-wait [ -<flag> [<val>] | --<name>[{=| }<val>] ]...
-n, --tries=num Number of times to check ntpd
diff --git a/contrib/ntp/scripts/ntp-wait/ntp-wait.1ntp-waitman b/contrib/ntp/scripts/ntp-wait/ntp-wait.1ntp-waitman
index bc7fda6..5a0d3cc 100644
--- a/contrib/ntp/scripts/ntp-wait/ntp-wait.1ntp-waitman
+++ b/contrib/ntp/scripts/ntp-wait/ntp-wait.1ntp-waitman
@@ -10,11 +10,11 @@
.ds B-Font B
.ds I-Font I
.ds R-Font R
-.TH ntp-wait 1ntp-waitman "29 Jun 2015" "ntp (4.2.8p3)" "User Commands"
+.TH ntp-wait 1ntp-waitman "21 Oct 2015" "ntp (4.2.8p4)" "User Commands"
.\"
-.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-OSaORt/ag-0SaWQt)
+.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-fzaONA/ag-rzaWMA)
.\"
-.\" It has been AutoGen-ed June 29, 2015 at 04:26:30 PM by AutoGen 5.18.5
+.\" It has been AutoGen-ed October 21, 2015 at 12:34:08 PM by AutoGen 5.18.5
.\" From the definitions ntp-wait-opts.def
.\" and the template file agman-cmd.tpl
.SH NAME
diff --git a/contrib/ntp/scripts/ntp-wait/ntp-wait.1ntp-waitmdoc b/contrib/ntp/scripts/ntp-wait/ntp-wait.1ntp-waitmdoc
index 9149cfd..aedeec8 100644
--- a/contrib/ntp/scripts/ntp-wait/ntp-wait.1ntp-waitmdoc
+++ b/contrib/ntp/scripts/ntp-wait/ntp-wait.1ntp-waitmdoc
@@ -1,9 +1,9 @@
-.Dd June 29 2015
+.Dd October 21 2015
.Dt NTP_WAIT 1ntp-waitmdoc User Commands
.Os
.\" EDIT THIS FILE WITH CAUTION (ntp-wait-opts.mdoc)
.\"
-.\" It has been AutoGen-ed June 29, 2015 at 04:26:36 PM by AutoGen 5.18.5
+.\" It has been AutoGen-ed October 21, 2015 at 12:34:14 PM by AutoGen 5.18.5
.\" From the definitions ntp-wait-opts.def
.\" and the template file agmdoc-cmd.tpl
.Sh NAME
diff --git a/contrib/ntp/scripts/ntp-wait/ntp-wait.html b/contrib/ntp/scripts/ntp-wait/ntp-wait.html
index e9c063b..1a9ca50 100644
--- a/contrib/ntp/scripts/ntp-wait/ntp-wait.html
+++ b/contrib/ntp/scripts/ntp-wait/ntp-wait.html
@@ -39,7 +39,7 @@ until the system's time has stabilized and synchronized,
and only then start any applicaitons (like database servers) that require
accurate and stable time.
- <p>This document applies to version 4.2.8p3 of <code>ntp-wait</code>.
+ <p>This document applies to version 4.2.8p4 of <code>ntp-wait</code>.
<div class="shortcontents">
<h2>Short Contents</h2>
@@ -114,7 +114,7 @@ the usage text by passing it through a pager program.
used to select the program, defaulting to <span class="file">more</span>. Both will exit
with a status code of 0.
-<pre class="example">ntp-wait - Wait for ntpd to stabilize the system clock - Ver. 4.2.8p3
+<pre class="example">ntp-wait - Wait for ntpd to stabilize the system clock - Ver. 4.2.8p4
USAGE: ntp-wait [ -&lt;flag&gt; [&lt;val&gt;] | --&lt;name&gt;[{=| }&lt;val&gt;] ]...
-n, --tries=num Number of times to check ntpd
diff --git a/contrib/ntp/scripts/ntp-wait/ntp-wait.man.in b/contrib/ntp/scripts/ntp-wait/ntp-wait.man.in
index b58a569..12395fc 100644
--- a/contrib/ntp/scripts/ntp-wait/ntp-wait.man.in
+++ b/contrib/ntp/scripts/ntp-wait/ntp-wait.man.in
@@ -10,11 +10,11 @@
.ds B-Font B
.ds I-Font I
.ds R-Font R
-.TH ntp-wait @NTP_WAIT_MS@ "29 Jun 2015" "ntp (4.2.8p3)" "User Commands"
+.TH ntp-wait @NTP_WAIT_MS@ "21 Oct 2015" "ntp (4.2.8p4)" "User Commands"
.\"
-.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-OSaORt/ag-0SaWQt)
+.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-fzaONA/ag-rzaWMA)
.\"
-.\" It has been AutoGen-ed June 29, 2015 at 04:26:30 PM by AutoGen 5.18.5
+.\" It has been AutoGen-ed October 21, 2015 at 12:34:08 PM by AutoGen 5.18.5
.\" From the definitions ntp-wait-opts.def
.\" and the template file agman-cmd.tpl
.SH NAME
diff --git a/contrib/ntp/scripts/ntp-wait/ntp-wait.mdoc.in b/contrib/ntp/scripts/ntp-wait/ntp-wait.mdoc.in
index 19e1bdf..0798282 100644
--- a/contrib/ntp/scripts/ntp-wait/ntp-wait.mdoc.in
+++ b/contrib/ntp/scripts/ntp-wait/ntp-wait.mdoc.in
@@ -1,9 +1,9 @@
-.Dd June 29 2015
+.Dd October 21 2015
.Dt NTP_WAIT @NTP_WAIT_MS@ User Commands
.Os
.\" EDIT THIS FILE WITH CAUTION (ntp-wait-opts.mdoc)
.\"
-.\" It has been AutoGen-ed June 29, 2015 at 04:26:36 PM by AutoGen 5.18.5
+.\" It has been AutoGen-ed October 21, 2015 at 12:34:14 PM by AutoGen 5.18.5
.\" From the definitions ntp-wait-opts.def
.\" and the template file agmdoc-cmd.tpl
.Sh NAME
diff --git a/contrib/ntp/scripts/ntpsweep/Makefile.in b/contrib/ntp/scripts/ntpsweep/Makefile.in
index 0bfc785..337340c 100644
--- a/contrib/ntp/scripts/ntpsweep/Makefile.in
+++ b/contrib/ntp/scripts/ntpsweep/Makefile.in
@@ -117,6 +117,7 @@ am__aclocal_m4_deps = $(top_srcdir)/sntp/libopts/m4/libopts.m4 \
$(top_srcdir)/sntp/m4/ntp_locinfo.m4 \
$(top_srcdir)/sntp/m4/ntp_openssl.m4 \
$(top_srcdir)/sntp/m4/ntp_pkg_config.m4 \
+ $(top_srcdir)/sntp/m4/ntp_problemtests.m4 \
$(top_srcdir)/sntp/m4/ntp_prog_cc.m4 \
$(top_srcdir)/sntp/m4/ntp_rlimit.m4 \
$(top_srcdir)/sntp/m4/ntp_sntp.m4 \
@@ -203,6 +204,7 @@ AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
+BUILD_THREAD = @BUILD_THREAD@
CALC_TICKADJ_DB = @CALC_TICKADJ_DB@
CALC_TICKADJ_DL = @CALC_TICKADJ_DL@
CALC_TICKADJ_DS = @CALC_TICKADJ_DS@
@@ -211,6 +213,7 @@ CALC_TICKADJ_NI = @CALC_TICKADJ_NI@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
+CFLAGS_LIBEVENT = @CFLAGS_LIBEVENT@
CFLAGS_NTP = @CFLAGS_NTP@
CHUTEST = @CHUTEST@
CONFIG_SHELL = @CONFIG_SHELL@
@@ -272,6 +275,7 @@ LIBTOOL_DEPS = @LIBTOOL_DEPS@
LIPO = @LIPO@
LN_S = @LN_S@
LSCF = @LSCF@
+LTHREAD_LIBS = @LTHREAD_LIBS@
LTLIBOBJS = @LTLIBOBJS@
MAKEINFO = @MAKEINFO@
MAKE_ADJTIMED = @MAKE_ADJTIMED@
diff --git a/contrib/ntp/scripts/ntpsweep/invoke-ntpsweep.texi b/contrib/ntp/scripts/ntpsweep/invoke-ntpsweep.texi
index 810ca08..5a2112d 100644
--- a/contrib/ntp/scripts/ntpsweep/invoke-ntpsweep.texi
+++ b/contrib/ntp/scripts/ntpsweep/invoke-ntpsweep.texi
@@ -6,7 +6,7 @@
#
# EDIT THIS FILE WITH CAUTION (invoke-ntpsweep.texi)
#
-# It has been AutoGen-ed June 29, 2015 at 04:26:39 PM by AutoGen 5.18.5
+# It has been AutoGen-ed October 21, 2015 at 12:34:18 PM by AutoGen 5.18.5
# From the definitions ntpsweep-opts.def
# and the template file agtexi-cmd.tpl
@end ignore
@@ -45,7 +45,7 @@ with a status code of 0.
@exampleindent 0
@example
-ntpsweep - Print various informations about given ntp servers - Ver. 4.2.8p3
+ntpsweep - Print various informations about given ntp servers - Ver. 4.2.8p4
USAGE: ntpsweep [ -<flag> [<val>] | --<name>[@{=| @}<val>] ]... [hostfile]
-l, --host-list=str Host to execute actions on
diff --git a/contrib/ntp/scripts/ntpsweep/ntpsweep-opts b/contrib/ntp/scripts/ntpsweep/ntpsweep-opts
index 7261dd9..54d7f0d 100644
--- a/contrib/ntp/scripts/ntpsweep/ntpsweep-opts
+++ b/contrib/ntp/scripts/ntpsweep/ntpsweep-opts
@@ -1,6 +1,6 @@
# EDIT THIS FILE WITH CAUTION (ntpsweep-opts)
#
-# It has been AutoGen-ed June 29, 2015 at 04:26:38 PM by AutoGen 5.18.5
+# It has been AutoGen-ed October 21, 2015 at 12:34:16 PM by AutoGen 5.18.5
# From the definitions ntpsweep-opts.def
# and the template file perlopt
@@ -43,7 +43,7 @@ sub processOptions {
'help|?', 'more-help'));
$usage = <<'USAGE';
-ntpsweep - Print various informations about given ntp servers - Ver. 4.2.8p3
+ntpsweep - Print various informations about given ntp servers - Ver. 4.2.8p4
USAGE: ntpsweep [ -<flag> [<val>] | --<name>[{=| }<val>] ]... [hostfile]
-l, --host-list=str Host to execute actions on
diff --git a/contrib/ntp/scripts/ntpsweep/ntpsweep.1ntpsweepman b/contrib/ntp/scripts/ntpsweep/ntpsweep.1ntpsweepman
index 60684d8..66deeba 100644
--- a/contrib/ntp/scripts/ntpsweep/ntpsweep.1ntpsweepman
+++ b/contrib/ntp/scripts/ntpsweep/ntpsweep.1ntpsweepman
@@ -10,11 +10,11 @@
.ds B-Font B
.ds I-Font I
.ds R-Font R
-.TH ntpsweep 1ntpsweepman "29 Jun 2015" "ntp (4.2.8p3)" "User Commands"
+.TH ntpsweep 1ntpsweepman "21 Oct 2015" "ntp (4.2.8p4)" "User Commands"
.\"
-.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-JEaGhv/ag-VEaOgv)
+.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-kqaGdC/ag-xqaOcC)
.\"
-.\" It has been AutoGen-ed June 29, 2015 at 04:26:42 PM by AutoGen 5.18.5
+.\" It has been AutoGen-ed October 21, 2015 at 12:34:20 PM by AutoGen 5.18.5
.\" From the definitions ntpsweep-opts.def
.\" and the template file agman-cmd.tpl
.SH NAME
diff --git a/contrib/ntp/scripts/ntpsweep/ntpsweep.1ntpsweepmdoc b/contrib/ntp/scripts/ntpsweep/ntpsweep.1ntpsweepmdoc
index d3016a9..a0f7e87 100644
--- a/contrib/ntp/scripts/ntpsweep/ntpsweep.1ntpsweepmdoc
+++ b/contrib/ntp/scripts/ntpsweep/ntpsweep.1ntpsweepmdoc
@@ -1,9 +1,9 @@
-.Dd June 29 2015
+.Dd October 21 2015
.Dt NTPSWEEP 1ntpsweepmdoc User Commands
.Os
.\" EDIT THIS FILE WITH CAUTION (ntpsweep-opts.mdoc)
.\"
-.\" It has been AutoGen-ed June 29, 2015 at 04:26:45 PM by AutoGen 5.18.5
+.\" It has been AutoGen-ed October 21, 2015 at 12:34:23 PM by AutoGen 5.18.5
.\" From the definitions ntpsweep-opts.def
.\" and the template file agmdoc-cmd.tpl
.Sh NAME
diff --git a/contrib/ntp/scripts/ntpsweep/ntpsweep.html b/contrib/ntp/scripts/ntpsweep/ntpsweep.html
index c47d36f..fed2e2a 100644
--- a/contrib/ntp/scripts/ntpsweep/ntpsweep.html
+++ b/contrib/ntp/scripts/ntpsweep/ntpsweep.html
@@ -30,7 +30,7 @@ Up:&nbsp;<a rel="up" accesskey="u" href="#dir">(dir)</a>
<p>This document describes the use of the NTP Project's <code>ntpsweep</code> program.
- <p>This document applies to version 4.2.8p3 of <code>ntpsweep</code>.
+ <p>This document applies to version 4.2.8p4 of <code>ntpsweep</code>.
<div class="shortcontents">
<h2>Short Contents</h2>
@@ -90,7 +90,7 @@ the usage text by passing it through a pager program.
used to select the program, defaulting to <span class="file">more</span>. Both will exit
with a status code of 0.
-<pre class="example">ntpsweep - Print various informations about given ntp servers - Ver. 4.2.8p3
+<pre class="example">ntpsweep - Print various informations about given ntp servers - Ver. 4.2.8p4
USAGE: ntpsweep [ -&lt;flag&gt; [&lt;val&gt;] | --&lt;name&gt;[{=| }&lt;val&gt;] ]... [hostfile]
-l, --host-list=str Host to execute actions on
diff --git a/contrib/ntp/scripts/ntpsweep/ntpsweep.in b/contrib/ntp/scripts/ntpsweep/ntpsweep.in
index fed35d1..75ac0c8 100644
--- a/contrib/ntp/scripts/ntpsweep/ntpsweep.in
+++ b/contrib/ntp/scripts/ntpsweep/ntpsweep.in
@@ -138,7 +138,8 @@ sub scan_host {
# got answers ? If so, go on.
if ($daemonversion) {
if ($showpeers) {
- my @peers_tmp = ntp_peers($host);
+ my $peers_ref = ntp_peers($host);
+ my @peers_tmp = @$peers_ref;
for (@peers_tmp) {
$_->{remote} =~ s/^(?: |x|\.|-|\+|#|\*|o)([^ ]+)/$1/;
push @peers, $_->{remote};
diff --git a/contrib/ntp/scripts/ntpsweep/ntpsweep.man.in b/contrib/ntp/scripts/ntpsweep/ntpsweep.man.in
index 60684d8..66deeba 100644
--- a/contrib/ntp/scripts/ntpsweep/ntpsweep.man.in
+++ b/contrib/ntp/scripts/ntpsweep/ntpsweep.man.in
@@ -10,11 +10,11 @@
.ds B-Font B
.ds I-Font I
.ds R-Font R
-.TH ntpsweep 1ntpsweepman "29 Jun 2015" "ntp (4.2.8p3)" "User Commands"
+.TH ntpsweep 1ntpsweepman "21 Oct 2015" "ntp (4.2.8p4)" "User Commands"
.\"
-.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-JEaGhv/ag-VEaOgv)
+.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-kqaGdC/ag-xqaOcC)
.\"
-.\" It has been AutoGen-ed June 29, 2015 at 04:26:42 PM by AutoGen 5.18.5
+.\" It has been AutoGen-ed October 21, 2015 at 12:34:20 PM by AutoGen 5.18.5
.\" From the definitions ntpsweep-opts.def
.\" and the template file agman-cmd.tpl
.SH NAME
diff --git a/contrib/ntp/scripts/ntpsweep/ntpsweep.mdoc.in b/contrib/ntp/scripts/ntpsweep/ntpsweep.mdoc.in
index d3016a9..a0f7e87 100644
--- a/contrib/ntp/scripts/ntpsweep/ntpsweep.mdoc.in
+++ b/contrib/ntp/scripts/ntpsweep/ntpsweep.mdoc.in
@@ -1,9 +1,9 @@
-.Dd June 29 2015
+.Dd October 21 2015
.Dt NTPSWEEP 1ntpsweepmdoc User Commands
.Os
.\" EDIT THIS FILE WITH CAUTION (ntpsweep-opts.mdoc)
.\"
-.\" It has been AutoGen-ed June 29, 2015 at 04:26:45 PM by AutoGen 5.18.5
+.\" It has been AutoGen-ed October 21, 2015 at 12:34:23 PM by AutoGen 5.18.5
.\" From the definitions ntpsweep-opts.def
.\" and the template file agmdoc-cmd.tpl
.Sh NAME
diff --git a/contrib/ntp/scripts/ntptrace/Makefile.in b/contrib/ntp/scripts/ntptrace/Makefile.in
index b31083d..f8d36ce 100644
--- a/contrib/ntp/scripts/ntptrace/Makefile.in
+++ b/contrib/ntp/scripts/ntptrace/Makefile.in
@@ -117,6 +117,7 @@ am__aclocal_m4_deps = $(top_srcdir)/sntp/libopts/m4/libopts.m4 \
$(top_srcdir)/sntp/m4/ntp_locinfo.m4 \
$(top_srcdir)/sntp/m4/ntp_openssl.m4 \
$(top_srcdir)/sntp/m4/ntp_pkg_config.m4 \
+ $(top_srcdir)/sntp/m4/ntp_problemtests.m4 \
$(top_srcdir)/sntp/m4/ntp_prog_cc.m4 \
$(top_srcdir)/sntp/m4/ntp_rlimit.m4 \
$(top_srcdir)/sntp/m4/ntp_sntp.m4 \
@@ -202,6 +203,7 @@ AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
+BUILD_THREAD = @BUILD_THREAD@
CALC_TICKADJ_DB = @CALC_TICKADJ_DB@
CALC_TICKADJ_DL = @CALC_TICKADJ_DL@
CALC_TICKADJ_DS = @CALC_TICKADJ_DS@
@@ -210,6 +212,7 @@ CALC_TICKADJ_NI = @CALC_TICKADJ_NI@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
+CFLAGS_LIBEVENT = @CFLAGS_LIBEVENT@
CFLAGS_NTP = @CFLAGS_NTP@
CHUTEST = @CHUTEST@
CONFIG_SHELL = @CONFIG_SHELL@
@@ -271,6 +274,7 @@ LIBTOOL_DEPS = @LIBTOOL_DEPS@
LIPO = @LIPO@
LN_S = @LN_S@
LSCF = @LSCF@
+LTHREAD_LIBS = @LTHREAD_LIBS@
LTLIBOBJS = @LTLIBOBJS@
MAKEINFO = @MAKEINFO@
MAKE_ADJTIMED = @MAKE_ADJTIMED@
diff --git a/contrib/ntp/scripts/ntptrace/invoke-ntptrace.texi b/contrib/ntp/scripts/ntptrace/invoke-ntptrace.texi
index d55d602..4360728 100644
--- a/contrib/ntp/scripts/ntptrace/invoke-ntptrace.texi
+++ b/contrib/ntp/scripts/ntptrace/invoke-ntptrace.texi
@@ -6,7 +6,7 @@
#
# EDIT THIS FILE WITH CAUTION (invoke-ntptrace.texi)
#
-# It has been AutoGen-ed June 29, 2015 at 04:26:52 PM by AutoGen 5.18.5
+# It has been AutoGen-ed October 21, 2015 at 12:34:30 PM by AutoGen 5.18.5
# From the definitions ntptrace-opts.def
# and the template file agtexi-cmd.tpl
@end ignore
@@ -62,7 +62,7 @@ with a status code of 0.
@exampleindent 0
@example
-ntptrace - Trace peers of an NTP server - Ver. 4.2.8p3
+ntptrace - Trace peers of an NTP server - Ver. 4.2.8p4
USAGE: ntptrace [ -<flag> [<val>] | --<name>[@{=| @}<val>] ]... [host]
-n, --numeric Print IP addresses instead of hostnames
diff --git a/contrib/ntp/scripts/ntptrace/ntptrace-opts b/contrib/ntp/scripts/ntptrace/ntptrace-opts
index 679f109..d6dbc53 100644
--- a/contrib/ntp/scripts/ntptrace/ntptrace-opts
+++ b/contrib/ntp/scripts/ntptrace/ntptrace-opts
@@ -1,6 +1,6 @@
# EDIT THIS FILE WITH CAUTION (ntptrace-opts)
#
-# It has been AutoGen-ed June 29, 2015 at 04:26:46 PM by AutoGen 5.18.5
+# It has been AutoGen-ed October 21, 2015 at 12:34:25 PM by AutoGen 5.18.5
# From the definitions ntptrace-opts.def
# and the template file perlopt
@@ -40,7 +40,7 @@ sub processOptions {
'help|?', 'more-help'));
$usage = <<'USAGE';
-ntptrace - Trace peers of an NTP server - Ver. 4.2.8p3
+ntptrace - Trace peers of an NTP server - Ver. 4.2.8p4
USAGE: ntptrace [ -<flag> [<val>] | --<name>[{=| }<val>] ]... [host]
-n, --numeric Print IP addresses instead of hostnames
diff --git a/contrib/ntp/scripts/ntptrace/ntptrace.1ntptraceman b/contrib/ntp/scripts/ntptrace/ntptrace.1ntptraceman
index daf73a9..c2362b7 100644
--- a/contrib/ntp/scripts/ntptrace/ntptrace.1ntptraceman
+++ b/contrib/ntp/scripts/ntptrace/ntptrace.1ntptraceman
@@ -10,11 +10,11 @@
.ds B-Font B
.ds I-Font I
.ds R-Font R
-.TH ntptrace 1ntptraceman "29 Jun 2015" "ntp (4.2.8p3)" "User Commands"
+.TH ntptrace 1ntptraceman "21 Oct 2015" "ntp (4.2.8p4)" "User Commands"
.\"
-.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-RjaOzw/ag-3jaWyw)
+.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-h.aOvD/ag-u.aWuD)
.\"
-.\" It has been AutoGen-ed June 29, 2015 at 04:26:48 PM by AutoGen 5.18.5
+.\" It has been AutoGen-ed October 21, 2015 at 12:34:27 PM by AutoGen 5.18.5
.\" From the definitions ntptrace-opts.def
.\" and the template file agman-cmd.tpl
.SH NAME
diff --git a/contrib/ntp/scripts/ntptrace/ntptrace.1ntptracemdoc b/contrib/ntp/scripts/ntptrace/ntptrace.1ntptracemdoc
index ae25afa..1734bcc 100644
--- a/contrib/ntp/scripts/ntptrace/ntptrace.1ntptracemdoc
+++ b/contrib/ntp/scripts/ntptrace/ntptrace.1ntptracemdoc
@@ -1,9 +1,9 @@
-.Dd June 29 2015
+.Dd October 21 2015
.Dt NTPTRACE 1ntptracemdoc User Commands
.Os
.\" EDIT THIS FILE WITH CAUTION (ntptrace-opts.mdoc)
.\"
-.\" It has been AutoGen-ed June 29, 2015 at 04:26:54 PM by AutoGen 5.18.5
+.\" It has been AutoGen-ed October 21, 2015 at 12:34:32 PM by AutoGen 5.18.5
.\" From the definitions ntptrace-opts.def
.\" and the template file agmdoc-cmd.tpl
.Sh NAME
diff --git a/contrib/ntp/scripts/ntptrace/ntptrace.html b/contrib/ntp/scripts/ntptrace/ntptrace.html
index 0012517..4a4b746 100644
--- a/contrib/ntp/scripts/ntptrace/ntptrace.html
+++ b/contrib/ntp/scripts/ntptrace/ntptrace.html
@@ -31,7 +31,7 @@ Up:&nbsp;<a rel="up" accesskey="u" href="#dir">(dir)</a>
<h2 class="unnumbered">Simple Network Time Protocol User Manual</h2>
<p>This document describes the use of the NTP Project's <code>ntptrace</code> program.
-This document applies to version 4.2.8p3 of <code>ntptrace</code>.
+This document applies to version 4.2.8p4 of <code>ntptrace</code>.
<div class="shortcontents">
<h2>Short Contents</h2>
@@ -107,7 +107,7 @@ the usage text by passing it through a pager program.
used to select the program, defaulting to <span class="file">more</span>. Both will exit
with a status code of 0.
-<pre class="example">ntptrace - Trace peers of an NTP server - Ver. 4.2.8p3
+<pre class="example">ntptrace - Trace peers of an NTP server - Ver. 4.2.8p4
USAGE: ntptrace [ -&lt;flag&gt; [&lt;val&gt;] | --&lt;name&gt;[{=| }&lt;val&gt;] ]... [host]
-n, --numeric Print IP addresses instead of hostnames
diff --git a/contrib/ntp/scripts/ntptrace/ntptrace.man.in b/contrib/ntp/scripts/ntptrace/ntptrace.man.in
index 56db22a..5aca455 100644
--- a/contrib/ntp/scripts/ntptrace/ntptrace.man.in
+++ b/contrib/ntp/scripts/ntptrace/ntptrace.man.in
@@ -10,11 +10,11 @@
.ds B-Font B
.ds I-Font I
.ds R-Font R
-.TH ntptrace @NTPTRACE_MS@ "29 Jun 2015" "ntp (4.2.8p3)" "User Commands"
+.TH ntptrace @NTPTRACE_MS@ "21 Oct 2015" "ntp (4.2.8p4)" "User Commands"
.\"
-.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-RjaOzw/ag-3jaWyw)
+.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-h.aOvD/ag-u.aWuD)
.\"
-.\" It has been AutoGen-ed June 29, 2015 at 04:26:48 PM by AutoGen 5.18.5
+.\" It has been AutoGen-ed October 21, 2015 at 12:34:27 PM by AutoGen 5.18.5
.\" From the definitions ntptrace-opts.def
.\" and the template file agman-cmd.tpl
.SH NAME
diff --git a/contrib/ntp/scripts/ntptrace/ntptrace.mdoc.in b/contrib/ntp/scripts/ntptrace/ntptrace.mdoc.in
index 6e5a75a..34be2a5 100644
--- a/contrib/ntp/scripts/ntptrace/ntptrace.mdoc.in
+++ b/contrib/ntp/scripts/ntptrace/ntptrace.mdoc.in
@@ -1,9 +1,9 @@
-.Dd June 29 2015
+.Dd October 21 2015
.Dt NTPTRACE @NTPTRACE_MS@ User Commands
.Os
.\" EDIT THIS FILE WITH CAUTION (ntptrace-opts.mdoc)
.\"
-.\" It has been AutoGen-ed June 29, 2015 at 04:26:54 PM by AutoGen 5.18.5
+.\" It has been AutoGen-ed October 21, 2015 at 12:34:32 PM by AutoGen 5.18.5
.\" From the definitions ntptrace-opts.def
.\" and the template file agmdoc-cmd.tpl
.Sh NAME
diff --git a/contrib/ntp/scripts/plot_summary-opts b/contrib/ntp/scripts/plot_summary-opts
index 05149f8..2cb86c4 100644
--- a/contrib/ntp/scripts/plot_summary-opts
+++ b/contrib/ntp/scripts/plot_summary-opts
@@ -1,6 +1,6 @@
# EDIT THIS FILE WITH CAUTION (plot_summary-opts)
#
-# It has been AutoGen-ed June 29, 2015 at 04:27:05 PM by AutoGen 5.18.5
+# It has been AutoGen-ed October 21, 2015 at 12:34:45 PM by AutoGen 5.18.5
# From the definitions plot_summary-opts.def
# and the template file perlopt
@@ -46,7 +46,7 @@ sub processOptions {
'help|?', 'more-help'));
$usage = <<'USAGE';
-plot_summary - plot statistics generated by summary script - Ver. 4.2.8p3
+plot_summary - plot statistics generated by summary script - Ver. 4.2.8p4
USAGE: plot_summary [ -<flag> [<val>] | --<name>[{=| }<val>] ]...
--directory=str Where the summary files are
diff --git a/contrib/ntp/scripts/plot_summary.1plot_summaryman b/contrib/ntp/scripts/plot_summary.1plot_summaryman
index 8abc2f2..fea03df 100644
--- a/contrib/ntp/scripts/plot_summary.1plot_summaryman
+++ b/contrib/ntp/scripts/plot_summary.1plot_summaryman
@@ -10,11 +10,11 @@
.ds B-Font B
.ds I-Font I
.ds R-Font R
-.TH plot_summary 1plot_summaryman "29 Jun 2015" "ntp (4.2.8p3)" "User Commands"
+.TH plot_summary 1plot_summaryman "21 Oct 2015" "ntp (4.2.8p4)" "User Commands"
.\"
-.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-8Laipz/ag-iMaqoz)
+.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-EXaylG/ag-RXaGkG)
.\"
-.\" It has been AutoGen-ed June 29, 2015 at 04:27:11 PM by AutoGen 5.18.5
+.\" It has been AutoGen-ed October 21, 2015 at 12:34:51 PM by AutoGen 5.18.5
.\" From the definitions plot_summary-opts.def
.\" and the template file agman-cmd.tpl
.SH NAME
diff --git a/contrib/ntp/scripts/plot_summary.1plot_summarymdoc b/contrib/ntp/scripts/plot_summary.1plot_summarymdoc
index 3971b74..0eff78f 100644
--- a/contrib/ntp/scripts/plot_summary.1plot_summarymdoc
+++ b/contrib/ntp/scripts/plot_summary.1plot_summarymdoc
@@ -1,9 +1,9 @@
-.Dd June 29 2015
+.Dd October 21 2015
.Dt PLOT_SUMMARY 1plot_summarymdoc User Commands
.Os
.\" EDIT THIS FILE WITH CAUTION (plot_summary-opts.mdoc)
.\"
-.\" It has been AutoGen-ed June 29, 2015 at 04:27:13 PM by AutoGen 5.18.5
+.\" It has been AutoGen-ed October 21, 2015 at 12:34:53 PM by AutoGen 5.18.5
.\" From the definitions plot_summary-opts.def
.\" and the template file agmdoc-cmd.tpl
.Sh NAME
diff --git a/contrib/ntp/scripts/plot_summary.html b/contrib/ntp/scripts/plot_summary.html
index 360bdc7..7f0a594 100644
--- a/contrib/ntp/scripts/plot_summary.html
+++ b/contrib/ntp/scripts/plot_summary.html
@@ -31,7 +31,7 @@ Up:&nbsp;<a rel="up" accesskey="u" href="#dir">(dir)</a>
<h2 class="unnumbered">Plot_summary User Manual</h2>
<p>This document describes the use of the NTP Project's <code>plot_summary</code> program.
-This document applies to version 4.2.8p3 of <code>plot_summary</code>.
+This document applies to version 4.2.8p4 of <code>plot_summary</code>.
<div class="shortcontents">
<h2>Short Contents</h2>
@@ -89,7 +89,7 @@ the usage text by passing it through a pager program.
used to select the program, defaulting to <span class="file">more</span>. Both will exit
with a status code of 0.
-<pre class="example">plot_summary - plot statistics generated by summary script - Ver. 4.2.8p3
+<pre class="example">plot_summary - plot statistics generated by summary script - Ver. 4.2.8p4
USAGE: plot_summary [ -&lt;flag&gt; [&lt;val&gt;] | --&lt;name&gt;[{=| }&lt;val&gt;] ]...
--directory=str Where the summary files are
diff --git a/contrib/ntp/scripts/plot_summary.man.in b/contrib/ntp/scripts/plot_summary.man.in
index 8abc2f2..fea03df 100644
--- a/contrib/ntp/scripts/plot_summary.man.in
+++ b/contrib/ntp/scripts/plot_summary.man.in
@@ -10,11 +10,11 @@
.ds B-Font B
.ds I-Font I
.ds R-Font R
-.TH plot_summary 1plot_summaryman "29 Jun 2015" "ntp (4.2.8p3)" "User Commands"
+.TH plot_summary 1plot_summaryman "21 Oct 2015" "ntp (4.2.8p4)" "User Commands"
.\"
-.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-8Laipz/ag-iMaqoz)
+.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-EXaylG/ag-RXaGkG)
.\"
-.\" It has been AutoGen-ed June 29, 2015 at 04:27:11 PM by AutoGen 5.18.5
+.\" It has been AutoGen-ed October 21, 2015 at 12:34:51 PM by AutoGen 5.18.5
.\" From the definitions plot_summary-opts.def
.\" and the template file agman-cmd.tpl
.SH NAME
diff --git a/contrib/ntp/scripts/plot_summary.mdoc.in b/contrib/ntp/scripts/plot_summary.mdoc.in
index 3971b74..0eff78f 100644
--- a/contrib/ntp/scripts/plot_summary.mdoc.in
+++ b/contrib/ntp/scripts/plot_summary.mdoc.in
@@ -1,9 +1,9 @@
-.Dd June 29 2015
+.Dd October 21 2015
.Dt PLOT_SUMMARY 1plot_summarymdoc User Commands
.Os
.\" EDIT THIS FILE WITH CAUTION (plot_summary-opts.mdoc)
.\"
-.\" It has been AutoGen-ed June 29, 2015 at 04:27:13 PM by AutoGen 5.18.5
+.\" It has been AutoGen-ed October 21, 2015 at 12:34:53 PM by AutoGen 5.18.5
.\" From the definitions plot_summary-opts.def
.\" and the template file agmdoc-cmd.tpl
.Sh NAME
diff --git a/contrib/ntp/scripts/summary-opts b/contrib/ntp/scripts/summary-opts
index 166c01e..22f2c49 100644
--- a/contrib/ntp/scripts/summary-opts
+++ b/contrib/ntp/scripts/summary-opts
@@ -1,6 +1,6 @@
# EDIT THIS FILE WITH CAUTION (summary-opts)
#
-# It has been AutoGen-ed June 29, 2015 at 04:27:07 PM by AutoGen 5.18.5
+# It has been AutoGen-ed October 21, 2015 at 12:34:47 PM by AutoGen 5.18.5
# From the definitions summary-opts.def
# and the template file perlopt
@@ -44,7 +44,7 @@ sub processOptions {
'help|?', 'more-help'));
$usage = <<'USAGE';
-summary - compute various stastics from NTP stat files - Ver. 4.2.8p3
+summary - compute various stastics from NTP stat files - Ver. 4.2.8p4
USAGE: summary [ -<flag> [<val>] | --<name>[{=| }<val>] ]...
--directory=str Directory containing stat files
diff --git a/contrib/ntp/scripts/summary.1summaryman b/contrib/ntp/scripts/summary.1summaryman
index ab116d5..65b0eec 100644
--- a/contrib/ntp/scripts/summary.1summaryman
+++ b/contrib/ntp/scripts/summary.1summaryman
@@ -10,11 +10,11 @@
.ds B-Font B
.ds I-Font I
.ds R-Font R
-.TH summary 1summaryman "29 Jun 2015" "ntp (4.2.8p3)" "User Commands"
+.TH summary 1summaryman "21 Oct 2015" "ntp (4.2.8p4)" "User Commands"
.\"
-.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-B9aWCz/ag-N9a4Bz)
+.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-ghaazG/ag-shaiyG)
.\"
-.\" It has been AutoGen-ed June 29, 2015 at 04:27:16 PM by AutoGen 5.18.5
+.\" It has been AutoGen-ed October 21, 2015 at 12:34:56 PM by AutoGen 5.18.5
.\" From the definitions summary-opts.def
.\" and the template file agman-cmd.tpl
.SH NAME
diff --git a/contrib/ntp/scripts/summary.1summarymdoc b/contrib/ntp/scripts/summary.1summarymdoc
index 4539660..8bb1dfb 100644
--- a/contrib/ntp/scripts/summary.1summarymdoc
+++ b/contrib/ntp/scripts/summary.1summarymdoc
@@ -1,9 +1,9 @@
-.Dd June 29 2015
+.Dd October 21 2015
.Dt SUMMARY 1summarymdoc User Commands
.Os
.\" EDIT THIS FILE WITH CAUTION (summary-opts.mdoc)
.\"
-.\" It has been AutoGen-ed June 29, 2015 at 04:27:18 PM by AutoGen 5.18.5
+.\" It has been AutoGen-ed October 21, 2015 at 12:34:58 PM by AutoGen 5.18.5
.\" From the definitions summary-opts.def
.\" and the template file agmdoc-cmd.tpl
.Sh NAME
diff --git a/contrib/ntp/scripts/summary.html b/contrib/ntp/scripts/summary.html
index 68d1e23..1329905 100644
--- a/contrib/ntp/scripts/summary.html
+++ b/contrib/ntp/scripts/summary.html
@@ -31,7 +31,7 @@ Up:&nbsp;<a rel="up" accesskey="u" href="#dir">(dir)</a>
<h2 class="unnumbered">Summary User Manual</h2>
<p>This document describes the use of the NTP Project's <code>summary</code> program.
-This document applies to version 4.2.8p3 of <code>summary</code>.
+This document applies to version 4.2.8p4 of <code>summary</code>.
<div class="shortcontents">
<h2>Short Contents</h2>
@@ -88,7 +88,7 @@ the usage text by passing it through a pager program.
used to select the program, defaulting to <span class="file">more</span>. Both will exit
with a status code of 0.
-<pre class="example">summary - compute various stastics from NTP stat files - Ver. 4.2.8p3
+<pre class="example">summary - compute various stastics from NTP stat files - Ver. 4.2.8p4
USAGE: summary [ -&lt;flag&gt; [&lt;val&gt;] | --&lt;name&gt;[{=| }&lt;val&gt;] ]...
--directory=str Directory containing stat files
diff --git a/contrib/ntp/scripts/summary.man.in b/contrib/ntp/scripts/summary.man.in
index ab116d5..65b0eec 100644
--- a/contrib/ntp/scripts/summary.man.in
+++ b/contrib/ntp/scripts/summary.man.in
@@ -10,11 +10,11 @@
.ds B-Font B
.ds I-Font I
.ds R-Font R
-.TH summary 1summaryman "29 Jun 2015" "ntp (4.2.8p3)" "User Commands"
+.TH summary 1summaryman "21 Oct 2015" "ntp (4.2.8p4)" "User Commands"
.\"
-.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-B9aWCz/ag-N9a4Bz)
+.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-ghaazG/ag-shaiyG)
.\"
-.\" It has been AutoGen-ed June 29, 2015 at 04:27:16 PM by AutoGen 5.18.5
+.\" It has been AutoGen-ed October 21, 2015 at 12:34:56 PM by AutoGen 5.18.5
.\" From the definitions summary-opts.def
.\" and the template file agman-cmd.tpl
.SH NAME
diff --git a/contrib/ntp/scripts/summary.mdoc.in b/contrib/ntp/scripts/summary.mdoc.in
index 4539660..8bb1dfb 100644
--- a/contrib/ntp/scripts/summary.mdoc.in
+++ b/contrib/ntp/scripts/summary.mdoc.in
@@ -1,9 +1,9 @@
-.Dd June 29 2015
+.Dd October 21 2015
.Dt SUMMARY 1summarymdoc User Commands
.Os
.\" EDIT THIS FILE WITH CAUTION (summary-opts.mdoc)
.\"
-.\" It has been AutoGen-ed June 29, 2015 at 04:27:18 PM by AutoGen 5.18.5
+.\" It has been AutoGen-ed October 21, 2015 at 12:34:58 PM by AutoGen 5.18.5
.\" From the definitions summary-opts.def
.\" and the template file agmdoc-cmd.tpl
.Sh NAME
diff --git a/contrib/ntp/scripts/update-leap/Makefile.in b/contrib/ntp/scripts/update-leap/Makefile.in
index e23edff..dc4f568 100644
--- a/contrib/ntp/scripts/update-leap/Makefile.in
+++ b/contrib/ntp/scripts/update-leap/Makefile.in
@@ -117,6 +117,7 @@ am__aclocal_m4_deps = $(top_srcdir)/sntp/libopts/m4/libopts.m4 \
$(top_srcdir)/sntp/m4/ntp_locinfo.m4 \
$(top_srcdir)/sntp/m4/ntp_openssl.m4 \
$(top_srcdir)/sntp/m4/ntp_pkg_config.m4 \
+ $(top_srcdir)/sntp/m4/ntp_problemtests.m4 \
$(top_srcdir)/sntp/m4/ntp_prog_cc.m4 \
$(top_srcdir)/sntp/m4/ntp_rlimit.m4 \
$(top_srcdir)/sntp/m4/ntp_sntp.m4 \
@@ -203,6 +204,7 @@ AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
+BUILD_THREAD = @BUILD_THREAD@
CALC_TICKADJ_DB = @CALC_TICKADJ_DB@
CALC_TICKADJ_DL = @CALC_TICKADJ_DL@
CALC_TICKADJ_DS = @CALC_TICKADJ_DS@
@@ -211,6 +213,7 @@ CALC_TICKADJ_NI = @CALC_TICKADJ_NI@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
+CFLAGS_LIBEVENT = @CFLAGS_LIBEVENT@
CFLAGS_NTP = @CFLAGS_NTP@
CHUTEST = @CHUTEST@
CONFIG_SHELL = @CONFIG_SHELL@
@@ -272,6 +275,7 @@ LIBTOOL_DEPS = @LIBTOOL_DEPS@
LIPO = @LIPO@
LN_S = @LN_S@
LSCF = @LSCF@
+LTHREAD_LIBS = @LTHREAD_LIBS@
LTLIBOBJS = @LTLIBOBJS@
MAKEINFO = @MAKEINFO@
MAKE_ADJTIMED = @MAKE_ADJTIMED@
diff --git a/contrib/ntp/scripts/update-leap/invoke-update-leap.texi b/contrib/ntp/scripts/update-leap/invoke-update-leap.texi
index 99babde..da6df52 100644
--- a/contrib/ntp/scripts/update-leap/invoke-update-leap.texi
+++ b/contrib/ntp/scripts/update-leap/invoke-update-leap.texi
@@ -6,7 +6,7 @@
#
# EDIT THIS FILE WITH CAUTION (invoke-update-leap.texi)
#
-# It has been AutoGen-ed June 29, 2015 at 04:26:59 PM by AutoGen 5.18.5
+# It has been AutoGen-ed October 21, 2015 at 12:34:38 PM by AutoGen 5.18.5
# From the definitions update-leap-opts.def
# and the template file agtexi-cmd.tpl
@end ignore
diff --git a/contrib/ntp/scripts/update-leap/update-leap-opts b/contrib/ntp/scripts/update-leap/update-leap-opts
index cd5fdea..debf333 100644
--- a/contrib/ntp/scripts/update-leap/update-leap-opts
+++ b/contrib/ntp/scripts/update-leap/update-leap-opts
@@ -1,6 +1,6 @@
# EDIT THIS FILE WITH CAUTION (update-leap-opts)
#
-# It has been AutoGen-ed June 29, 2015 at 04:27:05 PM by AutoGen 5.18.5
+# It has been AutoGen-ed October 21, 2015 at 12:34:44 PM by AutoGen 5.18.5
# From the definitions update-leap-opts.def
# and the template file perlopt
@@ -46,7 +46,7 @@ sub processOptions {
'help|?', 'more-help'));
$usage = <<'USAGE';
-update-leap - leap-seconds file manager/updater - Ver. 4.2.8p3
+update-leap - leap-seconds file manager/updater - Ver. 4.2.8p4
USAGE: update-leap [ -<flag> [<val>] | --<name>[{=| }<val>] ]...
-s, --source-url=str The URL of the master copy of the leapseconds file
diff --git a/contrib/ntp/scripts/update-leap/update-leap.1update-leapman b/contrib/ntp/scripts/update-leap/update-leap.1update-leapman
index 620b8ad..dbe113c 100644
--- a/contrib/ntp/scripts/update-leap/update-leap.1update-leapman
+++ b/contrib/ntp/scripts/update-leap/update-leap.1update-leapman
@@ -10,11 +10,11 @@
.ds B-Font B
.ds I-Font I
.ds R-Font R
-.TH update-leap 1update-leapman "29 Jun 2015" "ntp (4.2.8p3)" "User Commands"
+.TH update-leap 1update-leapman "21 Oct 2015" "ntp (4.2.8p4)" "User Commands"
.\"
-.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-h5aqpx/ag-t5ayox)
+.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-tXaylE/ag-FXaGkE)
.\"
-.\" It has been AutoGen-ed June 29, 2015 at 04:26:56 PM by AutoGen 5.18.5
+.\" It has been AutoGen-ed October 21, 2015 at 12:34:34 PM by AutoGen 5.18.5
.\" From the definitions update-leap-opts.def
.\" and the template file agman-cmd.tpl
.SH NAME
diff --git a/contrib/ntp/scripts/update-leap/update-leap.1update-leapmdoc b/contrib/ntp/scripts/update-leap/update-leap.1update-leapmdoc
index 4b07ff0..cfbe34a 100644
--- a/contrib/ntp/scripts/update-leap/update-leap.1update-leapmdoc
+++ b/contrib/ntp/scripts/update-leap/update-leap.1update-leapmdoc
@@ -1,9 +1,9 @@
-.Dd June 29 2015
+.Dd October 21 2015
.Dt UPDATE_LEAP 1update-leapmdoc User Commands
.Os
.\" EDIT THIS FILE WITH CAUTION (update-leap-opts.mdoc)
.\"
-.\" It has been AutoGen-ed June 29, 2015 at 04:27:03 PM by AutoGen 5.18.5
+.\" It has been AutoGen-ed October 21, 2015 at 12:34:42 PM by AutoGen 5.18.5
.\" From the definitions update-leap-opts.def
.\" and the template file agmdoc-cmd.tpl
.Sh NAME
diff --git a/contrib/ntp/scripts/update-leap/update-leap.html b/contrib/ntp/scripts/update-leap/update-leap.html
index 21bb294..bea57b8 100644
--- a/contrib/ntp/scripts/update-leap/update-leap.html
+++ b/contrib/ntp/scripts/update-leap/update-leap.html
@@ -30,7 +30,7 @@ Up:&nbsp;<a rel="up" accesskey="u" href="#dir">(dir)</a>
<p>This document describes the use of the NTP Project's <code>update-leap</code> program.
- <p>This document applies to version 4.2.8p3 of <code>update-leap</code>.
+ <p>This document applies to version 4.2.8p4 of <code>update-leap</code>.
<div class="shortcontents">
<h2>Short Contents</h2>
diff --git a/contrib/ntp/scripts/update-leap/update-leap.man.in b/contrib/ntp/scripts/update-leap/update-leap.man.in
index 620b8ad..dbe113c 100644
--- a/contrib/ntp/scripts/update-leap/update-leap.man.in
+++ b/contrib/ntp/scripts/update-leap/update-leap.man.in
@@ -10,11 +10,11 @@
.ds B-Font B
.ds I-Font I
.ds R-Font R
-.TH update-leap 1update-leapman "29 Jun 2015" "ntp (4.2.8p3)" "User Commands"
+.TH update-leap 1update-leapman "21 Oct 2015" "ntp (4.2.8p4)" "User Commands"
.\"
-.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-h5aqpx/ag-t5ayox)
+.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-tXaylE/ag-FXaGkE)
.\"
-.\" It has been AutoGen-ed June 29, 2015 at 04:26:56 PM by AutoGen 5.18.5
+.\" It has been AutoGen-ed October 21, 2015 at 12:34:34 PM by AutoGen 5.18.5
.\" From the definitions update-leap-opts.def
.\" and the template file agman-cmd.tpl
.SH NAME
diff --git a/contrib/ntp/scripts/update-leap/update-leap.mdoc.in b/contrib/ntp/scripts/update-leap/update-leap.mdoc.in
index 4b07ff0..cfbe34a 100644
--- a/contrib/ntp/scripts/update-leap/update-leap.mdoc.in
+++ b/contrib/ntp/scripts/update-leap/update-leap.mdoc.in
@@ -1,9 +1,9 @@
-.Dd June 29 2015
+.Dd October 21 2015
.Dt UPDATE_LEAP 1update-leapmdoc User Commands
.Os
.\" EDIT THIS FILE WITH CAUTION (update-leap-opts.mdoc)
.\"
-.\" It has been AutoGen-ed June 29, 2015 at 04:27:03 PM by AutoGen 5.18.5
+.\" It has been AutoGen-ed October 21, 2015 at 12:34:42 PM by AutoGen 5.18.5
.\" From the definitions update-leap-opts.def
.\" and the template file agmdoc-cmd.tpl
.Sh NAME
diff --git a/contrib/ntp/sntp/Makefile.am b/contrib/ntp/sntp/Makefile.am
index dfd303a..5c30fc2 100644
--- a/contrib/ntp/sntp/Makefile.am
+++ b/contrib/ntp/sntp/Makefile.am
@@ -38,27 +38,13 @@ bin_PROGRAMS = @SNTP_DB@
libexec_PROGRAMS = @SNTP_DL@
sbin_PROGRAMS = @SNTP_DS@
-##
-## DIST_SUBDIRS is typically automatically derived by automake including
-## all possible SUBDIRS values, as even items which are not built are
-## typically distributed.
-##
-## To allow us to avoid configuring the libevent tearoff entirely when
-## it is not needed, we define DIST_SUBDIRS manually excluding libevent
-## when not building it, and in that case arrange for its distribution
-## with EXTRA_DIST copying the entire directory and libevent-dist-hook
-## cleaning unwanted VCS remnants.
-##
-## When we are building libevent, it is distributed conventionally, by
-## recursive make dist in sntp including libevent.
-##
-
SUBDIRS = include scripts unity
-DIST_SUBDIRS = include scripts unity
+DIST_FAIL =
if BUILD_LIBEVENT
SUBDIRS += libevent
-DIST_SUBDIRS += libevent
+else
+DIST_FAIL += "--enable-local-libevent"
endif
if NEED_LIBOPTS
@@ -70,8 +56,6 @@ noinst_LIBRARIES = libsntp.a
SUBDIRS += tests
endif
-DIST_SUBDIRS += libopts tests
-
libsntp_a_SOURCES = \
crypto.c \
kod_management.c \
@@ -94,7 +78,6 @@ noinst_HEADERS = \
main.h \
networking.h \
sntp-opts.h \
- tests_main.h \
utilities.h \
$(NULL)
@@ -285,11 +268,19 @@ $(srcdir)/sntp.html: $(srcdir)/invoke-sntp.menu $(srcdir)/invoke-sntp.texi $(src
libtool: $(LIBTOOL_DEPS)
./config.status --recheck
-libevent-dist-hook:
- if test -n "$(NTP_FORCE_LIBEVENT_DIST)" ; then rm -rf $(distdir)/libevent/autom4te.cache $(distdir)/libevent/config.h.in~ ; find $(distdir)/libevent -type d -name SCCS -print | xargs rm -rf ; fi
-
-dist-hook: libevent-dist-hook
- @: do-nothing action to avoid default SCCS get
+# HMS: libevent/ is a target if it's in EXTRA_DIST via NTP_FORCE_LIBEVENT_DIST.
+# Note that libevent/ is already in DIST_SUBDIRS (implicit in Makefile.am
+# but explicit in Makefile.in). This check doesn't help with distclean.
+libevent: distdir-pre-check
+
+# HMS: Stops the build for gmake or pmake
+distdir-pre-check:
+ case "$(DIST_FAIL)" in \
+ '') ;; \
+ *) $(error re-run configure adding $(DIST_FAIL) if you want to make a distribution.); \
+ echo "re-run configure adding $(DIST_FAIL) if you want to make a distribution."; \
+ exit 1 ;; \
+ esac
include $(top_srcdir)/bincheck.mf
include $(top_srcdir)/check-libntp.mf
diff --git a/contrib/ntp/sntp/Makefile.in b/contrib/ntp/sntp/Makefile.in
index c796888..39f7dc7 100644
--- a/contrib/ntp/sntp/Makefile.in
+++ b/contrib/ntp/sntp/Makefile.in
@@ -97,7 +97,7 @@ build_triplet = @build@
host_triplet = @host@
EXTRA_PROGRAMS = sntp$(EXEEXT)
@BUILD_LIBEVENT_TRUE@am__append_1 = libevent
-@BUILD_LIBEVENT_TRUE@am__append_2 = libevent
+@BUILD_LIBEVENT_FALSE@am__append_2 = "--enable-local-libevent"
@NEED_LIBOPTS_TRUE@am__append_3 = libopts
@BUILD_SNTP_TRUE@am__append_4 = tests
subdir = .
@@ -278,6 +278,7 @@ am__define_uniq_tagged_files = \
ETAGS = etags
CTAGS = ctags
CSCOPE = cscope
+DIST_SUBDIRS = include scripts unity libevent libopts tests
am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/config.h.in \
$(top_srcdir)/bincheck.mf $(top_srcdir)/check-libntp.mf \
$(top_srcdir)/check-libopts.mf $(top_srcdir)/depsver.mf \
@@ -347,6 +348,7 @@ AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
+BUILD_THREAD = @BUILD_THREAD@
CALC_TICKADJ_DB = @CALC_TICKADJ_DB@
CALC_TICKADJ_DL = @CALC_TICKADJ_DL@
CALC_TICKADJ_DS = @CALC_TICKADJ_DS@
@@ -355,6 +357,7 @@ CALC_TICKADJ_NI = @CALC_TICKADJ_NI@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
+CFLAGS_LIBEVENT = @CFLAGS_LIBEVENT@
CFLAGS_NTP = @CFLAGS_NTP@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
@@ -408,6 +411,7 @@ LIBTOOL_DEPS = @LIBTOOL_DEPS@
LIB_SYSLOG = @LIB_SYSLOG@
LIPO = @LIPO@
LN_S = @LN_S@
+LTHREAD_LIBS = @LTHREAD_LIBS@
LTLIBOBJS = @LTLIBOBJS@
MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -596,7 +600,7 @@ libexec_PROGRAMS = @SNTP_DL@
sbin_PROGRAMS = @SNTP_DS@
SUBDIRS = include scripts unity $(am__append_1) $(am__append_3) \
$(am__append_4)
-DIST_SUBDIRS = include scripts unity $(am__append_2) libopts tests
+DIST_FAIL = $(am__append_2)
@BUILD_SNTP_TRUE@noinst_LIBRARIES = libsntp.a
libsntp_a_SOURCES = \
crypto.c \
@@ -620,7 +624,6 @@ noinst_HEADERS = \
main.h \
networking.h \
sntp-opts.h \
- tests_main.h \
utilities.h \
$(NULL)
@@ -1206,9 +1209,6 @@ distdir: $(DISTFILES)
|| exit 1; \
fi; \
done
- $(MAKE) $(AM_MAKEFLAGS) \
- top_distdir="$(top_distdir)" distdir="$(distdir)" \
- dist-hook
-test -n "$(am__skip_mode_fix)" \
|| find "$(distdir)" -type d ! -perm -755 \
-exec chmod u+rwx,go+rx {} \; -o \
@@ -1471,9 +1471,9 @@ uninstall-man: uninstall-man1 uninstall-man8
am--refresh check check-am clean clean-binPROGRAMS \
clean-cscope clean-generic clean-libexecPROGRAMS clean-libtool \
clean-noinstLIBRARIES clean-sbinPROGRAMS cscope cscopelist-am \
- ctags ctags-am dist dist-all dist-bzip2 dist-gzip dist-hook \
- dist-lzip dist-shar dist-tarZ dist-xz dist-zip distcheck \
- distclean distclean-compile distclean-generic distclean-hdr \
+ ctags ctags-am dist dist-all dist-bzip2 dist-gzip dist-lzip \
+ dist-shar dist-tarZ dist-xz dist-zip distcheck distclean \
+ distclean-compile distclean-generic distclean-hdr \
distclean-libtool distclean-tags distcleancheck distdir \
distuninstallcheck dvi dvi-am html html-am info info-am \
install install-am install-binPROGRAMS install-data \
@@ -1610,11 +1610,19 @@ $(srcdir)/sntp.html: $(srcdir)/invoke-sntp.menu $(srcdir)/invoke-sntp.texi $(src
libtool: $(LIBTOOL_DEPS)
./config.status --recheck
-libevent-dist-hook:
- if test -n "$(NTP_FORCE_LIBEVENT_DIST)" ; then rm -rf $(distdir)/libevent/autom4te.cache $(distdir)/libevent/config.h.in~ ; find $(distdir)/libevent -type d -name SCCS -print | xargs rm -rf ; fi
-
-dist-hook: libevent-dist-hook
- @: do-nothing action to avoid default SCCS get
+# HMS: libevent/ is a target if it's in EXTRA_DIST via NTP_FORCE_LIBEVENT_DIST.
+# Note that libevent/ is already in DIST_SUBDIRS (implicit in Makefile.am
+# but explicit in Makefile.in). This check doesn't help with distclean.
+libevent: distdir-pre-check
+
+# HMS: Stops the build for gmake or pmake
+distdir-pre-check:
+ case "$(DIST_FAIL)" in \
+ '') ;; \
+ *) $(error re-run configure adding $(DIST_FAIL) if you want to make a distribution.); \
+ echo "re-run configure adding $(DIST_FAIL) if you want to make a distribution."; \
+ exit 1 ;; \
+ esac
install-exec-hook:
@test -z "${bin_PROGRAMS}${bin_SCRIPTS}" \
diff --git a/contrib/ntp/sntp/configure b/contrib/ntp/sntp/configure
index 5798489..74d0587 100755
--- a/contrib/ntp/sntp/configure
+++ b/contrib/ntp/sntp/configure
@@ -1,6 +1,6 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for sntp 4.2.8p3.
+# Generated by GNU Autoconf 2.69 for sntp 4.2.8p4.
#
# Report bugs to <http://bugs.ntp.org./>.
#
@@ -590,8 +590,8 @@ MAKEFLAGS=
# Identity of this package.
PACKAGE_NAME='sntp'
PACKAGE_TARNAME='sntp'
-PACKAGE_VERSION='4.2.8p3'
-PACKAGE_STRING='sntp 4.2.8p3'
+PACKAGE_VERSION='4.2.8p4'
+PACKAGE_STRING='sntp 4.2.8p4'
PACKAGE_BUGREPORT='http://bugs.ntp.org./'
PACKAGE_URL='http://www.ntp.org./'
@@ -660,6 +660,7 @@ BUILD_LIBEVENT_FALSE
BUILD_LIBEVENT_TRUE
LDADD_LIBEVENT
CPPFLAGS_LIBEVENT
+CFLAGS_LIBEVENT
PKG_CONFIG
NTP_FORCE_LIBEVENT_DIST
LIBOPTS_DIR
@@ -696,6 +697,8 @@ PTHREADS_FALSE
PTHREADS_TRUE
LIBISC_PTHREADS_NOTHREADS
PTHREAD_LIBS
+LTHREAD_LIBS
+BUILD_THREAD
HAVE_INLINE
LDADD_LIBUTIL
ALLOCA
@@ -1488,7 +1491,7 @@ if test "$ac_init_help" = "long"; then
# Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF
-\`configure' configures sntp 4.2.8p3 to adapt to many kinds of systems.
+\`configure' configures sntp 4.2.8p4 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -1558,7 +1561,7 @@ fi
if test -n "$ac_init_help"; then
case $ac_init_help in
- short | recursive ) echo "Configuration of sntp 4.2.8p3:";;
+ short | recursive ) echo "Configuration of sntp 4.2.8p4:";;
esac
cat <<\_ACEOF
@@ -1703,7 +1706,7 @@ fi
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
-sntp configure 4.2.8p3
+sntp configure 4.2.8p4
generated by GNU Autoconf 2.69
Copyright (C) 2012 Free Software Foundation, Inc.
@@ -2533,7 +2536,7 @@ cat >config.log <<_ACEOF
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
-It was created by sntp $as_me 4.2.8p3, which was
+It was created by sntp $as_me 4.2.8p4, which was
generated by GNU Autoconf 2.69. Invocation command line was
$ $0 $@
@@ -2912,6 +2915,12 @@ ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var.
ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var.
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
# Bump sntp_configure_cache_version for each change to configure.ac or
# .m4 files which invalidates cached values from previous configure
@@ -3524,7 +3533,7 @@ fi
# Define the identity of the package.
PACKAGE='sntp'
- VERSION='4.2.8p3'
+ VERSION='4.2.8p4'
cat >>confdefs.h <<_ACEOF
@@ -6552,7 +6561,7 @@ esac
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking additional compiler flags" >&5
$as_echo_n "checking additional compiler flags... " >&6; }
- # allow ntp_os_flags to be preset to skip this stuff
+ # allow ntp_os_cflags to be preset to skip this stuff
case "${ntp_os_cflags+set}" in
set)
;;
@@ -6640,7 +6649,7 @@ $as_echo_n "checking additional compiler flags... " >&6; }
;;
esac
esac
- case "$ntp_os_flags" in
+ case "$ntp_os_cflags" in
'')
ntp_os_cflags_msg="none needed"
;;
@@ -6651,6 +6660,38 @@ $as_echo_n "checking additional compiler flags... " >&6; }
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ntp_os_cflags_msg" >&5
$as_echo "$ntp_os_cflags_msg" >&6; }
{ ntp_os_cflags_msg=; unset ntp_os_cflags_msg;}
+ ###
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking additional linker flags" >&5
+$as_echo_n "checking additional linker flags... " >&6; }
+ # HMS: The following might still need tweaking
+ # allow ntp_os_ldflags to be preset to skip this stuff
+ case "${ntp_os_ldflags+set}" in
+ set)
+ ;;
+ *)
+ ntp_os_ldflags=
+ case "$host_os" in
+ hpux*)
+ case "$GCC" in
+ yes)
+ ntp_os_ldflags="-Wl,+allowdups"
+ ;;
+ esac
+ ;;
+ esac
+ ;;
+ esac
+ case "$ntp_os_ldflags" in
+ '')
+ ntp_os_ldflags_msg="none needed"
+ ;;
+ *)
+ ntp_os_ldflags_msg="$ntp_os_ldflags"
+ esac
+ LDFLAGS_NTP="$LDFLAGS_NTP $ntp_os_ldflags"
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ntp_os_ldflags_msg" >&5
+$as_echo "$ntp_os_ldflags_msg" >&6; }
+ { ntp_os_ldflags_msg=; unset ntp_os_ldflags_msg;}
@@ -10527,7 +10568,8 @@ fi
have_pthreads=no
case "$enable_thread_support" in
- yes)
+ no) ;;
+ *)
ol_found_pthreads=no
@@ -13944,6 +13986,9 @@ $as_echo "$ol_cv_pthread_lib_lpthreads" >&6; }
fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: ol_link_threads: <$ol_link_threads> ol_link_pthreads <$ol_link_pthreads>" >&5
+$as_echo "$as_me: ol_link_threads: <$ol_link_threads> ol_link_pthreads <$ol_link_pthreads>" >&6;}
+
if test $ol_link_threads != no ; then
LTHREAD_LIBS="$LTHREAD_LIBS $ol_link_pthreads"
@@ -14984,6 +15029,10 @@ ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $
ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+
+
case "$ol_found_pthreads" in
yes)
saved_LIBS="$LIBS"
@@ -15009,56 +15058,6 @@ done
yes)
PTHREAD_LIBS="$LTHREAD_LIBS"
have_pthreads=yes
- # Bug 2332: With GCC we need to force a reference to libgcc_s
- # (if libgcc_s exists) or the combination of
- # threads + setuid + mlockall does not work on linux because
- # thread cancellation fails to load libgcc_s with dlopen().
- # We have to pass this all as linker options to avoid argument
- # reordering by libtool.
- case "$GCC$with_gnu_ld" in
- yesyes)
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for exit in -lgcc_s" >&5
-$as_echo_n "checking for exit in -lgcc_s... " >&6; }
-if ${ac_cv_lib_gcc_s_exit+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-lgcc_s $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h. */
-
-/* Override any GCC internal prototype to avoid an error.
- Use char because int might match the return type of a GCC
- builtin and then its argument prototype would still apply. */
-#ifdef __cplusplus
-extern "C"
-#endif
-char exit ();
-int
-main ()
-{
-return exit ();
- ;
- return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- ac_cv_lib_gcc_s_exit=yes
-else
- ac_cv_lib_gcc_s_exit=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_gcc_s_exit" >&5
-$as_echo "$ac_cv_lib_gcc_s_exit" >&6; }
-if test "x$ac_cv_lib_gcc_s_exit" = xyes; then :
- PTHREAD_LIBS="$LTHREAD_LIBS -Wl,--no-as-needed,-lgcc_s,--as-needed"
-fi
-
- ;;
- esac
esac
esac
esac
@@ -25132,6 +25131,7 @@ ntp_libevent_tearoff=libevent
+
case "$ntp_use_local_libevent" in
yes)
;;
@@ -25145,6 +25145,7 @@ $as_echo_n "checking if libevent $ntp_libevent_min_version or later is installed
ntp_use_local_libevent=no
{ $as_echo "$as_me:${as_lineno-$LINENO}: Using the installed libevent" >&5
$as_echo "$as_me: Using the installed libevent" >&6;}
+ CFLAGS_LIBEVENT=`$PKG_CONFIG --cflags libevent_pthreads`
CPPFLAGS_LIBEVENT=`$PKG_CONFIG --cflags-only-I libevent`
# HMS: I hope the following is accurate.
# We don't need -levent, we only need -levent_core.
@@ -25174,6 +25175,9 @@ $as_echo "$as_me: Using the installed libevent" >&6;}
$as_echo "yes" >&6; }
else
ntp_use_local_libevent=yes
+ # HMS: do we only need to do this if LIBISC_PTHREADS_NOTHREADS
+ # is "pthreads"?
+ CFLAGS_LIBEVENT=`$PKG_CONFIG --cflags libevent_pthreads`
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
fi
@@ -25199,6 +25203,7 @@ $as_echo "$as_me: Using libevent tearoff" >&6;}
esac
esac
+
if test "x$ntp_use_local_libevent" = "xyes"; then
BUILD_LIBEVENT_TRUE=
BUILD_LIBEVENT_FALSE='#'
@@ -31104,7 +31109,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
# report actual input values of CONFIG_FILES etc. instead of their
# values after options handling.
ac_log="
-This file was extended by sntp $as_me 4.2.8p3, which was
+This file was extended by sntp $as_me 4.2.8p4, which was
generated by GNU Autoconf 2.69. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@@ -31171,7 +31176,7 @@ _ACEOF
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
ac_cs_version="\\
-sntp config.status 4.2.8p3
+sntp config.status 4.2.8p4
configured by $0, generated by GNU Autoconf 2.69,
with options \\"\$ac_cs_config\\"
diff --git a/contrib/ntp/sntp/configure.ac b/contrib/ntp/sntp/configure.ac
index c0c98dc..a08aa13 100644
--- a/contrib/ntp/sntp/configure.ac
+++ b/contrib/ntp/sntp/configure.ac
@@ -11,6 +11,7 @@ AC_INIT(
)
AC_CONFIG_MACRO_DIR([m4])
AC_CONFIG_AUX_DIR([libevent/build-aux])
+AC_LANG([C])
# Bump sntp_configure_cache_version for each change to configure.ac or
# .m4 files which invalidates cached values from previous configure
diff --git a/contrib/ntp/sntp/include/Makefile.in b/contrib/ntp/sntp/include/Makefile.in
index 8289b41..1c8a179 100644
--- a/contrib/ntp/sntp/include/Makefile.in
+++ b/contrib/ntp/sntp/include/Makefile.in
@@ -156,6 +156,7 @@ AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
+BUILD_THREAD = @BUILD_THREAD@
CALC_TICKADJ_DB = @CALC_TICKADJ_DB@
CALC_TICKADJ_DL = @CALC_TICKADJ_DL@
CALC_TICKADJ_DS = @CALC_TICKADJ_DS@
@@ -164,6 +165,7 @@ CALC_TICKADJ_NI = @CALC_TICKADJ_NI@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
+CFLAGS_LIBEVENT = @CFLAGS_LIBEVENT@
CFLAGS_NTP = @CFLAGS_NTP@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
@@ -217,6 +219,7 @@ LIBTOOL_DEPS = @LIBTOOL_DEPS@
LIB_SYSLOG = @LIB_SYSLOG@
LIPO = @LIPO@
LN_S = @LN_S@
+LTHREAD_LIBS = @LTHREAD_LIBS@
LTLIBOBJS = @LTLIBOBJS@
MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
diff --git a/contrib/ntp/sntp/include/version.def b/contrib/ntp/sntp/include/version.def
index b007651..9f1ca6b 100644
--- a/contrib/ntp/sntp/include/version.def
+++ b/contrib/ntp/sntp/include/version.def
@@ -1 +1 @@
-version = '4.2.8p3';
+version = '4.2.8p4';
diff --git a/contrib/ntp/sntp/include/version.texi b/contrib/ntp/sntp/include/version.texi
index 4a13b8f..64f037b 100644
--- a/contrib/ntp/sntp/include/version.texi
+++ b/contrib/ntp/sntp/include/version.texi
@@ -1,3 +1,3 @@
-@set UPDATED 29 June 2015
-@set EDITION 4.2.8p3
-@set VERSION 4.2.8p3
+@set UPDATED 21 October 2015
+@set EDITION 4.2.8p4
+@set VERSION 4.2.8p4
diff --git a/contrib/ntp/sntp/invoke-sntp.texi b/contrib/ntp/sntp/invoke-sntp.texi
index 708a370..9a726fa 100644
--- a/contrib/ntp/sntp/invoke-sntp.texi
+++ b/contrib/ntp/sntp/invoke-sntp.texi
@@ -6,7 +6,7 @@
#
# EDIT THIS FILE WITH CAUTION (invoke-sntp.texi)
#
-# It has been AutoGen-ed June 29, 2015 at 04:23:30 PM by AutoGen 5.18.5
+# It has been AutoGen-ed October 21, 2015 at 12:30:56 PM by AutoGen 5.18.5
# From the definitions sntp-opts.def
# and the template file agtexi-cmd.tpl
@end ignore
@@ -101,7 +101,7 @@ with a status code of 0.
@exampleindent 0
@example
-sntp - standard Simple Network Time Protocol client program - Ver. 4.2.8p3
+sntp - standard Simple Network Time Protocol client program - Ver. 4.2.8p4
Usage: sntp [ -<flag> [<val>] | --<name>[@{=| @}<val>] ]... \
[ hostname-or-IP ...]
Flg Arg Option-Name Description
diff --git a/contrib/ntp/sntp/libevent/Makefile.am b/contrib/ntp/sntp/libevent/Makefile.am
index 3053cc0..1300e8f 100644
--- a/contrib/ntp/sntp/libevent/Makefile.am
+++ b/contrib/ntp/sntp/libevent/Makefile.am
@@ -140,7 +140,7 @@ CLEANFILES=
DISTCLEANFILES=
BUILT_SOURCES =
include include/include.am
-include sample/include.am
+#include sample/include.am
include test/include.am
if BUILD_WIN32
diff --git a/contrib/ntp/sntp/libevent/Makefile.in b/contrib/ntp/sntp/libevent/Makefile.in
index 61d96f5..81e121c 100644
--- a/contrib/ntp/sntp/libevent/Makefile.in
+++ b/contrib/ntp/sntp/libevent/Makefile.in
@@ -26,12 +26,6 @@
#
# See LICENSE for copying information.
-# sample/include.am for libevent
-# Copyright 2000-2007 Niels Provos
-# Copyright 2007-2012 Niels Provos and Nick Mathewson
-#
-# See LICENSE for copying information.
-
# test/Makefile.am for libevent
# Copyright 2000-2007 Niels Provos
# Copyright 2007-2012 Niels Provos and Nick Mathewson
@@ -120,32 +114,26 @@ host_triplet = @host@
@PTHREADS_TRUE@am__append_2 = libevent_pthreads.pc
@OPENSSL_TRUE@am__append_3 = libevent_openssl.la
@OPENSSL_TRUE@am__append_4 = libevent_openssl.pc
-noinst_PROGRAMS = $(am__EXEEXT_4) $(am__EXEEXT_6)
+noinst_PROGRAMS = $(am__EXEEXT_3)
EXTRA_PROGRAMS = $(am__EXEEXT_1)
@INSTALL_LIBEVENT_FALSE@am__append_5 = $(EVENT2_EXPORT)
-@OPENSSL_TRUE@am__append_6 = sample/le-proxy sample/https-client
-@OPENSSL_TRUE@am__append_7 = \
-@OPENSSL_TRUE@ sample/hostcheck.h \
-@OPENSSL_TRUE@ sample/openssl_hostname_validation.h
-
-@BUILD_SAMPLES_TRUE@am__append_8 = $(SAMPLES)
-@BUILD_REGRESS_TRUE@am__append_9 = $(TESTPROGRAMS)
-@BUILD_REGRESS_TRUE@am__append_10 = test/regress
-@BUILD_REGRESS_TRUE@am__append_11 = test/regress.gen.c test/regress.gen.h
-@PTHREADS_TRUE@am__append_12 = libevent_pthreads.la
-@BUILD_WIN32_TRUE@am__append_13 = test/regress_iocp.c
-@OPENSSL_TRUE@am__append_14 = test/regress_ssl.c
-@OPENSSL_TRUE@am__append_15 = $(OPENSSL_INCS)
-@OPENSSL_TRUE@am__append_16 = libevent_openssl.la $(OPENSSL_LIBS) ${OPENSSL_LIBADD}
-@STRLCPY_IMPL_TRUE@am__append_17 = strlcpy.c
-@SELECT_BACKEND_TRUE@am__append_18 = select.c
-@POLL_BACKEND_TRUE@am__append_19 = poll.c
-@DEVPOLL_BACKEND_TRUE@am__append_20 = devpoll.c
-@KQUEUE_BACKEND_TRUE@am__append_21 = kqueue.c
-@EPOLL_BACKEND_TRUE@am__append_22 = epoll.c
-@EVPORT_BACKEND_TRUE@am__append_23 = evport.c
-@SIGNAL_SUPPORT_TRUE@am__append_24 = signal.c
-@INSTALL_LIBEVENT_FALSE@am__append_25 = $(EVENT1_HDRS)
+@BUILD_REGRESS_TRUE@am__append_6 = $(TESTPROGRAMS)
+@BUILD_REGRESS_TRUE@am__append_7 = test/regress
+@BUILD_REGRESS_TRUE@am__append_8 = test/regress.gen.c test/regress.gen.h
+@PTHREADS_TRUE@am__append_9 = libevent_pthreads.la
+@BUILD_WIN32_TRUE@am__append_10 = test/regress_iocp.c
+@OPENSSL_TRUE@am__append_11 = test/regress_ssl.c
+@OPENSSL_TRUE@am__append_12 = $(OPENSSL_INCS)
+@OPENSSL_TRUE@am__append_13 = libevent_openssl.la $(OPENSSL_LIBS) ${OPENSSL_LIBADD}
+@STRLCPY_IMPL_TRUE@am__append_14 = strlcpy.c
+@SELECT_BACKEND_TRUE@am__append_15 = select.c
+@POLL_BACKEND_TRUE@am__append_16 = poll.c
+@DEVPOLL_BACKEND_TRUE@am__append_17 = devpoll.c
+@KQUEUE_BACKEND_TRUE@am__append_18 = kqueue.c
+@EPOLL_BACKEND_TRUE@am__append_19 = epoll.c
+@EVPORT_BACKEND_TRUE@am__append_20 = evport.c
+@SIGNAL_SUPPORT_TRUE@am__append_21 = signal.c
+@INSTALL_LIBEVENT_FALSE@am__append_22 = $(EVENT1_HDRS)
subdir = .
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/m4/ac_backport_259_ssizet.m4 \
@@ -297,58 +285,16 @@ libevent_pthreads_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
@INSTALL_LIBEVENT_TRUE@@PTHREADS_TRUE@am_libevent_pthreads_la_rpath = \
@INSTALL_LIBEVENT_TRUE@@PTHREADS_TRUE@ -rpath $(libdir)
@BUILD_REGRESS_TRUE@am__EXEEXT_1 = test/regress$(EXEEXT)
-@OPENSSL_TRUE@am__EXEEXT_2 = sample/le-proxy$(EXEEXT) \
-@OPENSSL_TRUE@ sample/https-client$(EXEEXT)
-am__EXEEXT_3 = sample/dns-example$(EXEEXT) \
- sample/event-read-fifo$(EXEEXT) sample/hello-world$(EXEEXT) \
- sample/http-server$(EXEEXT) sample/signal-test$(EXEEXT) \
- sample/time-test$(EXEEXT) $(am__EXEEXT_2)
-@BUILD_SAMPLES_TRUE@am__EXEEXT_4 = $(am__EXEEXT_3)
-am__EXEEXT_5 = test/bench$(EXEEXT) test/bench_cascade$(EXEEXT) \
+am__EXEEXT_2 = test/bench$(EXEEXT) test/bench_cascade$(EXEEXT) \
test/bench_http$(EXEEXT) test/bench_httpclient$(EXEEXT) \
test/test-changelist$(EXEEXT) test/test-dumpevents$(EXEEXT) \
test/test-eof$(EXEEXT) test/test-closed$(EXEEXT) \
test/test-fdleak$(EXEEXT) test/test-init$(EXEEXT) \
test/test-ratelim$(EXEEXT) test/test-time$(EXEEXT) \
test/test-weof$(EXEEXT) test/regress$(EXEEXT)
-@BUILD_REGRESS_TRUE@am__EXEEXT_6 = $(am__EXEEXT_5)
+@BUILD_REGRESS_TRUE@am__EXEEXT_3 = $(am__EXEEXT_2)
PROGRAMS = $(noinst_PROGRAMS)
am__dirstamp = $(am__leading_dot)dirstamp
-am_sample_dns_example_OBJECTS = sample/dns-example.$(OBJEXT)
-sample_dns_example_OBJECTS = $(am_sample_dns_example_OBJECTS)
-sample_dns_example_DEPENDENCIES = $(am__DEPENDENCIES_1) libevent.la
-am_sample_event_read_fifo_OBJECTS = sample/event-read-fifo.$(OBJEXT)
-sample_event_read_fifo_OBJECTS = $(am_sample_event_read_fifo_OBJECTS)
-sample_event_read_fifo_DEPENDENCIES = $(am__DEPENDENCIES_1) \
- libevent.la
-am_sample_hello_world_OBJECTS = sample/hello-world.$(OBJEXT)
-sample_hello_world_OBJECTS = $(am_sample_hello_world_OBJECTS)
-sample_hello_world_DEPENDENCIES = $(am__DEPENDENCIES_1) libevent.la
-am_sample_http_server_OBJECTS = sample/http-server.$(OBJEXT)
-sample_http_server_OBJECTS = $(am_sample_http_server_OBJECTS)
-sample_http_server_DEPENDENCIES = $(am__DEPENDENCIES_1) libevent.la
-am__sample_https_client_SOURCES_DIST = sample/https-client.c \
- sample/hostcheck.c sample/openssl_hostname_validation.c
-@OPENSSL_TRUE@am_sample_https_client_OBJECTS = \
-@OPENSSL_TRUE@ sample/https-client.$(OBJEXT) \
-@OPENSSL_TRUE@ sample/hostcheck.$(OBJEXT) \
-@OPENSSL_TRUE@ sample/openssl_hostname_validation.$(OBJEXT)
-sample_https_client_OBJECTS = $(am_sample_https_client_OBJECTS)
-@OPENSSL_TRUE@sample_https_client_DEPENDENCIES = libevent.la \
-@OPENSSL_TRUE@ libevent_openssl.la $(am__DEPENDENCIES_1) \
-@OPENSSL_TRUE@ $(am__DEPENDENCIES_1)
-am__sample_le_proxy_SOURCES_DIST = sample/le-proxy.c
-@OPENSSL_TRUE@am_sample_le_proxy_OBJECTS = sample/le-proxy.$(OBJEXT)
-sample_le_proxy_OBJECTS = $(am_sample_le_proxy_OBJECTS)
-@OPENSSL_TRUE@sample_le_proxy_DEPENDENCIES = libevent.la \
-@OPENSSL_TRUE@ libevent_openssl.la $(am__DEPENDENCIES_1) \
-@OPENSSL_TRUE@ $(am__DEPENDENCIES_1)
-am_sample_signal_test_OBJECTS = sample/signal-test.$(OBJEXT)
-sample_signal_test_OBJECTS = $(am_sample_signal_test_OBJECTS)
-sample_signal_test_DEPENDENCIES = $(am__DEPENDENCIES_1) libevent.la
-am_sample_time_test_OBJECTS = sample/time-test.$(OBJEXT)
-sample_time_test_OBJECTS = $(am_sample_time_test_OBJECTS)
-sample_time_test_DEPENDENCIES = $(am__DEPENDENCIES_1) libevent.la
am_test_bench_OBJECTS = test/bench.$(OBJEXT)
test_bench_OBJECTS = $(am_test_bench_OBJECTS)
test_bench_DEPENDENCIES = $(am__DEPENDENCIES_1) libevent.la
@@ -397,7 +343,7 @@ am_test_regress_OBJECTS = test/test_regress-regress.$(OBJEXT) \
test/test_regress-tinytest.$(OBJEXT) $(am__objects_12) \
$(am__objects_13) $(am__objects_14) $(am__objects_15)
test_regress_OBJECTS = $(am_test_regress_OBJECTS)
-am__DEPENDENCIES_3 = $(am__append_12)
+am__DEPENDENCIES_3 = $(am__append_9)
@OPENSSL_TRUE@am__DEPENDENCIES_4 = libevent_openssl.la \
@OPENSSL_TRUE@ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
test_regress_DEPENDENCIES = $(am__DEPENDENCIES_1) libevent.la \
@@ -471,31 +417,21 @@ am__v_CCLD_0 = @echo " CCLD " $@;
am__v_CCLD_1 =
SOURCES = $(libevent_la_SOURCES) $(libevent_core_la_SOURCES) \
$(libevent_extra_la_SOURCES) $(libevent_openssl_la_SOURCES) \
- $(libevent_pthreads_la_SOURCES) $(sample_dns_example_SOURCES) \
- $(sample_event_read_fifo_SOURCES) \
- $(sample_hello_world_SOURCES) $(sample_http_server_SOURCES) \
- $(sample_https_client_SOURCES) $(sample_le_proxy_SOURCES) \
- $(sample_signal_test_SOURCES) $(sample_time_test_SOURCES) \
- $(test_bench_SOURCES) $(test_bench_cascade_SOURCES) \
- $(test_bench_http_SOURCES) $(test_bench_httpclient_SOURCES) \
- $(test_regress_SOURCES) $(test_test_changelist_SOURCES) \
- $(test_test_closed_SOURCES) $(test_test_dumpevents_SOURCES) \
- $(test_test_eof_SOURCES) $(test_test_fdleak_SOURCES) \
- $(test_test_init_SOURCES) $(test_test_ratelim_SOURCES) \
- $(test_test_time_SOURCES) $(test_test_weof_SOURCES)
+ $(libevent_pthreads_la_SOURCES) $(test_bench_SOURCES) \
+ $(test_bench_cascade_SOURCES) $(test_bench_http_SOURCES) \
+ $(test_bench_httpclient_SOURCES) $(test_regress_SOURCES) \
+ $(test_test_changelist_SOURCES) $(test_test_closed_SOURCES) \
+ $(test_test_dumpevents_SOURCES) $(test_test_eof_SOURCES) \
+ $(test_test_fdleak_SOURCES) $(test_test_init_SOURCES) \
+ $(test_test_ratelim_SOURCES) $(test_test_time_SOURCES) \
+ $(test_test_weof_SOURCES)
DIST_SOURCES = $(am__libevent_la_SOURCES_DIST) \
$(am__libevent_core_la_SOURCES_DIST) \
$(libevent_extra_la_SOURCES) \
$(am__libevent_openssl_la_SOURCES_DIST) \
- $(am__libevent_pthreads_la_SOURCES_DIST) \
- $(sample_dns_example_SOURCES) \
- $(sample_event_read_fifo_SOURCES) \
- $(sample_hello_world_SOURCES) $(sample_http_server_SOURCES) \
- $(am__sample_https_client_SOURCES_DIST) \
- $(am__sample_le_proxy_SOURCES_DIST) \
- $(sample_signal_test_SOURCES) $(sample_time_test_SOURCES) \
- $(test_bench_SOURCES) $(test_bench_cascade_SOURCES) \
- $(test_bench_http_SOURCES) $(test_bench_httpclient_SOURCES) \
+ $(am__libevent_pthreads_la_SOURCES_DIST) $(test_bench_SOURCES) \
+ $(test_bench_cascade_SOURCES) $(test_bench_http_SOURCES) \
+ $(test_bench_httpclient_SOURCES) \
$(am__test_regress_SOURCES_DIST) \
$(test_test_changelist_SOURCES) $(test_test_closed_SOURCES) \
$(test_test_dumpevents_SOURCES) $(test_test_eof_SOURCES) \
@@ -538,7 +474,6 @@ am__noinst_HEADERS_DIST = include/event2/buffer.h \
include/event2/rpc_struct.h include/event2/tag.h \
include/event2/tag_compat.h include/event2/thread.h \
include/event2/util.h include/event2/visibility.h \
- sample/hostcheck.h sample/openssl_hostname_validation.h \
test/regress.h test/regress_thread.h test/tinytest.h \
test/tinytest_local.h test/tinytest_macros.h \
WIN32-Code/nmake/evconfig-private.h \
@@ -757,8 +692,8 @@ TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \
am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/config.h.in \
$(srcdir)/evconfig-private.h.in $(srcdir)/include/include.am \
$(srcdir)/libevent.pc.in $(srcdir)/libevent_openssl.pc.in \
- $(srcdir)/libevent_pthreads.pc.in $(srcdir)/sample/include.am \
- $(srcdir)/test/include.am $(top_srcdir)/build-aux/compile \
+ $(srcdir)/libevent_pthreads.pc.in $(srcdir)/test/include.am \
+ $(top_srcdir)/build-aux/compile \
$(top_srcdir)/build-aux/config.guess \
$(top_srcdir)/build-aux/config.sub \
$(top_srcdir)/build-aux/depcomp \
@@ -852,7 +787,7 @@ PATH_SEPARATOR = @PATH_SEPARATOR@
PKG_CONFIG = @PKG_CONFIG@
PTHREAD_CC = @PTHREAD_CC@
PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
-PTHREAD_LIBS = @PTHREAD_LIBS@ $(am__append_12)
+PTHREAD_LIBS = @PTHREAD_LIBS@ $(am__append_9)
RANLIB = @RANLIB@
SED = @SED@
SET_MAKE = @SET_MAKE@
@@ -1018,9 +953,9 @@ LIBEVENT_LIBS_LA = libevent.la libevent_core.la libevent_extra.la \
@INSTALL_LIBEVENT_TRUE@pkgconfig_DATA = $(LIBEVENT_PKGCONFIG)
@INSTALL_LIBEVENT_FALSE@noinst_LTLIBRARIES = $(LIBEVENT_LIBS_LA)
EXTRA_SOURCE =
-noinst_HEADERS = $(am__append_5) $(am__append_7) test/regress.h \
- test/regress_thread.h test/tinytest.h test/tinytest_local.h \
- test/tinytest_macros.h WIN32-Code/nmake/evconfig-private.h \
+noinst_HEADERS = $(am__append_5) test/regress.h test/regress_thread.h \
+ test/tinytest.h test/tinytest_local.h test/tinytest_macros.h \
+ WIN32-Code/nmake/evconfig-private.h \
WIN32-Code/nmake/event2/event-config.h WIN32-Code/tree.h \
bufferevent-internal.h changelist-internal.h \
compat/sys/queue.h defer-internal.h epolltable-internal.h \
@@ -1030,12 +965,12 @@ noinst_HEADERS = $(am__append_5) $(am__append_7) test/regress.h \
iocp-internal.h ipv6-internal.h kqueue-internal.h \
log-internal.h minheap-internal.h mm-internal.h \
ratelim-internal.h ratelim-internal.h strlcpy-internal.h \
- time-internal.h util-internal.h $(am__append_25)
+ time-internal.h util-internal.h $(am__append_22)
CLEANFILES = test/rpcgen-attempted
DISTCLEANFILES = test/test-script.sh test/regress.gen.c \
test/regress.gen.h *~ libevent.pc \
./include/event2/event-config.h
-BUILT_SOURCES = $(am__append_11) include/event2/event-config.h
+BUILT_SOURCES = $(am__append_8) include/event2/event-config.h
include_event2dir = $(includedir)/event2
EVENT2_EXPORT = \
include/event2/buffer.h \
@@ -1067,31 +1002,6 @@ EVENT2_EXPORT = \
@INSTALL_LIBEVENT_TRUE@include_event2_HEADERS = $(EVENT2_EXPORT)
@INSTALL_LIBEVENT_TRUE@nodist_include_event2_HEADERS = include/event2/event-config.h
@INSTALL_LIBEVENT_FALSE@nodist_noinst_HEADERS = include/event2/event-config.h
-SAMPLES = sample/dns-example sample/event-read-fifo sample/hello-world \
- sample/http-server sample/signal-test sample/time-test \
- $(am__append_6)
-@OPENSSL_TRUE@sample_le_proxy_SOURCES = sample/le-proxy.c
-@OPENSSL_TRUE@sample_le_proxy_LDADD = libevent.la libevent_openssl.la ${OPENSSL_LIBS} ${OPENSSL_LIBADD}
-@OPENSSL_TRUE@sample_le_proxy_INCLUDES = $(OPENSSL_INCS)
-@OPENSSL_TRUE@sample_https_client_SOURCES = \
-@OPENSSL_TRUE@ sample/https-client.c \
-@OPENSSL_TRUE@ sample/hostcheck.c \
-@OPENSSL_TRUE@ sample/openssl_hostname_validation.c
-
-@OPENSSL_TRUE@sample_https_client_LDADD = libevent.la libevent_openssl.la ${OPENSSL_LIBS} ${OPENSSL_LIBADD}
-@OPENSSL_TRUE@sample_https_client_INCLUDES = $(OPENSSL_INCS)
-sample_event_read_fifo_SOURCES = sample/event-read-fifo.c
-sample_event_read_fifo_LDADD = $(LIBEVENT_GC_SECTIONS) libevent.la
-sample_time_test_SOURCES = sample/time-test.c
-sample_time_test_LDADD = $(LIBEVENT_GC_SECTIONS) libevent.la
-sample_signal_test_SOURCES = sample/signal-test.c
-sample_signal_test_LDADD = $(LIBEVENT_GC_SECTIONS) libevent.la
-sample_dns_example_SOURCES = sample/dns-example.c
-sample_dns_example_LDADD = $(LIBEVENT_GC_SECTIONS) libevent.la
-sample_hello_world_SOURCES = sample/hello-world.c
-sample_hello_world_LDADD = $(LIBEVENT_GC_SECTIONS) libevent.la
-sample_http_server_SOURCES = sample/http-server.c
-sample_http_server_LDADD = $(LIBEVENT_GC_SECTIONS) libevent.la
regress_CPPFLAGS = -DTINYTEST_LOCAL
TESTPROGRAMS = \
test/bench \
@@ -1139,14 +1049,14 @@ test_regress_SOURCES = test/regress.c test/regress.gen.c \
test/regress_minheap.c test/regress_rpc.c \
test/regress_testutils.c test/regress_testutils.h \
test/regress_util.c test/tinytest.c $(regress_thread_SOURCES) \
- $(regress_zlib_SOURCES) $(am__append_13) $(am__append_14)
+ $(regress_zlib_SOURCES) $(am__append_10) $(am__append_11)
@BUILD_WIN32_TRUE@regress_thread_SOURCES = test/regress_thread.c
@PTHREADS_TRUE@regress_thread_SOURCES = test/regress_thread.c
@ZLIB_REGRESS_TRUE@regress_zlib_SOURCES = test/regress_zlib.c
test_regress_LDADD = $(LIBEVENT_GC_SECTIONS) libevent.la \
- $(PTHREAD_LIBS) $(ZLIB_LIBS) $(am__append_16)
+ $(PTHREAD_LIBS) $(ZLIB_LIBS) $(am__append_13)
test_regress_CPPFLAGS = $(AM_CPPFLAGS) $(PTHREAD_CFLAGS) \
- $(ZLIB_CFLAGS) -Itest $(am__append_15)
+ $(ZLIB_CFLAGS) -Itest $(am__append_12)
test_regress_LDFLAGS = $(PTHREAD_CFLAGS)
test_bench_SOURCES = test/bench.c
test_bench_LDADD = $(LIBEVENT_GC_SECTIONS) libevent.la
@@ -1157,18 +1067,19 @@ test_bench_http_LDADD = $(LIBEVENT_GC_SECTIONS) libevent.la
test_bench_httpclient_SOURCES = test/bench_httpclient.c
test_bench_httpclient_LDADD = $(LIBEVENT_GC_SECTIONS) libevent_core.la
@BUILD_WIN32_FALSE@SYS_LIBS =
+#include sample/include.am
@BUILD_WIN32_TRUE@SYS_LIBS = -lws2_32 -lshell32 -ladvapi32
-@BUILD_WIN32_FALSE@SYS_SRC = $(am__append_17) $(am__append_18) \
-@BUILD_WIN32_FALSE@ $(am__append_19) $(am__append_20) \
-@BUILD_WIN32_FALSE@ $(am__append_21) $(am__append_22) \
-@BUILD_WIN32_FALSE@ $(am__append_23) $(am__append_24)
+@BUILD_WIN32_FALSE@SYS_SRC = $(am__append_14) $(am__append_15) \
+@BUILD_WIN32_FALSE@ $(am__append_16) $(am__append_17) \
+@BUILD_WIN32_FALSE@ $(am__append_18) $(am__append_19) \
+@BUILD_WIN32_FALSE@ $(am__append_20) $(am__append_21)
@BUILD_WIN32_TRUE@SYS_SRC = win32select.c evthread_win32.c \
@BUILD_WIN32_TRUE@ buffer_iocp.c event_iocp.c \
-@BUILD_WIN32_TRUE@ bufferevent_async.c $(am__append_17) \
-@BUILD_WIN32_TRUE@ $(am__append_18) $(am__append_19) \
-@BUILD_WIN32_TRUE@ $(am__append_20) $(am__append_21) \
-@BUILD_WIN32_TRUE@ $(am__append_22) $(am__append_23) \
-@BUILD_WIN32_TRUE@ $(am__append_24)
+@BUILD_WIN32_TRUE@ bufferevent_async.c $(am__append_14) \
+@BUILD_WIN32_TRUE@ $(am__append_15) $(am__append_16) \
+@BUILD_WIN32_TRUE@ $(am__append_17) $(am__append_18) \
+@BUILD_WIN32_TRUE@ $(am__append_19) $(am__append_20) \
+@BUILD_WIN32_TRUE@ $(am__append_21)
@BUILD_WIN32_FALSE@SYS_INCLUDES =
@BUILD_WIN32_TRUE@SYS_INCLUDES = -IWIN32-Code -IWIN32-Code/nmake
CORE_SRC = \
@@ -1231,7 +1142,7 @@ all: $(BUILT_SOURCES) config.h evconfig-private.h
.SUFFIXES: .c .lo .log .o .obj .test .test$(EXEEXT) .trs
am--refresh: Makefile
@:
-$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(srcdir)/include/include.am $(srcdir)/sample/include.am $(srcdir)/test/include.am $(am__configure_deps)
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(srcdir)/include/include.am $(srcdir)/test/include.am $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
@@ -1253,7 +1164,7 @@ Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \
cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \
esac;
-$(srcdir)/include/include.am $(srcdir)/sample/include.am $(srcdir)/test/include.am $(am__empty):
+$(srcdir)/include/include.am $(srcdir)/test/include.am $(am__empty):
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
$(SHELL) ./config.status --recheck
@@ -1362,64 +1273,6 @@ clean-noinstPROGRAMS:
list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
echo " rm -f" $$list; \
rm -f $$list
-sample/$(am__dirstamp):
- @$(MKDIR_P) sample
- @: > sample/$(am__dirstamp)
-sample/$(DEPDIR)/$(am__dirstamp):
- @$(MKDIR_P) sample/$(DEPDIR)
- @: > sample/$(DEPDIR)/$(am__dirstamp)
-sample/dns-example.$(OBJEXT): sample/$(am__dirstamp) \
- sample/$(DEPDIR)/$(am__dirstamp)
-
-sample/dns-example$(EXEEXT): $(sample_dns_example_OBJECTS) $(sample_dns_example_DEPENDENCIES) $(EXTRA_sample_dns_example_DEPENDENCIES) sample/$(am__dirstamp)
- @rm -f sample/dns-example$(EXEEXT)
- $(AM_V_CCLD)$(LINK) $(sample_dns_example_OBJECTS) $(sample_dns_example_LDADD) $(LIBS)
-sample/event-read-fifo.$(OBJEXT): sample/$(am__dirstamp) \
- sample/$(DEPDIR)/$(am__dirstamp)
-
-sample/event-read-fifo$(EXEEXT): $(sample_event_read_fifo_OBJECTS) $(sample_event_read_fifo_DEPENDENCIES) $(EXTRA_sample_event_read_fifo_DEPENDENCIES) sample/$(am__dirstamp)
- @rm -f sample/event-read-fifo$(EXEEXT)
- $(AM_V_CCLD)$(LINK) $(sample_event_read_fifo_OBJECTS) $(sample_event_read_fifo_LDADD) $(LIBS)
-sample/hello-world.$(OBJEXT): sample/$(am__dirstamp) \
- sample/$(DEPDIR)/$(am__dirstamp)
-
-sample/hello-world$(EXEEXT): $(sample_hello_world_OBJECTS) $(sample_hello_world_DEPENDENCIES) $(EXTRA_sample_hello_world_DEPENDENCIES) sample/$(am__dirstamp)
- @rm -f sample/hello-world$(EXEEXT)
- $(AM_V_CCLD)$(LINK) $(sample_hello_world_OBJECTS) $(sample_hello_world_LDADD) $(LIBS)
-sample/http-server.$(OBJEXT): sample/$(am__dirstamp) \
- sample/$(DEPDIR)/$(am__dirstamp)
-
-sample/http-server$(EXEEXT): $(sample_http_server_OBJECTS) $(sample_http_server_DEPENDENCIES) $(EXTRA_sample_http_server_DEPENDENCIES) sample/$(am__dirstamp)
- @rm -f sample/http-server$(EXEEXT)
- $(AM_V_CCLD)$(LINK) $(sample_http_server_OBJECTS) $(sample_http_server_LDADD) $(LIBS)
-sample/https-client.$(OBJEXT): sample/$(am__dirstamp) \
- sample/$(DEPDIR)/$(am__dirstamp)
-sample/hostcheck.$(OBJEXT): sample/$(am__dirstamp) \
- sample/$(DEPDIR)/$(am__dirstamp)
-sample/openssl_hostname_validation.$(OBJEXT): sample/$(am__dirstamp) \
- sample/$(DEPDIR)/$(am__dirstamp)
-
-sample/https-client$(EXEEXT): $(sample_https_client_OBJECTS) $(sample_https_client_DEPENDENCIES) $(EXTRA_sample_https_client_DEPENDENCIES) sample/$(am__dirstamp)
- @rm -f sample/https-client$(EXEEXT)
- $(AM_V_CCLD)$(LINK) $(sample_https_client_OBJECTS) $(sample_https_client_LDADD) $(LIBS)
-sample/le-proxy.$(OBJEXT): sample/$(am__dirstamp) \
- sample/$(DEPDIR)/$(am__dirstamp)
-
-sample/le-proxy$(EXEEXT): $(sample_le_proxy_OBJECTS) $(sample_le_proxy_DEPENDENCIES) $(EXTRA_sample_le_proxy_DEPENDENCIES) sample/$(am__dirstamp)
- @rm -f sample/le-proxy$(EXEEXT)
- $(AM_V_CCLD)$(LINK) $(sample_le_proxy_OBJECTS) $(sample_le_proxy_LDADD) $(LIBS)
-sample/signal-test.$(OBJEXT): sample/$(am__dirstamp) \
- sample/$(DEPDIR)/$(am__dirstamp)
-
-sample/signal-test$(EXEEXT): $(sample_signal_test_OBJECTS) $(sample_signal_test_DEPENDENCIES) $(EXTRA_sample_signal_test_DEPENDENCIES) sample/$(am__dirstamp)
- @rm -f sample/signal-test$(EXEEXT)
- $(AM_V_CCLD)$(LINK) $(sample_signal_test_OBJECTS) $(sample_signal_test_LDADD) $(LIBS)
-sample/time-test.$(OBJEXT): sample/$(am__dirstamp) \
- sample/$(DEPDIR)/$(am__dirstamp)
-
-sample/time-test$(EXEEXT): $(sample_time_test_OBJECTS) $(sample_time_test_DEPENDENCIES) $(EXTRA_sample_time_test_DEPENDENCIES) sample/$(am__dirstamp)
- @rm -f sample/time-test$(EXEEXT)
- $(AM_V_CCLD)$(LINK) $(sample_time_test_OBJECTS) $(sample_time_test_LDADD) $(LIBS)
test/$(am__dirstamp):
@$(MKDIR_P) test
@: > test/$(am__dirstamp)
@@ -1584,7 +1437,6 @@ uninstall-dist_binSCRIPTS:
mostlyclean-compile:
-rm -f *.$(OBJEXT)
- -rm -f sample/*.$(OBJEXT)
-rm -f test/*.$(OBJEXT)
distclean-compile:
@@ -1624,16 +1476,6 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/signal.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strlcpy.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/win32select.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@sample/$(DEPDIR)/dns-example.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@sample/$(DEPDIR)/event-read-fifo.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@sample/$(DEPDIR)/hello-world.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@sample/$(DEPDIR)/hostcheck.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@sample/$(DEPDIR)/http-server.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@sample/$(DEPDIR)/https-client.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@sample/$(DEPDIR)/le-proxy.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@sample/$(DEPDIR)/openssl_hostname_validation.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@sample/$(DEPDIR)/signal-test.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@sample/$(DEPDIR)/time-test.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@test/$(DEPDIR)/bench.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@test/$(DEPDIR)/bench_cascade.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@test/$(DEPDIR)/bench_http.Po@am__quote@
@@ -1969,7 +1811,6 @@ mostlyclean-libtool:
clean-libtool:
-rm -rf .libs _libs
- -rm -rf sample/.libs sample/_libs
-rm -rf test/.libs test/_libs
distclean-libtool:
@@ -2485,8 +2326,6 @@ clean-generic:
distclean-generic:
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
- -rm -f sample/$(DEPDIR)/$(am__dirstamp)
- -rm -f sample/$(am__dirstamp)
-rm -f test/$(DEPDIR)/$(am__dirstamp)
-rm -f test/$(am__dirstamp)
-test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
@@ -2502,7 +2341,7 @@ clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \
distclean: distclean-am
-rm -f $(am__CONFIG_DISTCLEAN_FILES)
- -rm -rf $(DEPDIR) ./$(DEPDIR) sample/$(DEPDIR) test/$(DEPDIR)
+ -rm -rf $(DEPDIR) ./$(DEPDIR) test/$(DEPDIR)
-rm -f Makefile
distclean-am: clean-am distclean-compile distclean-generic \
distclean-hdr distclean-libtool distclean-tags
@@ -2551,7 +2390,7 @@ installcheck-am:
maintainer-clean: maintainer-clean-am
-rm -f $(am__CONFIG_DISTCLEAN_FILES)
-rm -rf $(top_srcdir)/autom4te.cache
- -rm -rf $(DEPDIR) ./$(DEPDIR) sample/$(DEPDIR) test/$(DEPDIR)
+ -rm -rf $(DEPDIR) ./$(DEPDIR) test/$(DEPDIR)
-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic
@@ -2601,8 +2440,6 @@ uninstall-am: uninstall-dist_binSCRIPTS uninstall-includeHEADERS \
.PRECIOUS: Makefile
-$(SAMPLES) : libevent.la
-
test/test-script.sh: test/test.sh
cp $(top_srcdir)/test/test.sh $@
diff --git a/contrib/ntp/sntp/libevent/sample/dns-example.c b/contrib/ntp/sntp/libevent/sample/dns-example.c
deleted file mode 100644
index 15e48ce..0000000
--- a/contrib/ntp/sntp/libevent/sample/dns-example.c
+++ /dev/null
@@ -1,248 +0,0 @@
-/*
- This example code shows how to use the high-level, low-level, and
- server-level interfaces of evdns.
-
- XXX It's pretty ugly and should probably be cleaned up.
- */
-
-#include <event2/event-config.h>
-
-/* Compatibility for possible missing IPv6 declarations */
-#include "../ipv6-internal.h"
-
-#include <sys/types.h>
-
-#ifdef _WIN32
-#include <winsock2.h>
-#include <ws2tcpip.h>
-#else
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <arpa/inet.h>
-#endif
-
-#include <event2/event.h>
-#include <event2/dns.h>
-#include <event2/dns_struct.h>
-#include <event2/util.h>
-
-#ifdef EVENT__HAVE_NETINET_IN6_H
-#include <netinet/in6.h>
-#endif
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#define u32 ev_uint32_t
-#define u8 ev_uint8_t
-
-static const char *
-debug_ntoa(u32 address)
-{
- static char buf[32];
- u32 a = ntohl(address);
- evutil_snprintf(buf, sizeof(buf), "%d.%d.%d.%d",
- (int)(u8)((a>>24)&0xff),
- (int)(u8)((a>>16)&0xff),
- (int)(u8)((a>>8 )&0xff),
- (int)(u8)((a )&0xff));
- return buf;
-}
-
-static void
-main_callback(int result, char type, int count, int ttl,
- void *addrs, void *orig) {
- char *n = (char*)orig;
- int i;
- for (i = 0; i < count; ++i) {
- if (type == DNS_IPv4_A) {
- printf("%s: %s\n", n, debug_ntoa(((u32*)addrs)[i]));
- } else if (type == DNS_PTR) {
- printf("%s: %s\n", n, ((char**)addrs)[i]);
- }
- }
- if (!count) {
- printf("%s: No answer (%d)\n", n, result);
- }
- fflush(stdout);
-}
-
-static void
-gai_callback(int err, struct evutil_addrinfo *ai, void *arg)
-{
- const char *name = arg;
- int i;
- if (err) {
- printf("%s: %s\n", name, evutil_gai_strerror(err));
- }
- if (ai && ai->ai_canonname)
- printf(" %s ==> %s\n", name, ai->ai_canonname);
- for (i=0; ai; ai = ai->ai_next, ++i) {
- char buf[128];
- if (ai->ai_family == PF_INET) {
- struct sockaddr_in *sin =
- (struct sockaddr_in*)ai->ai_addr;
- evutil_inet_ntop(AF_INET, &sin->sin_addr, buf,
- sizeof(buf));
- printf("[%d] %s: %s\n",i,name,buf);
- } else {
- struct sockaddr_in6 *sin6 =
- (struct sockaddr_in6*)ai->ai_addr;
- evutil_inet_ntop(AF_INET6, &sin6->sin6_addr, buf,
- sizeof(buf));
- printf("[%d] %s: %s\n",i,name,buf);
- }
- }
-}
-
-static void
-evdns_server_callback(struct evdns_server_request *req, void *data)
-{
- int i, r;
- (void)data;
- /* dummy; give 192.168.11.11 as an answer for all A questions,
- * give foo.bar.example.com as an answer for all PTR questions. */
- for (i = 0; i < req->nquestions; ++i) {
- u32 ans = htonl(0xc0a80b0bUL);
- if (req->questions[i]->type == EVDNS_TYPE_A &&
- req->questions[i]->dns_question_class == EVDNS_CLASS_INET) {
- printf(" -- replying for %s (A)\n", req->questions[i]->name);
- r = evdns_server_request_add_a_reply(req, req->questions[i]->name,
- 1, &ans, 10);
- if (r<0)
- printf("eeep, didn't work.\n");
- } else if (req->questions[i]->type == EVDNS_TYPE_PTR &&
- req->questions[i]->dns_question_class == EVDNS_CLASS_INET) {
- printf(" -- replying for %s (PTR)\n", req->questions[i]->name);
- r = evdns_server_request_add_ptr_reply(req, NULL, req->questions[i]->name,
- "foo.bar.example.com", 10);
- if (r<0)
- printf("ugh, no luck");
- } else {
- printf(" -- skipping %s [%d %d]\n", req->questions[i]->name,
- req->questions[i]->type, req->questions[i]->dns_question_class);
- }
- }
-
- r = evdns_server_request_respond(req, 0);
- if (r<0)
- printf("eeek, couldn't send reply.\n");
-}
-
-static int verbose = 0;
-
-static void
-logfn(int is_warn, const char *msg) {
- if (!is_warn && !verbose)
- return;
- fprintf(stderr, "%s: %s\n", is_warn?"WARN":"INFO", msg);
-}
-
-int
-main(int c, char **v) {
- int idx;
- int reverse = 0, servertest = 0, use_getaddrinfo = 0;
- struct event_base *event_base = NULL;
- struct evdns_base *evdns_base = NULL;
- const char *resolv_conf = NULL;
- if (c<2) {
- fprintf(stderr, "syntax: %s [-x] [-v] [-c resolv.conf] hostname\n", v[0]);
- fprintf(stderr, "syntax: %s [-servertest]\n", v[0]);
- return 1;
- }
- idx = 1;
- while (idx < c && v[idx][0] == '-') {
- if (!strcmp(v[idx], "-x"))
- reverse = 1;
- else if (!strcmp(v[idx], "-v"))
- verbose = 1;
- else if (!strcmp(v[idx], "-g"))
- use_getaddrinfo = 1;
- else if (!strcmp(v[idx], "-servertest"))
- servertest = 1;
- else if (!strcmp(v[idx], "-c")) {
- if (idx + 1 < c)
- resolv_conf = v[++idx];
- else
- fprintf(stderr, "-c needs an argument\n");
- } else
- fprintf(stderr, "Unknown option %s\n", v[idx]);
- ++idx;
- }
-
-#ifdef _WIN32
- {
- WSADATA WSAData;
- WSAStartup(0x101, &WSAData);
- }
-#endif
-
- event_base = event_base_new();
- evdns_base = evdns_base_new(event_base, EVDNS_BASE_DISABLE_WHEN_INACTIVE);
- evdns_set_log_fn(logfn);
-
- if (servertest) {
- evutil_socket_t sock;
- struct sockaddr_in my_addr;
- sock = socket(PF_INET, SOCK_DGRAM, 0);
- if (sock == -1) {
- perror("socket");
- exit(1);
- }
- evutil_make_socket_nonblocking(sock);
- my_addr.sin_family = AF_INET;
- my_addr.sin_port = htons(10053);
- my_addr.sin_addr.s_addr = INADDR_ANY;
- if (bind(sock, (struct sockaddr*)&my_addr, sizeof(my_addr))<0) {
- perror("bind");
- exit(1);
- }
- evdns_add_server_port_with_base(event_base, sock, 0, evdns_server_callback, NULL);
- }
- if (idx < c) {
- int res;
-#ifdef _WIN32
- if (resolv_conf == NULL)
- res = evdns_base_config_windows_nameservers(evdns_base);
- else
-#endif
- res = evdns_base_resolv_conf_parse(evdns_base,
- DNS_OPTION_NAMESERVERS,
- resolv_conf ? resolv_conf : "/etc/resolv.conf");
-
- if (res < 0) {
- fprintf(stderr, "Couldn't configure nameservers");
- return 1;
- }
- }
-
- printf("EVUTIL_AI_CANONNAME in example = %d\n", EVUTIL_AI_CANONNAME);
- for (; idx < c; ++idx) {
- if (reverse) {
- struct in_addr addr;
- if (evutil_inet_pton(AF_INET, v[idx], &addr)!=1) {
- fprintf(stderr, "Skipping non-IP %s\n", v[idx]);
- continue;
- }
- fprintf(stderr, "resolving %s...\n",v[idx]);
- evdns_base_resolve_reverse(evdns_base, &addr, 0, main_callback, v[idx]);
- } else if (use_getaddrinfo) {
- struct evutil_addrinfo hints;
- memset(&hints, 0, sizeof(hints));
- hints.ai_family = PF_UNSPEC;
- hints.ai_protocol = IPPROTO_TCP;
- hints.ai_flags = EVUTIL_AI_CANONNAME;
- fprintf(stderr, "resolving (fwd) %s...\n",v[idx]);
- evdns_getaddrinfo(evdns_base, v[idx], NULL, &hints,
- gai_callback, v[idx]);
- } else {
- fprintf(stderr, "resolving (fwd) %s...\n",v[idx]);
- evdns_base_resolve_ipv4(evdns_base, v[idx], 0, main_callback, v[idx]);
- }
- }
- fflush(stdout);
- event_base_dispatch(event_base);
- return 0;
-}
-
diff --git a/contrib/ntp/sntp/libevent/sample/event-read-fifo.c b/contrib/ntp/sntp/libevent/sample/event-read-fifo.c
deleted file mode 100644
index 27b0b53..0000000
--- a/contrib/ntp/sntp/libevent/sample/event-read-fifo.c
+++ /dev/null
@@ -1,162 +0,0 @@
-/*
- * This sample code shows how to use Libevent to read from a named pipe.
- * XXX This code could make better use of the Libevent interfaces.
- *
- * XXX This does not work on Windows; ignore everything inside the _WIN32 block.
- *
- * On UNIX, compile with:
- * cc -I/usr/local/include -o event-read-fifo event-read-fifo.c \
- * -L/usr/local/lib -levent
- */
-
-#include <event2/event-config.h>
-
-#include <sys/types.h>
-#include <sys/stat.h>
-#ifndef _WIN32
-#include <sys/queue.h>
-#include <unistd.h>
-#include <sys/time.h>
-#include <signal.h>
-#else
-#include <winsock2.h>
-#include <windows.h>
-#endif
-#include <fcntl.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <errno.h>
-
-#include <event2/event.h>
-
-static void
-fifo_read(evutil_socket_t fd, short event, void *arg)
-{
- char buf[255];
- int len;
- struct event *ev = arg;
-#ifdef _WIN32
- DWORD dwBytesRead;
-#endif
-
- fprintf(stderr, "fifo_read called with fd: %d, event: %d, arg: %p\n",
- (int)fd, event, arg);
-#ifdef _WIN32
- len = ReadFile((HANDLE)fd, buf, sizeof(buf) - 1, &dwBytesRead, NULL);
-
- /* Check for end of file. */
- if (len && dwBytesRead == 0) {
- fprintf(stderr, "End Of File");
- event_del(ev);
- return;
- }
-
- buf[dwBytesRead] = '\0';
-#else
- len = read(fd, buf, sizeof(buf) - 1);
-
- if (len <= 0) {
- if (len == -1)
- perror("read");
- else if (len == 0)
- fprintf(stderr, "Connection closed\n");
- event_del(ev);
- event_base_loopbreak(event_get_base(ev));
- return;
- }
-
- buf[len] = '\0';
-#endif
- fprintf(stdout, "Read: %s\n", buf);
-}
-
-/* On Unix, cleanup event.fifo if SIGINT is received. */
-#ifndef _WIN32
-static void
-signal_cb(evutil_socket_t fd, short event, void *arg)
-{
- struct event_base *base = arg;
- event_base_loopbreak(base);
-}
-#endif
-
-int
-main(int argc, char **argv)
-{
- struct event *evfifo;
- struct event_base* base;
-#ifdef _WIN32
- HANDLE socket;
- /* Open a file. */
- socket = CreateFileA("test.txt", /* open File */
- GENERIC_READ, /* open for reading */
- 0, /* do not share */
- NULL, /* no security */
- OPEN_EXISTING, /* existing file only */
- FILE_ATTRIBUTE_NORMAL, /* normal file */
- NULL); /* no attr. template */
-
- if (socket == INVALID_HANDLE_VALUE)
- return 1;
-
-#else
- struct event *signal_int;
- struct stat st;
- const char *fifo = "event.fifo";
- int socket;
-
- if (lstat(fifo, &st) == 0) {
- if ((st.st_mode & S_IFMT) == S_IFREG) {
- errno = EEXIST;
- perror("lstat");
- exit(1);
- }
- }
-
- unlink(fifo);
- if (mkfifo(fifo, 0600) == -1) {
- perror("mkfifo");
- exit(1);
- }
-
- socket = open(fifo, O_RDONLY | O_NONBLOCK, 0);
-
- if (socket == -1) {
- perror("open");
- exit(1);
- }
-
- fprintf(stderr, "Write data to %s\n", fifo);
-#endif
- /* Initalize the event library */
- base = event_base_new();
-
- /* Initalize one event */
-#ifdef _WIN32
- evfifo = event_new(base, (evutil_socket_t)socket, EV_READ|EV_PERSIST, fifo_read,
- event_self_cbarg());
-#else
- /* catch SIGINT so that event.fifo can be cleaned up */
- signal_int = evsignal_new(base, SIGINT, signal_cb, base);
- event_add(signal_int, NULL);
-
- evfifo = event_new(base, socket, EV_READ|EV_PERSIST, fifo_read,
- event_self_cbarg());
-#endif
-
- /* Add it to the active events, without a timeout */
- event_add(evfifo, NULL);
-
- event_base_dispatch(base);
- event_base_free(base);
-#ifdef _WIN32
- CloseHandle(socket);
-#else
- close(socket);
- unlink(fifo);
-#endif
- libevent_global_shutdown();
- return (0);
-}
-
diff --git a/contrib/ntp/sntp/libevent/sample/hello-world.c b/contrib/ntp/sntp/libevent/sample/hello-world.c
deleted file mode 100644
index d3cf058..0000000
--- a/contrib/ntp/sntp/libevent/sample/hello-world.c
+++ /dev/null
@@ -1,141 +0,0 @@
-/*
- This exmple program provides a trivial server program that listens for TCP
- connections on port 9995. When they arrive, it writes a short message to
- each client connection, and closes each connection once it is flushed.
-
- Where possible, it exits cleanly in response to a SIGINT (ctrl-c).
-*/
-
-
-#include <string.h>
-#include <errno.h>
-#include <stdio.h>
-#include <signal.h>
-#ifndef _WIN32
-#include <netinet/in.h>
-# ifdef _XOPEN_SOURCE_EXTENDED
-# include <arpa/inet.h>
-# endif
-#include <sys/socket.h>
-#endif
-
-#include <event2/bufferevent.h>
-#include <event2/buffer.h>
-#include <event2/listener.h>
-#include <event2/util.h>
-#include <event2/event.h>
-
-static const char MESSAGE[] = "Hello, World!\n";
-
-static const int PORT = 9995;
-
-static void listener_cb(struct evconnlistener *, evutil_socket_t,
- struct sockaddr *, int socklen, void *);
-static void conn_writecb(struct bufferevent *, void *);
-static void conn_eventcb(struct bufferevent *, short, void *);
-static void signal_cb(evutil_socket_t, short, void *);
-
-int
-main(int argc, char **argv)
-{
- struct event_base *base;
- struct evconnlistener *listener;
- struct event *signal_event;
-
- struct sockaddr_in sin;
-#ifdef _WIN32
- WSADATA wsa_data;
- WSAStartup(0x0201, &wsa_data);
-#endif
-
- base = event_base_new();
- if (!base) {
- fprintf(stderr, "Could not initialize libevent!\n");
- return 1;
- }
-
- memset(&sin, 0, sizeof(sin));
- sin.sin_family = AF_INET;
- sin.sin_port = htons(PORT);
-
- listener = evconnlistener_new_bind(base, listener_cb, (void *)base,
- LEV_OPT_REUSEABLE|LEV_OPT_CLOSE_ON_FREE, -1,
- (struct sockaddr*)&sin,
- sizeof(sin));
-
- if (!listener) {
- fprintf(stderr, "Could not create a listener!\n");
- return 1;
- }
-
- signal_event = evsignal_new(base, SIGINT, signal_cb, (void *)base);
-
- if (!signal_event || event_add(signal_event, NULL)<0) {
- fprintf(stderr, "Could not create/add a signal event!\n");
- return 1;
- }
-
- event_base_dispatch(base);
-
- evconnlistener_free(listener);
- event_free(signal_event);
- event_base_free(base);
-
- printf("done\n");
- return 0;
-}
-
-static void
-listener_cb(struct evconnlistener *listener, evutil_socket_t fd,
- struct sockaddr *sa, int socklen, void *user_data)
-{
- struct event_base *base = user_data;
- struct bufferevent *bev;
-
- bev = bufferevent_socket_new(base, fd, BEV_OPT_CLOSE_ON_FREE);
- if (!bev) {
- fprintf(stderr, "Error constructing bufferevent!");
- event_base_loopbreak(base);
- return;
- }
- bufferevent_setcb(bev, NULL, conn_writecb, conn_eventcb, NULL);
- bufferevent_enable(bev, EV_WRITE);
- bufferevent_disable(bev, EV_READ);
-
- bufferevent_write(bev, MESSAGE, strlen(MESSAGE));
-}
-
-static void
-conn_writecb(struct bufferevent *bev, void *user_data)
-{
- struct evbuffer *output = bufferevent_get_output(bev);
- if (evbuffer_get_length(output) == 0) {
- printf("flushed answer\n");
- bufferevent_free(bev);
- }
-}
-
-static void
-conn_eventcb(struct bufferevent *bev, short events, void *user_data)
-{
- if (events & BEV_EVENT_EOF) {
- printf("Connection closed.\n");
- } else if (events & BEV_EVENT_ERROR) {
- printf("Got an error on the connection: %s\n",
- strerror(errno));/*XXX win32*/
- }
- /* None of the other events can happen here, since we haven't enabled
- * timeouts */
- bufferevent_free(bev);
-}
-
-static void
-signal_cb(evutil_socket_t sig, short events, void *user_data)
-{
- struct event_base *base = user_data;
- struct timeval delay = { 2, 0 };
-
- printf("Caught an interrupt signal; exiting cleanly in two seconds.\n");
-
- event_base_loopexit(base, &delay);
-}
diff --git a/contrib/ntp/sntp/libevent/sample/hostcheck.c b/contrib/ntp/sntp/libevent/sample/hostcheck.c
deleted file mode 100644
index 5070936..0000000
--- a/contrib/ntp/sntp/libevent/sample/hostcheck.c
+++ /dev/null
@@ -1,217 +0,0 @@
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-/* This file is an amalgamation of hostcheck.c and most of rawstr.c
- from cURL. The contents of the COPYING file mentioned above are:
-
-COPYRIGHT AND PERMISSION NOTICE
-
-Copyright (c) 1996 - 2013, Daniel Stenberg, <daniel@haxx.se>.
-
-All rights reserved.
-
-Permission to use, copy, modify, and distribute this software for any purpose
-with or without fee is hereby granted, provided that the above copyright
-notice and this permission notice appear in all copies.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN
-NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
-DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
-OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE
-OR OTHER DEALINGS IN THE SOFTWARE.
-
-Except as contained in this notice, the name of a copyright holder shall not
-be used in advertising or otherwise to promote the sale, use or other dealings
-in this Software without prior written authorization of the copyright holder.
-*/
-
-#include "hostcheck.h"
-#include <string.h>
-
-/* Portable, consistent toupper (remember EBCDIC). Do not use toupper() because
- its behavior is altered by the current locale. */
-static char Curl_raw_toupper(char in)
-{
- switch (in) {
- case 'a':
- return 'A';
- case 'b':
- return 'B';
- case 'c':
- return 'C';
- case 'd':
- return 'D';
- case 'e':
- return 'E';
- case 'f':
- return 'F';
- case 'g':
- return 'G';
- case 'h':
- return 'H';
- case 'i':
- return 'I';
- case 'j':
- return 'J';
- case 'k':
- return 'K';
- case 'l':
- return 'L';
- case 'm':
- return 'M';
- case 'n':
- return 'N';
- case 'o':
- return 'O';
- case 'p':
- return 'P';
- case 'q':
- return 'Q';
- case 'r':
- return 'R';
- case 's':
- return 'S';
- case 't':
- return 'T';
- case 'u':
- return 'U';
- case 'v':
- return 'V';
- case 'w':
- return 'W';
- case 'x':
- return 'X';
- case 'y':
- return 'Y';
- case 'z':
- return 'Z';
- }
- return in;
-}
-
-/*
- * Curl_raw_equal() is for doing "raw" case insensitive strings. This is meant
- * to be locale independent and only compare strings we know are safe for
- * this. See http://daniel.haxx.se/blog/2008/10/15/strcasecmp-in-turkish/ for
- * some further explanation to why this function is necessary.
- *
- * The function is capable of comparing a-z case insensitively even for
- * non-ascii.
- */
-
-static int Curl_raw_equal(const char *first, const char *second)
-{
- while(*first && *second) {
- if(Curl_raw_toupper(*first) != Curl_raw_toupper(*second))
- /* get out of the loop as soon as they don't match */
- break;
- first++;
- second++;
- }
- /* we do the comparison here (possibly again), just to make sure that if the
- loop above is skipped because one of the strings reached zero, we must not
- return this as a successful match */
- return (Curl_raw_toupper(*first) == Curl_raw_toupper(*second));
-}
-
-static int Curl_raw_nequal(const char *first, const char *second, size_t max)
-{
- while(*first && *second && max) {
- if(Curl_raw_toupper(*first) != Curl_raw_toupper(*second)) {
- break;
- }
- max--;
- first++;
- second++;
- }
- if(0 == max)
- return 1; /* they are equal this far */
-
- return Curl_raw_toupper(*first) == Curl_raw_toupper(*second);
-}
-
-/*
- * Match a hostname against a wildcard pattern.
- * E.g.
- * "foo.host.com" matches "*.host.com".
- *
- * We use the matching rule described in RFC6125, section 6.4.3.
- * http://tools.ietf.org/html/rfc6125#section-6.4.3
- */
-
-static int hostmatch(const char *hostname, const char *pattern)
-{
- const char *pattern_label_end, *pattern_wildcard, *hostname_label_end;
- int wildcard_enabled;
- size_t prefixlen, suffixlen;
- pattern_wildcard = strchr(pattern, '*');
- if(pattern_wildcard == NULL)
- return Curl_raw_equal(pattern, hostname) ?
- CURL_HOST_MATCH : CURL_HOST_NOMATCH;
-
- /* We require at least 2 dots in pattern to avoid too wide wildcard
- match. */
- wildcard_enabled = 1;
- pattern_label_end = strchr(pattern, '.');
- if(pattern_label_end == NULL || strchr(pattern_label_end+1, '.') == NULL ||
- pattern_wildcard > pattern_label_end ||
- Curl_raw_nequal(pattern, "xn--", 4)) {
- wildcard_enabled = 0;
- }
- if(!wildcard_enabled)
- return Curl_raw_equal(pattern, hostname) ?
- CURL_HOST_MATCH : CURL_HOST_NOMATCH;
-
- hostname_label_end = strchr(hostname, '.');
- if(hostname_label_end == NULL ||
- !Curl_raw_equal(pattern_label_end, hostname_label_end))
- return CURL_HOST_NOMATCH;
-
- /* The wildcard must match at least one character, so the left-most
- label of the hostname is at least as large as the left-most label
- of the pattern. */
- if(hostname_label_end - hostname < pattern_label_end - pattern)
- return CURL_HOST_NOMATCH;
-
- prefixlen = pattern_wildcard - pattern;
- suffixlen = pattern_label_end - (pattern_wildcard+1);
- return Curl_raw_nequal(pattern, hostname, prefixlen) &&
- Curl_raw_nequal(pattern_wildcard+1, hostname_label_end - suffixlen,
- suffixlen) ?
- CURL_HOST_MATCH : CURL_HOST_NOMATCH;
-}
-
-int Curl_cert_hostcheck(const char *match_pattern, const char *hostname)
-{
- if(!match_pattern || !*match_pattern ||
- !hostname || !*hostname) /* sanity check */
- return 0;
-
- if(Curl_raw_equal(hostname, match_pattern)) /* trivial case */
- return 1;
-
- if(hostmatch(hostname,match_pattern) == CURL_HOST_MATCH)
- return 1;
- return 0;
-}
diff --git a/contrib/ntp/sntp/libevent/sample/hostcheck.h b/contrib/ntp/sntp/libevent/sample/hostcheck.h
deleted file mode 100644
index f40bc43..0000000
--- a/contrib/ntp/sntp/libevent/sample/hostcheck.h
+++ /dev/null
@@ -1,30 +0,0 @@
-#ifndef HEADER_CURL_HOSTCHECK_H
-#define HEADER_CURL_HOSTCHECK_H
-/***************************************************************************
- * _ _ ____ _
- * Project ___| | | | _ \| |
- * / __| | | | |_) | |
- * | (__| |_| | _ <| |___
- * \___|\___/|_| \_\_____|
- *
- * Copyright (C) 1998 - 2012, Daniel Stenberg, <daniel@haxx.se>, et al.
- *
- * This software is licensed as described in the file COPYING, which
- * you should have received as part of this distribution. The terms
- * are also available at http://curl.haxx.se/docs/copyright.html.
- *
- * You may opt to use, copy, modify, merge, publish, distribute and/or sell
- * copies of the Software, and permit persons to whom the Software is
- * furnished to do so, under the terms of the COPYING file.
- *
- * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
- * KIND, either express or implied.
- *
- ***************************************************************************/
-
-#define CURL_HOST_NOMATCH 0
-#define CURL_HOST_MATCH 1
-int Curl_cert_hostcheck(const char *match_pattern, const char *hostname);
-
-#endif /* HEADER_CURL_HOSTCHECK_H */
-
diff --git a/contrib/ntp/sntp/libevent/sample/http-server.c b/contrib/ntp/sntp/libevent/sample/http-server.c
deleted file mode 100644
index cbb9c91..0000000
--- a/contrib/ntp/sntp/libevent/sample/http-server.c
+++ /dev/null
@@ -1,418 +0,0 @@
-/*
- A trivial static http webserver using Libevent's evhttp.
-
- This is not the best code in the world, and it does some fairly stupid stuff
- that you would never want to do in a production webserver. Caveat hackor!
-
- */
-
-/* Compatibility for possible missing IPv6 declarations */
-#include "../util-internal.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include <sys/types.h>
-#include <sys/stat.h>
-
-#ifdef _WIN32
-#include <winsock2.h>
-#include <ws2tcpip.h>
-#include <windows.h>
-#include <io.h>
-#include <fcntl.h>
-#ifndef S_ISDIR
-#define S_ISDIR(x) (((x) & S_IFMT) == S_IFDIR)
-#endif
-#else
-#include <sys/stat.h>
-#include <sys/socket.h>
-#include <signal.h>
-#include <fcntl.h>
-#include <unistd.h>
-#include <dirent.h>
-#endif
-
-#include <event2/event.h>
-#include <event2/http.h>
-#include <event2/buffer.h>
-#include <event2/util.h>
-#include <event2/keyvalq_struct.h>
-
-#ifdef EVENT__HAVE_NETINET_IN_H
-#include <netinet/in.h>
-# ifdef _XOPEN_SOURCE_EXTENDED
-# include <arpa/inet.h>
-# endif
-#endif
-
-#ifdef _WIN32
-#ifndef stat
-#define stat _stat
-#endif
-#ifndef fstat
-#define fstat _fstat
-#endif
-#ifndef open
-#define open _open
-#endif
-#ifndef close
-#define close _close
-#endif
-#ifndef O_RDONLY
-#define O_RDONLY _O_RDONLY
-#endif
-#endif
-
-char uri_root[512];
-
-static const struct table_entry {
- const char *extension;
- const char *content_type;
-} content_type_table[] = {
- { "txt", "text/plain" },
- { "c", "text/plain" },
- { "h", "text/plain" },
- { "html", "text/html" },
- { "htm", "text/htm" },
- { "css", "text/css" },
- { "gif", "image/gif" },
- { "jpg", "image/jpeg" },
- { "jpeg", "image/jpeg" },
- { "png", "image/png" },
- { "pdf", "application/pdf" },
- { "ps", "application/postsript" },
- { NULL, NULL },
-};
-
-/* Try to guess a good content-type for 'path' */
-static const char *
-guess_content_type(const char *path)
-{
- const char *last_period, *extension;
- const struct table_entry *ent;
- last_period = strrchr(path, '.');
- if (!last_period || strchr(last_period, '/'))
- goto not_found; /* no exension */
- extension = last_period + 1;
- for (ent = &content_type_table[0]; ent->extension; ++ent) {
- if (!evutil_ascii_strcasecmp(ent->extension, extension))
- return ent->content_type;
- }
-
-not_found:
- return "application/misc";
-}
-
-/* Callback used for the /dump URI, and for every non-GET request:
- * dumps all information to stdout and gives back a trivial 200 ok */
-static void
-dump_request_cb(struct evhttp_request *req, void *arg)
-{
- const char *cmdtype;
- struct evkeyvalq *headers;
- struct evkeyval *header;
- struct evbuffer *buf;
-
- switch (evhttp_request_get_command(req)) {
- case EVHTTP_REQ_GET: cmdtype = "GET"; break;
- case EVHTTP_REQ_POST: cmdtype = "POST"; break;
- case EVHTTP_REQ_HEAD: cmdtype = "HEAD"; break;
- case EVHTTP_REQ_PUT: cmdtype = "PUT"; break;
- case EVHTTP_REQ_DELETE: cmdtype = "DELETE"; break;
- case EVHTTP_REQ_OPTIONS: cmdtype = "OPTIONS"; break;
- case EVHTTP_REQ_TRACE: cmdtype = "TRACE"; break;
- case EVHTTP_REQ_CONNECT: cmdtype = "CONNECT"; break;
- case EVHTTP_REQ_PATCH: cmdtype = "PATCH"; break;
- default: cmdtype = "unknown"; break;
- }
-
- printf("Received a %s request for %s\nHeaders:\n",
- cmdtype, evhttp_request_get_uri(req));
-
- headers = evhttp_request_get_input_headers(req);
- for (header = headers->tqh_first; header;
- header = header->next.tqe_next) {
- printf(" %s: %s\n", header->key, header->value);
- }
-
- buf = evhttp_request_get_input_buffer(req);
- puts("Input data: <<<");
- while (evbuffer_get_length(buf)) {
- int n;
- char cbuf[128];
- n = evbuffer_remove(buf, cbuf, sizeof(cbuf));
- if (n > 0)
- (void) fwrite(cbuf, 1, n, stdout);
- }
- puts(">>>");
-
- evhttp_send_reply(req, 200, "OK", NULL);
-}
-
-/* This callback gets invoked when we get any http request that doesn't match
- * any other callback. Like any evhttp server callback, it has a simple job:
- * it must eventually call evhttp_send_error() or evhttp_send_reply().
- */
-static void
-send_document_cb(struct evhttp_request *req, void *arg)
-{
- struct evbuffer *evb = NULL;
- const char *docroot = arg;
- const char *uri = evhttp_request_get_uri(req);
- struct evhttp_uri *decoded = NULL;
- const char *path;
- char *decoded_path;
- char *whole_path = NULL;
- size_t len;
- int fd = -1;
- struct stat st;
-
- if (evhttp_request_get_command(req) != EVHTTP_REQ_GET) {
- dump_request_cb(req, arg);
- return;
- }
-
- printf("Got a GET request for <%s>\n", uri);
-
- /* Decode the URI */
- decoded = evhttp_uri_parse(uri);
- if (!decoded) {
- printf("It's not a good URI. Sending BADREQUEST\n");
- evhttp_send_error(req, HTTP_BADREQUEST, 0);
- return;
- }
-
- /* Let's see what path the user asked for. */
- path = evhttp_uri_get_path(decoded);
- if (!path) path = "/";
-
- /* We need to decode it, to see what path the user really wanted. */
- decoded_path = evhttp_uridecode(path, 0, NULL);
- if (decoded_path == NULL)
- goto err;
- /* Don't allow any ".."s in the path, to avoid exposing stuff outside
- * of the docroot. This test is both overzealous and underzealous:
- * it forbids aceptable paths like "/this/one..here", but it doesn't
- * do anything to prevent symlink following." */
- if (strstr(decoded_path, ".."))
- goto err;
-
- len = strlen(decoded_path)+strlen(docroot)+2;
- if (!(whole_path = malloc(len))) {
- perror("malloc");
- goto err;
- }
- evutil_snprintf(whole_path, len, "%s/%s", docroot, decoded_path);
-
- if (stat(whole_path, &st)<0) {
- goto err;
- }
-
- /* This holds the content we're sending. */
- evb = evbuffer_new();
-
- if (S_ISDIR(st.st_mode)) {
- /* If it's a directory, read the comments and make a little
- * index page */
-#ifdef _WIN32
- HANDLE d;
- WIN32_FIND_DATAA ent;
- char *pattern;
- size_t dirlen;
-#else
- DIR *d;
- struct dirent *ent;
-#endif
- const char *trailing_slash = "";
-
- if (!strlen(path) || path[strlen(path)-1] != '/')
- trailing_slash = "/";
-
-#ifdef _WIN32
- dirlen = strlen(whole_path);
- pattern = malloc(dirlen+3);
- memcpy(pattern, whole_path, dirlen);
- pattern[dirlen] = '\\';
- pattern[dirlen+1] = '*';
- pattern[dirlen+2] = '\0';
- d = FindFirstFileA(pattern, &ent);
- free(pattern);
- if (d == INVALID_HANDLE_VALUE)
- goto err;
-#else
- if (!(d = opendir(whole_path)))
- goto err;
-#endif
-
- evbuffer_add_printf(evb,
- "<!DOCTYPE html>\n"
- "<html>\n <head>\n"
- " <meta charset='utf-8'>\n"
- " <title>%s</title>\n"
- " <base href='%s%s'>\n"
- " </head>\n"
- " <body>\n"
- " <h1>%s</h1>\n"
- " <ul>\n",
- decoded_path, /* XXX html-escape this. */
- path, /* XXX html-escape this? */
- trailing_slash,
- decoded_path /* XXX html-escape this */);
-#ifdef _WIN32
- do {
- const char *name = ent.cFileName;
-#else
- while ((ent = readdir(d))) {
- const char *name = ent->d_name;
-#endif
- evbuffer_add_printf(evb,
- " <li><a href=\"%s\">%s</a>\n",
- name, name);/* XXX escape this */
-#ifdef _WIN32
- } while (FindNextFileA(d, &ent));
-#else
- }
-#endif
- evbuffer_add_printf(evb, "</ul></body></html>\n");
-#ifdef _WIN32
- FindClose(d);
-#else
- closedir(d);
-#endif
- evhttp_add_header(evhttp_request_get_output_headers(req),
- "Content-Type", "text/html");
- } else {
- /* Otherwise it's a file; add it to the buffer to get
- * sent via sendfile */
- const char *type = guess_content_type(decoded_path);
- if ((fd = open(whole_path, O_RDONLY)) < 0) {
- perror("open");
- goto err;
- }
-
- if (fstat(fd, &st)<0) {
- /* Make sure the length still matches, now that we
- * opened the file :/ */
- perror("fstat");
- goto err;
- }
- evhttp_add_header(evhttp_request_get_output_headers(req),
- "Content-Type", type);
- evbuffer_add_file(evb, fd, 0, st.st_size);
- }
-
- evhttp_send_reply(req, 200, "OK", evb);
- goto done;
-err:
- evhttp_send_error(req, 404, "Document was not found");
- if (fd>=0)
- close(fd);
-done:
- if (decoded)
- evhttp_uri_free(decoded);
- if (decoded_path)
- free(decoded_path);
- if (whole_path)
- free(whole_path);
- if (evb)
- evbuffer_free(evb);
-}
-
-static void
-syntax(void)
-{
- fprintf(stdout, "Syntax: http-server <docroot>\n");
-}
-
-int
-main(int argc, char **argv)
-{
- struct event_base *base;
- struct evhttp *http;
- struct evhttp_bound_socket *handle;
-
- unsigned short port = 0;
-#ifdef _WIN32
- WSADATA WSAData;
- WSAStartup(0x101, &WSAData);
-#else
- if (signal(SIGPIPE, SIG_IGN) == SIG_ERR)
- return (1);
-#endif
- if (argc < 2) {
- syntax();
- return 1;
- }
-
- base = event_base_new();
- if (!base) {
- fprintf(stderr, "Couldn't create an event_base: exiting\n");
- return 1;
- }
-
- /* Create a new evhttp object to handle requests. */
- http = evhttp_new(base);
- if (!http) {
- fprintf(stderr, "couldn't create evhttp. Exiting.\n");
- return 1;
- }
-
- /* The /dump URI will dump all requests to stdout and say 200 ok. */
- evhttp_set_cb(http, "/dump", dump_request_cb, NULL);
-
- /* We want to accept arbitrary requests, so we need to set a "generic"
- * cb. We can also add callbacks for specific paths. */
- evhttp_set_gencb(http, send_document_cb, argv[1]);
-
- /* Now we tell the evhttp what port to listen on */
- handle = evhttp_bind_socket_with_handle(http, "0.0.0.0", port);
- if (!handle) {
- fprintf(stderr, "couldn't bind to port %d. Exiting.\n",
- (int)port);
- return 1;
- }
-
- {
- /* Extract and display the address we're listening on. */
- struct sockaddr_storage ss;
- evutil_socket_t fd;
- ev_socklen_t socklen = sizeof(ss);
- char addrbuf[128];
- void *inaddr;
- const char *addr;
- int got_port = -1;
- fd = evhttp_bound_socket_get_fd(handle);
- memset(&ss, 0, sizeof(ss));
- if (getsockname(fd, (struct sockaddr *)&ss, &socklen)) {
- perror("getsockname() failed");
- return 1;
- }
- if (ss.ss_family == AF_INET) {
- got_port = ntohs(((struct sockaddr_in*)&ss)->sin_port);
- inaddr = &((struct sockaddr_in*)&ss)->sin_addr;
- } else if (ss.ss_family == AF_INET6) {
- got_port = ntohs(((struct sockaddr_in6*)&ss)->sin6_port);
- inaddr = &((struct sockaddr_in6*)&ss)->sin6_addr;
- } else {
- fprintf(stderr, "Weird address family %d\n",
- ss.ss_family);
- return 1;
- }
- addr = evutil_inet_ntop(ss.ss_family, inaddr, addrbuf,
- sizeof(addrbuf));
- if (addr) {
- printf("Listening on %s:%d\n", addr, got_port);
- evutil_snprintf(uri_root, sizeof(uri_root),
- "http://%s:%d",addr,got_port);
- } else {
- fprintf(stderr, "evutil_inet_ntop failed\n");
- return 1;
- }
- }
-
- event_base_dispatch(base);
-
- return 0;
-}
diff --git a/contrib/ntp/sntp/libevent/sample/https-client.c b/contrib/ntp/sntp/libevent/sample/https-client.c
deleted file mode 100644
index fbd5de8..0000000
--- a/contrib/ntp/sntp/libevent/sample/https-client.c
+++ /dev/null
@@ -1,439 +0,0 @@
-/*
- This is an example of how to hook up evhttp with bufferevent_ssl
-
- It just GETs an https URL given on the command-line and prints the response
- body to stdout.
-
- Actually, it also accepts plain http URLs to make it easy to compare http vs
- https code paths.
-
- Loosely based on le-proxy.c.
- */
-
-// Get rid of OSX 10.7 and greater deprecation warnings.
-#if defined(__APPLE__) && defined(__clang__)
-#pragma clang diagnostic ignored "-Wdeprecated-declarations"
-#endif
-
-#include <stdio.h>
-#include <assert.h>
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-
-#ifdef _WIN32
-#include <winsock2.h>
-#include <ws2tcpip.h>
-
-#define snprintf _snprintf
-#define strcasecmp _stricmp
-#else
-#include <sys/socket.h>
-#include <netinet/in.h>
-#endif
-
-#include <event2/bufferevent_ssl.h>
-#include <event2/bufferevent.h>
-#include <event2/buffer.h>
-#include <event2/listener.h>
-#include <event2/util.h>
-#include <event2/http.h>
-
-#include <openssl/ssl.h>
-#include <openssl/err.h>
-#include <openssl/rand.h>
-
-#include "openssl_hostname_validation.h"
-
-static struct event_base *base;
-static int ignore_cert = 0;
-
-static void
-http_request_done(struct evhttp_request *req, void *ctx)
-{
- char buffer[256];
- int nread;
-
- if (req == NULL) {
- /* If req is NULL, it means an error occurred, but
- * sadly we are mostly left guessing what the error
- * might have been. We'll do our best... */
- struct bufferevent *bev = (struct bufferevent *) ctx;
- unsigned long oslerr;
- int printed_err = 0;
- int errcode = EVUTIL_SOCKET_ERROR();
- fprintf(stderr, "some request failed - no idea which one though!\n");
- /* Print out the OpenSSL error queue that libevent
- * squirreled away for us, if any. */
- while ((oslerr = bufferevent_get_openssl_error(bev))) {
- ERR_error_string_n(oslerr, buffer, sizeof(buffer));
- fprintf(stderr, "%s\n", buffer);
- printed_err = 1;
- }
- /* If the OpenSSL error queue was empty, maybe it was a
- * socket error; let's try printing that. */
- if (! printed_err)
- fprintf(stderr, "socket error = %s (%d)\n",
- evutil_socket_error_to_string(errcode),
- errcode);
- return;
- }
-
- fprintf(stderr, "Response line: %d %s\n",
- evhttp_request_get_response_code(req),
- evhttp_request_get_response_code_line(req));
-
- while ((nread = evbuffer_remove(evhttp_request_get_input_buffer(req),
- buffer, sizeof(buffer)))
- > 0) {
- /* These are just arbitrary chunks of 256 bytes.
- * They are not lines, so we can't treat them as such. */
- fwrite(buffer, nread, 1, stdout);
- }
-}
-
-static void
-syntax(void)
-{
- fputs("Syntax:\n", stderr);
- fputs(" https-client -url <https-url> [-data data-file.bin] [-ignore-cert] [-retries num]\n", stderr);
- fputs("Example:\n", stderr);
- fputs(" https-client -url https://ip.appspot.com/\n", stderr);
-
- exit(1);
-}
-
-static void
-die(const char *msg)
-{
- fputs(msg, stderr);
- exit(1);
-}
-
-static void
-die_openssl(const char *func)
-{
- fprintf (stderr, "%s failed:\n", func);
-
- /* This is the OpenSSL function that prints the contents of the
- * error stack to the specified file handle. */
- ERR_print_errors_fp (stderr);
-
- exit(1);
-}
-
-/* See http://archives.seul.org/libevent/users/Jan-2013/msg00039.html */
-static int cert_verify_callback(X509_STORE_CTX *x509_ctx, void *arg)
-{
- char cert_str[256];
- const char *host = (const char *) arg;
- const char *res_str = "X509_verify_cert failed";
- HostnameValidationResult res = Error;
-
- /* This is the function that OpenSSL would call if we hadn't called
- * SSL_CTX_set_cert_verify_callback(). Therefore, we are "wrapping"
- * the default functionality, rather than replacing it. */
- int ok_so_far = 0;
-
- X509 *server_cert = NULL;
-
- if (ignore_cert) {
- return 1;
- }
-
- ok_so_far = X509_verify_cert(x509_ctx);
-
- server_cert = X509_STORE_CTX_get_current_cert(x509_ctx);
-
- if (ok_so_far) {
- res = validate_hostname(host, server_cert);
-
- switch (res) {
- case MatchFound:
- res_str = "MatchFound";
- break;
- case MatchNotFound:
- res_str = "MatchNotFound";
- break;
- case NoSANPresent:
- res_str = "NoSANPresent";
- break;
- case MalformedCertificate:
- res_str = "MalformedCertificate";
- break;
- case Error:
- res_str = "Error";
- break;
- default:
- res_str = "WTF!";
- break;
- }
- }
-
- X509_NAME_oneline(X509_get_subject_name (server_cert),
- cert_str, sizeof (cert_str));
-
- if (res == MatchFound) {
- printf("https server '%s' has this certificate, "
- "which looks good to me:\n%s\n",
- host, cert_str);
- return 1;
- } else {
- printf("Got '%s' for hostname '%s' and certificate:\n%s\n",
- res_str, host, cert_str);
- return 0;
- }
-}
-
-int
-main(int argc, char **argv)
-{
- int r;
-
- struct evhttp_uri *http_uri;
- const char *url = NULL, *data_file = NULL;
- const char *scheme, *host, *path, *query;
- char uri[256];
- int port;
- int retries = 0;
-
- SSL_CTX *ssl_ctx;
- SSL *ssl;
- struct bufferevent *bev;
- struct evhttp_connection *evcon;
- struct evhttp_request *req;
- struct evkeyvalq *output_headers;
- struct evbuffer * output_buffer;
-
- int i;
-
- for (i = 1; i < argc; i++) {
- if (!strcmp("-url", argv[i])) {
- if (i < argc - 1) {
- url = argv[i + 1];
- } else {
- syntax();
- }
- } else if (!strcmp("-ignore-cert", argv[i])) {
- ignore_cert = 1;
- } else if (!strcmp("-data", argv[i])) {
- if (i < argc - 1) {
- data_file = argv[i + 1];
- } else {
- syntax();
- }
- } else if (!strcmp("-retries", argv[i])) {
- if (i < argc - 1) {
- retries = atoi(argv[i + 1]);
- } else {
- syntax();
- }
- } else if (!strcmp("-help", argv[i])) {
- syntax();
- }
- }
-
- if (!url) {
- syntax();
- }
-
-#ifdef _WIN32
- {
- WORD wVersionRequested;
- WSADATA wsaData;
- int err;
-
- wVersionRequested = MAKEWORD(2, 2);
-
- err = WSAStartup(wVersionRequested, &wsaData);
- if (err != 0) {
- printf("WSAStartup failed with error: %d\n", err);
- return 1;
- }
- }
-#endif // _WIN32
-
- http_uri = evhttp_uri_parse(url);
- if (http_uri == NULL) {
- die("malformed url");
- }
-
- scheme = evhttp_uri_get_scheme(http_uri);
- if (scheme == NULL || (strcasecmp(scheme, "https") != 0 &&
- strcasecmp(scheme, "http") != 0)) {
- die("url must be http or https");
- }
-
- host = evhttp_uri_get_host(http_uri);
- if (host == NULL) {
- die("url must have a host");
- }
-
- port = evhttp_uri_get_port(http_uri);
- if (port == -1) {
- port = (strcasecmp(scheme, "http") == 0) ? 80 : 443;
- }
-
- path = evhttp_uri_get_path(http_uri);
- if (path == NULL) {
- path = "/";
- }
-
- query = evhttp_uri_get_query(http_uri);
- if (query == NULL) {
- snprintf(uri, sizeof(uri) - 1, "%s", path);
- } else {
- snprintf(uri, sizeof(uri) - 1, "%s?%s", path, query);
- }
- uri[sizeof(uri) - 1] = '\0';
-
- // Initialize OpenSSL
- SSL_library_init();
- ERR_load_crypto_strings();
- SSL_load_error_strings();
- OpenSSL_add_all_algorithms();
-
- /* This isn't strictly necessary... OpenSSL performs RAND_poll
- * automatically on first use of random number generator. */
- r = RAND_poll();
- if (r == 0) {
- die_openssl("RAND_poll");
- }
-
- /* Create a new OpenSSL context */
- ssl_ctx = SSL_CTX_new(SSLv23_method());
- if (!ssl_ctx)
- die_openssl("SSL_CTX_new");
-
- #ifndef _WIN32
- /* TODO: Add certificate loading on Windows as well */
-
- /* Attempt to use the system's trusted root certificates.
- * (This path is only valid for Debian-based systems.) */
- if (1 != SSL_CTX_load_verify_locations(ssl_ctx,
- "/etc/ssl/certs/ca-certificates.crt",
- NULL))
- die_openssl("SSL_CTX_load_verify_locations");
- /* Ask OpenSSL to verify the server certificate. Note that this
- * does NOT include verifying that the hostname is correct.
- * So, by itself, this means anyone with any legitimate
- * CA-issued certificate for any website, can impersonate any
- * other website in the world. This is not good. See "The
- * Most Dangerous Code in the World" article at
- * https://crypto.stanford.edu/~dabo/pubs/abstracts/ssl-client-bugs.html
- */
- SSL_CTX_set_verify(ssl_ctx, SSL_VERIFY_PEER, NULL);
- /* This is how we solve the problem mentioned in the previous
- * comment. We "wrap" OpenSSL's validation routine in our
- * own routine, which also validates the hostname by calling
- * the code provided by iSECPartners. Note that even though
- * the "Everything You've Always Wanted to Know About
- * Certificate Validation With OpenSSL (But Were Afraid to
- * Ask)" paper from iSECPartners says very explicitly not to
- * call SSL_CTX_set_cert_verify_callback (at the bottom of
- * page 2), what we're doing here is safe because our
- * cert_verify_callback() calls X509_verify_cert(), which is
- * OpenSSL's built-in routine which would have been called if
- * we hadn't set the callback. Therefore, we're just
- * "wrapping" OpenSSL's routine, not replacing it. */
- SSL_CTX_set_cert_verify_callback (ssl_ctx, cert_verify_callback,
- (void *) host);
- #endif // not _WIN32
-
- // Create event base
- base = event_base_new();
- if (!base) {
- perror("event_base_new()");
- return 1;
- }
-
- // Create OpenSSL bufferevent and stack evhttp on top of it
- ssl = SSL_new(ssl_ctx);
- if (ssl == NULL) {
- die_openssl("SSL_new()");
- }
-
- #ifdef SSL_CTRL_SET_TLSEXT_HOSTNAME
- // Set hostname for SNI extension
- SSL_set_tlsext_host_name(ssl, host);
- #endif
-
- if (strcasecmp(scheme, "http") == 0) {
- bev = bufferevent_socket_new(base, -1, BEV_OPT_CLOSE_ON_FREE);
- } else {
- bev = bufferevent_openssl_socket_new(base, -1, ssl,
- BUFFEREVENT_SSL_CONNECTING,
- BEV_OPT_CLOSE_ON_FREE|BEV_OPT_DEFER_CALLBACKS);
- }
-
- if (bev == NULL) {
- fprintf(stderr, "bufferevent_openssl_socket_new() failed\n");
- return 1;
- }
-
- bufferevent_openssl_set_allow_dirty_shutdown(bev, 1);
-
- // For simplicity, we let DNS resolution block. Everything else should be
- // asynchronous though.
- evcon = evhttp_connection_base_bufferevent_new(base, NULL, bev,
- host, port);
- if (evcon == NULL) {
- fprintf(stderr, "evhttp_connection_base_bufferevent_new() failed\n");
- return 1;
- }
-
- if (retries > 0) {
- evhttp_connection_set_retries(evcon, retries);
- }
-
- // Fire off the request
- req = evhttp_request_new(http_request_done, bev);
- if (req == NULL) {
- fprintf(stderr, "evhttp_request_new() failed\n");
- return 1;
- }
-
- output_headers = evhttp_request_get_output_headers(req);
- evhttp_add_header(output_headers, "Host", host);
- evhttp_add_header(output_headers, "Connection", "close");
-
- if (data_file) {
- /* NOTE: In production code, you'd probably want to use
- * evbuffer_add_file() or evbuffer_add_file_segment(), to
- * avoid needless copying. */
- FILE * f = fopen(data_file, "rb");
- char buf[1024];
- size_t s;
- size_t bytes = 0;
-
- if (!f) {
- syntax();
- }
-
- output_buffer = evhttp_request_get_output_buffer(req);
- while ((s = fread(buf, 1, sizeof(buf), f)) > 0) {
- evbuffer_add(output_buffer, buf, s);
- bytes += s;
- }
- evutil_snprintf(buf, sizeof(buf)-1, "%lu", (unsigned long)bytes);
- evhttp_add_header(output_headers, "Content-Length", buf);
- fclose(f);
- }
-
- r = evhttp_make_request(evcon, req, data_file ? EVHTTP_REQ_POST : EVHTTP_REQ_GET, uri);
- if (r != 0) {
- fprintf(stderr, "evhttp_make_request() failed\n");
- return 1;
- }
-
- event_base_dispatch(base);
-
- evhttp_connection_free(evcon);
- event_base_free(base);
-
-#ifdef _WIN32
- WSACleanup();
-#endif
-
- return 0;
-}
diff --git a/contrib/ntp/sntp/libevent/sample/include.am b/contrib/ntp/sntp/libevent/sample/include.am
deleted file mode 100644
index 75f87c7..0000000
--- a/contrib/ntp/sntp/libevent/sample/include.am
+++ /dev/null
@@ -1,53 +0,0 @@
-# sample/include.am for libevent
-# Copyright 2000-2007 Niels Provos
-# Copyright 2007-2012 Niels Provos and Nick Mathewson
-#
-# See LICENSE for copying information.
-
-SAMPLES = \
- sample/dns-example \
- sample/event-read-fifo \
- sample/hello-world \
- sample/http-server \
- sample/signal-test \
- sample/time-test
-
-if OPENSSL
-SAMPLES += sample/le-proxy
-sample_le_proxy_SOURCES = sample/le-proxy.c
-sample_le_proxy_LDADD = libevent.la libevent_openssl.la ${OPENSSL_LIBS} ${OPENSSL_LIBADD}
-sample_le_proxy_INCLUDES = $(OPENSSL_INCS)
-
-SAMPLES += sample/https-client
-sample_https_client_SOURCES = \
- sample/https-client.c \
- sample/hostcheck.c \
- sample/openssl_hostname_validation.c
-sample_https_client_LDADD = libevent.la libevent_openssl.la ${OPENSSL_LIBS} ${OPENSSL_LIBADD}
-sample_https_client_INCLUDES = $(OPENSSL_INCS)
-noinst_HEADERS += \
- sample/hostcheck.h \
- sample/openssl_hostname_validation.h
-endif
-
-if BUILD_SAMPLES
-noinst_PROGRAMS += $(SAMPLES)
-endif
-
-$(SAMPLES) : libevent.la
-
-sample_event_read_fifo_SOURCES = sample/event-read-fifo.c
-sample_event_read_fifo_LDADD = $(LIBEVENT_GC_SECTIONS) libevent.la
-sample_time_test_SOURCES = sample/time-test.c
-sample_time_test_LDADD = $(LIBEVENT_GC_SECTIONS) libevent.la
-sample_signal_test_SOURCES = sample/signal-test.c
-sample_signal_test_LDADD = $(LIBEVENT_GC_SECTIONS) libevent.la
-sample_dns_example_SOURCES = sample/dns-example.c
-sample_dns_example_LDADD = $(LIBEVENT_GC_SECTIONS) libevent.la
-sample_hello_world_SOURCES = sample/hello-world.c
-sample_hello_world_LDADD = $(LIBEVENT_GC_SECTIONS) libevent.la
-sample_http_server_SOURCES = sample/http-server.c
-sample_http_server_LDADD = $(LIBEVENT_GC_SECTIONS) libevent.la
-
-
-
diff --git a/contrib/ntp/sntp/libevent/sample/le-proxy.c b/contrib/ntp/sntp/libevent/sample/le-proxy.c
deleted file mode 100644
index 30e0a5f..0000000
--- a/contrib/ntp/sntp/libevent/sample/le-proxy.c
+++ /dev/null
@@ -1,288 +0,0 @@
-/*
- This example code shows how to write an (optionally encrypting) SSL proxy
- with Libevent's bufferevent layer.
-
- XXX It's a little ugly and should probably be cleaned up.
- */
-
-// Get rid of OSX 10.7 and greater deprecation warnings.
-#if defined(__APPLE__) && defined(__clang__)
-#pragma clang diagnostic ignored "-Wdeprecated-declarations"
-#endif
-
-#include <stdio.h>
-#include <assert.h>
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-
-#ifdef _WIN32
-#include <winsock2.h>
-#include <ws2tcpip.h>
-#else
-#include <sys/socket.h>
-#include <netinet/in.h>
-#endif
-
-#include <event2/bufferevent_ssl.h>
-#include <event2/bufferevent.h>
-#include <event2/buffer.h>
-#include <event2/listener.h>
-#include <event2/util.h>
-
-#include <openssl/ssl.h>
-#include <openssl/err.h>
-#include <openssl/rand.h>
-
-static struct event_base *base;
-static struct sockaddr_storage listen_on_addr;
-static struct sockaddr_storage connect_to_addr;
-static int connect_to_addrlen;
-static int use_wrapper = 1;
-
-static SSL_CTX *ssl_ctx = NULL;
-
-#define MAX_OUTPUT (512*1024)
-
-static void drained_writecb(struct bufferevent *bev, void *ctx);
-static void eventcb(struct bufferevent *bev, short what, void *ctx);
-
-static void
-readcb(struct bufferevent *bev, void *ctx)
-{
- struct bufferevent *partner = ctx;
- struct evbuffer *src, *dst;
- size_t len;
- src = bufferevent_get_input(bev);
- len = evbuffer_get_length(src);
- if (!partner) {
- evbuffer_drain(src, len);
- return;
- }
- dst = bufferevent_get_output(partner);
- evbuffer_add_buffer(dst, src);
-
- if (evbuffer_get_length(dst) >= MAX_OUTPUT) {
- /* We're giving the other side data faster than it can
- * pass it on. Stop reading here until we have drained the
- * other side to MAX_OUTPUT/2 bytes. */
- bufferevent_setcb(partner, readcb, drained_writecb,
- eventcb, bev);
- bufferevent_setwatermark(partner, EV_WRITE, MAX_OUTPUT/2,
- MAX_OUTPUT);
- bufferevent_disable(bev, EV_READ);
- }
-}
-
-static void
-drained_writecb(struct bufferevent *bev, void *ctx)
-{
- struct bufferevent *partner = ctx;
-
- /* We were choking the other side until we drained our outbuf a bit.
- * Now it seems drained. */
- bufferevent_setcb(bev, readcb, NULL, eventcb, partner);
- bufferevent_setwatermark(bev, EV_WRITE, 0, 0);
- if (partner)
- bufferevent_enable(partner, EV_READ);
-}
-
-static void
-close_on_finished_writecb(struct bufferevent *bev, void *ctx)
-{
- struct evbuffer *b = bufferevent_get_output(bev);
-
- if (evbuffer_get_length(b) == 0) {
- bufferevent_free(bev);
- }
-}
-
-static void
-eventcb(struct bufferevent *bev, short what, void *ctx)
-{
- struct bufferevent *partner = ctx;
-
- if (what & (BEV_EVENT_EOF|BEV_EVENT_ERROR)) {
- if (what & BEV_EVENT_ERROR) {
- unsigned long err;
- while ((err = (bufferevent_get_openssl_error(bev)))) {
- const char *msg = (const char*)
- ERR_reason_error_string(err);
- const char *lib = (const char*)
- ERR_lib_error_string(err);
- const char *func = (const char*)
- ERR_func_error_string(err);
- fprintf(stderr,
- "%s in %s %s\n", msg, lib, func);
- }
- if (errno)
- perror("connection error");
- }
-
- if (partner) {
- /* Flush all pending data */
- readcb(bev, ctx);
-
- if (evbuffer_get_length(
- bufferevent_get_output(partner))) {
- /* We still have to flush data from the other
- * side, but when that's done, close the other
- * side. */
- bufferevent_setcb(partner,
- NULL, close_on_finished_writecb,
- eventcb, NULL);
- bufferevent_disable(partner, EV_READ);
- } else {
- /* We have nothing left to say to the other
- * side; close it. */
- bufferevent_free(partner);
- }
- }
- bufferevent_free(bev);
- }
-}
-
-static void
-syntax(void)
-{
- fputs("Syntax:\n", stderr);
- fputs(" le-proxy [-s] [-W] <listen-on-addr> <connect-to-addr>\n", stderr);
- fputs("Example:\n", stderr);
- fputs(" le-proxy 127.0.0.1:8888 1.2.3.4:80\n", stderr);
-
- exit(1);
-}
-
-static void
-accept_cb(struct evconnlistener *listener, evutil_socket_t fd,
- struct sockaddr *a, int slen, void *p)
-{
- struct bufferevent *b_out, *b_in;
- /* Create two linked bufferevent objects: one to connect, one for the
- * new connection */
- b_in = bufferevent_socket_new(base, fd,
- BEV_OPT_CLOSE_ON_FREE|BEV_OPT_DEFER_CALLBACKS);
-
- if (!ssl_ctx || use_wrapper)
- b_out = bufferevent_socket_new(base, -1,
- BEV_OPT_CLOSE_ON_FREE|BEV_OPT_DEFER_CALLBACKS);
- else {
- SSL *ssl = SSL_new(ssl_ctx);
- b_out = bufferevent_openssl_socket_new(base, -1, ssl,
- BUFFEREVENT_SSL_CONNECTING,
- BEV_OPT_CLOSE_ON_FREE|BEV_OPT_DEFER_CALLBACKS);
- }
-
- assert(b_in && b_out);
-
- if (bufferevent_socket_connect(b_out,
- (struct sockaddr*)&connect_to_addr, connect_to_addrlen)<0) {
- perror("bufferevent_socket_connect");
- bufferevent_free(b_out);
- bufferevent_free(b_in);
- return;
- }
-
- if (ssl_ctx && use_wrapper) {
- struct bufferevent *b_ssl;
- SSL *ssl = SSL_new(ssl_ctx);
- b_ssl = bufferevent_openssl_filter_new(base,
- b_out, ssl, BUFFEREVENT_SSL_CONNECTING,
- BEV_OPT_CLOSE_ON_FREE|BEV_OPT_DEFER_CALLBACKS);
- if (!b_ssl) {
- perror("Bufferevent_openssl_new");
- bufferevent_free(b_out);
- bufferevent_free(b_in);
- }
- b_out = b_ssl;
- }
-
- bufferevent_setcb(b_in, readcb, NULL, eventcb, b_out);
- bufferevent_setcb(b_out, readcb, NULL, eventcb, b_in);
-
- bufferevent_enable(b_in, EV_READ|EV_WRITE);
- bufferevent_enable(b_out, EV_READ|EV_WRITE);
-}
-
-int
-main(int argc, char **argv)
-{
- int i;
- int socklen;
-
- int use_ssl = 0;
- struct evconnlistener *listener;
-
- if (argc < 3)
- syntax();
-
- for (i=1; i < argc; ++i) {
- if (!strcmp(argv[i], "-s")) {
- use_ssl = 1;
- } else if (!strcmp(argv[i], "-W")) {
- use_wrapper = 0;
- } else if (argv[i][0] == '-') {
- syntax();
- } else
- break;
- }
-
- if (i+2 != argc)
- syntax();
-
- memset(&listen_on_addr, 0, sizeof(listen_on_addr));
- socklen = sizeof(listen_on_addr);
- if (evutil_parse_sockaddr_port(argv[i],
- (struct sockaddr*)&listen_on_addr, &socklen)<0) {
- int p = atoi(argv[i]);
- struct sockaddr_in *sin = (struct sockaddr_in*)&listen_on_addr;
- if (p < 1 || p > 65535)
- syntax();
- sin->sin_port = htons(p);
- sin->sin_addr.s_addr = htonl(0x7f000001);
- sin->sin_family = AF_INET;
- socklen = sizeof(struct sockaddr_in);
- }
-
- memset(&connect_to_addr, 0, sizeof(connect_to_addr));
- connect_to_addrlen = sizeof(connect_to_addr);
- if (evutil_parse_sockaddr_port(argv[i+1],
- (struct sockaddr*)&connect_to_addr, &connect_to_addrlen)<0)
- syntax();
-
- base = event_base_new();
- if (!base) {
- perror("event_base_new()");
- return 1;
- }
-
- if (use_ssl) {
- int r;
- SSL_library_init();
- ERR_load_crypto_strings();
- SSL_load_error_strings();
- OpenSSL_add_all_algorithms();
- r = RAND_poll();
- if (r == 0) {
- fprintf(stderr, "RAND_poll() failed.\n");
- return 1;
- }
- ssl_ctx = SSL_CTX_new(SSLv23_method());
- }
-
- listener = evconnlistener_new_bind(base, accept_cb, NULL,
- LEV_OPT_CLOSE_ON_FREE|LEV_OPT_CLOSE_ON_EXEC|LEV_OPT_REUSEABLE,
- -1, (struct sockaddr*)&listen_on_addr, socklen);
-
- if (! listener) {
- fprintf(stderr, "Couldn't open listener.\n");
- event_base_free(base);
- return 1;
- }
- event_base_dispatch(base);
-
- evconnlistener_free(listener);
- event_base_free(base);
-
- return 0;
-}
diff --git a/contrib/ntp/sntp/libevent/sample/openssl_hostname_validation.c b/contrib/ntp/sntp/libevent/sample/openssl_hostname_validation.c
deleted file mode 100644
index b5adc67..0000000
--- a/contrib/ntp/sntp/libevent/sample/openssl_hostname_validation.c
+++ /dev/null
@@ -1,172 +0,0 @@
-/* Obtained from: https://github.com/iSECPartners/ssl-conservatory */
-
-/*
-Copyright (C) 2012, iSEC Partners.
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of
-this software and associated documentation files (the "Software"), to deal in
-the Software without restriction, including without limitation the rights to
-use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
-of the Software, and to permit persons to whom the Software is furnished to do
-so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
- */
-
-/*
- * Helper functions to perform basic hostname validation using OpenSSL.
- *
- * Please read "everything-you-wanted-to-know-about-openssl.pdf" before
- * attempting to use this code. This whitepaper describes how the code works,
- * how it should be used, and what its limitations are.
- *
- * Author: Alban Diquet
- * License: See LICENSE
- *
- */
-
-// Get rid of OSX 10.7 and greater deprecation warnings.
-#if defined(__APPLE__) && defined(__clang__)
-#pragma clang diagnostic ignored "-Wdeprecated-declarations"
-#endif
-
-#include <openssl/x509v3.h>
-#include <openssl/ssl.h>
-
-#include "openssl_hostname_validation.h"
-#include "hostcheck.h"
-
-#define HOSTNAME_MAX_SIZE 255
-
-/**
-* Tries to find a match for hostname in the certificate's Common Name field.
-*
-* Returns MatchFound if a match was found.
-* Returns MatchNotFound if no matches were found.
-* Returns MalformedCertificate if the Common Name had a NUL character embedded in it.
-* Returns Error if the Common Name could not be extracted.
-*/
-static HostnameValidationResult matches_common_name(const char *hostname, const X509 *server_cert) {
- int common_name_loc = -1;
- X509_NAME_ENTRY *common_name_entry = NULL;
- ASN1_STRING *common_name_asn1 = NULL;
- char *common_name_str = NULL;
-
- // Find the position of the CN field in the Subject field of the certificate
- common_name_loc = X509_NAME_get_index_by_NID(X509_get_subject_name((X509 *) server_cert), NID_commonName, -1);
- if (common_name_loc < 0) {
- return Error;
- }
-
- // Extract the CN field
- common_name_entry = X509_NAME_get_entry(X509_get_subject_name((X509 *) server_cert), common_name_loc);
- if (common_name_entry == NULL) {
- return Error;
- }
-
- // Convert the CN field to a C string
- common_name_asn1 = X509_NAME_ENTRY_get_data(common_name_entry);
- if (common_name_asn1 == NULL) {
- return Error;
- }
- common_name_str = (char *) ASN1_STRING_data(common_name_asn1);
-
- // Make sure there isn't an embedded NUL character in the CN
- if ((size_t)ASN1_STRING_length(common_name_asn1) != strlen(common_name_str)) {
- return MalformedCertificate;
- }
-
- // Compare expected hostname with the CN
- if (Curl_cert_hostcheck(common_name_str, hostname) == CURL_HOST_MATCH) {
- return MatchFound;
- }
- else {
- return MatchNotFound;
- }
-}
-
-
-/**
-* Tries to find a match for hostname in the certificate's Subject Alternative Name extension.
-*
-* Returns MatchFound if a match was found.
-* Returns MatchNotFound if no matches were found.
-* Returns MalformedCertificate if any of the hostnames had a NUL character embedded in it.
-* Returns NoSANPresent if the SAN extension was not present in the certificate.
-*/
-static HostnameValidationResult matches_subject_alternative_name(const char *hostname, const X509 *server_cert) {
- HostnameValidationResult result = MatchNotFound;
- int i;
- int san_names_nb = -1;
- STACK_OF(GENERAL_NAME) *san_names = NULL;
-
- // Try to extract the names within the SAN extension from the certificate
- san_names = X509_get_ext_d2i((X509 *) server_cert, NID_subject_alt_name, NULL, NULL);
- if (san_names == NULL) {
- return NoSANPresent;
- }
- san_names_nb = sk_GENERAL_NAME_num(san_names);
-
- // Check each name within the extension
- for (i=0; i<san_names_nb; i++) {
- const GENERAL_NAME *current_name = sk_GENERAL_NAME_value(san_names, i);
-
- if (current_name->type == GEN_DNS) {
- // Current name is a DNS name, let's check it
- char *dns_name = (char *) ASN1_STRING_data(current_name->d.dNSName);
-
- // Make sure there isn't an embedded NUL character in the DNS name
- if ((size_t)ASN1_STRING_length(current_name->d.dNSName) != strlen(dns_name)) {
- result = MalformedCertificate;
- break;
- }
- else { // Compare expected hostname with the DNS name
- if (Curl_cert_hostcheck(dns_name, hostname)
- == CURL_HOST_MATCH) {
- result = MatchFound;
- break;
- }
- }
- }
- }
- sk_GENERAL_NAME_pop_free(san_names, GENERAL_NAME_free);
-
- return result;
-}
-
-
-/**
-* Validates the server's identity by looking for the expected hostname in the
-* server's certificate. As described in RFC 6125, it first tries to find a match
-* in the Subject Alternative Name extension. If the extension is not present in
-* the certificate, it checks the Common Name instead.
-*
-* Returns MatchFound if a match was found.
-* Returns MatchNotFound if no matches were found.
-* Returns MalformedCertificate if any of the hostnames had a NUL character embedded in it.
-* Returns Error if there was an error.
-*/
-HostnameValidationResult validate_hostname(const char *hostname, const X509 *server_cert) {
- HostnameValidationResult result;
-
- if((hostname == NULL) || (server_cert == NULL))
- return Error;
-
- // First try the Subject Alternative Names extension
- result = matches_subject_alternative_name(hostname, server_cert);
- if (result == NoSANPresent) {
- // Extension was not found: try the Common Name
- result = matches_common_name(hostname, server_cert);
- }
-
- return result;
-}
diff --git a/contrib/ntp/sntp/libevent/sample/openssl_hostname_validation.h b/contrib/ntp/sntp/libevent/sample/openssl_hostname_validation.h
deleted file mode 100644
index 54aa1c4..0000000
--- a/contrib/ntp/sntp/libevent/sample/openssl_hostname_validation.h
+++ /dev/null
@@ -1,56 +0,0 @@
-/* Obtained from: https://github.com/iSECPartners/ssl-conservatory */
-
-/*
-Copyright (C) 2012, iSEC Partners.
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of
-this software and associated documentation files (the "Software"), to deal in
-the Software without restriction, including without limitation the rights to
-use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
-of the Software, and to permit persons to whom the Software is furnished to do
-so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
- */
-
-/*
- * Helper functions to perform basic hostname validation using OpenSSL.
- *
- * Please read "everything-you-wanted-to-know-about-openssl.pdf" before
- * attempting to use this code. This whitepaper describes how the code works,
- * how it should be used, and what its limitations are.
- *
- * Author: Alban Diquet
- * License: See LICENSE
- *
- */
-
-typedef enum {
- MatchFound,
- MatchNotFound,
- NoSANPresent,
- MalformedCertificate,
- Error
-} HostnameValidationResult;
-
-/**
-* Validates the server's identity by looking for the expected hostname in the
-* server's certificate. As described in RFC 6125, it first tries to find a match
-* in the Subject Alternative Name extension. If the extension is not present in
-* the certificate, it checks the Common Name instead.
-*
-* Returns MatchFound if a match was found.
-* Returns MatchNotFound if no matches were found.
-* Returns MalformedCertificate if any of the hostnames had a NUL character embedded in it.
-* Returns Error if there was an error.
-*/
-HostnameValidationResult validate_hostname(const char *hostname, const X509 *server_cert);
diff --git a/contrib/ntp/sntp/libevent/sample/signal-test.c b/contrib/ntp/sntp/libevent/sample/signal-test.c
deleted file mode 100644
index a61642f..0000000
--- a/contrib/ntp/sntp/libevent/sample/signal-test.c
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- * Compile with:
- * cc -I/usr/local/include -o signal-test \
- * signal-test.c -L/usr/local/lib -levent
- */
-
-#include <sys/types.h>
-
-#include <event2/event-config.h>
-
-#include <sys/stat.h>
-#ifndef _WIN32
-#include <sys/queue.h>
-#include <unistd.h>
-#include <sys/time.h>
-#else
-#include <winsock2.h>
-#include <windows.h>
-#endif
-#include <signal.h>
-#include <fcntl.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <errno.h>
-
-#include <event2/event.h>
-
-#ifdef EVENT____func__
-#define __func__ EVENT____func__
-#endif
-
-int called = 0;
-
-static void
-signal_cb(evutil_socket_t fd, short event, void *arg)
-{
- struct event *signal = arg;
-
- printf("%s: got signal %d\n", __func__, event_get_signal(signal));
-
- if (called >= 2)
- event_del(signal);
-
- called++;
-}
-
-int
-main(int argc, char **argv)
-{
- struct event *signal_int;
- struct event_base* base;
-#ifdef _WIN32
- WORD wVersionRequested;
- WSADATA wsaData;
-
- wVersionRequested = MAKEWORD(2, 2);
-
- (void) WSAStartup(wVersionRequested, &wsaData);
-#endif
-
- /* Initalize the event library */
- base = event_base_new();
-
- /* Initalize one event */
- signal_int = evsignal_new(base, SIGINT, signal_cb, event_self_cbarg());
-
- event_add(signal_int, NULL);
-
- event_base_dispatch(base);
- event_base_free(base);
-
- return (0);
-}
-
diff --git a/contrib/ntp/sntp/libevent/sample/time-test.c b/contrib/ntp/sntp/libevent/sample/time-test.c
deleted file mode 100644
index c94c18a..0000000
--- a/contrib/ntp/sntp/libevent/sample/time-test.c
+++ /dev/null
@@ -1,107 +0,0 @@
-/*
- * XXX This sample code was once meant to show how to use the basic Libevent
- * interfaces, but it never worked on non-Unix platforms, and some of the
- * interfaces have changed since it was first written. It should probably
- * be removed or replaced with something better.
- *
- * Compile with:
- * cc -I/usr/local/include -o time-test time-test.c -L/usr/local/lib -levent
- */
-
-#include <sys/types.h>
-
-#include <event2/event-config.h>
-
-#include <sys/stat.h>
-#ifndef _WIN32
-#include <sys/queue.h>
-#include <unistd.h>
-#endif
-#include <time.h>
-#ifdef EVENT__HAVE_SYS_TIME_H
-#include <sys/time.h>
-#endif
-#include <fcntl.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <errno.h>
-
-#include <event2/event.h>
-#include <event2/event_struct.h>
-#include <event2/util.h>
-
-#ifdef _WIN32
-#include <winsock2.h>
-#endif
-
-struct timeval lasttime;
-
-int event_is_persistent;
-
-static void
-timeout_cb(evutil_socket_t fd, short event, void *arg)
-{
- struct timeval newtime, difference;
- struct event *timeout = arg;
- double elapsed;
-
- evutil_gettimeofday(&newtime, NULL);
- evutil_timersub(&newtime, &lasttime, &difference);
- elapsed = difference.tv_sec +
- (difference.tv_usec / 1.0e6);
-
- printf("timeout_cb called at %d: %.3f seconds elapsed.\n",
- (int)newtime.tv_sec, elapsed);
- lasttime = newtime;
-
- if (! event_is_persistent) {
- struct timeval tv;
- evutil_timerclear(&tv);
- tv.tv_sec = 2;
- event_add(timeout, &tv);
- }
-}
-
-int
-main(int argc, char **argv)
-{
- struct event timeout;
- struct timeval tv;
- struct event_base *base;
- int flags;
-
-#ifdef _WIN32
- WORD wVersionRequested;
- WSADATA wsaData;
-
- wVersionRequested = MAKEWORD(2, 2);
-
- (void)WSAStartup(wVersionRequested, &wsaData);
-#endif
-
- if (argc == 2 && !strcmp(argv[1], "-p")) {
- event_is_persistent = 1;
- flags = EV_PERSIST;
- } else {
- event_is_persistent = 0;
- flags = 0;
- }
-
- /* Initalize the event library */
- base = event_base_new();
-
- /* Initalize one event */
- event_assign(&timeout, base, -1, flags, timeout_cb, (void*) &timeout);
-
- evutil_timerclear(&tv);
- tv.tv_sec = 2;
- event_add(&timeout, &tv);
-
- evutil_gettimeofday(&lasttime, NULL);
-
- event_base_dispatch(base);
-
- return (0);
-}
-
diff --git a/contrib/ntp/sntp/libevent/test/bench_httpclient.c b/contrib/ntp/sntp/libevent/test/bench_httpclient.c
index 22f174d..1573e36 100644
--- a/contrib/ntp/sntp/libevent/test/bench_httpclient.c
+++ b/contrib/ntp/sntp/libevent/test/bench_httpclient.c
@@ -159,6 +159,10 @@ launch_request(void)
}
ri = malloc(sizeof(*ri));
+ if (ri == NULL) {
+ printf("Unable to allocate memory in launch_request()\n");
+ return -1;
+ }
ri->n_read = 0;
evutil_gettimeofday(&ri->started, NULL);
diff --git a/contrib/ntp/sntp/libevent/test/regress.c b/contrib/ntp/sntp/libevent/test/regress.c
index 399ba2f..2d887f0 100644
--- a/contrib/ntp/sntp/libevent/test/regress.c
+++ b/contrib/ntp/sntp/libevent/test/regress.c
@@ -2823,6 +2823,10 @@ static void *
dummy_malloc(size_t len)
{
char *mem = malloc(len+16);
+ if (mem == NULL) {
+ fprintf(stderr, "Unable to allocate memory in dummy_malloc()\n");
+ return NULL;
+ }
memcpy(mem, "{[<guardedram>]}", 16);
return mem+16;
}
diff --git a/contrib/ntp/sntp/libevent/test/regress_dns.c b/contrib/ntp/sntp/libevent/test/regress_dns.c
index 6d6b484..3181140 100644
--- a/contrib/ntp/sntp/libevent/test/regress_dns.c
+++ b/contrib/ntp/sntp/libevent/test/regress_dns.c
@@ -1322,7 +1322,7 @@ test_getaddrinfo_async(void *arg)
int n_dns_questions = 0;
struct evdns_base *dns_base;
- memset(a_out, 0, sizeof(a_out));
+ memset(&a_out, 0, sizeof(a_out));
memset(&local_outcome, 0, sizeof(local_outcome));
dns_base = evdns_base_new(data->base, 0);
@@ -1746,7 +1746,8 @@ end:
static void
gaic_launch(struct event_base *base, struct evdns_base *dns_base)
{
- struct gaic_request_status *status = calloc(1,sizeof(*status));
+ struct gaic_request_status *status = calloc(1, sizeof(*status));
+ tt_assert(status);
struct timeval tv = { 0, 10000 };
status->magic = GAIC_MAGIC;
status->base = base;
diff --git a/contrib/ntp/sntp/libevent/test/regress_http.c b/contrib/ntp/sntp/libevent/test/regress_http.c
index 35f6dd7..147f6ff 100644
--- a/contrib/ntp/sntp/libevent/test/regress_http.c
+++ b/contrib/ntp/sntp/libevent/test/regress_http.c
@@ -367,6 +367,10 @@ http_chunked_cb(struct evhttp_request *req, void *arg)
struct timeval when = { 0, 0 };
struct chunk_req_state *state = malloc(sizeof(struct chunk_req_state));
event_debug(("%s: called\n", __func__));
+ if (state == NULL) {
+ fprintf(stderr, "Unable to allocate memory in http_chunked_cb()\n");
+ exit(1);
+ }
memset(state, 0, sizeof(struct chunk_req_state));
state->req = req;
diff --git a/contrib/ntp/sntp/libevent/test/regress_minheap.c b/contrib/ntp/sntp/libevent/test/regress_minheap.c
index 05db32e..24ff293 100644
--- a/contrib/ntp/sntp/libevent/test/regress_minheap.c
+++ b/contrib/ntp/sntp/libevent/test/regress_minheap.c
@@ -63,6 +63,7 @@ test_heap_randomized(void *ptr)
for (i = 0; i < 1024; ++i) {
inserted[i] = malloc(sizeof(struct event));
+ assert(inserted[i] != NULL);
set_random_timeout(inserted[i]);
min_heap_push_(&heap, inserted[i]);
}
diff --git a/contrib/ntp/sntp/libevent/test/test-ratelim.c b/contrib/ntp/sntp/libevent/test/test-ratelim.c
index 17babfd..40a1b95 100644
--- a/contrib/ntp/sntp/libevent/test/test-ratelim.c
+++ b/contrib/ntp/sntp/libevent/test/test-ratelim.c
@@ -340,6 +340,10 @@ test_ratelimiting(void)
bevs = calloc(cfg_n_connections, sizeof(struct bufferevent *));
states = calloc(cfg_n_connections, sizeof(struct client_state));
+ if (bevs == NULL || states == NULL) {
+ printf("Unable to allocate memory...\n");
+ return 1;
+ }
for (i = 0; i < cfg_n_connections; ++i) {
bevs[i] = bufferevent_socket_new(base, -1,
diff --git a/contrib/ntp/sntp/libevent/test/test-time.c b/contrib/ntp/sntp/libevent/test/test-time.c
index bcc7086..e7dff7d 100644
--- a/contrib/ntp/sntp/libevent/test/test-time.c
+++ b/contrib/ntp/sntp/libevent/test/test-time.c
@@ -99,6 +99,7 @@ main(int argc, char **argv)
for (i = 0; i < NEVENT; i++) {
ev[i] = malloc(sizeof(struct event));
+ assert(ev[i] != NULL);
/* Initalize one event */
evtimer_set(ev[i], time_cb, ev[i]);
diff --git a/contrib/ntp/sntp/libopts/Makefile.in b/contrib/ntp/sntp/libopts/Makefile.in
index 4ca06b7..1f138a2 100644
--- a/contrib/ntp/sntp/libopts/Makefile.in
+++ b/contrib/ntp/sntp/libopts/Makefile.in
@@ -236,6 +236,7 @@ AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
+BUILD_THREAD = @BUILD_THREAD@
CALC_TICKADJ_DB = @CALC_TICKADJ_DB@
CALC_TICKADJ_DL = @CALC_TICKADJ_DL@
CALC_TICKADJ_DS = @CALC_TICKADJ_DS@
@@ -244,6 +245,7 @@ CALC_TICKADJ_NI = @CALC_TICKADJ_NI@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
+CFLAGS_LIBEVENT = @CFLAGS_LIBEVENT@
CFLAGS_NTP = @CFLAGS_NTP@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
@@ -297,6 +299,7 @@ LIBTOOL_DEPS = @LIBTOOL_DEPS@
LIB_SYSLOG = @LIB_SYSLOG@
LIPO = @LIPO@
LN_S = @LN_S@
+LTHREAD_LIBS = @LTHREAD_LIBS@
LTLIBOBJS = @LTLIBOBJS@
MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
diff --git a/contrib/ntp/sntp/libopts/compat/pathfind.c b/contrib/ntp/sntp/libopts/compat/pathfind.c
index 5c477ca..d343dcc 100644
--- a/contrib/ntp/sntp/libopts/compat/pathfind.c
+++ b/contrib/ntp/sntp/libopts/compat/pathfind.c
@@ -115,9 +115,15 @@ make_absolute( char const * string, char const * dot_path )
if (!dot_path || *string == '/') {
result = strdup( string );
+ if (result == NULL) {
+ return NULL; /* couldn't allocate memory */
+ }
} else {
if (dot_path && dot_path[0]) {
result = malloc( 2 + strlen( dot_path ) + strlen( string ) );
+ if (result == NULL) {
+ return NULL; /* couldn't allocate memory */
+ }
strcpy( result, dot_path );
result_len = (int)strlen(result);
if (result[result_len - 1] != '/') {
@@ -126,6 +132,9 @@ make_absolute( char const * string, char const * dot_path )
}
} else {
result = malloc( 3 + strlen( string ) );
+ if (result == NULL) {
+ return NULL; /* couldn't allocate memory */
+ }
result[0] = '.'; result[1] = '/'; result[2] = '\0';
result_len = 2;
}
@@ -155,7 +164,9 @@ canonicalize_pathname( char *path )
/* The result cannot be larger than the input PATH. */
result = strdup( path );
-
+ if (result == NULL) {
+ return NULL; /* couldn't allocate memory */
+ }
stub_char = (*path == '/') ? '/' : '.';
/* Walk along RESULT looking for things to compact. */
diff --git a/contrib/ntp/sntp/log.c b/contrib/ntp/sntp/log.c
index d703495..db6614d 100644
--- a/contrib/ntp/sntp/log.c
+++ b/contrib/ntp/sntp/log.c
@@ -2,7 +2,9 @@
#include "log.h"
-char *progname; /* for msyslog use too */
+const char *progname; /* for msyslog use too */
+
+static int counter = 0;
static void cleanup_log(void);
@@ -11,6 +13,7 @@ sntp_init_logging(
const char *prog
)
{
+
msyslog_term = TRUE;
init_logging(prog, 0, FALSE);
msyslog_term_pid = FALSE;
@@ -24,15 +27,21 @@ open_logfile(
)
{
change_logfile(logfile, FALSE);
+ counter = 1; //counter++;
atexit(cleanup_log);
}
-
+//not sure about this. Are the atexit() functions called by FIFO or LIFO order? The end result is PROBABLY the same
static void
cleanup_log(void)
{
- syslogit = TRUE;
- fflush(syslog_file);
- fclose(syslog_file);
- syslog_file = NULL;
+ //counter--;
+ //if(counter <= 0){
+ if(counter == 1){
+ syslogit = TRUE;
+ fflush(syslog_file);
+ fclose(syslog_file);
+ syslog_file = NULL;
+ counter = 0;
+ }
}
diff --git a/contrib/ntp/sntp/log.h b/contrib/ntp/sntp/log.h
index fdb2ba2..2d047ba 100644
--- a/contrib/ntp/sntp/log.h
+++ b/contrib/ntp/sntp/log.h
@@ -22,6 +22,6 @@
void sntp_init_logging(const char *program);
void open_logfile(const char *logfile);
-extern char *progname; /* for msyslog use too */
+extern char const *progname; /* for msyslog use too */
#endif
diff --git a/contrib/ntp/sntp/m4/ntp_libevent.m4 b/contrib/ntp/sntp/m4/ntp_libevent.m4
index 54174f0..895360e 100644
--- a/contrib/ntp/sntp/m4/ntp_libevent.m4
+++ b/contrib/ntp/sntp/m4/ntp_libevent.m4
@@ -64,6 +64,7 @@ AC_REQUIRE([NTP_ENABLE_LOCAL_LIBEVENT])dnl
ntp_libevent_min_version=m4_default([$1], [2.0.9])
ntp_libevent_tearoff=m4_default([$2], [libevent])
+AC_SUBST([CFLAGS_LIBEVENT])
AC_SUBST([CPPFLAGS_LIBEVENT])
AC_SUBST([LDADD_LIBEVENT])
@@ -78,6 +79,7 @@ case "$ntp_use_local_libevent" in
then
ntp_use_local_libevent=no
AC_MSG_NOTICE([Using the installed libevent])
+ CFLAGS_LIBEVENT=`$PKG_CONFIG --cflags libevent_pthreads`
CPPFLAGS_LIBEVENT=`$PKG_CONFIG --cflags-only-I libevent`
# HMS: I hope the following is accurate.
# We don't need -levent, we only need -levent_core.
@@ -106,6 +108,9 @@ case "$ntp_use_local_libevent" in
AC_MSG_RESULT([yes])
else
ntp_use_local_libevent=yes
+ # HMS: do we only need to do this if LIBISC_PTHREADS_NOTHREADS
+ # is "pthreads"?
+ CFLAGS_LIBEVENT=`$PKG_CONFIG --cflags libevent_pthreads`
AC_MSG_RESULT([no])
fi
;;
@@ -129,6 +134,22 @@ case "$ntp_use_local_libevent" in
esac
esac
+dnl AC_ARG_ENABLE(
+dnl [cflags-libevent],
+dnl [AC_HELP_STRING(
+dnl [--enable-cflags-libevent=-pthread],
+dnl [CFLAGS value to build with pthreads]
+dnl )],
+dnl [CFLAGS_LIBEVENT=$enableval],
+dnl [# See above about LIBISC_PTHREADS_NOTHREADS
+dnl case "$CFLAGS_LIBEVENT" in
+dnl '') CFLAGS_LIBEVENT="-pthread" ;;
+dnl *) ;;
+dnl esac]
+dnl )
+dnl AC_MSG_NOTICE([LIBISC_PTHREADS_NOTHREADS is <$LIBISC_PTHREADS_NOTHREADS>])
+dnl AC_MSG_NOTICE([CFLAGS_LIBEVENT is <$CFLAGS_LIBEVENT>])
+
AM_CONDITIONAL([BUILD_LIBEVENT], [test "x$ntp_use_local_libevent" = "xyes"])
]) dnl NTP_LIBEVENT_CHECK_NOBUILD
diff --git a/contrib/ntp/sntp/m4/ntp_libntp.m4 b/contrib/ntp/sntp/m4/ntp_libntp.m4
index 89b94b6..01d82fc 100644
--- a/contrib/ntp/sntp/m4/ntp_libntp.m4
+++ b/contrib/ntp/sntp/m4/ntp_libntp.m4
@@ -328,7 +328,8 @@ AC_ARG_ENABLE(
)
have_pthreads=no
case "$enable_thread_support" in
- yes)
+ no) ;;
+ *)
ol_found_pthreads=no
OL_THREAD_CHECK([ol_found_pthreads=yes])
case "$ol_found_pthreads" in
@@ -346,18 +347,6 @@ case "$enable_thread_support" in
yes)
PTHREAD_LIBS="$LTHREAD_LIBS"
have_pthreads=yes
- # Bug 2332: With GCC we need to force a reference to libgcc_s
- # (if libgcc_s exists) or the combination of
- # threads + setuid + mlockall does not work on linux because
- # thread cancellation fails to load libgcc_s with dlopen().
- # We have to pass this all as linker options to avoid argument
- # reordering by libtool.
- case "$GCC$with_gnu_ld" in
- yesyes)
- AC_CHECK_LIB([gcc_s], [exit],
- [PTHREAD_LIBS="$LTHREAD_LIBS -Wl,--no-as-needed,-lgcc_s,--as-needed"])
- ;;
- esac
esac
esac
esac
diff --git a/contrib/ntp/sntp/m4/ntp_problemtests.m4 b/contrib/ntp/sntp/m4/ntp_problemtests.m4
new file mode 100644
index 0000000..4596e85
--- /dev/null
+++ b/contrib/ntp/sntp/m4/ntp_problemtests.m4
@@ -0,0 +1,56 @@
+dnl ######################################################################
+dnl NTP_PROBLEM_TESTS
+dnl
+dnl Some platforms have problems building or running certain tests.
+dnl While we're in the initial phase of the deployment of the test
+dnl framework, sometimes we may need to disable these tests.
+dnl
+dnl This is where we do that.
+dnl
+AC_DEFUN([NTP_PROBLEM_TESTS], [
+case "$build" in
+ $host) cross=0 ;;
+ *) cross=1 ;;
+esac
+
+AC_MSG_CHECKING([if we want to enable tests with undiagnosed problems])
+AC_ARG_ENABLE(
+ [problem-tests],
+ [AS_HELP_STRING(
+ [--enable-problem-tests],
+ [+ enable tests with undiagnosed problems]
+ )],
+ [ntp_ept=$enableval],
+ [ntp_ept=yes]
+)
+AC_MSG_RESULT([$ntp_ept])
+
+AC_MSG_CHECKING([if we can run test-ntp_restrict])
+ntp_test_ntp_restrict="no"
+case "$ntp_ept:$cross:$host" in
+ no:0:*-*-solaris*) ;;
+ no:0:*-*-hpux-11.23*) ;;
+ *) ntp_test_ntp_restrict="yes" ;;
+esac
+AC_MSG_RESULT([$ntp_test_ntp_restrict])
+AM_CONDITIONAL([BUILD_TEST_NTP_RESTRICT], [test x$ntp_test_ntp_restrict = xyes])
+
+AC_MSG_CHECKING([if we can run test-ntp_scanner])
+ntp_test_ntp_scanner="no"
+case "$ntp_ept:$cross:$host" in
+ no:0:*-*-solaris*) ;;
+ *) ntp_test_ntp_scanner="yes" ;;
+esac
+AC_MSG_RESULT([$ntp_test_ntp_scanner])
+AM_CONDITIONAL([BUILD_TEST_NTP_SCANNER], [test x$ntp_test_ntp_scanner = xyes])
+
+AC_MSG_CHECKING([if we can run test-ntp_signd])
+ntp_test_ntp_signd="no"
+case "$ntp_ept:$cross:$host" in
+ no:0:*-*-solaris*) ;;
+ *) ntp_test_ntp_signd="yes" ;;
+esac
+AC_MSG_RESULT([$ntp_test_ntp_signd])
+AM_CONDITIONAL([BUILD_TEST_NTP_SIGND], [test x$ntp_test_ntp_signd = xyes])
+])
+dnl ======================================================================
diff --git a/contrib/ntp/sntp/m4/ntp_rlimit.m4 b/contrib/ntp/sntp/m4/ntp_rlimit.m4
index c1267b7..b87d567 100644
--- a/contrib/ntp/sntp/m4/ntp_rlimit.m4
+++ b/contrib/ntp/sntp/m4/ntp_rlimit.m4
@@ -26,10 +26,15 @@ AC_CACHE_CHECK(
[ntp_cv_rlimit_memlock=no]
)]
)
+case "$host" in
+ *-*-*linux*)
+ ntp_dflt_rlimit_memlock="-1" ;;
+ *) ntp_dflt_rlimit_memlock="32" ;;
+esac
case "$ntp_cv_rlimit_memlock" in
yes)
AC_SUBST([HAVE_RLIMIT_MEMLOCK])
- HAVE_RLIMIT_MEMLOCK=" memlock 32"
+ HAVE_RLIMIT_MEMLOCK=" memlock $ntp_dflt_rlimit_memlock" ;;
esac
AC_CACHE_CHECK(
@@ -62,5 +67,59 @@ case "$ntp_cv_rlimit_stack" in
HAVE_RLIMIT_STACK=" stacksize 50"
esac
+# HMS: Only if we are doing the MLOCKALL stuff...
+AC_MSG_CHECKING([for the default number of 4k stack pages])
+AC_ARG_WITH(
+ [stack-limit],
+ [AS_HELP_STRING(
+ [--with-stack-limit],
+ [? =50 (200 for openbsd) 4k pages]
+ )],
+ [ans=$withval],
+ [ans=yes]
+)
+case "$ans" in
+ yes | no)
+ case "$host" in
+ *-*-openbsd*)
+ ans=200
+ ;;
+ *) ans=50
+ ;;
+ esac
+ ;;
+ [[1-9]][[0-9]]*)
+ ;;
+ *) AC_MSG_ERROR(["--with-stack-limit requires an integer argument."])
+ ;;
+esac
+AC_MSG_RESULT([$ans])
+AC_DEFINE_UNQUOTED([DFLT_RLIMIT_STACK], [$ans],
+ [Default number of 4k pages for RLIMIT_STACK])
+
+# HMS: only if we have RLIMIT_MEMLOCK
+AC_MSG_CHECKING([for the default number of megabytes to MEMLOCK])
+AC_ARG_WITH(
+ [memlock],
+ [AS_HELP_STRING(
+ [--with-memlock],
+ [? =32 (-1 on linux) megabytes]
+ )],
+ [ans=$withval],
+ [ans=yes]
+)
+case "$ans" in
+ yes | no)
+ ans=$ntp_dflt_rlimit_memlock
+ ;;
+ [[1-9]][[0-9]]*) ;;
+ *) AC_MSG_ERROR(["--with-memlock requires an integer argument."])
+ ;;
+esac
+AC_MSG_RESULT([$ans])
+AC_DEFINE_UNQUOTED([DFLT_RLIMIT_MEMLOCK], [$ans],
+ [Default number of megabytes for RLIMIT_MEMLOCK])
+
])dnl
+
dnl ======================================================================
diff --git a/contrib/ntp/sntp/m4/openldap-thread-check.m4 b/contrib/ntp/sntp/m4/openldap-thread-check.m4
index 33f9199..7768a5c 100644
--- a/contrib/ntp/sntp/m4/openldap-thread-check.m4
+++ b/contrib/ntp/sntp/m4/openldap-thread-check.m4
@@ -15,6 +15,9 @@ dnl <http://www.OpenLDAP.org/license.html>.
dnl
dnl --------------------------------------------------------------------
+dnl This file is a fragment of OpenLDAP's build/openldap.m4 and some
+dnl fragments of OpenLDAP's configure.ac .
+
# OL_THREAD_CHECK([ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]])
AC_DEFUN([OL_THREAD_CHECK], [
@@ -202,6 +205,8 @@ dnl [ol_cv_pthread_lpthread_lexc])
OL_PTHREAD_TRY([-lpthreads],[ol_cv_pthread_lib_lpthreads])
+AC_MSG_NOTICE([ol_link_threads: <$ol_link_threads> ol_link_pthreads <$ol_link_pthreads>])
+
if test $ol_link_threads != no ; then
LTHREAD_LIBS="$LTHREAD_LIBS $ol_link_pthreads"
@@ -680,4 +685,8 @@ case "$ol_with_threads" in
esac
AC_LANG_RESTORE
+
+AC_SUBST(BUILD_THREAD)
+AC_SUBST(LTHREAD_LIBS)
+
])
diff --git a/contrib/ntp/sntp/m4/os_cflags.m4 b/contrib/ntp/sntp/m4/os_cflags.m4
index a2161e6..4ff2ac0 100644
--- a/contrib/ntp/sntp/m4/os_cflags.m4
+++ b/contrib/ntp/sntp/m4/os_cflags.m4
@@ -2,7 +2,7 @@ dnl ######################################################################
dnl Specify additional compile options based on the OS and the compiler
AC_DEFUN([NTP_OS_CFLAGS], [
AC_MSG_CHECKING([additional compiler flags])
- # allow ntp_os_flags to be preset to skip this stuff
+ # allow ntp_os_cflags to be preset to skip this stuff
case "${ntp_os_cflags+set}" in
set)
;;
@@ -90,7 +90,7 @@ AC_DEFUN([NTP_OS_CFLAGS], [
;;
esac
esac
- case "$ntp_os_flags" in
+ case "$ntp_os_cflags" in
'')
ntp_os_cflags_msg="none needed"
;;
@@ -100,5 +100,35 @@ AC_DEFUN([NTP_OS_CFLAGS], [
CFLAGS_NTP="$CFLAGS_NTP $ntp_os_cflags"
AC_MSG_RESULT([$ntp_os_cflags_msg])
AS_UNSET([ntp_os_cflags_msg])
+ ###
+ AC_MSG_CHECKING([additional linker flags])
+ # HMS: The following might still need tweaking
+ # allow ntp_os_ldflags to be preset to skip this stuff
+ case "${ntp_os_ldflags+set}" in
+ set)
+ ;;
+ *)
+ ntp_os_ldflags=
+ case "$host_os" in
+ hpux*)
+ case "$GCC" in
+ yes)
+ ntp_os_ldflags="-Wl,+allowdups"
+ ;;
+ esac
+ ;;
+ esac
+ ;;
+ esac
+ case "$ntp_os_ldflags" in
+ '')
+ ntp_os_ldflags_msg="none needed"
+ ;;
+ *)
+ ntp_os_ldflags_msg="$ntp_os_ldflags"
+ esac
+ LDFLAGS_NTP="$LDFLAGS_NTP $ntp_os_ldflags"
+ AC_MSG_RESULT([$ntp_os_ldflags_msg])
+ AS_UNSET([ntp_os_ldflags_msg])
])
dnl ======================================================================
diff --git a/contrib/ntp/sntp/m4/version.m4 b/contrib/ntp/sntp/m4/version.m4
index b83123f..7d51426 100644
--- a/contrib/ntp/sntp/m4/version.m4
+++ b/contrib/ntp/sntp/m4/version.m4
@@ -1 +1 @@
-m4_define([VERSION_NUMBER],[4.2.8p3])
+m4_define([VERSION_NUMBER],[4.2.8p4])
diff --git a/contrib/ntp/sntp/networking.c b/contrib/ntp/sntp/networking.c
index bef7352..ddd45ef 100644
--- a/contrib/ntp/sntp/networking.c
+++ b/contrib/ntp/sntp/networking.c
@@ -113,7 +113,7 @@ process_pkt (
l_fp sent_xmt;
l_fp resp_org;
- key_id = 0;
+ // key_id = 0;
pkt_key = NULL;
is_authentic = (HAVE_OPT(AUTHENTICATION)) ? 0 : -1;
diff --git a/contrib/ntp/sntp/scripts/Makefile.in b/contrib/ntp/sntp/scripts/Makefile.in
index 0eda41d..0494fc3 100644
--- a/contrib/ntp/sntp/scripts/Makefile.in
+++ b/contrib/ntp/sntp/scripts/Makefile.in
@@ -153,6 +153,7 @@ AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
+BUILD_THREAD = @BUILD_THREAD@
CALC_TICKADJ_DB = @CALC_TICKADJ_DB@
CALC_TICKADJ_DL = @CALC_TICKADJ_DL@
CALC_TICKADJ_DS = @CALC_TICKADJ_DS@
@@ -161,6 +162,7 @@ CALC_TICKADJ_NI = @CALC_TICKADJ_NI@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
+CFLAGS_LIBEVENT = @CFLAGS_LIBEVENT@
CFLAGS_NTP = @CFLAGS_NTP@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
@@ -214,6 +216,7 @@ LIBTOOL_DEPS = @LIBTOOL_DEPS@
LIB_SYSLOG = @LIB_SYSLOG@
LIPO = @LIPO@
LN_S = @LN_S@
+LTHREAD_LIBS = @LTHREAD_LIBS@
LTLIBOBJS = @LTLIBOBJS@
MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
diff --git a/contrib/ntp/sntp/sntp-opts.c b/contrib/ntp/sntp/sntp-opts.c
index be05bb6..e46a80c 100644
--- a/contrib/ntp/sntp/sntp-opts.c
+++ b/contrib/ntp/sntp/sntp-opts.c
@@ -1,7 +1,7 @@
/*
* EDIT THIS FILE WITH CAUTION (sntp-opts.c)
*
- * It has been AutoGen-ed June 29, 2015 at 04:23:20 PM by AutoGen 5.18.5
+ * It has been AutoGen-ed October 21, 2015 at 12:30:23 PM by AutoGen 5.18.5
* From the definitions sntp-opts.def
* and the template file options
*
@@ -70,7 +70,7 @@ extern FILE * option_usage_fp;
* static const strings for sntp options
*/
static char const sntp_opt_strs[2549] =
-/* 0 */ "sntp 4.2.8p3\n"
+/* 0 */ "sntp 4.2.8p4\n"
"Copyright (C) 1992-2015 The University of Delaware and Network Time Foundation, all rights reserved.\n"
"This is free software. It is licensed for use, modification and\n"
"redistribution under the terms of the NTP License, copies of which\n"
@@ -155,7 +155,7 @@ static char const sntp_opt_strs[2549] =
/* 2298 */ "LOAD_OPTS\0"
/* 2308 */ "no-load-opts\0"
/* 2321 */ "SNTP\0"
-/* 2326 */ "sntp - standard Simple Network Time Protocol client program - Ver. 4.2.8p3\n"
+/* 2326 */ "sntp - standard Simple Network Time Protocol client program - Ver. 4.2.8p4\n"
"Usage: %s [ -<flag> [<val>] | --<name>[{=| }<val>] ]... \\\n"
"\t\t[ hostname-or-IP ...]\n\0"
/* 2485 */ "$HOME\0"
@@ -163,7 +163,7 @@ static char const sntp_opt_strs[2549] =
/* 2493 */ ".ntprc\0"
/* 2500 */ "http://bugs.ntp.org, bugs@ntp.org\0"
/* 2534 */ "\n\0"
-/* 2536 */ "sntp 4.2.8p3";
+/* 2536 */ "sntp 4.2.8p4";
/**
* ipv4 option description with
@@ -1173,7 +1173,7 @@ static void bogus_function(void) {
translate option names.
*/
/* referenced via sntpOptions.pzCopyright */
- puts(_("sntp 4.2.8p3\n\
+ puts(_("sntp 4.2.8p4\n\
Copyright (C) 1992-2015 The University of Delaware and Network Time Foundation, all rights reserved.\n\
This is free software. It is licensed for use, modification and\n\
redistribution under the terms of the NTP License, copies of which\n\
@@ -1263,7 +1263,7 @@ implied warranty.\n"));
puts(_("load options from a config file"));
/* referenced via sntpOptions.pzUsageTitle */
- puts(_("sntp - standard Simple Network Time Protocol client program - Ver. 4.2.8p3\n\
+ puts(_("sntp - standard Simple Network Time Protocol client program - Ver. 4.2.8p4\n\
Usage: %s [ -<flag> [<val>] | --<name>[{=| }<val>] ]... \\\n\
\t\t[ hostname-or-IP ...]\n"));
@@ -1271,7 +1271,7 @@ Usage: %s [ -<flag> [<val>] | --<name>[{=| }<val>] ]... \\\n\
puts(_("\n"));
/* referenced via sntpOptions.pzFullVersion */
- puts(_("sntp 4.2.8p3"));
+ puts(_("sntp 4.2.8p4"));
/* referenced via sntpOptions.pzFullUsage */
puts(_("<<<NOT-FOUND>>>"));
diff --git a/contrib/ntp/sntp/sntp-opts.h b/contrib/ntp/sntp/sntp-opts.h
index 06fa376..895421e 100644
--- a/contrib/ntp/sntp/sntp-opts.h
+++ b/contrib/ntp/sntp/sntp-opts.h
@@ -1,7 +1,7 @@
/*
* EDIT THIS FILE WITH CAUTION (sntp-opts.h)
*
- * It has been AutoGen-ed June 29, 2015 at 04:23:19 PM by AutoGen 5.18.5
+ * It has been AutoGen-ed October 21, 2015 at 12:30:22 PM by AutoGen 5.18.5
* From the definitions sntp-opts.def
* and the template file options
*
@@ -91,9 +91,9 @@ typedef enum {
/** count of all options for sntp */
#define OPTION_CT 23
/** sntp version */
-#define SNTP_VERSION "4.2.8p3"
+#define SNTP_VERSION "4.2.8p4"
/** Full sntp version text */
-#define SNTP_FULL_VERSION "sntp 4.2.8p3"
+#define SNTP_FULL_VERSION "sntp 4.2.8p4"
/**
* Interface defines for all options. Replace "n" with the UPPER_CASED
diff --git a/contrib/ntp/sntp/sntp.1sntpman b/contrib/ntp/sntp/sntp.1sntpman
index 9033a81..89facc6 100644
--- a/contrib/ntp/sntp/sntp.1sntpman
+++ b/contrib/ntp/sntp/sntp.1sntpman
@@ -10,11 +10,11 @@
.ds B-Font B
.ds I-Font I
.ds R-Font R
-.TH sntp 1sntpman "29 Jun 2015" "4.2.8p3" "User Commands"
+.TH sntp 1sntpman "21 Oct 2015" "4.2.8p4" "User Commands"
.\"
-.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-JTaaO5/ag-VTa4M5)
+.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-hEaqbg/ag-UEaiag)
.\"
-.\" It has been AutoGen-ed June 29, 2015 at 04:23:26 PM by AutoGen 5.18.5
+.\" It has been AutoGen-ed October 21, 2015 at 12:30:52 PM by AutoGen 5.18.5
.\" From the definitions sntp-opts.def
.\" and the template file agman-cmd.tpl
.SH NAME
diff --git a/contrib/ntp/sntp/sntp.1sntpmdoc b/contrib/ntp/sntp/sntp.1sntpmdoc
index 52bc5ad..b1b3940 100644
--- a/contrib/ntp/sntp/sntp.1sntpmdoc
+++ b/contrib/ntp/sntp/sntp.1sntpmdoc
@@ -1,9 +1,9 @@
-.Dd June 29 2015
+.Dd October 21 2015
.Dt SNTP 1sntpmdoc User Commands
.Os
.\" EDIT THIS FILE WITH CAUTION (sntp-opts.mdoc)
.\"
-.\" It has been AutoGen-ed June 29, 2015 at 04:23:32 PM by AutoGen 5.18.5
+.\" It has been AutoGen-ed October 21, 2015 at 12:30:59 PM by AutoGen 5.18.5
.\" From the definitions sntp-opts.def
.\" and the template file agmdoc-cmd.tpl
.Sh NAME
diff --git a/contrib/ntp/sntp/sntp.html b/contrib/ntp/sntp/sntp.html
index c5f11b6..5ea532e 100644
--- a/contrib/ntp/sntp/sntp.html
+++ b/contrib/ntp/sntp/sntp.html
@@ -36,7 +36,7 @@ display the time offset of the system clock relative to the server
clock. Run as root, it can correct the system clock to this offset as
well. It can be run as an interactive command or from a cron job.
- <p>This document applies to version 4.2.8p3 of <code>sntp</code>.
+ <p>This document applies to version 4.2.8p4 of <code>sntp</code>.
<p>The program implements the SNTP protocol as defined by RFC 5905, the NTPv4
IETF specification.
@@ -176,7 +176,7 @@ the usage text by passing it through a pager program.
used to select the program, defaulting to <span class="file">more</span>. Both will exit
with a status code of 0.
-<pre class="example">sntp - standard Simple Network Time Protocol client program - Ver. 4.2.8p3
+<pre class="example">sntp - standard Simple Network Time Protocol client program - Ver. 4.2.8p4
Usage: sntp [ -&lt;flag&gt; [&lt;val&gt;] | --&lt;name&gt;[{=| }&lt;val&gt;] ]... \
[ hostname-or-IP ...]
Flg Arg Option-Name Description
diff --git a/contrib/ntp/sntp/sntp.man.in b/contrib/ntp/sntp/sntp.man.in
index f4607eb..84afa7e 100644
--- a/contrib/ntp/sntp/sntp.man.in
+++ b/contrib/ntp/sntp/sntp.man.in
@@ -10,11 +10,11 @@
.ds B-Font B
.ds I-Font I
.ds R-Font R
-.TH sntp @SNTP_MS@ "29 Jun 2015" "4.2.8p3" "User Commands"
+.TH sntp @SNTP_MS@ "21 Oct 2015" "4.2.8p4" "User Commands"
.\"
-.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-JTaaO5/ag-VTa4M5)
+.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-hEaqbg/ag-UEaiag)
.\"
-.\" It has been AutoGen-ed June 29, 2015 at 04:23:26 PM by AutoGen 5.18.5
+.\" It has been AutoGen-ed October 21, 2015 at 12:30:52 PM by AutoGen 5.18.5
.\" From the definitions sntp-opts.def
.\" and the template file agman-cmd.tpl
.SH NAME
diff --git a/contrib/ntp/sntp/sntp.mdoc.in b/contrib/ntp/sntp/sntp.mdoc.in
index f302ab9..0313e5e 100644
--- a/contrib/ntp/sntp/sntp.mdoc.in
+++ b/contrib/ntp/sntp/sntp.mdoc.in
@@ -1,9 +1,9 @@
-.Dd June 29 2015
+.Dd October 21 2015
.Dt SNTP @SNTP_MS@ User Commands
.Os
.\" EDIT THIS FILE WITH CAUTION (sntp-opts.mdoc)
.\"
-.\" It has been AutoGen-ed June 29, 2015 at 04:23:32 PM by AutoGen 5.18.5
+.\" It has been AutoGen-ed October 21, 2015 at 12:30:59 PM by AutoGen 5.18.5
.\" From the definitions sntp-opts.def
.\" and the template file agmdoc-cmd.tpl
.Sh NAME
diff --git a/contrib/ntp/sntp/tests/Makefile.am b/contrib/ntp/sntp/tests/Makefile.am
index 2228aa0..c5338c7 100644
--- a/contrib/ntp/sntp/tests/Makefile.am
+++ b/contrib/ntp/sntp/tests/Makefile.am
@@ -1,10 +1,31 @@
NULL =
BUILT_SOURCES =
-CLEANFILES = kod-output-blank kod-output-single kod-output-multiple debug-output-lfp-dec debug-output-lfp-bin debug-output-pkt
-DISTCLEANFILES = kod-output-blank kod-output-single kod-output-multiple
EXTRA_PROGRAMS =
-run_unity = cd $(srcdir) && ruby ../../sntp/unity/auto/generate_test_runner.rb
+CLEANFILES = \
+ debug-output-lfp-bin \
+ debug-output-lfp-dec \
+ debug-output-pkt \
+ kod-output-blank \
+ kod-output-multiple \
+ kod-output-single \
+ testLogfile.log \
+ testLogfile2.log \
+ $(NULL)
+
+DISTCLEANFILES = \
+ kod-output-blank \
+ kod-output-single \
+ kod-output-multiple \
+ testLogfile.log \
+ testLogfile2.log \
+ $(NULL)
+
+std_unity_list = \
+ $(srcdir)/../unity/auto/generate_test_runner.rb \
+ $(NULL)
+
+run_unity = cd $(srcdir) && ruby ../unity/auto/generate_test_runner.rb
# Use EXTRA_PROGRAMS for test files that are under development but
# not production-ready
@@ -15,50 +36,15 @@ check_PROGRAMS = \
test-keyFile \
test-kodDatabase \
test-kodFile \
+ test-log \
test-networking \
test-packetHandling \
test-packetProcessing \
test-utilities \
$(NULL)
-if GTEST_AVAILABLE
-check_PROGRAMS += tests
-else
-EXTRA_PROGRAMS += tests
-endif
-
-#if BUILD_SNTP
-#check_PROGRAMS += tests
-#endif
-
-base_SOURCES = \
- ../tests_main.cpp \
- $(NULL)
-
-tests_SOURCES = \
- $(base_SOURCES) \
- g_networking.cpp \
- g_packetHandling.cpp \
- g_packetProcessing.cpp \
- $(NULL)
-
-# HMS: this test was for the 4.2.6 sntp code.
-# g_nameresolution.cpp
-
-# HMS: Somebody needs to audit the following files to
-# make sure all of these tests are now handled by Unity
-#
-# g_utilities.cpp
-# g_kodDatabase.cpp
-# g_keyFile.cpp
-# g_crypto.cpp
-# g_kodFile.cpp
-
noinst_HEADERS = \
- fileHandlingTest.h \
sntptest.h \
- g_fileHandlingTest.h \
- g_sntptest.h \
$(NULL)
dist_check_SCRIPTS = tests-runner
@@ -89,33 +75,32 @@ CLEANFILES += \
$(NULL)
#split into LDADD and tests_LDADD?
-LDADD = \
+base_LDADD = \
../libsntp.a \
$(LIBOPTS_LDADD) \
$(LDADD_LIBEVENT) \
$(top_builddir)/../libntp/libntp.a \
$(LDADD_LIBNTP) \
$(LDADD_NTP) \
- $(GTEST_LDFLAGS) \
- $(GTEST_LIBS) \
$(NULL)
-unity_tests_LDADD = \
- $(LDADD) \
+LDADD = \
+ $(base_LDADD) \
$(top_builddir)/unity/libunity.a \
$(LIBM) \
$(NULL)
-AM_CFLAGS = $(CFLAGS_NTP)
-AM_CXXFLAGS = $(GTEST_CXXFLAGS)
+AM_CFLAGS = $(CFLAGS_NTP)
AM_CPPFLAGS = $(SNTP_INCS)
AM_CPPFLAGS += -I$(srcdir)/..
AM_CPPFLAGS += -I$(top_srcdir)/../tests
AM_CPPFLAGS += $(LIBOPTS_CFLAGS)
AM_CPPFLAGS += $(CPPFLAGS_LIBEVENT)
-AM_CPPFLAGS += $(GTEST_CPPFLAGS)
AM_CPPFLAGS += $(CPPFLAGS_NTP)
+AM_CPPFLAGS += -DUNITY_INCLUDE_CONFIG_H
+#AM_CPPFLAGS += -I$(top_srcdir)/sntp/unity
+AM_CPPFLAGS += -I$(top_srcdir)/unity
AM_LDFLAGS = $(LDFLAGS_NTP)
@@ -125,73 +110,9 @@ BUILT_SOURCES += \
$(srcdir)/run-kodDatabase.c \
$(srcdir)/run-kodFile.c \
$(srcdir)/run-networking.c \
+ $(srcdir)/run-packetHandling.c \
$(srcdir)/run-packetProcessing.c \
$(srcdir)/run-utilities.c \
- $(srcdir)/run-packetHandling.c \
- $(NULL)
-
-test_keyFile_CFLAGS = \
- -I$(top_srcdir)/unity \
- $(NULL)
-
-test_keyFile_LDADD = \
- $(unity_tests_LDADD) \
- $(NULL)
-
-test_kodDatabase_CFLAGS = \
- -I$(top_srcdir)/unity \
- $(NULL)
-
-test_kodDatabase_LDADD = \
- $(unity_tests_LDADD) \
- $(NULL)
-
-test_kodFile_CFLAGS = \
- -I$(top_srcdir)/unity \
- $(NULL)
-
-test_kodFile_LDADD = \
- $(unity_tests_LDADD) \
- $(NULL)
-
-test_networking_CFLAGS = \
- -I$(top_srcdir)/unity \
- $(NULL)
-
-test_networking_LDADD = \
- $(unity_tests_LDADD) \
- $(NULL)
-
-test_utilities_CFLAGS = \
- -I$(top_srcdir)/unity \
- $(NULL)
-
-test_utilities_LDADD = \
- $(unity_tests_LDADD) \
- $(NULL)
-
-test_crypto_CFLAGS = \
- -I$(top_srcdir)/unity \
- $(NULL)
-
-test_crypto_LDADD = \
- $(unity_tests_LDADD) \
- $(NULL)
-
-test_packetProcessing_CFLAGS = \
- -I$(top_srcdir)/unity \
- $(NULL)
-
-test_packetProcessing_LDADD = \
- $(unity_tests_LDADD) \
- $(NULL)
-
-test_packetHandling_CFLAGS = \
- -I$(top_srcdir)/unity \
- $(NULL)
-
-test_packetHandling_LDADD = \
- $(unity_tests_LDADD) \
$(NULL)
test_networking_SOURCES = \
@@ -213,34 +134,48 @@ test_kodDatabase_SOURCES = \
$(NULL)
test_keyFile_SOURCES = \
+ fileHandlingTest.c \
keyFile.c \
run-keyFile.c \
$(top_builddir)/version.c \
$(NULL)
test_kodFile_SOURCES = \
+ fileHandlingTest.c \
kodFile.c \
run-kodFile.c \
$(top_builddir)/version.c \
$(NULL)
-# ../version.c
test_packetProcessing_SOURCES = \
packetProcessing.c \
run-packetProcessing.c \
+ sntptest.c \
$(NULL)
test_utilities_SOURCES = \
+ fileHandlingTest.c \
utilities.c \
run-utilities.c \
$(NULL)
+test_crypto_CFLAGS = \
+ $(CFLAGS_LIBEVENT) \
+ $(AM_CFLAGS) \
+ $(NULL)
+
test_crypto_SOURCES = \
crypto.c \
run-crypto.c \
$(top_builddir)/version.c \
$(NULL)
+test_log_SOURCES = \
+ t-log.c \
+ run-t-log.c \
+ $(top_builddir)/version.c \
+ $(NULL)
+
$(srcdir)/run-kodFile.c: $(srcdir)/kodFile.c $(std_unity_list)
$(run_unity) kodFile.c run-kodFile.c
@@ -266,6 +201,10 @@ $(srcdir)/run-utilities.c: $(srcdir)/utilities.c $(std_unity_list)
$(srcdir)/run-crypto.c: $(srcdir)/crypto.c $(std_unity_list)
$(run_unity) crypto.c run-crypto.c
+$(srcdir)/run-t-log.c: $(srcdir)/t-log.c $(std_unity_list)
+ $(run_unity) t-log.c run-t-log.c
+
+
#$(srcdir)/../version.c: $(srcdir)/../version.c
# gcc -o version.o ../version.c
@@ -301,10 +240,10 @@ check-libntp: ../../libntp/libntp.a
../../libntp/libntp.a:
cd ../../libntp && $(MAKE) $(AM_MAKEFLAGS) libntp.a
-check-libunity: ../sntp/unity/libunity.a
+check-libunity: ../unity/libunity.a
@echo stamp > $@
-../sntp/unity/libunity.a:
+../unity/libunity.a:
cd ../unity && $(MAKE) $(AM_MAKEFLAGS) libunity.a
include $(top_srcdir)/depsver.mf
diff --git a/contrib/ntp/sntp/tests/Makefile.in b/contrib/ntp/sntp/tests/Makefile.in
index 8cc0ba5..9803fa8 100644
--- a/contrib/ntp/sntp/tests/Makefile.in
+++ b/contrib/ntp/sntp/tests/Makefile.in
@@ -88,15 +88,13 @@ PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
-EXTRA_PROGRAMS = $(am__EXEEXT_1)
+EXTRA_PROGRAMS =
check_PROGRAMS = test-crypto$(EXEEXT) test-keyFile$(EXEEXT) \
test-kodDatabase$(EXEEXT) test-kodFile$(EXEEXT) \
- test-networking$(EXEEXT) test-packetHandling$(EXEEXT) \
- test-packetProcessing$(EXEEXT) test-utilities$(EXEEXT) \
- $(am__EXEEXT_2) $(am__EXEEXT_3)
-@GTEST_AVAILABLE_TRUE@am__append_1 = tests
-@GTEST_AVAILABLE_FALSE@am__append_2 = tests
-@NTP_CROSSCOMPILE_FALSE@am__append_3 = $(check_PROGRAMS)
+ test-log$(EXEEXT) test-networking$(EXEEXT) \
+ test-packetHandling$(EXEEXT) test-packetProcessing$(EXEEXT) \
+ test-utilities$(EXEEXT) $(am__EXEEXT_1)
+@NTP_CROSSCOMPILE_FALSE@am__append_1 = $(check_PROGRAMS)
subdir = tests
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/libopts/m4/libopts.m4 \
@@ -133,24 +131,21 @@ mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES = fileHandlingTest.h
CONFIG_CLEAN_VPATH_FILES =
-@GTEST_AVAILABLE_FALSE@am__EXEEXT_1 = tests$(EXEEXT)
-am__EXEEXT_2 =
-@GTEST_AVAILABLE_TRUE@am__EXEEXT_3 = tests$(EXEEXT)
+am__EXEEXT_1 =
am__objects_1 =
am_test_crypto_OBJECTS = test_crypto-crypto.$(OBJEXT) \
test_crypto-run-crypto.$(OBJEXT) test_crypto-version.$(OBJEXT) \
$(am__objects_1)
test_crypto_OBJECTS = $(am_test_crypto_OBJECTS)
+test_crypto_LDADD = $(LDADD)
am__DEPENDENCIES_1 =
am__DEPENDENCIES_2 = ../libsntp.a $(am__DEPENDENCIES_1) \
$(am__DEPENDENCIES_1) $(top_builddir)/../libntp/libntp.a \
$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
- $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
$(am__DEPENDENCIES_1)
-am__DEPENDENCIES_3 = $(am__DEPENDENCIES_2) \
+test_crypto_DEPENDENCIES = $(am__DEPENDENCIES_2) \
$(top_builddir)/unity/libunity.a $(am__DEPENDENCIES_1) \
$(am__DEPENDENCIES_1)
-test_crypto_DEPENDENCIES = $(am__DEPENDENCIES_3) $(am__DEPENDENCIES_1)
AM_V_lt = $(am__v_lt_@AM_V@)
am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
am__v_lt_0 = --silent
@@ -158,85 +153,63 @@ am__v_lt_1 =
test_crypto_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=link $(CCLD) $(test_crypto_CFLAGS) \
$(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
-am_test_keyFile_OBJECTS = test_keyFile-keyFile.$(OBJEXT) \
- test_keyFile-run-keyFile.$(OBJEXT) \
- test_keyFile-version.$(OBJEXT) $(am__objects_1)
+am_test_keyFile_OBJECTS = fileHandlingTest.$(OBJEXT) keyFile.$(OBJEXT) \
+ run-keyFile.$(OBJEXT) version.$(OBJEXT) $(am__objects_1)
test_keyFile_OBJECTS = $(am_test_keyFile_OBJECTS)
-test_keyFile_DEPENDENCIES = $(am__DEPENDENCIES_3) \
+test_keyFile_LDADD = $(LDADD)
+test_keyFile_DEPENDENCIES = $(am__DEPENDENCIES_2) \
+ $(top_builddir)/unity/libunity.a $(am__DEPENDENCIES_1) \
$(am__DEPENDENCIES_1)
-test_keyFile_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
- $(LIBTOOLFLAGS) --mode=link $(CCLD) $(test_keyFile_CFLAGS) \
- $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
-am_test_kodDatabase_OBJECTS = test_kodDatabase-kodDatabase.$(OBJEXT) \
- test_kodDatabase-run-kodDatabase.$(OBJEXT) \
- test_kodDatabase-version.$(OBJEXT) $(am__objects_1)
+am_test_kodDatabase_OBJECTS = kodDatabase.$(OBJEXT) \
+ run-kodDatabase.$(OBJEXT) version.$(OBJEXT) $(am__objects_1)
test_kodDatabase_OBJECTS = $(am_test_kodDatabase_OBJECTS)
-test_kodDatabase_DEPENDENCIES = $(am__DEPENDENCIES_3) \
+test_kodDatabase_LDADD = $(LDADD)
+test_kodDatabase_DEPENDENCIES = $(am__DEPENDENCIES_2) \
+ $(top_builddir)/unity/libunity.a $(am__DEPENDENCIES_1) \
$(am__DEPENDENCIES_1)
-test_kodDatabase_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
- $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
- $(test_kodDatabase_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \
- -o $@
-am_test_kodFile_OBJECTS = test_kodFile-kodFile.$(OBJEXT) \
- test_kodFile-run-kodFile.$(OBJEXT) \
- test_kodFile-version.$(OBJEXT) $(am__objects_1)
+am_test_kodFile_OBJECTS = fileHandlingTest.$(OBJEXT) kodFile.$(OBJEXT) \
+ run-kodFile.$(OBJEXT) version.$(OBJEXT) $(am__objects_1)
test_kodFile_OBJECTS = $(am_test_kodFile_OBJECTS)
-test_kodFile_DEPENDENCIES = $(am__DEPENDENCIES_3) \
+test_kodFile_LDADD = $(LDADD)
+test_kodFile_DEPENDENCIES = $(am__DEPENDENCIES_2) \
+ $(top_builddir)/unity/libunity.a $(am__DEPENDENCIES_1) \
$(am__DEPENDENCIES_1)
-test_kodFile_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
- $(LIBTOOLFLAGS) --mode=link $(CCLD) $(test_kodFile_CFLAGS) \
- $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
-am_test_networking_OBJECTS = test_networking-networking.$(OBJEXT) \
- test_networking-run-networking.$(OBJEXT) \
- test_networking-version.$(OBJEXT) $(am__objects_1)
+am_test_log_OBJECTS = t-log.$(OBJEXT) run-t-log.$(OBJEXT) \
+ version.$(OBJEXT) $(am__objects_1)
+test_log_OBJECTS = $(am_test_log_OBJECTS)
+test_log_LDADD = $(LDADD)
+test_log_DEPENDENCIES = $(am__DEPENDENCIES_2) \
+ $(top_builddir)/unity/libunity.a $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_1)
+am_test_networking_OBJECTS = networking.$(OBJEXT) \
+ run-networking.$(OBJEXT) version.$(OBJEXT) $(am__objects_1)
test_networking_OBJECTS = $(am_test_networking_OBJECTS)
-test_networking_DEPENDENCIES = $(am__DEPENDENCIES_3) \
+test_networking_LDADD = $(LDADD)
+test_networking_DEPENDENCIES = $(am__DEPENDENCIES_2) \
+ $(top_builddir)/unity/libunity.a $(am__DEPENDENCIES_1) \
$(am__DEPENDENCIES_1)
-test_networking_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
- $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
- $(test_networking_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \
- -o $@
-am_test_packetHandling_OBJECTS = \
- test_packetHandling-packetHandling.$(OBJEXT) \
- test_packetHandling-run-packetHandling.$(OBJEXT) \
- test_packetHandling-version.$(OBJEXT) $(am__objects_1)
+am_test_packetHandling_OBJECTS = packetHandling.$(OBJEXT) \
+ run-packetHandling.$(OBJEXT) version.$(OBJEXT) \
+ $(am__objects_1)
test_packetHandling_OBJECTS = $(am_test_packetHandling_OBJECTS)
-test_packetHandling_DEPENDENCIES = $(am__DEPENDENCIES_3) \
+test_packetHandling_LDADD = $(LDADD)
+test_packetHandling_DEPENDENCIES = $(am__DEPENDENCIES_2) \
+ $(top_builddir)/unity/libunity.a $(am__DEPENDENCIES_1) \
$(am__DEPENDENCIES_1)
-test_packetHandling_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
- $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
- $(test_packetHandling_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
- $(LDFLAGS) -o $@
-am_test_packetProcessing_OBJECTS = \
- test_packetProcessing-packetProcessing.$(OBJEXT) \
- test_packetProcessing-run-packetProcessing.$(OBJEXT) \
+am_test_packetProcessing_OBJECTS = packetProcessing.$(OBJEXT) \
+ run-packetProcessing.$(OBJEXT) sntptest.$(OBJEXT) \
$(am__objects_1)
test_packetProcessing_OBJECTS = $(am_test_packetProcessing_OBJECTS)
-test_packetProcessing_DEPENDENCIES = $(am__DEPENDENCIES_3) \
+test_packetProcessing_LDADD = $(LDADD)
+test_packetProcessing_DEPENDENCIES = $(am__DEPENDENCIES_2) \
+ $(top_builddir)/unity/libunity.a $(am__DEPENDENCIES_1) \
$(am__DEPENDENCIES_1)
-test_packetProcessing_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
- $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
- $(test_packetProcessing_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
- $(LDFLAGS) -o $@
-am_test_utilities_OBJECTS = test_utilities-utilities.$(OBJEXT) \
- test_utilities-run-utilities.$(OBJEXT) $(am__objects_1)
+am_test_utilities_OBJECTS = fileHandlingTest.$(OBJEXT) \
+ utilities.$(OBJEXT) run-utilities.$(OBJEXT) $(am__objects_1)
test_utilities_OBJECTS = $(am_test_utilities_OBJECTS)
-test_utilities_DEPENDENCIES = $(am__DEPENDENCIES_3) \
- $(am__DEPENDENCIES_1)
-test_utilities_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
- $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
- $(test_utilities_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o \
- $@
-am__objects_2 = tests_main.$(OBJEXT) $(am__objects_1)
-am_tests_OBJECTS = $(am__objects_2) g_networking.$(OBJEXT) \
- g_packetHandling.$(OBJEXT) g_packetProcessing.$(OBJEXT) \
- $(am__objects_1)
-tests_OBJECTS = $(am_tests_OBJECTS)
-tests_LDADD = $(LDADD)
-tests_DEPENDENCIES = ../libsntp.a $(am__DEPENDENCIES_1) \
- $(am__DEPENDENCIES_1) $(top_builddir)/../libntp/libntp.a \
- $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
- $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+test_utilities_LDADD = $(LDADD)
+test_utilities_DEPENDENCIES = $(am__DEPENDENCIES_2) \
+ $(top_builddir)/unity/libunity.a $(am__DEPENDENCIES_1) \
$(am__DEPENDENCIES_1)
AM_V_P = $(am__v_P_@AM_V@)
am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
@@ -272,34 +245,16 @@ AM_V_CCLD = $(am__v_CCLD_@AM_V@)
am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
am__v_CCLD_0 = @echo " CCLD " $@;
am__v_CCLD_1 =
-CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
- $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
-LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \
- $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \
- $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
- $(AM_CXXFLAGS) $(CXXFLAGS)
-AM_V_CXX = $(am__v_CXX_@AM_V@)
-am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@)
-am__v_CXX_0 = @echo " CXX " $@;
-am__v_CXX_1 =
-CXXLD = $(CXX)
-CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \
- $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \
- $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
-AM_V_CXXLD = $(am__v_CXXLD_@AM_V@)
-am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@)
-am__v_CXXLD_0 = @echo " CXXLD " $@;
-am__v_CXXLD_1 =
SOURCES = $(test_crypto_SOURCES) $(test_keyFile_SOURCES) \
$(test_kodDatabase_SOURCES) $(test_kodFile_SOURCES) \
- $(test_networking_SOURCES) $(test_packetHandling_SOURCES) \
- $(test_packetProcessing_SOURCES) $(test_utilities_SOURCES) \
- $(tests_SOURCES)
+ $(test_log_SOURCES) $(test_networking_SOURCES) \
+ $(test_packetHandling_SOURCES) \
+ $(test_packetProcessing_SOURCES) $(test_utilities_SOURCES)
DIST_SOURCES = $(test_crypto_SOURCES) $(test_keyFile_SOURCES) \
$(test_kodDatabase_SOURCES) $(test_kodFile_SOURCES) \
- $(test_networking_SOURCES) $(test_packetHandling_SOURCES) \
- $(test_packetProcessing_SOURCES) $(test_utilities_SOURCES) \
- $(tests_SOURCES)
+ $(test_log_SOURCES) $(test_networking_SOURCES) \
+ $(test_packetHandling_SOURCES) \
+ $(test_packetProcessing_SOURCES) $(test_utilities_SOURCES)
am__can_run_installinfo = \
case $$AM_UPDATE_INFO_DIR in \
n|no|NO) false;; \
@@ -545,6 +500,7 @@ AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
+BUILD_THREAD = @BUILD_THREAD@
CALC_TICKADJ_DB = @CALC_TICKADJ_DB@
CALC_TICKADJ_DL = @CALC_TICKADJ_DL@
CALC_TICKADJ_DS = @CALC_TICKADJ_DS@
@@ -553,6 +509,7 @@ CALC_TICKADJ_NI = @CALC_TICKADJ_NI@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
+CFLAGS_LIBEVENT = @CFLAGS_LIBEVENT@
CFLAGS_NTP = @CFLAGS_NTP@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
@@ -606,6 +563,7 @@ LIBTOOL_DEPS = @LIBTOOL_DEPS@
LIB_SYSLOG = @LIB_SYSLOG@
LIPO = @LIPO@
LN_S = @LN_S@
+LTHREAD_LIBS = @LTHREAD_LIBS@
LTLIBOBJS = @LTLIBOBJS@
MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -774,49 +732,31 @@ NULL =
#endif
BUILT_SOURCES = $(srcdir)/run-crypto.c $(srcdir)/run-keyFile.c \
$(srcdir)/run-kodDatabase.c $(srcdir)/run-kodFile.c \
- $(srcdir)/run-networking.c $(srcdir)/run-packetProcessing.c \
- $(srcdir)/run-utilities.c $(srcdir)/run-packetHandling.c \
+ $(srcdir)/run-networking.c $(srcdir)/run-packetHandling.c \
+ $(srcdir)/run-packetProcessing.c $(srcdir)/run-utilities.c \
$(NULL) check-libsntp check-libntp check-libunity .deps-ver
-CLEANFILES = kod-output-blank kod-output-single kod-output-multiple \
- debug-output-lfp-dec debug-output-lfp-bin debug-output-pkt \
+CLEANFILES = debug-output-lfp-bin debug-output-lfp-dec \
+ debug-output-pkt kod-output-blank kod-output-multiple \
+ kod-output-single testLogfile.log testLogfile2.log $(NULL) \
data/kod-output-multiple data/kod-output-single \
data/debug-output-pkt data/debug-output-lfp-dec \
data/kod-output-blank data/debug-output-lfp-bin $(NULL) \
check-libsntp check-libntp check-libunity .deps-ver
-DISTCLEANFILES = kod-output-blank kod-output-single kod-output-multiple
-run_unity = cd $(srcdir) && ruby ../../sntp/unity/auto/generate_test_runner.rb
-
-#if BUILD_SNTP
-#check_PROGRAMS += tests
-#endif
-base_SOURCES = \
- ../tests_main.cpp \
+DISTCLEANFILES = \
+ kod-output-blank \
+ kod-output-single \
+ kod-output-multiple \
+ testLogfile.log \
+ testLogfile2.log \
$(NULL)
-tests_SOURCES = \
- $(base_SOURCES) \
- g_networking.cpp \
- g_packetHandling.cpp \
- g_packetProcessing.cpp \
+std_unity_list = \
+ $(srcdir)/../unity/auto/generate_test_runner.rb \
$(NULL)
-
-# HMS: this test was for the 4.2.6 sntp code.
-# g_nameresolution.cpp
-
-# HMS: Somebody needs to audit the following files to
-# make sure all of these tests are now handled by Unity
-#
-# g_utilities.cpp
-# g_kodDatabase.cpp
-# g_keyFile.cpp
-# g_crypto.cpp
-# g_kodFile.cpp
+run_unity = cd $(srcdir) && ruby ../unity/auto/generate_test_runner.rb
noinst_HEADERS = \
- fileHandlingTest.h \
sntptest.h \
- g_fileHandlingTest.h \
- g_sntptest.h \
$(NULL)
dist_check_SCRIPTS = tests-runner
@@ -838,93 +778,27 @@ EXTRA_DIST = \
#split into LDADD and tests_LDADD?
-LDADD = \
+base_LDADD = \
../libsntp.a \
$(LIBOPTS_LDADD) \
$(LDADD_LIBEVENT) \
$(top_builddir)/../libntp/libntp.a \
$(LDADD_LIBNTP) \
$(LDADD_NTP) \
- $(GTEST_LDFLAGS) \
- $(GTEST_LIBS) \
$(NULL)
-unity_tests_LDADD = \
- $(LDADD) \
+LDADD = \
+ $(base_LDADD) \
$(top_builddir)/unity/libunity.a \
$(LIBM) \
$(NULL)
AM_CFLAGS = $(CFLAGS_NTP)
-AM_CXXFLAGS = $(GTEST_CXXFLAGS)
+#AM_CPPFLAGS += -I$(top_srcdir)/sntp/unity
AM_CPPFLAGS = $(SNTP_INCS) -I$(srcdir)/.. -I$(top_srcdir)/../tests \
- $(LIBOPTS_CFLAGS) $(CPPFLAGS_LIBEVENT) $(GTEST_CPPFLAGS) \
- $(CPPFLAGS_NTP)
+ $(LIBOPTS_CFLAGS) $(CPPFLAGS_LIBEVENT) $(CPPFLAGS_NTP) \
+ -DUNITY_INCLUDE_CONFIG_H -I$(top_srcdir)/unity
AM_LDFLAGS = $(LDFLAGS_NTP)
-test_keyFile_CFLAGS = \
- -I$(top_srcdir)/unity \
- $(NULL)
-
-test_keyFile_LDADD = \
- $(unity_tests_LDADD) \
- $(NULL)
-
-test_kodDatabase_CFLAGS = \
- -I$(top_srcdir)/unity \
- $(NULL)
-
-test_kodDatabase_LDADD = \
- $(unity_tests_LDADD) \
- $(NULL)
-
-test_kodFile_CFLAGS = \
- -I$(top_srcdir)/unity \
- $(NULL)
-
-test_kodFile_LDADD = \
- $(unity_tests_LDADD) \
- $(NULL)
-
-test_networking_CFLAGS = \
- -I$(top_srcdir)/unity \
- $(NULL)
-
-test_networking_LDADD = \
- $(unity_tests_LDADD) \
- $(NULL)
-
-test_utilities_CFLAGS = \
- -I$(top_srcdir)/unity \
- $(NULL)
-
-test_utilities_LDADD = \
- $(unity_tests_LDADD) \
- $(NULL)
-
-test_crypto_CFLAGS = \
- -I$(top_srcdir)/unity \
- $(NULL)
-
-test_crypto_LDADD = \
- $(unity_tests_LDADD) \
- $(NULL)
-
-test_packetProcessing_CFLAGS = \
- -I$(top_srcdir)/unity \
- $(NULL)
-
-test_packetProcessing_LDADD = \
- $(unity_tests_LDADD) \
- $(NULL)
-
-test_packetHandling_CFLAGS = \
- -I$(top_srcdir)/unity \
- $(NULL)
-
-test_packetHandling_LDADD = \
- $(unity_tests_LDADD) \
- $(NULL)
-
test_networking_SOURCES = \
networking.c \
run-networking.c \
@@ -944,38 +818,52 @@ test_kodDatabase_SOURCES = \
$(NULL)
test_keyFile_SOURCES = \
+ fileHandlingTest.c \
keyFile.c \
run-keyFile.c \
$(top_builddir)/version.c \
$(NULL)
test_kodFile_SOURCES = \
+ fileHandlingTest.c \
kodFile.c \
run-kodFile.c \
$(top_builddir)/version.c \
$(NULL)
-# ../version.c
test_packetProcessing_SOURCES = \
packetProcessing.c \
run-packetProcessing.c \
+ sntptest.c \
$(NULL)
test_utilities_SOURCES = \
+ fileHandlingTest.c \
utilities.c \
run-utilities.c \
$(NULL)
+test_crypto_CFLAGS = \
+ $(CFLAGS_LIBEVENT) \
+ $(AM_CFLAGS) \
+ $(NULL)
+
test_crypto_SOURCES = \
crypto.c \
run-crypto.c \
$(top_builddir)/version.c \
$(NULL)
+test_log_SOURCES = \
+ t-log.c \
+ run-t-log.c \
+ $(top_builddir)/version.c \
+ $(NULL)
+
#$(srcdir)/../version.c: $(srcdir)/../version.c
# gcc -o version.o ../version.c
-TESTS = $(am__append_3)
+TESTS = $(am__append_1)
SNTP_INCS = -I$(top_srcdir)/../include \
-I$(top_srcdir)/../lib/isc/include \
-I$(top_srcdir)/../lib/isc/$(LIBISC_PTHREADS_NOTHREADS)/include \
@@ -984,7 +872,7 @@ all: $(BUILT_SOURCES)
$(MAKE) $(AM_MAKEFLAGS) all-am
.SUFFIXES:
-.SUFFIXES: .c .cpp .lo .log .o .obj .test .test$(EXEEXT) .trs
+.SUFFIXES: .c .lo .log .o .obj .test .test$(EXEEXT) .trs
$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/depsver.mf $(top_srcdir)/includes.mf $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
@@ -1033,35 +921,35 @@ test-crypto$(EXEEXT): $(test_crypto_OBJECTS) $(test_crypto_DEPENDENCIES) $(EXTRA
test-keyFile$(EXEEXT): $(test_keyFile_OBJECTS) $(test_keyFile_DEPENDENCIES) $(EXTRA_test_keyFile_DEPENDENCIES)
@rm -f test-keyFile$(EXEEXT)
- $(AM_V_CCLD)$(test_keyFile_LINK) $(test_keyFile_OBJECTS) $(test_keyFile_LDADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(test_keyFile_OBJECTS) $(test_keyFile_LDADD) $(LIBS)
test-kodDatabase$(EXEEXT): $(test_kodDatabase_OBJECTS) $(test_kodDatabase_DEPENDENCIES) $(EXTRA_test_kodDatabase_DEPENDENCIES)
@rm -f test-kodDatabase$(EXEEXT)
- $(AM_V_CCLD)$(test_kodDatabase_LINK) $(test_kodDatabase_OBJECTS) $(test_kodDatabase_LDADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(test_kodDatabase_OBJECTS) $(test_kodDatabase_LDADD) $(LIBS)
test-kodFile$(EXEEXT): $(test_kodFile_OBJECTS) $(test_kodFile_DEPENDENCIES) $(EXTRA_test_kodFile_DEPENDENCIES)
@rm -f test-kodFile$(EXEEXT)
- $(AM_V_CCLD)$(test_kodFile_LINK) $(test_kodFile_OBJECTS) $(test_kodFile_LDADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(test_kodFile_OBJECTS) $(test_kodFile_LDADD) $(LIBS)
+
+test-log$(EXEEXT): $(test_log_OBJECTS) $(test_log_DEPENDENCIES) $(EXTRA_test_log_DEPENDENCIES)
+ @rm -f test-log$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(test_log_OBJECTS) $(test_log_LDADD) $(LIBS)
test-networking$(EXEEXT): $(test_networking_OBJECTS) $(test_networking_DEPENDENCIES) $(EXTRA_test_networking_DEPENDENCIES)
@rm -f test-networking$(EXEEXT)
- $(AM_V_CCLD)$(test_networking_LINK) $(test_networking_OBJECTS) $(test_networking_LDADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(test_networking_OBJECTS) $(test_networking_LDADD) $(LIBS)
test-packetHandling$(EXEEXT): $(test_packetHandling_OBJECTS) $(test_packetHandling_DEPENDENCIES) $(EXTRA_test_packetHandling_DEPENDENCIES)
@rm -f test-packetHandling$(EXEEXT)
- $(AM_V_CCLD)$(test_packetHandling_LINK) $(test_packetHandling_OBJECTS) $(test_packetHandling_LDADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(test_packetHandling_OBJECTS) $(test_packetHandling_LDADD) $(LIBS)
test-packetProcessing$(EXEEXT): $(test_packetProcessing_OBJECTS) $(test_packetProcessing_DEPENDENCIES) $(EXTRA_test_packetProcessing_DEPENDENCIES)
@rm -f test-packetProcessing$(EXEEXT)
- $(AM_V_CCLD)$(test_packetProcessing_LINK) $(test_packetProcessing_OBJECTS) $(test_packetProcessing_LDADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(test_packetProcessing_OBJECTS) $(test_packetProcessing_LDADD) $(LIBS)
test-utilities$(EXEEXT): $(test_utilities_OBJECTS) $(test_utilities_DEPENDENCIES) $(EXTRA_test_utilities_DEPENDENCIES)
@rm -f test-utilities$(EXEEXT)
- $(AM_V_CCLD)$(test_utilities_LINK) $(test_utilities_OBJECTS) $(test_utilities_LDADD) $(LIBS)
-
-tests$(EXEEXT): $(tests_OBJECTS) $(tests_DEPENDENCIES) $(EXTRA_tests_DEPENDENCIES)
- @rm -f tests$(EXEEXT)
- $(AM_V_CXXLD)$(CXXLINK) $(tests_OBJECTS) $(tests_LDADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(test_utilities_OBJECTS) $(test_utilities_LDADD) $(LIBS)
mostlyclean-compile:
-rm -f *.$(OBJEXT)
@@ -1069,32 +957,28 @@ mostlyclean-compile:
distclean-compile:
-rm -f *.tab.c
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/g_networking.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/g_packetHandling.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/g_packetProcessing.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fileHandlingTest.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/keyFile.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/kodDatabase.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/kodFile.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/networking.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/packetHandling.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/packetProcessing.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/run-keyFile.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/run-kodDatabase.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/run-kodFile.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/run-networking.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/run-packetHandling.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/run-packetProcessing.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/run-t-log.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/run-utilities.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sntptest.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/t-log.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_crypto-crypto.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_crypto-run-crypto.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_crypto-version.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_keyFile-keyFile.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_keyFile-run-keyFile.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_keyFile-version.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_kodDatabase-kodDatabase.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_kodDatabase-run-kodDatabase.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_kodDatabase-version.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_kodFile-kodFile.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_kodFile-run-kodFile.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_kodFile-version.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_networking-networking.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_networking-run-networking.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_networking-version.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_packetHandling-packetHandling.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_packetHandling-run-packetHandling.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_packetHandling-version.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_packetProcessing-packetProcessing.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_packetProcessing-run-packetProcessing.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_utilities-run-utilities.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_utilities-utilities.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tests_main.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/utilities.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/version.Po@am__quote@
.c.o:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@@ -1159,306 +1043,19 @@ test_crypto-version.obj: $(top_builddir)/version.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_crypto_CFLAGS) $(CFLAGS) -c -o test_crypto-version.obj `if test -f '$(top_builddir)/version.c'; then $(CYGPATH_W) '$(top_builddir)/version.c'; else $(CYGPATH_W) '$(srcdir)/$(top_builddir)/version.c'; fi`
-test_keyFile-keyFile.o: keyFile.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_keyFile_CFLAGS) $(CFLAGS) -MT test_keyFile-keyFile.o -MD -MP -MF $(DEPDIR)/test_keyFile-keyFile.Tpo -c -o test_keyFile-keyFile.o `test -f 'keyFile.c' || echo '$(srcdir)/'`keyFile.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_keyFile-keyFile.Tpo $(DEPDIR)/test_keyFile-keyFile.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='keyFile.c' object='test_keyFile-keyFile.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_keyFile_CFLAGS) $(CFLAGS) -c -o test_keyFile-keyFile.o `test -f 'keyFile.c' || echo '$(srcdir)/'`keyFile.c
-
-test_keyFile-keyFile.obj: keyFile.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_keyFile_CFLAGS) $(CFLAGS) -MT test_keyFile-keyFile.obj -MD -MP -MF $(DEPDIR)/test_keyFile-keyFile.Tpo -c -o test_keyFile-keyFile.obj `if test -f 'keyFile.c'; then $(CYGPATH_W) 'keyFile.c'; else $(CYGPATH_W) '$(srcdir)/keyFile.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_keyFile-keyFile.Tpo $(DEPDIR)/test_keyFile-keyFile.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='keyFile.c' object='test_keyFile-keyFile.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_keyFile_CFLAGS) $(CFLAGS) -c -o test_keyFile-keyFile.obj `if test -f 'keyFile.c'; then $(CYGPATH_W) 'keyFile.c'; else $(CYGPATH_W) '$(srcdir)/keyFile.c'; fi`
-
-test_keyFile-run-keyFile.o: run-keyFile.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_keyFile_CFLAGS) $(CFLAGS) -MT test_keyFile-run-keyFile.o -MD -MP -MF $(DEPDIR)/test_keyFile-run-keyFile.Tpo -c -o test_keyFile-run-keyFile.o `test -f 'run-keyFile.c' || echo '$(srcdir)/'`run-keyFile.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_keyFile-run-keyFile.Tpo $(DEPDIR)/test_keyFile-run-keyFile.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='run-keyFile.c' object='test_keyFile-run-keyFile.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_keyFile_CFLAGS) $(CFLAGS) -c -o test_keyFile-run-keyFile.o `test -f 'run-keyFile.c' || echo '$(srcdir)/'`run-keyFile.c
-
-test_keyFile-run-keyFile.obj: run-keyFile.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_keyFile_CFLAGS) $(CFLAGS) -MT test_keyFile-run-keyFile.obj -MD -MP -MF $(DEPDIR)/test_keyFile-run-keyFile.Tpo -c -o test_keyFile-run-keyFile.obj `if test -f 'run-keyFile.c'; then $(CYGPATH_W) 'run-keyFile.c'; else $(CYGPATH_W) '$(srcdir)/run-keyFile.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_keyFile-run-keyFile.Tpo $(DEPDIR)/test_keyFile-run-keyFile.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='run-keyFile.c' object='test_keyFile-run-keyFile.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_keyFile_CFLAGS) $(CFLAGS) -c -o test_keyFile-run-keyFile.obj `if test -f 'run-keyFile.c'; then $(CYGPATH_W) 'run-keyFile.c'; else $(CYGPATH_W) '$(srcdir)/run-keyFile.c'; fi`
-
-test_keyFile-version.o: $(top_builddir)/version.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_keyFile_CFLAGS) $(CFLAGS) -MT test_keyFile-version.o -MD -MP -MF $(DEPDIR)/test_keyFile-version.Tpo -c -o test_keyFile-version.o `test -f '$(top_builddir)/version.c' || echo '$(srcdir)/'`$(top_builddir)/version.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_keyFile-version.Tpo $(DEPDIR)/test_keyFile-version.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$(top_builddir)/version.c' object='test_keyFile-version.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_keyFile_CFLAGS) $(CFLAGS) -c -o test_keyFile-version.o `test -f '$(top_builddir)/version.c' || echo '$(srcdir)/'`$(top_builddir)/version.c
-
-test_keyFile-version.obj: $(top_builddir)/version.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_keyFile_CFLAGS) $(CFLAGS) -MT test_keyFile-version.obj -MD -MP -MF $(DEPDIR)/test_keyFile-version.Tpo -c -o test_keyFile-version.obj `if test -f '$(top_builddir)/version.c'; then $(CYGPATH_W) '$(top_builddir)/version.c'; else $(CYGPATH_W) '$(srcdir)/$(top_builddir)/version.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_keyFile-version.Tpo $(DEPDIR)/test_keyFile-version.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$(top_builddir)/version.c' object='test_keyFile-version.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_keyFile_CFLAGS) $(CFLAGS) -c -o test_keyFile-version.obj `if test -f '$(top_builddir)/version.c'; then $(CYGPATH_W) '$(top_builddir)/version.c'; else $(CYGPATH_W) '$(srcdir)/$(top_builddir)/version.c'; fi`
-
-test_kodDatabase-kodDatabase.o: kodDatabase.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_kodDatabase_CFLAGS) $(CFLAGS) -MT test_kodDatabase-kodDatabase.o -MD -MP -MF $(DEPDIR)/test_kodDatabase-kodDatabase.Tpo -c -o test_kodDatabase-kodDatabase.o `test -f 'kodDatabase.c' || echo '$(srcdir)/'`kodDatabase.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_kodDatabase-kodDatabase.Tpo $(DEPDIR)/test_kodDatabase-kodDatabase.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kodDatabase.c' object='test_kodDatabase-kodDatabase.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_kodDatabase_CFLAGS) $(CFLAGS) -c -o test_kodDatabase-kodDatabase.o `test -f 'kodDatabase.c' || echo '$(srcdir)/'`kodDatabase.c
-
-test_kodDatabase-kodDatabase.obj: kodDatabase.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_kodDatabase_CFLAGS) $(CFLAGS) -MT test_kodDatabase-kodDatabase.obj -MD -MP -MF $(DEPDIR)/test_kodDatabase-kodDatabase.Tpo -c -o test_kodDatabase-kodDatabase.obj `if test -f 'kodDatabase.c'; then $(CYGPATH_W) 'kodDatabase.c'; else $(CYGPATH_W) '$(srcdir)/kodDatabase.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_kodDatabase-kodDatabase.Tpo $(DEPDIR)/test_kodDatabase-kodDatabase.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kodDatabase.c' object='test_kodDatabase-kodDatabase.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_kodDatabase_CFLAGS) $(CFLAGS) -c -o test_kodDatabase-kodDatabase.obj `if test -f 'kodDatabase.c'; then $(CYGPATH_W) 'kodDatabase.c'; else $(CYGPATH_W) '$(srcdir)/kodDatabase.c'; fi`
-
-test_kodDatabase-run-kodDatabase.o: run-kodDatabase.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_kodDatabase_CFLAGS) $(CFLAGS) -MT test_kodDatabase-run-kodDatabase.o -MD -MP -MF $(DEPDIR)/test_kodDatabase-run-kodDatabase.Tpo -c -o test_kodDatabase-run-kodDatabase.o `test -f 'run-kodDatabase.c' || echo '$(srcdir)/'`run-kodDatabase.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_kodDatabase-run-kodDatabase.Tpo $(DEPDIR)/test_kodDatabase-run-kodDatabase.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='run-kodDatabase.c' object='test_kodDatabase-run-kodDatabase.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_kodDatabase_CFLAGS) $(CFLAGS) -c -o test_kodDatabase-run-kodDatabase.o `test -f 'run-kodDatabase.c' || echo '$(srcdir)/'`run-kodDatabase.c
-
-test_kodDatabase-run-kodDatabase.obj: run-kodDatabase.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_kodDatabase_CFLAGS) $(CFLAGS) -MT test_kodDatabase-run-kodDatabase.obj -MD -MP -MF $(DEPDIR)/test_kodDatabase-run-kodDatabase.Tpo -c -o test_kodDatabase-run-kodDatabase.obj `if test -f 'run-kodDatabase.c'; then $(CYGPATH_W) 'run-kodDatabase.c'; else $(CYGPATH_W) '$(srcdir)/run-kodDatabase.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_kodDatabase-run-kodDatabase.Tpo $(DEPDIR)/test_kodDatabase-run-kodDatabase.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='run-kodDatabase.c' object='test_kodDatabase-run-kodDatabase.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_kodDatabase_CFLAGS) $(CFLAGS) -c -o test_kodDatabase-run-kodDatabase.obj `if test -f 'run-kodDatabase.c'; then $(CYGPATH_W) 'run-kodDatabase.c'; else $(CYGPATH_W) '$(srcdir)/run-kodDatabase.c'; fi`
-
-test_kodDatabase-version.o: $(top_builddir)/version.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_kodDatabase_CFLAGS) $(CFLAGS) -MT test_kodDatabase-version.o -MD -MP -MF $(DEPDIR)/test_kodDatabase-version.Tpo -c -o test_kodDatabase-version.o `test -f '$(top_builddir)/version.c' || echo '$(srcdir)/'`$(top_builddir)/version.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_kodDatabase-version.Tpo $(DEPDIR)/test_kodDatabase-version.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$(top_builddir)/version.c' object='test_kodDatabase-version.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_kodDatabase_CFLAGS) $(CFLAGS) -c -o test_kodDatabase-version.o `test -f '$(top_builddir)/version.c' || echo '$(srcdir)/'`$(top_builddir)/version.c
-
-test_kodDatabase-version.obj: $(top_builddir)/version.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_kodDatabase_CFLAGS) $(CFLAGS) -MT test_kodDatabase-version.obj -MD -MP -MF $(DEPDIR)/test_kodDatabase-version.Tpo -c -o test_kodDatabase-version.obj `if test -f '$(top_builddir)/version.c'; then $(CYGPATH_W) '$(top_builddir)/version.c'; else $(CYGPATH_W) '$(srcdir)/$(top_builddir)/version.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_kodDatabase-version.Tpo $(DEPDIR)/test_kodDatabase-version.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$(top_builddir)/version.c' object='test_kodDatabase-version.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_kodDatabase_CFLAGS) $(CFLAGS) -c -o test_kodDatabase-version.obj `if test -f '$(top_builddir)/version.c'; then $(CYGPATH_W) '$(top_builddir)/version.c'; else $(CYGPATH_W) '$(srcdir)/$(top_builddir)/version.c'; fi`
-
-test_kodFile-kodFile.o: kodFile.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_kodFile_CFLAGS) $(CFLAGS) -MT test_kodFile-kodFile.o -MD -MP -MF $(DEPDIR)/test_kodFile-kodFile.Tpo -c -o test_kodFile-kodFile.o `test -f 'kodFile.c' || echo '$(srcdir)/'`kodFile.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_kodFile-kodFile.Tpo $(DEPDIR)/test_kodFile-kodFile.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kodFile.c' object='test_kodFile-kodFile.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_kodFile_CFLAGS) $(CFLAGS) -c -o test_kodFile-kodFile.o `test -f 'kodFile.c' || echo '$(srcdir)/'`kodFile.c
-
-test_kodFile-kodFile.obj: kodFile.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_kodFile_CFLAGS) $(CFLAGS) -MT test_kodFile-kodFile.obj -MD -MP -MF $(DEPDIR)/test_kodFile-kodFile.Tpo -c -o test_kodFile-kodFile.obj `if test -f 'kodFile.c'; then $(CYGPATH_W) 'kodFile.c'; else $(CYGPATH_W) '$(srcdir)/kodFile.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_kodFile-kodFile.Tpo $(DEPDIR)/test_kodFile-kodFile.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='kodFile.c' object='test_kodFile-kodFile.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_kodFile_CFLAGS) $(CFLAGS) -c -o test_kodFile-kodFile.obj `if test -f 'kodFile.c'; then $(CYGPATH_W) 'kodFile.c'; else $(CYGPATH_W) '$(srcdir)/kodFile.c'; fi`
-
-test_kodFile-run-kodFile.o: run-kodFile.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_kodFile_CFLAGS) $(CFLAGS) -MT test_kodFile-run-kodFile.o -MD -MP -MF $(DEPDIR)/test_kodFile-run-kodFile.Tpo -c -o test_kodFile-run-kodFile.o `test -f 'run-kodFile.c' || echo '$(srcdir)/'`run-kodFile.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_kodFile-run-kodFile.Tpo $(DEPDIR)/test_kodFile-run-kodFile.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='run-kodFile.c' object='test_kodFile-run-kodFile.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_kodFile_CFLAGS) $(CFLAGS) -c -o test_kodFile-run-kodFile.o `test -f 'run-kodFile.c' || echo '$(srcdir)/'`run-kodFile.c
-
-test_kodFile-run-kodFile.obj: run-kodFile.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_kodFile_CFLAGS) $(CFLAGS) -MT test_kodFile-run-kodFile.obj -MD -MP -MF $(DEPDIR)/test_kodFile-run-kodFile.Tpo -c -o test_kodFile-run-kodFile.obj `if test -f 'run-kodFile.c'; then $(CYGPATH_W) 'run-kodFile.c'; else $(CYGPATH_W) '$(srcdir)/run-kodFile.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_kodFile-run-kodFile.Tpo $(DEPDIR)/test_kodFile-run-kodFile.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='run-kodFile.c' object='test_kodFile-run-kodFile.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_kodFile_CFLAGS) $(CFLAGS) -c -o test_kodFile-run-kodFile.obj `if test -f 'run-kodFile.c'; then $(CYGPATH_W) 'run-kodFile.c'; else $(CYGPATH_W) '$(srcdir)/run-kodFile.c'; fi`
-
-test_kodFile-version.o: $(top_builddir)/version.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_kodFile_CFLAGS) $(CFLAGS) -MT test_kodFile-version.o -MD -MP -MF $(DEPDIR)/test_kodFile-version.Tpo -c -o test_kodFile-version.o `test -f '$(top_builddir)/version.c' || echo '$(srcdir)/'`$(top_builddir)/version.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_kodFile-version.Tpo $(DEPDIR)/test_kodFile-version.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$(top_builddir)/version.c' object='test_kodFile-version.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_kodFile_CFLAGS) $(CFLAGS) -c -o test_kodFile-version.o `test -f '$(top_builddir)/version.c' || echo '$(srcdir)/'`$(top_builddir)/version.c
-
-test_kodFile-version.obj: $(top_builddir)/version.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_kodFile_CFLAGS) $(CFLAGS) -MT test_kodFile-version.obj -MD -MP -MF $(DEPDIR)/test_kodFile-version.Tpo -c -o test_kodFile-version.obj `if test -f '$(top_builddir)/version.c'; then $(CYGPATH_W) '$(top_builddir)/version.c'; else $(CYGPATH_W) '$(srcdir)/$(top_builddir)/version.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_kodFile-version.Tpo $(DEPDIR)/test_kodFile-version.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$(top_builddir)/version.c' object='test_kodFile-version.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_kodFile_CFLAGS) $(CFLAGS) -c -o test_kodFile-version.obj `if test -f '$(top_builddir)/version.c'; then $(CYGPATH_W) '$(top_builddir)/version.c'; else $(CYGPATH_W) '$(srcdir)/$(top_builddir)/version.c'; fi`
-
-test_networking-networking.o: networking.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_networking_CFLAGS) $(CFLAGS) -MT test_networking-networking.o -MD -MP -MF $(DEPDIR)/test_networking-networking.Tpo -c -o test_networking-networking.o `test -f 'networking.c' || echo '$(srcdir)/'`networking.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_networking-networking.Tpo $(DEPDIR)/test_networking-networking.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='networking.c' object='test_networking-networking.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_networking_CFLAGS) $(CFLAGS) -c -o test_networking-networking.o `test -f 'networking.c' || echo '$(srcdir)/'`networking.c
-
-test_networking-networking.obj: networking.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_networking_CFLAGS) $(CFLAGS) -MT test_networking-networking.obj -MD -MP -MF $(DEPDIR)/test_networking-networking.Tpo -c -o test_networking-networking.obj `if test -f 'networking.c'; then $(CYGPATH_W) 'networking.c'; else $(CYGPATH_W) '$(srcdir)/networking.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_networking-networking.Tpo $(DEPDIR)/test_networking-networking.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='networking.c' object='test_networking-networking.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_networking_CFLAGS) $(CFLAGS) -c -o test_networking-networking.obj `if test -f 'networking.c'; then $(CYGPATH_W) 'networking.c'; else $(CYGPATH_W) '$(srcdir)/networking.c'; fi`
-
-test_networking-run-networking.o: run-networking.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_networking_CFLAGS) $(CFLAGS) -MT test_networking-run-networking.o -MD -MP -MF $(DEPDIR)/test_networking-run-networking.Tpo -c -o test_networking-run-networking.o `test -f 'run-networking.c' || echo '$(srcdir)/'`run-networking.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_networking-run-networking.Tpo $(DEPDIR)/test_networking-run-networking.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='run-networking.c' object='test_networking-run-networking.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_networking_CFLAGS) $(CFLAGS) -c -o test_networking-run-networking.o `test -f 'run-networking.c' || echo '$(srcdir)/'`run-networking.c
-
-test_networking-run-networking.obj: run-networking.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_networking_CFLAGS) $(CFLAGS) -MT test_networking-run-networking.obj -MD -MP -MF $(DEPDIR)/test_networking-run-networking.Tpo -c -o test_networking-run-networking.obj `if test -f 'run-networking.c'; then $(CYGPATH_W) 'run-networking.c'; else $(CYGPATH_W) '$(srcdir)/run-networking.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_networking-run-networking.Tpo $(DEPDIR)/test_networking-run-networking.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='run-networking.c' object='test_networking-run-networking.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_networking_CFLAGS) $(CFLAGS) -c -o test_networking-run-networking.obj `if test -f 'run-networking.c'; then $(CYGPATH_W) 'run-networking.c'; else $(CYGPATH_W) '$(srcdir)/run-networking.c'; fi`
-
-test_networking-version.o: $(top_builddir)/version.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_networking_CFLAGS) $(CFLAGS) -MT test_networking-version.o -MD -MP -MF $(DEPDIR)/test_networking-version.Tpo -c -o test_networking-version.o `test -f '$(top_builddir)/version.c' || echo '$(srcdir)/'`$(top_builddir)/version.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_networking-version.Tpo $(DEPDIR)/test_networking-version.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$(top_builddir)/version.c' object='test_networking-version.o' libtool=no @AMDEPBACKSLASH@
+version.o: $(top_builddir)/version.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT version.o -MD -MP -MF $(DEPDIR)/version.Tpo -c -o version.o `test -f '$(top_builddir)/version.c' || echo '$(srcdir)/'`$(top_builddir)/version.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/version.Tpo $(DEPDIR)/version.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$(top_builddir)/version.c' object='version.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_networking_CFLAGS) $(CFLAGS) -c -o test_networking-version.o `test -f '$(top_builddir)/version.c' || echo '$(srcdir)/'`$(top_builddir)/version.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o version.o `test -f '$(top_builddir)/version.c' || echo '$(srcdir)/'`$(top_builddir)/version.c
-test_networking-version.obj: $(top_builddir)/version.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_networking_CFLAGS) $(CFLAGS) -MT test_networking-version.obj -MD -MP -MF $(DEPDIR)/test_networking-version.Tpo -c -o test_networking-version.obj `if test -f '$(top_builddir)/version.c'; then $(CYGPATH_W) '$(top_builddir)/version.c'; else $(CYGPATH_W) '$(srcdir)/$(top_builddir)/version.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_networking-version.Tpo $(DEPDIR)/test_networking-version.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$(top_builddir)/version.c' object='test_networking-version.obj' libtool=no @AMDEPBACKSLASH@
+version.obj: $(top_builddir)/version.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT version.obj -MD -MP -MF $(DEPDIR)/version.Tpo -c -o version.obj `if test -f '$(top_builddir)/version.c'; then $(CYGPATH_W) '$(top_builddir)/version.c'; else $(CYGPATH_W) '$(srcdir)/$(top_builddir)/version.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/version.Tpo $(DEPDIR)/version.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$(top_builddir)/version.c' object='version.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_networking_CFLAGS) $(CFLAGS) -c -o test_networking-version.obj `if test -f '$(top_builddir)/version.c'; then $(CYGPATH_W) '$(top_builddir)/version.c'; else $(CYGPATH_W) '$(srcdir)/$(top_builddir)/version.c'; fi`
-
-test_packetHandling-packetHandling.o: packetHandling.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_packetHandling_CFLAGS) $(CFLAGS) -MT test_packetHandling-packetHandling.o -MD -MP -MF $(DEPDIR)/test_packetHandling-packetHandling.Tpo -c -o test_packetHandling-packetHandling.o `test -f 'packetHandling.c' || echo '$(srcdir)/'`packetHandling.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_packetHandling-packetHandling.Tpo $(DEPDIR)/test_packetHandling-packetHandling.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='packetHandling.c' object='test_packetHandling-packetHandling.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_packetHandling_CFLAGS) $(CFLAGS) -c -o test_packetHandling-packetHandling.o `test -f 'packetHandling.c' || echo '$(srcdir)/'`packetHandling.c
-
-test_packetHandling-packetHandling.obj: packetHandling.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_packetHandling_CFLAGS) $(CFLAGS) -MT test_packetHandling-packetHandling.obj -MD -MP -MF $(DEPDIR)/test_packetHandling-packetHandling.Tpo -c -o test_packetHandling-packetHandling.obj `if test -f 'packetHandling.c'; then $(CYGPATH_W) 'packetHandling.c'; else $(CYGPATH_W) '$(srcdir)/packetHandling.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_packetHandling-packetHandling.Tpo $(DEPDIR)/test_packetHandling-packetHandling.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='packetHandling.c' object='test_packetHandling-packetHandling.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_packetHandling_CFLAGS) $(CFLAGS) -c -o test_packetHandling-packetHandling.obj `if test -f 'packetHandling.c'; then $(CYGPATH_W) 'packetHandling.c'; else $(CYGPATH_W) '$(srcdir)/packetHandling.c'; fi`
-
-test_packetHandling-run-packetHandling.o: run-packetHandling.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_packetHandling_CFLAGS) $(CFLAGS) -MT test_packetHandling-run-packetHandling.o -MD -MP -MF $(DEPDIR)/test_packetHandling-run-packetHandling.Tpo -c -o test_packetHandling-run-packetHandling.o `test -f 'run-packetHandling.c' || echo '$(srcdir)/'`run-packetHandling.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_packetHandling-run-packetHandling.Tpo $(DEPDIR)/test_packetHandling-run-packetHandling.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='run-packetHandling.c' object='test_packetHandling-run-packetHandling.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_packetHandling_CFLAGS) $(CFLAGS) -c -o test_packetHandling-run-packetHandling.o `test -f 'run-packetHandling.c' || echo '$(srcdir)/'`run-packetHandling.c
-
-test_packetHandling-run-packetHandling.obj: run-packetHandling.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_packetHandling_CFLAGS) $(CFLAGS) -MT test_packetHandling-run-packetHandling.obj -MD -MP -MF $(DEPDIR)/test_packetHandling-run-packetHandling.Tpo -c -o test_packetHandling-run-packetHandling.obj `if test -f 'run-packetHandling.c'; then $(CYGPATH_W) 'run-packetHandling.c'; else $(CYGPATH_W) '$(srcdir)/run-packetHandling.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_packetHandling-run-packetHandling.Tpo $(DEPDIR)/test_packetHandling-run-packetHandling.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='run-packetHandling.c' object='test_packetHandling-run-packetHandling.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_packetHandling_CFLAGS) $(CFLAGS) -c -o test_packetHandling-run-packetHandling.obj `if test -f 'run-packetHandling.c'; then $(CYGPATH_W) 'run-packetHandling.c'; else $(CYGPATH_W) '$(srcdir)/run-packetHandling.c'; fi`
-
-test_packetHandling-version.o: $(top_builddir)/version.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_packetHandling_CFLAGS) $(CFLAGS) -MT test_packetHandling-version.o -MD -MP -MF $(DEPDIR)/test_packetHandling-version.Tpo -c -o test_packetHandling-version.o `test -f '$(top_builddir)/version.c' || echo '$(srcdir)/'`$(top_builddir)/version.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_packetHandling-version.Tpo $(DEPDIR)/test_packetHandling-version.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$(top_builddir)/version.c' object='test_packetHandling-version.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_packetHandling_CFLAGS) $(CFLAGS) -c -o test_packetHandling-version.o `test -f '$(top_builddir)/version.c' || echo '$(srcdir)/'`$(top_builddir)/version.c
-
-test_packetHandling-version.obj: $(top_builddir)/version.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_packetHandling_CFLAGS) $(CFLAGS) -MT test_packetHandling-version.obj -MD -MP -MF $(DEPDIR)/test_packetHandling-version.Tpo -c -o test_packetHandling-version.obj `if test -f '$(top_builddir)/version.c'; then $(CYGPATH_W) '$(top_builddir)/version.c'; else $(CYGPATH_W) '$(srcdir)/$(top_builddir)/version.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_packetHandling-version.Tpo $(DEPDIR)/test_packetHandling-version.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$(top_builddir)/version.c' object='test_packetHandling-version.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_packetHandling_CFLAGS) $(CFLAGS) -c -o test_packetHandling-version.obj `if test -f '$(top_builddir)/version.c'; then $(CYGPATH_W) '$(top_builddir)/version.c'; else $(CYGPATH_W) '$(srcdir)/$(top_builddir)/version.c'; fi`
-
-test_packetProcessing-packetProcessing.o: packetProcessing.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_packetProcessing_CFLAGS) $(CFLAGS) -MT test_packetProcessing-packetProcessing.o -MD -MP -MF $(DEPDIR)/test_packetProcessing-packetProcessing.Tpo -c -o test_packetProcessing-packetProcessing.o `test -f 'packetProcessing.c' || echo '$(srcdir)/'`packetProcessing.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_packetProcessing-packetProcessing.Tpo $(DEPDIR)/test_packetProcessing-packetProcessing.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='packetProcessing.c' object='test_packetProcessing-packetProcessing.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_packetProcessing_CFLAGS) $(CFLAGS) -c -o test_packetProcessing-packetProcessing.o `test -f 'packetProcessing.c' || echo '$(srcdir)/'`packetProcessing.c
-
-test_packetProcessing-packetProcessing.obj: packetProcessing.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_packetProcessing_CFLAGS) $(CFLAGS) -MT test_packetProcessing-packetProcessing.obj -MD -MP -MF $(DEPDIR)/test_packetProcessing-packetProcessing.Tpo -c -o test_packetProcessing-packetProcessing.obj `if test -f 'packetProcessing.c'; then $(CYGPATH_W) 'packetProcessing.c'; else $(CYGPATH_W) '$(srcdir)/packetProcessing.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_packetProcessing-packetProcessing.Tpo $(DEPDIR)/test_packetProcessing-packetProcessing.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='packetProcessing.c' object='test_packetProcessing-packetProcessing.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_packetProcessing_CFLAGS) $(CFLAGS) -c -o test_packetProcessing-packetProcessing.obj `if test -f 'packetProcessing.c'; then $(CYGPATH_W) 'packetProcessing.c'; else $(CYGPATH_W) '$(srcdir)/packetProcessing.c'; fi`
-
-test_packetProcessing-run-packetProcessing.o: run-packetProcessing.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_packetProcessing_CFLAGS) $(CFLAGS) -MT test_packetProcessing-run-packetProcessing.o -MD -MP -MF $(DEPDIR)/test_packetProcessing-run-packetProcessing.Tpo -c -o test_packetProcessing-run-packetProcessing.o `test -f 'run-packetProcessing.c' || echo '$(srcdir)/'`run-packetProcessing.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_packetProcessing-run-packetProcessing.Tpo $(DEPDIR)/test_packetProcessing-run-packetProcessing.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='run-packetProcessing.c' object='test_packetProcessing-run-packetProcessing.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_packetProcessing_CFLAGS) $(CFLAGS) -c -o test_packetProcessing-run-packetProcessing.o `test -f 'run-packetProcessing.c' || echo '$(srcdir)/'`run-packetProcessing.c
-
-test_packetProcessing-run-packetProcessing.obj: run-packetProcessing.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_packetProcessing_CFLAGS) $(CFLAGS) -MT test_packetProcessing-run-packetProcessing.obj -MD -MP -MF $(DEPDIR)/test_packetProcessing-run-packetProcessing.Tpo -c -o test_packetProcessing-run-packetProcessing.obj `if test -f 'run-packetProcessing.c'; then $(CYGPATH_W) 'run-packetProcessing.c'; else $(CYGPATH_W) '$(srcdir)/run-packetProcessing.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_packetProcessing-run-packetProcessing.Tpo $(DEPDIR)/test_packetProcessing-run-packetProcessing.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='run-packetProcessing.c' object='test_packetProcessing-run-packetProcessing.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_packetProcessing_CFLAGS) $(CFLAGS) -c -o test_packetProcessing-run-packetProcessing.obj `if test -f 'run-packetProcessing.c'; then $(CYGPATH_W) 'run-packetProcessing.c'; else $(CYGPATH_W) '$(srcdir)/run-packetProcessing.c'; fi`
-
-test_utilities-utilities.o: utilities.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_utilities_CFLAGS) $(CFLAGS) -MT test_utilities-utilities.o -MD -MP -MF $(DEPDIR)/test_utilities-utilities.Tpo -c -o test_utilities-utilities.o `test -f 'utilities.c' || echo '$(srcdir)/'`utilities.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_utilities-utilities.Tpo $(DEPDIR)/test_utilities-utilities.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='utilities.c' object='test_utilities-utilities.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_utilities_CFLAGS) $(CFLAGS) -c -o test_utilities-utilities.o `test -f 'utilities.c' || echo '$(srcdir)/'`utilities.c
-
-test_utilities-utilities.obj: utilities.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_utilities_CFLAGS) $(CFLAGS) -MT test_utilities-utilities.obj -MD -MP -MF $(DEPDIR)/test_utilities-utilities.Tpo -c -o test_utilities-utilities.obj `if test -f 'utilities.c'; then $(CYGPATH_W) 'utilities.c'; else $(CYGPATH_W) '$(srcdir)/utilities.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_utilities-utilities.Tpo $(DEPDIR)/test_utilities-utilities.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='utilities.c' object='test_utilities-utilities.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_utilities_CFLAGS) $(CFLAGS) -c -o test_utilities-utilities.obj `if test -f 'utilities.c'; then $(CYGPATH_W) 'utilities.c'; else $(CYGPATH_W) '$(srcdir)/utilities.c'; fi`
-
-test_utilities-run-utilities.o: run-utilities.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_utilities_CFLAGS) $(CFLAGS) -MT test_utilities-run-utilities.o -MD -MP -MF $(DEPDIR)/test_utilities-run-utilities.Tpo -c -o test_utilities-run-utilities.o `test -f 'run-utilities.c' || echo '$(srcdir)/'`run-utilities.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_utilities-run-utilities.Tpo $(DEPDIR)/test_utilities-run-utilities.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='run-utilities.c' object='test_utilities-run-utilities.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_utilities_CFLAGS) $(CFLAGS) -c -o test_utilities-run-utilities.o `test -f 'run-utilities.c' || echo '$(srcdir)/'`run-utilities.c
-
-test_utilities-run-utilities.obj: run-utilities.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_utilities_CFLAGS) $(CFLAGS) -MT test_utilities-run-utilities.obj -MD -MP -MF $(DEPDIR)/test_utilities-run-utilities.Tpo -c -o test_utilities-run-utilities.obj `if test -f 'run-utilities.c'; then $(CYGPATH_W) 'run-utilities.c'; else $(CYGPATH_W) '$(srcdir)/run-utilities.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_utilities-run-utilities.Tpo $(DEPDIR)/test_utilities-run-utilities.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='run-utilities.c' object='test_utilities-run-utilities.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_utilities_CFLAGS) $(CFLAGS) -c -o test_utilities-run-utilities.obj `if test -f 'run-utilities.c'; then $(CYGPATH_W) 'run-utilities.c'; else $(CYGPATH_W) '$(srcdir)/run-utilities.c'; fi`
-
-.cpp.o:
-@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
-@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $<
-
-.cpp.obj:
-@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
-@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
-
-.cpp.lo:
-@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
-@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LTCXXCOMPILE) -c -o $@ $<
-
-tests_main.o: ../tests_main.cpp
-@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT tests_main.o -MD -MP -MF $(DEPDIR)/tests_main.Tpo -c -o tests_main.o `test -f '../tests_main.cpp' || echo '$(srcdir)/'`../tests_main.cpp
-@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/tests_main.Tpo $(DEPDIR)/tests_main.Po
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='../tests_main.cpp' object='tests_main.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o tests_main.o `test -f '../tests_main.cpp' || echo '$(srcdir)/'`../tests_main.cpp
-
-tests_main.obj: ../tests_main.cpp
-@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT tests_main.obj -MD -MP -MF $(DEPDIR)/tests_main.Tpo -c -o tests_main.obj `if test -f '../tests_main.cpp'; then $(CYGPATH_W) '../tests_main.cpp'; else $(CYGPATH_W) '$(srcdir)/../tests_main.cpp'; fi`
-@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/tests_main.Tpo $(DEPDIR)/tests_main.Po
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='../tests_main.cpp' object='tests_main.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o tests_main.obj `if test -f '../tests_main.cpp'; then $(CYGPATH_W) '../tests_main.cpp'; else $(CYGPATH_W) '$(srcdir)/../tests_main.cpp'; fi`
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o version.obj `if test -f '$(top_builddir)/version.c'; then $(CYGPATH_W) '$(top_builddir)/version.c'; else $(CYGPATH_W) '$(srcdir)/$(top_builddir)/version.c'; fi`
mostlyclean-libtool:
-rm -f *.lo
@@ -1687,6 +1284,13 @@ test-kodFile.log: test-kodFile$(EXEEXT)
--log-file $$b.log --trs-file $$b.trs \
$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
"$$tst" $(AM_TESTS_FD_REDIRECT)
+test-log.log: test-log$(EXEEXT)
+ @p='test-log$(EXEEXT)'; \
+ b='test-log'; \
+ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+ --log-file $$b.log --trs-file $$b.trs \
+ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+ "$$tst" $(AM_TESTS_FD_REDIRECT)
test-networking.log: test-networking$(EXEEXT)
@p='test-networking$(EXEEXT)'; \
b='test-networking'; \
@@ -1715,13 +1319,6 @@ test-utilities.log: test-utilities$(EXEEXT)
--log-file $$b.log --trs-file $$b.trs \
$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
"$$tst" $(AM_TESTS_FD_REDIRECT)
-tests.log: tests$(EXEEXT)
- @p='tests$(EXEEXT)'; \
- b='tests'; \
- $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
- --log-file $$b.log --trs-file $$b.trs \
- $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
- "$$tst" $(AM_TESTS_FD_REDIRECT)
.test.log:
@p='$<'; \
$(am__set_b); \
@@ -1926,6 +1523,9 @@ $(srcdir)/run-utilities.c: $(srcdir)/utilities.c $(std_unity_list)
$(srcdir)/run-crypto.c: $(srcdir)/crypto.c $(std_unity_list)
$(run_unity) crypto.c run-crypto.c
+$(srcdir)/run-t-log.c: $(srcdir)/t-log.c $(std_unity_list)
+ $(run_unity) t-log.c run-t-log.c
+
check-libsntp: ../libsntp.a
@echo stamp > $@
@@ -1938,10 +1538,10 @@ check-libntp: ../../libntp/libntp.a
../../libntp/libntp.a:
cd ../../libntp && $(MAKE) $(AM_MAKEFLAGS) libntp.a
-check-libunity: ../sntp/unity/libunity.a
+check-libunity: ../unity/libunity.a
@echo stamp > $@
-../sntp/unity/libunity.a:
+../unity/libunity.a:
cd ../unity && $(MAKE) $(AM_MAKEFLAGS) libunity.a
$(DEPDIR)/deps-ver: $(top_srcdir)/deps-ver
@[ -f $@ ] || \
diff --git a/contrib/ntp/sntp/tests/crypto.c b/contrib/ntp/sntp/tests/crypto.c
index 254469e..82d2859 100644
--- a/contrib/ntp/sntp/tests/crypto.c
+++ b/contrib/ntp/sntp/tests/crypto.c
@@ -8,7 +8,17 @@
#define MD5_LENGTH 16
#define SHA1_LENGTH 20
-void test_MakeMd5Mac(void) {
+
+void test_MakeMd5Mac(void);
+void test_MakeSHA1Mac(void);
+void test_VerifyCorrectMD5(void);
+void test_VerifySHA1(void);
+void test_VerifyFailure(void);
+void test_PacketSizeNotMultipleOfFourBytes(void);
+
+
+void
+test_MakeMd5Mac(void) {
const char* PKT_DATA = "abcdefgh0123";
const int PKT_LEN = strlen(PKT_DATA);
@@ -30,7 +40,8 @@ void test_MakeMd5Mac(void) {
}
-void test_MakeSHA1Mac(void) {
+void
+test_MakeSHA1Mac(void) {
#ifdef OPENSSL
const char* PKT_DATA = "abcdefgh0123";
const int PKT_LEN = strlen(PKT_DATA);
@@ -49,14 +60,15 @@ void test_MakeSHA1Mac(void) {
TEST_ASSERT_EQUAL(SHA1_LENGTH,
make_mac((char*)PKT_DATA, PKT_LEN, SHA1_LENGTH, &sha1, actual));
- TEST_ASSERT_TRUE(memcmp(EXPECTED_DIGEST, actual, SHA1_LENGTH) == 0);
+ TEST_ASSERT_EQUAL_MEMORY(EXPECTED_DIGEST, actual, SHA1_LENGTH);
#else
TEST_IGNORE_MESSAGE("OpenSSL not found, skipping...");
#endif /* OPENSSL */
}
-void test_VerifyCorrectMD5(void) {
+void
+test_VerifyCorrectMD5(void) {
const char* PKT_DATA =
"sometestdata" // Data
"\0\0\0\0" // Key-ID (unused)
@@ -75,7 +87,8 @@ void test_VerifyCorrectMD5(void) {
}
-void test_VerifySHA1(void) {
+void
+test_VerifySHA1(void) {
#ifdef OPENSSL
const char* PKT_DATA =
"sometestdata" // Data
@@ -97,7 +110,8 @@ void test_VerifySHA1(void) {
#endif /* OPENSSL */
}
-void test_VerifyFailure(void) {
+void
+test_VerifyFailure(void) {
/* We use a copy of the MD5 verification code, but modify
* the last bit to make sure verification fails. */
const char* PKT_DATA =
@@ -117,7 +131,9 @@ void test_VerifyFailure(void) {
TEST_ASSERT_FALSE(auth_md5((char*)PKT_DATA, PKT_LEN, MD5_LENGTH, &md5));
}
-void test_PacketSizeNotMultipleOfFourBytes(void) {
+
+void
+test_PacketSizeNotMultipleOfFourBytes(void) {
const char* PKT_DATA = "123456";
const int PKT_LEN = 6;
char actual[MD5_LENGTH];
@@ -131,4 +147,3 @@ void test_PacketSizeNotMultipleOfFourBytes(void) {
TEST_ASSERT_EQUAL(0, make_mac((char*)PKT_DATA, PKT_LEN, MD5_LENGTH, &md5, actual));
}
-
diff --git a/contrib/ntp/sntp/tests/fileHandlingTest.c b/contrib/ntp/sntp/tests/fileHandlingTest.c
new file mode 100644
index 0000000..ce3f0de
--- /dev/null
+++ b/contrib/ntp/sntp/tests/fileHandlingTest.c
@@ -0,0 +1,74 @@
+
+#include "config.h"
+#include "stdlib.h"
+#include "sntptest.h"
+
+#include "fileHandlingTest.h" //required because of the h.in thingy
+
+#include <string.h>
+#include <unistd.h>
+
+/*
+enum DirectoryType {
+ INPUT_DIR = 0,
+ OUTPUT_DIR = 1
+};
+*/
+//extern const char srcdir[];
+
+const char *
+CreatePath(const char* filename, enum DirectoryType argument) {
+ const char srcdir[] = SRCDIR_DEF;//"@abs_srcdir@/data/";
+ char * path = emalloc (sizeof (char) * (strlen(srcdir) + 256));
+
+ //char cwd[1024];
+
+ strcpy(path, srcdir);
+ strcat(path, filename);
+
+ return path;
+}
+
+
+int
+GetFileSize(FILE *file) {
+ fseek(file, 0L, SEEK_END);
+ int length = ftell(file);
+ fseek(file, 0L, SEEK_SET);
+
+ return length;
+}
+
+
+bool
+CompareFileContent(FILE* expected, FILE* actual) {
+ int currentLine = 1;
+
+ char actualLine[1024];
+ char expectedLine[1024];
+ size_t lenAct = sizeof actualLine;
+ size_t lenExp = sizeof expectedLine;
+
+ while ( ( (fgets(actualLine, lenAct, actual)) != NULL)
+ && ( (fgets(expectedLine, lenExp, expected)) != NULL )
+ ) {
+
+
+ if( strcmp(actualLine,expectedLine) !=0 ){
+ printf("Comparision failed on line %d",currentLine);
+ return FALSE;
+ }
+
+ currentLine++;
+ }
+
+ return TRUE;
+}
+
+
+void
+ClearFile(const char * filename) {
+ if (!truncate(filename, 0))
+ exit(1);
+}
+
diff --git a/contrib/ntp/sntp/tests/fileHandlingTest.h b/contrib/ntp/sntp/tests/fileHandlingTest.h
deleted file mode 100644
index 38c3fa6..0000000
--- a/contrib/ntp/sntp/tests/fileHandlingTest.h
+++ /dev/null
@@ -1,100 +0,0 @@
-#ifndef FILE_HANDLING_TEST_H
-#define FILE_HANDLING_TEST_H
-
-#include "stdlib.h"
-#include "sntptest.h"
-
-#include <string.h>
-#include <unistd.h>
-
-
-enum DirectoryType {
- INPUT_DIR = 0,
- OUTPUT_DIR = 1
-};
-
-const char * CreatePath(const char* filename, enum DirectoryType argument) {
-
- char * path = malloc (sizeof (char) * 256);
-
- /*
- if (m_params.size() >= argument + 1) {
- path = m_params[argument];
- }
-
- if (path[path.size()-1] != DIR_SEP && !path.empty()) {
- path.append(1, DIR_SEP);
- }
- */
- //strcpy(path,filename);
- //path.append(filename);
-
- //return path;
-
- char cwd[1024];
- if (getcwd(cwd, sizeof(cwd)) != NULL)
- printf("Current working dir: %s\n", cwd);
-
- printf("builddir is <.>\n");
- printf("abs_srcdir is </deacon/backroom/snaps/ntp-stable/sntp/tests>\n");
- strcpy(path,"/deacon/backroom/snaps/ntp-stable/sntp/tests/data/");
-
- //strcpy(path,"");
- strcat(path,filename);
- printf("PATH IS : %s\n",path);
- return path;
-}
-
-int GetFileSize(FILE *file) {
-
- fseek(file, 0L, SEEK_END);
- int length = ftell(file);
- fseek(file, 0L, SEEK_SET);
-
- //int initial = file.tellg();
-
- //file.seekg(0, ios::end);
- //int length = file.tellg();
- //file.seekg(initial);
-
- return length;
-}
-
-bool CompareFileContent(FILE* expected, FILE* actual) {
- int currentLine = 1;
-
- char actualLine[1024];
- char expectedLine[1024];
- size_t lenAct = sizeof actualLine;
- size_t lenExp = sizeof expectedLine;
-
- while ( ( (fgets(actualLine, lenAct, actual)) != NULL)
- && ( (fgets(expectedLine, lenExp, expected)) != NULL )
- ) {
-
- //printf("%s",actualLine);
- //printf("%s",expectedLine);
-
- if( strcmp(actualLine,expectedLine) !=0 ){
- printf("Comparision failed on line %d",currentLine);
- return FALSE;
- }
-
- //I removed this and modified the test kodFile.c, because there shouldn't be any ASSERTs in .h files!
- //TEST_ASSERT_EQUAL_STRING(actualLine,expectedLine);//EXPECT_EQ(expectedLine, actualLine) << "Comparision failed on line " << currentLine;
- currentLine++;
- }
-
- return TRUE;
-}
-
-void ClearFile(const char * filename) {
- FILE * clear = fopen(filename, "w");//ios::trunc); //similar to truncate, I GUESS???!
-
- //I removed this because there shouldn't be any ASSERTs in .h files!
- //TEST_ASSERT_TRUE(clear != NULL);
- fclose(clear);
-}
-
-
-#endif // FILE_HANDLING_TEST_H
diff --git a/contrib/ntp/sntp/tests/fileHandlingTest.h.in b/contrib/ntp/sntp/tests/fileHandlingTest.h.in
index 8ff9d34..e7d99ee 100644
--- a/contrib/ntp/sntp/tests/fileHandlingTest.h.in
+++ b/contrib/ntp/sntp/tests/fileHandlingTest.h.in
@@ -1,6 +1,7 @@
#ifndef FILE_HANDLING_TEST_H
#define FILE_HANDLING_TEST_H
+#include "config.h"
#include "stdlib.h"
#include "sntptest.h"
@@ -13,88 +14,22 @@ enum DirectoryType {
OUTPUT_DIR = 1
};
-const char * CreatePath(const char* filename, enum DirectoryType argument) {
-
- char * path = malloc (sizeof (char) * 256);
+#define SRCDIR_DEF "@abs_srcdir@/data/";
+//const char srcdir[] = "@abs_srcdir@/data/";
- /*
- if (m_params.size() >= argument + 1) {
- path = m_params[argument];
- }
+const char *
+CreatePath(const char* filename, enum DirectoryType argument);
- if (path[path.size()-1] != DIR_SEP && !path.empty()) {
- path.append(1, DIR_SEP);
- }
- */
- //strcpy(path,filename);
- //path.append(filename);
- //return path;
+int
+GetFileSize(FILE *file);
- char cwd[1024];
- if (getcwd(cwd, sizeof(cwd)) != NULL)
- printf("Current working dir: %s\n", cwd);
-
- printf("builddir is <@builddir@>\n");
- printf("abs_srcdir is <@abs_srcdir@>\n");
- strcpy(path,"@abs_srcdir@/data/");
- //strcpy(path,"");
- strcat(path,filename);
- printf("PATH IS : %s\n",path);
- return path;
-}
+bool
+CompareFileContent(FILE* expected, FILE* actual);
-int GetFileSize(FILE *file) {
-
- fseek(file, 0L, SEEK_END);
- int length = ftell(file);
- fseek(file, 0L, SEEK_SET);
-
- //int initial = file.tellg();
-
- //file.seekg(0, ios::end);
- //int length = file.tellg();
- //file.seekg(initial);
-
- return length;
-}
-
-bool CompareFileContent(FILE* expected, FILE* actual) {
- int currentLine = 1;
-
- char actualLine[1024];
- char expectedLine[1024];
- size_t lenAct = sizeof actualLine;
- size_t lenExp = sizeof expectedLine;
-
- while ( ( (fgets(actualLine, lenAct, actual)) != NULL)
- && ( (fgets(expectedLine, lenExp, expected)) != NULL )
- ) {
-
- //printf("%s",actualLine);
- //printf("%s",expectedLine);
-
- if( strcmp(actualLine,expectedLine) !=0 ){
- printf("Comparision failed on line %d",currentLine);
- return FALSE;
- }
-
- //I removed this and modified the test kodFile.c, because there shouldn't be any ASSERTs in .h files!
- //TEST_ASSERT_EQUAL_STRING(actualLine,expectedLine);//EXPECT_EQ(expectedLine, actualLine) << "Comparision failed on line " << currentLine;
- currentLine++;
- }
-
- return TRUE;
-}
-
-void ClearFile(const char * filename) {
- FILE * clear = fopen(filename, "w");//ios::trunc); //similar to truncate, I GUESS???!
-
- //I removed this because there shouldn't be any ASSERTs in .h files!
- //TEST_ASSERT_TRUE(clear != NULL);
- fclose(clear);
-}
+void
+ClearFile(const char * filename) ;
#endif // FILE_HANDLING_TEST_H
diff --git a/contrib/ntp/sntp/tests/g_fileHandlingTest.h b/contrib/ntp/sntp/tests/g_fileHandlingTest.h
deleted file mode 100644
index 7c8a78a..0000000
--- a/contrib/ntp/sntp/tests/g_fileHandlingTest.h
+++ /dev/null
@@ -1,64 +0,0 @@
-#ifndef FILE_HANDLING_TEST_H
-#define FILE_HANDLING_TEST_H
-
-#include "g_sntptest.h"
-
-#include <fstream>
-#include <string>
-
-using std::ifstream;
-using std::string;
-using std::ios;
-
-class fileHandlingTest : public sntptest {
-protected:
- enum DirectoryType {
- INPUT_DIR = 0,
- OUTPUT_DIR = 1
- };
-
- std::string CreatePath(const char* filename, DirectoryType argument) {
- std::string path;
-
- if (m_params.size() >= argument + 1) {
- path = m_params[argument];
- }
-
- if (path[path.size()-1] != DIR_SEP && !path.empty()) {
- path.append(1, DIR_SEP);
- }
- path.append(filename);
-
- return path;
- }
-
- int GetFileSize(ifstream& file) {
- int initial = file.tellg();
-
- file.seekg(0, ios::end);
- int length = file.tellg();
- file.seekg(initial);
-
- return length;
- }
-
- void CompareFileContent(ifstream& expected, ifstream& actual) {
- int currentLine = 1;
- while (actual.good() && expected.good()) {
- string actualLine, expectedLine;
- getline(actual, actualLine);
- getline(expected, expectedLine);
-
- EXPECT_EQ(expectedLine, actualLine) << "Comparision failed on line " << currentLine;
- currentLine++;
- }
- }
-
- void ClearFile(const std::string& filename) {
- std::ofstream clear(filename.c_str(), ios::trunc);
- ASSERT_TRUE(clear.good());
- clear.close();
- }
-};
-
-#endif // FILE_HANDLING_TEST_H
diff --git a/contrib/ntp/sntp/tests/g_networking.cpp b/contrib/ntp/sntp/tests/g_networking.cpp
deleted file mode 100644
index d75f4a5..0000000
--- a/contrib/ntp/sntp/tests/g_networking.cpp
+++ /dev/null
@@ -1,5 +0,0 @@
-#include "g_sntptest.h"
-
-extern "C" {
-#include "networking.h"
-};
diff --git a/contrib/ntp/sntp/tests/g_packetHandling.cpp b/contrib/ntp/sntp/tests/g_packetHandling.cpp
deleted file mode 100644
index bd5b14e..0000000
--- a/contrib/ntp/sntp/tests/g_packetHandling.cpp
+++ /dev/null
@@ -1,264 +0,0 @@
-#include "g_sntptest.h"
-
-extern "C" {
-#include "kod_management.h"
-#include "main.h"
-#include "networking.h"
-#include "ntp.h"
-};
-
-class mainTest : public sntptest {
-protected:
- ::testing::AssertionResult LfpEquality(const l_fp &expected, const l_fp &actual) {
- if (L_ISEQU(&expected, &actual)) {
- return ::testing::AssertionSuccess();
- } else {
- return ::testing::AssertionFailure()
- << " expected: " << lfptoa(&expected, FRACTION_PREC)
- << " (" << expected.l_ui << "." << expected.l_uf << ")"
- << " but was: " << lfptoa(&actual, FRACTION_PREC)
- << " (" << actual.l_ui << "." << actual.l_uf << ")";
- }
- }
-};
-
-TEST_F(mainTest, GenerateUnauthenticatedPacket) {
- pkt testpkt;
-
- timeval xmt;
- GETTIMEOFDAY(&xmt, NULL);
- xmt.tv_sec += JAN_1970;
-
- EXPECT_EQ(LEN_PKT_NOMAC,
- generate_pkt(&testpkt, &xmt, 0, NULL));
-
- EXPECT_EQ(LEAP_NOTINSYNC, PKT_LEAP(testpkt.li_vn_mode));
- EXPECT_EQ(NTP_VERSION, PKT_VERSION(testpkt.li_vn_mode));
- EXPECT_EQ(MODE_CLIENT, PKT_MODE(testpkt.li_vn_mode));
-
- EXPECT_EQ(STRATUM_UNSPEC, PKT_TO_STRATUM(testpkt.stratum));
- EXPECT_EQ(8, testpkt.ppoll);
-
- l_fp expected_xmt, actual_xmt;
- TVTOTS(&xmt, &expected_xmt);
- NTOHL_FP(&testpkt.xmt, &actual_xmt);
- EXPECT_TRUE(LfpEquality(expected_xmt, actual_xmt));
-}
-
-TEST_F(mainTest, GenerateAuthenticatedPacket) {
- key testkey;
- testkey.next = NULL;
- testkey.key_id = 30;
- testkey.key_len = 9;
- memcpy(testkey.key_seq, "123456789", testkey.key_len);
- memcpy(testkey.type, "MD5", 3);
-
- pkt testpkt;
-
- timeval xmt;
- GETTIMEOFDAY(&xmt, NULL);
- xmt.tv_sec += JAN_1970;
-
- const int EXPECTED_PKTLEN = LEN_PKT_NOMAC + MAX_MD5_LEN;
-
- EXPECT_EQ(EXPECTED_PKTLEN,
- generate_pkt(&testpkt, &xmt, testkey.key_id, &testkey));
-
- EXPECT_EQ(LEAP_NOTINSYNC, PKT_LEAP(testpkt.li_vn_mode));
- EXPECT_EQ(NTP_VERSION, PKT_VERSION(testpkt.li_vn_mode));
- EXPECT_EQ(MODE_CLIENT, PKT_MODE(testpkt.li_vn_mode));
-
- EXPECT_EQ(STRATUM_UNSPEC, PKT_TO_STRATUM(testpkt.stratum));
- EXPECT_EQ(8, testpkt.ppoll);
-
- l_fp expected_xmt, actual_xmt;
- TVTOTS(&xmt, &expected_xmt);
- NTOHL_FP(&testpkt.xmt, &actual_xmt);
- EXPECT_TRUE(LfpEquality(expected_xmt, actual_xmt));
-
- EXPECT_EQ(testkey.key_id, ntohl(testpkt.exten[0]));
-
- char expected_mac[MAX_MD5_LEN];
- ASSERT_EQ(MAX_MD5_LEN - 4, // Remove the key_id, only keep the mac.
- make_mac((char*)&testpkt, LEN_PKT_NOMAC, MAX_MD5_LEN, &testkey, expected_mac));
- EXPECT_TRUE(memcmp(expected_mac, (char*)&testpkt.exten[1], MAX_MD5_LEN -4) == 0);
-}
-
-TEST_F(mainTest, OffsetCalculationPositiveOffset) {
- pkt rpkt;
-
- rpkt.precision = -16; // 0,000015259
- rpkt.rootdelay = HTONS_FP(DTOUFP(0.125));
- rpkt.rootdisp = HTONS_FP(DTOUFP(0.25));
- // Synch Distance: (0.125+0.25)/2.0 == 0.1875
- l_fp reftime;
- get_systime(&reftime);
- HTONL_FP(&reftime, &rpkt.reftime);
-
- l_fp tmp;
-
- // T1 - Originate timestamp
- tmp.l_ui = 1000000000UL;
- tmp.l_uf = 0UL;
- HTONL_FP(&tmp, &rpkt.org);
-
- // T2 - Receive timestamp
- tmp.l_ui = 1000000001UL;
- tmp.l_uf = 2147483648UL;
- HTONL_FP(&tmp, &rpkt.rec);
-
- // T3 - Transmit timestamp
- tmp.l_ui = 1000000002UL;
- tmp.l_uf = 0UL;
- HTONL_FP(&tmp, &rpkt.xmt);
-
- // T4 - Destination timestamp as standard timeval
- tmp.l_ui = 1000000001UL;
- tmp.l_uf = 0UL;
- timeval dst;
- TSTOTV(&tmp, &dst);
- dst.tv_sec -= JAN_1970;
-
- double offset, precision, synch_distance;
- offset_calculation(&rpkt, LEN_PKT_NOMAC, &dst, &offset, &precision, &synch_distance);
-
- EXPECT_DOUBLE_EQ(1.25, offset);
- EXPECT_DOUBLE_EQ(1. / ULOGTOD(16), precision);
- // 1.1250150000000001 ?
- EXPECT_DOUBLE_EQ(1.125015, synch_distance);
-}
-
-TEST_F(mainTest, OffsetCalculationNegativeOffset) {
- pkt rpkt;
-
- rpkt.precision = -1;
- rpkt.rootdelay = HTONS_FP(DTOUFP(0.5));
- rpkt.rootdisp = HTONS_FP(DTOUFP(0.5));
- // Synch Distance is (0.5+0.5)/2.0, or 0.5
- l_fp reftime;
- get_systime(&reftime);
- HTONL_FP(&reftime, &rpkt.reftime);
-
- l_fp tmp;
-
- // T1 - Originate timestamp
- tmp.l_ui = 1000000001UL;
- tmp.l_uf = 0UL;
- HTONL_FP(&tmp, &rpkt.org);
-
- // T2 - Receive timestamp
- tmp.l_ui = 1000000000UL;
- tmp.l_uf = 2147483648UL;
- HTONL_FP(&tmp, &rpkt.rec);
-
- // T3 - Transmit timestamp
- tmp.l_ui = 1000000001UL;
- tmp.l_uf = 2147483648UL;
- HTONL_FP(&tmp, &rpkt.xmt);
-
- // T4 - Destination timestamp as standard timeval
- tmp.l_ui = 1000000003UL;
- tmp.l_uf = 0UL;
- timeval dst;
- TSTOTV(&tmp, &dst);
- dst.tv_sec -= JAN_1970;
-
- double offset, precision, synch_distance;
- offset_calculation(&rpkt, LEN_PKT_NOMAC, &dst, &offset, &precision, &synch_distance);
-
- EXPECT_DOUBLE_EQ(-1, offset);
- EXPECT_DOUBLE_EQ(1. / ULOGTOD(1), precision);
- EXPECT_DOUBLE_EQ(1.3333483333333334, synch_distance);
-}
-
-TEST_F(mainTest, HandleUnusableServer) {
- pkt rpkt;
- sockaddr_u host;
- int rpktl;
-
- ZERO(rpkt);
- ZERO(host);
- rpktl = SERVER_UNUSEABLE;
- EXPECT_EQ(-1, handle_pkt(rpktl, &rpkt, &host, ""));
-}
-
-TEST_F(mainTest, HandleUnusablePacket) {
- pkt rpkt;
- sockaddr_u host;
- int rpktl;
-
- ZERO(rpkt);
- ZERO(host);
- rpktl = PACKET_UNUSEABLE;
- EXPECT_EQ(1, handle_pkt(rpktl, &rpkt, &host, ""));
-}
-
-TEST_F(mainTest, HandleServerAuthenticationFailure) {
- pkt rpkt;
- sockaddr_u host;
- int rpktl;
-
- ZERO(rpkt);
- ZERO(host);
- rpktl = SERVER_AUTH_FAIL;
- EXPECT_EQ(1, handle_pkt(rpktl, &rpkt, &host, ""));
-}
-
-TEST_F(mainTest, HandleKodDemobilize) {
- const char * HOSTNAME = "192.0.2.1";
- const char * REASON = "DENY";
- pkt rpkt;
- sockaddr_u host;
- int rpktl;
- kod_entry * entry;
-
- rpktl = KOD_DEMOBILIZE;
- ZERO(rpkt);
- memcpy(&rpkt.refid, REASON, 4);
- ZERO(host);
- host.sa4.sin_family = AF_INET;
- host.sa4.sin_addr.s_addr = inet_addr(HOSTNAME);
-
- // Test that the KOD-entry is added to the database.
- kod_init_kod_db("/dev/null", TRUE);
-
- EXPECT_EQ(1, handle_pkt(rpktl, &rpkt, &host, HOSTNAME));
-
- ASSERT_EQ(1, search_entry(HOSTNAME, &entry));
- EXPECT_TRUE(memcmp(REASON, entry->type, 4) == 0);
-}
-
-TEST_F(mainTest, HandleKodRate) {
- pkt rpkt;
- sockaddr_u host;
- int rpktl;
-
- ZERO(rpkt);
- ZERO(host);
- rpktl = KOD_RATE;
- EXPECT_EQ(1, handle_pkt(rpktl, &rpkt, &host, ""));
-}
-
-TEST_F(mainTest, HandleCorrectPacket) {
- pkt rpkt;
- sockaddr_u host;
- int rpktl;
- l_fp now;
-
- // We don't want our testing code to actually change the system clock.
- ASSERT_FALSE(ENABLED_OPT(STEP));
- ASSERT_FALSE(ENABLED_OPT(SLEW));
-
- get_systime(&now);
- HTONL_FP(&now, &rpkt.reftime);
- HTONL_FP(&now, &rpkt.org);
- HTONL_FP(&now, &rpkt.rec);
- HTONL_FP(&now, &rpkt.xmt);
- rpktl = LEN_PKT_NOMAC;
- ZERO(host);
- AF(&host) = AF_INET;
-
- EXPECT_EQ(0, handle_pkt(rpktl, &rpkt, &host, ""));
-}
-
-/* packetHandling.cpp */
diff --git a/contrib/ntp/sntp/tests/g_packetProcessing.cpp b/contrib/ntp/sntp/tests/g_packetProcessing.cpp
deleted file mode 100644
index 85659a4..0000000
--- a/contrib/ntp/sntp/tests/g_packetProcessing.cpp
+++ /dev/null
@@ -1,334 +0,0 @@
-#include "g_sntptest.h"
-
-extern "C" {
-#include "networking.h"
-#include "ntp_stdlib.h"
-};
-
-#include <sstream>
-#include <string>
-
-// Hacks into the key database.
-extern key* key_ptr;
-extern int key_cnt;
-
-class packetProcessingTest : public sntptest {
-protected:
- pkt testpkt;
- pkt testspkt;
- sockaddr_u testsock;
- bool restoreKeyDb;
-
- void PrepareAuthenticationTest(int key_id,
- int key_len,
- const char* type,
- const void* key_seq) {
- std::stringstream ss;
- ss << key_id;
-
- ActivateOption("-a", ss.str().c_str());
-
- key_cnt = 1;
- key_ptr = new key;
- key_ptr->next = NULL;
- key_ptr->key_id = key_id;
- key_ptr->key_len = key_len;
- memcpy(key_ptr->type, "MD5", 3);
-
- ASSERT_TRUE(key_len < sizeof(key_ptr->key_seq));
-
- memcpy(key_ptr->key_seq, key_seq, key_ptr->key_len);
- restoreKeyDb = true;
- }
-
- void PrepareAuthenticationTest(int key_id,
- int key_len,
- const void* key_seq) {
- PrepareAuthenticationTest(key_id, key_len, "MD5", key_seq);
- }
-
- virtual void SetUp() {
- restoreKeyDb = false;
-
- /* Initialize the test packet and socket,
- * so they contain at least some valid data. */
- testpkt.li_vn_mode = PKT_LI_VN_MODE(LEAP_NOWARNING, NTP_VERSION,
- MODE_SERVER);
- testpkt.stratum = STRATUM_REFCLOCK;
- memcpy(&testpkt.refid, "GPS\0", 4);
-
- /* Set the origin timestamp of the received packet to the
- * same value as the transmit timestamp of the sent packet. */
- l_fp tmp;
- tmp.l_ui = 1000UL;
- tmp.l_uf = 0UL;
-
- HTONL_FP(&tmp, &testpkt.org);
- HTONL_FP(&tmp, &testspkt.xmt);
- }
-
- virtual void TearDown() {
- if (restoreKeyDb) {
- key_cnt = 0;
- delete key_ptr;
- key_ptr = NULL;
- }
- }
-};
-
-TEST_F(packetProcessingTest, TooShortLength) {
- EXPECT_EQ(PACKET_UNUSEABLE,
- process_pkt(&testpkt, &testsock, LEN_PKT_NOMAC - 1,
- MODE_SERVER, &testspkt, "UnitTest"));
- EXPECT_EQ(PACKET_UNUSEABLE,
- process_pkt(&testpkt, &testsock, LEN_PKT_NOMAC - 1,
- MODE_BROADCAST, &testspkt, "UnitTest"));
-}
-
-TEST_F(packetProcessingTest, LengthNotMultipleOfFour) {
- EXPECT_EQ(PACKET_UNUSEABLE,
- process_pkt(&testpkt, &testsock, LEN_PKT_NOMAC + 6,
- MODE_SERVER, &testspkt, "UnitTest"));
- EXPECT_EQ(PACKET_UNUSEABLE,
- process_pkt(&testpkt, &testsock, LEN_PKT_NOMAC + 3,
- MODE_BROADCAST, &testspkt, "UnitTest"));
-}
-
-TEST_F(packetProcessingTest, TooShortExtensionFieldLength) {
- /* The lower 16-bits are the length of the extension field.
- * This lengths must be multiples of 4 bytes, which gives
- * a minimum of 4 byte extension field length. */
- testpkt.exten[7] = htonl(3); // 3 bytes is too short.
-
- /* We send in a pkt_len of header size + 4 byte extension
- * header + 24 byte MAC, this prevents the length error to
- * be caught at an earlier stage */
- int pkt_len = LEN_PKT_NOMAC + 4 + 24;
-
- EXPECT_EQ(PACKET_UNUSEABLE,
- process_pkt(&testpkt, &testsock, pkt_len,
- MODE_SERVER, &testspkt, "UnitTest"));
-}
-
-TEST_F(packetProcessingTest, UnauthenticatedPacketReject) {
- // Activate authentication option
- ActivateOption("-a", "123");
- ASSERT_TRUE(ENABLED_OPT(AUTHENTICATION));
-
- int pkt_len = LEN_PKT_NOMAC;
-
- // We demand authentication, but no MAC header is present.
- EXPECT_EQ(SERVER_AUTH_FAIL,
- process_pkt(&testpkt, &testsock, pkt_len,
- MODE_SERVER, &testspkt, "UnitTest"));
-}
-
-TEST_F(packetProcessingTest, CryptoNAKPacketReject) {
- // Activate authentication option
- ActivateOption("-a", "123");
- ASSERT_TRUE(ENABLED_OPT(AUTHENTICATION));
-
- int pkt_len = LEN_PKT_NOMAC + 4; // + 4 byte MAC = Crypto-NAK
-
- EXPECT_EQ(SERVER_AUTH_FAIL,
- process_pkt(&testpkt, &testsock, pkt_len,
- MODE_SERVER, &testspkt, "UnitTest"));
-}
-
-TEST_F(packetProcessingTest, AuthenticatedPacketInvalid) {
- // Activate authentication option
- PrepareAuthenticationTest(50, 9, "123456789");
- ASSERT_TRUE(ENABLED_OPT(AUTHENTICATION));
-
- // Prepare the packet.
- int pkt_len = LEN_PKT_NOMAC;
-
- testpkt.exten[0] = htonl(50);
- int mac_len = make_mac((char*)&testpkt, pkt_len,
- MAX_MD5_LEN, key_ptr,
- (char*)&testpkt.exten[1]);
-
- pkt_len += 4 + mac_len;
-
- // Now, alter the MAC so it becomes invalid.
- testpkt.exten[1] += 1;
-
- EXPECT_EQ(SERVER_AUTH_FAIL,
- process_pkt(&testpkt, &testsock, pkt_len,
- MODE_SERVER, &testspkt, "UnitTest"));
-}
-
-TEST_F(packetProcessingTest, AuthenticatedPacketUnknownKey) {
- // Activate authentication option
- PrepareAuthenticationTest(30, 9, "123456789");
- ASSERT_TRUE(ENABLED_OPT(AUTHENTICATION));
-
- // Prepare the packet. Observe that the Key-ID expected is 30,
- // but the packet has a key id of 50.
- int pkt_len = LEN_PKT_NOMAC;
-
- testpkt.exten[0] = htonl(50);
- int mac_len = make_mac((char*)&testpkt, pkt_len,
- MAX_MD5_LEN, key_ptr,
- (char*)&testpkt.exten[1]);
- pkt_len += 4 + mac_len;
-
- EXPECT_EQ(SERVER_AUTH_FAIL,
- process_pkt(&testpkt, &testsock, pkt_len,
- MODE_SERVER, &testspkt, "UnitTest"));
-}
-
-TEST_F(packetProcessingTest, ServerVersionTooOld) {
- ASSERT_FALSE(ENABLED_OPT(AUTHENTICATION));
-
- testpkt.li_vn_mode = PKT_LI_VN_MODE(LEAP_NOWARNING,
- NTP_OLDVERSION - 1,
- MODE_CLIENT);
- ASSERT_LT(PKT_VERSION(testpkt.li_vn_mode), NTP_OLDVERSION);
-
- int pkt_len = LEN_PKT_NOMAC;
-
- EXPECT_EQ(SERVER_UNUSEABLE,
- process_pkt(&testpkt, &testsock, pkt_len,
- MODE_SERVER, &testspkt, "UnitTest"));
-}
-
-TEST_F(packetProcessingTest, ServerVersionTooNew) {
- ASSERT_FALSE(ENABLED_OPT(AUTHENTICATION));
-
- testpkt.li_vn_mode = PKT_LI_VN_MODE(LEAP_NOWARNING,
- NTP_VERSION + 1,
- MODE_CLIENT);
- ASSERT_GT(PKT_VERSION(testpkt.li_vn_mode), NTP_VERSION);
-
- int pkt_len = LEN_PKT_NOMAC;
-
- EXPECT_EQ(SERVER_UNUSEABLE,
- process_pkt(&testpkt, &testsock, pkt_len,
- MODE_SERVER, &testspkt, "UnitTest"));
-}
-
-TEST_F(packetProcessingTest, NonWantedMode) {
- ASSERT_FALSE(ENABLED_OPT(AUTHENTICATION));
-
- testpkt.li_vn_mode = PKT_LI_VN_MODE(LEAP_NOWARNING,
- NTP_VERSION,
- MODE_CLIENT);
-
- // The packet has a mode of MODE_CLIENT, but process_pkt expects MODE_SERVER
-
- EXPECT_EQ(SERVER_UNUSEABLE,
- process_pkt(&testpkt, &testsock, LEN_PKT_NOMAC,
- MODE_SERVER, &testspkt, "UnitTest"));
-}
-
-/* Tests bug 1597 */
-TEST_F(packetProcessingTest, KoDRate) {
- ASSERT_FALSE(ENABLED_OPT(AUTHENTICATION));
-
- testpkt.stratum = STRATUM_PKT_UNSPEC;
- memcpy(&testpkt.refid, "RATE", 4);
-
- EXPECT_EQ(KOD_RATE,
- process_pkt(&testpkt, &testsock, LEN_PKT_NOMAC,
- MODE_SERVER, &testspkt, "UnitTest"));
-}
-
-TEST_F(packetProcessingTest, KoDDeny) {
- ASSERT_FALSE(ENABLED_OPT(AUTHENTICATION));
-
- testpkt.stratum = STRATUM_PKT_UNSPEC;
- memcpy(&testpkt.refid, "DENY", 4);
-
- EXPECT_EQ(KOD_DEMOBILIZE,
- process_pkt(&testpkt, &testsock, LEN_PKT_NOMAC,
- MODE_SERVER, &testspkt, "UnitTest"));
-}
-
-TEST_F(packetProcessingTest, RejectUnsyncedServer) {
- ASSERT_FALSE(ENABLED_OPT(AUTHENTICATION));
-
- testpkt.li_vn_mode = PKT_LI_VN_MODE(LEAP_NOTINSYNC,
- NTP_VERSION,
- MODE_SERVER);
-
- EXPECT_EQ(SERVER_UNUSEABLE,
- process_pkt(&testpkt, &testsock, LEN_PKT_NOMAC,
- MODE_SERVER, &testspkt, "UnitTest"));
-}
-
-TEST_F(packetProcessingTest, RejectWrongResponseServerMode) {
- ASSERT_FALSE(ENABLED_OPT(AUTHENTICATION));
-
- l_fp tmp;
- tmp.l_ui = 1000UL;
- tmp.l_uf = 0UL;
- HTONL_FP(&tmp, &testpkt.org);
-
- tmp.l_ui = 2000UL;
- tmp.l_uf = 0UL;
- HTONL_FP(&tmp, &testspkt.xmt);
-
- EXPECT_EQ(PACKET_UNUSEABLE,
- process_pkt(&testpkt, &testsock, LEN_PKT_NOMAC,
- MODE_SERVER, &testspkt, "UnitTest"));
-}
-
-TEST_F(packetProcessingTest, AcceptNoSentPacketBroadcastMode) {
- ASSERT_FALSE(ENABLED_OPT(AUTHENTICATION));
-
- testpkt.li_vn_mode = PKT_LI_VN_MODE(LEAP_NOWARNING,
- NTP_VERSION,
- MODE_BROADCAST);
-
- EXPECT_EQ(LEN_PKT_NOMAC,
- process_pkt(&testpkt, &testsock, LEN_PKT_NOMAC,
- MODE_BROADCAST, NULL, "UnitTest"));
-}
-
-TEST_F(packetProcessingTest, CorrectUnauthenticatedPacket) {
- ASSERT_FALSE(ENABLED_OPT(AUTHENTICATION));
-
- EXPECT_EQ(LEN_PKT_NOMAC,
- process_pkt(&testpkt, &testsock, LEN_PKT_NOMAC,
- MODE_SERVER, &testspkt, "UnitTest"));
-}
-
-TEST_F(packetProcessingTest, CorrectAuthenticatedPacketMD5) {
- PrepareAuthenticationTest(10, 15, "123456789abcdef");
- ASSERT_TRUE(ENABLED_OPT(AUTHENTICATION));
-
- int pkt_len = LEN_PKT_NOMAC;
-
- // Prepare the packet.
- testpkt.exten[0] = htonl(10);
- int mac_len = make_mac((char*)&testpkt, pkt_len,
- MAX_MD5_LEN, key_ptr,
- (char*)&testpkt.exten[1]);
-
- pkt_len += 4 + mac_len;
-
- EXPECT_EQ(pkt_len,
- process_pkt(&testpkt, &testsock, pkt_len,
- MODE_SERVER, &testspkt, "UnitTest"));
-
-}
-
-TEST_F(packetProcessingTest, CorrectAuthenticatedPacketSHA1) {
- PrepareAuthenticationTest(20, 15, "SHA1", "abcdefghijklmno");
- ASSERT_TRUE(ENABLED_OPT(AUTHENTICATION));
-
- int pkt_len = LEN_PKT_NOMAC;
-
- // Prepare the packet.
- testpkt.exten[0] = htonl(20);
- int mac_len = make_mac((char*)&testpkt, pkt_len,
- MAX_MAC_LEN, key_ptr,
- (char*)&testpkt.exten[1]);
-
- pkt_len += 4 + mac_len;
-
- EXPECT_EQ(pkt_len,
- process_pkt(&testpkt, &testsock, pkt_len,
- MODE_SERVER, &testspkt, "UnitTest"));
-}
diff --git a/contrib/ntp/sntp/tests/g_sntptest.h b/contrib/ntp/sntp/tests/g_sntptest.h
deleted file mode 100644
index d5add9c..0000000
--- a/contrib/ntp/sntp/tests/g_sntptest.h
+++ /dev/null
@@ -1,35 +0,0 @@
-#ifndef SNTPTEST_H
-#define SNTPTEST_H
-
-#include "tests_main.h"
-
-extern "C" {
-#include "ntp_stdlib.h"
-#include "sntp-opts.h"
-};
-
-class sntptest : public ntptest {
-protected:
- sntptest() {
- optionSaveState(&sntpOptions);
- }
-
- ~sntptest() {
- optionRestore(&sntpOptions);
- }
-
- void ActivateOption(const char* option, const char* argument) {
- const int ARGV_SIZE = 4;
-
- char* opts[ARGV_SIZE];
-
- opts[0] = estrdup("sntpopts");
- opts[1] = estrdup(option);
- opts[2] = estrdup(argument);
- opts[3] = estrdup("127.0.0.1");
-
- optionProcess(&sntpOptions, ARGV_SIZE, opts);
- }
-};
-
-#endif // SNTPTEST_H
diff --git a/contrib/ntp/sntp/tests/keyFile.c b/contrib/ntp/sntp/tests/keyFile.c
index 3769947..77dfee7 100644
--- a/contrib/ntp/sntp/tests/keyFile.c
+++ b/contrib/ntp/sntp/tests/keyFile.c
@@ -7,10 +7,17 @@
#include "unity.h"
-//typedef int bool;
+bool CompareKeys(struct key expected, struct key actual);
+bool CompareKeysAlternative(int key_id,int key_len,const char* type,const char* key_seq,struct key actual);
+void test_ReadEmptyKeyFile(void);
+void test_ReadASCIIKeys(void);
+void test_ReadHexKeys(void);
+void test_ReadKeyFileWithComments(void);
+void test_ReadKeyFileWithInvalidHex(void);
-bool CompareKeys(struct key expected, struct key actual) {
+bool
+CompareKeys(struct key expected, struct key actual) {
if (expected.key_id != actual.key_id){
printf("Expected key_id: %d", expected.key_id);
printf(" but was: %d\n", actual.key_id);
@@ -34,7 +41,9 @@ bool CompareKeys(struct key expected, struct key actual) {
return TRUE;
}
-bool CompareKeysAlternative(int key_id,
+
+bool
+CompareKeysAlternative(int key_id,
int key_len,
const char* type,
const char* key_seq,
@@ -50,91 +59,99 @@ bool CompareKeysAlternative(int key_id,
}
-void test_ReadEmptyKeyFile() {
+void
+test_ReadEmptyKeyFile(void) {
struct key* keys = NULL;
TEST_ASSERT_EQUAL(0, auth_init(CreatePath("key-test-empty", INPUT_DIR), &keys));
-
- TEST_ASSERT_TRUE(keys == NULL);
+ TEST_ASSERT_NULL(keys);
}
-void test_ReadASCIIKeys() {
+
+void
+test_ReadASCIIKeys(void) {
struct key* keys = NULL;
TEST_ASSERT_EQUAL(2, auth_init(CreatePath("key-test-ascii", INPUT_DIR), &keys));
- TEST_ASSERT_TRUE(keys != NULL);
+ TEST_ASSERT_NOT_NULL(keys);
struct key* result = NULL;
get_key(40, &result);
- TEST_ASSERT_TRUE(result != NULL);
+ TEST_ASSERT_NOT_NULL(result);
TEST_ASSERT_TRUE(CompareKeysAlternative(40, 11, "MD5", "asciikeyTwo", *result));
result = NULL;
get_key(50, &result);
- TEST_ASSERT_TRUE(result != NULL);
+ TEST_ASSERT_NOT_NULL(result);
TEST_ASSERT_TRUE(CompareKeysAlternative(50, 11, "MD5", "asciikeyOne", *result));
}
-void test_ReadHexKeys() {
+
+void
+test_ReadHexKeys(void) {
struct key* keys = NULL;
TEST_ASSERT_EQUAL(3, auth_init(CreatePath("key-test-hex", INPUT_DIR), &keys));
- TEST_ASSERT_TRUE(keys != NULL);
+ TEST_ASSERT_NOT_NULL(keys);
struct key* result = NULL;
get_key(10, &result);
- TEST_ASSERT_TRUE(result != NULL);
+ TEST_ASSERT_NOT_NULL(result);
TEST_ASSERT_TRUE(CompareKeysAlternative(10, 13, "MD5",
"\x01\x23\x45\x67\x89\xab\xcd\xef\x01\x23\x45\x67\x89", *result));
result = NULL;
get_key(20, &result);
- TEST_ASSERT_TRUE(result != NULL);
+ TEST_ASSERT_NOT_NULL(result);
char data1[15]; memset(data1, 0x11, 15);
TEST_ASSERT_TRUE(CompareKeysAlternative(20, 15, "MD5", data1, *result));
result = NULL;
get_key(30, &result);
- TEST_ASSERT_TRUE(result != NULL);
+ TEST_ASSERT_NOT_NULL(result);
char data2[13]; memset(data2, 0x01, 13);
TEST_ASSERT_TRUE(CompareKeysAlternative(30, 13, "MD5", data2, *result));
}
-void test_ReadKeyFileWithComments() {
+
+void
+test_ReadKeyFileWithComments(void) {
struct key* keys = NULL;
TEST_ASSERT_EQUAL(2, auth_init(CreatePath("key-test-comments", INPUT_DIR), &keys));
- TEST_ASSERT_TRUE(keys != NULL);
+ TEST_ASSERT_NOT_NULL(keys);
struct key* result = NULL;
get_key(10, &result);
- TEST_ASSERT_TRUE(result != NULL);
+ TEST_ASSERT_NOT_NULL(result);
char data[15]; memset(data, 0x01, 15);
TEST_ASSERT_TRUE(CompareKeysAlternative(10, 15, "MD5", data, *result));
result = NULL;
get_key(34, &result);
- TEST_ASSERT_TRUE(result != NULL);
+ TEST_ASSERT_NOT_NULL(result);
TEST_ASSERT_TRUE(CompareKeysAlternative(34, 3, "MD5", "xyz", *result));
}
-void test_ReadKeyFileWithInvalidHex() {
+
+void
+test_ReadKeyFileWithInvalidHex(void) {
struct key* keys = NULL;
TEST_ASSERT_EQUAL(1, auth_init(CreatePath("key-test-invalid-hex", INPUT_DIR), &keys));
- TEST_ASSERT_TRUE(keys != NULL);
+ TEST_ASSERT_NOT_NULL(keys);
struct key* result = NULL;
get_key(10, &result);
- TEST_ASSERT_TRUE(result != NULL);
+ TEST_ASSERT_NOT_NULL(result);
char data[15]; memset(data, 0x01, 15);
TEST_ASSERT_TRUE(CompareKeysAlternative(10, 15, "MD5", data, *result));
result = NULL;
get_key(30, &result); // Should not exist, and result should remain NULL.
- TEST_ASSERT_TRUE(result == NULL);
+ TEST_ASSERT_NULL(result);
}
diff --git a/contrib/ntp/sntp/tests/kodDatabase.c b/contrib/ntp/sntp/tests/kodDatabase.c
index a6b86d0..0c3615d 100644
--- a/contrib/ntp/sntp/tests/kodDatabase.c
+++ b/contrib/ntp/sntp/tests/kodDatabase.c
@@ -4,24 +4,29 @@
#include "sntptest.h"
#include "ntp_stdlib.h"
#include "sntp-opts.h"
-
#include "kod_management.h"
+#include "ntp_io.h"
#include "unity.h"
-void setUp(void)
-{
- kod_init_kod_db("/dev/null", TRUE);
-}
+void setUp(void);
+void test_SingleEntryHandling(void);
+void test_MultipleEntryHandling(void);
+void test_NoMatchInSearch(void);
+void test_AddDuplicate(void);
+void test_DeleteEntry(void);
-void tearDown(void)
-{
+
+void
+setUp(void) {
+ kod_init_kod_db("/dev/null", TRUE);
}
-void test_SingleEntryHandling() {
- char HOST[] = "192.0.2.5";
- char REASON[] = "DENY";
+void
+test_SingleEntryHandling(void) {
+ const char HOST[] = "192.0.2.5";
+ const char REASON[] = "DENY";
add_entry(HOST, REASON);
@@ -32,15 +37,17 @@ void test_SingleEntryHandling() {
TEST_ASSERT_EQUAL_STRING(REASON, result->type);
}
-void test_MultipleEntryHandling() {
- char HOST1[] = "192.0.2.3";
- char REASON1[] = "DENY";
- char HOST2[] = "192.0.5.5";
- char REASON2[] = "RATE";
+void
+test_MultipleEntryHandling(void) {
+ const char HOST1[] = "192.0.2.3";
+ const char REASON1[] = "DENY";
- char HOST3[] = "192.0.10.1";
- char REASON3[] = "DENY";
+ const char HOST2[] = "192.0.5.5";
+ const char REASON2[] = "RATE";
+
+ const char HOST3[] = "192.0.10.1";
+ const char REASON3[] = "DENY";
add_entry(HOST1, REASON1);
add_entry(HOST2, REASON2);
@@ -63,10 +70,12 @@ void test_MultipleEntryHandling() {
free(result);
}
-void test_NoMatchInSearch() {
- char HOST_ADD[] = "192.0.2.6";
- char HOST_NOTADD[] = "192.0.6.1";
- char REASON[] = "DENY";
+
+void
+test_NoMatchInSearch(void) {
+ const char HOST_ADD[] = "192.0.2.6";
+ const char HOST_NOTADD[] = "192.0.6.1";
+ const char REASON[] = "DENY";
add_entry(HOST_ADD, REASON);
@@ -76,10 +85,12 @@ void test_NoMatchInSearch() {
TEST_ASSERT_TRUE(result == NULL);
}
-void test_AddDuplicate() {
- char HOST[] = "192.0.2.3";
- char REASON1[] = "RATE";
- char REASON2[] = "DENY";
+
+void
+test_AddDuplicate(void) {
+ const char HOST[] = "192.0.2.3";
+ const char REASON1[] = "RATE";
+ const char REASON2[] = "DENY";
add_entry(HOST, REASON1);
struct kod_entry* result1;
@@ -101,11 +112,13 @@ void test_AddDuplicate() {
free(result2);
}
-void test_DeleteEntry() {
- char HOST1[] = "192.0.2.1";
- char HOST2[] = "192.0.2.2";
- char HOST3[] = "192.0.2.3";
- char REASON[] = "DENY";
+
+void
+test_DeleteEntry(void) {
+ const char HOST1[] = "192.0.2.1";
+ const char HOST2[] = "192.0.2.2";
+ const char HOST3[] = "192.0.2.3";
+ const char REASON[] = "DENY";
add_entry(HOST1, REASON);
add_entry(HOST2, REASON);
diff --git a/contrib/ntp/sntp/tests/kodFile.c b/contrib/ntp/sntp/tests/kodFile.c
index 7daec21..6eb0971 100644
--- a/contrib/ntp/sntp/tests/kodFile.c
+++ b/contrib/ntp/sntp/tests/kodFile.c
@@ -1,10 +1,8 @@
#include "config.h"
+
#include "ntp_types.h"
#include "ntp_stdlib.h" // For estrdup()
-
-
#include "fileHandlingTest.h"
-
#include "kod_management.h"
#include "unity.h"
@@ -17,22 +15,32 @@ extern int kod_db_cnt;
extern struct kod_entry** kod_db;
extern char* kod_db_file;
-void setUp() {
- kod_db_cnt = 0;
- kod_db = NULL;
-}
+void setUp(void);
+void test_ReadEmptyFile(void);
+void test_ReadCorrectFile(void);
+void test_ReadFileWithBlankLines(void);
+void test_WriteEmptyFile(void);
+void test_WriteFileWithSingleEntry(void);
+void test_WriteFileWithMultipleEntries(void);
+
-void tearDown() {
+void
+setUp(void) {
+ kod_db_cnt = 0;
+ kod_db = NULL;
}
-void test_ReadEmptyFile() {
+void
+test_ReadEmptyFile(void) {
kod_init_kod_db(CreatePath("kod-test-empty", INPUT_DIR), TRUE);
TEST_ASSERT_EQUAL(0, kod_db_cnt);
}
-void test_ReadCorrectFile() {
+
+void
+test_ReadCorrectFile(void) {
kod_init_kod_db(CreatePath("kod-test-correct", INPUT_DIR), TRUE);
TEST_ASSERT_EQUAL(2, kod_db_cnt);
@@ -50,7 +58,9 @@ void test_ReadCorrectFile() {
TEST_ASSERT_EQUAL(0xfff, res->timestamp);
}
-void test_ReadFileWithBlankLines() {
+
+void
+test_ReadFileWithBlankLines(void) {
kod_init_kod_db(CreatePath("kod-test-blanks", INPUT_DIR), TRUE);
TEST_ASSERT_EQUAL(3, kod_db_cnt);
@@ -73,31 +83,30 @@ void test_ReadFileWithBlankLines() {
TEST_ASSERT_EQUAL(0xabcd, res->timestamp);
}
-void test_WriteEmptyFile() {
- //kod_db_file = estrdup(CreatePath("kod-output-blank", OUTPUT_DIR)); //causing issues on psp-at1, replaced
+
+void
+test_WriteEmptyFile(void) {
kod_db_file = estrdup("kod-output-blank");
- //printf("kod PATH: %s\n",kod_db_file);
write_kod_db();
// Open file and ensure that the filesize is 0 bytes.
- FILE * is;
- is = fopen(kod_db_file, "rb");//std::ios::binary);
- TEST_ASSERT_FALSE(is == NULL );//is.fail());
-
+ FILE * is = fopen(kod_db_file, "rb");
+ TEST_ASSERT_NOT_NULL(is);
+
TEST_ASSERT_EQUAL(0, GetFileSize(is));
fclose(is);
}
-void test_WriteFileWithSingleEntry() {
- //kod_db_file = estrdup(CreatePath("kod-output-single", OUTPUT_DIR)); //causing issues on psp-at1, replaced
+
+void
+test_WriteFileWithSingleEntry(void) {
kod_db_file = estrdup("kod-output-single");
- //printf("kod PATH: %s\n",kod_db_file);
add_entry("host1", "DENY");
// Here we must manipulate the timestamps, so they match the one in
// the expected file.
- //
+
kod_db[0]->timestamp = 1;
write_kod_db();
@@ -105,18 +114,19 @@ void test_WriteFileWithSingleEntry() {
// Open file and compare sizes.
FILE * actual = fopen(kod_db_file, "rb");
FILE * expected = fopen(CreatePath("kod-expected-single", INPUT_DIR),"rb");
- TEST_ASSERT_TRUE(actual !=NULL);//TEST_ASSERT_TRUE(actual.good());
- TEST_ASSERT_TRUE(expected !=NULL);//TEST_ASSERT_TRUE(expected.good());
- TEST_ASSERT_EQUAL(GetFileSize(expected), GetFileSize(actual));
+ TEST_ASSERT_NOT_NULL(actual);
+ TEST_ASSERT_NOT_NULL(expected);
+ TEST_ASSERT_EQUAL(GetFileSize(expected), GetFileSize(actual));
+
TEST_ASSERT_TRUE(CompareFileContent(expected, actual));
}
-void test_WriteFileWithMultipleEntries() {
- //kod_db_file = estrdup(CreatePath("kod-output-multiple", OUTPUT_DIR)); //causing issues on psp-at1, replaced
+
+void
+test_WriteFileWithMultipleEntries(void) {
kod_db_file = estrdup("kod-output-multiple");
- //printf("kod PATH: %s\n",kod_db_file);
add_entry("example.com", "RATE");
add_entry("192.0.2.1", "DENY");
add_entry("192.0.2.5", "RSTR");
@@ -134,12 +144,12 @@ void test_WriteFileWithMultipleEntries() {
// Open file and compare sizes and content.
FILE * actual = fopen(kod_db_file, "rb");
FILE * expected = fopen(CreatePath("kod-expected-multiple", INPUT_DIR),"rb");
- TEST_ASSERT_TRUE(actual !=NULL);//TEST_ASSERT_TRUE(actual.good());
- TEST_ASSERT_TRUE(expected !=NULL);//TEST_ASSERT_TRUE(expected.good());
-
+ TEST_ASSERT_NOT_NULL(actual);
+ TEST_ASSERT_NOT_NULL(expected);
+
+
TEST_ASSERT_EQUAL(GetFileSize(expected), GetFileSize(actual));
TEST_ASSERT_TRUE(CompareFileContent(expected, actual));
}
-
diff --git a/contrib/ntp/sntp/tests/packetHandling.c b/contrib/ntp/sntp/tests/packetHandling.c
index 4cb5a91..1036fc3 100644
--- a/contrib/ntp/sntp/tests/packetHandling.c
+++ b/contrib/ntp/sntp/tests/packetHandling.c
@@ -12,27 +12,37 @@
#include "unity.h"
-
-int counter = 0;
-
-
-// old code from google test framework, moved to SetUp() for unity
-void setUp(void)
-{
+void setUp(void);
+int LfpEquality(const l_fp expected, const l_fp actual);
+void test_GenerateUnauthenticatedPacket(void);
+void test_GenerateAuthenticatedPacket(void);
+void test_OffsetCalculationPositiveOffset(void);
+void test_OffsetCalculationNegativeOffset(void);
+void test_HandleUnusableServer(void);
+void test_HandleUnusablePacket(void);
+void test_HandleServerAuthenticationFailure(void);
+void test_HandleKodDemobilize(void);
+void test_HandleKodRate(void);
+void test_HandleCorrectPacket(void);
+
+
+void
+setUp(void) {
init_lib();
}
-
-int LfpEquality(const l_fp expected, const l_fp actual) {
- if (L_ISEQU(&expected, &actual)) {
- return TRUE;
- } else {
- return FALSE;
- }
+int
+LfpEquality(const l_fp expected, const l_fp actual) {
+ if (L_ISEQU(&expected, &actual))
+ return TRUE;
+ else
+ return FALSE;
}
-void test_GenerateUnauthenticatedPacket(void) {
+
+void
+test_GenerateUnauthenticatedPacket(void) {
struct pkt testpkt;
struct timeval xmt;
@@ -55,7 +65,9 @@ void test_GenerateUnauthenticatedPacket(void) {
TEST_ASSERT_TRUE(LfpEquality(expected_xmt, actual_xmt));
}
-void test_GenerateAuthenticatedPacket(void) {
+
+void
+test_GenerateAuthenticatedPacket(void) {
struct key testkey;
testkey.next = NULL;
testkey.key_id = 30;
@@ -91,10 +103,12 @@ void test_GenerateAuthenticatedPacket(void) {
char expected_mac[MAX_MD5_LEN];
TEST_ASSERT_EQUAL(MAX_MD5_LEN - 4, // Remove the key_id, only keep the mac.
make_mac((char*)&testpkt, LEN_PKT_NOMAC, MAX_MD5_LEN, &testkey, expected_mac));
- TEST_ASSERT_TRUE(memcmp(expected_mac, (char*)&testpkt.exten[1], MAX_MD5_LEN -4) == 0);
+ TEST_ASSERT_EQUAL_MEMORY(expected_mac, (char*)&testpkt.exten[1], MAX_MD5_LEN -4);
}
-void test_OffsetCalculationPositiveOffset(void) {
+
+void
+test_OffsetCalculationPositiveOffset(void) {
struct pkt rpkt;
rpkt.precision = -16; // 0,000015259
@@ -132,13 +146,15 @@ void test_OffsetCalculationPositiveOffset(void) {
double offset, precision, synch_distance;
offset_calculation(&rpkt, LEN_PKT_NOMAC, &dst, &offset, &precision, &synch_distance);
- TEST_ASSERT_EQUAL_FLOAT(1.25, offset);
- TEST_ASSERT_EQUAL_FLOAT(1. / ULOGTOD(16), precision);
+ TEST_ASSERT_EQUAL_DOUBLE(1.25, offset);
+ TEST_ASSERT_EQUAL_DOUBLE(1. / ULOGTOD(16), precision);
// 1.1250150000000001 ?
- TEST_ASSERT_EQUAL_FLOAT(1.125015, synch_distance);
+ TEST_ASSERT_EQUAL_DOUBLE(1.125015, synch_distance);
}
-void test_OffsetCalculationNegativeOffset(void) {
+
+void
+test_OffsetCalculationNegativeOffset(void) {
struct pkt rpkt;
rpkt.precision = -1;
@@ -176,12 +192,14 @@ void test_OffsetCalculationNegativeOffset(void) {
double offset, precision, synch_distance;
offset_calculation(&rpkt, LEN_PKT_NOMAC, &dst, &offset, &precision, &synch_distance);
- TEST_ASSERT_EQUAL_FLOAT(-1, offset);
- TEST_ASSERT_EQUAL_FLOAT(1. / ULOGTOD(1), precision);
- TEST_ASSERT_EQUAL_FLOAT(1.3333483333333334, synch_distance);
+ TEST_ASSERT_EQUAL_DOUBLE(-1, offset);
+ TEST_ASSERT_EQUAL_DOUBLE(1. / ULOGTOD(1), precision);
+ TEST_ASSERT_EQUAL_DOUBLE(1.3333483333333334, synch_distance);
}
-void test_HandleUnusableServer(void) {
+
+void
+test_HandleUnusableServer(void) {
struct pkt rpkt;
sockaddr_u host;
int rpktl;
@@ -192,7 +210,9 @@ void test_HandleUnusableServer(void) {
TEST_ASSERT_EQUAL(-1, handle_pkt(rpktl, &rpkt, &host, ""));
}
-void test_HandleUnusablePacket(void) {
+
+void
+test_HandleUnusablePacket(void) {
struct pkt rpkt;
sockaddr_u host;
int rpktl;
@@ -203,7 +223,9 @@ void test_HandleUnusablePacket(void) {
TEST_ASSERT_EQUAL(1, handle_pkt(rpktl, &rpkt, &host, ""));
}
-void test_HandleServerAuthenticationFailure(void) {
+
+void
+test_HandleServerAuthenticationFailure(void) {
struct pkt rpkt;
sockaddr_u host;
int rpktl;
@@ -214,7 +236,9 @@ void test_HandleServerAuthenticationFailure(void) {
TEST_ASSERT_EQUAL(1, handle_pkt(rpktl, &rpkt, &host, ""));
}
-void test_HandleKodDemobilize(void) {
+
+void
+test_HandleKodDemobilize(void) {
const char * HOSTNAME = "192.0.2.1";
const char * REASON = "DENY";
struct pkt rpkt;
@@ -235,10 +259,12 @@ void test_HandleKodDemobilize(void) {
TEST_ASSERT_EQUAL(1, handle_pkt(rpktl, &rpkt, &host, HOSTNAME));
TEST_ASSERT_EQUAL(1, search_entry(HOSTNAME, &entry));
- TEST_ASSERT_TRUE(memcmp(REASON, entry->type, 4) == 0);
+ TEST_ASSERT_EQUAL_MEMORY(REASON, entry->type, 4);
}
-void test_HandleKodRate(void) {
+
+void
+test_HandleKodRate(void) {
struct pkt rpkt;
sockaddr_u host;
int rpktl;
@@ -249,7 +275,9 @@ void test_HandleKodRate(void) {
TEST_ASSERT_EQUAL(1, handle_pkt(rpktl, &rpkt, &host, ""));
}
-void test_HandleCorrectPacket(void) {
+
+void
+test_HandleCorrectPacket(void) {
struct pkt rpkt;
sockaddr_u host;
int rpktl;
diff --git a/contrib/ntp/sntp/tests/packetProcessing.c b/contrib/ntp/sntp/tests/packetProcessing.c
index 27ab72e..1fd649e 100644
--- a/contrib/ntp/sntp/tests/packetProcessing.c
+++ b/contrib/ntp/sntp/tests/packetProcessing.c
@@ -4,6 +4,7 @@
#include "ntp_stdlib.h"
#include "unity.h"
+
const char * Version = "stub unit test Version string";
// Hacks into the key database.
@@ -11,21 +12,47 @@ extern struct key* key_ptr;
extern int key_cnt;
+void PrepareAuthenticationTest(int key_id,int key_len,const char* type,const void* key_seq);
+void PrepareAuthenticationTestMD5(int key_id,int key_len,const void* key_seq);
+void setUp(void);
+void tearDown(void);
+void test_TooShortLength(void);
+void test_LengthNotMultipleOfFour(void);
+void test_TooShortExtensionFieldLength(void);
+void test_UnauthenticatedPacketReject(void);
+void test_CryptoNAKPacketReject(void);
+void test_AuthenticatedPacketInvalid(void);
+void test_AuthenticatedPacketUnknownKey(void);
+void test_ServerVersionTooOld(void);
+void test_ServerVersionTooNew(void);
+void test_NonWantedMode(void);
+void test_KoDRate(void);
+void test_KoDDeny(void);
+void test_RejectUnsyncedServer(void);
+void test_RejectWrongResponseServerMode(void);
+void test_AcceptNoSentPacketBroadcastMode(void);
+void test_CorrectUnauthenticatedPacket(void);
+void test_CorrectAuthenticatedPacketMD5(void);
+void test_CorrectAuthenticatedPacketSHA1(void);
+
+
static struct pkt testpkt;
static struct pkt testspkt;
static sockaddr_u testsock;
bool restoreKeyDb;
-void PrepareAuthenticationTest(int key_id,
+
+void
+PrepareAuthenticationTest(int key_id,
int key_len,
const char* type,
const void* key_seq) {
char str[25];
- sprintf(str, "%d", key_id);
+ snprintf(str, 25, "%d", key_id);
ActivateOption("-a", str);
key_cnt = 1;
- key_ptr = malloc(sizeof(struct key));
+ key_ptr = emalloc(sizeof(struct key));
key_ptr->next = NULL;
key_ptr->key_id = key_id;
key_ptr->key_len = key_len;
@@ -37,13 +64,17 @@ void PrepareAuthenticationTest(int key_id,
restoreKeyDb = true;
}
-void PrepareAuthenticationTestMD5(int key_id,
+
+void
+PrepareAuthenticationTestMD5(int key_id,
int key_len,
const void* key_seq) {
PrepareAuthenticationTest(key_id, key_len, "MD5", key_seq);
}
-void setUp() {
+
+void
+setUp(void) {
sntptest();
restoreKeyDb = false;
@@ -63,10 +94,11 @@ void setUp() {
HTONL_FP(&tmp, &testpkt.org);
HTONL_FP(&tmp, &testspkt.xmt);
-
}
-void tearDown() {
+
+void
+tearDown(void) {
if (restoreKeyDb) {
key_cnt = 0;
@@ -75,12 +107,12 @@ void tearDown() {
}
sntptest_destroy(); //only on the final test!! if counter == 0 etc...
-
}
-void test_TooShortLength(void) {
+void
+test_TooShortLength(void) {
TEST_ASSERT_EQUAL(PACKET_UNUSEABLE,
process_pkt(&testpkt, &testsock, LEN_PKT_NOMAC - 1,
MODE_SERVER, &testspkt, "UnitTest"));
@@ -89,7 +121,9 @@ void test_TooShortLength(void) {
MODE_BROADCAST, &testspkt, "UnitTest"));
}
-void test_LengthNotMultipleOfFour(void) {
+
+void
+test_LengthNotMultipleOfFour(void) {
TEST_ASSERT_EQUAL(PACKET_UNUSEABLE,
process_pkt(&testpkt, &testsock, LEN_PKT_NOMAC + 6,
MODE_SERVER, &testspkt, "UnitTest"));
@@ -98,7 +132,9 @@ void test_LengthNotMultipleOfFour(void) {
MODE_BROADCAST, &testspkt, "UnitTest"));
}
-void test_TooShortExtensionFieldLength(void) {
+
+void
+test_TooShortExtensionFieldLength(void) {
/* The lower 16-bits are the length of the extension field.
* This lengths must be multiples of 4 bytes, which gives
* a minimum of 4 byte extension field length. */
@@ -114,7 +150,9 @@ void test_TooShortExtensionFieldLength(void) {
MODE_SERVER, &testspkt, "UnitTest"));
}
-void test_UnauthenticatedPacketReject(void) {
+
+void
+test_UnauthenticatedPacketReject(void) {
//sntptest();
// Activate authentication option
ActivateOption("-a", "123");
@@ -128,7 +166,9 @@ void test_UnauthenticatedPacketReject(void) {
MODE_SERVER, &testspkt, "UnitTest"));
}
-void test_CryptoNAKPacketReject(void) {
+
+void
+test_CryptoNAKPacketReject(void) {
// Activate authentication option
ActivateOption("-a", "123");
TEST_ASSERT_TRUE(ENABLED_OPT(AUTHENTICATION));
@@ -140,7 +180,9 @@ void test_CryptoNAKPacketReject(void) {
MODE_SERVER, &testspkt, "UnitTest"));
}
-void test_AuthenticatedPacketInvalid(void) {
+
+void
+test_AuthenticatedPacketInvalid(void) {
// Activate authentication option
PrepareAuthenticationTestMD5(50, 9, "123456789");
TEST_ASSERT_TRUE(ENABLED_OPT(AUTHENTICATION));
@@ -163,7 +205,9 @@ void test_AuthenticatedPacketInvalid(void) {
MODE_SERVER, &testspkt, "UnitTest"));
}
-void test_AuthenticatedPacketUnknownKey(void) {
+
+void
+test_AuthenticatedPacketUnknownKey(void) {
// Activate authentication option
PrepareAuthenticationTestMD5(30, 9, "123456789");
TEST_ASSERT_TRUE(ENABLED_OPT(AUTHENTICATION));
@@ -183,7 +227,9 @@ void test_AuthenticatedPacketUnknownKey(void) {
MODE_SERVER, &testspkt, "UnitTest"));
}
-void test_ServerVersionTooOld(void) {
+
+void
+test_ServerVersionTooOld(void) {
TEST_ASSERT_FALSE(ENABLED_OPT(AUTHENTICATION));
testpkt.li_vn_mode = PKT_LI_VN_MODE(LEAP_NOWARNING,
@@ -198,7 +244,9 @@ void test_ServerVersionTooOld(void) {
MODE_SERVER, &testspkt, "UnitTest"));
}
-void test_ServerVersionTooNew(void) {
+
+void
+test_ServerVersionTooNew(void) {
TEST_ASSERT_FALSE(ENABLED_OPT(AUTHENTICATION));
testpkt.li_vn_mode = PKT_LI_VN_MODE(LEAP_NOWARNING,
@@ -213,7 +261,9 @@ void test_ServerVersionTooNew(void) {
MODE_SERVER, &testspkt, "UnitTest"));
}
-void test_NonWantedMode(void) {
+
+void
+test_NonWantedMode(void) {
TEST_ASSERT_FALSE(ENABLED_OPT(AUTHENTICATION));
testpkt.li_vn_mode = PKT_LI_VN_MODE(LEAP_NOWARNING,
@@ -227,8 +277,10 @@ void test_NonWantedMode(void) {
MODE_SERVER, &testspkt, "UnitTest"));
}
+
/* Tests bug 1597 */
-void test_KoDRate(void) {
+void
+test_KoDRate(void) {
TEST_ASSERT_FALSE(ENABLED_OPT(AUTHENTICATION));
testpkt.stratum = STRATUM_PKT_UNSPEC;
@@ -239,7 +291,9 @@ void test_KoDRate(void) {
MODE_SERVER, &testspkt, "UnitTest"));
}
-void test_KoDDeny(void) {
+
+void
+test_KoDDeny(void) {
TEST_ASSERT_FALSE(ENABLED_OPT(AUTHENTICATION));
testpkt.stratum = STRATUM_PKT_UNSPEC;
@@ -250,7 +304,9 @@ void test_KoDDeny(void) {
MODE_SERVER, &testspkt, "UnitTest"));
}
-void test_RejectUnsyncedServer(void) {
+
+void
+test_RejectUnsyncedServer(void) {
TEST_ASSERT_FALSE(ENABLED_OPT(AUTHENTICATION));
testpkt.li_vn_mode = PKT_LI_VN_MODE(LEAP_NOTINSYNC,
@@ -262,7 +318,9 @@ void test_RejectUnsyncedServer(void) {
MODE_SERVER, &testspkt, "UnitTest"));
}
-void test_RejectWrongResponseServerMode(void) {
+
+void
+test_RejectWrongResponseServerMode(void) {
TEST_ASSERT_FALSE(ENABLED_OPT(AUTHENTICATION));
l_fp tmp;
@@ -279,7 +337,9 @@ void test_RejectWrongResponseServerMode(void) {
MODE_SERVER, &testspkt, "UnitTest"));
}
-void test_AcceptNoSentPacketBroadcastMode(void) {
+
+void
+test_AcceptNoSentPacketBroadcastMode(void) {
TEST_ASSERT_FALSE(ENABLED_OPT(AUTHENTICATION));
testpkt.li_vn_mode = PKT_LI_VN_MODE(LEAP_NOWARNING,
@@ -291,7 +351,9 @@ void test_AcceptNoSentPacketBroadcastMode(void) {
MODE_BROADCAST, NULL, "UnitTest"));
}
-void test_CorrectUnauthenticatedPacket(void) {
+
+void
+test_CorrectUnauthenticatedPacket(void) {
TEST_ASSERT_FALSE(ENABLED_OPT(AUTHENTICATION));
TEST_ASSERT_EQUAL(LEN_PKT_NOMAC,
@@ -299,7 +361,9 @@ void test_CorrectUnauthenticatedPacket(void) {
MODE_SERVER, &testspkt, "UnitTest"));
}
-void test_CorrectAuthenticatedPacketMD5(void) {
+
+void
+test_CorrectAuthenticatedPacketMD5(void) {
PrepareAuthenticationTestMD5(10, 15, "123456789abcdef");
TEST_ASSERT_TRUE(ENABLED_OPT(AUTHENTICATION));
@@ -319,7 +383,9 @@ void test_CorrectAuthenticatedPacketMD5(void) {
}
-void test_CorrectAuthenticatedPacketSHA1(void) {
+
+void
+test_CorrectAuthenticatedPacketSHA1(void) {
PrepareAuthenticationTest(20, 15, "SHA1", "abcdefghijklmno");
TEST_ASSERT_TRUE(ENABLED_OPT(AUTHENTICATION));
diff --git a/contrib/ntp/sntp/tests/run-crypto.c b/contrib/ntp/sntp/tests/run-crypto.c
index c5dbaf6..8b2a735 100644
--- a/contrib/ntp/sntp/tests/run-crypto.c
+++ b/contrib/ntp/sntp/tests/run-crypto.c
@@ -22,11 +22,14 @@
#include "unity.h"
#include <setjmp.h>
#include <stdio.h>
+#include "config.h"
+#include "ntp_types.h"
+#include "sntptest.h"
+#include "crypto.h"
//=======External Functions This Runner Calls=====
extern void setUp(void);
extern void tearDown(void);
-void resetTest(void);
extern void test_MakeMd5Mac(void);
extern void test_MakeSHA1Mac(void);
extern void test_VerifyCorrectMD5(void);
@@ -36,27 +39,27 @@ extern void test_PacketSizeNotMultipleOfFourBytes(void);
//=======Test Reset Option=====
-void resetTest()
+void resetTest(void);
+void resetTest(void)
{
tearDown();
setUp();
}
-char *progname;
+char const *progname;
//=======MAIN=====
int main(int argc, char *argv[])
{
progname = argv[0];
- Unity.TestFile = "crypto.c";
UnityBegin("crypto.c");
- RUN_TEST(test_MakeMd5Mac, 11);
- RUN_TEST(test_MakeSHA1Mac, 33);
- RUN_TEST(test_VerifyCorrectMD5, 59);
- RUN_TEST(test_VerifySHA1, 78);
- RUN_TEST(test_VerifyFailure, 100);
- RUN_TEST(test_PacketSizeNotMultipleOfFourBytes, 120);
+ RUN_TEST(test_MakeMd5Mac, 12);
+ RUN_TEST(test_MakeSHA1Mac, 13);
+ RUN_TEST(test_VerifyCorrectMD5, 14);
+ RUN_TEST(test_VerifySHA1, 15);
+ RUN_TEST(test_VerifyFailure, 16);
+ RUN_TEST(test_PacketSizeNotMultipleOfFourBytes, 17);
return (UnityEnd());
}
diff --git a/contrib/ntp/sntp/tests/run-keyFile.c b/contrib/ntp/sntp/tests/run-keyFile.c
index 0a6380d..8629109 100644
--- a/contrib/ntp/sntp/tests/run-keyFile.c
+++ b/contrib/ntp/sntp/tests/run-keyFile.c
@@ -22,38 +22,43 @@
#include "unity.h"
#include <setjmp.h>
#include <stdio.h>
+#include "config.h"
+#include "fileHandlingTest.h"
+#include "ntp_stdlib.h"
+#include "ntp_types.h"
+#include "crypto.h"
//=======External Functions This Runner Calls=====
extern void setUp(void);
extern void tearDown(void);
-extern void test_ReadEmptyKeyFile();
-extern void test_ReadASCIIKeys();
-extern void test_ReadHexKeys();
-extern void test_ReadKeyFileWithComments();
-extern void test_ReadKeyFileWithInvalidHex();
+extern void test_ReadEmptyKeyFile(void);
+extern void test_ReadASCIIKeys(void);
+extern void test_ReadHexKeys(void);
+extern void test_ReadKeyFileWithComments(void);
+extern void test_ReadKeyFileWithInvalidHex(void);
//=======Test Reset Option=====
-void resetTest()
+void resetTest(void);
+void resetTest(void)
{
tearDown();
setUp();
}
-char *progname;
+char const *progname;
//=======MAIN=====
int main(int argc, char *argv[])
{
progname = argv[0];
- Unity.TestFile = "keyFile.c";
UnityBegin("keyFile.c");
- RUN_TEST(test_ReadEmptyKeyFile, 53);
- RUN_TEST(test_ReadASCIIKeys, 61);
- RUN_TEST(test_ReadHexKeys, 79);
- RUN_TEST(test_ReadKeyFileWithComments, 105);
- RUN_TEST(test_ReadKeyFileWithInvalidHex, 124);
+ RUN_TEST(test_ReadEmptyKeyFile, 12);
+ RUN_TEST(test_ReadASCIIKeys, 13);
+ RUN_TEST(test_ReadHexKeys, 14);
+ RUN_TEST(test_ReadKeyFileWithComments, 15);
+ RUN_TEST(test_ReadKeyFileWithInvalidHex, 16);
return (UnityEnd());
}
diff --git a/contrib/ntp/sntp/tests/run-kodDatabase.c b/contrib/ntp/sntp/tests/run-kodDatabase.c
index 7fc9678..e5bf3d7 100644
--- a/contrib/ntp/sntp/tests/run-kodDatabase.c
+++ b/contrib/ntp/sntp/tests/run-kodDatabase.c
@@ -22,38 +22,45 @@
#include "unity.h"
#include <setjmp.h>
#include <stdio.h>
+#include "config.h"
+#include "ntp_types.h"
+#include "sntptest.h"
+#include "ntp_stdlib.h"
+#include "sntp-opts.h"
+#include "kod_management.h"
+#include "ntp_io.h"
//=======External Functions This Runner Calls=====
extern void setUp(void);
extern void tearDown(void);
-extern void test_SingleEntryHandling();
-extern void test_MultipleEntryHandling();
-extern void test_NoMatchInSearch();
-extern void test_AddDuplicate();
-extern void test_DeleteEntry();
+extern void test_SingleEntryHandling(void);
+extern void test_MultipleEntryHandling(void);
+extern void test_NoMatchInSearch(void);
+extern void test_AddDuplicate(void);
+extern void test_DeleteEntry(void);
//=======Test Reset Option=====
-void resetTest()
+void resetTest(void);
+void resetTest(void)
{
tearDown();
setUp();
}
-char *progname;
+char const *progname;
//=======MAIN=====
int main(int argc, char *argv[])
{
progname = argv[0];
- Unity.TestFile = "kodDatabase.c";
UnityBegin("kodDatabase.c");
- RUN_TEST(test_SingleEntryHandling, 22);
- RUN_TEST(test_MultipleEntryHandling, 35);
- RUN_TEST(test_NoMatchInSearch, 66);
- RUN_TEST(test_AddDuplicate, 79);
- RUN_TEST(test_DeleteEntry, 104);
+ RUN_TEST(test_SingleEntryHandling, 13);
+ RUN_TEST(test_MultipleEntryHandling, 14);
+ RUN_TEST(test_NoMatchInSearch, 15);
+ RUN_TEST(test_AddDuplicate, 16);
+ RUN_TEST(test_DeleteEntry, 17);
return (UnityEnd());
}
diff --git a/contrib/ntp/sntp/tests/run-kodFile.c b/contrib/ntp/sntp/tests/run-kodFile.c
index 9c58962..3943550 100644
--- a/contrib/ntp/sntp/tests/run-kodFile.c
+++ b/contrib/ntp/sntp/tests/run-kodFile.c
@@ -22,40 +22,45 @@
#include "unity.h"
#include <setjmp.h>
#include <stdio.h>
+#include "config.h"
+#include "ntp_types.h"
+#include "ntp_stdlib.h"
+#include "fileHandlingTest.h"
+#include "kod_management.h"
//=======External Functions This Runner Calls=====
extern void setUp(void);
extern void tearDown(void);
-extern void test_ReadEmptyFile();
-extern void test_ReadCorrectFile();
-extern void test_ReadFileWithBlankLines();
-extern void test_WriteEmptyFile();
-extern void test_WriteFileWithSingleEntry();
-extern void test_WriteFileWithMultipleEntries();
+extern void test_ReadEmptyFile(void);
+extern void test_ReadCorrectFile(void);
+extern void test_ReadFileWithBlankLines(void);
+extern void test_WriteEmptyFile(void);
+extern void test_WriteFileWithSingleEntry(void);
+extern void test_WriteFileWithMultipleEntries(void);
//=======Test Reset Option=====
-void resetTest()
+void resetTest(void);
+void resetTest(void)
{
tearDown();
setUp();
}
-char *progname;
+char const *progname;
//=======MAIN=====
int main(int argc, char *argv[])
{
progname = argv[0];
- Unity.TestFile = "kodFile.c";
UnityBegin("kodFile.c");
- RUN_TEST(test_ReadEmptyFile, 29);
- RUN_TEST(test_ReadCorrectFile, 35);
- RUN_TEST(test_ReadFileWithBlankLines, 53);
- RUN_TEST(test_WriteEmptyFile, 76);
- RUN_TEST(test_WriteFileWithSingleEntry, 92);
- RUN_TEST(test_WriteFileWithMultipleEntries, 116);
+ RUN_TEST(test_ReadEmptyFile, 19);
+ RUN_TEST(test_ReadCorrectFile, 20);
+ RUN_TEST(test_ReadFileWithBlankLines, 21);
+ RUN_TEST(test_WriteEmptyFile, 22);
+ RUN_TEST(test_WriteFileWithSingleEntry, 23);
+ RUN_TEST(test_WriteFileWithMultipleEntries, 24);
return (UnityEnd());
}
diff --git a/contrib/ntp/sntp/tests/run-networking.c b/contrib/ntp/sntp/tests/run-networking.c
index d5e822c..70caaa0 100644
--- a/contrib/ntp/sntp/tests/run-networking.c
+++ b/contrib/ntp/sntp/tests/run-networking.c
@@ -22,6 +22,9 @@
#include "unity.h"
#include <setjmp.h>
#include <stdio.h>
+#include "config.h"
+#include "sntptest.h"
+#include "networking.h"
//=======External Functions This Runner Calls=====
extern void setUp(void);
@@ -29,20 +32,20 @@ extern void tearDown(void);
//=======Test Reset Option=====
-void resetTest()
+void resetTest(void);
+void resetTest(void)
{
tearDown();
setUp();
}
-char *progname;
+char const *progname;
//=======MAIN=====
int main(int argc, char *argv[])
{
progname = argv[0];
- Unity.TestFile = "networking.c";
UnityBegin("networking.c");
return (UnityEnd());
diff --git a/contrib/ntp/sntp/tests/run-packetHandling.c b/contrib/ntp/sntp/tests/run-packetHandling.c
index 69e958e..bc20d7f 100644
--- a/contrib/ntp/sntp/tests/run-packetHandling.c
+++ b/contrib/ntp/sntp/tests/run-packetHandling.c
@@ -22,11 +22,19 @@
#include "unity.h"
#include <setjmp.h>
#include <stdio.h>
+#include "config.h"
+#include "ntp_debug.h"
+#include "ntp_stdlib.h"
+#include "ntp_types.h"
+#include "sntptest.h"
+#include "kod_management.h"
+#include "main.h"
+#include "networking.h"
+#include "ntp.h"
//=======External Functions This Runner Calls=====
extern void setUp(void);
extern void tearDown(void);
-void resetTest(void);
extern void test_GenerateUnauthenticatedPacket(void);
extern void test_GenerateAuthenticatedPacket(void);
extern void test_OffsetCalculationPositiveOffset(void);
@@ -40,31 +48,31 @@ extern void test_HandleCorrectPacket(void);
//=======Test Reset Option=====
-void resetTest()
+void resetTest(void);
+void resetTest(void)
{
tearDown();
setUp();
}
-char *progname;
+char const *progname;
//=======MAIN=====
int main(int argc, char *argv[])
{
progname = argv[0];
- Unity.TestFile = "packetHandling.c";
UnityBegin("packetHandling.c");
- RUN_TEST(test_GenerateUnauthenticatedPacket, 35);
- RUN_TEST(test_GenerateAuthenticatedPacket, 58);
- RUN_TEST(test_OffsetCalculationPositiveOffset, 97);
- RUN_TEST(test_OffsetCalculationNegativeOffset, 141);
- RUN_TEST(test_HandleUnusableServer, 184);
- RUN_TEST(test_HandleUnusablePacket, 195);
- RUN_TEST(test_HandleServerAuthenticationFailure, 206);
- RUN_TEST(test_HandleKodDemobilize, 217);
- RUN_TEST(test_HandleKodRate, 241);
- RUN_TEST(test_HandleCorrectPacket, 252);
+ RUN_TEST(test_GenerateUnauthenticatedPacket, 17);
+ RUN_TEST(test_GenerateAuthenticatedPacket, 18);
+ RUN_TEST(test_OffsetCalculationPositiveOffset, 19);
+ RUN_TEST(test_OffsetCalculationNegativeOffset, 20);
+ RUN_TEST(test_HandleUnusableServer, 21);
+ RUN_TEST(test_HandleUnusablePacket, 22);
+ RUN_TEST(test_HandleServerAuthenticationFailure, 23);
+ RUN_TEST(test_HandleKodDemobilize, 24);
+ RUN_TEST(test_HandleKodRate, 25);
+ RUN_TEST(test_HandleCorrectPacket, 26);
return (UnityEnd());
}
diff --git a/contrib/ntp/sntp/tests/run-packetProcessing.c b/contrib/ntp/sntp/tests/run-packetProcessing.c
index f41d5c7..bf3a63e 100644
--- a/contrib/ntp/sntp/tests/run-packetProcessing.c
+++ b/contrib/ntp/sntp/tests/run-packetProcessing.c
@@ -22,11 +22,14 @@
#include "unity.h"
#include <setjmp.h>
#include <stdio.h>
+#include "config.h"
+#include "sntptest.h"
+#include "networking.h"
+#include "ntp_stdlib.h"
//=======External Functions This Runner Calls=====
extern void setUp(void);
extern void tearDown(void);
-void resetTest(void);
extern void test_TooShortLength(void);
extern void test_LengthNotMultipleOfFour(void);
extern void test_TooShortExtensionFieldLength(void);
@@ -48,39 +51,39 @@ extern void test_CorrectAuthenticatedPacketSHA1(void);
//=======Test Reset Option=====
-void resetTest()
+void resetTest(void);
+void resetTest(void)
{
tearDown();
setUp();
}
-char *progname;
+char const *progname;
//=======MAIN=====
int main(int argc, char *argv[])
{
progname = argv[0];
- Unity.TestFile = "packetProcessing.c";
UnityBegin("packetProcessing.c");
- RUN_TEST(test_TooShortLength, 83);
- RUN_TEST(test_LengthNotMultipleOfFour, 92);
- RUN_TEST(test_TooShortExtensionFieldLength, 101);
- RUN_TEST(test_UnauthenticatedPacketReject, 117);
- RUN_TEST(test_CryptoNAKPacketReject, 131);
- RUN_TEST(test_AuthenticatedPacketInvalid, 143);
- RUN_TEST(test_AuthenticatedPacketUnknownKey, 166);
- RUN_TEST(test_ServerVersionTooOld, 186);
- RUN_TEST(test_ServerVersionTooNew, 201);
- RUN_TEST(test_NonWantedMode, 216);
- RUN_TEST(test_KoDRate, 231);
- RUN_TEST(test_KoDDeny, 242);
- RUN_TEST(test_RejectUnsyncedServer, 253);
- RUN_TEST(test_RejectWrongResponseServerMode, 265);
- RUN_TEST(test_AcceptNoSentPacketBroadcastMode, 282);
- RUN_TEST(test_CorrectUnauthenticatedPacket, 294);
- RUN_TEST(test_CorrectAuthenticatedPacketMD5, 302);
- RUN_TEST(test_CorrectAuthenticatedPacketSHA1, 322);
+ RUN_TEST(test_TooShortLength, 19);
+ RUN_TEST(test_LengthNotMultipleOfFour, 20);
+ RUN_TEST(test_TooShortExtensionFieldLength, 21);
+ RUN_TEST(test_UnauthenticatedPacketReject, 22);
+ RUN_TEST(test_CryptoNAKPacketReject, 23);
+ RUN_TEST(test_AuthenticatedPacketInvalid, 24);
+ RUN_TEST(test_AuthenticatedPacketUnknownKey, 25);
+ RUN_TEST(test_ServerVersionTooOld, 26);
+ RUN_TEST(test_ServerVersionTooNew, 27);
+ RUN_TEST(test_NonWantedMode, 28);
+ RUN_TEST(test_KoDRate, 29);
+ RUN_TEST(test_KoDDeny, 30);
+ RUN_TEST(test_RejectUnsyncedServer, 31);
+ RUN_TEST(test_RejectWrongResponseServerMode, 32);
+ RUN_TEST(test_AcceptNoSentPacketBroadcastMode, 33);
+ RUN_TEST(test_CorrectUnauthenticatedPacket, 34);
+ RUN_TEST(test_CorrectAuthenticatedPacketMD5, 35);
+ RUN_TEST(test_CorrectAuthenticatedPacketSHA1, 36);
return (UnityEnd());
}
diff --git a/contrib/ntp/sntp/tests/run-t-log.c b/contrib/ntp/sntp/tests/run-t-log.c
new file mode 100644
index 0000000..dc9fa04
--- /dev/null
+++ b/contrib/ntp/sntp/tests/run-t-log.c
@@ -0,0 +1,57 @@
+/* AUTOGENERATED FILE. DO NOT EDIT. */
+
+//=======Test Runner Used To Run Each Test Below=====
+#define RUN_TEST(TestFunc, TestLineNum) \
+{ \
+ Unity.CurrentTestName = #TestFunc; \
+ Unity.CurrentTestLineNumber = TestLineNum; \
+ Unity.NumberOfTests++; \
+ if (TEST_PROTECT()) \
+ { \
+ setUp(); \
+ TestFunc(); \
+ } \
+ if (TEST_PROTECT() && !TEST_IS_IGNORED) \
+ { \
+ tearDown(); \
+ } \
+ UnityConcludeTest(); \
+}
+
+//=======Automagically Detected Files To Include=====
+#include "unity.h"
+#include <setjmp.h>
+#include <stdio.h>
+#include "config.h"
+#include "ntp_types.h"
+
+//=======External Functions This Runner Calls=====
+extern void setUp(void);
+extern void tearDown(void);
+extern void testChangePrognameInMysyslog(void);
+extern void testOpenLogfileTest(void);
+extern void testWriteInCustomLogfile(void);
+
+
+//=======Test Reset Option=====
+void resetTest(void);
+void resetTest(void)
+{
+ tearDown();
+ setUp();
+}
+
+char const *progname;
+
+
+//=======MAIN=====
+int main(int argc, char *argv[])
+{
+ progname = argv[0];
+ UnityBegin("t-log.c");
+ RUN_TEST(testChangePrognameInMysyslog, 9);
+ RUN_TEST(testOpenLogfileTest, 10);
+ RUN_TEST(testWriteInCustomLogfile, 35);
+
+ return (UnityEnd());
+}
diff --git a/contrib/ntp/sntp/tests/run-utilities.c b/contrib/ntp/sntp/tests/run-utilities.c
index 715bd11..7c2237b 100644
--- a/contrib/ntp/sntp/tests/run-utilities.c
+++ b/contrib/ntp/sntp/tests/run-utilities.c
@@ -22,43 +22,48 @@
#include "unity.h"
#include <setjmp.h>
#include <stdio.h>
+#include "config.h"
+#include "sntptest.h"
+#include "fileHandlingTest.h"
+#include "main.h"
+#include "utilities.h"
+#include <math.h>
//=======External Functions This Runner Calls=====
extern void setUp(void);
extern void tearDown(void);
-void resetTest(void);
-extern void test_IPv4Address();
-extern void test_IPv6Address();
-extern void test_SetLiVnMode1();
-extern void test_SetLiVnMode2();
-extern void test_PktOutput();
-extern void test_LfpOutputBinaryFormat();
-extern void test_LfpOutputDecimalFormat();
+extern void test_IPv4Address(void);
+extern void test_IPv6Address(void);
+extern void test_SetLiVnMode1(void);
+extern void test_SetLiVnMode2(void);
+extern void test_PktOutput(void);
+extern void test_LfpOutputBinaryFormat(void);
+extern void test_LfpOutputDecimalFormat(void);
//=======Test Reset Option=====
-void resetTest()
+void resetTest(void);
+void resetTest(void)
{
tearDown();
setUp();
}
-char *progname;
+char const *progname;
//=======MAIN=====
int main(int argc, char *argv[])
{
progname = argv[0];
- Unity.TestFile = "utilities.c";
UnityBegin("utilities.c");
- RUN_TEST(test_IPv4Address, 68);
- RUN_TEST(test_IPv6Address, 78);
- RUN_TEST(test_SetLiVnMode1, 98);
- RUN_TEST(test_SetLiVnMode2, 111);
- RUN_TEST(test_PktOutput, 126);
- RUN_TEST(test_LfpOutputBinaryFormat, 146);
- RUN_TEST(test_LfpOutputDecimalFormat, 162);
+ RUN_TEST(test_IPv4Address, 16);
+ RUN_TEST(test_IPv6Address, 17);
+ RUN_TEST(test_SetLiVnMode1, 18);
+ RUN_TEST(test_SetLiVnMode2, 19);
+ RUN_TEST(test_PktOutput, 20);
+ RUN_TEST(test_LfpOutputBinaryFormat, 21);
+ RUN_TEST(test_LfpOutputDecimalFormat, 22);
return (UnityEnd());
}
diff --git a/contrib/ntp/sntp/tests/sntptest.c b/contrib/ntp/sntp/tests/sntptest.c
new file mode 100644
index 0000000..73c1ad2
--- /dev/null
+++ b/contrib/ntp/sntp/tests/sntptest.c
@@ -0,0 +1,33 @@
+
+#include "config.h"
+#include "ntp_stdlib.h"
+#include "sntp-opts.h"
+#include "sntptest.h"
+
+void
+sntptest(void) {
+ optionSaveState(&sntpOptions);
+}
+
+
+void
+sntptest_destroy(void) {
+ optionRestore(&sntpOptions);
+}
+
+
+void
+ActivateOption(const char* option, const char* argument) {
+
+ const int ARGV_SIZE = 4;
+
+ char* opts[ARGV_SIZE];
+
+ opts[0] = estrdup("sntpopts");
+ opts[1] = estrdup(option);
+ opts[2] = estrdup(argument);
+ opts[3] = estrdup("127.0.0.1");
+
+ optionProcess(&sntpOptions, ARGV_SIZE, opts);
+}
+
diff --git a/contrib/ntp/sntp/tests/sntptest.h b/contrib/ntp/sntp/tests/sntptest.h
index eff6f6e..82e2562 100644
--- a/contrib/ntp/sntp/tests/sntptest.h
+++ b/contrib/ntp/sntp/tests/sntptest.h
@@ -4,28 +4,8 @@
#include "ntp_stdlib.h"
#include "sntp-opts.h"
-
-sntptest() {
- optionSaveState(&sntpOptions);
-}
-
-sntptest_destroy() {
- optionRestore(&sntpOptions);
-}
-
-void ActivateOption(const char* option, const char* argument) {
-
- const int ARGV_SIZE = 4;
-
- char* opts[ARGV_SIZE];
-
- opts[0] = estrdup("sntpopts");
- opts[1] = estrdup(option);
- opts[2] = estrdup(argument);
- opts[3] = estrdup("127.0.0.1");
-
- optionProcess(&sntpOptions, ARGV_SIZE, opts);
-}
-
+void sntptest(void);
+void sntptest_destroy(void);
+void ActivateOption(const char* option, const char* argument);
#endif // SNTPTEST_H
diff --git a/contrib/ntp/sntp/tests/t-log.c b/contrib/ntp/sntp/tests/t-log.c
new file mode 100644
index 0000000..1546584
--- /dev/null
+++ b/contrib/ntp/sntp/tests/t-log.c
@@ -0,0 +1,68 @@
+#include "config.h"
+#include "unity.h"
+#include "ntp_types.h"
+
+
+//#include "log.h"
+#include "log.c"
+
+void testChangePrognameInMysyslog(void);
+void testOpenLogfileTest(void);
+
+
+//in var/log/syslog (may differ depending on your OS), logged name of the program will be "TEST_PROGNAME".
+
+void testChangePrognameInMysyslog(void){
+ sntp_init_logging("TEST_PROGNAME");
+ msyslog(LOG_ERR, "TESTING sntp_init_logging()"); //%m will print the last errno?
+}
+
+//writes log files in your own file instead of syslog! (MAY BE USEFUL TO SUPPRESS ERROR MESSAGES!)
+
+void testOpenLogfileTest(void){
+ sntp_init_logging("TEST_PROGNAME2"); //this name is consistent through the entire program unless changed
+ open_logfile("testLogfile.log");
+ //open_logfile("/var/log/syslog"); //this gives me "Permission Denied" when i do %m
+
+ msyslog(LOG_ERR, "Cannot open log file %s","abcXX");
+ //cleanup_log(); //unnecessary after log.c fix!
+
+}
+
+
+//multiple cleanup_log() causes segfault. Probably the reason it's static. Opening multiple open_logfile(name) will cause segfault x.x I'm guessing it's not intended to be changed. Cleanup after unity test doesn't fix it, looks like. Calling in tearDown() also causes issues.
+
+void testWriteInCustomLogfile(void){
+ char testString[256] = "12345 ABC";
+ char testName[256] = "TEST_PROGNAME3";
+
+ remove("testLogfile2.log");
+
+ sntp_init_logging(testName);
+ open_logfile("testLogfile2.log"); // ./ causing issues
+ //sntp_init_logging(testName);
+
+
+ msyslog(LOG_ERR, testString);
+ FILE * f = fopen("testLogfile2.log","r");
+ char line[256];
+
+ //should be only 1 line
+ while (fgets(line, sizeof(line), f)) {
+ printf("%s", line);
+ }
+
+
+ char* x = strstr(line,testName);
+
+ TEST_ASSERT_TRUE( x != NULL);
+
+ x = strstr(line,testString);
+ TEST_ASSERT_TRUE( x != NULL);
+ //cleanup_log();
+ fclose(f); //using this will also cause segfault, because at the end, log.c will call (using atexit(func) function) cleanup_log(void)-> fclose(syslog_file);
+ //After the 1st fclose, syslog_file = NULL, and is never reset -> hopefully fixed by editing log.c
+ //TEST_ASSERT_EQUAL_STRING(testString,line); //doesn't work, line is dynamic because the process name is random.
+}
+
+
diff --git a/contrib/ntp/sntp/tests/utilities.c b/contrib/ntp/sntp/tests/utilities.c
index 65be8df..39d22d6 100644
--- a/contrib/ntp/sntp/tests/utilities.c
+++ b/contrib/ntp/sntp/tests/utilities.c
@@ -2,18 +2,31 @@
#include "sntptest.h"
#include "fileHandlingTest.h"
-
#include "main.h"
#include "utilities.h"
-#include "math.h"
#include "unity.h"
-const char * Version = "stub unit test Version string";
+#include <math.h>
+sockaddr_u CreateSockaddr4(const char* address);
+struct addrinfo CreateAddrinfo(sockaddr_u* sock);
+void InitDebugTest(const char * filename);
+void FinishDebugTest(const char * expected,const char * actual);
+void test_IPv4Address(void);
+void test_IPv6Address(void);
+void test_SetLiVnMode1(void);
+void test_SetLiVnMode2(void);
+void test_PktOutput(void);
+void test_LfpOutputBinaryFormat(void);
+void test_LfpOutputDecimalFormat(void);
-sockaddr_u CreateSockaddr4(const char* address) {
+const char * Version = "stub unit test Version string";
+
+
+sockaddr_u
+CreateSockaddr4(const char* address) {
sockaddr_u s;
s.sa4.sin_family = AF_INET;
s.sa4.sin_addr.s_addr = inet_addr(address);
@@ -22,7 +35,9 @@ sockaddr_u CreateSockaddr4(const char* address) {
return s;
}
-struct addrinfo CreateAddrinfo( sockaddr_u* sock) {
+
+struct addrinfo
+CreateAddrinfo(sockaddr_u* sock) {
struct addrinfo a;
a.ai_family = sock->sa.sa_family;
a.ai_addrlen = SIZEOF_SOCKADDR(a.ai_family);
@@ -34,26 +49,28 @@ struct addrinfo CreateAddrinfo( sockaddr_u* sock) {
bool outputFileOpened;
FILE* outputFile;
-//debugUtilitiesTest() : outputFileOpened(false) {}
-void InitDebugTest(const char * filename) {
+void
+InitDebugTest(const char * filename) {
// Clear the contents of the current file.
// Open the output file
outputFile = fopen(filename, "w+");
- TEST_ASSERT_TRUE(outputFile != NULL);
+ TEST_ASSERT_NOT_NULL(outputFile);
outputFileOpened = true;
}
+
// Closes outputFile, and compare contents.
-void FinishDebugTest(const char * expected,
+void
+FinishDebugTest(const char * expected,
const char * actual) {
if (outputFileOpened)
fclose(outputFile);
FILE * e = fopen(expected,"rb");
FILE * a = fopen(actual,"rb");
- TEST_ASSERT_TRUE(e != NULL);
- TEST_ASSERT_TRUE(a != NULL);
+ TEST_ASSERT_NOT_NULL(e);
+ TEST_ASSERT_NOT_NULL(a);
CompareFileContent(e, a);
}
@@ -65,7 +82,8 @@ void FinishDebugTest(const char * expected,
* tests can be removed.
*/
-void test_IPv4Address() {
+void
+test_IPv4Address(void) {
const char* ADDR = "192.0.2.10";
sockaddr_u input = CreateSockaddr4(ADDR);
@@ -75,7 +93,9 @@ void test_IPv4Address() {
TEST_ASSERT_EQUAL_STRING(ADDR, addrinfo_to_str(&inputA));
}
-void test_IPv6Address() {
+
+void
+test_IPv6Address(void) {
const struct in6_addr address = {
0x20, 0x01, 0x0d, 0xb8,
0x85, 0xa3, 0x08, 0xd3,
@@ -95,7 +115,9 @@ void test_IPv6Address() {
TEST_ASSERT_EQUAL_STRING(expected, addrinfo_to_str(&inputA));
}
-void test_SetLiVnMode1() {
+
+void
+test_SetLiVnMode1(void) {
struct pkt expected;
expected.li_vn_mode = PKT_LI_VN_MODE(LEAP_NOWARNING,
NTP_VERSION,
@@ -108,7 +130,9 @@ void test_SetLiVnMode1() {
TEST_ASSERT_EQUAL(expected.li_vn_mode, actual.li_vn_mode);
}
-void test_SetLiVnMode2() {
+
+void
+test_SetLiVnMode2(void) {
struct pkt expected;
expected.li_vn_mode = PKT_LI_VN_MODE(LEAP_NOTINSYNC,
NTP_OLDVERSION,
@@ -123,8 +147,9 @@ void test_SetLiVnMode2() {
/* Debug utilities tests */
-void test_PktOutput() {
- char * filename = "debug-output-pkt";//CreatePath("debug-output-pkt", OUTPUT_DIR);
+void
+test_PktOutput(void) {
+ char * filename = "debug-output-pkt";
InitDebugTest(filename);
struct pkt testpkt;
@@ -143,7 +168,9 @@ void test_PktOutput() {
FinishDebugTest(CreatePath("debug-input-pkt", INPUT_DIR), filename);
}
-void test_LfpOutputBinaryFormat() {
+
+void
+test_LfpOutputBinaryFormat(void) {
char * filename = "debug-output-lfp-bin";//CreatePath("debug-output-lfp-bin", OUTPUT_DIR);
InitDebugTest(filename);
@@ -159,8 +186,10 @@ void test_LfpOutputBinaryFormat() {
FinishDebugTest(CreatePath("debug-input-lfp-bin", INPUT_DIR), filename);
}
-void test_LfpOutputDecimalFormat() {
- char * filename = "debug-output-lfp-dec"; //CreatePath("debug-output-lfp-dec", OUTPUT_DIR);
+
+void
+test_LfpOutputDecimalFormat(void) {
+ char * filename = "debug-output-lfp-dec";
InitDebugTest(filename);
l_fp test;
@@ -174,4 +203,3 @@ void test_LfpOutputDecimalFormat() {
FinishDebugTest(CreatePath("debug-input-lfp-dec", INPUT_DIR), filename);
}
-
diff --git a/contrib/ntp/sntp/tests_main.cpp b/contrib/ntp/sntp/tests_main.cpp
deleted file mode 100644
index 584165d..0000000
--- a/contrib/ntp/sntp/tests_main.cpp
+++ /dev/null
@@ -1,29 +0,0 @@
-#include "tests_main.h"
-
-extern "C" {
-const char * Version = "stub unit test Version string";
-};
-
-int main(int argc, char **argv) {
- ::testing::InitGoogleTest(&argc, argv);
-
- init_lib();
- init_auth();
-
- // Some tests makes use of extra parameters passed to the tests
- // executable. Save these params as static members of the base class.
- if (argc > 1) {
- ntptest::SetExtraParams(1, argc-1, argv);
- }
-
- return RUN_ALL_TESTS();
-}
-
-std::vector<std::string> ntptest::m_params;
-
-void ntptest::SetExtraParams(int start, int count, char** argv)
-{
- for (int i=0; i<count; i++) {
- m_params.push_back(argv[i+start]);
- }
-}
diff --git a/contrib/ntp/sntp/tests_main.h b/contrib/ntp/sntp/tests_main.h
deleted file mode 100644
index 991f4b6..0000000
--- a/contrib/ntp/sntp/tests_main.h
+++ /dev/null
@@ -1,22 +0,0 @@
-#ifndef TESTS_MAIN_H
-#define TESTS_MAIN_H
-
-#include "config.h"
-
-#include <string>
-#include <vector>
-
-#include <gtest/gtest.h>
-
-extern "C" {
-#include "ntp_stdlib.h"
-}
-
-class ntptest : public ::testing::Test {
-public:
- static void SetExtraParams(int start, int count, char** argv);
-protected:
- static std::vector<std::string> m_params;
-};
-
-#endif // TESTS_MAIN_H
diff --git a/contrib/ntp/sntp/unity/Makefile.am b/contrib/ntp/sntp/unity/Makefile.am
index a09e36e..31029ff 100644
--- a/contrib/ntp/sntp/unity/Makefile.am
+++ b/contrib/ntp/sntp/unity/Makefile.am
@@ -6,18 +6,20 @@ CLEANFILES =
noinst_LIBRARIES = libunity.a
libunity_a_CFLAGS = \
- -DUNITY_INCLUDE_DOUBLE \
+ -DUNITY_INCLUDE_CONFIG_H \
$(NULL)
libunity_a_SOURCES = \
../libpkgver/colcomp.c \
unity.c \
unity.h \
+ unity_config.h \
unity_internals.h \
unity_fixture.c \
unity_fixture.h \
unity_fixture_internals.h \
unity_fixture_malloc_overrides.h \
+ unity_config.h \
$(NULL)
include $(top_srcdir)/depsver.mf
diff --git a/contrib/ntp/sntp/unity/Makefile.in b/contrib/ntp/sntp/unity/Makefile.in
index 956ff1e..a5758b4 100644
--- a/contrib/ntp/sntp/unity/Makefile.in
+++ b/contrib/ntp/sntp/unity/Makefile.in
@@ -213,6 +213,7 @@ AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
+BUILD_THREAD = @BUILD_THREAD@
CALC_TICKADJ_DB = @CALC_TICKADJ_DB@
CALC_TICKADJ_DL = @CALC_TICKADJ_DL@
CALC_TICKADJ_DS = @CALC_TICKADJ_DS@
@@ -221,6 +222,7 @@ CALC_TICKADJ_NI = @CALC_TICKADJ_NI@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
+CFLAGS_LIBEVENT = @CFLAGS_LIBEVENT@
CFLAGS_NTP = @CFLAGS_NTP@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
@@ -274,6 +276,7 @@ LIBTOOL_DEPS = @LIBTOOL_DEPS@
LIB_SYSLOG = @LIB_SYSLOG@
LIPO = @LIPO@
LN_S = @LN_S@
+LTHREAD_LIBS = @LTHREAD_LIBS@
LTLIBOBJS = @LTLIBOBJS@
MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
@@ -443,18 +446,20 @@ BUILT_SOURCES = .deps-ver
CLEANFILES = .deps-ver
noinst_LIBRARIES = libunity.a
libunity_a_CFLAGS = \
- -DUNITY_INCLUDE_DOUBLE \
+ -DUNITY_INCLUDE_CONFIG_H \
$(NULL)
libunity_a_SOURCES = \
../libpkgver/colcomp.c \
unity.c \
unity.h \
+ unity_config.h \
unity_internals.h \
unity_fixture.c \
unity_fixture.h \
unity_fixture_internals.h \
unity_fixture_malloc_overrides.h \
+ unity_config.h \
$(NULL)
SNTP_INCS = -I$(top_srcdir)/../include \
diff --git a/contrib/ntp/sntp/unity/auto/generate_test_runner.rb b/contrib/ntp/sntp/unity/auto/generate_test_runner.rb
index c115fad..5b1d451 100644
--- a/contrib/ntp/sntp/unity/auto/generate_test_runner.rb
+++ b/contrib/ntp/sntp/unity/auto/generate_test_runner.rb
@@ -2,28 +2,44 @@
# Unity Project - A Test Framework for C
# Copyright (c) 2007 Mike Karlesky, Mark VanderVoord, Greg Williams
# [Released under MIT License. Please refer to license.txt for details]
-# ==========================================
+# ==========================================
+$QUICK_RUBY_VERSION = RUBY_VERSION.split('.').inject(0){|vv,v| vv * 100 + v.to_i }
File.expand_path(File.join(File.dirname(__FILE__),'colour_prompt'))
class UnityTestRunnerGenerator
def initialize(options = nil)
- @options = { :includes => [], :plugins => [], :framework => :unity }
+ @options = UnityTestRunnerGenerator.default_options
+
case(options)
when NilClass then @options
when String then @options.merge!(UnityTestRunnerGenerator.grab_config(options))
when Hash then @options.merge!(options)
else raise "If you specify arguments, it should be a filename or a hash of options"
end
+ require "#{File.expand_path(File.dirname(__FILE__))}/type_sanitizer"
+ end
+
+ def self.default_options
+ {
+ :includes => [],
+ :plugins => [],
+ :framework => :unity,
+ :test_prefix => "test|spec|should",
+ :setup_name => "setUp",
+ :teardown_name => "tearDown",
+ }
end
-
+
+
def self.grab_config(config_file)
- options = { :includes => [], :plugins => [], :framework => :unity }
+ options = self.default_options
+
unless (config_file.nil? or config_file.empty?)
require 'yaml'
yaml_guts = YAML.load_file(config_file)
- options.merge!(yaml_guts[:unity] ? yaml_guts[:unity] : yaml_guts[:cmock])
+ options.merge!(yaml_guts[:unity] || yaml_guts[:cmock])
raise "No :unity or :cmock section found in #{config_file}" unless options
end
return(options)
@@ -31,126 +47,167 @@ class UnityTestRunnerGenerator
def run(input_file, output_file, options=nil)
tests = []
- includes = []
+ testfile_includes = []
used_mocks = []
-
+
+
@options.merge!(options) unless options.nil?
module_name = File.basename(input_file)
-
+
+
#pull required data from source file
- File.open(input_file, 'r') do |input|
- tests = find_tests(input)
- includes = find_includes(input)
- used_mocks = find_mocks(includes)
- end
+ source = File.read(input_file)
+ source = source.force_encoding("ISO-8859-1").encode("utf-8", :replace => nil) if ($QUICK_RUBY_VERSION > 10900)
+ tests = find_tests(source)
+ headers = find_includes(source)
+ testfile_includes = headers[:local] + headers[:system]
+ used_mocks = find_mocks(testfile_includes)
+
#build runner file
+ generate(input_file, output_file, tests, used_mocks, testfile_includes)
+
+ #determine which files were used to return them
+ all_files_used = [input_file, output_file]
+ all_files_used += testfile_includes.map {|filename| filename + '.c'} unless testfile_includes.empty?
+ all_files_used += @options[:includes] unless @options[:includes].empty?
+ return all_files_used.uniq
+ end
+
+ def generate(input_file, output_file, tests, used_mocks, testfile_includes)
File.open(output_file, 'w') do |output|
- create_header(output, used_mocks)
+ create_header(output, used_mocks, testfile_includes)
create_externs(output, tests, used_mocks)
create_mock_management(output, used_mocks)
create_suite_setup_and_teardown(output)
create_reset(output, used_mocks)
- create_main(output, input_file, tests)
+ create_main(output, input_file, tests, used_mocks)
end
-
- all_files_used = [input_file, output_file]
- all_files_used += includes.map {|filename| filename + '.c'} unless includes.empty?
- all_files_used += @options[:includes] unless @options[:includes].empty?
- return all_files_used.uniq
+
+
+
+
+
end
-
- def find_tests(input_file)
- tests_raw = []
- tests_args = []
+
+
+ def find_tests(source)
+
+
tests_and_line_numbers = []
-
- input_file.rewind
- source_raw = input_file.read
- source_scrubbed = source_raw.gsub(/\/\/.*$/, '') # remove line comments
+
+
+
+
+ source_scrubbed = source.gsub(/\/\/.*$/, '') # remove line comments
source_scrubbed = source_scrubbed.gsub(/\/\*.*?\*\//m, '') # remove block comments
lines = source_scrubbed.split(/(^\s*\#.*$) # Treat preprocessor directives as a logical line
| (;|\{|\}) /x) # Match ;, {, and } as end of lines
lines.each_with_index do |line, index|
#find tests
- if line =~ /^((?:\s*TEST_CASE\s*\(.*?\)\s*)*)\s*void\s+(test.*?)\s*\(\s*(.*)\s*\)/
+ if line =~ /^((?:\s*TEST_CASE\s*\(.*?\)\s*)*)\s*void\s+((?:#{@options[:test_prefix]}).*)\s*\(\s*(.*)\s*\)/
+ arguments = $1
name = $2
call = $3
- args = (@options[:use_param_tests] and $1) ? ($1.gsub(/\s*TEST_CASE\s*\(\s*/,'').strip.split(/\s*\)/).compact) : nil
- tests_and_line_numbers << { :name => name, :args => args, :call => call, :line_number => 0 }
- tests_args = []
+ args = nil
+ if (@options[:use_param_tests] and !arguments.empty?)
+ args = []
+ arguments.scan(/\s*TEST_CASE\s*\((.*)\)\s*$/) {|a| args << a[0]}
+ end
+ tests_and_line_numbers << { :test => name, :args => args, :call => call, :line_number => 0 }
+
end
end
+ tests_and_line_numbers.uniq! {|v| v[:test] }
#determine line numbers and create tests to run
- source_lines = source_raw.split("\n")
+ source_lines = source.split("\n")
source_index = 0;
tests_and_line_numbers.size.times do |i|
source_lines[source_index..-1].each_with_index do |line, index|
- if (line =~ /#{tests_and_line_numbers[i][:name]}/)
+ if (line =~ /#{tests_and_line_numbers[i][:test]}/)
source_index += index
tests_and_line_numbers[i][:line_number] = source_index + 1
break
end
end
end
-
+
+
return tests_and_line_numbers
end
- def find_includes(input_file)
- input_file.rewind
- includes = []
- input_file.readlines.each do |line|
- scan_results = line.scan(/^\s*#include\s+\"\s*(.+)\.[hH]\s*\"/)
- includes << scan_results[0][0] if (scan_results.size > 0)
- end
+ def find_includes(source)
+
+ #remove comments (block and line, in three steps to ensure correct precedence)
+ source.gsub!(/\/\/(?:.+\/\*|\*(?:$|[^\/])).*$/, '') # remove line comments that comment out the start of blocks
+ source.gsub!(/\/\*.*?\*\//m, '') # remove block comments
+ source.gsub!(/\/\/.*$/, '') # remove line comments (all that remain)
+
+ #parse out includes
+
+ includes = {
+
+ :local => source.scan(/^\s*#include\s+\"\s*(.+)\.[hH]\s*\"/).flatten,
+ :system => source.scan(/^\s*#include\s+<\s*(.+)\s*>/).flatten.map { |inc| "<#{inc}>" }
+ }
+
+
return includes
end
-
+
+
def find_mocks(includes)
mock_headers = []
includes.each do |include_file|
mock_headers << File.basename(include_file) if (include_file =~ /^mock/i)
end
- return mock_headers
+ return mock_headers
end
-
- def create_header(output, mocks)
+
+
+ def create_header(output, mocks, testfile_includes=[])
output.puts('/* AUTOGENERATED FILE. DO NOT EDIT. */')
create_runtest(output, mocks)
output.puts("\n//=======Automagically Detected Files To Include=====")
output.puts("#include \"#{@options[:framework].to_s}.h\"")
output.puts('#include "cmock.h"') unless (mocks.empty?)
- @options[:includes].flatten.uniq.compact.each do |includes|
- output.puts("#include \"#{includes.gsub('.h','')}.h\"")
+ @options[:includes].flatten.uniq.compact.each do |inc|
+ output.puts("#include #{inc.include?('<') ? inc : "\"#{inc.gsub('.h','')}.h\""}")
end
output.puts('#include <setjmp.h>')
output.puts('#include <stdio.h>')
output.puts('#include "CException.h"') if @options[:plugins].include?(:cexception)
+ testfile_includes.delete_if{|inc| inc =~ /(unity|cmock)/}
+ testrunner_includes = testfile_includes - mocks
+ testrunner_includes.each do |inc|
+ output.puts("#include #{inc.include?('<') ? inc : "\"#{inc.gsub('.h','')}.h\""}")
+ end
mocks.each do |mock|
output.puts("#include \"#{mock.gsub('.h','')}.h\"")
end
if @options[:enforce_strict_ordering]
- output.puts('')
- output.puts('int GlobalExpectCount;')
- output.puts('int GlobalVerifyOrder;')
- output.puts('char* GlobalOrderError;')
+ output.puts('')
+ output.puts('int GlobalExpectCount;')
+ output.puts('int GlobalVerifyOrder;')
+ output.puts('char* GlobalOrderError;')
end
end
-
+
+
def create_externs(output, tests, mocks)
output.puts("\n//=======External Functions This Runner Calls=====")
- output.puts("extern void setUp(void);")
- output.puts("extern void tearDown(void);")
- output.puts("void resetTest(void);")
+ output.puts("extern void #{@options[:setup_name]}(void);")
+ output.puts("extern void #{@options[:teardown_name]}(void);")
+
tests.each do |test|
- output.puts("extern void #{test[:name]}(#{test[:call]});")
+ output.puts("extern void #{test[:test]}(#{test[:call] || 'void'});")
end
output.puts('')
end
-
+
+
def create_mock_management(output, mocks)
unless (mocks.empty?)
output.puts("\n//=======Mock Management=====")
@@ -158,30 +215,34 @@ class UnityTestRunnerGenerator
output.puts("{")
if @options[:enforce_strict_ordering]
output.puts(" GlobalExpectCount = 0;")
- output.puts(" GlobalVerifyOrder = 0;")
- output.puts(" GlobalOrderError = NULL;")
+ output.puts(" GlobalVerifyOrder = 0;")
+ output.puts(" GlobalOrderError = NULL;")
end
mocks.each do |mock|
- output.puts(" #{mock}_Init();")
+ mock_clean = TypeSanitizer.sanitize_c_identifier(mock)
+ output.puts(" #{mock_clean}_Init();")
end
output.puts("}\n")
output.puts("static void CMock_Verify(void)")
output.puts("{")
mocks.each do |mock|
- output.puts(" #{mock}_Verify();")
+ mock_clean = TypeSanitizer.sanitize_c_identifier(mock)
+ output.puts(" #{mock_clean}_Verify();")
end
output.puts("}\n")
output.puts("static void CMock_Destroy(void)")
output.puts("{")
mocks.each do |mock|
- output.puts(" #{mock}_Destroy();")
+ mock_clean = TypeSanitizer.sanitize_c_identifier(mock)
+ output.puts(" #{mock_clean}_Destroy();")
end
output.puts("}\n")
end
end
-
+
+
def create_suite_setup_and_teardown(output)
unless (@options[:suite_setup].nil?)
output.puts("\n//=======Suite Setup=====")
@@ -198,78 +259,91 @@ class UnityTestRunnerGenerator
output.puts("}")
end
end
-
+
+
def create_runtest(output, used_mocks)
cexception = @options[:plugins].include? :cexception
va_args1 = @options[:use_param_tests] ? ', ...' : ''
va_args2 = @options[:use_param_tests] ? '__VA_ARGS__' : ''
output.puts("\n//=======Test Runner Used To Run Each Test Below=====")
- output.puts("#define RUN_TEST_NO_ARGS") if @options[:use_param_tests]
+ output.puts("#define RUN_TEST_NO_ARGS") if @options[:use_param_tests]
output.puts("#define RUN_TEST(TestFunc, TestLineNum#{va_args1}) \\")
output.puts("{ \\")
output.puts(" Unity.CurrentTestName = #TestFunc#{va_args2.empty? ? '' : " \"(\" ##{va_args2} \")\""}; \\")
output.puts(" Unity.CurrentTestLineNumber = TestLineNum; \\")
output.puts(" Unity.NumberOfTests++; \\")
+ output.puts(" CMock_Init(); \\") unless (used_mocks.empty?)
output.puts(" if (TEST_PROTECT()) \\")
output.puts(" { \\")
output.puts(" CEXCEPTION_T e; \\") if cexception
output.puts(" Try { \\") if cexception
- output.puts(" CMock_Init(); \\") unless (used_mocks.empty?)
- output.puts(" setUp(); \\")
+ output.puts(" #{@options[:setup_name]}(); \\")
+
+
output.puts(" TestFunc(#{va_args2}); \\")
- output.puts(" CMock_Verify(); \\") unless (used_mocks.empty?)
+
output.puts(" } Catch(e) { TEST_ASSERT_EQUAL_HEX32_MESSAGE(CEXCEPTION_NONE, e, \"Unhandled Exception!\"); } \\") if cexception
output.puts(" } \\")
- output.puts(" CMock_Destroy(); \\") unless (used_mocks.empty?)
+
output.puts(" if (TEST_PROTECT() && !TEST_IS_IGNORED) \\")
output.puts(" { \\")
- output.puts(" tearDown(); \\")
+ output.puts(" #{@options[:teardown_name]}(); \\")
+ output.puts(" CMock_Verify(); \\") unless (used_mocks.empty?)
+
output.puts(" } \\")
+ output.puts(" CMock_Destroy(); \\") unless (used_mocks.empty?)
output.puts(" UnityConcludeTest(); \\")
output.puts("}\n")
end
-
+
+
def create_reset(output, used_mocks)
output.puts("\n//=======Test Reset Option=====")
- output.puts("void resetTest()")
+ output.puts("void resetTest(void);")
+ output.puts("void resetTest(void)")
+
output.puts("{")
output.puts(" CMock_Verify();") unless (used_mocks.empty?)
output.puts(" CMock_Destroy();") unless (used_mocks.empty?)
- output.puts(" tearDown();")
- output.puts(" CMock_Init();") unless (used_mocks.empty?)
- output.puts(" setUp();")
+ output.puts(" #{@options[:teardown_name]}();")
+
+ output.puts(" CMock_Init();") unless (used_mocks.empty?)
+ output.puts(" #{@options[:setup_name]}();")
+
output.puts("}")
end
-
- def create_main(output, filename, tests)
- output.puts("\nchar *progname;\n")
+
+
+ def create_main(output, filename, tests, used_mocks)
+ output.puts("\nchar const *progname;\n")
output.puts("\n\n//=======MAIN=====")
-
+
output.puts("int main(int argc, char *argv[])")
output.puts("{")
- #new stuff added
- #output.puts("\nu_long current_time = 4; // needed by authkeys. Used only in to calculate lifetime.\n");
-
- output.puts(" progname = argv[0];\n")
- #not necessary after all
- #output.puts(" init_lib();\n")
- #output.puts(" init_auth();\n")
+ output.puts(" progname = argv[0];\n")
+
+
+
+
+
+
output.puts(" suite_setup();") unless @options[:suite_setup].nil?
- output.puts(" Unity.TestFile = \"#{filename}\";")
+
output.puts(" UnityBegin(\"#{filename}\");")
if (@options[:use_param_tests])
tests.each do |test|
if ((test[:args].nil?) or (test[:args].empty?))
- output.puts(" RUN_TEST(#{test[:name]}, #{test[:line_number]}, RUN_TEST_NO_ARGS);")
+ output.puts(" RUN_TEST(#{test[:test]}, #{test[:line_number]}, RUN_TEST_NO_ARGS);")
else
- test[:args].each {|args| output.puts(" RUN_TEST(#{test[:name]}, #{test[:line_number]}, #{args});")}
+ test[:args].each {|args| output.puts(" RUN_TEST(#{test[:test]}, #{test[:line_number]}, #{args});")}
end
end
else
- tests.each { |test| output.puts(" RUN_TEST(#{test[:name]}, #{test[:line_number]});") }
+ tests.each { |test| output.puts(" RUN_TEST(#{test[:test]}, #{test[:line_number]});") }
end
output.puts()
+ output.puts(" CMock_Guts_MemFreeFinal();") unless used_mocks.empty?
output.puts(" return #{@options[:suite_teardown].nil? ? "" : "suite_teardown"}(UnityEnd());")
output.puts("}")
end
@@ -279,31 +353,56 @@ end
if ($0 == __FILE__)
options = { :includes => [] }
yaml_file = nil
-
- #parse out all the options first
- ARGV.reject! do |arg|
+
+
+ #parse out all the options first (these will all be removed as we go)
+ ARGV.reject! do |arg|
case(arg)
- when '-cexception'
+ when '-cexception'
options[:plugins] = [:cexception]; true
- when /\w+\.yml/
+ when /\.*\.ya?ml/
+
options = UnityTestRunnerGenerator.grab_config(arg); true
+ when /\.*\.h/
+ options[:includes] << arg; true
+ when /--(\w+)=\"?(.*)\"?/
+ options[$1.to_sym] = $2; true
else false
end
- end
-
+ end
+
+
#make sure there is at least one parameter left (the input file)
if !ARGV[0]
- puts ["usage: ruby #{__FILE__} (yaml) (options) input_test_file output_test_runner (includes)",
- " blah.yml - will use config options in the yml file (see docs)",
- " -cexception - include cexception support"].join("\n")
+ puts ["\nusage: ruby #{__FILE__} (files) (options) input_test_file (output)",
+ "\n input_test_file - this is the C file you want to create a runner for",
+ " output - this is the name of the runner file to generate",
+ " defaults to (input_test_file)_Runner",
+ " files:",
+ " *.yml / *.yaml - loads configuration from here in :unity or :cmock",
+ " *.h - header files are added as #includes in runner",
+ " options:",
+
+ " -cexception - include cexception support",
+ " --setup_name=\"\" - redefine setUp func name to something else",
+ " --teardown_name=\"\" - redefine tearDown func name to something else",
+ " --test_prefix=\"\" - redefine test prefix from default test|spec|should",
+ " --suite_setup=\"\" - code to execute for setup of entire suite",
+ " --suite_teardown=\"\" - code to execute for teardown of entire suite",
+ " --use_param_tests=1 - enable parameterized tests (disabled by default)",
+ ].join("\n")
exit 1
end
-
+
+
#create the default test runner name if not specified
ARGV[1] = ARGV[0].gsub(".c","_Runner.c") if (!ARGV[1])
-
- #everything else is an include file
- options[:includes] = (ARGV.slice(2..-1).flatten.compact) if (ARGV.size > 2)
-
+
+
+
+
+
+
UnityTestRunnerGenerator.new(options).run(ARGV[0], ARGV[1])
end
+
diff --git a/contrib/ntp/sntp/unity/auto/parseOutput.rb b/contrib/ntp/sntp/unity/auto/parseOutput.rb
new file mode 100755
index 0000000..7ea180f
--- /dev/null
+++ b/contrib/ntp/sntp/unity/auto/parseOutput.rb
@@ -0,0 +1,191 @@
+#============================================================
+# Author: John Theofanopoulos
+# A simple parser. Takes the output files generated during the build process and
+# extracts information relating to the tests.
+#
+# Notes:
+# To capture an output file under VS builds use the following:
+# devenv [build instructions] > Output.txt & type Output.txt
+#
+# To capture an output file under GCC/Linux builds use the following:
+# make | tee Output.txt
+#
+# To use this parser use the following command
+# ruby parseOutput.rb [options] [file]
+# options: -xml : produce a JUnit compatible XML file
+# file : file to scan for results
+#============================================================
+
+
+class ParseOutput
+# The following flag is set to true when a test is found or false otherwise.
+ @testFlag
+ @xmlOut
+ @arrayList
+ @totalTests
+ @classIndex
+
+# Set the flag to indicate if there will be an XML output file or not
+ def setXmlOutput()
+ @xmlOut = true
+ end
+
+# if write our output to XML
+ def writeXmlOuput()
+ output = File.open("report.xml", "w")
+ output << "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
+ @arrayList.each do |item|
+ output << item << "\n"
+ end
+ output << "</testsuite>\n"
+ end
+
+# This function will try and determine when the suite is changed. This is
+# is the name that gets added to the classname parameter.
+ def testSuiteVerify(testSuiteName)
+ if @testFlag == false
+ @testFlag = true;
+ # Split the path name
+ testName = testSuiteName.split("/")
+ # Remove the extension
+ baseName = testName[testName.size - 1].split(".")
+ @testSuite = "test." + baseName[0]
+ printf "New Test: %s\n", @testSuite
+ end
+ end
+
+
+# Test was flagged as having passed so format the output
+ def testPassed(array)
+ lastItem = array.length - 1
+ testName = array[lastItem - 1]
+ testSuiteVerify(array[@className])
+ printf "%-40s PASS\n", testName
+ if @xmlOut == true
+ @arrayList.push " <testcase classname=\"" + @testSuite + "\" name=\"" + testName + "\"/>"
+ end
+ end
+
+# Test was flagged as being ingored so format the output
+ def testIgnored(array)
+ lastItem = array.length - 1
+ testName = array[lastItem - 2]
+ reason = array[lastItem].chomp
+ testSuiteVerify(array[@className])
+ printf "%-40s IGNORED\n", testName
+ if @xmlOut == true
+ @arrayList.push " <testcase classname=\"" + @testSuite + "\" name=\"" + testName + "\">"
+ @arrayList.push " <skipped type=\"TEST IGNORED\"> " + reason + " </skipped>"
+ @arrayList.push " </testcase>"
+ end
+ end
+
+# Test was flagged as having failed so format the line
+ def testFailed(array)
+ lastItem = array.length - 1
+ testName = array[lastItem - 2]
+ reason = array[lastItem].chomp + " at line: " + array[lastItem - 3]
+ testSuiteVerify(array[@className])
+ printf "%-40s FAILED\n", testName
+ if @xmlOut == true
+ @arrayList.push " <testcase classname=\"" + @testSuite + "\" name=\"" + testName + "\">"
+ @arrayList.push " <failure type=\"ASSERT FAILED\"> " + reason + " </failure>"
+ @arrayList.push " </testcase>"
+ end
+ end
+
+
+# Figure out what OS we are running on. For now we are assuming if it's not Windows it must
+# be Unix based.
+ def detectOS()
+ myOS = RUBY_PLATFORM.split("-")
+ if myOS.size == 2
+ if myOS[1] == "mingw32"
+ @className = 1
+ else
+ @className = 0
+ end
+ else
+ @className = 0
+ end
+
+ end
+
+# Main function used to parse the file that was captured.
+ def process(name)
+ @testFlag = false
+ @arrayList = Array.new
+
+ detectOS()
+
+ puts "Parsing file: " + name
+
+
+ testPass = 0
+ testFail = 0
+ testIgnore = 0
+ puts ""
+ puts "=================== RESULTS ====================="
+ puts ""
+ File.open(name).each do |line|
+ # Typical test lines look like this:
+ # <path>/<test_file>.c:36:test_tc1000_opsys:FAIL: Expected 1 Was 0
+ # <path>/<test_file>.c:112:test_tc5004_initCanChannel:IGNORE: Not Yet Implemented
+ # <path>/<test_file>.c:115:test_tc5100_initCanVoidPtrs:PASS
+ #
+ # where path is different on Unix vs Windows devices (Windows leads with a drive letter)
+ lineArray = line.split(":")
+ lineSize = lineArray.size
+ # If we were able to split the line then we can look to see if any of our target words
+ # were found. Case is important.
+ if lineSize >= 4
+ # Determine if this test passed
+ if line.include? ":PASS"
+ testPassed(lineArray)
+ testPass += 1
+ elsif line.include? ":FAIL:"
+ testFailed(lineArray)
+ testFail += 1
+ elsif line.include? ":IGNORE:"
+ testIgnored(lineArray)
+ testIgnore += 1
+ # If none of the keywords are found there are no more tests for this suite so clear
+ # the test flag
+ else
+ @testFlag = false
+ end
+ else
+ @testFlag = false
+ end
+ end
+ puts ""
+ puts "=================== SUMMARY ====================="
+ puts ""
+ puts "Tests Passed : " + testPass.to_s
+ puts "Tests Failed : " + testFail.to_s
+ puts "Tests Ignored : " + testIgnore.to_s
+ @totalTests = testPass + testFail + testIgnore
+ if @xmlOut == true
+ heading = "<testsuite tests=\"" + @totalTests.to_s + "\" failures=\"" + testFail.to_s + "\"" + " skips=\"" + testIgnore.to_s + "\">"
+ @arrayList.insert(0, heading)
+ writeXmlOuput()
+ end
+
+ # return result
+ end
+
+ end
+
+# If the command line has no values in, used a default value of Output.txt
+parseMyFile = ParseOutput.new
+
+if ARGV.size >= 1
+ ARGV.each do |a|
+ if a == "-xml"
+ parseMyFile.setXmlOutput();
+ else
+ parseMyFile.process(a)
+ break
+ end
+ end
+end
diff --git a/contrib/ntp/sntp/unity/auto/type_sanitizer.rb b/contrib/ntp/sntp/unity/auto/type_sanitizer.rb
new file mode 100755
index 0000000..7c2c0ac
--- /dev/null
+++ b/contrib/ntp/sntp/unity/auto/type_sanitizer.rb
@@ -0,0 +1,8 @@
+module TypeSanitizer
+
+ def self.sanitize_c_identifier(unsanitized)
+ # convert filename to valid C identifier by replacing invalid chars with '_'
+ return unsanitized.gsub(/[-\/\\\.\,\s]/, "_")
+ end
+
+end
diff --git a/contrib/ntp/sntp/unity/auto/unity_test_summary.py b/contrib/ntp/sntp/unity/auto/unity_test_summary.py
new file mode 100755
index 0000000..c64f6c5
--- /dev/null
+++ b/contrib/ntp/sntp/unity/auto/unity_test_summary.py
@@ -0,0 +1,135 @@
+#! python3
+# ==========================================
+# Unity Project - A Test Framework for C
+# Copyright (c) 2015 Alexander Mueller / XelaRellum@web.de
+# [Released under MIT License. Please refer to license.txt for details]
+# Based on the ruby script by Mike Karlesky, Mark VanderVoord, Greg Williams
+# ==========================================
+import sys
+import os
+import re
+from glob import glob
+
+class UnityTestSummary:
+ def __init__(self):
+ self.report = ''
+ self.total_tests = 0
+ self.failures = 0
+ self.ignored = 0
+
+ def run(self):
+ # Clean up result file names
+ results = []
+ for target in self.targets:
+ results.append(target.replace('\\', '/'))
+
+ # Dig through each result file, looking for details on pass/fail:
+ failure_output = []
+ ignore_output = []
+
+ for result_file in results:
+ lines = list(map(lambda line: line.rstrip(), open(result_file, "r").read().split('\n')))
+ if len(lines) == 0:
+ raise Exception("Empty test result file: %s" % result_file)
+
+ details = self.get_details(result_file, lines)
+ failures = details['failures']
+ ignores = details['ignores']
+ if len(failures) > 0: failure_output.append('\n'.join(failures))
+ if len(ignores) > 0: ignore_output.append('n'.join(ignores))
+ tests,failures,ignored = self.parse_test_summary('\n'.join(lines))
+ self.total_tests += tests
+ self.failures += failures
+ self.ignored += ignored
+
+ if self.ignored > 0:
+ self.report += "\n"
+ self.report += "--------------------------\n"
+ self.report += "UNITY IGNORED TEST SUMMARY\n"
+ self.report += "--------------------------\n"
+ self.report += "\n".join(ignore_output)
+
+ if self.failures > 0:
+ self.report += "\n"
+ self.report += "--------------------------\n"
+ self.report += "UNITY FAILED TEST SUMMARY\n"
+ self.report += "--------------------------\n"
+ self.report += '\n'.join(failure_output)
+
+ self.report += "\n"
+ self.report += "--------------------------\n"
+ self.report += "OVERALL UNITY TEST SUMMARY\n"
+ self.report += "--------------------------\n"
+ self.report += "{total_tests} TOTAL TESTS {failures} TOTAL FAILURES {ignored} IGNORED\n".format(total_tests = self.total_tests, failures=self.failures, ignored=self.ignored)
+ self.report += "\n"
+
+ return self.report
+
+ def set_targets(self, target_array):
+ self.targets = target_array
+
+ def set_root_path(self, path):
+ self.root = path
+
+ def usage(self, err_msg=None):
+ print("\nERROR: ")
+ if err_msg:
+ print(err_msg)
+ print("\nUsage: unity_test_summary.rb result_file_directory/ root_path/")
+ print(" result_file_directory - The location of your results files.")
+ print(" Defaults to current directory if not specified.")
+ print(" Should end in / if specified.")
+ print(" root_path - Helpful for producing more verbose output if using relative paths.")
+ sys.exit(1)
+
+ def get_details(self, result_file, lines):
+ results = { 'failures': [], 'ignores': [], 'successes': [] }
+ for line in lines:
+ parts = line.split(':')
+ if len(parts) != 5:
+ continue
+ src_file,src_line,test_name,status,msg = parts
+ if len(self.root) > 0:
+ line_out = "%s%s" % (self.root, line)
+ else:
+ line_out = line
+ if status == 'IGNORE':
+ results['ignores'].append(line_out)
+ elif status == 'FAIL':
+ results['failures'].append(line_out)
+ elif status == 'PASS':
+ results['successes'].append(line_out)
+ return results
+
+ def parse_test_summary(self, summary):
+ m = re.search(r"([0-9]+) Tests ([0-9]+) Failures ([0-9]+) Ignored", summary)
+ if not m:
+ raise Exception("Couldn't parse test results: %s" % summary)
+
+ return int(m.group(1)), int(m.group(2)), int(m.group(3))
+
+
+if __name__ == '__main__':
+ uts = UnityTestSummary()
+ try:
+ #look in the specified or current directory for result files
+ if len(sys.argv) > 1:
+ targets_dir = sys.argv[1]
+ else:
+ targets_dir = './'
+ targets = list(map(lambda x: x.replace('\\', '/'), glob(targets_dir + '*.test*')))
+ if len(targets) == 0:
+ raise Exception("No *.testpass or *.testfail files found in '%s'" % targets_dir)
+ uts.set_targets(targets)
+
+ #set the root path
+ if len(sys.argv) > 2:
+ root_path = sys.argv[2]
+ else:
+ root_path = os.path.split(__file__)[0]
+ uts.set_root_path(root_path)
+
+ #run the summarizer
+ print(uts.run())
+ except Exception as e:
+ uts.usage(e)
diff --git a/contrib/ntp/sntp/unity/auto/unity_test_summary.rb b/contrib/ntp/sntp/unity/auto/unity_test_summary.rb
index 69ec2e8..78d727e 100644
--- a/contrib/ntp/sntp/unity/auto/unity_test_summary.rb
+++ b/contrib/ntp/sntp/unity/auto/unity_test_summary.rb
@@ -2,7 +2,7 @@
# Unity Project - A Test Framework for C
# Copyright (c) 2007 Mike Karlesky, Mark VanderVoord, Greg Williams
# [Released under MIT License. Please refer to license.txt for details]
-# ==========================================
+# ==========================================
#!/usr/bin/ruby
#
@@ -15,22 +15,24 @@ class UnityTestSummary
include FileUtils::Verbose
attr_reader :report, :total_tests, :failures, :ignored
-
- def initialize
+
+ def initialize(opts = {})
@report = ''
@total_tests = 0
@failures = 0
@ignored = 0
+
+
end
-
+
def run
# Clean up result file names
results = @targets.map {|target| target.gsub(/\\/,'/')}
-
- # Dig through each result file, looking for details on pass/fail:
+
+ # Dig through each result file, looking for details on pass/fail:
failure_output = []
ignore_output = []
-
+
results.each do |result_file|
lines = File.readlines(result_file).map { |line| line.chomp }
if lines.length == 0
@@ -45,7 +47,7 @@ class UnityTestSummary
@ignored += ignored
end
end
-
+
if @ignored > 0
@report += "\n"
@report += "--------------------------\n"
@@ -53,7 +55,7 @@ class UnityTestSummary
@report += "--------------------------\n"
@report += ignore_output.flatten.join("\n")
end
-
+
if @failures > 0
@report += "\n"
@report += "--------------------------\n"
@@ -61,7 +63,7 @@ class UnityTestSummary
@report += "--------------------------\n"
@report += failure_output.flatten.join("\n")
end
-
+
@report += "\n"
@report += "--------------------------\n"
@report += "OVERALL UNITY TEST SUMMARY\n"
@@ -69,32 +71,33 @@ class UnityTestSummary
@report += "#{@total_tests} TOTAL TESTS #{@failures} TOTAL FAILURES #{@ignored} IGNORED\n"
@report += "\n"
end
-
+
def set_targets(target_array)
@targets = target_array
end
-
+
def set_root_path(path)
@root = path
end
def usage(err_msg=nil)
+ puts "\nERROR: "
puts err_msg if err_msg
- puts "Usage: unity_test_summary.rb"
+ puts "\nUsage: unity_test_summary.rb result_file_directory/ root_path/"
+ puts " result_file_directory - The location of your results files."
+ puts " Defaults to current directory if not specified."
+ puts " Should end in / if specified."
+ puts " root_path - Helpful for producing more verbose output if using relative paths."
exit 1
end
-
+
protected
-
- @@targets=nil
- @@path=nil
- @@root=nil
def get_details(result_file, lines)
results = { :failures => [], :ignores => [], :successes => [] }
lines.each do |line|
src_file,src_line,test_name,status,msg = line.split(/:/)
- line_out = ((@root and (@root != 0)) ? "#{@root}#{line}" : line ).gsub(/\//, "\\")
+ line_out = ((@root && (@root != 0)) ? "#{@root}#{line}" : line ).gsub(/\//, "\\")
case(status)
when 'IGNORE' then results[:ignores] << line_out
when 'FAIL' then results[:failures] << line_out
@@ -103,9 +106,9 @@ class UnityTestSummary
end
return results
end
-
+
def parse_test_summary(summary)
- if summary[-3..-1].join("\n") =~ /(\d+) Tests (\d+) Failures (\d+) Ignored/
+ if summary.find { |v| v =~ /(\d+) Tests (\d+) Failures (\d+) Ignored/ }
[$1.to_i,$2.to_i,$3.to_i]
else
raise "Couldn't parse test results: #{summary}"
@@ -113,14 +116,34 @@ class UnityTestSummary
end
def here; File.expand_path(File.dirname(__FILE__)); end
-
+
end
if $0 == __FILE__
- script = UnityTestSummary.new
+
+ #parse out the command options
+ opts, args = ARGV.partition {|v| v =~ /^--\w+/}
+ opts.map! {|v| v[2..-1].to_sym }
+
+ #create an instance to work with
+ uts = UnityTestSummary.new(opts)
+
begin
- script.run
+ #look in the specified or current directory for result files
+ args[0] ||= './'
+ targets = "#{ARGV[0].gsub(/\\/, '/')}**/*.test*"
+ results = Dir[targets]
+ raise "No *.testpass, *.testfail, or *.testresults files found in '#{targets}'" if results.empty?
+ uts.set_targets(results)
+
+ #set the root path
+ args[1] ||= Dir.pwd + '/'
+ uts.set_root_path(ARGV[1])
+
+ #run the summarizer
+ puts uts.run
rescue Exception => e
- script.usage e.message
+ uts.usage e.message
end
end
+
diff --git a/contrib/ntp/sntp/unity/unity.c b/contrib/ntp/sntp/unity/unity.c
index cbdef3b..0161f8f 100644
--- a/contrib/ntp/sntp/unity/unity.c
+++ b/contrib/ntp/sntp/unity/unity.c
@@ -327,16 +327,14 @@ void UnityConcludeTest(void)
}
printf("| ");
- printf(Unity.XFAILMessage);
+ printf("%s", Unity.XFAILMessage);
Unity.XFAILMessage = NULL;
}
else
{
printf(" - EXPECTED FAIL!");
}
-
}
-
else
if (Unity.CurrentTestIgnored)
diff --git a/contrib/ntp/sntp/unity/unity_config.h b/contrib/ntp/sntp/unity/unity_config.h
new file mode 100644
index 0000000..25418bd
--- /dev/null
+++ b/contrib/ntp/sntp/unity/unity_config.h
@@ -0,0 +1,12 @@
+/* unity_config.h */
+
+#ifndef UNITY_CONFIG_H
+#define UNITY_CONFIG_H
+
+#define UNITY_INCLUDE_DOUBLE
+
+#ifndef HAVE_STDINT_H
+# define UNITY_EXCLUDE_STDINT_H
+#endif
+
+#endif /* UNITY_CONFIG_H */
diff --git a/contrib/ntp/sntp/unity/unity_internals.h b/contrib/ntp/sntp/unity/unity_internals.h
index a38e101..c2aabc3 100644
--- a/contrib/ntp/sntp/unity/unity_internals.h
+++ b/contrib/ntp/sntp/unity/unity_internals.h
@@ -82,22 +82,22 @@
// UNITY_INT_WIDTH.
#ifndef UNITY_POINTER_WIDTH
#ifdef UINTPTR_MAX
- #if (UINTPTR_MAX <= 0xFFFF)
+ #if (UINTPTR_MAX+0 <= 0xFFFF)
#define UNITY_POINTER_WIDTH (16)
- #elif (UINTPTR_MAX <= 0xFFFFFFFF)
+ #elif (UINTPTR_MAX+0 <= 0xFFFFFFFF)
#define UNITY_POINTER_WIDTH (32)
- #elif (UINTPTR_MAX <= 0xFFFFFFFFFFFFFFFF)
+ #elif (UINTPTR_MAX+0 <= 0xFFFFFFFFFFFFFFFF)
#define UNITY_POINTER_WIDTH (64)
#endif
#endif
#endif
#ifndef UNITY_POINTER_WIDTH
#ifdef INTPTR_MAX
- #if (INTPTR_MAX <= 0x7FFF)
+ #if (INTPTR_MAX+0 <= 0x7FFF)
#define UNITY_POINTER_WIDTH (16)
- #elif (INTPTR_MAX <= 0x7FFFFFFF)
+ #elif (INTPTR_MAX+0 <= 0x7FFFFFFF)
#define UNITY_POINTER_WIDTH (32)
- #elif (INTPTR_MAX <= 0x7FFFFFFFFFFFFFFF)
+ #elif (INTPTR_MAX+0 <= 0x7FFFFFFFFFFFFFFF)
#define UNITY_POINTER_WIDTH (64)
#endif
#endif
diff --git a/contrib/ntp/sntp/version.c b/contrib/ntp/sntp/version.c
index 885dd31..4c87128 100644
--- a/contrib/ntp/sntp/version.c
+++ b/contrib/ntp/sntp/version.c
@@ -2,4 +2,4 @@
* version file for sntp
*/
#include <config.h>
-const char * Version = "sntp 4.2.8p3-RCGO@1.3265-o Mon Jun 29 20:23:24 UTC 2015 (21)";
+const char * Version = "sntp 4.2.8p4@1.3265-o Wed Oct 21 16:41:07 UTC 2015 (25)";
diff --git a/contrib/ntp/tests/Makefile.am b/contrib/ntp/tests/Makefile.am
index 75890a4..af502b9 100644
--- a/contrib/ntp/tests/Makefile.am
+++ b/contrib/ntp/tests/Makefile.am
@@ -1,23 +1,11 @@
NULL =
SUBDIRS =
-DIST_SUBDIRS =
-
-if GTEST_AVAILABLE
-SUBDIRS += \
- ntpd \
- $(NULL)
-endif
SUBDIRS += \
bug-2803 \
libntp \
- sec-2853 \
- $(NULL)
-
-DIST_SUBDIRS += \
- bug-2803 \
- libntp \
ntpd \
+ ntpq \
sandbox \
sec-2853 \
$(NULL)
diff --git a/contrib/ntp/tests/Makefile.in b/contrib/ntp/tests/Makefile.in
index ac29e8e..597b377 100644
--- a/contrib/ntp/tests/Makefile.in
+++ b/contrib/ntp/tests/Makefile.in
@@ -87,10 +87,6 @@ PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
-@GTEST_AVAILABLE_TRUE@am__append_1 = \
-@GTEST_AVAILABLE_TRUE@ ntpd \
-@GTEST_AVAILABLE_TRUE@ $(NULL)
-
subdir = tests
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/sntp/libopts/m4/libopts.m4 \
@@ -119,6 +115,7 @@ am__aclocal_m4_deps = $(top_srcdir)/sntp/libopts/m4/libopts.m4 \
$(top_srcdir)/sntp/m4/ntp_locinfo.m4 \
$(top_srcdir)/sntp/m4/ntp_openssl.m4 \
$(top_srcdir)/sntp/m4/ntp_pkg_config.m4 \
+ $(top_srcdir)/sntp/m4/ntp_problemtests.m4 \
$(top_srcdir)/sntp/m4/ntp_prog_cc.m4 \
$(top_srcdir)/sntp/m4/ntp_rlimit.m4 \
$(top_srcdir)/sntp/m4/ntp_sntp.m4 \
@@ -191,6 +188,7 @@ am__define_uniq_tagged_files = \
done | $(am__uniquify_input)`
ETAGS = etags
CTAGS = ctags
+DIST_SUBDIRS = $(SUBDIRS)
am__DIST_COMMON = $(srcdir)/Makefile.in
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
am__relativize = \
@@ -227,6 +225,7 @@ AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
+BUILD_THREAD = @BUILD_THREAD@
CALC_TICKADJ_DB = @CALC_TICKADJ_DB@
CALC_TICKADJ_DL = @CALC_TICKADJ_DL@
CALC_TICKADJ_DS = @CALC_TICKADJ_DS@
@@ -235,6 +234,7 @@ CALC_TICKADJ_NI = @CALC_TICKADJ_NI@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
+CFLAGS_LIBEVENT = @CFLAGS_LIBEVENT@
CFLAGS_NTP = @CFLAGS_NTP@
CHUTEST = @CHUTEST@
CONFIG_SHELL = @CONFIG_SHELL@
@@ -296,6 +296,7 @@ LIBTOOL_DEPS = @LIBTOOL_DEPS@
LIPO = @LIPO@
LN_S = @LN_S@
LSCF = @LSCF@
+LTHREAD_LIBS = @LTHREAD_LIBS@
LTLIBOBJS = @LTLIBOBJS@
MAKEINFO = @MAKEINFO@
MAKE_ADJTIMED = @MAKE_ADJTIMED@
@@ -482,8 +483,7 @@ top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
NULL =
-SUBDIRS = $(am__append_1) bug-2803 libntp sec-2853 $(NULL)
-DIST_SUBDIRS = bug-2803 libntp ntpd sandbox sec-2853 $(NULL)
+SUBDIRS = bug-2803 libntp ntpd ntpq sandbox sec-2853 $(NULL)
all: all-recursive
.SUFFIXES:
diff --git a/contrib/ntp/tests/bug-2803/Makefile.am b/contrib/ntp/tests/bug-2803/Makefile.am
index eaf825f..1e0cd9c 100644
--- a/contrib/ntp/tests/bug-2803/Makefile.am
+++ b/contrib/ntp/tests/bug-2803/Makefile.am
@@ -27,6 +27,8 @@ AM_CPPFLAGS = $(NTP_INCS)
AM_CPPFLAGS += -I$(top_srcdir)/sntp/unity
AM_CPPFLAGS += -I$(top_srcdir)/include
AM_CPPFLAGS += $(CPPFLAGS_NTP)
+AM_CPPFLAGS += -DUNITY_INCLUDE_CONFIG_H
+AM_CPPFLAGS += -I$(top_srcdir)/sntp/unity
AM_LDFLAGS = $(LDFLAGS_NTP)
diff --git a/contrib/ntp/tests/bug-2803/Makefile.in b/contrib/ntp/tests/bug-2803/Makefile.in
index 920c01b..7febe6a 100644
--- a/contrib/ntp/tests/bug-2803/Makefile.in
+++ b/contrib/ntp/tests/bug-2803/Makefile.in
@@ -117,6 +117,7 @@ am__aclocal_m4_deps = $(top_srcdir)/sntp/libopts/m4/libopts.m4 \
$(top_srcdir)/sntp/m4/ntp_locinfo.m4 \
$(top_srcdir)/sntp/m4/ntp_openssl.m4 \
$(top_srcdir)/sntp/m4/ntp_pkg_config.m4 \
+ $(top_srcdir)/sntp/m4/ntp_problemtests.m4 \
$(top_srcdir)/sntp/m4/ntp_prog_cc.m4 \
$(top_srcdir)/sntp/m4/ntp_rlimit.m4 \
$(top_srcdir)/sntp/m4/ntp_sntp.m4 \
@@ -429,6 +430,7 @@ AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
+BUILD_THREAD = @BUILD_THREAD@
CALC_TICKADJ_DB = @CALC_TICKADJ_DB@
CALC_TICKADJ_DL = @CALC_TICKADJ_DL@
CALC_TICKADJ_DS = @CALC_TICKADJ_DS@
@@ -437,6 +439,7 @@ CALC_TICKADJ_NI = @CALC_TICKADJ_NI@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
+CFLAGS_LIBEVENT = @CFLAGS_LIBEVENT@
CFLAGS_NTP = @CFLAGS_NTP@
CHUTEST = @CHUTEST@
CONFIG_SHELL = @CONFIG_SHELL@
@@ -498,6 +501,7 @@ LIBTOOL_DEPS = @LIBTOOL_DEPS@
LIPO = @LIPO@
LN_S = @LN_S@
LSCF = @LSCF@
+LTHREAD_LIBS = @LTHREAD_LIBS@
LTLIBOBJS = @LTLIBOBJS@
MAKEINFO = @MAKEINFO@
MAKE_ADJTIMED = @MAKE_ADJTIMED@
@@ -707,7 +711,8 @@ AM_CFLAGS = $(CFLAGS_NTP)
# HMS: we may not need some of these:
AM_CPPFLAGS = $(NTP_INCS) -I$(top_srcdir)/sntp/unity \
- -I$(top_srcdir)/include $(CPPFLAGS_NTP)
+ -I$(top_srcdir)/include $(CPPFLAGS_NTP) \
+ -DUNITY_INCLUDE_CONFIG_H -I$(top_srcdir)/sntp/unity
AM_LDFLAGS = $(LDFLAGS_NTP)
bug_2803_SOURCES = \
bug-2803.c \
diff --git a/contrib/ntp/tests/bug-2803/run-bug-2803.c b/contrib/ntp/tests/bug-2803/run-bug-2803.c
index 8382c5a..05e6a5d 100644
--- a/contrib/ntp/tests/bug-2803/run-bug-2803.c
+++ b/contrib/ntp/tests/bug-2803/run-bug-2803.c
@@ -22,29 +22,33 @@
#include "unity.h"
#include <setjmp.h>
#include <stdio.h>
+#include <config.h>
+#include <stdio.h>
+#include <sys/time.h>
+#include <ntp_fp.h>
+#include <timevalops.h>
//=======External Functions This Runner Calls=====
extern void setUp(void);
extern void tearDown(void);
-void resetTest(void);
extern void test_main(void );
//=======Test Reset Option=====
-void resetTest()
+void resetTest(void);
+void resetTest(void)
{
tearDown();
setUp();
}
-char *progname;
+char const *progname;
//=======MAIN=====
int main(int argc, char *argv[])
{
progname = argv[0];
- Unity.TestFile = "bug-2803.c";
UnityBegin("bug-2803.c");
RUN_TEST(test_main, 18);
diff --git a/contrib/ntp/tests/libntp/Makefile.am b/contrib/ntp/tests/libntp/Makefile.am
index 288d38c..7bfe9ee 100644
--- a/contrib/ntp/tests/libntp/Makefile.am
+++ b/contrib/ntp/tests/libntp/Makefile.am
@@ -2,9 +2,12 @@ NULL =
BUILT_SOURCES =
CLEANFILES =
+std_unity_list = \
+ $(top_srcdir)/sntp/unity/auto/generate_test_runner.rb \
+ $(NULL)
+
run_unity = cd $(srcdir) && ruby ../../sntp/unity/auto/generate_test_runner.rb
-#removed test-libntp
check_PROGRAMS = \
test-a_md5encrypt \
test-atoint \
@@ -46,84 +49,25 @@ check_PROGRAMS = \
test-ymd2yd \
$(NULL)
-if GTEST_AVAILABLE
-check_PROGRAMS += tests
-else
-EXTRA_PROGRAMS = tests
-endif
-
LDADD = \
$(top_builddir)/libntp/libntp.a \
$(LDADD_LIBNTP) \
$(PTHREAD_LIBS) \
$(LDADD_NTP) \
$(LIBM) \
- $(NULL)
-
-tests_LDADD = \
- $(LDADD) \
- $(GTEST_LDFLAGS) \
- $(GTEST_LIBS) \
- $(NULL)
-
-unity_tests_LDADD = \
- $(LDADD) \
$(top_builddir)/sntp/unity/libunity.a \
$(NULL)
AM_CFLAGS = $(CFLAGS_NTP)
-AM_CXXFLAGS = $(GTEST_CXXFLAGS)
AM_CPPFLAGS = $(NTP_INCS)
AM_CPPFLAGS += -I$(top_srcdir)/sntp
-AM_CPPFLAGS += $(GTEST_CPPFLAGS)
AM_CPPFLAGS += $(CPPFLAGS_NTP)
+AM_CPPFLAGS += -DUNITY_INCLUDE_CONFIG_H
+AM_CPPFLAGS += -I$(top_srcdir)/sntp/unity
AM_LDFLAGS = $(LDFLAGS_NTP)
-tests_SOURCES = \
- $(top_srcdir)/sntp/tests_main.cpp \
- g_libntptest.cpp \
- g_a_md5encrypt.cpp \
- g_atoint.cpp \
- g_atouint.cpp \
- g_authkeys.cpp \
- g_buftvtots.cpp \
- g_calendar.cpp \
- g_caljulian.cpp \
- g_caltontp.cpp \
- g_calyearstart.cpp \
- g_clocktime.cpp \
- g_decodenetnum.cpp \
- g_hextoint.cpp \
- g_hextolfp.cpp \
- g_humandate.cpp \
- g_lfpfunc.cpp \
- g_lfptostr.cpp \
- g_modetoa.cpp \
- g_msyslog.cpp \
- g_netof.cpp \
- g_numtoa.cpp \
- g_numtohost.cpp \
- g_octtoint.cpp \
- g_prettydate.cpp \
- g_recvbuff.cpp \
- g_refnumtoa.cpp \
- g_sfptostr.cpp \
- g_socktoa.cpp \
- g_ssl_init.cpp \
- g_statestr.cpp \
- g_strtolfp.cpp \
- g_timespecops.cpp \
- g_timestructs.cpp \
- g_timevalops.cpp \
- g_tstotv.cpp \
- g_tvtots.cpp \
- g_uglydate.cpp \
- g_vi64ops.cpp \
- g_ymd2yd.cpp \
- $(NULL)
-
BUILT_SOURCES += \
$(srcdir)/run-a_md5encrypt.c \
$(srcdir)/run-atoint.c \
@@ -166,28 +110,16 @@ BUILT_SOURCES += \
$(NULL)
noinst_HEADERS = \
- g_lfptest.h \
lfptest.h \
- g_libntptest.h \
- g_sockaddrtest.h \
sockaddrtest.h \
- g_timestructs.h \
test-libntp.h \
$(NULL)
###
-test_a_md5encrypt_CFLAGS = \
- -I$(top_srcdir)/sntp/unity \
- $(NULL)
-
-test_a_md5encrypt_LDADD = \
- $(unity_tests_LDADD) \
- $(NULL)
-
-test_a_md5encrypt_SOURCES = \
- a_md5encrypt.c \
- run-a_md5encrypt.c \
+test_a_md5encrypt_SOURCES = \
+ a_md5encrypt.c \
+ run-a_md5encrypt.c \
$(NULL)
$(srcdir)/run-a_md5encrypt.c: $(srcdir)/a_md5encrypt.c $(std_unity_list)
@@ -195,17 +127,9 @@ $(srcdir)/run-a_md5encrypt.c: $(srcdir)/a_md5encrypt.c $(std_unity_list)
###
-test_atoint_CFLAGS = \
- -I$(top_srcdir)/sntp/unity \
- $(NULL)
-
-test_atoint_LDADD = \
- $(unity_tests_LDADD) \
- $(NULL)
-
-test_atoint_SOURCES = \
- atoint.c \
- run-atoint.c \
+test_atoint_SOURCES = \
+ atoint.c \
+ run-atoint.c \
$(NULL)
$(srcdir)/run-atoint.c: $(srcdir)/atoint.c $(std_unity_list)
@@ -213,17 +137,9 @@ $(srcdir)/run-atoint.c: $(srcdir)/atoint.c $(std_unity_list)
###
-test_atouint_CFLAGS = \
- -I$(top_srcdir)/sntp/unity \
- $(NULL)
-
-test_atouint_LDADD = \
- $(unity_tests_LDADD) \
- $(NULL)
-
-test_atouint_SOURCES = \
- atouint.c \
- run-atouint.c \
+test_atouint_SOURCES = \
+ atouint.c \
+ run-atouint.c \
$(NULL)
$(srcdir)/run-atouint.c: $(srcdir)/atouint.c $(std_unity_list)
@@ -231,17 +147,9 @@ $(srcdir)/run-atouint.c: $(srcdir)/atouint.c $(std_unity_list)
###
-test_authkeys_CFLAGS = \
- -I$(top_srcdir)/sntp/unity \
- $(NULL)
-
-test_authkeys_LDADD = \
- $(unity_tests_LDADD) \
- $(NULL)
-
-test_authkeys_SOURCES = \
- authkeys.c \
- run-authkeys.c \
+test_authkeys_SOURCES = \
+ authkeys.c \
+ run-authkeys.c \
$(NULL)
$(srcdir)/run-authkeys.c: $(srcdir)/authkeys.c $(std_unity_list)
@@ -249,18 +157,10 @@ $(srcdir)/run-authkeys.c: $(srcdir)/authkeys.c $(std_unity_list)
###
-test_buftvtots_LDADD = \
- $(unity_tests_LDADD) \
- $(NULL)
-
-test_buftvtots_SOURCES = \
- buftvtots.c \
- run-buftvtots.c \
- $(NULL)
-
-test_buftvtots_CFLAGS = \
- -I$(top_srcdir)/sntp/unity \
- -DUNITY_INCLUDE_DOUBLE \
+test_buftvtots_SOURCES = \
+ buftvtots.c \
+ run-buftvtots.c \
+ lfptest.c \
$(NULL)
$(srcdir)/run-buftvtots.c: $(srcdir)/buftvtots.c $(std_unity_list)
@@ -268,18 +168,10 @@ $(srcdir)/run-buftvtots.c: $(srcdir)/buftvtots.c $(std_unity_list)
###
-test_calendar_CFLAGS = \
- -I$(top_srcdir)/sntp/unity \
- $(NULL)
-
-test_calendar_LDADD = \
- $(unity_tests_LDADD) \
- $(NULL)
-
-test_calendar_SOURCES = \
- calendar.c \
- run-calendar.c \
- test-libntp.c \
+test_calendar_SOURCES = \
+ calendar.c \
+ run-calendar.c \
+ test-libntp.c \
$(NULL)
$(srcdir)/run-calendar.c: $(srcdir)/calendar.c $(std_unity_list)
@@ -287,18 +179,14 @@ $(srcdir)/run-calendar.c: $(srcdir)/calendar.c $(std_unity_list)
###
-test_caltontp_CFLAGS = \
- -I$(top_srcdir)/sntp/unity \
+test_caltontp_CFLAGS = \
+ $(CFLAGS_LIBEVENT) \
+ $(AM_CFLAGS) \
$(NULL)
-test_caltontp_LDADD = \
- $(unity_tests_LDADD) \
- -lpthread \
- $(NULL)
-
-test_caltontp_SOURCES = \
- caltontp.c \
- run-caltontp.c \
+test_caltontp_SOURCES = \
+ caltontp.c \
+ run-caltontp.c \
$(NULL)
$(srcdir)/run-caltontp.c: $(srcdir)/caltontp.c $(std_unity_list)
@@ -306,19 +194,15 @@ $(srcdir)/run-caltontp.c: $(srcdir)/caltontp.c $(std_unity_list)
###
-test_caljulian_CFLAGS = \
- -I$(top_srcdir)/sntp/unity \
- $(NULL)
-
-test_caljulian_LDADD = \
- $(unity_tests_LDADD) \
- -lpthread \
+test_caljulian_CFLAGS = \
+ $(CFLAGS_LIBEVENT) \
+ $(AM_CFLAGS) \
$(NULL)
-test_caljulian_SOURCES = \
- caljulian.c \
- run-caljulian.c \
- test-libntp.c \
+test_caljulian_SOURCES = \
+ caljulian.c \
+ run-caljulian.c \
+ test-libntp.c \
$(NULL)
$(srcdir)/run-caljulian.c: $(srcdir)/caljulian.c $(std_unity_list)
@@ -326,18 +210,10 @@ $(srcdir)/run-caljulian.c: $(srcdir)/caljulian.c $(std_unity_list)
###
-test_calyearstart_CFLAGS = \
- -I$(top_srcdir)/sntp/unity \
- $(NULL)
-
-test_calyearstart_LDADD = \
- $(unity_tests_LDADD) \
- $(NULL)
-
-test_calyearstart_SOURCES = \
- calyearstart.c \
- run-calyearstart.c \
- test-libntp.c \
+test_calyearstart_SOURCES = \
+ calyearstart.c \
+ run-calyearstart.c \
+ test-libntp.c \
$(NULL)
$(srcdir)/run-calyearstart.c: $(srcdir)/calyearstart.c $(std_unity_list)
@@ -345,18 +221,10 @@ $(srcdir)/run-calyearstart.c: $(srcdir)/calyearstart.c $(std_unity_list)
###
-test_clocktime_CFLAGS = \
- -I$(top_srcdir)/sntp/unity \
- $(NULL)
-
-test_clocktime_LDADD = \
- $(unity_tests_LDADD) \
- $(NULL)
-
-test_clocktime_SOURCES = \
- clocktime.c \
- run-clocktime.c \
- test-libntp.c \
+test_clocktime_SOURCES = \
+ clocktime.c \
+ run-clocktime.c \
+ test-libntp.c \
$(NULL)
$(srcdir)/run-clocktime.c: $(srcdir)/clocktime.c $(std_unity_list)
@@ -364,18 +232,15 @@ $(srcdir)/run-clocktime.c: $(srcdir)/clocktime.c $(std_unity_list)
###
-test_decodenetnum_CFLAGS = \
- -I$(top_srcdir)/sntp/unity \
+test_decodenetnum_CFLAGS = \
+ $(CFLAGS_LIBEVENT) \
+ $(AM_CFLAGS) \
$(NULL)
-test_decodenetnum_LDADD = \
- $(unity_tests_LDADD) \
- -lpthread \
- $(NULL)
-
-test_decodenetnum_SOURCES = \
- decodenetnum.c \
- run-decodenetnum.c \
+test_decodenetnum_SOURCES = \
+ decodenetnum.c \
+ run-decodenetnum.c \
+ sockaddrtest.c \
$(NULL)
$(srcdir)/run-decodenetnum.c: $(srcdir)/decodenetnum.c $(std_unity_list)
@@ -383,17 +248,9 @@ $(srcdir)/run-decodenetnum.c: $(srcdir)/decodenetnum.c $(std_unity_list)
###
-test_hextoint_CFLAGS = \
- -I$(top_srcdir)/sntp/unity \
- $(NULL)
-
-test_hextoint_LDADD = \
- $(unity_tests_LDADD) \
- $(NULL)
-
-test_hextoint_SOURCES = \
- hextoint.c \
- run-hextoint.c \
+test_hextoint_SOURCES = \
+ hextoint.c \
+ run-hextoint.c \
$(NULL)
$(srcdir)/run-hextoint.c: $(srcdir)/hextoint.c $(std_unity_list)
@@ -401,17 +258,10 @@ $(srcdir)/run-hextoint.c: $(srcdir)/hextoint.c $(std_unity_list)
###
-test_hextolfp_CFLAGS = \
- -I$(top_srcdir)/sntp/unity \
- $(NULL)
-
-test_hextolfp_LDADD = \
- $(unity_tests_LDADD) \
- $(NULL)
-
-test_hextolfp_SOURCES = \
- hextolfp.c \
- run-hextolfp.c \
+test_hextolfp_SOURCES = \
+ hextolfp.c \
+ run-hextolfp.c \
+ lfptest.c \
$(NULL)
$(srcdir)/run-hextolfp.c: $(srcdir)/hextolfp.c $(std_unity_list)
@@ -419,17 +269,9 @@ $(srcdir)/run-hextolfp.c: $(srcdir)/hextolfp.c $(std_unity_list)
###
-test_humandate_CFLAGS = \
- -I$(top_srcdir)/sntp/unity \
- $(NULL)
-
-test_humandate_LDADD = \
- $(unity_tests_LDADD) \
- $(NULL)
-
-test_humandate_SOURCES = \
- humandate.c \
- run-humandate.c \
+test_humandate_SOURCES = \
+ humandate.c \
+ run-humandate.c \
$(NULL)
$(srcdir)/run-humandate.c: $(srcdir)/humandate.c $(std_unity_list)
@@ -437,18 +279,9 @@ $(srcdir)/run-humandate.c: $(srcdir)/humandate.c $(std_unity_list)
###
-test_lfpfunc_CFLAGS = \
- -I$(top_srcdir)/sntp/unity \
- -DUNITY_INCLUDE_DOUBLE \
- $(NULL)
-
-test_lfpfunc_LDADD = \
- $(unity_tests_LDADD) \
- $(NULL)
-
-test_lfpfunc_SOURCES = \
- lfpfunc.c \
- run-lfpfunc.c \
+test_lfpfunc_SOURCES = \
+ lfpfunc.c \
+ run-lfpfunc.c \
$(NULL)
$(srcdir)/run-lfpfunc.c: $(srcdir)/lfpfunc.c $(std_unity_list)
@@ -456,17 +289,9 @@ $(srcdir)/run-lfpfunc.c: $(srcdir)/lfpfunc.c $(std_unity_list)
###
-test_lfptostr_CFLAGS = \
- -I$(top_srcdir)/sntp/unity \
- $(NULL)
-
-test_lfptostr_LDADD = \
- $(unity_tests_LDADD) \
- $(NULL)
-
-test_lfptostr_SOURCES = \
- lfptostr.c \
- run-lfptostr.c \
+test_lfptostr_SOURCES = \
+ lfptostr.c \
+ run-lfptostr.c \
$(NULL)
$(srcdir)/run-lfptostr.c: $(srcdir)/lfptostr.c $(std_unity_list)
@@ -474,17 +299,9 @@ $(srcdir)/run-lfptostr.c: $(srcdir)/lfptostr.c $(std_unity_list)
###
-test_modetoa_CFLAGS = \
- -I$(top_srcdir)/sntp/unity \
- $(NULL)
-
-test_modetoa_LDADD = \
- $(unity_tests_LDADD) \
- $(NULL)
-
-test_modetoa_SOURCES = \
- modetoa.c \
- run-modetoa.c \
+test_modetoa_SOURCES = \
+ modetoa.c \
+ run-modetoa.c \
$(NULL)
$(srcdir)/run-modetoa.c: $(srcdir)/modetoa.c $(std_unity_list)
@@ -492,17 +309,9 @@ $(srcdir)/run-modetoa.c: $(srcdir)/modetoa.c $(std_unity_list)
###
-test_msyslog_CFLAGS = \
- -I$(top_srcdir)/sntp/unity \
- $(NULL)
-
-test_msyslog_LDADD = \
- $(unity_tests_LDADD) \
- $(NULL)
-
-test_msyslog_SOURCES = \
- msyslog.c \
- run-msyslog.c \
+test_msyslog_SOURCES = \
+ msyslog.c \
+ run-msyslog.c \
$(NULL)
$(srcdir)/run-msyslog.c: $(srcdir)/msyslog.c $(std_unity_list)
@@ -510,17 +319,10 @@ $(srcdir)/run-msyslog.c: $(srcdir)/msyslog.c $(std_unity_list)
###
-test_netof_CFLAGS = \
- -I$(top_srcdir)/sntp/unity \
- $(NULL)
-
-test_netof_LDADD = \
- $(unity_tests_LDADD) \
- $(NULL)
-
-test_netof_SOURCES = \
- netof.c \
- run-netof.c \
+test_netof_SOURCES = \
+ netof.c \
+ run-netof.c \
+ sockaddrtest.c \
$(NULL)
$(srcdir)/run-netof.c: $(srcdir)/netof.c $(std_unity_list)
@@ -528,17 +330,9 @@ $(srcdir)/run-netof.c: $(srcdir)/netof.c $(std_unity_list)
###
-test_numtoa_CFLAGS = \
- -I$(top_srcdir)/sntp/unity \
- $(NULL)
-
-test_numtoa_LDADD = \
- $(unity_tests_LDADD) \
- $(NULL)
-
-test_numtoa_SOURCES = \
- numtoa.c \
- run-numtoa.c \
+test_numtoa_SOURCES = \
+ numtoa.c \
+ run-numtoa.c \
$(NULL)
$(srcdir)/run-numtoa.c: $(srcdir)/numtoa.c $(std_unity_list)
@@ -546,17 +340,9 @@ $(srcdir)/run-numtoa.c: $(srcdir)/numtoa.c $(std_unity_list)
###
-test_numtohost_CFLAGS = \
- -I$(top_srcdir)/sntp/unity \
- $(NULL)
-
-test_numtohost_LDADD = \
- $(unity_tests_LDADD) \
- $(NULL)
-
-test_numtohost_SOURCES = \
- numtohost.c \
- run-numtohost.c \
+test_numtohost_SOURCES = \
+ numtohost.c \
+ run-numtohost.c \
$(NULL)
$(srcdir)/run-numtohost.c: $(srcdir)/numtohost.c $(std_unity_list)
@@ -564,17 +350,9 @@ $(srcdir)/run-numtohost.c: $(srcdir)/numtohost.c $(std_unity_list)
###
-test_octtoint_CFLAGS = \
- -I$(top_srcdir)/sntp/unity \
- $(NULL)
-
-test_octtoint_LDADD = \
- $(unity_tests_LDADD) \
- $(NULL)
-
-test_octtoint_SOURCES = \
- octtoint.c \
- run-octtoint.c \
+test_octtoint_SOURCES = \
+ octtoint.c \
+ run-octtoint.c \
$(NULL)
$(srcdir)/run-octtoint.c: $(srcdir)/octtoint.c $(std_unity_list)
@@ -582,17 +360,9 @@ $(srcdir)/run-octtoint.c: $(srcdir)/octtoint.c $(std_unity_list)
###
-test_prettydate_CFLAGS = \
- -I$(top_srcdir)/sntp/unity \
- $(NULL)
-
-test_prettydate_LDADD = \
- $(unity_tests_LDADD) \
- $(NULL)
-
-test_prettydate_SOURCES = \
- prettydate.c \
- run-prettydate.c \
+test_prettydate_SOURCES = \
+ prettydate.c \
+ run-prettydate.c \
$(NULL)
$(srcdir)/run-prettydate.c: $(srcdir)/prettydate.c $(std_unity_list)
@@ -600,17 +370,9 @@ $(srcdir)/run-prettydate.c: $(srcdir)/prettydate.c $(std_unity_list)
###
-test_recvbuff_CFLAGS = \
- -I$(top_srcdir)/sntp/unity \
- $(NULL)
-
-test_recvbuff_LDADD = \
- $(unity_tests_LDADD) \
- $(NULL)
-
-test_recvbuff_SOURCES = \
- recvbuff.c \
- run-recvbuff.c \
+test_recvbuff_SOURCES = \
+ recvbuff.c \
+ run-recvbuff.c \
$(NULL)
$(srcdir)/run-recvbuff.c: $(srcdir)/recvbuff.c $(std_unity_list)
@@ -618,17 +380,9 @@ $(srcdir)/run-recvbuff.c: $(srcdir)/recvbuff.c $(std_unity_list)
###
-test_refidsmear_CFLAGS = \
- -I$(top_srcdir)/sntp/unity \
- $(NULL)
-
-test_refidsmear_LDADD = \
- $(unity_tests_LDADD) \
- $(NULL)
-
-test_refidsmear_SOURCES = \
- refidsmear.c \
- run-refidsmear.c \
+test_refidsmear_SOURCES = \
+ refidsmear.c \
+ run-refidsmear.c \
$(NULL)
$(srcdir)/run-refidsmear.c: $(srcdir)/refidsmear.c $(std_unity_list)
@@ -636,17 +390,9 @@ $(srcdir)/run-refidsmear.c: $(srcdir)/refidsmear.c $(std_unity_list)
###
-test_refnumtoa_CFLAGS = \
- -I$(top_srcdir)/sntp/unity \
- $(NULL)
-
-test_refnumtoa_LDADD = \
- $(unity_tests_LDADD) \
- $(NULL)
-
-test_refnumtoa_SOURCES = \
- refnumtoa.c \
- run-refnumtoa.c \
+test_refnumtoa_SOURCES = \
+ refnumtoa.c \
+ run-refnumtoa.c \
$(NULL)
$(srcdir)/run-refnumtoa.c: $(srcdir)/refnumtoa.c $(std_unity_list)
@@ -654,18 +400,9 @@ $(srcdir)/run-refnumtoa.c: $(srcdir)/refnumtoa.c $(std_unity_list)
###
-test_sfptostr_CFLAGS = \
- -I$(top_srcdir)/sntp/unity \
- -DUNITY_INCLUDE_DOUBLE \
- $(NULL)
-
-test_sfptostr_LDADD = \
- $(unity_tests_LDADD) \
- $(NULL)
-
-test_sfptostr_SOURCES = \
- sfptostr.c \
- run-sfptostr.c \
+test_sfptostr_SOURCES = \
+ sfptostr.c \
+ run-sfptostr.c \
$(NULL)
$(srcdir)/run-sfptostr.c: $(srcdir)/sfptostr.c $(std_unity_list)
@@ -673,17 +410,10 @@ $(srcdir)/run-sfptostr.c: $(srcdir)/sfptostr.c $(std_unity_list)
###
-test_socktoa_CFLAGS = \
- -I$(top_srcdir)/sntp/unity \
- $(NULL)
-
-test_socktoa_LDADD = \
- $(unity_tests_LDADD) \
- $(NULL)
-
-test_socktoa_SOURCES = \
- socktoa.c \
- run-socktoa.c \
+test_socktoa_SOURCES = \
+ socktoa.c \
+ run-socktoa.c \
+ sockaddrtest.c \
$(NULL)
$(srcdir)/run-socktoa.c: $(srcdir)/socktoa.c $(std_unity_list)
@@ -691,17 +421,9 @@ $(srcdir)/run-socktoa.c: $(srcdir)/socktoa.c $(std_unity_list)
###
-test_ssl_init_CFLAGS = \
- -I$(top_srcdir)/sntp/unity \
- $(NULL)
-
-test_ssl_init_LDADD = \
- $(unity_tests_LDADD) \
- $(NULL)
-
-test_ssl_init_SOURCES = \
- ssl_init.c \
- run-ssl_init.c \
+test_ssl_init_SOURCES = \
+ ssl_init.c \
+ run-ssl_init.c \
$(NULL)
$(srcdir)/run-ssl_init.c: $(srcdir)/ssl_init.c $(std_unity_list)
@@ -709,17 +431,9 @@ $(srcdir)/run-ssl_init.c: $(srcdir)/ssl_init.c $(std_unity_list)
###
-test_statestr_CFLAGS = \
- -I$(top_srcdir)/sntp/unity \
- $(NULL)
-
-test_statestr_LDADD = \
- $(unity_tests_LDADD) \
- $(NULL)
-
-test_statestr_SOURCES = \
- statestr.c \
- run-statestr.c \
+test_statestr_SOURCES = \
+ statestr.c \
+ run-statestr.c \
$(NULL)
$(srcdir)/run-statestr.c: $(srcdir)/statestr.c $(std_unity_list)
@@ -727,18 +441,15 @@ $(srcdir)/run-statestr.c: $(srcdir)/statestr.c $(std_unity_list)
###
-test_strtolfp_CFLAGS = \
- -I$(top_srcdir)/sntp/unity \
- $(NULL)
-
-test_strtolfp_LDADD = \
- $(unity_tests_LDADD) \
- -lpthread \
+test_strtolfp_CFLAGS = \
+ $(CFLAGS_LIBEVENT) \
+ $(AM_CFLAGS) \
$(NULL)
-test_strtolfp_SOURCES = \
- strtolfp.c \
- run-strtolfp.c \
+test_strtolfp_SOURCES = \
+ strtolfp.c \
+ run-strtolfp.c \
+ lfptest.c \
$(NULL)
$(srcdir)/run-strtolfp.c: $(srcdir)/strtolfp.c $(std_unity_list)
@@ -746,17 +457,9 @@ $(srcdir)/run-strtolfp.c: $(srcdir)/strtolfp.c $(std_unity_list)
###
-test_timespecops_CFLAGS = \
- -I$(top_srcdir)/sntp/unity \
- $(NULL)
-
-test_timespecops_LDADD = \
- $(unity_tests_LDADD) \
- $(NULL)
-
-test_timespecops_SOURCES = \
- timespecops.c \
- run-timespecops.c \
+test_timespecops_SOURCES = \
+ timespecops.c \
+ run-timespecops.c \
$(NULL)
$(srcdir)/run-timespecops.c: $(srcdir)/timespecops.c $(std_unity_list)
@@ -764,17 +467,9 @@ $(srcdir)/run-timespecops.c: $(srcdir)/timespecops.c $(std_unity_list)
###
-test_timevalops_CFLAGS = \
- -I$(top_srcdir)/sntp/unity \
- $(NULL)
-
-test_timevalops_LDADD = \
- $(unity_tests_LDADD) \
- $(NULL)
-
-test_timevalops_SOURCES = \
- timevalops.c \
- run-timevalops.c \
+test_timevalops_SOURCES = \
+ timevalops.c \
+ run-timevalops.c \
$(NULL)
$(srcdir)/run-timevalops.c: $(srcdir)/timevalops.c $(std_unity_list)
@@ -782,17 +477,9 @@ $(srcdir)/run-timevalops.c: $(srcdir)/timevalops.c $(std_unity_list)
###
-test_tstotv_CFLAGS = \
- -I$(top_srcdir)/sntp/unity \
- $(NULL)
-
-test_tstotv_LDADD = \
- $(unity_tests_LDADD) \
- $(NULL)
-
-test_tstotv_SOURCES = \
- tstotv.c \
- run-tstotv.c \
+test_tstotv_SOURCES = \
+ tstotv.c \
+ run-tstotv.c \
$(NULL)
$(srcdir)/run-tstotv.c: $(srcdir)/tstotv.c $(std_unity_list)
@@ -800,18 +487,10 @@ $(srcdir)/run-tstotv.c: $(srcdir)/tstotv.c $(std_unity_list)
###
-test_tvtots_CFLAGS = \
- -I$(top_srcdir)/sntp/unity \
- -DUNITY_INCLUDE_DOUBLE \
- $(NULL)
-
-test_tvtots_LDADD = \
- $(unity_tests_LDADD) \
- $(NULL)
-
-test_tvtots_SOURCES = \
- tvtots.c \
- run-tvtots.c \
+test_tvtots_SOURCES = \
+ tvtots.c \
+ run-tvtots.c \
+ lfptest.c \
$(NULL)
$(srcdir)/run-tvtots.c: $(srcdir)/tvtots.c $(std_unity_list)
@@ -819,17 +498,9 @@ $(srcdir)/run-tvtots.c: $(srcdir)/tvtots.c $(std_unity_list)
###
-test_uglydate_CFLAGS = \
- -I$(top_srcdir)/sntp/unity \
- $(NULL)
-
-test_uglydate_LDADD = \
- $(unity_tests_LDADD) \
- $(NULL)
-
-test_uglydate_SOURCES = \
- uglydate.c \
- run-uglydate.c \
+test_uglydate_SOURCES = \
+ uglydate.c \
+ run-uglydate.c \
$(NULL)
$(srcdir)/run-uglydate.c: $(srcdir)/uglydate.c $(std_unity_list)
@@ -837,17 +508,9 @@ $(srcdir)/run-uglydate.c: $(srcdir)/uglydate.c $(std_unity_list)
###
-test_vi64ops_CFLAGS = \
- -I$(top_srcdir)/sntp/unity \
- $(NULL)
-
-test_vi64ops_LDADD = \
- $(unity_tests_LDADD) \
- $(NULL)
-
-test_vi64ops_SOURCES = \
- vi64ops.c \
- run-vi64ops.c \
+test_vi64ops_SOURCES = \
+ vi64ops.c \
+ run-vi64ops.c \
$(NULL)
$(srcdir)/run-vi64ops.c: $(srcdir)/vi64ops.c $(std_unity_list)
@@ -855,17 +518,9 @@ $(srcdir)/run-vi64ops.c: $(srcdir)/vi64ops.c $(std_unity_list)
###
-test_ymd2yd_CFLAGS = \
- -I$(top_srcdir)/sntp/unity \
- $(NULL)
-
-test_ymd2yd_LDADD = \
- $(unity_tests_LDADD) \
- $(NULL)
-
-test_ymd2yd_SOURCES = \
- ymd2yd.c \
- run-ymd2yd.c \
+test_ymd2yd_SOURCES = \
+ ymd2yd.c \
+ run-ymd2yd.c \
$(NULL)
$(srcdir)/run-ymd2yd.c: $(srcdir)/ymd2yd.c $(std_unity_list)
diff --git a/contrib/ntp/tests/libntp/Makefile.in b/contrib/ntp/tests/libntp/Makefile.in
index e0f9222..32e884b 100644
--- a/contrib/ntp/tests/libntp/Makefile.in
+++ b/contrib/ntp/tests/libntp/Makefile.in
@@ -106,11 +106,8 @@ check_PROGRAMS = test-a_md5encrypt$(EXEEXT) test-atoint$(EXEEXT) \
test-strtolfp$(EXEEXT) test-timespecops$(EXEEXT) \
test-timevalops$(EXEEXT) test-tstotv$(EXEEXT) \
test-tvtots$(EXEEXT) test-uglydate$(EXEEXT) \
- test-vi64ops$(EXEEXT) test-ymd2yd$(EXEEXT) $(am__EXEEXT_1) \
- $(am__EXEEXT_2)
-@GTEST_AVAILABLE_TRUE@am__append_1 = tests
-@GTEST_AVAILABLE_FALSE@EXTRA_PROGRAMS = tests$(EXEEXT)
-@NTP_CROSSCOMPILE_FALSE@am__append_2 = $(check_PROGRAMS)
+ test-vi64ops$(EXEEXT) test-ymd2yd$(EXEEXT) $(am__EXEEXT_1)
+@NTP_CROSSCOMPILE_FALSE@am__append_1 = $(check_PROGRAMS)
subdir = tests/libntp
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/sntp/libopts/m4/libopts.m4 \
@@ -139,6 +136,7 @@ am__aclocal_m4_deps = $(top_srcdir)/sntp/libopts/m4/libopts.m4 \
$(top_srcdir)/sntp/m4/ntp_locinfo.m4 \
$(top_srcdir)/sntp/m4/ntp_openssl.m4 \
$(top_srcdir)/sntp/m4/ntp_pkg_config.m4 \
+ $(top_srcdir)/sntp/m4/ntp_problemtests.m4 \
$(top_srcdir)/sntp/m4/ntp_prog_cc.m4 \
$(top_srcdir)/sntp/m4/ntp_rlimit.m4 \
$(top_srcdir)/sntp/m4/ntp_sntp.m4 \
@@ -159,76 +157,69 @@ CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
am__EXEEXT_1 =
-@GTEST_AVAILABLE_TRUE@am__EXEEXT_2 = tests$(EXEEXT)
am__objects_1 =
-am_test_a_md5encrypt_OBJECTS = \
- test_a_md5encrypt-a_md5encrypt.$(OBJEXT) \
- test_a_md5encrypt-run-a_md5encrypt.$(OBJEXT) $(am__objects_1)
+am_test_a_md5encrypt_OBJECTS = a_md5encrypt.$(OBJEXT) \
+ run-a_md5encrypt.$(OBJEXT) $(am__objects_1)
test_a_md5encrypt_OBJECTS = $(am_test_a_md5encrypt_OBJECTS)
+test_a_md5encrypt_LDADD = $(LDADD)
am__DEPENDENCIES_1 =
-am__DEPENDENCIES_2 = $(top_builddir)/libntp/libntp.a \
+test_a_md5encrypt_DEPENDENCIES = $(top_builddir)/libntp/libntp.a \
$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
- $(am__DEPENDENCIES_1)
-am__DEPENDENCIES_3 = $(am__DEPENDENCIES_2) \
$(top_builddir)/sntp/unity/libunity.a $(am__DEPENDENCIES_1)
-test_a_md5encrypt_DEPENDENCIES = $(am__DEPENDENCIES_3) \
- $(am__DEPENDENCIES_1)
AM_V_lt = $(am__v_lt_@AM_V@)
am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
am__v_lt_0 = --silent
am__v_lt_1 =
-test_a_md5encrypt_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
- $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
- $(test_a_md5encrypt_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \
- -o $@
-am_test_atoint_OBJECTS = test_atoint-atoint.$(OBJEXT) \
- test_atoint-run-atoint.$(OBJEXT) $(am__objects_1)
+am_test_atoint_OBJECTS = atoint.$(OBJEXT) run-atoint.$(OBJEXT) \
+ $(am__objects_1)
test_atoint_OBJECTS = $(am_test_atoint_OBJECTS)
-test_atoint_DEPENDENCIES = $(am__DEPENDENCIES_3) $(am__DEPENDENCIES_1)
-test_atoint_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
- $(LIBTOOLFLAGS) --mode=link $(CCLD) $(test_atoint_CFLAGS) \
- $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
-am_test_atouint_OBJECTS = test_atouint-atouint.$(OBJEXT) \
- test_atouint-run-atouint.$(OBJEXT) $(am__objects_1)
+test_atoint_LDADD = $(LDADD)
+test_atoint_DEPENDENCIES = $(top_builddir)/libntp/libntp.a \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+ $(top_builddir)/sntp/unity/libunity.a $(am__DEPENDENCIES_1)
+am_test_atouint_OBJECTS = atouint.$(OBJEXT) run-atouint.$(OBJEXT) \
+ $(am__objects_1)
test_atouint_OBJECTS = $(am_test_atouint_OBJECTS)
-test_atouint_DEPENDENCIES = $(am__DEPENDENCIES_3) \
- $(am__DEPENDENCIES_1)
-test_atouint_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
- $(LIBTOOLFLAGS) --mode=link $(CCLD) $(test_atouint_CFLAGS) \
- $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
-am_test_authkeys_OBJECTS = test_authkeys-authkeys.$(OBJEXT) \
- test_authkeys-run-authkeys.$(OBJEXT) $(am__objects_1)
+test_atouint_LDADD = $(LDADD)
+test_atouint_DEPENDENCIES = $(top_builddir)/libntp/libntp.a \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+ $(top_builddir)/sntp/unity/libunity.a $(am__DEPENDENCIES_1)
+am_test_authkeys_OBJECTS = authkeys.$(OBJEXT) run-authkeys.$(OBJEXT) \
+ $(am__objects_1)
test_authkeys_OBJECTS = $(am_test_authkeys_OBJECTS)
-test_authkeys_DEPENDENCIES = $(am__DEPENDENCIES_3) \
- $(am__DEPENDENCIES_1)
-test_authkeys_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
- $(LIBTOOLFLAGS) --mode=link $(CCLD) $(test_authkeys_CFLAGS) \
- $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
-am_test_buftvtots_OBJECTS = test_buftvtots-buftvtots.$(OBJEXT) \
- test_buftvtots-run-buftvtots.$(OBJEXT) $(am__objects_1)
+test_authkeys_LDADD = $(LDADD)
+test_authkeys_DEPENDENCIES = $(top_builddir)/libntp/libntp.a \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+ $(top_builddir)/sntp/unity/libunity.a $(am__DEPENDENCIES_1)
+am_test_buftvtots_OBJECTS = buftvtots.$(OBJEXT) \
+ run-buftvtots.$(OBJEXT) lfptest.$(OBJEXT) $(am__objects_1)
test_buftvtots_OBJECTS = $(am_test_buftvtots_OBJECTS)
-test_buftvtots_DEPENDENCIES = $(am__DEPENDENCIES_3) \
- $(am__DEPENDENCIES_1)
-test_buftvtots_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
- $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
- $(test_buftvtots_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o \
- $@
-am_test_calendar_OBJECTS = test_calendar-calendar.$(OBJEXT) \
- test_calendar-run-calendar.$(OBJEXT) \
- test_calendar-test-libntp.$(OBJEXT) $(am__objects_1)
+test_buftvtots_LDADD = $(LDADD)
+test_buftvtots_DEPENDENCIES = $(top_builddir)/libntp/libntp.a \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+ $(top_builddir)/sntp/unity/libunity.a $(am__DEPENDENCIES_1)
+am_test_calendar_OBJECTS = calendar.$(OBJEXT) run-calendar.$(OBJEXT) \
+ test-libntp.$(OBJEXT) $(am__objects_1)
test_calendar_OBJECTS = $(am_test_calendar_OBJECTS)
-test_calendar_DEPENDENCIES = $(am__DEPENDENCIES_3) \
- $(am__DEPENDENCIES_1)
-test_calendar_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
- $(LIBTOOLFLAGS) --mode=link $(CCLD) $(test_calendar_CFLAGS) \
- $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+test_calendar_LDADD = $(LDADD)
+test_calendar_DEPENDENCIES = $(top_builddir)/libntp/libntp.a \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+ $(top_builddir)/sntp/unity/libunity.a $(am__DEPENDENCIES_1)
am_test_caljulian_OBJECTS = test_caljulian-caljulian.$(OBJEXT) \
test_caljulian-run-caljulian.$(OBJEXT) \
test_caljulian-test-libntp.$(OBJEXT) $(am__objects_1)
test_caljulian_OBJECTS = $(am_test_caljulian_OBJECTS)
-test_caljulian_DEPENDENCIES = $(am__DEPENDENCIES_3) \
- $(am__DEPENDENCIES_1)
+test_caljulian_LDADD = $(LDADD)
+test_caljulian_DEPENDENCIES = $(top_builddir)/libntp/libntp.a \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+ $(top_builddir)/sntp/unity/libunity.a $(am__DEPENDENCIES_1)
test_caljulian_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
$(test_caljulian_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o \
@@ -236,280 +227,265 @@ test_caljulian_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
am_test_caltontp_OBJECTS = test_caltontp-caltontp.$(OBJEXT) \
test_caltontp-run-caltontp.$(OBJEXT) $(am__objects_1)
test_caltontp_OBJECTS = $(am_test_caltontp_OBJECTS)
-test_caltontp_DEPENDENCIES = $(am__DEPENDENCIES_3) \
- $(am__DEPENDENCIES_1)
+test_caltontp_LDADD = $(LDADD)
+test_caltontp_DEPENDENCIES = $(top_builddir)/libntp/libntp.a \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+ $(top_builddir)/sntp/unity/libunity.a $(am__DEPENDENCIES_1)
test_caltontp_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=link $(CCLD) $(test_caltontp_CFLAGS) \
$(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
-am_test_calyearstart_OBJECTS = \
- test_calyearstart-calyearstart.$(OBJEXT) \
- test_calyearstart-run-calyearstart.$(OBJEXT) \
- test_calyearstart-test-libntp.$(OBJEXT) $(am__objects_1)
+am_test_calyearstart_OBJECTS = calyearstart.$(OBJEXT) \
+ run-calyearstart.$(OBJEXT) test-libntp.$(OBJEXT) \
+ $(am__objects_1)
test_calyearstart_OBJECTS = $(am_test_calyearstart_OBJECTS)
-test_calyearstart_DEPENDENCIES = $(am__DEPENDENCIES_3) \
- $(am__DEPENDENCIES_1)
-test_calyearstart_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
- $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
- $(test_calyearstart_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \
- -o $@
-am_test_clocktime_OBJECTS = test_clocktime-clocktime.$(OBJEXT) \
- test_clocktime-run-clocktime.$(OBJEXT) \
- test_clocktime-test-libntp.$(OBJEXT) $(am__objects_1)
+test_calyearstart_LDADD = $(LDADD)
+test_calyearstart_DEPENDENCIES = $(top_builddir)/libntp/libntp.a \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+ $(top_builddir)/sntp/unity/libunity.a $(am__DEPENDENCIES_1)
+am_test_clocktime_OBJECTS = clocktime.$(OBJEXT) \
+ run-clocktime.$(OBJEXT) test-libntp.$(OBJEXT) $(am__objects_1)
test_clocktime_OBJECTS = $(am_test_clocktime_OBJECTS)
-test_clocktime_DEPENDENCIES = $(am__DEPENDENCIES_3) \
- $(am__DEPENDENCIES_1)
-test_clocktime_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
- $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
- $(test_clocktime_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o \
- $@
+test_clocktime_LDADD = $(LDADD)
+test_clocktime_DEPENDENCIES = $(top_builddir)/libntp/libntp.a \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+ $(top_builddir)/sntp/unity/libunity.a $(am__DEPENDENCIES_1)
am_test_decodenetnum_OBJECTS = \
test_decodenetnum-decodenetnum.$(OBJEXT) \
- test_decodenetnum-run-decodenetnum.$(OBJEXT) $(am__objects_1)
+ test_decodenetnum-run-decodenetnum.$(OBJEXT) \
+ test_decodenetnum-sockaddrtest.$(OBJEXT) $(am__objects_1)
test_decodenetnum_OBJECTS = $(am_test_decodenetnum_OBJECTS)
-test_decodenetnum_DEPENDENCIES = $(am__DEPENDENCIES_3) \
- $(am__DEPENDENCIES_1)
+test_decodenetnum_LDADD = $(LDADD)
+test_decodenetnum_DEPENDENCIES = $(top_builddir)/libntp/libntp.a \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+ $(top_builddir)/sntp/unity/libunity.a $(am__DEPENDENCIES_1)
test_decodenetnum_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
$(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
$(test_decodenetnum_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \
-o $@
-am_test_hextoint_OBJECTS = test_hextoint-hextoint.$(OBJEXT) \
- test_hextoint-run-hextoint.$(OBJEXT) $(am__objects_1)
+am_test_hextoint_OBJECTS = hextoint.$(OBJEXT) run-hextoint.$(OBJEXT) \
+ $(am__objects_1)
test_hextoint_OBJECTS = $(am_test_hextoint_OBJECTS)
-test_hextoint_DEPENDENCIES = $(am__DEPENDENCIES_3) \
- $(am__DEPENDENCIES_1)
-test_hextoint_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
- $(LIBTOOLFLAGS) --mode=link $(CCLD) $(test_hextoint_CFLAGS) \
- $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
-am_test_hextolfp_OBJECTS = test_hextolfp-hextolfp.$(OBJEXT) \
- test_hextolfp-run-hextolfp.$(OBJEXT) $(am__objects_1)
+test_hextoint_LDADD = $(LDADD)
+test_hextoint_DEPENDENCIES = $(top_builddir)/libntp/libntp.a \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+ $(top_builddir)/sntp/unity/libunity.a $(am__DEPENDENCIES_1)
+am_test_hextolfp_OBJECTS = hextolfp.$(OBJEXT) run-hextolfp.$(OBJEXT) \
+ lfptest.$(OBJEXT) $(am__objects_1)
test_hextolfp_OBJECTS = $(am_test_hextolfp_OBJECTS)
-test_hextolfp_DEPENDENCIES = $(am__DEPENDENCIES_3) \
- $(am__DEPENDENCIES_1)
-test_hextolfp_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
- $(LIBTOOLFLAGS) --mode=link $(CCLD) $(test_hextolfp_CFLAGS) \
- $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
-am_test_humandate_OBJECTS = test_humandate-humandate.$(OBJEXT) \
- test_humandate-run-humandate.$(OBJEXT) $(am__objects_1)
+test_hextolfp_LDADD = $(LDADD)
+test_hextolfp_DEPENDENCIES = $(top_builddir)/libntp/libntp.a \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+ $(top_builddir)/sntp/unity/libunity.a $(am__DEPENDENCIES_1)
+am_test_humandate_OBJECTS = humandate.$(OBJEXT) \
+ run-humandate.$(OBJEXT) $(am__objects_1)
test_humandate_OBJECTS = $(am_test_humandate_OBJECTS)
-test_humandate_DEPENDENCIES = $(am__DEPENDENCIES_3) \
- $(am__DEPENDENCIES_1)
-test_humandate_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
- $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
- $(test_humandate_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o \
- $@
-am_test_lfpfunc_OBJECTS = test_lfpfunc-lfpfunc.$(OBJEXT) \
- test_lfpfunc-run-lfpfunc.$(OBJEXT) $(am__objects_1)
+test_humandate_LDADD = $(LDADD)
+test_humandate_DEPENDENCIES = $(top_builddir)/libntp/libntp.a \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+ $(top_builddir)/sntp/unity/libunity.a $(am__DEPENDENCIES_1)
+am_test_lfpfunc_OBJECTS = lfpfunc.$(OBJEXT) run-lfpfunc.$(OBJEXT) \
+ $(am__objects_1)
test_lfpfunc_OBJECTS = $(am_test_lfpfunc_OBJECTS)
-test_lfpfunc_DEPENDENCIES = $(am__DEPENDENCIES_3) \
- $(am__DEPENDENCIES_1)
-test_lfpfunc_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
- $(LIBTOOLFLAGS) --mode=link $(CCLD) $(test_lfpfunc_CFLAGS) \
- $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
-am_test_lfptostr_OBJECTS = test_lfptostr-lfptostr.$(OBJEXT) \
- test_lfptostr-run-lfptostr.$(OBJEXT) $(am__objects_1)
+test_lfpfunc_LDADD = $(LDADD)
+test_lfpfunc_DEPENDENCIES = $(top_builddir)/libntp/libntp.a \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+ $(top_builddir)/sntp/unity/libunity.a $(am__DEPENDENCIES_1)
+am_test_lfptostr_OBJECTS = lfptostr.$(OBJEXT) run-lfptostr.$(OBJEXT) \
+ $(am__objects_1)
test_lfptostr_OBJECTS = $(am_test_lfptostr_OBJECTS)
-test_lfptostr_DEPENDENCIES = $(am__DEPENDENCIES_3) \
- $(am__DEPENDENCIES_1)
-test_lfptostr_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
- $(LIBTOOLFLAGS) --mode=link $(CCLD) $(test_lfptostr_CFLAGS) \
- $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
-am_test_modetoa_OBJECTS = test_modetoa-modetoa.$(OBJEXT) \
- test_modetoa-run-modetoa.$(OBJEXT) $(am__objects_1)
+test_lfptostr_LDADD = $(LDADD)
+test_lfptostr_DEPENDENCIES = $(top_builddir)/libntp/libntp.a \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+ $(top_builddir)/sntp/unity/libunity.a $(am__DEPENDENCIES_1)
+am_test_modetoa_OBJECTS = modetoa.$(OBJEXT) run-modetoa.$(OBJEXT) \
+ $(am__objects_1)
test_modetoa_OBJECTS = $(am_test_modetoa_OBJECTS)
-test_modetoa_DEPENDENCIES = $(am__DEPENDENCIES_3) \
- $(am__DEPENDENCIES_1)
-test_modetoa_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
- $(LIBTOOLFLAGS) --mode=link $(CCLD) $(test_modetoa_CFLAGS) \
- $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
-am_test_msyslog_OBJECTS = test_msyslog-msyslog.$(OBJEXT) \
- test_msyslog-run-msyslog.$(OBJEXT) $(am__objects_1)
+test_modetoa_LDADD = $(LDADD)
+test_modetoa_DEPENDENCIES = $(top_builddir)/libntp/libntp.a \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+ $(top_builddir)/sntp/unity/libunity.a $(am__DEPENDENCIES_1)
+am_test_msyslog_OBJECTS = msyslog.$(OBJEXT) run-msyslog.$(OBJEXT) \
+ $(am__objects_1)
test_msyslog_OBJECTS = $(am_test_msyslog_OBJECTS)
-test_msyslog_DEPENDENCIES = $(am__DEPENDENCIES_3) \
- $(am__DEPENDENCIES_1)
-test_msyslog_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
- $(LIBTOOLFLAGS) --mode=link $(CCLD) $(test_msyslog_CFLAGS) \
- $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
-am_test_netof_OBJECTS = test_netof-netof.$(OBJEXT) \
- test_netof-run-netof.$(OBJEXT) $(am__objects_1)
+test_msyslog_LDADD = $(LDADD)
+test_msyslog_DEPENDENCIES = $(top_builddir)/libntp/libntp.a \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+ $(top_builddir)/sntp/unity/libunity.a $(am__DEPENDENCIES_1)
+am_test_netof_OBJECTS = netof.$(OBJEXT) run-netof.$(OBJEXT) \
+ sockaddrtest.$(OBJEXT) $(am__objects_1)
test_netof_OBJECTS = $(am_test_netof_OBJECTS)
-test_netof_DEPENDENCIES = $(am__DEPENDENCIES_3) $(am__DEPENDENCIES_1)
-test_netof_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
- $(LIBTOOLFLAGS) --mode=link $(CCLD) $(test_netof_CFLAGS) \
- $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
-am_test_numtoa_OBJECTS = test_numtoa-numtoa.$(OBJEXT) \
- test_numtoa-run-numtoa.$(OBJEXT) $(am__objects_1)
+test_netof_LDADD = $(LDADD)
+test_netof_DEPENDENCIES = $(top_builddir)/libntp/libntp.a \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+ $(top_builddir)/sntp/unity/libunity.a $(am__DEPENDENCIES_1)
+am_test_numtoa_OBJECTS = numtoa.$(OBJEXT) run-numtoa.$(OBJEXT) \
+ $(am__objects_1)
test_numtoa_OBJECTS = $(am_test_numtoa_OBJECTS)
-test_numtoa_DEPENDENCIES = $(am__DEPENDENCIES_3) $(am__DEPENDENCIES_1)
-test_numtoa_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
- $(LIBTOOLFLAGS) --mode=link $(CCLD) $(test_numtoa_CFLAGS) \
- $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
-am_test_numtohost_OBJECTS = test_numtohost-numtohost.$(OBJEXT) \
- test_numtohost-run-numtohost.$(OBJEXT) $(am__objects_1)
+test_numtoa_LDADD = $(LDADD)
+test_numtoa_DEPENDENCIES = $(top_builddir)/libntp/libntp.a \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+ $(top_builddir)/sntp/unity/libunity.a $(am__DEPENDENCIES_1)
+am_test_numtohost_OBJECTS = numtohost.$(OBJEXT) \
+ run-numtohost.$(OBJEXT) $(am__objects_1)
test_numtohost_OBJECTS = $(am_test_numtohost_OBJECTS)
-test_numtohost_DEPENDENCIES = $(am__DEPENDENCIES_3) \
- $(am__DEPENDENCIES_1)
-test_numtohost_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
- $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
- $(test_numtohost_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o \
- $@
-am_test_octtoint_OBJECTS = test_octtoint-octtoint.$(OBJEXT) \
- test_octtoint-run-octtoint.$(OBJEXT) $(am__objects_1)
+test_numtohost_LDADD = $(LDADD)
+test_numtohost_DEPENDENCIES = $(top_builddir)/libntp/libntp.a \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+ $(top_builddir)/sntp/unity/libunity.a $(am__DEPENDENCIES_1)
+am_test_octtoint_OBJECTS = octtoint.$(OBJEXT) run-octtoint.$(OBJEXT) \
+ $(am__objects_1)
test_octtoint_OBJECTS = $(am_test_octtoint_OBJECTS)
-test_octtoint_DEPENDENCIES = $(am__DEPENDENCIES_3) \
- $(am__DEPENDENCIES_1)
-test_octtoint_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
- $(LIBTOOLFLAGS) --mode=link $(CCLD) $(test_octtoint_CFLAGS) \
- $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
-am_test_prettydate_OBJECTS = test_prettydate-prettydate.$(OBJEXT) \
- test_prettydate-run-prettydate.$(OBJEXT) $(am__objects_1)
+test_octtoint_LDADD = $(LDADD)
+test_octtoint_DEPENDENCIES = $(top_builddir)/libntp/libntp.a \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+ $(top_builddir)/sntp/unity/libunity.a $(am__DEPENDENCIES_1)
+am_test_prettydate_OBJECTS = prettydate.$(OBJEXT) \
+ run-prettydate.$(OBJEXT) $(am__objects_1)
test_prettydate_OBJECTS = $(am_test_prettydate_OBJECTS)
-test_prettydate_DEPENDENCIES = $(am__DEPENDENCIES_3) \
- $(am__DEPENDENCIES_1)
-test_prettydate_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
- $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
- $(test_prettydate_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \
- -o $@
-am_test_recvbuff_OBJECTS = test_recvbuff-recvbuff.$(OBJEXT) \
- test_recvbuff-run-recvbuff.$(OBJEXT) $(am__objects_1)
+test_prettydate_LDADD = $(LDADD)
+test_prettydate_DEPENDENCIES = $(top_builddir)/libntp/libntp.a \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+ $(top_builddir)/sntp/unity/libunity.a $(am__DEPENDENCIES_1)
+am_test_recvbuff_OBJECTS = recvbuff.$(OBJEXT) run-recvbuff.$(OBJEXT) \
+ $(am__objects_1)
test_recvbuff_OBJECTS = $(am_test_recvbuff_OBJECTS)
-test_recvbuff_DEPENDENCIES = $(am__DEPENDENCIES_3) \
- $(am__DEPENDENCIES_1)
-test_recvbuff_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
- $(LIBTOOLFLAGS) --mode=link $(CCLD) $(test_recvbuff_CFLAGS) \
- $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
-am_test_refidsmear_OBJECTS = test_refidsmear-refidsmear.$(OBJEXT) \
- test_refidsmear-run-refidsmear.$(OBJEXT) $(am__objects_1)
+test_recvbuff_LDADD = $(LDADD)
+test_recvbuff_DEPENDENCIES = $(top_builddir)/libntp/libntp.a \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+ $(top_builddir)/sntp/unity/libunity.a $(am__DEPENDENCIES_1)
+am_test_refidsmear_OBJECTS = refidsmear.$(OBJEXT) \
+ run-refidsmear.$(OBJEXT) $(am__objects_1)
test_refidsmear_OBJECTS = $(am_test_refidsmear_OBJECTS)
-test_refidsmear_DEPENDENCIES = $(am__DEPENDENCIES_3) \
- $(am__DEPENDENCIES_1)
-test_refidsmear_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
- $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
- $(test_refidsmear_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \
- -o $@
-am_test_refnumtoa_OBJECTS = test_refnumtoa-refnumtoa.$(OBJEXT) \
- test_refnumtoa-run-refnumtoa.$(OBJEXT) $(am__objects_1)
+test_refidsmear_LDADD = $(LDADD)
+test_refidsmear_DEPENDENCIES = $(top_builddir)/libntp/libntp.a \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+ $(top_builddir)/sntp/unity/libunity.a $(am__DEPENDENCIES_1)
+am_test_refnumtoa_OBJECTS = refnumtoa.$(OBJEXT) \
+ run-refnumtoa.$(OBJEXT) $(am__objects_1)
test_refnumtoa_OBJECTS = $(am_test_refnumtoa_OBJECTS)
-test_refnumtoa_DEPENDENCIES = $(am__DEPENDENCIES_3) \
- $(am__DEPENDENCIES_1)
-test_refnumtoa_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
- $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
- $(test_refnumtoa_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o \
- $@
-am_test_sfptostr_OBJECTS = test_sfptostr-sfptostr.$(OBJEXT) \
- test_sfptostr-run-sfptostr.$(OBJEXT) $(am__objects_1)
+test_refnumtoa_LDADD = $(LDADD)
+test_refnumtoa_DEPENDENCIES = $(top_builddir)/libntp/libntp.a \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+ $(top_builddir)/sntp/unity/libunity.a $(am__DEPENDENCIES_1)
+am_test_sfptostr_OBJECTS = sfptostr.$(OBJEXT) run-sfptostr.$(OBJEXT) \
+ $(am__objects_1)
test_sfptostr_OBJECTS = $(am_test_sfptostr_OBJECTS)
-test_sfptostr_DEPENDENCIES = $(am__DEPENDENCIES_3) \
- $(am__DEPENDENCIES_1)
-test_sfptostr_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
- $(LIBTOOLFLAGS) --mode=link $(CCLD) $(test_sfptostr_CFLAGS) \
- $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
-am_test_socktoa_OBJECTS = test_socktoa-socktoa.$(OBJEXT) \
- test_socktoa-run-socktoa.$(OBJEXT) $(am__objects_1)
+test_sfptostr_LDADD = $(LDADD)
+test_sfptostr_DEPENDENCIES = $(top_builddir)/libntp/libntp.a \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+ $(top_builddir)/sntp/unity/libunity.a $(am__DEPENDENCIES_1)
+am_test_socktoa_OBJECTS = socktoa.$(OBJEXT) run-socktoa.$(OBJEXT) \
+ sockaddrtest.$(OBJEXT) $(am__objects_1)
test_socktoa_OBJECTS = $(am_test_socktoa_OBJECTS)
-test_socktoa_DEPENDENCIES = $(am__DEPENDENCIES_3) \
- $(am__DEPENDENCIES_1)
-test_socktoa_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
- $(LIBTOOLFLAGS) --mode=link $(CCLD) $(test_socktoa_CFLAGS) \
- $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
-am_test_ssl_init_OBJECTS = test_ssl_init-ssl_init.$(OBJEXT) \
- test_ssl_init-run-ssl_init.$(OBJEXT) $(am__objects_1)
+test_socktoa_LDADD = $(LDADD)
+test_socktoa_DEPENDENCIES = $(top_builddir)/libntp/libntp.a \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+ $(top_builddir)/sntp/unity/libunity.a $(am__DEPENDENCIES_1)
+am_test_ssl_init_OBJECTS = ssl_init.$(OBJEXT) run-ssl_init.$(OBJEXT) \
+ $(am__objects_1)
test_ssl_init_OBJECTS = $(am_test_ssl_init_OBJECTS)
-test_ssl_init_DEPENDENCIES = $(am__DEPENDENCIES_3) \
- $(am__DEPENDENCIES_1)
-test_ssl_init_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
- $(LIBTOOLFLAGS) --mode=link $(CCLD) $(test_ssl_init_CFLAGS) \
- $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
-am_test_statestr_OBJECTS = test_statestr-statestr.$(OBJEXT) \
- test_statestr-run-statestr.$(OBJEXT) $(am__objects_1)
+test_ssl_init_LDADD = $(LDADD)
+test_ssl_init_DEPENDENCIES = $(top_builddir)/libntp/libntp.a \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+ $(top_builddir)/sntp/unity/libunity.a $(am__DEPENDENCIES_1)
+am_test_statestr_OBJECTS = statestr.$(OBJEXT) run-statestr.$(OBJEXT) \
+ $(am__objects_1)
test_statestr_OBJECTS = $(am_test_statestr_OBJECTS)
-test_statestr_DEPENDENCIES = $(am__DEPENDENCIES_3) \
- $(am__DEPENDENCIES_1)
-test_statestr_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
- $(LIBTOOLFLAGS) --mode=link $(CCLD) $(test_statestr_CFLAGS) \
- $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+test_statestr_LDADD = $(LDADD)
+test_statestr_DEPENDENCIES = $(top_builddir)/libntp/libntp.a \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+ $(top_builddir)/sntp/unity/libunity.a $(am__DEPENDENCIES_1)
am_test_strtolfp_OBJECTS = test_strtolfp-strtolfp.$(OBJEXT) \
- test_strtolfp-run-strtolfp.$(OBJEXT) $(am__objects_1)
+ test_strtolfp-run-strtolfp.$(OBJEXT) \
+ test_strtolfp-lfptest.$(OBJEXT) $(am__objects_1)
test_strtolfp_OBJECTS = $(am_test_strtolfp_OBJECTS)
-test_strtolfp_DEPENDENCIES = $(am__DEPENDENCIES_3) \
- $(am__DEPENDENCIES_1)
+test_strtolfp_LDADD = $(LDADD)
+test_strtolfp_DEPENDENCIES = $(top_builddir)/libntp/libntp.a \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+ $(top_builddir)/sntp/unity/libunity.a $(am__DEPENDENCIES_1)
test_strtolfp_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=link $(CCLD) $(test_strtolfp_CFLAGS) \
$(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
-am_test_timespecops_OBJECTS = test_timespecops-timespecops.$(OBJEXT) \
- test_timespecops-run-timespecops.$(OBJEXT) $(am__objects_1)
+am_test_timespecops_OBJECTS = timespecops.$(OBJEXT) \
+ run-timespecops.$(OBJEXT) $(am__objects_1)
test_timespecops_OBJECTS = $(am_test_timespecops_OBJECTS)
-test_timespecops_DEPENDENCIES = $(am__DEPENDENCIES_3) \
- $(am__DEPENDENCIES_1)
-test_timespecops_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
- $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
- $(test_timespecops_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \
- -o $@
-am_test_timevalops_OBJECTS = test_timevalops-timevalops.$(OBJEXT) \
- test_timevalops-run-timevalops.$(OBJEXT) $(am__objects_1)
+test_timespecops_LDADD = $(LDADD)
+test_timespecops_DEPENDENCIES = $(top_builddir)/libntp/libntp.a \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+ $(top_builddir)/sntp/unity/libunity.a $(am__DEPENDENCIES_1)
+am_test_timevalops_OBJECTS = timevalops.$(OBJEXT) \
+ run-timevalops.$(OBJEXT) $(am__objects_1)
test_timevalops_OBJECTS = $(am_test_timevalops_OBJECTS)
-test_timevalops_DEPENDENCIES = $(am__DEPENDENCIES_3) \
- $(am__DEPENDENCIES_1)
-test_timevalops_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
- $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
- $(test_timevalops_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \
- -o $@
-am_test_tstotv_OBJECTS = test_tstotv-tstotv.$(OBJEXT) \
- test_tstotv-run-tstotv.$(OBJEXT) $(am__objects_1)
+test_timevalops_LDADD = $(LDADD)
+test_timevalops_DEPENDENCIES = $(top_builddir)/libntp/libntp.a \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+ $(top_builddir)/sntp/unity/libunity.a $(am__DEPENDENCIES_1)
+am_test_tstotv_OBJECTS = tstotv.$(OBJEXT) run-tstotv.$(OBJEXT) \
+ $(am__objects_1)
test_tstotv_OBJECTS = $(am_test_tstotv_OBJECTS)
-test_tstotv_DEPENDENCIES = $(am__DEPENDENCIES_3) $(am__DEPENDENCIES_1)
-test_tstotv_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
- $(LIBTOOLFLAGS) --mode=link $(CCLD) $(test_tstotv_CFLAGS) \
- $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
-am_test_tvtots_OBJECTS = test_tvtots-tvtots.$(OBJEXT) \
- test_tvtots-run-tvtots.$(OBJEXT) $(am__objects_1)
+test_tstotv_LDADD = $(LDADD)
+test_tstotv_DEPENDENCIES = $(top_builddir)/libntp/libntp.a \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+ $(top_builddir)/sntp/unity/libunity.a $(am__DEPENDENCIES_1)
+am_test_tvtots_OBJECTS = tvtots.$(OBJEXT) run-tvtots.$(OBJEXT) \
+ lfptest.$(OBJEXT) $(am__objects_1)
test_tvtots_OBJECTS = $(am_test_tvtots_OBJECTS)
-test_tvtots_DEPENDENCIES = $(am__DEPENDENCIES_3) $(am__DEPENDENCIES_1)
-test_tvtots_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
- $(LIBTOOLFLAGS) --mode=link $(CCLD) $(test_tvtots_CFLAGS) \
- $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
-am_test_uglydate_OBJECTS = test_uglydate-uglydate.$(OBJEXT) \
- test_uglydate-run-uglydate.$(OBJEXT) $(am__objects_1)
+test_tvtots_LDADD = $(LDADD)
+test_tvtots_DEPENDENCIES = $(top_builddir)/libntp/libntp.a \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+ $(top_builddir)/sntp/unity/libunity.a $(am__DEPENDENCIES_1)
+am_test_uglydate_OBJECTS = uglydate.$(OBJEXT) run-uglydate.$(OBJEXT) \
+ $(am__objects_1)
test_uglydate_OBJECTS = $(am_test_uglydate_OBJECTS)
-test_uglydate_DEPENDENCIES = $(am__DEPENDENCIES_3) \
- $(am__DEPENDENCIES_1)
-test_uglydate_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
- $(LIBTOOLFLAGS) --mode=link $(CCLD) $(test_uglydate_CFLAGS) \
- $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
-am_test_vi64ops_OBJECTS = test_vi64ops-vi64ops.$(OBJEXT) \
- test_vi64ops-run-vi64ops.$(OBJEXT) $(am__objects_1)
+test_uglydate_LDADD = $(LDADD)
+test_uglydate_DEPENDENCIES = $(top_builddir)/libntp/libntp.a \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+ $(top_builddir)/sntp/unity/libunity.a $(am__DEPENDENCIES_1)
+am_test_vi64ops_OBJECTS = vi64ops.$(OBJEXT) run-vi64ops.$(OBJEXT) \
+ $(am__objects_1)
test_vi64ops_OBJECTS = $(am_test_vi64ops_OBJECTS)
-test_vi64ops_DEPENDENCIES = $(am__DEPENDENCIES_3) \
- $(am__DEPENDENCIES_1)
-test_vi64ops_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
- $(LIBTOOLFLAGS) --mode=link $(CCLD) $(test_vi64ops_CFLAGS) \
- $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
-am_test_ymd2yd_OBJECTS = test_ymd2yd-ymd2yd.$(OBJEXT) \
- test_ymd2yd-run-ymd2yd.$(OBJEXT) $(am__objects_1)
-test_ymd2yd_OBJECTS = $(am_test_ymd2yd_OBJECTS)
-test_ymd2yd_DEPENDENCIES = $(am__DEPENDENCIES_3) $(am__DEPENDENCIES_1)
-test_ymd2yd_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
- $(LIBTOOLFLAGS) --mode=link $(CCLD) $(test_ymd2yd_CFLAGS) \
- $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
-am_tests_OBJECTS = tests_main.$(OBJEXT) g_libntptest.$(OBJEXT) \
- g_a_md5encrypt.$(OBJEXT) g_atoint.$(OBJEXT) \
- g_atouint.$(OBJEXT) g_authkeys.$(OBJEXT) g_buftvtots.$(OBJEXT) \
- g_calendar.$(OBJEXT) g_caljulian.$(OBJEXT) \
- g_caltontp.$(OBJEXT) g_calyearstart.$(OBJEXT) \
- g_clocktime.$(OBJEXT) g_decodenetnum.$(OBJEXT) \
- g_hextoint.$(OBJEXT) g_hextolfp.$(OBJEXT) \
- g_humandate.$(OBJEXT) g_lfpfunc.$(OBJEXT) g_lfptostr.$(OBJEXT) \
- g_modetoa.$(OBJEXT) g_msyslog.$(OBJEXT) g_netof.$(OBJEXT) \
- g_numtoa.$(OBJEXT) g_numtohost.$(OBJEXT) g_octtoint.$(OBJEXT) \
- g_prettydate.$(OBJEXT) g_recvbuff.$(OBJEXT) \
- g_refnumtoa.$(OBJEXT) g_sfptostr.$(OBJEXT) g_socktoa.$(OBJEXT) \
- g_ssl_init.$(OBJEXT) g_statestr.$(OBJEXT) g_strtolfp.$(OBJEXT) \
- g_timespecops.$(OBJEXT) g_timestructs.$(OBJEXT) \
- g_timevalops.$(OBJEXT) g_tstotv.$(OBJEXT) g_tvtots.$(OBJEXT) \
- g_uglydate.$(OBJEXT) g_vi64ops.$(OBJEXT) g_ymd2yd.$(OBJEXT) \
+test_vi64ops_LDADD = $(LDADD)
+test_vi64ops_DEPENDENCIES = $(top_builddir)/libntp/libntp.a \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+ $(top_builddir)/sntp/unity/libunity.a $(am__DEPENDENCIES_1)
+am_test_ymd2yd_OBJECTS = ymd2yd.$(OBJEXT) run-ymd2yd.$(OBJEXT) \
$(am__objects_1)
-tests_OBJECTS = $(am_tests_OBJECTS)
-tests_DEPENDENCIES = $(am__DEPENDENCIES_2) $(am__DEPENDENCIES_1) \
- $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
+test_ymd2yd_OBJECTS = $(am_test_ymd2yd_OBJECTS)
+test_ymd2yd_LDADD = $(LDADD)
+test_ymd2yd_DEPENDENCIES = $(top_builddir)/libntp/libntp.a \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+ $(top_builddir)/sntp/unity/libunity.a $(am__DEPENDENCIES_1)
AM_V_P = $(am__v_P_@AM_V@)
am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
am__v_P_0 = false
@@ -544,24 +520,6 @@ AM_V_CCLD = $(am__v_CCLD_@AM_V@)
am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
am__v_CCLD_0 = @echo " CCLD " $@;
am__v_CCLD_1 =
-CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
- $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
-LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \
- $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \
- $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
- $(AM_CXXFLAGS) $(CXXFLAGS)
-AM_V_CXX = $(am__v_CXX_@AM_V@)
-am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@)
-am__v_CXX_0 = @echo " CXX " $@;
-am__v_CXX_1 =
-CXXLD = $(CXX)
-CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \
- $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \
- $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
-AM_V_CXXLD = $(am__v_CXXLD_@AM_V@)
-am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@)
-am__v_CXXLD_0 = @echo " CXXLD " $@;
-am__v_CXXLD_1 =
SOURCES = $(test_a_md5encrypt_SOURCES) $(test_atoint_SOURCES) \
$(test_atouint_SOURCES) $(test_authkeys_SOURCES) \
$(test_buftvtots_SOURCES) $(test_calendar_SOURCES) \
@@ -580,8 +538,7 @@ SOURCES = $(test_a_md5encrypt_SOURCES) $(test_atoint_SOURCES) \
$(test_strtolfp_SOURCES) $(test_timespecops_SOURCES) \
$(test_timevalops_SOURCES) $(test_tstotv_SOURCES) \
$(test_tvtots_SOURCES) $(test_uglydate_SOURCES) \
- $(test_vi64ops_SOURCES) $(test_ymd2yd_SOURCES) \
- $(tests_SOURCES)
+ $(test_vi64ops_SOURCES) $(test_ymd2yd_SOURCES)
DIST_SOURCES = $(test_a_md5encrypt_SOURCES) $(test_atoint_SOURCES) \
$(test_atouint_SOURCES) $(test_authkeys_SOURCES) \
$(test_buftvtots_SOURCES) $(test_calendar_SOURCES) \
@@ -600,8 +557,7 @@ DIST_SOURCES = $(test_a_md5encrypt_SOURCES) $(test_atoint_SOURCES) \
$(test_strtolfp_SOURCES) $(test_timespecops_SOURCES) \
$(test_timevalops_SOURCES) $(test_tstotv_SOURCES) \
$(test_tvtots_SOURCES) $(test_uglydate_SOURCES) \
- $(test_vi64ops_SOURCES) $(test_ymd2yd_SOURCES) \
- $(tests_SOURCES)
+ $(test_vi64ops_SOURCES) $(test_ymd2yd_SOURCES)
am__can_run_installinfo = \
case $$AM_UPDATE_INFO_DIR in \
n|no|NO) false;; \
@@ -847,6 +803,7 @@ AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
+BUILD_THREAD = @BUILD_THREAD@
CALC_TICKADJ_DB = @CALC_TICKADJ_DB@
CALC_TICKADJ_DL = @CALC_TICKADJ_DL@
CALC_TICKADJ_DS = @CALC_TICKADJ_DS@
@@ -855,6 +812,7 @@ CALC_TICKADJ_NI = @CALC_TICKADJ_NI@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
+CFLAGS_LIBEVENT = @CFLAGS_LIBEVENT@
CFLAGS_NTP = @CFLAGS_NTP@
CHUTEST = @CHUTEST@
CONFIG_SHELL = @CONFIG_SHELL@
@@ -916,6 +874,7 @@ LIBTOOL_DEPS = @LIBTOOL_DEPS@
LIPO = @LIPO@
LN_S = @LN_S@
LSCF = @LSCF@
+LTHREAD_LIBS = @LTHREAD_LIBS@
LTLIBOBJS = @LTLIBOBJS@
MAKEINFO = @MAKEINFO@
MAKE_ADJTIMED = @MAKE_ADJTIMED@
@@ -1123,6 +1082,10 @@ BUILT_SOURCES = $(srcdir)/run-a_md5encrypt.c $(srcdir)/run-atoint.c \
$(srcdir)/run-vi64ops.c $(srcdir)/run-ymd2yd.c $(NULL) \
check-libntp check-libunity .deps-ver
CLEANFILES = check-libntp check-libunity .deps-ver
+std_unity_list = \
+ $(top_srcdir)/sntp/unity/auto/generate_test_runner.rb \
+ $(NULL)
+
run_unity = cd $(srcdir) && ruby ../../sntp/unity/auto/generate_test_runner.rb
LDADD = \
$(top_builddir)/libntp/libntp.a \
@@ -1130,662 +1093,319 @@ LDADD = \
$(PTHREAD_LIBS) \
$(LDADD_NTP) \
$(LIBM) \
- $(NULL)
-
-tests_LDADD = \
- $(LDADD) \
- $(GTEST_LDFLAGS) \
- $(GTEST_LIBS) \
- $(NULL)
-
-unity_tests_LDADD = \
- $(LDADD) \
$(top_builddir)/sntp/unity/libunity.a \
$(NULL)
AM_CFLAGS = $(CFLAGS_NTP)
-AM_CXXFLAGS = $(GTEST_CXXFLAGS)
-AM_CPPFLAGS = $(NTP_INCS) -I$(top_srcdir)/sntp $(GTEST_CPPFLAGS) \
- $(CPPFLAGS_NTP)
+AM_CPPFLAGS = $(NTP_INCS) -I$(top_srcdir)/sntp $(CPPFLAGS_NTP) \
+ -DUNITY_INCLUDE_CONFIG_H -I$(top_srcdir)/sntp/unity
AM_LDFLAGS = $(LDFLAGS_NTP)
-tests_SOURCES = \
- $(top_srcdir)/sntp/tests_main.cpp \
- g_libntptest.cpp \
- g_a_md5encrypt.cpp \
- g_atoint.cpp \
- g_atouint.cpp \
- g_authkeys.cpp \
- g_buftvtots.cpp \
- g_calendar.cpp \
- g_caljulian.cpp \
- g_caltontp.cpp \
- g_calyearstart.cpp \
- g_clocktime.cpp \
- g_decodenetnum.cpp \
- g_hextoint.cpp \
- g_hextolfp.cpp \
- g_humandate.cpp \
- g_lfpfunc.cpp \
- g_lfptostr.cpp \
- g_modetoa.cpp \
- g_msyslog.cpp \
- g_netof.cpp \
- g_numtoa.cpp \
- g_numtohost.cpp \
- g_octtoint.cpp \
- g_prettydate.cpp \
- g_recvbuff.cpp \
- g_refnumtoa.cpp \
- g_sfptostr.cpp \
- g_socktoa.cpp \
- g_ssl_init.cpp \
- g_statestr.cpp \
- g_strtolfp.cpp \
- g_timespecops.cpp \
- g_timestructs.cpp \
- g_timevalops.cpp \
- g_tstotv.cpp \
- g_tvtots.cpp \
- g_uglydate.cpp \
- g_vi64ops.cpp \
- g_ymd2yd.cpp \
- $(NULL)
-
noinst_HEADERS = \
- g_lfptest.h \
lfptest.h \
- g_libntptest.h \
- g_sockaddrtest.h \
sockaddrtest.h \
- g_timestructs.h \
test-libntp.h \
$(NULL)
###
-test_a_md5encrypt_CFLAGS = \
- -I$(top_srcdir)/sntp/unity \
- $(NULL)
-
-test_a_md5encrypt_LDADD = \
- $(unity_tests_LDADD) \
- $(NULL)
-
test_a_md5encrypt_SOURCES = \
- a_md5encrypt.c \
- run-a_md5encrypt.c \
+ a_md5encrypt.c \
+ run-a_md5encrypt.c \
$(NULL)
###
-test_atoint_CFLAGS = \
- -I$(top_srcdir)/sntp/unity \
- $(NULL)
-
-test_atoint_LDADD = \
- $(unity_tests_LDADD) \
- $(NULL)
-
test_atoint_SOURCES = \
- atoint.c \
- run-atoint.c \
+ atoint.c \
+ run-atoint.c \
$(NULL)
###
-test_atouint_CFLAGS = \
- -I$(top_srcdir)/sntp/unity \
- $(NULL)
-
-test_atouint_LDADD = \
- $(unity_tests_LDADD) \
- $(NULL)
-
test_atouint_SOURCES = \
- atouint.c \
- run-atouint.c \
+ atouint.c \
+ run-atouint.c \
$(NULL)
###
-test_authkeys_CFLAGS = \
- -I$(top_srcdir)/sntp/unity \
- $(NULL)
-
-test_authkeys_LDADD = \
- $(unity_tests_LDADD) \
- $(NULL)
-
test_authkeys_SOURCES = \
- authkeys.c \
- run-authkeys.c \
+ authkeys.c \
+ run-authkeys.c \
$(NULL)
###
-test_buftvtots_LDADD = \
- $(unity_tests_LDADD) \
- $(NULL)
-
test_buftvtots_SOURCES = \
- buftvtots.c \
- run-buftvtots.c \
- $(NULL)
-
-test_buftvtots_CFLAGS = \
- -I$(top_srcdir)/sntp/unity \
- -DUNITY_INCLUDE_DOUBLE \
+ buftvtots.c \
+ run-buftvtots.c \
+ lfptest.c \
$(NULL)
###
-test_calendar_CFLAGS = \
- -I$(top_srcdir)/sntp/unity \
- $(NULL)
-
-test_calendar_LDADD = \
- $(unity_tests_LDADD) \
- $(NULL)
-
test_calendar_SOURCES = \
- calendar.c \
- run-calendar.c \
- test-libntp.c \
+ calendar.c \
+ run-calendar.c \
+ test-libntp.c \
$(NULL)
###
test_caltontp_CFLAGS = \
- -I$(top_srcdir)/sntp/unity \
- $(NULL)
-
-test_caltontp_LDADD = \
- $(unity_tests_LDADD) \
- -lpthread \
+ $(CFLAGS_LIBEVENT) \
+ $(AM_CFLAGS) \
$(NULL)
test_caltontp_SOURCES = \
- caltontp.c \
- run-caltontp.c \
+ caltontp.c \
+ run-caltontp.c \
$(NULL)
###
test_caljulian_CFLAGS = \
- -I$(top_srcdir)/sntp/unity \
- $(NULL)
-
-test_caljulian_LDADD = \
- $(unity_tests_LDADD) \
- -lpthread \
+ $(CFLAGS_LIBEVENT) \
+ $(AM_CFLAGS) \
$(NULL)
test_caljulian_SOURCES = \
- caljulian.c \
- run-caljulian.c \
- test-libntp.c \
+ caljulian.c \
+ run-caljulian.c \
+ test-libntp.c \
$(NULL)
###
-test_calyearstart_CFLAGS = \
- -I$(top_srcdir)/sntp/unity \
- $(NULL)
-
-test_calyearstart_LDADD = \
- $(unity_tests_LDADD) \
- $(NULL)
-
test_calyearstart_SOURCES = \
- calyearstart.c \
- run-calyearstart.c \
- test-libntp.c \
+ calyearstart.c \
+ run-calyearstart.c \
+ test-libntp.c \
$(NULL)
###
-test_clocktime_CFLAGS = \
- -I$(top_srcdir)/sntp/unity \
- $(NULL)
-
-test_clocktime_LDADD = \
- $(unity_tests_LDADD) \
- $(NULL)
-
test_clocktime_SOURCES = \
- clocktime.c \
- run-clocktime.c \
- test-libntp.c \
+ clocktime.c \
+ run-clocktime.c \
+ test-libntp.c \
$(NULL)
###
test_decodenetnum_CFLAGS = \
- -I$(top_srcdir)/sntp/unity \
- $(NULL)
-
-test_decodenetnum_LDADD = \
- $(unity_tests_LDADD) \
- -lpthread \
+ $(CFLAGS_LIBEVENT) \
+ $(AM_CFLAGS) \
$(NULL)
test_decodenetnum_SOURCES = \
- decodenetnum.c \
- run-decodenetnum.c \
+ decodenetnum.c \
+ run-decodenetnum.c \
+ sockaddrtest.c \
$(NULL)
###
-test_hextoint_CFLAGS = \
- -I$(top_srcdir)/sntp/unity \
- $(NULL)
-
-test_hextoint_LDADD = \
- $(unity_tests_LDADD) \
- $(NULL)
-
test_hextoint_SOURCES = \
- hextoint.c \
- run-hextoint.c \
+ hextoint.c \
+ run-hextoint.c \
$(NULL)
###
-test_hextolfp_CFLAGS = \
- -I$(top_srcdir)/sntp/unity \
- $(NULL)
-
-test_hextolfp_LDADD = \
- $(unity_tests_LDADD) \
- $(NULL)
-
test_hextolfp_SOURCES = \
- hextolfp.c \
- run-hextolfp.c \
+ hextolfp.c \
+ run-hextolfp.c \
+ lfptest.c \
$(NULL)
###
-test_humandate_CFLAGS = \
- -I$(top_srcdir)/sntp/unity \
- $(NULL)
-
-test_humandate_LDADD = \
- $(unity_tests_LDADD) \
- $(NULL)
-
test_humandate_SOURCES = \
- humandate.c \
- run-humandate.c \
+ humandate.c \
+ run-humandate.c \
$(NULL)
###
-test_lfpfunc_CFLAGS = \
- -I$(top_srcdir)/sntp/unity \
- -DUNITY_INCLUDE_DOUBLE \
- $(NULL)
-
-test_lfpfunc_LDADD = \
- $(unity_tests_LDADD) \
- $(NULL)
-
test_lfpfunc_SOURCES = \
- lfpfunc.c \
- run-lfpfunc.c \
+ lfpfunc.c \
+ run-lfpfunc.c \
$(NULL)
###
-test_lfptostr_CFLAGS = \
- -I$(top_srcdir)/sntp/unity \
- $(NULL)
-
-test_lfptostr_LDADD = \
- $(unity_tests_LDADD) \
- $(NULL)
-
test_lfptostr_SOURCES = \
- lfptostr.c \
- run-lfptostr.c \
+ lfptostr.c \
+ run-lfptostr.c \
$(NULL)
###
-test_modetoa_CFLAGS = \
- -I$(top_srcdir)/sntp/unity \
- $(NULL)
-
-test_modetoa_LDADD = \
- $(unity_tests_LDADD) \
- $(NULL)
-
test_modetoa_SOURCES = \
- modetoa.c \
- run-modetoa.c \
+ modetoa.c \
+ run-modetoa.c \
$(NULL)
###
-test_msyslog_CFLAGS = \
- -I$(top_srcdir)/sntp/unity \
- $(NULL)
-
-test_msyslog_LDADD = \
- $(unity_tests_LDADD) \
- $(NULL)
-
test_msyslog_SOURCES = \
- msyslog.c \
- run-msyslog.c \
+ msyslog.c \
+ run-msyslog.c \
$(NULL)
###
-test_netof_CFLAGS = \
- -I$(top_srcdir)/sntp/unity \
- $(NULL)
-
-test_netof_LDADD = \
- $(unity_tests_LDADD) \
- $(NULL)
-
test_netof_SOURCES = \
- netof.c \
- run-netof.c \
+ netof.c \
+ run-netof.c \
+ sockaddrtest.c \
$(NULL)
###
-test_numtoa_CFLAGS = \
- -I$(top_srcdir)/sntp/unity \
- $(NULL)
-
-test_numtoa_LDADD = \
- $(unity_tests_LDADD) \
- $(NULL)
-
test_numtoa_SOURCES = \
- numtoa.c \
- run-numtoa.c \
+ numtoa.c \
+ run-numtoa.c \
$(NULL)
###
-test_numtohost_CFLAGS = \
- -I$(top_srcdir)/sntp/unity \
- $(NULL)
-
-test_numtohost_LDADD = \
- $(unity_tests_LDADD) \
- $(NULL)
-
test_numtohost_SOURCES = \
- numtohost.c \
- run-numtohost.c \
+ numtohost.c \
+ run-numtohost.c \
$(NULL)
###
-test_octtoint_CFLAGS = \
- -I$(top_srcdir)/sntp/unity \
- $(NULL)
-
-test_octtoint_LDADD = \
- $(unity_tests_LDADD) \
- $(NULL)
-
test_octtoint_SOURCES = \
- octtoint.c \
- run-octtoint.c \
+ octtoint.c \
+ run-octtoint.c \
$(NULL)
###
-test_prettydate_CFLAGS = \
- -I$(top_srcdir)/sntp/unity \
- $(NULL)
-
-test_prettydate_LDADD = \
- $(unity_tests_LDADD) \
- $(NULL)
-
test_prettydate_SOURCES = \
- prettydate.c \
- run-prettydate.c \
+ prettydate.c \
+ run-prettydate.c \
$(NULL)
###
-test_recvbuff_CFLAGS = \
- -I$(top_srcdir)/sntp/unity \
- $(NULL)
-
-test_recvbuff_LDADD = \
- $(unity_tests_LDADD) \
- $(NULL)
-
test_recvbuff_SOURCES = \
- recvbuff.c \
- run-recvbuff.c \
+ recvbuff.c \
+ run-recvbuff.c \
$(NULL)
###
-test_refidsmear_CFLAGS = \
- -I$(top_srcdir)/sntp/unity \
- $(NULL)
-
-test_refidsmear_LDADD = \
- $(unity_tests_LDADD) \
- $(NULL)
-
test_refidsmear_SOURCES = \
- refidsmear.c \
- run-refidsmear.c \
+ refidsmear.c \
+ run-refidsmear.c \
$(NULL)
###
-test_refnumtoa_CFLAGS = \
- -I$(top_srcdir)/sntp/unity \
- $(NULL)
-
-test_refnumtoa_LDADD = \
- $(unity_tests_LDADD) \
- $(NULL)
-
test_refnumtoa_SOURCES = \
- refnumtoa.c \
- run-refnumtoa.c \
+ refnumtoa.c \
+ run-refnumtoa.c \
$(NULL)
###
-test_sfptostr_CFLAGS = \
- -I$(top_srcdir)/sntp/unity \
- -DUNITY_INCLUDE_DOUBLE \
- $(NULL)
-
-test_sfptostr_LDADD = \
- $(unity_tests_LDADD) \
- $(NULL)
-
test_sfptostr_SOURCES = \
- sfptostr.c \
- run-sfptostr.c \
+ sfptostr.c \
+ run-sfptostr.c \
$(NULL)
###
-test_socktoa_CFLAGS = \
- -I$(top_srcdir)/sntp/unity \
- $(NULL)
-
-test_socktoa_LDADD = \
- $(unity_tests_LDADD) \
- $(NULL)
-
test_socktoa_SOURCES = \
- socktoa.c \
- run-socktoa.c \
+ socktoa.c \
+ run-socktoa.c \
+ sockaddrtest.c \
$(NULL)
###
-test_ssl_init_CFLAGS = \
- -I$(top_srcdir)/sntp/unity \
- $(NULL)
-
-test_ssl_init_LDADD = \
- $(unity_tests_LDADD) \
- $(NULL)
-
test_ssl_init_SOURCES = \
- ssl_init.c \
- run-ssl_init.c \
+ ssl_init.c \
+ run-ssl_init.c \
$(NULL)
###
-test_statestr_CFLAGS = \
- -I$(top_srcdir)/sntp/unity \
- $(NULL)
-
-test_statestr_LDADD = \
- $(unity_tests_LDADD) \
- $(NULL)
-
test_statestr_SOURCES = \
- statestr.c \
- run-statestr.c \
+ statestr.c \
+ run-statestr.c \
$(NULL)
###
test_strtolfp_CFLAGS = \
- -I$(top_srcdir)/sntp/unity \
- $(NULL)
-
-test_strtolfp_LDADD = \
- $(unity_tests_LDADD) \
- -lpthread \
+ $(CFLAGS_LIBEVENT) \
+ $(AM_CFLAGS) \
$(NULL)
test_strtolfp_SOURCES = \
- strtolfp.c \
- run-strtolfp.c \
+ strtolfp.c \
+ run-strtolfp.c \
+ lfptest.c \
$(NULL)
###
-test_timespecops_CFLAGS = \
- -I$(top_srcdir)/sntp/unity \
- $(NULL)
-
-test_timespecops_LDADD = \
- $(unity_tests_LDADD) \
- $(NULL)
-
test_timespecops_SOURCES = \
- timespecops.c \
- run-timespecops.c \
+ timespecops.c \
+ run-timespecops.c \
$(NULL)
###
-test_timevalops_CFLAGS = \
- -I$(top_srcdir)/sntp/unity \
- $(NULL)
-
-test_timevalops_LDADD = \
- $(unity_tests_LDADD) \
- $(NULL)
-
test_timevalops_SOURCES = \
- timevalops.c \
- run-timevalops.c \
+ timevalops.c \
+ run-timevalops.c \
$(NULL)
###
-test_tstotv_CFLAGS = \
- -I$(top_srcdir)/sntp/unity \
- $(NULL)
-
-test_tstotv_LDADD = \
- $(unity_tests_LDADD) \
- $(NULL)
-
test_tstotv_SOURCES = \
- tstotv.c \
- run-tstotv.c \
+ tstotv.c \
+ run-tstotv.c \
$(NULL)
###
-test_tvtots_CFLAGS = \
- -I$(top_srcdir)/sntp/unity \
- -DUNITY_INCLUDE_DOUBLE \
- $(NULL)
-
-test_tvtots_LDADD = \
- $(unity_tests_LDADD) \
- $(NULL)
-
test_tvtots_SOURCES = \
- tvtots.c \
- run-tvtots.c \
+ tvtots.c \
+ run-tvtots.c \
+ lfptest.c \
$(NULL)
###
-test_uglydate_CFLAGS = \
- -I$(top_srcdir)/sntp/unity \
- $(NULL)
-
-test_uglydate_LDADD = \
- $(unity_tests_LDADD) \
- $(NULL)
-
test_uglydate_SOURCES = \
- uglydate.c \
- run-uglydate.c \
+ uglydate.c \
+ run-uglydate.c \
$(NULL)
###
-test_vi64ops_CFLAGS = \
- -I$(top_srcdir)/sntp/unity \
- $(NULL)
-
-test_vi64ops_LDADD = \
- $(unity_tests_LDADD) \
- $(NULL)
-
test_vi64ops_SOURCES = \
- vi64ops.c \
- run-vi64ops.c \
+ vi64ops.c \
+ run-vi64ops.c \
$(NULL)
###
-test_ymd2yd_CFLAGS = \
- -I$(top_srcdir)/sntp/unity \
- $(NULL)
-
-test_ymd2yd_LDADD = \
- $(unity_tests_LDADD) \
- $(NULL)
-
test_ymd2yd_SOURCES = \
- ymd2yd.c \
- run-ymd2yd.c \
+ ymd2yd.c \
+ run-ymd2yd.c \
$(NULL)
###
-TESTS = $(am__append_2)
+TESTS = $(am__append_1)
NTP_INCS = -I$(top_srcdir)/include -I$(top_srcdir)/lib/isc/include \
-I$(top_srcdir)/lib/isc/$(LIBISC_PTHREADS_NOTHREADS)/include \
-I$(top_srcdir)/lib/isc/unix/include
@@ -1793,7 +1413,7 @@ all: $(BUILT_SOURCES)
$(MAKE) $(AM_MAKEFLAGS) all-am
.SUFFIXES:
-.SUFFIXES: .c .cpp .lo .log .o .obj .test .test$(EXEEXT) .trs
+.SUFFIXES: .c .lo .log .o .obj .test .test$(EXEEXT) .trs
$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/depsver.mf $(top_srcdir)/includes.mf $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
@@ -1836,27 +1456,27 @@ clean-checkPROGRAMS:
test-a_md5encrypt$(EXEEXT): $(test_a_md5encrypt_OBJECTS) $(test_a_md5encrypt_DEPENDENCIES) $(EXTRA_test_a_md5encrypt_DEPENDENCIES)
@rm -f test-a_md5encrypt$(EXEEXT)
- $(AM_V_CCLD)$(test_a_md5encrypt_LINK) $(test_a_md5encrypt_OBJECTS) $(test_a_md5encrypt_LDADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(test_a_md5encrypt_OBJECTS) $(test_a_md5encrypt_LDADD) $(LIBS)
test-atoint$(EXEEXT): $(test_atoint_OBJECTS) $(test_atoint_DEPENDENCIES) $(EXTRA_test_atoint_DEPENDENCIES)
@rm -f test-atoint$(EXEEXT)
- $(AM_V_CCLD)$(test_atoint_LINK) $(test_atoint_OBJECTS) $(test_atoint_LDADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(test_atoint_OBJECTS) $(test_atoint_LDADD) $(LIBS)
test-atouint$(EXEEXT): $(test_atouint_OBJECTS) $(test_atouint_DEPENDENCIES) $(EXTRA_test_atouint_DEPENDENCIES)
@rm -f test-atouint$(EXEEXT)
- $(AM_V_CCLD)$(test_atouint_LINK) $(test_atouint_OBJECTS) $(test_atouint_LDADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(test_atouint_OBJECTS) $(test_atouint_LDADD) $(LIBS)
test-authkeys$(EXEEXT): $(test_authkeys_OBJECTS) $(test_authkeys_DEPENDENCIES) $(EXTRA_test_authkeys_DEPENDENCIES)
@rm -f test-authkeys$(EXEEXT)
- $(AM_V_CCLD)$(test_authkeys_LINK) $(test_authkeys_OBJECTS) $(test_authkeys_LDADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(test_authkeys_OBJECTS) $(test_authkeys_LDADD) $(LIBS)
test-buftvtots$(EXEEXT): $(test_buftvtots_OBJECTS) $(test_buftvtots_DEPENDENCIES) $(EXTRA_test_buftvtots_DEPENDENCIES)
@rm -f test-buftvtots$(EXEEXT)
- $(AM_V_CCLD)$(test_buftvtots_LINK) $(test_buftvtots_OBJECTS) $(test_buftvtots_LDADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(test_buftvtots_OBJECTS) $(test_buftvtots_LDADD) $(LIBS)
test-calendar$(EXEEXT): $(test_calendar_OBJECTS) $(test_calendar_DEPENDENCIES) $(EXTRA_test_calendar_DEPENDENCIES)
@rm -f test-calendar$(EXEEXT)
- $(AM_V_CCLD)$(test_calendar_LINK) $(test_calendar_OBJECTS) $(test_calendar_LDADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(test_calendar_OBJECTS) $(test_calendar_LDADD) $(LIBS)
test-caljulian$(EXEEXT): $(test_caljulian_OBJECTS) $(test_caljulian_DEPENDENCIES) $(EXTRA_test_caljulian_DEPENDENCIES)
@rm -f test-caljulian$(EXEEXT)
@@ -1868,11 +1488,11 @@ test-caltontp$(EXEEXT): $(test_caltontp_OBJECTS) $(test_caltontp_DEPENDENCIES) $
test-calyearstart$(EXEEXT): $(test_calyearstart_OBJECTS) $(test_calyearstart_DEPENDENCIES) $(EXTRA_test_calyearstart_DEPENDENCIES)
@rm -f test-calyearstart$(EXEEXT)
- $(AM_V_CCLD)$(test_calyearstart_LINK) $(test_calyearstart_OBJECTS) $(test_calyearstart_LDADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(test_calyearstart_OBJECTS) $(test_calyearstart_LDADD) $(LIBS)
test-clocktime$(EXEEXT): $(test_clocktime_OBJECTS) $(test_clocktime_DEPENDENCIES) $(EXTRA_test_clocktime_DEPENDENCIES)
@rm -f test-clocktime$(EXEEXT)
- $(AM_V_CCLD)$(test_clocktime_LINK) $(test_clocktime_OBJECTS) $(test_clocktime_LDADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(test_clocktime_OBJECTS) $(test_clocktime_LDADD) $(LIBS)
test-decodenetnum$(EXEEXT): $(test_decodenetnum_OBJECTS) $(test_decodenetnum_DEPENDENCIES) $(EXTRA_test_decodenetnum_DEPENDENCIES)
@rm -f test-decodenetnum$(EXEEXT)
@@ -1880,79 +1500,79 @@ test-decodenetnum$(EXEEXT): $(test_decodenetnum_OBJECTS) $(test_decodenetnum_DEP
test-hextoint$(EXEEXT): $(test_hextoint_OBJECTS) $(test_hextoint_DEPENDENCIES) $(EXTRA_test_hextoint_DEPENDENCIES)
@rm -f test-hextoint$(EXEEXT)
- $(AM_V_CCLD)$(test_hextoint_LINK) $(test_hextoint_OBJECTS) $(test_hextoint_LDADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(test_hextoint_OBJECTS) $(test_hextoint_LDADD) $(LIBS)
test-hextolfp$(EXEEXT): $(test_hextolfp_OBJECTS) $(test_hextolfp_DEPENDENCIES) $(EXTRA_test_hextolfp_DEPENDENCIES)
@rm -f test-hextolfp$(EXEEXT)
- $(AM_V_CCLD)$(test_hextolfp_LINK) $(test_hextolfp_OBJECTS) $(test_hextolfp_LDADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(test_hextolfp_OBJECTS) $(test_hextolfp_LDADD) $(LIBS)
test-humandate$(EXEEXT): $(test_humandate_OBJECTS) $(test_humandate_DEPENDENCIES) $(EXTRA_test_humandate_DEPENDENCIES)
@rm -f test-humandate$(EXEEXT)
- $(AM_V_CCLD)$(test_humandate_LINK) $(test_humandate_OBJECTS) $(test_humandate_LDADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(test_humandate_OBJECTS) $(test_humandate_LDADD) $(LIBS)
test-lfpfunc$(EXEEXT): $(test_lfpfunc_OBJECTS) $(test_lfpfunc_DEPENDENCIES) $(EXTRA_test_lfpfunc_DEPENDENCIES)
@rm -f test-lfpfunc$(EXEEXT)
- $(AM_V_CCLD)$(test_lfpfunc_LINK) $(test_lfpfunc_OBJECTS) $(test_lfpfunc_LDADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(test_lfpfunc_OBJECTS) $(test_lfpfunc_LDADD) $(LIBS)
test-lfptostr$(EXEEXT): $(test_lfptostr_OBJECTS) $(test_lfptostr_DEPENDENCIES) $(EXTRA_test_lfptostr_DEPENDENCIES)
@rm -f test-lfptostr$(EXEEXT)
- $(AM_V_CCLD)$(test_lfptostr_LINK) $(test_lfptostr_OBJECTS) $(test_lfptostr_LDADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(test_lfptostr_OBJECTS) $(test_lfptostr_LDADD) $(LIBS)
test-modetoa$(EXEEXT): $(test_modetoa_OBJECTS) $(test_modetoa_DEPENDENCIES) $(EXTRA_test_modetoa_DEPENDENCIES)
@rm -f test-modetoa$(EXEEXT)
- $(AM_V_CCLD)$(test_modetoa_LINK) $(test_modetoa_OBJECTS) $(test_modetoa_LDADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(test_modetoa_OBJECTS) $(test_modetoa_LDADD) $(LIBS)
test-msyslog$(EXEEXT): $(test_msyslog_OBJECTS) $(test_msyslog_DEPENDENCIES) $(EXTRA_test_msyslog_DEPENDENCIES)
@rm -f test-msyslog$(EXEEXT)
- $(AM_V_CCLD)$(test_msyslog_LINK) $(test_msyslog_OBJECTS) $(test_msyslog_LDADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(test_msyslog_OBJECTS) $(test_msyslog_LDADD) $(LIBS)
test-netof$(EXEEXT): $(test_netof_OBJECTS) $(test_netof_DEPENDENCIES) $(EXTRA_test_netof_DEPENDENCIES)
@rm -f test-netof$(EXEEXT)
- $(AM_V_CCLD)$(test_netof_LINK) $(test_netof_OBJECTS) $(test_netof_LDADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(test_netof_OBJECTS) $(test_netof_LDADD) $(LIBS)
test-numtoa$(EXEEXT): $(test_numtoa_OBJECTS) $(test_numtoa_DEPENDENCIES) $(EXTRA_test_numtoa_DEPENDENCIES)
@rm -f test-numtoa$(EXEEXT)
- $(AM_V_CCLD)$(test_numtoa_LINK) $(test_numtoa_OBJECTS) $(test_numtoa_LDADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(test_numtoa_OBJECTS) $(test_numtoa_LDADD) $(LIBS)
test-numtohost$(EXEEXT): $(test_numtohost_OBJECTS) $(test_numtohost_DEPENDENCIES) $(EXTRA_test_numtohost_DEPENDENCIES)
@rm -f test-numtohost$(EXEEXT)
- $(AM_V_CCLD)$(test_numtohost_LINK) $(test_numtohost_OBJECTS) $(test_numtohost_LDADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(test_numtohost_OBJECTS) $(test_numtohost_LDADD) $(LIBS)
test-octtoint$(EXEEXT): $(test_octtoint_OBJECTS) $(test_octtoint_DEPENDENCIES) $(EXTRA_test_octtoint_DEPENDENCIES)
@rm -f test-octtoint$(EXEEXT)
- $(AM_V_CCLD)$(test_octtoint_LINK) $(test_octtoint_OBJECTS) $(test_octtoint_LDADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(test_octtoint_OBJECTS) $(test_octtoint_LDADD) $(LIBS)
test-prettydate$(EXEEXT): $(test_prettydate_OBJECTS) $(test_prettydate_DEPENDENCIES) $(EXTRA_test_prettydate_DEPENDENCIES)
@rm -f test-prettydate$(EXEEXT)
- $(AM_V_CCLD)$(test_prettydate_LINK) $(test_prettydate_OBJECTS) $(test_prettydate_LDADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(test_prettydate_OBJECTS) $(test_prettydate_LDADD) $(LIBS)
test-recvbuff$(EXEEXT): $(test_recvbuff_OBJECTS) $(test_recvbuff_DEPENDENCIES) $(EXTRA_test_recvbuff_DEPENDENCIES)
@rm -f test-recvbuff$(EXEEXT)
- $(AM_V_CCLD)$(test_recvbuff_LINK) $(test_recvbuff_OBJECTS) $(test_recvbuff_LDADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(test_recvbuff_OBJECTS) $(test_recvbuff_LDADD) $(LIBS)
test-refidsmear$(EXEEXT): $(test_refidsmear_OBJECTS) $(test_refidsmear_DEPENDENCIES) $(EXTRA_test_refidsmear_DEPENDENCIES)
@rm -f test-refidsmear$(EXEEXT)
- $(AM_V_CCLD)$(test_refidsmear_LINK) $(test_refidsmear_OBJECTS) $(test_refidsmear_LDADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(test_refidsmear_OBJECTS) $(test_refidsmear_LDADD) $(LIBS)
test-refnumtoa$(EXEEXT): $(test_refnumtoa_OBJECTS) $(test_refnumtoa_DEPENDENCIES) $(EXTRA_test_refnumtoa_DEPENDENCIES)
@rm -f test-refnumtoa$(EXEEXT)
- $(AM_V_CCLD)$(test_refnumtoa_LINK) $(test_refnumtoa_OBJECTS) $(test_refnumtoa_LDADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(test_refnumtoa_OBJECTS) $(test_refnumtoa_LDADD) $(LIBS)
test-sfptostr$(EXEEXT): $(test_sfptostr_OBJECTS) $(test_sfptostr_DEPENDENCIES) $(EXTRA_test_sfptostr_DEPENDENCIES)
@rm -f test-sfptostr$(EXEEXT)
- $(AM_V_CCLD)$(test_sfptostr_LINK) $(test_sfptostr_OBJECTS) $(test_sfptostr_LDADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(test_sfptostr_OBJECTS) $(test_sfptostr_LDADD) $(LIBS)
test-socktoa$(EXEEXT): $(test_socktoa_OBJECTS) $(test_socktoa_DEPENDENCIES) $(EXTRA_test_socktoa_DEPENDENCIES)
@rm -f test-socktoa$(EXEEXT)
- $(AM_V_CCLD)$(test_socktoa_LINK) $(test_socktoa_OBJECTS) $(test_socktoa_LDADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(test_socktoa_OBJECTS) $(test_socktoa_LDADD) $(LIBS)
test-ssl_init$(EXEEXT): $(test_ssl_init_OBJECTS) $(test_ssl_init_DEPENDENCIES) $(EXTRA_test_ssl_init_DEPENDENCIES)
@rm -f test-ssl_init$(EXEEXT)
- $(AM_V_CCLD)$(test_ssl_init_LINK) $(test_ssl_init_OBJECTS) $(test_ssl_init_LDADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(test_ssl_init_OBJECTS) $(test_ssl_init_LDADD) $(LIBS)
test-statestr$(EXEEXT): $(test_statestr_OBJECTS) $(test_statestr_DEPENDENCIES) $(EXTRA_test_statestr_DEPENDENCIES)
@rm -f test-statestr$(EXEEXT)
- $(AM_V_CCLD)$(test_statestr_LINK) $(test_statestr_OBJECTS) $(test_statestr_LDADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(test_statestr_OBJECTS) $(test_statestr_LDADD) $(LIBS)
test-strtolfp$(EXEEXT): $(test_strtolfp_OBJECTS) $(test_strtolfp_DEPENDENCIES) $(EXTRA_test_strtolfp_DEPENDENCIES)
@rm -f test-strtolfp$(EXEEXT)
@@ -1960,35 +1580,31 @@ test-strtolfp$(EXEEXT): $(test_strtolfp_OBJECTS) $(test_strtolfp_DEPENDENCIES) $
test-timespecops$(EXEEXT): $(test_timespecops_OBJECTS) $(test_timespecops_DEPENDENCIES) $(EXTRA_test_timespecops_DEPENDENCIES)
@rm -f test-timespecops$(EXEEXT)
- $(AM_V_CCLD)$(test_timespecops_LINK) $(test_timespecops_OBJECTS) $(test_timespecops_LDADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(test_timespecops_OBJECTS) $(test_timespecops_LDADD) $(LIBS)
test-timevalops$(EXEEXT): $(test_timevalops_OBJECTS) $(test_timevalops_DEPENDENCIES) $(EXTRA_test_timevalops_DEPENDENCIES)
@rm -f test-timevalops$(EXEEXT)
- $(AM_V_CCLD)$(test_timevalops_LINK) $(test_timevalops_OBJECTS) $(test_timevalops_LDADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(test_timevalops_OBJECTS) $(test_timevalops_LDADD) $(LIBS)
test-tstotv$(EXEEXT): $(test_tstotv_OBJECTS) $(test_tstotv_DEPENDENCIES) $(EXTRA_test_tstotv_DEPENDENCIES)
@rm -f test-tstotv$(EXEEXT)
- $(AM_V_CCLD)$(test_tstotv_LINK) $(test_tstotv_OBJECTS) $(test_tstotv_LDADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(test_tstotv_OBJECTS) $(test_tstotv_LDADD) $(LIBS)
test-tvtots$(EXEEXT): $(test_tvtots_OBJECTS) $(test_tvtots_DEPENDENCIES) $(EXTRA_test_tvtots_DEPENDENCIES)
@rm -f test-tvtots$(EXEEXT)
- $(AM_V_CCLD)$(test_tvtots_LINK) $(test_tvtots_OBJECTS) $(test_tvtots_LDADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(test_tvtots_OBJECTS) $(test_tvtots_LDADD) $(LIBS)
test-uglydate$(EXEEXT): $(test_uglydate_OBJECTS) $(test_uglydate_DEPENDENCIES) $(EXTRA_test_uglydate_DEPENDENCIES)
@rm -f test-uglydate$(EXEEXT)
- $(AM_V_CCLD)$(test_uglydate_LINK) $(test_uglydate_OBJECTS) $(test_uglydate_LDADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(test_uglydate_OBJECTS) $(test_uglydate_LDADD) $(LIBS)
test-vi64ops$(EXEEXT): $(test_vi64ops_OBJECTS) $(test_vi64ops_DEPENDENCIES) $(EXTRA_test_vi64ops_DEPENDENCIES)
@rm -f test-vi64ops$(EXEEXT)
- $(AM_V_CCLD)$(test_vi64ops_LINK) $(test_vi64ops_OBJECTS) $(test_vi64ops_LDADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(test_vi64ops_OBJECTS) $(test_vi64ops_LDADD) $(LIBS)
test-ymd2yd$(EXEEXT): $(test_ymd2yd_OBJECTS) $(test_ymd2yd_DEPENDENCIES) $(EXTRA_test_ymd2yd_DEPENDENCIES)
@rm -f test-ymd2yd$(EXEEXT)
- $(AM_V_CCLD)$(test_ymd2yd_LINK) $(test_ymd2yd_OBJECTS) $(test_ymd2yd_LDADD) $(LIBS)
-
-tests$(EXEEXT): $(tests_OBJECTS) $(tests_DEPENDENCIES) $(EXTRA_tests_DEPENDENCIES)
- @rm -f tests$(EXEEXT)
- $(AM_V_CXXLD)$(CXXLINK) $(tests_OBJECTS) $(tests_LDADD) $(LIBS)
+ $(AM_V_CCLD)$(LINK) $(test_ymd2yd_OBJECTS) $(test_ymd2yd_LDADD) $(LIBS)
mostlyclean-compile:
-rm -f *.$(OBJEXT)
@@ -1996,126 +1612,88 @@ mostlyclean-compile:
distclean-compile:
-rm -f *.tab.c
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/g_a_md5encrypt.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/g_atoint.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/g_atouint.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/g_authkeys.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/g_buftvtots.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/g_calendar.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/g_caljulian.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/g_caltontp.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/g_calyearstart.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/g_clocktime.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/g_decodenetnum.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/g_hextoint.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/g_hextolfp.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/g_humandate.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/g_lfpfunc.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/g_lfptostr.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/g_libntptest.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/g_modetoa.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/g_msyslog.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/g_netof.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/g_numtoa.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/g_numtohost.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/g_octtoint.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/g_prettydate.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/g_recvbuff.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/g_refnumtoa.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/g_sfptostr.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/g_socktoa.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/g_ssl_init.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/g_statestr.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/g_strtolfp.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/g_timespecops.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/g_timestructs.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/g_timevalops.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/g_tstotv.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/g_tvtots.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/g_uglydate.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/g_vi64ops.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/g_ymd2yd.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_a_md5encrypt-a_md5encrypt.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_a_md5encrypt-run-a_md5encrypt.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_atoint-atoint.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_atoint-run-atoint.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_atouint-atouint.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_atouint-run-atouint.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_authkeys-authkeys.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_authkeys-run-authkeys.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_buftvtots-buftvtots.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_buftvtots-run-buftvtots.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_calendar-calendar.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_calendar-run-calendar.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_calendar-test-libntp.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/a_md5encrypt.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/atoint.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/atouint.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/authkeys.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/buftvtots.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/calendar.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/calyearstart.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/clocktime.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hextoint.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hextolfp.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/humandate.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lfpfunc.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lfptest.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/lfptostr.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/modetoa.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/msyslog.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/netof.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/numtoa.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/numtohost.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/octtoint.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/prettydate.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/recvbuff.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/refidsmear.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/refnumtoa.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/run-a_md5encrypt.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/run-atoint.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/run-atouint.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/run-authkeys.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/run-buftvtots.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/run-calendar.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/run-calyearstart.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/run-clocktime.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/run-hextoint.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/run-hextolfp.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/run-humandate.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/run-lfpfunc.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/run-lfptostr.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/run-modetoa.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/run-msyslog.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/run-netof.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/run-numtoa.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/run-numtohost.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/run-octtoint.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/run-prettydate.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/run-recvbuff.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/run-refidsmear.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/run-refnumtoa.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/run-sfptostr.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/run-socktoa.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/run-ssl_init.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/run-statestr.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/run-timespecops.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/run-timevalops.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/run-tstotv.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/run-tvtots.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/run-uglydate.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/run-vi64ops.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/run-ymd2yd.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sfptostr.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sockaddrtest.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/socktoa.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ssl_init.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/statestr.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-libntp.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_caljulian-caljulian.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_caljulian-run-caljulian.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_caljulian-test-libntp.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_caltontp-caltontp.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_caltontp-run-caltontp.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_calyearstart-calyearstart.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_calyearstart-run-calyearstart.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_calyearstart-test-libntp.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_clocktime-clocktime.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_clocktime-run-clocktime.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_clocktime-test-libntp.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_decodenetnum-decodenetnum.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_decodenetnum-run-decodenetnum.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_hextoint-hextoint.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_hextoint-run-hextoint.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_hextolfp-hextolfp.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_hextolfp-run-hextolfp.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_humandate-humandate.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_humandate-run-humandate.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_lfpfunc-lfpfunc.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_lfpfunc-run-lfpfunc.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_lfptostr-lfptostr.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_lfptostr-run-lfptostr.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_modetoa-modetoa.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_modetoa-run-modetoa.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_msyslog-msyslog.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_msyslog-run-msyslog.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_netof-netof.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_netof-run-netof.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_numtoa-numtoa.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_numtoa-run-numtoa.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_numtohost-numtohost.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_numtohost-run-numtohost.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_octtoint-octtoint.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_octtoint-run-octtoint.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_prettydate-prettydate.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_prettydate-run-prettydate.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_recvbuff-recvbuff.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_recvbuff-run-recvbuff.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_refidsmear-refidsmear.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_refidsmear-run-refidsmear.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_refnumtoa-refnumtoa.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_refnumtoa-run-refnumtoa.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_sfptostr-run-sfptostr.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_sfptostr-sfptostr.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_socktoa-run-socktoa.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_socktoa-socktoa.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_ssl_init-run-ssl_init.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_ssl_init-ssl_init.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_statestr-run-statestr.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_statestr-statestr.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_decodenetnum-sockaddrtest.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_strtolfp-lfptest.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_strtolfp-run-strtolfp.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_strtolfp-strtolfp.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_timespecops-run-timespecops.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_timespecops-timespecops.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_timevalops-run-timevalops.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_timevalops-timevalops.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_tstotv-run-tstotv.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_tstotv-tstotv.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_tvtots-run-tvtots.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_tvtots-tvtots.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_uglydate-run-uglydate.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_uglydate-uglydate.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_vi64ops-run-vi64ops.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_vi64ops-vi64ops.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_ymd2yd-run-ymd2yd.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_ymd2yd-ymd2yd.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tests_main.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/timespecops.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/timevalops.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tstotv.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tvtots.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/uglydate.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vi64ops.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ymd2yd.Po@am__quote@
.c.o:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@@ -2138,188 +1716,6 @@ distclean-compile:
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
-test_a_md5encrypt-a_md5encrypt.o: a_md5encrypt.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_a_md5encrypt_CFLAGS) $(CFLAGS) -MT test_a_md5encrypt-a_md5encrypt.o -MD -MP -MF $(DEPDIR)/test_a_md5encrypt-a_md5encrypt.Tpo -c -o test_a_md5encrypt-a_md5encrypt.o `test -f 'a_md5encrypt.c' || echo '$(srcdir)/'`a_md5encrypt.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_a_md5encrypt-a_md5encrypt.Tpo $(DEPDIR)/test_a_md5encrypt-a_md5encrypt.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='a_md5encrypt.c' object='test_a_md5encrypt-a_md5encrypt.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_a_md5encrypt_CFLAGS) $(CFLAGS) -c -o test_a_md5encrypt-a_md5encrypt.o `test -f 'a_md5encrypt.c' || echo '$(srcdir)/'`a_md5encrypt.c
-
-test_a_md5encrypt-a_md5encrypt.obj: a_md5encrypt.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_a_md5encrypt_CFLAGS) $(CFLAGS) -MT test_a_md5encrypt-a_md5encrypt.obj -MD -MP -MF $(DEPDIR)/test_a_md5encrypt-a_md5encrypt.Tpo -c -o test_a_md5encrypt-a_md5encrypt.obj `if test -f 'a_md5encrypt.c'; then $(CYGPATH_W) 'a_md5encrypt.c'; else $(CYGPATH_W) '$(srcdir)/a_md5encrypt.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_a_md5encrypt-a_md5encrypt.Tpo $(DEPDIR)/test_a_md5encrypt-a_md5encrypt.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='a_md5encrypt.c' object='test_a_md5encrypt-a_md5encrypt.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_a_md5encrypt_CFLAGS) $(CFLAGS) -c -o test_a_md5encrypt-a_md5encrypt.obj `if test -f 'a_md5encrypt.c'; then $(CYGPATH_W) 'a_md5encrypt.c'; else $(CYGPATH_W) '$(srcdir)/a_md5encrypt.c'; fi`
-
-test_a_md5encrypt-run-a_md5encrypt.o: run-a_md5encrypt.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_a_md5encrypt_CFLAGS) $(CFLAGS) -MT test_a_md5encrypt-run-a_md5encrypt.o -MD -MP -MF $(DEPDIR)/test_a_md5encrypt-run-a_md5encrypt.Tpo -c -o test_a_md5encrypt-run-a_md5encrypt.o `test -f 'run-a_md5encrypt.c' || echo '$(srcdir)/'`run-a_md5encrypt.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_a_md5encrypt-run-a_md5encrypt.Tpo $(DEPDIR)/test_a_md5encrypt-run-a_md5encrypt.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='run-a_md5encrypt.c' object='test_a_md5encrypt-run-a_md5encrypt.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_a_md5encrypt_CFLAGS) $(CFLAGS) -c -o test_a_md5encrypt-run-a_md5encrypt.o `test -f 'run-a_md5encrypt.c' || echo '$(srcdir)/'`run-a_md5encrypt.c
-
-test_a_md5encrypt-run-a_md5encrypt.obj: run-a_md5encrypt.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_a_md5encrypt_CFLAGS) $(CFLAGS) -MT test_a_md5encrypt-run-a_md5encrypt.obj -MD -MP -MF $(DEPDIR)/test_a_md5encrypt-run-a_md5encrypt.Tpo -c -o test_a_md5encrypt-run-a_md5encrypt.obj `if test -f 'run-a_md5encrypt.c'; then $(CYGPATH_W) 'run-a_md5encrypt.c'; else $(CYGPATH_W) '$(srcdir)/run-a_md5encrypt.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_a_md5encrypt-run-a_md5encrypt.Tpo $(DEPDIR)/test_a_md5encrypt-run-a_md5encrypt.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='run-a_md5encrypt.c' object='test_a_md5encrypt-run-a_md5encrypt.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_a_md5encrypt_CFLAGS) $(CFLAGS) -c -o test_a_md5encrypt-run-a_md5encrypt.obj `if test -f 'run-a_md5encrypt.c'; then $(CYGPATH_W) 'run-a_md5encrypt.c'; else $(CYGPATH_W) '$(srcdir)/run-a_md5encrypt.c'; fi`
-
-test_atoint-atoint.o: atoint.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_atoint_CFLAGS) $(CFLAGS) -MT test_atoint-atoint.o -MD -MP -MF $(DEPDIR)/test_atoint-atoint.Tpo -c -o test_atoint-atoint.o `test -f 'atoint.c' || echo '$(srcdir)/'`atoint.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_atoint-atoint.Tpo $(DEPDIR)/test_atoint-atoint.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='atoint.c' object='test_atoint-atoint.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_atoint_CFLAGS) $(CFLAGS) -c -o test_atoint-atoint.o `test -f 'atoint.c' || echo '$(srcdir)/'`atoint.c
-
-test_atoint-atoint.obj: atoint.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_atoint_CFLAGS) $(CFLAGS) -MT test_atoint-atoint.obj -MD -MP -MF $(DEPDIR)/test_atoint-atoint.Tpo -c -o test_atoint-atoint.obj `if test -f 'atoint.c'; then $(CYGPATH_W) 'atoint.c'; else $(CYGPATH_W) '$(srcdir)/atoint.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_atoint-atoint.Tpo $(DEPDIR)/test_atoint-atoint.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='atoint.c' object='test_atoint-atoint.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_atoint_CFLAGS) $(CFLAGS) -c -o test_atoint-atoint.obj `if test -f 'atoint.c'; then $(CYGPATH_W) 'atoint.c'; else $(CYGPATH_W) '$(srcdir)/atoint.c'; fi`
-
-test_atoint-run-atoint.o: run-atoint.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_atoint_CFLAGS) $(CFLAGS) -MT test_atoint-run-atoint.o -MD -MP -MF $(DEPDIR)/test_atoint-run-atoint.Tpo -c -o test_atoint-run-atoint.o `test -f 'run-atoint.c' || echo '$(srcdir)/'`run-atoint.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_atoint-run-atoint.Tpo $(DEPDIR)/test_atoint-run-atoint.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='run-atoint.c' object='test_atoint-run-atoint.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_atoint_CFLAGS) $(CFLAGS) -c -o test_atoint-run-atoint.o `test -f 'run-atoint.c' || echo '$(srcdir)/'`run-atoint.c
-
-test_atoint-run-atoint.obj: run-atoint.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_atoint_CFLAGS) $(CFLAGS) -MT test_atoint-run-atoint.obj -MD -MP -MF $(DEPDIR)/test_atoint-run-atoint.Tpo -c -o test_atoint-run-atoint.obj `if test -f 'run-atoint.c'; then $(CYGPATH_W) 'run-atoint.c'; else $(CYGPATH_W) '$(srcdir)/run-atoint.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_atoint-run-atoint.Tpo $(DEPDIR)/test_atoint-run-atoint.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='run-atoint.c' object='test_atoint-run-atoint.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_atoint_CFLAGS) $(CFLAGS) -c -o test_atoint-run-atoint.obj `if test -f 'run-atoint.c'; then $(CYGPATH_W) 'run-atoint.c'; else $(CYGPATH_W) '$(srcdir)/run-atoint.c'; fi`
-
-test_atouint-atouint.o: atouint.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_atouint_CFLAGS) $(CFLAGS) -MT test_atouint-atouint.o -MD -MP -MF $(DEPDIR)/test_atouint-atouint.Tpo -c -o test_atouint-atouint.o `test -f 'atouint.c' || echo '$(srcdir)/'`atouint.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_atouint-atouint.Tpo $(DEPDIR)/test_atouint-atouint.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='atouint.c' object='test_atouint-atouint.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_atouint_CFLAGS) $(CFLAGS) -c -o test_atouint-atouint.o `test -f 'atouint.c' || echo '$(srcdir)/'`atouint.c
-
-test_atouint-atouint.obj: atouint.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_atouint_CFLAGS) $(CFLAGS) -MT test_atouint-atouint.obj -MD -MP -MF $(DEPDIR)/test_atouint-atouint.Tpo -c -o test_atouint-atouint.obj `if test -f 'atouint.c'; then $(CYGPATH_W) 'atouint.c'; else $(CYGPATH_W) '$(srcdir)/atouint.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_atouint-atouint.Tpo $(DEPDIR)/test_atouint-atouint.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='atouint.c' object='test_atouint-atouint.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_atouint_CFLAGS) $(CFLAGS) -c -o test_atouint-atouint.obj `if test -f 'atouint.c'; then $(CYGPATH_W) 'atouint.c'; else $(CYGPATH_W) '$(srcdir)/atouint.c'; fi`
-
-test_atouint-run-atouint.o: run-atouint.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_atouint_CFLAGS) $(CFLAGS) -MT test_atouint-run-atouint.o -MD -MP -MF $(DEPDIR)/test_atouint-run-atouint.Tpo -c -o test_atouint-run-atouint.o `test -f 'run-atouint.c' || echo '$(srcdir)/'`run-atouint.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_atouint-run-atouint.Tpo $(DEPDIR)/test_atouint-run-atouint.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='run-atouint.c' object='test_atouint-run-atouint.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_atouint_CFLAGS) $(CFLAGS) -c -o test_atouint-run-atouint.o `test -f 'run-atouint.c' || echo '$(srcdir)/'`run-atouint.c
-
-test_atouint-run-atouint.obj: run-atouint.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_atouint_CFLAGS) $(CFLAGS) -MT test_atouint-run-atouint.obj -MD -MP -MF $(DEPDIR)/test_atouint-run-atouint.Tpo -c -o test_atouint-run-atouint.obj `if test -f 'run-atouint.c'; then $(CYGPATH_W) 'run-atouint.c'; else $(CYGPATH_W) '$(srcdir)/run-atouint.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_atouint-run-atouint.Tpo $(DEPDIR)/test_atouint-run-atouint.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='run-atouint.c' object='test_atouint-run-atouint.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_atouint_CFLAGS) $(CFLAGS) -c -o test_atouint-run-atouint.obj `if test -f 'run-atouint.c'; then $(CYGPATH_W) 'run-atouint.c'; else $(CYGPATH_W) '$(srcdir)/run-atouint.c'; fi`
-
-test_authkeys-authkeys.o: authkeys.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_authkeys_CFLAGS) $(CFLAGS) -MT test_authkeys-authkeys.o -MD -MP -MF $(DEPDIR)/test_authkeys-authkeys.Tpo -c -o test_authkeys-authkeys.o `test -f 'authkeys.c' || echo '$(srcdir)/'`authkeys.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_authkeys-authkeys.Tpo $(DEPDIR)/test_authkeys-authkeys.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='authkeys.c' object='test_authkeys-authkeys.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_authkeys_CFLAGS) $(CFLAGS) -c -o test_authkeys-authkeys.o `test -f 'authkeys.c' || echo '$(srcdir)/'`authkeys.c
-
-test_authkeys-authkeys.obj: authkeys.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_authkeys_CFLAGS) $(CFLAGS) -MT test_authkeys-authkeys.obj -MD -MP -MF $(DEPDIR)/test_authkeys-authkeys.Tpo -c -o test_authkeys-authkeys.obj `if test -f 'authkeys.c'; then $(CYGPATH_W) 'authkeys.c'; else $(CYGPATH_W) '$(srcdir)/authkeys.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_authkeys-authkeys.Tpo $(DEPDIR)/test_authkeys-authkeys.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='authkeys.c' object='test_authkeys-authkeys.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_authkeys_CFLAGS) $(CFLAGS) -c -o test_authkeys-authkeys.obj `if test -f 'authkeys.c'; then $(CYGPATH_W) 'authkeys.c'; else $(CYGPATH_W) '$(srcdir)/authkeys.c'; fi`
-
-test_authkeys-run-authkeys.o: run-authkeys.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_authkeys_CFLAGS) $(CFLAGS) -MT test_authkeys-run-authkeys.o -MD -MP -MF $(DEPDIR)/test_authkeys-run-authkeys.Tpo -c -o test_authkeys-run-authkeys.o `test -f 'run-authkeys.c' || echo '$(srcdir)/'`run-authkeys.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_authkeys-run-authkeys.Tpo $(DEPDIR)/test_authkeys-run-authkeys.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='run-authkeys.c' object='test_authkeys-run-authkeys.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_authkeys_CFLAGS) $(CFLAGS) -c -o test_authkeys-run-authkeys.o `test -f 'run-authkeys.c' || echo '$(srcdir)/'`run-authkeys.c
-
-test_authkeys-run-authkeys.obj: run-authkeys.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_authkeys_CFLAGS) $(CFLAGS) -MT test_authkeys-run-authkeys.obj -MD -MP -MF $(DEPDIR)/test_authkeys-run-authkeys.Tpo -c -o test_authkeys-run-authkeys.obj `if test -f 'run-authkeys.c'; then $(CYGPATH_W) 'run-authkeys.c'; else $(CYGPATH_W) '$(srcdir)/run-authkeys.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_authkeys-run-authkeys.Tpo $(DEPDIR)/test_authkeys-run-authkeys.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='run-authkeys.c' object='test_authkeys-run-authkeys.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_authkeys_CFLAGS) $(CFLAGS) -c -o test_authkeys-run-authkeys.obj `if test -f 'run-authkeys.c'; then $(CYGPATH_W) 'run-authkeys.c'; else $(CYGPATH_W) '$(srcdir)/run-authkeys.c'; fi`
-
-test_buftvtots-buftvtots.o: buftvtots.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_buftvtots_CFLAGS) $(CFLAGS) -MT test_buftvtots-buftvtots.o -MD -MP -MF $(DEPDIR)/test_buftvtots-buftvtots.Tpo -c -o test_buftvtots-buftvtots.o `test -f 'buftvtots.c' || echo '$(srcdir)/'`buftvtots.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_buftvtots-buftvtots.Tpo $(DEPDIR)/test_buftvtots-buftvtots.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='buftvtots.c' object='test_buftvtots-buftvtots.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_buftvtots_CFLAGS) $(CFLAGS) -c -o test_buftvtots-buftvtots.o `test -f 'buftvtots.c' || echo '$(srcdir)/'`buftvtots.c
-
-test_buftvtots-buftvtots.obj: buftvtots.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_buftvtots_CFLAGS) $(CFLAGS) -MT test_buftvtots-buftvtots.obj -MD -MP -MF $(DEPDIR)/test_buftvtots-buftvtots.Tpo -c -o test_buftvtots-buftvtots.obj `if test -f 'buftvtots.c'; then $(CYGPATH_W) 'buftvtots.c'; else $(CYGPATH_W) '$(srcdir)/buftvtots.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_buftvtots-buftvtots.Tpo $(DEPDIR)/test_buftvtots-buftvtots.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='buftvtots.c' object='test_buftvtots-buftvtots.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_buftvtots_CFLAGS) $(CFLAGS) -c -o test_buftvtots-buftvtots.obj `if test -f 'buftvtots.c'; then $(CYGPATH_W) 'buftvtots.c'; else $(CYGPATH_W) '$(srcdir)/buftvtots.c'; fi`
-
-test_buftvtots-run-buftvtots.o: run-buftvtots.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_buftvtots_CFLAGS) $(CFLAGS) -MT test_buftvtots-run-buftvtots.o -MD -MP -MF $(DEPDIR)/test_buftvtots-run-buftvtots.Tpo -c -o test_buftvtots-run-buftvtots.o `test -f 'run-buftvtots.c' || echo '$(srcdir)/'`run-buftvtots.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_buftvtots-run-buftvtots.Tpo $(DEPDIR)/test_buftvtots-run-buftvtots.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='run-buftvtots.c' object='test_buftvtots-run-buftvtots.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_buftvtots_CFLAGS) $(CFLAGS) -c -o test_buftvtots-run-buftvtots.o `test -f 'run-buftvtots.c' || echo '$(srcdir)/'`run-buftvtots.c
-
-test_buftvtots-run-buftvtots.obj: run-buftvtots.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_buftvtots_CFLAGS) $(CFLAGS) -MT test_buftvtots-run-buftvtots.obj -MD -MP -MF $(DEPDIR)/test_buftvtots-run-buftvtots.Tpo -c -o test_buftvtots-run-buftvtots.obj `if test -f 'run-buftvtots.c'; then $(CYGPATH_W) 'run-buftvtots.c'; else $(CYGPATH_W) '$(srcdir)/run-buftvtots.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_buftvtots-run-buftvtots.Tpo $(DEPDIR)/test_buftvtots-run-buftvtots.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='run-buftvtots.c' object='test_buftvtots-run-buftvtots.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_buftvtots_CFLAGS) $(CFLAGS) -c -o test_buftvtots-run-buftvtots.obj `if test -f 'run-buftvtots.c'; then $(CYGPATH_W) 'run-buftvtots.c'; else $(CYGPATH_W) '$(srcdir)/run-buftvtots.c'; fi`
-
-test_calendar-calendar.o: calendar.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_calendar_CFLAGS) $(CFLAGS) -MT test_calendar-calendar.o -MD -MP -MF $(DEPDIR)/test_calendar-calendar.Tpo -c -o test_calendar-calendar.o `test -f 'calendar.c' || echo '$(srcdir)/'`calendar.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_calendar-calendar.Tpo $(DEPDIR)/test_calendar-calendar.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='calendar.c' object='test_calendar-calendar.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_calendar_CFLAGS) $(CFLAGS) -c -o test_calendar-calendar.o `test -f 'calendar.c' || echo '$(srcdir)/'`calendar.c
-
-test_calendar-calendar.obj: calendar.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_calendar_CFLAGS) $(CFLAGS) -MT test_calendar-calendar.obj -MD -MP -MF $(DEPDIR)/test_calendar-calendar.Tpo -c -o test_calendar-calendar.obj `if test -f 'calendar.c'; then $(CYGPATH_W) 'calendar.c'; else $(CYGPATH_W) '$(srcdir)/calendar.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_calendar-calendar.Tpo $(DEPDIR)/test_calendar-calendar.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='calendar.c' object='test_calendar-calendar.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_calendar_CFLAGS) $(CFLAGS) -c -o test_calendar-calendar.obj `if test -f 'calendar.c'; then $(CYGPATH_W) 'calendar.c'; else $(CYGPATH_W) '$(srcdir)/calendar.c'; fi`
-
-test_calendar-run-calendar.o: run-calendar.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_calendar_CFLAGS) $(CFLAGS) -MT test_calendar-run-calendar.o -MD -MP -MF $(DEPDIR)/test_calendar-run-calendar.Tpo -c -o test_calendar-run-calendar.o `test -f 'run-calendar.c' || echo '$(srcdir)/'`run-calendar.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_calendar-run-calendar.Tpo $(DEPDIR)/test_calendar-run-calendar.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='run-calendar.c' object='test_calendar-run-calendar.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_calendar_CFLAGS) $(CFLAGS) -c -o test_calendar-run-calendar.o `test -f 'run-calendar.c' || echo '$(srcdir)/'`run-calendar.c
-
-test_calendar-run-calendar.obj: run-calendar.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_calendar_CFLAGS) $(CFLAGS) -MT test_calendar-run-calendar.obj -MD -MP -MF $(DEPDIR)/test_calendar-run-calendar.Tpo -c -o test_calendar-run-calendar.obj `if test -f 'run-calendar.c'; then $(CYGPATH_W) 'run-calendar.c'; else $(CYGPATH_W) '$(srcdir)/run-calendar.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_calendar-run-calendar.Tpo $(DEPDIR)/test_calendar-run-calendar.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='run-calendar.c' object='test_calendar-run-calendar.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_calendar_CFLAGS) $(CFLAGS) -c -o test_calendar-run-calendar.obj `if test -f 'run-calendar.c'; then $(CYGPATH_W) 'run-calendar.c'; else $(CYGPATH_W) '$(srcdir)/run-calendar.c'; fi`
-
-test_calendar-test-libntp.o: test-libntp.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_calendar_CFLAGS) $(CFLAGS) -MT test_calendar-test-libntp.o -MD -MP -MF $(DEPDIR)/test_calendar-test-libntp.Tpo -c -o test_calendar-test-libntp.o `test -f 'test-libntp.c' || echo '$(srcdir)/'`test-libntp.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_calendar-test-libntp.Tpo $(DEPDIR)/test_calendar-test-libntp.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test-libntp.c' object='test_calendar-test-libntp.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_calendar_CFLAGS) $(CFLAGS) -c -o test_calendar-test-libntp.o `test -f 'test-libntp.c' || echo '$(srcdir)/'`test-libntp.c
-
-test_calendar-test-libntp.obj: test-libntp.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_calendar_CFLAGS) $(CFLAGS) -MT test_calendar-test-libntp.obj -MD -MP -MF $(DEPDIR)/test_calendar-test-libntp.Tpo -c -o test_calendar-test-libntp.obj `if test -f 'test-libntp.c'; then $(CYGPATH_W) 'test-libntp.c'; else $(CYGPATH_W) '$(srcdir)/test-libntp.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_calendar-test-libntp.Tpo $(DEPDIR)/test_calendar-test-libntp.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test-libntp.c' object='test_calendar-test-libntp.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_calendar_CFLAGS) $(CFLAGS) -c -o test_calendar-test-libntp.obj `if test -f 'test-libntp.c'; then $(CYGPATH_W) 'test-libntp.c'; else $(CYGPATH_W) '$(srcdir)/test-libntp.c'; fi`
-
test_caljulian-caljulian.o: caljulian.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_caljulian_CFLAGS) $(CFLAGS) -MT test_caljulian-caljulian.o -MD -MP -MF $(DEPDIR)/test_caljulian-caljulian.Tpo -c -o test_caljulian-caljulian.o `test -f 'caljulian.c' || echo '$(srcdir)/'`caljulian.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_caljulian-caljulian.Tpo $(DEPDIR)/test_caljulian-caljulian.Po
@@ -2390,90 +1786,6 @@ test_caltontp-run-caltontp.obj: run-caltontp.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_caltontp_CFLAGS) $(CFLAGS) -c -o test_caltontp-run-caltontp.obj `if test -f 'run-caltontp.c'; then $(CYGPATH_W) 'run-caltontp.c'; else $(CYGPATH_W) '$(srcdir)/run-caltontp.c'; fi`
-test_calyearstart-calyearstart.o: calyearstart.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_calyearstart_CFLAGS) $(CFLAGS) -MT test_calyearstart-calyearstart.o -MD -MP -MF $(DEPDIR)/test_calyearstart-calyearstart.Tpo -c -o test_calyearstart-calyearstart.o `test -f 'calyearstart.c' || echo '$(srcdir)/'`calyearstart.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_calyearstart-calyearstart.Tpo $(DEPDIR)/test_calyearstart-calyearstart.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='calyearstart.c' object='test_calyearstart-calyearstart.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_calyearstart_CFLAGS) $(CFLAGS) -c -o test_calyearstart-calyearstart.o `test -f 'calyearstart.c' || echo '$(srcdir)/'`calyearstart.c
-
-test_calyearstart-calyearstart.obj: calyearstart.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_calyearstart_CFLAGS) $(CFLAGS) -MT test_calyearstart-calyearstart.obj -MD -MP -MF $(DEPDIR)/test_calyearstart-calyearstart.Tpo -c -o test_calyearstart-calyearstart.obj `if test -f 'calyearstart.c'; then $(CYGPATH_W) 'calyearstart.c'; else $(CYGPATH_W) '$(srcdir)/calyearstart.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_calyearstart-calyearstart.Tpo $(DEPDIR)/test_calyearstart-calyearstart.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='calyearstart.c' object='test_calyearstart-calyearstart.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_calyearstart_CFLAGS) $(CFLAGS) -c -o test_calyearstart-calyearstart.obj `if test -f 'calyearstart.c'; then $(CYGPATH_W) 'calyearstart.c'; else $(CYGPATH_W) '$(srcdir)/calyearstart.c'; fi`
-
-test_calyearstart-run-calyearstart.o: run-calyearstart.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_calyearstart_CFLAGS) $(CFLAGS) -MT test_calyearstart-run-calyearstart.o -MD -MP -MF $(DEPDIR)/test_calyearstart-run-calyearstart.Tpo -c -o test_calyearstart-run-calyearstart.o `test -f 'run-calyearstart.c' || echo '$(srcdir)/'`run-calyearstart.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_calyearstart-run-calyearstart.Tpo $(DEPDIR)/test_calyearstart-run-calyearstart.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='run-calyearstart.c' object='test_calyearstart-run-calyearstart.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_calyearstart_CFLAGS) $(CFLAGS) -c -o test_calyearstart-run-calyearstart.o `test -f 'run-calyearstart.c' || echo '$(srcdir)/'`run-calyearstart.c
-
-test_calyearstart-run-calyearstart.obj: run-calyearstart.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_calyearstart_CFLAGS) $(CFLAGS) -MT test_calyearstart-run-calyearstart.obj -MD -MP -MF $(DEPDIR)/test_calyearstart-run-calyearstart.Tpo -c -o test_calyearstart-run-calyearstart.obj `if test -f 'run-calyearstart.c'; then $(CYGPATH_W) 'run-calyearstart.c'; else $(CYGPATH_W) '$(srcdir)/run-calyearstart.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_calyearstart-run-calyearstart.Tpo $(DEPDIR)/test_calyearstart-run-calyearstart.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='run-calyearstart.c' object='test_calyearstart-run-calyearstart.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_calyearstart_CFLAGS) $(CFLAGS) -c -o test_calyearstart-run-calyearstart.obj `if test -f 'run-calyearstart.c'; then $(CYGPATH_W) 'run-calyearstart.c'; else $(CYGPATH_W) '$(srcdir)/run-calyearstart.c'; fi`
-
-test_calyearstart-test-libntp.o: test-libntp.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_calyearstart_CFLAGS) $(CFLAGS) -MT test_calyearstart-test-libntp.o -MD -MP -MF $(DEPDIR)/test_calyearstart-test-libntp.Tpo -c -o test_calyearstart-test-libntp.o `test -f 'test-libntp.c' || echo '$(srcdir)/'`test-libntp.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_calyearstart-test-libntp.Tpo $(DEPDIR)/test_calyearstart-test-libntp.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test-libntp.c' object='test_calyearstart-test-libntp.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_calyearstart_CFLAGS) $(CFLAGS) -c -o test_calyearstart-test-libntp.o `test -f 'test-libntp.c' || echo '$(srcdir)/'`test-libntp.c
-
-test_calyearstart-test-libntp.obj: test-libntp.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_calyearstart_CFLAGS) $(CFLAGS) -MT test_calyearstart-test-libntp.obj -MD -MP -MF $(DEPDIR)/test_calyearstart-test-libntp.Tpo -c -o test_calyearstart-test-libntp.obj `if test -f 'test-libntp.c'; then $(CYGPATH_W) 'test-libntp.c'; else $(CYGPATH_W) '$(srcdir)/test-libntp.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_calyearstart-test-libntp.Tpo $(DEPDIR)/test_calyearstart-test-libntp.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test-libntp.c' object='test_calyearstart-test-libntp.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_calyearstart_CFLAGS) $(CFLAGS) -c -o test_calyearstart-test-libntp.obj `if test -f 'test-libntp.c'; then $(CYGPATH_W) 'test-libntp.c'; else $(CYGPATH_W) '$(srcdir)/test-libntp.c'; fi`
-
-test_clocktime-clocktime.o: clocktime.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_clocktime_CFLAGS) $(CFLAGS) -MT test_clocktime-clocktime.o -MD -MP -MF $(DEPDIR)/test_clocktime-clocktime.Tpo -c -o test_clocktime-clocktime.o `test -f 'clocktime.c' || echo '$(srcdir)/'`clocktime.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_clocktime-clocktime.Tpo $(DEPDIR)/test_clocktime-clocktime.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='clocktime.c' object='test_clocktime-clocktime.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_clocktime_CFLAGS) $(CFLAGS) -c -o test_clocktime-clocktime.o `test -f 'clocktime.c' || echo '$(srcdir)/'`clocktime.c
-
-test_clocktime-clocktime.obj: clocktime.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_clocktime_CFLAGS) $(CFLAGS) -MT test_clocktime-clocktime.obj -MD -MP -MF $(DEPDIR)/test_clocktime-clocktime.Tpo -c -o test_clocktime-clocktime.obj `if test -f 'clocktime.c'; then $(CYGPATH_W) 'clocktime.c'; else $(CYGPATH_W) '$(srcdir)/clocktime.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_clocktime-clocktime.Tpo $(DEPDIR)/test_clocktime-clocktime.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='clocktime.c' object='test_clocktime-clocktime.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_clocktime_CFLAGS) $(CFLAGS) -c -o test_clocktime-clocktime.obj `if test -f 'clocktime.c'; then $(CYGPATH_W) 'clocktime.c'; else $(CYGPATH_W) '$(srcdir)/clocktime.c'; fi`
-
-test_clocktime-run-clocktime.o: run-clocktime.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_clocktime_CFLAGS) $(CFLAGS) -MT test_clocktime-run-clocktime.o -MD -MP -MF $(DEPDIR)/test_clocktime-run-clocktime.Tpo -c -o test_clocktime-run-clocktime.o `test -f 'run-clocktime.c' || echo '$(srcdir)/'`run-clocktime.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_clocktime-run-clocktime.Tpo $(DEPDIR)/test_clocktime-run-clocktime.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='run-clocktime.c' object='test_clocktime-run-clocktime.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_clocktime_CFLAGS) $(CFLAGS) -c -o test_clocktime-run-clocktime.o `test -f 'run-clocktime.c' || echo '$(srcdir)/'`run-clocktime.c
-
-test_clocktime-run-clocktime.obj: run-clocktime.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_clocktime_CFLAGS) $(CFLAGS) -MT test_clocktime-run-clocktime.obj -MD -MP -MF $(DEPDIR)/test_clocktime-run-clocktime.Tpo -c -o test_clocktime-run-clocktime.obj `if test -f 'run-clocktime.c'; then $(CYGPATH_W) 'run-clocktime.c'; else $(CYGPATH_W) '$(srcdir)/run-clocktime.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_clocktime-run-clocktime.Tpo $(DEPDIR)/test_clocktime-run-clocktime.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='run-clocktime.c' object='test_clocktime-run-clocktime.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_clocktime_CFLAGS) $(CFLAGS) -c -o test_clocktime-run-clocktime.obj `if test -f 'run-clocktime.c'; then $(CYGPATH_W) 'run-clocktime.c'; else $(CYGPATH_W) '$(srcdir)/run-clocktime.c'; fi`
-
-test_clocktime-test-libntp.o: test-libntp.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_clocktime_CFLAGS) $(CFLAGS) -MT test_clocktime-test-libntp.o -MD -MP -MF $(DEPDIR)/test_clocktime-test-libntp.Tpo -c -o test_clocktime-test-libntp.o `test -f 'test-libntp.c' || echo '$(srcdir)/'`test-libntp.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_clocktime-test-libntp.Tpo $(DEPDIR)/test_clocktime-test-libntp.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test-libntp.c' object='test_clocktime-test-libntp.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_clocktime_CFLAGS) $(CFLAGS) -c -o test_clocktime-test-libntp.o `test -f 'test-libntp.c' || echo '$(srcdir)/'`test-libntp.c
-
-test_clocktime-test-libntp.obj: test-libntp.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_clocktime_CFLAGS) $(CFLAGS) -MT test_clocktime-test-libntp.obj -MD -MP -MF $(DEPDIR)/test_clocktime-test-libntp.Tpo -c -o test_clocktime-test-libntp.obj `if test -f 'test-libntp.c'; then $(CYGPATH_W) 'test-libntp.c'; else $(CYGPATH_W) '$(srcdir)/test-libntp.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_clocktime-test-libntp.Tpo $(DEPDIR)/test_clocktime-test-libntp.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='test-libntp.c' object='test_clocktime-test-libntp.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_clocktime_CFLAGS) $(CFLAGS) -c -o test_clocktime-test-libntp.obj `if test -f 'test-libntp.c'; then $(CYGPATH_W) 'test-libntp.c'; else $(CYGPATH_W) '$(srcdir)/test-libntp.c'; fi`
-
test_decodenetnum-decodenetnum.o: decodenetnum.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_decodenetnum_CFLAGS) $(CFLAGS) -MT test_decodenetnum-decodenetnum.o -MD -MP -MF $(DEPDIR)/test_decodenetnum-decodenetnum.Tpo -c -o test_decodenetnum-decodenetnum.o `test -f 'decodenetnum.c' || echo '$(srcdir)/'`decodenetnum.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_decodenetnum-decodenetnum.Tpo $(DEPDIR)/test_decodenetnum-decodenetnum.Po
@@ -2502,537 +1814,19 @@ test_decodenetnum-run-decodenetnum.obj: run-decodenetnum.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_decodenetnum_CFLAGS) $(CFLAGS) -c -o test_decodenetnum-run-decodenetnum.obj `if test -f 'run-decodenetnum.c'; then $(CYGPATH_W) 'run-decodenetnum.c'; else $(CYGPATH_W) '$(srcdir)/run-decodenetnum.c'; fi`
-test_hextoint-hextoint.o: hextoint.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_hextoint_CFLAGS) $(CFLAGS) -MT test_hextoint-hextoint.o -MD -MP -MF $(DEPDIR)/test_hextoint-hextoint.Tpo -c -o test_hextoint-hextoint.o `test -f 'hextoint.c' || echo '$(srcdir)/'`hextoint.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_hextoint-hextoint.Tpo $(DEPDIR)/test_hextoint-hextoint.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='hextoint.c' object='test_hextoint-hextoint.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_hextoint_CFLAGS) $(CFLAGS) -c -o test_hextoint-hextoint.o `test -f 'hextoint.c' || echo '$(srcdir)/'`hextoint.c
-
-test_hextoint-hextoint.obj: hextoint.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_hextoint_CFLAGS) $(CFLAGS) -MT test_hextoint-hextoint.obj -MD -MP -MF $(DEPDIR)/test_hextoint-hextoint.Tpo -c -o test_hextoint-hextoint.obj `if test -f 'hextoint.c'; then $(CYGPATH_W) 'hextoint.c'; else $(CYGPATH_W) '$(srcdir)/hextoint.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_hextoint-hextoint.Tpo $(DEPDIR)/test_hextoint-hextoint.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='hextoint.c' object='test_hextoint-hextoint.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_hextoint_CFLAGS) $(CFLAGS) -c -o test_hextoint-hextoint.obj `if test -f 'hextoint.c'; then $(CYGPATH_W) 'hextoint.c'; else $(CYGPATH_W) '$(srcdir)/hextoint.c'; fi`
-
-test_hextoint-run-hextoint.o: run-hextoint.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_hextoint_CFLAGS) $(CFLAGS) -MT test_hextoint-run-hextoint.o -MD -MP -MF $(DEPDIR)/test_hextoint-run-hextoint.Tpo -c -o test_hextoint-run-hextoint.o `test -f 'run-hextoint.c' || echo '$(srcdir)/'`run-hextoint.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_hextoint-run-hextoint.Tpo $(DEPDIR)/test_hextoint-run-hextoint.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='run-hextoint.c' object='test_hextoint-run-hextoint.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_hextoint_CFLAGS) $(CFLAGS) -c -o test_hextoint-run-hextoint.o `test -f 'run-hextoint.c' || echo '$(srcdir)/'`run-hextoint.c
-
-test_hextoint-run-hextoint.obj: run-hextoint.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_hextoint_CFLAGS) $(CFLAGS) -MT test_hextoint-run-hextoint.obj -MD -MP -MF $(DEPDIR)/test_hextoint-run-hextoint.Tpo -c -o test_hextoint-run-hextoint.obj `if test -f 'run-hextoint.c'; then $(CYGPATH_W) 'run-hextoint.c'; else $(CYGPATH_W) '$(srcdir)/run-hextoint.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_hextoint-run-hextoint.Tpo $(DEPDIR)/test_hextoint-run-hextoint.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='run-hextoint.c' object='test_hextoint-run-hextoint.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_hextoint_CFLAGS) $(CFLAGS) -c -o test_hextoint-run-hextoint.obj `if test -f 'run-hextoint.c'; then $(CYGPATH_W) 'run-hextoint.c'; else $(CYGPATH_W) '$(srcdir)/run-hextoint.c'; fi`
-
-test_hextolfp-hextolfp.o: hextolfp.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_hextolfp_CFLAGS) $(CFLAGS) -MT test_hextolfp-hextolfp.o -MD -MP -MF $(DEPDIR)/test_hextolfp-hextolfp.Tpo -c -o test_hextolfp-hextolfp.o `test -f 'hextolfp.c' || echo '$(srcdir)/'`hextolfp.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_hextolfp-hextolfp.Tpo $(DEPDIR)/test_hextolfp-hextolfp.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='hextolfp.c' object='test_hextolfp-hextolfp.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_hextolfp_CFLAGS) $(CFLAGS) -c -o test_hextolfp-hextolfp.o `test -f 'hextolfp.c' || echo '$(srcdir)/'`hextolfp.c
-
-test_hextolfp-hextolfp.obj: hextolfp.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_hextolfp_CFLAGS) $(CFLAGS) -MT test_hextolfp-hextolfp.obj -MD -MP -MF $(DEPDIR)/test_hextolfp-hextolfp.Tpo -c -o test_hextolfp-hextolfp.obj `if test -f 'hextolfp.c'; then $(CYGPATH_W) 'hextolfp.c'; else $(CYGPATH_W) '$(srcdir)/hextolfp.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_hextolfp-hextolfp.Tpo $(DEPDIR)/test_hextolfp-hextolfp.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='hextolfp.c' object='test_hextolfp-hextolfp.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_hextolfp_CFLAGS) $(CFLAGS) -c -o test_hextolfp-hextolfp.obj `if test -f 'hextolfp.c'; then $(CYGPATH_W) 'hextolfp.c'; else $(CYGPATH_W) '$(srcdir)/hextolfp.c'; fi`
-
-test_hextolfp-run-hextolfp.o: run-hextolfp.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_hextolfp_CFLAGS) $(CFLAGS) -MT test_hextolfp-run-hextolfp.o -MD -MP -MF $(DEPDIR)/test_hextolfp-run-hextolfp.Tpo -c -o test_hextolfp-run-hextolfp.o `test -f 'run-hextolfp.c' || echo '$(srcdir)/'`run-hextolfp.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_hextolfp-run-hextolfp.Tpo $(DEPDIR)/test_hextolfp-run-hextolfp.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='run-hextolfp.c' object='test_hextolfp-run-hextolfp.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_hextolfp_CFLAGS) $(CFLAGS) -c -o test_hextolfp-run-hextolfp.o `test -f 'run-hextolfp.c' || echo '$(srcdir)/'`run-hextolfp.c
-
-test_hextolfp-run-hextolfp.obj: run-hextolfp.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_hextolfp_CFLAGS) $(CFLAGS) -MT test_hextolfp-run-hextolfp.obj -MD -MP -MF $(DEPDIR)/test_hextolfp-run-hextolfp.Tpo -c -o test_hextolfp-run-hextolfp.obj `if test -f 'run-hextolfp.c'; then $(CYGPATH_W) 'run-hextolfp.c'; else $(CYGPATH_W) '$(srcdir)/run-hextolfp.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_hextolfp-run-hextolfp.Tpo $(DEPDIR)/test_hextolfp-run-hextolfp.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='run-hextolfp.c' object='test_hextolfp-run-hextolfp.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_hextolfp_CFLAGS) $(CFLAGS) -c -o test_hextolfp-run-hextolfp.obj `if test -f 'run-hextolfp.c'; then $(CYGPATH_W) 'run-hextolfp.c'; else $(CYGPATH_W) '$(srcdir)/run-hextolfp.c'; fi`
-
-test_humandate-humandate.o: humandate.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_humandate_CFLAGS) $(CFLAGS) -MT test_humandate-humandate.o -MD -MP -MF $(DEPDIR)/test_humandate-humandate.Tpo -c -o test_humandate-humandate.o `test -f 'humandate.c' || echo '$(srcdir)/'`humandate.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_humandate-humandate.Tpo $(DEPDIR)/test_humandate-humandate.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='humandate.c' object='test_humandate-humandate.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_humandate_CFLAGS) $(CFLAGS) -c -o test_humandate-humandate.o `test -f 'humandate.c' || echo '$(srcdir)/'`humandate.c
-
-test_humandate-humandate.obj: humandate.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_humandate_CFLAGS) $(CFLAGS) -MT test_humandate-humandate.obj -MD -MP -MF $(DEPDIR)/test_humandate-humandate.Tpo -c -o test_humandate-humandate.obj `if test -f 'humandate.c'; then $(CYGPATH_W) 'humandate.c'; else $(CYGPATH_W) '$(srcdir)/humandate.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_humandate-humandate.Tpo $(DEPDIR)/test_humandate-humandate.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='humandate.c' object='test_humandate-humandate.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_humandate_CFLAGS) $(CFLAGS) -c -o test_humandate-humandate.obj `if test -f 'humandate.c'; then $(CYGPATH_W) 'humandate.c'; else $(CYGPATH_W) '$(srcdir)/humandate.c'; fi`
-
-test_humandate-run-humandate.o: run-humandate.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_humandate_CFLAGS) $(CFLAGS) -MT test_humandate-run-humandate.o -MD -MP -MF $(DEPDIR)/test_humandate-run-humandate.Tpo -c -o test_humandate-run-humandate.o `test -f 'run-humandate.c' || echo '$(srcdir)/'`run-humandate.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_humandate-run-humandate.Tpo $(DEPDIR)/test_humandate-run-humandate.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='run-humandate.c' object='test_humandate-run-humandate.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_humandate_CFLAGS) $(CFLAGS) -c -o test_humandate-run-humandate.o `test -f 'run-humandate.c' || echo '$(srcdir)/'`run-humandate.c
-
-test_humandate-run-humandate.obj: run-humandate.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_humandate_CFLAGS) $(CFLAGS) -MT test_humandate-run-humandate.obj -MD -MP -MF $(DEPDIR)/test_humandate-run-humandate.Tpo -c -o test_humandate-run-humandate.obj `if test -f 'run-humandate.c'; then $(CYGPATH_W) 'run-humandate.c'; else $(CYGPATH_W) '$(srcdir)/run-humandate.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_humandate-run-humandate.Tpo $(DEPDIR)/test_humandate-run-humandate.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='run-humandate.c' object='test_humandate-run-humandate.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_humandate_CFLAGS) $(CFLAGS) -c -o test_humandate-run-humandate.obj `if test -f 'run-humandate.c'; then $(CYGPATH_W) 'run-humandate.c'; else $(CYGPATH_W) '$(srcdir)/run-humandate.c'; fi`
-
-test_lfpfunc-lfpfunc.o: lfpfunc.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_lfpfunc_CFLAGS) $(CFLAGS) -MT test_lfpfunc-lfpfunc.o -MD -MP -MF $(DEPDIR)/test_lfpfunc-lfpfunc.Tpo -c -o test_lfpfunc-lfpfunc.o `test -f 'lfpfunc.c' || echo '$(srcdir)/'`lfpfunc.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_lfpfunc-lfpfunc.Tpo $(DEPDIR)/test_lfpfunc-lfpfunc.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lfpfunc.c' object='test_lfpfunc-lfpfunc.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_lfpfunc_CFLAGS) $(CFLAGS) -c -o test_lfpfunc-lfpfunc.o `test -f 'lfpfunc.c' || echo '$(srcdir)/'`lfpfunc.c
-
-test_lfpfunc-lfpfunc.obj: lfpfunc.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_lfpfunc_CFLAGS) $(CFLAGS) -MT test_lfpfunc-lfpfunc.obj -MD -MP -MF $(DEPDIR)/test_lfpfunc-lfpfunc.Tpo -c -o test_lfpfunc-lfpfunc.obj `if test -f 'lfpfunc.c'; then $(CYGPATH_W) 'lfpfunc.c'; else $(CYGPATH_W) '$(srcdir)/lfpfunc.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_lfpfunc-lfpfunc.Tpo $(DEPDIR)/test_lfpfunc-lfpfunc.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lfpfunc.c' object='test_lfpfunc-lfpfunc.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_lfpfunc_CFLAGS) $(CFLAGS) -c -o test_lfpfunc-lfpfunc.obj `if test -f 'lfpfunc.c'; then $(CYGPATH_W) 'lfpfunc.c'; else $(CYGPATH_W) '$(srcdir)/lfpfunc.c'; fi`
-
-test_lfpfunc-run-lfpfunc.o: run-lfpfunc.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_lfpfunc_CFLAGS) $(CFLAGS) -MT test_lfpfunc-run-lfpfunc.o -MD -MP -MF $(DEPDIR)/test_lfpfunc-run-lfpfunc.Tpo -c -o test_lfpfunc-run-lfpfunc.o `test -f 'run-lfpfunc.c' || echo '$(srcdir)/'`run-lfpfunc.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_lfpfunc-run-lfpfunc.Tpo $(DEPDIR)/test_lfpfunc-run-lfpfunc.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='run-lfpfunc.c' object='test_lfpfunc-run-lfpfunc.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_lfpfunc_CFLAGS) $(CFLAGS) -c -o test_lfpfunc-run-lfpfunc.o `test -f 'run-lfpfunc.c' || echo '$(srcdir)/'`run-lfpfunc.c
-
-test_lfpfunc-run-lfpfunc.obj: run-lfpfunc.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_lfpfunc_CFLAGS) $(CFLAGS) -MT test_lfpfunc-run-lfpfunc.obj -MD -MP -MF $(DEPDIR)/test_lfpfunc-run-lfpfunc.Tpo -c -o test_lfpfunc-run-lfpfunc.obj `if test -f 'run-lfpfunc.c'; then $(CYGPATH_W) 'run-lfpfunc.c'; else $(CYGPATH_W) '$(srcdir)/run-lfpfunc.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_lfpfunc-run-lfpfunc.Tpo $(DEPDIR)/test_lfpfunc-run-lfpfunc.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='run-lfpfunc.c' object='test_lfpfunc-run-lfpfunc.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_lfpfunc_CFLAGS) $(CFLAGS) -c -o test_lfpfunc-run-lfpfunc.obj `if test -f 'run-lfpfunc.c'; then $(CYGPATH_W) 'run-lfpfunc.c'; else $(CYGPATH_W) '$(srcdir)/run-lfpfunc.c'; fi`
-
-test_lfptostr-lfptostr.o: lfptostr.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_lfptostr_CFLAGS) $(CFLAGS) -MT test_lfptostr-lfptostr.o -MD -MP -MF $(DEPDIR)/test_lfptostr-lfptostr.Tpo -c -o test_lfptostr-lfptostr.o `test -f 'lfptostr.c' || echo '$(srcdir)/'`lfptostr.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_lfptostr-lfptostr.Tpo $(DEPDIR)/test_lfptostr-lfptostr.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lfptostr.c' object='test_lfptostr-lfptostr.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_lfptostr_CFLAGS) $(CFLAGS) -c -o test_lfptostr-lfptostr.o `test -f 'lfptostr.c' || echo '$(srcdir)/'`lfptostr.c
-
-test_lfptostr-lfptostr.obj: lfptostr.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_lfptostr_CFLAGS) $(CFLAGS) -MT test_lfptostr-lfptostr.obj -MD -MP -MF $(DEPDIR)/test_lfptostr-lfptostr.Tpo -c -o test_lfptostr-lfptostr.obj `if test -f 'lfptostr.c'; then $(CYGPATH_W) 'lfptostr.c'; else $(CYGPATH_W) '$(srcdir)/lfptostr.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_lfptostr-lfptostr.Tpo $(DEPDIR)/test_lfptostr-lfptostr.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lfptostr.c' object='test_lfptostr-lfptostr.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_lfptostr_CFLAGS) $(CFLAGS) -c -o test_lfptostr-lfptostr.obj `if test -f 'lfptostr.c'; then $(CYGPATH_W) 'lfptostr.c'; else $(CYGPATH_W) '$(srcdir)/lfptostr.c'; fi`
-
-test_lfptostr-run-lfptostr.o: run-lfptostr.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_lfptostr_CFLAGS) $(CFLAGS) -MT test_lfptostr-run-lfptostr.o -MD -MP -MF $(DEPDIR)/test_lfptostr-run-lfptostr.Tpo -c -o test_lfptostr-run-lfptostr.o `test -f 'run-lfptostr.c' || echo '$(srcdir)/'`run-lfptostr.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_lfptostr-run-lfptostr.Tpo $(DEPDIR)/test_lfptostr-run-lfptostr.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='run-lfptostr.c' object='test_lfptostr-run-lfptostr.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_lfptostr_CFLAGS) $(CFLAGS) -c -o test_lfptostr-run-lfptostr.o `test -f 'run-lfptostr.c' || echo '$(srcdir)/'`run-lfptostr.c
-
-test_lfptostr-run-lfptostr.obj: run-lfptostr.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_lfptostr_CFLAGS) $(CFLAGS) -MT test_lfptostr-run-lfptostr.obj -MD -MP -MF $(DEPDIR)/test_lfptostr-run-lfptostr.Tpo -c -o test_lfptostr-run-lfptostr.obj `if test -f 'run-lfptostr.c'; then $(CYGPATH_W) 'run-lfptostr.c'; else $(CYGPATH_W) '$(srcdir)/run-lfptostr.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_lfptostr-run-lfptostr.Tpo $(DEPDIR)/test_lfptostr-run-lfptostr.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='run-lfptostr.c' object='test_lfptostr-run-lfptostr.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_lfptostr_CFLAGS) $(CFLAGS) -c -o test_lfptostr-run-lfptostr.obj `if test -f 'run-lfptostr.c'; then $(CYGPATH_W) 'run-lfptostr.c'; else $(CYGPATH_W) '$(srcdir)/run-lfptostr.c'; fi`
-
-test_modetoa-modetoa.o: modetoa.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_modetoa_CFLAGS) $(CFLAGS) -MT test_modetoa-modetoa.o -MD -MP -MF $(DEPDIR)/test_modetoa-modetoa.Tpo -c -o test_modetoa-modetoa.o `test -f 'modetoa.c' || echo '$(srcdir)/'`modetoa.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_modetoa-modetoa.Tpo $(DEPDIR)/test_modetoa-modetoa.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='modetoa.c' object='test_modetoa-modetoa.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_modetoa_CFLAGS) $(CFLAGS) -c -o test_modetoa-modetoa.o `test -f 'modetoa.c' || echo '$(srcdir)/'`modetoa.c
-
-test_modetoa-modetoa.obj: modetoa.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_modetoa_CFLAGS) $(CFLAGS) -MT test_modetoa-modetoa.obj -MD -MP -MF $(DEPDIR)/test_modetoa-modetoa.Tpo -c -o test_modetoa-modetoa.obj `if test -f 'modetoa.c'; then $(CYGPATH_W) 'modetoa.c'; else $(CYGPATH_W) '$(srcdir)/modetoa.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_modetoa-modetoa.Tpo $(DEPDIR)/test_modetoa-modetoa.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='modetoa.c' object='test_modetoa-modetoa.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_modetoa_CFLAGS) $(CFLAGS) -c -o test_modetoa-modetoa.obj `if test -f 'modetoa.c'; then $(CYGPATH_W) 'modetoa.c'; else $(CYGPATH_W) '$(srcdir)/modetoa.c'; fi`
-
-test_modetoa-run-modetoa.o: run-modetoa.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_modetoa_CFLAGS) $(CFLAGS) -MT test_modetoa-run-modetoa.o -MD -MP -MF $(DEPDIR)/test_modetoa-run-modetoa.Tpo -c -o test_modetoa-run-modetoa.o `test -f 'run-modetoa.c' || echo '$(srcdir)/'`run-modetoa.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_modetoa-run-modetoa.Tpo $(DEPDIR)/test_modetoa-run-modetoa.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='run-modetoa.c' object='test_modetoa-run-modetoa.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_modetoa_CFLAGS) $(CFLAGS) -c -o test_modetoa-run-modetoa.o `test -f 'run-modetoa.c' || echo '$(srcdir)/'`run-modetoa.c
-
-test_modetoa-run-modetoa.obj: run-modetoa.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_modetoa_CFLAGS) $(CFLAGS) -MT test_modetoa-run-modetoa.obj -MD -MP -MF $(DEPDIR)/test_modetoa-run-modetoa.Tpo -c -o test_modetoa-run-modetoa.obj `if test -f 'run-modetoa.c'; then $(CYGPATH_W) 'run-modetoa.c'; else $(CYGPATH_W) '$(srcdir)/run-modetoa.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_modetoa-run-modetoa.Tpo $(DEPDIR)/test_modetoa-run-modetoa.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='run-modetoa.c' object='test_modetoa-run-modetoa.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_modetoa_CFLAGS) $(CFLAGS) -c -o test_modetoa-run-modetoa.obj `if test -f 'run-modetoa.c'; then $(CYGPATH_W) 'run-modetoa.c'; else $(CYGPATH_W) '$(srcdir)/run-modetoa.c'; fi`
-
-test_msyslog-msyslog.o: msyslog.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_msyslog_CFLAGS) $(CFLAGS) -MT test_msyslog-msyslog.o -MD -MP -MF $(DEPDIR)/test_msyslog-msyslog.Tpo -c -o test_msyslog-msyslog.o `test -f 'msyslog.c' || echo '$(srcdir)/'`msyslog.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_msyslog-msyslog.Tpo $(DEPDIR)/test_msyslog-msyslog.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='msyslog.c' object='test_msyslog-msyslog.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_msyslog_CFLAGS) $(CFLAGS) -c -o test_msyslog-msyslog.o `test -f 'msyslog.c' || echo '$(srcdir)/'`msyslog.c
-
-test_msyslog-msyslog.obj: msyslog.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_msyslog_CFLAGS) $(CFLAGS) -MT test_msyslog-msyslog.obj -MD -MP -MF $(DEPDIR)/test_msyslog-msyslog.Tpo -c -o test_msyslog-msyslog.obj `if test -f 'msyslog.c'; then $(CYGPATH_W) 'msyslog.c'; else $(CYGPATH_W) '$(srcdir)/msyslog.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_msyslog-msyslog.Tpo $(DEPDIR)/test_msyslog-msyslog.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='msyslog.c' object='test_msyslog-msyslog.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_msyslog_CFLAGS) $(CFLAGS) -c -o test_msyslog-msyslog.obj `if test -f 'msyslog.c'; then $(CYGPATH_W) 'msyslog.c'; else $(CYGPATH_W) '$(srcdir)/msyslog.c'; fi`
-
-test_msyslog-run-msyslog.o: run-msyslog.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_msyslog_CFLAGS) $(CFLAGS) -MT test_msyslog-run-msyslog.o -MD -MP -MF $(DEPDIR)/test_msyslog-run-msyslog.Tpo -c -o test_msyslog-run-msyslog.o `test -f 'run-msyslog.c' || echo '$(srcdir)/'`run-msyslog.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_msyslog-run-msyslog.Tpo $(DEPDIR)/test_msyslog-run-msyslog.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='run-msyslog.c' object='test_msyslog-run-msyslog.o' libtool=no @AMDEPBACKSLASH@
+test_decodenetnum-sockaddrtest.o: sockaddrtest.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_decodenetnum_CFLAGS) $(CFLAGS) -MT test_decodenetnum-sockaddrtest.o -MD -MP -MF $(DEPDIR)/test_decodenetnum-sockaddrtest.Tpo -c -o test_decodenetnum-sockaddrtest.o `test -f 'sockaddrtest.c' || echo '$(srcdir)/'`sockaddrtest.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_decodenetnum-sockaddrtest.Tpo $(DEPDIR)/test_decodenetnum-sockaddrtest.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='sockaddrtest.c' object='test_decodenetnum-sockaddrtest.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_msyslog_CFLAGS) $(CFLAGS) -c -o test_msyslog-run-msyslog.o `test -f 'run-msyslog.c' || echo '$(srcdir)/'`run-msyslog.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_decodenetnum_CFLAGS) $(CFLAGS) -c -o test_decodenetnum-sockaddrtest.o `test -f 'sockaddrtest.c' || echo '$(srcdir)/'`sockaddrtest.c
-test_msyslog-run-msyslog.obj: run-msyslog.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_msyslog_CFLAGS) $(CFLAGS) -MT test_msyslog-run-msyslog.obj -MD -MP -MF $(DEPDIR)/test_msyslog-run-msyslog.Tpo -c -o test_msyslog-run-msyslog.obj `if test -f 'run-msyslog.c'; then $(CYGPATH_W) 'run-msyslog.c'; else $(CYGPATH_W) '$(srcdir)/run-msyslog.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_msyslog-run-msyslog.Tpo $(DEPDIR)/test_msyslog-run-msyslog.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='run-msyslog.c' object='test_msyslog-run-msyslog.obj' libtool=no @AMDEPBACKSLASH@
+test_decodenetnum-sockaddrtest.obj: sockaddrtest.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_decodenetnum_CFLAGS) $(CFLAGS) -MT test_decodenetnum-sockaddrtest.obj -MD -MP -MF $(DEPDIR)/test_decodenetnum-sockaddrtest.Tpo -c -o test_decodenetnum-sockaddrtest.obj `if test -f 'sockaddrtest.c'; then $(CYGPATH_W) 'sockaddrtest.c'; else $(CYGPATH_W) '$(srcdir)/sockaddrtest.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_decodenetnum-sockaddrtest.Tpo $(DEPDIR)/test_decodenetnum-sockaddrtest.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='sockaddrtest.c' object='test_decodenetnum-sockaddrtest.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_msyslog_CFLAGS) $(CFLAGS) -c -o test_msyslog-run-msyslog.obj `if test -f 'run-msyslog.c'; then $(CYGPATH_W) 'run-msyslog.c'; else $(CYGPATH_W) '$(srcdir)/run-msyslog.c'; fi`
-
-test_netof-netof.o: netof.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_netof_CFLAGS) $(CFLAGS) -MT test_netof-netof.o -MD -MP -MF $(DEPDIR)/test_netof-netof.Tpo -c -o test_netof-netof.o `test -f 'netof.c' || echo '$(srcdir)/'`netof.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_netof-netof.Tpo $(DEPDIR)/test_netof-netof.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='netof.c' object='test_netof-netof.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_netof_CFLAGS) $(CFLAGS) -c -o test_netof-netof.o `test -f 'netof.c' || echo '$(srcdir)/'`netof.c
-
-test_netof-netof.obj: netof.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_netof_CFLAGS) $(CFLAGS) -MT test_netof-netof.obj -MD -MP -MF $(DEPDIR)/test_netof-netof.Tpo -c -o test_netof-netof.obj `if test -f 'netof.c'; then $(CYGPATH_W) 'netof.c'; else $(CYGPATH_W) '$(srcdir)/netof.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_netof-netof.Tpo $(DEPDIR)/test_netof-netof.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='netof.c' object='test_netof-netof.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_netof_CFLAGS) $(CFLAGS) -c -o test_netof-netof.obj `if test -f 'netof.c'; then $(CYGPATH_W) 'netof.c'; else $(CYGPATH_W) '$(srcdir)/netof.c'; fi`
-
-test_netof-run-netof.o: run-netof.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_netof_CFLAGS) $(CFLAGS) -MT test_netof-run-netof.o -MD -MP -MF $(DEPDIR)/test_netof-run-netof.Tpo -c -o test_netof-run-netof.o `test -f 'run-netof.c' || echo '$(srcdir)/'`run-netof.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_netof-run-netof.Tpo $(DEPDIR)/test_netof-run-netof.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='run-netof.c' object='test_netof-run-netof.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_netof_CFLAGS) $(CFLAGS) -c -o test_netof-run-netof.o `test -f 'run-netof.c' || echo '$(srcdir)/'`run-netof.c
-
-test_netof-run-netof.obj: run-netof.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_netof_CFLAGS) $(CFLAGS) -MT test_netof-run-netof.obj -MD -MP -MF $(DEPDIR)/test_netof-run-netof.Tpo -c -o test_netof-run-netof.obj `if test -f 'run-netof.c'; then $(CYGPATH_W) 'run-netof.c'; else $(CYGPATH_W) '$(srcdir)/run-netof.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_netof-run-netof.Tpo $(DEPDIR)/test_netof-run-netof.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='run-netof.c' object='test_netof-run-netof.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_netof_CFLAGS) $(CFLAGS) -c -o test_netof-run-netof.obj `if test -f 'run-netof.c'; then $(CYGPATH_W) 'run-netof.c'; else $(CYGPATH_W) '$(srcdir)/run-netof.c'; fi`
-
-test_numtoa-numtoa.o: numtoa.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_numtoa_CFLAGS) $(CFLAGS) -MT test_numtoa-numtoa.o -MD -MP -MF $(DEPDIR)/test_numtoa-numtoa.Tpo -c -o test_numtoa-numtoa.o `test -f 'numtoa.c' || echo '$(srcdir)/'`numtoa.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_numtoa-numtoa.Tpo $(DEPDIR)/test_numtoa-numtoa.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='numtoa.c' object='test_numtoa-numtoa.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_numtoa_CFLAGS) $(CFLAGS) -c -o test_numtoa-numtoa.o `test -f 'numtoa.c' || echo '$(srcdir)/'`numtoa.c
-
-test_numtoa-numtoa.obj: numtoa.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_numtoa_CFLAGS) $(CFLAGS) -MT test_numtoa-numtoa.obj -MD -MP -MF $(DEPDIR)/test_numtoa-numtoa.Tpo -c -o test_numtoa-numtoa.obj `if test -f 'numtoa.c'; then $(CYGPATH_W) 'numtoa.c'; else $(CYGPATH_W) '$(srcdir)/numtoa.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_numtoa-numtoa.Tpo $(DEPDIR)/test_numtoa-numtoa.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='numtoa.c' object='test_numtoa-numtoa.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_numtoa_CFLAGS) $(CFLAGS) -c -o test_numtoa-numtoa.obj `if test -f 'numtoa.c'; then $(CYGPATH_W) 'numtoa.c'; else $(CYGPATH_W) '$(srcdir)/numtoa.c'; fi`
-
-test_numtoa-run-numtoa.o: run-numtoa.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_numtoa_CFLAGS) $(CFLAGS) -MT test_numtoa-run-numtoa.o -MD -MP -MF $(DEPDIR)/test_numtoa-run-numtoa.Tpo -c -o test_numtoa-run-numtoa.o `test -f 'run-numtoa.c' || echo '$(srcdir)/'`run-numtoa.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_numtoa-run-numtoa.Tpo $(DEPDIR)/test_numtoa-run-numtoa.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='run-numtoa.c' object='test_numtoa-run-numtoa.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_numtoa_CFLAGS) $(CFLAGS) -c -o test_numtoa-run-numtoa.o `test -f 'run-numtoa.c' || echo '$(srcdir)/'`run-numtoa.c
-
-test_numtoa-run-numtoa.obj: run-numtoa.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_numtoa_CFLAGS) $(CFLAGS) -MT test_numtoa-run-numtoa.obj -MD -MP -MF $(DEPDIR)/test_numtoa-run-numtoa.Tpo -c -o test_numtoa-run-numtoa.obj `if test -f 'run-numtoa.c'; then $(CYGPATH_W) 'run-numtoa.c'; else $(CYGPATH_W) '$(srcdir)/run-numtoa.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_numtoa-run-numtoa.Tpo $(DEPDIR)/test_numtoa-run-numtoa.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='run-numtoa.c' object='test_numtoa-run-numtoa.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_numtoa_CFLAGS) $(CFLAGS) -c -o test_numtoa-run-numtoa.obj `if test -f 'run-numtoa.c'; then $(CYGPATH_W) 'run-numtoa.c'; else $(CYGPATH_W) '$(srcdir)/run-numtoa.c'; fi`
-
-test_numtohost-numtohost.o: numtohost.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_numtohost_CFLAGS) $(CFLAGS) -MT test_numtohost-numtohost.o -MD -MP -MF $(DEPDIR)/test_numtohost-numtohost.Tpo -c -o test_numtohost-numtohost.o `test -f 'numtohost.c' || echo '$(srcdir)/'`numtohost.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_numtohost-numtohost.Tpo $(DEPDIR)/test_numtohost-numtohost.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='numtohost.c' object='test_numtohost-numtohost.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_numtohost_CFLAGS) $(CFLAGS) -c -o test_numtohost-numtohost.o `test -f 'numtohost.c' || echo '$(srcdir)/'`numtohost.c
-
-test_numtohost-numtohost.obj: numtohost.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_numtohost_CFLAGS) $(CFLAGS) -MT test_numtohost-numtohost.obj -MD -MP -MF $(DEPDIR)/test_numtohost-numtohost.Tpo -c -o test_numtohost-numtohost.obj `if test -f 'numtohost.c'; then $(CYGPATH_W) 'numtohost.c'; else $(CYGPATH_W) '$(srcdir)/numtohost.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_numtohost-numtohost.Tpo $(DEPDIR)/test_numtohost-numtohost.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='numtohost.c' object='test_numtohost-numtohost.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_numtohost_CFLAGS) $(CFLAGS) -c -o test_numtohost-numtohost.obj `if test -f 'numtohost.c'; then $(CYGPATH_W) 'numtohost.c'; else $(CYGPATH_W) '$(srcdir)/numtohost.c'; fi`
-
-test_numtohost-run-numtohost.o: run-numtohost.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_numtohost_CFLAGS) $(CFLAGS) -MT test_numtohost-run-numtohost.o -MD -MP -MF $(DEPDIR)/test_numtohost-run-numtohost.Tpo -c -o test_numtohost-run-numtohost.o `test -f 'run-numtohost.c' || echo '$(srcdir)/'`run-numtohost.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_numtohost-run-numtohost.Tpo $(DEPDIR)/test_numtohost-run-numtohost.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='run-numtohost.c' object='test_numtohost-run-numtohost.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_numtohost_CFLAGS) $(CFLAGS) -c -o test_numtohost-run-numtohost.o `test -f 'run-numtohost.c' || echo '$(srcdir)/'`run-numtohost.c
-
-test_numtohost-run-numtohost.obj: run-numtohost.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_numtohost_CFLAGS) $(CFLAGS) -MT test_numtohost-run-numtohost.obj -MD -MP -MF $(DEPDIR)/test_numtohost-run-numtohost.Tpo -c -o test_numtohost-run-numtohost.obj `if test -f 'run-numtohost.c'; then $(CYGPATH_W) 'run-numtohost.c'; else $(CYGPATH_W) '$(srcdir)/run-numtohost.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_numtohost-run-numtohost.Tpo $(DEPDIR)/test_numtohost-run-numtohost.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='run-numtohost.c' object='test_numtohost-run-numtohost.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_numtohost_CFLAGS) $(CFLAGS) -c -o test_numtohost-run-numtohost.obj `if test -f 'run-numtohost.c'; then $(CYGPATH_W) 'run-numtohost.c'; else $(CYGPATH_W) '$(srcdir)/run-numtohost.c'; fi`
-
-test_octtoint-octtoint.o: octtoint.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_octtoint_CFLAGS) $(CFLAGS) -MT test_octtoint-octtoint.o -MD -MP -MF $(DEPDIR)/test_octtoint-octtoint.Tpo -c -o test_octtoint-octtoint.o `test -f 'octtoint.c' || echo '$(srcdir)/'`octtoint.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_octtoint-octtoint.Tpo $(DEPDIR)/test_octtoint-octtoint.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='octtoint.c' object='test_octtoint-octtoint.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_octtoint_CFLAGS) $(CFLAGS) -c -o test_octtoint-octtoint.o `test -f 'octtoint.c' || echo '$(srcdir)/'`octtoint.c
-
-test_octtoint-octtoint.obj: octtoint.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_octtoint_CFLAGS) $(CFLAGS) -MT test_octtoint-octtoint.obj -MD -MP -MF $(DEPDIR)/test_octtoint-octtoint.Tpo -c -o test_octtoint-octtoint.obj `if test -f 'octtoint.c'; then $(CYGPATH_W) 'octtoint.c'; else $(CYGPATH_W) '$(srcdir)/octtoint.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_octtoint-octtoint.Tpo $(DEPDIR)/test_octtoint-octtoint.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='octtoint.c' object='test_octtoint-octtoint.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_octtoint_CFLAGS) $(CFLAGS) -c -o test_octtoint-octtoint.obj `if test -f 'octtoint.c'; then $(CYGPATH_W) 'octtoint.c'; else $(CYGPATH_W) '$(srcdir)/octtoint.c'; fi`
-
-test_octtoint-run-octtoint.o: run-octtoint.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_octtoint_CFLAGS) $(CFLAGS) -MT test_octtoint-run-octtoint.o -MD -MP -MF $(DEPDIR)/test_octtoint-run-octtoint.Tpo -c -o test_octtoint-run-octtoint.o `test -f 'run-octtoint.c' || echo '$(srcdir)/'`run-octtoint.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_octtoint-run-octtoint.Tpo $(DEPDIR)/test_octtoint-run-octtoint.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='run-octtoint.c' object='test_octtoint-run-octtoint.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_octtoint_CFLAGS) $(CFLAGS) -c -o test_octtoint-run-octtoint.o `test -f 'run-octtoint.c' || echo '$(srcdir)/'`run-octtoint.c
-
-test_octtoint-run-octtoint.obj: run-octtoint.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_octtoint_CFLAGS) $(CFLAGS) -MT test_octtoint-run-octtoint.obj -MD -MP -MF $(DEPDIR)/test_octtoint-run-octtoint.Tpo -c -o test_octtoint-run-octtoint.obj `if test -f 'run-octtoint.c'; then $(CYGPATH_W) 'run-octtoint.c'; else $(CYGPATH_W) '$(srcdir)/run-octtoint.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_octtoint-run-octtoint.Tpo $(DEPDIR)/test_octtoint-run-octtoint.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='run-octtoint.c' object='test_octtoint-run-octtoint.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_octtoint_CFLAGS) $(CFLAGS) -c -o test_octtoint-run-octtoint.obj `if test -f 'run-octtoint.c'; then $(CYGPATH_W) 'run-octtoint.c'; else $(CYGPATH_W) '$(srcdir)/run-octtoint.c'; fi`
-
-test_prettydate-prettydate.o: prettydate.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_prettydate_CFLAGS) $(CFLAGS) -MT test_prettydate-prettydate.o -MD -MP -MF $(DEPDIR)/test_prettydate-prettydate.Tpo -c -o test_prettydate-prettydate.o `test -f 'prettydate.c' || echo '$(srcdir)/'`prettydate.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_prettydate-prettydate.Tpo $(DEPDIR)/test_prettydate-prettydate.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='prettydate.c' object='test_prettydate-prettydate.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_prettydate_CFLAGS) $(CFLAGS) -c -o test_prettydate-prettydate.o `test -f 'prettydate.c' || echo '$(srcdir)/'`prettydate.c
-
-test_prettydate-prettydate.obj: prettydate.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_prettydate_CFLAGS) $(CFLAGS) -MT test_prettydate-prettydate.obj -MD -MP -MF $(DEPDIR)/test_prettydate-prettydate.Tpo -c -o test_prettydate-prettydate.obj `if test -f 'prettydate.c'; then $(CYGPATH_W) 'prettydate.c'; else $(CYGPATH_W) '$(srcdir)/prettydate.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_prettydate-prettydate.Tpo $(DEPDIR)/test_prettydate-prettydate.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='prettydate.c' object='test_prettydate-prettydate.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_prettydate_CFLAGS) $(CFLAGS) -c -o test_prettydate-prettydate.obj `if test -f 'prettydate.c'; then $(CYGPATH_W) 'prettydate.c'; else $(CYGPATH_W) '$(srcdir)/prettydate.c'; fi`
-
-test_prettydate-run-prettydate.o: run-prettydate.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_prettydate_CFLAGS) $(CFLAGS) -MT test_prettydate-run-prettydate.o -MD -MP -MF $(DEPDIR)/test_prettydate-run-prettydate.Tpo -c -o test_prettydate-run-prettydate.o `test -f 'run-prettydate.c' || echo '$(srcdir)/'`run-prettydate.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_prettydate-run-prettydate.Tpo $(DEPDIR)/test_prettydate-run-prettydate.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='run-prettydate.c' object='test_prettydate-run-prettydate.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_prettydate_CFLAGS) $(CFLAGS) -c -o test_prettydate-run-prettydate.o `test -f 'run-prettydate.c' || echo '$(srcdir)/'`run-prettydate.c
-
-test_prettydate-run-prettydate.obj: run-prettydate.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_prettydate_CFLAGS) $(CFLAGS) -MT test_prettydate-run-prettydate.obj -MD -MP -MF $(DEPDIR)/test_prettydate-run-prettydate.Tpo -c -o test_prettydate-run-prettydate.obj `if test -f 'run-prettydate.c'; then $(CYGPATH_W) 'run-prettydate.c'; else $(CYGPATH_W) '$(srcdir)/run-prettydate.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_prettydate-run-prettydate.Tpo $(DEPDIR)/test_prettydate-run-prettydate.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='run-prettydate.c' object='test_prettydate-run-prettydate.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_prettydate_CFLAGS) $(CFLAGS) -c -o test_prettydate-run-prettydate.obj `if test -f 'run-prettydate.c'; then $(CYGPATH_W) 'run-prettydate.c'; else $(CYGPATH_W) '$(srcdir)/run-prettydate.c'; fi`
-
-test_recvbuff-recvbuff.o: recvbuff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_recvbuff_CFLAGS) $(CFLAGS) -MT test_recvbuff-recvbuff.o -MD -MP -MF $(DEPDIR)/test_recvbuff-recvbuff.Tpo -c -o test_recvbuff-recvbuff.o `test -f 'recvbuff.c' || echo '$(srcdir)/'`recvbuff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_recvbuff-recvbuff.Tpo $(DEPDIR)/test_recvbuff-recvbuff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='recvbuff.c' object='test_recvbuff-recvbuff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_recvbuff_CFLAGS) $(CFLAGS) -c -o test_recvbuff-recvbuff.o `test -f 'recvbuff.c' || echo '$(srcdir)/'`recvbuff.c
-
-test_recvbuff-recvbuff.obj: recvbuff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_recvbuff_CFLAGS) $(CFLAGS) -MT test_recvbuff-recvbuff.obj -MD -MP -MF $(DEPDIR)/test_recvbuff-recvbuff.Tpo -c -o test_recvbuff-recvbuff.obj `if test -f 'recvbuff.c'; then $(CYGPATH_W) 'recvbuff.c'; else $(CYGPATH_W) '$(srcdir)/recvbuff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_recvbuff-recvbuff.Tpo $(DEPDIR)/test_recvbuff-recvbuff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='recvbuff.c' object='test_recvbuff-recvbuff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_recvbuff_CFLAGS) $(CFLAGS) -c -o test_recvbuff-recvbuff.obj `if test -f 'recvbuff.c'; then $(CYGPATH_W) 'recvbuff.c'; else $(CYGPATH_W) '$(srcdir)/recvbuff.c'; fi`
-
-test_recvbuff-run-recvbuff.o: run-recvbuff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_recvbuff_CFLAGS) $(CFLAGS) -MT test_recvbuff-run-recvbuff.o -MD -MP -MF $(DEPDIR)/test_recvbuff-run-recvbuff.Tpo -c -o test_recvbuff-run-recvbuff.o `test -f 'run-recvbuff.c' || echo '$(srcdir)/'`run-recvbuff.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_recvbuff-run-recvbuff.Tpo $(DEPDIR)/test_recvbuff-run-recvbuff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='run-recvbuff.c' object='test_recvbuff-run-recvbuff.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_recvbuff_CFLAGS) $(CFLAGS) -c -o test_recvbuff-run-recvbuff.o `test -f 'run-recvbuff.c' || echo '$(srcdir)/'`run-recvbuff.c
-
-test_recvbuff-run-recvbuff.obj: run-recvbuff.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_recvbuff_CFLAGS) $(CFLAGS) -MT test_recvbuff-run-recvbuff.obj -MD -MP -MF $(DEPDIR)/test_recvbuff-run-recvbuff.Tpo -c -o test_recvbuff-run-recvbuff.obj `if test -f 'run-recvbuff.c'; then $(CYGPATH_W) 'run-recvbuff.c'; else $(CYGPATH_W) '$(srcdir)/run-recvbuff.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_recvbuff-run-recvbuff.Tpo $(DEPDIR)/test_recvbuff-run-recvbuff.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='run-recvbuff.c' object='test_recvbuff-run-recvbuff.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_recvbuff_CFLAGS) $(CFLAGS) -c -o test_recvbuff-run-recvbuff.obj `if test -f 'run-recvbuff.c'; then $(CYGPATH_W) 'run-recvbuff.c'; else $(CYGPATH_W) '$(srcdir)/run-recvbuff.c'; fi`
-
-test_refidsmear-refidsmear.o: refidsmear.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_refidsmear_CFLAGS) $(CFLAGS) -MT test_refidsmear-refidsmear.o -MD -MP -MF $(DEPDIR)/test_refidsmear-refidsmear.Tpo -c -o test_refidsmear-refidsmear.o `test -f 'refidsmear.c' || echo '$(srcdir)/'`refidsmear.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_refidsmear-refidsmear.Tpo $(DEPDIR)/test_refidsmear-refidsmear.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='refidsmear.c' object='test_refidsmear-refidsmear.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_refidsmear_CFLAGS) $(CFLAGS) -c -o test_refidsmear-refidsmear.o `test -f 'refidsmear.c' || echo '$(srcdir)/'`refidsmear.c
-
-test_refidsmear-refidsmear.obj: refidsmear.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_refidsmear_CFLAGS) $(CFLAGS) -MT test_refidsmear-refidsmear.obj -MD -MP -MF $(DEPDIR)/test_refidsmear-refidsmear.Tpo -c -o test_refidsmear-refidsmear.obj `if test -f 'refidsmear.c'; then $(CYGPATH_W) 'refidsmear.c'; else $(CYGPATH_W) '$(srcdir)/refidsmear.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_refidsmear-refidsmear.Tpo $(DEPDIR)/test_refidsmear-refidsmear.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='refidsmear.c' object='test_refidsmear-refidsmear.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_refidsmear_CFLAGS) $(CFLAGS) -c -o test_refidsmear-refidsmear.obj `if test -f 'refidsmear.c'; then $(CYGPATH_W) 'refidsmear.c'; else $(CYGPATH_W) '$(srcdir)/refidsmear.c'; fi`
-
-test_refidsmear-run-refidsmear.o: run-refidsmear.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_refidsmear_CFLAGS) $(CFLAGS) -MT test_refidsmear-run-refidsmear.o -MD -MP -MF $(DEPDIR)/test_refidsmear-run-refidsmear.Tpo -c -o test_refidsmear-run-refidsmear.o `test -f 'run-refidsmear.c' || echo '$(srcdir)/'`run-refidsmear.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_refidsmear-run-refidsmear.Tpo $(DEPDIR)/test_refidsmear-run-refidsmear.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='run-refidsmear.c' object='test_refidsmear-run-refidsmear.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_refidsmear_CFLAGS) $(CFLAGS) -c -o test_refidsmear-run-refidsmear.o `test -f 'run-refidsmear.c' || echo '$(srcdir)/'`run-refidsmear.c
-
-test_refidsmear-run-refidsmear.obj: run-refidsmear.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_refidsmear_CFLAGS) $(CFLAGS) -MT test_refidsmear-run-refidsmear.obj -MD -MP -MF $(DEPDIR)/test_refidsmear-run-refidsmear.Tpo -c -o test_refidsmear-run-refidsmear.obj `if test -f 'run-refidsmear.c'; then $(CYGPATH_W) 'run-refidsmear.c'; else $(CYGPATH_W) '$(srcdir)/run-refidsmear.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_refidsmear-run-refidsmear.Tpo $(DEPDIR)/test_refidsmear-run-refidsmear.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='run-refidsmear.c' object='test_refidsmear-run-refidsmear.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_refidsmear_CFLAGS) $(CFLAGS) -c -o test_refidsmear-run-refidsmear.obj `if test -f 'run-refidsmear.c'; then $(CYGPATH_W) 'run-refidsmear.c'; else $(CYGPATH_W) '$(srcdir)/run-refidsmear.c'; fi`
-
-test_refnumtoa-refnumtoa.o: refnumtoa.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_refnumtoa_CFLAGS) $(CFLAGS) -MT test_refnumtoa-refnumtoa.o -MD -MP -MF $(DEPDIR)/test_refnumtoa-refnumtoa.Tpo -c -o test_refnumtoa-refnumtoa.o `test -f 'refnumtoa.c' || echo '$(srcdir)/'`refnumtoa.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_refnumtoa-refnumtoa.Tpo $(DEPDIR)/test_refnumtoa-refnumtoa.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='refnumtoa.c' object='test_refnumtoa-refnumtoa.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_refnumtoa_CFLAGS) $(CFLAGS) -c -o test_refnumtoa-refnumtoa.o `test -f 'refnumtoa.c' || echo '$(srcdir)/'`refnumtoa.c
-
-test_refnumtoa-refnumtoa.obj: refnumtoa.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_refnumtoa_CFLAGS) $(CFLAGS) -MT test_refnumtoa-refnumtoa.obj -MD -MP -MF $(DEPDIR)/test_refnumtoa-refnumtoa.Tpo -c -o test_refnumtoa-refnumtoa.obj `if test -f 'refnumtoa.c'; then $(CYGPATH_W) 'refnumtoa.c'; else $(CYGPATH_W) '$(srcdir)/refnumtoa.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_refnumtoa-refnumtoa.Tpo $(DEPDIR)/test_refnumtoa-refnumtoa.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='refnumtoa.c' object='test_refnumtoa-refnumtoa.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_refnumtoa_CFLAGS) $(CFLAGS) -c -o test_refnumtoa-refnumtoa.obj `if test -f 'refnumtoa.c'; then $(CYGPATH_W) 'refnumtoa.c'; else $(CYGPATH_W) '$(srcdir)/refnumtoa.c'; fi`
-
-test_refnumtoa-run-refnumtoa.o: run-refnumtoa.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_refnumtoa_CFLAGS) $(CFLAGS) -MT test_refnumtoa-run-refnumtoa.o -MD -MP -MF $(DEPDIR)/test_refnumtoa-run-refnumtoa.Tpo -c -o test_refnumtoa-run-refnumtoa.o `test -f 'run-refnumtoa.c' || echo '$(srcdir)/'`run-refnumtoa.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_refnumtoa-run-refnumtoa.Tpo $(DEPDIR)/test_refnumtoa-run-refnumtoa.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='run-refnumtoa.c' object='test_refnumtoa-run-refnumtoa.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_refnumtoa_CFLAGS) $(CFLAGS) -c -o test_refnumtoa-run-refnumtoa.o `test -f 'run-refnumtoa.c' || echo '$(srcdir)/'`run-refnumtoa.c
-
-test_refnumtoa-run-refnumtoa.obj: run-refnumtoa.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_refnumtoa_CFLAGS) $(CFLAGS) -MT test_refnumtoa-run-refnumtoa.obj -MD -MP -MF $(DEPDIR)/test_refnumtoa-run-refnumtoa.Tpo -c -o test_refnumtoa-run-refnumtoa.obj `if test -f 'run-refnumtoa.c'; then $(CYGPATH_W) 'run-refnumtoa.c'; else $(CYGPATH_W) '$(srcdir)/run-refnumtoa.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_refnumtoa-run-refnumtoa.Tpo $(DEPDIR)/test_refnumtoa-run-refnumtoa.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='run-refnumtoa.c' object='test_refnumtoa-run-refnumtoa.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_refnumtoa_CFLAGS) $(CFLAGS) -c -o test_refnumtoa-run-refnumtoa.obj `if test -f 'run-refnumtoa.c'; then $(CYGPATH_W) 'run-refnumtoa.c'; else $(CYGPATH_W) '$(srcdir)/run-refnumtoa.c'; fi`
-
-test_sfptostr-sfptostr.o: sfptostr.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_sfptostr_CFLAGS) $(CFLAGS) -MT test_sfptostr-sfptostr.o -MD -MP -MF $(DEPDIR)/test_sfptostr-sfptostr.Tpo -c -o test_sfptostr-sfptostr.o `test -f 'sfptostr.c' || echo '$(srcdir)/'`sfptostr.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_sfptostr-sfptostr.Tpo $(DEPDIR)/test_sfptostr-sfptostr.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='sfptostr.c' object='test_sfptostr-sfptostr.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_sfptostr_CFLAGS) $(CFLAGS) -c -o test_sfptostr-sfptostr.o `test -f 'sfptostr.c' || echo '$(srcdir)/'`sfptostr.c
-
-test_sfptostr-sfptostr.obj: sfptostr.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_sfptostr_CFLAGS) $(CFLAGS) -MT test_sfptostr-sfptostr.obj -MD -MP -MF $(DEPDIR)/test_sfptostr-sfptostr.Tpo -c -o test_sfptostr-sfptostr.obj `if test -f 'sfptostr.c'; then $(CYGPATH_W) 'sfptostr.c'; else $(CYGPATH_W) '$(srcdir)/sfptostr.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_sfptostr-sfptostr.Tpo $(DEPDIR)/test_sfptostr-sfptostr.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='sfptostr.c' object='test_sfptostr-sfptostr.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_sfptostr_CFLAGS) $(CFLAGS) -c -o test_sfptostr-sfptostr.obj `if test -f 'sfptostr.c'; then $(CYGPATH_W) 'sfptostr.c'; else $(CYGPATH_W) '$(srcdir)/sfptostr.c'; fi`
-
-test_sfptostr-run-sfptostr.o: run-sfptostr.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_sfptostr_CFLAGS) $(CFLAGS) -MT test_sfptostr-run-sfptostr.o -MD -MP -MF $(DEPDIR)/test_sfptostr-run-sfptostr.Tpo -c -o test_sfptostr-run-sfptostr.o `test -f 'run-sfptostr.c' || echo '$(srcdir)/'`run-sfptostr.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_sfptostr-run-sfptostr.Tpo $(DEPDIR)/test_sfptostr-run-sfptostr.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='run-sfptostr.c' object='test_sfptostr-run-sfptostr.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_sfptostr_CFLAGS) $(CFLAGS) -c -o test_sfptostr-run-sfptostr.o `test -f 'run-sfptostr.c' || echo '$(srcdir)/'`run-sfptostr.c
-
-test_sfptostr-run-sfptostr.obj: run-sfptostr.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_sfptostr_CFLAGS) $(CFLAGS) -MT test_sfptostr-run-sfptostr.obj -MD -MP -MF $(DEPDIR)/test_sfptostr-run-sfptostr.Tpo -c -o test_sfptostr-run-sfptostr.obj `if test -f 'run-sfptostr.c'; then $(CYGPATH_W) 'run-sfptostr.c'; else $(CYGPATH_W) '$(srcdir)/run-sfptostr.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_sfptostr-run-sfptostr.Tpo $(DEPDIR)/test_sfptostr-run-sfptostr.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='run-sfptostr.c' object='test_sfptostr-run-sfptostr.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_sfptostr_CFLAGS) $(CFLAGS) -c -o test_sfptostr-run-sfptostr.obj `if test -f 'run-sfptostr.c'; then $(CYGPATH_W) 'run-sfptostr.c'; else $(CYGPATH_W) '$(srcdir)/run-sfptostr.c'; fi`
-
-test_socktoa-socktoa.o: socktoa.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_socktoa_CFLAGS) $(CFLAGS) -MT test_socktoa-socktoa.o -MD -MP -MF $(DEPDIR)/test_socktoa-socktoa.Tpo -c -o test_socktoa-socktoa.o `test -f 'socktoa.c' || echo '$(srcdir)/'`socktoa.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_socktoa-socktoa.Tpo $(DEPDIR)/test_socktoa-socktoa.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='socktoa.c' object='test_socktoa-socktoa.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_socktoa_CFLAGS) $(CFLAGS) -c -o test_socktoa-socktoa.o `test -f 'socktoa.c' || echo '$(srcdir)/'`socktoa.c
-
-test_socktoa-socktoa.obj: socktoa.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_socktoa_CFLAGS) $(CFLAGS) -MT test_socktoa-socktoa.obj -MD -MP -MF $(DEPDIR)/test_socktoa-socktoa.Tpo -c -o test_socktoa-socktoa.obj `if test -f 'socktoa.c'; then $(CYGPATH_W) 'socktoa.c'; else $(CYGPATH_W) '$(srcdir)/socktoa.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_socktoa-socktoa.Tpo $(DEPDIR)/test_socktoa-socktoa.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='socktoa.c' object='test_socktoa-socktoa.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_socktoa_CFLAGS) $(CFLAGS) -c -o test_socktoa-socktoa.obj `if test -f 'socktoa.c'; then $(CYGPATH_W) 'socktoa.c'; else $(CYGPATH_W) '$(srcdir)/socktoa.c'; fi`
-
-test_socktoa-run-socktoa.o: run-socktoa.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_socktoa_CFLAGS) $(CFLAGS) -MT test_socktoa-run-socktoa.o -MD -MP -MF $(DEPDIR)/test_socktoa-run-socktoa.Tpo -c -o test_socktoa-run-socktoa.o `test -f 'run-socktoa.c' || echo '$(srcdir)/'`run-socktoa.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_socktoa-run-socktoa.Tpo $(DEPDIR)/test_socktoa-run-socktoa.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='run-socktoa.c' object='test_socktoa-run-socktoa.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_socktoa_CFLAGS) $(CFLAGS) -c -o test_socktoa-run-socktoa.o `test -f 'run-socktoa.c' || echo '$(srcdir)/'`run-socktoa.c
-
-test_socktoa-run-socktoa.obj: run-socktoa.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_socktoa_CFLAGS) $(CFLAGS) -MT test_socktoa-run-socktoa.obj -MD -MP -MF $(DEPDIR)/test_socktoa-run-socktoa.Tpo -c -o test_socktoa-run-socktoa.obj `if test -f 'run-socktoa.c'; then $(CYGPATH_W) 'run-socktoa.c'; else $(CYGPATH_W) '$(srcdir)/run-socktoa.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_socktoa-run-socktoa.Tpo $(DEPDIR)/test_socktoa-run-socktoa.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='run-socktoa.c' object='test_socktoa-run-socktoa.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_socktoa_CFLAGS) $(CFLAGS) -c -o test_socktoa-run-socktoa.obj `if test -f 'run-socktoa.c'; then $(CYGPATH_W) 'run-socktoa.c'; else $(CYGPATH_W) '$(srcdir)/run-socktoa.c'; fi`
-
-test_ssl_init-ssl_init.o: ssl_init.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_ssl_init_CFLAGS) $(CFLAGS) -MT test_ssl_init-ssl_init.o -MD -MP -MF $(DEPDIR)/test_ssl_init-ssl_init.Tpo -c -o test_ssl_init-ssl_init.o `test -f 'ssl_init.c' || echo '$(srcdir)/'`ssl_init.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_ssl_init-ssl_init.Tpo $(DEPDIR)/test_ssl_init-ssl_init.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ssl_init.c' object='test_ssl_init-ssl_init.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_ssl_init_CFLAGS) $(CFLAGS) -c -o test_ssl_init-ssl_init.o `test -f 'ssl_init.c' || echo '$(srcdir)/'`ssl_init.c
-
-test_ssl_init-ssl_init.obj: ssl_init.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_ssl_init_CFLAGS) $(CFLAGS) -MT test_ssl_init-ssl_init.obj -MD -MP -MF $(DEPDIR)/test_ssl_init-ssl_init.Tpo -c -o test_ssl_init-ssl_init.obj `if test -f 'ssl_init.c'; then $(CYGPATH_W) 'ssl_init.c'; else $(CYGPATH_W) '$(srcdir)/ssl_init.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_ssl_init-ssl_init.Tpo $(DEPDIR)/test_ssl_init-ssl_init.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ssl_init.c' object='test_ssl_init-ssl_init.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_ssl_init_CFLAGS) $(CFLAGS) -c -o test_ssl_init-ssl_init.obj `if test -f 'ssl_init.c'; then $(CYGPATH_W) 'ssl_init.c'; else $(CYGPATH_W) '$(srcdir)/ssl_init.c'; fi`
-
-test_ssl_init-run-ssl_init.o: run-ssl_init.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_ssl_init_CFLAGS) $(CFLAGS) -MT test_ssl_init-run-ssl_init.o -MD -MP -MF $(DEPDIR)/test_ssl_init-run-ssl_init.Tpo -c -o test_ssl_init-run-ssl_init.o `test -f 'run-ssl_init.c' || echo '$(srcdir)/'`run-ssl_init.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_ssl_init-run-ssl_init.Tpo $(DEPDIR)/test_ssl_init-run-ssl_init.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='run-ssl_init.c' object='test_ssl_init-run-ssl_init.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_ssl_init_CFLAGS) $(CFLAGS) -c -o test_ssl_init-run-ssl_init.o `test -f 'run-ssl_init.c' || echo '$(srcdir)/'`run-ssl_init.c
-
-test_ssl_init-run-ssl_init.obj: run-ssl_init.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_ssl_init_CFLAGS) $(CFLAGS) -MT test_ssl_init-run-ssl_init.obj -MD -MP -MF $(DEPDIR)/test_ssl_init-run-ssl_init.Tpo -c -o test_ssl_init-run-ssl_init.obj `if test -f 'run-ssl_init.c'; then $(CYGPATH_W) 'run-ssl_init.c'; else $(CYGPATH_W) '$(srcdir)/run-ssl_init.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_ssl_init-run-ssl_init.Tpo $(DEPDIR)/test_ssl_init-run-ssl_init.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='run-ssl_init.c' object='test_ssl_init-run-ssl_init.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_ssl_init_CFLAGS) $(CFLAGS) -c -o test_ssl_init-run-ssl_init.obj `if test -f 'run-ssl_init.c'; then $(CYGPATH_W) 'run-ssl_init.c'; else $(CYGPATH_W) '$(srcdir)/run-ssl_init.c'; fi`
-
-test_statestr-statestr.o: statestr.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_statestr_CFLAGS) $(CFLAGS) -MT test_statestr-statestr.o -MD -MP -MF $(DEPDIR)/test_statestr-statestr.Tpo -c -o test_statestr-statestr.o `test -f 'statestr.c' || echo '$(srcdir)/'`statestr.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_statestr-statestr.Tpo $(DEPDIR)/test_statestr-statestr.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='statestr.c' object='test_statestr-statestr.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_statestr_CFLAGS) $(CFLAGS) -c -o test_statestr-statestr.o `test -f 'statestr.c' || echo '$(srcdir)/'`statestr.c
-
-test_statestr-statestr.obj: statestr.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_statestr_CFLAGS) $(CFLAGS) -MT test_statestr-statestr.obj -MD -MP -MF $(DEPDIR)/test_statestr-statestr.Tpo -c -o test_statestr-statestr.obj `if test -f 'statestr.c'; then $(CYGPATH_W) 'statestr.c'; else $(CYGPATH_W) '$(srcdir)/statestr.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_statestr-statestr.Tpo $(DEPDIR)/test_statestr-statestr.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='statestr.c' object='test_statestr-statestr.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_statestr_CFLAGS) $(CFLAGS) -c -o test_statestr-statestr.obj `if test -f 'statestr.c'; then $(CYGPATH_W) 'statestr.c'; else $(CYGPATH_W) '$(srcdir)/statestr.c'; fi`
-
-test_statestr-run-statestr.o: run-statestr.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_statestr_CFLAGS) $(CFLAGS) -MT test_statestr-run-statestr.o -MD -MP -MF $(DEPDIR)/test_statestr-run-statestr.Tpo -c -o test_statestr-run-statestr.o `test -f 'run-statestr.c' || echo '$(srcdir)/'`run-statestr.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_statestr-run-statestr.Tpo $(DEPDIR)/test_statestr-run-statestr.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='run-statestr.c' object='test_statestr-run-statestr.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_statestr_CFLAGS) $(CFLAGS) -c -o test_statestr-run-statestr.o `test -f 'run-statestr.c' || echo '$(srcdir)/'`run-statestr.c
-
-test_statestr-run-statestr.obj: run-statestr.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_statestr_CFLAGS) $(CFLAGS) -MT test_statestr-run-statestr.obj -MD -MP -MF $(DEPDIR)/test_statestr-run-statestr.Tpo -c -o test_statestr-run-statestr.obj `if test -f 'run-statestr.c'; then $(CYGPATH_W) 'run-statestr.c'; else $(CYGPATH_W) '$(srcdir)/run-statestr.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_statestr-run-statestr.Tpo $(DEPDIR)/test_statestr-run-statestr.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='run-statestr.c' object='test_statestr-run-statestr.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_statestr_CFLAGS) $(CFLAGS) -c -o test_statestr-run-statestr.obj `if test -f 'run-statestr.c'; then $(CYGPATH_W) 'run-statestr.c'; else $(CYGPATH_W) '$(srcdir)/run-statestr.c'; fi`
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_decodenetnum_CFLAGS) $(CFLAGS) -c -o test_decodenetnum-sockaddrtest.obj `if test -f 'sockaddrtest.c'; then $(CYGPATH_W) 'sockaddrtest.c'; else $(CYGPATH_W) '$(srcdir)/sockaddrtest.c'; fi`
test_strtolfp-strtolfp.o: strtolfp.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_strtolfp_CFLAGS) $(CFLAGS) -MT test_strtolfp-strtolfp.o -MD -MP -MF $(DEPDIR)/test_strtolfp-strtolfp.Tpo -c -o test_strtolfp-strtolfp.o `test -f 'strtolfp.c' || echo '$(srcdir)/'`strtolfp.c
@@ -3062,236 +1856,19 @@ test_strtolfp-run-strtolfp.obj: run-strtolfp.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_strtolfp_CFLAGS) $(CFLAGS) -c -o test_strtolfp-run-strtolfp.obj `if test -f 'run-strtolfp.c'; then $(CYGPATH_W) 'run-strtolfp.c'; else $(CYGPATH_W) '$(srcdir)/run-strtolfp.c'; fi`
-test_timespecops-timespecops.o: timespecops.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_timespecops_CFLAGS) $(CFLAGS) -MT test_timespecops-timespecops.o -MD -MP -MF $(DEPDIR)/test_timespecops-timespecops.Tpo -c -o test_timespecops-timespecops.o `test -f 'timespecops.c' || echo '$(srcdir)/'`timespecops.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_timespecops-timespecops.Tpo $(DEPDIR)/test_timespecops-timespecops.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='timespecops.c' object='test_timespecops-timespecops.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_timespecops_CFLAGS) $(CFLAGS) -c -o test_timespecops-timespecops.o `test -f 'timespecops.c' || echo '$(srcdir)/'`timespecops.c
-
-test_timespecops-timespecops.obj: timespecops.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_timespecops_CFLAGS) $(CFLAGS) -MT test_timespecops-timespecops.obj -MD -MP -MF $(DEPDIR)/test_timespecops-timespecops.Tpo -c -o test_timespecops-timespecops.obj `if test -f 'timespecops.c'; then $(CYGPATH_W) 'timespecops.c'; else $(CYGPATH_W) '$(srcdir)/timespecops.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_timespecops-timespecops.Tpo $(DEPDIR)/test_timespecops-timespecops.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='timespecops.c' object='test_timespecops-timespecops.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_timespecops_CFLAGS) $(CFLAGS) -c -o test_timespecops-timespecops.obj `if test -f 'timespecops.c'; then $(CYGPATH_W) 'timespecops.c'; else $(CYGPATH_W) '$(srcdir)/timespecops.c'; fi`
-
-test_timespecops-run-timespecops.o: run-timespecops.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_timespecops_CFLAGS) $(CFLAGS) -MT test_timespecops-run-timespecops.o -MD -MP -MF $(DEPDIR)/test_timespecops-run-timespecops.Tpo -c -o test_timespecops-run-timespecops.o `test -f 'run-timespecops.c' || echo '$(srcdir)/'`run-timespecops.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_timespecops-run-timespecops.Tpo $(DEPDIR)/test_timespecops-run-timespecops.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='run-timespecops.c' object='test_timespecops-run-timespecops.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_timespecops_CFLAGS) $(CFLAGS) -c -o test_timespecops-run-timespecops.o `test -f 'run-timespecops.c' || echo '$(srcdir)/'`run-timespecops.c
-
-test_timespecops-run-timespecops.obj: run-timespecops.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_timespecops_CFLAGS) $(CFLAGS) -MT test_timespecops-run-timespecops.obj -MD -MP -MF $(DEPDIR)/test_timespecops-run-timespecops.Tpo -c -o test_timespecops-run-timespecops.obj `if test -f 'run-timespecops.c'; then $(CYGPATH_W) 'run-timespecops.c'; else $(CYGPATH_W) '$(srcdir)/run-timespecops.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_timespecops-run-timespecops.Tpo $(DEPDIR)/test_timespecops-run-timespecops.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='run-timespecops.c' object='test_timespecops-run-timespecops.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_timespecops_CFLAGS) $(CFLAGS) -c -o test_timespecops-run-timespecops.obj `if test -f 'run-timespecops.c'; then $(CYGPATH_W) 'run-timespecops.c'; else $(CYGPATH_W) '$(srcdir)/run-timespecops.c'; fi`
-
-test_timevalops-timevalops.o: timevalops.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_timevalops_CFLAGS) $(CFLAGS) -MT test_timevalops-timevalops.o -MD -MP -MF $(DEPDIR)/test_timevalops-timevalops.Tpo -c -o test_timevalops-timevalops.o `test -f 'timevalops.c' || echo '$(srcdir)/'`timevalops.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_timevalops-timevalops.Tpo $(DEPDIR)/test_timevalops-timevalops.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='timevalops.c' object='test_timevalops-timevalops.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_timevalops_CFLAGS) $(CFLAGS) -c -o test_timevalops-timevalops.o `test -f 'timevalops.c' || echo '$(srcdir)/'`timevalops.c
-
-test_timevalops-timevalops.obj: timevalops.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_timevalops_CFLAGS) $(CFLAGS) -MT test_timevalops-timevalops.obj -MD -MP -MF $(DEPDIR)/test_timevalops-timevalops.Tpo -c -o test_timevalops-timevalops.obj `if test -f 'timevalops.c'; then $(CYGPATH_W) 'timevalops.c'; else $(CYGPATH_W) '$(srcdir)/timevalops.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_timevalops-timevalops.Tpo $(DEPDIR)/test_timevalops-timevalops.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='timevalops.c' object='test_timevalops-timevalops.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_timevalops_CFLAGS) $(CFLAGS) -c -o test_timevalops-timevalops.obj `if test -f 'timevalops.c'; then $(CYGPATH_W) 'timevalops.c'; else $(CYGPATH_W) '$(srcdir)/timevalops.c'; fi`
-
-test_timevalops-run-timevalops.o: run-timevalops.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_timevalops_CFLAGS) $(CFLAGS) -MT test_timevalops-run-timevalops.o -MD -MP -MF $(DEPDIR)/test_timevalops-run-timevalops.Tpo -c -o test_timevalops-run-timevalops.o `test -f 'run-timevalops.c' || echo '$(srcdir)/'`run-timevalops.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_timevalops-run-timevalops.Tpo $(DEPDIR)/test_timevalops-run-timevalops.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='run-timevalops.c' object='test_timevalops-run-timevalops.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_timevalops_CFLAGS) $(CFLAGS) -c -o test_timevalops-run-timevalops.o `test -f 'run-timevalops.c' || echo '$(srcdir)/'`run-timevalops.c
-
-test_timevalops-run-timevalops.obj: run-timevalops.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_timevalops_CFLAGS) $(CFLAGS) -MT test_timevalops-run-timevalops.obj -MD -MP -MF $(DEPDIR)/test_timevalops-run-timevalops.Tpo -c -o test_timevalops-run-timevalops.obj `if test -f 'run-timevalops.c'; then $(CYGPATH_W) 'run-timevalops.c'; else $(CYGPATH_W) '$(srcdir)/run-timevalops.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_timevalops-run-timevalops.Tpo $(DEPDIR)/test_timevalops-run-timevalops.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='run-timevalops.c' object='test_timevalops-run-timevalops.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_timevalops_CFLAGS) $(CFLAGS) -c -o test_timevalops-run-timevalops.obj `if test -f 'run-timevalops.c'; then $(CYGPATH_W) 'run-timevalops.c'; else $(CYGPATH_W) '$(srcdir)/run-timevalops.c'; fi`
-
-test_tstotv-tstotv.o: tstotv.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_tstotv_CFLAGS) $(CFLAGS) -MT test_tstotv-tstotv.o -MD -MP -MF $(DEPDIR)/test_tstotv-tstotv.Tpo -c -o test_tstotv-tstotv.o `test -f 'tstotv.c' || echo '$(srcdir)/'`tstotv.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_tstotv-tstotv.Tpo $(DEPDIR)/test_tstotv-tstotv.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='tstotv.c' object='test_tstotv-tstotv.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_tstotv_CFLAGS) $(CFLAGS) -c -o test_tstotv-tstotv.o `test -f 'tstotv.c' || echo '$(srcdir)/'`tstotv.c
-
-test_tstotv-tstotv.obj: tstotv.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_tstotv_CFLAGS) $(CFLAGS) -MT test_tstotv-tstotv.obj -MD -MP -MF $(DEPDIR)/test_tstotv-tstotv.Tpo -c -o test_tstotv-tstotv.obj `if test -f 'tstotv.c'; then $(CYGPATH_W) 'tstotv.c'; else $(CYGPATH_W) '$(srcdir)/tstotv.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_tstotv-tstotv.Tpo $(DEPDIR)/test_tstotv-tstotv.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='tstotv.c' object='test_tstotv-tstotv.obj' libtool=no @AMDEPBACKSLASH@
+test_strtolfp-lfptest.o: lfptest.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_strtolfp_CFLAGS) $(CFLAGS) -MT test_strtolfp-lfptest.o -MD -MP -MF $(DEPDIR)/test_strtolfp-lfptest.Tpo -c -o test_strtolfp-lfptest.o `test -f 'lfptest.c' || echo '$(srcdir)/'`lfptest.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_strtolfp-lfptest.Tpo $(DEPDIR)/test_strtolfp-lfptest.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lfptest.c' object='test_strtolfp-lfptest.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_tstotv_CFLAGS) $(CFLAGS) -c -o test_tstotv-tstotv.obj `if test -f 'tstotv.c'; then $(CYGPATH_W) 'tstotv.c'; else $(CYGPATH_W) '$(srcdir)/tstotv.c'; fi`
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_strtolfp_CFLAGS) $(CFLAGS) -c -o test_strtolfp-lfptest.o `test -f 'lfptest.c' || echo '$(srcdir)/'`lfptest.c
-test_tstotv-run-tstotv.o: run-tstotv.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_tstotv_CFLAGS) $(CFLAGS) -MT test_tstotv-run-tstotv.o -MD -MP -MF $(DEPDIR)/test_tstotv-run-tstotv.Tpo -c -o test_tstotv-run-tstotv.o `test -f 'run-tstotv.c' || echo '$(srcdir)/'`run-tstotv.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_tstotv-run-tstotv.Tpo $(DEPDIR)/test_tstotv-run-tstotv.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='run-tstotv.c' object='test_tstotv-run-tstotv.o' libtool=no @AMDEPBACKSLASH@
+test_strtolfp-lfptest.obj: lfptest.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_strtolfp_CFLAGS) $(CFLAGS) -MT test_strtolfp-lfptest.obj -MD -MP -MF $(DEPDIR)/test_strtolfp-lfptest.Tpo -c -o test_strtolfp-lfptest.obj `if test -f 'lfptest.c'; then $(CYGPATH_W) 'lfptest.c'; else $(CYGPATH_W) '$(srcdir)/lfptest.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_strtolfp-lfptest.Tpo $(DEPDIR)/test_strtolfp-lfptest.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lfptest.c' object='test_strtolfp-lfptest.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_tstotv_CFLAGS) $(CFLAGS) -c -o test_tstotv-run-tstotv.o `test -f 'run-tstotv.c' || echo '$(srcdir)/'`run-tstotv.c
-
-test_tstotv-run-tstotv.obj: run-tstotv.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_tstotv_CFLAGS) $(CFLAGS) -MT test_tstotv-run-tstotv.obj -MD -MP -MF $(DEPDIR)/test_tstotv-run-tstotv.Tpo -c -o test_tstotv-run-tstotv.obj `if test -f 'run-tstotv.c'; then $(CYGPATH_W) 'run-tstotv.c'; else $(CYGPATH_W) '$(srcdir)/run-tstotv.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_tstotv-run-tstotv.Tpo $(DEPDIR)/test_tstotv-run-tstotv.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='run-tstotv.c' object='test_tstotv-run-tstotv.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_tstotv_CFLAGS) $(CFLAGS) -c -o test_tstotv-run-tstotv.obj `if test -f 'run-tstotv.c'; then $(CYGPATH_W) 'run-tstotv.c'; else $(CYGPATH_W) '$(srcdir)/run-tstotv.c'; fi`
-
-test_tvtots-tvtots.o: tvtots.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_tvtots_CFLAGS) $(CFLAGS) -MT test_tvtots-tvtots.o -MD -MP -MF $(DEPDIR)/test_tvtots-tvtots.Tpo -c -o test_tvtots-tvtots.o `test -f 'tvtots.c' || echo '$(srcdir)/'`tvtots.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_tvtots-tvtots.Tpo $(DEPDIR)/test_tvtots-tvtots.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='tvtots.c' object='test_tvtots-tvtots.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_tvtots_CFLAGS) $(CFLAGS) -c -o test_tvtots-tvtots.o `test -f 'tvtots.c' || echo '$(srcdir)/'`tvtots.c
-
-test_tvtots-tvtots.obj: tvtots.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_tvtots_CFLAGS) $(CFLAGS) -MT test_tvtots-tvtots.obj -MD -MP -MF $(DEPDIR)/test_tvtots-tvtots.Tpo -c -o test_tvtots-tvtots.obj `if test -f 'tvtots.c'; then $(CYGPATH_W) 'tvtots.c'; else $(CYGPATH_W) '$(srcdir)/tvtots.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_tvtots-tvtots.Tpo $(DEPDIR)/test_tvtots-tvtots.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='tvtots.c' object='test_tvtots-tvtots.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_tvtots_CFLAGS) $(CFLAGS) -c -o test_tvtots-tvtots.obj `if test -f 'tvtots.c'; then $(CYGPATH_W) 'tvtots.c'; else $(CYGPATH_W) '$(srcdir)/tvtots.c'; fi`
-
-test_tvtots-run-tvtots.o: run-tvtots.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_tvtots_CFLAGS) $(CFLAGS) -MT test_tvtots-run-tvtots.o -MD -MP -MF $(DEPDIR)/test_tvtots-run-tvtots.Tpo -c -o test_tvtots-run-tvtots.o `test -f 'run-tvtots.c' || echo '$(srcdir)/'`run-tvtots.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_tvtots-run-tvtots.Tpo $(DEPDIR)/test_tvtots-run-tvtots.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='run-tvtots.c' object='test_tvtots-run-tvtots.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_tvtots_CFLAGS) $(CFLAGS) -c -o test_tvtots-run-tvtots.o `test -f 'run-tvtots.c' || echo '$(srcdir)/'`run-tvtots.c
-
-test_tvtots-run-tvtots.obj: run-tvtots.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_tvtots_CFLAGS) $(CFLAGS) -MT test_tvtots-run-tvtots.obj -MD -MP -MF $(DEPDIR)/test_tvtots-run-tvtots.Tpo -c -o test_tvtots-run-tvtots.obj `if test -f 'run-tvtots.c'; then $(CYGPATH_W) 'run-tvtots.c'; else $(CYGPATH_W) '$(srcdir)/run-tvtots.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_tvtots-run-tvtots.Tpo $(DEPDIR)/test_tvtots-run-tvtots.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='run-tvtots.c' object='test_tvtots-run-tvtots.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_tvtots_CFLAGS) $(CFLAGS) -c -o test_tvtots-run-tvtots.obj `if test -f 'run-tvtots.c'; then $(CYGPATH_W) 'run-tvtots.c'; else $(CYGPATH_W) '$(srcdir)/run-tvtots.c'; fi`
-
-test_uglydate-uglydate.o: uglydate.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_uglydate_CFLAGS) $(CFLAGS) -MT test_uglydate-uglydate.o -MD -MP -MF $(DEPDIR)/test_uglydate-uglydate.Tpo -c -o test_uglydate-uglydate.o `test -f 'uglydate.c' || echo '$(srcdir)/'`uglydate.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_uglydate-uglydate.Tpo $(DEPDIR)/test_uglydate-uglydate.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='uglydate.c' object='test_uglydate-uglydate.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_uglydate_CFLAGS) $(CFLAGS) -c -o test_uglydate-uglydate.o `test -f 'uglydate.c' || echo '$(srcdir)/'`uglydate.c
-
-test_uglydate-uglydate.obj: uglydate.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_uglydate_CFLAGS) $(CFLAGS) -MT test_uglydate-uglydate.obj -MD -MP -MF $(DEPDIR)/test_uglydate-uglydate.Tpo -c -o test_uglydate-uglydate.obj `if test -f 'uglydate.c'; then $(CYGPATH_W) 'uglydate.c'; else $(CYGPATH_W) '$(srcdir)/uglydate.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_uglydate-uglydate.Tpo $(DEPDIR)/test_uglydate-uglydate.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='uglydate.c' object='test_uglydate-uglydate.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_uglydate_CFLAGS) $(CFLAGS) -c -o test_uglydate-uglydate.obj `if test -f 'uglydate.c'; then $(CYGPATH_W) 'uglydate.c'; else $(CYGPATH_W) '$(srcdir)/uglydate.c'; fi`
-
-test_uglydate-run-uglydate.o: run-uglydate.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_uglydate_CFLAGS) $(CFLAGS) -MT test_uglydate-run-uglydate.o -MD -MP -MF $(DEPDIR)/test_uglydate-run-uglydate.Tpo -c -o test_uglydate-run-uglydate.o `test -f 'run-uglydate.c' || echo '$(srcdir)/'`run-uglydate.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_uglydate-run-uglydate.Tpo $(DEPDIR)/test_uglydate-run-uglydate.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='run-uglydate.c' object='test_uglydate-run-uglydate.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_uglydate_CFLAGS) $(CFLAGS) -c -o test_uglydate-run-uglydate.o `test -f 'run-uglydate.c' || echo '$(srcdir)/'`run-uglydate.c
-
-test_uglydate-run-uglydate.obj: run-uglydate.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_uglydate_CFLAGS) $(CFLAGS) -MT test_uglydate-run-uglydate.obj -MD -MP -MF $(DEPDIR)/test_uglydate-run-uglydate.Tpo -c -o test_uglydate-run-uglydate.obj `if test -f 'run-uglydate.c'; then $(CYGPATH_W) 'run-uglydate.c'; else $(CYGPATH_W) '$(srcdir)/run-uglydate.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_uglydate-run-uglydate.Tpo $(DEPDIR)/test_uglydate-run-uglydate.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='run-uglydate.c' object='test_uglydate-run-uglydate.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_uglydate_CFLAGS) $(CFLAGS) -c -o test_uglydate-run-uglydate.obj `if test -f 'run-uglydate.c'; then $(CYGPATH_W) 'run-uglydate.c'; else $(CYGPATH_W) '$(srcdir)/run-uglydate.c'; fi`
-
-test_vi64ops-vi64ops.o: vi64ops.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_vi64ops_CFLAGS) $(CFLAGS) -MT test_vi64ops-vi64ops.o -MD -MP -MF $(DEPDIR)/test_vi64ops-vi64ops.Tpo -c -o test_vi64ops-vi64ops.o `test -f 'vi64ops.c' || echo '$(srcdir)/'`vi64ops.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_vi64ops-vi64ops.Tpo $(DEPDIR)/test_vi64ops-vi64ops.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='vi64ops.c' object='test_vi64ops-vi64ops.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_vi64ops_CFLAGS) $(CFLAGS) -c -o test_vi64ops-vi64ops.o `test -f 'vi64ops.c' || echo '$(srcdir)/'`vi64ops.c
-
-test_vi64ops-vi64ops.obj: vi64ops.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_vi64ops_CFLAGS) $(CFLAGS) -MT test_vi64ops-vi64ops.obj -MD -MP -MF $(DEPDIR)/test_vi64ops-vi64ops.Tpo -c -o test_vi64ops-vi64ops.obj `if test -f 'vi64ops.c'; then $(CYGPATH_W) 'vi64ops.c'; else $(CYGPATH_W) '$(srcdir)/vi64ops.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_vi64ops-vi64ops.Tpo $(DEPDIR)/test_vi64ops-vi64ops.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='vi64ops.c' object='test_vi64ops-vi64ops.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_vi64ops_CFLAGS) $(CFLAGS) -c -o test_vi64ops-vi64ops.obj `if test -f 'vi64ops.c'; then $(CYGPATH_W) 'vi64ops.c'; else $(CYGPATH_W) '$(srcdir)/vi64ops.c'; fi`
-
-test_vi64ops-run-vi64ops.o: run-vi64ops.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_vi64ops_CFLAGS) $(CFLAGS) -MT test_vi64ops-run-vi64ops.o -MD -MP -MF $(DEPDIR)/test_vi64ops-run-vi64ops.Tpo -c -o test_vi64ops-run-vi64ops.o `test -f 'run-vi64ops.c' || echo '$(srcdir)/'`run-vi64ops.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_vi64ops-run-vi64ops.Tpo $(DEPDIR)/test_vi64ops-run-vi64ops.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='run-vi64ops.c' object='test_vi64ops-run-vi64ops.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_vi64ops_CFLAGS) $(CFLAGS) -c -o test_vi64ops-run-vi64ops.o `test -f 'run-vi64ops.c' || echo '$(srcdir)/'`run-vi64ops.c
-
-test_vi64ops-run-vi64ops.obj: run-vi64ops.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_vi64ops_CFLAGS) $(CFLAGS) -MT test_vi64ops-run-vi64ops.obj -MD -MP -MF $(DEPDIR)/test_vi64ops-run-vi64ops.Tpo -c -o test_vi64ops-run-vi64ops.obj `if test -f 'run-vi64ops.c'; then $(CYGPATH_W) 'run-vi64ops.c'; else $(CYGPATH_W) '$(srcdir)/run-vi64ops.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_vi64ops-run-vi64ops.Tpo $(DEPDIR)/test_vi64ops-run-vi64ops.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='run-vi64ops.c' object='test_vi64ops-run-vi64ops.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_vi64ops_CFLAGS) $(CFLAGS) -c -o test_vi64ops-run-vi64ops.obj `if test -f 'run-vi64ops.c'; then $(CYGPATH_W) 'run-vi64ops.c'; else $(CYGPATH_W) '$(srcdir)/run-vi64ops.c'; fi`
-
-test_ymd2yd-ymd2yd.o: ymd2yd.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_ymd2yd_CFLAGS) $(CFLAGS) -MT test_ymd2yd-ymd2yd.o -MD -MP -MF $(DEPDIR)/test_ymd2yd-ymd2yd.Tpo -c -o test_ymd2yd-ymd2yd.o `test -f 'ymd2yd.c' || echo '$(srcdir)/'`ymd2yd.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_ymd2yd-ymd2yd.Tpo $(DEPDIR)/test_ymd2yd-ymd2yd.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ymd2yd.c' object='test_ymd2yd-ymd2yd.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_ymd2yd_CFLAGS) $(CFLAGS) -c -o test_ymd2yd-ymd2yd.o `test -f 'ymd2yd.c' || echo '$(srcdir)/'`ymd2yd.c
-
-test_ymd2yd-ymd2yd.obj: ymd2yd.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_ymd2yd_CFLAGS) $(CFLAGS) -MT test_ymd2yd-ymd2yd.obj -MD -MP -MF $(DEPDIR)/test_ymd2yd-ymd2yd.Tpo -c -o test_ymd2yd-ymd2yd.obj `if test -f 'ymd2yd.c'; then $(CYGPATH_W) 'ymd2yd.c'; else $(CYGPATH_W) '$(srcdir)/ymd2yd.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_ymd2yd-ymd2yd.Tpo $(DEPDIR)/test_ymd2yd-ymd2yd.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ymd2yd.c' object='test_ymd2yd-ymd2yd.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_ymd2yd_CFLAGS) $(CFLAGS) -c -o test_ymd2yd-ymd2yd.obj `if test -f 'ymd2yd.c'; then $(CYGPATH_W) 'ymd2yd.c'; else $(CYGPATH_W) '$(srcdir)/ymd2yd.c'; fi`
-
-test_ymd2yd-run-ymd2yd.o: run-ymd2yd.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_ymd2yd_CFLAGS) $(CFLAGS) -MT test_ymd2yd-run-ymd2yd.o -MD -MP -MF $(DEPDIR)/test_ymd2yd-run-ymd2yd.Tpo -c -o test_ymd2yd-run-ymd2yd.o `test -f 'run-ymd2yd.c' || echo '$(srcdir)/'`run-ymd2yd.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_ymd2yd-run-ymd2yd.Tpo $(DEPDIR)/test_ymd2yd-run-ymd2yd.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='run-ymd2yd.c' object='test_ymd2yd-run-ymd2yd.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_ymd2yd_CFLAGS) $(CFLAGS) -c -o test_ymd2yd-run-ymd2yd.o `test -f 'run-ymd2yd.c' || echo '$(srcdir)/'`run-ymd2yd.c
-
-test_ymd2yd-run-ymd2yd.obj: run-ymd2yd.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_ymd2yd_CFLAGS) $(CFLAGS) -MT test_ymd2yd-run-ymd2yd.obj -MD -MP -MF $(DEPDIR)/test_ymd2yd-run-ymd2yd.Tpo -c -o test_ymd2yd-run-ymd2yd.obj `if test -f 'run-ymd2yd.c'; then $(CYGPATH_W) 'run-ymd2yd.c'; else $(CYGPATH_W) '$(srcdir)/run-ymd2yd.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_ymd2yd-run-ymd2yd.Tpo $(DEPDIR)/test_ymd2yd-run-ymd2yd.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='run-ymd2yd.c' object='test_ymd2yd-run-ymd2yd.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_ymd2yd_CFLAGS) $(CFLAGS) -c -o test_ymd2yd-run-ymd2yd.obj `if test -f 'run-ymd2yd.c'; then $(CYGPATH_W) 'run-ymd2yd.c'; else $(CYGPATH_W) '$(srcdir)/run-ymd2yd.c'; fi`
-
-.cpp.o:
-@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
-@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $<
-
-.cpp.obj:
-@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
-@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
-
-.cpp.lo:
-@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
-@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LTCXXCOMPILE) -c -o $@ $<
-
-tests_main.o: $(top_srcdir)/sntp/tests_main.cpp
-@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT tests_main.o -MD -MP -MF $(DEPDIR)/tests_main.Tpo -c -o tests_main.o `test -f '$(top_srcdir)/sntp/tests_main.cpp' || echo '$(srcdir)/'`$(top_srcdir)/sntp/tests_main.cpp
-@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/tests_main.Tpo $(DEPDIR)/tests_main.Po
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$(top_srcdir)/sntp/tests_main.cpp' object='tests_main.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o tests_main.o `test -f '$(top_srcdir)/sntp/tests_main.cpp' || echo '$(srcdir)/'`$(top_srcdir)/sntp/tests_main.cpp
-
-tests_main.obj: $(top_srcdir)/sntp/tests_main.cpp
-@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT tests_main.obj -MD -MP -MF $(DEPDIR)/tests_main.Tpo -c -o tests_main.obj `if test -f '$(top_srcdir)/sntp/tests_main.cpp'; then $(CYGPATH_W) '$(top_srcdir)/sntp/tests_main.cpp'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/sntp/tests_main.cpp'; fi`
-@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/tests_main.Tpo $(DEPDIR)/tests_main.Po
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$(top_srcdir)/sntp/tests_main.cpp' object='tests_main.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o tests_main.obj `if test -f '$(top_srcdir)/sntp/tests_main.cpp'; then $(CYGPATH_W) '$(top_srcdir)/sntp/tests_main.cpp'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/sntp/tests_main.cpp'; fi`
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_strtolfp_CFLAGS) $(CFLAGS) -c -o test_strtolfp-lfptest.obj `if test -f 'lfptest.c'; then $(CYGPATH_W) 'lfptest.c'; else $(CYGPATH_W) '$(srcdir)/lfptest.c'; fi`
mostlyclean-libtool:
-rm -f *.lo
@@ -3758,13 +2335,6 @@ test-ymd2yd.log: test-ymd2yd$(EXEEXT)
--log-file $$b.log --trs-file $$b.trs \
$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
"$$tst" $(AM_TESTS_FD_REDIRECT)
-tests.log: tests$(EXEEXT)
- @p='tests$(EXEEXT)'; \
- b='tests'; \
- $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
- --log-file $$b.log --trs-file $$b.trs \
- $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
- "$$tst" $(AM_TESTS_FD_REDIRECT)
.test.log:
@p='$<'; \
$(am__set_b); \
diff --git a/contrib/ntp/tests/libntp/a_md5encrypt.c b/contrib/ntp/tests/libntp/a_md5encrypt.c
index 1738200..f46376e 100644
--- a/contrib/ntp/tests/libntp/a_md5encrypt.c
+++ b/contrib/ntp/tests/libntp/a_md5encrypt.c
@@ -12,14 +12,6 @@
u_long current_time = 4;
-void setUp(void)
-{
-}
-
-void tearDown(void)
-{
-}
-
/*
* Example packet with MD5 hash calculated manually.
*/
@@ -27,37 +19,51 @@ const int keytype = KEY_TYPE_MD5;
const char *key = "abcdefgh";
const u_short keyLength = 8;
const char *packet = "ijklmnopqrstuvwx";
-#define packetLength 16 //const int packetLength = 16;
-#define keyIdLength 4 //const int keyIdLength = 4;
-#define digestLength 16 //const int digestLength = 16;
+#define packetLength 16
+#define keyIdLength 4
+#define digestLength 16
const int totalLength = packetLength + keyIdLength + digestLength;
const char *expectedPacket = "ijklmnopqrstuvwx\0\0\0\0\x0c\x0e\x84\xcf\x0b\xb7\xa8\x68\x8e\x52\x38\xdb\xbc\x1c\x39\x53";
-void test_Encrypt() {
- char *packetPtr = malloc(totalLength*sizeof(*packetPtr)); //new char[totalLength];
- memset(packetPtr+packetLength, 0, keyIdLength);
+void test_Encrypt(void);
+void test_DecryptValid(void);
+void test_DecryptInvalid(void);
+void test_IPv4AddressToRefId(void);
+void test_IPv6AddressToRefId(void);
+
+
+void
+test_Encrypt(void) {
+ char *packetPtr;
+ int length;
+
+ packetPtr = emalloc(totalLength * sizeof(*packetPtr));
+
+ memset(packetPtr + packetLength, 0, keyIdLength);
memcpy(packetPtr, packet, packetLength);
cache_secretsize = keyLength;
- int length = MD5authencrypt(keytype, (u_char*)key, (u_int32*)packetPtr, packetLength);
+ length = MD5authencrypt(keytype, (u_char*)key, (u_int32*)packetPtr, packetLength);
TEST_ASSERT_TRUE(MD5authdecrypt(keytype, (u_char*)key, (u_int32*)packetPtr, packetLength, length));
TEST_ASSERT_EQUAL(20, length);
- TEST_ASSERT_TRUE(memcmp(expectedPacket, packetPtr, totalLength) == 0);
+ TEST_ASSERT_EQUAL_MEMORY(expectedPacket, packetPtr, totalLength);
- free(packetPtr); //delete[] packetPtr;
+ free(packetPtr);
}
-void test_DecryptValid() {
+void
+test_DecryptValid(void) {
cache_secretsize = keyLength;
TEST_ASSERT_TRUE(MD5authdecrypt(keytype, (u_char*)key, (u_int32*)expectedPacket, packetLength, 20));
}
-void test_DecryptInvalid() {
+void
+test_DecryptInvalid(void) {
cache_secretsize = keyLength;
const char *invalidPacket = "ijklmnopqrstuvwx\0\0\0\0\x0c\x0e\x84\xcf\x0b\xb7\xa8\x68\x8e\x52\x38\xdb\xbc\x1c\x39\x54";
@@ -65,18 +71,22 @@ void test_DecryptInvalid() {
TEST_ASSERT_FALSE(MD5authdecrypt(keytype, (u_char*)key, (u_int32*)invalidPacket, packetLength, 20));
}
-void test_IPv4AddressToRefId() {
+void
+test_IPv4AddressToRefId(void) {
sockaddr_u addr;
addr.sa4.sin_family = AF_INET;
+ u_int32 address;
+
addr.sa4.sin_port = htons(80);
- u_int32 address = inet_addr("192.0.2.1");
+ address = inet_addr("192.0.2.1");
addr.sa4.sin_addr.s_addr = address;
TEST_ASSERT_EQUAL(address, addr2refid(&addr));
}
-void test_IPv6AddressToRefId() {
+void
+test_IPv6AddressToRefId(void) {
const struct in6_addr address = {
0x20, 0x01, 0x0d, 0xb8,
0x85, 0xa3, 0x08, 0xd3,
diff --git a/contrib/ntp/tests/libntp/atoint.c b/contrib/ntp/tests/libntp/atoint.c
index aca6ef5..e640c36 100644
--- a/contrib/ntp/tests/libntp/atoint.c
+++ b/contrib/ntp/tests/libntp/atoint.c
@@ -4,6 +4,15 @@
#include "ntp_calendar.h"
#include "unity.h"
+void test_RegularPositive(void);
+void test_RegularNegative(void);
+void test_PositiveOverflowBoundary(void);
+void test_NegativeOverflowBoundary(void);
+void test_PositiveOverflowBig(void);
+void test_IllegalCharacter(void);
+
+
+
void test_RegularPositive(void) {
const char *str = "17";
long val;
diff --git a/contrib/ntp/tests/libntp/atouint.c b/contrib/ntp/tests/libntp/atouint.c
index 33c15a9..460bf1c 100644
--- a/contrib/ntp/tests/libntp/atouint.c
+++ b/contrib/ntp/tests/libntp/atouint.c
@@ -6,7 +6,15 @@
#include "unity.h"
-void test_RegularPositive() {
+void test_RegularPositive(void);
+void test_PositiveOverflowBoundary(void);
+void test_PositiveOverflowBig(void);
+void test_Negative(void);
+void test_IllegalChar(void);
+
+
+
+void test_RegularPositive(void) {
const char *str = "305";
u_long actual;
@@ -14,28 +22,28 @@ void test_RegularPositive() {
TEST_ASSERT_EQUAL(305, actual);
}
-void test_PositiveOverflowBoundary() {
+void test_PositiveOverflowBoundary(void) {
const char *str = "4294967296";
u_long actual;
TEST_ASSERT_FALSE(atouint(str, &actual));
}
-void test_PositiveOverflowBig() {
+void test_PositiveOverflowBig(void) {
const char *str = "8000000000";
u_long actual;
TEST_ASSERT_FALSE(atouint(str, &actual));
}
-void test_Negative() {
+void test_Negative(void) {
const char *str = "-1";
u_long actual;
TEST_ASSERT_FALSE(atouint(str, &actual));
}
-void test_IllegalChar() {
+void test_IllegalChar(void) {
const char *str = "50c3";
u_long actual;
diff --git a/contrib/ntp/tests/libntp/authkeys.c b/contrib/ntp/tests/libntp/authkeys.c
index b949628..6a10c01 100644
--- a/contrib/ntp/tests/libntp/authkeys.c
+++ b/contrib/ntp/tests/libntp/authkeys.c
@@ -17,16 +17,26 @@
u_long current_time = 4;
int counter = 0;
-
-// old code from google test framework, moved to SetUp() for unity
-void setUp(void)
+void setUp(void);
+void tearDown(void);
+void AddTrustedKey(keyid_t keyno);
+void AddUntrustedKey(keyid_t keyno);
+void test_AddTrustedKeys(void);
+void test_AddUntrustedKey(void);
+void test_HaveKeyCorrect(void);
+void test_HaveKeyIncorrect(void);
+void test_AddWithAuthUseKey(void);
+void test_EmptyKey(void);
+
+
+void
+setUp(void)
{
-// init_lib();
- if(counter ==0){
- counter++;
- init_auth(); //causes segfault if called more than once
+ if (counter == 0) {
+ counter++;
+ init_auth(); // causes segfault if called more than once
}
-/*
+ /*
* init_auth() is called by tests_main.cpp earlier. It
* does not initialize global variables like
* authnumkeys, so let's reset them to zero here.
@@ -41,20 +51,18 @@ void setUp(void)
cache_flags = 0;
cache_secret = NULL;
cache_secretsize = 0;
-
}
-void tearDown(void)
+void
+tearDown(void)
{
-}
+}
static const int KEYTYPE = KEY_TYPE_MD5;
-
-
-
-void AddTrustedKey(keyid_t keyno) {
+void
+AddTrustedKey(keyid_t keyno) {
/*
* We need to add a MD5-key in addition to setting the
* trust, because authhavekey() requires type != 0.
@@ -64,11 +72,13 @@ void AddTrustedKey(keyid_t keyno) {
authtrust(keyno, TRUE);
}
-void AddUntrustedKey(keyid_t keyno) {
+void
+AddUntrustedKey(keyid_t keyno) {
authtrust(keyno, FALSE);
}
-void test_AddTrustedKeys() {
+void
+test_AddTrustedKeys(void) {
const keyid_t KEYNO1 = 5;
const keyid_t KEYNO2 = 8;
@@ -79,7 +89,8 @@ void test_AddTrustedKeys() {
TEST_ASSERT_TRUE(authistrusted(KEYNO2));
}
-void test_AddUntrustedKey() {
+void
+test_AddUntrustedKey(void) {
const keyid_t KEYNO = 3;
AddUntrustedKey(KEYNO);
@@ -87,7 +98,8 @@ void test_AddUntrustedKey() {
TEST_ASSERT_FALSE(authistrusted(KEYNO));
}
-void test_HaveKeyCorrect() {
+void
+test_HaveKeyCorrect(void) {
const keyid_t KEYNO = 3;
AddTrustedKey(KEYNO);
@@ -96,21 +108,24 @@ void test_HaveKeyCorrect() {
TEST_ASSERT_TRUE(authhavekey(KEYNO));
}
-void test_HaveKeyIncorrect() {
+void
+test_HaveKeyIncorrect(void) {
const keyid_t KEYNO = 2;
TEST_ASSERT_FALSE(auth_havekey(KEYNO));
TEST_ASSERT_FALSE(authhavekey(KEYNO));
}
-void test_AddWithAuthUseKey() {
+void
+test_AddWithAuthUseKey(void) {
const keyid_t KEYNO = 5;
const char* KEY = "52a";
TEST_ASSERT_TRUE(authusekey(KEYNO, KEYTYPE, (u_char*)KEY));
}
-void test_EmptyKey() {
+void
+test_EmptyKey(void) {
const keyid_t KEYNO = 3;
const char* KEY = "";
diff --git a/contrib/ntp/tests/libntp/buftvtots.c b/contrib/ntp/tests/libntp/buftvtots.c
index edeedf6..efde009 100644
--- a/contrib/ntp/tests/libntp/buftvtots.c
+++ b/contrib/ntp/tests/libntp/buftvtots.c
@@ -8,15 +8,20 @@
#include "unity.h"
-// Required for Solaris.
+/* Required for Solaris. */
#include <math.h>
+void test_ZeroBuffer(void);
+void test_IntegerAndFractionalBuffer(void);
+void test_IllegalMicroseconds(void);
+void test_AlwaysFalseOnWindows(void);
-void test_ZeroBuffer() {
+void
+test_ZeroBuffer(void) {
#ifndef SYS_WINNT
const struct timeval input = {0, 0};
- const l_fp expected = {0 + JAN_1970, 0};
+ const l_fp expected = {{0 + JAN_1970}, 0};
l_fp actual;
@@ -27,32 +32,33 @@ void test_ZeroBuffer() {
#endif
}
-void test_IntegerAndFractionalBuffer() {
+void
+test_IntegerAndFractionalBuffer(void) {
#ifndef SYS_WINNT
- const struct timeval input = {5, 500000}; // 5.5
- const l_fp expected = {5 + JAN_1970, HALF};
-
+ const struct timeval input = {5, 500000}; /* 5.5 */
+ const l_fp expected = {{5 + JAN_1970}, HALF};
+ double expectedDouble, actualDouble;
l_fp actual;
TEST_ASSERT_TRUE(buftvtots((const char*)(&input), &actual));
- // Compare the fractional part with an absolute error given.
+ /* Compare the fractional part with an absolute error given. */
TEST_ASSERT_EQUAL(expected.l_ui, actual.l_ui);
- double expectedDouble, actualDouble;
M_LFPTOD(0, expected.l_uf, expectedDouble);
M_LFPTOD(0, actual.l_uf, actualDouble);
- // The error should be less than 0.5 us
- TEST_ASSERT_DOUBLE_WITHIN(0.0000005,expectedDouble,actualDouble); //delta,epected,actual //_EXPECT_NEAR(expectedDouble, actualDouble, 0.0000005);
+ /* The error should be less than 0.5 us */
+ TEST_ASSERT_DOUBLE_WITHIN(0.0000005, expectedDouble, actualDouble);
#else
TEST_IGNORE_MESSAGE("Test only for Windows, skipping...");
#endif
}
-void test_IllegalMicroseconds() {
+void
+test_IllegalMicroseconds(void) {
#ifndef SYS_WINNT
- const struct timeval input = {0, 1100000}; // > 999 999 microseconds.
+ const struct timeval input = {0, 1100000}; /* > 999 999 microseconds. */
l_fp actual;
@@ -63,7 +69,8 @@ void test_IllegalMicroseconds() {
}
-void test_AlwaysFalseOnWindows() {
+void
+test_AlwaysFalseOnWindows(void) {
#ifdef SYS_WINNT
/*
* Under Windows, buftvtots will just return
diff --git a/contrib/ntp/tests/libntp/calendar.c b/contrib/ntp/tests/libntp/calendar.c
index 4ac1df4..2c8a2d5 100644
--- a/contrib/ntp/tests/libntp/calendar.c
+++ b/contrib/ntp/tests/libntp/calendar.c
@@ -1,50 +1,56 @@
#include "config.h"
-#include "ntp_stdlib.h" //test fail without this include, for some reason
+#include "ntp_stdlib.h" /* test fail without this include, for some reason */
#include "ntp_calendar.h"
#include "unity.h"
-//#include "test-libntp.h"
-
-
#include <string.h>
-//#include <sstream>
static int leapdays(int year);
-char * CalendarFromCalToString(const struct calendar cal); //&
-char * CalendarFromIsoToString(const struct isodate iso); //&
-
-//tehnically, booleans
-int IsEqualCal(const struct calendar expected, const struct calendar actual); //&&
-int IsEqualIso(const struct isodate expected, const struct isodate actual); //&&
-
-char * DateFromCalToStringCal(const struct calendar cal); //&
-char * DateFromIsoToStringIso(const struct isodate iso); //&
-
-//tehnically, booleans
-int sEqualDateCal(const struct calendar expected, const struct calendar actual); //&&
-int IsEqualDateIso(const struct isodate expected, const struct isodate actual); //&&
-
-
-
-// ---------------------------------------------------------------------
-// test support stuff
-// ---------------------------------------------------------------------
-
-//function which, in combination with TEST_ASSERT_TRUE replaces google test framework's EXPECT_GT(a,b); -> GT means Greather Than
-//boolean
-int isGT(int first,int second){
- if(first > second){
-
- return TRUE;
+int isGT(int first, int second);
+int leapdays(int year);
+char * CalendarFromCalToString(const struct calendar *cal);
+char * CalendarFromIsoToString(const struct isodate *iso);
+int IsEqualCal(const struct calendar *expected, const struct calendar *actual);
+int IsEqualIso(const struct isodate *expected, const struct isodate *actual);
+char * DateFromCalToString(const struct calendar *cal);
+char * DateFromIsoToString(const struct isodate *iso);
+int IsEqualDateCal(const struct calendar *expected, const struct calendar *actual);
+int IsEqualDateIso(const struct isodate *expected, const struct isodate *actual);
+void test_DaySplitMerge(void);
+void test_SplitYearDays1(void);
+void test_SplitYearDays2(void);
+void test_RataDie1(void);
+void test_LeapYears1(void);
+void test_LeapYears2(void);
+void test_RoundTripDate(void);
+void test_RoundTripYearStart(void);
+void test_RoundTripMonthStart(void);
+void test_RoundTripWeekStart(void);
+void test_RoundTripDayStart(void);
+void test_IsoCalYearsToWeeks(void);
+void test_IsoCalWeeksToYearStart(void);
+void test_IsoCalWeeksToYearEnd(void);
+void test_DaySecToDate(void);
+
+/*
+ * ---------------------------------------------------------------------
+ * test support stuff
+ * ---------------------------------------------------------------------
+ */
+int
+isGT(int first, int second)
+{
+ if(first > second) {
+ return TRUE;
+ } else {
+ return FALSE;
}
-
- else return FALSE;
}
-
-int leapdays(int year)
+int
+leapdays(int year)
{
if (year % 400 == 0)
return 1;
@@ -55,160 +61,140 @@ int leapdays(int year)
return 0;
}
-char * CalendarFromCalToString(const struct calendar cal) { //&
- char * ss = malloc (sizeof (char) * 100);
-
- char buffer[100] ="";
- sprintf(buffer, "%u", cal.year);
- strcat(ss,buffer);
- strcat(ss,"-");
- sprintf(buffer, "%u", (u_int)cal.month);
- strcat(ss,buffer);
- strcat(ss,"-");
- sprintf(buffer, "%u", (u_int)cal.monthday);
- strcat(ss,buffer);
- strcat(ss," (");
- sprintf(buffer, "%u", cal.yearday);
- strcat(ss,buffer);
- strcat(ss,") ");
- sprintf(buffer, "%u", (u_int)cal.hour);
- strcat(ss,buffer);
- strcat(ss,":");
- sprintf(buffer, "%u", (u_int)cal.minute);
- strcat(ss,buffer);
- strcat(ss,":");
- sprintf(buffer, "%u", (u_int)cal.second);
- strcat(ss,buffer);
- //ss << cal.year << "-" << (u_int)cal.month << "-" << (u_int)cal.monthday << " (" << cal.yearday << ") " << (u_int)cal.hour << ":" << (u_int)cal.minute << ":" << (u_int)cal.second;
- return ss;
-
+char *
+CalendarFromCalToString(
+ const struct calendar *cal)
+{
+ char * str = malloc(sizeof (char) * 100);
+ snprintf(str, 100, "%u-%02u-%02u (%u) %02u:%02u:%02u",
+ cal->year, (u_int)cal->month, (u_int)cal->monthday,
+ cal->yearday,
+ (u_int)cal->hour, (u_int)cal->minute, (u_int)cal->second);
+ str[99] = '\0'; /* paranoia rulez! */
+ return str;
}
-char * CalendarFromIsoToString(const struct isodate iso) { //&
-
- char * ss = malloc (sizeof (char) * 100);
-
- char buffer[100] ="";
- sprintf(buffer, "%u", iso.year);
- strcat(ss,buffer);
- strcat(ss,"-");
- sprintf(buffer, "%u", (u_int)iso.week);
- strcat(ss,buffer);
- strcat(ss,"-");
- sprintf(buffer, "%u", (u_int)iso.weekday);
- strcat(ss,buffer);
- sprintf(buffer, "%u", (u_int)iso.hour);
- strcat(ss,buffer);
- strcat(ss,":");
- sprintf(buffer, "%u", (u_int)iso.minute);
- strcat(ss,buffer);
- strcat(ss,":");
- sprintf(buffer, "%u", (u_int)iso.second);
- strcat(ss,buffer);
- //ss << iso.year << "-" << (u_int)iso.week << "-" << (u_int)iso.weekday << (u_int)iso.hour << ":" << (u_int)iso.minute << ":" << (u_int)iso.second;
- return ss;
-
+char *
+CalendarFromIsoToString(
+ const struct isodate *iso)
+{
+ char * str = emalloc (sizeof (char) * 100);
+ snprintf(str, 100, "%u-W%02u-%02u %02u:%02u:%02u",
+ iso->year, (u_int)iso->week, (u_int)iso->weekday,
+ (u_int)iso->hour, (u_int)iso->minute, (u_int)iso->second);
+ str[99] = '\0'; /* paranoia rulez! */
+ return str;
}
-int IsEqualCal(const struct calendar expected, const struct calendar actual) { //&&
- if (expected.year == actual.year &&
- (!expected.yearday || expected.yearday == actual.yearday) &&
- expected.month == actual.month &&
- expected.monthday == actual.monthday &&
- expected.hour == actual.hour &&
- expected.minute == actual.minute &&
- expected.second == actual.second) {
+int
+IsEqualCal(
+ const struct calendar *expected,
+ const struct calendar *actual)
+{
+ if (expected->year == actual->year &&
+ (!expected->yearday || expected->yearday == actual->yearday) &&
+ expected->month == actual->month &&
+ expected->monthday == actual->monthday &&
+ expected->hour == actual->hour &&
+ expected->minute == actual->minute &&
+ expected->second == actual->second) {
return TRUE;
} else {
- printf("expected: %s but was %s", CalendarFromCalToString(expected) , CalendarFromCalToString(actual));
+ printf("expected: %s but was %s",
+ CalendarFromCalToString(expected),
+ CalendarFromCalToString(actual));
return FALSE;
}
}
-int IsEqualIso(const struct isodate expected, const struct isodate actual) { //&&
- if (expected.year == actual.year &&
- expected.week == actual.week &&
- expected.weekday == actual.weekday &&
- expected.hour == actual.hour &&
- expected.minute == actual.minute &&
- expected.second == actual.second) {
+int
+IsEqualIso(
+ const struct isodate *expected,
+ const struct isodate *actual)
+{
+ if (expected->year == actual->year &&
+ expected->week == actual->week &&
+ expected->weekday == actual->weekday &&
+ expected->hour == actual->hour &&
+ expected->minute == actual->minute &&
+ expected->second == actual->second) {
return TRUE;
} else {
- printf("expected: %s but was %s", CalendarFromIsoToString(expected) , CalendarFromIsoToString(actual));
+ printf("expected: %s but was %s",
+ CalendarFromIsoToString(expected),
+ CalendarFromIsoToString(actual));
return FALSE;
}
}
-char * DateFromCalToString(const struct calendar cal) { //&
-
- char * ss = malloc (sizeof (char) * 100);
-
- char buffer[100] ="";
- sprintf(buffer, "%u", cal.year);
- strcat(ss,buffer);
- strcat(ss,"-");
- sprintf(buffer, "%u", (u_int)cal.month);
- strcat(ss,buffer);
- strcat(ss,"-");
- sprintf(buffer, "%u", (u_int)cal.monthday);
- strcat(ss,buffer);
- strcat(ss," (");
- sprintf(buffer, "%u", cal.yearday);
- strcat(ss,buffer);
- strcat(ss,")");
-
- return ss;
- //ss << cal.year << "-" << (u_int)cal.month << "-" << (u_int)cal.monthday << " (" << cal.yearday << ")";
+char *
+DateFromCalToString(
+ const struct calendar *cal)
+{
+
+ char * str = emalloc (sizeof (char) * 100);
+ snprintf(str, 100, "%u-%02u-%02u (%u)",
+ cal->year, (u_int)cal->month, (u_int)cal->monthday,
+ cal->yearday);
+ str[99] = '\0'; /* paranoia rulez! */
+ return str;
}
-char * DateFromIsoToString(const struct isodate iso) { //&
-
- char * ss = malloc (sizeof (char) * 100);
-
- char buffer[100] ="";
- sprintf(buffer, "%u", iso.year);
- strcat(ss,buffer);
- strcat(ss,"-");
- sprintf(buffer, "%u", (u_int)iso.week);
- strcat(ss,buffer);
- strcat(ss,"-");
- sprintf(buffer, "%u", (u_int)iso.weekday);
- strcat(ss,buffer);
-
- return ss;
- //ss << iso.year << "-" << (u_int)iso.week << "-" << (u_int)iso.weekday;
-
+char *
+DateFromIsoToString(
+ const struct isodate *iso)
+{
+
+ char * str = emalloc (sizeof (char) * 100);
+ snprintf(str, 100, "%u-W%02u-%02u",
+ iso->year, (u_int)iso->week, (u_int)iso->weekday);
+ str[99] = '\0'; /* paranoia rulez! */
+ return str;
}
-//boolean
-int IsEqualDateCal(const struct calendar expected, const struct calendar actual) { //&&
- if (expected.year == actual.year &&
- (!expected.yearday || expected.yearday == actual.yearday) &&
- expected.month == actual.month &&
- expected.monthday == actual.monthday) {
+int/*BOOL*/
+IsEqualDateCal(
+ const struct calendar *expected,
+ const struct calendar *actual)
+{
+ if (expected->year == actual->year &&
+ (!expected->yearday || expected->yearday == actual->yearday) &&
+ expected->month == actual->month &&
+ expected->monthday == actual->monthday) {
return TRUE;
} else {
- printf("expected: %s but was %s", DateFromCalToString(expected) ,DateFromCalToString(actual));
+ printf("expected: %s but was %s",
+ DateFromCalToString(expected),
+ DateFromCalToString(actual));
return FALSE;
}
}
-//boolean
-int IsEqualDateIso(const struct isodate expected, const struct isodate actual) { //&&
- if (expected.year == actual.year &&
- expected.week == actual.week &&
- expected.weekday == actual.weekday) {
+int/*BOOL*/
+IsEqualDateIso(
+ const struct isodate *expected,
+ const struct isodate *actual)
+{
+ if (expected->year == actual->year &&
+ expected->week == actual->week &&
+ expected->weekday == actual->weekday) {
return TRUE;
} else {
- printf("expected: %s but was %s", DateFromIsoToString(expected) ,DateFromIsoToString(actual));
+ printf("expected: %s but was %s",
+ DateFromIsoToString(expected),
+ DateFromIsoToString(actual));
return FALSE;
}
}
-// ---------------------------------------------------------------------
-// test cases
-// ---------------------------------------------------------------------
+/*
+ * ---------------------------------------------------------------------
+ * test cases
+ * ---------------------------------------------------------------------
+ */
+
+/* days before month, with a full-year pad at the upper end */
static const u_short real_month_table[2][13] = {
/* -*- table for regular years -*- */
{ 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365 },
@@ -216,7 +202,7 @@ static const u_short real_month_table[2][13] = {
{ 0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335, 366 }
};
-// days in month, with one month wrap-around at both ends
+/* days in month, with one month wrap-around at both ends */
static const u_short real_month_days[2][14] = {
/* -*- table for regular years -*- */
{ 31, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31, 31 },
@@ -224,17 +210,24 @@ static const u_short real_month_days[2][14] = {
{ 31, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31, 31 }
};
-// test the day/sec join & split ops, making sure that 32bit
-// intermediate results would definitely overflow and the hi DWORD of
-// the 'vint64' is definitely needed.
-void test_DaySplitMerge() {
+/* test the day/sec join & split ops, making sure that 32bit
+ * intermediate results would definitely overflow and the hi DWORD of
+ * the 'vint64' is definitely needed.
+ */
+void
+test_DaySplitMerge(void) {
int32 day,sec;
for (day = -1000000; day <= 1000000; day += 100) {
for (sec = -100000; sec <= 186400; sec += 10000) {
- vint64 merge = ntpcal_dayjoin(day, sec);
- ntpcal_split split = ntpcal_daysplit(&merge);
- int32 eday = day;
- int32 esec = sec;
+ vint64 merge;
+ ntpcal_split split;
+ int32 eday;
+ int32 esec;
+
+ merge = ntpcal_dayjoin(day, sec);
+ split = ntpcal_daysplit(&merge);
+ eday = day;
+ esec = sec;
while (esec >= 86400) {
eday += 1;
@@ -251,13 +244,14 @@ void test_DaySplitMerge() {
}
}
-void test_SplitYearDays1() {
+void
+test_SplitYearDays1(void) {
int32 eyd;
for (eyd = -1; eyd <= 365; eyd++) {
ntpcal_split split = ntpcal_split_yeardays(eyd, 0);
if (split.lo >= 0 && split.hi >= 0) {
- TEST_ASSERT_TRUE(isGT(12,split.hi));//EXPECT_GT(12, split.hi);
- TEST_ASSERT_TRUE(isGT(real_month_days[0][split.hi+1], split.lo));//EXPECT_GT(real_month_days[0][split.hi+1], split.lo);
+ TEST_ASSERT_TRUE(isGT(12,split.hi));
+ TEST_ASSERT_TRUE(isGT(real_month_days[0][split.hi+1], split.lo));
int32 tyd = real_month_table[0][split.hi] + split.lo;
TEST_ASSERT_EQUAL(eyd, tyd);
} else
@@ -265,14 +259,16 @@ void test_SplitYearDays1() {
}
}
-void test_SplitYearDays2() {
+void
+test_SplitYearDays2(void) {
int32 eyd;
for (eyd = -1; eyd <= 366; eyd++) {
ntpcal_split split = ntpcal_split_yeardays(eyd, 1);
if (split.lo >= 0 && split.hi >= 0) {
- //TEST_ASSERT_TRUE(12 > split.hi); //simpler version, works for basic types, doesn't work for complex structs
- TEST_ASSERT_TRUE(isGT(12,split.hi));//EXPECT_GT(12, split.hi);
- TEST_ASSERT_TRUE(isGT(real_month_days[1][split.hi+1], split.lo));//EXPECT_GT(real_month_days[1][split.hi+1], split.lo);
+ /* basic checks do not work on compunds :( */
+ /* would like: TEST_ASSERT_TRUE(12 > split.hi); */
+ TEST_ASSERT_TRUE(isGT(12,split.hi));
+ TEST_ASSERT_TRUE(isGT(real_month_days[1][split.hi+1], split.lo));
int32 tyd = real_month_table[1][split.hi] + split.lo;
TEST_ASSERT_EQUAL(eyd, tyd);
} else
@@ -280,17 +276,19 @@ void test_SplitYearDays2() {
}
}
-void test_RataDie1() {
- int32 testDate = 1; // 0001-01-01 (proleptic date)
+void
+test_RataDie1(void) {
+ int32 testDate = 1; /* 0001-01-01 (proleptic date) */
struct calendar expected = { 1, 1, 1, 1 };
struct calendar actual;
ntpcal_rd_to_date(&actual, testDate);
- TEST_ASSERT_TRUE(IsEqualDateCal(expected, actual));
+ TEST_ASSERT_TRUE(IsEqualDateCal(&expected, &actual));
}
-// check last day of february for first 10000 years
-void test_LeapYears1() {
+/* check last day of february for first 10000 years */
+void
+test_LeapYears1(void) {
struct calendar dateIn, dateOut;
for (dateIn.year = 1; dateIn.year < 10000; ++dateIn.year) {
@@ -300,12 +298,13 @@ void test_LeapYears1() {
ntpcal_rd_to_date(&dateOut, ntpcal_date_to_rd(&dateIn));
- TEST_ASSERT_TRUE(IsEqualDateCal(dateIn, dateOut));
+ TEST_ASSERT_TRUE(IsEqualDateCal(&dateIn, &dateOut));
}
}
-// check first day of march for first 10000 years
-void test_LeapYears2() {
+/* check first day of march for first 10000 years */
+void
+test_LeapYears2(void) {
struct calendar dateIn, dateOut;
for (dateIn.year = 1; dateIn.year < 10000; ++dateIn.year) {
@@ -314,19 +313,21 @@ void test_LeapYears2() {
dateIn.yearday = 60 + leapdays(dateIn.year);
ntpcal_rd_to_date(&dateOut, ntpcal_date_to_rd(&dateIn));
- TEST_ASSERT_TRUE(IsEqualDateCal(dateIn, dateOut));
+ TEST_ASSERT_TRUE(IsEqualDateCal(&dateIn, &dateOut));
}
}
-// Full roundtrip for 1601-01-01 to 2400-12-31
-// checks sequence of rata die numbers and validates date output
-// (since the input is all nominal days of the calendar in that range
-// and the result of the inverse calculation must match the input no
-// invalid output can occur.)
-void test_RoundTripDate() {
+/* Full roundtrip from 1601-01-01 to 2400-12-31
+ * checks sequence of rata die numbers and validates date output
+ * (since the input is all nominal days of the calendar in that range
+ * and the result of the inverse calculation must match the input no
+ * invalid output can occur.)
+ */
+void
+test_RoundTripDate(void) {
struct calendar truDate, expDate = { 1600, 0, 12, 31 };;
- int32 truRdn, expRdn = ntpcal_date_to_rd(&expDate);
int leaps;
+ int32 truRdn, expRdn = ntpcal_date_to_rd(&expDate);
while (expDate.year < 2400) {
expDate.year++;
@@ -345,14 +346,15 @@ void test_RoundTripDate() {
TEST_ASSERT_EQUAL(expRdn, truRdn);
ntpcal_rd_to_date(&truDate, truRdn);
- TEST_ASSERT_TRUE(IsEqualDateCal(expDate, truDate));
+ TEST_ASSERT_TRUE(IsEqualDateCal(&expDate, &truDate));
}
}
}
}
-// Roundtrip testing on calyearstart
-void test_RoundTripYearStart() {
+/* Roundtrip testing on calyearstart */
+void
+test_RoundTripYearStart(void) {
static const time_t pivot = 0;
u_int32 ntp, expys, truys;
struct calendar date;
@@ -367,8 +369,9 @@ void test_RoundTripYearStart() {
}
}
-// Roundtrip testing on calymonthstart
-void test_RoundTripMonthStart() {
+/* Roundtrip testing on calmonthstart */
+void
+test_RoundTripMonthStart(void) {
static const time_t pivot = 0;
u_int32 ntp, expms, trums;
struct calendar date;
@@ -383,8 +386,9 @@ void test_RoundTripMonthStart() {
}
}
-// Roundtrip testing on calweekstart
-void test_RoundTripWeekStart() {
+/* Roundtrip testing on calweekstart */
+void
+test_RoundTripWeekStart(void) {
static const time_t pivot = 0;
u_int32 ntp, expws, truws;
struct isodate date;
@@ -399,8 +403,9 @@ void test_RoundTripWeekStart() {
}
}
-// Roundtrip testing on caldaystart
-void test_RoundTripDayStart() {
+/* Roundtrip testing on caldaystart */
+void
+test_RoundTripDayStart(void) {
static const time_t pivot = 0;
u_int32 ntp, expds, truds;
struct calendar date;
@@ -412,5 +417,125 @@ void test_RoundTripDayStart() {
expds = ntpcal_date_to_ntp(&date);
TEST_ASSERT_EQUAL(expds, truds);
}
-}
+}
+
+/* ---------------------------------------------------------------------
+ * ISO8601 week calendar internals
+ *
+ * The ISO8601 week calendar implementation is simple in the terms of
+ * the math involved, but the implementation of the calculations must
+ * take care of a few things like overflow, floor division, and sign
+ * corrections.
+ *
+ * Most of the functions are straight forward, but converting from years
+ * to weeks and from weeks to years warrants some extra tests. These use
+ * an independent reference implementation of the conversion from years
+ * to weeks.
+ * ---------------------------------------------------------------------
+ */
+
+/* helper / reference implementation for the first week of year in the
+ * ISO8601 week calendar. This is based on the reference definition of
+ * the ISO week calendar start: The Monday closest to January,1st of the
+ * corresponding year in the Gregorian calendar.
+ */
+static int32_t
+refimpl_WeeksInIsoYears(
+ int32_t years)
+{
+ int32_t days, weeks;
+ days = ntpcal_weekday_close(
+ ntpcal_days_in_years(years) + 1,
+ CAL_MONDAY) - 1;
+ /* the weekday functions operate on RDN, while we want elapsed
+ * units here -- we have to add / sub 1 in the midlle / at the
+ * end of the operation that gets us the first day of the ISO
+ * week calendar day.
+ */
+ weeks = days / 7;
+ days = days % 7;
+ TEST_ASSERT_EQUAL(0, days); /* paranoia check... */
+ return weeks;
+}
+
+/* The next tests loop over 5000yrs, but should still be very fast. If
+ * they are not, the calendar needs a better implementation...
+ */
+void
+test_IsoCalYearsToWeeks(void) {
+ int32_t years;
+ int32_t wref, wcal;
+ for (years = -1000; years < 4000; ++years) {
+ /* get number of weeks before years (reference) */
+ wref = refimpl_WeeksInIsoYears(years);
+ /* get number of weeks before years (object-under-test) */
+ wcal = isocal_weeks_in_years(years);
+ TEST_ASSERT_EQUAL(wref, wcal);
+ }
+}
+
+void
+test_IsoCalWeeksToYearStart(void) {
+ int32_t years;
+ int32_t wref;
+ ntpcal_split ysplit;
+ for (years = -1000; years < 4000; ++years) {
+ /* get number of weeks before years (reference) */
+ wref = refimpl_WeeksInIsoYears(years);
+ /* reverse split */
+ ysplit = isocal_split_eraweeks(wref);
+ /* check invariants: same year, week 0 */
+ TEST_ASSERT_EQUAL(years, ysplit.hi);
+ TEST_ASSERT_EQUAL(0, ysplit.lo);
+ }
+}
+
+void
+test_IsoCalWeeksToYearEnd(void) {
+ int32_t years;
+ int32_t wref;
+ ntpcal_split ysplit;
+ for (years = -1000; years < 4000; ++years) {
+ /* get last week of previous year */
+ wref = refimpl_WeeksInIsoYears(years) - 1;
+ /* reverse split */
+ ysplit = isocal_split_eraweeks(wref);
+ /* check invariants: previous year, week 51 or 52 */
+ TEST_ASSERT_EQUAL(years-1, ysplit.hi);
+ TEST_ASSERT(ysplit.lo == 51 || ysplit.lo == 52);
+ }
+}
+
+void
+test_DaySecToDate(void) {
+ struct calendar cal;
+ int32_t days;
+
+ days = ntpcal_daysec_to_date(&cal, -86400);
+ TEST_ASSERT_MESSAGE((days==-1 && cal.hour==0 && cal.minute==0 && cal.second==0),
+ "failed for -86400");
+ days = ntpcal_daysec_to_date(&cal, -86399);
+ TEST_ASSERT_MESSAGE((days==-1 && cal.hour==0 && cal.minute==0 && cal.second==1),
+ "failed for -86399");
+
+ days = ntpcal_daysec_to_date(&cal, -1);
+ TEST_ASSERT_MESSAGE((days==-1 && cal.hour==23 && cal.minute==59 && cal.second==59),
+ "failed for -1");
+
+ days = ntpcal_daysec_to_date(&cal, 0);
+ TEST_ASSERT_MESSAGE((days==0 && cal.hour==0 && cal.minute==0 && cal.second==0),
+ "failed for 0");
+
+ days = ntpcal_daysec_to_date(&cal, 1);
+ TEST_ASSERT_MESSAGE((days==0 && cal.hour==0 && cal.minute==0 && cal.second==1),
+ "failed for 1");
+
+ days = ntpcal_daysec_to_date(&cal, 86399);
+ TEST_ASSERT_MESSAGE((days==0 && cal.hour==23 && cal.minute==59 && cal.second==59),
+ "failed for 86399");
+
+ days = ntpcal_daysec_to_date(&cal, 86400);
+ TEST_ASSERT_MESSAGE((days==1 && cal.hour==0 && cal.minute==0 && cal.second==0),
+ "failed for 86400");
+}
diff --git a/contrib/ntp/tests/libntp/caljulian.c b/contrib/ntp/tests/libntp/caljulian.c
index 907f25d..ecf5d9255 100644
--- a/contrib/ntp/tests/libntp/caljulian.c
+++ b/contrib/ntp/tests/libntp/caljulian.c
@@ -2,46 +2,53 @@
#include "ntp_calendar.h"
#include "ntp_stdlib.h"
-#include "unity.h"
+#include "unity.h"
#include "test-libntp.h"
-
#include <string.h>
-//#include <stdlib.h>
-//added struct to calendar!
-char * CalendarToString(const struct calendar cal) {
- char * ss = malloc (sizeof (char) * 100);
+char * CalendarToString(const struct calendar cal);
+int IsEqual(const struct calendar expected, const struct calendar actual);
+void setUp(void);
+void tearDown(void);
+void test_RegularTime(void);
+void test_LeapYear(void);
+void test_uLongBoundary(void);
+void test_uLongWrapped(void);
+
+
+char *
+CalendarToString(const struct calendar cal) {
+ char * str = emalloc (sizeof (char) * 100);
char buffer[100] ="";
- sprintf(buffer, "%u", cal.year);
- strcat(ss,buffer);
- strcat(ss,"-");
- sprintf(buffer, "%u", (u_int)cal.month);
- strcat(ss,buffer);
- strcat(ss,"-");
- sprintf(buffer, "%u", (u_int)cal.monthday);
- strcat(ss,buffer);
- strcat(ss," (");
- sprintf(buffer, "%u", (u_int) cal.yearday);
- strcat(ss,buffer);
- strcat(ss,") ");
- sprintf(buffer, "%u", (u_int)cal.hour);
- strcat(ss,buffer);
- strcat(ss,":");
- sprintf(buffer, "%u", (u_int)cal.minute);
- strcat(ss,buffer);
- strcat(ss,":");
- sprintf(buffer, "%u", (u_int)cal.second);
- strcat(ss,buffer);
- //ss << cal.year << "-" << (u_int)cal.month << "-" << (u_int)cal.monthday << " (" << cal.yearday << ") " << (u_int)cal.hour << ":" << (u_int)cal.minute << ":" << (u_int)cal.second;
- return ss;
+ snprintf(buffer, 100, "%u", cal.year);
+ strcat(str, buffer);
+ strcat(str, "-");
+ snprintf(buffer, 100, "%u", (u_int)cal.month);
+ strcat(str, buffer);
+ strcat(str, "-");
+ snprintf(buffer, 100, "%u", (u_int)cal.monthday);
+ strcat(str, buffer);
+ strcat(str, " (");
+ snprintf(buffer, 100, "%u", (u_int) cal.yearday);
+ strcat(str, buffer);
+ strcat(str, ") ");
+ snprintf(buffer, 100, "%u", (u_int)cal.hour);
+ strcat(str, buffer);
+ strcat(str, ":");
+ snprintf(buffer, 100, "%u", (u_int)cal.minute);
+ strcat(str, buffer);
+ strcat(str, ":");
+ snprintf(buffer, 100, "%u", (u_int)cal.second);
+ strcat(str, buffer);
+ return str;
}
-//tehnically boolean
-int IsEqual(const struct calendar expected, const struct calendar actual) {
+int // technically boolean
+IsEqual(const struct calendar expected, const struct calendar actual) {
if (expected.year == actual.year &&
(expected.yearday == actual.yearday ||
(expected.month == actual.month &&
@@ -58,20 +65,22 @@ int IsEqual(const struct calendar expected, const struct calendar actual) {
}
-void setUp()
+void
+setUp()
{
-
ntpcal_set_timefunc(timefunc);
settime(1970, 1, 1, 0, 0, 0);
}
-void tearDown()
+void
+tearDown()
{
ntpcal_set_timefunc(NULL);
}
-void test_RegularTime() {
+void
+test_RegularTime(void) {
u_long testDate = 3485080800UL; // 2010-06-09 14:00:00
struct calendar expected = {2010,160,6,9,14,0,0};
@@ -82,7 +91,8 @@ void test_RegularTime() {
TEST_ASSERT_TRUE(IsEqual(expected, actual));
}
-void test_LeapYear() {
+void
+test_LeapYear(void) {
u_long input = 3549902400UL; // 2012-06-28 20:00:00Z
struct calendar expected = {2012, 179, 6, 28, 20, 0, 0};
@@ -93,7 +103,8 @@ void test_LeapYear() {
TEST_ASSERT_TRUE(IsEqual(expected, actual));
}
-void test_uLongBoundary() {
+void
+test_uLongBoundary(void) {
u_long time = 4294967295UL; // 2036-02-07 6:28:15
struct calendar expected = {2036,0,2,7,6,28,15};
@@ -104,7 +115,8 @@ void test_uLongBoundary() {
TEST_ASSERT_TRUE(IsEqual(expected, actual));
}
-void test_uLongWrapped() {
+void
+test_uLongWrapped(void) {
u_long time = 0;
struct calendar expected = {2036,0,2,7,6,28,16};
diff --git a/contrib/ntp/tests/libntp/caltontp.c b/contrib/ntp/tests/libntp/caltontp.c
index 9ce4854..34173d2 100644
--- a/contrib/ntp/tests/libntp/caltontp.c
+++ b/contrib/ntp/tests/libntp/caltontp.c
@@ -1,6 +1,11 @@
#include "config.h"
-#include "unity.h"
#include "ntp_calendar.h"
+#include "unity.h"
+
+void test_DateGivenMonthDay(void);
+void test_DateGivenYearDay(void);
+void test_DateLeapYear(void);
+void test_WraparoundDateIn2036(void);
void
test_DateGivenMonthDay(void) {
diff --git a/contrib/ntp/tests/libntp/calyearstart.c b/contrib/ntp/tests/libntp/calyearstart.c
index b293c93..271ea12 100644
--- a/contrib/ntp/tests/libntp/calyearstart.c
+++ b/contrib/ntp/tests/libntp/calyearstart.c
@@ -1,25 +1,30 @@
#include "config.h"
-#include "ntp_stdlib.h" //test fail without this include, for some reason
+#include "ntp_stdlib.h"
#include "ntp_calendar.h"
#include "unity.h"
#include "test-libntp.h"
+void setUp(void);
+void tearDown(void);
+void test_NoWrapInDateRange(void);
+void test_NoWrapInDateRangeLeapYear(void);
+void test_WrapInDateRange(void);
-void setUp()
+void setUp(void)
{
ntpcal_set_timefunc(timefunc);
settime(1970, 1, 1, 0, 0, 0);
}
-void tearDown()
+void tearDown(void)
{
ntpcal_set_timefunc(NULL);
}
-void test_NoWrapInDateRange() {
+void test_NoWrapInDateRange(void) {
const u_int32 input = 3486372600UL; // 2010-06-24 12:50:00.
const u_int32 expected = 3471292800UL; // 2010-01-01 00:00:00
@@ -27,7 +32,7 @@ void test_NoWrapInDateRange() {
TEST_ASSERT_EQUAL(expected, calyearstart(input, NULL));
}
-void test_NoWrapInDateRangeLeapYear() {
+void test_NoWrapInDateRangeLeapYear(void) {
const u_int32 input = 3549528000UL; // 2012-06-24 12:00:00
const u_int32 expected = 3534364800UL; // 2012-01-01 00:00:00
@@ -35,7 +40,7 @@ void test_NoWrapInDateRangeLeapYear() {
TEST_ASSERT_EQUAL(expected, calyearstart(input, NULL));
}
-void test_WrapInDateRange() {
+void test_WrapInDateRange(void) {
const u_int32 input = 19904UL; // 2036-02-07 12:00:00
const u_int32 expected = 4291747200UL; // 2036-01-01 00:00:00
diff --git a/contrib/ntp/tests/libntp/clocktime.c b/contrib/ntp/tests/libntp/clocktime.c
index a9c0fec..67ca401 100644
--- a/contrib/ntp/tests/libntp/clocktime.c
+++ b/contrib/ntp/tests/libntp/clocktime.c
@@ -6,33 +6,49 @@
#include "unity.h"
#include "test-libntp.h"
-
-// ---------------------------------------------------------------------
-// test fixture
-//
-// The clocktimeTest uses the NTP calendar feature to use a mockup
-// function for getting the current system time, so the tests are not
-// dependent on the actual system time.
-
-
-void setUp()
+void setUp(void);
+void tearDown(void);
+void test_CurrentYear(void);
+void test_CurrentYearFuzz(void);
+void test_TimeZoneOffset(void);
+void test_WrongYearStart(void);
+void test_PreviousYear(void);
+void test_NextYear(void);
+void test_NoReasonableConversion(void);
+int isLE(u_int32 diff,u_int32 actual);
+void test_AlwaysInLimit(void);
+
+
+/* ---------------------------------------------------------------------
+ * test fixture
+ *
+ * The clocktimeTest uses the NTP calendar feature to use a mockup
+ * function for getting the current system time, so the tests are not
+ * dependent on the actual system time.
+ */
+
+void
+setUp()
{
ntpcal_set_timefunc(timefunc);
settime(2000, 1, 1, 0, 0, 0);
}
-void tearDown()
+void
+tearDown()
{
ntpcal_set_timefunc(NULL);
}
-// ---------------------------------------------------------------------
-// test cases
+/* ---------------------------------------------------------------------
+ * test cases
+ */
-void test_CurrentYear() {
- // Timestamp: 2010-06-24 12:50:00Z
+void
+test_CurrentYear(void) {
+ /* Timestamp: 2010-06-24 12:50:00Z */
const u_int32 timestamp = 3486372600UL;
- const u_int32 expected = timestamp; // exactly the same.
+ const u_int32 expected = timestamp; /* exactly the same. */
const int yday=175, hour=12, minute=50, second=0, tzoff=0;
@@ -44,7 +60,8 @@ void test_CurrentYear() {
TEST_ASSERT_EQUAL(expected, actual);
}
-void test_CurrentYearFuzz() {
+void
+test_CurrentYearFuzz(void) {
/*
* Timestamp (rec_ui) is: 2010-06-24 12:50:00
* Time sent into function is 12:00:00.
@@ -53,8 +70,8 @@ void test_CurrentYearFuzz() {
* timestamp for the 12:00:00 time.
*/
- const u_int32 timestamp = 3486372600UL; // 2010-06-24 12:50:00Z
- const u_int32 expected = 3486369600UL; // 2010-06-24 12:00:00Z
+ const u_int32 timestamp = 3486372600UL; /* 2010-06-24 12:50:00Z */
+ const u_int32 expected = 3486369600UL; /* 2010-06-24 12:00:00Z */
const int yday=175, hour=12, minute=0, second=0, tzoff=0;
@@ -66,7 +83,8 @@ void test_CurrentYearFuzz() {
TEST_ASSERT_EQUAL(expected, actual);
}
-void test_TimeZoneOffset() {
+void
+test_TimeZoneOffset(void) {
/*
* Timestamp (rec_ui) is: 2010-06-24 12:00:00 +0800
* (which is 2010-06-24 04:00:00Z)
@@ -86,7 +104,8 @@ void test_TimeZoneOffset() {
TEST_ASSERT_EQUAL(expected, actual);
}
-void test_WrongYearStart() {
+void
+test_WrongYearStart(void) {
/*
* Timestamp (rec_ui) is: 2010-01-02 11:00:00Z
* Time sent into function is 11:00:00.
@@ -97,7 +116,7 @@ void test_WrongYearStart() {
const int yday=2, hour=11, minute=0, second=0, tzoff=0;
- u_long yearstart = 302024100UL; // Yearstart of 2009.
+ u_long yearstart = 302024100UL; /* Yearstart of 2009. */
u_int32 actual;
TEST_ASSERT_TRUE(clocktime(yday, hour, minute, second, tzoff, timestamp,
@@ -105,7 +124,8 @@ void test_WrongYearStart() {
TEST_ASSERT_EQUAL(expected, actual);
}
-void test_PreviousYear() {
+void
+test_PreviousYear(void) {
/*
* Timestamp is: 2010-01-01 01:00:00Z
* Time sent into function is 23:00:00
@@ -124,7 +144,8 @@ void test_PreviousYear() {
TEST_ASSERT_EQUAL(expected, actual);
}
-void test_NextYear() {
+void
+test_NextYear(void) {
/*
* Timestamp is: 2009-12-31 23:00:00Z
* Time sent into function is 01:00:00
@@ -142,7 +163,8 @@ void test_NextYear() {
TEST_ASSERT_EQUAL(expected, actual);
}
-void test_NoReasonableConversion() {
+void
+test_NoReasonableConversion(void) {
/* Timestamp is: 2010-01-02 11:00:00Z */
const u_int32 timestamp = 3471418800UL;
@@ -154,9 +176,9 @@ void test_NoReasonableConversion() {
&yearstart, &actual));
}
-// *** FUNCTION isLE, to simulate gtest's ASSERT_LE using Unity's TEST_ASSERT_TRUE
-//tehnically boolean
-int isLE(u_int32 diff,u_int32 actual){
+
+int/*BOOL*/
+isLE(u_int32 diff,u_int32 actual){
if(diff <= actual){
return TRUE;
}
@@ -164,7 +186,8 @@ int isLE(u_int32 diff,u_int32 actual){
}
-void test_AlwaysInLimit() {
+void
+test_AlwaysInLimit(void) {
/* Timestamp is: 2010-01-02 11:00:00Z */
const u_int32 timestamp = 3471418800UL;
const u_short prime_incs[] = { 127, 151, 163, 179 };
@@ -174,7 +197,6 @@ void test_AlwaysInLimit() {
u_short ydayinc;
int hour;
int minute;
- int second;
u_long yearstart;
u_int32 actual;
u_int32 diff;
@@ -192,8 +214,7 @@ void test_AlwaysInLimit() {
diff = actual - timestamp;
if (diff >= 0x80000000UL)
diff = ~diff + 1;
- TEST_ASSERT_TRUE(isLE(diff, (183u * SECSPERDAY))); // adding new function to return TRUE if first number is less or equal the second
- //TEST_ASSERT_LE(diff, (183u * SECSPERDAY));
+ TEST_ASSERT_TRUE(isLE(diff, (183u * SECSPERDAY)));
}
}
}
diff --git a/contrib/ntp/tests/libntp/decodenetnum.c b/contrib/ntp/tests/libntp/decodenetnum.c
index 681b712..0e9bc34 100644
--- a/contrib/ntp/tests/libntp/decodenetnum.c
+++ b/contrib/ntp/tests/libntp/decodenetnum.c
@@ -1,12 +1,21 @@
#include "config.h"
#include "ntp_stdlib.h"
-#include "ntp_calendar.h"
+#include "sockaddrtest.h"
+
#include "unity.h"
-#include "sockaddrtest.h"
+extern void test_IPv4AddressOnly(void);
+extern void test_IPv4AddressWithPort(void);
+//#ifdef ISC_PLATFORM_HAVEIPV6
+extern void test_IPv6AddressOnly(void);
+extern void test_IPv6AddressWithPort(void);
+//#endif /* ISC_PLATFORM_HAVEIPV6 */
+extern void test_IllegalAddress(void);
+extern void test_IllegalCharInPort(void);
-void test_IPv4AddressOnly(void) {
+void
+test_IPv4AddressOnly(void) {
const char *str = "192.0.2.1";
sockaddr_u actual;
@@ -19,7 +28,8 @@ void test_IPv4AddressOnly(void) {
TEST_ASSERT_TRUE(IsEqual(expected, actual));
}
-void test_IPv4AddressWithPort(void) {
+void
+test_IPv4AddressWithPort(void) {
const char *str = "192.0.2.2:2000";
sockaddr_u actual;
@@ -32,10 +42,15 @@ void test_IPv4AddressWithPort(void) {
TEST_ASSERT_TRUE(IsEqual(expected, actual));
}
-void test_IPv6AddressOnly(void) {
+
+void
+test_IPv6AddressOnly(void) {
+
+//#ifdef ISC_PLATFORM_HAVEIPV6 //looks like HAVEIPV6 checks if system has IPV6 capabilies. WANTIPV6 can be changed with build --disable-ipv6
+#ifdef ISC_PLATFORM_WANTIPV6
const struct in6_addr address = {
0x20, 0x01, 0x0d, 0xb8,
- 0x85, 0xa3, 0x08, 0xd3,
+ 0x85, 0xa3, 0x08, 0xd3,
0x13, 0x19, 0x8a, 0x2e,
0x03, 0x70, 0x73, 0x34
};
@@ -50,12 +65,24 @@ void test_IPv6AddressOnly(void) {
TEST_ASSERT_TRUE(decodenetnum(str, &actual));
TEST_ASSERT_TRUE(IsEqual(expected, actual));
+
+#else
+ TEST_IGNORE_MESSAGE("IPV6 disabled in build, skipping.");
+#endif /* ISC_PLATFORM_HAVEIPV6 */
+
+
}
-void test_IPv6AddressWithPort(void) {
+
+
+void
+test_IPv6AddressWithPort(void) {
+
+#ifdef ISC_PLATFORM_WANTIPV6
+
const struct in6_addr address = {
0x20, 0x01, 0x0d, 0xb8,
- 0x85, 0xa3, 0x08, 0xd3,
+ 0x85, 0xa3, 0x08, 0xd3,
0x13, 0x19, 0x8a, 0x2e,
0x03, 0x70, 0x73, 0x34
};
@@ -70,16 +97,23 @@ void test_IPv6AddressWithPort(void) {
TEST_ASSERT_TRUE(decodenetnum(str, &actual));
TEST_ASSERT_TRUE(IsEqual(expected, actual));
+
+#else
+ TEST_IGNORE_MESSAGE("IPV6 disabled in build, skipping.");
+#endif /* ISC_PLATFORM_HAVEIPV6 */
}
-void test_IllegalAddress(void) {
+
+void
+test_IllegalAddress(void) {
const char *str = "192.0.2.270:2000";
sockaddr_u actual;
TEST_ASSERT_FALSE(decodenetnum(str, &actual));
}
-void test_IllegalCharInPort(void) {
+void
+test_IllegalCharInPort(void) {
/* An illegal port does not make the decodenetnum fail, but instead
* makes it use the standard port.
*/
diff --git a/contrib/ntp/tests/libntp/g_a_md5encrypt.cpp b/contrib/ntp/tests/libntp/g_a_md5encrypt.cpp
deleted file mode 100644
index 691bf78..0000000
--- a/contrib/ntp/tests/libntp/g_a_md5encrypt.cpp
+++ /dev/null
@@ -1,89 +0,0 @@
-#include "g_libntptest.h"
-
-extern "C" {
-#ifdef OPENSSL
-# include "openssl/err.h"
-# include "openssl/rand.h"
-# include "openssl/evp.h"
-#endif
-#include "ntp.h"
-#include "ntp_stdlib.h"
-};
-
-class a_md5encryptTest : public libntptest {
-protected:
-};
-
-/*
- * Example packet with MD5 hash calculated manually.
- */
-const int keytype = KEY_TYPE_MD5;
-const char *key = "abcdefgh";
-const u_short keyLength = 8;
-const char *packet = "ijklmnopqrstuvwx";
-const int packetLength = 16;
-const int keyIdLength = 4;
-const int digestLength = 16;
-const int totalLength = packetLength + keyIdLength + digestLength;
-const char *expectedPacket = "ijklmnopqrstuvwx\0\0\0\0\x0c\x0e\x84\xcf\x0b\xb7\xa8\x68\x8e\x52\x38\xdb\xbc\x1c\x39\x53";
-
-TEST_F(a_md5encryptTest, Encrypt) {
- char *packetPtr = new char[totalLength];
- memset(packetPtr+packetLength, 0, keyIdLength);
- memcpy(packetPtr, packet, packetLength);
-
- cache_secretsize = keyLength;
-
- int length = MD5authencrypt(keytype, (u_char*)key, (u_int32*)packetPtr, packetLength);
-
- EXPECT_TRUE(MD5authdecrypt(keytype, (u_char*)key, (u_int32*)packetPtr, packetLength, length));
-
- EXPECT_EQ(20, length);
- EXPECT_TRUE(memcmp(expectedPacket, packetPtr, totalLength) == 0);
-
- delete[] packetPtr;
-}
-
-TEST_F(a_md5encryptTest, DecryptValid) {
- cache_secretsize = keyLength;
-
- EXPECT_TRUE(MD5authdecrypt(keytype, (u_char*)key, (u_int32*)expectedPacket, packetLength, 20));
-}
-
-TEST_F(a_md5encryptTest, DecryptInvalid) {
- cache_secretsize = keyLength;
-
- const char *invalidPacket = "ijklmnopqrstuvwx\0\0\0\0\x0c\x0e\x84\xcf\x0b\xb7\xa8\x68\x8e\x52\x38\xdb\xbc\x1c\x39\x54";
-
- EXPECT_FALSE(MD5authdecrypt(keytype, (u_char*)key, (u_int32*)invalidPacket, packetLength, 20));
-}
-
-TEST_F(a_md5encryptTest, IPv4AddressToRefId) {
- sockaddr_u addr;
- addr.sa4.sin_family = AF_INET;
- addr.sa4.sin_port = htons(80);
-
- u_int32 address = inet_addr("192.0.2.1");
- addr.sa4.sin_addr.s_addr = address;
-
- EXPECT_EQ(address, addr2refid(&addr));
-}
-
-TEST_F(a_md5encryptTest, IPv6AddressToRefId) {
- const struct in6_addr address = {
- 0x20, 0x01, 0x0d, 0xb8,
- 0x85, 0xa3, 0x08, 0xd3,
- 0x13, 0x19, 0x8a, 0x2e,
- 0x03, 0x70, 0x73, 0x34
- };
-
-
- sockaddr_u addr;
- addr.sa6.sin6_family = AF_INET6;
-
- addr.sa6.sin6_addr = address;
-
- const int expected = 0x75cffd52;
-
- EXPECT_EQ(expected, addr2refid(&addr));
-}
diff --git a/contrib/ntp/tests/libntp/g_atoint.cpp b/contrib/ntp/tests/libntp/g_atoint.cpp
deleted file mode 100644
index 9a8283f..0000000
--- a/contrib/ntp/tests/libntp/g_atoint.cpp
+++ /dev/null
@@ -1,48 +0,0 @@
-#include "g_libntptest.h"
-
-class atointTest : public libntptest {
-};
-
-TEST_F(atointTest, RegularPositive) {
- const char *str = "17";
- long val;
-
- ASSERT_TRUE(atoint(str, &val));
- EXPECT_EQ(17, val);
-}
-
-TEST_F(atointTest, RegularNegative) {
- const char *str = "-20";
- long val;
-
- ASSERT_TRUE(atoint(str, &val));
- EXPECT_EQ(-20, val);
-}
-
-TEST_F(atointTest, PositiveOverflowBoundary) {
- const char *str = "2147483648";
- long val;
-
- EXPECT_FALSE(atoint(str, &val));
-}
-
-TEST_F(atointTest, NegativeOverflowBoundary) {
- const char *str = "-2147483649";
- long val;
-
- EXPECT_FALSE(atoint(str, &val));
-}
-
-TEST_F(atointTest, PositiveOverflowBig) {
- const char *str = "2300000000";
- long val;
-
- EXPECT_FALSE(atoint(str, &val));
-}
-
-TEST_F(atointTest, IllegalCharacter) {
- const char *str = "4500l";
- long val;
-
- EXPECT_FALSE(atoint(str, &val));
-}
diff --git a/contrib/ntp/tests/libntp/g_atouint.cpp b/contrib/ntp/tests/libntp/g_atouint.cpp
deleted file mode 100644
index ba261db..0000000
--- a/contrib/ntp/tests/libntp/g_atouint.cpp
+++ /dev/null
@@ -1,40 +0,0 @@
-#include "g_libntptest.h"
-
-class atouintTest : public libntptest {
-};
-
-TEST_F(atouintTest, RegularPositive) {
- const char *str = "305";
- u_long actual;
-
- ASSERT_TRUE(atouint(str, &actual));
- EXPECT_EQ(305, actual);
-}
-
-TEST_F(atouintTest, PositiveOverflowBoundary) {
- const char *str = "4294967296";
- u_long actual;
-
- ASSERT_FALSE(atouint(str, &actual));
-}
-
-TEST_F(atouintTest, PositiveOverflowBig) {
- const char *str = "8000000000";
- u_long actual;
-
- ASSERT_FALSE(atouint(str, &actual));
-}
-
-TEST_F(atouintTest, Negative) {
- const char *str = "-1";
- u_long actual;
-
- ASSERT_FALSE(atouint(str, &actual));
-}
-
-TEST_F(atouintTest, IllegalChar) {
- const char *str = "50c3";
- u_long actual;
-
- ASSERT_FALSE(atouint(str, &actual));
-}
diff --git a/contrib/ntp/tests/libntp/g_authkeys.cpp b/contrib/ntp/tests/libntp/g_authkeys.cpp
deleted file mode 100644
index 773112e..0000000
--- a/contrib/ntp/tests/libntp/g_authkeys.cpp
+++ /dev/null
@@ -1,100 +0,0 @@
-/* This file contains test for both libntp/authkeys.c and libntp/authusekey.c */
-
-#include "g_libntptest.h"
-
-extern "C" {
-#ifdef OPENSSL
-# include "openssl/err.h"
-# include "openssl/rand.h"
-# include "openssl/evp.h"
-#endif
-#include "ntp.h"
-#include "ntp_stdlib.h"
-};
-
-class authkeysTest : public libntptest {
-protected:
- static const int KEYTYPE = KEY_TYPE_MD5;
-
- virtual void SetUp() {
- /*
- * init_auth() is called by tests_main.cpp earlier. It
- * does not initialize global variables like
- * authnumkeys, so let's reset them to zero here.
- */
- authnumkeys = 0;
-
- /*
- * Especially, empty the key cache!
- */
- cache_keyid = 0;
- cache_type = 0;
- cache_flags = 0;
- cache_secret = NULL;
- cache_secretsize = 0;
- }
-
- void AddTrustedKey(keyid_t keyno) {
- /*
- * We need to add a MD5-key in addition to setting the
- * trust, because authhavekey() requires type != 0.
- */
- MD5auth_setkey(keyno, KEYTYPE, NULL, 0);
-
- authtrust(keyno, TRUE);
- }
-
- void AddUntrustedKey(keyid_t keyno) {
- authtrust(keyno, FALSE);
- }
-};
-
-TEST_F(authkeysTest, AddTrustedKeys) {
- const keyid_t KEYNO1 = 5;
- const keyid_t KEYNO2 = 8;
-
- AddTrustedKey(KEYNO1);
- AddTrustedKey(KEYNO2);
-
- EXPECT_TRUE(authistrusted(KEYNO1));
- EXPECT_TRUE(authistrusted(KEYNO2));
-}
-
-TEST_F(authkeysTest, AddUntrustedKey) {
- const keyid_t KEYNO = 3;
-
- AddUntrustedKey(KEYNO);
-
- EXPECT_FALSE(authistrusted(KEYNO));
-}
-
-TEST_F(authkeysTest, HaveKeyCorrect) {
- const keyid_t KEYNO = 3;
-
- AddTrustedKey(KEYNO);
-
- EXPECT_TRUE(auth_havekey(KEYNO));
- EXPECT_TRUE(authhavekey(KEYNO));
-}
-
-TEST_F(authkeysTest, HaveKeyIncorrect) {
- const keyid_t KEYNO = 2;
-
- EXPECT_FALSE(auth_havekey(KEYNO));
- EXPECT_FALSE(authhavekey(KEYNO));
-}
-
-TEST_F(authkeysTest, AddWithAuthUseKey) {
- const keyid_t KEYNO = 5;
- const char* KEY = "52a";
-
- EXPECT_TRUE(authusekey(KEYNO, KEYTYPE, (u_char*)KEY));
-}
-
-TEST_F(authkeysTest, EmptyKey) {
- const keyid_t KEYNO = 3;
- const char* KEY = "";
-
-
- EXPECT_FALSE(authusekey(KEYNO, KEYTYPE, (u_char*)KEY));
-}
diff --git a/contrib/ntp/tests/libntp/g_buftvtots.cpp b/contrib/ntp/tests/libntp/g_buftvtots.cpp
deleted file mode 100644
index 050398b..0000000
--- a/contrib/ntp/tests/libntp/g_buftvtots.cpp
+++ /dev/null
@@ -1,61 +0,0 @@
-#include "g_lfptest.h"
-
-extern "C" {
-#include "ntp_unixtime.h"
-};
-
-// Required for Solaris.
-#include <math.h>
-
-class buftvtotsTest : public lfptest {
-};
-
-#ifndef SYS_WINNT
-TEST_F(buftvtotsTest, ZeroBuffer) {
- const timeval input = {0, 0};
- const l_fp expected = {0 + JAN_1970, 0};
-
- l_fp actual;
-
- ASSERT_TRUE(buftvtots((const char*)(&input), &actual));
- EXPECT_TRUE(IsEqual(expected, actual));
-}
-
-TEST_F(buftvtotsTest, IntegerAndFractionalBuffer) {
- const timeval input = {5, 500000}; // 5.5
- const l_fp expected = {5 + JAN_1970, HALF};
-
- l_fp actual;
-
- ASSERT_TRUE(buftvtots((const char*)(&input), &actual));
-
- // Compare the fractional part with an absolute error given.
- EXPECT_EQ(expected.l_ui, actual.l_ui);
-
- double expectedDouble, actualDouble;
- M_LFPTOD(0, expected.l_uf, expectedDouble);
- M_LFPTOD(0, actual.l_uf, actualDouble);
-
- // The error should be less than 0.5 us
- EXPECT_NEAR(expectedDouble, actualDouble, 0.0000005);
-}
-
-TEST_F(buftvtotsTest, IllegalMicroseconds) {
- const timeval input = {0, 1100000}; // > 999 999 microseconds.
-
- l_fp actual;
-
- ASSERT_FALSE(buftvtots((const char*)(&input), &actual));
-}
-
-#else
-TEST_F(buftvtotsTest, AlwaysFalseOnWindows) {
- /*
- * Under Windows, buftvtots will just return
- * 0 (false).
- */
- l_fp actual;
- ASSERT_FALSE(buftvtots("", &actual));
-}
-
-#endif
diff --git a/contrib/ntp/tests/libntp/g_calendar.cpp b/contrib/ntp/tests/libntp/g_calendar.cpp
deleted file mode 100644
index 2db9ff7..0000000
--- a/contrib/ntp/tests/libntp/g_calendar.cpp
+++ /dev/null
@@ -1,337 +0,0 @@
-#include "g_libntptest.h"
-
-extern "C" {
-#include "ntp_calendar.h"
-}
-
-#include <string>
-#include <sstream>
-
-class calendarTest : public libntptest {
-protected:
- static int leapdays(int year);
-
- std::string CalendarToString(const calendar &cal);
- std::string CalendarToString(const isodate &iso);
- ::testing::AssertionResult IsEqual(const calendar &expected, const calendar &actual);
- ::testing::AssertionResult IsEqual(const isodate &expected, const isodate &actual);
-
- std::string DateToString(const calendar &cal);
- std::string DateToString(const isodate &iso);
- ::testing::AssertionResult IsEqualDate(const calendar &expected, const calendar &actual);
- ::testing::AssertionResult IsEqualDate(const isodate &expected, const isodate &actual);
-};
-
-
-// ---------------------------------------------------------------------
-// test support stuff
-// ---------------------------------------------------------------------
-int
-calendarTest::leapdays(int year)
-{
- if (year % 400 == 0)
- return 1;
- if (year % 100 == 0)
- return 0;
- if (year % 4 == 0)
- return 1;
- return 0;
-}
-
-std::string
-calendarTest::CalendarToString(const calendar &cal) {
- std::ostringstream ss;
- ss << cal.year << "-" << (u_int)cal.month << "-" << (u_int)cal.monthday
- << " (" << cal.yearday << ") " << (u_int)cal.hour << ":"
- << (u_int)cal.minute << ":" << (u_int)cal.second;
- return ss.str();
-}
-
-std::string
-calendarTest:: CalendarToString(const isodate &iso) {
- std::ostringstream ss;
- ss << iso.year << "-" << (u_int)iso.week << "-" << (u_int)iso.weekday
- << (u_int)iso.hour << ":" << (u_int)iso.minute << ":" << (u_int)iso.second;
- return ss.str();
-}
-
-::testing::AssertionResult
-calendarTest:: IsEqual(const calendar &expected, const calendar &actual) {
- if (expected.year == actual.year &&
- (!expected.yearday || expected.yearday == actual.yearday) &&
- expected.month == actual.month &&
- expected.monthday == actual.monthday &&
- expected.hour == actual.hour &&
- expected.minute == actual.minute &&
- expected.second == actual.second) {
- return ::testing::AssertionSuccess();
- } else {
- return ::testing::AssertionFailure()
- << "expected: " << CalendarToString(expected) << " but was "
- << CalendarToString(actual);
- }
-}
-
-::testing::AssertionResult
-calendarTest:: IsEqual(const isodate &expected, const isodate &actual) {
- if (expected.year == actual.year &&
- expected.week == actual.week &&
- expected.weekday == actual.weekday &&
- expected.hour == actual.hour &&
- expected.minute == actual.minute &&
- expected.second == actual.second) {
- return ::testing::AssertionSuccess();
- } else {
- return ::testing::AssertionFailure()
- << "expected: " << CalendarToString(expected) << " but was "
- << CalendarToString(actual);
- }
-}
-
-std::string
-calendarTest:: DateToString(const calendar &cal) {
- std::ostringstream ss;
- ss << cal.year << "-" << (u_int)cal.month << "-" << (u_int)cal.monthday
- << " (" << cal.yearday << ")";
- return ss.str();
-}
-
-std::string
-calendarTest:: DateToString(const isodate &iso) {
- std::ostringstream ss;
- ss << iso.year << "-" << (u_int)iso.week << "-" << (u_int)iso.weekday;
- return ss.str();
-}
-
-::testing::AssertionResult
-calendarTest:: IsEqualDate(const calendar &expected, const calendar &actual) {
- if (expected.year == actual.year &&
- (!expected.yearday || expected.yearday == actual.yearday) &&
- expected.month == actual.month &&
- expected.monthday == actual.monthday) {
- return ::testing::AssertionSuccess();
- } else {
- return ::testing::AssertionFailure()
- << "expected: " << DateToString(expected) << " but was "
- << DateToString(actual);
- }
-}
-
-::testing::AssertionResult
-calendarTest:: IsEqualDate(const isodate &expected, const isodate &actual) {
- if (expected.year == actual.year &&
- expected.week == actual.week &&
- expected.weekday == actual.weekday) {
- return ::testing::AssertionSuccess();
- } else {
- return ::testing::AssertionFailure()
- << "expected: " << DateToString(expected) << " but was "
- << DateToString(actual);
- }
-}
-
-
-// ---------------------------------------------------------------------
-// test cases
-// ---------------------------------------------------------------------
-static const u_short real_month_table[2][13] = {
- /* -*- table for regular years -*- */
- { 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365 },
- /* -*- table for leap years -*- */
- { 0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335, 366 }
-};
-
-// days in month, with one month wrap-around at both ends
-static const u_short real_month_days[2][14] = {
- /* -*- table for regular years -*- */
- { 31, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31, 31 },
- /* -*- table for leap years -*- */
- { 31, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31, 31 }
-};
-
-// test the day/sec join & split ops, making sure that 32bit
-// intermediate results would definitely overflow and the hi DWORD of
-// the 'vint64' is definitely needed.
-TEST_F(calendarTest, DaySplitMerge) {
- for (int32 day = -1000000; day <= 1000000; day += 100) {
- for (int32 sec = -100000; sec <= 186400; sec += 10000) {
- vint64 merge = ntpcal_dayjoin(day, sec);
- ntpcal_split split = ntpcal_daysplit(&merge);
- int32 eday = day;
- int32 esec = sec;
-
- while (esec >= 86400) {
- eday += 1;
- esec -= 86400;
- }
- while (esec < 0) {
- eday -= 1;
- esec += 86400;
- }
-
- EXPECT_EQ(eday, split.hi);
- EXPECT_EQ(esec, split.lo);
- }
- }
-}
-
-TEST_F(calendarTest, SplitYearDays1) {
- for (int32 eyd = -1; eyd <= 365; eyd++) {
- ntpcal_split split = ntpcal_split_yeardays(eyd, 0);
- if (split.lo >= 0 && split.hi >= 0) {
- EXPECT_GT(12, split.hi);
- EXPECT_GT(real_month_days[0][split.hi+1], split.lo);
- int32 tyd = real_month_table[0][split.hi] + split.lo;
- EXPECT_EQ(eyd, tyd);
- } else
- EXPECT_TRUE(eyd < 0 || eyd > 364);
- }
-}
-
-TEST_F(calendarTest, SplitYearDays2) {
- for (int32 eyd = -1; eyd <= 366; eyd++) {
- ntpcal_split split = ntpcal_split_yeardays(eyd, 1);
- if (split.lo >= 0 && split.hi >= 0) {
- EXPECT_GT(12, split.hi);
- EXPECT_GT(real_month_days[1][split.hi+1], split.lo);
- int32 tyd = real_month_table[1][split.hi] + split.lo;
- EXPECT_EQ(eyd, tyd);
- } else
- EXPECT_TRUE(eyd < 0 || eyd > 365);
- }
-}
-
-TEST_F(calendarTest, RataDie1) {
- int32 testDate = 1; // 0001-01-01 (proleptic date)
- calendar expected = { 1, 1, 1, 1 };
- calendar actual;
-
- ntpcal_rd_to_date(&actual, testDate);
- EXPECT_TRUE(IsEqualDate(expected, actual));
-}
-
-// check last day of february for first 10000 years
-TEST_F(calendarTest, LeapYears1) {
- calendar dateIn, dateOut;
-
- for (dateIn.year = 1; dateIn.year < 10000; ++dateIn.year) {
- dateIn.month = 2;
- dateIn.monthday = 28 + leapdays(dateIn.year);
- dateIn.yearday = 31 + dateIn.monthday;
-
- ntpcal_rd_to_date(&dateOut, ntpcal_date_to_rd(&dateIn));
-
- EXPECT_TRUE(IsEqualDate(dateIn, dateOut));
- }
-}
-
-// check first day of march for first 10000 years
-TEST_F(calendarTest, LeapYears2) {
- calendar dateIn, dateOut;
-
- for (dateIn.year = 1; dateIn.year < 10000; ++dateIn.year) {
- dateIn.month = 3;
- dateIn.monthday = 1;
- dateIn.yearday = 60 + leapdays(dateIn.year);
-
- ntpcal_rd_to_date(&dateOut, ntpcal_date_to_rd(&dateIn));
- EXPECT_TRUE(IsEqualDate(dateIn, dateOut));
- }
-}
-
-// Full roundtrip for 1601-01-01 to 2400-12-31
-// checks sequence of rata die numbers and validates date output
-// (since the input is all nominal days of the calendar in that range
-// and the result of the inverse calculation must match the input no
-// invalid output can occur.)
-TEST_F(calendarTest, RoundTripDate) {
- calendar truDate, expDate = { 1600, 0, 12, 31 };;
- int32 truRdn, expRdn = ntpcal_date_to_rd(&expDate);
- int leaps;
-
- while (expDate.year < 2400) {
- expDate.year++;
- expDate.month = 0;
- expDate.yearday = 0;
- leaps = leapdays(expDate.year);
- while (expDate.month < 12) {
- expDate.month++;
- expDate.monthday = 0;
- while (expDate.monthday < real_month_days[leaps][expDate.month]) {
- expDate.monthday++;
- expDate.yearday++;
- expRdn++;
-
- truRdn = ntpcal_date_to_rd(&expDate);
- EXPECT_EQ(expRdn, truRdn);
-
- ntpcal_rd_to_date(&truDate, truRdn);
- EXPECT_TRUE(IsEqualDate(expDate, truDate));
- }
- }
- }
-}
-
-// Roundtrip testing on calyearstart
-TEST_F(calendarTest, RoundTripYearStart) {
- static const time_t pivot = 0;
- u_int32 ntp, expys, truys;
- calendar date;
-
- for (ntp = 0; ntp < 0xFFFFFFFFu - 30000000u; ntp += 30000000u) {
- truys = calyearstart(ntp, &pivot);
- ntpcal_ntp_to_date(&date, ntp, &pivot);
- date.month = date.monthday = 1;
- date.hour = date.minute = date.second = 0;
- expys = ntpcal_date_to_ntp(&date);
- EXPECT_EQ(expys, truys);
- }
-}
-
-// Roundtrip testing on calymonthstart
-TEST_F(calendarTest, RoundTripMonthStart) {
- static const time_t pivot = 0;
- u_int32 ntp, expms, trums;
- calendar date;
-
- for (ntp = 0; ntp < 0xFFFFFFFFu - 2000000u; ntp += 2000000u) {
- trums = calmonthstart(ntp, &pivot);
- ntpcal_ntp_to_date(&date, ntp, &pivot);
- date.monthday = 1;
- date.hour = date.minute = date.second = 0;
- expms = ntpcal_date_to_ntp(&date);
- EXPECT_EQ(expms, trums);
- }
-}
-
-// Roundtrip testing on calweekstart
-TEST_F(calendarTest, RoundTripWeekStart) {
- static const time_t pivot = 0;
- u_int32 ntp, expws, truws;
- isodate date;
-
- for (ntp = 0; ntp < 0xFFFFFFFFu - 600000u; ntp += 600000u) {
- truws = calweekstart(ntp, &pivot);
- isocal_ntp_to_date(&date, ntp, &pivot);
- date.hour = date.minute = date.second = 0;
- date.weekday = 1;
- expws = isocal_date_to_ntp(&date);
- EXPECT_EQ(expws, truws);
- }
-}
-
-// Roundtrip testing on caldaystart
-TEST_F(calendarTest, RoundTripDayStart) {
- static const time_t pivot = 0;
- u_int32 ntp, expds, truds;
- calendar date;
-
- for (ntp = 0; ntp < 0xFFFFFFFFu - 80000u; ntp += 80000u) {
- truds = caldaystart(ntp, &pivot);
- ntpcal_ntp_to_date(&date, ntp, &pivot);
- date.hour = date.minute = date.second = 0;
- expds = ntpcal_date_to_ntp(&date);
- EXPECT_EQ(expds, truds);
- }
-}
-
diff --git a/contrib/ntp/tests/libntp/g_caljulian.cpp b/contrib/ntp/tests/libntp/g_caljulian.cpp
deleted file mode 100644
index 7ed38c4..0000000
--- a/contrib/ntp/tests/libntp/g_caljulian.cpp
+++ /dev/null
@@ -1,94 +0,0 @@
-#include "g_libntptest.h"
-
-extern "C" {
-#include "ntp_calendar.h"
-}
-
-#include <string>
-#include <sstream>
-
-class caljulianTest : public libntptest {
-protected:
- virtual void SetUp();
- virtual void TearDown();
-
- std::string CalendarToString(const calendar &cal) {
- std::ostringstream ss;
- ss << cal.year << "-" << (u_int)cal.month << "-" << (u_int)cal.monthday
- << " (" << cal.yearday << ") " << (u_int)cal.hour << ":"
- << (u_int)cal.minute << ":" << (u_int)cal.second;
- return ss.str();
- }
-
- ::testing::AssertionResult IsEqual(const calendar &expected, const calendar &actual) {
- if (expected.year == actual.year &&
- (expected.yearday == actual.yearday ||
- (expected.month == actual.month &&
- expected.monthday == actual.monthday)) &&
- expected.hour == actual.hour &&
- expected.minute == actual.minute &&
- expected.second == actual.second) {
- return ::testing::AssertionSuccess();
- } else {
- return ::testing::AssertionFailure()
- << "expected: " << CalendarToString(expected) << " but was "
- << CalendarToString(actual);
- }
- }
-};
-
-void caljulianTest::SetUp()
-{
- ntpcal_set_timefunc(timefunc);
- settime(1970, 1, 1, 0, 0, 0);
-}
-
-void caljulianTest::TearDown()
-{
- ntpcal_set_timefunc(NULL);
-}
-
-
-TEST_F(caljulianTest, RegularTime) {
- u_long testDate = 3485080800UL; // 2010-06-09 14:00:00
- calendar expected = {2010,160,6,9,14,0,0};
-
- calendar actual;
-
- caljulian(testDate, &actual);
-
- EXPECT_TRUE(IsEqual(expected, actual));
-}
-
-TEST_F(caljulianTest, LeapYear) {
- u_long input = 3549902400UL; // 2012-06-28 20:00:00Z
- calendar expected = {2012, 179, 6, 28, 20, 0, 0};
-
- calendar actual;
-
- caljulian(input, &actual);
-
- EXPECT_TRUE(IsEqual(expected, actual));
-}
-
-TEST_F(caljulianTest, uLongBoundary) {
- u_long time = 4294967295UL; // 2036-02-07 6:28:15
- calendar expected = {2036,0,2,7,6,28,15};
-
- calendar actual;
-
- caljulian(time, &actual);
-
- EXPECT_TRUE(IsEqual(expected, actual));
-}
-
-TEST_F(caljulianTest, uLongWrapped) {
- u_long time = 0;
- calendar expected = {2036,0,2,7,6,28,16};
-
- calendar actual;
-
- caljulian(time, &actual);
-
- EXPECT_TRUE(IsEqual(expected, actual));
-}
diff --git a/contrib/ntp/tests/libntp/g_caltontp.cpp b/contrib/ntp/tests/libntp/g_caltontp.cpp
deleted file mode 100644
index 7dafec0..0000000
--- a/contrib/ntp/tests/libntp/g_caltontp.cpp
+++ /dev/null
@@ -1,49 +0,0 @@
-#include "g_libntptest.h"
-
-extern "C" {
-#include "ntp_calendar.h"
-}
-
-class caltontpTest : public libntptest {
-};
-
-TEST_F(caltontpTest, DateGivenMonthDay) {
- // 2010-06-24 12:50:00
- calendar input = {2010, 0, 6, 24, 12, 50, 0};
-
- u_long expected = 3486372600UL; // This is the timestamp above.
-
- EXPECT_EQ(expected, caltontp(&input));
-}
-
-TEST_F(caltontpTest, DateGivenYearDay) {
- // 2010-06-24 12:50:00
- // This is the 175th day of 2010.
- calendar input = {2010, 175, 0, 0, 12, 50, 0};
-
- u_long expected = 3486372600UL; // This is the timestamp above.
-
- EXPECT_EQ(expected, caltontp(&input));
-}
-
-TEST_F(caltontpTest, DateLeapYear) {
- // 2012-06-24 12:00:00
- // This is the 176th day of 2012 (since 2012 is a leap year).
- calendar inputYd = {2012, 176, 0, 0, 12, 00, 00};
- calendar inputMd = {2012, 0, 6, 24, 12, 00, 00};
-
- u_long expected = 3549528000UL;
-
- EXPECT_EQ(expected, caltontp(&inputYd));
- EXPECT_EQ(expected, caltontp(&inputMd));
-}
-
-TEST_F(caltontpTest, WraparoundDateIn2036) {
- // 2036-02-07 06:28:16
- // This is (one) wrapping boundary where we go from ULONG_MAX to 0.
- calendar input = {2036, 0, 2, 7, 6, 28, 16};
-
- u_long expected = 0UL;
-
- EXPECT_EQ(expected, caltontp(&input));
-}
diff --git a/contrib/ntp/tests/libntp/g_calyearstart.cpp b/contrib/ntp/tests/libntp/g_calyearstart.cpp
deleted file mode 100644
index 59859be..0000000
--- a/contrib/ntp/tests/libntp/g_calyearstart.cpp
+++ /dev/null
@@ -1,43 +0,0 @@
-#include "g_libntptest.h"
-
-class calyearstartTest : public libntptest {
-protected:
- virtual void SetUp();
- virtual void TearDown();
-};
-
-void calyearstartTest::SetUp()
-{
- ntpcal_set_timefunc(timefunc);
- settime(1970, 1, 1, 0, 0, 0);
-}
-
-void calyearstartTest::TearDown()
-{
- ntpcal_set_timefunc(NULL);
-}
-
-
-TEST_F(calyearstartTest, NoWrapInDateRange) {
- const u_int32 input = 3486372600UL; // 2010-06-24 12:50:00.
- const u_int32 expected = 3471292800UL; // 2010-01-01 00:00:00
-
- EXPECT_EQ(expected, calyearstart(input, &nowtime));
- EXPECT_EQ(expected, calyearstart(input, NULL));
-}
-
-TEST_F(calyearstartTest, NoWrapInDateRangeLeapYear) {
- const u_int32 input = 3549528000UL; // 2012-06-24 12:00:00
- const u_int32 expected = 3534364800UL; // 2012-01-01 00:00:00
-
- EXPECT_EQ(expected, calyearstart(input, &nowtime));
- EXPECT_EQ(expected, calyearstart(input, NULL));
-}
-
-TEST_F(calyearstartTest, WrapInDateRange) {
- const u_int32 input = 19904UL; // 2036-02-07 12:00:00
- const u_int32 expected = 4291747200UL; // 2036-01-01 00:00:00
-
- EXPECT_EQ(expected, calyearstart(input, &nowtime));
- EXPECT_EQ(expected, calyearstart(input, NULL));
-}
diff --git a/contrib/ntp/tests/libntp/g_clocktime.cpp b/contrib/ntp/tests/libntp/g_clocktime.cpp
deleted file mode 100644
index ee496d2..0000000
--- a/contrib/ntp/tests/libntp/g_clocktime.cpp
+++ /dev/null
@@ -1,187 +0,0 @@
-#include "g_libntptest.h"
-
-// ---------------------------------------------------------------------
-// test fixture
-//
-// The clocktimeTest uses the NTP calendar feature to use a mockup
-// function for getting the current system time, so the tests are not
-// dependent on the actual system time.
-
-class clocktimeTest : public libntptest {
- virtual void SetUp();
- virtual void TearDown();
-};
-
-void clocktimeTest::SetUp()
-{
- ntpcal_set_timefunc(timefunc);
- settime(2000, 1, 1, 0, 0, 0);
-}
-
-void clocktimeTest::TearDown()
-{
- ntpcal_set_timefunc(NULL);
-}
-
-// ---------------------------------------------------------------------
-// test cases
-
-TEST_F(clocktimeTest, CurrentYear) {
- // Timestamp: 2010-06-24 12:50:00Z
- const u_int32 timestamp = 3486372600UL;
- const u_int32 expected = timestamp; // exactly the same.
-
- const int yday=175, hour=12, minute=50, second=0, tzoff=0;
-
- u_long yearstart=0;
- u_int32 actual;
-
- ASSERT_TRUE(clocktime(yday, hour, minute, second, tzoff, timestamp,
- &yearstart, &actual));
- EXPECT_EQ(expected, actual);
-}
-
-TEST_F(clocktimeTest, CurrentYearFuzz) {
- /*
- * Timestamp (rec_ui) is: 2010-06-24 12:50:00
- * Time sent into function is 12:00:00.
- *
- * Since the fuzz is rather small, we should get a NTP
- * timestamp for the 12:00:00 time.
- */
-
- const u_int32 timestamp = 3486372600UL; // 2010-06-24 12:50:00Z
- const u_int32 expected = 3486369600UL; // 2010-06-24 12:00:00Z
-
- const int yday=175, hour=12, minute=0, second=0, tzoff=0;
-
- u_long yearstart=0;
- u_int32 actual;
-
- ASSERT_TRUE(clocktime(yday, hour, minute, second, tzoff, timestamp,
- &yearstart, &actual));
- EXPECT_EQ(expected, actual);
-}
-
-TEST_F(clocktimeTest, TimeZoneOffset) {
- /*
- * Timestamp (rec_ui) is: 2010-06-24 12:00:00 +0800
- * (which is 2010-06-24 04:00:00Z)
- *
- * Time sent into function is 04:00:00 +0800
- */
- const u_int32 timestamp = 3486369600UL;
- const u_int32 expected = timestamp;
-
- const int yday=175, hour=4, minute=0, second=0, tzoff=8;
-
- u_long yearstart=0;
- u_int32 actual;
-
- ASSERT_TRUE(clocktime(yday, hour, minute, second, tzoff, timestamp,
- &yearstart, &actual));
- EXPECT_EQ(expected, actual);
-}
-
-TEST_F(clocktimeTest, WrongYearStart) {
- /*
- * Timestamp (rec_ui) is: 2010-01-02 11:00:00Z
- * Time sent into function is 11:00:00.
- * Yearstart sent into function is the yearstart of 2009!
- */
- const u_int32 timestamp = 3471418800UL;
- const u_int32 expected = timestamp;
-
- const int yday=2, hour=11, minute=0, second=0, tzoff=0;
-
- u_long yearstart = 302024100UL; // Yearstart of 2009.
- u_int32 actual;
-
- ASSERT_TRUE(clocktime(yday, hour, minute, second, tzoff, timestamp,
- &yearstart, &actual));
- EXPECT_EQ(expected, actual);
-}
-
-TEST_F(clocktimeTest, PreviousYear) {
- /*
- * Timestamp is: 2010-01-01 01:00:00Z
- * Time sent into function is 23:00:00
- * (which is meant to be 2009-12-31 23:00:00Z)
- */
- const u_int32 timestamp = 3471296400UL;
- const u_int32 expected = 3471289200UL;
-
- const int yday=365, hour=23, minute=0, second=0, tzoff=0;
-
- u_long yearstart = 0;
- u_int32 actual;
-
- ASSERT_TRUE(clocktime(yday, hour, minute, second, tzoff, timestamp,
- &yearstart, &actual));
- EXPECT_EQ(expected, actual);
-}
-
-TEST_F(clocktimeTest, NextYear) {
- /*
- * Timestamp is: 2009-12-31 23:00:00Z
- * Time sent into function is 01:00:00
- * (which is meant to be 2010-01-01 01:00:00Z)
- */
- const u_int32 timestamp = 3471289200UL;
- const u_int32 expected = 3471296400UL;
-
- const int yday=1, hour=1, minute=0, second=0, tzoff=0;
- u_long yearstart = 0;
- u_int32 actual;
-
- ASSERT_TRUE(clocktime(yday, hour, minute, second, tzoff, timestamp,
- &yearstart, &actual));
- EXPECT_EQ(expected, actual);
-}
-
-TEST_F(clocktimeTest, NoReasonableConversion) {
- /* Timestamp is: 2010-01-02 11:00:00Z */
- const u_int32 timestamp = 3471418800UL;
-
- const int yday=100, hour=12, minute=0, second=0, tzoff=0;
- u_long yearstart = 0;
- u_int32 actual;
-
- ASSERT_FALSE(clocktime(yday, hour, minute, second, tzoff, timestamp,
- &yearstart, &actual));
-}
-
-TEST_F(clocktimeTest, AlwaysInLimit) {
- /* Timestamp is: 2010-01-02 11:00:00Z */
- const u_int32 timestamp = 3471418800UL;
- const u_short prime_incs[] = { 127, 151, 163, 179 };
- int cyc;
- int yday;
- u_char whichprime;
- u_short ydayinc;
- int hour;
- int minute;
- int second;
- u_long yearstart;
- u_int32 actual;
- u_int32 diff;
-
- yearstart = 0;
- for (cyc = 0; cyc < 5; cyc++) {
- settime(1900 + cyc * 65, 1, 1, 0, 0, 0);
- for (yday = -26000; yday < 26000; yday += ydayinc) {
- whichprime = abs(yday) % COUNTOF(prime_incs);
- ydayinc = prime_incs[whichprime];
- for (hour = -204; hour < 204; hour += 2) {
- for (minute = -60; minute < 60; minute++) {
- clocktime(yday, hour, minute, 30, 0,
- timestamp, &yearstart, &actual);
- diff = actual - timestamp;
- if (diff >= 0x80000000UL)
- diff = ~diff + 1;
- ASSERT_LE(diff, (183u * SECSPERDAY));
- }
- }
- }
- }
-}
diff --git a/contrib/ntp/tests/libntp/g_decodenetnum.cpp b/contrib/ntp/tests/libntp/g_decodenetnum.cpp
deleted file mode 100644
index 0596428..0000000
--- a/contrib/ntp/tests/libntp/g_decodenetnum.cpp
+++ /dev/null
@@ -1,93 +0,0 @@
-#include "g_sockaddrtest.h"
-
-class decodenetnumTest : public sockaddrtest {
-};
-
-TEST_F(decodenetnumTest, IPv4AddressOnly) {
- const char *str = "192.0.2.1";
- sockaddr_u actual;
-
- sockaddr_u expected;
- expected.sa4.sin_family = AF_INET;
- expected.sa4.sin_addr.s_addr = inet_addr("192.0.2.1");
- SET_PORT(&expected, NTP_PORT);
-
- ASSERT_TRUE(decodenetnum(str, &actual));
- EXPECT_TRUE(IsEqual(expected, actual));
-}
-
-TEST_F(decodenetnumTest, IPv4AddressWithPort) {
- const char *str = "192.0.2.2:2000";
- sockaddr_u actual;
-
- sockaddr_u expected;
- expected.sa4.sin_family = AF_INET;
- expected.sa4.sin_addr.s_addr = inet_addr("192.0.2.2");
- SET_PORT(&expected, 2000);
-
- ASSERT_TRUE(decodenetnum(str, &actual));
- EXPECT_TRUE(IsEqual(expected, actual));
-}
-
-TEST_F(decodenetnumTest, IPv6AddressOnly) {
- const struct in6_addr address = {
- 0x20, 0x01, 0x0d, 0xb8,
- 0x85, 0xa3, 0x08, 0xd3,
- 0x13, 0x19, 0x8a, 0x2e,
- 0x03, 0x70, 0x73, 0x34
- };
-
- const char *str = "2001:0db8:85a3:08d3:1319:8a2e:0370:7334";
- sockaddr_u actual;
-
- sockaddr_u expected;
- expected.sa6.sin6_family = AF_INET6;
- expected.sa6.sin6_addr = address;
- SET_PORT(&expected, NTP_PORT);
-
- ASSERT_TRUE(decodenetnum(str, &actual));
- EXPECT_TRUE(IsEqual(expected, actual));
-}
-
-TEST_F(decodenetnumTest, IPv6AddressWithPort) {
- const struct in6_addr address = {
- 0x20, 0x01, 0x0d, 0xb8,
- 0x85, 0xa3, 0x08, 0xd3,
- 0x13, 0x19, 0x8a, 0x2e,
- 0x03, 0x70, 0x73, 0x34
- };
-
- const char *str = "[2001:0db8:85a3:08d3:1319:8a2e:0370:7334]:3000";
- sockaddr_u actual;
-
- sockaddr_u expected;
- expected.sa6.sin6_family = AF_INET6;
- expected.sa6.sin6_addr = address;
- SET_PORT(&expected, 3000);
-
- ASSERT_TRUE(decodenetnum(str, &actual));
- EXPECT_TRUE(IsEqual(expected, actual));
-}
-
-TEST_F(decodenetnumTest, IllegalAddress) {
- const char *str = "192.0.2.270:2000";
- sockaddr_u actual;
-
- ASSERT_FALSE(decodenetnum(str, &actual));
-}
-
-TEST_F(decodenetnumTest, IllegalCharInPort) {
- /* An illegal port does not make the decodenetnum fail, but instead
- * makes it use the standard port.
- */
- const char *str = "192.0.2.1:a700";
- sockaddr_u actual;
-
- sockaddr_u expected;
- expected.sa4.sin_family = AF_INET;
- expected.sa4.sin_addr.s_addr = inet_addr("192.0.2.1");
- SET_PORT(&expected, NTP_PORT);
-
- ASSERT_TRUE(decodenetnum(str, &actual));
- EXPECT_TRUE(IsEqual(expected, actual));
-}
diff --git a/contrib/ntp/tests/libntp/g_hextoint.cpp b/contrib/ntp/tests/libntp/g_hextoint.cpp
deleted file mode 100644
index c20821a..0000000
--- a/contrib/ntp/tests/libntp/g_hextoint.cpp
+++ /dev/null
@@ -1,42 +0,0 @@
-#include "g_libntptest.h"
-
-class hextointTest : public libntptest {
-};
-
-TEST_F(hextointTest, SingleDigit) {
- const char *str = "a"; // 10 decimal
- u_long actual;
-
- ASSERT_TRUE(hextoint(str, &actual));
- EXPECT_EQ(10, actual);
-}
-
-TEST_F(hextointTest, MultipleDigits) {
- const char *str = "8F3"; // 2291 decimal
- u_long actual;
-
- ASSERT_TRUE(hextoint(str, &actual));
- EXPECT_EQ(2291, actual);
-}
-
-TEST_F(hextointTest, MaxUnsigned) {
- const char *str = "ffffffff"; // 4294967295 decimal
- u_long actual;
-
- ASSERT_TRUE(hextoint(str, &actual));
- EXPECT_EQ(4294967295UL, actual);
-}
-
-TEST_F(hextointTest, Overflow) {
- const char *str = "100000000"; // Overflow by 1
- u_long actual;
-
- ASSERT_FALSE(hextoint(str, &actual));
-}
-
-TEST_F(hextointTest, IllegalChar) {
- const char *str = "5gb"; // Illegal character g
- u_long actual;
-
- ASSERT_FALSE(hextoint(str, &actual));
-}
diff --git a/contrib/ntp/tests/libntp/g_hextolfp.cpp b/contrib/ntp/tests/libntp/g_hextolfp.cpp
deleted file mode 100644
index bcfb094..0000000
--- a/contrib/ntp/tests/libntp/g_hextolfp.cpp
+++ /dev/null
@@ -1,58 +0,0 @@
-#include "g_lfptest.h"
-
-class hextolfpTest : public lfptest {
-};
-
-TEST_F(hextolfpTest, PositiveInteger) {
- const char *str = "00001000.00000000";
- l_fp actual;
-
- l_fp expected = {4096, 0}; // 16^3, no fraction part.
-
- ASSERT_TRUE(hextolfp(str, &actual));
- EXPECT_TRUE(IsEqual(expected, actual));
-}
-
-TEST_F(hextolfpTest, NegativeInteger) {
- const char *str = "ffffffff.00000000"; // -1 decimal
- l_fp actual;
-
- l_fp expected = {-1, 0};
-
- ASSERT_TRUE(hextolfp(str, &actual));
- EXPECT_TRUE(IsEqual(expected, actual));
-}
-
-TEST_F(hextolfpTest, PositiveFraction) {
- const char *str = "00002000.80000000"; // 8196.5 decimal
- l_fp actual;
-
- l_fp expected = {8192, HALF};
-
- ASSERT_TRUE(hextolfp(str, &actual));
- EXPECT_TRUE(IsEqual(expected, actual));
-}
-
-TEST_F(hextolfpTest, NegativeFraction) {
- const char *str = "ffffffff.40000000"; // -1 + 0.25 decimal
- l_fp actual;
-
- l_fp expected = {-1, QUARTER}; //-1 + 0.25
-
- ASSERT_TRUE(hextolfp(str, &actual));
- EXPECT_TRUE(IsEqual(expected, actual));
-}
-
-TEST_F(hextolfpTest, IllegalNumberOfInteger) {
- const char *str = "1000000.00000000"; // Missing one digit in integral part.
- l_fp actual;
-
- ASSERT_FALSE(hextolfp(str, &actual));
-}
-
-TEST_F(hextolfpTest, IllegalChar) {
- const char *str = "10000000.0000h000"; // Illegal character h.
- l_fp actual;
-
- ASSERT_FALSE(hextolfp(str, &actual));
-}
diff --git a/contrib/ntp/tests/libntp/g_humandate.cpp b/contrib/ntp/tests/libntp/g_humandate.cpp
deleted file mode 100644
index a50ae53..0000000
--- a/contrib/ntp/tests/libntp/g_humandate.cpp
+++ /dev/null
@@ -1,41 +0,0 @@
-#include "g_libntptest.h"
-
-#include <sstream>
-#include <string>
-
-class humandateTest : public libntptest {
-};
-
-TEST_F(humandateTest, RegularTime) {
- time_t sample = 1276601278;
- std::ostringstream expected;
-
- tm* time;
- time = localtime(&sample);
- ASSERT_TRUE(time != NULL);
-
- expected << std::setfill('0')
- << std::setw(2) << time->tm_hour << ":"
- << std::setw(2) << time->tm_min << ":"
- << std::setw(2) << time->tm_sec;
-
- EXPECT_STREQ(expected.str().c_str(), humantime(sample));
-}
-
-TEST_F(humandateTest, CurrentTime) {
- time_t sample;
- std::ostringstream expected;
-
- time(&sample);
-
- tm* time;
- time = localtime(&sample);
- ASSERT_TRUE(time != NULL);
-
- expected << std::setfill('0')
- << std::setw(2) << time->tm_hour << ":"
- << std::setw(2) << time->tm_min << ":"
- << std::setw(2) << time->tm_sec;
-
- EXPECT_STREQ(expected.str().c_str(), humantime(sample));
-}
diff --git a/contrib/ntp/tests/libntp/g_lfpfunc.cpp b/contrib/ntp/tests/libntp/g_lfpfunc.cpp
deleted file mode 100644
index c9aaf9f..0000000
--- a/contrib/ntp/tests/libntp/g_lfpfunc.cpp
+++ /dev/null
@@ -1,547 +0,0 @@
-#include "g_libntptest.h"
-#include "g_timestructs.h"
-
-extern "C" {
-#include "ntp_fp.h"
-}
-
-#include <float.h>
-#include <math.h>
-
-#include <string>
-#include <sstream>
-
-class lfpTest : public libntptest
-{
- // nothing new right now
-};
-
-struct lfp_hl {
- uint32_t h, l;
-};
-
-//----------------------------------------------------------------------
-// OO-wrapper for 'l_fp'
-//----------------------------------------------------------------------
-
-class LFP
-{
-public:
- ~LFP();
- LFP();
- LFP(const LFP& rhs);
- LFP(int32 i, u_int32 f);
-
- LFP operator+ (const LFP &rhs) const;
- LFP& operator+=(const LFP &rhs);
-
- LFP operator- (const LFP &rhs) const;
- LFP& operator-=(const LFP &rhs);
-
- LFP& operator=(const LFP &rhs);
- LFP operator-() const;
-
- bool operator==(const LFP &rhs) const;
-
- LFP neg() const;
- LFP abs() const;
- int signum() const;
-
- bool l_isgt (const LFP &rhs) const
- { return L_ISGT(&_v, &rhs._v); }
- bool l_isgtu(const LFP &rhs) const
- { return L_ISGTU(&_v, &rhs._v); }
- bool l_ishis(const LFP &rhs) const
- { return L_ISHIS(&_v, &rhs._v); }
- bool l_isgeq(const LFP &rhs) const
- { return L_ISGEQ(&_v, &rhs._v); }
- bool l_isequ(const LFP &rhs) const
- { return L_ISEQU(&_v, &rhs._v); }
-
- int ucmp(const LFP & rhs) const;
- int scmp(const LFP & rhs) const;
-
- std::string toString() const;
- std::ostream& toStream(std::ostream &oo) const;
-
- operator double() const;
- explicit LFP(double);
-
-protected:
- LFP(const l_fp &rhs);
-
- static int cmp_work(u_int32 a[3], u_int32 b[3]);
-
- l_fp _v;
-};
-
-static std::ostream& operator<<(std::ostream &oo, const LFP& rhs)
-{
- return rhs.toStream(oo);
-}
-
-//----------------------------------------------------------------------
-// reference comparision
-// This is implementad as a full signed MP-subtract in 3 limbs, where
-// the operands are zero or sign extended before the subtraction is
-// executed.
-//----------------------------------------------------------------------
-int LFP::scmp(const LFP & rhs) const
-{
- u_int32 a[3], b[3];
- const l_fp &op1(_v), &op2(rhs._v);
-
- a[0] = op1.l_uf; a[1] = op1.l_ui; a[2] = 0;
- b[0] = op2.l_uf; b[1] = op2.l_ui; b[2] = 0;
-
- a[2] -= (op1.l_i < 0);
- b[2] -= (op2.l_i < 0);
-
- return cmp_work(a,b);
-}
-
-int LFP::ucmp(const LFP & rhs) const
-{
- u_int32 a[3], b[3];
- const l_fp &op1(_v), &op2(rhs._v);
-
- a[0] = op1.l_uf; a[1] = op1.l_ui; a[2] = 0;
- b[0] = op2.l_uf; b[1] = op2.l_ui; b[2] = 0;
-
- return cmp_work(a,b);
-}
-
-int LFP::cmp_work(u_int32 a[3], u_int32 b[3])
-{
- u_int32 cy, idx, tmp;
- for (cy = idx = 0; idx < 3; ++idx) {
- tmp = a[idx]; cy = (a[idx] -= cy ) > tmp;
- tmp = a[idx]; cy |= (a[idx] -= b[idx]) > tmp;
- }
- if (a[2])
- return -1;
- return a[0] || a[1];
-}
-
-//----------------------------------------------------------------------
-// imlementation of the LFP stuff
-// This should be easy enough...
-//----------------------------------------------------------------------
-
-LFP::~LFP()
-{
- // NOP
-}
-
-LFP::LFP()
-{
- _v.l_ui = 0;
- _v.l_uf = 0;
-}
-
-LFP::LFP(int32 i, u_int32 f)
-{
- _v.l_i = i;
- _v.l_uf = f;
-}
-
-LFP::LFP(const LFP &rhs)
-{
- _v = rhs._v;
-}
-
-LFP::LFP(const l_fp & rhs)
-{
- _v = rhs;
-}
-
-LFP& LFP::operator=(const LFP & rhs)
-{
- _v = rhs._v;
- return *this;
-}
-
-LFP& LFP::operator+=(const LFP & rhs)
-{
- L_ADD(&_v, &rhs._v);
- return *this;
-}
-
-LFP& LFP::operator-=(const LFP & rhs)
-{
- L_SUB(&_v, &rhs._v);
- return *this;
-}
-
-LFP LFP::operator+(const LFP &rhs) const
-{
- LFP tmp(*this);
- return tmp += rhs;
-}
-
-LFP LFP::operator-(const LFP &rhs) const
-{
- LFP tmp(*this);
- return tmp -= rhs;
-}
-
-LFP LFP::operator-() const
-{
- LFP tmp(*this);
- L_NEG(&tmp._v);
- return tmp;
-}
-
-LFP
-LFP::neg() const
-{
- LFP tmp(*this);
- L_NEG(&tmp._v);
- return tmp;
-}
-
-LFP
-LFP::abs() const
-{
- LFP tmp(*this);
- if (L_ISNEG(&tmp._v))
- L_NEG(&tmp._v);
- return tmp;
-}
-
-int
-LFP::signum() const
-{
- if (_v.l_ui & 0x80000000u)
- return -1;
- return (_v.l_ui || _v.l_uf);
-}
-
-std::string
-LFP::toString() const
-{
- std::ostringstream oss;
- toStream(oss);
- return oss.str();
-}
-
-std::ostream&
-LFP::toStream(std::ostream &os) const
-{
- return os
- << mfptoa(_v.l_ui, _v.l_uf, 9)
- << " [$" << std::setw(8) << std::setfill('0') << std::hex << _v.l_ui
- << ':' << std::setw(8) << std::setfill('0') << std::hex << _v.l_uf
- << ']';
-}
-
-bool LFP::operator==(const LFP &rhs) const
-{
- return L_ISEQU(&_v, &rhs._v);
-}
-
-
-LFP::operator double() const
-{
- double res;
- LFPTOD(&_v, res);
- return res;
-}
-
-LFP::LFP(double rhs)
-{
- DTOLFP(rhs, &_v);
-}
-
-
-//----------------------------------------------------------------------
-// testing the relational macros works better with proper predicate
-// formatting functions; it slows down the tests a bit, but makes for
-// readable failure messages.
-//----------------------------------------------------------------------
-
-testing::AssertionResult isgt_p(
- const LFP &op1, const LFP &op2)
-{
- if (op1.l_isgt(op2))
- return testing::AssertionSuccess()
- << "L_ISGT(" << op1 << "," << op2 << ") is true";
- else
- return testing::AssertionFailure()
- << "L_ISGT(" << op1 << "," << op2 << ") is false";
-}
-
-testing::AssertionResult isgeq_p(
- const LFP &op1, const LFP &op2)
-{
- if (op1.l_isgeq(op2))
- return testing::AssertionSuccess()
- << "L_ISGEQ(" << op1 << "," << op2 << ") is true";
- else
- return testing::AssertionFailure()
- << "L_ISGEQ(" << op1 << "," << op2 << ") is false";
-}
-
-testing::AssertionResult isgtu_p(
- const LFP &op1, const LFP &op2)
-{
- if (op1.l_isgtu(op2))
- return testing::AssertionSuccess()
- << "L_ISGTU(" << op1 << "," << op2 << ") is true";
- else
- return testing::AssertionFailure()
- << "L_ISGTU(" << op1 << "," << op2 << ") is false";
-}
-
-testing::AssertionResult ishis_p(
- const LFP &op1, const LFP &op2)
-{
- if (op1.l_ishis(op2))
- return testing::AssertionSuccess()
- << "L_ISHIS(" << op1 << "," << op2 << ") is true";
- else
- return testing::AssertionFailure()
- << "L_ISHIS(" << op1 << "," << op2 << ") is false";
-}
-
-testing::AssertionResult isequ_p(
- const LFP &op1, const LFP &op2)
-{
- if (op1.l_isequ(op2))
- return testing::AssertionSuccess()
- << "L_ISEQU(" << op1 << "," << op2 << ") is true";
- else
- return testing::AssertionFailure()
- << "L_ISEQU(" << op1 << "," << op2 << ") is false";
-}
-
-//----------------------------------------------------------------------
-// test data table for add/sub and compare
-//----------------------------------------------------------------------
-
-static const lfp_hl addsub_tab[][3] = {
- // trivial idendity:
- {{0 ,0 }, { 0,0 }, { 0,0}},
- // with carry from fraction and sign change:
- {{-1,0x80000000}, { 0,0x80000000}, { 0,0}},
- // without carry from fraction
- {{ 1,0x40000000}, { 1,0x40000000}, { 2,0x80000000}},
- // with carry from fraction:
- {{ 1,0xC0000000}, { 1,0xC0000000}, { 3,0x80000000}},
- // with carry from fraction and sign change:
- {{0x7FFFFFFF, 0x7FFFFFFF}, {0x7FFFFFFF,0x7FFFFFFF}, {0xFFFFFFFE,0xFFFFFFFE}},
- // two tests w/o carry (used for l_fp<-->double):
- {{0x55555555,0xAAAAAAAA}, {0x11111111,0x11111111}, {0x66666666,0xBBBBBBBB}},
- {{0x55555555,0x55555555}, {0x11111111,0x11111111}, {0x66666666,0x66666666}},
- // wide-range test, triggers compare trouble
- {{0x80000000,0x00000001}, {0xFFFFFFFF,0xFFFFFFFE}, {0x7FFFFFFF,0xFFFFFFFF}}
-};
-static const size_t addsub_cnt(sizeof(addsub_tab)/sizeof(addsub_tab[0]));
-static const size_t addsub_tot(sizeof(addsub_tab)/sizeof(addsub_tab[0][0]));
-
-
-//----------------------------------------------------------------------
-// epsilon estimation for the precision of a conversion double --> l_fp
-//
-// The error estimation limit is as follows:
-// * The 'l_fp' fixed point fraction has 32 bits precision, so we allow
-// for the LSB to toggle by clamping the epsilon to be at least 2^(-31)
-//
-// * The double mantissa has a precsion 54 bits, so the other minimum is
-// dval * (2^(-53))
-//
-// The maximum of those two boundaries is used for the check.
-//
-// Note: once there are more than 54 bits between the highest and lowest
-// '1'-bit of the l_fp value, the roundtrip *will* create truncation
-// errors. This is an inherent property caused by the 54-bit mantissa of
-// the 'double' type.
-double eps(double d)
-{
- return std::max<double>(ldexp(1.0, -31), ldexp(fabs(d), -53));
-}
-
-//----------------------------------------------------------------------
-// test addition
-//----------------------------------------------------------------------
-TEST_F(lfpTest, AdditionLR) {
- for (size_t idx=0; idx < addsub_cnt; ++idx) {
- LFP op1(addsub_tab[idx][0].h, addsub_tab[idx][0].l);
- LFP op2(addsub_tab[idx][1].h, addsub_tab[idx][1].l);
- LFP exp(addsub_tab[idx][2].h, addsub_tab[idx][2].l);
- LFP res(op1 + op2);
-
- ASSERT_EQ(exp, res);
- }
-}
-
-TEST_F(lfpTest, AdditionRL) {
- for (size_t idx=0; idx < addsub_cnt; ++idx) {
- LFP op2(addsub_tab[idx][0].h, addsub_tab[idx][0].l);
- LFP op1(addsub_tab[idx][1].h, addsub_tab[idx][1].l);
- LFP exp(addsub_tab[idx][2].h, addsub_tab[idx][2].l);
- LFP res(op1 + op2);
-
- ASSERT_EQ(exp, res);
- }
-}
-
-//----------------------------------------------------------------------
-// test subtraction
-//----------------------------------------------------------------------
-TEST_F(lfpTest, SubtractionLR) {
- for (size_t idx=0; idx < addsub_cnt; ++idx) {
- LFP op2(addsub_tab[idx][0].h, addsub_tab[idx][0].l);
- LFP exp(addsub_tab[idx][1].h, addsub_tab[idx][1].l);
- LFP op1(addsub_tab[idx][2].h, addsub_tab[idx][2].l);
- LFP res(op1 - op2);
-
- ASSERT_EQ(exp, res);
- }
-}
-
-TEST_F(lfpTest, SubtractionRL) {
- for (size_t idx=0; idx < addsub_cnt; ++idx) {
- LFP exp(addsub_tab[idx][0].h, addsub_tab[idx][0].l);
- LFP op2(addsub_tab[idx][1].h, addsub_tab[idx][1].l);
- LFP op1(addsub_tab[idx][2].h, addsub_tab[idx][2].l);
- LFP res(op1 - op2);
-
- ASSERT_EQ(exp, res);
- }
-}
-
-//----------------------------------------------------------------------
-// test negation
-//----------------------------------------------------------------------
-TEST_F(lfpTest, Negation) {
- for (size_t idx=0; idx < addsub_cnt; ++idx) {
- LFP op1(addsub_tab[idx][0].h, addsub_tab[idx][0].l);
- LFP op2(-op1);
- LFP sum(op1 + op2);
-
- ASSERT_EQ(LFP(0,0), sum);
- }
-}
-
-//----------------------------------------------------------------------
-// test absolute value
-//----------------------------------------------------------------------
-TEST_F(lfpTest, Absolute) {
- for (size_t idx=0; idx < addsub_cnt; ++idx) {
- LFP op1(addsub_tab[idx][0].h, addsub_tab[idx][0].l);
- LFP op2(op1.abs());
-
- ASSERT_TRUE(op2.signum() >= 0);
-
- if (op1.signum() >= 0)
- op1 -= op2;
- else
- op1 += op2;
- ASSERT_EQ(LFP(0,0), op1);
- }
-
- // There is one special case we have to check: the minimum
- // value cannot be negated, or, to be more precise, the
- // negation reproduces the original pattern.
- LFP minVal(0x80000000, 0x00000000);
- LFP minAbs(minVal.abs());
- ASSERT_EQ(-1, minVal.signum());
- ASSERT_EQ(minVal, minAbs);
-}
-
-//----------------------------------------------------------------------
-// fp -> double -> fp rountrip test
-//----------------------------------------------------------------------
-TEST_F(lfpTest, FDF_RoundTrip) {
- // since a l_fp has 64 bits in it's mantissa and a double has
- // only 54 bits available (including the hidden '1') we have to
- // make a few concessions on the roundtrip precision. The 'eps()'
- // function makes an educated guess about the avilable precision
- // and checks the difference in the two 'l_fp' values against
- // that limit.
- for (size_t idx=0; idx < addsub_cnt; ++idx) {
- LFP op1(addsub_tab[idx][0].h, addsub_tab[idx][0].l);
- double op2(op1);
- LFP op3(op2);
- // for manual checks only:
- // std::cout << std::setprecision(16) << op2 << std::endl;
- ASSERT_LE(fabs(op1-op3), eps(op2));
- }
-}
-
-//----------------------------------------------------------------------
-// test the compare stuff
-//
-// This uses the local compare and checks if the operations using the
-// macros in 'ntp_fp.h' produce mathing results.
-// ----------------------------------------------------------------------
-TEST_F(lfpTest, SignedRelOps) {
- const lfp_hl * tv(&addsub_tab[0][0]);
- for (size_t lc=addsub_tot-1; lc; --lc,++tv) {
- LFP op1(tv[0].h,tv[0].l);
- LFP op2(tv[1].h,tv[1].l);
- int cmp(op1.scmp(op2));
-
- switch (cmp) {
- case -1:
- std::swap(op1, op2);
- case 1:
- EXPECT_TRUE (isgt_p(op1,op2));
- EXPECT_FALSE(isgt_p(op2,op1));
-
- EXPECT_TRUE (isgeq_p(op1,op2));
- EXPECT_FALSE(isgeq_p(op2,op1));
-
- EXPECT_FALSE(isequ_p(op1,op2));
- EXPECT_FALSE(isequ_p(op2,op1));
- break;
- case 0:
- EXPECT_FALSE(isgt_p(op1,op2));
- EXPECT_FALSE(isgt_p(op2,op1));
-
- EXPECT_TRUE (isgeq_p(op1,op2));
- EXPECT_TRUE (isgeq_p(op2,op1));
-
- EXPECT_TRUE (isequ_p(op1,op2));
- EXPECT_TRUE (isequ_p(op2,op1));
- break;
- default:
- FAIL() << "unexpected SCMP result: " << cmp;
- }
- }
-}
-
-TEST_F(lfpTest, UnsignedRelOps) {
- const lfp_hl * tv(&addsub_tab[0][0]);
- for (size_t lc=addsub_tot-1; lc; --lc,++tv) {
- LFP op1(tv[0].h,tv[0].l);
- LFP op2(tv[1].h,tv[1].l);
- int cmp(op1.ucmp(op2));
-
- switch (cmp) {
- case -1:
- std::swap(op1, op2);
- case 1:
- EXPECT_TRUE (isgtu_p(op1,op2));
- EXPECT_FALSE(isgtu_p(op2,op1));
-
- EXPECT_TRUE (ishis_p(op1,op2));
- EXPECT_FALSE(ishis_p(op2,op1));
- break;
- case 0:
- EXPECT_FALSE(isgtu_p(op1,op2));
- EXPECT_FALSE(isgtu_p(op2,op1));
-
- EXPECT_TRUE (ishis_p(op1,op2));
- EXPECT_TRUE (ishis_p(op2,op1));
- break;
- default:
- FAIL() << "unexpected UCMP result: " << cmp;
- }
- }
-}
-
-//----------------------------------------------------------------------
-// that's all folks... but feel free to add things!
-//----------------------------------------------------------------------
diff --git a/contrib/ntp/tests/libntp/g_lfptest.h b/contrib/ntp/tests/libntp/g_lfptest.h
deleted file mode 100644
index 1daffef..0000000
--- a/contrib/ntp/tests/libntp/g_lfptest.h
+++ /dev/null
@@ -1,32 +0,0 @@
-#ifndef NTP_TESTS_LFPTEST_H
-#define NTP_TESTS_LFPTEST_H
-
-#include "g_libntptest.h"
-
-extern "C" {
-#include "ntp_fp.h"
-};
-
-class lfptest : public libntptest {
-protected:
- ::testing::AssertionResult IsEqual(const l_fp &expected, const l_fp &actual) {
- if (L_ISEQU(&expected, &actual)) {
- return ::testing::AssertionSuccess();
- } else {
- return ::testing::AssertionFailure()
- << " expected: " << lfptoa(&expected, FRACTION_PREC)
- << " (" << expected.l_ui << "." << expected.l_uf << ")"
- << " but was: " << lfptoa(&actual, FRACTION_PREC)
- << " (" << actual.l_ui << "." << actual.l_uf << ")";
- }
- }
-
- static const int32 HALF = -2147483647L - 1L;
- static const int32 HALF_PROMILLE_UP = 2147484; // slightly more than 0.0005
- static const int32 HALF_PROMILLE_DOWN = 2147483; // slightly less than 0.0005
- static const int32 QUARTER = 1073741824L;
- static const int32 QUARTER_PROMILLE_APPRX = 1073742L;
-};
-
-#endif
-/* NTP_TESTS_LFPTEST_H */
diff --git a/contrib/ntp/tests/libntp/g_lfptostr.cpp b/contrib/ntp/tests/libntp/g_lfptostr.cpp
deleted file mode 100644
index ae594a6..0000000
--- a/contrib/ntp/tests/libntp/g_lfptostr.cpp
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
- * This file contains test for both mfptoa and mfptoms (which uses dolfptoa),
- * since all these functions are very similar. It also tests ulfptoa, which is
- * a macro.
- */
-
-#include "g_libntptest.h"
-
-extern "C" {
-#include "ntp_fp.h"
-};
-
-class lfptostrTest : public libntptest {
-protected:
- static const int LFP_MAX_PRECISION = 10;
- static const int LFP_MAX_PRECISION_MS = 7;
-
- static const int ONE_FOURTH = 1073741824; // (1 << 30)
- static const int HALF = (1 << 31);
- static const int THREE_FOURTH = -ONE_FOURTH;
- static const int HALF_PROMILLE_UP = 2147484; // slightly more than 0.0005
- static const int HALF_PROMILLE_DOWN = 2147483; // slightly less than 0.0005
-};
-
-TEST_F(lfptostrTest, PositiveInteger) {
- l_fp test = {200, 0}; // exact 200.0000000000
-
- EXPECT_STREQ("200.0000000000", mfptoa(test.l_ui, test.l_uf, LFP_MAX_PRECISION));
- EXPECT_STREQ("200000.0000000", mfptoms(test.l_ui, test.l_uf, LFP_MAX_PRECISION_MS));
-}
-
-TEST_F(lfptostrTest, NegativeInteger) {
- l_fp test = {-100, 0}; // -100
-
- EXPECT_STREQ("-100.0000000000", lfptoa(&test, LFP_MAX_PRECISION));
- EXPECT_STREQ("-100000.0000000", lfptoms(&test, LFP_MAX_PRECISION_MS));
-}
-
-TEST_F(lfptostrTest, PositiveIntegerWithFraction) {
- l_fp test = {200, ONE_FOURTH}; // 200.25
-
- EXPECT_STREQ("200.2500000000", lfptoa(&test, LFP_MAX_PRECISION));
- EXPECT_STREQ("200250.0000000", lfptoms(&test, LFP_MAX_PRECISION_MS));
-}
-
-TEST_F(lfptostrTest, NegativeIntegerWithFraction) {
- l_fp test = {-100, ONE_FOURTH}; // -99.75
-
- EXPECT_STREQ("-99.7500000000", lfptoa(&test, LFP_MAX_PRECISION));
- EXPECT_STREQ("-99750.0000000", lfptoms(&test, LFP_MAX_PRECISION_MS));
-}
-
-TEST_F(lfptostrTest, RoundingDownToInteger) {
- l_fp test = {10, ONE_FOURTH}; // 10.25
-
- EXPECT_STREQ("10", lfptoa(&test, 0));
- EXPECT_STREQ("10250", lfptoms(&test, 0));
-}
-
-TEST_F(lfptostrTest, RoundingMiddleToInteger) {
- l_fp test = {10, HALF}; // 10.5
-
- EXPECT_STREQ("11", lfptoa(&test, 0));
- EXPECT_STREQ("10500", lfptoms(&test, 0));
-}
-
-TEST_F(lfptostrTest, RoundingUpToInteger) {
- l_fp test = {5, THREE_FOURTH}; // 5.75
-
- EXPECT_STREQ("6", lfptoa(&test, 0));
- EXPECT_STREQ("5750", lfptoms(&test, 0));
-}
-
-TEST_F(lfptostrTest, SingleDecimal) {
- l_fp test = {8, ONE_FOURTH}; // 8.25
-
- EXPECT_STREQ("8.3", lfptoa(&test, 1));
- EXPECT_STREQ("8250.0", lfptoms(&test, 1));
-}
-
-TEST_F(lfptostrTest, MillisecondsRoundingUp) {
- l_fp test = {1, HALF_PROMILLE_UP}; //slightly more than 1.0005
-
- EXPECT_STREQ("1.0", lfptoa(&test, 1));
-
- EXPECT_STREQ("1000.5", lfptoms(&test, 1));
- EXPECT_STREQ("1001", lfptoms(&test, 0));
-}
-
-TEST_F(lfptostrTest, MillisecondsRoundingDown) {
- l_fp test = {1, HALF_PROMILLE_DOWN}; // slightly less than 1.0005
-
- EXPECT_STREQ("1.0", lfptoa(&test, 1));
-
- EXPECT_STREQ("1000.5", lfptoms(&test, 1));
- EXPECT_STREQ("1000", lfptoms(&test, 0));
-}
-
-TEST_F(lfptostrTest, UnsignedInteger) {
- l_fp test = {3000000000UL, 0};
-
- EXPECT_STREQ("3000000000.0", ulfptoa(&test, 1));
-}
diff --git a/contrib/ntp/tests/libntp/g_libntptest.cpp b/contrib/ntp/tests/libntp/g_libntptest.cpp
deleted file mode 100644
index 8897b5c..0000000
--- a/contrib/ntp/tests/libntp/g_libntptest.cpp
+++ /dev/null
@@ -1,27 +0,0 @@
-#include "g_libntptest.h"
-
-/* This file contains various constants that libntp needs to be set
- * and that is normally defined in ntpd/ntpq/...
- */
-
-u_long current_time = 4; // needed by authkeys. Used only in to calculate lifetime.
-const char *progname = "libntptest";
-
-time_t libntptest::nowtime = 0;
-
-time_t libntptest::timefunc(time_t *ptr)
-{
- if (ptr)
- *ptr = nowtime;
- return nowtime;
-}
-
-void libntptest::settime(int y, int m, int d, int H, int M, int S)
-{
-
- time_t days(ntpcal_edate_to_eradays(y-1, m-1, d-1) + 1 - DAY_UNIX_STARTS);
- time_t secs(ntpcal_etime_to_seconds(H, M, S));
-
- nowtime = days * SECSPERDAY + secs;
-}
-
diff --git a/contrib/ntp/tests/libntp/g_libntptest.h b/contrib/ntp/tests/libntp/g_libntptest.h
deleted file mode 100644
index ef2daa8..0000000
--- a/contrib/ntp/tests/libntp/g_libntptest.h
+++ /dev/null
@@ -1,15 +0,0 @@
-#include "tests_main.h"
-
-extern "C" {
-#include "ntp_stdlib.h"
-#include "ntp_calendar.h"
-};
-
-class libntptest : public ntptest {
-
-protected:
- static time_t timefunc(time_t*);
- static time_t nowtime;
- static void settime(int y, int m, int d, int H, int M, int S);
-
-};
diff --git a/contrib/ntp/tests/libntp/g_modetoa.cpp b/contrib/ntp/tests/libntp/g_modetoa.cpp
deleted file mode 100644
index 96bf3ce..0000000
--- a/contrib/ntp/tests/libntp/g_modetoa.cpp
+++ /dev/null
@@ -1,16 +0,0 @@
-#include "g_libntptest.h"
-
-class modetoaTest : public libntptest {
-};
-
-TEST_F(modetoaTest, KnownMode) {
- const int MODE = 3; // Should be "client"
-
- EXPECT_STREQ("client", modetoa(MODE));
-}
-
-TEST_F(modetoaTest, UnknownMode) {
- const int MODE = 100;
-
- EXPECT_STREQ("mode#100", modetoa(MODE));
-}
diff --git a/contrib/ntp/tests/libntp/g_msyslog.cpp b/contrib/ntp/tests/libntp/g_msyslog.cpp
deleted file mode 100644
index 273600d..0000000
--- a/contrib/ntp/tests/libntp/g_msyslog.cpp
+++ /dev/null
@@ -1,137 +0,0 @@
-#include "g_libntptest.h"
-
-extern "C" {
-#include <stdio.h>
-#include <string.h>
-#include <errno.h>
-#ifndef VSNPRINTF_PERCENT_M
-// format_errmsg() is normally private to msyslog.c
-void format_errmsg (char *, size_t, const char *, int);
-#endif
-};
-
-class msyslogTest : public libntptest {
-};
-
-// msnprintf()
-TEST_F(msyslogTest, msnprintf)
-{
-#define FMT_PREFIX "msyslog.cpp ENOENT: "
- char exp_buf[512];
- char act_buf[512];
- int exp_cnt;
- int act_cnt;
-
- exp_cnt = snprintf(exp_buf, sizeof(exp_buf), FMT_PREFIX "%s",
- strerror(ENOENT));
- errno = ENOENT;
- act_cnt = msnprintf(act_buf, sizeof(act_buf), FMT_PREFIX "%m");
- EXPECT_EQ(exp_cnt, act_cnt);
- EXPECT_STREQ(exp_buf, act_buf);
-}
-
-TEST_F(msyslogTest, msnprintfLiteralPercentm)
-{
- char exp_buf[32];
- char act_buf[32];
- int exp_cnt;
- int act_cnt;
-
- exp_cnt = snprintf(exp_buf, sizeof(exp_buf), "%%m");
- errno = ENOENT;
- act_cnt = msnprintf(act_buf, sizeof(act_buf), "%%m");
- EXPECT_EQ(exp_cnt, act_cnt);
- EXPECT_STREQ(exp_buf, act_buf);
-}
-
-TEST_F(msyslogTest, msnprintfBackslashLiteralPercentm)
-{
- char exp_buf[32];
- char act_buf[32];
- int exp_cnt;
- int act_cnt;
-
- exp_cnt = snprintf(exp_buf, sizeof(exp_buf), "\%%m");
- errno = ENOENT;
- act_cnt = msnprintf(act_buf, sizeof(act_buf), "\%%m");
- EXPECT_EQ(exp_cnt, act_cnt);
- EXPECT_STREQ(exp_buf, act_buf);
-}
-
-TEST_F(msyslogTest, msnprintfBackslashPercent)
-{
- char exp_buf[32];
- char act_buf[32];
- int exp_cnt;
- int act_cnt;
-
- exp_cnt = snprintf(exp_buf, sizeof(exp_buf), "\%s",
- strerror(ENOENT));
- errno = ENOENT;
- act_cnt = msnprintf(act_buf, sizeof(act_buf), "\%m");
- EXPECT_EQ(exp_cnt, act_cnt);
- EXPECT_STREQ(exp_buf, act_buf);
-}
-
-TEST_F(msyslogTest, msnprintfHangingPercent)
-{
- static char fmt[] = "percent then nul term then non-nul %\0oops!";
- char exp_buf[64];
- char act_buf[64];
- int exp_cnt;
- int act_cnt;
-
- ZERO(exp_buf);
- ZERO(act_buf);
- exp_cnt = snprintf(exp_buf, sizeof(exp_buf), fmt);
- act_cnt = msnprintf(act_buf, sizeof(act_buf), fmt);
- EXPECT_EQ(exp_cnt, act_cnt);
- EXPECT_STREQ(exp_buf, act_buf);
- EXPECT_STREQ("", act_buf + 1 + strlen(act_buf));
-}
-
-#ifndef VSNPRINTF_PERCENT_M
-TEST_F(msyslogTest, format_errmsgHangingPercent)
-{
- static char fmt[] = "percent then nul term then non-nul %\0oops!";
- char act_buf[64];
-
- ZERO(act_buf);
- format_errmsg(act_buf, sizeof(act_buf), fmt, ENOENT);
- EXPECT_STREQ(fmt, act_buf);
- EXPECT_STREQ("", act_buf + 1 + strlen(act_buf));
-}
-#endif
-
-TEST_F(msyslogTest, msnprintfNullTarget)
-{
- int exp_cnt;
- int act_cnt;
-
- exp_cnt = snprintf(NULL, 0, "%d", 123);
- errno = ENOENT;
- act_cnt = msnprintf(NULL, 0, "%d", 123);
- EXPECT_EQ(exp_cnt, act_cnt);
-}
-
-TEST_F(msyslogTest, msnprintfTruncate)
-{
- char undist[] = "undisturbed";
- char exp_buf[512];
- char act_buf[512];
- int exp_cnt;
- int act_cnt;
-
- memcpy(exp_buf + 3, undist, sizeof(undist));
- memcpy(act_buf + 3, undist, sizeof(undist));
- exp_cnt = snprintf(exp_buf, 3, "%s", strerror(ENOENT));
- errno = ENOENT;
- act_cnt = msnprintf(act_buf, 3, "%m");
- EXPECT_EQ('\0', exp_buf[2]);
- EXPECT_EQ('\0', act_buf[2]);
- EXPECT_TRUE(act_cnt > 0);
- EXPECT_EQ(exp_cnt, act_cnt);
- EXPECT_STREQ(exp_buf, act_buf);
- EXPECT_STREQ(exp_buf + 3, undist);
- EXPECT_STREQ(act_buf + 3, undist);
-}
diff --git a/contrib/ntp/tests/libntp/g_netof.cpp b/contrib/ntp/tests/libntp/g_netof.cpp
deleted file mode 100644
index 8fc9ac7..0000000
--- a/contrib/ntp/tests/libntp/g_netof.cpp
+++ /dev/null
@@ -1,69 +0,0 @@
-#include "g_sockaddrtest.h"
-
-class netofTest : public sockaddrtest {
-};
-
-TEST_F(netofTest, ClassBAddress) {
- sockaddr_u input = CreateSockaddr4("172.16.2.1", NTP_PORT);
- sockaddr_u expected = CreateSockaddr4("172.16.0.0", NTP_PORT);
-
- sockaddr_u* actual = netof(&input);
-
- ASSERT_TRUE(actual != NULL);
- EXPECT_TRUE(IsEqual(expected, *actual));
-}
-
-TEST_F(netofTest, ClassCAddress) {
- sockaddr_u input = CreateSockaddr4("192.0.2.255", NTP_PORT);
- sockaddr_u expected = CreateSockaddr4("192.0.2.0", NTP_PORT);
-
- sockaddr_u* actual = netof(&input);
-
- ASSERT_TRUE(actual != NULL);
- EXPECT_TRUE(IsEqual(expected, *actual));
-}
-
-TEST_F(netofTest, ClassAAddress) {
- /* Class A addresses are assumed to be classless,
- * thus the same address should be returned.
- */
- sockaddr_u input = CreateSockaddr4("10.20.30.40", NTP_PORT);
- sockaddr_u expected = CreateSockaddr4("10.20.30.40", NTP_PORT);
-
- sockaddr_u* actual = netof(&input);
-
- ASSERT_TRUE(actual != NULL);
- EXPECT_TRUE(IsEqual(expected, *actual));
-}
-
-TEST_F(netofTest, IPv6Address) {
- /* IPv6 addresses are assumed to have 64-bit host- and 64-bit network parts. */
- const struct in6_addr input_address = {
- 0x20, 0x01, 0x0d, 0xb8,
- 0x85, 0xa3, 0x08, 0xd3,
- 0x13, 0x19, 0x8a, 0x2e,
- 0x03, 0x70, 0x73, 0x34
- }; // 2001:0db8:85a3:08d3:1319:8a2e:0370:7334
-
- const struct in6_addr expected_address = {
- 0x20, 0x01, 0x0d, 0xb8,
- 0x85, 0xa3, 0x08, 0xd3,
- 0x00, 0x00, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00
- }; // 2001:0db8:85a3:08d3:0000:0000:0000:0000
-
- sockaddr_u input;
- input.sa6.sin6_family = AF_INET6;
- input.sa6.sin6_addr = input_address;
- SET_PORT(&input, 3000);
-
- sockaddr_u expected;
- expected.sa6.sin6_family = AF_INET6;
- expected.sa6.sin6_addr = expected_address;
- SET_PORT(&expected, 3000);
-
- sockaddr_u* actual = netof(&input);
-
- ASSERT_TRUE(actual != NULL);
- EXPECT_TRUE(IsEqual(expected, *actual));
-}
diff --git a/contrib/ntp/tests/libntp/g_numtoa.cpp b/contrib/ntp/tests/libntp/g_numtoa.cpp
deleted file mode 100644
index a68e80d..0000000
--- a/contrib/ntp/tests/libntp/g_numtoa.cpp
+++ /dev/null
@@ -1,18 +0,0 @@
-#include "g_libntptest.h"
-
-class numtoaTest : public libntptest {
-};
-
-TEST_F(numtoaTest, Address) {
- u_int32 input = htonl(3221225472UL+512UL+1UL); // 192.0.2.1
-
- EXPECT_STREQ("192.0.2.1", numtoa(input));
-}
-
-TEST_F(numtoaTest, Netmask) {
- // 255.255.255.0
- u_int32 hostOrder = 255UL*256UL*256UL*256UL + 255UL*256UL*256UL + 255UL*256UL;
- u_int32 input = htonl(hostOrder);
-
- EXPECT_STREQ("255.255.255.0", numtoa(input));
-}
diff --git a/contrib/ntp/tests/libntp/g_numtohost.cpp b/contrib/ntp/tests/libntp/g_numtohost.cpp
deleted file mode 100644
index e04cad8..0000000
--- a/contrib/ntp/tests/libntp/g_numtohost.cpp
+++ /dev/null
@@ -1,15 +0,0 @@
-#include "g_libntptest.h"
-
-class numtohostTest : public libntptest {
-};
-
-TEST_F(numtohostTest, LoopbackNetNonResolve) {
- /* A loopback address in 127.0.0.0/8 is chosen, and
- * numtohost() should not try to resolve it unless
- * it is 127.0.0.1
- */
-
- u_int32 input = 127*256*256*256 + 1*256 + 1; // 127.0.1.1
-
- EXPECT_STREQ("127.0.1.1", numtohost(htonl(input)));
-}
diff --git a/contrib/ntp/tests/libntp/g_octtoint.cpp b/contrib/ntp/tests/libntp/g_octtoint.cpp
deleted file mode 100644
index 8731eed..0000000
--- a/contrib/ntp/tests/libntp/g_octtoint.cpp
+++ /dev/null
@@ -1,57 +0,0 @@
-#include "g_libntptest.h"
-
-class octtointTest : public libntptest {
-};
-
-TEST_F(octtointTest, SingleDigit) {
- const char* str = "5";
- u_long actual;
-
- ASSERT_TRUE(octtoint(str, &actual));
- EXPECT_EQ(5, actual);
-}
-
-TEST_F(octtointTest, MultipleDigits) {
- const char* str = "271";
- u_long actual;
-
- ASSERT_TRUE(octtoint(str, &actual));
- EXPECT_EQ(185, actual);
-}
-
-TEST_F(octtointTest, Zero) {
- const char* str = "0";
- u_long actual;
-
- ASSERT_TRUE(octtoint(str, &actual));
- EXPECT_EQ(0, actual);
-}
-
-TEST_F(octtointTest, MaximumUnsigned32bit) {
- const char* str = "37777777777";
- u_long actual;
-
- ASSERT_TRUE(octtoint(str, &actual));
- EXPECT_EQ(4294967295UL, actual);
-}
-
-TEST_F(octtointTest, Overflow) {
- const char* str = "40000000000";
- u_long actual;
-
- ASSERT_FALSE(octtoint(str, &actual));
-}
-
-TEST_F(octtointTest, IllegalCharacter) {
- const char* str = "5ac2";
- u_long actual;
-
- ASSERT_FALSE(octtoint(str, &actual));
-}
-
-TEST_F(octtointTest, IllegalDigit) {
- const char* str = "5283";
- u_long actual;
-
- ASSERT_FALSE(octtoint(str, &actual));
-}
diff --git a/contrib/ntp/tests/libntp/g_prettydate.cpp b/contrib/ntp/tests/libntp/g_prettydate.cpp
deleted file mode 100644
index 45741b5..0000000
--- a/contrib/ntp/tests/libntp/g_prettydate.cpp
+++ /dev/null
@@ -1,16 +0,0 @@
-#include "g_libntptest.h"
-
-extern "C" {
-#include "ntp_fp.h"
-};
-
-class prettydateTest : public libntptest {
-protected:
- static const u_int32 HALF = 2147483648UL;
-};
-
-TEST_F(prettydateTest, ConstantDate) {
- l_fp time = {3485080800UL, HALF}; // 2010-06-09 14:00:00.5
-
- ASSERT_STREQ("cfba1ce0.80000000 Wed, Jun 9 2010 14:00:00.500", gmprettydate(&time));
-}
diff --git a/contrib/ntp/tests/libntp/g_recvbuff.cpp b/contrib/ntp/tests/libntp/g_recvbuff.cpp
deleted file mode 100644
index 799802d..0000000
--- a/contrib/ntp/tests/libntp/g_recvbuff.cpp
+++ /dev/null
@@ -1,38 +0,0 @@
-#include "g_libntptest.h"
-
-extern "C" {
-#include "recvbuff.h"
-};
-
-class recvbuffTest : public libntptest {
-protected:
- virtual void SetUp() {
- init_recvbuff(RECV_INIT);
- }
-};
-
-TEST_F(recvbuffTest, Initialization) {
- EXPECT_EQ(RECV_INIT, free_recvbuffs());
- EXPECT_EQ(0, full_recvbuffs());
- EXPECT_FALSE(has_full_recv_buffer());
- EXPECT_TRUE(get_full_recv_buffer() == NULL);
-}
-
-TEST_F(recvbuffTest, GetAndFree) {
- int initial = free_recvbuffs();
- recvbuf_t* buf = get_free_recv_buffer();
-
- EXPECT_EQ(initial-1, free_recvbuffs());
- freerecvbuf(buf);
- EXPECT_EQ(initial, free_recvbuffs());
-}
-
-TEST_F(recvbuffTest, GetAndFill) {
- int initial = free_recvbuffs();
- recvbuf_t* buf = get_free_recv_buffer();
-
- add_full_recv_buffer(buf);
- EXPECT_EQ(1, full_recvbuffs());
- EXPECT_TRUE(has_full_recv_buffer());
- EXPECT_EQ(buf, get_full_recv_buffer());
-}
diff --git a/contrib/ntp/tests/libntp/g_refnumtoa.cpp b/contrib/ntp/tests/libntp/g_refnumtoa.cpp
deleted file mode 100644
index 91648aa..0000000
--- a/contrib/ntp/tests/libntp/g_refnumtoa.cpp
+++ /dev/null
@@ -1,52 +0,0 @@
-#include "g_libntptest.h"
-
-#include "ntp_net.h"
-#include "ntp_refclock.h"
-
-#include <sstream>
-
-class refnumtoaTest : public libntptest {
-protected:
- /* Might need to be updated if a new refclock gets this id. */
- static const int UNUSED_REFCLOCK_ID = 250;
-};
-
-#ifdef REFCLOCK /* clockname() is useless otherwise */
-TEST_F(refnumtoaTest, LocalClock) {
- /* We test with a refclock address of type LOCALCLOCK.
- * with id 8
- */
- u_int32 addr = REFCLOCK_ADDR;
- addr |= REFCLK_LOCALCLOCK << 8;
- addr |= 0x8;
-
- sockaddr_u address;
- address.sa4.sin_family = AF_INET;
- address.sa4.sin_addr.s_addr = htonl(addr);
-
- std::ostringstream expected;
- expected << clockname(REFCLK_LOCALCLOCK)
- << "(8)";
-
- EXPECT_STREQ(expected.str().c_str(), refnumtoa(&address));
-}
-#endif /* REFCLOCK */
-
-#ifdef REFCLOCK /* refnumtoa() is useless otherwise */
-TEST_F(refnumtoaTest, UnknownId) {
- /* We test with a currently unused refclock ID */
- u_int32 addr = REFCLOCK_ADDR;
- addr |= UNUSED_REFCLOCK_ID << 8;
- addr |= 0x4;
-
- sockaddr_u address;
- address.sa4.sin_family = AF_INET;
- address.sa4.sin_addr.s_addr = htonl(addr);
-
- std::ostringstream expected;
- expected << "REFCLK(" << UNUSED_REFCLOCK_ID
- << ",4)";
-
- EXPECT_STREQ(expected.str().c_str(), refnumtoa(&address));
-}
-#endif /* REFCLOCK */
diff --git a/contrib/ntp/tests/libntp/g_sfptostr.cpp b/contrib/ntp/tests/libntp/g_sfptostr.cpp
deleted file mode 100644
index c31b30c..0000000
--- a/contrib/ntp/tests/libntp/g_sfptostr.cpp
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
- * This file contains test for both fptoa and fptoms (which uses dofptoa),
- * since all these functions are very similar.
- */
-
-#include "g_libntptest.h"
-
-extern "C" {
-#include "ntp_fp.h"
-};
-
-class sfptostr : public libntptest {
-protected:
- static const int SFP_MAX_PRECISION = 6;
-};
-
-TEST_F(sfptostr, PositiveInteger) {
- s_fp test = 300 << 16; // exact 300.000000
-
- EXPECT_STREQ("300.000000", fptoa(test, SFP_MAX_PRECISION));
- EXPECT_STREQ("300000.000", fptoms(test, SFP_MAX_PRECISION));
-}
-
-TEST_F(sfptostr, NegativeInteger) {
- s_fp test = -200 << 16; // exact -200.000000
-
- EXPECT_STREQ("-200.000000", fptoa(test, SFP_MAX_PRECISION));
- EXPECT_STREQ("-200000.000", fptoms(test, SFP_MAX_PRECISION));
-}
-
-TEST_F(sfptostr, PositiveIntegerPositiveFraction) {
- s_fp test = (300 << 16) + (1 << 15); // 300 + 0.5
-
- EXPECT_STREQ("300.500000", fptoa(test, SFP_MAX_PRECISION));
- EXPECT_STREQ("300500.000", fptoms(test, SFP_MAX_PRECISION));
-}
-
-TEST_F(sfptostr, NegativeIntegerNegativeFraction) {
- s_fp test = (-200 << 16) - (1 << 15); // -200 - 0.5
-
- EXPECT_STREQ("-200.500000", fptoa(test, SFP_MAX_PRECISION));
- EXPECT_STREQ("-200500.000", fptoms(test, SFP_MAX_PRECISION));
-}
-
-TEST_F(sfptostr, PositiveIntegerNegativeFraction) {
- s_fp test = (300 << 16) - (1 << 14); // 300 - 0.25
-
- EXPECT_STREQ("299.750000", fptoa(test, SFP_MAX_PRECISION));
- EXPECT_STREQ("299750.000", fptoms(test, SFP_MAX_PRECISION));
-}
-
-TEST_F(sfptostr, NegativeIntegerPositiveFraction) {
- s_fp test = (-200 << 16) + (1 << 14)*3; // -200 + 0.75
-
- EXPECT_STREQ("-199.250000", fptoa(test, SFP_MAX_PRECISION));
- EXPECT_STREQ("-199250.000", fptoms(test, SFP_MAX_PRECISION));
-}
-
-TEST_F(sfptostr, SingleDecimalInteger) {
- s_fp test = 300 << 16; // 300
-
- EXPECT_STREQ("300.0", fptoa(test, 1));
- EXPECT_STREQ("300000.0", fptoms(test, 1));
-}
-
-TEST_F(sfptostr, SingleDecimalRounding) {
- s_fp test = (2 << 16) + (1 << 14)*3; // 2 + 0.25*3 = 2.75
-
- EXPECT_STREQ("2.8", fptoa(test, 1));
- EXPECT_STREQ("2750.0", fptoms(test, 1));
-}
diff --git a/contrib/ntp/tests/libntp/g_sockaddrtest.h b/contrib/ntp/tests/libntp/g_sockaddrtest.h
deleted file mode 100644
index 819a54f..0000000
--- a/contrib/ntp/tests/libntp/g_sockaddrtest.h
+++ /dev/null
@@ -1,59 +0,0 @@
-#ifndef TESTS_SOCKADDRTEST_H
-#define TESTS_SOCKADDRTEST_H
-
-#include "g_libntptest.h"
-
-extern "C" {
-#include "ntp.h"
-};
-
-class sockaddrtest : public libntptest {
-protected:
- ::testing::AssertionResult IsEqual(const sockaddr_u &expected, const sockaddr_u &actual) {
- if (expected.sa.sa_family != actual.sa.sa_family) {
- return ::testing::AssertionFailure()
- << "Expected sa_family: " << expected.sa.sa_family
- << " but got: " << actual.sa.sa_family;
- }
-
- if (actual.sa.sa_family == AF_INET) { // IPv4
- if (expected.sa4.sin_port == actual.sa4.sin_port &&
- memcmp(&expected.sa4.sin_addr, &actual.sa4.sin_addr,
- sizeof(in_addr)) == 0) {
- return ::testing::AssertionSuccess();
- } else {
- return ::testing::AssertionFailure()
- << "IPv4 comparision failed, expected: "
- << expected.sa4.sin_addr.s_addr
- << "(" << socktoa(&expected) << ")"
- << " but was: "
- << actual.sa4.sin_addr.s_addr
- << "(" << socktoa(&actual) << ")";
- }
- } else if (actual.sa.sa_family == AF_INET6) { //IPv6
- if (expected.sa6.sin6_port == actual.sa6.sin6_port &&
- memcmp(&expected.sa6.sin6_addr, &actual.sa6.sin6_addr,
- sizeof(in6_addr)) == 0) {
- return ::testing::AssertionSuccess();
- } else {
- return ::testing::AssertionFailure()
- << "IPv6 comparision failed";
- }
- } else { // Unknown family
- return ::testing::AssertionFailure()
- << "Unknown sa_family: " << actual.sa.sa_family;
- }
- }
-
- sockaddr_u CreateSockaddr4(const char* address, unsigned int port) {
- sockaddr_u s;
- s.sa4.sin_family = AF_INET;
- s.sa4.sin_addr.s_addr = inet_addr(address);
- SET_PORT(&s, port);
-
- return s;
- }
-};
-
-#endif // TESTS_SOCKADDRTEST_H
-
diff --git a/contrib/ntp/tests/libntp/g_socktoa.cpp b/contrib/ntp/tests/libntp/g_socktoa.cpp
deleted file mode 100644
index 2bb2fb1..0000000
--- a/contrib/ntp/tests/libntp/g_socktoa.cpp
+++ /dev/null
@@ -1,100 +0,0 @@
-#include "g_sockaddrtest.h"
-
-class socktoaTest : public sockaddrtest {
-};
-
-TEST_F(socktoaTest, IPv4AddressWithPort) {
- sockaddr_u input = CreateSockaddr4("192.0.2.10", 123);
-
- EXPECT_STREQ("192.0.2.10", socktoa(&input));
- EXPECT_STREQ("192.0.2.10:123", sockporttoa(&input));
-}
-
-TEST_F(socktoaTest, IPv6AddressWithPort) {
- const struct in6_addr address = {
- 0x20, 0x01, 0x0d, 0xb8,
- 0x85, 0xa3, 0x08, 0xd3,
- 0x13, 0x19, 0x8a, 0x2e,
- 0x03, 0x70, 0x73, 0x34
- };
-
- const char* expected =
- "2001:db8:85a3:8d3:1319:8a2e:370:7334";
- const char* expected_port =
- "[2001:db8:85a3:8d3:1319:8a2e:370:7334]:123";
-
- sockaddr_u input;
- memset(&input, 0, sizeof(input));
- AF(&input) = AF_INET6;
- SET_ADDR6N(&input, address);
- SET_PORT(&input, 123);
-
- EXPECT_STREQ(expected, socktoa(&input));
- EXPECT_STREQ(expected_port, sockporttoa(&input));
-}
-
-#ifdef ISC_PLATFORM_HAVESCOPEID
-TEST_F(socktoaTest, ScopedIPv6AddressWithPort) {
- const struct in6_addr address = {
- 0xfe, 0x80, 0x00, 0x00,
- 0x00, 0x00, 0x00, 0x00,
- 0x02, 0x12, 0x3f, 0xff,
- 0xfe, 0x29, 0xff, 0xfa
- };
-
- const char* expected =
- "fe80::212:3fff:fe29:fffa%5";
- const char* expected_port =
- "[fe80::212:3fff:fe29:fffa%5]:123";
-
- sockaddr_u input;
- memset(&input, 0, sizeof(input));
- AF(&input) = AF_INET6;
- SET_ADDR6N(&input, address);
- SET_PORT(&input, 123);
- SCOPE_VAR(&input) = 5;
-
- EXPECT_STREQ(expected, socktoa(&input));
- EXPECT_STREQ(expected_port, sockporttoa(&input));
-}
-#endif /* ISC_PLATFORM_HAVESCOPEID */
-
-TEST_F(socktoaTest, HashEqual) {
- sockaddr_u input1 = CreateSockaddr4("192.00.2.2", 123);
- sockaddr_u input2 = CreateSockaddr4("192.0.2.2", 123);
-
- ASSERT_TRUE(IsEqual(input1, input2));
- EXPECT_EQ(sock_hash(&input1), sock_hash(&input2));
-}
-
-TEST_F(socktoaTest, HashNotEqual) {
- /* These two addresses should not generate the same hash. */
- sockaddr_u input1 = CreateSockaddr4("192.0.2.1", 123);
- sockaddr_u input2 = CreateSockaddr4("192.0.2.2", 123);
-
- ASSERT_FALSE(IsEqual(input1, input2));
- EXPECT_NE(sock_hash(&input1), sock_hash(&input2));
-}
-
-TEST_F(socktoaTest, IgnoreIPv6Fields) {
- const struct in6_addr address = {
- 0x20, 0x01, 0x0d, 0xb8,
- 0x85, 0xa3, 0x08, 0xd3,
- 0x13, 0x19, 0x8a, 0x2e,
- 0x03, 0x70, 0x73, 0x34
- };
-
- sockaddr_u input1, input2;
-
- input1.sa6.sin6_family = AF_INET6;
- input1.sa6.sin6_addr = address;
- input1.sa6.sin6_flowinfo = 30L; // This value differs from input2.
- SET_PORT(&input1, NTP_PORT);
-
- input2.sa6.sin6_family = AF_INET6;
- input2.sa6.sin6_addr = address;
- input2.sa6.sin6_flowinfo = 10L; // This value differs from input1.
- SET_PORT(&input2, NTP_PORT);
-
- EXPECT_EQ(sock_hash(&input1), sock_hash(&input2));
-}
diff --git a/contrib/ntp/tests/libntp/g_ssl_init.cpp b/contrib/ntp/tests/libntp/g_ssl_init.cpp
deleted file mode 100644
index 16b2f4d..0000000
--- a/contrib/ntp/tests/libntp/g_ssl_init.cpp
+++ /dev/null
@@ -1,50 +0,0 @@
-#include "g_libntptest.h"
-
-extern "C" {
-#ifdef OPENSSL
-# include "openssl/err.h"
-# include "openssl/rand.h"
-# include "openssl/evp.h"
-#endif
-#include "ntp.h"
-};
-
-class ssl_initTest : public libntptest {
-protected:
- static const size_t TEST_MD5_DIGEST_LENGTH = 16;
- static const size_t TEST_SHA1_DIGEST_LENGTH = 20;
-};
-
-// keytype_from_text()
-TEST_F(ssl_initTest, MD5KeyTypeWithoutDigestLength) {
- ASSERT_EQ(KEY_TYPE_MD5, keytype_from_text("MD5", NULL));
-}
-
-TEST_F(ssl_initTest, MD5KeyTypeWithDigestLength) {
- size_t digestLength;
- size_t expected = TEST_MD5_DIGEST_LENGTH;
-
- EXPECT_EQ(KEY_TYPE_MD5, keytype_from_text("MD5", &digestLength));
- EXPECT_EQ(expected, digestLength);
-}
-
-#ifdef OPENSSL
-TEST_F(ssl_initTest, SHA1KeyTypeWithDigestLength) {
- size_t digestLength;
- size_t expected = TEST_SHA1_DIGEST_LENGTH;
-
- EXPECT_EQ(NID_sha, keytype_from_text("SHA", &digestLength));
- EXPECT_EQ(expected, digestLength);
-}
-#endif /* OPENSSL */
-
-// keytype_name()
-TEST_F(ssl_initTest, MD5KeyName) {
- EXPECT_STREQ("MD5", keytype_name(KEY_TYPE_MD5));
-}
-
-#ifdef OPENSSL
-TEST_F(ssl_initTest, SHA1KeyName) {
- EXPECT_STREQ("SHA", keytype_name(NID_sha));
-}
-#endif /* OPENSSL */
diff --git a/contrib/ntp/tests/libntp/g_statestr.cpp b/contrib/ntp/tests/libntp/g_statestr.cpp
deleted file mode 100644
index dedbf5b..0000000
--- a/contrib/ntp/tests/libntp/g_statestr.cpp
+++ /dev/null
@@ -1,28 +0,0 @@
-#include "g_libntptest.h"
-
-extern "C" {
-#include "ntp.h" // Needed for MAX_MAC_LEN used in ntp_control.h
-#include "ntp_control.h"
-};
-
-class statestrTest : public libntptest {
-};
-
-// eventstr()
-TEST_F(statestrTest, PeerRestart) {
- EXPECT_STREQ("restart", eventstr(PEVNT_RESTART));
-}
-
-TEST_F(statestrTest, SysUnspecified) {
- EXPECT_STREQ("unspecified", eventstr(EVNT_UNSPEC));
-}
-
-// ceventstr()
-TEST_F(statestrTest, ClockCodeExists) {
- EXPECT_STREQ("clk_unspec", ceventstr(CTL_CLK_OKAY));
-}
-
-TEST_F(statestrTest, ClockCodeUnknown) {
- EXPECT_STREQ("clk_-1", ceventstr(-1));
-}
-
diff --git a/contrib/ntp/tests/libntp/g_strtolfp.cpp b/contrib/ntp/tests/libntp/g_strtolfp.cpp
deleted file mode 100644
index d1b361e..0000000
--- a/contrib/ntp/tests/libntp/g_strtolfp.cpp
+++ /dev/null
@@ -1,107 +0,0 @@
-#include "g_lfptest.h"
-
-/* This class tests both atolfp and mstolfp */
-
-class strtolfpTest : public lfptest {
-};
-
-TEST_F(strtolfpTest, PositiveInteger) {
- const char *str = "500";
- const char *str_ms = "500000";
-
- l_fp expected = {500,0};
- l_fp actual, actual_ms;
-
- ASSERT_TRUE(atolfp(str, &actual));
- ASSERT_TRUE(mstolfp(str_ms, &actual_ms));
-
- EXPECT_TRUE(IsEqual(expected, actual));
- EXPECT_TRUE(IsEqual(expected, actual_ms));
-}
-
-TEST_F(strtolfpTest, NegativeInteger) {
- const char *str = "-300";
- const char *str_ms = "-300000";
-
- l_fp expected;
- expected.l_i = -300;
- expected.l_uf = 0;
-
- l_fp actual, actual_ms;
-
- ASSERT_TRUE(atolfp(str, &actual));
- ASSERT_TRUE(mstolfp(str_ms, &actual_ms));
-
- EXPECT_TRUE(IsEqual(expected, actual));
- EXPECT_TRUE(IsEqual(expected, actual_ms));
-}
-
-TEST_F(strtolfpTest, PositiveFraction) {
- const char *str = "+500.5";
- const char *str_ms = "500500.0";
-
- l_fp expected = {500, HALF};
- l_fp actual, actual_ms;
-
- ASSERT_TRUE(atolfp(str, &actual));
- ASSERT_TRUE(mstolfp(str_ms, &actual_ms));
-
- EXPECT_TRUE(IsEqual(expected, actual));
- EXPECT_TRUE(IsEqual(expected, actual_ms));
-}
-
-TEST_F(strtolfpTest, NegativeFraction) {
- const char *str = "-300.75";
- const char *str_ms = "-300750";
-
- l_fp expected;
- expected.l_i = -301;
- expected.l_uf = QUARTER;
-
- l_fp actual, actual_ms;
-
- ASSERT_TRUE(atolfp(str, &actual));
- ASSERT_TRUE(mstolfp(str_ms, &actual_ms));
-
- EXPECT_TRUE(IsEqual(expected, actual));
- EXPECT_TRUE(IsEqual(expected, actual_ms));
-}
-
-TEST_F(strtolfpTest, PositiveMsFraction) {
- const char *str = "300.00025";
- const char *str_ms = "300000.25";
-
- l_fp expected = {300, QUARTER_PROMILLE_APPRX};
- l_fp actual, actual_ms;
-
- ASSERT_TRUE(atolfp(str, &actual));
- ASSERT_TRUE(mstolfp(str_ms, &actual_ms));
-
- EXPECT_TRUE(IsEqual(expected, actual));
- EXPECT_TRUE(IsEqual(expected, actual_ms));
-}
-
-TEST_F(strtolfpTest, NegativeMsFraction) {
- const char *str = "-199.99975";
- const char *str_ms = "-199999.75";
-
- l_fp expected;
- expected.l_i = -200;
- expected.l_uf = QUARTER_PROMILLE_APPRX;
-
- l_fp actual, actual_ms;
-
- ASSERT_TRUE(atolfp(str, &actual));
- ASSERT_TRUE(mstolfp(str_ms, &actual_ms));
-
- EXPECT_TRUE(IsEqual(expected, actual));
- EXPECT_TRUE(IsEqual(expected, actual_ms));
-}
-
-TEST_F(strtolfpTest, InvalidChars) {
- const char *str = "500.4a2";
- l_fp actual, actual_ms;
-
- ASSERT_FALSE(atolfp(str, &actual));
- ASSERT_FALSE(mstolfp(str, &actual_ms));
-}
diff --git a/contrib/ntp/tests/libntp/g_timespecops.cpp b/contrib/ntp/tests/libntp/g_timespecops.cpp
deleted file mode 100644
index 0cc573f..0000000
--- a/contrib/ntp/tests/libntp/g_timespecops.cpp
+++ /dev/null
@@ -1,475 +0,0 @@
-#include "g_libntptest.h"
-#include "g_timestructs.h"
-
-extern "C" {
-#include <math.h>
-#include "timespecops.h"
-}
-
-#include <string>
-#include <sstream>
-
-using namespace timeStruct;
-
-class timespecTest : public libntptest {
-protected:
- static u_int32 my_tick_to_tsf(u_int32 ticks);
- static u_int32 my_tsf_to_tick(u_int32 tsf);
-
- // that's it...
- struct lfpfracdata {
- long nsec;
- u_int32 frac;
- };
- static const lfpfracdata fdata[];
-};
-
-u_int32
-timespecTest::my_tick_to_tsf(
- u_int32 ticks
- )
-{
- // convert nanoseconds to l_fp fractional units, using double
- // precision float calculations or, if available, 64bit integer
- // arithmetic. This should give the precise fraction, rounded to
- // the nearest representation.
-#ifdef HAVE_U_INT64
- return u_int32(((u_int64(ticks) << 32) + 500000000) / 1000000000);
-#else
- return u_int32(double(ticks) * 4.294967296 + 0.5);
-#endif
- // And before you ask: if ticks >= 1000000000, the result is
- // truncated nonsense, so don't use it out-of-bounds.
-}
-
-u_int32
-timespecTest::my_tsf_to_tick(
- u_int32 tsf
- )
-{
- // Inverse operation: converts fraction to microseconds.
-#ifdef HAVE_U_INT64
- return u_int32((u_int64(tsf) * 1000000000 + 0x80000000) >> 32);
-#else
- return u_int32(double(tsf) / 4.294967296 + 0.5);
-#endif
- // Beware: The result might be 10^9 due to rounding!
-}
-
-const timespecTest::lfpfracdata timespecTest::fdata [] = {
- { 0, 0x00000000 }, { 2218896, 0x00916ae6 },
- { 16408100, 0x0433523d }, { 125000000, 0x20000000 },
- { 250000000, 0x40000000 }, { 287455871, 0x4996b53d },
- { 375000000, 0x60000000 }, { 500000000, 0x80000000 },
- { 518978897, 0x84dbcd0e }, { 563730222, 0x90509fb3 },
- { 563788007, 0x9054692c }, { 583289882, 0x95527c57 },
- { 607074509, 0x9b693c2a }, { 625000000, 0xa0000000 },
- { 645184059, 0xa52ac851 }, { 676497788, 0xad2ef583 },
- { 678910895, 0xadcd1abb }, { 679569625, 0xadf84663 },
- { 690926741, 0xb0e0932d }, { 705656483, 0xb4a5e73d },
- { 723553854, 0xb93ad34c }, { 750000000, 0xc0000000 },
- { 763550253, 0xc3780785 }, { 775284917, 0xc6791284 },
- { 826190764, 0xd3813ce8 }, { 875000000, 0xe0000000 },
- { 956805507, 0xf4f134a9 }, { 982570733, 0xfb89c16c }
-};
-
-
-// ---------------------------------------------------------------------
-// test support stuff -- part 1
-// ---------------------------------------------------------------------
-
-TEST_F(timespecTest, Helpers1) {
- timespec_wrap x;
-
- for (x.V.tv_sec = -2; x.V.tv_sec < 3; x.V.tv_sec++) {
- x.V.tv_nsec = -1;
- ASSERT_FALSE(x.valid());
- x.V.tv_nsec = 0;
- ASSERT_TRUE(x.valid());
- x.V.tv_nsec = 999999999;
- ASSERT_TRUE(x.valid());
- x.V.tv_nsec = 1000000000;
- ASSERT_FALSE(x.valid());
- }
-}
-
-//----------------------------------------------------------------------
-// test normalisation
-//----------------------------------------------------------------------
-
-TEST_F(timespecTest, Normalise) {
- for (long ns = -2000000000; ns <= 2000000000; ns += 10000000) {
- timespec_wrap x(0, ns);
-
- x = normalize_tspec(x);
- ASSERT_TRUE(x.valid());
- }
-}
-
-//----------------------------------------------------------------------
-// test classification
-//----------------------------------------------------------------------
-
-TEST_F(timespecTest, SignNoFrac) {
- // sign test, no fraction
- for (int i = -4; i <= 4; ++i) {
- timespec_wrap a(i, 0);
- int E = (i > 0) - (i < 0);
- int r = test_tspec(a);
-
- ASSERT_EQ(E, r);
- }
-}
-
-TEST_F(timespecTest, SignWithFrac) {
- // sign test, with fraction
- for (int i = -4; i <= 4; ++i) {
- timespec_wrap a(i, 10);
- int E = (i >= 0) - (i < 0);
- int r = test_tspec(a);
- ASSERT_EQ(E, r);
- }
-}
-
-//----------------------------------------------------------------------
-// test compare
-//----------------------------------------------------------------------
-TEST_F(timespecTest, CmpFracEQ) {
- // fractions are equal
- for (int i = -4; i <= 4; ++i)
- for (int j = -4; j <= 4; ++j) {
- timespec_wrap a( i , 200);
- timespec_wrap b( j , 200);
- int E = (i > j) - (i < j);
- int r = cmp_tspec_denorm(a, b);
- ASSERT_EQ(E, r);
- }
-}
-
-TEST_F(timespecTest, CmpFracGT) {
- // fraction a bigger fraction b
- for (int i = -4; i <= 4; ++i)
- for (int j = -4; j <= 4; ++j) {
- timespec_wrap a(i, 999999800);
- timespec_wrap b(j, 200);
- int E = (i >= j) - (i < j);
- int r = cmp_tspec_denorm(a, b);
- ASSERT_EQ(E, r);
- }
-}
-
-TEST_F(timespecTest, CmpFracLT) {
- // fraction a less fraction b
- for (int i = -4; i <= 4; ++i)
- for (int j = -4; j <= 4; ++j) {
- timespec_wrap a(i, 200);
- timespec_wrap b(j, 999999800);
- int E = (i > j) - (i <= j);
- int r = cmp_tspec_denorm(a, b);
- ASSERT_EQ(E, r);
- }
-}
-
-//----------------------------------------------------------------------
-// Test addition (sum)
-//----------------------------------------------------------------------
-
-TEST_F(timespecTest, AddFullNorm) {
- for (int i = -4; i <= 4; ++i)
- for (int j = -4; j <= 4; ++j) {
- timespec_wrap a(i, 200);
- timespec_wrap b(j, 400);
- timespec_wrap E(i + j, 200 + 400);
- timespec_wrap c;
-
- c = add_tspec(a, b);
- ASSERT_EQ(E, c);
- }
-}
-
-TEST_F(timespecTest, AddFullOflow1) {
- for (int i = -4; i <= 4; ++i)
- for (int j = -4; j <= 4; ++j) {
- timespec_wrap a(i, 200);
- timespec_wrap b(j, 999999900);
- timespec_wrap E(i + j + 1, 100);
- timespec_wrap c;
-
- c = add_tspec(a, b);
- ASSERT_EQ(E, c);
- }
-}
-
-TEST_F(timespecTest, AddNsecNorm) {
- for (int i = -4; i <= 4; ++i) {
- timespec_wrap a(i, 200);
- timespec_wrap E(i, 600);
- timespec_wrap c;
-
- c = add_tspec_ns(a, 600 - 200);
- ASSERT_EQ(E, c);
- }
-}
-
-TEST_F(timespecTest, AddNsecOflow1) {
- for (int i = -4; i <= 4; ++i) {
- timespec_wrap a(i, 200);
- timespec_wrap E(i + 1, 100);
- timespec_wrap c;
-
- c = add_tspec_ns(a, NANOSECONDS - 100);
- ASSERT_EQ(E, c);
- }
-}
-
-//----------------------------------------------------------------------
-// test subtraction (difference)
-//----------------------------------------------------------------------
-
-TEST_F(timespecTest, SubFullNorm) {
- for (int i = -4; i <= 4; ++i)
- for (int j = -4; j <= 4; ++j) {
- timespec_wrap a( i , 600);
- timespec_wrap b( j , 400);
- timespec_wrap E(i-j, 200);
- timespec_wrap c;
-
- c = sub_tspec(a, b);
- ASSERT_EQ(E, c);
- }
-}
-
-TEST_F(timespecTest, SubFullOflow) {
- for (int i = -4; i <= 4; ++i)
- for (int j = -4; j <= 4; ++j) {
- timespec_wrap a( i , 100);
- timespec_wrap b( j , 999999900);
- timespec_wrap E(i-j-1, 200);
- timespec_wrap c;
-
- c = sub_tspec(a, b);
- ASSERT_EQ(E, c);
- }
-}
-
-TEST_F(timespecTest, SubNsecNorm) {
- for (int i = -4; i <= 4; ++i) {
- timespec_wrap a(i, 600);
- timespec_wrap E(i, 200);
- timespec_wrap c;
-
- c = sub_tspec_ns(a, 600 - 200);
- ASSERT_EQ(E, c);
- }
-}
-
-TEST_F(timespecTest, SubNsecOflow) {
- for (int i = -4; i <= 4; ++i) {
- timespec_wrap a( i , 100);
- timespec_wrap E(i-1, 200);
- timespec_wrap c;
-
- c = sub_tspec_ns(a, NANOSECONDS - 100);
- ASSERT_EQ(E, c);
- }
-}
-
-//----------------------------------------------------------------------
-// test negation
-//----------------------------------------------------------------------
-
-TEST_F(timespecTest, Neg) {
- for (int i = -4; i <= 4; ++i) {
- timespec_wrap a(i, 100);
- timespec_wrap b;
- timespec_wrap c;
-
- b = neg_tspec(a);
- c = add_tspec(a, b);
- ASSERT_EQ(0, test_tspec(c));
- }
-}
-
-//----------------------------------------------------------------------
-// test abs value
-//----------------------------------------------------------------------
-
-TEST_F(timespecTest, AbsNoFrac) {
- for (int i = -4; i <= 4; ++i) {
- timespec_wrap a(i , 0);
- timespec_wrap b;
-
- b = abs_tspec(a);
- ASSERT_EQ((i != 0), test_tspec(b));
- }
-}
-
-TEST_F(timespecTest, AbsWithFrac) {
- for (int i = -4; i <= 4; ++i) {
- timespec_wrap a(i, 100);
- timespec_wrap b;
-
- b = abs_tspec(a);
- ASSERT_EQ(1, test_tspec(b));
- }
-}
-
-// ---------------------------------------------------------------------
-// test support stuff -- part 2
-// ---------------------------------------------------------------------
-
-TEST_F(timespecTest, Helpers2) {
- AssertTimespecClose isClose(0, 2);
- timespec_wrap x, y;
-
- for (x.V.tv_sec = -2; x.V.tv_sec < 3; x.V.tv_sec++)
- for (x.V.tv_nsec = 1;
- x.V.tv_nsec < 1000000000;
- x.V.tv_nsec += 499999999) {
- for (long i = -4; i < 5; i++) {
- y = x;
- y.V.tv_nsec += i;
- if (i >= -2 && i <= 2)
- ASSERT_PRED_FORMAT2(isClose, x, y);
- else
- ASSERT_PRED_FORMAT2(!isClose, x, y);
- }
- }
-}
-
-// global predicate instances we're using here
-static AssertFpClose FpClose(0, 1);
-static AssertTimespecClose TimespecClose(0, 2);
-
-//----------------------------------------------------------------------
-// conversion to l_fp
-//----------------------------------------------------------------------
-
-TEST_F(timespecTest, ToLFPbittest) {
- for (u_int32 i = 0; i < 1000000000; i+=1000) {
- timespec_wrap a(1, i);
- l_fp_wrap E(1, my_tick_to_tsf(i));
- l_fp_wrap r;
-
- r = tspec_intv_to_lfp(a);
- ASSERT_PRED_FORMAT2(FpClose, E, r);
- }
-}
-
-TEST_F(timespecTest, ToLFPrelPos) {
- for (int i = 0; i < COUNTOF(fdata); i++) {
- timespec_wrap a(1, fdata[i].nsec);
- l_fp_wrap E(1, fdata[i].frac);
- l_fp_wrap r;
-
- r = tspec_intv_to_lfp(a);
- ASSERT_EQ(E, r);
- }
-}
-
-TEST_F(timespecTest, ToLFPrelNeg) {
- for (int i = 0; i < COUNTOF(fdata); i++) {
- timespec_wrap a(-1, fdata[i].nsec);
- l_fp_wrap E(~0, fdata[i].frac);
- l_fp_wrap r;
-
- r = tspec_intv_to_lfp(a);
- ASSERT_EQ(E, r);
- }
-}
-
-TEST_F(timespecTest, ToLFPabs) {
- for (int i = 0; i < COUNTOF(fdata); i++) {
- timespec_wrap a(1, fdata[i].nsec);
- l_fp_wrap E(1 + JAN_1970, fdata[i].frac);
- l_fp_wrap r;
-
- r = tspec_stamp_to_lfp(a);
- ASSERT_EQ(E, r);
- }
-}
-
-//----------------------------------------------------------------------
-// conversion from l_fp
-//----------------------------------------------------------------------
-TEST_F(timespecTest, FromLFPbittest) {
- // Not *exactly* a bittest, because 2**32 tests would take a
- // really long time even on very fast machines! So we do test
- // every 1000 fractional units.
- for (u_int32 tsf = 0; tsf < ~u_int32(1000); tsf += 1000) {
- timespec_wrap E(1, my_tsf_to_tick(tsf));
- l_fp_wrap a(1, tsf);
- timespec_wrap r;
-
- r = lfp_intv_to_tspec(a);
- // The conversion might be off by one nanosecond when
- // comparing to calculated value.
- ASSERT_PRED_FORMAT2(TimespecClose, E, r);
- }
-}
-
-TEST_F(timespecTest, FromLFPrelPos) {
- for (int i = 0; i < COUNTOF(fdata); i++) {
- l_fp_wrap a(1, fdata[i].frac);
- timespec_wrap E(1, fdata[i].nsec);
- timespec_wrap r;
-
- r = lfp_intv_to_tspec(a);
- ASSERT_PRED_FORMAT2(TimespecClose, E, r);
- }
-}
-
-TEST_F(timespecTest, FromLFPrelNeg) {
- for (int i = 0; i < COUNTOF(fdata); i++) {
- l_fp_wrap a(~0, fdata[i].frac);
- timespec_wrap E(-1, fdata[i].nsec);
- timespec_wrap r;
-
- r = lfp_intv_to_tspec(a);
- ASSERT_PRED_FORMAT2(TimespecClose, E, r);
- }
-}
-
-
-// nsec -> frac -> nsec roundtrip, using a prime start and increment
-TEST_F(timespecTest, LFProundtrip) {
- for (int32_t t = -1; t < 2; ++t)
- for (u_int32 i = 4999; i < 1000000000; i+=10007) {
- timespec_wrap E(t, i);
- l_fp_wrap a;
- timespec_wrap r;
-
- a = tspec_intv_to_lfp(E);
- r = lfp_intv_to_tspec(a);
- ASSERT_EQ(E, r);
- }
-}
-
-//----------------------------------------------------------------------
-// string formatting
-//----------------------------------------------------------------------
-
-TEST_F(timespecTest, ToString) {
- static const struct {
- time_t sec;
- long nsec;
- const char * repr;
- } data [] = {
- { 0, 0, "0.000000000" },
- { 2, 0, "2.000000000" },
- {-2, 0, "-2.000000000" },
- { 0, 1, "0.000000001" },
- { 0,-1, "-0.000000001" },
- { 1,-1, "0.999999999" },
- {-1, 1, "-0.999999999" },
- {-1,-1, "-1.000000001" },
- };
- for (int i = 0; i < COUNTOF(data); i++) {
- timespec_wrap a(data[i].sec, data[i].nsec);
- std::string E(data[i].repr);
- std::string r(tspectoa(a));
- ASSERT_EQ(E, r);
- }
-}
-
-// -*- EOF -*-
diff --git a/contrib/ntp/tests/libntp/g_timestructs.cpp b/contrib/ntp/tests/libntp/g_timestructs.cpp
deleted file mode 100644
index 15b5ec1..0000000
--- a/contrib/ntp/tests/libntp/g_timestructs.cpp
+++ /dev/null
@@ -1,156 +0,0 @@
-/*
- * timestructs.cpp -- test bed adaptors for time structs.
- *
- * Written by Juergen Perlinger (perlinger@ntp.org) for the NTP project.
- * The contents of 'html/copyright.html' apply.
- */
-#include "g_libntptest.h"
-#include "g_timestructs.h"
-
-extern "C" {
-#include "timetoa.h"
-#include "timevalops.h"
-#include "timespecops.h"
-}
-
-namespace timeStruct {
-
-std::ostream&
-operator << (std::ostream& os, const timeStruct::l_fp_wrap& val)
-{
- // raw data formatting
- os << "0x" << std::hex << val.V.l_ui << ':'
- << std::setfill('0') << std::setw(8) << val.V.l_uf
- << std::dec;
- // human-readable format
- os << '[' << lfptoa(&val.V, 10) << ']';
- return os;
-}
-
-std::ostream&
-operator << (std::ostream& os, const timeStruct::timeval_wrap& val)
-{
- // raw data formatting
- os << val.V.tv_sec << ':' << val.V.tv_usec;
- // human-readable format
- os << '['
- << format_time_fraction(val.V.tv_sec, val.V.tv_usec, 6)
- << ']';
- return os;
-}
-
-std::ostream&
-operator << (std::ostream& os, const timeStruct::timespec_wrap& val)
-{
- // raw data formatting
- os << val.V.tv_sec << ':' << val.V.tv_nsec;
- // human-readable format
- os << '['
- << format_time_fraction(val.V.tv_sec, val.V.tv_nsec, 9)
- << ']';
- return os;
-}
-
-// Implementation of the l_fp closeness predicate
-
-AssertFpClose::AssertFpClose(
- u_int32 hi,
- u_int32 lo
- )
-{
- limit.l_ui = hi;
- limit.l_uf = lo;
-}
-
-::testing::AssertionResult
-AssertFpClose::operator()(
- const char* m_expr,
- const char* n_expr,
- const l_fp & m,
- const l_fp & n
- )
-{
- l_fp diff;
-
- if (L_ISGEQ(&m, &n)) {
- diff = m;
- L_SUB(&diff, &n);
- } else {
- diff = n;
- L_SUB(&diff, &m);
- }
- if (L_ISGEQ(&limit, &diff))
- return ::testing::AssertionSuccess();
-
- return ::testing::AssertionFailure()
- << m_expr << " which is " << l_fp_wrap(m)
- << "\nand\n"
- << n_expr << " which is " << l_fp_wrap(n)
- << "\nare not close; diff=" << l_fp_wrap(diff);
-}
-
-// Implementation of the timeval closeness predicate
-
-AssertTimevalClose::AssertTimevalClose(
- time_t hi,
- int32 lo
- )
-{
- limit.tv_sec = hi;
- limit.tv_usec = lo;
-}
-
-::testing::AssertionResult
-AssertTimevalClose::operator()(
- const char* m_expr,
- const char* n_expr,
- const struct timeval & m,
- const struct timeval & n
- )
-{
- struct timeval diff;
-
- diff = abs_tval(sub_tval(m, n));
- if (cmp_tval(limit, diff) >= 0)
- return ::testing::AssertionSuccess();
-
- return ::testing::AssertionFailure()
- << m_expr << " which is " << timeval_wrap(m)
- << "\nand\n"
- << n_expr << " which is " << timeval_wrap(n)
- << "\nare not close; diff=" << timeval_wrap(diff);
-}
-
-// Implementation of the timespec closeness predicate
-
-AssertTimespecClose::AssertTimespecClose(
- time_t hi,
- int32 lo
- )
-{
- limit.tv_sec = hi;
- limit.tv_nsec = lo;
-}
-
-::testing::AssertionResult
-AssertTimespecClose::operator()(
- const char* m_expr,
- const char* n_expr,
- const struct timespec & m,
- const struct timespec & n
- )
-{
- struct timespec diff;
-
- diff = abs_tspec(sub_tspec(m, n));
- if (cmp_tspec(limit, diff) >= 0)
- return ::testing::AssertionSuccess();
-
- return ::testing::AssertionFailure()
- << m_expr << " which is " << timespec_wrap(m)
- << "\nand\n"
- << n_expr << " which is " << timespec_wrap(n)
- << "\nare not close; diff=" << timespec_wrap(diff);
-}
-
-} // namespace timeStruct
diff --git a/contrib/ntp/tests/libntp/g_timestructs.h b/contrib/ntp/tests/libntp/g_timestructs.h
deleted file mode 100644
index 7bc4ffd..0000000
--- a/contrib/ntp/tests/libntp/g_timestructs.h
+++ /dev/null
@@ -1,185 +0,0 @@
-/*
- * timestructs.h -- test bed adaptors for time structs.
- *
- * Written by Juergen Perlinger (perlinger@ntp.org) for the NTP project.
- * The contents of 'html/copyright.html' apply.
- *
- * Some wrapper classes and a closeness predicate that are used to
- * bridge the gap between the goggletest framework and the structs used
- * for representing time stamps (l_fp, struct timeval, struct timespec).
- *
- * Some ostream conversion operators are provided to give diagnostic
- * output on errors. The normal string conversion functions will give
- * HRVs (human readable values) but we might also be interested in the
- * machine representation for diagnostic purposes.
- */
-#ifndef TIMESTRUCTS_H
-#define TIMESTRUCTS_H
-
-extern "C" {
-#include "ntp_fp.h"
-}
-
-namespace timeStruct {
-
-// wrap a l_fp struct with common operations
-class l_fp_wrap {
- public:
- l_fp V;
-
- l_fp_wrap()
- { ZERO(V); }
- l_fp_wrap(u_int32 hi, u_int32 lo)
- { V.l_ui = hi; V.l_uf = lo; }
- l_fp_wrap(const l_fp &rhs)
- { V = rhs; }
- bool operator == (const l_fp_wrap& rhs) const
- { return L_ISEQU(&V, &rhs.V); }
- operator l_fp* ()
- { return &V; }
- operator l_fp& ()
- { return V; }
- l_fp_wrap & operator = (const l_fp_wrap& rhs)
- { V = rhs.V; return *this; }
- l_fp_wrap& operator = (const l_fp& rhs)
- { V = rhs; return *this; }
- };
-
-// wrap a 'struct timeval' with common operations
-class timeval_wrap {
-public:
- struct timeval V;
-
- timeval_wrap()
- { ZERO(V); }
- timeval_wrap(time_t hi, long lo)
- { V.tv_sec = hi; V.tv_usec = lo; }
- timeval_wrap(const struct timeval & rhs)
- { V = rhs; }
- timeval_wrap(const timeval_wrap & rhs)
- { V = rhs.V; }
- bool operator == (const timeval_wrap& rhs) const
- { return V.tv_sec == rhs.V.tv_sec &&
- V.tv_usec == rhs.V.tv_usec ; }
- bool valid() const
- { return V.tv_usec >= 0 && V.tv_usec < 1000000; }
- operator struct timeval* ()
- { return &V; }
- operator struct timeval& ()
- { return V; }
- timeval_wrap& operator = (const timeval_wrap& rhs)
- { V = rhs.V; return *this; }
- timeval_wrap& operator = (const struct timeval& rhs)
- { V = rhs; return *this; }
-};
-
-// wrap a 'struct timespec' with common operations
-class timespec_wrap {
-public:
- struct timespec V;
-
- timespec_wrap()
- { ZERO(V); }
- timespec_wrap(time_t hi, long lo)
- { V.tv_sec = hi; V.tv_nsec = lo; }
- timespec_wrap(const struct timespec & rhs)
- { V = rhs; }
- timespec_wrap(const timespec_wrap & rhs)
- { V = rhs.V; }
- bool operator == (const timespec_wrap& rhs) const
- { return V.tv_sec == rhs.V.tv_sec &&
- V.tv_nsec == rhs.V.tv_nsec ; }
- bool valid() const
- { return V.tv_nsec >= 0 && V.tv_nsec < 1000000000; }
- operator struct timespec* ()
- { return &V; }
- operator struct timespec& ()
- { return V; }
- timespec_wrap& operator = (const timespec_wrap& rhs)
- { V = rhs.V; return *this; }
- timespec_wrap& operator = (const struct timespec& rhs)
- { V = rhs; return *this; }
-};
-
-// l_fp closeness testing predicate
-//
-// This predicate is used for the closeness ('near') testing of l_fp
-// values. Once constructed with a limit, it can be used to check the
-// absolute difference of two l_fp structs against that limit; if the
-// difference is less or equal to this limit, the test passes.
-class AssertFpClose {
-private:
- l_fp limit;
-
-public:
- AssertFpClose(u_int32 hi, u_int32 lo);
-
- ::testing::AssertionResult
- operator()(const char* m_expr, const char* n_expr,
- const l_fp & m, const l_fp & n);
-};
-
-
-// timeval closeness testing predicate
-//
-// CAVEAT: This class uses the timevalops functions
-// - sub_tval
-// - abs_tval
-// - cmp_tval
-//
-// This creates a dependency loop of sorts. The loop is defused by the
-// fact that these basic operations can be tested by exact value tests,
-// so once the basic timeval operations passed it's safe to use this
-// predicate.
-class AssertTimevalClose {
-private:
- struct timeval limit;
-
-public:
- // note: (hi,lo) should be a positive normalised timeval;
- // the constructor does not normalise the values!
- AssertTimevalClose(time_t hi, int32 lo);
-
- ::testing::AssertionResult
- operator()(const char* m_expr, const char* n_expr,
- const struct timeval & m, const struct timeval & n);
-};
-
-
-// timespec closeness testing predicate
-//
-// CAVEAT: This class uses the timespecops functions
-// - sub_tspec
-// - abs_tspec
-// - cmp_tspec
-//
-// See the equivalent timeval helper.
-class AssertTimespecClose {
-private:
- struct timespec limit;
-
-public:
- // note: (hi,lo) should be a positive normalised timespec;
- // the constructor does not normalise the values!
- AssertTimespecClose(time_t hi, int32 lo);
-
- ::testing::AssertionResult
- operator()(const char* m_expr, const char* n_expr,
- const struct timespec & m, const struct timespec & n);
-};
-
-
-// since googletest wants to string format items, we declare the
-// necessary operators. Since all adaptors have only public members
-// there is need for friend declarations anywhere.
-
-extern std::ostream& operator << (std::ostream& os,
- const timeStruct::l_fp_wrap& val);
-extern std::ostream& operator << (std::ostream& os,
- const timeStruct::timeval_wrap& val);
-extern std::ostream& operator << (std::ostream& os,
- const timeStruct::timespec_wrap& val);
-
-} // namespace timeStruct
-
-#endif // TIMESTRUCTS_H
diff --git a/contrib/ntp/tests/libntp/g_timevalops.cpp b/contrib/ntp/tests/libntp/g_timevalops.cpp
deleted file mode 100644
index 8c171fc..0000000
--- a/contrib/ntp/tests/libntp/g_timevalops.cpp
+++ /dev/null
@@ -1,480 +0,0 @@
-#include "g_libntptest.h"
-#include "g_timestructs.h"
-
-extern "C" {
-#include <math.h>
-#include "timevalops.h"
-}
-
-#include <string>
-#include <sstream>
-
-using namespace timeStruct;
-
-class timevalTest : public libntptest {
-protected:
- static u_int32 my_tick_to_tsf(u_int32 ticks);
- static u_int32 my_tsf_to_tick(u_int32 tsf);
-
- // that's it...
- struct lfpfracdata {
- long usec;
- u_int32 frac;
- };
- static const lfpfracdata fdata[];
-};
-
-u_int32
-timevalTest::my_tick_to_tsf(
- u_int32 ticks
- )
-{
- // convert microseconds to l_fp fractional units, using double
- // precision float calculations or, if available, 64bit integer
- // arithmetic. This should give the precise fraction, rounded to
- // the nearest representation.
-#ifdef HAVE_U_INT64
- return u_int32(((u_int64(ticks) << 32) + 500000) / 1000000);
-#else
- return u_int32(double(ticks) * 4294.967296 + 0.5);
-#endif
- // And before you ask: if ticks >= 1000000, the result is
- // truncated nonsense, so don't use it out-of-bounds.
-}
-
-u_int32
-timevalTest::my_tsf_to_tick(
- u_int32 tsf
- )
-{
- // Inverse operation: converts fraction to microseconds.
-#ifdef HAVE_U_INT64
- return u_int32((u_int64(tsf) * 1000000 + 0x80000000) >> 32);
-#else
- return u_int32(double(tsf) / 4294.967296 + 0.5);
-#endif
- // Beware: The result might be 10^6 due to rounding!
-}
-
-const timevalTest::lfpfracdata timevalTest::fdata [] = {
- { 0, 0x00000000 }, { 7478, 0x01ea1405 },
- { 22077, 0x05a6d699 }, { 125000, 0x20000000 },
- { 180326, 0x2e29d841 }, { 207979, 0x353e1c9b },
- { 250000, 0x40000000 }, { 269509, 0x44fe8ab5 },
- { 330441, 0x5497c808 }, { 333038, 0x5541fa76 },
- { 375000, 0x60000000 }, { 394734, 0x650d4995 },
- { 446327, 0x72427c7c }, { 500000, 0x80000000 },
- { 517139, 0x846338b4 }, { 571953, 0x926b8306 },
- { 587353, 0x965cc426 }, { 625000, 0xa0000000 },
- { 692136, 0xb12fd32c }, { 750000, 0xc0000000 },
- { 834068, 0xd5857aff }, { 848454, 0xd9344806 },
- { 854222, 0xdaae4b02 }, { 861465, 0xdc88f862 },
- { 875000, 0xe0000000 }, { 910661, 0xe921144d },
- { 922162, 0xec12cf10 }, { 942190, 0xf1335d25 }
-};
-
-
-// ---------------------------------------------------------------------
-// test support stuff - part1
-// ---------------------------------------------------------------------
-
-TEST_F(timevalTest, Helpers1) {
- timeval_wrap x;
-
- for (x.V.tv_sec = -2; x.V.tv_sec < 3; x.V.tv_sec++) {
- x.V.tv_usec = -1;
- ASSERT_FALSE(x.valid());
- x.V.tv_usec = 0;
- ASSERT_TRUE(x.valid());
- x.V.tv_usec = 999999;
- ASSERT_TRUE(x.valid());
- x.V.tv_usec = 1000000;
- ASSERT_FALSE(x.valid());
- }
-}
-
-//----------------------------------------------------------------------
-// test normalisation
-//----------------------------------------------------------------------
-
-TEST_F(timevalTest, Normalise) {
- for (long ns = -2000000000; ns <= 2000000000; ns += 10000000) {
- timeval_wrap x(0, ns);
-
- x = normalize_tval(x);
- ASSERT_TRUE(x.valid());
- }
-}
-
-//----------------------------------------------------------------------
-// test classification
-//----------------------------------------------------------------------
-
-TEST_F(timevalTest, SignNoFrac) {
- // sign test, no fraction
- for (int i = -4; i <= 4; ++i) {
- timeval_wrap a(i, 0);
- int E = (i > 0) - (i < 0);
- int r = test_tval(a);
-
- ASSERT_EQ(E, r);
- }
-}
-
-TEST_F(timevalTest, SignWithFrac) {
- // sign test, with fraction
- for (int i = -4; i <= 4; ++i) {
- timeval_wrap a(i, 10);
- int E = (i >= 0) - (i < 0);
- int r = test_tval(a);
-
- ASSERT_EQ(E, r);
- }
-}
-
-//----------------------------------------------------------------------
-// test compare
-//----------------------------------------------------------------------
-TEST_F(timevalTest, CmpFracEQ) {
- // fractions are equal
- for (int i = -4; i <= 4; ++i)
- for (int j = -4; j <= 4; ++j) {
- timeval_wrap a(i, 200);
- timeval_wrap b(j, 200);
- int E = (i > j) - (i < j);
- int r = cmp_tval_denorm(a, b);
-
- ASSERT_EQ(E, r);
- }
-}
-
-TEST_F(timevalTest, CmpFracGT) {
- // fraction a bigger fraction b
- for (int i = -4; i <= 4; ++i)
- for (int j = -4; j <= 4; ++j) {
- timeval_wrap a( i , 999800);
- timeval_wrap b( j , 200);
- int E = (i >= j) - (i < j);
- int r = cmp_tval_denorm(a, b);
-
- ASSERT_EQ(E, r);
- }
-}
-
-TEST_F(timevalTest, CmpFracLT) {
- // fraction a less fraction b
- for (int i = -4; i <= 4; ++i)
- for (int j = -4; j <= 4; ++j) {
- timeval_wrap a(i, 200);
- timeval_wrap b(j, 999800);
- int E = (i > j) - (i <= j);
- int r = cmp_tval_denorm(a, b);
-
- ASSERT_EQ(E, r);
- }
-}
-
-//----------------------------------------------------------------------
-// Test addition (sum)
-//----------------------------------------------------------------------
-
-TEST_F(timevalTest, AddFullNorm) {
- for (int i = -4; i <= 4; ++i)
- for (int j = -4; j <= 4; ++j) {
- timeval_wrap a(i, 200);
- timeval_wrap b(j, 400);
- timeval_wrap E(i + j, 200 + 400);
- timeval_wrap c;
-
- c = add_tval(a, b);
- ASSERT_EQ(E, c);
- }
-}
-
-TEST_F(timevalTest, AddFullOflow1) {
- for (int i = -4; i <= 4; ++i)
- for (int j = -4; j <= 4; ++j) {
- timeval_wrap a(i, 200);
- timeval_wrap b(j, 999900);
- timeval_wrap E(i + j + 1, 100);
- timeval_wrap c;
-
- c = add_tval(a, b);
- ASSERT_EQ(E, c);
- }
-}
-
-TEST_F(timevalTest, AddUsecNorm) {
- for (int i = -4; i <= 4; ++i) {
- timeval_wrap a(i, 200);
- timeval_wrap E(i, 600);
- timeval_wrap c;
-
- c = add_tval_us(a, 600 - 200);
- ASSERT_EQ(E, c);
- }
-}
-
-TEST_F(timevalTest, AddUsecOflow1) {
- for (int i = -4; i <= 4; ++i) {
- timeval_wrap a(i, 200);
- timeval_wrap E(i + 1, 100);
- timeval_wrap c;
-
- c = add_tval_us(a, MICROSECONDS - 100);
- ASSERT_EQ(E, c);
- }
-}
-
-//----------------------------------------------------------------------
-// test subtraction (difference)
-//----------------------------------------------------------------------
-
-TEST_F(timevalTest, SubFullNorm) {
- for (int i = -4; i <= 4; ++i)
- for (int j = -4; j <= 4; ++j) {
- timeval_wrap a(i, 600);
- timeval_wrap b(j, 400);
- timeval_wrap E(i - j, 600 - 400);
- timeval_wrap c;
-
- c = sub_tval(a, b);
- ASSERT_EQ(E, c);
- }
-}
-
-TEST_F(timevalTest, SubFullOflow) {
- for (int i = -4; i <= 4; ++i)
- for (int j = -4; j <= 4; ++j) {
- timeval_wrap a(i, 100);
- timeval_wrap b(j, 999900);
- timeval_wrap E(i - j - 1, 200);
- timeval_wrap c;
-
- c = sub_tval(a, b);
- ASSERT_EQ(E, c);
- }
-}
-
-TEST_F(timevalTest, SubUsecNorm) {
- for (int i = -4; i <= 4; ++i) {
- timeval_wrap a(i, 600);
- timeval_wrap E(i, 200);
- timeval_wrap c;
-
- c = sub_tval_us(a, 600 - 200);
- ASSERT_EQ(E, c);
- }
-}
-
-TEST_F(timevalTest, SubUsecOflow) {
- for (int i = -4; i <= 4; ++i) {
- timeval_wrap a(i, 100);
- timeval_wrap E(i - 1, 200);
- timeval_wrap c;
-
- c = sub_tval_us(a, MICROSECONDS - 100);
- ASSERT_EQ(E, c);
- }
-}
-
-//----------------------------------------------------------------------
-// test negation
-//----------------------------------------------------------------------
-
-TEST_F(timevalTest, Neg) {
- for (int i = -4; i <= 4; ++i) {
- timeval_wrap a(i, 100);
- timeval_wrap b;
- timeval_wrap c;
-
- b = neg_tval(a);
- c = add_tval(a, b);
- ASSERT_EQ(0, test_tval(c));
- }
-}
-
-//----------------------------------------------------------------------
-// test abs value
-//----------------------------------------------------------------------
-
-TEST_F(timevalTest, AbsNoFrac) {
- for (int i = -4; i <= 4; ++i) {
- timeval_wrap a(i, 0);
- timeval_wrap b;
-
- b = abs_tval(a);
- ASSERT_EQ((i != 0), test_tval(b));
- }
-}
-
-TEST_F(timevalTest, AbsWithFrac) {
- for (int i = -4; i <= 4; ++i) {
- timeval_wrap a(i, 100);
- timeval_wrap b;
-
- b = abs_tval(a);
- ASSERT_EQ(1, test_tval(b));
- }
-}
-
-// ---------------------------------------------------------------------
-// test support stuff -- part 2
-// ---------------------------------------------------------------------
-
-TEST_F(timevalTest, Helpers2) {
- AssertTimevalClose isClose(0, 2);
- timeval_wrap x, y;
-
- for (x.V.tv_sec = -2; x.V.tv_sec < 3; x.V.tv_sec++)
- for (x.V.tv_usec = 1;
- x.V.tv_usec < 1000000;
- x.V.tv_usec += 499999) {
- for (long i = -4; i < 5; i++) {
- y = x;
- y.V.tv_usec += i;
- if (i >= -2 && i <= 2)
- ASSERT_PRED_FORMAT2(isClose, x, y);
- else
- ASSERT_PRED_FORMAT2(!isClose, x, y);
- }
- }
-}
-
-// and the global predicate instances we're using here
-static AssertFpClose FpClose(0, 1);
-static AssertTimevalClose TimevalClose(0, 1);
-
-//----------------------------------------------------------------------
-// conversion to l_fp
-//----------------------------------------------------------------------
-
-TEST_F(timevalTest, ToLFPbittest) {
- for (u_int32 i = 0; i < 1000000; i++) {
- timeval_wrap a(1, i);
- l_fp_wrap E(1, my_tick_to_tsf(i));
- l_fp_wrap r;
-
- r = tval_intv_to_lfp(a);
- ASSERT_PRED_FORMAT2(FpClose, E, r);
- }
-}
-
-TEST_F(timevalTest, ToLFPrelPos) {
- for (int i = 0; i < COUNTOF(fdata); i++) {
- timeval_wrap a(1, fdata[i].usec);
- l_fp_wrap E(1, fdata[i].frac);
- l_fp_wrap r;
-
- r = tval_intv_to_lfp(a);
- ASSERT_PRED_FORMAT2(FpClose, E, r);
- }
-}
-
-TEST_F(timevalTest, ToLFPrelNeg) {
- for (int i = 0; i < COUNTOF(fdata); i++) {
- timeval_wrap a(-1, fdata[i].usec);
- l_fp_wrap E(~0, fdata[i].frac);
- l_fp_wrap r;
-
- r = tval_intv_to_lfp(a);
- ASSERT_PRED_FORMAT2(FpClose, E, r);
- }
-}
-
-TEST_F(timevalTest, ToLFPabs) {
- for (int i = 0; i < COUNTOF(fdata); i++) {
- timeval_wrap a(1, fdata[i].usec);
- l_fp_wrap E(1 + JAN_1970, fdata[i].frac);
- l_fp_wrap r;
-
- r = tval_stamp_to_lfp(a);
- ASSERT_PRED_FORMAT2(FpClose, E, r);
- }
-}
-
-//----------------------------------------------------------------------
-// conversion from l_fp
-//----------------------------------------------------------------------
-
-TEST_F(timevalTest, FromLFPbittest) {
- // Not *exactly* a bittest, because 2**32 tests would take a
- // really long time even on very fast machines! So we do test
- // every 1000 fractional units.
- for (u_int32 tsf = 0; tsf < ~u_int32(1000); tsf += 1000) {
- timeval_wrap E(1, my_tsf_to_tick(tsf));
- l_fp_wrap a(1, tsf);
- timeval_wrap r;
-
- r = lfp_intv_to_tval(a);
- // The conversion might be off by one microsecond when
- // comparing to calculated value.
- ASSERT_PRED_FORMAT2(TimevalClose, E, r);
- }
-}
-
-TEST_F(timevalTest, FromLFPrelPos) {
- for (int i = 0; i < COUNTOF(fdata); i++) {
- l_fp_wrap a(1, fdata[i].frac);
- timeval_wrap E(1, fdata[i].usec);
- timeval_wrap r;
-
- r = lfp_intv_to_tval(a);
- ASSERT_PRED_FORMAT2(TimevalClose, E, r);
- }
-}
-
-TEST_F(timevalTest, FromLFPrelNeg) {
- for (int i = 0; i < COUNTOF(fdata); i++) {
- l_fp_wrap a(~0, fdata[i].frac);
- timeval_wrap E(-1, fdata[i].usec);
- timeval_wrap r;
-
- r = lfp_intv_to_tval(a);
- ASSERT_PRED_FORMAT2(TimevalClose, E, r);
- }
-}
-
-// usec -> frac -> usec roundtrip, using a prime start and increment
-TEST_F(timevalTest, LFProundtrip) {
- for (int32_t t = -1; t < 2; ++t)
- for (u_int32 i = 5; i < 1000000; i+=11) {
- timeval_wrap E(t, i);
- l_fp_wrap a;
- timeval_wrap r;
-
- a = tval_intv_to_lfp(E);
- r = lfp_intv_to_tval(a);
- ASSERT_EQ(E, r);
- }
-}
-
-//----------------------------------------------------------------------
-// string formatting
-//----------------------------------------------------------------------
-
-TEST_F(timevalTest, ToString) {
- static const struct {
- time_t sec;
- long usec;
- const char * repr;
- } data [] = {
- { 0, 0, "0.000000" },
- { 2, 0, "2.000000" },
- {-2, 0, "-2.000000" },
- { 0, 1, "0.000001" },
- { 0,-1, "-0.000001" },
- { 1,-1, "0.999999" },
- {-1, 1, "-0.999999" },
- {-1,-1, "-1.000001" },
- };
- for (int i = 0; i < COUNTOF(data); ++i) {
- timeval_wrap a(data[i].sec, data[i].usec);
- std::string E(data[i].repr);
- std::string r(tvaltoa(a));
-
- ASSERT_EQ(E, r);
- }
-}
-
-// -*- EOF -*-
diff --git a/contrib/ntp/tests/libntp/g_tstotv.cpp b/contrib/ntp/tests/libntp/g_tstotv.cpp
deleted file mode 100644
index 30f4ca6..0000000
--- a/contrib/ntp/tests/libntp/g_tstotv.cpp
+++ /dev/null
@@ -1,57 +0,0 @@
-#include "g_libntptest.h"
-
-extern "C" {
-#include "ntp_fp.h"
-#include "timevalops.h"
-};
-
-class tstotvTest : public libntptest {
-protected:
- ::testing::AssertionResult IsEqual(const timeval& expected,
- const timeval& actual) {
- if (expected.tv_sec == actual.tv_sec &&
- expected.tv_usec == actual.tv_usec) {
- // Success
- return ::testing::AssertionSuccess();
- } else {
- return ::testing::AssertionFailure()
- << "expected: " << expected.tv_sec << "."
- << expected.tv_usec
- << " but was: " << actual.tv_sec << "."
- << actual.tv_usec;
- }
- }
-
- static const u_long HALF = 2147483648UL;
-};
-
-TEST_F(tstotvTest, Seconds) {
- const l_fp input = {50, 0}; // 50.0 s
- const timeval expected = {50, 0};
- timeval actual;
-
- TSTOTV(&input, &actual);
-
- EXPECT_TRUE(IsEqual(expected, actual));
-}
-
-TEST_F(tstotvTest, MicrosecondsExact) {
- const l_fp input = {50, HALF}; // 10.5 s
- const timeval expected = {50, 500000};
- timeval actual;
-
- TSTOTV(&input, &actual);
-
- EXPECT_TRUE(IsEqual(expected, actual));
-
-}
-
-TEST_F(tstotvTest, MicrosecondsRounding) {
- const l_fp input = {50, 3865471UL}; // Should round to 50.0009
- const timeval expected = {50, 900};
- timeval actual;
-
- TSTOTV(&input, &actual);
-
- EXPECT_TRUE(IsEqual(expected, actual));
-}
diff --git a/contrib/ntp/tests/libntp/g_tvtots.cpp b/contrib/ntp/tests/libntp/g_tvtots.cpp
deleted file mode 100644
index fcb82a3..0000000
--- a/contrib/ntp/tests/libntp/g_tvtots.cpp
+++ /dev/null
@@ -1,54 +0,0 @@
-#include "g_lfptest.h"
-
-extern "C" {
-#include "timevalops.h"
-};
-
-// Required on Solaris for ldexp.
-#include <math.h>
-
-class tvtotsTest : public lfptest {
-};
-
-TEST_F(tvtotsTest, Seconds) {
- timeval input = {500, 0}; // 500.0 s
- l_fp expected = {500, 0};
- l_fp actual;
-
- TVTOTS(&input, &actual);
-
- EXPECT_TRUE(IsEqual(expected, actual));
-}
-
-TEST_F(tvtotsTest, MicrosecondsRounded) {
- /* 0.0005 can not be represented exact in a l_fp structure.
- * It would equal to 2147483,648. This means that
- * HALF_PROMILLE_UP (which is 2147484) should be
- * the correct rounding. */
-
- timeval input = {0, 500}; // 0.0005 exact
- l_fp expected = {0, HALF_PROMILLE_UP};
- l_fp actual;
-
- TVTOTS(&input, &actual);
- EXPECT_TRUE(IsEqual(expected, actual));
-}
-
-TEST_F(tvtotsTest, MicrosecondsExact) {
- // 0.5 can be represented exact in both l_fp and timeval.
- const timeval input = {10, 500000}; // 0.5 exact
- const l_fp expected = {10, HALF}; // 0.5 exact
- l_fp actual;
-
- TVTOTS(&input, &actual);
-
- // Compare the fractional part with an absolute error given.
- EXPECT_EQ(expected.l_ui, actual.l_ui);
-
- double expectedDouble, actualDouble;
- M_LFPTOD(0, expected.l_uf, expectedDouble);
- M_LFPTOD(0, actual.l_uf, actualDouble);
-
- // The error should be less than 0.5 us
- EXPECT_NEAR(expectedDouble, actualDouble, 0.0000005);
-}
diff --git a/contrib/ntp/tests/libntp/g_uglydate.cpp b/contrib/ntp/tests/libntp/g_uglydate.cpp
deleted file mode 100644
index 12aa002..0000000
--- a/contrib/ntp/tests/libntp/g_uglydate.cpp
+++ /dev/null
@@ -1,18 +0,0 @@
-#include "g_libntptest.h"
-
-extern "C" {
-#include "ntp_fp.h"
-};
-
-class uglydateTest : public libntptest {
-protected:
- static const u_int32 HALF = 2147483648UL;
-};
-
-TEST_F(uglydateTest, ConstantDateTime) {
- l_fp time = {3485080800UL, HALF}; // 2010-06-09 14:00:00.5
-
- EXPECT_STREQ("3485080800.500000 10:159:14:00:00.500",
- uglydate(&time));
-}
-
diff --git a/contrib/ntp/tests/libntp/g_vi64ops.cpp b/contrib/ntp/tests/libntp/g_vi64ops.cpp
deleted file mode 100644
index 29f7932..0000000
--- a/contrib/ntp/tests/libntp/g_vi64ops.cpp
+++ /dev/null
@@ -1,64 +0,0 @@
-#include "g_libntptest.h"
-
-extern "C" {
-#include "vint64ops.h"
-}
-
-class vi64Test : public libntptest {
-public:
- ::testing::AssertionResult IsEqual(const vint64 &expected, const vint64 &actual) {
- if (0 == memcmp(&expected, &actual, sizeof(vint64))) {
- return ::testing::AssertionSuccess();
- } else {
- return ::testing::AssertionFailure()
- << "expected: "
- << std::hex << expected.D_s.hi << '.'
- << std::hex << expected.D_s.lo
- << " but was "
- << std::hex << actual.D_s.hi << '.'
- << std::hex << actual.D_s.lo;
- }
- }
-};
-
-// ----------------------------------------------------------------------
-// test number parser
-TEST_F(vi64Test, ParseVUI64_pos) {
- vint64 act, exp;
- const char *sp;
- char *ep;
-
- sp = "1234x";
- exp.D_s.hi = 0;
- exp.D_s.lo = 1234;
- act = strtouv64(sp, &ep, 0);
- EXPECT_TRUE(IsEqual(exp, act));
- EXPECT_EQ(*ep, 'x');
-}
-
-TEST_F(vi64Test, ParseVUI64_neg) {
- vint64 act, exp;
- const char *sp;
- char *ep;
-
- sp = "-1234x";
- exp.D_s.hi = ~0;
- exp.D_s.lo = -1234;
- act = strtouv64(sp, &ep, 0);
- EXPECT_TRUE(IsEqual(exp, act));
- EXPECT_EQ(*ep, 'x');
-}
-
-TEST_F(vi64Test, ParseVUI64_case) {
- vint64 act, exp;
- const char *sp;
- char *ep;
-
- sp = "0123456789AbCdEf";
- exp.D_s.hi = 0x01234567;
- exp.D_s.lo = 0x89ABCDEF;
- act = strtouv64(sp, &ep, 16);
- EXPECT_TRUE(IsEqual(exp, act));
- EXPECT_EQ(*ep, '\0');
-}
-
diff --git a/contrib/ntp/tests/libntp/g_ymd2yd.cpp b/contrib/ntp/tests/libntp/g_ymd2yd.cpp
deleted file mode 100644
index 7e25999..0000000
--- a/contrib/ntp/tests/libntp/g_ymd2yd.cpp
+++ /dev/null
@@ -1,23 +0,0 @@
-#include "g_libntptest.h"
-
-class ymd2ydTest : public libntptest {
-};
-
-TEST_F(ymd2ydTest, NonLeapYearFebruary) {
- EXPECT_EQ(31+20, ymd2yd(2010,2,20)); //2010-02-20
-}
-
-TEST_F(ymd2ydTest, NonLeapYearJune) {
- int expected = 31+28+31+30+31+18; // 18 June non-leap year
- EXPECT_EQ(expected, ymd2yd(2011,6,18));
-}
-
-TEST_F(ymd2ydTest, LeapYearFebruary) {
- EXPECT_EQ(31+20, ymd2yd(2012,2,20)); //2012-02-20 (leap year)
-}
-
-TEST_F(ymd2ydTest, LeapYearDecember) {
- // 2012-12-31
- int expected = 31+29+31+30+31+30+31+31+30+31+30+31;
- EXPECT_EQ(expected, ymd2yd(2012,12,31));
-}
diff --git a/contrib/ntp/tests/libntp/hextoint.c b/contrib/ntp/tests/libntp/hextoint.c
index e9f0d39..443a1b8 100644
--- a/contrib/ntp/tests/libntp/hextoint.c
+++ b/contrib/ntp/tests/libntp/hextoint.c
@@ -6,6 +6,12 @@
#include "unity.h"
+void test_SingleDigit(void);
+void test_MultipleDigits(void);
+void test_MaxUnsigned(void);
+void test_Overflow(void);
+void test_IllegalChar(void);
+
void test_SingleDigit(void) {
const char *str = "a"; // 10 decimal
diff --git a/contrib/ntp/tests/libntp/hextolfp.c b/contrib/ntp/tests/libntp/hextolfp.c
index a2f548f..bb650a5 100644
--- a/contrib/ntp/tests/libntp/hextolfp.c
+++ b/contrib/ntp/tests/libntp/hextolfp.c
@@ -6,58 +6,70 @@
#include "unity.h"
#include "lfptest.h"
+void test_PositiveInteger(void);
+void test_NegativeInteger(void);
+void test_PositiveFraction(void);
+void test_NegativeFraction(void);
+void test_IllegalNumberOfInteger(void);
+void test_IllegalChar(void);
-void test_PositiveInteger(void) {
+
+void
+test_PositiveInteger(void) {
const char *str = "00001000.00000000";
l_fp actual;
- l_fp expected = {4096, 0}; // 16^3, no fraction part.
+ l_fp expected = {{4096}, 0}; /* 16^3, no fraction part. */
TEST_ASSERT_TRUE(hextolfp(str, &actual));
TEST_ASSERT_TRUE(IsEqual(expected, actual));
}
-void test_NegativeInteger(void) {
- const char *str = "ffffffff.00000000"; // -1 decimal
+void
+test_NegativeInteger(void) {
+ const char *str = "ffffffff.00000000"; /* -1 decimal */
l_fp actual;
- l_fp expected = {-1, 0};
+ l_fp expected = {{-1}, 0};
TEST_ASSERT_TRUE(hextolfp(str, &actual));
TEST_ASSERT_TRUE(IsEqual(expected, actual));
}
-void test_PositiveFraction(void) {
- const char *str = "00002000.80000000"; // 8196.5 decimal
+void
+test_PositiveFraction(void) {
+ const char *str = "00002000.80000000"; /* 8196.5 decimal */
l_fp actual;
- l_fp expected = {8192, HALF};
+ l_fp expected = {{8192}, HALF};
TEST_ASSERT_TRUE(hextolfp(str, &actual));
TEST_ASSERT_TRUE(IsEqual(expected, actual));
}
-void test_NegativeFraction(void) {
- const char *str = "ffffffff.40000000"; // -1 + 0.25 decimal
+void
+test_NegativeFraction(void) {
+ const char *str = "ffffffff.40000000"; /* -1 + 0.25 decimal */
l_fp actual;
- l_fp expected = {-1, QUARTER}; //-1 + 0.25
+ l_fp expected = {{-1}, QUARTER}; /* -1 + 0.25 */
TEST_ASSERT_TRUE(hextolfp(str, &actual));
TEST_ASSERT_TRUE(IsEqual(expected, actual));
}
-void test_IllegalNumberOfInteger(void) {
- const char *str = "1000000.00000000"; // Missing one digit in integral part.
+void
+test_IllegalNumberOfInteger(void) {
+ const char *str = "1000000.00000000"; /* Missing one digit in integral part. */
l_fp actual;
TEST_ASSERT_FALSE(hextolfp(str, &actual));
}
-void test_IllegalChar(void) {
- const char *str = "10000000.0000h000"; // Illegal character h.
+void
+test_IllegalChar(void) {
+ const char *str = "10000000.0000h000"; /* Illegal character h. */
l_fp actual;
TEST_ASSERT_FALSE(hextolfp(str, &actual));
}
-
diff --git a/contrib/ntp/tests/libntp/humandate.c b/contrib/ntp/tests/libntp/humandate.c
index 071fa41..3a28f59 100644
--- a/contrib/ntp/tests/libntp/humandate.c
+++ b/contrib/ntp/tests/libntp/humandate.c
@@ -5,32 +5,38 @@
#include "unity.h"
-void test_RegularTime(void)
+void test_RegularTime(void);
+void test_CurrentTime(void);
+
+
+void
+test_RegularTime(void)
{
time_t sample = 1276601278;
char expected[15];
+ struct tm* tm;
- struct tm* time;
- time = localtime(&sample);
+ tm = localtime(&sample);
TEST_ASSERT_TRUE(time != NULL);
- snprintf(expected, 15, "%02d:%02d:%02d", time->tm_hour, time->tm_min, time->tm_sec);
+ snprintf(expected, 15, "%02d:%02d:%02d", tm->tm_hour, tm->tm_min, tm->tm_sec);
TEST_ASSERT_EQUAL_STRING(expected, humantime(sample));
}
-void test_CurrentTime(void)
+void
+test_CurrentTime(void)
{
time_t sample;
char expected[15];
+ struct tm* tm;
time(&sample);
- struct tm* time;
- time = localtime(&sample);
+ tm = localtime(&sample);
TEST_ASSERT_TRUE(time != NULL);
- snprintf(expected, 15, "%02d:%02d:%02d", time->tm_hour, time->tm_min, time->tm_sec);
+ snprintf(expected, 15, "%02d:%02d:%02d", tm->tm_hour, tm->tm_min, tm->tm_sec);
TEST_ASSERT_EQUAL_STRING(expected, humantime(sample));
}
diff --git a/contrib/ntp/tests/libntp/lfpfunc.c b/contrib/ntp/tests/libntp/lfpfunc.c
index 188478d..1a13f37 100644
--- a/contrib/ntp/tests/libntp/lfpfunc.c
+++ b/contrib/ntp/tests/libntp/lfpfunc.c
@@ -1,7 +1,6 @@
#include "config.h"
#include "ntp_stdlib.h"
-#include "ntp_calendar.h"
#include "ntp_fp.h"
#include "unity.h"
@@ -10,82 +9,72 @@
#include <math.h>
-//replaced TEST_ASSERT_EQUAL_MEMORY(&a,&b,sizeof(a)) with TEST_ASSERT_EQUAL_l_fp(a,b). It's safer this way, because structs can be compared even if they aren't initiated with memset (due to padding bytes)
+/* replaced TEST_ASSERT_EQUAL_MEMORY(&a, &b, sizeof(a)) with TEST_ASSERT_EQUAL_l_fp(a, b).
+ It's safer this way, because structs can be compared even if they aren't initiated
+ with memset (due to padding bytes).
+*/
#define TEST_ASSERT_EQUAL_l_fp(a, b) { \
TEST_ASSERT_EQUAL_MESSAGE(a.l_i, b.l_i, "Field l_i"); \
TEST_ASSERT_EQUAL_UINT_MESSAGE(a.l_uf, b.l_uf, "Field l_uf"); \
}
-typedef struct {
- uint32_t h, l;
-} lfp_hl;
-
-
-static int cmp_work(u_int32 a[3], u_int32 b[3]);
-
-/*
-//----------------------------------------------------------------------
-// OO-wrapper for 'l_fp'
-//----------------------------------------------------------------------
-
-
- ~LFP();
- LFP();
- LFP(const LFP& rhs);
- LFP(int32 i, u_int32 f);
- LFP operator+ (const LFP &rhs) const;
- LFP& operator+=(const LFP &rhs);
- LFP operator- (const LFP &rhs) const;
- LFP& operator-=(const LFP &rhs);
+typedef int bool; // typedef enum { FALSE, TRUE } boolean; -> can't use this because TRUE and FALSE are already defined
- LFP& operator=(const LFP &rhs);
- LFP operator-() const;
- bool operator==(const LFP &rhs) const;
+typedef struct {
+ uint32_t h, l;
+} lfp_hl;
- LFP neg() const;
- LFP abs() const;
- int signum() const;
-
+int l_fp_scmp(const l_fp first, const l_fp second);
+int l_fp_ucmp(const l_fp first, l_fp second );
+l_fp l_fp_init(int32 i, u_int32 f);
+l_fp l_fp_add(const l_fp first, const l_fp second);
+l_fp l_fp_subtract(const l_fp first, const l_fp second);
+l_fp l_fp_negate(const l_fp first);
+l_fp l_fp_abs(const l_fp first);
+int l_fp_signum(const l_fp first);
+double l_fp_convert_to_double(const l_fp first);
+l_fp l_fp_init_from_double( double rhs);
+void l_fp_swap(l_fp * first, l_fp *second);
+bool l_isgt(const l_fp first, const l_fp second);
+bool l_isgtu(const l_fp first, const l_fp second);
+bool l_ishis(const l_fp first, const l_fp second);
+bool l_isgeq(const l_fp first, const l_fp second);
+bool l_isequ(const l_fp first, const l_fp second);
+double eps(double d);
+
+
+void test_AdditionLR(void);
+void test_AdditionRL(void);
+void test_SubtractionLR(void);
+void test_SubtractionRL(void);
+void test_Negation(void);
+void test_Absolute(void);
+void test_FDF_RoundTrip(void);
+void test_SignedRelOps(void);
+void test_UnsignedRelOps(void);
- int ucmp(const LFP & rhs) const;
- int scmp(const LFP & rhs) const;
-
- std::string toString() const;
- std::ostream& toStream(std::ostream &oo) const;
-
- operator double() const;
- explicit LFP(double);
-
- LFP(const l_fp &rhs);
- static int cmp_work(u_int32 a[3], u_int32 b[3]);
-
- l_fp _v;
+static int cmp_work(u_int32 a[3], u_int32 b[3]);
-
-static std::ostream& operator<<(std::ostream &oo, const LFP& rhs)
-{
- return rhs.toStream(oo);
-}
-*/
//----------------------------------------------------------------------
// reference comparision
// This is implementad as a full signed MP-subtract in 3 limbs, where
// the operands are zero or sign extended before the subtraction is
// executed.
//----------------------------------------------------------------------
-int l_fp_scmp(const l_fp first, const l_fp second)
+
+int
+l_fp_scmp(const l_fp first, const l_fp second)
{
u_int32 a[3], b[3];
const l_fp op1 = first;
const l_fp op2 = second;
- //const l_fp &op1(_v), &op2(rhs._v);
a[0] = op1.l_uf; a[1] = op1.l_ui; a[2] = 0;
b[0] = op2.l_uf; b[1] = op2.l_ui; b[2] = 0;
@@ -96,7 +85,8 @@ int l_fp_scmp(const l_fp first, const l_fp second)
return cmp_work(a,b);
}
-int l_fp_ucmp(const l_fp first, l_fp second )
+int
+l_fp_ucmp(const l_fp first, l_fp second )
{
u_int32 a[3], b[3];
const l_fp op1 = first;
@@ -108,9 +98,9 @@ int l_fp_ucmp(const l_fp first, l_fp second )
return cmp_work(a,b);
}
-
-//maybe rename it to lf_cmp_work ???
-int cmp_work(u_int32 a[3], u_int32 b[3])
+// maybe rename it to lf_cmp_work
+int
+cmp_work(u_int32 a[3], u_int32 b[3])
{
u_int32 cy, idx, tmp;
for (cy = idx = 0; idx < 3; ++idx) {
@@ -128,9 +118,8 @@ int cmp_work(u_int32 a[3], u_int32 b[3])
// This should be easy enough...
//----------------------------------------------------------------------
-
-
-l_fp l_fp_init(int32 i, u_int32 f)
+l_fp
+l_fp_init(int32 i, u_int32 f)
{
l_fp temp;
temp.l_i = i;
@@ -139,35 +128,35 @@ l_fp l_fp_init(int32 i, u_int32 f)
return temp;
}
-
-
-l_fp l_fp_add(const l_fp first, const l_fp second)
+l_fp
+l_fp_add(const l_fp first, const l_fp second)
{
- l_fp temp;
- temp = first;
+ l_fp temp = first;
L_ADD(&temp, &second);
+
return temp;
}
-l_fp l_fp_subtract(const l_fp first, const l_fp second)
+l_fp
+l_fp_subtract(const l_fp first, const l_fp second)
{
- l_fp temp;
- temp = first;
+ l_fp temp = first;
L_SUB(&temp, &second);
return temp;
}
-l_fp l_fp_negate(const l_fp first)
+l_fp
+l_fp_negate(const l_fp first)
{
- l_fp temp;
- temp = first; //is this line really necessary?
+ l_fp temp = first;
L_NEG(&temp);
return temp;
}
-l_fp l_fp_abs(const l_fp first)
+l_fp
+l_fp_abs(const l_fp first)
{
l_fp temp = first;
if (L_ISNEG(&temp))
@@ -175,74 +164,38 @@ l_fp l_fp_abs(const l_fp first)
return temp;
}
-int l_fp_signum(const l_fp first)
+int
+l_fp_signum(const l_fp first)
{
if (first.l_ui & 0x80000000u)
return -1;
return (first.l_ui || first.l_uf);
}
-double l_fp_convert_to_double(const l_fp first)
+double
+l_fp_convert_to_double(const l_fp first)
{
double res;
LFPTOD(&first, res);
return res;
}
-l_fp l_fp_init_from_double( double rhs)
+l_fp
+l_fp_init_from_double( double rhs)
{
l_fp temp;
DTOLFP(rhs, &temp);
return temp;
}
-
-
-void l_fp_swap(l_fp * first, l_fp *second){
+void
+l_fp_swap(l_fp * first, l_fp *second){
l_fp temp = *second;
*second = *first;
*first = temp;
-
-}
-
-
-/*
-LFP::LFP()
-{
- _v.l_ui = 0;
- _v.l_uf = 0;
-}
-
-
-
-std::string
-LFP::toString() const
-{
- std::ostringstream oss;
- toStream(oss);
- return oss.str();
-}
-
-std::ostream&
-LFP::toStream(std::ostream &os) const
-{
- return os
- << mfptoa(_v.l_ui, _v.l_uf, 9)
- << " [$" << std::setw(8) << std::setfill('0') << std::hex << _v.l_ui
- << ':' << std::setw(8) << std::setfill('0') << std::hex << _v.l_uf
- << ']';
}
-bool LFP::operator==(const LFP &rhs) const
-{
- return L_ISEQU(&_v, &rhs._v);
-}
-
-
-
-*/
-
//----------------------------------------------------------------------
// testing the relational macros works better with proper predicate
// formatting functions; it slows down the tests a bit, but makes for
@@ -250,19 +203,30 @@ bool LFP::operator==(const LFP &rhs) const
//----------------------------------------------------------------------
-typedef int bool; //typedef enum { FALSE, TRUE } boolean; -> can't use this because TRUE and FALSE are already defined
+bool
+l_isgt (const l_fp first, const l_fp second) {
+ return L_ISGT(&first, &second);
+}
+
+bool
+l_isgtu(const l_fp first, const l_fp second) {
+ return L_ISGTU(&first, &second);
+}
+
+bool
+l_ishis(const l_fp first, const l_fp second) {
+ return L_ISHIS(&first, &second);
+}
+bool
+l_isgeq(const l_fp first, const l_fp second) {
+ return L_ISGEQ(&first, &second);
+}
-bool l_isgt (const l_fp first, const l_fp second)
- { return L_ISGT(&first, &second); }
-bool l_isgtu(const l_fp first, const l_fp second)
- { return L_ISGTU(&first, &second); }
-bool l_ishis(const l_fp first, const l_fp second)
- { return L_ISHIS(&first, &second); }
-bool l_isgeq(const l_fp first, const l_fp second)
- { return L_ISGEQ(&first, &second); }
-bool l_isequ(const l_fp first, const l_fp second)
- { return L_ISEQU(&first, &second); }
+bool
+l_isequ(const l_fp first, const l_fp second) {
+ return L_ISEQU(&first, &second);
+}
//----------------------------------------------------------------------
@@ -308,46 +272,39 @@ static const size_t addsub_tot = (sizeof(addsub_tab)/sizeof(addsub_tab[0][0]));
// '1'-bit of the l_fp value, the roundtrip *will* create truncation
// errors. This is an inherent property caused by the 54-bit mantissa of
// the 'double' type.
-double eps(double d)
+double
+eps(double d)
{
- return fmax(ldexp(1.0, -31), ldexp(fabs(d), -53)); //max<double>
+ return fmax(ldexp(1.0, -31), ldexp(fabs(d), -53));
}
-
-
//----------------------------------------------------------------------
// test addition
//----------------------------------------------------------------------
-void test_AdditionLR() {
+void
+test_AdditionLR(void) {
- size_t idx=0;
- for (idx=0; idx < addsub_cnt; ++idx) {
-
-
+ size_t idx = 0;
+ for (idx = 0; idx < addsub_cnt; ++idx) {
l_fp op1 = l_fp_init(addsub_tab[idx][0].h, addsub_tab[idx][0].l);
- //LFP op1(addsub_tab[idx][0].h, addsub_tab[idx][0].l);
l_fp op2 = l_fp_init(addsub_tab[idx][1].h, addsub_tab[idx][1].l);
- //LFP exp(addsub_tab[idx][2].h, addsub_tab[idx][2].l);
l_fp exp = l_fp_init(addsub_tab[idx][2].h, addsub_tab[idx][2].l);
- //LFP res(op1 + op2);
- l_fp res = l_fp_add(op1,op2);
+ l_fp res = l_fp_add(op1, op2);
- TEST_ASSERT_EQUAL_l_fp(exp,res);
- //TEST_ASSERT_EQUAL_MEMORY(&exp, &res,sizeof(exp));
+ TEST_ASSERT_EQUAL_l_fp(exp, res);
}
}
-void test_AdditionRL() {
-
- size_t idx=0;
- for (idx=0; idx < addsub_cnt; ++idx) {
+void
+test_AdditionRL(void) {
+ size_t idx = 0;
+ for (idx = 0; idx < addsub_cnt; ++idx) {
l_fp op2 = l_fp_init(addsub_tab[idx][0].h, addsub_tab[idx][0].l);
l_fp op1 = l_fp_init(addsub_tab[idx][1].h, addsub_tab[idx][1].l);
l_fp exp = l_fp_init(addsub_tab[idx][2].h, addsub_tab[idx][2].l);
- l_fp res = l_fp_add(op1,op2);
+ l_fp res = l_fp_add(op1, op2);
- TEST_ASSERT_EQUAL_l_fp(exp,res);
- //TEST_ASSERT_EQUAL_MEMORY(&exp, &res,sizeof(exp));
+ TEST_ASSERT_EQUAL_l_fp(exp, res);
}
}
@@ -356,32 +313,29 @@ void test_AdditionRL() {
//----------------------------------------------------------------------
// test subtraction
//----------------------------------------------------------------------
-void test_SubtractionLR() {
-
- size_t idx=0;
- for (idx=0; idx < addsub_cnt; ++idx) {
+void
+test_SubtractionLR(void) {
+ size_t idx = 0;
+ for (idx = 0; idx < addsub_cnt; ++idx) {
l_fp op2 = l_fp_init(addsub_tab[idx][0].h, addsub_tab[idx][0].l);
l_fp exp = l_fp_init(addsub_tab[idx][1].h, addsub_tab[idx][1].l);
l_fp op1 = l_fp_init(addsub_tab[idx][2].h, addsub_tab[idx][2].l);
- l_fp res = l_fp_subtract(op1,op2);
- //LFP res(op1 - op2);
+ l_fp res = l_fp_subtract(op1, op2);
- TEST_ASSERT_EQUAL_l_fp(exp,res);
- //TEST_ASSERT_EQUAL_MEMORY(&exp, &res,sizeof(exp));
+ TEST_ASSERT_EQUAL_l_fp(exp, res);
}
}
-void test_SubtractionRL() {
-
- size_t idx=0;
- for (idx=0; idx < addsub_cnt; ++idx) {
+void
+test_SubtractionRL(void) {
+ size_t idx = 0;
+ for (idx = 0; idx < addsub_cnt; ++idx) {
l_fp exp = l_fp_init(addsub_tab[idx][0].h, addsub_tab[idx][0].l);
l_fp op2 = l_fp_init(addsub_tab[idx][1].h, addsub_tab[idx][1].l);
l_fp op1 = l_fp_init(addsub_tab[idx][2].h, addsub_tab[idx][2].l);
- l_fp res = l_fp_subtract(op1,op2);
+ l_fp res = l_fp_subtract(op1, op2);
- TEST_ASSERT_EQUAL_l_fp(exp,res);
- //TEST_ASSERT_EQUAL_MEMORY(&exp, &res,sizeof(exp));
+ TEST_ASSERT_EQUAL_l_fp(exp, res);
}
}
@@ -389,19 +343,18 @@ void test_SubtractionRL() {
// test negation
//----------------------------------------------------------------------
-void test_Negation() {
+void
+test_Negation(void) {
- size_t idx=0;
- for (idx=0; idx < addsub_cnt; ++idx) {
+ size_t idx = 0;
+ for (idx = 0; idx < addsub_cnt; ++idx) {
l_fp op1 = l_fp_init(addsub_tab[idx][0].h, addsub_tab[idx][0].l);
l_fp op2 = l_fp_negate(op1);
l_fp sum = l_fp_add(op1, op2);
- l_fp zero = l_fp_init(0,0);
+ l_fp zero = l_fp_init(0, 0);
- TEST_ASSERT_EQUAL_l_fp(zero,sum);
- //TEST_ASSERT_EQUAL_MEMORY(&zero, &sum,sizeof(sum));
-
+ TEST_ASSERT_EQUAL_l_fp(zero, sum);
}
}
@@ -410,24 +363,23 @@ void test_Negation() {
//----------------------------------------------------------------------
// test absolute value
//----------------------------------------------------------------------
-void test_Absolute() {
- size_t idx=0;
- for (idx=0; idx < addsub_cnt; ++idx) {
+void
+test_Absolute(void) {
+ size_t idx = 0;
+ for (idx = 0; idx < addsub_cnt; ++idx) {
l_fp op1 = l_fp_init(addsub_tab[idx][0].h, addsub_tab[idx][0].l);
l_fp op2 = l_fp_abs(op1);
TEST_ASSERT_TRUE(l_fp_signum(op2) >= 0);
if (l_fp_signum(op1) >= 0)
- op1 = l_fp_subtract(op1,op2); //op1 -= op2;
-
+ op1 = l_fp_subtract(op1, op2);
else
- op1 = l_fp_add(op1,op2);
+ op1 = l_fp_add(op1, op2);
- l_fp zero = l_fp_init(0,0);
+ l_fp zero = l_fp_init(0, 0);
- TEST_ASSERT_EQUAL_l_fp(zero,op1);
- //TEST_ASSERT_EQUAL_MEMORY(&zero, &op1,sizeof(op1));
+ TEST_ASSERT_EQUAL_l_fp(zero, op1);
}
// There is one special case we have to check: the minimum
@@ -437,36 +389,30 @@ void test_Absolute() {
l_fp minAbs = l_fp_abs(minVal);
TEST_ASSERT_EQUAL(-1, l_fp_signum(minVal));
- TEST_ASSERT_EQUAL_l_fp(minVal,minAbs);
- //TEST_ASSERT_EQUAL_MEMORY(&minVal, &minAbs,sizeof(minAbs));
+ TEST_ASSERT_EQUAL_l_fp(minVal, minAbs);
}
//----------------------------------------------------------------------
// fp -> double -> fp rountrip test
//----------------------------------------------------------------------
-void test_FDF_RoundTrip() {
+void
+test_FDF_RoundTrip(void) {
// since a l_fp has 64 bits in it's mantissa and a double has
// only 54 bits available (including the hidden '1') we have to
// make a few concessions on the roundtrip precision. The 'eps()'
// function makes an educated guess about the avilable precision
// and checks the difference in the two 'l_fp' values against
// that limit.
- size_t idx=0;
- for (idx=0; idx < addsub_cnt; ++idx) {
+ size_t idx = 0;
+ for (idx = 0; idx < addsub_cnt; ++idx) {
l_fp op1 = l_fp_init(addsub_tab[idx][0].h, addsub_tab[idx][0].l);
double op2 = l_fp_convert_to_double(op1);
l_fp op3 = l_fp_init_from_double(op2);
- // for manual checks only:
- // std::cout << std::setprecision(16) << op2 << std::endl;
-
- l_fp temp = l_fp_subtract(op1,op3);
+ l_fp temp = l_fp_subtract(op1, op3);
double d = l_fp_convert_to_double(temp);
- TEST_ASSERT_DOUBLE_WITHIN(eps(op2),0.0, fabs(d)); //delta,epected,actual
-
- //ASSERT_LE(fabs(op1-op3), eps(op2)); //unity has no equivalent of LE!!!
- //you could use TEST_ASSERT_TRUE(IsLE(fabs(op1-op3), eps(op2)));
+ TEST_ASSERT_DOUBLE_WITHIN(eps(op2), 0.0, fabs(d));
}
}
@@ -477,56 +423,54 @@ void test_FDF_RoundTrip() {
// This uses the local compare and checks if the operations using the
// macros in 'ntp_fp.h' produce mathing results.
// ----------------------------------------------------------------------
-void test_SignedRelOps() {
- //const lfp_hl * tv(&addsub_tab[0][0]);
+void
+test_SignedRelOps(void) {
const lfp_hl * tv = (&addsub_tab[0][0]);
size_t lc ;
- for (lc=addsub_tot-1; lc; --lc,++tv) {
- l_fp op1 = l_fp_init(tv[0].h,tv[0].l);
- l_fp op2 = l_fp_init(tv[1].h,tv[1].l);
- //int cmp(op1.scmp(op2));
- int cmp = l_fp_scmp(op1,op2);
+ for (lc = addsub_tot - 1; lc; --lc, ++tv) {
+ l_fp op1 = l_fp_init(tv[0].h, tv[0].l);
+ l_fp op2 = l_fp_init(tv[1].h, tv[1].l);
+ int cmp = l_fp_scmp(op1, op2);
switch (cmp) {
case -1:
//printf("op1:%d %d, op2:%d %d\n",op1.l_uf,op1.l_ui,op2.l_uf,op2.l_ui);
- //std::swap(op1, op2);
- l_fp_swap(&op1,&op2);
+ l_fp_swap(&op1, &op2);
//printf("op1:%d %d, op2:%d %d\n",op1.l_uf,op1.l_ui,op2.l_uf,op2.l_ui);
case 1:
- TEST_ASSERT_TRUE (l_isgt(op1,op2));
- TEST_ASSERT_FALSE(l_isgt(op2,op1));
+ TEST_ASSERT_TRUE (l_isgt(op1, op2));
+ TEST_ASSERT_FALSE(l_isgt(op2, op1));
- TEST_ASSERT_TRUE (l_isgeq(op1,op2));
- TEST_ASSERT_FALSE(l_isgeq(op2,op1));
+ TEST_ASSERT_TRUE (l_isgeq(op1, op2));
+ TEST_ASSERT_FALSE(l_isgeq(op2, op1));
- TEST_ASSERT_FALSE(l_isequ(op1,op2));
- TEST_ASSERT_FALSE(l_isequ(op2,op1));
+ TEST_ASSERT_FALSE(l_isequ(op1, op2));
+ TEST_ASSERT_FALSE(l_isequ(op2, op1));
break;
case 0:
- TEST_ASSERT_FALSE(l_isgt(op1,op2));
- TEST_ASSERT_FALSE(l_isgt(op2,op1));
+ TEST_ASSERT_FALSE(l_isgt(op1, op2));
+ TEST_ASSERT_FALSE(l_isgt(op2, op1));
- TEST_ASSERT_TRUE (l_isgeq(op1,op2));
- TEST_ASSERT_TRUE (l_isgeq(op2,op1));
+ TEST_ASSERT_TRUE (l_isgeq(op1, op2));
+ TEST_ASSERT_TRUE (l_isgeq(op2, op1));
- TEST_ASSERT_TRUE (l_isequ(op1,op2));
- TEST_ASSERT_TRUE (l_isequ(op2,op1));
+ TEST_ASSERT_TRUE (l_isequ(op1, op2));
+ TEST_ASSERT_TRUE (l_isequ(op2, op1));
break;
default:
TEST_FAIL_MESSAGE("unexpected UCMP result: " );
- //TEST_ASSERT_FAIL() << "unexpected SCMP result: " << cmp;
}
}
}
-void test_UnsignedRelOps() {
+void
+test_UnsignedRelOps(void) {
const lfp_hl * tv =(&addsub_tab[0][0]);
size_t lc;
- for (lc=addsub_tot-1; lc; --lc,++tv) {
- l_fp op1 = l_fp_init(tv[0].h,tv[0].l);
- l_fp op2 = l_fp_init(tv[1].h,tv[1].l);
- int cmp = l_fp_ucmp(op1,op2);
+ for (lc = addsub_tot - 1; lc; --lc, ++tv) {
+ l_fp op1 = l_fp_init(tv[0].h, tv[0].l);
+ l_fp op2 = l_fp_init(tv[1].h, tv[1].l);
+ int cmp = l_fp_ucmp(op1, op2);
switch (cmp) {
case -1:
@@ -534,22 +478,21 @@ void test_UnsignedRelOps() {
l_fp_swap(&op1, &op2);
//printf("op1:%d %d, op2:%d %d\n",op1.l_uf,op1.l_ui,op2.l_uf,op2.l_ui);
case 1:
- TEST_ASSERT_TRUE (l_isgtu(op1,op2));
- TEST_ASSERT_FALSE(l_isgtu(op2,op1));
+ TEST_ASSERT_TRUE (l_isgtu(op1, op2));
+ TEST_ASSERT_FALSE(l_isgtu(op2, op1));
- TEST_ASSERT_TRUE (l_ishis(op1,op2));
- TEST_ASSERT_FALSE(l_ishis(op2,op1));
+ TEST_ASSERT_TRUE (l_ishis(op1, op2));
+ TEST_ASSERT_FALSE(l_ishis(op2, op1));
break;
case 0:
- TEST_ASSERT_FALSE(l_isgtu(op1,op2));
- TEST_ASSERT_FALSE(l_isgtu(op2,op1));
+ TEST_ASSERT_FALSE(l_isgtu(op1, op2));
+ TEST_ASSERT_FALSE(l_isgtu(op2, op1));
- TEST_ASSERT_TRUE (l_ishis(op1,op2));
- TEST_ASSERT_TRUE (l_ishis(op2,op1));
+ TEST_ASSERT_TRUE (l_ishis(op1, op2));
+ TEST_ASSERT_TRUE (l_ishis(op2, op1));
break;
default:
TEST_FAIL_MESSAGE("unexpected UCMP result: " );
- //FAIL() << "unexpected UCMP result: " << cmp;
}
}
}
diff --git a/contrib/ntp/tests/libntp/lfptest.c b/contrib/ntp/tests/libntp/lfptest.c
new file mode 100644
index 0000000..7b4dccf
--- /dev/null
+++ b/contrib/ntp/tests/libntp/lfptest.c
@@ -0,0 +1,11 @@
+#include "config.h"
+#include "ntp_fp.h"
+#include "lfptest.h"
+
+int IsEqual(const l_fp expected, const l_fp actual) {
+ if (L_ISEQU(&expected, &actual)) {
+ return TRUE;
+ } else {
+ return FALSE;
+ }
+}
diff --git a/contrib/ntp/tests/libntp/lfptest.h b/contrib/ntp/tests/libntp/lfptest.h
index 7949821..30a85f5 100644
--- a/contrib/ntp/tests/libntp/lfptest.h
+++ b/contrib/ntp/tests/libntp/lfptest.h
@@ -1,23 +1,9 @@
#ifndef NTP_TESTS_LFPTEST_H
#define NTP_TESTS_LFPTEST_H
+#include "config.h"
#include "ntp_fp.h"
-int IsEqual(const l_fp expected, const l_fp actual) {
- if (L_ISEQU(&expected, &actual)) {
- return TRUE;
- } else {
- //printf(" expected: ...");
- /*
- << " expected: " << lfptoa(&expected, FRACTION_PREC)
- << " (" << expected.l_ui << "." << expected.l_uf << ")"
- << " but was: " << lfptoa(&actual, FRACTION_PREC)
- << " (" << actual.l_ui << "." << actual.l_uf << ")";
- */
- return FALSE;
- }
-
-}
static const int32 HALF = -2147483647L - 1L;
static const int32 HALF_PROMILLE_UP = 2147484; // slightly more than 0.0005
@@ -25,6 +11,6 @@ static const int32 HALF_PROMILLE_DOWN = 2147483; // slightly less than 0.0005
static const int32 QUARTER = 1073741824L;
static const int32 QUARTER_PROMILLE_APPRX = 1073742L;
-#endif
-
+int IsEqual(const l_fp expected, const l_fp actual);
+#endif
diff --git a/contrib/ntp/tests/libntp/lfptostr.c b/contrib/ntp/tests/libntp/lfptostr.c
index c76e07f..142e6c7 100644
--- a/contrib/ntp/tests/libntp/lfptostr.c
+++ b/contrib/ntp/tests/libntp/lfptostr.c
@@ -6,7 +6,6 @@
#include "config.h"
#include "ntp_stdlib.h"
-#include "ntp_calendar.h"
#include "ntp_fp.h"
#include "unity.h"
@@ -14,70 +13,94 @@
static const int LFP_MAX_PRECISION = 10;
static const int LFP_MAX_PRECISION_MS = 7;
-static const int ONE_FOURTH = 1073741824; // (1 << 30)
+static const int ONE_FOURTH = 1073741824; /* (1 << 30) */
static const int HALF = (1 << 31);
static const int THREE_FOURTH = -1073741824;
-static const int HALF_PROMILLE_UP = 2147484; // slightly more than 0.0005
-static const int HALF_PROMILLE_DOWN = 2147483; // slightly less than 0.0005
+static const int HALF_PROMILLE_UP = 2147484; /* slightly more than 0.0005 */
+static const int HALF_PROMILLE_DOWN = 2147483; /* slightly less than 0.0005 */
-void test_PositiveInteger(void) {
- l_fp test = {200, 0}; // exact 200.0000000000
+
+void test_PositiveInteger(void);
+void test_NegativeInteger(void);
+void test_PositiveIntegerWithFraction(void);
+void test_NegativeIntegerWithFraction(void);
+void test_RoundingDownToInteger(void);
+void test_RoundingMiddleToInteger(void);
+void test_RoundingUpToInteger(void);
+void test_SingleDecimal(void);
+void test_MillisecondsRoundingUp(void);
+void test_MillisecondsRoundingDown(void);
+void test_UnsignedInteger(void);
+
+
+
+void
+test_PositiveInteger(void) {
+ l_fp test = {{200}, 0}; /* exact 200.0000000000 */
TEST_ASSERT_EQUAL_STRING("200.0000000000", mfptoa(test.l_ui, test.l_uf, LFP_MAX_PRECISION));
TEST_ASSERT_EQUAL_STRING("200000.0000000", mfptoms(test.l_ui, test.l_uf, LFP_MAX_PRECISION_MS));
}
-void test_NegativeInteger(void) {
- l_fp test = {-100, 0}; // -100
+void
+test_NegativeInteger(void) {
+ l_fp test = {{-100}, 0}; /* -100 */
TEST_ASSERT_EQUAL_STRING("-100.0000000000", lfptoa(&test, LFP_MAX_PRECISION));
TEST_ASSERT_EQUAL_STRING("-100000.0000000", lfptoms(&test, LFP_MAX_PRECISION_MS));
}
-void test_PositiveIntegerWithFraction(void) {
- l_fp test = {200, ONE_FOURTH}; // 200.25
+void
+test_PositiveIntegerWithFraction(void) {
+ l_fp test = {{200}, ONE_FOURTH}; /* 200.25 */
TEST_ASSERT_EQUAL_STRING("200.2500000000", lfptoa(&test, LFP_MAX_PRECISION));
TEST_ASSERT_EQUAL_STRING("200250.0000000", lfptoms(&test, LFP_MAX_PRECISION_MS));
}
-void test_NegativeIntegerWithFraction(void) {
- l_fp test = {-100, ONE_FOURTH}; // -99.75
+void
+test_NegativeIntegerWithFraction(void) {
+ l_fp test = {{-100}, ONE_FOURTH}; /* -99.75 */
TEST_ASSERT_EQUAL_STRING("-99.7500000000", lfptoa(&test, LFP_MAX_PRECISION));
TEST_ASSERT_EQUAL_STRING("-99750.0000000", lfptoms(&test, LFP_MAX_PRECISION_MS));
}
-void test_RoundingDownToInteger(void) {
- l_fp test = {10, ONE_FOURTH}; // 10.25
+void
+test_RoundingDownToInteger(void) {
+ l_fp test = {{10}, ONE_FOURTH}; /* 10.25 */
TEST_ASSERT_EQUAL_STRING("10", lfptoa(&test, 0));
TEST_ASSERT_EQUAL_STRING("10250", lfptoms(&test, 0));
}
-void test_RoundingMiddleToInteger(void) {
- l_fp test = {10, HALF}; // 10.5
+void
+test_RoundingMiddleToInteger(void) {
+ l_fp test = {{10}, HALF}; /* 10.5 */
TEST_ASSERT_EQUAL_STRING("11", lfptoa(&test, 0));
TEST_ASSERT_EQUAL_STRING("10500", lfptoms(&test, 0));
}
-void test_RoundingUpToInteger(void) {
- l_fp test = {5, THREE_FOURTH}; // 5.75
+void
+test_RoundingUpToInteger(void) {
+ l_fp test = {{5}, THREE_FOURTH}; /* 5.75 */
TEST_ASSERT_EQUAL_STRING("6", lfptoa(&test, 0));
TEST_ASSERT_EQUAL_STRING("5750", lfptoms(&test, 0));
}
-void test_SingleDecimal(void) {
- l_fp test = {8, ONE_FOURTH}; // 8.25
+void
+test_SingleDecimal(void) {
+ l_fp test = {{8}, ONE_FOURTH}; /* 8.25 */
TEST_ASSERT_EQUAL_STRING("8.3", lfptoa(&test, 1));
TEST_ASSERT_EQUAL_STRING("8250.0", lfptoms(&test, 1));
}
-void test_MillisecondsRoundingUp(void) {
- l_fp test = {1, HALF_PROMILLE_UP}; //slightly more than 1.0005
+void
+test_MillisecondsRoundingUp(void) {
+ l_fp test = {{1}, HALF_PROMILLE_UP}; /* slightly more than 1.0005 */
TEST_ASSERT_EQUAL_STRING("1.0", lfptoa(&test, 1));
@@ -85,8 +108,9 @@ void test_MillisecondsRoundingUp(void) {
TEST_ASSERT_EQUAL_STRING("1001", lfptoms(&test, 0));
}
-void test_MillisecondsRoundingDown(void) {
- l_fp test = {1, HALF_PROMILLE_DOWN}; // slightly less than 1.0005
+void
+test_MillisecondsRoundingDown(void) {
+ l_fp test = {{1}, HALF_PROMILLE_DOWN}; /* slightly less than 1.0005 */
TEST_ASSERT_EQUAL_STRING("1.0", lfptoa(&test, 1));
@@ -95,9 +119,7 @@ void test_MillisecondsRoundingDown(void) {
}
void test_UnsignedInteger(void) {
- l_fp test = {3000000000UL, 0};
+ l_fp test = {{3000000000UL}, 0};
TEST_ASSERT_EQUAL_STRING("3000000000.0", ulfptoa(&test, 1));
}
-
-
diff --git a/contrib/ntp/tests/libntp/modetoa.c b/contrib/ntp/tests/libntp/modetoa.c
index 19a76d5..267b44e 100644
--- a/contrib/ntp/tests/libntp/modetoa.c
+++ b/contrib/ntp/tests/libntp/modetoa.c
@@ -1,20 +1,23 @@
#include "config.h"
#include "ntp_stdlib.h"
-#include "ntp_calendar.h"
#include "unity.h"
+void test_KnownMode(void);
+void test_UnknownMode(void);
-void test_KnownMode(void) {
+
+void
+test_KnownMode(void) {
const int MODE = 3; // Should be "client"
- TEST_ASSERT_EQUAL_STRING("client", modetoa(MODE));
+ TEST_ASSERT_EQUAL_STRING("client", modetoa(MODE));
}
-void test_UnknownMode(void) {
+void
+test_UnknownMode(void) {
const int MODE = 100;
TEST_ASSERT_EQUAL_STRING("mode#100", modetoa(MODE));
-// EXPECT_STREQ("mode#100", modetoa(MODE));
}
diff --git a/contrib/ntp/tests/libntp/msyslog.c b/contrib/ntp/tests/libntp/msyslog.c
index 23ec401..dec8d85 100644
--- a/contrib/ntp/tests/libntp/msyslog.c
+++ b/contrib/ntp/tests/libntp/msyslog.c
@@ -6,12 +6,22 @@
#ifndef VSNPRINTF_PERCENT_M
// format_errmsg() is normally private to msyslog.c
-void format_errmsg (char *, size_t, const char *, int);
+void format_errmsg(char *, size_t, const char *, int);
#endif
+void test_msnprintf(void);
+void test_msnprintfLiteralPercentm(void);
+void test_msnprintfBackslashLiteralPercentm(void);
+void test_msnprintfBackslashPercent(void);
+void test_msnprintfHangingPercent(void);
+void test_format_errmsgHangingPercent(void);
+void test_msnprintfNullTarget(void);
+void test_msnprintfTruncate(void);
-void test_msnprintf(void) {
+
+void
+test_msnprintf(void) {
#define FMT_PREFIX "msyslog.cpp ENOENT: "
char exp_buf[512];
char act_buf[512];
@@ -22,6 +32,7 @@ void test_msnprintf(void) {
strerror(ENOENT));
errno = ENOENT;
act_cnt = msnprintf(act_buf, sizeof(act_buf), FMT_PREFIX "%m");
+
TEST_ASSERT_EQUAL(exp_cnt, act_cnt);
TEST_ASSERT_EQUAL_STRING(exp_buf, act_buf);
}
@@ -37,6 +48,7 @@ test_msnprintfLiteralPercentm(void)
exp_cnt = snprintf(exp_buf, sizeof(exp_buf), "%%m");
errno = ENOENT;
act_cnt = msnprintf(act_buf, sizeof(act_buf), "%%m");
+
TEST_ASSERT_EQUAL(exp_cnt, act_cnt);
TEST_ASSERT_EQUAL_STRING(exp_buf, act_buf);
}
@@ -51,6 +63,7 @@ test_msnprintfBackslashLiteralPercentm(void) {
exp_cnt = snprintf(exp_buf, sizeof(exp_buf), "\%%m");
errno = ENOENT;
act_cnt = msnprintf(act_buf, sizeof(act_buf), "\%%m");
+
TEST_ASSERT_EQUAL(exp_cnt, act_cnt);
TEST_ASSERT_EQUAL_STRING(exp_buf, act_buf);
}
@@ -66,6 +79,7 @@ test_msnprintfBackslashPercent(void) {
strerror(ENOENT));
errno = ENOENT;
act_cnt = msnprintf(act_buf, sizeof(act_buf), "\%m");
+
TEST_ASSERT_EQUAL(exp_cnt, act_cnt);
TEST_ASSERT_EQUAL_STRING(exp_buf, act_buf);
}
@@ -82,6 +96,7 @@ test_msnprintfHangingPercent(void) {
ZERO(act_buf);
exp_cnt = snprintf(exp_buf, sizeof(exp_buf), "%s", fmt);
act_cnt = msnprintf(act_buf, sizeof(act_buf), "%s", fmt);
+
TEST_ASSERT_EQUAL(exp_cnt, act_cnt);
TEST_ASSERT_EQUAL_STRING(exp_buf, act_buf);
TEST_ASSERT_EQUAL_STRING("", act_buf + 1 + strlen(act_buf));
@@ -95,6 +110,7 @@ test_format_errmsgHangingPercent(void) {
ZERO(act_buf);
format_errmsg(act_buf, sizeof(act_buf), fmt, ENOENT);
+
TEST_ASSERT_EQUAL_STRING(fmt, act_buf);
TEST_ASSERT_EQUAL_STRING("", act_buf + 1 + strlen(act_buf));
#else
@@ -110,6 +126,7 @@ test_msnprintfNullTarget(void) {
exp_cnt = snprintf(NULL, 0, "%d", 123);
errno = ENOENT;
act_cnt = msnprintf(NULL, 0, "%d", 123);
+
TEST_ASSERT_EQUAL(exp_cnt, act_cnt);
}
@@ -126,6 +143,7 @@ test_msnprintfTruncate(void) {
exp_cnt = snprintf(exp_buf, 3, "%s", strerror(ENOENT));
errno = ENOENT;
act_cnt = msnprintf(act_buf, 3, "%m");
+
TEST_ASSERT_EQUAL('\0', exp_buf[2]);
TEST_ASSERT_EQUAL('\0', act_buf[2]);
TEST_ASSERT_TRUE(act_cnt > 0);
diff --git a/contrib/ntp/tests/libntp/netof.c b/contrib/ntp/tests/libntp/netof.c
index 010b164..2fde6cc 100644
--- a/contrib/ntp/tests/libntp/netof.c
+++ b/contrib/ntp/tests/libntp/netof.c
@@ -7,6 +7,14 @@
#include "sockaddrtest.h"
+
+void test_ClassBAddress(void);
+void test_ClassCAddress(void);
+void test_ClassAAddress(void);
+void test_IPv6Address(void);
+
+
+
void test_ClassBAddress(void) {
sockaddr_u input = CreateSockaddr4("172.16.2.1", NTP_PORT);
sockaddr_u expected = CreateSockaddr4("172.16.0.0", NTP_PORT);
diff --git a/contrib/ntp/tests/libntp/numtoa.c b/contrib/ntp/tests/libntp/numtoa.c
index 1d01c78..5c7a663 100644
--- a/contrib/ntp/tests/libntp/numtoa.c
+++ b/contrib/ntp/tests/libntp/numtoa.c
@@ -1,31 +1,25 @@
#include "config.h"
#include "ntp_stdlib.h"
-#include "ntp_calendar.h"
#include "ntp_fp.h"
#include "unity.h"
+void test_Address(void);
+void test_Netmask(void);
-void setUp(void)
-{
-}
+void
+test_Address(void) {
+ const u_int32 input = htonl(3221225472UL + 512UL + 1UL); // 192.0.2.1
-void tearDown(void)
-{
+ TEST_ASSERT_EQUAL_STRING("192.0.2.1", numtoa(input));
}
-void test_Address(void) {
- u_int32 input = htonl(3221225472UL+512UL+1UL); // 192.0.2.1
+void
+test_Netmask(void) {
+ // 255.255.255.0
+ const u_int32 hostOrder = 255UL*256UL*256UL*256UL + 255UL*256UL*256UL + 255UL*256UL;
+ const u_int32 input = htonl(hostOrder);
- TEST_ASSERT_EQUAL_STRING("192.0.2.1", numtoa(input));
+ TEST_ASSERT_EQUAL_STRING("255.255.255.0", numtoa(input));
}
-
-void test_Netmask(void) {
- // 255.255.255.0
- u_int32 hostOrder = 255UL*256UL*256UL*256UL + 255UL*256UL*256UL + 255UL*256UL;
- u_int32 input = htonl(hostOrder);
-
- TEST_ASSERT_EQUAL_STRING("255.255.255.0", numtoa(input));
-}
-
diff --git a/contrib/ntp/tests/libntp/numtohost.c b/contrib/ntp/tests/libntp/numtohost.c
index 7472f46..cfce2d8 100644
--- a/contrib/ntp/tests/libntp/numtohost.c
+++ b/contrib/ntp/tests/libntp/numtohost.c
@@ -1,19 +1,20 @@
#include "config.h"
#include "ntp_stdlib.h"
-#include "ntp_calendar.h"
#include "ntp_fp.h"
#include "unity.h"
-void test_LoopbackNetNonResolve(void) {
+void test_LoopbackNetNonResolve(void);
+
+void
+test_LoopbackNetNonResolve(void) {
/* A loopback address in 127.0.0.0/8 is chosen, and
* numtohost() should not try to resolve it unless
* it is 127.0.0.1
*/
- u_int32 input = 127*256*256*256 + 1*256 + 1; // 127.0.1.1
+ const u_int32 input = 127*256*256*256 + 1*256 + 1; // 127.0.1.1
TEST_ASSERT_EQUAL_STRING("127.0.1.1", numtohost(htonl(input)));
}
-
diff --git a/contrib/ntp/tests/libntp/octtoint.c b/contrib/ntp/tests/libntp/octtoint.c
index 4b0f94c..5c03d6d 100644
--- a/contrib/ntp/tests/libntp/octtoint.c
+++ b/contrib/ntp/tests/libntp/octtoint.c
@@ -4,6 +4,16 @@
#include "unity.h"
+
+void test_SingleDigit(void);
+void test_MultipleDigits(void);
+void test_Zero(void);
+void test_MaximumUnsigned32bit(void);
+void test_Overflow(void);
+void test_IllegalCharacter(void);
+void test_IllegalDigit(void);
+
+
void test_SingleDigit(void) {
const char* str = "5";
u_long actual;
diff --git a/contrib/ntp/tests/libntp/prettydate.c b/contrib/ntp/tests/libntp/prettydate.c
index 9a331e8..e1292bf 100644
--- a/contrib/ntp/tests/libntp/prettydate.c
+++ b/contrib/ntp/tests/libntp/prettydate.c
@@ -6,11 +6,14 @@
#include "unity.h"
+void test_ConstantDate(void);
+
+
void
test_ConstantDate(void) {
const u_int32 HALF = 2147483648UL;
- l_fp time = {3485080800UL, HALF}; // 2010-06-09 14:00:00.5
+ l_fp time = {{3485080800UL}, HALF}; /* 2010-06-09 14:00:00.5 */
TEST_ASSERT_EQUAL_STRING("cfba1ce0.80000000 Wed, Jun 9 2010 14:00:00.500",
gmprettydate(&time));
diff --git a/contrib/ntp/tests/libntp/recvbuff.c b/contrib/ntp/tests/libntp/recvbuff.c
index e9c14da..6d6cf8e 100644
--- a/contrib/ntp/tests/libntp/recvbuff.c
+++ b/contrib/ntp/tests/libntp/recvbuff.c
@@ -4,6 +4,10 @@
#include "unity.h"
+void setUp(void);
+void test_Initialization(void);
+void test_GetAndFree(void);
+void test_GetAndFill(void);
void
setUp(void)
diff --git a/contrib/ntp/tests/libntp/refidsmear.c b/contrib/ntp/tests/libntp/refidsmear.c
index 5e9d27c..04f396c 100644
--- a/contrib/ntp/tests/libntp/refidsmear.c
+++ b/contrib/ntp/tests/libntp/refidsmear.c
@@ -28,7 +28,12 @@
* 254.255.255.255
*/
+
+
void rtol(uint32_t r, char *es);
+void rtoltor(uint32_t er, char *es);
+void ltor(l_fp l, char *er);
+void test_refidsmear(void);
void
rtol(uint32_t r, char *es)
@@ -53,7 +58,7 @@ rtol(uint32_t r, char *es)
}
-void rtoltor(uint32_t er, char *es);
+
void
rtoltor(uint32_t er, char *es)
@@ -82,8 +87,6 @@ rtoltor(uint32_t er, char *es)
}
-void ltor(l_fp l, char *er);
-
void
ltor(l_fp l, char *er)
{
diff --git a/contrib/ntp/tests/libntp/refnumtoa.c b/contrib/ntp/tests/libntp/refnumtoa.c
index 8a37690..33ad3aa 100644
--- a/contrib/ntp/tests/libntp/refnumtoa.c
+++ b/contrib/ntp/tests/libntp/refnumtoa.c
@@ -9,8 +9,12 @@
/* Might need to be updated if a new refclock gets this id. */
static const int UNUSED_REFCLOCK_ID = 250;
+void test_LocalClock(void);
+void test_UnknownId(void);
-void test_LocalClock() {
+
+void
+test_LocalClock(void) {
#ifdef REFCLOCK /* clockname() is useless otherwise */
/* We test with a refclock address of type LOCALCLOCK.
* with id 8
@@ -23,10 +27,10 @@ void test_LocalClock() {
address.sa4.sin_family = AF_INET;
address.sa4.sin_addr.s_addr = htonl(addr);
- char stringStart [100]= "";
+ char stringStart[100]= "";
- strcat(stringStart,clockname(REFCLK_LOCALCLOCK));
- strcat(stringStart,"(8)");
+ strcat(stringStart, clockname(REFCLK_LOCALCLOCK));
+ strcat(stringStart, "(8)");
char * expected = stringStart;
@@ -36,9 +40,8 @@ void test_LocalClock() {
#endif /* REFCLOCK */
}
-
-
-void test_UnknownId() {
+void
+test_UnknownId(void) {
#ifdef REFCLOCK /* refnumtoa() is useless otherwise */
/* We test with a currently unused refclock ID */
u_int32 addr = REFCLOCK_ADDR;
@@ -49,8 +52,8 @@ void test_UnknownId() {
address.sa4.sin_family = AF_INET;
address.sa4.sin_addr.s_addr = htonl(addr);
- char stringStart [100]= "REFCLK(";
- char value [100] ;
+ char stringStart[100]= "REFCLK(";
+ char value[100] ;
snprintf(value, sizeof(value), "%d", UNUSED_REFCLOCK_ID);
strcat(stringStart,value);
strcat(stringStart,",4)");
@@ -61,4 +64,3 @@ void test_UnknownId() {
TEST_IGNORE_MESSAGE("REFCLOCK NOT DEFINED, SKIPPING TEST");
#endif /* REFCLOCK */
}
-
diff --git a/contrib/ntp/tests/libntp/run-a_md5encrypt.c b/contrib/ntp/tests/libntp/run-a_md5encrypt.c
index 1c46e3f..122ed93 100644
--- a/contrib/ntp/tests/libntp/run-a_md5encrypt.c
+++ b/contrib/ntp/tests/libntp/run-a_md5encrypt.c
@@ -22,38 +22,41 @@
#include "unity.h"
#include <setjmp.h>
#include <stdio.h>
+#include "config.h"
+#include "ntp.h"
+#include "ntp_stdlib.h"
//=======External Functions This Runner Calls=====
extern void setUp(void);
extern void tearDown(void);
-extern void test_Encrypt();
-extern void test_DecryptValid();
-extern void test_DecryptInvalid();
-extern void test_IPv4AddressToRefId();
-extern void test_IPv6AddressToRefId();
+extern void test_Encrypt(void);
+extern void test_DecryptValid(void);
+extern void test_DecryptInvalid(void);
+extern void test_IPv4AddressToRefId(void);
+extern void test_IPv6AddressToRefId(void);
//=======Test Reset Option=====
-void resetTest()
+void resetTest(void);
+void resetTest(void)
{
tearDown();
setUp();
}
-char *progname;
+char const *progname;
//=======MAIN=====
int main(int argc, char *argv[])
{
progname = argv[0];
- Unity.TestFile = "a_md5encrypt.c";
UnityBegin("a_md5encrypt.c");
- RUN_TEST(test_Encrypt, 36);
- RUN_TEST(test_DecryptValid, 54);
- RUN_TEST(test_DecryptInvalid, 60);
- RUN_TEST(test_IPv4AddressToRefId, 68);
- RUN_TEST(test_IPv6AddressToRefId, 79);
+ RUN_TEST(test_Encrypt, 29);
+ RUN_TEST(test_DecryptValid, 30);
+ RUN_TEST(test_DecryptInvalid, 31);
+ RUN_TEST(test_IPv4AddressToRefId, 32);
+ RUN_TEST(test_IPv6AddressToRefId, 33);
return (UnityEnd());
}
diff --git a/contrib/ntp/tests/libntp/run-atoint.c b/contrib/ntp/tests/libntp/run-atoint.c
index 2764c9a..e8405fd 100644
--- a/contrib/ntp/tests/libntp/run-atoint.c
+++ b/contrib/ntp/tests/libntp/run-atoint.c
@@ -22,6 +22,9 @@
#include "unity.h"
#include <setjmp.h>
#include <stdio.h>
+#include "config.h"
+#include "ntp_stdlib.h"
+#include "ntp_calendar.h"
//=======External Functions This Runner Calls=====
extern void setUp(void);
@@ -35,27 +38,27 @@ extern void test_IllegalCharacter(void);
//=======Test Reset Option=====
-void resetTest()
+void resetTest(void);
+void resetTest(void)
{
tearDown();
setUp();
}
-char *progname;
+char const *progname;
//=======MAIN=====
int main(int argc, char *argv[])
{
progname = argv[0];
- Unity.TestFile = "atoint.c";
UnityBegin("atoint.c");
RUN_TEST(test_RegularPositive, 7);
- RUN_TEST(test_RegularNegative, 15);
- RUN_TEST(test_PositiveOverflowBoundary, 23);
- RUN_TEST(test_NegativeOverflowBoundary, 30);
- RUN_TEST(test_PositiveOverflowBig, 37);
- RUN_TEST(test_IllegalCharacter, 44);
+ RUN_TEST(test_RegularNegative, 8);
+ RUN_TEST(test_PositiveOverflowBoundary, 9);
+ RUN_TEST(test_NegativeOverflowBoundary, 10);
+ RUN_TEST(test_PositiveOverflowBig, 11);
+ RUN_TEST(test_IllegalCharacter, 12);
return (UnityEnd());
}
diff --git a/contrib/ntp/tests/libntp/run-atouint.c b/contrib/ntp/tests/libntp/run-atouint.c
index 7adb084..b7c1732 100644
--- a/contrib/ntp/tests/libntp/run-atouint.c
+++ b/contrib/ntp/tests/libntp/run-atouint.c
@@ -22,38 +22,42 @@
#include "unity.h"
#include <setjmp.h>
#include <stdio.h>
+#include "config.h"
+#include "ntp_stdlib.h"
+#include "ntp_calendar.h"
+#include "ntp_fp.h"
//=======External Functions This Runner Calls=====
extern void setUp(void);
extern void tearDown(void);
-extern void test_RegularPositive();
-extern void test_PositiveOverflowBoundary();
-extern void test_PositiveOverflowBig();
-extern void test_Negative();
-extern void test_IllegalChar();
+extern void test_RegularPositive(void);
+extern void test_PositiveOverflowBoundary(void);
+extern void test_PositiveOverflowBig(void);
+extern void test_Negative(void);
+extern void test_IllegalChar(void);
//=======Test Reset Option=====
-void resetTest()
+void resetTest(void);
+void resetTest(void)
{
tearDown();
setUp();
}
-char *progname;
+char const *progname;
//=======MAIN=====
int main(int argc, char *argv[])
{
progname = argv[0];
- Unity.TestFile = "atouint.c";
UnityBegin("atouint.c");
RUN_TEST(test_RegularPositive, 9);
- RUN_TEST(test_PositiveOverflowBoundary, 17);
- RUN_TEST(test_PositiveOverflowBig, 24);
- RUN_TEST(test_Negative, 31);
- RUN_TEST(test_IllegalChar, 38);
+ RUN_TEST(test_PositiveOverflowBoundary, 10);
+ RUN_TEST(test_PositiveOverflowBig, 11);
+ RUN_TEST(test_Negative, 12);
+ RUN_TEST(test_IllegalChar, 13);
return (UnityEnd());
}
diff --git a/contrib/ntp/tests/libntp/run-authkeys.c b/contrib/ntp/tests/libntp/run-authkeys.c
index 5e65cc9..6a2b670 100644
--- a/contrib/ntp/tests/libntp/run-authkeys.c
+++ b/contrib/ntp/tests/libntp/run-authkeys.c
@@ -22,40 +22,44 @@
#include "unity.h"
#include <setjmp.h>
#include <stdio.h>
+#include "config.h"
+#include "ntp.h"
+#include "ntp_stdlib.h"
+#include "ntp_calendar.h"
//=======External Functions This Runner Calls=====
extern void setUp(void);
extern void tearDown(void);
-extern void test_AddTrustedKeys();
-extern void test_AddUntrustedKey();
-extern void test_HaveKeyCorrect();
-extern void test_HaveKeyIncorrect();
-extern void test_AddWithAuthUseKey();
-extern void test_EmptyKey();
+extern void test_AddTrustedKeys(void);
+extern void test_AddUntrustedKey(void);
+extern void test_HaveKeyCorrect(void);
+extern void test_HaveKeyIncorrect(void);
+extern void test_AddWithAuthUseKey(void);
+extern void test_EmptyKey(void);
//=======Test Reset Option=====
-void resetTest()
+void resetTest(void);
+void resetTest(void)
{
tearDown();
setUp();
}
-char *progname;
+char const *progname;
//=======MAIN=====
int main(int argc, char *argv[])
{
progname = argv[0];
- Unity.TestFile = "authkeys.c";
UnityBegin("authkeys.c");
- RUN_TEST(test_AddTrustedKeys, 71);
- RUN_TEST(test_AddUntrustedKey, 82);
- RUN_TEST(test_HaveKeyCorrect, 90);
- RUN_TEST(test_HaveKeyIncorrect, 99);
- RUN_TEST(test_AddWithAuthUseKey, 106);
- RUN_TEST(test_EmptyKey, 113);
+ RUN_TEST(test_AddTrustedKeys, 24);
+ RUN_TEST(test_AddUntrustedKey, 25);
+ RUN_TEST(test_HaveKeyCorrect, 26);
+ RUN_TEST(test_HaveKeyIncorrect, 27);
+ RUN_TEST(test_AddWithAuthUseKey, 28);
+ RUN_TEST(test_EmptyKey, 29);
return (UnityEnd());
}
diff --git a/contrib/ntp/tests/libntp/run-buftvtots.c b/contrib/ntp/tests/libntp/run-buftvtots.c
index c54c339..82a1969 100644
--- a/contrib/ntp/tests/libntp/run-buftvtots.c
+++ b/contrib/ntp/tests/libntp/run-buftvtots.c
@@ -22,36 +22,42 @@
#include "unity.h"
#include <setjmp.h>
#include <stdio.h>
+#include "config.h"
+#include "ntp_types.h"
+#include "ntp_stdlib.h"
+#include "lfptest.h"
+#include "ntp_unixtime.h"
+#include <math.h>
//=======External Functions This Runner Calls=====
extern void setUp(void);
extern void tearDown(void);
-extern void test_ZeroBuffer();
-extern void test_IntegerAndFractionalBuffer();
-extern void test_IllegalMicroseconds();
-extern void test_AlwaysFalseOnWindows();
+extern void test_ZeroBuffer(void);
+extern void test_IntegerAndFractionalBuffer(void);
+extern void test_IllegalMicroseconds(void);
+extern void test_AlwaysFalseOnWindows(void);
//=======Test Reset Option=====
-void resetTest()
+void resetTest(void);
+void resetTest(void)
{
tearDown();
setUp();
}
-char *progname;
+char const *progname;
//=======MAIN=====
int main(int argc, char *argv[])
{
progname = argv[0];
- Unity.TestFile = "buftvtots.c";
UnityBegin("buftvtots.c");
- RUN_TEST(test_ZeroBuffer, 16);
- RUN_TEST(test_IntegerAndFractionalBuffer, 30);
- RUN_TEST(test_IllegalMicroseconds, 53);
- RUN_TEST(test_AlwaysFalseOnWindows, 66);
+ RUN_TEST(test_ZeroBuffer, 14);
+ RUN_TEST(test_IntegerAndFractionalBuffer, 15);
+ RUN_TEST(test_IllegalMicroseconds, 16);
+ RUN_TEST(test_AlwaysFalseOnWindows, 17);
return (UnityEnd());
}
diff --git a/contrib/ntp/tests/libntp/run-calendar.c b/contrib/ntp/tests/libntp/run-calendar.c
index 07a5092..50c5b20 100644
--- a/contrib/ntp/tests/libntp/run-calendar.c
+++ b/contrib/ntp/tests/libntp/run-calendar.c
@@ -22,50 +22,62 @@
#include "unity.h"
#include <setjmp.h>
#include <stdio.h>
+#include "config.h"
+#include "ntp_stdlib.h"
+#include "ntp_calendar.h"
+#include <string.h>
//=======External Functions This Runner Calls=====
extern void setUp(void);
extern void tearDown(void);
-extern void test_DaySplitMerge();
-extern void test_SplitYearDays1();
-extern void test_SplitYearDays2();
-extern void test_RataDie1();
-extern void test_LeapYears1();
-extern void test_LeapYears2();
-extern void test_RoundTripDate();
-extern void test_RoundTripYearStart();
-extern void test_RoundTripMonthStart();
-extern void test_RoundTripWeekStart();
-extern void test_RoundTripDayStart();
+extern void test_DaySplitMerge(void);
+extern void test_SplitYearDays1(void);
+extern void test_SplitYearDays2(void);
+extern void test_RataDie1(void);
+extern void test_LeapYears1(void);
+extern void test_LeapYears2(void);
+extern void test_RoundTripDate(void);
+extern void test_RoundTripYearStart(void);
+extern void test_RoundTripMonthStart(void);
+extern void test_RoundTripWeekStart(void);
+extern void test_RoundTripDayStart(void);
+extern void test_IsoCalYearsToWeeks(void);
+extern void test_IsoCalWeeksToYearStart(void);
+extern void test_IsoCalWeeksToYearEnd(void);
+extern void test_DaySecToDate(void);
//=======Test Reset Option=====
-void resetTest()
+void resetTest(void);
+void resetTest(void)
{
tearDown();
setUp();
}
-char *progname;
+char const *progname;
//=======MAIN=====
int main(int argc, char *argv[])
{
progname = argv[0];
- Unity.TestFile = "calendar.c";
UnityBegin("calendar.c");
- RUN_TEST(test_DaySplitMerge, 230);
- RUN_TEST(test_SplitYearDays1, 254);
- RUN_TEST(test_SplitYearDays2, 268);
- RUN_TEST(test_RataDie1, 283);
- RUN_TEST(test_LeapYears1, 293);
- RUN_TEST(test_LeapYears2, 308);
- RUN_TEST(test_RoundTripDate, 326);
- RUN_TEST(test_RoundTripYearStart, 355);
- RUN_TEST(test_RoundTripMonthStart, 371);
- RUN_TEST(test_RoundTripWeekStart, 387);
- RUN_TEST(test_RoundTripDayStart, 403);
+ RUN_TEST(test_DaySplitMerge, 21);
+ RUN_TEST(test_SplitYearDays1, 22);
+ RUN_TEST(test_SplitYearDays2, 23);
+ RUN_TEST(test_RataDie1, 24);
+ RUN_TEST(test_LeapYears1, 25);
+ RUN_TEST(test_LeapYears2, 26);
+ RUN_TEST(test_RoundTripDate, 27);
+ RUN_TEST(test_RoundTripYearStart, 28);
+ RUN_TEST(test_RoundTripMonthStart, 29);
+ RUN_TEST(test_RoundTripWeekStart, 30);
+ RUN_TEST(test_RoundTripDayStart, 31);
+ RUN_TEST(test_IsoCalYearsToWeeks, 32);
+ RUN_TEST(test_IsoCalWeeksToYearStart, 33);
+ RUN_TEST(test_IsoCalWeeksToYearEnd, 34);
+ RUN_TEST(test_DaySecToDate, 35);
return (UnityEnd());
}
diff --git a/contrib/ntp/tests/libntp/run-caljulian.c b/contrib/ntp/tests/libntp/run-caljulian.c
index b4e3f48..a11389c 100644
--- a/contrib/ntp/tests/libntp/run-caljulian.c
+++ b/contrib/ntp/tests/libntp/run-caljulian.c
@@ -22,37 +22,41 @@
#include "unity.h"
#include <setjmp.h>
#include <stdio.h>
+#include "config.h"
+#include "ntp_calendar.h"
+#include "ntp_stdlib.h"
+#include "test-libntp.h"
+#include <string.h>
//=======External Functions This Runner Calls=====
extern void setUp(void);
extern void tearDown(void);
-void resetTest(void);
-extern void test_RegularTime();
-extern void test_LeapYear();
-extern void test_uLongBoundary();
-extern void test_uLongWrapped();
+extern void test_RegularTime(void);
+extern void test_LeapYear(void);
+extern void test_uLongBoundary(void);
+extern void test_uLongWrapped(void);
//=======Test Reset Option=====
-void resetTest()
+void resetTest(void);
+void resetTest(void)
{
tearDown();
setUp();
}
-char *progname;
+char const *progname;
//=======MAIN=====
int main(int argc, char *argv[])
{
progname = argv[0];
- Unity.TestFile = "caljulian.c";
UnityBegin("caljulian.c");
- RUN_TEST(test_RegularTime, 74);
- RUN_TEST(test_LeapYear, 85);
- RUN_TEST(test_uLongBoundary, 96);
- RUN_TEST(test_uLongWrapped, 107);
+ RUN_TEST(test_RegularTime, 16);
+ RUN_TEST(test_LeapYear, 17);
+ RUN_TEST(test_uLongBoundary, 18);
+ RUN_TEST(test_uLongWrapped, 19);
return (UnityEnd());
}
diff --git a/contrib/ntp/tests/libntp/run-caltontp.c b/contrib/ntp/tests/libntp/run-caltontp.c
index b7b6626..c80e0a4 100644
--- a/contrib/ntp/tests/libntp/run-caltontp.c
+++ b/contrib/ntp/tests/libntp/run-caltontp.c
@@ -22,6 +22,8 @@
#include "unity.h"
#include <setjmp.h>
#include <stdio.h>
+#include "config.h"
+#include "ntp_calendar.h"
//=======External Functions This Runner Calls=====
extern void setUp(void);
@@ -33,25 +35,25 @@ extern void test_WraparoundDateIn2036(void);
//=======Test Reset Option=====
-void resetTest()
+void resetTest(void);
+void resetTest(void)
{
tearDown();
setUp();
}
-char *progname;
+char const *progname;
//=======MAIN=====
int main(int argc, char *argv[])
{
progname = argv[0];
- Unity.TestFile = "caltontp.c";
UnityBegin("caltontp.c");
- RUN_TEST(test_DateGivenMonthDay, 6);
- RUN_TEST(test_DateGivenYearDay, 16);
- RUN_TEST(test_DateLeapYear, 27);
- RUN_TEST(test_WraparoundDateIn2036, 40);
+ RUN_TEST(test_DateGivenMonthDay, 5);
+ RUN_TEST(test_DateGivenYearDay, 6);
+ RUN_TEST(test_DateLeapYear, 7);
+ RUN_TEST(test_WraparoundDateIn2036, 8);
return (UnityEnd());
}
diff --git a/contrib/ntp/tests/libntp/run-calyearstart.c b/contrib/ntp/tests/libntp/run-calyearstart.c
index d54a0b5..374e9d5 100644
--- a/contrib/ntp/tests/libntp/run-calyearstart.c
+++ b/contrib/ntp/tests/libntp/run-calyearstart.c
@@ -22,34 +22,38 @@
#include "unity.h"
#include <setjmp.h>
#include <stdio.h>
+#include "config.h"
+#include "ntp_stdlib.h"
+#include "ntp_calendar.h"
+#include "test-libntp.h"
//=======External Functions This Runner Calls=====
extern void setUp(void);
extern void tearDown(void);
-extern void test_NoWrapInDateRange();
-extern void test_NoWrapInDateRangeLeapYear();
-extern void test_WrapInDateRange();
+extern void test_NoWrapInDateRange(void);
+extern void test_NoWrapInDateRangeLeapYear(void);
+extern void test_WrapInDateRange(void);
//=======Test Reset Option=====
-void resetTest()
+void resetTest(void);
+void resetTest(void)
{
tearDown();
setUp();
}
-char *progname;
+char const *progname;
//=======MAIN=====
int main(int argc, char *argv[])
{
progname = argv[0];
- Unity.TestFile = "calyearstart.c";
UnityBegin("calyearstart.c");
- RUN_TEST(test_NoWrapInDateRange, 22);
- RUN_TEST(test_NoWrapInDateRangeLeapYear, 30);
- RUN_TEST(test_WrapInDateRange, 38);
+ RUN_TEST(test_NoWrapInDateRange, 11);
+ RUN_TEST(test_NoWrapInDateRangeLeapYear, 12);
+ RUN_TEST(test_WrapInDateRange, 13);
return (UnityEnd());
}
diff --git a/contrib/ntp/tests/libntp/run-clocktime.c b/contrib/ntp/tests/libntp/run-clocktime.c
index f21de83..8d19831 100644
--- a/contrib/ntp/tests/libntp/run-clocktime.c
+++ b/contrib/ntp/tests/libntp/run-clocktime.c
@@ -22,44 +22,48 @@
#include "unity.h"
#include <setjmp.h>
#include <stdio.h>
+#include "config.h"
+#include "ntp_calendar.h"
+#include "ntp_stdlib.h"
+#include "test-libntp.h"
//=======External Functions This Runner Calls=====
extern void setUp(void);
extern void tearDown(void);
-extern void test_CurrentYear();
-extern void test_CurrentYearFuzz();
-extern void test_TimeZoneOffset();
-extern void test_WrongYearStart();
-extern void test_PreviousYear();
-extern void test_NextYear();
-extern void test_NoReasonableConversion();
-extern void test_AlwaysInLimit();
+extern void test_CurrentYear(void);
+extern void test_CurrentYearFuzz(void);
+extern void test_TimeZoneOffset(void);
+extern void test_WrongYearStart(void);
+extern void test_PreviousYear(void);
+extern void test_NextYear(void);
+extern void test_NoReasonableConversion(void);
+extern void test_AlwaysInLimit(void);
//=======Test Reset Option=====
-void resetTest()
+void resetTest(void);
+void resetTest(void)
{
tearDown();
setUp();
}
-char *progname;
+char const *progname;
//=======MAIN=====
int main(int argc, char *argv[])
{
progname = argv[0];
- Unity.TestFile = "clocktime.c";
UnityBegin("clocktime.c");
- RUN_TEST(test_CurrentYear, 32);
- RUN_TEST(test_CurrentYearFuzz, 47);
- RUN_TEST(test_TimeZoneOffset, 69);
- RUN_TEST(test_WrongYearStart, 89);
- RUN_TEST(test_PreviousYear, 108);
- RUN_TEST(test_NextYear, 127);
- RUN_TEST(test_NoReasonableConversion, 145);
- RUN_TEST(test_AlwaysInLimit, 167);
+ RUN_TEST(test_CurrentYear, 11);
+ RUN_TEST(test_CurrentYearFuzz, 12);
+ RUN_TEST(test_TimeZoneOffset, 13);
+ RUN_TEST(test_WrongYearStart, 14);
+ RUN_TEST(test_PreviousYear, 15);
+ RUN_TEST(test_NextYear, 16);
+ RUN_TEST(test_NoReasonableConversion, 17);
+ RUN_TEST(test_AlwaysInLimit, 19);
return (UnityEnd());
}
diff --git a/contrib/ntp/tests/libntp/run-decodenetnum.c b/contrib/ntp/tests/libntp/run-decodenetnum.c
index 2e0a7e5..014151e 100644
--- a/contrib/ntp/tests/libntp/run-decodenetnum.c
+++ b/contrib/ntp/tests/libntp/run-decodenetnum.c
@@ -22,11 +22,13 @@
#include "unity.h"
#include <setjmp.h>
#include <stdio.h>
+#include "config.h"
+#include "ntp_stdlib.h"
+#include "sockaddrtest.h"
//=======External Functions This Runner Calls=====
extern void setUp(void);
extern void tearDown(void);
-void resetTest(void);
extern void test_IPv4AddressOnly(void);
extern void test_IPv4AddressWithPort(void);
extern void test_IPv6AddressOnly(void);
@@ -36,27 +38,27 @@ extern void test_IllegalCharInPort(void);
//=======Test Reset Option=====
-void resetTest()
+void resetTest(void);
+void resetTest(void)
{
tearDown();
setUp();
}
-char *progname;
+char const *progname;
//=======MAIN=====
int main(int argc, char *argv[])
{
progname = argv[0];
- Unity.TestFile = "decodenetnum.c";
UnityBegin("decodenetnum.c");
- RUN_TEST(test_IPv4AddressOnly, 9);
- RUN_TEST(test_IPv4AddressWithPort, 22);
- RUN_TEST(test_IPv6AddressOnly, 35);
- RUN_TEST(test_IPv6AddressWithPort, 55);
- RUN_TEST(test_IllegalAddress, 75);
- RUN_TEST(test_IllegalCharInPort, 82);
+ RUN_TEST(test_IPv4AddressOnly, 7);
+ RUN_TEST(test_IPv4AddressWithPort, 8);
+ RUN_TEST(test_IPv6AddressOnly, 10);
+ RUN_TEST(test_IPv6AddressWithPort, 11);
+ RUN_TEST(test_IllegalAddress, 13);
+ RUN_TEST(test_IllegalCharInPort, 14);
return (UnityEnd());
}
diff --git a/contrib/ntp/tests/libntp/run-hextoint.c b/contrib/ntp/tests/libntp/run-hextoint.c
index a697921..66cc57d 100644
--- a/contrib/ntp/tests/libntp/run-hextoint.c
+++ b/contrib/ntp/tests/libntp/run-hextoint.c
@@ -22,6 +22,10 @@
#include "unity.h"
#include <setjmp.h>
#include <stdio.h>
+#include "config.h"
+#include "ntp_stdlib.h"
+#include "ntp_calendar.h"
+#include "ntp_fp.h"
//=======External Functions This Runner Calls=====
extern void setUp(void);
@@ -34,26 +38,26 @@ extern void test_IllegalChar(void);
//=======Test Reset Option=====
-void resetTest()
+void resetTest(void);
+void resetTest(void)
{
tearDown();
setUp();
}
-char *progname;
+char const *progname;
//=======MAIN=====
int main(int argc, char *argv[])
{
progname = argv[0];
- Unity.TestFile = "hextoint.c";
UnityBegin("hextoint.c");
- RUN_TEST(test_SingleDigit, 10);
- RUN_TEST(test_MultipleDigits, 18);
- RUN_TEST(test_MaxUnsigned, 26);
- RUN_TEST(test_Overflow, 34);
- RUN_TEST(test_IllegalChar, 41);
+ RUN_TEST(test_SingleDigit, 9);
+ RUN_TEST(test_MultipleDigits, 10);
+ RUN_TEST(test_MaxUnsigned, 11);
+ RUN_TEST(test_Overflow, 12);
+ RUN_TEST(test_IllegalChar, 13);
return (UnityEnd());
}
diff --git a/contrib/ntp/tests/libntp/run-hextolfp.c b/contrib/ntp/tests/libntp/run-hextolfp.c
index 0ef9f63..e894c3b 100644
--- a/contrib/ntp/tests/libntp/run-hextolfp.c
+++ b/contrib/ntp/tests/libntp/run-hextolfp.c
@@ -22,11 +22,14 @@
#include "unity.h"
#include <setjmp.h>
#include <stdio.h>
+#include "config.h"
+#include "ntp_stdlib.h"
+#include "ntp_calendar.h"
+#include "lfptest.h"
//=======External Functions This Runner Calls=====
extern void setUp(void);
extern void tearDown(void);
-void resetTest(void);
extern void test_PositiveInteger(void);
extern void test_NegativeInteger(void);
extern void test_PositiveFraction(void);
@@ -36,27 +39,27 @@ extern void test_IllegalChar(void);
//=======Test Reset Option=====
-void resetTest()
+void resetTest(void);
+void resetTest(void)
{
tearDown();
setUp();
}
-char *progname;
+char const *progname;
//=======MAIN=====
int main(int argc, char *argv[])
{
progname = argv[0];
- Unity.TestFile = "hextolfp.c";
UnityBegin("hextolfp.c");
- RUN_TEST(test_PositiveInteger, 10);
- RUN_TEST(test_NegativeInteger, 20);
- RUN_TEST(test_PositiveFraction, 30);
- RUN_TEST(test_NegativeFraction, 40);
- RUN_TEST(test_IllegalNumberOfInteger, 50);
- RUN_TEST(test_IllegalChar, 57);
+ RUN_TEST(test_PositiveInteger, 9);
+ RUN_TEST(test_NegativeInteger, 10);
+ RUN_TEST(test_PositiveFraction, 11);
+ RUN_TEST(test_NegativeFraction, 12);
+ RUN_TEST(test_IllegalNumberOfInteger, 13);
+ RUN_TEST(test_IllegalChar, 14);
return (UnityEnd());
}
diff --git a/contrib/ntp/tests/libntp/run-humandate.c b/contrib/ntp/tests/libntp/run-humandate.c
index 291415f..1f2e717 100644
--- a/contrib/ntp/tests/libntp/run-humandate.c
+++ b/contrib/ntp/tests/libntp/run-humandate.c
@@ -22,6 +22,9 @@
#include "unity.h"
#include <setjmp.h>
#include <stdio.h>
+#include "config.h"
+#include "ntp_calendar.h"
+#include "ntp_stdlib.h"
//=======External Functions This Runner Calls=====
extern void setUp(void);
@@ -31,23 +34,23 @@ extern void test_CurrentTime(void);
//=======Test Reset Option=====
-void resetTest()
+void resetTest(void);
+void resetTest(void)
{
tearDown();
setUp();
}
-char *progname;
+char const *progname;
//=======MAIN=====
int main(int argc, char *argv[])
{
progname = argv[0];
- Unity.TestFile = "humandate.c";
UnityBegin("humandate.c");
RUN_TEST(test_RegularTime, 8);
- RUN_TEST(test_CurrentTime, 22);
+ RUN_TEST(test_CurrentTime, 9);
return (UnityEnd());
}
diff --git a/contrib/ntp/tests/libntp/run-lfpfunc.c b/contrib/ntp/tests/libntp/run-lfpfunc.c
index 2f0e1c2..ac6700f 100644
--- a/contrib/ntp/tests/libntp/run-lfpfunc.c
+++ b/contrib/ntp/tests/libntp/run-lfpfunc.c
@@ -22,47 +22,51 @@
#include "unity.h"
#include <setjmp.h>
#include <stdio.h>
+#include "config.h"
+#include "ntp_stdlib.h"
+#include "ntp_fp.h"
+#include <float.h>
+#include <math.h>
//=======External Functions This Runner Calls=====
extern void setUp(void);
extern void tearDown(void);
-void resetTest(void);
-extern void test_AdditionLR();
-extern void test_AdditionRL();
-extern void test_SubtractionLR();
-extern void test_SubtractionRL();
-extern void test_Negation();
-extern void test_Absolute();
-extern void test_FDF_RoundTrip();
-extern void test_SignedRelOps();
-extern void test_UnsignedRelOps();
+extern void test_AdditionLR(void);
+extern void test_AdditionRL(void);
+extern void test_SubtractionLR(void);
+extern void test_SubtractionRL(void);
+extern void test_Negation(void);
+extern void test_Absolute(void);
+extern void test_FDF_RoundTrip(void);
+extern void test_SignedRelOps(void);
+extern void test_UnsignedRelOps(void);
//=======Test Reset Option=====
-void resetTest()
+void resetTest(void);
+void resetTest(void)
{
tearDown();
setUp();
}
-char *progname;
+char const *progname;
//=======MAIN=====
int main(int argc, char *argv[])
{
progname = argv[0];
- Unity.TestFile = "lfpfunc.c";
UnityBegin("lfpfunc.c");
- RUN_TEST(test_AdditionLR, 320);
- RUN_TEST(test_AdditionRL, 339);
- RUN_TEST(test_SubtractionLR, 358);
- RUN_TEST(test_SubtractionRL, 373);
- RUN_TEST(test_Negation, 391);
- RUN_TEST(test_Absolute, 412);
- RUN_TEST(test_FDF_RoundTrip, 447);
- RUN_TEST(test_SignedRelOps, 479);
- RUN_TEST(test_UnsignedRelOps, 522);
+ RUN_TEST(test_AdditionLR, 50);
+ RUN_TEST(test_AdditionRL, 51);
+ RUN_TEST(test_SubtractionLR, 52);
+ RUN_TEST(test_SubtractionRL, 53);
+ RUN_TEST(test_Negation, 54);
+ RUN_TEST(test_Absolute, 55);
+ RUN_TEST(test_FDF_RoundTrip, 56);
+ RUN_TEST(test_SignedRelOps, 57);
+ RUN_TEST(test_UnsignedRelOps, 58);
return (UnityEnd());
}
diff --git a/contrib/ntp/tests/libntp/run-lfptostr.c b/contrib/ntp/tests/libntp/run-lfptostr.c
index 7e54a4f..bae0f85 100644
--- a/contrib/ntp/tests/libntp/run-lfptostr.c
+++ b/contrib/ntp/tests/libntp/run-lfptostr.c
@@ -22,6 +22,9 @@
#include "unity.h"
#include <setjmp.h>
#include <stdio.h>
+#include "config.h"
+#include "ntp_stdlib.h"
+#include "ntp_fp.h"
//=======External Functions This Runner Calls=====
extern void setUp(void);
@@ -40,32 +43,32 @@ extern void test_UnsignedInteger(void);
//=======Test Reset Option=====
-void resetTest()
+void resetTest(void);
+void resetTest(void)
{
tearDown();
setUp();
}
-char *progname;
+char const *progname;
//=======MAIN=====
int main(int argc, char *argv[])
{
progname = argv[0];
- Unity.TestFile = "lfptostr.c";
UnityBegin("lfptostr.c");
RUN_TEST(test_PositiveInteger, 23);
- RUN_TEST(test_NegativeInteger, 30);
- RUN_TEST(test_PositiveIntegerWithFraction, 37);
- RUN_TEST(test_NegativeIntegerWithFraction, 44);
- RUN_TEST(test_RoundingDownToInteger, 51);
- RUN_TEST(test_RoundingMiddleToInteger, 58);
- RUN_TEST(test_RoundingUpToInteger, 65);
- RUN_TEST(test_SingleDecimal, 72);
- RUN_TEST(test_MillisecondsRoundingUp, 79);
- RUN_TEST(test_MillisecondsRoundingDown, 88);
- RUN_TEST(test_UnsignedInteger, 97);
+ RUN_TEST(test_NegativeInteger, 24);
+ RUN_TEST(test_PositiveIntegerWithFraction, 25);
+ RUN_TEST(test_NegativeIntegerWithFraction, 26);
+ RUN_TEST(test_RoundingDownToInteger, 27);
+ RUN_TEST(test_RoundingMiddleToInteger, 28);
+ RUN_TEST(test_RoundingUpToInteger, 29);
+ RUN_TEST(test_SingleDecimal, 30);
+ RUN_TEST(test_MillisecondsRoundingUp, 31);
+ RUN_TEST(test_MillisecondsRoundingDown, 32);
+ RUN_TEST(test_UnsignedInteger, 33);
return (UnityEnd());
}
diff --git a/contrib/ntp/tests/libntp/run-modetoa.c b/contrib/ntp/tests/libntp/run-modetoa.c
index 334e08d..20e2d95 100644
--- a/contrib/ntp/tests/libntp/run-modetoa.c
+++ b/contrib/ntp/tests/libntp/run-modetoa.c
@@ -22,6 +22,8 @@
#include "unity.h"
#include <setjmp.h>
#include <stdio.h>
+#include "config.h"
+#include "ntp_stdlib.h"
//=======External Functions This Runner Calls=====
extern void setUp(void);
@@ -31,23 +33,23 @@ extern void test_UnknownMode(void);
//=======Test Reset Option=====
-void resetTest()
+void resetTest(void);
+void resetTest(void)
{
tearDown();
setUp();
}
-char *progname;
+char const *progname;
//=======MAIN=====
int main(int argc, char *argv[])
{
progname = argv[0];
- Unity.TestFile = "modetoa.c";
UnityBegin("modetoa.c");
- RUN_TEST(test_KnownMode, 9);
- RUN_TEST(test_UnknownMode, 15);
+ RUN_TEST(test_KnownMode, 7);
+ RUN_TEST(test_UnknownMode, 8);
return (UnityEnd());
}
diff --git a/contrib/ntp/tests/libntp/run-msyslog.c b/contrib/ntp/tests/libntp/run-msyslog.c
index ea566a7..544fbc1 100644
--- a/contrib/ntp/tests/libntp/run-msyslog.c
+++ b/contrib/ntp/tests/libntp/run-msyslog.c
@@ -22,11 +22,12 @@
#include "unity.h"
#include <setjmp.h>
#include <stdio.h>
+#include "config.h"
+#include "ntp_stdlib.h"
//=======External Functions This Runner Calls=====
extern void setUp(void);
extern void tearDown(void);
-void resetTest(void);
extern void test_msnprintf(void);
extern void test_msnprintfLiteralPercentm(void);
extern void test_msnprintfBackslashLiteralPercentm(void);
@@ -38,29 +39,29 @@ extern void test_msnprintfTruncate(void);
//=======Test Reset Option=====
-void resetTest()
+void resetTest(void);
+void resetTest(void)
{
tearDown();
setUp();
}
-char *progname;
+char const *progname;
//=======MAIN=====
int main(int argc, char *argv[])
{
progname = argv[0];
- Unity.TestFile = "msyslog.c";
UnityBegin("msyslog.c");
- RUN_TEST(test_msnprintf, 14);
- RUN_TEST(test_msnprintfLiteralPercentm, 30);
- RUN_TEST(test_msnprintfBackslashLiteralPercentm, 45);
- RUN_TEST(test_msnprintfBackslashPercent, 59);
- RUN_TEST(test_msnprintfHangingPercent, 74);
- RUN_TEST(test_format_errmsgHangingPercent, 91);
- RUN_TEST(test_msnprintfNullTarget, 106);
- RUN_TEST(test_msnprintfTruncate, 117);
+ RUN_TEST(test_msnprintf, 13);
+ RUN_TEST(test_msnprintfLiteralPercentm, 14);
+ RUN_TEST(test_msnprintfBackslashLiteralPercentm, 15);
+ RUN_TEST(test_msnprintfBackslashPercent, 16);
+ RUN_TEST(test_msnprintfHangingPercent, 17);
+ RUN_TEST(test_format_errmsgHangingPercent, 18);
+ RUN_TEST(test_msnprintfNullTarget, 19);
+ RUN_TEST(test_msnprintfTruncate, 20);
return (UnityEnd());
}
diff --git a/contrib/ntp/tests/libntp/run-netof.c b/contrib/ntp/tests/libntp/run-netof.c
index 401192d..7a714f5 100644
--- a/contrib/ntp/tests/libntp/run-netof.c
+++ b/contrib/ntp/tests/libntp/run-netof.c
@@ -22,11 +22,14 @@
#include "unity.h"
#include <setjmp.h>
#include <stdio.h>
+#include "config.h"
+#include "ntp_stdlib.h"
+#include "ntp_calendar.h"
+#include "sockaddrtest.h"
//=======External Functions This Runner Calls=====
extern void setUp(void);
extern void tearDown(void);
-void resetTest(void);
extern void test_ClassBAddress(void);
extern void test_ClassCAddress(void);
extern void test_ClassAAddress(void);
@@ -34,25 +37,25 @@ extern void test_IPv6Address(void);
//=======Test Reset Option=====
-void resetTest()
+void resetTest(void);
+void resetTest(void)
{
tearDown();
setUp();
}
-char *progname;
+char const *progname;
//=======MAIN=====
int main(int argc, char *argv[])
{
progname = argv[0];
- Unity.TestFile = "netof.c";
UnityBegin("netof.c");
- RUN_TEST(test_ClassBAddress, 10);
- RUN_TEST(test_ClassCAddress, 20);
- RUN_TEST(test_ClassAAddress, 30);
- RUN_TEST(test_IPv6Address, 43);
+ RUN_TEST(test_ClassBAddress, 11);
+ RUN_TEST(test_ClassCAddress, 12);
+ RUN_TEST(test_ClassAAddress, 13);
+ RUN_TEST(test_IPv6Address, 14);
return (UnityEnd());
}
diff --git a/contrib/ntp/tests/libntp/run-numtoa.c b/contrib/ntp/tests/libntp/run-numtoa.c
index 5468b72..640e61c 100644
--- a/contrib/ntp/tests/libntp/run-numtoa.c
+++ b/contrib/ntp/tests/libntp/run-numtoa.c
@@ -22,6 +22,9 @@
#include "unity.h"
#include <setjmp.h>
#include <stdio.h>
+#include "config.h"
+#include "ntp_stdlib.h"
+#include "ntp_fp.h"
//=======External Functions This Runner Calls=====
extern void setUp(void);
@@ -31,23 +34,23 @@ extern void test_Netmask(void);
//=======Test Reset Option=====
-void resetTest()
+void resetTest(void);
+void resetTest(void)
{
tearDown();
setUp();
}
-char *progname;
+char const *progname;
//=======MAIN=====
int main(int argc, char *argv[])
{
progname = argv[0];
- Unity.TestFile = "numtoa.c";
UnityBegin("numtoa.c");
- RUN_TEST(test_Address, 18);
- RUN_TEST(test_Netmask, 24);
+ RUN_TEST(test_Address, 8);
+ RUN_TEST(test_Netmask, 9);
return (UnityEnd());
}
diff --git a/contrib/ntp/tests/libntp/run-numtohost.c b/contrib/ntp/tests/libntp/run-numtohost.c
index 3ec4fdf..5ebe15b 100644
--- a/contrib/ntp/tests/libntp/run-numtohost.c
+++ b/contrib/ntp/tests/libntp/run-numtohost.c
@@ -22,6 +22,9 @@
#include "unity.h"
#include <setjmp.h>
#include <stdio.h>
+#include "config.h"
+#include "ntp_stdlib.h"
+#include "ntp_fp.h"
//=======External Functions This Runner Calls=====
extern void setUp(void);
@@ -30,22 +33,22 @@ extern void test_LoopbackNetNonResolve(void);
//=======Test Reset Option=====
-void resetTest()
+void resetTest(void);
+void resetTest(void)
{
tearDown();
setUp();
}
-char *progname;
+char const *progname;
//=======MAIN=====
int main(int argc, char *argv[])
{
progname = argv[0];
- Unity.TestFile = "numtohost.c";
UnityBegin("numtohost.c");
- RUN_TEST(test_LoopbackNetNonResolve, 9);
+ RUN_TEST(test_LoopbackNetNonResolve, 8);
return (UnityEnd());
}
diff --git a/contrib/ntp/tests/libntp/run-octtoint.c b/contrib/ntp/tests/libntp/run-octtoint.c
index dc2bed5..9d29904 100644
--- a/contrib/ntp/tests/libntp/run-octtoint.c
+++ b/contrib/ntp/tests/libntp/run-octtoint.c
@@ -22,6 +22,8 @@
#include "unity.h"
#include <setjmp.h>
#include <stdio.h>
+#include "config.h"
+#include "ntp_stdlib.h"
//=======External Functions This Runner Calls=====
extern void setUp(void);
@@ -36,28 +38,28 @@ extern void test_IllegalDigit(void);
//=======Test Reset Option=====
-void resetTest()
+void resetTest(void);
+void resetTest(void)
{
tearDown();
setUp();
}
-char *progname;
+char const *progname;
//=======MAIN=====
int main(int argc, char *argv[])
{
progname = argv[0];
- Unity.TestFile = "octtoint.c";
UnityBegin("octtoint.c");
- RUN_TEST(test_SingleDigit, 7);
- RUN_TEST(test_MultipleDigits, 15);
- RUN_TEST(test_Zero, 24);
- RUN_TEST(test_MaximumUnsigned32bit, 33);
- RUN_TEST(test_Overflow, 42);
- RUN_TEST(test_IllegalCharacter, 50);
- RUN_TEST(test_IllegalDigit, 58);
+ RUN_TEST(test_SingleDigit, 8);
+ RUN_TEST(test_MultipleDigits, 9);
+ RUN_TEST(test_Zero, 10);
+ RUN_TEST(test_MaximumUnsigned32bit, 11);
+ RUN_TEST(test_Overflow, 12);
+ RUN_TEST(test_IllegalCharacter, 13);
+ RUN_TEST(test_IllegalDigit, 14);
return (UnityEnd());
}
diff --git a/contrib/ntp/tests/libntp/run-prettydate.c b/contrib/ntp/tests/libntp/run-prettydate.c
index 2067b13..e6c5ff3 100644
--- a/contrib/ntp/tests/libntp/run-prettydate.c
+++ b/contrib/ntp/tests/libntp/run-prettydate.c
@@ -22,6 +22,10 @@
#include "unity.h"
#include <setjmp.h>
#include <stdio.h>
+#include "config.h"
+#include "ntp_stdlib.h"
+#include "ntp_calendar.h"
+#include "ntp_fp.h"
//=======External Functions This Runner Calls=====
extern void setUp(void);
@@ -30,22 +34,22 @@ extern void test_ConstantDate(void);
//=======Test Reset Option=====
-void resetTest()
+void resetTest(void);
+void resetTest(void)
{
tearDown();
setUp();
}
-char *progname;
+char const *progname;
//=======MAIN=====
int main(int argc, char *argv[])
{
progname = argv[0];
- Unity.TestFile = "prettydate.c";
UnityBegin("prettydate.c");
- RUN_TEST(test_ConstantDate, 10);
+ RUN_TEST(test_ConstantDate, 9);
return (UnityEnd());
}
diff --git a/contrib/ntp/tests/libntp/run-recvbuff.c b/contrib/ntp/tests/libntp/run-recvbuff.c
index 8060105..b8a3796 100644
--- a/contrib/ntp/tests/libntp/run-recvbuff.c
+++ b/contrib/ntp/tests/libntp/run-recvbuff.c
@@ -22,6 +22,8 @@
#include "unity.h"
#include <setjmp.h>
#include <stdio.h>
+#include "config.h"
+#include "recvbuff.h"
//=======External Functions This Runner Calls=====
extern void setUp(void);
@@ -32,24 +34,24 @@ extern void test_GetAndFill(void);
//=======Test Reset Option=====
-void resetTest()
+void resetTest(void);
+void resetTest(void)
{
tearDown();
setUp();
}
-char *progname;
+char const *progname;
//=======MAIN=====
int main(int argc, char *argv[])
{
progname = argv[0];
- Unity.TestFile = "recvbuff.c";
UnityBegin("recvbuff.c");
- RUN_TEST(test_Initialization, 15);
- RUN_TEST(test_GetAndFree, 23);
- RUN_TEST(test_GetAndFill, 34);
+ RUN_TEST(test_Initialization, 8);
+ RUN_TEST(test_GetAndFree, 9);
+ RUN_TEST(test_GetAndFill, 10);
return (UnityEnd());
}
diff --git a/contrib/ntp/tests/libntp/run-refidsmear.c b/contrib/ntp/tests/libntp/run-refidsmear.c
index 30651f3..465690f 100644
--- a/contrib/ntp/tests/libntp/run-refidsmear.c
+++ b/contrib/ntp/tests/libntp/run-refidsmear.c
@@ -22,31 +22,35 @@
#include "unity.h"
#include <setjmp.h>
#include <stdio.h>
+#include "config.h"
+#include <ntp.h>
+#include <ntp_fp.h>
+#include <refidsmear.h>
+#include <stdio.h>
//=======External Functions This Runner Calls=====
extern void setUp(void);
extern void tearDown(void);
-void resetTest(void);
extern void test_refidsmear(void);
//=======Test Reset Option=====
-void resetTest()
+void resetTest(void);
+void resetTest(void)
{
tearDown();
setUp();
}
-char *progname;
+char const *progname;
//=======MAIN=====
int main(int argc, char *argv[])
{
progname = argv[0];
- Unity.TestFile = "refidsmear.c";
UnityBegin("refidsmear.c");
- RUN_TEST(test_refidsmear, 100);
+ RUN_TEST(test_refidsmear, 36);
return (UnityEnd());
}
diff --git a/contrib/ntp/tests/libntp/run-refnumtoa.c b/contrib/ntp/tests/libntp/run-refnumtoa.c
index 60981ca..bb9fb60 100644
--- a/contrib/ntp/tests/libntp/run-refnumtoa.c
+++ b/contrib/ntp/tests/libntp/run-refnumtoa.c
@@ -22,32 +22,35 @@
#include "unity.h"
#include <setjmp.h>
#include <stdio.h>
+#include "config.h"
+#include "ntp_net.h"
+#include "ntp_refclock.h"
//=======External Functions This Runner Calls=====
extern void setUp(void);
extern void tearDown(void);
-extern void test_LocalClock();
-extern void test_UnknownId();
+extern void test_LocalClock(void);
+extern void test_UnknownId(void);
//=======Test Reset Option=====
-void resetTest()
+void resetTest(void);
+void resetTest(void)
{
tearDown();
setUp();
}
-char *progname;
+char const *progname;
//=======MAIN=====
int main(int argc, char *argv[])
{
progname = argv[0];
- Unity.TestFile = "refnumtoa.c";
UnityBegin("refnumtoa.c");
- RUN_TEST(test_LocalClock, 13);
- RUN_TEST(test_UnknownId, 41);
+ RUN_TEST(test_LocalClock, 12);
+ RUN_TEST(test_UnknownId, 13);
return (UnityEnd());
}
diff --git a/contrib/ntp/tests/libntp/run-sfptostr.c b/contrib/ntp/tests/libntp/run-sfptostr.c
index 1c28fe8..1ebe43c 100644
--- a/contrib/ntp/tests/libntp/run-sfptostr.c
+++ b/contrib/ntp/tests/libntp/run-sfptostr.c
@@ -22,11 +22,12 @@
#include "unity.h"
#include <setjmp.h>
#include <stdio.h>
+#include "config.h"
+#include "ntp_fp.h"
//=======External Functions This Runner Calls=====
extern void setUp(void);
extern void tearDown(void);
-void resetTest(void);
extern void test_PositiveInteger(void);
extern void test_NegativeInteger(void);
extern void test_PositiveIntegerPositiveFraction(void);
@@ -38,29 +39,29 @@ extern void test_SingleDecimalRounding(void);
//=======Test Reset Option=====
-void resetTest()
+void resetTest(void);
+void resetTest(void)
{
tearDown();
setUp();
}
-char *progname;
+char const *progname;
//=======MAIN=====
int main(int argc, char *argv[])
{
progname = argv[0];
- Unity.TestFile = "sfptostr.c";
UnityBegin("sfptostr.c");
RUN_TEST(test_PositiveInteger, 11);
- RUN_TEST(test_NegativeInteger, 19);
- RUN_TEST(test_PositiveIntegerPositiveFraction, 27);
- RUN_TEST(test_NegativeIntegerNegativeFraction, 35);
- RUN_TEST(test_PositiveIntegerNegativeFraction, 43);
- RUN_TEST(test_NegativeIntegerPositiveFraction, 51);
- RUN_TEST(test_SingleDecimalInteger, 59);
- RUN_TEST(test_SingleDecimalRounding, 67);
+ RUN_TEST(test_NegativeInteger, 12);
+ RUN_TEST(test_PositiveIntegerPositiveFraction, 13);
+ RUN_TEST(test_NegativeIntegerNegativeFraction, 14);
+ RUN_TEST(test_PositiveIntegerNegativeFraction, 15);
+ RUN_TEST(test_NegativeIntegerPositiveFraction, 16);
+ RUN_TEST(test_SingleDecimalInteger, 17);
+ RUN_TEST(test_SingleDecimalRounding, 18);
return (UnityEnd());
}
diff --git a/contrib/ntp/tests/libntp/run-socktoa.c b/contrib/ntp/tests/libntp/run-socktoa.c
index a6fa778..a5066e3 100644
--- a/contrib/ntp/tests/libntp/run-socktoa.c
+++ b/contrib/ntp/tests/libntp/run-socktoa.c
@@ -22,40 +22,44 @@
#include "unity.h"
#include <setjmp.h>
#include <stdio.h>
+#include "config.h"
+#include "ntp_stdlib.h"
+#include "ntp_calendar.h"
+#include "sockaddrtest.h"
//=======External Functions This Runner Calls=====
extern void setUp(void);
extern void tearDown(void);
extern void test_IPv4AddressWithPort(void);
extern void test_IPv6AddressWithPort(void);
+extern void test_IgnoreIPv6Fields(void);
extern void test_ScopedIPv6AddressWithPort(void);
extern void test_HashEqual(void);
extern void test_HashNotEqual(void);
-extern void test_IgnoreIPv6Fields(void);
//=======Test Reset Option=====
-void resetTest()
+void resetTest(void);
+void resetTest(void)
{
tearDown();
setUp();
}
-char *progname;
+char const *progname;
//=======MAIN=====
int main(int argc, char *argv[])
{
progname = argv[0];
- Unity.TestFile = "socktoa.c";
UnityBegin("socktoa.c");
- RUN_TEST(test_IPv4AddressWithPort, 11);
- RUN_TEST(test_IPv6AddressWithPort, 18);
- RUN_TEST(test_ScopedIPv6AddressWithPort, 42);
- RUN_TEST(test_HashEqual, 67);
- RUN_TEST(test_HashNotEqual, 75);
- RUN_TEST(test_IgnoreIPv6Fields, 88);
+ RUN_TEST(test_IPv4AddressWithPort, 10);
+ RUN_TEST(test_IPv6AddressWithPort, 12);
+ RUN_TEST(test_IgnoreIPv6Fields, 13);
+ RUN_TEST(test_ScopedIPv6AddressWithPort, 15);
+ RUN_TEST(test_HashEqual, 16);
+ RUN_TEST(test_HashNotEqual, 17);
return (UnityEnd());
}
diff --git a/contrib/ntp/tests/libntp/run-ssl_init.c b/contrib/ntp/tests/libntp/run-ssl_init.c
index 452a60a..cef9a36 100644
--- a/contrib/ntp/tests/libntp/run-ssl_init.c
+++ b/contrib/ntp/tests/libntp/run-ssl_init.c
@@ -22,38 +22,40 @@
#include "unity.h"
#include <setjmp.h>
#include <stdio.h>
+#include "config.h"
+#include "ntp.h"
//=======External Functions This Runner Calls=====
extern void setUp(void);
extern void tearDown(void);
-extern void test_MD5KeyTypeWithoutDigestLength();
-extern void test_MD5KeyTypeWithDigestLength();
-extern void test_SHA1KeyTypeWithDigestLength();
-extern void test_MD5KeyName();
-extern void test_SHA1KeyName();
+extern void test_MD5KeyTypeWithoutDigestLength(void);
+extern void test_MD5KeyTypeWithDigestLength(void);
+extern void test_SHA1KeyTypeWithDigestLength(void);
+extern void test_MD5KeyName(void);
+extern void test_SHA1KeyName(void);
//=======Test Reset Option=====
-void resetTest()
+void resetTest(void);
+void resetTest(void)
{
tearDown();
setUp();
}
-char *progname;
+char const *progname;
//=======MAIN=====
int main(int argc, char *argv[])
{
progname = argv[0];
- Unity.TestFile = "ssl_init.c";
UnityBegin("ssl_init.c");
- RUN_TEST(test_MD5KeyTypeWithoutDigestLength, 19);
- RUN_TEST(test_MD5KeyTypeWithDigestLength, 23);
- RUN_TEST(test_SHA1KeyTypeWithDigestLength, 32);
- RUN_TEST(test_MD5KeyName, 47);
- RUN_TEST(test_SHA1KeyName, 51);
+ RUN_TEST(test_MD5KeyTypeWithoutDigestLength, 17);
+ RUN_TEST(test_MD5KeyTypeWithDigestLength, 18);
+ RUN_TEST(test_SHA1KeyTypeWithDigestLength, 19);
+ RUN_TEST(test_MD5KeyName, 20);
+ RUN_TEST(test_SHA1KeyName, 21);
return (UnityEnd());
}
diff --git a/contrib/ntp/tests/libntp/run-statestr.c b/contrib/ntp/tests/libntp/run-statestr.c
index 6083eee..9cfe0bc 100644
--- a/contrib/ntp/tests/libntp/run-statestr.c
+++ b/contrib/ntp/tests/libntp/run-statestr.c
@@ -22,6 +22,10 @@
#include "unity.h"
#include <setjmp.h>
#include <stdio.h>
+#include "config.h"
+#include "ntp_stdlib.h"
+#include "ntp.h"
+#include "ntp_control.h"
//=======External Functions This Runner Calls=====
extern void setUp(void);
@@ -33,25 +37,25 @@ extern void test_ClockCodeUnknown(void);
//=======Test Reset Option=====
-void resetTest()
+void resetTest(void);
+void resetTest(void)
{
tearDown();
setUp();
}
-char *progname;
+char const *progname;
//=======MAIN=====
int main(int argc, char *argv[])
{
progname = argv[0];
- Unity.TestFile = "statestr.c";
UnityBegin("statestr.c");
- RUN_TEST(test_PeerRestart, 20);
- RUN_TEST(test_SysUnspecified, 24);
- RUN_TEST(test_ClockCodeExists, 29);
- RUN_TEST(test_ClockCodeUnknown, 33);
+ RUN_TEST(test_PeerRestart, 9);
+ RUN_TEST(test_SysUnspecified, 10);
+ RUN_TEST(test_ClockCodeExists, 11);
+ RUN_TEST(test_ClockCodeUnknown, 12);
return (UnityEnd());
}
diff --git a/contrib/ntp/tests/libntp/run-strtolfp.c b/contrib/ntp/tests/libntp/run-strtolfp.c
index 0a2912b..7472319 100644
--- a/contrib/ntp/tests/libntp/run-strtolfp.c
+++ b/contrib/ntp/tests/libntp/run-strtolfp.c
@@ -22,6 +22,10 @@
#include "unity.h"
#include <setjmp.h>
#include <stdio.h>
+#include "config.h"
+#include "ntp_stdlib.h"
+#include "ntp_calendar.h"
+#include "lfptest.h"
//=======External Functions This Runner Calls=====
extern void setUp(void);
@@ -36,28 +40,28 @@ extern void test_InvalidChars(void);
//=======Test Reset Option=====
-void resetTest()
+void resetTest(void);
+void resetTest(void)
{
tearDown();
setUp();
}
-char *progname;
+char const *progname;
//=======MAIN=====
int main(int argc, char *argv[])
{
progname = argv[0];
- Unity.TestFile = "strtolfp.c";
UnityBegin("strtolfp.c");
RUN_TEST(test_PositiveInteger, 11);
- RUN_TEST(test_NegativeInteger, 25);
- RUN_TEST(test_PositiveFraction, 42);
- RUN_TEST(test_NegativeFraction, 56);
- RUN_TEST(test_PositiveMsFraction, 73);
- RUN_TEST(test_NegativeMsFraction, 89);
- RUN_TEST(test_InvalidChars, 107);
+ RUN_TEST(test_NegativeInteger, 12);
+ RUN_TEST(test_PositiveFraction, 13);
+ RUN_TEST(test_NegativeFraction, 14);
+ RUN_TEST(test_PositiveMsFraction, 15);
+ RUN_TEST(test_NegativeMsFraction, 16);
+ RUN_TEST(test_InvalidChars, 17);
return (UnityEnd());
}
diff --git a/contrib/ntp/tests/libntp/run-timespecops.c b/contrib/ntp/tests/libntp/run-timespecops.c
index b56e756..6c26521 100644
--- a/contrib/ntp/tests/libntp/run-timespecops.c
+++ b/contrib/ntp/tests/libntp/run-timespecops.c
@@ -22,84 +22,90 @@
#include "unity.h"
#include <setjmp.h>
#include <stdio.h>
+#include "config.h"
+#include "ntp_types.h"
+#include "ntp_fp.h"
+#include "timespecops.h"
+#include <math.h>
+#include <string.h>
//=======External Functions This Runner Calls=====
extern void setUp(void);
extern void tearDown(void);
-extern void test_Helpers1();
-extern void test_Normalise();
-extern void test_SignNoFrac();
-extern void test_SignWithFrac();
-extern void test_CmpFracEQ();
-extern void test_CmpFracGT();
-extern void test_CmpFracLT();
-extern void test_AddFullNorm();
-extern void test_AddFullOflow1();
-extern void test_AddNsecNorm();
-extern void test_AddNsecOflow1();
-extern void test_SubFullNorm();
-extern void test_SubFullOflow();
-extern void test_SubNsecNorm();
-extern void test_SubNsecOflow();
-extern void test_Neg();
-extern void test_AbsNoFrac();
-extern void test_AbsWithFrac();
-extern void test_Helpers2();
-extern void test_ToLFPbittest();
-extern void test_ToLFPrelPos();
-extern void test_ToLFPrelNeg();
-extern void test_ToLFPabs();
-extern void test_FromLFPbittest();
-extern void test_FromLFPrelPos();
-extern void test_FromLFPrelNeg();
-extern void test_LFProundtrip();
-extern void test_ToString();
+extern void test_Helpers1(void);
+extern void test_Normalise(void);
+extern void test_SignNoFrac(void);
+extern void test_SignWithFrac(void);
+extern void test_CmpFracEQ(void);
+extern void test_CmpFracGT(void);
+extern void test_CmpFracLT(void);
+extern void test_AddFullNorm(void);
+extern void test_AddFullOflow1(void);
+extern void test_AddNsecNorm(void);
+extern void test_AddNsecOflow1(void);
+extern void test_SubFullNorm(void);
+extern void test_SubFullOflow(void);
+extern void test_SubNsecNorm(void);
+extern void test_SubNsecOflow(void);
+extern void test_Neg(void);
+extern void test_AbsNoFrac(void);
+extern void test_AbsWithFrac(void);
+extern void test_Helpers2(void);
+extern void test_ToLFPbittest(void);
+extern void test_ToLFPrelPos(void);
+extern void test_ToLFPrelNeg(void);
+extern void test_ToLFPabs(void);
+extern void test_FromLFPbittest(void);
+extern void test_FromLFPrelPos(void);
+extern void test_FromLFPrelNeg(void);
+extern void test_LFProundtrip(void);
+extern void test_ToString(void);
//=======Test Reset Option=====
-void resetTest()
+void resetTest(void);
+void resetTest(void)
{
tearDown();
setUp();
}
-char *progname;
+char const *progname;
//=======MAIN=====
int main(int argc, char *argv[])
{
progname = argv[0];
- Unity.TestFile = "timespecops.c";
UnityBegin("timespecops.c");
- RUN_TEST(test_Helpers1, 155);
- RUN_TEST(test_Normalise, 175);
- RUN_TEST(test_SignNoFrac, 189);
- RUN_TEST(test_SignWithFrac, 201);
- RUN_TEST(test_CmpFracEQ, 215);
- RUN_TEST(test_CmpFracGT, 228);
- RUN_TEST(test_CmpFracLT, 241);
- RUN_TEST(test_AddFullNorm, 258);
- RUN_TEST(test_AddFullOflow1, 272);
- RUN_TEST(test_AddNsecNorm, 286);
- RUN_TEST(test_AddNsecOflow1, 298);
- RUN_TEST(test_SubFullNorm, 314);
- RUN_TEST(test_SubFullOflow, 328);
- RUN_TEST(test_SubNsecNorm, 342);
- RUN_TEST(test_SubNsecOflow, 354);
- RUN_TEST(test_Neg, 370);
- RUN_TEST(test_AbsNoFrac, 387);
- RUN_TEST(test_AbsWithFrac, 398);
- RUN_TEST(test_Helpers2, 413);
- RUN_TEST(test_ToLFPbittest, 445);
- RUN_TEST(test_ToLFPrelPos, 458);
- RUN_TEST(test_ToLFPrelNeg, 470);
- RUN_TEST(test_ToLFPabs, 482);
- RUN_TEST(test_FromLFPbittest, 497);
- RUN_TEST(test_FromLFPrelPos, 516);
- RUN_TEST(test_FromLFPrelNeg, 529);
- RUN_TEST(test_LFProundtrip, 544);
- RUN_TEST(test_ToString, 563);
+ RUN_TEST(test_Helpers1, 36);
+ RUN_TEST(test_Normalise, 37);
+ RUN_TEST(test_SignNoFrac, 38);
+ RUN_TEST(test_SignWithFrac, 39);
+ RUN_TEST(test_CmpFracEQ, 40);
+ RUN_TEST(test_CmpFracGT, 41);
+ RUN_TEST(test_CmpFracLT, 42);
+ RUN_TEST(test_AddFullNorm, 43);
+ RUN_TEST(test_AddFullOflow1, 44);
+ RUN_TEST(test_AddNsecNorm, 45);
+ RUN_TEST(test_AddNsecOflow1, 46);
+ RUN_TEST(test_SubFullNorm, 47);
+ RUN_TEST(test_SubFullOflow, 48);
+ RUN_TEST(test_SubNsecNorm, 49);
+ RUN_TEST(test_SubNsecOflow, 50);
+ RUN_TEST(test_Neg, 51);
+ RUN_TEST(test_AbsNoFrac, 52);
+ RUN_TEST(test_AbsWithFrac, 53);
+ RUN_TEST(test_Helpers2, 54);
+ RUN_TEST(test_ToLFPbittest, 55);
+ RUN_TEST(test_ToLFPrelPos, 56);
+ RUN_TEST(test_ToLFPrelNeg, 57);
+ RUN_TEST(test_ToLFPabs, 58);
+ RUN_TEST(test_FromLFPbittest, 59);
+ RUN_TEST(test_FromLFPrelPos, 60);
+ RUN_TEST(test_FromLFPrelNeg, 61);
+ RUN_TEST(test_LFProundtrip, 62);
+ RUN_TEST(test_ToString, 63);
return (UnityEnd());
}
diff --git a/contrib/ntp/tests/libntp/run-timevalops.c b/contrib/ntp/tests/libntp/run-timevalops.c
index 013aae1..4a9351c 100644
--- a/contrib/ntp/tests/libntp/run-timevalops.c
+++ b/contrib/ntp/tests/libntp/run-timevalops.c
@@ -22,84 +22,89 @@
#include "unity.h"
#include <setjmp.h>
#include <stdio.h>
+#include "config.h"
+#include "ntp_types.h"
+#include "ntp_fp.h"
+#include "timevalops.h"
+#include <math.h>
//=======External Functions This Runner Calls=====
extern void setUp(void);
extern void tearDown(void);
-extern void test_Helpers1();
-extern void test_Normalise();
-extern void test_SignNoFrac();
-extern void test_SignWithFrac();
-extern void test_CmpFracEQ();
-extern void test_CmpFracGT();
-extern void test_CmpFracLT();
-extern void test_AddFullNorm();
-extern void test_AddFullOflow1();
-extern void test_AddUsecNorm();
-extern void test_AddUsecOflow1();
-extern void test_SubFullNorm();
-extern void test_SubFullOflow();
-extern void test_SubUsecNorm();
-extern void test_SubUsecOflow();
-extern void test_Neg();
-extern void test_AbsNoFrac();
-extern void test_AbsWithFrac();
-extern void test_Helpers2();
-extern void test_ToLFPbittest();
-extern void test_ToLFPrelPos();
-extern void test_ToLFPrelNeg();
-extern void test_ToLFPabs();
-extern void test_FromLFPbittest();
-extern void test_FromLFPrelPos();
-extern void test_FromLFPrelNeg();
-extern void test_LFProundtrip();
-extern void test_ToString();
+extern void test_Helpers1(void);
+extern void test_Normalise(void);
+extern void test_SignNoFrac(void);
+extern void test_SignWithFrac(void);
+extern void test_CmpFracEQ(void);
+extern void test_CmpFracGT(void);
+extern void test_CmpFracLT(void);
+extern void test_AddFullNorm(void);
+extern void test_AddFullOflow1(void);
+extern void test_AddUsecNorm(void);
+extern void test_AddUsecOflow1(void);
+extern void test_SubFullNorm(void);
+extern void test_SubFullOflow(void);
+extern void test_SubUsecNorm(void);
+extern void test_SubUsecOflow(void);
+extern void test_Neg(void);
+extern void test_AbsNoFrac(void);
+extern void test_AbsWithFrac(void);
+extern void test_Helpers2(void);
+extern void test_ToLFPbittest(void);
+extern void test_ToLFPrelPos(void);
+extern void test_ToLFPrelNeg(void);
+extern void test_ToLFPabs(void);
+extern void test_FromLFPbittest(void);
+extern void test_FromLFPrelPos(void);
+extern void test_FromLFPrelNeg(void);
+extern void test_LFProundtrip(void);
+extern void test_ToString(void);
//=======Test Reset Option=====
-void resetTest()
+void resetTest(void);
+void resetTest(void)
{
tearDown();
setUp();
}
-char *progname;
+char const *progname;
//=======MAIN=====
int main(int argc, char *argv[])
{
progname = argv[0];
- Unity.TestFile = "timevalops.c";
UnityBegin("timevalops.c");
- RUN_TEST(test_Helpers1, 153);
- RUN_TEST(test_Normalise, 173);
- RUN_TEST(test_SignNoFrac, 187);
- RUN_TEST(test_SignWithFrac, 199);
- RUN_TEST(test_CmpFracEQ, 214);
- RUN_TEST(test_CmpFracGT, 228);
- RUN_TEST(test_CmpFracLT, 242);
- RUN_TEST(test_AddFullNorm, 260);
- RUN_TEST(test_AddFullOflow1, 274);
- RUN_TEST(test_AddUsecNorm, 288);
- RUN_TEST(test_AddUsecOflow1, 300);
- RUN_TEST(test_SubFullNorm, 316);
- RUN_TEST(test_SubFullOflow, 330);
- RUN_TEST(test_SubUsecNorm, 344);
- RUN_TEST(test_SubUsecOflow, 356);
- RUN_TEST(test_Neg, 372);
- RUN_TEST(test_AbsNoFrac, 389);
- RUN_TEST(test_AbsWithFrac, 400);
- RUN_TEST(test_Helpers2, 416);
- RUN_TEST(test_ToLFPbittest, 449);
- RUN_TEST(test_ToLFPrelPos, 464);
- RUN_TEST(test_ToLFPrelNeg, 478);
- RUN_TEST(test_ToLFPabs, 491);
- RUN_TEST(test_FromLFPbittest, 509);
- RUN_TEST(test_FromLFPrelPos, 527);
- RUN_TEST(test_FromLFPrelNeg, 540);
- RUN_TEST(test_LFProundtrip, 554);
- RUN_TEST(test_ToString, 573);
+ RUN_TEST(test_Helpers1, 38);
+ RUN_TEST(test_Normalise, 39);
+ RUN_TEST(test_SignNoFrac, 40);
+ RUN_TEST(test_SignWithFrac, 41);
+ RUN_TEST(test_CmpFracEQ, 42);
+ RUN_TEST(test_CmpFracGT, 43);
+ RUN_TEST(test_CmpFracLT, 44);
+ RUN_TEST(test_AddFullNorm, 45);
+ RUN_TEST(test_AddFullOflow1, 46);
+ RUN_TEST(test_AddUsecNorm, 47);
+ RUN_TEST(test_AddUsecOflow1, 48);
+ RUN_TEST(test_SubFullNorm, 49);
+ RUN_TEST(test_SubFullOflow, 50);
+ RUN_TEST(test_SubUsecNorm, 51);
+ RUN_TEST(test_SubUsecOflow, 52);
+ RUN_TEST(test_Neg, 53);
+ RUN_TEST(test_AbsNoFrac, 54);
+ RUN_TEST(test_AbsWithFrac, 55);
+ RUN_TEST(test_Helpers2, 56);
+ RUN_TEST(test_ToLFPbittest, 57);
+ RUN_TEST(test_ToLFPrelPos, 58);
+ RUN_TEST(test_ToLFPrelNeg, 59);
+ RUN_TEST(test_ToLFPabs, 60);
+ RUN_TEST(test_FromLFPbittest, 61);
+ RUN_TEST(test_FromLFPrelPos, 62);
+ RUN_TEST(test_FromLFPrelNeg, 63);
+ RUN_TEST(test_LFProundtrip, 64);
+ RUN_TEST(test_ToString, 65);
return (UnityEnd());
}
diff --git a/contrib/ntp/tests/libntp/run-tstotv.c b/contrib/ntp/tests/libntp/run-tstotv.c
index cf7dd17..c060f77 100644
--- a/contrib/ntp/tests/libntp/run-tstotv.c
+++ b/contrib/ntp/tests/libntp/run-tstotv.c
@@ -22,6 +22,9 @@
#include "unity.h"
#include <setjmp.h>
#include <stdio.h>
+#include "config.h"
+#include "ntp_fp.h"
+#include "timevalops.h"
//=======External Functions This Runner Calls=====
extern void setUp(void);
@@ -32,24 +35,24 @@ extern void test_MicrosecondsRounding(void);
//=======Test Reset Option=====
-void resetTest()
+void resetTest(void);
+void resetTest(void)
{
tearDown();
setUp();
}
-char *progname;
+char const *progname;
//=======MAIN=====
int main(int argc, char *argv[])
{
progname = argv[0];
- Unity.TestFile = "tstotv.c";
UnityBegin("tstotv.c");
- RUN_TEST(test_Seconds, 9);
- RUN_TEST(test_MicrosecondsExact, 21);
- RUN_TEST(test_MicrosecondsRounding, 35);
+ RUN_TEST(test_Seconds, 8);
+ RUN_TEST(test_MicrosecondsExact, 9);
+ RUN_TEST(test_MicrosecondsRounding, 10);
return (UnityEnd());
}
diff --git a/contrib/ntp/tests/libntp/run-tvtots.c b/contrib/ntp/tests/libntp/run-tvtots.c
index 468aae5..3ed734e 100644
--- a/contrib/ntp/tests/libntp/run-tvtots.c
+++ b/contrib/ntp/tests/libntp/run-tvtots.c
@@ -22,6 +22,10 @@
#include "unity.h"
#include <setjmp.h>
#include <stdio.h>
+#include "config.h"
+#include "lfptest.h"
+#include "timevalops.h"
+#include <math.h>
//=======External Functions This Runner Calls=====
extern void setUp(void);
@@ -32,24 +36,24 @@ extern void test_MicrosecondsExact(void);
//=======Test Reset Option=====
-void resetTest()
+void resetTest(void);
+void resetTest(void)
{
tearDown();
setUp();
}
-char *progname;
+char const *progname;
//=======MAIN=====
int main(int argc, char *argv[])
{
progname = argv[0];
- Unity.TestFile = "tvtots.c";
UnityBegin("tvtots.c");
RUN_TEST(test_Seconds, 10);
- RUN_TEST(test_MicrosecondsRounded, 21);
- RUN_TEST(test_MicrosecondsExact, 36);
+ RUN_TEST(test_MicrosecondsRounded, 11);
+ RUN_TEST(test_MicrosecondsExact, 12);
return (UnityEnd());
}
diff --git a/contrib/ntp/tests/libntp/run-uglydate.c b/contrib/ntp/tests/libntp/run-uglydate.c
index 4e67713..6ec50f6 100644
--- a/contrib/ntp/tests/libntp/run-uglydate.c
+++ b/contrib/ntp/tests/libntp/run-uglydate.c
@@ -22,6 +22,9 @@
#include "unity.h"
#include <setjmp.h>
#include <stdio.h>
+#include "config.h"
+#include "ntp_stdlib.h"
+#include "ntp_fp.h"
//=======External Functions This Runner Calls=====
extern void setUp(void);
@@ -30,22 +33,22 @@ extern void test_ConstantDateTime(void);
//=======Test Reset Option=====
-void resetTest()
+void resetTest(void);
+void resetTest(void)
{
tearDown();
setUp();
}
-char *progname;
+char const *progname;
//=======MAIN=====
int main(int argc, char *argv[])
{
progname = argv[0];
- Unity.TestFile = "uglydate.c";
UnityBegin("uglydate.c");
- RUN_TEST(test_ConstantDateTime, 11);
+ RUN_TEST(test_ConstantDateTime, 8);
return (UnityEnd());
}
diff --git a/contrib/ntp/tests/libntp/run-vi64ops.c b/contrib/ntp/tests/libntp/run-vi64ops.c
index 7e8c2cb..599a4b7 100644
--- a/contrib/ntp/tests/libntp/run-vi64ops.c
+++ b/contrib/ntp/tests/libntp/run-vi64ops.c
@@ -22,35 +22,37 @@
#include "unity.h"
#include <setjmp.h>
#include <stdio.h>
+#include "config.h"
+#include "ntp_stdlib.h"
+#include "vint64ops.h"
//=======External Functions This Runner Calls=====
extern void setUp(void);
extern void tearDown(void);
-void resetTest(void);
-extern void test_ParseVUI64_pos();
-extern void test_ParseVUI64_neg();
-extern void test_ParseVUI64_case();
+extern void test_ParseVUI64_pos(void);
+extern void test_ParseVUI64_neg(void);
+extern void test_ParseVUI64_case(void);
//=======Test Reset Option=====
-void resetTest()
+void resetTest(void);
+void resetTest(void)
{
tearDown();
setUp();
}
-char *progname;
+char const *progname;
//=======MAIN=====
int main(int argc, char *argv[])
{
progname = argv[0];
- Unity.TestFile = "vi64ops.c";
UnityBegin("vi64ops.c");
- RUN_TEST(test_ParseVUI64_pos, 33);
- RUN_TEST(test_ParseVUI64_neg, 47);
- RUN_TEST(test_ParseVUI64_case, 60);
+ RUN_TEST(test_ParseVUI64_pos, 10);
+ RUN_TEST(test_ParseVUI64_neg, 11);
+ RUN_TEST(test_ParseVUI64_case, 12);
return (UnityEnd());
}
diff --git a/contrib/ntp/tests/libntp/run-ymd2yd.c b/contrib/ntp/tests/libntp/run-ymd2yd.c
index faf2fcb..4669ce9 100644
--- a/contrib/ntp/tests/libntp/run-ymd2yd.c
+++ b/contrib/ntp/tests/libntp/run-ymd2yd.c
@@ -22,6 +22,8 @@
#include "unity.h"
#include <setjmp.h>
#include <stdio.h>
+#include "config.h"
+#include "ntp_stdlib.h"
//=======External Functions This Runner Calls=====
extern void setUp(void);
@@ -33,25 +35,25 @@ extern void test_LeapYearDecember(void);
//=======Test Reset Option=====
-void resetTest()
+void resetTest(void);
+void resetTest(void)
{
tearDown();
setUp();
}
-char *progname;
+char const *progname;
//=======MAIN=====
int main(int argc, char *argv[])
{
progname = argv[0];
- Unity.TestFile = "ymd2yd.c";
UnityBegin("ymd2yd.c");
- RUN_TEST(test_NonLeapYearFebruary, 17);
- RUN_TEST(test_NonLeapYearJune, 21);
- RUN_TEST(test_LeapYearFebruary, 26);
- RUN_TEST(test_LeapYearDecember, 30);
+ RUN_TEST(test_NonLeapYearFebruary, 7);
+ RUN_TEST(test_NonLeapYearJune, 8);
+ RUN_TEST(test_LeapYearFebruary, 9);
+ RUN_TEST(test_LeapYearDecember, 10);
return (UnityEnd());
}
diff --git a/contrib/ntp/tests/libntp/sfptostr.c b/contrib/ntp/tests/libntp/sfptostr.c
index fd56114..b115ae1 100644
--- a/contrib/ntp/tests/libntp/sfptostr.c
+++ b/contrib/ntp/tests/libntp/sfptostr.c
@@ -8,6 +8,16 @@
#define SFP_MAX_PRECISION 6
+void test_PositiveInteger(void);
+void test_NegativeInteger(void);
+void test_PositiveIntegerPositiveFraction(void);
+void test_NegativeIntegerNegativeFraction(void);
+void test_PositiveIntegerNegativeFraction(void);
+void test_NegativeIntegerPositiveFraction(void);
+void test_SingleDecimalInteger(void);
+void test_SingleDecimalRounding(void);
+
+
void test_PositiveInteger(void)
{
s_fp test = 300 << 16; // exact 300.000000
diff --git a/contrib/ntp/tests/libntp/sockaddrtest.c b/contrib/ntp/tests/libntp/sockaddrtest.c
new file mode 100644
index 0000000..bd893bd
--- /dev/null
+++ b/contrib/ntp/tests/libntp/sockaddrtest.c
@@ -0,0 +1,51 @@
+
+#include "config.h"
+#include "ntp.h"
+#include "ntp_stdlib.h"
+#include "sockaddrtest.h"
+
+sockaddr_u
+CreateSockaddr4(const char* address, unsigned int port) {
+ sockaddr_u s;
+ s.sa4.sin_family = AF_INET;
+ s.sa4.sin_addr.s_addr = inet_addr(address);
+ SET_PORT(&s, port);
+
+ return s;
+}
+
+
+int
+IsEqual(const sockaddr_u expected, const sockaddr_u actual) {
+ struct in_addr in;
+ struct in6_addr in6;
+
+ if (expected.sa.sa_family != actual.sa.sa_family) {
+ printf("Expected sa_family: %d but got: %d", expected.sa.sa_family, actual.sa.sa_family);
+ return FALSE;
+ }
+
+ if (actual.sa.sa_family == AF_INET) { // IPv4
+ if (expected.sa4.sin_port == actual.sa4.sin_port &&
+ memcmp(&expected.sa4.sin_addr, &actual.sa4.sin_addr,
+ sizeof( in )) == 0) {
+ return TRUE;
+ } else {
+ printf("IPv4 comparision failed, expected: %s(%s) but was: %s(%s)",inet_ntoa(expected.sa4.sin_addr), socktoa(&expected), inet_ntoa(actual.sa4.sin_addr),socktoa(&actual));
+ return FALSE;
+ }
+ } else if (actual.sa.sa_family == AF_INET6) { //IPv6
+ if (expected.sa6.sin6_port == actual.sa6.sin6_port &&
+ memcmp(&expected.sa6.sin6_addr, &actual.sa6.sin6_addr,
+ sizeof(in6)) == 0) {
+ return TRUE;
+ } else {
+ printf("IPv6 comparision failed");
+ return FALSE;
+ }
+ } else { // Unknown family
+ printf("Unknown sa_family: %d",actual.sa.sa_family);
+ return FALSE;
+ }
+}
+
diff --git a/contrib/ntp/tests/libntp/sockaddrtest.h b/contrib/ntp/tests/libntp/sockaddrtest.h
index f9a9fde..8450fb6 100644
--- a/contrib/ntp/tests/libntp/sockaddrtest.h
+++ b/contrib/ntp/tests/libntp/sockaddrtest.h
@@ -1,57 +1,13 @@
#ifndef TESTS_SOCKADDRTEST_H
#define TESTS_SOCKADDRTEST_H
+#include "config.h"
#include "ntp.h"
#include "ntp_stdlib.h"
-sockaddr_u CreateSockaddr4(const char* address, unsigned int port) {
- sockaddr_u s;
- s.sa4.sin_family = AF_INET;
- s.sa4.sin_addr.s_addr = inet_addr(address);
- SET_PORT(&s, port);
- return s;
-}
-
-int IsEqual(const sockaddr_u expected, const sockaddr_u actual) {
- struct in_addr in;
- struct in6_addr in6;
-
- if (expected.sa.sa_family != actual.sa.sa_family) {
- //<< "Expected sa_family: " << expected.sa.sa_family
- //<< " but got: " << actual.sa.sa_family;
- return FALSE;
- }
-
- if (actual.sa.sa_family == AF_INET) { // IPv4
- if (expected.sa4.sin_port == actual.sa4.sin_port &&
- memcmp(&expected.sa4.sin_addr, &actual.sa4.sin_addr,
- sizeof( in )) == 0) {
- return TRUE;
- } else {
- //<< "IPv4 comparision failed, expected: "
- //<< expected.sa4.sin_addr.s_addr
- //<< "(" << socktoa(&expected) << ") but was: "
- //<< actual.sa4.sin_addr.s_addr "(" << socktoa(&actual) << ")";
- return FALSE;
- }
- } else if (actual.sa.sa_family == AF_INET6) { //IPv6
- if (expected.sa6.sin6_port == actual.sa6.sin6_port &&
- memcmp(&expected.sa6.sin6_addr, &actual.sa6.sin6_addr,
- sizeof(in6)) == 0) {
- return TRUE;
- } else {
- printf("IPv6 comparision failed");
- return FALSE;
- }
- } else { // Unknown family
- printf("Unknown sa_family: ");// << actual.sa.sa_family;
- return FALSE;
- }
-}
+sockaddr_u CreateSockaddr4(const char* address, unsigned int port);
+int IsEqual(const sockaddr_u expected, const sockaddr_u actual);
#endif // TESTS_SOCKADDRTEST_H
-
-
-
diff --git a/contrib/ntp/tests/libntp/socktoa.c b/contrib/ntp/tests/libntp/socktoa.c
index 537df1e..6661fa5 100644
--- a/contrib/ntp/tests/libntp/socktoa.c
+++ b/contrib/ntp/tests/libntp/socktoa.c
@@ -4,18 +4,32 @@
#include "ntp_calendar.h"
#include "unity.h"
-
#include "sockaddrtest.h"
-void test_IPv4AddressWithPort(void) {
+void test_IPv4AddressWithPort(void);
+//#ifdef ISC_PLATFORM_HAVEIPV6
+void test_IPv6AddressWithPort(void);
+void test_IgnoreIPv6Fields(void);
+//#endif /* ISC_PLATFORM_HAVEIPV6 */
+void test_ScopedIPv6AddressWithPort(void);
+void test_HashEqual(void);
+void test_HashNotEqual(void);
+
+void
+test_IPv4AddressWithPort(void) {
sockaddr_u input = CreateSockaddr4("192.0.2.10", 123);
TEST_ASSERT_EQUAL_STRING("192.0.2.10", socktoa(&input));
TEST_ASSERT_EQUAL_STRING("192.0.2.10:123", sockporttoa(&input));
}
-void test_IPv6AddressWithPort(void) {
+
+void
+test_IPv6AddressWithPort(void) {
+
+#ifdef ISC_PLATFORM_WANTIPV6
+
const struct in6_addr address = {
0x20, 0x01, 0x0d, 0xb8,
0x85, 0xa3, 0x08, 0xd3,
@@ -36,10 +50,18 @@ void test_IPv6AddressWithPort(void) {
TEST_ASSERT_EQUAL_STRING(expected, socktoa(&input));
TEST_ASSERT_EQUAL_STRING(expected_port, sockporttoa(&input));
+
+#else
+ TEST_IGNORE_MESSAGE("IPV6 disabled in build, skipping.");
+
+#endif /* ISC_PLATFORM_HAVEIPV6 */
+
}
+
+void
+test_ScopedIPv6AddressWithPort(void) {
#ifdef ISC_PLATFORM_HAVESCOPEID
-void test_ScopedIPv6AddressWithPort(void) {
const struct in6_addr address = {
0xfe, 0x80, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
@@ -61,10 +83,13 @@ void test_ScopedIPv6AddressWithPort(void) {
TEST_ASSERT_EQUAL_STRING(expected, socktoa(&input));
TEST_ASSERT_EQUAL_STRING(expected_port, sockporttoa(&input));
+#else
+ TEST_IGNORE_MESSAGE("Skipping because ISC_PLATFORM does not have Scope ID");
+#endif
}
-#endif /* ISC_PLATFORM_HAVESCOPEID */
-void test_HashEqual(void) {
+void
+test_HashEqual(void) {
sockaddr_u input1 = CreateSockaddr4("192.00.2.2", 123);
sockaddr_u input2 = CreateSockaddr4("192.0.2.2", 123);
@@ -72,20 +97,22 @@ void test_HashEqual(void) {
TEST_ASSERT_EQUAL(sock_hash(&input1), sock_hash(&input2));
}
-void test_HashNotEqual(void) {
+void
+test_HashNotEqual(void) {
/* These two addresses should not generate the same hash. */
sockaddr_u input1 = CreateSockaddr4("192.0.2.1", 123);
sockaddr_u input2 = CreateSockaddr4("192.0.2.2", 123);
TEST_ASSERT_FALSE(IsEqual(input1, input2));
- //TODO : EXPECT_NE(sock_hash(&input1), sock_hash(&input2));
- //Damir's suggestion below:
TEST_ASSERT_FALSE(sock_hash(&input1) == sock_hash(&input2));
- //NOTE: sock_hash returns u_short, so you can compare it with ==
- //for complex structures you have to write an additional function like bool compare(a,b)
}
-void test_IgnoreIPv6Fields(void) {
+
+void
+test_IgnoreIPv6Fields(void) {
+
+#ifdef ISC_PLATFORM_WANTIPV6
+
const struct in6_addr address = {
0x20, 0x01, 0x0d, 0xb8,
0x85, 0xa3, 0x08, 0xd3,
@@ -106,4 +133,9 @@ void test_IgnoreIPv6Fields(void) {
SET_PORT(&input2, NTP_PORT);
TEST_ASSERT_EQUAL(sock_hash(&input1), sock_hash(&input2));
+
+#else
+ TEST_IGNORE_MESSAGE("IPV6 disabled in build, skipping.");
+#endif /* ISC_PLATFORM_HAVEIPV6 */
}
+
diff --git a/contrib/ntp/tests/libntp/ssl_init.c b/contrib/ntp/tests/libntp/ssl_init.c
index fe22414..42fe920 100644
--- a/contrib/ntp/tests/libntp/ssl_init.c
+++ b/contrib/ntp/tests/libntp/ssl_init.c
@@ -14,13 +14,21 @@
static const size_t TEST_MD5_DIGEST_LENGTH = 16;
static const size_t TEST_SHA1_DIGEST_LENGTH = 20;
+void test_MD5KeyTypeWithoutDigestLength(void);
+void test_MD5KeyTypeWithDigestLength(void);
+void test_SHA1KeyTypeWithDigestLength(void);
+void test_MD5KeyName(void);
+void test_SHA1KeyName(void);
+
// keytype_from_text()
-void test_MD5KeyTypeWithoutDigestLength() {
+void
+test_MD5KeyTypeWithoutDigestLength(void) {
TEST_ASSERT_EQUAL(KEY_TYPE_MD5, keytype_from_text("MD5", NULL));
}
-void test_MD5KeyTypeWithDigestLength() {
+void
+test_MD5KeyTypeWithDigestLength(void) {
size_t digestLength;
size_t expected = TEST_MD5_DIGEST_LENGTH;
@@ -29,7 +37,8 @@ void test_MD5KeyTypeWithDigestLength() {
}
-void test_SHA1KeyTypeWithDigestLength() {
+void
+test_SHA1KeyTypeWithDigestLength(void) {
#ifdef OPENSSL
size_t digestLength;
size_t expected = TEST_SHA1_DIGEST_LENGTH;
@@ -44,15 +53,17 @@ void test_SHA1KeyTypeWithDigestLength() {
// keytype_name()
-void test_MD5KeyName() {
+void
+test_MD5KeyName(void) {
TEST_ASSERT_EQUAL_STRING("MD5", keytype_name(KEY_TYPE_MD5));
}
-void test_SHA1KeyName() {
+
+void
+test_SHA1KeyName(void) {
#ifdef OPENSSL
TEST_ASSERT_EQUAL_STRING("SHA", keytype_name(NID_sha));
#else
TEST_IGNORE_MESSAGE("Skipping because OPENSSL isn't defined");
#endif /* OPENSSL */
}
-
diff --git a/contrib/ntp/tests/libntp/statestr.c b/contrib/ntp/tests/libntp/statestr.c
index 5f7babe..810ee6b 100644
--- a/contrib/ntp/tests/libntp/statestr.c
+++ b/contrib/ntp/tests/libntp/statestr.c
@@ -1,36 +1,37 @@
#include "config.h"
#include "ntp_stdlib.h"
-#include "ntp_calendar.h"
-#include "ntp.h" // Needed for MAX_MAC_LEN used in ntp_control.h
+#include "ntp.h" // needed for MAX_MAC_LEN used in ntp_control.h
#include "ntp_control.h"
#include "unity.h"
-void setUp(void)
-{
-}
-
-void tearDown(void)
-{
-}
-
+void test_PeerRestart(void);
+void test_SysUnspecified(void);
+void test_ClockCodeExists(void);
+void test_ClockCodeUnknown(void);
// eventstr()
-void test_PeerRestart(void) {
+void
+test_PeerRestart(void) {
TEST_ASSERT_EQUAL_STRING("restart", eventstr(PEVNT_RESTART));
}
-void test_SysUnspecified(void) {
+
+void
+test_SysUnspecified(void) {
TEST_ASSERT_EQUAL_STRING("unspecified", eventstr(EVNT_UNSPEC));
}
+
// ceventstr()
-void test_ClockCodeExists(void) {
+void
+test_ClockCodeExists(void) {
TEST_ASSERT_EQUAL_STRING("clk_unspec", ceventstr(CTL_CLK_OKAY));
}
-void test_ClockCodeUnknown(void) {
+
+void
+test_ClockCodeUnknown(void) {
TEST_ASSERT_EQUAL_STRING("clk_-1", ceventstr(-1));
}
-
diff --git a/contrib/ntp/tests/libntp/strtolfp.c b/contrib/ntp/tests/libntp/strtolfp.c
index de9f111..f40ab50 100644
--- a/contrib/ntp/tests/libntp/strtolfp.c
+++ b/contrib/ntp/tests/libntp/strtolfp.c
@@ -8,11 +8,20 @@
/* This file tests both atolfp and mstolfp */
+void test_PositiveInteger(void);
+void test_NegativeInteger(void);
+void test_PositiveFraction(void);
+void test_NegativeFraction(void);
+void test_PositiveMsFraction(void);
+void test_NegativeMsFraction(void);
+void test_InvalidChars(void);
+
+
void test_PositiveInteger(void) {
const char *str = "500";
const char *str_ms = "500000";
- l_fp expected = {500,0};
+ l_fp expected = {{500},0};
l_fp actual, actual_ms;
TEST_ASSERT_TRUE(atolfp(str, &actual));
@@ -43,7 +52,7 @@ void test_PositiveFraction(void) {
const char *str = "+500.5";
const char *str_ms = "500500.0";
- l_fp expected = {500, HALF};
+ l_fp expected = {{500}, HALF};
l_fp actual, actual_ms;
TEST_ASSERT_TRUE(atolfp(str, &actual));
@@ -74,7 +83,7 @@ void test_PositiveMsFraction(void) {
const char *str = "300.00025";
const char *str_ms = "300000.25";
- l_fp expected = {300, QUARTER_PROMILLE_APPRX};
+ l_fp expected = {{300}, QUARTER_PROMILLE_APPRX};
l_fp actual, actual_ms;
diff --git a/contrib/ntp/tests/libntp/test-libntp.c b/contrib/ntp/tests/libntp/test-libntp.c
index e489f673..4d9b840 100644
--- a/contrib/ntp/tests/libntp/test-libntp.c
+++ b/contrib/ntp/tests/libntp/test-libntp.c
@@ -5,28 +5,23 @@
#include "test-libntp.h"
-//const char *progname = "test-libntp";
-
-// current_time is needed by authkeys. Used only in to calculate lifetime.
-//u_long current_time = 4;
-
time_t nowtime = 0;
-time_t timefunc(time_t *ptr)
-{
+
+time_t
+timefunc(time_t *ptr) {
if (ptr)
*ptr = nowtime;
return nowtime;
}
-void settime(int y, int m, int d, int H, int M, int S)
-{
+
+void
+settime(int y, int m, int d, int H, int M, int S) {
time_t days = ntpcal_edate_to_eradays(y-1, m-1, d-1) + 1 - DAY_UNIX_STARTS;
time_t secs = ntpcal_etime_to_seconds(H, M, S);
nowtime = days * SECSPERDAY + secs;
}
-
-
diff --git a/contrib/ntp/tests/libntp/test-libntp.h b/contrib/ntp/tests/libntp/test-libntp.h
index eb113cd..93050b3 100644
--- a/contrib/ntp/tests/libntp/test-libntp.h
+++ b/contrib/ntp/tests/libntp/test-libntp.h
@@ -1,3 +1,8 @@
+#include "config.h"
+
+#include "ntp_stdlib.h"
+#include "ntp_calendar.h"
+
time_t timefunc(time_t *ptr);
void settime(int y, int m, int d, int H, int M, int S);
time_t nowtime;
diff --git a/contrib/ntp/tests/libntp/timespecops.c b/contrib/ntp/tests/libntp/timespecops.c
index bb2619a..86df7a1 100644
--- a/contrib/ntp/tests/libntp/timespecops.c
+++ b/contrib/ntp/tests/libntp/timespecops.c
@@ -2,55 +2,96 @@
#include "ntp_types.h"
#include "ntp_fp.h"
-
-#include <math.h>
#include "timespecops.h"
#include "unity.h"
-
+#include <math.h>
#include <string.h>
-//in unity_helper.h :
+
#define TEST_ASSERT_EQUAL_timespec(a, b) { \
TEST_ASSERT_EQUAL_MESSAGE(a.tv_sec, b.tv_sec, "Field tv_sec"); \
TEST_ASSERT_EQUAL_MESSAGE(a.tv_nsec, b.tv_nsec, "Field tv_nsec"); \
}
-//what about l_fp.l_ui ??? it's a union so it's either l_fp.l_ui or l_fp.l_i?
+
#define TEST_ASSERT_EQUAL_l_fp(a, b) { \
TEST_ASSERT_EQUAL_MESSAGE(a.l_i, b.l_i, "Field l_i"); \
TEST_ASSERT_EQUAL_UINT_MESSAGE(a.l_uf, b.l_uf, "Field l_uf"); \
}
-//timespec has time_t, long, and time_t is basically long uint, 4 or 8 bytes size, depending on 32/64bit
static u_int32 my_tick_to_tsf(u_int32 ticks);
static u_int32 my_tsf_to_tick(u_int32 tsf);
+
// that's it...
struct lfpfracdata {
long nsec;
u_int32 frac;
};
+
+void test_Helpers1(void);
+void test_Normalise(void);
+void test_SignNoFrac(void);
+void test_SignWithFrac(void);
+void test_CmpFracEQ(void);
+void test_CmpFracGT(void);
+void test_CmpFracLT(void);
+void test_AddFullNorm(void);
+void test_AddFullOflow1(void);
+void test_AddNsecNorm(void);
+void test_AddNsecOflow1(void);
+void test_SubFullNorm(void);
+void test_SubFullOflow(void);
+void test_SubNsecNorm(void);
+void test_SubNsecOflow(void);
+void test_Neg(void);
+void test_AbsNoFrac(void);
+void test_AbsWithFrac(void);
+void test_Helpers2(void);
+void test_ToLFPbittest(void);
+void test_ToLFPrelPos(void);
+void test_ToLFPrelNeg(void);
+void test_ToLFPabs(void);
+void test_FromLFPbittest(void);
+void test_FromLFPrelPos(void);
+void test_FromLFPrelNeg(void);
+void test_LFProundtrip(void);
+void test_ToString(void);
+
+typedef int bool;
+
+const bool timespec_isValid(struct timespec V);
+struct timespec timespec_init(time_t hi, long lo);
+l_fp l_fp_init(int32 i, u_int32 f);
+bool AssertFpClose(const l_fp m, const l_fp n, const l_fp limit);
+bool AssertTimespecClose(const struct timespec m, const struct timespec n, const struct timespec limit);
+
+
//******************************************MY CUSTOM FUNCTIONS*******************************
-typedef int bool; //TRUE and FALSE are already defined somewhere, so I can't do typedef enum { FALSE, TRUE } boolean;
-const bool timespec_isValid(struct timespec V)
- { return V.tv_nsec >= 0 && V.tv_nsec < 1000000000; }
-struct timespec timespec_init(time_t hi, long lo){
+const bool
+timespec_isValid(struct timespec V) {
+ return V.tv_nsec >= 0 && V.tv_nsec < 1000000000;
+}
+
+
+struct timespec
+timespec_init(time_t hi, long lo) {
struct timespec V;
V.tv_sec = hi;
V.tv_nsec = lo;
return V;
}
-//taken from lfpfunc.c -> maybe remove this from timevalops.c and lfpfunc. and put in c_timstructs.h ????!!!!!
-l_fp l_fp_init(int32 i, u_int32 f)
-{
+
+l_fp
+l_fp_init(int32 i, u_int32 f) {
l_fp temp;
temp.l_i = i;
temp.l_uf = f;
@@ -58,9 +99,9 @@ l_fp l_fp_init(int32 i, u_int32 f)
return temp;
}
-//also in timelalops.c!!!!!!
-bool AssertFpClose(const l_fp m,const l_fp n, const l_fp limit)
-{
+
+bool
+AssertFpClose(const l_fp m, const l_fp n, const l_fp limit) {
l_fp diff;
if (L_ISGEQ(&m, &n)) {
@@ -74,17 +115,14 @@ bool AssertFpClose(const l_fp m,const l_fp n, const l_fp limit)
return TRUE;
}
else {
- //<< m_expr << " which is " << l_fp_wrap(m)
- //<< "\nand\n"
- //<< n_expr << " which is " << l_fp_wrap(n)
- //<< "\nare not close; diff=" << l_fp_wrap(diff);
+ printf("m_expr which is %s \nand\nn_expr which is %s\nare not close; diff=%susec\n", lfptoa(&m, 10), lfptoa(&n, 10), lfptoa(&diff, 10));
return FALSE;
}
}
-bool AssertTimespecClose(const struct timespec m,const struct timespec n, const struct timespec limit)
-{
+bool
+AssertTimespecClose(const struct timespec m, const struct timespec n, const struct timespec limit) {
struct timespec diff;
diff = abs_tspec(sub_tspec(m, n));
@@ -92,10 +130,7 @@ bool AssertTimespecClose(const struct timespec m,const struct timespec n, const
return TRUE;
else
{
- //<< m_expr << " which is " << timespec_wrap(m)
- //<< "\nand\n"
- //<< n_expr << " which is " << timespec_wrap(n)
- //<< "\nare not close; diff=" << timespec_wrap(diff);
+ printf("m_expr which is %ld.%lu \nand\nn_expr which is %ld.%lu\nare not close; diff=%ld.%lunsec\n", m.tv_sec, m.tv_nsec, n.tv_sec, n.tv_nsec, diff.tv_sec, diff.tv_nsec);
return FALSE;
}
}
@@ -120,8 +155,8 @@ static const struct lfpfracdata fdata[] = {
};
-u_int32 my_tick_to_tsf(u_int32 ticks)
-{
+u_int32
+my_tick_to_tsf(u_int32 ticks) {
// convert nanoseconds to l_fp fractional units, using double
// precision float calculations or, if available, 64bit integer
// arithmetic. This should give the precise fraction, rounded to
@@ -135,8 +170,9 @@ u_int32 my_tick_to_tsf(u_int32 ticks)
// truncated nonsense, so don't use it out-of-bounds.
}
-u_int32 my_tsf_to_tick(u_int32 tsf)
-{
+
+u_int32
+my_tsf_to_tick(u_int32 tsf) {
// Inverse operation: converts fraction to microseconds.
#ifdef HAVE_U_INT64
return (u_int32)(( ((u_int64)(tsf)) * 1000000000 + 0x80000000) >> 32);
@@ -152,7 +188,8 @@ u_int32 my_tsf_to_tick(u_int32 tsf)
// test support stuff -- part 1
// ---------------------------------------------------------------------
-void test_Helpers1() {
+void
+test_Helpers1(void) {
struct timespec x;
for (x.tv_sec = -2; x.tv_sec < 3; x.tv_sec++) {
@@ -172,7 +209,8 @@ void test_Helpers1() {
// test normalisation
//----------------------------------------------------------------------
-void test_Normalise() {
+void
+test_Normalise(void) {
long ns;
for ( ns = -2000000000; ns <= 2000000000; ns += 10000000) {
struct timespec x = timespec_init(0, ns);
@@ -186,7 +224,8 @@ void test_Normalise() {
// test classification
//----------------------------------------------------------------------
-void test_SignNoFrac() {
+void
+test_SignNoFrac(void) {
// sign test, no fraction
int i;
for (i = -4; i <= 4; ++i) {
@@ -198,7 +237,9 @@ void test_SignNoFrac() {
}
}
-void test_SignWithFrac() {
+
+void
+test_SignWithFrac(void) {
// sign test, with fraction
int i;
for (i = -4; i <= 4; ++i) {
@@ -212,9 +253,10 @@ void test_SignWithFrac() {
//----------------------------------------------------------------------
// test compare
//----------------------------------------------------------------------
-void test_CmpFracEQ() {
+void
+test_CmpFracEQ(void) {
// fractions are equal
- int i,j;
+ int i, j;
for (i = -4; i <= 4; ++i)
for (j = -4; j <= 4; ++j) {
struct timespec a = timespec_init( i , 200);
@@ -225,9 +267,11 @@ void test_CmpFracEQ() {
}
}
-void test_CmpFracGT() {
+
+void
+test_CmpFracGT(void) {
// fraction a bigger fraction b
- int i,j;
+ int i, j;
for (i = -4; i <= 4; ++i)
for (j = -4; j <= 4; ++j) {
struct timespec a = timespec_init(i, 999999800);
@@ -238,9 +282,11 @@ void test_CmpFracGT() {
}
}
-void test_CmpFracLT() {
+
+void
+test_CmpFracLT(void) {
// fraction a less fraction b
- int i,j;
+ int i, j;
for (i = -4; i <= 4; ++i)
for (j = -4; j <= 4; ++j) {
struct timespec a = timespec_init(i, 200);
@@ -255,8 +301,9 @@ void test_CmpFracLT() {
// Test addition (sum)
//----------------------------------------------------------------------
-void test_AddFullNorm() {
- int i,j;
+void
+test_AddFullNorm(void) {
+ int i, j;
for (i = -4; i <= 4; ++i)
for (j = -4; j <= 4; ++j) {
struct timespec a = timespec_init(i, 200);
@@ -269,8 +316,10 @@ void test_AddFullNorm() {
}
}
-void test_AddFullOflow1() {
- int i,j;
+
+void
+test_AddFullOflow1(void) {
+ int i, j;
for (i = -4; i <= 4; ++i)
for (j = -4; j <= 4; ++j) {
struct timespec a = timespec_init(i, 200);
@@ -283,7 +332,9 @@ void test_AddFullOflow1() {
}
}
-void test_AddNsecNorm() {
+
+void
+test_AddNsecNorm(void) {
int i;
for (i = -4; i <= 4; ++i) {
struct timespec a = timespec_init(i, 200);
@@ -295,7 +346,9 @@ void test_AddNsecNorm() {
}
}
-void test_AddNsecOflow1() {
+
+void
+test_AddNsecOflow1(void) {
int i;
for (i = -4; i <= 4; ++i) {
struct timespec a = timespec_init(i, 200);
@@ -311,8 +364,9 @@ void test_AddNsecOflow1() {
// test subtraction (difference)
//----------------------------------------------------------------------
-void test_SubFullNorm() {
- int i,j;
+void
+test_SubFullNorm(void) {
+ int i, j;
for (i = -4; i <= 4; ++i)
for (j = -4; j <= 4; ++j) {
struct timespec a = timespec_init( i , 600);
@@ -325,13 +379,15 @@ void test_SubFullNorm() {
}
}
-void test_SubFullOflow() {
- int i,j;
+
+void
+test_SubFullOflow(void) {
+ int i, j;
for (i = -4; i <= 4; ++i)
for (j = -4; j <= 4; ++j) {
- struct timespec a = timespec_init( i , 100);
- struct timespec b = timespec_init( j , 999999900);
- struct timespec E = timespec_init(i-j-1, 200);
+ struct timespec a = timespec_init(i, 100);
+ struct timespec b = timespec_init(j, 999999900);
+ struct timespec E = timespec_init(i - j - 1, 200);
struct timespec c;
c = sub_tspec(a, b);
@@ -339,7 +395,9 @@ void test_SubFullOflow() {
}
}
-void test_SubNsecNorm() {
+
+void
+test_SubNsecNorm(void) {
int i;
for (i = -4; i <= 4; ++i) {
struct timespec a = timespec_init(i, 600);
@@ -351,7 +409,9 @@ void test_SubNsecNorm() {
}
}
-void test_SubNsecOflow() {
+
+void
+test_SubNsecOflow(void) {
int i;
for (i = -4; i <= 4; ++i) {
struct timespec a = timespec_init( i , 100);
@@ -367,7 +427,9 @@ void test_SubNsecOflow() {
// test negation
//----------------------------------------------------------------------
-void test_Neg() {
+
+void
+test_Neg(void) {
int i;
for (i = -4; i <= 4; ++i) {
struct timespec a = timespec_init(i, 100);
@@ -384,7 +446,8 @@ void test_Neg() {
// test abs value
//----------------------------------------------------------------------
-void test_AbsNoFrac() {
+void
+test_AbsNoFrac(void) {
int i;
for (i = -4; i <= 4; ++i) {
struct timespec a = timespec_init(i , 0);
@@ -395,7 +458,9 @@ void test_AbsNoFrac() {
}
}
-void test_AbsWithFrac() {
+
+void
+test_AbsWithFrac(void) {
int i;
for (i = -4; i <= 4; ++i) {
struct timespec a = timespec_init(i, 100);
@@ -410,8 +475,9 @@ void test_AbsWithFrac() {
// test support stuff -- part 2
// ---------------------------------------------------------------------
-void test_Helpers2() {
- struct timespec limit = timespec_init(0,2);
+void
+test_Helpers2(void) {
+ struct timespec limit = timespec_init(0, 2);
struct timespec x, y;
long i;
@@ -420,30 +486,27 @@ void test_Helpers2() {
for (x.tv_nsec = 1;
x.tv_nsec < 1000000000;
x.tv_nsec += 499999999) {
- for (i = -4; i < 5; i++) {
+ for (i = -4; i < 5; ++i) {
y = x;
y.tv_nsec += i;
if (i >= -2 && i <= 2){
- TEST_ASSERT_TRUE(AssertTimespecClose(x,y,limit));//ASSERT_PRED_FORMAT2(isClose, x, y);
+ TEST_ASSERT_TRUE(AssertTimespecClose(x, y, limit));
}
else
{
- TEST_ASSERT_FALSE(AssertTimespecClose(x,y,limit));//ASSERT_PRED_FORMAT2(!isClose, x, y);
+ TEST_ASSERT_FALSE(AssertTimespecClose(x, y, limit));
}
}
}
}
-// global predicate instances we're using here
-//static l_fp lfpClose = l_fp_init(0,1); //static AssertFpClose FpClose(0, 1);
-//static struct timespec limit = timespec_init(0,2); //static AssertTimespecClose TimespecClose(0, 2);
-
//----------------------------------------------------------------------
// conversion to l_fp
//----------------------------------------------------------------------
-void test_ToLFPbittest() {
- l_fp lfpClose = l_fp_init(0,1);
+void
+test_ToLFPbittest(void) {
+ l_fp lfpClose = l_fp_init(0, 1);
u_int32 i;
for (i = 0; i < 1000000000; i+=1000) {
struct timespec a = timespec_init(1, i);
@@ -451,13 +514,15 @@ void test_ToLFPbittest() {
l_fp r;
r = tspec_intv_to_lfp(a);
- TEST_ASSERT_TRUE(AssertFpClose(E,r,lfpClose)); //ASSERT_PRED_FORMAT2(FpClose, E, r);
+ TEST_ASSERT_TRUE(AssertFpClose(E, r, lfpClose));
}
}
-void test_ToLFPrelPos() {
+
+void
+test_ToLFPrelPos(void) {
int i;
- for (i = 0; i < COUNTOF(fdata); i++) {
+ for (i = 0; i < COUNTOF(fdata); ++i) {
struct timespec a = timespec_init(1, fdata[i].nsec);
l_fp E = l_fp_init(1, fdata[i].frac);
l_fp r;
@@ -467,9 +532,11 @@ void test_ToLFPrelPos() {
}
}
-void test_ToLFPrelNeg() {
+
+void
+test_ToLFPrelNeg(void) {
int i;
- for (i = 0; i < COUNTOF(fdata); i++) {
+ for (i = 0; i < COUNTOF(fdata); ++i) {
struct timespec a = timespec_init(-1, fdata[i].nsec);
l_fp E = l_fp_init(~0, fdata[i].frac);
l_fp r;
@@ -479,9 +546,11 @@ void test_ToLFPrelNeg() {
}
}
-void test_ToLFPabs() {
+
+void
+test_ToLFPabs(void) {
int i;
- for (i = 0; i < COUNTOF(fdata); i++) {
+ for (i = 0; i < COUNTOF(fdata); ++i) {
struct timespec a = timespec_init(1, fdata[i].nsec);
l_fp E = l_fp_init(1 + JAN_1970, fdata[i].frac);
l_fp r;
@@ -494,8 +563,10 @@ void test_ToLFPabs() {
//----------------------------------------------------------------------
// conversion from l_fp
//----------------------------------------------------------------------
-void test_FromLFPbittest() {
- struct timespec limit = timespec_init(0,2);
+
+void
+test_FromLFPbittest(void) {
+ struct timespec limit = timespec_init(0, 2);
// Not *exactly* a bittest, because 2**32 tests would take a
// really long time even on very fast machines! So we do test
@@ -509,43 +580,48 @@ void test_FromLFPbittest() {
r = lfp_intv_to_tspec(a);
// The conversion might be off by one nanosecond when
// comparing to calculated value.
- TEST_ASSERT_TRUE(AssertTimespecClose(E,r,limit)); //ASSERT_PRED_FORMAT2(TimespecClose, E, r);
+ TEST_ASSERT_TRUE(AssertTimespecClose(E, r, limit));
}
}
-void test_FromLFPrelPos() {
- struct timespec limit = timespec_init(0,2);
+
+void
+test_FromLFPrelPos(void) {
+ struct timespec limit = timespec_init(0, 2);
int i;
- for (i = 0; i < COUNTOF(fdata); i++) {
+ for (i = 0; i < COUNTOF(fdata); ++i) {
l_fp a = l_fp_init(1, fdata[i].frac);
struct timespec E = timespec_init(1, fdata[i].nsec);
struct timespec r;
r = lfp_intv_to_tspec(a);
- TEST_ASSERT_TRUE(AssertTimespecClose(E,r,limit)); //ASSERT_PRED_FORMAT2(TimespecClose, E, r);
+ TEST_ASSERT_TRUE(AssertTimespecClose(E, r, limit));
}
}
-void test_FromLFPrelNeg() {
- struct timespec limit = timespec_init(0,2);
+
+void
+test_FromLFPrelNeg(void) {
+ struct timespec limit = timespec_init(0, 2);
int i;
- for (i = 0; i < COUNTOF(fdata); i++) {
+ for (i = 0; i < COUNTOF(fdata); ++i) {
l_fp a = l_fp_init(~0, fdata[i].frac);
struct timespec E = timespec_init(-1, fdata[i].nsec);
struct timespec r;
r = lfp_intv_to_tspec(a);
- TEST_ASSERT_TRUE(AssertTimespecClose(E,r,limit)); //ASSERT_PRED_FORMAT2(TimespecClose, E, r);
+ TEST_ASSERT_TRUE(AssertTimespecClose(E, r, limit));
}
}
// nsec -> frac -> nsec roundtrip, using a prime start and increment
-void test_LFProundtrip() {
+void
+test_LFProundtrip(void) {
int32_t t;
u_int32 i;
for (t = -1; t < 2; ++t)
- for (i = 4999; i < 1000000000; i+=10007) {
+ for (i = 4999; i < 1000000000; i += 10007) {
struct timespec E = timespec_init(t, i);
l_fp a;
struct timespec r;
@@ -560,7 +636,8 @@ void test_LFProundtrip() {
// string formatting
//----------------------------------------------------------------------
-void test_ToString() {
+void
+test_ToString(void) {
static const struct {
time_t sec;
long nsec;
@@ -576,7 +653,7 @@ void test_ToString() {
{-1,-1, "-1.000000001" },
};
int i;
- for (i = 0; i < COUNTOF(data); i++) {
+ for (i = 0; i < COUNTOF(data); ++i) {
struct timespec a = timespec_init(data[i].sec, data[i].nsec);
const char * E = data[i].repr;
const char * r = tspectoa(a);
diff --git a/contrib/ntp/tests/libntp/timevalops.c b/contrib/ntp/tests/libntp/timevalops.c
index 080dfb7..a2d9358 100644
--- a/contrib/ntp/tests/libntp/timevalops.c
+++ b/contrib/ntp/tests/libntp/timevalops.c
@@ -5,47 +5,87 @@
#include "ntp_types.h"
#include "ntp_fp.h"
-#include <math.h>
#include "timevalops.h"
+#include <math.h>
#include "unity.h"
-//in unity_helper.h :
#define TEST_ASSERT_EQUAL_timeval(a, b) { \
TEST_ASSERT_EQUAL_MESSAGE(a.tv_sec, b.tv_sec, "Field tv_sec"); \
TEST_ASSERT_EQUAL_MESSAGE(a.tv_usec, b.tv_usec, "Field tv_usec"); \
}
-//timeval has time_t, long, and time_t is basically uint
static u_int32 my_tick_to_tsf(u_int32 ticks);
static u_int32 my_tsf_to_tick(u_int32 tsf);
+
// that's it...
typedef struct {
long usec;
u_int32 frac;
} lfpfracdata ;
+typedef int bool;
+
+struct timeval timeval_init( time_t hi, long lo);
+const bool timeval_isValid(struct timeval V);
+l_fp l_fp_init(int32 i, u_int32 f);
+bool AssertTimevalClose(const struct timeval m, const struct timeval n, const struct timeval limit);
+bool AssertFpClose(const l_fp m, const l_fp n, const l_fp limit);
+
+void test_Helpers1(void);
+void test_Normalise(void);
+void test_SignNoFrac(void);
+void test_SignWithFrac(void);
+void test_CmpFracEQ(void);
+void test_CmpFracGT(void);
+void test_CmpFracLT(void);
+void test_AddFullNorm(void);
+void test_AddFullOflow1(void);
+void test_AddUsecNorm(void);
+void test_AddUsecOflow1(void);
+void test_SubFullNorm(void);
+void test_SubFullOflow(void);
+void test_SubUsecNorm(void);
+void test_SubUsecOflow(void);
+void test_Neg(void);
+void test_AbsNoFrac(void);
+void test_AbsWithFrac(void);
+void test_Helpers2(void);
+void test_ToLFPbittest(void);
+void test_ToLFPrelPos(void);
+void test_ToLFPrelNeg(void);
+void test_ToLFPabs(void);
+void test_FromLFPbittest(void);
+void test_FromLFPrelPos(void);
+void test_FromLFPrelNeg(void);
+void test_LFProundtrip(void);
+void test_ToString(void);
+
//******************************************MY CUSTOM FUNCTIONS*******************************
-typedef int bool; //TRUE and FALSE are already defined somewhere, so I can't do typedef enum { FALSE, TRUE } boolean;
-struct timeval timeval_init( time_t hi, long lo){
+
+struct timeval
+timeval_init( time_t hi, long lo){
struct timeval V;
V.tv_sec = hi;
V.tv_usec = lo;
return V;
}
-const bool timeval_isValid(struct timeval V)
- { return V.tv_usec >= 0 && V.tv_usec < 1000000; }
-//taken from lfpfunc.c -> maybe remove this from timevalops.c and lfpfunc. and put in c_timstructs.h ????!!!!!
-l_fp l_fp_init(int32 i, u_int32 f)
-{
+const bool
+timeval_isValid(struct timeval V) {
+ return V.tv_usec >= 0 && V.tv_usec < 1000000;
+}
+
+
+l_fp
+l_fp_init(int32 i, u_int32 f) {
l_fp temp;
temp.l_i = i;
temp.l_uf = f;
@@ -53,8 +93,9 @@ l_fp l_fp_init(int32 i, u_int32 f)
return temp;
}
-bool AssertTimevalClose(const struct timeval m, const struct timeval n, const struct timeval limit)
-{
+
+bool
+AssertTimevalClose(const struct timeval m, const struct timeval n, const struct timeval limit) {
struct timeval diff;
diff = abs_tval(sub_tval(m, n));
@@ -63,17 +104,16 @@ bool AssertTimevalClose(const struct timeval m, const struct timeval n, const st
else
{
- //printf("");
- //<< m_expr << " which is " << timeval_wrap(m)
- //<< "\nand\n"
- //<< n_expr << " which is " << timeval_wrap(n)
- //<< "\nare not close; diff=" << timeval_wrap(diff);
+ printf("m_expr which is %ld.%lu \nand\nn_expr which is %ld.%lu\nare not close; diff=%ld.%luusec\n", m.tv_sec, m.tv_usec, n.tv_sec, n.tv_usec, diff.tv_sec, diff.tv_usec);
+ //I don't have variables m_expr and n_expr in unity, those are command line arguments which only getst has!!!
+
return FALSE;
}
}
-bool AssertFpClose(const l_fp m,const l_fp n, const l_fp limit)
-{
+
+bool
+AssertFpClose(const l_fp m, const l_fp n, const l_fp limit) {
l_fp diff;
if (L_ISGEQ(&m, &n)) {
@@ -87,10 +127,8 @@ bool AssertFpClose(const l_fp m,const l_fp n, const l_fp limit)
return TRUE;
}
else {
- //<< m_expr << " which is " << l_fp_wrap(m)
- //<< "\nand\n"
- //<< n_expr << " which is " << l_fp_wrap(n)
- //<< "\nare not close; diff=" << l_fp_wrap(diff);
+ printf("m_expr which is %s \nand\nn_expr which is %s\nare not close; diff=%susec\n", lfptoa(&m, 10), lfptoa(&n, 10), lfptoa(&diff, 10));
+ //printf("m_expr which is %d.%d \nand\nn_expr which is %d.%d\nare not close; diff=%d.%dusec\n", m.l_uf, m.Ul_i, n.l_uf, n.Ul_i, diff.l_uf, diff.Ul_i);
return FALSE;
}
}
@@ -116,8 +154,8 @@ static const lfpfracdata fdata[] = {
};
-u_int32 my_tick_to_tsf(u_int32 ticks)
-{
+u_int32
+my_tick_to_tsf(u_int32 ticks) {
// convert microseconds to l_fp fractional units, using double
// precision float calculations or, if available, 64bit integer
// arithmetic. This should give the precise fraction, rounded to
@@ -131,8 +169,9 @@ u_int32 my_tick_to_tsf(u_int32 ticks)
// truncated nonsense, so don't use it out-of-bounds.
}
-u_int32 my_tsf_to_tick(u_int32 tsf)
-{
+
+u_int32
+my_tsf_to_tick(u_int32 tsf) {
// Inverse operation: converts fraction to microseconds.
#ifdef HAVE_U_INT64
return (u_int32)( ((u_int64)(tsf) * 1000000 + 0x80000000) >> 32); //CHECK ME!!!
@@ -150,7 +189,8 @@ u_int32 my_tsf_to_tick(u_int32 tsf)
// test support stuff - part1
// ---------------------------------------------------------------------
-void test_Helpers1() {
+void
+test_Helpers1(void) {
struct timeval x;
for (x.tv_sec = -2; x.tv_sec < 3; x.tv_sec++) {
@@ -170,7 +210,8 @@ void test_Helpers1() {
// test normalisation
//----------------------------------------------------------------------
-void test_Normalise() {
+void
+test_Normalise(void) {
long ns;
for (ns = -2000000000; ns <= 2000000000; ns += 10000000) {
struct timeval x = timeval_init(0, ns);
@@ -184,7 +225,8 @@ void test_Normalise() {
// test classification
//----------------------------------------------------------------------
-void test_SignNoFrac() {
+void
+test_SignNoFrac(void) {
int i;
// sign test, no fraction
for (i = -4; i <= 4; ++i) {
@@ -196,7 +238,9 @@ void test_SignNoFrac() {
}
}
-void test_SignWithFrac() {
+
+void
+test_SignWithFrac(void) {
// sign test, with fraction
int i;
for (i = -4; i <= 4; ++i) {
@@ -211,8 +255,9 @@ void test_SignWithFrac() {
//----------------------------------------------------------------------
// test compare
//----------------------------------------------------------------------
-void test_CmpFracEQ() {
- int i,j;
+void
+test_CmpFracEQ(void) {
+ int i, j;
// fractions are equal
for (i = -4; i <= 4; ++i)
for (j = -4; j <= 4; ++j) {
@@ -225,9 +270,11 @@ void test_CmpFracEQ() {
}
}
-void test_CmpFracGT() {
+
+void
+test_CmpFracGT(void) {
// fraction a bigger fraction b
- int i,j;
+ int i, j;
for (i = -4; i <= 4; ++i)
for (j = -4; j <= 4; ++j) {
struct timeval a = timeval_init( i , 999800);
@@ -239,9 +286,11 @@ void test_CmpFracGT() {
}
}
-void test_CmpFracLT() {
+
+void
+test_CmpFracLT(void) {
// fraction a less fraction b
- int i,j;
+ int i, j;
for (i = -4; i <= 4; ++i)
for (j = -4; j <= 4; ++j) {
struct timeval a = timeval_init(i, 200);
@@ -257,8 +306,9 @@ void test_CmpFracLT() {
// Test addition (sum)
//----------------------------------------------------------------------
-void test_AddFullNorm() {
- int i,j;
+void
+test_AddFullNorm(void) {
+ int i, j;
for (i = -4; i <= 4; ++i)
for (j = -4; j <= 4; ++j) {
struct timeval a = timeval_init(i, 200);
@@ -271,8 +321,10 @@ void test_AddFullNorm() {
}
}
-void test_AddFullOflow1() {
- int i,j;
+
+void
+test_AddFullOflow1(void) {
+ int i, j;
for (i = -4; i <= 4; ++i)
for (j = -4; j <= 4; ++j) {
struct timeval a = timeval_init(i, 200);
@@ -285,7 +337,9 @@ void test_AddFullOflow1() {
}
}
-void test_AddUsecNorm() {
+
+void
+test_AddUsecNorm(void) {
int i;
for (i = -4; i <= 4; ++i) {
struct timeval a = timeval_init(i, 200);
@@ -297,7 +351,9 @@ void test_AddUsecNorm() {
}
}
-void test_AddUsecOflow1() {
+
+void
+test_AddUsecOflow1(void) {
int i;
for (i = -4; i <= 4; ++i) {
struct timeval a = timeval_init(i, 200);
@@ -313,8 +369,9 @@ void test_AddUsecOflow1() {
// test subtraction (difference)
//----------------------------------------------------------------------
-void test_SubFullNorm() {
- int i,j;
+void
+test_SubFullNorm(void) {
+ int i, j;
for (i = -4; i <= 4; ++i)
for (j = -4; j <= 4; ++j) {
struct timeval a = timeval_init(i, 600);
@@ -327,8 +384,10 @@ void test_SubFullNorm() {
}
}
-void test_SubFullOflow() {
- int i,j;
+
+void
+test_SubFullOflow(void) {
+ int i, j;
for (i = -4; i <= 4; ++i)
for (j = -4; j <= 4; ++j) {
struct timeval a = timeval_init(i, 100);
@@ -341,7 +400,9 @@ void test_SubFullOflow() {
}
}
-void test_SubUsecNorm() {
+
+void
+test_SubUsecNorm(void) {
int i = -4;
for (i = -4; i <= 4; ++i) {
struct timeval a = timeval_init(i, 600);
@@ -353,7 +414,9 @@ void test_SubUsecNorm() {
}
}
-void test_SubUsecOflow() {
+
+void
+test_SubUsecOflow(void) {
int i = -4;
for (i = -4; i <= 4; ++i) {
struct timeval a = timeval_init(i, 100);
@@ -369,7 +432,8 @@ void test_SubUsecOflow() {
// test negation
//----------------------------------------------------------------------
-void test_Neg() {
+void
+test_Neg(void) {
int i = -4;
for (i = -4; i <= 4; ++i) {
struct timeval a = timeval_init(i, 100);
@@ -386,7 +450,8 @@ void test_Neg() {
// test abs value
//----------------------------------------------------------------------
-void test_AbsNoFrac() {
+void
+test_AbsNoFrac(void) {
int i = -4;
for (i = -4; i <= 4; ++i) {
struct timeval a = timeval_init(i, 0);
@@ -397,7 +462,9 @@ void test_AbsNoFrac() {
}
}
-void test_AbsWithFrac() {
+
+void
+test_AbsWithFrac(void) {
int i = -4;
for (i = -4; i <= 4; ++i) {
struct timeval a = timeval_init(i, 100);
@@ -413,8 +480,9 @@ void test_AbsWithFrac() {
// ---------------------------------------------------------------------
-void test_Helpers2() {
- //struct AssertTimevalClose isClose = AssertTimevalClose_init(0, 2);
+void
+test_Helpers2(void) {
+
struct timeval limit = timeval_init(0, 2);
struct timeval x, y;
long i;
@@ -423,14 +491,14 @@ void test_Helpers2() {
for (x.tv_usec = 1;
x.tv_usec < 1000000;
x.tv_usec += 499999) {
- for (i = -4; i < 5; i++) {
+ for (i = -4; i < 5; ++i) {
y = x;
y.tv_usec += i;
if (i >= -2 && i <= 2){
- TEST_ASSERT_TRUE(AssertTimevalClose(x,y,limit));//ASSERT_PRED_FORMAT2(isClose, x, y);
+ TEST_ASSERT_TRUE(AssertTimevalClose(x, y, limit));//ASSERT_PRED_FORMAT2(isClose, x, y);
}
else {
- TEST_ASSERT_FALSE(AssertTimevalClose(x,y,limit));//ASSERT_PRED_FORMAT2(!isClose, x, y);
+ TEST_ASSERT_FALSE(AssertTimevalClose(x, y, limit));
}
}
}
@@ -439,66 +507,72 @@ void test_Helpers2() {
// and the global predicate instances we're using here
-//static l_fp lfpClose = l_fp_init(0,1); //static AssertFpClose FpClose(0, 1);
-//static struct timeval timevalClose = timeval_init(0,1); //static AssertTimevalClose TimevalClose(0, 1);
+//static l_fp lfpClose = l_fp_init(0, 1); //static AssertFpClose FpClose(0, 1);
+//static struct timeval timevalClose = timeval_init(0, 1); //static AssertTimevalClose TimevalClose(0, 1);
//----------------------------------------------------------------------
// conversion to l_fp
//----------------------------------------------------------------------
-void test_ToLFPbittest() {
- l_fp lfpClose = l_fp_init(0,1);
+void
+test_ToLFPbittest(void) {
+ l_fp lfpClose = l_fp_init(0, 1);
u_int32 i = 0;
- for (i = 0; i < 1000000; i++) {
+ for (i = 0; i < 1000000; ++i) {
struct timeval a = timeval_init(1, i);
- l_fp E = l_fp_init(1,my_tick_to_tsf(i));
+ l_fp E = l_fp_init(1, my_tick_to_tsf(i));
l_fp r;
r = tval_intv_to_lfp(a);
- TEST_ASSERT_TRUE(AssertFpClose(E,r,lfpClose)); //ASSERT_PRED_FORMAT2(FpClose, E, r);
+ TEST_ASSERT_TRUE(AssertFpClose(E, r, lfpClose)); //ASSERT_PRED_FORMAT2(FpClose, E, r);
}
}
-void test_ToLFPrelPos() {
- l_fp lfpClose = l_fp_init(0,1);
+void
+test_ToLFPrelPos(void) {
+ l_fp lfpClose = l_fp_init(0, 1);
int i = 0;
- for (i = 0; i < COUNTOF(fdata); i++) {
+ for (i = 0; i < COUNTOF(fdata); ++i) {
struct timeval a = timeval_init(1, fdata[i].usec);
l_fp E = l_fp_init(1, fdata[i].frac);
l_fp r;
r = tval_intv_to_lfp(a);
- TEST_ASSERT_TRUE(AssertFpClose(E,r,lfpClose)); //ASSERT_PRED_FORMAT2(FpClose, E, r);
+ TEST_ASSERT_TRUE(AssertFpClose(E, r, lfpClose));
}
}
-void test_ToLFPrelNeg() {
- l_fp lfpClose = l_fp_init(0,1);
+
+void
+test_ToLFPrelNeg(void) {
+ l_fp lfpClose = l_fp_init(0, 1);
int i = 0;
- for (i = 0; i < COUNTOF(fdata); i++) {
+ for (i = 0; i < COUNTOF(fdata); ++i) {
struct timeval a = timeval_init(-1, fdata[i].usec);
l_fp E = l_fp_init(~0, fdata[i].frac);
l_fp r;
r = tval_intv_to_lfp(a);
- TEST_ASSERT_TRUE(AssertFpClose(E,r,lfpClose)); //ASSERT_PRED_FORMAT2(FpClose,E, r);
+ TEST_ASSERT_TRUE(AssertFpClose(E, r, lfpClose));
}
}
-void test_ToLFPabs() {
- l_fp lfpClose = l_fp_init(0,1);
+
+void
+test_ToLFPabs(void) {
+ l_fp lfpClose = l_fp_init(0, 1);
int i = 0;
- for (i = 0; i < COUNTOF(fdata); i++) {
+ for (i = 0; i < COUNTOF(fdata); ++i) {
struct timeval a = timeval_init(1, fdata[i].usec);
l_fp E = l_fp_init(1 + JAN_1970, fdata[i].frac);
l_fp r;
r = tval_stamp_to_lfp(a);
- TEST_ASSERT_TRUE(AssertFpClose(E,r,lfpClose)); //ASSERT_PRED_FORMAT2(FpClose, E, r);
+ TEST_ASSERT_TRUE(AssertFpClose(E, r, lfpClose));
}
}
@@ -506,8 +580,9 @@ void test_ToLFPabs() {
// conversion from l_fp
//----------------------------------------------------------------------
-void test_FromLFPbittest() {
- struct timeval timevalClose = timeval_init(0,1);
+void
+test_FromLFPbittest(void) {
+ struct timeval timevalClose = timeval_init(0, 1);
// Not *exactly* a bittest, because 2**32 tests would take a
// really long time even on very fast machines! So we do test
// every 1000 fractional units.
@@ -520,42 +595,48 @@ void test_FromLFPbittest() {
r = lfp_intv_to_tval(a);
// The conversion might be off by one microsecond when
// comparing to calculated value.
- TEST_ASSERT_TRUE(AssertTimevalClose(E,r,timevalClose)); //ASSERT_PRED_FORMAT2(TimevalClose, E, r);
+ TEST_ASSERT_TRUE(AssertTimevalClose(E, r, timevalClose));
}
}
-void test_FromLFPrelPos() {
- struct timeval timevalClose = timeval_init(0,1);
+
+void
+test_FromLFPrelPos(void) {
+ struct timeval timevalClose = timeval_init(0, 1);
int i = 0;
- for (i = 0; i < COUNTOF(fdata); i++) {
+ for (i = 0; i < COUNTOF(fdata); ++i) {
l_fp a = l_fp_init(1, fdata[i].frac);
struct timeval E = timeval_init(1, fdata[i].usec);
struct timeval r;
r = lfp_intv_to_tval(a);
- TEST_ASSERT_TRUE(AssertTimevalClose(E,r,timevalClose)); //ASSERT_PRED_FORMAT2(TimevalClose, E, r);
+ TEST_ASSERT_TRUE(AssertTimevalClose(E, r, timevalClose));
}
}
-void test_FromLFPrelNeg() {
- struct timeval timevalClose = timeval_init(0,1);
+
+void
+test_FromLFPrelNeg(void) {
+ struct timeval timevalClose = timeval_init(0, 1);
int i = 0;
- for (i = 0; i < COUNTOF(fdata); i++) {
+ for (i = 0; i < COUNTOF(fdata); ++i) {
l_fp a = l_fp_init(~0, fdata[i].frac);
struct timeval E = timeval_init(-1, fdata[i].usec);
struct timeval r;
r = lfp_intv_to_tval(a);
- TEST_ASSERT_TRUE(AssertTimevalClose(E,r,timevalClose)); //ASSERT_PRED_FORMAT2(TimevalClose, E, r);
+ TEST_ASSERT_TRUE(AssertTimevalClose(E, r, timevalClose));
}
}
+
// usec -> frac -> usec roundtrip, using a prime start and increment
-void test_LFProundtrip() {
+void
+test_LFProundtrip(void) {
int32_t t = -1;
u_int32 i = 5;
for (t = -1; t < 2; ++t)
- for (i = 5; i < 1000000; i+=11) {
+ for (i = 5; i < 1000000; i += 11) {
struct timeval E = timeval_init(t, i);
l_fp a;
struct timeval r;
@@ -570,7 +651,8 @@ void test_LFProundtrip() {
// string formatting
//----------------------------------------------------------------------
-void test_ToString() {
+void
+test_ToString(void) {
static const struct {
time_t sec;
long usec;
@@ -588,7 +670,7 @@ void test_ToString() {
int i;
for (i = 0; i < COUNTOF(data); ++i) {
struct timeval a = timeval_init(data[i].sec, data[i].usec);
- const char * E = data[i].repr; //??
+ const char * E = data[i].repr;
const char * r = tvaltoa(a);
TEST_ASSERT_EQUAL_STRING(E, r);
diff --git a/contrib/ntp/tests/libntp/tstotv.c b/contrib/ntp/tests/libntp/tstotv.c
index 0801727..dac7e53 100644
--- a/contrib/ntp/tests/libntp/tstotv.c
+++ b/contrib/ntp/tests/libntp/tstotv.c
@@ -5,9 +5,14 @@
#include "unity.h"
+void test_Seconds(void);
+void test_MicrosecondsExact(void);
+void test_MicrosecondsRounding(void);
+
+
void
test_Seconds(void) {
- const l_fp input = {50, 0}; // 50.0 s
+ const l_fp input = {{50}, 0}; /* 50.0 s */
const struct timeval expected = {50, 0};
struct timeval actual;
@@ -20,7 +25,7 @@ test_Seconds(void) {
void
test_MicrosecondsExact(void) {
const u_long HALF = 2147483648UL;
- const l_fp input = {50, HALF}; // 50.5 s
+ const l_fp input = {{50}, HALF}; /* 50.5 s */
const struct timeval expected = {50, 500000};
struct timeval actual;
@@ -33,7 +38,7 @@ test_MicrosecondsExact(void) {
void
test_MicrosecondsRounding(void) {
- const l_fp input = {50, 3865471UL}; // Should round to 50.0009
+ const l_fp input = {{50}, 3865471UL}; /* Should round to 50.0009 */
const struct timeval expected = {50, 900};
struct timeval actual;
diff --git a/contrib/ntp/tests/libntp/tvtots.c b/contrib/ntp/tests/libntp/tvtots.c
index 6c8345a..a13846d 100644
--- a/contrib/ntp/tests/libntp/tvtots.c
+++ b/contrib/ntp/tests/libntp/tvtots.c
@@ -4,13 +4,18 @@
#include "timevalops.h"
#include "unity.h"
-#include <math.h>// Required on Solaris for ldexp.
+#include <math.h> /* Required on Solaris for ldexp. */
-void test_Seconds(void)
+void test_Seconds(void);
+void test_MicrosecondsRounded(void);
+void test_MicrosecondsExact(void);
+
+void
+test_Seconds(void)
{
- struct timeval input = {500, 0}; // 500.0 s
- l_fp expected = {500, 0};
+ struct timeval input = {500, 0}; /* 500.0 s */
+ l_fp expected = {{500}, 0};
l_fp actual;
TVTOTS(&input, &actual);
@@ -18,37 +23,42 @@ void test_Seconds(void)
TEST_ASSERT_TRUE(IsEqual(expected, actual));
}
-void test_MicrosecondsRounded(void)
+
+void
+test_MicrosecondsRounded(void)
{
/* 0.0005 can not be represented exact in a l_fp structure.
* It would equal to 2147483,648. This means that
* HALF_PROMILLE_UP (which is 2147484) should be
* the correct rounding. */
- struct timeval input = {0, 500}; // 0.0005 exact
- l_fp expected = {0, HALF_PROMILLE_UP};
+ struct timeval input = {0, 500}; /* 0.0005 exact */
+ l_fp expected = {{0}, HALF_PROMILLE_UP};
l_fp actual;
TVTOTS(&input, &actual);
+
TEST_ASSERT_TRUE(IsEqual(expected, actual));
}
-void test_MicrosecondsExact(void)
+
+void
+test_MicrosecondsExact(void)
{
- // 0.5 can be represented exact in both l_fp and timeval.
- const struct timeval input = {10, 500000}; // 0.5 exact
- const l_fp expected = {10, HALF}; // 0.5 exact
+ /* 0.5 can be represented exact in both l_fp and timeval. */
+ const struct timeval input = {10, 500000}; /* 0.5 exact */
+ const l_fp expected = {{10}, HALF}; /* 0.5 exact */
l_fp actual;
TVTOTS(&input, &actual);
- // Compare the fractional part with an absolute error given.
+ /* Compare the fractional part with an absolute error given. */
TEST_ASSERT_EQUAL_UINT(expected.l_ui, actual.l_ui);
double expectedDouble, actualDouble;
M_LFPTOD(0, expected.l_uf, expectedDouble);
M_LFPTOD(0, actual.l_uf, actualDouble);
- // The error should be less than 0.5 us
- TEST_ASSERT_DOUBLE_WITHIN(0000005, expectedDouble, actualDouble);
+ /* The error should be less than 0.5 us */
+ TEST_ASSERT_DOUBLE_WITHIN(0.0000005, expectedDouble, actualDouble);
}
diff --git a/contrib/ntp/tests/libntp/uglydate.c b/contrib/ntp/tests/libntp/uglydate.c
index a8d02d1..f47f3e4 100644
--- a/contrib/ntp/tests/libntp/uglydate.c
+++ b/contrib/ntp/tests/libntp/uglydate.c
@@ -1,17 +1,17 @@
#include "config.h"
#include "ntp_stdlib.h"
-#include "ntp_calendar.h"
#include "ntp_fp.h"
#include "unity.h"
+void test_ConstantDateTime(void);
void
test_ConstantDateTime(void) {
const u_int32 HALF = 2147483648UL;
- l_fp time = {3485080800UL, HALF}; // 2010-06-09 14:00:00.5
+ l_fp time = {{3485080800UL}, HALF}; /* 2010-06-09 14:00:00.5 */
TEST_ASSERT_EQUAL_STRING("3485080800.500000 10:159:14:00:00.500",
uglydate(&time));
diff --git a/contrib/ntp/tests/libntp/vi64ops.c b/contrib/ntp/tests/libntp/vi64ops.c
index af7dd1b..843c0a3 100644
--- a/contrib/ntp/tests/libntp/vi64ops.c
+++ b/contrib/ntp/tests/libntp/vi64ops.c
@@ -1,36 +1,42 @@
#include "config.h"
#include "ntp_stdlib.h"
+#include "vint64ops.h"
#include "unity.h"
-#include "vint64ops.h"
-//technically bool
-//int IsEqual(const vint64 &expected, const vint64 &actual) {
-int IsEqual(const vint64 expected, const vint64 actual) {
+int IsEqual(const vint64 expected, const vint64 actual);
+void test_ParseVUI64_pos(void);
+void test_ParseVUI64_neg(void);
+void test_ParseVUI64_case(void);
+
+
+// technically bool
+int
+IsEqual(const vint64 expected, const vint64 actual) {
if (0 == memcmp(&expected, &actual, sizeof(vint64))) {
- printf( "%x.", expected.D_s.hi); //<< std::hex << expected.D_s.hi << '.'
- printf("%x",expected.D_s.lo);//<< std::hex << expected.D_s.lo
+ printf( "%x.", expected.D_s.hi);
+ printf("%x", expected.D_s.lo);
printf(" but was ");
- printf("%x.",actual.D_s.hi); //<< std::hex << actual.D_s.hi << '.'
- printf("%x\n",actual.D_s.lo); //<< std::hex << actual.D_s.lo;
+ printf("%x.", actual.D_s.hi);
+ printf("%x\n", actual.D_s.lo);
return TRUE;
} else {
-
printf("expected: ");
- printf( "%d.", expected.D_s.hi); //<< std::hex << expected.D_s.hi << '.'
- printf("%d",expected.D_s.lo);//<< std::hex << expected.D_s.lo
+ printf( "%d.", expected.D_s.hi);
+ printf("%d", expected.D_s.lo);
printf(" but was ");
- printf("%d",actual.D_s.lo); //<< std::hex << actual.D_s.hi << '.'
- printf("%d",actual.D_s.lo); //<< std::hex << actual.D_s.lo;
+ printf("%d", actual.D_s.lo);
+ printf("%d", actual.D_s.lo);
return FALSE;
}
}
// ----------------------------------------------------------------------
// test number parser
-void test_ParseVUI64_pos() {
+void
+test_ParseVUI64_pos(void) {
vint64 act, exp;
const char *sp;
char *ep;
@@ -44,7 +50,9 @@ void test_ParseVUI64_pos() {
TEST_ASSERT_EQUAL(*ep, 'x');
}
-void test_ParseVUI64_neg() {
+
+void
+test_ParseVUI64_neg(void) {
vint64 act, exp;
const char *sp;
char *ep;
@@ -57,7 +65,8 @@ void test_ParseVUI64_neg() {
TEST_ASSERT_EQUAL(*ep, 'x');
}
-void test_ParseVUI64_case() {
+void
+test_ParseVUI64_case(void) {
vint64 act, exp;
const char *sp;
char *ep;
@@ -69,4 +78,3 @@ void test_ParseVUI64_case() {
TEST_ASSERT_TRUE(IsEqual(exp, act));
TEST_ASSERT_EQUAL(*ep, '\0');
}
-
diff --git a/contrib/ntp/tests/libntp/ymd2yd.c b/contrib/ntp/tests/libntp/ymd2yd.c
index 8e0725c..ccb7fb9 100644
--- a/contrib/ntp/tests/libntp/ymd2yd.c
+++ b/contrib/ntp/tests/libntp/ymd2yd.c
@@ -1,35 +1,37 @@
#include "config.h"
#include "ntp_stdlib.h"
-#include "ntp_calendar.h"
#include "unity.h"
-void setUp(void)
-{
-}
-
-void tearDown(void)
-{
-}
+void test_NonLeapYearFebruary(void);
+void test_NonLeapYearJune(void);
+void test_LeapYearFebruary(void);
+void test_LeapYearDecember(void);
-void test_NonLeapYearFebruary (void) {
- TEST_ASSERT_EQUAL(31+20, ymd2yd(2010,2,20)); //2010-02-20
+void
+test_NonLeapYearFebruary(void) {
+ TEST_ASSERT_EQUAL(31 + 20, ymd2yd(2010, 2, 20)); //2010-02-20
}
-void test_NonLeapYearJune (void) {
+
+void
+test_NonLeapYearJune(void) {
int expected = 31+28+31+30+31+18; // 18 June non-leap year
- TEST_ASSERT_EQUAL(expected, ymd2yd(2011,6,18));
+ TEST_ASSERT_EQUAL(expected, ymd2yd(2011, 6, 18));
}
-void test_LeapYearFebruary (void) {
- TEST_ASSERT_EQUAL(31+20, ymd2yd(2012,2,20)); //2012-02-20 (leap year)
+
+void
+test_LeapYearFebruary(void) {
+ TEST_ASSERT_EQUAL(31 + 20, ymd2yd(2012, 2, 20)); //2012-02-20 (leap year)
}
-void test_LeapYearDecember (void) {
+
+void
+test_LeapYearDecember(void) {
// 2012-12-31
int expected = 31+29+31+30+31+30+31+31+30+31+30+31;
- TEST_ASSERT_EQUAL(expected, ymd2yd(2012,12,31));
+ TEST_ASSERT_EQUAL(expected, ymd2yd(2012, 12, 31));
}
-
diff --git a/contrib/ntp/tests/ntpd/Makefile.am b/contrib/ntp/tests/ntpd/Makefile.am
index c5df6e4..2cab14f 100644
--- a/contrib/ntp/tests/ntpd/Makefile.am
+++ b/contrib/ntp/tests/ntpd/Makefile.am
@@ -2,48 +2,205 @@ NULL =
BUILT_SOURCES =
CLEANFILES =
-check_PROGRAMS = tests
+std_unity_list = \
+ $(top_srcdir)/sntp/unity/auto/generate_test_runner.rb \
+ $(NULL)
+
+run_unity = cd $(srcdir) && ruby ../../sntp/unity/auto/generate_test_runner.rb
+
+check_PROGRAMS = \
+ test-leapsec \
+ test-ntp_prio_q \
+ $(NULL)
+if BUILD_TEST_NTP_RESTRICT
+check_PROGRAMS += test-ntp_restrict
+endif
+if BUILD_TEST_NTP_SCANNER
+check_PROGRAMS += test-ntp_scanner
+endif
+if BUILD_TEST_NTP_SIGND
+check_PROGRAMS += test-ntp_signd
+endif
+check_PROGRAMS += \
+ test-rc_cmdlength \
+ $(NULL)
+
+EXTRA_PROGRAMS = \
+ test-ntp_restrict \
+ test-ntp_scanner \
+ test-ntp_signd \
+ $(NULL)
+
LDADD = \
+ $(top_builddir)/ntpd/libntpd.a \
$(top_builddir)/libntp/libntp.a \
$(LDADD_LIBNTP) \
$(PTHREAD_LIBS) \
$(LDADD_NTP) \
- $(GTEST_LDFLAGS) \
- $(GTEST_LIBS) \
+ $(NULL)
+
+unity_tests_LDADD = \
+ $(LDADD) \
+ $(top_builddir)/sntp/unity/libunity.a \
+ $(LIBM) \
$(NULL)
AM_CFLAGS = $(CFLAGS_NTP)
-AM_CXXFLAGS = $(GTEST_CXXFLAGS)
AM_CPPFLAGS = $(NTP_INCS)
AM_CPPFLAGS += -I$(top_srcdir)/sntp
AM_CPPFLAGS += -I$(top_srcdir)/ntpd
-AM_CPPFLAGS += $(GTEST_CPPFLAGS)
+AM_CPPFLAGS += -I$(top_srcdir)/tests/libntp
AM_CPPFLAGS += $(CPPFLAGS_NTP)
+AM_CPPFLAGS += -DUNITY_INCLUDE_CONFIG_H
+AM_CPPFLAGS += -I$(top_srcdir)/sntp/unity
AM_LDFLAGS = $(LDFLAGS_NTP)
-tests_SOURCES = $(top_srcdir)/sntp/tests_main.cpp \
- ntpdtest.cpp \
- $(top_srcdir)/ntpd/ntp_leapsec.c \
- leapsec.cpp \
- $(NULL)
+BUILT_SOURCES += \
+ $(srcdir)/run-leapsec.c \
+ $(srcdir)/run-ntp_prio_q.c \
+ $(srcdir)/run-ntp_restrict.c \
+ $(srcdir)/run-rc_cmdlength.c \
+ $(srcdir)/run-t-ntp_signd.c \
+ $(NULL)
+
+###
+
+test_leapsec_CFLAGS = \
+ -I$(top_srcdir)/sntp/unity \
+ $(NULL)
+
+# Might need pthread support
+test_leapsec_LDADD = \
+ $(unity_tests_LDADD) \
+ $(NULL)
+
+test_leapsec_SOURCES = \
+ leapsec.c \
+ run-leapsec.c \
+ $(srcdir)/../libntp/test-libntp.c \
+ $(NULL)
+
+$(srcdir)/run-leapsec.c: $(srcdir)/leapsec.c $(std_unity_list)
+ $(run_unity) leapsec.c run-leapsec.c
+
+###
+test_ntp_prio_q_CFLAGS = \
+ -I$(top_srcdir)/sntp/unity \
+ $(NULL)
+
+test_ntp_prio_q_LDADD = \
+ $(unity_tests_LDADD) \
+ ../../ntpd/ntpdsim-ntp_prio_q.o \
+ $(NULL)
+
+test_ntp_prio_q_SOURCES = \
+ ntp_prio_q.c \
+ run-ntp_prio_q.c \
+ $(srcdir)/../libntp/test-libntp.c \
+ $(NULL)
+
+$(srcdir)/run-ntp_prio_q.c: $(srcdir)/ntp_prio_q.c $(std_unity_list)
+ $(run_unity) ntp_prio_q.c run-ntp_prio_q.c
+
+
+###
+test_ntp_restrict_CFLAGS = \
+ -I$(top_srcdir)/sntp/unity \
+ $(NULL)
+
+test_ntp_restrict_LDADD = \
+ $(unity_tests_LDADD) \
+ $(NULL)
+
+test_ntp_restrict_SOURCES = \
+ ntp_restrict.c \
+ run-ntp_restrict.c \
+ $(srcdir)/../libntp/test-libntp.c \
+ $(NULL)
+
+$(srcdir)/run-ntp_restrict.c: $(srcdir)/ntp_restrict.c $(std_unity_list)
+ $(run_unity) ntp_restrict.c run-ntp_restrict.c
+
+
+
+###
+test_rc_cmdlength_CFLAGS = \
+ -I$(top_srcdir)/sntp/unity \
+ $(NULL)
+
+test_rc_cmdlength_LDADD = \
+ $(unity_tests_LDADD) \
+ $(NULL)
+
+test_rc_cmdlength_SOURCES = \
+ rc_cmdlength.c \
+ run-rc_cmdlength.c \
+ $(srcdir)/../libntp/test-libntp.c \
+ $(NULL)
+
+$(srcdir)/run-rc_cmdlength.c: $(srcdir)/rc_cmdlength.c $(std_unity_list)
+ $(run_unity) rc_cmdlength.c run-rc_cmdlength.c
+
+###
+
+test_ntp_signd_LDADD = \
+ $(unity_tests_LDADD) \
+ $(top_builddir)/ntpd/ntp_config.o \
+ $(top_builddir)/ntpd/ntp_io.o \
+ $(NULL)
+
+test_ntp_signd_SOURCES = \
+ t-ntp_signd.c \
+ run-t-ntp_signd.c \
+ $(srcdir)/../libntp/test-libntp.c \
+ $(srcdir)/../../ntpd/ntp_signd.c \
+ $(NULL)
+
+$(srcdir)/run-t-ntp_signd.c: $(srcdir)/t-ntp_signd.c $(std_unity_list)
+ $(run_unity) t-ntp_signd.c run-t-ntp_signd.c
+
+###
+test_ntp_scanner_CFLAGS = \
+ -I$(top_srcdir)/sntp/unity \
+ $(NULL)
+
+test_ntp_scanner_LDADD = \
+ $(unity_tests_LDADD) \
+ $(top_builddir)/ntpd/ntp_config.o \
+ $(top_builddir)/ntpd/ntp_parser.o \
+ $(NULL)
+
+test_ntp_scanner_SOURCES = \
+ t-ntp_scanner.c \
+ run-t-ntp_scanner.c \
+ $(srcdir)/../libntp/test-libntp.c \
+ $(NULL)
+
+$(srcdir)/run-t-ntp_scanner.c: $(srcdir)/t-ntp_scanner.c $(std_unity_list)
+ $(run_unity) t-ntp_scanner.c run-t-ntp_scanner.c
-noinst_HEADERS = ntpdtest.h \
- $(NULL)
TESTS =
if !NTP_CROSSCOMPILE
-TESTS += tests
+TESTS += $(check_PROGRAMS)
endif
## check-libntp.mf - automake fragment
## slightly adapted for deeper directory
-BUILT_SOURCES += check-libntp
-CLEANFILES += check-libntp
+BUILT_SOURCES += check-libntpd check-libntp check-libunity
+CLEANFILES += check-libntpd check-libntp check-libunity
+
+check-libntpd: ../../ntpd/libntpd.a
+ @echo stamp > $@
+
+../../ntpd/libntpd.a:
+ cd ../../ntpd && $(MAKE) $(AM_MAKEFLAGS) libntpd.a
+
check-libntp: ../../libntp/libntp.a
@echo stamp > $@
@@ -51,5 +208,15 @@ check-libntp: ../../libntp/libntp.a
../../libntp/libntp.a:
cd ../../libntp && $(MAKE) $(AM_MAKEFLAGS) libntp.a
+
+check-libunity: ../../sntp/unity/libunity.a
+ @echo stamp > $@
+
+../../sntp/unity/libunity.a:
+ cd ../../sntp/unity && $(MAKE) $(AM_MAKEFLAGS) libunity.a
+
+$(top_builddir)/ntpd/ntpdsim-ntp_prio_q.o:
+ cd ../../ntpd/ && $(MAKE) $(AM_MAKEFLAGS) ntpdsim-ntp_prio_q.o
+
include $(top_srcdir)/depsver.mf
include $(top_srcdir)/includes.mf
diff --git a/contrib/ntp/tests/ntpd/Makefile.in b/contrib/ntp/tests/ntpd/Makefile.in
index e6ad905..2dc7a04 100644
--- a/contrib/ntp/tests/ntpd/Makefile.in
+++ b/contrib/ntp/tests/ntpd/Makefile.in
@@ -13,7 +13,6 @@
# PARTICULAR PURPOSE.
@SET_MAKE@
-
VPATH = @srcdir@
am__is_gnu_make = { \
if test -z '$(MAKELEVEL)'; then \
@@ -88,9 +87,15 @@ PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
-check_PROGRAMS = tests$(EXEEXT)
-TESTS = $(am__EXEEXT_1)
-@NTP_CROSSCOMPILE_FALSE@am__append_1 = tests
+check_PROGRAMS = test-leapsec$(EXEEXT) test-ntp_prio_q$(EXEEXT) \
+ $(am__EXEEXT_1) $(am__EXEEXT_2) $(am__EXEEXT_3) \
+ $(am__EXEEXT_4) test-rc_cmdlength$(EXEEXT) $(am__EXEEXT_1)
+@BUILD_TEST_NTP_RESTRICT_TRUE@am__append_1 = test-ntp_restrict
+@BUILD_TEST_NTP_SCANNER_TRUE@am__append_2 = test-ntp_scanner
+@BUILD_TEST_NTP_SIGND_TRUE@am__append_3 = test-ntp_signd
+EXTRA_PROGRAMS = test-ntp_restrict$(EXEEXT) test-ntp_scanner$(EXEEXT) \
+ test-ntp_signd$(EXEEXT) $(am__EXEEXT_1)
+@NTP_CROSSCOMPILE_FALSE@am__append_4 = $(check_PROGRAMS)
subdir = tests/ntpd
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/sntp/libopts/m4/libopts.m4 \
@@ -119,6 +124,7 @@ am__aclocal_m4_deps = $(top_srcdir)/sntp/libopts/m4/libopts.m4 \
$(top_srcdir)/sntp/m4/ntp_locinfo.m4 \
$(top_srcdir)/sntp/m4/ntp_openssl.m4 \
$(top_srcdir)/sntp/m4/ntp_pkg_config.m4 \
+ $(top_srcdir)/sntp/m4/ntp_problemtests.m4 \
$(top_srcdir)/sntp/m4/ntp_prog_cc.m4 \
$(top_srcdir)/sntp/m4/ntp_rlimit.m4 \
$(top_srcdir)/sntp/m4/ntp_sntp.m4 \
@@ -132,26 +138,89 @@ am__aclocal_m4_deps = $(top_srcdir)/sntp/libopts/m4/libopts.m4 \
$(top_srcdir)/sntp/m4/version.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
-DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
- $(am__DIST_COMMON)
+DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON)
mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
+am__EXEEXT_1 =
+@BUILD_TEST_NTP_RESTRICT_TRUE@am__EXEEXT_2 = \
+@BUILD_TEST_NTP_RESTRICT_TRUE@ test-ntp_restrict$(EXEEXT)
+@BUILD_TEST_NTP_SCANNER_TRUE@am__EXEEXT_3 = test-ntp_scanner$(EXEEXT)
+@BUILD_TEST_NTP_SIGND_TRUE@am__EXEEXT_4 = test-ntp_signd$(EXEEXT)
am__objects_1 =
-am_tests_OBJECTS = tests_main.$(OBJEXT) ntpdtest.$(OBJEXT) \
- ntp_leapsec.$(OBJEXT) leapsec.$(OBJEXT) $(am__objects_1)
-tests_OBJECTS = $(am_tests_OBJECTS)
-tests_LDADD = $(LDADD)
+am_test_leapsec_OBJECTS = test_leapsec-leapsec.$(OBJEXT) \
+ test_leapsec-run-leapsec.$(OBJEXT) \
+ test_leapsec-test-libntp.$(OBJEXT) $(am__objects_1)
+test_leapsec_OBJECTS = $(am_test_leapsec_OBJECTS)
am__DEPENDENCIES_1 =
-tests_DEPENDENCIES = $(top_builddir)/libntp/libntp.a \
- $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+am__DEPENDENCIES_2 = $(top_builddir)/ntpd/libntpd.a \
+ $(top_builddir)/libntp/libntp.a $(am__DEPENDENCIES_1) \
$(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
- $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
+ $(am__DEPENDENCIES_1)
+am__DEPENDENCIES_3 = $(am__DEPENDENCIES_2) \
+ $(top_builddir)/sntp/unity/libunity.a $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_1)
+test_leapsec_DEPENDENCIES = $(am__DEPENDENCIES_3) \
+ $(am__DEPENDENCIES_1)
AM_V_lt = $(am__v_lt_@AM_V@)
am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
am__v_lt_0 = --silent
am__v_lt_1 =
+test_leapsec_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(test_leapsec_CFLAGS) \
+ $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+am_test_ntp_prio_q_OBJECTS = test_ntp_prio_q-ntp_prio_q.$(OBJEXT) \
+ test_ntp_prio_q-run-ntp_prio_q.$(OBJEXT) \
+ test_ntp_prio_q-test-libntp.$(OBJEXT) $(am__objects_1)
+test_ntp_prio_q_OBJECTS = $(am_test_ntp_prio_q_OBJECTS)
+test_ntp_prio_q_DEPENDENCIES = $(am__DEPENDENCIES_3) \
+ ../../ntpd/ntpdsim-ntp_prio_q.o $(am__DEPENDENCIES_1)
+test_ntp_prio_q_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+ $(test_ntp_prio_q_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \
+ -o $@
+am_test_ntp_restrict_OBJECTS = \
+ test_ntp_restrict-ntp_restrict.$(OBJEXT) \
+ test_ntp_restrict-run-ntp_restrict.$(OBJEXT) \
+ test_ntp_restrict-test-libntp.$(OBJEXT) $(am__objects_1)
+test_ntp_restrict_OBJECTS = $(am_test_ntp_restrict_OBJECTS)
+test_ntp_restrict_DEPENDENCIES = $(am__DEPENDENCIES_3) \
+ $(am__DEPENDENCIES_1)
+test_ntp_restrict_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+ $(test_ntp_restrict_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \
+ -o $@
+am_test_ntp_scanner_OBJECTS = \
+ test_ntp_scanner-t-ntp_scanner.$(OBJEXT) \
+ test_ntp_scanner-run-t-ntp_scanner.$(OBJEXT) \
+ test_ntp_scanner-test-libntp.$(OBJEXT) $(am__objects_1)
+test_ntp_scanner_OBJECTS = $(am_test_ntp_scanner_OBJECTS)
+test_ntp_scanner_DEPENDENCIES = $(am__DEPENDENCIES_3) \
+ $(top_builddir)/ntpd/ntp_config.o \
+ $(top_builddir)/ntpd/ntp_parser.o $(am__DEPENDENCIES_1)
+test_ntp_scanner_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+ $(test_ntp_scanner_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \
+ -o $@
+am_test_ntp_signd_OBJECTS = t-ntp_signd.$(OBJEXT) \
+ run-t-ntp_signd.$(OBJEXT) test-libntp.$(OBJEXT) \
+ ntp_signd.$(OBJEXT) $(am__objects_1)
+test_ntp_signd_OBJECTS = $(am_test_ntp_signd_OBJECTS)
+test_ntp_signd_DEPENDENCIES = $(am__DEPENDENCIES_3) \
+ $(top_builddir)/ntpd/ntp_config.o \
+ $(top_builddir)/ntpd/ntp_io.o $(am__DEPENDENCIES_1)
+am_test_rc_cmdlength_OBJECTS = \
+ test_rc_cmdlength-rc_cmdlength.$(OBJEXT) \
+ test_rc_cmdlength-run-rc_cmdlength.$(OBJEXT) \
+ test_rc_cmdlength-test-libntp.$(OBJEXT) $(am__objects_1)
+test_rc_cmdlength_OBJECTS = $(am_test_rc_cmdlength_OBJECTS)
+test_rc_cmdlength_DEPENDENCIES = $(am__DEPENDENCIES_3) \
+ $(am__DEPENDENCIES_1)
+test_rc_cmdlength_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \
+ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \
+ $(test_rc_cmdlength_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \
+ -o $@
AM_V_P = $(am__v_P_@AM_V@)
am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
am__v_P_0 = false
@@ -186,32 +255,17 @@ AM_V_CCLD = $(am__v_CCLD_@AM_V@)
am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
am__v_CCLD_0 = @echo " CCLD " $@;
am__v_CCLD_1 =
-CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
- $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
-LTCXXCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \
- $(LIBTOOLFLAGS) --mode=compile $(CXX) $(DEFS) \
- $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
- $(AM_CXXFLAGS) $(CXXFLAGS)
-AM_V_CXX = $(am__v_CXX_@AM_V@)
-am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@)
-am__v_CXX_0 = @echo " CXX " $@;
-am__v_CXX_1 =
-CXXLD = $(CXX)
-CXXLINK = $(LIBTOOL) $(AM_V_lt) --tag=CXX $(AM_LIBTOOLFLAGS) \
- $(LIBTOOLFLAGS) --mode=link $(CXXLD) $(AM_CXXFLAGS) \
- $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
-AM_V_CXXLD = $(am__v_CXXLD_@AM_V@)
-am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@)
-am__v_CXXLD_0 = @echo " CXXLD " $@;
-am__v_CXXLD_1 =
-SOURCES = $(tests_SOURCES)
-DIST_SOURCES = $(tests_SOURCES)
+SOURCES = $(test_leapsec_SOURCES) $(test_ntp_prio_q_SOURCES) \
+ $(test_ntp_restrict_SOURCES) $(test_ntp_scanner_SOURCES) \
+ $(test_ntp_signd_SOURCES) $(test_rc_cmdlength_SOURCES)
+DIST_SOURCES = $(test_leapsec_SOURCES) $(test_ntp_prio_q_SOURCES) \
+ $(test_ntp_restrict_SOURCES) $(test_ntp_scanner_SOURCES) \
+ $(test_ntp_signd_SOURCES) $(test_rc_cmdlength_SOURCES)
am__can_run_installinfo = \
case $$AM_UPDATE_INFO_DIR in \
n|no|NO) false;; \
*) (install-info --version) >/dev/null 2>&1;; \
esac
-HEADERS = $(noinst_HEADERS)
am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
# Read a list of newline-separated strings from the standard input,
# and print each of them once, without duplicates. Input order is
@@ -415,7 +469,6 @@ am__set_TESTS_bases = \
bases=`echo $$bases`
RECHECK_LOGS = $(TEST_LOGS)
AM_RECURSIVE_TARGETS = check recheck
-@NTP_CROSSCOMPILE_FALSE@am__EXEEXT_1 = tests$(EXEEXT)
TEST_SUITE_LOG = test-suite.log
TEST_EXTENSIONS = @EXEEXT@ .test
LOG_DRIVER = $(SHELL) \
@@ -452,6 +505,7 @@ AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
+BUILD_THREAD = @BUILD_THREAD@
CALC_TICKADJ_DB = @CALC_TICKADJ_DB@
CALC_TICKADJ_DL = @CALC_TICKADJ_DL@
CALC_TICKADJ_DS = @CALC_TICKADJ_DS@
@@ -460,6 +514,7 @@ CALC_TICKADJ_NI = @CALC_TICKADJ_NI@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
+CFLAGS_LIBEVENT = @CFLAGS_LIBEVENT@
CFLAGS_NTP = @CFLAGS_NTP@
CHUTEST = @CHUTEST@
CONFIG_SHELL = @CONFIG_SHELL@
@@ -521,6 +576,7 @@ LIBTOOL_DEPS = @LIBTOOL_DEPS@
LIPO = @LIPO@
LN_S = @LN_S@
LSCF = @LSCF@
+LTHREAD_LIBS = @LTHREAD_LIBS@
LTLIBOBJS = @LTLIBOBJS@
MAKEINFO = @MAKEINFO@
MAKE_ADJTIMED = @MAKE_ADJTIMED@
@@ -707,31 +763,136 @@ top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
NULL =
-BUILT_SOURCES = check-libntp .deps-ver
-CLEANFILES = check-libntp .deps-ver
+BUILT_SOURCES = $(srcdir)/run-leapsec.c $(srcdir)/run-ntp_prio_q.c \
+ $(srcdir)/run-ntp_restrict.c $(srcdir)/run-rc_cmdlength.c \
+ $(srcdir)/run-t-ntp_signd.c $(NULL) check-libntpd check-libntp \
+ check-libunity .deps-ver
+CLEANFILES = check-libntpd check-libntp check-libunity .deps-ver
+std_unity_list = \
+ $(top_srcdir)/sntp/unity/auto/generate_test_runner.rb \
+ $(NULL)
+
+run_unity = cd $(srcdir) && ruby ../../sntp/unity/auto/generate_test_runner.rb
LDADD = \
+ $(top_builddir)/ntpd/libntpd.a \
$(top_builddir)/libntp/libntp.a \
$(LDADD_LIBNTP) \
$(PTHREAD_LIBS) \
$(LDADD_NTP) \
- $(GTEST_LDFLAGS) \
- $(GTEST_LIBS) \
+ $(NULL)
+
+unity_tests_LDADD = \
+ $(LDADD) \
+ $(top_builddir)/sntp/unity/libunity.a \
+ $(LIBM) \
$(NULL)
AM_CFLAGS = $(CFLAGS_NTP)
-AM_CXXFLAGS = $(GTEST_CXXFLAGS)
AM_CPPFLAGS = $(NTP_INCS) -I$(top_srcdir)/sntp -I$(top_srcdir)/ntpd \
- $(GTEST_CPPFLAGS) $(CPPFLAGS_NTP)
+ -I$(top_srcdir)/tests/libntp $(CPPFLAGS_NTP) \
+ -DUNITY_INCLUDE_CONFIG_H -I$(top_srcdir)/sntp/unity
AM_LDFLAGS = $(LDFLAGS_NTP)
-tests_SOURCES = $(top_srcdir)/sntp/tests_main.cpp \
- ntpdtest.cpp \
- $(top_srcdir)/ntpd/ntp_leapsec.c \
- leapsec.cpp \
- $(NULL)
-noinst_HEADERS = ntpdtest.h \
- $(NULL)
+###
+test_leapsec_CFLAGS = \
+ -I$(top_srcdir)/sntp/unity \
+ $(NULL)
+
+
+# Might need pthread support
+test_leapsec_LDADD = \
+ $(unity_tests_LDADD) \
+ $(NULL)
+
+test_leapsec_SOURCES = \
+ leapsec.c \
+ run-leapsec.c \
+ $(srcdir)/../libntp/test-libntp.c \
+ $(NULL)
+
+
+###
+test_ntp_prio_q_CFLAGS = \
+ -I$(top_srcdir)/sntp/unity \
+ $(NULL)
+
+test_ntp_prio_q_LDADD = \
+ $(unity_tests_LDADD) \
+ ../../ntpd/ntpdsim-ntp_prio_q.o \
+ $(NULL)
+
+test_ntp_prio_q_SOURCES = \
+ ntp_prio_q.c \
+ run-ntp_prio_q.c \
+ $(srcdir)/../libntp/test-libntp.c \
+ $(NULL)
+
+
+###
+test_ntp_restrict_CFLAGS = \
+ -I$(top_srcdir)/sntp/unity \
+ $(NULL)
+
+test_ntp_restrict_LDADD = \
+ $(unity_tests_LDADD) \
+ $(NULL)
+
+test_ntp_restrict_SOURCES = \
+ ntp_restrict.c \
+ run-ntp_restrict.c \
+ $(srcdir)/../libntp/test-libntp.c \
+ $(NULL)
+
+
+###
+test_rc_cmdlength_CFLAGS = \
+ -I$(top_srcdir)/sntp/unity \
+ $(NULL)
+
+test_rc_cmdlength_LDADD = \
+ $(unity_tests_LDADD) \
+ $(NULL)
+
+test_rc_cmdlength_SOURCES = \
+ rc_cmdlength.c \
+ run-rc_cmdlength.c \
+ $(srcdir)/../libntp/test-libntp.c \
+ $(NULL)
+
+
+###
+test_ntp_signd_LDADD = \
+ $(unity_tests_LDADD) \
+ $(top_builddir)/ntpd/ntp_config.o \
+ $(top_builddir)/ntpd/ntp_io.o \
+ $(NULL)
+
+test_ntp_signd_SOURCES = \
+ t-ntp_signd.c \
+ run-t-ntp_signd.c \
+ $(srcdir)/../libntp/test-libntp.c \
+ $(srcdir)/../../ntpd/ntp_signd.c \
+ $(NULL)
+
+
+###
+test_ntp_scanner_CFLAGS = \
+ -I$(top_srcdir)/sntp/unity \
+ $(NULL)
+
+test_ntp_scanner_LDADD = \
+ $(unity_tests_LDADD) \
+ $(top_builddir)/ntpd/ntp_config.o \
+ $(top_builddir)/ntpd/ntp_parser.o \
+ $(NULL)
+test_ntp_scanner_SOURCES = \
+ t-ntp_scanner.c \
+ run-t-ntp_scanner.c \
+ $(srcdir)/../libntp/test-libntp.c \
+ $(NULL)
+
+TESTS = $(am__append_4)
NTP_INCS = -I$(top_srcdir)/include -I$(top_srcdir)/lib/isc/include \
-I$(top_srcdir)/lib/isc/$(LIBISC_PTHREADS_NOTHREADS)/include \
-I$(top_srcdir)/lib/isc/unix/include
@@ -739,7 +900,7 @@ all: $(BUILT_SOURCES)
$(MAKE) $(AM_MAKEFLAGS) all-am
.SUFFIXES:
-.SUFFIXES: .c .cpp .lo .log .o .obj .test .test$(EXEEXT) .trs
+.SUFFIXES: .c .lo .log .o .obj .test .test$(EXEEXT) .trs
$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/depsver.mf $(top_srcdir)/includes.mf $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
@@ -780,9 +941,29 @@ clean-checkPROGRAMS:
echo " rm -f" $$list; \
rm -f $$list
-tests$(EXEEXT): $(tests_OBJECTS) $(tests_DEPENDENCIES) $(EXTRA_tests_DEPENDENCIES)
- @rm -f tests$(EXEEXT)
- $(AM_V_CXXLD)$(CXXLINK) $(tests_OBJECTS) $(tests_LDADD) $(LIBS)
+test-leapsec$(EXEEXT): $(test_leapsec_OBJECTS) $(test_leapsec_DEPENDENCIES) $(EXTRA_test_leapsec_DEPENDENCIES)
+ @rm -f test-leapsec$(EXEEXT)
+ $(AM_V_CCLD)$(test_leapsec_LINK) $(test_leapsec_OBJECTS) $(test_leapsec_LDADD) $(LIBS)
+
+test-ntp_prio_q$(EXEEXT): $(test_ntp_prio_q_OBJECTS) $(test_ntp_prio_q_DEPENDENCIES) $(EXTRA_test_ntp_prio_q_DEPENDENCIES)
+ @rm -f test-ntp_prio_q$(EXEEXT)
+ $(AM_V_CCLD)$(test_ntp_prio_q_LINK) $(test_ntp_prio_q_OBJECTS) $(test_ntp_prio_q_LDADD) $(LIBS)
+
+test-ntp_restrict$(EXEEXT): $(test_ntp_restrict_OBJECTS) $(test_ntp_restrict_DEPENDENCIES) $(EXTRA_test_ntp_restrict_DEPENDENCIES)
+ @rm -f test-ntp_restrict$(EXEEXT)
+ $(AM_V_CCLD)$(test_ntp_restrict_LINK) $(test_ntp_restrict_OBJECTS) $(test_ntp_restrict_LDADD) $(LIBS)
+
+test-ntp_scanner$(EXEEXT): $(test_ntp_scanner_OBJECTS) $(test_ntp_scanner_DEPENDENCIES) $(EXTRA_test_ntp_scanner_DEPENDENCIES)
+ @rm -f test-ntp_scanner$(EXEEXT)
+ $(AM_V_CCLD)$(test_ntp_scanner_LINK) $(test_ntp_scanner_OBJECTS) $(test_ntp_scanner_LDADD) $(LIBS)
+
+test-ntp_signd$(EXEEXT): $(test_ntp_signd_OBJECTS) $(test_ntp_signd_DEPENDENCIES) $(EXTRA_test_ntp_signd_DEPENDENCIES)
+ @rm -f test-ntp_signd$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(test_ntp_signd_OBJECTS) $(test_ntp_signd_LDADD) $(LIBS)
+
+test-rc_cmdlength$(EXEEXT): $(test_rc_cmdlength_OBJECTS) $(test_rc_cmdlength_DEPENDENCIES) $(EXTRA_test_rc_cmdlength_DEPENDENCIES)
+ @rm -f test-rc_cmdlength$(EXEEXT)
+ $(AM_V_CCLD)$(test_rc_cmdlength_LINK) $(test_rc_cmdlength_OBJECTS) $(test_rc_cmdlength_LDADD) $(LIBS)
mostlyclean-compile:
-rm -f *.$(OBJEXT)
@@ -790,10 +971,25 @@ mostlyclean-compile:
distclean-compile:
-rm -f *.tab.c
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/leapsec.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ntp_leapsec.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ntpdtest.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tests_main.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ntp_signd.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/run-t-ntp_signd.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/t-ntp_signd.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-libntp.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_leapsec-leapsec.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_leapsec-run-leapsec.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_leapsec-test-libntp.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_ntp_prio_q-ntp_prio_q.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_ntp_prio_q-run-ntp_prio_q.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_ntp_prio_q-test-libntp.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_ntp_restrict-ntp_restrict.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_ntp_restrict-run-ntp_restrict.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_ntp_restrict-test-libntp.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_ntp_scanner-run-t-ntp_scanner.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_ntp_scanner-t-ntp_scanner.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_ntp_scanner-test-libntp.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_rc_cmdlength-rc_cmdlength.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_rc_cmdlength-run-rc_cmdlength.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_rc_cmdlength-test-libntp.Po@am__quote@
.c.o:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@@ -816,54 +1012,243 @@ distclean-compile:
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
-ntp_leapsec.o: $(top_srcdir)/ntpd/ntp_leapsec.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ntp_leapsec.o -MD -MP -MF $(DEPDIR)/ntp_leapsec.Tpo -c -o ntp_leapsec.o `test -f '$(top_srcdir)/ntpd/ntp_leapsec.c' || echo '$(srcdir)/'`$(top_srcdir)/ntpd/ntp_leapsec.c
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/ntp_leapsec.Tpo $(DEPDIR)/ntp_leapsec.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$(top_srcdir)/ntpd/ntp_leapsec.c' object='ntp_leapsec.o' libtool=no @AMDEPBACKSLASH@
+test_leapsec-leapsec.o: leapsec.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_leapsec_CFLAGS) $(CFLAGS) -MT test_leapsec-leapsec.o -MD -MP -MF $(DEPDIR)/test_leapsec-leapsec.Tpo -c -o test_leapsec-leapsec.o `test -f 'leapsec.c' || echo '$(srcdir)/'`leapsec.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_leapsec-leapsec.Tpo $(DEPDIR)/test_leapsec-leapsec.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='leapsec.c' object='test_leapsec-leapsec.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_leapsec_CFLAGS) $(CFLAGS) -c -o test_leapsec-leapsec.o `test -f 'leapsec.c' || echo '$(srcdir)/'`leapsec.c
+
+test_leapsec-leapsec.obj: leapsec.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_leapsec_CFLAGS) $(CFLAGS) -MT test_leapsec-leapsec.obj -MD -MP -MF $(DEPDIR)/test_leapsec-leapsec.Tpo -c -o test_leapsec-leapsec.obj `if test -f 'leapsec.c'; then $(CYGPATH_W) 'leapsec.c'; else $(CYGPATH_W) '$(srcdir)/leapsec.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_leapsec-leapsec.Tpo $(DEPDIR)/test_leapsec-leapsec.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='leapsec.c' object='test_leapsec-leapsec.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_leapsec_CFLAGS) $(CFLAGS) -c -o test_leapsec-leapsec.obj `if test -f 'leapsec.c'; then $(CYGPATH_W) 'leapsec.c'; else $(CYGPATH_W) '$(srcdir)/leapsec.c'; fi`
+
+test_leapsec-run-leapsec.o: run-leapsec.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_leapsec_CFLAGS) $(CFLAGS) -MT test_leapsec-run-leapsec.o -MD -MP -MF $(DEPDIR)/test_leapsec-run-leapsec.Tpo -c -o test_leapsec-run-leapsec.o `test -f 'run-leapsec.c' || echo '$(srcdir)/'`run-leapsec.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_leapsec-run-leapsec.Tpo $(DEPDIR)/test_leapsec-run-leapsec.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='run-leapsec.c' object='test_leapsec-run-leapsec.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_leapsec_CFLAGS) $(CFLAGS) -c -o test_leapsec-run-leapsec.o `test -f 'run-leapsec.c' || echo '$(srcdir)/'`run-leapsec.c
+
+test_leapsec-run-leapsec.obj: run-leapsec.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_leapsec_CFLAGS) $(CFLAGS) -MT test_leapsec-run-leapsec.obj -MD -MP -MF $(DEPDIR)/test_leapsec-run-leapsec.Tpo -c -o test_leapsec-run-leapsec.obj `if test -f 'run-leapsec.c'; then $(CYGPATH_W) 'run-leapsec.c'; else $(CYGPATH_W) '$(srcdir)/run-leapsec.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_leapsec-run-leapsec.Tpo $(DEPDIR)/test_leapsec-run-leapsec.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='run-leapsec.c' object='test_leapsec-run-leapsec.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_leapsec_CFLAGS) $(CFLAGS) -c -o test_leapsec-run-leapsec.obj `if test -f 'run-leapsec.c'; then $(CYGPATH_W) 'run-leapsec.c'; else $(CYGPATH_W) '$(srcdir)/run-leapsec.c'; fi`
+
+test_leapsec-test-libntp.o: $(srcdir)/../libntp/test-libntp.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_leapsec_CFLAGS) $(CFLAGS) -MT test_leapsec-test-libntp.o -MD -MP -MF $(DEPDIR)/test_leapsec-test-libntp.Tpo -c -o test_leapsec-test-libntp.o `test -f '$(srcdir)/../libntp/test-libntp.c' || echo '$(srcdir)/'`$(srcdir)/../libntp/test-libntp.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_leapsec-test-libntp.Tpo $(DEPDIR)/test_leapsec-test-libntp.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$(srcdir)/../libntp/test-libntp.c' object='test_leapsec-test-libntp.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_leapsec_CFLAGS) $(CFLAGS) -c -o test_leapsec-test-libntp.o `test -f '$(srcdir)/../libntp/test-libntp.c' || echo '$(srcdir)/'`$(srcdir)/../libntp/test-libntp.c
+
+test_leapsec-test-libntp.obj: $(srcdir)/../libntp/test-libntp.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_leapsec_CFLAGS) $(CFLAGS) -MT test_leapsec-test-libntp.obj -MD -MP -MF $(DEPDIR)/test_leapsec-test-libntp.Tpo -c -o test_leapsec-test-libntp.obj `if test -f '$(srcdir)/../libntp/test-libntp.c'; then $(CYGPATH_W) '$(srcdir)/../libntp/test-libntp.c'; else $(CYGPATH_W) '$(srcdir)/$(srcdir)/../libntp/test-libntp.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_leapsec-test-libntp.Tpo $(DEPDIR)/test_leapsec-test-libntp.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$(srcdir)/../libntp/test-libntp.c' object='test_leapsec-test-libntp.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_leapsec_CFLAGS) $(CFLAGS) -c -o test_leapsec-test-libntp.obj `if test -f '$(srcdir)/../libntp/test-libntp.c'; then $(CYGPATH_W) '$(srcdir)/../libntp/test-libntp.c'; else $(CYGPATH_W) '$(srcdir)/$(srcdir)/../libntp/test-libntp.c'; fi`
+
+test_ntp_prio_q-ntp_prio_q.o: ntp_prio_q.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_ntp_prio_q_CFLAGS) $(CFLAGS) -MT test_ntp_prio_q-ntp_prio_q.o -MD -MP -MF $(DEPDIR)/test_ntp_prio_q-ntp_prio_q.Tpo -c -o test_ntp_prio_q-ntp_prio_q.o `test -f 'ntp_prio_q.c' || echo '$(srcdir)/'`ntp_prio_q.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_ntp_prio_q-ntp_prio_q.Tpo $(DEPDIR)/test_ntp_prio_q-ntp_prio_q.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ntp_prio_q.c' object='test_ntp_prio_q-ntp_prio_q.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_ntp_prio_q_CFLAGS) $(CFLAGS) -c -o test_ntp_prio_q-ntp_prio_q.o `test -f 'ntp_prio_q.c' || echo '$(srcdir)/'`ntp_prio_q.c
+
+test_ntp_prio_q-ntp_prio_q.obj: ntp_prio_q.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_ntp_prio_q_CFLAGS) $(CFLAGS) -MT test_ntp_prio_q-ntp_prio_q.obj -MD -MP -MF $(DEPDIR)/test_ntp_prio_q-ntp_prio_q.Tpo -c -o test_ntp_prio_q-ntp_prio_q.obj `if test -f 'ntp_prio_q.c'; then $(CYGPATH_W) 'ntp_prio_q.c'; else $(CYGPATH_W) '$(srcdir)/ntp_prio_q.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_ntp_prio_q-ntp_prio_q.Tpo $(DEPDIR)/test_ntp_prio_q-ntp_prio_q.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ntp_prio_q.c' object='test_ntp_prio_q-ntp_prio_q.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_ntp_prio_q_CFLAGS) $(CFLAGS) -c -o test_ntp_prio_q-ntp_prio_q.obj `if test -f 'ntp_prio_q.c'; then $(CYGPATH_W) 'ntp_prio_q.c'; else $(CYGPATH_W) '$(srcdir)/ntp_prio_q.c'; fi`
+
+test_ntp_prio_q-run-ntp_prio_q.o: run-ntp_prio_q.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_ntp_prio_q_CFLAGS) $(CFLAGS) -MT test_ntp_prio_q-run-ntp_prio_q.o -MD -MP -MF $(DEPDIR)/test_ntp_prio_q-run-ntp_prio_q.Tpo -c -o test_ntp_prio_q-run-ntp_prio_q.o `test -f 'run-ntp_prio_q.c' || echo '$(srcdir)/'`run-ntp_prio_q.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_ntp_prio_q-run-ntp_prio_q.Tpo $(DEPDIR)/test_ntp_prio_q-run-ntp_prio_q.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='run-ntp_prio_q.c' object='test_ntp_prio_q-run-ntp_prio_q.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_ntp_prio_q_CFLAGS) $(CFLAGS) -c -o test_ntp_prio_q-run-ntp_prio_q.o `test -f 'run-ntp_prio_q.c' || echo '$(srcdir)/'`run-ntp_prio_q.c
+
+test_ntp_prio_q-run-ntp_prio_q.obj: run-ntp_prio_q.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_ntp_prio_q_CFLAGS) $(CFLAGS) -MT test_ntp_prio_q-run-ntp_prio_q.obj -MD -MP -MF $(DEPDIR)/test_ntp_prio_q-run-ntp_prio_q.Tpo -c -o test_ntp_prio_q-run-ntp_prio_q.obj `if test -f 'run-ntp_prio_q.c'; then $(CYGPATH_W) 'run-ntp_prio_q.c'; else $(CYGPATH_W) '$(srcdir)/run-ntp_prio_q.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_ntp_prio_q-run-ntp_prio_q.Tpo $(DEPDIR)/test_ntp_prio_q-run-ntp_prio_q.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='run-ntp_prio_q.c' object='test_ntp_prio_q-run-ntp_prio_q.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_ntp_prio_q_CFLAGS) $(CFLAGS) -c -o test_ntp_prio_q-run-ntp_prio_q.obj `if test -f 'run-ntp_prio_q.c'; then $(CYGPATH_W) 'run-ntp_prio_q.c'; else $(CYGPATH_W) '$(srcdir)/run-ntp_prio_q.c'; fi`
+
+test_ntp_prio_q-test-libntp.o: $(srcdir)/../libntp/test-libntp.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_ntp_prio_q_CFLAGS) $(CFLAGS) -MT test_ntp_prio_q-test-libntp.o -MD -MP -MF $(DEPDIR)/test_ntp_prio_q-test-libntp.Tpo -c -o test_ntp_prio_q-test-libntp.o `test -f '$(srcdir)/../libntp/test-libntp.c' || echo '$(srcdir)/'`$(srcdir)/../libntp/test-libntp.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_ntp_prio_q-test-libntp.Tpo $(DEPDIR)/test_ntp_prio_q-test-libntp.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$(srcdir)/../libntp/test-libntp.c' object='test_ntp_prio_q-test-libntp.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_ntp_prio_q_CFLAGS) $(CFLAGS) -c -o test_ntp_prio_q-test-libntp.o `test -f '$(srcdir)/../libntp/test-libntp.c' || echo '$(srcdir)/'`$(srcdir)/../libntp/test-libntp.c
+
+test_ntp_prio_q-test-libntp.obj: $(srcdir)/../libntp/test-libntp.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_ntp_prio_q_CFLAGS) $(CFLAGS) -MT test_ntp_prio_q-test-libntp.obj -MD -MP -MF $(DEPDIR)/test_ntp_prio_q-test-libntp.Tpo -c -o test_ntp_prio_q-test-libntp.obj `if test -f '$(srcdir)/../libntp/test-libntp.c'; then $(CYGPATH_W) '$(srcdir)/../libntp/test-libntp.c'; else $(CYGPATH_W) '$(srcdir)/$(srcdir)/../libntp/test-libntp.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_ntp_prio_q-test-libntp.Tpo $(DEPDIR)/test_ntp_prio_q-test-libntp.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$(srcdir)/../libntp/test-libntp.c' object='test_ntp_prio_q-test-libntp.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_ntp_prio_q_CFLAGS) $(CFLAGS) -c -o test_ntp_prio_q-test-libntp.obj `if test -f '$(srcdir)/../libntp/test-libntp.c'; then $(CYGPATH_W) '$(srcdir)/../libntp/test-libntp.c'; else $(CYGPATH_W) '$(srcdir)/$(srcdir)/../libntp/test-libntp.c'; fi`
+
+test_ntp_restrict-ntp_restrict.o: ntp_restrict.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_ntp_restrict_CFLAGS) $(CFLAGS) -MT test_ntp_restrict-ntp_restrict.o -MD -MP -MF $(DEPDIR)/test_ntp_restrict-ntp_restrict.Tpo -c -o test_ntp_restrict-ntp_restrict.o `test -f 'ntp_restrict.c' || echo '$(srcdir)/'`ntp_restrict.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_ntp_restrict-ntp_restrict.Tpo $(DEPDIR)/test_ntp_restrict-ntp_restrict.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ntp_restrict.c' object='test_ntp_restrict-ntp_restrict.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_ntp_restrict_CFLAGS) $(CFLAGS) -c -o test_ntp_restrict-ntp_restrict.o `test -f 'ntp_restrict.c' || echo '$(srcdir)/'`ntp_restrict.c
+
+test_ntp_restrict-ntp_restrict.obj: ntp_restrict.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_ntp_restrict_CFLAGS) $(CFLAGS) -MT test_ntp_restrict-ntp_restrict.obj -MD -MP -MF $(DEPDIR)/test_ntp_restrict-ntp_restrict.Tpo -c -o test_ntp_restrict-ntp_restrict.obj `if test -f 'ntp_restrict.c'; then $(CYGPATH_W) 'ntp_restrict.c'; else $(CYGPATH_W) '$(srcdir)/ntp_restrict.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_ntp_restrict-ntp_restrict.Tpo $(DEPDIR)/test_ntp_restrict-ntp_restrict.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ntp_restrict.c' object='test_ntp_restrict-ntp_restrict.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_ntp_restrict_CFLAGS) $(CFLAGS) -c -o test_ntp_restrict-ntp_restrict.obj `if test -f 'ntp_restrict.c'; then $(CYGPATH_W) 'ntp_restrict.c'; else $(CYGPATH_W) '$(srcdir)/ntp_restrict.c'; fi`
+
+test_ntp_restrict-run-ntp_restrict.o: run-ntp_restrict.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_ntp_restrict_CFLAGS) $(CFLAGS) -MT test_ntp_restrict-run-ntp_restrict.o -MD -MP -MF $(DEPDIR)/test_ntp_restrict-run-ntp_restrict.Tpo -c -o test_ntp_restrict-run-ntp_restrict.o `test -f 'run-ntp_restrict.c' || echo '$(srcdir)/'`run-ntp_restrict.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_ntp_restrict-run-ntp_restrict.Tpo $(DEPDIR)/test_ntp_restrict-run-ntp_restrict.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='run-ntp_restrict.c' object='test_ntp_restrict-run-ntp_restrict.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_ntp_restrict_CFLAGS) $(CFLAGS) -c -o test_ntp_restrict-run-ntp_restrict.o `test -f 'run-ntp_restrict.c' || echo '$(srcdir)/'`run-ntp_restrict.c
+
+test_ntp_restrict-run-ntp_restrict.obj: run-ntp_restrict.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_ntp_restrict_CFLAGS) $(CFLAGS) -MT test_ntp_restrict-run-ntp_restrict.obj -MD -MP -MF $(DEPDIR)/test_ntp_restrict-run-ntp_restrict.Tpo -c -o test_ntp_restrict-run-ntp_restrict.obj `if test -f 'run-ntp_restrict.c'; then $(CYGPATH_W) 'run-ntp_restrict.c'; else $(CYGPATH_W) '$(srcdir)/run-ntp_restrict.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_ntp_restrict-run-ntp_restrict.Tpo $(DEPDIR)/test_ntp_restrict-run-ntp_restrict.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='run-ntp_restrict.c' object='test_ntp_restrict-run-ntp_restrict.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_ntp_restrict_CFLAGS) $(CFLAGS) -c -o test_ntp_restrict-run-ntp_restrict.obj `if test -f 'run-ntp_restrict.c'; then $(CYGPATH_W) 'run-ntp_restrict.c'; else $(CYGPATH_W) '$(srcdir)/run-ntp_restrict.c'; fi`
+
+test_ntp_restrict-test-libntp.o: $(srcdir)/../libntp/test-libntp.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_ntp_restrict_CFLAGS) $(CFLAGS) -MT test_ntp_restrict-test-libntp.o -MD -MP -MF $(DEPDIR)/test_ntp_restrict-test-libntp.Tpo -c -o test_ntp_restrict-test-libntp.o `test -f '$(srcdir)/../libntp/test-libntp.c' || echo '$(srcdir)/'`$(srcdir)/../libntp/test-libntp.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_ntp_restrict-test-libntp.Tpo $(DEPDIR)/test_ntp_restrict-test-libntp.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$(srcdir)/../libntp/test-libntp.c' object='test_ntp_restrict-test-libntp.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_ntp_restrict_CFLAGS) $(CFLAGS) -c -o test_ntp_restrict-test-libntp.o `test -f '$(srcdir)/../libntp/test-libntp.c' || echo '$(srcdir)/'`$(srcdir)/../libntp/test-libntp.c
+
+test_ntp_restrict-test-libntp.obj: $(srcdir)/../libntp/test-libntp.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_ntp_restrict_CFLAGS) $(CFLAGS) -MT test_ntp_restrict-test-libntp.obj -MD -MP -MF $(DEPDIR)/test_ntp_restrict-test-libntp.Tpo -c -o test_ntp_restrict-test-libntp.obj `if test -f '$(srcdir)/../libntp/test-libntp.c'; then $(CYGPATH_W) '$(srcdir)/../libntp/test-libntp.c'; else $(CYGPATH_W) '$(srcdir)/$(srcdir)/../libntp/test-libntp.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_ntp_restrict-test-libntp.Tpo $(DEPDIR)/test_ntp_restrict-test-libntp.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$(srcdir)/../libntp/test-libntp.c' object='test_ntp_restrict-test-libntp.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_ntp_restrict_CFLAGS) $(CFLAGS) -c -o test_ntp_restrict-test-libntp.obj `if test -f '$(srcdir)/../libntp/test-libntp.c'; then $(CYGPATH_W) '$(srcdir)/../libntp/test-libntp.c'; else $(CYGPATH_W) '$(srcdir)/$(srcdir)/../libntp/test-libntp.c'; fi`
+
+test_ntp_scanner-t-ntp_scanner.o: t-ntp_scanner.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_ntp_scanner_CFLAGS) $(CFLAGS) -MT test_ntp_scanner-t-ntp_scanner.o -MD -MP -MF $(DEPDIR)/test_ntp_scanner-t-ntp_scanner.Tpo -c -o test_ntp_scanner-t-ntp_scanner.o `test -f 't-ntp_scanner.c' || echo '$(srcdir)/'`t-ntp_scanner.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_ntp_scanner-t-ntp_scanner.Tpo $(DEPDIR)/test_ntp_scanner-t-ntp_scanner.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='t-ntp_scanner.c' object='test_ntp_scanner-t-ntp_scanner.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_ntp_scanner_CFLAGS) $(CFLAGS) -c -o test_ntp_scanner-t-ntp_scanner.o `test -f 't-ntp_scanner.c' || echo '$(srcdir)/'`t-ntp_scanner.c
+
+test_ntp_scanner-t-ntp_scanner.obj: t-ntp_scanner.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_ntp_scanner_CFLAGS) $(CFLAGS) -MT test_ntp_scanner-t-ntp_scanner.obj -MD -MP -MF $(DEPDIR)/test_ntp_scanner-t-ntp_scanner.Tpo -c -o test_ntp_scanner-t-ntp_scanner.obj `if test -f 't-ntp_scanner.c'; then $(CYGPATH_W) 't-ntp_scanner.c'; else $(CYGPATH_W) '$(srcdir)/t-ntp_scanner.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_ntp_scanner-t-ntp_scanner.Tpo $(DEPDIR)/test_ntp_scanner-t-ntp_scanner.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='t-ntp_scanner.c' object='test_ntp_scanner-t-ntp_scanner.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_ntp_scanner_CFLAGS) $(CFLAGS) -c -o test_ntp_scanner-t-ntp_scanner.obj `if test -f 't-ntp_scanner.c'; then $(CYGPATH_W) 't-ntp_scanner.c'; else $(CYGPATH_W) '$(srcdir)/t-ntp_scanner.c'; fi`
+
+test_ntp_scanner-run-t-ntp_scanner.o: run-t-ntp_scanner.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_ntp_scanner_CFLAGS) $(CFLAGS) -MT test_ntp_scanner-run-t-ntp_scanner.o -MD -MP -MF $(DEPDIR)/test_ntp_scanner-run-t-ntp_scanner.Tpo -c -o test_ntp_scanner-run-t-ntp_scanner.o `test -f 'run-t-ntp_scanner.c' || echo '$(srcdir)/'`run-t-ntp_scanner.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_ntp_scanner-run-t-ntp_scanner.Tpo $(DEPDIR)/test_ntp_scanner-run-t-ntp_scanner.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='run-t-ntp_scanner.c' object='test_ntp_scanner-run-t-ntp_scanner.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_ntp_scanner_CFLAGS) $(CFLAGS) -c -o test_ntp_scanner-run-t-ntp_scanner.o `test -f 'run-t-ntp_scanner.c' || echo '$(srcdir)/'`run-t-ntp_scanner.c
+
+test_ntp_scanner-run-t-ntp_scanner.obj: run-t-ntp_scanner.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_ntp_scanner_CFLAGS) $(CFLAGS) -MT test_ntp_scanner-run-t-ntp_scanner.obj -MD -MP -MF $(DEPDIR)/test_ntp_scanner-run-t-ntp_scanner.Tpo -c -o test_ntp_scanner-run-t-ntp_scanner.obj `if test -f 'run-t-ntp_scanner.c'; then $(CYGPATH_W) 'run-t-ntp_scanner.c'; else $(CYGPATH_W) '$(srcdir)/run-t-ntp_scanner.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_ntp_scanner-run-t-ntp_scanner.Tpo $(DEPDIR)/test_ntp_scanner-run-t-ntp_scanner.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='run-t-ntp_scanner.c' object='test_ntp_scanner-run-t-ntp_scanner.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_ntp_scanner_CFLAGS) $(CFLAGS) -c -o test_ntp_scanner-run-t-ntp_scanner.obj `if test -f 'run-t-ntp_scanner.c'; then $(CYGPATH_W) 'run-t-ntp_scanner.c'; else $(CYGPATH_W) '$(srcdir)/run-t-ntp_scanner.c'; fi`
+
+test_ntp_scanner-test-libntp.o: $(srcdir)/../libntp/test-libntp.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_ntp_scanner_CFLAGS) $(CFLAGS) -MT test_ntp_scanner-test-libntp.o -MD -MP -MF $(DEPDIR)/test_ntp_scanner-test-libntp.Tpo -c -o test_ntp_scanner-test-libntp.o `test -f '$(srcdir)/../libntp/test-libntp.c' || echo '$(srcdir)/'`$(srcdir)/../libntp/test-libntp.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_ntp_scanner-test-libntp.Tpo $(DEPDIR)/test_ntp_scanner-test-libntp.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$(srcdir)/../libntp/test-libntp.c' object='test_ntp_scanner-test-libntp.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_ntp_scanner_CFLAGS) $(CFLAGS) -c -o test_ntp_scanner-test-libntp.o `test -f '$(srcdir)/../libntp/test-libntp.c' || echo '$(srcdir)/'`$(srcdir)/../libntp/test-libntp.c
+
+test_ntp_scanner-test-libntp.obj: $(srcdir)/../libntp/test-libntp.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_ntp_scanner_CFLAGS) $(CFLAGS) -MT test_ntp_scanner-test-libntp.obj -MD -MP -MF $(DEPDIR)/test_ntp_scanner-test-libntp.Tpo -c -o test_ntp_scanner-test-libntp.obj `if test -f '$(srcdir)/../libntp/test-libntp.c'; then $(CYGPATH_W) '$(srcdir)/../libntp/test-libntp.c'; else $(CYGPATH_W) '$(srcdir)/$(srcdir)/../libntp/test-libntp.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_ntp_scanner-test-libntp.Tpo $(DEPDIR)/test_ntp_scanner-test-libntp.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$(srcdir)/../libntp/test-libntp.c' object='test_ntp_scanner-test-libntp.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_ntp_scanner_CFLAGS) $(CFLAGS) -c -o test_ntp_scanner-test-libntp.obj `if test -f '$(srcdir)/../libntp/test-libntp.c'; then $(CYGPATH_W) '$(srcdir)/../libntp/test-libntp.c'; else $(CYGPATH_W) '$(srcdir)/$(srcdir)/../libntp/test-libntp.c'; fi`
+
+test-libntp.o: $(srcdir)/../libntp/test-libntp.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test-libntp.o -MD -MP -MF $(DEPDIR)/test-libntp.Tpo -c -o test-libntp.o `test -f '$(srcdir)/../libntp/test-libntp.c' || echo '$(srcdir)/'`$(srcdir)/../libntp/test-libntp.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test-libntp.Tpo $(DEPDIR)/test-libntp.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$(srcdir)/../libntp/test-libntp.c' object='test-libntp.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test-libntp.o `test -f '$(srcdir)/../libntp/test-libntp.c' || echo '$(srcdir)/'`$(srcdir)/../libntp/test-libntp.c
+
+test-libntp.obj: $(srcdir)/../libntp/test-libntp.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT test-libntp.obj -MD -MP -MF $(DEPDIR)/test-libntp.Tpo -c -o test-libntp.obj `if test -f '$(srcdir)/../libntp/test-libntp.c'; then $(CYGPATH_W) '$(srcdir)/../libntp/test-libntp.c'; else $(CYGPATH_W) '$(srcdir)/$(srcdir)/../libntp/test-libntp.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test-libntp.Tpo $(DEPDIR)/test-libntp.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$(srcdir)/../libntp/test-libntp.c' object='test-libntp.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o test-libntp.obj `if test -f '$(srcdir)/../libntp/test-libntp.c'; then $(CYGPATH_W) '$(srcdir)/../libntp/test-libntp.c'; else $(CYGPATH_W) '$(srcdir)/$(srcdir)/../libntp/test-libntp.c'; fi`
+
+ntp_signd.o: $(srcdir)/../../ntpd/ntp_signd.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ntp_signd.o -MD -MP -MF $(DEPDIR)/ntp_signd.Tpo -c -o ntp_signd.o `test -f '$(srcdir)/../../ntpd/ntp_signd.c' || echo '$(srcdir)/'`$(srcdir)/../../ntpd/ntp_signd.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/ntp_signd.Tpo $(DEPDIR)/ntp_signd.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$(srcdir)/../../ntpd/ntp_signd.c' object='ntp_signd.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ntp_signd.o `test -f '$(srcdir)/../../ntpd/ntp_signd.c' || echo '$(srcdir)/'`$(srcdir)/../../ntpd/ntp_signd.c
+
+ntp_signd.obj: $(srcdir)/../../ntpd/ntp_signd.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ntp_signd.obj -MD -MP -MF $(DEPDIR)/ntp_signd.Tpo -c -o ntp_signd.obj `if test -f '$(srcdir)/../../ntpd/ntp_signd.c'; then $(CYGPATH_W) '$(srcdir)/../../ntpd/ntp_signd.c'; else $(CYGPATH_W) '$(srcdir)/$(srcdir)/../../ntpd/ntp_signd.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/ntp_signd.Tpo $(DEPDIR)/ntp_signd.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$(srcdir)/../../ntpd/ntp_signd.c' object='ntp_signd.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ntp_signd.obj `if test -f '$(srcdir)/../../ntpd/ntp_signd.c'; then $(CYGPATH_W) '$(srcdir)/../../ntpd/ntp_signd.c'; else $(CYGPATH_W) '$(srcdir)/$(srcdir)/../../ntpd/ntp_signd.c'; fi`
+
+test_rc_cmdlength-rc_cmdlength.o: rc_cmdlength.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_rc_cmdlength_CFLAGS) $(CFLAGS) -MT test_rc_cmdlength-rc_cmdlength.o -MD -MP -MF $(DEPDIR)/test_rc_cmdlength-rc_cmdlength.Tpo -c -o test_rc_cmdlength-rc_cmdlength.o `test -f 'rc_cmdlength.c' || echo '$(srcdir)/'`rc_cmdlength.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_rc_cmdlength-rc_cmdlength.Tpo $(DEPDIR)/test_rc_cmdlength-rc_cmdlength.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rc_cmdlength.c' object='test_rc_cmdlength-rc_cmdlength.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_rc_cmdlength_CFLAGS) $(CFLAGS) -c -o test_rc_cmdlength-rc_cmdlength.o `test -f 'rc_cmdlength.c' || echo '$(srcdir)/'`rc_cmdlength.c
+
+test_rc_cmdlength-rc_cmdlength.obj: rc_cmdlength.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_rc_cmdlength_CFLAGS) $(CFLAGS) -MT test_rc_cmdlength-rc_cmdlength.obj -MD -MP -MF $(DEPDIR)/test_rc_cmdlength-rc_cmdlength.Tpo -c -o test_rc_cmdlength-rc_cmdlength.obj `if test -f 'rc_cmdlength.c'; then $(CYGPATH_W) 'rc_cmdlength.c'; else $(CYGPATH_W) '$(srcdir)/rc_cmdlength.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_rc_cmdlength-rc_cmdlength.Tpo $(DEPDIR)/test_rc_cmdlength-rc_cmdlength.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rc_cmdlength.c' object='test_rc_cmdlength-rc_cmdlength.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_rc_cmdlength_CFLAGS) $(CFLAGS) -c -o test_rc_cmdlength-rc_cmdlength.obj `if test -f 'rc_cmdlength.c'; then $(CYGPATH_W) 'rc_cmdlength.c'; else $(CYGPATH_W) '$(srcdir)/rc_cmdlength.c'; fi`
+
+test_rc_cmdlength-run-rc_cmdlength.o: run-rc_cmdlength.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_rc_cmdlength_CFLAGS) $(CFLAGS) -MT test_rc_cmdlength-run-rc_cmdlength.o -MD -MP -MF $(DEPDIR)/test_rc_cmdlength-run-rc_cmdlength.Tpo -c -o test_rc_cmdlength-run-rc_cmdlength.o `test -f 'run-rc_cmdlength.c' || echo '$(srcdir)/'`run-rc_cmdlength.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_rc_cmdlength-run-rc_cmdlength.Tpo $(DEPDIR)/test_rc_cmdlength-run-rc_cmdlength.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='run-rc_cmdlength.c' object='test_rc_cmdlength-run-rc_cmdlength.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ntp_leapsec.o `test -f '$(top_srcdir)/ntpd/ntp_leapsec.c' || echo '$(srcdir)/'`$(top_srcdir)/ntpd/ntp_leapsec.c
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_rc_cmdlength_CFLAGS) $(CFLAGS) -c -o test_rc_cmdlength-run-rc_cmdlength.o `test -f 'run-rc_cmdlength.c' || echo '$(srcdir)/'`run-rc_cmdlength.c
-ntp_leapsec.obj: $(top_srcdir)/ntpd/ntp_leapsec.c
-@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ntp_leapsec.obj -MD -MP -MF $(DEPDIR)/ntp_leapsec.Tpo -c -o ntp_leapsec.obj `if test -f '$(top_srcdir)/ntpd/ntp_leapsec.c'; then $(CYGPATH_W) '$(top_srcdir)/ntpd/ntp_leapsec.c'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/ntpd/ntp_leapsec.c'; fi`
-@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/ntp_leapsec.Tpo $(DEPDIR)/ntp_leapsec.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$(top_srcdir)/ntpd/ntp_leapsec.c' object='ntp_leapsec.obj' libtool=no @AMDEPBACKSLASH@
+test_rc_cmdlength-run-rc_cmdlength.obj: run-rc_cmdlength.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_rc_cmdlength_CFLAGS) $(CFLAGS) -MT test_rc_cmdlength-run-rc_cmdlength.obj -MD -MP -MF $(DEPDIR)/test_rc_cmdlength-run-rc_cmdlength.Tpo -c -o test_rc_cmdlength-run-rc_cmdlength.obj `if test -f 'run-rc_cmdlength.c'; then $(CYGPATH_W) 'run-rc_cmdlength.c'; else $(CYGPATH_W) '$(srcdir)/run-rc_cmdlength.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_rc_cmdlength-run-rc_cmdlength.Tpo $(DEPDIR)/test_rc_cmdlength-run-rc_cmdlength.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='run-rc_cmdlength.c' object='test_rc_cmdlength-run-rc_cmdlength.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ntp_leapsec.obj `if test -f '$(top_srcdir)/ntpd/ntp_leapsec.c'; then $(CYGPATH_W) '$(top_srcdir)/ntpd/ntp_leapsec.c'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/ntpd/ntp_leapsec.c'; fi`
-
-.cpp.o:
-@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
-@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $<
-
-.cpp.obj:
-@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
-@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
-
-.cpp.lo:
-@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(LTCXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
-@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(LTCXXCOMPILE) -c -o $@ $<
-
-tests_main.o: $(top_srcdir)/sntp/tests_main.cpp
-@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT tests_main.o -MD -MP -MF $(DEPDIR)/tests_main.Tpo -c -o tests_main.o `test -f '$(top_srcdir)/sntp/tests_main.cpp' || echo '$(srcdir)/'`$(top_srcdir)/sntp/tests_main.cpp
-@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/tests_main.Tpo $(DEPDIR)/tests_main.Po
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$(top_srcdir)/sntp/tests_main.cpp' object='tests_main.o' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o tests_main.o `test -f '$(top_srcdir)/sntp/tests_main.cpp' || echo '$(srcdir)/'`$(top_srcdir)/sntp/tests_main.cpp
-
-tests_main.obj: $(top_srcdir)/sntp/tests_main.cpp
-@am__fastdepCXX_TRUE@ $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT tests_main.obj -MD -MP -MF $(DEPDIR)/tests_main.Tpo -c -o tests_main.obj `if test -f '$(top_srcdir)/sntp/tests_main.cpp'; then $(CYGPATH_W) '$(top_srcdir)/sntp/tests_main.cpp'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/sntp/tests_main.cpp'; fi`
-@am__fastdepCXX_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/tests_main.Tpo $(DEPDIR)/tests_main.Po
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@ $(AM_V_CXX)source='$(top_srcdir)/sntp/tests_main.cpp' object='tests_main.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o tests_main.obj `if test -f '$(top_srcdir)/sntp/tests_main.cpp'; then $(CYGPATH_W) '$(top_srcdir)/sntp/tests_main.cpp'; else $(CYGPATH_W) '$(srcdir)/$(top_srcdir)/sntp/tests_main.cpp'; fi`
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_rc_cmdlength_CFLAGS) $(CFLAGS) -c -o test_rc_cmdlength-run-rc_cmdlength.obj `if test -f 'run-rc_cmdlength.c'; then $(CYGPATH_W) 'run-rc_cmdlength.c'; else $(CYGPATH_W) '$(srcdir)/run-rc_cmdlength.c'; fi`
+
+test_rc_cmdlength-test-libntp.o: $(srcdir)/../libntp/test-libntp.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_rc_cmdlength_CFLAGS) $(CFLAGS) -MT test_rc_cmdlength-test-libntp.o -MD -MP -MF $(DEPDIR)/test_rc_cmdlength-test-libntp.Tpo -c -o test_rc_cmdlength-test-libntp.o `test -f '$(srcdir)/../libntp/test-libntp.c' || echo '$(srcdir)/'`$(srcdir)/../libntp/test-libntp.c
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_rc_cmdlength-test-libntp.Tpo $(DEPDIR)/test_rc_cmdlength-test-libntp.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$(srcdir)/../libntp/test-libntp.c' object='test_rc_cmdlength-test-libntp.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_rc_cmdlength_CFLAGS) $(CFLAGS) -c -o test_rc_cmdlength-test-libntp.o `test -f '$(srcdir)/../libntp/test-libntp.c' || echo '$(srcdir)/'`$(srcdir)/../libntp/test-libntp.c
+
+test_rc_cmdlength-test-libntp.obj: $(srcdir)/../libntp/test-libntp.c
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_rc_cmdlength_CFLAGS) $(CFLAGS) -MT test_rc_cmdlength-test-libntp.obj -MD -MP -MF $(DEPDIR)/test_rc_cmdlength-test-libntp.Tpo -c -o test_rc_cmdlength-test-libntp.obj `if test -f '$(srcdir)/../libntp/test-libntp.c'; then $(CYGPATH_W) '$(srcdir)/../libntp/test-libntp.c'; else $(CYGPATH_W) '$(srcdir)/$(srcdir)/../libntp/test-libntp.c'; fi`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/test_rc_cmdlength-test-libntp.Tpo $(DEPDIR)/test_rc_cmdlength-test-libntp.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$(srcdir)/../libntp/test-libntp.c' object='test_rc_cmdlength-test-libntp.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(test_rc_cmdlength_CFLAGS) $(CFLAGS) -c -o test_rc_cmdlength-test-libntp.obj `if test -f '$(srcdir)/../libntp/test-libntp.c'; then $(CYGPATH_W) '$(srcdir)/../libntp/test-libntp.c'; else $(CYGPATH_W) '$(srcdir)/$(srcdir)/../libntp/test-libntp.c'; fi`
mostlyclean-libtool:
-rm -f *.lo
@@ -1064,9 +1449,44 @@ recheck: all $(check_PROGRAMS)
am__force_recheck=am--force-recheck \
TEST_LOGS="$$log_list"; \
exit $$?
-tests.log: tests$(EXEEXT)
- @p='tests$(EXEEXT)'; \
- b='tests'; \
+test-leapsec.log: test-leapsec$(EXEEXT)
+ @p='test-leapsec$(EXEEXT)'; \
+ b='test-leapsec'; \
+ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+ --log-file $$b.log --trs-file $$b.trs \
+ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+ "$$tst" $(AM_TESTS_FD_REDIRECT)
+test-ntp_prio_q.log: test-ntp_prio_q$(EXEEXT)
+ @p='test-ntp_prio_q$(EXEEXT)'; \
+ b='test-ntp_prio_q'; \
+ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+ --log-file $$b.log --trs-file $$b.trs \
+ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+ "$$tst" $(AM_TESTS_FD_REDIRECT)
+test-ntp_restrict.log: test-ntp_restrict$(EXEEXT)
+ @p='test-ntp_restrict$(EXEEXT)'; \
+ b='test-ntp_restrict'; \
+ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+ --log-file $$b.log --trs-file $$b.trs \
+ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+ "$$tst" $(AM_TESTS_FD_REDIRECT)
+test-ntp_scanner.log: test-ntp_scanner$(EXEEXT)
+ @p='test-ntp_scanner$(EXEEXT)'; \
+ b='test-ntp_scanner'; \
+ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+ --log-file $$b.log --trs-file $$b.trs \
+ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+ "$$tst" $(AM_TESTS_FD_REDIRECT)
+test-ntp_signd.log: test-ntp_signd$(EXEEXT)
+ @p='test-ntp_signd$(EXEEXT)'; \
+ b='test-ntp_signd'; \
+ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+ --log-file $$b.log --trs-file $$b.trs \
+ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+ "$$tst" $(AM_TESTS_FD_REDIRECT)
+test-rc_cmdlength.log: test-rc_cmdlength$(EXEEXT)
+ @p='test-rc_cmdlength$(EXEEXT)'; \
+ b='test-rc_cmdlength'; \
$(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
--log-file $$b.log --trs-file $$b.trs \
$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
@@ -1121,7 +1541,7 @@ check-am: all-am
$(MAKE) $(AM_MAKEFLAGS) check-TESTS
check: $(BUILT_SOURCES)
$(MAKE) $(AM_MAKEFLAGS) check-am
-all-am: Makefile $(HEADERS)
+all-am: Makefile
installdirs:
install: $(BUILT_SOURCES)
$(MAKE) $(AM_MAKEFLAGS) install-am
@@ -1249,11 +1669,44 @@ uninstall-am:
.PRECIOUS: Makefile
+$(srcdir)/run-leapsec.c: $(srcdir)/leapsec.c $(std_unity_list)
+ $(run_unity) leapsec.c run-leapsec.c
+
+$(srcdir)/run-ntp_prio_q.c: $(srcdir)/ntp_prio_q.c $(std_unity_list)
+ $(run_unity) ntp_prio_q.c run-ntp_prio_q.c
+
+$(srcdir)/run-ntp_restrict.c: $(srcdir)/ntp_restrict.c $(std_unity_list)
+ $(run_unity) ntp_restrict.c run-ntp_restrict.c
+
+$(srcdir)/run-rc_cmdlength.c: $(srcdir)/rc_cmdlength.c $(std_unity_list)
+ $(run_unity) rc_cmdlength.c run-rc_cmdlength.c
+
+$(srcdir)/run-t-ntp_signd.c: $(srcdir)/t-ntp_signd.c $(std_unity_list)
+ $(run_unity) t-ntp_signd.c run-t-ntp_signd.c
+
+$(srcdir)/run-t-ntp_scanner.c: $(srcdir)/t-ntp_scanner.c $(std_unity_list)
+ $(run_unity) t-ntp_scanner.c run-t-ntp_scanner.c
+
+check-libntpd: ../../ntpd/libntpd.a
+ @echo stamp > $@
+
+../../ntpd/libntpd.a:
+ cd ../../ntpd && $(MAKE) $(AM_MAKEFLAGS) libntpd.a
+
check-libntp: ../../libntp/libntp.a
@echo stamp > $@
../../libntp/libntp.a:
cd ../../libntp && $(MAKE) $(AM_MAKEFLAGS) libntp.a
+
+check-libunity: ../../sntp/unity/libunity.a
+ @echo stamp > $@
+
+../../sntp/unity/libunity.a:
+ cd ../../sntp/unity && $(MAKE) $(AM_MAKEFLAGS) libunity.a
+
+$(top_builddir)/ntpd/ntpdsim-ntp_prio_q.o:
+ cd ../../ntpd/ && $(MAKE) $(AM_MAKEFLAGS) ntpdsim-ntp_prio_q.o
$(DEPDIR)/deps-ver: $(top_srcdir)/deps-ver
@[ -f $@ ] || \
cp $(top_srcdir)/deps-ver $@
diff --git a/contrib/ntp/tests/ntpd/leapsec.cpp b/contrib/ntp/tests/ntpd/leapsec.c
index ada4394..37e4398 100644
--- a/contrib/ntp/tests/ntpd/leapsec.cpp
+++ b/contrib/ntp/tests/ntpd/leapsec.c
@@ -1,13 +1,17 @@
-#include "ntpdtest.h"
+//#include "ntpdtest.h"
+#include "config.h"
+
-extern "C" {
#include "ntp.h"
#include "ntp_calendar.h"
+#include "ntp_stdlib.h"
#include "ntp_leapsec.h"
-}
-#include <string>
-#include <sstream>
+#include "unity.h"
+
+#include <string.h>
+
+#include "test-libntp.h"
static const char leap1 [] =
"#\n"
@@ -239,7 +243,7 @@ int stringreader(void* farg)
static int/*BOOL*/
setup_load_table(
const char * cp,
- int blim=FALSE)
+ int blim)
{
int rc;
leap_table_t * pt = leapsec_get_table(0);
@@ -249,7 +253,7 @@ setup_load_table(
}
static int/*BOOL*/
-setup_clear_table()
+setup_clear_table(void)
{
int rc;
leap_table_t * pt = leapsec_get_table(0);
@@ -260,44 +264,61 @@ setup_clear_table()
}
-class leapsecTest : public ntpdtest {
-protected:
- virtual void SetUp();
- virtual void TearDown();
+char * CalendarToString(const struct calendar cal) {
+ char * ss = malloc (sizeof (char) * 100);
+
+ char buffer[100] ="";
+ sprintf(buffer, "%u", cal.year);
+ strcat(ss,buffer);
+ strcat(ss,"-");
+ sprintf(buffer, "%u", (u_int)cal.month);
+ strcat(ss,buffer);
+ strcat(ss,"-");
+ sprintf(buffer, "%u", (u_int)cal.monthday);
+ strcat(ss,buffer);
+ strcat(ss," (");
+ sprintf(buffer, "%u", (u_int) cal.yearday);
+ strcat(ss,buffer);
+ strcat(ss,") ");
+ sprintf(buffer, "%u", (u_int)cal.hour);
+ strcat(ss,buffer);
+ strcat(ss,":");
+ sprintf(buffer, "%u", (u_int)cal.minute);
+ strcat(ss,buffer);
+ strcat(ss,":");
+ sprintf(buffer, "%u", (u_int)cal.second);
+ strcat(ss,buffer);
+ //ss << cal.year << "-" << (u_int)cal.month << "-" << (u_int)cal.monthday << " (" << cal.yearday << ") " << (u_int)cal.hour << ":" << (u_int)cal.minute << ":" << (u_int)cal.second;
+ return ss;
+}
- std::string CalendarToString(const calendar &cal) {
- std::ostringstream ss;
- ss << cal.year << "-" << (u_int)cal.month << "-" << (u_int)cal.monthday
- << " (" << cal.yearday << ") " << (u_int)cal.hour << ":"
- << (u_int)cal.minute << ":" << (u_int)cal.second;
- return ss.str();
- }
- ::testing::AssertionResult IsEqual(const calendar &expected, const calendar &actual) {
- if (expected.year == actual.year &&
- (expected.yearday == actual.yearday ||
- (expected.month == actual.month &&
- expected.monthday == actual.monthday)) &&
- expected.hour == actual.hour &&
- expected.minute == actual.minute &&
- expected.second == actual.second) {
- return ::testing::AssertionSuccess();
- } else {
- return ::testing::AssertionFailure()
- << "expected: " << CalendarToString(expected) << " but was "
- << CalendarToString(actual);
- }
+int IsEqual(const struct calendar expected, const struct calendar actual) {
+ if (expected.year == actual.year &&
+ (expected.yearday == actual.yearday ||
+ (expected.month == actual.month &&
+ expected.monthday == actual.monthday)) &&
+ expected.hour == actual.hour &&
+ expected.minute == actual.minute &&
+ expected.second == actual.second) {
+ return TRUE;
+ } else {
+ printf("expected: %s but was %s", CalendarToString(expected) ,CalendarToString(actual));
+ return FALSE;
+
}
-};
+}
-void leapsecTest::SetUp()
+//-------------------------
+
+void setUp(void)
{
ntpcal_set_timefunc(timefunc);
settime(1970, 1, 1, 0, 0, 0);
leapsec_ut_pristine();
}
-void leapsecTest::TearDown()
+void tearDown(void)
{
ntpcal_set_timefunc(NULL);
}
@@ -307,45 +328,45 @@ void leapsecTest::TearDown()
// =====================================================================
// ----------------------------------------------------------------------
-TEST_F(leapsecTest, ValidateGood) {
+void test_ValidateGood(void) {
const char *cp = leap_ghash;
int rc = leapsec_validate(stringreader, &cp);
- EXPECT_EQ(LSVALID_GOODHASH, rc);
+ TEST_ASSERT_EQUAL(LSVALID_GOODHASH, rc);
}
// ----------------------------------------------------------------------
-TEST_F(leapsecTest, ValidateNoHash) {
+void test_ValidateNoHash(void) {
const char *cp = leap2;
int rc = leapsec_validate(stringreader, &cp);
- EXPECT_EQ(LSVALID_NOHASH, rc);
+ TEST_ASSERT_EQUAL(LSVALID_NOHASH, rc);
}
// ----------------------------------------------------------------------
-TEST_F(leapsecTest, ValidateBad) {
+void test_ValidateBad(void) {
const char *cp = leap_bhash;
int rc = leapsec_validate(stringreader, &cp);
- EXPECT_EQ(LSVALID_BADHASH, rc);
+ TEST_ASSERT_EQUAL(LSVALID_BADHASH, rc);
}
// ----------------------------------------------------------------------
-TEST_F(leapsecTest, ValidateMalformed) {
+void test_ValidateMalformed(void) {
const char *cp = leap_mhash;
int rc = leapsec_validate(stringreader, &cp);
- EXPECT_EQ(LSVALID_BADFORMAT, rc);
+ TEST_ASSERT_EQUAL(LSVALID_BADFORMAT, rc);
}
// ----------------------------------------------------------------------
-TEST_F(leapsecTest, ValidateMalformedShort) {
+void test_ValidateMalformedShort(void) {
const char *cp = leap_shash;
int rc = leapsec_validate(stringreader, &cp);
- EXPECT_EQ(LSVALID_BADFORMAT, rc);
+ TEST_ASSERT_EQUAL(LSVALID_BADFORMAT, rc);
}
// ----------------------------------------------------------------------
-TEST_F(leapsecTest, ValidateNoLeadZero) {
+void test_ValidateNoLeadZero(void) {
const char *cp = leap_gthash;
int rc = leapsec_validate(stringreader, &cp);
- EXPECT_EQ(LSVALID_GOODHASH, rc);
+ TEST_ASSERT_EQUAL(LSVALID_GOODHASH, rc);
}
// =====================================================================
@@ -354,58 +375,60 @@ TEST_F(leapsecTest, ValidateNoLeadZero) {
// ----------------------------------------------------------------------
// test table selection
-TEST_F(leapsecTest, tableSelect) {
+void test_tableSelect(void) {
leap_table_t *pt1, *pt2, *pt3, *pt4;
pt1 = leapsec_get_table(0);
pt2 = leapsec_get_table(0);
- EXPECT_EQ(pt1, pt2);
+ TEST_ASSERT_EQUAL_MESSAGE(pt1, pt2,"first");
pt1 = leapsec_get_table(1);
pt2 = leapsec_get_table(1);
- EXPECT_EQ(pt1, pt2);
+ TEST_ASSERT_EQUAL_MESSAGE(pt1, pt2,"second");
pt1 = leapsec_get_table(1);
pt2 = leapsec_get_table(0);
- EXPECT_NE(pt1, pt2);
+ TEST_ASSERT_NOT_EQUAL(pt1, pt2);
pt1 = leapsec_get_table(0);
pt2 = leapsec_get_table(1);
- EXPECT_NE(pt1, pt2);
+ TEST_ASSERT_NOT_EQUAL(pt1, pt2);
leapsec_set_table(pt1);
pt2 = leapsec_get_table(0);
pt3 = leapsec_get_table(1);
- EXPECT_EQ(pt1, pt2);
- EXPECT_NE(pt2, pt3);
+ TEST_ASSERT_EQUAL(pt1, pt2);
+ TEST_ASSERT_NOT_EQUAL(pt2, pt3);
pt1 = pt3;
leapsec_set_table(pt1);
pt2 = leapsec_get_table(0);
pt3 = leapsec_get_table(1);
- EXPECT_EQ(pt1, pt2);
- EXPECT_NE(pt2, pt3);
+ TEST_ASSERT_EQUAL(pt1, pt2);
+ TEST_ASSERT_NOT_EQUAL(pt2, pt3);
}
// ----------------------------------------------------------------------
// load file & check expiration
-TEST_F(leapsecTest, loadFileExpire) {
+
+void test_loadFileExpire(void) {
const char *cp = leap1;
int rc;
leap_table_t * pt = leapsec_get_table(0);
rc = leapsec_load(pt, stringreader, &cp, FALSE)
&& leapsec_set_table(pt);
- EXPECT_EQ(1, rc);
+ TEST_ASSERT_EQUAL_MESSAGE(1, rc,"first");
rc = leapsec_expired(3439756800u, NULL);
- EXPECT_EQ(0, rc);
+ TEST_ASSERT_EQUAL(0, rc);
rc = leapsec_expired(3610569601u, NULL);
- EXPECT_EQ(1, rc);
+ TEST_ASSERT_EQUAL(1, rc);
}
// ----------------------------------------------------------------------
// load file & check time-to-live
-TEST_F(leapsecTest, loadFileTTL) {
+
+void test_loadFileTTL(void) {
const char *cp = leap1;
int rc;
leap_table_t * pt = leapsec_get_table(0);
@@ -415,20 +438,20 @@ TEST_F(leapsecTest, loadFileTTL) {
rc = leapsec_load(pt, stringreader, &cp, FALSE)
&& leapsec_set_table(pt);
- ASSERT_EQ(1, rc);
+ TEST_ASSERT_EQUAL(1, rc); //
// exactly 1 day to live
rc = leapsec_daystolive(limit - 86400, &pivot);
- EXPECT_EQ( 1, rc);
+ TEST_ASSERT_EQUAL( 1, rc);
// less than 1 day to live
rc = leapsec_daystolive(limit - 86399, &pivot);
- EXPECT_EQ( 0, rc);
+ TEST_ASSERT_EQUAL( 0, rc);
// hit expiration exactly
rc = leapsec_daystolive(limit, &pivot);
- EXPECT_EQ( 0, rc);
+ TEST_ASSERT_EQUAL( 0, rc);
// expired since 1 sec
rc = leapsec_daystolive(limit + 1, &pivot);
- EXPECT_EQ(-1, rc);
+ TEST_ASSERT_EQUAL(-1, rc);
}
// =====================================================================
@@ -437,199 +460,202 @@ TEST_F(leapsecTest, loadFileTTL) {
// ----------------------------------------------------------------------
// test query in pristine state (bug#2745 misbehaviour)
-TEST_F(leapsecTest, lsQueryPristineState) {
+void test_lsQueryPristineState(void) {
int rc;
leap_result_t qr;
rc = leapsec_query(&qr, lsec2012, NULL);
- EXPECT_EQ(FALSE, rc);
- EXPECT_EQ(0, qr.warped );
- EXPECT_EQ(LSPROX_NOWARN, qr.proximity);
+ TEST_ASSERT_EQUAL(FALSE, rc);
+ TEST_ASSERT_EQUAL(0, qr.warped );
+ TEST_ASSERT_EQUAL(LSPROX_NOWARN, qr.proximity);
}
// ----------------------------------------------------------------------
// ad-hoc jump: leap second at 2009.01.01 -60days
-TEST_F(leapsecTest, ls2009faraway) {
+void test_ls2009faraway(void) {
int rc;
leap_result_t qr;
- rc = setup_load_table(leap1);
- EXPECT_EQ(1, rc);
+ rc = setup_load_table(leap1,FALSE);
+ TEST_ASSERT_EQUAL(1, rc);
// test 60 days before leap. Nothing scheduled or indicated.
rc = leapsec_query(&qr, lsec2009 - 60*SECSPERDAY, NULL);
- EXPECT_EQ(FALSE, rc);
- EXPECT_EQ(33, qr.tai_offs);
- EXPECT_EQ(0, qr.tai_diff);
- EXPECT_EQ(LSPROX_NOWARN, qr.proximity);
+ TEST_ASSERT_EQUAL(FALSE, rc);
+ TEST_ASSERT_EQUAL(33, qr.tai_offs);
+ TEST_ASSERT_EQUAL(0, qr.tai_diff);
+ TEST_ASSERT_EQUAL(LSPROX_NOWARN, qr.proximity);
}
// ----------------------------------------------------------------------
// ad-hoc jump: leap second at 2009.01.01 -1week
-TEST_F(leapsecTest, ls2009weekaway) {
+void test_ls2009weekaway(void) {
int rc;
leap_result_t qr;
- rc = setup_load_table(leap1);
- EXPECT_EQ(1, rc);
+ rc = setup_load_table(leap1,FALSE);
+ TEST_ASSERT_EQUAL(1, rc);
// test 7 days before leap. Leap scheduled, but not yet indicated.
rc = leapsec_query(&qr, lsec2009 - 7*SECSPERDAY, NULL);
- EXPECT_EQ(FALSE, rc);
- EXPECT_EQ(33, qr.tai_offs);
- EXPECT_EQ(1, qr.tai_diff);
- EXPECT_EQ(LSPROX_SCHEDULE, qr.proximity);
+ TEST_ASSERT_EQUAL(FALSE, rc);
+ TEST_ASSERT_EQUAL(33, qr.tai_offs);
+ TEST_ASSERT_EQUAL(1, qr.tai_diff);
+ TEST_ASSERT_EQUAL(LSPROX_SCHEDULE, qr.proximity);
}
// ----------------------------------------------------------------------
// ad-hoc jump: leap second at 2009.01.01 -1hr
-TEST_F(leapsecTest, ls2009houraway) {
+void test_ls2009houraway(void) {
int rc;
leap_result_t qr;
- rc = setup_load_table(leap1);
- EXPECT_EQ(1, rc);
+ rc = setup_load_table(leap1,FALSE);
+ TEST_ASSERT_EQUAL(1, rc);
// test 1 hour before leap. 61 true seconds to go.
rc = leapsec_query(&qr, lsec2009 - SECSPERHR, NULL);
- EXPECT_EQ(FALSE, rc);
- EXPECT_EQ(33, qr.tai_offs);
- EXPECT_EQ(1, qr.tai_diff);
- EXPECT_EQ(LSPROX_ANNOUNCE, qr.proximity);
+ TEST_ASSERT_EQUAL(FALSE, rc);
+ TEST_ASSERT_EQUAL(33, qr.tai_offs);
+ TEST_ASSERT_EQUAL(1, qr.tai_diff);
+ TEST_ASSERT_EQUAL(LSPROX_ANNOUNCE, qr.proximity);
}
// ----------------------------------------------------------------------
// ad-hoc jump: leap second at 2009.01.01 -1sec
-TEST_F(leapsecTest, ls2009secaway) {
+void test_ls2009secaway(void) {
int rc;
leap_result_t qr;
- rc = setup_load_table(leap1);
- EXPECT_EQ(1, rc);
+ rc = setup_load_table(leap1,FALSE);
+ TEST_ASSERT_EQUAL(1, rc);
// test 1 second before leap (last boundary...) 2 true seconds to go.
rc = leapsec_query(&qr, lsec2009 - 1, NULL);
- EXPECT_EQ(FALSE, rc);
- EXPECT_EQ(33, qr.tai_offs);
- EXPECT_EQ(1, qr.tai_diff);
- EXPECT_EQ(LSPROX_ALERT, qr.proximity);
+ TEST_ASSERT_EQUAL(FALSE, rc);
+ TEST_ASSERT_EQUAL(33, qr.tai_offs);
+ TEST_ASSERT_EQUAL(1, qr.tai_diff);
+ TEST_ASSERT_EQUAL(LSPROX_ALERT, qr.proximity);
}
// ----------------------------------------------------------------------
// ad-hoc jump to leap second at 2009.01.01
-TEST_F(leapsecTest, ls2009onspot) {
+void test_ls2009onspot(void) {
int rc;
leap_result_t qr;
- rc = setup_load_table(leap1);
- EXPECT_EQ(1, rc);
+ rc = setup_load_table(leap1,FALSE);
+ TEST_ASSERT_EQUAL(1, rc);
// test on-spot: treat leap second as already gone.
rc = leapsec_query(&qr, lsec2009, NULL);
- EXPECT_EQ(FALSE, rc);
- EXPECT_EQ(34, qr.tai_offs);
- EXPECT_EQ(0, qr.tai_diff);
- EXPECT_EQ(LSPROX_NOWARN, qr.proximity);
+ TEST_ASSERT_EQUAL(FALSE, rc);
+ TEST_ASSERT_EQUAL(34, qr.tai_offs);
+ TEST_ASSERT_EQUAL(0, qr.tai_diff);
+ TEST_ASSERT_EQUAL(LSPROX_NOWARN, qr.proximity);
}
// ----------------------------------------------------------------------
// test handling of the leap second at 2009.01.01 without table
-TEST_F(leapsecTest, ls2009nodata) {
+void test_ls2009nodata(void) {
int rc;
leap_result_t qr;
rc = setup_clear_table();
- EXPECT_EQ(1, rc);
+ TEST_ASSERT_EQUAL(1, rc);
// test on-spot with empty table
rc = leapsec_query(&qr, lsec2009, NULL);
- EXPECT_EQ(FALSE, rc);
- EXPECT_EQ(0, qr.tai_offs);
- EXPECT_EQ(0, qr.tai_diff);
- EXPECT_EQ(LSPROX_NOWARN, qr.proximity);
+ TEST_ASSERT_EQUAL(FALSE, rc);
+ TEST_ASSERT_EQUAL(0, qr.tai_offs);
+ TEST_ASSERT_EQUAL(0, qr.tai_diff);
+ TEST_ASSERT_EQUAL(LSPROX_NOWARN, qr.proximity);
}
// ----------------------------------------------------------------------
// test handling of the leap second at 2009.01.01 with culled data
-TEST_F(leapsecTest, ls2009limdata) {
+void test_ls2009limdata(void) {
int rc;
leap_result_t qr;
rc = setup_load_table(leap1, TRUE);
- EXPECT_EQ(1, rc);
+ TEST_ASSERT_EQUAL(1, rc);
// test on-spot with limited table - this is tricky.
// The table used ends 2012; depending on the build date, the 2009 entry
// might be included or culled. The resulting TAI offset must be either
// 34 or 35 seconds, depending on the build date of the test.
rc = leapsec_query(&qr, lsec2009, NULL);
- EXPECT_EQ(FALSE, rc);
- EXPECT_LE(34, qr.tai_offs);
- EXPECT_GE(35, qr.tai_offs);
- EXPECT_EQ(0, qr.tai_diff);
- EXPECT_EQ(LSPROX_NOWARN, qr.proximity);
+ TEST_ASSERT_EQUAL(FALSE, rc);
+ TEST_ASSERT_TRUE(34 <= qr.tai_offs);
+ TEST_ASSERT_TRUE(35 >= qr.tai_offs);
+ TEST_ASSERT_EQUAL(0, qr.tai_diff);
+ TEST_ASSERT_EQUAL(LSPROX_NOWARN, qr.proximity);
}
// ----------------------------------------------------------------------
// Far-distance forward jump into a transiton window.
-TEST_F(leapsecTest, qryJumpFarAhead) {
+void test_qryJumpFarAhead(void) {
int rc;
leap_result_t qr;
int last, idx;
+ int mode;
- for (int mode=0; mode < 2; ++mode) {
+ for (mode=0; mode < 2; ++mode) {
leapsec_ut_pristine();
rc = setup_load_table(leap1, FALSE);
- EXPECT_EQ(1, rc);
+ TEST_ASSERT_EQUAL(1, rc);
leapsec_electric(mode);
rc = leapsec_query(&qr, lsec2006, NULL);
- EXPECT_EQ(FALSE, rc);
+ TEST_ASSERT_EQUAL(FALSE, rc);
rc = leapsec_query(&qr, lsec2012, NULL);
- EXPECT_EQ(FALSE, rc);
+ TEST_ASSERT_EQUAL(FALSE, rc);
}
}
// ----------------------------------------------------------------------
// Forward jump into the next transition window
-TEST_F(leapsecTest, qryJumpAheadToTransition) {
+void test_qryJumpAheadToTransition(void) {
int rc;
leap_result_t qr;
int last, idx;
+ int mode;
- for (int mode=0; mode < 2; ++mode) {
+ for (mode=0; mode < 2; ++mode) {
leapsec_ut_pristine();
rc = setup_load_table(leap1, FALSE);
- EXPECT_EQ(1, rc);
+ TEST_ASSERT_EQUAL(1, rc);
leapsec_electric(mode);
rc = leapsec_query(&qr, lsec2009-SECSPERDAY, NULL);
- EXPECT_EQ(FALSE, rc);
+ TEST_ASSERT_EQUAL(FALSE, rc);
rc = leapsec_query(&qr, lsec2009+1, NULL);
- EXPECT_EQ(TRUE, rc);
+ TEST_ASSERT_EQUAL(TRUE, rc);
}
}
// ----------------------------------------------------------------------
// Forward jump over the next transition window
-TEST_F(leapsecTest, qryJumpAheadOverTransition) {
+void test_qryJumpAheadOverTransition(void) {
int rc;
leap_result_t qr;
int last, idx;
+ int mode;
- for (int mode=0; mode < 2; ++mode) {
+ for (mode=0; mode < 2; ++mode) {
leapsec_ut_pristine();
rc = setup_load_table(leap1, FALSE);
- EXPECT_EQ(1, rc);
+ TEST_ASSERT_EQUAL(1, rc);
leapsec_electric(mode);
rc = leapsec_query(&qr, lsec2009-SECSPERDAY, NULL);
- EXPECT_EQ(FALSE, rc);
+ TEST_ASSERT_EQUAL(FALSE, rc);
rc = leapsec_query(&qr, lsec2009+5, NULL);
- EXPECT_EQ(FALSE, rc);
+ TEST_ASSERT_EQUAL(FALSE, rc);
}
}
@@ -639,7 +665,7 @@ TEST_F(leapsecTest, qryJumpAheadOverTransition) {
// ----------------------------------------------------------------------
// add dynamic leap second (like from peer/clock)
-TEST_F(leapsecTest, addDynamic) {
+void test_addDynamic(void) {
int rc;
leap_result_t qr;
@@ -655,23 +681,25 @@ TEST_F(leapsecTest, addDynamic) {
};
rc = setup_load_table(leap2, FALSE);
- EXPECT_EQ(1, rc);
+ TEST_ASSERT_EQUAL(1, rc);
leap_table_t * pt = leapsec_get_table(0);
- for (int idx=1; insns[idx]; ++idx) {
+ int idx;
+
+ for (idx=1; insns[idx]; ++idx) {
rc = leapsec_add_dyn(TRUE, insns[idx] - 20*SECSPERDAY - 100, NULL);
- EXPECT_EQ(TRUE, rc);
+ TEST_ASSERT_EQUAL(TRUE, rc);
}
// try to slip in a previous entry
rc = leapsec_add_dyn(TRUE, insns[0] - 20*SECSPERDAY - 100, NULL);
- EXPECT_EQ(FALSE, rc);
+ TEST_ASSERT_EQUAL(FALSE, rc);
//leapsec_dump(pt, (leapsec_dumper)fprintf, stdout);
}
// ----------------------------------------------------------------------
// add fixed leap seconds (like from network packet)
#if 0 /* currently unused -- possibly revived later */
-TEST_F(leapsecTest, addFixed) {
+void FAILtest_addFixed(void) {
int rc;
leap_result_t qr;
@@ -687,26 +715,26 @@ TEST_F(leapsecTest, addFixed) {
};
rc = setup_load_table(leap2, FALSE);
- EXPECT_EQ(1, rc);
-
+ TEST_ASSERT_EQUAL(1, rc);
+ int idx;
leap_table_t * pt = leapsec_get_table(0);
// try to get in BAD time stamps...
- for (int idx=0; insns[idx].tt; ++idx) {
+ for (idx=0; insns[idx].tt; ++idx) {
rc = leapsec_add_fix(
insns[idx].of,
insns[idx].tt - 20*SECSPERDAY - 100,
insns[idx].tt + SECSPERDAY,
NULL);
- EXPECT_EQ(FALSE, rc);
+ TEST_ASSERT_EQUAL(FALSE, rc);
}
// now do it right
- for (int idx=0; insns[idx].tt; ++idx) {
+ for (idx=0; insns[idx].tt; ++idx) {
rc = leapsec_add_fix(
insns[idx].of,
insns[idx].tt,
insns[idx].tt + SECSPERDAY,
NULL);
- EXPECT_EQ(TRUE, rc);
+ TEST_ASSERT_EQUAL(TRUE, rc);
}
// try to slip in a previous entry
rc = leapsec_add_fix(
@@ -714,7 +742,7 @@ TEST_F(leapsecTest, addFixed) {
insns[0].tt,
insns[0].tt + SECSPERDAY,
NULL);
- EXPECT_EQ(FALSE, rc);
+ TEST_ASSERT_EQUAL(FALSE, rc);
//leapsec_dump(pt, (leapsec_dumper)fprintf, stdout);
}
#endif
@@ -722,7 +750,7 @@ TEST_F(leapsecTest, addFixed) {
// ----------------------------------------------------------------------
// add fixed leap seconds (like from network packet)
#if 0 /* currently unused -- possibly revived later */
-TEST_F(leapsecTest, addFixedExtend) {
+void FAILtest_addFixedExtend(void) {
int rc;
leap_result_t qr;
int last, idx;
@@ -734,7 +762,7 @@ TEST_F(leapsecTest, addFixedExtend) {
};
rc = setup_load_table(leap2, FALSE);
- EXPECT_EQ(1, rc);
+ TEST_ASSERT_EQUAL(1, rc);
leap_table_t * pt = leapsec_get_table(FALSE);
for (last=idx=0; insns[idx].tt; ++idx) {
@@ -744,7 +772,7 @@ TEST_F(leapsecTest, addFixedExtend) {
insns[idx].tt,
insns[idx].tt + SECSPERDAY,
NULL);
- EXPECT_EQ(TRUE, rc);
+ TEST_ASSERT_EQUAL(TRUE, rc);
}
// try to extend the expiration of the last entry
@@ -753,7 +781,7 @@ TEST_F(leapsecTest, addFixedExtend) {
insns[last].tt,
insns[last].tt + 128*SECSPERDAY,
NULL);
- EXPECT_EQ(TRUE, rc);
+ TEST_ASSERT_EQUAL(TRUE, rc);
// try to extend the expiration of the last entry with wrong offset
rc = leapsec_add_fix(
@@ -761,7 +789,7 @@ TEST_F(leapsecTest, addFixedExtend) {
insns[last].tt,
insns[last].tt + 129*SECSPERDAY,
NULL);
- EXPECT_EQ(FALSE, rc);
+ TEST_ASSERT_EQUAL(FALSE, rc);
//leapsec_dump(pt, (leapsec_dumper)fprintf, stdout);
}
#endif
@@ -771,7 +799,7 @@ TEST_F(leapsecTest, addFixedExtend) {
// empty table and test queries before / between /after the tabulated
// values.
#if 0 /* currently unused -- possibly revived later */
-TEST_F(leapsecTest, setFixedExtend) {
+void FAILtest_setFixedExtend(void) {
int rc;
leap_result_t qr;
int last, idx;
@@ -790,20 +818,20 @@ TEST_F(leapsecTest, setFixedExtend) {
insns[idx].tt,
insns[idx].tt + 128*SECSPERDAY,
NULL);
- EXPECT_EQ(TRUE, rc);
+ TEST_ASSERT_EQUAL(TRUE, rc);
}
rc = leapsec_query(&qr, insns[0].tt - 86400, NULL);
- EXPECT_EQ(28, qr.tai_offs);
+ TEST_ASSERT_EQUAL(28, qr.tai_offs);
rc = leapsec_query(&qr, insns[0].tt + 86400, NULL);
- EXPECT_EQ(29, qr.tai_offs);
+ TEST_ASSERT_EQUAL(29, qr.tai_offs);
rc = leapsec_query(&qr, insns[1].tt - 86400, NULL);
- EXPECT_EQ(29, qr.tai_offs);
+ TEST_ASSERT_EQUAL(29, qr.tai_offs);
rc = leapsec_query(&qr, insns[1].tt + 86400, NULL);
- EXPECT_EQ(30, qr.tai_offs);
+ TEST_ASSERT_EQUAL(30, qr.tai_offs);
//leapsec_dump(pt, (leapsec_dumper)fprintf, stdout);
}
@@ -815,67 +843,67 @@ TEST_F(leapsecTest, setFixedExtend) {
// ----------------------------------------------------------------------
// Check if the offset can be applied to an empty table ONCE
-TEST_F(leapsecTest, taiEmptyTable) {
+void test_taiEmptyTable(void) {
int rc;
rc = leapsec_autokey_tai(35, lsec2015-30*86400, NULL);
- EXPECT_EQ(TRUE, rc);
+ TEST_ASSERT_EQUAL(TRUE, rc);
rc = leapsec_autokey_tai(35, lsec2015-29*86400, NULL);
- EXPECT_EQ(FALSE, rc);
+ TEST_ASSERT_EQUAL(FALSE, rc);
}
// ----------------------------------------------------------------------
// Check that with fixed entries the operation fails
-TEST_F(leapsecTest, taiTableFixed) {
+void test_taiTableFixed(void) {
int rc;
rc = setup_load_table(leap1, FALSE);
- EXPECT_EQ(1, rc);
+ TEST_ASSERT_EQUAL(1, rc);
rc = leapsec_autokey_tai(35, lsec2015-30*86400, NULL);
- EXPECT_EQ(FALSE, rc);
+ TEST_ASSERT_EQUAL(FALSE, rc);
}
// ----------------------------------------------------------------------
// test adjustment with a dynamic entry already there
-TEST_F(leapsecTest, taiTableDynamic) {
+void test_taiTableDynamic(void) {
int rc;
leap_era_t era;
rc = leapsec_add_dyn(TRUE, lsec2015-20*SECSPERDAY, NULL);
- EXPECT_EQ(TRUE, rc);
+ TEST_ASSERT_EQUAL(TRUE, rc);
leapsec_query_era(&era, lsec2015-10, NULL);
- EXPECT_EQ(0, era.taiof);
+ TEST_ASSERT_EQUAL(0, era.taiof);
leapsec_query_era(&era, lsec2015+10, NULL);
- EXPECT_EQ(1, era.taiof);
+ TEST_ASSERT_EQUAL(1, era.taiof);
rc = leapsec_autokey_tai(35, lsec2015-19*86400, NULL);
- EXPECT_EQ(TRUE, rc);
+ TEST_ASSERT_EQUAL(TRUE, rc);
rc = leapsec_autokey_tai(35, lsec2015-19*86400, NULL);
- EXPECT_EQ(FALSE, rc);
+ TEST_ASSERT_EQUAL(FALSE, rc);
leapsec_query_era(&era, lsec2015-10, NULL);
- EXPECT_EQ(35, era.taiof);
+ TEST_ASSERT_EQUAL(35, era.taiof);
leapsec_query_era(&era, lsec2015+10, NULL);
- EXPECT_EQ(36, era.taiof);
+ TEST_ASSERT_EQUAL(36, era.taiof);
}
// ----------------------------------------------------------------------
// test adjustment with a dynamic entry already there in dead zone
-TEST_F(leapsecTest, taiTableDynamicDeadZone) {
+void test_taiTableDynamicDeadZone(void) {
int rc;
rc = leapsec_add_dyn(TRUE, lsec2015-20*SECSPERDAY, NULL);
- EXPECT_EQ(TRUE, rc);
+ TEST_ASSERT_EQUAL(TRUE, rc);
rc = leapsec_autokey_tai(35, lsec2015-5, NULL);
- EXPECT_EQ(FALSE, rc);
+ TEST_ASSERT_EQUAL(FALSE, rc);
rc = leapsec_autokey_tai(35, lsec2015+5, NULL);
- EXPECT_EQ(FALSE, rc);
+ TEST_ASSERT_EQUAL(FALSE, rc);
}
@@ -885,309 +913,317 @@ TEST_F(leapsecTest, taiTableDynamicDeadZone) {
// ----------------------------------------------------------------------
// leap second insert at 2009.01.01, electric mode
-TEST_F(leapsecTest, ls2009seqInsElectric) {
+void test_ls2009seqInsElectric(void) {
int rc;
leap_result_t qr;
- rc = setup_load_table(leap1);
- EXPECT_EQ(1, rc);
+ rc = setup_load_table(leap1,FALSE);
+ TEST_ASSERT_EQUAL(1, rc);
leapsec_electric(1);
- EXPECT_EQ(1, leapsec_electric(-1));
+ TEST_ASSERT_EQUAL(1, leapsec_electric(-1));
rc = leapsec_query(&qr, lsec2009 - 60*SECSPERDAY, NULL);
- EXPECT_EQ(FALSE, rc);
- EXPECT_EQ(0, qr.warped );
- EXPECT_EQ(LSPROX_NOWARN, qr.proximity);
+ TEST_ASSERT_EQUAL(FALSE, rc);
+ TEST_ASSERT_EQUAL(0, qr.warped );
+ TEST_ASSERT_EQUAL(LSPROX_NOWARN, qr.proximity);
rc = leapsec_query(&qr, lsec2009 - 7*SECSPERDAY, NULL);
- EXPECT_EQ(FALSE, rc);
- EXPECT_EQ(0, qr.warped );
- EXPECT_EQ(LSPROX_SCHEDULE, qr.proximity);
+ TEST_ASSERT_EQUAL(FALSE, rc);
+ TEST_ASSERT_EQUAL(0, qr.warped );
+ TEST_ASSERT_EQUAL(LSPROX_SCHEDULE, qr.proximity);
rc = leapsec_query(&qr, lsec2009 - SECSPERHR, NULL);
- EXPECT_EQ(FALSE, rc);
- EXPECT_EQ(0, qr.warped );
- EXPECT_EQ(LSPROX_ANNOUNCE, qr.proximity);
+ TEST_ASSERT_EQUAL(FALSE, rc);
+ TEST_ASSERT_EQUAL(0, qr.warped );
+ TEST_ASSERT_EQUAL(LSPROX_ANNOUNCE, qr.proximity);
rc = leapsec_query(&qr, lsec2009 - 1, NULL);
- EXPECT_EQ(FALSE, rc);
- EXPECT_EQ(0, qr.warped );
- EXPECT_EQ(LSPROX_ALERT, qr.proximity);
+ TEST_ASSERT_EQUAL(FALSE, rc);
+ TEST_ASSERT_EQUAL(0, qr.warped );
+ TEST_ASSERT_EQUAL(LSPROX_ALERT, qr.proximity);
rc = leapsec_query(&qr, lsec2009, NULL);
- EXPECT_EQ(TRUE, rc);
- EXPECT_EQ(0, qr.warped );
- EXPECT_EQ(LSPROX_NOWARN, qr.proximity);
+ TEST_ASSERT_EQUAL(TRUE, rc);
+ TEST_ASSERT_EQUAL(0, qr.warped );
+ TEST_ASSERT_EQUAL(LSPROX_NOWARN, qr.proximity);
// second call, same time frame: no trigger!
rc = leapsec_query(&qr, lsec2009, NULL);
- EXPECT_EQ(FALSE, rc);
- EXPECT_EQ(0, qr.warped );
- EXPECT_EQ(LSPROX_NOWARN, qr.proximity);
+ TEST_ASSERT_EQUAL(FALSE, rc);
+ TEST_ASSERT_EQUAL(0, qr.warped );
+ TEST_ASSERT_EQUAL(LSPROX_NOWARN, qr.proximity);
}
// ----------------------------------------------------------------------
// leap second insert at 2009.01.01, dumb mode
-TEST_F(leapsecTest, ls2009seqInsDumb) {
+void test_ls2009seqInsDumb(void) {
int rc;
leap_result_t qr;
- rc = setup_load_table(leap1);
- EXPECT_EQ(1, rc);
- EXPECT_EQ(0, leapsec_electric(-1));
+ rc = setup_load_table(leap1,FALSE);
+ TEST_ASSERT_EQUAL(1, rc);
+ TEST_ASSERT_EQUAL(0, leapsec_electric(-1));
rc = leapsec_query(&qr, lsec2009 - 60*SECSPERDAY, NULL);
- EXPECT_EQ(FALSE, rc);
- EXPECT_EQ(0, qr.warped );
- EXPECT_EQ(LSPROX_NOWARN, qr.proximity);
+ TEST_ASSERT_EQUAL(FALSE, rc);
+ TEST_ASSERT_EQUAL(0, qr.warped );
+ TEST_ASSERT_EQUAL(LSPROX_NOWARN, qr.proximity);
rc = leapsec_query(&qr, lsec2009 - 7*SECSPERDAY, NULL);
- EXPECT_EQ(FALSE, rc);
- EXPECT_EQ(0, qr.warped );
- EXPECT_EQ(LSPROX_SCHEDULE, qr.proximity);
+ TEST_ASSERT_EQUAL(FALSE, rc);
+ TEST_ASSERT_EQUAL(0, qr.warped );
+ TEST_ASSERT_EQUAL(LSPROX_SCHEDULE, qr.proximity);
rc = leapsec_query(&qr, lsec2009 - SECSPERHR, NULL);
- EXPECT_EQ(FALSE, rc);
- EXPECT_EQ(0, qr.warped );
- EXPECT_EQ(LSPROX_ANNOUNCE, qr.proximity);
+ TEST_ASSERT_EQUAL(FALSE, rc);
+ TEST_ASSERT_EQUAL(0, qr.warped );
+ TEST_ASSERT_EQUAL(LSPROX_ANNOUNCE, qr.proximity);
rc = leapsec_query(&qr, lsec2009 - 1, NULL);
- EXPECT_EQ(FALSE, rc);
- EXPECT_EQ(0, qr.warped );
- EXPECT_EQ(LSPROX_ALERT, qr.proximity);
+ TEST_ASSERT_EQUAL(FALSE, rc);
+ TEST_ASSERT_EQUAL(0, qr.warped );
+ TEST_ASSERT_EQUAL(LSPROX_ALERT, qr.proximity);
rc = leapsec_query(&qr, lsec2009, NULL);
- EXPECT_EQ(FALSE, rc);
- EXPECT_EQ(0, qr.warped );
- EXPECT_EQ(LSPROX_ALERT, qr.proximity);
+ TEST_ASSERT_EQUAL(FALSE, rc);
+ TEST_ASSERT_EQUAL(0, qr.warped );
+ TEST_ASSERT_EQUAL(LSPROX_ALERT, qr.proximity);
rc = leapsec_query(&qr, lsec2009+1, NULL);
- EXPECT_EQ(TRUE, rc);
- EXPECT_EQ(-1, qr.warped );
- EXPECT_EQ(LSPROX_NOWARN, qr.proximity);
+ TEST_ASSERT_EQUAL(TRUE, rc);
+ TEST_ASSERT_EQUAL(-1, qr.warped );
+ TEST_ASSERT_EQUAL(LSPROX_NOWARN, qr.proximity);
// second call, same time frame: no trigger!
rc = leapsec_query(&qr, lsec2009, NULL);
- EXPECT_EQ(FALSE, rc);
- EXPECT_EQ(0, qr.warped );
- EXPECT_EQ(LSPROX_NOWARN, qr.proximity);
+ TEST_ASSERT_EQUAL(FALSE, rc);
+ TEST_ASSERT_EQUAL(0, qr.warped );
+ TEST_ASSERT_EQUAL(LSPROX_NOWARN, qr.proximity);
}
// ----------------------------------------------------------------------
// fake leap second remove at 2009.01.01, electric mode
-TEST_F(leapsecTest, ls2009seqDelElectric) {
+void test_ls2009seqDelElectric(void) {
int rc;
leap_result_t qr;
- rc = setup_load_table(leap3);
- EXPECT_EQ(1, rc);
+ rc = setup_load_table(leap3,FALSE);
+ TEST_ASSERT_EQUAL(1, rc);
leapsec_electric(1);
- EXPECT_EQ(1, leapsec_electric(-1));
+ TEST_ASSERT_EQUAL(1, leapsec_electric(-1));
rc = leapsec_query(&qr, lsec2009 - 60*SECSPERDAY, NULL);
- EXPECT_EQ(FALSE, rc);
- EXPECT_EQ(0, qr.warped );
- EXPECT_EQ(LSPROX_NOWARN, qr.proximity);
+ TEST_ASSERT_EQUAL(FALSE, rc);
+ TEST_ASSERT_EQUAL(0, qr.warped );
+ TEST_ASSERT_EQUAL(LSPROX_NOWARN, qr.proximity);
rc = leapsec_query(&qr, lsec2009 - 7*SECSPERDAY, NULL);
- EXPECT_EQ(FALSE, rc);
- EXPECT_EQ(0, qr.warped );
- EXPECT_EQ(LSPROX_SCHEDULE, qr.proximity);
+ TEST_ASSERT_EQUAL(FALSE, rc);
+ TEST_ASSERT_EQUAL(0, qr.warped );
+ TEST_ASSERT_EQUAL(LSPROX_SCHEDULE, qr.proximity);
rc = leapsec_query(&qr, lsec2009 - SECSPERHR, NULL);
- EXPECT_EQ(FALSE, rc);
- EXPECT_EQ(0, qr.warped );
- EXPECT_EQ(LSPROX_ANNOUNCE, qr.proximity);
+ TEST_ASSERT_EQUAL(FALSE, rc);
+ TEST_ASSERT_EQUAL(0, qr.warped );
+ TEST_ASSERT_EQUAL(LSPROX_ANNOUNCE, qr.proximity);
rc = leapsec_query(&qr, lsec2009 - 1, NULL);
- EXPECT_EQ(FALSE, rc);
- EXPECT_EQ(0, qr.warped );
- EXPECT_EQ(LSPROX_ALERT, qr.proximity);
+ TEST_ASSERT_EQUAL(FALSE, rc);
+ TEST_ASSERT_EQUAL(0, qr.warped );
+ TEST_ASSERT_EQUAL(LSPROX_ALERT, qr.proximity);
rc = leapsec_query(&qr, lsec2009, NULL);
- EXPECT_EQ(TRUE, rc);
- EXPECT_EQ(0, qr.warped );
- EXPECT_EQ(LSPROX_NOWARN, qr.proximity);
+ TEST_ASSERT_EQUAL(TRUE, rc);
+ TEST_ASSERT_EQUAL(0, qr.warped );
+ TEST_ASSERT_EQUAL(LSPROX_NOWARN, qr.proximity);
// second call, same time frame: no trigger!
rc = leapsec_query(&qr, lsec2009, NULL);
- EXPECT_EQ(FALSE, rc);
- EXPECT_EQ(0, qr.warped );
- EXPECT_EQ(LSPROX_NOWARN, qr.proximity);
+ TEST_ASSERT_EQUAL(FALSE, rc);
+ TEST_ASSERT_EQUAL(0, qr.warped );
+ TEST_ASSERT_EQUAL(LSPROX_NOWARN, qr.proximity);
}
// ----------------------------------------------------------------------
// fake leap second remove at 2009.01.01. dumb mode
-TEST_F(leapsecTest, ls2009seqDelDumb) {
+void test_ls2009seqDelDumb(void) {
int rc;
leap_result_t qr;
- rc = setup_load_table(leap3);
- EXPECT_EQ(1, rc);
- EXPECT_EQ(0, leapsec_electric(-1));
+ rc = setup_load_table(leap3,FALSE);
+ TEST_ASSERT_EQUAL(1, rc);
+ TEST_ASSERT_EQUAL(0, leapsec_electric(-1));
rc = leapsec_query(&qr, lsec2009 - 60*SECSPERDAY, NULL);
- EXPECT_EQ(FALSE, rc);
- EXPECT_EQ(0, qr.warped );
- EXPECT_EQ(LSPROX_NOWARN, qr.proximity);
+ TEST_ASSERT_EQUAL(FALSE, rc);
+ TEST_ASSERT_EQUAL(0, qr.warped );
+ TEST_ASSERT_EQUAL(LSPROX_NOWARN, qr.proximity);
rc = leapsec_query(&qr, lsec2009 - 7*SECSPERDAY, NULL);
- EXPECT_EQ(FALSE, rc);
- EXPECT_EQ(0, qr.warped );
- EXPECT_EQ(LSPROX_SCHEDULE, qr.proximity);
+ TEST_ASSERT_EQUAL(FALSE, rc);
+ TEST_ASSERT_EQUAL(0, qr.warped );
+ TEST_ASSERT_EQUAL(LSPROX_SCHEDULE, qr.proximity);
rc = leapsec_query(&qr, lsec2009 - SECSPERHR, NULL);
- EXPECT_EQ(FALSE, rc);
- EXPECT_EQ(0, qr.warped );
- EXPECT_EQ(LSPROX_ANNOUNCE, qr.proximity);
+ TEST_ASSERT_EQUAL(FALSE, rc);
+ TEST_ASSERT_EQUAL(0, qr.warped );
+ TEST_ASSERT_EQUAL(LSPROX_ANNOUNCE, qr.proximity);
rc = leapsec_query(&qr, lsec2009 - 2, NULL);
- EXPECT_EQ(FALSE, rc);
- EXPECT_EQ(0, qr.warped );
- EXPECT_EQ(LSPROX_ALERT, qr.proximity);
+ TEST_ASSERT_EQUAL(FALSE, rc);
+ TEST_ASSERT_EQUAL(0, qr.warped );
+ TEST_ASSERT_EQUAL(LSPROX_ALERT, qr.proximity);
rc = leapsec_query(&qr, lsec2009 - 1, NULL);
- EXPECT_EQ(TRUE, rc);
- EXPECT_EQ(1, qr.warped );
- EXPECT_EQ(LSPROX_NOWARN, qr.proximity);
+ TEST_ASSERT_EQUAL(TRUE, rc);
+ TEST_ASSERT_EQUAL(1, qr.warped );
+ TEST_ASSERT_EQUAL(LSPROX_NOWARN, qr.proximity);
// second call, same time frame: no trigger!
rc = leapsec_query(&qr, lsec2009, NULL);
- EXPECT_EQ(FALSE, rc);
- EXPECT_EQ(0, qr.warped );
- EXPECT_EQ(LSPROX_NOWARN, qr.proximity);
+ TEST_ASSERT_EQUAL(FALSE, rc);
+ TEST_ASSERT_EQUAL(0, qr.warped );
+ TEST_ASSERT_EQUAL(LSPROX_NOWARN, qr.proximity);
}
// ----------------------------------------------------------------------
// leap second insert at 2012.07.01, electric mode
-TEST_F(leapsecTest, ls2012seqInsElectric) {
+void test_ls2012seqInsElectric(void) {
int rc;
leap_result_t qr;
- rc = setup_load_table(leap1);
- EXPECT_EQ(1, rc);
+ rc = setup_load_table(leap1,FALSE);
+ TEST_ASSERT_EQUAL(1, rc);
leapsec_electric(1);
- EXPECT_EQ(1, leapsec_electric(-1));
+ TEST_ASSERT_EQUAL(1, leapsec_electric(-1));
rc = leapsec_query(&qr, lsec2012 - 60*SECSPERDAY, NULL);
- EXPECT_EQ(FALSE, rc);
- EXPECT_EQ(0, qr.warped );
- EXPECT_EQ(LSPROX_NOWARN, qr.proximity);
+ TEST_ASSERT_EQUAL(FALSE, rc);
+ TEST_ASSERT_EQUAL(0, qr.warped );
+ TEST_ASSERT_EQUAL(LSPROX_NOWARN, qr.proximity);
rc = leapsec_query(&qr, lsec2012 - 7*SECSPERDAY, NULL);
- EXPECT_EQ(FALSE, rc);
- EXPECT_EQ(0, qr.warped );
- EXPECT_EQ(LSPROX_SCHEDULE, qr.proximity);
+ TEST_ASSERT_EQUAL(FALSE, rc);
+ TEST_ASSERT_EQUAL(0, qr.warped );
+ TEST_ASSERT_EQUAL(LSPROX_SCHEDULE, qr.proximity);
rc = leapsec_query(&qr, lsec2012 - SECSPERHR, NULL);
- EXPECT_EQ(FALSE, rc);
- EXPECT_EQ(0, qr.warped );
- EXPECT_EQ(LSPROX_ANNOUNCE, qr.proximity);
+ TEST_ASSERT_EQUAL(FALSE, rc);
+ TEST_ASSERT_EQUAL(0, qr.warped );
+ TEST_ASSERT_EQUAL(LSPROX_ANNOUNCE, qr.proximity);
rc = leapsec_query(&qr, lsec2012 - 1, NULL);
- EXPECT_EQ(FALSE, rc);
- EXPECT_EQ(0, qr.warped );
- EXPECT_EQ(LSPROX_ALERT, qr.proximity);
+ TEST_ASSERT_EQUAL(FALSE, rc);
+ TEST_ASSERT_EQUAL(0, qr.warped );
+ TEST_ASSERT_EQUAL(LSPROX_ALERT, qr.proximity);
rc = leapsec_query(&qr, lsec2012, NULL);
- EXPECT_EQ(TRUE, rc);
- EXPECT_EQ(0, qr.warped );
- EXPECT_EQ(LSPROX_NOWARN, qr.proximity);
+ TEST_ASSERT_EQUAL(TRUE, rc);
+ TEST_ASSERT_EQUAL(0, qr.warped );
+ TEST_ASSERT_EQUAL(LSPROX_NOWARN, qr.proximity);
// second call, same time frame: no trigger!
rc = leapsec_query(&qr, lsec2012, NULL);
- EXPECT_EQ(FALSE, rc);
- EXPECT_EQ(0, qr.warped );
- EXPECT_EQ(LSPROX_NOWARN, qr.proximity);
+ TEST_ASSERT_EQUAL(FALSE, rc);
+ TEST_ASSERT_EQUAL(0, qr.warped );
+ TEST_ASSERT_EQUAL(LSPROX_NOWARN, qr.proximity);
}
// ----------------------------------------------------------------------
// leap second insert at 2012.07.01, dumb mode
-TEST_F(leapsecTest, ls2012seqInsDumb) {
+void test_ls2012seqInsDumb(void) {
int rc;
leap_result_t qr;
- rc = setup_load_table(leap1);
- EXPECT_EQ(1, rc);
- EXPECT_EQ(0, leapsec_electric(-1));
+ rc = setup_load_table(leap1,FALSE);
+ TEST_ASSERT_EQUAL(1, rc);
+ TEST_ASSERT_EQUAL(0, leapsec_electric(-1));
rc = leapsec_query(&qr, lsec2012 - 60*SECSPERDAY, NULL);
- EXPECT_EQ(FALSE, rc);
- EXPECT_EQ(0, qr.warped );
- EXPECT_EQ(LSPROX_NOWARN, qr.proximity);
+ TEST_ASSERT_EQUAL(FALSE, rc);
+ TEST_ASSERT_EQUAL(0, qr.warped );
+ TEST_ASSERT_EQUAL(LSPROX_NOWARN, qr.proximity);
rc = leapsec_query(&qr, lsec2012 - 7*SECSPERDAY, NULL);
- EXPECT_EQ(FALSE, rc);
- EXPECT_EQ(0, qr.warped );
- EXPECT_EQ(LSPROX_SCHEDULE, qr.proximity);
+ TEST_ASSERT_EQUAL(FALSE, rc);
+ TEST_ASSERT_EQUAL(0, qr.warped );
+ TEST_ASSERT_EQUAL(LSPROX_SCHEDULE, qr.proximity);
rc = leapsec_query(&qr, lsec2012 - SECSPERHR, NULL);
- EXPECT_EQ(FALSE, rc);
- EXPECT_EQ(0, qr.warped );
- EXPECT_EQ(LSPROX_ANNOUNCE, qr.proximity);
+ TEST_ASSERT_EQUAL(FALSE, rc);
+ TEST_ASSERT_EQUAL(0, qr.warped );
+ TEST_ASSERT_EQUAL(LSPROX_ANNOUNCE, qr.proximity);
rc = leapsec_query(&qr, lsec2012 - 1, NULL);
- EXPECT_EQ(FALSE, rc);
- EXPECT_EQ(0, qr.warped );
- EXPECT_EQ(LSPROX_ALERT, qr.proximity);
+ TEST_ASSERT_EQUAL(FALSE, rc);
+ TEST_ASSERT_EQUAL(0, qr.warped );
+ TEST_ASSERT_EQUAL(LSPROX_ALERT, qr.proximity);
// This is just 1 sec before transition!
rc = leapsec_query(&qr, lsec2012, NULL);
- EXPECT_EQ(FALSE, rc);
- EXPECT_EQ(0, qr.warped );
- EXPECT_EQ(LSPROX_ALERT, qr.proximity);
+ TEST_ASSERT_EQUAL(FALSE, rc);
+ TEST_ASSERT_EQUAL(0, qr.warped );
+ TEST_ASSERT_EQUAL(LSPROX_ALERT, qr.proximity);
// NOW the insert/backwarp must happen
rc = leapsec_query(&qr, lsec2012+1, NULL);
- EXPECT_EQ(TRUE, rc);
- EXPECT_EQ(-1, qr.warped );
- EXPECT_EQ(LSPROX_NOWARN, qr.proximity);
+ TEST_ASSERT_EQUAL(TRUE, rc);
+ TEST_ASSERT_EQUAL(-1, qr.warped );
+ TEST_ASSERT_EQUAL(LSPROX_NOWARN, qr.proximity);
// second call with transition time: no trigger!
rc = leapsec_query(&qr, lsec2012, NULL);
- EXPECT_EQ(FALSE, rc);
- EXPECT_EQ(0, qr.warped );
- EXPECT_EQ(LSPROX_NOWARN, qr.proximity);
+ TEST_ASSERT_EQUAL(FALSE, rc);
+ TEST_ASSERT_EQUAL(0, qr.warped );
+ TEST_ASSERT_EQUAL(LSPROX_NOWARN, qr.proximity);
}
// ----------------------------------------------------------------------
// test repeated query on empty table in dumb mode
-TEST_F(leapsecTest, lsEmptyTableDumb) {
+void test_lsEmptyTableDumb(void) {
int rc;
leap_result_t qr;
- const time_t pivot(lsec2012);
- const uint32_t t0 (lsec2012 - 10);
- const uint32_t tE (lsec2012 + 10);
+ //const
+ time_t pivot;
+ pivot = lsec2012;
+ // const
+ //time_t pivot(lsec2012);
+ const uint32_t t0 = lsec2012 - 10;
+ const uint32_t tE = lsec2012 + 10;
- EXPECT_EQ(0, leapsec_electric(-1));
+ TEST_ASSERT_EQUAL(0, leapsec_electric(-1));
- for (uint32_t t = t0; t != tE; ++t) {
+ uint32_t t;
+ for (t = t0; t != tE; ++t) {
rc = leapsec_query(&qr, t, &pivot);
- EXPECT_EQ(FALSE, rc);
- EXPECT_EQ(0, qr.warped );
- EXPECT_EQ(LSPROX_NOWARN, qr.proximity);
+ TEST_ASSERT_EQUAL(FALSE, rc);
+ TEST_ASSERT_EQUAL(0, qr.warped );
+ TEST_ASSERT_EQUAL(LSPROX_NOWARN, qr.proximity);
}
}
// ----------------------------------------------------------------------
// test repeated query on empty table in electric mode
-TEST_F(leapsecTest, lsEmptyTableElectric) {
+void test_lsEmptyTableElectric(void) {
int rc;
leap_result_t qr;
leapsec_electric(1);
- EXPECT_EQ(1, leapsec_electric(-1));
+ TEST_ASSERT_EQUAL(1, leapsec_electric(-1));
- const time_t pivot(lsec2012);
- const uint32_t t0 (lsec2012 - 10);
- const uint32_t tE (lsec2012 + 10);
+ //const
+ time_t pivot;//(lsec2012);
+ pivot = lsec2012;
+ const uint32_t t0 = lsec2012 - 10;
+ const uint32_t tE = lsec2012 + 10;
- for (time_t t = t0; t != tE; ++t) {
+ time_t t;
+ for (t = t0; t != tE; ++t) {
rc = leapsec_query(&qr, t, &pivot);
- EXPECT_EQ(FALSE, rc);
- EXPECT_EQ(0, qr.warped );
- EXPECT_EQ(LSPROX_NOWARN, qr.proximity);
+ TEST_ASSERT_EQUAL(FALSE, rc);
+ TEST_ASSERT_EQUAL(0, qr.warped );
+ TEST_ASSERT_EQUAL(LSPROX_NOWARN, qr.proximity);
}
}
diff --git a/contrib/ntp/tests/ntpd/ntp_prio_q.c b/contrib/ntp/tests/ntpd/ntp_prio_q.c
new file mode 100644
index 0000000..c2d4f76
--- /dev/null
+++ b/contrib/ntp/tests/ntpd/ntp_prio_q.c
@@ -0,0 +1,262 @@
+#include "config.h"
+
+#include "ntp.h"
+#include "ntp_calendar.h"
+#include "ntp_stdlib.h"
+
+#include "ntp_prio_q.h"
+
+#include "unity.h"
+
+
+
+#include <string.h>
+/*
+TODO:
+-fix the includes
+-makefile: ntpdsim-ntp_prio_q.o - make sure it's okay
+*/
+
+
+/* helpers */
+
+typedef struct Element
+{
+ char str[37]; // 37 seems like a nice candidate to break stuff
+ int number;
+
+} element;
+
+int
+compare_elements(const void * e1, const void * e2)
+{
+ return ((element*)e1)->number < ((element*)e2)->number;
+}
+
+/* tests */
+
+void
+test_AllocateDeallocateNode(void) {
+ element* e_ptr = debug_get_node(sizeof(element));
+ free_node(e_ptr);
+}
+
+
+void
+test_EmptyQueue(void) {
+ queue* q = create_queue();
+
+ TEST_ASSERT_NOT_NULL(q);
+ TEST_ASSERT_TRUE(empty(q));
+ TEST_ASSERT_NULL(queue_head(q));
+ TEST_ASSERT_NULL(dequeue(q));
+ TEST_ASSERT_EQUAL(0, get_no_of_elements(q));
+
+ destroy_queue(q);
+}
+
+
+void
+test_OneElementQueue(void) {
+ queue* q = create_queue();
+
+ TEST_ASSERT_NOT_NULL(q);
+
+ element e = {"string", 3};
+ element* e_ptr = debug_get_node(sizeof(element));
+ enqueue(q, e_ptr);
+ *e_ptr = e;
+
+ TEST_ASSERT_FALSE(empty(q));
+ TEST_ASSERT_NOT_NULL(queue_head(q));
+ TEST_ASSERT_EQUAL(1, get_no_of_elements(q));
+
+ element* e_ptr_returned = dequeue(q);
+
+ TEST_ASSERT_NOT_NULL(e_ptr_returned);
+ TEST_ASSERT_EQUAL_STRING(e_ptr_returned->str, "string");
+ TEST_ASSERT_EQUAL_PTR(e_ptr_returned, e_ptr);
+ TEST_ASSERT_EQUAL(0, get_no_of_elements(q));
+ TEST_ASSERT_TRUE(empty(q));
+ TEST_ASSERT_NULL(dequeue(q));
+
+ destroy_queue(q);
+}
+
+
+void
+test_MultipleElementQueue(void) {
+ queue* q = create_queue();
+
+ TEST_ASSERT_NOT_NULL(q);
+
+ element *e1_ptr, *e2_ptr, *e3_ptr;
+
+ e1_ptr = (element*)debug_get_node(sizeof(element));
+ e2_ptr = (element*)debug_get_node(sizeof(element));
+ e3_ptr = (element*)debug_get_node(sizeof(element));
+
+ enqueue(q, e1_ptr);
+ enqueue(q, e2_ptr);
+ enqueue(q, e3_ptr);
+
+ TEST_ASSERT_EQUAL(3, get_no_of_elements(q));
+
+ dequeue(q);
+ enqueue(q, e1_ptr);
+
+ TEST_ASSERT_EQUAL(3, get_no_of_elements(q));
+
+ dequeue(q);
+ dequeue(q);
+ enqueue(q, e3_ptr);
+ enqueue(q, e2_ptr);
+
+ TEST_ASSERT_EQUAL_PTR(dequeue(q), e1_ptr);
+ TEST_ASSERT_EQUAL_PTR(dequeue(q), e3_ptr);
+ TEST_ASSERT_EQUAL_PTR(dequeue(q), e2_ptr);
+ TEST_ASSERT_EQUAL(0, get_no_of_elements(q));
+ TEST_ASSERT_NULL(dequeue(q));
+
+ destroy_queue(q);
+}
+
+
+void
+test_CustomOrderQueue(void) {
+ queue* q = debug_create_priority_queue(compare_elements);
+ element *e1_ptr, *e2_ptr, *e3_ptr, *e4_ptr, *e5_ptr, *e6_ptr;
+
+ e1_ptr = (element*)debug_get_node(sizeof(element));
+ e2_ptr = (element*)debug_get_node(sizeof(element));
+ e3_ptr = (element*)debug_get_node(sizeof(element));
+ e4_ptr = (element*)debug_get_node(sizeof(element));
+ e5_ptr = (element*)debug_get_node(sizeof(element));
+ e6_ptr = (element*)debug_get_node(sizeof(element));
+
+ e1_ptr->number = 1;
+ e2_ptr->number = 1;
+ e3_ptr->number = 10;
+ e4_ptr->number = 10;
+ e5_ptr->number = 100;
+ e6_ptr->number = 100;
+
+ enqueue(q, e3_ptr);
+ enqueue(q, e5_ptr);
+ enqueue(q, e2_ptr);
+ enqueue(q, e1_ptr);
+ enqueue(q, e4_ptr);
+ enqueue(q, e6_ptr);
+
+ TEST_ASSERT_EQUAL(((element*)queue_head(q))->number, 100);
+ TEST_ASSERT_EQUAL(((element*)dequeue(q))->number, 100);
+
+ TEST_ASSERT_EQUAL(((element*)queue_head(q))->number, 100);
+ TEST_ASSERT_EQUAL(((element*)dequeue(q))->number, 100);
+
+ TEST_ASSERT_EQUAL(((element*)queue_head(q))->number, 10);
+ TEST_ASSERT_EQUAL(((element*)dequeue(q))->number, 10);
+
+ TEST_ASSERT_EQUAL(((element*)queue_head(q))->number, 10);
+ TEST_ASSERT_EQUAL(((element*)dequeue(q))->number, 10);
+
+ TEST_ASSERT_EQUAL(((element*)queue_head(q))->number, 1);
+ TEST_ASSERT_EQUAL(((element*)dequeue(q))->number, 1);
+
+ TEST_ASSERT_EQUAL(((element*)queue_head(q))->number, 1);
+ TEST_ASSERT_EQUAL(((element*)dequeue(q))->number, 1);
+
+ TEST_ASSERT_TRUE(empty(q));
+
+ destroy_queue(q);
+
+ free_node(e1_ptr);
+ free_node(e2_ptr);
+ free_node(e3_ptr);
+ free_node(e4_ptr);
+ free_node(e5_ptr);
+ free_node(e6_ptr);
+}
+
+
+void
+test_DestroyNonEmptyQueue(void) {
+ queue* q = create_queue();
+ element *e1_ptr, *e2_ptr, *e3_ptr, *e4_ptr, *e5_ptr, *e6_ptr;
+
+ e1_ptr = (element*)debug_get_node(sizeof(element));
+ e2_ptr = (element*)debug_get_node(sizeof(element));
+ e3_ptr = (element*)debug_get_node(sizeof(element));
+ e4_ptr = (element*)debug_get_node(sizeof(element));
+ e5_ptr = (element*)debug_get_node(sizeof(element));
+ e6_ptr = (element*)debug_get_node(sizeof(element));
+
+ enqueue(q, e3_ptr);
+ enqueue(q, e2_ptr);
+ enqueue(q, e4_ptr);
+ enqueue(q, e1_ptr);
+ enqueue(q, e6_ptr);
+ enqueue(q, e5_ptr);
+
+ destroy_queue(q);
+}
+
+void
+test_AppendQueues(void) {
+ queue* q1 = create_queue();
+ queue* q2 = create_queue();
+ queue* q3 = create_queue();
+ queue* q4 = create_queue();
+ queue* q5 = create_queue();
+
+ // append empty queue to empty queue
+ append_queue(q1, q2); // destroys q2
+
+ element *e1_ptr, *e2_ptr, *e3_ptr, *e4_ptr, *e5_ptr, *e6_ptr;
+ e1_ptr = (element*)debug_get_node(sizeof(element));
+ e2_ptr = (element*)debug_get_node(sizeof(element));
+ e3_ptr = (element*)debug_get_node(sizeof(element));
+ e4_ptr = (element*)debug_get_node(sizeof(element));
+ e5_ptr = (element*)debug_get_node(sizeof(element));
+ e6_ptr = (element*)debug_get_node(sizeof(element));
+
+ enqueue(q1, e1_ptr);
+ enqueue(q1, e2_ptr);
+ enqueue(q1, e3_ptr);
+
+
+ // append empty queue to non empty queue
+ append_queue(q1, q3); // destroys q3
+ TEST_ASSERT_EQUAL(3, get_no_of_elements(q1));
+
+ // append non empty queue to empty queue
+ append_queue(q4, q1); // destroys q1
+ TEST_ASSERT_EQUAL(3, get_no_of_elements(q4));
+
+ enqueue(q5, e4_ptr);
+ enqueue(q5, e5_ptr);
+
+ // append non empty queue to non empty queue
+ append_queue(q4, q5); // destroys q5
+ TEST_ASSERT_EQUAL(5, get_no_of_elements(q4));
+
+ dequeue(q4);
+ dequeue(q4);
+ dequeue(q4);
+ dequeue(q4);
+ dequeue(q4);
+
+ free_node(e1_ptr);
+ free_node(e2_ptr);
+ free_node(e3_ptr);
+ free_node(e4_ptr);
+ free_node(e5_ptr);
+
+ TEST_ASSERT_EQUAL(0, get_no_of_elements(q4));
+
+ // destroy_queue(q1); // destroyed already
+ // destroy_queue(q2); // destroyed already
+ // destroy_queue(q3); // destroyed already
+ destroy_queue(q4);
+ // destroy_queue(q5); // destroyed already
+}
diff --git a/contrib/ntp/tests/ntpd/ntp_restrict.c b/contrib/ntp/tests/ntpd/ntp_restrict.c
new file mode 100644
index 0000000..98d6e83
--- /dev/null
+++ b/contrib/ntp/tests/ntpd/ntp_restrict.c
@@ -0,0 +1,198 @@
+#include "config.h"
+
+#include "ntpd.h"
+#include "ntp_lists.h"
+
+#include "unity.h"
+
+/* Helper functions */
+
+sockaddr_u
+create_sockaddr_u(short sin_family, unsigned short sin_port, char* ip_addr) {
+ sockaddr_u sockaddr;
+
+ sockaddr.sa4.sin_family = AF_INET;
+ sockaddr.sa4.sin_port = htons(sin_port);
+ memset(sockaddr.sa4.sin_zero, 0, 8);
+ sockaddr.sa4.sin_addr.s_addr = inet_addr(ip_addr);
+
+ return sockaddr;
+}
+
+
+void
+setUp(void) {
+ init_restrict();
+}
+
+
+tearDown(void) {
+ restrict_u *empty_restrict = malloc(sizeof(restrict_u));
+ memset(empty_restrict, 0, sizeof(restrict_u));
+
+ restrict_u *current;
+
+ do {
+ UNLINK_HEAD_SLIST(current, restrictlist4, link);
+ if (current != NULL)
+ {
+ *current = *empty_restrict;
+ }
+ } while (current != NULL);
+
+ do {
+ UNLINK_HEAD_SLIST(current, restrictlist6, link);
+ if (current != NULL)
+ {
+ *current = *empty_restrict;
+ }
+ } while (current != NULL);
+
+ free(empty_restrict);
+}
+
+
+/* Tests */
+
+
+void
+test_RestrictionsAreEmptyAfterInit(void) {
+
+ restrict_u *rl4 = malloc(sizeof(restrict_u));
+ restrict_u *rl6 = malloc(sizeof(restrict_u));
+
+ memset(rl4, 0, sizeof(restrict_u));
+ memset(rl6, 0, sizeof(restrict_u));
+
+ TEST_ASSERT_EQUAL(rl4->count, restrictlist4->count);
+ TEST_ASSERT_EQUAL(rl4->flags, restrictlist4->flags);
+ TEST_ASSERT_EQUAL(rl4->mflags, restrictlist4->mflags);
+ TEST_ASSERT_EQUAL(rl4->expire, restrictlist4->expire);
+ TEST_ASSERT_EQUAL(rl4->u.v4.addr, restrictlist4->u.v4.addr);
+ TEST_ASSERT_EQUAL(rl4->u.v4.mask, restrictlist4->u.v4.mask);
+
+ TEST_ASSERT_EQUAL(rl6->count, restrictlist6->count);
+ TEST_ASSERT_EQUAL(rl6->flags, restrictlist6->flags);
+ TEST_ASSERT_EQUAL(rl6->mflags, restrictlist6->mflags);
+ TEST_ASSERT_EQUAL(rl6->expire, restrictlist6->expire);
+
+ free(rl4);
+ free(rl6);
+}
+
+
+void
+test_ReturnsCorrectDefaultRestrictions(void) {
+ sockaddr_u sockaddr = create_sockaddr_u(AF_INET,
+ 54321, "63.161.169.137");
+
+ u_short retval = restrictions(&sockaddr);
+
+ TEST_ASSERT_EQUAL(0, retval);
+}
+
+
+void
+test_HackingDefaultRestriction(void) {
+ /*
+ * We change the flag of the default restriction,
+ * and check if restriction() returns that flag
+ */
+
+ const u_short flags = 42;
+
+ sockaddr_u resaddr = create_sockaddr_u(AF_INET,
+ 54321, "0.0.0.0");
+ sockaddr_u resmask = create_sockaddr_u(AF_INET,
+ 54321, "0.0.0.0");
+
+ hack_restrict(RESTRICT_FLAGS, &resaddr, &resmask, 0, flags, 0);
+
+ sockaddr_u sockaddr = create_sockaddr_u(AF_INET,
+ 54321, "111.123.251.124");
+
+ TEST_ASSERT_EQUAL(flags, restrictions(&sockaddr));
+}
+
+
+void
+test_CantRemoveDefaultEntry(void) {
+ sockaddr_u resaddr = create_sockaddr_u(AF_INET, 54321, "0.0.0.0");
+ sockaddr_u resmask = create_sockaddr_u(AF_INET, 54321, "0.0.0.0");
+
+ hack_restrict(RESTRICT_REMOVE, &resaddr, &resmask, 0, 0, 0);
+
+ TEST_ASSERT_EQUAL(0, restrictions(&resaddr));
+}
+
+
+void
+test_AddingNewRestriction(void) {
+ sockaddr_u resaddr = create_sockaddr_u(AF_INET, 54321, "11.22.33.44");
+ sockaddr_u resmask = create_sockaddr_u(AF_INET, 54321, "128.0.0.0");
+
+ const u_short flags = 42;
+
+ hack_restrict(RESTRICT_FLAGS, &resaddr, &resmask, 0, flags, 0);
+
+ TEST_ASSERT_EQUAL(flags, restrictions(&resaddr));
+}
+
+
+void
+test_TheMostFittingRestrictionIsMatched(void) {
+ sockaddr_u resaddr_target = create_sockaddr_u(AF_INET, 54321, "11.22.33.44");
+
+ sockaddr_u resaddr_not_matching = create_sockaddr_u(AF_INET, 54321, "11.99.33.44");
+ sockaddr_u resmask_not_matching = create_sockaddr_u(AF_INET, 54321, "255.255.0.0");
+
+ sockaddr_u resaddr_best_match = create_sockaddr_u(AF_INET, 54321, "11.22.30.20");
+ sockaddr_u resmask_best_match = create_sockaddr_u(AF_INET, 54321, "255.255.0.0");
+
+ /* it also matches, but we prefer the one above, as it's more specific */
+ sockaddr_u resaddr_second_match = create_sockaddr_u(AF_INET, 54321, "11.99.33.44");
+ sockaddr_u resmask_second_match = create_sockaddr_u(AF_INET, 54321, "255.0.0.0");
+
+ hack_restrict(RESTRICT_FLAGS, &resaddr_not_matching, &resmask_not_matching, 0, 11, 0);
+ hack_restrict(RESTRICT_FLAGS, &resaddr_best_match, &resmask_best_match, 0, 22, 0);
+ hack_restrict(RESTRICT_FLAGS, &resaddr_second_match, &resmask_second_match, 0, 128, 0);
+
+ TEST_ASSERT_EQUAL(22, restrictions(&resaddr_target));
+}
+
+
+void
+test_DeletedRestrictionIsNotMatched(void) {
+ sockaddr_u resaddr_target = create_sockaddr_u(AF_INET, 54321, "11.22.33.44");
+
+ sockaddr_u resaddr_not_matching = create_sockaddr_u(AF_INET, 54321, "11.99.33.44");
+ sockaddr_u resmask_not_matching = create_sockaddr_u(AF_INET, 54321, "255.255.0.0");
+
+ sockaddr_u resaddr_best_match = create_sockaddr_u(AF_INET, 54321, "11.22.30.20");
+ sockaddr_u resmask_best_match = create_sockaddr_u(AF_INET, 54321, "255.255.0.0");
+
+ sockaddr_u resaddr_second_match = create_sockaddr_u(AF_INET, 54321, "11.99.33.44");
+ sockaddr_u resmask_second_match = create_sockaddr_u(AF_INET, 54321, "255.0.0.0");
+
+ hack_restrict(RESTRICT_FLAGS, &resaddr_not_matching, &resmask_not_matching, 0, 11, 0);
+ hack_restrict(RESTRICT_FLAGS, &resaddr_best_match, &resmask_best_match, 0, 22, 0);
+ hack_restrict(RESTRICT_FLAGS, &resaddr_second_match, &resmask_second_match, 0, 128, 0);
+
+ /* deleting the best match*/
+ hack_restrict(RESTRICT_REMOVE, &resaddr_best_match, &resmask_best_match, 0, 22, 0);
+
+ TEST_ASSERT_EQUAL(128, restrictions(&resaddr_target));
+}
+
+
+void
+test_RestrictUnflagWorks(void) {
+ sockaddr_u resaddr = create_sockaddr_u(AF_INET, 54321, "11.22.30.20");
+ sockaddr_u resmask = create_sockaddr_u(AF_INET, 54321, "255.255.0.0");
+
+ hack_restrict(RESTRICT_FLAGS, &resaddr, &resmask, 0, 11, 0);
+
+ hack_restrict(RESTRICT_UNFLAG, &resaddr, &resmask, 0, 10, 0);
+
+ TEST_ASSERT_EQUAL(1, restrictions(&resaddr));
+}
diff --git a/contrib/ntp/tests/ntpd/ntpdtest.cpp b/contrib/ntp/tests/ntpd/ntpdtest.cpp
deleted file mode 100644
index 76b3b1a..0000000
--- a/contrib/ntp/tests/ntpd/ntpdtest.cpp
+++ /dev/null
@@ -1,27 +0,0 @@
-#include "ntpdtest.h"
-
-/* This file contains various constants that libntp needs to be set
- * and that is normally defined in ntpd/ntpq/...
- */
-
-u_long current_time = 4; // needed by authkeys. Used only in to calculate lifetime.
-const char *progname = "ntpdtest";
-
-time_t ntpdtest::nowtime = 0;
-
-time_t ntpdtest::timefunc(time_t *ptr)
-{
- if (ptr)
- *ptr = nowtime;
- return nowtime;
-}
-
-void ntpdtest::settime(int y, int m, int d, int H, int M, int S)
-{
-
- time_t days(ntpcal_edate_to_eradays(y-1, m-1, d-1) + 1 - DAY_UNIX_STARTS);
- time_t secs(ntpcal_etime_to_seconds(H, M, S));
-
- nowtime = days * SECSPERDAY + secs;
-}
-
diff --git a/contrib/ntp/tests/ntpd/ntpdtest.h b/contrib/ntp/tests/ntpd/ntpdtest.h
deleted file mode 100644
index cc3172a..0000000
--- a/contrib/ntp/tests/ntpd/ntpdtest.h
+++ /dev/null
@@ -1,15 +0,0 @@
-#include "tests_main.h"
-
-extern "C" {
-#include "ntp_stdlib.h"
-#include "ntp_calendar.h"
-};
-
-class ntpdtest : public ntptest {
-
-protected:
- static time_t timefunc(time_t*);
- static time_t nowtime;
- static void settime(int y, int m, int d, int H, int M, int S);
-
-};
diff --git a/contrib/ntp/tests/ntpd/rc_cmdlength.c b/contrib/ntp/tests/ntpd/rc_cmdlength.c
new file mode 100644
index 0000000..e3d599f
--- /dev/null
+++ b/contrib/ntp/tests/ntpd/rc_cmdlength.c
@@ -0,0 +1,38 @@
+#include "config.h"
+
+#include "ntp.h"
+#include "ntp_calendar.h"
+#include "ntp_stdlib.h"
+
+#include "unity.h"
+
+#include <string.h>
+
+#include "test-libntp.h"
+
+
+void
+test_EvaluateCommandLength(void){
+ size_t length, commandLength;
+ const char *command1 = "Random Command";
+ const char *command2 = "Random Command\t\t\n\t";
+ const char *command3 = "Random\nCommand\t\t\n\t";
+ const char *command4 = "Random Command\t\t\n\t1 2 3";
+
+ length = strlen(command1);
+ commandLength = remoteconfig_cmdlength(command1, command1+length);
+ TEST_ASSERT_EQUAL(14, commandLength );
+
+ length = strlen(command2);
+ commandLength = remoteconfig_cmdlength(command2, command2+length);
+ TEST_ASSERT_EQUAL(14, commandLength );
+
+ length = strlen(command3);
+ commandLength = remoteconfig_cmdlength(command3, command3+length);
+ TEST_ASSERT_EQUAL(6, commandLength );
+
+ length = strlen(command4);
+ commandLength = remoteconfig_cmdlength(command4, command4+length);
+ TEST_ASSERT_EQUAL(16, commandLength );
+
+}
diff --git a/contrib/ntp/tests/ntpd/run-leapsec.c b/contrib/ntp/tests/ntpd/run-leapsec.c
new file mode 100644
index 0000000..c02cfa8
--- /dev/null
+++ b/contrib/ntp/tests/ntpd/run-leapsec.c
@@ -0,0 +1,122 @@
+/* AUTOGENERATED FILE. DO NOT EDIT. */
+
+//=======Test Runner Used To Run Each Test Below=====
+#define RUN_TEST(TestFunc, TestLineNum) \
+{ \
+ Unity.CurrentTestName = #TestFunc; \
+ Unity.CurrentTestLineNumber = TestLineNum; \
+ Unity.NumberOfTests++; \
+ if (TEST_PROTECT()) \
+ { \
+ setUp(); \
+ TestFunc(); \
+ } \
+ if (TEST_PROTECT() && !TEST_IS_IGNORED) \
+ { \
+ tearDown(); \
+ } \
+ UnityConcludeTest(); \
+}
+
+//=======Automagically Detected Files To Include=====
+#include "unity.h"
+#include <setjmp.h>
+#include <stdio.h>
+#include "config.h"
+#include "ntp.h"
+#include "ntp_calendar.h"
+#include "ntp_stdlib.h"
+#include "ntp_leapsec.h"
+#include "test-libntp.h"
+#include <string.h>
+
+//=======External Functions This Runner Calls=====
+extern void setUp(void);
+extern void tearDown(void);
+extern void test_ValidateGood(void);
+extern void test_ValidateNoHash(void);
+extern void test_ValidateBad(void);
+extern void test_ValidateMalformed(void);
+extern void test_ValidateMalformedShort(void);
+extern void test_ValidateNoLeadZero(void);
+extern void test_tableSelect(void);
+extern void test_loadFileExpire(void);
+extern void test_loadFileTTL(void);
+extern void test_lsQueryPristineState(void);
+extern void test_ls2009faraway(void);
+extern void test_ls2009weekaway(void);
+extern void test_ls2009houraway(void);
+extern void test_ls2009secaway(void);
+extern void test_ls2009onspot(void);
+extern void test_ls2009nodata(void);
+extern void test_ls2009limdata(void);
+extern void test_qryJumpFarAhead(void);
+extern void test_qryJumpAheadToTransition(void);
+extern void test_qryJumpAheadOverTransition(void);
+extern void test_addDynamic(void);
+extern void test_taiEmptyTable(void);
+extern void test_taiTableFixed(void);
+extern void test_taiTableDynamic(void);
+extern void test_taiTableDynamicDeadZone(void);
+extern void test_ls2009seqInsElectric(void);
+extern void test_ls2009seqInsDumb(void);
+extern void test_ls2009seqDelElectric(void);
+extern void test_ls2009seqDelDumb(void);
+extern void test_ls2012seqInsElectric(void);
+extern void test_ls2012seqInsDumb(void);
+extern void test_lsEmptyTableDumb(void);
+extern void test_lsEmptyTableElectric(void);
+
+
+//=======Test Reset Option=====
+void resetTest(void);
+void resetTest(void)
+{
+ tearDown();
+ setUp();
+}
+
+char const *progname;
+
+
+//=======MAIN=====
+int main(int argc, char *argv[])
+{
+ progname = argv[0];
+ UnityBegin("leapsec.c");
+ RUN_TEST(test_ValidateGood, 331);
+ RUN_TEST(test_ValidateNoHash, 338);
+ RUN_TEST(test_ValidateBad, 345);
+ RUN_TEST(test_ValidateMalformed, 352);
+ RUN_TEST(test_ValidateMalformedShort, 359);
+ RUN_TEST(test_ValidateNoLeadZero, 366);
+ RUN_TEST(test_tableSelect, 378);
+ RUN_TEST(test_loadFileExpire, 414);
+ RUN_TEST(test_loadFileTTL, 431);
+ RUN_TEST(test_lsQueryPristineState, 463);
+ RUN_TEST(test_ls2009faraway, 475);
+ RUN_TEST(test_ls2009weekaway, 492);
+ RUN_TEST(test_ls2009houraway, 509);
+ RUN_TEST(test_ls2009secaway, 526);
+ RUN_TEST(test_ls2009onspot, 543);
+ RUN_TEST(test_ls2009nodata, 560);
+ RUN_TEST(test_ls2009limdata, 577);
+ RUN_TEST(test_qryJumpFarAhead, 598);
+ RUN_TEST(test_qryJumpAheadToTransition, 620);
+ RUN_TEST(test_qryJumpAheadOverTransition, 642);
+ RUN_TEST(test_addDynamic, 668);
+ RUN_TEST(test_taiEmptyTable, 846);
+ RUN_TEST(test_taiTableFixed, 858);
+ RUN_TEST(test_taiTableDynamic, 870);
+ RUN_TEST(test_taiTableDynamicDeadZone, 896);
+ RUN_TEST(test_ls2009seqInsElectric, 916);
+ RUN_TEST(test_ls2009seqInsDumb, 959);
+ RUN_TEST(test_ls2009seqDelElectric, 1007);
+ RUN_TEST(test_ls2009seqDelDumb, 1050);
+ RUN_TEST(test_ls2012seqInsElectric, 1092);
+ RUN_TEST(test_ls2012seqInsDumb, 1135);
+ RUN_TEST(test_lsEmptyTableDumb, 1184);
+ RUN_TEST(test_lsEmptyTableElectric, 1209);
+
+ return (UnityEnd());
+}
diff --git a/contrib/ntp/tests/ntpd/run-ntp_prio_q.c b/contrib/ntp/tests/ntpd/run-ntp_prio_q.c
new file mode 100644
index 0000000..35af443
--- /dev/null
+++ b/contrib/ntp/tests/ntpd/run-ntp_prio_q.c
@@ -0,0 +1,69 @@
+/* AUTOGENERATED FILE. DO NOT EDIT. */
+
+//=======Test Runner Used To Run Each Test Below=====
+#define RUN_TEST(TestFunc, TestLineNum) \
+{ \
+ Unity.CurrentTestName = #TestFunc; \
+ Unity.CurrentTestLineNumber = TestLineNum; \
+ Unity.NumberOfTests++; \
+ if (TEST_PROTECT()) \
+ { \
+ setUp(); \
+ TestFunc(); \
+ } \
+ if (TEST_PROTECT() && !TEST_IS_IGNORED) \
+ { \
+ tearDown(); \
+ } \
+ UnityConcludeTest(); \
+}
+
+//=======Automagically Detected Files To Include=====
+#include "unity.h"
+#include <setjmp.h>
+#include <stdio.h>
+#include "config.h"
+#include "ntp.h"
+#include "ntp_calendar.h"
+#include "ntp_stdlib.h"
+#include "ntp_prio_q.h"
+#include <string.h>
+
+//=======External Functions This Runner Calls=====
+extern void setUp(void);
+extern void tearDown(void);
+extern void test_AllocateDeallocateNode(void);
+extern void test_EmptyQueue(void);
+extern void test_OneElementQueue(void);
+extern void test_MultipleElementQueue(void);
+extern void test_CustomOrderQueue(void);
+extern void test_DestroyNonEmptyQueue(void);
+extern void test_AppendQueues(void);
+
+
+//=======Test Reset Option=====
+void resetTest(void);
+void resetTest(void)
+{
+ tearDown();
+ setUp();
+}
+
+char const *progname;
+
+
+//=======MAIN=====
+int main(int argc, char *argv[])
+{
+ progname = argv[0];
+ UnityBegin("ntp_prio_q.c");
+ RUN_TEST(test_AllocateDeallocateNode, 39);
+ RUN_TEST(test_EmptyQueue, 46);
+ RUN_TEST(test_OneElementQueue, 60);
+ RUN_TEST(test_MultipleElementQueue, 88);
+ RUN_TEST(test_CustomOrderQueue, 126);
+ RUN_TEST(test_DestroyNonEmptyQueue, 183);
+ RUN_TEST(test_AppendQueues, 205);
+
+ return (UnityEnd());
+}
diff --git a/contrib/ntp/tests/ntpd/run-ntp_restrict.c b/contrib/ntp/tests/ntpd/run-ntp_restrict.c
new file mode 100644
index 0000000..0d945eb
--- /dev/null
+++ b/contrib/ntp/tests/ntpd/run-ntp_restrict.c
@@ -0,0 +1,68 @@
+/* AUTOGENERATED FILE. DO NOT EDIT. */
+
+//=======Test Runner Used To Run Each Test Below=====
+#define RUN_TEST(TestFunc, TestLineNum) \
+{ \
+ Unity.CurrentTestName = #TestFunc; \
+ Unity.CurrentTestLineNumber = TestLineNum; \
+ Unity.NumberOfTests++; \
+ if (TEST_PROTECT()) \
+ { \
+ setUp(); \
+ TestFunc(); \
+ } \
+ if (TEST_PROTECT() && !TEST_IS_IGNORED) \
+ { \
+ tearDown(); \
+ } \
+ UnityConcludeTest(); \
+}
+
+//=======Automagically Detected Files To Include=====
+#include "unity.h"
+#include <setjmp.h>
+#include <stdio.h>
+#include "config.h"
+#include "ntpd.h"
+#include "ntp_lists.h"
+
+//=======External Functions This Runner Calls=====
+extern void setUp(void);
+extern void tearDown(void);
+extern void test_RestrictionsAreEmptyAfterInit(void);
+extern void test_ReturnsCorrectDefaultRestrictions(void);
+extern void test_HackingDefaultRestriction(void);
+extern void test_CantRemoveDefaultEntry(void);
+extern void test_AddingNewRestriction(void);
+extern void test_TheMostFittingRestrictionIsMatched(void);
+extern void test_DeletedRestrictionIsNotMatched(void);
+extern void test_RestrictUnflagWorks(void);
+
+
+//=======Test Reset Option=====
+void resetTest(void);
+void resetTest(void)
+{
+ tearDown();
+ setUp();
+}
+
+char const *progname;
+
+
+//=======MAIN=====
+int main(int argc, char *argv[])
+{
+ progname = argv[0];
+ UnityBegin("ntp_restrict.c");
+ RUN_TEST(test_RestrictionsAreEmptyAfterInit, 59);
+ RUN_TEST(test_ReturnsCorrectDefaultRestrictions, 85);
+ RUN_TEST(test_HackingDefaultRestriction, 96);
+ RUN_TEST(test_CantRemoveDefaultEntry, 119);
+ RUN_TEST(test_AddingNewRestriction, 130);
+ RUN_TEST(test_TheMostFittingRestrictionIsMatched, 143);
+ RUN_TEST(test_DeletedRestrictionIsNotMatched, 165);
+ RUN_TEST(test_RestrictUnflagWorks, 189);
+
+ return (UnityEnd());
+}
diff --git a/contrib/ntp/tests/ntpd/run-rc_cmdlength.c b/contrib/ntp/tests/ntpd/run-rc_cmdlength.c
new file mode 100644
index 0000000..c6fb7cc
--- /dev/null
+++ b/contrib/ntp/tests/ntpd/run-rc_cmdlength.c
@@ -0,0 +1,57 @@
+/* AUTOGENERATED FILE. DO NOT EDIT. */
+
+//=======Test Runner Used To Run Each Test Below=====
+#define RUN_TEST(TestFunc, TestLineNum) \
+{ \
+ Unity.CurrentTestName = #TestFunc; \
+ Unity.CurrentTestLineNumber = TestLineNum; \
+ Unity.NumberOfTests++; \
+ if (TEST_PROTECT()) \
+ { \
+ setUp(); \
+ TestFunc(); \
+ } \
+ if (TEST_PROTECT() && !TEST_IS_IGNORED) \
+ { \
+ tearDown(); \
+ } \
+ UnityConcludeTest(); \
+}
+
+//=======Automagically Detected Files To Include=====
+#include "unity.h"
+#include <setjmp.h>
+#include <stdio.h>
+#include "config.h"
+#include "ntp.h"
+#include "ntp_calendar.h"
+#include "ntp_stdlib.h"
+#include "test-libntp.h"
+#include <string.h>
+
+//=======External Functions This Runner Calls=====
+extern void setUp(void);
+extern void tearDown(void);
+extern void test_EvaluateCommandLength(void);
+
+
+//=======Test Reset Option=====
+void resetTest(void);
+void resetTest(void)
+{
+ tearDown();
+ setUp();
+}
+
+char const *progname;
+
+
+//=======MAIN=====
+int main(int argc, char *argv[])
+{
+ progname = argv[0];
+ UnityBegin("rc_cmdlength.c");
+ RUN_TEST(test_EvaluateCommandLength, 15);
+
+ return (UnityEnd());
+}
diff --git a/contrib/ntp/tests/ntpd/run-t-ntp_scanner.c b/contrib/ntp/tests/ntpd/run-t-ntp_scanner.c
new file mode 100644
index 0000000..62d3ed3
--- /dev/null
+++ b/contrib/ntp/tests/ntpd/run-t-ntp_scanner.c
@@ -0,0 +1,72 @@
+/* AUTOGENERATED FILE. DO NOT EDIT. */
+
+//=======Test Runner Used To Run Each Test Below=====
+#define RUN_TEST(TestFunc, TestLineNum) \
+{ \
+ Unity.CurrentTestName = #TestFunc; \
+ Unity.CurrentTestLineNumber = TestLineNum; \
+ Unity.NumberOfTests++; \
+ if (TEST_PROTECT()) \
+ { \
+ setUp(); \
+ TestFunc(); \
+ } \
+ if (TEST_PROTECT() && !TEST_IS_IGNORED) \
+ { \
+ tearDown(); \
+ } \
+ UnityConcludeTest(); \
+}
+
+//=======Automagically Detected Files To Include=====
+#include "unity.h"
+#include <setjmp.h>
+#include <stdio.h>
+#include "config.h"
+
+//=======External Functions This Runner Calls=====
+extern void setUp(void);
+extern void tearDown(void);
+extern void test_keywordIncorrectToken(void);
+extern void test_keywordServerToken(void);
+extern void test_DropUninitializedStack(void);
+extern void test_IncorrectlyInitializeLexStack(void);
+extern void test_InitializeLexStack(void);
+extern void test_PopEmptyStack(void);
+extern void test_IsInteger(void);
+extern void test_IsUint(void);
+extern void test_IsDouble(void);
+extern void test_SpecialSymbols(void);
+extern void test_EOC(void);
+
+
+//=======Test Reset Option=====
+void resetTest(void);
+void resetTest(void)
+{
+ tearDown();
+ setUp();
+}
+
+char const *progname;
+
+
+//=======MAIN=====
+int main(int argc, char *argv[])
+{
+ progname = argv[0];
+ UnityBegin("t-ntp_scanner.c");
+ RUN_TEST(test_keywordIncorrectToken, 21);
+ RUN_TEST(test_keywordServerToken, 22);
+ RUN_TEST(test_DropUninitializedStack, 23);
+ RUN_TEST(test_IncorrectlyInitializeLexStack, 24);
+ RUN_TEST(test_InitializeLexStack, 25);
+ RUN_TEST(test_PopEmptyStack, 61);
+ RUN_TEST(test_IsInteger, 69);
+ RUN_TEST(test_IsUint, 87);
+ RUN_TEST(test_IsDouble, 99);
+ RUN_TEST(test_SpecialSymbols, 111);
+ RUN_TEST(test_EOC, 120);
+
+ return (UnityEnd());
+}
diff --git a/contrib/ntp/tests/ntpd/run-t-ntp_signd.c b/contrib/ntp/tests/ntpd/run-t-ntp_signd.c
new file mode 100644
index 0000000..662cada
--- /dev/null
+++ b/contrib/ntp/tests/ntpd/run-t-ntp_signd.c
@@ -0,0 +1,66 @@
+/* AUTOGENERATED FILE. DO NOT EDIT. */
+
+//=======Test Runner Used To Run Each Test Below=====
+#define RUN_TEST(TestFunc, TestLineNum) \
+{ \
+ Unity.CurrentTestName = #TestFunc; \
+ Unity.CurrentTestLineNumber = TestLineNum; \
+ Unity.NumberOfTests++; \
+ if (TEST_PROTECT()) \
+ { \
+ setUp(); \
+ TestFunc(); \
+ } \
+ if (TEST_PROTECT() && !TEST_IS_IGNORED) \
+ { \
+ tearDown(); \
+ } \
+ UnityConcludeTest(); \
+}
+
+//=======Automagically Detected Files To Include=====
+#include "unity.h"
+#include <setjmp.h>
+#include <stdio.h>
+#include "config.h"
+#include "ntp.h"
+#include "ntp_calendar.h"
+#include "ntp_stdlib.h"
+#include "test-libntp.h"
+
+//=======External Functions This Runner Calls=====
+extern void setUp(void);
+extern void tearDown(void);
+extern void test_connect_incorrect_socket(void);
+extern void test_connect_correct_socket(void);
+extern void test_write_all(void);
+extern void test_send_packet(void);
+extern void test_recv_packet(void);
+extern void test_send_via_ntp_signd();
+
+
+//=======Test Reset Option=====
+void resetTest(void);
+void resetTest(void)
+{
+ tearDown();
+ setUp();
+}
+
+char const *progname;
+
+
+//=======MAIN=====
+int main(int argc, char *argv[])
+{
+ progname = argv[0];
+ UnityBegin("t-ntp_signd.c");
+ RUN_TEST(test_connect_incorrect_socket, 49);
+ RUN_TEST(test_connect_correct_socket, 54);
+ RUN_TEST(test_write_all, 74);
+ RUN_TEST(test_send_packet, 84);
+ RUN_TEST(test_recv_packet, 93);
+ RUN_TEST(test_send_via_ntp_signd, 104);
+
+ return (UnityEnd());
+}
diff --git a/contrib/ntp/tests/ntpd/t-ntp_scanner.c b/contrib/ntp/tests/ntpd/t-ntp_scanner.c
new file mode 100644
index 0000000..9bc77c4
--- /dev/null
+++ b/contrib/ntp/tests/ntpd/t-ntp_scanner.c
@@ -0,0 +1,136 @@
+#include "config.h"
+
+#include "unity.h"
+
+//#include <stdio.h>
+//#include <ctype.h>
+//#include <stdlib.h>
+//#include <errno.h>
+//#include <string.h>
+
+//#include "ntpd.h"
+//#include "ntp_config.h"
+//#include "ntpsim.h"
+//#include "ntp_scanner.h"
+//#include "ntp_parser.h"
+
+#include "ntp_scanner.c"
+/* ntp_keyword.h declares finite state machine and token text */
+//#include "ntp_keyword.h"
+
+void test_keywordIncorrectToken(void);
+void test_keywordServerToken(void);
+void test_DropUninitializedStack(void);
+void test_IncorrectlyInitializeLexStack(void);
+void test_InitializeLexStack(void);
+
+
+void test_keywordIncorrectToken(void){
+ char * temp = keyword(999);
+ //printf("%s\n",temp);
+ TEST_ASSERT_EQUAL_STRING("(keyword not found)",temp);
+}
+
+void test_keywordServerToken(void){
+ char * temp = keyword(401);
+ //printf("%s",temp); //143 or 401 ?
+ TEST_ASSERT_EQUAL_STRING("server",temp);
+}
+
+void test_DropUninitializedStack(void){
+ lex_drop_stack();
+}
+
+void test_IncorrectlyInitializeLexStack(void){
+
+ TEST_ASSERT_FALSE(lex_init_stack(NULL,NULL));
+ lex_drop_stack();
+}
+
+void test_InitializeLexStack(void){
+
+ //Some sort of server is required for this to work.
+ sockaddr_u * remote_addr;
+ char origin[128] ={ "" } ;
+ strcat(origin,"127.0.0.1");
+ //snprintf(origin, sizeof(origin), "remote config from %s", stoa(remote_addr));
+ TEST_ASSERT_TRUE(lex_init_stack(origin,NULL)); //path, mode -> NULL is ok!
+ lex_drop_stack();
+}
+
+void test_PopEmptyStack(void){
+ int temp = lex_pop_file();
+
+ TEST_ASSERT_FALSE(temp);
+}
+
+
+
+void test_IsInteger(void){ //boolean
+ int temp = is_integer("123");
+ TEST_ASSERT_TRUE(temp);
+ temp = is_integer("-999");
+ TEST_ASSERT_TRUE(temp);
+ temp = is_integer("0"); //what about -0?
+ TEST_ASSERT_TRUE(temp);
+ temp = is_integer("16.5");
+ TEST_ASSERT_FALSE(temp);
+ temp = is_integer("12ab");
+ TEST_ASSERT_FALSE(temp);
+ temp = is_integer("2147483647");
+ TEST_ASSERT_TRUE(temp);
+ temp = is_integer("2347483647"); //too big for signed int
+ TEST_ASSERT_FALSE(temp);
+
+}
+
+void test_IsUint(void){
+ int temp;
+ temp = is_u_int("-123");
+ TEST_ASSERT_FALSE(temp);
+ temp = is_u_int("0");
+ TEST_ASSERT_TRUE(temp); //-0 fails btw
+ temp = is_u_int("2347483647"); //fits into u_int
+ TEST_ASSERT_TRUE(temp);
+ temp = is_u_int("112347483647"); //too big even for uint
+ TEST_ASSERT_TRUE(temp);
+}
+
+void test_IsDouble(void){
+ int temp;
+ temp = is_double("0");
+ TEST_ASSERT_TRUE(temp);
+ temp = is_double("123");
+ TEST_ASSERT_TRUE(temp);
+ temp = is_double("123.45"); //DOESN'T WORK WITH 123,45, not sure if intented?
+ TEST_ASSERT_TRUE(temp);
+ temp = is_double("-123.45"); //DOESN'T WORK WITH 123,45, not sure if intented?
+ TEST_ASSERT_TRUE(temp);
+}
+
+void test_SpecialSymbols(void){
+ int temp ;
+ temp = is_special('a');
+ TEST_ASSERT_FALSE(temp);
+ temp = is_special('?');
+ TEST_ASSERT_FALSE(temp);
+
+}
+
+void test_EOC(void){
+ int temp;
+ if(old_config_style){
+ temp = is_EOC('\n');
+ TEST_ASSERT_TRUE(temp);
+ }
+ else {
+ temp = is_EOC(';');
+ TEST_ASSERT_TRUE(temp);
+ }
+ temp = is_EOC("A");
+ TEST_ASSERT_FALSE(temp);
+ temp = is_EOC('1');
+ TEST_ASSERT_FALSE(temp);
+
+}
+
diff --git a/contrib/ntp/tests/ntpd/t-ntp_signd.c b/contrib/ntp/tests/ntpd/t-ntp_signd.c
new file mode 100644
index 0000000..45972fb
--- /dev/null
+++ b/contrib/ntp/tests/ntpd/t-ntp_signd.c
@@ -0,0 +1,116 @@
+#include "config.h"
+
+#include "ntp.h"
+#include "ntp_calendar.h"
+#include "ntp_stdlib.h"
+
+#include "unity.h"
+
+#include "test-libntp.h"
+
+
+
+#define HAVE_NTP_SIGND
+
+#include "ntp_signd.c"
+
+extern int ux_socket_connect(const char *name);
+
+
+//MOCKED FUNCTIONS
+
+//this connect function overrides/mocks connect() from <sys/socket.h>
+int connect(int socket, const struct sockaddr *address,
+socklen_t address_len){
+ return 1;
+}
+
+//mocked write will only send 4 bytes at a time. This is so write_all can be properly tested
+ssize_t write(int fd, void const * buf, size_t len){
+ if(len >= 4){return 4;}
+ else return len;
+}
+
+ssize_t read(int fd, void * buf, size_t len){
+ if(len >= 4){return 4;}
+ else return len;
+}
+
+
+//END OF MOCKED FUNCTIONS
+
+int isGE(int a,int b){
+ if(a >= b) {return 1;}
+ else {return 0;}
+}
+
+
+void
+test_connect_incorrect_socket(void){
+ TEST_ASSERT_EQUAL(-1, ux_socket_connect(NULL));
+}
+
+void
+test_connect_correct_socket(void){
+
+
+
+ int temp = ux_socket_connect("/socket");
+
+ //risky, what if something is listening on :123, or localhost isnt 127.0.0.1?
+ //TEST_ASSERT_EQUAL(-1, ux_socket_connect("127.0.0.1:123"));
+
+ //printf("%d\n",temp);
+ TEST_ASSERT_TRUE(isGE(temp,0));
+
+ //write_all();
+ //char *socketName = "Random_Socket_Name";
+ //int length = strlen(socketName);
+
+}
+
+
+void
+test_write_all(void){
+ int fd = ux_socket_connect("/socket");
+ TEST_ASSERT_TRUE(isGE(fd,0));
+ char * str = "TEST123";
+ int temp = write_all(fd, str,strlen(str));
+ TEST_ASSERT_EQUAL(strlen(str),temp);
+}
+
+
+void
+test_send_packet(void){
+ int fd = ux_socket_connect("/socket");
+ char * str2 = "PACKET12345";
+ int temp = send_packet(fd, str2, strlen(str2));
+ TEST_ASSERT_EQUAL(0,temp);
+}
+
+
+void
+test_recv_packet(void){
+ int fd = ux_socket_connect("/socket");
+ int size = 256;
+ char str[size];
+
+ int temp = recv_packet(fd, &str, &size);
+ send_packet(fd, str, strlen(str));
+ TEST_ASSERT_EQUAL(0,temp); //0 because nobody sent us anything (yet!)
+}
+
+void
+test_send_via_ntp_signd(){
+
+ struct recvbuf *rbufp = (struct recvbuf *) malloc(sizeof(struct recvbuf));
+ int xmode = 1;
+ keyid_t xkeyid = 12345;
+ int flags =0;
+ struct pkt *xpkt = (struct pkt *) malloc(sizeof(struct pkt)); //defined in ntp.h
+
+ //send_via_ntp_signd(NULL,NULL,NULL,NULL,NULL); //doesn't work
+ send_via_ntp_signd(rbufp,xmode,xkeyid,flags,xpkt);
+
+
+}
diff --git a/contrib/ntp/tests/ntpq/Makefile.am b/contrib/ntp/tests/ntpq/Makefile.am
new file mode 100644
index 0000000..a45a9ae
--- /dev/null
+++ b/contrib/ntp/tests/ntpq/Makefile.am
@@ -0,0 +1,96 @@
+NULL =
+BUILT_SOURCES =
+CLEANFILES =
+
+std_unity_list = \
+ $(top_srcdir)/sntp/unity/auto/generate_test_runner.rb \
+ $(NULL)
+
+run_unity = cd $(srcdir) && ruby ../../sntp/unity/auto/generate_test_runner.rb
+
+check_PROGRAMS = \
+ test-ntpq \
+ $(NULL)
+
+LDADD = \
+ $(top_builddir)/ntpq/libntpq.a \
+ $(top_builddir)/ntpd/libntpd.a \
+ $(top_builddir)/libntp/libntp.a \
+ $(LDADD_LIBNTP) \
+ $(PTHREAD_LIBS) \
+ $(LDADD_NTP) \
+ $(NULL)
+
+unity_tests_LDADD = \
+ $(LDADD) \
+ $(top_builddir)/sntp/unity/libunity.a \
+ $(LIBM) \
+ $(NULL)
+
+AM_CFLAGS = $(CFLAGS_NTP)
+
+AM_CPPFLAGS = $(NTP_INCS)
+AM_CPPFLAGS += -I$(top_srcdir)/ntpq
+AM_CPPFLAGS += $(CPPFLAGS_NTP)
+AM_CPPFLAGS += -DUNITY_INCLUDE_CONFIG_H
+AM_CPPFLAGS += -I$(top_srcdir)/sntp/unity
+
+AM_LDFLAGS = $(LDFLAGS_NTP)
+
+BUILT_SOURCES += \
+ $(srcdir)/run-t-ntpq.c \
+ $(NULL)
+
+noinst_HEADERS = \
+ $(NULL)
+
+###
+
+test_ntpq_LDADD = \
+ $(unity_tests_LDADD) \
+ $(NULL)
+
+test_ntpq_SOURCES = \
+ t-ntpq.c \
+ run-t-ntpq.c \
+ $(NULL)
+
+$(srcdir)/run-t-ntpq.c: $(srcdir)/t-ntpq.c $(std_unity_list)
+ $(run_unity) t-ntpq.c run-t-ntpq.c
+
+
+TESTS =
+
+if !NTP_CROSSCOMPILE
+TESTS += $(check_PROGRAMS)
+endif
+
+## check-libntp.mf - automake fragment
+## slightly adapted for deeper directory
+
+BUILT_SOURCES += check-libntpd check-libntp check-libunity
+CLEANFILES += check-libntpd check-libntp check-libunity
+
+check-libntpd: ../../ntpd/libntpd.a
+ @echo stamp > $@
+
+../../ntpd/libntpd.a:
+ cd ../../ntpd && $(MAKE) $(AM_MAKEFLAGS) libntpd.a
+
+
+check-libntp: ../../libntp/libntp.a
+ @echo stamp > $@
+
+../../libntp/libntp.a:
+ cd ../../libntp && $(MAKE) $(AM_MAKEFLAGS) libntp.a
+
+
+check-libunity: ../../sntp/unity/libunity.a
+ @echo stamp > $@
+
+../../sntp/unity/libunity.a:
+ cd ../../sntp/unity && $(MAKE) $(AM_MAKEFLAGS) libunity.a
+
+
+include $(top_srcdir)/depsver.mf
+include $(top_srcdir)/includes.mf
diff --git a/contrib/ntp/tests/ntpq/Makefile.in b/contrib/ntp/tests/ntpq/Makefile.in
new file mode 100644
index 0000000..f31c0bc
--- /dev/null
+++ b/contrib/ntp/tests/ntpq/Makefile.in
@@ -0,0 +1,1286 @@
+# Makefile.in generated by automake 1.15 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2014 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+VPATH = @srcdir@
+am__is_gnu_make = { \
+ if test -z '$(MAKELEVEL)'; then \
+ false; \
+ elif test -n '$(MAKE_HOST)'; then \
+ true; \
+ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+ true; \
+ else \
+ false; \
+ fi; \
+}
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+check_PROGRAMS = test-ntpq$(EXEEXT) $(am__EXEEXT_1)
+@NTP_CROSSCOMPILE_FALSE@am__append_1 = $(check_PROGRAMS)
+subdir = tests/ntpq
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/sntp/libopts/m4/libopts.m4 \
+ $(top_srcdir)/sntp/libopts/m4/stdnoreturn.m4 \
+ $(top_srcdir)/sntp/m4/ax_c99_struct_init.m4 \
+ $(top_srcdir)/sntp/m4/define_dir.m4 \
+ $(top_srcdir)/sntp/m4/hms_search_lib.m4 \
+ $(top_srcdir)/sntp/m4/libtool.m4 \
+ $(top_srcdir)/sntp/m4/ltoptions.m4 \
+ $(top_srcdir)/sntp/m4/ltsugar.m4 \
+ $(top_srcdir)/sntp/m4/ltversion.m4 \
+ $(top_srcdir)/sntp/m4/lt~obsolete.m4 \
+ $(top_srcdir)/sntp/m4/ntp_cacheversion.m4 \
+ $(top_srcdir)/sntp/m4/ntp_compiler.m4 \
+ $(top_srcdir)/sntp/m4/ntp_crosscompile.m4 \
+ $(top_srcdir)/sntp/m4/ntp_crypto_rand.m4 \
+ $(top_srcdir)/sntp/m4/ntp_debug.m4 \
+ $(top_srcdir)/sntp/m4/ntp_dir_sep.m4 \
+ $(top_srcdir)/sntp/m4/ntp_facilitynames.m4 \
+ $(top_srcdir)/sntp/m4/ntp_googletest.m4 \
+ $(top_srcdir)/sntp/m4/ntp_ipv6.m4 \
+ $(top_srcdir)/sntp/m4/ntp_lib_m.m4 \
+ $(top_srcdir)/sntp/m4/ntp_libevent.m4 \
+ $(top_srcdir)/sntp/m4/ntp_libntp.m4 \
+ $(top_srcdir)/sntp/m4/ntp_lineeditlibs.m4 \
+ $(top_srcdir)/sntp/m4/ntp_locinfo.m4 \
+ $(top_srcdir)/sntp/m4/ntp_openssl.m4 \
+ $(top_srcdir)/sntp/m4/ntp_pkg_config.m4 \
+ $(top_srcdir)/sntp/m4/ntp_problemtests.m4 \
+ $(top_srcdir)/sntp/m4/ntp_prog_cc.m4 \
+ $(top_srcdir)/sntp/m4/ntp_rlimit.m4 \
+ $(top_srcdir)/sntp/m4/ntp_sntp.m4 \
+ $(top_srcdir)/sntp/m4/ntp_unitytest.m4 \
+ $(top_srcdir)/sntp/m4/ntp_ver_suffix.m4 \
+ $(top_srcdir)/sntp/m4/ntp_vpathhack.m4 \
+ $(top_srcdir)/sntp/m4/openldap-thread-check.m4 \
+ $(top_srcdir)/sntp/m4/openldap.m4 \
+ $(top_srcdir)/sntp/m4/os_cflags.m4 \
+ $(top_srcdir)/sntp/m4/snprintf.m4 \
+ $(top_srcdir)/sntp/m4/version.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \
+ $(am__DIST_COMMON)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+am__EXEEXT_1 =
+am__objects_1 =
+am_test_ntpq_OBJECTS = t-ntpq.$(OBJEXT) run-t-ntpq.$(OBJEXT) \
+ $(am__objects_1)
+test_ntpq_OBJECTS = $(am_test_ntpq_OBJECTS)
+am__DEPENDENCIES_1 =
+am__DEPENDENCIES_2 = $(top_builddir)/ntpq/libntpq.a \
+ $(top_builddir)/ntpd/libntpd.a $(top_builddir)/libntp/libntp.a \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1)
+am__DEPENDENCIES_3 = $(am__DEPENDENCIES_2) \
+ $(top_builddir)/sntp/unity/libunity.a $(am__DEPENDENCIES_1) \
+ $(am__DEPENDENCIES_1)
+test_ntpq_DEPENDENCIES = $(am__DEPENDENCIES_3) $(am__DEPENDENCIES_1)
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 =
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 =
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/sntp/libevent/build-aux/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+ $(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_@AM_V@)
+am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
+am__v_CC_0 = @echo " CC " $@;
+am__v_CC_1 =
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+ $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_@AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
+am__v_CCLD_0 = @echo " CCLD " $@;
+am__v_CCLD_1 =
+SOURCES = $(test_ntpq_SOURCES)
+DIST_SOURCES = $(test_ntpq_SOURCES)
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+HEADERS = $(noinst_HEADERS)
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates. Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+ BEGIN { nonempty = 0; } \
+ { items[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique. This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+ list='$(am__tagged_files)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | $(am__uniquify_input)`
+ETAGS = etags
+CTAGS = ctags
+am__tty_colors_dummy = \
+ mgn= red= grn= lgn= blu= brg= std=; \
+ am__color_tests=no
+am__tty_colors = { \
+ $(am__tty_colors_dummy); \
+ if test "X$(AM_COLOR_TESTS)" = Xno; then \
+ am__color_tests=no; \
+ elif test "X$(AM_COLOR_TESTS)" = Xalways; then \
+ am__color_tests=yes; \
+ elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \
+ am__color_tests=yes; \
+ fi; \
+ if test $$am__color_tests = yes; then \
+ red=''; \
+ grn=''; \
+ lgn=''; \
+ blu=''; \
+ mgn=''; \
+ brg=''; \
+ std=''; \
+ fi; \
+}
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+ *) f=$$p;; \
+ esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+ for p in $$list; do echo "$$p $$p"; done | \
+ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+ if (++n[$$2] == $(am__install_max)) \
+ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+ END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+ test -z "$$files" \
+ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+ $(am__cd) "$$dir" && rm -f $$files; }; \
+ }
+am__recheck_rx = ^[ ]*:recheck:[ ]*
+am__global_test_result_rx = ^[ ]*:global-test-result:[ ]*
+am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]*
+# A command that, given a newline-separated list of test names on the
+# standard input, print the name of the tests that are to be re-run
+# upon "make recheck".
+am__list_recheck_tests = $(AWK) '{ \
+ recheck = 1; \
+ while ((rc = (getline line < ($$0 ".trs"))) != 0) \
+ { \
+ if (rc < 0) \
+ { \
+ if ((getline line2 < ($$0 ".log")) < 0) \
+ recheck = 0; \
+ break; \
+ } \
+ else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \
+ { \
+ recheck = 0; \
+ break; \
+ } \
+ else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \
+ { \
+ break; \
+ } \
+ }; \
+ if (recheck) \
+ print $$0; \
+ close ($$0 ".trs"); \
+ close ($$0 ".log"); \
+}'
+# A command that, given a newline-separated list of test names on the
+# standard input, create the global log from their .trs and .log files.
+am__create_global_log = $(AWK) ' \
+function fatal(msg) \
+{ \
+ print "fatal: making $@: " msg | "cat >&2"; \
+ exit 1; \
+} \
+function rst_section(header) \
+{ \
+ print header; \
+ len = length(header); \
+ for (i = 1; i <= len; i = i + 1) \
+ printf "="; \
+ printf "\n\n"; \
+} \
+{ \
+ copy_in_global_log = 1; \
+ global_test_result = "RUN"; \
+ while ((rc = (getline line < ($$0 ".trs"))) != 0) \
+ { \
+ if (rc < 0) \
+ fatal("failed to read from " $$0 ".trs"); \
+ if (line ~ /$(am__global_test_result_rx)/) \
+ { \
+ sub("$(am__global_test_result_rx)", "", line); \
+ sub("[ ]*$$", "", line); \
+ global_test_result = line; \
+ } \
+ else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \
+ copy_in_global_log = 0; \
+ }; \
+ if (copy_in_global_log) \
+ { \
+ rst_section(global_test_result ": " $$0); \
+ while ((rc = (getline line < ($$0 ".log"))) != 0) \
+ { \
+ if (rc < 0) \
+ fatal("failed to read from " $$0 ".log"); \
+ print line; \
+ }; \
+ printf "\n"; \
+ }; \
+ close ($$0 ".trs"); \
+ close ($$0 ".log"); \
+}'
+# Restructured Text title.
+am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; }
+# Solaris 10 'make', and several other traditional 'make' implementations,
+# pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it
+# by disabling -e (using the XSI extension "set +e") if it's set.
+am__sh_e_setup = case $$- in *e*) set +e;; esac
+# Default flags passed to test drivers.
+am__common_driver_flags = \
+ --color-tests "$$am__color_tests" \
+ --enable-hard-errors "$$am__enable_hard_errors" \
+ --expect-failure "$$am__expect_failure"
+# To be inserted before the command running the test. Creates the
+# directory for the log if needed. Stores in $dir the directory
+# containing $f, in $tst the test, in $log the log. Executes the
+# developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and
+# passes TESTS_ENVIRONMENT. Set up options for the wrapper that
+# will run the test scripts (or their associated LOG_COMPILER, if
+# thy have one).
+am__check_pre = \
+$(am__sh_e_setup); \
+$(am__vpath_adj_setup) $(am__vpath_adj) \
+$(am__tty_colors); \
+srcdir=$(srcdir); export srcdir; \
+case "$@" in \
+ */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \
+ *) am__odir=.;; \
+esac; \
+test "x$$am__odir" = x"." || test -d "$$am__odir" \
+ || $(MKDIR_P) "$$am__odir" || exit $$?; \
+if test -f "./$$f"; then dir=./; \
+elif test -f "$$f"; then dir=; \
+else dir="$(srcdir)/"; fi; \
+tst=$$dir$$f; log='$@'; \
+if test -n '$(DISABLE_HARD_ERRORS)'; then \
+ am__enable_hard_errors=no; \
+else \
+ am__enable_hard_errors=yes; \
+fi; \
+case " $(XFAIL_TESTS) " in \
+ *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \
+ am__expect_failure=yes;; \
+ *) \
+ am__expect_failure=no;; \
+esac; \
+$(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT)
+# A shell command to get the names of the tests scripts with any registered
+# extension removed (i.e., equivalently, the names of the test logs, with
+# the '.log' extension removed). The result is saved in the shell variable
+# '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly,
+# we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)",
+# since that might cause problem with VPATH rewrites for suffix-less tests.
+# See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'.
+am__set_TESTS_bases = \
+ bases='$(TEST_LOGS)'; \
+ bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \
+ bases=`echo $$bases`
+RECHECK_LOGS = $(TEST_LOGS)
+AM_RECURSIVE_TARGETS = check recheck
+TEST_SUITE_LOG = test-suite.log
+TEST_EXTENSIONS = @EXEEXT@ .test
+LOG_DRIVER = $(SHELL) \
+ $(top_srcdir)/sntp/libevent/build-aux/test-driver
+LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS)
+am__set_b = \
+ case '$@' in \
+ */*) \
+ case '$*' in \
+ */*) b='$*';; \
+ *) b=`echo '$@' | sed 's/\.log$$//'`; \
+ esac;; \
+ *) \
+ b='$*';; \
+ esac
+am__test_logs1 = $(TESTS:=.log)
+am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log)
+TEST_LOGS = $(am__test_logs2:.test.log=.log)
+TEST_LOG_DRIVER = $(SHELL) \
+ $(top_srcdir)/sntp/libevent/build-aux/test-driver
+TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \
+ $(TEST_LOG_FLAGS)
+am__DIST_COMMON = $(srcdir)/Makefile.in $(top_srcdir)/depsver.mf \
+ $(top_srcdir)/includes.mf \
+ $(top_srcdir)/sntp/libevent/build-aux/depcomp \
+ $(top_srcdir)/sntp/libevent/build-aux/test-driver
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = @ACLOCAL@
+ALLOCA = @ALLOCA@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+AR = @AR@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BUILD_THREAD = @BUILD_THREAD@
+CALC_TICKADJ_DB = @CALC_TICKADJ_DB@
+CALC_TICKADJ_DL = @CALC_TICKADJ_DL@
+CALC_TICKADJ_DS = @CALC_TICKADJ_DS@
+CALC_TICKADJ_MS = @CALC_TICKADJ_MS@
+CALC_TICKADJ_NI = @CALC_TICKADJ_NI@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CFLAGS_LIBEVENT = @CFLAGS_LIBEVENT@
+CFLAGS_NTP = @CFLAGS_NTP@
+CHUTEST = @CHUTEST@
+CONFIG_SHELL = @CONFIG_SHELL@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CPPFLAGS_LIBEVENT = @CPPFLAGS_LIBEVENT@
+CPPFLAGS_NTP = @CPPFLAGS_NTP@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DCFD = @DCFD@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DLLTOOL = @DLLTOOL@
+DSYMUTIL = @DSYMUTIL@
+DUMPBIN = @DUMPBIN@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EDITLINE_LIBS = @EDITLINE_LIBS@
+EGREP = @EGREP@
+EXEEXT = @EXEEXT@
+FGREP = @FGREP@
+GREP = @GREP@
+GTEST_CONFIG = @GTEST_CONFIG@
+GTEST_CPPFLAGS = @GTEST_CPPFLAGS@
+GTEST_CXXFLAGS = @GTEST_CXXFLAGS@
+GTEST_LDFLAGS = @GTEST_LDFLAGS@
+GTEST_LIBS = @GTEST_LIBS@
+HAVE_INLINE = @HAVE_INLINE@
+HAVE_LEAPSMEARINTERVAL = @HAVE_LEAPSMEARINTERVAL@
+HAVE_RLIMIT_MEMLOCK = @HAVE_RLIMIT_MEMLOCK@
+HAVE_RLIMIT_STACK = @HAVE_RLIMIT_STACK@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LD = @LD@
+LDADD_LIBEVENT = @LDADD_LIBEVENT@
+LDADD_LIBNTP = @LDADD_LIBNTP@
+LDADD_LIBUTIL = @LDADD_LIBUTIL@
+LDADD_NLIST = @LDADD_NLIST@
+LDADD_NTP = @LDADD_NTP@
+LDFLAGS = @LDFLAGS@
+LDFLAGS_NTP = @LDFLAGS_NTP@
+LIBISC_PTHREADS_NOTHREADS = @LIBISC_PTHREADS_NOTHREADS@
+LIBM = @LIBM@
+LIBOBJS = @LIBOBJS@
+LIBOPTS_CFLAGS = @LIBOPTS_CFLAGS@
+LIBOPTS_DIR = @LIBOPTS_DIR@
+LIBOPTS_LDADD = @LIBOPTS_LDADD@
+LIBPARSE = @LIBPARSE@
+LIBS = @LIBS@
+LIBTOOL = @LIBTOOL@
+LIBTOOL_DEPS = @LIBTOOL_DEPS@
+LIPO = @LIPO@
+LN_S = @LN_S@
+LSCF = @LSCF@
+LTHREAD_LIBS = @LTHREAD_LIBS@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MAKE_ADJTIMED = @MAKE_ADJTIMED@
+MAKE_CHECK_LAYOUT = @MAKE_CHECK_LAYOUT@
+MAKE_CHECK_Y2K = @MAKE_CHECK_Y2K@
+MAKE_LIBNTPSIM = @MAKE_LIBNTPSIM@
+MAKE_LIBPARSE = @MAKE_LIBPARSE@
+MAKE_LIBPARSE_KERNEL = @MAKE_LIBPARSE_KERNEL@
+MAKE_NTPDSIM = @MAKE_NTPDSIM@
+MAKE_NTPSNMPD = @MAKE_NTPSNMPD@
+MAKE_NTPTIME = @MAKE_NTPTIME@
+MAKE_PARSEKMODULE = @MAKE_PARSEKMODULE@
+MAKE_TICKADJ = @MAKE_TICKADJ@
+MAKE_TIMETRIM = @MAKE_TIMETRIM@
+MANIFEST_TOOL = @MANIFEST_TOOL@
+MANTAGFMT = @MANTAGFMT@
+MKDIR_P = @MKDIR_P@
+NM = @NM@
+NMEDIT = @NMEDIT@
+NTPDATE_DB = @NTPDATE_DB@
+NTPDATE_DL = @NTPDATE_DL@
+NTPDATE_DS = @NTPDATE_DS@
+NTPDATE_MS = @NTPDATE_MS@
+NTPDATE_NI = @NTPDATE_NI@
+NTPDC_DB = @NTPDC_DB@
+NTPDC_DL = @NTPDC_DL@
+NTPDC_DS = @NTPDC_DS@
+NTPDC_MS = @NTPDC_MS@
+NTPDC_NI = @NTPDC_NI@
+NTPDSIM_DB = @NTPDSIM_DB@
+NTPDSIM_DL = @NTPDSIM_DL@
+NTPDSIM_DS = @NTPDSIM_DS@
+NTPDSIM_MS = @NTPDSIM_MS@
+NTPDSIM_NI = @NTPDSIM_NI@
+NTPD_DB = @NTPD_DB@
+NTPD_DL = @NTPD_DL@
+NTPD_DS = @NTPD_DS@
+NTPD_MS = @NTPD_MS@
+NTPD_NI = @NTPD_NI@
+NTPQ_DB = @NTPQ_DB@
+NTPQ_DL = @NTPQ_DL@
+NTPQ_DS = @NTPQ_DS@
+NTPQ_MS = @NTPQ_MS@
+NTPQ_NI = @NTPQ_NI@
+NTPSNMPD_DB = @NTPSNMPD_DB@
+NTPSNMPD_DL = @NTPSNMPD_DL@
+NTPSNMPD_DS = @NTPSNMPD_DS@
+NTPSNMPD_MS = @NTPSNMPD_MS@
+NTPSNMPD_NI = @NTPSNMPD_NI@
+NTPSWEEP_DB = @NTPSWEEP_DB@
+NTPSWEEP_DL = @NTPSWEEP_DL@
+NTPSWEEP_DS = @NTPSWEEP_DS@
+NTPSWEEP_MS = @NTPSWEEP_MS@
+NTPSWEEP_NI = @NTPSWEEP_NI@
+NTPTIME_DB = @NTPTIME_DB@
+NTPTIME_DL = @NTPTIME_DL@
+NTPTIME_DS = @NTPTIME_DS@
+NTPTIME_MS = @NTPTIME_MS@
+NTPTIME_NI = @NTPTIME_NI@
+NTPTRACE_DB = @NTPTRACE_DB@
+NTPTRACE_DL = @NTPTRACE_DL@
+NTPTRACE_DS = @NTPTRACE_DS@
+NTPTRACE_MS = @NTPTRACE_MS@
+NTPTRACE_NI = @NTPTRACE_NI@
+NTP_KEYGEN_DB = @NTP_KEYGEN_DB@
+NTP_KEYGEN_DL = @NTP_KEYGEN_DL@
+NTP_KEYGEN_DS = @NTP_KEYGEN_DS@
+NTP_KEYGEN_MS = @NTP_KEYGEN_MS@
+NTP_KEYGEN_NI = @NTP_KEYGEN_NI@
+NTP_KEYSDIR = @NTP_KEYSDIR@
+NTP_WAIT_DB = @NTP_WAIT_DB@
+NTP_WAIT_DL = @NTP_WAIT_DL@
+NTP_WAIT_DS = @NTP_WAIT_DS@
+NTP_WAIT_MS = @NTP_WAIT_MS@
+NTP_WAIT_NI = @NTP_WAIT_NI@
+OBJDUMP = @OBJDUMP@
+OBJEXT = @OBJEXT@
+OTOOL = @OTOOL@
+OTOOL64 = @OTOOL64@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PATH_NET_SNMP_CONFIG = @PATH_NET_SNMP_CONFIG@
+PATH_PERL = @PATH_PERL@
+PATH_RUBY = @PATH_RUBY@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PATH_TEST = @PATH_TEST@
+PERLLIBDIR = @PERLLIBDIR@
+PKG_CONFIG = @PKG_CONFIG@
+POSIX_SHELL = @POSIX_SHELL@
+PROPDELAY = @PROPDELAY@
+PTHREAD_LIBS = @PTHREAD_LIBS@
+RANLIB = @RANLIB@
+SED = @SED@
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SNMP_CFLAGS = @SNMP_CFLAGS@
+SNMP_CPPFLAGS = @SNMP_CPPFLAGS@
+SNMP_LIBS = @SNMP_LIBS@
+SNTP = @SNTP@
+SNTP_DB = @SNTP_DB@
+SNTP_DL = @SNTP_DL@
+SNTP_DS = @SNTP_DS@
+SNTP_MS = @SNTP_MS@
+SNTP_NI = @SNTP_NI@
+STDNORETURN_H = @STDNORETURN_H@
+STRIP = @STRIP@
+TESTDCF = @TESTDCF@
+TICKADJ_DB = @TICKADJ_DB@
+TICKADJ_DL = @TICKADJ_DL@
+TICKADJ_DS = @TICKADJ_DS@
+TICKADJ_MS = @TICKADJ_MS@
+TICKADJ_NI = @TICKADJ_NI@
+TIMETRIM_DB = @TIMETRIM_DB@
+TIMETRIM_DL = @TIMETRIM_DL@
+TIMETRIM_DS = @TIMETRIM_DS@
+TIMETRIM_MS = @TIMETRIM_MS@
+TIMETRIM_NI = @TIMETRIM_NI@
+UPDATE_LEAP_DB = @UPDATE_LEAP_DB@
+UPDATE_LEAP_DL = @UPDATE_LEAP_DL@
+UPDATE_LEAP_DS = @UPDATE_LEAP_DS@
+UPDATE_LEAP_MS = @UPDATE_LEAP_MS@
+UPDATE_LEAP_NI = @UPDATE_LEAP_NI@
+VERSION = @VERSION@
+VER_SUFFIX = @VER_SUFFIX@
+YACC = @YACC@
+YFLAGS = @YFLAGS@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AR = @ac_ct_AR@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+datadir = @datadir@
+datarootdir = @datarootdir@
+docdir = @docdir@
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+subdirs = @subdirs@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+NULL =
+BUILT_SOURCES = $(srcdir)/run-t-ntpq.c $(NULL) check-libntpd \
+ check-libntp check-libunity .deps-ver
+CLEANFILES = check-libntpd check-libntp check-libunity .deps-ver
+std_unity_list = \
+ $(top_srcdir)/sntp/unity/auto/generate_test_runner.rb \
+ $(NULL)
+
+run_unity = cd $(srcdir) && ruby ../../sntp/unity/auto/generate_test_runner.rb
+LDADD = \
+ $(top_builddir)/ntpq/libntpq.a \
+ $(top_builddir)/ntpd/libntpd.a \
+ $(top_builddir)/libntp/libntp.a \
+ $(LDADD_LIBNTP) \
+ $(PTHREAD_LIBS) \
+ $(LDADD_NTP) \
+ $(NULL)
+
+unity_tests_LDADD = \
+ $(LDADD) \
+ $(top_builddir)/sntp/unity/libunity.a \
+ $(LIBM) \
+ $(NULL)
+
+AM_CFLAGS = $(CFLAGS_NTP)
+AM_CPPFLAGS = $(NTP_INCS) -I$(top_srcdir)/ntpq $(CPPFLAGS_NTP) \
+ -DUNITY_INCLUDE_CONFIG_H -I$(top_srcdir)/sntp/unity
+AM_LDFLAGS = $(LDFLAGS_NTP)
+noinst_HEADERS = \
+ $(NULL)
+
+
+###
+test_ntpq_LDADD = \
+ $(unity_tests_LDADD) \
+ $(NULL)
+
+test_ntpq_SOURCES = \
+ t-ntpq.c \
+ run-t-ntpq.c \
+ $(NULL)
+
+TESTS = $(am__append_1)
+NTP_INCS = -I$(top_srcdir)/include -I$(top_srcdir)/lib/isc/include \
+ -I$(top_srcdir)/lib/isc/$(LIBISC_PTHREADS_NOTHREADS)/include \
+ -I$(top_srcdir)/lib/isc/unix/include
+all: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .log .o .obj .test .test$(EXEEXT) .trs
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/depsver.mf $(top_srcdir)/includes.mf $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign tests/ntpq/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --foreign tests/ntpq/Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+$(top_srcdir)/depsver.mf $(top_srcdir)/includes.mf $(am__empty):
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-checkPROGRAMS:
+ @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \
+ echo " rm -f" $$list; \
+ rm -f $$list || exit $$?; \
+ test -n "$(EXEEXT)" || exit 0; \
+ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+ echo " rm -f" $$list; \
+ rm -f $$list
+
+test-ntpq$(EXEEXT): $(test_ntpq_OBJECTS) $(test_ntpq_DEPENDENCIES) $(EXTRA_test_ntpq_DEPENDENCIES)
+ @rm -f test-ntpq$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(test_ntpq_OBJECTS) $(test_ntpq_LDADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/run-t-ntpq.Po@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/t-ntpq.Po@am__quote@
+
+.c.o:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $<
+
+.c.obj:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+.c.lo:
+@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+ID: $(am__tagged_files)
+ $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ set x; \
+ here=`pwd`; \
+ $(am__define_uniq_tagged_files); \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: ctags-am
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ $(am__define_uniq_tagged_files); \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-am
+
+cscopelist-am: $(am__tagged_files)
+ list='$(am__tagged_files)'; \
+ case "$(srcdir)" in \
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+ *) sdir=$(subdir)/$(srcdir) ;; \
+ esac; \
+ for i in $$list; do \
+ if test -f "$$i"; then \
+ echo "$(subdir)/$$i"; \
+ else \
+ echo "$$sdir/$$i"; \
+ fi; \
+ done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+# Recover from deleted '.trs' file; this should ensure that
+# "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create
+# both 'foo.log' and 'foo.trs'. Break the recipe in two subshells
+# to avoid problems with "make -n".
+.log.trs:
+ rm -f $< $@
+ $(MAKE) $(AM_MAKEFLAGS) $<
+
+# Leading 'am--fnord' is there to ensure the list of targets does not
+# expand to empty, as could happen e.g. with make check TESTS=''.
+am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck)
+am--force-recheck:
+ @:
+
+$(TEST_SUITE_LOG): $(TEST_LOGS)
+ @$(am__set_TESTS_bases); \
+ am__f_ok () { test -f "$$1" && test -r "$$1"; }; \
+ redo_bases=`for i in $$bases; do \
+ am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \
+ done`; \
+ if test -n "$$redo_bases"; then \
+ redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \
+ redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \
+ if $(am__make_dryrun); then :; else \
+ rm -f $$redo_logs && rm -f $$redo_results || exit 1; \
+ fi; \
+ fi; \
+ if test -n "$$am__remaking_logs"; then \
+ echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \
+ "recursion detected" >&2; \
+ elif test -n "$$redo_logs"; then \
+ am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \
+ fi; \
+ if $(am__make_dryrun); then :; else \
+ st=0; \
+ errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \
+ for i in $$redo_bases; do \
+ test -f $$i.trs && test -r $$i.trs \
+ || { echo "$$errmsg $$i.trs" >&2; st=1; }; \
+ test -f $$i.log && test -r $$i.log \
+ || { echo "$$errmsg $$i.log" >&2; st=1; }; \
+ done; \
+ test $$st -eq 0 || exit 1; \
+ fi
+ @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \
+ ws='[ ]'; \
+ results=`for b in $$bases; do echo $$b.trs; done`; \
+ test -n "$$results" || results=/dev/null; \
+ all=` grep "^$$ws*:test-result:" $$results | wc -l`; \
+ pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \
+ fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \
+ skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \
+ xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \
+ xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \
+ error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \
+ if test `expr $$fail + $$xpass + $$error` -eq 0; then \
+ success=true; \
+ else \
+ success=false; \
+ fi; \
+ br='==================='; br=$$br$$br$$br$$br; \
+ result_count () \
+ { \
+ if test x"$$1" = x"--maybe-color"; then \
+ maybe_colorize=yes; \
+ elif test x"$$1" = x"--no-color"; then \
+ maybe_colorize=no; \
+ else \
+ echo "$@: invalid 'result_count' usage" >&2; exit 4; \
+ fi; \
+ shift; \
+ desc=$$1 count=$$2; \
+ if test $$maybe_colorize = yes && test $$count -gt 0; then \
+ color_start=$$3 color_end=$$std; \
+ else \
+ color_start= color_end=; \
+ fi; \
+ echo "$${color_start}# $$desc $$count$${color_end}"; \
+ }; \
+ create_testsuite_report () \
+ { \
+ result_count $$1 "TOTAL:" $$all "$$brg"; \
+ result_count $$1 "PASS: " $$pass "$$grn"; \
+ result_count $$1 "SKIP: " $$skip "$$blu"; \
+ result_count $$1 "XFAIL:" $$xfail "$$lgn"; \
+ result_count $$1 "FAIL: " $$fail "$$red"; \
+ result_count $$1 "XPASS:" $$xpass "$$red"; \
+ result_count $$1 "ERROR:" $$error "$$mgn"; \
+ }; \
+ { \
+ echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \
+ $(am__rst_title); \
+ create_testsuite_report --no-color; \
+ echo; \
+ echo ".. contents:: :depth: 2"; \
+ echo; \
+ for b in $$bases; do echo $$b; done \
+ | $(am__create_global_log); \
+ } >$(TEST_SUITE_LOG).tmp || exit 1; \
+ mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \
+ if $$success; then \
+ col="$$grn"; \
+ else \
+ col="$$red"; \
+ test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \
+ fi; \
+ echo "$${col}$$br$${std}"; \
+ echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}"; \
+ echo "$${col}$$br$${std}"; \
+ create_testsuite_report --maybe-color; \
+ echo "$$col$$br$$std"; \
+ if $$success; then :; else \
+ echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \
+ if test -n "$(PACKAGE_BUGREPORT)"; then \
+ echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \
+ fi; \
+ echo "$$col$$br$$std"; \
+ fi; \
+ $$success || exit 1
+
+check-TESTS:
+ @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list
+ @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list
+ @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+ @set +e; $(am__set_TESTS_bases); \
+ log_list=`for i in $$bases; do echo $$i.log; done`; \
+ trs_list=`for i in $$bases; do echo $$i.trs; done`; \
+ log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \
+ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \
+ exit $$?;
+recheck: all $(check_PROGRAMS)
+ @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+ @set +e; $(am__set_TESTS_bases); \
+ bases=`for i in $$bases; do echo $$i; done \
+ | $(am__list_recheck_tests)` || exit 1; \
+ log_list=`for i in $$bases; do echo $$i.log; done`; \
+ log_list=`echo $$log_list`; \
+ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \
+ am__force_recheck=am--force-recheck \
+ TEST_LOGS="$$log_list"; \
+ exit $$?
+test-ntpq.log: test-ntpq$(EXEEXT)
+ @p='test-ntpq$(EXEEXT)'; \
+ b='test-ntpq'; \
+ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+ --log-file $$b.log --trs-file $$b.trs \
+ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+ "$$tst" $(AM_TESTS_FD_REDIRECT)
+.test.log:
+ @p='$<'; \
+ $(am__set_b); \
+ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \
+ --log-file $$b.log --trs-file $$b.trs \
+ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \
+ "$$tst" $(AM_TESTS_FD_REDIRECT)
+@am__EXEEXT_TRUE@.test$(EXEEXT).log:
+@am__EXEEXT_TRUE@ @p='$<'; \
+@am__EXEEXT_TRUE@ $(am__set_b); \
+@am__EXEEXT_TRUE@ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \
+@am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \
+@am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \
+@am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT)
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+ $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS)
+ $(MAKE) $(AM_MAKEFLAGS) check-TESTS
+check: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) check-am
+all-am: Makefile $(HEADERS)
+installdirs:
+install: $(BUILT_SOURCES)
+ $(MAKE) $(AM_MAKEFLAGS) install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+ -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS)
+ -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs)
+ -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+
+clean-generic:
+ -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+ -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
+clean: clean-am
+
+clean-am: clean-checkPROGRAMS clean-generic clean-libtool \
+ mostlyclean-am
+
+distclean: distclean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: all check check-am install install-am install-strip
+
+.PHONY: CTAGS GTAGS TAGS all all-am check check-TESTS check-am clean \
+ clean-checkPROGRAMS clean-generic clean-libtool cscopelist-am \
+ ctags ctags-am distclean distclean-compile distclean-generic \
+ distclean-libtool distclean-tags distdir dvi dvi-am html \
+ html-am info info-am install install-am install-data \
+ install-data-am install-dvi install-dvi-am install-exec \
+ install-exec-am install-html install-html-am install-info \
+ install-info-am install-man install-pdf install-pdf-am \
+ install-ps install-ps-am install-strip installcheck \
+ installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-compile \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ recheck tags tags-am uninstall uninstall-am
+
+.PRECIOUS: Makefile
+
+
+$(srcdir)/run-t-ntpq.c: $(srcdir)/t-ntpq.c $(std_unity_list)
+ $(run_unity) t-ntpq.c run-t-ntpq.c
+
+check-libntpd: ../../ntpd/libntpd.a
+ @echo stamp > $@
+
+../../ntpd/libntpd.a:
+ cd ../../ntpd && $(MAKE) $(AM_MAKEFLAGS) libntpd.a
+
+check-libntp: ../../libntp/libntp.a
+ @echo stamp > $@
+
+../../libntp/libntp.a:
+ cd ../../libntp && $(MAKE) $(AM_MAKEFLAGS) libntp.a
+
+check-libunity: ../../sntp/unity/libunity.a
+ @echo stamp > $@
+
+../../sntp/unity/libunity.a:
+ cd ../../sntp/unity && $(MAKE) $(AM_MAKEFLAGS) libunity.a
+$(DEPDIR)/deps-ver: $(top_srcdir)/deps-ver
+ @[ -f $@ ] || \
+ cp $(top_srcdir)/deps-ver $@
+ @[ -w $@ ] || \
+ chmod ug+w $@
+ @cmp $(top_srcdir)/deps-ver $@ > /dev/null || ( \
+ $(MAKE) $(AM_MAKEFLAGS) clean && \
+ echo -n "Prior $(subdir)/$(DEPDIR) version " && \
+ cat $@ && \
+ rm -rf $(DEPDIR) && \
+ mkdir $(DEPDIR) && \
+ case "$(top_builddir)" in \
+ .) \
+ ./config.status Makefile depfiles \
+ ;; \
+ *) \
+ cd "$(top_builddir)" && \
+ ./config.status $(subdir)/Makefile depfiles && \
+ cd $(subdir) \
+ ;; \
+ esac && \
+ echo -n "Cleaned $(subdir)/$(DEPDIR) version " && \
+ cat $(top_srcdir)/deps-ver \
+ )
+ cp $(top_srcdir)/deps-ver $@
+
+.deps-ver: $(top_srcdir)/deps-ver
+ @[ ! -d $(DEPDIR) ] || $(MAKE) $(AM_MAKEFLAGS) $(DEPDIR)/deps-ver
+ @touch $@
+
+#
+# depsver.mf included in Makefile.am for directories with .deps
+#
+# When building in the same directory with sources that change over
+# time, such as when tracking using bk, the .deps files can become
+# stale with respect to moved, deleted, or superceded headers. Most
+# commonly, this would exhibit as make reporting a failure to make a
+# header file which is no longer in the location given. To address
+# this issue, we use a deps-ver file which is updated with each change
+# that breaks old .deps files. A copy of deps-ver is made into
+# $(DEPDIR) if not already present. If $(DEPDIR)/deps-ver is present
+# with different contents than deps-ver, we make clean to ensure all
+# .o files built before the incompatible change are rebuilt along with
+# their updated .deps files, then remove $(DEPDIR) and recreate it as
+# empty stubs.
+#
+# It is normal when configured with --disable-dependency-tracking for
+# the DEPDIR to not have been created. For this reason, we use the
+# intermediate target .deps-ver, which invokes make recursively if
+# DEPDIR exists.
+#
+# If you modify depsver.mf, please make the changes to the master
+# copy, the one in sntp is copied by the bootstrap script from it.
+#
+# This comment block follows rather than leads the related code so that
+# it stays with it in the generated Makefile.in and Makefile.
+#
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/contrib/ntp/tests/ntpq/run-t-ntpq.c b/contrib/ntp/tests/ntpq/run-t-ntpq.c
new file mode 100644
index 0000000..ccf2a06
--- /dev/null
+++ b/contrib/ntp/tests/ntpq/run-t-ntpq.c
@@ -0,0 +1,54 @@
+/* AUTOGENERATED FILE. DO NOT EDIT. */
+
+//=======Test Runner Used To Run Each Test Below=====
+#define RUN_TEST(TestFunc, TestLineNum) \
+{ \
+ Unity.CurrentTestName = #TestFunc; \
+ Unity.CurrentTestLineNumber = TestLineNum; \
+ Unity.NumberOfTests++; \
+ if (TEST_PROTECT()) \
+ { \
+ setUp(); \
+ TestFunc(); \
+ } \
+ if (TEST_PROTECT() && !TEST_IS_IGNORED) \
+ { \
+ tearDown(); \
+ } \
+ UnityConcludeTest(); \
+}
+
+//=======Automagically Detected Files To Include=====
+#include "unity.h"
+#include <setjmp.h>
+#include <stdio.h>
+#include "config.h"
+#include "ntp.h"
+#include "ntpq.h"
+
+//=======External Functions This Runner Calls=====
+extern void setUp(void);
+extern void tearDown(void);
+extern void testPrimary(void);
+
+
+//=======Test Reset Option=====
+void resetTest(void);
+void resetTest(void)
+{
+ tearDown();
+ setUp();
+}
+
+char const *progname;
+
+
+//=======MAIN=====
+int main(int argc, char *argv[])
+{
+ progname = argv[0];
+ UnityBegin("t-ntpq.c");
+ RUN_TEST(testPrimary, 20);
+
+ return (UnityEnd());
+}
diff --git a/contrib/ntp/tests/ntpq/t-ntpq.c b/contrib/ntp/tests/ntpq/t-ntpq.c
new file mode 100644
index 0000000..f4b35c5
--- /dev/null
+++ b/contrib/ntp/tests/ntpq/t-ntpq.c
@@ -0,0 +1,37 @@
+#include "config.h"
+
+#include "ntp.h"
+//#include "ntp_stdlib.h"
+
+
+//#include "ntp_calendar.h"
+
+#include "unity.h"
+#include "ntpq.h"
+
+//very tricky to test static functions. It might be a good idea to use cmock here
+//#define HAVE_NTPQ
+//#include "ntpq.c"
+
+
+
+//extern int main(int argc, char *argv[]);
+
+void testPrimary(void);
+
+void testPrimary(void){
+ //main(NULL,NULL);
+/*
+ char ** tokens;
+ int * num = 0;
+ tokenize("a bc de1 234",tokens, num);
+*/
+}
+
+
+
+
+
+
+
+#define HAVE_NTP_SIGND
diff --git a/contrib/ntp/tests/sandbox/Makefile.am b/contrib/ntp/tests/sandbox/Makefile.am
index 489ceab..c146b14 100644
--- a/contrib/ntp/tests/sandbox/Makefile.am
+++ b/contrib/ntp/tests/sandbox/Makefile.am
@@ -1,11 +1,24 @@
#AUTOMAKE_OPTIONS = foreign 2.9 subdir-objects
+
NULL =
BUILT_SOURCES =
CLEANFILES =
+std_unity_list = \
+ $(top_srcdir)/sntp/unity/auto/generate_test_runner.rb \
+ $(NULL)
+
run_unity = cd $(srcdir) && ruby ../../sntp/unity/auto/generate_test_runner.rb
-check_PROGRAMS = bug-2803 first-test second-test smeartest
+check_PROGRAMS = \
+ first-test \
+ smeartest \
+ $(NULL)
+
+EXTRA_PROGRAMS = \
+ bug-2803 \
+ second-test \
+ $(NULL)
# HMS: we may not need some of these:
LDADD = \
@@ -23,13 +36,15 @@ AM_CPPFLAGS = $(NTP_INCS)
AM_CPPFLAGS += -I$(top_srcdir)/sntp/unity
AM_CPPFLAGS += -I$(top_srcdir)/include
AM_CPPFLAGS += $(CPPFLAGS_NTP)
+AM_CPPFLAGS += -DUNITY_INCLUDE_CONFIG_H
+AM_CPPFLAGS += -I$(top_srcdir)/sntp/unity
AM_LDFLAGS = $(LDFLAGS_NTP)
-bug_2803_SOURCES = \
- bug-2803.c \
- run-ut-2803.c \
- ut-2803.c \
+bug_2803_SOURCES = \
+ bug-2803.c \
+ run-ut-2803.c \
+ ut-2803.c \
$(NULL)
$(srcdir)/run-ut-2803.c: $(srcdir)/ut-2803.c $(std_unity_list)
diff --git a/contrib/ntp/tests/sandbox/Makefile.in b/contrib/ntp/tests/sandbox/Makefile.in
index 70edbc9..e524c70 100644
--- a/contrib/ntp/tests/sandbox/Makefile.in
+++ b/contrib/ntp/tests/sandbox/Makefile.in
@@ -13,6 +13,8 @@
# PARTICULAR PURPOSE.
@SET_MAKE@
+
+#AUTOMAKE_OPTIONS = foreign 2.9 subdir-objects
VPATH = @srcdir@
am__is_gnu_make = { \
if test -z '$(MAKELEVEL)'; then \
@@ -87,8 +89,10 @@ PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
-check_PROGRAMS = bug-2803$(EXEEXT) first-test$(EXEEXT) \
- second-test$(EXEEXT) smeartest$(EXEEXT)
+check_PROGRAMS = first-test$(EXEEXT) smeartest$(EXEEXT) \
+ $(am__EXEEXT_1)
+EXTRA_PROGRAMS = bug-2803$(EXEEXT) second-test$(EXEEXT) \
+ $(am__EXEEXT_1)
@NTP_CROSSCOMPILE_FALSE@am__append_1 = $(check_PROGRAMS)
subdir = tests/sandbox
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
@@ -118,6 +122,7 @@ am__aclocal_m4_deps = $(top_srcdir)/sntp/libopts/m4/libopts.m4 \
$(top_srcdir)/sntp/m4/ntp_locinfo.m4 \
$(top_srcdir)/sntp/m4/ntp_openssl.m4 \
$(top_srcdir)/sntp/m4/ntp_pkg_config.m4 \
+ $(top_srcdir)/sntp/m4/ntp_problemtests.m4 \
$(top_srcdir)/sntp/m4/ntp_prog_cc.m4 \
$(top_srcdir)/sntp/m4/ntp_rlimit.m4 \
$(top_srcdir)/sntp/m4/ntp_sntp.m4 \
@@ -136,6 +141,7 @@ mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/config.h
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
+am__EXEEXT_1 =
am__objects_1 =
am_bug_2803_OBJECTS = bug-2803.$(OBJEXT) run-ut-2803.$(OBJEXT) \
ut-2803.$(OBJEXT) $(am__objects_1)
@@ -455,6 +461,7 @@ AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
+BUILD_THREAD = @BUILD_THREAD@
CALC_TICKADJ_DB = @CALC_TICKADJ_DB@
CALC_TICKADJ_DL = @CALC_TICKADJ_DL@
CALC_TICKADJ_DS = @CALC_TICKADJ_DS@
@@ -463,6 +470,7 @@ CALC_TICKADJ_NI = @CALC_TICKADJ_NI@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
+CFLAGS_LIBEVENT = @CFLAGS_LIBEVENT@
CFLAGS_NTP = @CFLAGS_NTP@
CHUTEST = @CHUTEST@
CONFIG_SHELL = @CONFIG_SHELL@
@@ -524,6 +532,7 @@ LIBTOOL_DEPS = @LIBTOOL_DEPS@
LIPO = @LIPO@
LN_S = @LN_S@
LSCF = @LSCF@
+LTHREAD_LIBS = @LTHREAD_LIBS@
LTLIBOBJS = @LTLIBOBJS@
MAKEINFO = @MAKEINFO@
MAKE_ADJTIMED = @MAKE_ADJTIMED@
@@ -709,12 +718,14 @@ target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
-
-#AUTOMAKE_OPTIONS = foreign 2.9 subdir-objects
NULL =
BUILT_SOURCES = run-ut-2803.c run-uglydate.c run-modetoa.c \
check-libntp check-libunity .deps-ver
CLEANFILES = check-libntp check-libunity .deps-ver
+std_unity_list = \
+ $(top_srcdir)/sntp/unity/auto/generate_test_runner.rb \
+ $(NULL)
+
run_unity = cd $(srcdir) && ruby ../../sntp/unity/auto/generate_test_runner.rb
# HMS: we may not need some of these:
@@ -730,12 +741,13 @@ AM_CFLAGS = $(CFLAGS_NTP)
# HMS: we may not need some of these:
AM_CPPFLAGS = $(NTP_INCS) -I$(top_srcdir)/sntp/unity \
- -I$(top_srcdir)/include $(CPPFLAGS_NTP)
+ -I$(top_srcdir)/include $(CPPFLAGS_NTP) \
+ -DUNITY_INCLUDE_CONFIG_H -I$(top_srcdir)/sntp/unity
AM_LDFLAGS = $(LDFLAGS_NTP)
bug_2803_SOURCES = \
- bug-2803.c \
- run-ut-2803.c \
- ut-2803.c \
+ bug-2803.c \
+ run-ut-2803.c \
+ ut-2803.c \
$(NULL)
first_test_SOURCES = \
@@ -1048,13 +1060,6 @@ recheck: all $(check_PROGRAMS)
am__force_recheck=am--force-recheck \
TEST_LOGS="$$log_list"; \
exit $$?
-bug-2803.log: bug-2803$(EXEEXT)
- @p='bug-2803$(EXEEXT)'; \
- b='bug-2803'; \
- $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
- --log-file $$b.log --trs-file $$b.trs \
- $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
- "$$tst" $(AM_TESTS_FD_REDIRECT)
first-test.log: first-test$(EXEEXT)
@p='first-test$(EXEEXT)'; \
b='first-test'; \
@@ -1062,13 +1067,6 @@ first-test.log: first-test$(EXEEXT)
--log-file $$b.log --trs-file $$b.trs \
$(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
"$$tst" $(AM_TESTS_FD_REDIRECT)
-second-test.log: second-test$(EXEEXT)
- @p='second-test$(EXEEXT)'; \
- b='second-test'; \
- $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
- --log-file $$b.log --trs-file $$b.trs \
- $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
- "$$tst" $(AM_TESTS_FD_REDIRECT)
smeartest.log: smeartest$(EXEEXT)
@p='smeartest$(EXEEXT)'; \
b='smeartest'; \
diff --git a/contrib/ntp/tests/sandbox/run-modetoa.c b/contrib/ntp/tests/sandbox/run-modetoa.c
index 776dda4..143bd75 100644
--- a/contrib/ntp/tests/sandbox/run-modetoa.c
+++ b/contrib/ntp/tests/sandbox/run-modetoa.c
@@ -31,18 +31,21 @@ extern void test_UnknownMode(void);
//=======Test Reset Option=====
-void resetTest()
+void resetTest(void);
+void resetTest(void)
{
tearDown();
setUp();
}
+char const *progname;
+
//=======MAIN=====
-int main(void)
+int main(int argc, char *argv[])
{
- Unity.TestFile = "modetoa.c";
- UnityBegin("");
+ progname = argv[0];
+ UnityBegin("modetoa.c");
RUN_TEST(test_KnownMode, 8);
RUN_TEST(test_UnknownMode, 15);
diff --git a/contrib/ntp/tests/sandbox/run-uglydate.c b/contrib/ntp/tests/sandbox/run-uglydate.c
index dd909ad..e65cd01 100644
--- a/contrib/ntp/tests/sandbox/run-uglydate.c
+++ b/contrib/ntp/tests/sandbox/run-uglydate.c
@@ -22,6 +22,8 @@
#include "unity.h"
#include <setjmp.h>
#include <stdio.h>
+#include "config.h"
+#include "ntp_fp.h"
//=======External Functions This Runner Calls=====
extern void setUp(void);
@@ -30,18 +32,21 @@ extern void test_ConstantDateTime(void);
//=======Test Reset Option=====
-void resetTest()
+void resetTest(void);
+void resetTest(void)
{
tearDown();
setUp();
}
+char const *progname;
+
//=======MAIN=====
-int main(void)
+int main(int argc, char *argv[])
{
- Unity.TestFile = "uglydate.c";
- UnityBegin("");
+ progname = argv[0];
+ UnityBegin("uglydate.c");
RUN_TEST(test_ConstantDateTime, 9);
return (UnityEnd());
diff --git a/contrib/ntp/tests/sandbox/run-ut-2803.c b/contrib/ntp/tests/sandbox/run-ut-2803.c
index d6ca2ee..b948c4a 100644
--- a/contrib/ntp/tests/sandbox/run-ut-2803.c
+++ b/contrib/ntp/tests/sandbox/run-ut-2803.c
@@ -35,18 +35,21 @@ extern void test_ignored(void);
//=======Test Reset Option=====
-void resetTest()
+void resetTest(void);
+void resetTest(void)
{
tearDown();
setUp();
}
+char const *progname;
+
//=======MAIN=====
-int main(void)
+int main(int argc, char *argv[])
{
- Unity.TestFile = "ut-2803.c";
- UnityBegin("");
+ progname = argv[0];
+ UnityBegin("ut-2803.c");
RUN_TEST(test_main, 30);
RUN_TEST(test_XPASS, 37);
RUN_TEST(test_XFAIL, 49);
diff --git a/contrib/ntp/tests/sandbox/smeartest.c b/contrib/ntp/tests/sandbox/smeartest.c
index e1b04e5..a8ee210 100644
--- a/contrib/ntp/tests/sandbox/smeartest.c
+++ b/contrib/ntp/tests/sandbox/smeartest.c
@@ -127,6 +127,8 @@ ltor(l_fp l)
main()
{
+ l_fp l;
+ int rc;
rtol(0xfe800000);
rtol(0xfe800001);
@@ -164,5 +166,15 @@ main()
rtoltor(0xfe7ffffe);
rtoltor(0xfe7fffff);
+ rc = atolfp("-.932087", &l);
+ ltor(l);
+ rtol(0xfec458b0);
+ printf("%x -> %d.%d.%d.%d\n",
+ 0xfec458b0,
+ 0xfe,
+ 0xc4,
+ 0x58,
+ 0xb0);
+
return 0;
}
diff --git a/contrib/ntp/tests/sec-2853/Makefile.am b/contrib/ntp/tests/sec-2853/Makefile.am
index 417ff6b..59734da 100644
--- a/contrib/ntp/tests/sec-2853/Makefile.am
+++ b/contrib/ntp/tests/sec-2853/Makefile.am
@@ -27,6 +27,8 @@ AM_CPPFLAGS = $(NTP_INCS)
AM_CPPFLAGS += -I$(top_srcdir)/sntp/unity
AM_CPPFLAGS += -I$(top_srcdir)/include
AM_CPPFLAGS += $(CPPFLAGS_NTP)
+AM_CPPFLAGS += -DUNITY_INCLUDE_CONFIG_H
+AM_CPPFLAGS += -I$(top_srcdir)/sntp/unity
AM_LDFLAGS = $(LDFLAGS_NTP)
diff --git a/contrib/ntp/tests/sec-2853/Makefile.in b/contrib/ntp/tests/sec-2853/Makefile.in
index 4336e59..3f581c7 100644
--- a/contrib/ntp/tests/sec-2853/Makefile.in
+++ b/contrib/ntp/tests/sec-2853/Makefile.in
@@ -117,6 +117,7 @@ am__aclocal_m4_deps = $(top_srcdir)/sntp/libopts/m4/libopts.m4 \
$(top_srcdir)/sntp/m4/ntp_locinfo.m4 \
$(top_srcdir)/sntp/m4/ntp_openssl.m4 \
$(top_srcdir)/sntp/m4/ntp_pkg_config.m4 \
+ $(top_srcdir)/sntp/m4/ntp_problemtests.m4 \
$(top_srcdir)/sntp/m4/ntp_prog_cc.m4 \
$(top_srcdir)/sntp/m4/ntp_rlimit.m4 \
$(top_srcdir)/sntp/m4/ntp_sntp.m4 \
@@ -429,6 +430,7 @@ AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
+BUILD_THREAD = @BUILD_THREAD@
CALC_TICKADJ_DB = @CALC_TICKADJ_DB@
CALC_TICKADJ_DL = @CALC_TICKADJ_DL@
CALC_TICKADJ_DS = @CALC_TICKADJ_DS@
@@ -437,6 +439,7 @@ CALC_TICKADJ_NI = @CALC_TICKADJ_NI@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
+CFLAGS_LIBEVENT = @CFLAGS_LIBEVENT@
CFLAGS_NTP = @CFLAGS_NTP@
CHUTEST = @CHUTEST@
CONFIG_SHELL = @CONFIG_SHELL@
@@ -498,8 +501,8 @@ LIBTOOL_DEPS = @LIBTOOL_DEPS@
LIPO = @LIPO@
LN_S = @LN_S@
LSCF = @LSCF@
+LTHREAD_LIBS = @LTHREAD_LIBS@
LTLIBOBJS = @LTLIBOBJS@
-LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@
MAKEINFO = @MAKEINFO@
MAKE_ADJTIMED = @MAKE_ADJTIMED@
MAKE_CHECK_LAYOUT = @MAKE_CHECK_LAYOUT@
@@ -709,7 +712,8 @@ AM_CFLAGS = $(CFLAGS_NTP)
# HMS: we may not need some of these:
AM_CPPFLAGS = $(NTP_INCS) -I$(top_srcdir)/sntp/unity \
- -I$(top_srcdir)/include $(CPPFLAGS_NTP)
+ -I$(top_srcdir)/include $(CPPFLAGS_NTP) \
+ -DUNITY_INCLUDE_CONFIG_H -I$(top_srcdir)/sntp/unity
AM_LDFLAGS = $(LDFLAGS_NTP)
sec_2853_SOURCES = \
run-sec-2853.c \
diff --git a/contrib/ntp/tests/sec-2853/run-sec-2853.c b/contrib/ntp/tests/sec-2853/run-sec-2853.c
index c8771bf..1159a77 100644
--- a/contrib/ntp/tests/sec-2853/run-sec-2853.c
+++ b/contrib/ntp/tests/sec-2853/run-sec-2853.c
@@ -22,33 +22,32 @@
#include "unity.h"
#include <setjmp.h>
#include <stdio.h>
+#include <config.h>
+#include <rc_cmdlength.h>
//=======External Functions This Runner Calls=====
extern void setUp(void);
extern void tearDown(void);
-void resetTest(void);
-extern void test_main(void );
extern void test_main(void );
//=======Test Reset Option=====
-void resetTest()
+void resetTest(void);
+void resetTest(void)
{
tearDown();
setUp();
}
-char *progname;
+char const *progname;
//=======MAIN=====
int main(int argc, char *argv[])
{
progname = argv[0];
- Unity.TestFile = "sec-2853.c";
UnityBegin("sec-2853.c");
- RUN_TEST(test_main, 8);
- RUN_TEST(test_main, 8);
+ RUN_TEST(test_main, 10);
return (UnityEnd());
}
diff --git a/contrib/ntp/tests/sec-2853/sec-2853.c b/contrib/ntp/tests/sec-2853/sec-2853.c
index 6499fdf..49589d2 100644
--- a/contrib/ntp/tests/sec-2853/sec-2853.c
+++ b/contrib/ntp/tests/sec-2853/sec-2853.c
@@ -1,5 +1,7 @@
#include <config.h>
+#include <rc_cmdlength.h>
+
#include "unity.h"
void setUp(void);
@@ -10,8 +12,6 @@ int basic_good( void );
int embedded_nul( void );
int trailing_space( void );
-extern size_t remoteconfig_cmdlength(const char *, const char *);
-
static int verbose = 1; // if not 0, also print results if test passed
static int exit_on_err = 0; // if not 0, exit if test failed
diff --git a/contrib/ntp/util/Makefile.in b/contrib/ntp/util/Makefile.in
index 9160af2..e7a02d9 100644
--- a/contrib/ntp/util/Makefile.in
+++ b/contrib/ntp/util/Makefile.in
@@ -126,6 +126,7 @@ am__aclocal_m4_deps = $(top_srcdir)/sntp/libopts/m4/libopts.m4 \
$(top_srcdir)/sntp/m4/ntp_locinfo.m4 \
$(top_srcdir)/sntp/m4/ntp_openssl.m4 \
$(top_srcdir)/sntp/m4/ntp_pkg_config.m4 \
+ $(top_srcdir)/sntp/m4/ntp_problemtests.m4 \
$(top_srcdir)/sntp/m4/ntp_prog_cc.m4 \
$(top_srcdir)/sntp/m4/ntp_rlimit.m4 \
$(top_srcdir)/sntp/m4/ntp_sntp.m4 \
@@ -341,6 +342,7 @@ AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
+BUILD_THREAD = @BUILD_THREAD@
CALC_TICKADJ_DB = @CALC_TICKADJ_DB@
CALC_TICKADJ_DL = @CALC_TICKADJ_DL@
CALC_TICKADJ_DS = @CALC_TICKADJ_DS@
@@ -349,6 +351,7 @@ CALC_TICKADJ_NI = @CALC_TICKADJ_NI@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
+CFLAGS_LIBEVENT = @CFLAGS_LIBEVENT@
CFLAGS_NTP = @CFLAGS_NTP@
CHUTEST = @CHUTEST@
CONFIG_SHELL = @CONFIG_SHELL@
@@ -410,6 +413,7 @@ LIBTOOL_DEPS = @LIBTOOL_DEPS@
LIPO = @LIPO@
LN_S = @LN_S@
LSCF = @LSCF@
+LTHREAD_LIBS = @LTHREAD_LIBS@
LTLIBOBJS = @LTLIBOBJS@
MAKEINFO = @MAKEINFO@
MAKE_ADJTIMED = @MAKE_ADJTIMED@
diff --git a/contrib/ntp/util/invoke-ntp-keygen.texi b/contrib/ntp/util/invoke-ntp-keygen.texi
index 974e453..eafcb43 100644
--- a/contrib/ntp/util/invoke-ntp-keygen.texi
+++ b/contrib/ntp/util/invoke-ntp-keygen.texi
@@ -6,7 +6,7 @@
#
# EDIT THIS FILE WITH CAUTION (invoke-ntp-keygen.texi)
#
-# It has been AutoGen-ed June 29, 2015 at 04:32:15 PM by AutoGen 5.18.5
+# It has been AutoGen-ed October 21, 2015 at 12:40:07 PM by AutoGen 5.18.5
# From the definitions ntp-keygen-opts.def
# and the template file agtexi-cmd.tpl
@end ignore
@@ -886,7 +886,7 @@ with a status code of 0.
@exampleindent 0
@example
-ntp-keygen (ntp) - Create a NTP host key - Ver. 4.2.8p3
+ntp-keygen (ntp) - Create a NTP host key - Ver. 4.2.8p4
Usage: ntp-keygen [ -<flag> [<val>] | --<name>[@{=| @}<val>] ]...
Flg Arg Option-Name Description
-b Num imbits identity modulus bits
diff --git a/contrib/ntp/util/ntp-keygen-opts.c b/contrib/ntp/util/ntp-keygen-opts.c
index 6a05a68..1f256f9 100644
--- a/contrib/ntp/util/ntp-keygen-opts.c
+++ b/contrib/ntp/util/ntp-keygen-opts.c
@@ -1,7 +1,7 @@
/*
* EDIT THIS FILE WITH CAUTION (ntp-keygen-opts.c)
*
- * It has been AutoGen-ed June 29, 2015 at 04:32:00 PM by AutoGen 5.18.5
+ * It has been AutoGen-ed October 21, 2015 at 12:39:50 PM by AutoGen 5.18.5
* From the definitions ntp-keygen-opts.def
* and the template file options
*
@@ -72,7 +72,7 @@ extern FILE * option_usage_fp;
* static const strings for ntp-keygen options
*/
static char const ntp_keygen_opt_strs[2419] =
-/* 0 */ "ntp-keygen (ntp) 4.2.8p3\n"
+/* 0 */ "ntp-keygen (ntp) 4.2.8p4\n"
"Copyright (C) 1992-2015 The University of Delaware and Network Time Foundation, all rights reserved.\n"
"This is free software. It is licensed for use, modification and\n"
"redistribution under the terms of the NTP License, copies of which\n"
@@ -164,14 +164,14 @@ static char const ntp_keygen_opt_strs[2419] =
/* 2202 */ "no-load-opts\0"
/* 2215 */ "no\0"
/* 2218 */ "NTP_KEYGEN\0"
-/* 2229 */ "ntp-keygen (ntp) - Create a NTP host key - Ver. 4.2.8p3\n"
+/* 2229 */ "ntp-keygen (ntp) - Create a NTP host key - Ver. 4.2.8p4\n"
"Usage: %s [ -<flag> [<val>] | --<name>[{=| }<val>] ]...\n\0"
/* 2343 */ "$HOME\0"
/* 2349 */ ".\0"
/* 2351 */ ".ntprc\0"
/* 2358 */ "http://bugs.ntp.org, bugs@ntp.org\0"
/* 2392 */ "\n\0"
-/* 2394 */ "ntp-keygen (ntp) 4.2.8p3";
+/* 2394 */ "ntp-keygen (ntp) 4.2.8p4";
/**
* imbits option description:
@@ -1309,7 +1309,7 @@ static void bogus_function(void) {
translate option names.
*/
/* referenced via ntp_keygenOptions.pzCopyright */
- puts(_("ntp-keygen (ntp) 4.2.8p3\n\
+ puts(_("ntp-keygen (ntp) 4.2.8p4\n\
Copyright (C) 1992-2015 The University of Delaware and Network Time Foundation, all rights reserved.\n\
This is free software. It is licensed for use, modification and\n\
redistribution under the terms of the NTP License, copies of which\n\
@@ -1408,14 +1408,14 @@ implied warranty.\n"));
puts(_("load options from a config file"));
/* referenced via ntp_keygenOptions.pzUsageTitle */
- puts(_("ntp-keygen (ntp) - Create a NTP host key - Ver. 4.2.8p3\n\
+ puts(_("ntp-keygen (ntp) - Create a NTP host key - Ver. 4.2.8p4\n\
Usage: %s [ -<flag> [<val>] | --<name>[{=| }<val>] ]...\n"));
/* referenced via ntp_keygenOptions.pzExplain */
puts(_("\n"));
/* referenced via ntp_keygenOptions.pzFullVersion */
- puts(_("ntp-keygen (ntp) 4.2.8p3"));
+ puts(_("ntp-keygen (ntp) 4.2.8p4"));
/* referenced via ntp_keygenOptions.pzFullUsage */
puts(_("<<<NOT-FOUND>>>"));
diff --git a/contrib/ntp/util/ntp-keygen-opts.h b/contrib/ntp/util/ntp-keygen-opts.h
index ef58041..c88bef8 100644
--- a/contrib/ntp/util/ntp-keygen-opts.h
+++ b/contrib/ntp/util/ntp-keygen-opts.h
@@ -1,7 +1,7 @@
/*
* EDIT THIS FILE WITH CAUTION (ntp-keygen-opts.h)
*
- * It has been AutoGen-ed June 29, 2015 at 04:32:00 PM by AutoGen 5.18.5
+ * It has been AutoGen-ed October 21, 2015 at 12:39:50 PM by AutoGen 5.18.5
* From the definitions ntp-keygen-opts.def
* and the template file options
*
@@ -94,9 +94,9 @@ typedef enum {
/** count of all options for ntp-keygen */
#define OPTION_CT 26
/** ntp-keygen version */
-#define NTP_KEYGEN_VERSION "4.2.8p3"
+#define NTP_KEYGEN_VERSION "4.2.8p4"
/** Full ntp-keygen version text */
-#define NTP_KEYGEN_FULL_VERSION "ntp-keygen (ntp) 4.2.8p3"
+#define NTP_KEYGEN_FULL_VERSION "ntp-keygen (ntp) 4.2.8p4"
/**
* Interface defines for all options. Replace "n" with the UPPER_CASED
diff --git a/contrib/ntp/util/ntp-keygen.1ntp-keygenman b/contrib/ntp/util/ntp-keygen.1ntp-keygenman
index 21dbfa7..99d9925 100644
--- a/contrib/ntp/util/ntp-keygen.1ntp-keygenman
+++ b/contrib/ntp/util/ntp-keygen.1ntp-keygenman
@@ -10,11 +10,11 @@
.ds B-Font B
.ds I-Font I
.ds R-Font R
-.TH ntp-keygen 1ntp-keygenman "29 Jun 2015" "ntp (4.2.8p3)" "User Commands"
+.TH ntp-keygen 1ntp-keygenman "21 Oct 2015" "ntp (4.2.8p4)" "User Commands"
.\"
-.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-M4aiZI/ag-Y4aaYI)
+.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-r5aiQP/ag-E5aaPP)
.\"
-.\" It has been AutoGen-ed June 29, 2015 at 04:32:11 PM by AutoGen 5.18.5
+.\" It has been AutoGen-ed October 21, 2015 at 12:40:02 PM by AutoGen 5.18.5
.\" From the definitions ntp-keygen-opts.def
.\" and the template file agman-cmd.tpl
.SH NAME
diff --git a/contrib/ntp/util/ntp-keygen.1ntp-keygenmdoc b/contrib/ntp/util/ntp-keygen.1ntp-keygenmdoc
index 4299b0b..7b749fd 100644
--- a/contrib/ntp/util/ntp-keygen.1ntp-keygenmdoc
+++ b/contrib/ntp/util/ntp-keygen.1ntp-keygenmdoc
@@ -1,9 +1,9 @@
-.Dd June 29 2015
+.Dd October 21 2015
.Dt NTP_KEYGEN 1ntp-keygenmdoc User Commands
.Os
.\" EDIT THIS FILE WITH CAUTION (ntp-keygen-opts.mdoc)
.\"
-.\" It has been AutoGen-ed June 29, 2015 at 04:32:18 PM by AutoGen 5.18.5
+.\" It has been AutoGen-ed October 21, 2015 at 12:40:10 PM by AutoGen 5.18.5
.\" From the definitions ntp-keygen-opts.def
.\" and the template file agmdoc-cmd.tpl
.Sh NAME
diff --git a/contrib/ntp/util/ntp-keygen.c b/contrib/ntp/util/ntp-keygen.c
index 494bedb..9568adc 100644
--- a/contrib/ntp/util/ntp-keygen.c
+++ b/contrib/ntp/util/ntp-keygen.c
@@ -154,7 +154,7 @@ u_long asn2ntp (ASN1_TIME *);
* Program variables
*/
extern char *optarg; /* command line argument */
-char *progname;
+char const *progname;
u_int lifetime = DAYSPERYEAR; /* certificate lifetime (days) */
int nkeys; /* MV keys */
time_t epoch; /* Unix epoch (seconds) since 1970 */
@@ -355,8 +355,8 @@ main(
fstamp = (u_int)(epoch + JAN_1970);
optct = ntpOptionProcess(&ntp_keygenOptions, argc, argv);
- argc -= optct;
- argv += optct;
+ argc -= optct; // Just in case we care later.
+ argv += optct; // Just in case we care later.
#ifdef OPENSSL
if (SSLeay() == SSLEAY_VERSION_NUMBER)
diff --git a/contrib/ntp/util/ntp-keygen.html b/contrib/ntp/util/ntp-keygen.html
index e366734..39d911e 100644
--- a/contrib/ntp/util/ntp-keygen.html
+++ b/contrib/ntp/util/ntp-keygen.html
@@ -70,7 +70,7 @@ All other files are in PEM-encoded
printable ASCII format so they can be embedded as MIME attachments in
mail to other sites.
- <p>This document applies to version 4.2.8p3 of <code>ntp-keygen</code>.
+ <p>This document applies to version 4.2.8p4 of <code>ntp-keygen</code>.
<div class="node">
<p><hr>
@@ -1085,7 +1085,7 @@ the usage text by passing it through a pager program.
used to select the program, defaulting to <span class="file">more</span>. Both will exit
with a status code of 0.
-<pre class="example">ntp-keygen (ntp) - Create a NTP host key - Ver. 4.2.8p3-RC3
+<pre class="example">ntp-keygen (ntp) - Create a NTP host key - Ver. 4.2.8p4-sec-RC2
Usage: ntp-keygen [ -&lt;flag&gt; [&lt;val&gt;] | --&lt;name&gt;[{=| }&lt;val&gt;] ]...
Flg Arg Option-Name Description
-b Num imbits identity modulus bits
diff --git a/contrib/ntp/util/ntp-keygen.man.in b/contrib/ntp/util/ntp-keygen.man.in
index e1e838e..a928768 100644
--- a/contrib/ntp/util/ntp-keygen.man.in
+++ b/contrib/ntp/util/ntp-keygen.man.in
@@ -10,11 +10,11 @@
.ds B-Font B
.ds I-Font I
.ds R-Font R
-.TH ntp-keygen @NTP_KEYGEN_MS@ "29 Jun 2015" "ntp (4.2.8p3)" "User Commands"
+.TH ntp-keygen @NTP_KEYGEN_MS@ "21 Oct 2015" "ntp (4.2.8p4)" "User Commands"
.\"
-.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-M4aiZI/ag-Y4aaYI)
+.\" EDIT THIS FILE WITH CAUTION (/tmp/.ag-r5aiQP/ag-E5aaPP)
.\"
-.\" It has been AutoGen-ed June 29, 2015 at 04:32:11 PM by AutoGen 5.18.5
+.\" It has been AutoGen-ed October 21, 2015 at 12:40:02 PM by AutoGen 5.18.5
.\" From the definitions ntp-keygen-opts.def
.\" and the template file agman-cmd.tpl
.SH NAME
diff --git a/contrib/ntp/util/ntp-keygen.mdoc.in b/contrib/ntp/util/ntp-keygen.mdoc.in
index 7a505a2..4d035cb 100644
--- a/contrib/ntp/util/ntp-keygen.mdoc.in
+++ b/contrib/ntp/util/ntp-keygen.mdoc.in
@@ -1,9 +1,9 @@
-.Dd June 29 2015
+.Dd October 21 2015
.Dt NTP_KEYGEN @NTP_KEYGEN_MS@ User Commands
.Os
.\" EDIT THIS FILE WITH CAUTION (ntp-keygen-opts.mdoc)
.\"
-.\" It has been AutoGen-ed June 29, 2015 at 04:32:18 PM by AutoGen 5.18.5
+.\" It has been AutoGen-ed October 21, 2015 at 12:40:10 PM by AutoGen 5.18.5
.\" From the definitions ntp-keygen-opts.def
.\" and the template file agmdoc-cmd.tpl
.Sh NAME
diff --git a/contrib/ntp/util/ntptime.c b/contrib/ntp/util/ntptime.c
index 5a6c1d1..c47e356 100644
--- a/contrib/ntp/util/ntptime.c
+++ b/contrib/ntp/util/ntptime.c
@@ -73,7 +73,7 @@ static sigjmp_buf env; /* environment var. for pll_trap() */
static volatile int pll_control; /* (0) daemon, (1) kernel loop */
static volatile int status; /* most recent status bits */
static volatile int flash; /* most recent ntp_adjtime() bits */
-char* progname;
+char const * progname;
static char optargs[] = "MNT:cde:f:hm:o:rs:t:";
int
@@ -91,7 +91,7 @@ main(
#endif
struct timeval tv;
struct timex ntx, _ntx;
- int times[20];
+ int times[20] = { 0 };
double ftemp, gtemp, htemp;
long time_frac; /* ntv.time.tv_frac_sec (us/ns) */
l_fp ts;
diff --git a/crypto/openssl/CHANGES b/crypto/openssl/CHANGES
index 2e888f7..5d4c234 100644
--- a/crypto/openssl/CHANGES
+++ b/crypto/openssl/CHANGES
@@ -2,7 +2,7 @@
OpenSSL CHANGES
_______________
- Changes between 1.0.1o and 1.0.1p [9 Jul 2015]
+ Changes between 1.0.2c and 1.0.2d [9 Jul 2015]
*) Alternate chains certificate forgery
@@ -17,13 +17,13 @@
(Google/BoringSSL).
[Matt Caswell]
- Changes between 1.0.1n and 1.0.1o [12 Jun 2015]
+ Changes between 1.0.2b and 1.0.2c [12 Jun 2015]
*) Fix HMAC ABI incompatibility. The previous version introduced an ABI
incompatibility in the handling of HMAC. The previous ABI has now been
restored.
- Changes between 1.0.1m and 1.0.1n [11 Jun 2015]
+ Changes between 1.0.2a and 1.0.2b [11 Jun 2015]
*) Malformed ECParameters causes infinite loop
@@ -91,10 +91,65 @@
(CVE-2015-1791)
[Matt Caswell]
+ *) Removed support for the two export grade static DH ciphersuites
+ EXP-DH-RSA-DES-CBC-SHA and EXP-DH-DSS-DES-CBC-SHA. These two ciphersuites
+ were newly added (along with a number of other static DH ciphersuites) to
+ 1.0.2. However the two export ones have *never* worked since they were
+ introduced. It seems strange in any case to be adding new export
+ ciphersuites, and given "logjam" it also does not seem correct to fix them.
+ [Matt Caswell]
+
+ *) Only support 256-bit or stronger elliptic curves with the
+ 'ecdh_auto' setting (server) or by default (client). Of supported
+ curves, prefer P-256 (both).
+ [Emilia Kasper]
+
*) Reject DH handshakes with parameters shorter than 768 bits.
[Kurt Roeckx and Emilia Kasper]
- Changes between 1.0.1l and 1.0.1m [19 Mar 2015]
+ Changes between 1.0.2 and 1.0.2a [19 Mar 2015]
+
+ *) ClientHello sigalgs DoS fix
+
+ If a client connects to an OpenSSL 1.0.2 server and renegotiates with an
+ invalid signature algorithms extension a NULL pointer dereference will
+ occur. This can be exploited in a DoS attack against the server.
+
+ This issue was was reported to OpenSSL by David Ramos of Stanford
+ University.
+ (CVE-2015-0291)
+ [Stephen Henson and Matt Caswell]
+
+ *) Multiblock corrupted pointer fix
+
+ OpenSSL 1.0.2 introduced the "multiblock" performance improvement. This
+ feature only applies on 64 bit x86 architecture platforms that support AES
+ NI instructions. A defect in the implementation of "multiblock" can cause
+ OpenSSL's internal write buffer to become incorrectly set to NULL when
+ using non-blocking IO. Typically, when the user application is using a
+ socket BIO for writing, this will only result in a failed connection.
+ However if some other BIO is used then it is likely that a segmentation
+ fault will be triggered, thus enabling a potential DoS attack.
+
+ This issue was reported to OpenSSL by Daniel Danner and Rainer Mueller.
+ (CVE-2015-0290)
+ [Matt Caswell]
+
+ *) Segmentation fault in DTLSv1_listen fix
+
+ The DTLSv1_listen function is intended to be stateless and processes the
+ initial ClientHello from many peers. It is common for user code to loop
+ over the call to DTLSv1_listen until a valid ClientHello is received with
+ an associated cookie. A defect in the implementation of DTLSv1_listen means
+ that state is preserved in the SSL object from one invocation to the next
+ that can lead to a segmentation fault. Errors processing the initial
+ ClientHello can trigger this scenario. An example of such an error could be
+ that a DTLS1.0 only client is attempting to connect to a DTLS1.2 only
+ server.
+
+ This issue was reported to OpenSSL by Per Allansson.
+ (CVE-2015-0207)
+ [Matt Caswell]
*) Segmentation fault in ASN1_TYPE_cmp fix
@@ -107,6 +162,20 @@
(CVE-2015-0286)
[Stephen Henson]
+ *) Segmentation fault for invalid PSS parameters fix
+
+ The signature verification routines will crash with a NULL pointer
+ dereference if presented with an ASN.1 signature using the RSA PSS
+ algorithm and invalid parameters. Since these routines are used to verify
+ certificate signature algorithms this can be used to crash any
+ certificate verification operation and exploited in a DoS attack. Any
+ application which performs certificate verification is vulnerable including
+ OpenSSL clients and servers which enable client authentication.
+
+ This issue was was reported to OpenSSL by Brian Carpenter.
+ (CVE-2015-0208)
+ [Stephen Henson]
+
*) ASN.1 structure reuse memory corruption fix
Reusing a structure in ASN.1 parsing may allow an attacker to cause
@@ -145,6 +214,36 @@
(CVE-2015-0293)
[Emilia Käsper]
+ *) Empty CKE with client auth and DHE fix
+
+ If client auth is used then a server can seg fault in the event of a DHE
+ ciphersuite being selected and a zero length ClientKeyExchange message
+ being sent by the client. This could be exploited in a DoS attack.
+ (CVE-2015-1787)
+ [Matt Caswell]
+
+ *) Handshake with unseeded PRNG fix
+
+ Under certain conditions an OpenSSL 1.0.2 client can complete a handshake
+ with an unseeded PRNG. The conditions are:
+ - The client is on a platform where the PRNG has not been seeded
+ automatically, and the user has not seeded manually
+ - A protocol specific client method version has been used (i.e. not
+ SSL_client_methodv23)
+ - A ciphersuite is used that does not require additional random data from
+ the PRNG beyond the initial ClientHello client random (e.g. PSK-RC4-SHA).
+
+ If the handshake succeeds then the client random that has been used will
+ have been generated from a PRNG with insufficient entropy and therefore the
+ output may be predictable.
+
+ For example using the following command with an unseeded openssl will
+ succeed on an unpatched platform:
+
+ openssl s_client -psk 1a2b3c4d -tls1_2 -cipher PSK-RC4-SHA
+ (CVE-2015-0285)
+ [Matt Caswell]
+
*) Use After Free following d2i_ECPrivatekey error fix
A malformed EC private key file consumed via the d2i_ECPrivateKey function
@@ -171,6 +270,336 @@
*) Removed the export ciphers from the DEFAULT ciphers
[Kurt Roeckx]
+ Changes between 1.0.1l and 1.0.2 [22 Jan 2015]
+
+ *) Facilitate "universal" ARM builds targeting range of ARM ISAs, e.g.
+ ARMv5 through ARMv8, as opposite to "locking" it to single one.
+ So far those who have to target multiple plaforms would compromise
+ and argue that binary targeting say ARMv5 would still execute on
+ ARMv8. "Universal" build resolves this compromise by providing
+ near-optimal performance even on newer platforms.
+ [Andy Polyakov]
+
+ *) Accelerated NIST P-256 elliptic curve implementation for x86_64
+ (other platforms pending).
+ [Shay Gueron & Vlad Krasnov (Intel Corp), Andy Polyakov]
+
+ *) Add support for the SignedCertificateTimestampList certificate and
+ OCSP response extensions from RFC6962.
+ [Rob Stradling]
+
+ *) Fix ec_GFp_simple_points_make_affine (thus, EC_POINTs_mul etc.)
+ for corner cases. (Certain input points at infinity could lead to
+ bogus results, with non-infinity inputs mapped to infinity too.)
+ [Bodo Moeller]
+
+ *) Initial support for PowerISA 2.0.7, first implemented in POWER8.
+ This covers AES, SHA256/512 and GHASH. "Initial" means that most
+ common cases are optimized and there still is room for further
+ improvements. Vector Permutation AES for Altivec is also added.
+ [Andy Polyakov]
+
+ *) Add support for little-endian ppc64 Linux target.
+ [Marcelo Cerri (IBM)]
+
+ *) Initial support for AMRv8 ISA crypto extensions. This covers AES,
+ SHA1, SHA256 and GHASH. "Initial" means that most common cases
+ are optimized and there still is room for further improvements.
+ Both 32- and 64-bit modes are supported.
+ [Andy Polyakov, Ard Biesheuvel (Linaro)]
+
+ *) Improved ARMv7 NEON support.
+ [Andy Polyakov]
+
+ *) Support for SPARC Architecture 2011 crypto extensions, first
+ implemented in SPARC T4. This covers AES, DES, Camellia, SHA1,
+ SHA256/512, MD5, GHASH and modular exponentiation.
+ [Andy Polyakov, David Miller]
+
+ *) Accelerated modular exponentiation for Intel processors, a.k.a.
+ RSAZ.
+ [Shay Gueron & Vlad Krasnov (Intel Corp)]
+
+ *) Support for new and upcoming Intel processors, including AVX2,
+ BMI and SHA ISA extensions. This includes additional "stitched"
+ implementations, AESNI-SHA256 and GCM, and multi-buffer support
+ for TLS encrypt.
+
+ This work was sponsored by Intel Corp.
+ [Andy Polyakov]
+
+ *) Support for DTLS 1.2. This adds two sets of DTLS methods: DTLS_*_method()
+ supports both DTLS 1.2 and 1.0 and should use whatever version the peer
+ supports and DTLSv1_2_*_method() which supports DTLS 1.2 only.
+ [Steve Henson]
+
+ *) Use algorithm specific chains in SSL_CTX_use_certificate_chain_file():
+ this fixes a limiation in previous versions of OpenSSL.
+ [Steve Henson]
+
+ *) Extended RSA OAEP support via EVP_PKEY API. Options to specify digest,
+ MGF1 digest and OAEP label.
+ [Steve Henson]
+
+ *) Add EVP support for key wrapping algorithms, to avoid problems with
+ existing code the flag EVP_CIPHER_CTX_WRAP_ALLOW has to be set in
+ the EVP_CIPHER_CTX or an error is returned. Add AES and DES3 wrap
+ algorithms and include tests cases.
+ [Steve Henson]
+
+ *) Add functions to allocate and set the fields of an ECDSA_METHOD
+ structure.
+ [Douglas E. Engert, Steve Henson]
+
+ *) New functions OPENSSL_gmtime_diff and ASN1_TIME_diff to find the
+ difference in days and seconds between two tm or ASN1_TIME structures.
+ [Steve Henson]
+
+ *) Add -rev test option to s_server to just reverse order of characters
+ received by client and send back to server. Also prints an abbreviated
+ summary of the connection parameters.
+ [Steve Henson]
+
+ *) New option -brief for s_client and s_server to print out a brief summary
+ of connection parameters.
+ [Steve Henson]
+
+ *) Add callbacks for arbitrary TLS extensions.
+ [Trevor Perrin <trevp@trevp.net> and Ben Laurie]
+
+ *) New option -crl_download in several openssl utilities to download CRLs
+ from CRLDP extension in certificates.
+ [Steve Henson]
+
+ *) New options -CRL and -CRLform for s_client and s_server for CRLs.
+ [Steve Henson]
+
+ *) New function X509_CRL_diff to generate a delta CRL from the difference
+ of two full CRLs. Add support to "crl" utility.
+ [Steve Henson]
+
+ *) New functions to set lookup_crls function and to retrieve
+ X509_STORE from X509_STORE_CTX.
+ [Steve Henson]
+
+ *) Print out deprecated issuer and subject unique ID fields in
+ certificates.
+ [Steve Henson]
+
+ *) Extend OCSP I/O functions so they can be used for simple general purpose
+ HTTP as well as OCSP. New wrapper function which can be used to download
+ CRLs using the OCSP API.
+ [Steve Henson]
+
+ *) Delegate command line handling in s_client/s_server to SSL_CONF APIs.
+ [Steve Henson]
+
+ *) SSL_CONF* functions. These provide a common framework for application
+ configuration using configuration files or command lines.
+ [Steve Henson]
+
+ *) SSL/TLS tracing code. This parses out SSL/TLS records using the
+ message callback and prints the results. Needs compile time option
+ "enable-ssl-trace". New options to s_client and s_server to enable
+ tracing.
+ [Steve Henson]
+
+ *) New ctrl and macro to retrieve supported points extensions.
+ Print out extension in s_server and s_client.
+ [Steve Henson]
+
+ *) New functions to retrieve certificate signature and signature
+ OID NID.
+ [Steve Henson]
+
+ *) Add functions to retrieve and manipulate the raw cipherlist sent by a
+ client to OpenSSL.
+ [Steve Henson]
+
+ *) New Suite B modes for TLS code. These use and enforce the requirements
+ of RFC6460: restrict ciphersuites, only permit Suite B algorithms and
+ only use Suite B curves. The Suite B modes can be set by using the
+ strings "SUITEB128", "SUITEB192" or "SUITEB128ONLY" for the cipherstring.
+ [Steve Henson]
+
+ *) New chain verification flags for Suite B levels of security. Check
+ algorithms are acceptable when flags are set in X509_verify_cert.
+ [Steve Henson]
+
+ *) Make tls1_check_chain return a set of flags indicating checks passed
+ by a certificate chain. Add additional tests to handle client
+ certificates: checks for matching certificate type and issuer name
+ comparison.
+ [Steve Henson]
+
+ *) If an attempt is made to use a signature algorithm not in the peer
+ preference list abort the handshake. If client has no suitable
+ signature algorithms in response to a certificate request do not
+ use the certificate.
+ [Steve Henson]
+
+ *) If server EC tmp key is not in client preference list abort handshake.
+ [Steve Henson]
+
+ *) Add support for certificate stores in CERT structure. This makes it
+ possible to have different stores per SSL structure or one store in
+ the parent SSL_CTX. Include distint stores for certificate chain
+ verification and chain building. New ctrl SSL_CTRL_BUILD_CERT_CHAIN
+ to build and store a certificate chain in CERT structure: returing
+ an error if the chain cannot be built: this will allow applications
+ to test if a chain is correctly configured.
+
+ Note: if the CERT based stores are not set then the parent SSL_CTX
+ store is used to retain compatibility with existing behaviour.
+
+ [Steve Henson]
+
+ *) New function ssl_set_client_disabled to set a ciphersuite disabled
+ mask based on the current session, check mask when sending client
+ hello and checking the requested ciphersuite.
+ [Steve Henson]
+
+ *) New ctrls to retrieve and set certificate types in a certificate
+ request message. Print out received values in s_client. If certificate
+ types is not set with custom values set sensible values based on
+ supported signature algorithms.
+ [Steve Henson]
+
+ *) Support for distinct client and server supported signature algorithms.
+ [Steve Henson]
+
+ *) Add certificate callback. If set this is called whenever a certificate
+ is required by client or server. An application can decide which
+ certificate chain to present based on arbitrary criteria: for example
+ supported signature algorithms. Add very simple example to s_server.
+ This fixes many of the problems and restrictions of the existing client
+ certificate callback: for example you can now clear an existing
+ certificate and specify the whole chain.
+ [Steve Henson]
+
+ *) Add new "valid_flags" field to CERT_PKEY structure which determines what
+ the certificate can be used for (if anything). Set valid_flags field
+ in new tls1_check_chain function. Simplify ssl_set_cert_masks which used
+ to have similar checks in it.
+
+ Add new "cert_flags" field to CERT structure and include a "strict mode".
+ This enforces some TLS certificate requirements (such as only permitting
+ certificate signature algorithms contained in the supported algorithms
+ extension) which some implementations ignore: this option should be used
+ with caution as it could cause interoperability issues.
+ [Steve Henson]
+
+ *) Update and tidy signature algorithm extension processing. Work out
+ shared signature algorithms based on preferences and peer algorithms
+ and print them out in s_client and s_server. Abort handshake if no
+ shared signature algorithms.
+ [Steve Henson]
+
+ *) Add new functions to allow customised supported signature algorithms
+ for SSL and SSL_CTX structures. Add options to s_client and s_server
+ to support them.
+ [Steve Henson]
+
+ *) New function SSL_certs_clear() to delete all references to certificates
+ from an SSL structure. Before this once a certificate had been added
+ it couldn't be removed.
+ [Steve Henson]
+
+ *) Integrate hostname, email address and IP address checking with certificate
+ verification. New verify options supporting checking in opensl utility.
+ [Steve Henson]
+
+ *) Fixes and wildcard matching support to hostname and email checking
+ functions. Add manual page.
+ [Florian Weimer (Red Hat Product Security Team)]
+
+ *) New functions to check a hostname email or IP address against a
+ certificate. Add options x509 utility to print results of checks against
+ a certificate.
+ [Steve Henson]
+
+ *) Fix OCSP checking.
+ [Rob Stradling <rob.stradling@comodo.com> and Ben Laurie]
+
+ *) Initial experimental support for explicitly trusted non-root CAs.
+ OpenSSL still tries to build a complete chain to a root but if an
+ intermediate CA has a trust setting included that is used. The first
+ setting is used: whether to trust (e.g., -addtrust option to the x509
+ utility) or reject.
+ [Steve Henson]
+
+ *) Add -trusted_first option which attempts to find certificates in the
+ trusted store even if an untrusted chain is also supplied.
+ [Steve Henson]
+
+ *) MIPS assembly pack updates: support for MIPS32r2 and SmartMIPS ASE,
+ platform support for Linux and Android.
+ [Andy Polyakov]
+
+ *) Support for linux-x32, ILP32 environment in x86_64 framework.
+ [Andy Polyakov]
+
+ *) Experimental multi-implementation support for FIPS capable OpenSSL.
+ When in FIPS mode the approved implementations are used as normal,
+ when not in FIPS mode the internal unapproved versions are used instead.
+ This means that the FIPS capable OpenSSL isn't forced to use the
+ (often lower perfomance) FIPS implementations outside FIPS mode.
+ [Steve Henson]
+
+ *) Transparently support X9.42 DH parameters when calling
+ PEM_read_bio_DHparameters. This means existing applications can handle
+ the new parameter format automatically.
+ [Steve Henson]
+
+ *) Initial experimental support for X9.42 DH parameter format: mainly
+ to support use of 'q' parameter for RFC5114 parameters.
+ [Steve Henson]
+
+ *) Add DH parameters from RFC5114 including test data to dhtest.
+ [Steve Henson]
+
+ *) Support for automatic EC temporary key parameter selection. If enabled
+ the most preferred EC parameters are automatically used instead of
+ hardcoded fixed parameters. Now a server just has to call:
+ SSL_CTX_set_ecdh_auto(ctx, 1) and the server will automatically
+ support ECDH and use the most appropriate parameters.
+ [Steve Henson]
+
+ *) Enhance and tidy EC curve and point format TLS extension code. Use
+ static structures instead of allocation if default values are used.
+ New ctrls to set curves we wish to support and to retrieve shared curves.
+ Print out shared curves in s_server. New options to s_server and s_client
+ to set list of supported curves.
+ [Steve Henson]
+
+ *) New ctrls to retrieve supported signature algorithms and
+ supported curve values as an array of NIDs. Extend openssl utility
+ to print out received values.
+ [Steve Henson]
+
+ *) Add new APIs EC_curve_nist2nid and EC_curve_nid2nist which convert
+ between NIDs and the more common NIST names such as "P-256". Enhance
+ ecparam utility and ECC method to recognise the NIST names for curves.
+ [Steve Henson]
+
+ *) Enhance SSL/TLS certificate chain handling to support different
+ chains for each certificate instead of one chain in the parent SSL_CTX.
+ [Steve Henson]
+
+ *) Support for fixed DH ciphersuite client authentication: where both
+ server and client use DH certificates with common parameters.
+ [Steve Henson]
+
+ *) Support for fixed DH ciphersuites: those requiring DH server
+ certificates.
+ [Steve Henson]
+
+ *) New function i2d_re_X509_tbs for re-encoding the TBS portion of
+ the certificate.
+ Note: Related 1.0.2-beta specific macros X509_get_cert_info,
+ X509_CINF_set_modified, X509_CINF_get_issuer, X509_CINF_get_extensions and
+ X509_CINF_get_signature were reverted post internal team review.
+
Changes between 1.0.1k and 1.0.1l [15 Jan 2015]
*) Build fixes for the Windows and OpenVMS platforms
diff --git a/crypto/openssl/Configure b/crypto/openssl/Configure
index 60ec378..d99eed7 100755
--- a/crypto/openssl/Configure
+++ b/crypto/openssl/Configure
@@ -105,6 +105,25 @@ my $usage="Usage: Configure [no-<cipher> ...] [enable-<cipher> ...] [experimenta
my $gcc_devteam_warn = "-Wall -pedantic -DPEDANTIC -Wno-long-long -Wsign-compare -Wmissing-prototypes -Wshadow -Wformat -Werror -DCRYPTO_MDEBUG_ALL -DCRYPTO_MDEBUG_ABORT -DREF_CHECK -DOPENSSL_NO_DEPRECATED";
+# TODO(openssl-team): fix problems and investigate if (at least) the following
+# warnings can also be enabled:
+# -Wconditional-uninitialized, -Wswitch-enum, -Wunused-macros,
+# -Wmissing-field-initializers, -Wmissing-variable-declarations,
+# -Wincompatible-pointer-types-discards-qualifiers, -Wcast-align,
+# -Wunreachable-code -Wunused-parameter -Wlanguage-extension-token
+# -Wextended-offsetof
+my $clang_disabled_warnings = "-Wno-unused-parameter -Wno-missing-field-initializers -Wno-language-extension-token -Wno-extended-offsetof";
+
+# These are used in addition to $gcc_devteam_warn when the compiler is clang.
+# TODO(openssl-team): fix problems and investigate if (at least) the
+# following warnings can also be enabled: -Wconditional-uninitialized,
+# -Wswitch-enum, -Wunused-macros, -Wmissing-field-initializers,
+# -Wmissing-variable-declarations,
+# -Wincompatible-pointer-types-discards-qualifiers, -Wcast-align,
+# -Wunreachable-code -Wunused-parameter -Wlanguage-extension-token
+# -Wextended-offsetof
+my $clang_devteam_warn = "-Wno-unused-parameter -Wno-missing-field-initializers -Wno-language-extension-token -Wno-extended-offsetof -Qunused-arguments";
+
my $strict_warnings = 0;
my $x86_gcc_des="DES_PTR DES_RISC1 DES_UNROLL";
@@ -124,24 +143,25 @@ my $tlib="-lnsl -lsocket";
my $bits1="THIRTY_TWO_BIT ";
my $bits2="SIXTY_FOUR_BIT ";
-my $x86_asm="x86cpuid.o:bn-586.o co-586.o x86-mont.o x86-gf2m.o:des-586.o crypt586.o:aes-586.o vpaes-x86.o aesni-x86.o:bf-586.o:md5-586.o:sha1-586.o sha256-586.o sha512-586.o:cast-586.o:rc4-586.o:rmd-586.o:rc5-586.o:wp_block.o wp-mmx.o:cmll-x86.o:ghash-x86.o:";
+my $x86_asm="x86cpuid.o:bn-586.o co-586.o x86-mont.o x86-gf2m.o::des-586.o crypt586.o:aes-586.o vpaes-x86.o aesni-x86.o:bf-586.o:md5-586.o:sha1-586.o sha256-586.o sha512-586.o:cast-586.o:rc4-586.o:rmd-586.o:rc5-586.o:wp_block.o wp-mmx.o:cmll-x86.o:ghash-x86.o:";
my $x86_elf_asm="$x86_asm:elf";
-my $x86_64_asm="x86_64cpuid.o:x86_64-gcc.o x86_64-mont.o x86_64-mont5.o x86_64-gf2m.o modexp512-x86_64.o::aes-x86_64.o vpaes-x86_64.o bsaes-x86_64.o aesni-x86_64.o aesni-sha1-x86_64.o::md5-x86_64.o:sha1-x86_64.o sha256-x86_64.o sha512-x86_64.o::rc4-x86_64.o rc4-md5-x86_64.o:::wp-x86_64.o:cmll-x86_64.o cmll_misc.o:ghash-x86_64.o:";
-my $ia64_asm="ia64cpuid.o:bn-ia64.o ia64-mont.o::aes_core.o aes_cbc.o aes-ia64.o::md5-ia64.o:sha1-ia64.o sha256-ia64.o sha512-ia64.o::rc4-ia64.o rc4_skey.o:::::ghash-ia64.o::void";
-my $sparcv9_asm="sparcv9cap.o sparccpuid.o:bn-sparcv9.o sparcv9-mont.o sparcv9a-mont.o:des_enc-sparc.o fcrypt_b.o:aes_core.o aes_cbc.o aes-sparcv9.o:::sha1-sparcv9.o sha256-sparcv9.o sha512-sparcv9.o:::::::ghash-sparcv9.o::void";
-my $sparcv8_asm=":sparcv8.o:des_enc-sparc.o fcrypt_b.o:::::::::::::void";
-my $alpha_asm="alphacpuid.o:bn_asm.o alpha-mont.o:::::sha1-alpha.o:::::::ghash-alpha.o::void";
-my $mips32_asm=":bn-mips.o::aes_cbc.o aes-mips.o:::sha1-mips.o sha256-mips.o::::::::";
-my $mips64_asm=":bn-mips.o mips-mont.o::aes_cbc.o aes-mips.o:::sha1-mips.o sha256-mips.o sha512-mips.o::::::::";
-my $s390x_asm="s390xcap.o s390xcpuid.o:bn-s390x.o s390x-mont.o s390x-gf2m.o::aes-s390x.o aes-ctr.o aes-xts.o:::sha1-s390x.o sha256-s390x.o sha512-s390x.o::rc4-s390x.o:::::ghash-s390x.o:";
-my $armv4_asm="armcap.o armv4cpuid.o:bn_asm.o armv4-mont.o armv4-gf2m.o::aes_cbc.o aes-armv4.o:::sha1-armv4-large.o sha256-armv4.o sha512-armv4.o:::::::ghash-armv4.o::void";
-my $parisc11_asm="pariscid.o:bn_asm.o parisc-mont.o::aes_core.o aes_cbc.o aes-parisc.o:::sha1-parisc.o sha256-parisc.o sha512-parisc.o::rc4-parisc.o:::::ghash-parisc.o::32";
-my $parisc20_asm="pariscid.o:pa-risc2W.o parisc-mont.o::aes_core.o aes_cbc.o aes-parisc.o:::sha1-parisc.o sha256-parisc.o sha512-parisc.o::rc4-parisc.o:::::ghash-parisc.o::64";
-my $ppc32_asm="ppccpuid.o ppccap.o:bn-ppc.o ppc-mont.o ppc64-mont.o::aes_core.o aes_cbc.o aes-ppc.o:::sha1-ppc.o sha256-ppc.o::::::::";
-my $ppc64_asm="ppccpuid.o ppccap.o:bn-ppc.o ppc-mont.o ppc64-mont.o::aes_core.o aes_cbc.o aes-ppc.o:::sha1-ppc.o sha256-ppc.o sha512-ppc.o::::::::";
-my $no_asm=":::::::::::::::void";
+my $x86_64_asm="x86_64cpuid.o:x86_64-gcc.o x86_64-mont.o x86_64-mont5.o x86_64-gf2m.o rsaz_exp.o rsaz-x86_64.o rsaz-avx2.o:ecp_nistz256.o ecp_nistz256-x86_64.o::aes-x86_64.o vpaes-x86_64.o bsaes-x86_64.o aesni-x86_64.o aesni-sha1-x86_64.o aesni-sha256-x86_64.o aesni-mb-x86_64.o::md5-x86_64.o:sha1-x86_64.o sha256-x86_64.o sha512-x86_64.o sha1-mb-x86_64.o sha256-mb-x86_64.o::rc4-x86_64.o rc4-md5-x86_64.o:::wp-x86_64.o:cmll-x86_64.o cmll_misc.o:ghash-x86_64.o aesni-gcm-x86_64.o:";
+my $ia64_asm="ia64cpuid.o:bn-ia64.o ia64-mont.o:::aes_core.o aes_cbc.o aes-ia64.o::md5-ia64.o:sha1-ia64.o sha256-ia64.o sha512-ia64.o::rc4-ia64.o rc4_skey.o:::::ghash-ia64.o::void";
+my $sparcv9_asm="sparcv9cap.o sparccpuid.o:bn-sparcv9.o sparcv9-mont.o sparcv9a-mont.o vis3-mont.o sparct4-mont.o sparcv9-gf2m.o::des_enc-sparc.o fcrypt_b.o dest4-sparcv9.o:aes_core.o aes_cbc.o aes-sparcv9.o aest4-sparcv9.o::md5-sparcv9.o:sha1-sparcv9.o sha256-sparcv9.o sha512-sparcv9.o::::::camellia.o cmll_misc.o cmll_cbc.o cmllt4-sparcv9.o:ghash-sparcv9.o::void";
+my $sparcv8_asm=":sparcv8.o::des_enc-sparc.o fcrypt_b.o:::::::::::::void";
+my $alpha_asm="alphacpuid.o:bn_asm.o alpha-mont.o::::::sha1-alpha.o:::::::ghash-alpha.o::void";
+my $mips64_asm=":bn-mips.o mips-mont.o:::aes_cbc.o aes-mips.o:::sha1-mips.o sha256-mips.o sha512-mips.o::::::::";
+my $mips32_asm=$mips64_asm; $mips32_asm =~ s/\s*sha512\-mips\.o//;
+my $s390x_asm="s390xcap.o s390xcpuid.o:bn-s390x.o s390x-mont.o s390x-gf2m.o:::aes-s390x.o aes-ctr.o aes-xts.o:::sha1-s390x.o sha256-s390x.o sha512-s390x.o::rc4-s390x.o:::::ghash-s390x.o:";
+my $armv4_asm="armcap.o armv4cpuid.o:bn_asm.o armv4-mont.o armv4-gf2m.o:::aes_cbc.o aes-armv4.o bsaes-armv7.o aesv8-armx.o:::sha1-armv4-large.o sha256-armv4.o sha512-armv4.o:::::::ghash-armv4.o ghashv8-armx.o::void";
+my $aarch64_asm="armcap.o arm64cpuid.o mem_clr.o::::aes_core.o aes_cbc.o aesv8-armx.o:::sha1-armv8.o sha256-armv8.o sha512-armv8.o:::::::ghashv8-armx.o:";
+my $parisc11_asm="pariscid.o:bn_asm.o parisc-mont.o:::aes_core.o aes_cbc.o aes-parisc.o:::sha1-parisc.o sha256-parisc.o sha512-parisc.o::rc4-parisc.o:::::ghash-parisc.o::32";
+my $parisc20_asm="pariscid.o:pa-risc2W.o parisc-mont.o:::aes_core.o aes_cbc.o aes-parisc.o:::sha1-parisc.o sha256-parisc.o sha512-parisc.o::rc4-parisc.o:::::ghash-parisc.o::64";
+my $ppc64_asm="ppccpuid.o ppccap.o:bn-ppc.o ppc-mont.o ppc64-mont.o:::aes_core.o aes_cbc.o aes-ppc.o vpaes-ppc.o aesp8-ppc.o:::sha1-ppc.o sha256-ppc.o sha512-ppc.o sha256p8-ppc.o sha512p8-ppc.o:::::::ghashp8-ppc.o:";
+my $ppc32_asm=$ppc64_asm;
+my $no_asm="::::::::::::::::void";
# As for $BSDthreads. Idea is to maintain "collective" set of flags,
# which would cover all BSD flavors. -pthread applies to them all,
@@ -152,7 +172,7 @@ my $no_asm=":::::::::::::::void";
# seems to be sufficient?
my $BSDthreads="-pthread -D_THREAD_SAFE -D_REENTRANT";
-#config-string $cc : $cflags : $unistd : $thread_cflag : $sys_id : $lflags : $bn_ops : $cpuid_obj : $bn_obj : $des_obj : $aes_obj : $bf_obj : $md5_obj : $sha1_obj : $cast_obj : $rc4_obj : $rmd160_obj : $rc5_obj : $wp_obj : $cmll_obj : $modes_obj : $engines_obj : $dso_scheme : $shared_target : $shared_cflag : $shared_ldflag : $shared_extension : $ranlib : $arflags : $multilib
+#config-string $cc : $cflags : $unistd : $thread_cflag : $sys_id : $lflags : $bn_ops : $cpuid_obj : $bn_obj : $ec_obj : $des_obj : $aes_obj : $bf_obj : $md5_obj : $sha1_obj : $cast_obj : $rc4_obj : $rmd160_obj : $rc5_obj : $wp_obj : $cmll_obj : $modes_obj : $engines_obj : $dso_scheme : $shared_target : $shared_cflag : $shared_ldflag : $shared_extension : $ranlib : $arflags : $multilib
my %table=(
# File 'TABLE' (created by 'make TABLE') contains the data from this list,
@@ -174,14 +194,14 @@ my %table=(
"debug-ben-debug-64", "gcc:$gcc_devteam_warn -Wno-error=overlength-strings -DBN_DEBUG -DCONF_DEBUG -DDEBUG_SAFESTACK -DDEBUG_UNUSED -g3 -O3 -pipe::${BSDthreads}:::SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_UNROLL:${x86_64_asm}:elf:dlfcn:bsd-gcc-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
"debug-ben-macos", "cc:$gcc_devteam_warn -arch i386 -DBN_DEBUG -DCONF_DEBUG -DDEBUG_SAFESTACK -DDEBUG_UNUSED -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -O3 -DL_ENDIAN -g3 -pipe::(unknown)::-Wl,-search_paths_first::::",
"debug-ben-macos-gcc46", "gcc-mp-4.6:$gcc_devteam_warn -Wconversion -DBN_DEBUG -DCONF_DEBUG -DDEBUG_SAFESTACK -DDEBUG_UNUSED -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -O3 -DL_ENDIAN -g3 -pipe::(unknown)::::::",
-"debug-ben-darwin64","cc:$gcc_devteam_warn -Wno-language-extension-token -Wno-extended-offsetof -arch x86_64 -O3 -DL_ENDIAN -Wall::-D_REENTRANT:MACOSX:-Wl,-search_paths_first%:SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL:".eval{my $asm=$x86_64_asm;$asm=~s/rc4\-[^:]+//;$asm}.":macosx:dlfcn:darwin-shared:-fPIC -fno-common:-arch x86_64 -dynamiclib:.\$(SHLIB_MAJOR).\$(SHLIB_MINOR).dylib",
+"debug-ben-darwin64","cc:$gcc_devteam_warn -g -Wno-language-extension-token -Wno-extended-offsetof -arch x86_64 -O3 -DL_ENDIAN -Wall::-D_REENTRANT:MACOSX:-Wl,-search_paths_first%:SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL:".eval{my $asm=$x86_64_asm;$asm=~s/rc4\-[^:]+//;$asm}.":macosx:dlfcn:darwin-shared:-fPIC -fno-common:-arch x86_64 -dynamiclib:.\$(SHLIB_MAJOR).\$(SHLIB_MINOR).dylib",
+"debug-ben-debug-64-clang", "clang:$gcc_devteam_warn -Wno-error=overlength-strings -Wno-error=extended-offsetof -Qunused-arguments -DBN_DEBUG -DCONF_DEBUG -DDEBUG_SAFESTACK -DDEBUG_UNUSED -g3 -O3 -pipe::${BSDthreads}:::SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_UNROLL:${x86_64_asm}:elf:dlfcn:bsd-gcc-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
"debug-ben-no-opt", "gcc: -Wall -Wmissing-prototypes -Wstrict-prototypes -Wmissing-declarations -DDEBUG_SAFESTACK -DCRYPTO_MDEBUG -Werror -DL_ENDIAN -DTERMIOS -Wall -g3::(unknown)::::::",
"debug-ben-strict", "gcc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG -DCONST_STRICT -O2 -Wall -Wshadow -Werror -Wpointer-arith -Wcast-qual -Wwrite-strings -pipe::(unknown)::::::",
"debug-rse","cc:-DTERMIOS -DL_ENDIAN -pipe -O -g -ggdb3 -Wall::(unknown):::BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}",
"debug-bodo", "gcc:$gcc_devteam_warn -Wno-error=overlength-strings -DBN_DEBUG -DBN_DEBUG_RAND -DCONF_DEBUG -DBIO_PAIR_DEBUG -m64 -DL_ENDIAN -DTERMIO -g -DMD32_REG_T=int::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_UNROLL:${x86_64_asm}:elf:dlfcn:linux-shared:-fPIC:-m64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::64",
-"debug-ulf", "gcc:-DTERMIOS -DL_ENDIAN -march=i486 -Wall -DBN_DEBUG -DBN_DEBUG_RAND -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG -DOPENSSL_NO_ASM -g -Wformat -Wshadow -Wmissing-prototypes -Wmissing-declarations:::CYGWIN32:::${no_asm}:win32:cygwin-shared:::.dll",
"debug-steve64", "gcc:$gcc_devteam_warn -m64 -DL_ENDIAN -DTERMIO -DCONF_DEBUG -DDEBUG_SAFESTACK -Wno-overlength-strings -g::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_UNROLL:${x86_64_asm}:elf:dlfcn:linux-shared:-fPIC:-m64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
-"debug-steve32", "gcc:$gcc_devteam_warn -m32 -DL_ENDIAN -DCONF_DEBUG -DDEBUG_SAFESTACK -g -pipe::-D_REENTRANT::-rdynamic -ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:linux-shared:-fPIC:-m32:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
+"debug-steve32", "gcc:$gcc_devteam_warn -m32 -DL_ENDIAN -DCONF_DEBUG -DDEBUG_SAFESTACK -Wno-overlength-strings -g -pipe::-D_REENTRANT::-rdynamic -ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:linux-shared:-fPIC:-m32:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
"debug-steve-opt", "gcc:$gcc_devteam_warn -m64 -O3 -DL_ENDIAN -DTERMIO -DCONF_DEBUG -DDEBUG_SAFESTACK -g::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_UNROLL:${x86_64_asm}:elf:dlfcn:linux-shared:-fPIC:-m64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
"debug-levitte-linux-elf","gcc:-DLEVITTE_DEBUG -DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DCRYPTO_MDEBUG -DL_ENDIAN -ggdb -g3 -Wall::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
"debug-levitte-linux-noasm","gcc:-DLEVITTE_DEBUG -DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DCRYPTO_MDEBUG -DOPENSSL_NO_ASM -DL_ENDIAN -ggdb -g3 -Wall::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${no_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
@@ -193,9 +213,9 @@ my %table=(
"debug-linux-ppro","gcc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG -DL_ENDIAN -g -mcpu=pentiumpro -Wall::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn",
"debug-linux-elf","gcc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG -DL_ENDIAN -g -march=i486 -Wall::-D_REENTRANT::-lefence -ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
"debug-linux-elf-noefence","gcc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG -DL_ENDIAN -g -march=i486 -Wall::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
-"debug-linux-ia32-aes", "gcc:-DAES_EXPERIMENTAL -DL_ENDIAN -O3 -fomit-frame-pointer -Wall::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:x86cpuid.o:bn-586.o co-586.o x86-mont.o:des-586.o crypt586.o:aes_x86core.o aes_cbc.o aesni-x86.o:bf-586.o:md5-586.o:sha1-586.o sha256-586.o sha512-586.o:cast-586.o:rc4-586.o:rmd-586.o:rc5-586.o:wp_block.o wp-mmx.o::ghash-x86.o::elf:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
+"debug-linux-ia32-aes", "gcc:-DAES_EXPERIMENTAL -DL_ENDIAN -O3 -fomit-frame-pointer -Wall::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:x86cpuid.o:bn-586.o co-586.o x86-mont.o::des-586.o crypt586.o:aes_x86core.o aes_cbc.o aesni-x86.o:bf-586.o:md5-586.o:sha1-586.o sha256-586.o sha512-586.o:cast-586.o:rc4-586.o:rmd-586.o:rc5-586.o:wp_block.o wp-mmx.o::ghash-x86.o::elf:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
"debug-linux-generic32","gcc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DCRYPTO_MDEBUG -g -Wall::-D_REENTRANT::-ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL BF_PTR:${no_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
-"debug-linux-generic64","gcc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DCRYPTO_MDEBUG -g -Wall::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL BF_PTR:${no_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
+"debug-linux-generic64","gcc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DCRYPTO_MDEBUG -DTERMIO -g -Wall::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL BF_PTR:${no_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
"debug-linux-x86_64","gcc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DCRYPTO_MDEBUG -m64 -DL_ENDIAN -g -Wall::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_UNROLL:${x86_64_asm}:elf:dlfcn:linux-shared:-fPIC:-m64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::64",
"dist", "cc:-O::(unknown)::::::",
@@ -225,7 +245,7 @@ my %table=(
"solaris64-x86_64-gcc","gcc:-m64 -O3 -Wall -DL_ENDIAN::-D_REENTRANT::-lsocket -lnsl -ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_UNROLL:${x86_64_asm}:elf:dlfcn:solaris-shared:-fPIC:-m64 -shared -static-libgcc:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::/64",
#### Solaris x86 with Sun C setups
-"solaris-x86-cc","cc:-fast -O -Xa::-D_REENTRANT::-lsocket -lnsl -ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_PTR DES_UNROLL BF_PTR:${no_asm}:dlfcn:solaris-shared:-KPIC:-G -dy -z text:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
+"solaris-x86-cc","cc:-fast -xarch=generic -O -Xa::-D_REENTRANT::-lsocket -lnsl -ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_PTR DES_UNROLL BF_PTR:${no_asm}:dlfcn:solaris-shared:-KPIC:-G -dy -z text:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
"solaris64-x86_64-cc","cc:-fast -xarch=amd64 -xstrconst -Xa -DL_ENDIAN::-D_REENTRANT::-lsocket -lnsl -ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_UNROLL:${x86_64_asm}:elf:dlfcn:solaris-shared:-KPIC:-xarch=amd64 -G -dy -z text:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::/64",
#### SPARC Solaris with GNU C setups
@@ -300,7 +320,7 @@ my %table=(
"hpux-parisc-gcc","gcc:-O3 -DB_ENDIAN -DBN_DIV2W::-D_REENTRANT::-Wl,+s -ldld:BN_LLONG DES_PTR DES_UNROLL DES_RISC1:${no_asm}:dl:hpux-shared:-fPIC:-shared:.sl.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
"hpux-parisc1_1-gcc","gcc:-O3 -DB_ENDIAN -DBN_DIV2W::-D_REENTRANT::-Wl,+s -ldld:BN_LLONG DES_PTR DES_UNROLL DES_RISC1:${parisc11_asm}:dl:hpux-shared:-fPIC:-shared:.sl.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::/pa1.1",
"hpux-parisc2-gcc","gcc:-march=2.0 -O3 -DB_ENDIAN -D_REENTRANT::::-Wl,+s -ldld:SIXTY_FOUR_BIT RC4_CHAR RC4_CHUNK DES_PTR DES_UNROLL DES_RISC1:".eval{my $asm=$parisc20_asm;$asm=~s/2W\./2\./;$asm=~s/:64/:32/;$asm}.":dl:hpux-shared:-fPIC:-shared:.sl.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::/pa20_32",
-"hpux64-parisc2-gcc","gcc:-O3 -DB_ENDIAN -D_REENTRANT::::-ldl:SIXTY_FOUR_BIT_LONG MD2_CHAR RC4_INDEX RC4_CHAR DES_UNROLL DES_RISC1 DES_INT::pa-risc2W.o::::::::::::::void:dlfcn:hpux-shared:-fpic:-shared:.sl.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::/pa20_64",
+"hpux64-parisc2-gcc","gcc:-O3 -DB_ENDIAN -D_REENTRANT::::-ldl:SIXTY_FOUR_BIT_LONG MD2_CHAR RC4_INDEX RC4_CHAR DES_UNROLL DES_RISC1 DES_INT::pa-risc2W.o:::::::::::::::void:dlfcn:hpux-shared:-fpic:-shared:.sl.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::/pa20_64",
# More attempts at unified 10.X and 11.X targets for HP C compiler.
#
@@ -347,20 +367,57 @@ my %table=(
# throw in -D[BL]_ENDIAN, whichever appropriate...
"linux-generic32","gcc:-O3 -fomit-frame-pointer -Wall::-D_REENTRANT::-ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL BF_PTR:${no_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
"linux-ppc", "gcc:-DB_ENDIAN -O3 -Wall::-D_REENTRANT::-ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_RISC1 DES_UNROLL:${ppc32_asm}:linux32:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
-# It's believed that majority of ARM toolchains predefine appropriate -march.
-# If you compiler does not, do complement config command line with one!
-"linux-armv4", "gcc:-O3 -Wall::-D_REENTRANT::-ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL BF_PTR:${armv4_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
+
+#######################################################################
+# Note that -march is not among compiler options in below linux-armv4
+# target line. Not specifying one is intentional to give you choice to:
+#
+# a) rely on your compiler default by not specifying one;
+# b) specify your target platform explicitly for optimal performance,
+# e.g. -march=armv6 or -march=armv7-a;
+# c) build "universal" binary that targets *range* of platforms by
+# specifying minimum and maximum supported architecture;
+#
+# As for c) option. It actually makes no sense to specify maximum to be
+# less than ARMv7, because it's the least requirement for run-time
+# switch between platform-specific code paths. And without run-time
+# switch performance would be equivalent to one for minimum. Secondly,
+# there are some natural limitations that you'd have to accept and
+# respect. Most notably you can *not* build "universal" binary for
+# big-endian platform. This is because ARMv7 processor always picks
+# instructions in little-endian order. Another similar limitation is
+# that -mthumb can't "cross" -march=armv6t2 boundary, because that's
+# where it became Thumb-2. Well, this limitation is a bit artificial,
+# because it's not really impossible, but it's deemed too tricky to
+# support. And of course you have to be sure that your binutils are
+# actually up to the task of handling maximum target platform. With all
+# this in mind here is an example of how to configure "universal" build:
+#
+# ./Configure linux-armv4 -march=armv6 -D__ARM_MAX_ARCH__=8
+#
+"linux-armv4", "gcc: -O3 -Wall::-D_REENTRANT::-ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL BF_PTR:${armv4_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
+"linux-aarch64","gcc: -O3 -Wall::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL BF_PTR:${aarch64_asm}:linux64:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
+# Configure script adds minimally required -march for assembly support,
+# if no -march was specified at command line. mips32 and mips64 below
+# refer to contemporary MIPS Architecture specifications, MIPS32 and
+# MIPS64, rather than to kernel bitness.
+"linux-mips32", "gcc:-mabi=32 -O3 -Wall -DBN_DIV3W::-D_REENTRANT::-ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL BF_PTR:${mips32_asm}:o32:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
+"linux-mips64", "gcc:-mabi=n32 -O3 -Wall -DBN_DIV3W::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL BF_PTR:${mips64_asm}:n32:dlfcn:linux-shared:-fPIC:-mabi=n32:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::32",
+"linux64-mips64", "gcc:-mabi=64 -O3 -Wall -DBN_DIV3W::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL BF_PTR:${mips64_asm}:64:dlfcn:linux-shared:-fPIC:-mabi=64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::64",
#### IA-32 targets...
-"linux-ia32-icc", "icc:-DL_ENDIAN -O2 -no_cpprt::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:linux-shared:-KPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
+"linux-ia32-icc", "icc:-DL_ENDIAN -O2::-D_REENTRANT::-ldl -no_cpprt:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:linux-shared:-KPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
"linux-elf", "gcc:-DL_ENDIAN -O3 -fomit-frame-pointer -Wall::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
"linux-aout", "gcc:-DL_ENDIAN -O3 -fomit-frame-pointer -march=i486 -Wall::(unknown):::BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_asm}:a.out",
####
"linux-generic64","gcc:-O3 -Wall::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL BF_PTR:${no_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
"linux-ppc64", "gcc:-m64 -DB_ENDIAN -O3 -Wall::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_RISC1 DES_UNROLL:${ppc64_asm}:linux64:dlfcn:linux-shared:-fPIC:-m64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::64",
-"linux-ia64", "gcc:-DL_ENDIAN -O3 -Wall::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_UNROLL DES_INT:${ia64_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
-"linux-ia64-ecc","ecc:-DL_ENDIAN -O2 -Wall -no_cpprt::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT:${ia64_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
-"linux-ia64-icc","icc:-DL_ENDIAN -O2 -Wall -no_cpprt::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_RISC1 DES_INT:${ia64_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
+"linux-ppc64le","gcc:-m64 -DL_ENDIAN -O3 -Wall::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_RISC1 DES_UNROLL:$ppc64_asm:linux64le:dlfcn:linux-shared:-fPIC:-m64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::",
+"linux-ia64", "gcc:-DL_ENDIAN -DTERMIO -O3 -Wall::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_UNROLL DES_INT:${ia64_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
+"linux-ia64-icc","icc:-DL_ENDIAN -O2 -Wall::-D_REENTRANT::-ldl -no_cpprt:SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_RISC1 DES_INT:${ia64_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
"linux-x86_64", "gcc:-m64 -DL_ENDIAN -O3 -Wall::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_UNROLL:${x86_64_asm}:elf:dlfcn:linux-shared:-fPIC:-m64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::64",
+"linux-x86_64-clang", "clang: -m64 -DL_ENDIAN -O3 -Wall -Wextra $clang_disabled_warnings -Qunused-arguments::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_UNROLL:${x86_64_asm}:elf:dlfcn:linux-shared:-fPIC:-m64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::64",
+"linux-x86_64-icc", "icc:-DL_ENDIAN -O2::-D_REENTRANT::-ldl -no_cpprt:SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_UNROLL:${x86_64_asm}:elf:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::64",
+"linux-x32", "gcc:-mx32 -DL_ENDIAN -O3 -Wall::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT RC4_CHUNK_LL DES_INT DES_UNROLL:${x86_64_asm}:elf:dlfcn:linux-shared:-fPIC:-mx32:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::x32",
"linux64-s390x", "gcc:-m64 -DB_ENDIAN -O3 -Wall::-D_REENTRANT::-ldl:SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL:${s390x_asm}:64:dlfcn:linux-shared:-fPIC:-m64:.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR):::64",
#### So called "highgprs" target for z/Architecture CPUs
# "Highgprs" is kernel feature first implemented in Linux 2.6.32, see
@@ -407,6 +464,7 @@ my %table=(
"android","gcc:-mandroid -I\$(ANDROID_DEV)/include -B\$(ANDROID_DEV)/lib -O3 -fomit-frame-pointer -Wall::-D_REENTRANT::-ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL BF_PTR:${no_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
"android-x86","gcc:-mandroid -I\$(ANDROID_DEV)/include -B\$(ANDROID_DEV)/lib -O3 -fomit-frame-pointer -Wall::-D_REENTRANT::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:".eval{my $asm=${x86_elf_asm};$asm=~s/:elf/:android/;$asm}.":dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
"android-armv7","gcc:-march=armv7-a -mandroid -I\$(ANDROID_DEV)/include -B\$(ANDROID_DEV)/lib -O3 -fomit-frame-pointer -Wall::-D_REENTRANT::-ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL BF_PTR:${armv4_asm}:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
+"android-mips","gcc:-mandroid -I\$(ANDROID_DEV)/include -B\$(ANDROID_DEV)/lib -O3 -Wall::-D_REENTRANT::-ldl:BN_LLONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL BF_PTR:${mips32_asm}:o32:dlfcn:linux-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
#### *BSD [do see comment about ${BSDthreads} above!]
"BSD-generic32","gcc:-O3 -fomit-frame-pointer -Wall::${BSDthreads}:::BN_LLONG RC2_CHAR RC4_INDEX DES_INT DES_UNROLL:${no_asm}:dlfcn:bsd-gcc-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
@@ -421,7 +479,7 @@ my %table=(
# triggered by RIPEMD160 code.
"BSD-sparc64", "gcc:-DB_ENDIAN -O3 -DMD32_REG_T=int -Wall::${BSDthreads}:::BN_LLONG RC2_CHAR RC4_CHUNK DES_INT DES_PTR DES_RISC2 BF_PTR:${sparcv9_asm}:dlfcn:bsd-gcc-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
"BSD-ia64", "gcc:-DL_ENDIAN -O3 -Wall::${BSDthreads}:::SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_UNROLL DES_INT:${ia64_asm}:dlfcn:bsd-gcc-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
-"BSD-x86_64", "gcc:-DL_ENDIAN -O3 -Wall::${BSDthreads}:::SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_UNROLL:${x86_64_asm}:elf:dlfcn:bsd-gcc-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
+"BSD-x86_64", "cc:-DL_ENDIAN -O3 -Wall::${BSDthreads}:::SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_UNROLL:${x86_64_asm}:elf:dlfcn:bsd-gcc-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
"bsdi-elf-gcc", "gcc:-DPERL5 -DL_ENDIAN -fomit-frame-pointer -O3 -march=i486 -Wall::(unknown)::-ldl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:bsd-gcc-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
@@ -454,11 +512,11 @@ my %table=(
# UnixWare 2.0x fails destest with -O.
"unixware-2.0","cc:-DFILIO_H -DNO_STRINGS_H::-Kthread::-lsocket -lnsl -lresolv -lx:${x86_gcc_des} ${x86_gcc_opts}:::",
"unixware-2.1","cc:-O -DFILIO_H::-Kthread::-lsocket -lnsl -lresolv -lx:${x86_gcc_des} ${x86_gcc_opts}:::",
-"unixware-7","cc:-O -DFILIO_H -Kalloca::-Kthread::-lsocket -lnsl:BN_LLONG MD2_CHAR RC4_INDEX ${x86_gcc_des}:${x86_elf_asm}:dlfcn:svr5-shared:-Kpic::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
-"unixware-7-gcc","gcc:-DL_ENDIAN -DFILIO_H -O3 -fomit-frame-pointer -march=pentium -Wall::-D_REENTRANT::-lsocket -lnsl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:gnu-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
+"unixware-7","cc:-O -DFILIO_H -Kalloca::-Kthread::-lsocket -lnsl:BN_LLONG MD2_CHAR RC4_INDEX ${x86_gcc_des}:${x86_elf_asm}-1:dlfcn:svr5-shared:-Kpic::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
+"unixware-7-gcc","gcc:-DL_ENDIAN -DFILIO_H -O3 -fomit-frame-pointer -march=pentium -Wall::-D_REENTRANT::-lsocket -lnsl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}-1:dlfcn:gnu-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
# SCO 5 - Ben Laurie <ben@algroup.co.uk> says the -O breaks the SCO cc.
-"sco5-cc", "cc:-belf::(unknown)::-lsocket -lnsl:${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:svr3-shared:-Kpic::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
-"sco5-gcc", "gcc:-O3 -fomit-frame-pointer::(unknown)::-lsocket -lnsl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}:dlfcn:svr3-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
+"sco5-cc", "cc:-belf::(unknown)::-lsocket -lnsl:${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}-1:dlfcn:svr3-shared:-Kpic::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
+"sco5-gcc", "gcc:-O3 -fomit-frame-pointer::(unknown)::-lsocket -lnsl:BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_elf_asm}-1:dlfcn:svr3-shared:-fPIC::.so.\$(SHLIB_MAJOR).\$(SHLIB_MINOR)",
#### IBM's AIX.
"aix3-cc", "cc:-O -DB_ENDIAN -qmaxmem=16384::(unknown):AIX::BN_LLONG RC4_CHAR:::",
@@ -518,9 +576,9 @@ my %table=(
# Visual C targets
#
# Win64 targets, WIN64I denotes IA-64 and WIN64A - AMD64
-"VC-WIN64I","cl:-W3 -Gs0 -Gy -nologo -DOPENSSL_SYSNAME_WIN32 -DWIN32_LEAN_AND_MEAN -DL_ENDIAN -DUNICODE -D_UNICODE -D_CRT_SECURE_NO_DEPRECATE:::WIN64I::SIXTY_FOUR_BIT RC4_CHUNK_LL DES_INT EXPORT_VAR_AS_FN:ia64cpuid.o:ia64.o ia64-mont.o::aes_core.o aes_cbc.o aes-ia64.o::md5-ia64.o:sha1-ia64.o sha256-ia64.o sha512-ia64.o:::::::ghash-ia64.o::ias:win32",
+"VC-WIN64I","cl:-W3 -Gs0 -Gy -nologo -DOPENSSL_SYSNAME_WIN32 -DWIN32_LEAN_AND_MEAN -DL_ENDIAN -DUNICODE -D_UNICODE -D_CRT_SECURE_NO_DEPRECATE:::WIN64I::SIXTY_FOUR_BIT RC4_CHUNK_LL DES_INT EXPORT_VAR_AS_FN:ia64cpuid.o:ia64.o ia64-mont.o:::aes_core.o aes_cbc.o aes-ia64.o::md5-ia64.o:sha1-ia64.o sha256-ia64.o sha512-ia64.o:::::::ghash-ia64.o::ias:win32",
"VC-WIN64A","cl:-W3 -Gs0 -Gy -nologo -DOPENSSL_SYSNAME_WIN32 -DWIN32_LEAN_AND_MEAN -DL_ENDIAN -DUNICODE -D_UNICODE -D_CRT_SECURE_NO_DEPRECATE:::WIN64A::SIXTY_FOUR_BIT RC4_CHUNK_LL DES_INT EXPORT_VAR_AS_FN:".eval{my $asm=$x86_64_asm;$asm=~s/x86_64-gcc\.o/bn_asm.o/;$asm}.":auto:win32",
-"debug-VC-WIN64I","cl:-W3 -Gs0 -Gy -Zi -nologo -DOPENSSL_SYSNAME_WIN32 -DWIN32_LEAN_AND_MEAN -DL_ENDIAN -DUNICODE -D_UNICODE -D_CRT_SECURE_NO_DEPRECATE:::WIN64I::SIXTY_FOUR_BIT RC4_CHUNK_LL DES_INT EXPORT_VAR_AS_FN:ia64cpuid.o:ia64.o::aes_core.o aes_cbc.o aes-ia64.o::md5-ia64.o:sha1-ia64.o sha256-ia64.o sha512-ia64.o:::::::ghash-ia64.o::ias:win32",
+"debug-VC-WIN64I","cl:-W3 -Gs0 -Gy -Zi -nologo -DOPENSSL_SYSNAME_WIN32 -DWIN32_LEAN_AND_MEAN -DL_ENDIAN -DUNICODE -D_UNICODE -D_CRT_SECURE_NO_DEPRECATE:::WIN64I::SIXTY_FOUR_BIT RC4_CHUNK_LL DES_INT EXPORT_VAR_AS_FN:ia64cpuid.o:ia64.o:::aes_core.o aes_cbc.o aes-ia64.o::md5-ia64.o:sha1-ia64.o sha256-ia64.o sha512-ia64.o:::::::ghash-ia64.o::ias:win32",
"debug-VC-WIN64A","cl:-W3 -Gs0 -Gy -Zi -nologo -DOPENSSL_SYSNAME_WIN32 -DWIN32_LEAN_AND_MEAN -DL_ENDIAN -DUNICODE -D_UNICODE -D_CRT_SECURE_NO_DEPRECATE:::WIN64A::SIXTY_FOUR_BIT RC4_CHUNK_LL DES_INT EXPORT_VAR_AS_FN:".eval{my $asm=$x86_64_asm;$asm=~s/x86_64-gcc\.o/bn_asm.o/;$asm}.":auto:win32",
# x86 Win32 target defaults to ANSI API, if you want UNICODE, complement
# 'perl Configure VC-WIN32' with '-DUNICODE -D_UNICODE'
@@ -547,9 +605,8 @@ my %table=(
"UWIN", "cc:-DTERMIOS -DL_ENDIAN -O -Wall:::UWIN::BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${no_asm}:win32",
# Cygwin
-"Cygwin-pre1.3", "gcc:-DTERMIOS -DL_ENDIAN -fomit-frame-pointer -O3 -m486 -Wall::(unknown):CYGWIN32::BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${no_asm}:win32",
-"Cygwin", "gcc:-DTERMIOS -DL_ENDIAN -fomit-frame-pointer -O3 -march=i486 -Wall:::CYGWIN32::BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_asm}:coff:dlfcn:cygwin-shared:-D_WINDLL:-shared:.dll.a",
-"debug-Cygwin", "gcc:-DTERMIOS -DL_ENDIAN -march=i486 -Wall -DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG -DOPENSSL_NO_ASM -g -Wformat -Wshadow -Wmissing-prototypes -Wmissing-declarations -Werror:::CYGWIN32:::${no_asm}:dlfcn:cygwin-shared:-D_WINDLL:-shared:.dll.a",
+"Cygwin", "gcc:-DTERMIOS -DL_ENDIAN -fomit-frame-pointer -O3 -march=i486 -Wall:::CYGWIN::BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}:${x86_asm}:coff:dlfcn:cygwin-shared:-D_WINDLL:-shared:.dll.a",
+"Cygwin-x86_64", "gcc:-DTERMIOS -DL_ENDIAN -O3 -Wall:::CYGWIN::SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_UNROLL:${x86_64_asm}:mingw64:dlfcn:cygwin-shared:-D_WINDLL:-shared:.dll.a",
# NetWare from David Ward (dsward@novell.com)
# requires either MetroWerks NLM development tools, or gcc / nlmconv
@@ -581,7 +638,8 @@ my %table=(
"darwin64-ppc-cc","cc:-arch ppc64 -O3 -DB_ENDIAN::-D_REENTRANT:MACOSX:-Wl,-search_paths_first%:SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:${ppc64_asm}:osx64:dlfcn:darwin-shared:-fPIC -fno-common:-arch ppc64 -dynamiclib:.\$(SHLIB_MAJOR).\$(SHLIB_MINOR).dylib",
"darwin-i386-cc","cc:-arch i386 -O3 -fomit-frame-pointer -DL_ENDIAN::-D_REENTRANT:MACOSX:-Wl,-search_paths_first%:BN_LLONG RC4_INT RC4_CHUNK DES_UNROLL BF_PTR:".eval{my $asm=$x86_asm;$asm=~s/cast\-586\.o//;$asm}.":macosx:dlfcn:darwin-shared:-fPIC -fno-common:-arch i386 -dynamiclib:.\$(SHLIB_MAJOR).\$(SHLIB_MINOR).dylib",
"debug-darwin-i386-cc","cc:-arch i386 -g3 -DL_ENDIAN::-D_REENTRANT:MACOSX:-Wl,-search_paths_first%:BN_LLONG RC4_INT RC4_CHUNK DES_UNROLL BF_PTR:${x86_asm}:macosx:dlfcn:darwin-shared:-fPIC -fno-common:-arch i386 -dynamiclib:.\$(SHLIB_MAJOR).\$(SHLIB_MINOR).dylib",
-"darwin64-x86_64-cc","cc:-arch x86_64 -O3 -DL_ENDIAN -Wall::-D_REENTRANT:MACOSX:-Wl,-search_paths_first%:SIXTY_FOUR_BIT_LONG RC4_CHAR RC4_CHUNK DES_INT DES_UNROLL:".eval{my $asm=$x86_64_asm;$asm=~s/rc4\-[^:]+//;$asm}.":macosx:dlfcn:darwin-shared:-fPIC -fno-common:-arch x86_64 -dynamiclib:.\$(SHLIB_MAJOR).\$(SHLIB_MINOR).dylib",
+"darwin64-x86_64-cc","cc:-arch x86_64 -O3 -DL_ENDIAN -Wall::-D_REENTRANT:MACOSX:-Wl,-search_paths_first%:SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_UNROLL:".eval{my $asm=$x86_64_asm;$asm=~s/rc4\-[^:]+//;$asm}.":macosx:dlfcn:darwin-shared:-fPIC -fno-common:-arch x86_64 -dynamiclib:.\$(SHLIB_MAJOR).\$(SHLIB_MINOR).dylib",
+"debug-darwin64-x86_64-cc","cc:-arch x86_64 -ggdb -g2 -O0 -DL_ENDIAN -Wall::-D_REENTRANT:MACOSX:-Wl,-search_paths_first%:SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_UNROLL:".eval{my $asm=$x86_64_asm;$asm=~s/rc4\-[^:]+//;$asm}.":macosx:dlfcn:darwin-shared:-fPIC -fno-common:-arch x86_64 -dynamiclib:.\$(SHLIB_MAJOR).\$(SHLIB_MINOR).dylib",
"debug-darwin-ppc-cc","cc:-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DCRYPTO_MDEBUG -DB_ENDIAN -g -Wall -O::-D_REENTRANT:MACOSX::BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:${ppc32_asm}:osx32:dlfcn:darwin-shared:-fPIC:-dynamiclib:.\$(SHLIB_MAJOR).\$(SHLIB_MINOR).dylib",
# iPhoneOS/iOS
"iphoneos-cross","llvm-gcc:-O3 -isysroot \$(CROSS_TOP)/SDKs/\$(CROSS_SDK) -fomit-frame-pointer -fno-common::-D_REENTRANT:iOS:-Wl,-search_paths_first%:BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR:${no_asm}:dlfcn:darwin-shared:-fPIC -fno-common:-dynamiclib:.\$(SHLIB_MAJOR).\$(SHLIB_MINOR).dylib",
@@ -634,6 +692,7 @@ my $idx_lflags = $idx++;
my $idx_bn_ops = $idx++;
my $idx_cpuid_obj = $idx++;
my $idx_bn_obj = $idx++;
+my $idx_ec_obj = $idx++;
my $idx_des_obj = $idx++;
my $idx_aes_obj = $idx++;
my $idx_bf_obj = $idx++;
@@ -714,11 +773,13 @@ my %disabled = ( # "what" => "comment" [or special keyword "experimental
"ec_nistp_64_gcc_128" => "default",
"gmp" => "default",
"jpake" => "experimental",
+ "libunbound" => "experimental",
"md2" => "default",
"rc5" => "default",
"rfc3779" => "default",
"sctp" => "default",
"shared" => "default",
+ "ssl-trace" => "default",
"store" => "experimental",
"unit-test" => "default",
"zlib" => "default",
@@ -728,7 +789,7 @@ my @experimental = ();
# This is what $depflags will look like with the above defaults
# (we need this to see if we should advise the user to run "make depend"):
-my $default_depflags = " -DOPENSSL_NO_EC_NISTP_64_GCC_128 -DOPENSSL_NO_GMP -DOPENSSL_NO_JPAKE -DOPENSSL_NO_MD2 -DOPENSSL_NO_RC5 -DOPENSSL_NO_RFC3779 -DOPENSSL_NO_SCTP -DOPENSSL_NO_STORE -DOPENSSL_NO_UNIT_TEST";
+my $default_depflags = " -DOPENSSL_NO_EC_NISTP_64_GCC_128 -DOPENSSL_NO_GMP -DOPENSSL_NO_JPAKE -DOPENSSL_NO_LIBUNBOUND -DOPENSSL_NO_MD2 -DOPENSSL_NO_RC5 -DOPENSSL_NO_RFC3779 -DOPENSSL_NO_SCTP -DOPENSSL_NO_SSL_TRACE -DOPENSSL_NO_STORE -DOPENSSL_NO_UNIT_TEST";
# Explicit "no-..." options will be collected in %disabled along with the defaults.
# To remove something from %disabled, use "enable-foo" (unless it's experimental).
@@ -873,16 +934,7 @@ PROCESS_ARGS:
}
elsif (/^[-+]/)
{
- if (/^-[lL](.*)$/ or /^-Wl,/)
- {
- $libs.=$_." ";
- }
- elsif (/^-[^-]/ or /^\+/)
- {
- $_ =~ s/%([0-9a-f]{1,2})/chr(hex($1))/gei;
- $flags.=$_." ";
- }
- elsif (/^--prefix=(.*)$/)
+ if (/^--prefix=(.*)$/)
{
$prefix=$1;
}
@@ -926,10 +978,14 @@ PROCESS_ARGS:
{
$cross_compile_prefix=$1;
}
- else
+ elsif (/^-[lL](.*)$/ or /^-Wl,/)
+ {
+ $libs.=$_." ";
+ }
+ else # common if (/^[-+]/), just pass down...
{
- print STDERR $usage;
- exit(1);
+ $_ =~ s/%([0-9a-f]{1,2})/chr(hex($1))/gei;
+ $flags.=$_." ";
}
}
elsif ($_ =~ /^([^:]+):(.+)$/)
@@ -1156,6 +1212,7 @@ my $cc = $fields[$idx_cc];
if($ENV{CC}) {
$cc = $ENV{CC};
}
+
my $cflags = $fields[$idx_cflags];
my $unistd = $fields[$idx_unistd];
my $thread_cflag = $fields[$idx_thread_cflag];
@@ -1164,6 +1221,7 @@ my $lflags = $fields[$idx_lflags];
my $bn_ops = $fields[$idx_bn_ops];
my $cpuid_obj = $fields[$idx_cpuid_obj];
my $bn_obj = $fields[$idx_bn_obj];
+my $ec_obj = $fields[$idx_ec_obj];
my $des_obj = $fields[$idx_des_obj];
my $aes_obj = $fields[$idx_aes_obj];
my $bf_obj = $fields[$idx_bf_obj];
@@ -1209,6 +1267,12 @@ if ($target =~ /^mingw/ && `$cc --target-help 2>&1` !~ m/\-mno\-cygwin/m)
$shared_ldflag =~ s/\-mno\-cygwin\s*//;
}
+if ($target =~ /linux.*\-mips/ && !$no_asm && $flags !~ /\-m(ips|arch=)/) {
+ # minimally required architecture flags for assembly modules
+ $cflags="-mips2 $cflags" if ($target =~ /mips32/);
+ $cflags="-mips3 $cflags" if ($target =~ /mips64/);
+}
+
my $no_shared_warn=0;
my $no_user_cflags=0;
@@ -1335,7 +1399,7 @@ $lflags="$libs$lflags" if ($libs ne "");
if ($no_asm)
{
- $cpuid_obj=$bn_obj=
+ $cpuid_obj=$bn_obj=$ec_obj=
$des_obj=$aes_obj=$bf_obj=$cast_obj=$rc4_obj=$rc5_obj=$cmll_obj=
$modes_obj=$sha1_obj=$md5_obj=$rmd160_obj=$wp_obj=$engines_obj="";
}
@@ -1416,6 +1480,7 @@ if ($target =~ /\-icc$/) # Intel C compiler
}
if ($iccver>=8)
{
+ $cflags=~s/\-KPIC/-fPIC/;
# Eliminate unnecessary dependency from libirc.a. This is
# essential for shared library support, as otherwise
# apps/openssl can end up in endless loop upon startup...
@@ -1423,12 +1488,17 @@ if ($target =~ /\-icc$/) # Intel C compiler
}
if ($iccver>=9)
{
- $cflags.=" -i-static";
- $cflags=~s/\-no_cpprt/-no-cpprt/;
+ $lflags.=" -i-static";
+ $lflags=~s/\-no_cpprt/-no-cpprt/;
}
if ($iccver>=10)
{
- $cflags=~s/\-i\-static/-static-intel/;
+ $lflags=~s/\-i\-static/-static-intel/;
+ }
+ if ($iccver>=11)
+ {
+ $cflags.=" -no-intel-extensions"; # disable Cilk
+ $lflags=~s/\-no\-cpprt/-no-cxxlib/;
}
}
@@ -1509,7 +1579,7 @@ if ($rmd160_obj =~ /\.o$/)
}
if ($aes_obj =~ /\.o$/)
{
- $cflags.=" -DAES_ASM";
+ $cflags.=" -DAES_ASM" if ($aes_obj =~ m/\baes\-/);;
# aes-ctr.o is not a real file, only indication that assembler
# module implements AES_ctr32_encrypt...
$cflags.=" -DAES_CTR_ASM" if ($aes_obj =~ s/\s*aes\-ctr\.o//);
@@ -1531,10 +1601,14 @@ else {
$wp_obj="wp_block.o";
}
$cmll_obj=$cmll_enc unless ($cmll_obj =~ /.o$/);
-if ($modes_obj =~ /ghash/)
+if ($modes_obj =~ /ghash\-/)
{
$cflags.=" -DGHASH_ASM";
}
+if ($ec_obj =~ /ecp_nistz256/)
+ {
+ $cflags.=" -DECP_NISTZ256_ASM";
+ }
# "Stringify" the C flags string. This permits it to be made part of a string
# and works as well on command lines.
@@ -1574,12 +1648,21 @@ if ($shlib_version_number =~ /(^[0-9]*)\.([0-9\.]*)/)
if ($strict_warnings)
{
+ my $ecc = $cc;
+ $ecc = "clang" if `$cc --version 2>&1` =~ /clang/;
my $wopt;
- die "ERROR --strict-warnings requires gcc" unless ($cc =~ /gcc$/);
+ die "ERROR --strict-warnings requires gcc or clang" unless ($ecc =~ /gcc$/ or $ecc =~ /clang$/);
foreach $wopt (split /\s+/, $gcc_devteam_warn)
{
$cflags .= " $wopt" unless ($cflags =~ /$wopt/)
}
+ if ($ecc eq "clang")
+ {
+ foreach $wopt (split /\s+/, $clang_devteam_warn)
+ {
+ $cflags .= " $wopt" unless ($cflags =~ /$wopt/)
+ }
+ }
}
open(IN,'<Makefile.org') || die "unable to read Makefile.org:$!\n";
@@ -1638,6 +1721,7 @@ while (<IN>)
s/^EXE_EXT=.*$/EXE_EXT= $exe_ext/;
s/^CPUID_OBJ=.*$/CPUID_OBJ= $cpuid_obj/;
s/^BN_ASM=.*$/BN_ASM= $bn_obj/;
+ s/^EC_ASM=.*$/EC_ASM= $ec_obj/;
s/^DES_ENC=.*$/DES_ENC= $des_obj/;
s/^AES_ENC=.*$/AES_ENC= $aes_obj/;
s/^BF_ENC=.*$/BF_ENC= $bf_obj/;
@@ -1699,6 +1783,7 @@ print "CFLAG =$cflags\n";
print "EX_LIBS =$lflags\n";
print "CPUID_OBJ =$cpuid_obj\n";
print "BN_ASM =$bn_obj\n";
+print "EC_ASM =$ec_obj\n";
print "DES_ENC =$des_obj\n";
print "AES_ENC =$aes_obj\n";
print "BF_ENC =$bf_obj\n";
@@ -1997,7 +2082,7 @@ BEGIN
VALUE "ProductVersion", "$version\\0"
// Optional:
//VALUE "Comments", "\\0"
- VALUE "LegalCopyright", "Copyright © 1998-2005 The OpenSSL Project. Copyright © 1995-1998 Eric A. Young, Tim J. Hudson. All rights reserved.\\0"
+ VALUE "LegalCopyright", "Copyright © 1998-2005 The OpenSSL Project. Copyright © 1995-1998 Eric A. Young, Tim J. Hudson. All rights reserved.\\0"
//VALUE "LegalTrademarks", "\\0"
//VALUE "PrivateBuild", "\\0"
//VALUE "SpecialBuild", "\\0"
@@ -2106,12 +2191,12 @@ sub print_table_entry
{
my $target = shift;
- (my $cc,my $cflags,my $unistd,my $thread_cflag,my $sys_id,my $lflags,
- my $bn_ops,my $cpuid_obj,my $bn_obj,my $des_obj,my $aes_obj, my $bf_obj,
- my $md5_obj,my $sha1_obj,my $cast_obj,my $rc4_obj,my $rmd160_obj,
- my $rc5_obj,my $wp_obj,my $cmll_obj,my $modes_obj, my $engines_obj,
- my $perlasm_scheme,my $dso_scheme,my $shared_target,my $shared_cflag,
- my $shared_ldflag,my $shared_extension,my $ranlib,my $arflags,my $multilib)=
+ my ($cc, $cflags, $unistd, $thread_cflag, $sys_id, $lflags,
+ $bn_ops, $cpuid_obj, $bn_obj, $ec_obj, $des_obj, $aes_obj, $bf_obj,
+ $md5_obj, $sha1_obj, $cast_obj, $rc4_obj, $rmd160_obj,
+ $rc5_obj, $wp_obj, $cmll_obj, $modes_obj, $engines_obj,
+ $perlasm_scheme, $dso_scheme, $shared_target, $shared_cflag,
+ $shared_ldflag, $shared_extension, $ranlib, $arflags, $multilib)=
split(/\s*:\s*/,$table{$target} . ":" x 30 , -1);
print <<EOF
@@ -2126,6 +2211,7 @@ sub print_table_entry
\$bn_ops = $bn_ops
\$cpuid_obj = $cpuid_obj
\$bn_obj = $bn_obj
+\$ec_obj = $ec_obj
\$des_obj = $des_obj
\$aes_obj = $aes_obj
\$bf_obj = $bf_obj
diff --git a/crypto/openssl/FAQ b/crypto/openssl/FAQ
index f8ea604..3be8310 100644
--- a/crypto/openssl/FAQ
+++ b/crypto/openssl/FAQ
@@ -83,7 +83,7 @@ OpenSSL - Frequently Asked Questions
* Which is the current version of OpenSSL?
The current version is available from <URL: http://www.openssl.org>.
-OpenSSL 1.0.1e was released on Feb 11th, 2013.
+OpenSSL 1.0.1a was released on Apr 19th, 2012.
In addition to the current stable release, you can also access daily
snapshots of the OpenSSL development version at <URL:
@@ -184,14 +184,18 @@ Therefore the answer to the common question "when will feature X be
backported to OpenSSL 1.0.0/0.9.8?" is "never" but it could appear
in the next minor release.
+* What happens when the letter release reaches z?
+
+It was decided after the release of OpenSSL 0.9.8y the next version should
+be 0.9.8za then 0.9.8zb and so on.
+
+
[LEGAL] =======================================================================
* Do I need patent licenses to use OpenSSL?
-The patents section of the README file lists patents that may apply to
-you if you want to use OpenSSL. For information on intellectual
-property rights, please consult a lawyer. The OpenSSL team does not
-offer legal advice.
+For information on intellectual property rights, please consult a lawyer.
+The OpenSSL team does not offer legal advice.
You can configure OpenSSL so as not to use IDEA, MDC2 and RC5 by using
./config no-idea no-mdc2 no-rc5
@@ -608,8 +612,8 @@ valid for the current DOS session.
* What is special about OpenSSL on Redhat?
Red Hat Linux (release 7.0 and later) include a preinstalled limited
-version of OpenSSL. For patent reasons, support for IDEA, RC5 and MDC2
-is disabled in this version. The same may apply to other Linux distributions.
+version of OpenSSL. Red Hat has chosen to disable support for IDEA, RC5 and
+MDC2 in this version. The same may apply to other Linux distributions.
Users may therefore wish to install more or all of the features left out.
To do this you MUST ensure that you do not overwrite the openssl that is in
@@ -632,11 +636,6 @@ relevant updates in packages up to and including 0.9.6b.
A possible way around this is to persuade Red Hat to produce a non-US
version of Red Hat Linux.
-FYI: Patent numbers and expiry dates of US patents:
-MDC-2: 4,908,861 13/03/2007
-IDEA: 5,214,703 25/05/2010
-RC5: 5,724,428 03/03/2015
-
* Why does the OpenSSL compilation fail on MacOS X?
@@ -862,7 +861,7 @@ The opposite assumes we already have len bytes in buf:
p = buf;
p7 = d2i_PKCS7(NULL, &p, len);
-At this point p7 contains a valid PKCS7 structure of NULL if an error
+At this point p7 contains a valid PKCS7 structure or NULL if an error
occurred. If an error occurred ERR_print_errors(bio) should give more
information.
@@ -874,6 +873,21 @@ that has been read or written. This may well be uninitialized data
and attempts to free the buffer will have unpredictable results
because it no longer points to the same address.
+Memory allocation and encoding can also be combined in a single
+operation by the ASN1 routines:
+
+ unsigned char *buf = NULL; /* mandatory */
+ int len;
+ len = i2d_PKCS7(p7, &buf);
+ if (len < 0)
+ /* Error */
+ /* Do some things with 'buf' */
+ /* Finished with buf: free it */
+ OPENSSL_free(buf);
+
+In this special case the "buf" parameter is *not* incremented, it points
+to the start of the encoding.
+
* OpenSSL uses DER but I need BER format: does OpenSSL support BER?
diff --git a/crypto/openssl/Makefile b/crypto/openssl/Makefile
index cd1c08c..f361472 100644
--- a/crypto/openssl/Makefile
+++ b/crypto/openssl/Makefile
@@ -4,16 +4,16 @@
## Makefile for OpenSSL
##
-VERSION=1.0.1p
+VERSION=1.0.2d
MAJOR=1
-MINOR=0.1
+MINOR=0.2
SHLIB_VERSION_NUMBER=1.0.0
SHLIB_VERSION_HISTORY=
SHLIB_MAJOR=1
SHLIB_MINOR=0.0
SHLIB_EXT=
PLATFORM=dist
-OPTIONS= no-ec_nistp_64_gcc_128 no-gmp no-jpake no-krb5 no-md2 no-rc5 no-rfc3779 no-sctp no-shared no-store no-unit-test no-zlib no-zlib-dynamic static-engine
+OPTIONS= no-ec_nistp_64_gcc_128 no-gmp no-jpake no-krb5 no-libunbound no-md2 no-rc5 no-rfc3779 no-sctp no-shared no-ssl-trace no-store no-unit-test no-zlib no-zlib-dynamic static-engine
CONFIGURE_ARGS=dist
SHLIB_TARGET=
@@ -61,7 +61,7 @@ OPENSSLDIR=/usr/local/ssl
CC= cc
CFLAG= -O
-DEPFLAG= -DOPENSSL_NO_EC_NISTP_64_GCC_128 -DOPENSSL_NO_GMP -DOPENSSL_NO_JPAKE -DOPENSSL_NO_MD2 -DOPENSSL_NO_RC5 -DOPENSSL_NO_RFC3779 -DOPENSSL_NO_SCTP -DOPENSSL_NO_STORE -DOPENSSL_NO_UNIT_TEST
+DEPFLAG= -DOPENSSL_NO_EC_NISTP_64_GCC_128 -DOPENSSL_NO_GMP -DOPENSSL_NO_JPAKE -DOPENSSL_NO_LIBUNBOUND -DOPENSSL_NO_MD2 -DOPENSSL_NO_RC5 -DOPENSSL_NO_RFC3779 -DOPENSSL_NO_SCTP -DOPENSSL_NO_SSL_TRACE -DOPENSSL_NO_STORE -DOPENSSL_NO_UNIT_TEST
PEX_LIBS=
EX_LIBS=
EXE_EXT=
@@ -71,7 +71,7 @@ RANLIB= /usr/bin/ranlib
NM= nm
PERL= /usr/bin/perl
TAR= tar
-TARFLAGS= --no-recursion --record-size=10240
+TARFLAGS= --no-recursion
MAKEDEPPROG=makedepend
LIBDIR=lib
@@ -90,6 +90,7 @@ PROCESSOR=
# CPUID module collects small commonly used assembler snippets
CPUID_OBJ= mem_clr.o
BN_ASM= bn_asm.o
+EC_ASM=
DES_ENC= des_enc.o fcrypt_b.o
AES_ENC= aes_core.o aes_cbc.o
BF_ENC= bf_enc.o
@@ -223,8 +224,8 @@ BUILDENV= PLATFORM='$(PLATFORM)' PROCESSOR='$(PROCESSOR)' \
EXE_EXT='$(EXE_EXT)' SHARED_LIBS='$(SHARED_LIBS)' \
SHLIB_EXT='$(SHLIB_EXT)' SHLIB_TARGET='$(SHLIB_TARGET)' \
PEX_LIBS='$(PEX_LIBS)' EX_LIBS='$(EX_LIBS)' \
- CPUID_OBJ='$(CPUID_OBJ)' \
- BN_ASM='$(BN_ASM)' DES_ENC='$(DES_ENC)' \
+ CPUID_OBJ='$(CPUID_OBJ)' BN_ASM='$(BN_ASM)' \
+ EC_ASM='$(EC_ASM)' DES_ENC='$(DES_ENC)' \
AES_ENC='$(AES_ENC)' CMLL_ENC='$(CMLL_ENC)' \
BF_ENC='$(BF_ENC)' CAST_ENC='$(CAST_ENC)' \
RC4_ENC='$(RC4_ENC)' RC5_ENC='$(RC5_ENC)' \
@@ -332,7 +333,7 @@ clean-shared:
done; \
fi; \
( set -x; rm -f lib$$i$(SHLIB_EXT) ); \
- if [ "$(PLATFORM)" = "Cygwin" ]; then \
+ if expr "$(PLATFORM)" : "Cygwin" >/dev/null; then \
( set -x; rm -f cyg$$i$(SHLIB_EXT) lib$$i$(SHLIB_EXT).a ); \
fi; \
done
@@ -381,11 +382,11 @@ libssl.pc: Makefile
echo 'libdir=$${exec_prefix}/$(LIBDIR)'; \
echo 'includedir=$${prefix}/include'; \
echo ''; \
- echo 'Name: OpenSSL'; \
+ echo 'Name: OpenSSL-libssl'; \
echo 'Description: Secure Sockets Layer and cryptography libraries'; \
echo 'Version: '$(VERSION); \
- echo 'Requires: '; \
- echo 'Libs: -L$${libdir} -lssl -lcrypto'; \
+ echo 'Requires.private: libcrypto'; \
+ echo 'Libs: -L$${libdir} -lssl'; \
echo 'Libs.private: $(EX_LIBS)'; \
echo 'Cflags: -I$${includedir} $(KRB5_INCLUDES)' ) > libssl.pc
@@ -398,10 +399,7 @@ openssl.pc: Makefile
echo 'Name: OpenSSL'; \
echo 'Description: Secure Sockets Layer and cryptography libraries and tools'; \
echo 'Version: '$(VERSION); \
- echo 'Requires: '; \
- echo 'Libs: -L$${libdir} -lssl -lcrypto'; \
- echo 'Libs.private: $(EX_LIBS)'; \
- echo 'Cflags: -I$${includedir} $(KRB5_INCLUDES)' ) > openssl.pc
+ echo 'Requires: libssl libcrypto' ) > openssl.pc
Makefile: Makefile.org Configure config
@echo "Makefile is older than Makefile.org, Configure or config."
@@ -564,11 +562,7 @@ install_sw:
do \
if [ -f "$$i" -o -f "$$i.a" ]; then \
( echo installing $$i; \
- if [ "$(PLATFORM)" != "Cygwin" ]; then \
- cp $$i $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i.new; \
- chmod 555 $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i.new; \
- mv -f $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i.new $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i; \
- else \
+ if expr "$(PLATFORM)" : "Cygwin" >/dev/null; then \
c=`echo $$i | sed 's/^lib\(.*\)\.dll\.a/cyg\1-$(SHLIB_VERSION_NUMBER).dll/'`; \
cp $$c $(INSTALL_PREFIX)$(INSTALLTOP)/bin/$$c.new; \
chmod 755 $(INSTALL_PREFIX)$(INSTALLTOP)/bin/$$c.new; \
@@ -576,6 +570,10 @@ install_sw:
cp $$i $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i.new; \
chmod 644 $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i.new; \
mv -f $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i.new $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i; \
+ else \
+ cp $$i $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i.new; \
+ chmod 555 $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i.new; \
+ mv -f $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i.new $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i; \
fi ); \
if expr $(PLATFORM) : 'mingw' > /dev/null; then \
( case $$i in \
@@ -608,6 +606,10 @@ install_sw:
install_html_docs:
here="`pwd`"; \
+ filecase=; \
+ case "$(PLATFORM)" in DJGPP|Cygwin*|mingw*|darwin*-*-cc) \
+ filecase=-i; \
+ esac; \
for subdir in apps crypto ssl; do \
mkdir -p $(INSTALL_PREFIX)$(HTMLDIR)/$$subdir; \
for i in doc/$$subdir/*.pod; do \
@@ -636,9 +638,9 @@ install_docs:
@pod2man="`cd ./util; ./pod2mantest $(PERL)`"; \
here="`pwd`"; \
filecase=; \
- if [ "$(PLATFORM)" = "DJGPP" -o "$(PLATFORM)" = "Cygwin" -o "$(PLATFORM)" = "mingw" ]; then \
+ case "$(PLATFORM)" in DJGPP|Cygwin*|mingw*|darwin*-*-cc) \
filecase=-i; \
- fi; \
+ esac; \
set -e; for i in doc/apps/*.pod; do \
fn=`basename $$i .pod`; \
sec=`$(PERL) util/extract-section.pl 1 < $$i`; \
diff --git a/crypto/openssl/Makefile.org b/crypto/openssl/Makefile.org
index 742431d..8d6a2a0 100644
--- a/crypto/openssl/Makefile.org
+++ b/crypto/openssl/Makefile.org
@@ -69,7 +69,7 @@ RANLIB= ranlib
NM= nm
PERL= perl
TAR= tar
-TARFLAGS= --no-recursion --record-size=10240
+TARFLAGS= --no-recursion
MAKEDEPPROG=makedepend
LIBDIR=lib
@@ -88,6 +88,7 @@ PROCESSOR=
# CPUID module collects small commonly used assembler snippets
CPUID_OBJ=
BN_ASM= bn_asm.o
+EC_ASM=
DES_ENC= des_enc.o fcrypt_b.o
AES_ENC= aes_core.o aes_cbc.o
BF_ENC= bf_enc.o
@@ -221,8 +222,8 @@ BUILDENV= PLATFORM='$(PLATFORM)' PROCESSOR='$(PROCESSOR)' \
EXE_EXT='$(EXE_EXT)' SHARED_LIBS='$(SHARED_LIBS)' \
SHLIB_EXT='$(SHLIB_EXT)' SHLIB_TARGET='$(SHLIB_TARGET)' \
PEX_LIBS='$(PEX_LIBS)' EX_LIBS='$(EX_LIBS)' \
- CPUID_OBJ='$(CPUID_OBJ)' \
- BN_ASM='$(BN_ASM)' DES_ENC='$(DES_ENC)' \
+ CPUID_OBJ='$(CPUID_OBJ)' BN_ASM='$(BN_ASM)' \
+ EC_ASM='$(EC_ASM)' DES_ENC='$(DES_ENC)' \
AES_ENC='$(AES_ENC)' CMLL_ENC='$(CMLL_ENC)' \
BF_ENC='$(BF_ENC)' CAST_ENC='$(CAST_ENC)' \
RC4_ENC='$(RC4_ENC)' RC5_ENC='$(RC5_ENC)' \
@@ -330,7 +331,7 @@ clean-shared:
done; \
fi; \
( set -x; rm -f lib$$i$(SHLIB_EXT) ); \
- if [ "$(PLATFORM)" = "Cygwin" ]; then \
+ if expr "$(PLATFORM)" : "Cygwin" >/dev/null; then \
( set -x; rm -f cyg$$i$(SHLIB_EXT) lib$$i$(SHLIB_EXT).a ); \
fi; \
done
@@ -379,11 +380,11 @@ libssl.pc: Makefile
echo 'libdir=$${exec_prefix}/$(LIBDIR)'; \
echo 'includedir=$${prefix}/include'; \
echo ''; \
- echo 'Name: OpenSSL'; \
+ echo 'Name: OpenSSL-libssl'; \
echo 'Description: Secure Sockets Layer and cryptography libraries'; \
echo 'Version: '$(VERSION); \
- echo 'Requires: '; \
- echo 'Libs: -L$${libdir} -lssl -lcrypto'; \
+ echo 'Requires.private: libcrypto'; \
+ echo 'Libs: -L$${libdir} -lssl'; \
echo 'Libs.private: $(EX_LIBS)'; \
echo 'Cflags: -I$${includedir} $(KRB5_INCLUDES)' ) > libssl.pc
@@ -396,10 +397,7 @@ openssl.pc: Makefile
echo 'Name: OpenSSL'; \
echo 'Description: Secure Sockets Layer and cryptography libraries and tools'; \
echo 'Version: '$(VERSION); \
- echo 'Requires: '; \
- echo 'Libs: -L$${libdir} -lssl -lcrypto'; \
- echo 'Libs.private: $(EX_LIBS)'; \
- echo 'Cflags: -I$${includedir} $(KRB5_INCLUDES)' ) > openssl.pc
+ echo 'Requires: libssl libcrypto' ) > openssl.pc
Makefile: Makefile.org Configure config
@echo "Makefile is older than Makefile.org, Configure or config."
@@ -562,11 +560,7 @@ install_sw:
do \
if [ -f "$$i" -o -f "$$i.a" ]; then \
( echo installing $$i; \
- if [ "$(PLATFORM)" != "Cygwin" ]; then \
- cp $$i $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i.new; \
- chmod 555 $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i.new; \
- mv -f $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i.new $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i; \
- else \
+ if expr "$(PLATFORM)" : "Cygwin" >/dev/null; then \
c=`echo $$i | sed 's/^lib\(.*\)\.dll\.a/cyg\1-$(SHLIB_VERSION_NUMBER).dll/'`; \
cp $$c $(INSTALL_PREFIX)$(INSTALLTOP)/bin/$$c.new; \
chmod 755 $(INSTALL_PREFIX)$(INSTALLTOP)/bin/$$c.new; \
@@ -574,6 +568,10 @@ install_sw:
cp $$i $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i.new; \
chmod 644 $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i.new; \
mv -f $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i.new $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i; \
+ else \
+ cp $$i $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i.new; \
+ chmod 555 $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i.new; \
+ mv -f $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i.new $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/$$i; \
fi ); \
if expr $(PLATFORM) : 'mingw' > /dev/null; then \
( case $$i in \
@@ -606,6 +604,10 @@ install_sw:
install_html_docs:
here="`pwd`"; \
+ filecase=; \
+ case "$(PLATFORM)" in DJGPP|Cygwin*|mingw*|darwin*-*-cc) \
+ filecase=-i; \
+ esac; \
for subdir in apps crypto ssl; do \
mkdir -p $(INSTALL_PREFIX)$(HTMLDIR)/$$subdir; \
for i in doc/$$subdir/*.pod; do \
@@ -634,9 +636,9 @@ install_docs:
@pod2man="`cd ./util; ./pod2mantest $(PERL)`"; \
here="`pwd`"; \
filecase=; \
- if [ "$(PLATFORM)" = "DJGPP" -o "$(PLATFORM)" = "Cygwin" -o "$(PLATFORM)" = "mingw" ]; then \
+ case "$(PLATFORM)" in DJGPP|Cygwin*|mingw*|darwin*-*-cc) \
filecase=-i; \
- fi; \
+ esac; \
set -e; for i in doc/apps/*.pod; do \
fn=`basename $$i .pod`; \
sec=`$(PERL) util/extract-section.pl 1 < $$i`; \
diff --git a/crypto/openssl/NEWS b/crypto/openssl/NEWS
index 5e76d3f..29e4805 100644
--- a/crypto/openssl/NEWS
+++ b/crypto/openssl/NEWS
@@ -5,15 +5,15 @@
This file gives a brief overview of the major changes between each OpenSSL
release. For more details please read the CHANGES file.
- Major changes between OpenSSL 1.0.1o and OpenSSL 1.0.1p [9 Jul 2015]
+ Major changes between OpenSSL 1.0.2c and OpenSSL 1.0.2d [9 Jul 2015]
o Alternate chains certificate forgery (CVE-2015-1793)
- Major changes between OpenSSL 1.0.1n and OpenSSL 1.0.1o [12 Jun 2015]
+ Major changes between OpenSSL 1.0.2b and OpenSSL 1.0.2c [12 Jun 2015]
o Fix HMAC ABI incompatibility
- Major changes between OpenSSL 1.0.1m and OpenSSL 1.0.1n [11 Jun 2015]
+ Major changes between OpenSSL 1.0.2a and OpenSSL 1.0.2b [11 Jun 2015]
o Malformed ECParameters causes infinite loop (CVE-2015-1788)
o Exploitable out-of-bounds read in X509_cmp_time (CVE-2015-1789)
@@ -21,16 +21,33 @@
o CMS verify infinite loop with unknown hash function (CVE-2015-1792)
o Race condition handling NewSessionTicket (CVE-2015-1791)
- Major changes between OpenSSL 1.0.1l and OpenSSL 1.0.1m [19 Mar 2015]
+ Major changes between OpenSSL 1.0.2 and OpenSSL 1.0.2a [19 Mar 2015]
+ o OpenSSL 1.0.2 ClientHello sigalgs DoS fix (CVE-2015-0291)
+ o Multiblock corrupted pointer fix (CVE-2015-0290)
+ o Segmentation fault in DTLSv1_listen fix (CVE-2015-0207)
o Segmentation fault in ASN1_TYPE_cmp fix (CVE-2015-0286)
+ o Segmentation fault for invalid PSS parameters fix (CVE-2015-0208)
o ASN.1 structure reuse memory corruption fix (CVE-2015-0287)
o PKCS7 NULL pointer dereferences fix (CVE-2015-0289)
o DoS via reachable assert in SSLv2 servers fix (CVE-2015-0293)
+ o Empty CKE with client auth and DHE fix (CVE-2015-1787)
+ o Handshake with unseeded PRNG fix (CVE-2015-0285)
o Use After Free following d2i_ECPrivatekey error fix (CVE-2015-0209)
o X509_to_X509_REQ NULL pointer deref fix (CVE-2015-0288)
o Removed the export ciphers from the DEFAULT ciphers
+ Major changes between OpenSSL 1.0.1l and OpenSSL 1.0.2 [22 Jan 2015]:
+
+ o Suite B support for TLS 1.2 and DTLS 1.2
+ o Support for DTLS 1.2
+ o TLS automatic EC curve selection.
+ o API to set TLS supported signature algorithms and curves
+ o SSL_CONF configuration API.
+ o TLS Brainpool support.
+ o ALPN support.
+ o CMS support for RSA-PSS, RSA-OAEP, ECDH and X9.42 DH.
+
Major changes between OpenSSL 1.0.1k and OpenSSL 1.0.1l [15 Jan 2015]
o Build fixes for the Windows and OpenVMS platforms
diff --git a/crypto/openssl/README b/crypto/openssl/README
index bf03f30..493141b 100644
--- a/crypto/openssl/README
+++ b/crypto/openssl/README
@@ -1,5 +1,5 @@
- OpenSSL 1.0.1p 9 Jul 2015
+ OpenSSL 1.0.2d 9 Jul 2015
Copyright (c) 1998-2011 The OpenSSL Project
Copyright (c) 1995-1998 Eric A. Young, Tim J. Hudson
@@ -90,32 +90,6 @@
SSL/TLS Client and Server Tests
Handling of S/MIME signed or encrypted mail
-
- PATENTS
- -------
-
- Various companies hold various patents for various algorithms in various
- locations around the world. _YOU_ are responsible for ensuring that your use
- of any algorithms is legal by checking if there are any patents in your
- country. The file contains some of the patents that we know about or are
- rumored to exist. This is not a definitive list.
-
- RSA Security holds software patents on the RC5 algorithm. If you
- intend to use this cipher, you must contact RSA Security for
- licensing conditions. Their web page is http://www.rsasecurity.com/.
-
- RC4 is a trademark of RSA Security, so use of this label should perhaps
- only be used with RSA Security's permission.
-
- The IDEA algorithm is patented by Ascom in Austria, France, Germany, Italy,
- Japan, the Netherlands, Spain, Sweden, Switzerland, UK and the USA. They
- should be contacted if that algorithm is to be used; their web page is
- http://www.ascom.ch/.
-
- NTT and Mitsubishi have patents and pending patents on the Camellia
- algorithm, but allow use at no charge without requiring an explicit
- licensing agreement: http://info.isl.ntt.co.jp/crypt/eng/info/chiteki.html
-
INSTALLATION
------------
@@ -161,8 +135,7 @@
- Problem Description (steps that will reproduce the problem, if known)
- Stack Traceback (if the application dumps core)
- Report the bug to the OpenSSL project via the Request Tracker
- (http://www.openssl.org/support/rt.html) by mail to:
+ Email the report to:
openssl-bugs@openssl.org
@@ -170,10 +143,11 @@
or support queries. Just because something doesn't work the way you expect
does not mean it is necessarily a bug in OpenSSL.
- Note that mail to openssl-bugs@openssl.org is recorded in the publicly
- readable request tracker database and is forwarded to a public
- mailing list. Confidential mail may be sent to openssl-security@openssl.org
- (PGP key available from the key servers).
+ Note that mail to openssl-bugs@openssl.org is recorded in the public
+ request tracker database (see https://www.openssl.org/support/rt.html
+ for details) and also forwarded to a public mailing list. Confidential
+ mail may be sent to openssl-security@openssl.org (PGP key available from
+ the key servers).
HOW TO CONTRIBUTE TO OpenSSL
----------------------------
diff --git a/crypto/openssl/apps/apps.c b/crypto/openssl/apps/apps.c
index 6801238..7478fc3 100644
--- a/crypto/openssl/apps/apps.c
+++ b/crypto/openssl/apps/apps.c
@@ -119,7 +119,7 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
-#if !defined(OPENSSL_SYSNAME_WIN32) && !defined(NETWARE_CLIB)
+#if !defined(OPENSSL_SYSNAME_WIN32) && !defined(OPENSSL_SYSNAME_WINCE) && !defined(NETWARE_CLIB)
# include <strings.h>
#endif
#include <sys/types.h>
@@ -285,6 +285,8 @@ int str2fmt(char *s)
return (FORMAT_PKCS12);
else if ((*s == 'E') || (*s == 'e'))
return (FORMAT_ENGINE);
+ else if ((*s == 'H') || (*s == 'h'))
+ return FORMAT_HTTP;
else if ((*s == 'P') || (*s == 'p')) {
if (s[1] == 'V' || s[1] == 'v')
return FORMAT_PVK;
@@ -787,12 +789,72 @@ static int load_pkcs12(BIO *err, BIO *in, const char *desc,
return ret;
}
+int load_cert_crl_http(const char *url, BIO *err,
+ X509 **pcert, X509_CRL **pcrl)
+{
+ char *host = NULL, *port = NULL, *path = NULL;
+ BIO *bio = NULL;
+ OCSP_REQ_CTX *rctx = NULL;
+ int use_ssl, rv = 0;
+ if (!OCSP_parse_url(url, &host, &port, &path, &use_ssl))
+ goto err;
+ if (use_ssl) {
+ if (err)
+ BIO_puts(err, "https not supported\n");
+ goto err;
+ }
+ bio = BIO_new_connect(host);
+ if (!bio || !BIO_set_conn_port(bio, port))
+ goto err;
+ rctx = OCSP_REQ_CTX_new(bio, 1024);
+ if (!rctx)
+ goto err;
+ if (!OCSP_REQ_CTX_http(rctx, "GET", path))
+ goto err;
+ if (!OCSP_REQ_CTX_add1_header(rctx, "Host", host))
+ goto err;
+ if (pcert) {
+ do {
+ rv = X509_http_nbio(rctx, pcert);
+ }
+ while (rv == -1);
+ } else {
+ do {
+ rv = X509_CRL_http_nbio(rctx, pcrl);
+ } while (rv == -1);
+ }
+
+ err:
+ if (host)
+ OPENSSL_free(host);
+ if (path)
+ OPENSSL_free(path);
+ if (port)
+ OPENSSL_free(port);
+ if (bio)
+ BIO_free_all(bio);
+ if (rctx)
+ OCSP_REQ_CTX_free(rctx);
+ if (rv != 1) {
+ if (bio && err)
+ BIO_printf(bio_err, "Error loading %s from %s\n",
+ pcert ? "certificate" : "CRL", url);
+ ERR_print_errors(bio_err);
+ }
+ return rv;
+}
+
X509 *load_cert(BIO *err, const char *file, int format,
const char *pass, ENGINE *e, const char *cert_descrip)
{
X509 *x = NULL;
BIO *cert;
+ if (format == FORMAT_HTTP) {
+ load_cert_crl_http(file, err, &x, NULL);
+ return x;
+ }
+
if ((cert = BIO_new(BIO_s_file())) == NULL) {
ERR_print_errors(err);
goto end;
@@ -850,6 +912,49 @@ X509 *load_cert(BIO *err, const char *file, int format,
return (x);
}
+X509_CRL *load_crl(const char *infile, int format)
+{
+ X509_CRL *x = NULL;
+ BIO *in = NULL;
+
+ if (format == FORMAT_HTTP) {
+ load_cert_crl_http(infile, bio_err, NULL, &x);
+ return x;
+ }
+
+ in = BIO_new(BIO_s_file());
+ if (in == NULL) {
+ ERR_print_errors(bio_err);
+ goto end;
+ }
+
+ if (infile == NULL)
+ BIO_set_fp(in, stdin, BIO_NOCLOSE);
+ else {
+ if (BIO_read_filename(in, infile) <= 0) {
+ perror(infile);
+ goto end;
+ }
+ }
+ if (format == FORMAT_ASN1)
+ x = d2i_X509_CRL_bio(in, NULL);
+ else if (format == FORMAT_PEM)
+ x = PEM_read_bio_X509_CRL(in, NULL, NULL, NULL);
+ else {
+ BIO_printf(bio_err, "bad input format specified for input crl\n");
+ goto end;
+ }
+ if (x == NULL) {
+ BIO_printf(bio_err, "unable to load CRL\n");
+ ERR_print_errors(bio_err);
+ goto end;
+ }
+
+ end:
+ BIO_free(in);
+ return (x);
+}
+
EVP_PKEY *load_key(BIO *err, const char *file, int format, int maybe_stdin,
const char *pass, ENGINE *e, const char *key_descrip)
{
@@ -2159,6 +2264,9 @@ int args_verify(char ***pargs, int *pargc,
char **oldargs = *pargs;
char *arg = **pargs, *argn = (*pargs)[1];
time_t at_time = 0;
+ char *hostname = NULL;
+ char *email = NULL;
+ char *ipasc = NULL;
if (!strcmp(arg, "-policy")) {
if (!argn)
*badarg = 1;
@@ -2212,6 +2320,21 @@ int args_verify(char ***pargs, int *pargc,
at_time = (time_t)timestamp;
}
(*pargs)++;
+ } else if (strcmp(arg, "-verify_hostname") == 0) {
+ if (!argn)
+ *badarg = 1;
+ hostname = argn;
+ (*pargs)++;
+ } else if (strcmp(arg, "-verify_email") == 0) {
+ if (!argn)
+ *badarg = 1;
+ email = argn;
+ (*pargs)++;
+ } else if (strcmp(arg, "-verify_ip") == 0) {
+ if (!argn)
+ *badarg = 1;
+ ipasc = argn;
+ (*pargs)++;
} else if (!strcmp(arg, "-ignore_critical"))
flags |= X509_V_FLAG_IGNORE_CRITICAL;
else if (!strcmp(arg, "-issuer_checks"))
@@ -2238,6 +2361,16 @@ int args_verify(char ***pargs, int *pargc,
flags |= X509_V_FLAG_NOTIFY_POLICY;
else if (!strcmp(arg, "-check_ss_sig"))
flags |= X509_V_FLAG_CHECK_SS_SIGNATURE;
+ else if (!strcmp(arg, "-trusted_first"))
+ flags |= X509_V_FLAG_TRUSTED_FIRST;
+ else if (!strcmp(arg, "-suiteB_128_only"))
+ flags |= X509_V_FLAG_SUITEB_128_LOS_ONLY;
+ else if (!strcmp(arg, "-suiteB_128"))
+ flags |= X509_V_FLAG_SUITEB_128_LOS;
+ else if (!strcmp(arg, "-suiteB_192"))
+ flags |= X509_V_FLAG_SUITEB_192_LOS;
+ else if (!strcmp(arg, "-partial_chain"))
+ flags |= X509_V_FLAG_PARTIAL_CHAIN;
else if (!strcmp(arg, "-no_alt_chains"))
flags |= X509_V_FLAG_NO_ALT_CHAINS;
else
@@ -2269,6 +2402,15 @@ int args_verify(char ***pargs, int *pargc,
if (at_time)
X509_VERIFY_PARAM_set_time(*pm, at_time);
+ if (hostname && !X509_VERIFY_PARAM_set1_host(*pm, hostname, 0))
+ *badarg = 1;
+
+ if (email && !X509_VERIFY_PARAM_set1_email(*pm, email, 0))
+ *badarg = 1;
+
+ if (ipasc && !X509_VERIFY_PARAM_set1_ip_asc(*pm, ipasc))
+ *badarg = 1;
+
end:
(*pargs)++;
@@ -2552,6 +2694,9 @@ void jpake_client_auth(BIO *out, BIO *conn, const char *secret)
BIO_puts(out, "JPAKE authentication succeeded, setting PSK\n");
+ if (psk_key)
+ OPENSSL_free(psk_key);
+
psk_key = BN_bn2hex(JPAKE_get_shared_key(ctx));
BIO_pop(bconn);
@@ -2581,6 +2726,9 @@ void jpake_server_auth(BIO *out, BIO *conn, const char *secret)
BIO_puts(out, "JPAKE authentication succeeded, setting PSK\n");
+ if (psk_key)
+ OPENSSL_free(psk_key);
+
psk_key = BN_bn2hex(JPAKE_get_shared_key(ctx));
BIO_pop(bconn);
@@ -2591,7 +2739,7 @@ void jpake_server_auth(BIO *out, BIO *conn, const char *secret)
#endif
-#if !defined(OPENSSL_NO_TLSEXT) && !defined(OPENSSL_NO_NEXTPROTONEG)
+#ifndef OPENSSL_NO_TLSEXT
/*-
* next_protos_parse parses a comma separated list of strings into a string
* in a format suitable for passing to SSL_CTX_set_next_protos_advertised.
@@ -2630,8 +2778,106 @@ unsigned char *next_protos_parse(unsigned short *outlen, const char *in)
*outlen = len + 1;
return out;
}
-#endif /* !OPENSSL_NO_TLSEXT &&
- * !OPENSSL_NO_NEXTPROTONEG */
+#endif /* ndef OPENSSL_NO_TLSEXT */
+
+void print_cert_checks(BIO *bio, X509 *x,
+ const char *checkhost,
+ const char *checkemail, const char *checkip)
+{
+ if (x == NULL)
+ return;
+ if (checkhost) {
+ BIO_printf(bio, "Hostname %s does%s match certificate\n",
+ checkhost, X509_check_host(x, checkhost, 0, 0, NULL) == 1
+ ? "" : " NOT");
+ }
+
+ if (checkemail) {
+ BIO_printf(bio, "Email %s does%s match certificate\n",
+ checkemail, X509_check_email(x, checkemail, 0,
+ 0) ? "" : " NOT");
+ }
+
+ if (checkip) {
+ BIO_printf(bio, "IP %s does%s match certificate\n",
+ checkip, X509_check_ip_asc(x, checkip, 0) ? "" : " NOT");
+ }
+}
+
+/* Get first http URL from a DIST_POINT structure */
+
+static const char *get_dp_url(DIST_POINT *dp)
+{
+ GENERAL_NAMES *gens;
+ GENERAL_NAME *gen;
+ int i, gtype;
+ ASN1_STRING *uri;
+ if (!dp->distpoint || dp->distpoint->type != 0)
+ return NULL;
+ gens = dp->distpoint->name.fullname;
+ for (i = 0; i < sk_GENERAL_NAME_num(gens); i++) {
+ gen = sk_GENERAL_NAME_value(gens, i);
+ uri = GENERAL_NAME_get0_value(gen, &gtype);
+ if (gtype == GEN_URI && ASN1_STRING_length(uri) > 6) {
+ char *uptr = (char *)ASN1_STRING_data(uri);
+ if (!strncmp(uptr, "http://", 7))
+ return uptr;
+ }
+ }
+ return NULL;
+}
+
+/*
+ * Look through a CRLDP structure and attempt to find an http URL to
+ * downloads a CRL from.
+ */
+
+static X509_CRL *load_crl_crldp(STACK_OF(DIST_POINT) *crldp)
+{
+ int i;
+ const char *urlptr = NULL;
+ for (i = 0; i < sk_DIST_POINT_num(crldp); i++) {
+ DIST_POINT *dp = sk_DIST_POINT_value(crldp, i);
+ urlptr = get_dp_url(dp);
+ if (urlptr)
+ return load_crl(urlptr, FORMAT_HTTP);
+ }
+ return NULL;
+}
+
+/*
+ * Example of downloading CRLs from CRLDP: not usable for real world as it
+ * always downloads, doesn't support non-blocking I/O and doesn't cache
+ * anything.
+ */
+
+static STACK_OF(X509_CRL) *crls_http_cb(X509_STORE_CTX *ctx, X509_NAME *nm)
+{
+ X509 *x;
+ STACK_OF(X509_CRL) *crls = NULL;
+ X509_CRL *crl;
+ STACK_OF(DIST_POINT) *crldp;
+ x = X509_STORE_CTX_get_current_cert(ctx);
+ crldp = X509_get_ext_d2i(x, NID_crl_distribution_points, NULL, NULL);
+ crl = load_crl_crldp(crldp);
+ sk_DIST_POINT_pop_free(crldp, DIST_POINT_free);
+ if (!crl)
+ return NULL;
+ crls = sk_X509_CRL_new_null();
+ sk_X509_CRL_push(crls, crl);
+ /* Try to download delta CRL */
+ crldp = X509_get_ext_d2i(x, NID_freshest_crl, NULL, NULL);
+ crl = load_crl_crldp(crldp);
+ sk_DIST_POINT_pop_free(crldp, DIST_POINT_free);
+ if (crl)
+ sk_X509_CRL_push(crls, crl);
+ return crls;
+}
+
+void store_setup_crl_download(X509_STORE *st)
+{
+ X509_STORE_set_lookup_crls_cb(st, crls_http_cb);
+}
/*
* Platform-specific sections
diff --git a/crypto/openssl/apps/apps.h b/crypto/openssl/apps/apps.h
index 33b293e..8276e70 100644
--- a/crypto/openssl/apps/apps.h
+++ b/crypto/openssl/apps/apps.h
@@ -205,7 +205,7 @@ extern BIO *bio_err;
# endif
# endif
-# ifdef OPENSSL_SYSNAME_WIN32
+# if defined(OPENSSL_SYSNAME_WIN32) || defined(OPENSSL_SYSNAME_WINCE)
# define openssl_fdset(a,b) FD_SET((unsigned int)a, b)
# else
# define openssl_fdset(a,b) FD_SET(a, b)
@@ -245,6 +245,9 @@ int app_passwd(BIO *err, char *arg1, char *arg2, char **pass1, char **pass2);
int add_oid_section(BIO *err, CONF *conf);
X509 *load_cert(BIO *err, const char *file, int format,
const char *pass, ENGINE *e, const char *cert_descrip);
+X509_CRL *load_crl(const char *infile, int format);
+int load_cert_crl_http(const char *url, BIO *err,
+ X509 **pcert, X509_CRL **pcrl);
EVP_PKEY *load_key(BIO *err, const char *file, int format, int maybe_stdin,
const char *pass, ENGINE *e, const char *key_descrip);
EVP_PKEY *load_pubkey(BIO *err, const char *file, int format, int maybe_stdin,
@@ -262,8 +265,9 @@ ENGINE *setup_engine(BIO *err, const char *engine, int debug);
# ifndef OPENSSL_NO_OCSP
OCSP_RESPONSE *process_responder(BIO *err, OCSP_REQUEST *req,
- char *host, char *path, char *port,
- int use_ssl, STACK_OF(CONF_VALUE) *headers,
+ const char *host, const char *path,
+ const char *port, int use_ssl,
+ const STACK_OF(CONF_VALUE) *headers,
int req_timeout);
# endif
@@ -334,10 +338,15 @@ void jpake_client_auth(BIO *out, BIO *conn, const char *secret);
void jpake_server_auth(BIO *out, BIO *conn, const char *secret);
# endif
-# if !defined(OPENSSL_NO_TLSEXT) && !defined(OPENSSL_NO_NEXTPROTONEG)
+# ifndef OPENSSL_NO_TLSEXT
unsigned char *next_protos_parse(unsigned short *outlen, const char *in);
-# endif /* !OPENSSL_NO_TLSEXT &&
- * !OPENSSL_NO_NEXTPROTONEG */
+# endif /* ndef OPENSSL_NO_TLSEXT */
+
+void print_cert_checks(BIO *bio, X509 *x,
+ const char *checkhost,
+ const char *checkemail, const char *checkip);
+
+void store_setup_crl_download(X509_STORE *st);
# define FORMAT_UNDEF 0
# define FORMAT_ASN1 1
@@ -353,6 +362,7 @@ unsigned char *next_protos_parse(unsigned short *outlen, const char *in);
# define FORMAT_ASN1RSA 10 /* DER RSAPubicKey format */
# define FORMAT_MSBLOB 11 /* MS Key blob format */
# define FORMAT_PVK 12 /* MS PVK file format */
+# define FORMAT_HTTP 13 /* Download using HTTP */
# define EXT_COPY_NONE 0
# define EXT_COPY_ADD 1
diff --git a/crypto/openssl/apps/ca.c b/crypto/openssl/apps/ca.c
index 97ad0c1..3b7336c 100644
--- a/crypto/openssl/apps/ca.c
+++ b/crypto/openssl/apps/ca.c
@@ -479,6 +479,11 @@ int MAIN(int argc, char **argv)
goto bad;
infile = *(++argv);
dorevoke = 1;
+ } else if (strcmp(*argv, "-valid") == 0) {
+ if (--argc < 1)
+ goto bad;
+ infile = *(++argv);
+ dorevoke = 2;
} else if (strcmp(*argv, "-extensions") == 0) {
if (--argc < 1)
goto bad;
@@ -1441,6 +1446,8 @@ int MAIN(int argc, char **argv)
revcert = load_cert(bio_err, infile, FORMAT_PEM, NULL, e, infile);
if (revcert == NULL)
goto err;
+ if (dorevoke == 2)
+ rev_type = -1;
j = do_revoke(revcert, db, rev_type, rev_arg);
if (j <= 0)
goto err;
@@ -1968,8 +1975,12 @@ static int do_body(X509 **xret, EVP_PKEY *pkey, X509 *x509,
if (enddate == NULL)
X509_time_adj_ex(X509_get_notAfter(ret), days, 0, NULL);
- else
+ else {
+ int tdays;
ASN1_TIME_set_string(X509_get_notAfter(ret), enddate);
+ ASN1_TIME_diff(&tdays, NULL, NULL, X509_get_notAfter(ret));
+ days = tdays;
+ }
if (!X509_set_subject_name(ret, subject))
goto err;
@@ -2409,13 +2420,20 @@ static int do_revoke(X509 *x509, CA_DB *db, int type, char *value)
}
/* Revoke Certificate */
- ok = do_revoke(x509, db, type, value);
+ if (type == -1)
+ ok = 1;
+ else
+ ok = do_revoke(x509, db, type, value);
goto err;
} else if (index_name_cmp_noconst(row, rrow)) {
BIO_printf(bio_err, "ERROR:name does not match %s\n", row[DB_name]);
goto err;
+ } else if (type == -1) {
+ BIO_printf(bio_err, "ERROR:Already present, serial number %s\n",
+ row[DB_serial]);
+ goto err;
} else if (rrow[DB_type][0] == 'R') {
BIO_printf(bio_err, "ERROR:Already revoked, serial number %s\n",
row[DB_serial]);
diff --git a/crypto/openssl/apps/ciphers.c b/crypto/openssl/apps/ciphers.c
index f299175..66636d2 100644
--- a/crypto/openssl/apps/ciphers.c
+++ b/crypto/openssl/apps/ciphers.c
@@ -85,6 +85,9 @@ int MAIN(int argc, char **argv)
{
int ret = 1, i;
int verbose = 0, Verbose = 0;
+#ifndef OPENSSL_NO_SSL_TRACE
+ int stdname = 0;
+#endif
const char **pp;
const char *p;
int badops = 0;
@@ -119,6 +122,10 @@ int MAIN(int argc, char **argv)
verbose = 1;
else if (strcmp(*argv, "-V") == 0)
verbose = Verbose = 1;
+#ifndef OPENSSL_NO_SSL_TRACE
+ else if (strcmp(*argv, "-stdname") == 0)
+ stdname = verbose = 1;
+#endif
#ifndef OPENSSL_NO_SSL2
else if (strcmp(*argv, "-ssl2") == 0)
meth = SSLv2_client_method();
@@ -202,7 +209,14 @@ int MAIN(int argc, char **argv)
id1, id2, id3);
}
}
-
+#ifndef OPENSSL_NO_SSL_TRACE
+ if (stdname) {
+ const char *nm = SSL_CIPHER_standard_name(c);
+ if (nm == NULL)
+ nm = "UNKNOWN";
+ BIO_printf(STDout, "%s - ", nm);
+ }
+#endif
BIO_puts(STDout, SSL_CIPHER_description(c, buf, sizeof buf));
}
}
diff --git a/crypto/openssl/apps/cms.c b/crypto/openssl/apps/cms.c
index d7645c0..6047937 100644
--- a/crypto/openssl/apps/cms.c
+++ b/crypto/openssl/apps/cms.c
@@ -75,6 +75,8 @@ static void receipt_request_print(BIO *out, CMS_ContentInfo *cms);
static CMS_ReceiptRequest *make_receipt_request(STACK_OF(OPENSSL_STRING)
*rr_to, int rr_allorfirst, STACK_OF(OPENSSL_STRING)
*rr_from);
+static int cms_set_pkey_param(EVP_PKEY_CTX *pctx,
+ STACK_OF(OPENSSL_STRING) *param);
# define SMIME_OP 0x10
# define SMIME_IP 0x20
@@ -98,6 +100,14 @@ static CMS_ReceiptRequest *make_receipt_request(STACK_OF(OPENSSL_STRING)
int verify_err = 0;
+typedef struct cms_key_param_st cms_key_param;
+
+struct cms_key_param_st {
+ int idx;
+ STACK_OF(OPENSSL_STRING) *param;
+ cms_key_param *next;
+};
+
int MAIN(int, char **);
int MAIN(int argc, char **argv)
@@ -112,7 +122,7 @@ int MAIN(int argc, char **argv)
STACK_OF(OPENSSL_STRING) *sksigners = NULL, *skkeys = NULL;
char *certfile = NULL, *keyfile = NULL, *contfile = NULL;
char *certsoutfile = NULL;
- const EVP_CIPHER *cipher = NULL;
+ const EVP_CIPHER *cipher = NULL, *wrap_cipher = NULL;
CMS_ContentInfo *cms = NULL, *rcms = NULL;
X509_STORE *store = NULL;
X509 *cert = NULL, *recip = NULL, *signer = NULL;
@@ -140,6 +150,8 @@ int MAIN(int argc, char **argv)
unsigned char *pwri_pass = NULL, *pwri_tmp = NULL;
size_t secret_keylen = 0, secret_keyidlen = 0;
+ cms_key_param *key_first = NULL, *key_param = NULL;
+
ASN1_OBJECT *econtent_type = NULL;
X509_VERIFY_PARAM *vpm = NULL;
@@ -201,6 +213,8 @@ int MAIN(int argc, char **argv)
cipher = EVP_des_ede3_cbc();
else if (!strcmp(*args, "-des"))
cipher = EVP_des_cbc();
+ else if (!strcmp(*args, "-des3-wrap"))
+ wrap_cipher = EVP_des_ede3_wrap();
# endif
# ifndef OPENSSL_NO_SEED
else if (!strcmp(*args, "-seed"))
@@ -221,6 +235,12 @@ int MAIN(int argc, char **argv)
cipher = EVP_aes_192_cbc();
else if (!strcmp(*args, "-aes256"))
cipher = EVP_aes_256_cbc();
+ else if (!strcmp(*args, "-aes128-wrap"))
+ wrap_cipher = EVP_aes_128_wrap();
+ else if (!strcmp(*args, "-aes192-wrap"))
+ wrap_cipher = EVP_aes_192_wrap();
+ else if (!strcmp(*args, "-aes256-wrap"))
+ wrap_cipher = EVP_aes_256_wrap();
# endif
# ifndef OPENSSL_NO_CAMELLIA
else if (!strcmp(*args, "-camellia128"))
@@ -378,7 +398,17 @@ int MAIN(int argc, char **argv)
} else if (!strcmp(*args, "-recip")) {
if (!args[1])
goto argerr;
- recipfile = *++args;
+ if (operation == SMIME_ENCRYPT) {
+ if (!encerts)
+ encerts = sk_X509_new_null();
+ cert = load_cert(bio_err, *++args, FORMAT_PEM,
+ NULL, e, "recipient certificate file");
+ if (!cert)
+ goto end;
+ sk_X509_push(encerts, cert);
+ cert = NULL;
+ } else
+ recipfile = *++args;
} else if (!strcmp(*args, "-certsout")) {
if (!args[1])
goto argerr;
@@ -413,6 +443,40 @@ int MAIN(int argc, char **argv)
if (!args[1])
goto argerr;
keyform = str2fmt(*++args);
+ } else if (!strcmp(*args, "-keyopt")) {
+ int keyidx = -1;
+ if (!args[1])
+ goto argerr;
+ if (operation == SMIME_ENCRYPT) {
+ if (encerts)
+ keyidx += sk_X509_num(encerts);
+ } else {
+ if (keyfile || signerfile)
+ keyidx++;
+ if (skkeys)
+ keyidx += sk_OPENSSL_STRING_num(skkeys);
+ }
+ if (keyidx < 0) {
+ BIO_printf(bio_err, "No key specified\n");
+ goto argerr;
+ }
+ if (key_param == NULL || key_param->idx != keyidx) {
+ cms_key_param *nparam;
+ nparam = OPENSSL_malloc(sizeof(cms_key_param));
+ if (!nparam) {
+ BIO_printf(bio_err, "Out of memory\n");
+ goto argerr;
+ }
+ nparam->idx = keyidx;
+ nparam->param = sk_OPENSSL_STRING_new_null();
+ nparam->next = NULL;
+ if (key_first == NULL)
+ key_first = nparam;
+ else
+ key_param->next = nparam;
+ key_param = nparam;
+ }
+ sk_OPENSSL_STRING_push(key_param->param, *++args);
} else if (!strcmp(*args, "-rctform")) {
if (!args[1])
goto argerr;
@@ -502,7 +566,7 @@ int MAIN(int argc, char **argv)
badarg = 1;
}
} else if (operation == SMIME_ENCRYPT) {
- if (!*args && !secret_key && !pwri_pass) {
+ if (!*args && !secret_key && !pwri_pass && !encerts) {
BIO_printf(bio_err, "No recipient(s) certificate(s) specified\n");
badarg = 1;
}
@@ -567,6 +631,7 @@ int MAIN(int argc, char **argv)
"-inkey file input private key (if not signer or recipient)\n");
BIO_printf(bio_err,
"-keyform arg input private key format (PEM or ENGINE)\n");
+ BIO_printf(bio_err, "-keyopt nm:v set public key parameters\n");
BIO_printf(bio_err, "-out file output file\n");
BIO_printf(bio_err,
"-outform arg output format SMIME (default), PEM or DER\n");
@@ -652,7 +717,7 @@ int MAIN(int argc, char **argv)
goto end;
}
- if (*args)
+ if (*args && !encerts)
encerts = sk_X509_new_null();
while (*args) {
if (!(cert = load_cert(bio_err, *args, FORMAT_PEM,
@@ -804,10 +869,39 @@ int MAIN(int argc, char **argv)
} else if (operation == SMIME_COMPRESS) {
cms = CMS_compress(in, -1, flags);
} else if (operation == SMIME_ENCRYPT) {
+ int i;
flags |= CMS_PARTIAL;
- cms = CMS_encrypt(encerts, in, cipher, flags);
+ cms = CMS_encrypt(NULL, in, cipher, flags);
if (!cms)
goto end;
+ for (i = 0; i < sk_X509_num(encerts); i++) {
+ CMS_RecipientInfo *ri;
+ cms_key_param *kparam;
+ int tflags = flags;
+ X509 *x = sk_X509_value(encerts, i);
+ for (kparam = key_first; kparam; kparam = kparam->next) {
+ if (kparam->idx == i) {
+ tflags |= CMS_KEY_PARAM;
+ break;
+ }
+ }
+ ri = CMS_add1_recipient_cert(cms, x, tflags);
+ if (!ri)
+ goto end;
+ if (kparam) {
+ EVP_PKEY_CTX *pctx;
+ pctx = CMS_RecipientInfo_get0_pkey_ctx(ri);
+ if (!cms_set_pkey_param(pctx, kparam->param))
+ goto end;
+ }
+ if (CMS_RecipientInfo_type(ri) == CMS_RECIPINFO_AGREE
+ && wrap_cipher) {
+ EVP_CIPHER_CTX *wctx;
+ wctx = CMS_RecipientInfo_kari_get0_ctx(ri);
+ EVP_EncryptInit_ex(wctx, wrap_cipher, NULL, NULL, NULL);
+ }
+ }
+
if (secret_key) {
if (!CMS_add0_recipient_key(cms, NID_undef,
secret_key, secret_keylen,
@@ -880,8 +974,11 @@ int MAIN(int argc, char **argv)
flags |= CMS_REUSE_DIGEST;
for (i = 0; i < sk_OPENSSL_STRING_num(sksigners); i++) {
CMS_SignerInfo *si;
+ cms_key_param *kparam;
+ int tflags = flags;
signerfile = sk_OPENSSL_STRING_value(sksigners, i);
keyfile = sk_OPENSSL_STRING_value(skkeys, i);
+
signer = load_cert(bio_err, signerfile, FORMAT_PEM, NULL,
e, "signer certificate");
if (!signer)
@@ -890,9 +987,21 @@ int MAIN(int argc, char **argv)
"signing key file");
if (!key)
goto end;
- si = CMS_add1_signer(cms, signer, key, sign_md, flags);
+ for (kparam = key_first; kparam; kparam = kparam->next) {
+ if (kparam->idx == i) {
+ tflags |= CMS_KEY_PARAM;
+ break;
+ }
+ }
+ si = CMS_add1_signer(cms, signer, key, sign_md, tflags);
if (!si)
goto end;
+ if (kparam) {
+ EVP_PKEY_CTX *pctx;
+ pctx = CMS_SignerInfo_get0_pkey_ctx(si);
+ if (!cms_set_pkey_param(pctx, kparam->param))
+ goto end;
+ }
if (rr && !CMS_add1_ReceiptRequest(si, rr))
goto end;
X509_free(signer);
@@ -1047,6 +1156,13 @@ int MAIN(int argc, char **argv)
sk_OPENSSL_STRING_free(rr_to);
if (rr_from)
sk_OPENSSL_STRING_free(rr_from);
+ for (key_param = key_first; key_param;) {
+ cms_key_param *tparam;
+ sk_OPENSSL_STRING_free(key_param->param);
+ tparam = key_param->next;
+ OPENSSL_free(key_param);
+ key_param = tparam;
+ }
X509_STORE_free(store);
X509_free(cert);
X509_free(recip);
@@ -1220,4 +1336,22 @@ static CMS_ReceiptRequest *make_receipt_request(STACK_OF(OPENSSL_STRING)
return NULL;
}
+static int cms_set_pkey_param(EVP_PKEY_CTX *pctx,
+ STACK_OF(OPENSSL_STRING) *param)
+{
+ char *keyopt;
+ int i;
+ if (sk_OPENSSL_STRING_num(param) <= 0)
+ return 1;
+ for (i = 0; i < sk_OPENSSL_STRING_num(param); i++) {
+ keyopt = sk_OPENSSL_STRING_value(param, i);
+ if (pkey_ctrl_string(pctx, keyopt) <= 0) {
+ BIO_printf(bio_err, "parameter error \"%s\"\n", keyopt);
+ ERR_print_errors(bio_err);
+ return 0;
+ }
+ }
+ return 1;
+}
+
#endif
diff --git a/crypto/openssl/apps/crl.c b/crypto/openssl/apps/crl.c
index 0a05870..c9c3a5f 100644
--- a/crypto/openssl/apps/crl.c
+++ b/crypto/openssl/apps/crl.c
@@ -96,7 +96,6 @@ static const char *crl_usage[] = {
NULL
};
-static X509_CRL *load_crl(char *file, int format);
static BIO *bio_out = NULL;
int MAIN(int, char **);
@@ -106,10 +105,10 @@ int MAIN(int argc, char **argv)
unsigned long nmflag = 0;
X509_CRL *x = NULL;
char *CAfile = NULL, *CApath = NULL;
- int ret = 1, i, num, badops = 0;
+ int ret = 1, i, num, badops = 0, badsig = 0;
BIO *out = NULL;
- int informat, outformat;
- char *infile = NULL, *outfile = NULL;
+ int informat, outformat, keyformat;
+ char *infile = NULL, *outfile = NULL, *crldiff = NULL, *keyfile = NULL;
int hash = 0, issuer = 0, lastupdate = 0, nextupdate = 0, noout =
0, text = 0;
#ifndef OPENSSL_NO_MD5
@@ -147,6 +146,7 @@ int MAIN(int argc, char **argv)
informat = FORMAT_PEM;
outformat = FORMAT_PEM;
+ keyformat = FORMAT_PEM;
argc--;
argv++;
@@ -173,6 +173,18 @@ int MAIN(int argc, char **argv)
if (--argc < 1)
goto bad;
infile = *(++argv);
+ } else if (strcmp(*argv, "-gendelta") == 0) {
+ if (--argc < 1)
+ goto bad;
+ crldiff = *(++argv);
+ } else if (strcmp(*argv, "-key") == 0) {
+ if (--argc < 1)
+ goto bad;
+ keyfile = *(++argv);
+ } else if (strcmp(*argv, "-keyform") == 0) {
+ if (--argc < 1)
+ goto bad;
+ keyformat = str2fmt(*(++argv));
} else if (strcmp(*argv, "-out") == 0) {
if (--argc < 1)
goto bad;
@@ -214,6 +226,8 @@ int MAIN(int argc, char **argv)
fingerprint = ++num;
else if (strcmp(*argv, "-crlnumber") == 0)
crlnumber = ++num;
+ else if (strcmp(*argv, "-badsig") == 0)
+ badsig = 1;
else if ((md_alg = EVP_get_digestbyname(*argv + 1))) {
/* ok */
digest = md_alg;
@@ -281,6 +295,33 @@ int MAIN(int argc, char **argv)
BIO_printf(bio_err, "verify OK\n");
}
+ if (crldiff) {
+ X509_CRL *newcrl, *delta;
+ if (!keyfile) {
+ BIO_puts(bio_err, "Missing CRL signing key\n");
+ goto end;
+ }
+ newcrl = load_crl(crldiff, informat);
+ if (!newcrl)
+ goto end;
+ pkey = load_key(bio_err, keyfile, keyformat, 0, NULL, NULL,
+ "CRL signing key");
+ if (!pkey) {
+ X509_CRL_free(newcrl);
+ goto end;
+ }
+ delta = X509_CRL_diff(x, newcrl, pkey, digest, 0);
+ X509_CRL_free(newcrl);
+ EVP_PKEY_free(pkey);
+ if (delta) {
+ X509_CRL_free(x);
+ x = delta;
+ } else {
+ BIO_puts(bio_err, "Error creating delta CRL\n");
+ goto end;
+ }
+ }
+
if (num) {
for (i = 1; i <= num; i++) {
if (issuer == i) {
@@ -369,6 +410,9 @@ int MAIN(int argc, char **argv)
goto end;
}
+ if (badsig)
+ x->signature->data[x->signature->length - 1] ^= 0x1;
+
if (outformat == FORMAT_ASN1)
i = (int)i2d_X509_CRL_bio(out, x);
else if (outformat == FORMAT_PEM)
@@ -383,6 +427,8 @@ int MAIN(int argc, char **argv)
}
ret = 0;
end:
+ if (ret != 0)
+ ERR_print_errors(bio_err);
BIO_free_all(out);
BIO_free_all(bio_out);
bio_out = NULL;
@@ -394,41 +440,3 @@ int MAIN(int argc, char **argv)
apps_shutdown();
OPENSSL_EXIT(ret);
}
-
-static X509_CRL *load_crl(char *infile, int format)
-{
- X509_CRL *x = NULL;
- BIO *in = NULL;
-
- in = BIO_new(BIO_s_file());
- if (in == NULL) {
- ERR_print_errors(bio_err);
- goto end;
- }
-
- if (infile == NULL)
- BIO_set_fp(in, stdin, BIO_NOCLOSE);
- else {
- if (BIO_read_filename(in, infile) <= 0) {
- perror(infile);
- goto end;
- }
- }
- if (format == FORMAT_ASN1)
- x = d2i_X509_CRL_bio(in, NULL);
- else if (format == FORMAT_PEM)
- x = PEM_read_bio_X509_CRL(in, NULL, NULL, NULL);
- else {
- BIO_printf(bio_err, "bad input format specified for input crl\n");
- goto end;
- }
- if (x == NULL) {
- BIO_printf(bio_err, "unable to load CRL\n");
- ERR_print_errors(bio_err);
- goto end;
- }
-
- end:
- BIO_free(in);
- return (x);
-}
diff --git a/crypto/openssl/apps/dgst.c b/crypto/openssl/apps/dgst.c
index ad2f234..95e5fa3 100644
--- a/crypto/openssl/apps/dgst.c
+++ b/crypto/openssl/apps/dgst.c
@@ -103,7 +103,7 @@ int MAIN(int, char **);
int MAIN(int argc, char **argv)
{
- ENGINE *e = NULL;
+ ENGINE *e = NULL, *impl = NULL;
unsigned char *buf = NULL;
int i, err = 1;
const EVP_MD *md = NULL, *m;
@@ -124,6 +124,7 @@ int MAIN(int argc, char **argv)
char *passargin = NULL, *passin = NULL;
#ifndef OPENSSL_NO_ENGINE
char *engine = NULL;
+ int engine_impl = 0;
#endif
char *hmac_key = NULL;
char *mac_name = NULL;
@@ -199,7 +200,8 @@ int MAIN(int argc, char **argv)
break;
engine = *(++argv);
e = setup_engine(bio_err, engine, 0);
- }
+ } else if (strcmp(*argv, "-engine_impl") == 0)
+ engine_impl = 1;
#endif
else if (strcmp(*argv, "-hex") == 0)
out_bin = 0;
@@ -284,6 +286,10 @@ int MAIN(int argc, char **argv)
EVP_MD_do_all_sorted(list_md_fn, bio_err);
goto end;
}
+#ifndef OPENSSL_NO_ENGINE
+ if (engine_impl)
+ impl = e;
+#endif
in = BIO_new(BIO_s_file());
bmd = BIO_new(BIO_f_md());
@@ -357,7 +363,7 @@ int MAIN(int argc, char **argv)
if (mac_name) {
EVP_PKEY_CTX *mac_ctx = NULL;
int r = 0;
- if (!init_gen_str(bio_err, &mac_ctx, mac_name, e, 0))
+ if (!init_gen_str(bio_err, &mac_ctx, mac_name, impl, 0))
goto mac_end;
if (macopts) {
char *macopt;
@@ -391,7 +397,7 @@ int MAIN(int argc, char **argv)
}
if (hmac_key) {
- sigkey = EVP_PKEY_new_mac_key(EVP_PKEY_HMAC, e,
+ sigkey = EVP_PKEY_new_mac_key(EVP_PKEY_HMAC, impl,
(unsigned char *)hmac_key, -1);
if (!sigkey)
goto end;
@@ -407,9 +413,9 @@ int MAIN(int argc, char **argv)
goto end;
}
if (do_verify)
- r = EVP_DigestVerifyInit(mctx, &pctx, md, NULL, sigkey);
+ r = EVP_DigestVerifyInit(mctx, &pctx, md, impl, sigkey);
else
- r = EVP_DigestSignInit(mctx, &pctx, md, NULL, sigkey);
+ r = EVP_DigestSignInit(mctx, &pctx, md, impl, sigkey);
if (!r) {
BIO_printf(bio_err, "Error setting context\n");
ERR_print_errors(bio_err);
@@ -429,9 +435,15 @@ int MAIN(int argc, char **argv)
}
/* we use md as a filter, reading from 'in' */
else {
+ EVP_MD_CTX *mctx = NULL;
+ if (!BIO_get_md_ctx(bmd, &mctx)) {
+ BIO_printf(bio_err, "Error getting context\n");
+ ERR_print_errors(bio_err);
+ goto end;
+ }
if (md == NULL)
md = EVP_md5();
- if (!BIO_set_md(bmd, md)) {
+ if (!EVP_DigestInit_ex(mctx, md, impl)) {
BIO_printf(bio_err, "Error setting digest %s\n", pname);
ERR_print_errors(bio_err);
goto end;
@@ -483,7 +495,8 @@ int MAIN(int argc, char **argv)
EVP_PKEY_asn1_get0_info(NULL, NULL,
NULL, NULL, &sig_name, ameth);
}
- md_name = EVP_MD_name(md);
+ if (md)
+ md_name = EVP_MD_name(md);
}
err = 0;
for (i = 0; i < argc; i++) {
@@ -581,9 +594,12 @@ int do_fp(BIO *out, unsigned char *buf, BIO *bp, int sep, int binout,
BIO_printf(out, "%02x", buf[i]);
BIO_printf(out, " *%s\n", file);
} else {
- if (sig_name)
- BIO_printf(out, "%s-%s(%s)= ", sig_name, md_name, file);
- else if (md_name)
+ if (sig_name) {
+ BIO_puts(out, sig_name);
+ if (md_name)
+ BIO_printf(out, "-%s", md_name);
+ BIO_printf(out, "(%s)= ", file);
+ } else if (md_name)
BIO_printf(out, "%s(%s)= ", md_name, file);
else
BIO_printf(out, "(%s)= ", file);
diff --git a/crypto/openssl/apps/dhparam.c b/crypto/openssl/apps/dhparam.c
index d3b6d58..57199a8 100644
--- a/crypto/openssl/apps/dhparam.c
+++ b/crypto/openssl/apps/dhparam.c
@@ -489,9 +489,12 @@ int MAIN(int argc, char **argv)
if (!noout) {
if (outformat == FORMAT_ASN1)
i = i2d_DHparams_bio(out, dh);
- else if (outformat == FORMAT_PEM)
- i = PEM_write_bio_DHparams(out, dh);
- else {
+ else if (outformat == FORMAT_PEM) {
+ if (dh->q)
+ i = PEM_write_bio_DHxparams(out, dh);
+ else
+ i = PEM_write_bio_DHparams(out, dh);
+ } else {
BIO_printf(bio_err, "bad output format specified for outfile\n");
goto end;
}
diff --git a/crypto/openssl/apps/ecparam.c b/crypto/openssl/apps/ecparam.c
index 1f340a9..06ac77b 100644
--- a/crypto/openssl/apps/ecparam.c
+++ b/crypto/openssl/apps/ecparam.c
@@ -370,6 +370,9 @@ int MAIN(int argc, char **argv)
} else
nid = OBJ_sn2nid(curve_name);
+ if (nid == 0)
+ nid = EC_curve_nist2nid(curve_name);
+
if (nid == 0) {
BIO_printf(bio_err, "unknown curve name (%s)\n", curve_name);
goto end;
diff --git a/crypto/openssl/apps/genrsa.c b/crypto/openssl/apps/genrsa.c
index 2eabadc..91e6550 100644
--- a/crypto/openssl/apps/genrsa.c
+++ b/crypto/openssl/apps/genrsa.c
@@ -80,7 +80,7 @@
# include <openssl/pem.h>
# include <openssl/rand.h>
-# define DEFBITS 1024
+# define DEFBITS 2048
# undef PROG
# define PROG genrsa_main
diff --git a/crypto/openssl/apps/ocsp.c b/crypto/openssl/apps/ocsp.c
index 572f064..926083d 100644
--- a/crypto/openssl/apps/ocsp.c
+++ b/crypto/openssl/apps/ocsp.c
@@ -110,16 +110,17 @@ static int print_ocsp_summary(BIO *out, OCSP_BASICRESP *bs, OCSP_REQUEST *req,
static int make_ocsp_response(OCSP_RESPONSE **resp, OCSP_REQUEST *req,
CA_DB *db, X509 *ca, X509 *rcert,
- EVP_PKEY *rkey, STACK_OF(X509) *rother,
- unsigned long flags, int nmin, int ndays);
+ EVP_PKEY *rkey, const EVP_MD *md,
+ STACK_OF(X509) *rother, unsigned long flags,
+ int nmin, int ndays, int badsig);
static char **lookup_serial(CA_DB *db, ASN1_INTEGER *ser);
-static BIO *init_responder(char *port);
+static BIO *init_responder(const char *port);
static int do_responder(OCSP_REQUEST **preq, BIO **pcbio, BIO *acbio,
- char *port);
+ const char *port);
static int send_ocsp_response(BIO *cbio, OCSP_RESPONSE *resp);
-static OCSP_RESPONSE *query_responder(BIO *err, BIO *cbio, char *path,
- STACK_OF(CONF_VALUE) *headers,
+static OCSP_RESPONSE *query_responder(BIO *err, BIO *cbio, const char *path,
+ const STACK_OF(CONF_VALUE) *headers,
OCSP_REQUEST *req, int req_timeout);
# undef PROG
@@ -154,12 +155,14 @@ int MAIN(int argc, char **argv)
long nsec = MAX_VALIDITY_PERIOD, maxage = -1;
char *CAfile = NULL, *CApath = NULL;
X509_STORE *store = NULL;
+ X509_VERIFY_PARAM *vpm = NULL;
STACK_OF(X509) *sign_other = NULL, *verify_other = NULL, *rother = NULL;
char *sign_certfile = NULL, *verify_certfile = NULL, *rcertfile = NULL;
unsigned long sign_flags = 0, verify_flags = 0, rflags = 0;
int ret = 1;
int accept_count = -1;
int badarg = 0;
+ int badsig = 0;
int i;
int ignore_err = 0;
STACK_OF(OPENSSL_STRING) *reqnames = NULL;
@@ -170,7 +173,7 @@ int MAIN(int argc, char **argv)
char *rca_filename = NULL;
CA_DB *rdb = NULL;
int nmin = 0, ndays = -1;
- const EVP_MD *cert_id_md = NULL;
+ const EVP_MD *cert_id_md = NULL, *rsign_md = NULL;
if (bio_err == NULL)
bio_err = BIO_new_fp(stderr, BIO_NOCLOSE);
@@ -206,6 +209,7 @@ int MAIN(int argc, char **argv)
OPENSSL_free(tport);
if (tpath)
OPENSSL_free(tpath);
+ thost = tport = tpath = NULL;
if (args[1]) {
args++;
if (!OCSP_parse_url(*args, &host, &port, &path, &use_ssl)) {
@@ -264,6 +268,8 @@ int MAIN(int argc, char **argv)
verify_flags |= OCSP_TRUSTOTHER;
else if (!strcmp(*args, "-no_intern"))
verify_flags |= OCSP_NOINTERN;
+ else if (!strcmp(*args, "-badsig"))
+ badsig = 1;
else if (!strcmp(*args, "-text")) {
req_text = 1;
resp_text = 1;
@@ -320,6 +326,10 @@ int MAIN(int argc, char **argv)
CApath = *args;
} else
badarg = 1;
+ } else if (args_verify(&args, NULL, &badarg, bio_err, &vpm)) {
+ if (badarg)
+ goto end;
+ continue;
} else if (!strcmp(*args, "-validity_period")) {
if (args[1]) {
args++;
@@ -465,6 +475,14 @@ int MAIN(int argc, char **argv)
rcertfile = *args;
} else
badarg = 1;
+ } else if (!strcmp(*args, "-rmd")) {
+ if (args[1]) {
+ args++;
+ rsign_md = EVP_get_digestbyname(*args);
+ if (!rsign_md)
+ badarg = 1;
+ } else
+ badarg = 1;
} else if ((cert_id_md = EVP_get_digestbyname((*args) + 1)) == NULL) {
badarg = 1;
}
@@ -584,7 +602,10 @@ int MAIN(int argc, char **argv)
add_nonce = 0;
if (!req && reqin) {
- derbio = BIO_new_file(reqin, "rb");
+ if (!strcmp(reqin, "-"))
+ derbio = BIO_new_fp(stdin, BIO_NOCLOSE);
+ else
+ derbio = BIO_new_file(reqin, "rb");
if (!derbio) {
BIO_printf(bio_err, "Error Opening OCSP request file\n");
goto end;
@@ -681,7 +702,10 @@ int MAIN(int argc, char **argv)
OCSP_REQUEST_print(out, req, 0);
if (reqout) {
- derbio = BIO_new_file(reqout, "wb");
+ if (!strcmp(reqout, "-"))
+ derbio = BIO_new_fp(stdout, BIO_NOCLOSE);
+ else
+ derbio = BIO_new_file(reqout, "wb");
if (!derbio) {
BIO_printf(bio_err, "Error opening file %s\n", reqout);
goto end;
@@ -706,7 +730,7 @@ int MAIN(int argc, char **argv)
if (rdb) {
i = make_ocsp_response(&resp, req, rdb, rca_cert, rsigner, rkey,
- rother, rflags, nmin, ndays);
+ rsign_md, rother, rflags, nmin, ndays, badsig);
if (cbio)
send_ocsp_response(cbio, resp);
} else if (host) {
@@ -721,7 +745,10 @@ int MAIN(int argc, char **argv)
goto end;
# endif
} else if (respin) {
- derbio = BIO_new_file(respin, "rb");
+ if (!strcmp(respin, "-"))
+ derbio = BIO_new_fp(stdin, BIO_NOCLOSE);
+ else
+ derbio = BIO_new_file(respin, "rb");
if (!derbio) {
BIO_printf(bio_err, "Error Opening OCSP response file\n");
goto end;
@@ -741,7 +768,10 @@ int MAIN(int argc, char **argv)
done_resp:
if (respout) {
- derbio = BIO_new_file(respout, "wb");
+ if (!strcmp(respout, "-"))
+ derbio = BIO_new_fp(stdout, BIO_NOCLOSE);
+ else
+ derbio = BIO_new_file(respout, "wb");
if (!derbio) {
BIO_printf(bio_err, "Error opening file %s\n", respout);
goto end;
@@ -778,6 +808,10 @@ int MAIN(int argc, char **argv)
resp = NULL;
goto redo_accept;
}
+ ret = 0;
+ goto end;
+ } else if (ridx_filename) {
+ ret = 0;
goto end;
}
@@ -785,6 +819,8 @@ int MAIN(int argc, char **argv)
store = setup_verify(bio_err, CAfile, CApath);
if (!store)
goto end;
+ if (vpm)
+ X509_STORE_set1_param(store, vpm);
if (verify_certfile) {
verify_other = load_certs(bio_err, verify_certfile, FORMAT_PEM,
NULL, e, "validator certificate");
@@ -799,37 +835,38 @@ int MAIN(int argc, char **argv)
goto end;
}
+ ret = 0;
+
if (!noverify) {
if (req && ((i = OCSP_check_nonce(req, bs)) <= 0)) {
if (i == -1)
BIO_printf(bio_err, "WARNING: no nonce in response\n");
else {
BIO_printf(bio_err, "Nonce Verify error\n");
+ ret = 1;
goto end;
}
}
i = OCSP_basic_verify(bs, verify_other, store, verify_flags);
- if (i < 0)
- i = OCSP_basic_verify(bs, NULL, store, 0);
-
if (i <= 0) {
BIO_printf(bio_err, "Response Verify Failure\n");
ERR_print_errors(bio_err);
+ ret = 1;
} else
BIO_printf(bio_err, "Response verify OK\n");
}
if (!print_ocsp_summary(out, bs, req, reqnames, ids, nsec, maxage))
- goto end;
-
- ret = 0;
+ ret = 1;
end:
ERR_print_errors(bio_err);
X509_free(signer);
X509_STORE_free(store);
+ if (vpm)
+ X509_VERIFY_PARAM_free(vpm);
EVP_PKEY_free(key);
EVP_PKEY_free(rkey);
X509_free(issuer);
@@ -984,8 +1021,9 @@ static int print_ocsp_summary(BIO *out, OCSP_BASICRESP *bs, OCSP_REQUEST *req,
static int make_ocsp_response(OCSP_RESPONSE **resp, OCSP_REQUEST *req,
CA_DB *db, X509 *ca, X509 *rcert,
- EVP_PKEY *rkey, STACK_OF(X509) *rother,
- unsigned long flags, int nmin, int ndays)
+ EVP_PKEY *rkey, const EVP_MD *rmd,
+ STACK_OF(X509) *rother, unsigned long flags,
+ int nmin, int ndays, int badsig)
{
ASN1_TIME *thisupd = NULL, *nextupd = NULL;
OCSP_CERTID *cid, *ca_id = NULL;
@@ -1069,7 +1107,10 @@ static int make_ocsp_response(OCSP_RESPONSE **resp, OCSP_REQUEST *req,
OCSP_copy_nonce(bs, req);
- OCSP_basic_sign(bs, rcert, rkey, NULL, rother, flags);
+ OCSP_basic_sign(bs, rcert, rkey, rmd, rother, flags);
+
+ if (badsig)
+ bs->signature->data[bs->signature->length - 1] ^= 0x1;
*resp = OCSP_response_create(OCSP_RESPONSE_STATUS_SUCCESSFUL, bs);
@@ -1105,7 +1146,7 @@ static char **lookup_serial(CA_DB *db, ASN1_INTEGER *ser)
/* Quick and dirty OCSP server: read in and parse input request */
-static BIO *init_responder(char *port)
+static BIO *init_responder(const char *port)
{
BIO *acbio = NULL, *bufbio = NULL;
bufbio = BIO_new(BIO_f_buffer());
@@ -1137,7 +1178,7 @@ static BIO *init_responder(char *port)
}
static int do_responder(OCSP_REQUEST **preq, BIO **pcbio, BIO *acbio,
- char *port)
+ const char *port)
{
int have_post = 0, len;
OCSP_REQUEST *req = NULL;
@@ -1198,8 +1239,8 @@ static int send_ocsp_response(BIO *cbio, OCSP_RESPONSE *resp)
return 1;
}
-static OCSP_RESPONSE *query_responder(BIO *err, BIO *cbio, char *path,
- STACK_OF(CONF_VALUE) *headers,
+static OCSP_RESPONSE *query_responder(BIO *err, BIO *cbio, const char *path,
+ const STACK_OF(CONF_VALUE) *headers,
OCSP_REQUEST *req, int req_timeout)
{
int fd;
@@ -1286,8 +1327,9 @@ static OCSP_RESPONSE *query_responder(BIO *err, BIO *cbio, char *path,
}
OCSP_RESPONSE *process_responder(BIO *err, OCSP_REQUEST *req,
- char *host, char *path, char *port,
- int use_ssl, STACK_OF(CONF_VALUE) *headers,
+ const char *host, const char *path,
+ const char *port, int use_ssl,
+ const STACK_OF(CONF_VALUE) *headers,
int req_timeout)
{
BIO *cbio = NULL;
diff --git a/crypto/openssl/apps/openssl.cnf b/crypto/openssl/apps/openssl.cnf
index 865efdc..c3b8a65 100644
--- a/crypto/openssl/apps/openssl.cnf
+++ b/crypto/openssl/apps/openssl.cnf
@@ -104,7 +104,7 @@ emailAddress = optional
####################################################################
[ req ]
-default_bits = 1024
+default_bits = 2048
default_keyfile = privkey.pem
distinguished_name = req_distinguished_name
attributes = req_attributes
diff --git a/crypto/openssl/apps/pkcs8.c b/crypto/openssl/apps/pkcs8.c
index 5c7290e..5099e18 100644
--- a/crypto/openssl/apps/pkcs8.c
+++ b/crypto/openssl/apps/pkcs8.c
@@ -124,6 +124,16 @@ int MAIN(int argc, char **argv)
}
} else
badarg = 1;
+ } else if (!strcmp(*args, "-v2prf")) {
+ if (args[1]) {
+ args++;
+ pbe_nid = OBJ_txt2nid(*args);
+ if (!EVP_PBE_find(EVP_PBE_TYPE_PRF, pbe_nid, NULL, NULL, 0)) {
+ BIO_printf(bio_err, "Unknown PRF algorithm %s\n", *args);
+ badarg = 1;
+ }
+ } else
+ badarg = 1;
} else if (!strcmp(*args, "-inform")) {
if (args[1]) {
args++;
diff --git a/crypto/openssl/apps/s_apps.h b/crypto/openssl/apps/s_apps.h
index 2769b89..5b54bfd 100644
--- a/crypto/openssl/apps/s_apps.h
+++ b/crypto/openssl/apps/s_apps.h
@@ -152,15 +152,21 @@ typedef fd_mask fd_set;
#define PROTOCOL "tcp"
int do_server(int port, int type, int *ret,
- int (*cb) (char *hostname, int s, unsigned char *context),
- unsigned char *context);
+ int (*cb) (char *hostname, int s, int stype,
+ unsigned char *context), unsigned char *context,
+ int naccept);
#ifdef HEADER_X509_H
int MS_CALLBACK verify_callback(int ok, X509_STORE_CTX *ctx);
#endif
#ifdef HEADER_SSL_H
int set_cert_stuff(SSL_CTX *ctx, char *cert_file, char *key_file);
-int set_cert_key_stuff(SSL_CTX *ctx, X509 *cert, EVP_PKEY *key);
+int set_cert_key_stuff(SSL_CTX *ctx, X509 *cert, EVP_PKEY *key,
+ STACK_OF(X509) *chain, int build_chain);
+int ssl_print_sigalgs(BIO *out, SSL *s);
+int ssl_print_point_formats(BIO *out, SSL *s);
+int ssl_print_curves(BIO *out, SSL *s, int noshared);
#endif
+int ssl_print_tmp_key(BIO *out, SSL *s);
int init_client(int *sock, char *server, int port, int type);
int should_retry(int i);
int extract_port(char *str, short *port_ptr);
@@ -182,3 +188,24 @@ int MS_CALLBACK generate_cookie_callback(SSL *ssl, unsigned char *cookie,
unsigned int *cookie_len);
int MS_CALLBACK verify_cookie_callback(SSL *ssl, unsigned char *cookie,
unsigned int cookie_len);
+
+typedef struct ssl_excert_st SSL_EXCERT;
+
+void ssl_ctx_set_excert(SSL_CTX *ctx, SSL_EXCERT *exc);
+void ssl_excert_free(SSL_EXCERT *exc);
+int args_excert(char ***pargs, int *pargc,
+ int *badarg, BIO *err, SSL_EXCERT **pexc);
+int load_excert(SSL_EXCERT **pexc, BIO *err);
+void print_ssl_summary(BIO *bio, SSL *s);
+#ifdef HEADER_SSL_H
+int args_ssl(char ***pargs, int *pargc, SSL_CONF_CTX *cctx,
+ int *badarg, BIO *err, STACK_OF(OPENSSL_STRING) **pstr);
+int args_ssl_call(SSL_CTX *ctx, BIO *err, SSL_CONF_CTX *cctx,
+ STACK_OF(OPENSSL_STRING) *str, int no_ecdhe, int no_jpake);
+int ssl_ctx_add_crls(SSL_CTX *ctx, STACK_OF(X509_CRL) *crls,
+ int crl_download);
+int ssl_load_stores(SSL_CTX *ctx, const char *vfyCApath,
+ const char *vfyCAfile, const char *chCApath,
+ const char *chCAfile, STACK_OF(X509_CRL) *crls,
+ int crl_download);
+#endif
diff --git a/crypto/openssl/apps/s_cb.c b/crypto/openssl/apps/s_cb.c
index fabf9cf..dd3aa74 100644
--- a/crypto/openssl/apps/s_cb.c
+++ b/crypto/openssl/apps/s_cb.c
@@ -111,7 +111,7 @@
#include <stdio.h>
#include <stdlib.h>
-#include <string.h> /* for memcpy() */
+#include <string.h> /* for memcpy() and strcmp() */
#define USE_SOCKETS
#define NON_MAIN
#include "apps.h"
@@ -126,6 +126,7 @@
#define COOKIE_SECRET_LENGTH 16
int verify_depth = 0;
+int verify_quiet = 0;
int verify_error = X509_V_OK;
int verify_return_error = 0;
unsigned char cookie_secret[COOKIE_SECRET_LENGTH];
@@ -140,13 +141,16 @@ int MS_CALLBACK verify_callback(int ok, X509_STORE_CTX *ctx)
err = X509_STORE_CTX_get_error(ctx);
depth = X509_STORE_CTX_get_error_depth(ctx);
- BIO_printf(bio_err, "depth=%d ", depth);
- if (err_cert) {
- X509_NAME_print_ex(bio_err, X509_get_subject_name(err_cert),
- 0, XN_FLAG_ONELINE);
- BIO_puts(bio_err, "\n");
- } else
- BIO_puts(bio_err, "<no cert>\n");
+ if (!verify_quiet || !ok) {
+ BIO_printf(bio_err, "depth=%d ", depth);
+ if (err_cert) {
+ X509_NAME_print_ex(bio_err,
+ X509_get_subject_name(err_cert),
+ 0, XN_FLAG_ONELINE);
+ BIO_puts(bio_err, "\n");
+ } else
+ BIO_puts(bio_err, "<no cert>\n");
+ }
if (!ok) {
BIO_printf(bio_err, "verify error:num=%d:%s\n", err,
X509_verify_cert_error_string(err));
@@ -179,13 +183,14 @@ int MS_CALLBACK verify_callback(int ok, X509_STORE_CTX *ctx)
BIO_printf(bio_err, "\n");
break;
case X509_V_ERR_NO_EXPLICIT_POLICY:
- policies_print(bio_err, ctx);
+ if (!verify_quiet)
+ policies_print(bio_err, ctx);
break;
}
- if (err == X509_V_OK && ok == 2)
+ if (err == X509_V_OK && ok == 2 && !verify_quiet)
policies_print(bio_err, ctx);
-
- BIO_printf(bio_err, "verify return:%d\n", ok);
+ if (ok && !verify_quiet)
+ BIO_printf(bio_err, "verify return:%d\n", ok);
return (ok);
}
@@ -246,8 +251,10 @@ int set_cert_stuff(SSL_CTX *ctx, char *cert_file, char *key_file)
return (1);
}
-int set_cert_key_stuff(SSL_CTX *ctx, X509 *cert, EVP_PKEY *key)
+int set_cert_key_stuff(SSL_CTX *ctx, X509 *cert, EVP_PKEY *key,
+ STACK_OF(X509) *chain, int build_chain)
{
+ int chflags = chain ? SSL_BUILD_CHAIN_FLAG_CHECK : 0;
if (cert == NULL)
return 1;
if (SSL_CTX_use_certificate(ctx, cert) <= 0) {
@@ -255,6 +262,7 @@ int set_cert_key_stuff(SSL_CTX *ctx, X509 *cert, EVP_PKEY *key)
ERR_print_errors(bio_err);
return 0;
}
+
if (SSL_CTX_use_PrivateKey(ctx, key) <= 0) {
BIO_printf(bio_err, "error setting private key\n");
ERR_print_errors(bio_err);
@@ -269,6 +277,263 @@ int set_cert_key_stuff(SSL_CTX *ctx, X509 *cert, EVP_PKEY *key)
"Private key does not match the certificate public key\n");
return 0;
}
+ if (chain && !SSL_CTX_set1_chain(ctx, chain)) {
+ BIO_printf(bio_err, "error setting certificate chain\n");
+ ERR_print_errors(bio_err);
+ return 0;
+ }
+ if (build_chain && !SSL_CTX_build_cert_chain(ctx, chflags)) {
+ BIO_printf(bio_err, "error building certificate chain\n");
+ ERR_print_errors(bio_err);
+ return 0;
+ }
+ return 1;
+}
+
+static void ssl_print_client_cert_types(BIO *bio, SSL *s)
+{
+ const unsigned char *p;
+ int i;
+ int cert_type_num = SSL_get0_certificate_types(s, &p);
+ if (!cert_type_num)
+ return;
+ BIO_puts(bio, "Client Certificate Types: ");
+ for (i = 0; i < cert_type_num; i++) {
+ unsigned char cert_type = p[i];
+ char *cname;
+ switch (cert_type) {
+ case TLS_CT_RSA_SIGN:
+ cname = "RSA sign";
+ break;
+
+ case TLS_CT_DSS_SIGN:
+ cname = "DSA sign";
+ break;
+
+ case TLS_CT_RSA_FIXED_DH:
+ cname = "RSA fixed DH";
+ break;
+
+ case TLS_CT_DSS_FIXED_DH:
+ cname = "DSS fixed DH";
+ break;
+
+ case TLS_CT_ECDSA_SIGN:
+ cname = "ECDSA sign";
+ break;
+
+ case TLS_CT_RSA_FIXED_ECDH:
+ cname = "RSA fixed ECDH";
+ break;
+
+ case TLS_CT_ECDSA_FIXED_ECDH:
+ cname = "ECDSA fixed ECDH";
+ break;
+
+ case TLS_CT_GOST94_SIGN:
+ cname = "GOST94 Sign";
+ break;
+
+ case TLS_CT_GOST01_SIGN:
+ cname = "GOST01 Sign";
+ break;
+
+ default:
+ cname = NULL;
+ }
+
+ if (i)
+ BIO_puts(bio, ", ");
+
+ if (cname)
+ BIO_puts(bio, cname);
+ else
+ BIO_printf(bio, "UNKNOWN (%d),", cert_type);
+ }
+ BIO_puts(bio, "\n");
+}
+
+static int do_print_sigalgs(BIO *out, SSL *s, int shared)
+{
+ int i, nsig, client;
+ client = SSL_is_server(s) ? 0 : 1;
+ if (shared)
+ nsig = SSL_get_shared_sigalgs(s, -1, NULL, NULL, NULL, NULL, NULL);
+ else
+ nsig = SSL_get_sigalgs(s, -1, NULL, NULL, NULL, NULL, NULL);
+ if (nsig == 0)
+ return 1;
+
+ if (shared)
+ BIO_puts(out, "Shared ");
+
+ if (client)
+ BIO_puts(out, "Requested ");
+ BIO_puts(out, "Signature Algorithms: ");
+ for (i = 0; i < nsig; i++) {
+ int hash_nid, sign_nid;
+ unsigned char rhash, rsign;
+ const char *sstr = NULL;
+ if (shared)
+ SSL_get_shared_sigalgs(s, i, &sign_nid, &hash_nid, NULL,
+ &rsign, &rhash);
+ else
+ SSL_get_sigalgs(s, i, &sign_nid, &hash_nid, NULL, &rsign, &rhash);
+ if (i)
+ BIO_puts(out, ":");
+ if (sign_nid == EVP_PKEY_RSA)
+ sstr = "RSA";
+ else if (sign_nid == EVP_PKEY_DSA)
+ sstr = "DSA";
+ else if (sign_nid == EVP_PKEY_EC)
+ sstr = "ECDSA";
+ if (sstr)
+ BIO_printf(out, "%s+", sstr);
+ else
+ BIO_printf(out, "0x%02X+", (int)rsign);
+ if (hash_nid != NID_undef)
+ BIO_printf(out, "%s", OBJ_nid2sn(hash_nid));
+ else
+ BIO_printf(out, "0x%02X", (int)rhash);
+ }
+ BIO_puts(out, "\n");
+ return 1;
+}
+
+int ssl_print_sigalgs(BIO *out, SSL *s)
+{
+ int mdnid;
+ if (!SSL_is_server(s))
+ ssl_print_client_cert_types(out, s);
+ do_print_sigalgs(out, s, 0);
+ do_print_sigalgs(out, s, 1);
+ if (SSL_get_peer_signature_nid(s, &mdnid))
+ BIO_printf(out, "Peer signing digest: %s\n", OBJ_nid2sn(mdnid));
+ return 1;
+}
+
+#ifndef OPENSSL_NO_EC
+int ssl_print_point_formats(BIO *out, SSL *s)
+{
+ int i, nformats;
+ const char *pformats;
+ nformats = SSL_get0_ec_point_formats(s, &pformats);
+ if (nformats <= 0)
+ return 1;
+ BIO_puts(out, "Supported Elliptic Curve Point Formats: ");
+ for (i = 0; i < nformats; i++, pformats++) {
+ if (i)
+ BIO_puts(out, ":");
+ switch (*pformats) {
+ case TLSEXT_ECPOINTFORMAT_uncompressed:
+ BIO_puts(out, "uncompressed");
+ break;
+
+ case TLSEXT_ECPOINTFORMAT_ansiX962_compressed_prime:
+ BIO_puts(out, "ansiX962_compressed_prime");
+ break;
+
+ case TLSEXT_ECPOINTFORMAT_ansiX962_compressed_char2:
+ BIO_puts(out, "ansiX962_compressed_char2");
+ break;
+
+ default:
+ BIO_printf(out, "unknown(%d)", (int)*pformats);
+ break;
+
+ }
+ }
+ if (nformats <= 0)
+ BIO_puts(out, "NONE");
+ BIO_puts(out, "\n");
+ return 1;
+}
+
+int ssl_print_curves(BIO *out, SSL *s, int noshared)
+{
+ int i, ncurves, *curves, nid;
+ const char *cname;
+ ncurves = SSL_get1_curves(s, NULL);
+ if (ncurves <= 0)
+ return 1;
+ curves = OPENSSL_malloc(ncurves * sizeof(int));
+ if (!curves) {
+ BIO_puts(out, "Malloc error getting supported curves\n");
+ return 0;
+ }
+ SSL_get1_curves(s, curves);
+
+
+ BIO_puts(out, "Supported Elliptic Curves: ");
+ for (i = 0; i < ncurves; i++) {
+ if (i)
+ BIO_puts(out, ":");
+ nid = curves[i];
+ /* If unrecognised print out hex version */
+ if (nid & TLSEXT_nid_unknown)
+ BIO_printf(out, "0x%04X", nid & 0xFFFF);
+ else {
+ /* Use NIST name for curve if it exists */
+ cname = EC_curve_nid2nist(nid);
+ if (!cname)
+ cname = OBJ_nid2sn(nid);
+ BIO_printf(out, "%s", cname);
+ }
+ }
+ if (ncurves == 0)
+ BIO_puts(out, "NONE");
+ OPENSSL_free(curves);
+ if (noshared) {
+ BIO_puts(out, "\n");
+ return 1;
+ }
+ BIO_puts(out, "\nShared Elliptic curves: ");
+ ncurves = SSL_get_shared_curve(s, -1);
+ for (i = 0; i < ncurves; i++) {
+ if (i)
+ BIO_puts(out, ":");
+ nid = SSL_get_shared_curve(s, i);
+ cname = EC_curve_nid2nist(nid);
+ if (!cname)
+ cname = OBJ_nid2sn(nid);
+ BIO_printf(out, "%s", cname);
+ }
+ if (ncurves == 0)
+ BIO_puts(out, "NONE");
+ BIO_puts(out, "\n");
+ return 1;
+}
+#endif
+int ssl_print_tmp_key(BIO *out, SSL *s)
+{
+ EVP_PKEY *key;
+ if (!SSL_get_server_tmp_key(s, &key))
+ return 1;
+ BIO_puts(out, "Server Temp Key: ");
+ switch (EVP_PKEY_id(key)) {
+ case EVP_PKEY_RSA:
+ BIO_printf(out, "RSA, %d bits\n", EVP_PKEY_bits(key));
+ break;
+
+ case EVP_PKEY_DH:
+ BIO_printf(out, "DH, %d bits\n", EVP_PKEY_bits(key));
+ break;
+#ifndef OPENSSL_NO_ECDH
+ case EVP_PKEY_EC:
+ {
+ EC_KEY *ec = EVP_PKEY_get1_EC_KEY(key);
+ int nid;
+ const char *cname;
+ nid = EC_GROUP_get_curve_name(EC_KEY_get0_group(ec));
+ EC_KEY_free(ec);
+ cname = EC_curve_nid2nist(nid);
+ if (!cname)
+ cname = OBJ_nid2sn(nid);
+ BIO_printf(out, "ECDH, %s, %d bits\n", cname, EVP_PKEY_bits(key));
+ }
+#endif
+ }
+ EVP_PKEY_free(key);
return 1;
}
@@ -884,3 +1149,504 @@ int MS_CALLBACK verify_cookie_callback(SSL *ssl, unsigned char *cookie,
return 0;
}
+
+/*
+ * Example of extended certificate handling. Where the standard support of
+ * one certificate per algorithm is not sufficient an application can decide
+ * which certificate(s) to use at runtime based on whatever criteria it deems
+ * appropriate.
+ */
+
+/* Linked list of certificates, keys and chains */
+struct ssl_excert_st {
+ int certform;
+ const char *certfile;
+ int keyform;
+ const char *keyfile;
+ const char *chainfile;
+ X509 *cert;
+ EVP_PKEY *key;
+ STACK_OF(X509) *chain;
+ int build_chain;
+ struct ssl_excert_st *next, *prev;
+};
+
+struct chain_flags {
+ int flag;
+ const char *name;
+};
+
+struct chain_flags chain_flags_list[] = {
+ {CERT_PKEY_VALID, "Overall Validity"},
+ {CERT_PKEY_SIGN, "Sign with EE key"},
+ {CERT_PKEY_EE_SIGNATURE, "EE signature"},
+ {CERT_PKEY_CA_SIGNATURE, "CA signature"},
+ {CERT_PKEY_EE_PARAM, "EE key parameters"},
+ {CERT_PKEY_CA_PARAM, "CA key parameters"},
+ {CERT_PKEY_EXPLICIT_SIGN, "Explicity sign with EE key"},
+ {CERT_PKEY_ISSUER_NAME, "Issuer Name"},
+ {CERT_PKEY_CERT_TYPE, "Certificate Type"},
+ {0, NULL}
+};
+
+static void print_chain_flags(BIO *out, SSL *s, int flags)
+{
+ struct chain_flags *ctmp = chain_flags_list;
+ while (ctmp->name) {
+ BIO_printf(out, "\t%s: %s\n", ctmp->name,
+ flags & ctmp->flag ? "OK" : "NOT OK");
+ ctmp++;
+ }
+ BIO_printf(out, "\tSuite B: ");
+ if (SSL_set_cert_flags(s, 0) & SSL_CERT_FLAG_SUITEB_128_LOS)
+ BIO_puts(out, flags & CERT_PKEY_SUITEB ? "OK\n" : "NOT OK\n");
+ else
+ BIO_printf(out, "not tested\n");
+}
+
+/*
+ * Very basic selection callback: just use any certificate chain reported as
+ * valid. More sophisticated could prioritise according to local policy.
+ */
+static int set_cert_cb(SSL *ssl, void *arg)
+{
+ int i, rv;
+ SSL_EXCERT *exc = arg;
+#ifdef CERT_CB_TEST_RETRY
+ static int retry_cnt;
+ if (retry_cnt < 5) {
+ retry_cnt++;
+ fprintf(stderr, "Certificate callback retry test: count %d\n",
+ retry_cnt);
+ return -1;
+ }
+#endif
+ SSL_certs_clear(ssl);
+
+ if (!exc)
+ return 1;
+
+ /*
+ * Go to end of list and traverse backwards since we prepend newer
+ * entries this retains the original order.
+ */
+ while (exc->next)
+ exc = exc->next;
+
+ i = 0;
+
+ while (exc) {
+ i++;
+ rv = SSL_check_chain(ssl, exc->cert, exc->key, exc->chain);
+ BIO_printf(bio_err, "Checking cert chain %d:\nSubject: ", i);
+ X509_NAME_print_ex(bio_err, X509_get_subject_name(exc->cert), 0,
+ XN_FLAG_ONELINE);
+ BIO_puts(bio_err, "\n");
+
+ print_chain_flags(bio_err, ssl, rv);
+ if (rv & CERT_PKEY_VALID) {
+ SSL_use_certificate(ssl, exc->cert);
+ SSL_use_PrivateKey(ssl, exc->key);
+ /*
+ * NB: we wouldn't normally do this as it is not efficient
+ * building chains on each connection better to cache the chain
+ * in advance.
+ */
+ if (exc->build_chain) {
+ if (!SSL_build_cert_chain(ssl, 0))
+ return 0;
+ } else if (exc->chain)
+ SSL_set1_chain(ssl, exc->chain);
+ }
+ exc = exc->prev;
+ }
+ return 1;
+}
+
+void ssl_ctx_set_excert(SSL_CTX *ctx, SSL_EXCERT *exc)
+{
+ SSL_CTX_set_cert_cb(ctx, set_cert_cb, exc);
+}
+
+static int ssl_excert_prepend(SSL_EXCERT **pexc)
+{
+ SSL_EXCERT *exc;
+ exc = OPENSSL_malloc(sizeof(SSL_EXCERT));
+ if (!exc)
+ return 0;
+ exc->certfile = NULL;
+ exc->keyfile = NULL;
+ exc->chainfile = NULL;
+ exc->cert = NULL;
+ exc->key = NULL;
+ exc->chain = NULL;
+ exc->prev = NULL;
+ exc->build_chain = 0;
+
+ exc->next = *pexc;
+ *pexc = exc;
+
+ if (exc->next) {
+ exc->certform = exc->next->certform;
+ exc->keyform = exc->next->keyform;
+ exc->next->prev = exc;
+ } else {
+ exc->certform = FORMAT_PEM;
+ exc->keyform = FORMAT_PEM;
+ }
+ return 1;
+
+}
+
+void ssl_excert_free(SSL_EXCERT *exc)
+{
+ SSL_EXCERT *curr;
+ while (exc) {
+ if (exc->cert)
+ X509_free(exc->cert);
+ if (exc->key)
+ EVP_PKEY_free(exc->key);
+ if (exc->chain)
+ sk_X509_pop_free(exc->chain, X509_free);
+ curr = exc;
+ exc = exc->next;
+ OPENSSL_free(curr);
+ }
+}
+
+int load_excert(SSL_EXCERT **pexc, BIO *err)
+{
+ SSL_EXCERT *exc = *pexc;
+ if (!exc)
+ return 1;
+ /* If nothing in list, free and set to NULL */
+ if (!exc->certfile && !exc->next) {
+ ssl_excert_free(exc);
+ *pexc = NULL;
+ return 1;
+ }
+ for (; exc; exc = exc->next) {
+ if (!exc->certfile) {
+ BIO_printf(err, "Missing filename\n");
+ return 0;
+ }
+ exc->cert = load_cert(err, exc->certfile, exc->certform,
+ NULL, NULL, "Server Certificate");
+ if (!exc->cert)
+ return 0;
+ if (exc->keyfile) {
+ exc->key = load_key(err, exc->keyfile, exc->keyform,
+ 0, NULL, NULL, "Server Key");
+ } else {
+ exc->key = load_key(err, exc->certfile, exc->certform,
+ 0, NULL, NULL, "Server Key");
+ }
+ if (!exc->key)
+ return 0;
+ if (exc->chainfile) {
+ exc->chain = load_certs(err,
+ exc->chainfile, FORMAT_PEM,
+ NULL, NULL, "Server Chain");
+ if (!exc->chain)
+ return 0;
+ }
+ }
+ return 1;
+}
+
+int args_excert(char ***pargs, int *pargc,
+ int *badarg, BIO *err, SSL_EXCERT **pexc)
+{
+ char *arg = **pargs, *argn = (*pargs)[1];
+ SSL_EXCERT *exc = *pexc;
+ int narg = 2;
+ if (!exc) {
+ if (ssl_excert_prepend(&exc))
+ *pexc = exc;
+ else {
+ BIO_printf(err, "Error initialising xcert\n");
+ *badarg = 1;
+ goto err;
+ }
+ }
+ if (strcmp(arg, "-xcert") == 0) {
+ if (!argn) {
+ *badarg = 1;
+ return 1;
+ }
+ if (exc->certfile && !ssl_excert_prepend(&exc)) {
+ BIO_printf(err, "Error adding xcert\n");
+ *badarg = 1;
+ goto err;
+ }
+ exc->certfile = argn;
+ } else if (strcmp(arg, "-xkey") == 0) {
+ if (!argn) {
+ *badarg = 1;
+ return 1;
+ }
+ if (exc->keyfile) {
+ BIO_printf(err, "Key already specified\n");
+ *badarg = 1;
+ return 1;
+ }
+ exc->keyfile = argn;
+ } else if (strcmp(arg, "-xchain") == 0) {
+ if (!argn) {
+ *badarg = 1;
+ return 1;
+ }
+ if (exc->chainfile) {
+ BIO_printf(err, "Chain already specified\n");
+ *badarg = 1;
+ return 1;
+ }
+ exc->chainfile = argn;
+ } else if (strcmp(arg, "-xchain_build") == 0) {
+ narg = 1;
+ exc->build_chain = 1;
+ } else if (strcmp(arg, "-xcertform") == 0) {
+ if (!argn) {
+ *badarg = 1;
+ goto err;
+ }
+ exc->certform = str2fmt(argn);
+ } else if (strcmp(arg, "-xkeyform") == 0) {
+ if (!argn) {
+ *badarg = 1;
+ goto err;
+ }
+ exc->keyform = str2fmt(argn);
+ } else
+ return 0;
+
+ (*pargs) += narg;
+
+ if (pargc)
+ *pargc -= narg;
+
+ *pexc = exc;
+
+ return 1;
+
+ err:
+ ERR_print_errors(err);
+ ssl_excert_free(exc);
+ *pexc = NULL;
+ return 1;
+}
+
+static void print_raw_cipherlist(BIO *bio, SSL *s)
+{
+ const unsigned char *rlist;
+ static const unsigned char scsv_id[] = { 0, 0, 0xFF };
+ size_t i, rlistlen, num;
+ if (!SSL_is_server(s))
+ return;
+ num = SSL_get0_raw_cipherlist(s, NULL);
+ rlistlen = SSL_get0_raw_cipherlist(s, &rlist);
+ BIO_puts(bio, "Client cipher list: ");
+ for (i = 0; i < rlistlen; i += num, rlist += num) {
+ const SSL_CIPHER *c = SSL_CIPHER_find(s, rlist);
+ if (i)
+ BIO_puts(bio, ":");
+ if (c)
+ BIO_puts(bio, SSL_CIPHER_get_name(c));
+ else if (!memcmp(rlist, scsv_id - num + 3, num))
+ BIO_puts(bio, "SCSV");
+ else {
+ size_t j;
+ BIO_puts(bio, "0x");
+ for (j = 0; j < num; j++)
+ BIO_printf(bio, "%02X", rlist[j]);
+ }
+ }
+ BIO_puts(bio, "\n");
+}
+
+void print_ssl_summary(BIO *bio, SSL *s)
+{
+ const SSL_CIPHER *c;
+ X509 *peer;
+ /*
+ * const char *pnam = SSL_is_server(s) ? "client" : "server";
+ */
+ BIO_printf(bio, "Protocol version: %s\n", SSL_get_version(s));
+ print_raw_cipherlist(bio, s);
+ c = SSL_get_current_cipher(s);
+ BIO_printf(bio, "Ciphersuite: %s\n", SSL_CIPHER_get_name(c));
+ do_print_sigalgs(bio, s, 0);
+ peer = SSL_get_peer_certificate(s);
+ if (peer) {
+ int nid;
+ BIO_puts(bio, "Peer certificate: ");
+ X509_NAME_print_ex(bio, X509_get_subject_name(peer),
+ 0, XN_FLAG_ONELINE);
+ BIO_puts(bio, "\n");
+ if (SSL_get_peer_signature_nid(s, &nid))
+ BIO_printf(bio, "Hash used: %s\n", OBJ_nid2sn(nid));
+ } else
+ BIO_puts(bio, "No peer certificate\n");
+ if (peer)
+ X509_free(peer);
+#ifndef OPENSSL_NO_EC
+ ssl_print_point_formats(bio, s);
+ if (SSL_is_server(s))
+ ssl_print_curves(bio, s, 1);
+ else
+ ssl_print_tmp_key(bio, s);
+#else
+ if (!SSL_is_server(s))
+ ssl_print_tmp_key(bio, s);
+#endif
+}
+
+int args_ssl(char ***pargs, int *pargc, SSL_CONF_CTX *cctx,
+ int *badarg, BIO *err, STACK_OF(OPENSSL_STRING) **pstr)
+{
+ char *arg = **pargs, *argn = (*pargs)[1];
+ int rv;
+
+ /* Attempt to run SSL configuration command */
+ rv = SSL_CONF_cmd_argv(cctx, pargc, pargs);
+ /* If parameter not recognised just return */
+ if (rv == 0)
+ return 0;
+ /* see if missing argument error */
+ if (rv == -3) {
+ BIO_printf(err, "%s needs an argument\n", arg);
+ *badarg = 1;
+ goto end;
+ }
+ /* Check for some other error */
+ if (rv < 0) {
+ BIO_printf(err, "Error with command: \"%s %s\"\n",
+ arg, argn ? argn : "");
+ *badarg = 1;
+ goto end;
+ }
+ /* Store command and argument */
+ /* If only one argument processed store value as NULL */
+ if (rv == 1)
+ argn = NULL;
+ if (!*pstr)
+ *pstr = sk_OPENSSL_STRING_new_null();
+ if (!*pstr || !sk_OPENSSL_STRING_push(*pstr, arg) ||
+ !sk_OPENSSL_STRING_push(*pstr, argn)) {
+ BIO_puts(err, "Memory allocation failure\n");
+ goto end;
+ }
+
+ end:
+ if (*badarg)
+ ERR_print_errors(err);
+
+ return 1;
+}
+
+int args_ssl_call(SSL_CTX *ctx, BIO *err, SSL_CONF_CTX *cctx,
+ STACK_OF(OPENSSL_STRING) *str, int no_ecdhe, int no_jpake)
+{
+ int i;
+ SSL_CONF_CTX_set_ssl_ctx(cctx, ctx);
+ for (i = 0; i < sk_OPENSSL_STRING_num(str); i += 2) {
+ const char *param = sk_OPENSSL_STRING_value(str, i);
+ const char *value = sk_OPENSSL_STRING_value(str, i + 1);
+ /*
+ * If no_ecdhe or named curve already specified don't need a default.
+ */
+ if (!no_ecdhe && !strcmp(param, "-named_curve"))
+ no_ecdhe = 1;
+#ifndef OPENSSL_NO_JPAKE
+ if (!no_jpake && !strcmp(param, "-cipher")) {
+ BIO_puts(err, "JPAKE sets cipher to PSK\n");
+ return 0;
+ }
+#endif
+ if (SSL_CONF_cmd(cctx, param, value) <= 0) {
+ BIO_printf(err, "Error with command: \"%s %s\"\n",
+ param, value ? value : "");
+ ERR_print_errors(err);
+ return 0;
+ }
+ }
+ /*
+ * This is a special case to keep existing s_server functionality: if we
+ * don't have any curve specified *and* we haven't disabled ECDHE then
+ * use P-256.
+ */
+ if (!no_ecdhe) {
+ if (SSL_CONF_cmd(cctx, "-named_curve", "P-256") <= 0) {
+ BIO_puts(err, "Error setting EC curve\n");
+ ERR_print_errors(err);
+ return 0;
+ }
+ }
+#ifndef OPENSSL_NO_JPAKE
+ if (!no_jpake) {
+ if (SSL_CONF_cmd(cctx, "-cipher", "PSK") <= 0) {
+ BIO_puts(err, "Error setting cipher to PSK\n");
+ ERR_print_errors(err);
+ return 0;
+ }
+ }
+#endif
+ if (!SSL_CONF_CTX_finish(cctx)) {
+ BIO_puts(err, "Error finishing context\n");
+ ERR_print_errors(err);
+ return 0;
+ }
+ return 1;
+}
+
+static int add_crls_store(X509_STORE *st, STACK_OF(X509_CRL) *crls)
+{
+ X509_CRL *crl;
+ int i;
+ for (i = 0; i < sk_X509_CRL_num(crls); i++) {
+ crl = sk_X509_CRL_value(crls, i);
+ X509_STORE_add_crl(st, crl);
+ }
+ return 1;
+}
+
+int ssl_ctx_add_crls(SSL_CTX *ctx, STACK_OF(X509_CRL) *crls, int crl_download)
+{
+ X509_STORE *st;
+ st = SSL_CTX_get_cert_store(ctx);
+ add_crls_store(st, crls);
+ if (crl_download)
+ store_setup_crl_download(st);
+ return 1;
+}
+
+int ssl_load_stores(SSL_CTX *ctx,
+ const char *vfyCApath, const char *vfyCAfile,
+ const char *chCApath, const char *chCAfile,
+ STACK_OF(X509_CRL) *crls, int crl_download)
+{
+ X509_STORE *vfy = NULL, *ch = NULL;
+ int rv = 0;
+ if (vfyCApath || vfyCAfile) {
+ vfy = X509_STORE_new();
+ if (!X509_STORE_load_locations(vfy, vfyCAfile, vfyCApath))
+ goto err;
+ add_crls_store(vfy, crls);
+ SSL_CTX_set1_verify_cert_store(ctx, vfy);
+ if (crl_download)
+ store_setup_crl_download(vfy);
+ }
+ if (chCApath || chCAfile) {
+ ch = X509_STORE_new();
+ if (!X509_STORE_load_locations(ch, chCAfile, chCApath))
+ goto err;
+ SSL_CTX_set1_chain_cert_store(ctx, ch);
+ }
+ rv = 1;
+ err:
+ if (vfy)
+ X509_STORE_free(vfy);
+ if (ch)
+ X509_STORE_free(ch);
+ return rv;
+}
diff --git a/crypto/openssl/apps/s_client.c b/crypto/openssl/apps/s_client.c
index 28737b6..e55f2c5 100644
--- a/crypto/openssl/apps/s_client.c
+++ b/crypto/openssl/apps/s_client.c
@@ -202,6 +202,7 @@ typedef unsigned int u_int;
extern int verify_depth;
extern int verify_error;
extern int verify_return_error;
+extern int verify_quiet;
#ifdef FIONBIO
static int c_nbio = 0;
@@ -224,8 +225,10 @@ static void print_stuff(BIO *berr, SSL *con, int full);
static int ocsp_resp_cb(SSL *s, void *arg);
#endif
static BIO *bio_c_out = NULL;
+static BIO *bio_c_msg = NULL;
static int c_quiet = 0;
static int c_ign_eof = 0;
+static int c_brief = 0;
#ifndef OPENSSL_NO_PSK
/* Default PSK identity and key */
@@ -304,6 +307,12 @@ static void sc_usage(void)
BIO_printf(bio_err,
" -connect host:port - who to connect to (default is %s:%s)\n",
SSL_HOST_NAME, PORT_STR);
+ BIO_printf(bio_err,
+ " -verify_host host - check peer certificate matches \"host\"\n");
+ BIO_printf(bio_err,
+ " -verify_email email - check peer certificate matches \"email\"\n");
+ BIO_printf(bio_err,
+ " -verify_ip ipaddr - check peer certificate matches \"ipaddr\"\n");
BIO_printf(bio_err,
" -verify arg - turn on peer certificate verification\n");
@@ -413,12 +422,16 @@ static void sc_usage(void)
" -status - request certificate status from server\n");
BIO_printf(bio_err,
" -no_ticket - disable use of RFC4507bis session tickets\n");
-# ifndef OPENSSL_NO_NEXTPROTONEG
+ BIO_printf(bio_err,
+ " -serverinfo types - send empty ClientHello extensions (comma-separated numbers)\n");
+#endif
+#ifndef OPENSSL_NO_NEXTPROTONEG
BIO_printf(bio_err,
" -nextprotoneg arg - enable NPN extension, considering named protocols supported (comma-separated list)\n");
-# endif
#endif
BIO_printf(bio_err,
+ " -alpn arg - enable ALPN extension, considering named protocols supported (comma-separated list)\n");
+ BIO_printf(bio_err,
" -legacy_renegotiation - enable use of legacy renegotiation (dangerous)\n");
#ifndef OPENSSL_NO_SRTP
BIO_printf(bio_err,
@@ -605,6 +618,27 @@ static int next_proto_cb(SSL *s, unsigned char **out, unsigned char *outlen,
return SSL_TLSEXT_ERR_OK;
}
# endif /* ndef OPENSSL_NO_NEXTPROTONEG */
+
+static int serverinfo_cli_parse_cb(SSL *s, unsigned int ext_type,
+ const unsigned char *in, size_t inlen,
+ int *al, void *arg)
+{
+ char pem_name[100];
+ unsigned char ext_buf[4 + 65536];
+
+ /* Reconstruct the type/len fields prior to extension data */
+ ext_buf[0] = ext_type >> 8;
+ ext_buf[1] = ext_type & 0xFF;
+ ext_buf[2] = inlen >> 8;
+ ext_buf[3] = inlen & 0xFF;
+ memcpy(ext_buf + 4, in, inlen);
+
+ BIO_snprintf(pem_name, sizeof(pem_name), "SERVERINFO FOR EXTENSION %d",
+ ext_type);
+ PEM_write_bio(bio_c_out, pem_name, "", ext_buf, 4 + inlen);
+ return 1;
+}
+
#endif
enum {
@@ -620,7 +654,7 @@ int MAIN(int, char **);
int MAIN(int argc, char **argv)
{
- unsigned int off = 0, clr = 0;
+ int build_chain = 0;
SSL *con = NULL;
#ifndef OPENSSL_NO_KRB5
KSSL_CTX *kctx;
@@ -633,13 +667,16 @@ int MAIN(int argc, char **argv)
short port = PORT;
int full_log = 1;
char *host = SSL_HOST_NAME;
- char *cert_file = NULL, *key_file = NULL;
+ char *cert_file = NULL, *key_file = NULL, *chain_file = NULL;
int cert_format = FORMAT_PEM, key_format = FORMAT_PEM;
char *passarg = NULL, *pass = NULL;
X509 *cert = NULL;
EVP_PKEY *key = NULL;
- char *CApath = NULL, *CAfile = NULL, *cipher = NULL;
- int reconnect = 0, badop = 0, verify = SSL_VERIFY_NONE, bugs = 0;
+ STACK_OF(X509) *chain = NULL;
+ char *CApath = NULL, *CAfile = NULL;
+ char *chCApath = NULL, *chCAfile = NULL;
+ char *vfyCApath = NULL, *vfyCAfile = NULL;
+ int reconnect = 0, badop = 0, verify = SSL_VERIFY_NONE;
int crlf = 0;
int write_tty, read_tty, write_ssl, read_ssl, tty_on, ssl_pending;
SSL_CTX *ctx = NULL;
@@ -672,6 +709,10 @@ int MAIN(int argc, char **argv)
# ifndef OPENSSL_NO_NEXTPROTONEG
const char *next_proto_neg_in = NULL;
# endif
+ const char *alpn_in = NULL;
+# define MAX_SI_TYPES 100
+ unsigned short serverinfo_types[MAX_SI_TYPES];
+ int serverinfo_types_count = 0;
#endif
char *sess_in = NULL;
char *sess_out = NULL;
@@ -681,13 +722,25 @@ int MAIN(int argc, char **argv)
int enable_timeouts = 0;
long socket_mtu = 0;
#ifndef OPENSSL_NO_JPAKE
- char *jpake_secret = NULL;
+ static char *jpake_secret = NULL;
+# define no_jpake !jpake_secret
+#else
+# define no_jpake 1
#endif
#ifndef OPENSSL_NO_SRP
char *srppass = NULL;
int srp_lateuser = 0;
SRP_ARG srp_arg = { NULL, NULL, 0, 0, 0, 1024 };
#endif
+ SSL_EXCERT *exc = NULL;
+
+ SSL_CONF_CTX *cctx = NULL;
+ STACK_OF(OPENSSL_STRING) *ssl_args = NULL;
+
+ char *crl_file = NULL;
+ int crl_format = FORMAT_PEM;
+ int crl_download = 0;
+ STACK_OF(X509_CRL) *crls = NULL;
meth = SSLv23_client_method();
@@ -705,6 +758,12 @@ int MAIN(int argc, char **argv)
if (!load_config(bio_err, NULL))
goto end;
+ cctx = SSL_CONF_CTX_new();
+ if (!cctx)
+ goto end;
+ SSL_CONF_CTX_set_flags(cctx, SSL_CONF_FLAG_CLIENT);
+ SSL_CONF_CTX_set_flags(cctx, SSL_CONF_FLAG_CMDLINE);
+
if (((cbuf = OPENSSL_malloc(BUFSIZZ)) == NULL) ||
((sbuf = OPENSSL_malloc(BUFSIZZ)) == NULL) ||
((mbuf = OPENSSL_malloc(BUFSIZZ)) == NULL)) {
@@ -741,12 +800,19 @@ int MAIN(int argc, char **argv)
if (--argc < 1)
goto bad;
verify_depth = atoi(*(++argv));
- BIO_printf(bio_err, "verify depth is %d\n", verify_depth);
+ if (!c_quiet)
+ BIO_printf(bio_err, "verify depth is %d\n", verify_depth);
} else if (strcmp(*argv, "-cert") == 0) {
if (--argc < 1)
goto bad;
cert_file = *(++argv);
- } else if (strcmp(*argv, "-sess_out") == 0) {
+ } else if (strcmp(*argv, "-CRL") == 0) {
+ if (--argc < 1)
+ goto bad;
+ crl_file = *(++argv);
+ } else if (strcmp(*argv, "-crl_download") == 0)
+ crl_download = 1;
+ else if (strcmp(*argv, "-sess_out") == 0) {
if (--argc < 1)
goto bad;
sess_out = *(++argv);
@@ -758,13 +824,31 @@ int MAIN(int argc, char **argv)
if (--argc < 1)
goto bad;
cert_format = str2fmt(*(++argv));
+ } else if (strcmp(*argv, "-CRLform") == 0) {
+ if (--argc < 1)
+ goto bad;
+ crl_format = str2fmt(*(++argv));
} else if (args_verify(&argv, &argc, &badarg, bio_err, &vpm)) {
if (badarg)
goto bad;
continue;
} else if (strcmp(*argv, "-verify_return_error") == 0)
verify_return_error = 1;
- else if (strcmp(*argv, "-prexit") == 0)
+ else if (strcmp(*argv, "-verify_quiet") == 0)
+ verify_quiet = 1;
+ else if (strcmp(*argv, "-brief") == 0) {
+ c_brief = 1;
+ verify_quiet = 1;
+ c_quiet = 1;
+ } else if (args_excert(&argv, &argc, &badarg, bio_err, &exc)) {
+ if (badarg)
+ goto bad;
+ continue;
+ } else if (args_ssl(&argv, &argc, cctx, &badarg, bio_err, &ssl_args)) {
+ if (badarg)
+ goto bad;
+ continue;
+ } else if (strcmp(*argv, "-prexit") == 0)
prexit = 1;
else if (strcmp(*argv, "-crlf") == 0)
crlf = 1;
@@ -791,6 +875,15 @@ int MAIN(int argc, char **argv)
#endif
else if (strcmp(*argv, "-msg") == 0)
c_msg = 1;
+ else if (strcmp(*argv, "-msgfile") == 0) {
+ if (--argc < 1)
+ goto bad;
+ bio_c_msg = BIO_new_file(*(++argv), "w");
+ }
+#ifndef OPENSSL_NO_SSL_TRACE
+ else if (strcmp(*argv, "-trace") == 0)
+ c_msg = 2;
+#endif
else if (strcmp(*argv, "-showcerts") == 0)
c_showcerts = 1;
else if (strcmp(*argv, "-nbio_test") == 0)
@@ -859,11 +952,15 @@ int MAIN(int argc, char **argv)
meth = TLSv1_client_method();
#endif
#ifndef OPENSSL_NO_DTLS1
- else if (strcmp(*argv, "-dtls1") == 0) {
+ else if (strcmp(*argv, "-dtls") == 0) {
+ meth = DTLS_client_method();
+ socket_type = SOCK_DGRAM;
+ } else if (strcmp(*argv, "-dtls1") == 0) {
meth = DTLSv1_client_method();
socket_type = SOCK_DGRAM;
- } else if (strcmp(*argv, "-fallback_scsv") == 0) {
- fallback_scsv = 1;
+ } else if (strcmp(*argv, "-dtls1_2") == 0) {
+ meth = DTLSv1_2_client_method();
+ socket_type = SOCK_DGRAM;
} else if (strcmp(*argv, "-timeout") == 0)
enable_timeouts = 1;
else if (strcmp(*argv, "-mtu") == 0) {
@@ -872,9 +969,9 @@ int MAIN(int argc, char **argv)
socket_mtu = atol(*(++argv));
}
#endif
- else if (strcmp(*argv, "-bugs") == 0)
- bugs = 1;
- else if (strcmp(*argv, "-keyform") == 0) {
+ else if (strcmp(*argv, "-fallback_scsv") == 0) {
+ fallback_scsv = 1;
+ } else if (strcmp(*argv, "-keyform") == 0) {
if (--argc < 1)
goto bad;
key_format = str2fmt(*(++argv));
@@ -882,6 +979,10 @@ int MAIN(int argc, char **argv)
if (--argc < 1)
goto bad;
passarg = *(++argv);
+ } else if (strcmp(*argv, "-cert_chain") == 0) {
+ if (--argc < 1)
+ goto bad;
+ chain_file = *(++argv);
} else if (strcmp(*argv, "-key") == 0) {
if (--argc < 1)
goto bad;
@@ -892,27 +993,30 @@ int MAIN(int argc, char **argv)
if (--argc < 1)
goto bad;
CApath = *(++argv);
- } else if (strcmp(*argv, "-CAfile") == 0) {
+ } else if (strcmp(*argv, "-chainCApath") == 0) {
+ if (--argc < 1)
+ goto bad;
+ chCApath = *(++argv);
+ } else if (strcmp(*argv, "-verifyCApath") == 0) {
+ if (--argc < 1)
+ goto bad;
+ vfyCApath = *(++argv);
+ } else if (strcmp(*argv, "-build_chain") == 0)
+ build_chain = 1;
+ else if (strcmp(*argv, "-CAfile") == 0) {
if (--argc < 1)
goto bad;
CAfile = *(++argv);
- } else if (strcmp(*argv, "-no_tls1_2") == 0)
- off |= SSL_OP_NO_TLSv1_2;
- else if (strcmp(*argv, "-no_tls1_1") == 0)
- off |= SSL_OP_NO_TLSv1_1;
- else if (strcmp(*argv, "-no_tls1") == 0)
- off |= SSL_OP_NO_TLSv1;
- else if (strcmp(*argv, "-no_ssl3") == 0)
- off |= SSL_OP_NO_SSLv3;
- else if (strcmp(*argv, "-no_ssl2") == 0)
- off |= SSL_OP_NO_SSLv2;
- else if (strcmp(*argv, "-no_comp") == 0) {
- off |= SSL_OP_NO_COMPRESSION;
+ } else if (strcmp(*argv, "-chainCAfile") == 0) {
+ if (--argc < 1)
+ goto bad;
+ chCAfile = *(++argv);
+ } else if (strcmp(*argv, "-verifyCAfile") == 0) {
+ if (--argc < 1)
+ goto bad;
+ vfyCAfile = *(++argv);
}
#ifndef OPENSSL_NO_TLSEXT
- else if (strcmp(*argv, "-no_ticket") == 0) {
- off |= SSL_OP_NO_TICKET;
- }
# ifndef OPENSSL_NO_NEXTPROTONEG
else if (strcmp(*argv, "-nextprotoneg") == 0) {
if (--argc < 1)
@@ -920,20 +1024,32 @@ int MAIN(int argc, char **argv)
next_proto_neg_in = *(++argv);
}
# endif
-#endif
- else if (strcmp(*argv, "-serverpref") == 0)
- off |= SSL_OP_CIPHER_SERVER_PREFERENCE;
- else if (strcmp(*argv, "-legacy_renegotiation") == 0)
- off |= SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION;
- else if (strcmp(*argv, "-legacy_server_connect") == 0) {
- off |= SSL_OP_LEGACY_SERVER_CONNECT;
- } else if (strcmp(*argv, "-no_legacy_server_connect") == 0) {
- clr |= SSL_OP_LEGACY_SERVER_CONNECT;
- } else if (strcmp(*argv, "-cipher") == 0) {
+ else if (strcmp(*argv, "-alpn") == 0) {
+ if (--argc < 1)
+ goto bad;
+ alpn_in = *(++argv);
+ } else if (strcmp(*argv, "-serverinfo") == 0) {
+ char *c;
+ int start = 0;
+ int len;
+
if (--argc < 1)
goto bad;
- cipher = *(++argv);
+ c = *(++argv);
+ serverinfo_types_count = 0;
+ len = strlen(c);
+ for (i = 0; i <= len; ++i) {
+ if (i == len || c[i] == ',') {
+ serverinfo_types[serverinfo_types_count]
+ = atoi(c + start);
+ serverinfo_types_count++;
+ start = i + 1;
+ }
+ if (serverinfo_types_count == MAX_SI_TYPES)
+ break;
+ }
}
+#endif
#ifdef FIONBIO
else if (strcmp(*argv, "-nbio") == 0) {
c_nbio = 1;
@@ -1024,11 +1140,6 @@ int MAIN(int argc, char **argv)
goto end;
}
psk_identity = "JPAKE";
- if (cipher) {
- BIO_printf(bio_err, "JPAKE sets cipher to PSK\n");
- goto end;
- }
- cipher = "PSK";
}
#endif
@@ -1087,6 +1198,33 @@ int MAIN(int argc, char **argv)
}
}
+ if (chain_file) {
+ chain = load_certs(bio_err, chain_file, FORMAT_PEM,
+ NULL, e, "client certificate chain");
+ if (!chain)
+ goto end;
+ }
+
+ if (crl_file) {
+ X509_CRL *crl;
+ crl = load_crl(crl_file, crl_format);
+ if (!crl) {
+ BIO_puts(bio_err, "Error loading CRL\n");
+ ERR_print_errors(bio_err);
+ goto end;
+ }
+ crls = sk_X509_CRL_new_null();
+ if (!crls || !sk_X509_CRL_push(crls, crl)) {
+ BIO_puts(bio_err, "Error adding CRL\n");
+ ERR_print_errors(bio_err);
+ X509_CRL_free(crl);
+ goto end;
+ }
+ }
+
+ if (!load_excert(&exc, bio_err))
+ goto end;
+
if (!app_RAND_load_file(NULL, bio_err, 1) && inrand == NULL
&& !RAND_status()) {
BIO_printf(bio_err,
@@ -1097,8 +1235,10 @@ int MAIN(int argc, char **argv)
app_RAND_load_files(inrand));
if (bio_c_out == NULL) {
- if (c_quiet && !c_debug && !c_msg) {
+ if (c_quiet && !c_debug) {
bio_c_out = BIO_new(BIO_s_null());
+ if (c_msg && !bio_c_msg)
+ bio_c_msg = BIO_new_fp(stdout, BIO_NOCLOSE);
} else {
if (bio_c_out == NULL)
bio_c_out = BIO_new_fp(stdout, BIO_NOCLOSE);
@@ -1120,6 +1260,17 @@ int MAIN(int argc, char **argv)
if (vpm)
SSL_CTX_set1_param(ctx, vpm);
+ if (!args_ssl_call(ctx, bio_err, cctx, ssl_args, 1, no_jpake)) {
+ ERR_print_errors(bio_err);
+ goto end;
+ }
+
+ if (!ssl_load_stores(ctx, vfyCApath, vfyCAfile, chCApath, chCAfile,
+ crls, crl_download)) {
+ BIO_printf(bio_err, "Error loading store locations\n");
+ ERR_print_errors(bio_err);
+ goto end;
+ }
#ifndef OPENSSL_NO_ENGINE
if (ssl_client_engine) {
if (!SSL_CTX_set_client_cert_engine(ctx, ssl_client_engine)) {
@@ -1149,35 +1300,43 @@ int MAIN(int argc, char **argv)
if (srtp_profiles != NULL)
SSL_CTX_set_tlsext_use_srtp(ctx, srtp_profiles);
#endif
- if (bugs)
- SSL_CTX_set_options(ctx, SSL_OP_ALL | off);
- else
- SSL_CTX_set_options(ctx, off);
+ if (exc)
+ ssl_ctx_set_excert(ctx, exc);
- if (clr)
- SSL_CTX_clear_options(ctx, clr);
-
-#if !defined(OPENSSL_NO_TLSEXT) && !defined(OPENSSL_NO_NEXTPROTONEG)
+#if !defined(OPENSSL_NO_TLSEXT)
+# if !defined(OPENSSL_NO_NEXTPROTONEG)
if (next_proto.data)
SSL_CTX_set_next_proto_select_cb(ctx, next_proto_cb, &next_proto);
+# endif
+ if (alpn_in) {
+ unsigned short alpn_len;
+ unsigned char *alpn = next_protos_parse(&alpn_len, alpn_in);
+
+ if (alpn == NULL) {
+ BIO_printf(bio_err, "Error parsing -alpn argument\n");
+ goto end;
+ }
+ SSL_CTX_set_alpn_protos(ctx, alpn, alpn_len);
+ OPENSSL_free(alpn);
+ }
+#endif
+#ifndef OPENSSL_NO_TLSEXT
+ for (i = 0; i < serverinfo_types_count; i++) {
+ SSL_CTX_add_client_custom_ext(ctx,
+ serverinfo_types[i],
+ NULL, NULL, NULL,
+ serverinfo_cli_parse_cb, NULL);
+ }
#endif
if (state)
SSL_CTX_set_info_callback(ctx, apps_ssl_info_callback);
- if (cipher != NULL)
- if (!SSL_CTX_set_cipher_list(ctx, cipher)) {
- BIO_printf(bio_err, "error setting cipher list\n");
- ERR_print_errors(bio_err);
- goto end;
- }
#if 0
- else
- SSL_CTX_set_cipher_list(ctx, getenv("SSL_CIPHER"));
+ else
+ SSL_CTX_set_cipher_list(ctx, getenv("SSL_CIPHER"));
#endif
SSL_CTX_set_verify(ctx, verify, verify_callback);
- if (!set_cert_key_stuff(ctx, cert, key))
- goto end;
if ((CAfile || CApath)
&& !SSL_CTX_load_verify_locations(ctx, CAfile, CApath)) {
@@ -1186,6 +1345,11 @@ int MAIN(int argc, char **argv)
if (!SSL_CTX_set_default_verify_paths(ctx)) {
ERR_print_errors(bio_err);
}
+
+ ssl_ctx_add_crls(ctx, crls, crl_download);
+ if (!set_cert_key_stuff(ctx, cert, key, chain, build_chain))
+ goto end;
+
#ifndef OPENSSL_NO_TLSEXT
if (servername != NULL) {
tlsextcbp.biodebug = bio_err;
@@ -1277,7 +1441,7 @@ int MAIN(int argc, char **argv)
if (c_Pause & 0x01)
SSL_set_debug(con, 1);
- if (SSL_version(con) == DTLS1_VERSION) {
+ if (socket_type == SOCK_DGRAM) {
sbio = BIO_new_dgram(s, BIO_NOCLOSE);
if (getsockname(s, &peer, (void *)&peerlen) < 0) {
@@ -1331,8 +1495,13 @@ int MAIN(int argc, char **argv)
BIO_set_callback_arg(sbio, (char *)bio_c_out);
}
if (c_msg) {
- SSL_set_msg_callback(con, msg_cb);
- SSL_set_msg_callback_arg(con, bio_c_out);
+#ifndef OPENSSL_NO_SSL_TRACE
+ if (c_msg == 2)
+ SSL_set_msg_callback(con, SSL_trace);
+ else
+#endif
+ SSL_set_msg_callback(con, msg_cb);
+ SSL_set_msg_callback_arg(con, bio_c_msg ? bio_c_msg : bio_c_out);
}
#ifndef OPENSSL_NO_TLSEXT
if (c_tlsextdebug) {
@@ -1515,6 +1684,11 @@ int MAIN(int argc, char **argv)
BIO_printf(bio_err, "Error writing session file %s\n",
sess_out);
}
+ if (c_brief) {
+ BIO_puts(bio_err, "CONNECTION ESTABLISHED\n");
+ print_ssl_summary(bio_err, con);
+ }
+
print_stuff(bio_c_out, con, full_log);
if (full_log > 0)
full_log--;
@@ -1780,7 +1954,10 @@ int MAIN(int argc, char **argv)
break;
case SSL_ERROR_SYSCALL:
ret = get_last_socket_error();
- BIO_printf(bio_err, "read:errno=%d\n", ret);
+ if (c_brief)
+ BIO_puts(bio_err, "CONNECTION CLOSED BY SERVER\n");
+ else
+ BIO_printf(bio_err, "read:errno=%d\n", ret);
goto shut;
case SSL_ERROR_ZERO_RETURN:
BIO_printf(bio_c_out, "closed\n");
@@ -1880,12 +2057,25 @@ int MAIN(int argc, char **argv)
SSL_CTX_free(ctx);
if (cert)
X509_free(cert);
+ if (crls)
+ sk_X509_CRL_pop_free(crls, X509_CRL_free);
if (key)
EVP_PKEY_free(key);
+ if (chain)
+ sk_X509_pop_free(chain, X509_free);
if (pass)
OPENSSL_free(pass);
if (vpm)
X509_VERIFY_PARAM_free(vpm);
+ ssl_excert_free(exc);
+ if (ssl_args)
+ sk_OPENSSL_STRING_free(ssl_args);
+ if (cctx)
+ SSL_CONF_CTX_free(cctx);
+#ifndef OPENSSL_NO_JPAKE
+ if (jpake_secret && psk_key)
+ OPENSSL_free(psk_key);
+#endif
if (cbuf != NULL) {
OPENSSL_cleanse(cbuf, BUFSIZZ);
OPENSSL_free(cbuf);
@@ -1902,6 +2092,10 @@ int MAIN(int argc, char **argv)
BIO_free(bio_c_out);
bio_c_out = NULL;
}
+ if (bio_c_msg != NULL) {
+ BIO_free(bio_c_msg);
+ bio_c_msg = NULL;
+ }
apps_shutdown();
OPENSSL_EXIT(ret);
}
@@ -1995,6 +2189,9 @@ static void print_stuff(BIO *bio, SSL *s, int full)
BIO_write(bio, "\n", 1);
}
+ ssl_print_sigalgs(bio, s);
+ ssl_print_tmp_key(bio, s);
+
BIO_printf(bio,
"---\nSSL handshake has read %ld bytes and written %ld bytes\n",
BIO_number_read(SSL_get_rbio(s)),
@@ -2034,7 +2231,8 @@ static void print_stuff(BIO *bio, SSL *s, int full)
}
#endif
-#if !defined(OPENSSL_NO_TLSEXT) && !defined(OPENSSL_NO_NEXTPROTONEG)
+#if !defined(OPENSSL_NO_TLSEXT)
+# if !defined(OPENSSL_NO_NEXTPROTONEG)
if (next_proto.status != -1) {
const unsigned char *proto;
unsigned int proto_len;
@@ -2043,6 +2241,18 @@ static void print_stuff(BIO *bio, SSL *s, int full)
BIO_write(bio, proto, proto_len);
BIO_write(bio, "\n", 1);
}
+# endif
+ {
+ const unsigned char *proto;
+ unsigned int proto_len;
+ SSL_get0_alpn_selected(s, &proto, &proto_len);
+ if (proto_len > 0) {
+ BIO_printf(bio, "ALPN protocol: ");
+ BIO_write(bio, proto, proto_len);
+ BIO_write(bio, "\n", 1);
+ } else
+ BIO_printf(bio, "No ALPN negotiated\n");
+ }
#endif
#ifndef OPENSSL_NO_SRTP
diff --git a/crypto/openssl/apps/s_server.c b/crypto/openssl/apps/s_server.c
index b58e5e0..acef382 100644
--- a/crypto/openssl/apps/s_server.c
+++ b/crypto/openssl/apps/s_server.c
@@ -209,14 +209,17 @@ typedef unsigned int u_int;
#ifndef OPENSSL_NO_RSA
static RSA MS_CALLBACK *tmp_rsa_cb(SSL *s, int is_export, int keylength);
#endif
-static int sv_body(char *hostname, int s, unsigned char *context);
-static int www_body(char *hostname, int s, unsigned char *context);
+static int sv_body(char *hostname, int s, int stype, unsigned char *context);
+static int www_body(char *hostname, int s, int stype, unsigned char *context);
+static int rev_body(char *hostname, int s, int stype, unsigned char *context);
static void close_accept_socket(void);
static void sv_usage(void);
static int init_ssl_connection(SSL *s);
static void print_stats(BIO *bp, SSL_CTX *ctx);
static int generate_session_id(const SSL *ssl, unsigned char *id,
unsigned int *id_len);
+static void init_session_cache_ctx(SSL_CTX *sctx);
+static void free_sessions(void);
#ifndef OPENSSL_NO_DH
static DH *load_dh_param(const char *dhfile);
static DH *get_dh2048(void);
@@ -286,16 +289,16 @@ static int accept_socket = -1;
#undef PROG
#define PROG s_server_main
-extern int verify_depth, verify_return_error;
+extern int verify_depth, verify_return_error, verify_quiet;
-static char *cipher = NULL;
static int s_server_verify = SSL_VERIFY_NONE;
static int s_server_session_id_context = 1; /* anything will do */
-static const char *s_cert_file = TEST_CERT, *s_key_file = NULL;
+static const char *s_cert_file = TEST_CERT, *s_key_file =
+ NULL, *s_chain_file = NULL;
#ifndef OPENSSL_NO_TLSEXT
static const char *s_cert_file2 = TEST_CERT2, *s_key_file2 = NULL;
#endif
-static char *s_dcert_file = NULL, *s_dkey_file = NULL;
+static char *s_dcert_file = NULL, *s_dkey_file = NULL, *s_dchain_file = NULL;
#ifdef FIONBIO
static int s_nbio = 0;
#endif
@@ -308,14 +311,18 @@ static SSL_CTX *ctx2 = NULL;
static int www = 0;
static BIO *bio_s_out = NULL;
+static BIO *bio_s_msg = NULL;
static int s_debug = 0;
#ifndef OPENSSL_NO_TLSEXT
static int s_tlsextdebug = 0;
static int s_tlsextstatus = 0;
static int cert_status_cb(SSL *s, void *arg);
#endif
+static int no_resume_ephemeral = 0;
static int s_msg = 0;
static int s_quiet = 0;
+static int s_ign_eof = 0;
+static int s_brief = 0;
static char *keymatexportlabel = NULL;
static int keymatexportlen = 20;
@@ -332,6 +339,12 @@ static long socket_mtu;
static int cert_chain = 0;
#endif
+#ifndef OPENSSL_NO_TLSEXT
+static BIO *serverinfo_in = NULL;
+static const char *s_serverinfo_file = NULL;
+
+#endif
+
#ifndef OPENSSL_NO_PSK
static char *psk_identity = "Client_identity";
char *psk_key = NULL; /* by default PSK is not used */
@@ -447,12 +460,13 @@ static int MS_CALLBACK ssl_srp_server_param_cb(SSL *s, int *ad, void *arg)
static void s_server_init(void)
{
accept_socket = -1;
- cipher = NULL;
s_server_verify = SSL_VERIFY_NONE;
s_dcert_file = NULL;
s_dkey_file = NULL;
+ s_dchain_file = NULL;
s_cert_file = TEST_CERT;
s_key_file = NULL;
+ s_chain_file = NULL;
# ifndef OPENSSL_NO_TLSEXT
s_cert_file2 = TEST_CERT2;
s_key_file2 = NULL;
@@ -469,6 +483,7 @@ static void s_server_init(void)
s_debug = 0;
s_msg = 0;
s_quiet = 0;
+ s_brief = 0;
hack = 0;
# ifndef OPENSSL_NO_ENGINE
engine_id = NULL;
@@ -482,6 +497,12 @@ static void sv_usage(void)
BIO_printf(bio_err, "\n");
BIO_printf(bio_err,
" -accept arg - port to accept on (default is %d)\n", PORT);
+ BIO_printf(bio_err,
+ " -verify_host host - check peer certificate matches \"host\"\n");
+ BIO_printf(bio_err,
+ " -verify_email email - check peer certificate matches \"email\"\n");
+ BIO_printf(bio_err,
+ " -verify_ip ipaddr - check peer certificate matches \"ipaddr\"\n");
BIO_printf(bio_err, " -context arg - set session ID context\n");
BIO_printf(bio_err,
" -verify arg - turn on peer certificate verification\n");
@@ -491,6 +512,16 @@ static void sv_usage(void)
" -verify_return_error - return verification errors\n");
BIO_printf(bio_err, " -cert arg - certificate file to use\n");
BIO_printf(bio_err, " (default is %s)\n", TEST_CERT);
+#ifndef OPENSSL_NO_TLSEXT
+ BIO_printf(bio_err,
+ " -serverinfo arg - PEM serverinfo file for certificate\n");
+ BIO_printf(bio_err,
+ " -auth - send and receive RFC 5878 TLS auth extensions and supplemental data\n");
+ BIO_printf(bio_err,
+ " -auth_require_reneg - Do not send TLS auth extensions until renegotiation\n");
+#endif
+ BIO_printf(bio_err,
+ " -no_resumption_on_reneg - set SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION flag\n");
BIO_printf(bio_err,
" -crl_check - check the peer certificate has not been revoked by its CA.\n"
" The CRL(s) are appended to the certificate file\n");
@@ -569,6 +600,7 @@ static void sv_usage(void)
BIO_printf(bio_err, " -tls1_1 - Just talk TLSv1.1\n");
BIO_printf(bio_err, " -tls1 - Just talk TLSv1\n");
BIO_printf(bio_err, " -dtls1 - Just talk DTLSv1\n");
+ BIO_printf(bio_err, " -dtls1_2 - Just talk DTLSv1.2\n");
BIO_printf(bio_err, " -timeout - Enable timeouts\n");
BIO_printf(bio_err, " -mtu - Set link layer MTU\n");
BIO_printf(bio_err, " -chain - Read a certificate chain\n");
@@ -628,6 +660,8 @@ static void sv_usage(void)
BIO_printf(bio_err,
" -use_srtp profiles - Offer SRTP key management with a colon-separated profile list\n");
# endif
+ BIO_printf(bio_err,
+ " -alpn arg - set the advertised protocols for the ALPN extension (comma-separated list)\n");
#endif
BIO_printf(bio_err,
" -keymatexport label - Export keying material using label\n");
@@ -988,12 +1022,53 @@ static int next_proto_cb(SSL *s, const unsigned char **data,
}
# endif /* ndef OPENSSL_NO_NEXTPROTONEG */
-#endif
+/* This the context that we pass to alpn_cb */
+typedef struct tlsextalpnctx_st {
+ unsigned char *data;
+ unsigned short len;
+} tlsextalpnctx;
+
+static int alpn_cb(SSL *s, const unsigned char **out, unsigned char *outlen,
+ const unsigned char *in, unsigned int inlen, void *arg)
+{
+ tlsextalpnctx *alpn_ctx = arg;
+
+ if (!s_quiet) {
+ /* We can assume that |in| is syntactically valid. */
+ unsigned i;
+ BIO_printf(bio_s_out, "ALPN protocols advertised by the client: ");
+ for (i = 0; i < inlen;) {
+ if (i)
+ BIO_write(bio_s_out, ", ", 2);
+ BIO_write(bio_s_out, &in[i + 1], in[i]);
+ i += in[i] + 1;
+ }
+ BIO_write(bio_s_out, "\n", 1);
+ }
+
+ if (SSL_select_next_proto
+ ((unsigned char **)out, outlen, alpn_ctx->data, alpn_ctx->len, in,
+ inlen) != OPENSSL_NPN_NEGOTIATED) {
+ return SSL_TLSEXT_ERR_NOACK;
+ }
+
+ if (!s_quiet) {
+ BIO_printf(bio_s_out, "ALPN protocols selected: ");
+ BIO_write(bio_s_out, *out, *outlen);
+ BIO_write(bio_s_out, "\n", 1);
+ }
+
+ return SSL_TLSEXT_ERR_OK;
+}
+#endif /* ndef OPENSSL_NO_TLSEXT */
int MAIN(int, char **);
#ifndef OPENSSL_NO_JPAKE
static char *jpake_secret = NULL;
+# define no_jpake !jpake_secret
+#else
+# define no_jpake 1
#endif
#ifndef OPENSSL_NO_SRP
static srpsrvparm srp_callback_parm;
@@ -1008,18 +1083,14 @@ int MAIN(int argc, char *argv[])
int badarg = 0;
short port = PORT;
char *CApath = NULL, *CAfile = NULL;
+ char *chCApath = NULL, *chCAfile = NULL;
+ char *vfyCApath = NULL, *vfyCAfile = NULL;
unsigned char *context = NULL;
char *dhfile = NULL;
-#ifndef OPENSSL_NO_ECDH
- char *named_curve = NULL;
-#endif
- int badop = 0, bugs = 0;
+ int badop = 0;
int ret = 1;
- int off = 0;
- int no_tmp_rsa = 0, no_dhe = 0, nocert = 0;
-#ifndef OPENSSL_NO_ECDH
- int no_ecdhe = 0;
-#endif
+ int build_chain = 0;
+ int no_tmp_rsa = 0, no_dhe = 0, no_ecdhe = 0, nocert = 0;
int state = 0;
const SSL_METHOD *meth = NULL;
int socket_type = SOCK_STREAM;
@@ -1030,16 +1101,20 @@ int MAIN(int argc, char *argv[])
char *dpassarg = NULL, *dpass = NULL;
int s_dcert_format = FORMAT_PEM, s_dkey_format = FORMAT_PEM;
X509 *s_cert = NULL, *s_dcert = NULL;
+ STACK_OF(X509) *s_chain = NULL, *s_dchain = NULL;
EVP_PKEY *s_key = NULL, *s_dkey = NULL;
- int no_cache = 0;
+ int no_cache = 0, ext_cache = 0;
+ int rev = 0, naccept = -1;
#ifndef OPENSSL_NO_TLSEXT
EVP_PKEY *s_key2 = NULL;
X509 *s_cert2 = NULL;
tlsextctx tlsextcbp = { NULL, NULL, SSL_TLSEXT_ERR_ALERT_WARNING };
# ifndef OPENSSL_NO_NEXTPROTONEG
const char *next_proto_neg_in = NULL;
- tlsextnextprotoctx next_proto;
+ tlsextnextprotoctx next_proto = { NULL, 0 };
# endif
+ const char *alpn_in = NULL;
+ tlsextalpnctx alpn_ctx = { NULL, 0 };
#endif
#ifndef OPENSSL_NO_PSK
/* by default do not send a PSK identity hint */
@@ -1049,6 +1124,15 @@ int MAIN(int argc, char *argv[])
char *srpuserseed = NULL;
char *srp_verifier_file = NULL;
#endif
+ SSL_EXCERT *exc = NULL;
+ SSL_CONF_CTX *cctx = NULL;
+ STACK_OF(OPENSSL_STRING) *ssl_args = NULL;
+
+ char *crl_file = NULL;
+ int crl_format = FORMAT_PEM;
+ int crl_download = 0;
+ STACK_OF(X509_CRL) *crls = NULL;
+
meth = SSLv23_server_method();
local_argc = argc;
@@ -1065,6 +1149,12 @@ int MAIN(int argc, char *argv[])
if (!load_config(bio_err, NULL))
goto end;
+ cctx = SSL_CONF_CTX_new();
+ if (!cctx)
+ goto end;
+ SSL_CONF_CTX_set_flags(cctx, SSL_CONF_FLAG_SERVER);
+ SSL_CONF_CTX_set_flags(cctx, SSL_CONF_FLAG_CMDLINE);
+
verify_depth = 0;
#ifdef FIONBIO
s_nbio = 0;
@@ -1080,12 +1170,21 @@ int MAIN(int argc, char *argv[])
goto bad;
if (!extract_port(*(++argv), &port))
goto bad;
+ } else if (strcmp(*argv, "-naccept") == 0) {
+ if (--argc < 1)
+ goto bad;
+ naccept = atol(*(++argv));
+ if (naccept <= 0) {
+ BIO_printf(bio_err, "bad accept value %s\n", *argv);
+ goto bad;
+ }
} else if (strcmp(*argv, "-verify") == 0) {
s_server_verify = SSL_VERIFY_PEER | SSL_VERIFY_CLIENT_ONCE;
if (--argc < 1)
goto bad;
verify_depth = atoi(*(++argv));
- BIO_printf(bio_err, "verify depth is %d\n", verify_depth);
+ if (!s_quiet)
+ BIO_printf(bio_err, "verify depth is %d\n", verify_depth);
} else if (strcmp(*argv, "-Verify") == 0) {
s_server_verify =
SSL_VERIFY_PEER | SSL_VERIFY_FAIL_IF_NO_PEER_CERT |
@@ -1093,9 +1192,10 @@ int MAIN(int argc, char *argv[])
if (--argc < 1)
goto bad;
verify_depth = atoi(*(++argv));
- BIO_printf(bio_err,
- "verify depth is %d, must return a certificate\n",
- verify_depth);
+ if (!s_quiet)
+ BIO_printf(bio_err,
+ "verify depth is %d, must return a certificate\n",
+ verify_depth);
} else if (strcmp(*argv, "-context") == 0) {
if (--argc < 1)
goto bad;
@@ -1104,7 +1204,20 @@ int MAIN(int argc, char *argv[])
if (--argc < 1)
goto bad;
s_cert_file = *(++argv);
- } else if (strcmp(*argv, "-certform") == 0) {
+ } else if (strcmp(*argv, "-CRL") == 0) {
+ if (--argc < 1)
+ goto bad;
+ crl_file = *(++argv);
+ } else if (strcmp(*argv, "-crl_download") == 0)
+ crl_download = 1;
+#ifndef OPENSSL_NO_TLSEXT
+ else if (strcmp(*argv, "-serverinfo") == 0) {
+ if (--argc < 1)
+ goto bad;
+ s_serverinfo_file = *(++argv);
+ }
+#endif
+ else if (strcmp(*argv, "-certform") == 0) {
if (--argc < 1)
goto bad;
s_cert_format = str2fmt(*(++argv));
@@ -1120,19 +1233,15 @@ int MAIN(int argc, char *argv[])
if (--argc < 1)
goto bad;
passarg = *(++argv);
- } else if (strcmp(*argv, "-dhparam") == 0) {
+ } else if (strcmp(*argv, "-cert_chain") == 0) {
if (--argc < 1)
goto bad;
- dhfile = *(++argv);
- }
-#ifndef OPENSSL_NO_ECDH
- else if (strcmp(*argv, "-named_curve") == 0) {
+ s_chain_file = *(++argv);
+ } else if (strcmp(*argv, "-dhparam") == 0) {
if (--argc < 1)
goto bad;
- named_curve = *(++argv);
- }
-#endif
- else if (strcmp(*argv, "-dcertform") == 0) {
+ dhfile = *(++argv);
+ } else if (strcmp(*argv, "-dcertform") == 0) {
if (--argc < 1)
goto bad;
s_dcert_format = str2fmt(*(++argv));
@@ -1152,32 +1261,62 @@ int MAIN(int argc, char *argv[])
if (--argc < 1)
goto bad;
s_dkey_file = *(++argv);
+ } else if (strcmp(*argv, "-dcert_chain") == 0) {
+ if (--argc < 1)
+ goto bad;
+ s_dchain_file = *(++argv);
} else if (strcmp(*argv, "-nocert") == 0) {
nocert = 1;
} else if (strcmp(*argv, "-CApath") == 0) {
if (--argc < 1)
goto bad;
CApath = *(++argv);
+ } else if (strcmp(*argv, "-chainCApath") == 0) {
+ if (--argc < 1)
+ goto bad;
+ chCApath = *(++argv);
+ } else if (strcmp(*argv, "-verifyCApath") == 0) {
+ if (--argc < 1)
+ goto bad;
+ vfyCApath = *(++argv);
} else if (strcmp(*argv, "-no_cache") == 0)
no_cache = 1;
- else if (args_verify(&argv, &argc, &badarg, bio_err, &vpm)) {
+ else if (strcmp(*argv, "-ext_cache") == 0)
+ ext_cache = 1;
+ else if (strcmp(*argv, "-CRLform") == 0) {
+ if (--argc < 1)
+ goto bad;
+ crl_format = str2fmt(*(++argv));
+ } else if (args_verify(&argv, &argc, &badarg, bio_err, &vpm)) {
+ if (badarg)
+ goto bad;
+ continue;
+ } else if (args_excert(&argv, &argc, &badarg, bio_err, &exc)) {
+ if (badarg)
+ goto bad;
+ continue;
+ } else if (args_ssl(&argv, &argc, cctx, &badarg, bio_err, &ssl_args)) {
if (badarg)
goto bad;
continue;
} else if (strcmp(*argv, "-verify_return_error") == 0)
verify_return_error = 1;
- else if (strcmp(*argv, "-serverpref") == 0) {
- off |= SSL_OP_CIPHER_SERVER_PREFERENCE;
- } else if (strcmp(*argv, "-legacy_renegotiation") == 0)
- off |= SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION;
- else if (strcmp(*argv, "-cipher") == 0) {
+ else if (strcmp(*argv, "-verify_quiet") == 0)
+ verify_quiet = 1;
+ else if (strcmp(*argv, "-build_chain") == 0)
+ build_chain = 1;
+ else if (strcmp(*argv, "-CAfile") == 0) {
if (--argc < 1)
goto bad;
- cipher = *(++argv);
- } else if (strcmp(*argv, "-CAfile") == 0) {
+ CAfile = *(++argv);
+ } else if (strcmp(*argv, "-chainCAfile") == 0) {
if (--argc < 1)
goto bad;
- CAfile = *(++argv);
+ chCAfile = *(++argv);
+ } else if (strcmp(*argv, "-verifyCAfile") == 0) {
+ if (--argc < 1)
+ goto bad;
+ vfyCAfile = *(++argv);
}
#ifdef FIONBIO
else if (strcmp(*argv, "-nbio") == 0) {
@@ -1189,7 +1328,11 @@ int MAIN(int argc, char *argv[])
s_nbio = 1;
#endif
s_nbio_test = 1;
- } else if (strcmp(*argv, "-debug") == 0) {
+ } else if (strcmp(*argv, "-ign_eof") == 0)
+ s_ign_eof = 1;
+ else if (strcmp(*argv, "-no_ign_eof") == 0)
+ s_ign_eof = 0;
+ else if (strcmp(*argv, "-debug") == 0) {
s_debug = 1;
}
#ifndef OPENSSL_NO_TLSEXT
@@ -1220,7 +1363,17 @@ int MAIN(int argc, char *argv[])
#endif
else if (strcmp(*argv, "-msg") == 0) {
s_msg = 1;
- } else if (strcmp(*argv, "-hack") == 0) {
+ } else if (strcmp(*argv, "-msgfile") == 0) {
+ if (--argc < 1)
+ goto bad;
+ bio_s_msg = BIO_new_file(*(++argv), "w");
+ }
+#ifndef OPENSSL_NO_SSL_TRACE
+ else if (strcmp(*argv, "-trace") == 0) {
+ s_msg = 2;
+ }
+#endif
+ else if (strcmp(*argv, "-hack") == 0) {
hack = 1;
} else if (strcmp(*argv, "-state") == 0) {
state = 1;
@@ -1228,18 +1381,19 @@ int MAIN(int argc, char *argv[])
s_crlf = 1;
} else if (strcmp(*argv, "-quiet") == 0) {
s_quiet = 1;
- } else if (strcmp(*argv, "-bugs") == 0) {
- bugs = 1;
+ } else if (strcmp(*argv, "-brief") == 0) {
+ s_quiet = 1;
+ s_brief = 1;
+ verify_quiet = 1;
} else if (strcmp(*argv, "-no_tmp_rsa") == 0) {
no_tmp_rsa = 1;
} else if (strcmp(*argv, "-no_dhe") == 0) {
no_dhe = 1;
- }
-#ifndef OPENSSL_NO_ECDH
- else if (strcmp(*argv, "-no_ecdhe") == 0) {
+ } else if (strcmp(*argv, "-no_ecdhe") == 0) {
no_ecdhe = 1;
+ } else if (strcmp(*argv, "-no_resume_ephemeral") == 0) {
+ no_resume_ephemeral = 1;
}
-#endif
#ifndef OPENSSL_NO_PSK
else if (strcmp(*argv, "-psk_hint") == 0) {
if (--argc < 1)
@@ -1272,32 +1426,18 @@ int MAIN(int argc, char *argv[])
meth = TLSv1_server_method();
}
#endif
- else if (strcmp(*argv, "-www") == 0) {
+ else if (strcmp(*argv, "-rev") == 0) {
+ rev = 1;
+ } else if (strcmp(*argv, "-www") == 0) {
www = 1;
} else if (strcmp(*argv, "-WWW") == 0) {
www = 2;
} else if (strcmp(*argv, "-HTTP") == 0) {
www = 3;
- } else if (strcmp(*argv, "-no_ssl2") == 0) {
- off |= SSL_OP_NO_SSLv2;
- } else if (strcmp(*argv, "-no_ssl3") == 0) {
- off |= SSL_OP_NO_SSLv3;
- } else if (strcmp(*argv, "-no_tls1") == 0) {
- off |= SSL_OP_NO_TLSv1;
- } else if (strcmp(*argv, "-no_tls1_1") == 0) {
- off |= SSL_OP_NO_TLSv1_1;
- } else if (strcmp(*argv, "-no_tls1_2") == 0) {
- off |= SSL_OP_NO_TLSv1_2;
- } else if (strcmp(*argv, "-no_comp") == 0) {
- off |= SSL_OP_NO_COMPRESSION;
}
-#ifndef OPENSSL_NO_TLSEXT
- else if (strcmp(*argv, "-no_ticket") == 0) {
- off |= SSL_OP_NO_TICKET;
- }
-#endif
#ifndef OPENSSL_NO_SSL2
else if (strcmp(*argv, "-ssl2") == 0) {
+ no_ecdhe = 1;
meth = SSLv2_server_method();
}
#endif
@@ -1316,9 +1456,15 @@ int MAIN(int argc, char *argv[])
}
#endif
#ifndef OPENSSL_NO_DTLS1
- else if (strcmp(*argv, "-dtls1") == 0) {
+ else if (strcmp(*argv, "-dtls") == 0) {
+ meth = DTLS_server_method();
+ socket_type = SOCK_DGRAM;
+ } else if (strcmp(*argv, "-dtls1") == 0) {
meth = DTLSv1_server_method();
socket_type = SOCK_DGRAM;
+ } else if (strcmp(*argv, "-dtls1_2") == 0) {
+ meth = DTLSv1_2_server_method();
+ socket_type = SOCK_DGRAM;
} else if (strcmp(*argv, "-timeout") == 0)
enable_timeouts = 1;
else if (strcmp(*argv, "-mtu") == 0) {
@@ -1368,6 +1514,11 @@ int MAIN(int argc, char *argv[])
next_proto_neg_in = *(++argv);
}
# endif
+ else if (strcmp(*argv, "-alpn") == 0) {
+ if (--argc < 1)
+ goto bad;
+ alpn_in = *(++argv);
+ }
#endif
#if !defined(OPENSSL_NO_JPAKE) && !defined(OPENSSL_NO_PSK)
else if (strcmp(*argv, "-jpake") == 0) {
@@ -1420,11 +1571,6 @@ int MAIN(int argc, char *argv[])
goto end;
}
psk_identity = "JPAKE";
- if (cipher) {
- BIO_printf(bio_err, "JPAKE sets cipher to PSK\n");
- goto end;
- }
- cipher = "PSK";
}
#endif
@@ -1447,6 +1593,9 @@ int MAIN(int argc, char *argv[])
s_key_file2 = s_cert_file2;
#endif
+ if (!load_excert(&exc, bio_err))
+ goto end;
+
if (nocert == 0) {
s_key = load_key(bio_err, s_key_file, s_key_format, 0, pass, e,
"server certificate private key file");
@@ -1462,6 +1611,12 @@ int MAIN(int argc, char *argv[])
ERR_print_errors(bio_err);
goto end;
}
+ if (s_chain_file) {
+ s_chain = load_certs(bio_err, s_chain_file, FORMAT_PEM,
+ NULL, e, "server certificate chain");
+ if (!s_chain)
+ goto end;
+ }
#ifndef OPENSSL_NO_TLSEXT
if (tlsextcbp.servername) {
s_key2 = load_key(bio_err, s_key_file2, s_key_format, 0, pass, e,
@@ -1479,9 +1634,10 @@ int MAIN(int argc, char *argv[])
goto end;
}
}
-#endif
+#endif /* OPENSSL_NO_TLSEXT */
}
-#if !defined(OPENSSL_NO_TLSEXT) && !defined(OPENSSL_NO_NEXTPROTONEG)
+#if !defined(OPENSSL_NO_TLSEXT)
+# if !defined(OPENSSL_NO_NEXTPROTONEG)
if (next_proto_neg_in) {
unsigned short len;
next_proto.data = next_protos_parse(&len, next_proto_neg_in);
@@ -1491,8 +1647,34 @@ int MAIN(int argc, char *argv[])
} else {
next_proto.data = NULL;
}
+# endif
+ alpn_ctx.data = NULL;
+ if (alpn_in) {
+ unsigned short len;
+ alpn_ctx.data = next_protos_parse(&len, alpn_in);
+ if (alpn_ctx.data == NULL)
+ goto end;
+ alpn_ctx.len = len;
+ }
#endif
+ if (crl_file) {
+ X509_CRL *crl;
+ crl = load_crl(crl_file, crl_format);
+ if (!crl) {
+ BIO_puts(bio_err, "Error loading CRL\n");
+ ERR_print_errors(bio_err);
+ goto end;
+ }
+ crls = sk_X509_CRL_new_null();
+ if (!crls || !sk_X509_CRL_push(crls, crl)) {
+ BIO_puts(bio_err, "Error adding CRL\n");
+ ERR_print_errors(bio_err);
+ X509_CRL_free(crl);
+ goto end;
+ }
+ }
+
if (s_dcert_file) {
if (s_dkey_file == NULL)
@@ -1512,6 +1694,12 @@ int MAIN(int argc, char *argv[])
ERR_print_errors(bio_err);
goto end;
}
+ if (s_dchain_file) {
+ s_dchain = load_certs(bio_err, s_dchain_file, FORMAT_PEM,
+ NULL, e, "second server certificate chain");
+ if (!s_dchain)
+ goto end;
+ }
}
@@ -1525,8 +1713,10 @@ int MAIN(int argc, char *argv[])
app_RAND_load_files(inrand));
if (bio_s_out == NULL) {
- if (s_quiet && !s_debug && !s_msg) {
+ if (s_quiet && !s_debug) {
bio_s_out = BIO_new(BIO_s_null());
+ if (s_msg && !bio_s_msg)
+ bio_s_msg = BIO_new_fp(stdout, BIO_NOCLOSE);
} else {
if (bio_s_out == NULL)
bio_s_out = BIO_new_fp(stdout, BIO_NOCLOSE);
@@ -1566,16 +1756,17 @@ int MAIN(int argc, char *argv[])
BIO_printf(bio_err, "id_prefix '%s' set.\n", session_id_prefix);
}
SSL_CTX_set_quiet_shutdown(ctx, 1);
- if (bugs)
- SSL_CTX_set_options(ctx, SSL_OP_ALL);
if (hack)
SSL_CTX_set_options(ctx, SSL_OP_NETSCAPE_DEMO_CIPHER_CHANGE_BUG);
- SSL_CTX_set_options(ctx, off);
+ if (exc)
+ ssl_ctx_set_excert(ctx, exc);
if (state)
SSL_CTX_set_info_callback(ctx, apps_ssl_info_callback);
if (no_cache)
SSL_CTX_set_session_cache_mode(ctx, SSL_SESS_CACHE_OFF);
+ else if (ext_cache)
+ init_session_cache_ctx(ctx);
else
SSL_CTX_sess_set_cache_size(ctx, 128);
@@ -1606,6 +1797,17 @@ int MAIN(int argc, char *argv[])
if (vpm)
SSL_CTX_set1_param(ctx, vpm);
+ ssl_ctx_add_crls(ctx, crls, 0);
+
+ if (!args_ssl_call(ctx, bio_err, cctx, ssl_args, no_ecdhe, no_jpake))
+ goto end;
+
+ if (!ssl_load_stores(ctx, vfyCApath, vfyCAfile, chCApath, chCAfile,
+ crls, crl_download)) {
+ BIO_printf(bio_err, "Error loading store locations\n");
+ ERR_print_errors(bio_err);
+ goto end;
+ }
#ifndef OPENSSL_NO_TLSEXT
if (s_cert2) {
ctx2 = SSL_CTX_new(meth);
@@ -1633,17 +1835,18 @@ int MAIN(int argc, char *argv[])
BIO_printf(bio_err, "id_prefix '%s' set.\n", session_id_prefix);
}
SSL_CTX_set_quiet_shutdown(ctx2, 1);
- if (bugs)
- SSL_CTX_set_options(ctx2, SSL_OP_ALL);
if (hack)
SSL_CTX_set_options(ctx2, SSL_OP_NETSCAPE_DEMO_CIPHER_CHANGE_BUG);
- SSL_CTX_set_options(ctx2, off);
+ if (exc)
+ ssl_ctx_set_excert(ctx2, exc);
if (state)
SSL_CTX_set_info_callback(ctx2, apps_ssl_info_callback);
if (no_cache)
SSL_CTX_set_session_cache_mode(ctx2, SSL_SESS_CACHE_OFF);
+ else if (ext_cache)
+ init_session_cache_ctx(ctx2);
else
SSL_CTX_sess_set_cache_size(ctx2, 128);
@@ -1653,12 +1856,20 @@ int MAIN(int argc, char *argv[])
}
if (vpm)
SSL_CTX_set1_param(ctx2, vpm);
+
+ ssl_ctx_add_crls(ctx2, crls, 0);
+
+ if (!args_ssl_call(ctx2, bio_err, cctx, ssl_args, no_ecdhe, no_jpake))
+ goto end;
+
}
# ifndef OPENSSL_NO_NEXTPROTONEG
if (next_proto.data)
SSL_CTX_set_next_protos_advertised_cb(ctx, next_proto_cb,
&next_proto);
# endif
+ if (alpn_ctx.data)
+ SSL_CTX_set_alpn_select_cb(ctx, alpn_cb, &alpn_ctx);
#endif
#ifndef OPENSSL_NO_DH
@@ -1702,54 +1913,21 @@ int MAIN(int argc, char *argv[])
}
#endif
-#ifndef OPENSSL_NO_ECDH
- if (!no_ecdhe) {
- EC_KEY *ecdh = NULL;
-
- if (named_curve) {
- int nid = OBJ_sn2nid(named_curve);
-
- if (nid == 0) {
- BIO_printf(bio_err, "unknown curve name (%s)\n", named_curve);
- goto end;
- }
- ecdh = EC_KEY_new_by_curve_name(nid);
- if (ecdh == NULL) {
- BIO_printf(bio_err, "unable to create curve (%s)\n",
- named_curve);
- goto end;
- }
- }
-
- if (ecdh != NULL) {
- BIO_printf(bio_s_out, "Setting temp ECDH parameters\n");
- } else {
- BIO_printf(bio_s_out, "Using default temp ECDH parameters\n");
- ecdh = EC_KEY_new_by_curve_name(NID_X9_62_prime256v1);
- if (ecdh == NULL) {
- BIO_printf(bio_err, "unable to create curve (nistp256)\n");
- goto end;
- }
- }
- (void)BIO_flush(bio_s_out);
-
- SSL_CTX_set_tmp_ecdh(ctx, ecdh);
-# ifndef OPENSSL_NO_TLSEXT
- if (ctx2)
- SSL_CTX_set_tmp_ecdh(ctx2, ecdh);
-# endif
- EC_KEY_free(ecdh);
+ if (!set_cert_key_stuff(ctx, s_cert, s_key, s_chain, build_chain))
+ goto end;
+#ifndef OPENSSL_NO_TLSEXT
+ if (s_serverinfo_file != NULL
+ && !SSL_CTX_use_serverinfo_file(ctx, s_serverinfo_file)) {
+ ERR_print_errors(bio_err);
+ goto end;
}
#endif
-
- if (!set_cert_key_stuff(ctx, s_cert, s_key))
- goto end;
#ifndef OPENSSL_NO_TLSEXT
- if (ctx2 && !set_cert_key_stuff(ctx2, s_cert2, s_key2))
+ if (ctx2 && !set_cert_key_stuff(ctx2, s_cert2, s_key2, NULL, build_chain))
goto end;
#endif
if (s_dcert != NULL) {
- if (!set_cert_key_stuff(ctx, s_dcert, s_dkey))
+ if (!set_cert_key_stuff(ctx, s_dcert, s_dkey, s_dchain, build_chain))
goto end;
}
#ifndef OPENSSL_NO_RSA
@@ -1808,20 +1986,6 @@ int MAIN(int argc, char *argv[])
}
#endif
- if (cipher != NULL) {
- if (!SSL_CTX_set_cipher_list(ctx, cipher)) {
- BIO_printf(bio_err, "error setting cipher list\n");
- ERR_print_errors(bio_err);
- goto end;
- }
-#ifndef OPENSSL_NO_TLSEXT
- if (ctx2 && !SSL_CTX_set_cipher_list(ctx2, cipher)) {
- BIO_printf(bio_err, "error setting cipher list\n");
- ERR_print_errors(bio_err);
- goto end;
- }
-#endif
- }
SSL_CTX_set_verify(ctx, s_server_verify, verify_callback);
SSL_CTX_set_session_id_context(ctx, (void *)&s_server_session_id_context,
sizeof s_server_session_id_context);
@@ -1873,10 +2037,15 @@ int MAIN(int argc, char *argv[])
BIO_printf(bio_s_out, "ACCEPT\n");
(void)BIO_flush(bio_s_out);
- if (www)
- do_server(port, socket_type, &accept_socket, www_body, context);
+ if (rev)
+ do_server(port, socket_type, &accept_socket, rev_body, context,
+ naccept);
+ else if (www)
+ do_server(port, socket_type, &accept_socket, www_body, context,
+ naccept);
else
- do_server(port, socket_type, &accept_socket, sv_body, context);
+ do_server(port, socket_type, &accept_socket, sv_body, context,
+ naccept);
print_stats(bio_s_out, ctx);
ret = 0;
end:
@@ -1884,18 +2053,25 @@ int MAIN(int argc, char *argv[])
SSL_CTX_free(ctx);
if (s_cert)
X509_free(s_cert);
+ if (crls)
+ sk_X509_CRL_pop_free(crls, X509_CRL_free);
if (s_dcert)
X509_free(s_dcert);
if (s_key)
EVP_PKEY_free(s_key);
if (s_dkey)
EVP_PKEY_free(s_dkey);
+ if (s_chain)
+ sk_X509_pop_free(s_chain, X509_free);
+ if (s_dchain)
+ sk_X509_pop_free(s_dchain, X509_free);
if (pass)
OPENSSL_free(pass);
if (dpass)
OPENSSL_free(dpass);
if (vpm)
X509_VERIFY_PARAM_free(vpm);
+ free_sessions();
#ifndef OPENSSL_NO_TLSEXT
if (tlscstatp.host)
OPENSSL_free(tlscstatp.host);
@@ -1909,11 +2085,32 @@ int MAIN(int argc, char *argv[])
X509_free(s_cert2);
if (s_key2)
EVP_PKEY_free(s_key2);
+ if (serverinfo_in != NULL)
+ BIO_free(serverinfo_in);
+# ifndef OPENSSL_NO_NEXTPROTONEG
+ if (next_proto.data)
+ OPENSSL_free(next_proto.data);
+# endif
+ if (alpn_ctx.data)
+ OPENSSL_free(alpn_ctx.data);
+#endif
+ ssl_excert_free(exc);
+ if (ssl_args)
+ sk_OPENSSL_STRING_free(ssl_args);
+ if (cctx)
+ SSL_CONF_CTX_free(cctx);
+#ifndef OPENSSL_NO_JPAKE
+ if (jpake_secret && psk_key)
+ OPENSSL_free(psk_key);
#endif
if (bio_s_out != NULL) {
BIO_free(bio_s_out);
bio_s_out = NULL;
}
+ if (bio_s_msg != NULL) {
+ BIO_free(bio_s_msg);
+ bio_s_msg = NULL;
+ }
apps_shutdown();
OPENSSL_EXIT(ret);
}
@@ -1946,7 +2143,7 @@ static void print_stats(BIO *bio, SSL_CTX *ssl_ctx)
SSL_CTX_sess_get_cache_size(ssl_ctx));
}
-static int sv_body(char *hostname, int s, unsigned char *context)
+static int sv_body(char *hostname, int s, int stype, unsigned char *context)
{
char *buf = NULL;
fd_set readfds;
@@ -2010,7 +2207,7 @@ static int sv_body(char *hostname, int s, unsigned char *context)
# endif
#endif
- if (SSL_version(con) == DTLS1_VERSION) {
+ if (stype == SOCK_DGRAM) {
sbio = BIO_new_dgram(s, BIO_NOCLOSE);
@@ -2069,8 +2266,13 @@ static int sv_body(char *hostname, int s, unsigned char *context)
BIO_set_callback_arg(SSL_get_rbio(con), (char *)bio_s_out);
}
if (s_msg) {
- SSL_set_msg_callback(con, msg_cb);
- SSL_set_msg_callback_arg(con, bio_s_out);
+#ifndef OPENSSL_NO_SSL_TRACE
+ if (s_msg == 2)
+ SSL_set_msg_callback(con, SSL_trace);
+ else
+#endif
+ SSL_set_msg_callback(con, msg_cb);
+ SSL_set_msg_callback_arg(con, bio_s_msg ? bio_s_msg : bio_s_out);
}
#ifndef OPENSSL_NO_TLSEXT
if (s_tlsextdebug) {
@@ -2168,7 +2370,7 @@ static int sv_body(char *hostname, int s, unsigned char *context)
assert(lf_num == 0);
} else
i = raw_read_stdin(buf, bufsize);
- if (!s_quiet) {
+ if (!s_quiet && !s_brief) {
if ((i <= 0) || (buf[0] == 'Q')) {
BIO_printf(bio_s_out, "DONE\n");
SHUTDOWN(s);
@@ -2383,6 +2585,16 @@ static int init_ssl_connection(SSL *con)
unsigned char *exportedkeymat;
i = SSL_accept(con);
+#ifdef CERT_CB_TEST_RETRY
+ {
+ while (i <= 0 && SSL_get_error(con, i) == SSL_ERROR_WANT_X509_LOOKUP
+ && SSL_state(con) == SSL3_ST_SR_CLNT_HELLO_C) {
+ fprintf(stderr,
+ "LOOKUP from certificate callback during accept\n");
+ i = SSL_accept(con);
+ }
+ }
+#endif
#ifndef OPENSSL_NO_SRP
while (i <= 0 && SSL_get_error(con, i) == SSL_ERROR_WANT_X509_LOOKUP) {
BIO_printf(bio_s_out, "LOOKUP during accept %s\n",
@@ -2398,6 +2610,7 @@ static int init_ssl_connection(SSL *con)
i = SSL_accept(con);
}
#endif
+
if (i <= 0) {
if (BIO_sock_should_retry(i)) {
BIO_printf(bio_s_out, "DELAY\n");
@@ -2409,11 +2622,15 @@ static int init_ssl_connection(SSL *con)
if (verify_error != X509_V_OK) {
BIO_printf(bio_err, "verify error:%s\n",
X509_verify_cert_error_string(verify_error));
- } else
- ERR_print_errors(bio_err);
+ }
+ /* Always print any error messages */
+ ERR_print_errors(bio_err);
return (0);
}
+ if (s_brief)
+ print_ssl_summary(bio_err, con);
+
PEM_write_bio_SSL_SESSION(bio_s_out, SSL_get_session(con));
peer = SSL_get_peer_certificate(con);
@@ -2430,6 +2647,11 @@ static int init_ssl_connection(SSL *con)
if (SSL_get_shared_ciphers(con, buf, sizeof buf) != NULL)
BIO_printf(bio_s_out, "Shared ciphers:%s\n", buf);
str = SSL_CIPHER_get_name(SSL_get_current_cipher(con));
+ ssl_print_sigalgs(bio_s_out, con);
+#ifndef OPENSSL_NO_EC
+ ssl_print_point_formats(bio_s_out, con);
+ ssl_print_curves(bio_s_out, con, 0);
+#endif
BIO_printf(bio_s_out, "CIPHER is %s\n", (str != NULL) ? str : "(NONE)");
#if !defined(OPENSSL_NO_TLSEXT) && !defined(OPENSSL_NO_NEXTPROTONEG)
@@ -2529,7 +2751,7 @@ static int load_CA(SSL_CTX *ctx, char *file)
}
#endif
-static int www_body(char *hostname, int s, unsigned char *context)
+static int www_body(char *hostname, int s, int stype, unsigned char *context)
{
char *buf = NULL;
int ret = 1;
@@ -2604,8 +2826,13 @@ static int www_body(char *hostname, int s, unsigned char *context)
BIO_set_callback_arg(SSL_get_rbio(con), (char *)bio_s_out);
}
if (s_msg) {
- SSL_set_msg_callback(con, msg_cb);
- SSL_set_msg_callback_arg(con, bio_s_out);
+#ifndef OPENSSL_NO_SSL_TRACE
+ if (s_msg == 2)
+ SSL_set_msg_callback(con, SSL_trace);
+ else
+#endif
+ SSL_set_msg_callback(con, msg_cb);
+ SSL_set_msg_callback_arg(con, bio_s_msg ? bio_s_msg : bio_s_out);
}
for (;;) {
@@ -2724,6 +2951,10 @@ static int www_body(char *hostname, int s, unsigned char *context)
}
BIO_puts(io, "\n");
}
+ ssl_print_sigalgs(io, con);
+#ifndef OPENSSL_NO_EC
+ ssl_print_curves(io, con, 0);
+#endif
BIO_printf(io, (SSL_cache_hit(con)
? "---\nReused, " : "---\nNew, "));
c = SSL_get_current_cipher(con);
@@ -2906,6 +3137,140 @@ static int www_body(char *hostname, int s, unsigned char *context)
return (ret);
}
+static int rev_body(char *hostname, int s, int stype, unsigned char *context)
+{
+ char *buf = NULL;
+ int i;
+ int ret = 1;
+ SSL *con;
+ BIO *io, *ssl_bio, *sbio;
+#ifndef OPENSSL_NO_KRB5
+ KSSL_CTX *kctx;
+#endif
+
+ buf = OPENSSL_malloc(bufsize);
+ if (buf == NULL)
+ return (0);
+ io = BIO_new(BIO_f_buffer());
+ ssl_bio = BIO_new(BIO_f_ssl());
+ if ((io == NULL) || (ssl_bio == NULL))
+ goto err;
+
+ /* lets make the output buffer a reasonable size */
+ if (!BIO_set_write_buffer_size(io, bufsize))
+ goto err;
+
+ if ((con = SSL_new(ctx)) == NULL)
+ goto err;
+#ifndef OPENSSL_NO_TLSEXT
+ if (s_tlsextdebug) {
+ SSL_set_tlsext_debug_callback(con, tlsext_cb);
+ SSL_set_tlsext_debug_arg(con, bio_s_out);
+ }
+#endif
+#ifndef OPENSSL_NO_KRB5
+ if ((kctx = kssl_ctx_new()) != NULL) {
+ kssl_ctx_setstring(kctx, KSSL_SERVICE, KRB5SVC);
+ kssl_ctx_setstring(kctx, KSSL_KEYTAB, KRB5KEYTAB);
+ }
+#endif /* OPENSSL_NO_KRB5 */
+ if (context)
+ SSL_set_session_id_context(con, context, strlen((char *)context));
+
+ sbio = BIO_new_socket(s, BIO_NOCLOSE);
+ SSL_set_bio(con, sbio, sbio);
+ SSL_set_accept_state(con);
+
+ BIO_set_ssl(ssl_bio, con, BIO_CLOSE);
+ BIO_push(io, ssl_bio);
+#ifdef CHARSET_EBCDIC
+ io = BIO_push(BIO_new(BIO_f_ebcdic_filter()), io);
+#endif
+
+ if (s_debug) {
+ SSL_set_debug(con, 1);
+ BIO_set_callback(SSL_get_rbio(con), bio_dump_callback);
+ BIO_set_callback_arg(SSL_get_rbio(con), (char *)bio_s_out);
+ }
+ if (s_msg) {
+#ifndef OPENSSL_NO_SSL_TRACE
+ if (s_msg == 2)
+ SSL_set_msg_callback(con, SSL_trace);
+ else
+#endif
+ SSL_set_msg_callback(con, msg_cb);
+ SSL_set_msg_callback_arg(con, bio_s_msg ? bio_s_msg : bio_s_out);
+ }
+
+ for (;;) {
+ i = BIO_do_handshake(io);
+ if (i > 0)
+ break;
+ if (!BIO_should_retry(io)) {
+ BIO_puts(bio_err, "CONNECTION FAILURE\n");
+ ERR_print_errors(bio_err);
+ goto end;
+ }
+ }
+ BIO_printf(bio_err, "CONNECTION ESTABLISHED\n");
+ print_ssl_summary(bio_err, con);
+
+ for (;;) {
+ i = BIO_gets(io, buf, bufsize - 1);
+ if (i < 0) { /* error */
+ if (!BIO_should_retry(io)) {
+ if (!s_quiet)
+ ERR_print_errors(bio_err);
+ goto err;
+ } else {
+ BIO_printf(bio_s_out, "read R BLOCK\n");
+#if defined(OPENSSL_SYS_NETWARE)
+ delay(1000);
+#elif !defined(OPENSSL_SYS_MSDOS) && !defined(__DJGPP__)
+ sleep(1);
+#endif
+ continue;
+ }
+ } else if (i == 0) { /* end of input */
+ ret = 1;
+ BIO_printf(bio_err, "CONNECTION CLOSED\n");
+ goto end;
+ } else {
+ char *p = buf + i - 1;
+ while (i && (*p == '\n' || *p == '\r')) {
+ p--;
+ i--;
+ }
+ if (!s_ign_eof && i == 5 && !strncmp(buf, "CLOSE", 5)) {
+ ret = 1;
+ BIO_printf(bio_err, "CONNECTION CLOSED\n");
+ goto end;
+ }
+ BUF_reverse((unsigned char *)buf, NULL, i);
+ buf[i] = '\n';
+ BIO_write(io, buf, i + 1);
+ for (;;) {
+ i = BIO_flush(io);
+ if (i > 0)
+ break;
+ if (!BIO_should_retry(io))
+ goto end;
+ }
+ }
+ }
+ end:
+ /* make sure we re-use sessions */
+ SSL_set_shutdown(con, SSL_SENT_SHUTDOWN | SSL_RECEIVED_SHUTDOWN);
+
+ err:
+
+ if (buf != NULL)
+ OPENSSL_free(buf);
+ if (io != NULL)
+ BIO_free_all(io);
+ return (ret);
+}
+
#ifndef OPENSSL_NO_RSA
static RSA MS_CALLBACK *tmp_rsa_cb(SSL *s, int is_export, int keylength)
{
@@ -2961,3 +3326,116 @@ static int generate_session_id(const SSL *ssl, unsigned char *id,
return 0;
return 1;
}
+
+/*
+ * By default s_server uses an in-memory cache which caches SSL_SESSION
+ * structures without any serialisation. This hides some bugs which only
+ * become apparent in deployed servers. By implementing a basic external
+ * session cache some issues can be debugged using s_server.
+ */
+
+typedef struct simple_ssl_session_st {
+ unsigned char *id;
+ unsigned int idlen;
+ unsigned char *der;
+ int derlen;
+ struct simple_ssl_session_st *next;
+} simple_ssl_session;
+
+static simple_ssl_session *first = NULL;
+
+static int add_session(SSL *ssl, SSL_SESSION *session)
+{
+ simple_ssl_session *sess;
+ unsigned char *p;
+
+ sess = OPENSSL_malloc(sizeof(simple_ssl_session));
+ if (!sess) {
+ BIO_printf(bio_err, "Out of memory adding session to external cache\n");
+ return 0;
+ }
+
+ SSL_SESSION_get_id(session, &sess->idlen);
+ sess->derlen = i2d_SSL_SESSION(session, NULL);
+
+ sess->id = BUF_memdup(SSL_SESSION_get_id(session, NULL), sess->idlen);
+
+ sess->der = OPENSSL_malloc(sess->derlen);
+ if (!sess->id || !sess->der) {
+ BIO_printf(bio_err, "Out of memory adding session to external cache\n");
+
+ if (sess->id)
+ OPENSSL_free(sess->id);
+ if (sess->der)
+ OPENSSL_free(sess->der);
+ OPENSSL_free(sess);
+ return 0;
+ }
+ p = sess->der;
+ i2d_SSL_SESSION(session, &p);
+
+ sess->next = first;
+ first = sess;
+ BIO_printf(bio_err, "New session added to external cache\n");
+ return 0;
+}
+
+static SSL_SESSION *get_session(SSL *ssl, unsigned char *id, int idlen,
+ int *do_copy)
+{
+ simple_ssl_session *sess;
+ *do_copy = 0;
+ for (sess = first; sess; sess = sess->next) {
+ if (idlen == (int)sess->idlen && !memcmp(sess->id, id, idlen)) {
+ const unsigned char *p = sess->der;
+ BIO_printf(bio_err, "Lookup session: cache hit\n");
+ return d2i_SSL_SESSION(NULL, &p, sess->derlen);
+ }
+ }
+ BIO_printf(bio_err, "Lookup session: cache miss\n");
+ return NULL;
+}
+
+static void del_session(SSL_CTX *sctx, SSL_SESSION *session)
+{
+ simple_ssl_session *sess, *prev = NULL;
+ const unsigned char *id;
+ unsigned int idlen;
+ id = SSL_SESSION_get_id(session, &idlen);
+ for (sess = first; sess; sess = sess->next) {
+ if (idlen == sess->idlen && !memcmp(sess->id, id, idlen)) {
+ if (prev)
+ prev->next = sess->next;
+ else
+ first = sess->next;
+ OPENSSL_free(sess->id);
+ OPENSSL_free(sess->der);
+ OPENSSL_free(sess);
+ return;
+ }
+ prev = sess;
+ }
+}
+
+static void init_session_cache_ctx(SSL_CTX *sctx)
+{
+ SSL_CTX_set_session_cache_mode(sctx,
+ SSL_SESS_CACHE_NO_INTERNAL |
+ SSL_SESS_CACHE_SERVER);
+ SSL_CTX_sess_set_new_cb(sctx, add_session);
+ SSL_CTX_sess_set_get_cb(sctx, get_session);
+ SSL_CTX_sess_set_remove_cb(sctx, del_session);
+}
+
+static void free_sessions(void)
+{
+ simple_ssl_session *sess, *tsess;
+ for (sess = first; sess;) {
+ OPENSSL_free(sess->id);
+ OPENSSL_free(sess->der);
+ tsess = sess;
+ sess = sess->next;
+ OPENSSL_free(tsess);
+ }
+ first = NULL;
+}
diff --git a/crypto/openssl/apps/s_socket.c b/crypto/openssl/apps/s_socket.c
index 9e5565d..77a7688 100644
--- a/crypto/openssl/apps/s_socket.c
+++ b/crypto/openssl/apps/s_socket.c
@@ -290,8 +290,9 @@ static int init_client_ip(int *sock, unsigned char ip[4], int port, int type)
}
int do_server(int port, int type, int *ret,
- int (*cb) (char *hostname, int s, unsigned char *context),
- unsigned char *context)
+ int (*cb) (char *hostname, int s, int stype,
+ unsigned char *context), unsigned char *context,
+ int naccept)
{
int sock;
char *name = NULL;
@@ -313,12 +314,14 @@ int do_server(int port, int type, int *ret,
}
} else
sock = accept_socket;
- i = (*cb) (name, sock, context);
+ i = (*cb) (name, sock, type, context);
if (name != NULL)
OPENSSL_free(name);
if (type == SOCK_STREAM)
SHUTDOWN2(sock);
- if (i < 0) {
+ if (naccept != -1)
+ naccept--;
+ if (i < 0 || naccept == 0) {
SHUTDOWN2(accept_socket);
return (i);
}
diff --git a/crypto/openssl/apps/smime.c b/crypto/openssl/apps/smime.c
index 53e43c5..6044ccf 100644
--- a/crypto/openssl/apps/smime.c
+++ b/crypto/openssl/apps/smime.c
@@ -634,6 +634,12 @@ int MAIN(int argc, char **argv)
p7 = PKCS7_sign(NULL, NULL, other, in, flags);
if (!p7)
goto end;
+ if (flags & PKCS7_NOCERTS) {
+ for (i = 0; i < sk_X509_num(other); i++) {
+ X509 *x = sk_X509_value(other, i);
+ PKCS7_add_certificate(p7, x);
+ }
+ }
} else
flags |= PKCS7_REUSE_DIGEST;
for (i = 0; i < sk_OPENSSL_STRING_num(sksigners); i++) {
diff --git a/crypto/openssl/apps/speed.c b/crypto/openssl/apps/speed.c
index 7d9fd8a..3697b71 100644
--- a/crypto/openssl/apps/speed.c
+++ b/crypto/openssl/apps/speed.c
@@ -366,6 +366,8 @@ static void *KDF1_SHA1(const void *in, size_t inlen, void *out,
}
# endif /* OPENSSL_NO_ECDH */
+static void multiblock_speed(const EVP_CIPHER *evp_cipher);
+
int MAIN(int, char **);
int MAIN(int argc, char **argv)
@@ -646,6 +648,7 @@ int MAIN(int argc, char **argv)
# ifndef NO_FORK
int multi = 0;
# endif
+ int multiblock = 0;
# ifndef TIMES
usertime = -1;
@@ -776,6 +779,9 @@ int MAIN(int argc, char **argv)
mr = 1;
j--; /* Otherwise, -mr gets confused with an
* algorithm. */
+ } else if (argc > 0 && !strcmp(*argv, "-mb")) {
+ multiblock = 1;
+ j--;
} else
# ifndef OPENSSL_NO_MD2
if (strcmp(*argv, "md2") == 0)
@@ -1941,6 +1947,20 @@ int MAIN(int argc, char **argv)
# endif
if (doit[D_EVP]) {
+# ifdef EVP_CIPH_FLAG_TLS1_1_MULTIBLOCK
+ if (multiblock && evp_cipher) {
+ if (!
+ (EVP_CIPHER_flags(evp_cipher) &
+ EVP_CIPH_FLAG_TLS1_1_MULTIBLOCK)) {
+ fprintf(stderr, "%s is not multi-block capable\n",
+ OBJ_nid2ln(evp_cipher->nid));
+ goto end;
+ }
+ multiblock_speed(evp_cipher);
+ mret = 0;
+ goto end;
+ }
+# endif
for (j = 0; j < SIZE_NUM; j++) {
if (evp_cipher) {
EVP_CIPHER_CTX ctx;
@@ -2742,4 +2762,113 @@ static int do_multi(int multi)
return 1;
}
# endif
+
+static void multiblock_speed(const EVP_CIPHER *evp_cipher)
+{
+ static int mblengths[] =
+ { 8 * 1024, 2 * 8 * 1024, 4 * 8 * 1024, 8 * 8 * 1024, 8 * 16 * 1024 };
+ int j, count, num = sizeof(lengths) / sizeof(lengths[0]);
+ const char *alg_name;
+ unsigned char *inp, *out, no_key[32], no_iv[16];
+ EVP_CIPHER_CTX ctx;
+ double d = 0.0;
+
+ inp = OPENSSL_malloc(mblengths[num - 1]);
+ out = OPENSSL_malloc(mblengths[num - 1] + 1024);
+ if (!inp || !out) {
+ BIO_printf(bio_err,"Out of memory\n");
+ goto end;
+ }
+
+
+ EVP_CIPHER_CTX_init(&ctx);
+ EVP_EncryptInit_ex(&ctx, evp_cipher, NULL, no_key, no_iv);
+ EVP_CIPHER_CTX_ctrl(&ctx, EVP_CTRL_AEAD_SET_MAC_KEY, sizeof(no_key),
+ no_key);
+ alg_name = OBJ_nid2ln(evp_cipher->nid);
+
+ for (j = 0; j < num; j++) {
+ print_message(alg_name, 0, mblengths[j]);
+ Time_F(START);
+ for (count = 0, run = 1; run && count < 0x7fffffff; count++) {
+ unsigned char aad[EVP_AEAD_TLS1_AAD_LEN];
+ EVP_CTRL_TLS1_1_MULTIBLOCK_PARAM mb_param;
+ size_t len = mblengths[j];
+ int packlen;
+
+ memset(aad, 0, 8); /* avoid uninitialized values */
+ aad[8] = 23; /* SSL3_RT_APPLICATION_DATA */
+ aad[9] = 3; /* version */
+ aad[10] = 2;
+ aad[11] = 0; /* length */
+ aad[12] = 0;
+ mb_param.out = NULL;
+ mb_param.inp = aad;
+ mb_param.len = len;
+ mb_param.interleave = 8;
+
+ packlen = EVP_CIPHER_CTX_ctrl(&ctx,
+ EVP_CTRL_TLS1_1_MULTIBLOCK_AAD,
+ sizeof(mb_param), &mb_param);
+
+ if (packlen > 0) {
+ mb_param.out = out;
+ mb_param.inp = inp;
+ mb_param.len = len;
+ EVP_CIPHER_CTX_ctrl(&ctx,
+ EVP_CTRL_TLS1_1_MULTIBLOCK_ENCRYPT,
+ sizeof(mb_param), &mb_param);
+ } else {
+ int pad;
+
+ RAND_bytes(out, 16);
+ len += 16;
+ aad[11] = len >> 8;
+ aad[12] = len;
+ pad = EVP_CIPHER_CTX_ctrl(&ctx,
+ EVP_CTRL_AEAD_TLS1_AAD,
+ EVP_AEAD_TLS1_AAD_LEN, aad);
+ EVP_Cipher(&ctx, out, inp, len + pad);
+ }
+ }
+ d = Time_F(STOP);
+ BIO_printf(bio_err,
+ mr ? "+R:%d:%s:%f\n"
+ : "%d %s's in %.2fs\n", count, "evp", d);
+ results[D_EVP][j] = ((double)count) / d * mblengths[j];
+ }
+
+ if (mr) {
+ fprintf(stdout, "+H");
+ for (j = 0; j < num; j++)
+ fprintf(stdout, ":%d", mblengths[j]);
+ fprintf(stdout, "\n");
+ fprintf(stdout, "+F:%d:%s", D_EVP, alg_name);
+ for (j = 0; j < num; j++)
+ fprintf(stdout, ":%.2f", results[D_EVP][j]);
+ fprintf(stdout, "\n");
+ } else {
+ fprintf(stdout,
+ "The 'numbers' are in 1000s of bytes per second processed.\n");
+ fprintf(stdout, "type ");
+ for (j = 0; j < num; j++)
+ fprintf(stdout, "%7d bytes", mblengths[j]);
+ fprintf(stdout, "\n");
+ fprintf(stdout, "%-24s", alg_name);
+
+ for (j = 0; j < num; j++) {
+ if (results[D_EVP][j] > 10000)
+ fprintf(stdout, " %11.2fk", results[D_EVP][j] / 1e3);
+ else
+ fprintf(stdout, " %11.2f ", results[D_EVP][j]);
+ }
+ fprintf(stdout, "\n");
+ }
+
+end:
+ if (inp)
+ OPENSSL_free(inp);
+ if (out)
+ OPENSSL_free(out);
+}
#endif
diff --git a/crypto/openssl/apps/verify.c b/crypto/openssl/apps/verify.c
index e29f9bb..78e729f 100644
--- a/crypto/openssl/apps/verify.c
+++ b/crypto/openssl/apps/verify.c
@@ -88,6 +88,7 @@ int MAIN(int argc, char **argv)
X509_STORE *cert_ctx = NULL;
X509_LOOKUP *lookup = NULL;
X509_VERIFY_PARAM *vpm = NULL;
+ int crl_download = 0;
#ifndef OPENSSL_NO_ENGINE
char *engine = NULL;
#endif
@@ -136,7 +137,8 @@ int MAIN(int argc, char **argv)
if (argc-- < 1)
goto end;
crlfile = *(++argv);
- }
+ } else if (strcmp(*argv, "-crl_download") == 0)
+ crl_download = 1;
#ifndef OPENSSL_NO_ENGINE
else if (strcmp(*argv, "-engine") == 0) {
if (--argc < 1)
@@ -214,6 +216,9 @@ int MAIN(int argc, char **argv)
}
ret = 0;
+
+ if (crl_download)
+ store_setup_crl_download(cert_ctx);
if (argc < 1) {
if (1 != check(cert_ctx, NULL, untrusted, trusted, crls, e))
ret = -1;
diff --git a/crypto/openssl/apps/x509.c b/crypto/openssl/apps/x509.c
index 929359b..864a60d 100644
--- a/crypto/openssl/apps/x509.c
+++ b/crypto/openssl/apps/x509.c
@@ -150,6 +150,9 @@ static const char *x509_usage[] = {
" -engine e - use engine e, possibly a hardware device.\n",
#endif
" -certopt arg - various certificate text options\n",
+ " -checkhost host - check certificate matches \"host\"\n",
+ " -checkemail email - check certificate matches \"email\"\n",
+ " -checkip ipaddr - check certificate matches \"ipaddr\"\n",
NULL
};
@@ -163,6 +166,9 @@ static int x509_certify(X509_STORE *ctx, char *CAfile, const EVP_MD *digest,
char *section, ASN1_INTEGER *sno);
static int purpose_print(BIO *bio, X509 *cert, X509_PURPOSE *pt);
static int reqfile = 0;
+#ifdef OPENSSL_SSL_DEBUG_BROKEN_PROTOCOL
+static int force_version = 2;
+#endif
int MAIN(int, char **);
@@ -174,15 +180,16 @@ int MAIN(int argc, char **argv)
X509 *x = NULL, *xca = NULL;
ASN1_OBJECT *objtmp;
STACK_OF(OPENSSL_STRING) *sigopts = NULL;
- EVP_PKEY *Upkey = NULL, *CApkey = NULL;
+ EVP_PKEY *Upkey = NULL, *CApkey = NULL, *fkey = NULL;
ASN1_INTEGER *sno = NULL;
- int i, num, badops = 0;
+ int i, num, badops = 0, badsig = 0;
BIO *out = NULL;
BIO *STDout = NULL;
STACK_OF(ASN1_OBJECT) *trust = NULL, *reject = NULL;
int informat, outformat, keyformat, CAformat, CAkeyformat;
char *infile = NULL, *outfile = NULL, *keyfile = NULL, *CAfile = NULL;
char *CAkeyfile = NULL, *CAserial = NULL;
+ char *fkeyfile = NULL;
char *alias = NULL;
int text = 0, serial = 0, subject = 0, issuer = 0, startdate =
0, enddate = 0;
@@ -208,6 +215,9 @@ int MAIN(int argc, char **argv)
int need_rand = 0;
int checkend = 0, checkoffset = 0;
unsigned long nmflag = 0, certflag = 0;
+ char *checkhost = NULL;
+ char *checkemail = NULL;
+ char *checkip = NULL;
#ifndef OPENSSL_NO_ENGINE
char *engine = NULL;
#endif
@@ -274,7 +284,15 @@ int MAIN(int argc, char **argv)
sigopts = sk_OPENSSL_STRING_new_null();
if (!sigopts || !sk_OPENSSL_STRING_push(sigopts, *(++argv)))
goto bad;
- } else if (strcmp(*argv, "-days") == 0) {
+ }
+#ifdef OPENSSL_SSL_DEBUG_BROKEN_PROTOCOL
+ else if (strcmp(*argv, "-force_version") == 0) {
+ if (--argc < 1)
+ goto bad;
+ force_version = atoi(*(++argv)) - 1;
+ }
+#endif
+ else if (strcmp(*argv, "-days") == 0) {
if (--argc < 1)
goto bad;
days = atoi(*(++argv));
@@ -327,6 +345,10 @@ int MAIN(int argc, char **argv)
goto bad;
if (!(sno = s2i_ASN1_INTEGER(NULL, *(++argv))))
goto bad;
+ } else if (strcmp(*argv, "-force_pubkey") == 0) {
+ if (--argc < 1)
+ goto bad;
+ fkeyfile = *(++argv);
} else if (strcmp(*argv, "-addtrust") == 0) {
if (--argc < 1)
goto bad;
@@ -424,6 +446,18 @@ int MAIN(int argc, char **argv)
goto bad;
checkoffset = atoi(*(++argv));
checkend = 1;
+ } else if (strcmp(*argv, "-checkhost") == 0) {
+ if (--argc < 1)
+ goto bad;
+ checkhost = *(++argv);
+ } else if (strcmp(*argv, "-checkemail") == 0) {
+ if (--argc < 1)
+ goto bad;
+ checkemail = *(++argv);
+ } else if (strcmp(*argv, "-checkip") == 0) {
+ if (--argc < 1)
+ goto bad;
+ checkip = *(++argv);
} else if (strcmp(*argv, "-noout") == 0)
noout = ++num;
else if (strcmp(*argv, "-trustout") == 0)
@@ -447,6 +481,8 @@ int MAIN(int argc, char **argv)
#endif
else if (strcmp(*argv, "-ocspid") == 0)
ocspid = ++num;
+ else if (strcmp(*argv, "-badsig") == 0)
+ badsig = 1;
else if ((md_alg = EVP_get_digestbyname(*argv + 1))) {
/* ok */
digest = md_alg;
@@ -484,6 +520,13 @@ int MAIN(int argc, char **argv)
goto end;
}
+ if (fkeyfile) {
+ fkey = load_pubkey(bio_err, fkeyfile, keyformat, 0,
+ NULL, e, "Forced key");
+ if (fkey == NULL)
+ goto end;
+ }
+
if ((CAkeyfile == NULL) && (CA_flag) && (CAformat == FORMAT_PEM)) {
CAkeyfile = CAfile;
} else if ((CA_flag) && (CAkeyfile == NULL)) {
@@ -605,10 +648,13 @@ int MAIN(int argc, char **argv)
X509_gmtime_adj(X509_get_notBefore(x), 0);
X509_time_adj_ex(X509_get_notAfter(x), days, 0, NULL);
-
- pkey = X509_REQ_get_pubkey(req);
- X509_set_pubkey(x, pkey);
- EVP_PKEY_free(pkey);
+ if (fkey)
+ X509_set_pubkey(x, fkey);
+ else {
+ pkey = X509_REQ_get_pubkey(req);
+ X509_set_pubkey(x, pkey);
+ EVP_PKEY_free(pkey);
+ }
} else
x = load_cert(bio_err, infile, informat, NULL, e, "Certificate");
@@ -937,11 +983,16 @@ int MAIN(int argc, char **argv)
goto end;
}
+ print_cert_checks(STDout, x, checkhost, checkemail, checkip);
+
if (noout) {
ret = 0;
goto end;
}
+ if (badsig)
+ x->signature->data[x->signature->length - 1] ^= 0x1;
+
if (outformat == FORMAT_ASN1)
i = i2d_X509_bio(out, x);
else if (outformat == FORMAT_PEM) {
@@ -982,6 +1033,7 @@ int MAIN(int argc, char **argv)
X509_free(xca);
EVP_PKEY_free(Upkey);
EVP_PKEY_free(CApkey);
+ EVP_PKEY_free(fkey);
if (sigopts)
sk_OPENSSL_STRING_free(sigopts);
X509_REQ_free(rq);
@@ -1101,7 +1153,11 @@ static int x509_certify(X509_STORE *ctx, char *CAfile, const EVP_MD *digest,
if (conf) {
X509V3_CTX ctx2;
+#ifdef OPENSSL_SSL_DEBUG_BROKEN_PROTOCOL
+ X509_set_version(x, force_version);
+#else
X509_set_version(x, 2); /* version 3 certificate */
+#endif
X509V3_set_ctx(&ctx2, xca, x, NULL, NULL, 0);
X509V3_set_nconf(&ctx2, conf);
if (!X509V3_EXT_add_nconf(conf, &ctx2, section, x))
@@ -1186,7 +1242,11 @@ static int sign(X509 *x, EVP_PKEY *pkey, int days, int clrext,
}
if (conf) {
X509V3_CTX ctx;
+#ifdef OPENSSL_SSL_DEBUG_BROKEN_PROTOCOL
+ X509_set_version(x, force_version);
+#else
X509_set_version(x, 2); /* version 3 certificate */
+#endif
X509V3_set_ctx(&ctx, x, x, NULL, NULL, 0);
X509V3_set_nconf(&ctx, conf);
if (!X509V3_EXT_add_nconf(conf, &ctx, section, x))
diff --git a/crypto/openssl/config b/crypto/openssl/config
index 41fa2a6..77f730f 100755
--- a/crypto/openssl/config
+++ b/crypto/openssl/config
@@ -587,15 +587,33 @@ case "$GUESSOS" in
fi
;;
ppc64-*-linux2)
+ if [ -z "$KERNEL_BITS" ]; then
+ echo "WARNING! If you wish to build 64-bit library, then you have to"
+ echo " invoke './Configure linux-ppc64' *manually*."
+ if [ "$TEST" = "false" -a -t 1 ]; then
+ echo " You have about 5 seconds to press Ctrl-C to abort."
+ (trap "stty `stty -g`" 2 0; stty -icanon min 0 time 50; read waste) <&1
+ fi
+ fi
+ if [ "$KERNEL_BITS" = "64" ]; then
+ OUT="linux-ppc64"
+ else
+ OUT="linux-ppc"
+ (echo "__LP64__" | gcc -E -x c - 2>/dev/null | grep "^__LP64__" 2>&1 > /dev/null) || options="$options -m32"
+ fi
+ ;;
+ ppc64le-*-linux2) OUT="linux-ppc64le" ;;
+ ppc-*-linux2) OUT="linux-ppc" ;;
+ mips64*-*-linux2)
echo "WARNING! If you wish to build 64-bit library, then you have to"
- echo " invoke './Configure linux-ppc64' *manually*."
+ echo " invoke './Configure linux64-mips64' *manually*."
if [ "$TEST" = "false" -a -t 1 ]; then
echo " You have about 5 seconds to press Ctrl-C to abort."
(trap "stty `stty -g`" 2 0; stty -icanon min 0 time 50; read waste) <&1
fi
- OUT="linux-ppc"
+ OUT="linux-mips64"
;;
- ppc-*-linux2) OUT="linux-ppc" ;;
+ mips*-*-linux2) OUT="linux-mips32" ;;
ppc60x-*-vxworks*) OUT="vxworks-ppc60x" ;;
ppcgen-*-vxworks*) OUT="vxworks-ppcgen" ;;
pentium-*-vxworks*) OUT="vxworks-pentium" ;;
@@ -644,6 +662,7 @@ case "$GUESSOS" in
armv[1-3]*-*-linux2) OUT="linux-generic32" ;;
armv[7-9]*-*-linux2) OUT="linux-armv4"; options="$options -march=armv7-a" ;;
arm*-*-linux2) OUT="linux-armv4" ;;
+ aarch64-*-linux2) OUT="linux-aarch64" ;;
sh*b-*-linux2) OUT="linux-generic32"; options="$options -DB_ENDIAN" ;;
sh*-*-linux2) OUT="linux-generic32"; options="$options -DL_ENDIAN" ;;
m68k*-*-linux2) OUT="linux-generic32"; options="$options -DB_ENDIAN" ;;
diff --git a/crypto/openssl/crypto/Makefile b/crypto/openssl/crypto/Makefile
index 11f517a..1857ab8 100644
--- a/crypto/openssl/crypto/Makefile
+++ b/crypto/openssl/crypto/Makefile
@@ -75,9 +75,9 @@ ia64cpuid.s: ia64cpuid.S; $(CC) $(CFLAGS) -E ia64cpuid.S > $@
ppccpuid.s: ppccpuid.pl; $(PERL) ppccpuid.pl $(PERLASM_SCHEME) $@
pariscid.s: pariscid.pl; $(PERL) pariscid.pl $(PERLASM_SCHEME) $@
alphacpuid.s: alphacpuid.pl
- (preproc=/tmp/$$$$.$@; trap "rm $$preproc" INT; \
+ (preproc=$$$$.$@.S; trap "rm $$preproc" INT; \
$(PERL) alphacpuid.pl > $$preproc && \
- $(CC) -E $$preproc > $@ && rm $$preproc)
+ $(CC) -E -P $$preproc > $@ && rm $$preproc)
testapps:
[ -z "$(THIS)" ] || ( if echo $(SDIRS) | fgrep ' des '; \
@@ -89,7 +89,7 @@ subdirs:
@target=all; $(RECURSIVE_MAKE)
files:
- $(PERL) $(TOP)/util/files.pl Makefile >> $(TOP)/MINFO
+ $(PERL) $(TOP)/util/files.pl "CPUID_OBJ=$(CPUID_OBJ)" Makefile >> $(TOP)/MINFO
@target=files; $(RECURSIVE_MAKE)
links:
@@ -103,7 +103,7 @@ lib: $(LIB)
@touch lib
$(LIB): $(LIBOBJ)
$(AR) $(LIB) $(LIBOBJ)
- [ -z "$(FIPSLIBDIR)" ] || $(AR) $(LIB) $(FIPSLIBDIR)fipscanister.o
+ test -z "$(FIPSLIBDIR)" || $(AR) $(LIB) $(FIPSLIBDIR)fipscanister.o
$(RANLIB) $(LIB) || echo Never mind.
shared: buildinf.h lib subdirs
diff --git a/crypto/openssl/crypto/aes/Makefile b/crypto/openssl/crypto/aes/Makefile
index b3a9581..e825c14 100644
--- a/crypto/openssl/crypto/aes/Makefile
+++ b/crypto/openssl/crypto/aes/Makefile
@@ -65,12 +65,22 @@ aesni-x86_64.s: asm/aesni-x86_64.pl
$(PERL) asm/aesni-x86_64.pl $(PERLASM_SCHEME) > $@
aesni-sha1-x86_64.s: asm/aesni-sha1-x86_64.pl
$(PERL) asm/aesni-sha1-x86_64.pl $(PERLASM_SCHEME) > $@
+aesni-sha256-x86_64.s: asm/aesni-sha256-x86_64.pl
+ $(PERL) asm/aesni-sha256-x86_64.pl $(PERLASM_SCHEME) > $@
+aesni-mb-x86_64.s: asm/aesni-mb-x86_64.pl
+ $(PERL) asm/aesni-mb-x86_64.pl $(PERLASM_SCHEME) > $@
aes-sparcv9.s: asm/aes-sparcv9.pl
$(PERL) asm/aes-sparcv9.pl $(CFLAGS) > $@
+aest4-sparcv9.s: asm/aest4-sparcv9.pl ../perlasm/sparcv9_modes.pl
+ $(PERL) asm/aest4-sparcv9.pl $(CFLAGS) > $@
aes-ppc.s: asm/aes-ppc.pl
$(PERL) asm/aes-ppc.pl $(PERLASM_SCHEME) $@
+vpaes-ppc.s: asm/vpaes-ppc.pl
+ $(PERL) asm/vpaes-ppc.pl $(PERLASM_SCHEME) $@
+aesp8-ppc.s: asm/aesp8-ppc.pl
+ $(PERL) asm/aesp8-ppc.pl $(PERLASM_SCHEME) $@
aes-parisc.s: asm/aes-parisc.pl
$(PERL) asm/aes-parisc.pl $(PERLASM_SCHEME) $@
@@ -78,12 +88,18 @@ aes-parisc.s: asm/aes-parisc.pl
aes-mips.S: asm/aes-mips.pl
$(PERL) asm/aes-mips.pl $(PERLASM_SCHEME) $@
+aesv8-armx.S: asm/aesv8-armx.pl
+ $(PERL) asm/aesv8-armx.pl $(PERLASM_SCHEME) $@
+aesv8-armx.o: aesv8-armx.S
+
# GNU make "catch all"
aes-%.S: asm/aes-%.pl; $(PERL) $< $(PERLASM_SCHEME) > $@
aes-armv4.o: aes-armv4.S
+bsaes-%.S: asm/bsaes-%.pl; $(PERL) $< $(PERLASM_SCHEME) $@
+bsaes-armv7.o: bsaes-armv7.S
files:
- $(PERL) $(TOP)/util/files.pl Makefile >> $(TOP)/MINFO
+ $(PERL) $(TOP)/util/files.pl "AES_ENC=$(AES_ENC)" Makefile >> $(TOP)/MINFO
links:
@$(PERL) $(TOP)/util/mklink.pl ../../include/openssl $(EXHEADER)
@@ -149,7 +165,7 @@ aes_wrap.o: ../../e_os.h ../../include/openssl/aes.h
aes_wrap.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h
aes_wrap.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
aes_wrap.o: ../../include/openssl/err.h ../../include/openssl/lhash.h
-aes_wrap.o: ../../include/openssl/opensslconf.h
+aes_wrap.o: ../../include/openssl/modes.h ../../include/openssl/opensslconf.h
aes_wrap.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
aes_wrap.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h
aes_wrap.o: ../../include/openssl/symhacks.h ../cryptlib.h aes_wrap.c
diff --git a/crypto/openssl/crypto/aes/aes_wrap.c b/crypto/openssl/crypto/aes/aes_wrap.c
index b1ab8e2..b7b64d5 100644
--- a/crypto/openssl/crypto/aes/aes_wrap.c
+++ b/crypto/openssl/crypto/aes/aes_wrap.c
@@ -54,197 +54,19 @@
#include "cryptlib.h"
#include <openssl/aes.h>
-#include <openssl/bio.h>
-
-static const unsigned char default_iv[] = {
- 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6,
-};
+#include <openssl/modes.h>
int AES_wrap_key(AES_KEY *key, const unsigned char *iv,
unsigned char *out,
const unsigned char *in, unsigned int inlen)
{
- unsigned char *A, B[16], *R;
- unsigned int i, j, t;
- if ((inlen & 0x7) || (inlen < 8))
- return -1;
- A = B;
- t = 1;
- memcpy(out + 8, in, inlen);
- if (!iv)
- iv = default_iv;
-
- memcpy(A, iv, 8);
-
- for (j = 0; j < 6; j++) {
- R = out + 8;
- for (i = 0; i < inlen; i += 8, t++, R += 8) {
- memcpy(B + 8, R, 8);
- AES_encrypt(B, B, key);
- A[7] ^= (unsigned char)(t & 0xff);
- if (t > 0xff) {
- A[6] ^= (unsigned char)((t >> 8) & 0xff);
- A[5] ^= (unsigned char)((t >> 16) & 0xff);
- A[4] ^= (unsigned char)((t >> 24) & 0xff);
- }
- memcpy(R, B + 8, 8);
- }
- }
- memcpy(out, A, 8);
- return inlen + 8;
+ return CRYPTO_128_wrap(key, iv, out, in, inlen, (block128_f) AES_encrypt);
}
int AES_unwrap_key(AES_KEY *key, const unsigned char *iv,
unsigned char *out,
const unsigned char *in, unsigned int inlen)
{
- unsigned char *A, B[16], *R;
- unsigned int i, j, t;
- inlen -= 8;
- if (inlen & 0x7)
- return -1;
- if (inlen < 8)
- return -1;
- A = B;
- t = 6 * (inlen >> 3);
- memcpy(A, in, 8);
- memcpy(out, in + 8, inlen);
- for (j = 0; j < 6; j++) {
- R = out + inlen - 8;
- for (i = 0; i < inlen; i += 8, t--, R -= 8) {
- A[7] ^= (unsigned char)(t & 0xff);
- if (t > 0xff) {
- A[6] ^= (unsigned char)((t >> 8) & 0xff);
- A[5] ^= (unsigned char)((t >> 16) & 0xff);
- A[4] ^= (unsigned char)((t >> 24) & 0xff);
- }
- memcpy(B + 8, R, 8);
- AES_decrypt(B, B, key);
- memcpy(R, B + 8, 8);
- }
- }
- if (!iv)
- iv = default_iv;
- if (memcmp(A, iv, 8)) {
- OPENSSL_cleanse(out, inlen);
- return 0;
- }
- return inlen;
-}
-
-#ifdef AES_WRAP_TEST
-
-int AES_wrap_unwrap_test(const unsigned char *kek, int keybits,
- const unsigned char *iv,
- const unsigned char *eout,
- const unsigned char *key, int keylen)
-{
- unsigned char *otmp = NULL, *ptmp = NULL;
- int r, ret = 0;
- AES_KEY wctx;
- otmp = OPENSSL_malloc(keylen + 8);
- ptmp = OPENSSL_malloc(keylen);
- if (!otmp || !ptmp)
- return 0;
- if (AES_set_encrypt_key(kek, keybits, &wctx))
- goto err;
- r = AES_wrap_key(&wctx, iv, otmp, key, keylen);
- if (r <= 0)
- goto err;
-
- if (eout && memcmp(eout, otmp, keylen))
- goto err;
-
- if (AES_set_decrypt_key(kek, keybits, &wctx))
- goto err;
- r = AES_unwrap_key(&wctx, iv, ptmp, otmp, r);
-
- if (memcmp(key, ptmp, keylen))
- goto err;
-
- ret = 1;
-
- err:
- if (otmp)
- OPENSSL_free(otmp);
- if (ptmp)
- OPENSSL_free(ptmp);
-
- return ret;
-
+ return CRYPTO_128_unwrap(key, iv, out, in, inlen,
+ (block128_f) AES_decrypt);
}
-
-int main(int argc, char **argv)
-{
-
- static const unsigned char kek[] = {
- 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
- 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f,
- 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17,
- 0x18, 0x19, 0x1a, 0x1b, 0x1c, 0x1d, 0x1e, 0x1f
- };
-
- static const unsigned char key[] = {
- 0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77,
- 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff,
- 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07,
- 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f
- };
-
- static const unsigned char e1[] = {
- 0x1f, 0xa6, 0x8b, 0x0a, 0x81, 0x12, 0xb4, 0x47,
- 0xae, 0xf3, 0x4b, 0xd8, 0xfb, 0x5a, 0x7b, 0x82,
- 0x9d, 0x3e, 0x86, 0x23, 0x71, 0xd2, 0xcf, 0xe5
- };
-
- static const unsigned char e2[] = {
- 0x96, 0x77, 0x8b, 0x25, 0xae, 0x6c, 0xa4, 0x35,
- 0xf9, 0x2b, 0x5b, 0x97, 0xc0, 0x50, 0xae, 0xd2,
- 0x46, 0x8a, 0xb8, 0xa1, 0x7a, 0xd8, 0x4e, 0x5d
- };
-
- static const unsigned char e3[] = {
- 0x64, 0xe8, 0xc3, 0xf9, 0xce, 0x0f, 0x5b, 0xa2,
- 0x63, 0xe9, 0x77, 0x79, 0x05, 0x81, 0x8a, 0x2a,
- 0x93, 0xc8, 0x19, 0x1e, 0x7d, 0x6e, 0x8a, 0xe7
- };
-
- static const unsigned char e4[] = {
- 0x03, 0x1d, 0x33, 0x26, 0x4e, 0x15, 0xd3, 0x32,
- 0x68, 0xf2, 0x4e, 0xc2, 0x60, 0x74, 0x3e, 0xdc,
- 0xe1, 0xc6, 0xc7, 0xdd, 0xee, 0x72, 0x5a, 0x93,
- 0x6b, 0xa8, 0x14, 0x91, 0x5c, 0x67, 0x62, 0xd2
- };
-
- static const unsigned char e5[] = {
- 0xa8, 0xf9, 0xbc, 0x16, 0x12, 0xc6, 0x8b, 0x3f,
- 0xf6, 0xe6, 0xf4, 0xfb, 0xe3, 0x0e, 0x71, 0xe4,
- 0x76, 0x9c, 0x8b, 0x80, 0xa3, 0x2c, 0xb8, 0x95,
- 0x8c, 0xd5, 0xd1, 0x7d, 0x6b, 0x25, 0x4d, 0xa1
- };
-
- static const unsigned char e6[] = {
- 0x28, 0xc9, 0xf4, 0x04, 0xc4, 0xb8, 0x10, 0xf4,
- 0xcb, 0xcc, 0xb3, 0x5c, 0xfb, 0x87, 0xf8, 0x26,
- 0x3f, 0x57, 0x86, 0xe2, 0xd8, 0x0e, 0xd3, 0x26,
- 0xcb, 0xc7, 0xf0, 0xe7, 0x1a, 0x99, 0xf4, 0x3b,
- 0xfb, 0x98, 0x8b, 0x9b, 0x7a, 0x02, 0xdd, 0x21
- };
-
- AES_KEY wctx, xctx;
- int ret;
- ret = AES_wrap_unwrap_test(kek, 128, NULL, e1, key, 16);
- fprintf(stderr, "Key test result %d\n", ret);
- ret = AES_wrap_unwrap_test(kek, 192, NULL, e2, key, 16);
- fprintf(stderr, "Key test result %d\n", ret);
- ret = AES_wrap_unwrap_test(kek, 256, NULL, e3, key, 16);
- fprintf(stderr, "Key test result %d\n", ret);
- ret = AES_wrap_unwrap_test(kek, 192, NULL, e4, key, 24);
- fprintf(stderr, "Key test result %d\n", ret);
- ret = AES_wrap_unwrap_test(kek, 256, NULL, e5, key, 24);
- fprintf(stderr, "Key test result %d\n", ret);
- ret = AES_wrap_unwrap_test(kek, 256, NULL, e6, key, 32);
- fprintf(stderr, "Key test result %d\n", ret);
-}
-
-#endif
diff --git a/crypto/openssl/crypto/aes/aes_x86core.c b/crypto/openssl/crypto/aes/aes_x86core.c
index 1defbb1..c869ed7 100644
--- a/crypto/openssl/crypto/aes/aes_x86core.c
+++ b/crypto/openssl/crypto/aes/aes_x86core.c
@@ -89,8 +89,10 @@ typedef unsigned long long u64;
#endif
#undef ROTATE
-#if defined(_MSC_VER) || defined(__ICC)
-# define ROTATE(a,n) _lrotl(a,n)
+#if defined(_MSC_VER)
+# define ROTATE(a,n) _lrotl(a,n)
+#elif defined(__ICC)
+# define ROTATE(a,n) _rotl(a,n)
#elif defined(__GNUC__) && __GNUC__>=2
# if defined(__i386) || defined(__i386__) || defined(__x86_64) || defined(__x86_64__)
# define ROTATE(a,n) ({ register unsigned int ret; \
diff --git a/crypto/openssl/crypto/aes/asm/aes-586.pl b/crypto/openssl/crypto/aes/asm/aes-586.pl
index 687ed81..451d0e0 100755
--- a/crypto/openssl/crypto/aes/asm/aes-586.pl
+++ b/crypto/openssl/crypto/aes/asm/aes-586.pl
@@ -39,7 +39,7 @@
# but exhibits up to 10% improvement on other cores.
#
# Second version is "monolithic" replacement for aes_core.c, which in
-# addition to AES_[de|en]crypt implements private_AES_set_[de|en]cryption_key.
+# addition to AES_[de|en]crypt implements AES_set_[de|en]cryption_key.
# This made it possible to implement little-endian variant of the
# algorithm without modifying the base C code. Motivating factor for
# the undertaken effort was that it appeared that in tight IA-32
@@ -103,11 +103,12 @@
# byte for 128-bit key.
#
# ECB encrypt ECB decrypt CBC large chunk
-# P4 56[60] 84[100] 23
-# AMD K8 48[44] 70[79] 18
-# PIII 41[50] 61[91] 24
-# Core 2 32[38] 45[70] 18.5
-# Pentium 120 160 77
+# P4 52[54] 83[95] 23
+# AMD K8 46[41] 66[70] 18
+# PIII 41[50] 60[77] 24
+# Core 2 31[36] 45[64] 18.5
+# Atom 76[100] 96[138] 60
+# Pentium 115 150 77
#
# Version 4.1 switches to compact S-box even in key schedule setup.
#
@@ -242,7 +243,7 @@ $vertical_spin=0; # shift "verticaly" defaults to 0, because of
sub encvert()
{ my ($te,@s) = @_;
- my $v0 = $acc, $v1 = $key;
+ my ($v0,$v1) = ($acc,$key);
&mov ($v0,$s[3]); # copy s3
&mov (&DWP(4,"esp"),$s[2]); # save s2
@@ -299,7 +300,7 @@ sub encvert()
# Another experimental routine, which features "horizontal spin," but
# eliminates one reference to stack. Strangely enough runs slower...
sub enchoriz()
-{ my $v0 = $key, $v1 = $acc;
+{ my ($v0,$v1) = ($key,$acc);
&movz ($v0,&LB($s0)); # 3, 2, 1, 0*
&rotr ($s2,8); # 8,11,10, 9
@@ -427,7 +428,7 @@ sub sse_encbody()
######################################################################
sub enccompact()
-{ my $Fn = mov;
+{ my $Fn = \&mov;
while ($#_>5) { pop(@_); $Fn=sub{}; }
my ($i,$te,@s)=@_;
my $tmp = $key;
@@ -476,24 +477,25 @@ sub enctransform()
my $tmp = $tbl;
my $r2 = $key ;
- &mov ($acc,$s[$i]);
- &and ($acc,0x80808080);
- &mov ($tmp,$acc);
- &shr ($tmp,7);
+ &and ($tmp,$s[$i]);
&lea ($r2,&DWP(0,$s[$i],$s[$i]));
- &sub ($acc,$tmp);
+ &mov ($acc,$tmp);
+ &shr ($tmp,7);
&and ($r2,0xfefefefe);
- &and ($acc,0x1b1b1b1b);
+ &sub ($acc,$tmp);
&mov ($tmp,$s[$i]);
+ &and ($acc,0x1b1b1b1b);
+ &rotr ($tmp,16);
&xor ($acc,$r2); # r2
+ &mov ($r2,$s[$i]);
&xor ($s[$i],$acc); # r0 ^ r2
+ &rotr ($r2,16+8);
+ &xor ($acc,$tmp);
&rotl ($s[$i],24);
- &xor ($s[$i],$acc) # ROTATE(r2^r0,24) ^ r2
- &rotr ($tmp,16);
- &xor ($s[$i],$tmp);
- &rotr ($tmp,8);
- &xor ($s[$i],$tmp);
+ &xor ($acc,$r2);
+ &mov ($tmp,0x80808080) if ($i!=1);
+ &xor ($s[$i],$acc); # ROTATE(r2^r0,24) ^ r2
}
&function_begin_B("_x86_AES_encrypt_compact");
@@ -526,6 +528,7 @@ sub enctransform()
&enccompact(1,$tbl,$s1,$s2,$s3,$s0,1);
&enccompact(2,$tbl,$s2,$s3,$s0,$s1,1);
&enccompact(3,$tbl,$s3,$s0,$s1,$s2,1);
+ &mov ($tbl,0x80808080);
&enctransform(2);
&enctransform(3);
&enctransform(0);
@@ -607,82 +610,84 @@ sub sse_enccompact()
&pshufw ("mm5","mm4",0x0d); # 15,14,11,10
&movd ("eax","mm1"); # 5, 4, 1, 0
&movd ("ebx","mm5"); # 15,14,11,10
+ &mov ($__key,$key);
&movz ($acc,&LB("eax")); # 0
- &movz ("ecx",&BP(-128,$tbl,$acc,1)); # 0
- &pshufw ("mm2","mm0",0x0d); # 7, 6, 3, 2
&movz ("edx",&HB("eax")); # 1
+ &pshufw ("mm2","mm0",0x0d); # 7, 6, 3, 2
+ &movz ("ecx",&BP(-128,$tbl,$acc,1)); # 0
+ &movz ($key,&LB("ebx")); # 10
&movz ("edx",&BP(-128,$tbl,"edx",1)); # 1
- &shl ("edx",8); # 1
&shr ("eax",16); # 5, 4
+ &shl ("edx",8); # 1
- &movz ($acc,&LB("ebx")); # 10
- &movz ($acc,&BP(-128,$tbl,$acc,1)); # 10
+ &movz ($acc,&BP(-128,$tbl,$key,1)); # 10
+ &movz ($key,&HB("ebx")); # 11
&shl ($acc,16); # 10
- &or ("ecx",$acc); # 10
&pshufw ("mm6","mm4",0x08); # 13,12, 9, 8
- &movz ($acc,&HB("ebx")); # 11
- &movz ($acc,&BP(-128,$tbl,$acc,1)); # 11
+ &or ("ecx",$acc); # 10
+ &movz ($acc,&BP(-128,$tbl,$key,1)); # 11
+ &movz ($key,&HB("eax")); # 5
&shl ($acc,24); # 11
- &or ("edx",$acc); # 11
&shr ("ebx",16); # 15,14
+ &or ("edx",$acc); # 11
- &movz ($acc,&HB("eax")); # 5
- &movz ($acc,&BP(-128,$tbl,$acc,1)); # 5
+ &movz ($acc,&BP(-128,$tbl,$key,1)); # 5
+ &movz ($key,&HB("ebx")); # 15
&shl ($acc,8); # 5
&or ("ecx",$acc); # 5
- &movz ($acc,&HB("ebx")); # 15
- &movz ($acc,&BP(-128,$tbl,$acc,1)); # 15
+ &movz ($acc,&BP(-128,$tbl,$key,1)); # 15
+ &movz ($key,&LB("eax")); # 4
&shl ($acc,24); # 15
&or ("ecx",$acc); # 15
- &movd ("mm0","ecx"); # t[0] collected
- &movz ($acc,&LB("eax")); # 4
- &movz ("ecx",&BP(-128,$tbl,$acc,1)); # 4
+ &movz ($acc,&BP(-128,$tbl,$key,1)); # 4
+ &movz ($key,&LB("ebx")); # 14
&movd ("eax","mm2"); # 7, 6, 3, 2
- &movz ($acc,&LB("ebx")); # 14
- &movz ($acc,&BP(-128,$tbl,$acc,1)); # 14
- &shl ($acc,16); # 14
+ &movd ("mm0","ecx"); # t[0] collected
+ &movz ("ecx",&BP(-128,$tbl,$key,1)); # 14
+ &movz ($key,&HB("eax")); # 3
+ &shl ("ecx",16); # 14
+ &movd ("ebx","mm6"); # 13,12, 9, 8
&or ("ecx",$acc); # 14
- &movd ("ebx","mm6"); # 13,12, 9, 8
- &movz ($acc,&HB("eax")); # 3
- &movz ($acc,&BP(-128,$tbl,$acc,1)); # 3
+ &movz ($acc,&BP(-128,$tbl,$key,1)); # 3
+ &movz ($key,&HB("ebx")); # 9
&shl ($acc,24); # 3
&or ("ecx",$acc); # 3
- &movz ($acc,&HB("ebx")); # 9
- &movz ($acc,&BP(-128,$tbl,$acc,1)); # 9
+ &movz ($acc,&BP(-128,$tbl,$key,1)); # 9
+ &movz ($key,&LB("ebx")); # 8
&shl ($acc,8); # 9
+ &shr ("ebx",16); # 13,12
&or ("ecx",$acc); # 9
- &movd ("mm1","ecx"); # t[1] collected
- &movz ($acc,&LB("ebx")); # 8
- &movz ("ecx",&BP(-128,$tbl,$acc,1)); # 8
- &shr ("ebx",16); # 13,12
- &movz ($acc,&LB("eax")); # 2
- &movz ($acc,&BP(-128,$tbl,$acc,1)); # 2
- &shl ($acc,16); # 2
- &or ("ecx",$acc); # 2
+ &movz ($acc,&BP(-128,$tbl,$key,1)); # 8
+ &movz ($key,&LB("eax")); # 2
&shr ("eax",16); # 7, 6
+ &movd ("mm1","ecx"); # t[1] collected
+ &movz ("ecx",&BP(-128,$tbl,$key,1)); # 2
+ &movz ($key,&HB("eax")); # 7
+ &shl ("ecx",16); # 2
+ &and ("eax",0xff); # 6
+ &or ("ecx",$acc); # 2
&punpckldq ("mm0","mm1"); # t[0,1] collected
- &movz ($acc,&HB("eax")); # 7
- &movz ($acc,&BP(-128,$tbl,$acc,1)); # 7
+ &movz ($acc,&BP(-128,$tbl,$key,1)); # 7
+ &movz ($key,&HB("ebx")); # 13
&shl ($acc,24); # 7
- &or ("ecx",$acc); # 7
- &and ("eax",0xff); # 6
+ &and ("ebx",0xff); # 12
&movz ("eax",&BP(-128,$tbl,"eax",1)); # 6
+ &or ("ecx",$acc); # 7
&shl ("eax",16); # 6
+ &movz ($acc,&BP(-128,$tbl,$key,1)); # 13
&or ("edx","eax"); # 6
- &movz ($acc,&HB("ebx")); # 13
- &movz ($acc,&BP(-128,$tbl,$acc,1)); # 13
&shl ($acc,8); # 13
- &or ("ecx",$acc); # 13
- &movd ("mm4","ecx"); # t[2] collected
- &and ("ebx",0xff); # 12
&movz ("ebx",&BP(-128,$tbl,"ebx",1)); # 12
+ &or ("ecx",$acc); # 13
&or ("edx","ebx"); # 12
+ &mov ($key,$__key);
+ &movd ("mm4","ecx"); # t[2] collected
&movd ("mm5","edx"); # t[3] collected
&punpckldq ("mm4","mm5"); # t[2,3] collected
@@ -1222,7 +1227,7 @@ sub enclast()
######################################################################
sub deccompact()
-{ my $Fn = mov;
+{ my $Fn = \&mov;
while ($#_>5) { pop(@_); $Fn=sub{}; }
my ($i,$td,@s)=@_;
my $tmp = $key;
@@ -1270,30 +1275,30 @@ sub dectransform()
my $tp4 = @s[($i+3)%4]; $tp4 = @s[3] if ($i==1);
my $tp8 = $tbl;
- &mov ($acc,$s[$i]);
- &and ($acc,0x80808080);
- &mov ($tmp,$acc);
+ &mov ($tmp,0x80808080);
+ &and ($tmp,$s[$i]);
+ &mov ($acc,$tmp);
&shr ($tmp,7);
&lea ($tp2,&DWP(0,$s[$i],$s[$i]));
&sub ($acc,$tmp);
&and ($tp2,0xfefefefe);
&and ($acc,0x1b1b1b1b);
- &xor ($acc,$tp2);
- &mov ($tp2,$acc);
+ &xor ($tp2,$acc);
+ &mov ($tmp,0x80808080);
- &and ($acc,0x80808080);
- &mov ($tmp,$acc);
+ &and ($tmp,$tp2);
+ &mov ($acc,$tmp);
&shr ($tmp,7);
&lea ($tp4,&DWP(0,$tp2,$tp2));
&sub ($acc,$tmp);
&and ($tp4,0xfefefefe);
&and ($acc,0x1b1b1b1b);
&xor ($tp2,$s[$i]); # tp2^tp1
- &xor ($acc,$tp4);
- &mov ($tp4,$acc);
+ &xor ($tp4,$acc);
+ &mov ($tmp,0x80808080);
- &and ($acc,0x80808080);
- &mov ($tmp,$acc);
+ &and ($tmp,$tp4);
+ &mov ($acc,$tmp);
&shr ($tmp,7);
&lea ($tp8,&DWP(0,$tp4,$tp4));
&sub ($acc,$tmp);
@@ -1305,13 +1310,13 @@ sub dectransform()
&xor ($s[$i],$tp2);
&xor ($tp2,$tp8);
- &rotl ($tp2,24);
&xor ($s[$i],$tp4);
&xor ($tp4,$tp8);
- &rotl ($tp4,16);
+ &rotl ($tp2,24);
&xor ($s[$i],$tp8); # ^= tp8^(tp4^tp1)^(tp2^tp1)
- &rotl ($tp8,8);
+ &rotl ($tp4,16);
&xor ($s[$i],$tp2); # ^= ROTATE(tp8^tp2^tp1,24)
+ &rotl ($tp8,8);
&xor ($s[$i],$tp4); # ^= ROTATE(tp8^tp4^tp1,16)
&mov ($s[0],$__s0) if($i==2); #prefetch $s0
&mov ($s[1],$__s1) if($i==3); #prefetch $s1
@@ -1389,85 +1394,87 @@ sub dectransform()
sub sse_deccompact()
{
&pshufw ("mm1","mm0",0x0c); # 7, 6, 1, 0
+ &pshufw ("mm5","mm4",0x09); # 13,12,11,10
&movd ("eax","mm1"); # 7, 6, 1, 0
+ &movd ("ebx","mm5"); # 13,12,11,10
+ &mov ($__key,$key);
- &pshufw ("mm5","mm4",0x09); # 13,12,11,10
&movz ($acc,&LB("eax")); # 0
- &movz ("ecx",&BP(-128,$tbl,$acc,1)); # 0
- &movd ("ebx","mm5"); # 13,12,11,10
&movz ("edx",&HB("eax")); # 1
+ &pshufw ("mm2","mm0",0x06); # 3, 2, 5, 4
+ &movz ("ecx",&BP(-128,$tbl,$acc,1)); # 0
+ &movz ($key,&LB("ebx")); # 10
&movz ("edx",&BP(-128,$tbl,"edx",1)); # 1
+ &shr ("eax",16); # 7, 6
&shl ("edx",8); # 1
- &pshufw ("mm2","mm0",0x06); # 3, 2, 5, 4
- &movz ($acc,&LB("ebx")); # 10
- &movz ($acc,&BP(-128,$tbl,$acc,1)); # 10
+ &movz ($acc,&BP(-128,$tbl,$key,1)); # 10
+ &movz ($key,&HB("ebx")); # 11
&shl ($acc,16); # 10
+ &pshufw ("mm6","mm4",0x03); # 9, 8,15,14
&or ("ecx",$acc); # 10
- &shr ("eax",16); # 7, 6
- &movz ($acc,&HB("ebx")); # 11
- &movz ($acc,&BP(-128,$tbl,$acc,1)); # 11
+ &movz ($acc,&BP(-128,$tbl,$key,1)); # 11
+ &movz ($key,&HB("eax")); # 7
&shl ($acc,24); # 11
- &or ("edx",$acc); # 11
&shr ("ebx",16); # 13,12
+ &or ("edx",$acc); # 11
- &pshufw ("mm6","mm4",0x03); # 9, 8,15,14
- &movz ($acc,&HB("eax")); # 7
- &movz ($acc,&BP(-128,$tbl,$acc,1)); # 7
+ &movz ($acc,&BP(-128,$tbl,$key,1)); # 7
+ &movz ($key,&HB("ebx")); # 13
&shl ($acc,24); # 7
&or ("ecx",$acc); # 7
- &movz ($acc,&HB("ebx")); # 13
- &movz ($acc,&BP(-128,$tbl,$acc,1)); # 13
+ &movz ($acc,&BP(-128,$tbl,$key,1)); # 13
+ &movz ($key,&LB("eax")); # 6
&shl ($acc,8); # 13
+ &movd ("eax","mm2"); # 3, 2, 5, 4
&or ("ecx",$acc); # 13
- &movd ("mm0","ecx"); # t[0] collected
- &movz ($acc,&LB("eax")); # 6
- &movd ("eax","mm2"); # 3, 2, 5, 4
- &movz ("ecx",&BP(-128,$tbl,$acc,1)); # 6
- &shl ("ecx",16); # 6
- &movz ($acc,&LB("ebx")); # 12
+ &movz ($acc,&BP(-128,$tbl,$key,1)); # 6
+ &movz ($key,&LB("ebx")); # 12
+ &shl ($acc,16); # 6
&movd ("ebx","mm6"); # 9, 8,15,14
- &movz ($acc,&BP(-128,$tbl,$acc,1)); # 12
+ &movd ("mm0","ecx"); # t[0] collected
+ &movz ("ecx",&BP(-128,$tbl,$key,1)); # 12
+ &movz ($key,&LB("eax")); # 4
&or ("ecx",$acc); # 12
- &movz ($acc,&LB("eax")); # 4
- &movz ($acc,&BP(-128,$tbl,$acc,1)); # 4
+ &movz ($acc,&BP(-128,$tbl,$key,1)); # 4
+ &movz ($key,&LB("ebx")); # 14
&or ("edx",$acc); # 4
- &movz ($acc,&LB("ebx")); # 14
- &movz ($acc,&BP(-128,$tbl,$acc,1)); # 14
+ &movz ($acc,&BP(-128,$tbl,$key,1)); # 14
+ &movz ($key,&HB("eax")); # 5
&shl ($acc,16); # 14
+ &shr ("eax",16); # 3, 2
&or ("edx",$acc); # 14
- &movd ("mm1","edx"); # t[1] collected
- &movz ($acc,&HB("eax")); # 5
- &movz ("edx",&BP(-128,$tbl,$acc,1)); # 5
- &shl ("edx",8); # 5
- &movz ($acc,&HB("ebx")); # 15
- &shr ("eax",16); # 3, 2
- &movz ($acc,&BP(-128,$tbl,$acc,1)); # 15
- &shl ($acc,24); # 15
- &or ("edx",$acc); # 15
+ &movz ($acc,&BP(-128,$tbl,$key,1)); # 5
+ &movz ($key,&HB("ebx")); # 15
&shr ("ebx",16); # 9, 8
+ &shl ($acc,8); # 5
+ &movd ("mm1","edx"); # t[1] collected
+ &movz ("edx",&BP(-128,$tbl,$key,1)); # 15
+ &movz ($key,&HB("ebx")); # 9
+ &shl ("edx",24); # 15
+ &and ("ebx",0xff); # 8
+ &or ("edx",$acc); # 15
&punpckldq ("mm0","mm1"); # t[0,1] collected
- &movz ($acc,&HB("ebx")); # 9
- &movz ($acc,&BP(-128,$tbl,$acc,1)); # 9
+ &movz ($acc,&BP(-128,$tbl,$key,1)); # 9
+ &movz ($key,&LB("eax")); # 2
&shl ($acc,8); # 9
- &or ("ecx",$acc); # 9
- &and ("ebx",0xff); # 8
+ &movz ("eax",&HB("eax")); # 3
&movz ("ebx",&BP(-128,$tbl,"ebx",1)); # 8
+ &or ("ecx",$acc); # 9
+ &movz ($acc,&BP(-128,$tbl,$key,1)); # 2
&or ("edx","ebx"); # 8
- &movz ($acc,&LB("eax")); # 2
- &movz ($acc,&BP(-128,$tbl,$acc,1)); # 2
&shl ($acc,16); # 2
- &or ("edx",$acc); # 2
- &movd ("mm4","edx"); # t[2] collected
- &movz ("eax",&HB("eax")); # 3
&movz ("eax",&BP(-128,$tbl,"eax",1)); # 3
+ &or ("edx",$acc); # 2
&shl ("eax",24); # 3
&or ("ecx","eax"); # 3
+ &mov ($key,$__key);
+ &movd ("mm4","edx"); # t[2] collected
&movd ("mm5","ecx"); # t[3] collected
&punpckldq ("mm4","mm5"); # t[2,3] collected
@@ -2181,8 +2188,8 @@ my $mark=&DWP(76+240,"esp"); # copy of aes_key->rounds
&mov ("ecx",240/4);
&xor ("eax","eax");
&align (4);
- &data_word(0xABF3F689); # rep stosd
- &set_label("skip_ezero")
+ &data_word(0xABF3F689); # rep stosd
+ &set_label("skip_ezero");
&mov ("esp",$_esp);
&popf ();
&set_label("drop_out");
@@ -2301,8 +2308,8 @@ my $mark=&DWP(76+240,"esp"); # copy of aes_key->rounds
&mov ("ecx",240/4);
&xor ("eax","eax");
&align (4);
- &data_word(0xABF3F689); # rep stosd
- &set_label("skip_dzero")
+ &data_word(0xABF3F689); # rep stosd
+ &set_label("skip_dzero");
&mov ("esp",$_esp);
&popf ();
&function_end_A();
@@ -2865,32 +2872,32 @@ sub deckey()
{ my ($i,$key,$tp1,$tp2,$tp4,$tp8) = @_;
my $tmp = $tbl;
- &mov ($acc,$tp1);
- &and ($acc,0x80808080);
- &mov ($tmp,$acc);
- &shr ($tmp,7);
+ &mov ($tmp,0x80808080);
+ &and ($tmp,$tp1);
&lea ($tp2,&DWP(0,$tp1,$tp1));
+ &mov ($acc,$tmp);
+ &shr ($tmp,7);
&sub ($acc,$tmp);
&and ($tp2,0xfefefefe);
&and ($acc,0x1b1b1b1b);
- &xor ($acc,$tp2);
- &mov ($tp2,$acc);
+ &xor ($tp2,$acc);
+ &mov ($tmp,0x80808080);
- &and ($acc,0x80808080);
- &mov ($tmp,$acc);
- &shr ($tmp,7);
+ &and ($tmp,$tp2);
&lea ($tp4,&DWP(0,$tp2,$tp2));
+ &mov ($acc,$tmp);
+ &shr ($tmp,7);
&sub ($acc,$tmp);
&and ($tp4,0xfefefefe);
&and ($acc,0x1b1b1b1b);
&xor ($tp2,$tp1); # tp2^tp1
- &xor ($acc,$tp4);
- &mov ($tp4,$acc);
+ &xor ($tp4,$acc);
+ &mov ($tmp,0x80808080);
- &and ($acc,0x80808080);
- &mov ($tmp,$acc);
- &shr ($tmp,7);
+ &and ($tmp,$tp4);
&lea ($tp8,&DWP(0,$tp4,$tp4));
+ &mov ($acc,$tmp);
+ &shr ($tmp,7);
&xor ($tp4,$tp1); # tp4^tp1
&sub ($acc,$tmp);
&and ($tp8,0xfefefefe);
diff --git a/crypto/openssl/crypto/aes/asm/aes-armv4.pl b/crypto/openssl/crypto/aes/asm/aes-armv4.pl
index 86b86c4..4f89170 100755
--- a/crypto/openssl/crypto/aes/asm/aes-armv4.pl
+++ b/crypto/openssl/crypto/aes/asm/aes-armv4.pl
@@ -1,7 +1,7 @@
#!/usr/bin/env perl
# ====================================================================
-# Written by Andy Polyakov <appro@fy.chalmers.se> for the OpenSSL
+# Written by Andy Polyakov <appro@openssl.org> for the OpenSSL
# project. The module is, however, dual licensed under OpenSSL and
# CRYPTOGAMS licenses depending on where you obtain it. For further
# details see http://www.openssl.org/~appro/cryptogams/.
@@ -51,9 +51,23 @@ $key="r11";
$rounds="r12";
$code=<<___;
-#include "arm_arch.h"
+#ifndef __KERNEL__
+# include "arm_arch.h"
+#else
+# define __ARM_ARCH__ __LINUX_ARM_ARCH__
+#endif
+
.text
+#if __ARM_ARCH__<7
+.code 32
+#else
+.syntax unified
+# ifdef __thumb2__
+.thumb
+# else
.code 32
+# endif
+#endif
.type AES_Te,%object
.align 5
@@ -167,7 +181,11 @@ AES_Te:
.type AES_encrypt,%function
.align 5
AES_encrypt:
+#if __ARM_ARCH__<7
sub r3,pc,#8 @ AES_encrypt
+#else
+ adr r3,AES_encrypt
+#endif
stmdb sp!,{r1,r4-r12,lr}
mov $rounds,r0 @ inp
mov $key,r2
@@ -409,11 +427,21 @@ _armv4_AES_encrypt:
.align 5
private_AES_set_encrypt_key:
_armv4_AES_set_encrypt_key:
+#if __ARM_ARCH__<7
sub r3,pc,#8 @ AES_set_encrypt_key
+#else
+ adr r3,private_AES_set_encrypt_key
+#endif
teq r0,#0
+#if __ARM_ARCH__>=7
+ itt eq @ Thumb2 thing, sanity check in ARM
+#endif
moveq r0,#-1
beq .Labrt
teq r2,#0
+#if __ARM_ARCH__>=7
+ itt eq @ Thumb2 thing, sanity check in ARM
+#endif
moveq r0,#-1
beq .Labrt
@@ -422,6 +450,9 @@ _armv4_AES_set_encrypt_key:
teq r1,#192
beq .Lok
teq r1,#256
+#if __ARM_ARCH__>=7
+ itt ne @ Thumb2 thing, sanity check in ARM
+#endif
movne r0,#-1
bne .Labrt
@@ -576,6 +607,9 @@ _armv4_AES_set_encrypt_key:
str $s2,[$key,#-16]
subs $rounds,$rounds,#1
str $s3,[$key,#-12]
+#if __ARM_ARCH__>=7
+ itt eq @ Thumb2 thing, sanity check in ARM
+#endif
subeq r2,$key,#216
beq .Ldone
@@ -645,6 +679,9 @@ _armv4_AES_set_encrypt_key:
str $s2,[$key,#-24]
subs $rounds,$rounds,#1
str $s3,[$key,#-20]
+#if __ARM_ARCH__>=7
+ itt eq @ Thumb2 thing, sanity check in ARM
+#endif
subeq r2,$key,#256
beq .Ldone
@@ -674,11 +711,17 @@ _armv4_AES_set_encrypt_key:
str $i3,[$key,#-4]
b .L256_loop
+.align 2
.Ldone: mov r0,#0
ldmia sp!,{r4-r12,lr}
-.Labrt: tst lr,#1
+.Labrt:
+#if __ARM_ARCH__>=5
+ ret @ bx lr
+#else
+ tst lr,#1
moveq pc,lr @ be binary compatible with V4, yet
bx lr @ interoperable with Thumb ISA:-)
+#endif
.size private_AES_set_encrypt_key,.-private_AES_set_encrypt_key
.global private_AES_set_decrypt_key
@@ -688,34 +731,57 @@ private_AES_set_decrypt_key:
str lr,[sp,#-4]! @ push lr
bl _armv4_AES_set_encrypt_key
teq r0,#0
- ldrne lr,[sp],#4 @ pop lr
+ ldr lr,[sp],#4 @ pop lr
bne .Labrt
- stmdb sp!,{r4-r12}
+ mov r0,r2 @ AES_set_encrypt_key preserves r2,
+ mov r1,r2 @ which is AES_KEY *key
+ b _armv4_AES_set_enc2dec_key
+.size private_AES_set_decrypt_key,.-private_AES_set_decrypt_key
- ldr $rounds,[r2,#240] @ AES_set_encrypt_key preserves r2,
- mov $key,r2 @ which is AES_KEY *key
- mov $i1,r2
- add $i2,r2,$rounds,lsl#4
+@ void AES_set_enc2dec_key(const AES_KEY *inp,AES_KEY *out)
+.global AES_set_enc2dec_key
+.type AES_set_enc2dec_key,%function
+.align 5
+AES_set_enc2dec_key:
+_armv4_AES_set_enc2dec_key:
+ stmdb sp!,{r4-r12,lr}
+
+ ldr $rounds,[r0,#240]
+ mov $i1,r0 @ input
+ add $i2,r0,$rounds,lsl#4
+ mov $key,r1 @ ouput
+ add $tbl,r1,$rounds,lsl#4
+ str $rounds,[r1,#240]
+
+.Linv: ldr $s0,[$i1],#16
+ ldr $s1,[$i1,#-12]
+ ldr $s2,[$i1,#-8]
+ ldr $s3,[$i1,#-4]
+ ldr $t1,[$i2],#-16
+ ldr $t2,[$i2,#16+4]
+ ldr $t3,[$i2,#16+8]
+ ldr $i3,[$i2,#16+12]
+ str $s0,[$tbl],#-16
+ str $s1,[$tbl,#16+4]
+ str $s2,[$tbl,#16+8]
+ str $s3,[$tbl,#16+12]
+ str $t1,[$key],#16
+ str $t2,[$key,#-12]
+ str $t3,[$key,#-8]
+ str $i3,[$key,#-4]
+ teq $i1,$i2
+ bne .Linv
-.Linv: ldr $s0,[$i1]
+ ldr $s0,[$i1]
ldr $s1,[$i1,#4]
ldr $s2,[$i1,#8]
ldr $s3,[$i1,#12]
- ldr $t1,[$i2]
- ldr $t2,[$i2,#4]
- ldr $t3,[$i2,#8]
- ldr $i3,[$i2,#12]
- str $s0,[$i2],#-16
- str $s1,[$i2,#16+4]
- str $s2,[$i2,#16+8]
- str $s3,[$i2,#16+12]
- str $t1,[$i1],#16
- str $t2,[$i1,#-12]
- str $t3,[$i1,#-8]
- str $i3,[$i1,#-4]
- teq $i1,$i2
- bne .Linv
+ str $s0,[$key]
+ str $s1,[$key,#4]
+ str $s2,[$key,#8]
+ str $s3,[$key,#12]
+ sub $key,$key,$rounds,lsl#3
___
$mask80=$i1;
$mask1b=$i2;
@@ -773,7 +839,7 @@ $code.=<<___;
moveq pc,lr @ be binary compatible with V4, yet
bx lr @ interoperable with Thumb ISA:-)
#endif
-.size private_AES_set_decrypt_key,.-private_AES_set_decrypt_key
+.size AES_set_enc2dec_key,.-AES_set_enc2dec_key
.type AES_Td,%object
.align 5
@@ -883,7 +949,11 @@ AES_Td:
.type AES_decrypt,%function
.align 5
AES_decrypt:
+#if __ARM_ARCH__<7
sub r3,pc,#8 @ AES_decrypt
+#else
+ adr r3,AES_decrypt
+#endif
stmdb sp!,{r1,r4-r12,lr}
mov $rounds,r0 @ inp
mov $key,r2
@@ -1080,8 +1150,9 @@ _armv4_AES_decrypt:
ldrb $t3,[$tbl,$i3] @ Td4[s0>>0]
and $i3,lr,$s1,lsr#8
+ add $s1,$tbl,$s1,lsr#24
ldrb $i1,[$tbl,$i1] @ Td4[s1>>0]
- ldrb $s1,[$tbl,$s1,lsr#24] @ Td4[s1>>24]
+ ldrb $s1,[$s1] @ Td4[s1>>24]
ldrb $i2,[$tbl,$i2] @ Td4[s1>>16]
eor $s0,$i1,$s0,lsl#24
ldrb $i3,[$tbl,$i3] @ Td4[s1>>8]
@@ -1094,7 +1165,8 @@ _armv4_AES_decrypt:
ldrb $i2,[$tbl,$i2] @ Td4[s2>>0]
and $i3,lr,$s2,lsr#16
- ldrb $s2,[$tbl,$s2,lsr#24] @ Td4[s2>>24]
+ add $s2,$tbl,$s2,lsr#24
+ ldrb $s2,[$s2] @ Td4[s2>>24]
eor $s0,$s0,$i1,lsl#8
ldrb $i3,[$tbl,$i3] @ Td4[s2>>16]
eor $s1,$i2,$s1,lsl#16
@@ -1106,8 +1178,9 @@ _armv4_AES_decrypt:
ldrb $i2,[$tbl,$i2] @ Td4[s3>>8]
and $i3,lr,$s3 @ i2
+ add $s3,$tbl,$s3,lsr#24
ldrb $i3,[$tbl,$i3] @ Td4[s3>>0]
- ldrb $s3,[$tbl,$s3,lsr#24] @ Td4[s3>>24]
+ ldrb $s3,[$s3] @ Td4[s3>>24]
eor $s0,$s0,$i1,lsl#16
ldr $i1,[$key,#0]
eor $s1,$s1,$i2,lsl#8
@@ -1130,5 +1203,15 @@ _armv4_AES_decrypt:
___
$code =~ s/\bbx\s+lr\b/.word\t0xe12fff1e/gm; # make it possible to compile with -march=armv4
+$code =~ s/\bret\b/bx\tlr/gm;
+
+open SELF,$0;
+while(<SELF>) {
+ next if (/^#!/);
+ last if (!s/^#/@/ and !/^$/);
+ print;
+}
+close SELF;
+
print $code;
close STDOUT; # enforce flush
diff --git a/crypto/openssl/crypto/aes/asm/aes-mips.pl b/crypto/openssl/crypto/aes/asm/aes-mips.pl
index 537c8d3..4de3ee2 100755
--- a/crypto/openssl/crypto/aes/asm/aes-mips.pl
+++ b/crypto/openssl/crypto/aes/asm/aes-mips.pl
@@ -20,6 +20,13 @@
# thing about this module is its endian neutrality, which means that
# it processes data without ever changing byte order...
+# September 2012
+#
+# Add MIPS32R2 (~10% less instructions) and SmartMIPS ASE (further
+# ~25% less instructions) code. Note that there is no run-time switch,
+# instead, code path is chosen upon pre-process time, pass -mips32r2
+# or/and -msmartmips.
+
######################################################################
# There is a number of MIPS ABI in use, O32 and N32/64 are most
# widely used. Then there is a new contender: NUBI. It appears that if
@@ -47,11 +54,12 @@
# ($s0,$s1,$s2,$s3,$s4,$s5,$s6,$s7)=map("\$$_",(16..23));
# ($gp,$sp,$fp,$ra)=map("\$$_",(28..31));
#
-$flavour = shift; # supported flavours are o32,n32,64,nubi32,nubi64
+$flavour = shift || "o32"; # supported flavours are o32,n32,64,nubi32,nubi64
if ($flavour =~ /64|n32/i) {
$PTR_ADD="dadd"; # incidentally works even on n32
$PTR_SUB="dsub"; # incidentally works even on n32
+ $PTR_INS="dins";
$REG_S="sd";
$REG_L="ld";
$PTR_SLL="dsll"; # incidentally works even on n32
@@ -59,6 +67,7 @@ if ($flavour =~ /64|n32/i) {
} else {
$PTR_ADD="add";
$PTR_SUB="sub";
+ $PTR_INS="ins";
$REG_S="sw";
$REG_L="lw";
$PTR_SLL="sll";
@@ -89,7 +98,11 @@ $code.=<<___;
# include <openssl/fipssyms.h>
#endif
-#if !defined(__vxworks) || defined(__pic__)
+#if defined(__mips_smartmips) && !defined(_MIPS_ARCH_MIPS32R2)
+#define _MIPS_ARCH_MIPS32R2
+#endif
+
+#if !defined(__mips_eabi) && (!defined(__vxworks) || defined(__pic__))
.option pic2
#endif
.set noat
@@ -125,6 +138,89 @@ _mips_AES_encrypt:
xor $s3,$t3
sub $cnt,1
+#if defined(__mips_smartmips)
+ ext $i0,$s1,16,8
+.Loop_enc:
+ ext $i1,$s2,16,8
+ ext $i2,$s3,16,8
+ ext $i3,$s0,16,8
+ lwxs $t0,$i0($Tbl) # Te1[s1>>16]
+ ext $i0,$s2,8,8
+ lwxs $t1,$i1($Tbl) # Te1[s2>>16]
+ ext $i1,$s3,8,8
+ lwxs $t2,$i2($Tbl) # Te1[s3>>16]
+ ext $i2,$s0,8,8
+ lwxs $t3,$i3($Tbl) # Te1[s0>>16]
+ ext $i3,$s1,8,8
+
+ lwxs $t4,$i0($Tbl) # Te2[s2>>8]
+ ext $i0,$s3,0,8
+ lwxs $t5,$i1($Tbl) # Te2[s3>>8]
+ ext $i1,$s0,0,8
+ lwxs $t6,$i2($Tbl) # Te2[s0>>8]
+ ext $i2,$s1,0,8
+ lwxs $t7,$i3($Tbl) # Te2[s1>>8]
+ ext $i3,$s2,0,8
+
+ lwxs $t8,$i0($Tbl) # Te3[s3]
+ ext $i0,$s0,24,8
+ lwxs $t9,$i1($Tbl) # Te3[s0]
+ ext $i1,$s1,24,8
+ lwxs $t10,$i2($Tbl) # Te3[s1]
+ ext $i2,$s2,24,8
+ lwxs $t11,$i3($Tbl) # Te3[s2]
+ ext $i3,$s3,24,8
+
+ rotr $t0,$t0,8
+ rotr $t1,$t1,8
+ rotr $t2,$t2,8
+ rotr $t3,$t3,8
+
+ rotr $t4,$t4,16
+ rotr $t5,$t5,16
+ rotr $t6,$t6,16
+ rotr $t7,$t7,16
+
+ xor $t0,$t4
+ lwxs $t4,$i0($Tbl) # Te0[s0>>24]
+ xor $t1,$t5
+ lwxs $t5,$i1($Tbl) # Te0[s1>>24]
+ xor $t2,$t6
+ lwxs $t6,$i2($Tbl) # Te0[s2>>24]
+ xor $t3,$t7
+ lwxs $t7,$i3($Tbl) # Te0[s3>>24]
+
+ rotr $t8,$t8,24
+ lw $s0,0($key0)
+ rotr $t9,$t9,24
+ lw $s1,4($key0)
+ rotr $t10,$t10,24
+ lw $s2,8($key0)
+ rotr $t11,$t11,24
+ lw $s3,12($key0)
+
+ xor $t0,$t8
+ xor $t1,$t9
+ xor $t2,$t10
+ xor $t3,$t11
+
+ xor $t0,$t4
+ xor $t1,$t5
+ xor $t2,$t6
+ xor $t3,$t7
+
+ sub $cnt,1
+ $PTR_ADD $key0,16
+ xor $s0,$t0
+ xor $s1,$t1
+ xor $s2,$t2
+ xor $s3,$t3
+ .set noreorder
+ bnez $cnt,.Loop_enc
+ ext $i0,$s1,16,8
+
+ _xtr $i0,$s1,16-2
+#else
_xtr $i0,$s1,16-2
.Loop_enc:
_xtr $i1,$s2,16-2
@@ -138,19 +234,29 @@ _mips_AES_encrypt:
$PTR_ADD $i1,$Tbl
$PTR_ADD $i2,$Tbl
$PTR_ADD $i3,$Tbl
+#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
+ lw $t0,0($i0) # Te1[s1>>16]
+ _xtr $i0,$s2,8-2
+ lw $t1,0($i1) # Te1[s2>>16]
+ _xtr $i1,$s3,8-2
+ lw $t2,0($i2) # Te1[s3>>16]
+ _xtr $i2,$s0,8-2
+ lw $t3,0($i3) # Te1[s0>>16]
+ _xtr $i3,$s1,8-2
+#else
lwl $t0,3($i0) # Te1[s1>>16]
lwl $t1,3($i1) # Te1[s2>>16]
lwl $t2,3($i2) # Te1[s3>>16]
lwl $t3,3($i3) # Te1[s0>>16]
lwr $t0,2($i0) # Te1[s1>>16]
- lwr $t1,2($i1) # Te1[s2>>16]
- lwr $t2,2($i2) # Te1[s3>>16]
- lwr $t3,2($i3) # Te1[s0>>16]
-
_xtr $i0,$s2,8-2
+ lwr $t1,2($i1) # Te1[s2>>16]
_xtr $i1,$s3,8-2
+ lwr $t2,2($i2) # Te1[s3>>16]
_xtr $i2,$s0,8-2
+ lwr $t3,2($i3) # Te1[s0>>16]
_xtr $i3,$s1,8-2
+#endif
and $i0,0x3fc
and $i1,0x3fc
and $i2,0x3fc
@@ -159,19 +265,88 @@ _mips_AES_encrypt:
$PTR_ADD $i1,$Tbl
$PTR_ADD $i2,$Tbl
$PTR_ADD $i3,$Tbl
+#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
+ rotr $t0,$t0,8
+ rotr $t1,$t1,8
+ rotr $t2,$t2,8
+ rotr $t3,$t3,8
+# if defined(_MIPSEL)
+ lw $t4,0($i0) # Te2[s2>>8]
+ _xtr $i0,$s3,0-2
+ lw $t5,0($i1) # Te2[s3>>8]
+ _xtr $i1,$s0,0-2
+ lw $t6,0($i2) # Te2[s0>>8]
+ _xtr $i2,$s1,0-2
+ lw $t7,0($i3) # Te2[s1>>8]
+ _xtr $i3,$s2,0-2
+
+ and $i0,0x3fc
+ and $i1,0x3fc
+ and $i2,0x3fc
+ and $i3,0x3fc
+ $PTR_ADD $i0,$Tbl
+ $PTR_ADD $i1,$Tbl
+ $PTR_ADD $i2,$Tbl
+ $PTR_ADD $i3,$Tbl
+ lw $t8,0($i0) # Te3[s3]
+ $PTR_INS $i0,$s0,2,8
+ lw $t9,0($i1) # Te3[s0]
+ $PTR_INS $i1,$s1,2,8
+ lw $t10,0($i2) # Te3[s1]
+ $PTR_INS $i2,$s2,2,8
+ lw $t11,0($i3) # Te3[s2]
+ $PTR_INS $i3,$s3,2,8
+# else
+ lw $t4,0($i0) # Te2[s2>>8]
+ $PTR_INS $i0,$s3,2,8
+ lw $t5,0($i1) # Te2[s3>>8]
+ $PTR_INS $i1,$s0,2,8
+ lw $t6,0($i2) # Te2[s0>>8]
+ $PTR_INS $i2,$s1,2,8
+ lw $t7,0($i3) # Te2[s1>>8]
+ $PTR_INS $i3,$s2,2,8
+
+ lw $t8,0($i0) # Te3[s3]
+ _xtr $i0,$s0,24-2
+ lw $t9,0($i1) # Te3[s0]
+ _xtr $i1,$s1,24-2
+ lw $t10,0($i2) # Te3[s1]
+ _xtr $i2,$s2,24-2
+ lw $t11,0($i3) # Te3[s2]
+ _xtr $i3,$s3,24-2
+
+ and $i0,0x3fc
+ and $i1,0x3fc
+ and $i2,0x3fc
+ and $i3,0x3fc
+ $PTR_ADD $i0,$Tbl
+ $PTR_ADD $i1,$Tbl
+ $PTR_ADD $i2,$Tbl
+ $PTR_ADD $i3,$Tbl
+# endif
+ rotr $t4,$t4,16
+ rotr $t5,$t5,16
+ rotr $t6,$t6,16
+ rotr $t7,$t7,16
+
+ rotr $t8,$t8,24
+ rotr $t9,$t9,24
+ rotr $t10,$t10,24
+ rotr $t11,$t11,24
+#else
lwl $t4,2($i0) # Te2[s2>>8]
lwl $t5,2($i1) # Te2[s3>>8]
lwl $t6,2($i2) # Te2[s0>>8]
lwl $t7,2($i3) # Te2[s1>>8]
lwr $t4,1($i0) # Te2[s2>>8]
- lwr $t5,1($i1) # Te2[s3>>8]
- lwr $t6,1($i2) # Te2[s0>>8]
- lwr $t7,1($i3) # Te2[s1>>8]
-
_xtr $i0,$s3,0-2
+ lwr $t5,1($i1) # Te2[s3>>8]
_xtr $i1,$s0,0-2
+ lwr $t6,1($i2) # Te2[s0>>8]
_xtr $i2,$s1,0-2
+ lwr $t7,1($i3) # Te2[s1>>8]
_xtr $i3,$s2,0-2
+
and $i0,0x3fc
and $i1,0x3fc
and $i2,0x3fc
@@ -185,14 +360,14 @@ _mips_AES_encrypt:
lwl $t10,1($i2) # Te3[s1]
lwl $t11,1($i3) # Te3[s2]
lwr $t8,0($i0) # Te3[s3]
- lwr $t9,0($i1) # Te3[s0]
- lwr $t10,0($i2) # Te3[s1]
- lwr $t11,0($i3) # Te3[s2]
-
_xtr $i0,$s0,24-2
+ lwr $t9,0($i1) # Te3[s0]
_xtr $i1,$s1,24-2
+ lwr $t10,0($i2) # Te3[s1]
_xtr $i2,$s2,24-2
+ lwr $t11,0($i3) # Te3[s2]
_xtr $i3,$s3,24-2
+
and $i0,0x3fc
and $i1,0x3fc
and $i2,0x3fc
@@ -201,24 +376,24 @@ _mips_AES_encrypt:
$PTR_ADD $i1,$Tbl
$PTR_ADD $i2,$Tbl
$PTR_ADD $i3,$Tbl
+#endif
xor $t0,$t4
- xor $t1,$t5
- xor $t2,$t6
- xor $t3,$t7
lw $t4,0($i0) # Te0[s0>>24]
+ xor $t1,$t5
lw $t5,0($i1) # Te0[s1>>24]
+ xor $t2,$t6
lw $t6,0($i2) # Te0[s2>>24]
+ xor $t3,$t7
lw $t7,0($i3) # Te0[s3>>24]
- lw $s0,0($key0)
- lw $s1,4($key0)
- lw $s2,8($key0)
- lw $s3,12($key0)
-
xor $t0,$t8
+ lw $s0,0($key0)
xor $t1,$t9
+ lw $s1,4($key0)
xor $t2,$t10
+ lw $s2,8($key0)
xor $t3,$t11
+ lw $s3,12($key0)
xor $t0,$t4
xor $t1,$t5
@@ -234,6 +409,7 @@ _mips_AES_encrypt:
.set noreorder
bnez $cnt,.Loop_enc
_xtr $i0,$s1,16-2
+#endif
.set reorder
_xtr $i1,$s2,16-2
@@ -248,14 +424,14 @@ _mips_AES_encrypt:
$PTR_ADD $i2,$Tbl
$PTR_ADD $i3,$Tbl
lbu $t0,2($i0) # Te4[s1>>16]
- lbu $t1,2($i1) # Te4[s2>>16]
- lbu $t2,2($i2) # Te4[s3>>16]
- lbu $t3,2($i3) # Te4[s0>>16]
-
_xtr $i0,$s2,8-2
+ lbu $t1,2($i1) # Te4[s2>>16]
_xtr $i1,$s3,8-2
+ lbu $t2,2($i2) # Te4[s3>>16]
_xtr $i2,$s0,8-2
+ lbu $t3,2($i3) # Te4[s0>>16]
_xtr $i3,$s1,8-2
+
and $i0,0x3fc
and $i1,0x3fc
and $i2,0x3fc
@@ -264,15 +440,44 @@ _mips_AES_encrypt:
$PTR_ADD $i1,$Tbl
$PTR_ADD $i2,$Tbl
$PTR_ADD $i3,$Tbl
+#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
+# if defined(_MIPSEL)
lbu $t4,2($i0) # Te4[s2>>8]
+ $PTR_INS $i0,$s0,2,8
lbu $t5,2($i1) # Te4[s3>>8]
+ $PTR_INS $i1,$s1,2,8
lbu $t6,2($i2) # Te4[s0>>8]
+ $PTR_INS $i2,$s2,2,8
lbu $t7,2($i3) # Te4[s1>>8]
+ $PTR_INS $i3,$s3,2,8
+ lbu $t8,2($i0) # Te4[s0>>24]
+ _xtr $i0,$s3,0-2
+ lbu $t9,2($i1) # Te4[s1>>24]
+ _xtr $i1,$s0,0-2
+ lbu $t10,2($i2) # Te4[s2>>24]
+ _xtr $i2,$s1,0-2
+ lbu $t11,2($i3) # Te4[s3>>24]
+ _xtr $i3,$s2,0-2
+
+ and $i0,0x3fc
+ and $i1,0x3fc
+ and $i2,0x3fc
+ and $i3,0x3fc
+ $PTR_ADD $i0,$Tbl
+ $PTR_ADD $i1,$Tbl
+ $PTR_ADD $i2,$Tbl
+ $PTR_ADD $i3,$Tbl
+# else
+ lbu $t4,2($i0) # Te4[s2>>8]
_xtr $i0,$s0,24-2
+ lbu $t5,2($i1) # Te4[s3>>8]
_xtr $i1,$s1,24-2
+ lbu $t6,2($i2) # Te4[s0>>8]
_xtr $i2,$s2,24-2
+ lbu $t7,2($i3) # Te4[s1>>8]
_xtr $i3,$s3,24-2
+
and $i0,0x3fc
and $i1,0x3fc
and $i2,0x3fc
@@ -282,18 +487,76 @@ _mips_AES_encrypt:
$PTR_ADD $i2,$Tbl
$PTR_ADD $i3,$Tbl
lbu $t8,2($i0) # Te4[s0>>24]
+ $PTR_INS $i0,$s3,2,8
lbu $t9,2($i1) # Te4[s1>>24]
+ $PTR_INS $i1,$s0,2,8
lbu $t10,2($i2) # Te4[s2>>24]
+ $PTR_INS $i2,$s1,2,8
lbu $t11,2($i3) # Te4[s3>>24]
+ $PTR_INS $i3,$s2,2,8
+# endif
+ _ins $t0,16
+ _ins $t1,16
+ _ins $t2,16
+ _ins $t3,16
+ _ins2 $t0,$t4,8
+ lbu $t4,2($i0) # Te4[s3]
+ _ins2 $t1,$t5,8
+ lbu $t5,2($i1) # Te4[s0]
+ _ins2 $t2,$t6,8
+ lbu $t6,2($i2) # Te4[s1]
+ _ins2 $t3,$t7,8
+ lbu $t7,2($i3) # Te4[s2]
+
+ _ins2 $t0,$t8,24
+ lw $s0,0($key0)
+ _ins2 $t1,$t9,24
+ lw $s1,4($key0)
+ _ins2 $t2,$t10,24
+ lw $s2,8($key0)
+ _ins2 $t3,$t11,24
+ lw $s3,12($key0)
+
+ _ins2 $t0,$t4,0
+ _ins2 $t1,$t5,0
+ _ins2 $t2,$t6,0
+ _ins2 $t3,$t7,0
+#else
+ lbu $t4,2($i0) # Te4[s2>>8]
+ _xtr $i0,$s0,24-2
+ lbu $t5,2($i1) # Te4[s3>>8]
+ _xtr $i1,$s1,24-2
+ lbu $t6,2($i2) # Te4[s0>>8]
+ _xtr $i2,$s2,24-2
+ lbu $t7,2($i3) # Te4[s1>>8]
+ _xtr $i3,$s3,24-2
+
+ and $i0,0x3fc
+ and $i1,0x3fc
+ and $i2,0x3fc
+ and $i3,0x3fc
+ $PTR_ADD $i0,$Tbl
+ $PTR_ADD $i1,$Tbl
+ $PTR_ADD $i2,$Tbl
+ $PTR_ADD $i3,$Tbl
+ lbu $t8,2($i0) # Te4[s0>>24]
_xtr $i0,$s3,0-2
+ lbu $t9,2($i1) # Te4[s1>>24]
_xtr $i1,$s0,0-2
+ lbu $t10,2($i2) # Te4[s2>>24]
_xtr $i2,$s1,0-2
+ lbu $t11,2($i3) # Te4[s3>>24]
_xtr $i3,$s2,0-2
+
and $i0,0x3fc
and $i1,0x3fc
and $i2,0x3fc
and $i3,0x3fc
+ $PTR_ADD $i0,$Tbl
+ $PTR_ADD $i1,$Tbl
+ $PTR_ADD $i2,$Tbl
+ $PTR_ADD $i3,$Tbl
_ins $t0,16
_ins $t1,16
@@ -306,27 +569,21 @@ _mips_AES_encrypt:
_ins $t7,8
xor $t0,$t4
- xor $t1,$t5
- xor $t2,$t6
- xor $t3,$t7
-
- $PTR_ADD $i0,$Tbl
- $PTR_ADD $i1,$Tbl
- $PTR_ADD $i2,$Tbl
- $PTR_ADD $i3,$Tbl
lbu $t4,2($i0) # Te4[s3]
+ xor $t1,$t5
lbu $t5,2($i1) # Te4[s0]
+ xor $t2,$t6
lbu $t6,2($i2) # Te4[s1]
+ xor $t3,$t7
lbu $t7,2($i3) # Te4[s2]
_ins $t8,24
- _ins $t9,24
- _ins $t10,24
- _ins $t11,24
-
lw $s0,0($key0)
+ _ins $t9,24
lw $s1,4($key0)
+ _ins $t10,24
lw $s2,8($key0)
+ _ins $t11,24
lw $s3,12($key0)
xor $t0,$t8
@@ -343,7 +600,7 @@ _mips_AES_encrypt:
xor $t1,$t5
xor $t2,$t6
xor $t3,$t7
-
+#endif
xor $s0,$t0
xor $s1,$t1
xor $s2,$t2
@@ -455,6 +712,89 @@ _mips_AES_decrypt:
xor $s3,$t3
sub $cnt,1
+#if defined(__mips_smartmips)
+ ext $i0,$s3,16,8
+.Loop_dec:
+ ext $i1,$s0,16,8
+ ext $i2,$s1,16,8
+ ext $i3,$s2,16,8
+ lwxs $t0,$i0($Tbl) # Td1[s3>>16]
+ ext $i0,$s2,8,8
+ lwxs $t1,$i1($Tbl) # Td1[s0>>16]
+ ext $i1,$s3,8,8
+ lwxs $t2,$i2($Tbl) # Td1[s1>>16]
+ ext $i2,$s0,8,8
+ lwxs $t3,$i3($Tbl) # Td1[s2>>16]
+ ext $i3,$s1,8,8
+
+ lwxs $t4,$i0($Tbl) # Td2[s2>>8]
+ ext $i0,$s1,0,8
+ lwxs $t5,$i1($Tbl) # Td2[s3>>8]
+ ext $i1,$s2,0,8
+ lwxs $t6,$i2($Tbl) # Td2[s0>>8]
+ ext $i2,$s3,0,8
+ lwxs $t7,$i3($Tbl) # Td2[s1>>8]
+ ext $i3,$s0,0,8
+
+ lwxs $t8,$i0($Tbl) # Td3[s1]
+ ext $i0,$s0,24,8
+ lwxs $t9,$i1($Tbl) # Td3[s2]
+ ext $i1,$s1,24,8
+ lwxs $t10,$i2($Tbl) # Td3[s3]
+ ext $i2,$s2,24,8
+ lwxs $t11,$i3($Tbl) # Td3[s0]
+ ext $i3,$s3,24,8
+
+ rotr $t0,$t0,8
+ rotr $t1,$t1,8
+ rotr $t2,$t2,8
+ rotr $t3,$t3,8
+
+ rotr $t4,$t4,16
+ rotr $t5,$t5,16
+ rotr $t6,$t6,16
+ rotr $t7,$t7,16
+
+ xor $t0,$t4
+ lwxs $t4,$i0($Tbl) # Td0[s0>>24]
+ xor $t1,$t5
+ lwxs $t5,$i1($Tbl) # Td0[s1>>24]
+ xor $t2,$t6
+ lwxs $t6,$i2($Tbl) # Td0[s2>>24]
+ xor $t3,$t7
+ lwxs $t7,$i3($Tbl) # Td0[s3>>24]
+
+ rotr $t8,$t8,24
+ lw $s0,0($key0)
+ rotr $t9,$t9,24
+ lw $s1,4($key0)
+ rotr $t10,$t10,24
+ lw $s2,8($key0)
+ rotr $t11,$t11,24
+ lw $s3,12($key0)
+
+ xor $t0,$t8
+ xor $t1,$t9
+ xor $t2,$t10
+ xor $t3,$t11
+
+ xor $t0,$t4
+ xor $t1,$t5
+ xor $t2,$t6
+ xor $t3,$t7
+
+ sub $cnt,1
+ $PTR_ADD $key0,16
+ xor $s0,$t0
+ xor $s1,$t1
+ xor $s2,$t2
+ xor $s3,$t3
+ .set noreorder
+ bnez $cnt,.Loop_dec
+ ext $i0,$s3,16,8
+
+ _xtr $i0,$s3,16-2
+#else
_xtr $i0,$s3,16-2
.Loop_dec:
_xtr $i1,$s0,16-2
@@ -468,19 +808,88 @@ _mips_AES_decrypt:
$PTR_ADD $i1,$Tbl
$PTR_ADD $i2,$Tbl
$PTR_ADD $i3,$Tbl
+#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
+ lw $t0,0($i0) # Td1[s3>>16]
+ _xtr $i0,$s2,8-2
+ lw $t1,0($i1) # Td1[s0>>16]
+ _xtr $i1,$s3,8-2
+ lw $t2,0($i2) # Td1[s1>>16]
+ _xtr $i2,$s0,8-2
+ lw $t3,0($i3) # Td1[s2>>16]
+ _xtr $i3,$s1,8-2
+#else
lwl $t0,3($i0) # Td1[s3>>16]
lwl $t1,3($i1) # Td1[s0>>16]
lwl $t2,3($i2) # Td1[s1>>16]
lwl $t3,3($i3) # Td1[s2>>16]
lwr $t0,2($i0) # Td1[s3>>16]
- lwr $t1,2($i1) # Td1[s0>>16]
- lwr $t2,2($i2) # Td1[s1>>16]
- lwr $t3,2($i3) # Td1[s2>>16]
-
_xtr $i0,$s2,8-2
+ lwr $t1,2($i1) # Td1[s0>>16]
_xtr $i1,$s3,8-2
+ lwr $t2,2($i2) # Td1[s1>>16]
_xtr $i2,$s0,8-2
+ lwr $t3,2($i3) # Td1[s2>>16]
_xtr $i3,$s1,8-2
+#endif
+
+ and $i0,0x3fc
+ and $i1,0x3fc
+ and $i2,0x3fc
+ and $i3,0x3fc
+ $PTR_ADD $i0,$Tbl
+ $PTR_ADD $i1,$Tbl
+ $PTR_ADD $i2,$Tbl
+ $PTR_ADD $i3,$Tbl
+#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
+ rotr $t0,$t0,8
+ rotr $t1,$t1,8
+ rotr $t2,$t2,8
+ rotr $t3,$t3,8
+# if defined(_MIPSEL)
+ lw $t4,0($i0) # Td2[s2>>8]
+ _xtr $i0,$s1,0-2
+ lw $t5,0($i1) # Td2[s3>>8]
+ _xtr $i1,$s2,0-2
+ lw $t6,0($i2) # Td2[s0>>8]
+ _xtr $i2,$s3,0-2
+ lw $t7,0($i3) # Td2[s1>>8]
+ _xtr $i3,$s0,0-2
+
+ and $i0,0x3fc
+ and $i1,0x3fc
+ and $i2,0x3fc
+ and $i3,0x3fc
+ $PTR_ADD $i0,$Tbl
+ $PTR_ADD $i1,$Tbl
+ $PTR_ADD $i2,$Tbl
+ $PTR_ADD $i3,$Tbl
+ lw $t8,0($i0) # Td3[s1]
+ $PTR_INS $i0,$s0,2,8
+ lw $t9,0($i1) # Td3[s2]
+ $PTR_INS $i1,$s1,2,8
+ lw $t10,0($i2) # Td3[s3]
+ $PTR_INS $i2,$s2,2,8
+ lw $t11,0($i3) # Td3[s0]
+ $PTR_INS $i3,$s3,2,8
+#else
+ lw $t4,0($i0) # Td2[s2>>8]
+ $PTR_INS $i0,$s1,2,8
+ lw $t5,0($i1) # Td2[s3>>8]
+ $PTR_INS $i1,$s2,2,8
+ lw $t6,0($i2) # Td2[s0>>8]
+ $PTR_INS $i2,$s3,2,8
+ lw $t7,0($i3) # Td2[s1>>8]
+ $PTR_INS $i3,$s0,2,8
+
+ lw $t8,0($i0) # Td3[s1]
+ _xtr $i0,$s0,24-2
+ lw $t9,0($i1) # Td3[s2]
+ _xtr $i1,$s1,24-2
+ lw $t10,0($i2) # Td3[s3]
+ _xtr $i2,$s2,24-2
+ lw $t11,0($i3) # Td3[s0]
+ _xtr $i3,$s3,24-2
+
and $i0,0x3fc
and $i1,0x3fc
and $i2,0x3fc
@@ -489,19 +898,30 @@ _mips_AES_decrypt:
$PTR_ADD $i1,$Tbl
$PTR_ADD $i2,$Tbl
$PTR_ADD $i3,$Tbl
+#endif
+ rotr $t4,$t4,16
+ rotr $t5,$t5,16
+ rotr $t6,$t6,16
+ rotr $t7,$t7,16
+
+ rotr $t8,$t8,24
+ rotr $t9,$t9,24
+ rotr $t10,$t10,24
+ rotr $t11,$t11,24
+#else
lwl $t4,2($i0) # Td2[s2>>8]
lwl $t5,2($i1) # Td2[s3>>8]
lwl $t6,2($i2) # Td2[s0>>8]
lwl $t7,2($i3) # Td2[s1>>8]
lwr $t4,1($i0) # Td2[s2>>8]
- lwr $t5,1($i1) # Td2[s3>>8]
- lwr $t6,1($i2) # Td2[s0>>8]
- lwr $t7,1($i3) # Td2[s1>>8]
-
_xtr $i0,$s1,0-2
+ lwr $t5,1($i1) # Td2[s3>>8]
_xtr $i1,$s2,0-2
+ lwr $t6,1($i2) # Td2[s0>>8]
_xtr $i2,$s3,0-2
+ lwr $t7,1($i3) # Td2[s1>>8]
_xtr $i3,$s0,0-2
+
and $i0,0x3fc
and $i1,0x3fc
and $i2,0x3fc
@@ -515,14 +935,14 @@ _mips_AES_decrypt:
lwl $t10,1($i2) # Td3[s3]
lwl $t11,1($i3) # Td3[s0]
lwr $t8,0($i0) # Td3[s1]
- lwr $t9,0($i1) # Td3[s2]
- lwr $t10,0($i2) # Td3[s3]
- lwr $t11,0($i3) # Td3[s0]
-
_xtr $i0,$s0,24-2
+ lwr $t9,0($i1) # Td3[s2]
_xtr $i1,$s1,24-2
+ lwr $t10,0($i2) # Td3[s3]
_xtr $i2,$s2,24-2
+ lwr $t11,0($i3) # Td3[s0]
_xtr $i3,$s3,24-2
+
and $i0,0x3fc
and $i1,0x3fc
and $i2,0x3fc
@@ -531,27 +951,25 @@ _mips_AES_decrypt:
$PTR_ADD $i1,$Tbl
$PTR_ADD $i2,$Tbl
$PTR_ADD $i3,$Tbl
+#endif
xor $t0,$t4
- xor $t1,$t5
- xor $t2,$t6
- xor $t3,$t7
-
-
lw $t4,0($i0) # Td0[s0>>24]
+ xor $t1,$t5
lw $t5,0($i1) # Td0[s1>>24]
+ xor $t2,$t6
lw $t6,0($i2) # Td0[s2>>24]
+ xor $t3,$t7
lw $t7,0($i3) # Td0[s3>>24]
- lw $s0,0($key0)
- lw $s1,4($key0)
- lw $s2,8($key0)
- lw $s3,12($key0)
-
xor $t0,$t8
+ lw $s0,0($key0)
xor $t1,$t9
+ lw $s1,4($key0)
xor $t2,$t10
+ lw $s2,8($key0)
xor $t3,$t11
+ lw $s3,12($key0)
xor $t0,$t4
xor $t1,$t5
@@ -567,38 +985,39 @@ _mips_AES_decrypt:
.set noreorder
bnez $cnt,.Loop_dec
_xtr $i0,$s3,16-2
+#endif
.set reorder
lw $t4,1024($Tbl) # prefetch Td4
- lw $t5,1024+32($Tbl)
- lw $t6,1024+64($Tbl)
- lw $t7,1024+96($Tbl)
- lw $t8,1024+128($Tbl)
- lw $t9,1024+160($Tbl)
- lw $t10,1024+192($Tbl)
- lw $t11,1024+224($Tbl)
-
_xtr $i0,$s3,16
+ lw $t5,1024+32($Tbl)
_xtr $i1,$s0,16
+ lw $t6,1024+64($Tbl)
_xtr $i2,$s1,16
+ lw $t7,1024+96($Tbl)
_xtr $i3,$s2,16
+ lw $t8,1024+128($Tbl)
and $i0,0xff
+ lw $t9,1024+160($Tbl)
and $i1,0xff
+ lw $t10,1024+192($Tbl)
and $i2,0xff
+ lw $t11,1024+224($Tbl)
and $i3,0xff
+
$PTR_ADD $i0,$Tbl
$PTR_ADD $i1,$Tbl
$PTR_ADD $i2,$Tbl
$PTR_ADD $i3,$Tbl
lbu $t0,1024($i0) # Td4[s3>>16]
- lbu $t1,1024($i1) # Td4[s0>>16]
- lbu $t2,1024($i2) # Td4[s1>>16]
- lbu $t3,1024($i3) # Td4[s2>>16]
-
_xtr $i0,$s2,8
+ lbu $t1,1024($i1) # Td4[s0>>16]
_xtr $i1,$s3,8
+ lbu $t2,1024($i2) # Td4[s1>>16]
_xtr $i2,$s0,8
+ lbu $t3,1024($i3) # Td4[s2>>16]
_xtr $i3,$s1,8
+
and $i0,0xff
and $i1,0xff
and $i2,0xff
@@ -607,29 +1026,108 @@ _mips_AES_decrypt:
$PTR_ADD $i1,$Tbl
$PTR_ADD $i2,$Tbl
$PTR_ADD $i3,$Tbl
+#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
+# if defined(_MIPSEL)
lbu $t4,1024($i0) # Td4[s2>>8]
+ $PTR_INS $i0,$s0,0,8
lbu $t5,1024($i1) # Td4[s3>>8]
+ $PTR_INS $i1,$s1,0,8
lbu $t6,1024($i2) # Td4[s0>>8]
+ $PTR_INS $i2,$s2,0,8
lbu $t7,1024($i3) # Td4[s1>>8]
+ $PTR_INS $i3,$s3,0,8
+ lbu $t8,1024($i0) # Td4[s0>>24]
+ _xtr $i0,$s1,0
+ lbu $t9,1024($i1) # Td4[s1>>24]
+ _xtr $i1,$s2,0
+ lbu $t10,1024($i2) # Td4[s2>>24]
+ _xtr $i2,$s3,0
+ lbu $t11,1024($i3) # Td4[s3>>24]
+ _xtr $i3,$s0,0
+
+ $PTR_ADD $i0,$Tbl
+ $PTR_ADD $i1,$Tbl
+ $PTR_ADD $i2,$Tbl
+ $PTR_ADD $i3,$Tbl
+# else
+ lbu $t4,1024($i0) # Td4[s2>>8]
_xtr $i0,$s0,24
+ lbu $t5,1024($i1) # Td4[s3>>8]
_xtr $i1,$s1,24
+ lbu $t6,1024($i2) # Td4[s0>>8]
_xtr $i2,$s2,24
+ lbu $t7,1024($i3) # Td4[s1>>8]
_xtr $i3,$s3,24
+
$PTR_ADD $i0,$Tbl
$PTR_ADD $i1,$Tbl
$PTR_ADD $i2,$Tbl
$PTR_ADD $i3,$Tbl
lbu $t8,1024($i0) # Td4[s0>>24]
+ $PTR_INS $i0,$s1,0,8
lbu $t9,1024($i1) # Td4[s1>>24]
+ $PTR_INS $i1,$s2,0,8
lbu $t10,1024($i2) # Td4[s2>>24]
+ $PTR_INS $i2,$s3,0,8
lbu $t11,1024($i3) # Td4[s3>>24]
+ $PTR_INS $i3,$s0,0,8
+# endif
+ _ins $t0,16
+ _ins $t1,16
+ _ins $t2,16
+ _ins $t3,16
+
+ _ins2 $t0,$t4,8
+ lbu $t4,1024($i0) # Td4[s1]
+ _ins2 $t1,$t5,8
+ lbu $t5,1024($i1) # Td4[s2]
+ _ins2 $t2,$t6,8
+ lbu $t6,1024($i2) # Td4[s3]
+ _ins2 $t3,$t7,8
+ lbu $t7,1024($i3) # Td4[s0]
+
+ _ins2 $t0,$t8,24
+ lw $s0,0($key0)
+ _ins2 $t1,$t9,24
+ lw $s1,4($key0)
+ _ins2 $t2,$t10,24
+ lw $s2,8($key0)
+ _ins2 $t3,$t11,24
+ lw $s3,12($key0)
+ _ins2 $t0,$t4,0
+ _ins2 $t1,$t5,0
+ _ins2 $t2,$t6,0
+ _ins2 $t3,$t7,0
+#else
+ lbu $t4,1024($i0) # Td4[s2>>8]
+ _xtr $i0,$s0,24
+ lbu $t5,1024($i1) # Td4[s3>>8]
+ _xtr $i1,$s1,24
+ lbu $t6,1024($i2) # Td4[s0>>8]
+ _xtr $i2,$s2,24
+ lbu $t7,1024($i3) # Td4[s1>>8]
+ _xtr $i3,$s3,24
+
+ $PTR_ADD $i0,$Tbl
+ $PTR_ADD $i1,$Tbl
+ $PTR_ADD $i2,$Tbl
+ $PTR_ADD $i3,$Tbl
+ lbu $t8,1024($i0) # Td4[s0>>24]
_xtr $i0,$s1,0
+ lbu $t9,1024($i1) # Td4[s1>>24]
_xtr $i1,$s2,0
+ lbu $t10,1024($i2) # Td4[s2>>24]
_xtr $i2,$s3,0
+ lbu $t11,1024($i3) # Td4[s3>>24]
_xtr $i3,$s0,0
+ $PTR_ADD $i0,$Tbl
+ $PTR_ADD $i1,$Tbl
+ $PTR_ADD $i2,$Tbl
+ $PTR_ADD $i3,$Tbl
+
_ins $t0,16
_ins $t1,16
_ins $t2,16
@@ -641,44 +1139,38 @@ _mips_AES_decrypt:
_ins $t7,8
xor $t0,$t4
- xor $t1,$t5
- xor $t2,$t6
- xor $t3,$t7
-
- $PTR_ADD $i0,$Tbl
- $PTR_ADD $i1,$Tbl
- $PTR_ADD $i2,$Tbl
- $PTR_ADD $i3,$Tbl
lbu $t4,1024($i0) # Td4[s1]
+ xor $t1,$t5
lbu $t5,1024($i1) # Td4[s2]
+ xor $t2,$t6
lbu $t6,1024($i2) # Td4[s3]
+ xor $t3,$t7
lbu $t7,1024($i3) # Td4[s0]
_ins $t8,24
- _ins $t9,24
- _ins $t10,24
- _ins $t11,24
-
lw $s0,0($key0)
+ _ins $t9,24
lw $s1,4($key0)
+ _ins $t10,24
lw $s2,8($key0)
+ _ins $t11,24
lw $s3,12($key0)
- _ins $t4,0
- _ins $t5,0
- _ins $t6,0
- _ins $t7,0
-
-
xor $t0,$t8
xor $t1,$t9
xor $t2,$t10
xor $t3,$t11
+ _ins $t4,0
+ _ins $t5,0
+ _ins $t6,0
+ _ins $t7,0
+
xor $t0,$t4
xor $t1,$t5
xor $t2,$t6
xor $t3,$t7
+#endif
xor $s0,$t0
xor $s1,$t1
@@ -791,7 +1283,7 @@ _mips_AES_set_encrypt_key:
beqz $inp,.Lekey_done
li $t0,-1
beqz $key,.Lekey_done
- $PTR_ADD $rcon,$Tbl,1024+256
+ $PTR_ADD $rcon,$Tbl,256
.set reorder
lwl $rk0,0+$MSB($inp) # load 128 bits
@@ -843,10 +1335,10 @@ _mips_AES_set_encrypt_key:
$PTR_ADD $i1,$Tbl
$PTR_ADD $i2,$Tbl
$PTR_ADD $i3,$Tbl
- lbu $i0,1024($i0)
- lbu $i1,1024($i1)
- lbu $i2,1024($i2)
- lbu $i3,1024($i3)
+ lbu $i0,0($i0)
+ lbu $i1,0($i1)
+ lbu $i2,0($i2)
+ lbu $i3,0($i3)
sw $rk0,0($key)
sw $rk1,4($key)
@@ -898,10 +1390,10 @@ _mips_AES_set_encrypt_key:
$PTR_ADD $i1,$Tbl
$PTR_ADD $i2,$Tbl
$PTR_ADD $i3,$Tbl
- lbu $i0,1024($i0)
- lbu $i1,1024($i1)
- lbu $i2,1024($i2)
- lbu $i3,1024($i3)
+ lbu $i0,0($i0)
+ lbu $i1,0($i1)
+ lbu $i2,0($i2)
+ lbu $i3,0($i3)
sw $rk0,0($key)
sw $rk1,4($key)
@@ -957,10 +1449,10 @@ _mips_AES_set_encrypt_key:
$PTR_ADD $i1,$Tbl
$PTR_ADD $i2,$Tbl
$PTR_ADD $i3,$Tbl
- lbu $i0,1024($i0)
- lbu $i1,1024($i1)
- lbu $i2,1024($i2)
- lbu $i3,1024($i3)
+ lbu $i0,0($i0)
+ lbu $i1,0($i1)
+ lbu $i2,0($i2)
+ lbu $i3,0($i3)
sw $rk0,0($key)
sw $rk1,4($key)
@@ -999,10 +1491,10 @@ _mips_AES_set_encrypt_key:
$PTR_ADD $i1,$Tbl
$PTR_ADD $i2,$Tbl
$PTR_ADD $i3,$Tbl
- lbu $i0,1024($i0)
- lbu $i1,1024($i1)
- lbu $i2,1024($i2)
- lbu $i3,1024($i3)
+ lbu $i0,0($i0)
+ lbu $i1,0($i1)
+ lbu $i2,0($i2)
+ lbu $i3,0($i3)
sll $i0,24
sll $i1,16
sll $i2,8
@@ -1064,7 +1556,7 @@ $code.=<<___ if ($flavour !~ /o32/i); # non-o32 PIC-ification
___
$code.=<<___;
.set reorder
- la $Tbl,AES_Te # PIC-ified 'load address'
+ la $Tbl,AES_Te4 # PIC-ified 'load address'
bal _mips_AES_set_encrypt_key
@@ -1119,7 +1611,7 @@ $code.=<<___ if ($flavour !~ /o32/i); # non-o32 PIC-ification
___
$code.=<<___;
.set reorder
- la $Tbl,AES_Te # PIC-ified 'load address'
+ la $Tbl,AES_Te4 # PIC-ified 'load address'
bal _mips_AES_set_encrypt_key
@@ -1190,6 +1682,16 @@ $code.=<<___;
xor $tpb,$tp9,$tp2
xor $tpd,$tp9,$tp4
+#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
+ rotr $tp1,$tpd,16
+ xor $tpe,$tp2
+ rotr $tp2,$tp9,8
+ xor $tpe,$tp1
+ rotr $tp4,$tpb,24
+ xor $tpe,$tp2
+ lw $tp1,4($key) # modulo-scheduled
+ xor $tpe,$tp4
+#else
_ror $tp1,$tpd,16
xor $tpe,$tp2
_ror $tp2,$tpd,-16
@@ -1204,6 +1706,7 @@ $code.=<<___;
xor $tpe,$tp1
lw $tp1,4($key) # modulo-scheduled
xor $tpe,$tp2
+#endif
sub $cnt,1
sw $tpe,0($key)
$PTR_ADD $key,4
@@ -1234,7 +1737,7 @@ ___
# Tables are kept in endian-neutral manner
$code.=<<___;
.rdata
-.align 6
+.align 10
AES_Te:
.byte 0xc6,0x63,0x63,0xa5, 0xf8,0x7c,0x7c,0x84 # Te0
.byte 0xee,0x77,0x77,0x99, 0xf6,0x7b,0x7b,0x8d
@@ -1365,46 +1868,6 @@ AES_Te:
.byte 0x7b,0xb0,0xb0,0xcb, 0xa8,0x54,0x54,0xfc
.byte 0x6d,0xbb,0xbb,0xd6, 0x2c,0x16,0x16,0x3a
-.byte 0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5 # Te4
-.byte 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76
-.byte 0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0
-.byte 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0
-.byte 0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc
-.byte 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15
-.byte 0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a
-.byte 0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75
-.byte 0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0
-.byte 0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84
-.byte 0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b
-.byte 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf
-.byte 0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85
-.byte 0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8
-.byte 0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5
-.byte 0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2
-.byte 0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17
-.byte 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73
-.byte 0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88
-.byte 0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb
-.byte 0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c
-.byte 0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79
-.byte 0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9
-.byte 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08
-.byte 0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6
-.byte 0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a
-.byte 0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e
-.byte 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e
-.byte 0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94
-.byte 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf
-.byte 0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68
-.byte 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16
-
-.byte 0x01,0x00,0x00,0x00, 0x02,0x00,0x00,0x00 # rcon
-.byte 0x04,0x00,0x00,0x00, 0x08,0x00,0x00,0x00
-.byte 0x10,0x00,0x00,0x00, 0x20,0x00,0x00,0x00
-.byte 0x40,0x00,0x00,0x00, 0x80,0x00,0x00,0x00
-.byte 0x1B,0x00,0x00,0x00, 0x36,0x00,0x00,0x00
-
-.align 6
AES_Td:
.byte 0x51,0xf4,0xa7,0x50, 0x7e,0x41,0x65,0x53 # Td0
.byte 0x1a,0x17,0xa4,0xc3, 0x3a,0x27,0x5e,0x96
@@ -1567,6 +2030,46 @@ AES_Td:
.byte 0xc8, 0xeb, 0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61
.byte 0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26
.byte 0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d
+
+AES_Te4:
+.byte 0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5 # Te4
+.byte 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76
+.byte 0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0
+.byte 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0
+.byte 0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc
+.byte 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15
+.byte 0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a
+.byte 0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75
+.byte 0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0
+.byte 0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84
+.byte 0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b
+.byte 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf
+.byte 0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85
+.byte 0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8
+.byte 0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5
+.byte 0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2
+.byte 0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17
+.byte 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73
+.byte 0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88
+.byte 0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb
+.byte 0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c
+.byte 0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79
+.byte 0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9
+.byte 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08
+.byte 0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6
+.byte 0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a
+.byte 0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e
+.byte 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e
+.byte 0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94
+.byte 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf
+.byte 0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68
+.byte 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16
+
+.byte 0x01,0x00,0x00,0x00, 0x02,0x00,0x00,0x00 # rcon
+.byte 0x04,0x00,0x00,0x00, 0x08,0x00,0x00,0x00
+.byte 0x10,0x00,0x00,0x00, 0x20,0x00,0x00,0x00
+.byte 0x40,0x00,0x00,0x00, 0x80,0x00,0x00,0x00
+.byte 0x1B,0x00,0x00,0x00, 0x36,0x00,0x00,0x00
___
foreach (split("\n",$code)) {
@@ -1583,6 +2086,9 @@ foreach (split("\n",$code)) {
s/_ins\s+(\$[0-9]+),(\$[0-9]+),([0-9]+)/
sprintf("sll\t$1,$2,%d",$big_endian ? eval($3)
: eval("24-$3"))/e or
+ s/_ins2\s+(\$[0-9]+),(\$[0-9]+),([0-9]+)/
+ sprintf("ins\t$1,$2,%d,8",$big_endian ? eval($3)
+ : eval("24-$3"))/e or
s/_ror\s+(\$[0-9]+),(\$[0-9]+),(\-?[0-9]+)/
sprintf("srl\t$1,$2,%d",$big_endian ? eval($3)
: eval("$3*-1"))/e or
@@ -1605,6 +2111,11 @@ foreach (split("\n",$code)) {
sprintf("$1%d($3)",eval("$2-$2%4+($2%4+1)&3"))/e;
}
+ if (!$big_endian) {
+ s/(rotr\s+\$[0-9]+,\$[0-9]+),([0-9]+)/sprintf("$1,%d",32-$2)/e;
+ s/(ext\s+\$[0-9]+,\$[0-9]+),([0-9]+),8/sprintf("$1,%d,8",24-$2)/e;
+ }
+
print $_,"\n";
}
diff --git a/crypto/openssl/crypto/aes/asm/aes-ppc.pl b/crypto/openssl/crypto/aes/asm/aes-ppc.pl
index 7c52cbe..7a99fc3 100755
--- a/crypto/openssl/crypto/aes/asm/aes-ppc.pl
+++ b/crypto/openssl/crypto/aes/asm/aes-ppc.pl
@@ -45,6 +45,8 @@ if ($flavour =~ /64/) {
$PUSH ="stw";
} else { die "nonsense $flavour"; }
+$LITTLE_ENDIAN = ($flavour=~/le$/) ? $SIZE_T : 0;
+
$0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1;
( $xlate="${dir}ppc-xlate.pl" and -f $xlate ) or
( $xlate="${dir}../../perlasm/ppc-xlate.pl" and -f $xlate) or
@@ -68,7 +70,7 @@ $key="r5";
$Tbl0="r3";
$Tbl1="r6";
$Tbl2="r7";
-$Tbl3="r2";
+$Tbl3=$out; # stay away from "r2"; $out is offloaded to stack
$s0="r8";
$s1="r9";
@@ -76,7 +78,7 @@ $s2="r10";
$s3="r11";
$t0="r12";
-$t1="r13";
+$t1="r0"; # stay away from "r13";
$t2="r14";
$t3="r15";
@@ -100,9 +102,6 @@ $acc13="r29";
$acc14="r30";
$acc15="r31";
-# stay away from TLS pointer
-if ($SIZE_T==8) { die if ($t1 ne "r13"); $t1="r0"; }
-else { die if ($Tbl3 ne "r2"); $Tbl3=$t0; $t0="r0"; }
$mask80=$Tbl2;
$mask1b=$Tbl3;
@@ -337,8 +336,7 @@ $code.=<<___;
$STU $sp,-$FRAME($sp)
mflr r0
- $PUSH $toc,`$FRAME-$SIZE_T*20`($sp)
- $PUSH r13,`$FRAME-$SIZE_T*19`($sp)
+ $PUSH $out,`$FRAME-$SIZE_T*19`($sp)
$PUSH r14,`$FRAME-$SIZE_T*18`($sp)
$PUSH r15,`$FRAME-$SIZE_T*17`($sp)
$PUSH r16,`$FRAME-$SIZE_T*16`($sp)
@@ -365,16 +363,61 @@ $code.=<<___;
bne Lenc_unaligned
Lenc_unaligned_ok:
+___
+$code.=<<___ if (!$LITTLE_ENDIAN);
lwz $s0,0($inp)
lwz $s1,4($inp)
lwz $s2,8($inp)
lwz $s3,12($inp)
+___
+$code.=<<___ if ($LITTLE_ENDIAN);
+ lwz $t0,0($inp)
+ lwz $t1,4($inp)
+ lwz $t2,8($inp)
+ lwz $t3,12($inp)
+ rotlwi $s0,$t0,8
+ rotlwi $s1,$t1,8
+ rotlwi $s2,$t2,8
+ rotlwi $s3,$t3,8
+ rlwimi $s0,$t0,24,0,7
+ rlwimi $s1,$t1,24,0,7
+ rlwimi $s2,$t2,24,0,7
+ rlwimi $s3,$t3,24,0,7
+ rlwimi $s0,$t0,24,16,23
+ rlwimi $s1,$t1,24,16,23
+ rlwimi $s2,$t2,24,16,23
+ rlwimi $s3,$t3,24,16,23
+___
+$code.=<<___;
bl LAES_Te
bl Lppc_AES_encrypt_compact
+ $POP $out,`$FRAME-$SIZE_T*19`($sp)
+___
+$code.=<<___ if ($LITTLE_ENDIAN);
+ rotlwi $t0,$s0,8
+ rotlwi $t1,$s1,8
+ rotlwi $t2,$s2,8
+ rotlwi $t3,$s3,8
+ rlwimi $t0,$s0,24,0,7
+ rlwimi $t1,$s1,24,0,7
+ rlwimi $t2,$s2,24,0,7
+ rlwimi $t3,$s3,24,0,7
+ rlwimi $t0,$s0,24,16,23
+ rlwimi $t1,$s1,24,16,23
+ rlwimi $t2,$s2,24,16,23
+ rlwimi $t3,$s3,24,16,23
+ stw $t0,0($out)
+ stw $t1,4($out)
+ stw $t2,8($out)
+ stw $t3,12($out)
+___
+$code.=<<___ if (!$LITTLE_ENDIAN);
stw $s0,0($out)
stw $s1,4($out)
stw $s2,8($out)
stw $s3,12($out)
+___
+$code.=<<___;
b Lenc_done
Lenc_unaligned:
@@ -417,6 +460,7 @@ Lenc_xpage:
bl LAES_Te
bl Lppc_AES_encrypt_compact
+ $POP $out,`$FRAME-$SIZE_T*19`($sp)
extrwi $acc00,$s0,8,0
extrwi $acc01,$s0,8,8
@@ -449,8 +493,6 @@ Lenc_xpage:
Lenc_done:
$POP r0,`$FRAME+$LRSAVE`($sp)
- $POP $toc,`$FRAME-$SIZE_T*20`($sp)
- $POP r13,`$FRAME-$SIZE_T*19`($sp)
$POP r14,`$FRAME-$SIZE_T*18`($sp)
$POP r15,`$FRAME-$SIZE_T*17`($sp)
$POP r16,`$FRAME-$SIZE_T*16`($sp)
@@ -764,6 +806,7 @@ Lenc_compact_done:
blr
.long 0
.byte 0,12,0x14,0,0,0,0,0
+.size .AES_encrypt,.-.AES_encrypt
.globl .AES_decrypt
.align 7
@@ -771,8 +814,7 @@ Lenc_compact_done:
$STU $sp,-$FRAME($sp)
mflr r0
- $PUSH $toc,`$FRAME-$SIZE_T*20`($sp)
- $PUSH r13,`$FRAME-$SIZE_T*19`($sp)
+ $PUSH $out,`$FRAME-$SIZE_T*19`($sp)
$PUSH r14,`$FRAME-$SIZE_T*18`($sp)
$PUSH r15,`$FRAME-$SIZE_T*17`($sp)
$PUSH r16,`$FRAME-$SIZE_T*16`($sp)
@@ -799,16 +841,61 @@ Lenc_compact_done:
bne Ldec_unaligned
Ldec_unaligned_ok:
+___
+$code.=<<___ if (!$LITTLE_ENDIAN);
lwz $s0,0($inp)
lwz $s1,4($inp)
lwz $s2,8($inp)
lwz $s3,12($inp)
+___
+$code.=<<___ if ($LITTLE_ENDIAN);
+ lwz $t0,0($inp)
+ lwz $t1,4($inp)
+ lwz $t2,8($inp)
+ lwz $t3,12($inp)
+ rotlwi $s0,$t0,8
+ rotlwi $s1,$t1,8
+ rotlwi $s2,$t2,8
+ rotlwi $s3,$t3,8
+ rlwimi $s0,$t0,24,0,7
+ rlwimi $s1,$t1,24,0,7
+ rlwimi $s2,$t2,24,0,7
+ rlwimi $s3,$t3,24,0,7
+ rlwimi $s0,$t0,24,16,23
+ rlwimi $s1,$t1,24,16,23
+ rlwimi $s2,$t2,24,16,23
+ rlwimi $s3,$t3,24,16,23
+___
+$code.=<<___;
bl LAES_Td
bl Lppc_AES_decrypt_compact
+ $POP $out,`$FRAME-$SIZE_T*19`($sp)
+___
+$code.=<<___ if ($LITTLE_ENDIAN);
+ rotlwi $t0,$s0,8
+ rotlwi $t1,$s1,8
+ rotlwi $t2,$s2,8
+ rotlwi $t3,$s3,8
+ rlwimi $t0,$s0,24,0,7
+ rlwimi $t1,$s1,24,0,7
+ rlwimi $t2,$s2,24,0,7
+ rlwimi $t3,$s3,24,0,7
+ rlwimi $t0,$s0,24,16,23
+ rlwimi $t1,$s1,24,16,23
+ rlwimi $t2,$s2,24,16,23
+ rlwimi $t3,$s3,24,16,23
+ stw $t0,0($out)
+ stw $t1,4($out)
+ stw $t2,8($out)
+ stw $t3,12($out)
+___
+$code.=<<___ if (!$LITTLE_ENDIAN);
stw $s0,0($out)
stw $s1,4($out)
stw $s2,8($out)
stw $s3,12($out)
+___
+$code.=<<___;
b Ldec_done
Ldec_unaligned:
@@ -851,6 +938,7 @@ Ldec_xpage:
bl LAES_Td
bl Lppc_AES_decrypt_compact
+ $POP $out,`$FRAME-$SIZE_T*19`($sp)
extrwi $acc00,$s0,8,0
extrwi $acc01,$s0,8,8
@@ -883,8 +971,6 @@ Ldec_xpage:
Ldec_done:
$POP r0,`$FRAME+$LRSAVE`($sp)
- $POP $toc,`$FRAME-$SIZE_T*20`($sp)
- $POP r13,`$FRAME-$SIZE_T*19`($sp)
$POP r14,`$FRAME-$SIZE_T*18`($sp)
$POP r15,`$FRAME-$SIZE_T*17`($sp)
$POP r16,`$FRAME-$SIZE_T*16`($sp)
@@ -1355,6 +1441,7 @@ Ldec_compact_done:
blr
.long 0
.byte 0,12,0x14,0,0,0,0,0
+.size .AES_decrypt,.-.AES_decrypt
.asciz "AES for PPC, CRYPTOGAMS by <appro\@openssl.org>"
.align 7
diff --git a/crypto/openssl/crypto/aes/asm/aes-x86_64.pl b/crypto/openssl/crypto/aes/asm/aes-x86_64.pl
index 34cbb5d..47f4163 100755
--- a/crypto/openssl/crypto/aes/asm/aes-x86_64.pl
+++ b/crypto/openssl/crypto/aes/asm/aes-x86_64.pl
@@ -19,9 +19,10 @@
# Performance in number of cycles per processed byte for 128-bit key:
#
# ECB encrypt ECB decrypt CBC large chunk
-# AMD64 33 41 13.0
-# EM64T 38 59 18.6(*)
-# Core 2 30 43 14.5(*)
+# AMD64 33 43 13.0
+# EM64T 38 56 18.6(*)
+# Core 2 30 42 14.5(*)
+# Atom 65 86 32.1(*)
#
# (*) with hyper-threading off
@@ -366,68 +367,66 @@ $code.=<<___;
movzb `&lo("$s0")`,$t0
movzb `&lo("$s1")`,$t1
movzb `&lo("$s2")`,$t2
- movzb ($sbox,$t0,1),$t0
- movzb ($sbox,$t1,1),$t1
- movzb ($sbox,$t2,1),$t2
-
movzb `&lo("$s3")`,$t3
movzb `&hi("$s1")`,$acc0
movzb `&hi("$s2")`,$acc1
+ shr \$16,$s2
+ movzb `&hi("$s3")`,$acc2
+ movzb ($sbox,$t0,1),$t0
+ movzb ($sbox,$t1,1),$t1
+ movzb ($sbox,$t2,1),$t2
movzb ($sbox,$t3,1),$t3
- movzb ($sbox,$acc0,1),$t4 #$t0
- movzb ($sbox,$acc1,1),$t5 #$t1
- movzb `&hi("$s3")`,$acc2
+ movzb ($sbox,$acc0,1),$t4 #$t0
movzb `&hi("$s0")`,$acc0
- shr \$16,$s2
+ movzb ($sbox,$acc1,1),$t5 #$t1
+ movzb `&lo("$s2")`,$acc1
movzb ($sbox,$acc2,1),$acc2 #$t2
movzb ($sbox,$acc0,1),$acc0 #$t3
- shr \$16,$s3
- movzb `&lo("$s2")`,$acc1
shl \$8,$t4
+ shr \$16,$s3
shl \$8,$t5
- movzb ($sbox,$acc1,1),$acc1 #$t0
xor $t4,$t0
- xor $t5,$t1
-
- movzb `&lo("$s3")`,$t4
shr \$16,$s0
+ movzb `&lo("$s3")`,$t4
shr \$16,$s1
- movzb `&lo("$s0")`,$t5
+ xor $t5,$t1
shl \$8,$acc2
- shl \$8,$acc0
- movzb ($sbox,$t4,1),$t4 #$t1
- movzb ($sbox,$t5,1),$t5 #$t2
+ movzb `&lo("$s0")`,$t5
+ movzb ($sbox,$acc1,1),$acc1 #$t0
xor $acc2,$t2
- xor $acc0,$t3
+ shl \$8,$acc0
movzb `&lo("$s1")`,$acc2
- movzb `&hi("$s3")`,$acc0
shl \$16,$acc1
- movzb ($sbox,$acc2,1),$acc2 #$t3
- movzb ($sbox,$acc0,1),$acc0 #$t0
+ xor $acc0,$t3
+ movzb ($sbox,$t4,1),$t4 #$t1
+ movzb `&hi("$s3")`,$acc0
+ movzb ($sbox,$t5,1),$t5 #$t2
xor $acc1,$t0
- movzb `&hi("$s0")`,$acc1
shr \$8,$s2
+ movzb `&hi("$s0")`,$acc1
+ shl \$16,$t4
shr \$8,$s1
+ shl \$16,$t5
+ xor $t4,$t1
+ movzb ($sbox,$acc2,1),$acc2 #$t3
+ movzb ($sbox,$acc0,1),$acc0 #$t0
movzb ($sbox,$acc1,1),$acc1 #$t1
movzb ($sbox,$s2,1),$s3 #$t3
movzb ($sbox,$s1,1),$s2 #$t2
- shl \$16,$t4
- shl \$16,$t5
+
shl \$16,$acc2
- xor $t4,$t1
xor $t5,$t2
- xor $acc2,$t3
-
shl \$24,$acc0
+ xor $acc2,$t3
shl \$24,$acc1
- shl \$24,$s3
xor $acc0,$t0
- shl \$24,$s2
+ shl \$24,$s3
xor $acc1,$t1
+ shl \$24,$s2
mov $t0,$s0
mov $t1,$s1
xor $t2,$s2
@@ -466,12 +465,12 @@ sub enctransform()
{ my ($t3,$r20,$r21)=($acc2,"%r8d","%r9d");
$code.=<<___;
- mov $s0,$acc0
- mov $s1,$acc1
- and \$0x80808080,$acc0
- and \$0x80808080,$acc1
- mov $acc0,$t0
- mov $acc1,$t1
+ mov \$0x80808080,$t0
+ mov \$0x80808080,$t1
+ and $s0,$t0
+ and $s1,$t1
+ mov $t0,$acc0
+ mov $t1,$acc1
shr \$7,$t0
lea ($s0,$s0),$r20
shr \$7,$t1
@@ -489,25 +488,25 @@ $code.=<<___;
xor $r20,$s0
xor $r21,$s1
- mov $s2,$acc0
- mov $s3,$acc1
+ mov \$0x80808080,$t2
rol \$24,$s0
+ mov \$0x80808080,$t3
rol \$24,$s1
- and \$0x80808080,$acc0
- and \$0x80808080,$acc1
+ and $s2,$t2
+ and $s3,$t3
xor $r20,$s0
xor $r21,$s1
- mov $acc0,$t2
- mov $acc1,$t3
+ mov $t2,$acc0
ror \$16,$t0
+ mov $t3,$acc1
ror \$16,$t1
- shr \$7,$t2
lea ($s2,$s2),$r20
+ shr \$7,$t2
xor $t0,$s0
- xor $t1,$s1
shr \$7,$t3
- lea ($s3,$s3),$r21
+ xor $t1,$s1
ror \$8,$t0
+ lea ($s3,$s3),$r21
ror \$8,$t1
sub $t2,$acc0
sub $t3,$acc1
@@ -523,23 +522,23 @@ $code.=<<___;
xor $acc0,$r20
xor $acc1,$r21
+ ror \$16,$t2
xor $r20,$s2
+ ror \$16,$t3
xor $r21,$s3
rol \$24,$s2
+ mov 0($sbox),$acc0 # prefetch Te4
rol \$24,$s3
xor $r20,$s2
- xor $r21,$s3
- mov 0($sbox),$acc0 # prefetch Te4
- ror \$16,$t2
- ror \$16,$t3
mov 64($sbox),$acc1
- xor $t2,$s2
- xor $t3,$s3
+ xor $r21,$s3
mov 128($sbox),$r20
+ xor $t2,$s2
ror \$8,$t2
+ xor $t3,$s3
ror \$8,$t3
- mov 192($sbox),$r21
xor $t2,$s2
+ mov 192($sbox),$r21
xor $t3,$s3
___
}
@@ -936,70 +935,69 @@ $code.=<<___;
movzb `&lo("$s0")`,$t0
movzb `&lo("$s1")`,$t1
movzb `&lo("$s2")`,$t2
- movzb ($sbox,$t0,1),$t0
- movzb ($sbox,$t1,1),$t1
- movzb ($sbox,$t2,1),$t2
-
movzb `&lo("$s3")`,$t3
movzb `&hi("$s3")`,$acc0
movzb `&hi("$s0")`,$acc1
+ shr \$16,$s3
+ movzb `&hi("$s1")`,$acc2
+ movzb ($sbox,$t0,1),$t0
+ movzb ($sbox,$t1,1),$t1
+ movzb ($sbox,$t2,1),$t2
movzb ($sbox,$t3,1),$t3
- movzb ($sbox,$acc0,1),$t4 #$t0
- movzb ($sbox,$acc1,1),$t5 #$t1
- movzb `&hi("$s1")`,$acc2
+ movzb ($sbox,$acc0,1),$t4 #$t0
movzb `&hi("$s2")`,$acc0
- shr \$16,$s2
+ movzb ($sbox,$acc1,1),$t5 #$t1
movzb ($sbox,$acc2,1),$acc2 #$t2
movzb ($sbox,$acc0,1),$acc0 #$t3
- shr \$16,$s3
- movzb `&lo("$s2")`,$acc1
- shl \$8,$t4
+ shr \$16,$s2
shl \$8,$t5
- movzb ($sbox,$acc1,1),$acc1 #$t0
- xor $t4,$t0
- xor $t5,$t1
-
- movzb `&lo("$s3")`,$t4
+ shl \$8,$t4
+ movzb `&lo("$s2")`,$acc1
shr \$16,$s0
+ xor $t4,$t0
shr \$16,$s1
- movzb `&lo("$s0")`,$t5
+ movzb `&lo("$s3")`,$t4
+
shl \$8,$acc2
+ xor $t5,$t1
shl \$8,$acc0
- movzb ($sbox,$t4,1),$t4 #$t1
- movzb ($sbox,$t5,1),$t5 #$t2
+ movzb `&lo("$s0")`,$t5
+ movzb ($sbox,$acc1,1),$acc1 #$t0
xor $acc2,$t2
- xor $acc0,$t3
-
movzb `&lo("$s1")`,$acc2
- movzb `&hi("$s1")`,$acc0
+
shl \$16,$acc1
+ xor $acc0,$t3
+ movzb ($sbox,$t4,1),$t4 #$t1
+ movzb `&hi("$s1")`,$acc0
movzb ($sbox,$acc2,1),$acc2 #$t3
- movzb ($sbox,$acc0,1),$acc0 #$t0
xor $acc1,$t0
-
+ movzb ($sbox,$t5,1),$t5 #$t2
movzb `&hi("$s2")`,$acc1
+
+ shl \$16,$acc2
shl \$16,$t4
shl \$16,$t5
- movzb ($sbox,$acc1,1),$s1 #$t1
+ xor $acc2,$t3
+ movzb `&hi("$s3")`,$acc2
xor $t4,$t1
+ shr \$8,$s0
xor $t5,$t2
- movzb `&hi("$s3")`,$acc1
- shr \$8,$s0
- shl \$16,$acc2
- movzb ($sbox,$acc1,1),$s2 #$t2
+ movzb ($sbox,$acc0,1),$acc0 #$t0
+ movzb ($sbox,$acc1,1),$s1 #$t1
+ movzb ($sbox,$acc2,1),$s2 #$t2
movzb ($sbox,$s0,1),$s3 #$t3
- xor $acc2,$t3
+ mov $t0,$s0
shl \$24,$acc0
shl \$24,$s1
shl \$24,$s2
- xor $acc0,$t0
+ xor $acc0,$s0
shl \$24,$s3
xor $t1,$s1
- mov $t0,$s0
xor $t2,$s2
xor $t3,$s3
___
@@ -1014,12 +1012,12 @@ sub dectransform()
my $prefetch = shift;
$code.=<<___;
- mov $tp10,$acc0
- mov $tp18,$acc8
- and $mask80,$acc0
- and $mask80,$acc8
- mov $acc0,$tp40
- mov $acc8,$tp48
+ mov $mask80,$tp40
+ mov $mask80,$tp48
+ and $tp10,$tp40
+ and $tp18,$tp48
+ mov $tp40,$acc0
+ mov $tp48,$acc8
shr \$7,$tp40
lea ($tp10,$tp10),$tp20
shr \$7,$tp48
@@ -1030,15 +1028,15 @@ $code.=<<___;
and $maskfe,$tp28
and $mask1b,$acc0
and $mask1b,$acc8
- xor $tp20,$acc0
- xor $tp28,$acc8
- mov $acc0,$tp20
- mov $acc8,$tp28
-
- and $mask80,$acc0
- and $mask80,$acc8
- mov $acc0,$tp80
- mov $acc8,$tp88
+ xor $acc0,$tp20
+ xor $acc8,$tp28
+ mov $mask80,$tp80
+ mov $mask80,$tp88
+
+ and $tp20,$tp80
+ and $tp28,$tp88
+ mov $tp80,$acc0
+ mov $tp88,$acc8
shr \$7,$tp80
lea ($tp20,$tp20),$tp40
shr \$7,$tp88
@@ -1049,15 +1047,15 @@ $code.=<<___;
and $maskfe,$tp48
and $mask1b,$acc0
and $mask1b,$acc8
- xor $tp40,$acc0
- xor $tp48,$acc8
- mov $acc0,$tp40
- mov $acc8,$tp48
-
- and $mask80,$acc0
- and $mask80,$acc8
- mov $acc0,$tp80
- mov $acc8,$tp88
+ xor $acc0,$tp40
+ xor $acc8,$tp48
+ mov $mask80,$tp80
+ mov $mask80,$tp88
+
+ and $tp40,$tp80
+ and $tp48,$tp88
+ mov $tp80,$acc0
+ mov $tp88,$acc8
shr \$7,$tp80
xor $tp10,$tp20 # tp2^=tp1
shr \$7,$tp88
@@ -1082,51 +1080,51 @@ $code.=<<___;
mov $tp10,$acc0
mov $tp18,$acc8
xor $tp80,$tp40 # tp4^tp1^=tp8
- xor $tp88,$tp48 # tp4^tp1^=tp8
shr \$32,$acc0
+ xor $tp88,$tp48 # tp4^tp1^=tp8
shr \$32,$acc8
xor $tp20,$tp80 # tp8^=tp8^tp2^tp1=tp2^tp1
- xor $tp28,$tp88 # tp8^=tp8^tp2^tp1=tp2^tp1
rol \$8,`&LO("$tp10")` # ROTATE(tp1^tp8,8)
+ xor $tp28,$tp88 # tp8^=tp8^tp2^tp1=tp2^tp1
rol \$8,`&LO("$tp18")` # ROTATE(tp1^tp8,8)
xor $tp40,$tp80 # tp2^tp1^=tp8^tp4^tp1=tp8^tp4^tp2
+ rol \$8,`&LO("$acc0")` # ROTATE(tp1^tp8,8)
xor $tp48,$tp88 # tp2^tp1^=tp8^tp4^tp1=tp8^tp4^tp2
- rol \$8,`&LO("$acc0")` # ROTATE(tp1^tp8,8)
rol \$8,`&LO("$acc8")` # ROTATE(tp1^tp8,8)
xor `&LO("$tp80")`,`&LO("$tp10")`
- xor `&LO("$tp88")`,`&LO("$tp18")`
shr \$32,$tp80
+ xor `&LO("$tp88")`,`&LO("$tp18")`
shr \$32,$tp88
xor `&LO("$tp80")`,`&LO("$acc0")`
xor `&LO("$tp88")`,`&LO("$acc8")`
mov $tp20,$tp80
- mov $tp28,$tp88
- shr \$32,$tp80
- shr \$32,$tp88
rol \$24,`&LO("$tp20")` # ROTATE(tp2^tp1^tp8,24)
+ mov $tp28,$tp88
rol \$24,`&LO("$tp28")` # ROTATE(tp2^tp1^tp8,24)
- rol \$24,`&LO("$tp80")` # ROTATE(tp2^tp1^tp8,24)
- rol \$24,`&LO("$tp88")` # ROTATE(tp2^tp1^tp8,24)
+ shr \$32,$tp80
xor `&LO("$tp20")`,`&LO("$tp10")`
+ shr \$32,$tp88
xor `&LO("$tp28")`,`&LO("$tp18")`
+ rol \$24,`&LO("$tp80")` # ROTATE(tp2^tp1^tp8,24)
mov $tp40,$tp20
+ rol \$24,`&LO("$tp88")` # ROTATE(tp2^tp1^tp8,24)
mov $tp48,$tp28
+ shr \$32,$tp20
xor `&LO("$tp80")`,`&LO("$acc0")`
+ shr \$32,$tp28
xor `&LO("$tp88")`,`&LO("$acc8")`
`"mov 0($sbox),$mask80" if ($prefetch)`
- shr \$32,$tp20
- shr \$32,$tp28
- `"mov 64($sbox),$maskfe" if ($prefetch)`
rol \$16,`&LO("$tp40")` # ROTATE(tp4^tp1^tp8,16)
+ `"mov 64($sbox),$maskfe" if ($prefetch)`
rol \$16,`&LO("$tp48")` # ROTATE(tp4^tp1^tp8,16)
`"mov 128($sbox),$mask1b" if ($prefetch)`
rol \$16,`&LO("$tp20")` # ROTATE(tp4^tp1^tp8,16)
- rol \$16,`&LO("$tp28")` # ROTATE(tp4^tp1^tp8,16)
`"mov 192($sbox),$tp80" if ($prefetch)`
xor `&LO("$tp40")`,`&LO("$tp10")`
+ rol \$16,`&LO("$tp28")` # ROTATE(tp4^tp1^tp8,16)
xor `&LO("$tp48")`,`&LO("$tp18")`
`"mov 256($sbox),$tp88" if ($prefetch)`
xor `&LO("$tp20")`,`&LO("$acc0")`
@@ -1302,10 +1300,6 @@ private_AES_set_encrypt_key:
call _x86_64_AES_set_encrypt_key
- mov 8(%rsp),%r15
- mov 16(%rsp),%r14
- mov 24(%rsp),%r13
- mov 32(%rsp),%r12
mov 40(%rsp),%rbp
mov 48(%rsp),%rbx
add \$56,%rsp
diff --git a/crypto/openssl/crypto/aes/asm/aesni-mb-x86_64.pl b/crypto/openssl/crypto/aes/asm/aesni-mb-x86_64.pl
new file mode 100755
index 0000000..33b1aed
--- /dev/null
+++ b/crypto/openssl/crypto/aes/asm/aesni-mb-x86_64.pl
@@ -0,0 +1,1395 @@
+#!/usr/bin/env perl
+
+# ====================================================================
+# Written by Andy Polyakov <appro@openssl.org> for the OpenSSL
+# project. The module is, however, dual licensed under OpenSSL and
+# CRYPTOGAMS licenses depending on where you obtain it. For further
+# details see http://www.openssl.org/~appro/cryptogams/.
+# ====================================================================
+
+# Multi-buffer AES-NI procedures process several independent buffers
+# in parallel by interleaving independent instructions.
+#
+# Cycles per byte for interleave factor 4:
+#
+# asymptotic measured
+# ---------------------------
+# Westmere 5.00/4=1.25 5.13/4=1.28
+# Atom 15.0/4=3.75 ?15.7/4=3.93
+# Sandy Bridge 5.06/4=1.27 5.18/4=1.29
+# Ivy Bridge 5.06/4=1.27 5.14/4=1.29
+# Haswell 4.44/4=1.11 4.44/4=1.11
+# Bulldozer 5.75/4=1.44 5.76/4=1.44
+#
+# Cycles per byte for interleave factor 8 (not implemented for
+# pre-AVX processors, where higher interleave factor incidentally
+# doesn't result in improvement):
+#
+# asymptotic measured
+# ---------------------------
+# Sandy Bridge 5.06/8=0.64 7.10/8=0.89(*)
+# Ivy Bridge 5.06/8=0.64 7.14/8=0.89(*)
+# Haswell 5.00/8=0.63 5.00/8=0.63
+# Bulldozer 5.75/8=0.72 5.77/8=0.72
+#
+# (*) Sandy/Ivy Bridge are known to handle high interleave factors
+# suboptimally;
+
+$flavour = shift;
+$output = shift;
+if ($flavour =~ /\./) { $output = $flavour; undef $flavour; }
+
+$win64=0; $win64=1 if ($flavour =~ /[nm]asm|mingw64/ || $output =~ /\.asm$/);
+
+$0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1;
+( $xlate="${dir}x86_64-xlate.pl" and -f $xlate ) or
+( $xlate="${dir}../../perlasm/x86_64-xlate.pl" and -f $xlate) or
+die "can't locate x86_64-xlate.pl";
+
+$avx=0;
+
+if (`$ENV{CC} -Wa,-v -c -o /dev/null -x assembler /dev/null 2>&1`
+ =~ /GNU assembler version ([2-9]\.[0-9]+)/) {
+ $avx = ($1>=2.19) + ($1>=2.22);
+}
+
+if (!$avx && $win64 && ($flavour =~ /nasm/ || $ENV{ASM} =~ /nasm/) &&
+ `nasm -v 2>&1` =~ /NASM version ([2-9]\.[0-9]+)/) {
+ $avx = ($1>=2.09) + ($1>=2.10);
+}
+
+if (!$avx && $win64 && ($flavour =~ /masm/ || $ENV{ASM} =~ /ml64/) &&
+ `ml64 2>&1` =~ /Version ([0-9]+)\./) {
+ $avx = ($1>=10) + ($1>=11);
+}
+
+if (!$avx && `$ENV{CC} -v 2>&1` =~ /(^clang version|based on LLVM) ([3-9]\.[0-9]+)/) {
+ $avx = ($2>=3.0) + ($2>3.0);
+}
+
+open OUT,"| \"$^X\" $xlate $flavour $output";
+*STDOUT=*OUT;
+
+# void aesni_multi_cbc_encrypt (
+# struct { void *inp,*out; int blocks; double iv[2]; } inp[8];
+# const AES_KEY *key,
+# int num); /* 1 or 2 */
+#
+$inp="%rdi"; # 1st arg
+$key="%rsi"; # 2nd arg
+$num="%edx";
+
+@inptr=map("%r$_",(8..11));
+@outptr=map("%r$_",(12..15));
+
+($rndkey0,$rndkey1)=("%xmm0","%xmm1");
+@out=map("%xmm$_",(2..5));
+@inp=map("%xmm$_",(6..9));
+($counters,$mask,$zero)=map("%xmm$_",(10..12));
+
+($rounds,$one,$sink,$offset)=("%eax","%ecx","%rbp","%rbx");
+
+$code.=<<___;
+.text
+
+.extern OPENSSL_ia32cap_P
+
+.globl aesni_multi_cbc_encrypt
+.type aesni_multi_cbc_encrypt,\@function,3
+.align 32
+aesni_multi_cbc_encrypt:
+___
+$code.=<<___ if ($avx);
+ cmp \$2,$num
+ jb .Lenc_non_avx
+ mov OPENSSL_ia32cap_P+4(%rip),%ecx
+ test \$`1<<28`,%ecx # AVX bit
+ jnz _avx_cbc_enc_shortcut
+ jmp .Lenc_non_avx
+.align 16
+.Lenc_non_avx:
+___
+$code.=<<___;
+ mov %rsp,%rax
+ push %rbx
+ push %rbp
+ push %r12
+ push %r13
+ push %r14
+ push %r15
+___
+$code.=<<___ if ($win64);
+ lea -0xa8(%rsp),%rsp
+ movaps %xmm6,(%rsp)
+ movaps %xmm7,0x10(%rsp)
+ movaps %xmm8,0x20(%rsp)
+ movaps %xmm9,0x30(%rsp)
+ movaps %xmm10,0x40(%rsp)
+ movaps %xmm11,0x50(%rsp)
+ movaps %xmm12,0x60(%rsp)
+ movaps %xmm13,-0x68(%rax) # not used, saved to share se_handler
+ movaps %xmm14,-0x58(%rax)
+ movaps %xmm15,-0x48(%rax)
+___
+$code.=<<___;
+ # stack layout
+ #
+ # +0 output sink
+ # +16 input sink [original %rsp and $num]
+ # +32 counters
+
+ sub \$48,%rsp
+ and \$-64,%rsp
+ mov %rax,16(%rsp) # original %rsp
+
+.Lenc4x_body:
+ movdqu ($key),$zero # 0-round key
+ lea 0x78($key),$key # size optimization
+ lea 40*2($inp),$inp
+
+.Lenc4x_loop_grande:
+ mov $num,24(%rsp) # original $num
+ xor $num,$num
+___
+for($i=0;$i<4;$i++) {
+ $code.=<<___;
+ mov `40*$i+16-40*2`($inp),$one # borrow $one for number of blocks
+ mov `40*$i+0-40*2`($inp),@inptr[$i]
+ cmp $num,$one
+ mov `40*$i+8-40*2`($inp),@outptr[$i]
+ cmovg $one,$num # find maximum
+ test $one,$one
+ movdqu `40*$i+24-40*2`($inp),@out[$i] # load IV
+ mov $one,`32+4*$i`(%rsp) # initialize counters
+ cmovle %rsp,@inptr[$i] # cancel input
+___
+}
+$code.=<<___;
+ test $num,$num
+ jz .Lenc4x_done
+
+ movups 0x10-0x78($key),$rndkey1
+ pxor $zero,@out[0]
+ movups 0x20-0x78($key),$rndkey0
+ pxor $zero,@out[1]
+ mov 0xf0-0x78($key),$rounds
+ pxor $zero,@out[2]
+ movdqu (@inptr[0]),@inp[0] # load inputs
+ pxor $zero,@out[3]
+ movdqu (@inptr[1]),@inp[1]
+ pxor @inp[0],@out[0]
+ movdqu (@inptr[2]),@inp[2]
+ pxor @inp[1],@out[1]
+ movdqu (@inptr[3]),@inp[3]
+ pxor @inp[2],@out[2]
+ pxor @inp[3],@out[3]
+ movdqa 32(%rsp),$counters # load counters
+ xor $offset,$offset
+ jmp .Loop_enc4x
+
+.align 32
+.Loop_enc4x:
+ add \$16,$offset
+ lea 16(%rsp),$sink # sink pointer
+ mov \$1,$one # constant of 1
+ sub $offset,$sink
+
+ aesenc $rndkey1,@out[0]
+ prefetcht0 31(@inptr[0],$offset) # prefetch input
+ prefetcht0 31(@inptr[1],$offset)
+ aesenc $rndkey1,@out[1]
+ prefetcht0 31(@inptr[2],$offset)
+ prefetcht0 31(@inptr[2],$offset)
+ aesenc $rndkey1,@out[2]
+ aesenc $rndkey1,@out[3]
+ movups 0x30-0x78($key),$rndkey1
+___
+for($i=0;$i<4;$i++) {
+my $rndkey = ($i&1) ? $rndkey1 : $rndkey0;
+$code.=<<___;
+ cmp `32+4*$i`(%rsp),$one
+ aesenc $rndkey,@out[0]
+ aesenc $rndkey,@out[1]
+ aesenc $rndkey,@out[2]
+ cmovge $sink,@inptr[$i] # cancel input
+ cmovg $sink,@outptr[$i] # sink output
+ aesenc $rndkey,@out[3]
+ movups `0x40+16*$i-0x78`($key),$rndkey
+___
+}
+$code.=<<___;
+ movdqa $counters,$mask
+ aesenc $rndkey0,@out[0]
+ prefetcht0 15(@outptr[0],$offset) # prefetch output
+ prefetcht0 15(@outptr[1],$offset)
+ aesenc $rndkey0,@out[1]
+ prefetcht0 15(@outptr[2],$offset)
+ prefetcht0 15(@outptr[3],$offset)
+ aesenc $rndkey0,@out[2]
+ aesenc $rndkey0,@out[3]
+ movups 0x80-0x78($key),$rndkey0
+ pxor $zero,$zero
+
+ aesenc $rndkey1,@out[0]
+ pcmpgtd $zero,$mask
+ movdqu -0x78($key),$zero # reload 0-round key
+ aesenc $rndkey1,@out[1]
+ paddd $mask,$counters # decrement counters
+ movdqa $counters,32(%rsp) # update counters
+ aesenc $rndkey1,@out[2]
+ aesenc $rndkey1,@out[3]
+ movups 0x90-0x78($key),$rndkey1
+
+ cmp \$11,$rounds
+
+ aesenc $rndkey0,@out[0]
+ aesenc $rndkey0,@out[1]
+ aesenc $rndkey0,@out[2]
+ aesenc $rndkey0,@out[3]
+ movups 0xa0-0x78($key),$rndkey0
+
+ jb .Lenc4x_tail
+
+ aesenc $rndkey1,@out[0]
+ aesenc $rndkey1,@out[1]
+ aesenc $rndkey1,@out[2]
+ aesenc $rndkey1,@out[3]
+ movups 0xb0-0x78($key),$rndkey1
+
+ aesenc $rndkey0,@out[0]
+ aesenc $rndkey0,@out[1]
+ aesenc $rndkey0,@out[2]
+ aesenc $rndkey0,@out[3]
+ movups 0xc0-0x78($key),$rndkey0
+
+ je .Lenc4x_tail
+
+ aesenc $rndkey1,@out[0]
+ aesenc $rndkey1,@out[1]
+ aesenc $rndkey1,@out[2]
+ aesenc $rndkey1,@out[3]
+ movups 0xd0-0x78($key),$rndkey1
+
+ aesenc $rndkey0,@out[0]
+ aesenc $rndkey0,@out[1]
+ aesenc $rndkey0,@out[2]
+ aesenc $rndkey0,@out[3]
+ movups 0xe0-0x78($key),$rndkey0
+ jmp .Lenc4x_tail
+
+.align 32
+.Lenc4x_tail:
+ aesenc $rndkey1,@out[0]
+ aesenc $rndkey1,@out[1]
+ aesenc $rndkey1,@out[2]
+ aesenc $rndkey1,@out[3]
+ movdqu (@inptr[0],$offset),@inp[0]
+ movdqu 0x10-0x78($key),$rndkey1
+
+ aesenclast $rndkey0,@out[0]
+ movdqu (@inptr[1],$offset),@inp[1]
+ pxor $zero,@inp[0]
+ aesenclast $rndkey0,@out[1]
+ movdqu (@inptr[2],$offset),@inp[2]
+ pxor $zero,@inp[1]
+ aesenclast $rndkey0,@out[2]
+ movdqu (@inptr[3],$offset),@inp[3]
+ pxor $zero,@inp[2]
+ aesenclast $rndkey0,@out[3]
+ movdqu 0x20-0x78($key),$rndkey0
+ pxor $zero,@inp[3]
+
+ movups @out[0],-16(@outptr[0],$offset)
+ pxor @inp[0],@out[0]
+ movups @out[1],-16(@outptr[1],$offset)
+ pxor @inp[1],@out[1]
+ movups @out[2],-16(@outptr[2],$offset)
+ pxor @inp[2],@out[2]
+ movups @out[3],-16(@outptr[3],$offset)
+ pxor @inp[3],@out[3]
+
+ dec $num
+ jnz .Loop_enc4x
+
+ mov 16(%rsp),%rax # original %rsp
+ mov 24(%rsp),$num
+
+ #pxor @inp[0],@out[0]
+ #pxor @inp[1],@out[1]
+ #movdqu @out[0],`40*0+24-40*2`($inp) # output iv FIX ME!
+ #pxor @inp[2],@out[2]
+ #movdqu @out[1],`40*1+24-40*2`($inp)
+ #pxor @inp[3],@out[3]
+ #movdqu @out[2],`40*2+24-40*2`($inp) # won't fix, let caller
+ #movdqu @out[3],`40*3+24-40*2`($inp) # figure this out...
+
+ lea `40*4`($inp),$inp
+ dec $num
+ jnz .Lenc4x_loop_grande
+
+.Lenc4x_done:
+___
+$code.=<<___ if ($win64);
+ movaps -0xd8(%rax),%xmm6
+ movaps -0xc8(%rax),%xmm7
+ movaps -0xb8(%rax),%xmm8
+ movaps -0xa8(%rax),%xmm9
+ movaps -0x98(%rax),%xmm10
+ movaps -0x88(%rax),%xmm11
+ movaps -0x78(%rax),%xmm12
+ #movaps -0x68(%rax),%xmm13
+ #movaps -0x58(%rax),%xmm14
+ #movaps -0x48(%rax),%xmm15
+___
+$code.=<<___;
+ mov -48(%rax),%r15
+ mov -40(%rax),%r14
+ mov -32(%rax),%r13
+ mov -24(%rax),%r12
+ mov -16(%rax),%rbp
+ mov -8(%rax),%rbx
+ lea (%rax),%rsp
+.Lenc4x_epilogue:
+ ret
+.size aesni_multi_cbc_encrypt,.-aesni_multi_cbc_encrypt
+
+.globl aesni_multi_cbc_decrypt
+.type aesni_multi_cbc_decrypt,\@function,3
+.align 32
+aesni_multi_cbc_decrypt:
+___
+$code.=<<___ if ($avx);
+ cmp \$2,$num
+ jb .Ldec_non_avx
+ mov OPENSSL_ia32cap_P+4(%rip),%ecx
+ test \$`1<<28`,%ecx # AVX bit
+ jnz _avx_cbc_dec_shortcut
+ jmp .Ldec_non_avx
+.align 16
+.Ldec_non_avx:
+___
+$code.=<<___;
+ mov %rsp,%rax
+ push %rbx
+ push %rbp
+ push %r12
+ push %r13
+ push %r14
+ push %r15
+___
+$code.=<<___ if ($win64);
+ lea -0xa8(%rsp),%rsp
+ movaps %xmm6,(%rsp)
+ movaps %xmm7,0x10(%rsp)
+ movaps %xmm8,0x20(%rsp)
+ movaps %xmm9,0x30(%rsp)
+ movaps %xmm10,0x40(%rsp)
+ movaps %xmm11,0x50(%rsp)
+ movaps %xmm12,0x60(%rsp)
+ movaps %xmm13,-0x68(%rax) # not used, saved to share se_handler
+ movaps %xmm14,-0x58(%rax)
+ movaps %xmm15,-0x48(%rax)
+___
+$code.=<<___;
+ # stack layout
+ #
+ # +0 output sink
+ # +16 input sink [original %rsp and $num]
+ # +32 counters
+
+ sub \$48,%rsp
+ and \$-64,%rsp
+ mov %rax,16(%rsp) # original %rsp
+
+.Ldec4x_body:
+ movdqu ($key),$zero # 0-round key
+ lea 0x78($key),$key # size optimization
+ lea 40*2($inp),$inp
+
+.Ldec4x_loop_grande:
+ mov $num,24(%rsp) # original $num
+ xor $num,$num
+___
+for($i=0;$i<4;$i++) {
+ $code.=<<___;
+ mov `40*$i+16-40*2`($inp),$one # borrow $one for number of blocks
+ mov `40*$i+0-40*2`($inp),@inptr[$i]
+ cmp $num,$one
+ mov `40*$i+8-40*2`($inp),@outptr[$i]
+ cmovg $one,$num # find maximum
+ test $one,$one
+ movdqu `40*$i+24-40*2`($inp),@inp[$i] # load IV
+ mov $one,`32+4*$i`(%rsp) # initialize counters
+ cmovle %rsp,@inptr[$i] # cancel input
+___
+}
+$code.=<<___;
+ test $num,$num
+ jz .Ldec4x_done
+
+ movups 0x10-0x78($key),$rndkey1
+ movups 0x20-0x78($key),$rndkey0
+ mov 0xf0-0x78($key),$rounds
+ movdqu (@inptr[0]),@out[0] # load inputs
+ movdqu (@inptr[1]),@out[1]
+ pxor $zero,@out[0]
+ movdqu (@inptr[2]),@out[2]
+ pxor $zero,@out[1]
+ movdqu (@inptr[3]),@out[3]
+ pxor $zero,@out[2]
+ pxor $zero,@out[3]
+ movdqa 32(%rsp),$counters # load counters
+ xor $offset,$offset
+ jmp .Loop_dec4x
+
+.align 32
+.Loop_dec4x:
+ add \$16,$offset
+ lea 16(%rsp),$sink # sink pointer
+ mov \$1,$one # constant of 1
+ sub $offset,$sink
+
+ aesdec $rndkey1,@out[0]
+ prefetcht0 31(@inptr[0],$offset) # prefetch input
+ prefetcht0 31(@inptr[1],$offset)
+ aesdec $rndkey1,@out[1]
+ prefetcht0 31(@inptr[2],$offset)
+ prefetcht0 31(@inptr[3],$offset)
+ aesdec $rndkey1,@out[2]
+ aesdec $rndkey1,@out[3]
+ movups 0x30-0x78($key),$rndkey1
+___
+for($i=0;$i<4;$i++) {
+my $rndkey = ($i&1) ? $rndkey1 : $rndkey0;
+$code.=<<___;
+ cmp `32+4*$i`(%rsp),$one
+ aesdec $rndkey,@out[0]
+ aesdec $rndkey,@out[1]
+ aesdec $rndkey,@out[2]
+ cmovge $sink,@inptr[$i] # cancel input
+ cmovg $sink,@outptr[$i] # sink output
+ aesdec $rndkey,@out[3]
+ movups `0x40+16*$i-0x78`($key),$rndkey
+___
+}
+$code.=<<___;
+ movdqa $counters,$mask
+ aesdec $rndkey0,@out[0]
+ prefetcht0 15(@outptr[0],$offset) # prefetch output
+ prefetcht0 15(@outptr[1],$offset)
+ aesdec $rndkey0,@out[1]
+ prefetcht0 15(@outptr[2],$offset)
+ prefetcht0 15(@outptr[3],$offset)
+ aesdec $rndkey0,@out[2]
+ aesdec $rndkey0,@out[3]
+ movups 0x80-0x78($key),$rndkey0
+ pxor $zero,$zero
+
+ aesdec $rndkey1,@out[0]
+ pcmpgtd $zero,$mask
+ movdqu -0x78($key),$zero # reload 0-round key
+ aesdec $rndkey1,@out[1]
+ paddd $mask,$counters # decrement counters
+ movdqa $counters,32(%rsp) # update counters
+ aesdec $rndkey1,@out[2]
+ aesdec $rndkey1,@out[3]
+ movups 0x90-0x78($key),$rndkey1
+
+ cmp \$11,$rounds
+
+ aesdec $rndkey0,@out[0]
+ aesdec $rndkey0,@out[1]
+ aesdec $rndkey0,@out[2]
+ aesdec $rndkey0,@out[3]
+ movups 0xa0-0x78($key),$rndkey0
+
+ jb .Ldec4x_tail
+
+ aesdec $rndkey1,@out[0]
+ aesdec $rndkey1,@out[1]
+ aesdec $rndkey1,@out[2]
+ aesdec $rndkey1,@out[3]
+ movups 0xb0-0x78($key),$rndkey1
+
+ aesdec $rndkey0,@out[0]
+ aesdec $rndkey0,@out[1]
+ aesdec $rndkey0,@out[2]
+ aesdec $rndkey0,@out[3]
+ movups 0xc0-0x78($key),$rndkey0
+
+ je .Ldec4x_tail
+
+ aesdec $rndkey1,@out[0]
+ aesdec $rndkey1,@out[1]
+ aesdec $rndkey1,@out[2]
+ aesdec $rndkey1,@out[3]
+ movups 0xd0-0x78($key),$rndkey1
+
+ aesdec $rndkey0,@out[0]
+ aesdec $rndkey0,@out[1]
+ aesdec $rndkey0,@out[2]
+ aesdec $rndkey0,@out[3]
+ movups 0xe0-0x78($key),$rndkey0
+ jmp .Ldec4x_tail
+
+.align 32
+.Ldec4x_tail:
+ aesdec $rndkey1,@out[0]
+ aesdec $rndkey1,@out[1]
+ aesdec $rndkey1,@out[2]
+ pxor $rndkey0,@inp[0]
+ pxor $rndkey0,@inp[1]
+ aesdec $rndkey1,@out[3]
+ movdqu 0x10-0x78($key),$rndkey1
+ pxor $rndkey0,@inp[2]
+ pxor $rndkey0,@inp[3]
+ movdqu 0x20-0x78($key),$rndkey0
+
+ aesdeclast @inp[0],@out[0]
+ aesdeclast @inp[1],@out[1]
+ movdqu -16(@inptr[0],$offset),@inp[0] # load next IV
+ movdqu -16(@inptr[1],$offset),@inp[1]
+ aesdeclast @inp[2],@out[2]
+ aesdeclast @inp[3],@out[3]
+ movdqu -16(@inptr[2],$offset),@inp[2]
+ movdqu -16(@inptr[3],$offset),@inp[3]
+
+ movups @out[0],-16(@outptr[0],$offset)
+ movdqu (@inptr[0],$offset),@out[0]
+ movups @out[1],-16(@outptr[1],$offset)
+ movdqu (@inptr[1],$offset),@out[1]
+ pxor $zero,@out[0]
+ movups @out[2],-16(@outptr[2],$offset)
+ movdqu (@inptr[2],$offset),@out[2]
+ pxor $zero,@out[1]
+ movups @out[3],-16(@outptr[3],$offset)
+ movdqu (@inptr[3],$offset),@out[3]
+ pxor $zero,@out[2]
+ pxor $zero,@out[3]
+
+ dec $num
+ jnz .Loop_dec4x
+
+ mov 16(%rsp),%rax # original %rsp
+ mov 24(%rsp),$num
+
+ lea `40*4`($inp),$inp
+ dec $num
+ jnz .Ldec4x_loop_grande
+
+.Ldec4x_done:
+___
+$code.=<<___ if ($win64);
+ movaps -0xd8(%rax),%xmm6
+ movaps -0xc8(%rax),%xmm7
+ movaps -0xb8(%rax),%xmm8
+ movaps -0xa8(%rax),%xmm9
+ movaps -0x98(%rax),%xmm10
+ movaps -0x88(%rax),%xmm11
+ movaps -0x78(%rax),%xmm12
+ #movaps -0x68(%rax),%xmm13
+ #movaps -0x58(%rax),%xmm14
+ #movaps -0x48(%rax),%xmm15
+___
+$code.=<<___;
+ mov -48(%rax),%r15
+ mov -40(%rax),%r14
+ mov -32(%rax),%r13
+ mov -24(%rax),%r12
+ mov -16(%rax),%rbp
+ mov -8(%rax),%rbx
+ lea (%rax),%rsp
+.Ldec4x_epilogue:
+ ret
+.size aesni_multi_cbc_decrypt,.-aesni_multi_cbc_decrypt
+___
+
+ if ($avx) {{{
+my @ptr=map("%r$_",(8..15));
+my $offload=$sink;
+
+my @out=map("%xmm$_",(2..9));
+my @inp=map("%xmm$_",(10..13));
+my ($counters,$zero)=("%xmm14","%xmm15");
+
+$code.=<<___;
+.type aesni_multi_cbc_encrypt_avx,\@function,3
+.align 32
+aesni_multi_cbc_encrypt_avx:
+_avx_cbc_enc_shortcut:
+ mov %rsp,%rax
+ push %rbx
+ push %rbp
+ push %r12
+ push %r13
+ push %r14
+ push %r15
+___
+$code.=<<___ if ($win64);
+ lea -0xa8(%rsp),%rsp
+ movaps %xmm6,(%rsp)
+ movaps %xmm7,0x10(%rsp)
+ movaps %xmm8,0x20(%rsp)
+ movaps %xmm9,0x30(%rsp)
+ movaps %xmm10,0x40(%rsp)
+ movaps %xmm11,0x50(%rsp)
+ movaps %xmm12,-0x78(%rax)
+ movaps %xmm13,-0x68(%rax)
+ movaps %xmm14,-0x58(%rax)
+ movaps %xmm15,-0x48(%rax)
+___
+$code.=<<___;
+ # stack layout
+ #
+ # +0 output sink
+ # +16 input sink [original %rsp and $num]
+ # +32 counters
+ # +64 distances between inputs and outputs
+ # +128 off-load area for @inp[0..3]
+
+ sub \$192,%rsp
+ and \$-128,%rsp
+ mov %rax,16(%rsp) # original %rsp
+
+.Lenc8x_body:
+ vzeroupper
+ vmovdqu ($key),$zero # 0-round key
+ lea 0x78($key),$key # size optimization
+ lea 40*4($inp),$inp
+ shr \$1,$num
+
+.Lenc8x_loop_grande:
+ #mov $num,24(%rsp) # original $num
+ xor $num,$num
+___
+for($i=0;$i<8;$i++) {
+ my $temp = $i ? $offload : $offset;
+ $code.=<<___;
+ mov `40*$i+16-40*4`($inp),$one # borrow $one for number of blocks
+ mov `40*$i+0-40*4`($inp),@ptr[$i] # input pointer
+ cmp $num,$one
+ mov `40*$i+8-40*4`($inp),$temp # output pointer
+ cmovg $one,$num # find maximum
+ test $one,$one
+ vmovdqu `40*$i+24-40*4`($inp),@out[$i] # load IV
+ mov $one,`32+4*$i`(%rsp) # initialize counters
+ cmovle %rsp,@ptr[$i] # cancel input
+ sub @ptr[$i],$temp # distance between input and output
+ mov $temp,`64+8*$i`(%rsp) # initialize distances
+___
+}
+$code.=<<___;
+ test $num,$num
+ jz .Lenc8x_done
+
+ vmovups 0x10-0x78($key),$rndkey1
+ vmovups 0x20-0x78($key),$rndkey0
+ mov 0xf0-0x78($key),$rounds
+
+ vpxor (@ptr[0]),$zero,@inp[0] # load inputs and xor with 0-round
+ lea 128(%rsp),$offload # offload area
+ vpxor (@ptr[1]),$zero,@inp[1]
+ vpxor (@ptr[2]),$zero,@inp[2]
+ vpxor (@ptr[3]),$zero,@inp[3]
+ vpxor @inp[0],@out[0],@out[0]
+ vpxor (@ptr[4]),$zero,@inp[0]
+ vpxor @inp[1],@out[1],@out[1]
+ vpxor (@ptr[5]),$zero,@inp[1]
+ vpxor @inp[2],@out[2],@out[2]
+ vpxor (@ptr[6]),$zero,@inp[2]
+ vpxor @inp[3],@out[3],@out[3]
+ vpxor (@ptr[7]),$zero,@inp[3]
+ vpxor @inp[0],@out[4],@out[4]
+ mov \$1,$one # constant of 1
+ vpxor @inp[1],@out[5],@out[5]
+ vpxor @inp[2],@out[6],@out[6]
+ vpxor @inp[3],@out[7],@out[7]
+ jmp .Loop_enc8x
+
+.align 32
+.Loop_enc8x:
+___
+for($i=0;$i<8;$i++) {
+my $rndkey=($i&1)?$rndkey0:$rndkey1;
+$code.=<<___;
+ vaesenc $rndkey,@out[0],@out[0]
+ cmp 32+4*$i(%rsp),$one
+___
+$code.=<<___ if ($i);
+ mov 64+8*$i(%rsp),$offset
+___
+$code.=<<___;
+ vaesenc $rndkey,@out[1],@out[1]
+ prefetcht0 31(@ptr[$i]) # prefetch input
+ vaesenc $rndkey,@out[2],@out[2]
+___
+$code.=<<___ if ($i>1);
+ prefetcht0 15(@ptr[$i-2]) # prefetch output
+___
+$code.=<<___;
+ vaesenc $rndkey,@out[3],@out[3]
+ lea (@ptr[$i],$offset),$offset
+ cmovge %rsp,@ptr[$i] # cancel input
+ vaesenc $rndkey,@out[4],@out[4]
+ cmovg %rsp,$offset # sink output
+ vaesenc $rndkey,@out[5],@out[5]
+ sub @ptr[$i],$offset
+ vaesenc $rndkey,@out[6],@out[6]
+ vpxor 16(@ptr[$i]),$zero,@inp[$i%4] # load input and xor with 0-round
+ mov $offset,64+8*$i(%rsp)
+ vaesenc $rndkey,@out[7],@out[7]
+ vmovups `16*(3+$i)-0x78`($key),$rndkey
+ lea 16(@ptr[$i],$offset),@ptr[$i] # switch to output
+___
+$code.=<<___ if ($i<4)
+ vmovdqu @inp[$i%4],`16*$i`($offload) # off-load
+___
+}
+$code.=<<___;
+ vmovdqu 32(%rsp),$counters
+ prefetcht0 15(@ptr[$i-2]) # prefetch output
+ prefetcht0 15(@ptr[$i-1])
+ cmp \$11,$rounds
+ jb .Lenc8x_tail
+
+ vaesenc $rndkey1,@out[0],@out[0]
+ vaesenc $rndkey1,@out[1],@out[1]
+ vaesenc $rndkey1,@out[2],@out[2]
+ vaesenc $rndkey1,@out[3],@out[3]
+ vaesenc $rndkey1,@out[4],@out[4]
+ vaesenc $rndkey1,@out[5],@out[5]
+ vaesenc $rndkey1,@out[6],@out[6]
+ vaesenc $rndkey1,@out[7],@out[7]
+ vmovups 0xb0-0x78($key),$rndkey1
+
+ vaesenc $rndkey0,@out[0],@out[0]
+ vaesenc $rndkey0,@out[1],@out[1]
+ vaesenc $rndkey0,@out[2],@out[2]
+ vaesenc $rndkey0,@out[3],@out[3]
+ vaesenc $rndkey0,@out[4],@out[4]
+ vaesenc $rndkey0,@out[5],@out[5]
+ vaesenc $rndkey0,@out[6],@out[6]
+ vaesenc $rndkey0,@out[7],@out[7]
+ vmovups 0xc0-0x78($key),$rndkey0
+ je .Lenc8x_tail
+
+ vaesenc $rndkey1,@out[0],@out[0]
+ vaesenc $rndkey1,@out[1],@out[1]
+ vaesenc $rndkey1,@out[2],@out[2]
+ vaesenc $rndkey1,@out[3],@out[3]
+ vaesenc $rndkey1,@out[4],@out[4]
+ vaesenc $rndkey1,@out[5],@out[5]
+ vaesenc $rndkey1,@out[6],@out[6]
+ vaesenc $rndkey1,@out[7],@out[7]
+ vmovups 0xd0-0x78($key),$rndkey1
+
+ vaesenc $rndkey0,@out[0],@out[0]
+ vaesenc $rndkey0,@out[1],@out[1]
+ vaesenc $rndkey0,@out[2],@out[2]
+ vaesenc $rndkey0,@out[3],@out[3]
+ vaesenc $rndkey0,@out[4],@out[4]
+ vaesenc $rndkey0,@out[5],@out[5]
+ vaesenc $rndkey0,@out[6],@out[6]
+ vaesenc $rndkey0,@out[7],@out[7]
+ vmovups 0xe0-0x78($key),$rndkey0
+
+.Lenc8x_tail:
+ vaesenc $rndkey1,@out[0],@out[0]
+ vpxor $zero,$zero,$zero
+ vaesenc $rndkey1,@out[1],@out[1]
+ vaesenc $rndkey1,@out[2],@out[2]
+ vpcmpgtd $zero,$counters,$zero
+ vaesenc $rndkey1,@out[3],@out[3]
+ vaesenc $rndkey1,@out[4],@out[4]
+ vpaddd $counters,$zero,$zero # decrement counters
+ vmovdqu 48(%rsp),$counters
+ vaesenc $rndkey1,@out[5],@out[5]
+ mov 64(%rsp),$offset # pre-load 1st offset
+ vaesenc $rndkey1,@out[6],@out[6]
+ vaesenc $rndkey1,@out[7],@out[7]
+ vmovups 0x10-0x78($key),$rndkey1
+
+ vaesenclast $rndkey0,@out[0],@out[0]
+ vmovdqa $zero,32(%rsp) # update counters
+ vpxor $zero,$zero,$zero
+ vaesenclast $rndkey0,@out[1],@out[1]
+ vaesenclast $rndkey0,@out[2],@out[2]
+ vpcmpgtd $zero,$counters,$zero
+ vaesenclast $rndkey0,@out[3],@out[3]
+ vaesenclast $rndkey0,@out[4],@out[4]
+ vpaddd $zero,$counters,$counters # decrement counters
+ vmovdqu -0x78($key),$zero # 0-round
+ vaesenclast $rndkey0,@out[5],@out[5]
+ vaesenclast $rndkey0,@out[6],@out[6]
+ vmovdqa $counters,48(%rsp) # update counters
+ vaesenclast $rndkey0,@out[7],@out[7]
+ vmovups 0x20-0x78($key),$rndkey0
+
+ vmovups @out[0],-16(@ptr[0]) # write output
+ sub $offset,@ptr[0] # switch to input
+ vpxor 0x00($offload),@out[0],@out[0]
+ vmovups @out[1],-16(@ptr[1])
+ sub `64+1*8`(%rsp),@ptr[1]
+ vpxor 0x10($offload),@out[1],@out[1]
+ vmovups @out[2],-16(@ptr[2])
+ sub `64+2*8`(%rsp),@ptr[2]
+ vpxor 0x20($offload),@out[2],@out[2]
+ vmovups @out[3],-16(@ptr[3])
+ sub `64+3*8`(%rsp),@ptr[3]
+ vpxor 0x30($offload),@out[3],@out[3]
+ vmovups @out[4],-16(@ptr[4])
+ sub `64+4*8`(%rsp),@ptr[4]
+ vpxor @inp[0],@out[4],@out[4]
+ vmovups @out[5],-16(@ptr[5])
+ sub `64+5*8`(%rsp),@ptr[5]
+ vpxor @inp[1],@out[5],@out[5]
+ vmovups @out[6],-16(@ptr[6])
+ sub `64+6*8`(%rsp),@ptr[6]
+ vpxor @inp[2],@out[6],@out[6]
+ vmovups @out[7],-16(@ptr[7])
+ sub `64+7*8`(%rsp),@ptr[7]
+ vpxor @inp[3],@out[7],@out[7]
+
+ dec $num
+ jnz .Loop_enc8x
+
+ mov 16(%rsp),%rax # original %rsp
+ #mov 24(%rsp),$num
+ #lea `40*8`($inp),$inp
+ #dec $num
+ #jnz .Lenc8x_loop_grande
+
+.Lenc8x_done:
+ vzeroupper
+___
+$code.=<<___ if ($win64);
+ movaps -0xd8(%rax),%xmm6
+ movaps -0xc8(%rax),%xmm7
+ movaps -0xb8(%rax),%xmm8
+ movaps -0xa8(%rax),%xmm9
+ movaps -0x98(%rax),%xmm10
+ movaps -0x88(%rax),%xmm11
+ movaps -0x78(%rax),%xmm12
+ movaps -0x68(%rax),%xmm13
+ movaps -0x58(%rax),%xmm14
+ movaps -0x48(%rax),%xmm15
+___
+$code.=<<___;
+ mov -48(%rax),%r15
+ mov -40(%rax),%r14
+ mov -32(%rax),%r13
+ mov -24(%rax),%r12
+ mov -16(%rax),%rbp
+ mov -8(%rax),%rbx
+ lea (%rax),%rsp
+.Lenc8x_epilogue:
+ ret
+.size aesni_multi_cbc_encrypt_avx,.-aesni_multi_cbc_encrypt_avx
+
+.type aesni_multi_cbc_decrypt_avx,\@function,3
+.align 32
+aesni_multi_cbc_decrypt_avx:
+_avx_cbc_dec_shortcut:
+ mov %rsp,%rax
+ push %rbx
+ push %rbp
+ push %r12
+ push %r13
+ push %r14
+ push %r15
+___
+$code.=<<___ if ($win64);
+ lea -0xa8(%rsp),%rsp
+ movaps %xmm6,(%rsp)
+ movaps %xmm7,0x10(%rsp)
+ movaps %xmm8,0x20(%rsp)
+ movaps %xmm9,0x30(%rsp)
+ movaps %xmm10,0x40(%rsp)
+ movaps %xmm11,0x50(%rsp)
+ movaps %xmm12,-0x78(%rax)
+ movaps %xmm13,-0x68(%rax)
+ movaps %xmm14,-0x58(%rax)
+ movaps %xmm15,-0x48(%rax)
+___
+$code.=<<___;
+ # stack layout
+ #
+ # +0 output sink
+ # +16 input sink [original %rsp and $num]
+ # +32 counters
+ # +64 distances between inputs and outputs
+ # +128 off-load area for @inp[0..3]
+ # +192 IV/input offload
+
+ sub \$256,%rsp
+ and \$-256,%rsp
+ sub \$192,%rsp
+ mov %rax,16(%rsp) # original %rsp
+
+.Ldec8x_body:
+ vzeroupper
+ vmovdqu ($key),$zero # 0-round key
+ lea 0x78($key),$key # size optimization
+ lea 40*4($inp),$inp
+ shr \$1,$num
+
+.Ldec8x_loop_grande:
+ #mov $num,24(%rsp) # original $num
+ xor $num,$num
+___
+for($i=0;$i<8;$i++) {
+ my $temp = $i ? $offload : $offset;
+ $code.=<<___;
+ mov `40*$i+16-40*4`($inp),$one # borrow $one for number of blocks
+ mov `40*$i+0-40*4`($inp),@ptr[$i] # input pointer
+ cmp $num,$one
+ mov `40*$i+8-40*4`($inp),$temp # output pointer
+ cmovg $one,$num # find maximum
+ test $one,$one
+ vmovdqu `40*$i+24-40*4`($inp),@out[$i] # load IV
+ mov $one,`32+4*$i`(%rsp) # initialize counters
+ cmovle %rsp,@ptr[$i] # cancel input
+ sub @ptr[$i],$temp # distance between input and output
+ mov $temp,`64+8*$i`(%rsp) # initialize distances
+ vmovdqu @out[$i],`192+16*$i`(%rsp) # offload IV
+___
+}
+$code.=<<___;
+ test $num,$num
+ jz .Ldec8x_done
+
+ vmovups 0x10-0x78($key),$rndkey1
+ vmovups 0x20-0x78($key),$rndkey0
+ mov 0xf0-0x78($key),$rounds
+ lea 192+128(%rsp),$offload # offload area
+
+ vmovdqu (@ptr[0]),@out[0] # load inputs
+ vmovdqu (@ptr[1]),@out[1]
+ vmovdqu (@ptr[2]),@out[2]
+ vmovdqu (@ptr[3]),@out[3]
+ vmovdqu (@ptr[4]),@out[4]
+ vmovdqu (@ptr[5]),@out[5]
+ vmovdqu (@ptr[6]),@out[6]
+ vmovdqu (@ptr[7]),@out[7]
+ vmovdqu @out[0],0x00($offload) # offload inputs
+ vpxor $zero,@out[0],@out[0] # xor inputs with 0-round
+ vmovdqu @out[1],0x10($offload)
+ vpxor $zero,@out[1],@out[1]
+ vmovdqu @out[2],0x20($offload)
+ vpxor $zero,@out[2],@out[2]
+ vmovdqu @out[3],0x30($offload)
+ vpxor $zero,@out[3],@out[3]
+ vmovdqu @out[4],0x40($offload)
+ vpxor $zero,@out[4],@out[4]
+ vmovdqu @out[5],0x50($offload)
+ vpxor $zero,@out[5],@out[5]
+ vmovdqu @out[6],0x60($offload)
+ vpxor $zero,@out[6],@out[6]
+ vmovdqu @out[7],0x70($offload)
+ vpxor $zero,@out[7],@out[7]
+ xor \$0x80,$offload
+ mov \$1,$one # constant of 1
+ jmp .Loop_dec8x
+
+.align 32
+.Loop_dec8x:
+___
+for($i=0;$i<8;$i++) {
+my $rndkey=($i&1)?$rndkey0:$rndkey1;
+$code.=<<___;
+ vaesdec $rndkey,@out[0],@out[0]
+ cmp 32+4*$i(%rsp),$one
+___
+$code.=<<___ if ($i);
+ mov 64+8*$i(%rsp),$offset
+___
+$code.=<<___;
+ vaesdec $rndkey,@out[1],@out[1]
+ prefetcht0 31(@ptr[$i]) # prefetch input
+ vaesdec $rndkey,@out[2],@out[2]
+___
+$code.=<<___ if ($i>1);
+ prefetcht0 15(@ptr[$i-2]) # prefetch output
+___
+$code.=<<___;
+ vaesdec $rndkey,@out[3],@out[3]
+ lea (@ptr[$i],$offset),$offset
+ cmovge %rsp,@ptr[$i] # cancel input
+ vaesdec $rndkey,@out[4],@out[4]
+ cmovg %rsp,$offset # sink output
+ vaesdec $rndkey,@out[5],@out[5]
+ sub @ptr[$i],$offset
+ vaesdec $rndkey,@out[6],@out[6]
+ vmovdqu 16(@ptr[$i]),@inp[$i%4] # load input
+ mov $offset,64+8*$i(%rsp)
+ vaesdec $rndkey,@out[7],@out[7]
+ vmovups `16*(3+$i)-0x78`($key),$rndkey
+ lea 16(@ptr[$i],$offset),@ptr[$i] # switch to output
+___
+$code.=<<___ if ($i<4);
+ vmovdqu @inp[$i%4],`128+16*$i`(%rsp) # off-load
+___
+}
+$code.=<<___;
+ vmovdqu 32(%rsp),$counters
+ prefetcht0 15(@ptr[$i-2]) # prefetch output
+ prefetcht0 15(@ptr[$i-1])
+ cmp \$11,$rounds
+ jb .Ldec8x_tail
+
+ vaesdec $rndkey1,@out[0],@out[0]
+ vaesdec $rndkey1,@out[1],@out[1]
+ vaesdec $rndkey1,@out[2],@out[2]
+ vaesdec $rndkey1,@out[3],@out[3]
+ vaesdec $rndkey1,@out[4],@out[4]
+ vaesdec $rndkey1,@out[5],@out[5]
+ vaesdec $rndkey1,@out[6],@out[6]
+ vaesdec $rndkey1,@out[7],@out[7]
+ vmovups 0xb0-0x78($key),$rndkey1
+
+ vaesdec $rndkey0,@out[0],@out[0]
+ vaesdec $rndkey0,@out[1],@out[1]
+ vaesdec $rndkey0,@out[2],@out[2]
+ vaesdec $rndkey0,@out[3],@out[3]
+ vaesdec $rndkey0,@out[4],@out[4]
+ vaesdec $rndkey0,@out[5],@out[5]
+ vaesdec $rndkey0,@out[6],@out[6]
+ vaesdec $rndkey0,@out[7],@out[7]
+ vmovups 0xc0-0x78($key),$rndkey0
+ je .Ldec8x_tail
+
+ vaesdec $rndkey1,@out[0],@out[0]
+ vaesdec $rndkey1,@out[1],@out[1]
+ vaesdec $rndkey1,@out[2],@out[2]
+ vaesdec $rndkey1,@out[3],@out[3]
+ vaesdec $rndkey1,@out[4],@out[4]
+ vaesdec $rndkey1,@out[5],@out[5]
+ vaesdec $rndkey1,@out[6],@out[6]
+ vaesdec $rndkey1,@out[7],@out[7]
+ vmovups 0xd0-0x78($key),$rndkey1
+
+ vaesdec $rndkey0,@out[0],@out[0]
+ vaesdec $rndkey0,@out[1],@out[1]
+ vaesdec $rndkey0,@out[2],@out[2]
+ vaesdec $rndkey0,@out[3],@out[3]
+ vaesdec $rndkey0,@out[4],@out[4]
+ vaesdec $rndkey0,@out[5],@out[5]
+ vaesdec $rndkey0,@out[6],@out[6]
+ vaesdec $rndkey0,@out[7],@out[7]
+ vmovups 0xe0-0x78($key),$rndkey0
+
+.Ldec8x_tail:
+ vaesdec $rndkey1,@out[0],@out[0]
+ vpxor $zero,$zero,$zero
+ vaesdec $rndkey1,@out[1],@out[1]
+ vaesdec $rndkey1,@out[2],@out[2]
+ vpcmpgtd $zero,$counters,$zero
+ vaesdec $rndkey1,@out[3],@out[3]
+ vaesdec $rndkey1,@out[4],@out[4]
+ vpaddd $counters,$zero,$zero # decrement counters
+ vmovdqu 48(%rsp),$counters
+ vaesdec $rndkey1,@out[5],@out[5]
+ mov 64(%rsp),$offset # pre-load 1st offset
+ vaesdec $rndkey1,@out[6],@out[6]
+ vaesdec $rndkey1,@out[7],@out[7]
+ vmovups 0x10-0x78($key),$rndkey1
+
+ vaesdeclast $rndkey0,@out[0],@out[0]
+ vmovdqa $zero,32(%rsp) # update counters
+ vpxor $zero,$zero,$zero
+ vaesdeclast $rndkey0,@out[1],@out[1]
+ vpxor 0x00($offload),@out[0],@out[0] # xor with IV
+ vaesdeclast $rndkey0,@out[2],@out[2]
+ vpxor 0x10($offload),@out[1],@out[1]
+ vpcmpgtd $zero,$counters,$zero
+ vaesdeclast $rndkey0,@out[3],@out[3]
+ vpxor 0x20($offload),@out[2],@out[2]
+ vaesdeclast $rndkey0,@out[4],@out[4]
+ vpxor 0x30($offload),@out[3],@out[3]
+ vpaddd $zero,$counters,$counters # decrement counters
+ vmovdqu -0x78($key),$zero # 0-round
+ vaesdeclast $rndkey0,@out[5],@out[5]
+ vpxor 0x40($offload),@out[4],@out[4]
+ vaesdeclast $rndkey0,@out[6],@out[6]
+ vpxor 0x50($offload),@out[5],@out[5]
+ vmovdqa $counters,48(%rsp) # update counters
+ vaesdeclast $rndkey0,@out[7],@out[7]
+ vpxor 0x60($offload),@out[6],@out[6]
+ vmovups 0x20-0x78($key),$rndkey0
+
+ vmovups @out[0],-16(@ptr[0]) # write output
+ sub $offset,@ptr[0] # switch to input
+ vmovdqu 128+0(%rsp),@out[0]
+ vpxor 0x70($offload),@out[7],@out[7]
+ vmovups @out[1],-16(@ptr[1])
+ sub `64+1*8`(%rsp),@ptr[1]
+ vmovdqu @out[0],0x00($offload)
+ vpxor $zero,@out[0],@out[0]
+ vmovdqu 128+16(%rsp),@out[1]
+ vmovups @out[2],-16(@ptr[2])
+ sub `64+2*8`(%rsp),@ptr[2]
+ vmovdqu @out[1],0x10($offload)
+ vpxor $zero,@out[1],@out[1]
+ vmovdqu 128+32(%rsp),@out[2]
+ vmovups @out[3],-16(@ptr[3])
+ sub `64+3*8`(%rsp),@ptr[3]
+ vmovdqu @out[2],0x20($offload)
+ vpxor $zero,@out[2],@out[2]
+ vmovdqu 128+48(%rsp),@out[3]
+ vmovups @out[4],-16(@ptr[4])
+ sub `64+4*8`(%rsp),@ptr[4]
+ vmovdqu @out[3],0x30($offload)
+ vpxor $zero,@out[3],@out[3]
+ vmovdqu @inp[0],0x40($offload)
+ vpxor @inp[0],$zero,@out[4]
+ vmovups @out[5],-16(@ptr[5])
+ sub `64+5*8`(%rsp),@ptr[5]
+ vmovdqu @inp[1],0x50($offload)
+ vpxor @inp[1],$zero,@out[5]
+ vmovups @out[6],-16(@ptr[6])
+ sub `64+6*8`(%rsp),@ptr[6]
+ vmovdqu @inp[2],0x60($offload)
+ vpxor @inp[2],$zero,@out[6]
+ vmovups @out[7],-16(@ptr[7])
+ sub `64+7*8`(%rsp),@ptr[7]
+ vmovdqu @inp[3],0x70($offload)
+ vpxor @inp[3],$zero,@out[7]
+
+ xor \$128,$offload
+ dec $num
+ jnz .Loop_dec8x
+
+ mov 16(%rsp),%rax # original %rsp
+ #mov 24(%rsp),$num
+ #lea `40*8`($inp),$inp
+ #dec $num
+ #jnz .Ldec8x_loop_grande
+
+.Ldec8x_done:
+ vzeroupper
+___
+$code.=<<___ if ($win64);
+ movaps -0xd8(%rax),%xmm6
+ movaps -0xc8(%rax),%xmm7
+ movaps -0xb8(%rax),%xmm8
+ movaps -0xa8(%rax),%xmm9
+ movaps -0x98(%rax),%xmm10
+ movaps -0x88(%rax),%xmm11
+ movaps -0x78(%rax),%xmm12
+ movaps -0x68(%rax),%xmm13
+ movaps -0x58(%rax),%xmm14
+ movaps -0x48(%rax),%xmm15
+___
+$code.=<<___;
+ mov -48(%rax),%r15
+ mov -40(%rax),%r14
+ mov -32(%rax),%r13
+ mov -24(%rax),%r12
+ mov -16(%rax),%rbp
+ mov -8(%rax),%rbx
+ lea (%rax),%rsp
+.Ldec8x_epilogue:
+ ret
+.size aesni_multi_cbc_decrypt_avx,.-aesni_multi_cbc_decrypt_avx
+___
+ }}}
+
+if ($win64) {
+# EXCEPTION_DISPOSITION handler (EXCEPTION_RECORD *rec,ULONG64 frame,
+# CONTEXT *context,DISPATCHER_CONTEXT *disp)
+$rec="%rcx";
+$frame="%rdx";
+$context="%r8";
+$disp="%r9";
+
+$code.=<<___;
+.extern __imp_RtlVirtualUnwind
+.type se_handler,\@abi-omnipotent
+.align 16
+se_handler:
+ push %rsi
+ push %rdi
+ push %rbx
+ push %rbp
+ push %r12
+ push %r13
+ push %r14
+ push %r15
+ pushfq
+ sub \$64,%rsp
+
+ mov 120($context),%rax # pull context->Rax
+ mov 248($context),%rbx # pull context->Rip
+
+ mov 8($disp),%rsi # disp->ImageBase
+ mov 56($disp),%r11 # disp->HandlerData
+
+ mov 0(%r11),%r10d # HandlerData[0]
+ lea (%rsi,%r10),%r10 # prologue label
+ cmp %r10,%rbx # context->Rip<.Lprologue
+ jb .Lin_prologue
+
+ mov 152($context),%rax # pull context->Rsp
+
+ mov 4(%r11),%r10d # HandlerData[1]
+ lea (%rsi,%r10),%r10 # epilogue label
+ cmp %r10,%rbx # context->Rip>=.Lepilogue
+ jae .Lin_prologue
+
+ mov 16(%rax),%rax # pull saved stack pointer
+
+ mov -8(%rax),%rbx
+ mov -16(%rax),%rbp
+ mov -24(%rax),%r12
+ mov -32(%rax),%r13
+ mov -40(%rax),%r14
+ mov -48(%rax),%r15
+ mov %rbx,144($context) # restore context->Rbx
+ mov %rbp,160($context) # restore context->Rbp
+ mov %r12,216($context) # restore cotnext->R12
+ mov %r13,224($context) # restore cotnext->R13
+ mov %r14,232($context) # restore cotnext->R14
+ mov %r15,240($context) # restore cotnext->R15
+
+ lea -56-10*16(%rax),%rsi
+ lea 512($context),%rdi # &context.Xmm6
+ mov \$20,%ecx
+ .long 0xa548f3fc # cld; rep movsq
+
+.Lin_prologue:
+ mov 8(%rax),%rdi
+ mov 16(%rax),%rsi
+ mov %rax,152($context) # restore context->Rsp
+ mov %rsi,168($context) # restore context->Rsi
+ mov %rdi,176($context) # restore context->Rdi
+
+ mov 40($disp),%rdi # disp->ContextRecord
+ mov $context,%rsi # context
+ mov \$154,%ecx # sizeof(CONTEXT)
+ .long 0xa548f3fc # cld; rep movsq
+
+ mov $disp,%rsi
+ xor %rcx,%rcx # arg1, UNW_FLAG_NHANDLER
+ mov 8(%rsi),%rdx # arg2, disp->ImageBase
+ mov 0(%rsi),%r8 # arg3, disp->ControlPc
+ mov 16(%rsi),%r9 # arg4, disp->FunctionEntry
+ mov 40(%rsi),%r10 # disp->ContextRecord
+ lea 56(%rsi),%r11 # &disp->HandlerData
+ lea 24(%rsi),%r12 # &disp->EstablisherFrame
+ mov %r10,32(%rsp) # arg5
+ mov %r11,40(%rsp) # arg6
+ mov %r12,48(%rsp) # arg7
+ mov %rcx,56(%rsp) # arg8, (NULL)
+ call *__imp_RtlVirtualUnwind(%rip)
+
+ mov \$1,%eax # ExceptionContinueSearch
+ add \$64,%rsp
+ popfq
+ pop %r15
+ pop %r14
+ pop %r13
+ pop %r12
+ pop %rbp
+ pop %rbx
+ pop %rdi
+ pop %rsi
+ ret
+.size se_handler,.-se_handler
+
+.section .pdata
+.align 4
+ .rva .LSEH_begin_aesni_multi_cbc_encrypt
+ .rva .LSEH_end_aesni_multi_cbc_encrypt
+ .rva .LSEH_info_aesni_multi_cbc_encrypt
+ .rva .LSEH_begin_aesni_multi_cbc_decrypt
+ .rva .LSEH_end_aesni_multi_cbc_decrypt
+ .rva .LSEH_info_aesni_multi_cbc_decrypt
+___
+$code.=<<___ if ($avx);
+ .rva .LSEH_begin_aesni_multi_cbc_encrypt_avx
+ .rva .LSEH_end_aesni_multi_cbc_encrypt_avx
+ .rva .LSEH_info_aesni_multi_cbc_encrypt_avx
+ .rva .LSEH_begin_aesni_multi_cbc_decrypt_avx
+ .rva .LSEH_end_aesni_multi_cbc_decrypt_avx
+ .rva .LSEH_info_aesni_multi_cbc_decrypt_avx
+___
+$code.=<<___;
+.section .xdata
+.align 8
+.LSEH_info_aesni_multi_cbc_encrypt:
+ .byte 9,0,0,0
+ .rva se_handler
+ .rva .Lenc4x_body,.Lenc4x_epilogue # HandlerData[]
+.LSEH_info_aesni_multi_cbc_decrypt:
+ .byte 9,0,0,0
+ .rva se_handler
+ .rva .Ldec4x_body,.Ldec4x_epilogue # HandlerData[]
+___
+$code.=<<___ if ($avx);
+.LSEH_info_aesni_multi_cbc_encrypt_avx:
+ .byte 9,0,0,0
+ .rva se_handler
+ .rva .Lenc8x_body,.Lenc8x_epilogue # HandlerData[]
+.LSEH_info_aesni_multi_cbc_decrypt_avx:
+ .byte 9,0,0,0
+ .rva se_handler
+ .rva .Ldec8x_body,.Ldec8x_epilogue # HandlerData[]
+___
+}
+####################################################################
+
+sub rex {
+ local *opcode=shift;
+ my ($dst,$src)=@_;
+ my $rex=0;
+
+ $rex|=0x04 if($dst>=8);
+ $rex|=0x01 if($src>=8);
+ push @opcode,$rex|0x40 if($rex);
+}
+
+sub aesni {
+ my $line=shift;
+ my @opcode=(0x66);
+
+ if ($line=~/(aeskeygenassist)\s+\$([x0-9a-f]+),\s*%xmm([0-9]+),\s*%xmm([0-9]+)/) {
+ rex(\@opcode,$4,$3);
+ push @opcode,0x0f,0x3a,0xdf;
+ push @opcode,0xc0|($3&7)|(($4&7)<<3); # ModR/M
+ my $c=$2;
+ push @opcode,$c=~/^0/?oct($c):$c;
+ return ".byte\t".join(',',@opcode);
+ }
+ elsif ($line=~/(aes[a-z]+)\s+%xmm([0-9]+),\s*%xmm([0-9]+)/) {
+ my %opcodelet = (
+ "aesimc" => 0xdb,
+ "aesenc" => 0xdc, "aesenclast" => 0xdd,
+ "aesdec" => 0xde, "aesdeclast" => 0xdf
+ );
+ return undef if (!defined($opcodelet{$1}));
+ rex(\@opcode,$3,$2);
+ push @opcode,0x0f,0x38,$opcodelet{$1};
+ push @opcode,0xc0|($2&7)|(($3&7)<<3); # ModR/M
+ return ".byte\t".join(',',@opcode);
+ }
+ elsif ($line=~/(aes[a-z]+)\s+([0x1-9a-fA-F]*)\(%rsp\),\s*%xmm([0-9]+)/) {
+ my %opcodelet = (
+ "aesenc" => 0xdc, "aesenclast" => 0xdd,
+ "aesdec" => 0xde, "aesdeclast" => 0xdf
+ );
+ return undef if (!defined($opcodelet{$1}));
+ my $off = $2;
+ push @opcode,0x44 if ($3>=8);
+ push @opcode,0x0f,0x38,$opcodelet{$1};
+ push @opcode,0x44|(($3&7)<<3),0x24; # ModR/M
+ push @opcode,($off=~/^0/?oct($off):$off)&0xff;
+ return ".byte\t".join(',',@opcode);
+ }
+ return $line;
+}
+
+$code =~ s/\`([^\`]*)\`/eval($1)/gem;
+$code =~ s/\b(aes.*%xmm[0-9]+).*$/aesni($1)/gem;
+
+print $code;
+close STDOUT;
diff --git a/crypto/openssl/crypto/aes/asm/aesni-sha1-x86_64.pl b/crypto/openssl/crypto/aes/asm/aesni-sha1-x86_64.pl
index 3c8f6c1..97992ad 100755
--- a/crypto/openssl/crypto/aes/asm/aesni-sha1-x86_64.pl
+++ b/crypto/openssl/crypto/aes/asm/aesni-sha1-x86_64.pl
@@ -21,16 +21,25 @@
# subroutine:
#
# AES-128-CBC +SHA1 stitch gain
-# Westmere 3.77[+5.6] 9.37 6.65 +41%
-# Sandy Bridge 5.05[+5.2(6.3)] 10.25(11.35) 6.16(7.08) +67%(+60%)
+# Westmere 3.77[+5.3] 9.07 6.55 +38%
+# Sandy Bridge 5.05[+5.0(6.1)] 10.06(11.15) 5.98(7.05) +68%(+58%)
+# Ivy Bridge 5.05[+4.6] 9.65 5.54 +74%
+# Haswell 4.43[+3.6(4.2)] 8.00(8.58) 4.55(5.21) +75%(+65%)
+# Bulldozer 5.77[+6.0] 11.72 6.37 +84%
#
# AES-192-CBC
-# Westmere 4.51 10.11 6.97 +45%
-# Sandy Bridge 6.05 11.25(12.35) 6.34(7.27) +77%(+70%)
+# Westmere 4.51 9.81 6.80 +44%
+# Sandy Bridge 6.05 11.06(12.15) 6.11(7.19) +81%(+69%)
+# Ivy Bridge 6.05 10.65 6.07 +75%
+# Haswell 5.29 8.86(9.44) 5.32(5.32) +67%(+77%)
+# Bulldozer 6.89 12.84 6.96 +84%
#
# AES-256-CBC
-# Westmere 5.25 10.85 7.25 +50%
-# Sandy Bridge 7.05 12.25(13.35) 7.06(7.70) +74%(+73%)
+# Westmere 5.25 10.55 7.21 +46%
+# Sandy Bridge 7.05 12.06(13.15) 7.12(7.72) +69%(+70%)
+# Ivy Bridge 7.05 11.65 7.12 +64%
+# Haswell 6.19 9.76(10.34) 6.21(6.25) +57%(+65%)
+# Bulldozer 8.00 13.95 8.25 +69%
#
# (*) There are two code paths: SSSE3 and AVX. See sha1-568.pl for
# background information. Above numbers in parentheses are SSSE3
@@ -45,8 +54,25 @@
# standalone AESNI-CBC decrypt:
#
# AES-128-CBC AES-192-CBC AES-256-CBC
-# Westmere 1.31 1.55 1.80
-# Sandy Bridge 0.93 1.06 1.22
+# Westmere 1.25 1.50 1.75
+# Sandy Bridge 0.74 0.91 1.09
+# Ivy Bridge 0.74 0.90 1.11
+# Haswell 0.63 0.76 0.88
+# Bulldozer 0.70 0.85 0.99
+
+# And indeed:
+#
+# AES-256-CBC +SHA1 stitch gain
+# Westmere 1.75 7.20 6.68 +7.8%
+# Sandy Bridge 1.09 6.09(7.22) 5.82(6.95) +4.6%(+3.9%)
+# Ivy Bridge 1.11 5.70 5.45 +4.6%
+# Haswell 0.88 4.45(5.00) 4.39(4.69) +1.4%(*)(+6.6%)
+# Bulldozer 0.99 6.95 5.95 +17%(**)
+#
+# (*) Tiny improvement coefficient on Haswell is because we compare
+# AVX1 stitch to sum with AVX2 SHA1.
+# (**) Execution is fully dominated by integer code sequence and
+# SIMD still hardly shows [in single-process benchmark;-]
$flavour = shift;
$output = shift;
@@ -68,6 +94,11 @@ $avx=1 if (!$avx && $win64 && ($flavour =~ /nasm/ || $ENV{ASM} =~ /nasm/) &&
$avx=1 if (!$avx && $win64 && ($flavour =~ /masm/ || $ENV{ASM} =~ /ml64/) &&
`ml64 2>&1` =~ /Version ([0-9]+)\./ &&
$1>=10);
+$avx=1 if (!$avx && `$ENV{CC} -v 2>&1` =~ /(^clang version|based on LLVM) ([3-9]\.[0-9]+)/ && $2>=3.0);
+
+$shaext=1; ### set to zero if compiling for 1.0.1
+
+$stitched_decrypt=0;
open OUT,"| \"$^X\" $xlate $flavour $output";
*STDOUT=*OUT;
@@ -86,11 +117,15 @@ $code.=<<___;
.globl aesni_cbc_sha1_enc
.type aesni_cbc_sha1_enc,\@abi-omnipotent
-.align 16
+.align 32
aesni_cbc_sha1_enc:
# caller should check for SSSE3 and AES-NI bits
mov OPENSSL_ia32cap_P+0(%rip),%r10d
- mov OPENSSL_ia32cap_P+4(%rip),%r11d
+ mov OPENSSL_ia32cap_P+4(%rip),%r11
+___
+$code.=<<___ if ($shaext);
+ bt \$61,%r11 # check SHA bit
+ jc aesni_cbc_sha1_enc_shaext
___
$code.=<<___ if ($avx);
and \$`1<<28`,%r11d # mask AVX bit
@@ -112,10 +147,21 @@ my @X=map("%xmm$_",(4..7,0..3));
my @Tx=map("%xmm$_",(8..10));
my @V=($A,$B,$C,$D,$E)=("%eax","%ebx","%ecx","%edx","%ebp"); # size optimization
my @T=("%esi","%edi");
-my $j=0; my $jj=0; my $r=0; my $sn=0;
+my $j=0; my $jj=0; my $r=0; my $sn=0; my $rx=0;
my $K_XX_XX="%r11";
-my ($iv,$in,$rndkey0)=map("%xmm$_",(11..13));
-my @rndkey=("%xmm14","%xmm15");
+my ($rndkey0,$iv,$in)=map("%xmm$_",(11..13)); # for enc
+my @rndkey=("%xmm14","%xmm15"); # for enc
+my ($inout0,$inout1,$inout2,$inout3)=map("%xmm$_",(12..15)); # for dec
+
+if (1) { # reassign for Atom Silvermont
+ # The goal is to minimize amount of instructions with more than
+ # 3 prefix bytes. Or in more practical terms to keep AES-NI *and*
+ # SSSE3 instructions to upper half of the register bank.
+ @X=map("%xmm$_",(8..11,4..7));
+ @Tx=map("%xmm$_",(12,13,3));
+ ($iv,$in,$rndkey0)=map("%xmm$_",(2,14,15));
+ @rndkey=("%xmm0","%xmm1");
+}
sub AUTOLOAD() # thunk [simplified] 32-bit style perlasm
{ my $opcode = $AUTOLOAD; $opcode =~ s/.*:://;
@@ -129,7 +175,7 @@ my $_ror=sub { &ror(@_) };
$code.=<<___;
.type aesni_cbc_sha1_enc_ssse3,\@function,6
-.align 16
+.align 32
aesni_cbc_sha1_enc_ssse3:
mov `($win64?56:8)`(%rsp),$inp # load 7th argument
#shr \$6,$len # debugging artefact
@@ -161,16 +207,16 @@ $code.=<<___;
mov $in0,%r12 # reassign arguments
mov $out,%r13
mov $len,%r14
- mov $key,%r15
+ lea 112($key),%r15 # size optimization
movdqu ($ivp),$iv # load IV
mov $ivp,88(%rsp) # save $ivp
___
-my ($in0,$out,$len,$key)=map("%r$_",(12..15)); # reassign arguments
+($in0,$out,$len,$key)=map("%r$_",(12..15)); # reassign arguments
my $rounds="${ivp}d";
$code.=<<___;
shl \$6,$len
sub $in0,$out
- mov 240($key),$rounds
+ mov 240-112($key),$rounds
add $inp,$len # end of input
lea K_XX_XX(%rip),$K_XX_XX
@@ -180,19 +226,22 @@ $code.=<<___;
mov 12($ctx),$D
mov $B,@T[0] # magic seed
mov 16($ctx),$E
+ mov $C,@T[1]
+ xor $D,@T[1]
+ and @T[1],@T[0]
- movdqa 64($K_XX_XX),@X[2] # pbswap mask
+ movdqa 64($K_XX_XX),@Tx[2] # pbswap mask
movdqa 0($K_XX_XX),@Tx[1] # K_00_19
movdqu 0($inp),@X[-4&7] # load input to %xmm[0-3]
movdqu 16($inp),@X[-3&7]
movdqu 32($inp),@X[-2&7]
movdqu 48($inp),@X[-1&7]
- pshufb @X[2],@X[-4&7] # byte swap
+ pshufb @Tx[2],@X[-4&7] # byte swap
+ pshufb @Tx[2],@X[-3&7]
+ pshufb @Tx[2],@X[-2&7]
add \$64,$inp
- pshufb @X[2],@X[-3&7]
- pshufb @X[2],@X[-2&7]
- pshufb @X[2],@X[-1&7]
paddd @Tx[1],@X[-4&7] # add K_00_19
+ pshufb @Tx[2],@X[-1&7]
paddd @Tx[1],@X[-3&7]
paddd @Tx[1],@X[-2&7]
movdqa @X[-4&7],0(%rsp) # X[]+K xfer to IALU
@@ -201,8 +250,8 @@ $code.=<<___;
psubd @Tx[1],@X[-3&7]
movdqa @X[-2&7],32(%rsp)
psubd @Tx[1],@X[-2&7]
- movups ($key),$rndkey0 # $key[0]
- movups 16($key),$rndkey[0] # forward reference
+ movups -112($key),$rndkey0 # $key[0]
+ movups 16-112($key),$rndkey[0] # forward reference
jmp .Loop_ssse3
___
@@ -219,31 +268,31 @@ ___
___
$code.=<<___;
xorps $in,$iv
+ movups `32+16*$k-112`($key),$rndkey[1]
aesenc $rndkey[0],$iv
- movups `32+16*$k`($key),$rndkey[1]
___
} elsif ($k==9) {
$sn++;
$code.=<<___;
cmp \$11,$rounds
jb .Laesenclast$sn
- movups `32+16*($k+0)`($key),$rndkey[1]
+ movups `32+16*($k+0)-112`($key),$rndkey[1]
aesenc $rndkey[0],$iv
- movups `32+16*($k+1)`($key),$rndkey[0]
+ movups `32+16*($k+1)-112`($key),$rndkey[0]
aesenc $rndkey[1],$iv
je .Laesenclast$sn
- movups `32+16*($k+2)`($key),$rndkey[1]
+ movups `32+16*($k+2)-112`($key),$rndkey[1]
aesenc $rndkey[0],$iv
- movups `32+16*($k+3)`($key),$rndkey[0]
+ movups `32+16*($k+3)-112`($key),$rndkey[0]
aesenc $rndkey[1],$iv
.Laesenclast$sn:
aesenclast $rndkey[0],$iv
- movups 16($key),$rndkey[1] # forward reference
+ movups 16-112($key),$rndkey[1] # forward reference
___
} else {
$code.=<<___;
+ movups `32+16*$k-112`($key),$rndkey[1]
aesenc $rndkey[0],$iv
- movups `32+16*$k`($key),$rndkey[1]
___
}
$r++; unshift(@rndkey,pop(@rndkey));
@@ -255,61 +304,61 @@ sub Xupdate_ssse3_16_31() # recall that $Xi starts wtih 4
my @insns = (&$body,&$body,&$body,&$body); # 40 instructions
my ($a,$b,$c,$d,$e);
- &movdqa (@X[0],@X[-3&7]);
- eval(shift(@insns));
+ eval(shift(@insns)); # ror
+ &pshufd (@X[0],@X[-4&7],0xee); # was &movdqa (@X[0],@X[-3&7]);
eval(shift(@insns));
&movdqa (@Tx[0],@X[-1&7]);
- &palignr(@X[0],@X[-4&7],8); # compose "X[-14]" in "X[0]"
+ &paddd (@Tx[1],@X[-1&7]);
eval(shift(@insns));
eval(shift(@insns));
- &paddd (@Tx[1],@X[-1&7]);
+ &punpcklqdq(@X[0],@X[-3&7]); # compose "X[-14]" in "X[0]", was &palignr(@X[0],@X[-4&7],8);
eval(shift(@insns));
+ eval(shift(@insns)); # rol
eval(shift(@insns));
&psrldq (@Tx[0],4); # "X[-3]", 3 dwords
eval(shift(@insns));
eval(shift(@insns));
+
&pxor (@X[0],@X[-4&7]); # "X[0]"^="X[-16]"
eval(shift(@insns));
- eval(shift(@insns));
-
+ eval(shift(@insns)); # ror
&pxor (@Tx[0],@X[-2&7]); # "X[-3]"^"X[-8]"
eval(shift(@insns));
eval(shift(@insns));
eval(shift(@insns));
- eval(shift(@insns));
&pxor (@X[0],@Tx[0]); # "X[0]"^="X[-3]"^"X[-8]"
eval(shift(@insns));
- eval(shift(@insns));
+ eval(shift(@insns)); # rol
&movdqa (eval(16*(($Xi-1)&3))."(%rsp)",@Tx[1]); # X[]+K xfer to IALU
eval(shift(@insns));
eval(shift(@insns));
&movdqa (@Tx[2],@X[0]);
- &movdqa (@Tx[0],@X[0]);
- eval(shift(@insns));
eval(shift(@insns));
eval(shift(@insns));
+ eval(shift(@insns)); # ror
+ &movdqa (@Tx[0],@X[0]);
eval(shift(@insns));
&pslldq (@Tx[2],12); # "X[0]"<<96, extract one dword
&paddd (@X[0],@X[0]);
eval(shift(@insns));
eval(shift(@insns));
- eval(shift(@insns));
- eval(shift(@insns));
&psrld (@Tx[0],31);
eval(shift(@insns));
+ eval(shift(@insns)); # rol
eval(shift(@insns));
&movdqa (@Tx[1],@Tx[2]);
eval(shift(@insns));
eval(shift(@insns));
&psrld (@Tx[2],30);
- &por (@X[0],@Tx[0]); # "X[0]"<<<=1
eval(shift(@insns));
+ eval(shift(@insns)); # ror
+ &por (@X[0],@Tx[0]); # "X[0]"<<<=1
eval(shift(@insns));
eval(shift(@insns));
eval(shift(@insns));
@@ -317,12 +366,13 @@ sub Xupdate_ssse3_16_31() # recall that $Xi starts wtih 4
&pslld (@Tx[1],2);
&pxor (@X[0],@Tx[2]);
eval(shift(@insns));
- eval(shift(@insns));
&movdqa (@Tx[2],eval(16*(($Xi)/5))."($K_XX_XX)"); # K_XX_XX
+ eval(shift(@insns)); # rol
eval(shift(@insns));
eval(shift(@insns));
&pxor (@X[0],@Tx[1]); # "X[0]"^=("X[0]">>96)<<<2
+ &pshufd (@Tx[1],@X[-1&7],0xee) if ($Xi==7); # was &movdqa (@Tx[0],@X[-1&7]) in Xupdate_ssse3_32_79
foreach (@insns) { eval; } # remaining instructions [if any]
@@ -333,27 +383,30 @@ sub Xupdate_ssse3_16_31() # recall that $Xi starts wtih 4
sub Xupdate_ssse3_32_79()
{ use integer;
my $body = shift;
- my @insns = (&$body,&$body,&$body,&$body); # 32 to 48 instructions
+ my @insns = (&$body,&$body,&$body,&$body); # 32 to 44 instructions
my ($a,$b,$c,$d,$e);
- &movdqa (@Tx[0],@X[-1&7]) if ($Xi==8);
- eval(shift(@insns)); # body_20_39
+ eval(shift(@insns)) if ($Xi==8);
&pxor (@X[0],@X[-4&7]); # "X[0]"="X[-32]"^"X[-16]"
- &palignr(@Tx[0],@X[-2&7],8); # compose "X[-6]"
+ eval(shift(@insns)) if ($Xi==8);
+ eval(shift(@insns)); # body_20_39
eval(shift(@insns));
+ eval(shift(@insns)) if (@insns[1] =~ /_ror/);
+ eval(shift(@insns)) if (@insns[0] =~ /_ror/);
+ &punpcklqdq(@Tx[0],@X[-1&7]); # compose "X[-6]", was &palignr(@Tx[0],@X[-2&7],8);
eval(shift(@insns));
eval(shift(@insns)); # rol
&pxor (@X[0],@X[-7&7]); # "X[0]"^="X[-28]"
eval(shift(@insns));
- eval(shift(@insns)) if (@insns[0] !~ /&ro[rl]/);
+ eval(shift(@insns));
if ($Xi%5) {
&movdqa (@Tx[2],@Tx[1]);# "perpetuate" K_XX_XX...
} else { # ... or load next one
&movdqa (@Tx[2],eval(16*($Xi/5))."($K_XX_XX)");
}
- &paddd (@Tx[1],@X[-1&7]);
eval(shift(@insns)); # ror
+ &paddd (@Tx[1],@X[-1&7]);
eval(shift(@insns));
&pxor (@X[0],@Tx[0]); # "X[0]"^="X[-6]"
@@ -361,29 +414,31 @@ sub Xupdate_ssse3_32_79()
eval(shift(@insns));
eval(shift(@insns));
eval(shift(@insns)); # rol
+ eval(shift(@insns)) if (@insns[0] =~ /_ror/);
&movdqa (@Tx[0],@X[0]);
- &movdqa (eval(16*(($Xi-1)&3))."(%rsp)",@Tx[1]); # X[]+K xfer to IALU
eval(shift(@insns));
eval(shift(@insns));
+ &movdqa (eval(16*(($Xi-1)&3))."(%rsp)",@Tx[1]); # X[]+K xfer to IALU
eval(shift(@insns)); # ror
eval(shift(@insns));
+ eval(shift(@insns)); # body_20_39
&pslld (@X[0],2);
- eval(shift(@insns)); # body_20_39
eval(shift(@insns));
- &psrld (@Tx[0],30);
eval(shift(@insns));
- eval(shift(@insns)); # rol
+ &psrld (@Tx[0],30);
+ eval(shift(@insns)) if (@insns[0] =~ /_rol/);# rol
eval(shift(@insns));
eval(shift(@insns));
eval(shift(@insns)); # ror
- eval(shift(@insns));
&por (@X[0],@Tx[0]); # "X[0]"<<<=2
- eval(shift(@insns)); # body_20_39
eval(shift(@insns));
- &movdqa (@Tx[1],@X[0]) if ($Xi<19);
+ eval(shift(@insns)); # body_20_39
+ eval(shift(@insns)) if (@insns[1] =~ /_rol/);
+ eval(shift(@insns)) if (@insns[0] =~ /_rol/);
+ &pshufd(@Tx[1],@X[-1&7],0xee) if ($Xi<19); # was &movdqa (@Tx[1],@X[0])
eval(shift(@insns));
eval(shift(@insns)); # rol
eval(shift(@insns));
@@ -404,10 +459,11 @@ sub Xuplast_ssse3_80()
my ($a,$b,$c,$d,$e);
eval(shift(@insns));
- &paddd (@Tx[1],@X[-1&7]);
eval(shift(@insns));
eval(shift(@insns));
eval(shift(@insns));
+ &paddd (@Tx[1],@X[-1&7]);
+ eval(shift(@insns));
eval(shift(@insns));
&movdqa (eval(16*(($Xi-1)&3))."(%rsp)",@Tx[1]); # X[]+K xfer IALU
@@ -415,17 +471,17 @@ sub Xuplast_ssse3_80()
foreach (@insns) { eval; } # remaining instructions
&cmp ($inp,$len);
- &je (".Ldone_ssse3");
+ &je (shift);
unshift(@Tx,pop(@Tx));
- &movdqa (@X[2],"64($K_XX_XX)"); # pbswap mask
+ &movdqa (@Tx[2],"64($K_XX_XX)"); # pbswap mask
&movdqa (@Tx[1],"0($K_XX_XX)"); # K_00_19
&movdqu (@X[-4&7],"0($inp)"); # load input
&movdqu (@X[-3&7],"16($inp)");
&movdqu (@X[-2&7],"32($inp)");
&movdqu (@X[-1&7],"48($inp)");
- &pshufb (@X[-4&7],@X[2]); # byte swap
+ &pshufb (@X[-4&7],@Tx[2]); # byte swap
&add ($inp,64);
$Xi=0;
@@ -439,7 +495,10 @@ sub Xloop_ssse3()
eval(shift(@insns));
eval(shift(@insns));
- &pshufb (@X[($Xi-3)&7],@X[2]);
+ eval(shift(@insns));
+ &pshufb (@X[($Xi-3)&7],@Tx[2]);
+ eval(shift(@insns));
+ eval(shift(@insns));
eval(shift(@insns));
eval(shift(@insns));
&paddd (@X[($Xi-4)&7],@Tx[1]);
@@ -450,6 +509,8 @@ sub Xloop_ssse3()
&movdqa (eval(16*$Xi)."(%rsp)",@X[($Xi-4)&7]); # X[]+K xfer to IALU
eval(shift(@insns));
eval(shift(@insns));
+ eval(shift(@insns));
+ eval(shift(@insns));
&psubd (@X[($Xi-4)&7],@Tx[1]);
foreach (@insns) { eval; }
@@ -465,76 +526,106 @@ sub Xtail_ssse3()
foreach (@insns) { eval; }
}
-sub body_00_19 () {
- use integer;
- my ($k,$n);
- my @r=(
+my @body_00_19 = (
'($a,$b,$c,$d,$e)=@V;'.
- '&add ($e,eval(4*($j&15))."(%rsp)");', # X[]+K xfer
- '&xor ($c,$d);',
- '&mov (@T[1],$a);', # $b in next round
- '&$_rol ($a,5);',
- '&and (@T[0],$c);', # ($b&($c^$d))
- '&xor ($c,$d);', # restore $c
- '&xor (@T[0],$d);',
- '&add ($e,$a);',
'&$_ror ($b,$j?7:2);', # $b>>>2
- '&add ($e,@T[0]);' .'$j++; unshift(@V,pop(@V)); unshift(@T,pop(@T));'
+ '&xor (@T[0],$d);',
+ '&mov (@T[1],$a);', # $b for next round
+
+ '&add ($e,eval(4*($j&15))."(%rsp)");',# X[]+K xfer
+ '&xor ($b,$c);', # $c^$d for next round
+
+ '&$_rol ($a,5);',
+ '&add ($e,@T[0]);',
+ '&and (@T[1],$b);', # ($b&($c^$d)) for next round
+
+ '&xor ($b,$c);', # restore $b
+ '&add ($e,$a);' .'$j++; unshift(@V,pop(@V)); unshift(@T,pop(@T));'
);
+
+sub body_00_19 () { # ((c^d)&b)^d
+ # on start @T[0]=(c^d)&b
+ return &body_20_39() if ($rx==19); $rx++;
+
+ use integer;
+ my ($k,$n);
+ my @r=@body_00_19;
+
$n = scalar(@r);
$k = (($jj+1)*12/20)*20*$n/12; # 12 aesencs per these 20 rounds
@r[$k%$n].='&$aesenc();' if ($jj==$k/$n);
$jj++;
+
return @r;
}
-sub body_20_39 () {
- use integer;
- my ($k,$n);
- my @r=(
+my @body_20_39 = (
'($a,$b,$c,$d,$e)=@V;'.
- '&add ($e,eval(4*($j++&15))."(%rsp)");', # X[]+K xfer
- '&xor (@T[0],$d);', # ($b^$d)
- '&mov (@T[1],$a);', # $b in next round
+ '&add ($e,eval(4*($j&15))."(%rsp)");',# X[]+K xfer
+ '&xor (@T[0],$d) if($j==19);'.
+ '&xor (@T[0],$c) if($j> 19);', # ($b^$d^$c)
+ '&mov (@T[1],$a);', # $b for next round
+
'&$_rol ($a,5);',
- '&xor (@T[0],$c);', # ($b^$d^$c)
- '&add ($e,$a);',
+ '&add ($e,@T[0]);',
+ '&xor (@T[1],$c) if ($j< 79);', # $b^$d for next round
+
'&$_ror ($b,7);', # $b>>>2
- '&add ($e,@T[0]);' .'unshift(@V,pop(@V)); unshift(@T,pop(@T));'
+ '&add ($e,$a);' .'$j++; unshift(@V,pop(@V)); unshift(@T,pop(@T));'
);
+
+sub body_20_39 () { # b^d^c
+ # on entry @T[0]=b^d
+ return &body_40_59() if ($rx==39); $rx++;
+
+ use integer;
+ my ($k,$n);
+ my @r=@body_20_39;
+
$n = scalar(@r);
$k = (($jj+1)*8/20)*20*$n/8; # 8 aesencs per these 20 rounds
- @r[$k%$n].='&$aesenc();' if ($jj==$k/$n);
+ @r[$k%$n].='&$aesenc();' if ($jj==$k/$n && $rx!=20);
$jj++;
+
return @r;
}
-sub body_40_59 () {
- use integer;
- my ($k,$n);
- my @r=(
+my @body_40_59 = (
'($a,$b,$c,$d,$e)=@V;'.
- '&mov (@T[1],$c);',
- '&xor ($c,$d);',
- '&add ($e,eval(4*($j++&15))."(%rsp)");', # X[]+K xfer
- '&and (@T[1],$d);',
- '&and (@T[0],$c);', # ($b&($c^$d))
+ '&add ($e,eval(4*($j&15))."(%rsp)");',# X[]+K xfer
+ '&and (@T[0],$c) if ($j>=40);', # (b^c)&(c^d)
+ '&xor ($c,$d) if ($j>=40);', # restore $c
+
'&$_ror ($b,7);', # $b>>>2
- '&add ($e,@T[1]);',
- '&mov (@T[1],$a);', # $b in next round
+ '&mov (@T[1],$a);', # $b for next round
+ '&xor (@T[0],$c);',
+
'&$_rol ($a,5);',
'&add ($e,@T[0]);',
- '&xor ($c,$d);', # restore $c
- '&add ($e,$a);' .'unshift(@V,pop(@V)); unshift(@T,pop(@T));'
+ '&xor (@T[1],$c) if ($j==59);'.
+ '&xor (@T[1],$b) if ($j< 59);', # b^c for next round
+
+ '&xor ($b,$c) if ($j< 59);', # c^d for next round
+ '&add ($e,$a);' .'$j++; unshift(@V,pop(@V)); unshift(@T,pop(@T));'
);
+
+sub body_40_59 () { # ((b^c)&(c^d))^c
+ # on entry @T[0]=(b^c), (c^=d)
+ $rx++;
+
+ use integer;
+ my ($k,$n);
+ my @r=@body_40_59;
+
$n = scalar(@r);
$k=(($jj+1)*12/20)*20*$n/12; # 12 aesencs per these 20 rounds
- @r[$k%$n].='&$aesenc();' if ($jj==$k/$n);
+ @r[$k%$n].='&$aesenc();' if ($jj==$k/$n && $rx!=40);
$jj++;
+
return @r;
}
$code.=<<___;
-.align 16
+.align 32
.Loop_ssse3:
___
&Xupdate_ssse3_16_31(\&body_00_19);
@@ -553,7 +644,7 @@ ___
&Xupdate_ssse3_32_79(\&body_40_59);
&Xupdate_ssse3_32_79(\&body_40_59);
&Xupdate_ssse3_32_79(\&body_20_39);
- &Xuplast_ssse3_80(\&body_20_39); # can jump to "done"
+ &Xuplast_ssse3_80(\&body_20_39,".Ldone_ssse3"); # can jump to "done"
$saved_j=$j; @saved_V=@V;
$saved_r=$r; @saved_rndkey=@rndkey;
@@ -575,11 +666,13 @@ $code.=<<___;
mov @T[0],4($ctx)
mov @T[0],$B # magic seed
mov $C,8($ctx)
+ mov $C,@T[1]
mov $D,12($ctx)
+ xor $D,@T[1]
mov $E,16($ctx)
+ and @T[1],@T[0]
jmp .Loop_ssse3
-.align 16
.Ldone_ssse3:
___
$jj=$j=$saved_j; @V=@saved_V;
@@ -631,7 +724,278 @@ $code.=<<___;
.size aesni_cbc_sha1_enc_ssse3,.-aesni_cbc_sha1_enc_ssse3
___
-$j=$jj=$r=$sn=0;
+ if ($stitched_decrypt) {{{
+# reset
+($in0,$out,$len,$key,$ivp,$ctx,$inp)=("%rdi","%rsi","%rdx","%rcx","%r8","%r9","%r10");
+$j=$jj=$r=$rx=0;
+$Xi=4;
+
+# reassign for Atom Silvermont (see above)
+($inout0,$inout1,$inout2,$inout3,$rndkey0)=map("%xmm$_",(0..4));
+@X=map("%xmm$_",(8..13,6,7));
+@Tx=map("%xmm$_",(14,15,5));
+
+my @aes256_dec = (
+ '&movdqu($inout0,"0x00($in0)");',
+ '&movdqu($inout1,"0x10($in0)"); &pxor ($inout0,$rndkey0);',
+ '&movdqu($inout2,"0x20($in0)"); &pxor ($inout1,$rndkey0);',
+ '&movdqu($inout3,"0x30($in0)"); &pxor ($inout2,$rndkey0);',
+
+ '&pxor ($inout3,$rndkey0); &movups ($rndkey0,"16-112($key)");',
+ '&movaps("64(%rsp)",@X[2]);', # save IV, originally @X[3]
+ undef,undef
+ );
+for ($i=0;$i<13;$i++) {
+ push (@aes256_dec,(
+ '&aesdec ($inout0,$rndkey0);',
+ '&aesdec ($inout1,$rndkey0);',
+ '&aesdec ($inout2,$rndkey0);',
+ '&aesdec ($inout3,$rndkey0); &movups($rndkey0,"'.(16*($i+2)-112).'($key)");'
+ ));
+ push (@aes256_dec,(undef,undef)) if (($i>=3 && $i<=5) || $i>=11);
+ push (@aes256_dec,(undef,undef)) if ($i==5);
+}
+push(@aes256_dec,(
+ '&aesdeclast ($inout0,$rndkey0); &movups (@X[0],"0x00($in0)");',
+ '&aesdeclast ($inout1,$rndkey0); &movups (@X[1],"0x10($in0)");',
+ '&aesdeclast ($inout2,$rndkey0); &movups (@X[2],"0x20($in0)");',
+ '&aesdeclast ($inout3,$rndkey0); &movups (@X[3],"0x30($in0)");',
+
+ '&xorps ($inout0,"64(%rsp)"); &movdqu ($rndkey0,"-112($key)");',
+ '&xorps ($inout1,@X[0]); &movups ("0x00($out,$in0)",$inout0);',
+ '&xorps ($inout2,@X[1]); &movups ("0x10($out,$in0)",$inout1);',
+ '&xorps ($inout3,@X[2]); &movups ("0x20($out,$in0)",$inout2);',
+
+ '&movups ("0x30($out,$in0)",$inout3);'
+ ));
+
+sub body_00_19_dec () { # ((c^d)&b)^d
+ # on start @T[0]=(c^d)&b
+ return &body_20_39_dec() if ($rx==19);
+
+ my @r=@body_00_19;
+
+ unshift (@r,@aes256_dec[$rx]) if (@aes256_dec[$rx]);
+ $rx++;
+
+ return @r;
+}
+
+sub body_20_39_dec () { # b^d^c
+ # on entry @T[0]=b^d
+ return &body_40_59_dec() if ($rx==39);
+
+ my @r=@body_20_39;
+
+ unshift (@r,@aes256_dec[$rx]) if (@aes256_dec[$rx]);
+ $rx++;
+
+ return @r;
+}
+
+sub body_40_59_dec () { # ((b^c)&(c^d))^c
+ # on entry @T[0]=(b^c), (c^=d)
+
+ my @r=@body_40_59;
+
+ unshift (@r,@aes256_dec[$rx]) if (@aes256_dec[$rx]);
+ $rx++;
+
+ return @r;
+}
+
+$code.=<<___;
+.globl aesni256_cbc_sha1_dec
+.type aesni256_cbc_sha1_dec,\@abi-omnipotent
+.align 32
+aesni256_cbc_sha1_dec:
+ # caller should check for SSSE3 and AES-NI bits
+ mov OPENSSL_ia32cap_P+0(%rip),%r10d
+ mov OPENSSL_ia32cap_P+4(%rip),%r11d
+___
+$code.=<<___ if ($avx);
+ and \$`1<<28`,%r11d # mask AVX bit
+ and \$`1<<30`,%r10d # mask "Intel CPU" bit
+ or %r11d,%r10d
+ cmp \$`1<<28|1<<30`,%r10d
+ je aesni256_cbc_sha1_dec_avx
+___
+$code.=<<___;
+ jmp aesni256_cbc_sha1_dec_ssse3
+ ret
+.size aesni256_cbc_sha1_dec,.-aesni256_cbc_sha1_dec
+
+.type aesni256_cbc_sha1_dec_ssse3,\@function,6
+.align 32
+aesni256_cbc_sha1_dec_ssse3:
+ mov `($win64?56:8)`(%rsp),$inp # load 7th argument
+ push %rbx
+ push %rbp
+ push %r12
+ push %r13
+ push %r14
+ push %r15
+ lea `-104-($win64?10*16:0)`(%rsp),%rsp
+___
+$code.=<<___ if ($win64);
+ movaps %xmm6,96+0(%rsp)
+ movaps %xmm7,96+16(%rsp)
+ movaps %xmm8,96+32(%rsp)
+ movaps %xmm9,96+48(%rsp)
+ movaps %xmm10,96+64(%rsp)
+ movaps %xmm11,96+80(%rsp)
+ movaps %xmm12,96+96(%rsp)
+ movaps %xmm13,96+112(%rsp)
+ movaps %xmm14,96+128(%rsp)
+ movaps %xmm15,96+144(%rsp)
+.Lprologue_dec_ssse3:
+___
+$code.=<<___;
+ mov $in0,%r12 # reassign arguments
+ mov $out,%r13
+ mov $len,%r14
+ lea 112($key),%r15 # size optimization
+ movdqu ($ivp),@X[3] # load IV
+ #mov $ivp,88(%rsp) # save $ivp
+___
+($in0,$out,$len,$key)=map("%r$_",(12..15)); # reassign arguments
+$code.=<<___;
+ shl \$6,$len
+ sub $in0,$out
+ add $inp,$len # end of input
+
+ lea K_XX_XX(%rip),$K_XX_XX
+ mov 0($ctx),$A # load context
+ mov 4($ctx),$B
+ mov 8($ctx),$C
+ mov 12($ctx),$D
+ mov $B,@T[0] # magic seed
+ mov 16($ctx),$E
+ mov $C,@T[1]
+ xor $D,@T[1]
+ and @T[1],@T[0]
+
+ movdqa 64($K_XX_XX),@Tx[2] # pbswap mask
+ movdqa 0($K_XX_XX),@Tx[1] # K_00_19
+ movdqu 0($inp),@X[-4&7] # load input to %xmm[0-3]
+ movdqu 16($inp),@X[-3&7]
+ movdqu 32($inp),@X[-2&7]
+ movdqu 48($inp),@X[-1&7]
+ pshufb @Tx[2],@X[-4&7] # byte swap
+ add \$64,$inp
+ pshufb @Tx[2],@X[-3&7]
+ pshufb @Tx[2],@X[-2&7]
+ pshufb @Tx[2],@X[-1&7]
+ paddd @Tx[1],@X[-4&7] # add K_00_19
+ paddd @Tx[1],@X[-3&7]
+ paddd @Tx[1],@X[-2&7]
+ movdqa @X[-4&7],0(%rsp) # X[]+K xfer to IALU
+ psubd @Tx[1],@X[-4&7] # restore X[]
+ movdqa @X[-3&7],16(%rsp)
+ psubd @Tx[1],@X[-3&7]
+ movdqa @X[-2&7],32(%rsp)
+ psubd @Tx[1],@X[-2&7]
+ movdqu -112($key),$rndkey0 # $key[0]
+ jmp .Loop_dec_ssse3
+
+.align 32
+.Loop_dec_ssse3:
+___
+ &Xupdate_ssse3_16_31(\&body_00_19_dec);
+ &Xupdate_ssse3_16_31(\&body_00_19_dec);
+ &Xupdate_ssse3_16_31(\&body_00_19_dec);
+ &Xupdate_ssse3_16_31(\&body_00_19_dec);
+ &Xupdate_ssse3_32_79(\&body_00_19_dec);
+ &Xupdate_ssse3_32_79(\&body_20_39_dec);
+ &Xupdate_ssse3_32_79(\&body_20_39_dec);
+ &Xupdate_ssse3_32_79(\&body_20_39_dec);
+ &Xupdate_ssse3_32_79(\&body_20_39_dec);
+ &Xupdate_ssse3_32_79(\&body_20_39_dec);
+ &Xupdate_ssse3_32_79(\&body_40_59_dec);
+ &Xupdate_ssse3_32_79(\&body_40_59_dec);
+ &Xupdate_ssse3_32_79(\&body_40_59_dec);
+ &Xupdate_ssse3_32_79(\&body_40_59_dec);
+ &Xupdate_ssse3_32_79(\&body_40_59_dec);
+ &Xupdate_ssse3_32_79(\&body_20_39_dec);
+ &Xuplast_ssse3_80(\&body_20_39_dec,".Ldone_dec_ssse3"); # can jump to "done"
+
+ $saved_j=$j; @saved_V=@V;
+ $saved_rx=$rx;
+
+ &Xloop_ssse3(\&body_20_39_dec);
+ &Xloop_ssse3(\&body_20_39_dec);
+ &Xloop_ssse3(\&body_20_39_dec);
+
+ eval(@aes256_dec[-1]); # last store
+$code.=<<___;
+ lea 64($in0),$in0
+
+ add 0($ctx),$A # update context
+ add 4($ctx),@T[0]
+ add 8($ctx),$C
+ add 12($ctx),$D
+ mov $A,0($ctx)
+ add 16($ctx),$E
+ mov @T[0],4($ctx)
+ mov @T[0],$B # magic seed
+ mov $C,8($ctx)
+ mov $C,@T[1]
+ mov $D,12($ctx)
+ xor $D,@T[1]
+ mov $E,16($ctx)
+ and @T[1],@T[0]
+ jmp .Loop_dec_ssse3
+
+.Ldone_dec_ssse3:
+___
+ $jj=$j=$saved_j; @V=@saved_V;
+ $rx=$saved_rx;
+
+ &Xtail_ssse3(\&body_20_39_dec);
+ &Xtail_ssse3(\&body_20_39_dec);
+ &Xtail_ssse3(\&body_20_39_dec);
+
+ eval(@aes256_dec[-1]); # last store
+$code.=<<___;
+ add 0($ctx),$A # update context
+ add 4($ctx),@T[0]
+ add 8($ctx),$C
+ mov $A,0($ctx)
+ add 12($ctx),$D
+ mov @T[0],4($ctx)
+ add 16($ctx),$E
+ mov $C,8($ctx)
+ mov $D,12($ctx)
+ mov $E,16($ctx)
+ movups @X[3],($ivp) # write IV
+___
+$code.=<<___ if ($win64);
+ movaps 96+0(%rsp),%xmm6
+ movaps 96+16(%rsp),%xmm7
+ movaps 96+32(%rsp),%xmm8
+ movaps 96+48(%rsp),%xmm9
+ movaps 96+64(%rsp),%xmm10
+ movaps 96+80(%rsp),%xmm11
+ movaps 96+96(%rsp),%xmm12
+ movaps 96+112(%rsp),%xmm13
+ movaps 96+128(%rsp),%xmm14
+ movaps 96+144(%rsp),%xmm15
+___
+$code.=<<___;
+ lea `104+($win64?10*16:0)`(%rsp),%rsi
+ mov 0(%rsi),%r15
+ mov 8(%rsi),%r14
+ mov 16(%rsi),%r13
+ mov 24(%rsi),%r12
+ mov 32(%rsi),%rbp
+ mov 40(%rsi),%rbx
+ lea 48(%rsi),%rsp
+.Lepilogue_dec_ssse3:
+ ret
+.size aesni256_cbc_sha1_dec_ssse3,.-aesni256_cbc_sha1_dec_ssse3
+___
+ }}}
+$j=$jj=$r=$rx=0;
if ($avx) {
my ($in0,$out,$len,$key,$ivp,$ctx,$inp)=("%rdi","%rsi","%rdx","%rcx","%r8","%r9","%r10");
@@ -641,13 +1005,17 @@ my @X=map("%xmm$_",(4..7,0..3));
my @Tx=map("%xmm$_",(8..10));
my @V=($A,$B,$C,$D,$E)=("%eax","%ebx","%ecx","%edx","%ebp"); # size optimization
my @T=("%esi","%edi");
+my ($rndkey0,$iv,$in)=map("%xmm$_",(11..13));
+my @rndkey=("%xmm14","%xmm15");
+my ($inout0,$inout1,$inout2,$inout3)=map("%xmm$_",(12..15)); # for dec
+my $Kx=@Tx[2];
my $_rol=sub { &shld(@_[0],@_) };
my $_ror=sub { &shrd(@_[0],@_) };
$code.=<<___;
.type aesni_cbc_sha1_enc_avx,\@function,6
-.align 16
+.align 32
aesni_cbc_sha1_enc_avx:
mov `($win64?56:8)`(%rsp),$inp # load 7th argument
#shr \$6,$len # debugging artefact
@@ -680,17 +1048,16 @@ $code.=<<___;
mov $in0,%r12 # reassign arguments
mov $out,%r13
mov $len,%r14
- mov $key,%r15
+ lea 112($key),%r15 # size optimization
vmovdqu ($ivp),$iv # load IV
mov $ivp,88(%rsp) # save $ivp
___
-my ($in0,$out,$len,$key)=map("%r$_",(12..15)); # reassign arguments
+($in0,$out,$len,$key)=map("%r$_",(12..15)); # reassign arguments
my $rounds="${ivp}d";
$code.=<<___;
shl \$6,$len
sub $in0,$out
- mov 240($key),$rounds
- add \$112,$key # size optimization
+ mov 240-112($key),$rounds
add $inp,$len # end of input
lea K_XX_XX(%rip),$K_XX_XX
@@ -700,9 +1067,12 @@ $code.=<<___;
mov 12($ctx),$D
mov $B,@T[0] # magic seed
mov 16($ctx),$E
+ mov $C,@T[1]
+ xor $D,@T[1]
+ and @T[1],@T[0]
vmovdqa 64($K_XX_XX),@X[2] # pbswap mask
- vmovdqa 0($K_XX_XX),@Tx[1] # K_00_19
+ vmovdqa 0($K_XX_XX),$Kx # K_00_19
vmovdqu 0($inp),@X[-4&7] # load input to %xmm[0-3]
vmovdqu 16($inp),@X[-3&7]
vmovdqu 32($inp),@X[-2&7]
@@ -712,13 +1082,13 @@ $code.=<<___;
vpshufb @X[2],@X[-3&7],@X[-3&7]
vpshufb @X[2],@X[-2&7],@X[-2&7]
vpshufb @X[2],@X[-1&7],@X[-1&7]
- vpaddd @Tx[1],@X[-4&7],@X[0] # add K_00_19
- vpaddd @Tx[1],@X[-3&7],@X[1]
- vpaddd @Tx[1],@X[-2&7],@X[2]
+ vpaddd $Kx,@X[-4&7],@X[0] # add K_00_19
+ vpaddd $Kx,@X[-3&7],@X[1]
+ vpaddd $Kx,@X[-2&7],@X[2]
vmovdqa @X[0],0(%rsp) # X[]+K xfer to IALU
vmovdqa @X[1],16(%rsp)
vmovdqa @X[2],32(%rsp)
- vmovups -112($key),$rndkey0 # $key[0]
+ vmovups -112($key),$rndkey[1] # $key[0]
vmovups 16-112($key),$rndkey[0] # forward reference
jmp .Loop_avx
___
@@ -728,14 +1098,14 @@ my $aesenc=sub {
my ($n,$k)=($r/10,$r%10);
if ($k==0) {
$code.=<<___;
- vmovups `16*$n`($in0),$in # load input
- vxorps $rndkey0,$in,$in
+ vmovdqu `16*$n`($in0),$in # load input
+ vpxor $rndkey[1],$in,$in
___
$code.=<<___ if ($n);
vmovups $iv,`16*($n-1)`($out,$in0) # write output
___
$code.=<<___;
- vxorps $in,$iv,$iv
+ vpxor $in,$iv,$iv
vaesenc $rndkey[0],$iv,$iv
vmovups `32+16*$k-112`($key),$rndkey[1]
___
@@ -755,6 +1125,7 @@ ___
vmovups `32+16*($k+3)-112`($key),$rndkey[0]
.Lvaesenclast$sn:
vaesenclast $rndkey[0],$iv,$iv
+ vmovups -112($key),$rndkey[0]
vmovups 16-112($key),$rndkey[1] # forward reference
___
} else {
@@ -778,10 +1149,10 @@ sub Xupdate_avx_16_31() # recall that $Xi starts wtih 4
eval(shift(@insns));
eval(shift(@insns));
- &vpaddd (@Tx[1],@Tx[1],@X[-1&7]);
+ &vpaddd (@Tx[1],$Kx,@X[-1&7]);
eval(shift(@insns));
eval(shift(@insns));
- &vpsrldq(@Tx[0],@X[-1&7],4); # "X[-3]", 3 dwords
+ &vpsrldq(@Tx[0],@X[-1&7],4); # "X[-3]", 3 dwords
eval(shift(@insns));
eval(shift(@insns));
&vpxor (@X[0],@X[0],@X[-4&7]); # "X[0]"^="X[-16]"
@@ -807,31 +1178,31 @@ sub Xupdate_avx_16_31() # recall that $Xi starts wtih 4
eval(shift(@insns));
eval(shift(@insns));
- &vpslldq(@Tx[2],@X[0],12); # "X[0]"<<96, extract one dword
+ &vpslldq(@Tx[1],@X[0],12); # "X[0]"<<96, extract one dword
&vpaddd (@X[0],@X[0],@X[0]);
eval(shift(@insns));
eval(shift(@insns));
eval(shift(@insns));
eval(shift(@insns));
- &vpsrld (@Tx[1],@Tx[2],30);
&vpor (@X[0],@X[0],@Tx[0]); # "X[0]"<<<=1
+ &vpsrld (@Tx[0],@Tx[1],30);
eval(shift(@insns));
eval(shift(@insns));
eval(shift(@insns));
eval(shift(@insns));
- &vpslld (@Tx[2],@Tx[2],2);
- &vpxor (@X[0],@X[0],@Tx[1]);
+ &vpslld (@Tx[1],@Tx[1],2);
+ &vpxor (@X[0],@X[0],@Tx[0]);
eval(shift(@insns));
eval(shift(@insns));
eval(shift(@insns));
eval(shift(@insns));
- &vpxor (@X[0],@X[0],@Tx[2]); # "X[0]"^=("X[0]">>96)<<<2
+ &vpxor (@X[0],@X[0],@Tx[1]); # "X[0]"^=("X[0]">>96)<<<2
eval(shift(@insns));
eval(shift(@insns));
- &vmovdqa (@Tx[2],eval(16*(($Xi)/5))."($K_XX_XX)"); # K_XX_XX
+ &vmovdqa ($Kx,eval(16*(($Xi)/5))."($K_XX_XX)") if ($Xi%5==0); # K_XX_XX
eval(shift(@insns));
eval(shift(@insns));
@@ -839,7 +1210,6 @@ sub Xupdate_avx_16_31() # recall that $Xi starts wtih 4
foreach (@insns) { eval; } # remaining instructions [if any]
$Xi++; push(@X,shift(@X)); # "rotate" X[]
- push(@Tx,shift(@Tx));
}
sub Xupdate_avx_32_79()
@@ -858,12 +1228,8 @@ sub Xupdate_avx_32_79()
&vpxor (@X[0],@X[0],@X[-7&7]); # "X[0]"^="X[-28]"
eval(shift(@insns));
eval(shift(@insns)) if (@insns[0] !~ /&ro[rl]/);
- if ($Xi%5) {
- &vmovdqa (@Tx[2],@Tx[1]);# "perpetuate" K_XX_XX...
- } else { # ... or load next one
- &vmovdqa (@Tx[2],eval(16*($Xi/5))."($K_XX_XX)");
- }
- &vpaddd (@Tx[1],@Tx[1],@X[-1&7]);
+ &vpaddd (@Tx[1],$Kx,@X[-1&7]);
+ &vmovdqa ($Kx,eval(16*($Xi/5))."($K_XX_XX)") if ($Xi%5==0);
eval(shift(@insns)); # ror
eval(shift(@insns));
@@ -893,7 +1259,6 @@ sub Xupdate_avx_32_79()
&vpor (@X[0],@X[0],@Tx[0]); # "X[0]"<<<=2
eval(shift(@insns)); # body_20_39
eval(shift(@insns));
- &vmovdqa (@Tx[1],@X[0]) if ($Xi<19);
eval(shift(@insns));
eval(shift(@insns)); # rol
eval(shift(@insns));
@@ -904,7 +1269,6 @@ sub Xupdate_avx_32_79()
foreach (@insns) { eval; } # remaining instructions
$Xi++; push(@X,shift(@X)); # "rotate" X[]
- push(@Tx,shift(@Tx));
}
sub Xuplast_avx_80()
@@ -914,28 +1278,26 @@ sub Xuplast_avx_80()
my ($a,$b,$c,$d,$e);
eval(shift(@insns));
- &vpaddd (@Tx[1],@Tx[1],@X[-1&7]);
+ &vpaddd (@Tx[1],$Kx,@X[-1&7]);
eval(shift(@insns));
eval(shift(@insns));
eval(shift(@insns));
eval(shift(@insns));
- &movdqa (eval(16*(($Xi-1)&3))."(%rsp)",@Tx[1]); # X[]+K xfer IALU
+ &vmovdqa (eval(16*(($Xi-1)&3))."(%rsp)",@Tx[1]); # X[]+K xfer IALU
foreach (@insns) { eval; } # remaining instructions
&cmp ($inp,$len);
- &je (".Ldone_avx");
+ &je (shift);
- unshift(@Tx,pop(@Tx));
-
- &vmovdqa(@X[2],"64($K_XX_XX)"); # pbswap mask
- &vmovdqa(@Tx[1],"0($K_XX_XX)"); # K_00_19
+ &vmovdqa(@Tx[1],"64($K_XX_XX)"); # pbswap mask
+ &vmovdqa($Kx,"0($K_XX_XX)"); # K_00_19
&vmovdqu(@X[-4&7],"0($inp)"); # load input
&vmovdqu(@X[-3&7],"16($inp)");
&vmovdqu(@X[-2&7],"32($inp)");
&vmovdqu(@X[-1&7],"48($inp)");
- &vpshufb(@X[-4&7],@X[-4&7],@X[2]); # byte swap
+ &vpshufb(@X[-4&7],@X[-4&7],@Tx[1]); # byte swap
&add ($inp,64);
$Xi=0;
@@ -949,15 +1311,15 @@ sub Xloop_avx()
eval(shift(@insns));
eval(shift(@insns));
- &vpshufb(@X[($Xi-3)&7],@X[($Xi-3)&7],@X[2]);
+ &vpshufb(@X[($Xi-3)&7],@X[($Xi-3)&7],@Tx[1]);
eval(shift(@insns));
eval(shift(@insns));
- &vpaddd (@X[$Xi&7],@X[($Xi-4)&7],@Tx[1]);
+ &vpaddd (@Tx[0],@X[($Xi-4)&7],$Kx);
eval(shift(@insns));
eval(shift(@insns));
eval(shift(@insns));
eval(shift(@insns));
- &vmovdqa(eval(16*$Xi)."(%rsp)",@X[$Xi&7]); # X[]+K xfer to IALU
+ &vmovdqa(eval(16*$Xi)."(%rsp)",@Tx[0]); # X[]+K xfer to IALU
eval(shift(@insns));
eval(shift(@insns));
@@ -975,7 +1337,7 @@ sub Xtail_avx()
}
$code.=<<___;
-.align 16
+.align 32
.Loop_avx:
___
&Xupdate_avx_16_31(\&body_00_19);
@@ -994,7 +1356,7 @@ ___
&Xupdate_avx_32_79(\&body_40_59);
&Xupdate_avx_32_79(\&body_40_59);
&Xupdate_avx_32_79(\&body_20_39);
- &Xuplast_avx_80(\&body_20_39); # can jump to "done"
+ &Xuplast_avx_80(\&body_20_39,".Ldone_avx"); # can jump to "done"
$saved_j=$j; @saved_V=@V;
$saved_r=$r; @saved_rndkey=@rndkey;
@@ -1016,11 +1378,13 @@ $code.=<<___;
mov @T[0],4($ctx)
mov @T[0],$B # magic seed
mov $C,8($ctx)
+ mov $C,@T[1]
mov $D,12($ctx)
+ xor $D,@T[1]
mov $E,16($ctx)
+ and @T[1],@T[0]
jmp .Loop_avx
-.align 16
.Ldone_avx:
___
$jj=$j=$saved_j; @V=@saved_V;
@@ -1072,6 +1436,218 @@ $code.=<<___;
ret
.size aesni_cbc_sha1_enc_avx,.-aesni_cbc_sha1_enc_avx
___
+
+ if ($stitched_decrypt) {{{
+# reset
+($in0,$out,$len,$key,$ivp,$ctx,$inp)=("%rdi","%rsi","%rdx","%rcx","%r8","%r9","%r10");
+
+$j=$jj=$r=$rx=0;
+$Xi=4;
+
+@aes256_dec = (
+ '&vpxor ($inout0,$rndkey0,"0x00($in0)");',
+ '&vpxor ($inout1,$rndkey0,"0x10($in0)");',
+ '&vpxor ($inout2,$rndkey0,"0x20($in0)");',
+ '&vpxor ($inout3,$rndkey0,"0x30($in0)");',
+
+ '&vmovups($rndkey0,"16-112($key)");',
+ '&vmovups("64(%rsp)",@X[2]);', # save IV, originally @X[3]
+ undef,undef
+ );
+for ($i=0;$i<13;$i++) {
+ push (@aes256_dec,(
+ '&vaesdec ($inout0,$inout0,$rndkey0);',
+ '&vaesdec ($inout1,$inout1,$rndkey0);',
+ '&vaesdec ($inout2,$inout2,$rndkey0);',
+ '&vaesdec ($inout3,$inout3,$rndkey0); &vmovups($rndkey0,"'.(16*($i+2)-112).'($key)");'
+ ));
+ push (@aes256_dec,(undef,undef)) if (($i>=3 && $i<=5) || $i>=11);
+ push (@aes256_dec,(undef,undef)) if ($i==5);
+}
+push(@aes256_dec,(
+ '&vaesdeclast ($inout0,$inout0,$rndkey0); &vmovups(@X[0],"0x00($in0)");',
+ '&vaesdeclast ($inout1,$inout1,$rndkey0); &vmovups(@X[1],"0x10($in0)");',
+ '&vaesdeclast ($inout2,$inout2,$rndkey0); &vmovups(@X[2],"0x20($in0)");',
+ '&vaesdeclast ($inout3,$inout3,$rndkey0); &vmovups(@X[3],"0x30($in0)");',
+
+ '&vxorps ($inout0,$inout0,"64(%rsp)"); &vmovdqu($rndkey0,"-112($key)");',
+ '&vxorps ($inout1,$inout1,@X[0]); &vmovups("0x00($out,$in0)",$inout0);',
+ '&vxorps ($inout2,$inout2,@X[1]); &vmovups("0x10($out,$in0)",$inout1);',
+ '&vxorps ($inout3,$inout3,@X[2]); &vmovups("0x20($out,$in0)",$inout2);',
+
+ '&vmovups ("0x30($out,$in0)",$inout3);'
+ ));
+
+$code.=<<___;
+.type aesni256_cbc_sha1_dec_avx,\@function,6
+.align 32
+aesni256_cbc_sha1_dec_avx:
+ mov `($win64?56:8)`(%rsp),$inp # load 7th argument
+ push %rbx
+ push %rbp
+ push %r12
+ push %r13
+ push %r14
+ push %r15
+ lea `-104-($win64?10*16:0)`(%rsp),%rsp
+___
+$code.=<<___ if ($win64);
+ movaps %xmm6,96+0(%rsp)
+ movaps %xmm7,96+16(%rsp)
+ movaps %xmm8,96+32(%rsp)
+ movaps %xmm9,96+48(%rsp)
+ movaps %xmm10,96+64(%rsp)
+ movaps %xmm11,96+80(%rsp)
+ movaps %xmm12,96+96(%rsp)
+ movaps %xmm13,96+112(%rsp)
+ movaps %xmm14,96+128(%rsp)
+ movaps %xmm15,96+144(%rsp)
+.Lprologue_dec_avx:
+___
+$code.=<<___;
+ vzeroall
+ mov $in0,%r12 # reassign arguments
+ mov $out,%r13
+ mov $len,%r14
+ lea 112($key),%r15 # size optimization
+ vmovdqu ($ivp),@X[3] # load IV
+___
+($in0,$out,$len,$key)=map("%r$_",(12..15)); # reassign arguments
+$code.=<<___;
+ shl \$6,$len
+ sub $in0,$out
+ add $inp,$len # end of input
+
+ lea K_XX_XX(%rip),$K_XX_XX
+ mov 0($ctx),$A # load context
+ mov 4($ctx),$B
+ mov 8($ctx),$C
+ mov 12($ctx),$D
+ mov $B,@T[0] # magic seed
+ mov 16($ctx),$E
+ mov $C,@T[1]
+ xor $D,@T[1]
+ and @T[1],@T[0]
+
+ vmovdqa 64($K_XX_XX),@X[2] # pbswap mask
+ vmovdqa 0($K_XX_XX),$Kx # K_00_19
+ vmovdqu 0($inp),@X[-4&7] # load input to %xmm[0-3]
+ vmovdqu 16($inp),@X[-3&7]
+ vmovdqu 32($inp),@X[-2&7]
+ vmovdqu 48($inp),@X[-1&7]
+ vpshufb @X[2],@X[-4&7],@X[-4&7] # byte swap
+ add \$64,$inp
+ vpshufb @X[2],@X[-3&7],@X[-3&7]
+ vpshufb @X[2],@X[-2&7],@X[-2&7]
+ vpshufb @X[2],@X[-1&7],@X[-1&7]
+ vpaddd $Kx,@X[-4&7],@X[0] # add K_00_19
+ vpaddd $Kx,@X[-3&7],@X[1]
+ vpaddd $Kx,@X[-2&7],@X[2]
+ vmovdqa @X[0],0(%rsp) # X[]+K xfer to IALU
+ vmovdqa @X[1],16(%rsp)
+ vmovdqa @X[2],32(%rsp)
+ vmovups -112($key),$rndkey0 # $key[0]
+ jmp .Loop_dec_avx
+
+.align 32
+.Loop_dec_avx:
+___
+ &Xupdate_avx_16_31(\&body_00_19_dec);
+ &Xupdate_avx_16_31(\&body_00_19_dec);
+ &Xupdate_avx_16_31(\&body_00_19_dec);
+ &Xupdate_avx_16_31(\&body_00_19_dec);
+ &Xupdate_avx_32_79(\&body_00_19_dec);
+ &Xupdate_avx_32_79(\&body_20_39_dec);
+ &Xupdate_avx_32_79(\&body_20_39_dec);
+ &Xupdate_avx_32_79(\&body_20_39_dec);
+ &Xupdate_avx_32_79(\&body_20_39_dec);
+ &Xupdate_avx_32_79(\&body_20_39_dec);
+ &Xupdate_avx_32_79(\&body_40_59_dec);
+ &Xupdate_avx_32_79(\&body_40_59_dec);
+ &Xupdate_avx_32_79(\&body_40_59_dec);
+ &Xupdate_avx_32_79(\&body_40_59_dec);
+ &Xupdate_avx_32_79(\&body_40_59_dec);
+ &Xupdate_avx_32_79(\&body_20_39_dec);
+ &Xuplast_avx_80(\&body_20_39_dec,".Ldone_dec_avx"); # can jump to "done"
+
+ $saved_j=$j; @saved_V=@V;
+ $saved_rx=$rx;
+
+ &Xloop_avx(\&body_20_39_dec);
+ &Xloop_avx(\&body_20_39_dec);
+ &Xloop_avx(\&body_20_39_dec);
+
+ eval(@aes256_dec[-1]); # last store
+$code.=<<___;
+ lea 64($in0),$in0
+
+ add 0($ctx),$A # update context
+ add 4($ctx),@T[0]
+ add 8($ctx),$C
+ add 12($ctx),$D
+ mov $A,0($ctx)
+ add 16($ctx),$E
+ mov @T[0],4($ctx)
+ mov @T[0],$B # magic seed
+ mov $C,8($ctx)
+ mov $C,@T[1]
+ mov $D,12($ctx)
+ xor $D,@T[1]
+ mov $E,16($ctx)
+ and @T[1],@T[0]
+ jmp .Loop_dec_avx
+
+.Ldone_dec_avx:
+___
+ $jj=$j=$saved_j; @V=@saved_V;
+ $rx=$saved_rx;
+
+ &Xtail_avx(\&body_20_39_dec);
+ &Xtail_avx(\&body_20_39_dec);
+ &Xtail_avx(\&body_20_39_dec);
+
+ eval(@aes256_dec[-1]); # last store
+$code.=<<___;
+
+ add 0($ctx),$A # update context
+ add 4($ctx),@T[0]
+ add 8($ctx),$C
+ mov $A,0($ctx)
+ add 12($ctx),$D
+ mov @T[0],4($ctx)
+ add 16($ctx),$E
+ mov $C,8($ctx)
+ mov $D,12($ctx)
+ mov $E,16($ctx)
+ vmovups @X[3],($ivp) # write IV
+ vzeroall
+___
+$code.=<<___ if ($win64);
+ movaps 96+0(%rsp),%xmm6
+ movaps 96+16(%rsp),%xmm7
+ movaps 96+32(%rsp),%xmm8
+ movaps 96+48(%rsp),%xmm9
+ movaps 96+64(%rsp),%xmm10
+ movaps 96+80(%rsp),%xmm11
+ movaps 96+96(%rsp),%xmm12
+ movaps 96+112(%rsp),%xmm13
+ movaps 96+128(%rsp),%xmm14
+ movaps 96+144(%rsp),%xmm15
+___
+$code.=<<___;
+ lea `104+($win64?10*16:0)`(%rsp),%rsi
+ mov 0(%rsi),%r15
+ mov 8(%rsi),%r14
+ mov 16(%rsi),%r13
+ mov 24(%rsi),%r12
+ mov 32(%rsi),%rbp
+ mov 40(%rsi),%rbx
+ lea 48(%rsi),%rsp
+.Lepilogue_dec_avx:
+ ret
+.size aesni256_cbc_sha1_dec_avx,.-aesni256_cbc_sha1_dec_avx
+___
+ }}}
}
$code.=<<___;
.align 64
@@ -1081,11 +1657,180 @@ K_XX_XX:
.long 0x8f1bbcdc,0x8f1bbcdc,0x8f1bbcdc,0x8f1bbcdc # K_40_59
.long 0xca62c1d6,0xca62c1d6,0xca62c1d6,0xca62c1d6 # K_60_79
.long 0x00010203,0x04050607,0x08090a0b,0x0c0d0e0f # pbswap mask
+.byte 0xf,0xe,0xd,0xc,0xb,0xa,0x9,0x8,0x7,0x6,0x5,0x4,0x3,0x2,0x1,0x0
.asciz "AESNI-CBC+SHA1 stitch for x86_64, CRYPTOGAMS by <appro\@openssl.org>"
.align 64
___
+ if ($shaext) {{{
+($in0,$out,$len,$key,$ivp,$ctx,$inp)=("%rdi","%rsi","%rdx","%rcx","%r8","%r9","%r10");
+
+$rounds="%r11d";
+
+($iv,$in,$rndkey0)=map("%xmm$_",(2,14,15));
+@rndkey=("%xmm0","%xmm1");
+$r=0;
+
+my ($BSWAP,$ABCD,$E,$E_,$ABCD_SAVE,$E_SAVE)=map("%xmm$_",(7..12));
+my @MSG=map("%xmm$_",(3..6));
+
+$code.=<<___;
+.type aesni_cbc_sha1_enc_shaext,\@function,6
+.align 32
+aesni_cbc_sha1_enc_shaext:
+ mov `($win64?56:8)`(%rsp),$inp # load 7th argument
+___
+$code.=<<___ if ($win64);
+ lea `-8-10*16`(%rsp),%rsp
+ movaps %xmm6,-8-10*16(%rax)
+ movaps %xmm7,-8-9*16(%rax)
+ movaps %xmm8,-8-8*16(%rax)
+ movaps %xmm9,-8-7*16(%rax)
+ movaps %xmm10,-8-6*16(%rax)
+ movaps %xmm11,-8-5*16(%rax)
+ movaps %xmm12,-8-4*16(%rax)
+ movaps %xmm13,-8-3*16(%rax)
+ movaps %xmm14,-8-2*16(%rax)
+ movaps %xmm15,-8-1*16(%rax)
+.Lprologue_shaext:
+___
+$code.=<<___;
+ movdqu ($ctx),$ABCD
+ movd 16($ctx),$E
+ movdqa K_XX_XX+0x50(%rip),$BSWAP # byte-n-word swap
+
+ mov 240($key),$rounds
+ sub $in0,$out
+ movups ($key),$rndkey0 # $key[0]
+ movups 16($key),$rndkey[0] # forward reference
+ lea 112($key),$key # size optimization
+
+ pshufd \$0b00011011,$ABCD,$ABCD # flip word order
+ pshufd \$0b00011011,$E,$E # flip word order
+ jmp .Loop_shaext
+.align 16
+.Loop_shaext:
+___
+ &$aesenc();
+$code.=<<___;
+ movdqu ($inp),@MSG[0]
+ movdqa $E,$E_SAVE # offload $E
+ pshufb $BSWAP,@MSG[0]
+ movdqu 0x10($inp),@MSG[1]
+ movdqa $ABCD,$ABCD_SAVE # offload $ABCD
+___
+ &$aesenc();
+$code.=<<___;
+ pshufb $BSWAP,@MSG[1]
+
+ paddd @MSG[0],$E
+ movdqu 0x20($inp),@MSG[2]
+ lea 0x40($inp),$inp
+ pxor $E_SAVE,@MSG[0] # black magic
+___
+ &$aesenc();
+$code.=<<___;
+ pxor $E_SAVE,@MSG[0] # black magic
+ movdqa $ABCD,$E_
+ pshufb $BSWAP,@MSG[2]
+ sha1rnds4 \$0,$E,$ABCD # 0-3
+ sha1nexte @MSG[1],$E_
+___
+ &$aesenc();
+$code.=<<___;
+ sha1msg1 @MSG[1],@MSG[0]
+ movdqu -0x10($inp),@MSG[3]
+ movdqa $ABCD,$E
+ pshufb $BSWAP,@MSG[3]
+___
+ &$aesenc();
+$code.=<<___;
+ sha1rnds4 \$0,$E_,$ABCD # 4-7
+ sha1nexte @MSG[2],$E
+ pxor @MSG[2],@MSG[0]
+ sha1msg1 @MSG[2],@MSG[1]
+___
+ &$aesenc();
+
+for($i=2;$i<20-4;$i++) {
+$code.=<<___;
+ movdqa $ABCD,$E_
+ sha1rnds4 \$`int($i/5)`,$E,$ABCD # 8-11
+ sha1nexte @MSG[3],$E_
+___
+ &$aesenc();
+$code.=<<___;
+ sha1msg2 @MSG[3],@MSG[0]
+ pxor @MSG[3],@MSG[1]
+ sha1msg1 @MSG[3],@MSG[2]
+___
+ ($E,$E_)=($E_,$E);
+ push(@MSG,shift(@MSG));
+
+ &$aesenc();
+}
+$code.=<<___;
+ movdqa $ABCD,$E_
+ sha1rnds4 \$3,$E,$ABCD # 64-67
+ sha1nexte @MSG[3],$E_
+ sha1msg2 @MSG[3],@MSG[0]
+ pxor @MSG[3],@MSG[1]
+___
+ &$aesenc();
+$code.=<<___;
+ movdqa $ABCD,$E
+ sha1rnds4 \$3,$E_,$ABCD # 68-71
+ sha1nexte @MSG[0],$E
+ sha1msg2 @MSG[0],@MSG[1]
+___
+ &$aesenc();
+$code.=<<___;
+ movdqa $E_SAVE,@MSG[0]
+ movdqa $ABCD,$E_
+ sha1rnds4 \$3,$E,$ABCD # 72-75
+ sha1nexte @MSG[1],$E_
+___
+ &$aesenc();
+$code.=<<___;
+ movdqa $ABCD,$E
+ sha1rnds4 \$3,$E_,$ABCD # 76-79
+ sha1nexte $MSG[0],$E
+___
+ while($r<40) { &$aesenc(); } # remaining aesenc's
+$code.=<<___;
+ dec $len
+
+ paddd $ABCD_SAVE,$ABCD
+ movups $iv,48($out,$in0) # write output
+ lea 64($in0),$in0
+ jnz .Loop_shaext
+
+ pshufd \$0b00011011,$ABCD,$ABCD
+ pshufd \$0b00011011,$E,$E
+ movups $iv,($ivp) # write IV
+ movdqu $ABCD,($ctx)
+ movd $E,16($ctx)
+___
+$code.=<<___ if ($win64);
+ movaps -8-10*16(%rax),%xmm6
+ movaps -8-9*16(%rax),%xmm7
+ movaps -8-8*16(%rax),%xmm8
+ movaps -8-7*16(%rax),%xmm9
+ movaps -8-6*16(%rax),%xmm10
+ movaps -8-5*16(%rax),%xmm11
+ movaps -8-4*16(%rax),%xmm12
+ movaps -8-3*16(%rax),%xmm13
+ movaps -8-2*16(%rax),%xmm14
+ movaps -8-1*16(%rax),%xmm15
+ mov %rax,%rsp
+.Lepilogue_shaext:
+___
+$code.=<<___;
+ ret
+.size aesni_cbc_sha1_enc_shaext,.-aesni_cbc_sha1_enc_shaext
+___
+ }}}
# EXCEPTION_DISPOSITION handler (EXCEPTION_RECORD *rec,ULONG64 frame,
# CONTEXT *context,DISPATCHER_CONTEXT *disp)
if ($win64) {
@@ -1127,7 +1872,21 @@ ssse3_handler:
lea (%rsi,%r10),%r10 # epilogue label
cmp %r10,%rbx # context->Rip>=epilogue label
jae .Lcommon_seh_tail
+___
+$code.=<<___ if ($shaext);
+ lea aesni_cbc_sha1_enc_shaext(%rip),%r10
+ cmp %r10,%rbx
+ jb .Lseh_no_shaext
+ lea (%rax),%rsi
+ lea 512($context),%rdi # &context.Xmm6
+ mov \$20,%ecx
+ .long 0xa548f3fc # cld; rep movsq
+ lea 168(%rax),%rax # adjust stack pointer
+ jmp .Lcommon_seh_tail
+.Lseh_no_shaext:
+___
+$code.=<<___;
lea 96(%rax),%rsi
lea 512($context),%rdi # &context.Xmm6
mov \$20,%ecx
@@ -1199,6 +1958,11 @@ $code.=<<___ if ($avx);
.rva .LSEH_end_aesni_cbc_sha1_enc_avx
.rva .LSEH_info_aesni_cbc_sha1_enc_avx
___
+$code.=<<___ if ($shaext);
+ .rva .LSEH_begin_aesni_cbc_sha1_enc_shaext
+ .rva .LSEH_end_aesni_cbc_sha1_enc_shaext
+ .rva .LSEH_info_aesni_cbc_sha1_enc_shaext
+___
$code.=<<___;
.section .xdata
.align 8
@@ -1213,6 +1977,12 @@ $code.=<<___ if ($avx);
.rva ssse3_handler
.rva .Lprologue_avx,.Lepilogue_avx # HandlerData[]
___
+$code.=<<___ if ($shaext);
+.LSEH_info_aesni_cbc_sha1_enc_shaext:
+ .byte 9,0,0,0
+ .rva ssse3_handler
+ .rva .Lprologue_shaext,.Lepilogue_shaext # HandlerData[]
+___
}
####################################################################
@@ -1223,28 +1993,65 @@ sub rex {
$rex|=0x04 if($dst>=8);
$rex|=0x01 if($src>=8);
- push @opcode,$rex|0x40 if($rex);
+ unshift @opcode,$rex|0x40 if($rex);
+}
+
+sub sha1rnds4 {
+ if (@_[0] =~ /\$([x0-9a-f]+),\s*%xmm([0-9]+),\s*%xmm([0-9]+)/) {
+ my @opcode=(0x0f,0x3a,0xcc);
+ rex(\@opcode,$3,$2);
+ push @opcode,0xc0|($2&7)|(($3&7)<<3); # ModR/M
+ my $c=$1;
+ push @opcode,$c=~/^0/?oct($c):$c;
+ return ".byte\t".join(',',@opcode);
+ } else {
+ return "sha1rnds4\t".@_[0];
+ }
+}
+
+sub sha1op38 {
+ my $instr = shift;
+ my %opcodelet = (
+ "sha1nexte" => 0xc8,
+ "sha1msg1" => 0xc9,
+ "sha1msg2" => 0xca );
+
+ if (defined($opcodelet{$instr}) && @_[0] =~ /%xmm([0-9]+),\s*%xmm([0-9]+)/) {
+ my @opcode=(0x0f,0x38);
+ rex(\@opcode,$2,$1);
+ push @opcode,$opcodelet{$instr};
+ push @opcode,0xc0|($1&7)|(($2&7)<<3); # ModR/M
+ return ".byte\t".join(',',@opcode);
+ } else {
+ return $instr."\t".@_[0];
+ }
}
sub aesni {
my $line=shift;
- my @opcode=(0x66);
+ my @opcode=(0x0f,0x38);
if ($line=~/(aes[a-z]+)\s+%xmm([0-9]+),\s*%xmm([0-9]+)/) {
my %opcodelet = (
- "aesenc" => 0xdc, "aesenclast" => 0xdd
+ "aesenc" => 0xdc, "aesenclast" => 0xdd,
+ "aesdec" => 0xde, "aesdeclast" => 0xdf
);
return undef if (!defined($opcodelet{$1}));
rex(\@opcode,$3,$2);
- push @opcode,0x0f,0x38,$opcodelet{$1};
- push @opcode,0xc0|($2&7)|(($3&7)<<3); # ModR/M
+ push @opcode,$opcodelet{$1},0xc0|($2&7)|(($3&7)<<3); # ModR/M
+ unshift @opcode,0x66;
return ".byte\t".join(',',@opcode);
}
return $line;
}
-$code =~ s/\`([^\`]*)\`/eval($1)/gem;
-$code =~ s/\b(aes.*%xmm[0-9]+).*$/aesni($1)/gem;
+foreach (split("\n",$code)) {
+ s/\`([^\`]*)\`/eval $1/geo;
+
+ s/\b(sha1rnds4)\s+(.*)/sha1rnds4($2)/geo or
+ s/\b(sha1[^\s]*)\s+(.*)/sha1op38($1,$2)/geo or
+ s/\b(aes.*%xmm[0-9]+).*$/aesni($1)/geo;
-print $code;
+ print $_,"\n";
+}
close STDOUT;
diff --git a/crypto/openssl/crypto/aes/asm/aesni-sha256-x86_64.pl b/crypto/openssl/crypto/aes/asm/aesni-sha256-x86_64.pl
new file mode 100755
index 0000000..19b0433
--- /dev/null
+++ b/crypto/openssl/crypto/aes/asm/aesni-sha256-x86_64.pl
@@ -0,0 +1,1708 @@
+#!/usr/bin/env perl
+#
+# ====================================================================
+# Written by Andy Polyakov <appro@openssl.org> for the OpenSSL
+# project. The module is, however, dual licensed under OpenSSL and
+# CRYPTOGAMS licenses depending on where you obtain it. For further
+# details see http://www.openssl.org/~appro/cryptogams/.
+# ====================================================================
+#
+# January 2013
+#
+# This is AESNI-CBC+SHA256 stitch implementation. The idea, as spelled
+# in http://download.intel.com/design/intarch/papers/323686.pdf, is
+# that since AESNI-CBC encrypt exhibit *very* low instruction-level
+# parallelism, interleaving it with another algorithm would allow to
+# utilize processor resources better and achieve better performance.
+# SHA256 instruction sequences(*) are taken from sha512-x86_64.pl and
+# AESNI code is weaved into it. As SHA256 dominates execution time,
+# stitch performance does not depend on AES key length. Below are
+# performance numbers in cycles per processed byte, less is better,
+# for standalone AESNI-CBC encrypt, standalone SHA256, and stitched
+# subroutine:
+#
+# AES-128/-192/-256+SHA256 this(**)gain
+# Sandy Bridge 5.05/6.05/7.05+11.6 13.0 +28%/36%/43%
+# Ivy Bridge 5.05/6.05/7.05+10.3 11.6 +32%/41%/50%
+# Haswell 4.43/5.29/6.19+7.80 8.79 +39%/49%/59%
+# Bulldozer 5.77/6.89/8.00+13.7 13.7 +42%/50%/58%
+#
+# (*) there are XOP, AVX1 and AVX2 code pathes, meaning that
+# Westmere is omitted from loop, this is because gain was not
+# estimated high enough to justify the effort;
+# (**) these are EVP-free results, results obtained with 'speed
+# -evp aes-256-cbc-hmac-sha256' will vary by percent or two;
+
+$flavour = shift;
+$output = shift;
+if ($flavour =~ /\./) { $output = $flavour; undef $flavour; }
+
+$win64=0; $win64=1 if ($flavour =~ /[nm]asm|mingw64/ || $output =~ /\.asm$/);
+
+$0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1;
+( $xlate="${dir}x86_64-xlate.pl" and -f $xlate ) or
+( $xlate="${dir}../../perlasm/x86_64-xlate.pl" and -f $xlate) or
+die "can't locate x86_64-xlate.pl";
+
+if (`$ENV{CC} -Wa,-v -c -o /dev/null -x assembler /dev/null 2>&1`
+ =~ /GNU assembler version ([2-9]\.[0-9]+)/) {
+ $avx = ($1>=2.19) + ($1>=2.22);
+}
+
+if (!$avx && $win64 && ($flavour =~ /nasm/ || $ENV{ASM} =~ /nasm/) &&
+ `nasm -v 2>&1` =~ /NASM version ([2-9]\.[0-9]+)/) {
+ $avx = ($1>=2.09) + ($1>=2.10);
+}
+
+if (!$avx && $win64 && ($flavour =~ /masm/ || $ENV{ASM} =~ /ml64/) &&
+ `ml64 2>&1` =~ /Version ([0-9]+)\./) {
+ $avx = ($1>=10) + ($1>=12);
+}
+
+if (!$avx && `$ENV{CC} -v 2>&1` =~ /(^clang version|based on LLVM) ([3-9]\.[0-9]+)/) {
+ $avx = ($2>=3.0) + ($2>3.0);
+}
+
+$shaext=$avx; ### set to zero if compiling for 1.0.1
+$avx=1 if (!$shaext && $avx);
+
+open OUT,"| \"$^X\" $xlate $flavour $output";
+*STDOUT=*OUT;
+
+$func="aesni_cbc_sha256_enc";
+$TABLE="K256";
+$SZ=4;
+@ROT=($A,$B,$C,$D,$E,$F,$G,$H)=("%eax","%ebx","%ecx","%edx",
+ "%r8d","%r9d","%r10d","%r11d");
+($T1,$a0,$a1,$a2,$a3)=("%r12d","%r13d","%r14d","%r15d","%esi");
+@Sigma0=( 2,13,22);
+@Sigma1=( 6,11,25);
+@sigma0=( 7,18, 3);
+@sigma1=(17,19,10);
+$rounds=64;
+
+########################################################################
+# void aesni_cbc_sha256_enc(const void *inp,
+# void *out,
+# size_t length,
+# const AES_KEY *key,
+# unsigned char *iv,
+# SHA256_CTX *ctx,
+# const void *in0);
+($inp, $out, $len, $key, $ivp, $ctx, $in0) =
+("%rdi","%rsi","%rdx","%rcx","%r8","%r9","%r10");
+
+$Tbl="%rbp";
+
+$_inp="16*$SZ+0*8(%rsp)";
+$_out="16*$SZ+1*8(%rsp)";
+$_end="16*$SZ+2*8(%rsp)";
+$_key="16*$SZ+3*8(%rsp)";
+$_ivp="16*$SZ+4*8(%rsp)";
+$_ctx="16*$SZ+5*8(%rsp)";
+$_in0="16*$SZ+6*8(%rsp)";
+$_rsp="16*$SZ+7*8(%rsp)";
+$framesz=16*$SZ+8*8;
+
+$code=<<___;
+.text
+
+.extern OPENSSL_ia32cap_P
+.globl $func
+.type $func,\@abi-omnipotent
+.align 16
+$func:
+___
+ if ($avx) {
+$code.=<<___;
+ lea OPENSSL_ia32cap_P(%rip),%r11
+ mov \$1,%eax
+ cmp \$0,`$win64?"%rcx":"%rdi"`
+ je .Lprobe
+ mov 0(%r11),%eax
+ mov 4(%r11),%r10
+___
+$code.=<<___ if ($shaext);
+ bt \$61,%r10 # check for SHA
+ jc ${func}_shaext
+___
+$code.=<<___;
+ mov %r10,%r11
+ shr \$32,%r11
+
+ test \$`1<<11`,%r10d # check for XOP
+ jnz ${func}_xop
+___
+$code.=<<___ if ($avx>1);
+ and \$`1<<8|1<<5|1<<3`,%r11d # check for BMI2+AVX2+BMI1
+ cmp \$`1<<8|1<<5|1<<3`,%r11d
+ je ${func}_avx2
+___
+$code.=<<___;
+ and \$`1<<30`,%eax # mask "Intel CPU" bit
+ and \$`1<<28|1<<9`,%r10d # mask AVX+SSSE3 bits
+ or %eax,%r10d
+ cmp \$`1<<28|1<<9|1<<30`,%r10d
+ je ${func}_avx
+ ud2
+___
+ }
+$code.=<<___;
+ xor %eax,%eax
+ cmp \$0,`$win64?"%rcx":"%rdi"`
+ je .Lprobe
+ ud2
+.Lprobe:
+ ret
+.size $func,.-$func
+
+.align 64
+.type $TABLE,\@object
+$TABLE:
+ .long 0x428a2f98,0x71374491,0xb5c0fbcf,0xe9b5dba5
+ .long 0x428a2f98,0x71374491,0xb5c0fbcf,0xe9b5dba5
+ .long 0x3956c25b,0x59f111f1,0x923f82a4,0xab1c5ed5
+ .long 0x3956c25b,0x59f111f1,0x923f82a4,0xab1c5ed5
+ .long 0xd807aa98,0x12835b01,0x243185be,0x550c7dc3
+ .long 0xd807aa98,0x12835b01,0x243185be,0x550c7dc3
+ .long 0x72be5d74,0x80deb1fe,0x9bdc06a7,0xc19bf174
+ .long 0x72be5d74,0x80deb1fe,0x9bdc06a7,0xc19bf174
+ .long 0xe49b69c1,0xefbe4786,0x0fc19dc6,0x240ca1cc
+ .long 0xe49b69c1,0xefbe4786,0x0fc19dc6,0x240ca1cc
+ .long 0x2de92c6f,0x4a7484aa,0x5cb0a9dc,0x76f988da
+ .long 0x2de92c6f,0x4a7484aa,0x5cb0a9dc,0x76f988da
+ .long 0x983e5152,0xa831c66d,0xb00327c8,0xbf597fc7
+ .long 0x983e5152,0xa831c66d,0xb00327c8,0xbf597fc7
+ .long 0xc6e00bf3,0xd5a79147,0x06ca6351,0x14292967
+ .long 0xc6e00bf3,0xd5a79147,0x06ca6351,0x14292967
+ .long 0x27b70a85,0x2e1b2138,0x4d2c6dfc,0x53380d13
+ .long 0x27b70a85,0x2e1b2138,0x4d2c6dfc,0x53380d13
+ .long 0x650a7354,0x766a0abb,0x81c2c92e,0x92722c85
+ .long 0x650a7354,0x766a0abb,0x81c2c92e,0x92722c85
+ .long 0xa2bfe8a1,0xa81a664b,0xc24b8b70,0xc76c51a3
+ .long 0xa2bfe8a1,0xa81a664b,0xc24b8b70,0xc76c51a3
+ .long 0xd192e819,0xd6990624,0xf40e3585,0x106aa070
+ .long 0xd192e819,0xd6990624,0xf40e3585,0x106aa070
+ .long 0x19a4c116,0x1e376c08,0x2748774c,0x34b0bcb5
+ .long 0x19a4c116,0x1e376c08,0x2748774c,0x34b0bcb5
+ .long 0x391c0cb3,0x4ed8aa4a,0x5b9cca4f,0x682e6ff3
+ .long 0x391c0cb3,0x4ed8aa4a,0x5b9cca4f,0x682e6ff3
+ .long 0x748f82ee,0x78a5636f,0x84c87814,0x8cc70208
+ .long 0x748f82ee,0x78a5636f,0x84c87814,0x8cc70208
+ .long 0x90befffa,0xa4506ceb,0xbef9a3f7,0xc67178f2
+ .long 0x90befffa,0xa4506ceb,0xbef9a3f7,0xc67178f2
+
+ .long 0x00010203,0x04050607,0x08090a0b,0x0c0d0e0f
+ .long 0x00010203,0x04050607,0x08090a0b,0x0c0d0e0f
+ .long 0,0,0,0, 0,0,0,0, -1,-1,-1,-1
+ .long 0,0,0,0, 0,0,0,0
+ .asciz "AESNI-CBC+SHA256 stitch for x86_64, CRYPTOGAMS by <appro\@openssl.org>"
+.align 64
+___
+
+######################################################################
+# SIMD code paths
+#
+{{{
+($iv,$inout,$roundkey,$temp,
+ $mask10,$mask12,$mask14,$offload)=map("%xmm$_",(8..15));
+
+$aesni_cbc_idx=0;
+@aesni_cbc_block = (
+## &vmovdqu ($roundkey,"0x00-0x80($inp)");'
+## &vmovdqu ($inout,($inp));
+## &mov ($_inp,$inp);
+
+ '&vpxor ($inout,$inout,$roundkey);'.
+ ' &vmovdqu ($roundkey,"0x10-0x80($inp)");',
+
+ '&vpxor ($inout,$inout,$iv);',
+
+ '&vaesenc ($inout,$inout,$roundkey);'.
+ ' &vmovdqu ($roundkey,"0x20-0x80($inp)");',
+
+ '&vaesenc ($inout,$inout,$roundkey);'.
+ ' &vmovdqu ($roundkey,"0x30-0x80($inp)");',
+
+ '&vaesenc ($inout,$inout,$roundkey);'.
+ ' &vmovdqu ($roundkey,"0x40-0x80($inp)");',
+
+ '&vaesenc ($inout,$inout,$roundkey);'.
+ ' &vmovdqu ($roundkey,"0x50-0x80($inp)");',
+
+ '&vaesenc ($inout,$inout,$roundkey);'.
+ ' &vmovdqu ($roundkey,"0x60-0x80($inp)");',
+
+ '&vaesenc ($inout,$inout,$roundkey);'.
+ ' &vmovdqu ($roundkey,"0x70-0x80($inp)");',
+
+ '&vaesenc ($inout,$inout,$roundkey);'.
+ ' &vmovdqu ($roundkey,"0x80-0x80($inp)");',
+
+ '&vaesenc ($inout,$inout,$roundkey);'.
+ ' &vmovdqu ($roundkey,"0x90-0x80($inp)");',
+
+ '&vaesenc ($inout,$inout,$roundkey);'.
+ ' &vmovdqu ($roundkey,"0xa0-0x80($inp)");',
+
+ '&vaesenclast ($temp,$inout,$roundkey);'.
+ ' &vaesenc ($inout,$inout,$roundkey);'.
+ ' &vmovdqu ($roundkey,"0xb0-0x80($inp)");',
+
+ '&vpand ($iv,$temp,$mask10);'.
+ ' &vaesenc ($inout,$inout,$roundkey);'.
+ ' &vmovdqu ($roundkey,"0xc0-0x80($inp)");',
+
+ '&vaesenclast ($temp,$inout,$roundkey);'.
+ ' &vaesenc ($inout,$inout,$roundkey);'.
+ ' &vmovdqu ($roundkey,"0xd0-0x80($inp)");',
+
+ '&vpand ($temp,$temp,$mask12);'.
+ ' &vaesenc ($inout,$inout,$roundkey);'.
+ '&vmovdqu ($roundkey,"0xe0-0x80($inp)");',
+
+ '&vpor ($iv,$iv,$temp);'.
+ ' &vaesenclast ($temp,$inout,$roundkey);'.
+ ' &vmovdqu ($roundkey,"0x00-0x80($inp)");'
+
+## &mov ($inp,$_inp);
+## &mov ($out,$_out);
+## &vpand ($temp,$temp,$mask14);
+## &vpor ($iv,$iv,$temp);
+## &vmovdqu ($iv,($out,$inp);
+## &lea (inp,16($inp));
+);
+
+my $a4=$T1;
+my ($a,$b,$c,$d,$e,$f,$g,$h);
+
+sub AUTOLOAD() # thunk [simplified] 32-bit style perlasm
+{ my $opcode = $AUTOLOAD; $opcode =~ s/.*:://;
+ my $arg = pop;
+ $arg = "\$$arg" if ($arg*1 eq $arg);
+ $code .= "\t$opcode\t".join(',',$arg,reverse @_)."\n";
+}
+
+sub body_00_15 () {
+ (
+ '($a,$b,$c,$d,$e,$f,$g,$h)=@ROT;'.
+
+ '&ror ($a0,$Sigma1[2]-$Sigma1[1])',
+ '&mov ($a,$a1)',
+ '&mov ($a4,$f)',
+
+ '&xor ($a0,$e)',
+ '&ror ($a1,$Sigma0[2]-$Sigma0[1])',
+ '&xor ($a4,$g)', # f^g
+
+ '&ror ($a0,$Sigma1[1]-$Sigma1[0])',
+ '&xor ($a1,$a)',
+ '&and ($a4,$e)', # (f^g)&e
+
+ @aesni_cbc_block[$aesni_cbc_idx++].
+ '&xor ($a0,$e)',
+ '&add ($h,$SZ*($i&15)."(%rsp)")', # h+=X[i]+K[i]
+ '&mov ($a2,$a)',
+
+ '&ror ($a1,$Sigma0[1]-$Sigma0[0])',
+ '&xor ($a4,$g)', # Ch(e,f,g)=((f^g)&e)^g
+ '&xor ($a2,$b)', # a^b, b^c in next round
+
+ '&ror ($a0,$Sigma1[0])', # Sigma1(e)
+ '&add ($h,$a4)', # h+=Ch(e,f,g)
+ '&and ($a3,$a2)', # (b^c)&(a^b)
+
+ '&xor ($a1,$a)',
+ '&add ($h,$a0)', # h+=Sigma1(e)
+ '&xor ($a3,$b)', # Maj(a,b,c)=Ch(a^b,c,b)
+
+ '&add ($d,$h)', # d+=h
+ '&ror ($a1,$Sigma0[0])', # Sigma0(a)
+ '&add ($h,$a3)', # h+=Maj(a,b,c)
+
+ '&mov ($a0,$d)',
+ '&add ($a1,$h);'. # h+=Sigma0(a)
+ '($a2,$a3) = ($a3,$a2); unshift(@ROT,pop(@ROT)); $i++;'
+ );
+}
+
+if ($avx) {{
+######################################################################
+# XOP code path
+#
+$code.=<<___;
+.type ${func}_xop,\@function,6
+.align 64
+${func}_xop:
+.Lxop_shortcut:
+ mov `($win64?56:8)`(%rsp),$in0 # load 7th parameter
+ push %rbx
+ push %rbp
+ push %r12
+ push %r13
+ push %r14
+ push %r15
+ mov %rsp,%r11 # copy %rsp
+ sub \$`$framesz+$win64*16*10`,%rsp
+ and \$-64,%rsp # align stack frame
+
+ shl \$6,$len
+ sub $inp,$out # re-bias
+ sub $inp,$in0
+ add $inp,$len # end of input
+
+ #mov $inp,$_inp # saved later
+ mov $out,$_out
+ mov $len,$_end
+ #mov $key,$_key # remains resident in $inp register
+ mov $ivp,$_ivp
+ mov $ctx,$_ctx
+ mov $in0,$_in0
+ mov %r11,$_rsp
+___
+$code.=<<___ if ($win64);
+ movaps %xmm6,`$framesz+16*0`(%rsp)
+ movaps %xmm7,`$framesz+16*1`(%rsp)
+ movaps %xmm8,`$framesz+16*2`(%rsp)
+ movaps %xmm9,`$framesz+16*3`(%rsp)
+ movaps %xmm10,`$framesz+16*4`(%rsp)
+ movaps %xmm11,`$framesz+16*5`(%rsp)
+ movaps %xmm12,`$framesz+16*6`(%rsp)
+ movaps %xmm13,`$framesz+16*7`(%rsp)
+ movaps %xmm14,`$framesz+16*8`(%rsp)
+ movaps %xmm15,`$framesz+16*9`(%rsp)
+___
+$code.=<<___;
+.Lprologue_xop:
+ vzeroall
+
+ mov $inp,%r12 # borrow $a4
+ lea 0x80($key),$inp # size optimization, reassign
+ lea $TABLE+`$SZ*2*$rounds+32`(%rip),%r13 # borrow $a0
+ mov 0xf0-0x80($inp),%r14d # rounds, borrow $a1
+ mov $ctx,%r15 # borrow $a2
+ mov $in0,%rsi # borrow $a3
+ vmovdqu ($ivp),$iv # load IV
+ sub \$9,%r14
+
+ mov $SZ*0(%r15),$A
+ mov $SZ*1(%r15),$B
+ mov $SZ*2(%r15),$C
+ mov $SZ*3(%r15),$D
+ mov $SZ*4(%r15),$E
+ mov $SZ*5(%r15),$F
+ mov $SZ*6(%r15),$G
+ mov $SZ*7(%r15),$H
+
+ vmovdqa 0x00(%r13,%r14,8),$mask14
+ vmovdqa 0x10(%r13,%r14,8),$mask12
+ vmovdqa 0x20(%r13,%r14,8),$mask10
+ vmovdqu 0x00-0x80($inp),$roundkey
+ jmp .Lloop_xop
+___
+ if ($SZ==4) { # SHA256
+ my @X = map("%xmm$_",(0..3));
+ my ($t0,$t1,$t2,$t3) = map("%xmm$_",(4..7));
+
+$code.=<<___;
+.align 16
+.Lloop_xop:
+ vmovdqa $TABLE+`$SZ*2*$rounds`(%rip),$t3
+ vmovdqu 0x00(%rsi,%r12),@X[0]
+ vmovdqu 0x10(%rsi,%r12),@X[1]
+ vmovdqu 0x20(%rsi,%r12),@X[2]
+ vmovdqu 0x30(%rsi,%r12),@X[3]
+ vpshufb $t3,@X[0],@X[0]
+ lea $TABLE(%rip),$Tbl
+ vpshufb $t3,@X[1],@X[1]
+ vpshufb $t3,@X[2],@X[2]
+ vpaddd 0x00($Tbl),@X[0],$t0
+ vpshufb $t3,@X[3],@X[3]
+ vpaddd 0x20($Tbl),@X[1],$t1
+ vpaddd 0x40($Tbl),@X[2],$t2
+ vpaddd 0x60($Tbl),@X[3],$t3
+ vmovdqa $t0,0x00(%rsp)
+ mov $A,$a1
+ vmovdqa $t1,0x10(%rsp)
+ mov $B,$a3
+ vmovdqa $t2,0x20(%rsp)
+ xor $C,$a3 # magic
+ vmovdqa $t3,0x30(%rsp)
+ mov $E,$a0
+ jmp .Lxop_00_47
+
+.align 16
+.Lxop_00_47:
+ sub \$-16*2*$SZ,$Tbl # size optimization
+ vmovdqu (%r12),$inout # $a4
+ mov %r12,$_inp # $a4
+___
+sub XOP_256_00_47 () {
+my $j = shift;
+my $body = shift;
+my @X = @_;
+my @insns = (&$body,&$body,&$body,&$body); # 104 instructions
+
+ &vpalignr ($t0,@X[1],@X[0],$SZ); # X[1..4]
+ eval(shift(@insns));
+ eval(shift(@insns));
+ &vpalignr ($t3,@X[3],@X[2],$SZ); # X[9..12]
+ eval(shift(@insns));
+ eval(shift(@insns));
+ &vprotd ($t1,$t0,8*$SZ-$sigma0[1]);
+ eval(shift(@insns));
+ eval(shift(@insns));
+ &vpsrld ($t0,$t0,$sigma0[2]);
+ eval(shift(@insns));
+ eval(shift(@insns));
+ &vpaddd (@X[0],@X[0],$t3); # X[0..3] += X[9..12]
+ eval(shift(@insns));
+ eval(shift(@insns));
+ eval(shift(@insns));
+ eval(shift(@insns));
+ &vprotd ($t2,$t1,$sigma0[1]-$sigma0[0]);
+ eval(shift(@insns));
+ eval(shift(@insns));
+ &vpxor ($t0,$t0,$t1);
+ eval(shift(@insns));
+ eval(shift(@insns));
+ eval(shift(@insns));
+ eval(shift(@insns));
+ &vprotd ($t3,@X[3],8*$SZ-$sigma1[1]);
+ eval(shift(@insns));
+ eval(shift(@insns));
+ &vpxor ($t0,$t0,$t2); # sigma0(X[1..4])
+ eval(shift(@insns));
+ eval(shift(@insns));
+ &vpsrld ($t2,@X[3],$sigma1[2]);
+ eval(shift(@insns));
+ eval(shift(@insns));
+ &vpaddd (@X[0],@X[0],$t0); # X[0..3] += sigma0(X[1..4])
+ eval(shift(@insns));
+ eval(shift(@insns));
+ &vprotd ($t1,$t3,$sigma1[1]-$sigma1[0]);
+ eval(shift(@insns));
+ eval(shift(@insns));
+ &vpxor ($t3,$t3,$t2);
+ eval(shift(@insns));
+ eval(shift(@insns));
+ eval(shift(@insns));
+ eval(shift(@insns));
+ &vpxor ($t3,$t3,$t1); # sigma1(X[14..15])
+ eval(shift(@insns));
+ eval(shift(@insns));
+ eval(shift(@insns));
+ eval(shift(@insns));
+ &vpsrldq ($t3,$t3,8);
+ eval(shift(@insns));
+ eval(shift(@insns));
+ eval(shift(@insns));
+ eval(shift(@insns));
+ &vpaddd (@X[0],@X[0],$t3); # X[0..1] += sigma1(X[14..15])
+ eval(shift(@insns));
+ eval(shift(@insns));
+ eval(shift(@insns));
+ eval(shift(@insns));
+ &vprotd ($t3,@X[0],8*$SZ-$sigma1[1]);
+ eval(shift(@insns));
+ eval(shift(@insns));
+ &vpsrld ($t2,@X[0],$sigma1[2]);
+ eval(shift(@insns));
+ eval(shift(@insns));
+ &vprotd ($t1,$t3,$sigma1[1]-$sigma1[0]);
+ eval(shift(@insns));
+ eval(shift(@insns));
+ &vpxor ($t3,$t3,$t2);
+ eval(shift(@insns));
+ eval(shift(@insns));
+ eval(shift(@insns));
+ eval(shift(@insns));
+ &vpxor ($t3,$t3,$t1); # sigma1(X[16..17])
+ eval(shift(@insns));
+ eval(shift(@insns));
+ eval(shift(@insns));
+ eval(shift(@insns));
+ &vpslldq ($t3,$t3,8); # 22 instructions
+ eval(shift(@insns));
+ eval(shift(@insns));
+ eval(shift(@insns));
+ eval(shift(@insns));
+ &vpaddd (@X[0],@X[0],$t3); # X[2..3] += sigma1(X[16..17])
+ eval(shift(@insns));
+ eval(shift(@insns));
+ eval(shift(@insns));
+ eval(shift(@insns));
+ &vpaddd ($t2,@X[0],16*2*$j."($Tbl)");
+ foreach (@insns) { eval; } # remaining instructions
+ &vmovdqa (16*$j."(%rsp)",$t2);
+}
+
+ $aesni_cbc_idx=0;
+ for ($i=0,$j=0; $j<4; $j++) {
+ &XOP_256_00_47($j,\&body_00_15,@X);
+ push(@X,shift(@X)); # rotate(@X)
+ }
+ &mov ("%r12",$_inp); # borrow $a4
+ &vpand ($temp,$temp,$mask14);
+ &mov ("%r15",$_out); # borrow $a2
+ &vpor ($iv,$iv,$temp);
+ &vmovdqu ("(%r15,%r12)",$iv); # write output
+ &lea ("%r12","16(%r12)"); # inp++
+
+ &cmpb ($SZ-1+16*2*$SZ."($Tbl)",0);
+ &jne (".Lxop_00_47");
+
+ &vmovdqu ($inout,"(%r12)");
+ &mov ($_inp,"%r12");
+
+ $aesni_cbc_idx=0;
+ for ($i=0; $i<16; ) {
+ foreach(body_00_15()) { eval; }
+ }
+ }
+$code.=<<___;
+ mov $_inp,%r12 # borrow $a4
+ mov $_out,%r13 # borrow $a0
+ mov $_ctx,%r15 # borrow $a2
+ mov $_in0,%rsi # borrow $a3
+
+ vpand $mask14,$temp,$temp
+ mov $a1,$A
+ vpor $temp,$iv,$iv
+ vmovdqu $iv,(%r13,%r12) # write output
+ lea 16(%r12),%r12 # inp++
+
+ add $SZ*0(%r15),$A
+ add $SZ*1(%r15),$B
+ add $SZ*2(%r15),$C
+ add $SZ*3(%r15),$D
+ add $SZ*4(%r15),$E
+ add $SZ*5(%r15),$F
+ add $SZ*6(%r15),$G
+ add $SZ*7(%r15),$H
+
+ cmp $_end,%r12
+
+ mov $A,$SZ*0(%r15)
+ mov $B,$SZ*1(%r15)
+ mov $C,$SZ*2(%r15)
+ mov $D,$SZ*3(%r15)
+ mov $E,$SZ*4(%r15)
+ mov $F,$SZ*5(%r15)
+ mov $G,$SZ*6(%r15)
+ mov $H,$SZ*7(%r15)
+
+ jb .Lloop_xop
+
+ mov $_ivp,$ivp
+ mov $_rsp,%rsi
+ vmovdqu $iv,($ivp) # output IV
+ vzeroall
+___
+$code.=<<___ if ($win64);
+ movaps `$framesz+16*0`(%rsp),%xmm6
+ movaps `$framesz+16*1`(%rsp),%xmm7
+ movaps `$framesz+16*2`(%rsp),%xmm8
+ movaps `$framesz+16*3`(%rsp),%xmm9
+ movaps `$framesz+16*4`(%rsp),%xmm10
+ movaps `$framesz+16*5`(%rsp),%xmm11
+ movaps `$framesz+16*6`(%rsp),%xmm12
+ movaps `$framesz+16*7`(%rsp),%xmm13
+ movaps `$framesz+16*8`(%rsp),%xmm14
+ movaps `$framesz+16*9`(%rsp),%xmm15
+___
+$code.=<<___;
+ mov (%rsi),%r15
+ mov 8(%rsi),%r14
+ mov 16(%rsi),%r13
+ mov 24(%rsi),%r12
+ mov 32(%rsi),%rbp
+ mov 40(%rsi),%rbx
+ lea 48(%rsi),%rsp
+.Lepilogue_xop:
+ ret
+.size ${func}_xop,.-${func}_xop
+___
+######################################################################
+# AVX+shrd code path
+#
+local *ror = sub { &shrd(@_[0],@_) };
+
+$code.=<<___;
+.type ${func}_avx,\@function,6
+.align 64
+${func}_avx:
+.Lavx_shortcut:
+ mov `($win64?56:8)`(%rsp),$in0 # load 7th parameter
+ push %rbx
+ push %rbp
+ push %r12
+ push %r13
+ push %r14
+ push %r15
+ mov %rsp,%r11 # copy %rsp
+ sub \$`$framesz+$win64*16*10`,%rsp
+ and \$-64,%rsp # align stack frame
+
+ shl \$6,$len
+ sub $inp,$out # re-bias
+ sub $inp,$in0
+ add $inp,$len # end of input
+
+ #mov $inp,$_inp # saved later
+ mov $out,$_out
+ mov $len,$_end
+ #mov $key,$_key # remains resident in $inp register
+ mov $ivp,$_ivp
+ mov $ctx,$_ctx
+ mov $in0,$_in0
+ mov %r11,$_rsp
+___
+$code.=<<___ if ($win64);
+ movaps %xmm6,`$framesz+16*0`(%rsp)
+ movaps %xmm7,`$framesz+16*1`(%rsp)
+ movaps %xmm8,`$framesz+16*2`(%rsp)
+ movaps %xmm9,`$framesz+16*3`(%rsp)
+ movaps %xmm10,`$framesz+16*4`(%rsp)
+ movaps %xmm11,`$framesz+16*5`(%rsp)
+ movaps %xmm12,`$framesz+16*6`(%rsp)
+ movaps %xmm13,`$framesz+16*7`(%rsp)
+ movaps %xmm14,`$framesz+16*8`(%rsp)
+ movaps %xmm15,`$framesz+16*9`(%rsp)
+___
+$code.=<<___;
+.Lprologue_avx:
+ vzeroall
+
+ mov $inp,%r12 # borrow $a4
+ lea 0x80($key),$inp # size optimization, reassign
+ lea $TABLE+`$SZ*2*$rounds+32`(%rip),%r13 # borrow $a0
+ mov 0xf0-0x80($inp),%r14d # rounds, borrow $a1
+ mov $ctx,%r15 # borrow $a2
+ mov $in0,%rsi # borrow $a3
+ vmovdqu ($ivp),$iv # load IV
+ sub \$9,%r14
+
+ mov $SZ*0(%r15),$A
+ mov $SZ*1(%r15),$B
+ mov $SZ*2(%r15),$C
+ mov $SZ*3(%r15),$D
+ mov $SZ*4(%r15),$E
+ mov $SZ*5(%r15),$F
+ mov $SZ*6(%r15),$G
+ mov $SZ*7(%r15),$H
+
+ vmovdqa 0x00(%r13,%r14,8),$mask14
+ vmovdqa 0x10(%r13,%r14,8),$mask12
+ vmovdqa 0x20(%r13,%r14,8),$mask10
+ vmovdqu 0x00-0x80($inp),$roundkey
+___
+ if ($SZ==4) { # SHA256
+ my @X = map("%xmm$_",(0..3));
+ my ($t0,$t1,$t2,$t3) = map("%xmm$_",(4..7));
+
+$code.=<<___;
+ jmp .Lloop_avx
+.align 16
+.Lloop_avx:
+ vmovdqa $TABLE+`$SZ*2*$rounds`(%rip),$t3
+ vmovdqu 0x00(%rsi,%r12),@X[0]
+ vmovdqu 0x10(%rsi,%r12),@X[1]
+ vmovdqu 0x20(%rsi,%r12),@X[2]
+ vmovdqu 0x30(%rsi,%r12),@X[3]
+ vpshufb $t3,@X[0],@X[0]
+ lea $TABLE(%rip),$Tbl
+ vpshufb $t3,@X[1],@X[1]
+ vpshufb $t3,@X[2],@X[2]
+ vpaddd 0x00($Tbl),@X[0],$t0
+ vpshufb $t3,@X[3],@X[3]
+ vpaddd 0x20($Tbl),@X[1],$t1
+ vpaddd 0x40($Tbl),@X[2],$t2
+ vpaddd 0x60($Tbl),@X[3],$t3
+ vmovdqa $t0,0x00(%rsp)
+ mov $A,$a1
+ vmovdqa $t1,0x10(%rsp)
+ mov $B,$a3
+ vmovdqa $t2,0x20(%rsp)
+ xor $C,$a3 # magic
+ vmovdqa $t3,0x30(%rsp)
+ mov $E,$a0
+ jmp .Lavx_00_47
+
+.align 16
+.Lavx_00_47:
+ sub \$-16*2*$SZ,$Tbl # size optimization
+ vmovdqu (%r12),$inout # $a4
+ mov %r12,$_inp # $a4
+___
+sub Xupdate_256_AVX () {
+ (
+ '&vpalignr ($t0,@X[1],@X[0],$SZ)', # X[1..4]
+ '&vpalignr ($t3,@X[3],@X[2],$SZ)', # X[9..12]
+ '&vpsrld ($t2,$t0,$sigma0[0]);',
+ '&vpaddd (@X[0],@X[0],$t3)', # X[0..3] += X[9..12]
+ '&vpsrld ($t3,$t0,$sigma0[2])',
+ '&vpslld ($t1,$t0,8*$SZ-$sigma0[1]);',
+ '&vpxor ($t0,$t3,$t2)',
+ '&vpshufd ($t3,@X[3],0b11111010)',# X[14..15]
+ '&vpsrld ($t2,$t2,$sigma0[1]-$sigma0[0]);',
+ '&vpxor ($t0,$t0,$t1)',
+ '&vpslld ($t1,$t1,$sigma0[1]-$sigma0[0]);',
+ '&vpxor ($t0,$t0,$t2)',
+ '&vpsrld ($t2,$t3,$sigma1[2]);',
+ '&vpxor ($t0,$t0,$t1)', # sigma0(X[1..4])
+ '&vpsrlq ($t3,$t3,$sigma1[0]);',
+ '&vpaddd (@X[0],@X[0],$t0)', # X[0..3] += sigma0(X[1..4])
+ '&vpxor ($t2,$t2,$t3);',
+ '&vpsrlq ($t3,$t3,$sigma1[1]-$sigma1[0])',
+ '&vpxor ($t2,$t2,$t3)', # sigma1(X[14..15])
+ '&vpshufd ($t2,$t2,0b10000100)',
+ '&vpsrldq ($t2,$t2,8)',
+ '&vpaddd (@X[0],@X[0],$t2)', # X[0..1] += sigma1(X[14..15])
+ '&vpshufd ($t3,@X[0],0b01010000)',# X[16..17]
+ '&vpsrld ($t2,$t3,$sigma1[2])',
+ '&vpsrlq ($t3,$t3,$sigma1[0])',
+ '&vpxor ($t2,$t2,$t3);',
+ '&vpsrlq ($t3,$t3,$sigma1[1]-$sigma1[0])',
+ '&vpxor ($t2,$t2,$t3)',
+ '&vpshufd ($t2,$t2,0b11101000)',
+ '&vpslldq ($t2,$t2,8)',
+ '&vpaddd (@X[0],@X[0],$t2)' # X[2..3] += sigma1(X[16..17])
+ );
+}
+
+sub AVX_256_00_47 () {
+my $j = shift;
+my $body = shift;
+my @X = @_;
+my @insns = (&$body,&$body,&$body,&$body); # 104 instructions
+
+ foreach (Xupdate_256_AVX()) { # 29 instructions
+ eval;
+ eval(shift(@insns));
+ eval(shift(@insns));
+ eval(shift(@insns));
+ }
+ &vpaddd ($t2,@X[0],16*2*$j."($Tbl)");
+ foreach (@insns) { eval; } # remaining instructions
+ &vmovdqa (16*$j."(%rsp)",$t2);
+}
+
+ $aesni_cbc_idx=0;
+ for ($i=0,$j=0; $j<4; $j++) {
+ &AVX_256_00_47($j,\&body_00_15,@X);
+ push(@X,shift(@X)); # rotate(@X)
+ }
+ &mov ("%r12",$_inp); # borrow $a4
+ &vpand ($temp,$temp,$mask14);
+ &mov ("%r15",$_out); # borrow $a2
+ &vpor ($iv,$iv,$temp);
+ &vmovdqu ("(%r15,%r12)",$iv); # write output
+ &lea ("%r12","16(%r12)"); # inp++
+
+ &cmpb ($SZ-1+16*2*$SZ."($Tbl)",0);
+ &jne (".Lavx_00_47");
+
+ &vmovdqu ($inout,"(%r12)");
+ &mov ($_inp,"%r12");
+
+ $aesni_cbc_idx=0;
+ for ($i=0; $i<16; ) {
+ foreach(body_00_15()) { eval; }
+ }
+
+ }
+$code.=<<___;
+ mov $_inp,%r12 # borrow $a4
+ mov $_out,%r13 # borrow $a0
+ mov $_ctx,%r15 # borrow $a2
+ mov $_in0,%rsi # borrow $a3
+
+ vpand $mask14,$temp,$temp
+ mov $a1,$A
+ vpor $temp,$iv,$iv
+ vmovdqu $iv,(%r13,%r12) # write output
+ lea 16(%r12),%r12 # inp++
+
+ add $SZ*0(%r15),$A
+ add $SZ*1(%r15),$B
+ add $SZ*2(%r15),$C
+ add $SZ*3(%r15),$D
+ add $SZ*4(%r15),$E
+ add $SZ*5(%r15),$F
+ add $SZ*6(%r15),$G
+ add $SZ*7(%r15),$H
+
+ cmp $_end,%r12
+
+ mov $A,$SZ*0(%r15)
+ mov $B,$SZ*1(%r15)
+ mov $C,$SZ*2(%r15)
+ mov $D,$SZ*3(%r15)
+ mov $E,$SZ*4(%r15)
+ mov $F,$SZ*5(%r15)
+ mov $G,$SZ*6(%r15)
+ mov $H,$SZ*7(%r15)
+ jb .Lloop_avx
+
+ mov $_ivp,$ivp
+ mov $_rsp,%rsi
+ vmovdqu $iv,($ivp) # output IV
+ vzeroall
+___
+$code.=<<___ if ($win64);
+ movaps `$framesz+16*0`(%rsp),%xmm6
+ movaps `$framesz+16*1`(%rsp),%xmm7
+ movaps `$framesz+16*2`(%rsp),%xmm8
+ movaps `$framesz+16*3`(%rsp),%xmm9
+ movaps `$framesz+16*4`(%rsp),%xmm10
+ movaps `$framesz+16*5`(%rsp),%xmm11
+ movaps `$framesz+16*6`(%rsp),%xmm12
+ movaps `$framesz+16*7`(%rsp),%xmm13
+ movaps `$framesz+16*8`(%rsp),%xmm14
+ movaps `$framesz+16*9`(%rsp),%xmm15
+___
+$code.=<<___;
+ mov (%rsi),%r15
+ mov 8(%rsi),%r14
+ mov 16(%rsi),%r13
+ mov 24(%rsi),%r12
+ mov 32(%rsi),%rbp
+ mov 40(%rsi),%rbx
+ lea 48(%rsi),%rsp
+.Lepilogue_avx:
+ ret
+.size ${func}_avx,.-${func}_avx
+___
+
+if ($avx>1) {{
+######################################################################
+# AVX2+BMI code path
+#
+my $a5=$SZ==4?"%esi":"%rsi"; # zap $inp
+my $PUSH8=8*2*$SZ;
+use integer;
+
+sub bodyx_00_15 () {
+ # at start $a1 should be zero, $a3 - $b^$c and $a4 copy of $f
+ (
+ '($a,$b,$c,$d,$e,$f,$g,$h)=@ROT;'.
+
+ '&add ($h,(32*($i/(16/$SZ))+$SZ*($i%(16/$SZ)))%$PUSH8.$base)', # h+=X[i]+K[i]
+ '&and ($a4,$e)', # f&e
+ '&rorx ($a0,$e,$Sigma1[2])',
+ '&rorx ($a2,$e,$Sigma1[1])',
+
+ '&lea ($a,"($a,$a1)")', # h+=Sigma0(a) from the past
+ '&lea ($h,"($h,$a4)")',
+ '&andn ($a4,$e,$g)', # ~e&g
+ '&xor ($a0,$a2)',
+
+ '&rorx ($a1,$e,$Sigma1[0])',
+ '&lea ($h,"($h,$a4)")', # h+=Ch(e,f,g)=(e&f)+(~e&g)
+ '&xor ($a0,$a1)', # Sigma1(e)
+ '&mov ($a2,$a)',
+
+ '&rorx ($a4,$a,$Sigma0[2])',
+ '&lea ($h,"($h,$a0)")', # h+=Sigma1(e)
+ '&xor ($a2,$b)', # a^b, b^c in next round
+ '&rorx ($a1,$a,$Sigma0[1])',
+
+ '&rorx ($a0,$a,$Sigma0[0])',
+ '&lea ($d,"($d,$h)")', # d+=h
+ '&and ($a3,$a2)', # (b^c)&(a^b)
+ @aesni_cbc_block[$aesni_cbc_idx++].
+ '&xor ($a1,$a4)',
+
+ '&xor ($a3,$b)', # Maj(a,b,c)=Ch(a^b,c,b)
+ '&xor ($a1,$a0)', # Sigma0(a)
+ '&lea ($h,"($h,$a3)");'. # h+=Maj(a,b,c)
+ '&mov ($a4,$e)', # copy of f in future
+
+ '($a2,$a3) = ($a3,$a2); unshift(@ROT,pop(@ROT)); $i++;'
+ );
+ # and at the finish one has to $a+=$a1
+}
+
+$code.=<<___;
+.type ${func}_avx2,\@function,6
+.align 64
+${func}_avx2:
+.Lavx2_shortcut:
+ mov `($win64?56:8)`(%rsp),$in0 # load 7th parameter
+ push %rbx
+ push %rbp
+ push %r12
+ push %r13
+ push %r14
+ push %r15
+ mov %rsp,%r11 # copy %rsp
+ sub \$`2*$SZ*$rounds+8*8+$win64*16*10`,%rsp
+ and \$-256*$SZ,%rsp # align stack frame
+ add \$`2*$SZ*($rounds-8)`,%rsp
+
+ shl \$6,$len
+ sub $inp,$out # re-bias
+ sub $inp,$in0
+ add $inp,$len # end of input
+
+ #mov $inp,$_inp # saved later
+ #mov $out,$_out # kept in $offload
+ mov $len,$_end
+ #mov $key,$_key # remains resident in $inp register
+ mov $ivp,$_ivp
+ mov $ctx,$_ctx
+ mov $in0,$_in0
+ mov %r11,$_rsp
+___
+$code.=<<___ if ($win64);
+ movaps %xmm6,`$framesz+16*0`(%rsp)
+ movaps %xmm7,`$framesz+16*1`(%rsp)
+ movaps %xmm8,`$framesz+16*2`(%rsp)
+ movaps %xmm9,`$framesz+16*3`(%rsp)
+ movaps %xmm10,`$framesz+16*4`(%rsp)
+ movaps %xmm11,`$framesz+16*5`(%rsp)
+ movaps %xmm12,`$framesz+16*6`(%rsp)
+ movaps %xmm13,`$framesz+16*7`(%rsp)
+ movaps %xmm14,`$framesz+16*8`(%rsp)
+ movaps %xmm15,`$framesz+16*9`(%rsp)
+___
+$code.=<<___;
+.Lprologue_avx2:
+ vzeroall
+
+ mov $inp,%r13 # borrow $a0
+ vpinsrq \$1,$out,$offload,$offload
+ lea 0x80($key),$inp # size optimization, reassign
+ lea $TABLE+`$SZ*2*$rounds+32`(%rip),%r12 # borrow $a4
+ mov 0xf0-0x80($inp),%r14d # rounds, borrow $a1
+ mov $ctx,%r15 # borrow $a2
+ mov $in0,%rsi # borrow $a3
+ vmovdqu ($ivp),$iv # load IV
+ lea -9(%r14),%r14
+
+ vmovdqa 0x00(%r12,%r14,8),$mask14
+ vmovdqa 0x10(%r12,%r14,8),$mask12
+ vmovdqa 0x20(%r12,%r14,8),$mask10
+
+ sub \$-16*$SZ,%r13 # inp++, size optimization
+ mov $SZ*0(%r15),$A
+ lea (%rsi,%r13),%r12 # borrow $a0
+ mov $SZ*1(%r15),$B
+ cmp $len,%r13 # $_end
+ mov $SZ*2(%r15),$C
+ cmove %rsp,%r12 # next block or random data
+ mov $SZ*3(%r15),$D
+ mov $SZ*4(%r15),$E
+ mov $SZ*5(%r15),$F
+ mov $SZ*6(%r15),$G
+ mov $SZ*7(%r15),$H
+ vmovdqu 0x00-0x80($inp),$roundkey
+___
+ if ($SZ==4) { # SHA256
+ my @X = map("%ymm$_",(0..3));
+ my ($t0,$t1,$t2,$t3) = map("%ymm$_",(4..7));
+
+$code.=<<___;
+ jmp .Loop_avx2
+.align 16
+.Loop_avx2:
+ vmovdqa $TABLE+`$SZ*2*$rounds`(%rip),$t3
+ vmovdqu -16*$SZ+0(%rsi,%r13),%xmm0
+ vmovdqu -16*$SZ+16(%rsi,%r13),%xmm1
+ vmovdqu -16*$SZ+32(%rsi,%r13),%xmm2
+ vmovdqu -16*$SZ+48(%rsi,%r13),%xmm3
+
+ vinserti128 \$1,(%r12),@X[0],@X[0]
+ vinserti128 \$1,16(%r12),@X[1],@X[1]
+ vpshufb $t3,@X[0],@X[0]
+ vinserti128 \$1,32(%r12),@X[2],@X[2]
+ vpshufb $t3,@X[1],@X[1]
+ vinserti128 \$1,48(%r12),@X[3],@X[3]
+
+ lea $TABLE(%rip),$Tbl
+ vpshufb $t3,@X[2],@X[2]
+ lea -16*$SZ(%r13),%r13
+ vpaddd 0x00($Tbl),@X[0],$t0
+ vpshufb $t3,@X[3],@X[3]
+ vpaddd 0x20($Tbl),@X[1],$t1
+ vpaddd 0x40($Tbl),@X[2],$t2
+ vpaddd 0x60($Tbl),@X[3],$t3
+ vmovdqa $t0,0x00(%rsp)
+ xor $a1,$a1
+ vmovdqa $t1,0x20(%rsp)
+ lea -$PUSH8(%rsp),%rsp
+ mov $B,$a3
+ vmovdqa $t2,0x00(%rsp)
+ xor $C,$a3 # magic
+ vmovdqa $t3,0x20(%rsp)
+ mov $F,$a4
+ sub \$-16*2*$SZ,$Tbl # size optimization
+ jmp .Lavx2_00_47
+
+.align 16
+.Lavx2_00_47:
+ vmovdqu (%r13),$inout
+ vpinsrq \$0,%r13,$offload,$offload
+___
+
+sub AVX2_256_00_47 () {
+my $j = shift;
+my $body = shift;
+my @X = @_;
+my @insns = (&$body,&$body,&$body,&$body); # 96 instructions
+my $base = "+2*$PUSH8(%rsp)";
+
+ &lea ("%rsp","-$PUSH8(%rsp)") if (($j%2)==0);
+ foreach (Xupdate_256_AVX()) { # 29 instructions
+ eval;
+ eval(shift(@insns));
+ eval(shift(@insns));
+ eval(shift(@insns));
+ }
+ &vpaddd ($t2,@X[0],16*2*$j."($Tbl)");
+ foreach (@insns) { eval; } # remaining instructions
+ &vmovdqa ((32*$j)%$PUSH8."(%rsp)",$t2);
+}
+ $aesni_cbc_idx=0;
+ for ($i=0,$j=0; $j<4; $j++) {
+ &AVX2_256_00_47($j,\&bodyx_00_15,@X);
+ push(@X,shift(@X)); # rotate(@X)
+ }
+ &vmovq ("%r13",$offload); # borrow $a0
+ &vpextrq ("%r15",$offload,1); # borrow $a2
+ &vpand ($temp,$temp,$mask14);
+ &vpor ($iv,$iv,$temp);
+ &vmovdqu ("(%r15,%r13)",$iv); # write output
+ &lea ("%r13","16(%r13)"); # inp++
+
+ &lea ($Tbl,16*2*$SZ."($Tbl)");
+ &cmpb (($SZ-1)."($Tbl)",0);
+ &jne (".Lavx2_00_47");
+
+ &vmovdqu ($inout,"(%r13)");
+ &vpinsrq ($offload,$offload,"%r13",0);
+
+ $aesni_cbc_idx=0;
+ for ($i=0; $i<16; ) {
+ my $base=$i<8?"+$PUSH8(%rsp)":"(%rsp)";
+ foreach(bodyx_00_15()) { eval; }
+ }
+ }
+$code.=<<___;
+ vpextrq \$1,$offload,%r12 # $_out, borrow $a4
+ vmovq $offload,%r13 # $_inp, borrow $a0
+ mov `2*$SZ*$rounds+5*8`(%rsp),%r15 # $_ctx, borrow $a2
+ add $a1,$A
+ lea `2*$SZ*($rounds-8)`(%rsp),$Tbl
+
+ vpand $mask14,$temp,$temp
+ vpor $temp,$iv,$iv
+ vmovdqu $iv,(%r12,%r13) # write output
+ lea 16(%r13),%r13
+
+ add $SZ*0(%r15),$A
+ add $SZ*1(%r15),$B
+ add $SZ*2(%r15),$C
+ add $SZ*3(%r15),$D
+ add $SZ*4(%r15),$E
+ add $SZ*5(%r15),$F
+ add $SZ*6(%r15),$G
+ add $SZ*7(%r15),$H
+
+ mov $A,$SZ*0(%r15)
+ mov $B,$SZ*1(%r15)
+ mov $C,$SZ*2(%r15)
+ mov $D,$SZ*3(%r15)
+ mov $E,$SZ*4(%r15)
+ mov $F,$SZ*5(%r15)
+ mov $G,$SZ*6(%r15)
+ mov $H,$SZ*7(%r15)
+
+ cmp `$PUSH8+2*8`($Tbl),%r13 # $_end
+ je .Ldone_avx2
+
+ xor $a1,$a1
+ mov $B,$a3
+ mov $F,$a4
+ xor $C,$a3 # magic
+ jmp .Lower_avx2
+.align 16
+.Lower_avx2:
+ vmovdqu (%r13),$inout
+ vpinsrq \$0,%r13,$offload,$offload
+___
+ $aesni_cbc_idx=0;
+ for ($i=0; $i<16; ) {
+ my $base="+16($Tbl)";
+ foreach(bodyx_00_15()) { eval; }
+ &lea ($Tbl,"-$PUSH8($Tbl)") if ($i==8);
+ }
+$code.=<<___;
+ vmovq $offload,%r13 # borrow $a0
+ vpextrq \$1,$offload,%r15 # borrow $a2
+ vpand $mask14,$temp,$temp
+ vpor $temp,$iv,$iv
+ lea -$PUSH8($Tbl),$Tbl
+ vmovdqu $iv,(%r15,%r13) # write output
+ lea 16(%r13),%r13 # inp++
+ cmp %rsp,$Tbl
+ jae .Lower_avx2
+
+ mov `2*$SZ*$rounds+5*8`(%rsp),%r15 # $_ctx, borrow $a2
+ lea 16*$SZ(%r13),%r13
+ mov `2*$SZ*$rounds+6*8`(%rsp),%rsi # $_in0, borrow $a3
+ add $a1,$A
+ lea `2*$SZ*($rounds-8)`(%rsp),%rsp
+
+ add $SZ*0(%r15),$A
+ add $SZ*1(%r15),$B
+ add $SZ*2(%r15),$C
+ add $SZ*3(%r15),$D
+ add $SZ*4(%r15),$E
+ add $SZ*5(%r15),$F
+ add $SZ*6(%r15),$G
+ lea (%rsi,%r13),%r12
+ add $SZ*7(%r15),$H
+
+ cmp $_end,%r13
+
+ mov $A,$SZ*0(%r15)
+ cmove %rsp,%r12 # next block or stale data
+ mov $B,$SZ*1(%r15)
+ mov $C,$SZ*2(%r15)
+ mov $D,$SZ*3(%r15)
+ mov $E,$SZ*4(%r15)
+ mov $F,$SZ*5(%r15)
+ mov $G,$SZ*6(%r15)
+ mov $H,$SZ*7(%r15)
+
+ jbe .Loop_avx2
+ lea (%rsp),$Tbl
+
+.Ldone_avx2:
+ lea ($Tbl),%rsp
+ mov $_ivp,$ivp
+ mov $_rsp,%rsi
+ vmovdqu $iv,($ivp) # output IV
+ vzeroall
+___
+$code.=<<___ if ($win64);
+ movaps `$framesz+16*0`(%rsp),%xmm6
+ movaps `$framesz+16*1`(%rsp),%xmm7
+ movaps `$framesz+16*2`(%rsp),%xmm8
+ movaps `$framesz+16*3`(%rsp),%xmm9
+ movaps `$framesz+16*4`(%rsp),%xmm10
+ movaps `$framesz+16*5`(%rsp),%xmm11
+ movaps `$framesz+16*6`(%rsp),%xmm12
+ movaps `$framesz+16*7`(%rsp),%xmm13
+ movaps `$framesz+16*8`(%rsp),%xmm14
+ movaps `$framesz+16*9`(%rsp),%xmm15
+___
+$code.=<<___;
+ mov (%rsi),%r15
+ mov 8(%rsi),%r14
+ mov 16(%rsi),%r13
+ mov 24(%rsi),%r12
+ mov 32(%rsi),%rbp
+ mov 40(%rsi),%rbx
+ lea 48(%rsi),%rsp
+.Lepilogue_avx2:
+ ret
+.size ${func}_avx2,.-${func}_avx2
+___
+}}
+}}
+{{
+my ($in0,$out,$len,$key,$ivp,$ctx,$inp)=("%rdi","%rsi","%rdx","%rcx","%r8","%r9","%r10");
+
+my ($rounds,$Tbl)=("%r11d","%rbx");
+
+my ($iv,$in,$rndkey0)=map("%xmm$_",(6,14,15));
+my @rndkey=("%xmm4","%xmm5");
+my $r=0;
+my $sn=0;
+
+my ($Wi,$ABEF,$CDGH,$TMP,$BSWAP,$ABEF_SAVE,$CDGH_SAVE)=map("%xmm$_",(0..3,7..9));
+my @MSG=map("%xmm$_",(10..13));
+
+my $aesenc=sub {
+ use integer;
+ my ($n,$k)=($r/10,$r%10);
+ if ($k==0) {
+ $code.=<<___;
+ movups `16*$n`($in0),$in # load input
+ xorps $rndkey0,$in
+___
+ $code.=<<___ if ($n);
+ movups $iv,`16*($n-1)`($out,$in0) # write output
+___
+ $code.=<<___;
+ xorps $in,$iv
+ movups `32+16*$k-112`($key),$rndkey[1]
+ aesenc $rndkey[0],$iv
+___
+ } elsif ($k==9) {
+ $sn++;
+ $code.=<<___;
+ cmp \$11,$rounds
+ jb .Laesenclast$sn
+ movups `32+16*($k+0)-112`($key),$rndkey[1]
+ aesenc $rndkey[0],$iv
+ movups `32+16*($k+1)-112`($key),$rndkey[0]
+ aesenc $rndkey[1],$iv
+ je .Laesenclast$sn
+ movups `32+16*($k+2)-112`($key),$rndkey[1]
+ aesenc $rndkey[0],$iv
+ movups `32+16*($k+3)-112`($key),$rndkey[0]
+ aesenc $rndkey[1],$iv
+.Laesenclast$sn:
+ aesenclast $rndkey[0],$iv
+ movups 16-112($key),$rndkey[1] # forward reference
+ nop
+___
+ } else {
+ $code.=<<___;
+ movups `32+16*$k-112`($key),$rndkey[1]
+ aesenc $rndkey[0],$iv
+___
+ }
+ $r++; unshift(@rndkey,pop(@rndkey));
+};
+
+if ($shaext) {
+my $Tbl="%rax";
+
+$code.=<<___;
+.type ${func}_shaext,\@function,6
+.align 32
+${func}_shaext:
+ mov `($win64?56:8)`(%rsp),$inp # load 7th argument
+___
+$code.=<<___ if ($win64);
+ lea `-8-10*16`(%rsp),%rsp
+ movaps %xmm6,-8-10*16(%rax)
+ movaps %xmm7,-8-9*16(%rax)
+ movaps %xmm8,-8-8*16(%rax)
+ movaps %xmm9,-8-7*16(%rax)
+ movaps %xmm10,-8-6*16(%rax)
+ movaps %xmm11,-8-5*16(%rax)
+ movaps %xmm12,-8-4*16(%rax)
+ movaps %xmm13,-8-3*16(%rax)
+ movaps %xmm14,-8-2*16(%rax)
+ movaps %xmm15,-8-1*16(%rax)
+.Lprologue_shaext:
+___
+$code.=<<___;
+ lea K256+0x80(%rip),$Tbl
+ movdqu ($ctx),$ABEF # DCBA
+ movdqu 16($ctx),$CDGH # HGFE
+ movdqa 0x200-0x80($Tbl),$TMP # byte swap mask
+
+ mov 240($key),$rounds
+ sub $in0,$out
+ movups ($key),$rndkey0 # $key[0]
+ movups 16($key),$rndkey[0] # forward reference
+ lea 112($key),$key # size optimization
+
+ pshufd \$0x1b,$ABEF,$Wi # ABCD
+ pshufd \$0xb1,$ABEF,$ABEF # CDAB
+ pshufd \$0x1b,$CDGH,$CDGH # EFGH
+ movdqa $TMP,$BSWAP # offload
+ palignr \$8,$CDGH,$ABEF # ABEF
+ punpcklqdq $Wi,$CDGH # CDGH
+
+ jmp .Loop_shaext
+
+.align 16
+.Loop_shaext:
+ movdqu ($inp),@MSG[0]
+ movdqu 0x10($inp),@MSG[1]
+ movdqu 0x20($inp),@MSG[2]
+ pshufb $TMP,@MSG[0]
+ movdqu 0x30($inp),@MSG[3]
+
+ movdqa 0*32-0x80($Tbl),$Wi
+ paddd @MSG[0],$Wi
+ pshufb $TMP,@MSG[1]
+ movdqa $CDGH,$CDGH_SAVE # offload
+ movdqa $ABEF,$ABEF_SAVE # offload
+___
+ &$aesenc();
+$code.=<<___;
+ sha256rnds2 $ABEF,$CDGH # 0-3
+ pshufd \$0x0e,$Wi,$Wi
+___
+ &$aesenc();
+$code.=<<___;
+ sha256rnds2 $CDGH,$ABEF
+
+ movdqa 1*32-0x80($Tbl),$Wi
+ paddd @MSG[1],$Wi
+ pshufb $TMP,@MSG[2]
+ lea 0x40($inp),$inp
+___
+ &$aesenc();
+$code.=<<___;
+ sha256rnds2 $ABEF,$CDGH # 4-7
+ pshufd \$0x0e,$Wi,$Wi
+___
+ &$aesenc();
+$code.=<<___;
+ sha256rnds2 $CDGH,$ABEF
+
+ movdqa 2*32-0x80($Tbl),$Wi
+ paddd @MSG[2],$Wi
+ pshufb $TMP,@MSG[3]
+ sha256msg1 @MSG[1],@MSG[0]
+___
+ &$aesenc();
+$code.=<<___;
+ sha256rnds2 $ABEF,$CDGH # 8-11
+ pshufd \$0x0e,$Wi,$Wi
+ movdqa @MSG[3],$TMP
+ palignr \$4,@MSG[2],$TMP
+ paddd $TMP,@MSG[0]
+___
+ &$aesenc();
+$code.=<<___;
+ sha256rnds2 $CDGH,$ABEF
+
+ movdqa 3*32-0x80($Tbl),$Wi
+ paddd @MSG[3],$Wi
+ sha256msg2 @MSG[3],@MSG[0]
+ sha256msg1 @MSG[2],@MSG[1]
+___
+ &$aesenc();
+$code.=<<___;
+ sha256rnds2 $ABEF,$CDGH # 12-15
+ pshufd \$0x0e,$Wi,$Wi
+___
+ &$aesenc();
+$code.=<<___;
+ movdqa @MSG[0],$TMP
+ palignr \$4,@MSG[3],$TMP
+ paddd $TMP,@MSG[1]
+ sha256rnds2 $CDGH,$ABEF
+___
+for($i=4;$i<16-3;$i++) {
+ &$aesenc() if (($r%10)==0);
+$code.=<<___;
+ movdqa $i*32-0x80($Tbl),$Wi
+ paddd @MSG[0],$Wi
+ sha256msg2 @MSG[0],@MSG[1]
+ sha256msg1 @MSG[3],@MSG[2]
+___
+ &$aesenc();
+$code.=<<___;
+ sha256rnds2 $ABEF,$CDGH # 16-19...
+ pshufd \$0x0e,$Wi,$Wi
+ movdqa @MSG[1],$TMP
+ palignr \$4,@MSG[0],$TMP
+ paddd $TMP,@MSG[2]
+___
+ &$aesenc();
+ &$aesenc() if ($r==19);
+$code.=<<___;
+ sha256rnds2 $CDGH,$ABEF
+___
+ push(@MSG,shift(@MSG));
+}
+$code.=<<___;
+ movdqa 13*32-0x80($Tbl),$Wi
+ paddd @MSG[0],$Wi
+ sha256msg2 @MSG[0],@MSG[1]
+ sha256msg1 @MSG[3],@MSG[2]
+___
+ &$aesenc();
+$code.=<<___;
+ sha256rnds2 $ABEF,$CDGH # 52-55
+ pshufd \$0x0e,$Wi,$Wi
+ movdqa @MSG[1],$TMP
+ palignr \$4,@MSG[0],$TMP
+ paddd $TMP,@MSG[2]
+___
+ &$aesenc();
+ &$aesenc();
+$code.=<<___;
+ sha256rnds2 $CDGH,$ABEF
+
+ movdqa 14*32-0x80($Tbl),$Wi
+ paddd @MSG[1],$Wi
+ sha256msg2 @MSG[1],@MSG[2]
+ movdqa $BSWAP,$TMP
+___
+ &$aesenc();
+$code.=<<___;
+ sha256rnds2 $ABEF,$CDGH # 56-59
+ pshufd \$0x0e,$Wi,$Wi
+___
+ &$aesenc();
+$code.=<<___;
+ sha256rnds2 $CDGH,$ABEF
+
+ movdqa 15*32-0x80($Tbl),$Wi
+ paddd @MSG[2],$Wi
+___
+ &$aesenc();
+ &$aesenc();
+$code.=<<___;
+ sha256rnds2 $ABEF,$CDGH # 60-63
+ pshufd \$0x0e,$Wi,$Wi
+___
+ &$aesenc();
+$code.=<<___;
+ sha256rnds2 $CDGH,$ABEF
+ #pxor $CDGH,$rndkey0 # black magic
+___
+ while ($r<40) { &$aesenc(); } # remaining aesenc's
+$code.=<<___;
+ #xorps $CDGH,$rndkey0 # black magic
+ paddd $CDGH_SAVE,$CDGH
+ paddd $ABEF_SAVE,$ABEF
+
+ dec $len
+ movups $iv,48($out,$in0) # write output
+ lea 64($in0),$in0
+ jnz .Loop_shaext
+
+ pshufd \$0xb1,$CDGH,$CDGH # DCHG
+ pshufd \$0x1b,$ABEF,$TMP # FEBA
+ pshufd \$0xb1,$ABEF,$ABEF # BAFE
+ punpckhqdq $CDGH,$ABEF # DCBA
+ palignr \$8,$TMP,$CDGH # HGFE
+
+ movups $iv,($ivp) # write IV
+ movdqu $ABEF,($ctx)
+ movdqu $CDGH,16($ctx)
+___
+$code.=<<___ if ($win64);
+ movaps 0*16(%rsp),%xmm6
+ movaps 1*16(%rsp),%xmm7
+ movaps 2*16(%rsp),%xmm8
+ movaps 3*16(%rsp),%xmm9
+ movaps 4*16(%rsp),%xmm10
+ movaps 5*16(%rsp),%xmm11
+ movaps 6*16(%rsp),%xmm12
+ movaps 7*16(%rsp),%xmm13
+ movaps 8*16(%rsp),%xmm14
+ movaps 9*16(%rsp),%xmm15
+ lea 8+10*16(%rsp),%rsp
+.Lepilogue_shaext:
+___
+$code.=<<___;
+ ret
+.size ${func}_shaext,.-${func}_shaext
+___
+}
+}}}}}
+
+# EXCEPTION_DISPOSITION handler (EXCEPTION_RECORD *rec,ULONG64 frame,
+# CONTEXT *context,DISPATCHER_CONTEXT *disp)
+if ($win64 && $avx) {
+$rec="%rcx";
+$frame="%rdx";
+$context="%r8";
+$disp="%r9";
+
+$code.=<<___;
+.extern __imp_RtlVirtualUnwind
+.type se_handler,\@abi-omnipotent
+.align 16
+se_handler:
+ push %rsi
+ push %rdi
+ push %rbx
+ push %rbp
+ push %r12
+ push %r13
+ push %r14
+ push %r15
+ pushfq
+ sub \$64,%rsp
+
+ mov 120($context),%rax # pull context->Rax
+ mov 248($context),%rbx # pull context->Rip
+
+ mov 8($disp),%rsi # disp->ImageBase
+ mov 56($disp),%r11 # disp->HanderlData
+
+ mov 0(%r11),%r10d # HandlerData[0]
+ lea (%rsi,%r10),%r10 # prologue label
+ cmp %r10,%rbx # context->Rip<prologue label
+ jb .Lin_prologue
+
+ mov 152($context),%rax # pull context->Rsp
+
+ mov 4(%r11),%r10d # HandlerData[1]
+ lea (%rsi,%r10),%r10 # epilogue label
+ cmp %r10,%rbx # context->Rip>=epilogue label
+ jae .Lin_prologue
+___
+$code.=<<___ if ($shaext);
+ lea aesni_cbc_sha256_enc_shaext(%rip),%r10
+ cmp %r10,%rbx
+ jb .Lnot_in_shaext
+
+ lea (%rax),%rsi
+ lea 512($context),%rdi # &context.Xmm6
+ mov \$20,%ecx
+ .long 0xa548f3fc # cld; rep movsq
+ lea 168(%rax),%rax # adjust stack pointer
+ jmp .Lin_prologue
+.Lnot_in_shaext:
+___
+$code.=<<___ if ($avx>1);
+ lea .Lavx2_shortcut(%rip),%r10
+ cmp %r10,%rbx # context->Rip<avx2_shortcut
+ jb .Lnot_in_avx2
+
+ and \$-256*$SZ,%rax
+ add \$`2*$SZ*($rounds-8)`,%rax
+.Lnot_in_avx2:
+___
+$code.=<<___;
+ mov %rax,%rsi # put aside Rsp
+ mov 16*$SZ+7*8(%rax),%rax # pull $_rsp
+ lea 48(%rax),%rax
+
+ mov -8(%rax),%rbx
+ mov -16(%rax),%rbp
+ mov -24(%rax),%r12
+ mov -32(%rax),%r13
+ mov -40(%rax),%r14
+ mov -48(%rax),%r15
+ mov %rbx,144($context) # restore context->Rbx
+ mov %rbp,160($context) # restore context->Rbp
+ mov %r12,216($context) # restore context->R12
+ mov %r13,224($context) # restore context->R13
+ mov %r14,232($context) # restore context->R14
+ mov %r15,240($context) # restore context->R15
+
+ lea 16*$SZ+8*8(%rsi),%rsi # Xmm6- save area
+ lea 512($context),%rdi # &context.Xmm6
+ mov \$20,%ecx
+ .long 0xa548f3fc # cld; rep movsq
+
+.Lin_prologue:
+ mov 8(%rax),%rdi
+ mov 16(%rax),%rsi
+ mov %rax,152($context) # restore context->Rsp
+ mov %rsi,168($context) # restore context->Rsi
+ mov %rdi,176($context) # restore context->Rdi
+
+ mov 40($disp),%rdi # disp->ContextRecord
+ mov $context,%rsi # context
+ mov \$154,%ecx # sizeof(CONTEXT)
+ .long 0xa548f3fc # cld; rep movsq
+
+ mov $disp,%rsi
+ xor %rcx,%rcx # arg1, UNW_FLAG_NHANDLER
+ mov 8(%rsi),%rdx # arg2, disp->ImageBase
+ mov 0(%rsi),%r8 # arg3, disp->ControlPc
+ mov 16(%rsi),%r9 # arg4, disp->FunctionEntry
+ mov 40(%rsi),%r10 # disp->ContextRecord
+ lea 56(%rsi),%r11 # &disp->HandlerData
+ lea 24(%rsi),%r12 # &disp->EstablisherFrame
+ mov %r10,32(%rsp) # arg5
+ mov %r11,40(%rsp) # arg6
+ mov %r12,48(%rsp) # arg7
+ mov %rcx,56(%rsp) # arg8, (NULL)
+ call *__imp_RtlVirtualUnwind(%rip)
+
+ mov \$1,%eax # ExceptionContinueSearch
+ add \$64,%rsp
+ popfq
+ pop %r15
+ pop %r14
+ pop %r13
+ pop %r12
+ pop %rbp
+ pop %rbx
+ pop %rdi
+ pop %rsi
+ ret
+.size se_handler,.-se_handler
+
+.section .pdata
+ .rva .LSEH_begin_${func}_xop
+ .rva .LSEH_end_${func}_xop
+ .rva .LSEH_info_${func}_xop
+
+ .rva .LSEH_begin_${func}_avx
+ .rva .LSEH_end_${func}_avx
+ .rva .LSEH_info_${func}_avx
+___
+$code.=<<___ if ($avx>1);
+ .rva .LSEH_begin_${func}_avx2
+ .rva .LSEH_end_${func}_avx2
+ .rva .LSEH_info_${func}_avx2
+___
+$code.=<<___ if ($shaext);
+ .rva .LSEH_begin_${func}_shaext
+ .rva .LSEH_end_${func}_shaext
+ .rva .LSEH_info_${func}_shaext
+___
+$code.=<<___;
+.section .xdata
+.align 8
+.LSEH_info_${func}_xop:
+ .byte 9,0,0,0
+ .rva se_handler
+ .rva .Lprologue_xop,.Lepilogue_xop # HandlerData[]
+
+.LSEH_info_${func}_avx:
+ .byte 9,0,0,0
+ .rva se_handler
+ .rva .Lprologue_avx,.Lepilogue_avx # HandlerData[]
+___
+$code.=<<___ if ($avx>1);
+.LSEH_info_${func}_avx2:
+ .byte 9,0,0,0
+ .rva se_handler
+ .rva .Lprologue_avx2,.Lepilogue_avx2 # HandlerData[]
+___
+$code.=<<___ if ($shaext);
+.LSEH_info_${func}_shaext:
+ .byte 9,0,0,0
+ .rva se_handler
+ .rva .Lprologue_shaext,.Lepilogue_shaext # HandlerData[]
+___
+}
+
+####################################################################
+sub rex {
+ local *opcode=shift;
+ my ($dst,$src)=@_;
+ my $rex=0;
+
+ $rex|=0x04 if($dst>=8);
+ $rex|=0x01 if($src>=8);
+ unshift @opcode,$rex|0x40 if($rex);
+}
+
+{
+ my %opcodelet = (
+ "sha256rnds2" => 0xcb,
+ "sha256msg1" => 0xcc,
+ "sha256msg2" => 0xcd );
+
+ sub sha256op38 {
+ my $instr = shift;
+
+ if (defined($opcodelet{$instr}) && @_[0] =~ /%xmm([0-9]+),\s*%xmm([0-9]+)/) {
+ my @opcode=(0x0f,0x38);
+ rex(\@opcode,$2,$1);
+ push @opcode,$opcodelet{$instr};
+ push @opcode,0xc0|($1&7)|(($2&7)<<3); # ModR/M
+ return ".byte\t".join(',',@opcode);
+ } else {
+ return $instr."\t".@_[0];
+ }
+ }
+}
+
+$code =~ s/\`([^\`]*)\`/eval $1/gem;
+$code =~ s/\b(sha256[^\s]*)\s+(.*)/sha256op38($1,$2)/gem;
+print $code;
+close STDOUT;
diff --git a/crypto/openssl/crypto/aes/asm/aesni-x86.pl b/crypto/openssl/crypto/aes/asm/aesni-x86.pl
index 3dc345b..f67df8c 100755
--- a/crypto/openssl/crypto/aes/asm/aesni-x86.pl
+++ b/crypto/openssl/crypto/aes/asm/aesni-x86.pl
@@ -1,7 +1,7 @@
#!/usr/bin/env perl
# ====================================================================
-# Written by Andy Polyakov <appro@fy.chalmers.se> for the OpenSSL
+# Written by Andy Polyakov <appro@openssl.org> for the OpenSSL
# project. The module is, however, dual licensed under OpenSSL and
# CRYPTOGAMS licenses depending on where you obtain it. For further
# details see http://www.openssl.org/~appro/cryptogams/.
@@ -43,6 +43,17 @@
# Add aesni_xts_[en|de]crypt. Westmere spends 1.50 cycles processing
# one byte out of 8KB with 128-bit key, Sandy Bridge - 1.09.
+######################################################################
+# Current large-block performance in cycles per byte processed with
+# 128-bit key (less is better).
+#
+# CBC en-/decrypt CTR XTS ECB
+# Westmere 3.77/1.37 1.37 1.52 1.27
+# * Bridge 5.07/0.98 0.99 1.09 0.91
+# Haswell 4.44/0.80 0.97 1.03 0.72
+# Silvermont 5.77/3.56 3.67 4.03 3.46
+# Bulldozer 5.80/0.98 1.05 1.24 0.93
+
$PREFIX="aesni"; # if $PREFIX is set to "AES", the script
# generates drop-in replacement for
# crypto/aes/asm/aes-586.pl:-)
@@ -54,8 +65,11 @@ require "x86asm.pl";
&asm_init($ARGV[0],$0);
-if ($PREFIX eq "aesni") { $movekey=*movups; }
-else { $movekey=*movups; }
+&external_label("OPENSSL_ia32cap_P");
+&static_label("key_const");
+
+if ($PREFIX eq "aesni") { $movekey=\&movups; }
+else { $movekey=\&movups; }
$len="eax";
$rounds="ecx";
@@ -170,7 +184,10 @@ sub aesni_generate1 # fully unrolled loop
{ &aesni_inline_generate1("enc"); }
else
{ &call ("_aesni_encrypt1"); }
+ &pxor ($rndkey0,$rndkey0); # clear register bank
+ &pxor ($rndkey1,$rndkey1);
&movups (&QWP(0,"eax"),$inout0);
+ &pxor ($inout0,$inout0);
&ret ();
&function_end_B("${PREFIX}_encrypt");
@@ -186,7 +203,10 @@ sub aesni_generate1 # fully unrolled loop
{ &aesni_inline_generate1("dec"); }
else
{ &call ("_aesni_decrypt1"); }
+ &pxor ($rndkey0,$rndkey0); # clear register bank
+ &pxor ($rndkey1,$rndkey1);
&movups (&QWP(0,"eax"),$inout0);
+ &pxor ($inout0,$inout0);
&ret ();
&function_end_B("${PREFIX}_decrypt");
@@ -196,37 +216,71 @@ sub aesni_generate1 # fully unrolled loop
# every *2nd* cycle. Thus 3x interleave was the one providing optimal
# utilization, i.e. when subroutine's throughput is virtually same as
# of non-interleaved subroutine [for number of input blocks up to 3].
-# This is why it makes no sense to implement 2x subroutine.
-# aes[enc|dec] latency in next processor generation is 8, but the
-# instructions can be scheduled every cycle. Optimal interleave for
-# new processor is therefore 8x, but it's unfeasible to accommodate it
-# in XMM registers addreassable in 32-bit mode and therefore 6x is
-# used instead...
+# This is why it originally made no sense to implement 2x subroutine.
+# But times change and it became appropriate to spend extra 192 bytes
+# on 2x subroutine on Atom Silvermont account. For processors that
+# can schedule aes[enc|dec] every cycle optimal interleave factor
+# equals to corresponding instructions latency. 8x is optimal for
+# * Bridge, but it's unfeasible to accommodate such implementation
+# in XMM registers addreassable in 32-bit mode and therefore maximum
+# of 6x is used instead...
+
+sub aesni_generate2
+{ my $p=shift;
+
+ &function_begin_B("_aesni_${p}rypt2");
+ &$movekey ($rndkey0,&QWP(0,$key));
+ &shl ($rounds,4);
+ &$movekey ($rndkey1,&QWP(16,$key));
+ &xorps ($inout0,$rndkey0);
+ &pxor ($inout1,$rndkey0);
+ &$movekey ($rndkey0,&QWP(32,$key));
+ &lea ($key,&DWP(32,$key,$rounds));
+ &neg ($rounds);
+ &add ($rounds,16);
+
+ &set_label("${p}2_loop");
+ eval"&aes${p} ($inout0,$rndkey1)";
+ eval"&aes${p} ($inout1,$rndkey1)";
+ &$movekey ($rndkey1,&QWP(0,$key,$rounds));
+ &add ($rounds,32);
+ eval"&aes${p} ($inout0,$rndkey0)";
+ eval"&aes${p} ($inout1,$rndkey0)";
+ &$movekey ($rndkey0,&QWP(-16,$key,$rounds));
+ &jnz (&label("${p}2_loop"));
+ eval"&aes${p} ($inout0,$rndkey1)";
+ eval"&aes${p} ($inout1,$rndkey1)";
+ eval"&aes${p}last ($inout0,$rndkey0)";
+ eval"&aes${p}last ($inout1,$rndkey0)";
+ &ret();
+ &function_end_B("_aesni_${p}rypt2");
+}
sub aesni_generate3
{ my $p=shift;
&function_begin_B("_aesni_${p}rypt3");
&$movekey ($rndkey0,&QWP(0,$key));
- &shr ($rounds,1);
+ &shl ($rounds,4);
&$movekey ($rndkey1,&QWP(16,$key));
- &lea ($key,&DWP(32,$key));
&xorps ($inout0,$rndkey0);
&pxor ($inout1,$rndkey0);
&pxor ($inout2,$rndkey0);
- &$movekey ($rndkey0,&QWP(0,$key));
+ &$movekey ($rndkey0,&QWP(32,$key));
+ &lea ($key,&DWP(32,$key,$rounds));
+ &neg ($rounds);
+ &add ($rounds,16);
&set_label("${p}3_loop");
eval"&aes${p} ($inout0,$rndkey1)";
eval"&aes${p} ($inout1,$rndkey1)";
- &dec ($rounds);
eval"&aes${p} ($inout2,$rndkey1)";
- &$movekey ($rndkey1,&QWP(16,$key));
+ &$movekey ($rndkey1,&QWP(0,$key,$rounds));
+ &add ($rounds,32);
eval"&aes${p} ($inout0,$rndkey0)";
eval"&aes${p} ($inout1,$rndkey0)";
- &lea ($key,&DWP(32,$key));
eval"&aes${p} ($inout2,$rndkey0)";
- &$movekey ($rndkey0,&QWP(0,$key));
+ &$movekey ($rndkey0,&QWP(-16,$key,$rounds));
&jnz (&label("${p}3_loop"));
eval"&aes${p} ($inout0,$rndkey1)";
eval"&aes${p} ($inout1,$rndkey1)";
@@ -248,27 +302,29 @@ sub aesni_generate4
&function_begin_B("_aesni_${p}rypt4");
&$movekey ($rndkey0,&QWP(0,$key));
&$movekey ($rndkey1,&QWP(16,$key));
- &shr ($rounds,1);
- &lea ($key,&DWP(32,$key));
+ &shl ($rounds,4);
&xorps ($inout0,$rndkey0);
&pxor ($inout1,$rndkey0);
&pxor ($inout2,$rndkey0);
&pxor ($inout3,$rndkey0);
- &$movekey ($rndkey0,&QWP(0,$key));
+ &$movekey ($rndkey0,&QWP(32,$key));
+ &lea ($key,&DWP(32,$key,$rounds));
+ &neg ($rounds);
+ &data_byte (0x0f,0x1f,0x40,0x00);
+ &add ($rounds,16);
&set_label("${p}4_loop");
eval"&aes${p} ($inout0,$rndkey1)";
eval"&aes${p} ($inout1,$rndkey1)";
- &dec ($rounds);
eval"&aes${p} ($inout2,$rndkey1)";
eval"&aes${p} ($inout3,$rndkey1)";
- &$movekey ($rndkey1,&QWP(16,$key));
+ &$movekey ($rndkey1,&QWP(0,$key,$rounds));
+ &add ($rounds,32);
eval"&aes${p} ($inout0,$rndkey0)";
eval"&aes${p} ($inout1,$rndkey0)";
- &lea ($key,&DWP(32,$key));
eval"&aes${p} ($inout2,$rndkey0)";
eval"&aes${p} ($inout3,$rndkey0)";
- &$movekey ($rndkey0,&QWP(0,$key));
+ &$movekey ($rndkey0,&QWP(-16,$key,$rounds));
&jnz (&label("${p}4_loop"));
eval"&aes${p} ($inout0,$rndkey1)";
@@ -289,43 +345,41 @@ sub aesni_generate6
&function_begin_B("_aesni_${p}rypt6");
&static_label("_aesni_${p}rypt6_enter");
&$movekey ($rndkey0,&QWP(0,$key));
- &shr ($rounds,1);
+ &shl ($rounds,4);
&$movekey ($rndkey1,&QWP(16,$key));
- &lea ($key,&DWP(32,$key));
&xorps ($inout0,$rndkey0);
&pxor ($inout1,$rndkey0); # pxor does better here
- eval"&aes${p} ($inout0,$rndkey1)";
&pxor ($inout2,$rndkey0);
- eval"&aes${p} ($inout1,$rndkey1)";
+ eval"&aes${p} ($inout0,$rndkey1)";
&pxor ($inout3,$rndkey0);
- &dec ($rounds);
- eval"&aes${p} ($inout2,$rndkey1)";
&pxor ($inout4,$rndkey0);
- eval"&aes${p} ($inout3,$rndkey1)";
+ eval"&aes${p} ($inout1,$rndkey1)";
+ &lea ($key,&DWP(32,$key,$rounds));
+ &neg ($rounds);
+ eval"&aes${p} ($inout2,$rndkey1)";
&pxor ($inout5,$rndkey0);
- eval"&aes${p} ($inout4,$rndkey1)";
- &$movekey ($rndkey0,&QWP(0,$key));
- eval"&aes${p} ($inout5,$rndkey1)";
- &jmp (&label("_aesni_${p}rypt6_enter"));
+ &$movekey ($rndkey0,&QWP(0,$key,$rounds));
+ &add ($rounds,16);
+ &jmp (&label("_aesni_${p}rypt6_inner"));
&set_label("${p}6_loop",16);
eval"&aes${p} ($inout0,$rndkey1)";
eval"&aes${p} ($inout1,$rndkey1)";
- &dec ($rounds);
eval"&aes${p} ($inout2,$rndkey1)";
+ &set_label("_aesni_${p}rypt6_inner");
eval"&aes${p} ($inout3,$rndkey1)";
eval"&aes${p} ($inout4,$rndkey1)";
eval"&aes${p} ($inout5,$rndkey1)";
- &set_label("_aesni_${p}rypt6_enter",16);
- &$movekey ($rndkey1,&QWP(16,$key));
+ &set_label("_aesni_${p}rypt6_enter");
+ &$movekey ($rndkey1,&QWP(0,$key,$rounds));
+ &add ($rounds,32);
eval"&aes${p} ($inout0,$rndkey0)";
eval"&aes${p} ($inout1,$rndkey0)";
- &lea ($key,&DWP(32,$key));
eval"&aes${p} ($inout2,$rndkey0)";
eval"&aes${p} ($inout3,$rndkey0)";
eval"&aes${p} ($inout4,$rndkey0)";
eval"&aes${p} ($inout5,$rndkey0)";
- &$movekey ($rndkey0,&QWP(0,$key));
+ &$movekey ($rndkey0,&QWP(-16,$key,$rounds));
&jnz (&label("${p}6_loop"));
eval"&aes${p} ($inout0,$rndkey1)";
@@ -343,6 +397,8 @@ sub aesni_generate6
&ret();
&function_end_B("_aesni_${p}rypt6");
}
+&aesni_generate2("enc") if ($PREFIX eq "aesni");
+&aesni_generate2("dec");
&aesni_generate3("enc") if ($PREFIX eq "aesni");
&aesni_generate3("dec");
&aesni_generate4("enc") if ($PREFIX eq "aesni");
@@ -446,8 +502,7 @@ if ($PREFIX eq "aesni") {
&jmp (&label("ecb_ret"));
&set_label("ecb_enc_two",16);
- &xorps ($inout2,$inout2);
- &call ("_aesni_encrypt3");
+ &call ("_aesni_encrypt2");
&movups (&QWP(0,$out),$inout0);
&movups (&QWP(0x10,$out),$inout1);
&jmp (&label("ecb_ret"));
@@ -547,8 +602,7 @@ if ($PREFIX eq "aesni") {
&jmp (&label("ecb_ret"));
&set_label("ecb_dec_two",16);
- &xorps ($inout2,$inout2);
- &call ("_aesni_decrypt3");
+ &call ("_aesni_decrypt2");
&movups (&QWP(0,$out),$inout0);
&movups (&QWP(0x10,$out),$inout1);
&jmp (&label("ecb_ret"));
@@ -568,6 +622,14 @@ if ($PREFIX eq "aesni") {
&movups (&QWP(0x30,$out),$inout3);
&set_label("ecb_ret");
+ &pxor ("xmm0","xmm0"); # clear register bank
+ &pxor ("xmm1","xmm1");
+ &pxor ("xmm2","xmm2");
+ &pxor ("xmm3","xmm3");
+ &pxor ("xmm4","xmm4");
+ &pxor ("xmm5","xmm5");
+ &pxor ("xmm6","xmm6");
+ &pxor ("xmm7","xmm7");
&function_end("aesni_ecb_encrypt");
######################################################################
@@ -610,11 +672,13 @@ if ($PREFIX eq "aesni") {
&mov (&DWP(24,"esp"),$key_);
&mov (&DWP(28,"esp"),$key_);
- &shr ($rounds,1);
+ &shl ($rounds,4);
+ &mov ($rounds_,16);
&lea ($key_,&DWP(0,$key));
&movdqa ($inout3,&QWP(0,"esp"));
&movdqa ($inout0,$ivec);
- &mov ($rounds_,$rounds);
+ &lea ($key,&DWP(32,$key,$rounds));
+ &sub ($rounds_,$rounds);
&pshufb ($ivec,$inout3);
&set_label("ccm64_enc_outer");
@@ -625,38 +689,45 @@ if ($PREFIX eq "aesni") {
&xorps ($inout0,$rndkey0);
&$movekey ($rndkey1,&QWP(16,$key_));
&xorps ($rndkey0,$in0);
- &lea ($key,&DWP(32,$key_));
&xorps ($cmac,$rndkey0); # cmac^=inp
- &$movekey ($rndkey0,&QWP(0,$key));
+ &$movekey ($rndkey0,&QWP(32,$key_));
&set_label("ccm64_enc2_loop");
&aesenc ($inout0,$rndkey1);
- &dec ($rounds);
&aesenc ($cmac,$rndkey1);
- &$movekey ($rndkey1,&QWP(16,$key));
+ &$movekey ($rndkey1,&QWP(0,$key,$rounds));
+ &add ($rounds,32);
&aesenc ($inout0,$rndkey0);
- &lea ($key,&DWP(32,$key));
&aesenc ($cmac,$rndkey0);
- &$movekey ($rndkey0,&QWP(0,$key));
+ &$movekey ($rndkey0,&QWP(-16,$key,$rounds));
&jnz (&label("ccm64_enc2_loop"));
&aesenc ($inout0,$rndkey1);
&aesenc ($cmac,$rndkey1);
&paddq ($ivec,&QWP(16,"esp"));
+ &dec ($len);
&aesenclast ($inout0,$rndkey0);
&aesenclast ($cmac,$rndkey0);
- &dec ($len);
&lea ($inp,&DWP(16,$inp));
&xorps ($in0,$inout0); # inp^=E(ivec)
&movdqa ($inout0,$ivec);
&movups (&QWP(0,$out),$in0); # save output
- &lea ($out,&DWP(16,$out));
&pshufb ($inout0,$inout3);
+ &lea ($out,&DWP(16,$out));
&jnz (&label("ccm64_enc_outer"));
&mov ("esp",&DWP(48,"esp"));
&mov ($out,&wparam(5));
&movups (&QWP(0,$out),$cmac);
+
+ &pxor ("xmm0","xmm0"); # clear register bank
+ &pxor ("xmm1","xmm1");
+ &pxor ("xmm2","xmm2");
+ &pxor ("xmm3","xmm3");
+ &pxor ("xmm4","xmm4");
+ &pxor ("xmm5","xmm5");
+ &pxor ("xmm6","xmm6");
+ &pxor ("xmm7","xmm7");
&function_end("aesni_ccm64_encrypt_blocks");
&function_begin("aesni_ccm64_decrypt_blocks");
@@ -700,15 +771,19 @@ if ($PREFIX eq "aesni") {
{ &aesni_inline_generate1("enc"); }
else
{ &call ("_aesni_encrypt1"); }
+ &shl ($rounds_,4);
+ &mov ($rounds,16);
&movups ($in0,&QWP(0,$inp)); # load inp
&paddq ($ivec,&QWP(16,"esp"));
&lea ($inp,&QWP(16,$inp));
+ &sub ($rounds,$rounds_);
+ &lea ($key,&DWP(32,$key_,$rounds_));
+ &mov ($rounds_,$rounds);
&jmp (&label("ccm64_dec_outer"));
&set_label("ccm64_dec_outer",16);
&xorps ($in0,$inout0); # inp ^= E(ivec)
&movdqa ($inout0,$ivec);
- &mov ($rounds,$rounds_);
&movups (&QWP(0,$out),$in0); # save output
&lea ($out,&DWP(16,$out));
&pshufb ($inout0,$inout3);
@@ -717,34 +792,33 @@ if ($PREFIX eq "aesni") {
&jz (&label("ccm64_dec_break"));
&$movekey ($rndkey0,&QWP(0,$key_));
- &shr ($rounds,1);
+ &mov ($rounds,$rounds_);
&$movekey ($rndkey1,&QWP(16,$key_));
&xorps ($in0,$rndkey0);
- &lea ($key,&DWP(32,$key_));
&xorps ($inout0,$rndkey0);
&xorps ($cmac,$in0); # cmac^=out
- &$movekey ($rndkey0,&QWP(0,$key));
+ &$movekey ($rndkey0,&QWP(32,$key_));
&set_label("ccm64_dec2_loop");
&aesenc ($inout0,$rndkey1);
- &dec ($rounds);
&aesenc ($cmac,$rndkey1);
- &$movekey ($rndkey1,&QWP(16,$key));
+ &$movekey ($rndkey1,&QWP(0,$key,$rounds));
+ &add ($rounds,32);
&aesenc ($inout0,$rndkey0);
- &lea ($key,&DWP(32,$key));
&aesenc ($cmac,$rndkey0);
- &$movekey ($rndkey0,&QWP(0,$key));
+ &$movekey ($rndkey0,&QWP(-16,$key,$rounds));
&jnz (&label("ccm64_dec2_loop"));
&movups ($in0,&QWP(0,$inp)); # load inp
&paddq ($ivec,&QWP(16,"esp"));
&aesenc ($inout0,$rndkey1);
&aesenc ($cmac,$rndkey1);
- &lea ($inp,&QWP(16,$inp));
&aesenclast ($inout0,$rndkey0);
&aesenclast ($cmac,$rndkey0);
+ &lea ($inp,&QWP(16,$inp));
&jmp (&label("ccm64_dec_outer"));
&set_label("ccm64_dec_break",16);
+ &mov ($rounds,&DWP(240,$key_));
&mov ($key,$key_);
if ($inline)
{ &aesni_inline_generate1("enc",$cmac,$in0); }
@@ -754,6 +828,15 @@ if ($PREFIX eq "aesni") {
&mov ("esp",&DWP(48,"esp"));
&mov ($out,&wparam(5));
&movups (&QWP(0,$out),$cmac);
+
+ &pxor ("xmm0","xmm0"); # clear register bank
+ &pxor ("xmm1","xmm1");
+ &pxor ("xmm2","xmm2");
+ &pxor ("xmm3","xmm3");
+ &pxor ("xmm4","xmm4");
+ &pxor ("xmm5","xmm5");
+ &pxor ("xmm6","xmm6");
+ &pxor ("xmm7","xmm7");
&function_end("aesni_ccm64_decrypt_blocks");
}
@@ -763,7 +846,7 @@ if ($PREFIX eq "aesni") {
# const char *ivec);
#
# Handles only complete blocks, operates on 32-bit counter and
-# does not update *ivec! (see engine/eng_aesni.c for details)
+# does not update *ivec! (see crypto/modes/ctr128.c for details)
#
# stack layout:
# 0 pshufb mask
@@ -810,66 +893,61 @@ if ($PREFIX eq "aesni") {
# compose 2 vectors of 3x32-bit counters
&bswap ($rounds_);
- &pxor ($rndkey1,$rndkey1);
&pxor ($rndkey0,$rndkey0);
+ &pxor ($rndkey1,$rndkey1);
&movdqa ($inout0,&QWP(0,"esp")); # load byte-swap mask
- &pinsrd ($rndkey1,$rounds_,0);
+ &pinsrd ($rndkey0,$rounds_,0);
&lea ($key_,&DWP(3,$rounds_));
- &pinsrd ($rndkey0,$key_,0);
+ &pinsrd ($rndkey1,$key_,0);
&inc ($rounds_);
- &pinsrd ($rndkey1,$rounds_,1);
+ &pinsrd ($rndkey0,$rounds_,1);
&inc ($key_);
- &pinsrd ($rndkey0,$key_,1);
+ &pinsrd ($rndkey1,$key_,1);
&inc ($rounds_);
- &pinsrd ($rndkey1,$rounds_,2);
+ &pinsrd ($rndkey0,$rounds_,2);
&inc ($key_);
- &pinsrd ($rndkey0,$key_,2);
- &movdqa (&QWP(48,"esp"),$rndkey1); # save 1st triplet
- &pshufb ($rndkey1,$inout0); # byte swap
- &movdqa (&QWP(64,"esp"),$rndkey0); # save 2nd triplet
+ &pinsrd ($rndkey1,$key_,2);
+ &movdqa (&QWP(48,"esp"),$rndkey0); # save 1st triplet
&pshufb ($rndkey0,$inout0); # byte swap
+ &movdqu ($inout4,&QWP(0,$key)); # key[0]
+ &movdqa (&QWP(64,"esp"),$rndkey1); # save 2nd triplet
+ &pshufb ($rndkey1,$inout0); # byte swap
- &pshufd ($inout0,$rndkey1,3<<6); # place counter to upper dword
- &pshufd ($inout1,$rndkey1,2<<6);
+ &pshufd ($inout0,$rndkey0,3<<6); # place counter to upper dword
+ &pshufd ($inout1,$rndkey0,2<<6);
&cmp ($len,6);
&jb (&label("ctr32_tail"));
- &movdqa (&QWP(32,"esp"),$inout5); # save counter-less ivec
- &shr ($rounds,1);
+ &pxor ($inout5,$inout4); # counter-less ivec^key[0]
+ &shl ($rounds,4);
+ &mov ($rounds_,16);
+ &movdqa (&QWP(32,"esp"),$inout5); # save counter-less ivec^key[0]
&mov ($key_,$key); # backup $key
- &mov ($rounds_,$rounds); # backup $rounds
+ &sub ($rounds_,$rounds); # backup twisted $rounds
+ &lea ($key,&DWP(32,$key,$rounds));
&sub ($len,6);
&jmp (&label("ctr32_loop6"));
&set_label("ctr32_loop6",16);
- &pshufd ($inout2,$rndkey1,1<<6);
- &movdqa ($rndkey1,&QWP(32,"esp")); # pull counter-less ivec
- &pshufd ($inout3,$rndkey0,3<<6);
- &por ($inout0,$rndkey1); # merge counter-less ivec
- &pshufd ($inout4,$rndkey0,2<<6);
- &por ($inout1,$rndkey1);
- &pshufd ($inout5,$rndkey0,1<<6);
- &por ($inout2,$rndkey1);
- &por ($inout3,$rndkey1);
- &por ($inout4,$rndkey1);
- &por ($inout5,$rndkey1);
-
- # inlining _aesni_encrypt6's prologue gives ~4% improvement...
- &$movekey ($rndkey0,&QWP(0,$key_));
- &$movekey ($rndkey1,&QWP(16,$key_));
- &lea ($key,&DWP(32,$key_));
- &dec ($rounds);
- &pxor ($inout0,$rndkey0);
+ # inlining _aesni_encrypt6's prologue gives ~6% improvement...
+ &pshufd ($inout2,$rndkey0,1<<6);
+ &movdqa ($rndkey0,&QWP(32,"esp")); # pull counter-less ivec
+ &pshufd ($inout3,$rndkey1,3<<6);
+ &pxor ($inout0,$rndkey0); # merge counter-less ivec
+ &pshufd ($inout4,$rndkey1,2<<6);
&pxor ($inout1,$rndkey0);
- &aesenc ($inout0,$rndkey1);
+ &pshufd ($inout5,$rndkey1,1<<6);
+ &$movekey ($rndkey1,&QWP(16,$key_));
&pxor ($inout2,$rndkey0);
- &aesenc ($inout1,$rndkey1);
&pxor ($inout3,$rndkey0);
- &aesenc ($inout2,$rndkey1);
+ &aesenc ($inout0,$rndkey1);
&pxor ($inout4,$rndkey0);
- &aesenc ($inout3,$rndkey1);
&pxor ($inout5,$rndkey0);
+ &aesenc ($inout1,$rndkey1);
+ &$movekey ($rndkey0,&QWP(32,$key_));
+ &mov ($rounds,$rounds_);
+ &aesenc ($inout2,$rndkey1);
+ &aesenc ($inout3,$rndkey1);
&aesenc ($inout4,$rndkey1);
- &$movekey ($rndkey0,&QWP(0,$key));
&aesenc ($inout5,$rndkey1);
&call (&label("_aesni_encrypt6_enter"));
@@ -882,12 +960,12 @@ if ($PREFIX eq "aesni") {
&movups (&QWP(0,$out),$inout0);
&movdqa ($rndkey0,&QWP(16,"esp")); # load increment
&xorps ($inout2,$rndkey1);
- &movdqa ($rndkey1,&QWP(48,"esp")); # load 1st triplet
+ &movdqa ($rndkey1,&QWP(64,"esp")); # load 2nd triplet
&movups (&QWP(0x10,$out),$inout1);
&movups (&QWP(0x20,$out),$inout2);
- &paddd ($rndkey1,$rndkey0); # 1st triplet increment
- &paddd ($rndkey0,&QWP(64,"esp")); # 2nd triplet increment
+ &paddd ($rndkey1,$rndkey0); # 2nd triplet increment
+ &paddd ($rndkey0,&QWP(48,"esp")); # 1st triplet increment
&movdqa ($inout0,&QWP(0,"esp")); # load byte swap mask
&movups ($inout1,&QWP(0x30,$inp));
@@ -895,44 +973,44 @@ if ($PREFIX eq "aesni") {
&xorps ($inout3,$inout1);
&movups ($inout1,&QWP(0x50,$inp));
&lea ($inp,&DWP(0x60,$inp));
- &movdqa (&QWP(48,"esp"),$rndkey1); # save 1st triplet
- &pshufb ($rndkey1,$inout0); # byte swap
+ &movdqa (&QWP(48,"esp"),$rndkey0); # save 1st triplet
+ &pshufb ($rndkey0,$inout0); # byte swap
&xorps ($inout4,$inout2);
&movups (&QWP(0x30,$out),$inout3);
&xorps ($inout5,$inout1);
- &movdqa (&QWP(64,"esp"),$rndkey0); # save 2nd triplet
- &pshufb ($rndkey0,$inout0); # byte swap
+ &movdqa (&QWP(64,"esp"),$rndkey1); # save 2nd triplet
+ &pshufb ($rndkey1,$inout0); # byte swap
&movups (&QWP(0x40,$out),$inout4);
- &pshufd ($inout0,$rndkey1,3<<6);
+ &pshufd ($inout0,$rndkey0,3<<6);
&movups (&QWP(0x50,$out),$inout5);
&lea ($out,&DWP(0x60,$out));
- &mov ($rounds,$rounds_);
- &pshufd ($inout1,$rndkey1,2<<6);
+ &pshufd ($inout1,$rndkey0,2<<6);
&sub ($len,6);
&jnc (&label("ctr32_loop6"));
&add ($len,6);
&jz (&label("ctr32_ret"));
+ &movdqu ($inout5,&QWP(0,$key_));
&mov ($key,$key_);
- &lea ($rounds,&DWP(1,"",$rounds,2)); # restore $rounds
- &movdqa ($inout5,&QWP(32,"esp")); # pull count-less ivec
+ &pxor ($inout5,&QWP(32,"esp")); # restore count-less ivec
+ &mov ($rounds,&DWP(240,$key_)); # restore $rounds
&set_label("ctr32_tail");
&por ($inout0,$inout5);
&cmp ($len,2);
&jb (&label("ctr32_one"));
- &pshufd ($inout2,$rndkey1,1<<6);
+ &pshufd ($inout2,$rndkey0,1<<6);
&por ($inout1,$inout5);
&je (&label("ctr32_two"));
- &pshufd ($inout3,$rndkey0,3<<6);
+ &pshufd ($inout3,$rndkey1,3<<6);
&por ($inout2,$inout5);
&cmp ($len,4);
&jb (&label("ctr32_three"));
- &pshufd ($inout4,$rndkey0,2<<6);
+ &pshufd ($inout4,$rndkey1,2<<6);
&por ($inout3,$inout5);
&je (&label("ctr32_four"));
@@ -970,7 +1048,7 @@ if ($PREFIX eq "aesni") {
&jmp (&label("ctr32_ret"));
&set_label("ctr32_two",16);
- &call ("_aesni_encrypt3");
+ &call ("_aesni_encrypt2");
&movups ($inout3,&QWP(0,$inp));
&movups ($inout4,&QWP(0x10,$inp));
&xorps ($inout0,$inout3);
@@ -1008,6 +1086,17 @@ if ($PREFIX eq "aesni") {
&movups (&QWP(0x30,$out),$inout3);
&set_label("ctr32_ret");
+ &pxor ("xmm0","xmm0"); # clear register bank
+ &pxor ("xmm1","xmm1");
+ &pxor ("xmm2","xmm2");
+ &pxor ("xmm3","xmm3");
+ &pxor ("xmm4","xmm4");
+ &movdqa (&QWP(32,"esp"),"xmm0"); # clear stack
+ &pxor ("xmm5","xmm5");
+ &movdqa (&QWP(48,"esp"),"xmm0");
+ &pxor ("xmm6","xmm6");
+ &movdqa (&QWP(64,"esp"),"xmm0");
+ &pxor ("xmm7","xmm7");
&mov ("esp",&DWP(80,"esp"));
&function_end("aesni_ctr32_encrypt_blocks");
@@ -1057,8 +1146,10 @@ if ($PREFIX eq "aesni") {
&sub ($len,16*6);
&jc (&label("xts_enc_short"));
- &shr ($rounds,1);
- &mov ($rounds_,$rounds);
+ &shl ($rounds,4);
+ &mov ($rounds_,16);
+ &sub ($rounds_,$rounds);
+ &lea ($key,&DWP(32,$key,$rounds));
&jmp (&label("xts_enc_loop6"));
&set_label("xts_enc_loop6",16);
@@ -1080,6 +1171,7 @@ if ($PREFIX eq "aesni") {
&pxor ($inout5,$tweak);
# inline _aesni_encrypt6 prologue and flip xor with tweak and key[0]
+ &mov ($rounds,$rounds_); # restore $rounds
&movdqu ($inout1,&QWP(16*1,$inp));
&xorps ($inout0,$rndkey0); # input^=rndkey[0]
&movdqu ($inout2,&QWP(16*2,$inp));
@@ -1096,19 +1188,17 @@ if ($PREFIX eq "aesni") {
&pxor ($inout5,$rndkey1);
&$movekey ($rndkey1,&QWP(16,$key_));
- &lea ($key,&DWP(32,$key_));
&pxor ($inout1,&QWP(16*1,"esp"));
- &aesenc ($inout0,$rndkey1);
&pxor ($inout2,&QWP(16*2,"esp"));
- &aesenc ($inout1,$rndkey1);
+ &aesenc ($inout0,$rndkey1);
&pxor ($inout3,&QWP(16*3,"esp"));
- &dec ($rounds);
- &aesenc ($inout2,$rndkey1);
&pxor ($inout4,&QWP(16*4,"esp"));
- &aesenc ($inout3,$rndkey1);
+ &aesenc ($inout1,$rndkey1);
&pxor ($inout5,$rndkey0);
+ &$movekey ($rndkey0,&QWP(32,$key_));
+ &aesenc ($inout2,$rndkey1);
+ &aesenc ($inout3,$rndkey1);
&aesenc ($inout4,$rndkey1);
- &$movekey ($rndkey0,&QWP(0,$key));
&aesenc ($inout5,$rndkey1);
&call (&label("_aesni_encrypt6_enter"));
@@ -1135,13 +1225,12 @@ if ($PREFIX eq "aesni") {
&paddq ($tweak,$tweak); # &psllq($tweak,1);
&pand ($twres,$twmask); # isolate carry and residue
&pcmpgtd($twtmp,$tweak); # broadcast upper bits
- &mov ($rounds,$rounds_); # restore $rounds
&pxor ($tweak,$twres);
&sub ($len,16*6);
&jnc (&label("xts_enc_loop6"));
- &lea ($rounds,&DWP(1,"",$rounds,2)); # restore $rounds
+ &mov ($rounds,&DWP(240,$key_)); # restore $rounds
&mov ($key,$key_); # restore $key
&mov ($rounds_,$rounds);
@@ -1241,9 +1330,8 @@ if ($PREFIX eq "aesni") {
&lea ($inp,&DWP(16*2,$inp));
&xorps ($inout0,$inout3); # input^=tweak
&xorps ($inout1,$inout4);
- &xorps ($inout2,$inout2);
- &call ("_aesni_encrypt3");
+ &call ("_aesni_encrypt2");
&xorps ($inout0,$inout3); # output^=tweak
&xorps ($inout1,$inout4);
@@ -1350,6 +1438,20 @@ if ($PREFIX eq "aesni") {
&movups (&QWP(-16,$out),$inout0); # write output
&set_label("xts_enc_ret");
+ &pxor ("xmm0","xmm0"); # clear register bank
+ &pxor ("xmm1","xmm1");
+ &pxor ("xmm2","xmm2");
+ &movdqa (&QWP(16*0,"esp"),"xmm0"); # clear stack
+ &pxor ("xmm3","xmm3");
+ &movdqa (&QWP(16*1,"esp"),"xmm0");
+ &pxor ("xmm4","xmm4");
+ &movdqa (&QWP(16*2,"esp"),"xmm0");
+ &pxor ("xmm5","xmm5");
+ &movdqa (&QWP(16*3,"esp"),"xmm0");
+ &pxor ("xmm6","xmm6");
+ &movdqa (&QWP(16*4,"esp"),"xmm0");
+ &pxor ("xmm7","xmm7");
+ &movdqa (&QWP(16*5,"esp"),"xmm0");
&mov ("esp",&DWP(16*7+4,"esp")); # restore %esp
&function_end("aesni_xts_encrypt");
@@ -1399,8 +1501,10 @@ if ($PREFIX eq "aesni") {
&sub ($len,16*6);
&jc (&label("xts_dec_short"));
- &shr ($rounds,1);
- &mov ($rounds_,$rounds);
+ &shl ($rounds,4);
+ &mov ($rounds_,16);
+ &sub ($rounds_,$rounds);
+ &lea ($key,&DWP(32,$key,$rounds));
&jmp (&label("xts_dec_loop6"));
&set_label("xts_dec_loop6",16);
@@ -1422,6 +1526,7 @@ if ($PREFIX eq "aesni") {
&pxor ($inout5,$tweak);
# inline _aesni_encrypt6 prologue and flip xor with tweak and key[0]
+ &mov ($rounds,$rounds_);
&movdqu ($inout1,&QWP(16*1,$inp));
&xorps ($inout0,$rndkey0); # input^=rndkey[0]
&movdqu ($inout2,&QWP(16*2,$inp));
@@ -1438,19 +1543,17 @@ if ($PREFIX eq "aesni") {
&pxor ($inout5,$rndkey1);
&$movekey ($rndkey1,&QWP(16,$key_));
- &lea ($key,&DWP(32,$key_));
&pxor ($inout1,&QWP(16*1,"esp"));
- &aesdec ($inout0,$rndkey1);
&pxor ($inout2,&QWP(16*2,"esp"));
- &aesdec ($inout1,$rndkey1);
+ &aesdec ($inout0,$rndkey1);
&pxor ($inout3,&QWP(16*3,"esp"));
- &dec ($rounds);
- &aesdec ($inout2,$rndkey1);
&pxor ($inout4,&QWP(16*4,"esp"));
- &aesdec ($inout3,$rndkey1);
+ &aesdec ($inout1,$rndkey1);
&pxor ($inout5,$rndkey0);
+ &$movekey ($rndkey0,&QWP(32,$key_));
+ &aesdec ($inout2,$rndkey1);
+ &aesdec ($inout3,$rndkey1);
&aesdec ($inout4,$rndkey1);
- &$movekey ($rndkey0,&QWP(0,$key));
&aesdec ($inout5,$rndkey1);
&call (&label("_aesni_decrypt6_enter"));
@@ -1477,13 +1580,12 @@ if ($PREFIX eq "aesni") {
&paddq ($tweak,$tweak); # &psllq($tweak,1);
&pand ($twres,$twmask); # isolate carry and residue
&pcmpgtd($twtmp,$tweak); # broadcast upper bits
- &mov ($rounds,$rounds_); # restore $rounds
&pxor ($tweak,$twres);
&sub ($len,16*6);
&jnc (&label("xts_dec_loop6"));
- &lea ($rounds,&DWP(1,"",$rounds,2)); # restore $rounds
+ &mov ($rounds,&DWP(240,$key_)); # restore $rounds
&mov ($key,$key_); # restore $key
&mov ($rounds_,$rounds);
@@ -1584,7 +1686,7 @@ if ($PREFIX eq "aesni") {
&xorps ($inout0,$inout3); # input^=tweak
&xorps ($inout1,$inout4);
- &call ("_aesni_decrypt3");
+ &call ("_aesni_decrypt2");
&xorps ($inout0,$inout3); # output^=tweak
&xorps ($inout1,$inout4);
@@ -1712,6 +1814,20 @@ if ($PREFIX eq "aesni") {
&movups (&QWP(0,$out),$inout0); # write output
&set_label("xts_dec_ret");
+ &pxor ("xmm0","xmm0"); # clear register bank
+ &pxor ("xmm1","xmm1");
+ &pxor ("xmm2","xmm2");
+ &movdqa (&QWP(16*0,"esp"),"xmm0"); # clear stack
+ &pxor ("xmm3","xmm3");
+ &movdqa (&QWP(16*1,"esp"),"xmm0");
+ &pxor ("xmm4","xmm4");
+ &movdqa (&QWP(16*2,"esp"),"xmm0");
+ &pxor ("xmm5","xmm5");
+ &movdqa (&QWP(16*3,"esp"),"xmm0");
+ &pxor ("xmm6","xmm6");
+ &movdqa (&QWP(16*4,"esp"),"xmm0");
+ &pxor ("xmm7","xmm7");
+ &movdqa (&QWP(16*5,"esp"),"xmm0");
&mov ("esp",&DWP(16*7+4,"esp")); # restore %esp
&function_end("aesni_xts_decrypt");
}
@@ -1764,6 +1880,7 @@ if ($PREFIX eq "aesni") {
&add ($len,16);
&jnz (&label("cbc_enc_tail"));
&movaps ($ivec,$inout0);
+ &pxor ($inout0,$inout0);
&jmp (&label("cbc_ret"));
&set_label("cbc_enc_tail");
@@ -1816,7 +1933,7 @@ if ($PREFIX eq "aesni") {
&movups (&QWP(0x10,$out),$inout1);
&lea ($inp,&DWP(0x60,$inp));
&movups (&QWP(0x20,$out),$inout2);
- &mov ($rounds,$rounds_) # restore $rounds
+ &mov ($rounds,$rounds_); # restore $rounds
&movups (&QWP(0x30,$out),$inout3);
&mov ($key,$key_); # restore $key
&movups (&QWP(0x40,$out),$inout4);
@@ -1827,7 +1944,7 @@ if ($PREFIX eq "aesni") {
&movaps ($inout0,$inout5);
&movaps ($ivec,$rndkey0);
&add ($len,0x50);
- &jle (&label("cbc_dec_tail_collected"));
+ &jle (&label("cbc_dec_clear_tail_collected"));
&movups (&QWP(0,$out),$inout0);
&lea ($out,&DWP(0x10,$out));
&set_label("cbc_dec_tail");
@@ -1866,10 +1983,14 @@ if ($PREFIX eq "aesni") {
&xorps ($inout4,$rndkey0);
&movups (&QWP(0,$out),$inout0);
&movups (&QWP(0x10,$out),$inout1);
+ &pxor ($inout1,$inout1);
&movups (&QWP(0x20,$out),$inout2);
+ &pxor ($inout2,$inout2);
&movups (&QWP(0x30,$out),$inout3);
+ &pxor ($inout3,$inout3);
&lea ($out,&DWP(0x40,$out));
&movaps ($inout0,$inout4);
+ &pxor ($inout4,$inout4);
&sub ($len,0x50);
&jmp (&label("cbc_dec_tail_collected"));
@@ -1884,12 +2005,12 @@ if ($PREFIX eq "aesni") {
&jmp (&label("cbc_dec_tail_collected"));
&set_label("cbc_dec_two",16);
- &xorps ($inout2,$inout2);
- &call ("_aesni_decrypt3");
+ &call ("_aesni_decrypt2");
&xorps ($inout0,$ivec);
&xorps ($inout1,$in0);
&movups (&QWP(0,$out),$inout0);
&movaps ($inout0,$inout1);
+ &pxor ($inout1,$inout1);
&lea ($out,&DWP(0x10,$out));
&movaps ($ivec,$in1);
&sub ($len,0x20);
@@ -1902,7 +2023,9 @@ if ($PREFIX eq "aesni") {
&xorps ($inout2,$in1);
&movups (&QWP(0,$out),$inout0);
&movaps ($inout0,$inout2);
+ &pxor ($inout2,$inout2);
&movups (&QWP(0x10,$out),$inout1);
+ &pxor ($inout1,$inout1);
&lea ($out,&DWP(0x20,$out));
&movups ($ivec,&QWP(0x20,$inp));
&sub ($len,0x30);
@@ -1918,29 +2041,44 @@ if ($PREFIX eq "aesni") {
&movups (&QWP(0,$out),$inout0);
&xorps ($inout2,$rndkey1);
&movups (&QWP(0x10,$out),$inout1);
+ &pxor ($inout1,$inout1);
&xorps ($inout3,$rndkey0);
&movups (&QWP(0x20,$out),$inout2);
+ &pxor ($inout2,$inout2);
&lea ($out,&DWP(0x30,$out));
&movaps ($inout0,$inout3);
+ &pxor ($inout3,$inout3);
&sub ($len,0x40);
+ &jmp (&label("cbc_dec_tail_collected"));
+&set_label("cbc_dec_clear_tail_collected",16);
+ &pxor ($inout1,$inout1);
+ &pxor ($inout2,$inout2);
+ &pxor ($inout3,$inout3);
+ &pxor ($inout4,$inout4);
&set_label("cbc_dec_tail_collected");
&and ($len,15);
&jnz (&label("cbc_dec_tail_partial"));
&movups (&QWP(0,$out),$inout0);
+ &pxor ($rndkey0,$rndkey0);
&jmp (&label("cbc_ret"));
&set_label("cbc_dec_tail_partial",16);
&movaps (&QWP(0,"esp"),$inout0);
+ &pxor ($rndkey0,$rndkey0);
&mov ("ecx",16);
&mov ($inp,"esp");
&sub ("ecx",$len);
&data_word(0xA4F3F689); # rep movsb
+ &movdqa (&QWP(0,"esp"),$inout0);
&set_label("cbc_ret");
&mov ("esp",&DWP(16,"esp")); # pull original %esp
&mov ($key_,&wparam(4));
+ &pxor ($inout0,$inout0);
+ &pxor ($rndkey1,$rndkey1);
&movups (&QWP(0,$key_),$ivec); # output IV
+ &pxor ($ivec,$ivec);
&set_label("cbc_abort");
&function_end("${PREFIX}_cbc_encrypt");
@@ -1957,14 +2095,24 @@ if ($PREFIX eq "aesni") {
# $round rounds
&function_begin_B("_aesni_set_encrypt_key");
+ &push ("ebp");
+ &push ("ebx");
&test ("eax","eax");
&jz (&label("bad_pointer"));
&test ($key,$key);
&jz (&label("bad_pointer"));
+ &call (&label("pic"));
+&set_label("pic");
+ &blindpop("ebx");
+ &lea ("ebx",&DWP(&label("key_const")."-".&label("pic"),"ebx"));
+
+ &picmeup("ebp","OPENSSL_ia32cap_P","ebx",&label("key_const"));
&movups ("xmm0",&QWP(0,"eax")); # pull first 128 bits of *userKey
&xorps ("xmm4","xmm4"); # low dword of xmm4 is assumed 0
+ &mov ("ebp",&DWP(4,"ebp"));
&lea ($key,&DWP(16,$key));
+ &and ("ebp",1<<28|1<<11); # AVX and XOP bits
&cmp ($rounds,256);
&je (&label("14rounds"));
&cmp ($rounds,192);
@@ -1973,6 +2121,9 @@ if ($PREFIX eq "aesni") {
&jne (&label("bad_keybits"));
&set_label("10rounds",16);
+ &cmp ("ebp",1<<28);
+ &je (&label("10rounds_alt"));
+
&mov ($rounds,9);
&$movekey (&QWP(-16,$key),"xmm0"); # round 0
&aeskeygenassist("xmm1","xmm0",0x01); # round 1
@@ -1997,8 +2148,8 @@ if ($PREFIX eq "aesni") {
&call (&label("key_128"));
&$movekey (&QWP(0,$key),"xmm0");
&mov (&DWP(80,$key),$rounds);
- &xor ("eax","eax");
- &ret();
+
+ &jmp (&label("good_key"));
&set_label("key_128",16);
&$movekey (&QWP(0,$key),"xmm0");
@@ -2012,10 +2163,78 @@ if ($PREFIX eq "aesni") {
&xorps ("xmm0","xmm1");
&ret();
+&set_label("10rounds_alt",16);
+ &movdqa ("xmm5",&QWP(0x00,"ebx"));
+ &mov ($rounds,8);
+ &movdqa ("xmm4",&QWP(0x20,"ebx"));
+ &movdqa ("xmm2","xmm0");
+ &movdqu (&QWP(-16,$key),"xmm0");
+
+&set_label("loop_key128");
+ &pshufb ("xmm0","xmm5");
+ &aesenclast ("xmm0","xmm4");
+ &pslld ("xmm4",1);
+ &lea ($key,&DWP(16,$key));
+
+ &movdqa ("xmm3","xmm2");
+ &pslldq ("xmm2",4);
+ &pxor ("xmm3","xmm2");
+ &pslldq ("xmm2",4);
+ &pxor ("xmm3","xmm2");
+ &pslldq ("xmm2",4);
+ &pxor ("xmm2","xmm3");
+
+ &pxor ("xmm0","xmm2");
+ &movdqu (&QWP(-16,$key),"xmm0");
+ &movdqa ("xmm2","xmm0");
+
+ &dec ($rounds);
+ &jnz (&label("loop_key128"));
+
+ &movdqa ("xmm4",&QWP(0x30,"ebx"));
+
+ &pshufb ("xmm0","xmm5");
+ &aesenclast ("xmm0","xmm4");
+ &pslld ("xmm4",1);
+
+ &movdqa ("xmm3","xmm2");
+ &pslldq ("xmm2",4);
+ &pxor ("xmm3","xmm2");
+ &pslldq ("xmm2",4);
+ &pxor ("xmm3","xmm2");
+ &pslldq ("xmm2",4);
+ &pxor ("xmm2","xmm3");
+
+ &pxor ("xmm0","xmm2");
+ &movdqu (&QWP(0,$key),"xmm0");
+
+ &movdqa ("xmm2","xmm0");
+ &pshufb ("xmm0","xmm5");
+ &aesenclast ("xmm0","xmm4");
+
+ &movdqa ("xmm3","xmm2");
+ &pslldq ("xmm2",4);
+ &pxor ("xmm3","xmm2");
+ &pslldq ("xmm2",4);
+ &pxor ("xmm3","xmm2");
+ &pslldq ("xmm2",4);
+ &pxor ("xmm2","xmm3");
+
+ &pxor ("xmm0","xmm2");
+ &movdqu (&QWP(16,$key),"xmm0");
+
+ &mov ($rounds,9);
+ &mov (&DWP(96,$key),$rounds);
+
+ &jmp (&label("good_key"));
+
&set_label("12rounds",16);
&movq ("xmm2",&QWP(16,"eax")); # remaining 1/3 of *userKey
+ &cmp ("ebp",1<<28);
+ &je (&label("12rounds_alt"));
+
&mov ($rounds,11);
- &$movekey (&QWP(-16,$key),"xmm0") # round 0
+ &$movekey (&QWP(-16,$key),"xmm0"); # round 0
&aeskeygenassist("xmm1","xmm2",0x01); # round 1,2
&call (&label("key_192a_cold"));
&aeskeygenassist("xmm1","xmm2",0x02); # round 2,3
@@ -2034,8 +2253,8 @@ if ($PREFIX eq "aesni") {
&call (&label("key_192b"));
&$movekey (&QWP(0,$key),"xmm0");
&mov (&DWP(48,$key),$rounds);
- &xor ("eax","eax");
- &ret();
+
+ &jmp (&label("good_key"));
&set_label("key_192a",16);
&$movekey (&QWP(0,$key),"xmm0");
@@ -2065,10 +2284,52 @@ if ($PREFIX eq "aesni") {
&lea ($key,&DWP(32,$key));
&jmp (&label("key_192b_warm"));
+&set_label("12rounds_alt",16);
+ &movdqa ("xmm5",&QWP(0x10,"ebx"));
+ &movdqa ("xmm4",&QWP(0x20,"ebx"));
+ &mov ($rounds,8);
+ &movdqu (&QWP(-16,$key),"xmm0");
+
+&set_label("loop_key192");
+ &movq (&QWP(0,$key),"xmm2");
+ &movdqa ("xmm1","xmm2");
+ &pshufb ("xmm2","xmm5");
+ &aesenclast ("xmm2","xmm4");
+ &pslld ("xmm4",1);
+ &lea ($key,&DWP(24,$key));
+
+ &movdqa ("xmm3","xmm0");
+ &pslldq ("xmm0",4);
+ &pxor ("xmm3","xmm0");
+ &pslldq ("xmm0",4);
+ &pxor ("xmm3","xmm0");
+ &pslldq ("xmm0",4);
+ &pxor ("xmm0","xmm3");
+
+ &pshufd ("xmm3","xmm0",0xff);
+ &pxor ("xmm3","xmm1");
+ &pslldq ("xmm1",4);
+ &pxor ("xmm3","xmm1");
+
+ &pxor ("xmm0","xmm2");
+ &pxor ("xmm2","xmm3");
+ &movdqu (&QWP(-16,$key),"xmm0");
+
+ &dec ($rounds);
+ &jnz (&label("loop_key192"));
+
+ &mov ($rounds,11);
+ &mov (&DWP(32,$key),$rounds);
+
+ &jmp (&label("good_key"));
+
&set_label("14rounds",16);
&movups ("xmm2",&QWP(16,"eax")); # remaining half of *userKey
- &mov ($rounds,13);
&lea ($key,&DWP(16,$key));
+ &cmp ("ebp",1<<28);
+ &je (&label("14rounds_alt"));
+
+ &mov ($rounds,13);
&$movekey (&QWP(-32,$key),"xmm0"); # round 0
&$movekey (&QWP(-16,$key),"xmm2"); # round 1
&aeskeygenassist("xmm1","xmm2",0x01); # round 2
@@ -2100,7 +2361,8 @@ if ($PREFIX eq "aesni") {
&$movekey (&QWP(0,$key),"xmm0");
&mov (&DWP(16,$key),$rounds);
&xor ("eax","eax");
- &ret();
+
+ &jmp (&label("good_key"));
&set_label("key_256a",16);
&$movekey (&QWP(0,$key),"xmm2");
@@ -2126,11 +2388,77 @@ if ($PREFIX eq "aesni") {
&xorps ("xmm2","xmm1");
&ret();
+&set_label("14rounds_alt",16);
+ &movdqa ("xmm5",&QWP(0x00,"ebx"));
+ &movdqa ("xmm4",&QWP(0x20,"ebx"));
+ &mov ($rounds,7);
+ &movdqu (&QWP(-32,$key),"xmm0");
+ &movdqa ("xmm1","xmm2");
+ &movdqu (&QWP(-16,$key),"xmm2");
+
+&set_label("loop_key256");
+ &pshufb ("xmm2","xmm5");
+ &aesenclast ("xmm2","xmm4");
+
+ &movdqa ("xmm3","xmm0");
+ &pslldq ("xmm0",4);
+ &pxor ("xmm3","xmm0");
+ &pslldq ("xmm0",4);
+ &pxor ("xmm3","xmm0");
+ &pslldq ("xmm0",4);
+ &pxor ("xmm0","xmm3");
+ &pslld ("xmm4",1);
+
+ &pxor ("xmm0","xmm2");
+ &movdqu (&QWP(0,$key),"xmm0");
+
+ &dec ($rounds);
+ &jz (&label("done_key256"));
+
+ &pshufd ("xmm2","xmm0",0xff);
+ &pxor ("xmm3","xmm3");
+ &aesenclast ("xmm2","xmm3");
+
+ &movdqa ("xmm3","xmm1")
+ &pslldq ("xmm1",4);
+ &pxor ("xmm3","xmm1");
+ &pslldq ("xmm1",4);
+ &pxor ("xmm3","xmm1");
+ &pslldq ("xmm1",4);
+ &pxor ("xmm1","xmm3");
+
+ &pxor ("xmm2","xmm1");
+ &movdqu (&QWP(16,$key),"xmm2");
+ &lea ($key,&DWP(32,$key));
+ &movdqa ("xmm1","xmm2");
+ &jmp (&label("loop_key256"));
+
+&set_label("done_key256");
+ &mov ($rounds,13);
+ &mov (&DWP(16,$key),$rounds);
+
+&set_label("good_key");
+ &pxor ("xmm0","xmm0");
+ &pxor ("xmm1","xmm1");
+ &pxor ("xmm2","xmm2");
+ &pxor ("xmm3","xmm3");
+ &pxor ("xmm4","xmm4");
+ &pxor ("xmm5","xmm5");
+ &xor ("eax","eax");
+ &pop ("ebx");
+ &pop ("ebp");
+ &ret ();
+
&set_label("bad_pointer",4);
&mov ("eax",-1);
+ &pop ("ebx");
+ &pop ("ebp");
&ret ();
&set_label("bad_keybits",4);
+ &pxor ("xmm0","xmm0");
&mov ("eax",-2);
+ &pop ("ebx");
+ &pop ("ebp");
&ret ();
&function_end_B("_aesni_set_encrypt_key");
@@ -2152,7 +2480,7 @@ if ($PREFIX eq "aesni") {
&mov ($key,&wparam(2));
&call ("_aesni_set_encrypt_key");
&mov ($key,&wparam(2));
- &shl ($rounds,4) # rounds-1 after _aesni_set_encrypt_key
+ &shl ($rounds,4); # rounds-1 after _aesni_set_encrypt_key
&test ("eax","eax");
&jnz (&label("dec_key_ret"));
&lea ("eax",&DWP(16,$key,$rounds)); # end of key schedule
@@ -2180,10 +2508,18 @@ if ($PREFIX eq "aesni") {
&aesimc ("xmm0","xmm0");
&$movekey (&QWP(0,$key),"xmm0");
+ &pxor ("xmm0","xmm0");
+ &pxor ("xmm1","xmm1");
&xor ("eax","eax"); # return success
&set_label("dec_key_ret");
&ret ();
&function_end_B("${PREFIX}_set_decrypt_key");
+
+&set_label("key_const",64);
+&data_word(0x0c0f0e0d,0x0c0f0e0d,0x0c0f0e0d,0x0c0f0e0d);
+&data_word(0x04070605,0x04070605,0x04070605,0x04070605);
+&data_word(1,1,1,1);
+&data_word(0x1b,0x1b,0x1b,0x1b);
&asciz("AES for Intel AES-NI, CRYPTOGAMS by <appro\@openssl.org>");
&asm_finish();
diff --git a/crypto/openssl/crypto/aes/asm/aesni-x86_64.pl b/crypto/openssl/crypto/aes/asm/aesni-x86_64.pl
index c9270df..25ca574 100755
--- a/crypto/openssl/crypto/aes/asm/aesni-x86_64.pl
+++ b/crypto/openssl/crypto/aes/asm/aesni-x86_64.pl
@@ -1,7 +1,7 @@
#!/usr/bin/env perl
#
# ====================================================================
-# Written by Andy Polyakov <appro@fy.chalmers.se> for the OpenSSL
+# Written by Andy Polyakov <appro@openssl.org> for the OpenSSL
# project. The module is, however, dual licensed under OpenSSL and
# CRYPTOGAMS licenses depending on where you obtain it. For further
# details see http://www.openssl.org/~appro/cryptogams/.
@@ -129,8 +129,8 @@
#
# Further data for other parallelizable modes:
#
-# CBC decrypt 1.16 0.93 0.93
-# CTR 1.14 0.91 n/a
+# CBC decrypt 1.16 0.93 0.74
+# CTR 1.14 0.91 0.74
#
# Well, given 3x column it's probably inappropriate to call the limit
# asymptotic, if it can be surpassed, isn't it? What happens there?
@@ -153,10 +153,25 @@
# April 2011
#
-# Add aesni_xts_[en|de]crypt. Westmere spends 1.33 cycles processing
-# one byte out of 8KB with 128-bit key, Sandy Bridge - 0.97. Just like
+# Add aesni_xts_[en|de]crypt. Westmere spends 1.25 cycles processing
+# one byte out of 8KB with 128-bit key, Sandy Bridge - 0.90. Just like
# in CTR mode AES instruction interleave factor was chosen to be 6x.
+######################################################################
+# Current large-block performance in cycles per byte processed with
+# 128-bit key (less is better).
+#
+# CBC en-/decrypt CTR XTS ECB
+# Westmere 3.77/1.25 1.25 1.25 1.26
+# * Bridge 5.07/0.74 0.75 0.90 0.85
+# Haswell 4.44/0.63 0.63 0.73 0.63
+# Silvermont 5.75/3.54 3.56 4.12 3.87(*)
+# Bulldozer 5.77/0.70 0.72 0.90 0.70
+#
+# (*) Atom Silvermont ECB result is suboptimal because of penalties
+# incurred by operations on %xmm8-15. As ECB is not considered
+# critical, nothing was done to mitigate the problem.
+
$PREFIX="aesni"; # if $PREFIX is set to "AES", the script
# generates drop-in replacement for
# crypto/aes/asm/aes-x86_64.pl:-)
@@ -180,6 +195,7 @@ $movkey = $PREFIX eq "aesni" ? "movups" : "movups";
("%rdi","%rsi","%rdx","%rcx"); # Unix order
$code=".text\n";
+$code.=".extern OPENSSL_ia32cap_P\n";
$rounds="%eax"; # input to and changed by aesni_[en|de]cryptN !!!
# this is natural Unix argument order for public $PREFIX_[ecb|cbc]_encrypt ...
@@ -247,7 +263,10 @@ ${PREFIX}_encrypt:
___
&aesni_generate1("enc",$key,$rounds);
$code.=<<___;
+ pxor $rndkey0,$rndkey0 # clear register bank
+ pxor $rndkey1,$rndkey1
movups $inout0,($out) # output
+ pxor $inout0,$inout0
ret
.size ${PREFIX}_encrypt,.-${PREFIX}_encrypt
@@ -260,7 +279,10 @@ ${PREFIX}_decrypt:
___
&aesni_generate1("dec",$key,$rounds);
$code.=<<___;
+ pxor $rndkey0,$rndkey0 # clear register bank
+ pxor $rndkey1,$rndkey1
movups $inout0,($out) # output
+ pxor $inout0,$inout0
ret
.size ${PREFIX}_decrypt, .-${PREFIX}_decrypt
___
@@ -272,10 +294,49 @@ ___
# every *2nd* cycle. Thus 3x interleave was the one providing optimal
# utilization, i.e. when subroutine's throughput is virtually same as
# of non-interleaved subroutine [for number of input blocks up to 3].
-# This is why it makes no sense to implement 2x subroutine.
-# aes[enc|dec] latency in next processor generation is 8, but the
-# instructions can be scheduled every cycle. Optimal interleave for
-# new processor is therefore 8x...
+# This is why it originally made no sense to implement 2x subroutine.
+# But times change and it became appropriate to spend extra 192 bytes
+# on 2x subroutine on Atom Silvermont account. For processors that
+# can schedule aes[enc|dec] every cycle optimal interleave factor
+# equals to corresponding instructions latency. 8x is optimal for
+# * Bridge and "super-optimal" for other Intel CPUs...
+
+sub aesni_generate2 {
+my $dir=shift;
+# As already mentioned it takes in $key and $rounds, which are *not*
+# preserved. $inout[0-1] is cipher/clear text...
+$code.=<<___;
+.type _aesni_${dir}rypt2,\@abi-omnipotent
+.align 16
+_aesni_${dir}rypt2:
+ $movkey ($key),$rndkey0
+ shl \$4,$rounds
+ $movkey 16($key),$rndkey1
+ xorps $rndkey0,$inout0
+ xorps $rndkey0,$inout1
+ $movkey 32($key),$rndkey0
+ lea 32($key,$rounds),$key
+ neg %rax # $rounds
+ add \$16,%rax
+
+.L${dir}_loop2:
+ aes${dir} $rndkey1,$inout0
+ aes${dir} $rndkey1,$inout1
+ $movkey ($key,%rax),$rndkey1
+ add \$32,%rax
+ aes${dir} $rndkey0,$inout0
+ aes${dir} $rndkey0,$inout1
+ $movkey -16($key,%rax),$rndkey0
+ jnz .L${dir}_loop2
+
+ aes${dir} $rndkey1,$inout0
+ aes${dir} $rndkey1,$inout1
+ aes${dir}last $rndkey0,$inout0
+ aes${dir}last $rndkey0,$inout1
+ ret
+.size _aesni_${dir}rypt2,.-_aesni_${dir}rypt2
+___
+}
sub aesni_generate3 {
my $dir=shift;
# As already mentioned it takes in $key and $rounds, which are *not*
@@ -285,25 +346,26 @@ $code.=<<___;
.align 16
_aesni_${dir}rypt3:
$movkey ($key),$rndkey0
- shr \$1,$rounds
+ shl \$4,$rounds
$movkey 16($key),$rndkey1
- lea 32($key),$key
xorps $rndkey0,$inout0
xorps $rndkey0,$inout1
xorps $rndkey0,$inout2
- $movkey ($key),$rndkey0
+ $movkey 32($key),$rndkey0
+ lea 32($key,$rounds),$key
+ neg %rax # $rounds
+ add \$16,%rax
.L${dir}_loop3:
aes${dir} $rndkey1,$inout0
aes${dir} $rndkey1,$inout1
- dec $rounds
aes${dir} $rndkey1,$inout2
- $movkey 16($key),$rndkey1
+ $movkey ($key,%rax),$rndkey1
+ add \$32,%rax
aes${dir} $rndkey0,$inout0
aes${dir} $rndkey0,$inout1
- lea 32($key),$key
aes${dir} $rndkey0,$inout2
- $movkey ($key),$rndkey0
+ $movkey -16($key,%rax),$rndkey0
jnz .L${dir}_loop3
aes${dir} $rndkey1,$inout0
@@ -329,28 +391,30 @@ $code.=<<___;
.align 16
_aesni_${dir}rypt4:
$movkey ($key),$rndkey0
- shr \$1,$rounds
+ shl \$4,$rounds
$movkey 16($key),$rndkey1
- lea 32($key),$key
xorps $rndkey0,$inout0
xorps $rndkey0,$inout1
xorps $rndkey0,$inout2
xorps $rndkey0,$inout3
- $movkey ($key),$rndkey0
+ $movkey 32($key),$rndkey0
+ lea 32($key,$rounds),$key
+ neg %rax # $rounds
+ .byte 0x0f,0x1f,0x00
+ add \$16,%rax
.L${dir}_loop4:
aes${dir} $rndkey1,$inout0
aes${dir} $rndkey1,$inout1
- dec $rounds
aes${dir} $rndkey1,$inout2
aes${dir} $rndkey1,$inout3
- $movkey 16($key),$rndkey1
+ $movkey ($key,%rax),$rndkey1
+ add \$32,%rax
aes${dir} $rndkey0,$inout0
aes${dir} $rndkey0,$inout1
- lea 32($key),$key
aes${dir} $rndkey0,$inout2
aes${dir} $rndkey0,$inout3
- $movkey ($key),$rndkey0
+ $movkey -16($key,%rax),$rndkey0
jnz .L${dir}_loop4
aes${dir} $rndkey1,$inout0
@@ -374,43 +438,40 @@ $code.=<<___;
.align 16
_aesni_${dir}rypt6:
$movkey ($key),$rndkey0
- shr \$1,$rounds
+ shl \$4,$rounds
$movkey 16($key),$rndkey1
- lea 32($key),$key
xorps $rndkey0,$inout0
pxor $rndkey0,$inout1
- aes${dir} $rndkey1,$inout0
pxor $rndkey0,$inout2
+ aes${dir} $rndkey1,$inout0
+ lea 32($key,$rounds),$key
+ neg %rax # $rounds
aes${dir} $rndkey1,$inout1
pxor $rndkey0,$inout3
- aes${dir} $rndkey1,$inout2
pxor $rndkey0,$inout4
- aes${dir} $rndkey1,$inout3
+ aes${dir} $rndkey1,$inout2
pxor $rndkey0,$inout5
- dec $rounds
- aes${dir} $rndkey1,$inout4
- $movkey ($key),$rndkey0
- aes${dir} $rndkey1,$inout5
+ $movkey ($key,%rax),$rndkey0
+ add \$16,%rax
jmp .L${dir}_loop6_enter
.align 16
.L${dir}_loop6:
aes${dir} $rndkey1,$inout0
aes${dir} $rndkey1,$inout1
- dec $rounds
aes${dir} $rndkey1,$inout2
+.L${dir}_loop6_enter:
aes${dir} $rndkey1,$inout3
aes${dir} $rndkey1,$inout4
aes${dir} $rndkey1,$inout5
-.L${dir}_loop6_enter: # happens to be 16-byte aligned
- $movkey 16($key),$rndkey1
+ $movkey ($key,%rax),$rndkey1
+ add \$32,%rax
aes${dir} $rndkey0,$inout0
aes${dir} $rndkey0,$inout1
- lea 32($key),$key
aes${dir} $rndkey0,$inout2
aes${dir} $rndkey0,$inout3
aes${dir} $rndkey0,$inout4
aes${dir} $rndkey0,$inout5
- $movkey ($key),$rndkey0
+ $movkey -16($key,%rax),$rndkey0
jnz .L${dir}_loop6
aes${dir} $rndkey1,$inout0
@@ -438,52 +499,46 @@ $code.=<<___;
.align 16
_aesni_${dir}rypt8:
$movkey ($key),$rndkey0
- shr \$1,$rounds
+ shl \$4,$rounds
$movkey 16($key),$rndkey1
- lea 32($key),$key
xorps $rndkey0,$inout0
xorps $rndkey0,$inout1
- aes${dir} $rndkey1,$inout0
pxor $rndkey0,$inout2
- aes${dir} $rndkey1,$inout1
pxor $rndkey0,$inout3
- aes${dir} $rndkey1,$inout2
pxor $rndkey0,$inout4
- aes${dir} $rndkey1,$inout3
+ lea 32($key,$rounds),$key
+ neg %rax # $rounds
+ aes${dir} $rndkey1,$inout0
pxor $rndkey0,$inout5
- dec $rounds
- aes${dir} $rndkey1,$inout4
pxor $rndkey0,$inout6
- aes${dir} $rndkey1,$inout5
+ aes${dir} $rndkey1,$inout1
pxor $rndkey0,$inout7
- $movkey ($key),$rndkey0
- aes${dir} $rndkey1,$inout6
- aes${dir} $rndkey1,$inout7
- $movkey 16($key),$rndkey1
- jmp .L${dir}_loop8_enter
+ $movkey ($key,%rax),$rndkey0
+ add \$16,%rax
+ jmp .L${dir}_loop8_inner
.align 16
.L${dir}_loop8:
aes${dir} $rndkey1,$inout0
aes${dir} $rndkey1,$inout1
- dec $rounds
+.L${dir}_loop8_inner:
aes${dir} $rndkey1,$inout2
aes${dir} $rndkey1,$inout3
aes${dir} $rndkey1,$inout4
aes${dir} $rndkey1,$inout5
aes${dir} $rndkey1,$inout6
aes${dir} $rndkey1,$inout7
- $movkey 16($key),$rndkey1
-.L${dir}_loop8_enter: # happens to be 16-byte aligned
+.L${dir}_loop8_enter:
+ $movkey ($key,%rax),$rndkey1
+ add \$32,%rax
aes${dir} $rndkey0,$inout0
aes${dir} $rndkey0,$inout1
- lea 32($key),$key
aes${dir} $rndkey0,$inout2
aes${dir} $rndkey0,$inout3
aes${dir} $rndkey0,$inout4
aes${dir} $rndkey0,$inout5
aes${dir} $rndkey0,$inout6
aes${dir} $rndkey0,$inout7
- $movkey ($key),$rndkey0
+ $movkey -16($key,%rax),$rndkey0
jnz .L${dir}_loop8
aes${dir} $rndkey1,$inout0
@@ -506,6 +561,8 @@ _aesni_${dir}rypt8:
.size _aesni_${dir}rypt8,.-_aesni_${dir}rypt8
___
}
+&aesni_generate2("enc") if ($PREFIX eq "aesni");
+&aesni_generate2("dec");
&aesni_generate3("enc") if ($PREFIX eq "aesni");
&aesni_generate3("dec");
&aesni_generate4("enc") if ($PREFIX eq "aesni");
@@ -528,15 +585,15 @@ aesni_ecb_encrypt:
___
$code.=<<___ if ($win64);
lea -0x58(%rsp),%rsp
- movaps %xmm6,(%rsp)
+ movaps %xmm6,(%rsp) # offload $inout4..7
movaps %xmm7,0x10(%rsp)
movaps %xmm8,0x20(%rsp)
movaps %xmm9,0x30(%rsp)
.Lecb_enc_body:
___
$code.=<<___;
- and \$-16,$len
- jz .Lecb_ret
+ and \$-16,$len # if ($len<16)
+ jz .Lecb_ret # return
mov 240($key),$rounds # key->rounds
$movkey ($key),$rndkey0
@@ -545,10 +602,10 @@ $code.=<<___;
test %r8d,%r8d # 5th argument
jz .Lecb_decrypt
#--------------------------- ECB ENCRYPT ------------------------------#
- cmp \$0x80,$len
- jb .Lecb_enc_tail
+ cmp \$0x80,$len # if ($len<8*16)
+ jb .Lecb_enc_tail # short input
- movdqu ($inp),$inout0
+ movdqu ($inp),$inout0 # load 8 input blocks
movdqu 0x10($inp),$inout1
movdqu 0x20($inp),$inout2
movdqu 0x30($inp),$inout3
@@ -556,14 +613,14 @@ $code.=<<___;
movdqu 0x50($inp),$inout5
movdqu 0x60($inp),$inout6
movdqu 0x70($inp),$inout7
- lea 0x80($inp),$inp
- sub \$0x80,$len
+ lea 0x80($inp),$inp # $inp+=8*16
+ sub \$0x80,$len # $len-=8*16 (can be zero)
jmp .Lecb_enc_loop8_enter
.align 16
.Lecb_enc_loop8:
- movups $inout0,($out)
+ movups $inout0,($out) # store 8 output blocks
mov $key_,$key # restore $key
- movdqu ($inp),$inout0
+ movdqu ($inp),$inout0 # load 8 input blocks
mov $rnds_,$rounds # restore $rounds
movups $inout1,0x10($out)
movdqu 0x10($inp),$inout1
@@ -578,17 +635,17 @@ $code.=<<___;
movups $inout6,0x60($out)
movdqu 0x60($inp),$inout6
movups $inout7,0x70($out)
- lea 0x80($out),$out
+ lea 0x80($out),$out # $out+=8*16
movdqu 0x70($inp),$inout7
- lea 0x80($inp),$inp
+ lea 0x80($inp),$inp # $inp+=8*16
.Lecb_enc_loop8_enter:
call _aesni_encrypt8
sub \$0x80,$len
- jnc .Lecb_enc_loop8
+ jnc .Lecb_enc_loop8 # loop if $len-=8*16 didn't borrow
- movups $inout0,($out)
+ movups $inout0,($out) # store 8 output blocks
mov $key_,$key # restore $key
movups $inout1,0x10($out)
mov $rnds_,$rounds # restore $rounds
@@ -598,11 +655,11 @@ $code.=<<___;
movups $inout5,0x50($out)
movups $inout6,0x60($out)
movups $inout7,0x70($out)
- lea 0x80($out),$out
- add \$0x80,$len
- jz .Lecb_ret
+ lea 0x80($out),$out # $out+=8*16
+ add \$0x80,$len # restore real remaining $len
+ jz .Lecb_ret # done if ($len==0)
-.Lecb_enc_tail:
+.Lecb_enc_tail: # $len is less than 8*16
movups ($inp),$inout0
cmp \$0x20,$len
jb .Lecb_enc_one
@@ -619,8 +676,9 @@ $code.=<<___;
movups 0x50($inp),$inout5
je .Lecb_enc_six
movdqu 0x60($inp),$inout6
+ xorps $inout7,$inout7
call _aesni_encrypt8
- movups $inout0,($out)
+ movups $inout0,($out) # store 7 output blocks
movups $inout1,0x10($out)
movups $inout2,0x20($out)
movups $inout3,0x30($out)
@@ -633,26 +691,25 @@ $code.=<<___;
___
&aesni_generate1("enc",$key,$rounds);
$code.=<<___;
- movups $inout0,($out)
+ movups $inout0,($out) # store one output block
jmp .Lecb_ret
.align 16
.Lecb_enc_two:
- xorps $inout2,$inout2
- call _aesni_encrypt3
- movups $inout0,($out)
+ call _aesni_encrypt2
+ movups $inout0,($out) # store 2 output blocks
movups $inout1,0x10($out)
jmp .Lecb_ret
.align 16
.Lecb_enc_three:
call _aesni_encrypt3
- movups $inout0,($out)
+ movups $inout0,($out) # store 3 output blocks
movups $inout1,0x10($out)
movups $inout2,0x20($out)
jmp .Lecb_ret
.align 16
.Lecb_enc_four:
call _aesni_encrypt4
- movups $inout0,($out)
+ movups $inout0,($out) # store 4 output blocks
movups $inout1,0x10($out)
movups $inout2,0x20($out)
movups $inout3,0x30($out)
@@ -661,7 +718,7 @@ $code.=<<___;
.Lecb_enc_five:
xorps $inout5,$inout5
call _aesni_encrypt6
- movups $inout0,($out)
+ movups $inout0,($out) # store 5 output blocks
movups $inout1,0x10($out)
movups $inout2,0x20($out)
movups $inout3,0x30($out)
@@ -670,7 +727,7 @@ $code.=<<___;
.align 16
.Lecb_enc_six:
call _aesni_encrypt6
- movups $inout0,($out)
+ movups $inout0,($out) # store 6 output blocks
movups $inout1,0x10($out)
movups $inout2,0x20($out)
movups $inout3,0x30($out)
@@ -680,10 +737,10 @@ $code.=<<___;
#--------------------------- ECB DECRYPT ------------------------------#
.align 16
.Lecb_decrypt:
- cmp \$0x80,$len
- jb .Lecb_dec_tail
+ cmp \$0x80,$len # if ($len<8*16)
+ jb .Lecb_dec_tail # short input
- movdqu ($inp),$inout0
+ movdqu ($inp),$inout0 # load 8 input blocks
movdqu 0x10($inp),$inout1
movdqu 0x20($inp),$inout2
movdqu 0x30($inp),$inout3
@@ -691,14 +748,14 @@ $code.=<<___;
movdqu 0x50($inp),$inout5
movdqu 0x60($inp),$inout6
movdqu 0x70($inp),$inout7
- lea 0x80($inp),$inp
- sub \$0x80,$len
+ lea 0x80($inp),$inp # $inp+=8*16
+ sub \$0x80,$len # $len-=8*16 (can be zero)
jmp .Lecb_dec_loop8_enter
.align 16
.Lecb_dec_loop8:
- movups $inout0,($out)
+ movups $inout0,($out) # store 8 output blocks
mov $key_,$key # restore $key
- movdqu ($inp),$inout0
+ movdqu ($inp),$inout0 # load 8 input blocks
mov $rnds_,$rounds # restore $rounds
movups $inout1,0x10($out)
movdqu 0x10($inp),$inout1
@@ -713,30 +770,38 @@ $code.=<<___;
movups $inout6,0x60($out)
movdqu 0x60($inp),$inout6
movups $inout7,0x70($out)
- lea 0x80($out),$out
+ lea 0x80($out),$out # $out+=8*16
movdqu 0x70($inp),$inout7
- lea 0x80($inp),$inp
+ lea 0x80($inp),$inp # $inp+=8*16
.Lecb_dec_loop8_enter:
call _aesni_decrypt8
$movkey ($key_),$rndkey0
sub \$0x80,$len
- jnc .Lecb_dec_loop8
+ jnc .Lecb_dec_loop8 # loop if $len-=8*16 didn't borrow
- movups $inout0,($out)
+ movups $inout0,($out) # store 8 output blocks
+ pxor $inout0,$inout0 # clear register bank
mov $key_,$key # restore $key
movups $inout1,0x10($out)
+ pxor $inout1,$inout1
mov $rnds_,$rounds # restore $rounds
movups $inout2,0x20($out)
+ pxor $inout2,$inout2
movups $inout3,0x30($out)
+ pxor $inout3,$inout3
movups $inout4,0x40($out)
+ pxor $inout4,$inout4
movups $inout5,0x50($out)
+ pxor $inout5,$inout5
movups $inout6,0x60($out)
+ pxor $inout6,$inout6
movups $inout7,0x70($out)
- lea 0x80($out),$out
- add \$0x80,$len
- jz .Lecb_ret
+ pxor $inout7,$inout7
+ lea 0x80($out),$out # $out+=8*16
+ add \$0x80,$len # restore real remaining $len
+ jz .Lecb_ret # done if ($len==0)
.Lecb_dec_tail:
movups ($inp),$inout0
@@ -756,71 +821,107 @@ $code.=<<___;
je .Lecb_dec_six
movups 0x60($inp),$inout6
$movkey ($key),$rndkey0
+ xorps $inout7,$inout7
call _aesni_decrypt8
- movups $inout0,($out)
+ movups $inout0,($out) # store 7 output blocks
+ pxor $inout0,$inout0 # clear register bank
movups $inout1,0x10($out)
+ pxor $inout1,$inout1
movups $inout2,0x20($out)
+ pxor $inout2,$inout2
movups $inout3,0x30($out)
+ pxor $inout3,$inout3
movups $inout4,0x40($out)
+ pxor $inout4,$inout4
movups $inout5,0x50($out)
+ pxor $inout5,$inout5
movups $inout6,0x60($out)
+ pxor $inout6,$inout6
+ pxor $inout7,$inout7
jmp .Lecb_ret
.align 16
.Lecb_dec_one:
___
&aesni_generate1("dec",$key,$rounds);
$code.=<<___;
- movups $inout0,($out)
+ movups $inout0,($out) # store one output block
+ pxor $inout0,$inout0 # clear register bank
jmp .Lecb_ret
.align 16
.Lecb_dec_two:
- xorps $inout2,$inout2
- call _aesni_decrypt3
- movups $inout0,($out)
+ call _aesni_decrypt2
+ movups $inout0,($out) # store 2 output blocks
+ pxor $inout0,$inout0 # clear register bank
movups $inout1,0x10($out)
+ pxor $inout1,$inout1
jmp .Lecb_ret
.align 16
.Lecb_dec_three:
call _aesni_decrypt3
- movups $inout0,($out)
+ movups $inout0,($out) # store 3 output blocks
+ pxor $inout0,$inout0 # clear register bank
movups $inout1,0x10($out)
+ pxor $inout1,$inout1
movups $inout2,0x20($out)
+ pxor $inout2,$inout2
jmp .Lecb_ret
.align 16
.Lecb_dec_four:
call _aesni_decrypt4
- movups $inout0,($out)
+ movups $inout0,($out) # store 4 output blocks
+ pxor $inout0,$inout0 # clear register bank
movups $inout1,0x10($out)
+ pxor $inout1,$inout1
movups $inout2,0x20($out)
+ pxor $inout2,$inout2
movups $inout3,0x30($out)
+ pxor $inout3,$inout3
jmp .Lecb_ret
.align 16
.Lecb_dec_five:
xorps $inout5,$inout5
call _aesni_decrypt6
- movups $inout0,($out)
+ movups $inout0,($out) # store 5 output blocks
+ pxor $inout0,$inout0 # clear register bank
movups $inout1,0x10($out)
+ pxor $inout1,$inout1
movups $inout2,0x20($out)
+ pxor $inout2,$inout2
movups $inout3,0x30($out)
+ pxor $inout3,$inout3
movups $inout4,0x40($out)
+ pxor $inout4,$inout4
+ pxor $inout5,$inout5
jmp .Lecb_ret
.align 16
.Lecb_dec_six:
call _aesni_decrypt6
- movups $inout0,($out)
+ movups $inout0,($out) # store 6 output blocks
+ pxor $inout0,$inout0 # clear register bank
movups $inout1,0x10($out)
+ pxor $inout1,$inout1
movups $inout2,0x20($out)
+ pxor $inout2,$inout2
movups $inout3,0x30($out)
+ pxor $inout3,$inout3
movups $inout4,0x40($out)
+ pxor $inout4,$inout4
movups $inout5,0x50($out)
+ pxor $inout5,$inout5
.Lecb_ret:
+ xorps $rndkey0,$rndkey0 # %xmm0
+ pxor $rndkey1,$rndkey1
___
$code.=<<___ if ($win64);
movaps (%rsp),%xmm6
+ movaps %xmm0,(%rsp) # clear stack
movaps 0x10(%rsp),%xmm7
+ movaps %xmm0,0x10(%rsp)
movaps 0x20(%rsp),%xmm8
+ movaps %xmm0,0x20(%rsp)
movaps 0x30(%rsp),%xmm9
+ movaps %xmm0,0x30(%rsp)
lea 0x58(%rsp),%rsp
.Lecb_enc_ret:
___
@@ -842,7 +943,8 @@ ___
{
my $cmac="%r9"; # 6th argument
-my $increment="%xmm6";
+my $increment="%xmm9";
+my $iv="%xmm6";
my $bswap_mask="%xmm7";
$code.=<<___;
@@ -853,10 +955,10 @@ aesni_ccm64_encrypt_blocks:
___
$code.=<<___ if ($win64);
lea -0x58(%rsp),%rsp
- movaps %xmm6,(%rsp)
- movaps %xmm7,0x10(%rsp)
- movaps %xmm8,0x20(%rsp)
- movaps %xmm9,0x30(%rsp)
+ movaps %xmm6,(%rsp) # $iv
+ movaps %xmm7,0x10(%rsp) # $bswap_mask
+ movaps %xmm8,0x20(%rsp) # $in0
+ movaps %xmm9,0x30(%rsp) # $increment
.Lccm64_enc_body:
___
$code.=<<___;
@@ -865,58 +967,68 @@ $code.=<<___;
movdqa .Lincrement64(%rip),$increment
movdqa .Lbswap_mask(%rip),$bswap_mask
- shr \$1,$rounds
+ shl \$4,$rounds
+ mov \$16,$rnds_
lea 0($key),$key_
movdqu ($cmac),$inout1
movdqa $iv,$inout0
- mov $rounds,$rnds_
+ lea 32($key,$rounds),$key # end of key schedule
pshufb $bswap_mask,$iv
+ sub %rax,%r10 # twisted $rounds
jmp .Lccm64_enc_outer
.align 16
.Lccm64_enc_outer:
$movkey ($key_),$rndkey0
- mov $rnds_,$rounds
+ mov %r10,%rax
movups ($inp),$in0 # load inp
xorps $rndkey0,$inout0 # counter
$movkey 16($key_),$rndkey1
xorps $in0,$rndkey0
- lea 32($key_),$key
xorps $rndkey0,$inout1 # cmac^=inp
- $movkey ($key),$rndkey0
+ $movkey 32($key_),$rndkey0
.Lccm64_enc2_loop:
aesenc $rndkey1,$inout0
- dec $rounds
aesenc $rndkey1,$inout1
- $movkey 16($key),$rndkey1
+ $movkey ($key,%rax),$rndkey1
+ add \$32,%rax
aesenc $rndkey0,$inout0
- lea 32($key),$key
aesenc $rndkey0,$inout1
- $movkey 0($key),$rndkey0
+ $movkey -16($key,%rax),$rndkey0
jnz .Lccm64_enc2_loop
aesenc $rndkey1,$inout0
aesenc $rndkey1,$inout1
paddq $increment,$iv
+ dec $len # $len-- ($len is in blocks)
aesenclast $rndkey0,$inout0
aesenclast $rndkey0,$inout1
- dec $len
lea 16($inp),$inp
xorps $inout0,$in0 # inp ^= E(iv)
movdqa $iv,$inout0
movups $in0,($out) # save output
- lea 16($out),$out
pshufb $bswap_mask,$inout0
- jnz .Lccm64_enc_outer
+ lea 16($out),$out # $out+=16
+ jnz .Lccm64_enc_outer # loop if ($len!=0)
- movups $inout1,($cmac)
+ pxor $rndkey0,$rndkey0 # clear register bank
+ pxor $rndkey1,$rndkey1
+ pxor $inout0,$inout0
+ movups $inout1,($cmac) # store resulting mac
+ pxor $inout1,$inout1
+ pxor $in0,$in0
+ pxor $iv,$iv
___
$code.=<<___ if ($win64);
movaps (%rsp),%xmm6
+ movaps %xmm0,(%rsp) # clear stack
movaps 0x10(%rsp),%xmm7
+ movaps %xmm0,0x10(%rsp)
movaps 0x20(%rsp),%xmm8
+ movaps %xmm0,0x20(%rsp)
movaps 0x30(%rsp),%xmm9
+ movaps %xmm0,0x30(%rsp)
lea 0x58(%rsp),%rsp
.Lccm64_enc_ret:
___
@@ -933,10 +1045,10 @@ aesni_ccm64_decrypt_blocks:
___
$code.=<<___ if ($win64);
lea -0x58(%rsp),%rsp
- movaps %xmm6,(%rsp)
- movaps %xmm7,0x10(%rsp)
- movaps %xmm8,0x20(%rsp)
- movaps %xmm9,0x30(%rsp)
+ movaps %xmm6,(%rsp) # $iv
+ movaps %xmm7,0x10(%rsp) # $bswap_mask
+ movaps %xmm8,0x20(%rsp) # $in8
+ movaps %xmm9,0x30(%rsp) # $increment
.Lccm64_dec_body:
___
$code.=<<___;
@@ -953,63 +1065,77 @@ $code.=<<___;
___
&aesni_generate1("enc",$key,$rounds);
$code.=<<___;
+ shl \$4,$rnds_
+ mov \$16,$rounds
movups ($inp),$in0 # load inp
paddq $increment,$iv
- lea 16($inp),$inp
+ lea 16($inp),$inp # $inp+=16
+ sub %r10,%rax # twisted $rounds
+ lea 32($key_,$rnds_),$key # end of key schedule
+ mov %rax,%r10
jmp .Lccm64_dec_outer
.align 16
.Lccm64_dec_outer:
xorps $inout0,$in0 # inp ^= E(iv)
movdqa $iv,$inout0
- mov $rnds_,$rounds
movups $in0,($out) # save output
- lea 16($out),$out
+ lea 16($out),$out # $out+=16
pshufb $bswap_mask,$inout0
- sub \$1,$len
- jz .Lccm64_dec_break
+ sub \$1,$len # $len-- ($len is in blocks)
+ jz .Lccm64_dec_break # if ($len==0) break
$movkey ($key_),$rndkey0
- shr \$1,$rounds
+ mov %r10,%rax
$movkey 16($key_),$rndkey1
xorps $rndkey0,$in0
- lea 32($key_),$key
xorps $rndkey0,$inout0
xorps $in0,$inout1 # cmac^=out
- $movkey ($key),$rndkey0
-
+ $movkey 32($key_),$rndkey0
+ jmp .Lccm64_dec2_loop
+.align 16
.Lccm64_dec2_loop:
aesenc $rndkey1,$inout0
- dec $rounds
aesenc $rndkey1,$inout1
- $movkey 16($key),$rndkey1
+ $movkey ($key,%rax),$rndkey1
+ add \$32,%rax
aesenc $rndkey0,$inout0
- lea 32($key),$key
aesenc $rndkey0,$inout1
- $movkey 0($key),$rndkey0
+ $movkey -16($key,%rax),$rndkey0
jnz .Lccm64_dec2_loop
- movups ($inp),$in0 # load inp
+ movups ($inp),$in0 # load input
paddq $increment,$iv
aesenc $rndkey1,$inout0
aesenc $rndkey1,$inout1
- lea 16($inp),$inp
aesenclast $rndkey0,$inout0
aesenclast $rndkey0,$inout1
+ lea 16($inp),$inp # $inp+=16
jmp .Lccm64_dec_outer
.align 16
.Lccm64_dec_break:
#xorps $in0,$inout1 # cmac^=out
+ mov 240($key_),$rounds
___
&aesni_generate1("enc",$key_,$rounds,$inout1,$in0);
$code.=<<___;
- movups $inout1,($cmac)
+ pxor $rndkey0,$rndkey0 # clear register bank
+ pxor $rndkey1,$rndkey1
+ pxor $inout0,$inout0
+ movups $inout1,($cmac) # store resulting mac
+ pxor $inout1,$inout1
+ pxor $in0,$in0
+ pxor $iv,$iv
___
$code.=<<___ if ($win64);
movaps (%rsp),%xmm6
+ movaps %xmm0,(%rsp) # clear stack
movaps 0x10(%rsp),%xmm7
+ movaps %xmm0,0x10(%rsp)
movaps 0x20(%rsp),%xmm8
+ movaps %xmm0,0x20(%rsp)
movaps 0x30(%rsp),%xmm9
+ movaps %xmm0,0x30(%rsp)
lea 0x58(%rsp),%rsp
.Lccm64_dec_ret:
___
@@ -1024,285 +1150,567 @@ ___
# const char *ivec);
#
# Handles only complete blocks, operates on 32-bit counter and
-# does not update *ivec! (see engine/eng_aesni.c for details)
+# does not update *ivec! (see crypto/modes/ctr128.c for details)
#
+# Overhaul based on suggestions from Shay Gueron and Vlad Krasnov,
+# http://rt.openssl.org/Ticket/Display.html?id=3021&user=guest&pass=guest.
+# Keywords are full unroll and modulo-schedule counter calculations
+# with zero-round key xor.
{
-my $reserved = $win64?0:-0x28;
-my ($in0,$in1,$in2,$in3)=map("%xmm$_",(8..11));
-my ($iv0,$iv1,$ivec)=("%xmm12","%xmm13","%xmm14");
-my $bswap_mask="%xmm15";
+my ($in0,$in1,$in2,$in3,$in4,$in5)=map("%xmm$_",(10..15));
+my ($key0,$ctr)=("${key_}d","${ivp}d");
+my $frame_size = 0x80 + ($win64?160:0);
$code.=<<___;
.globl aesni_ctr32_encrypt_blocks
.type aesni_ctr32_encrypt_blocks,\@function,5
.align 16
aesni_ctr32_encrypt_blocks:
+ cmp \$1,$len
+ jne .Lctr32_bulk
+
+ # handle single block without allocating stack frame,
+ # useful when handling edges
+ movups ($ivp),$inout0
+ movups ($inp),$inout1
+ mov 240($key),%edx # key->rounds
+___
+ &aesni_generate1("enc",$key,"%edx");
+$code.=<<___;
+ pxor $rndkey0,$rndkey0 # clear register bank
+ pxor $rndkey1,$rndkey1
+ xorps $inout1,$inout0
+ pxor $inout1,$inout1
+ movups $inout0,($out)
+ xorps $inout0,$inout0
+ jmp .Lctr32_epilogue
+
+.align 16
+.Lctr32_bulk:
+ lea (%rsp),%rax
+ push %rbp
+ sub \$$frame_size,%rsp
+ and \$-16,%rsp # Linux kernel stack can be incorrectly seeded
___
$code.=<<___ if ($win64);
- lea -0xc8(%rsp),%rsp
- movaps %xmm6,0x20(%rsp)
- movaps %xmm7,0x30(%rsp)
- movaps %xmm8,0x40(%rsp)
- movaps %xmm9,0x50(%rsp)
- movaps %xmm10,0x60(%rsp)
- movaps %xmm11,0x70(%rsp)
- movaps %xmm12,0x80(%rsp)
- movaps %xmm13,0x90(%rsp)
- movaps %xmm14,0xa0(%rsp)
- movaps %xmm15,0xb0(%rsp)
+ movaps %xmm6,-0xa8(%rax) # offload everything
+ movaps %xmm7,-0x98(%rax)
+ movaps %xmm8,-0x88(%rax)
+ movaps %xmm9,-0x78(%rax)
+ movaps %xmm10,-0x68(%rax)
+ movaps %xmm11,-0x58(%rax)
+ movaps %xmm12,-0x48(%rax)
+ movaps %xmm13,-0x38(%rax)
+ movaps %xmm14,-0x28(%rax)
+ movaps %xmm15,-0x18(%rax)
.Lctr32_body:
___
$code.=<<___;
- cmp \$1,$len
- je .Lctr32_one_shortcut
-
- movdqu ($ivp),$ivec
- movdqa .Lbswap_mask(%rip),$bswap_mask
- xor $rounds,$rounds
- pextrd \$3,$ivec,$rnds_ # pull 32-bit counter
- pinsrd \$3,$rounds,$ivec # wipe 32-bit counter
-
+ lea -8(%rax),%rbp
+
+ # 8 16-byte words on top of stack are counter values
+ # xor-ed with zero-round key
+
+ movdqu ($ivp),$inout0
+ movdqu ($key),$rndkey0
+ mov 12($ivp),$ctr # counter LSB
+ pxor $rndkey0,$inout0
+ mov 12($key),$key0 # 0-round key LSB
+ movdqa $inout0,0x00(%rsp) # populate counter block
+ bswap $ctr
+ movdqa $inout0,$inout1
+ movdqa $inout0,$inout2
+ movdqa $inout0,$inout3
+ movdqa $inout0,0x40(%rsp)
+ movdqa $inout0,0x50(%rsp)
+ movdqa $inout0,0x60(%rsp)
+ mov %rdx,%r10 # about to borrow %rdx
+ movdqa $inout0,0x70(%rsp)
+
+ lea 1($ctr),%rax
+ lea 2($ctr),%rdx
+ bswap %eax
+ bswap %edx
+ xor $key0,%eax
+ xor $key0,%edx
+ pinsrd \$3,%eax,$inout1
+ lea 3($ctr),%rax
+ movdqa $inout1,0x10(%rsp)
+ pinsrd \$3,%edx,$inout2
+ bswap %eax
+ mov %r10,%rdx # restore %rdx
+ lea 4($ctr),%r10
+ movdqa $inout2,0x20(%rsp)
+ xor $key0,%eax
+ bswap %r10d
+ pinsrd \$3,%eax,$inout3
+ xor $key0,%r10d
+ movdqa $inout3,0x30(%rsp)
+ lea 5($ctr),%r9
+ mov %r10d,0x40+12(%rsp)
+ bswap %r9d
+ lea 6($ctr),%r10
mov 240($key),$rounds # key->rounds
- bswap $rnds_
- pxor $iv0,$iv0 # vector of 3 32-bit counters
- pxor $iv1,$iv1 # vector of 3 32-bit counters
- pinsrd \$0,$rnds_,$iv0
- lea 3($rnds_),$key_
- pinsrd \$0,$key_,$iv1
- inc $rnds_
- pinsrd \$1,$rnds_,$iv0
- inc $key_
- pinsrd \$1,$key_,$iv1
- inc $rnds_
- pinsrd \$2,$rnds_,$iv0
- inc $key_
- pinsrd \$2,$key_,$iv1
- movdqa $iv0,$reserved(%rsp)
- pshufb $bswap_mask,$iv0
- movdqa $iv1,`$reserved+0x10`(%rsp)
- pshufb $bswap_mask,$iv1
-
- pshufd \$`3<<6`,$iv0,$inout0 # place counter to upper dword
- pshufd \$`2<<6`,$iv0,$inout1
- pshufd \$`1<<6`,$iv0,$inout2
- cmp \$6,$len
- jb .Lctr32_tail
- shr \$1,$rounds
- mov $key,$key_ # backup $key
- mov $rounds,$rnds_ # backup $rounds
- sub \$6,$len
+ xor $key0,%r9d
+ bswap %r10d
+ mov %r9d,0x50+12(%rsp)
+ xor $key0,%r10d
+ lea 7($ctr),%r9
+ mov %r10d,0x60+12(%rsp)
+ bswap %r9d
+ mov OPENSSL_ia32cap_P+4(%rip),%r10d
+ xor $key0,%r9d
+ and \$`1<<26|1<<22`,%r10d # isolate XSAVE+MOVBE
+ mov %r9d,0x70+12(%rsp)
+
+ $movkey 0x10($key),$rndkey1
+
+ movdqa 0x40(%rsp),$inout4
+ movdqa 0x50(%rsp),$inout5
+
+ cmp \$8,$len # $len is in blocks
+ jb .Lctr32_tail # short input if ($len<8)
+
+ sub \$6,$len # $len is biased by -6
+ cmp \$`1<<22`,%r10d # check for MOVBE without XSAVE
+ je .Lctr32_6x # [which denotes Atom Silvermont]
+
+ lea 0x80($key),$key # size optimization
+ sub \$2,$len # $len is biased by -8
+ jmp .Lctr32_loop8
+
+.align 16
+.Lctr32_6x:
+ shl \$4,$rounds
+ mov \$48,$rnds_
+ bswap $key0
+ lea 32($key,$rounds),$key # end of key schedule
+ sub %rax,%r10 # twisted $rounds
jmp .Lctr32_loop6
.align 16
.Lctr32_loop6:
- pshufd \$`3<<6`,$iv1,$inout3
- por $ivec,$inout0 # merge counter-less ivec
- $movkey ($key_),$rndkey0
- pshufd \$`2<<6`,$iv1,$inout4
- por $ivec,$inout1
- $movkey 16($key_),$rndkey1
- pshufd \$`1<<6`,$iv1,$inout5
- por $ivec,$inout2
- por $ivec,$inout3
- xorps $rndkey0,$inout0
- por $ivec,$inout4
- por $ivec,$inout5
-
- # inline _aesni_encrypt6 and interleave last rounds
- # with own code...
+ add \$6,$ctr # next counter value
+ $movkey -48($key,$rnds_),$rndkey0
+ aesenc $rndkey1,$inout0
+ mov $ctr,%eax
+ xor $key0,%eax
+ aesenc $rndkey1,$inout1
+ movbe %eax,`0x00+12`(%rsp) # store next counter value
+ lea 1($ctr),%eax
+ aesenc $rndkey1,$inout2
+ xor $key0,%eax
+ movbe %eax,`0x10+12`(%rsp)
+ aesenc $rndkey1,$inout3
+ lea 2($ctr),%eax
+ xor $key0,%eax
+ aesenc $rndkey1,$inout4
+ movbe %eax,`0x20+12`(%rsp)
+ lea 3($ctr),%eax
+ aesenc $rndkey1,$inout5
+ $movkey -32($key,$rnds_),$rndkey1
+ xor $key0,%eax
- pxor $rndkey0,$inout1
+ aesenc $rndkey0,$inout0
+ movbe %eax,`0x30+12`(%rsp)
+ lea 4($ctr),%eax
+ aesenc $rndkey0,$inout1
+ xor $key0,%eax
+ movbe %eax,`0x40+12`(%rsp)
+ aesenc $rndkey0,$inout2
+ lea 5($ctr),%eax
+ xor $key0,%eax
+ aesenc $rndkey0,$inout3
+ movbe %eax,`0x50+12`(%rsp)
+ mov %r10,%rax # mov $rnds_,$rounds
+ aesenc $rndkey0,$inout4
+ aesenc $rndkey0,$inout5
+ $movkey -16($key,$rnds_),$rndkey0
+
+ call .Lenc_loop6
+
+ movdqu ($inp),$inout6 # load 6 input blocks
+ movdqu 0x10($inp),$inout7
+ movdqu 0x20($inp),$in0
+ movdqu 0x30($inp),$in1
+ movdqu 0x40($inp),$in2
+ movdqu 0x50($inp),$in3
+ lea 0x60($inp),$inp # $inp+=6*16
+ $movkey -64($key,$rnds_),$rndkey1
+ pxor $inout0,$inout6 # inp^=E(ctr)
+ movaps 0x00(%rsp),$inout0 # load next counter [xor-ed with 0 round]
+ pxor $inout1,$inout7
+ movaps 0x10(%rsp),$inout1
+ pxor $inout2,$in0
+ movaps 0x20(%rsp),$inout2
+ pxor $inout3,$in1
+ movaps 0x30(%rsp),$inout3
+ pxor $inout4,$in2
+ movaps 0x40(%rsp),$inout4
+ pxor $inout5,$in3
+ movaps 0x50(%rsp),$inout5
+ movdqu $inout6,($out) # store 6 output blocks
+ movdqu $inout7,0x10($out)
+ movdqu $in0,0x20($out)
+ movdqu $in1,0x30($out)
+ movdqu $in2,0x40($out)
+ movdqu $in3,0x50($out)
+ lea 0x60($out),$out # $out+=6*16
+
+ sub \$6,$len
+ jnc .Lctr32_loop6 # loop if $len-=6 didn't borrow
+
+ add \$6,$len # restore real remaining $len
+ jz .Lctr32_done # done if ($len==0)
+
+ lea -48($rnds_),$rounds
+ lea -80($key,$rnds_),$key # restore $key
+ neg $rounds
+ shr \$4,$rounds # restore $rounds
+ jmp .Lctr32_tail
+
+.align 32
+.Lctr32_loop8:
+ add \$8,$ctr # next counter value
+ movdqa 0x60(%rsp),$inout6
aesenc $rndkey1,$inout0
- lea 32($key_),$key
- pxor $rndkey0,$inout2
+ mov $ctr,%r9d
+ movdqa 0x70(%rsp),$inout7
aesenc $rndkey1,$inout1
- movdqa .Lincrement32(%rip),$iv1
- pxor $rndkey0,$inout3
+ bswap %r9d
+ $movkey 0x20-0x80($key),$rndkey0
aesenc $rndkey1,$inout2
- movdqa $reserved(%rsp),$iv0
- pxor $rndkey0,$inout4
+ xor $key0,%r9d
+ nop
aesenc $rndkey1,$inout3
- pxor $rndkey0,$inout5
- $movkey ($key),$rndkey0
- dec $rounds
+ mov %r9d,0x00+12(%rsp) # store next counter value
+ lea 1($ctr),%r9
aesenc $rndkey1,$inout4
aesenc $rndkey1,$inout5
- jmp .Lctr32_enc_loop6_enter
-.align 16
-.Lctr32_enc_loop6:
+ aesenc $rndkey1,$inout6
+ aesenc $rndkey1,$inout7
+ $movkey 0x30-0x80($key),$rndkey1
+___
+for($i=2;$i<8;$i++) {
+my $rndkeyx = ($i&1)?$rndkey1:$rndkey0;
+$code.=<<___;
+ bswap %r9d
+ aesenc $rndkeyx,$inout0
+ aesenc $rndkeyx,$inout1
+ xor $key0,%r9d
+ .byte 0x66,0x90
+ aesenc $rndkeyx,$inout2
+ aesenc $rndkeyx,$inout3
+ mov %r9d,`0x10*($i-1)`+12(%rsp)
+ lea $i($ctr),%r9
+ aesenc $rndkeyx,$inout4
+ aesenc $rndkeyx,$inout5
+ aesenc $rndkeyx,$inout6
+ aesenc $rndkeyx,$inout7
+ $movkey `0x20+0x10*$i`-0x80($key),$rndkeyx
+___
+}
+$code.=<<___;
+ bswap %r9d
+ aesenc $rndkey0,$inout0
+ aesenc $rndkey0,$inout1
+ aesenc $rndkey0,$inout2
+ xor $key0,%r9d
+ movdqu 0x00($inp),$in0 # start loading input
+ aesenc $rndkey0,$inout3
+ mov %r9d,0x70+12(%rsp)
+ cmp \$11,$rounds
+ aesenc $rndkey0,$inout4
+ aesenc $rndkey0,$inout5
+ aesenc $rndkey0,$inout6
+ aesenc $rndkey0,$inout7
+ $movkey 0xa0-0x80($key),$rndkey0
+
+ jb .Lctr32_enc_done
+
aesenc $rndkey1,$inout0
aesenc $rndkey1,$inout1
- dec $rounds
aesenc $rndkey1,$inout2
aesenc $rndkey1,$inout3
aesenc $rndkey1,$inout4
aesenc $rndkey1,$inout5
-.Lctr32_enc_loop6_enter:
- $movkey 16($key),$rndkey1
+ aesenc $rndkey1,$inout6
+ aesenc $rndkey1,$inout7
+ $movkey 0xb0-0x80($key),$rndkey1
+
aesenc $rndkey0,$inout0
aesenc $rndkey0,$inout1
- lea 32($key),$key
aesenc $rndkey0,$inout2
aesenc $rndkey0,$inout3
aesenc $rndkey0,$inout4
aesenc $rndkey0,$inout5
- $movkey ($key),$rndkey0
- jnz .Lctr32_enc_loop6
+ aesenc $rndkey0,$inout6
+ aesenc $rndkey0,$inout7
+ $movkey 0xc0-0x80($key),$rndkey0
+ je .Lctr32_enc_done
aesenc $rndkey1,$inout0
- paddd $iv1,$iv0 # increment counter vector
aesenc $rndkey1,$inout1
- paddd `$reserved+0x10`(%rsp),$iv1
aesenc $rndkey1,$inout2
- movdqa $iv0,$reserved(%rsp) # save counter vector
aesenc $rndkey1,$inout3
- movdqa $iv1,`$reserved+0x10`(%rsp)
aesenc $rndkey1,$inout4
- pshufb $bswap_mask,$iv0 # byte swap
aesenc $rndkey1,$inout5
- pshufb $bswap_mask,$iv1
-
- aesenclast $rndkey0,$inout0
- movups ($inp),$in0 # load input
- aesenclast $rndkey0,$inout1
- movups 0x10($inp),$in1
- aesenclast $rndkey0,$inout2
- movups 0x20($inp),$in2
- aesenclast $rndkey0,$inout3
- movups 0x30($inp),$in3
- aesenclast $rndkey0,$inout4
- movups 0x40($inp),$rndkey1
- aesenclast $rndkey0,$inout5
- movups 0x50($inp),$rndkey0
- lea 0x60($inp),$inp
-
- xorps $inout0,$in0 # xor
- pshufd \$`3<<6`,$iv0,$inout0
- xorps $inout1,$in1
- pshufd \$`2<<6`,$iv0,$inout1
- movups $in0,($out) # store output
- xorps $inout2,$in2
- pshufd \$`1<<6`,$iv0,$inout2
- movups $in1,0x10($out)
- xorps $inout3,$in3
- movups $in2,0x20($out)
- xorps $inout4,$rndkey1
- movups $in3,0x30($out)
- xorps $inout5,$rndkey0
- movups $rndkey1,0x40($out)
- movups $rndkey0,0x50($out)
- lea 0x60($out),$out
- mov $rnds_,$rounds
- sub \$6,$len
- jnc .Lctr32_loop6
+ aesenc $rndkey1,$inout6
+ aesenc $rndkey1,$inout7
+ $movkey 0xd0-0x80($key),$rndkey1
- add \$6,$len
- jz .Lctr32_done
- mov $key_,$key # restore $key
- lea 1($rounds,$rounds),$rounds # restore original value
+ aesenc $rndkey0,$inout0
+ aesenc $rndkey0,$inout1
+ aesenc $rndkey0,$inout2
+ aesenc $rndkey0,$inout3
+ aesenc $rndkey0,$inout4
+ aesenc $rndkey0,$inout5
+ aesenc $rndkey0,$inout6
+ aesenc $rndkey0,$inout7
+ $movkey 0xe0-0x80($key),$rndkey0
+ jmp .Lctr32_enc_done
+
+.align 16
+.Lctr32_enc_done:
+ movdqu 0x10($inp),$in1
+ pxor $rndkey0,$in0 # input^=round[last]
+ movdqu 0x20($inp),$in2
+ pxor $rndkey0,$in1
+ movdqu 0x30($inp),$in3
+ pxor $rndkey0,$in2
+ movdqu 0x40($inp),$in4
+ pxor $rndkey0,$in3
+ movdqu 0x50($inp),$in5
+ pxor $rndkey0,$in4
+ pxor $rndkey0,$in5
+ aesenc $rndkey1,$inout0
+ aesenc $rndkey1,$inout1
+ aesenc $rndkey1,$inout2
+ aesenc $rndkey1,$inout3
+ aesenc $rndkey1,$inout4
+ aesenc $rndkey1,$inout5
+ aesenc $rndkey1,$inout6
+ aesenc $rndkey1,$inout7
+ movdqu 0x60($inp),$rndkey1 # borrow $rndkey1 for inp[6]
+ lea 0x80($inp),$inp # $inp+=8*16
+
+ aesenclast $in0,$inout0 # $inN is inp[N]^round[last]
+ pxor $rndkey0,$rndkey1 # borrowed $rndkey
+ movdqu 0x70-0x80($inp),$in0
+ aesenclast $in1,$inout1
+ pxor $rndkey0,$in0
+ movdqa 0x00(%rsp),$in1 # load next counter block
+ aesenclast $in2,$inout2
+ aesenclast $in3,$inout3
+ movdqa 0x10(%rsp),$in2
+ movdqa 0x20(%rsp),$in3
+ aesenclast $in4,$inout4
+ aesenclast $in5,$inout5
+ movdqa 0x30(%rsp),$in4
+ movdqa 0x40(%rsp),$in5
+ aesenclast $rndkey1,$inout6
+ movdqa 0x50(%rsp),$rndkey0
+ $movkey 0x10-0x80($key),$rndkey1#real 1st-round key
+ aesenclast $in0,$inout7
+
+ movups $inout0,($out) # store 8 output blocks
+ movdqa $in1,$inout0
+ movups $inout1,0x10($out)
+ movdqa $in2,$inout1
+ movups $inout2,0x20($out)
+ movdqa $in3,$inout2
+ movups $inout3,0x30($out)
+ movdqa $in4,$inout3
+ movups $inout4,0x40($out)
+ movdqa $in5,$inout4
+ movups $inout5,0x50($out)
+ movdqa $rndkey0,$inout5
+ movups $inout6,0x60($out)
+ movups $inout7,0x70($out)
+ lea 0x80($out),$out # $out+=8*16
+
+ sub \$8,$len
+ jnc .Lctr32_loop8 # loop if $len-=8 didn't borrow
+
+ add \$8,$len # restore real remainig $len
+ jz .Lctr32_done # done if ($len==0)
+ lea -0x80($key),$key
.Lctr32_tail:
- por $ivec,$inout0
- movups ($inp),$in0
- cmp \$2,$len
- jb .Lctr32_one
-
- por $ivec,$inout1
- movups 0x10($inp),$in1
- je .Lctr32_two
-
- pshufd \$`3<<6`,$iv1,$inout3
- por $ivec,$inout2
- movups 0x20($inp),$in2
+ # note that at this point $inout0..5 are populated with
+ # counter values xor-ed with 0-round key
+ lea 16($key),$key
cmp \$4,$len
- jb .Lctr32_three
+ jb .Lctr32_loop3
+ je .Lctr32_loop4
- pshufd \$`2<<6`,$iv1,$inout4
- por $ivec,$inout3
- movups 0x30($inp),$in3
- je .Lctr32_four
+ # if ($len>4) compute 7 E(counter)
+ shl \$4,$rounds
+ movdqa 0x60(%rsp),$inout6
+ pxor $inout7,$inout7
- por $ivec,$inout4
- xorps $inout5,$inout5
+ $movkey 16($key),$rndkey0
+ aesenc $rndkey1,$inout0
+ aesenc $rndkey1,$inout1
+ lea 32-16($key,$rounds),$key# prepare for .Lenc_loop8_enter
+ neg %rax
+ aesenc $rndkey1,$inout2
+ add \$16,%rax # prepare for .Lenc_loop8_enter
+ movups ($inp),$in0
+ aesenc $rndkey1,$inout3
+ aesenc $rndkey1,$inout4
+ movups 0x10($inp),$in1 # pre-load input
+ movups 0x20($inp),$in2
+ aesenc $rndkey1,$inout5
+ aesenc $rndkey1,$inout6
+
+ call .Lenc_loop8_enter
+
+ movdqu 0x30($inp),$in3
+ pxor $in0,$inout0
+ movdqu 0x40($inp),$in0
+ pxor $in1,$inout1
+ movdqu $inout0,($out) # store output
+ pxor $in2,$inout2
+ movdqu $inout1,0x10($out)
+ pxor $in3,$inout3
+ movdqu $inout2,0x20($out)
+ pxor $in0,$inout4
+ movdqu $inout3,0x30($out)
+ movdqu $inout4,0x40($out)
+ cmp \$6,$len
+ jb .Lctr32_done # $len was 5, stop store
- call _aesni_encrypt6
+ movups 0x50($inp),$in1
+ xorps $in1,$inout5
+ movups $inout5,0x50($out)
+ je .Lctr32_done # $len was 6, stop store
- movups 0x40($inp),$rndkey1
- xorps $inout0,$in0
- xorps $inout1,$in1
- movups $in0,($out)
- xorps $inout2,$in2
- movups $in1,0x10($out)
- xorps $inout3,$in3
- movups $in2,0x20($out)
- xorps $inout4,$rndkey1
- movups $in3,0x30($out)
- movups $rndkey1,0x40($out)
- jmp .Lctr32_done
-
-.align 16
-.Lctr32_one_shortcut:
- movups ($ivp),$inout0
- movups ($inp),$in0
- mov 240($key),$rounds # key->rounds
-.Lctr32_one:
-___
- &aesni_generate1("enc",$key,$rounds);
-$code.=<<___;
- xorps $inout0,$in0
- movups $in0,($out)
- jmp .Lctr32_done
+ movups 0x60($inp),$in2
+ xorps $in2,$inout6
+ movups $inout6,0x60($out)
+ jmp .Lctr32_done # $len was 7, stop store
-.align 16
-.Lctr32_two:
- xorps $inout2,$inout2
- call _aesni_encrypt3
- xorps $inout0,$in0
- xorps $inout1,$in1
- movups $in0,($out)
- movups $in1,0x10($out)
- jmp .Lctr32_done
+.align 32
+.Lctr32_loop4:
+ aesenc $rndkey1,$inout0
+ lea 16($key),$key
+ dec $rounds
+ aesenc $rndkey1,$inout1
+ aesenc $rndkey1,$inout2
+ aesenc $rndkey1,$inout3
+ $movkey ($key),$rndkey1
+ jnz .Lctr32_loop4
+ aesenclast $rndkey1,$inout0
+ aesenclast $rndkey1,$inout1
+ movups ($inp),$in0 # load input
+ movups 0x10($inp),$in1
+ aesenclast $rndkey1,$inout2
+ aesenclast $rndkey1,$inout3
+ movups 0x20($inp),$in2
+ movups 0x30($inp),$in3
-.align 16
-.Lctr32_three:
- call _aesni_encrypt3
- xorps $inout0,$in0
- xorps $inout1,$in1
- movups $in0,($out)
- xorps $inout2,$in2
- movups $in1,0x10($out)
- movups $in2,0x20($out)
- jmp .Lctr32_done
+ xorps $in0,$inout0
+ movups $inout0,($out) # store output
+ xorps $in1,$inout1
+ movups $inout1,0x10($out)
+ pxor $in2,$inout2
+ movdqu $inout2,0x20($out)
+ pxor $in3,$inout3
+ movdqu $inout3,0x30($out)
+ jmp .Lctr32_done # $len was 4, stop store
+
+.align 32
+.Lctr32_loop3:
+ aesenc $rndkey1,$inout0
+ lea 16($key),$key
+ dec $rounds
+ aesenc $rndkey1,$inout1
+ aesenc $rndkey1,$inout2
+ $movkey ($key),$rndkey1
+ jnz .Lctr32_loop3
+ aesenclast $rndkey1,$inout0
+ aesenclast $rndkey1,$inout1
+ aesenclast $rndkey1,$inout2
+
+ movups ($inp),$in0 # load input
+ xorps $in0,$inout0
+ movups $inout0,($out) # store output
+ cmp \$2,$len
+ jb .Lctr32_done # $len was 1, stop store
-.align 16
-.Lctr32_four:
- call _aesni_encrypt4
- xorps $inout0,$in0
- xorps $inout1,$in1
- movups $in0,($out)
- xorps $inout2,$in2
- movups $in1,0x10($out)
- xorps $inout3,$in3
- movups $in2,0x20($out)
- movups $in3,0x30($out)
+ movups 0x10($inp),$in1
+ xorps $in1,$inout1
+ movups $inout1,0x10($out)
+ je .Lctr32_done # $len was 2, stop store
+
+ movups 0x20($inp),$in2
+ xorps $in2,$inout2
+ movups $inout2,0x20($out) # $len was 3, stop store
.Lctr32_done:
+ xorps %xmm0,%xmm0 # clear regiser bank
+ xor $key0,$key0
+ pxor %xmm1,%xmm1
+ pxor %xmm2,%xmm2
+ pxor %xmm3,%xmm3
+ pxor %xmm4,%xmm4
+ pxor %xmm5,%xmm5
+___
+$code.=<<___ if (!$win64);
+ pxor %xmm6,%xmm6
+ pxor %xmm7,%xmm7
+ movaps %xmm0,0x00(%rsp) # clear stack
+ pxor %xmm8,%xmm8
+ movaps %xmm0,0x10(%rsp)
+ pxor %xmm9,%xmm9
+ movaps %xmm0,0x20(%rsp)
+ pxor %xmm10,%xmm10
+ movaps %xmm0,0x30(%rsp)
+ pxor %xmm11,%xmm11
+ movaps %xmm0,0x40(%rsp)
+ pxor %xmm12,%xmm12
+ movaps %xmm0,0x50(%rsp)
+ pxor %xmm13,%xmm13
+ movaps %xmm0,0x60(%rsp)
+ pxor %xmm14,%xmm14
+ movaps %xmm0,0x70(%rsp)
+ pxor %xmm15,%xmm15
___
$code.=<<___ if ($win64);
- movaps 0x20(%rsp),%xmm6
- movaps 0x30(%rsp),%xmm7
- movaps 0x40(%rsp),%xmm8
- movaps 0x50(%rsp),%xmm9
- movaps 0x60(%rsp),%xmm10
- movaps 0x70(%rsp),%xmm11
- movaps 0x80(%rsp),%xmm12
- movaps 0x90(%rsp),%xmm13
- movaps 0xa0(%rsp),%xmm14
- movaps 0xb0(%rsp),%xmm15
- lea 0xc8(%rsp),%rsp
-.Lctr32_ret:
+ movaps -0xa0(%rbp),%xmm6
+ movaps %xmm0,-0xa0(%rbp) # clear stack
+ movaps -0x90(%rbp),%xmm7
+ movaps %xmm0,-0x90(%rbp)
+ movaps -0x80(%rbp),%xmm8
+ movaps %xmm0,-0x80(%rbp)
+ movaps -0x70(%rbp),%xmm9
+ movaps %xmm0,-0x70(%rbp)
+ movaps -0x60(%rbp),%xmm10
+ movaps %xmm0,-0x60(%rbp)
+ movaps -0x50(%rbp),%xmm11
+ movaps %xmm0,-0x50(%rbp)
+ movaps -0x40(%rbp),%xmm12
+ movaps %xmm0,-0x40(%rbp)
+ movaps -0x30(%rbp),%xmm13
+ movaps %xmm0,-0x30(%rbp)
+ movaps -0x20(%rbp),%xmm14
+ movaps %xmm0,-0x20(%rbp)
+ movaps -0x10(%rbp),%xmm15
+ movaps %xmm0,-0x10(%rbp)
+ movaps %xmm0,0x00(%rsp)
+ movaps %xmm0,0x10(%rsp)
+ movaps %xmm0,0x20(%rsp)
+ movaps %xmm0,0x30(%rsp)
+ movaps %xmm0,0x40(%rsp)
+ movaps %xmm0,0x50(%rsp)
+ movaps %xmm0,0x60(%rsp)
+ movaps %xmm0,0x70(%rsp)
___
$code.=<<___;
+ lea (%rbp),%rsp
+ pop %rbp
+.Lctr32_epilogue:
ret
.size aesni_ctr32_encrypt_blocks,.-aesni_ctr32_encrypt_blocks
___
@@ -1317,252 +1725,297 @@ ___
my @tweak=map("%xmm$_",(10..15));
my ($twmask,$twres,$twtmp)=("%xmm8","%xmm9",@tweak[4]);
my ($key2,$ivp,$len_)=("%r8","%r9","%r9");
-my $frame_size = 0x68 + ($win64?160:0);
+my $frame_size = 0x70 + ($win64?160:0);
$code.=<<___;
.globl aesni_xts_encrypt
.type aesni_xts_encrypt,\@function,6
.align 16
aesni_xts_encrypt:
- lea -$frame_size(%rsp),%rsp
+ lea (%rsp),%rax
+ push %rbp
+ sub \$$frame_size,%rsp
+ and \$-16,%rsp # Linux kernel stack can be incorrectly seeded
___
$code.=<<___ if ($win64);
- movaps %xmm6,0x60(%rsp)
- movaps %xmm7,0x70(%rsp)
- movaps %xmm8,0x80(%rsp)
- movaps %xmm9,0x90(%rsp)
- movaps %xmm10,0xa0(%rsp)
- movaps %xmm11,0xb0(%rsp)
- movaps %xmm12,0xc0(%rsp)
- movaps %xmm13,0xd0(%rsp)
- movaps %xmm14,0xe0(%rsp)
- movaps %xmm15,0xf0(%rsp)
+ movaps %xmm6,-0xa8(%rax) # offload everything
+ movaps %xmm7,-0x98(%rax)
+ movaps %xmm8,-0x88(%rax)
+ movaps %xmm9,-0x78(%rax)
+ movaps %xmm10,-0x68(%rax)
+ movaps %xmm11,-0x58(%rax)
+ movaps %xmm12,-0x48(%rax)
+ movaps %xmm13,-0x38(%rax)
+ movaps %xmm14,-0x28(%rax)
+ movaps %xmm15,-0x18(%rax)
.Lxts_enc_body:
___
$code.=<<___;
- movups ($ivp),@tweak[5] # load clear-text tweak
+ lea -8(%rax),%rbp
+ movups ($ivp),$inout0 # load clear-text tweak
mov 240(%r8),$rounds # key2->rounds
mov 240($key),$rnds_ # key1->rounds
___
# generate the tweak
- &aesni_generate1("enc",$key2,$rounds,@tweak[5]);
+ &aesni_generate1("enc",$key2,$rounds,$inout0);
$code.=<<___;
+ $movkey ($key),$rndkey0 # zero round key
mov $key,$key_ # backup $key
mov $rnds_,$rounds # backup $rounds
+ shl \$4,$rnds_
mov $len,$len_ # backup $len
and \$-16,$len
+ $movkey 16($key,$rnds_),$rndkey1 # last round key
+
movdqa .Lxts_magic(%rip),$twmask
- pxor $twtmp,$twtmp
- pcmpgtd @tweak[5],$twtmp # broadcast upper bits
+ movdqa $inout0,@tweak[5]
+ pshufd \$0x5f,$inout0,$twres
+ pxor $rndkey0,$rndkey1
___
+ # alternative tweak calculation algorithm is based on suggestions
+ # by Shay Gueron. psrad doesn't conflict with AES-NI instructions
+ # and should help in the future...
for ($i=0;$i<4;$i++) {
$code.=<<___;
- pshufd \$0x13,$twtmp,$twres
- pxor $twtmp,$twtmp
+ movdqa $twres,$twtmp
+ paddd $twres,$twres
movdqa @tweak[5],@tweak[$i]
- paddq @tweak[5],@tweak[5] # psllq 1,$tweak
- pand $twmask,$twres # isolate carry and residue
- pcmpgtd @tweak[5],$twtmp # broadcat upper bits
- pxor $twres,@tweak[5]
+ psrad \$31,$twtmp # broadcast upper bits
+ paddq @tweak[5],@tweak[5]
+ pand $twmask,$twtmp
+ pxor $rndkey0,@tweak[$i]
+ pxor $twtmp,@tweak[5]
___
}
$code.=<<___;
+ movdqa @tweak[5],@tweak[4]
+ psrad \$31,$twres
+ paddq @tweak[5],@tweak[5]
+ pand $twmask,$twres
+ pxor $rndkey0,@tweak[4]
+ pxor $twres,@tweak[5]
+ movaps $rndkey1,0x60(%rsp) # save round[0]^round[last]
+
sub \$16*6,$len
- jc .Lxts_enc_short
+ jc .Lxts_enc_short # if $len-=6*16 borrowed
- shr \$1,$rounds
- sub \$1,$rounds
- mov $rounds,$rnds_
+ mov \$16+96,$rounds
+ lea 32($key_,$rnds_),$key # end of key schedule
+ sub %r10,%rax # twisted $rounds
+ $movkey 16($key_),$rndkey1
+ mov %rax,%r10 # backup twisted $rounds
+ lea .Lxts_magic(%rip),%r8
jmp .Lxts_enc_grandloop
-.align 16
+.align 32
.Lxts_enc_grandloop:
- pshufd \$0x13,$twtmp,$twres
- movdqa @tweak[5],@tweak[4]
- paddq @tweak[5],@tweak[5] # psllq 1,$tweak
movdqu `16*0`($inp),$inout0 # load input
- pand $twmask,$twres # isolate carry and residue
+ movdqa $rndkey0,$twmask
movdqu `16*1`($inp),$inout1
- pxor $twres,@tweak[5]
-
+ pxor @tweak[0],$inout0 # input^=tweak^round[0]
movdqu `16*2`($inp),$inout2
- pxor @tweak[0],$inout0 # input^=tweak
- movdqu `16*3`($inp),$inout3
pxor @tweak[1],$inout1
- movdqu `16*4`($inp),$inout4
+ aesenc $rndkey1,$inout0
+ movdqu `16*3`($inp),$inout3
pxor @tweak[2],$inout2
- movdqu `16*5`($inp),$inout5
- lea `16*6`($inp),$inp
+ aesenc $rndkey1,$inout1
+ movdqu `16*4`($inp),$inout4
pxor @tweak[3],$inout3
- $movkey ($key_),$rndkey0
+ aesenc $rndkey1,$inout2
+ movdqu `16*5`($inp),$inout5
+ pxor @tweak[5],$twmask # round[0]^=tweak[5]
+ movdqa 0x60(%rsp),$twres # load round[0]^round[last]
pxor @tweak[4],$inout4
- pxor @tweak[5],$inout5
+ aesenc $rndkey1,$inout3
+ $movkey 32($key_),$rndkey0
+ lea `16*6`($inp),$inp
+ pxor $twmask,$inout5
- # inline _aesni_encrypt6 and interleave first and last rounds
- # with own code...
- $movkey 16($key_),$rndkey1
- pxor $rndkey0,$inout0
- pxor $rndkey0,$inout1
- movdqa @tweak[0],`16*0`(%rsp) # put aside tweaks
- aesenc $rndkey1,$inout0
- lea 32($key_),$key
- pxor $rndkey0,$inout2
- movdqa @tweak[1],`16*1`(%rsp)
- aesenc $rndkey1,$inout1
- pxor $rndkey0,$inout3
- movdqa @tweak[2],`16*2`(%rsp)
- aesenc $rndkey1,$inout2
- pxor $rndkey0,$inout4
- movdqa @tweak[3],`16*3`(%rsp)
- aesenc $rndkey1,$inout3
- pxor $rndkey0,$inout5
- $movkey ($key),$rndkey0
- dec $rounds
- movdqa @tweak[4],`16*4`(%rsp)
+ pxor $twres,@tweak[0] # calclulate tweaks^round[last]
aesenc $rndkey1,$inout4
- movdqa @tweak[5],`16*5`(%rsp)
+ pxor $twres,@tweak[1]
+ movdqa @tweak[0],`16*0`(%rsp) # put aside tweaks^round[last]
aesenc $rndkey1,$inout5
- pxor $twtmp,$twtmp
- pcmpgtd @tweak[5],$twtmp
- jmp .Lxts_enc_loop6_enter
+ $movkey 48($key_),$rndkey1
+ pxor $twres,@tweak[2]
-.align 16
+ aesenc $rndkey0,$inout0
+ pxor $twres,@tweak[3]
+ movdqa @tweak[1],`16*1`(%rsp)
+ aesenc $rndkey0,$inout1
+ pxor $twres,@tweak[4]
+ movdqa @tweak[2],`16*2`(%rsp)
+ aesenc $rndkey0,$inout2
+ aesenc $rndkey0,$inout3
+ pxor $twres,$twmask
+ movdqa @tweak[4],`16*4`(%rsp)
+ aesenc $rndkey0,$inout4
+ aesenc $rndkey0,$inout5
+ $movkey 64($key_),$rndkey0
+ movdqa $twmask,`16*5`(%rsp)
+ pshufd \$0x5f,@tweak[5],$twres
+ jmp .Lxts_enc_loop6
+.align 32
.Lxts_enc_loop6:
aesenc $rndkey1,$inout0
aesenc $rndkey1,$inout1
- dec $rounds
aesenc $rndkey1,$inout2
aesenc $rndkey1,$inout3
aesenc $rndkey1,$inout4
aesenc $rndkey1,$inout5
-.Lxts_enc_loop6_enter:
- $movkey 16($key),$rndkey1
+ $movkey -64($key,%rax),$rndkey1
+ add \$32,%rax
+
aesenc $rndkey0,$inout0
aesenc $rndkey0,$inout1
- lea 32($key),$key
aesenc $rndkey0,$inout2
aesenc $rndkey0,$inout3
aesenc $rndkey0,$inout4
aesenc $rndkey0,$inout5
- $movkey ($key),$rndkey0
+ $movkey -80($key,%rax),$rndkey0
jnz .Lxts_enc_loop6
- pshufd \$0x13,$twtmp,$twres
- pxor $twtmp,$twtmp
- paddq @tweak[5],@tweak[5] # psllq 1,$tweak
+ movdqa (%r8),$twmask # start calculating next tweak
+ movdqa $twres,$twtmp
+ paddd $twres,$twres
aesenc $rndkey1,$inout0
- pand $twmask,$twres # isolate carry and residue
+ paddq @tweak[5],@tweak[5]
+ psrad \$31,$twtmp
aesenc $rndkey1,$inout1
- pcmpgtd @tweak[5],$twtmp # broadcast upper bits
+ pand $twmask,$twtmp
+ $movkey ($key_),@tweak[0] # load round[0]
aesenc $rndkey1,$inout2
- pxor $twres,@tweak[5]
aesenc $rndkey1,$inout3
aesenc $rndkey1,$inout4
+ pxor $twtmp,@tweak[5]
+ movaps @tweak[0],@tweak[1] # copy round[0]
aesenc $rndkey1,$inout5
- $movkey 16($key),$rndkey1
+ $movkey -64($key),$rndkey1
- pshufd \$0x13,$twtmp,$twres
- pxor $twtmp,$twtmp
- movdqa @tweak[5],@tweak[0]
- paddq @tweak[5],@tweak[5] # psllq 1,$tweak
+ movdqa $twres,$twtmp
aesenc $rndkey0,$inout0
- pand $twmask,$twres # isolate carry and residue
+ paddd $twres,$twres
+ pxor @tweak[5],@tweak[0]
aesenc $rndkey0,$inout1
- pcmpgtd @tweak[5],$twtmp # broadcat upper bits
+ psrad \$31,$twtmp
+ paddq @tweak[5],@tweak[5]
aesenc $rndkey0,$inout2
- pxor $twres,@tweak[5]
aesenc $rndkey0,$inout3
+ pand $twmask,$twtmp
+ movaps @tweak[1],@tweak[2]
aesenc $rndkey0,$inout4
+ pxor $twtmp,@tweak[5]
+ movdqa $twres,$twtmp
aesenc $rndkey0,$inout5
- $movkey 32($key),$rndkey0
+ $movkey -48($key),$rndkey0
- pshufd \$0x13,$twtmp,$twres
- pxor $twtmp,$twtmp
- movdqa @tweak[5],@tweak[1]
- paddq @tweak[5],@tweak[5] # psllq 1,$tweak
+ paddd $twres,$twres
aesenc $rndkey1,$inout0
- pand $twmask,$twres # isolate carry and residue
+ pxor @tweak[5],@tweak[1]
+ psrad \$31,$twtmp
aesenc $rndkey1,$inout1
- pcmpgtd @tweak[5],$twtmp # broadcat upper bits
+ paddq @tweak[5],@tweak[5]
+ pand $twmask,$twtmp
aesenc $rndkey1,$inout2
- pxor $twres,@tweak[5]
aesenc $rndkey1,$inout3
+ movdqa @tweak[3],`16*3`(%rsp)
+ pxor $twtmp,@tweak[5]
aesenc $rndkey1,$inout4
+ movaps @tweak[2],@tweak[3]
+ movdqa $twres,$twtmp
aesenc $rndkey1,$inout5
+ $movkey -32($key),$rndkey1
- pshufd \$0x13,$twtmp,$twres
- pxor $twtmp,$twtmp
- movdqa @tweak[5],@tweak[2]
- paddq @tweak[5],@tweak[5] # psllq 1,$tweak
- aesenclast $rndkey0,$inout0
- pand $twmask,$twres # isolate carry and residue
- aesenclast $rndkey0,$inout1
- pcmpgtd @tweak[5],$twtmp # broadcat upper bits
- aesenclast $rndkey0,$inout2
- pxor $twres,@tweak[5]
- aesenclast $rndkey0,$inout3
- aesenclast $rndkey0,$inout4
- aesenclast $rndkey0,$inout5
-
- pshufd \$0x13,$twtmp,$twres
- pxor $twtmp,$twtmp
- movdqa @tweak[5],@tweak[3]
- paddq @tweak[5],@tweak[5] # psllq 1,$tweak
- xorps `16*0`(%rsp),$inout0 # output^=tweak
- pand $twmask,$twres # isolate carry and residue
- xorps `16*1`(%rsp),$inout1
- pcmpgtd @tweak[5],$twtmp # broadcat upper bits
+ paddd $twres,$twres
+ aesenc $rndkey0,$inout0
+ pxor @tweak[5],@tweak[2]
+ psrad \$31,$twtmp
+ aesenc $rndkey0,$inout1
+ paddq @tweak[5],@tweak[5]
+ pand $twmask,$twtmp
+ aesenc $rndkey0,$inout2
+ aesenc $rndkey0,$inout3
+ aesenc $rndkey0,$inout4
+ pxor $twtmp,@tweak[5]
+ movaps @tweak[3],@tweak[4]
+ aesenc $rndkey0,$inout5
+
+ movdqa $twres,$rndkey0
+ paddd $twres,$twres
+ aesenc $rndkey1,$inout0
+ pxor @tweak[5],@tweak[3]
+ psrad \$31,$rndkey0
+ aesenc $rndkey1,$inout1
+ paddq @tweak[5],@tweak[5]
+ pand $twmask,$rndkey0
+ aesenc $rndkey1,$inout2
+ aesenc $rndkey1,$inout3
+ pxor $rndkey0,@tweak[5]
+ $movkey ($key_),$rndkey0
+ aesenc $rndkey1,$inout4
+ aesenc $rndkey1,$inout5
+ $movkey 16($key_),$rndkey1
+
+ pxor @tweak[5],@tweak[4]
+ aesenclast `16*0`(%rsp),$inout0
+ psrad \$31,$twres
+ paddq @tweak[5],@tweak[5]
+ aesenclast `16*1`(%rsp),$inout1
+ aesenclast `16*2`(%rsp),$inout2
+ pand $twmask,$twres
+ mov %r10,%rax # restore $rounds
+ aesenclast `16*3`(%rsp),$inout3
+ aesenclast `16*4`(%rsp),$inout4
+ aesenclast `16*5`(%rsp),$inout5
pxor $twres,@tweak[5]
- xorps `16*2`(%rsp),$inout2
- movups $inout0,`16*0`($out) # write output
- xorps `16*3`(%rsp),$inout3
- movups $inout1,`16*1`($out)
- xorps `16*4`(%rsp),$inout4
- movups $inout2,`16*2`($out)
- xorps `16*5`(%rsp),$inout5
- movups $inout3,`16*3`($out)
- mov $rnds_,$rounds # restore $rounds
- movups $inout4,`16*4`($out)
- movups $inout5,`16*5`($out)
- lea `16*6`($out),$out
+ lea `16*6`($out),$out # $out+=6*16
+ movups $inout0,`-16*6`($out) # store 6 output blocks
+ movups $inout1,`-16*5`($out)
+ movups $inout2,`-16*4`($out)
+ movups $inout3,`-16*3`($out)
+ movups $inout4,`-16*2`($out)
+ movups $inout5,`-16*1`($out)
sub \$16*6,$len
- jnc .Lxts_enc_grandloop
+ jnc .Lxts_enc_grandloop # loop if $len-=6*16 didn't borrow
- lea 3($rounds,$rounds),$rounds # restore original value
+ mov \$16+96,$rounds
+ sub $rnds_,$rounds
mov $key_,$key # restore $key
- mov $rounds,$rnds_ # backup $rounds
+ shr \$4,$rounds # restore original value
.Lxts_enc_short:
- add \$16*6,$len
- jz .Lxts_enc_done
+ # at the point @tweak[0..5] are populated with tweak values
+ mov $rounds,$rnds_ # backup $rounds
+ pxor $rndkey0,@tweak[0]
+ add \$16*6,$len # restore real remaining $len
+ jz .Lxts_enc_done # done if ($len==0)
+ pxor $rndkey0,@tweak[1]
cmp \$0x20,$len
- jb .Lxts_enc_one
- je .Lxts_enc_two
+ jb .Lxts_enc_one # $len is 1*16
+ pxor $rndkey0,@tweak[2]
+ je .Lxts_enc_two # $len is 2*16
+ pxor $rndkey0,@tweak[3]
cmp \$0x40,$len
- jb .Lxts_enc_three
- je .Lxts_enc_four
-
- pshufd \$0x13,$twtmp,$twres
- movdqa @tweak[5],@tweak[4]
- paddq @tweak[5],@tweak[5] # psllq 1,$tweak
- movdqu ($inp),$inout0
- pand $twmask,$twres # isolate carry and residue
- movdqu 16*1($inp),$inout1
- pxor $twres,@tweak[5]
+ jb .Lxts_enc_three # $len is 3*16
+ pxor $rndkey0,@tweak[4]
+ je .Lxts_enc_four # $len is 4*16
+ movdqu ($inp),$inout0 # $len is 5*16
+ movdqu 16*1($inp),$inout1
movdqu 16*2($inp),$inout2
pxor @tweak[0],$inout0
movdqu 16*3($inp),$inout3
pxor @tweak[1],$inout1
movdqu 16*4($inp),$inout4
- lea 16*5($inp),$inp
+ lea 16*5($inp),$inp # $inp+=5*16
pxor @tweak[2],$inout2
pxor @tweak[3],$inout3
pxor @tweak[4],$inout4
+ pxor $inout5,$inout5
call _aesni_encrypt6
@@ -1570,46 +2023,46 @@ $code.=<<___;
movdqa @tweak[5],@tweak[0]
xorps @tweak[1],$inout1
xorps @tweak[2],$inout2
- movdqu $inout0,($out)
+ movdqu $inout0,($out) # store 5 output blocks
xorps @tweak[3],$inout3
movdqu $inout1,16*1($out)
xorps @tweak[4],$inout4
movdqu $inout2,16*2($out)
movdqu $inout3,16*3($out)
movdqu $inout4,16*4($out)
- lea 16*5($out),$out
+ lea 16*5($out),$out # $out+=5*16
jmp .Lxts_enc_done
.align 16
.Lxts_enc_one:
movups ($inp),$inout0
- lea 16*1($inp),$inp
+ lea 16*1($inp),$inp # inp+=1*16
xorps @tweak[0],$inout0
___
&aesni_generate1("enc",$key,$rounds);
$code.=<<___;
xorps @tweak[0],$inout0
movdqa @tweak[1],@tweak[0]
- movups $inout0,($out)
- lea 16*1($out),$out
+ movups $inout0,($out) # store one output block
+ lea 16*1($out),$out # $out+=1*16
jmp .Lxts_enc_done
.align 16
.Lxts_enc_two:
movups ($inp),$inout0
movups 16($inp),$inout1
- lea 32($inp),$inp
+ lea 32($inp),$inp # $inp+=2*16
xorps @tweak[0],$inout0
xorps @tweak[1],$inout1
- call _aesni_encrypt3
+ call _aesni_encrypt2
xorps @tweak[0],$inout0
movdqa @tweak[2],@tweak[0]
xorps @tweak[1],$inout1
- movups $inout0,($out)
+ movups $inout0,($out) # store 2 output blocks
movups $inout1,16*1($out)
- lea 16*2($out),$out
+ lea 16*2($out),$out # $out+=2*16
jmp .Lxts_enc_done
.align 16
@@ -1617,7 +2070,7 @@ $code.=<<___;
movups ($inp),$inout0
movups 16*1($inp),$inout1
movups 16*2($inp),$inout2
- lea 16*3($inp),$inp
+ lea 16*3($inp),$inp # $inp+=3*16
xorps @tweak[0],$inout0
xorps @tweak[1],$inout1
xorps @tweak[2],$inout2
@@ -1628,10 +2081,10 @@ $code.=<<___;
movdqa @tweak[3],@tweak[0]
xorps @tweak[1],$inout1
xorps @tweak[2],$inout2
- movups $inout0,($out)
+ movups $inout0,($out) # store 3 output blocks
movups $inout1,16*1($out)
movups $inout2,16*2($out)
- lea 16*3($out),$out
+ lea 16*3($out),$out # $out+=3*16
jmp .Lxts_enc_done
.align 16
@@ -1641,28 +2094,28 @@ $code.=<<___;
movups 16*2($inp),$inout2
xorps @tweak[0],$inout0
movups 16*3($inp),$inout3
- lea 16*4($inp),$inp
+ lea 16*4($inp),$inp # $inp+=4*16
xorps @tweak[1],$inout1
xorps @tweak[2],$inout2
xorps @tweak[3],$inout3
call _aesni_encrypt4
- xorps @tweak[0],$inout0
- movdqa @tweak[5],@tweak[0]
- xorps @tweak[1],$inout1
- xorps @tweak[2],$inout2
- movups $inout0,($out)
- xorps @tweak[3],$inout3
- movups $inout1,16*1($out)
- movups $inout2,16*2($out)
- movups $inout3,16*3($out)
- lea 16*4($out),$out
+ pxor @tweak[0],$inout0
+ movdqa @tweak[4],@tweak[0]
+ pxor @tweak[1],$inout1
+ pxor @tweak[2],$inout2
+ movdqu $inout0,($out) # store 4 output blocks
+ pxor @tweak[3],$inout3
+ movdqu $inout1,16*1($out)
+ movdqu $inout2,16*2($out)
+ movdqu $inout3,16*3($out)
+ lea 16*4($out),$out # $out+=4*16
jmp .Lxts_enc_done
.align 16
.Lxts_enc_done:
- and \$15,$len_
+ and \$15,$len_ # see if $len%16 is 0
jz .Lxts_enc_ret
mov $len_,$len
@@ -1689,21 +2142,64 @@ $code.=<<___;
movups $inout0,-16($out)
.Lxts_enc_ret:
+ xorps %xmm0,%xmm0 # clear register bank
+ pxor %xmm1,%xmm1
+ pxor %xmm2,%xmm2
+ pxor %xmm3,%xmm3
+ pxor %xmm4,%xmm4
+ pxor %xmm5,%xmm5
+___
+$code.=<<___ if (!$win64);
+ pxor %xmm6,%xmm6
+ pxor %xmm7,%xmm7
+ movaps %xmm0,0x00(%rsp) # clear stack
+ pxor %xmm8,%xmm8
+ movaps %xmm0,0x10(%rsp)
+ pxor %xmm9,%xmm9
+ movaps %xmm0,0x20(%rsp)
+ pxor %xmm10,%xmm10
+ movaps %xmm0,0x30(%rsp)
+ pxor %xmm11,%xmm11
+ movaps %xmm0,0x40(%rsp)
+ pxor %xmm12,%xmm12
+ movaps %xmm0,0x50(%rsp)
+ pxor %xmm13,%xmm13
+ movaps %xmm0,0x60(%rsp)
+ pxor %xmm14,%xmm14
+ pxor %xmm15,%xmm15
___
$code.=<<___ if ($win64);
- movaps 0x60(%rsp),%xmm6
- movaps 0x70(%rsp),%xmm7
- movaps 0x80(%rsp),%xmm8
- movaps 0x90(%rsp),%xmm9
- movaps 0xa0(%rsp),%xmm10
- movaps 0xb0(%rsp),%xmm11
- movaps 0xc0(%rsp),%xmm12
- movaps 0xd0(%rsp),%xmm13
- movaps 0xe0(%rsp),%xmm14
- movaps 0xf0(%rsp),%xmm15
+ movaps -0xa0(%rbp),%xmm6
+ movaps %xmm0,-0xa0(%rbp) # clear stack
+ movaps -0x90(%rbp),%xmm7
+ movaps %xmm0,-0x90(%rbp)
+ movaps -0x80(%rbp),%xmm8
+ movaps %xmm0,-0x80(%rbp)
+ movaps -0x70(%rbp),%xmm9
+ movaps %xmm0,-0x70(%rbp)
+ movaps -0x60(%rbp),%xmm10
+ movaps %xmm0,-0x60(%rbp)
+ movaps -0x50(%rbp),%xmm11
+ movaps %xmm0,-0x50(%rbp)
+ movaps -0x40(%rbp),%xmm12
+ movaps %xmm0,-0x40(%rbp)
+ movaps -0x30(%rbp),%xmm13
+ movaps %xmm0,-0x30(%rbp)
+ movaps -0x20(%rbp),%xmm14
+ movaps %xmm0,-0x20(%rbp)
+ movaps -0x10(%rbp),%xmm15
+ movaps %xmm0,-0x10(%rbp)
+ movaps %xmm0,0x00(%rsp)
+ movaps %xmm0,0x10(%rsp)
+ movaps %xmm0,0x20(%rsp)
+ movaps %xmm0,0x30(%rsp)
+ movaps %xmm0,0x40(%rsp)
+ movaps %xmm0,0x50(%rsp)
+ movaps %xmm0,0x60(%rsp)
___
$code.=<<___;
- lea $frame_size(%rsp),%rsp
+ lea (%rbp),%rsp
+ pop %rbp
.Lxts_enc_epilogue:
ret
.size aesni_xts_encrypt,.-aesni_xts_encrypt
@@ -1714,28 +2210,32 @@ $code.=<<___;
.type aesni_xts_decrypt,\@function,6
.align 16
aesni_xts_decrypt:
- lea -$frame_size(%rsp),%rsp
+ lea (%rsp),%rax
+ push %rbp
+ sub \$$frame_size,%rsp
+ and \$-16,%rsp # Linux kernel stack can be incorrectly seeded
___
$code.=<<___ if ($win64);
- movaps %xmm6,0x60(%rsp)
- movaps %xmm7,0x70(%rsp)
- movaps %xmm8,0x80(%rsp)
- movaps %xmm9,0x90(%rsp)
- movaps %xmm10,0xa0(%rsp)
- movaps %xmm11,0xb0(%rsp)
- movaps %xmm12,0xc0(%rsp)
- movaps %xmm13,0xd0(%rsp)
- movaps %xmm14,0xe0(%rsp)
- movaps %xmm15,0xf0(%rsp)
+ movaps %xmm6,-0xa8(%rax) # offload everything
+ movaps %xmm7,-0x98(%rax)
+ movaps %xmm8,-0x88(%rax)
+ movaps %xmm9,-0x78(%rax)
+ movaps %xmm10,-0x68(%rax)
+ movaps %xmm11,-0x58(%rax)
+ movaps %xmm12,-0x48(%rax)
+ movaps %xmm13,-0x38(%rax)
+ movaps %xmm14,-0x28(%rax)
+ movaps %xmm15,-0x18(%rax)
.Lxts_dec_body:
___
$code.=<<___;
- movups ($ivp),@tweak[5] # load clear-text tweak
+ lea -8(%rax),%rbp
+ movups ($ivp),$inout0 # load clear-text tweak
mov 240($key2),$rounds # key2->rounds
mov 240($key),$rnds_ # key1->rounds
___
# generate the tweak
- &aesni_generate1("enc",$key2,$rounds,@tweak[5]);
+ &aesni_generate1("enc",$key2,$rounds,$inout0);
$code.=<<___;
xor %eax,%eax # if ($len%16) len-=16;
test \$15,$len
@@ -1743,219 +2243,256 @@ $code.=<<___;
shl \$4,%rax
sub %rax,$len
+ $movkey ($key),$rndkey0 # zero round key
mov $key,$key_ # backup $key
mov $rnds_,$rounds # backup $rounds
+ shl \$4,$rnds_
mov $len,$len_ # backup $len
and \$-16,$len
+ $movkey 16($key,$rnds_),$rndkey1 # last round key
+
movdqa .Lxts_magic(%rip),$twmask
- pxor $twtmp,$twtmp
- pcmpgtd @tweak[5],$twtmp # broadcast upper bits
+ movdqa $inout0,@tweak[5]
+ pshufd \$0x5f,$inout0,$twres
+ pxor $rndkey0,$rndkey1
___
for ($i=0;$i<4;$i++) {
$code.=<<___;
- pshufd \$0x13,$twtmp,$twres
- pxor $twtmp,$twtmp
+ movdqa $twres,$twtmp
+ paddd $twres,$twres
movdqa @tweak[5],@tweak[$i]
- paddq @tweak[5],@tweak[5] # psllq 1,$tweak
- pand $twmask,$twres # isolate carry and residue
- pcmpgtd @tweak[5],$twtmp # broadcat upper bits
- pxor $twres,@tweak[5]
+ psrad \$31,$twtmp # broadcast upper bits
+ paddq @tweak[5],@tweak[5]
+ pand $twmask,$twtmp
+ pxor $rndkey0,@tweak[$i]
+ pxor $twtmp,@tweak[5]
___
}
$code.=<<___;
+ movdqa @tweak[5],@tweak[4]
+ psrad \$31,$twres
+ paddq @tweak[5],@tweak[5]
+ pand $twmask,$twres
+ pxor $rndkey0,@tweak[4]
+ pxor $twres,@tweak[5]
+ movaps $rndkey1,0x60(%rsp) # save round[0]^round[last]
+
sub \$16*6,$len
- jc .Lxts_dec_short
+ jc .Lxts_dec_short # if $len-=6*16 borrowed
- shr \$1,$rounds
- sub \$1,$rounds
- mov $rounds,$rnds_
+ mov \$16+96,$rounds
+ lea 32($key_,$rnds_),$key # end of key schedule
+ sub %r10,%rax # twisted $rounds
+ $movkey 16($key_),$rndkey1
+ mov %rax,%r10 # backup twisted $rounds
+ lea .Lxts_magic(%rip),%r8
jmp .Lxts_dec_grandloop
-.align 16
+.align 32
.Lxts_dec_grandloop:
- pshufd \$0x13,$twtmp,$twres
- movdqa @tweak[5],@tweak[4]
- paddq @tweak[5],@tweak[5] # psllq 1,$tweak
movdqu `16*0`($inp),$inout0 # load input
- pand $twmask,$twres # isolate carry and residue
+ movdqa $rndkey0,$twmask
movdqu `16*1`($inp),$inout1
- pxor $twres,@tweak[5]
-
+ pxor @tweak[0],$inout0 # intput^=tweak^round[0]
movdqu `16*2`($inp),$inout2
- pxor @tweak[0],$inout0 # input^=tweak
- movdqu `16*3`($inp),$inout3
pxor @tweak[1],$inout1
- movdqu `16*4`($inp),$inout4
+ aesdec $rndkey1,$inout0
+ movdqu `16*3`($inp),$inout3
pxor @tweak[2],$inout2
- movdqu `16*5`($inp),$inout5
- lea `16*6`($inp),$inp
+ aesdec $rndkey1,$inout1
+ movdqu `16*4`($inp),$inout4
pxor @tweak[3],$inout3
- $movkey ($key_),$rndkey0
+ aesdec $rndkey1,$inout2
+ movdqu `16*5`($inp),$inout5
+ pxor @tweak[5],$twmask # round[0]^=tweak[5]
+ movdqa 0x60(%rsp),$twres # load round[0]^round[last]
pxor @tweak[4],$inout4
- pxor @tweak[5],$inout5
+ aesdec $rndkey1,$inout3
+ $movkey 32($key_),$rndkey0
+ lea `16*6`($inp),$inp
+ pxor $twmask,$inout5
- # inline _aesni_decrypt6 and interleave first and last rounds
- # with own code...
- $movkey 16($key_),$rndkey1
- pxor $rndkey0,$inout0
- pxor $rndkey0,$inout1
- movdqa @tweak[0],`16*0`(%rsp) # put aside tweaks
- aesdec $rndkey1,$inout0
- lea 32($key_),$key
- pxor $rndkey0,$inout2
- movdqa @tweak[1],`16*1`(%rsp)
- aesdec $rndkey1,$inout1
- pxor $rndkey0,$inout3
- movdqa @tweak[2],`16*2`(%rsp)
- aesdec $rndkey1,$inout2
- pxor $rndkey0,$inout4
- movdqa @tweak[3],`16*3`(%rsp)
- aesdec $rndkey1,$inout3
- pxor $rndkey0,$inout5
- $movkey ($key),$rndkey0
- dec $rounds
- movdqa @tweak[4],`16*4`(%rsp)
+ pxor $twres,@tweak[0] # calclulate tweaks^round[last]
aesdec $rndkey1,$inout4
- movdqa @tweak[5],`16*5`(%rsp)
+ pxor $twres,@tweak[1]
+ movdqa @tweak[0],`16*0`(%rsp) # put aside tweaks^last round key
aesdec $rndkey1,$inout5
- pxor $twtmp,$twtmp
- pcmpgtd @tweak[5],$twtmp
- jmp .Lxts_dec_loop6_enter
+ $movkey 48($key_),$rndkey1
+ pxor $twres,@tweak[2]
-.align 16
+ aesdec $rndkey0,$inout0
+ pxor $twres,@tweak[3]
+ movdqa @tweak[1],`16*1`(%rsp)
+ aesdec $rndkey0,$inout1
+ pxor $twres,@tweak[4]
+ movdqa @tweak[2],`16*2`(%rsp)
+ aesdec $rndkey0,$inout2
+ aesdec $rndkey0,$inout3
+ pxor $twres,$twmask
+ movdqa @tweak[4],`16*4`(%rsp)
+ aesdec $rndkey0,$inout4
+ aesdec $rndkey0,$inout5
+ $movkey 64($key_),$rndkey0
+ movdqa $twmask,`16*5`(%rsp)
+ pshufd \$0x5f,@tweak[5],$twres
+ jmp .Lxts_dec_loop6
+.align 32
.Lxts_dec_loop6:
aesdec $rndkey1,$inout0
aesdec $rndkey1,$inout1
- dec $rounds
aesdec $rndkey1,$inout2
aesdec $rndkey1,$inout3
aesdec $rndkey1,$inout4
aesdec $rndkey1,$inout5
-.Lxts_dec_loop6_enter:
- $movkey 16($key),$rndkey1
+ $movkey -64($key,%rax),$rndkey1
+ add \$32,%rax
+
aesdec $rndkey0,$inout0
aesdec $rndkey0,$inout1
- lea 32($key),$key
aesdec $rndkey0,$inout2
aesdec $rndkey0,$inout3
aesdec $rndkey0,$inout4
aesdec $rndkey0,$inout5
- $movkey ($key),$rndkey0
+ $movkey -80($key,%rax),$rndkey0
jnz .Lxts_dec_loop6
- pshufd \$0x13,$twtmp,$twres
- pxor $twtmp,$twtmp
- paddq @tweak[5],@tweak[5] # psllq 1,$tweak
+ movdqa (%r8),$twmask # start calculating next tweak
+ movdqa $twres,$twtmp
+ paddd $twres,$twres
aesdec $rndkey1,$inout0
- pand $twmask,$twres # isolate carry and residue
+ paddq @tweak[5],@tweak[5]
+ psrad \$31,$twtmp
aesdec $rndkey1,$inout1
- pcmpgtd @tweak[5],$twtmp # broadcast upper bits
+ pand $twmask,$twtmp
+ $movkey ($key_),@tweak[0] # load round[0]
aesdec $rndkey1,$inout2
- pxor $twres,@tweak[5]
aesdec $rndkey1,$inout3
aesdec $rndkey1,$inout4
+ pxor $twtmp,@tweak[5]
+ movaps @tweak[0],@tweak[1] # copy round[0]
aesdec $rndkey1,$inout5
- $movkey 16($key),$rndkey1
+ $movkey -64($key),$rndkey1
- pshufd \$0x13,$twtmp,$twres
- pxor $twtmp,$twtmp
- movdqa @tweak[5],@tweak[0]
- paddq @tweak[5],@tweak[5] # psllq 1,$tweak
+ movdqa $twres,$twtmp
aesdec $rndkey0,$inout0
- pand $twmask,$twres # isolate carry and residue
+ paddd $twres,$twres
+ pxor @tweak[5],@tweak[0]
aesdec $rndkey0,$inout1
- pcmpgtd @tweak[5],$twtmp # broadcat upper bits
+ psrad \$31,$twtmp
+ paddq @tweak[5],@tweak[5]
aesdec $rndkey0,$inout2
- pxor $twres,@tweak[5]
aesdec $rndkey0,$inout3
+ pand $twmask,$twtmp
+ movaps @tweak[1],@tweak[2]
aesdec $rndkey0,$inout4
+ pxor $twtmp,@tweak[5]
+ movdqa $twres,$twtmp
aesdec $rndkey0,$inout5
- $movkey 32($key),$rndkey0
+ $movkey -48($key),$rndkey0
- pshufd \$0x13,$twtmp,$twres
- pxor $twtmp,$twtmp
- movdqa @tweak[5],@tweak[1]
- paddq @tweak[5],@tweak[5] # psllq 1,$tweak
+ paddd $twres,$twres
aesdec $rndkey1,$inout0
- pand $twmask,$twres # isolate carry and residue
+ pxor @tweak[5],@tweak[1]
+ psrad \$31,$twtmp
aesdec $rndkey1,$inout1
- pcmpgtd @tweak[5],$twtmp # broadcat upper bits
+ paddq @tweak[5],@tweak[5]
+ pand $twmask,$twtmp
aesdec $rndkey1,$inout2
- pxor $twres,@tweak[5]
aesdec $rndkey1,$inout3
+ movdqa @tweak[3],`16*3`(%rsp)
+ pxor $twtmp,@tweak[5]
aesdec $rndkey1,$inout4
+ movaps @tweak[2],@tweak[3]
+ movdqa $twres,$twtmp
aesdec $rndkey1,$inout5
+ $movkey -32($key),$rndkey1
- pshufd \$0x13,$twtmp,$twres
- pxor $twtmp,$twtmp
- movdqa @tweak[5],@tweak[2]
- paddq @tweak[5],@tweak[5] # psllq 1,$tweak
- aesdeclast $rndkey0,$inout0
- pand $twmask,$twres # isolate carry and residue
- aesdeclast $rndkey0,$inout1
- pcmpgtd @tweak[5],$twtmp # broadcat upper bits
- aesdeclast $rndkey0,$inout2
- pxor $twres,@tweak[5]
- aesdeclast $rndkey0,$inout3
- aesdeclast $rndkey0,$inout4
- aesdeclast $rndkey0,$inout5
-
- pshufd \$0x13,$twtmp,$twres
- pxor $twtmp,$twtmp
- movdqa @tweak[5],@tweak[3]
- paddq @tweak[5],@tweak[5] # psllq 1,$tweak
- xorps `16*0`(%rsp),$inout0 # output^=tweak
- pand $twmask,$twres # isolate carry and residue
- xorps `16*1`(%rsp),$inout1
- pcmpgtd @tweak[5],$twtmp # broadcat upper bits
+ paddd $twres,$twres
+ aesdec $rndkey0,$inout0
+ pxor @tweak[5],@tweak[2]
+ psrad \$31,$twtmp
+ aesdec $rndkey0,$inout1
+ paddq @tweak[5],@tweak[5]
+ pand $twmask,$twtmp
+ aesdec $rndkey0,$inout2
+ aesdec $rndkey0,$inout3
+ aesdec $rndkey0,$inout4
+ pxor $twtmp,@tweak[5]
+ movaps @tweak[3],@tweak[4]
+ aesdec $rndkey0,$inout5
+
+ movdqa $twres,$rndkey0
+ paddd $twres,$twres
+ aesdec $rndkey1,$inout0
+ pxor @tweak[5],@tweak[3]
+ psrad \$31,$rndkey0
+ aesdec $rndkey1,$inout1
+ paddq @tweak[5],@tweak[5]
+ pand $twmask,$rndkey0
+ aesdec $rndkey1,$inout2
+ aesdec $rndkey1,$inout3
+ pxor $rndkey0,@tweak[5]
+ $movkey ($key_),$rndkey0
+ aesdec $rndkey1,$inout4
+ aesdec $rndkey1,$inout5
+ $movkey 16($key_),$rndkey1
+
+ pxor @tweak[5],@tweak[4]
+ aesdeclast `16*0`(%rsp),$inout0
+ psrad \$31,$twres
+ paddq @tweak[5],@tweak[5]
+ aesdeclast `16*1`(%rsp),$inout1
+ aesdeclast `16*2`(%rsp),$inout2
+ pand $twmask,$twres
+ mov %r10,%rax # restore $rounds
+ aesdeclast `16*3`(%rsp),$inout3
+ aesdeclast `16*4`(%rsp),$inout4
+ aesdeclast `16*5`(%rsp),$inout5
pxor $twres,@tweak[5]
- xorps `16*2`(%rsp),$inout2
- movups $inout0,`16*0`($out) # write output
- xorps `16*3`(%rsp),$inout3
- movups $inout1,`16*1`($out)
- xorps `16*4`(%rsp),$inout4
- movups $inout2,`16*2`($out)
- xorps `16*5`(%rsp),$inout5
- movups $inout3,`16*3`($out)
- mov $rnds_,$rounds # restore $rounds
- movups $inout4,`16*4`($out)
- movups $inout5,`16*5`($out)
- lea `16*6`($out),$out
+ lea `16*6`($out),$out # $out+=6*16
+ movups $inout0,`-16*6`($out) # store 6 output blocks
+ movups $inout1,`-16*5`($out)
+ movups $inout2,`-16*4`($out)
+ movups $inout3,`-16*3`($out)
+ movups $inout4,`-16*2`($out)
+ movups $inout5,`-16*1`($out)
sub \$16*6,$len
- jnc .Lxts_dec_grandloop
+ jnc .Lxts_dec_grandloop # loop if $len-=6*16 didn't borrow
- lea 3($rounds,$rounds),$rounds # restore original value
+ mov \$16+96,$rounds
+ sub $rnds_,$rounds
mov $key_,$key # restore $key
- mov $rounds,$rnds_ # backup $rounds
+ shr \$4,$rounds # restore original value
.Lxts_dec_short:
- add \$16*6,$len
- jz .Lxts_dec_done
+ # at the point @tweak[0..5] are populated with tweak values
+ mov $rounds,$rnds_ # backup $rounds
+ pxor $rndkey0,@tweak[0]
+ pxor $rndkey0,@tweak[1]
+ add \$16*6,$len # restore real remaining $len
+ jz .Lxts_dec_done # done if ($len==0)
+ pxor $rndkey0,@tweak[2]
cmp \$0x20,$len
- jb .Lxts_dec_one
- je .Lxts_dec_two
+ jb .Lxts_dec_one # $len is 1*16
+ pxor $rndkey0,@tweak[3]
+ je .Lxts_dec_two # $len is 2*16
+ pxor $rndkey0,@tweak[4]
cmp \$0x40,$len
- jb .Lxts_dec_three
- je .Lxts_dec_four
-
- pshufd \$0x13,$twtmp,$twres
- movdqa @tweak[5],@tweak[4]
- paddq @tweak[5],@tweak[5] # psllq 1,$tweak
- movdqu ($inp),$inout0
- pand $twmask,$twres # isolate carry and residue
- movdqu 16*1($inp),$inout1
- pxor $twres,@tweak[5]
+ jb .Lxts_dec_three # $len is 3*16
+ je .Lxts_dec_four # $len is 4*16
+ movdqu ($inp),$inout0 # $len is 5*16
+ movdqu 16*1($inp),$inout1
movdqu 16*2($inp),$inout2
pxor @tweak[0],$inout0
movdqu 16*3($inp),$inout3
pxor @tweak[1],$inout1
movdqu 16*4($inp),$inout4
- lea 16*5($inp),$inp
+ lea 16*5($inp),$inp # $inp+=5*16
pxor @tweak[2],$inout2
pxor @tweak[3],$inout3
pxor @tweak[4],$inout4
@@ -1965,7 +2502,7 @@ $code.=<<___;
xorps @tweak[0],$inout0
xorps @tweak[1],$inout1
xorps @tweak[2],$inout2
- movdqu $inout0,($out)
+ movdqu $inout0,($out) # store 5 output blocks
xorps @tweak[3],$inout3
movdqu $inout1,16*1($out)
xorps @tweak[4],$inout4
@@ -1974,7 +2511,7 @@ $code.=<<___;
movdqu $inout3,16*3($out)
pcmpgtd @tweak[5],$twtmp
movdqu $inout4,16*4($out)
- lea 16*5($out),$out
+ lea 16*5($out),$out # $out+=5*16
pshufd \$0x13,$twtmp,@tweak[1] # $twres
and \$15,$len_
jz .Lxts_dec_ret
@@ -1988,35 +2525,35 @@ $code.=<<___;
.align 16
.Lxts_dec_one:
movups ($inp),$inout0
- lea 16*1($inp),$inp
+ lea 16*1($inp),$inp # $inp+=1*16
xorps @tweak[0],$inout0
___
&aesni_generate1("dec",$key,$rounds);
$code.=<<___;
xorps @tweak[0],$inout0
movdqa @tweak[1],@tweak[0]
- movups $inout0,($out)
+ movups $inout0,($out) # store one output block
movdqa @tweak[2],@tweak[1]
- lea 16*1($out),$out
+ lea 16*1($out),$out # $out+=1*16
jmp .Lxts_dec_done
.align 16
.Lxts_dec_two:
movups ($inp),$inout0
movups 16($inp),$inout1
- lea 32($inp),$inp
+ lea 32($inp),$inp # $inp+=2*16
xorps @tweak[0],$inout0
xorps @tweak[1],$inout1
- call _aesni_decrypt3
+ call _aesni_decrypt2
xorps @tweak[0],$inout0
movdqa @tweak[2],@tweak[0]
xorps @tweak[1],$inout1
movdqa @tweak[3],@tweak[1]
- movups $inout0,($out)
+ movups $inout0,($out) # store 2 output blocks
movups $inout1,16*1($out)
- lea 16*2($out),$out
+ lea 16*2($out),$out # $out+=2*16
jmp .Lxts_dec_done
.align 16
@@ -2024,7 +2561,7 @@ $code.=<<___;
movups ($inp),$inout0
movups 16*1($inp),$inout1
movups 16*2($inp),$inout2
- lea 16*3($inp),$inp
+ lea 16*3($inp),$inp # $inp+=3*16
xorps @tweak[0],$inout0
xorps @tweak[1],$inout1
xorps @tweak[2],$inout2
@@ -2034,50 +2571,44 @@ $code.=<<___;
xorps @tweak[0],$inout0
movdqa @tweak[3],@tweak[0]
xorps @tweak[1],$inout1
- movdqa @tweak[5],@tweak[1]
+ movdqa @tweak[4],@tweak[1]
xorps @tweak[2],$inout2
- movups $inout0,($out)
+ movups $inout0,($out) # store 3 output blocks
movups $inout1,16*1($out)
movups $inout2,16*2($out)
- lea 16*3($out),$out
+ lea 16*3($out),$out # $out+=3*16
jmp .Lxts_dec_done
.align 16
.Lxts_dec_four:
- pshufd \$0x13,$twtmp,$twres
- movdqa @tweak[5],@tweak[4]
- paddq @tweak[5],@tweak[5] # psllq 1,$tweak
- movups ($inp),$inout0
- pand $twmask,$twres # isolate carry and residue
- movups 16*1($inp),$inout1
- pxor $twres,@tweak[5]
-
+ movups ($inp),$inout0
+ movups 16*1($inp),$inout1
movups 16*2($inp),$inout2
xorps @tweak[0],$inout0
movups 16*3($inp),$inout3
- lea 16*4($inp),$inp
+ lea 16*4($inp),$inp # $inp+=4*16
xorps @tweak[1],$inout1
xorps @tweak[2],$inout2
xorps @tweak[3],$inout3
call _aesni_decrypt4
- xorps @tweak[0],$inout0
+ pxor @tweak[0],$inout0
movdqa @tweak[4],@tweak[0]
- xorps @tweak[1],$inout1
+ pxor @tweak[1],$inout1
movdqa @tweak[5],@tweak[1]
- xorps @tweak[2],$inout2
- movups $inout0,($out)
- xorps @tweak[3],$inout3
- movups $inout1,16*1($out)
- movups $inout2,16*2($out)
- movups $inout3,16*3($out)
- lea 16*4($out),$out
+ pxor @tweak[2],$inout2
+ movdqu $inout0,($out) # store 4 output blocks
+ pxor @tweak[3],$inout3
+ movdqu $inout1,16*1($out)
+ movdqu $inout2,16*2($out)
+ movdqu $inout3,16*3($out)
+ lea 16*4($out),$out # $out+=4*16
jmp .Lxts_dec_done
.align 16
.Lxts_dec_done:
- and \$15,$len_
+ and \$15,$len_ # see if $len%16 is 0
jz .Lxts_dec_ret
.Lxts_dec_done2:
mov $len_,$len
@@ -2115,21 +2646,64 @@ $code.=<<___;
movups $inout0,($out)
.Lxts_dec_ret:
+ xorps %xmm0,%xmm0 # clear register bank
+ pxor %xmm1,%xmm1
+ pxor %xmm2,%xmm2
+ pxor %xmm3,%xmm3
+ pxor %xmm4,%xmm4
+ pxor %xmm5,%xmm5
+___
+$code.=<<___ if (!$win64);
+ pxor %xmm6,%xmm6
+ pxor %xmm7,%xmm7
+ movaps %xmm0,0x00(%rsp) # clear stack
+ pxor %xmm8,%xmm8
+ movaps %xmm0,0x10(%rsp)
+ pxor %xmm9,%xmm9
+ movaps %xmm0,0x20(%rsp)
+ pxor %xmm10,%xmm10
+ movaps %xmm0,0x30(%rsp)
+ pxor %xmm11,%xmm11
+ movaps %xmm0,0x40(%rsp)
+ pxor %xmm12,%xmm12
+ movaps %xmm0,0x50(%rsp)
+ pxor %xmm13,%xmm13
+ movaps %xmm0,0x60(%rsp)
+ pxor %xmm14,%xmm14
+ pxor %xmm15,%xmm15
___
$code.=<<___ if ($win64);
- movaps 0x60(%rsp),%xmm6
- movaps 0x70(%rsp),%xmm7
- movaps 0x80(%rsp),%xmm8
- movaps 0x90(%rsp),%xmm9
- movaps 0xa0(%rsp),%xmm10
- movaps 0xb0(%rsp),%xmm11
- movaps 0xc0(%rsp),%xmm12
- movaps 0xd0(%rsp),%xmm13
- movaps 0xe0(%rsp),%xmm14
- movaps 0xf0(%rsp),%xmm15
+ movaps -0xa0(%rbp),%xmm6
+ movaps %xmm0,-0xa0(%rbp) # clear stack
+ movaps -0x90(%rbp),%xmm7
+ movaps %xmm0,-0x90(%rbp)
+ movaps -0x80(%rbp),%xmm8
+ movaps %xmm0,-0x80(%rbp)
+ movaps -0x70(%rbp),%xmm9
+ movaps %xmm0,-0x70(%rbp)
+ movaps -0x60(%rbp),%xmm10
+ movaps %xmm0,-0x60(%rbp)
+ movaps -0x50(%rbp),%xmm11
+ movaps %xmm0,-0x50(%rbp)
+ movaps -0x40(%rbp),%xmm12
+ movaps %xmm0,-0x40(%rbp)
+ movaps -0x30(%rbp),%xmm13
+ movaps %xmm0,-0x30(%rbp)
+ movaps -0x20(%rbp),%xmm14
+ movaps %xmm0,-0x20(%rbp)
+ movaps -0x10(%rbp),%xmm15
+ movaps %xmm0,-0x10(%rbp)
+ movaps %xmm0,0x00(%rsp)
+ movaps %xmm0,0x10(%rsp)
+ movaps %xmm0,0x20(%rsp)
+ movaps %xmm0,0x30(%rsp)
+ movaps %xmm0,0x40(%rsp)
+ movaps %xmm0,0x50(%rsp)
+ movaps %xmm0,0x60(%rsp)
___
$code.=<<___;
- lea $frame_size(%rsp),%rsp
+ lea (%rbp),%rsp
+ pop %rbp
.Lxts_dec_epilogue:
ret
.size aesni_xts_decrypt,.-aesni_xts_decrypt
@@ -2141,7 +2715,10 @@ ___
# size_t length, const AES_KEY *key,
# unsigned char *ivp,const int enc);
{
-my $reserved = $win64?0x40:-0x18; # used in decrypt
+my $frame_size = 0x10 + ($win64?0xa0:0); # used in decrypt
+my ($iv,$in0,$in1,$in2,$in3,$in4)=map("%xmm$_",(10..15));
+my $inp_=$key_;
+
$code.=<<___;
.globl ${PREFIX}_cbc_encrypt
.type ${PREFIX}_cbc_encrypt,\@function,6
@@ -2177,7 +2754,11 @@ $code.=<<___;
jnc .Lcbc_enc_loop
add \$16,$len
jnz .Lcbc_enc_tail
+ pxor $rndkey0,$rndkey0 # clear register bank
+ pxor $rndkey1,$rndkey1
movups $inout0,($ivp)
+ pxor $inout0,$inout0
+ pxor $inout1,$inout1
jmp .Lcbc_ret
.Lcbc_enc_tail:
@@ -2197,283 +2778,483 @@ $code.=<<___;
#--------------------------- CBC DECRYPT ------------------------------#
.align 16
.Lcbc_decrypt:
+ cmp \$16,$len
+ jne .Lcbc_decrypt_bulk
+
+ # handle single block without allocating stack frame,
+ # useful in ciphertext stealing mode
+ movdqu ($inp),$inout0 # load input
+ movdqu ($ivp),$inout1 # load iv
+ movdqa $inout0,$inout2 # future iv
+___
+ &aesni_generate1("dec",$key,$rnds_);
+$code.=<<___;
+ pxor $rndkey0,$rndkey0 # clear register bank
+ pxor $rndkey1,$rndkey1
+ movdqu $inout2,($ivp) # store iv
+ xorps $inout1,$inout0 # ^=iv
+ pxor $inout1,$inout1
+ movups $inout0,($out) # store output
+ pxor $inout0,$inout0
+ jmp .Lcbc_ret
+.align 16
+.Lcbc_decrypt_bulk:
+ lea (%rsp),%rax
+ push %rbp
+ sub \$$frame_size,%rsp
+ and \$-16,%rsp # Linux kernel stack can be incorrectly seeded
___
$code.=<<___ if ($win64);
- lea -0x58(%rsp),%rsp
- movaps %xmm6,(%rsp)
- movaps %xmm7,0x10(%rsp)
- movaps %xmm8,0x20(%rsp)
- movaps %xmm9,0x30(%rsp)
+ movaps %xmm6,0x10(%rsp)
+ movaps %xmm7,0x20(%rsp)
+ movaps %xmm8,0x30(%rsp)
+ movaps %xmm9,0x40(%rsp)
+ movaps %xmm10,0x50(%rsp)
+ movaps %xmm11,0x60(%rsp)
+ movaps %xmm12,0x70(%rsp)
+ movaps %xmm13,0x80(%rsp)
+ movaps %xmm14,0x90(%rsp)
+ movaps %xmm15,0xa0(%rsp)
.Lcbc_decrypt_body:
___
$code.=<<___;
+ lea -8(%rax),%rbp
movups ($ivp),$iv
mov $rnds_,$rounds
- cmp \$0x70,$len
+ cmp \$0x50,$len
jbe .Lcbc_dec_tail
- shr \$1,$rnds_
- sub \$0x70,$len
- mov $rnds_,$rounds
- movaps $iv,$reserved(%rsp)
+
+ $movkey ($key),$rndkey0
+ movdqu 0x00($inp),$inout0 # load input
+ movdqu 0x10($inp),$inout1
+ movdqa $inout0,$in0
+ movdqu 0x20($inp),$inout2
+ movdqa $inout1,$in1
+ movdqu 0x30($inp),$inout3
+ movdqa $inout2,$in2
+ movdqu 0x40($inp),$inout4
+ movdqa $inout3,$in3
+ movdqu 0x50($inp),$inout5
+ movdqa $inout4,$in4
+ mov OPENSSL_ia32cap_P+4(%rip),%r9d
+ cmp \$0x70,$len
+ jbe .Lcbc_dec_six_or_seven
+
+ and \$`1<<26|1<<22`,%r9d # isolate XSAVE+MOVBE
+ sub \$0x50,$len # $len is biased by -5*16
+ cmp \$`1<<22`,%r9d # check for MOVBE without XSAVE
+ je .Lcbc_dec_loop6_enter # [which denotes Atom Silvermont]
+ sub \$0x20,$len # $len is biased by -7*16
+ lea 0x70($key),$key # size optimization
jmp .Lcbc_dec_loop8_enter
.align 16
.Lcbc_dec_loop8:
- movaps $rndkey0,$reserved(%rsp) # save IV
movups $inout7,($out)
lea 0x10($out),$out
.Lcbc_dec_loop8_enter:
- $movkey ($key),$rndkey0
- movups ($inp),$inout0 # load input
- movups 0x10($inp),$inout1
- $movkey 16($key),$rndkey1
+ movdqu 0x60($inp),$inout6
+ pxor $rndkey0,$inout0
+ movdqu 0x70($inp),$inout7
+ pxor $rndkey0,$inout1
+ $movkey 0x10-0x70($key),$rndkey1
+ pxor $rndkey0,$inout2
+ xor $inp_,$inp_
+ cmp \$0x70,$len # is there at least 0x60 bytes ahead?
+ pxor $rndkey0,$inout3
+ pxor $rndkey0,$inout4
+ pxor $rndkey0,$inout5
+ pxor $rndkey0,$inout6
- lea 32($key),$key
- movdqu 0x20($inp),$inout2
- xorps $rndkey0,$inout0
- movdqu 0x30($inp),$inout3
- xorps $rndkey0,$inout1
- movdqu 0x40($inp),$inout4
aesdec $rndkey1,$inout0
- pxor $rndkey0,$inout2
- movdqu 0x50($inp),$inout5
+ pxor $rndkey0,$inout7
+ $movkey 0x20-0x70($key),$rndkey0
aesdec $rndkey1,$inout1
- pxor $rndkey0,$inout3
- movdqu 0x60($inp),$inout6
aesdec $rndkey1,$inout2
- pxor $rndkey0,$inout4
- movdqu 0x70($inp),$inout7
aesdec $rndkey1,$inout3
- pxor $rndkey0,$inout5
- dec $rounds
aesdec $rndkey1,$inout4
- pxor $rndkey0,$inout6
aesdec $rndkey1,$inout5
- pxor $rndkey0,$inout7
- $movkey ($key),$rndkey0
aesdec $rndkey1,$inout6
+ setnc ${inp_}b
+ shl \$7,$inp_
aesdec $rndkey1,$inout7
- $movkey 16($key),$rndkey1
-
- call .Ldec_loop8_enter
+ add $inp,$inp_
+ $movkey 0x30-0x70($key),$rndkey1
+___
+for($i=1;$i<12;$i++) {
+my $rndkeyx = ($i&1)?$rndkey0:$rndkey1;
+$code.=<<___ if ($i==7);
+ cmp \$11,$rounds
+___
+$code.=<<___;
+ aesdec $rndkeyx,$inout0
+ aesdec $rndkeyx,$inout1
+ aesdec $rndkeyx,$inout2
+ aesdec $rndkeyx,$inout3
+ aesdec $rndkeyx,$inout4
+ aesdec $rndkeyx,$inout5
+ aesdec $rndkeyx,$inout6
+ aesdec $rndkeyx,$inout7
+ $movkey `0x30+0x10*$i`-0x70($key),$rndkeyx
+___
+$code.=<<___ if ($i<6 || (!($i&1) && $i>7));
+ nop
+___
+$code.=<<___ if ($i==7);
+ jb .Lcbc_dec_done
+___
+$code.=<<___ if ($i==9);
+ je .Lcbc_dec_done
+___
+$code.=<<___ if ($i==11);
+ jmp .Lcbc_dec_done
+___
+}
+$code.=<<___;
+.align 16
+.Lcbc_dec_done:
+ aesdec $rndkey1,$inout0
+ aesdec $rndkey1,$inout1
+ pxor $rndkey0,$iv
+ pxor $rndkey0,$in0
+ aesdec $rndkey1,$inout2
+ aesdec $rndkey1,$inout3
+ pxor $rndkey0,$in1
+ pxor $rndkey0,$in2
+ aesdec $rndkey1,$inout4
+ aesdec $rndkey1,$inout5
+ pxor $rndkey0,$in3
+ pxor $rndkey0,$in4
+ aesdec $rndkey1,$inout6
+ aesdec $rndkey1,$inout7
+ movdqu 0x50($inp),$rndkey1
+
+ aesdeclast $iv,$inout0
+ movdqu 0x60($inp),$iv # borrow $iv
+ pxor $rndkey0,$rndkey1
+ aesdeclast $in0,$inout1
+ pxor $rndkey0,$iv
+ movdqu 0x70($inp),$rndkey0 # next IV
+ aesdeclast $in1,$inout2
+ lea 0x80($inp),$inp
+ movdqu 0x00($inp_),$in0
+ aesdeclast $in2,$inout3
+ aesdeclast $in3,$inout4
+ movdqu 0x10($inp_),$in1
+ movdqu 0x20($inp_),$in2
+ aesdeclast $in4,$inout5
+ aesdeclast $rndkey1,$inout6
+ movdqu 0x30($inp_),$in3
+ movdqu 0x40($inp_),$in4
+ aesdeclast $iv,$inout7
+ movdqa $rndkey0,$iv # return $iv
+ movdqu 0x50($inp_),$rndkey1
+ $movkey -0x70($key),$rndkey0
+
+ movups $inout0,($out) # store output
+ movdqa $in0,$inout0
+ movups $inout1,0x10($out)
+ movdqa $in1,$inout1
+ movups $inout2,0x20($out)
+ movdqa $in2,$inout2
+ movups $inout3,0x30($out)
+ movdqa $in3,$inout3
+ movups $inout4,0x40($out)
+ movdqa $in4,$inout4
+ movups $inout5,0x50($out)
+ movdqa $rndkey1,$inout5
+ movups $inout6,0x60($out)
+ lea 0x70($out),$out
- movups ($inp),$rndkey1 # re-load input
- movups 0x10($inp),$rndkey0
- xorps $reserved(%rsp),$inout0 # ^= IV
- xorps $rndkey1,$inout1
- movups 0x20($inp),$rndkey1
- xorps $rndkey0,$inout2
- movups 0x30($inp),$rndkey0
- xorps $rndkey1,$inout3
- movups 0x40($inp),$rndkey1
- xorps $rndkey0,$inout4
- movups 0x50($inp),$rndkey0
- xorps $rndkey1,$inout5
- movups 0x60($inp),$rndkey1
- xorps $rndkey0,$inout6
- movups 0x70($inp),$rndkey0 # IV
- xorps $rndkey1,$inout7
- movups $inout0,($out)
- movups $inout1,0x10($out)
- movups $inout2,0x20($out)
- movups $inout3,0x30($out)
- mov $rnds_,$rounds # restore $rounds
- movups $inout4,0x40($out)
- mov $key_,$key # restore $key
- movups $inout5,0x50($out)
- lea 0x80($inp),$inp
- movups $inout6,0x60($out)
- lea 0x70($out),$out
sub \$0x80,$len
ja .Lcbc_dec_loop8
movaps $inout7,$inout0
- movaps $rndkey0,$iv
+ lea -0x70($key),$key
add \$0x70,$len
- jle .Lcbc_dec_tail_collected
- movups $inout0,($out)
- lea 1($rnds_,$rnds_),$rounds
+ jle .Lcbc_dec_clear_tail_collected
+ movups $inout7,($out)
lea 0x10($out),$out
+ cmp \$0x50,$len
+ jbe .Lcbc_dec_tail
+
+ movaps $in0,$inout0
+.Lcbc_dec_six_or_seven:
+ cmp \$0x60,$len
+ ja .Lcbc_dec_seven
+
+ movaps $inout5,$inout6
+ call _aesni_decrypt6
+ pxor $iv,$inout0 # ^= IV
+ movaps $inout6,$iv
+ pxor $in0,$inout1
+ movdqu $inout0,($out)
+ pxor $in1,$inout2
+ movdqu $inout1,0x10($out)
+ pxor $inout1,$inout1 # clear register bank
+ pxor $in2,$inout3
+ movdqu $inout2,0x20($out)
+ pxor $inout2,$inout2
+ pxor $in3,$inout4
+ movdqu $inout3,0x30($out)
+ pxor $inout3,$inout3
+ pxor $in4,$inout5
+ movdqu $inout4,0x40($out)
+ pxor $inout4,$inout4
+ lea 0x50($out),$out
+ movdqa $inout5,$inout0
+ pxor $inout5,$inout5
+ jmp .Lcbc_dec_tail_collected
+
+.align 16
+.Lcbc_dec_seven:
+ movups 0x60($inp),$inout6
+ xorps $inout7,$inout7
+ call _aesni_decrypt8
+ movups 0x50($inp),$inout7
+ pxor $iv,$inout0 # ^= IV
+ movups 0x60($inp),$iv
+ pxor $in0,$inout1
+ movdqu $inout0,($out)
+ pxor $in1,$inout2
+ movdqu $inout1,0x10($out)
+ pxor $inout1,$inout1 # clear register bank
+ pxor $in2,$inout3
+ movdqu $inout2,0x20($out)
+ pxor $inout2,$inout2
+ pxor $in3,$inout4
+ movdqu $inout3,0x30($out)
+ pxor $inout3,$inout3
+ pxor $in4,$inout5
+ movdqu $inout4,0x40($out)
+ pxor $inout4,$inout4
+ pxor $inout7,$inout6
+ movdqu $inout5,0x50($out)
+ pxor $inout5,$inout5
+ lea 0x60($out),$out
+ movdqa $inout6,$inout0
+ pxor $inout6,$inout6
+ pxor $inout7,$inout7
+ jmp .Lcbc_dec_tail_collected
+
+.align 16
+.Lcbc_dec_loop6:
+ movups $inout5,($out)
+ lea 0x10($out),$out
+ movdqu 0x00($inp),$inout0 # load input
+ movdqu 0x10($inp),$inout1
+ movdqa $inout0,$in0
+ movdqu 0x20($inp),$inout2
+ movdqa $inout1,$in1
+ movdqu 0x30($inp),$inout3
+ movdqa $inout2,$in2
+ movdqu 0x40($inp),$inout4
+ movdqa $inout3,$in3
+ movdqu 0x50($inp),$inout5
+ movdqa $inout4,$in4
+.Lcbc_dec_loop6_enter:
+ lea 0x60($inp),$inp
+ movdqa $inout5,$inout6
+
+ call _aesni_decrypt6
+
+ pxor $iv,$inout0 # ^= IV
+ movdqa $inout6,$iv
+ pxor $in0,$inout1
+ movdqu $inout0,($out)
+ pxor $in1,$inout2
+ movdqu $inout1,0x10($out)
+ pxor $in2,$inout3
+ movdqu $inout2,0x20($out)
+ pxor $in3,$inout4
+ mov $key_,$key
+ movdqu $inout3,0x30($out)
+ pxor $in4,$inout5
+ mov $rnds_,$rounds
+ movdqu $inout4,0x40($out)
+ lea 0x50($out),$out
+ sub \$0x60,$len
+ ja .Lcbc_dec_loop6
+
+ movdqa $inout5,$inout0
+ add \$0x50,$len
+ jle .Lcbc_dec_clear_tail_collected
+ movups $inout5,($out)
+ lea 0x10($out),$out
+
.Lcbc_dec_tail:
movups ($inp),$inout0
- movaps $inout0,$in0
- cmp \$0x10,$len
- jbe .Lcbc_dec_one
+ sub \$0x10,$len
+ jbe .Lcbc_dec_one # $len is 1*16 or less
movups 0x10($inp),$inout1
- movaps $inout1,$in1
- cmp \$0x20,$len
- jbe .Lcbc_dec_two
+ movaps $inout0,$in0
+ sub \$0x10,$len
+ jbe .Lcbc_dec_two # $len is 2*16 or less
movups 0x20($inp),$inout2
- movaps $inout2,$in2
- cmp \$0x30,$len
- jbe .Lcbc_dec_three
+ movaps $inout1,$in1
+ sub \$0x10,$len
+ jbe .Lcbc_dec_three # $len is 3*16 or less
movups 0x30($inp),$inout3
- cmp \$0x40,$len
- jbe .Lcbc_dec_four
-
- movups 0x40($inp),$inout4
- cmp \$0x50,$len
- jbe .Lcbc_dec_five
-
- movups 0x50($inp),$inout5
- cmp \$0x60,$len
- jbe .Lcbc_dec_six
+ movaps $inout2,$in2
+ sub \$0x10,$len
+ jbe .Lcbc_dec_four # $len is 4*16 or less
- movups 0x60($inp),$inout6
- movaps $iv,$reserved(%rsp) # save IV
- call _aesni_decrypt8
- movups ($inp),$rndkey1
- movups 0x10($inp),$rndkey0
- xorps $reserved(%rsp),$inout0 # ^= IV
- xorps $rndkey1,$inout1
- movups 0x20($inp),$rndkey1
- xorps $rndkey0,$inout2
- movups 0x30($inp),$rndkey0
- xorps $rndkey1,$inout3
- movups 0x40($inp),$rndkey1
- xorps $rndkey0,$inout4
- movups 0x50($inp),$rndkey0
- xorps $rndkey1,$inout5
- movups 0x60($inp),$iv # IV
- xorps $rndkey0,$inout6
- movups $inout0,($out)
- movups $inout1,0x10($out)
- movups $inout2,0x20($out)
- movups $inout3,0x30($out)
- movups $inout4,0x40($out)
- movups $inout5,0x50($out)
- lea 0x60($out),$out
- movaps $inout6,$inout0
- sub \$0x70,$len
+ movups 0x40($inp),$inout4 # $len is 5*16 or less
+ movaps $inout3,$in3
+ movaps $inout4,$in4
+ xorps $inout5,$inout5
+ call _aesni_decrypt6
+ pxor $iv,$inout0
+ movaps $in4,$iv
+ pxor $in0,$inout1
+ movdqu $inout0,($out)
+ pxor $in1,$inout2
+ movdqu $inout1,0x10($out)
+ pxor $inout1,$inout1 # clear register bank
+ pxor $in2,$inout3
+ movdqu $inout2,0x20($out)
+ pxor $inout2,$inout2
+ pxor $in3,$inout4
+ movdqu $inout3,0x30($out)
+ pxor $inout3,$inout3
+ lea 0x40($out),$out
+ movdqa $inout4,$inout0
+ pxor $inout4,$inout4
+ pxor $inout5,$inout5
+ sub \$0x10,$len
jmp .Lcbc_dec_tail_collected
+
.align 16
.Lcbc_dec_one:
+ movaps $inout0,$in0
___
&aesni_generate1("dec",$key,$rounds);
$code.=<<___;
xorps $iv,$inout0
movaps $in0,$iv
- sub \$0x10,$len
jmp .Lcbc_dec_tail_collected
.align 16
.Lcbc_dec_two:
- xorps $inout2,$inout2
- call _aesni_decrypt3
- xorps $iv,$inout0
- xorps $in0,$inout1
- movups $inout0,($out)
+ movaps $inout1,$in1
+ call _aesni_decrypt2
+ pxor $iv,$inout0
movaps $in1,$iv
- movaps $inout1,$inout0
+ pxor $in0,$inout1
+ movdqu $inout0,($out)
+ movdqa $inout1,$inout0
+ pxor $inout1,$inout1 # clear register bank
lea 0x10($out),$out
- sub \$0x20,$len
jmp .Lcbc_dec_tail_collected
.align 16
.Lcbc_dec_three:
+ movaps $inout2,$in2
call _aesni_decrypt3
- xorps $iv,$inout0
- xorps $in0,$inout1
- movups $inout0,($out)
- xorps $in1,$inout2
- movups $inout1,0x10($out)
+ pxor $iv,$inout0
movaps $in2,$iv
- movaps $inout2,$inout0
+ pxor $in0,$inout1
+ movdqu $inout0,($out)
+ pxor $in1,$inout2
+ movdqu $inout1,0x10($out)
+ pxor $inout1,$inout1 # clear register bank
+ movdqa $inout2,$inout0
+ pxor $inout2,$inout2
lea 0x20($out),$out
- sub \$0x30,$len
jmp .Lcbc_dec_tail_collected
.align 16
.Lcbc_dec_four:
+ movaps $inout3,$in3
call _aesni_decrypt4
- xorps $iv,$inout0
- movups 0x30($inp),$iv
- xorps $in0,$inout1
- movups $inout0,($out)
- xorps $in1,$inout2
- movups $inout1,0x10($out)
- xorps $in2,$inout3
- movups $inout2,0x20($out)
- movaps $inout3,$inout0
+ pxor $iv,$inout0
+ movaps $in3,$iv
+ pxor $in0,$inout1
+ movdqu $inout0,($out)
+ pxor $in1,$inout2
+ movdqu $inout1,0x10($out)
+ pxor $inout1,$inout1 # clear register bank
+ pxor $in2,$inout3
+ movdqu $inout2,0x20($out)
+ pxor $inout2,$inout2
+ movdqa $inout3,$inout0
+ pxor $inout3,$inout3
lea 0x30($out),$out
- sub \$0x40,$len
- jmp .Lcbc_dec_tail_collected
-.align 16
-.Lcbc_dec_five:
- xorps $inout5,$inout5
- call _aesni_decrypt6
- movups 0x10($inp),$rndkey1
- movups 0x20($inp),$rndkey0
- xorps $iv,$inout0
- xorps $in0,$inout1
- xorps $rndkey1,$inout2
- movups 0x30($inp),$rndkey1
- xorps $rndkey0,$inout3
- movups 0x40($inp),$iv
- xorps $rndkey1,$inout4
- movups $inout0,($out)
- movups $inout1,0x10($out)
- movups $inout2,0x20($out)
- movups $inout3,0x30($out)
- lea 0x40($out),$out
- movaps $inout4,$inout0
- sub \$0x50,$len
- jmp .Lcbc_dec_tail_collected
-.align 16
-.Lcbc_dec_six:
- call _aesni_decrypt6
- movups 0x10($inp),$rndkey1
- movups 0x20($inp),$rndkey0
- xorps $iv,$inout0
- xorps $in0,$inout1
- xorps $rndkey1,$inout2
- movups 0x30($inp),$rndkey1
- xorps $rndkey0,$inout3
- movups 0x40($inp),$rndkey0
- xorps $rndkey1,$inout4
- movups 0x50($inp),$iv
- xorps $rndkey0,$inout5
- movups $inout0,($out)
- movups $inout1,0x10($out)
- movups $inout2,0x20($out)
- movups $inout3,0x30($out)
- movups $inout4,0x40($out)
- lea 0x50($out),$out
- movaps $inout5,$inout0
- sub \$0x60,$len
jmp .Lcbc_dec_tail_collected
+
.align 16
+.Lcbc_dec_clear_tail_collected:
+ pxor $inout1,$inout1 # clear register bank
+ pxor $inout2,$inout2
+ pxor $inout3,$inout3
+___
+$code.=<<___ if (!$win64);
+ pxor $inout4,$inout4 # %xmm6..9
+ pxor $inout5,$inout5
+ pxor $inout6,$inout6
+ pxor $inout7,$inout7
+___
+$code.=<<___;
.Lcbc_dec_tail_collected:
- and \$15,$len
movups $iv,($ivp)
+ and \$15,$len
jnz .Lcbc_dec_tail_partial
movups $inout0,($out)
+ pxor $inout0,$inout0
jmp .Lcbc_dec_ret
.align 16
.Lcbc_dec_tail_partial:
- movaps $inout0,$reserved(%rsp)
+ movaps $inout0,(%rsp)
+ pxor $inout0,$inout0
mov \$16,%rcx
mov $out,%rdi
sub $len,%rcx
- lea $reserved(%rsp),%rsi
- .long 0x9066A4F3 # rep movsb
+ lea (%rsp),%rsi
+ .long 0x9066A4F3 # rep movsb
+ movdqa $inout0,(%rsp)
.Lcbc_dec_ret:
+ xorps $rndkey0,$rndkey0 # %xmm0
+ pxor $rndkey1,$rndkey1
___
$code.=<<___ if ($win64);
- movaps (%rsp),%xmm6
- movaps 0x10(%rsp),%xmm7
- movaps 0x20(%rsp),%xmm8
- movaps 0x30(%rsp),%xmm9
- lea 0x58(%rsp),%rsp
+ movaps 0x10(%rsp),%xmm6
+ movaps %xmm0,0x10(%rsp) # clear stack
+ movaps 0x20(%rsp),%xmm7
+ movaps %xmm0,0x20(%rsp)
+ movaps 0x30(%rsp),%xmm8
+ movaps %xmm0,0x30(%rsp)
+ movaps 0x40(%rsp),%xmm9
+ movaps %xmm0,0x40(%rsp)
+ movaps 0x50(%rsp),%xmm10
+ movaps %xmm0,0x50(%rsp)
+ movaps 0x60(%rsp),%xmm11
+ movaps %xmm0,0x60(%rsp)
+ movaps 0x70(%rsp),%xmm12
+ movaps %xmm0,0x70(%rsp)
+ movaps 0x80(%rsp),%xmm13
+ movaps %xmm0,0x80(%rsp)
+ movaps 0x90(%rsp),%xmm14
+ movaps %xmm0,0x90(%rsp)
+ movaps 0xa0(%rsp),%xmm15
+ movaps %xmm0,0xa0(%rsp)
___
$code.=<<___;
+ lea (%rbp),%rsp
+ pop %rbp
.Lcbc_ret:
ret
.size ${PREFIX}_cbc_encrypt,.-${PREFIX}_cbc_encrypt
___
}
-# int $PREFIX_set_[en|de]crypt_key (const unsigned char *userKey,
+# int ${PREFIX}_set_decrypt_key(const unsigned char *inp,
# int bits, AES_KEY *key)
+#
+# input: $inp user-supplied key
+# $bits $inp length in bits
+# $key pointer to key schedule
+# output: %eax 0 denoting success, -1 or -2 - failure (see C)
+# *$key key schedule
+#
{ my ($inp,$bits,$key) = @_4args;
$bits =~ s/%r/%e/;
@@ -2510,7 +3291,9 @@ ${PREFIX}_set_decrypt_key:
$movkey ($key),%xmm0 # inverse middle
aesimc %xmm0,%xmm0
+ pxor %xmm1,%xmm1
$movkey %xmm0,($inp)
+ pxor %xmm0,%xmm0
.Ldec_key_ret:
add \$8,%rsp
ret
@@ -2527,6 +3310,22 @@ ___
# Agressively optimized in respect to aeskeygenassist's critical path
# and is contained in %xmm0-5 to meet Win64 ABI requirement.
#
+# int ${PREFIX}_set_encrypt_key(const unsigned char *inp,
+# int bits, AES_KEY * const key);
+#
+# input: $inp user-supplied key
+# $bits $inp length in bits
+# $key pointer to key schedule
+# output: %eax 0 denoting success, -1 or -2 - failure (see C)
+# $bits rounds-1 (used in aesni_set_decrypt_key)
+# *$key key schedule
+# $key pointer to key schedule (used in
+# aesni_set_decrypt_key)
+#
+# Subroutine is frame-less, which means that only volatile registers
+# are used. Note that it's declared "abi-omnipotent", which means that
+# amount of volatile registers is smaller on Windows.
+#
$code.=<<___;
.globl ${PREFIX}_set_encrypt_key
.type ${PREFIX}_set_encrypt_key,\@abi-omnipotent
@@ -2540,9 +3339,11 @@ __aesni_set_encrypt_key:
test $key,$key
jz .Lenc_key_ret
+ mov \$`1<<28|1<<11`,%r10d # AVX and XOP bits
movups ($inp),%xmm0 # pull first 128 bits of *userKey
xorps %xmm4,%xmm4 # low dword of xmm4 is assumed 0
- lea 16($key),%rax
+ and OPENSSL_ia32cap_P+4(%rip),%r10d
+ lea 16($key),%rax # %rax is used as modifiable copy of $key
cmp \$256,$bits
je .L14rounds
cmp \$192,$bits
@@ -2552,6 +3353,9 @@ __aesni_set_encrypt_key:
.L10rounds:
mov \$9,$bits # 10 rounds for 128-bit key
+ cmp \$`1<<28`,%r10d # AVX, bit no XOP
+ je .L10rounds_alt
+
$movkey %xmm0,($key) # round 0
aeskeygenassist \$0x1,%xmm0,%xmm1 # round 1
call .Lkey_expansion_128_cold
@@ -2579,9 +3383,79 @@ __aesni_set_encrypt_key:
jmp .Lenc_key_ret
.align 16
+.L10rounds_alt:
+ movdqa .Lkey_rotate(%rip),%xmm5
+ mov \$8,%r10d
+ movdqa .Lkey_rcon1(%rip),%xmm4
+ movdqa %xmm0,%xmm2
+ movdqu %xmm0,($key)
+ jmp .Loop_key128
+
+.align 16
+.Loop_key128:
+ pshufb %xmm5,%xmm0
+ aesenclast %xmm4,%xmm0
+ pslld \$1,%xmm4
+ lea 16(%rax),%rax
+
+ movdqa %xmm2,%xmm3
+ pslldq \$4,%xmm2
+ pxor %xmm2,%xmm3
+ pslldq \$4,%xmm2
+ pxor %xmm2,%xmm3
+ pslldq \$4,%xmm2
+ pxor %xmm3,%xmm2
+
+ pxor %xmm2,%xmm0
+ movdqu %xmm0,-16(%rax)
+ movdqa %xmm0,%xmm2
+
+ dec %r10d
+ jnz .Loop_key128
+
+ movdqa .Lkey_rcon1b(%rip),%xmm4
+
+ pshufb %xmm5,%xmm0
+ aesenclast %xmm4,%xmm0
+ pslld \$1,%xmm4
+
+ movdqa %xmm2,%xmm3
+ pslldq \$4,%xmm2
+ pxor %xmm2,%xmm3
+ pslldq \$4,%xmm2
+ pxor %xmm2,%xmm3
+ pslldq \$4,%xmm2
+ pxor %xmm3,%xmm2
+
+ pxor %xmm2,%xmm0
+ movdqu %xmm0,(%rax)
+
+ movdqa %xmm0,%xmm2
+ pshufb %xmm5,%xmm0
+ aesenclast %xmm4,%xmm0
+
+ movdqa %xmm2,%xmm3
+ pslldq \$4,%xmm2
+ pxor %xmm2,%xmm3
+ pslldq \$4,%xmm2
+ pxor %xmm2,%xmm3
+ pslldq \$4,%xmm2
+ pxor %xmm3,%xmm2
+
+ pxor %xmm2,%xmm0
+ movdqu %xmm0,16(%rax)
+
+ mov $bits,96(%rax) # 240($key)
+ xor %eax,%eax
+ jmp .Lenc_key_ret
+
+.align 16
.L12rounds:
movq 16($inp),%xmm2 # remaining 1/3 of *userKey
mov \$11,$bits # 12 rounds for 192
+ cmp \$`1<<28`,%r10d # AVX, but no XOP
+ je .L12rounds_alt
+
$movkey %xmm0,($key) # round 0
aeskeygenassist \$0x1,%xmm2,%xmm1 # round 1,2
call .Lkey_expansion_192a_cold
@@ -2605,10 +3479,54 @@ __aesni_set_encrypt_key:
jmp .Lenc_key_ret
.align 16
+.L12rounds_alt:
+ movdqa .Lkey_rotate192(%rip),%xmm5
+ movdqa .Lkey_rcon1(%rip),%xmm4
+ mov \$8,%r10d
+ movdqu %xmm0,($key)
+ jmp .Loop_key192
+
+.align 16
+.Loop_key192:
+ movq %xmm2,0(%rax)
+ movdqa %xmm2,%xmm1
+ pshufb %xmm5,%xmm2
+ aesenclast %xmm4,%xmm2
+ pslld \$1, %xmm4
+ lea 24(%rax),%rax
+
+ movdqa %xmm0,%xmm3
+ pslldq \$4,%xmm0
+ pxor %xmm0,%xmm3
+ pslldq \$4,%xmm0
+ pxor %xmm0,%xmm3
+ pslldq \$4,%xmm0
+ pxor %xmm3,%xmm0
+
+ pshufd \$0xff,%xmm0,%xmm3
+ pxor %xmm1,%xmm3
+ pslldq \$4,%xmm1
+ pxor %xmm1,%xmm3
+
+ pxor %xmm2,%xmm0
+ pxor %xmm3,%xmm2
+ movdqu %xmm0,-16(%rax)
+
+ dec %r10d
+ jnz .Loop_key192
+
+ mov $bits,32(%rax) # 240($key)
+ xor %eax,%eax
+ jmp .Lenc_key_ret
+
+.align 16
.L14rounds:
movups 16($inp),%xmm2 # remaning half of *userKey
mov \$13,$bits # 14 rounds for 256
lea 16(%rax),%rax
+ cmp \$`1<<28`,%r10d # AVX, but no XOP
+ je .L14rounds_alt
+
$movkey %xmm0,($key) # round 0
$movkey %xmm2,16($key) # round 1
aeskeygenassist \$0x1,%xmm2,%xmm1 # round 2
@@ -2643,9 +3561,69 @@ __aesni_set_encrypt_key:
jmp .Lenc_key_ret
.align 16
+.L14rounds_alt:
+ movdqa .Lkey_rotate(%rip),%xmm5
+ movdqa .Lkey_rcon1(%rip),%xmm4
+ mov \$7,%r10d
+ movdqu %xmm0,0($key)
+ movdqa %xmm2,%xmm1
+ movdqu %xmm2,16($key)
+ jmp .Loop_key256
+
+.align 16
+.Loop_key256:
+ pshufb %xmm5,%xmm2
+ aesenclast %xmm4,%xmm2
+
+ movdqa %xmm0,%xmm3
+ pslldq \$4,%xmm0
+ pxor %xmm0,%xmm3
+ pslldq \$4,%xmm0
+ pxor %xmm0,%xmm3
+ pslldq \$4,%xmm0
+ pxor %xmm3,%xmm0
+ pslld \$1,%xmm4
+
+ pxor %xmm2,%xmm0
+ movdqu %xmm0,(%rax)
+
+ dec %r10d
+ jz .Ldone_key256
+
+ pshufd \$0xff,%xmm0,%xmm2
+ pxor %xmm3,%xmm3
+ aesenclast %xmm3,%xmm2
+
+ movdqa %xmm1,%xmm3
+ pslldq \$4,%xmm1
+ pxor %xmm1,%xmm3
+ pslldq \$4,%xmm1
+ pxor %xmm1,%xmm3
+ pslldq \$4,%xmm1
+ pxor %xmm3,%xmm1
+
+ pxor %xmm1,%xmm2
+ movdqu %xmm2,16(%rax)
+ lea 32(%rax),%rax
+ movdqa %xmm2,%xmm1
+
+ jmp .Loop_key256
+
+.Ldone_key256:
+ mov $bits,16(%rax) # 240($key)
+ xor %eax,%eax
+ jmp .Lenc_key_ret
+
+.align 16
.Lbad_keybits:
mov \$-2,%rax
.Lenc_key_ret:
+ pxor %xmm0,%xmm0
+ pxor %xmm1,%xmm1
+ pxor %xmm2,%xmm2
+ pxor %xmm3,%xmm3
+ pxor %xmm4,%xmm4
+ pxor %xmm5,%xmm5
add \$8,%rsp
ret
.LSEH_end_set_encrypt_key:
@@ -2733,6 +3711,16 @@ $code.=<<___;
.long 1,0,0,0
.Lxts_magic:
.long 0x87,0,1,0
+.Lincrement1:
+ .byte 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
+.Lkey_rotate:
+ .long 0x0c0f0e0d,0x0c0f0e0d,0x0c0f0e0d,0x0c0f0e0d
+.Lkey_rotate192:
+ .long 0x04070605,0x04070605,0x04070605,0x04070605
+.Lkey_rcon1:
+ .long 1,1,1,1
+.Lkey_rcon1b:
+ .long 0x1b,0x1b,0x1b,0x1b
.asciz "AES for Intel AES-NI, CRYPTOGAMS by <appro\@openssl.org>"
.align 64
@@ -2791,45 +3779,9 @@ ecb_ccm64_se_handler:
jmp .Lcommon_seh_tail
.size ecb_ccm64_se_handler,.-ecb_ccm64_se_handler
-.type ctr32_se_handler,\@abi-omnipotent
+.type ctr_xts_se_handler,\@abi-omnipotent
.align 16
-ctr32_se_handler:
- push %rsi
- push %rdi
- push %rbx
- push %rbp
- push %r12
- push %r13
- push %r14
- push %r15
- pushfq
- sub \$64,%rsp
-
- mov 120($context),%rax # pull context->Rax
- mov 248($context),%rbx # pull context->Rip
-
- lea .Lctr32_body(%rip),%r10
- cmp %r10,%rbx # context->Rip<"prologue" label
- jb .Lcommon_seh_tail
-
- mov 152($context),%rax # pull context->Rsp
-
- lea .Lctr32_ret(%rip),%r10
- cmp %r10,%rbx
- jae .Lcommon_seh_tail
-
- lea 0x20(%rax),%rsi # %xmm save area
- lea 512($context),%rdi # &context.Xmm6
- mov \$20,%ecx # 10*sizeof(%xmm0)/sizeof(%rax)
- .long 0xa548f3fc # cld; rep movsq
- lea 0xc8(%rax),%rax # adjust stack pointer
-
- jmp .Lcommon_seh_tail
-.size ctr32_se_handler,.-ctr32_se_handler
-
-.type xts_se_handler,\@abi-omnipotent
-.align 16
-xts_se_handler:
+ctr_xts_se_handler:
push %rsi
push %rdi
push %rbx
@@ -2859,14 +3811,14 @@ xts_se_handler:
cmp %r10,%rbx # context->Rip>=epilogue label
jae .Lcommon_seh_tail
- lea 0x60(%rax),%rsi # %xmm save area
+ mov 160($context),%rax # pull context->Rbp
+ lea -0xa0(%rax),%rsi # %xmm save area
lea 512($context),%rdi # & context.Xmm6
mov \$20,%ecx # 10*sizeof(%xmm0)/sizeof(%rax)
.long 0xa548f3fc # cld; rep movsq
- lea 0x68+160(%rax),%rax # adjust stack pointer
- jmp .Lcommon_seh_tail
-.size xts_se_handler,.-xts_se_handler
+ jmp .Lcommon_rbp_tail
+.size ctr_xts_se_handler,.-ctr_xts_se_handler
___
$code.=<<___;
.type cbc_se_handler,\@abi-omnipotent
@@ -2886,7 +3838,7 @@ cbc_se_handler:
mov 152($context),%rax # pull context->Rsp
mov 248($context),%rbx # pull context->Rip
- lea .Lcbc_decrypt(%rip),%r10
+ lea .Lcbc_decrypt_bulk(%rip),%r10
cmp %r10,%rbx # context->Rip<"prologue" label
jb .Lcommon_seh_tail
@@ -2898,11 +3850,16 @@ cbc_se_handler:
cmp %r10,%rbx # context->Rip>="epilogue" label
jae .Lcommon_seh_tail
- lea 0(%rax),%rsi # top of stack
+ lea 16(%rax),%rsi # %xmm save area
lea 512($context),%rdi # &context.Xmm6
- mov \$8,%ecx # 4*sizeof(%xmm0)/sizeof(%rax)
+ mov \$20,%ecx # 10*sizeof(%xmm0)/sizeof(%rax)
.long 0xa548f3fc # cld; rep movsq
- lea 0x58(%rax),%rax # adjust stack pointer
+
+.Lcommon_rbp_tail:
+ mov 160($context),%rax # pull context->Rbp
+ mov (%rax),%rbp # restore saved %rbp
+ lea 8(%rax),%rax # adjust stack pointer
+ mov %rbp,160($context) # restore context->Rbp
jmp .Lcommon_seh_tail
.Lrestore_cbc_rax:
@@ -3006,14 +3963,15 @@ $code.=<<___ if ($PREFIX eq "aesni");
.rva .Lccm64_dec_body,.Lccm64_dec_ret # HandlerData[]
.LSEH_info_ctr32:
.byte 9,0,0,0
- .rva ctr32_se_handler
+ .rva ctr_xts_se_handler
+ .rva .Lctr32_body,.Lctr32_epilogue # HandlerData[]
.LSEH_info_xts_enc:
.byte 9,0,0,0
- .rva xts_se_handler
+ .rva ctr_xts_se_handler
.rva .Lxts_enc_body,.Lxts_enc_epilogue # HandlerData[]
.LSEH_info_xts_dec:
.byte 9,0,0,0
- .rva xts_se_handler
+ .rva ctr_xts_se_handler
.rva .Lxts_dec_body,.Lxts_dec_epilogue # HandlerData[]
___
$code.=<<___;
@@ -3060,11 +4018,30 @@ sub aesni {
push @opcode,0xc0|($2&7)|(($3&7)<<3); # ModR/M
return ".byte\t".join(',',@opcode);
}
+ elsif ($line=~/(aes[a-z]+)\s+([0x1-9a-fA-F]*)\(%rsp\),\s*%xmm([0-9]+)/) {
+ my %opcodelet = (
+ "aesenc" => 0xdc, "aesenclast" => 0xdd,
+ "aesdec" => 0xde, "aesdeclast" => 0xdf
+ );
+ return undef if (!defined($opcodelet{$1}));
+ my $off = $2;
+ push @opcode,0x44 if ($3>=8);
+ push @opcode,0x0f,0x38,$opcodelet{$1};
+ push @opcode,0x44|(($3&7)<<3),0x24; # ModR/M
+ push @opcode,($off=~/^0/?oct($off):$off)&0xff;
+ return ".byte\t".join(',',@opcode);
+ }
return $line;
}
+sub movbe {
+ ".byte 0x0f,0x38,0xf1,0x44,0x24,".shift;
+}
+
$code =~ s/\`([^\`]*)\`/eval($1)/gem;
$code =~ s/\b(aes.*%xmm[0-9]+).*$/aesni($1)/gem;
+#$code =~ s/\bmovbe\s+%eax/bswap %eax; mov %eax/gm; # debugging artefact
+$code =~ s/\bmovbe\s+%eax,\s*([0-9]+)\(%rsp\)/movbe($1)/gem;
print $code;
diff --git a/crypto/openssl/crypto/aes/asm/aesp8-ppc.pl b/crypto/openssl/crypto/aes/asm/aesp8-ppc.pl
new file mode 100755
index 0000000..a1891cc
--- /dev/null
+++ b/crypto/openssl/crypto/aes/asm/aesp8-ppc.pl
@@ -0,0 +1,1942 @@
+#!/usr/bin/env perl
+#
+# ====================================================================
+# Written by Andy Polyakov <appro@openssl.org> for the OpenSSL
+# project. The module is, however, dual licensed under OpenSSL and
+# CRYPTOGAMS licenses depending on where you obtain it. For further
+# details see http://www.openssl.org/~appro/cryptogams/.
+# ====================================================================
+#
+# This module implements support for AES instructions as per PowerISA
+# specification version 2.07, first implemented by POWER8 processor.
+# The module is endian-agnostic in sense that it supports both big-
+# and little-endian cases. Data alignment in parallelizable modes is
+# handled with VSX loads and stores, which implies MSR.VSX flag being
+# set. It should also be noted that ISA specification doesn't prohibit
+# alignment exceptions for these instructions on page boundaries.
+# Initially alignment was handled in pure AltiVec/VMX way [when data
+# is aligned programmatically, which in turn guarantees exception-
+# free execution], but it turned to hamper performance when vcipher
+# instructions are interleaved. It's reckoned that eventual
+# misalignment penalties at page boundaries are in average lower
+# than additional overhead in pure AltiVec approach.
+
+$flavour = shift;
+
+if ($flavour =~ /64/) {
+ $SIZE_T =8;
+ $LRSAVE =2*$SIZE_T;
+ $STU ="stdu";
+ $POP ="ld";
+ $PUSH ="std";
+ $UCMP ="cmpld";
+ $SHL ="sldi";
+} elsif ($flavour =~ /32/) {
+ $SIZE_T =4;
+ $LRSAVE =$SIZE_T;
+ $STU ="stwu";
+ $POP ="lwz";
+ $PUSH ="stw";
+ $UCMP ="cmplw";
+ $SHL ="slwi";
+} else { die "nonsense $flavour"; }
+
+$LITTLE_ENDIAN = ($flavour=~/le$/) ? $SIZE_T : 0;
+
+$0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1;
+( $xlate="${dir}ppc-xlate.pl" and -f $xlate ) or
+( $xlate="${dir}../../perlasm/ppc-xlate.pl" and -f $xlate) or
+die "can't locate ppc-xlate.pl";
+
+open STDOUT,"| $^X $xlate $flavour ".shift || die "can't call $xlate: $!";
+
+$FRAME=8*$SIZE_T;
+$prefix="aes_p8";
+
+$sp="r1";
+$vrsave="r12";
+
+#########################################################################
+{{{ # Key setup procedures #
+my ($inp,$bits,$out,$ptr,$cnt,$rounds)=map("r$_",(3..8));
+my ($zero,$in0,$in1,$key,$rcon,$mask,$tmp)=map("v$_",(0..6));
+my ($stage,$outperm,$outmask,$outhead,$outtail)=map("v$_",(7..11));
+
+$code.=<<___;
+.machine "any"
+
+.text
+
+.align 7
+rcon:
+.long 0x01000000, 0x01000000, 0x01000000, 0x01000000 ?rev
+.long 0x1b000000, 0x1b000000, 0x1b000000, 0x1b000000 ?rev
+.long 0x0d0e0f0c, 0x0d0e0f0c, 0x0d0e0f0c, 0x0d0e0f0c ?rev
+.long 0,0,0,0 ?asis
+Lconsts:
+ mflr r0
+ bcl 20,31,\$+4
+ mflr $ptr #vvvvv "distance between . and rcon
+ addi $ptr,$ptr,-0x48
+ mtlr r0
+ blr
+ .long 0
+ .byte 0,12,0x14,0,0,0,0,0
+.asciz "AES for PowerISA 2.07, CRYPTOGAMS by <appro\@openssl.org>"
+
+.globl .${prefix}_set_encrypt_key
+.align 5
+.${prefix}_set_encrypt_key:
+Lset_encrypt_key:
+ mflr r11
+ $PUSH r11,$LRSAVE($sp)
+
+ li $ptr,-1
+ ${UCMP}i $inp,0
+ beq- Lenc_key_abort # if ($inp==0) return -1;
+ ${UCMP}i $out,0
+ beq- Lenc_key_abort # if ($out==0) return -1;
+ li $ptr,-2
+ cmpwi $bits,128
+ blt- Lenc_key_abort
+ cmpwi $bits,256
+ bgt- Lenc_key_abort
+ andi. r0,$bits,0x3f
+ bne- Lenc_key_abort
+
+ lis r0,0xfff0
+ mfspr $vrsave,256
+ mtspr 256,r0
+
+ bl Lconsts
+ mtlr r11
+
+ neg r9,$inp
+ lvx $in0,0,$inp
+ addi $inp,$inp,15 # 15 is not typo
+ lvsr $key,0,r9 # borrow $key
+ li r8,0x20
+ cmpwi $bits,192
+ lvx $in1,0,$inp
+ le?vspltisb $mask,0x0f # borrow $mask
+ lvx $rcon,0,$ptr
+ le?vxor $key,$key,$mask # adjust for byte swap
+ lvx $mask,r8,$ptr
+ addi $ptr,$ptr,0x10
+ vperm $in0,$in0,$in1,$key # align [and byte swap in LE]
+ li $cnt,8
+ vxor $zero,$zero,$zero
+ mtctr $cnt
+
+ ?lvsr $outperm,0,$out
+ vspltisb $outmask,-1
+ lvx $outhead,0,$out
+ ?vperm $outmask,$zero,$outmask,$outperm
+
+ blt Loop128
+ addi $inp,$inp,8
+ beq L192
+ addi $inp,$inp,8
+ b L256
+
+.align 4
+Loop128:
+ vperm $key,$in0,$in0,$mask # rotate-n-splat
+ vsldoi $tmp,$zero,$in0,12 # >>32
+ vperm $outtail,$in0,$in0,$outperm # rotate
+ vsel $stage,$outhead,$outtail,$outmask
+ vmr $outhead,$outtail
+ vcipherlast $key,$key,$rcon
+ stvx $stage,0,$out
+ addi $out,$out,16
+
+ vxor $in0,$in0,$tmp
+ vsldoi $tmp,$zero,$tmp,12 # >>32
+ vxor $in0,$in0,$tmp
+ vsldoi $tmp,$zero,$tmp,12 # >>32
+ vxor $in0,$in0,$tmp
+ vadduwm $rcon,$rcon,$rcon
+ vxor $in0,$in0,$key
+ bdnz Loop128
+
+ lvx $rcon,0,$ptr # last two round keys
+
+ vperm $key,$in0,$in0,$mask # rotate-n-splat
+ vsldoi $tmp,$zero,$in0,12 # >>32
+ vperm $outtail,$in0,$in0,$outperm # rotate
+ vsel $stage,$outhead,$outtail,$outmask
+ vmr $outhead,$outtail
+ vcipherlast $key,$key,$rcon
+ stvx $stage,0,$out
+ addi $out,$out,16
+
+ vxor $in0,$in0,$tmp
+ vsldoi $tmp,$zero,$tmp,12 # >>32
+ vxor $in0,$in0,$tmp
+ vsldoi $tmp,$zero,$tmp,12 # >>32
+ vxor $in0,$in0,$tmp
+ vadduwm $rcon,$rcon,$rcon
+ vxor $in0,$in0,$key
+
+ vperm $key,$in0,$in0,$mask # rotate-n-splat
+ vsldoi $tmp,$zero,$in0,12 # >>32
+ vperm $outtail,$in0,$in0,$outperm # rotate
+ vsel $stage,$outhead,$outtail,$outmask
+ vmr $outhead,$outtail
+ vcipherlast $key,$key,$rcon
+ stvx $stage,0,$out
+ addi $out,$out,16
+
+ vxor $in0,$in0,$tmp
+ vsldoi $tmp,$zero,$tmp,12 # >>32
+ vxor $in0,$in0,$tmp
+ vsldoi $tmp,$zero,$tmp,12 # >>32
+ vxor $in0,$in0,$tmp
+ vxor $in0,$in0,$key
+ vperm $outtail,$in0,$in0,$outperm # rotate
+ vsel $stage,$outhead,$outtail,$outmask
+ vmr $outhead,$outtail
+ stvx $stage,0,$out
+
+ addi $inp,$out,15 # 15 is not typo
+ addi $out,$out,0x50
+
+ li $rounds,10
+ b Ldone
+
+.align 4
+L192:
+ lvx $tmp,0,$inp
+ li $cnt,4
+ vperm $outtail,$in0,$in0,$outperm # rotate
+ vsel $stage,$outhead,$outtail,$outmask
+ vmr $outhead,$outtail
+ stvx $stage,0,$out
+ addi $out,$out,16
+ vperm $in1,$in1,$tmp,$key # align [and byte swap in LE]
+ vspltisb $key,8 # borrow $key
+ mtctr $cnt
+ vsububm $mask,$mask,$key # adjust the mask
+
+Loop192:
+ vperm $key,$in1,$in1,$mask # roate-n-splat
+ vsldoi $tmp,$zero,$in0,12 # >>32
+ vcipherlast $key,$key,$rcon
+
+ vxor $in0,$in0,$tmp
+ vsldoi $tmp,$zero,$tmp,12 # >>32
+ vxor $in0,$in0,$tmp
+ vsldoi $tmp,$zero,$tmp,12 # >>32
+ vxor $in0,$in0,$tmp
+
+ vsldoi $stage,$zero,$in1,8
+ vspltw $tmp,$in0,3
+ vxor $tmp,$tmp,$in1
+ vsldoi $in1,$zero,$in1,12 # >>32
+ vadduwm $rcon,$rcon,$rcon
+ vxor $in1,$in1,$tmp
+ vxor $in0,$in0,$key
+ vxor $in1,$in1,$key
+ vsldoi $stage,$stage,$in0,8
+
+ vperm $key,$in1,$in1,$mask # rotate-n-splat
+ vsldoi $tmp,$zero,$in0,12 # >>32
+ vperm $outtail,$stage,$stage,$outperm # rotate
+ vsel $stage,$outhead,$outtail,$outmask
+ vmr $outhead,$outtail
+ vcipherlast $key,$key,$rcon
+ stvx $stage,0,$out
+ addi $out,$out,16
+
+ vsldoi $stage,$in0,$in1,8
+ vxor $in0,$in0,$tmp
+ vsldoi $tmp,$zero,$tmp,12 # >>32
+ vperm $outtail,$stage,$stage,$outperm # rotate
+ vsel $stage,$outhead,$outtail,$outmask
+ vmr $outhead,$outtail
+ vxor $in0,$in0,$tmp
+ vsldoi $tmp,$zero,$tmp,12 # >>32
+ vxor $in0,$in0,$tmp
+ stvx $stage,0,$out
+ addi $out,$out,16
+
+ vspltw $tmp,$in0,3
+ vxor $tmp,$tmp,$in1
+ vsldoi $in1,$zero,$in1,12 # >>32
+ vadduwm $rcon,$rcon,$rcon
+ vxor $in1,$in1,$tmp
+ vxor $in0,$in0,$key
+ vxor $in1,$in1,$key
+ vperm $outtail,$in0,$in0,$outperm # rotate
+ vsel $stage,$outhead,$outtail,$outmask
+ vmr $outhead,$outtail
+ stvx $stage,0,$out
+ addi $inp,$out,15 # 15 is not typo
+ addi $out,$out,16
+ bdnz Loop192
+
+ li $rounds,12
+ addi $out,$out,0x20
+ b Ldone
+
+.align 4
+L256:
+ lvx $tmp,0,$inp
+ li $cnt,7
+ li $rounds,14
+ vperm $outtail,$in0,$in0,$outperm # rotate
+ vsel $stage,$outhead,$outtail,$outmask
+ vmr $outhead,$outtail
+ stvx $stage,0,$out
+ addi $out,$out,16
+ vperm $in1,$in1,$tmp,$key # align [and byte swap in LE]
+ mtctr $cnt
+
+Loop256:
+ vperm $key,$in1,$in1,$mask # rotate-n-splat
+ vsldoi $tmp,$zero,$in0,12 # >>32
+ vperm $outtail,$in1,$in1,$outperm # rotate
+ vsel $stage,$outhead,$outtail,$outmask
+ vmr $outhead,$outtail
+ vcipherlast $key,$key,$rcon
+ stvx $stage,0,$out
+ addi $out,$out,16
+
+ vxor $in0,$in0,$tmp
+ vsldoi $tmp,$zero,$tmp,12 # >>32
+ vxor $in0,$in0,$tmp
+ vsldoi $tmp,$zero,$tmp,12 # >>32
+ vxor $in0,$in0,$tmp
+ vadduwm $rcon,$rcon,$rcon
+ vxor $in0,$in0,$key
+ vperm $outtail,$in0,$in0,$outperm # rotate
+ vsel $stage,$outhead,$outtail,$outmask
+ vmr $outhead,$outtail
+ stvx $stage,0,$out
+ addi $inp,$out,15 # 15 is not typo
+ addi $out,$out,16
+ bdz Ldone
+
+ vspltw $key,$in0,3 # just splat
+ vsldoi $tmp,$zero,$in1,12 # >>32
+ vsbox $key,$key
+
+ vxor $in1,$in1,$tmp
+ vsldoi $tmp,$zero,$tmp,12 # >>32
+ vxor $in1,$in1,$tmp
+ vsldoi $tmp,$zero,$tmp,12 # >>32
+ vxor $in1,$in1,$tmp
+
+ vxor $in1,$in1,$key
+ b Loop256
+
+.align 4
+Ldone:
+ lvx $in1,0,$inp # redundant in aligned case
+ vsel $in1,$outhead,$in1,$outmask
+ stvx $in1,0,$inp
+ li $ptr,0
+ mtspr 256,$vrsave
+ stw $rounds,0($out)
+
+Lenc_key_abort:
+ mr r3,$ptr
+ blr
+ .long 0
+ .byte 0,12,0x14,1,0,0,3,0
+ .long 0
+.size .${prefix}_set_encrypt_key,.-.${prefix}_set_encrypt_key
+
+.globl .${prefix}_set_decrypt_key
+.align 5
+.${prefix}_set_decrypt_key:
+ $STU $sp,-$FRAME($sp)
+ mflr r10
+ $PUSH r10,$FRAME+$LRSAVE($sp)
+ bl Lset_encrypt_key
+ mtlr r10
+
+ cmpwi r3,0
+ bne- Ldec_key_abort
+
+ slwi $cnt,$rounds,4
+ subi $inp,$out,240 # first round key
+ srwi $rounds,$rounds,1
+ add $out,$inp,$cnt # last round key
+ mtctr $rounds
+
+Ldeckey:
+ lwz r0, 0($inp)
+ lwz r6, 4($inp)
+ lwz r7, 8($inp)
+ lwz r8, 12($inp)
+ addi $inp,$inp,16
+ lwz r9, 0($out)
+ lwz r10,4($out)
+ lwz r11,8($out)
+ lwz r12,12($out)
+ stw r0, 0($out)
+ stw r6, 4($out)
+ stw r7, 8($out)
+ stw r8, 12($out)
+ subi $out,$out,16
+ stw r9, -16($inp)
+ stw r10,-12($inp)
+ stw r11,-8($inp)
+ stw r12,-4($inp)
+ bdnz Ldeckey
+
+ xor r3,r3,r3 # return value
+Ldec_key_abort:
+ addi $sp,$sp,$FRAME
+ blr
+ .long 0
+ .byte 0,12,4,1,0x80,0,3,0
+ .long 0
+.size .${prefix}_set_decrypt_key,.-.${prefix}_set_decrypt_key
+___
+}}}
+#########################################################################
+{{{ # Single block en- and decrypt procedures #
+sub gen_block () {
+my $dir = shift;
+my $n = $dir eq "de" ? "n" : "";
+my ($inp,$out,$key,$rounds,$idx)=map("r$_",(3..7));
+
+$code.=<<___;
+.globl .${prefix}_${dir}crypt
+.align 5
+.${prefix}_${dir}crypt:
+ lwz $rounds,240($key)
+ lis r0,0xfc00
+ mfspr $vrsave,256
+ li $idx,15 # 15 is not typo
+ mtspr 256,r0
+
+ lvx v0,0,$inp
+ neg r11,$out
+ lvx v1,$idx,$inp
+ lvsl v2,0,$inp # inpperm
+ le?vspltisb v4,0x0f
+ ?lvsl v3,0,r11 # outperm
+ le?vxor v2,v2,v4
+ li $idx,16
+ vperm v0,v0,v1,v2 # align [and byte swap in LE]
+ lvx v1,0,$key
+ ?lvsl v5,0,$key # keyperm
+ srwi $rounds,$rounds,1
+ lvx v2,$idx,$key
+ addi $idx,$idx,16
+ subi $rounds,$rounds,1
+ ?vperm v1,v1,v2,v5 # align round key
+
+ vxor v0,v0,v1
+ lvx v1,$idx,$key
+ addi $idx,$idx,16
+ mtctr $rounds
+
+Loop_${dir}c:
+ ?vperm v2,v2,v1,v5
+ v${n}cipher v0,v0,v2
+ lvx v2,$idx,$key
+ addi $idx,$idx,16
+ ?vperm v1,v1,v2,v5
+ v${n}cipher v0,v0,v1
+ lvx v1,$idx,$key
+ addi $idx,$idx,16
+ bdnz Loop_${dir}c
+
+ ?vperm v2,v2,v1,v5
+ v${n}cipher v0,v0,v2
+ lvx v2,$idx,$key
+ ?vperm v1,v1,v2,v5
+ v${n}cipherlast v0,v0,v1
+
+ vspltisb v2,-1
+ vxor v1,v1,v1
+ li $idx,15 # 15 is not typo
+ ?vperm v2,v1,v2,v3 # outmask
+ le?vxor v3,v3,v4
+ lvx v1,0,$out # outhead
+ vperm v0,v0,v0,v3 # rotate [and byte swap in LE]
+ vsel v1,v1,v0,v2
+ lvx v4,$idx,$out
+ stvx v1,0,$out
+ vsel v0,v0,v4,v2
+ stvx v0,$idx,$out
+
+ mtspr 256,$vrsave
+ blr
+ .long 0
+ .byte 0,12,0x14,0,0,0,3,0
+ .long 0
+.size .${prefix}_${dir}crypt,.-.${prefix}_${dir}crypt
+___
+}
+&gen_block("en");
+&gen_block("de");
+}}}
+#########################################################################
+{{{ # CBC en- and decrypt procedures #
+my ($inp,$out,$len,$key,$ivp,$enc,$rounds,$idx)=map("r$_",(3..10));
+my ($rndkey0,$rndkey1,$inout,$tmp)= map("v$_",(0..3));
+my ($ivec,$inptail,$inpperm,$outhead,$outperm,$outmask,$keyperm)=
+ map("v$_",(4..10));
+$code.=<<___;
+.globl .${prefix}_cbc_encrypt
+.align 5
+.${prefix}_cbc_encrypt:
+ ${UCMP}i $len,16
+ bltlr-
+
+ cmpwi $enc,0 # test direction
+ lis r0,0xffe0
+ mfspr $vrsave,256
+ mtspr 256,r0
+
+ li $idx,15
+ vxor $rndkey0,$rndkey0,$rndkey0
+ le?vspltisb $tmp,0x0f
+
+ lvx $ivec,0,$ivp # load [unaligned] iv
+ lvsl $inpperm,0,$ivp
+ lvx $inptail,$idx,$ivp
+ le?vxor $inpperm,$inpperm,$tmp
+ vperm $ivec,$ivec,$inptail,$inpperm
+
+ neg r11,$inp
+ ?lvsl $keyperm,0,$key # prepare for unaligned key
+ lwz $rounds,240($key)
+
+ lvsr $inpperm,0,r11 # prepare for unaligned load
+ lvx $inptail,0,$inp
+ addi $inp,$inp,15 # 15 is not typo
+ le?vxor $inpperm,$inpperm,$tmp
+
+ ?lvsr $outperm,0,$out # prepare for unaligned store
+ vspltisb $outmask,-1
+ lvx $outhead,0,$out
+ ?vperm $outmask,$rndkey0,$outmask,$outperm
+ le?vxor $outperm,$outperm,$tmp
+
+ srwi $rounds,$rounds,1
+ li $idx,16
+ subi $rounds,$rounds,1
+ beq Lcbc_dec
+
+Lcbc_enc:
+ vmr $inout,$inptail
+ lvx $inptail,0,$inp
+ addi $inp,$inp,16
+ mtctr $rounds
+ subi $len,$len,16 # len-=16
+
+ lvx $rndkey0,0,$key
+ vperm $inout,$inout,$inptail,$inpperm
+ lvx $rndkey1,$idx,$key
+ addi $idx,$idx,16
+ ?vperm $rndkey0,$rndkey0,$rndkey1,$keyperm
+ vxor $inout,$inout,$rndkey0
+ lvx $rndkey0,$idx,$key
+ addi $idx,$idx,16
+ vxor $inout,$inout,$ivec
+
+Loop_cbc_enc:
+ ?vperm $rndkey1,$rndkey1,$rndkey0,$keyperm
+ vcipher $inout,$inout,$rndkey1
+ lvx $rndkey1,$idx,$key
+ addi $idx,$idx,16
+ ?vperm $rndkey0,$rndkey0,$rndkey1,$keyperm
+ vcipher $inout,$inout,$rndkey0
+ lvx $rndkey0,$idx,$key
+ addi $idx,$idx,16
+ bdnz Loop_cbc_enc
+
+ ?vperm $rndkey1,$rndkey1,$rndkey0,$keyperm
+ vcipher $inout,$inout,$rndkey1
+ lvx $rndkey1,$idx,$key
+ li $idx,16
+ ?vperm $rndkey0,$rndkey0,$rndkey1,$keyperm
+ vcipherlast $ivec,$inout,$rndkey0
+ ${UCMP}i $len,16
+
+ vperm $tmp,$ivec,$ivec,$outperm
+ vsel $inout,$outhead,$tmp,$outmask
+ vmr $outhead,$tmp
+ stvx $inout,0,$out
+ addi $out,$out,16
+ bge Lcbc_enc
+
+ b Lcbc_done
+
+.align 4
+Lcbc_dec:
+ ${UCMP}i $len,128
+ bge _aesp8_cbc_decrypt8x
+ vmr $tmp,$inptail
+ lvx $inptail,0,$inp
+ addi $inp,$inp,16
+ mtctr $rounds
+ subi $len,$len,16 # len-=16
+
+ lvx $rndkey0,0,$key
+ vperm $tmp,$tmp,$inptail,$inpperm
+ lvx $rndkey1,$idx,$key
+ addi $idx,$idx,16
+ ?vperm $rndkey0,$rndkey0,$rndkey1,$keyperm
+ vxor $inout,$tmp,$rndkey0
+ lvx $rndkey0,$idx,$key
+ addi $idx,$idx,16
+
+Loop_cbc_dec:
+ ?vperm $rndkey1,$rndkey1,$rndkey0,$keyperm
+ vncipher $inout,$inout,$rndkey1
+ lvx $rndkey1,$idx,$key
+ addi $idx,$idx,16
+ ?vperm $rndkey0,$rndkey0,$rndkey1,$keyperm
+ vncipher $inout,$inout,$rndkey0
+ lvx $rndkey0,$idx,$key
+ addi $idx,$idx,16
+ bdnz Loop_cbc_dec
+
+ ?vperm $rndkey1,$rndkey1,$rndkey0,$keyperm
+ vncipher $inout,$inout,$rndkey1
+ lvx $rndkey1,$idx,$key
+ li $idx,16
+ ?vperm $rndkey0,$rndkey0,$rndkey1,$keyperm
+ vncipherlast $inout,$inout,$rndkey0
+ ${UCMP}i $len,16
+
+ vxor $inout,$inout,$ivec
+ vmr $ivec,$tmp
+ vperm $tmp,$inout,$inout,$outperm
+ vsel $inout,$outhead,$tmp,$outmask
+ vmr $outhead,$tmp
+ stvx $inout,0,$out
+ addi $out,$out,16
+ bge Lcbc_dec
+
+Lcbc_done:
+ addi $out,$out,-1
+ lvx $inout,0,$out # redundant in aligned case
+ vsel $inout,$outhead,$inout,$outmask
+ stvx $inout,0,$out
+
+ neg $enc,$ivp # write [unaligned] iv
+ li $idx,15 # 15 is not typo
+ vxor $rndkey0,$rndkey0,$rndkey0
+ vspltisb $outmask,-1
+ le?vspltisb $tmp,0x0f
+ ?lvsl $outperm,0,$enc
+ ?vperm $outmask,$rndkey0,$outmask,$outperm
+ le?vxor $outperm,$outperm,$tmp
+ lvx $outhead,0,$ivp
+ vperm $ivec,$ivec,$ivec,$outperm
+ vsel $inout,$outhead,$ivec,$outmask
+ lvx $inptail,$idx,$ivp
+ stvx $inout,0,$ivp
+ vsel $inout,$ivec,$inptail,$outmask
+ stvx $inout,$idx,$ivp
+
+ mtspr 256,$vrsave
+ blr
+ .long 0
+ .byte 0,12,0x14,0,0,0,6,0
+ .long 0
+___
+#########################################################################
+{{ # Optimized CBC decrypt procedure #
+my $key_="r11";
+my ($x00,$x10,$x20,$x30,$x40,$x50,$x60,$x70)=map("r$_",(0,8,26..31));
+ $x00=0 if ($flavour =~ /osx/);
+my ($in0, $in1, $in2, $in3, $in4, $in5, $in6, $in7 )=map("v$_",(0..3,10..13));
+my ($out0,$out1,$out2,$out3,$out4,$out5,$out6,$out7)=map("v$_",(14..21));
+my $rndkey0="v23"; # v24-v25 rotating buffer for first found keys
+ # v26-v31 last 6 round keys
+my ($tmp,$keyperm)=($in3,$in4); # aliases with "caller", redundant assignment
+
+$code.=<<___;
+.align 5
+_aesp8_cbc_decrypt8x:
+ $STU $sp,-`($FRAME+21*16+6*$SIZE_T)`($sp)
+ li r10,`$FRAME+8*16+15`
+ li r11,`$FRAME+8*16+31`
+ stvx v20,r10,$sp # ABI says so
+ addi r10,r10,32
+ stvx v21,r11,$sp
+ addi r11,r11,32
+ stvx v22,r10,$sp
+ addi r10,r10,32
+ stvx v23,r11,$sp
+ addi r11,r11,32
+ stvx v24,r10,$sp
+ addi r10,r10,32
+ stvx v25,r11,$sp
+ addi r11,r11,32
+ stvx v26,r10,$sp
+ addi r10,r10,32
+ stvx v27,r11,$sp
+ addi r11,r11,32
+ stvx v28,r10,$sp
+ addi r10,r10,32
+ stvx v29,r11,$sp
+ addi r11,r11,32
+ stvx v30,r10,$sp
+ stvx v31,r11,$sp
+ li r0,-1
+ stw $vrsave,`$FRAME+21*16-4`($sp) # save vrsave
+ li $x10,0x10
+ $PUSH r26,`$FRAME+21*16+0*$SIZE_T`($sp)
+ li $x20,0x20
+ $PUSH r27,`$FRAME+21*16+1*$SIZE_T`($sp)
+ li $x30,0x30
+ $PUSH r28,`$FRAME+21*16+2*$SIZE_T`($sp)
+ li $x40,0x40
+ $PUSH r29,`$FRAME+21*16+3*$SIZE_T`($sp)
+ li $x50,0x50
+ $PUSH r30,`$FRAME+21*16+4*$SIZE_T`($sp)
+ li $x60,0x60
+ $PUSH r31,`$FRAME+21*16+5*$SIZE_T`($sp)
+ li $x70,0x70
+ mtspr 256,r0
+
+ subi $rounds,$rounds,3 # -4 in total
+ subi $len,$len,128 # bias
+
+ lvx $rndkey0,$x00,$key # load key schedule
+ lvx v30,$x10,$key
+ addi $key,$key,0x20
+ lvx v31,$x00,$key
+ ?vperm $rndkey0,$rndkey0,v30,$keyperm
+ addi $key_,$sp,$FRAME+15
+ mtctr $rounds
+
+Load_cbc_dec_key:
+ ?vperm v24,v30,v31,$keyperm
+ lvx v30,$x10,$key
+ addi $key,$key,0x20
+ stvx v24,$x00,$key_ # off-load round[1]
+ ?vperm v25,v31,v30,$keyperm
+ lvx v31,$x00,$key
+ stvx v25,$x10,$key_ # off-load round[2]
+ addi $key_,$key_,0x20
+ bdnz Load_cbc_dec_key
+
+ lvx v26,$x10,$key
+ ?vperm v24,v30,v31,$keyperm
+ lvx v27,$x20,$key
+ stvx v24,$x00,$key_ # off-load round[3]
+ ?vperm v25,v31,v26,$keyperm
+ lvx v28,$x30,$key
+ stvx v25,$x10,$key_ # off-load round[4]
+ addi $key_,$sp,$FRAME+15 # rewind $key_
+ ?vperm v26,v26,v27,$keyperm
+ lvx v29,$x40,$key
+ ?vperm v27,v27,v28,$keyperm
+ lvx v30,$x50,$key
+ ?vperm v28,v28,v29,$keyperm
+ lvx v31,$x60,$key
+ ?vperm v29,v29,v30,$keyperm
+ lvx $out0,$x70,$key # borrow $out0
+ ?vperm v30,v30,v31,$keyperm
+ lvx v24,$x00,$key_ # pre-load round[1]
+ ?vperm v31,v31,$out0,$keyperm
+ lvx v25,$x10,$key_ # pre-load round[2]
+
+ #lvx $inptail,0,$inp # "caller" already did this
+ #addi $inp,$inp,15 # 15 is not typo
+ subi $inp,$inp,15 # undo "caller"
+
+ le?li $idx,8
+ lvx_u $in0,$x00,$inp # load first 8 "words"
+ le?lvsl $inpperm,0,$idx
+ le?vspltisb $tmp,0x0f
+ lvx_u $in1,$x10,$inp
+ le?vxor $inpperm,$inpperm,$tmp # transform for lvx_u/stvx_u
+ lvx_u $in2,$x20,$inp
+ le?vperm $in0,$in0,$in0,$inpperm
+ lvx_u $in3,$x30,$inp
+ le?vperm $in1,$in1,$in1,$inpperm
+ lvx_u $in4,$x40,$inp
+ le?vperm $in2,$in2,$in2,$inpperm
+ vxor $out0,$in0,$rndkey0
+ lvx_u $in5,$x50,$inp
+ le?vperm $in3,$in3,$in3,$inpperm
+ vxor $out1,$in1,$rndkey0
+ lvx_u $in6,$x60,$inp
+ le?vperm $in4,$in4,$in4,$inpperm
+ vxor $out2,$in2,$rndkey0
+ lvx_u $in7,$x70,$inp
+ addi $inp,$inp,0x80
+ le?vperm $in5,$in5,$in5,$inpperm
+ vxor $out3,$in3,$rndkey0
+ le?vperm $in6,$in6,$in6,$inpperm
+ vxor $out4,$in4,$rndkey0
+ le?vperm $in7,$in7,$in7,$inpperm
+ vxor $out5,$in5,$rndkey0
+ vxor $out6,$in6,$rndkey0
+ vxor $out7,$in7,$rndkey0
+
+ mtctr $rounds
+ b Loop_cbc_dec8x
+.align 5
+Loop_cbc_dec8x:
+ vncipher $out0,$out0,v24
+ vncipher $out1,$out1,v24
+ vncipher $out2,$out2,v24
+ vncipher $out3,$out3,v24
+ vncipher $out4,$out4,v24
+ vncipher $out5,$out5,v24
+ vncipher $out6,$out6,v24
+ vncipher $out7,$out7,v24
+ lvx v24,$x20,$key_ # round[3]
+ addi $key_,$key_,0x20
+
+ vncipher $out0,$out0,v25
+ vncipher $out1,$out1,v25
+ vncipher $out2,$out2,v25
+ vncipher $out3,$out3,v25
+ vncipher $out4,$out4,v25
+ vncipher $out5,$out5,v25
+ vncipher $out6,$out6,v25
+ vncipher $out7,$out7,v25
+ lvx v25,$x10,$key_ # round[4]
+ bdnz Loop_cbc_dec8x
+
+ subic $len,$len,128 # $len-=128
+ vncipher $out0,$out0,v24
+ vncipher $out1,$out1,v24
+ vncipher $out2,$out2,v24
+ vncipher $out3,$out3,v24
+ vncipher $out4,$out4,v24
+ vncipher $out5,$out5,v24
+ vncipher $out6,$out6,v24
+ vncipher $out7,$out7,v24
+
+ subfe. r0,r0,r0 # borrow?-1:0
+ vncipher $out0,$out0,v25
+ vncipher $out1,$out1,v25
+ vncipher $out2,$out2,v25
+ vncipher $out3,$out3,v25
+ vncipher $out4,$out4,v25
+ vncipher $out5,$out5,v25
+ vncipher $out6,$out6,v25
+ vncipher $out7,$out7,v25
+
+ and r0,r0,$len
+ vncipher $out0,$out0,v26
+ vncipher $out1,$out1,v26
+ vncipher $out2,$out2,v26
+ vncipher $out3,$out3,v26
+ vncipher $out4,$out4,v26
+ vncipher $out5,$out5,v26
+ vncipher $out6,$out6,v26
+ vncipher $out7,$out7,v26
+
+ add $inp,$inp,r0 # $inp is adjusted in such
+ # way that at exit from the
+ # loop inX-in7 are loaded
+ # with last "words"
+ vncipher $out0,$out0,v27
+ vncipher $out1,$out1,v27
+ vncipher $out2,$out2,v27
+ vncipher $out3,$out3,v27
+ vncipher $out4,$out4,v27
+ vncipher $out5,$out5,v27
+ vncipher $out6,$out6,v27
+ vncipher $out7,$out7,v27
+
+ addi $key_,$sp,$FRAME+15 # rewind $key_
+ vncipher $out0,$out0,v28
+ vncipher $out1,$out1,v28
+ vncipher $out2,$out2,v28
+ vncipher $out3,$out3,v28
+ vncipher $out4,$out4,v28
+ vncipher $out5,$out5,v28
+ vncipher $out6,$out6,v28
+ vncipher $out7,$out7,v28
+ lvx v24,$x00,$key_ # re-pre-load round[1]
+
+ vncipher $out0,$out0,v29
+ vncipher $out1,$out1,v29
+ vncipher $out2,$out2,v29
+ vncipher $out3,$out3,v29
+ vncipher $out4,$out4,v29
+ vncipher $out5,$out5,v29
+ vncipher $out6,$out6,v29
+ vncipher $out7,$out7,v29
+ lvx v25,$x10,$key_ # re-pre-load round[2]
+
+ vncipher $out0,$out0,v30
+ vxor $ivec,$ivec,v31 # xor with last round key
+ vncipher $out1,$out1,v30
+ vxor $in0,$in0,v31
+ vncipher $out2,$out2,v30
+ vxor $in1,$in1,v31
+ vncipher $out3,$out3,v30
+ vxor $in2,$in2,v31
+ vncipher $out4,$out4,v30
+ vxor $in3,$in3,v31
+ vncipher $out5,$out5,v30
+ vxor $in4,$in4,v31
+ vncipher $out6,$out6,v30
+ vxor $in5,$in5,v31
+ vncipher $out7,$out7,v30
+ vxor $in6,$in6,v31
+
+ vncipherlast $out0,$out0,$ivec
+ vncipherlast $out1,$out1,$in0
+ lvx_u $in0,$x00,$inp # load next input block
+ vncipherlast $out2,$out2,$in1
+ lvx_u $in1,$x10,$inp
+ vncipherlast $out3,$out3,$in2
+ le?vperm $in0,$in0,$in0,$inpperm
+ lvx_u $in2,$x20,$inp
+ vncipherlast $out4,$out4,$in3
+ le?vperm $in1,$in1,$in1,$inpperm
+ lvx_u $in3,$x30,$inp
+ vncipherlast $out5,$out5,$in4
+ le?vperm $in2,$in2,$in2,$inpperm
+ lvx_u $in4,$x40,$inp
+ vncipherlast $out6,$out6,$in5
+ le?vperm $in3,$in3,$in3,$inpperm
+ lvx_u $in5,$x50,$inp
+ vncipherlast $out7,$out7,$in6
+ le?vperm $in4,$in4,$in4,$inpperm
+ lvx_u $in6,$x60,$inp
+ vmr $ivec,$in7
+ le?vperm $in5,$in5,$in5,$inpperm
+ lvx_u $in7,$x70,$inp
+ addi $inp,$inp,0x80
+
+ le?vperm $out0,$out0,$out0,$inpperm
+ le?vperm $out1,$out1,$out1,$inpperm
+ stvx_u $out0,$x00,$out
+ le?vperm $in6,$in6,$in6,$inpperm
+ vxor $out0,$in0,$rndkey0
+ le?vperm $out2,$out2,$out2,$inpperm
+ stvx_u $out1,$x10,$out
+ le?vperm $in7,$in7,$in7,$inpperm
+ vxor $out1,$in1,$rndkey0
+ le?vperm $out3,$out3,$out3,$inpperm
+ stvx_u $out2,$x20,$out
+ vxor $out2,$in2,$rndkey0
+ le?vperm $out4,$out4,$out4,$inpperm
+ stvx_u $out3,$x30,$out
+ vxor $out3,$in3,$rndkey0
+ le?vperm $out5,$out5,$out5,$inpperm
+ stvx_u $out4,$x40,$out
+ vxor $out4,$in4,$rndkey0
+ le?vperm $out6,$out6,$out6,$inpperm
+ stvx_u $out5,$x50,$out
+ vxor $out5,$in5,$rndkey0
+ le?vperm $out7,$out7,$out7,$inpperm
+ stvx_u $out6,$x60,$out
+ vxor $out6,$in6,$rndkey0
+ stvx_u $out7,$x70,$out
+ addi $out,$out,0x80
+ vxor $out7,$in7,$rndkey0
+
+ mtctr $rounds
+ beq Loop_cbc_dec8x # did $len-=128 borrow?
+
+ addic. $len,$len,128
+ beq Lcbc_dec8x_done
+ nop
+ nop
+
+Loop_cbc_dec8x_tail: # up to 7 "words" tail...
+ vncipher $out1,$out1,v24
+ vncipher $out2,$out2,v24
+ vncipher $out3,$out3,v24
+ vncipher $out4,$out4,v24
+ vncipher $out5,$out5,v24
+ vncipher $out6,$out6,v24
+ vncipher $out7,$out7,v24
+ lvx v24,$x20,$key_ # round[3]
+ addi $key_,$key_,0x20
+
+ vncipher $out1,$out1,v25
+ vncipher $out2,$out2,v25
+ vncipher $out3,$out3,v25
+ vncipher $out4,$out4,v25
+ vncipher $out5,$out5,v25
+ vncipher $out6,$out6,v25
+ vncipher $out7,$out7,v25
+ lvx v25,$x10,$key_ # round[4]
+ bdnz Loop_cbc_dec8x_tail
+
+ vncipher $out1,$out1,v24
+ vncipher $out2,$out2,v24
+ vncipher $out3,$out3,v24
+ vncipher $out4,$out4,v24
+ vncipher $out5,$out5,v24
+ vncipher $out6,$out6,v24
+ vncipher $out7,$out7,v24
+
+ vncipher $out1,$out1,v25
+ vncipher $out2,$out2,v25
+ vncipher $out3,$out3,v25
+ vncipher $out4,$out4,v25
+ vncipher $out5,$out5,v25
+ vncipher $out6,$out6,v25
+ vncipher $out7,$out7,v25
+
+ vncipher $out1,$out1,v26
+ vncipher $out2,$out2,v26
+ vncipher $out3,$out3,v26
+ vncipher $out4,$out4,v26
+ vncipher $out5,$out5,v26
+ vncipher $out6,$out6,v26
+ vncipher $out7,$out7,v26
+
+ vncipher $out1,$out1,v27
+ vncipher $out2,$out2,v27
+ vncipher $out3,$out3,v27
+ vncipher $out4,$out4,v27
+ vncipher $out5,$out5,v27
+ vncipher $out6,$out6,v27
+ vncipher $out7,$out7,v27
+
+ vncipher $out1,$out1,v28
+ vncipher $out2,$out2,v28
+ vncipher $out3,$out3,v28
+ vncipher $out4,$out4,v28
+ vncipher $out5,$out5,v28
+ vncipher $out6,$out6,v28
+ vncipher $out7,$out7,v28
+
+ vncipher $out1,$out1,v29
+ vncipher $out2,$out2,v29
+ vncipher $out3,$out3,v29
+ vncipher $out4,$out4,v29
+ vncipher $out5,$out5,v29
+ vncipher $out6,$out6,v29
+ vncipher $out7,$out7,v29
+
+ vncipher $out1,$out1,v30
+ vxor $ivec,$ivec,v31 # last round key
+ vncipher $out2,$out2,v30
+ vxor $in1,$in1,v31
+ vncipher $out3,$out3,v30
+ vxor $in2,$in2,v31
+ vncipher $out4,$out4,v30
+ vxor $in3,$in3,v31
+ vncipher $out5,$out5,v30
+ vxor $in4,$in4,v31
+ vncipher $out6,$out6,v30
+ vxor $in5,$in5,v31
+ vncipher $out7,$out7,v30
+ vxor $in6,$in6,v31
+
+ cmplwi $len,32 # switch($len)
+ blt Lcbc_dec8x_one
+ nop
+ beq Lcbc_dec8x_two
+ cmplwi $len,64
+ blt Lcbc_dec8x_three
+ nop
+ beq Lcbc_dec8x_four
+ cmplwi $len,96
+ blt Lcbc_dec8x_five
+ nop
+ beq Lcbc_dec8x_six
+
+Lcbc_dec8x_seven:
+ vncipherlast $out1,$out1,$ivec
+ vncipherlast $out2,$out2,$in1
+ vncipherlast $out3,$out3,$in2
+ vncipherlast $out4,$out4,$in3
+ vncipherlast $out5,$out5,$in4
+ vncipherlast $out6,$out6,$in5
+ vncipherlast $out7,$out7,$in6
+ vmr $ivec,$in7
+
+ le?vperm $out1,$out1,$out1,$inpperm
+ le?vperm $out2,$out2,$out2,$inpperm
+ stvx_u $out1,$x00,$out
+ le?vperm $out3,$out3,$out3,$inpperm
+ stvx_u $out2,$x10,$out
+ le?vperm $out4,$out4,$out4,$inpperm
+ stvx_u $out3,$x20,$out
+ le?vperm $out5,$out5,$out5,$inpperm
+ stvx_u $out4,$x30,$out
+ le?vperm $out6,$out6,$out6,$inpperm
+ stvx_u $out5,$x40,$out
+ le?vperm $out7,$out7,$out7,$inpperm
+ stvx_u $out6,$x50,$out
+ stvx_u $out7,$x60,$out
+ addi $out,$out,0x70
+ b Lcbc_dec8x_done
+
+.align 5
+Lcbc_dec8x_six:
+ vncipherlast $out2,$out2,$ivec
+ vncipherlast $out3,$out3,$in2
+ vncipherlast $out4,$out4,$in3
+ vncipherlast $out5,$out5,$in4
+ vncipherlast $out6,$out6,$in5
+ vncipherlast $out7,$out7,$in6
+ vmr $ivec,$in7
+
+ le?vperm $out2,$out2,$out2,$inpperm
+ le?vperm $out3,$out3,$out3,$inpperm
+ stvx_u $out2,$x00,$out
+ le?vperm $out4,$out4,$out4,$inpperm
+ stvx_u $out3,$x10,$out
+ le?vperm $out5,$out5,$out5,$inpperm
+ stvx_u $out4,$x20,$out
+ le?vperm $out6,$out6,$out6,$inpperm
+ stvx_u $out5,$x30,$out
+ le?vperm $out7,$out7,$out7,$inpperm
+ stvx_u $out6,$x40,$out
+ stvx_u $out7,$x50,$out
+ addi $out,$out,0x60
+ b Lcbc_dec8x_done
+
+.align 5
+Lcbc_dec8x_five:
+ vncipherlast $out3,$out3,$ivec
+ vncipherlast $out4,$out4,$in3
+ vncipherlast $out5,$out5,$in4
+ vncipherlast $out6,$out6,$in5
+ vncipherlast $out7,$out7,$in6
+ vmr $ivec,$in7
+
+ le?vperm $out3,$out3,$out3,$inpperm
+ le?vperm $out4,$out4,$out4,$inpperm
+ stvx_u $out3,$x00,$out
+ le?vperm $out5,$out5,$out5,$inpperm
+ stvx_u $out4,$x10,$out
+ le?vperm $out6,$out6,$out6,$inpperm
+ stvx_u $out5,$x20,$out
+ le?vperm $out7,$out7,$out7,$inpperm
+ stvx_u $out6,$x30,$out
+ stvx_u $out7,$x40,$out
+ addi $out,$out,0x50
+ b Lcbc_dec8x_done
+
+.align 5
+Lcbc_dec8x_four:
+ vncipherlast $out4,$out4,$ivec
+ vncipherlast $out5,$out5,$in4
+ vncipherlast $out6,$out6,$in5
+ vncipherlast $out7,$out7,$in6
+ vmr $ivec,$in7
+
+ le?vperm $out4,$out4,$out4,$inpperm
+ le?vperm $out5,$out5,$out5,$inpperm
+ stvx_u $out4,$x00,$out
+ le?vperm $out6,$out6,$out6,$inpperm
+ stvx_u $out5,$x10,$out
+ le?vperm $out7,$out7,$out7,$inpperm
+ stvx_u $out6,$x20,$out
+ stvx_u $out7,$x30,$out
+ addi $out,$out,0x40
+ b Lcbc_dec8x_done
+
+.align 5
+Lcbc_dec8x_three:
+ vncipherlast $out5,$out5,$ivec
+ vncipherlast $out6,$out6,$in5
+ vncipherlast $out7,$out7,$in6
+ vmr $ivec,$in7
+
+ le?vperm $out5,$out5,$out5,$inpperm
+ le?vperm $out6,$out6,$out6,$inpperm
+ stvx_u $out5,$x00,$out
+ le?vperm $out7,$out7,$out7,$inpperm
+ stvx_u $out6,$x10,$out
+ stvx_u $out7,$x20,$out
+ addi $out,$out,0x30
+ b Lcbc_dec8x_done
+
+.align 5
+Lcbc_dec8x_two:
+ vncipherlast $out6,$out6,$ivec
+ vncipherlast $out7,$out7,$in6
+ vmr $ivec,$in7
+
+ le?vperm $out6,$out6,$out6,$inpperm
+ le?vperm $out7,$out7,$out7,$inpperm
+ stvx_u $out6,$x00,$out
+ stvx_u $out7,$x10,$out
+ addi $out,$out,0x20
+ b Lcbc_dec8x_done
+
+.align 5
+Lcbc_dec8x_one:
+ vncipherlast $out7,$out7,$ivec
+ vmr $ivec,$in7
+
+ le?vperm $out7,$out7,$out7,$inpperm
+ stvx_u $out7,0,$out
+ addi $out,$out,0x10
+
+Lcbc_dec8x_done:
+ le?vperm $ivec,$ivec,$ivec,$inpperm
+ stvx_u $ivec,0,$ivp # write [unaligned] iv
+
+ li r10,`$FRAME+15`
+ li r11,`$FRAME+31`
+ stvx $inpperm,r10,$sp # wipe copies of round keys
+ addi r10,r10,32
+ stvx $inpperm,r11,$sp
+ addi r11,r11,32
+ stvx $inpperm,r10,$sp
+ addi r10,r10,32
+ stvx $inpperm,r11,$sp
+ addi r11,r11,32
+ stvx $inpperm,r10,$sp
+ addi r10,r10,32
+ stvx $inpperm,r11,$sp
+ addi r11,r11,32
+ stvx $inpperm,r10,$sp
+ addi r10,r10,32
+ stvx $inpperm,r11,$sp
+ addi r11,r11,32
+
+ mtspr 256,$vrsave
+ lvx v20,r10,$sp # ABI says so
+ addi r10,r10,32
+ lvx v21,r11,$sp
+ addi r11,r11,32
+ lvx v22,r10,$sp
+ addi r10,r10,32
+ lvx v23,r11,$sp
+ addi r11,r11,32
+ lvx v24,r10,$sp
+ addi r10,r10,32
+ lvx v25,r11,$sp
+ addi r11,r11,32
+ lvx v26,r10,$sp
+ addi r10,r10,32
+ lvx v27,r11,$sp
+ addi r11,r11,32
+ lvx v28,r10,$sp
+ addi r10,r10,32
+ lvx v29,r11,$sp
+ addi r11,r11,32
+ lvx v30,r10,$sp
+ lvx v31,r11,$sp
+ $POP r26,`$FRAME+21*16+0*$SIZE_T`($sp)
+ $POP r27,`$FRAME+21*16+1*$SIZE_T`($sp)
+ $POP r28,`$FRAME+21*16+2*$SIZE_T`($sp)
+ $POP r29,`$FRAME+21*16+3*$SIZE_T`($sp)
+ $POP r30,`$FRAME+21*16+4*$SIZE_T`($sp)
+ $POP r31,`$FRAME+21*16+5*$SIZE_T`($sp)
+ addi $sp,$sp,`$FRAME+21*16+6*$SIZE_T`
+ blr
+ .long 0
+ .byte 0,12,0x04,0,0x80,6,6,0
+ .long 0
+.size .${prefix}_cbc_encrypt,.-.${prefix}_cbc_encrypt
+___
+}} }}}
+
+#########################################################################
+{{{ # CTR procedure[s] #
+my ($inp,$out,$len,$key,$ivp,$x10,$rounds,$idx)=map("r$_",(3..10));
+my ($rndkey0,$rndkey1,$inout,$tmp)= map("v$_",(0..3));
+my ($ivec,$inptail,$inpperm,$outhead,$outperm,$outmask,$keyperm,$one)=
+ map("v$_",(4..11));
+my $dat=$tmp;
+
+$code.=<<___;
+.globl .${prefix}_ctr32_encrypt_blocks
+.align 5
+.${prefix}_ctr32_encrypt_blocks:
+ ${UCMP}i $len,1
+ bltlr-
+
+ lis r0,0xfff0
+ mfspr $vrsave,256
+ mtspr 256,r0
+
+ li $idx,15
+ vxor $rndkey0,$rndkey0,$rndkey0
+ le?vspltisb $tmp,0x0f
+
+ lvx $ivec,0,$ivp # load [unaligned] iv
+ lvsl $inpperm,0,$ivp
+ lvx $inptail,$idx,$ivp
+ vspltisb $one,1
+ le?vxor $inpperm,$inpperm,$tmp
+ vperm $ivec,$ivec,$inptail,$inpperm
+ vsldoi $one,$rndkey0,$one,1
+
+ neg r11,$inp
+ ?lvsl $keyperm,0,$key # prepare for unaligned key
+ lwz $rounds,240($key)
+
+ lvsr $inpperm,0,r11 # prepare for unaligned load
+ lvx $inptail,0,$inp
+ addi $inp,$inp,15 # 15 is not typo
+ le?vxor $inpperm,$inpperm,$tmp
+
+ srwi $rounds,$rounds,1
+ li $idx,16
+ subi $rounds,$rounds,1
+
+ ${UCMP}i $len,8
+ bge _aesp8_ctr32_encrypt8x
+
+ ?lvsr $outperm,0,$out # prepare for unaligned store
+ vspltisb $outmask,-1
+ lvx $outhead,0,$out
+ ?vperm $outmask,$rndkey0,$outmask,$outperm
+ le?vxor $outperm,$outperm,$tmp
+
+ lvx $rndkey0,0,$key
+ mtctr $rounds
+ lvx $rndkey1,$idx,$key
+ addi $idx,$idx,16
+ ?vperm $rndkey0,$rndkey0,$rndkey1,$keyperm
+ vxor $inout,$ivec,$rndkey0
+ lvx $rndkey0,$idx,$key
+ addi $idx,$idx,16
+ b Loop_ctr32_enc
+
+.align 5
+Loop_ctr32_enc:
+ ?vperm $rndkey1,$rndkey1,$rndkey0,$keyperm
+ vcipher $inout,$inout,$rndkey1
+ lvx $rndkey1,$idx,$key
+ addi $idx,$idx,16
+ ?vperm $rndkey0,$rndkey0,$rndkey1,$keyperm
+ vcipher $inout,$inout,$rndkey0
+ lvx $rndkey0,$idx,$key
+ addi $idx,$idx,16
+ bdnz Loop_ctr32_enc
+
+ vadduwm $ivec,$ivec,$one
+ vmr $dat,$inptail
+ lvx $inptail,0,$inp
+ addi $inp,$inp,16
+ subic. $len,$len,1 # blocks--
+
+ ?vperm $rndkey1,$rndkey1,$rndkey0,$keyperm
+ vcipher $inout,$inout,$rndkey1
+ lvx $rndkey1,$idx,$key
+ vperm $dat,$dat,$inptail,$inpperm
+ li $idx,16
+ ?vperm $rndkey1,$rndkey0,$rndkey1,$keyperm
+ lvx $rndkey0,0,$key
+ vxor $dat,$dat,$rndkey1 # last round key
+ vcipherlast $inout,$inout,$dat
+
+ lvx $rndkey1,$idx,$key
+ addi $idx,$idx,16
+ vperm $inout,$inout,$inout,$outperm
+ vsel $dat,$outhead,$inout,$outmask
+ mtctr $rounds
+ ?vperm $rndkey0,$rndkey0,$rndkey1,$keyperm
+ vmr $outhead,$inout
+ vxor $inout,$ivec,$rndkey0
+ lvx $rndkey0,$idx,$key
+ addi $idx,$idx,16
+ stvx $dat,0,$out
+ addi $out,$out,16
+ bne Loop_ctr32_enc
+
+ addi $out,$out,-1
+ lvx $inout,0,$out # redundant in aligned case
+ vsel $inout,$outhead,$inout,$outmask
+ stvx $inout,0,$out
+
+ mtspr 256,$vrsave
+ blr
+ .long 0
+ .byte 0,12,0x14,0,0,0,6,0
+ .long 0
+___
+#########################################################################
+{{ # Optimized CTR procedure #
+my $key_="r11";
+my ($x00,$x10,$x20,$x30,$x40,$x50,$x60,$x70)=map("r$_",(0,8,26..31));
+ $x00=0 if ($flavour =~ /osx/);
+my ($in0, $in1, $in2, $in3, $in4, $in5, $in6, $in7 )=map("v$_",(0..3,10,12..14));
+my ($out0,$out1,$out2,$out3,$out4,$out5,$out6,$out7)=map("v$_",(15..22));
+my $rndkey0="v23"; # v24-v25 rotating buffer for first found keys
+ # v26-v31 last 6 round keys
+my ($tmp,$keyperm)=($in3,$in4); # aliases with "caller", redundant assignment
+my ($two,$three,$four)=($outhead,$outperm,$outmask);
+
+$code.=<<___;
+.align 5
+_aesp8_ctr32_encrypt8x:
+ $STU $sp,-`($FRAME+21*16+6*$SIZE_T)`($sp)
+ li r10,`$FRAME+8*16+15`
+ li r11,`$FRAME+8*16+31`
+ stvx v20,r10,$sp # ABI says so
+ addi r10,r10,32
+ stvx v21,r11,$sp
+ addi r11,r11,32
+ stvx v22,r10,$sp
+ addi r10,r10,32
+ stvx v23,r11,$sp
+ addi r11,r11,32
+ stvx v24,r10,$sp
+ addi r10,r10,32
+ stvx v25,r11,$sp
+ addi r11,r11,32
+ stvx v26,r10,$sp
+ addi r10,r10,32
+ stvx v27,r11,$sp
+ addi r11,r11,32
+ stvx v28,r10,$sp
+ addi r10,r10,32
+ stvx v29,r11,$sp
+ addi r11,r11,32
+ stvx v30,r10,$sp
+ stvx v31,r11,$sp
+ li r0,-1
+ stw $vrsave,`$FRAME+21*16-4`($sp) # save vrsave
+ li $x10,0x10
+ $PUSH r26,`$FRAME+21*16+0*$SIZE_T`($sp)
+ li $x20,0x20
+ $PUSH r27,`$FRAME+21*16+1*$SIZE_T`($sp)
+ li $x30,0x30
+ $PUSH r28,`$FRAME+21*16+2*$SIZE_T`($sp)
+ li $x40,0x40
+ $PUSH r29,`$FRAME+21*16+3*$SIZE_T`($sp)
+ li $x50,0x50
+ $PUSH r30,`$FRAME+21*16+4*$SIZE_T`($sp)
+ li $x60,0x60
+ $PUSH r31,`$FRAME+21*16+5*$SIZE_T`($sp)
+ li $x70,0x70
+ mtspr 256,r0
+
+ subi $rounds,$rounds,3 # -4 in total
+
+ lvx $rndkey0,$x00,$key # load key schedule
+ lvx v30,$x10,$key
+ addi $key,$key,0x20
+ lvx v31,$x00,$key
+ ?vperm $rndkey0,$rndkey0,v30,$keyperm
+ addi $key_,$sp,$FRAME+15
+ mtctr $rounds
+
+Load_ctr32_enc_key:
+ ?vperm v24,v30,v31,$keyperm
+ lvx v30,$x10,$key
+ addi $key,$key,0x20
+ stvx v24,$x00,$key_ # off-load round[1]
+ ?vperm v25,v31,v30,$keyperm
+ lvx v31,$x00,$key
+ stvx v25,$x10,$key_ # off-load round[2]
+ addi $key_,$key_,0x20
+ bdnz Load_ctr32_enc_key
+
+ lvx v26,$x10,$key
+ ?vperm v24,v30,v31,$keyperm
+ lvx v27,$x20,$key
+ stvx v24,$x00,$key_ # off-load round[3]
+ ?vperm v25,v31,v26,$keyperm
+ lvx v28,$x30,$key
+ stvx v25,$x10,$key_ # off-load round[4]
+ addi $key_,$sp,$FRAME+15 # rewind $key_
+ ?vperm v26,v26,v27,$keyperm
+ lvx v29,$x40,$key
+ ?vperm v27,v27,v28,$keyperm
+ lvx v30,$x50,$key
+ ?vperm v28,v28,v29,$keyperm
+ lvx v31,$x60,$key
+ ?vperm v29,v29,v30,$keyperm
+ lvx $out0,$x70,$key # borrow $out0
+ ?vperm v30,v30,v31,$keyperm
+ lvx v24,$x00,$key_ # pre-load round[1]
+ ?vperm v31,v31,$out0,$keyperm
+ lvx v25,$x10,$key_ # pre-load round[2]
+
+ vadduwm $two,$one,$one
+ subi $inp,$inp,15 # undo "caller"
+ $SHL $len,$len,4
+
+ vadduwm $out1,$ivec,$one # counter values ...
+ vadduwm $out2,$ivec,$two
+ vxor $out0,$ivec,$rndkey0 # ... xored with rndkey[0]
+ le?li $idx,8
+ vadduwm $out3,$out1,$two
+ vxor $out1,$out1,$rndkey0
+ le?lvsl $inpperm,0,$idx
+ vadduwm $out4,$out2,$two
+ vxor $out2,$out2,$rndkey0
+ le?vspltisb $tmp,0x0f
+ vadduwm $out5,$out3,$two
+ vxor $out3,$out3,$rndkey0
+ le?vxor $inpperm,$inpperm,$tmp # transform for lvx_u/stvx_u
+ vadduwm $out6,$out4,$two
+ vxor $out4,$out4,$rndkey0
+ vadduwm $out7,$out5,$two
+ vxor $out5,$out5,$rndkey0
+ vadduwm $ivec,$out6,$two # next counter value
+ vxor $out6,$out6,$rndkey0
+ vxor $out7,$out7,$rndkey0
+
+ mtctr $rounds
+ b Loop_ctr32_enc8x
+.align 5
+Loop_ctr32_enc8x:
+ vcipher $out0,$out0,v24
+ vcipher $out1,$out1,v24
+ vcipher $out2,$out2,v24
+ vcipher $out3,$out3,v24
+ vcipher $out4,$out4,v24
+ vcipher $out5,$out5,v24
+ vcipher $out6,$out6,v24
+ vcipher $out7,$out7,v24
+Loop_ctr32_enc8x_middle:
+ lvx v24,$x20,$key_ # round[3]
+ addi $key_,$key_,0x20
+
+ vcipher $out0,$out0,v25
+ vcipher $out1,$out1,v25
+ vcipher $out2,$out2,v25
+ vcipher $out3,$out3,v25
+ vcipher $out4,$out4,v25
+ vcipher $out5,$out5,v25
+ vcipher $out6,$out6,v25
+ vcipher $out7,$out7,v25
+ lvx v25,$x10,$key_ # round[4]
+ bdnz Loop_ctr32_enc8x
+
+ subic r11,$len,256 # $len-256, borrow $key_
+ vcipher $out0,$out0,v24
+ vcipher $out1,$out1,v24
+ vcipher $out2,$out2,v24
+ vcipher $out3,$out3,v24
+ vcipher $out4,$out4,v24
+ vcipher $out5,$out5,v24
+ vcipher $out6,$out6,v24
+ vcipher $out7,$out7,v24
+
+ subfe r0,r0,r0 # borrow?-1:0
+ vcipher $out0,$out0,v25
+ vcipher $out1,$out1,v25
+ vcipher $out2,$out2,v25
+ vcipher $out3,$out3,v25
+ vcipher $out4,$out4,v25
+ vcipher $out5,$out5,v25
+ vcipher $out6,$out6,v25
+ vcipher $out7,$out7,v25
+
+ and r0,r0,r11
+ addi $key_,$sp,$FRAME+15 # rewind $key_
+ vcipher $out0,$out0,v26
+ vcipher $out1,$out1,v26
+ vcipher $out2,$out2,v26
+ vcipher $out3,$out3,v26
+ vcipher $out4,$out4,v26
+ vcipher $out5,$out5,v26
+ vcipher $out6,$out6,v26
+ vcipher $out7,$out7,v26
+ lvx v24,$x00,$key_ # re-pre-load round[1]
+
+ subic $len,$len,129 # $len-=129
+ vcipher $out0,$out0,v27
+ addi $len,$len,1 # $len-=128 really
+ vcipher $out1,$out1,v27
+ vcipher $out2,$out2,v27
+ vcipher $out3,$out3,v27
+ vcipher $out4,$out4,v27
+ vcipher $out5,$out5,v27
+ vcipher $out6,$out6,v27
+ vcipher $out7,$out7,v27
+ lvx v25,$x10,$key_ # re-pre-load round[2]
+
+ vcipher $out0,$out0,v28
+ lvx_u $in0,$x00,$inp # load input
+ vcipher $out1,$out1,v28
+ lvx_u $in1,$x10,$inp
+ vcipher $out2,$out2,v28
+ lvx_u $in2,$x20,$inp
+ vcipher $out3,$out3,v28
+ lvx_u $in3,$x30,$inp
+ vcipher $out4,$out4,v28
+ lvx_u $in4,$x40,$inp
+ vcipher $out5,$out5,v28
+ lvx_u $in5,$x50,$inp
+ vcipher $out6,$out6,v28
+ lvx_u $in6,$x60,$inp
+ vcipher $out7,$out7,v28
+ lvx_u $in7,$x70,$inp
+ addi $inp,$inp,0x80
+
+ vcipher $out0,$out0,v29
+ le?vperm $in0,$in0,$in0,$inpperm
+ vcipher $out1,$out1,v29
+ le?vperm $in1,$in1,$in1,$inpperm
+ vcipher $out2,$out2,v29
+ le?vperm $in2,$in2,$in2,$inpperm
+ vcipher $out3,$out3,v29
+ le?vperm $in3,$in3,$in3,$inpperm
+ vcipher $out4,$out4,v29
+ le?vperm $in4,$in4,$in4,$inpperm
+ vcipher $out5,$out5,v29
+ le?vperm $in5,$in5,$in5,$inpperm
+ vcipher $out6,$out6,v29
+ le?vperm $in6,$in6,$in6,$inpperm
+ vcipher $out7,$out7,v29
+ le?vperm $in7,$in7,$in7,$inpperm
+
+ add $inp,$inp,r0 # $inp is adjusted in such
+ # way that at exit from the
+ # loop inX-in7 are loaded
+ # with last "words"
+ subfe. r0,r0,r0 # borrow?-1:0
+ vcipher $out0,$out0,v30
+ vxor $in0,$in0,v31 # xor with last round key
+ vcipher $out1,$out1,v30
+ vxor $in1,$in1,v31
+ vcipher $out2,$out2,v30
+ vxor $in2,$in2,v31
+ vcipher $out3,$out3,v30
+ vxor $in3,$in3,v31
+ vcipher $out4,$out4,v30
+ vxor $in4,$in4,v31
+ vcipher $out5,$out5,v30
+ vxor $in5,$in5,v31
+ vcipher $out6,$out6,v30
+ vxor $in6,$in6,v31
+ vcipher $out7,$out7,v30
+ vxor $in7,$in7,v31
+
+ bne Lctr32_enc8x_break # did $len-129 borrow?
+
+ vcipherlast $in0,$out0,$in0
+ vcipherlast $in1,$out1,$in1
+ vadduwm $out1,$ivec,$one # counter values ...
+ vcipherlast $in2,$out2,$in2
+ vadduwm $out2,$ivec,$two
+ vxor $out0,$ivec,$rndkey0 # ... xored with rndkey[0]
+ vcipherlast $in3,$out3,$in3
+ vadduwm $out3,$out1,$two
+ vxor $out1,$out1,$rndkey0
+ vcipherlast $in4,$out4,$in4
+ vadduwm $out4,$out2,$two
+ vxor $out2,$out2,$rndkey0
+ vcipherlast $in5,$out5,$in5
+ vadduwm $out5,$out3,$two
+ vxor $out3,$out3,$rndkey0
+ vcipherlast $in6,$out6,$in6
+ vadduwm $out6,$out4,$two
+ vxor $out4,$out4,$rndkey0
+ vcipherlast $in7,$out7,$in7
+ vadduwm $out7,$out5,$two
+ vxor $out5,$out5,$rndkey0
+ le?vperm $in0,$in0,$in0,$inpperm
+ vadduwm $ivec,$out6,$two # next counter value
+ vxor $out6,$out6,$rndkey0
+ le?vperm $in1,$in1,$in1,$inpperm
+ vxor $out7,$out7,$rndkey0
+ mtctr $rounds
+
+ vcipher $out0,$out0,v24
+ stvx_u $in0,$x00,$out
+ le?vperm $in2,$in2,$in2,$inpperm
+ vcipher $out1,$out1,v24
+ stvx_u $in1,$x10,$out
+ le?vperm $in3,$in3,$in3,$inpperm
+ vcipher $out2,$out2,v24
+ stvx_u $in2,$x20,$out
+ le?vperm $in4,$in4,$in4,$inpperm
+ vcipher $out3,$out3,v24
+ stvx_u $in3,$x30,$out
+ le?vperm $in5,$in5,$in5,$inpperm
+ vcipher $out4,$out4,v24
+ stvx_u $in4,$x40,$out
+ le?vperm $in6,$in6,$in6,$inpperm
+ vcipher $out5,$out5,v24
+ stvx_u $in5,$x50,$out
+ le?vperm $in7,$in7,$in7,$inpperm
+ vcipher $out6,$out6,v24
+ stvx_u $in6,$x60,$out
+ vcipher $out7,$out7,v24
+ stvx_u $in7,$x70,$out
+ addi $out,$out,0x80
+
+ b Loop_ctr32_enc8x_middle
+
+.align 5
+Lctr32_enc8x_break:
+ cmpwi $len,-0x60
+ blt Lctr32_enc8x_one
+ nop
+ beq Lctr32_enc8x_two
+ cmpwi $len,-0x40
+ blt Lctr32_enc8x_three
+ nop
+ beq Lctr32_enc8x_four
+ cmpwi $len,-0x20
+ blt Lctr32_enc8x_five
+ nop
+ beq Lctr32_enc8x_six
+ cmpwi $len,0x00
+ blt Lctr32_enc8x_seven
+
+Lctr32_enc8x_eight:
+ vcipherlast $out0,$out0,$in0
+ vcipherlast $out1,$out1,$in1
+ vcipherlast $out2,$out2,$in2
+ vcipherlast $out3,$out3,$in3
+ vcipherlast $out4,$out4,$in4
+ vcipherlast $out5,$out5,$in5
+ vcipherlast $out6,$out6,$in6
+ vcipherlast $out7,$out7,$in7
+
+ le?vperm $out0,$out0,$out0,$inpperm
+ le?vperm $out1,$out1,$out1,$inpperm
+ stvx_u $out0,$x00,$out
+ le?vperm $out2,$out2,$out2,$inpperm
+ stvx_u $out1,$x10,$out
+ le?vperm $out3,$out3,$out3,$inpperm
+ stvx_u $out2,$x20,$out
+ le?vperm $out4,$out4,$out4,$inpperm
+ stvx_u $out3,$x30,$out
+ le?vperm $out5,$out5,$out5,$inpperm
+ stvx_u $out4,$x40,$out
+ le?vperm $out6,$out6,$out6,$inpperm
+ stvx_u $out5,$x50,$out
+ le?vperm $out7,$out7,$out7,$inpperm
+ stvx_u $out6,$x60,$out
+ stvx_u $out7,$x70,$out
+ addi $out,$out,0x80
+ b Lctr32_enc8x_done
+
+.align 5
+Lctr32_enc8x_seven:
+ vcipherlast $out0,$out0,$in1
+ vcipherlast $out1,$out1,$in2
+ vcipherlast $out2,$out2,$in3
+ vcipherlast $out3,$out3,$in4
+ vcipherlast $out4,$out4,$in5
+ vcipherlast $out5,$out5,$in6
+ vcipherlast $out6,$out6,$in7
+
+ le?vperm $out0,$out0,$out0,$inpperm
+ le?vperm $out1,$out1,$out1,$inpperm
+ stvx_u $out0,$x00,$out
+ le?vperm $out2,$out2,$out2,$inpperm
+ stvx_u $out1,$x10,$out
+ le?vperm $out3,$out3,$out3,$inpperm
+ stvx_u $out2,$x20,$out
+ le?vperm $out4,$out4,$out4,$inpperm
+ stvx_u $out3,$x30,$out
+ le?vperm $out5,$out5,$out5,$inpperm
+ stvx_u $out4,$x40,$out
+ le?vperm $out6,$out6,$out6,$inpperm
+ stvx_u $out5,$x50,$out
+ stvx_u $out6,$x60,$out
+ addi $out,$out,0x70
+ b Lctr32_enc8x_done
+
+.align 5
+Lctr32_enc8x_six:
+ vcipherlast $out0,$out0,$in2
+ vcipherlast $out1,$out1,$in3
+ vcipherlast $out2,$out2,$in4
+ vcipherlast $out3,$out3,$in5
+ vcipherlast $out4,$out4,$in6
+ vcipherlast $out5,$out5,$in7
+
+ le?vperm $out0,$out0,$out0,$inpperm
+ le?vperm $out1,$out1,$out1,$inpperm
+ stvx_u $out0,$x00,$out
+ le?vperm $out2,$out2,$out2,$inpperm
+ stvx_u $out1,$x10,$out
+ le?vperm $out3,$out3,$out3,$inpperm
+ stvx_u $out2,$x20,$out
+ le?vperm $out4,$out4,$out4,$inpperm
+ stvx_u $out3,$x30,$out
+ le?vperm $out5,$out5,$out5,$inpperm
+ stvx_u $out4,$x40,$out
+ stvx_u $out5,$x50,$out
+ addi $out,$out,0x60
+ b Lctr32_enc8x_done
+
+.align 5
+Lctr32_enc8x_five:
+ vcipherlast $out0,$out0,$in3
+ vcipherlast $out1,$out1,$in4
+ vcipherlast $out2,$out2,$in5
+ vcipherlast $out3,$out3,$in6
+ vcipherlast $out4,$out4,$in7
+
+ le?vperm $out0,$out0,$out0,$inpperm
+ le?vperm $out1,$out1,$out1,$inpperm
+ stvx_u $out0,$x00,$out
+ le?vperm $out2,$out2,$out2,$inpperm
+ stvx_u $out1,$x10,$out
+ le?vperm $out3,$out3,$out3,$inpperm
+ stvx_u $out2,$x20,$out
+ le?vperm $out4,$out4,$out4,$inpperm
+ stvx_u $out3,$x30,$out
+ stvx_u $out4,$x40,$out
+ addi $out,$out,0x50
+ b Lctr32_enc8x_done
+
+.align 5
+Lctr32_enc8x_four:
+ vcipherlast $out0,$out0,$in4
+ vcipherlast $out1,$out1,$in5
+ vcipherlast $out2,$out2,$in6
+ vcipherlast $out3,$out3,$in7
+
+ le?vperm $out0,$out0,$out0,$inpperm
+ le?vperm $out1,$out1,$out1,$inpperm
+ stvx_u $out0,$x00,$out
+ le?vperm $out2,$out2,$out2,$inpperm
+ stvx_u $out1,$x10,$out
+ le?vperm $out3,$out3,$out3,$inpperm
+ stvx_u $out2,$x20,$out
+ stvx_u $out3,$x30,$out
+ addi $out,$out,0x40
+ b Lctr32_enc8x_done
+
+.align 5
+Lctr32_enc8x_three:
+ vcipherlast $out0,$out0,$in5
+ vcipherlast $out1,$out1,$in6
+ vcipherlast $out2,$out2,$in7
+
+ le?vperm $out0,$out0,$out0,$inpperm
+ le?vperm $out1,$out1,$out1,$inpperm
+ stvx_u $out0,$x00,$out
+ le?vperm $out2,$out2,$out2,$inpperm
+ stvx_u $out1,$x10,$out
+ stvx_u $out2,$x20,$out
+ addi $out,$out,0x30
+ b Lcbc_dec8x_done
+
+.align 5
+Lctr32_enc8x_two:
+ vcipherlast $out0,$out0,$in6
+ vcipherlast $out1,$out1,$in7
+
+ le?vperm $out0,$out0,$out0,$inpperm
+ le?vperm $out1,$out1,$out1,$inpperm
+ stvx_u $out0,$x00,$out
+ stvx_u $out1,$x10,$out
+ addi $out,$out,0x20
+ b Lcbc_dec8x_done
+
+.align 5
+Lctr32_enc8x_one:
+ vcipherlast $out0,$out0,$in7
+
+ le?vperm $out0,$out0,$out0,$inpperm
+ stvx_u $out0,0,$out
+ addi $out,$out,0x10
+
+Lctr32_enc8x_done:
+ li r10,`$FRAME+15`
+ li r11,`$FRAME+31`
+ stvx $inpperm,r10,$sp # wipe copies of round keys
+ addi r10,r10,32
+ stvx $inpperm,r11,$sp
+ addi r11,r11,32
+ stvx $inpperm,r10,$sp
+ addi r10,r10,32
+ stvx $inpperm,r11,$sp
+ addi r11,r11,32
+ stvx $inpperm,r10,$sp
+ addi r10,r10,32
+ stvx $inpperm,r11,$sp
+ addi r11,r11,32
+ stvx $inpperm,r10,$sp
+ addi r10,r10,32
+ stvx $inpperm,r11,$sp
+ addi r11,r11,32
+
+ mtspr 256,$vrsave
+ lvx v20,r10,$sp # ABI says so
+ addi r10,r10,32
+ lvx v21,r11,$sp
+ addi r11,r11,32
+ lvx v22,r10,$sp
+ addi r10,r10,32
+ lvx v23,r11,$sp
+ addi r11,r11,32
+ lvx v24,r10,$sp
+ addi r10,r10,32
+ lvx v25,r11,$sp
+ addi r11,r11,32
+ lvx v26,r10,$sp
+ addi r10,r10,32
+ lvx v27,r11,$sp
+ addi r11,r11,32
+ lvx v28,r10,$sp
+ addi r10,r10,32
+ lvx v29,r11,$sp
+ addi r11,r11,32
+ lvx v30,r10,$sp
+ lvx v31,r11,$sp
+ $POP r26,`$FRAME+21*16+0*$SIZE_T`($sp)
+ $POP r27,`$FRAME+21*16+1*$SIZE_T`($sp)
+ $POP r28,`$FRAME+21*16+2*$SIZE_T`($sp)
+ $POP r29,`$FRAME+21*16+3*$SIZE_T`($sp)
+ $POP r30,`$FRAME+21*16+4*$SIZE_T`($sp)
+ $POP r31,`$FRAME+21*16+5*$SIZE_T`($sp)
+ addi $sp,$sp,`$FRAME+21*16+6*$SIZE_T`
+ blr
+ .long 0
+ .byte 0,12,0x04,0,0x80,6,6,0
+ .long 0
+.size .${prefix}_ctr32_encrypt_blocks,.-.${prefix}_ctr32_encrypt_blocks
+___
+}} }}}
+
+my $consts=1;
+foreach(split("\n",$code)) {
+ s/\`([^\`]*)\`/eval($1)/geo;
+
+ # constants table endian-specific conversion
+ if ($consts && m/\.(long|byte)\s+(.+)\s+(\?[a-z]*)$/o) {
+ my $conv=$3;
+ my @bytes=();
+
+ # convert to endian-agnostic format
+ if ($1 eq "long") {
+ foreach (split(/,\s*/,$2)) {
+ my $l = /^0/?oct:int;
+ push @bytes,($l>>24)&0xff,($l>>16)&0xff,($l>>8)&0xff,$l&0xff;
+ }
+ } else {
+ @bytes = map(/^0/?oct:int,split(/,\s*/,$2));
+ }
+
+ # little-endian conversion
+ if ($flavour =~ /le$/o) {
+ SWITCH: for($conv) {
+ /\?inv/ && do { @bytes=map($_^0xf,@bytes); last; };
+ /\?rev/ && do { @bytes=reverse(@bytes); last; };
+ }
+ }
+
+ #emit
+ print ".byte\t",join(',',map (sprintf("0x%02x",$_),@bytes)),"\n";
+ next;
+ }
+ $consts=0 if (m/Lconsts:/o); # end of table
+
+ # instructions prefixed with '?' are endian-specific and need
+ # to be adjusted accordingly...
+ if ($flavour =~ /le$/o) { # little-endian
+ s/le\?//o or
+ s/be\?/#be#/o or
+ s/\?lvsr/lvsl/o or
+ s/\?lvsl/lvsr/o or
+ s/\?(vperm\s+v[0-9]+,\s*)(v[0-9]+,\s*)(v[0-9]+,\s*)(v[0-9]+)/$1$3$2$4/o or
+ s/\?(vsldoi\s+v[0-9]+,\s*)(v[0-9]+,)\s*(v[0-9]+,\s*)([0-9]+)/$1$3$2 16-$4/o or
+ s/\?(vspltw\s+v[0-9]+,\s*)(v[0-9]+,)\s*([0-9])/$1$2 3-$3/o;
+ } else { # big-endian
+ s/le\?/#le#/o or
+ s/be\?//o or
+ s/\?([a-z]+)/$1/o;
+ }
+
+ print $_,"\n";
+}
+
+close STDOUT;
diff --git a/crypto/openssl/crypto/aes/asm/aest4-sparcv9.pl b/crypto/openssl/crypto/aes/asm/aest4-sparcv9.pl
new file mode 100755
index 0000000..536f23b
--- /dev/null
+++ b/crypto/openssl/crypto/aes/asm/aest4-sparcv9.pl
@@ -0,0 +1,919 @@
+#!/usr/bin/env perl
+
+# ====================================================================
+# Written by David S. Miller <davem@devemloft.net> and Andy Polyakov
+# <appro@openssl.org>. The module is licensed under 2-clause BSD
+# license. October 2012. All rights reserved.
+# ====================================================================
+
+######################################################################
+# AES for SPARC T4.
+#
+# AES round instructions complete in 3 cycles and can be issued every
+# cycle. It means that round calculations should take 4*rounds cycles,
+# because any given round instruction depends on result of *both*
+# previous instructions:
+#
+# |0 |1 |2 |3 |4
+# |01|01|01|
+# |23|23|23|
+# |01|01|...
+# |23|...
+#
+# Provided that fxor [with IV] takes 3 cycles to complete, critical
+# path length for CBC encrypt would be 3+4*rounds, or in other words
+# it should process one byte in at least (3+4*rounds)/16 cycles. This
+# estimate doesn't account for "collateral" instructions, such as
+# fetching input from memory, xor-ing it with zero-round key and
+# storing the result. Yet, *measured* performance [for data aligned
+# at 64-bit boundary!] deviates from this equation by less than 0.5%:
+#
+# 128-bit key 192- 256-
+# CBC encrypt 2.70/2.90(*) 3.20/3.40 3.70/3.90
+# (*) numbers after slash are for
+# misaligned data.
+#
+# Out-of-order execution logic managed to fully overlap "collateral"
+# instructions with those on critical path. Amazing!
+#
+# As with Intel AES-NI, question is if it's possible to improve
+# performance of parallelizeable modes by interleaving round
+# instructions. Provided round instruction latency and throughput
+# optimal interleave factor is 2. But can we expect 2x performance
+# improvement? Well, as round instructions can be issued one per
+# cycle, they don't saturate the 2-way issue pipeline and therefore
+# there is room for "collateral" calculations... Yet, 2x speed-up
+# over CBC encrypt remains unattaintable:
+#
+# 128-bit key 192- 256-
+# CBC decrypt 1.64/2.11 1.89/2.37 2.23/2.61
+# CTR 1.64/2.08(*) 1.89/2.33 2.23/2.61
+# (*) numbers after slash are for
+# misaligned data.
+#
+# Estimates based on amount of instructions under assumption that
+# round instructions are not pairable with any other instruction
+# suggest that latter is the actual case and pipeline runs
+# underutilized. It should be noted that T4 out-of-order execution
+# logic is so capable that performance gain from 2x interleave is
+# not even impressive, ~7-13% over non-interleaved code, largest
+# for 256-bit keys.
+
+# To anchor to something else, software implementation processes
+# one byte in 29 cycles with 128-bit key on same processor. Intel
+# Sandy Bridge encrypts byte in 5.07 cycles in CBC mode and decrypts
+# in 0.93, naturally with AES-NI.
+
+$0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1;
+push(@INC,"${dir}","${dir}../../perlasm");
+require "sparcv9_modes.pl";
+
+&asm_init(@ARGV);
+
+$::evp=1; # if $evp is set to 0, script generates module with
+# AES_[en|de]crypt, AES_set_[en|de]crypt_key and AES_cbc_encrypt entry
+# points. These however are not fully compatible with openssl/aes.h,
+# because they expect AES_KEY to be aligned at 64-bit boundary. When
+# used through EVP, alignment is arranged at EVP layer. Second thing
+# that is arranged by EVP is at least 32-bit alignment of IV.
+
+######################################################################
+# single-round subroutines
+#
+{
+my ($inp,$out,$key,$rounds,$tmp,$mask)=map("%o$_",(0..5));
+
+$code.=<<___ if ($::abibits==64);
+.register %g2,#scratch
+.register %g3,#scratch
+
+___
+$code.=<<___;
+.text
+
+.globl aes_t4_encrypt
+.align 32
+aes_t4_encrypt:
+ andcc $inp, 7, %g1 ! is input aligned?
+ andn $inp, 7, $inp
+
+ ldx [$key + 0], %g4
+ ldx [$key + 8], %g5
+
+ ldx [$inp + 0], %o4
+ bz,pt %icc, 1f
+ ldx [$inp + 8], %o5
+ ldx [$inp + 16], $inp
+ sll %g1, 3, %g1
+ sub %g0, %g1, %o3
+ sllx %o4, %g1, %o4
+ sllx %o5, %g1, %g1
+ srlx %o5, %o3, %o5
+ srlx $inp, %o3, %o3
+ or %o5, %o4, %o4
+ or %o3, %g1, %o5
+1:
+ ld [$key + 240], $rounds
+ ldd [$key + 16], %f12
+ ldd [$key + 24], %f14
+ xor %g4, %o4, %o4
+ xor %g5, %o5, %o5
+ movxtod %o4, %f0
+ movxtod %o5, %f2
+ srl $rounds, 1, $rounds
+ ldd [$key + 32], %f16
+ sub $rounds, 1, $rounds
+ ldd [$key + 40], %f18
+ add $key, 48, $key
+
+.Lenc:
+ aes_eround01 %f12, %f0, %f2, %f4
+ aes_eround23 %f14, %f0, %f2, %f2
+ ldd [$key + 0], %f12
+ ldd [$key + 8], %f14
+ sub $rounds,1,$rounds
+ aes_eround01 %f16, %f4, %f2, %f0
+ aes_eround23 %f18, %f4, %f2, %f2
+ ldd [$key + 16], %f16
+ ldd [$key + 24], %f18
+ brnz,pt $rounds, .Lenc
+ add $key, 32, $key
+
+ andcc $out, 7, $tmp ! is output aligned?
+ aes_eround01 %f12, %f0, %f2, %f4
+ aes_eround23 %f14, %f0, %f2, %f2
+ aes_eround01_l %f16, %f4, %f2, %f0
+ aes_eround23_l %f18, %f4, %f2, %f2
+
+ bnz,pn %icc, 2f
+ nop
+
+ std %f0, [$out + 0]
+ retl
+ std %f2, [$out + 8]
+
+2: alignaddrl $out, %g0, $out
+ mov 0xff, $mask
+ srl $mask, $tmp, $mask
+
+ faligndata %f0, %f0, %f4
+ faligndata %f0, %f2, %f6
+ faligndata %f2, %f2, %f8
+
+ stda %f4, [$out + $mask]0xc0 ! partial store
+ std %f6, [$out + 8]
+ add $out, 16, $out
+ orn %g0, $mask, $mask
+ retl
+ stda %f8, [$out + $mask]0xc0 ! partial store
+.type aes_t4_encrypt,#function
+.size aes_t4_encrypt,.-aes_t4_encrypt
+
+.globl aes_t4_decrypt
+.align 32
+aes_t4_decrypt:
+ andcc $inp, 7, %g1 ! is input aligned?
+ andn $inp, 7, $inp
+
+ ldx [$key + 0], %g4
+ ldx [$key + 8], %g5
+
+ ldx [$inp + 0], %o4
+ bz,pt %icc, 1f
+ ldx [$inp + 8], %o5
+ ldx [$inp + 16], $inp
+ sll %g1, 3, %g1
+ sub %g0, %g1, %o3
+ sllx %o4, %g1, %o4
+ sllx %o5, %g1, %g1
+ srlx %o5, %o3, %o5
+ srlx $inp, %o3, %o3
+ or %o5, %o4, %o4
+ or %o3, %g1, %o5
+1:
+ ld [$key + 240], $rounds
+ ldd [$key + 16], %f12
+ ldd [$key + 24], %f14
+ xor %g4, %o4, %o4
+ xor %g5, %o5, %o5
+ movxtod %o4, %f0
+ movxtod %o5, %f2
+ srl $rounds, 1, $rounds
+ ldd [$key + 32], %f16
+ sub $rounds, 1, $rounds
+ ldd [$key + 40], %f18
+ add $key, 48, $key
+
+.Ldec:
+ aes_dround01 %f12, %f0, %f2, %f4
+ aes_dround23 %f14, %f0, %f2, %f2
+ ldd [$key + 0], %f12
+ ldd [$key + 8], %f14
+ sub $rounds,1,$rounds
+ aes_dround01 %f16, %f4, %f2, %f0
+ aes_dround23 %f18, %f4, %f2, %f2
+ ldd [$key + 16], %f16
+ ldd [$key + 24], %f18
+ brnz,pt $rounds, .Ldec
+ add $key, 32, $key
+
+ andcc $out, 7, $tmp ! is output aligned?
+ aes_dround01 %f12, %f0, %f2, %f4
+ aes_dround23 %f14, %f0, %f2, %f2
+ aes_dround01_l %f16, %f4, %f2, %f0
+ aes_dround23_l %f18, %f4, %f2, %f2
+
+ bnz,pn %icc, 2f
+ nop
+
+ std %f0, [$out + 0]
+ retl
+ std %f2, [$out + 8]
+
+2: alignaddrl $out, %g0, $out
+ mov 0xff, $mask
+ srl $mask, $tmp, $mask
+
+ faligndata %f0, %f0, %f4
+ faligndata %f0, %f2, %f6
+ faligndata %f2, %f2, %f8
+
+ stda %f4, [$out + $mask]0xc0 ! partial store
+ std %f6, [$out + 8]
+ add $out, 16, $out
+ orn %g0, $mask, $mask
+ retl
+ stda %f8, [$out + $mask]0xc0 ! partial store
+.type aes_t4_decrypt,#function
+.size aes_t4_decrypt,.-aes_t4_decrypt
+___
+}
+
+######################################################################
+# key setup subroutines
+#
+{
+my ($inp,$bits,$out,$tmp)=map("%o$_",(0..5));
+$code.=<<___;
+.globl aes_t4_set_encrypt_key
+.align 32
+aes_t4_set_encrypt_key:
+.Lset_encrypt_key:
+ and $inp, 7, $tmp
+ alignaddr $inp, %g0, $inp
+ cmp $bits, 192
+ ldd [$inp + 0], %f0
+ bl,pt %icc,.L128
+ ldd [$inp + 8], %f2
+
+ be,pt %icc,.L192
+ ldd [$inp + 16], %f4
+ brz,pt $tmp, .L256aligned
+ ldd [$inp + 24], %f6
+
+ ldd [$inp + 32], %f8
+ faligndata %f0, %f2, %f0
+ faligndata %f2, %f4, %f2
+ faligndata %f4, %f6, %f4
+ faligndata %f6, %f8, %f6
+.L256aligned:
+___
+for ($i=0; $i<6; $i++) {
+ $code.=<<___;
+ std %f0, [$out + `32*$i+0`]
+ aes_kexpand1 %f0, %f6, $i, %f0
+ std %f2, [$out + `32*$i+8`]
+ aes_kexpand2 %f2, %f0, %f2
+ std %f4, [$out + `32*$i+16`]
+ aes_kexpand0 %f4, %f2, %f4
+ std %f6, [$out + `32*$i+24`]
+ aes_kexpand2 %f6, %f4, %f6
+___
+}
+$code.=<<___;
+ std %f0, [$out + `32*$i+0`]
+ aes_kexpand1 %f0, %f6, $i, %f0
+ std %f2, [$out + `32*$i+8`]
+ aes_kexpand2 %f2, %f0, %f2
+ std %f4, [$out + `32*$i+16`]
+ std %f6, [$out + `32*$i+24`]
+ std %f0, [$out + `32*$i+32`]
+ std %f2, [$out + `32*$i+40`]
+
+ mov 14, $tmp
+ st $tmp, [$out + 240]
+ retl
+ xor %o0, %o0, %o0
+
+.align 16
+.L192:
+ brz,pt $tmp, .L192aligned
+ nop
+
+ ldd [$inp + 24], %f6
+ faligndata %f0, %f2, %f0
+ faligndata %f2, %f4, %f2
+ faligndata %f4, %f6, %f4
+.L192aligned:
+___
+for ($i=0; $i<7; $i++) {
+ $code.=<<___;
+ std %f0, [$out + `24*$i+0`]
+ aes_kexpand1 %f0, %f4, $i, %f0
+ std %f2, [$out + `24*$i+8`]
+ aes_kexpand2 %f2, %f0, %f2
+ std %f4, [$out + `24*$i+16`]
+ aes_kexpand2 %f4, %f2, %f4
+___
+}
+$code.=<<___;
+ std %f0, [$out + `24*$i+0`]
+ aes_kexpand1 %f0, %f4, $i, %f0
+ std %f2, [$out + `24*$i+8`]
+ aes_kexpand2 %f2, %f0, %f2
+ std %f4, [$out + `24*$i+16`]
+ std %f0, [$out + `24*$i+24`]
+ std %f2, [$out + `24*$i+32`]
+
+ mov 12, $tmp
+ st $tmp, [$out + 240]
+ retl
+ xor %o0, %o0, %o0
+
+.align 16
+.L128:
+ brz,pt $tmp, .L128aligned
+ nop
+
+ ldd [$inp + 16], %f4
+ faligndata %f0, %f2, %f0
+ faligndata %f2, %f4, %f2
+.L128aligned:
+___
+for ($i=0; $i<10; $i++) {
+ $code.=<<___;
+ std %f0, [$out + `16*$i+0`]
+ aes_kexpand1 %f0, %f2, $i, %f0
+ std %f2, [$out + `16*$i+8`]
+ aes_kexpand2 %f2, %f0, %f2
+___
+}
+$code.=<<___;
+ std %f0, [$out + `16*$i+0`]
+ std %f2, [$out + `16*$i+8`]
+
+ mov 10, $tmp
+ st $tmp, [$out + 240]
+ retl
+ xor %o0, %o0, %o0
+.type aes_t4_set_encrypt_key,#function
+.size aes_t4_set_encrypt_key,.-aes_t4_set_encrypt_key
+
+.globl aes_t4_set_decrypt_key
+.align 32
+aes_t4_set_decrypt_key:
+ mov %o7, %o5
+ call .Lset_encrypt_key
+ nop
+
+ mov %o5, %o7
+ sll $tmp, 4, $inp ! $tmp is number of rounds
+ add $tmp, 2, $tmp
+ add $out, $inp, $inp ! $inp=$out+16*rounds
+ srl $tmp, 2, $tmp ! $tmp=(rounds+2)/4
+
+.Lkey_flip:
+ ldd [$out + 0], %f0
+ ldd [$out + 8], %f2
+ ldd [$out + 16], %f4
+ ldd [$out + 24], %f6
+ ldd [$inp + 0], %f8
+ ldd [$inp + 8], %f10
+ ldd [$inp - 16], %f12
+ ldd [$inp - 8], %f14
+ sub $tmp, 1, $tmp
+ std %f0, [$inp + 0]
+ std %f2, [$inp + 8]
+ std %f4, [$inp - 16]
+ std %f6, [$inp - 8]
+ std %f8, [$out + 0]
+ std %f10, [$out + 8]
+ std %f12, [$out + 16]
+ std %f14, [$out + 24]
+ add $out, 32, $out
+ brnz $tmp, .Lkey_flip
+ sub $inp, 32, $inp
+
+ retl
+ xor %o0, %o0, %o0
+.type aes_t4_set_decrypt_key,#function
+.size aes_t4_set_decrypt_key,.-aes_t4_set_decrypt_key
+___
+}
+
+{{{
+my ($inp,$out,$len,$key,$ivec,$enc)=map("%i$_",(0..5));
+my ($ileft,$iright,$ooff,$omask,$ivoff)=map("%l$_",(1..7));
+
+$code.=<<___;
+.align 32
+_aes128_encrypt_1x:
+___
+for ($i=0; $i<4; $i++) {
+ $code.=<<___;
+ aes_eround01 %f`16+8*$i+0`, %f0, %f2, %f4
+ aes_eround23 %f`16+8*$i+2`, %f0, %f2, %f2
+ aes_eround01 %f`16+8*$i+4`, %f4, %f2, %f0
+ aes_eround23 %f`16+8*$i+6`, %f4, %f2, %f2
+___
+}
+$code.=<<___;
+ aes_eround01 %f48, %f0, %f2, %f4
+ aes_eround23 %f50, %f0, %f2, %f2
+ aes_eround01_l %f52, %f4, %f2, %f0
+ retl
+ aes_eround23_l %f54, %f4, %f2, %f2
+.type _aes128_encrypt_1x,#function
+.size _aes128_encrypt_1x,.-_aes128_encrypt_1x
+
+.align 32
+_aes128_encrypt_2x:
+___
+for ($i=0; $i<4; $i++) {
+ $code.=<<___;
+ aes_eround01 %f`16+8*$i+0`, %f0, %f2, %f8
+ aes_eround23 %f`16+8*$i+2`, %f0, %f2, %f2
+ aes_eround01 %f`16+8*$i+0`, %f4, %f6, %f10
+ aes_eround23 %f`16+8*$i+2`, %f4, %f6, %f6
+ aes_eround01 %f`16+8*$i+4`, %f8, %f2, %f0
+ aes_eround23 %f`16+8*$i+6`, %f8, %f2, %f2
+ aes_eround01 %f`16+8*$i+4`, %f10, %f6, %f4
+ aes_eround23 %f`16+8*$i+6`, %f10, %f6, %f6
+___
+}
+$code.=<<___;
+ aes_eround01 %f48, %f0, %f2, %f8
+ aes_eround23 %f50, %f0, %f2, %f2
+ aes_eround01 %f48, %f4, %f6, %f10
+ aes_eround23 %f50, %f4, %f6, %f6
+ aes_eround01_l %f52, %f8, %f2, %f0
+ aes_eround23_l %f54, %f8, %f2, %f2
+ aes_eround01_l %f52, %f10, %f6, %f4
+ retl
+ aes_eround23_l %f54, %f10, %f6, %f6
+.type _aes128_encrypt_2x,#function
+.size _aes128_encrypt_2x,.-_aes128_encrypt_2x
+
+.align 32
+_aes128_loadkey:
+ ldx [$key + 0], %g4
+ ldx [$key + 8], %g5
+___
+for ($i=2; $i<22;$i++) { # load key schedule
+ $code.=<<___;
+ ldd [$key + `8*$i`], %f`12+2*$i`
+___
+}
+$code.=<<___;
+ retl
+ nop
+.type _aes128_loadkey,#function
+.size _aes128_loadkey,.-_aes128_loadkey
+_aes128_load_enckey=_aes128_loadkey
+_aes128_load_deckey=_aes128_loadkey
+
+___
+
+&alg_cbc_encrypt_implement("aes",128);
+if ($::evp) {
+ &alg_ctr32_implement("aes",128);
+ &alg_xts_implement("aes",128,"en");
+ &alg_xts_implement("aes",128,"de");
+}
+&alg_cbc_decrypt_implement("aes",128);
+
+$code.=<<___;
+.align 32
+_aes128_decrypt_1x:
+___
+for ($i=0; $i<4; $i++) {
+ $code.=<<___;
+ aes_dround01 %f`16+8*$i+0`, %f0, %f2, %f4
+ aes_dround23 %f`16+8*$i+2`, %f0, %f2, %f2
+ aes_dround01 %f`16+8*$i+4`, %f4, %f2, %f0
+ aes_dround23 %f`16+8*$i+6`, %f4, %f2, %f2
+___
+}
+$code.=<<___;
+ aes_dround01 %f48, %f0, %f2, %f4
+ aes_dround23 %f50, %f0, %f2, %f2
+ aes_dround01_l %f52, %f4, %f2, %f0
+ retl
+ aes_dround23_l %f54, %f4, %f2, %f2
+.type _aes128_decrypt_1x,#function
+.size _aes128_decrypt_1x,.-_aes128_decrypt_1x
+
+.align 32
+_aes128_decrypt_2x:
+___
+for ($i=0; $i<4; $i++) {
+ $code.=<<___;
+ aes_dround01 %f`16+8*$i+0`, %f0, %f2, %f8
+ aes_dround23 %f`16+8*$i+2`, %f0, %f2, %f2
+ aes_dround01 %f`16+8*$i+0`, %f4, %f6, %f10
+ aes_dround23 %f`16+8*$i+2`, %f4, %f6, %f6
+ aes_dround01 %f`16+8*$i+4`, %f8, %f2, %f0
+ aes_dround23 %f`16+8*$i+6`, %f8, %f2, %f2
+ aes_dround01 %f`16+8*$i+4`, %f10, %f6, %f4
+ aes_dround23 %f`16+8*$i+6`, %f10, %f6, %f6
+___
+}
+$code.=<<___;
+ aes_dround01 %f48, %f0, %f2, %f8
+ aes_dround23 %f50, %f0, %f2, %f2
+ aes_dround01 %f48, %f4, %f6, %f10
+ aes_dround23 %f50, %f4, %f6, %f6
+ aes_dround01_l %f52, %f8, %f2, %f0
+ aes_dround23_l %f54, %f8, %f2, %f2
+ aes_dround01_l %f52, %f10, %f6, %f4
+ retl
+ aes_dround23_l %f54, %f10, %f6, %f6
+.type _aes128_decrypt_2x,#function
+.size _aes128_decrypt_2x,.-_aes128_decrypt_2x
+___
+
+$code.=<<___;
+.align 32
+_aes192_encrypt_1x:
+___
+for ($i=0; $i<5; $i++) {
+ $code.=<<___;
+ aes_eround01 %f`16+8*$i+0`, %f0, %f2, %f4
+ aes_eround23 %f`16+8*$i+2`, %f0, %f2, %f2
+ aes_eround01 %f`16+8*$i+4`, %f4, %f2, %f0
+ aes_eround23 %f`16+8*$i+6`, %f4, %f2, %f2
+___
+}
+$code.=<<___;
+ aes_eround01 %f56, %f0, %f2, %f4
+ aes_eround23 %f58, %f0, %f2, %f2
+ aes_eround01_l %f60, %f4, %f2, %f0
+ retl
+ aes_eround23_l %f62, %f4, %f2, %f2
+.type _aes192_encrypt_1x,#function
+.size _aes192_encrypt_1x,.-_aes192_encrypt_1x
+
+.align 32
+_aes192_encrypt_2x:
+___
+for ($i=0; $i<5; $i++) {
+ $code.=<<___;
+ aes_eround01 %f`16+8*$i+0`, %f0, %f2, %f8
+ aes_eround23 %f`16+8*$i+2`, %f0, %f2, %f2
+ aes_eround01 %f`16+8*$i+0`, %f4, %f6, %f10
+ aes_eround23 %f`16+8*$i+2`, %f4, %f6, %f6
+ aes_eround01 %f`16+8*$i+4`, %f8, %f2, %f0
+ aes_eround23 %f`16+8*$i+6`, %f8, %f2, %f2
+ aes_eround01 %f`16+8*$i+4`, %f10, %f6, %f4
+ aes_eround23 %f`16+8*$i+6`, %f10, %f6, %f6
+___
+}
+$code.=<<___;
+ aes_eround01 %f56, %f0, %f2, %f8
+ aes_eround23 %f58, %f0, %f2, %f2
+ aes_eround01 %f56, %f4, %f6, %f10
+ aes_eround23 %f58, %f4, %f6, %f6
+ aes_eround01_l %f60, %f8, %f2, %f0
+ aes_eround23_l %f62, %f8, %f2, %f2
+ aes_eround01_l %f60, %f10, %f6, %f4
+ retl
+ aes_eround23_l %f62, %f10, %f6, %f6
+.type _aes192_encrypt_2x,#function
+.size _aes192_encrypt_2x,.-_aes192_encrypt_2x
+
+.align 32
+_aes256_encrypt_1x:
+ aes_eround01 %f16, %f0, %f2, %f4
+ aes_eround23 %f18, %f0, %f2, %f2
+ ldd [$key + 208], %f16
+ ldd [$key + 216], %f18
+ aes_eround01 %f20, %f4, %f2, %f0
+ aes_eround23 %f22, %f4, %f2, %f2
+ ldd [$key + 224], %f20
+ ldd [$key + 232], %f22
+___
+for ($i=1; $i<6; $i++) {
+ $code.=<<___;
+ aes_eround01 %f`16+8*$i+0`, %f0, %f2, %f4
+ aes_eround23 %f`16+8*$i+2`, %f0, %f2, %f2
+ aes_eround01 %f`16+8*$i+4`, %f4, %f2, %f0
+ aes_eround23 %f`16+8*$i+6`, %f4, %f2, %f2
+___
+}
+$code.=<<___;
+ aes_eround01 %f16, %f0, %f2, %f4
+ aes_eround23 %f18, %f0, %f2, %f2
+ ldd [$key + 16], %f16
+ ldd [$key + 24], %f18
+ aes_eround01_l %f20, %f4, %f2, %f0
+ aes_eround23_l %f22, %f4, %f2, %f2
+ ldd [$key + 32], %f20
+ retl
+ ldd [$key + 40], %f22
+.type _aes256_encrypt_1x,#function
+.size _aes256_encrypt_1x,.-_aes256_encrypt_1x
+
+.align 32
+_aes256_encrypt_2x:
+ aes_eround01 %f16, %f0, %f2, %f8
+ aes_eround23 %f18, %f0, %f2, %f2
+ aes_eround01 %f16, %f4, %f6, %f10
+ aes_eround23 %f18, %f4, %f6, %f6
+ ldd [$key + 208], %f16
+ ldd [$key + 216], %f18
+ aes_eround01 %f20, %f8, %f2, %f0
+ aes_eround23 %f22, %f8, %f2, %f2
+ aes_eround01 %f20, %f10, %f6, %f4
+ aes_eround23 %f22, %f10, %f6, %f6
+ ldd [$key + 224], %f20
+ ldd [$key + 232], %f22
+___
+for ($i=1; $i<6; $i++) {
+ $code.=<<___;
+ aes_eround01 %f`16+8*$i+0`, %f0, %f2, %f8
+ aes_eround23 %f`16+8*$i+2`, %f0, %f2, %f2
+ aes_eround01 %f`16+8*$i+0`, %f4, %f6, %f10
+ aes_eround23 %f`16+8*$i+2`, %f4, %f6, %f6
+ aes_eround01 %f`16+8*$i+4`, %f8, %f2, %f0
+ aes_eround23 %f`16+8*$i+6`, %f8, %f2, %f2
+ aes_eround01 %f`16+8*$i+4`, %f10, %f6, %f4
+ aes_eround23 %f`16+8*$i+6`, %f10, %f6, %f6
+___
+}
+$code.=<<___;
+ aes_eround01 %f16, %f0, %f2, %f8
+ aes_eround23 %f18, %f0, %f2, %f2
+ aes_eround01 %f16, %f4, %f6, %f10
+ aes_eround23 %f18, %f4, %f6, %f6
+ ldd [$key + 16], %f16
+ ldd [$key + 24], %f18
+ aes_eround01_l %f20, %f8, %f2, %f0
+ aes_eround23_l %f22, %f8, %f2, %f2
+ aes_eround01_l %f20, %f10, %f6, %f4
+ aes_eround23_l %f22, %f10, %f6, %f6
+ ldd [$key + 32], %f20
+ retl
+ ldd [$key + 40], %f22
+.type _aes256_encrypt_2x,#function
+.size _aes256_encrypt_2x,.-_aes256_encrypt_2x
+
+.align 32
+_aes192_loadkey:
+ ldx [$key + 0], %g4
+ ldx [$key + 8], %g5
+___
+for ($i=2; $i<26;$i++) { # load key schedule
+ $code.=<<___;
+ ldd [$key + `8*$i`], %f`12+2*$i`
+___
+}
+$code.=<<___;
+ retl
+ nop
+.type _aes192_loadkey,#function
+.size _aes192_loadkey,.-_aes192_loadkey
+_aes256_loadkey=_aes192_loadkey
+_aes192_load_enckey=_aes192_loadkey
+_aes192_load_deckey=_aes192_loadkey
+_aes256_load_enckey=_aes192_loadkey
+_aes256_load_deckey=_aes192_loadkey
+___
+
+&alg_cbc_encrypt_implement("aes",256);
+&alg_cbc_encrypt_implement("aes",192);
+if ($::evp) {
+ &alg_ctr32_implement("aes",256);
+ &alg_xts_implement("aes",256,"en");
+ &alg_xts_implement("aes",256,"de");
+ &alg_ctr32_implement("aes",192);
+}
+&alg_cbc_decrypt_implement("aes",192);
+&alg_cbc_decrypt_implement("aes",256);
+
+$code.=<<___;
+.align 32
+_aes256_decrypt_1x:
+ aes_dround01 %f16, %f0, %f2, %f4
+ aes_dround23 %f18, %f0, %f2, %f2
+ ldd [$key + 208], %f16
+ ldd [$key + 216], %f18
+ aes_dround01 %f20, %f4, %f2, %f0
+ aes_dround23 %f22, %f4, %f2, %f2
+ ldd [$key + 224], %f20
+ ldd [$key + 232], %f22
+___
+for ($i=1; $i<6; $i++) {
+ $code.=<<___;
+ aes_dround01 %f`16+8*$i+0`, %f0, %f2, %f4
+ aes_dround23 %f`16+8*$i+2`, %f0, %f2, %f2
+ aes_dround01 %f`16+8*$i+4`, %f4, %f2, %f0
+ aes_dround23 %f`16+8*$i+6`, %f4, %f2, %f2
+___
+}
+$code.=<<___;
+ aes_dround01 %f16, %f0, %f2, %f4
+ aes_dround23 %f18, %f0, %f2, %f2
+ ldd [$key + 16], %f16
+ ldd [$key + 24], %f18
+ aes_dround01_l %f20, %f4, %f2, %f0
+ aes_dround23_l %f22, %f4, %f2, %f2
+ ldd [$key + 32], %f20
+ retl
+ ldd [$key + 40], %f22
+.type _aes256_decrypt_1x,#function
+.size _aes256_decrypt_1x,.-_aes256_decrypt_1x
+
+.align 32
+_aes256_decrypt_2x:
+ aes_dround01 %f16, %f0, %f2, %f8
+ aes_dround23 %f18, %f0, %f2, %f2
+ aes_dround01 %f16, %f4, %f6, %f10
+ aes_dround23 %f18, %f4, %f6, %f6
+ ldd [$key + 208], %f16
+ ldd [$key + 216], %f18
+ aes_dround01 %f20, %f8, %f2, %f0
+ aes_dround23 %f22, %f8, %f2, %f2
+ aes_dround01 %f20, %f10, %f6, %f4
+ aes_dround23 %f22, %f10, %f6, %f6
+ ldd [$key + 224], %f20
+ ldd [$key + 232], %f22
+___
+for ($i=1; $i<6; $i++) {
+ $code.=<<___;
+ aes_dround01 %f`16+8*$i+0`, %f0, %f2, %f8
+ aes_dround23 %f`16+8*$i+2`, %f0, %f2, %f2
+ aes_dround01 %f`16+8*$i+0`, %f4, %f6, %f10
+ aes_dround23 %f`16+8*$i+2`, %f4, %f6, %f6
+ aes_dround01 %f`16+8*$i+4`, %f8, %f2, %f0
+ aes_dround23 %f`16+8*$i+6`, %f8, %f2, %f2
+ aes_dround01 %f`16+8*$i+4`, %f10, %f6, %f4
+ aes_dround23 %f`16+8*$i+6`, %f10, %f6, %f6
+___
+}
+$code.=<<___;
+ aes_dround01 %f16, %f0, %f2, %f8
+ aes_dround23 %f18, %f0, %f2, %f2
+ aes_dround01 %f16, %f4, %f6, %f10
+ aes_dround23 %f18, %f4, %f6, %f6
+ ldd [$key + 16], %f16
+ ldd [$key + 24], %f18
+ aes_dround01_l %f20, %f8, %f2, %f0
+ aes_dround23_l %f22, %f8, %f2, %f2
+ aes_dround01_l %f20, %f10, %f6, %f4
+ aes_dround23_l %f22, %f10, %f6, %f6
+ ldd [$key + 32], %f20
+ retl
+ ldd [$key + 40], %f22
+.type _aes256_decrypt_2x,#function
+.size _aes256_decrypt_2x,.-_aes256_decrypt_2x
+
+.align 32
+_aes192_decrypt_1x:
+___
+for ($i=0; $i<5; $i++) {
+ $code.=<<___;
+ aes_dround01 %f`16+8*$i+0`, %f0, %f2, %f4
+ aes_dround23 %f`16+8*$i+2`, %f0, %f2, %f2
+ aes_dround01 %f`16+8*$i+4`, %f4, %f2, %f0
+ aes_dround23 %f`16+8*$i+6`, %f4, %f2, %f2
+___
+}
+$code.=<<___;
+ aes_dround01 %f56, %f0, %f2, %f4
+ aes_dround23 %f58, %f0, %f2, %f2
+ aes_dround01_l %f60, %f4, %f2, %f0
+ retl
+ aes_dround23_l %f62, %f4, %f2, %f2
+.type _aes192_decrypt_1x,#function
+.size _aes192_decrypt_1x,.-_aes192_decrypt_1x
+
+.align 32
+_aes192_decrypt_2x:
+___
+for ($i=0; $i<5; $i++) {
+ $code.=<<___;
+ aes_dround01 %f`16+8*$i+0`, %f0, %f2, %f8
+ aes_dround23 %f`16+8*$i+2`, %f0, %f2, %f2
+ aes_dround01 %f`16+8*$i+0`, %f4, %f6, %f10
+ aes_dround23 %f`16+8*$i+2`, %f4, %f6, %f6
+ aes_dround01 %f`16+8*$i+4`, %f8, %f2, %f0
+ aes_dround23 %f`16+8*$i+6`, %f8, %f2, %f2
+ aes_dround01 %f`16+8*$i+4`, %f10, %f6, %f4
+ aes_dround23 %f`16+8*$i+6`, %f10, %f6, %f6
+___
+}
+$code.=<<___;
+ aes_dround01 %f56, %f0, %f2, %f8
+ aes_dround23 %f58, %f0, %f2, %f2
+ aes_dround01 %f56, %f4, %f6, %f10
+ aes_dround23 %f58, %f4, %f6, %f6
+ aes_dround01_l %f60, %f8, %f2, %f0
+ aes_dround23_l %f62, %f8, %f2, %f2
+ aes_dround01_l %f60, %f10, %f6, %f4
+ retl
+ aes_dround23_l %f62, %f10, %f6, %f6
+.type _aes192_decrypt_2x,#function
+.size _aes192_decrypt_2x,.-_aes192_decrypt_2x
+___
+}}}
+
+if (!$::evp) {
+$code.=<<___;
+.global AES_encrypt
+AES_encrypt=aes_t4_encrypt
+.global AES_decrypt
+AES_decrypt=aes_t4_decrypt
+.global AES_set_encrypt_key
+.align 32
+AES_set_encrypt_key:
+ andcc %o2, 7, %g0 ! check alignment
+ bnz,a,pn %icc, 1f
+ mov -1, %o0
+ brz,a,pn %o0, 1f
+ mov -1, %o0
+ brz,a,pn %o2, 1f
+ mov -1, %o0
+ andncc %o1, 0x1c0, %g0
+ bnz,a,pn %icc, 1f
+ mov -2, %o0
+ cmp %o1, 128
+ bl,a,pn %icc, 1f
+ mov -2, %o0
+ b aes_t4_set_encrypt_key
+ nop
+1: retl
+ nop
+.type AES_set_encrypt_key,#function
+.size AES_set_encrypt_key,.-AES_set_encrypt_key
+
+.global AES_set_decrypt_key
+.align 32
+AES_set_decrypt_key:
+ andcc %o2, 7, %g0 ! check alignment
+ bnz,a,pn %icc, 1f
+ mov -1, %o0
+ brz,a,pn %o0, 1f
+ mov -1, %o0
+ brz,a,pn %o2, 1f
+ mov -1, %o0
+ andncc %o1, 0x1c0, %g0
+ bnz,a,pn %icc, 1f
+ mov -2, %o0
+ cmp %o1, 128
+ bl,a,pn %icc, 1f
+ mov -2, %o0
+ b aes_t4_set_decrypt_key
+ nop
+1: retl
+ nop
+.type AES_set_decrypt_key,#function
+.size AES_set_decrypt_key,.-AES_set_decrypt_key
+___
+
+my ($inp,$out,$len,$key,$ivec,$enc)=map("%o$_",(0..5));
+
+$code.=<<___;
+.globl AES_cbc_encrypt
+.align 32
+AES_cbc_encrypt:
+ ld [$key + 240], %g1
+ nop
+ brz $enc, .Lcbc_decrypt
+ cmp %g1, 12
+
+ bl,pt %icc, aes128_t4_cbc_encrypt
+ nop
+ be,pn %icc, aes192_t4_cbc_encrypt
+ nop
+ ba aes256_t4_cbc_encrypt
+ nop
+
+.Lcbc_decrypt:
+ bl,pt %icc, aes128_t4_cbc_decrypt
+ nop
+ be,pn %icc, aes192_t4_cbc_decrypt
+ nop
+ ba aes256_t4_cbc_decrypt
+ nop
+.type AES_cbc_encrypt,#function
+.size AES_cbc_encrypt,.-AES_cbc_encrypt
+___
+}
+$code.=<<___;
+.asciz "AES for SPARC T4, David S. Miller, Andy Polyakov"
+.align 4
+___
+
+&emit_assembler();
+
+close STDOUT;
diff --git a/crypto/openssl/crypto/aes/asm/aesv8-armx.pl b/crypto/openssl/crypto/aes/asm/aesv8-armx.pl
new file mode 100755
index 0000000..95ebae3
--- /dev/null
+++ b/crypto/openssl/crypto/aes/asm/aesv8-armx.pl
@@ -0,0 +1,989 @@
+#!/usr/bin/env perl
+#
+# ====================================================================
+# Written by Andy Polyakov <appro@openssl.org> for the OpenSSL
+# project. The module is, however, dual licensed under OpenSSL and
+# CRYPTOGAMS licenses depending on where you obtain it. For further
+# details see http://www.openssl.org/~appro/cryptogams/.
+# ====================================================================
+#
+# This module implements support for ARMv8 AES instructions. The
+# module is endian-agnostic in sense that it supports both big- and
+# little-endian cases. As does it support both 32- and 64-bit modes
+# of operation. Latter is achieved by limiting amount of utilized
+# registers to 16, which implies additional NEON load and integer
+# instructions. This has no effect on mighty Apple A7, where results
+# are literally equal to the theoretical estimates based on AES
+# instruction latencies and issue rates. On Cortex-A53, an in-order
+# execution core, this costs up to 10-15%, which is partially
+# compensated by implementing dedicated code path for 128-bit
+# CBC encrypt case. On Cortex-A57 parallelizable mode performance
+# seems to be limited by sheer amount of NEON instructions...
+#
+# Performance in cycles per byte processed with 128-bit key:
+#
+# CBC enc CBC dec CTR
+# Apple A7 2.39 1.20 1.20
+# Cortex-A53 1.32 1.29 1.46
+# Cortex-A57(*) 1.95 0.85 0.93
+# Denver 1.96 0.86 0.80
+#
+# (*) original 3.64/1.34/1.32 results were for r0p0 revision
+# and are still same even for updated module;
+
+$flavour = shift;
+open STDOUT,">".shift;
+
+$prefix="aes_v8";
+
+$code=<<___;
+#include "arm_arch.h"
+
+#if __ARM_MAX_ARCH__>=7
+.text
+___
+$code.=".arch armv8-a+crypto\n" if ($flavour =~ /64/);
+$code.=".arch armv7-a\n.fpu neon\n.code 32\n" if ($flavour !~ /64/);
+ #^^^^^^ this is done to simplify adoption by not depending
+ # on latest binutils.
+
+# Assembler mnemonics are an eclectic mix of 32- and 64-bit syntax,
+# NEON is mostly 32-bit mnemonics, integer - mostly 64. Goal is to
+# maintain both 32- and 64-bit codes within single module and
+# transliterate common code to either flavour with regex vodoo.
+#
+{{{
+my ($inp,$bits,$out,$ptr,$rounds)=("x0","w1","x2","x3","w12");
+my ($zero,$rcon,$mask,$in0,$in1,$tmp,$key)=
+ $flavour=~/64/? map("q$_",(0..6)) : map("q$_",(0..3,8..10));
+
+
+$code.=<<___;
+.align 5
+rcon:
+.long 0x01,0x01,0x01,0x01
+.long 0x0c0f0e0d,0x0c0f0e0d,0x0c0f0e0d,0x0c0f0e0d // rotate-n-splat
+.long 0x1b,0x1b,0x1b,0x1b
+
+.globl ${prefix}_set_encrypt_key
+.type ${prefix}_set_encrypt_key,%function
+.align 5
+${prefix}_set_encrypt_key:
+.Lenc_key:
+___
+$code.=<<___ if ($flavour =~ /64/);
+ stp x29,x30,[sp,#-16]!
+ add x29,sp,#0
+___
+$code.=<<___;
+ mov $ptr,#-1
+ cmp $inp,#0
+ b.eq .Lenc_key_abort
+ cmp $out,#0
+ b.eq .Lenc_key_abort
+ mov $ptr,#-2
+ cmp $bits,#128
+ b.lt .Lenc_key_abort
+ cmp $bits,#256
+ b.gt .Lenc_key_abort
+ tst $bits,#0x3f
+ b.ne .Lenc_key_abort
+
+ adr $ptr,rcon
+ cmp $bits,#192
+
+ veor $zero,$zero,$zero
+ vld1.8 {$in0},[$inp],#16
+ mov $bits,#8 // reuse $bits
+ vld1.32 {$rcon,$mask},[$ptr],#32
+
+ b.lt .Loop128
+ b.eq .L192
+ b .L256
+
+.align 4
+.Loop128:
+ vtbl.8 $key,{$in0},$mask
+ vext.8 $tmp,$zero,$in0,#12
+ vst1.32 {$in0},[$out],#16
+ aese $key,$zero
+ subs $bits,$bits,#1
+
+ veor $in0,$in0,$tmp
+ vext.8 $tmp,$zero,$tmp,#12
+ veor $in0,$in0,$tmp
+ vext.8 $tmp,$zero,$tmp,#12
+ veor $key,$key,$rcon
+ veor $in0,$in0,$tmp
+ vshl.u8 $rcon,$rcon,#1
+ veor $in0,$in0,$key
+ b.ne .Loop128
+
+ vld1.32 {$rcon},[$ptr]
+
+ vtbl.8 $key,{$in0},$mask
+ vext.8 $tmp,$zero,$in0,#12
+ vst1.32 {$in0},[$out],#16
+ aese $key,$zero
+
+ veor $in0,$in0,$tmp
+ vext.8 $tmp,$zero,$tmp,#12
+ veor $in0,$in0,$tmp
+ vext.8 $tmp,$zero,$tmp,#12
+ veor $key,$key,$rcon
+ veor $in0,$in0,$tmp
+ vshl.u8 $rcon,$rcon,#1
+ veor $in0,$in0,$key
+
+ vtbl.8 $key,{$in0},$mask
+ vext.8 $tmp,$zero,$in0,#12
+ vst1.32 {$in0},[$out],#16
+ aese $key,$zero
+
+ veor $in0,$in0,$tmp
+ vext.8 $tmp,$zero,$tmp,#12
+ veor $in0,$in0,$tmp
+ vext.8 $tmp,$zero,$tmp,#12
+ veor $key,$key,$rcon
+ veor $in0,$in0,$tmp
+ veor $in0,$in0,$key
+ vst1.32 {$in0},[$out]
+ add $out,$out,#0x50
+
+ mov $rounds,#10
+ b .Ldone
+
+.align 4
+.L192:
+ vld1.8 {$in1},[$inp],#8
+ vmov.i8 $key,#8 // borrow $key
+ vst1.32 {$in0},[$out],#16
+ vsub.i8 $mask,$mask,$key // adjust the mask
+
+.Loop192:
+ vtbl.8 $key,{$in1},$mask
+ vext.8 $tmp,$zero,$in0,#12
+ vst1.32 {$in1},[$out],#8
+ aese $key,$zero
+ subs $bits,$bits,#1
+
+ veor $in0,$in0,$tmp
+ vext.8 $tmp,$zero,$tmp,#12
+ veor $in0,$in0,$tmp
+ vext.8 $tmp,$zero,$tmp,#12
+ veor $in0,$in0,$tmp
+
+ vdup.32 $tmp,${in0}[3]
+ veor $tmp,$tmp,$in1
+ veor $key,$key,$rcon
+ vext.8 $in1,$zero,$in1,#12
+ vshl.u8 $rcon,$rcon,#1
+ veor $in1,$in1,$tmp
+ veor $in0,$in0,$key
+ veor $in1,$in1,$key
+ vst1.32 {$in0},[$out],#16
+ b.ne .Loop192
+
+ mov $rounds,#12
+ add $out,$out,#0x20
+ b .Ldone
+
+.align 4
+.L256:
+ vld1.8 {$in1},[$inp]
+ mov $bits,#7
+ mov $rounds,#14
+ vst1.32 {$in0},[$out],#16
+
+.Loop256:
+ vtbl.8 $key,{$in1},$mask
+ vext.8 $tmp,$zero,$in0,#12
+ vst1.32 {$in1},[$out],#16
+ aese $key,$zero
+ subs $bits,$bits,#1
+
+ veor $in0,$in0,$tmp
+ vext.8 $tmp,$zero,$tmp,#12
+ veor $in0,$in0,$tmp
+ vext.8 $tmp,$zero,$tmp,#12
+ veor $key,$key,$rcon
+ veor $in0,$in0,$tmp
+ vshl.u8 $rcon,$rcon,#1
+ veor $in0,$in0,$key
+ vst1.32 {$in0},[$out],#16
+ b.eq .Ldone
+
+ vdup.32 $key,${in0}[3] // just splat
+ vext.8 $tmp,$zero,$in1,#12
+ aese $key,$zero
+
+ veor $in1,$in1,$tmp
+ vext.8 $tmp,$zero,$tmp,#12
+ veor $in1,$in1,$tmp
+ vext.8 $tmp,$zero,$tmp,#12
+ veor $in1,$in1,$tmp
+
+ veor $in1,$in1,$key
+ b .Loop256
+
+.Ldone:
+ str $rounds,[$out]
+ mov $ptr,#0
+
+.Lenc_key_abort:
+ mov x0,$ptr // return value
+ `"ldr x29,[sp],#16" if ($flavour =~ /64/)`
+ ret
+.size ${prefix}_set_encrypt_key,.-${prefix}_set_encrypt_key
+
+.globl ${prefix}_set_decrypt_key
+.type ${prefix}_set_decrypt_key,%function
+.align 5
+${prefix}_set_decrypt_key:
+___
+$code.=<<___ if ($flavour =~ /64/);
+ stp x29,x30,[sp,#-16]!
+ add x29,sp,#0
+___
+$code.=<<___ if ($flavour !~ /64/);
+ stmdb sp!,{r4,lr}
+___
+$code.=<<___;
+ bl .Lenc_key
+
+ cmp x0,#0
+ b.ne .Ldec_key_abort
+
+ sub $out,$out,#240 // restore original $out
+ mov x4,#-16
+ add $inp,$out,x12,lsl#4 // end of key schedule
+
+ vld1.32 {v0.16b},[$out]
+ vld1.32 {v1.16b},[$inp]
+ vst1.32 {v0.16b},[$inp],x4
+ vst1.32 {v1.16b},[$out],#16
+
+.Loop_imc:
+ vld1.32 {v0.16b},[$out]
+ vld1.32 {v1.16b},[$inp]
+ aesimc v0.16b,v0.16b
+ aesimc v1.16b,v1.16b
+ vst1.32 {v0.16b},[$inp],x4
+ vst1.32 {v1.16b},[$out],#16
+ cmp $inp,$out
+ b.hi .Loop_imc
+
+ vld1.32 {v0.16b},[$out]
+ aesimc v0.16b,v0.16b
+ vst1.32 {v0.16b},[$inp]
+
+ eor x0,x0,x0 // return value
+.Ldec_key_abort:
+___
+$code.=<<___ if ($flavour !~ /64/);
+ ldmia sp!,{r4,pc}
+___
+$code.=<<___ if ($flavour =~ /64/);
+ ldp x29,x30,[sp],#16
+ ret
+___
+$code.=<<___;
+.size ${prefix}_set_decrypt_key,.-${prefix}_set_decrypt_key
+___
+}}}
+{{{
+sub gen_block () {
+my $dir = shift;
+my ($e,$mc) = $dir eq "en" ? ("e","mc") : ("d","imc");
+my ($inp,$out,$key)=map("x$_",(0..2));
+my $rounds="w3";
+my ($rndkey0,$rndkey1,$inout)=map("q$_",(0..3));
+
+$code.=<<___;
+.globl ${prefix}_${dir}crypt
+.type ${prefix}_${dir}crypt,%function
+.align 5
+${prefix}_${dir}crypt:
+ ldr $rounds,[$key,#240]
+ vld1.32 {$rndkey0},[$key],#16
+ vld1.8 {$inout},[$inp]
+ sub $rounds,$rounds,#2
+ vld1.32 {$rndkey1},[$key],#16
+
+.Loop_${dir}c:
+ aes$e $inout,$rndkey0
+ aes$mc $inout,$inout
+ vld1.32 {$rndkey0},[$key],#16
+ subs $rounds,$rounds,#2
+ aes$e $inout,$rndkey1
+ aes$mc $inout,$inout
+ vld1.32 {$rndkey1},[$key],#16
+ b.gt .Loop_${dir}c
+
+ aes$e $inout,$rndkey0
+ aes$mc $inout,$inout
+ vld1.32 {$rndkey0},[$key]
+ aes$e $inout,$rndkey1
+ veor $inout,$inout,$rndkey0
+
+ vst1.8 {$inout},[$out]
+ ret
+.size ${prefix}_${dir}crypt,.-${prefix}_${dir}crypt
+___
+}
+&gen_block("en");
+&gen_block("de");
+}}}
+{{{
+my ($inp,$out,$len,$key,$ivp)=map("x$_",(0..4)); my $enc="w5";
+my ($rounds,$cnt,$key_,$step,$step1)=($enc,"w6","x7","x8","x12");
+my ($dat0,$dat1,$in0,$in1,$tmp0,$tmp1,$ivec,$rndlast)=map("q$_",(0..7));
+
+my ($dat,$tmp,$rndzero_n_last)=($dat0,$tmp0,$tmp1);
+my ($key4,$key5,$key6,$key7)=("x6","x12","x14",$key);
+
+### q8-q15 preloaded key schedule
+
+$code.=<<___;
+.globl ${prefix}_cbc_encrypt
+.type ${prefix}_cbc_encrypt,%function
+.align 5
+${prefix}_cbc_encrypt:
+___
+$code.=<<___ if ($flavour =~ /64/);
+ stp x29,x30,[sp,#-16]!
+ add x29,sp,#0
+___
+$code.=<<___ if ($flavour !~ /64/);
+ mov ip,sp
+ stmdb sp!,{r4-r8,lr}
+ vstmdb sp!,{d8-d15} @ ABI specification says so
+ ldmia ip,{r4-r5} @ load remaining args
+___
+$code.=<<___;
+ subs $len,$len,#16
+ mov $step,#16
+ b.lo .Lcbc_abort
+ cclr $step,eq
+
+ cmp $enc,#0 // en- or decrypting?
+ ldr $rounds,[$key,#240]
+ and $len,$len,#-16
+ vld1.8 {$ivec},[$ivp]
+ vld1.8 {$dat},[$inp],$step
+
+ vld1.32 {q8-q9},[$key] // load key schedule...
+ sub $rounds,$rounds,#6
+ add $key_,$key,x5,lsl#4 // pointer to last 7 round keys
+ sub $rounds,$rounds,#2
+ vld1.32 {q10-q11},[$key_],#32
+ vld1.32 {q12-q13},[$key_],#32
+ vld1.32 {q14-q15},[$key_],#32
+ vld1.32 {$rndlast},[$key_]
+
+ add $key_,$key,#32
+ mov $cnt,$rounds
+ b.eq .Lcbc_dec
+
+ cmp $rounds,#2
+ veor $dat,$dat,$ivec
+ veor $rndzero_n_last,q8,$rndlast
+ b.eq .Lcbc_enc128
+
+ vld1.32 {$in0-$in1},[$key_]
+ add $key_,$key,#16
+ add $key4,$key,#16*4
+ add $key5,$key,#16*5
+ aese $dat,q8
+ aesmc $dat,$dat
+ add $key6,$key,#16*6
+ add $key7,$key,#16*7
+ b .Lenter_cbc_enc
+
+.align 4
+.Loop_cbc_enc:
+ aese $dat,q8
+ aesmc $dat,$dat
+ vst1.8 {$ivec},[$out],#16
+.Lenter_cbc_enc:
+ aese $dat,q9
+ aesmc $dat,$dat
+ aese $dat,$in0
+ aesmc $dat,$dat
+ vld1.32 {q8},[$key4]
+ cmp $rounds,#4
+ aese $dat,$in1
+ aesmc $dat,$dat
+ vld1.32 {q9},[$key5]
+ b.eq .Lcbc_enc192
+
+ aese $dat,q8
+ aesmc $dat,$dat
+ vld1.32 {q8},[$key6]
+ aese $dat,q9
+ aesmc $dat,$dat
+ vld1.32 {q9},[$key7]
+ nop
+
+.Lcbc_enc192:
+ aese $dat,q8
+ aesmc $dat,$dat
+ subs $len,$len,#16
+ aese $dat,q9
+ aesmc $dat,$dat
+ cclr $step,eq
+ aese $dat,q10
+ aesmc $dat,$dat
+ aese $dat,q11
+ aesmc $dat,$dat
+ vld1.8 {q8},[$inp],$step
+ aese $dat,q12
+ aesmc $dat,$dat
+ veor q8,q8,$rndzero_n_last
+ aese $dat,q13
+ aesmc $dat,$dat
+ vld1.32 {q9},[$key_] // re-pre-load rndkey[1]
+ aese $dat,q14
+ aesmc $dat,$dat
+ aese $dat,q15
+ veor $ivec,$dat,$rndlast
+ b.hs .Loop_cbc_enc
+
+ vst1.8 {$ivec},[$out],#16
+ b .Lcbc_done
+
+.align 5
+.Lcbc_enc128:
+ vld1.32 {$in0-$in1},[$key_]
+ aese $dat,q8
+ aesmc $dat,$dat
+ b .Lenter_cbc_enc128
+.Loop_cbc_enc128:
+ aese $dat,q8
+ aesmc $dat,$dat
+ vst1.8 {$ivec},[$out],#16
+.Lenter_cbc_enc128:
+ aese $dat,q9
+ aesmc $dat,$dat
+ subs $len,$len,#16
+ aese $dat,$in0
+ aesmc $dat,$dat
+ cclr $step,eq
+ aese $dat,$in1
+ aesmc $dat,$dat
+ aese $dat,q10
+ aesmc $dat,$dat
+ aese $dat,q11
+ aesmc $dat,$dat
+ vld1.8 {q8},[$inp],$step
+ aese $dat,q12
+ aesmc $dat,$dat
+ aese $dat,q13
+ aesmc $dat,$dat
+ aese $dat,q14
+ aesmc $dat,$dat
+ veor q8,q8,$rndzero_n_last
+ aese $dat,q15
+ veor $ivec,$dat,$rndlast
+ b.hs .Loop_cbc_enc128
+
+ vst1.8 {$ivec},[$out],#16
+ b .Lcbc_done
+___
+{
+my ($dat2,$in2,$tmp2)=map("q$_",(10,11,9));
+$code.=<<___;
+.align 5
+.Lcbc_dec:
+ vld1.8 {$dat2},[$inp],#16
+ subs $len,$len,#32 // bias
+ add $cnt,$rounds,#2
+ vorr $in1,$dat,$dat
+ vorr $dat1,$dat,$dat
+ vorr $in2,$dat2,$dat2
+ b.lo .Lcbc_dec_tail
+
+ vorr $dat1,$dat2,$dat2
+ vld1.8 {$dat2},[$inp],#16
+ vorr $in0,$dat,$dat
+ vorr $in1,$dat1,$dat1
+ vorr $in2,$dat2,$dat2
+
+.Loop3x_cbc_dec:
+ aesd $dat0,q8
+ aesimc $dat0,$dat0
+ aesd $dat1,q8
+ aesimc $dat1,$dat1
+ aesd $dat2,q8
+ aesimc $dat2,$dat2
+ vld1.32 {q8},[$key_],#16
+ subs $cnt,$cnt,#2
+ aesd $dat0,q9
+ aesimc $dat0,$dat0
+ aesd $dat1,q9
+ aesimc $dat1,$dat1
+ aesd $dat2,q9
+ aesimc $dat2,$dat2
+ vld1.32 {q9},[$key_],#16
+ b.gt .Loop3x_cbc_dec
+
+ aesd $dat0,q8
+ aesimc $dat0,$dat0
+ aesd $dat1,q8
+ aesimc $dat1,$dat1
+ aesd $dat2,q8
+ aesimc $dat2,$dat2
+ veor $tmp0,$ivec,$rndlast
+ subs $len,$len,#0x30
+ veor $tmp1,$in0,$rndlast
+ mov.lo x6,$len // x6, $cnt, is zero at this point
+ aesd $dat0,q9
+ aesimc $dat0,$dat0
+ aesd $dat1,q9
+ aesimc $dat1,$dat1
+ aesd $dat2,q9
+ aesimc $dat2,$dat2
+ veor $tmp2,$in1,$rndlast
+ add $inp,$inp,x6 // $inp is adjusted in such way that
+ // at exit from the loop $dat1-$dat2
+ // are loaded with last "words"
+ vorr $ivec,$in2,$in2
+ mov $key_,$key
+ aesd $dat0,q12
+ aesimc $dat0,$dat0
+ aesd $dat1,q12
+ aesimc $dat1,$dat1
+ aesd $dat2,q12
+ aesimc $dat2,$dat2
+ vld1.8 {$in0},[$inp],#16
+ aesd $dat0,q13
+ aesimc $dat0,$dat0
+ aesd $dat1,q13
+ aesimc $dat1,$dat1
+ aesd $dat2,q13
+ aesimc $dat2,$dat2
+ vld1.8 {$in1},[$inp],#16
+ aesd $dat0,q14
+ aesimc $dat0,$dat0
+ aesd $dat1,q14
+ aesimc $dat1,$dat1
+ aesd $dat2,q14
+ aesimc $dat2,$dat2
+ vld1.8 {$in2},[$inp],#16
+ aesd $dat0,q15
+ aesd $dat1,q15
+ aesd $dat2,q15
+ vld1.32 {q8},[$key_],#16 // re-pre-load rndkey[0]
+ add $cnt,$rounds,#2
+ veor $tmp0,$tmp0,$dat0
+ veor $tmp1,$tmp1,$dat1
+ veor $dat2,$dat2,$tmp2
+ vld1.32 {q9},[$key_],#16 // re-pre-load rndkey[1]
+ vst1.8 {$tmp0},[$out],#16
+ vorr $dat0,$in0,$in0
+ vst1.8 {$tmp1},[$out],#16
+ vorr $dat1,$in1,$in1
+ vst1.8 {$dat2},[$out],#16
+ vorr $dat2,$in2,$in2
+ b.hs .Loop3x_cbc_dec
+
+ cmn $len,#0x30
+ b.eq .Lcbc_done
+ nop
+
+.Lcbc_dec_tail:
+ aesd $dat1,q8
+ aesimc $dat1,$dat1
+ aesd $dat2,q8
+ aesimc $dat2,$dat2
+ vld1.32 {q8},[$key_],#16
+ subs $cnt,$cnt,#2
+ aesd $dat1,q9
+ aesimc $dat1,$dat1
+ aesd $dat2,q9
+ aesimc $dat2,$dat2
+ vld1.32 {q9},[$key_],#16
+ b.gt .Lcbc_dec_tail
+
+ aesd $dat1,q8
+ aesimc $dat1,$dat1
+ aesd $dat2,q8
+ aesimc $dat2,$dat2
+ aesd $dat1,q9
+ aesimc $dat1,$dat1
+ aesd $dat2,q9
+ aesimc $dat2,$dat2
+ aesd $dat1,q12
+ aesimc $dat1,$dat1
+ aesd $dat2,q12
+ aesimc $dat2,$dat2
+ cmn $len,#0x20
+ aesd $dat1,q13
+ aesimc $dat1,$dat1
+ aesd $dat2,q13
+ aesimc $dat2,$dat2
+ veor $tmp1,$ivec,$rndlast
+ aesd $dat1,q14
+ aesimc $dat1,$dat1
+ aesd $dat2,q14
+ aesimc $dat2,$dat2
+ veor $tmp2,$in1,$rndlast
+ aesd $dat1,q15
+ aesd $dat2,q15
+ b.eq .Lcbc_dec_one
+ veor $tmp1,$tmp1,$dat1
+ veor $tmp2,$tmp2,$dat2
+ vorr $ivec,$in2,$in2
+ vst1.8 {$tmp1},[$out],#16
+ vst1.8 {$tmp2},[$out],#16
+ b .Lcbc_done
+
+.Lcbc_dec_one:
+ veor $tmp1,$tmp1,$dat2
+ vorr $ivec,$in2,$in2
+ vst1.8 {$tmp1},[$out],#16
+
+.Lcbc_done:
+ vst1.8 {$ivec},[$ivp]
+.Lcbc_abort:
+___
+}
+$code.=<<___ if ($flavour !~ /64/);
+ vldmia sp!,{d8-d15}
+ ldmia sp!,{r4-r8,pc}
+___
+$code.=<<___ if ($flavour =~ /64/);
+ ldr x29,[sp],#16
+ ret
+___
+$code.=<<___;
+.size ${prefix}_cbc_encrypt,.-${prefix}_cbc_encrypt
+___
+}}}
+{{{
+my ($inp,$out,$len,$key,$ivp)=map("x$_",(0..4));
+my ($rounds,$cnt,$key_)=("w5","w6","x7");
+my ($ctr,$tctr0,$tctr1,$tctr2)=map("w$_",(8..10,12));
+my $step="x12"; # aliases with $tctr2
+
+my ($dat0,$dat1,$in0,$in1,$tmp0,$tmp1,$ivec,$rndlast)=map("q$_",(0..7));
+my ($dat2,$in2,$tmp2)=map("q$_",(10,11,9));
+
+my ($dat,$tmp)=($dat0,$tmp0);
+
+### q8-q15 preloaded key schedule
+
+$code.=<<___;
+.globl ${prefix}_ctr32_encrypt_blocks
+.type ${prefix}_ctr32_encrypt_blocks,%function
+.align 5
+${prefix}_ctr32_encrypt_blocks:
+___
+$code.=<<___ if ($flavour =~ /64/);
+ stp x29,x30,[sp,#-16]!
+ add x29,sp,#0
+___
+$code.=<<___ if ($flavour !~ /64/);
+ mov ip,sp
+ stmdb sp!,{r4-r10,lr}
+ vstmdb sp!,{d8-d15} @ ABI specification says so
+ ldr r4, [ip] @ load remaining arg
+___
+$code.=<<___;
+ ldr $rounds,[$key,#240]
+
+ ldr $ctr, [$ivp, #12]
+ vld1.32 {$dat0},[$ivp]
+
+ vld1.32 {q8-q9},[$key] // load key schedule...
+ sub $rounds,$rounds,#4
+ mov $step,#16
+ cmp $len,#2
+ add $key_,$key,x5,lsl#4 // pointer to last 5 round keys
+ sub $rounds,$rounds,#2
+ vld1.32 {q12-q13},[$key_],#32
+ vld1.32 {q14-q15},[$key_],#32
+ vld1.32 {$rndlast},[$key_]
+ add $key_,$key,#32
+ mov $cnt,$rounds
+ cclr $step,lo
+#ifndef __ARMEB__
+ rev $ctr, $ctr
+#endif
+ vorr $dat1,$dat0,$dat0
+ add $tctr1, $ctr, #1
+ vorr $dat2,$dat0,$dat0
+ add $ctr, $ctr, #2
+ vorr $ivec,$dat0,$dat0
+ rev $tctr1, $tctr1
+ vmov.32 ${dat1}[3],$tctr1
+ b.ls .Lctr32_tail
+ rev $tctr2, $ctr
+ sub $len,$len,#3 // bias
+ vmov.32 ${dat2}[3],$tctr2
+ b .Loop3x_ctr32
+
+.align 4
+.Loop3x_ctr32:
+ aese $dat0,q8
+ aesmc $dat0,$dat0
+ aese $dat1,q8
+ aesmc $dat1,$dat1
+ aese $dat2,q8
+ aesmc $dat2,$dat2
+ vld1.32 {q8},[$key_],#16
+ subs $cnt,$cnt,#2
+ aese $dat0,q9
+ aesmc $dat0,$dat0
+ aese $dat1,q9
+ aesmc $dat1,$dat1
+ aese $dat2,q9
+ aesmc $dat2,$dat2
+ vld1.32 {q9},[$key_],#16
+ b.gt .Loop3x_ctr32
+
+ aese $dat0,q8
+ aesmc $tmp0,$dat0
+ aese $dat1,q8
+ aesmc $tmp1,$dat1
+ vld1.8 {$in0},[$inp],#16
+ vorr $dat0,$ivec,$ivec
+ aese $dat2,q8
+ aesmc $dat2,$dat2
+ vld1.8 {$in1},[$inp],#16
+ vorr $dat1,$ivec,$ivec
+ aese $tmp0,q9
+ aesmc $tmp0,$tmp0
+ aese $tmp1,q9
+ aesmc $tmp1,$tmp1
+ vld1.8 {$in2},[$inp],#16
+ mov $key_,$key
+ aese $dat2,q9
+ aesmc $tmp2,$dat2
+ vorr $dat2,$ivec,$ivec
+ add $tctr0,$ctr,#1
+ aese $tmp0,q12
+ aesmc $tmp0,$tmp0
+ aese $tmp1,q12
+ aesmc $tmp1,$tmp1
+ veor $in0,$in0,$rndlast
+ add $tctr1,$ctr,#2
+ aese $tmp2,q12
+ aesmc $tmp2,$tmp2
+ veor $in1,$in1,$rndlast
+ add $ctr,$ctr,#3
+ aese $tmp0,q13
+ aesmc $tmp0,$tmp0
+ aese $tmp1,q13
+ aesmc $tmp1,$tmp1
+ veor $in2,$in2,$rndlast
+ rev $tctr0,$tctr0
+ aese $tmp2,q13
+ aesmc $tmp2,$tmp2
+ vmov.32 ${dat0}[3], $tctr0
+ rev $tctr1,$tctr1
+ aese $tmp0,q14
+ aesmc $tmp0,$tmp0
+ aese $tmp1,q14
+ aesmc $tmp1,$tmp1
+ vmov.32 ${dat1}[3], $tctr1
+ rev $tctr2,$ctr
+ aese $tmp2,q14
+ aesmc $tmp2,$tmp2
+ vmov.32 ${dat2}[3], $tctr2
+ subs $len,$len,#3
+ aese $tmp0,q15
+ aese $tmp1,q15
+ aese $tmp2,q15
+
+ veor $in0,$in0,$tmp0
+ vld1.32 {q8},[$key_],#16 // re-pre-load rndkey[0]
+ vst1.8 {$in0},[$out],#16
+ veor $in1,$in1,$tmp1
+ mov $cnt,$rounds
+ vst1.8 {$in1},[$out],#16
+ veor $in2,$in2,$tmp2
+ vld1.32 {q9},[$key_],#16 // re-pre-load rndkey[1]
+ vst1.8 {$in2},[$out],#16
+ b.hs .Loop3x_ctr32
+
+ adds $len,$len,#3
+ b.eq .Lctr32_done
+ cmp $len,#1
+ mov $step,#16
+ cclr $step,eq
+
+.Lctr32_tail:
+ aese $dat0,q8
+ aesmc $dat0,$dat0
+ aese $dat1,q8
+ aesmc $dat1,$dat1
+ vld1.32 {q8},[$key_],#16
+ subs $cnt,$cnt,#2
+ aese $dat0,q9
+ aesmc $dat0,$dat0
+ aese $dat1,q9
+ aesmc $dat1,$dat1
+ vld1.32 {q9},[$key_],#16
+ b.gt .Lctr32_tail
+
+ aese $dat0,q8
+ aesmc $dat0,$dat0
+ aese $dat1,q8
+ aesmc $dat1,$dat1
+ aese $dat0,q9
+ aesmc $dat0,$dat0
+ aese $dat1,q9
+ aesmc $dat1,$dat1
+ vld1.8 {$in0},[$inp],$step
+ aese $dat0,q12
+ aesmc $dat0,$dat0
+ aese $dat1,q12
+ aesmc $dat1,$dat1
+ vld1.8 {$in1},[$inp]
+ aese $dat0,q13
+ aesmc $dat0,$dat0
+ aese $dat1,q13
+ aesmc $dat1,$dat1
+ veor $in0,$in0,$rndlast
+ aese $dat0,q14
+ aesmc $dat0,$dat0
+ aese $dat1,q14
+ aesmc $dat1,$dat1
+ veor $in1,$in1,$rndlast
+ aese $dat0,q15
+ aese $dat1,q15
+
+ cmp $len,#1
+ veor $in0,$in0,$dat0
+ veor $in1,$in1,$dat1
+ vst1.8 {$in0},[$out],#16
+ b.eq .Lctr32_done
+ vst1.8 {$in1},[$out]
+
+.Lctr32_done:
+___
+$code.=<<___ if ($flavour !~ /64/);
+ vldmia sp!,{d8-d15}
+ ldmia sp!,{r4-r10,pc}
+___
+$code.=<<___ if ($flavour =~ /64/);
+ ldr x29,[sp],#16
+ ret
+___
+$code.=<<___;
+.size ${prefix}_ctr32_encrypt_blocks,.-${prefix}_ctr32_encrypt_blocks
+___
+}}}
+$code.=<<___;
+#endif
+___
+########################################
+if ($flavour =~ /64/) { ######## 64-bit code
+ my %opcode = (
+ "aesd" => 0x4e285800, "aese" => 0x4e284800,
+ "aesimc"=> 0x4e287800, "aesmc" => 0x4e286800 );
+
+ local *unaes = sub {
+ my ($mnemonic,$arg)=@_;
+
+ $arg =~ m/[qv]([0-9]+)[^,]*,\s*[qv]([0-9]+)/o &&
+ sprintf ".inst\t0x%08x\t//%s %s",
+ $opcode{$mnemonic}|$1|($2<<5),
+ $mnemonic,$arg;
+ };
+
+ foreach(split("\n",$code)) {
+ s/\`([^\`]*)\`/eval($1)/geo;
+
+ s/\bq([0-9]+)\b/"v".($1<8?$1:$1+8).".16b"/geo; # old->new registers
+ s/@\s/\/\//o; # old->new style commentary
+
+ #s/[v]?(aes\w+)\s+([qv].*)/unaes($1,$2)/geo or
+ s/cclr\s+([wx])([^,]+),\s*([a-z]+)/csel $1$2,$1zr,$1$2,$3/o or
+ s/mov\.([a-z]+)\s+([wx][0-9]+),\s*([wx][0-9]+)/csel $2,$3,$2,$1/o or
+ s/vmov\.i8/movi/o or # fix up legacy mnemonics
+ s/vext\.8/ext/o or
+ s/vrev32\.8/rev32/o or
+ s/vtst\.8/cmtst/o or
+ s/vshr/ushr/o or
+ s/^(\s+)v/$1/o or # strip off v prefix
+ s/\bbx\s+lr\b/ret/o;
+
+ # fix up remainig legacy suffixes
+ s/\.[ui]?8//o;
+ m/\],#8/o and s/\.16b/\.8b/go;
+ s/\.[ui]?32//o and s/\.16b/\.4s/go;
+ s/\.[ui]?64//o and s/\.16b/\.2d/go;
+ s/\.[42]([sd])\[([0-3])\]/\.$1\[$2\]/o;
+
+ print $_,"\n";
+ }
+} else { ######## 32-bit code
+ my %opcode = (
+ "aesd" => 0xf3b00340, "aese" => 0xf3b00300,
+ "aesimc"=> 0xf3b003c0, "aesmc" => 0xf3b00380 );
+
+ local *unaes = sub {
+ my ($mnemonic,$arg)=@_;
+
+ if ($arg =~ m/[qv]([0-9]+)[^,]*,\s*[qv]([0-9]+)/o) {
+ my $word = $opcode{$mnemonic}|(($1&7)<<13)|(($1&8)<<19)
+ |(($2&7)<<1) |(($2&8)<<2);
+ # since ARMv7 instructions are always encoded little-endian.
+ # correct solution is to use .inst directive, but older
+ # assemblers don't implement it:-(
+ sprintf ".byte\t0x%02x,0x%02x,0x%02x,0x%02x\t@ %s %s",
+ $word&0xff,($word>>8)&0xff,
+ ($word>>16)&0xff,($word>>24)&0xff,
+ $mnemonic,$arg;
+ }
+ };
+
+ sub unvtbl {
+ my $arg=shift;
+
+ $arg =~ m/q([0-9]+),\s*\{q([0-9]+)\},\s*q([0-9]+)/o &&
+ sprintf "vtbl.8 d%d,{q%d},d%d\n\t".
+ "vtbl.8 d%d,{q%d},d%d", 2*$1,$2,2*$3, 2*$1+1,$2,2*$3+1;
+ }
+
+ sub unvdup32 {
+ my $arg=shift;
+
+ $arg =~ m/q([0-9]+),\s*q([0-9]+)\[([0-3])\]/o &&
+ sprintf "vdup.32 q%d,d%d[%d]",$1,2*$2+($3>>1),$3&1;
+ }
+
+ sub unvmov32 {
+ my $arg=shift;
+
+ $arg =~ m/q([0-9]+)\[([0-3])\],(.*)/o &&
+ sprintf "vmov.32 d%d[%d],%s",2*$1+($2>>1),$2&1,$3;
+ }
+
+ foreach(split("\n",$code)) {
+ s/\`([^\`]*)\`/eval($1)/geo;
+
+ s/\b[wx]([0-9]+)\b/r$1/go; # new->old registers
+ s/\bv([0-9])\.[12468]+[bsd]\b/q$1/go; # new->old registers
+ s/\/\/\s?/@ /o; # new->old style commentary
+
+ # fix up remainig new-style suffixes
+ s/\{q([0-9]+)\},\s*\[(.+)\],#8/sprintf "{d%d},[$2]!",2*$1/eo or
+ s/\],#[0-9]+/]!/o;
+
+ s/[v]?(aes\w+)\s+([qv].*)/unaes($1,$2)/geo or
+ s/cclr\s+([^,]+),\s*([a-z]+)/mov$2 $1,#0/o or
+ s/vtbl\.8\s+(.*)/unvtbl($1)/geo or
+ s/vdup\.32\s+(.*)/unvdup32($1)/geo or
+ s/vmov\.32\s+(.*)/unvmov32($1)/geo or
+ s/^(\s+)b\./$1b/o or
+ s/^(\s+)mov\./$1mov/o or
+ s/^(\s+)ret/$1bx\tlr/o;
+
+ print $_,"\n";
+ }
+}
+
+close STDOUT;
diff --git a/crypto/openssl/crypto/aes/asm/bsaes-armv7.pl b/crypto/openssl/crypto/aes/asm/bsaes-armv7.pl
new file mode 100755
index 0000000..fcc81d1
--- /dev/null
+++ b/crypto/openssl/crypto/aes/asm/bsaes-armv7.pl
@@ -0,0 +1,2469 @@
+#!/usr/bin/env perl
+
+# ====================================================================
+# Written by Andy Polyakov <appro@openssl.org> for the OpenSSL
+# project. The module is, however, dual licensed under OpenSSL and
+# CRYPTOGAMS licenses depending on where you obtain it. For further
+# details see http://www.openssl.org/~appro/cryptogams/.
+#
+# Specific modes and adaptation for Linux kernel by Ard Biesheuvel
+# <ard.biesheuvel@linaro.org>. Permission to use under GPL terms is
+# granted.
+# ====================================================================
+
+# Bit-sliced AES for ARM NEON
+#
+# February 2012.
+#
+# This implementation is direct adaptation of bsaes-x86_64 module for
+# ARM NEON. Except that this module is endian-neutral [in sense that
+# it can be compiled for either endianness] by courtesy of vld1.8's
+# neutrality. Initial version doesn't implement interface to OpenSSL,
+# only low-level primitives and unsupported entry points, just enough
+# to collect performance results, which for Cortex-A8 core are:
+#
+# encrypt 19.5 cycles per byte processed with 128-bit key
+# decrypt 22.1 cycles per byte processed with 128-bit key
+# key conv. 440 cycles per 128-bit key/0.18 of 8x block
+#
+# Snapdragon S4 encrypts byte in 17.6 cycles and decrypts in 19.7,
+# which is [much] worse than anticipated (for further details see
+# http://www.openssl.org/~appro/Snapdragon-S4.html).
+#
+# Cortex-A15 manages in 14.2/16.1 cycles [when integer-only code
+# manages in 20.0 cycles].
+#
+# When comparing to x86_64 results keep in mind that NEON unit is
+# [mostly] single-issue and thus can't [fully] benefit from
+# instruction-level parallelism. And when comparing to aes-armv4
+# results keep in mind key schedule conversion overhead (see
+# bsaes-x86_64.pl for further details)...
+#
+# <appro@openssl.org>
+
+# April-August 2013
+#
+# Add CBC, CTR and XTS subroutines, adapt for kernel use.
+#
+# <ard.biesheuvel@linaro.org>
+
+while (($output=shift) && ($output!~/^\w[\w\-]*\.\w+$/)) {}
+open STDOUT,">$output";
+
+my ($inp,$out,$len,$key)=("r0","r1","r2","r3");
+my @XMM=map("q$_",(0..15));
+
+{
+my ($key,$rounds,$const)=("r4","r5","r6");
+
+sub Dlo() { shift=~m|q([1]?[0-9])|?"d".($1*2):""; }
+sub Dhi() { shift=~m|q([1]?[0-9])|?"d".($1*2+1):""; }
+
+sub Sbox {
+# input in lsb > [b0, b1, b2, b3, b4, b5, b6, b7] < msb
+# output in lsb > [b0, b1, b4, b6, b3, b7, b2, b5] < msb
+my @b=@_[0..7];
+my @t=@_[8..11];
+my @s=@_[12..15];
+ &InBasisChange (@b);
+ &Inv_GF256 (@b[6,5,0,3,7,1,4,2],@t,@s);
+ &OutBasisChange (@b[7,1,4,2,6,5,0,3]);
+}
+
+sub InBasisChange {
+# input in lsb > [b0, b1, b2, b3, b4, b5, b6, b7] < msb
+# output in lsb > [b6, b5, b0, b3, b7, b1, b4, b2] < msb
+my @b=@_[0..7];
+$code.=<<___;
+ veor @b[2], @b[2], @b[1]
+ veor @b[5], @b[5], @b[6]
+ veor @b[3], @b[3], @b[0]
+ veor @b[6], @b[6], @b[2]
+ veor @b[5], @b[5], @b[0]
+
+ veor @b[6], @b[6], @b[3]
+ veor @b[3], @b[3], @b[7]
+ veor @b[7], @b[7], @b[5]
+ veor @b[3], @b[3], @b[4]
+ veor @b[4], @b[4], @b[5]
+
+ veor @b[2], @b[2], @b[7]
+ veor @b[3], @b[3], @b[1]
+ veor @b[1], @b[1], @b[5]
+___
+}
+
+sub OutBasisChange {
+# input in lsb > [b0, b1, b2, b3, b4, b5, b6, b7] < msb
+# output in lsb > [b6, b1, b2, b4, b7, b0, b3, b5] < msb
+my @b=@_[0..7];
+$code.=<<___;
+ veor @b[0], @b[0], @b[6]
+ veor @b[1], @b[1], @b[4]
+ veor @b[4], @b[4], @b[6]
+ veor @b[2], @b[2], @b[0]
+ veor @b[6], @b[6], @b[1]
+
+ veor @b[1], @b[1], @b[5]
+ veor @b[5], @b[5], @b[3]
+ veor @b[3], @b[3], @b[7]
+ veor @b[7], @b[7], @b[5]
+ veor @b[2], @b[2], @b[5]
+
+ veor @b[4], @b[4], @b[7]
+___
+}
+
+sub InvSbox {
+# input in lsb > [b0, b1, b2, b3, b4, b5, b6, b7] < msb
+# output in lsb > [b0, b1, b6, b4, b2, b7, b3, b5] < msb
+my @b=@_[0..7];
+my @t=@_[8..11];
+my @s=@_[12..15];
+ &InvInBasisChange (@b);
+ &Inv_GF256 (@b[5,1,2,6,3,7,0,4],@t,@s);
+ &InvOutBasisChange (@b[3,7,0,4,5,1,2,6]);
+}
+
+sub InvInBasisChange { # OutBasisChange in reverse (with twist)
+my @b=@_[5,1,2,6,3,7,0,4];
+$code.=<<___
+ veor @b[1], @b[1], @b[7]
+ veor @b[4], @b[4], @b[7]
+
+ veor @b[7], @b[7], @b[5]
+ veor @b[1], @b[1], @b[3]
+ veor @b[2], @b[2], @b[5]
+ veor @b[3], @b[3], @b[7]
+
+ veor @b[6], @b[6], @b[1]
+ veor @b[2], @b[2], @b[0]
+ veor @b[5], @b[5], @b[3]
+ veor @b[4], @b[4], @b[6]
+ veor @b[0], @b[0], @b[6]
+ veor @b[1], @b[1], @b[4]
+___
+}
+
+sub InvOutBasisChange { # InBasisChange in reverse
+my @b=@_[2,5,7,3,6,1,0,4];
+$code.=<<___;
+ veor @b[1], @b[1], @b[5]
+ veor @b[2], @b[2], @b[7]
+
+ veor @b[3], @b[3], @b[1]
+ veor @b[4], @b[4], @b[5]
+ veor @b[7], @b[7], @b[5]
+ veor @b[3], @b[3], @b[4]
+ veor @b[5], @b[5], @b[0]
+ veor @b[3], @b[3], @b[7]
+ veor @b[6], @b[6], @b[2]
+ veor @b[2], @b[2], @b[1]
+ veor @b[6], @b[6], @b[3]
+
+ veor @b[3], @b[3], @b[0]
+ veor @b[5], @b[5], @b[6]
+___
+}
+
+sub Mul_GF4 {
+#;*************************************************************
+#;* Mul_GF4: Input x0-x1,y0-y1 Output x0-x1 Temp t0 (8) *
+#;*************************************************************
+my ($x0,$x1,$y0,$y1,$t0,$t1)=@_;
+$code.=<<___;
+ veor $t0, $y0, $y1
+ vand $t0, $t0, $x0
+ veor $x0, $x0, $x1
+ vand $t1, $x1, $y0
+ vand $x0, $x0, $y1
+ veor $x1, $t1, $t0
+ veor $x0, $x0, $t1
+___
+}
+
+sub Mul_GF4_N { # not used, see next subroutine
+# multiply and scale by N
+my ($x0,$x1,$y0,$y1,$t0)=@_;
+$code.=<<___;
+ veor $t0, $y0, $y1
+ vand $t0, $t0, $x0
+ veor $x0, $x0, $x1
+ vand $x1, $x1, $y0
+ vand $x0, $x0, $y1
+ veor $x1, $x1, $x0
+ veor $x0, $x0, $t0
+___
+}
+
+sub Mul_GF4_N_GF4 {
+# interleaved Mul_GF4_N and Mul_GF4
+my ($x0,$x1,$y0,$y1,$t0,
+ $x2,$x3,$y2,$y3,$t1)=@_;
+$code.=<<___;
+ veor $t0, $y0, $y1
+ veor $t1, $y2, $y3
+ vand $t0, $t0, $x0
+ vand $t1, $t1, $x2
+ veor $x0, $x0, $x1
+ veor $x2, $x2, $x3
+ vand $x1, $x1, $y0
+ vand $x3, $x3, $y2
+ vand $x0, $x0, $y1
+ vand $x2, $x2, $y3
+ veor $x1, $x1, $x0
+ veor $x2, $x2, $x3
+ veor $x0, $x0, $t0
+ veor $x3, $x3, $t1
+___
+}
+sub Mul_GF16_2 {
+my @x=@_[0..7];
+my @y=@_[8..11];
+my @t=@_[12..15];
+$code.=<<___;
+ veor @t[0], @x[0], @x[2]
+ veor @t[1], @x[1], @x[3]
+___
+ &Mul_GF4 (@x[0], @x[1], @y[0], @y[1], @t[2..3]);
+$code.=<<___;
+ veor @y[0], @y[0], @y[2]
+ veor @y[1], @y[1], @y[3]
+___
+ Mul_GF4_N_GF4 (@t[0], @t[1], @y[0], @y[1], @t[3],
+ @x[2], @x[3], @y[2], @y[3], @t[2]);
+$code.=<<___;
+ veor @x[0], @x[0], @t[0]
+ veor @x[2], @x[2], @t[0]
+ veor @x[1], @x[1], @t[1]
+ veor @x[3], @x[3], @t[1]
+
+ veor @t[0], @x[4], @x[6]
+ veor @t[1], @x[5], @x[7]
+___
+ &Mul_GF4_N_GF4 (@t[0], @t[1], @y[0], @y[1], @t[3],
+ @x[6], @x[7], @y[2], @y[3], @t[2]);
+$code.=<<___;
+ veor @y[0], @y[0], @y[2]
+ veor @y[1], @y[1], @y[3]
+___
+ &Mul_GF4 (@x[4], @x[5], @y[0], @y[1], @t[2..3]);
+$code.=<<___;
+ veor @x[4], @x[4], @t[0]
+ veor @x[6], @x[6], @t[0]
+ veor @x[5], @x[5], @t[1]
+ veor @x[7], @x[7], @t[1]
+___
+}
+sub Inv_GF256 {
+#;********************************************************************
+#;* Inv_GF256: Input x0-x7 Output x0-x7 Temp t0-t3,s0-s3 (144) *
+#;********************************************************************
+my @x=@_[0..7];
+my @t=@_[8..11];
+my @s=@_[12..15];
+# direct optimizations from hardware
+$code.=<<___;
+ veor @t[3], @x[4], @x[6]
+ veor @t[2], @x[5], @x[7]
+ veor @t[1], @x[1], @x[3]
+ veor @s[1], @x[7], @x[6]
+ vmov @t[0], @t[2]
+ veor @s[0], @x[0], @x[2]
+
+ vorr @t[2], @t[2], @t[1]
+ veor @s[3], @t[3], @t[0]
+ vand @s[2], @t[3], @s[0]
+ vorr @t[3], @t[3], @s[0]
+ veor @s[0], @s[0], @t[1]
+ vand @t[0], @t[0], @t[1]
+ veor @t[1], @x[3], @x[2]
+ vand @s[3], @s[3], @s[0]
+ vand @s[1], @s[1], @t[1]
+ veor @t[1], @x[4], @x[5]
+ veor @s[0], @x[1], @x[0]
+ veor @t[3], @t[3], @s[1]
+ veor @t[2], @t[2], @s[1]
+ vand @s[1], @t[1], @s[0]
+ vorr @t[1], @t[1], @s[0]
+ veor @t[3], @t[3], @s[3]
+ veor @t[0], @t[0], @s[1]
+ veor @t[2], @t[2], @s[2]
+ veor @t[1], @t[1], @s[3]
+ veor @t[0], @t[0], @s[2]
+ vand @s[0], @x[7], @x[3]
+ veor @t[1], @t[1], @s[2]
+ vand @s[1], @x[6], @x[2]
+ vand @s[2], @x[5], @x[1]
+ vorr @s[3], @x[4], @x[0]
+ veor @t[3], @t[3], @s[0]
+ veor @t[1], @t[1], @s[2]
+ veor @t[0], @t[0], @s[3]
+ veor @t[2], @t[2], @s[1]
+
+ @ Inv_GF16 \t0, \t1, \t2, \t3, \s0, \s1, \s2, \s3
+
+ @ new smaller inversion
+
+ vand @s[2], @t[3], @t[1]
+ vmov @s[0], @t[0]
+
+ veor @s[1], @t[2], @s[2]
+ veor @s[3], @t[0], @s[2]
+ veor @s[2], @t[0], @s[2] @ @s[2]=@s[3]
+
+ vbsl @s[1], @t[1], @t[0]
+ vbsl @s[3], @t[3], @t[2]
+ veor @t[3], @t[3], @t[2]
+
+ vbsl @s[0], @s[1], @s[2]
+ vbsl @t[0], @s[2], @s[1]
+
+ vand @s[2], @s[0], @s[3]
+ veor @t[1], @t[1], @t[0]
+
+ veor @s[2], @s[2], @t[3]
+___
+# output in s3, s2, s1, t1
+
+# Mul_GF16_2 \x0, \x1, \x2, \x3, \x4, \x5, \x6, \x7, \t2, \t3, \t0, \t1, \s0, \s1, \s2, \s3
+
+# Mul_GF16_2 \x0, \x1, \x2, \x3, \x4, \x5, \x6, \x7, \s3, \s2, \s1, \t1, \s0, \t0, \t2, \t3
+ &Mul_GF16_2(@x,@s[3,2,1],@t[1],@s[0],@t[0,2,3]);
+
+### output msb > [x3,x2,x1,x0,x7,x6,x5,x4] < lsb
+}
+
+# AES linear components
+
+sub ShiftRows {
+my @x=@_[0..7];
+my @t=@_[8..11];
+my $mask=pop;
+$code.=<<___;
+ vldmia $key!, {@t[0]-@t[3]}
+ veor @t[0], @t[0], @x[0]
+ veor @t[1], @t[1], @x[1]
+ vtbl.8 `&Dlo(@x[0])`, {@t[0]}, `&Dlo($mask)`
+ vtbl.8 `&Dhi(@x[0])`, {@t[0]}, `&Dhi($mask)`
+ vldmia $key!, {@t[0]}
+ veor @t[2], @t[2], @x[2]
+ vtbl.8 `&Dlo(@x[1])`, {@t[1]}, `&Dlo($mask)`
+ vtbl.8 `&Dhi(@x[1])`, {@t[1]}, `&Dhi($mask)`
+ vldmia $key!, {@t[1]}
+ veor @t[3], @t[3], @x[3]
+ vtbl.8 `&Dlo(@x[2])`, {@t[2]}, `&Dlo($mask)`
+ vtbl.8 `&Dhi(@x[2])`, {@t[2]}, `&Dhi($mask)`
+ vldmia $key!, {@t[2]}
+ vtbl.8 `&Dlo(@x[3])`, {@t[3]}, `&Dlo($mask)`
+ vtbl.8 `&Dhi(@x[3])`, {@t[3]}, `&Dhi($mask)`
+ vldmia $key!, {@t[3]}
+ veor @t[0], @t[0], @x[4]
+ veor @t[1], @t[1], @x[5]
+ vtbl.8 `&Dlo(@x[4])`, {@t[0]}, `&Dlo($mask)`
+ vtbl.8 `&Dhi(@x[4])`, {@t[0]}, `&Dhi($mask)`
+ veor @t[2], @t[2], @x[6]
+ vtbl.8 `&Dlo(@x[5])`, {@t[1]}, `&Dlo($mask)`
+ vtbl.8 `&Dhi(@x[5])`, {@t[1]}, `&Dhi($mask)`
+ veor @t[3], @t[3], @x[7]
+ vtbl.8 `&Dlo(@x[6])`, {@t[2]}, `&Dlo($mask)`
+ vtbl.8 `&Dhi(@x[6])`, {@t[2]}, `&Dhi($mask)`
+ vtbl.8 `&Dlo(@x[7])`, {@t[3]}, `&Dlo($mask)`
+ vtbl.8 `&Dhi(@x[7])`, {@t[3]}, `&Dhi($mask)`
+___
+}
+
+sub MixColumns {
+# modified to emit output in order suitable for feeding back to aesenc[last]
+my @x=@_[0..7];
+my @t=@_[8..15];
+my $inv=@_[16]; # optional
+$code.=<<___;
+ vext.8 @t[0], @x[0], @x[0], #12 @ x0 <<< 32
+ vext.8 @t[1], @x[1], @x[1], #12
+ veor @x[0], @x[0], @t[0] @ x0 ^ (x0 <<< 32)
+ vext.8 @t[2], @x[2], @x[2], #12
+ veor @x[1], @x[1], @t[1]
+ vext.8 @t[3], @x[3], @x[3], #12
+ veor @x[2], @x[2], @t[2]
+ vext.8 @t[4], @x[4], @x[4], #12
+ veor @x[3], @x[3], @t[3]
+ vext.8 @t[5], @x[5], @x[5], #12
+ veor @x[4], @x[4], @t[4]
+ vext.8 @t[6], @x[6], @x[6], #12
+ veor @x[5], @x[5], @t[5]
+ vext.8 @t[7], @x[7], @x[7], #12
+ veor @x[6], @x[6], @t[6]
+
+ veor @t[1], @t[1], @x[0]
+ veor @x[7], @x[7], @t[7]
+ vext.8 @x[0], @x[0], @x[0], #8 @ (x0 ^ (x0 <<< 32)) <<< 64)
+ veor @t[2], @t[2], @x[1]
+ veor @t[0], @t[0], @x[7]
+ veor @t[1], @t[1], @x[7]
+ vext.8 @x[1], @x[1], @x[1], #8
+ veor @t[5], @t[5], @x[4]
+ veor @x[0], @x[0], @t[0]
+ veor @t[6], @t[6], @x[5]
+ veor @x[1], @x[1], @t[1]
+ vext.8 @t[0], @x[4], @x[4], #8
+ veor @t[4], @t[4], @x[3]
+ vext.8 @t[1], @x[5], @x[5], #8
+ veor @t[7], @t[7], @x[6]
+ vext.8 @x[4], @x[3], @x[3], #8
+ veor @t[3], @t[3], @x[2]
+ vext.8 @x[5], @x[7], @x[7], #8
+ veor @t[4], @t[4], @x[7]
+ vext.8 @x[3], @x[6], @x[6], #8
+ veor @t[3], @t[3], @x[7]
+ vext.8 @x[6], @x[2], @x[2], #8
+ veor @x[7], @t[1], @t[5]
+___
+$code.=<<___ if (!$inv);
+ veor @x[2], @t[0], @t[4]
+ veor @x[4], @x[4], @t[3]
+ veor @x[5], @x[5], @t[7]
+ veor @x[3], @x[3], @t[6]
+ @ vmov @x[2], @t[0]
+ veor @x[6], @x[6], @t[2]
+ @ vmov @x[7], @t[1]
+___
+$code.=<<___ if ($inv);
+ veor @t[3], @t[3], @x[4]
+ veor @x[5], @x[5], @t[7]
+ veor @x[2], @x[3], @t[6]
+ veor @x[3], @t[0], @t[4]
+ veor @x[4], @x[6], @t[2]
+ vmov @x[6], @t[3]
+ @ vmov @x[7], @t[1]
+___
+}
+
+sub InvMixColumns_orig {
+my @x=@_[0..7];
+my @t=@_[8..15];
+
+$code.=<<___;
+ @ multiplication by 0x0e
+ vext.8 @t[7], @x[7], @x[7], #12
+ vmov @t[2], @x[2]
+ veor @x[2], @x[2], @x[5] @ 2 5
+ veor @x[7], @x[7], @x[5] @ 7 5
+ vext.8 @t[0], @x[0], @x[0], #12
+ vmov @t[5], @x[5]
+ veor @x[5], @x[5], @x[0] @ 5 0 [1]
+ veor @x[0], @x[0], @x[1] @ 0 1
+ vext.8 @t[1], @x[1], @x[1], #12
+ veor @x[1], @x[1], @x[2] @ 1 25
+ veor @x[0], @x[0], @x[6] @ 01 6 [2]
+ vext.8 @t[3], @x[3], @x[3], #12
+ veor @x[1], @x[1], @x[3] @ 125 3 [4]
+ veor @x[2], @x[2], @x[0] @ 25 016 [3]
+ veor @x[3], @x[3], @x[7] @ 3 75
+ veor @x[7], @x[7], @x[6] @ 75 6 [0]
+ vext.8 @t[6], @x[6], @x[6], #12
+ vmov @t[4], @x[4]
+ veor @x[6], @x[6], @x[4] @ 6 4
+ veor @x[4], @x[4], @x[3] @ 4 375 [6]
+ veor @x[3], @x[3], @x[7] @ 375 756=36
+ veor @x[6], @x[6], @t[5] @ 64 5 [7]
+ veor @x[3], @x[3], @t[2] @ 36 2
+ vext.8 @t[5], @t[5], @t[5], #12
+ veor @x[3], @x[3], @t[4] @ 362 4 [5]
+___
+ my @y = @x[7,5,0,2,1,3,4,6];
+$code.=<<___;
+ @ multiplication by 0x0b
+ veor @y[1], @y[1], @y[0]
+ veor @y[0], @y[0], @t[0]
+ vext.8 @t[2], @t[2], @t[2], #12
+ veor @y[1], @y[1], @t[1]
+ veor @y[0], @y[0], @t[5]
+ vext.8 @t[4], @t[4], @t[4], #12
+ veor @y[1], @y[1], @t[6]
+ veor @y[0], @y[0], @t[7]
+ veor @t[7], @t[7], @t[6] @ clobber t[7]
+
+ veor @y[3], @y[3], @t[0]
+ veor @y[1], @y[1], @y[0]
+ vext.8 @t[0], @t[0], @t[0], #12
+ veor @y[2], @y[2], @t[1]
+ veor @y[4], @y[4], @t[1]
+ vext.8 @t[1], @t[1], @t[1], #12
+ veor @y[2], @y[2], @t[2]
+ veor @y[3], @y[3], @t[2]
+ veor @y[5], @y[5], @t[2]
+ veor @y[2], @y[2], @t[7]
+ vext.8 @t[2], @t[2], @t[2], #12
+ veor @y[3], @y[3], @t[3]
+ veor @y[6], @y[6], @t[3]
+ veor @y[4], @y[4], @t[3]
+ veor @y[7], @y[7], @t[4]
+ vext.8 @t[3], @t[3], @t[3], #12
+ veor @y[5], @y[5], @t[4]
+ veor @y[7], @y[7], @t[7]
+ veor @t[7], @t[7], @t[5] @ clobber t[7] even more
+ veor @y[3], @y[3], @t[5]
+ veor @y[4], @y[4], @t[4]
+
+ veor @y[5], @y[5], @t[7]
+ vext.8 @t[4], @t[4], @t[4], #12
+ veor @y[6], @y[6], @t[7]
+ veor @y[4], @y[4], @t[7]
+
+ veor @t[7], @t[7], @t[5]
+ vext.8 @t[5], @t[5], @t[5], #12
+
+ @ multiplication by 0x0d
+ veor @y[4], @y[4], @y[7]
+ veor @t[7], @t[7], @t[6] @ restore t[7]
+ veor @y[7], @y[7], @t[4]
+ vext.8 @t[6], @t[6], @t[6], #12
+ veor @y[2], @y[2], @t[0]
+ veor @y[7], @y[7], @t[5]
+ vext.8 @t[7], @t[7], @t[7], #12
+ veor @y[2], @y[2], @t[2]
+
+ veor @y[3], @y[3], @y[1]
+ veor @y[1], @y[1], @t[1]
+ veor @y[0], @y[0], @t[0]
+ veor @y[3], @y[3], @t[0]
+ veor @y[1], @y[1], @t[5]
+ veor @y[0], @y[0], @t[5]
+ vext.8 @t[0], @t[0], @t[0], #12
+ veor @y[1], @y[1], @t[7]
+ veor @y[0], @y[0], @t[6]
+ veor @y[3], @y[3], @y[1]
+ veor @y[4], @y[4], @t[1]
+ vext.8 @t[1], @t[1], @t[1], #12
+
+ veor @y[7], @y[7], @t[7]
+ veor @y[4], @y[4], @t[2]
+ veor @y[5], @y[5], @t[2]
+ veor @y[2], @y[2], @t[6]
+ veor @t[6], @t[6], @t[3] @ clobber t[6]
+ vext.8 @t[2], @t[2], @t[2], #12
+ veor @y[4], @y[4], @y[7]
+ veor @y[3], @y[3], @t[6]
+
+ veor @y[6], @y[6], @t[6]
+ veor @y[5], @y[5], @t[5]
+ vext.8 @t[5], @t[5], @t[5], #12
+ veor @y[6], @y[6], @t[4]
+ vext.8 @t[4], @t[4], @t[4], #12
+ veor @y[5], @y[5], @t[6]
+ veor @y[6], @y[6], @t[7]
+ vext.8 @t[7], @t[7], @t[7], #12
+ veor @t[6], @t[6], @t[3] @ restore t[6]
+ vext.8 @t[3], @t[3], @t[3], #12
+
+ @ multiplication by 0x09
+ veor @y[4], @y[4], @y[1]
+ veor @t[1], @t[1], @y[1] @ t[1]=y[1]
+ veor @t[0], @t[0], @t[5] @ clobber t[0]
+ vext.8 @t[6], @t[6], @t[6], #12
+ veor @t[1], @t[1], @t[5]
+ veor @y[3], @y[3], @t[0]
+ veor @t[0], @t[0], @y[0] @ t[0]=y[0]
+ veor @t[1], @t[1], @t[6]
+ veor @t[6], @t[6], @t[7] @ clobber t[6]
+ veor @y[4], @y[4], @t[1]
+ veor @y[7], @y[7], @t[4]
+ veor @y[6], @y[6], @t[3]
+ veor @y[5], @y[5], @t[2]
+ veor @t[4], @t[4], @y[4] @ t[4]=y[4]
+ veor @t[3], @t[3], @y[3] @ t[3]=y[3]
+ veor @t[5], @t[5], @y[5] @ t[5]=y[5]
+ veor @t[2], @t[2], @y[2] @ t[2]=y[2]
+ veor @t[3], @t[3], @t[7]
+ veor @XMM[5], @t[5], @t[6]
+ veor @XMM[6], @t[6], @y[6] @ t[6]=y[6]
+ veor @XMM[2], @t[2], @t[6]
+ veor @XMM[7], @t[7], @y[7] @ t[7]=y[7]
+
+ vmov @XMM[0], @t[0]
+ vmov @XMM[1], @t[1]
+ @ vmov @XMM[2], @t[2]
+ vmov @XMM[3], @t[3]
+ vmov @XMM[4], @t[4]
+ @ vmov @XMM[5], @t[5]
+ @ vmov @XMM[6], @t[6]
+ @ vmov @XMM[7], @t[7]
+___
+}
+
+sub InvMixColumns {
+my @x=@_[0..7];
+my @t=@_[8..15];
+
+# Thanks to Jussi Kivilinna for providing pointer to
+#
+# | 0e 0b 0d 09 | | 02 03 01 01 | | 05 00 04 00 |
+# | 09 0e 0b 0d | = | 01 02 03 01 | x | 00 05 00 04 |
+# | 0d 09 0e 0b | | 01 01 02 03 | | 04 00 05 00 |
+# | 0b 0d 09 0e | | 03 01 01 02 | | 00 04 00 05 |
+
+$code.=<<___;
+ @ multiplication by 0x05-0x00-0x04-0x00
+ vext.8 @t[0], @x[0], @x[0], #8
+ vext.8 @t[6], @x[6], @x[6], #8
+ vext.8 @t[7], @x[7], @x[7], #8
+ veor @t[0], @t[0], @x[0]
+ vext.8 @t[1], @x[1], @x[1], #8
+ veor @t[6], @t[6], @x[6]
+ vext.8 @t[2], @x[2], @x[2], #8
+ veor @t[7], @t[7], @x[7]
+ vext.8 @t[3], @x[3], @x[3], #8
+ veor @t[1], @t[1], @x[1]
+ vext.8 @t[4], @x[4], @x[4], #8
+ veor @t[2], @t[2], @x[2]
+ vext.8 @t[5], @x[5], @x[5], #8
+ veor @t[3], @t[3], @x[3]
+ veor @t[4], @t[4], @x[4]
+ veor @t[5], @t[5], @x[5]
+
+ veor @x[0], @x[0], @t[6]
+ veor @x[1], @x[1], @t[6]
+ veor @x[2], @x[2], @t[0]
+ veor @x[4], @x[4], @t[2]
+ veor @x[3], @x[3], @t[1]
+ veor @x[1], @x[1], @t[7]
+ veor @x[2], @x[2], @t[7]
+ veor @x[4], @x[4], @t[6]
+ veor @x[5], @x[5], @t[3]
+ veor @x[3], @x[3], @t[6]
+ veor @x[6], @x[6], @t[4]
+ veor @x[4], @x[4], @t[7]
+ veor @x[5], @x[5], @t[7]
+ veor @x[7], @x[7], @t[5]
+___
+ &MixColumns (@x,@t,1); # flipped 2<->3 and 4<->6
+}
+
+sub swapmove {
+my ($a,$b,$n,$mask,$t)=@_;
+$code.=<<___;
+ vshr.u64 $t, $b, #$n
+ veor $t, $t, $a
+ vand $t, $t, $mask
+ veor $a, $a, $t
+ vshl.u64 $t, $t, #$n
+ veor $b, $b, $t
+___
+}
+sub swapmove2x {
+my ($a0,$b0,$a1,$b1,$n,$mask,$t0,$t1)=@_;
+$code.=<<___;
+ vshr.u64 $t0, $b0, #$n
+ vshr.u64 $t1, $b1, #$n
+ veor $t0, $t0, $a0
+ veor $t1, $t1, $a1
+ vand $t0, $t0, $mask
+ vand $t1, $t1, $mask
+ veor $a0, $a0, $t0
+ vshl.u64 $t0, $t0, #$n
+ veor $a1, $a1, $t1
+ vshl.u64 $t1, $t1, #$n
+ veor $b0, $b0, $t0
+ veor $b1, $b1, $t1
+___
+}
+
+sub bitslice {
+my @x=reverse(@_[0..7]);
+my ($t0,$t1,$t2,$t3)=@_[8..11];
+$code.=<<___;
+ vmov.i8 $t0,#0x55 @ compose .LBS0
+ vmov.i8 $t1,#0x33 @ compose .LBS1
+___
+ &swapmove2x(@x[0,1,2,3],1,$t0,$t2,$t3);
+ &swapmove2x(@x[4,5,6,7],1,$t0,$t2,$t3);
+$code.=<<___;
+ vmov.i8 $t0,#0x0f @ compose .LBS2
+___
+ &swapmove2x(@x[0,2,1,3],2,$t1,$t2,$t3);
+ &swapmove2x(@x[4,6,5,7],2,$t1,$t2,$t3);
+
+ &swapmove2x(@x[0,4,1,5],4,$t0,$t2,$t3);
+ &swapmove2x(@x[2,6,3,7],4,$t0,$t2,$t3);
+}
+
+$code.=<<___;
+#ifndef __KERNEL__
+# include "arm_arch.h"
+
+# define VFP_ABI_PUSH vstmdb sp!,{d8-d15}
+# define VFP_ABI_POP vldmia sp!,{d8-d15}
+# define VFP_ABI_FRAME 0x40
+#else
+# define VFP_ABI_PUSH
+# define VFP_ABI_POP
+# define VFP_ABI_FRAME 0
+# define BSAES_ASM_EXTENDED_KEY
+# define XTS_CHAIN_TWEAK
+# define __ARM_ARCH__ __LINUX_ARM_ARCH__
+# define __ARM_MAX_ARCH__ __LINUX_ARM_ARCH__
+#endif
+
+#ifdef __thumb__
+# define adrl adr
+#endif
+
+#if __ARM_MAX_ARCH__>=7
+.arch armv7-a
+.fpu neon
+
+.text
+.syntax unified @ ARMv7-capable assembler is expected to handle this
+#ifdef __thumb2__
+.thumb
+#else
+.code 32
+#endif
+
+.type _bsaes_decrypt8,%function
+.align 4
+_bsaes_decrypt8:
+ adr $const,_bsaes_decrypt8
+ vldmia $key!, {@XMM[9]} @ round 0 key
+ add $const,$const,#.LM0ISR-_bsaes_decrypt8
+
+ vldmia $const!, {@XMM[8]} @ .LM0ISR
+ veor @XMM[10], @XMM[0], @XMM[9] @ xor with round0 key
+ veor @XMM[11], @XMM[1], @XMM[9]
+ vtbl.8 `&Dlo(@XMM[0])`, {@XMM[10]}, `&Dlo(@XMM[8])`
+ vtbl.8 `&Dhi(@XMM[0])`, {@XMM[10]}, `&Dhi(@XMM[8])`
+ veor @XMM[12], @XMM[2], @XMM[9]
+ vtbl.8 `&Dlo(@XMM[1])`, {@XMM[11]}, `&Dlo(@XMM[8])`
+ vtbl.8 `&Dhi(@XMM[1])`, {@XMM[11]}, `&Dhi(@XMM[8])`
+ veor @XMM[13], @XMM[3], @XMM[9]
+ vtbl.8 `&Dlo(@XMM[2])`, {@XMM[12]}, `&Dlo(@XMM[8])`
+ vtbl.8 `&Dhi(@XMM[2])`, {@XMM[12]}, `&Dhi(@XMM[8])`
+ veor @XMM[14], @XMM[4], @XMM[9]
+ vtbl.8 `&Dlo(@XMM[3])`, {@XMM[13]}, `&Dlo(@XMM[8])`
+ vtbl.8 `&Dhi(@XMM[3])`, {@XMM[13]}, `&Dhi(@XMM[8])`
+ veor @XMM[15], @XMM[5], @XMM[9]
+ vtbl.8 `&Dlo(@XMM[4])`, {@XMM[14]}, `&Dlo(@XMM[8])`
+ vtbl.8 `&Dhi(@XMM[4])`, {@XMM[14]}, `&Dhi(@XMM[8])`
+ veor @XMM[10], @XMM[6], @XMM[9]
+ vtbl.8 `&Dlo(@XMM[5])`, {@XMM[15]}, `&Dlo(@XMM[8])`
+ vtbl.8 `&Dhi(@XMM[5])`, {@XMM[15]}, `&Dhi(@XMM[8])`
+ veor @XMM[11], @XMM[7], @XMM[9]
+ vtbl.8 `&Dlo(@XMM[6])`, {@XMM[10]}, `&Dlo(@XMM[8])`
+ vtbl.8 `&Dhi(@XMM[6])`, {@XMM[10]}, `&Dhi(@XMM[8])`
+ vtbl.8 `&Dlo(@XMM[7])`, {@XMM[11]}, `&Dlo(@XMM[8])`
+ vtbl.8 `&Dhi(@XMM[7])`, {@XMM[11]}, `&Dhi(@XMM[8])`
+___
+ &bitslice (@XMM[0..7, 8..11]);
+$code.=<<___;
+ sub $rounds,$rounds,#1
+ b .Ldec_sbox
+.align 4
+.Ldec_loop:
+___
+ &ShiftRows (@XMM[0..7, 8..12]);
+$code.=".Ldec_sbox:\n";
+ &InvSbox (@XMM[0..7, 8..15]);
+$code.=<<___;
+ subs $rounds,$rounds,#1
+ bcc .Ldec_done
+___
+ &InvMixColumns (@XMM[0,1,6,4,2,7,3,5, 8..15]);
+$code.=<<___;
+ vldmia $const, {@XMM[12]} @ .LISR
+ ite eq @ Thumb2 thing, sanity check in ARM
+ addeq $const,$const,#0x10
+ bne .Ldec_loop
+ vldmia $const, {@XMM[12]} @ .LISRM0
+ b .Ldec_loop
+.align 4
+.Ldec_done:
+___
+ &bitslice (@XMM[0,1,6,4,2,7,3,5, 8..11]);
+$code.=<<___;
+ vldmia $key, {@XMM[8]} @ last round key
+ veor @XMM[6], @XMM[6], @XMM[8]
+ veor @XMM[4], @XMM[4], @XMM[8]
+ veor @XMM[2], @XMM[2], @XMM[8]
+ veor @XMM[7], @XMM[7], @XMM[8]
+ veor @XMM[3], @XMM[3], @XMM[8]
+ veor @XMM[5], @XMM[5], @XMM[8]
+ veor @XMM[0], @XMM[0], @XMM[8]
+ veor @XMM[1], @XMM[1], @XMM[8]
+ bx lr
+.size _bsaes_decrypt8,.-_bsaes_decrypt8
+
+.type _bsaes_const,%object
+.align 6
+_bsaes_const:
+.LM0ISR: @ InvShiftRows constants
+ .quad 0x0a0e0206070b0f03, 0x0004080c0d010509
+.LISR:
+ .quad 0x0504070602010003, 0x0f0e0d0c080b0a09
+.LISRM0:
+ .quad 0x01040b0e0205080f, 0x0306090c00070a0d
+.LM0SR: @ ShiftRows constants
+ .quad 0x0a0e02060f03070b, 0x0004080c05090d01
+.LSR:
+ .quad 0x0504070600030201, 0x0f0e0d0c0a09080b
+.LSRM0:
+ .quad 0x0304090e00050a0f, 0x01060b0c0207080d
+.LM0:
+ .quad 0x02060a0e03070b0f, 0x0004080c0105090d
+.LREVM0SR:
+ .quad 0x090d01050c000408, 0x03070b0f060a0e02
+.asciz "Bit-sliced AES for NEON, CRYPTOGAMS by <appro\@openssl.org>"
+.align 6
+.size _bsaes_const,.-_bsaes_const
+
+.type _bsaes_encrypt8,%function
+.align 4
+_bsaes_encrypt8:
+ adr $const,_bsaes_encrypt8
+ vldmia $key!, {@XMM[9]} @ round 0 key
+ sub $const,$const,#_bsaes_encrypt8-.LM0SR
+
+ vldmia $const!, {@XMM[8]} @ .LM0SR
+_bsaes_encrypt8_alt:
+ veor @XMM[10], @XMM[0], @XMM[9] @ xor with round0 key
+ veor @XMM[11], @XMM[1], @XMM[9]
+ vtbl.8 `&Dlo(@XMM[0])`, {@XMM[10]}, `&Dlo(@XMM[8])`
+ vtbl.8 `&Dhi(@XMM[0])`, {@XMM[10]}, `&Dhi(@XMM[8])`
+ veor @XMM[12], @XMM[2], @XMM[9]
+ vtbl.8 `&Dlo(@XMM[1])`, {@XMM[11]}, `&Dlo(@XMM[8])`
+ vtbl.8 `&Dhi(@XMM[1])`, {@XMM[11]}, `&Dhi(@XMM[8])`
+ veor @XMM[13], @XMM[3], @XMM[9]
+ vtbl.8 `&Dlo(@XMM[2])`, {@XMM[12]}, `&Dlo(@XMM[8])`
+ vtbl.8 `&Dhi(@XMM[2])`, {@XMM[12]}, `&Dhi(@XMM[8])`
+ veor @XMM[14], @XMM[4], @XMM[9]
+ vtbl.8 `&Dlo(@XMM[3])`, {@XMM[13]}, `&Dlo(@XMM[8])`
+ vtbl.8 `&Dhi(@XMM[3])`, {@XMM[13]}, `&Dhi(@XMM[8])`
+ veor @XMM[15], @XMM[5], @XMM[9]
+ vtbl.8 `&Dlo(@XMM[4])`, {@XMM[14]}, `&Dlo(@XMM[8])`
+ vtbl.8 `&Dhi(@XMM[4])`, {@XMM[14]}, `&Dhi(@XMM[8])`
+ veor @XMM[10], @XMM[6], @XMM[9]
+ vtbl.8 `&Dlo(@XMM[5])`, {@XMM[15]}, `&Dlo(@XMM[8])`
+ vtbl.8 `&Dhi(@XMM[5])`, {@XMM[15]}, `&Dhi(@XMM[8])`
+ veor @XMM[11], @XMM[7], @XMM[9]
+ vtbl.8 `&Dlo(@XMM[6])`, {@XMM[10]}, `&Dlo(@XMM[8])`
+ vtbl.8 `&Dhi(@XMM[6])`, {@XMM[10]}, `&Dhi(@XMM[8])`
+ vtbl.8 `&Dlo(@XMM[7])`, {@XMM[11]}, `&Dlo(@XMM[8])`
+ vtbl.8 `&Dhi(@XMM[7])`, {@XMM[11]}, `&Dhi(@XMM[8])`
+_bsaes_encrypt8_bitslice:
+___
+ &bitslice (@XMM[0..7, 8..11]);
+$code.=<<___;
+ sub $rounds,$rounds,#1
+ b .Lenc_sbox
+.align 4
+.Lenc_loop:
+___
+ &ShiftRows (@XMM[0..7, 8..12]);
+$code.=".Lenc_sbox:\n";
+ &Sbox (@XMM[0..7, 8..15]);
+$code.=<<___;
+ subs $rounds,$rounds,#1
+ bcc .Lenc_done
+___
+ &MixColumns (@XMM[0,1,4,6,3,7,2,5, 8..15]);
+$code.=<<___;
+ vldmia $const, {@XMM[12]} @ .LSR
+ ite eq @ Thumb2 thing, samity check in ARM
+ addeq $const,$const,#0x10
+ bne .Lenc_loop
+ vldmia $const, {@XMM[12]} @ .LSRM0
+ b .Lenc_loop
+.align 4
+.Lenc_done:
+___
+ # output in lsb > [t0, t1, t4, t6, t3, t7, t2, t5] < msb
+ &bitslice (@XMM[0,1,4,6,3,7,2,5, 8..11]);
+$code.=<<___;
+ vldmia $key, {@XMM[8]} @ last round key
+ veor @XMM[4], @XMM[4], @XMM[8]
+ veor @XMM[6], @XMM[6], @XMM[8]
+ veor @XMM[3], @XMM[3], @XMM[8]
+ veor @XMM[7], @XMM[7], @XMM[8]
+ veor @XMM[2], @XMM[2], @XMM[8]
+ veor @XMM[5], @XMM[5], @XMM[8]
+ veor @XMM[0], @XMM[0], @XMM[8]
+ veor @XMM[1], @XMM[1], @XMM[8]
+ bx lr
+.size _bsaes_encrypt8,.-_bsaes_encrypt8
+___
+}
+{
+my ($out,$inp,$rounds,$const)=("r12","r4","r5","r6");
+
+sub bitslice_key {
+my @x=reverse(@_[0..7]);
+my ($bs0,$bs1,$bs2,$t2,$t3)=@_[8..12];
+
+ &swapmove (@x[0,1],1,$bs0,$t2,$t3);
+$code.=<<___;
+ @ &swapmove(@x[2,3],1,$t0,$t2,$t3);
+ vmov @x[2], @x[0]
+ vmov @x[3], @x[1]
+___
+ #&swapmove2x(@x[4,5,6,7],1,$t0,$t2,$t3);
+
+ &swapmove2x (@x[0,2,1,3],2,$bs1,$t2,$t3);
+$code.=<<___;
+ @ &swapmove2x(@x[4,6,5,7],2,$t1,$t2,$t3);
+ vmov @x[4], @x[0]
+ vmov @x[6], @x[2]
+ vmov @x[5], @x[1]
+ vmov @x[7], @x[3]
+___
+ &swapmove2x (@x[0,4,1,5],4,$bs2,$t2,$t3);
+ &swapmove2x (@x[2,6,3,7],4,$bs2,$t2,$t3);
+}
+
+$code.=<<___;
+.type _bsaes_key_convert,%function
+.align 4
+_bsaes_key_convert:
+ adr $const,_bsaes_key_convert
+ vld1.8 {@XMM[7]}, [$inp]! @ load round 0 key
+ sub $const,$const,#_bsaes_key_convert-.LM0
+ vld1.8 {@XMM[15]}, [$inp]! @ load round 1 key
+
+ vmov.i8 @XMM[8], #0x01 @ bit masks
+ vmov.i8 @XMM[9], #0x02
+ vmov.i8 @XMM[10], #0x04
+ vmov.i8 @XMM[11], #0x08
+ vmov.i8 @XMM[12], #0x10
+ vmov.i8 @XMM[13], #0x20
+ vldmia $const, {@XMM[14]} @ .LM0
+
+#ifdef __ARMEL__
+ vrev32.8 @XMM[7], @XMM[7]
+ vrev32.8 @XMM[15], @XMM[15]
+#endif
+ sub $rounds,$rounds,#1
+ vstmia $out!, {@XMM[7]} @ save round 0 key
+ b .Lkey_loop
+
+.align 4
+.Lkey_loop:
+ vtbl.8 `&Dlo(@XMM[7])`,{@XMM[15]},`&Dlo(@XMM[14])`
+ vtbl.8 `&Dhi(@XMM[7])`,{@XMM[15]},`&Dhi(@XMM[14])`
+ vmov.i8 @XMM[6], #0x40
+ vmov.i8 @XMM[15], #0x80
+
+ vtst.8 @XMM[0], @XMM[7], @XMM[8]
+ vtst.8 @XMM[1], @XMM[7], @XMM[9]
+ vtst.8 @XMM[2], @XMM[7], @XMM[10]
+ vtst.8 @XMM[3], @XMM[7], @XMM[11]
+ vtst.8 @XMM[4], @XMM[7], @XMM[12]
+ vtst.8 @XMM[5], @XMM[7], @XMM[13]
+ vtst.8 @XMM[6], @XMM[7], @XMM[6]
+ vtst.8 @XMM[7], @XMM[7], @XMM[15]
+ vld1.8 {@XMM[15]}, [$inp]! @ load next round key
+ vmvn @XMM[0], @XMM[0] @ "pnot"
+ vmvn @XMM[1], @XMM[1]
+ vmvn @XMM[5], @XMM[5]
+ vmvn @XMM[6], @XMM[6]
+#ifdef __ARMEL__
+ vrev32.8 @XMM[15], @XMM[15]
+#endif
+ subs $rounds,$rounds,#1
+ vstmia $out!,{@XMM[0]-@XMM[7]} @ write bit-sliced round key
+ bne .Lkey_loop
+
+ vmov.i8 @XMM[7],#0x63 @ compose .L63
+ @ don't save last round key
+ bx lr
+.size _bsaes_key_convert,.-_bsaes_key_convert
+___
+}
+
+if (0) { # following four functions are unsupported interface
+ # used for benchmarking...
+$code.=<<___;
+.globl bsaes_enc_key_convert
+.type bsaes_enc_key_convert,%function
+.align 4
+bsaes_enc_key_convert:
+ stmdb sp!,{r4-r6,lr}
+ vstmdb sp!,{d8-d15} @ ABI specification says so
+
+ ldr r5,[$inp,#240] @ pass rounds
+ mov r4,$inp @ pass key
+ mov r12,$out @ pass key schedule
+ bl _bsaes_key_convert
+ veor @XMM[7],@XMM[7],@XMM[15] @ fix up last round key
+ vstmia r12, {@XMM[7]} @ save last round key
+
+ vldmia sp!,{d8-d15}
+ ldmia sp!,{r4-r6,pc}
+.size bsaes_enc_key_convert,.-bsaes_enc_key_convert
+
+.globl bsaes_encrypt_128
+.type bsaes_encrypt_128,%function
+.align 4
+bsaes_encrypt_128:
+ stmdb sp!,{r4-r6,lr}
+ vstmdb sp!,{d8-d15} @ ABI specification says so
+.Lenc128_loop:
+ vld1.8 {@XMM[0]-@XMM[1]}, [$inp]! @ load input
+ vld1.8 {@XMM[2]-@XMM[3]}, [$inp]!
+ mov r4,$key @ pass the key
+ vld1.8 {@XMM[4]-@XMM[5]}, [$inp]!
+ mov r5,#10 @ pass rounds
+ vld1.8 {@XMM[6]-@XMM[7]}, [$inp]!
+
+ bl _bsaes_encrypt8
+
+ vst1.8 {@XMM[0]-@XMM[1]}, [$out]! @ write output
+ vst1.8 {@XMM[4]}, [$out]!
+ vst1.8 {@XMM[6]}, [$out]!
+ vst1.8 {@XMM[3]}, [$out]!
+ vst1.8 {@XMM[7]}, [$out]!
+ vst1.8 {@XMM[2]}, [$out]!
+ subs $len,$len,#0x80
+ vst1.8 {@XMM[5]}, [$out]!
+ bhi .Lenc128_loop
+
+ vldmia sp!,{d8-d15}
+ ldmia sp!,{r4-r6,pc}
+.size bsaes_encrypt_128,.-bsaes_encrypt_128
+
+.globl bsaes_dec_key_convert
+.type bsaes_dec_key_convert,%function
+.align 4
+bsaes_dec_key_convert:
+ stmdb sp!,{r4-r6,lr}
+ vstmdb sp!,{d8-d15} @ ABI specification says so
+
+ ldr r5,[$inp,#240] @ pass rounds
+ mov r4,$inp @ pass key
+ mov r12,$out @ pass key schedule
+ bl _bsaes_key_convert
+ vldmia $out, {@XMM[6]}
+ vstmia r12, {@XMM[15]} @ save last round key
+ veor @XMM[7], @XMM[7], @XMM[6] @ fix up round 0 key
+ vstmia $out, {@XMM[7]}
+
+ vldmia sp!,{d8-d15}
+ ldmia sp!,{r4-r6,pc}
+.size bsaes_dec_key_convert,.-bsaes_dec_key_convert
+
+.globl bsaes_decrypt_128
+.type bsaes_decrypt_128,%function
+.align 4
+bsaes_decrypt_128:
+ stmdb sp!,{r4-r6,lr}
+ vstmdb sp!,{d8-d15} @ ABI specification says so
+.Ldec128_loop:
+ vld1.8 {@XMM[0]-@XMM[1]}, [$inp]! @ load input
+ vld1.8 {@XMM[2]-@XMM[3]}, [$inp]!
+ mov r4,$key @ pass the key
+ vld1.8 {@XMM[4]-@XMM[5]}, [$inp]!
+ mov r5,#10 @ pass rounds
+ vld1.8 {@XMM[6]-@XMM[7]}, [$inp]!
+
+ bl _bsaes_decrypt8
+
+ vst1.8 {@XMM[0]-@XMM[1]}, [$out]! @ write output
+ vst1.8 {@XMM[6]}, [$out]!
+ vst1.8 {@XMM[4]}, [$out]!
+ vst1.8 {@XMM[2]}, [$out]!
+ vst1.8 {@XMM[7]}, [$out]!
+ vst1.8 {@XMM[3]}, [$out]!
+ subs $len,$len,#0x80
+ vst1.8 {@XMM[5]}, [$out]!
+ bhi .Ldec128_loop
+
+ vldmia sp!,{d8-d15}
+ ldmia sp!,{r4-r6,pc}
+.size bsaes_decrypt_128,.-bsaes_decrypt_128
+___
+}
+{
+my ($inp,$out,$len,$key, $ivp,$fp,$rounds)=map("r$_",(0..3,8..10));
+my ($keysched)=("sp");
+
+$code.=<<___;
+.extern AES_cbc_encrypt
+.extern AES_decrypt
+
+.global bsaes_cbc_encrypt
+.type bsaes_cbc_encrypt,%function
+.align 5
+bsaes_cbc_encrypt:
+#ifndef __KERNEL__
+ cmp $len, #128
+#ifndef __thumb__
+ blo AES_cbc_encrypt
+#else
+ bhs 1f
+ b AES_cbc_encrypt
+1:
+#endif
+#endif
+
+ @ it is up to the caller to make sure we are called with enc == 0
+
+ mov ip, sp
+ stmdb sp!, {r4-r10, lr}
+ VFP_ABI_PUSH
+ ldr $ivp, [ip] @ IV is 1st arg on the stack
+ mov $len, $len, lsr#4 @ len in 16 byte blocks
+ sub sp, #0x10 @ scratch space to carry over the IV
+ mov $fp, sp @ save sp
+
+ ldr $rounds, [$key, #240] @ get # of rounds
+#ifndef BSAES_ASM_EXTENDED_KEY
+ @ allocate the key schedule on the stack
+ sub r12, sp, $rounds, lsl#7 @ 128 bytes per inner round key
+ add r12, #`128-32` @ sifze of bit-slices key schedule
+
+ @ populate the key schedule
+ mov r4, $key @ pass key
+ mov r5, $rounds @ pass # of rounds
+ mov sp, r12 @ sp is $keysched
+ bl _bsaes_key_convert
+ vldmia $keysched, {@XMM[6]}
+ vstmia r12, {@XMM[15]} @ save last round key
+ veor @XMM[7], @XMM[7], @XMM[6] @ fix up round 0 key
+ vstmia $keysched, {@XMM[7]}
+#else
+ ldr r12, [$key, #244]
+ eors r12, #1
+ beq 0f
+
+ @ populate the key schedule
+ str r12, [$key, #244]
+ mov r4, $key @ pass key
+ mov r5, $rounds @ pass # of rounds
+ add r12, $key, #248 @ pass key schedule
+ bl _bsaes_key_convert
+ add r4, $key, #248
+ vldmia r4, {@XMM[6]}
+ vstmia r12, {@XMM[15]} @ save last round key
+ veor @XMM[7], @XMM[7], @XMM[6] @ fix up round 0 key
+ vstmia r4, {@XMM[7]}
+
+.align 2
+0:
+#endif
+
+ vld1.8 {@XMM[15]}, [$ivp] @ load IV
+ b .Lcbc_dec_loop
+
+.align 4
+.Lcbc_dec_loop:
+ subs $len, $len, #0x8
+ bmi .Lcbc_dec_loop_finish
+
+ vld1.8 {@XMM[0]-@XMM[1]}, [$inp]! @ load input
+ vld1.8 {@XMM[2]-@XMM[3]}, [$inp]!
+#ifndef BSAES_ASM_EXTENDED_KEY
+ mov r4, $keysched @ pass the key
+#else
+ add r4, $key, #248
+#endif
+ vld1.8 {@XMM[4]-@XMM[5]}, [$inp]!
+ mov r5, $rounds
+ vld1.8 {@XMM[6]-@XMM[7]}, [$inp]
+ sub $inp, $inp, #0x60
+ vstmia $fp, {@XMM[15]} @ put aside IV
+
+ bl _bsaes_decrypt8
+
+ vldmia $fp, {@XMM[14]} @ reload IV
+ vld1.8 {@XMM[8]-@XMM[9]}, [$inp]! @ reload input
+ veor @XMM[0], @XMM[0], @XMM[14] @ ^= IV
+ vld1.8 {@XMM[10]-@XMM[11]}, [$inp]!
+ veor @XMM[1], @XMM[1], @XMM[8]
+ veor @XMM[6], @XMM[6], @XMM[9]
+ vld1.8 {@XMM[12]-@XMM[13]}, [$inp]!
+ veor @XMM[4], @XMM[4], @XMM[10]
+ veor @XMM[2], @XMM[2], @XMM[11]
+ vld1.8 {@XMM[14]-@XMM[15]}, [$inp]!
+ veor @XMM[7], @XMM[7], @XMM[12]
+ vst1.8 {@XMM[0]-@XMM[1]}, [$out]! @ write output
+ veor @XMM[3], @XMM[3], @XMM[13]
+ vst1.8 {@XMM[6]}, [$out]!
+ veor @XMM[5], @XMM[5], @XMM[14]
+ vst1.8 {@XMM[4]}, [$out]!
+ vst1.8 {@XMM[2]}, [$out]!
+ vst1.8 {@XMM[7]}, [$out]!
+ vst1.8 {@XMM[3]}, [$out]!
+ vst1.8 {@XMM[5]}, [$out]!
+
+ b .Lcbc_dec_loop
+
+.Lcbc_dec_loop_finish:
+ adds $len, $len, #8
+ beq .Lcbc_dec_done
+
+ vld1.8 {@XMM[0]}, [$inp]! @ load input
+ cmp $len, #2
+ blo .Lcbc_dec_one
+ vld1.8 {@XMM[1]}, [$inp]!
+#ifndef BSAES_ASM_EXTENDED_KEY
+ mov r4, $keysched @ pass the key
+#else
+ add r4, $key, #248
+#endif
+ mov r5, $rounds
+ vstmia $fp, {@XMM[15]} @ put aside IV
+ beq .Lcbc_dec_two
+ vld1.8 {@XMM[2]}, [$inp]!
+ cmp $len, #4
+ blo .Lcbc_dec_three
+ vld1.8 {@XMM[3]}, [$inp]!
+ beq .Lcbc_dec_four
+ vld1.8 {@XMM[4]}, [$inp]!
+ cmp $len, #6
+ blo .Lcbc_dec_five
+ vld1.8 {@XMM[5]}, [$inp]!
+ beq .Lcbc_dec_six
+ vld1.8 {@XMM[6]}, [$inp]!
+ sub $inp, $inp, #0x70
+
+ bl _bsaes_decrypt8
+
+ vldmia $fp, {@XMM[14]} @ reload IV
+ vld1.8 {@XMM[8]-@XMM[9]}, [$inp]! @ reload input
+ veor @XMM[0], @XMM[0], @XMM[14] @ ^= IV
+ vld1.8 {@XMM[10]-@XMM[11]}, [$inp]!
+ veor @XMM[1], @XMM[1], @XMM[8]
+ veor @XMM[6], @XMM[6], @XMM[9]
+ vld1.8 {@XMM[12]-@XMM[13]}, [$inp]!
+ veor @XMM[4], @XMM[4], @XMM[10]
+ veor @XMM[2], @XMM[2], @XMM[11]
+ vld1.8 {@XMM[15]}, [$inp]!
+ veor @XMM[7], @XMM[7], @XMM[12]
+ vst1.8 {@XMM[0]-@XMM[1]}, [$out]! @ write output
+ veor @XMM[3], @XMM[3], @XMM[13]
+ vst1.8 {@XMM[6]}, [$out]!
+ vst1.8 {@XMM[4]}, [$out]!
+ vst1.8 {@XMM[2]}, [$out]!
+ vst1.8 {@XMM[7]}, [$out]!
+ vst1.8 {@XMM[3]}, [$out]!
+ b .Lcbc_dec_done
+.align 4
+.Lcbc_dec_six:
+ sub $inp, $inp, #0x60
+ bl _bsaes_decrypt8
+ vldmia $fp,{@XMM[14]} @ reload IV
+ vld1.8 {@XMM[8]-@XMM[9]}, [$inp]! @ reload input
+ veor @XMM[0], @XMM[0], @XMM[14] @ ^= IV
+ vld1.8 {@XMM[10]-@XMM[11]}, [$inp]!
+ veor @XMM[1], @XMM[1], @XMM[8]
+ veor @XMM[6], @XMM[6], @XMM[9]
+ vld1.8 {@XMM[12]}, [$inp]!
+ veor @XMM[4], @XMM[4], @XMM[10]
+ veor @XMM[2], @XMM[2], @XMM[11]
+ vld1.8 {@XMM[15]}, [$inp]!
+ veor @XMM[7], @XMM[7], @XMM[12]
+ vst1.8 {@XMM[0]-@XMM[1]}, [$out]! @ write output
+ vst1.8 {@XMM[6]}, [$out]!
+ vst1.8 {@XMM[4]}, [$out]!
+ vst1.8 {@XMM[2]}, [$out]!
+ vst1.8 {@XMM[7]}, [$out]!
+ b .Lcbc_dec_done
+.align 4
+.Lcbc_dec_five:
+ sub $inp, $inp, #0x50
+ bl _bsaes_decrypt8
+ vldmia $fp, {@XMM[14]} @ reload IV
+ vld1.8 {@XMM[8]-@XMM[9]}, [$inp]! @ reload input
+ veor @XMM[0], @XMM[0], @XMM[14] @ ^= IV
+ vld1.8 {@XMM[10]-@XMM[11]}, [$inp]!
+ veor @XMM[1], @XMM[1], @XMM[8]
+ veor @XMM[6], @XMM[6], @XMM[9]
+ vld1.8 {@XMM[15]}, [$inp]!
+ veor @XMM[4], @XMM[4], @XMM[10]
+ vst1.8 {@XMM[0]-@XMM[1]}, [$out]! @ write output
+ veor @XMM[2], @XMM[2], @XMM[11]
+ vst1.8 {@XMM[6]}, [$out]!
+ vst1.8 {@XMM[4]}, [$out]!
+ vst1.8 {@XMM[2]}, [$out]!
+ b .Lcbc_dec_done
+.align 4
+.Lcbc_dec_four:
+ sub $inp, $inp, #0x40
+ bl _bsaes_decrypt8
+ vldmia $fp, {@XMM[14]} @ reload IV
+ vld1.8 {@XMM[8]-@XMM[9]}, [$inp]! @ reload input
+ veor @XMM[0], @XMM[0], @XMM[14] @ ^= IV
+ vld1.8 {@XMM[10]}, [$inp]!
+ veor @XMM[1], @XMM[1], @XMM[8]
+ veor @XMM[6], @XMM[6], @XMM[9]
+ vld1.8 {@XMM[15]}, [$inp]!
+ veor @XMM[4], @XMM[4], @XMM[10]
+ vst1.8 {@XMM[0]-@XMM[1]}, [$out]! @ write output
+ vst1.8 {@XMM[6]}, [$out]!
+ vst1.8 {@XMM[4]}, [$out]!
+ b .Lcbc_dec_done
+.align 4
+.Lcbc_dec_three:
+ sub $inp, $inp, #0x30
+ bl _bsaes_decrypt8
+ vldmia $fp, {@XMM[14]} @ reload IV
+ vld1.8 {@XMM[8]-@XMM[9]}, [$inp]! @ reload input
+ veor @XMM[0], @XMM[0], @XMM[14] @ ^= IV
+ vld1.8 {@XMM[15]}, [$inp]!
+ veor @XMM[1], @XMM[1], @XMM[8]
+ veor @XMM[6], @XMM[6], @XMM[9]
+ vst1.8 {@XMM[0]-@XMM[1]}, [$out]! @ write output
+ vst1.8 {@XMM[6]}, [$out]!
+ b .Lcbc_dec_done
+.align 4
+.Lcbc_dec_two:
+ sub $inp, $inp, #0x20
+ bl _bsaes_decrypt8
+ vldmia $fp, {@XMM[14]} @ reload IV
+ vld1.8 {@XMM[8]}, [$inp]! @ reload input
+ veor @XMM[0], @XMM[0], @XMM[14] @ ^= IV
+ vld1.8 {@XMM[15]}, [$inp]! @ reload input
+ veor @XMM[1], @XMM[1], @XMM[8]
+ vst1.8 {@XMM[0]-@XMM[1]}, [$out]! @ write output
+ b .Lcbc_dec_done
+.align 4
+.Lcbc_dec_one:
+ sub $inp, $inp, #0x10
+ mov $rounds, $out @ save original out pointer
+ mov $out, $fp @ use the iv scratch space as out buffer
+ mov r2, $key
+ vmov @XMM[4],@XMM[15] @ just in case ensure that IV
+ vmov @XMM[5],@XMM[0] @ and input are preserved
+ bl AES_decrypt
+ vld1.8 {@XMM[0]}, [$fp,:64] @ load result
+ veor @XMM[0], @XMM[0], @XMM[4] @ ^= IV
+ vmov @XMM[15], @XMM[5] @ @XMM[5] holds input
+ vst1.8 {@XMM[0]}, [$rounds] @ write output
+
+.Lcbc_dec_done:
+#ifndef BSAES_ASM_EXTENDED_KEY
+ vmov.i32 q0, #0
+ vmov.i32 q1, #0
+.Lcbc_dec_bzero: @ wipe key schedule [if any]
+ vstmia $keysched!, {q0-q1}
+ cmp $keysched, $fp
+ bne .Lcbc_dec_bzero
+#endif
+
+ mov sp, $fp
+ add sp, #0x10 @ add sp,$fp,#0x10 is no good for thumb
+ vst1.8 {@XMM[15]}, [$ivp] @ return IV
+ VFP_ABI_POP
+ ldmia sp!, {r4-r10, pc}
+.size bsaes_cbc_encrypt,.-bsaes_cbc_encrypt
+___
+}
+{
+my ($inp,$out,$len,$key, $ctr,$fp,$rounds)=(map("r$_",(0..3,8..10)));
+my $const = "r6"; # shared with _bsaes_encrypt8_alt
+my $keysched = "sp";
+
+$code.=<<___;
+.extern AES_encrypt
+.global bsaes_ctr32_encrypt_blocks
+.type bsaes_ctr32_encrypt_blocks,%function
+.align 5
+bsaes_ctr32_encrypt_blocks:
+ cmp $len, #8 @ use plain AES for
+ blo .Lctr_enc_short @ small sizes
+
+ mov ip, sp
+ stmdb sp!, {r4-r10, lr}
+ VFP_ABI_PUSH
+ ldr $ctr, [ip] @ ctr is 1st arg on the stack
+ sub sp, sp, #0x10 @ scratch space to carry over the ctr
+ mov $fp, sp @ save sp
+
+ ldr $rounds, [$key, #240] @ get # of rounds
+#ifndef BSAES_ASM_EXTENDED_KEY
+ @ allocate the key schedule on the stack
+ sub r12, sp, $rounds, lsl#7 @ 128 bytes per inner round key
+ add r12, #`128-32` @ size of bit-sliced key schedule
+
+ @ populate the key schedule
+ mov r4, $key @ pass key
+ mov r5, $rounds @ pass # of rounds
+ mov sp, r12 @ sp is $keysched
+ bl _bsaes_key_convert
+ veor @XMM[7],@XMM[7],@XMM[15] @ fix up last round key
+ vstmia r12, {@XMM[7]} @ save last round key
+
+ vld1.8 {@XMM[0]}, [$ctr] @ load counter
+ add $ctr, $const, #.LREVM0SR-.LM0 @ borrow $ctr
+ vldmia $keysched, {@XMM[4]} @ load round0 key
+#else
+ ldr r12, [$key, #244]
+ eors r12, #1
+ beq 0f
+
+ @ populate the key schedule
+ str r12, [$key, #244]
+ mov r4, $key @ pass key
+ mov r5, $rounds @ pass # of rounds
+ add r12, $key, #248 @ pass key schedule
+ bl _bsaes_key_convert
+ veor @XMM[7],@XMM[7],@XMM[15] @ fix up last round key
+ vstmia r12, {@XMM[7]} @ save last round key
+
+.align 2
+0: add r12, $key, #248
+ vld1.8 {@XMM[0]}, [$ctr] @ load counter
+ adrl $ctr, .LREVM0SR @ borrow $ctr
+ vldmia r12, {@XMM[4]} @ load round0 key
+ sub sp, #0x10 @ place for adjusted round0 key
+#endif
+
+ vmov.i32 @XMM[8],#1 @ compose 1<<96
+ veor @XMM[9],@XMM[9],@XMM[9]
+ vrev32.8 @XMM[0],@XMM[0]
+ vext.8 @XMM[8],@XMM[9],@XMM[8],#4
+ vrev32.8 @XMM[4],@XMM[4]
+ vadd.u32 @XMM[9],@XMM[8],@XMM[8] @ compose 2<<96
+ vstmia $keysched, {@XMM[4]} @ save adjusted round0 key
+ b .Lctr_enc_loop
+
+.align 4
+.Lctr_enc_loop:
+ vadd.u32 @XMM[10], @XMM[8], @XMM[9] @ compose 3<<96
+ vadd.u32 @XMM[1], @XMM[0], @XMM[8] @ +1
+ vadd.u32 @XMM[2], @XMM[0], @XMM[9] @ +2
+ vadd.u32 @XMM[3], @XMM[0], @XMM[10] @ +3
+ vadd.u32 @XMM[4], @XMM[1], @XMM[10]
+ vadd.u32 @XMM[5], @XMM[2], @XMM[10]
+ vadd.u32 @XMM[6], @XMM[3], @XMM[10]
+ vadd.u32 @XMM[7], @XMM[4], @XMM[10]
+ vadd.u32 @XMM[10], @XMM[5], @XMM[10] @ next counter
+
+ @ Borrow prologue from _bsaes_encrypt8 to use the opportunity
+ @ to flip byte order in 32-bit counter
+
+ vldmia $keysched, {@XMM[9]} @ load round0 key
+#ifndef BSAES_ASM_EXTENDED_KEY
+ add r4, $keysched, #0x10 @ pass next round key
+#else
+ add r4, $key, #`248+16`
+#endif
+ vldmia $ctr, {@XMM[8]} @ .LREVM0SR
+ mov r5, $rounds @ pass rounds
+ vstmia $fp, {@XMM[10]} @ save next counter
+ sub $const, $ctr, #.LREVM0SR-.LSR @ pass constants
+
+ bl _bsaes_encrypt8_alt
+
+ subs $len, $len, #8
+ blo .Lctr_enc_loop_done
+
+ vld1.8 {@XMM[8]-@XMM[9]}, [$inp]! @ load input
+ vld1.8 {@XMM[10]-@XMM[11]}, [$inp]!
+ veor @XMM[0], @XMM[8]
+ veor @XMM[1], @XMM[9]
+ vld1.8 {@XMM[12]-@XMM[13]}, [$inp]!
+ veor @XMM[4], @XMM[10]
+ veor @XMM[6], @XMM[11]
+ vld1.8 {@XMM[14]-@XMM[15]}, [$inp]!
+ veor @XMM[3], @XMM[12]
+ vst1.8 {@XMM[0]-@XMM[1]}, [$out]! @ write output
+ veor @XMM[7], @XMM[13]
+ veor @XMM[2], @XMM[14]
+ vst1.8 {@XMM[4]}, [$out]!
+ veor @XMM[5], @XMM[15]
+ vst1.8 {@XMM[6]}, [$out]!
+ vmov.i32 @XMM[8], #1 @ compose 1<<96
+ vst1.8 {@XMM[3]}, [$out]!
+ veor @XMM[9], @XMM[9], @XMM[9]
+ vst1.8 {@XMM[7]}, [$out]!
+ vext.8 @XMM[8], @XMM[9], @XMM[8], #4
+ vst1.8 {@XMM[2]}, [$out]!
+ vadd.u32 @XMM[9],@XMM[8],@XMM[8] @ compose 2<<96
+ vst1.8 {@XMM[5]}, [$out]!
+ vldmia $fp, {@XMM[0]} @ load counter
+
+ bne .Lctr_enc_loop
+ b .Lctr_enc_done
+
+.align 4
+.Lctr_enc_loop_done:
+ add $len, $len, #8
+ vld1.8 {@XMM[8]}, [$inp]! @ load input
+ veor @XMM[0], @XMM[8]
+ vst1.8 {@XMM[0]}, [$out]! @ write output
+ cmp $len, #2
+ blo .Lctr_enc_done
+ vld1.8 {@XMM[9]}, [$inp]!
+ veor @XMM[1], @XMM[9]
+ vst1.8 {@XMM[1]}, [$out]!
+ beq .Lctr_enc_done
+ vld1.8 {@XMM[10]}, [$inp]!
+ veor @XMM[4], @XMM[10]
+ vst1.8 {@XMM[4]}, [$out]!
+ cmp $len, #4
+ blo .Lctr_enc_done
+ vld1.8 {@XMM[11]}, [$inp]!
+ veor @XMM[6], @XMM[11]
+ vst1.8 {@XMM[6]}, [$out]!
+ beq .Lctr_enc_done
+ vld1.8 {@XMM[12]}, [$inp]!
+ veor @XMM[3], @XMM[12]
+ vst1.8 {@XMM[3]}, [$out]!
+ cmp $len, #6
+ blo .Lctr_enc_done
+ vld1.8 {@XMM[13]}, [$inp]!
+ veor @XMM[7], @XMM[13]
+ vst1.8 {@XMM[7]}, [$out]!
+ beq .Lctr_enc_done
+ vld1.8 {@XMM[14]}, [$inp]
+ veor @XMM[2], @XMM[14]
+ vst1.8 {@XMM[2]}, [$out]!
+
+.Lctr_enc_done:
+ vmov.i32 q0, #0
+ vmov.i32 q1, #0
+#ifndef BSAES_ASM_EXTENDED_KEY
+.Lctr_enc_bzero: @ wipe key schedule [if any]
+ vstmia $keysched!, {q0-q1}
+ cmp $keysched, $fp
+ bne .Lctr_enc_bzero
+#else
+ vstmia $keysched, {q0-q1}
+#endif
+
+ mov sp, $fp
+ add sp, #0x10 @ add sp,$fp,#0x10 is no good for thumb
+ VFP_ABI_POP
+ ldmia sp!, {r4-r10, pc} @ return
+
+.align 4
+.Lctr_enc_short:
+ ldr ip, [sp] @ ctr pointer is passed on stack
+ stmdb sp!, {r4-r8, lr}
+
+ mov r4, $inp @ copy arguments
+ mov r5, $out
+ mov r6, $len
+ mov r7, $key
+ ldr r8, [ip, #12] @ load counter LSW
+ vld1.8 {@XMM[1]}, [ip] @ load whole counter value
+#ifdef __ARMEL__
+ rev r8, r8
+#endif
+ sub sp, sp, #0x10
+ vst1.8 {@XMM[1]}, [sp,:64] @ copy counter value
+ sub sp, sp, #0x10
+
+.Lctr_enc_short_loop:
+ add r0, sp, #0x10 @ input counter value
+ mov r1, sp @ output on the stack
+ mov r2, r7 @ key
+
+ bl AES_encrypt
+
+ vld1.8 {@XMM[0]}, [r4]! @ load input
+ vld1.8 {@XMM[1]}, [sp,:64] @ load encrypted counter
+ add r8, r8, #1
+#ifdef __ARMEL__
+ rev r0, r8
+ str r0, [sp, #0x1c] @ next counter value
+#else
+ str r8, [sp, #0x1c] @ next counter value
+#endif
+ veor @XMM[0],@XMM[0],@XMM[1]
+ vst1.8 {@XMM[0]}, [r5]! @ store output
+ subs r6, r6, #1
+ bne .Lctr_enc_short_loop
+
+ vmov.i32 q0, #0
+ vmov.i32 q1, #0
+ vstmia sp!, {q0-q1}
+
+ ldmia sp!, {r4-r8, pc}
+.size bsaes_ctr32_encrypt_blocks,.-bsaes_ctr32_encrypt_blocks
+___
+}
+{
+######################################################################
+# void bsaes_xts_[en|de]crypt(const char *inp,char *out,size_t len,
+# const AES_KEY *key1, const AES_KEY *key2,
+# const unsigned char iv[16]);
+#
+my ($inp,$out,$len,$key,$rounds,$magic,$fp)=(map("r$_",(7..10,1..3)));
+my $const="r6"; # returned by _bsaes_key_convert
+my $twmask=@XMM[5];
+my @T=@XMM[6..7];
+
+$code.=<<___;
+.globl bsaes_xts_encrypt
+.type bsaes_xts_encrypt,%function
+.align 4
+bsaes_xts_encrypt:
+ mov ip, sp
+ stmdb sp!, {r4-r10, lr} @ 0x20
+ VFP_ABI_PUSH
+ mov r6, sp @ future $fp
+
+ mov $inp, r0
+ mov $out, r1
+ mov $len, r2
+ mov $key, r3
+
+ sub r0, sp, #0x10 @ 0x10
+ bic r0, #0xf @ align at 16 bytes
+ mov sp, r0
+
+#ifdef XTS_CHAIN_TWEAK
+ ldr r0, [ip] @ pointer to input tweak
+#else
+ @ generate initial tweak
+ ldr r0, [ip, #4] @ iv[]
+ mov r1, sp
+ ldr r2, [ip, #0] @ key2
+ bl AES_encrypt
+ mov r0,sp @ pointer to initial tweak
+#endif
+
+ ldr $rounds, [$key, #240] @ get # of rounds
+ mov $fp, r6
+#ifndef BSAES_ASM_EXTENDED_KEY
+ @ allocate the key schedule on the stack
+ sub r12, sp, $rounds, lsl#7 @ 128 bytes per inner round key
+ @ add r12, #`128-32` @ size of bit-sliced key schedule
+ sub r12, #`32+16` @ place for tweak[9]
+
+ @ populate the key schedule
+ mov r4, $key @ pass key
+ mov r5, $rounds @ pass # of rounds
+ mov sp, r12
+ add r12, #0x90 @ pass key schedule
+ bl _bsaes_key_convert
+ veor @XMM[7], @XMM[7], @XMM[15] @ fix up last round key
+ vstmia r12, {@XMM[7]} @ save last round key
+#else
+ ldr r12, [$key, #244]
+ eors r12, #1
+ beq 0f
+
+ str r12, [$key, #244]
+ mov r4, $key @ pass key
+ mov r5, $rounds @ pass # of rounds
+ add r12, $key, #248 @ pass key schedule
+ bl _bsaes_key_convert
+ veor @XMM[7], @XMM[7], @XMM[15] @ fix up last round key
+ vstmia r12, {@XMM[7]}
+
+.align 2
+0: sub sp, #0x90 @ place for tweak[9]
+#endif
+
+ vld1.8 {@XMM[8]}, [r0] @ initial tweak
+ adr $magic, .Lxts_magic
+
+ subs $len, #0x80
+ blo .Lxts_enc_short
+ b .Lxts_enc_loop
+
+.align 4
+.Lxts_enc_loop:
+ vldmia $magic, {$twmask} @ load XTS magic
+ vshr.s64 @T[0], @XMM[8], #63
+ mov r0, sp
+ vand @T[0], @T[0], $twmask
+___
+for($i=9;$i<16;$i++) {
+$code.=<<___;
+ vadd.u64 @XMM[$i], @XMM[$i-1], @XMM[$i-1]
+ vst1.64 {@XMM[$i-1]}, [r0,:128]!
+ vswp `&Dhi("@T[0]")`,`&Dlo("@T[0]")`
+ vshr.s64 @T[1], @XMM[$i], #63
+ veor @XMM[$i], @XMM[$i], @T[0]
+ vand @T[1], @T[1], $twmask
+___
+ @T=reverse(@T);
+
+$code.=<<___ if ($i>=10);
+ vld1.8 {@XMM[$i-10]}, [$inp]!
+___
+$code.=<<___ if ($i>=11);
+ veor @XMM[$i-11], @XMM[$i-11], @XMM[$i-3]
+___
+}
+$code.=<<___;
+ vadd.u64 @XMM[8], @XMM[15], @XMM[15]
+ vst1.64 {@XMM[15]}, [r0,:128]!
+ vswp `&Dhi("@T[0]")`,`&Dlo("@T[0]")`
+ veor @XMM[8], @XMM[8], @T[0]
+ vst1.64 {@XMM[8]}, [r0,:128] @ next round tweak
+
+ vld1.8 {@XMM[6]-@XMM[7]}, [$inp]!
+ veor @XMM[5], @XMM[5], @XMM[13]
+#ifndef BSAES_ASM_EXTENDED_KEY
+ add r4, sp, #0x90 @ pass key schedule
+#else
+ add r4, $key, #248 @ pass key schedule
+#endif
+ veor @XMM[6], @XMM[6], @XMM[14]
+ mov r5, $rounds @ pass rounds
+ veor @XMM[7], @XMM[7], @XMM[15]
+ mov r0, sp
+
+ bl _bsaes_encrypt8
+
+ vld1.64 {@XMM[ 8]-@XMM[ 9]}, [r0,:128]!
+ vld1.64 {@XMM[10]-@XMM[11]}, [r0,:128]!
+ veor @XMM[0], @XMM[0], @XMM[ 8]
+ vld1.64 {@XMM[12]-@XMM[13]}, [r0,:128]!
+ veor @XMM[1], @XMM[1], @XMM[ 9]
+ veor @XMM[8], @XMM[4], @XMM[10]
+ vst1.8 {@XMM[0]-@XMM[1]}, [$out]!
+ veor @XMM[9], @XMM[6], @XMM[11]
+ vld1.64 {@XMM[14]-@XMM[15]}, [r0,:128]!
+ veor @XMM[10], @XMM[3], @XMM[12]
+ vst1.8 {@XMM[8]-@XMM[9]}, [$out]!
+ veor @XMM[11], @XMM[7], @XMM[13]
+ veor @XMM[12], @XMM[2], @XMM[14]
+ vst1.8 {@XMM[10]-@XMM[11]}, [$out]!
+ veor @XMM[13], @XMM[5], @XMM[15]
+ vst1.8 {@XMM[12]-@XMM[13]}, [$out]!
+
+ vld1.64 {@XMM[8]}, [r0,:128] @ next round tweak
+
+ subs $len, #0x80
+ bpl .Lxts_enc_loop
+
+.Lxts_enc_short:
+ adds $len, #0x70
+ bmi .Lxts_enc_done
+
+ vldmia $magic, {$twmask} @ load XTS magic
+ vshr.s64 @T[0], @XMM[8], #63
+ mov r0, sp
+ vand @T[0], @T[0], $twmask
+___
+for($i=9;$i<16;$i++) {
+$code.=<<___;
+ vadd.u64 @XMM[$i], @XMM[$i-1], @XMM[$i-1]
+ vst1.64 {@XMM[$i-1]}, [r0,:128]!
+ vswp `&Dhi("@T[0]")`,`&Dlo("@T[0]")`
+ vshr.s64 @T[1], @XMM[$i], #63
+ veor @XMM[$i], @XMM[$i], @T[0]
+ vand @T[1], @T[1], $twmask
+___
+ @T=reverse(@T);
+
+$code.=<<___ if ($i>=10);
+ vld1.8 {@XMM[$i-10]}, [$inp]!
+ subs $len, #0x10
+ bmi .Lxts_enc_`$i-9`
+___
+$code.=<<___ if ($i>=11);
+ veor @XMM[$i-11], @XMM[$i-11], @XMM[$i-3]
+___
+}
+$code.=<<___;
+ sub $len, #0x10
+ vst1.64 {@XMM[15]}, [r0,:128] @ next round tweak
+
+ vld1.8 {@XMM[6]}, [$inp]!
+ veor @XMM[5], @XMM[5], @XMM[13]
+#ifndef BSAES_ASM_EXTENDED_KEY
+ add r4, sp, #0x90 @ pass key schedule
+#else
+ add r4, $key, #248 @ pass key schedule
+#endif
+ veor @XMM[6], @XMM[6], @XMM[14]
+ mov r5, $rounds @ pass rounds
+ mov r0, sp
+
+ bl _bsaes_encrypt8
+
+ vld1.64 {@XMM[ 8]-@XMM[ 9]}, [r0,:128]!
+ vld1.64 {@XMM[10]-@XMM[11]}, [r0,:128]!
+ veor @XMM[0], @XMM[0], @XMM[ 8]
+ vld1.64 {@XMM[12]-@XMM[13]}, [r0,:128]!
+ veor @XMM[1], @XMM[1], @XMM[ 9]
+ veor @XMM[8], @XMM[4], @XMM[10]
+ vst1.8 {@XMM[0]-@XMM[1]}, [$out]!
+ veor @XMM[9], @XMM[6], @XMM[11]
+ vld1.64 {@XMM[14]}, [r0,:128]!
+ veor @XMM[10], @XMM[3], @XMM[12]
+ vst1.8 {@XMM[8]-@XMM[9]}, [$out]!
+ veor @XMM[11], @XMM[7], @XMM[13]
+ veor @XMM[12], @XMM[2], @XMM[14]
+ vst1.8 {@XMM[10]-@XMM[11]}, [$out]!
+ vst1.8 {@XMM[12]}, [$out]!
+
+ vld1.64 {@XMM[8]}, [r0,:128] @ next round tweak
+ b .Lxts_enc_done
+.align 4
+.Lxts_enc_6:
+ vst1.64 {@XMM[14]}, [r0,:128] @ next round tweak
+
+ veor @XMM[4], @XMM[4], @XMM[12]
+#ifndef BSAES_ASM_EXTENDED_KEY
+ add r4, sp, #0x90 @ pass key schedule
+#else
+ add r4, $key, #248 @ pass key schedule
+#endif
+ veor @XMM[5], @XMM[5], @XMM[13]
+ mov r5, $rounds @ pass rounds
+ mov r0, sp
+
+ bl _bsaes_encrypt8
+
+ vld1.64 {@XMM[ 8]-@XMM[ 9]}, [r0,:128]!
+ vld1.64 {@XMM[10]-@XMM[11]}, [r0,:128]!
+ veor @XMM[0], @XMM[0], @XMM[ 8]
+ vld1.64 {@XMM[12]-@XMM[13]}, [r0,:128]!
+ veor @XMM[1], @XMM[1], @XMM[ 9]
+ veor @XMM[8], @XMM[4], @XMM[10]
+ vst1.8 {@XMM[0]-@XMM[1]}, [$out]!
+ veor @XMM[9], @XMM[6], @XMM[11]
+ veor @XMM[10], @XMM[3], @XMM[12]
+ vst1.8 {@XMM[8]-@XMM[9]}, [$out]!
+ veor @XMM[11], @XMM[7], @XMM[13]
+ vst1.8 {@XMM[10]-@XMM[11]}, [$out]!
+
+ vld1.64 {@XMM[8]}, [r0,:128] @ next round tweak
+ b .Lxts_enc_done
+
+@ put this in range for both ARM and Thumb mode adr instructions
+.align 5
+.Lxts_magic:
+ .quad 1, 0x87
+
+.align 5
+.Lxts_enc_5:
+ vst1.64 {@XMM[13]}, [r0,:128] @ next round tweak
+
+ veor @XMM[3], @XMM[3], @XMM[11]
+#ifndef BSAES_ASM_EXTENDED_KEY
+ add r4, sp, #0x90 @ pass key schedule
+#else
+ add r4, $key, #248 @ pass key schedule
+#endif
+ veor @XMM[4], @XMM[4], @XMM[12]
+ mov r5, $rounds @ pass rounds
+ mov r0, sp
+
+ bl _bsaes_encrypt8
+
+ vld1.64 {@XMM[ 8]-@XMM[ 9]}, [r0,:128]!
+ vld1.64 {@XMM[10]-@XMM[11]}, [r0,:128]!
+ veor @XMM[0], @XMM[0], @XMM[ 8]
+ vld1.64 {@XMM[12]}, [r0,:128]!
+ veor @XMM[1], @XMM[1], @XMM[ 9]
+ veor @XMM[8], @XMM[4], @XMM[10]
+ vst1.8 {@XMM[0]-@XMM[1]}, [$out]!
+ veor @XMM[9], @XMM[6], @XMM[11]
+ veor @XMM[10], @XMM[3], @XMM[12]
+ vst1.8 {@XMM[8]-@XMM[9]}, [$out]!
+ vst1.8 {@XMM[10]}, [$out]!
+
+ vld1.64 {@XMM[8]}, [r0,:128] @ next round tweak
+ b .Lxts_enc_done
+.align 4
+.Lxts_enc_4:
+ vst1.64 {@XMM[12]}, [r0,:128] @ next round tweak
+
+ veor @XMM[2], @XMM[2], @XMM[10]
+#ifndef BSAES_ASM_EXTENDED_KEY
+ add r4, sp, #0x90 @ pass key schedule
+#else
+ add r4, $key, #248 @ pass key schedule
+#endif
+ veor @XMM[3], @XMM[3], @XMM[11]
+ mov r5, $rounds @ pass rounds
+ mov r0, sp
+
+ bl _bsaes_encrypt8
+
+ vld1.64 {@XMM[ 8]-@XMM[ 9]}, [r0,:128]!
+ vld1.64 {@XMM[10]-@XMM[11]}, [r0,:128]!
+ veor @XMM[0], @XMM[0], @XMM[ 8]
+ veor @XMM[1], @XMM[1], @XMM[ 9]
+ veor @XMM[8], @XMM[4], @XMM[10]
+ vst1.8 {@XMM[0]-@XMM[1]}, [$out]!
+ veor @XMM[9], @XMM[6], @XMM[11]
+ vst1.8 {@XMM[8]-@XMM[9]}, [$out]!
+
+ vld1.64 {@XMM[8]}, [r0,:128] @ next round tweak
+ b .Lxts_enc_done
+.align 4
+.Lxts_enc_3:
+ vst1.64 {@XMM[11]}, [r0,:128] @ next round tweak
+
+ veor @XMM[1], @XMM[1], @XMM[9]
+#ifndef BSAES_ASM_EXTENDED_KEY
+ add r4, sp, #0x90 @ pass key schedule
+#else
+ add r4, $key, #248 @ pass key schedule
+#endif
+ veor @XMM[2], @XMM[2], @XMM[10]
+ mov r5, $rounds @ pass rounds
+ mov r0, sp
+
+ bl _bsaes_encrypt8
+
+ vld1.64 {@XMM[8]-@XMM[9]}, [r0,:128]!
+ vld1.64 {@XMM[10]}, [r0,:128]!
+ veor @XMM[0], @XMM[0], @XMM[ 8]
+ veor @XMM[1], @XMM[1], @XMM[ 9]
+ veor @XMM[8], @XMM[4], @XMM[10]
+ vst1.8 {@XMM[0]-@XMM[1]}, [$out]!
+ vst1.8 {@XMM[8]}, [$out]!
+
+ vld1.64 {@XMM[8]}, [r0,:128] @ next round tweak
+ b .Lxts_enc_done
+.align 4
+.Lxts_enc_2:
+ vst1.64 {@XMM[10]}, [r0,:128] @ next round tweak
+
+ veor @XMM[0], @XMM[0], @XMM[8]
+#ifndef BSAES_ASM_EXTENDED_KEY
+ add r4, sp, #0x90 @ pass key schedule
+#else
+ add r4, $key, #248 @ pass key schedule
+#endif
+ veor @XMM[1], @XMM[1], @XMM[9]
+ mov r5, $rounds @ pass rounds
+ mov r0, sp
+
+ bl _bsaes_encrypt8
+
+ vld1.64 {@XMM[8]-@XMM[9]}, [r0,:128]!
+ veor @XMM[0], @XMM[0], @XMM[ 8]
+ veor @XMM[1], @XMM[1], @XMM[ 9]
+ vst1.8 {@XMM[0]-@XMM[1]}, [$out]!
+
+ vld1.64 {@XMM[8]}, [r0,:128] @ next round tweak
+ b .Lxts_enc_done
+.align 4
+.Lxts_enc_1:
+ mov r0, sp
+ veor @XMM[0], @XMM[8]
+ mov r1, sp
+ vst1.8 {@XMM[0]}, [sp,:128]
+ mov r2, $key
+ mov r4, $fp @ preserve fp
+
+ bl AES_encrypt
+
+ vld1.8 {@XMM[0]}, [sp,:128]
+ veor @XMM[0], @XMM[0], @XMM[8]
+ vst1.8 {@XMM[0]}, [$out]!
+ mov $fp, r4
+
+ vmov @XMM[8], @XMM[9] @ next round tweak
+
+.Lxts_enc_done:
+#ifndef XTS_CHAIN_TWEAK
+ adds $len, #0x10
+ beq .Lxts_enc_ret
+ sub r6, $out, #0x10
+
+.Lxts_enc_steal:
+ ldrb r0, [$inp], #1
+ ldrb r1, [$out, #-0x10]
+ strb r0, [$out, #-0x10]
+ strb r1, [$out], #1
+
+ subs $len, #1
+ bhi .Lxts_enc_steal
+
+ vld1.8 {@XMM[0]}, [r6]
+ mov r0, sp
+ veor @XMM[0], @XMM[0], @XMM[8]
+ mov r1, sp
+ vst1.8 {@XMM[0]}, [sp,:128]
+ mov r2, $key
+ mov r4, $fp @ preserve fp
+
+ bl AES_encrypt
+
+ vld1.8 {@XMM[0]}, [sp,:128]
+ veor @XMM[0], @XMM[0], @XMM[8]
+ vst1.8 {@XMM[0]}, [r6]
+ mov $fp, r4
+#endif
+
+.Lxts_enc_ret:
+ bic r0, $fp, #0xf
+ vmov.i32 q0, #0
+ vmov.i32 q1, #0
+#ifdef XTS_CHAIN_TWEAK
+ ldr r1, [$fp, #0x20+VFP_ABI_FRAME] @ chain tweak
+#endif
+.Lxts_enc_bzero: @ wipe key schedule [if any]
+ vstmia sp!, {q0-q1}
+ cmp sp, r0
+ bne .Lxts_enc_bzero
+
+ mov sp, $fp
+#ifdef XTS_CHAIN_TWEAK
+ vst1.8 {@XMM[8]}, [r1]
+#endif
+ VFP_ABI_POP
+ ldmia sp!, {r4-r10, pc} @ return
+
+.size bsaes_xts_encrypt,.-bsaes_xts_encrypt
+
+.globl bsaes_xts_decrypt
+.type bsaes_xts_decrypt,%function
+.align 4
+bsaes_xts_decrypt:
+ mov ip, sp
+ stmdb sp!, {r4-r10, lr} @ 0x20
+ VFP_ABI_PUSH
+ mov r6, sp @ future $fp
+
+ mov $inp, r0
+ mov $out, r1
+ mov $len, r2
+ mov $key, r3
+
+ sub r0, sp, #0x10 @ 0x10
+ bic r0, #0xf @ align at 16 bytes
+ mov sp, r0
+
+#ifdef XTS_CHAIN_TWEAK
+ ldr r0, [ip] @ pointer to input tweak
+#else
+ @ generate initial tweak
+ ldr r0, [ip, #4] @ iv[]
+ mov r1, sp
+ ldr r2, [ip, #0] @ key2
+ bl AES_encrypt
+ mov r0, sp @ pointer to initial tweak
+#endif
+
+ ldr $rounds, [$key, #240] @ get # of rounds
+ mov $fp, r6
+#ifndef BSAES_ASM_EXTENDED_KEY
+ @ allocate the key schedule on the stack
+ sub r12, sp, $rounds, lsl#7 @ 128 bytes per inner round key
+ @ add r12, #`128-32` @ size of bit-sliced key schedule
+ sub r12, #`32+16` @ place for tweak[9]
+
+ @ populate the key schedule
+ mov r4, $key @ pass key
+ mov r5, $rounds @ pass # of rounds
+ mov sp, r12
+ add r12, #0x90 @ pass key schedule
+ bl _bsaes_key_convert
+ add r4, sp, #0x90
+ vldmia r4, {@XMM[6]}
+ vstmia r12, {@XMM[15]} @ save last round key
+ veor @XMM[7], @XMM[7], @XMM[6] @ fix up round 0 key
+ vstmia r4, {@XMM[7]}
+#else
+ ldr r12, [$key, #244]
+ eors r12, #1
+ beq 0f
+
+ str r12, [$key, #244]
+ mov r4, $key @ pass key
+ mov r5, $rounds @ pass # of rounds
+ add r12, $key, #248 @ pass key schedule
+ bl _bsaes_key_convert
+ add r4, $key, #248
+ vldmia r4, {@XMM[6]}
+ vstmia r12, {@XMM[15]} @ save last round key
+ veor @XMM[7], @XMM[7], @XMM[6] @ fix up round 0 key
+ vstmia r4, {@XMM[7]}
+
+.align 2
+0: sub sp, #0x90 @ place for tweak[9]
+#endif
+ vld1.8 {@XMM[8]}, [r0] @ initial tweak
+ adr $magic, .Lxts_magic
+
+ tst $len, #0xf @ if not multiple of 16
+ it ne @ Thumb2 thing, sanity check in ARM
+ subne $len, #0x10 @ subtract another 16 bytes
+ subs $len, #0x80
+
+ blo .Lxts_dec_short
+ b .Lxts_dec_loop
+
+.align 4
+.Lxts_dec_loop:
+ vldmia $magic, {$twmask} @ load XTS magic
+ vshr.s64 @T[0], @XMM[8], #63
+ mov r0, sp
+ vand @T[0], @T[0], $twmask
+___
+for($i=9;$i<16;$i++) {
+$code.=<<___;
+ vadd.u64 @XMM[$i], @XMM[$i-1], @XMM[$i-1]
+ vst1.64 {@XMM[$i-1]}, [r0,:128]!
+ vswp `&Dhi("@T[0]")`,`&Dlo("@T[0]")`
+ vshr.s64 @T[1], @XMM[$i], #63
+ veor @XMM[$i], @XMM[$i], @T[0]
+ vand @T[1], @T[1], $twmask
+___
+ @T=reverse(@T);
+
+$code.=<<___ if ($i>=10);
+ vld1.8 {@XMM[$i-10]}, [$inp]!
+___
+$code.=<<___ if ($i>=11);
+ veor @XMM[$i-11], @XMM[$i-11], @XMM[$i-3]
+___
+}
+$code.=<<___;
+ vadd.u64 @XMM[8], @XMM[15], @XMM[15]
+ vst1.64 {@XMM[15]}, [r0,:128]!
+ vswp `&Dhi("@T[0]")`,`&Dlo("@T[0]")`
+ veor @XMM[8], @XMM[8], @T[0]
+ vst1.64 {@XMM[8]}, [r0,:128] @ next round tweak
+
+ vld1.8 {@XMM[6]-@XMM[7]}, [$inp]!
+ veor @XMM[5], @XMM[5], @XMM[13]
+#ifndef BSAES_ASM_EXTENDED_KEY
+ add r4, sp, #0x90 @ pass key schedule
+#else
+ add r4, $key, #248 @ pass key schedule
+#endif
+ veor @XMM[6], @XMM[6], @XMM[14]
+ mov r5, $rounds @ pass rounds
+ veor @XMM[7], @XMM[7], @XMM[15]
+ mov r0, sp
+
+ bl _bsaes_decrypt8
+
+ vld1.64 {@XMM[ 8]-@XMM[ 9]}, [r0,:128]!
+ vld1.64 {@XMM[10]-@XMM[11]}, [r0,:128]!
+ veor @XMM[0], @XMM[0], @XMM[ 8]
+ vld1.64 {@XMM[12]-@XMM[13]}, [r0,:128]!
+ veor @XMM[1], @XMM[1], @XMM[ 9]
+ veor @XMM[8], @XMM[6], @XMM[10]
+ vst1.8 {@XMM[0]-@XMM[1]}, [$out]!
+ veor @XMM[9], @XMM[4], @XMM[11]
+ vld1.64 {@XMM[14]-@XMM[15]}, [r0,:128]!
+ veor @XMM[10], @XMM[2], @XMM[12]
+ vst1.8 {@XMM[8]-@XMM[9]}, [$out]!
+ veor @XMM[11], @XMM[7], @XMM[13]
+ veor @XMM[12], @XMM[3], @XMM[14]
+ vst1.8 {@XMM[10]-@XMM[11]}, [$out]!
+ veor @XMM[13], @XMM[5], @XMM[15]
+ vst1.8 {@XMM[12]-@XMM[13]}, [$out]!
+
+ vld1.64 {@XMM[8]}, [r0,:128] @ next round tweak
+
+ subs $len, #0x80
+ bpl .Lxts_dec_loop
+
+.Lxts_dec_short:
+ adds $len, #0x70
+ bmi .Lxts_dec_done
+
+ vldmia $magic, {$twmask} @ load XTS magic
+ vshr.s64 @T[0], @XMM[8], #63
+ mov r0, sp
+ vand @T[0], @T[0], $twmask
+___
+for($i=9;$i<16;$i++) {
+$code.=<<___;
+ vadd.u64 @XMM[$i], @XMM[$i-1], @XMM[$i-1]
+ vst1.64 {@XMM[$i-1]}, [r0,:128]!
+ vswp `&Dhi("@T[0]")`,`&Dlo("@T[0]")`
+ vshr.s64 @T[1], @XMM[$i], #63
+ veor @XMM[$i], @XMM[$i], @T[0]
+ vand @T[1], @T[1], $twmask
+___
+ @T=reverse(@T);
+
+$code.=<<___ if ($i>=10);
+ vld1.8 {@XMM[$i-10]}, [$inp]!
+ subs $len, #0x10
+ bmi .Lxts_dec_`$i-9`
+___
+$code.=<<___ if ($i>=11);
+ veor @XMM[$i-11], @XMM[$i-11], @XMM[$i-3]
+___
+}
+$code.=<<___;
+ sub $len, #0x10
+ vst1.64 {@XMM[15]}, [r0,:128] @ next round tweak
+
+ vld1.8 {@XMM[6]}, [$inp]!
+ veor @XMM[5], @XMM[5], @XMM[13]
+#ifndef BSAES_ASM_EXTENDED_KEY
+ add r4, sp, #0x90 @ pass key schedule
+#else
+ add r4, $key, #248 @ pass key schedule
+#endif
+ veor @XMM[6], @XMM[6], @XMM[14]
+ mov r5, $rounds @ pass rounds
+ mov r0, sp
+
+ bl _bsaes_decrypt8
+
+ vld1.64 {@XMM[ 8]-@XMM[ 9]}, [r0,:128]!
+ vld1.64 {@XMM[10]-@XMM[11]}, [r0,:128]!
+ veor @XMM[0], @XMM[0], @XMM[ 8]
+ vld1.64 {@XMM[12]-@XMM[13]}, [r0,:128]!
+ veor @XMM[1], @XMM[1], @XMM[ 9]
+ veor @XMM[8], @XMM[6], @XMM[10]
+ vst1.8 {@XMM[0]-@XMM[1]}, [$out]!
+ veor @XMM[9], @XMM[4], @XMM[11]
+ vld1.64 {@XMM[14]}, [r0,:128]!
+ veor @XMM[10], @XMM[2], @XMM[12]
+ vst1.8 {@XMM[8]-@XMM[9]}, [$out]!
+ veor @XMM[11], @XMM[7], @XMM[13]
+ veor @XMM[12], @XMM[3], @XMM[14]
+ vst1.8 {@XMM[10]-@XMM[11]}, [$out]!
+ vst1.8 {@XMM[12]}, [$out]!
+
+ vld1.64 {@XMM[8]}, [r0,:128] @ next round tweak
+ b .Lxts_dec_done
+.align 4
+.Lxts_dec_6:
+ vst1.64 {@XMM[14]}, [r0,:128] @ next round tweak
+
+ veor @XMM[4], @XMM[4], @XMM[12]
+#ifndef BSAES_ASM_EXTENDED_KEY
+ add r4, sp, #0x90 @ pass key schedule
+#else
+ add r4, $key, #248 @ pass key schedule
+#endif
+ veor @XMM[5], @XMM[5], @XMM[13]
+ mov r5, $rounds @ pass rounds
+ mov r0, sp
+
+ bl _bsaes_decrypt8
+
+ vld1.64 {@XMM[ 8]-@XMM[ 9]}, [r0,:128]!
+ vld1.64 {@XMM[10]-@XMM[11]}, [r0,:128]!
+ veor @XMM[0], @XMM[0], @XMM[ 8]
+ vld1.64 {@XMM[12]-@XMM[13]}, [r0,:128]!
+ veor @XMM[1], @XMM[1], @XMM[ 9]
+ veor @XMM[8], @XMM[6], @XMM[10]
+ vst1.8 {@XMM[0]-@XMM[1]}, [$out]!
+ veor @XMM[9], @XMM[4], @XMM[11]
+ veor @XMM[10], @XMM[2], @XMM[12]
+ vst1.8 {@XMM[8]-@XMM[9]}, [$out]!
+ veor @XMM[11], @XMM[7], @XMM[13]
+ vst1.8 {@XMM[10]-@XMM[11]}, [$out]!
+
+ vld1.64 {@XMM[8]}, [r0,:128] @ next round tweak
+ b .Lxts_dec_done
+.align 4
+.Lxts_dec_5:
+ vst1.64 {@XMM[13]}, [r0,:128] @ next round tweak
+
+ veor @XMM[3], @XMM[3], @XMM[11]
+#ifndef BSAES_ASM_EXTENDED_KEY
+ add r4, sp, #0x90 @ pass key schedule
+#else
+ add r4, $key, #248 @ pass key schedule
+#endif
+ veor @XMM[4], @XMM[4], @XMM[12]
+ mov r5, $rounds @ pass rounds
+ mov r0, sp
+
+ bl _bsaes_decrypt8
+
+ vld1.64 {@XMM[ 8]-@XMM[ 9]}, [r0,:128]!
+ vld1.64 {@XMM[10]-@XMM[11]}, [r0,:128]!
+ veor @XMM[0], @XMM[0], @XMM[ 8]
+ vld1.64 {@XMM[12]}, [r0,:128]!
+ veor @XMM[1], @XMM[1], @XMM[ 9]
+ veor @XMM[8], @XMM[6], @XMM[10]
+ vst1.8 {@XMM[0]-@XMM[1]}, [$out]!
+ veor @XMM[9], @XMM[4], @XMM[11]
+ veor @XMM[10], @XMM[2], @XMM[12]
+ vst1.8 {@XMM[8]-@XMM[9]}, [$out]!
+ vst1.8 {@XMM[10]}, [$out]!
+
+ vld1.64 {@XMM[8]}, [r0,:128] @ next round tweak
+ b .Lxts_dec_done
+.align 4
+.Lxts_dec_4:
+ vst1.64 {@XMM[12]}, [r0,:128] @ next round tweak
+
+ veor @XMM[2], @XMM[2], @XMM[10]
+#ifndef BSAES_ASM_EXTENDED_KEY
+ add r4, sp, #0x90 @ pass key schedule
+#else
+ add r4, $key, #248 @ pass key schedule
+#endif
+ veor @XMM[3], @XMM[3], @XMM[11]
+ mov r5, $rounds @ pass rounds
+ mov r0, sp
+
+ bl _bsaes_decrypt8
+
+ vld1.64 {@XMM[ 8]-@XMM[ 9]}, [r0,:128]!
+ vld1.64 {@XMM[10]-@XMM[11]}, [r0,:128]!
+ veor @XMM[0], @XMM[0], @XMM[ 8]
+ veor @XMM[1], @XMM[1], @XMM[ 9]
+ veor @XMM[8], @XMM[6], @XMM[10]
+ vst1.8 {@XMM[0]-@XMM[1]}, [$out]!
+ veor @XMM[9], @XMM[4], @XMM[11]
+ vst1.8 {@XMM[8]-@XMM[9]}, [$out]!
+
+ vld1.64 {@XMM[8]}, [r0,:128] @ next round tweak
+ b .Lxts_dec_done
+.align 4
+.Lxts_dec_3:
+ vst1.64 {@XMM[11]}, [r0,:128] @ next round tweak
+
+ veor @XMM[1], @XMM[1], @XMM[9]
+#ifndef BSAES_ASM_EXTENDED_KEY
+ add r4, sp, #0x90 @ pass key schedule
+#else
+ add r4, $key, #248 @ pass key schedule
+#endif
+ veor @XMM[2], @XMM[2], @XMM[10]
+ mov r5, $rounds @ pass rounds
+ mov r0, sp
+
+ bl _bsaes_decrypt8
+
+ vld1.64 {@XMM[8]-@XMM[9]}, [r0,:128]!
+ vld1.64 {@XMM[10]}, [r0,:128]!
+ veor @XMM[0], @XMM[0], @XMM[ 8]
+ veor @XMM[1], @XMM[1], @XMM[ 9]
+ veor @XMM[8], @XMM[6], @XMM[10]
+ vst1.8 {@XMM[0]-@XMM[1]}, [$out]!
+ vst1.8 {@XMM[8]}, [$out]!
+
+ vld1.64 {@XMM[8]}, [r0,:128] @ next round tweak
+ b .Lxts_dec_done
+.align 4
+.Lxts_dec_2:
+ vst1.64 {@XMM[10]}, [r0,:128] @ next round tweak
+
+ veor @XMM[0], @XMM[0], @XMM[8]
+#ifndef BSAES_ASM_EXTENDED_KEY
+ add r4, sp, #0x90 @ pass key schedule
+#else
+ add r4, $key, #248 @ pass key schedule
+#endif
+ veor @XMM[1], @XMM[1], @XMM[9]
+ mov r5, $rounds @ pass rounds
+ mov r0, sp
+
+ bl _bsaes_decrypt8
+
+ vld1.64 {@XMM[8]-@XMM[9]}, [r0,:128]!
+ veor @XMM[0], @XMM[0], @XMM[ 8]
+ veor @XMM[1], @XMM[1], @XMM[ 9]
+ vst1.8 {@XMM[0]-@XMM[1]}, [$out]!
+
+ vld1.64 {@XMM[8]}, [r0,:128] @ next round tweak
+ b .Lxts_dec_done
+.align 4
+.Lxts_dec_1:
+ mov r0, sp
+ veor @XMM[0], @XMM[8]
+ mov r1, sp
+ vst1.8 {@XMM[0]}, [sp,:128]
+ mov r2, $key
+ mov r4, $fp @ preserve fp
+ mov r5, $magic @ preserve magic
+
+ bl AES_decrypt
+
+ vld1.8 {@XMM[0]}, [sp,:128]
+ veor @XMM[0], @XMM[0], @XMM[8]
+ vst1.8 {@XMM[0]}, [$out]!
+ mov $fp, r4
+ mov $magic, r5
+
+ vmov @XMM[8], @XMM[9] @ next round tweak
+
+.Lxts_dec_done:
+#ifndef XTS_CHAIN_TWEAK
+ adds $len, #0x10
+ beq .Lxts_dec_ret
+
+ @ calculate one round of extra tweak for the stolen ciphertext
+ vldmia $magic, {$twmask}
+ vshr.s64 @XMM[6], @XMM[8], #63
+ vand @XMM[6], @XMM[6], $twmask
+ vadd.u64 @XMM[9], @XMM[8], @XMM[8]
+ vswp `&Dhi("@XMM[6]")`,`&Dlo("@XMM[6]")`
+ veor @XMM[9], @XMM[9], @XMM[6]
+
+ @ perform the final decryption with the last tweak value
+ vld1.8 {@XMM[0]}, [$inp]!
+ mov r0, sp
+ veor @XMM[0], @XMM[0], @XMM[9]
+ mov r1, sp
+ vst1.8 {@XMM[0]}, [sp,:128]
+ mov r2, $key
+ mov r4, $fp @ preserve fp
+
+ bl AES_decrypt
+
+ vld1.8 {@XMM[0]}, [sp,:128]
+ veor @XMM[0], @XMM[0], @XMM[9]
+ vst1.8 {@XMM[0]}, [$out]
+
+ mov r6, $out
+.Lxts_dec_steal:
+ ldrb r1, [$out]
+ ldrb r0, [$inp], #1
+ strb r1, [$out, #0x10]
+ strb r0, [$out], #1
+
+ subs $len, #1
+ bhi .Lxts_dec_steal
+
+ vld1.8 {@XMM[0]}, [r6]
+ mov r0, sp
+ veor @XMM[0], @XMM[8]
+ mov r1, sp
+ vst1.8 {@XMM[0]}, [sp,:128]
+ mov r2, $key
+
+ bl AES_decrypt
+
+ vld1.8 {@XMM[0]}, [sp,:128]
+ veor @XMM[0], @XMM[0], @XMM[8]
+ vst1.8 {@XMM[0]}, [r6]
+ mov $fp, r4
+#endif
+
+.Lxts_dec_ret:
+ bic r0, $fp, #0xf
+ vmov.i32 q0, #0
+ vmov.i32 q1, #0
+#ifdef XTS_CHAIN_TWEAK
+ ldr r1, [$fp, #0x20+VFP_ABI_FRAME] @ chain tweak
+#endif
+.Lxts_dec_bzero: @ wipe key schedule [if any]
+ vstmia sp!, {q0-q1}
+ cmp sp, r0
+ bne .Lxts_dec_bzero
+
+ mov sp, $fp
+#ifdef XTS_CHAIN_TWEAK
+ vst1.8 {@XMM[8]}, [r1]
+#endif
+ VFP_ABI_POP
+ ldmia sp!, {r4-r10, pc} @ return
+
+.size bsaes_xts_decrypt,.-bsaes_xts_decrypt
+___
+}
+$code.=<<___;
+#endif
+___
+
+$code =~ s/\`([^\`]*)\`/eval($1)/gem;
+
+open SELF,$0;
+while(<SELF>) {
+ next if (/^#!/);
+ last if (!s/^#/@/ and !/^$/);
+ print;
+}
+close SELF;
+
+print $code;
+
+close STDOUT;
diff --git a/crypto/openssl/crypto/aes/asm/bsaes-x86_64.pl b/crypto/openssl/crypto/aes/asm/bsaes-x86_64.pl
index 41b90f0..3f7d33c 100755
--- a/crypto/openssl/crypto/aes/asm/bsaes-x86_64.pl
+++ b/crypto/openssl/crypto/aes/asm/bsaes-x86_64.pl
@@ -38,8 +38,9 @@
# Emilia's this(*) difference
#
# Core 2 9.30 8.69 +7%
-# Nehalem(**) 7.63 6.98 +9%
-# Atom 17.1 17.4 -2%(***)
+# Nehalem(**) 7.63 6.88 +11%
+# Atom 17.1 16.4 +4%
+# Silvermont - 12.9
#
# (*) Comparison is not completely fair, because "this" is ECB,
# i.e. no extra processing such as counter values calculation
@@ -50,14 +51,6 @@
# (**) Results were collected on Westmere, which is considered to
# be equivalent to Nehalem for this code.
#
-# (***) Slowdown on Atom is rather strange per se, because original
-# implementation has a number of 9+-bytes instructions, which
-# are bad for Atom front-end, and which I eliminated completely.
-# In attempt to address deterioration sbox() was tested in FP
-# SIMD "domain" (movaps instead of movdqa, xorps instead of
-# pxor, etc.). While it resulted in nominal 4% improvement on
-# Atom, it hurted Westmere by more than 2x factor.
-#
# As for key schedule conversion subroutine. Interface to OpenSSL
# relies on per-invocation on-the-fly conversion. This naturally
# has impact on performance, especially for short inputs. Conversion
@@ -67,7 +60,7 @@
# conversion conversion/8x block
# Core 2 240 0.22
# Nehalem 180 0.20
-# Atom 430 0.19
+# Atom 430 0.20
#
# The ratio values mean that 128-byte blocks will be processed
# 16-18% slower, 256-byte blocks - 9-10%, 384-byte blocks - 6-7%,
@@ -83,9 +76,10 @@
# Add decryption procedure. Performance in CPU cycles spent to decrypt
# one byte out of 4096-byte buffer with 128-bit key is:
#
-# Core 2 9.83
-# Nehalem 7.74
-# Atom 19.0
+# Core 2 9.98
+# Nehalem 7.80
+# Atom 17.9
+# Silvermont 14.0
#
# November 2011.
#
@@ -434,21 +428,21 @@ my $mask=pop;
$code.=<<___;
pxor 0x00($key),@x[0]
pxor 0x10($key),@x[1]
- pshufb $mask,@x[0]
pxor 0x20($key),@x[2]
- pshufb $mask,@x[1]
pxor 0x30($key),@x[3]
- pshufb $mask,@x[2]
+ pshufb $mask,@x[0]
+ pshufb $mask,@x[1]
pxor 0x40($key),@x[4]
- pshufb $mask,@x[3]
pxor 0x50($key),@x[5]
- pshufb $mask,@x[4]
+ pshufb $mask,@x[2]
+ pshufb $mask,@x[3]
pxor 0x60($key),@x[6]
- pshufb $mask,@x[5]
pxor 0x70($key),@x[7]
+ pshufb $mask,@x[4]
+ pshufb $mask,@x[5]
pshufb $mask,@x[6]
- lea 0x80($key),$key
pshufb $mask,@x[7]
+ lea 0x80($key),$key
___
}
@@ -820,18 +814,18 @@ _bsaes_encrypt8:
movdqa 0x50($const), @XMM[8] # .LM0SR
pxor @XMM[9], @XMM[0] # xor with round0 key
pxor @XMM[9], @XMM[1]
- pshufb @XMM[8], @XMM[0]
pxor @XMM[9], @XMM[2]
- pshufb @XMM[8], @XMM[1]
pxor @XMM[9], @XMM[3]
- pshufb @XMM[8], @XMM[2]
+ pshufb @XMM[8], @XMM[0]
+ pshufb @XMM[8], @XMM[1]
pxor @XMM[9], @XMM[4]
- pshufb @XMM[8], @XMM[3]
pxor @XMM[9], @XMM[5]
- pshufb @XMM[8], @XMM[4]
+ pshufb @XMM[8], @XMM[2]
+ pshufb @XMM[8], @XMM[3]
pxor @XMM[9], @XMM[6]
- pshufb @XMM[8], @XMM[5]
pxor @XMM[9], @XMM[7]
+ pshufb @XMM[8], @XMM[4]
+ pshufb @XMM[8], @XMM[5]
pshufb @XMM[8], @XMM[6]
pshufb @XMM[8], @XMM[7]
_bsaes_encrypt8_bitslice:
@@ -884,18 +878,18 @@ _bsaes_decrypt8:
movdqa -0x30($const), @XMM[8] # .LM0ISR
pxor @XMM[9], @XMM[0] # xor with round0 key
pxor @XMM[9], @XMM[1]
- pshufb @XMM[8], @XMM[0]
pxor @XMM[9], @XMM[2]
- pshufb @XMM[8], @XMM[1]
pxor @XMM[9], @XMM[3]
- pshufb @XMM[8], @XMM[2]
+ pshufb @XMM[8], @XMM[0]
+ pshufb @XMM[8], @XMM[1]
pxor @XMM[9], @XMM[4]
- pshufb @XMM[8], @XMM[3]
pxor @XMM[9], @XMM[5]
- pshufb @XMM[8], @XMM[4]
+ pshufb @XMM[8], @XMM[2]
+ pshufb @XMM[8], @XMM[3]
pxor @XMM[9], @XMM[6]
- pshufb @XMM[8], @XMM[5]
pxor @XMM[9], @XMM[7]
+ pshufb @XMM[8], @XMM[4]
+ pshufb @XMM[8], @XMM[5]
pshufb @XMM[8], @XMM[6]
pshufb @XMM[8], @XMM[7]
___
@@ -1937,21 +1931,21 @@ $code.=<<___;
movdqa -0x10(%r11), @XMM[8] # .LSWPUPM0SR
pxor @XMM[9], @XMM[0] # xor with round0 key
pxor @XMM[9], @XMM[1]
- pshufb @XMM[8], @XMM[0]
pxor @XMM[9], @XMM[2]
- pshufb @XMM[8], @XMM[1]
pxor @XMM[9], @XMM[3]
- pshufb @XMM[8], @XMM[2]
+ pshufb @XMM[8], @XMM[0]
+ pshufb @XMM[8], @XMM[1]
pxor @XMM[9], @XMM[4]
- pshufb @XMM[8], @XMM[3]
pxor @XMM[9], @XMM[5]
- pshufb @XMM[8], @XMM[4]
+ pshufb @XMM[8], @XMM[2]
+ pshufb @XMM[8], @XMM[3]
pxor @XMM[9], @XMM[6]
- pshufb @XMM[8], @XMM[5]
pxor @XMM[9], @XMM[7]
+ pshufb @XMM[8], @XMM[4]
+ pshufb @XMM[8], @XMM[5]
pshufb @XMM[8], @XMM[6]
- lea .LBS0(%rip), %r11 # constants table
pshufb @XMM[8], @XMM[7]
+ lea .LBS0(%rip), %r11 # constants table
mov %ebx,%r10d # pass rounds
call _bsaes_encrypt8_bitslice
diff --git a/crypto/openssl/crypto/aes/asm/vpaes-ppc.pl b/crypto/openssl/crypto/aes/asm/vpaes-ppc.pl
new file mode 100755
index 0000000..7fda60e
--- /dev/null
+++ b/crypto/openssl/crypto/aes/asm/vpaes-ppc.pl
@@ -0,0 +1,1512 @@
+#!/usr/bin/env perl
+
+######################################################################
+## Constant-time SSSE3 AES core implementation.
+## version 0.1
+##
+## By Mike Hamburg (Stanford University), 2009
+## Public domain.
+##
+## For details see http://shiftleft.org/papers/vector_aes/ and
+## http://crypto.stanford.edu/vpaes/.
+
+# CBC encrypt/decrypt performance in cycles per byte processed with
+# 128-bit key.
+#
+# aes-ppc.pl this
+# G4e 35.5/52.1/(23.8) 11.9(*)/15.4
+# POWER6 42.7/54.3/(28.2) 63.0/92.8(**)
+# POWER7 32.3/42.9/(18.4) 18.5/23.3
+#
+# (*) This is ~10% worse than reported in paper. The reason is
+# twofold. This module doesn't make any assumption about
+# key schedule (or data for that matter) alignment and handles
+# it in-line. Secondly it, being transliterated from
+# vpaes-x86_64.pl, relies on "nested inversion" better suited
+# for Intel CPUs.
+# (**) Inadequate POWER6 performance is due to astronomic AltiVec
+# latency, 9 cycles per simple logical operation.
+
+$flavour = shift;
+
+if ($flavour =~ /64/) {
+ $SIZE_T =8;
+ $LRSAVE =2*$SIZE_T;
+ $STU ="stdu";
+ $POP ="ld";
+ $PUSH ="std";
+ $UCMP ="cmpld";
+} elsif ($flavour =~ /32/) {
+ $SIZE_T =4;
+ $LRSAVE =$SIZE_T;
+ $STU ="stwu";
+ $POP ="lwz";
+ $PUSH ="stw";
+ $UCMP ="cmplw";
+} else { die "nonsense $flavour"; }
+
+$sp="r1";
+$FRAME=6*$SIZE_T+13*16; # 13*16 is for v20-v31 offload
+
+$0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1;
+( $xlate="${dir}ppc-xlate.pl" and -f $xlate ) or
+( $xlate="${dir}../../perlasm/ppc-xlate.pl" and -f $xlate) or
+die "can't locate ppc-xlate.pl";
+
+open STDOUT,"| $^X $xlate $flavour ".shift || die "can't call $xlate: $!";
+
+$code.=<<___;
+.machine "any"
+
+.text
+
+.align 7 # totally strategic alignment
+_vpaes_consts:
+Lk_mc_forward: # mc_forward
+ .long 0x01020300, 0x05060704, 0x090a0b08, 0x0d0e0f0c ?inv
+ .long 0x05060704, 0x090a0b08, 0x0d0e0f0c, 0x01020300 ?inv
+ .long 0x090a0b08, 0x0d0e0f0c, 0x01020300, 0x05060704 ?inv
+ .long 0x0d0e0f0c, 0x01020300, 0x05060704, 0x090a0b08 ?inv
+Lk_mc_backward: # mc_backward
+ .long 0x03000102, 0x07040506, 0x0b08090a, 0x0f0c0d0e ?inv
+ .long 0x0f0c0d0e, 0x03000102, 0x07040506, 0x0b08090a ?inv
+ .long 0x0b08090a, 0x0f0c0d0e, 0x03000102, 0x07040506 ?inv
+ .long 0x07040506, 0x0b08090a, 0x0f0c0d0e, 0x03000102 ?inv
+Lk_sr: # sr
+ .long 0x00010203, 0x04050607, 0x08090a0b, 0x0c0d0e0f ?inv
+ .long 0x00050a0f, 0x04090e03, 0x080d0207, 0x0c01060b ?inv
+ .long 0x0009020b, 0x040d060f, 0x08010a03, 0x0c050e07 ?inv
+ .long 0x000d0a07, 0x04010e0b, 0x0805020f, 0x0c090603 ?inv
+
+##
+## "Hot" constants
+##
+Lk_inv: # inv, inva
+ .long 0xf001080d, 0x0f06050e, 0x020c0b0a, 0x09030704 ?rev
+ .long 0xf0070b0f, 0x060a0401, 0x09080502, 0x0c0e0d03 ?rev
+Lk_ipt: # input transform (lo, hi)
+ .long 0x00702a5a, 0x98e8b2c2, 0x08782252, 0x90e0baca ?rev
+ .long 0x004d7c31, 0x7d30014c, 0x81ccfdb0, 0xfcb180cd ?rev
+Lk_sbo: # sbou, sbot
+ .long 0x00c7bd6f, 0x176dd2d0, 0x78a802c5, 0x7abfaa15 ?rev
+ .long 0x006abb5f, 0xa574e4cf, 0xfa352b41, 0xd1901e8e ?rev
+Lk_sb1: # sb1u, sb1t
+ .long 0x0023e2fa, 0x15d41836, 0xefd92e0d, 0xc1ccf73b ?rev
+ .long 0x003e50cb, 0x8fe19bb1, 0x44f52a14, 0x6e7adfa5 ?rev
+Lk_sb2: # sb2u, sb2t
+ .long 0x0029e10a, 0x4088eb69, 0x4a2382ab, 0xc863a1c2 ?rev
+ .long 0x0024710b, 0xc6937ae2, 0xcd2f98bc, 0x55e9b75e ?rev
+
+##
+## Decryption stuff
+##
+Lk_dipt: # decryption input transform
+ .long 0x005f540b, 0x045b500f, 0x1a454e11, 0x1e414a15 ?rev
+ .long 0x00650560, 0xe683e386, 0x94f191f4, 0x72177712 ?rev
+Lk_dsbo: # decryption sbox final output
+ .long 0x0040f97e, 0x53ea8713, 0x2d3e94d4, 0xb96daac7 ?rev
+ .long 0x001d4493, 0x0f56d712, 0x9c8ec5d8, 0x59814bca ?rev
+Lk_dsb9: # decryption sbox output *9*u, *9*t
+ .long 0x00d6869a, 0x53031c85, 0xc94c994f, 0x501fd5ca ?rev
+ .long 0x0049d7ec, 0x89173bc0, 0x65a5fbb2, 0x9e2c5e72 ?rev
+Lk_dsbd: # decryption sbox output *D*u, *D*t
+ .long 0x00a2b1e6, 0xdfcc577d, 0x39442a88, 0x139b6ef5 ?rev
+ .long 0x00cbc624, 0xf7fae23c, 0xd3efde15, 0x0d183129 ?rev
+Lk_dsbb: # decryption sbox output *B*u, *B*t
+ .long 0x0042b496, 0x926422d0, 0x04d4f2b0, 0xf6462660 ?rev
+ .long 0x006759cd, 0xa69894c1, 0x6baa5532, 0x3e0cfff3 ?rev
+Lk_dsbe: # decryption sbox output *E*u, *E*t
+ .long 0x00d0d426, 0x9692f246, 0xb0f6b464, 0x04604222 ?rev
+ .long 0x00c1aaff, 0xcda6550c, 0x323e5998, 0x6bf36794 ?rev
+
+##
+## Key schedule constants
+##
+Lk_dksd: # decryption key schedule: invskew x*D
+ .long 0x0047e4a3, 0x5d1ab9fe, 0xf9be1d5a, 0xa4e34007 ?rev
+ .long 0x008336b5, 0xf477c241, 0x1e9d28ab, 0xea69dc5f ?rev
+Lk_dksb: # decryption key schedule: invskew x*B
+ .long 0x00d55085, 0x1fca4f9a, 0x994cc91c, 0x8653d603 ?rev
+ .long 0x004afcb6, 0xa7ed5b11, 0xc882347e, 0x6f2593d9 ?rev
+Lk_dkse: # decryption key schedule: invskew x*E + 0x63
+ .long 0x00d6c91f, 0xca1c03d5, 0x86504f99, 0x4c9a8553 ?rev
+ .long 0xe87bdc4f, 0x059631a2, 0x8714b320, 0x6af95ecd ?rev
+Lk_dks9: # decryption key schedule: invskew x*9
+ .long 0x00a7d97e, 0xc86f11b6, 0xfc5b2582, 0x3493ed4a ?rev
+ .long 0x00331427, 0x62517645, 0xcefddae9, 0xac9fb88b ?rev
+
+Lk_rcon: # rcon
+ .long 0xb6ee9daf, 0xb991831f, 0x817d7c4d, 0x08982a70 ?asis
+Lk_s63:
+ .long 0x5b5b5b5b, 0x5b5b5b5b, 0x5b5b5b5b, 0x5b5b5b5b ?asis
+
+Lk_opt: # output transform
+ .long 0x0060b6d6, 0x29499fff, 0x0868bede, 0x214197f7 ?rev
+ .long 0x00ecbc50, 0x51bded01, 0xe00c5cb0, 0xb15d0de1 ?rev
+Lk_deskew: # deskew tables: inverts the sbox's "skew"
+ .long 0x00e3a447, 0x40a3e407, 0x1af9be5d, 0x5ab9fe1d ?rev
+ .long 0x0069ea83, 0xdcb5365f, 0x771e9df4, 0xabc24128 ?rev
+.align 5
+Lconsts:
+ mflr r0
+ bcl 20,31,\$+4
+ mflr r12 #vvvvv "distance between . and _vpaes_consts
+ addi r12,r12,-0x308
+ mtlr r0
+ blr
+ .long 0
+ .byte 0,12,0x14,0,0,0,0,0
+.asciz "Vector Permutation AES for AltiVec, Mike Hamburg (Stanford University)"
+.align 6
+___
+
+my ($inptail,$inpperm,$outhead,$outperm,$outmask,$keyperm) = map("v$_",(26..31));
+{
+my ($inp,$out,$key) = map("r$_",(3..5));
+
+my ($invlo,$invhi,$iptlo,$ipthi,$sbou,$sbot) = map("v$_",(10..15));
+my ($sb1u,$sb1t,$sb2u,$sb2t) = map("v$_",(16..19));
+my ($sb9u,$sb9t,$sbdu,$sbdt,$sbbu,$sbbt,$sbeu,$sbet)=map("v$_",(16..23));
+
+$code.=<<___;
+##
+## _aes_preheat
+##
+## Fills register %r10 -> .aes_consts (so you can -fPIC)
+## and %xmm9-%xmm15 as specified below.
+##
+.align 4
+_vpaes_encrypt_preheat:
+ mflr r8
+ bl Lconsts
+ mtlr r8
+ li r11, 0xc0 # Lk_inv
+ li r10, 0xd0
+ li r9, 0xe0 # Lk_ipt
+ li r8, 0xf0
+ vxor v7, v7, v7 # 0x00..00
+ vspltisb v8,4 # 0x04..04
+ vspltisb v9,0x0f # 0x0f..0f
+ lvx $invlo, r12, r11
+ li r11, 0x100
+ lvx $invhi, r12, r10
+ li r10, 0x110
+ lvx $iptlo, r12, r9
+ li r9, 0x120
+ lvx $ipthi, r12, r8
+ li r8, 0x130
+ lvx $sbou, r12, r11
+ li r11, 0x140
+ lvx $sbot, r12, r10
+ li r10, 0x150
+ lvx $sb1u, r12, r9
+ lvx $sb1t, r12, r8
+ lvx $sb2u, r12, r11
+ lvx $sb2t, r12, r10
+ blr
+ .long 0
+ .byte 0,12,0x14,0,0,0,0,0
+
+##
+## _aes_encrypt_core
+##
+## AES-encrypt %xmm0.
+##
+## Inputs:
+## %xmm0 = input
+## %xmm9-%xmm15 as in _vpaes_preheat
+## (%rdx) = scheduled keys
+##
+## Output in %xmm0
+## Clobbers %xmm1-%xmm6, %r9, %r10, %r11, %rax
+##
+##
+.align 5
+_vpaes_encrypt_core:
+ lwz r8, 240($key) # pull rounds
+ li r9, 16
+ lvx v5, 0, $key # vmovdqu (%r9), %xmm5 # round0 key
+ li r11, 0x10
+ lvx v6, r9, $key
+ addi r9, r9, 16
+ ?vperm v5, v5, v6, $keyperm # align round key
+ addi r10, r11, 0x40
+ vsrb v1, v0, v8 # vpsrlb \$4, %xmm0, %xmm0
+ vperm v0, $iptlo, $iptlo, v0 # vpshufb %xmm1, %xmm2, %xmm1
+ vperm v1, $ipthi, $ipthi, v1 # vpshufb %xmm0, %xmm3, %xmm2
+ vxor v0, v0, v5 # vpxor %xmm5, %xmm1, %xmm0
+ vxor v0, v0, v1 # vpxor %xmm2, %xmm0, %xmm0
+ mtctr r8
+ b Lenc_entry
+
+.align 4
+Lenc_loop:
+ # middle of middle round
+ vperm v4, $sb1t, v7, v2 # vpshufb %xmm2, %xmm13, %xmm4 # 4 = sb1u
+ lvx v1, r12, r11 # vmovdqa -0x40(%r11,%r10), %xmm1 # .Lk_mc_forward[]
+ addi r11, r11, 16
+ vperm v0, $sb1u, v7, v3 # vpshufb %xmm3, %xmm12, %xmm0 # 0 = sb1t
+ vxor v4, v4, v5 # vpxor %xmm5, %xmm4, %xmm4 # 4 = sb1u + k
+ andi. r11, r11, 0x30 # and \$0x30, %r11 # ... mod 4
+ vperm v5, $sb2t, v7, v2 # vpshufb %xmm2, %xmm15, %xmm5 # 4 = sb2u
+ vxor v0, v0, v4 # vpxor %xmm4, %xmm0, %xmm0 # 0 = A
+ vperm v2, $sb2u, v7, v3 # vpshufb %xmm3, %xmm14, %xmm2 # 2 = sb2t
+ lvx v4, r12, r10 # vmovdqa (%r11,%r10), %xmm4 # .Lk_mc_backward[]
+ addi r10, r11, 0x40
+ vperm v3, v0, v7, v1 # vpshufb %xmm1, %xmm0, %xmm3 # 0 = B
+ vxor v2, v2, v5 # vpxor %xmm5, %xmm2, %xmm2 # 2 = 2A
+ vperm v0, v0, v7, v4 # vpshufb %xmm4, %xmm0, %xmm0 # 3 = D
+ vxor v3, v3, v2 # vpxor %xmm2, %xmm3, %xmm3 # 0 = 2A+B
+ vperm v4, v3, v7, v1 # vpshufb %xmm1, %xmm3, %xmm4 # 0 = 2B+C
+ vxor v0, v0, v3 # vpxor %xmm3, %xmm0, %xmm0 # 3 = 2A+B+D
+ vxor v0, v0, v4 # vpxor %xmm4, %xmm0, %xmm0 # 0 = 2A+3B+C+D
+
+Lenc_entry:
+ # top of round
+ vsrb v1, v0, v8 # vpsrlb \$4, %xmm0, %xmm0 # 1 = i
+ vperm v5, $invhi, $invhi, v0 # vpshufb %xmm1, %xmm11, %xmm5 # 2 = a/k
+ vxor v0, v0, v1 # vpxor %xmm0, %xmm1, %xmm1 # 0 = j
+ vperm v3, $invlo, $invlo, v1 # vpshufb %xmm0, %xmm10, %xmm3 # 3 = 1/i
+ vperm v4, $invlo, $invlo, v0 # vpshufb %xmm1, %xmm10, %xmm4 # 4 = 1/j
+ vand v0, v0, v9
+ vxor v3, v3, v5 # vpxor %xmm5, %xmm3, %xmm3 # 3 = iak = 1/i + a/k
+ vxor v4, v4, v5 # vpxor %xmm5, %xmm4, %xmm4 # 4 = jak = 1/j + a/k
+ vperm v2, $invlo, v7, v3 # vpshufb %xmm3, %xmm10, %xmm2 # 2 = 1/iak
+ vmr v5, v6
+ lvx v6, r9, $key # vmovdqu (%r9), %xmm5
+ vperm v3, $invlo, v7, v4 # vpshufb %xmm4, %xmm10, %xmm3 # 3 = 1/jak
+ addi r9, r9, 16
+ vxor v2, v2, v0 # vpxor %xmm1, %xmm2, %xmm2 # 2 = io
+ ?vperm v5, v5, v6, $keyperm # align round key
+ vxor v3, v3, v1 # vpxor %xmm0, %xmm3, %xmm3 # 3 = jo
+ bdnz Lenc_loop
+
+ # middle of last round
+ addi r10, r11, 0x80
+ # vmovdqa -0x60(%r10), %xmm4 # 3 : sbou .Lk_sbo
+ # vmovdqa -0x50(%r10), %xmm0 # 0 : sbot .Lk_sbo+16
+ vperm v4, $sbou, v7, v2 # vpshufb %xmm2, %xmm4, %xmm4 # 4 = sbou
+ lvx v1, r12, r10 # vmovdqa 0x40(%r11,%r10), %xmm1 # .Lk_sr[]
+ vperm v0, $sbot, v7, v3 # vpshufb %xmm3, %xmm0, %xmm0 # 0 = sb1t
+ vxor v4, v4, v5 # vpxor %xmm5, %xmm4, %xmm4 # 4 = sb1u + k
+ vxor v0, v0, v4 # vpxor %xmm4, %xmm0, %xmm0 # 0 = A
+ vperm v0, v0, v7, v1 # vpshufb %xmm1, %xmm0, %xmm0
+ blr
+ .long 0
+ .byte 0,12,0x14,0,0,0,0,0
+
+.globl .vpaes_encrypt
+.align 5
+.vpaes_encrypt:
+ $STU $sp,-$FRAME($sp)
+ li r10,`15+6*$SIZE_T`
+ li r11,`31+6*$SIZE_T`
+ mflr r6
+ mfspr r7, 256 # save vrsave
+ stvx v20,r10,$sp
+ addi r10,r10,32
+ stvx v21,r11,$sp
+ addi r11,r11,32
+ stvx v22,r10,$sp
+ addi r10,r10,32
+ stvx v23,r11,$sp
+ addi r11,r11,32
+ stvx v24,r10,$sp
+ addi r10,r10,32
+ stvx v25,r11,$sp
+ addi r11,r11,32
+ stvx v26,r10,$sp
+ addi r10,r10,32
+ stvx v27,r11,$sp
+ addi r11,r11,32
+ stvx v28,r10,$sp
+ addi r10,r10,32
+ stvx v29,r11,$sp
+ addi r11,r11,32
+ stvx v30,r10,$sp
+ stvx v31,r11,$sp
+ stw r7,`$FRAME-4`($sp) # save vrsave
+ li r0, -1
+ $PUSH r6,`$FRAME+$LRSAVE`($sp)
+ mtspr 256, r0 # preserve all AltiVec registers
+
+ bl _vpaes_encrypt_preheat
+
+ ?lvsl $inpperm, 0, $inp # prepare for unaligned access
+ lvx v0, 0, $inp
+ addi $inp, $inp, 15 # 15 is not a typo
+ ?lvsr $outperm, 0, $out
+ ?lvsl $keyperm, 0, $key # prepare for unaligned access
+ vnor $outmask, v7, v7 # 0xff..ff
+ lvx $inptail, 0, $inp # redundant in aligned case
+ ?vperm $outmask, v7, $outmask, $outperm
+ lvx $outhead, 0, $out
+ ?vperm v0, v0, $inptail, $inpperm
+
+ bl _vpaes_encrypt_core
+
+ vperm v0, v0, v0, $outperm # rotate right/left
+ vsel v1, $outhead, v0, $outmask
+ vmr $outhead, v0
+ stvx v1, 0, $out
+ addi $out, $out, 15 # 15 is not a typo
+ ########
+
+ lvx v1, 0, $out # redundant in aligned case
+ vsel v1, $outhead, v1, $outmask
+ stvx v1, 0, $out
+
+ li r10,`15+6*$SIZE_T`
+ li r11,`31+6*$SIZE_T`
+ mtlr r6
+ mtspr 256, r7 # restore vrsave
+ lvx v20,r10,$sp
+ addi r10,r10,32
+ lvx v21,r11,$sp
+ addi r11,r11,32
+ lvx v22,r10,$sp
+ addi r10,r10,32
+ lvx v23,r11,$sp
+ addi r11,r11,32
+ lvx v24,r10,$sp
+ addi r10,r10,32
+ lvx v25,r11,$sp
+ addi r11,r11,32
+ lvx v26,r10,$sp
+ addi r10,r10,32
+ lvx v27,r11,$sp
+ addi r11,r11,32
+ lvx v28,r10,$sp
+ addi r10,r10,32
+ lvx v29,r11,$sp
+ addi r11,r11,32
+ lvx v30,r10,$sp
+ lvx v31,r11,$sp
+ addi $sp,$sp,$FRAME
+ blr
+ .long 0
+ .byte 0,12,0x04,1,0x80,0,3,0
+ .long 0
+.size .vpaes_encrypt,.-.vpaes_encrypt
+
+.align 4
+_vpaes_decrypt_preheat:
+ mflr r8
+ bl Lconsts
+ mtlr r8
+ li r11, 0xc0 # Lk_inv
+ li r10, 0xd0
+ li r9, 0x160 # Ldipt
+ li r8, 0x170
+ vxor v7, v7, v7 # 0x00..00
+ vspltisb v8,4 # 0x04..04
+ vspltisb v9,0x0f # 0x0f..0f
+ lvx $invlo, r12, r11
+ li r11, 0x180
+ lvx $invhi, r12, r10
+ li r10, 0x190
+ lvx $iptlo, r12, r9
+ li r9, 0x1a0
+ lvx $ipthi, r12, r8
+ li r8, 0x1b0
+ lvx $sbou, r12, r11
+ li r11, 0x1c0
+ lvx $sbot, r12, r10
+ li r10, 0x1d0
+ lvx $sb9u, r12, r9
+ li r9, 0x1e0
+ lvx $sb9t, r12, r8
+ li r8, 0x1f0
+ lvx $sbdu, r12, r11
+ li r11, 0x200
+ lvx $sbdt, r12, r10
+ li r10, 0x210
+ lvx $sbbu, r12, r9
+ lvx $sbbt, r12, r8
+ lvx $sbeu, r12, r11
+ lvx $sbet, r12, r10
+ blr
+ .long 0
+ .byte 0,12,0x14,0,0,0,0,0
+
+##
+## Decryption core
+##
+## Same API as encryption core.
+##
+.align 4
+_vpaes_decrypt_core:
+ lwz r8, 240($key) # pull rounds
+ li r9, 16
+ lvx v5, 0, $key # vmovdqu (%r9), %xmm4 # round0 key
+ li r11, 0x30
+ lvx v6, r9, $key
+ addi r9, r9, 16
+ ?vperm v5, v5, v6, $keyperm # align round key
+ vsrb v1, v0, v8 # vpsrlb \$4, %xmm0, %xmm0
+ vperm v0, $iptlo, $iptlo, v0 # vpshufb %xmm1, %xmm2, %xmm2
+ vperm v1, $ipthi, $ipthi, v1 # vpshufb %xmm0, %xmm1, %xmm0
+ vxor v0, v0, v5 # vpxor %xmm4, %xmm2, %xmm2
+ vxor v0, v0, v1 # vpxor %xmm2, %xmm0, %xmm0
+ mtctr r8
+ b Ldec_entry
+
+.align 4
+Ldec_loop:
+#
+# Inverse mix columns
+#
+ lvx v0, r12, r11 # v5 and v0 are flipped
+ # vmovdqa -0x20(%r10),%xmm4 # 4 : sb9u
+ # vmovdqa -0x10(%r10),%xmm1 # 0 : sb9t
+ vperm v4, $sb9u, v7, v2 # vpshufb %xmm2, %xmm4, %xmm4 # 4 = sb9u
+ subi r11, r11, 16
+ vperm v1, $sb9t, v7, v3 # vpshufb %xmm3, %xmm1, %xmm1 # 0 = sb9t
+ andi. r11, r11, 0x30
+ vxor v5, v5, v4 # vpxor %xmm4, %xmm0, %xmm0
+ # vmovdqa 0x00(%r10),%xmm4 # 4 : sbdu
+ vxor v5, v5, v1 # vpxor %xmm1, %xmm0, %xmm0 # 0 = ch
+ # vmovdqa 0x10(%r10),%xmm1 # 0 : sbdt
+
+ vperm v4, $sbdu, v7, v2 # vpshufb %xmm2, %xmm4, %xmm4 # 4 = sbdu
+ vperm v5, v5, v7, v0 # vpshufb %xmm5, %xmm0, %xmm0 # MC ch
+ vperm v1, $sbdt, v7, v3 # vpshufb %xmm3, %xmm1, %xmm1 # 0 = sbdt
+ vxor v5, v5, v4 # vpxor %xmm4, %xmm0, %xmm0 # 4 = ch
+ # vmovdqa 0x20(%r10), %xmm4 # 4 : sbbu
+ vxor v5, v5, v1 # vpxor %xmm1, %xmm0, %xmm0 # 0 = ch
+ # vmovdqa 0x30(%r10), %xmm1 # 0 : sbbt
+
+ vperm v4, $sbbu, v7, v2 # vpshufb %xmm2, %xmm4, %xmm4 # 4 = sbbu
+ vperm v5, v5, v7, v0 # vpshufb %xmm5, %xmm0, %xmm0 # MC ch
+ vperm v1, $sbbt, v7, v3 # vpshufb %xmm3, %xmm1, %xmm1 # 0 = sbbt
+ vxor v5, v5, v4 # vpxor %xmm4, %xmm0, %xmm0 # 4 = ch
+ # vmovdqa 0x40(%r10), %xmm4 # 4 : sbeu
+ vxor v5, v5, v1 # vpxor %xmm1, %xmm0, %xmm0 # 0 = ch
+ # vmovdqa 0x50(%r10), %xmm1 # 0 : sbet
+
+ vperm v4, $sbeu, v7, v2 # vpshufb %xmm2, %xmm4, %xmm4 # 4 = sbeu
+ vperm v5, v5, v7, v0 # vpshufb %xmm5, %xmm0, %xmm0 # MC ch
+ vperm v1, $sbet, v7, v3 # vpshufb %xmm3, %xmm1, %xmm1 # 0 = sbet
+ vxor v0, v5, v4 # vpxor %xmm4, %xmm0, %xmm0 # 4 = ch
+ vxor v0, v0, v1 # vpxor %xmm1, %xmm0, %xmm0 # 0 = ch
+
+Ldec_entry:
+ # top of round
+ vsrb v1, v0, v8 # vpsrlb \$4, %xmm0, %xmm0 # 1 = i
+ vperm v2, $invhi, $invhi, v0 # vpshufb %xmm1, %xmm11, %xmm2 # 2 = a/k
+ vxor v0, v0, v1 # vpxor %xmm0, %xmm1, %xmm1 # 0 = j
+ vperm v3, $invlo, $invlo, v1 # vpshufb %xmm0, %xmm10, %xmm3 # 3 = 1/i
+ vperm v4, $invlo, $invlo, v0 # vpshufb %xmm1, %xmm10, %xmm4 # 4 = 1/j
+ vand v0, v0, v9
+ vxor v3, v3, v2 # vpxor %xmm2, %xmm3, %xmm3 # 3 = iak = 1/i + a/k
+ vxor v4, v4, v2 # vpxor %xmm2, %xmm4, %xmm4 # 4 = jak = 1/j + a/k
+ vperm v2, $invlo, v7, v3 # vpshufb %xmm3, %xmm10, %xmm2 # 2 = 1/iak
+ vmr v5, v6
+ lvx v6, r9, $key # vmovdqu (%r9), %xmm0
+ vperm v3, $invlo, v7, v4 # vpshufb %xmm4, %xmm10, %xmm3 # 3 = 1/jak
+ addi r9, r9, 16
+ vxor v2, v2, v0 # vpxor %xmm1, %xmm2, %xmm2 # 2 = io
+ ?vperm v5, v5, v6, $keyperm # align round key
+ vxor v3, v3, v1 # vpxor %xmm0, %xmm3, %xmm3 # 3 = jo
+ bdnz Ldec_loop
+
+ # middle of last round
+ addi r10, r11, 0x80
+ # vmovdqa 0x60(%r10), %xmm4 # 3 : sbou
+ vperm v4, $sbou, v7, v2 # vpshufb %xmm2, %xmm4, %xmm4 # 4 = sbou
+ # vmovdqa 0x70(%r10), %xmm1 # 0 : sbot
+ lvx v2, r12, r10 # vmovdqa -0x160(%r11), %xmm2 # .Lk_sr-.Lk_dsbd=-0x160
+ vperm v1, $sbot, v7, v3 # vpshufb %xmm3, %xmm1, %xmm1 # 0 = sb1t
+ vxor v4, v4, v5 # vpxor %xmm0, %xmm4, %xmm4 # 4 = sb1u + k
+ vxor v0, v1, v4 # vpxor %xmm4, %xmm1, %xmm0 # 0 = A
+ vperm v0, v0, v7, v2 # vpshufb %xmm2, %xmm0, %xmm0
+ blr
+ .long 0
+ .byte 0,12,0x14,0,0,0,0,0
+
+.globl .vpaes_decrypt
+.align 5
+.vpaes_decrypt:
+ $STU $sp,-$FRAME($sp)
+ li r10,`15+6*$SIZE_T`
+ li r11,`31+6*$SIZE_T`
+ mflr r6
+ mfspr r7, 256 # save vrsave
+ stvx v20,r10,$sp
+ addi r10,r10,32
+ stvx v21,r11,$sp
+ addi r11,r11,32
+ stvx v22,r10,$sp
+ addi r10,r10,32
+ stvx v23,r11,$sp
+ addi r11,r11,32
+ stvx v24,r10,$sp
+ addi r10,r10,32
+ stvx v25,r11,$sp
+ addi r11,r11,32
+ stvx v26,r10,$sp
+ addi r10,r10,32
+ stvx v27,r11,$sp
+ addi r11,r11,32
+ stvx v28,r10,$sp
+ addi r10,r10,32
+ stvx v29,r11,$sp
+ addi r11,r11,32
+ stvx v30,r10,$sp
+ stvx v31,r11,$sp
+ stw r7,`$FRAME-4`($sp) # save vrsave
+ li r0, -1
+ $PUSH r6,`$FRAME+$LRSAVE`($sp)
+ mtspr 256, r0 # preserve all AltiVec registers
+
+ bl _vpaes_decrypt_preheat
+
+ ?lvsl $inpperm, 0, $inp # prepare for unaligned access
+ lvx v0, 0, $inp
+ addi $inp, $inp, 15 # 15 is not a typo
+ ?lvsr $outperm, 0, $out
+ ?lvsl $keyperm, 0, $key
+ vnor $outmask, v7, v7 # 0xff..ff
+ lvx $inptail, 0, $inp # redundant in aligned case
+ ?vperm $outmask, v7, $outmask, $outperm
+ lvx $outhead, 0, $out
+ ?vperm v0, v0, $inptail, $inpperm
+
+ bl _vpaes_decrypt_core
+
+ vperm v0, v0, v0, $outperm # rotate right/left
+ vsel v1, $outhead, v0, $outmask
+ vmr $outhead, v0
+ stvx v1, 0, $out
+ addi $out, $out, 15 # 15 is not a typo
+ ########
+
+ lvx v1, 0, $out # redundant in aligned case
+ vsel v1, $outhead, v1, $outmask
+ stvx v1, 0, $out
+
+ li r10,`15+6*$SIZE_T`
+ li r11,`31+6*$SIZE_T`
+ mtlr r6
+ mtspr 256, r7 # restore vrsave
+ lvx v20,r10,$sp
+ addi r10,r10,32
+ lvx v21,r11,$sp
+ addi r11,r11,32
+ lvx v22,r10,$sp
+ addi r10,r10,32
+ lvx v23,r11,$sp
+ addi r11,r11,32
+ lvx v24,r10,$sp
+ addi r10,r10,32
+ lvx v25,r11,$sp
+ addi r11,r11,32
+ lvx v26,r10,$sp
+ addi r10,r10,32
+ lvx v27,r11,$sp
+ addi r11,r11,32
+ lvx v28,r10,$sp
+ addi r10,r10,32
+ lvx v29,r11,$sp
+ addi r11,r11,32
+ lvx v30,r10,$sp
+ lvx v31,r11,$sp
+ addi $sp,$sp,$FRAME
+ blr
+ .long 0
+ .byte 0,12,0x04,1,0x80,0,3,0
+ .long 0
+.size .vpaes_decrypt,.-.vpaes_decrypt
+
+.globl .vpaes_cbc_encrypt
+.align 5
+.vpaes_cbc_encrypt:
+ ${UCMP}i r5,16
+ bltlr-
+
+ $STU $sp,-`($FRAME+2*$SIZE_T)`($sp)
+ mflr r0
+ li r10,`15+6*$SIZE_T`
+ li r11,`31+6*$SIZE_T`
+ mfspr r12, 256
+ stvx v20,r10,$sp
+ addi r10,r10,32
+ stvx v21,r11,$sp
+ addi r11,r11,32
+ stvx v22,r10,$sp
+ addi r10,r10,32
+ stvx v23,r11,$sp
+ addi r11,r11,32
+ stvx v24,r10,$sp
+ addi r10,r10,32
+ stvx v25,r11,$sp
+ addi r11,r11,32
+ stvx v26,r10,$sp
+ addi r10,r10,32
+ stvx v27,r11,$sp
+ addi r11,r11,32
+ stvx v28,r10,$sp
+ addi r10,r10,32
+ stvx v29,r11,$sp
+ addi r11,r11,32
+ stvx v30,r10,$sp
+ stvx v31,r11,$sp
+ stw r12,`$FRAME-4`($sp) # save vrsave
+ $PUSH r30,`$FRAME+$SIZE_T*0`($sp)
+ $PUSH r31,`$FRAME+$SIZE_T*1`($sp)
+ li r9, -16
+ $PUSH r0, `$FRAME+$SIZE_T*2+$LRSAVE`($sp)
+
+ and r30, r5, r9 # copy length&-16
+ mr r5, r6 # copy pointer to key
+ mr r31, r7 # copy pointer to iv
+ blt Lcbc_abort
+ cmpwi r8, 0 # test direction
+ li r6, -1
+ mr r7, r12 # copy vrsave
+ mtspr 256, r6 # preserve all AltiVec registers
+
+ lvx v24, 0, r31 # load [potentially unaligned] iv
+ li r9, 15
+ ?lvsl $inpperm, 0, r31
+ lvx v25, r9, r31
+ ?vperm v24, v24, v25, $inpperm
+
+ neg r8, $inp # prepare for unaligned access
+ vxor v7, v7, v7
+ ?lvsl $keyperm, 0, $key
+ ?lvsr $outperm, 0, $out
+ ?lvsr $inpperm, 0, r8 # -$inp
+ vnor $outmask, v7, v7 # 0xff..ff
+ lvx $inptail, 0, $inp
+ ?vperm $outmask, v7, $outmask, $outperm
+ addi $inp, $inp, 15 # 15 is not a typo
+ lvx $outhead, 0, $out
+
+ beq Lcbc_decrypt
+
+ bl _vpaes_encrypt_preheat
+ li r0, 16
+
+Lcbc_enc_loop:
+ vmr v0, $inptail
+ lvx $inptail, 0, $inp
+ addi $inp, $inp, 16
+ ?vperm v0, v0, $inptail, $inpperm
+ vxor v0, v0, v24 # ^= iv
+
+ bl _vpaes_encrypt_core
+
+ vmr v24, v0 # put aside iv
+ sub. r30, r30, r0 # len -= 16
+ vperm v0, v0, v0, $outperm # rotate right/left
+ vsel v1, $outhead, v0, $outmask
+ vmr $outhead, v0
+ stvx v1, 0, $out
+ addi $out, $out, 16
+ bne Lcbc_enc_loop
+
+ b Lcbc_done
+
+.align 5
+Lcbc_decrypt:
+ bl _vpaes_decrypt_preheat
+ li r0, 16
+
+Lcbc_dec_loop:
+ vmr v0, $inptail
+ lvx $inptail, 0, $inp
+ addi $inp, $inp, 16
+ ?vperm v0, v0, $inptail, $inpperm
+ vmr v25, v0 # put aside input
+
+ bl _vpaes_decrypt_core
+
+ vxor v0, v0, v24 # ^= iv
+ vmr v24, v25
+ sub. r30, r30, r0 # len -= 16
+ vperm v0, v0, v0, $outperm # rotate right/left
+ vsel v1, $outhead, v0, $outmask
+ vmr $outhead, v0
+ stvx v1, 0, $out
+ addi $out, $out, 16
+ bne Lcbc_dec_loop
+
+Lcbc_done:
+ addi $out, $out, -1
+ lvx v1, 0, $out # redundant in aligned case
+ vsel v1, $outhead, v1, $outmask
+ stvx v1, 0, $out
+
+ neg r8, r31 # write [potentially unaligned] iv
+ ?lvsl $outperm, 0, r8
+ li r6, 15
+ vnor $outmask, v7, v7 # 0xff..ff
+ ?vperm $outmask, v7, $outmask, $outperm
+ lvx $outhead, 0, r31
+ vperm v24, v24, v24, $outperm # rotate right/left
+ vsel v0, $outhead, v24, $outmask
+ lvx v1, r6, r31
+ stvx v0, 0, r31
+ vsel v1, v24, v1, $outmask
+ stvx v1, r6, r31
+
+ mtspr 256, r7 # restore vrsave
+ li r10,`15+6*$SIZE_T`
+ li r11,`31+6*$SIZE_T`
+ lvx v20,r10,$sp
+ addi r10,r10,32
+ lvx v21,r11,$sp
+ addi r11,r11,32
+ lvx v22,r10,$sp
+ addi r10,r10,32
+ lvx v23,r11,$sp
+ addi r11,r11,32
+ lvx v24,r10,$sp
+ addi r10,r10,32
+ lvx v25,r11,$sp
+ addi r11,r11,32
+ lvx v26,r10,$sp
+ addi r10,r10,32
+ lvx v27,r11,$sp
+ addi r11,r11,32
+ lvx v28,r10,$sp
+ addi r10,r10,32
+ lvx v29,r11,$sp
+ addi r11,r11,32
+ lvx v30,r10,$sp
+ lvx v31,r11,$sp
+Lcbc_abort:
+ $POP r0, `$FRAME+$SIZE_T*2+$LRSAVE`($sp)
+ $POP r30,`$FRAME+$SIZE_T*0`($sp)
+ $POP r31,`$FRAME+$SIZE_T*1`($sp)
+ mtlr r0
+ addi $sp,$sp,`$FRAME+$SIZE_T*2`
+ blr
+ .long 0
+ .byte 0,12,0x04,1,0x80,2,6,0
+ .long 0
+.size .vpaes_cbc_encrypt,.-.vpaes_cbc_encrypt
+___
+}
+{
+my ($inp,$bits,$out)=map("r$_",(3..5));
+my $dir="cr1";
+my ($invlo,$invhi,$iptlo,$ipthi,$rcon) = map("v$_",(10..13,24));
+
+$code.=<<___;
+########################################################
+## ##
+## AES key schedule ##
+## ##
+########################################################
+.align 4
+_vpaes_key_preheat:
+ mflr r8
+ bl Lconsts
+ mtlr r8
+ li r11, 0xc0 # Lk_inv
+ li r10, 0xd0
+ li r9, 0xe0 # L_ipt
+ li r8, 0xf0
+
+ vspltisb v8,4 # 0x04..04
+ vxor v9,v9,v9 # 0x00..00
+ lvx $invlo, r12, r11 # Lk_inv
+ li r11, 0x120
+ lvx $invhi, r12, r10
+ li r10, 0x130
+ lvx $iptlo, r12, r9 # Lk_ipt
+ li r9, 0x220
+ lvx $ipthi, r12, r8
+ li r8, 0x230
+
+ lvx v14, r12, r11 # Lk_sb1
+ li r11, 0x240
+ lvx v15, r12, r10
+ li r10, 0x250
+
+ lvx v16, r12, r9 # Lk_dksd
+ li r9, 0x260
+ lvx v17, r12, r8
+ li r8, 0x270
+ lvx v18, r12, r11 # Lk_dksb
+ li r11, 0x280
+ lvx v19, r12, r10
+ li r10, 0x290
+ lvx v20, r12, r9 # Lk_dkse
+ li r9, 0x2a0
+ lvx v21, r12, r8
+ li r8, 0x2b0
+ lvx v22, r12, r11 # Lk_dks9
+ lvx v23, r12, r10
+
+ lvx v24, r12, r9 # Lk_rcon
+ lvx v25, 0, r12 # Lk_mc_forward[0]
+ lvx v26, r12, r8 # Lks63
+ blr
+ .long 0
+ .byte 0,12,0x14,0,0,0,0,0
+
+.align 4
+_vpaes_schedule_core:
+ mflr r7
+
+ bl _vpaes_key_preheat # load the tables
+
+ #lvx v0, 0, $inp # vmovdqu (%rdi), %xmm0 # load key (unaligned)
+ neg r8, $inp # prepare for unaligned access
+ lvx v0, 0, $inp
+ addi $inp, $inp, 15 # 15 is not typo
+ ?lvsr $inpperm, 0, r8 # -$inp
+ lvx v6, 0, $inp # v6 serves as inptail
+ addi $inp, $inp, 8
+ ?vperm v0, v0, v6, $inpperm
+
+ # input transform
+ vmr v3, v0 # vmovdqa %xmm0, %xmm3
+ bl _vpaes_schedule_transform
+ vmr v7, v0 # vmovdqa %xmm0, %xmm7
+
+ bne $dir, Lschedule_am_decrypting
+
+ # encrypting, output zeroth round key after transform
+ li r8, 0x30 # mov \$0x30,%r8d
+ addi r10, r12, 0x80 # lea .Lk_sr(%rip),%r10
+
+ ?lvsr $outperm, 0, $out # prepare for unaligned access
+ vnor $outmask, v9, v9 # 0xff..ff
+ lvx $outhead, 0, $out
+ ?vperm $outmask, v9, $outmask, $outperm
+
+ #stvx v0, 0, $out # vmovdqu %xmm0, (%rdx)
+ vperm v1, v0, v0, $outperm # rotate right/left
+ vsel v2, $outhead, v1, $outmask
+ vmr $outhead, v1
+ stvx v2, 0, $out
+ b Lschedule_go
+
+Lschedule_am_decrypting:
+ srwi r8, $bits, 1 # shr \$1,%r8d
+ andi. r8, r8, 32 # and \$32,%r8d
+ xori r8, r8, 32 # xor \$32,%r8d # nbits==192?0:32
+ addi r10, r12, 0x80 # lea .Lk_sr(%rip),%r10
+ # decrypting, output zeroth round key after shiftrows
+ lvx v1, r8, r10 # vmovdqa (%r8,%r10), %xmm1
+ vperm v4, v3, v3, v1 # vpshufb %xmm1, %xmm3, %xmm3
+
+ neg r0, $out # prepare for unaligned access
+ ?lvsl $outperm, 0, r0
+ addi $out, $out, 15 # 15 is not typo
+ vnor $outmask, v9, v9 # 0xff..ff
+ lvx $outhead, 0, $out
+ ?vperm $outmask, $outmask, v9, $outperm
+
+ #stvx v4, 0, $out # vmovdqu %xmm3, (%rdx)
+ vperm v4, v4, v4, $outperm # rotate right/left
+ vsel v2, $outhead, v4, $outmask
+ vmr $outhead, v4
+ stvx v2, 0, $out
+ xori r8, r8, 0x30 # xor \$0x30, %r8
+
+Lschedule_go:
+ cmplwi $bits, 192 # cmp \$192, %esi
+ bgt Lschedule_256
+ beq Lschedule_192
+ # 128: fall though
+
+##
+## .schedule_128
+##
+## 128-bit specific part of key schedule.
+##
+## This schedule is really simple, because all its parts
+## are accomplished by the subroutines.
+##
+Lschedule_128:
+ li r0, 10 # mov \$10, %esi
+ mtctr r0
+
+Loop_schedule_128:
+ bl _vpaes_schedule_round
+ bdz Lschedule_mangle_last # dec %esi
+ bl _vpaes_schedule_mangle # write output
+ b Loop_schedule_128
+
+##
+## .aes_schedule_192
+##
+## 192-bit specific part of key schedule.
+##
+## The main body of this schedule is the same as the 128-bit
+## schedule, but with more smearing. The long, high side is
+## stored in %xmm7 as before, and the short, low side is in
+## the high bits of %xmm6.
+##
+## This schedule is somewhat nastier, however, because each
+## round produces 192 bits of key material, or 1.5 round keys.
+## Therefore, on each cycle we do 2 rounds and produce 3 round
+## keys.
+##
+.align 4
+Lschedule_192:
+ li r0, 4 # mov \$4, %esi
+ lvx v0, 0, $inp
+ ?vperm v0, v6, v0, $inpperm
+ ?vsldoi v0, v3, v0, 8 # vmovdqu 8(%rdi),%xmm0 # load key part 2 (very unaligned)
+ bl _vpaes_schedule_transform # input transform
+ ?vsldoi v6, v0, v9, 8
+ ?vsldoi v6, v9, v6, 8 # clobber "low" side with zeros
+ mtctr r0
+
+Loop_schedule_192:
+ bl _vpaes_schedule_round
+ ?vsldoi v0, v6, v0, 8 # vpalignr \$8,%xmm6,%xmm0,%xmm0
+ bl _vpaes_schedule_mangle # save key n
+ bl _vpaes_schedule_192_smear
+ bl _vpaes_schedule_mangle # save key n+1
+ bl _vpaes_schedule_round
+ bdz Lschedule_mangle_last # dec %esi
+ bl _vpaes_schedule_mangle # save key n+2
+ bl _vpaes_schedule_192_smear
+ b Loop_schedule_192
+
+##
+## .aes_schedule_256
+##
+## 256-bit specific part of key schedule.
+##
+## The structure here is very similar to the 128-bit
+## schedule, but with an additional "low side" in
+## %xmm6. The low side's rounds are the same as the
+## high side's, except no rcon and no rotation.
+##
+.align 4
+Lschedule_256:
+ li r0, 7 # mov \$7, %esi
+ addi $inp, $inp, 8
+ lvx v0, 0, $inp # vmovdqu 16(%rdi),%xmm0 # load key part 2 (unaligned)
+ ?vperm v0, v6, v0, $inpperm
+ bl _vpaes_schedule_transform # input transform
+ mtctr r0
+
+Loop_schedule_256:
+ bl _vpaes_schedule_mangle # output low result
+ vmr v6, v0 # vmovdqa %xmm0, %xmm6 # save cur_lo in xmm6
+
+ # high round
+ bl _vpaes_schedule_round
+ bdz Lschedule_mangle_last # dec %esi
+ bl _vpaes_schedule_mangle
+
+ # low round. swap xmm7 and xmm6
+ ?vspltw v0, v0, 3 # vpshufd \$0xFF, %xmm0, %xmm0
+ vmr v5, v7 # vmovdqa %xmm7, %xmm5
+ vmr v7, v6 # vmovdqa %xmm6, %xmm7
+ bl _vpaes_schedule_low_round
+ vmr v7, v5 # vmovdqa %xmm5, %xmm7
+
+ b Loop_schedule_256
+##
+## .aes_schedule_mangle_last
+##
+## Mangler for last round of key schedule
+## Mangles %xmm0
+## when encrypting, outputs out(%xmm0) ^ 63
+## when decrypting, outputs unskew(%xmm0)
+##
+## Always called right before return... jumps to cleanup and exits
+##
+.align 4
+Lschedule_mangle_last:
+ # schedule last round key from xmm0
+ li r11, 0x2e0 # lea .Lk_deskew(%rip),%r11
+ li r9, 0x2f0
+ bne $dir, Lschedule_mangle_last_dec
+
+ # encrypting
+ lvx v1, r8, r10 # vmovdqa (%r8,%r10),%xmm1
+ li r11, 0x2c0 # lea .Lk_opt(%rip), %r11 # prepare to output transform
+ li r9, 0x2d0 # prepare to output transform
+ vperm v0, v0, v0, v1 # vpshufb %xmm1, %xmm0, %xmm0 # output permute
+
+ lvx $iptlo, r11, r12 # reload $ipt
+ lvx $ipthi, r9, r12
+ addi $out, $out, 16 # add \$16, %rdx
+ vxor v0, v0, v26 # vpxor .Lk_s63(%rip), %xmm0, %xmm0
+ bl _vpaes_schedule_transform # output transform
+
+ #stvx v0, r0, $out # vmovdqu %xmm0, (%rdx) # save last key
+ vperm v0, v0, v0, $outperm # rotate right/left
+ vsel v2, $outhead, v0, $outmask
+ vmr $outhead, v0
+ stvx v2, 0, $out
+
+ addi $out, $out, 15 # 15 is not typo
+ lvx v1, 0, $out # redundant in aligned case
+ vsel v1, $outhead, v1, $outmask
+ stvx v1, 0, $out
+ b Lschedule_mangle_done
+
+.align 4
+Lschedule_mangle_last_dec:
+ lvx $iptlo, r11, r12 # reload $ipt
+ lvx $ipthi, r9, r12
+ addi $out, $out, -16 # add \$-16, %rdx
+ vxor v0, v0, v26 # vpxor .Lk_s63(%rip), %xmm0, %xmm0
+ bl _vpaes_schedule_transform # output transform
+
+ #stvx v0, r0, $out # vmovdqu %xmm0, (%rdx) # save last key
+ vperm v0, v0, v0, $outperm # rotate right/left
+ vsel v2, $outhead, v0, $outmask
+ vmr $outhead, v0
+ stvx v2, 0, $out
+
+ addi $out, $out, -15 # -15 is not typo
+ lvx v1, 0, $out # redundant in aligned case
+ vsel v1, $outhead, v1, $outmask
+ stvx v1, 0, $out
+
+Lschedule_mangle_done:
+ mtlr r7
+ # cleanup
+ vxor v0, v0, v0 # vpxor %xmm0, %xmm0, %xmm0
+ vxor v1, v1, v1 # vpxor %xmm1, %xmm1, %xmm1
+ vxor v2, v2, v2 # vpxor %xmm2, %xmm2, %xmm2
+ vxor v3, v3, v3 # vpxor %xmm3, %xmm3, %xmm3
+ vxor v4, v4, v4 # vpxor %xmm4, %xmm4, %xmm4
+ vxor v5, v5, v5 # vpxor %xmm5, %xmm5, %xmm5
+ vxor v6, v6, v6 # vpxor %xmm6, %xmm6, %xmm6
+ vxor v7, v7, v7 # vpxor %xmm7, %xmm7, %xmm7
+
+ blr
+ .long 0
+ .byte 0,12,0x14,0,0,0,0,0
+
+##
+## .aes_schedule_192_smear
+##
+## Smear the short, low side in the 192-bit key schedule.
+##
+## Inputs:
+## %xmm7: high side, b a x y
+## %xmm6: low side, d c 0 0
+## %xmm13: 0
+##
+## Outputs:
+## %xmm6: b+c+d b+c 0 0
+## %xmm0: b+c+d b+c b a
+##
+.align 4
+_vpaes_schedule_192_smear:
+ ?vspltw v0, v7, 3
+ ?vsldoi v1, v9, v6, 12 # vpshufd \$0x80, %xmm6, %xmm1 # d c 0 0 -> c 0 0 0
+ ?vsldoi v0, v7, v0, 8 # vpshufd \$0xFE, %xmm7, %xmm0 # b a _ _ -> b b b a
+ vxor v6, v6, v1 # vpxor %xmm1, %xmm6, %xmm6 # -> c+d c 0 0
+ vxor v6, v6, v0 # vpxor %xmm0, %xmm6, %xmm6 # -> b+c+d b+c b a
+ vmr v0, v6
+ ?vsldoi v6, v6, v9, 8
+ ?vsldoi v6, v9, v6, 8 # clobber low side with zeros
+ blr
+ .long 0
+ .byte 0,12,0x14,0,0,0,0,0
+
+##
+## .aes_schedule_round
+##
+## Runs one main round of the key schedule on %xmm0, %xmm7
+##
+## Specifically, runs subbytes on the high dword of %xmm0
+## then rotates it by one byte and xors into the low dword of
+## %xmm7.
+##
+## Adds rcon from low byte of %xmm8, then rotates %xmm8 for
+## next rcon.
+##
+## Smears the dwords of %xmm7 by xoring the low into the
+## second low, result into third, result into highest.
+##
+## Returns results in %xmm7 = %xmm0.
+## Clobbers %xmm1-%xmm4, %r11.
+##
+.align 4
+_vpaes_schedule_round:
+ # extract rcon from xmm8
+ #vxor v4, v4, v4 # vpxor %xmm4, %xmm4, %xmm4
+ ?vsldoi v1, $rcon, v9, 15 # vpalignr \$15, %xmm8, %xmm4, %xmm1
+ ?vsldoi $rcon, $rcon, $rcon, 15 # vpalignr \$15, %xmm8, %xmm8, %xmm8
+ vxor v7, v7, v1 # vpxor %xmm1, %xmm7, %xmm7
+
+ # rotate
+ ?vspltw v0, v0, 3 # vpshufd \$0xFF, %xmm0, %xmm0
+ ?vsldoi v0, v0, v0, 1 # vpalignr \$1, %xmm0, %xmm0, %xmm0
+
+ # fall through...
+
+ # low round: same as high round, but no rotation and no rcon.
+_vpaes_schedule_low_round:
+ # smear xmm7
+ ?vsldoi v1, v9, v7, 12 # vpslldq \$4, %xmm7, %xmm1
+ vxor v7, v7, v1 # vpxor %xmm1, %xmm7, %xmm7
+ vspltisb v1, 0x0f # 0x0f..0f
+ ?vsldoi v4, v9, v7, 8 # vpslldq \$8, %xmm7, %xmm4
+
+ # subbytes
+ vand v1, v1, v0 # vpand %xmm9, %xmm0, %xmm1 # 0 = k
+ vsrb v0, v0, v8 # vpsrlb \$4, %xmm0, %xmm0 # 1 = i
+ vxor v7, v7, v4 # vpxor %xmm4, %xmm7, %xmm7
+ vperm v2, $invhi, v9, v1 # vpshufb %xmm1, %xmm11, %xmm2 # 2 = a/k
+ vxor v1, v1, v0 # vpxor %xmm0, %xmm1, %xmm1 # 0 = j
+ vperm v3, $invlo, v9, v0 # vpshufb %xmm0, %xmm10, %xmm3 # 3 = 1/i
+ vxor v3, v3, v2 # vpxor %xmm2, %xmm3, %xmm3 # 3 = iak = 1/i + a/k
+ vperm v4, $invlo, v9, v1 # vpshufb %xmm1, %xmm10, %xmm4 # 4 = 1/j
+ vxor v7, v7, v26 # vpxor .Lk_s63(%rip), %xmm7, %xmm7
+ vperm v3, $invlo, v9, v3 # vpshufb %xmm3, %xmm10, %xmm3 # 2 = 1/iak
+ vxor v4, v4, v2 # vpxor %xmm2, %xmm4, %xmm4 # 4 = jak = 1/j + a/k
+ vperm v2, $invlo, v9, v4 # vpshufb %xmm4, %xmm10, %xmm2 # 3 = 1/jak
+ vxor v3, v3, v1 # vpxor %xmm1, %xmm3, %xmm3 # 2 = io
+ vxor v2, v2, v0 # vpxor %xmm0, %xmm2, %xmm2 # 3 = jo
+ vperm v4, v15, v9, v3 # vpshufb %xmm3, %xmm13, %xmm4 # 4 = sbou
+ vperm v1, v14, v9, v2 # vpshufb %xmm2, %xmm12, %xmm1 # 0 = sb1t
+ vxor v1, v1, v4 # vpxor %xmm4, %xmm1, %xmm1 # 0 = sbox output
+
+ # add in smeared stuff
+ vxor v0, v1, v7 # vpxor %xmm7, %xmm1, %xmm0
+ vxor v7, v1, v7 # vmovdqa %xmm0, %xmm7
+ blr
+ .long 0
+ .byte 0,12,0x14,0,0,0,0,0
+
+##
+## .aes_schedule_transform
+##
+## Linear-transform %xmm0 according to tables at (%r11)
+##
+## Requires that %xmm9 = 0x0F0F... as in preheat
+## Output in %xmm0
+## Clobbers %xmm2
+##
+.align 4
+_vpaes_schedule_transform:
+ #vand v1, v0, v9 # vpand %xmm9, %xmm0, %xmm1
+ vsrb v2, v0, v8 # vpsrlb \$4, %xmm0, %xmm0
+ # vmovdqa (%r11), %xmm2 # lo
+ vperm v0, $iptlo, $iptlo, v0 # vpshufb %xmm1, %xmm2, %xmm2
+ # vmovdqa 16(%r11), %xmm1 # hi
+ vperm v2, $ipthi, $ipthi, v2 # vpshufb %xmm0, %xmm1, %xmm0
+ vxor v0, v0, v2 # vpxor %xmm2, %xmm0, %xmm0
+ blr
+ .long 0
+ .byte 0,12,0x14,0,0,0,0,0
+
+##
+## .aes_schedule_mangle
+##
+## Mangle xmm0 from (basis-transformed) standard version
+## to our version.
+##
+## On encrypt,
+## xor with 0x63
+## multiply by circulant 0,1,1,1
+## apply shiftrows transform
+##
+## On decrypt,
+## xor with 0x63
+## multiply by "inverse mixcolumns" circulant E,B,D,9
+## deskew
+## apply shiftrows transform
+##
+##
+## Writes out to (%rdx), and increments or decrements it
+## Keeps track of round number mod 4 in %r8
+## Preserves xmm0
+## Clobbers xmm1-xmm5
+##
+.align 4
+_vpaes_schedule_mangle:
+ #vmr v4, v0 # vmovdqa %xmm0, %xmm4 # save xmm0 for later
+ # vmovdqa .Lk_mc_forward(%rip),%xmm5
+ bne $dir, Lschedule_mangle_dec
+
+ # encrypting
+ vxor v4, v0, v26 # vpxor .Lk_s63(%rip), %xmm0, %xmm4
+ addi $out, $out, 16 # add \$16, %rdx
+ vperm v4, v4, v4, v25 # vpshufb %xmm5, %xmm4, %xmm4
+ vperm v1, v4, v4, v25 # vpshufb %xmm5, %xmm4, %xmm1
+ vperm v3, v1, v1, v25 # vpshufb %xmm5, %xmm1, %xmm3
+ vxor v4, v4, v1 # vpxor %xmm1, %xmm4, %xmm4
+ lvx v1, r8, r10 # vmovdqa (%r8,%r10), %xmm1
+ vxor v3, v3, v4 # vpxor %xmm4, %xmm3, %xmm3
+
+ vperm v3, v3, v3, v1 # vpshufb %xmm1, %xmm3, %xmm3
+ addi r8, r8, -16 # add \$-16, %r8
+ andi. r8, r8, 0x30 # and \$0x30, %r8
+
+ #stvx v3, 0, $out # vmovdqu %xmm3, (%rdx)
+ vperm v1, v3, v3, $outperm # rotate right/left
+ vsel v2, $outhead, v1, $outmask
+ vmr $outhead, v1
+ stvx v2, 0, $out
+ blr
+
+.align 4
+Lschedule_mangle_dec:
+ # inverse mix columns
+ # lea .Lk_dksd(%rip),%r11
+ vsrb v1, v0, v8 # vpsrlb \$4, %xmm4, %xmm1 # 1 = hi
+ #and v4, v0, v9 # vpand %xmm9, %xmm4, %xmm4 # 4 = lo
+
+ # vmovdqa 0x00(%r11), %xmm2
+ vperm v2, v16, v16, v0 # vpshufb %xmm4, %xmm2, %xmm2
+ # vmovdqa 0x10(%r11), %xmm3
+ vperm v3, v17, v17, v1 # vpshufb %xmm1, %xmm3, %xmm3
+ vxor v3, v3, v2 # vpxor %xmm2, %xmm3, %xmm3
+ vperm v3, v3, v9, v25 # vpshufb %xmm5, %xmm3, %xmm3
+
+ # vmovdqa 0x20(%r11), %xmm2
+ vperm v2, v18, v18, v0 # vpshufb %xmm4, %xmm2, %xmm2
+ vxor v2, v2, v3 # vpxor %xmm3, %xmm2, %xmm2
+ # vmovdqa 0x30(%r11), %xmm3
+ vperm v3, v19, v19, v1 # vpshufb %xmm1, %xmm3, %xmm3
+ vxor v3, v3, v2 # vpxor %xmm2, %xmm3, %xmm3
+ vperm v3, v3, v9, v25 # vpshufb %xmm5, %xmm3, %xmm3
+
+ # vmovdqa 0x40(%r11), %xmm2
+ vperm v2, v20, v20, v0 # vpshufb %xmm4, %xmm2, %xmm2
+ vxor v2, v2, v3 # vpxor %xmm3, %xmm2, %xmm2
+ # vmovdqa 0x50(%r11), %xmm3
+ vperm v3, v21, v21, v1 # vpshufb %xmm1, %xmm3, %xmm3
+ vxor v3, v3, v2 # vpxor %xmm2, %xmm3, %xmm3
+
+ # vmovdqa 0x60(%r11), %xmm2
+ vperm v2, v22, v22, v0 # vpshufb %xmm4, %xmm2, %xmm2
+ vperm v3, v3, v9, v25 # vpshufb %xmm5, %xmm3, %xmm3
+ # vmovdqa 0x70(%r11), %xmm4
+ vperm v4, v23, v23, v1 # vpshufb %xmm1, %xmm4, %xmm4
+ lvx v1, r8, r10 # vmovdqa (%r8,%r10), %xmm1
+ vxor v2, v2, v3 # vpxor %xmm3, %xmm2, %xmm2
+ vxor v3, v4, v2 # vpxor %xmm2, %xmm4, %xmm3
+
+ addi $out, $out, -16 # add \$-16, %rdx
+
+ vperm v3, v3, v3, v1 # vpshufb %xmm1, %xmm3, %xmm3
+ addi r8, r8, -16 # add \$-16, %r8
+ andi. r8, r8, 0x30 # and \$0x30, %r8
+
+ #stvx v3, 0, $out # vmovdqu %xmm3, (%rdx)
+ vperm v1, v3, v3, $outperm # rotate right/left
+ vsel v2, $outhead, v1, $outmask
+ vmr $outhead, v1
+ stvx v2, 0, $out
+ blr
+ .long 0
+ .byte 0,12,0x14,0,0,0,0,0
+
+.globl .vpaes_set_encrypt_key
+.align 5
+.vpaes_set_encrypt_key:
+ $STU $sp,-$FRAME($sp)
+ li r10,`15+6*$SIZE_T`
+ li r11,`31+6*$SIZE_T`
+ mflr r0
+ mfspr r6, 256 # save vrsave
+ stvx v20,r10,$sp
+ addi r10,r10,32
+ stvx v21,r11,$sp
+ addi r11,r11,32
+ stvx v22,r10,$sp
+ addi r10,r10,32
+ stvx v23,r11,$sp
+ addi r11,r11,32
+ stvx v24,r10,$sp
+ addi r10,r10,32
+ stvx v25,r11,$sp
+ addi r11,r11,32
+ stvx v26,r10,$sp
+ addi r10,r10,32
+ stvx v27,r11,$sp
+ addi r11,r11,32
+ stvx v28,r10,$sp
+ addi r10,r10,32
+ stvx v29,r11,$sp
+ addi r11,r11,32
+ stvx v30,r10,$sp
+ stvx v31,r11,$sp
+ stw r6,`$FRAME-4`($sp) # save vrsave
+ li r7, -1
+ $PUSH r0, `$FRAME+$LRSAVE`($sp)
+ mtspr 256, r7 # preserve all AltiVec registers
+
+ srwi r9, $bits, 5 # shr \$5,%eax
+ addi r9, r9, 6 # add \$5,%eax
+ stw r9, 240($out) # mov %eax,240(%rdx) # AES_KEY->rounds = nbits/32+5;
+
+ cmplw $dir, $bits, $bits # set encrypt direction
+ li r8, 0x30 # mov \$0x30,%r8d
+ bl _vpaes_schedule_core
+
+ $POP r0, `$FRAME+$LRSAVE`($sp)
+ li r10,`15+6*$SIZE_T`
+ li r11,`31+6*$SIZE_T`
+ mtspr 256, r6 # restore vrsave
+ mtlr r0
+ xor r3, r3, r3
+ lvx v20,r10,$sp
+ addi r10,r10,32
+ lvx v21,r11,$sp
+ addi r11,r11,32
+ lvx v22,r10,$sp
+ addi r10,r10,32
+ lvx v23,r11,$sp
+ addi r11,r11,32
+ lvx v24,r10,$sp
+ addi r10,r10,32
+ lvx v25,r11,$sp
+ addi r11,r11,32
+ lvx v26,r10,$sp
+ addi r10,r10,32
+ lvx v27,r11,$sp
+ addi r11,r11,32
+ lvx v28,r10,$sp
+ addi r10,r10,32
+ lvx v29,r11,$sp
+ addi r11,r11,32
+ lvx v30,r10,$sp
+ lvx v31,r11,$sp
+ addi $sp,$sp,$FRAME
+ blr
+ .long 0
+ .byte 0,12,0x04,1,0x80,0,3,0
+ .long 0
+.size .vpaes_set_encrypt_key,.-.vpaes_set_encrypt_key
+
+.globl .vpaes_set_decrypt_key
+.align 4
+.vpaes_set_decrypt_key:
+ $STU $sp,-$FRAME($sp)
+ li r10,`15+6*$SIZE_T`
+ li r11,`31+6*$SIZE_T`
+ mflr r0
+ mfspr r6, 256 # save vrsave
+ stvx v20,r10,$sp
+ addi r10,r10,32
+ stvx v21,r11,$sp
+ addi r11,r11,32
+ stvx v22,r10,$sp
+ addi r10,r10,32
+ stvx v23,r11,$sp
+ addi r11,r11,32
+ stvx v24,r10,$sp
+ addi r10,r10,32
+ stvx v25,r11,$sp
+ addi r11,r11,32
+ stvx v26,r10,$sp
+ addi r10,r10,32
+ stvx v27,r11,$sp
+ addi r11,r11,32
+ stvx v28,r10,$sp
+ addi r10,r10,32
+ stvx v29,r11,$sp
+ addi r11,r11,32
+ stvx v30,r10,$sp
+ stvx v31,r11,$sp
+ stw r6,`$FRAME-4`($sp) # save vrsave
+ li r7, -1
+ $PUSH r0, `$FRAME+$LRSAVE`($sp)
+ mtspr 256, r7 # preserve all AltiVec registers
+
+ srwi r9, $bits, 5 # shr \$5,%eax
+ addi r9, r9, 6 # add \$5,%eax
+ stw r9, 240($out) # mov %eax,240(%rdx) # AES_KEY->rounds = nbits/32+5;
+
+ slwi r9, r9, 4 # shl \$4,%eax
+ add $out, $out, r9 # lea (%rdx,%rax),%rdx
+
+ cmplwi $dir, $bits, 0 # set decrypt direction
+ srwi r8, $bits, 1 # shr \$1,%r8d
+ andi. r8, r8, 32 # and \$32,%r8d
+ xori r8, r8, 32 # xor \$32,%r8d # nbits==192?0:32
+ bl _vpaes_schedule_core
+
+ $POP r0, `$FRAME+$LRSAVE`($sp)
+ li r10,`15+6*$SIZE_T`
+ li r11,`31+6*$SIZE_T`
+ mtspr 256, r6 # restore vrsave
+ mtlr r0
+ xor r3, r3, r3
+ lvx v20,r10,$sp
+ addi r10,r10,32
+ lvx v21,r11,$sp
+ addi r11,r11,32
+ lvx v22,r10,$sp
+ addi r10,r10,32
+ lvx v23,r11,$sp
+ addi r11,r11,32
+ lvx v24,r10,$sp
+ addi r10,r10,32
+ lvx v25,r11,$sp
+ addi r11,r11,32
+ lvx v26,r10,$sp
+ addi r10,r10,32
+ lvx v27,r11,$sp
+ addi r11,r11,32
+ lvx v28,r10,$sp
+ addi r10,r10,32
+ lvx v29,r11,$sp
+ addi r11,r11,32
+ lvx v30,r10,$sp
+ lvx v31,r11,$sp
+ addi $sp,$sp,$FRAME
+ blr
+ .long 0
+ .byte 0,12,0x04,1,0x80,0,3,0
+ .long 0
+.size .vpaes_set_decrypt_key,.-.vpaes_set_decrypt_key
+___
+}
+
+my $consts=1;
+foreach (split("\n",$code)) {
+ s/\`([^\`]*)\`/eval $1/geo;
+
+ # constants table endian-specific conversion
+ if ($consts && m/\.long\s+(.+)\s+(\?[a-z]*)$/o) {
+ my $conv=$2;
+ my @bytes=();
+
+ # convert to endian-agnostic format
+ foreach (split(/,\s+/,$1)) {
+ my $l = /^0/?oct:int;
+ push @bytes,($l>>24)&0xff,($l>>16)&0xff,($l>>8)&0xff,$l&0xff;
+ }
+
+ # little-endian conversion
+ if ($flavour =~ /le$/o) {
+ SWITCH: for($conv) {
+ /\?inv/ && do { @bytes=map($_^0xf,@bytes); last; };
+ /\?rev/ && do { @bytes=reverse(@bytes); last; };
+ }
+ }
+
+ #emit
+ print ".byte\t",join(',',map (sprintf("0x%02x",$_),@bytes)),"\n";
+ next;
+ }
+ $consts=0 if (m/Lconsts:/o); # end of table
+
+ # instructions prefixed with '?' are endian-specific and need
+ # to be adjusted accordingly...
+ if ($flavour =~ /le$/o) { # little-endian
+ s/\?lvsr/lvsl/o or
+ s/\?lvsl/lvsr/o or
+ s/\?(vperm\s+v[0-9]+,\s*)(v[0-9]+,\s*)(v[0-9]+,\s*)(v[0-9]+)/$1$3$2$4/o or
+ s/\?(vsldoi\s+v[0-9]+,\s*)(v[0-9]+,)\s*(v[0-9]+,\s*)([0-9]+)/$1$3$2 16-$4/o or
+ s/\?(vspltw\s+v[0-9]+,\s*)(v[0-9]+,)\s*([0-9])/$1$2 3-$3/o;
+ } else { # big-endian
+ s/\?([a-z]+)/$1/o;
+ }
+
+ print $_,"\n";
+}
+
+close STDOUT;
diff --git a/crypto/openssl/crypto/aes/asm/vpaes-x86.pl b/crypto/openssl/crypto/aes/asm/vpaes-x86.pl
index 1533e2c..2ba149c 100755
--- a/crypto/openssl/crypto/aes/asm/vpaes-x86.pl
+++ b/crypto/openssl/crypto/aes/asm/vpaes-x86.pl
@@ -27,9 +27,10 @@
#
# aes-586.pl vpaes-x86.pl
#
-# Core 2(**) 29.1/42.3/18.3 22.0/25.6(***)
-# Nehalem 27.9/40.4/18.1 10.3/12.0
-# Atom 102./119./60.1 64.5/85.3(***)
+# Core 2(**) 28.1/41.4/18.3 21.9/25.2(***)
+# Nehalem 27.9/40.4/18.1 10.2/11.9
+# Atom 70.7/92.1/60.1 61.1/75.4(***)
+# Silvermont 45.4/62.9/24.1 49.2/61.1(***)
#
# (*) "Hyper-threading" in the context refers rather to cache shared
# among multiple cores, than to specifically Intel HTT. As vast
@@ -40,8 +41,8 @@
# (**) "Core 2" refers to initial 65nm design, a.k.a. Conroe.
#
# (***) Less impressive improvement on Core 2 and Atom is due to slow
-# pshufb, yet it's respectable +32%/65% improvement on Core 2
-# and +58%/40% on Atom (as implied, over "hyper-threading-safe"
+# pshufb, yet it's respectable +28%/64% improvement on Core 2
+# and +15% on Atom (as implied, over "hyper-threading-safe"
# code path).
#
# <appro@openssl.org>
@@ -183,35 +184,35 @@ $k_dsbo=0x2c0; # decryption sbox final output
&movdqa ("xmm1","xmm6")
&movdqa ("xmm2",&QWP($k_ipt,$const));
&pandn ("xmm1","xmm0");
- &movdqu ("xmm5",&QWP(0,$key));
- &psrld ("xmm1",4);
&pand ("xmm0","xmm6");
+ &movdqu ("xmm5",&QWP(0,$key));
&pshufb ("xmm2","xmm0");
&movdqa ("xmm0",&QWP($k_ipt+16,$const));
- &pshufb ("xmm0","xmm1");
&pxor ("xmm2","xmm5");
- &pxor ("xmm0","xmm2");
+ &psrld ("xmm1",4);
&add ($key,16);
+ &pshufb ("xmm0","xmm1");
&lea ($base,&DWP($k_mc_backward,$const));
+ &pxor ("xmm0","xmm2");
&jmp (&label("enc_entry"));
&set_label("enc_loop",16);
# middle of middle round
&movdqa ("xmm4",&QWP($k_sb1,$const)); # 4 : sb1u
- &pshufb ("xmm4","xmm2"); # 4 = sb1u
- &pxor ("xmm4","xmm5"); # 4 = sb1u + k
&movdqa ("xmm0",&QWP($k_sb1+16,$const));# 0 : sb1t
+ &pshufb ("xmm4","xmm2"); # 4 = sb1u
&pshufb ("xmm0","xmm3"); # 0 = sb1t
- &pxor ("xmm0","xmm4"); # 0 = A
+ &pxor ("xmm4","xmm5"); # 4 = sb1u + k
&movdqa ("xmm5",&QWP($k_sb2,$const)); # 4 : sb2u
- &pshufb ("xmm5","xmm2"); # 4 = sb2u
+ &pxor ("xmm0","xmm4"); # 0 = A
&movdqa ("xmm1",&QWP(-0x40,$base,$magic));# .Lk_mc_forward[]
+ &pshufb ("xmm5","xmm2"); # 4 = sb2u
&movdqa ("xmm2",&QWP($k_sb2+16,$const));# 2 : sb2t
- &pshufb ("xmm2","xmm3"); # 2 = sb2t
- &pxor ("xmm2","xmm5"); # 2 = 2A
&movdqa ("xmm4",&QWP(0,$base,$magic)); # .Lk_mc_backward[]
+ &pshufb ("xmm2","xmm3"); # 2 = sb2t
&movdqa ("xmm3","xmm0"); # 3 = A
+ &pxor ("xmm2","xmm5"); # 2 = 2A
&pshufb ("xmm0","xmm1"); # 0 = B
&add ($key,16); # next key
&pxor ("xmm0","xmm2"); # 0 = 2A+B
@@ -220,30 +221,30 @@ $k_dsbo=0x2c0; # decryption sbox final output
&pxor ("xmm3","xmm0"); # 3 = 2A+B+D
&pshufb ("xmm0","xmm1"); # 0 = 2B+C
&and ($magic,0x30); # ... mod 4
- &pxor ("xmm0","xmm3"); # 0 = 2A+3B+C+D
&sub ($round,1); # nr--
+ &pxor ("xmm0","xmm3"); # 0 = 2A+3B+C+D
&set_label("enc_entry");
# top of round
&movdqa ("xmm1","xmm6"); # 1 : i
+ &movdqa ("xmm5",&QWP($k_inv+16,$const));# 2 : a/k
&pandn ("xmm1","xmm0"); # 1 = i<<4
&psrld ("xmm1",4); # 1 = i
&pand ("xmm0","xmm6"); # 0 = k
- &movdqa ("xmm5",&QWP($k_inv+16,$const));# 2 : a/k
&pshufb ("xmm5","xmm0"); # 2 = a/k
- &pxor ("xmm0","xmm1"); # 0 = j
&movdqa ("xmm3","xmm7"); # 3 : 1/i
+ &pxor ("xmm0","xmm1"); # 0 = j
&pshufb ("xmm3","xmm1"); # 3 = 1/i
- &pxor ("xmm3","xmm5"); # 3 = iak = 1/i + a/k
&movdqa ("xmm4","xmm7"); # 4 : 1/j
+ &pxor ("xmm3","xmm5"); # 3 = iak = 1/i + a/k
&pshufb ("xmm4","xmm0"); # 4 = 1/j
- &pxor ("xmm4","xmm5"); # 4 = jak = 1/j + a/k
&movdqa ("xmm2","xmm7"); # 2 : 1/iak
+ &pxor ("xmm4","xmm5"); # 4 = jak = 1/j + a/k
&pshufb ("xmm2","xmm3"); # 2 = 1/iak
- &pxor ("xmm2","xmm0"); # 2 = io
&movdqa ("xmm3","xmm7"); # 3 : 1/jak
- &movdqu ("xmm5",&QWP(0,$key));
+ &pxor ("xmm2","xmm0"); # 2 = io
&pshufb ("xmm3","xmm4"); # 3 = 1/jak
+ &movdqu ("xmm5",&QWP(0,$key));
&pxor ("xmm3","xmm1"); # 3 = jo
&jnz (&label("enc_loop"));
@@ -265,8 +266,8 @@ $k_dsbo=0x2c0; # decryption sbox final output
## Same API as encryption core.
##
&function_begin_B("_vpaes_decrypt_core");
- &mov ($round,&DWP(240,$key));
&lea ($base,&DWP($k_dsbd,$const));
+ &mov ($round,&DWP(240,$key));
&movdqa ("xmm1","xmm6");
&movdqa ("xmm2",&QWP($k_dipt-$k_dsbd,$base));
&pandn ("xmm1","xmm0");
@@ -292,62 +293,61 @@ $k_dsbo=0x2c0; # decryption sbox final output
## Inverse mix columns
##
&movdqa ("xmm4",&QWP(-0x20,$base)); # 4 : sb9u
+ &movdqa ("xmm1",&QWP(-0x10,$base)); # 0 : sb9t
&pshufb ("xmm4","xmm2"); # 4 = sb9u
- &pxor ("xmm4","xmm0");
- &movdqa ("xmm0",&QWP(-0x10,$base)); # 0 : sb9t
- &pshufb ("xmm0","xmm3"); # 0 = sb9t
- &pxor ("xmm0","xmm4"); # 0 = ch
- &add ($key,16); # next round key
-
- &pshufb ("xmm0","xmm5"); # MC ch
+ &pshufb ("xmm1","xmm3"); # 0 = sb9t
+ &pxor ("xmm0","xmm4");
&movdqa ("xmm4",&QWP(0,$base)); # 4 : sbdu
- &pshufb ("xmm4","xmm2"); # 4 = sbdu
- &pxor ("xmm4","xmm0"); # 4 = ch
- &movdqa ("xmm0",&QWP(0x10,$base)); # 0 : sbdt
- &pshufb ("xmm0","xmm3"); # 0 = sbdt
- &pxor ("xmm0","xmm4"); # 0 = ch
- &sub ($round,1); # nr--
+ &pxor ("xmm0","xmm1"); # 0 = ch
+ &movdqa ("xmm1",&QWP(0x10,$base)); # 0 : sbdt
+ &pshufb ("xmm4","xmm2"); # 4 = sbdu
&pshufb ("xmm0","xmm5"); # MC ch
+ &pshufb ("xmm1","xmm3"); # 0 = sbdt
+ &pxor ("xmm0","xmm4"); # 4 = ch
&movdqa ("xmm4",&QWP(0x20,$base)); # 4 : sbbu
- &pshufb ("xmm4","xmm2"); # 4 = sbbu
- &pxor ("xmm4","xmm0"); # 4 = ch
- &movdqa ("xmm0",&QWP(0x30,$base)); # 0 : sbbt
- &pshufb ("xmm0","xmm3"); # 0 = sbbt
- &pxor ("xmm0","xmm4"); # 0 = ch
+ &pxor ("xmm0","xmm1"); # 0 = ch
+ &movdqa ("xmm1",&QWP(0x30,$base)); # 0 : sbbt
+ &pshufb ("xmm4","xmm2"); # 4 = sbbu
&pshufb ("xmm0","xmm5"); # MC ch
+ &pshufb ("xmm1","xmm3"); # 0 = sbbt
+ &pxor ("xmm0","xmm4"); # 4 = ch
&movdqa ("xmm4",&QWP(0x40,$base)); # 4 : sbeu
- &pshufb ("xmm4","xmm2"); # 4 = sbeu
- &pxor ("xmm4","xmm0"); # 4 = ch
- &movdqa ("xmm0",&QWP(0x50,$base)); # 0 : sbet
- &pshufb ("xmm0","xmm3"); # 0 = sbet
- &pxor ("xmm0","xmm4"); # 0 = ch
+ &pxor ("xmm0","xmm1"); # 0 = ch
+ &movdqa ("xmm1",&QWP(0x50,$base)); # 0 : sbet
+ &pshufb ("xmm4","xmm2"); # 4 = sbeu
+ &pshufb ("xmm0","xmm5"); # MC ch
+ &pshufb ("xmm1","xmm3"); # 0 = sbet
+ &pxor ("xmm0","xmm4"); # 4 = ch
+ &add ($key,16); # next round key
&palignr("xmm5","xmm5",12);
+ &pxor ("xmm0","xmm1"); # 0 = ch
+ &sub ($round,1); # nr--
&set_label("dec_entry");
# top of round
&movdqa ("xmm1","xmm6"); # 1 : i
+ &movdqa ("xmm2",&QWP($k_inv+16,$const));# 2 : a/k
&pandn ("xmm1","xmm0"); # 1 = i<<4
- &psrld ("xmm1",4); # 1 = i
&pand ("xmm0","xmm6"); # 0 = k
- &movdqa ("xmm2",&QWP($k_inv+16,$const));# 2 : a/k
+ &psrld ("xmm1",4); # 1 = i
&pshufb ("xmm2","xmm0"); # 2 = a/k
- &pxor ("xmm0","xmm1"); # 0 = j
&movdqa ("xmm3","xmm7"); # 3 : 1/i
+ &pxor ("xmm0","xmm1"); # 0 = j
&pshufb ("xmm3","xmm1"); # 3 = 1/i
- &pxor ("xmm3","xmm2"); # 3 = iak = 1/i + a/k
&movdqa ("xmm4","xmm7"); # 4 : 1/j
+ &pxor ("xmm3","xmm2"); # 3 = iak = 1/i + a/k
&pshufb ("xmm4","xmm0"); # 4 = 1/j
&pxor ("xmm4","xmm2"); # 4 = jak = 1/j + a/k
&movdqa ("xmm2","xmm7"); # 2 : 1/iak
&pshufb ("xmm2","xmm3"); # 2 = 1/iak
- &pxor ("xmm2","xmm0"); # 2 = io
&movdqa ("xmm3","xmm7"); # 3 : 1/jak
+ &pxor ("xmm2","xmm0"); # 2 = io
&pshufb ("xmm3","xmm4"); # 3 = 1/jak
- &pxor ("xmm3","xmm1"); # 3 = jo
&movdqu ("xmm0",&QWP(0,$key));
+ &pxor ("xmm3","xmm1"); # 3 = jo
&jnz (&label("dec_loop"));
# middle of last round
@@ -542,12 +542,12 @@ $k_dsbo=0x2c0; # decryption sbox final output
## %xmm0: b+c+d b+c b a
##
&function_begin_B("_vpaes_schedule_192_smear");
- &pshufd ("xmm0","xmm6",0x80); # d c 0 0 -> c 0 0 0
- &pxor ("xmm6","xmm0"); # -> c+d c 0 0
+ &pshufd ("xmm1","xmm6",0x80); # d c 0 0 -> c 0 0 0
&pshufd ("xmm0","xmm7",0xFE); # b a _ _ -> b b b a
+ &pxor ("xmm6","xmm1"); # -> c+d c 0 0
+ &pxor ("xmm1","xmm1");
&pxor ("xmm6","xmm0"); # -> b+c+d b+c b a
&movdqa ("xmm0","xmm6");
- &pxor ("xmm1","xmm1");
&movhlps("xmm6","xmm1"); # clobber low side with zeros
&ret ();
&function_end_B("_vpaes_schedule_192_smear");
diff --git a/crypto/openssl/crypto/aes/asm/vpaes-x86_64.pl b/crypto/openssl/crypto/aes/asm/vpaes-x86_64.pl
index bd7f45b..f2ef318 100755
--- a/crypto/openssl/crypto/aes/asm/vpaes-x86_64.pl
+++ b/crypto/openssl/crypto/aes/asm/vpaes-x86_64.pl
@@ -27,9 +27,10 @@
#
# aes-x86_64.pl vpaes-x86_64.pl
#
-# Core 2(**) 30.5/43.7/14.3 21.8/25.7(***)
-# Nehalem 30.5/42.2/14.6 9.8/11.8
-# Atom 63.9/79.0/32.1 64.0/84.8(***)
+# Core 2(**) 29.6/41.1/14.3 21.9/25.2(***)
+# Nehalem 29.6/40.3/14.6 10.0/11.8
+# Atom 57.3/74.2/32.1 60.9/77.2(***)
+# Silvermont 52.7/64.0/19.5 48.8/60.8(***)
#
# (*) "Hyper-threading" in the context refers rather to cache shared
# among multiple cores, than to specifically Intel HTT. As vast
@@ -40,7 +41,7 @@
# (**) "Core 2" refers to initial 65nm design, a.k.a. Conroe.
#
# (***) Less impressive improvement on Core 2 and Atom is due to slow
-# pshufb, yet it's respectable +40%/78% improvement on Core 2
+# pshufb, yet it's respectable +36%/62% improvement on Core 2
# (as implied, over "hyper-threading-safe" code path).
#
# <appro@openssl.org>
@@ -95,8 +96,8 @@ _vpaes_encrypt_core:
movdqa .Lk_ipt+16(%rip), %xmm0 # ipthi
pshufb %xmm1, %xmm0
pxor %xmm5, %xmm2
- pxor %xmm2, %xmm0
add \$16, %r9
+ pxor %xmm2, %xmm0
lea .Lk_mc_backward(%rip),%r10
jmp .Lenc_entry
@@ -104,19 +105,19 @@ _vpaes_encrypt_core:
.Lenc_loop:
# middle of middle round
movdqa %xmm13, %xmm4 # 4 : sb1u
- pshufb %xmm2, %xmm4 # 4 = sb1u
- pxor %xmm5, %xmm4 # 4 = sb1u + k
movdqa %xmm12, %xmm0 # 0 : sb1t
+ pshufb %xmm2, %xmm4 # 4 = sb1u
pshufb %xmm3, %xmm0 # 0 = sb1t
- pxor %xmm4, %xmm0 # 0 = A
+ pxor %xmm5, %xmm4 # 4 = sb1u + k
movdqa %xmm15, %xmm5 # 4 : sb2u
- pshufb %xmm2, %xmm5 # 4 = sb2u
+ pxor %xmm4, %xmm0 # 0 = A
movdqa -0x40(%r11,%r10), %xmm1 # .Lk_mc_forward[]
+ pshufb %xmm2, %xmm5 # 4 = sb2u
+ movdqa (%r11,%r10), %xmm4 # .Lk_mc_backward[]
movdqa %xmm14, %xmm2 # 2 : sb2t
pshufb %xmm3, %xmm2 # 2 = sb2t
- pxor %xmm5, %xmm2 # 2 = 2A
- movdqa (%r11,%r10), %xmm4 # .Lk_mc_backward[]
movdqa %xmm0, %xmm3 # 3 = A
+ pxor %xmm5, %xmm2 # 2 = 2A
pshufb %xmm1, %xmm0 # 0 = B
add \$16, %r9 # next key
pxor %xmm2, %xmm0 # 0 = 2A+B
@@ -125,30 +126,30 @@ _vpaes_encrypt_core:
pxor %xmm0, %xmm3 # 3 = 2A+B+D
pshufb %xmm1, %xmm0 # 0 = 2B+C
and \$0x30, %r11 # ... mod 4
- pxor %xmm3, %xmm0 # 0 = 2A+3B+C+D
sub \$1,%rax # nr--
+ pxor %xmm3, %xmm0 # 0 = 2A+3B+C+D
.Lenc_entry:
# top of round
movdqa %xmm9, %xmm1 # 1 : i
+ movdqa %xmm11, %xmm5 # 2 : a/k
pandn %xmm0, %xmm1 # 1 = i<<4
psrld \$4, %xmm1 # 1 = i
pand %xmm9, %xmm0 # 0 = k
- movdqa %xmm11, %xmm5 # 2 : a/k
pshufb %xmm0, %xmm5 # 2 = a/k
- pxor %xmm1, %xmm0 # 0 = j
movdqa %xmm10, %xmm3 # 3 : 1/i
+ pxor %xmm1, %xmm0 # 0 = j
pshufb %xmm1, %xmm3 # 3 = 1/i
- pxor %xmm5, %xmm3 # 3 = iak = 1/i + a/k
movdqa %xmm10, %xmm4 # 4 : 1/j
+ pxor %xmm5, %xmm3 # 3 = iak = 1/i + a/k
pshufb %xmm0, %xmm4 # 4 = 1/j
- pxor %xmm5, %xmm4 # 4 = jak = 1/j + a/k
movdqa %xmm10, %xmm2 # 2 : 1/iak
+ pxor %xmm5, %xmm4 # 4 = jak = 1/j + a/k
pshufb %xmm3, %xmm2 # 2 = 1/iak
- pxor %xmm0, %xmm2 # 2 = io
movdqa %xmm10, %xmm3 # 3 : 1/jak
- movdqu (%r9), %xmm5
+ pxor %xmm0, %xmm2 # 2 = io
pshufb %xmm4, %xmm3 # 3 = 1/jak
+ movdqu (%r9), %xmm5
pxor %xmm1, %xmm3 # 3 = jo
jnz .Lenc_loop
@@ -201,62 +202,61 @@ _vpaes_decrypt_core:
## Inverse mix columns
##
movdqa -0x20(%r10),%xmm4 # 4 : sb9u
+ movdqa -0x10(%r10),%xmm1 # 0 : sb9t
pshufb %xmm2, %xmm4 # 4 = sb9u
- pxor %xmm0, %xmm4
- movdqa -0x10(%r10),%xmm0 # 0 : sb9t
- pshufb %xmm3, %xmm0 # 0 = sb9t
- pxor %xmm4, %xmm0 # 0 = ch
- add \$16, %r9 # next round key
-
- pshufb %xmm5, %xmm0 # MC ch
+ pshufb %xmm3, %xmm1 # 0 = sb9t
+ pxor %xmm4, %xmm0
movdqa 0x00(%r10),%xmm4 # 4 : sbdu
+ pxor %xmm1, %xmm0 # 0 = ch
+ movdqa 0x10(%r10),%xmm1 # 0 : sbdt
+
pshufb %xmm2, %xmm4 # 4 = sbdu
- pxor %xmm0, %xmm4 # 4 = ch
- movdqa 0x10(%r10),%xmm0 # 0 : sbdt
- pshufb %xmm3, %xmm0 # 0 = sbdt
- pxor %xmm4, %xmm0 # 0 = ch
- sub \$1,%rax # nr--
-
pshufb %xmm5, %xmm0 # MC ch
+ pshufb %xmm3, %xmm1 # 0 = sbdt
+ pxor %xmm4, %xmm0 # 4 = ch
movdqa 0x20(%r10),%xmm4 # 4 : sbbu
+ pxor %xmm1, %xmm0 # 0 = ch
+ movdqa 0x30(%r10),%xmm1 # 0 : sbbt
+
pshufb %xmm2, %xmm4 # 4 = sbbu
- pxor %xmm0, %xmm4 # 4 = ch
- movdqa 0x30(%r10),%xmm0 # 0 : sbbt
- pshufb %xmm3, %xmm0 # 0 = sbbt
- pxor %xmm4, %xmm0 # 0 = ch
-
pshufb %xmm5, %xmm0 # MC ch
+ pshufb %xmm3, %xmm1 # 0 = sbbt
+ pxor %xmm4, %xmm0 # 4 = ch
movdqa 0x40(%r10),%xmm4 # 4 : sbeu
- pshufb %xmm2, %xmm4 # 4 = sbeu
- pxor %xmm0, %xmm4 # 4 = ch
- movdqa 0x50(%r10),%xmm0 # 0 : sbet
- pshufb %xmm3, %xmm0 # 0 = sbet
- pxor %xmm4, %xmm0 # 0 = ch
+ pxor %xmm1, %xmm0 # 0 = ch
+ movdqa 0x50(%r10),%xmm1 # 0 : sbet
+ pshufb %xmm2, %xmm4 # 4 = sbeu
+ pshufb %xmm5, %xmm0 # MC ch
+ pshufb %xmm3, %xmm1 # 0 = sbet
+ pxor %xmm4, %xmm0 # 4 = ch
+ add \$16, %r9 # next round key
palignr \$12, %xmm5, %xmm5
-
+ pxor %xmm1, %xmm0 # 0 = ch
+ sub \$1,%rax # nr--
+
.Ldec_entry:
# top of round
movdqa %xmm9, %xmm1 # 1 : i
pandn %xmm0, %xmm1 # 1 = i<<4
+ movdqa %xmm11, %xmm2 # 2 : a/k
psrld \$4, %xmm1 # 1 = i
pand %xmm9, %xmm0 # 0 = k
- movdqa %xmm11, %xmm2 # 2 : a/k
pshufb %xmm0, %xmm2 # 2 = a/k
- pxor %xmm1, %xmm0 # 0 = j
movdqa %xmm10, %xmm3 # 3 : 1/i
+ pxor %xmm1, %xmm0 # 0 = j
pshufb %xmm1, %xmm3 # 3 = 1/i
- pxor %xmm2, %xmm3 # 3 = iak = 1/i + a/k
movdqa %xmm10, %xmm4 # 4 : 1/j
+ pxor %xmm2, %xmm3 # 3 = iak = 1/i + a/k
pshufb %xmm0, %xmm4 # 4 = 1/j
pxor %xmm2, %xmm4 # 4 = jak = 1/j + a/k
movdqa %xmm10, %xmm2 # 2 : 1/iak
pshufb %xmm3, %xmm2 # 2 = 1/iak
- pxor %xmm0, %xmm2 # 2 = io
movdqa %xmm10, %xmm3 # 3 : 1/jak
+ pxor %xmm0, %xmm2 # 2 = io
pshufb %xmm4, %xmm3 # 3 = 1/jak
- pxor %xmm1, %xmm3 # 3 = jo
movdqu (%r9), %xmm0
+ pxor %xmm1, %xmm3 # 3 = jo
jnz .Ldec_loop
# middle of last round
@@ -464,12 +464,12 @@ _vpaes_schedule_core:
.type _vpaes_schedule_192_smear,\@abi-omnipotent
.align 16
_vpaes_schedule_192_smear:
- pshufd \$0x80, %xmm6, %xmm0 # d c 0 0 -> c 0 0 0
- pxor %xmm0, %xmm6 # -> c+d c 0 0
+ pshufd \$0x80, %xmm6, %xmm1 # d c 0 0 -> c 0 0 0
pshufd \$0xFE, %xmm7, %xmm0 # b a _ _ -> b b b a
+ pxor %xmm1, %xmm6 # -> c+d c 0 0
+ pxor %xmm1, %xmm1
pxor %xmm0, %xmm6 # -> b+c+d b+c b a
movdqa %xmm6, %xmm0
- pxor %xmm1, %xmm1
movhlps %xmm1, %xmm6 # clobber low side with zeros
ret
.size _vpaes_schedule_192_smear,.-_vpaes_schedule_192_smear
diff --git a/crypto/openssl/crypto/arm64cpuid.S b/crypto/openssl/crypto/arm64cpuid.S
new file mode 100644
index 0000000..4778ac1
--- /dev/null
+++ b/crypto/openssl/crypto/arm64cpuid.S
@@ -0,0 +1,46 @@
+#include "arm_arch.h"
+
+.text
+.arch armv8-a+crypto
+
+.align 5
+.global _armv7_neon_probe
+.type _armv7_neon_probe,%function
+_armv7_neon_probe:
+ orr v15.16b, v15.16b, v15.16b
+ ret
+.size _armv7_neon_probe,.-_armv7_neon_probe
+
+.global _armv7_tick
+.type _armv7_tick,%function
+_armv7_tick:
+ mrs x0, CNTVCT_EL0
+ ret
+.size _armv7_tick,.-_armv7_tick
+
+.global _armv8_aes_probe
+.type _armv8_aes_probe,%function
+_armv8_aes_probe:
+ aese v0.16b, v0.16b
+ ret
+.size _armv8_aes_probe,.-_armv8_aes_probe
+
+.global _armv8_sha1_probe
+.type _armv8_sha1_probe,%function
+_armv8_sha1_probe:
+ sha1h s0, s0
+ ret
+.size _armv8_sha1_probe,.-_armv8_sha1_probe
+
+.global _armv8_sha256_probe
+.type _armv8_sha256_probe,%function
+_armv8_sha256_probe:
+ sha256su0 v0.4s, v0.4s
+ ret
+.size _armv8_sha256_probe,.-_armv8_sha256_probe
+.global _armv8_pmull_probe
+.type _armv8_pmull_probe,%function
+_armv8_pmull_probe:
+ pmull v0.1q, v0.1d, v0.1d
+ ret
+.size _armv8_pmull_probe,.-_armv8_pmull_probe
diff --git a/crypto/openssl/crypto/arm_arch.h b/crypto/openssl/crypto/arm_arch.h
index b654371..9d6e588 100644
--- a/crypto/openssl/crypto/arm_arch.h
+++ b/crypto/openssl/crypto/arm_arch.h
@@ -10,13 +10,24 @@
# define __ARMEL__
# endif
# elif defined(__GNUC__)
+# if defined(__aarch64__)
+# define __ARM_ARCH__ 8
+# if __BYTE_ORDER__==__ORDER_BIG_ENDIAN__
+# define __ARMEB__
+# else
+# define __ARMEL__
+# endif
/*
* Why doesn't gcc define __ARM_ARCH__? Instead it defines
* bunch of below macros. See all_architectires[] table in
* gcc/config/arm/arm.c. On a side note it defines
* __ARMEL__/__ARMEB__ for little-/big-endian.
*/
-# if defined(__ARM_ARCH_7__) || defined(__ARM_ARCH_7A__) || \
+# elif defined(__ARM_ARCH)
+# define __ARM_ARCH__ __ARM_ARCH
+# elif defined(__ARM_ARCH_8A__)
+# define __ARM_ARCH__ 8
+# elif defined(__ARM_ARCH_7__) || defined(__ARM_ARCH_7A__) || \
defined(__ARM_ARCH_7R__)|| defined(__ARM_ARCH_7M__) || \
defined(__ARM_ARCH_7EM__)
# define __ARM_ARCH__ 7
@@ -41,11 +52,27 @@
# include <openssl/fipssyms.h>
# endif
+# if !defined(__ARM_MAX_ARCH__)
+# define __ARM_MAX_ARCH__ __ARM_ARCH__
+# endif
+
+# if __ARM_MAX_ARCH__<__ARM_ARCH__
+# error "__ARM_MAX_ARCH__ can't be less than __ARM_ARCH__"
+# elif __ARM_MAX_ARCH__!=__ARM_ARCH__
+# if __ARM_ARCH__<7 && __ARM_MAX_ARCH__>=7 && defined(__ARMEB__)
+# error "can't build universal big-endian binary"
+# endif
+# endif
+
# if !__ASSEMBLER__
extern unsigned int OPENSSL_armcap_P;
-
-# define ARMV7_NEON (1<<0)
-# define ARMV7_TICK (1<<1)
# endif
+# define ARMV7_NEON (1<<0)
+# define ARMV7_TICK (1<<1)
+# define ARMV8_AES (1<<2)
+# define ARMV8_SHA1 (1<<3)
+# define ARMV8_SHA256 (1<<4)
+# define ARMV8_PMULL (1<<5)
+
#endif
diff --git a/crypto/openssl/crypto/armcap.c b/crypto/openssl/crypto/armcap.c
index 28522ea..356fa15 100644
--- a/crypto/openssl/crypto/armcap.c
+++ b/crypto/openssl/crypto/armcap.c
@@ -7,8 +7,18 @@
#include "arm_arch.h"
-unsigned int OPENSSL_armcap_P;
+unsigned int OPENSSL_armcap_P = 0;
+#if __ARM_MAX_ARCH__<7
+void OPENSSL_cpuid_setup(void)
+{
+}
+
+unsigned long OPENSSL_rdtsc(void)
+{
+ return 0;
+}
+#else
static sigset_t all_masked;
static sigjmp_buf ill_jmp;
@@ -22,9 +32,13 @@ static void ill_handler(int sig)
* ARM compilers support inline assembler...
*/
void _armv7_neon_probe(void);
-unsigned int _armv7_tick(void);
+void _armv8_aes_probe(void);
+void _armv8_sha1_probe(void);
+void _armv8_sha256_probe(void);
+void _armv8_pmull_probe(void);
+unsigned long _armv7_tick(void);
-unsigned int OPENSSL_rdtsc(void)
+unsigned long OPENSSL_rdtsc(void)
{
if (OPENSSL_armcap_P & ARMV7_TICK)
return _armv7_tick();
@@ -32,9 +46,44 @@ unsigned int OPENSSL_rdtsc(void)
return 0;
}
-#if defined(__GNUC__) && __GNUC__>=2
+/*
+ * Use a weak reference to getauxval() so we can use it if it is available but
+ * don't break the build if it is not.
+ */
+# if defined(__GNUC__) && __GNUC__>=2
void OPENSSL_cpuid_setup(void) __attribute__ ((constructor));
-#endif
+extern unsigned long getauxval(unsigned long type) __attribute__ ((weak));
+# else
+static unsigned long (*getauxval) (unsigned long) = NULL;
+# endif
+
+/*
+ * ARM puts the the feature bits for Crypto Extensions in AT_HWCAP2, whereas
+ * AArch64 used AT_HWCAP.
+ */
+# if defined(__arm__) || defined (__arm)
+# define HWCAP 16
+ /* AT_HWCAP */
+# define HWCAP_NEON (1 << 12)
+
+# define HWCAP_CE 26
+ /* AT_HWCAP2 */
+# define HWCAP_CE_AES (1 << 0)
+# define HWCAP_CE_PMULL (1 << 1)
+# define HWCAP_CE_SHA1 (1 << 2)
+# define HWCAP_CE_SHA256 (1 << 3)
+# elif defined(__aarch64__)
+# define HWCAP 16
+ /* AT_HWCAP */
+# define HWCAP_NEON (1 << 1)
+
+# define HWCAP_CE HWCAP
+# define HWCAP_CE_AES (1 << 3)
+# define HWCAP_CE_PMULL (1 << 4)
+# define HWCAP_CE_SHA1 (1 << 5)
+# define HWCAP_CE_SHA256 (1 << 6)
+# endif
+
void OPENSSL_cpuid_setup(void)
{
char *e;
@@ -47,7 +96,7 @@ void OPENSSL_cpuid_setup(void)
trigger = 1;
if ((e = getenv("OPENSSL_armcap"))) {
- OPENSSL_armcap_P = strtoul(e, NULL, 0);
+ OPENSSL_armcap_P = (unsigned int)strtoul(e, NULL, 0);
return;
}
@@ -67,9 +116,42 @@ void OPENSSL_cpuid_setup(void)
sigprocmask(SIG_SETMASK, &ill_act.sa_mask, &oset);
sigaction(SIGILL, &ill_act, &ill_oact);
- if (sigsetjmp(ill_jmp, 1) == 0) {
+ if (getauxval != NULL) {
+ if (getauxval(HWCAP) & HWCAP_NEON) {
+ unsigned long hwcap = getauxval(HWCAP_CE);
+
+ OPENSSL_armcap_P |= ARMV7_NEON;
+
+ if (hwcap & HWCAP_CE_AES)
+ OPENSSL_armcap_P |= ARMV8_AES;
+
+ if (hwcap & HWCAP_CE_PMULL)
+ OPENSSL_armcap_P |= ARMV8_PMULL;
+
+ if (hwcap & HWCAP_CE_SHA1)
+ OPENSSL_armcap_P |= ARMV8_SHA1;
+
+ if (hwcap & HWCAP_CE_SHA256)
+ OPENSSL_armcap_P |= ARMV8_SHA256;
+ }
+ } else if (sigsetjmp(ill_jmp, 1) == 0) {
_armv7_neon_probe();
OPENSSL_armcap_P |= ARMV7_NEON;
+ if (sigsetjmp(ill_jmp, 1) == 0) {
+ _armv8_pmull_probe();
+ OPENSSL_armcap_P |= ARMV8_PMULL | ARMV8_AES;
+ } else if (sigsetjmp(ill_jmp, 1) == 0) {
+ _armv8_aes_probe();
+ OPENSSL_armcap_P |= ARMV8_AES;
+ }
+ if (sigsetjmp(ill_jmp, 1) == 0) {
+ _armv8_sha1_probe();
+ OPENSSL_armcap_P |= ARMV8_SHA1;
+ }
+ if (sigsetjmp(ill_jmp, 1) == 0) {
+ _armv8_sha256_probe();
+ OPENSSL_armcap_P |= ARMV8_SHA256;
+ }
}
if (sigsetjmp(ill_jmp, 1) == 0) {
_armv7_tick();
@@ -79,3 +161,4 @@ void OPENSSL_cpuid_setup(void)
sigaction(SIGILL, &ill_oact, NULL);
sigprocmask(SIG_SETMASK, &oset, NULL);
}
+#endif
diff --git a/crypto/openssl/crypto/armv4cpuid.S b/crypto/openssl/crypto/armv4cpuid.S
index 2d618de..65010ae 100644
--- a/crypto/openssl/crypto/armv4cpuid.S
+++ b/crypto/openssl/crypto/armv4cpuid.S
@@ -4,20 +4,6 @@
.code 32
.align 5
-.global _armv7_neon_probe
-.type _armv7_neon_probe,%function
-_armv7_neon_probe:
- .word 0xf26ee1fe @ vorr q15,q15,q15
- .word 0xe12fff1e @ bx lr
-.size _armv7_neon_probe,.-_armv7_neon_probe
-
-.global _armv7_tick
-.type _armv7_tick,%function
-_armv7_tick:
- mrc p15,0,r0,c9,c13,0
- .word 0xe12fff1e @ bx lr
-.size _armv7_tick,.-_armv7_tick
-
.global OPENSSL_atomic_add
.type OPENSSL_atomic_add,%function
OPENSSL_atomic_add:
@@ -28,7 +14,7 @@ OPENSSL_atomic_add:
cmp r2,#0
bne .Ladd
mov r0,r3
- .word 0xe12fff1e @ bx lr
+ bx lr
#else
stmdb sp!,{r4-r6,lr}
ldr r2,.Lspinlock
@@ -81,62 +67,131 @@ OPENSSL_cleanse:
adds r1,r1,#4
bne .Little
.Lcleanse_done:
+#if __ARM_ARCH__>=5
+ bx lr
+#else
tst lr,#1
moveq pc,lr
.word 0xe12fff1e @ bx lr
+#endif
.size OPENSSL_cleanse,.-OPENSSL_cleanse
+#if __ARM_MAX_ARCH__>=7
+.arch armv7-a
+.fpu neon
+
+.align 5
+.global _armv7_neon_probe
+.type _armv7_neon_probe,%function
+_armv7_neon_probe:
+ vorr q0,q0,q0
+ bx lr
+.size _armv7_neon_probe,.-_armv7_neon_probe
+
+.global _armv7_tick
+.type _armv7_tick,%function
+_armv7_tick:
+ mrrc p15,1,r0,r1,c14 @ CNTVCT
+ bx lr
+.size _armv7_tick,.-_armv7_tick
+
+.global _armv8_aes_probe
+.type _armv8_aes_probe,%function
+_armv8_aes_probe:
+ .byte 0x00,0x03,0xb0,0xf3 @ aese.8 q0,q0
+ bx lr
+.size _armv8_aes_probe,.-_armv8_aes_probe
+
+.global _armv8_sha1_probe
+.type _armv8_sha1_probe,%function
+_armv8_sha1_probe:
+ .byte 0x40,0x0c,0x00,0xf2 @ sha1c.32 q0,q0,q0
+ bx lr
+.size _armv8_sha1_probe,.-_armv8_sha1_probe
+
+.global _armv8_sha256_probe
+.type _armv8_sha256_probe,%function
+_armv8_sha256_probe:
+ .byte 0x40,0x0c,0x00,0xf3 @ sha256h.32 q0,q0,q0
+ bx lr
+.size _armv8_sha256_probe,.-_armv8_sha256_probe
+.global _armv8_pmull_probe
+.type _armv8_pmull_probe,%function
+_armv8_pmull_probe:
+ .byte 0x00,0x0e,0xa0,0xf2 @ vmull.p64 q0,d0,d0
+ bx lr
+.size _armv8_pmull_probe,.-_armv8_pmull_probe
+#endif
+
.global OPENSSL_wipe_cpu
.type OPENSSL_wipe_cpu,%function
OPENSSL_wipe_cpu:
+#if __ARM_MAX_ARCH__>=7
ldr r0,.LOPENSSL_armcap
adr r1,.LOPENSSL_armcap
ldr r0,[r1,r0]
+#endif
eor r2,r2,r2
eor r3,r3,r3
eor ip,ip,ip
+#if __ARM_MAX_ARCH__>=7
tst r0,#1
beq .Lwipe_done
- .word 0xf3000150 @ veor q0, q0, q0
- .word 0xf3022152 @ veor q1, q1, q1
- .word 0xf3044154 @ veor q2, q2, q2
- .word 0xf3066156 @ veor q3, q3, q3
- .word 0xf34001f0 @ veor q8, q8, q8
- .word 0xf34221f2 @ veor q9, q9, q9
- .word 0xf34441f4 @ veor q10, q10, q10
- .word 0xf34661f6 @ veor q11, q11, q11
- .word 0xf34881f8 @ veor q12, q12, q12
- .word 0xf34aa1fa @ veor q13, q13, q13
- .word 0xf34cc1fc @ veor q14, q14, q14
- .word 0xf34ee1fe @ veor q15, q15, q15
+ veor q0, q0, q0
+ veor q1, q1, q1
+ veor q2, q2, q2
+ veor q3, q3, q3
+ veor q8, q8, q8
+ veor q9, q9, q9
+ veor q10, q10, q10
+ veor q11, q11, q11
+ veor q12, q12, q12
+ veor q13, q13, q13
+ veor q14, q14, q14
+ veor q15, q15, q15
.Lwipe_done:
+#endif
mov r0,sp
+#if __ARM_ARCH__>=5
+ bx lr
+#else
tst lr,#1
moveq pc,lr
.word 0xe12fff1e @ bx lr
+#endif
.size OPENSSL_wipe_cpu,.-OPENSSL_wipe_cpu
.global OPENSSL_instrument_bus
.type OPENSSL_instrument_bus,%function
OPENSSL_instrument_bus:
eor r0,r0,r0
+#if __ARM_ARCH__>=5
+ bx lr
+#else
tst lr,#1
moveq pc,lr
.word 0xe12fff1e @ bx lr
+#endif
.size OPENSSL_instrument_bus,.-OPENSSL_instrument_bus
.global OPENSSL_instrument_bus2
.type OPENSSL_instrument_bus2,%function
OPENSSL_instrument_bus2:
eor r0,r0,r0
+#if __ARM_ARCH__>=5
+ bx lr
+#else
tst lr,#1
moveq pc,lr
.word 0xe12fff1e @ bx lr
+#endif
.size OPENSSL_instrument_bus2,.-OPENSSL_instrument_bus2
.align 5
+#if __ARM_MAX_ARCH__>=7
.LOPENSSL_armcap:
.word OPENSSL_armcap_P-.LOPENSSL_armcap
+#endif
#if __ARM_ARCH__>=6
.align 5
#else
diff --git a/crypto/openssl/crypto/asn1/Makefile b/crypto/openssl/crypto/asn1/Makefile
index d774f78..330fe81 100644
--- a/crypto/openssl/crypto/asn1/Makefile
+++ b/crypto/openssl/crypto/asn1/Makefile
@@ -176,7 +176,7 @@ a_gentm.o: ../../include/openssl/err.h ../../include/openssl/lhash.h
a_gentm.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
a_gentm.o: ../../include/openssl/ossl_typ.h ../../include/openssl/safestack.h
a_gentm.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
-a_gentm.o: ../cryptlib.h ../o_time.h a_gentm.c
+a_gentm.o: ../cryptlib.h ../o_time.h a_gentm.c asn1_locl.h
a_i2d_fp.o: ../../e_os.h ../../include/openssl/asn1.h
a_i2d_fp.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h
a_i2d_fp.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
@@ -277,6 +277,7 @@ a_time.o: ../../include/openssl/lhash.h ../../include/openssl/opensslconf.h
a_time.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
a_time.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h
a_time.o: ../../include/openssl/symhacks.h ../cryptlib.h ../o_time.h a_time.c
+a_time.o: asn1_locl.h
a_type.o: ../../e_os.h ../../include/openssl/asn1.h
a_type.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h
a_type.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
@@ -293,7 +294,7 @@ a_utctm.o: ../../include/openssl/err.h ../../include/openssl/lhash.h
a_utctm.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
a_utctm.o: ../../include/openssl/ossl_typ.h ../../include/openssl/safestack.h
a_utctm.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
-a_utctm.o: ../cryptlib.h ../o_time.h a_utctm.c
+a_utctm.o: ../cryptlib.h ../o_time.h a_utctm.c asn1_locl.h
a_utf8.o: ../../e_os.h ../../include/openssl/asn1.h ../../include/openssl/bio.h
a_utf8.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
a_utf8.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h
diff --git a/crypto/openssl/crypto/asn1/a_gentm.c b/crypto/openssl/crypto/asn1/a_gentm.c
index 8b3ef71..fa76dca 100644
--- a/crypto/openssl/crypto/asn1/a_gentm.c
+++ b/crypto/openssl/crypto/asn1/a_gentm.c
@@ -65,6 +65,7 @@
#include "cryptlib.h"
#include "o_time.h"
#include <openssl/asn1.h>
+#include "asn1_locl.h"
#if 0
@@ -117,7 +118,7 @@ ASN1_GENERALIZEDTIME *d2i_ASN1_GENERALIZEDTIME(ASN1_GENERALIZEDTIME **a,
#endif
-int ASN1_GENERALIZEDTIME_check(ASN1_GENERALIZEDTIME *d)
+int asn1_generalizedtime_to_tm(struct tm *tm, const ASN1_GENERALIZEDTIME *d)
{
static const int min[9] = { 0, 0, 1, 1, 0, 0, 0, 0, 0 };
static const int max[9] = { 99, 99, 12, 31, 23, 59, 59, 12, 59 };
@@ -139,6 +140,8 @@ int ASN1_GENERALIZEDTIME_check(ASN1_GENERALIZEDTIME *d)
for (i = 0; i < 7; i++) {
if ((i == 6) && ((a[o] == 'Z') || (a[o] == '+') || (a[o] == '-'))) {
i++;
+ if (tm)
+ tm->tm_sec = 0;
break;
}
if ((a[o] < '0') || (a[o] > '9'))
@@ -155,6 +158,31 @@ int ASN1_GENERALIZEDTIME_check(ASN1_GENERALIZEDTIME *d)
if ((n < min[i]) || (n > max[i]))
goto err;
+ if (tm) {
+ switch (i) {
+ case 0:
+ tm->tm_year = n * 100 - 1900;
+ break;
+ case 1:
+ tm->tm_year += n;
+ break;
+ case 2:
+ tm->tm_mon = n - 1;
+ break;
+ case 3:
+ tm->tm_mday = n;
+ break;
+ case 4:
+ tm->tm_hour = n;
+ break;
+ case 5:
+ tm->tm_min = n;
+ break;
+ case 6:
+ tm->tm_sec = n;
+ break;
+ }
+ }
}
/*
* Optional fractional seconds: decimal point followed by one or more
@@ -174,6 +202,7 @@ int ASN1_GENERALIZEDTIME_check(ASN1_GENERALIZEDTIME *d)
if (a[o] == 'Z')
o++;
else if ((a[o] == '+') || (a[o] == '-')) {
+ int offsign = a[o] == '-' ? -1 : 1, offset = 0;
o++;
if (o + 4 > l)
goto err;
@@ -187,9 +216,17 @@ int ASN1_GENERALIZEDTIME_check(ASN1_GENERALIZEDTIME *d)
n = (n * 10) + a[o] - '0';
if ((n < min[i]) || (n > max[i]))
goto err;
+ if (tm) {
+ if (i == 7)
+ offset = n * 3600;
+ else if (i == 8)
+ offset += n * 60;
+ }
o++;
}
- } else {
+ if (offset && !OPENSSL_gmtime_adj(tm, 0, offset * offsign))
+ return 0;
+ } else if (a[o]) {
/* Missing time zone information. */
goto err;
}
@@ -198,6 +235,11 @@ int ASN1_GENERALIZEDTIME_check(ASN1_GENERALIZEDTIME *d)
return (0);
}
+int ASN1_GENERALIZEDTIME_check(const ASN1_GENERALIZEDTIME *d)
+{
+ return asn1_generalizedtime_to_tm(NULL, d);
+}
+
int ASN1_GENERALIZEDTIME_set_string(ASN1_GENERALIZEDTIME *s, const char *str)
{
ASN1_GENERALIZEDTIME t;
diff --git a/crypto/openssl/crypto/asn1/a_time.c b/crypto/openssl/crypto/asn1/a_time.c
index c81f0de..fcb2d56 100644
--- a/crypto/openssl/crypto/asn1/a_time.c
+++ b/crypto/openssl/crypto/asn1/a_time.c
@@ -66,6 +66,7 @@
#include "cryptlib.h"
#include "o_time.h"
#include <openssl/asn1t.h>
+#include "asn1_locl.h"
IMPLEMENT_ASN1_MSTRING(ASN1_TIME, B_ASN1_TIME)
@@ -196,3 +197,32 @@ int ASN1_TIME_set_string(ASN1_TIME *s, const char *str)
return 1;
}
+
+static int asn1_time_to_tm(struct tm *tm, const ASN1_TIME *t)
+{
+ if (t == NULL) {
+ time_t now_t;
+ time(&now_t);
+ if (OPENSSL_gmtime(&now_t, tm))
+ return 1;
+ return 0;
+ }
+
+ if (t->type == V_ASN1_UTCTIME)
+ return asn1_utctime_to_tm(tm, t);
+ else if (t->type == V_ASN1_GENERALIZEDTIME)
+ return asn1_generalizedtime_to_tm(tm, t);
+
+ return 0;
+}
+
+int ASN1_TIME_diff(int *pday, int *psec,
+ const ASN1_TIME *from, const ASN1_TIME *to)
+{
+ struct tm tm_from, tm_to;
+ if (!asn1_time_to_tm(&tm_from, from))
+ return 0;
+ if (!asn1_time_to_tm(&tm_to, to))
+ return 0;
+ return OPENSSL_gmtime_diff(pday, psec, &tm_from, &tm_to);
+}
diff --git a/crypto/openssl/crypto/asn1/a_utctm.c b/crypto/openssl/crypto/asn1/a_utctm.c
index 179de6d..724a10b 100644
--- a/crypto/openssl/crypto/asn1/a_utctm.c
+++ b/crypto/openssl/crypto/asn1/a_utctm.c
@@ -61,6 +61,7 @@
#include "cryptlib.h"
#include "o_time.h"
#include <openssl/asn1.h>
+#include "asn1_locl.h"
#if 0
int i2d_ASN1_UTCTIME(ASN1_UTCTIME *a, unsigned char **pp)
@@ -109,7 +110,7 @@ ASN1_UTCTIME *d2i_ASN1_UTCTIME(ASN1_UTCTIME **a, unsigned char **pp,
#endif
-int ASN1_UTCTIME_check(ASN1_UTCTIME *d)
+int asn1_utctime_to_tm(struct tm *tm, const ASN1_UTCTIME *d)
{
static const int min[8] = { 0, 1, 1, 0, 0, 0, 0, 0 };
static const int max[8] = { 99, 12, 31, 23, 59, 59, 12, 59 };
@@ -127,6 +128,8 @@ int ASN1_UTCTIME_check(ASN1_UTCTIME *d)
for (i = 0; i < 6; i++) {
if ((i == 5) && ((a[o] == 'Z') || (a[o] == '+') || (a[o] == '-'))) {
i++;
+ if (tm)
+ tm->tm_sec = 0;
break;
}
if ((a[o] < '0') || (a[o] > '9'))
@@ -143,10 +146,33 @@ int ASN1_UTCTIME_check(ASN1_UTCTIME *d)
if ((n < min[i]) || (n > max[i]))
goto err;
+ if (tm) {
+ switch (i) {
+ case 0:
+ tm->tm_year = n < 50 ? n + 100 : n;
+ break;
+ case 1:
+ tm->tm_mon = n - 1;
+ break;
+ case 2:
+ tm->tm_mday = n;
+ break;
+ case 3:
+ tm->tm_hour = n;
+ break;
+ case 4:
+ tm->tm_min = n;
+ break;
+ case 5:
+ tm->tm_sec = n;
+ break;
+ }
+ }
}
if (a[o] == 'Z')
o++;
else if ((a[o] == '+') || (a[o] == '-')) {
+ int offsign = a[o] == '-' ? -1 : 1, offset = 0;
o++;
if (o + 4 > l)
goto err;
@@ -160,12 +186,25 @@ int ASN1_UTCTIME_check(ASN1_UTCTIME *d)
n = (n * 10) + a[o] - '0';
if ((n < min[i]) || (n > max[i]))
goto err;
+ if (tm) {
+ if (i == 6)
+ offset = n * 3600;
+ else if (i == 7)
+ offset += n * 60;
+ }
o++;
}
+ if (offset && !OPENSSL_gmtime_adj(tm, 0, offset * offsign))
+ return 0;
}
- return (o == l);
+ return o == l;
err:
- return (0);
+ return 0;
+}
+
+int ASN1_UTCTIME_check(const ASN1_UTCTIME *d)
+{
+ return asn1_utctime_to_tm(NULL, d);
}
int ASN1_UTCTIME_set_string(ASN1_UTCTIME *s, const char *str)
@@ -249,43 +288,26 @@ ASN1_UTCTIME *ASN1_UTCTIME_adj(ASN1_UTCTIME *s, time_t t,
int ASN1_UTCTIME_cmp_time_t(const ASN1_UTCTIME *s, time_t t)
{
- struct tm *tm;
- struct tm data;
- int offset;
- int year;
-
-#define g2(p) (((p)[0]-'0')*10+(p)[1]-'0')
-
- if (s->data[12] == 'Z')
- offset = 0;
- else {
- offset = g2(s->data + 13) * 60 + g2(s->data + 15);
- if (s->data[12] == '-')
- offset = -offset;
- }
+ struct tm stm, ttm;
+ int day, sec;
- t -= offset * 60; /* FIXME: may overflow in extreme cases */
+ if (!asn1_utctime_to_tm(&stm, s))
+ return -2;
- tm = OPENSSL_gmtime(&t, &data);
- /*
- * NB: -1, 0, 1 already valid return values so use -2 to indicate error.
- */
- if (tm == NULL)
+ if (!OPENSSL_gmtime(&t, &ttm))
return -2;
-#define return_cmp(a,b) if ((a)<(b)) return -1; else if ((a)>(b)) return 1
- year = g2(s->data);
- if (year < 50)
- year += 100;
- return_cmp(year, tm->tm_year);
- return_cmp(g2(s->data + 2) - 1, tm->tm_mon);
- return_cmp(g2(s->data + 4), tm->tm_mday);
- return_cmp(g2(s->data + 6), tm->tm_hour);
- return_cmp(g2(s->data + 8), tm->tm_min);
- return_cmp(g2(s->data + 10), tm->tm_sec);
-#undef g2
-#undef return_cmp
+ if (!OPENSSL_gmtime_diff(&day, &sec, &ttm, &stm))
+ return -2;
+ if (day > 0)
+ return 1;
+ if (day < 0)
+ return -1;
+ if (sec > 0)
+ return 1;
+ if (sec < 0)
+ return -1;
return 0;
}
diff --git a/crypto/openssl/crypto/asn1/ameth_lib.c b/crypto/openssl/crypto/asn1/ameth_lib.c
index 45f3f40..5389c04 100644
--- a/crypto/openssl/crypto/asn1/ameth_lib.c
+++ b/crypto/openssl/crypto/asn1/ameth_lib.c
@@ -68,6 +68,7 @@
extern const EVP_PKEY_ASN1_METHOD rsa_asn1_meths[];
extern const EVP_PKEY_ASN1_METHOD dsa_asn1_meths[];
extern const EVP_PKEY_ASN1_METHOD dh_asn1_meth;
+extern const EVP_PKEY_ASN1_METHOD dhx_asn1_meth;
extern const EVP_PKEY_ASN1_METHOD eckey_asn1_meth;
extern const EVP_PKEY_ASN1_METHOD hmac_asn1_meth;
extern const EVP_PKEY_ASN1_METHOD cmac_asn1_meth;
@@ -92,7 +93,10 @@ static const EVP_PKEY_ASN1_METHOD *standard_methods[] = {
&eckey_asn1_meth,
#endif
&hmac_asn1_meth,
- &cmac_asn1_meth
+ &cmac_asn1_meth,
+#ifndef OPENSSL_NO_DH
+ &dhx_asn1_meth
+#endif
};
typedef int sk_cmp_fn_type(const char *const *a, const char *const *b);
@@ -460,3 +464,21 @@ void EVP_PKEY_asn1_set_ctrl(EVP_PKEY_ASN1_METHOD *ameth,
{
ameth->pkey_ctrl = pkey_ctrl;
}
+
+void EVP_PKEY_asn1_set_item(EVP_PKEY_ASN1_METHOD *ameth,
+ int (*item_verify) (EVP_MD_CTX *ctx,
+ const ASN1_ITEM *it,
+ void *asn,
+ X509_ALGOR *a,
+ ASN1_BIT_STRING *sig,
+ EVP_PKEY *pkey),
+ int (*item_sign) (EVP_MD_CTX *ctx,
+ const ASN1_ITEM *it,
+ void *asn,
+ X509_ALGOR *alg1,
+ X509_ALGOR *alg2,
+ ASN1_BIT_STRING *sig))
+{
+ ameth->item_sign = item_sign;
+ ameth->item_verify = item_verify;
+}
diff --git a/crypto/openssl/crypto/asn1/asn1.h b/crypto/openssl/crypto/asn1/asn1.h
index 39b7833..68e791f 100644
--- a/crypto/openssl/crypto/asn1/asn1.h
+++ b/crypto/openssl/crypto/asn1/asn1.h
@@ -207,13 +207,13 @@ typedef struct asn1_const_ctx_st {
# define ASN1_OBJECT_FLAG_CRITICAL 0x02/* critical x509v3 object id */
# define ASN1_OBJECT_FLAG_DYNAMIC_STRINGS 0x04/* internal use */
# define ASN1_OBJECT_FLAG_DYNAMIC_DATA 0x08/* internal use */
-typedef struct asn1_object_st {
+struct asn1_object_st {
const char *sn, *ln;
int nid;
int length;
const unsigned char *data; /* data remains const after init */
int flags; /* Should we free this one */
-} ASN1_OBJECT;
+};
# define ASN1_STRING_FLAG_BITS_LEFT 0x08/* Set if 0x07 has bits left value */
/*
@@ -843,7 +843,7 @@ int ASN1_INTEGER_cmp(const ASN1_INTEGER *x, const ASN1_INTEGER *y);
DECLARE_ASN1_FUNCTIONS(ASN1_ENUMERATED)
-int ASN1_UTCTIME_check(ASN1_UTCTIME *a);
+int ASN1_UTCTIME_check(const ASN1_UTCTIME *a);
ASN1_UTCTIME *ASN1_UTCTIME_set(ASN1_UTCTIME *s, time_t t);
ASN1_UTCTIME *ASN1_UTCTIME_adj(ASN1_UTCTIME *s, time_t t,
int offset_day, long offset_sec);
@@ -853,13 +853,15 @@ int ASN1_UTCTIME_cmp_time_t(const ASN1_UTCTIME *s, time_t t);
time_t ASN1_UTCTIME_get(const ASN1_UTCTIME *s);
# endif
-int ASN1_GENERALIZEDTIME_check(ASN1_GENERALIZEDTIME *a);
+int ASN1_GENERALIZEDTIME_check(const ASN1_GENERALIZEDTIME *a);
ASN1_GENERALIZEDTIME *ASN1_GENERALIZEDTIME_set(ASN1_GENERALIZEDTIME *s,
time_t t);
ASN1_GENERALIZEDTIME *ASN1_GENERALIZEDTIME_adj(ASN1_GENERALIZEDTIME *s,
time_t t, int offset_day,
long offset_sec);
int ASN1_GENERALIZEDTIME_set_string(ASN1_GENERALIZEDTIME *s, const char *str);
+int ASN1_TIME_diff(int *pday, int *psec,
+ const ASN1_TIME *from, const ASN1_TIME *to);
DECLARE_ASN1_FUNCTIONS(ASN1_OCTET_STRING)
ASN1_OCTET_STRING *ASN1_OCTET_STRING_dup(const ASN1_OCTET_STRING *a);
diff --git a/crypto/openssl/crypto/asn1/asn1_locl.h b/crypto/openssl/crypto/asn1/asn1_locl.h
index 9f5ed84..4c004fa 100644
--- a/crypto/openssl/crypto/asn1/asn1_locl.h
+++ b/crypto/openssl/crypto/asn1/asn1_locl.h
@@ -59,6 +59,9 @@
/* Internal ASN1 structures and functions: not for application use */
+int asn1_utctime_to_tm(struct tm *tm, const ASN1_UTCTIME *d);
+int asn1_generalizedtime_to_tm(struct tm *tm, const ASN1_GENERALIZEDTIME *d);
+
/* ASN1 print context structure */
struct asn1_pctx_st {
diff --git a/crypto/openssl/crypto/asn1/t_x509.c b/crypto/openssl/crypto/asn1/t_x509.c
index 4e7c45d..8aab551 100644
--- a/crypto/openssl/crypto/asn1/t_x509.c
+++ b/crypto/openssl/crypto/asn1/t_x509.c
@@ -228,6 +228,21 @@ int X509_print_ex(BIO *bp, X509 *x, unsigned long nmflags,
}
}
+ if (!(cflag & X509_FLAG_NO_IDS)) {
+ if (ci->issuerUID) {
+ if (BIO_printf(bp, "%8sIssuer Unique ID: ", "") <= 0)
+ goto err;
+ if (!X509_signature_dump(bp, ci->issuerUID, 12))
+ goto err;
+ }
+ if (ci->subjectUID) {
+ if (BIO_printf(bp, "%8sSubject Unique ID: ", "") <= 0)
+ goto err;
+ if (!X509_signature_dump(bp, ci->subjectUID, 12))
+ goto err;
+ }
+ }
+
if (!(cflag & X509_FLAG_NO_EXTENSIONS))
X509V3_extensions_print(bp, "X509v3 extensions",
ci->extensions, cflag, 8);
diff --git a/crypto/openssl/crypto/asn1/x_crl.c b/crypto/openssl/crypto/asn1/x_crl.c
index e258c71..0279503 100644
--- a/crypto/openssl/crypto/asn1/x_crl.c
+++ b/crypto/openssl/crypto/asn1/x_crl.c
@@ -58,8 +58,8 @@
#include <stdio.h>
#include "cryptlib.h"
-#include "asn1_locl.h"
#include <openssl/asn1t.h>
+#include "asn1_locl.h"
#include <openssl/x509.h>
#include <openssl/x509v3.h>
@@ -341,6 +341,8 @@ ASN1_SEQUENCE_ref(X509_CRL, crl_cb, CRYPTO_LOCK_X509_CRL) = {
IMPLEMENT_ASN1_FUNCTIONS(X509_REVOKED)
+IMPLEMENT_ASN1_DUP_FUNCTION(X509_REVOKED)
+
IMPLEMENT_ASN1_FUNCTIONS(X509_CRL_INFO)
IMPLEMENT_ASN1_FUNCTIONS(X509_CRL)
diff --git a/crypto/openssl/crypto/asn1/x_x509.c b/crypto/openssl/crypto/asn1/x_x509.c
index f56e837..5f266a2 100644
--- a/crypto/openssl/crypto/asn1/x_x509.c
+++ b/crypto/openssl/crypto/asn1/x_x509.c
@@ -208,3 +208,23 @@ int i2d_X509_AUX(X509 *a, unsigned char **pp)
length += i2d_X509_CERT_AUX(a->aux, pp);
return length;
}
+
+int i2d_re_X509_tbs(X509 *x, unsigned char **pp)
+{
+ x->cert_info->enc.modified = 1;
+ return i2d_X509_CINF(x->cert_info, pp);
+}
+
+void X509_get0_signature(ASN1_BIT_STRING **psig, X509_ALGOR **palg,
+ const X509 *x)
+{
+ if (psig)
+ *psig = x->signature;
+ if (palg)
+ *palg = x->sig_alg;
+}
+
+int X509_get_signature_nid(const X509 *x)
+{
+ return OBJ_obj2nid(x->sig_alg->algorithm);
+}
diff --git a/crypto/openssl/crypto/bio/b_dump.c b/crypto/openssl/crypto/bio/b_dump.c
index 3293c72..ed8e521 100644
--- a/crypto/openssl/crypto/bio/b_dump.c
+++ b/crypto/openssl/crypto/bio/b_dump.c
@@ -182,3 +182,28 @@ int BIO_dump_indent(BIO *bp, const char *s, int len, int indent)
{
return BIO_dump_indent_cb(write_bio, bp, s, len, indent);
}
+
+int BIO_hex_string(BIO *out, int indent, int width, unsigned char *data,
+ int datalen)
+{
+ int i, j = 0;
+
+ if (datalen < 1)
+ return 1;
+
+ for (i = 0; i < datalen - 1; i++) {
+ if (i && !j)
+ BIO_printf(out, "%*s", indent, "");
+
+ BIO_printf(out, "%02X:", data[i]);
+
+ j = (j + 1) % width;
+ if (!j)
+ BIO_printf(out, "\n");
+ }
+
+ if (i && !j)
+ BIO_printf(out, "%*s", indent, "");
+ BIO_printf(out, "%02X", data[datalen - 1]);
+ return 1;
+}
diff --git a/crypto/openssl/crypto/bio/b_sock.c b/crypto/openssl/crypto/bio/b_sock.c
index bda882c..5bad0a2 100644
--- a/crypto/openssl/crypto/bio/b_sock.c
+++ b/crypto/openssl/crypto/bio/b_sock.c
@@ -225,13 +225,17 @@ int BIO_get_port(const char *str, unsigned short *port_ptr)
int BIO_sock_error(int sock)
{
int j, i;
- int size;
+ union {
+ size_t s;
+ int i;
+ } size;
# if defined(OPENSSL_SYS_BEOS_R5)
return 0;
# endif
- size = sizeof(int);
+ /* heuristic way to adapt for platforms that expect 64-bit optlen */
+ size.s = 0, size.i = sizeof(j);
/*
* Note: under Windows the third parameter is of type (char *) whereas
* under other systems it is (void *) if you don't have a cast it will
diff --git a/crypto/openssl/crypto/bio/bio.h b/crypto/openssl/crypto/bio/bio.h
index d583cc1..f78796b 100644
--- a/crypto/openssl/crypto/bio/bio.h
+++ b/crypto/openssl/crypto/bio/bio.h
@@ -174,6 +174,7 @@ extern "C" {
# define BIO_CTRL_DGRAM_SET_NEXT_TIMEOUT 45/* Next DTLS handshake timeout
* to adjust socket timeouts */
+# define BIO_CTRL_DGRAM_SET_DONT_FRAG 48
# define BIO_CTRL_DGRAM_GET_MTU_OVERHEAD 49
@@ -725,6 +726,9 @@ int BIO_dump_indent(BIO *b, const char *bytes, int len, int indent);
int BIO_dump_fp(FILE *fp, const char *s, int len);
int BIO_dump_indent_fp(FILE *fp, const char *s, int len, int indent);
# endif
+int BIO_hex_string(BIO *out, int indent, int width, unsigned char *data,
+ int datalen);
+
struct hostent *BIO_gethostbyname(const char *name);
/*-
* We might want a thread-safe interface too:
@@ -761,8 +765,8 @@ int BIO_dgram_sctp_wait_for_dry(BIO *b);
int BIO_dgram_sctp_msg_waiting(BIO *b);
# endif
BIO *BIO_new_fd(int fd, int close_flag);
-BIO *BIO_new_connect(char *host_port);
-BIO *BIO_new_accept(char *host_port);
+BIO *BIO_new_connect(const char *host_port);
+BIO *BIO_new_accept(const char *host_port);
int BIO_new_bio_pair(BIO **bio1, size_t writebuf1,
BIO **bio2, size_t writebuf2);
diff --git a/crypto/openssl/crypto/bio/bio_err.c b/crypto/openssl/crypto/bio/bio_err.c
index 6dd6162..d9007aa 100644
--- a/crypto/openssl/crypto/bio/bio_err.c
+++ b/crypto/openssl/crypto/bio/bio_err.c
@@ -1,6 +1,6 @@
/* crypto/bio/bio_err.c */
/* ====================================================================
- * Copyright (c) 1999-2011 The OpenSSL Project. All rights reserved.
+ * Copyright (c) 1999-2015 The OpenSSL Project. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/crypto/openssl/crypto/bio/bss_acpt.c b/crypto/openssl/crypto/bio/bss_acpt.c
index d08292c..4a5e39b 100644
--- a/crypto/openssl/crypto/bio/bss_acpt.c
+++ b/crypto/openssl/crypto/bio/bss_acpt.c
@@ -445,7 +445,7 @@ static int acpt_puts(BIO *bp, const char *str)
return (ret);
}
-BIO *BIO_new_accept(char *str)
+BIO *BIO_new_accept(const char *str)
{
BIO *ret;
diff --git a/crypto/openssl/crypto/bio/bss_conn.c b/crypto/openssl/crypto/bio/bss_conn.c
index 6a5e8de..42d0aff 100644
--- a/crypto/openssl/crypto/bio/bss_conn.c
+++ b/crypto/openssl/crypto/bio/bss_conn.c
@@ -585,7 +585,7 @@ static int conn_puts(BIO *bp, const char *str)
return (ret);
}
-BIO *BIO_new_connect(char *str)
+BIO *BIO_new_connect(const char *str)
{
BIO *ret;
diff --git a/crypto/openssl/crypto/bio/bss_dgram.c b/crypto/openssl/crypto/bio/bss_dgram.c
index e3e3dd0..7fcd831 100644
--- a/crypto/openssl/crypto/bio/bss_dgram.c
+++ b/crypto/openssl/crypto/bio/bss_dgram.c
@@ -65,7 +65,7 @@
#include <openssl/bio.h>
#ifndef OPENSSL_NO_DGRAM
-# if defined(OPENSSL_SYS_WIN32) || defined(OPENSSL_SYS_VMS)
+# if defined(OPENSSL_SYS_VMS)
# include <sys/timeb.h>
# endif
@@ -80,6 +80,10 @@
# define IP_MTU 14 /* linux is lame */
# endif
+# if OPENSSL_USE_IPV6 && !defined(IPPROTO_IPV6)
+# define IPPROTO_IPV6 41 /* windows is lame */
+# endif
+
# if defined(__FreeBSD__) && defined(IN6_IS_ADDR_V4MAPPED)
/* Standard definition causes type-punning problems. */
# undef IN6_IS_ADDR_V4MAPPED
@@ -496,8 +500,8 @@ static long dgram_ctrl(BIO *b, int cmd, long num, void *ptr)
int *ip;
struct sockaddr *to = NULL;
bio_dgram_data *data = NULL;
-# if defined(OPENSSL_SYS_LINUX) && (defined(IP_MTU_DISCOVER) || defined(IP_MTU))
int sockopt_val = 0;
+# if defined(OPENSSL_SYS_LINUX) && (defined(IP_MTU_DISCOVER) || defined(IP_MTU))
socklen_t sockopt_len; /* assume that system supporting IP_MTU is
* modern enough to define socklen_t */
socklen_t addr_len;
@@ -882,6 +886,61 @@ static long dgram_ctrl(BIO *b, int cmd, long num, void *ptr)
ret = 0;
break;
# endif
+ case BIO_CTRL_DGRAM_SET_DONT_FRAG:
+ sockopt_val = num ? 1 : 0;
+
+ switch (data->peer.sa.sa_family) {
+ case AF_INET:
+# if defined(IP_DONTFRAG)
+ if ((ret = setsockopt(b->num, IPPROTO_IP, IP_DONTFRAG,
+ &sockopt_val, sizeof(sockopt_val))) < 0) {
+ perror("setsockopt");
+ ret = -1;
+ }
+# elif defined(OPENSSL_SYS_LINUX) && defined(IP_MTU_DISCOVER) && defined (IP_PMTUDISC_PROBE)
+ if ((sockopt_val = num ? IP_PMTUDISC_PROBE : IP_PMTUDISC_DONT),
+ (ret = setsockopt(b->num, IPPROTO_IP, IP_MTU_DISCOVER,
+ &sockopt_val, sizeof(sockopt_val))) < 0) {
+ perror("setsockopt");
+ ret = -1;
+ }
+# elif defined(OPENSSL_SYS_WINDOWS) && defined(IP_DONTFRAGMENT)
+ if ((ret = setsockopt(b->num, IPPROTO_IP, IP_DONTFRAGMENT,
+ (const char *)&sockopt_val,
+ sizeof(sockopt_val))) < 0) {
+ perror("setsockopt");
+ ret = -1;
+ }
+# else
+ ret = -1;
+# endif
+ break;
+# if OPENSSL_USE_IPV6
+ case AF_INET6:
+# if defined(IPV6_DONTFRAG)
+ if ((ret = setsockopt(b->num, IPPROTO_IPV6, IPV6_DONTFRAG,
+ (const void *)&sockopt_val,
+ sizeof(sockopt_val))) < 0) {
+ perror("setsockopt");
+ ret = -1;
+ }
+# elif defined(OPENSSL_SYS_LINUX) && defined(IPV6_MTUDISCOVER)
+ if ((sockopt_val = num ? IP_PMTUDISC_PROBE : IP_PMTUDISC_DONT),
+ (ret = setsockopt(b->num, IPPROTO_IPV6, IPV6_MTU_DISCOVER,
+ &sockopt_val, sizeof(sockopt_val))) < 0) {
+ perror("setsockopt");
+ ret = -1;
+ }
+# else
+ ret = -1;
+# endif
+ break;
+# endif
+ default:
+ ret = -1;
+ break;
+ }
+ break;
case BIO_CTRL_DGRAM_GET_MTU_OVERHEAD:
ret = dgram_get_mtu_overhead(data);
break;
@@ -1995,11 +2054,22 @@ int BIO_dgram_non_fatal_error(int err)
static void get_current_time(struct timeval *t)
{
-# ifdef OPENSSL_SYS_WIN32
- struct _timeb tb;
- _ftime(&tb);
- t->tv_sec = (long)tb.time;
- t->tv_usec = (long)tb.millitm * 1000;
+# if defined(_WIN32)
+ SYSTEMTIME st;
+ union {
+ unsigned __int64 ul;
+ FILETIME ft;
+ } now;
+
+ GetSystemTime(&st);
+ SystemTimeToFileTime(&st, &now.ft);
+# ifdef __MINGW32__
+ now.ul -= 116444736000000000ULL;
+# else
+ now.ul -= 116444736000000000UI64; /* re-bias to 1/1/1970 */
+# endif
+ t->tv_sec = (long)(now.ul / 10000000);
+ t->tv_usec = ((int)(now.ul % 10000000)) / 10;
# elif defined(OPENSSL_SYS_VMS)
struct timeb tb;
ftime(&tb);
diff --git a/crypto/openssl/crypto/bio/bss_fd.c b/crypto/openssl/crypto/bio/bss_fd.c
index ccef578..5f4e344 100644
--- a/crypto/openssl/crypto/bio/bss_fd.c
+++ b/crypto/openssl/crypto/bio/bss_fd.c
@@ -63,9 +63,27 @@
#if defined(OPENSSL_NO_POSIX_IO)
/*
- * One can argue that one should implement dummy placeholder for
- * BIO_s_fd here...
+ * Dummy placeholder for BIO_s_fd...
*/
+BIO *BIO_new_fd(int fd, int close_flag)
+{
+ return NULL;
+}
+
+int BIO_fd_non_fatal_error(int err)
+{
+ return 0;
+}
+
+int BIO_fd_should_retry(int i)
+{
+ return 0;
+}
+
+BIO_METHOD *BIO_s_fd(void)
+{
+ return NULL;
+}
#else
/*
* As for unconditional usage of "UPLINK" interface in this module.
diff --git a/crypto/openssl/crypto/bn/Makefile b/crypto/openssl/crypto/bn/Makefile
index 3d0158c..215855e 100644
--- a/crypto/openssl/crypto/bn/Makefile
+++ b/crypto/openssl/crypto/bn/Makefile
@@ -77,6 +77,12 @@ sparcv9a-mont.s: asm/sparcv9a-mont.pl
$(PERL) asm/sparcv9a-mont.pl $(CFLAGS) > $@
sparcv9-mont.s: asm/sparcv9-mont.pl
$(PERL) asm/sparcv9-mont.pl $(CFLAGS) > $@
+vis3-mont.s: asm/vis3-mont.pl
+ $(PERL) asm/vis3-mont.pl $(CFLAGS) > $@
+sparct4-mont.S: asm/sparct4-mont.pl
+ $(PERL) asm/sparct4-mont.pl $(CFLAGS) > $@
+sparcv9-gf2m.S: asm/sparcv9-gf2m.pl
+ $(PERL) asm/sparcv9-gf2m.pl $(CFLAGS) > $@
bn-mips3.o: asm/mips3.s
@if [ "$(CC)" = "gcc" ]; then \
@@ -102,8 +108,10 @@ x86_64-mont5.s: asm/x86_64-mont5.pl
$(PERL) asm/x86_64-mont5.pl $(PERLASM_SCHEME) > $@
x86_64-gf2m.s: asm/x86_64-gf2m.pl
$(PERL) asm/x86_64-gf2m.pl $(PERLASM_SCHEME) > $@
-modexp512-x86_64.s: asm/modexp512-x86_64.pl
- $(PERL) asm/modexp512-x86_64.pl $(PERLASM_SCHEME) > $@
+rsaz-x86_64.s: asm/rsaz-x86_64.pl
+ $(PERL) asm/rsaz-x86_64.pl $(PERLASM_SCHEME) > $@
+rsaz-avx2.s: asm/rsaz-avx2.pl
+ $(PERL) asm/rsaz-avx2.pl $(PERLASM_SCHEME) > $@
bn-ia64.s: asm/ia64.S
$(CC) $(CFLAGS) -E asm/ia64.S > $@
@@ -125,14 +133,15 @@ ppc-mont.s: asm/ppc-mont.pl;$(PERL) asm/ppc-mont.pl $(PERLASM_SCHEME) $@
ppc64-mont.s: asm/ppc64-mont.pl;$(PERL) asm/ppc64-mont.pl $(PERLASM_SCHEME) $@
alpha-mont.s: asm/alpha-mont.pl
- (preproc=/tmp/$$$$.$@; trap "rm $$preproc" INT; \
+ (preproc=$$$$.$@.S; trap "rm $$preproc" INT; \
$(PERL) asm/alpha-mont.pl > $$preproc && \
- $(CC) -E $$preproc > $@ && rm $$preproc)
+ $(CC) -E -P $$preproc > $@ && rm $$preproc)
# GNU make "catch all"
-%-mont.s: asm/%-mont.pl; $(PERL) $< $(PERLASM_SCHEME) $@
+%-mont.S: asm/%-mont.pl; $(PERL) $< $(PERLASM_SCHEME) $@
%-gf2m.S: asm/%-gf2m.pl; $(PERL) $< $(PERLASM_SCHEME) $@
+armv4-mont.o: armv4-mont.S
armv4-gf2m.o: armv4-gf2m.S
files:
@@ -244,6 +253,7 @@ bn_exp.o: ../../include/openssl/lhash.h ../../include/openssl/opensslconf.h
bn_exp.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
bn_exp.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h
bn_exp.o: ../../include/openssl/symhacks.h ../cryptlib.h bn_exp.c bn_lcl.h
+bn_exp.o: rsaz_exp.h
bn_exp2.o: ../../e_os.h ../../include/openssl/bio.h ../../include/openssl/bn.h
bn_exp2.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
bn_exp2.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h
diff --git a/crypto/openssl/crypto/bn/asm/armv4-gf2m.pl b/crypto/openssl/crypto/bn/asm/armv4-gf2m.pl
index c52e0b7..8f529c9 100755
--- a/crypto/openssl/crypto/bn/asm/armv4-gf2m.pl
+++ b/crypto/openssl/crypto/bn/asm/armv4-gf2m.pl
@@ -20,48 +20,26 @@
# length, more for longer keys. Even though NEON 1x1 multiplication
# runs in even less cycles, ~30, improvement is measurable only on
# longer keys. One has to optimize code elsewhere to get NEON glow...
+#
+# April 2014
+#
+# Double bn_GF2m_mul_2x2 performance by using algorithm from paper
+# referred below, which improves ECDH and ECDSA verify benchmarks
+# by 18-40%.
+#
+# Câmara, D.; Gouvêa, C. P. L.; López, J. & Dahab, R.: Fast Software
+# Polynomial Multiplication on ARM Processors using the NEON Engine.
+#
+# http://conradoplg.cryptoland.net/files/2010/12/mocrysen13.pdf
while (($output=shift) && ($output!~/^\w[\w\-]*\.\w+$/)) {}
open STDOUT,">$output";
-sub Dlo() { shift=~m|q([1]?[0-9])|?"d".($1*2):""; }
-sub Dhi() { shift=~m|q([1]?[0-9])|?"d".($1*2+1):""; }
-sub Q() { shift=~m|d([1-3]?[02468])|?"q".($1/2):""; }
-
$code=<<___;
#include "arm_arch.h"
.text
.code 32
-
-#if __ARM_ARCH__>=7
-.fpu neon
-
-.type mul_1x1_neon,%function
-.align 5
-mul_1x1_neon:
- vshl.u64 `&Dlo("q1")`,d16,#8 @ q1-q3 are slided $a
- vmull.p8 `&Q("d0")`,d16,d17 @ a·bb
- vshl.u64 `&Dlo("q2")`,d16,#16
- vmull.p8 q1,`&Dlo("q1")`,d17 @ a<<8·bb
- vshl.u64 `&Dlo("q3")`,d16,#24
- vmull.p8 q2,`&Dlo("q2")`,d17 @ a<<16·bb
- vshr.u64 `&Dlo("q1")`,#8
- vmull.p8 q3,`&Dlo("q3")`,d17 @ a<<24·bb
- vshl.u64 `&Dhi("q1")`,#24
- veor d0,`&Dlo("q1")`
- vshr.u64 `&Dlo("q2")`,#16
- veor d0,`&Dhi("q1")`
- vshl.u64 `&Dhi("q2")`,#16
- veor d0,`&Dlo("q2")`
- vshr.u64 `&Dlo("q3")`,#24
- veor d0,`&Dhi("q2")`
- vshl.u64 `&Dhi("q3")`,#8
- veor d0,`&Dlo("q3")`
- veor d0,`&Dhi("q3")`
- bx lr
-.size mul_1x1_neon,.-mul_1x1_neon
-#endif
___
################
# private interface to mul_1x1_ialu
@@ -159,56 +137,17 @@ ___
# void bn_GF2m_mul_2x2(BN_ULONG *r,
# BN_ULONG a1,BN_ULONG a0,
# BN_ULONG b1,BN_ULONG b0); # r[3..0]=a1a0·b1b0
-
-($A1,$B1,$A0,$B0,$A1B1,$A0B0)=map("d$_",(18..23));
-
+{
$code.=<<___;
.global bn_GF2m_mul_2x2
.type bn_GF2m_mul_2x2,%function
.align 5
bn_GF2m_mul_2x2:
-#if __ARM_ARCH__>=7
+#if __ARM_MAX_ARCH__>=7
ldr r12,.LOPENSSL_armcap
.Lpic: ldr r12,[pc,r12]
tst r12,#1
- beq .Lialu
-
- veor $A1,$A1
- vmov.32 $B1,r3,r3 @ two copies of b1
- vmov.32 ${A1}[0],r1 @ a1
-
- veor $A0,$A0
- vld1.32 ${B0}[],[sp,:32] @ two copies of b0
- vmov.32 ${A0}[0],r2 @ a0
- mov r12,lr
-
- vmov d16,$A1
- vmov d17,$B1
- bl mul_1x1_neon @ a1·b1
- vmov $A1B1,d0
-
- vmov d16,$A0
- vmov d17,$B0
- bl mul_1x1_neon @ a0·b0
- vmov $A0B0,d0
-
- veor d16,$A0,$A1
- veor d17,$B0,$B1
- veor $A0,$A0B0,$A1B1
- bl mul_1x1_neon @ (a0+a1)·(b0+b1)
-
- veor d0,$A0 @ (a0+a1)·(b0+b1)-a0·b0-a1·b1
- vshl.u64 d1,d0,#32
- vshr.u64 d0,d0,#32
- veor $A0B0,d1
- veor $A1B1,d0
- vst1.32 {${A0B0}[0]},[r0,:32]!
- vst1.32 {${A0B0}[1]},[r0,:32]!
- vst1.32 {${A1B1}[0]},[r0,:32]!
- vst1.32 {${A1B1}[1]},[r0,:32]
- bx r12
-.align 4
-.Lialu:
+ bne .LNEON
#endif
___
$ret="r10"; # reassigned 1st argument
@@ -260,8 +199,72 @@ $code.=<<___;
moveq pc,lr @ be binary compatible with V4, yet
bx lr @ interoperable with Thumb ISA:-)
#endif
+___
+}
+{
+my ($r,$t0,$t1,$t2,$t3)=map("q$_",(0..3,8..12));
+my ($a,$b,$k48,$k32,$k16)=map("d$_",(26..31));
+
+$code.=<<___;
+#if __ARM_MAX_ARCH__>=7
+.arch armv7-a
+.fpu neon
+
+.align 5
+.LNEON:
+ ldr r12, [sp] @ 5th argument
+ vmov.32 $a, r2, r1
+ vmov.32 $b, r12, r3
+ vmov.i64 $k48, #0x0000ffffffffffff
+ vmov.i64 $k32, #0x00000000ffffffff
+ vmov.i64 $k16, #0x000000000000ffff
+
+ vext.8 $t0#lo, $a, $a, #1 @ A1
+ vmull.p8 $t0, $t0#lo, $b @ F = A1*B
+ vext.8 $r#lo, $b, $b, #1 @ B1
+ vmull.p8 $r, $a, $r#lo @ E = A*B1
+ vext.8 $t1#lo, $a, $a, #2 @ A2
+ vmull.p8 $t1, $t1#lo, $b @ H = A2*B
+ vext.8 $t3#lo, $b, $b, #2 @ B2
+ vmull.p8 $t3, $a, $t3#lo @ G = A*B2
+ vext.8 $t2#lo, $a, $a, #3 @ A3
+ veor $t0, $t0, $r @ L = E + F
+ vmull.p8 $t2, $t2#lo, $b @ J = A3*B
+ vext.8 $r#lo, $b, $b, #3 @ B3
+ veor $t1, $t1, $t3 @ M = G + H
+ vmull.p8 $r, $a, $r#lo @ I = A*B3
+ veor $t0#lo, $t0#lo, $t0#hi @ t0 = (L) (P0 + P1) << 8
+ vand $t0#hi, $t0#hi, $k48
+ vext.8 $t3#lo, $b, $b, #4 @ B4
+ veor $t1#lo, $t1#lo, $t1#hi @ t1 = (M) (P2 + P3) << 16
+ vand $t1#hi, $t1#hi, $k32
+ vmull.p8 $t3, $a, $t3#lo @ K = A*B4
+ veor $t2, $t2, $r @ N = I + J
+ veor $t0#lo, $t0#lo, $t0#hi
+ veor $t1#lo, $t1#lo, $t1#hi
+ veor $t2#lo, $t2#lo, $t2#hi @ t2 = (N) (P4 + P5) << 24
+ vand $t2#hi, $t2#hi, $k16
+ vext.8 $t0, $t0, $t0, #15
+ veor $t3#lo, $t3#lo, $t3#hi @ t3 = (K) (P6 + P7) << 32
+ vmov.i64 $t3#hi, #0
+ vext.8 $t1, $t1, $t1, #14
+ veor $t2#lo, $t2#lo, $t2#hi
+ vmull.p8 $r, $a, $b @ D = A*B
+ vext.8 $t3, $t3, $t3, #12
+ vext.8 $t2, $t2, $t2, #13
+ veor $t0, $t0, $t1
+ veor $t2, $t2, $t3
+ veor $r, $r, $t0
+ veor $r, $r, $t2
+
+ vst1.32 {$r}, [r0]
+ ret @ bx lr
+#endif
+___
+}
+$code.=<<___;
.size bn_GF2m_mul_2x2,.-bn_GF2m_mul_2x2
-#if __ARM_ARCH__>=7
+#if __ARM_MAX_ARCH__>=7
.align 5
.LOPENSSL_armcap:
.word OPENSSL_armcap_P-(.Lpic+8)
@@ -269,10 +272,18 @@ $code.=<<___;
.asciz "GF(2^m) Multiplication for ARMv4/NEON, CRYPTOGAMS by <appro\@openssl.org>"
.align 5
+#if __ARM_MAX_ARCH__>=7
.comm OPENSSL_armcap_P,4,4
+#endif
___
-$code =~ s/\`([^\`]*)\`/eval $1/gem;
-$code =~ s/\bbx\s+lr\b/.word\t0xe12fff1e/gm; # make it possible to compile with -march=armv4
-print $code;
+foreach (split("\n",$code)) {
+ s/\`([^\`]*)\`/eval $1/geo;
+
+ s/\bq([0-9]+)#(lo|hi)/sprintf "d%d",2*$1+($2 eq "hi")/geo or
+ s/\bret\b/bx lr/go or
+ s/\bbx\s+lr\b/.word\t0xe12fff1e/go; # make it possible to compile with -march=armv4
+
+ print $_,"\n";
+}
close STDOUT; # enforce flush
diff --git a/crypto/openssl/crypto/bn/asm/armv4-mont.pl b/crypto/openssl/crypto/bn/asm/armv4-mont.pl
index f78a8b5..1d330e9 100755
--- a/crypto/openssl/crypto/bn/asm/armv4-mont.pl
+++ b/crypto/openssl/crypto/bn/asm/armv4-mont.pl
@@ -1,7 +1,7 @@
#!/usr/bin/env perl
# ====================================================================
-# Written by Andy Polyakov <appro@fy.chalmers.se> for the OpenSSL
+# Written by Andy Polyakov <appro@openssl.org> for the OpenSSL
# project. The module is, however, dual licensed under OpenSSL and
# CRYPTOGAMS licenses depending on where you obtain it. For further
# details see http://www.openssl.org/~appro/cryptogams/.
@@ -23,6 +23,21 @@
# than 1/2KB. Windows CE port would be trivial, as it's exclusively
# about decorations, ABI and instruction syntax are identical.
+# November 2013
+#
+# Add NEON code path, which handles lengths divisible by 8. RSA/DSA
+# performance improvement on Cortex-A8 is ~45-100% depending on key
+# length, more for longer keys. On Cortex-A15 the span is ~10-105%.
+# On Snapdragon S4 improvement was measured to vary from ~70% to
+# incredible ~380%, yes, 4.8x faster, for RSA4096 sign. But this is
+# rather because original integer-only code seems to perform
+# suboptimally on S4. Situation on Cortex-A9 is unfortunately
+# different. It's being looked into, but the trouble is that
+# performance for vectors longer than 256 bits is actually couple
+# of percent worse than for integer-only code. The code is chosen
+# for execution on all NEON-capable processors, because gain on
+# others outweighs the marginal loss on Cortex-A9.
+
while (($output=shift) && ($output!~/^\w[\w\-]*\.\w+$/)) {}
open STDOUT,">$output";
@@ -52,16 +67,40 @@ $_n0="$num,#14*4";
$_num="$num,#15*4"; $_bpend=$_num;
$code=<<___;
+#include "arm_arch.h"
+
.text
+.code 32
+
+#if __ARM_MAX_ARCH__>=7
+.align 5
+.LOPENSSL_armcap:
+.word OPENSSL_armcap_P-bn_mul_mont
+#endif
.global bn_mul_mont
.type bn_mul_mont,%function
-.align 2
+.align 5
bn_mul_mont:
+ ldr ip,[sp,#4] @ load num
stmdb sp!,{r0,r2} @ sp points at argument block
- ldr $num,[sp,#3*4] @ load num
- cmp $num,#2
+#if __ARM_MAX_ARCH__>=7
+ tst ip,#7
+ bne .Lialu
+ adr r0,bn_mul_mont
+ ldr r2,.LOPENSSL_armcap
+ ldr r0,[r0,r2]
+ tst r0,#1 @ NEON available?
+ ldmia sp, {r0,r2}
+ beq .Lialu
+ add sp,sp,#8
+ b bn_mul8x_mont_neon
+.align 4
+.Lialu:
+#endif
+ cmp ip,#2
+ mov $num,ip @ load num
movlt r0,#0
addlt sp,sp,#2*4
blt .Labrt
@@ -191,14 +230,447 @@ bn_mul_mont:
ldmia sp!,{r4-r12,lr} @ restore registers
add sp,sp,#2*4 @ skip over {r0,r2}
mov r0,#1
-.Labrt: tst lr,#1
+.Labrt:
+#if __ARM_ARCH__>=5
+ ret @ bx lr
+#else
+ tst lr,#1
moveq pc,lr @ be binary compatible with V4, yet
bx lr @ interoperable with Thumb ISA:-)
+#endif
.size bn_mul_mont,.-bn_mul_mont
-.asciz "Montgomery multiplication for ARMv4, CRYPTOGAMS by <appro\@openssl.org>"
+___
+{
+sub Dlo() { shift=~m|q([1]?[0-9])|?"d".($1*2):""; }
+sub Dhi() { shift=~m|q([1]?[0-9])|?"d".($1*2+1):""; }
+
+my ($A0,$A1,$A2,$A3)=map("d$_",(0..3));
+my ($N0,$N1,$N2,$N3)=map("d$_",(4..7));
+my ($Z,$Temp)=("q4","q5");
+my ($A0xB,$A1xB,$A2xB,$A3xB,$A4xB,$A5xB,$A6xB,$A7xB)=map("q$_",(6..13));
+my ($Bi,$Ni,$M0)=map("d$_",(28..31));
+my $zero=&Dlo($Z);
+my $temp=&Dlo($Temp);
+
+my ($rptr,$aptr,$bptr,$nptr,$n0,$num)=map("r$_",(0..5));
+my ($tinptr,$toutptr,$inner,$outer)=map("r$_",(6..9));
+
+$code.=<<___;
+#if __ARM_MAX_ARCH__>=7
+.arch armv7-a
+.fpu neon
+
+.type bn_mul8x_mont_neon,%function
+.align 5
+bn_mul8x_mont_neon:
+ mov ip,sp
+ stmdb sp!,{r4-r11}
+ vstmdb sp!,{d8-d15} @ ABI specification says so
+ ldmia ip,{r4-r5} @ load rest of parameter block
+
+ sub $toutptr,sp,#16
+ vld1.32 {${Bi}[0]}, [$bptr,:32]!
+ sub $toutptr,$toutptr,$num,lsl#4
+ vld1.32 {$A0-$A3}, [$aptr]! @ can't specify :32 :-(
+ and $toutptr,$toutptr,#-64
+ vld1.32 {${M0}[0]}, [$n0,:32]
+ mov sp,$toutptr @ alloca
+ veor $zero,$zero,$zero
+ subs $inner,$num,#8
+ vzip.16 $Bi,$zero
+
+ vmull.u32 $A0xB,$Bi,${A0}[0]
+ vmull.u32 $A1xB,$Bi,${A0}[1]
+ vmull.u32 $A2xB,$Bi,${A1}[0]
+ vshl.i64 $temp,`&Dhi("$A0xB")`,#16
+ vmull.u32 $A3xB,$Bi,${A1}[1]
+
+ vadd.u64 $temp,$temp,`&Dlo("$A0xB")`
+ veor $zero,$zero,$zero
+ vmul.u32 $Ni,$temp,$M0
+
+ vmull.u32 $A4xB,$Bi,${A2}[0]
+ vld1.32 {$N0-$N3}, [$nptr]!
+ vmull.u32 $A5xB,$Bi,${A2}[1]
+ vmull.u32 $A6xB,$Bi,${A3}[0]
+ vzip.16 $Ni,$zero
+ vmull.u32 $A7xB,$Bi,${A3}[1]
+
+ bne .LNEON_1st
+
+ @ special case for num=8, everything is in register bank...
+
+ vmlal.u32 $A0xB,$Ni,${N0}[0]
+ sub $outer,$num,#1
+ vmlal.u32 $A1xB,$Ni,${N0}[1]
+ vmlal.u32 $A2xB,$Ni,${N1}[0]
+ vmlal.u32 $A3xB,$Ni,${N1}[1]
+
+ vmlal.u32 $A4xB,$Ni,${N2}[0]
+ vmov $Temp,$A0xB
+ vmlal.u32 $A5xB,$Ni,${N2}[1]
+ vmov $A0xB,$A1xB
+ vmlal.u32 $A6xB,$Ni,${N3}[0]
+ vmov $A1xB,$A2xB
+ vmlal.u32 $A7xB,$Ni,${N3}[1]
+ vmov $A2xB,$A3xB
+ vmov $A3xB,$A4xB
+ vshr.u64 $temp,$temp,#16
+ vmov $A4xB,$A5xB
+ vmov $A5xB,$A6xB
+ vadd.u64 $temp,$temp,`&Dhi("$Temp")`
+ vmov $A6xB,$A7xB
+ veor $A7xB,$A7xB
+ vshr.u64 $temp,$temp,#16
+
+ b .LNEON_outer8
+
+.align 4
+.LNEON_outer8:
+ vld1.32 {${Bi}[0]}, [$bptr,:32]!
+ veor $zero,$zero,$zero
+ vzip.16 $Bi,$zero
+ vadd.u64 `&Dlo("$A0xB")`,`&Dlo("$A0xB")`,$temp
+
+ vmlal.u32 $A0xB,$Bi,${A0}[0]
+ vmlal.u32 $A1xB,$Bi,${A0}[1]
+ vmlal.u32 $A2xB,$Bi,${A1}[0]
+ vshl.i64 $temp,`&Dhi("$A0xB")`,#16
+ vmlal.u32 $A3xB,$Bi,${A1}[1]
+
+ vadd.u64 $temp,$temp,`&Dlo("$A0xB")`
+ veor $zero,$zero,$zero
+ subs $outer,$outer,#1
+ vmul.u32 $Ni,$temp,$M0
+
+ vmlal.u32 $A4xB,$Bi,${A2}[0]
+ vmlal.u32 $A5xB,$Bi,${A2}[1]
+ vmlal.u32 $A6xB,$Bi,${A3}[0]
+ vzip.16 $Ni,$zero
+ vmlal.u32 $A7xB,$Bi,${A3}[1]
+
+ vmlal.u32 $A0xB,$Ni,${N0}[0]
+ vmlal.u32 $A1xB,$Ni,${N0}[1]
+ vmlal.u32 $A2xB,$Ni,${N1}[0]
+ vmlal.u32 $A3xB,$Ni,${N1}[1]
+
+ vmlal.u32 $A4xB,$Ni,${N2}[0]
+ vmov $Temp,$A0xB
+ vmlal.u32 $A5xB,$Ni,${N2}[1]
+ vmov $A0xB,$A1xB
+ vmlal.u32 $A6xB,$Ni,${N3}[0]
+ vmov $A1xB,$A2xB
+ vmlal.u32 $A7xB,$Ni,${N3}[1]
+ vmov $A2xB,$A3xB
+ vmov $A3xB,$A4xB
+ vshr.u64 $temp,$temp,#16
+ vmov $A4xB,$A5xB
+ vmov $A5xB,$A6xB
+ vadd.u64 $temp,$temp,`&Dhi("$Temp")`
+ vmov $A6xB,$A7xB
+ veor $A7xB,$A7xB
+ vshr.u64 $temp,$temp,#16
+
+ bne .LNEON_outer8
+
+ vadd.u64 `&Dlo("$A0xB")`,`&Dlo("$A0xB")`,$temp
+ mov $toutptr,sp
+ vshr.u64 $temp,`&Dlo("$A0xB")`,#16
+ mov $inner,$num
+ vadd.u64 `&Dhi("$A0xB")`,`&Dhi("$A0xB")`,$temp
+ add $tinptr,sp,#16
+ vshr.u64 $temp,`&Dhi("$A0xB")`,#16
+ vzip.16 `&Dlo("$A0xB")`,`&Dhi("$A0xB")`
+
+ b .LNEON_tail2
+
+.align 4
+.LNEON_1st:
+ vmlal.u32 $A0xB,$Ni,${N0}[0]
+ vld1.32 {$A0-$A3}, [$aptr]!
+ vmlal.u32 $A1xB,$Ni,${N0}[1]
+ subs $inner,$inner,#8
+ vmlal.u32 $A2xB,$Ni,${N1}[0]
+ vmlal.u32 $A3xB,$Ni,${N1}[1]
+
+ vmlal.u32 $A4xB,$Ni,${N2}[0]
+ vld1.32 {$N0-$N1}, [$nptr]!
+ vmlal.u32 $A5xB,$Ni,${N2}[1]
+ vst1.64 {$A0xB-$A1xB}, [$toutptr,:256]!
+ vmlal.u32 $A6xB,$Ni,${N3}[0]
+ vmlal.u32 $A7xB,$Ni,${N3}[1]
+ vst1.64 {$A2xB-$A3xB}, [$toutptr,:256]!
+
+ vmull.u32 $A0xB,$Bi,${A0}[0]
+ vld1.32 {$N2-$N3}, [$nptr]!
+ vmull.u32 $A1xB,$Bi,${A0}[1]
+ vst1.64 {$A4xB-$A5xB}, [$toutptr,:256]!
+ vmull.u32 $A2xB,$Bi,${A1}[0]
+ vmull.u32 $A3xB,$Bi,${A1}[1]
+ vst1.64 {$A6xB-$A7xB}, [$toutptr,:256]!
+
+ vmull.u32 $A4xB,$Bi,${A2}[0]
+ vmull.u32 $A5xB,$Bi,${A2}[1]
+ vmull.u32 $A6xB,$Bi,${A3}[0]
+ vmull.u32 $A7xB,$Bi,${A3}[1]
+
+ bne .LNEON_1st
+
+ vmlal.u32 $A0xB,$Ni,${N0}[0]
+ add $tinptr,sp,#16
+ vmlal.u32 $A1xB,$Ni,${N0}[1]
+ sub $aptr,$aptr,$num,lsl#2 @ rewind $aptr
+ vmlal.u32 $A2xB,$Ni,${N1}[0]
+ vld1.64 {$Temp}, [sp,:128]
+ vmlal.u32 $A3xB,$Ni,${N1}[1]
+ sub $outer,$num,#1
+
+ vmlal.u32 $A4xB,$Ni,${N2}[0]
+ vst1.64 {$A0xB-$A1xB}, [$toutptr,:256]!
+ vmlal.u32 $A5xB,$Ni,${N2}[1]
+ vshr.u64 $temp,$temp,#16
+ vld1.64 {$A0xB}, [$tinptr, :128]!
+ vmlal.u32 $A6xB,$Ni,${N3}[0]
+ vst1.64 {$A2xB-$A3xB}, [$toutptr,:256]!
+ vmlal.u32 $A7xB,$Ni,${N3}[1]
+
+ vst1.64 {$A4xB-$A5xB}, [$toutptr,:256]!
+ vadd.u64 $temp,$temp,`&Dhi("$Temp")`
+ veor $Z,$Z,$Z
+ vst1.64 {$A6xB-$A7xB}, [$toutptr,:256]!
+ vld1.64 {$A1xB-$A2xB}, [$tinptr, :256]!
+ vst1.64 {$Z}, [$toutptr,:128]
+ vshr.u64 $temp,$temp,#16
+
+ b .LNEON_outer
+
+.align 4
+.LNEON_outer:
+ vld1.32 {${Bi}[0]}, [$bptr,:32]!
+ sub $nptr,$nptr,$num,lsl#2 @ rewind $nptr
+ vld1.32 {$A0-$A3}, [$aptr]!
+ veor $zero,$zero,$zero
+ mov $toutptr,sp
+ vzip.16 $Bi,$zero
+ sub $inner,$num,#8
+ vadd.u64 `&Dlo("$A0xB")`,`&Dlo("$A0xB")`,$temp
+
+ vmlal.u32 $A0xB,$Bi,${A0}[0]
+ vld1.64 {$A3xB-$A4xB},[$tinptr,:256]!
+ vmlal.u32 $A1xB,$Bi,${A0}[1]
+ vmlal.u32 $A2xB,$Bi,${A1}[0]
+ vld1.64 {$A5xB-$A6xB},[$tinptr,:256]!
+ vmlal.u32 $A3xB,$Bi,${A1}[1]
+
+ vshl.i64 $temp,`&Dhi("$A0xB")`,#16
+ veor $zero,$zero,$zero
+ vadd.u64 $temp,$temp,`&Dlo("$A0xB")`
+ vld1.64 {$A7xB},[$tinptr,:128]!
+ vmul.u32 $Ni,$temp,$M0
+
+ vmlal.u32 $A4xB,$Bi,${A2}[0]
+ vld1.32 {$N0-$N3}, [$nptr]!
+ vmlal.u32 $A5xB,$Bi,${A2}[1]
+ vmlal.u32 $A6xB,$Bi,${A3}[0]
+ vzip.16 $Ni,$zero
+ vmlal.u32 $A7xB,$Bi,${A3}[1]
+
+.LNEON_inner:
+ vmlal.u32 $A0xB,$Ni,${N0}[0]
+ vld1.32 {$A0-$A3}, [$aptr]!
+ vmlal.u32 $A1xB,$Ni,${N0}[1]
+ subs $inner,$inner,#8
+ vmlal.u32 $A2xB,$Ni,${N1}[0]
+ vmlal.u32 $A3xB,$Ni,${N1}[1]
+ vst1.64 {$A0xB-$A1xB}, [$toutptr,:256]!
+
+ vmlal.u32 $A4xB,$Ni,${N2}[0]
+ vld1.64 {$A0xB}, [$tinptr, :128]!
+ vmlal.u32 $A5xB,$Ni,${N2}[1]
+ vst1.64 {$A2xB-$A3xB}, [$toutptr,:256]!
+ vmlal.u32 $A6xB,$Ni,${N3}[0]
+ vld1.64 {$A1xB-$A2xB}, [$tinptr, :256]!
+ vmlal.u32 $A7xB,$Ni,${N3}[1]
+ vst1.64 {$A4xB-$A5xB}, [$toutptr,:256]!
+
+ vmlal.u32 $A0xB,$Bi,${A0}[0]
+ vld1.64 {$A3xB-$A4xB}, [$tinptr, :256]!
+ vmlal.u32 $A1xB,$Bi,${A0}[1]
+ vst1.64 {$A6xB-$A7xB}, [$toutptr,:256]!
+ vmlal.u32 $A2xB,$Bi,${A1}[0]
+ vld1.64 {$A5xB-$A6xB}, [$tinptr, :256]!
+ vmlal.u32 $A3xB,$Bi,${A1}[1]
+ vld1.32 {$N0-$N3}, [$nptr]!
+
+ vmlal.u32 $A4xB,$Bi,${A2}[0]
+ vld1.64 {$A7xB}, [$tinptr, :128]!
+ vmlal.u32 $A5xB,$Bi,${A2}[1]
+ vmlal.u32 $A6xB,$Bi,${A3}[0]
+ vmlal.u32 $A7xB,$Bi,${A3}[1]
+
+ bne .LNEON_inner
+
+ vmlal.u32 $A0xB,$Ni,${N0}[0]
+ add $tinptr,sp,#16
+ vmlal.u32 $A1xB,$Ni,${N0}[1]
+ sub $aptr,$aptr,$num,lsl#2 @ rewind $aptr
+ vmlal.u32 $A2xB,$Ni,${N1}[0]
+ vld1.64 {$Temp}, [sp,:128]
+ vmlal.u32 $A3xB,$Ni,${N1}[1]
+ subs $outer,$outer,#1
+
+ vmlal.u32 $A4xB,$Ni,${N2}[0]
+ vst1.64 {$A0xB-$A1xB}, [$toutptr,:256]!
+ vmlal.u32 $A5xB,$Ni,${N2}[1]
+ vld1.64 {$A0xB}, [$tinptr, :128]!
+ vshr.u64 $temp,$temp,#16
+ vst1.64 {$A2xB-$A3xB}, [$toutptr,:256]!
+ vmlal.u32 $A6xB,$Ni,${N3}[0]
+ vld1.64 {$A1xB-$A2xB}, [$tinptr, :256]!
+ vmlal.u32 $A7xB,$Ni,${N3}[1]
+
+ vst1.64 {$A4xB-$A5xB}, [$toutptr,:256]!
+ vadd.u64 $temp,$temp,`&Dhi("$Temp")`
+ vst1.64 {$A6xB-$A7xB}, [$toutptr,:256]!
+ vshr.u64 $temp,$temp,#16
+
+ bne .LNEON_outer
+
+ mov $toutptr,sp
+ mov $inner,$num
+
+.LNEON_tail:
+ vadd.u64 `&Dlo("$A0xB")`,`&Dlo("$A0xB")`,$temp
+ vld1.64 {$A3xB-$A4xB}, [$tinptr, :256]!
+ vshr.u64 $temp,`&Dlo("$A0xB")`,#16
+ vadd.u64 `&Dhi("$A0xB")`,`&Dhi("$A0xB")`,$temp
+ vld1.64 {$A5xB-$A6xB}, [$tinptr, :256]!
+ vshr.u64 $temp,`&Dhi("$A0xB")`,#16
+ vld1.64 {$A7xB}, [$tinptr, :128]!
+ vzip.16 `&Dlo("$A0xB")`,`&Dhi("$A0xB")`
+
+.LNEON_tail2:
+ vadd.u64 `&Dlo("$A1xB")`,`&Dlo("$A1xB")`,$temp
+ vst1.32 {`&Dlo("$A0xB")`[0]}, [$toutptr, :32]!
+ vshr.u64 $temp,`&Dlo("$A1xB")`,#16
+ vadd.u64 `&Dhi("$A1xB")`,`&Dhi("$A1xB")`,$temp
+ vshr.u64 $temp,`&Dhi("$A1xB")`,#16
+ vzip.16 `&Dlo("$A1xB")`,`&Dhi("$A1xB")`
+
+ vadd.u64 `&Dlo("$A2xB")`,`&Dlo("$A2xB")`,$temp
+ vst1.32 {`&Dlo("$A1xB")`[0]}, [$toutptr, :32]!
+ vshr.u64 $temp,`&Dlo("$A2xB")`,#16
+ vadd.u64 `&Dhi("$A2xB")`,`&Dhi("$A2xB")`,$temp
+ vshr.u64 $temp,`&Dhi("$A2xB")`,#16
+ vzip.16 `&Dlo("$A2xB")`,`&Dhi("$A2xB")`
+
+ vadd.u64 `&Dlo("$A3xB")`,`&Dlo("$A3xB")`,$temp
+ vst1.32 {`&Dlo("$A2xB")`[0]}, [$toutptr, :32]!
+ vshr.u64 $temp,`&Dlo("$A3xB")`,#16
+ vadd.u64 `&Dhi("$A3xB")`,`&Dhi("$A3xB")`,$temp
+ vshr.u64 $temp,`&Dhi("$A3xB")`,#16
+ vzip.16 `&Dlo("$A3xB")`,`&Dhi("$A3xB")`
+
+ vadd.u64 `&Dlo("$A4xB")`,`&Dlo("$A4xB")`,$temp
+ vst1.32 {`&Dlo("$A3xB")`[0]}, [$toutptr, :32]!
+ vshr.u64 $temp,`&Dlo("$A4xB")`,#16
+ vadd.u64 `&Dhi("$A4xB")`,`&Dhi("$A4xB")`,$temp
+ vshr.u64 $temp,`&Dhi("$A4xB")`,#16
+ vzip.16 `&Dlo("$A4xB")`,`&Dhi("$A4xB")`
+
+ vadd.u64 `&Dlo("$A5xB")`,`&Dlo("$A5xB")`,$temp
+ vst1.32 {`&Dlo("$A4xB")`[0]}, [$toutptr, :32]!
+ vshr.u64 $temp,`&Dlo("$A5xB")`,#16
+ vadd.u64 `&Dhi("$A5xB")`,`&Dhi("$A5xB")`,$temp
+ vshr.u64 $temp,`&Dhi("$A5xB")`,#16
+ vzip.16 `&Dlo("$A5xB")`,`&Dhi("$A5xB")`
+
+ vadd.u64 `&Dlo("$A6xB")`,`&Dlo("$A6xB")`,$temp
+ vst1.32 {`&Dlo("$A5xB")`[0]}, [$toutptr, :32]!
+ vshr.u64 $temp,`&Dlo("$A6xB")`,#16
+ vadd.u64 `&Dhi("$A6xB")`,`&Dhi("$A6xB")`,$temp
+ vld1.64 {$A0xB}, [$tinptr, :128]!
+ vshr.u64 $temp,`&Dhi("$A6xB")`,#16
+ vzip.16 `&Dlo("$A6xB")`,`&Dhi("$A6xB")`
+
+ vadd.u64 `&Dlo("$A7xB")`,`&Dlo("$A7xB")`,$temp
+ vst1.32 {`&Dlo("$A6xB")`[0]}, [$toutptr, :32]!
+ vshr.u64 $temp,`&Dlo("$A7xB")`,#16
+ vadd.u64 `&Dhi("$A7xB")`,`&Dhi("$A7xB")`,$temp
+ vld1.64 {$A1xB-$A2xB}, [$tinptr, :256]!
+ vshr.u64 $temp,`&Dhi("$A7xB")`,#16
+ vzip.16 `&Dlo("$A7xB")`,`&Dhi("$A7xB")`
+ subs $inner,$inner,#8
+ vst1.32 {`&Dlo("$A7xB")`[0]}, [$toutptr, :32]!
+
+ bne .LNEON_tail
+
+ vst1.32 {${temp}[0]}, [$toutptr, :32] @ top-most bit
+ sub $nptr,$nptr,$num,lsl#2 @ rewind $nptr
+ subs $aptr,sp,#0 @ clear carry flag
+ add $bptr,sp,$num,lsl#2
+
+.LNEON_sub:
+ ldmia $aptr!, {r4-r7}
+ ldmia $nptr!, {r8-r11}
+ sbcs r8, r4,r8
+ sbcs r9, r5,r9
+ sbcs r10,r6,r10
+ sbcs r11,r7,r11
+ teq $aptr,$bptr @ preserves carry
+ stmia $rptr!, {r8-r11}
+ bne .LNEON_sub
+
+ ldr r10, [$aptr] @ load top-most bit
+ veor q0,q0,q0
+ sub r11,$bptr,sp @ this is num*4
+ veor q1,q1,q1
+ mov $aptr,sp
+ sub $rptr,$rptr,r11 @ rewind $rptr
+ mov $nptr,$bptr @ second 3/4th of frame
+ sbcs r10,r10,#0 @ result is carry flag
+
+.LNEON_copy_n_zap:
+ ldmia $aptr!, {r4-r7}
+ ldmia $rptr, {r8-r11}
+ movcc r8, r4
+ vst1.64 {q0-q1}, [$nptr,:256]! @ wipe
+ movcc r9, r5
+ movcc r10,r6
+ vst1.64 {q0-q1}, [$nptr,:256]! @ wipe
+ movcc r11,r7
+ ldmia $aptr, {r4-r7}
+ stmia $rptr!, {r8-r11}
+ sub $aptr,$aptr,#16
+ ldmia $rptr, {r8-r11}
+ movcc r8, r4
+ vst1.64 {q0-q1}, [$aptr,:256]! @ wipe
+ movcc r9, r5
+ movcc r10,r6
+ vst1.64 {q0-q1}, [$nptr,:256]! @ wipe
+ movcc r11,r7
+ teq $aptr,$bptr @ preserves carry
+ stmia $rptr!, {r8-r11}
+ bne .LNEON_copy_n_zap
+
+ sub sp,ip,#96
+ vldmia sp!,{d8-d15}
+ ldmia sp!,{r4-r11}
+ ret @ bx lr
+.size bn_mul8x_mont_neon,.-bn_mul8x_mont_neon
+#endif
+___
+}
+$code.=<<___;
+.asciz "Montgomery multiplication for ARMv4/NEON, CRYPTOGAMS by <appro\@openssl.org>"
.align 2
+#if __ARM_MAX_ARCH__>=7
+.comm OPENSSL_armcap_P,4,4
+#endif
___
+$code =~ s/\`([^\`]*)\`/eval $1/gem;
$code =~ s/\bbx\s+lr\b/.word\t0xe12fff1e/gm; # make it possible to compile with -march=armv4
+$code =~ s/\bret\b/bx lr/gm;
print $code;
close STDOUT;
diff --git a/crypto/openssl/crypto/bn/asm/mips-mont.pl b/crypto/openssl/crypto/bn/asm/mips-mont.pl
index caae04e..a33cdf4 100755
--- a/crypto/openssl/crypto/bn/asm/mips-mont.pl
+++ b/crypto/openssl/crypto/bn/asm/mips-mont.pl
@@ -46,7 +46,7 @@
# ($s0,$s1,$s2,$s3,$s4,$s5,$s6,$s7)=map("\$$_",(16..23));
# ($gp,$sp,$fp,$ra)=map("\$$_",(28..31));
#
-$flavour = shift; # supported flavours are o32,n32,64,nubi32,nubi64
+$flavour = shift || "o32"; # supported flavours are o32,n32,64,nubi32,nubi64
if ($flavour =~ /64|n32/i) {
$PTR_ADD="dadd"; # incidentally works even on n32
diff --git a/crypto/openssl/crypto/bn/asm/mips.pl b/crypto/openssl/crypto/bn/asm/mips.pl
index 215c9a7..acafde5 100755
--- a/crypto/openssl/crypto/bn/asm/mips.pl
+++ b/crypto/openssl/crypto/bn/asm/mips.pl
@@ -48,7 +48,7 @@
# has to content with 40-85% improvement depending on benchmark and
# key length, more for longer keys.
-$flavour = shift;
+$flavour = shift || "o32";
while (($output=shift) && ($output!~/^\w[\w\-]*\.\w+$/)) {}
open STDOUT,">$output";
diff --git a/crypto/openssl/crypto/bn/asm/mips3.s b/crypto/openssl/crypto/bn/asm/mips3.s
new file mode 100644
index 0000000..dca4105
--- /dev/null
+++ b/crypto/openssl/crypto/bn/asm/mips3.s
@@ -0,0 +1,2201 @@
+.rdata
+.asciiz "mips3.s, Version 1.1"
+.asciiz "MIPS III/IV ISA artwork by Andy Polyakov <appro@fy.chalmers.se>"
+
+/*
+ * ====================================================================
+ * Written by Andy Polyakov <appro@fy.chalmers.se> for the OpenSSL
+ * project.
+ *
+ * Rights for redistribution and usage in source and binary forms are
+ * granted according to the OpenSSL license. Warranty of any kind is
+ * disclaimed.
+ * ====================================================================
+ */
+
+/*
+ * This is my modest contributon to the OpenSSL project (see
+ * http://www.openssl.org/ for more information about it) and is
+ * a drop-in MIPS III/IV ISA replacement for crypto/bn/bn_asm.c
+ * module. For updates see http://fy.chalmers.se/~appro/hpe/.
+ *
+ * The module is designed to work with either of the "new" MIPS ABI(5),
+ * namely N32 or N64, offered by IRIX 6.x. It's not ment to work under
+ * IRIX 5.x not only because it doesn't support new ABIs but also
+ * because 5.x kernels put R4x00 CPU into 32-bit mode and all those
+ * 64-bit instructions (daddu, dmultu, etc.) found below gonna only
+ * cause illegal instruction exception:-(
+ *
+ * In addition the code depends on preprocessor flags set up by MIPSpro
+ * compiler driver (either as or cc) and therefore (probably?) can't be
+ * compiled by the GNU assembler. GNU C driver manages fine though...
+ * I mean as long as -mmips-as is specified or is the default option,
+ * because then it simply invokes /usr/bin/as which in turn takes
+ * perfect care of the preprocessor definitions. Another neat feature
+ * offered by the MIPSpro assembler is an optimization pass. This gave
+ * me the opportunity to have the code looking more regular as all those
+ * architecture dependent instruction rescheduling details were left to
+ * the assembler. Cool, huh?
+ *
+ * Performance improvement is astonishing! 'apps/openssl speed rsa dsa'
+ * goes way over 3 times faster!
+ *
+ * <appro@fy.chalmers.se>
+ */
+#include <asm.h>
+#include <regdef.h>
+
+#if _MIPS_ISA>=4
+#define MOVNZ(cond,dst,src) \
+ movn dst,src,cond
+#else
+#define MOVNZ(cond,dst,src) \
+ .set noreorder; \
+ bnezl cond,.+8; \
+ move dst,src; \
+ .set reorder
+#endif
+
+.text
+
+.set noat
+.set reorder
+
+#define MINUS4 v1
+
+.align 5
+LEAF(bn_mul_add_words)
+ .set noreorder
+ bgtzl a2,.L_bn_mul_add_words_proceed
+ ld t0,0(a1)
+ jr ra
+ move v0,zero
+ .set reorder
+
+.L_bn_mul_add_words_proceed:
+ li MINUS4,-4
+ and ta0,a2,MINUS4
+ move v0,zero
+ beqz ta0,.L_bn_mul_add_words_tail
+
+.L_bn_mul_add_words_loop:
+ dmultu t0,a3
+ ld t1,0(a0)
+ ld t2,8(a1)
+ ld t3,8(a0)
+ ld ta0,16(a1)
+ ld ta1,16(a0)
+ daddu t1,v0
+ sltu v0,t1,v0 /* All manuals say it "compares 32-bit
+ * values", but it seems to work fine
+ * even on 64-bit registers. */
+ mflo AT
+ mfhi t0
+ daddu t1,AT
+ daddu v0,t0
+ sltu AT,t1,AT
+ sd t1,0(a0)
+ daddu v0,AT
+
+ dmultu t2,a3
+ ld ta2,24(a1)
+ ld ta3,24(a0)
+ daddu t3,v0
+ sltu v0,t3,v0
+ mflo AT
+ mfhi t2
+ daddu t3,AT
+ daddu v0,t2
+ sltu AT,t3,AT
+ sd t3,8(a0)
+ daddu v0,AT
+
+ dmultu ta0,a3
+ subu a2,4
+ PTR_ADD a0,32
+ PTR_ADD a1,32
+ daddu ta1,v0
+ sltu v0,ta1,v0
+ mflo AT
+ mfhi ta0
+ daddu ta1,AT
+ daddu v0,ta0
+ sltu AT,ta1,AT
+ sd ta1,-16(a0)
+ daddu v0,AT
+
+
+ dmultu ta2,a3
+ and ta0,a2,MINUS4
+ daddu ta3,v0
+ sltu v0,ta3,v0
+ mflo AT
+ mfhi ta2
+ daddu ta3,AT
+ daddu v0,ta2
+ sltu AT,ta3,AT
+ sd ta3,-8(a0)
+ daddu v0,AT
+ .set noreorder
+ bgtzl ta0,.L_bn_mul_add_words_loop
+ ld t0,0(a1)
+
+ bnezl a2,.L_bn_mul_add_words_tail
+ ld t0,0(a1)
+ .set reorder
+
+.L_bn_mul_add_words_return:
+ jr ra
+
+.L_bn_mul_add_words_tail:
+ dmultu t0,a3
+ ld t1,0(a0)
+ subu a2,1
+ daddu t1,v0
+ sltu v0,t1,v0
+ mflo AT
+ mfhi t0
+ daddu t1,AT
+ daddu v0,t0
+ sltu AT,t1,AT
+ sd t1,0(a0)
+ daddu v0,AT
+ beqz a2,.L_bn_mul_add_words_return
+
+ ld t0,8(a1)
+ dmultu t0,a3
+ ld t1,8(a0)
+ subu a2,1
+ daddu t1,v0
+ sltu v0,t1,v0
+ mflo AT
+ mfhi t0
+ daddu t1,AT
+ daddu v0,t0
+ sltu AT,t1,AT
+ sd t1,8(a0)
+ daddu v0,AT
+ beqz a2,.L_bn_mul_add_words_return
+
+ ld t0,16(a1)
+ dmultu t0,a3
+ ld t1,16(a0)
+ daddu t1,v0
+ sltu v0,t1,v0
+ mflo AT
+ mfhi t0
+ daddu t1,AT
+ daddu v0,t0
+ sltu AT,t1,AT
+ sd t1,16(a0)
+ daddu v0,AT
+ jr ra
+END(bn_mul_add_words)
+
+.align 5
+LEAF(bn_mul_words)
+ .set noreorder
+ bgtzl a2,.L_bn_mul_words_proceed
+ ld t0,0(a1)
+ jr ra
+ move v0,zero
+ .set reorder
+
+.L_bn_mul_words_proceed:
+ li MINUS4,-4
+ and ta0,a2,MINUS4
+ move v0,zero
+ beqz ta0,.L_bn_mul_words_tail
+
+.L_bn_mul_words_loop:
+ dmultu t0,a3
+ ld t2,8(a1)
+ ld ta0,16(a1)
+ ld ta2,24(a1)
+ mflo AT
+ mfhi t0
+ daddu v0,AT
+ sltu t1,v0,AT
+ sd v0,0(a0)
+ daddu v0,t1,t0
+
+ dmultu t2,a3
+ subu a2,4
+ PTR_ADD a0,32
+ PTR_ADD a1,32
+ mflo AT
+ mfhi t2
+ daddu v0,AT
+ sltu t3,v0,AT
+ sd v0,-24(a0)
+ daddu v0,t3,t2
+
+ dmultu ta0,a3
+ mflo AT
+ mfhi ta0
+ daddu v0,AT
+ sltu ta1,v0,AT
+ sd v0,-16(a0)
+ daddu v0,ta1,ta0
+
+
+ dmultu ta2,a3
+ and ta0,a2,MINUS4
+ mflo AT
+ mfhi ta2
+ daddu v0,AT
+ sltu ta3,v0,AT
+ sd v0,-8(a0)
+ daddu v0,ta3,ta2
+ .set noreorder
+ bgtzl ta0,.L_bn_mul_words_loop
+ ld t0,0(a1)
+
+ bnezl a2,.L_bn_mul_words_tail
+ ld t0,0(a1)
+ .set reorder
+
+.L_bn_mul_words_return:
+ jr ra
+
+.L_bn_mul_words_tail:
+ dmultu t0,a3
+ subu a2,1
+ mflo AT
+ mfhi t0
+ daddu v0,AT
+ sltu t1,v0,AT
+ sd v0,0(a0)
+ daddu v0,t1,t0
+ beqz a2,.L_bn_mul_words_return
+
+ ld t0,8(a1)
+ dmultu t0,a3
+ subu a2,1
+ mflo AT
+ mfhi t0
+ daddu v0,AT
+ sltu t1,v0,AT
+ sd v0,8(a0)
+ daddu v0,t1,t0
+ beqz a2,.L_bn_mul_words_return
+
+ ld t0,16(a1)
+ dmultu t0,a3
+ mflo AT
+ mfhi t0
+ daddu v0,AT
+ sltu t1,v0,AT
+ sd v0,16(a0)
+ daddu v0,t1,t0
+ jr ra
+END(bn_mul_words)
+
+.align 5
+LEAF(bn_sqr_words)
+ .set noreorder
+ bgtzl a2,.L_bn_sqr_words_proceed
+ ld t0,0(a1)
+ jr ra
+ move v0,zero
+ .set reorder
+
+.L_bn_sqr_words_proceed:
+ li MINUS4,-4
+ and ta0,a2,MINUS4
+ move v0,zero
+ beqz ta0,.L_bn_sqr_words_tail
+
+.L_bn_sqr_words_loop:
+ dmultu t0,t0
+ ld t2,8(a1)
+ ld ta0,16(a1)
+ ld ta2,24(a1)
+ mflo t1
+ mfhi t0
+ sd t1,0(a0)
+ sd t0,8(a0)
+
+ dmultu t2,t2
+ subu a2,4
+ PTR_ADD a0,64
+ PTR_ADD a1,32
+ mflo t3
+ mfhi t2
+ sd t3,-48(a0)
+ sd t2,-40(a0)
+
+ dmultu ta0,ta0
+ mflo ta1
+ mfhi ta0
+ sd ta1,-32(a0)
+ sd ta0,-24(a0)
+
+
+ dmultu ta2,ta2
+ and ta0,a2,MINUS4
+ mflo ta3
+ mfhi ta2
+ sd ta3,-16(a0)
+ sd ta2,-8(a0)
+
+ .set noreorder
+ bgtzl ta0,.L_bn_sqr_words_loop
+ ld t0,0(a1)
+
+ bnezl a2,.L_bn_sqr_words_tail
+ ld t0,0(a1)
+ .set reorder
+
+.L_bn_sqr_words_return:
+ move v0,zero
+ jr ra
+
+.L_bn_sqr_words_tail:
+ dmultu t0,t0
+ subu a2,1
+ mflo t1
+ mfhi t0
+ sd t1,0(a0)
+ sd t0,8(a0)
+ beqz a2,.L_bn_sqr_words_return
+
+ ld t0,8(a1)
+ dmultu t0,t0
+ subu a2,1
+ mflo t1
+ mfhi t0
+ sd t1,16(a0)
+ sd t0,24(a0)
+ beqz a2,.L_bn_sqr_words_return
+
+ ld t0,16(a1)
+ dmultu t0,t0
+ mflo t1
+ mfhi t0
+ sd t1,32(a0)
+ sd t0,40(a0)
+ jr ra
+END(bn_sqr_words)
+
+.align 5
+LEAF(bn_add_words)
+ .set noreorder
+ bgtzl a3,.L_bn_add_words_proceed
+ ld t0,0(a1)
+ jr ra
+ move v0,zero
+ .set reorder
+
+.L_bn_add_words_proceed:
+ li MINUS4,-4
+ and AT,a3,MINUS4
+ move v0,zero
+ beqz AT,.L_bn_add_words_tail
+
+.L_bn_add_words_loop:
+ ld ta0,0(a2)
+ subu a3,4
+ ld t1,8(a1)
+ and AT,a3,MINUS4
+ ld t2,16(a1)
+ PTR_ADD a2,32
+ ld t3,24(a1)
+ PTR_ADD a0,32
+ ld ta1,-24(a2)
+ PTR_ADD a1,32
+ ld ta2,-16(a2)
+ ld ta3,-8(a2)
+ daddu ta0,t0
+ sltu t8,ta0,t0
+ daddu t0,ta0,v0
+ sltu v0,t0,ta0
+ sd t0,-32(a0)
+ daddu v0,t8
+
+ daddu ta1,t1
+ sltu t9,ta1,t1
+ daddu t1,ta1,v0
+ sltu v0,t1,ta1
+ sd t1,-24(a0)
+ daddu v0,t9
+
+ daddu ta2,t2
+ sltu t8,ta2,t2
+ daddu t2,ta2,v0
+ sltu v0,t2,ta2
+ sd t2,-16(a0)
+ daddu v0,t8
+
+ daddu ta3,t3
+ sltu t9,ta3,t3
+ daddu t3,ta3,v0
+ sltu v0,t3,ta3
+ sd t3,-8(a0)
+ daddu v0,t9
+
+ .set noreorder
+ bgtzl AT,.L_bn_add_words_loop
+ ld t0,0(a1)
+
+ bnezl a3,.L_bn_add_words_tail
+ ld t0,0(a1)
+ .set reorder
+
+.L_bn_add_words_return:
+ jr ra
+
+.L_bn_add_words_tail:
+ ld ta0,0(a2)
+ daddu ta0,t0
+ subu a3,1
+ sltu t8,ta0,t0
+ daddu t0,ta0,v0
+ sltu v0,t0,ta0
+ sd t0,0(a0)
+ daddu v0,t8
+ beqz a3,.L_bn_add_words_return
+
+ ld t1,8(a1)
+ ld ta1,8(a2)
+ daddu ta1,t1
+ subu a3,1
+ sltu t9,ta1,t1
+ daddu t1,ta1,v0
+ sltu v0,t1,ta1
+ sd t1,8(a0)
+ daddu v0,t9
+ beqz a3,.L_bn_add_words_return
+
+ ld t2,16(a1)
+ ld ta2,16(a2)
+ daddu ta2,t2
+ sltu t8,ta2,t2
+ daddu t2,ta2,v0
+ sltu v0,t2,ta2
+ sd t2,16(a0)
+ daddu v0,t8
+ jr ra
+END(bn_add_words)
+
+.align 5
+LEAF(bn_sub_words)
+ .set noreorder
+ bgtzl a3,.L_bn_sub_words_proceed
+ ld t0,0(a1)
+ jr ra
+ move v0,zero
+ .set reorder
+
+.L_bn_sub_words_proceed:
+ li MINUS4,-4
+ and AT,a3,MINUS4
+ move v0,zero
+ beqz AT,.L_bn_sub_words_tail
+
+.L_bn_sub_words_loop:
+ ld ta0,0(a2)
+ subu a3,4
+ ld t1,8(a1)
+ and AT,a3,MINUS4
+ ld t2,16(a1)
+ PTR_ADD a2,32
+ ld t3,24(a1)
+ PTR_ADD a0,32
+ ld ta1,-24(a2)
+ PTR_ADD a1,32
+ ld ta2,-16(a2)
+ ld ta3,-8(a2)
+ sltu t8,t0,ta0
+ dsubu t0,ta0
+ dsubu ta0,t0,v0
+ sd ta0,-32(a0)
+ MOVNZ (t0,v0,t8)
+
+ sltu t9,t1,ta1
+ dsubu t1,ta1
+ dsubu ta1,t1,v0
+ sd ta1,-24(a0)
+ MOVNZ (t1,v0,t9)
+
+
+ sltu t8,t2,ta2
+ dsubu t2,ta2
+ dsubu ta2,t2,v0
+ sd ta2,-16(a0)
+ MOVNZ (t2,v0,t8)
+
+ sltu t9,t3,ta3
+ dsubu t3,ta3
+ dsubu ta3,t3,v0
+ sd ta3,-8(a0)
+ MOVNZ (t3,v0,t9)
+
+ .set noreorder
+ bgtzl AT,.L_bn_sub_words_loop
+ ld t0,0(a1)
+
+ bnezl a3,.L_bn_sub_words_tail
+ ld t0,0(a1)
+ .set reorder
+
+.L_bn_sub_words_return:
+ jr ra
+
+.L_bn_sub_words_tail:
+ ld ta0,0(a2)
+ subu a3,1
+ sltu t8,t0,ta0
+ dsubu t0,ta0
+ dsubu ta0,t0,v0
+ MOVNZ (t0,v0,t8)
+ sd ta0,0(a0)
+ beqz a3,.L_bn_sub_words_return
+
+ ld t1,8(a1)
+ subu a3,1
+ ld ta1,8(a2)
+ sltu t9,t1,ta1
+ dsubu t1,ta1
+ dsubu ta1,t1,v0
+ MOVNZ (t1,v0,t9)
+ sd ta1,8(a0)
+ beqz a3,.L_bn_sub_words_return
+
+ ld t2,16(a1)
+ ld ta2,16(a2)
+ sltu t8,t2,ta2
+ dsubu t2,ta2
+ dsubu ta2,t2,v0
+ MOVNZ (t2,v0,t8)
+ sd ta2,16(a0)
+ jr ra
+END(bn_sub_words)
+
+#undef MINUS4
+
+.align 5
+LEAF(bn_div_3_words)
+ .set reorder
+ move a3,a0 /* we know that bn_div_words doesn't
+ * touch a3, ta2, ta3 and preserves a2
+ * so that we can save two arguments
+ * and return address in registers
+ * instead of stack:-)
+ */
+ ld a0,(a3)
+ move ta2,a1
+ ld a1,-8(a3)
+ bne a0,a2,.L_bn_div_3_words_proceed
+ li v0,-1
+ jr ra
+.L_bn_div_3_words_proceed:
+ move ta3,ra
+ bal bn_div_words
+ move ra,ta3
+ dmultu ta2,v0
+ ld t2,-16(a3)
+ move ta0,zero
+ mfhi t1
+ mflo t0
+ sltu t8,t1,v1
+.L_bn_div_3_words_inner_loop:
+ bnez t8,.L_bn_div_3_words_inner_loop_done
+ sgeu AT,t2,t0
+ seq t9,t1,v1
+ and AT,t9
+ sltu t3,t0,ta2
+ daddu v1,a2
+ dsubu t1,t3
+ dsubu t0,ta2
+ sltu t8,t1,v1
+ sltu ta0,v1,a2
+ or t8,ta0
+ .set noreorder
+ beqzl AT,.L_bn_div_3_words_inner_loop
+ dsubu v0,1
+ .set reorder
+.L_bn_div_3_words_inner_loop_done:
+ jr ra
+END(bn_div_3_words)
+
+.align 5
+LEAF(bn_div_words)
+ .set noreorder
+ bnezl a2,.L_bn_div_words_proceed
+ move v1,zero
+ jr ra
+ li v0,-1 /* I'd rather signal div-by-zero
+ * which can be done with 'break 7' */
+
+.L_bn_div_words_proceed:
+ bltz a2,.L_bn_div_words_body
+ move t9,v1
+ dsll a2,1
+ bgtz a2,.-4
+ addu t9,1
+
+ .set reorder
+ negu t1,t9
+ li t2,-1
+ dsll t2,t1
+ and t2,a0
+ dsrl AT,a1,t1
+ .set noreorder
+ bnezl t2,.+8
+ break 6 /* signal overflow */
+ .set reorder
+ dsll a0,t9
+ dsll a1,t9
+ or a0,AT
+
+#define QT ta0
+#define HH ta1
+#define DH v1
+.L_bn_div_words_body:
+ dsrl DH,a2,32
+ sgeu AT,a0,a2
+ .set noreorder
+ bnezl AT,.+8
+ dsubu a0,a2
+ .set reorder
+
+ li QT,-1
+ dsrl HH,a0,32
+ dsrl QT,32 /* q=0xffffffff */
+ beq DH,HH,.L_bn_div_words_skip_div1
+ ddivu zero,a0,DH
+ mflo QT
+.L_bn_div_words_skip_div1:
+ dmultu a2,QT
+ dsll t3,a0,32
+ dsrl AT,a1,32
+ or t3,AT
+ mflo t0
+ mfhi t1
+.L_bn_div_words_inner_loop1:
+ sltu t2,t3,t0
+ seq t8,HH,t1
+ sltu AT,HH,t1
+ and t2,t8
+ sltu v0,t0,a2
+ or AT,t2
+ .set noreorder
+ beqz AT,.L_bn_div_words_inner_loop1_done
+ dsubu t1,v0
+ dsubu t0,a2
+ b .L_bn_div_words_inner_loop1
+ dsubu QT,1
+ .set reorder
+.L_bn_div_words_inner_loop1_done:
+
+ dsll a1,32
+ dsubu a0,t3,t0
+ dsll v0,QT,32
+
+ li QT,-1
+ dsrl HH,a0,32
+ dsrl QT,32 /* q=0xffffffff */
+ beq DH,HH,.L_bn_div_words_skip_div2
+ ddivu zero,a0,DH
+ mflo QT
+.L_bn_div_words_skip_div2:
+#undef DH
+ dmultu a2,QT
+ dsll t3,a0,32
+ dsrl AT,a1,32
+ or t3,AT
+ mflo t0
+ mfhi t1
+.L_bn_div_words_inner_loop2:
+ sltu t2,t3,t0
+ seq t8,HH,t1
+ sltu AT,HH,t1
+ and t2,t8
+ sltu v1,t0,a2
+ or AT,t2
+ .set noreorder
+ beqz AT,.L_bn_div_words_inner_loop2_done
+ dsubu t1,v1
+ dsubu t0,a2
+ b .L_bn_div_words_inner_loop2
+ dsubu QT,1
+ .set reorder
+.L_bn_div_words_inner_loop2_done:
+#undef HH
+
+ dsubu a0,t3,t0
+ or v0,QT
+ dsrl v1,a0,t9 /* v1 contains remainder if anybody wants it */
+ dsrl a2,t9 /* restore a2 */
+ jr ra
+#undef QT
+END(bn_div_words)
+
+#define a_0 t0
+#define a_1 t1
+#define a_2 t2
+#define a_3 t3
+#define b_0 ta0
+#define b_1 ta1
+#define b_2 ta2
+#define b_3 ta3
+
+#define a_4 s0
+#define a_5 s2
+#define a_6 s4
+#define a_7 a1 /* once we load a[7] we don't need a anymore */
+#define b_4 s1
+#define b_5 s3
+#define b_6 s5
+#define b_7 a2 /* once we load b[7] we don't need b anymore */
+
+#define t_1 t8
+#define t_2 t9
+
+#define c_1 v0
+#define c_2 v1
+#define c_3 a3
+
+#define FRAME_SIZE 48
+
+.align 5
+LEAF(bn_mul_comba8)
+ .set noreorder
+ PTR_SUB sp,FRAME_SIZE
+ .frame sp,64,ra
+ .set reorder
+ ld a_0,0(a1) /* If compiled with -mips3 option on
+ * R5000 box assembler barks on this
+ * line with "shouldn't have mult/div
+ * as last instruction in bb (R10K
+ * bug)" warning. If anybody out there
+ * has a clue about how to circumvent
+ * this do send me a note.
+ * <appro@fy.chalmers.se>
+ */
+ ld b_0,0(a2)
+ ld a_1,8(a1)
+ ld a_2,16(a1)
+ ld a_3,24(a1)
+ ld b_1,8(a2)
+ ld b_2,16(a2)
+ ld b_3,24(a2)
+ dmultu a_0,b_0 /* mul_add_c(a[0],b[0],c1,c2,c3); */
+ sd s0,0(sp)
+ sd s1,8(sp)
+ sd s2,16(sp)
+ sd s3,24(sp)
+ sd s4,32(sp)
+ sd s5,40(sp)
+ mflo c_1
+ mfhi c_2
+
+ dmultu a_0,b_1 /* mul_add_c(a[0],b[1],c2,c3,c1); */
+ ld a_4,32(a1)
+ ld a_5,40(a1)
+ ld a_6,48(a1)
+ ld a_7,56(a1)
+ ld b_4,32(a2)
+ ld b_5,40(a2)
+ mflo t_1
+ mfhi t_2
+ daddu c_2,t_1
+ sltu AT,c_2,t_1
+ daddu c_3,t_2,AT
+ dmultu a_1,b_0 /* mul_add_c(a[1],b[0],c2,c3,c1); */
+ ld b_6,48(a2)
+ ld b_7,56(a2)
+ sd c_1,0(a0) /* r[0]=c1; */
+ mflo t_1
+ mfhi t_2
+ daddu c_2,t_1
+ sltu AT,c_2,t_1
+ daddu t_2,AT
+ daddu c_3,t_2
+ sltu c_1,c_3,t_2
+ sd c_2,8(a0) /* r[1]=c2; */
+
+ dmultu a_2,b_0 /* mul_add_c(a[2],b[0],c3,c1,c2); */
+ mflo t_1
+ mfhi t_2
+ daddu c_3,t_1
+ sltu AT,c_3,t_1
+ daddu t_2,AT
+ daddu c_1,t_2
+ dmultu a_1,b_1 /* mul_add_c(a[1],b[1],c3,c1,c2); */
+ mflo t_1
+ mfhi t_2
+ daddu c_3,t_1
+ sltu AT,c_3,t_1
+ daddu t_2,AT
+ daddu c_1,t_2
+ sltu c_2,c_1,t_2
+ dmultu a_0,b_2 /* mul_add_c(a[0],b[2],c3,c1,c2); */
+ mflo t_1
+ mfhi t_2
+ daddu c_3,t_1
+ sltu AT,c_3,t_1
+ daddu t_2,AT
+ daddu c_1,t_2
+ sltu AT,c_1,t_2
+ daddu c_2,AT
+ sd c_3,16(a0) /* r[2]=c3; */
+
+ dmultu a_0,b_3 /* mul_add_c(a[0],b[3],c1,c2,c3); */
+ mflo t_1
+ mfhi t_2
+ daddu c_1,t_1
+ sltu AT,c_1,t_1
+ daddu t_2,AT
+ daddu c_2,t_2
+ sltu c_3,c_2,t_2
+ dmultu a_1,b_2 /* mul_add_c(a[1],b[2],c1,c2,c3); */
+ mflo t_1
+ mfhi t_2
+ daddu c_1,t_1
+ sltu AT,c_1,t_1
+ daddu t_2,AT
+ daddu c_2,t_2
+ sltu AT,c_2,t_2
+ daddu c_3,AT
+ dmultu a_2,b_1 /* mul_add_c(a[2],b[1],c1,c2,c3); */
+ mflo t_1
+ mfhi t_2
+ daddu c_1,t_1
+ sltu AT,c_1,t_1
+ daddu t_2,AT
+ daddu c_2,t_2
+ sltu AT,c_2,t_2
+ daddu c_3,AT
+ dmultu a_3,b_0 /* mul_add_c(a[3],b[0],c1,c2,c3); */
+ mflo t_1
+ mfhi t_2
+ daddu c_1,t_1
+ sltu AT,c_1,t_1
+ daddu t_2,AT
+ daddu c_2,t_2
+ sltu AT,c_2,t_2
+ daddu c_3,AT
+ sd c_1,24(a0) /* r[3]=c1; */
+
+ dmultu a_4,b_0 /* mul_add_c(a[4],b[0],c2,c3,c1); */
+ mflo t_1
+ mfhi t_2
+ daddu c_2,t_1
+ sltu AT,c_2,t_1
+ daddu t_2,AT
+ daddu c_3,t_2
+ sltu c_1,c_3,t_2
+ dmultu a_3,b_1 /* mul_add_c(a[3],b[1],c2,c3,c1); */
+ mflo t_1
+ mfhi t_2
+ daddu c_2,t_1
+ sltu AT,c_2,t_1
+ daddu t_2,AT
+ daddu c_3,t_2
+ sltu AT,c_3,t_2
+ daddu c_1,AT
+ dmultu a_2,b_2 /* mul_add_c(a[2],b[2],c2,c3,c1); */
+ mflo t_1
+ mfhi t_2
+ daddu c_2,t_1
+ sltu AT,c_2,t_1
+ daddu t_2,AT
+ daddu c_3,t_2
+ sltu AT,c_3,t_2
+ daddu c_1,AT
+ dmultu a_1,b_3 /* mul_add_c(a[1],b[3],c2,c3,c1); */
+ mflo t_1
+ mfhi t_2
+ daddu c_2,t_1
+ sltu AT,c_2,t_1
+ daddu t_2,AT
+ daddu c_3,t_2
+ sltu AT,c_3,t_2
+ daddu c_1,AT
+ dmultu a_0,b_4 /* mul_add_c(a[0],b[4],c2,c3,c1); */
+ mflo t_1
+ mfhi t_2
+ daddu c_2,t_1
+ sltu AT,c_2,t_1
+ daddu t_2,AT
+ daddu c_3,t_2
+ sltu AT,c_3,t_2
+ daddu c_1,AT
+ sd c_2,32(a0) /* r[4]=c2; */
+
+ dmultu a_0,b_5 /* mul_add_c(a[0],b[5],c3,c1,c2); */
+ mflo t_1
+ mfhi t_2
+ daddu c_3,t_1
+ sltu AT,c_3,t_1
+ daddu t_2,AT
+ daddu c_1,t_2
+ sltu c_2,c_1,t_2
+ dmultu a_1,b_4 /* mul_add_c(a[1],b[4],c3,c1,c2); */
+ mflo t_1
+ mfhi t_2
+ daddu c_3,t_1
+ sltu AT,c_3,t_1
+ daddu t_2,AT
+ daddu c_1,t_2
+ sltu AT,c_1,t_2
+ daddu c_2,AT
+ dmultu a_2,b_3 /* mul_add_c(a[2],b[3],c3,c1,c2); */
+ mflo t_1
+ mfhi t_2
+ daddu c_3,t_1
+ sltu AT,c_3,t_1
+ daddu t_2,AT
+ daddu c_1,t_2
+ sltu AT,c_1,t_2
+ daddu c_2,AT
+ dmultu a_3,b_2 /* mul_add_c(a[3],b[2],c3,c1,c2); */
+ mflo t_1
+ mfhi t_2
+ daddu c_3,t_1
+ sltu AT,c_3,t_1
+ daddu t_2,AT
+ daddu c_1,t_2
+ sltu AT,c_1,t_2
+ daddu c_2,AT
+ dmultu a_4,b_1 /* mul_add_c(a[4],b[1],c3,c1,c2); */
+ mflo t_1
+ mfhi t_2
+ daddu c_3,t_1
+ sltu AT,c_3,t_1
+ daddu t_2,AT
+ daddu c_1,t_2
+ sltu AT,c_1,t_2
+ daddu c_2,AT
+ dmultu a_5,b_0 /* mul_add_c(a[5],b[0],c3,c1,c2); */
+ mflo t_1
+ mfhi t_2
+ daddu c_3,t_1
+ sltu AT,c_3,t_1
+ daddu t_2,AT
+ daddu c_1,t_2
+ sltu AT,c_1,t_2
+ daddu c_2,AT
+ sd c_3,40(a0) /* r[5]=c3; */
+
+ dmultu a_6,b_0 /* mul_add_c(a[6],b[0],c1,c2,c3); */
+ mflo t_1
+ mfhi t_2
+ daddu c_1,t_1
+ sltu AT,c_1,t_1
+ daddu t_2,AT
+ daddu c_2,t_2
+ sltu c_3,c_2,t_2
+ dmultu a_5,b_1 /* mul_add_c(a[5],b[1],c1,c2,c3); */
+ mflo t_1
+ mfhi t_2
+ daddu c_1,t_1
+ sltu AT,c_1,t_1
+ daddu t_2,AT
+ daddu c_2,t_2
+ sltu AT,c_2,t_2
+ daddu c_3,AT
+ dmultu a_4,b_2 /* mul_add_c(a[4],b[2],c1,c2,c3); */
+ mflo t_1
+ mfhi t_2
+ daddu c_1,t_1
+ sltu AT,c_1,t_1
+ daddu t_2,AT
+ daddu c_2,t_2
+ sltu AT,c_2,t_2
+ daddu c_3,AT
+ dmultu a_3,b_3 /* mul_add_c(a[3],b[3],c1,c2,c3); */
+ mflo t_1
+ mfhi t_2
+ daddu c_1,t_1
+ sltu AT,c_1,t_1
+ daddu t_2,AT
+ daddu c_2,t_2
+ sltu AT,c_2,t_2
+ daddu c_3,AT
+ dmultu a_2,b_4 /* mul_add_c(a[2],b[4],c1,c2,c3); */
+ mflo t_1
+ mfhi t_2
+ daddu c_1,t_1
+ sltu AT,c_1,t_1
+ daddu t_2,AT
+ daddu c_2,t_2
+ sltu AT,c_2,t_2
+ daddu c_3,AT
+ dmultu a_1,b_5 /* mul_add_c(a[1],b[5],c1,c2,c3); */
+ mflo t_1
+ mfhi t_2
+ daddu c_1,t_1
+ sltu AT,c_1,t_1
+ daddu t_2,AT
+ daddu c_2,t_2
+ sltu AT,c_2,t_2
+ daddu c_3,AT
+ dmultu a_0,b_6 /* mul_add_c(a[0],b[6],c1,c2,c3); */
+ mflo t_1
+ mfhi t_2
+ daddu c_1,t_1
+ sltu AT,c_1,t_1
+ daddu t_2,AT
+ daddu c_2,t_2
+ sltu AT,c_2,t_2
+ daddu c_3,AT
+ sd c_1,48(a0) /* r[6]=c1; */
+
+ dmultu a_0,b_7 /* mul_add_c(a[0],b[7],c2,c3,c1); */
+ mflo t_1
+ mfhi t_2
+ daddu c_2,t_1
+ sltu AT,c_2,t_1
+ daddu t_2,AT
+ daddu c_3,t_2
+ sltu c_1,c_3,t_2
+ dmultu a_1,b_6 /* mul_add_c(a[1],b[6],c2,c3,c1); */
+ mflo t_1
+ mfhi t_2
+ daddu c_2,t_1
+ sltu AT,c_2,t_1
+ daddu t_2,AT
+ daddu c_3,t_2
+ sltu AT,c_3,t_2
+ daddu c_1,AT
+ dmultu a_2,b_5 /* mul_add_c(a[2],b[5],c2,c3,c1); */
+ mflo t_1
+ mfhi t_2
+ daddu c_2,t_1
+ sltu AT,c_2,t_1
+ daddu t_2,AT
+ daddu c_3,t_2
+ sltu AT,c_3,t_2
+ daddu c_1,AT
+ dmultu a_3,b_4 /* mul_add_c(a[3],b[4],c2,c3,c1); */
+ mflo t_1
+ mfhi t_2
+ daddu c_2,t_1
+ sltu AT,c_2,t_1
+ daddu t_2,AT
+ daddu c_3,t_2
+ sltu AT,c_3,t_2
+ daddu c_1,AT
+ dmultu a_4,b_3 /* mul_add_c(a[4],b[3],c2,c3,c1); */
+ mflo t_1
+ mfhi t_2
+ daddu c_2,t_1
+ sltu AT,c_2,t_1
+ daddu t_2,AT
+ daddu c_3,t_2
+ sltu AT,c_3,t_2
+ daddu c_1,AT
+ dmultu a_5,b_2 /* mul_add_c(a[5],b[2],c2,c3,c1); */
+ mflo t_1
+ mfhi t_2
+ daddu c_2,t_1
+ sltu AT,c_2,t_1
+ daddu t_2,AT
+ daddu c_3,t_2
+ sltu AT,c_3,t_2
+ daddu c_1,AT
+ dmultu a_6,b_1 /* mul_add_c(a[6],b[1],c2,c3,c1); */
+ mflo t_1
+ mfhi t_2
+ daddu c_2,t_1
+ sltu AT,c_2,t_1
+ daddu t_2,AT
+ daddu c_3,t_2
+ sltu AT,c_3,t_2
+ daddu c_1,AT
+ dmultu a_7,b_0 /* mul_add_c(a[7],b[0],c2,c3,c1); */
+ mflo t_1
+ mfhi t_2
+ daddu c_2,t_1
+ sltu AT,c_2,t_1
+ daddu t_2,AT
+ daddu c_3,t_2
+ sltu AT,c_3,t_2
+ daddu c_1,AT
+ sd c_2,56(a0) /* r[7]=c2; */
+
+ dmultu a_7,b_1 /* mul_add_c(a[7],b[1],c3,c1,c2); */
+ mflo t_1
+ mfhi t_2
+ daddu c_3,t_1
+ sltu AT,c_3,t_1
+ daddu t_2,AT
+ daddu c_1,t_2
+ sltu c_2,c_1,t_2
+ dmultu a_6,b_2 /* mul_add_c(a[6],b[2],c3,c1,c2); */
+ mflo t_1
+ mfhi t_2
+ daddu c_3,t_1
+ sltu AT,c_3,t_1
+ daddu t_2,AT
+ daddu c_1,t_2
+ sltu AT,c_1,t_2
+ daddu c_2,AT
+ dmultu a_5,b_3 /* mul_add_c(a[5],b[3],c3,c1,c2); */
+ mflo t_1
+ mfhi t_2
+ daddu c_3,t_1
+ sltu AT,c_3,t_1
+ daddu t_2,AT
+ daddu c_1,t_2
+ sltu AT,c_1,t_2
+ daddu c_2,AT
+ dmultu a_4,b_4 /* mul_add_c(a[4],b[4],c3,c1,c2); */
+ mflo t_1
+ mfhi t_2
+ daddu c_3,t_1
+ sltu AT,c_3,t_1
+ daddu t_2,AT
+ daddu c_1,t_2
+ sltu AT,c_1,t_2
+ daddu c_2,AT
+ dmultu a_3,b_5 /* mul_add_c(a[3],b[5],c3,c1,c2); */
+ mflo t_1
+ mfhi t_2
+ daddu c_3,t_1
+ sltu AT,c_3,t_1
+ daddu t_2,AT
+ daddu c_1,t_2
+ sltu AT,c_1,t_2
+ daddu c_2,AT
+ dmultu a_2,b_6 /* mul_add_c(a[2],b[6],c3,c1,c2); */
+ mflo t_1
+ mfhi t_2
+ daddu c_3,t_1
+ sltu AT,c_3,t_1
+ daddu t_2,AT
+ daddu c_1,t_2
+ sltu AT,c_1,t_2
+ daddu c_2,AT
+ dmultu a_1,b_7 /* mul_add_c(a[1],b[7],c3,c1,c2); */
+ mflo t_1
+ mfhi t_2
+ daddu c_3,t_1
+ sltu AT,c_3,t_1
+ daddu t_2,AT
+ daddu c_1,t_2
+ sltu AT,c_1,t_2
+ daddu c_2,AT
+ sd c_3,64(a0) /* r[8]=c3; */
+
+ dmultu a_2,b_7 /* mul_add_c(a[2],b[7],c1,c2,c3); */
+ mflo t_1
+ mfhi t_2
+ daddu c_1,t_1
+ sltu AT,c_1,t_1
+ daddu t_2,AT
+ daddu c_2,t_2
+ sltu c_3,c_2,t_2
+ dmultu a_3,b_6 /* mul_add_c(a[3],b[6],c1,c2,c3); */
+ mflo t_1
+ mfhi t_2
+ daddu c_1,t_1
+ sltu AT,c_1,t_1
+ daddu t_2,AT
+ daddu c_2,t_2
+ sltu AT,c_2,t_2
+ daddu c_3,AT
+ dmultu a_4,b_5 /* mul_add_c(a[4],b[5],c1,c2,c3); */
+ mflo t_1
+ mfhi t_2
+ daddu c_1,t_1
+ sltu AT,c_1,t_1
+ daddu t_2,AT
+ daddu c_2,t_2
+ sltu AT,c_2,t_2
+ daddu c_3,AT
+ dmultu a_5,b_4 /* mul_add_c(a[5],b[4],c1,c2,c3); */
+ mflo t_1
+ mfhi t_2
+ daddu c_1,t_1
+ sltu AT,c_1,t_1
+ daddu t_2,AT
+ daddu c_2,t_2
+ sltu AT,c_2,t_2
+ daddu c_3,AT
+ dmultu a_6,b_3 /* mul_add_c(a[6],b[3],c1,c2,c3); */
+ mflo t_1
+ mfhi t_2
+ daddu c_1,t_1
+ sltu AT,c_1,t_1
+ daddu t_2,AT
+ daddu c_2,t_2
+ sltu AT,c_2,t_2
+ daddu c_3,AT
+ dmultu a_7,b_2 /* mul_add_c(a[7],b[2],c1,c2,c3); */
+ mflo t_1
+ mfhi t_2
+ daddu c_1,t_1
+ sltu AT,c_1,t_1
+ daddu t_2,AT
+ daddu c_2,t_2
+ sltu AT,c_2,t_2
+ daddu c_3,AT
+ sd c_1,72(a0) /* r[9]=c1; */
+
+ dmultu a_7,b_3 /* mul_add_c(a[7],b[3],c2,c3,c1); */
+ mflo t_1
+ mfhi t_2
+ daddu c_2,t_1
+ sltu AT,c_2,t_1
+ daddu t_2,AT
+ daddu c_3,t_2
+ sltu c_1,c_3,t_2
+ dmultu a_6,b_4 /* mul_add_c(a[6],b[4],c2,c3,c1); */
+ mflo t_1
+ mfhi t_2
+ daddu c_2,t_1
+ sltu AT,c_2,t_1
+ daddu t_2,AT
+ daddu c_3,t_2
+ sltu AT,c_3,t_2
+ daddu c_1,AT
+ dmultu a_5,b_5 /* mul_add_c(a[5],b[5],c2,c3,c1); */
+ mflo t_1
+ mfhi t_2
+ daddu c_2,t_1
+ sltu AT,c_2,t_1
+ daddu t_2,AT
+ daddu c_3,t_2
+ sltu AT,c_3,t_2
+ daddu c_1,AT
+ dmultu a_4,b_6 /* mul_add_c(a[4],b[6],c2,c3,c1); */
+ mflo t_1
+ mfhi t_2
+ daddu c_2,t_1
+ sltu AT,c_2,t_1
+ daddu t_2,AT
+ daddu c_3,t_2
+ sltu AT,c_3,t_2
+ daddu c_1,AT
+ dmultu a_3,b_7 /* mul_add_c(a[3],b[7],c2,c3,c1); */
+ mflo t_1
+ mfhi t_2
+ daddu c_2,t_1
+ sltu AT,c_2,t_1
+ daddu t_2,AT
+ daddu c_3,t_2
+ sltu AT,c_3,t_2
+ daddu c_1,AT
+ sd c_2,80(a0) /* r[10]=c2; */
+
+ dmultu a_4,b_7 /* mul_add_c(a[4],b[7],c3,c1,c2); */
+ mflo t_1
+ mfhi t_2
+ daddu c_3,t_1
+ sltu AT,c_3,t_1
+ daddu t_2,AT
+ daddu c_1,t_2
+ sltu c_2,c_1,t_2
+ dmultu a_5,b_6 /* mul_add_c(a[5],b[6],c3,c1,c2); */
+ mflo t_1
+ mfhi t_2
+ daddu c_3,t_1
+ sltu AT,c_3,t_1
+ daddu t_2,AT
+ daddu c_1,t_2
+ sltu AT,c_1,t_2
+ daddu c_2,AT
+ dmultu a_6,b_5 /* mul_add_c(a[6],b[5],c3,c1,c2); */
+ mflo t_1
+ mfhi t_2
+ daddu c_3,t_1
+ sltu AT,c_3,t_1
+ daddu t_2,AT
+ daddu c_1,t_2
+ sltu AT,c_1,t_2
+ daddu c_2,AT
+ dmultu a_7,b_4 /* mul_add_c(a[7],b[4],c3,c1,c2); */
+ mflo t_1
+ mfhi t_2
+ daddu c_3,t_1
+ sltu AT,c_3,t_1
+ daddu t_2,AT
+ daddu c_1,t_2
+ sltu AT,c_1,t_2
+ daddu c_2,AT
+ sd c_3,88(a0) /* r[11]=c3; */
+
+ dmultu a_7,b_5 /* mul_add_c(a[7],b[5],c1,c2,c3); */
+ mflo t_1
+ mfhi t_2
+ daddu c_1,t_1
+ sltu AT,c_1,t_1
+ daddu t_2,AT
+ daddu c_2,t_2
+ sltu c_3,c_2,t_2
+ dmultu a_6,b_6 /* mul_add_c(a[6],b[6],c1,c2,c3); */
+ mflo t_1
+ mfhi t_2
+ daddu c_1,t_1
+ sltu AT,c_1,t_1
+ daddu t_2,AT
+ daddu c_2,t_2
+ sltu AT,c_2,t_2
+ daddu c_3,AT
+ dmultu a_5,b_7 /* mul_add_c(a[5],b[7],c1,c2,c3); */
+ mflo t_1
+ mfhi t_2
+ daddu c_1,t_1
+ sltu AT,c_1,t_1
+ daddu t_2,AT
+ daddu c_2,t_2
+ sltu AT,c_2,t_2
+ daddu c_3,AT
+ sd c_1,96(a0) /* r[12]=c1; */
+
+ dmultu a_6,b_7 /* mul_add_c(a[6],b[7],c2,c3,c1); */
+ mflo t_1
+ mfhi t_2
+ daddu c_2,t_1
+ sltu AT,c_2,t_1
+ daddu t_2,AT
+ daddu c_3,t_2
+ sltu c_1,c_3,t_2
+ dmultu a_7,b_6 /* mul_add_c(a[7],b[6],c2,c3,c1); */
+ mflo t_1
+ mfhi t_2
+ daddu c_2,t_1
+ sltu AT,c_2,t_1
+ daddu t_2,AT
+ daddu c_3,t_2
+ sltu AT,c_3,t_2
+ daddu c_1,AT
+ sd c_2,104(a0) /* r[13]=c2; */
+
+ dmultu a_7,b_7 /* mul_add_c(a[7],b[7],c3,c1,c2); */
+ ld s0,0(sp)
+ ld s1,8(sp)
+ ld s2,16(sp)
+ ld s3,24(sp)
+ ld s4,32(sp)
+ ld s5,40(sp)
+ mflo t_1
+ mfhi t_2
+ daddu c_3,t_1
+ sltu AT,c_3,t_1
+ daddu t_2,AT
+ daddu c_1,t_2
+ sd c_3,112(a0) /* r[14]=c3; */
+ sd c_1,120(a0) /* r[15]=c1; */
+
+ PTR_ADD sp,FRAME_SIZE
+
+ jr ra
+END(bn_mul_comba8)
+
+.align 5
+LEAF(bn_mul_comba4)
+ .set reorder
+ ld a_0,0(a1)
+ ld b_0,0(a2)
+ ld a_1,8(a1)
+ ld a_2,16(a1)
+ dmultu a_0,b_0 /* mul_add_c(a[0],b[0],c1,c2,c3); */
+ ld a_3,24(a1)
+ ld b_1,8(a2)
+ ld b_2,16(a2)
+ ld b_3,24(a2)
+ mflo c_1
+ mfhi c_2
+ sd c_1,0(a0)
+
+ dmultu a_0,b_1 /* mul_add_c(a[0],b[1],c2,c3,c1); */
+ mflo t_1
+ mfhi t_2
+ daddu c_2,t_1
+ sltu AT,c_2,t_1
+ daddu c_3,t_2,AT
+ dmultu a_1,b_0 /* mul_add_c(a[1],b[0],c2,c3,c1); */
+ mflo t_1
+ mfhi t_2
+ daddu c_2,t_1
+ sltu AT,c_2,t_1
+ daddu t_2,AT
+ daddu c_3,t_2
+ sltu c_1,c_3,t_2
+ sd c_2,8(a0)
+
+ dmultu a_2,b_0 /* mul_add_c(a[2],b[0],c3,c1,c2); */
+ mflo t_1
+ mfhi t_2
+ daddu c_3,t_1
+ sltu AT,c_3,t_1
+ daddu t_2,AT
+ daddu c_1,t_2
+ dmultu a_1,b_1 /* mul_add_c(a[1],b[1],c3,c1,c2); */
+ mflo t_1
+ mfhi t_2
+ daddu c_3,t_1
+ sltu AT,c_3,t_1
+ daddu t_2,AT
+ daddu c_1,t_2
+ sltu c_2,c_1,t_2
+ dmultu a_0,b_2 /* mul_add_c(a[0],b[2],c3,c1,c2); */
+ mflo t_1
+ mfhi t_2
+ daddu c_3,t_1
+ sltu AT,c_3,t_1
+ daddu t_2,AT
+ daddu c_1,t_2
+ sltu AT,c_1,t_2
+ daddu c_2,AT
+ sd c_3,16(a0)
+
+ dmultu a_0,b_3 /* mul_add_c(a[0],b[3],c1,c2,c3); */
+ mflo t_1
+ mfhi t_2
+ daddu c_1,t_1
+ sltu AT,c_1,t_1
+ daddu t_2,AT
+ daddu c_2,t_2
+ sltu c_3,c_2,t_2
+ dmultu a_1,b_2 /* mul_add_c(a[1],b[2],c1,c2,c3); */
+ mflo t_1
+ mfhi t_2
+ daddu c_1,t_1
+ sltu AT,c_1,t_1
+ daddu t_2,AT
+ daddu c_2,t_2
+ sltu AT,c_2,t_2
+ daddu c_3,AT
+ dmultu a_2,b_1 /* mul_add_c(a[2],b[1],c1,c2,c3); */
+ mflo t_1
+ mfhi t_2
+ daddu c_1,t_1
+ sltu AT,c_1,t_1
+ daddu t_2,AT
+ daddu c_2,t_2
+ sltu AT,c_2,t_2
+ daddu c_3,AT
+ dmultu a_3,b_0 /* mul_add_c(a[3],b[0],c1,c2,c3); */
+ mflo t_1
+ mfhi t_2
+ daddu c_1,t_1
+ sltu AT,c_1,t_1
+ daddu t_2,AT
+ daddu c_2,t_2
+ sltu AT,c_2,t_2
+ daddu c_3,AT
+ sd c_1,24(a0)
+
+ dmultu a_3,b_1 /* mul_add_c(a[3],b[1],c2,c3,c1); */
+ mflo t_1
+ mfhi t_2
+ daddu c_2,t_1
+ sltu AT,c_2,t_1
+ daddu t_2,AT
+ daddu c_3,t_2
+ sltu c_1,c_3,t_2
+ dmultu a_2,b_2 /* mul_add_c(a[2],b[2],c2,c3,c1); */
+ mflo t_1
+ mfhi t_2
+ daddu c_2,t_1
+ sltu AT,c_2,t_1
+ daddu t_2,AT
+ daddu c_3,t_2
+ sltu AT,c_3,t_2
+ daddu c_1,AT
+ dmultu a_1,b_3 /* mul_add_c(a[1],b[3],c2,c3,c1); */
+ mflo t_1
+ mfhi t_2
+ daddu c_2,t_1
+ sltu AT,c_2,t_1
+ daddu t_2,AT
+ daddu c_3,t_2
+ sltu AT,c_3,t_2
+ daddu c_1,AT
+ sd c_2,32(a0)
+
+ dmultu a_2,b_3 /* mul_add_c(a[2],b[3],c3,c1,c2); */
+ mflo t_1
+ mfhi t_2
+ daddu c_3,t_1
+ sltu AT,c_3,t_1
+ daddu t_2,AT
+ daddu c_1,t_2
+ sltu c_2,c_1,t_2
+ dmultu a_3,b_2 /* mul_add_c(a[3],b[2],c3,c1,c2); */
+ mflo t_1
+ mfhi t_2
+ daddu c_3,t_1
+ sltu AT,c_3,t_1
+ daddu t_2,AT
+ daddu c_1,t_2
+ sltu AT,c_1,t_2
+ daddu c_2,AT
+ sd c_3,40(a0)
+
+ dmultu a_3,b_3 /* mul_add_c(a[3],b[3],c1,c2,c3); */
+ mflo t_1
+ mfhi t_2
+ daddu c_1,t_1
+ sltu AT,c_1,t_1
+ daddu t_2,AT
+ daddu c_2,t_2
+ sd c_1,48(a0)
+ sd c_2,56(a0)
+
+ jr ra
+END(bn_mul_comba4)
+
+#undef a_4
+#undef a_5
+#undef a_6
+#undef a_7
+#define a_4 b_0
+#define a_5 b_1
+#define a_6 b_2
+#define a_7 b_3
+
+.align 5
+LEAF(bn_sqr_comba8)
+ .set reorder
+ ld a_0,0(a1)
+ ld a_1,8(a1)
+ ld a_2,16(a1)
+ ld a_3,24(a1)
+
+ dmultu a_0,a_0 /* mul_add_c(a[0],b[0],c1,c2,c3); */
+ ld a_4,32(a1)
+ ld a_5,40(a1)
+ ld a_6,48(a1)
+ ld a_7,56(a1)
+ mflo c_1
+ mfhi c_2
+ sd c_1,0(a0)
+
+ dmultu a_0,a_1 /* mul_add_c2(a[0],b[1],c2,c3,c1); */
+ mflo t_1
+ mfhi t_2
+ slt c_1,t_2,zero
+ dsll t_2,1
+ slt a2,t_1,zero
+ daddu t_2,a2
+ dsll t_1,1
+ daddu c_2,t_1
+ sltu AT,c_2,t_1
+ daddu c_3,t_2,AT
+ sd c_2,8(a0)
+
+ dmultu a_2,a_0 /* mul_add_c2(a[2],b[0],c3,c1,c2); */
+ mflo t_1
+ mfhi t_2
+ slt c_2,t_2,zero
+ dsll t_2,1
+ slt a2,t_1,zero
+ daddu t_2,a2
+ dsll t_1,1
+ daddu c_3,t_1
+ sltu AT,c_3,t_1
+ daddu t_2,AT
+ daddu c_1,t_2
+ sltu AT,c_1,t_2
+ daddu c_2,AT
+ dmultu a_1,a_1 /* mul_add_c(a[1],b[1],c3,c1,c2); */
+ mflo t_1
+ mfhi t_2
+ daddu c_3,t_1
+ sltu AT,c_3,t_1
+ daddu t_2,AT
+ daddu c_1,t_2
+ sltu AT,c_1,t_2
+ daddu c_2,AT
+ sd c_3,16(a0)
+
+ dmultu a_0,a_3 /* mul_add_c2(a[0],b[3],c1,c2,c3); */
+ mflo t_1
+ mfhi t_2
+ slt c_3,t_2,zero
+ dsll t_2,1
+ slt a2,t_1,zero
+ daddu t_2,a2
+ dsll t_1,1
+ daddu c_1,t_1
+ sltu AT,c_1,t_1
+ daddu t_2,AT
+ daddu c_2,t_2
+ sltu AT,c_2,t_2
+ daddu c_3,AT
+ dmultu a_1,a_2 /* mul_add_c2(a[1],b[2],c1,c2,c3); */
+ mflo t_1
+ mfhi t_2
+ slt AT,t_2,zero
+ daddu c_3,AT
+ dsll t_2,1
+ slt a2,t_1,zero
+ daddu t_2,a2
+ dsll t_1,1
+ daddu c_1,t_1
+ sltu AT,c_1,t_1
+ daddu t_2,AT
+ daddu c_2,t_2
+ sltu AT,c_2,t_2
+ daddu c_3,AT
+ sd c_1,24(a0)
+
+ dmultu a_4,a_0 /* mul_add_c2(a[4],b[0],c2,c3,c1); */
+ mflo t_1
+ mfhi t_2
+ slt c_1,t_2,zero
+ dsll t_2,1
+ slt a2,t_1,zero
+ daddu t_2,a2
+ dsll t_1,1
+ daddu c_2,t_1
+ sltu AT,c_2,t_1
+ daddu t_2,AT
+ daddu c_3,t_2
+ sltu AT,c_3,t_2
+ daddu c_1,AT
+ dmultu a_3,a_1 /* mul_add_c2(a[3],b[1],c2,c3,c1); */
+ mflo t_1
+ mfhi t_2
+ slt AT,t_2,zero
+ daddu c_1,AT
+ dsll t_2,1
+ slt a2,t_1,zero
+ daddu t_2,a2
+ dsll t_1,1
+ daddu c_2,t_1
+ sltu AT,c_2,t_1
+ daddu t_2,AT
+ daddu c_3,t_2
+ sltu AT,c_3,t_2
+ daddu c_1,AT
+ dmultu a_2,a_2 /* mul_add_c(a[2],b[2],c2,c3,c1); */
+ mflo t_1
+ mfhi t_2
+ daddu c_2,t_1
+ sltu AT,c_2,t_1
+ daddu t_2,AT
+ daddu c_3,t_2
+ sltu AT,c_3,t_2
+ daddu c_1,AT
+ sd c_2,32(a0)
+
+ dmultu a_0,a_5 /* mul_add_c2(a[0],b[5],c3,c1,c2); */
+ mflo t_1
+ mfhi t_2
+ slt c_2,t_2,zero
+ dsll t_2,1
+ slt a2,t_1,zero
+ daddu t_2,a2
+ dsll t_1,1
+ daddu c_3,t_1
+ sltu AT,c_3,t_1
+ daddu t_2,AT
+ daddu c_1,t_2
+ sltu AT,c_1,t_2
+ daddu c_2,AT
+ dmultu a_1,a_4 /* mul_add_c2(a[1],b[4],c3,c1,c2); */
+ mflo t_1
+ mfhi t_2
+ slt AT,t_2,zero
+ daddu c_2,AT
+ dsll t_2,1
+ slt a2,t_1,zero
+ daddu t_2,a2
+ dsll t_1,1
+ daddu c_3,t_1
+ sltu AT,c_3,t_1
+ daddu t_2,AT
+ daddu c_1,t_2
+ sltu AT,c_1,t_2
+ daddu c_2,AT
+ dmultu a_2,a_3 /* mul_add_c2(a[2],b[3],c3,c1,c2); */
+ mflo t_1
+ mfhi t_2
+ slt AT,t_2,zero
+ daddu c_2,AT
+ dsll t_2,1
+ slt a2,t_1,zero
+ daddu t_2,a2
+ dsll t_1,1
+ daddu c_3,t_1
+ sltu AT,c_3,t_1
+ daddu t_2,AT
+ daddu c_1,t_2
+ sltu AT,c_1,t_2
+ daddu c_2,AT
+ sd c_3,40(a0)
+
+ dmultu a_6,a_0 /* mul_add_c2(a[6],b[0],c1,c2,c3); */
+ mflo t_1
+ mfhi t_2
+ slt c_3,t_2,zero
+ dsll t_2,1
+ slt a2,t_1,zero
+ daddu t_2,a2
+ dsll t_1,1
+ daddu c_1,t_1
+ sltu AT,c_1,t_1
+ daddu t_2,AT
+ daddu c_2,t_2
+ sltu AT,c_2,t_2
+ daddu c_3,AT
+ dmultu a_5,a_1 /* mul_add_c2(a[5],b[1],c1,c2,c3); */
+ mflo t_1
+ mfhi t_2
+ slt AT,t_2,zero
+ daddu c_3,AT
+ dsll t_2,1
+ slt a2,t_1,zero
+ daddu t_2,a2
+ dsll t_1,1
+ daddu c_1,t_1
+ sltu AT,c_1,t_1
+ daddu t_2,AT
+ daddu c_2,t_2
+ sltu AT,c_2,t_2
+ daddu c_3,AT
+ dmultu a_4,a_2 /* mul_add_c2(a[4],b[2],c1,c2,c3); */
+ mflo t_1
+ mfhi t_2
+ slt AT,t_2,zero
+ daddu c_3,AT
+ dsll t_2,1
+ slt a2,t_1,zero
+ daddu t_2,a2
+ dsll t_1,1
+ daddu c_1,t_1
+ sltu AT,c_1,t_1
+ daddu t_2,AT
+ daddu c_2,t_2
+ sltu AT,c_2,t_2
+ daddu c_3,AT
+ dmultu a_3,a_3 /* mul_add_c(a[3],b[3],c1,c2,c3); */
+ mflo t_1
+ mfhi t_2
+ daddu c_1,t_1
+ sltu AT,c_1,t_1
+ daddu t_2,AT
+ daddu c_2,t_2
+ sltu AT,c_2,t_2
+ daddu c_3,AT
+ sd c_1,48(a0)
+
+ dmultu a_0,a_7 /* mul_add_c2(a[0],b[7],c2,c3,c1); */
+ mflo t_1
+ mfhi t_2
+ slt c_1,t_2,zero
+ dsll t_2,1
+ slt a2,t_1,zero
+ daddu t_2,a2
+ dsll t_1,1
+ daddu c_2,t_1
+ sltu AT,c_2,t_1
+ daddu t_2,AT
+ daddu c_3,t_2
+ sltu AT,c_3,t_2
+ daddu c_1,AT
+ dmultu a_1,a_6 /* mul_add_c2(a[1],b[6],c2,c3,c1); */
+ mflo t_1
+ mfhi t_2
+ slt AT,t_2,zero
+ daddu c_1,AT
+ dsll t_2,1
+ slt a2,t_1,zero
+ daddu t_2,a2
+ dsll t_1,1
+ daddu c_2,t_1
+ sltu AT,c_2,t_1
+ daddu t_2,AT
+ daddu c_3,t_2
+ sltu AT,c_3,t_2
+ daddu c_1,AT
+ dmultu a_2,a_5 /* mul_add_c2(a[2],b[5],c2,c3,c1); */
+ mflo t_1
+ mfhi t_2
+ slt AT,t_2,zero
+ daddu c_1,AT
+ dsll t_2,1
+ slt a2,t_1,zero
+ daddu t_2,a2
+ dsll t_1,1
+ daddu c_2,t_1
+ sltu AT,c_2,t_1
+ daddu t_2,AT
+ daddu c_3,t_2
+ sltu AT,c_3,t_2
+ daddu c_1,AT
+ dmultu a_3,a_4 /* mul_add_c2(a[3],b[4],c2,c3,c1); */
+ mflo t_1
+ mfhi t_2
+ slt AT,t_2,zero
+ daddu c_1,AT
+ dsll t_2,1
+ slt a2,t_1,zero
+ daddu t_2,a2
+ dsll t_1,1
+ daddu c_2,t_1
+ sltu AT,c_2,t_1
+ daddu t_2,AT
+ daddu c_3,t_2
+ sltu AT,c_3,t_2
+ daddu c_1,AT
+ sd c_2,56(a0)
+
+ dmultu a_7,a_1 /* mul_add_c2(a[7],b[1],c3,c1,c2); */
+ mflo t_1
+ mfhi t_2
+ slt c_2,t_2,zero
+ dsll t_2,1
+ slt a2,t_1,zero
+ daddu t_2,a2
+ dsll t_1,1
+ daddu c_3,t_1
+ sltu AT,c_3,t_1
+ daddu t_2,AT
+ daddu c_1,t_2
+ sltu AT,c_1,t_2
+ daddu c_2,AT
+ dmultu a_6,a_2 /* mul_add_c2(a[6],b[2],c3,c1,c2); */
+ mflo t_1
+ mfhi t_2
+ slt AT,t_2,zero
+ daddu c_2,AT
+ dsll t_2,1
+ slt a2,t_1,zero
+ daddu t_2,a2
+ dsll t_1,1
+ daddu c_3,t_1
+ sltu AT,c_3,t_1
+ daddu t_2,AT
+ daddu c_1,t_2
+ sltu AT,c_1,t_2
+ daddu c_2,AT
+ dmultu a_5,a_3 /* mul_add_c2(a[5],b[3],c3,c1,c2); */
+ mflo t_1
+ mfhi t_2
+ slt AT,t_2,zero
+ daddu c_2,AT
+ dsll t_2,1
+ slt a2,t_1,zero
+ daddu t_2,a2
+ dsll t_1,1
+ daddu c_3,t_1
+ sltu AT,c_3,t_1
+ daddu t_2,AT
+ daddu c_1,t_2
+ sltu AT,c_1,t_2
+ daddu c_2,AT
+ dmultu a_4,a_4 /* mul_add_c(a[4],b[4],c3,c1,c2); */
+ mflo t_1
+ mfhi t_2
+ daddu c_3,t_1
+ sltu AT,c_3,t_1
+ daddu t_2,AT
+ daddu c_1,t_2
+ sltu AT,c_1,t_2
+ daddu c_2,AT
+ sd c_3,64(a0)
+
+ dmultu a_2,a_7 /* mul_add_c2(a[2],b[7],c1,c2,c3); */
+ mflo t_1
+ mfhi t_2
+ slt c_3,t_2,zero
+ dsll t_2,1
+ slt a2,t_1,zero
+ daddu t_2,a2
+ dsll t_1,1
+ daddu c_1,t_1
+ sltu AT,c_1,t_1
+ daddu t_2,AT
+ daddu c_2,t_2
+ sltu AT,c_2,t_2
+ daddu c_3,AT
+ dmultu a_3,a_6 /* mul_add_c2(a[3],b[6],c1,c2,c3); */
+ mflo t_1
+ mfhi t_2
+ slt AT,t_2,zero
+ daddu c_3,AT
+ dsll t_2,1
+ slt a2,t_1,zero
+ daddu t_2,a2
+ dsll t_1,1
+ daddu c_1,t_1
+ sltu AT,c_1,t_1
+ daddu t_2,AT
+ daddu c_2,t_2
+ sltu AT,c_2,t_2
+ daddu c_3,AT
+ dmultu a_4,a_5 /* mul_add_c2(a[4],b[5],c1,c2,c3); */
+ mflo t_1
+ mfhi t_2
+ slt AT,t_2,zero
+ daddu c_3,AT
+ dsll t_2,1
+ slt a2,t_1,zero
+ daddu t_2,a2
+ dsll t_1,1
+ daddu c_1,t_1
+ sltu AT,c_1,t_1
+ daddu t_2,AT
+ daddu c_2,t_2
+ sltu AT,c_2,t_2
+ daddu c_3,AT
+ sd c_1,72(a0)
+
+ dmultu a_7,a_3 /* mul_add_c2(a[7],b[3],c2,c3,c1); */
+ mflo t_1
+ mfhi t_2
+ slt c_1,t_2,zero
+ dsll t_2,1
+ slt a2,t_1,zero
+ daddu t_2,a2
+ dsll t_1,1
+ daddu c_2,t_1
+ sltu AT,c_2,t_1
+ daddu t_2,AT
+ daddu c_3,t_2
+ sltu AT,c_3,t_2
+ daddu c_1,AT
+ dmultu a_6,a_4 /* mul_add_c2(a[6],b[4],c2,c3,c1); */
+ mflo t_1
+ mfhi t_2
+ slt AT,t_2,zero
+ daddu c_1,AT
+ dsll t_2,1
+ slt a2,t_1,zero
+ daddu t_2,a2
+ dsll t_1,1
+ daddu c_2,t_1
+ sltu AT,c_2,t_1
+ daddu t_2,AT
+ daddu c_3,t_2
+ sltu AT,c_3,t_2
+ daddu c_1,AT
+ dmultu a_5,a_5 /* mul_add_c(a[5],b[5],c2,c3,c1); */
+ mflo t_1
+ mfhi t_2
+ daddu c_2,t_1
+ sltu AT,c_2,t_1
+ daddu t_2,AT
+ daddu c_3,t_2
+ sltu AT,c_3,t_2
+ daddu c_1,AT
+ sd c_2,80(a0)
+
+ dmultu a_4,a_7 /* mul_add_c2(a[4],b[7],c3,c1,c2); */
+ mflo t_1
+ mfhi t_2
+ slt c_2,t_2,zero
+ dsll t_2,1
+ slt a2,t_1,zero
+ daddu t_2,a2
+ dsll t_1,1
+ daddu c_3,t_1
+ sltu AT,c_3,t_1
+ daddu t_2,AT
+ daddu c_1,t_2
+ sltu AT,c_1,t_2
+ daddu c_2,AT
+ dmultu a_5,a_6 /* mul_add_c2(a[5],b[6],c3,c1,c2); */
+ mflo t_1
+ mfhi t_2
+ slt AT,t_2,zero
+ daddu c_2,AT
+ dsll t_2,1
+ slt a2,t_1,zero
+ daddu t_2,a2
+ dsll t_1,1
+ daddu c_3,t_1
+ sltu AT,c_3,t_1
+ daddu t_2,AT
+ daddu c_1,t_2
+ sltu AT,c_1,t_2
+ daddu c_2,AT
+ sd c_3,88(a0)
+
+ dmultu a_7,a_5 /* mul_add_c2(a[7],b[5],c1,c2,c3); */
+ mflo t_1
+ mfhi t_2
+ slt c_3,t_2,zero
+ dsll t_2,1
+ slt a2,t_1,zero
+ daddu t_2,a2
+ dsll t_1,1
+ daddu c_1,t_1
+ sltu AT,c_1,t_1
+ daddu t_2,AT
+ daddu c_2,t_2
+ sltu AT,c_2,t_2
+ daddu c_3,AT
+ dmultu a_6,a_6 /* mul_add_c(a[6],b[6],c1,c2,c3); */
+ mflo t_1
+ mfhi t_2
+ daddu c_1,t_1
+ sltu AT,c_1,t_1
+ daddu t_2,AT
+ daddu c_2,t_2
+ sltu AT,c_2,t_2
+ daddu c_3,AT
+ sd c_1,96(a0)
+
+ dmultu a_6,a_7 /* mul_add_c2(a[6],b[7],c2,c3,c1); */
+ mflo t_1
+ mfhi t_2
+ slt c_1,t_2,zero
+ dsll t_2,1
+ slt a2,t_1,zero
+ daddu t_2,a2
+ dsll t_1,1
+ daddu c_2,t_1
+ sltu AT,c_2,t_1
+ daddu t_2,AT
+ daddu c_3,t_2
+ sltu AT,c_3,t_2
+ daddu c_1,AT
+ sd c_2,104(a0)
+
+ dmultu a_7,a_7 /* mul_add_c(a[7],b[7],c3,c1,c2); */
+ mflo t_1
+ mfhi t_2
+ daddu c_3,t_1
+ sltu AT,c_3,t_1
+ daddu t_2,AT
+ daddu c_1,t_2
+ sd c_3,112(a0)
+ sd c_1,120(a0)
+
+ jr ra
+END(bn_sqr_comba8)
+
+.align 5
+LEAF(bn_sqr_comba4)
+ .set reorder
+ ld a_0,0(a1)
+ ld a_1,8(a1)
+ ld a_2,16(a1)
+ ld a_3,24(a1)
+ dmultu a_0,a_0 /* mul_add_c(a[0],b[0],c1,c2,c3); */
+ mflo c_1
+ mfhi c_2
+ sd c_1,0(a0)
+
+ dmultu a_0,a_1 /* mul_add_c2(a[0],b[1],c2,c3,c1); */
+ mflo t_1
+ mfhi t_2
+ slt c_1,t_2,zero
+ dsll t_2,1
+ slt a2,t_1,zero
+ daddu t_2,a2
+ dsll t_1,1
+ daddu c_2,t_1
+ sltu AT,c_2,t_1
+ daddu c_3,t_2,AT
+ sd c_2,8(a0)
+
+ dmultu a_2,a_0 /* mul_add_c2(a[2],b[0],c3,c1,c2); */
+ mflo t_1
+ mfhi t_2
+ slt c_2,t_2,zero
+ dsll t_2,1
+ slt a2,t_1,zero
+ daddu t_2,a2
+ dsll t_1,1
+ daddu c_3,t_1
+ sltu AT,c_3,t_1
+ daddu t_2,AT
+ daddu c_1,t_2
+ sltu AT,c_1,t_2
+ daddu c_2,AT
+ dmultu a_1,a_1 /* mul_add_c(a[1],b[1],c3,c1,c2); */
+ mflo t_1
+ mfhi t_2
+ daddu c_3,t_1
+ sltu AT,c_3,t_1
+ daddu t_2,AT
+ daddu c_1,t_2
+ sltu AT,c_1,t_2
+ daddu c_2,AT
+ sd c_3,16(a0)
+
+ dmultu a_0,a_3 /* mul_add_c2(a[0],b[3],c1,c2,c3); */
+ mflo t_1
+ mfhi t_2
+ slt c_3,t_2,zero
+ dsll t_2,1
+ slt a2,t_1,zero
+ daddu t_2,a2
+ dsll t_1,1
+ daddu c_1,t_1
+ sltu AT,c_1,t_1
+ daddu t_2,AT
+ daddu c_2,t_2
+ sltu AT,c_2,t_2
+ daddu c_3,AT
+ dmultu a_1,a_2 /* mul_add_c(a2[1],b[2],c1,c2,c3); */
+ mflo t_1
+ mfhi t_2
+ slt AT,t_2,zero
+ daddu c_3,AT
+ dsll t_2,1
+ slt a2,t_1,zero
+ daddu t_2,a2
+ dsll t_1,1
+ daddu c_1,t_1
+ sltu AT,c_1,t_1
+ daddu t_2,AT
+ daddu c_2,t_2
+ sltu AT,c_2,t_2
+ daddu c_3,AT
+ sd c_1,24(a0)
+
+ dmultu a_3,a_1 /* mul_add_c2(a[3],b[1],c2,c3,c1); */
+ mflo t_1
+ mfhi t_2
+ slt c_1,t_2,zero
+ dsll t_2,1
+ slt a2,t_1,zero
+ daddu t_2,a2
+ dsll t_1,1
+ daddu c_2,t_1
+ sltu AT,c_2,t_1
+ daddu t_2,AT
+ daddu c_3,t_2
+ sltu AT,c_3,t_2
+ daddu c_1,AT
+ dmultu a_2,a_2 /* mul_add_c(a[2],b[2],c2,c3,c1); */
+ mflo t_1
+ mfhi t_2
+ daddu c_2,t_1
+ sltu AT,c_2,t_1
+ daddu t_2,AT
+ daddu c_3,t_2
+ sltu AT,c_3,t_2
+ daddu c_1,AT
+ sd c_2,32(a0)
+
+ dmultu a_2,a_3 /* mul_add_c2(a[2],b[3],c3,c1,c2); */
+ mflo t_1
+ mfhi t_2
+ slt c_2,t_2,zero
+ dsll t_2,1
+ slt a2,t_1,zero
+ daddu t_2,a2
+ dsll t_1,1
+ daddu c_3,t_1
+ sltu AT,c_3,t_1
+ daddu t_2,AT
+ daddu c_1,t_2
+ sltu AT,c_1,t_2
+ daddu c_2,AT
+ sd c_3,40(a0)
+
+ dmultu a_3,a_3 /* mul_add_c(a[3],b[3],c1,c2,c3); */
+ mflo t_1
+ mfhi t_2
+ daddu c_1,t_1
+ sltu AT,c_1,t_1
+ daddu t_2,AT
+ daddu c_2,t_2
+ sd c_1,48(a0)
+ sd c_2,56(a0)
+
+ jr ra
+END(bn_sqr_comba4)
diff --git a/crypto/openssl/crypto/bn/asm/modexp512-x86_64.pl b/crypto/openssl/crypto/bn/asm/modexp512-x86_64.pl
deleted file mode 100755
index bfd6e97..0000000
--- a/crypto/openssl/crypto/bn/asm/modexp512-x86_64.pl
+++ /dev/null
@@ -1,1497 +0,0 @@
-#!/usr/bin/env perl
-#
-# Copyright (c) 2010-2011 Intel Corp.
-# Author: Vinodh.Gopal@intel.com
-# Jim Guilford
-# Erdinc.Ozturk@intel.com
-# Maxim.Perminov@intel.com
-#
-# More information about algorithm used can be found at:
-# http://www.cse.buffalo.edu/srds2009/escs2009_submission_Gopal.pdf
-#
-# ====================================================================
-# Copyright (c) 2011 The OpenSSL Project. All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions
-# are met:
-#
-# 1. Redistributions of source code must retain the above copyright
-# notice, this list of conditions and the following disclaimer.
-#
-# 2. Redistributions in binary form must reproduce the above copyright
-# notice, this list of conditions and the following disclaimer in
-# the documentation and/or other materials provided with the
-# distribution.
-#
-# 3. All advertising materials mentioning features or use of this
-# software must display the following acknowledgment:
-# "This product includes software developed by the OpenSSL Project
-# for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)"
-#
-# 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
-# endorse or promote products derived from this software without
-# prior written permission. For written permission, please contact
-# licensing@OpenSSL.org.
-#
-# 5. Products derived from this software may not be called "OpenSSL"
-# nor may "OpenSSL" appear in their names without prior written
-# permission of the OpenSSL Project.
-#
-# 6. Redistributions of any form whatsoever must retain the following
-# acknowledgment:
-# "This product includes software developed by the OpenSSL Project
-# for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)"
-#
-# THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
-# EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
-# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
-# ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
-# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-# LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
-# STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
-# ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
-# OF THE POSSIBILITY OF SUCH DAMAGE.
-# ====================================================================
-
-$flavour = shift;
-$output = shift;
-if ($flavour =~ /\./) { $output = $flavour; undef $flavour; }
-
-my $win64=0; $win64=1 if ($flavour =~ /[nm]asm|mingw64/ || $output =~ /\.asm$/);
-
-$0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1;
-( $xlate="${dir}x86_64-xlate.pl" and -f $xlate ) or
-( $xlate="${dir}../../perlasm/x86_64-xlate.pl" and -f $xlate) or
-die "can't locate x86_64-xlate.pl";
-
-open OUT,"| \"$^X\" $xlate $flavour $output";
-*STDOUT=*OUT;
-
-use strict;
-my $code=".text\n\n";
-my $m=0;
-
-#
-# Define x512 macros
-#
-
-#MULSTEP_512_ADD MACRO x7, x6, x5, x4, x3, x2, x1, x0, dst, src1, src2, add_src, tmp1, tmp2
-#
-# uses rax, rdx, and args
-sub MULSTEP_512_ADD
-{
- my ($x, $DST, $SRC2, $ASRC, $OP, $TMP)=@_;
- my @X=@$x; # make a copy
-$code.=<<___;
- mov (+8*0)($SRC2), %rax
- mul $OP # rdx:rax = %OP * [0]
- mov ($ASRC), $X[0]
- add %rax, $X[0]
- adc \$0, %rdx
- mov $X[0], $DST
-___
-for(my $i=1;$i<8;$i++) {
-$code.=<<___;
- mov %rdx, $TMP
-
- mov (+8*$i)($SRC2), %rax
- mul $OP # rdx:rax = %OP * [$i]
- mov (+8*$i)($ASRC), $X[$i]
- add %rax, $X[$i]
- adc \$0, %rdx
- add $TMP, $X[$i]
- adc \$0, %rdx
-___
-}
-$code.=<<___;
- mov %rdx, $X[0]
-___
-}
-
-#MULSTEP_512 MACRO x7, x6, x5, x4, x3, x2, x1, x0, dst, src2, src1_val, tmp
-#
-# uses rax, rdx, and args
-sub MULSTEP_512
-{
- my ($x, $DST, $SRC2, $OP, $TMP)=@_;
- my @X=@$x; # make a copy
-$code.=<<___;
- mov (+8*0)($SRC2), %rax
- mul $OP # rdx:rax = %OP * [0]
- add %rax, $X[0]
- adc \$0, %rdx
- mov $X[0], $DST
-___
-for(my $i=1;$i<8;$i++) {
-$code.=<<___;
- mov %rdx, $TMP
-
- mov (+8*$i)($SRC2), %rax
- mul $OP # rdx:rax = %OP * [$i]
- add %rax, $X[$i]
- adc \$0, %rdx
- add $TMP, $X[$i]
- adc \$0, %rdx
-___
-}
-$code.=<<___;
- mov %rdx, $X[0]
-___
-}
-
-#
-# Swizzle Macros
-#
-
-# macro to copy data from flat space to swizzled table
-#MACRO swizzle pDst, pSrc, tmp1, tmp2
-# pDst and pSrc are modified
-sub swizzle
-{
- my ($pDst, $pSrc, $cnt, $d0)=@_;
-$code.=<<___;
- mov \$8, $cnt
-loop_$m:
- mov ($pSrc), $d0
- mov $d0#w, ($pDst)
- shr \$16, $d0
- mov $d0#w, (+64*1)($pDst)
- shr \$16, $d0
- mov $d0#w, (+64*2)($pDst)
- shr \$16, $d0
- mov $d0#w, (+64*3)($pDst)
- lea 8($pSrc), $pSrc
- lea 64*4($pDst), $pDst
- dec $cnt
- jnz loop_$m
-___
-
- $m++;
-}
-
-# macro to copy data from swizzled table to flat space
-#MACRO unswizzle pDst, pSrc, tmp*3
-sub unswizzle
-{
- my ($pDst, $pSrc, $cnt, $d0, $d1)=@_;
-$code.=<<___;
- mov \$4, $cnt
-loop_$m:
- movzxw (+64*3+256*0)($pSrc), $d0
- movzxw (+64*3+256*1)($pSrc), $d1
- shl \$16, $d0
- shl \$16, $d1
- mov (+64*2+256*0)($pSrc), $d0#w
- mov (+64*2+256*1)($pSrc), $d1#w
- shl \$16, $d0
- shl \$16, $d1
- mov (+64*1+256*0)($pSrc), $d0#w
- mov (+64*1+256*1)($pSrc), $d1#w
- shl \$16, $d0
- shl \$16, $d1
- mov (+64*0+256*0)($pSrc), $d0#w
- mov (+64*0+256*1)($pSrc), $d1#w
- mov $d0, (+8*0)($pDst)
- mov $d1, (+8*1)($pDst)
- lea 256*2($pSrc), $pSrc
- lea 8*2($pDst), $pDst
- sub \$1, $cnt
- jnz loop_$m
-___
-
- $m++;
-}
-
-#
-# Data Structures
-#
-
-# Reduce Data
-#
-#
-# Offset Value
-# 0C0 Carries
-# 0B8 X2[10]
-# 0B0 X2[9]
-# 0A8 X2[8]
-# 0A0 X2[7]
-# 098 X2[6]
-# 090 X2[5]
-# 088 X2[4]
-# 080 X2[3]
-# 078 X2[2]
-# 070 X2[1]
-# 068 X2[0]
-# 060 X1[12] P[10]
-# 058 X1[11] P[9] Z[8]
-# 050 X1[10] P[8] Z[7]
-# 048 X1[9] P[7] Z[6]
-# 040 X1[8] P[6] Z[5]
-# 038 X1[7] P[5] Z[4]
-# 030 X1[6] P[4] Z[3]
-# 028 X1[5] P[3] Z[2]
-# 020 X1[4] P[2] Z[1]
-# 018 X1[3] P[1] Z[0]
-# 010 X1[2] P[0] Y[2]
-# 008 X1[1] Q[1] Y[1]
-# 000 X1[0] Q[0] Y[0]
-
-my $X1_offset = 0; # 13 qwords
-my $X2_offset = $X1_offset + 13*8; # 11 qwords
-my $Carries_offset = $X2_offset + 11*8; # 1 qword
-my $Q_offset = 0; # 2 qwords
-my $P_offset = $Q_offset + 2*8; # 11 qwords
-my $Y_offset = 0; # 3 qwords
-my $Z_offset = $Y_offset + 3*8; # 9 qwords
-
-my $Red_Data_Size = $Carries_offset + 1*8; # (25 qwords)
-
-#
-# Stack Frame
-#
-#
-# offset value
-# ... <old stack contents>
-# ...
-# 280 Garray
-
-# 278 tmp16[15]
-# ... ...
-# 200 tmp16[0]
-
-# 1F8 tmp[7]
-# ... ...
-# 1C0 tmp[0]
-
-# 1B8 GT[7]
-# ... ...
-# 180 GT[0]
-
-# 178 Reduce Data
-# ... ...
-# 0B8 Reduce Data
-# 0B0 reserved
-# 0A8 reserved
-# 0A0 reserved
-# 098 reserved
-# 090 reserved
-# 088 reduce result addr
-# 080 exp[8]
-
-# ...
-# 048 exp[1]
-# 040 exp[0]
-
-# 038 reserved
-# 030 loop_idx
-# 028 pg
-# 020 i
-# 018 pData ; arg 4
-# 010 pG ; arg 2
-# 008 pResult ; arg 1
-# 000 rsp ; stack pointer before subtract
-
-my $rsp_offset = 0;
-my $pResult_offset = 8*1 + $rsp_offset;
-my $pG_offset = 8*1 + $pResult_offset;
-my $pData_offset = 8*1 + $pG_offset;
-my $i_offset = 8*1 + $pData_offset;
-my $pg_offset = 8*1 + $i_offset;
-my $loop_idx_offset = 8*1 + $pg_offset;
-my $reserved1_offset = 8*1 + $loop_idx_offset;
-my $exp_offset = 8*1 + $reserved1_offset;
-my $red_result_addr_offset= 8*9 + $exp_offset;
-my $reserved2_offset = 8*1 + $red_result_addr_offset;
-my $Reduce_Data_offset = 8*5 + $reserved2_offset;
-my $GT_offset = $Red_Data_Size + $Reduce_Data_offset;
-my $tmp_offset = 8*8 + $GT_offset;
-my $tmp16_offset = 8*8 + $tmp_offset;
-my $garray_offset = 8*16 + $tmp16_offset;
-my $mem_size = 8*8*32 + $garray_offset;
-
-#
-# Offsets within Reduce Data
-#
-#
-# struct MODF_2FOLD_MONT_512_C1_DATA {
-# UINT64 t[8][8];
-# UINT64 m[8];
-# UINT64 m1[8]; /* 2^768 % m */
-# UINT64 m2[8]; /* 2^640 % m */
-# UINT64 k1[2]; /* (- 1/m) % 2^128 */
-# };
-
-my $T = 0;
-my $M = 512; # = 8 * 8 * 8
-my $M1 = 576; # = 8 * 8 * 9 /* += 8 * 8 */
-my $M2 = 640; # = 8 * 8 * 10 /* += 8 * 8 */
-my $K1 = 704; # = 8 * 8 * 11 /* += 8 * 8 */
-
-#
-# FUNCTIONS
-#
-
-{{{
-#
-# MULADD_128x512 : Function to multiply 128-bits (2 qwords) by 512-bits (8 qwords)
-# and add 512-bits (8 qwords)
-# to get 640 bits (10 qwords)
-# Input: 128-bit mul source: [rdi+8*1], rbp
-# 512-bit mul source: [rsi+8*n]
-# 512-bit add source: r15, r14, ..., r9, r8
-# Output: r9, r8, r15, r14, r13, r12, r11, r10, [rcx+8*1], [rcx+8*0]
-# Clobbers all regs except: rcx, rsi, rdi
-$code.=<<___;
-.type MULADD_128x512,\@abi-omnipotent
-.align 16
-MULADD_128x512:
-___
- &MULSTEP_512([map("%r$_",(8..15))], "(+8*0)(%rcx)", "%rsi", "%rbp", "%rbx");
-$code.=<<___;
- mov (+8*1)(%rdi), %rbp
-___
- &MULSTEP_512([map("%r$_",(9..15,8))], "(+8*1)(%rcx)", "%rsi", "%rbp", "%rbx");
-$code.=<<___;
- ret
-.size MULADD_128x512,.-MULADD_128x512
-___
-}}}
-
-{{{
-#MULADD_256x512 MACRO pDst, pA, pB, OP, TMP, X7, X6, X5, X4, X3, X2, X1, X0
-#
-# Inputs: pDst: Destination (768 bits, 12 qwords)
-# pA: Multiplicand (1024 bits, 16 qwords)
-# pB: Multiplicand (512 bits, 8 qwords)
-# Dst = Ah * B + Al
-# where Ah is (in qwords) A[15:12] (256 bits) and Al is A[7:0] (512 bits)
-# Results in X3 X2 X1 X0 X7 X6 X5 X4 Dst[3:0]
-# Uses registers: arguments, RAX, RDX
-sub MULADD_256x512
-{
- my ($pDst, $pA, $pB, $OP, $TMP, $X)=@_;
-$code.=<<___;
- mov (+8*12)($pA), $OP
-___
- &MULSTEP_512_ADD($X, "(+8*0)($pDst)", $pB, $pA, $OP, $TMP);
- push(@$X,shift(@$X));
-
-$code.=<<___;
- mov (+8*13)($pA), $OP
-___
- &MULSTEP_512($X, "(+8*1)($pDst)", $pB, $OP, $TMP);
- push(@$X,shift(@$X));
-
-$code.=<<___;
- mov (+8*14)($pA), $OP
-___
- &MULSTEP_512($X, "(+8*2)($pDst)", $pB, $OP, $TMP);
- push(@$X,shift(@$X));
-
-$code.=<<___;
- mov (+8*15)($pA), $OP
-___
- &MULSTEP_512($X, "(+8*3)($pDst)", $pB, $OP, $TMP);
- push(@$X,shift(@$X));
-}
-
-#
-# mont_reduce(UINT64 *x, /* 1024 bits, 16 qwords */
-# UINT64 *m, /* 512 bits, 8 qwords */
-# MODF_2FOLD_MONT_512_C1_DATA *data,
-# UINT64 *r) /* 512 bits, 8 qwords */
-# Input: x (number to be reduced): tmp16 (Implicit)
-# m (modulus): [pM] (Implicit)
-# data (reduce data): [pData] (Implicit)
-# Output: r (result): Address in [red_res_addr]
-# result also in: r9, r8, r15, r14, r13, r12, r11, r10
-
-my @X=map("%r$_",(8..15));
-
-$code.=<<___;
-.type mont_reduce,\@abi-omnipotent
-.align 16
-mont_reduce:
-___
-
-my $STACK_DEPTH = 8;
- #
- # X1 = Xh * M1 + Xl
-$code.=<<___;
- lea (+$Reduce_Data_offset+$X1_offset+$STACK_DEPTH)(%rsp), %rdi # pX1 (Dst) 769 bits, 13 qwords
- mov (+$pData_offset+$STACK_DEPTH)(%rsp), %rsi # pM1 (Bsrc) 512 bits, 8 qwords
- add \$$M1, %rsi
- lea (+$tmp16_offset+$STACK_DEPTH)(%rsp), %rcx # X (Asrc) 1024 bits, 16 qwords
-
-___
-
- &MULADD_256x512("%rdi", "%rcx", "%rsi", "%rbp", "%rbx", \@X); # rotates @X 4 times
- # results in r11, r10, r9, r8, r15, r14, r13, r12, X1[3:0]
-
-$code.=<<___;
- xor %rax, %rax
- # X1 += xl
- add (+8*8)(%rcx), $X[4]
- adc (+8*9)(%rcx), $X[5]
- adc (+8*10)(%rcx), $X[6]
- adc (+8*11)(%rcx), $X[7]
- adc \$0, %rax
- # X1 is now rax, r11-r8, r15-r12, tmp16[3:0]
-
- #
- # check for carry ;; carry stored in rax
- mov $X[4], (+8*8)(%rdi) # rdi points to X1
- mov $X[5], (+8*9)(%rdi)
- mov $X[6], %rbp
- mov $X[7], (+8*11)(%rdi)
-
- mov %rax, (+$Reduce_Data_offset+$Carries_offset+$STACK_DEPTH)(%rsp)
-
- mov (+8*0)(%rdi), $X[4]
- mov (+8*1)(%rdi), $X[5]
- mov (+8*2)(%rdi), $X[6]
- mov (+8*3)(%rdi), $X[7]
-
- # X1 is now stored in: X1[11], rbp, X1[9:8], r15-r8
- # rdi -> X1
- # rsi -> M1
-
- #
- # X2 = Xh * M2 + Xl
- # do first part (X2 = Xh * M2)
- add \$8*10, %rdi # rdi -> pXh ; 128 bits, 2 qwords
- # Xh is actually { [rdi+8*1], rbp }
- add \$`$M2-$M1`, %rsi # rsi -> M2
- lea (+$Reduce_Data_offset+$X2_offset+$STACK_DEPTH)(%rsp), %rcx # rcx -> pX2 ; 641 bits, 11 qwords
-___
- unshift(@X,pop(@X)); unshift(@X,pop(@X));
-$code.=<<___;
-
- call MULADD_128x512 # args in rcx, rdi / rbp, rsi, r15-r8
- # result in r9, r8, r15, r14, r13, r12, r11, r10, X2[1:0]
- mov (+$Reduce_Data_offset+$Carries_offset+$STACK_DEPTH)(%rsp), %rax
-
- # X2 += Xl
- add (+8*8-8*10)(%rdi), $X[6] # (-8*10) is to adjust rdi -> Xh to Xl
- adc (+8*9-8*10)(%rdi), $X[7]
- mov $X[6], (+8*8)(%rcx)
- mov $X[7], (+8*9)(%rcx)
-
- adc %rax, %rax
- mov %rax, (+$Reduce_Data_offset+$Carries_offset+$STACK_DEPTH)(%rsp)
-
- lea (+$Reduce_Data_offset+$Q_offset+$STACK_DEPTH)(%rsp), %rdi # rdi -> pQ ; 128 bits, 2 qwords
- add \$`$K1-$M2`, %rsi # rsi -> pK1 ; 128 bits, 2 qwords
-
- # MUL_128x128t128 rdi, rcx, rsi ; Q = X2 * K1 (bottom half)
- # B1:B0 = rsi[1:0] = K1[1:0]
- # A1:A0 = rcx[1:0] = X2[1:0]
- # Result = rdi[1],rbp = Q[1],rbp
- mov (%rsi), %r8 # B0
- mov (+8*1)(%rsi), %rbx # B1
-
- mov (%rcx), %rax # A0
- mul %r8 # B0
- mov %rax, %rbp
- mov %rdx, %r9
-
- mov (+8*1)(%rcx), %rax # A1
- mul %r8 # B0
- add %rax, %r9
-
- mov (%rcx), %rax # A0
- mul %rbx # B1
- add %rax, %r9
-
- mov %r9, (+8*1)(%rdi)
- # end MUL_128x128t128
-
- sub \$`$K1-$M`, %rsi
-
- mov (%rcx), $X[6]
- mov (+8*1)(%rcx), $X[7] # r9:r8 = X2[1:0]
-
- call MULADD_128x512 # args in rcx, rdi / rbp, rsi, r15-r8
- # result in r9, r8, r15, r14, r13, r12, r11, r10, X2[1:0]
-
- # load first half of m to rdx, rdi, rbx, rax
- # moved this here for efficiency
- mov (+8*0)(%rsi), %rax
- mov (+8*1)(%rsi), %rbx
- mov (+8*2)(%rsi), %rdi
- mov (+8*3)(%rsi), %rdx
-
- # continue with reduction
- mov (+$Reduce_Data_offset+$Carries_offset+$STACK_DEPTH)(%rsp), %rbp
-
- add (+8*8)(%rcx), $X[6]
- adc (+8*9)(%rcx), $X[7]
-
- #accumulate the final carry to rbp
- adc %rbp, %rbp
-
- # Add in overflow corrections: R = (X2>>128) += T[overflow]
- # R = {r9, r8, r15, r14, ..., r10}
- shl \$3, %rbp
- mov (+$pData_offset+$STACK_DEPTH)(%rsp), %rcx # rsi -> Data (and points to T)
- add %rcx, %rbp # pT ; 512 bits, 8 qwords, spread out
-
- # rsi will be used to generate a mask after the addition
- xor %rsi, %rsi
-
- add (+8*8*0)(%rbp), $X[0]
- adc (+8*8*1)(%rbp), $X[1]
- adc (+8*8*2)(%rbp), $X[2]
- adc (+8*8*3)(%rbp), $X[3]
- adc (+8*8*4)(%rbp), $X[4]
- adc (+8*8*5)(%rbp), $X[5]
- adc (+8*8*6)(%rbp), $X[6]
- adc (+8*8*7)(%rbp), $X[7]
-
- # if there is a carry: rsi = 0xFFFFFFFFFFFFFFFF
- # if carry is clear: rsi = 0x0000000000000000
- sbb \$0, %rsi
-
- # if carry is clear, subtract 0. Otherwise, subtract 256 bits of m
- and %rsi, %rax
- and %rsi, %rbx
- and %rsi, %rdi
- and %rsi, %rdx
-
- mov \$1, %rbp
- sub %rax, $X[0]
- sbb %rbx, $X[1]
- sbb %rdi, $X[2]
- sbb %rdx, $X[3]
-
- # if there is a borrow: rbp = 0
- # if there is no borrow: rbp = 1
- # this is used to save the borrows in between the first half and the 2nd half of the subtraction of m
- sbb \$0, %rbp
-
- #load second half of m to rdx, rdi, rbx, rax
-
- add \$$M, %rcx
- mov (+8*4)(%rcx), %rax
- mov (+8*5)(%rcx), %rbx
- mov (+8*6)(%rcx), %rdi
- mov (+8*7)(%rcx), %rdx
-
- # use the rsi mask as before
- # if carry is clear, subtract 0. Otherwise, subtract 256 bits of m
- and %rsi, %rax
- and %rsi, %rbx
- and %rsi, %rdi
- and %rsi, %rdx
-
- # if rbp = 0, there was a borrow before, it is moved to the carry flag
- # if rbp = 1, there was not a borrow before, carry flag is cleared
- sub \$1, %rbp
-
- sbb %rax, $X[4]
- sbb %rbx, $X[5]
- sbb %rdi, $X[6]
- sbb %rdx, $X[7]
-
- # write R back to memory
-
- mov (+$red_result_addr_offset+$STACK_DEPTH)(%rsp), %rsi
- mov $X[0], (+8*0)(%rsi)
- mov $X[1], (+8*1)(%rsi)
- mov $X[2], (+8*2)(%rsi)
- mov $X[3], (+8*3)(%rsi)
- mov $X[4], (+8*4)(%rsi)
- mov $X[5], (+8*5)(%rsi)
- mov $X[6], (+8*6)(%rsi)
- mov $X[7], (+8*7)(%rsi)
-
- ret
-.size mont_reduce,.-mont_reduce
-___
-}}}
-
-{{{
-#MUL_512x512 MACRO pDst, pA, pB, x7, x6, x5, x4, x3, x2, x1, x0, tmp*2
-#
-# Inputs: pDst: Destination (1024 bits, 16 qwords)
-# pA: Multiplicand (512 bits, 8 qwords)
-# pB: Multiplicand (512 bits, 8 qwords)
-# Uses registers rax, rdx, args
-# B operand in [pB] and also in x7...x0
-sub MUL_512x512
-{
- my ($pDst, $pA, $pB, $x, $OP, $TMP, $pDst_o)=@_;
- my ($pDst, $pDst_o) = ($pDst =~ m/([^+]*)\+?(.*)?/);
- my @X=@$x; # make a copy
-
-$code.=<<___;
- mov (+8*0)($pA), $OP
-
- mov $X[0], %rax
- mul $OP # rdx:rax = %OP * [0]
- mov %rax, (+$pDst_o+8*0)($pDst)
- mov %rdx, $X[0]
-___
-for(my $i=1;$i<8;$i++) {
-$code.=<<___;
- mov $X[$i], %rax
- mul $OP # rdx:rax = %OP * [$i]
- add %rax, $X[$i-1]
- adc \$0, %rdx
- mov %rdx, $X[$i]
-___
-}
-
-for(my $i=1;$i<8;$i++) {
-$code.=<<___;
- mov (+8*$i)($pA), $OP
-___
-
- &MULSTEP_512(\@X, "(+$pDst_o+8*$i)($pDst)", $pB, $OP, $TMP);
- push(@X,shift(@X));
-}
-
-$code.=<<___;
- mov $X[0], (+$pDst_o+8*8)($pDst)
- mov $X[1], (+$pDst_o+8*9)($pDst)
- mov $X[2], (+$pDst_o+8*10)($pDst)
- mov $X[3], (+$pDst_o+8*11)($pDst)
- mov $X[4], (+$pDst_o+8*12)($pDst)
- mov $X[5], (+$pDst_o+8*13)($pDst)
- mov $X[6], (+$pDst_o+8*14)($pDst)
- mov $X[7], (+$pDst_o+8*15)($pDst)
-___
-}
-
-#
-# mont_mul_a3b : subroutine to compute (Src1 * Src2) % M (all 512-bits)
-# Input: src1: Address of source 1: rdi
-# src2: Address of source 2: rsi
-# Output: dst: Address of destination: [red_res_addr]
-# src2 and result also in: r9, r8, r15, r14, r13, r12, r11, r10
-# Temp: Clobbers [tmp16], all registers
-$code.=<<___;
-.type mont_mul_a3b,\@abi-omnipotent
-.align 16
-mont_mul_a3b:
- #
- # multiply tmp = src1 * src2
- # For multiply: dst = rcx, src1 = rdi, src2 = rsi
- # stack depth is extra 8 from call
-___
- &MUL_512x512("%rsp+$tmp16_offset+8", "%rdi", "%rsi", [map("%r$_",(10..15,8..9))], "%rbp", "%rbx");
-$code.=<<___;
- #
- # Dst = tmp % m
- # Call reduce(tmp, m, data, dst)
-
- # tail recursion optimization: jmp to mont_reduce and return from there
- jmp mont_reduce
- # call mont_reduce
- # ret
-.size mont_mul_a3b,.-mont_mul_a3b
-___
-}}}
-
-{{{
-#SQR_512 MACRO pDest, pA, x7, x6, x5, x4, x3, x2, x1, x0, tmp*4
-#
-# Input in memory [pA] and also in x7...x0
-# Uses all argument registers plus rax and rdx
-#
-# This version computes all of the off-diagonal terms into memory,
-# and then it adds in the diagonal terms
-
-sub SQR_512
-{
- my ($pDst, $pA, $x, $A, $tmp, $x7, $x6, $pDst_o)=@_;
- my ($pDst, $pDst_o) = ($pDst =~ m/([^+]*)\+?(.*)?/);
- my @X=@$x; # make a copy
-$code.=<<___;
- # ------------------
- # first pass 01...07
- # ------------------
- mov $X[0], $A
-
- mov $X[1],%rax
- mul $A
- mov %rax, (+$pDst_o+8*1)($pDst)
-___
-for(my $i=2;$i<8;$i++) {
-$code.=<<___;
- mov %rdx, $X[$i-2]
- mov $X[$i],%rax
- mul $A
- add %rax, $X[$i-2]
- adc \$0, %rdx
-___
-}
-$code.=<<___;
- mov %rdx, $x7
-
- mov $X[0], (+$pDst_o+8*2)($pDst)
-
- # ------------------
- # second pass 12...17
- # ------------------
-
- mov (+8*1)($pA), $A
-
- mov (+8*2)($pA),%rax
- mul $A
- add %rax, $X[1]
- adc \$0, %rdx
- mov $X[1], (+$pDst_o+8*3)($pDst)
-
- mov %rdx, $X[0]
- mov (+8*3)($pA),%rax
- mul $A
- add %rax, $X[2]
- adc \$0, %rdx
- add $X[0], $X[2]
- adc \$0, %rdx
- mov $X[2], (+$pDst_o+8*4)($pDst)
-
- mov %rdx, $X[0]
- mov (+8*4)($pA),%rax
- mul $A
- add %rax, $X[3]
- adc \$0, %rdx
- add $X[0], $X[3]
- adc \$0, %rdx
-
- mov %rdx, $X[0]
- mov (+8*5)($pA),%rax
- mul $A
- add %rax, $X[4]
- adc \$0, %rdx
- add $X[0], $X[4]
- adc \$0, %rdx
-
- mov %rdx, $X[0]
- mov $X[6],%rax
- mul $A
- add %rax, $X[5]
- adc \$0, %rdx
- add $X[0], $X[5]
- adc \$0, %rdx
-
- mov %rdx, $X[0]
- mov $X[7],%rax
- mul $A
- add %rax, $x7
- adc \$0, %rdx
- add $X[0], $x7
- adc \$0, %rdx
-
- mov %rdx, $X[1]
-
- # ------------------
- # third pass 23...27
- # ------------------
- mov (+8*2)($pA), $A
-
- mov (+8*3)($pA),%rax
- mul $A
- add %rax, $X[3]
- adc \$0, %rdx
- mov $X[3], (+$pDst_o+8*5)($pDst)
-
- mov %rdx, $X[0]
- mov (+8*4)($pA),%rax
- mul $A
- add %rax, $X[4]
- adc \$0, %rdx
- add $X[0], $X[4]
- adc \$0, %rdx
- mov $X[4], (+$pDst_o+8*6)($pDst)
-
- mov %rdx, $X[0]
- mov (+8*5)($pA),%rax
- mul $A
- add %rax, $X[5]
- adc \$0, %rdx
- add $X[0], $X[5]
- adc \$0, %rdx
-
- mov %rdx, $X[0]
- mov $X[6],%rax
- mul $A
- add %rax, $x7
- adc \$0, %rdx
- add $X[0], $x7
- adc \$0, %rdx
-
- mov %rdx, $X[0]
- mov $X[7],%rax
- mul $A
- add %rax, $X[1]
- adc \$0, %rdx
- add $X[0], $X[1]
- adc \$0, %rdx
-
- mov %rdx, $X[2]
-
- # ------------------
- # fourth pass 34...37
- # ------------------
-
- mov (+8*3)($pA), $A
-
- mov (+8*4)($pA),%rax
- mul $A
- add %rax, $X[5]
- adc \$0, %rdx
- mov $X[5], (+$pDst_o+8*7)($pDst)
-
- mov %rdx, $X[0]
- mov (+8*5)($pA),%rax
- mul $A
- add %rax, $x7
- adc \$0, %rdx
- add $X[0], $x7
- adc \$0, %rdx
- mov $x7, (+$pDst_o+8*8)($pDst)
-
- mov %rdx, $X[0]
- mov $X[6],%rax
- mul $A
- add %rax, $X[1]
- adc \$0, %rdx
- add $X[0], $X[1]
- adc \$0, %rdx
-
- mov %rdx, $X[0]
- mov $X[7],%rax
- mul $A
- add %rax, $X[2]
- adc \$0, %rdx
- add $X[0], $X[2]
- adc \$0, %rdx
-
- mov %rdx, $X[5]
-
- # ------------------
- # fifth pass 45...47
- # ------------------
- mov (+8*4)($pA), $A
-
- mov (+8*5)($pA),%rax
- mul $A
- add %rax, $X[1]
- adc \$0, %rdx
- mov $X[1], (+$pDst_o+8*9)($pDst)
-
- mov %rdx, $X[0]
- mov $X[6],%rax
- mul $A
- add %rax, $X[2]
- adc \$0, %rdx
- add $X[0], $X[2]
- adc \$0, %rdx
- mov $X[2], (+$pDst_o+8*10)($pDst)
-
- mov %rdx, $X[0]
- mov $X[7],%rax
- mul $A
- add %rax, $X[5]
- adc \$0, %rdx
- add $X[0], $X[5]
- adc \$0, %rdx
-
- mov %rdx, $X[1]
-
- # ------------------
- # sixth pass 56...57
- # ------------------
- mov (+8*5)($pA), $A
-
- mov $X[6],%rax
- mul $A
- add %rax, $X[5]
- adc \$0, %rdx
- mov $X[5], (+$pDst_o+8*11)($pDst)
-
- mov %rdx, $X[0]
- mov $X[7],%rax
- mul $A
- add %rax, $X[1]
- adc \$0, %rdx
- add $X[0], $X[1]
- adc \$0, %rdx
- mov $X[1], (+$pDst_o+8*12)($pDst)
-
- mov %rdx, $X[2]
-
- # ------------------
- # seventh pass 67
- # ------------------
- mov $X[6], $A
-
- mov $X[7],%rax
- mul $A
- add %rax, $X[2]
- adc \$0, %rdx
- mov $X[2], (+$pDst_o+8*13)($pDst)
-
- mov %rdx, (+$pDst_o+8*14)($pDst)
-
- # start finalize (add in squares, and double off-terms)
- mov (+$pDst_o+8*1)($pDst), $X[0]
- mov (+$pDst_o+8*2)($pDst), $X[1]
- mov (+$pDst_o+8*3)($pDst), $X[2]
- mov (+$pDst_o+8*4)($pDst), $X[3]
- mov (+$pDst_o+8*5)($pDst), $X[4]
- mov (+$pDst_o+8*6)($pDst), $X[5]
-
- mov (+8*3)($pA), %rax
- mul %rax
- mov %rax, $x6
- mov %rdx, $X[6]
-
- add $X[0], $X[0]
- adc $X[1], $X[1]
- adc $X[2], $X[2]
- adc $X[3], $X[3]
- adc $X[4], $X[4]
- adc $X[5], $X[5]
- adc \$0, $X[6]
-
- mov (+8*0)($pA), %rax
- mul %rax
- mov %rax, (+$pDst_o+8*0)($pDst)
- mov %rdx, $A
-
- mov (+8*1)($pA), %rax
- mul %rax
-
- add $A, $X[0]
- adc %rax, $X[1]
- adc \$0, %rdx
-
- mov %rdx, $A
- mov $X[0], (+$pDst_o+8*1)($pDst)
- mov $X[1], (+$pDst_o+8*2)($pDst)
-
- mov (+8*2)($pA), %rax
- mul %rax
-
- add $A, $X[2]
- adc %rax, $X[3]
- adc \$0, %rdx
-
- mov %rdx, $A
-
- mov $X[2], (+$pDst_o+8*3)($pDst)
- mov $X[3], (+$pDst_o+8*4)($pDst)
-
- xor $tmp, $tmp
- add $A, $X[4]
- adc $x6, $X[5]
- adc \$0, $tmp
-
- mov $X[4], (+$pDst_o+8*5)($pDst)
- mov $X[5], (+$pDst_o+8*6)($pDst)
-
- # %%tmp has 0/1 in column 7
- # %%A6 has a full value in column 7
-
- mov (+$pDst_o+8*7)($pDst), $X[0]
- mov (+$pDst_o+8*8)($pDst), $X[1]
- mov (+$pDst_o+8*9)($pDst), $X[2]
- mov (+$pDst_o+8*10)($pDst), $X[3]
- mov (+$pDst_o+8*11)($pDst), $X[4]
- mov (+$pDst_o+8*12)($pDst), $X[5]
- mov (+$pDst_o+8*13)($pDst), $x6
- mov (+$pDst_o+8*14)($pDst), $x7
-
- mov $X[7], %rax
- mul %rax
- mov %rax, $X[7]
- mov %rdx, $A
-
- add $X[0], $X[0]
- adc $X[1], $X[1]
- adc $X[2], $X[2]
- adc $X[3], $X[3]
- adc $X[4], $X[4]
- adc $X[5], $X[5]
- adc $x6, $x6
- adc $x7, $x7
- adc \$0, $A
-
- add $tmp, $X[0]
-
- mov (+8*4)($pA), %rax
- mul %rax
-
- add $X[6], $X[0]
- adc %rax, $X[1]
- adc \$0, %rdx
-
- mov %rdx, $tmp
-
- mov $X[0], (+$pDst_o+8*7)($pDst)
- mov $X[1], (+$pDst_o+8*8)($pDst)
-
- mov (+8*5)($pA), %rax
- mul %rax
-
- add $tmp, $X[2]
- adc %rax, $X[3]
- adc \$0, %rdx
-
- mov %rdx, $tmp
-
- mov $X[2], (+$pDst_o+8*9)($pDst)
- mov $X[3], (+$pDst_o+8*10)($pDst)
-
- mov (+8*6)($pA), %rax
- mul %rax
-
- add $tmp, $X[4]
- adc %rax, $X[5]
- adc \$0, %rdx
-
- mov $X[4], (+$pDst_o+8*11)($pDst)
- mov $X[5], (+$pDst_o+8*12)($pDst)
-
- add %rdx, $x6
- adc $X[7], $x7
- adc \$0, $A
-
- mov $x6, (+$pDst_o+8*13)($pDst)
- mov $x7, (+$pDst_o+8*14)($pDst)
- mov $A, (+$pDst_o+8*15)($pDst)
-___
-}
-
-#
-# sqr_reduce: subroutine to compute Result = reduce(Result * Result)
-#
-# input and result also in: r9, r8, r15, r14, r13, r12, r11, r10
-#
-$code.=<<___;
-.type sqr_reduce,\@abi-omnipotent
-.align 16
-sqr_reduce:
- mov (+$pResult_offset+8)(%rsp), %rcx
-___
- &SQR_512("%rsp+$tmp16_offset+8", "%rcx", [map("%r$_",(10..15,8..9))], "%rbx", "%rbp", "%rsi", "%rdi");
-$code.=<<___;
- # tail recursion optimization: jmp to mont_reduce and return from there
- jmp mont_reduce
- # call mont_reduce
- # ret
-.size sqr_reduce,.-sqr_reduce
-___
-}}}
-
-#
-# MAIN FUNCTION
-#
-
-#mod_exp_512(UINT64 *result, /* 512 bits, 8 qwords */
-# UINT64 *g, /* 512 bits, 8 qwords */
-# UINT64 *exp, /* 512 bits, 8 qwords */
-# struct mod_ctx_512 *data)
-
-# window size = 5
-# table size = 2^5 = 32
-#table_entries equ 32
-#table_size equ table_entries * 8
-$code.=<<___;
-.globl mod_exp_512
-.type mod_exp_512,\@function,4
-mod_exp_512:
- push %rbp
- push %rbx
- push %r12
- push %r13
- push %r14
- push %r15
-
- # adjust stack down and then align it with cache boundary
- mov %rsp, %r8
- sub \$$mem_size, %rsp
- and \$-64, %rsp
-
- # store previous stack pointer and arguments
- mov %r8, (+$rsp_offset)(%rsp)
- mov %rdi, (+$pResult_offset)(%rsp)
- mov %rsi, (+$pG_offset)(%rsp)
- mov %rcx, (+$pData_offset)(%rsp)
-.Lbody:
- # transform g into montgomery space
- # GT = reduce(g * C2) = reduce(g * (2^256))
- # reduce expects to have the input in [tmp16]
- pxor %xmm4, %xmm4
- movdqu (+16*0)(%rsi), %xmm0
- movdqu (+16*1)(%rsi), %xmm1
- movdqu (+16*2)(%rsi), %xmm2
- movdqu (+16*3)(%rsi), %xmm3
- movdqa %xmm4, (+$tmp16_offset+16*0)(%rsp)
- movdqa %xmm4, (+$tmp16_offset+16*1)(%rsp)
- movdqa %xmm4, (+$tmp16_offset+16*6)(%rsp)
- movdqa %xmm4, (+$tmp16_offset+16*7)(%rsp)
- movdqa %xmm0, (+$tmp16_offset+16*2)(%rsp)
- movdqa %xmm1, (+$tmp16_offset+16*3)(%rsp)
- movdqa %xmm2, (+$tmp16_offset+16*4)(%rsp)
- movdqa %xmm3, (+$tmp16_offset+16*5)(%rsp)
-
- # load pExp before rdx gets blown away
- movdqu (+16*0)(%rdx), %xmm0
- movdqu (+16*1)(%rdx), %xmm1
- movdqu (+16*2)(%rdx), %xmm2
- movdqu (+16*3)(%rdx), %xmm3
-
- lea (+$GT_offset)(%rsp), %rbx
- mov %rbx, (+$red_result_addr_offset)(%rsp)
- call mont_reduce
-
- # Initialize tmp = C
- lea (+$tmp_offset)(%rsp), %rcx
- xor %rax, %rax
- mov %rax, (+8*0)(%rcx)
- mov %rax, (+8*1)(%rcx)
- mov %rax, (+8*3)(%rcx)
- mov %rax, (+8*4)(%rcx)
- mov %rax, (+8*5)(%rcx)
- mov %rax, (+8*6)(%rcx)
- mov %rax, (+8*7)(%rcx)
- mov %rax, (+$exp_offset+8*8)(%rsp)
- movq \$1, (+8*2)(%rcx)
-
- lea (+$garray_offset)(%rsp), %rbp
- mov %rcx, %rsi # pTmp
- mov %rbp, %rdi # Garray[][0]
-___
-
- &swizzle("%rdi", "%rcx", "%rax", "%rbx");
-
- # for (rax = 31; rax != 0; rax--) {
- # tmp = reduce(tmp * G)
- # swizzle(pg, tmp);
- # pg += 2; }
-$code.=<<___;
- mov \$31, %rax
- mov %rax, (+$i_offset)(%rsp)
- mov %rbp, (+$pg_offset)(%rsp)
- # rsi -> pTmp
- mov %rsi, (+$red_result_addr_offset)(%rsp)
- mov (+8*0)(%rsi), %r10
- mov (+8*1)(%rsi), %r11
- mov (+8*2)(%rsi), %r12
- mov (+8*3)(%rsi), %r13
- mov (+8*4)(%rsi), %r14
- mov (+8*5)(%rsi), %r15
- mov (+8*6)(%rsi), %r8
- mov (+8*7)(%rsi), %r9
-init_loop:
- lea (+$GT_offset)(%rsp), %rdi
- call mont_mul_a3b
- lea (+$tmp_offset)(%rsp), %rsi
- mov (+$pg_offset)(%rsp), %rbp
- add \$2, %rbp
- mov %rbp, (+$pg_offset)(%rsp)
- mov %rsi, %rcx # rcx = rsi = addr of tmp
-___
-
- &swizzle("%rbp", "%rcx", "%rax", "%rbx");
-$code.=<<___;
- mov (+$i_offset)(%rsp), %rax
- sub \$1, %rax
- mov %rax, (+$i_offset)(%rsp)
- jne init_loop
-
- #
- # Copy exponent onto stack
- movdqa %xmm0, (+$exp_offset+16*0)(%rsp)
- movdqa %xmm1, (+$exp_offset+16*1)(%rsp)
- movdqa %xmm2, (+$exp_offset+16*2)(%rsp)
- movdqa %xmm3, (+$exp_offset+16*3)(%rsp)
-
-
- #
- # Do exponentiation
- # Initialize result to G[exp{511:507}]
- mov (+$exp_offset+62)(%rsp), %eax
- mov %rax, %rdx
- shr \$11, %rax
- and \$0x07FF, %edx
- mov %edx, (+$exp_offset+62)(%rsp)
- lea (+$garray_offset)(%rsp,%rax,2), %rsi
- mov (+$pResult_offset)(%rsp), %rdx
-___
-
- &unswizzle("%rdx", "%rsi", "%rbp", "%rbx", "%rax");
-
- #
- # Loop variables
- # rcx = [loop_idx] = index: 510-5 to 0 by 5
-$code.=<<___;
- movq \$505, (+$loop_idx_offset)(%rsp)
-
- mov (+$pResult_offset)(%rsp), %rcx
- mov %rcx, (+$red_result_addr_offset)(%rsp)
- mov (+8*0)(%rcx), %r10
- mov (+8*1)(%rcx), %r11
- mov (+8*2)(%rcx), %r12
- mov (+8*3)(%rcx), %r13
- mov (+8*4)(%rcx), %r14
- mov (+8*5)(%rcx), %r15
- mov (+8*6)(%rcx), %r8
- mov (+8*7)(%rcx), %r9
- jmp sqr_2
-
-main_loop_a3b:
- call sqr_reduce
- call sqr_reduce
- call sqr_reduce
-sqr_2:
- call sqr_reduce
- call sqr_reduce
-
- #
- # Do multiply, first look up proper value in Garray
- mov (+$loop_idx_offset)(%rsp), %rcx # bit index
- mov %rcx, %rax
- shr \$4, %rax # rax is word pointer
- mov (+$exp_offset)(%rsp,%rax,2), %edx
- and \$15, %rcx
- shrq %cl, %rdx
- and \$0x1F, %rdx
-
- lea (+$garray_offset)(%rsp,%rdx,2), %rsi
- lea (+$tmp_offset)(%rsp), %rdx
- mov %rdx, %rdi
-___
-
- &unswizzle("%rdx", "%rsi", "%rbp", "%rbx", "%rax");
- # rdi = tmp = pG
-
- #
- # Call mod_mul_a1(pDst, pSrc1, pSrc2, pM, pData)
- # result result pG M Data
-$code.=<<___;
- mov (+$pResult_offset)(%rsp), %rsi
- call mont_mul_a3b
-
- #
- # finish loop
- mov (+$loop_idx_offset)(%rsp), %rcx
- sub \$5, %rcx
- mov %rcx, (+$loop_idx_offset)(%rsp)
- jge main_loop_a3b
-
- #
-
-end_main_loop_a3b:
- # transform result out of Montgomery space
- # result = reduce(result)
- mov (+$pResult_offset)(%rsp), %rdx
- pxor %xmm4, %xmm4
- movdqu (+16*0)(%rdx), %xmm0
- movdqu (+16*1)(%rdx), %xmm1
- movdqu (+16*2)(%rdx), %xmm2
- movdqu (+16*3)(%rdx), %xmm3
- movdqa %xmm4, (+$tmp16_offset+16*4)(%rsp)
- movdqa %xmm4, (+$tmp16_offset+16*5)(%rsp)
- movdqa %xmm4, (+$tmp16_offset+16*6)(%rsp)
- movdqa %xmm4, (+$tmp16_offset+16*7)(%rsp)
- movdqa %xmm0, (+$tmp16_offset+16*0)(%rsp)
- movdqa %xmm1, (+$tmp16_offset+16*1)(%rsp)
- movdqa %xmm2, (+$tmp16_offset+16*2)(%rsp)
- movdqa %xmm3, (+$tmp16_offset+16*3)(%rsp)
- call mont_reduce
-
- # If result > m, subract m
- # load result into r15:r8
- mov (+$pResult_offset)(%rsp), %rax
- mov (+8*0)(%rax), %r8
- mov (+8*1)(%rax), %r9
- mov (+8*2)(%rax), %r10
- mov (+8*3)(%rax), %r11
- mov (+8*4)(%rax), %r12
- mov (+8*5)(%rax), %r13
- mov (+8*6)(%rax), %r14
- mov (+8*7)(%rax), %r15
-
- # subtract m
- mov (+$pData_offset)(%rsp), %rbx
- add \$$M, %rbx
-
- sub (+8*0)(%rbx), %r8
- sbb (+8*1)(%rbx), %r9
- sbb (+8*2)(%rbx), %r10
- sbb (+8*3)(%rbx), %r11
- sbb (+8*4)(%rbx), %r12
- sbb (+8*5)(%rbx), %r13
- sbb (+8*6)(%rbx), %r14
- sbb (+8*7)(%rbx), %r15
-
- # if Carry is clear, replace result with difference
- mov (+8*0)(%rax), %rsi
- mov (+8*1)(%rax), %rdi
- mov (+8*2)(%rax), %rcx
- mov (+8*3)(%rax), %rdx
- cmovnc %r8, %rsi
- cmovnc %r9, %rdi
- cmovnc %r10, %rcx
- cmovnc %r11, %rdx
- mov %rsi, (+8*0)(%rax)
- mov %rdi, (+8*1)(%rax)
- mov %rcx, (+8*2)(%rax)
- mov %rdx, (+8*3)(%rax)
-
- mov (+8*4)(%rax), %rsi
- mov (+8*5)(%rax), %rdi
- mov (+8*6)(%rax), %rcx
- mov (+8*7)(%rax), %rdx
- cmovnc %r12, %rsi
- cmovnc %r13, %rdi
- cmovnc %r14, %rcx
- cmovnc %r15, %rdx
- mov %rsi, (+8*4)(%rax)
- mov %rdi, (+8*5)(%rax)
- mov %rcx, (+8*6)(%rax)
- mov %rdx, (+8*7)(%rax)
-
- mov (+$rsp_offset)(%rsp), %rsi
- mov 0(%rsi),%r15
- mov 8(%rsi),%r14
- mov 16(%rsi),%r13
- mov 24(%rsi),%r12
- mov 32(%rsi),%rbx
- mov 40(%rsi),%rbp
- lea 48(%rsi),%rsp
-.Lepilogue:
- ret
-.size mod_exp_512, . - mod_exp_512
-___
-
-if ($win64) {
-# EXCEPTION_DISPOSITION handler (EXCEPTION_RECORD *rec,ULONG64 frame,
-# CONTEXT *context,DISPATCHER_CONTEXT *disp)
-my $rec="%rcx";
-my $frame="%rdx";
-my $context="%r8";
-my $disp="%r9";
-
-$code.=<<___;
-.extern __imp_RtlVirtualUnwind
-.type mod_exp_512_se_handler,\@abi-omnipotent
-.align 16
-mod_exp_512_se_handler:
- push %rsi
- push %rdi
- push %rbx
- push %rbp
- push %r12
- push %r13
- push %r14
- push %r15
- pushfq
- sub \$64,%rsp
-
- mov 120($context),%rax # pull context->Rax
- mov 248($context),%rbx # pull context->Rip
-
- lea .Lbody(%rip),%r10
- cmp %r10,%rbx # context->Rip<prologue label
- jb .Lin_prologue
-
- mov 152($context),%rax # pull context->Rsp
-
- lea .Lepilogue(%rip),%r10
- cmp %r10,%rbx # context->Rip>=epilogue label
- jae .Lin_prologue
-
- mov $rsp_offset(%rax),%rax # pull saved Rsp
-
- mov 32(%rax),%rbx
- mov 40(%rax),%rbp
- mov 24(%rax),%r12
- mov 16(%rax),%r13
- mov 8(%rax),%r14
- mov 0(%rax),%r15
- lea 48(%rax),%rax
- mov %rbx,144($context) # restore context->Rbx
- mov %rbp,160($context) # restore context->Rbp
- mov %r12,216($context) # restore context->R12
- mov %r13,224($context) # restore context->R13
- mov %r14,232($context) # restore context->R14
- mov %r15,240($context) # restore context->R15
-
-.Lin_prologue:
- mov 8(%rax),%rdi
- mov 16(%rax),%rsi
- mov %rax,152($context) # restore context->Rsp
- mov %rsi,168($context) # restore context->Rsi
- mov %rdi,176($context) # restore context->Rdi
-
- mov 40($disp),%rdi # disp->ContextRecord
- mov $context,%rsi # context
- mov \$154,%ecx # sizeof(CONTEXT)
- .long 0xa548f3fc # cld; rep movsq
-
- mov $disp,%rsi
- xor %rcx,%rcx # arg1, UNW_FLAG_NHANDLER
- mov 8(%rsi),%rdx # arg2, disp->ImageBase
- mov 0(%rsi),%r8 # arg3, disp->ControlPc
- mov 16(%rsi),%r9 # arg4, disp->FunctionEntry
- mov 40(%rsi),%r10 # disp->ContextRecord
- lea 56(%rsi),%r11 # &disp->HandlerData
- lea 24(%rsi),%r12 # &disp->EstablisherFrame
- mov %r10,32(%rsp) # arg5
- mov %r11,40(%rsp) # arg6
- mov %r12,48(%rsp) # arg7
- mov %rcx,56(%rsp) # arg8, (NULL)
- call *__imp_RtlVirtualUnwind(%rip)
-
- mov \$1,%eax # ExceptionContinueSearch
- add \$64,%rsp
- popfq
- pop %r15
- pop %r14
- pop %r13
- pop %r12
- pop %rbp
- pop %rbx
- pop %rdi
- pop %rsi
- ret
-.size mod_exp_512_se_handler,.-mod_exp_512_se_handler
-
-.section .pdata
-.align 4
- .rva .LSEH_begin_mod_exp_512
- .rva .LSEH_end_mod_exp_512
- .rva .LSEH_info_mod_exp_512
-
-.section .xdata
-.align 8
-.LSEH_info_mod_exp_512:
- .byte 9,0,0,0
- .rva mod_exp_512_se_handler
-___
-}
-
-sub reg_part {
-my ($reg,$conv)=@_;
- if ($reg =~ /%r[0-9]+/) { $reg .= $conv; }
- elsif ($conv eq "b") { $reg =~ s/%[er]([^x]+)x?/%$1l/; }
- elsif ($conv eq "w") { $reg =~ s/%[er](.+)/%$1/; }
- elsif ($conv eq "d") { $reg =~ s/%[er](.+)/%e$1/; }
- return $reg;
-}
-
-$code =~ s/(%[a-z0-9]+)#([bwd])/reg_part($1,$2)/gem;
-$code =~ s/\`([^\`]*)\`/eval $1/gem;
-$code =~ s/(\(\+[^)]+\))/eval $1/gem;
-print $code;
-close STDOUT;
diff --git a/crypto/openssl/crypto/bn/asm/ppc-mont.pl b/crypto/openssl/crypto/bn/asm/ppc-mont.pl
index f9b6992..da69c6a 100755
--- a/crypto/openssl/crypto/bn/asm/ppc-mont.pl
+++ b/crypto/openssl/crypto/bn/asm/ppc-mont.pl
@@ -325,6 +325,7 @@ Lcopy: ; copy or in-place refresh
.long 0
.byte 0,12,4,0,0x80,12,6,0
.long 0
+.size .bn_mul_mont_int,.-.bn_mul_mont_int
.asciz "Montgomery Multiplication for PPC, CRYPTOGAMS by <appro\@openssl.org>"
___
diff --git a/crypto/openssl/crypto/bn/asm/ppc.pl b/crypto/openssl/crypto/bn/asm/ppc.pl
index 1249ce2..04df1fe 100644
--- a/crypto/openssl/crypto/bn/asm/ppc.pl
+++ b/crypto/openssl/crypto/bn/asm/ppc.pl
@@ -392,6 +392,7 @@ $data=<<EOF;
.long 0
.byte 0,12,0x14,0,0,0,2,0
.long 0
+.size .bn_sqr_comba4,.-.bn_sqr_comba4
#
# NOTE: The following label name should be changed to
@@ -819,6 +820,7 @@ $data=<<EOF;
.long 0
.byte 0,12,0x14,0,0,0,2,0
.long 0
+.size .bn_sqr_comba8,.-.bn_sqr_comba8
#
# NOTE: The following label name should be changed to
@@ -972,6 +974,7 @@ $data=<<EOF;
.long 0
.byte 0,12,0x14,0,0,0,3,0
.long 0
+.size .bn_mul_comba4,.-.bn_mul_comba4
#
# NOTE: The following label name should be changed to
@@ -1510,6 +1513,7 @@ $data=<<EOF;
.long 0
.byte 0,12,0x14,0,0,0,3,0
.long 0
+.size .bn_mul_comba8,.-.bn_mul_comba8
#
# NOTE: The following label name should be changed to
@@ -1560,6 +1564,7 @@ Lppcasm_sub_adios:
.long 0
.byte 0,12,0x14,0,0,0,4,0
.long 0
+.size .bn_sub_words,.-.bn_sub_words
#
# NOTE: The following label name should be changed to
@@ -1605,6 +1610,7 @@ Lppcasm_add_adios:
.long 0
.byte 0,12,0x14,0,0,0,4,0
.long 0
+.size .bn_add_words,.-.bn_add_words
#
# NOTE: The following label name should be changed to
@@ -1720,6 +1726,7 @@ Lppcasm_div9:
.long 0
.byte 0,12,0x14,0,0,0,3,0
.long 0
+.size .bn_div_words,.-.bn_div_words
#
# NOTE: The following label name should be changed to
@@ -1761,6 +1768,7 @@ Lppcasm_sqr_adios:
.long 0
.byte 0,12,0x14,0,0,0,3,0
.long 0
+.size .bn_sqr_words,.-.bn_sqr_words
#
# NOTE: The following label name should be changed to
@@ -1866,6 +1874,7 @@ Lppcasm_mw_OVER:
.long 0
.byte 0,12,0x14,0,0,0,4,0
.long 0
+.size bn_mul_words,.-bn_mul_words
#
# NOTE: The following label name should be changed to
@@ -1991,6 +2000,7 @@ Lppcasm_maw_adios:
.long 0
.byte 0,12,0x14,0,0,0,4,0
.long 0
+.size .bn_mul_add_words,.-.bn_mul_add_words
.align 4
EOF
$data =~ s/\`([^\`]*)\`/eval $1/gem;
diff --git a/crypto/openssl/crypto/bn/asm/ppc64-mont.pl b/crypto/openssl/crypto/bn/asm/ppc64-mont.pl
index a14e769..68e3733 100755
--- a/crypto/openssl/crypto/bn/asm/ppc64-mont.pl
+++ b/crypto/openssl/crypto/bn/asm/ppc64-mont.pl
@@ -1,7 +1,7 @@
#!/usr/bin/env perl
# ====================================================================
-# Written by Andy Polyakov <appro@fy.chalmers.se> for the OpenSSL
+# Written by Andy Polyakov <appro@openssl.org> for the OpenSSL
# project. The module is, however, dual licensed under OpenSSL and
# CRYPTOGAMS licenses depending on where you obtain it. For further
# details see http://www.openssl.org/~appro/cryptogams/.
@@ -65,6 +65,14 @@
# others alternative would be to break dependence on upper halves of
# GPRs by sticking to 32-bit integer operations...
+# December 2012
+
+# Remove above mentioned dependence on GPRs' upper halves in 32-bit
+# build. No signal masking overhead, but integer instructions are
+# *more* numerous... It's still "universally" faster than 32-bit
+# ppc-mont.pl, but improvement coefficient is not as impressive
+# for longer keys...
+
$flavour = shift;
if ($flavour =~ /32/) {
@@ -110,6 +118,9 @@ $tp="r10";
$j="r11";
$i="r12";
# non-volatile registers
+$c1="r19";
+$n1="r20";
+$a1="r21";
$nap_d="r22"; # interleaved ap and np in double format
$a0="r23"; # ap[0]
$t0="r24"; # temporary registers
@@ -180,8 +191,8 @@ $T3a="f30"; $T3b="f31";
# . .
# +-------------------------------+
# . .
-# -12*size_t +-------------------------------+
-# | 10 saved gpr, r22-r31 |
+# -13*size_t +-------------------------------+
+# | 13 saved gpr, r19-r31 |
# . .
# . .
# -12*8 +-------------------------------+
@@ -215,6 +226,9 @@ $code=<<___;
mr $i,$sp
$STUX $sp,$sp,$tp ; alloca
+ $PUSH r19,`-12*8-13*$SIZE_T`($i)
+ $PUSH r20,`-12*8-12*$SIZE_T`($i)
+ $PUSH r21,`-12*8-11*$SIZE_T`($i)
$PUSH r22,`-12*8-10*$SIZE_T`($i)
$PUSH r23,`-12*8-9*$SIZE_T`($i)
$PUSH r24,`-12*8-8*$SIZE_T`($i)
@@ -237,40 +251,26 @@ $code=<<___;
stfd f29,`-3*8`($i)
stfd f30,`-2*8`($i)
stfd f31,`-1*8`($i)
-___
-$code.=<<___ if ($SIZE_T==8);
- ld $a0,0($ap) ; pull ap[0] value
- ld $n0,0($n0) ; pull n0[0] value
- ld $t3,0($bp) ; bp[0]
-___
-$code.=<<___ if ($SIZE_T==4);
- mr $t1,$n0
- lwz $a0,0($ap) ; pull ap[0,1] value
- lwz $t0,4($ap)
- lwz $n0,0($t1) ; pull n0[0,1] value
- lwz $t1,4($t1)
- lwz $t3,0($bp) ; bp[0,1]
- lwz $t2,4($bp)
- insrdi $a0,$t0,32,0
- insrdi $n0,$t1,32,0
- insrdi $t3,$t2,32,0
-___
-$code.=<<___;
+
addi $tp,$sp,`$FRAME+$TRANSFER+8+64`
li $i,-64
add $nap_d,$tp,$num
and $nap_d,$nap_d,$i ; align to 64 bytes
-
- mulld $t7,$a0,$t3 ; ap[0]*bp[0]
; nap_d is off by 1, because it's used with stfdu/lfdu
addi $nap_d,$nap_d,-8
srwi $j,$num,`3+1` ; counter register, num/2
- mulld $t7,$t7,$n0 ; tp[0]*n0
addi $j,$j,-1
addi $tp,$sp,`$FRAME+$TRANSFER-8`
li $carry,0
mtctr $j
+___
+
+$code.=<<___ if ($SIZE_T==8);
+ ld $a0,0($ap) ; pull ap[0] value
+ ld $t3,0($bp) ; bp[0]
+ ld $n0,0($n0) ; pull n0[0] value
+ mulld $t7,$a0,$t3 ; ap[0]*bp[0]
; transfer bp[0] to FPU as 4x16-bit values
extrdi $t0,$t3,16,48
extrdi $t1,$t3,16,32
@@ -280,6 +280,8 @@ $code.=<<___;
std $t1,`$FRAME+8`($sp)
std $t2,`$FRAME+16`($sp)
std $t3,`$FRAME+24`($sp)
+
+ mulld $t7,$t7,$n0 ; tp[0]*n0
; transfer (ap[0]*bp[0])*n0 to FPU as 4x16-bit values
extrdi $t4,$t7,16,48
extrdi $t5,$t7,16,32
@@ -289,21 +291,61 @@ $code.=<<___;
std $t5,`$FRAME+40`($sp)
std $t6,`$FRAME+48`($sp)
std $t7,`$FRAME+56`($sp)
-___
-$code.=<<___ if ($SIZE_T==8);
- lwz $t0,4($ap) ; load a[j] as 32-bit word pair
- lwz $t1,0($ap)
- lwz $t2,12($ap) ; load a[j+1] as 32-bit word pair
+
+ extrdi $t0,$a0,32,32 ; lwz $t0,4($ap)
+ extrdi $t1,$a0,32,0 ; lwz $t1,0($ap)
+ lwz $t2,12($ap) ; load a[1] as 32-bit word pair
lwz $t3,8($ap)
- lwz $t4,4($np) ; load n[j] as 32-bit word pair
+ lwz $t4,4($np) ; load n[0] as 32-bit word pair
lwz $t5,0($np)
- lwz $t6,12($np) ; load n[j+1] as 32-bit word pair
+ lwz $t6,12($np) ; load n[1] as 32-bit word pair
lwz $t7,8($np)
___
$code.=<<___ if ($SIZE_T==4);
- lwz $t0,0($ap) ; load a[j..j+3] as 32-bit word pairs
- lwz $t1,4($ap)
- lwz $t2,8($ap)
+ lwz $a0,0($ap) ; pull ap[0,1] value
+ mr $n1,$n0
+ lwz $a1,4($ap)
+ li $c1,0
+ lwz $t1,0($bp) ; bp[0,1]
+ lwz $t3,4($bp)
+ lwz $n0,0($n1) ; pull n0[0,1] value
+ lwz $n1,4($n1)
+
+ mullw $t4,$a0,$t1 ; mulld ap[0]*bp[0]
+ mulhwu $t5,$a0,$t1
+ mullw $t6,$a1,$t1
+ mullw $t7,$a0,$t3
+ add $t5,$t5,$t6
+ add $t5,$t5,$t7
+ ; transfer bp[0] to FPU as 4x16-bit values
+ extrwi $t0,$t1,16,16
+ extrwi $t1,$t1,16,0
+ extrwi $t2,$t3,16,16
+ extrwi $t3,$t3,16,0
+ std $t0,`$FRAME+0`($sp) ; yes, std in 32-bit build
+ std $t1,`$FRAME+8`($sp)
+ std $t2,`$FRAME+16`($sp)
+ std $t3,`$FRAME+24`($sp)
+
+ mullw $t0,$t4,$n0 ; mulld tp[0]*n0
+ mulhwu $t1,$t4,$n0
+ mullw $t2,$t5,$n0
+ mullw $t3,$t4,$n1
+ add $t1,$t1,$t2
+ add $t1,$t1,$t3
+ ; transfer (ap[0]*bp[0])*n0 to FPU as 4x16-bit values
+ extrwi $t4,$t0,16,16
+ extrwi $t5,$t0,16,0
+ extrwi $t6,$t1,16,16
+ extrwi $t7,$t1,16,0
+ std $t4,`$FRAME+32`($sp) ; yes, std in 32-bit build
+ std $t5,`$FRAME+40`($sp)
+ std $t6,`$FRAME+48`($sp)
+ std $t7,`$FRAME+56`($sp)
+
+ mr $t0,$a0 ; lwz $t0,0($ap)
+ mr $t1,$a1 ; lwz $t1,4($ap)
+ lwz $t2,8($ap) ; load a[j..j+3] as 32-bit word pairs
lwz $t3,12($ap)
lwz $t4,0($np) ; load n[j..j+3] as 32-bit word pairs
lwz $t5,4($np)
@@ -319,7 +361,7 @@ $code.=<<___;
lfd $nb,`$FRAME+40`($sp)
lfd $nc,`$FRAME+48`($sp)
lfd $nd,`$FRAME+56`($sp)
- std $t0,`$FRAME+64`($sp)
+ std $t0,`$FRAME+64`($sp) ; yes, std even in 32-bit build
std $t1,`$FRAME+72`($sp)
std $t2,`$FRAME+80`($sp)
std $t3,`$FRAME+88`($sp)
@@ -441,7 +483,7 @@ $code.=<<___ if ($SIZE_T==4);
lwz $t7,12($np)
___
$code.=<<___;
- std $t0,`$FRAME+64`($sp)
+ std $t0,`$FRAME+64`($sp) ; yes, std even in 32-bit build
std $t1,`$FRAME+72`($sp)
std $t2,`$FRAME+80`($sp)
std $t3,`$FRAME+88`($sp)
@@ -449,6 +491,9 @@ $code.=<<___;
std $t5,`$FRAME+104`($sp)
std $t6,`$FRAME+112`($sp)
std $t7,`$FRAME+120`($sp)
+___
+if ($SIZE_T==8 or $flavour =~ /osx/) {
+$code.=<<___;
ld $t0,`$FRAME+0`($sp)
ld $t1,`$FRAME+8`($sp)
ld $t2,`$FRAME+16`($sp)
@@ -457,6 +502,20 @@ $code.=<<___;
ld $t5,`$FRAME+40`($sp)
ld $t6,`$FRAME+48`($sp)
ld $t7,`$FRAME+56`($sp)
+___
+} else {
+$code.=<<___;
+ lwz $t1,`$FRAME+0`($sp)
+ lwz $t0,`$FRAME+4`($sp)
+ lwz $t3,`$FRAME+8`($sp)
+ lwz $t2,`$FRAME+12`($sp)
+ lwz $t5,`$FRAME+16`($sp)
+ lwz $t4,`$FRAME+20`($sp)
+ lwz $t7,`$FRAME+24`($sp)
+ lwz $t6,`$FRAME+28`($sp)
+___
+}
+$code.=<<___;
lfd $A0,`$FRAME+64`($sp)
lfd $A1,`$FRAME+72`($sp)
lfd $A2,`$FRAME+80`($sp)
@@ -488,7 +547,9 @@ $code.=<<___;
fmadd $T0b,$A0,$bb,$dotb
stfd $A2,24($nap_d) ; save a[j+1] in double format
stfd $A3,32($nap_d)
-
+___
+if ($SIZE_T==8 or $flavour =~ /osx/) {
+$code.=<<___;
fmadd $T1a,$A0,$bc,$T1a
fmadd $T1b,$A0,$bd,$T1b
fmadd $T2a,$A1,$bc,$T2a
@@ -561,11 +622,123 @@ $code.=<<___;
stfd $T3b,`$FRAME+56`($sp)
std $t0,8($tp) ; tp[j-1]
stdu $t4,16($tp) ; tp[j]
+___
+} else {
+$code.=<<___;
+ fmadd $T1a,$A0,$bc,$T1a
+ fmadd $T1b,$A0,$bd,$T1b
+ addc $t0,$t0,$carry
+ adde $t1,$t1,$c1
+ srwi $carry,$t0,16
+ fmadd $T2a,$A1,$bc,$T2a
+ fmadd $T2b,$A1,$bd,$T2b
+ stfd $N0,40($nap_d) ; save n[j] in double format
+ stfd $N1,48($nap_d)
+ srwi $c1,$t1,16
+ insrwi $carry,$t1,16,0
+ fmadd $T3a,$A2,$bc,$T3a
+ fmadd $T3b,$A2,$bd,$T3b
+ addc $t2,$t2,$carry
+ adde $t3,$t3,$c1
+ srwi $carry,$t2,16
+ fmul $dota,$A3,$bc
+ fmul $dotb,$A3,$bd
+ stfd $N2,56($nap_d) ; save n[j+1] in double format
+ stfdu $N3,64($nap_d)
+ insrwi $t0,$t2,16,0 ; 0..31 bits
+ srwi $c1,$t3,16
+ insrwi $carry,$t3,16,0
+
+ fmadd $T1a,$N1,$na,$T1a
+ fmadd $T1b,$N1,$nb,$T1b
+ lwz $t3,`$FRAME+32`($sp) ; permuted $t1
+ lwz $t2,`$FRAME+36`($sp) ; permuted $t0
+ addc $t4,$t4,$carry
+ adde $t5,$t5,$c1
+ srwi $carry,$t4,16
+ fmadd $T2a,$N2,$na,$T2a
+ fmadd $T2b,$N2,$nb,$T2b
+ srwi $c1,$t5,16
+ insrwi $carry,$t5,16,0
+ fmadd $T3a,$N3,$na,$T3a
+ fmadd $T3b,$N3,$nb,$T3b
+ addc $t6,$t6,$carry
+ adde $t7,$t7,$c1
+ srwi $carry,$t6,16
+ fmadd $T0a,$N0,$na,$T0a
+ fmadd $T0b,$N0,$nb,$T0b
+ insrwi $t4,$t6,16,0 ; 32..63 bits
+ srwi $c1,$t7,16
+ insrwi $carry,$t7,16,0
+
+ fmadd $T1a,$N0,$nc,$T1a
+ fmadd $T1b,$N0,$nd,$T1b
+ lwz $t7,`$FRAME+40`($sp) ; permuted $t3
+ lwz $t6,`$FRAME+44`($sp) ; permuted $t2
+ addc $t2,$t2,$carry
+ adde $t3,$t3,$c1
+ srwi $carry,$t2,16
+ fmadd $T2a,$N1,$nc,$T2a
+ fmadd $T2b,$N1,$nd,$T2b
+ stw $t0,12($tp) ; tp[j-1]
+ stw $t4,8($tp)
+ srwi $c1,$t3,16
+ insrwi $carry,$t3,16,0
+ fmadd $T3a,$N2,$nc,$T3a
+ fmadd $T3b,$N2,$nd,$T3b
+ lwz $t1,`$FRAME+48`($sp) ; permuted $t5
+ lwz $t0,`$FRAME+52`($sp) ; permuted $t4
+ addc $t6,$t6,$carry
+ adde $t7,$t7,$c1
+ srwi $carry,$t6,16
+ fmadd $dota,$N3,$nc,$dota
+ fmadd $dotb,$N3,$nd,$dotb
+ insrwi $t2,$t6,16,0 ; 64..95 bits
+ srwi $c1,$t7,16
+ insrwi $carry,$t7,16,0
+
+ fctid $T0a,$T0a
+ fctid $T0b,$T0b
+ lwz $t5,`$FRAME+56`($sp) ; permuted $t7
+ lwz $t4,`$FRAME+60`($sp) ; permuted $t6
+ addc $t0,$t0,$carry
+ adde $t1,$t1,$c1
+ srwi $carry,$t0,16
+ fctid $T1a,$T1a
+ fctid $T1b,$T1b
+ srwi $c1,$t1,16
+ insrwi $carry,$t1,16,0
+ fctid $T2a,$T2a
+ fctid $T2b,$T2b
+ addc $t4,$t4,$carry
+ adde $t5,$t5,$c1
+ srwi $carry,$t4,16
+ fctid $T3a,$T3a
+ fctid $T3b,$T3b
+ insrwi $t0,$t4,16,0 ; 96..127 bits
+ srwi $c1,$t5,16
+ insrwi $carry,$t5,16,0
+
+ stfd $T0a,`$FRAME+0`($sp)
+ stfd $T0b,`$FRAME+8`($sp)
+ stfd $T1a,`$FRAME+16`($sp)
+ stfd $T1b,`$FRAME+24`($sp)
+ stfd $T2a,`$FRAME+32`($sp)
+ stfd $T2b,`$FRAME+40`($sp)
+ stfd $T3a,`$FRAME+48`($sp)
+ stfd $T3b,`$FRAME+56`($sp)
+ stw $t2,20($tp) ; tp[j]
+ stwu $t0,16($tp)
+___
+}
+$code.=<<___;
bdnz- L1st
fctid $dota,$dota
fctid $dotb,$dotb
-
+___
+if ($SIZE_T==8 or $flavour =~ /osx/) {
+$code.=<<___;
ld $t0,`$FRAME+0`($sp)
ld $t1,`$FRAME+8`($sp)
ld $t2,`$FRAME+16`($sp)
@@ -611,33 +784,117 @@ $code.=<<___;
insrdi $t6,$t7,48,0
srdi $ovf,$t7,48
std $t6,8($tp) ; tp[num-1]
+___
+} else {
+$code.=<<___;
+ lwz $t1,`$FRAME+0`($sp)
+ lwz $t0,`$FRAME+4`($sp)
+ lwz $t3,`$FRAME+8`($sp)
+ lwz $t2,`$FRAME+12`($sp)
+ lwz $t5,`$FRAME+16`($sp)
+ lwz $t4,`$FRAME+20`($sp)
+ lwz $t7,`$FRAME+24`($sp)
+ lwz $t6,`$FRAME+28`($sp)
+ stfd $dota,`$FRAME+64`($sp)
+ stfd $dotb,`$FRAME+72`($sp)
+ addc $t0,$t0,$carry
+ adde $t1,$t1,$c1
+ srwi $carry,$t0,16
+ insrwi $carry,$t1,16,0
+ srwi $c1,$t1,16
+ addc $t2,$t2,$carry
+ adde $t3,$t3,$c1
+ srwi $carry,$t2,16
+ insrwi $t0,$t2,16,0 ; 0..31 bits
+ insrwi $carry,$t3,16,0
+ srwi $c1,$t3,16
+ addc $t4,$t4,$carry
+ adde $t5,$t5,$c1
+ srwi $carry,$t4,16
+ insrwi $carry,$t5,16,0
+ srwi $c1,$t5,16
+ addc $t6,$t6,$carry
+ adde $t7,$t7,$c1
+ srwi $carry,$t6,16
+ insrwi $t4,$t6,16,0 ; 32..63 bits
+ insrwi $carry,$t7,16,0
+ srwi $c1,$t7,16
+ stw $t0,12($tp) ; tp[j-1]
+ stw $t4,8($tp)
+
+ lwz $t3,`$FRAME+32`($sp) ; permuted $t1
+ lwz $t2,`$FRAME+36`($sp) ; permuted $t0
+ lwz $t7,`$FRAME+40`($sp) ; permuted $t3
+ lwz $t6,`$FRAME+44`($sp) ; permuted $t2
+ lwz $t1,`$FRAME+48`($sp) ; permuted $t5
+ lwz $t0,`$FRAME+52`($sp) ; permuted $t4
+ lwz $t5,`$FRAME+56`($sp) ; permuted $t7
+ lwz $t4,`$FRAME+60`($sp) ; permuted $t6
+
+ addc $t2,$t2,$carry
+ adde $t3,$t3,$c1
+ srwi $carry,$t2,16
+ insrwi $carry,$t3,16,0
+ srwi $c1,$t3,16
+ addc $t6,$t6,$carry
+ adde $t7,$t7,$c1
+ srwi $carry,$t6,16
+ insrwi $t2,$t6,16,0 ; 64..95 bits
+ insrwi $carry,$t7,16,0
+ srwi $c1,$t7,16
+ addc $t0,$t0,$carry
+ adde $t1,$t1,$c1
+ srwi $carry,$t0,16
+ insrwi $carry,$t1,16,0
+ srwi $c1,$t1,16
+ addc $t4,$t4,$carry
+ adde $t5,$t5,$c1
+ srwi $carry,$t4,16
+ insrwi $t0,$t4,16,0 ; 96..127 bits
+ insrwi $carry,$t5,16,0
+ srwi $c1,$t5,16
+ stw $t2,20($tp) ; tp[j]
+ stwu $t0,16($tp)
+
+ lwz $t7,`$FRAME+64`($sp)
+ lwz $t6,`$FRAME+68`($sp)
+ lwz $t5,`$FRAME+72`($sp)
+ lwz $t4,`$FRAME+76`($sp)
+
+ addc $t6,$t6,$carry
+ adde $t7,$t7,$c1
+ srwi $carry,$t6,16
+ insrwi $carry,$t7,16,0
+ srwi $c1,$t7,16
+ addc $t4,$t4,$carry
+ adde $t5,$t5,$c1
+
+ insrwi $t6,$t4,16,0
+ srwi $t4,$t4,16
+ insrwi $t4,$t5,16,0
+ srwi $ovf,$t5,16
+ stw $t6,12($tp) ; tp[num-1]
+ stw $t4,8($tp)
+___
+}
+$code.=<<___;
slwi $t7,$num,2
subf $nap_d,$t7,$nap_d ; rewind pointer
li $i,8 ; i=1
.align 5
Louter:
-___
-$code.=<<___ if ($SIZE_T==8);
- ldx $t3,$bp,$i ; bp[i]
-___
-$code.=<<___ if ($SIZE_T==4);
- add $t0,$bp,$i
- lwz $t3,0($t0) ; bp[i,i+1]
- lwz $t0,4($t0)
- insrdi $t3,$t0,32,0
-___
-$code.=<<___;
- ld $t6,`$FRAME+$TRANSFER+8`($sp) ; tp[0]
- mulld $t7,$a0,$t3 ; ap[0]*bp[i]
-
addi $tp,$sp,`$FRAME+$TRANSFER`
- add $t7,$t7,$t6 ; ap[0]*bp[i]+tp[0]
li $carry,0
- mulld $t7,$t7,$n0 ; tp[0]*n0
mtctr $j
+___
+$code.=<<___ if ($SIZE_T==8);
+ ldx $t3,$bp,$i ; bp[i]
+ ld $t6,`$FRAME+$TRANSFER+8`($sp) ; tp[0]
+ mulld $t7,$a0,$t3 ; ap[0]*bp[i]
+ add $t7,$t7,$t6 ; ap[0]*bp[i]+tp[0]
; transfer bp[i] to FPU as 4x16-bit values
extrdi $t0,$t3,16,48
extrdi $t1,$t3,16,32
@@ -647,6 +904,8 @@ $code.=<<___;
std $t1,`$FRAME+8`($sp)
std $t2,`$FRAME+16`($sp)
std $t3,`$FRAME+24`($sp)
+
+ mulld $t7,$t7,$n0 ; tp[0]*n0
; transfer (ap[0]*bp[i]+tp[0])*n0 to FPU as 4x16-bit values
extrdi $t4,$t7,16,48
extrdi $t5,$t7,16,32
@@ -656,7 +915,50 @@ $code.=<<___;
std $t5,`$FRAME+40`($sp)
std $t6,`$FRAME+48`($sp)
std $t7,`$FRAME+56`($sp)
+___
+$code.=<<___ if ($SIZE_T==4);
+ add $t0,$bp,$i
+ li $c1,0
+ lwz $t1,0($t0) ; bp[i,i+1]
+ lwz $t3,4($t0)
+
+ mullw $t4,$a0,$t1 ; ap[0]*bp[i]
+ lwz $t0,`$FRAME+$TRANSFER+8+4`($sp) ; tp[0]
+ mulhwu $t5,$a0,$t1
+ lwz $t2,`$FRAME+$TRANSFER+8`($sp) ; tp[0]
+ mullw $t6,$a1,$t1
+ mullw $t7,$a0,$t3
+ add $t5,$t5,$t6
+ add $t5,$t5,$t7
+ addc $t4,$t4,$t0 ; ap[0]*bp[i]+tp[0]
+ adde $t5,$t5,$t2
+ ; transfer bp[i] to FPU as 4x16-bit values
+ extrwi $t0,$t1,16,16
+ extrwi $t1,$t1,16,0
+ extrwi $t2,$t3,16,16
+ extrwi $t3,$t3,16,0
+ std $t0,`$FRAME+0`($sp) ; yes, std in 32-bit build
+ std $t1,`$FRAME+8`($sp)
+ std $t2,`$FRAME+16`($sp)
+ std $t3,`$FRAME+24`($sp)
+ mullw $t0,$t4,$n0 ; mulld tp[0]*n0
+ mulhwu $t1,$t4,$n0
+ mullw $t2,$t5,$n0
+ mullw $t3,$t4,$n1
+ add $t1,$t1,$t2
+ add $t1,$t1,$t3
+ ; transfer (ap[0]*bp[i]+tp[0])*n0 to FPU as 4x16-bit values
+ extrwi $t4,$t0,16,16
+ extrwi $t5,$t0,16,0
+ extrwi $t6,$t1,16,16
+ extrwi $t7,$t1,16,0
+ std $t4,`$FRAME+32`($sp) ; yes, std in 32-bit build
+ std $t5,`$FRAME+40`($sp)
+ std $t6,`$FRAME+48`($sp)
+ std $t7,`$FRAME+56`($sp)
+___
+$code.=<<___;
lfd $A0,8($nap_d) ; load a[j] in double format
lfd $A1,16($nap_d)
lfd $A2,24($nap_d) ; load a[j+1] in double format
@@ -769,7 +1071,9 @@ Linner:
fmul $dotb,$A3,$bd
lfd $A2,24($nap_d) ; load a[j+1] in double format
lfd $A3,32($nap_d)
-
+___
+if ($SIZE_T==8 or $flavour =~ /osx/) {
+$code.=<<___;
fmadd $T1a,$N1,$na,$T1a
fmadd $T1b,$N1,$nb,$T1b
ld $t0,`$FRAME+0`($sp)
@@ -856,10 +1160,131 @@ $code.=<<___;
addze $carry,$carry
std $t3,-16($tp) ; tp[j-1]
std $t5,-8($tp) ; tp[j]
+___
+} else {
+$code.=<<___;
+ fmadd $T1a,$N1,$na,$T1a
+ fmadd $T1b,$N1,$nb,$T1b
+ lwz $t1,`$FRAME+0`($sp)
+ lwz $t0,`$FRAME+4`($sp)
+ fmadd $T2a,$N2,$na,$T2a
+ fmadd $T2b,$N2,$nb,$T2b
+ lwz $t3,`$FRAME+8`($sp)
+ lwz $t2,`$FRAME+12`($sp)
+ fmadd $T3a,$N3,$na,$T3a
+ fmadd $T3b,$N3,$nb,$T3b
+ lwz $t5,`$FRAME+16`($sp)
+ lwz $t4,`$FRAME+20`($sp)
+ addc $t0,$t0,$carry
+ adde $t1,$t1,$c1
+ srwi $carry,$t0,16
+ fmadd $T0a,$N0,$na,$T0a
+ fmadd $T0b,$N0,$nb,$T0b
+ lwz $t7,`$FRAME+24`($sp)
+ lwz $t6,`$FRAME+28`($sp)
+ srwi $c1,$t1,16
+ insrwi $carry,$t1,16,0
+
+ fmadd $T1a,$N0,$nc,$T1a
+ fmadd $T1b,$N0,$nd,$T1b
+ addc $t2,$t2,$carry
+ adde $t3,$t3,$c1
+ srwi $carry,$t2,16
+ fmadd $T2a,$N1,$nc,$T2a
+ fmadd $T2b,$N1,$nd,$T2b
+ insrwi $t0,$t2,16,0 ; 0..31 bits
+ srwi $c1,$t3,16
+ insrwi $carry,$t3,16,0
+ fmadd $T3a,$N2,$nc,$T3a
+ fmadd $T3b,$N2,$nd,$T3b
+ lwz $t2,12($tp) ; tp[j]
+ lwz $t3,8($tp)
+ addc $t4,$t4,$carry
+ adde $t5,$t5,$c1
+ srwi $carry,$t4,16
+ fmadd $dota,$N3,$nc,$dota
+ fmadd $dotb,$N3,$nd,$dotb
+ srwi $c1,$t5,16
+ insrwi $carry,$t5,16,0
+
+ fctid $T0a,$T0a
+ addc $t6,$t6,$carry
+ adde $t7,$t7,$c1
+ srwi $carry,$t6,16
+ fctid $T0b,$T0b
+ insrwi $t4,$t6,16,0 ; 32..63 bits
+ srwi $c1,$t7,16
+ insrwi $carry,$t7,16,0
+ fctid $T1a,$T1a
+ addc $t0,$t0,$t2
+ adde $t4,$t4,$t3
+ lwz $t3,`$FRAME+32`($sp) ; permuted $t1
+ lwz $t2,`$FRAME+36`($sp) ; permuted $t0
+ fctid $T1b,$T1b
+ addze $carry,$carry
+ addze $c1,$c1
+ stw $t0,4($tp) ; tp[j-1]
+ stw $t4,0($tp)
+ fctid $T2a,$T2a
+ addc $t2,$t2,$carry
+ adde $t3,$t3,$c1
+ srwi $carry,$t2,16
+ lwz $t7,`$FRAME+40`($sp) ; permuted $t3
+ lwz $t6,`$FRAME+44`($sp) ; permuted $t2
+ fctid $T2b,$T2b
+ srwi $c1,$t3,16
+ insrwi $carry,$t3,16,0
+ lwz $t1,`$FRAME+48`($sp) ; permuted $t5
+ lwz $t0,`$FRAME+52`($sp) ; permuted $t4
+ fctid $T3a,$T3a
+ addc $t6,$t6,$carry
+ adde $t7,$t7,$c1
+ srwi $carry,$t6,16
+ lwz $t5,`$FRAME+56`($sp) ; permuted $t7
+ lwz $t4,`$FRAME+60`($sp) ; permuted $t6
+ fctid $T3b,$T3b
+
+ insrwi $t2,$t6,16,0 ; 64..95 bits
+ insrwi $carry,$t7,16,0
+ srwi $c1,$t7,16
+ lwz $t6,20($tp)
+ lwzu $t7,16($tp)
+ addc $t0,$t0,$carry
+ stfd $T0a,`$FRAME+0`($sp)
+ adde $t1,$t1,$c1
+ srwi $carry,$t0,16
+ stfd $T0b,`$FRAME+8`($sp)
+ insrwi $carry,$t1,16,0
+ srwi $c1,$t1,16
+ addc $t4,$t4,$carry
+ stfd $T1a,`$FRAME+16`($sp)
+ adde $t5,$t5,$c1
+ srwi $carry,$t4,16
+ insrwi $t0,$t4,16,0 ; 96..127 bits
+ stfd $T1b,`$FRAME+24`($sp)
+ insrwi $carry,$t5,16,0
+ srwi $c1,$t5,16
+
+ addc $t2,$t2,$t6
+ stfd $T2a,`$FRAME+32`($sp)
+ adde $t0,$t0,$t7
+ stfd $T2b,`$FRAME+40`($sp)
+ addze $carry,$carry
+ stfd $T3a,`$FRAME+48`($sp)
+ addze $c1,$c1
+ stfd $T3b,`$FRAME+56`($sp)
+ stw $t2,-4($tp) ; tp[j]
+ stw $t0,-8($tp)
+___
+}
+$code.=<<___;
bdnz- Linner
fctid $dota,$dota
fctid $dotb,$dotb
+___
+if ($SIZE_T==8 or $flavour =~ /osx/) {
+$code.=<<___;
ld $t0,`$FRAME+0`($sp)
ld $t1,`$FRAME+8`($sp)
ld $t2,`$FRAME+16`($sp)
@@ -926,7 +1351,116 @@ $code.=<<___;
insrdi $t6,$t7,48,0
srdi $ovf,$t7,48
std $t6,0($tp) ; tp[num-1]
+___
+} else {
+$code.=<<___;
+ lwz $t1,`$FRAME+0`($sp)
+ lwz $t0,`$FRAME+4`($sp)
+ lwz $t3,`$FRAME+8`($sp)
+ lwz $t2,`$FRAME+12`($sp)
+ lwz $t5,`$FRAME+16`($sp)
+ lwz $t4,`$FRAME+20`($sp)
+ lwz $t7,`$FRAME+24`($sp)
+ lwz $t6,`$FRAME+28`($sp)
+ stfd $dota,`$FRAME+64`($sp)
+ stfd $dotb,`$FRAME+72`($sp)
+ addc $t0,$t0,$carry
+ adde $t1,$t1,$c1
+ srwi $carry,$t0,16
+ insrwi $carry,$t1,16,0
+ srwi $c1,$t1,16
+ addc $t2,$t2,$carry
+ adde $t3,$t3,$c1
+ srwi $carry,$t2,16
+ insrwi $t0,$t2,16,0 ; 0..31 bits
+ lwz $t2,12($tp) ; tp[j]
+ insrwi $carry,$t3,16,0
+ srwi $c1,$t3,16
+ lwz $t3,8($tp)
+ addc $t4,$t4,$carry
+ adde $t5,$t5,$c1
+ srwi $carry,$t4,16
+ insrwi $carry,$t5,16,0
+ srwi $c1,$t5,16
+ addc $t6,$t6,$carry
+ adde $t7,$t7,$c1
+ srwi $carry,$t6,16
+ insrwi $t4,$t6,16,0 ; 32..63 bits
+ insrwi $carry,$t7,16,0
+ srwi $c1,$t7,16
+
+ addc $t0,$t0,$t2
+ adde $t4,$t4,$t3
+ addze $carry,$carry
+ addze $c1,$c1
+ stw $t0,4($tp) ; tp[j-1]
+ stw $t4,0($tp)
+
+ lwz $t3,`$FRAME+32`($sp) ; permuted $t1
+ lwz $t2,`$FRAME+36`($sp) ; permuted $t0
+ lwz $t7,`$FRAME+40`($sp) ; permuted $t3
+ lwz $t6,`$FRAME+44`($sp) ; permuted $t2
+ lwz $t1,`$FRAME+48`($sp) ; permuted $t5
+ lwz $t0,`$FRAME+52`($sp) ; permuted $t4
+ lwz $t5,`$FRAME+56`($sp) ; permuted $t7
+ lwz $t4,`$FRAME+60`($sp) ; permuted $t6
+
+ addc $t2,$t2,$carry
+ adde $t3,$t3,$c1
+ srwi $carry,$t2,16
+ insrwi $carry,$t3,16,0
+ srwi $c1,$t3,16
+ addc $t6,$t6,$carry
+ adde $t7,$t7,$c1
+ srwi $carry,$t6,16
+ insrwi $t2,$t6,16,0 ; 64..95 bits
+ lwz $t6,20($tp)
+ insrwi $carry,$t7,16,0
+ srwi $c1,$t7,16
+ lwzu $t7,16($tp)
+ addc $t0,$t0,$carry
+ adde $t1,$t1,$c1
+ srwi $carry,$t0,16
+ insrwi $carry,$t1,16,0
+ srwi $c1,$t1,16
+ addc $t4,$t4,$carry
+ adde $t5,$t5,$c1
+ srwi $carry,$t4,16
+ insrwi $t0,$t4,16,0 ; 96..127 bits
+ insrwi $carry,$t5,16,0
+ srwi $c1,$t5,16
+
+ addc $t2,$t2,$t6
+ adde $t0,$t0,$t7
+ lwz $t7,`$FRAME+64`($sp)
+ lwz $t6,`$FRAME+68`($sp)
+ addze $carry,$carry
+ addze $c1,$c1
+ lwz $t5,`$FRAME+72`($sp)
+ lwz $t4,`$FRAME+76`($sp)
+
+ addc $t6,$t6,$carry
+ adde $t7,$t7,$c1
+ stw $t2,-4($tp) ; tp[j]
+ stw $t0,-8($tp)
+ addc $t6,$t6,$ovf
+ addze $t7,$t7
+ srwi $carry,$t6,16
+ insrwi $carry,$t7,16,0
+ srwi $c1,$t7,16
+ addc $t4,$t4,$carry
+ adde $t5,$t5,$c1
+
+ insrwi $t6,$t4,16,0
+ srwi $t4,$t4,16
+ insrwi $t4,$t5,16,0
+ srwi $ovf,$t5,16
+ stw $t6,4($tp) ; tp[num-1]
+ stw $t4,0($tp)
+___
+}
+$code.=<<___;
slwi $t7,$num,2
addi $i,$i,8
subf $nap_d,$t7,$nap_d ; rewind pointer
@@ -994,14 +1528,14 @@ $code.=<<___ if ($SIZE_T==4);
mtctr $j
.align 4
-Lsub: ld $t0,8($tp) ; load tp[j..j+3] in 64-bit word order
- ldu $t2,16($tp)
+Lsub: lwz $t0,12($tp) ; load tp[j..j+3] in 64-bit word order
+ lwz $t1,8($tp)
+ lwz $t2,20($tp)
+ lwzu $t3,16($tp)
lwz $t4,4($np) ; load np[j..j+3] in 32-bit word order
lwz $t5,8($np)
lwz $t6,12($np)
lwzu $t7,16($np)
- extrdi $t1,$t0,32,0
- extrdi $t3,$t2,32,0
subfe $t4,$t4,$t0 ; tp[j]-np[j]
stw $t0,4($ap) ; save tp[j..j+3] in 32-bit word order
subfe $t5,$t5,$t1 ; tp[j+1]-np[j+1]
@@ -1052,6 +1586,9 @@ ___
$code.=<<___;
$POP $i,0($sp)
li r3,1 ; signal "handled"
+ $POP r19,`-12*8-13*$SIZE_T`($i)
+ $POP r20,`-12*8-12*$SIZE_T`($i)
+ $POP r21,`-12*8-11*$SIZE_T`($i)
$POP r22,`-12*8-10*$SIZE_T`($i)
$POP r23,`-12*8-9*$SIZE_T`($i)
$POP r24,`-12*8-8*$SIZE_T`($i)
@@ -1077,8 +1614,9 @@ $code.=<<___;
mr $sp,$i
blr
.long 0
- .byte 0,12,4,0,0x8c,10,6,0
+ .byte 0,12,4,0,0x8c,13,6,0
.long 0
+.size .$fname,.-.$fname
.asciz "Montgomery Multiplication for PPC64, CRYPTOGAMS by <appro\@openssl.org>"
___
diff --git a/crypto/openssl/crypto/bn/asm/rsaz-avx2.pl b/crypto/openssl/crypto/bn/asm/rsaz-avx2.pl
new file mode 100755
index 0000000..3b6ccf8
--- /dev/null
+++ b/crypto/openssl/crypto/bn/asm/rsaz-avx2.pl
@@ -0,0 +1,1898 @@
+#!/usr/bin/env perl
+
+##############################################################################
+# #
+# Copyright (c) 2012, Intel Corporation #
+# #
+# All rights reserved. #
+# #
+# Redistribution and use in source and binary forms, with or without #
+# modification, are permitted provided that the following conditions are #
+# met: #
+# #
+# * Redistributions of source code must retain the above copyright #
+# notice, this list of conditions and the following disclaimer. #
+# #
+# * Redistributions in binary form must reproduce the above copyright #
+# notice, this list of conditions and the following disclaimer in the #
+# documentation and/or other materials provided with the #
+# distribution. #
+# #
+# * Neither the name of the Intel Corporation nor the names of its #
+# contributors may be used to endorse or promote products derived from #
+# this software without specific prior written permission. #
+# #
+# #
+# THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION ""AS IS"" AND ANY #
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE #
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR #
+# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION OR #
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, #
+# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, #
+# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR #
+# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF #
+# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING #
+# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS #
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #
+# #
+##############################################################################
+# Developers and authors: #
+# Shay Gueron (1, 2), and Vlad Krasnov (1) #
+# (1) Intel Corporation, Israel Development Center, Haifa, Israel #
+# (2) University of Haifa, Israel #
+##############################################################################
+# Reference: #
+# [1] S. Gueron, V. Krasnov: "Software Implementation of Modular #
+# Exponentiation, Using Advanced Vector Instructions Architectures", #
+# F. Ozbudak and F. Rodriguez-Henriquez (Eds.): WAIFI 2012, LNCS 7369, #
+# pp. 119?135, 2012. Springer-Verlag Berlin Heidelberg 2012 #
+# [2] S. Gueron: "Efficient Software Implementations of Modular #
+# Exponentiation", Journal of Cryptographic Engineering 2:31-43 (2012). #
+# [3] S. Gueron, V. Krasnov: "Speeding up Big-numbers Squaring",IEEE #
+# Proceedings of 9th International Conference on Information Technology: #
+# New Generations (ITNG 2012), pp.821-823 (2012) #
+# [4] S. Gueron, V. Krasnov: "[PATCH] Efficient and side channel analysis #
+# resistant 1024-bit modular exponentiation, for optimizing RSA2048 #
+# on AVX2 capable x86_64 platforms", #
+# http://rt.openssl.org/Ticket/Display.html?id=2850&user=guest&pass=guest#
+##############################################################################
+#
+# +13% improvement over original submission by <appro@openssl.org>
+#
+# rsa2048 sign/sec OpenSSL 1.0.1 scalar(*) this
+# 2.3GHz Haswell 621 765/+23% 1113/+79%
+# 2.3GHz Broadwell(**) 688 1200(***)/+74% 1120/+63%
+#
+# (*) if system doesn't support AVX2, for reference purposes;
+# (**) scaled to 2.3GHz to simplify comparison;
+# (***) scalar AD*X code is faster than AVX2 and is preferred code
+# path for Broadwell;
+
+$flavour = shift;
+$output = shift;
+if ($flavour =~ /\./) { $output = $flavour; undef $flavour; }
+
+$win64=0; $win64=1 if ($flavour =~ /[nm]asm|mingw64/ || $output =~ /\.asm$/);
+
+$0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1;
+( $xlate="${dir}x86_64-xlate.pl" and -f $xlate ) or
+( $xlate="${dir}../../perlasm/x86_64-xlate.pl" and -f $xlate) or
+die "can't locate x86_64-xlate.pl";
+
+if (`$ENV{CC} -Wa,-v -c -o /dev/null -x assembler /dev/null 2>&1`
+ =~ /GNU assembler version ([2-9]\.[0-9]+)/) {
+ $avx = ($1>=2.19) + ($1>=2.22);
+ $addx = ($1>=2.23);
+}
+
+if (!$avx && $win64 && ($flavour =~ /nasm/ || $ENV{ASM} =~ /nasm/) &&
+ `nasm -v 2>&1` =~ /NASM version ([2-9]\.[0-9]+)/) {
+ $avx = ($1>=2.09) + ($1>=2.10);
+ $addx = ($1>=2.10);
+}
+
+if (!$avx && $win64 && ($flavour =~ /masm/ || $ENV{ASM} =~ /ml64/) &&
+ `ml64 2>&1` =~ /Version ([0-9]+)\./) {
+ $avx = ($1>=10) + ($1>=11);
+ $addx = ($1>=11);
+}
+
+if (!$avx && `$ENV{CC} -v 2>&1` =~ /(^clang version|based on LLVM) ([3-9])\.([0-9]+)/) {
+ my $ver = $2 + $3/100.0; # 3.1->3.01, 3.10->3.10
+ $avx = ($ver>=3.0) + ($ver>=3.01);
+ $addx = ($ver>=3.03);
+}
+
+open OUT,"| \"$^X\" $xlate $flavour $output";
+*STDOUT = *OUT;
+
+if ($avx>1) {{{
+{ # void AMS_WW(
+my $rp="%rdi"; # BN_ULONG *rp,
+my $ap="%rsi"; # const BN_ULONG *ap,
+my $np="%rdx"; # const BN_ULONG *np,
+my $n0="%ecx"; # const BN_ULONG n0,
+my $rep="%r8d"; # int repeat);
+
+# The registers that hold the accumulated redundant result
+# The AMM works on 1024 bit operands, and redundant word size is 29
+# Therefore: ceil(1024/29)/4 = 9
+my $ACC0="%ymm0";
+my $ACC1="%ymm1";
+my $ACC2="%ymm2";
+my $ACC3="%ymm3";
+my $ACC4="%ymm4";
+my $ACC5="%ymm5";
+my $ACC6="%ymm6";
+my $ACC7="%ymm7";
+my $ACC8="%ymm8";
+my $ACC9="%ymm9";
+# Registers that hold the broadcasted words of bp, currently used
+my $B1="%ymm10";
+my $B2="%ymm11";
+# Registers that hold the broadcasted words of Y, currently used
+my $Y1="%ymm12";
+my $Y2="%ymm13";
+# Helper registers
+my $TEMP1="%ymm14";
+my $AND_MASK="%ymm15";
+# alu registers that hold the first words of the ACC
+my $r0="%r9";
+my $r1="%r10";
+my $r2="%r11";
+my $r3="%r12";
+
+my $i="%r14d"; # loop counter
+my $tmp = "%r15";
+
+my $FrameSize=32*18+32*8; # place for A^2 and 2*A
+
+my $aap=$r0;
+my $tp0="%rbx";
+my $tp1=$r3;
+my $tpa=$tmp;
+
+$np="%r13"; # reassigned argument
+
+$code.=<<___;
+.text
+
+.globl rsaz_1024_sqr_avx2
+.type rsaz_1024_sqr_avx2,\@function,5
+.align 64
+rsaz_1024_sqr_avx2: # 702 cycles, 14% faster than rsaz_1024_mul_avx2
+ lea (%rsp), %rax
+ push %rbx
+ push %rbp
+ push %r12
+ push %r13
+ push %r14
+ push %r15
+ vzeroupper
+___
+$code.=<<___ if ($win64);
+ lea -0xa8(%rsp),%rsp
+ vmovaps %xmm6,-0xd8(%rax)
+ vmovaps %xmm7,-0xc8(%rax)
+ vmovaps %xmm8,-0xb8(%rax)
+ vmovaps %xmm9,-0xa8(%rax)
+ vmovaps %xmm10,-0x98(%rax)
+ vmovaps %xmm11,-0x88(%rax)
+ vmovaps %xmm12,-0x78(%rax)
+ vmovaps %xmm13,-0x68(%rax)
+ vmovaps %xmm14,-0x58(%rax)
+ vmovaps %xmm15,-0x48(%rax)
+.Lsqr_1024_body:
+___
+$code.=<<___;
+ mov %rax,%rbp
+ mov %rdx, $np # reassigned argument
+ sub \$$FrameSize, %rsp
+ mov $np, $tmp
+ sub \$-128, $rp # size optimization
+ sub \$-128, $ap
+ sub \$-128, $np
+
+ and \$4095, $tmp # see if $np crosses page
+ add \$32*10, $tmp
+ shr \$12, $tmp
+ vpxor $ACC9,$ACC9,$ACC9
+ jz .Lsqr_1024_no_n_copy
+
+ # unaligned 256-bit load that crosses page boundary can
+ # cause >2x performance degradation here, so if $np does
+ # cross page boundary, copy it to stack and make sure stack
+ # frame doesn't...
+ sub \$32*10,%rsp
+ vmovdqu 32*0-128($np), $ACC0
+ and \$-2048, %rsp
+ vmovdqu 32*1-128($np), $ACC1
+ vmovdqu 32*2-128($np), $ACC2
+ vmovdqu 32*3-128($np), $ACC3
+ vmovdqu 32*4-128($np), $ACC4
+ vmovdqu 32*5-128($np), $ACC5
+ vmovdqu 32*6-128($np), $ACC6
+ vmovdqu 32*7-128($np), $ACC7
+ vmovdqu 32*8-128($np), $ACC8
+ lea $FrameSize+128(%rsp),$np
+ vmovdqu $ACC0, 32*0-128($np)
+ vmovdqu $ACC1, 32*1-128($np)
+ vmovdqu $ACC2, 32*2-128($np)
+ vmovdqu $ACC3, 32*3-128($np)
+ vmovdqu $ACC4, 32*4-128($np)
+ vmovdqu $ACC5, 32*5-128($np)
+ vmovdqu $ACC6, 32*6-128($np)
+ vmovdqu $ACC7, 32*7-128($np)
+ vmovdqu $ACC8, 32*8-128($np)
+ vmovdqu $ACC9, 32*9-128($np) # $ACC9 is zero
+
+.Lsqr_1024_no_n_copy:
+ and \$-1024, %rsp
+
+ vmovdqu 32*1-128($ap), $ACC1
+ vmovdqu 32*2-128($ap), $ACC2
+ vmovdqu 32*3-128($ap), $ACC3
+ vmovdqu 32*4-128($ap), $ACC4
+ vmovdqu 32*5-128($ap), $ACC5
+ vmovdqu 32*6-128($ap), $ACC6
+ vmovdqu 32*7-128($ap), $ACC7
+ vmovdqu 32*8-128($ap), $ACC8
+
+ lea 192(%rsp), $tp0 # 64+128=192
+ vpbroadcastq .Land_mask(%rip), $AND_MASK
+ jmp .LOOP_GRANDE_SQR_1024
+
+.align 32
+.LOOP_GRANDE_SQR_1024:
+ lea 32*18+128(%rsp), $aap # size optimization
+ lea 448(%rsp), $tp1 # 64+128+256=448
+
+ # the squaring is performed as described in Variant B of
+ # "Speeding up Big-Number Squaring", so start by calculating
+ # the A*2=A+A vector
+ vpaddq $ACC1, $ACC1, $ACC1
+ vpbroadcastq 32*0-128($ap), $B1
+ vpaddq $ACC2, $ACC2, $ACC2
+ vmovdqa $ACC1, 32*0-128($aap)
+ vpaddq $ACC3, $ACC3, $ACC3
+ vmovdqa $ACC2, 32*1-128($aap)
+ vpaddq $ACC4, $ACC4, $ACC4
+ vmovdqa $ACC3, 32*2-128($aap)
+ vpaddq $ACC5, $ACC5, $ACC5
+ vmovdqa $ACC4, 32*3-128($aap)
+ vpaddq $ACC6, $ACC6, $ACC6
+ vmovdqa $ACC5, 32*4-128($aap)
+ vpaddq $ACC7, $ACC7, $ACC7
+ vmovdqa $ACC6, 32*5-128($aap)
+ vpaddq $ACC8, $ACC8, $ACC8
+ vmovdqa $ACC7, 32*6-128($aap)
+ vpxor $ACC9, $ACC9, $ACC9
+ vmovdqa $ACC8, 32*7-128($aap)
+
+ vpmuludq 32*0-128($ap), $B1, $ACC0
+ vpbroadcastq 32*1-128($ap), $B2
+ vmovdqu $ACC9, 32*9-192($tp0) # zero upper half
+ vpmuludq $B1, $ACC1, $ACC1
+ vmovdqu $ACC9, 32*10-448($tp1)
+ vpmuludq $B1, $ACC2, $ACC2
+ vmovdqu $ACC9, 32*11-448($tp1)
+ vpmuludq $B1, $ACC3, $ACC3
+ vmovdqu $ACC9, 32*12-448($tp1)
+ vpmuludq $B1, $ACC4, $ACC4
+ vmovdqu $ACC9, 32*13-448($tp1)
+ vpmuludq $B1, $ACC5, $ACC5
+ vmovdqu $ACC9, 32*14-448($tp1)
+ vpmuludq $B1, $ACC6, $ACC6
+ vmovdqu $ACC9, 32*15-448($tp1)
+ vpmuludq $B1, $ACC7, $ACC7
+ vmovdqu $ACC9, 32*16-448($tp1)
+ vpmuludq $B1, $ACC8, $ACC8
+ vpbroadcastq 32*2-128($ap), $B1
+ vmovdqu $ACC9, 32*17-448($tp1)
+
+ mov $ap, $tpa
+ mov \$4, $i
+ jmp .Lsqr_entry_1024
+___
+$TEMP0=$Y1;
+$TEMP2=$Y2;
+$code.=<<___;
+.align 32
+.LOOP_SQR_1024:
+ vpbroadcastq 32*1-128($tpa), $B2
+ vpmuludq 32*0-128($ap), $B1, $ACC0
+ vpaddq 32*0-192($tp0), $ACC0, $ACC0
+ vpmuludq 32*0-128($aap), $B1, $ACC1
+ vpaddq 32*1-192($tp0), $ACC1, $ACC1
+ vpmuludq 32*1-128($aap), $B1, $ACC2
+ vpaddq 32*2-192($tp0), $ACC2, $ACC2
+ vpmuludq 32*2-128($aap), $B1, $ACC3
+ vpaddq 32*3-192($tp0), $ACC3, $ACC3
+ vpmuludq 32*3-128($aap), $B1, $ACC4
+ vpaddq 32*4-192($tp0), $ACC4, $ACC4
+ vpmuludq 32*4-128($aap), $B1, $ACC5
+ vpaddq 32*5-192($tp0), $ACC5, $ACC5
+ vpmuludq 32*5-128($aap), $B1, $ACC6
+ vpaddq 32*6-192($tp0), $ACC6, $ACC6
+ vpmuludq 32*6-128($aap), $B1, $ACC7
+ vpaddq 32*7-192($tp0), $ACC7, $ACC7
+ vpmuludq 32*7-128($aap), $B1, $ACC8
+ vpbroadcastq 32*2-128($tpa), $B1
+ vpaddq 32*8-192($tp0), $ACC8, $ACC8
+.Lsqr_entry_1024:
+ vmovdqu $ACC0, 32*0-192($tp0)
+ vmovdqu $ACC1, 32*1-192($tp0)
+
+ vpmuludq 32*1-128($ap), $B2, $TEMP0
+ vpaddq $TEMP0, $ACC2, $ACC2
+ vpmuludq 32*1-128($aap), $B2, $TEMP1
+ vpaddq $TEMP1, $ACC3, $ACC3
+ vpmuludq 32*2-128($aap), $B2, $TEMP2
+ vpaddq $TEMP2, $ACC4, $ACC4
+ vpmuludq 32*3-128($aap), $B2, $TEMP0
+ vpaddq $TEMP0, $ACC5, $ACC5
+ vpmuludq 32*4-128($aap), $B2, $TEMP1
+ vpaddq $TEMP1, $ACC6, $ACC6
+ vpmuludq 32*5-128($aap), $B2, $TEMP2
+ vpaddq $TEMP2, $ACC7, $ACC7
+ vpmuludq 32*6-128($aap), $B2, $TEMP0
+ vpaddq $TEMP0, $ACC8, $ACC8
+ vpmuludq 32*7-128($aap), $B2, $ACC0
+ vpbroadcastq 32*3-128($tpa), $B2
+ vpaddq 32*9-192($tp0), $ACC0, $ACC0
+
+ vmovdqu $ACC2, 32*2-192($tp0)
+ vmovdqu $ACC3, 32*3-192($tp0)
+
+ vpmuludq 32*2-128($ap), $B1, $TEMP2
+ vpaddq $TEMP2, $ACC4, $ACC4
+ vpmuludq 32*2-128($aap), $B1, $TEMP0
+ vpaddq $TEMP0, $ACC5, $ACC5
+ vpmuludq 32*3-128($aap), $B1, $TEMP1
+ vpaddq $TEMP1, $ACC6, $ACC6
+ vpmuludq 32*4-128($aap), $B1, $TEMP2
+ vpaddq $TEMP2, $ACC7, $ACC7
+ vpmuludq 32*5-128($aap), $B1, $TEMP0
+ vpaddq $TEMP0, $ACC8, $ACC8
+ vpmuludq 32*6-128($aap), $B1, $TEMP1
+ vpaddq $TEMP1, $ACC0, $ACC0
+ vpmuludq 32*7-128($aap), $B1, $ACC1
+ vpbroadcastq 32*4-128($tpa), $B1
+ vpaddq 32*10-448($tp1), $ACC1, $ACC1
+
+ vmovdqu $ACC4, 32*4-192($tp0)
+ vmovdqu $ACC5, 32*5-192($tp0)
+
+ vpmuludq 32*3-128($ap), $B2, $TEMP0
+ vpaddq $TEMP0, $ACC6, $ACC6
+ vpmuludq 32*3-128($aap), $B2, $TEMP1
+ vpaddq $TEMP1, $ACC7, $ACC7
+ vpmuludq 32*4-128($aap), $B2, $TEMP2
+ vpaddq $TEMP2, $ACC8, $ACC8
+ vpmuludq 32*5-128($aap), $B2, $TEMP0
+ vpaddq $TEMP0, $ACC0, $ACC0
+ vpmuludq 32*6-128($aap), $B2, $TEMP1
+ vpaddq $TEMP1, $ACC1, $ACC1
+ vpmuludq 32*7-128($aap), $B2, $ACC2
+ vpbroadcastq 32*5-128($tpa), $B2
+ vpaddq 32*11-448($tp1), $ACC2, $ACC2
+
+ vmovdqu $ACC6, 32*6-192($tp0)
+ vmovdqu $ACC7, 32*7-192($tp0)
+
+ vpmuludq 32*4-128($ap), $B1, $TEMP0
+ vpaddq $TEMP0, $ACC8, $ACC8
+ vpmuludq 32*4-128($aap), $B1, $TEMP1
+ vpaddq $TEMP1, $ACC0, $ACC0
+ vpmuludq 32*5-128($aap), $B1, $TEMP2
+ vpaddq $TEMP2, $ACC1, $ACC1
+ vpmuludq 32*6-128($aap), $B1, $TEMP0
+ vpaddq $TEMP0, $ACC2, $ACC2
+ vpmuludq 32*7-128($aap), $B1, $ACC3
+ vpbroadcastq 32*6-128($tpa), $B1
+ vpaddq 32*12-448($tp1), $ACC3, $ACC3
+
+ vmovdqu $ACC8, 32*8-192($tp0)
+ vmovdqu $ACC0, 32*9-192($tp0)
+ lea 8($tp0), $tp0
+
+ vpmuludq 32*5-128($ap), $B2, $TEMP2
+ vpaddq $TEMP2, $ACC1, $ACC1
+ vpmuludq 32*5-128($aap), $B2, $TEMP0
+ vpaddq $TEMP0, $ACC2, $ACC2
+ vpmuludq 32*6-128($aap), $B2, $TEMP1
+ vpaddq $TEMP1, $ACC3, $ACC3
+ vpmuludq 32*7-128($aap), $B2, $ACC4
+ vpbroadcastq 32*7-128($tpa), $B2
+ vpaddq 32*13-448($tp1), $ACC4, $ACC4
+
+ vmovdqu $ACC1, 32*10-448($tp1)
+ vmovdqu $ACC2, 32*11-448($tp1)
+
+ vpmuludq 32*6-128($ap), $B1, $TEMP0
+ vpaddq $TEMP0, $ACC3, $ACC3
+ vpmuludq 32*6-128($aap), $B1, $TEMP1
+ vpbroadcastq 32*8-128($tpa), $ACC0 # borrow $ACC0 for $B1
+ vpaddq $TEMP1, $ACC4, $ACC4
+ vpmuludq 32*7-128($aap), $B1, $ACC5
+ vpbroadcastq 32*0+8-128($tpa), $B1 # for next iteration
+ vpaddq 32*14-448($tp1), $ACC5, $ACC5
+
+ vmovdqu $ACC3, 32*12-448($tp1)
+ vmovdqu $ACC4, 32*13-448($tp1)
+ lea 8($tpa), $tpa
+
+ vpmuludq 32*7-128($ap), $B2, $TEMP0
+ vpaddq $TEMP0, $ACC5, $ACC5
+ vpmuludq 32*7-128($aap), $B2, $ACC6
+ vpaddq 32*15-448($tp1), $ACC6, $ACC6
+
+ vpmuludq 32*8-128($ap), $ACC0, $ACC7
+ vmovdqu $ACC5, 32*14-448($tp1)
+ vpaddq 32*16-448($tp1), $ACC7, $ACC7
+ vmovdqu $ACC6, 32*15-448($tp1)
+ vmovdqu $ACC7, 32*16-448($tp1)
+ lea 8($tp1), $tp1
+
+ dec $i
+ jnz .LOOP_SQR_1024
+___
+$ZERO = $ACC9;
+$TEMP0 = $B1;
+$TEMP2 = $B2;
+$TEMP3 = $Y1;
+$TEMP4 = $Y2;
+$code.=<<___;
+ #we need to fix indexes 32-39 to avoid overflow
+ vmovdqu 32*8(%rsp), $ACC8 # 32*8-192($tp0),
+ vmovdqu 32*9(%rsp), $ACC1 # 32*9-192($tp0)
+ vmovdqu 32*10(%rsp), $ACC2 # 32*10-192($tp0)
+ lea 192(%rsp), $tp0 # 64+128=192
+
+ vpsrlq \$29, $ACC8, $TEMP1
+ vpand $AND_MASK, $ACC8, $ACC8
+ vpsrlq \$29, $ACC1, $TEMP2
+ vpand $AND_MASK, $ACC1, $ACC1
+
+ vpermq \$0x93, $TEMP1, $TEMP1
+ vpxor $ZERO, $ZERO, $ZERO
+ vpermq \$0x93, $TEMP2, $TEMP2
+
+ vpblendd \$3, $ZERO, $TEMP1, $TEMP0
+ vpblendd \$3, $TEMP1, $TEMP2, $TEMP1
+ vpaddq $TEMP0, $ACC8, $ACC8
+ vpblendd \$3, $TEMP2, $ZERO, $TEMP2
+ vpaddq $TEMP1, $ACC1, $ACC1
+ vpaddq $TEMP2, $ACC2, $ACC2
+ vmovdqu $ACC1, 32*9-192($tp0)
+ vmovdqu $ACC2, 32*10-192($tp0)
+
+ mov (%rsp), %rax
+ mov 8(%rsp), $r1
+ mov 16(%rsp), $r2
+ mov 24(%rsp), $r3
+ vmovdqu 32*1(%rsp), $ACC1
+ vmovdqu 32*2-192($tp0), $ACC2
+ vmovdqu 32*3-192($tp0), $ACC3
+ vmovdqu 32*4-192($tp0), $ACC4
+ vmovdqu 32*5-192($tp0), $ACC5
+ vmovdqu 32*6-192($tp0), $ACC6
+ vmovdqu 32*7-192($tp0), $ACC7
+
+ mov %rax, $r0
+ imull $n0, %eax
+ and \$0x1fffffff, %eax
+ vmovd %eax, $Y1
+
+ mov %rax, %rdx
+ imulq -128($np), %rax
+ vpbroadcastq $Y1, $Y1
+ add %rax, $r0
+ mov %rdx, %rax
+ imulq 8-128($np), %rax
+ shr \$29, $r0
+ add %rax, $r1
+ mov %rdx, %rax
+ imulq 16-128($np), %rax
+ add $r0, $r1
+ add %rax, $r2
+ imulq 24-128($np), %rdx
+ add %rdx, $r3
+
+ mov $r1, %rax
+ imull $n0, %eax
+ and \$0x1fffffff, %eax
+
+ mov \$9, $i
+ jmp .LOOP_REDUCE_1024
+
+.align 32
+.LOOP_REDUCE_1024:
+ vmovd %eax, $Y2
+ vpbroadcastq $Y2, $Y2
+
+ vpmuludq 32*1-128($np), $Y1, $TEMP0
+ mov %rax, %rdx
+ imulq -128($np), %rax
+ vpaddq $TEMP0, $ACC1, $ACC1
+ add %rax, $r1
+ vpmuludq 32*2-128($np), $Y1, $TEMP1
+ mov %rdx, %rax
+ imulq 8-128($np), %rax
+ vpaddq $TEMP1, $ACC2, $ACC2
+ vpmuludq 32*3-128($np), $Y1, $TEMP2
+ .byte 0x67
+ add %rax, $r2
+ .byte 0x67
+ mov %rdx, %rax
+ imulq 16-128($np), %rax
+ shr \$29, $r1
+ vpaddq $TEMP2, $ACC3, $ACC3
+ vpmuludq 32*4-128($np), $Y1, $TEMP0
+ add %rax, $r3
+ add $r1, $r2
+ vpaddq $TEMP0, $ACC4, $ACC4
+ vpmuludq 32*5-128($np), $Y1, $TEMP1
+ mov $r2, %rax
+ imull $n0, %eax
+ vpaddq $TEMP1, $ACC5, $ACC5
+ vpmuludq 32*6-128($np), $Y1, $TEMP2
+ and \$0x1fffffff, %eax
+ vpaddq $TEMP2, $ACC6, $ACC6
+ vpmuludq 32*7-128($np), $Y1, $TEMP0
+ vpaddq $TEMP0, $ACC7, $ACC7
+ vpmuludq 32*8-128($np), $Y1, $TEMP1
+ vmovd %eax, $Y1
+ #vmovdqu 32*1-8-128($np), $TEMP2 # moved below
+ vpaddq $TEMP1, $ACC8, $ACC8
+ #vmovdqu 32*2-8-128($np), $TEMP0 # moved below
+ vpbroadcastq $Y1, $Y1
+
+ vpmuludq 32*1-8-128($np), $Y2, $TEMP2 # see above
+ vmovdqu 32*3-8-128($np), $TEMP1
+ mov %rax, %rdx
+ imulq -128($np), %rax
+ vpaddq $TEMP2, $ACC1, $ACC1
+ vpmuludq 32*2-8-128($np), $Y2, $TEMP0 # see above
+ vmovdqu 32*4-8-128($np), $TEMP2
+ add %rax, $r2
+ mov %rdx, %rax
+ imulq 8-128($np), %rax
+ vpaddq $TEMP0, $ACC2, $ACC2
+ add $r3, %rax
+ shr \$29, $r2
+ vpmuludq $Y2, $TEMP1, $TEMP1
+ vmovdqu 32*5-8-128($np), $TEMP0
+ add $r2, %rax
+ vpaddq $TEMP1, $ACC3, $ACC3
+ vpmuludq $Y2, $TEMP2, $TEMP2
+ vmovdqu 32*6-8-128($np), $TEMP1
+ .byte 0x67
+ mov %rax, $r3
+ imull $n0, %eax
+ vpaddq $TEMP2, $ACC4, $ACC4
+ vpmuludq $Y2, $TEMP0, $TEMP0
+ .byte 0xc4,0x41,0x7e,0x6f,0x9d,0x58,0x00,0x00,0x00 # vmovdqu 32*7-8-128($np), $TEMP2
+ and \$0x1fffffff, %eax
+ vpaddq $TEMP0, $ACC5, $ACC5
+ vpmuludq $Y2, $TEMP1, $TEMP1
+ vmovdqu 32*8-8-128($np), $TEMP0
+ vpaddq $TEMP1, $ACC6, $ACC6
+ vpmuludq $Y2, $TEMP2, $TEMP2
+ vmovdqu 32*9-8-128($np), $ACC9
+ vmovd %eax, $ACC0 # borrow ACC0 for Y2
+ imulq -128($np), %rax
+ vpaddq $TEMP2, $ACC7, $ACC7
+ vpmuludq $Y2, $TEMP0, $TEMP0
+ vmovdqu 32*1-16-128($np), $TEMP1
+ vpbroadcastq $ACC0, $ACC0
+ vpaddq $TEMP0, $ACC8, $ACC8
+ vpmuludq $Y2, $ACC9, $ACC9
+ vmovdqu 32*2-16-128($np), $TEMP2
+ add %rax, $r3
+
+___
+($ACC0,$Y2)=($Y2,$ACC0);
+$code.=<<___;
+ vmovdqu 32*1-24-128($np), $ACC0
+ vpmuludq $Y1, $TEMP1, $TEMP1
+ vmovdqu 32*3-16-128($np), $TEMP0
+ vpaddq $TEMP1, $ACC1, $ACC1
+ vpmuludq $Y2, $ACC0, $ACC0
+ vpmuludq $Y1, $TEMP2, $TEMP2
+ .byte 0xc4,0x41,0x7e,0x6f,0xb5,0xf0,0xff,0xff,0xff # vmovdqu 32*4-16-128($np), $TEMP1
+ vpaddq $ACC1, $ACC0, $ACC0
+ vpaddq $TEMP2, $ACC2, $ACC2
+ vpmuludq $Y1, $TEMP0, $TEMP0
+ vmovdqu 32*5-16-128($np), $TEMP2
+ .byte 0x67
+ vmovq $ACC0, %rax
+ vmovdqu $ACC0, (%rsp) # transfer $r0-$r3
+ vpaddq $TEMP0, $ACC3, $ACC3
+ vpmuludq $Y1, $TEMP1, $TEMP1
+ vmovdqu 32*6-16-128($np), $TEMP0
+ vpaddq $TEMP1, $ACC4, $ACC4
+ vpmuludq $Y1, $TEMP2, $TEMP2
+ vmovdqu 32*7-16-128($np), $TEMP1
+ vpaddq $TEMP2, $ACC5, $ACC5
+ vpmuludq $Y1, $TEMP0, $TEMP0
+ vmovdqu 32*8-16-128($np), $TEMP2
+ vpaddq $TEMP0, $ACC6, $ACC6
+ vpmuludq $Y1, $TEMP1, $TEMP1
+ shr \$29, $r3
+ vmovdqu 32*9-16-128($np), $TEMP0
+ add $r3, %rax
+ vpaddq $TEMP1, $ACC7, $ACC7
+ vpmuludq $Y1, $TEMP2, $TEMP2
+ #vmovdqu 32*2-24-128($np), $TEMP1 # moved below
+ mov %rax, $r0
+ imull $n0, %eax
+ vpaddq $TEMP2, $ACC8, $ACC8
+ vpmuludq $Y1, $TEMP0, $TEMP0
+ and \$0x1fffffff, %eax
+ vmovd %eax, $Y1
+ vmovdqu 32*3-24-128($np), $TEMP2
+ .byte 0x67
+ vpaddq $TEMP0, $ACC9, $ACC9
+ vpbroadcastq $Y1, $Y1
+
+ vpmuludq 32*2-24-128($np), $Y2, $TEMP1 # see above
+ vmovdqu 32*4-24-128($np), $TEMP0
+ mov %rax, %rdx
+ imulq -128($np), %rax
+ mov 8(%rsp), $r1
+ vpaddq $TEMP1, $ACC2, $ACC1
+ vpmuludq $Y2, $TEMP2, $TEMP2
+ vmovdqu 32*5-24-128($np), $TEMP1
+ add %rax, $r0
+ mov %rdx, %rax
+ imulq 8-128($np), %rax
+ .byte 0x67
+ shr \$29, $r0
+ mov 16(%rsp), $r2
+ vpaddq $TEMP2, $ACC3, $ACC2
+ vpmuludq $Y2, $TEMP0, $TEMP0
+ vmovdqu 32*6-24-128($np), $TEMP2
+ add %rax, $r1
+ mov %rdx, %rax
+ imulq 16-128($np), %rax
+ vpaddq $TEMP0, $ACC4, $ACC3
+ vpmuludq $Y2, $TEMP1, $TEMP1
+ vmovdqu 32*7-24-128($np), $TEMP0
+ imulq 24-128($np), %rdx # future $r3
+ add %rax, $r2
+ lea ($r0,$r1), %rax
+ vpaddq $TEMP1, $ACC5, $ACC4
+ vpmuludq $Y2, $TEMP2, $TEMP2
+ vmovdqu 32*8-24-128($np), $TEMP1
+ mov %rax, $r1
+ imull $n0, %eax
+ vpmuludq $Y2, $TEMP0, $TEMP0
+ vpaddq $TEMP2, $ACC6, $ACC5
+ vmovdqu 32*9-24-128($np), $TEMP2
+ and \$0x1fffffff, %eax
+ vpaddq $TEMP0, $ACC7, $ACC6
+ vpmuludq $Y2, $TEMP1, $TEMP1
+ add 24(%rsp), %rdx
+ vpaddq $TEMP1, $ACC8, $ACC7
+ vpmuludq $Y2, $TEMP2, $TEMP2
+ vpaddq $TEMP2, $ACC9, $ACC8
+ vmovq $r3, $ACC9
+ mov %rdx, $r3
+
+ dec $i
+ jnz .LOOP_REDUCE_1024
+___
+($ACC0,$Y2)=($Y2,$ACC0);
+$code.=<<___;
+ lea 448(%rsp), $tp1 # size optimization
+ vpaddq $ACC9, $Y2, $ACC0
+ vpxor $ZERO, $ZERO, $ZERO
+
+ vpaddq 32*9-192($tp0), $ACC0, $ACC0
+ vpaddq 32*10-448($tp1), $ACC1, $ACC1
+ vpaddq 32*11-448($tp1), $ACC2, $ACC2
+ vpaddq 32*12-448($tp1), $ACC3, $ACC3
+ vpaddq 32*13-448($tp1), $ACC4, $ACC4
+ vpaddq 32*14-448($tp1), $ACC5, $ACC5
+ vpaddq 32*15-448($tp1), $ACC6, $ACC6
+ vpaddq 32*16-448($tp1), $ACC7, $ACC7
+ vpaddq 32*17-448($tp1), $ACC8, $ACC8
+
+ vpsrlq \$29, $ACC0, $TEMP1
+ vpand $AND_MASK, $ACC0, $ACC0
+ vpsrlq \$29, $ACC1, $TEMP2
+ vpand $AND_MASK, $ACC1, $ACC1
+ vpsrlq \$29, $ACC2, $TEMP3
+ vpermq \$0x93, $TEMP1, $TEMP1
+ vpand $AND_MASK, $ACC2, $ACC2
+ vpsrlq \$29, $ACC3, $TEMP4
+ vpermq \$0x93, $TEMP2, $TEMP2
+ vpand $AND_MASK, $ACC3, $ACC3
+ vpermq \$0x93, $TEMP3, $TEMP3
+
+ vpblendd \$3, $ZERO, $TEMP1, $TEMP0
+ vpermq \$0x93, $TEMP4, $TEMP4
+ vpblendd \$3, $TEMP1, $TEMP2, $TEMP1
+ vpaddq $TEMP0, $ACC0, $ACC0
+ vpblendd \$3, $TEMP2, $TEMP3, $TEMP2
+ vpaddq $TEMP1, $ACC1, $ACC1
+ vpblendd \$3, $TEMP3, $TEMP4, $TEMP3
+ vpaddq $TEMP2, $ACC2, $ACC2
+ vpblendd \$3, $TEMP4, $ZERO, $TEMP4
+ vpaddq $TEMP3, $ACC3, $ACC3
+ vpaddq $TEMP4, $ACC4, $ACC4
+
+ vpsrlq \$29, $ACC0, $TEMP1
+ vpand $AND_MASK, $ACC0, $ACC0
+ vpsrlq \$29, $ACC1, $TEMP2
+ vpand $AND_MASK, $ACC1, $ACC1
+ vpsrlq \$29, $ACC2, $TEMP3
+ vpermq \$0x93, $TEMP1, $TEMP1
+ vpand $AND_MASK, $ACC2, $ACC2
+ vpsrlq \$29, $ACC3, $TEMP4
+ vpermq \$0x93, $TEMP2, $TEMP2
+ vpand $AND_MASK, $ACC3, $ACC3
+ vpermq \$0x93, $TEMP3, $TEMP3
+
+ vpblendd \$3, $ZERO, $TEMP1, $TEMP0
+ vpermq \$0x93, $TEMP4, $TEMP4
+ vpblendd \$3, $TEMP1, $TEMP2, $TEMP1
+ vpaddq $TEMP0, $ACC0, $ACC0
+ vpblendd \$3, $TEMP2, $TEMP3, $TEMP2
+ vpaddq $TEMP1, $ACC1, $ACC1
+ vmovdqu $ACC0, 32*0-128($rp)
+ vpblendd \$3, $TEMP3, $TEMP4, $TEMP3
+ vpaddq $TEMP2, $ACC2, $ACC2
+ vmovdqu $ACC1, 32*1-128($rp)
+ vpblendd \$3, $TEMP4, $ZERO, $TEMP4
+ vpaddq $TEMP3, $ACC3, $ACC3
+ vmovdqu $ACC2, 32*2-128($rp)
+ vpaddq $TEMP4, $ACC4, $ACC4
+ vmovdqu $ACC3, 32*3-128($rp)
+___
+$TEMP5=$ACC0;
+$code.=<<___;
+ vpsrlq \$29, $ACC4, $TEMP1
+ vpand $AND_MASK, $ACC4, $ACC4
+ vpsrlq \$29, $ACC5, $TEMP2
+ vpand $AND_MASK, $ACC5, $ACC5
+ vpsrlq \$29, $ACC6, $TEMP3
+ vpermq \$0x93, $TEMP1, $TEMP1
+ vpand $AND_MASK, $ACC6, $ACC6
+ vpsrlq \$29, $ACC7, $TEMP4
+ vpermq \$0x93, $TEMP2, $TEMP2
+ vpand $AND_MASK, $ACC7, $ACC7
+ vpsrlq \$29, $ACC8, $TEMP5
+ vpermq \$0x93, $TEMP3, $TEMP3
+ vpand $AND_MASK, $ACC8, $ACC8
+ vpermq \$0x93, $TEMP4, $TEMP4
+
+ vpblendd \$3, $ZERO, $TEMP1, $TEMP0
+ vpermq \$0x93, $TEMP5, $TEMP5
+ vpblendd \$3, $TEMP1, $TEMP2, $TEMP1
+ vpaddq $TEMP0, $ACC4, $ACC4
+ vpblendd \$3, $TEMP2, $TEMP3, $TEMP2
+ vpaddq $TEMP1, $ACC5, $ACC5
+ vpblendd \$3, $TEMP3, $TEMP4, $TEMP3
+ vpaddq $TEMP2, $ACC6, $ACC6
+ vpblendd \$3, $TEMP4, $TEMP5, $TEMP4
+ vpaddq $TEMP3, $ACC7, $ACC7
+ vpaddq $TEMP4, $ACC8, $ACC8
+
+ vpsrlq \$29, $ACC4, $TEMP1
+ vpand $AND_MASK, $ACC4, $ACC4
+ vpsrlq \$29, $ACC5, $TEMP2
+ vpand $AND_MASK, $ACC5, $ACC5
+ vpsrlq \$29, $ACC6, $TEMP3
+ vpermq \$0x93, $TEMP1, $TEMP1
+ vpand $AND_MASK, $ACC6, $ACC6
+ vpsrlq \$29, $ACC7, $TEMP4
+ vpermq \$0x93, $TEMP2, $TEMP2
+ vpand $AND_MASK, $ACC7, $ACC7
+ vpsrlq \$29, $ACC8, $TEMP5
+ vpermq \$0x93, $TEMP3, $TEMP3
+ vpand $AND_MASK, $ACC8, $ACC8
+ vpermq \$0x93, $TEMP4, $TEMP4
+
+ vpblendd \$3, $ZERO, $TEMP1, $TEMP0
+ vpermq \$0x93, $TEMP5, $TEMP5
+ vpblendd \$3, $TEMP1, $TEMP2, $TEMP1
+ vpaddq $TEMP0, $ACC4, $ACC4
+ vpblendd \$3, $TEMP2, $TEMP3, $TEMP2
+ vpaddq $TEMP1, $ACC5, $ACC5
+ vmovdqu $ACC4, 32*4-128($rp)
+ vpblendd \$3, $TEMP3, $TEMP4, $TEMP3
+ vpaddq $TEMP2, $ACC6, $ACC6
+ vmovdqu $ACC5, 32*5-128($rp)
+ vpblendd \$3, $TEMP4, $TEMP5, $TEMP4
+ vpaddq $TEMP3, $ACC7, $ACC7
+ vmovdqu $ACC6, 32*6-128($rp)
+ vpaddq $TEMP4, $ACC8, $ACC8
+ vmovdqu $ACC7, 32*7-128($rp)
+ vmovdqu $ACC8, 32*8-128($rp)
+
+ mov $rp, $ap
+ dec $rep
+ jne .LOOP_GRANDE_SQR_1024
+
+ vzeroall
+ mov %rbp, %rax
+___
+$code.=<<___ if ($win64);
+ movaps -0xd8(%rax),%xmm6
+ movaps -0xc8(%rax),%xmm7
+ movaps -0xb8(%rax),%xmm8
+ movaps -0xa8(%rax),%xmm9
+ movaps -0x98(%rax),%xmm10
+ movaps -0x88(%rax),%xmm11
+ movaps -0x78(%rax),%xmm12
+ movaps -0x68(%rax),%xmm13
+ movaps -0x58(%rax),%xmm14
+ movaps -0x48(%rax),%xmm15
+___
+$code.=<<___;
+ mov -48(%rax),%r15
+ mov -40(%rax),%r14
+ mov -32(%rax),%r13
+ mov -24(%rax),%r12
+ mov -16(%rax),%rbp
+ mov -8(%rax),%rbx
+ lea (%rax),%rsp # restore %rsp
+.Lsqr_1024_epilogue:
+ ret
+.size rsaz_1024_sqr_avx2,.-rsaz_1024_sqr_avx2
+___
+}
+
+{ # void AMM_WW(
+my $rp="%rdi"; # BN_ULONG *rp,
+my $ap="%rsi"; # const BN_ULONG *ap,
+my $bp="%rdx"; # const BN_ULONG *bp,
+my $np="%rcx"; # const BN_ULONG *np,
+my $n0="%r8d"; # unsigned int n0);
+
+# The registers that hold the accumulated redundant result
+# The AMM works on 1024 bit operands, and redundant word size is 29
+# Therefore: ceil(1024/29)/4 = 9
+my $ACC0="%ymm0";
+my $ACC1="%ymm1";
+my $ACC2="%ymm2";
+my $ACC3="%ymm3";
+my $ACC4="%ymm4";
+my $ACC5="%ymm5";
+my $ACC6="%ymm6";
+my $ACC7="%ymm7";
+my $ACC8="%ymm8";
+my $ACC9="%ymm9";
+
+# Registers that hold the broadcasted words of multiplier, currently used
+my $Bi="%ymm10";
+my $Yi="%ymm11";
+
+# Helper registers
+my $TEMP0=$ACC0;
+my $TEMP1="%ymm12";
+my $TEMP2="%ymm13";
+my $ZERO="%ymm14";
+my $AND_MASK="%ymm15";
+
+# alu registers that hold the first words of the ACC
+my $r0="%r9";
+my $r1="%r10";
+my $r2="%r11";
+my $r3="%r12";
+
+my $i="%r14d";
+my $tmp="%r15";
+
+$bp="%r13"; # reassigned argument
+
+$code.=<<___;
+.globl rsaz_1024_mul_avx2
+.type rsaz_1024_mul_avx2,\@function,5
+.align 64
+rsaz_1024_mul_avx2:
+ lea (%rsp), %rax
+ push %rbx
+ push %rbp
+ push %r12
+ push %r13
+ push %r14
+ push %r15
+___
+$code.=<<___ if ($win64);
+ vzeroupper
+ lea -0xa8(%rsp),%rsp
+ vmovaps %xmm6,-0xd8(%rax)
+ vmovaps %xmm7,-0xc8(%rax)
+ vmovaps %xmm8,-0xb8(%rax)
+ vmovaps %xmm9,-0xa8(%rax)
+ vmovaps %xmm10,-0x98(%rax)
+ vmovaps %xmm11,-0x88(%rax)
+ vmovaps %xmm12,-0x78(%rax)
+ vmovaps %xmm13,-0x68(%rax)
+ vmovaps %xmm14,-0x58(%rax)
+ vmovaps %xmm15,-0x48(%rax)
+.Lmul_1024_body:
+___
+$code.=<<___;
+ mov %rax,%rbp
+ vzeroall
+ mov %rdx, $bp # reassigned argument
+ sub \$64,%rsp
+
+ # unaligned 256-bit load that crosses page boundary can
+ # cause severe performance degradation here, so if $ap does
+ # cross page boundary, swap it with $bp [meaning that caller
+ # is advised to lay down $ap and $bp next to each other, so
+ # that only one can cross page boundary].
+ .byte 0x67,0x67
+ mov $ap, $tmp
+ and \$4095, $tmp
+ add \$32*10, $tmp
+ shr \$12, $tmp
+ mov $ap, $tmp
+ cmovnz $bp, $ap
+ cmovnz $tmp, $bp
+
+ mov $np, $tmp
+ sub \$-128,$ap # size optimization
+ sub \$-128,$np
+ sub \$-128,$rp
+
+ and \$4095, $tmp # see if $np crosses page
+ add \$32*10, $tmp
+ .byte 0x67,0x67
+ shr \$12, $tmp
+ jz .Lmul_1024_no_n_copy
+
+ # unaligned 256-bit load that crosses page boundary can
+ # cause severe performance degradation here, so if $np does
+ # cross page boundary, copy it to stack and make sure stack
+ # frame doesn't...
+ sub \$32*10,%rsp
+ vmovdqu 32*0-128($np), $ACC0
+ and \$-512, %rsp
+ vmovdqu 32*1-128($np), $ACC1
+ vmovdqu 32*2-128($np), $ACC2
+ vmovdqu 32*3-128($np), $ACC3
+ vmovdqu 32*4-128($np), $ACC4
+ vmovdqu 32*5-128($np), $ACC5
+ vmovdqu 32*6-128($np), $ACC6
+ vmovdqu 32*7-128($np), $ACC7
+ vmovdqu 32*8-128($np), $ACC8
+ lea 64+128(%rsp),$np
+ vmovdqu $ACC0, 32*0-128($np)
+ vpxor $ACC0, $ACC0, $ACC0
+ vmovdqu $ACC1, 32*1-128($np)
+ vpxor $ACC1, $ACC1, $ACC1
+ vmovdqu $ACC2, 32*2-128($np)
+ vpxor $ACC2, $ACC2, $ACC2
+ vmovdqu $ACC3, 32*3-128($np)
+ vpxor $ACC3, $ACC3, $ACC3
+ vmovdqu $ACC4, 32*4-128($np)
+ vpxor $ACC4, $ACC4, $ACC4
+ vmovdqu $ACC5, 32*5-128($np)
+ vpxor $ACC5, $ACC5, $ACC5
+ vmovdqu $ACC6, 32*6-128($np)
+ vpxor $ACC6, $ACC6, $ACC6
+ vmovdqu $ACC7, 32*7-128($np)
+ vpxor $ACC7, $ACC7, $ACC7
+ vmovdqu $ACC8, 32*8-128($np)
+ vmovdqa $ACC0, $ACC8
+ vmovdqu $ACC9, 32*9-128($np) # $ACC9 is zero after vzeroall
+.Lmul_1024_no_n_copy:
+ and \$-64,%rsp
+
+ mov ($bp), %rbx
+ vpbroadcastq ($bp), $Bi
+ vmovdqu $ACC0, (%rsp) # clear top of stack
+ xor $r0, $r0
+ .byte 0x67
+ xor $r1, $r1
+ xor $r2, $r2
+ xor $r3, $r3
+
+ vmovdqu .Land_mask(%rip), $AND_MASK
+ mov \$9, $i
+ vmovdqu $ACC9, 32*9-128($rp) # $ACC9 is zero after vzeroall
+ jmp .Loop_mul_1024
+
+.align 32
+.Loop_mul_1024:
+ vpsrlq \$29, $ACC3, $ACC9 # correct $ACC3(*)
+ mov %rbx, %rax
+ imulq -128($ap), %rax
+ add $r0, %rax
+ mov %rbx, $r1
+ imulq 8-128($ap), $r1
+ add 8(%rsp), $r1
+
+ mov %rax, $r0
+ imull $n0, %eax
+ and \$0x1fffffff, %eax
+
+ mov %rbx, $r2
+ imulq 16-128($ap), $r2
+ add 16(%rsp), $r2
+
+ mov %rbx, $r3
+ imulq 24-128($ap), $r3
+ add 24(%rsp), $r3
+ vpmuludq 32*1-128($ap),$Bi,$TEMP0
+ vmovd %eax, $Yi
+ vpaddq $TEMP0,$ACC1,$ACC1
+ vpmuludq 32*2-128($ap),$Bi,$TEMP1
+ vpbroadcastq $Yi, $Yi
+ vpaddq $TEMP1,$ACC2,$ACC2
+ vpmuludq 32*3-128($ap),$Bi,$TEMP2
+ vpand $AND_MASK, $ACC3, $ACC3 # correct $ACC3
+ vpaddq $TEMP2,$ACC3,$ACC3
+ vpmuludq 32*4-128($ap),$Bi,$TEMP0
+ vpaddq $TEMP0,$ACC4,$ACC4
+ vpmuludq 32*5-128($ap),$Bi,$TEMP1
+ vpaddq $TEMP1,$ACC5,$ACC5
+ vpmuludq 32*6-128($ap),$Bi,$TEMP2
+ vpaddq $TEMP2,$ACC6,$ACC6
+ vpmuludq 32*7-128($ap),$Bi,$TEMP0
+ vpermq \$0x93, $ACC9, $ACC9 # correct $ACC3
+ vpaddq $TEMP0,$ACC7,$ACC7
+ vpmuludq 32*8-128($ap),$Bi,$TEMP1
+ vpbroadcastq 8($bp), $Bi
+ vpaddq $TEMP1,$ACC8,$ACC8
+
+ mov %rax,%rdx
+ imulq -128($np),%rax
+ add %rax,$r0
+ mov %rdx,%rax
+ imulq 8-128($np),%rax
+ add %rax,$r1
+ mov %rdx,%rax
+ imulq 16-128($np),%rax
+ add %rax,$r2
+ shr \$29, $r0
+ imulq 24-128($np),%rdx
+ add %rdx,$r3
+ add $r0, $r1
+
+ vpmuludq 32*1-128($np),$Yi,$TEMP2
+ vmovq $Bi, %rbx
+ vpaddq $TEMP2,$ACC1,$ACC1
+ vpmuludq 32*2-128($np),$Yi,$TEMP0
+ vpaddq $TEMP0,$ACC2,$ACC2
+ vpmuludq 32*3-128($np),$Yi,$TEMP1
+ vpaddq $TEMP1,$ACC3,$ACC3
+ vpmuludq 32*4-128($np),$Yi,$TEMP2
+ vpaddq $TEMP2,$ACC4,$ACC4
+ vpmuludq 32*5-128($np),$Yi,$TEMP0
+ vpaddq $TEMP0,$ACC5,$ACC5
+ vpmuludq 32*6-128($np),$Yi,$TEMP1
+ vpaddq $TEMP1,$ACC6,$ACC6
+ vpmuludq 32*7-128($np),$Yi,$TEMP2
+ vpblendd \$3, $ZERO, $ACC9, $ACC9 # correct $ACC3
+ vpaddq $TEMP2,$ACC7,$ACC7
+ vpmuludq 32*8-128($np),$Yi,$TEMP0
+ vpaddq $ACC9, $ACC3, $ACC3 # correct $ACC3
+ vpaddq $TEMP0,$ACC8,$ACC8
+
+ mov %rbx, %rax
+ imulq -128($ap),%rax
+ add %rax,$r1
+ vmovdqu -8+32*1-128($ap),$TEMP1
+ mov %rbx, %rax
+ imulq 8-128($ap),%rax
+ add %rax,$r2
+ vmovdqu -8+32*2-128($ap),$TEMP2
+
+ mov $r1, %rax
+ imull $n0, %eax
+ and \$0x1fffffff, %eax
+
+ imulq 16-128($ap),%rbx
+ add %rbx,$r3
+ vpmuludq $Bi,$TEMP1,$TEMP1
+ vmovd %eax, $Yi
+ vmovdqu -8+32*3-128($ap),$TEMP0
+ vpaddq $TEMP1,$ACC1,$ACC1
+ vpmuludq $Bi,$TEMP2,$TEMP2
+ vpbroadcastq $Yi, $Yi
+ vmovdqu -8+32*4-128($ap),$TEMP1
+ vpaddq $TEMP2,$ACC2,$ACC2
+ vpmuludq $Bi,$TEMP0,$TEMP0
+ vmovdqu -8+32*5-128($ap),$TEMP2
+ vpaddq $TEMP0,$ACC3,$ACC3
+ vpmuludq $Bi,$TEMP1,$TEMP1
+ vmovdqu -8+32*6-128($ap),$TEMP0
+ vpaddq $TEMP1,$ACC4,$ACC4
+ vpmuludq $Bi,$TEMP2,$TEMP2
+ vmovdqu -8+32*7-128($ap),$TEMP1
+ vpaddq $TEMP2,$ACC5,$ACC5
+ vpmuludq $Bi,$TEMP0,$TEMP0
+ vmovdqu -8+32*8-128($ap),$TEMP2
+ vpaddq $TEMP0,$ACC6,$ACC6
+ vpmuludq $Bi,$TEMP1,$TEMP1
+ vmovdqu -8+32*9-128($ap),$ACC9
+ vpaddq $TEMP1,$ACC7,$ACC7
+ vpmuludq $Bi,$TEMP2,$TEMP2
+ vpaddq $TEMP2,$ACC8,$ACC8
+ vpmuludq $Bi,$ACC9,$ACC9
+ vpbroadcastq 16($bp), $Bi
+
+ mov %rax,%rdx
+ imulq -128($np),%rax
+ add %rax,$r1
+ vmovdqu -8+32*1-128($np),$TEMP0
+ mov %rdx,%rax
+ imulq 8-128($np),%rax
+ add %rax,$r2
+ vmovdqu -8+32*2-128($np),$TEMP1
+ shr \$29, $r1
+ imulq 16-128($np),%rdx
+ add %rdx,$r3
+ add $r1, $r2
+
+ vpmuludq $Yi,$TEMP0,$TEMP0
+ vmovq $Bi, %rbx
+ vmovdqu -8+32*3-128($np),$TEMP2
+ vpaddq $TEMP0,$ACC1,$ACC1
+ vpmuludq $Yi,$TEMP1,$TEMP1
+ vmovdqu -8+32*4-128($np),$TEMP0
+ vpaddq $TEMP1,$ACC2,$ACC2
+ vpmuludq $Yi,$TEMP2,$TEMP2
+ vmovdqu -8+32*5-128($np),$TEMP1
+ vpaddq $TEMP2,$ACC3,$ACC3
+ vpmuludq $Yi,$TEMP0,$TEMP0
+ vmovdqu -8+32*6-128($np),$TEMP2
+ vpaddq $TEMP0,$ACC4,$ACC4
+ vpmuludq $Yi,$TEMP1,$TEMP1
+ vmovdqu -8+32*7-128($np),$TEMP0
+ vpaddq $TEMP1,$ACC5,$ACC5
+ vpmuludq $Yi,$TEMP2,$TEMP2
+ vmovdqu -8+32*8-128($np),$TEMP1
+ vpaddq $TEMP2,$ACC6,$ACC6
+ vpmuludq $Yi,$TEMP0,$TEMP0
+ vmovdqu -8+32*9-128($np),$TEMP2
+ vpaddq $TEMP0,$ACC7,$ACC7
+ vpmuludq $Yi,$TEMP1,$TEMP1
+ vpaddq $TEMP1,$ACC8,$ACC8
+ vpmuludq $Yi,$TEMP2,$TEMP2
+ vpaddq $TEMP2,$ACC9,$ACC9
+
+ vmovdqu -16+32*1-128($ap),$TEMP0
+ mov %rbx,%rax
+ imulq -128($ap),%rax
+ add $r2,%rax
+
+ vmovdqu -16+32*2-128($ap),$TEMP1
+ mov %rax,$r2
+ imull $n0, %eax
+ and \$0x1fffffff, %eax
+
+ imulq 8-128($ap),%rbx
+ add %rbx,$r3
+ vpmuludq $Bi,$TEMP0,$TEMP0
+ vmovd %eax, $Yi
+ vmovdqu -16+32*3-128($ap),$TEMP2
+ vpaddq $TEMP0,$ACC1,$ACC1
+ vpmuludq $Bi,$TEMP1,$TEMP1
+ vpbroadcastq $Yi, $Yi
+ vmovdqu -16+32*4-128($ap),$TEMP0
+ vpaddq $TEMP1,$ACC2,$ACC2
+ vpmuludq $Bi,$TEMP2,$TEMP2
+ vmovdqu -16+32*5-128($ap),$TEMP1
+ vpaddq $TEMP2,$ACC3,$ACC3
+ vpmuludq $Bi,$TEMP0,$TEMP0
+ vmovdqu -16+32*6-128($ap),$TEMP2
+ vpaddq $TEMP0,$ACC4,$ACC4
+ vpmuludq $Bi,$TEMP1,$TEMP1
+ vmovdqu -16+32*7-128($ap),$TEMP0
+ vpaddq $TEMP1,$ACC5,$ACC5
+ vpmuludq $Bi,$TEMP2,$TEMP2
+ vmovdqu -16+32*8-128($ap),$TEMP1
+ vpaddq $TEMP2,$ACC6,$ACC6
+ vpmuludq $Bi,$TEMP0,$TEMP0
+ vmovdqu -16+32*9-128($ap),$TEMP2
+ vpaddq $TEMP0,$ACC7,$ACC7
+ vpmuludq $Bi,$TEMP1,$TEMP1
+ vpaddq $TEMP1,$ACC8,$ACC8
+ vpmuludq $Bi,$TEMP2,$TEMP2
+ vpbroadcastq 24($bp), $Bi
+ vpaddq $TEMP2,$ACC9,$ACC9
+
+ vmovdqu -16+32*1-128($np),$TEMP0
+ mov %rax,%rdx
+ imulq -128($np),%rax
+ add %rax,$r2
+ vmovdqu -16+32*2-128($np),$TEMP1
+ imulq 8-128($np),%rdx
+ add %rdx,$r3
+ shr \$29, $r2
+
+ vpmuludq $Yi,$TEMP0,$TEMP0
+ vmovq $Bi, %rbx
+ vmovdqu -16+32*3-128($np),$TEMP2
+ vpaddq $TEMP0,$ACC1,$ACC1
+ vpmuludq $Yi,$TEMP1,$TEMP1
+ vmovdqu -16+32*4-128($np),$TEMP0
+ vpaddq $TEMP1,$ACC2,$ACC2
+ vpmuludq $Yi,$TEMP2,$TEMP2
+ vmovdqu -16+32*5-128($np),$TEMP1
+ vpaddq $TEMP2,$ACC3,$ACC3
+ vpmuludq $Yi,$TEMP0,$TEMP0
+ vmovdqu -16+32*6-128($np),$TEMP2
+ vpaddq $TEMP0,$ACC4,$ACC4
+ vpmuludq $Yi,$TEMP1,$TEMP1
+ vmovdqu -16+32*7-128($np),$TEMP0
+ vpaddq $TEMP1,$ACC5,$ACC5
+ vpmuludq $Yi,$TEMP2,$TEMP2
+ vmovdqu -16+32*8-128($np),$TEMP1
+ vpaddq $TEMP2,$ACC6,$ACC6
+ vpmuludq $Yi,$TEMP0,$TEMP0
+ vmovdqu -16+32*9-128($np),$TEMP2
+ vpaddq $TEMP0,$ACC7,$ACC7
+ vpmuludq $Yi,$TEMP1,$TEMP1
+ vmovdqu -24+32*1-128($ap),$TEMP0
+ vpaddq $TEMP1,$ACC8,$ACC8
+ vpmuludq $Yi,$TEMP2,$TEMP2
+ vmovdqu -24+32*2-128($ap),$TEMP1
+ vpaddq $TEMP2,$ACC9,$ACC9
+
+ add $r2, $r3
+ imulq -128($ap),%rbx
+ add %rbx,$r3
+
+ mov $r3, %rax
+ imull $n0, %eax
+ and \$0x1fffffff, %eax
+
+ vpmuludq $Bi,$TEMP0,$TEMP0
+ vmovd %eax, $Yi
+ vmovdqu -24+32*3-128($ap),$TEMP2
+ vpaddq $TEMP0,$ACC1,$ACC1
+ vpmuludq $Bi,$TEMP1,$TEMP1
+ vpbroadcastq $Yi, $Yi
+ vmovdqu -24+32*4-128($ap),$TEMP0
+ vpaddq $TEMP1,$ACC2,$ACC2
+ vpmuludq $Bi,$TEMP2,$TEMP2
+ vmovdqu -24+32*5-128($ap),$TEMP1
+ vpaddq $TEMP2,$ACC3,$ACC3
+ vpmuludq $Bi,$TEMP0,$TEMP0
+ vmovdqu -24+32*6-128($ap),$TEMP2
+ vpaddq $TEMP0,$ACC4,$ACC4
+ vpmuludq $Bi,$TEMP1,$TEMP1
+ vmovdqu -24+32*7-128($ap),$TEMP0
+ vpaddq $TEMP1,$ACC5,$ACC5
+ vpmuludq $Bi,$TEMP2,$TEMP2
+ vmovdqu -24+32*8-128($ap),$TEMP1
+ vpaddq $TEMP2,$ACC6,$ACC6
+ vpmuludq $Bi,$TEMP0,$TEMP0
+ vmovdqu -24+32*9-128($ap),$TEMP2
+ vpaddq $TEMP0,$ACC7,$ACC7
+ vpmuludq $Bi,$TEMP1,$TEMP1
+ vpaddq $TEMP1,$ACC8,$ACC8
+ vpmuludq $Bi,$TEMP2,$TEMP2
+ vpbroadcastq 32($bp), $Bi
+ vpaddq $TEMP2,$ACC9,$ACC9
+ add \$32, $bp # $bp++
+
+ vmovdqu -24+32*1-128($np),$TEMP0
+ imulq -128($np),%rax
+ add %rax,$r3
+ shr \$29, $r3
+
+ vmovdqu -24+32*2-128($np),$TEMP1
+ vpmuludq $Yi,$TEMP0,$TEMP0
+ vmovq $Bi, %rbx
+ vmovdqu -24+32*3-128($np),$TEMP2
+ vpaddq $TEMP0,$ACC1,$ACC0 # $ACC0==$TEMP0
+ vpmuludq $Yi,$TEMP1,$TEMP1
+ vmovdqu $ACC0, (%rsp) # transfer $r0-$r3
+ vpaddq $TEMP1,$ACC2,$ACC1
+ vmovdqu -24+32*4-128($np),$TEMP0
+ vpmuludq $Yi,$TEMP2,$TEMP2
+ vmovdqu -24+32*5-128($np),$TEMP1
+ vpaddq $TEMP2,$ACC3,$ACC2
+ vpmuludq $Yi,$TEMP0,$TEMP0
+ vmovdqu -24+32*6-128($np),$TEMP2
+ vpaddq $TEMP0,$ACC4,$ACC3
+ vpmuludq $Yi,$TEMP1,$TEMP1
+ vmovdqu -24+32*7-128($np),$TEMP0
+ vpaddq $TEMP1,$ACC5,$ACC4
+ vpmuludq $Yi,$TEMP2,$TEMP2
+ vmovdqu -24+32*8-128($np),$TEMP1
+ vpaddq $TEMP2,$ACC6,$ACC5
+ vpmuludq $Yi,$TEMP0,$TEMP0
+ vmovdqu -24+32*9-128($np),$TEMP2
+ mov $r3, $r0
+ vpaddq $TEMP0,$ACC7,$ACC6
+ vpmuludq $Yi,$TEMP1,$TEMP1
+ add (%rsp), $r0
+ vpaddq $TEMP1,$ACC8,$ACC7
+ vpmuludq $Yi,$TEMP2,$TEMP2
+ vmovq $r3, $TEMP1
+ vpaddq $TEMP2,$ACC9,$ACC8
+
+ dec $i
+ jnz .Loop_mul_1024
+___
+
+# (*) Original implementation was correcting ACC1-ACC3 for overflow
+# after 7 loop runs, or after 28 iterations, or 56 additions.
+# But as we underutilize resources, it's possible to correct in
+# each iteration with marginal performance loss. But then, as
+# we do it in each iteration, we can correct less digits, and
+# avoid performance penalties completely. Also note that we
+# correct only three digits out of four. This works because
+# most significant digit is subjected to less additions.
+
+$TEMP0 = $ACC9;
+$TEMP3 = $Bi;
+$TEMP4 = $Yi;
+$code.=<<___;
+ vpermq \$0, $AND_MASK, $AND_MASK
+ vpaddq (%rsp), $TEMP1, $ACC0
+
+ vpsrlq \$29, $ACC0, $TEMP1
+ vpand $AND_MASK, $ACC0, $ACC0
+ vpsrlq \$29, $ACC1, $TEMP2
+ vpand $AND_MASK, $ACC1, $ACC1
+ vpsrlq \$29, $ACC2, $TEMP3
+ vpermq \$0x93, $TEMP1, $TEMP1
+ vpand $AND_MASK, $ACC2, $ACC2
+ vpsrlq \$29, $ACC3, $TEMP4
+ vpermq \$0x93, $TEMP2, $TEMP2
+ vpand $AND_MASK, $ACC3, $ACC3
+
+ vpblendd \$3, $ZERO, $TEMP1, $TEMP0
+ vpermq \$0x93, $TEMP3, $TEMP3
+ vpblendd \$3, $TEMP1, $TEMP2, $TEMP1
+ vpermq \$0x93, $TEMP4, $TEMP4
+ vpaddq $TEMP0, $ACC0, $ACC0
+ vpblendd \$3, $TEMP2, $TEMP3, $TEMP2
+ vpaddq $TEMP1, $ACC1, $ACC1
+ vpblendd \$3, $TEMP3, $TEMP4, $TEMP3
+ vpaddq $TEMP2, $ACC2, $ACC2
+ vpblendd \$3, $TEMP4, $ZERO, $TEMP4
+ vpaddq $TEMP3, $ACC3, $ACC3
+ vpaddq $TEMP4, $ACC4, $ACC4
+
+ vpsrlq \$29, $ACC0, $TEMP1
+ vpand $AND_MASK, $ACC0, $ACC0
+ vpsrlq \$29, $ACC1, $TEMP2
+ vpand $AND_MASK, $ACC1, $ACC1
+ vpsrlq \$29, $ACC2, $TEMP3
+ vpermq \$0x93, $TEMP1, $TEMP1
+ vpand $AND_MASK, $ACC2, $ACC2
+ vpsrlq \$29, $ACC3, $TEMP4
+ vpermq \$0x93, $TEMP2, $TEMP2
+ vpand $AND_MASK, $ACC3, $ACC3
+ vpermq \$0x93, $TEMP3, $TEMP3
+
+ vpblendd \$3, $ZERO, $TEMP1, $TEMP0
+ vpermq \$0x93, $TEMP4, $TEMP4
+ vpblendd \$3, $TEMP1, $TEMP2, $TEMP1
+ vpaddq $TEMP0, $ACC0, $ACC0
+ vpblendd \$3, $TEMP2, $TEMP3, $TEMP2
+ vpaddq $TEMP1, $ACC1, $ACC1
+ vpblendd \$3, $TEMP3, $TEMP4, $TEMP3
+ vpaddq $TEMP2, $ACC2, $ACC2
+ vpblendd \$3, $TEMP4, $ZERO, $TEMP4
+ vpaddq $TEMP3, $ACC3, $ACC3
+ vpaddq $TEMP4, $ACC4, $ACC4
+
+ vmovdqu $ACC0, 0-128($rp)
+ vmovdqu $ACC1, 32-128($rp)
+ vmovdqu $ACC2, 64-128($rp)
+ vmovdqu $ACC3, 96-128($rp)
+___
+
+$TEMP5=$ACC0;
+$code.=<<___;
+ vpsrlq \$29, $ACC4, $TEMP1
+ vpand $AND_MASK, $ACC4, $ACC4
+ vpsrlq \$29, $ACC5, $TEMP2
+ vpand $AND_MASK, $ACC5, $ACC5
+ vpsrlq \$29, $ACC6, $TEMP3
+ vpermq \$0x93, $TEMP1, $TEMP1
+ vpand $AND_MASK, $ACC6, $ACC6
+ vpsrlq \$29, $ACC7, $TEMP4
+ vpermq \$0x93, $TEMP2, $TEMP2
+ vpand $AND_MASK, $ACC7, $ACC7
+ vpsrlq \$29, $ACC8, $TEMP5
+ vpermq \$0x93, $TEMP3, $TEMP3
+ vpand $AND_MASK, $ACC8, $ACC8
+ vpermq \$0x93, $TEMP4, $TEMP4
+
+ vpblendd \$3, $ZERO, $TEMP1, $TEMP0
+ vpermq \$0x93, $TEMP5, $TEMP5
+ vpblendd \$3, $TEMP1, $TEMP2, $TEMP1
+ vpaddq $TEMP0, $ACC4, $ACC4
+ vpblendd \$3, $TEMP2, $TEMP3, $TEMP2
+ vpaddq $TEMP1, $ACC5, $ACC5
+ vpblendd \$3, $TEMP3, $TEMP4, $TEMP3
+ vpaddq $TEMP2, $ACC6, $ACC6
+ vpblendd \$3, $TEMP4, $TEMP5, $TEMP4
+ vpaddq $TEMP3, $ACC7, $ACC7
+ vpaddq $TEMP4, $ACC8, $ACC8
+
+ vpsrlq \$29, $ACC4, $TEMP1
+ vpand $AND_MASK, $ACC4, $ACC4
+ vpsrlq \$29, $ACC5, $TEMP2
+ vpand $AND_MASK, $ACC5, $ACC5
+ vpsrlq \$29, $ACC6, $TEMP3
+ vpermq \$0x93, $TEMP1, $TEMP1
+ vpand $AND_MASK, $ACC6, $ACC6
+ vpsrlq \$29, $ACC7, $TEMP4
+ vpermq \$0x93, $TEMP2, $TEMP2
+ vpand $AND_MASK, $ACC7, $ACC7
+ vpsrlq \$29, $ACC8, $TEMP5
+ vpermq \$0x93, $TEMP3, $TEMP3
+ vpand $AND_MASK, $ACC8, $ACC8
+ vpermq \$0x93, $TEMP4, $TEMP4
+
+ vpblendd \$3, $ZERO, $TEMP1, $TEMP0
+ vpermq \$0x93, $TEMP5, $TEMP5
+ vpblendd \$3, $TEMP1, $TEMP2, $TEMP1
+ vpaddq $TEMP0, $ACC4, $ACC4
+ vpblendd \$3, $TEMP2, $TEMP3, $TEMP2
+ vpaddq $TEMP1, $ACC5, $ACC5
+ vpblendd \$3, $TEMP3, $TEMP4, $TEMP3
+ vpaddq $TEMP2, $ACC6, $ACC6
+ vpblendd \$3, $TEMP4, $TEMP5, $TEMP4
+ vpaddq $TEMP3, $ACC7, $ACC7
+ vpaddq $TEMP4, $ACC8, $ACC8
+
+ vmovdqu $ACC4, 128-128($rp)
+ vmovdqu $ACC5, 160-128($rp)
+ vmovdqu $ACC6, 192-128($rp)
+ vmovdqu $ACC7, 224-128($rp)
+ vmovdqu $ACC8, 256-128($rp)
+ vzeroupper
+
+ mov %rbp, %rax
+___
+$code.=<<___ if ($win64);
+ movaps -0xd8(%rax),%xmm6
+ movaps -0xc8(%rax),%xmm7
+ movaps -0xb8(%rax),%xmm8
+ movaps -0xa8(%rax),%xmm9
+ movaps -0x98(%rax),%xmm10
+ movaps -0x88(%rax),%xmm11
+ movaps -0x78(%rax),%xmm12
+ movaps -0x68(%rax),%xmm13
+ movaps -0x58(%rax),%xmm14
+ movaps -0x48(%rax),%xmm15
+___
+$code.=<<___;
+ mov -48(%rax),%r15
+ mov -40(%rax),%r14
+ mov -32(%rax),%r13
+ mov -24(%rax),%r12
+ mov -16(%rax),%rbp
+ mov -8(%rax),%rbx
+ lea (%rax),%rsp # restore %rsp
+.Lmul_1024_epilogue:
+ ret
+.size rsaz_1024_mul_avx2,.-rsaz_1024_mul_avx2
+___
+}
+{
+my ($out,$inp) = $win64 ? ("%rcx","%rdx") : ("%rdi","%rsi");
+my @T = map("%r$_",(8..11));
+
+$code.=<<___;
+.globl rsaz_1024_red2norm_avx2
+.type rsaz_1024_red2norm_avx2,\@abi-omnipotent
+.align 32
+rsaz_1024_red2norm_avx2:
+ sub \$-128,$inp # size optimization
+ xor %rax,%rax
+___
+
+for ($j=0,$i=0; $i<16; $i++) {
+ my $k=0;
+ while (29*$j<64*($i+1)) { # load data till boundary
+ $code.=" mov `8*$j-128`($inp), @T[0]\n";
+ $j++; $k++; push(@T,shift(@T));
+ }
+ $l=$k;
+ while ($k>1) { # shift loaded data but last value
+ $code.=" shl \$`29*($j-$k)`,@T[-$k]\n";
+ $k--;
+ }
+ $code.=<<___; # shift last value
+ mov @T[-1], @T[0]
+ shl \$`29*($j-1)`, @T[-1]
+ shr \$`-29*($j-1)`, @T[0]
+___
+ while ($l) { # accumulate all values
+ $code.=" add @T[-$l], %rax\n";
+ $l--;
+ }
+ $code.=<<___;
+ adc \$0, @T[0] # consume eventual carry
+ mov %rax, 8*$i($out)
+ mov @T[0], %rax
+___
+ push(@T,shift(@T));
+}
+$code.=<<___;
+ ret
+.size rsaz_1024_red2norm_avx2,.-rsaz_1024_red2norm_avx2
+
+.globl rsaz_1024_norm2red_avx2
+.type rsaz_1024_norm2red_avx2,\@abi-omnipotent
+.align 32
+rsaz_1024_norm2red_avx2:
+ sub \$-128,$out # size optimization
+ mov ($inp),@T[0]
+ mov \$0x1fffffff,%eax
+___
+for ($j=0,$i=0; $i<16; $i++) {
+ $code.=" mov `8*($i+1)`($inp),@T[1]\n" if ($i<15);
+ $code.=" xor @T[1],@T[1]\n" if ($i==15);
+ my $k=1;
+ while (29*($j+1)<64*($i+1)) {
+ $code.=<<___;
+ mov @T[0],@T[-$k]
+ shr \$`29*$j`,@T[-$k]
+ and %rax,@T[-$k] # &0x1fffffff
+ mov @T[-$k],`8*$j-128`($out)
+___
+ $j++; $k++;
+ }
+ $code.=<<___;
+ shrd \$`29*$j`,@T[1],@T[0]
+ and %rax,@T[0]
+ mov @T[0],`8*$j-128`($out)
+___
+ $j++;
+ push(@T,shift(@T));
+}
+$code.=<<___;
+ mov @T[0],`8*$j-128`($out) # zero
+ mov @T[0],`8*($j+1)-128`($out)
+ mov @T[0],`8*($j+2)-128`($out)
+ mov @T[0],`8*($j+3)-128`($out)
+ ret
+.size rsaz_1024_norm2red_avx2,.-rsaz_1024_norm2red_avx2
+___
+}
+{
+my ($out,$inp,$power) = $win64 ? ("%rcx","%rdx","%r8d") : ("%rdi","%rsi","%edx");
+
+$code.=<<___;
+.globl rsaz_1024_scatter5_avx2
+.type rsaz_1024_scatter5_avx2,\@abi-omnipotent
+.align 32
+rsaz_1024_scatter5_avx2:
+ vzeroupper
+ vmovdqu .Lscatter_permd(%rip),%ymm5
+ shl \$4,$power
+ lea ($out,$power),$out
+ mov \$9,%eax
+ jmp .Loop_scatter_1024
+
+.align 32
+.Loop_scatter_1024:
+ vmovdqu ($inp),%ymm0
+ lea 32($inp),$inp
+ vpermd %ymm0,%ymm5,%ymm0
+ vmovdqu %xmm0,($out)
+ lea 16*32($out),$out
+ dec %eax
+ jnz .Loop_scatter_1024
+
+ vzeroupper
+ ret
+.size rsaz_1024_scatter5_avx2,.-rsaz_1024_scatter5_avx2
+
+.globl rsaz_1024_gather5_avx2
+.type rsaz_1024_gather5_avx2,\@abi-omnipotent
+.align 32
+rsaz_1024_gather5_avx2:
+___
+$code.=<<___ if ($win64);
+ lea -0x88(%rsp),%rax
+ vzeroupper
+.LSEH_begin_rsaz_1024_gather5:
+ # I can't trust assembler to use specific encoding:-(
+ .byte 0x48,0x8d,0x60,0xe0 #lea -0x20(%rax),%rsp
+ .byte 0xc5,0xf8,0x29,0x70,0xe0 #vmovaps %xmm6,-0x20(%rax)
+ .byte 0xc5,0xf8,0x29,0x78,0xf0 #vmovaps %xmm7,-0x10(%rax)
+ .byte 0xc5,0x78,0x29,0x40,0x00 #vmovaps %xmm8,0(%rax)
+ .byte 0xc5,0x78,0x29,0x48,0x10 #vmovaps %xmm9,0x10(%rax)
+ .byte 0xc5,0x78,0x29,0x50,0x20 #vmovaps %xmm10,0x20(%rax)
+ .byte 0xc5,0x78,0x29,0x58,0x30 #vmovaps %xmm11,0x30(%rax)
+ .byte 0xc5,0x78,0x29,0x60,0x40 #vmovaps %xmm12,0x40(%rax)
+ .byte 0xc5,0x78,0x29,0x68,0x50 #vmovaps %xmm13,0x50(%rax)
+ .byte 0xc5,0x78,0x29,0x70,0x60 #vmovaps %xmm14,0x60(%rax)
+ .byte 0xc5,0x78,0x29,0x78,0x70 #vmovaps %xmm15,0x70(%rax)
+___
+$code.=<<___;
+ lea .Lgather_table(%rip),%r11
+ mov $power,%eax
+ and \$3,$power
+ shr \$2,%eax # cache line number
+ shl \$4,$power # offset within cache line
+
+ vmovdqu -32(%r11),%ymm7 # .Lgather_permd
+ vpbroadcastb 8(%r11,%rax), %xmm8
+ vpbroadcastb 7(%r11,%rax), %xmm9
+ vpbroadcastb 6(%r11,%rax), %xmm10
+ vpbroadcastb 5(%r11,%rax), %xmm11
+ vpbroadcastb 4(%r11,%rax), %xmm12
+ vpbroadcastb 3(%r11,%rax), %xmm13
+ vpbroadcastb 2(%r11,%rax), %xmm14
+ vpbroadcastb 1(%r11,%rax), %xmm15
+
+ lea 64($inp,$power),$inp
+ mov \$64,%r11 # size optimization
+ mov \$9,%eax
+ jmp .Loop_gather_1024
+
+.align 32
+.Loop_gather_1024:
+ vpand -64($inp), %xmm8,%xmm0
+ vpand ($inp), %xmm9,%xmm1
+ vpand 64($inp), %xmm10,%xmm2
+ vpand ($inp,%r11,2), %xmm11,%xmm3
+ vpor %xmm0,%xmm1,%xmm1
+ vpand 64($inp,%r11,2), %xmm12,%xmm4
+ vpor %xmm2,%xmm3,%xmm3
+ vpand ($inp,%r11,4), %xmm13,%xmm5
+ vpor %xmm1,%xmm3,%xmm3
+ vpand 64($inp,%r11,4), %xmm14,%xmm6
+ vpor %xmm4,%xmm5,%xmm5
+ vpand -128($inp,%r11,8), %xmm15,%xmm2
+ lea ($inp,%r11,8),$inp
+ vpor %xmm3,%xmm5,%xmm5
+ vpor %xmm2,%xmm6,%xmm6
+ vpor %xmm5,%xmm6,%xmm6
+ vpermd %ymm6,%ymm7,%ymm6
+ vmovdqu %ymm6,($out)
+ lea 32($out),$out
+ dec %eax
+ jnz .Loop_gather_1024
+
+ vpxor %ymm0,%ymm0,%ymm0
+ vmovdqu %ymm0,($out)
+ vzeroupper
+___
+$code.=<<___ if ($win64);
+ movaps (%rsp),%xmm6
+ movaps 0x10(%rsp),%xmm7
+ movaps 0x20(%rsp),%xmm8
+ movaps 0x30(%rsp),%xmm9
+ movaps 0x40(%rsp),%xmm10
+ movaps 0x50(%rsp),%xmm11
+ movaps 0x60(%rsp),%xmm12
+ movaps 0x70(%rsp),%xmm13
+ movaps 0x80(%rsp),%xmm14
+ movaps 0x90(%rsp),%xmm15
+ lea 0xa8(%rsp),%rsp
+.LSEH_end_rsaz_1024_gather5:
+___
+$code.=<<___;
+ ret
+.size rsaz_1024_gather5_avx2,.-rsaz_1024_gather5_avx2
+___
+}
+
+$code.=<<___;
+.extern OPENSSL_ia32cap_P
+.globl rsaz_avx2_eligible
+.type rsaz_avx2_eligible,\@abi-omnipotent
+.align 32
+rsaz_avx2_eligible:
+ mov OPENSSL_ia32cap_P+8(%rip),%eax
+___
+$code.=<<___ if ($addx);
+ mov \$`1<<8|1<<19`,%ecx
+ mov \$0,%edx
+ and %eax,%ecx
+ cmp \$`1<<8|1<<19`,%ecx # check for BMI2+AD*X
+ cmove %edx,%eax
+___
+$code.=<<___;
+ and \$`1<<5`,%eax
+ shr \$5,%eax
+ ret
+.size rsaz_avx2_eligible,.-rsaz_avx2_eligible
+
+.align 64
+.Land_mask:
+ .quad 0x1fffffff,0x1fffffff,0x1fffffff,-1
+.Lscatter_permd:
+ .long 0,2,4,6,7,7,7,7
+.Lgather_permd:
+ .long 0,7,1,7,2,7,3,7
+.Lgather_table:
+ .byte 0,0,0,0,0,0,0,0, 0xff,0,0,0,0,0,0,0
+.align 64
+___
+
+if ($win64) {
+$rec="%rcx";
+$frame="%rdx";
+$context="%r8";
+$disp="%r9";
+
+$code.=<<___
+.extern __imp_RtlVirtualUnwind
+.type rsaz_se_handler,\@abi-omnipotent
+.align 16
+rsaz_se_handler:
+ push %rsi
+ push %rdi
+ push %rbx
+ push %rbp
+ push %r12
+ push %r13
+ push %r14
+ push %r15
+ pushfq
+ sub \$64,%rsp
+
+ mov 120($context),%rax # pull context->Rax
+ mov 248($context),%rbx # pull context->Rip
+
+ mov 8($disp),%rsi # disp->ImageBase
+ mov 56($disp),%r11 # disp->HandlerData
+
+ mov 0(%r11),%r10d # HandlerData[0]
+ lea (%rsi,%r10),%r10 # prologue label
+ cmp %r10,%rbx # context->Rip<prologue label
+ jb .Lcommon_seh_tail
+
+ mov 152($context),%rax # pull context->Rsp
+
+ mov 4(%r11),%r10d # HandlerData[1]
+ lea (%rsi,%r10),%r10 # epilogue label
+ cmp %r10,%rbx # context->Rip>=epilogue label
+ jae .Lcommon_seh_tail
+
+ mov 160($context),%rax # pull context->Rbp
+
+ mov -48(%rax),%r15
+ mov -40(%rax),%r14
+ mov -32(%rax),%r13
+ mov -24(%rax),%r12
+ mov -16(%rax),%rbp
+ mov -8(%rax),%rbx
+ mov %r15,240($context)
+ mov %r14,232($context)
+ mov %r13,224($context)
+ mov %r12,216($context)
+ mov %rbp,160($context)
+ mov %rbx,144($context)
+
+ lea -0xd8(%rax),%rsi # %xmm save area
+ lea 512($context),%rdi # & context.Xmm6
+ mov \$20,%ecx # 10*sizeof(%xmm0)/sizeof(%rax)
+ .long 0xa548f3fc # cld; rep movsq
+
+.Lcommon_seh_tail:
+ mov 8(%rax),%rdi
+ mov 16(%rax),%rsi
+ mov %rax,152($context) # restore context->Rsp
+ mov %rsi,168($context) # restore context->Rsi
+ mov %rdi,176($context) # restore context->Rdi
+
+ mov 40($disp),%rdi # disp->ContextRecord
+ mov $context,%rsi # context
+ mov \$154,%ecx # sizeof(CONTEXT)
+ .long 0xa548f3fc # cld; rep movsq
+
+ mov $disp,%rsi
+ xor %rcx,%rcx # arg1, UNW_FLAG_NHANDLER
+ mov 8(%rsi),%rdx # arg2, disp->ImageBase
+ mov 0(%rsi),%r8 # arg3, disp->ControlPc
+ mov 16(%rsi),%r9 # arg4, disp->FunctionEntry
+ mov 40(%rsi),%r10 # disp->ContextRecord
+ lea 56(%rsi),%r11 # &disp->HandlerData
+ lea 24(%rsi),%r12 # &disp->EstablisherFrame
+ mov %r10,32(%rsp) # arg5
+ mov %r11,40(%rsp) # arg6
+ mov %r12,48(%rsp) # arg7
+ mov %rcx,56(%rsp) # arg8, (NULL)
+ call *__imp_RtlVirtualUnwind(%rip)
+
+ mov \$1,%eax # ExceptionContinueSearch
+ add \$64,%rsp
+ popfq
+ pop %r15
+ pop %r14
+ pop %r13
+ pop %r12
+ pop %rbp
+ pop %rbx
+ pop %rdi
+ pop %rsi
+ ret
+.size rsaz_se_handler,.-rsaz_se_handler
+
+.section .pdata
+.align 4
+ .rva .LSEH_begin_rsaz_1024_sqr_avx2
+ .rva .LSEH_end_rsaz_1024_sqr_avx2
+ .rva .LSEH_info_rsaz_1024_sqr_avx2
+
+ .rva .LSEH_begin_rsaz_1024_mul_avx2
+ .rva .LSEH_end_rsaz_1024_mul_avx2
+ .rva .LSEH_info_rsaz_1024_mul_avx2
+
+ .rva .LSEH_begin_rsaz_1024_gather5
+ .rva .LSEH_end_rsaz_1024_gather5
+ .rva .LSEH_info_rsaz_1024_gather5
+.section .xdata
+.align 8
+.LSEH_info_rsaz_1024_sqr_avx2:
+ .byte 9,0,0,0
+ .rva rsaz_se_handler
+ .rva .Lsqr_1024_body,.Lsqr_1024_epilogue
+.LSEH_info_rsaz_1024_mul_avx2:
+ .byte 9,0,0,0
+ .rva rsaz_se_handler
+ .rva .Lmul_1024_body,.Lmul_1024_epilogue
+.LSEH_info_rsaz_1024_gather5:
+ .byte 0x01,0x33,0x16,0x00
+ .byte 0x36,0xf8,0x09,0x00 #vmovaps 0x90(rsp),xmm15
+ .byte 0x31,0xe8,0x08,0x00 #vmovaps 0x80(rsp),xmm14
+ .byte 0x2c,0xd8,0x07,0x00 #vmovaps 0x70(rsp),xmm13
+ .byte 0x27,0xc8,0x06,0x00 #vmovaps 0x60(rsp),xmm12
+ .byte 0x22,0xb8,0x05,0x00 #vmovaps 0x50(rsp),xmm11
+ .byte 0x1d,0xa8,0x04,0x00 #vmovaps 0x40(rsp),xmm10
+ .byte 0x18,0x98,0x03,0x00 #vmovaps 0x30(rsp),xmm9
+ .byte 0x13,0x88,0x02,0x00 #vmovaps 0x20(rsp),xmm8
+ .byte 0x0e,0x78,0x01,0x00 #vmovaps 0x10(rsp),xmm7
+ .byte 0x09,0x68,0x00,0x00 #vmovaps 0x00(rsp),xmm6
+ .byte 0x04,0x01,0x15,0x00 #sub rsp,0xa8
+___
+}
+
+foreach (split("\n",$code)) {
+ s/\`([^\`]*)\`/eval($1)/ge;
+
+ s/\b(sh[rl]d?\s+\$)(-?[0-9]+)/$1.$2%64/ge or
+
+ s/\b(vmov[dq])\b(.+)%ymm([0-9]+)/$1$2%xmm$3/go or
+ s/\b(vmovdqu)\b(.+)%x%ymm([0-9]+)/$1$2%xmm$3/go or
+ s/\b(vpinsr[qd])\b(.+)%ymm([0-9]+)/$1$2%xmm$3/go or
+ s/\b(vpextr[qd])\b(.+)%ymm([0-9]+)/$1$2%xmm$3/go or
+ s/\b(vpbroadcast[qd]\s+)%ymm([0-9]+)/$1%xmm$2/go;
+ print $_,"\n";
+}
+
+}}} else {{{
+print <<___; # assembler is too old
+.text
+
+.globl rsaz_avx2_eligible
+.type rsaz_avx2_eligible,\@abi-omnipotent
+rsaz_avx2_eligible:
+ xor %eax,%eax
+ ret
+.size rsaz_avx2_eligible,.-rsaz_avx2_eligible
+
+.globl rsaz_1024_sqr_avx2
+.globl rsaz_1024_mul_avx2
+.globl rsaz_1024_norm2red_avx2
+.globl rsaz_1024_red2norm_avx2
+.globl rsaz_1024_scatter5_avx2
+.globl rsaz_1024_gather5_avx2
+.type rsaz_1024_sqr_avx2,\@abi-omnipotent
+rsaz_1024_sqr_avx2:
+rsaz_1024_mul_avx2:
+rsaz_1024_norm2red_avx2:
+rsaz_1024_red2norm_avx2:
+rsaz_1024_scatter5_avx2:
+rsaz_1024_gather5_avx2:
+ .byte 0x0f,0x0b # ud2
+ ret
+.size rsaz_1024_sqr_avx2,.-rsaz_1024_sqr_avx2
+___
+}}}
+
+close STDOUT;
diff --git a/crypto/openssl/crypto/bn/asm/rsaz-x86_64.pl b/crypto/openssl/crypto/bn/asm/rsaz-x86_64.pl
new file mode 100755
index 0000000..3bd45db
--- /dev/null
+++ b/crypto/openssl/crypto/bn/asm/rsaz-x86_64.pl
@@ -0,0 +1,2144 @@
+#!/usr/bin/env perl
+
+##############################################################################
+# #
+# Copyright (c) 2012, Intel Corporation #
+# #
+# All rights reserved. #
+# #
+# Redistribution and use in source and binary forms, with or without #
+# modification, are permitted provided that the following conditions are #
+# met: #
+# #
+# * Redistributions of source code must retain the above copyright #
+# notice, this list of conditions and the following disclaimer. #
+# #
+# * Redistributions in binary form must reproduce the above copyright #
+# notice, this list of conditions and the following disclaimer in the #
+# documentation and/or other materials provided with the #
+# distribution. #
+# #
+# * Neither the name of the Intel Corporation nor the names of its #
+# contributors may be used to endorse or promote products derived from #
+# this software without specific prior written permission. #
+# #
+# #
+# THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION ""AS IS"" AND ANY #
+# EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE #
+# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR #
+# PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION OR #
+# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, #
+# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, #
+# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR #
+# PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF #
+# LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING #
+# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS #
+# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #
+# #
+##############################################################################
+# Developers and authors: #
+# Shay Gueron (1, 2), and Vlad Krasnov (1) #
+# (1) Intel Architecture Group, Microprocessor and Chipset Development, #
+# Israel Development Center, Haifa, Israel #
+# (2) University of Haifa #
+##############################################################################
+# Reference: #
+# [1] S. Gueron, "Efficient Software Implementations of Modular #
+# Exponentiation", http://eprint.iacr.org/2011/239 #
+# [2] S. Gueron, V. Krasnov. "Speeding up Big-Numbers Squaring". #
+# IEEE Proceedings of 9th International Conference on Information #
+# Technology: New Generations (ITNG 2012), 821-823 (2012). #
+# [3] S. Gueron, Efficient Software Implementations of Modular Exponentiation#
+# Journal of Cryptographic Engineering 2:31-43 (2012). #
+# [4] S. Gueron, V. Krasnov: "[PATCH] Efficient and side channel analysis #
+# resistant 512-bit and 1024-bit modular exponentiation for optimizing #
+# RSA1024 and RSA2048 on x86_64 platforms", #
+# http://rt.openssl.org/Ticket/Display.html?id=2582&user=guest&pass=guest#
+##############################################################################
+
+# While original submission covers 512- and 1024-bit exponentiation,
+# this module is limited to 512-bit version only (and as such
+# accelerates RSA1024 sign). This is because improvement for longer
+# keys is not high enough to justify the effort, highest measured
+# was ~5% on Westmere. [This is relative to OpenSSL 1.0.2, upcoming
+# for the moment of this writing!] Nor does this module implement
+# "monolithic" complete exponentiation jumbo-subroutine, but adheres
+# to more modular mixture of C and assembly. And it's optimized even
+# for processors other than Intel Core family (see table below for
+# improvement coefficients).
+# <appro@openssl.org>
+#
+# RSA1024 sign/sec this/original |this/rsax(*) this/fips(*)
+# ----------------+---------------------------
+# Opteron +13% |+5% +20%
+# Bulldozer -0% |-1% +10%
+# P4 +11% |+7% +8%
+# Westmere +5% |+14% +17%
+# Sandy Bridge +2% |+12% +29%
+# Ivy Bridge +1% |+11% +35%
+# Haswell(**) -0% |+12% +39%
+# Atom +13% |+11% +4%
+# VIA Nano +70% |+9% +25%
+#
+# (*) rsax engine and fips numbers are presented for reference
+# purposes;
+# (**) MULX was attempted, but found to give only marginal improvement;
+
+$flavour = shift;
+$output = shift;
+if ($flavour =~ /\./) { $output = $flavour; undef $flavour; }
+
+$win64=0; $win64=1 if ($flavour =~ /[nm]asm|mingw64/ || $output =~ /\.asm$/);
+
+$0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1;
+( $xlate="${dir}x86_64-xlate.pl" and -f $xlate ) or
+( $xlate="${dir}../../perlasm/x86_64-xlate.pl" and -f $xlate) or
+die "can't locate x86_64-xlate.pl";
+
+open OUT,"| \"$^X\" $xlate $flavour $output";
+*STDOUT=*OUT;
+
+if (`$ENV{CC} -Wa,-v -c -o /dev/null -x assembler /dev/null 2>&1`
+ =~ /GNU assembler version ([2-9]\.[0-9]+)/) {
+ $addx = ($1>=2.23);
+}
+
+if (!$addx && $win64 && ($flavour =~ /nasm/ || $ENV{ASM} =~ /nasm/) &&
+ `nasm -v 2>&1` =~ /NASM version ([2-9]\.[0-9]+)/) {
+ $addx = ($1>=2.10);
+}
+
+if (!$addx && $win64 && ($flavour =~ /masm/ || $ENV{ASM} =~ /ml64/) &&
+ `ml64 2>&1` =~ /Version ([0-9]+)\./) {
+ $addx = ($1>=12);
+}
+
+if (!$addx && `$ENV{CC} -v 2>&1` =~ /(^clang version|based on LLVM) ([3-9])\.([0-9]+)/) {
+ my $ver = $2 + $3/100.0; # 3.1->3.01, 3.10->3.10
+ $addx = ($ver>=3.03);
+}
+
+($out, $inp, $mod) = ("%rdi", "%rsi", "%rbp"); # common internal API
+{
+my ($out,$inp,$mod,$n0,$times) = ("%rdi","%rsi","%rdx","%rcx","%r8d");
+
+$code.=<<___;
+.text
+
+.extern OPENSSL_ia32cap_P
+
+.globl rsaz_512_sqr
+.type rsaz_512_sqr,\@function,5
+.align 32
+rsaz_512_sqr: # 25-29% faster than rsaz_512_mul
+ push %rbx
+ push %rbp
+ push %r12
+ push %r13
+ push %r14
+ push %r15
+
+ subq \$128+24, %rsp
+.Lsqr_body:
+ movq $mod, %rbp # common argument
+ movq ($inp), %rdx
+ movq 8($inp), %rax
+ movq $n0, 128(%rsp)
+___
+$code.=<<___ if ($addx);
+ movl \$0x80100,%r11d
+ andl OPENSSL_ia32cap_P+8(%rip),%r11d
+ cmpl \$0x80100,%r11d # check for MULX and ADO/CX
+ je .Loop_sqrx
+___
+$code.=<<___;
+ jmp .Loop_sqr
+
+.align 32
+.Loop_sqr:
+ movl $times,128+8(%rsp)
+#first iteration
+ movq %rdx, %rbx
+ mulq %rdx
+ movq %rax, %r8
+ movq 16($inp), %rax
+ movq %rdx, %r9
+
+ mulq %rbx
+ addq %rax, %r9
+ movq 24($inp), %rax
+ movq %rdx, %r10
+ adcq \$0, %r10
+
+ mulq %rbx
+ addq %rax, %r10
+ movq 32($inp), %rax
+ movq %rdx, %r11
+ adcq \$0, %r11
+
+ mulq %rbx
+ addq %rax, %r11
+ movq 40($inp), %rax
+ movq %rdx, %r12
+ adcq \$0, %r12
+
+ mulq %rbx
+ addq %rax, %r12
+ movq 48($inp), %rax
+ movq %rdx, %r13
+ adcq \$0, %r13
+
+ mulq %rbx
+ addq %rax, %r13
+ movq 56($inp), %rax
+ movq %rdx, %r14
+ adcq \$0, %r14
+
+ mulq %rbx
+ addq %rax, %r14
+ movq %rbx, %rax
+ movq %rdx, %r15
+ adcq \$0, %r15
+
+ addq %r8, %r8 #shlq \$1, %r8
+ movq %r9, %rcx
+ adcq %r9, %r9 #shld \$1, %r8, %r9
+
+ mulq %rax
+ movq %rax, (%rsp)
+ addq %rdx, %r8
+ adcq \$0, %r9
+
+ movq %r8, 8(%rsp)
+ shrq \$63, %rcx
+
+#second iteration
+ movq 8($inp), %r8
+ movq 16($inp), %rax
+ mulq %r8
+ addq %rax, %r10
+ movq 24($inp), %rax
+ movq %rdx, %rbx
+ adcq \$0, %rbx
+
+ mulq %r8
+ addq %rax, %r11
+ movq 32($inp), %rax
+ adcq \$0, %rdx
+ addq %rbx, %r11
+ movq %rdx, %rbx
+ adcq \$0, %rbx
+
+ mulq %r8
+ addq %rax, %r12
+ movq 40($inp), %rax
+ adcq \$0, %rdx
+ addq %rbx, %r12
+ movq %rdx, %rbx
+ adcq \$0, %rbx
+
+ mulq %r8
+ addq %rax, %r13
+ movq 48($inp), %rax
+ adcq \$0, %rdx
+ addq %rbx, %r13
+ movq %rdx, %rbx
+ adcq \$0, %rbx
+
+ mulq %r8
+ addq %rax, %r14
+ movq 56($inp), %rax
+ adcq \$0, %rdx
+ addq %rbx, %r14
+ movq %rdx, %rbx
+ adcq \$0, %rbx
+
+ mulq %r8
+ addq %rax, %r15
+ movq %r8, %rax
+ adcq \$0, %rdx
+ addq %rbx, %r15
+ movq %rdx, %r8
+ movq %r10, %rdx
+ adcq \$0, %r8
+
+ add %rdx, %rdx
+ lea (%rcx,%r10,2), %r10 #shld \$1, %rcx, %r10
+ movq %r11, %rbx
+ adcq %r11, %r11 #shld \$1, %r10, %r11
+
+ mulq %rax
+ addq %rax, %r9
+ adcq %rdx, %r10
+ adcq \$0, %r11
+
+ movq %r9, 16(%rsp)
+ movq %r10, 24(%rsp)
+ shrq \$63, %rbx
+
+#third iteration
+ movq 16($inp), %r9
+ movq 24($inp), %rax
+ mulq %r9
+ addq %rax, %r12
+ movq 32($inp), %rax
+ movq %rdx, %rcx
+ adcq \$0, %rcx
+
+ mulq %r9
+ addq %rax, %r13
+ movq 40($inp), %rax
+ adcq \$0, %rdx
+ addq %rcx, %r13
+ movq %rdx, %rcx
+ adcq \$0, %rcx
+
+ mulq %r9
+ addq %rax, %r14
+ movq 48($inp), %rax
+ adcq \$0, %rdx
+ addq %rcx, %r14
+ movq %rdx, %rcx
+ adcq \$0, %rcx
+
+ mulq %r9
+ movq %r12, %r10
+ lea (%rbx,%r12,2), %r12 #shld \$1, %rbx, %r12
+ addq %rax, %r15
+ movq 56($inp), %rax
+ adcq \$0, %rdx
+ addq %rcx, %r15
+ movq %rdx, %rcx
+ adcq \$0, %rcx
+
+ mulq %r9
+ shrq \$63, %r10
+ addq %rax, %r8
+ movq %r9, %rax
+ adcq \$0, %rdx
+ addq %rcx, %r8
+ movq %rdx, %r9
+ adcq \$0, %r9
+
+ movq %r13, %rcx
+ leaq (%r10,%r13,2), %r13 #shld \$1, %r12, %r13
+
+ mulq %rax
+ addq %rax, %r11
+ adcq %rdx, %r12
+ adcq \$0, %r13
+
+ movq %r11, 32(%rsp)
+ movq %r12, 40(%rsp)
+ shrq \$63, %rcx
+
+#fourth iteration
+ movq 24($inp), %r10
+ movq 32($inp), %rax
+ mulq %r10
+ addq %rax, %r14
+ movq 40($inp), %rax
+ movq %rdx, %rbx
+ adcq \$0, %rbx
+
+ mulq %r10
+ addq %rax, %r15
+ movq 48($inp), %rax
+ adcq \$0, %rdx
+ addq %rbx, %r15
+ movq %rdx, %rbx
+ adcq \$0, %rbx
+
+ mulq %r10
+ movq %r14, %r12
+ leaq (%rcx,%r14,2), %r14 #shld \$1, %rcx, %r14
+ addq %rax, %r8
+ movq 56($inp), %rax
+ adcq \$0, %rdx
+ addq %rbx, %r8
+ movq %rdx, %rbx
+ adcq \$0, %rbx
+
+ mulq %r10
+ shrq \$63, %r12
+ addq %rax, %r9
+ movq %r10, %rax
+ adcq \$0, %rdx
+ addq %rbx, %r9
+ movq %rdx, %r10
+ adcq \$0, %r10
+
+ movq %r15, %rbx
+ leaq (%r12,%r15,2),%r15 #shld \$1, %r14, %r15
+
+ mulq %rax
+ addq %rax, %r13
+ adcq %rdx, %r14
+ adcq \$0, %r15
+
+ movq %r13, 48(%rsp)
+ movq %r14, 56(%rsp)
+ shrq \$63, %rbx
+
+#fifth iteration
+ movq 32($inp), %r11
+ movq 40($inp), %rax
+ mulq %r11
+ addq %rax, %r8
+ movq 48($inp), %rax
+ movq %rdx, %rcx
+ adcq \$0, %rcx
+
+ mulq %r11
+ addq %rax, %r9
+ movq 56($inp), %rax
+ adcq \$0, %rdx
+ movq %r8, %r12
+ leaq (%rbx,%r8,2), %r8 #shld \$1, %rbx, %r8
+ addq %rcx, %r9
+ movq %rdx, %rcx
+ adcq \$0, %rcx
+
+ mulq %r11
+ shrq \$63, %r12
+ addq %rax, %r10
+ movq %r11, %rax
+ adcq \$0, %rdx
+ addq %rcx, %r10
+ movq %rdx, %r11
+ adcq \$0, %r11
+
+ movq %r9, %rcx
+ leaq (%r12,%r9,2), %r9 #shld \$1, %r8, %r9
+
+ mulq %rax
+ addq %rax, %r15
+ adcq %rdx, %r8
+ adcq \$0, %r9
+
+ movq %r15, 64(%rsp)
+ movq %r8, 72(%rsp)
+ shrq \$63, %rcx
+
+#sixth iteration
+ movq 40($inp), %r12
+ movq 48($inp), %rax
+ mulq %r12
+ addq %rax, %r10
+ movq 56($inp), %rax
+ movq %rdx, %rbx
+ adcq \$0, %rbx
+
+ mulq %r12
+ addq %rax, %r11
+ movq %r12, %rax
+ movq %r10, %r15
+ leaq (%rcx,%r10,2), %r10 #shld \$1, %rcx, %r10
+ adcq \$0, %rdx
+ shrq \$63, %r15
+ addq %rbx, %r11
+ movq %rdx, %r12
+ adcq \$0, %r12
+
+ movq %r11, %rbx
+ leaq (%r15,%r11,2), %r11 #shld \$1, %r10, %r11
+
+ mulq %rax
+ addq %rax, %r9
+ adcq %rdx, %r10
+ adcq \$0, %r11
+
+ movq %r9, 80(%rsp)
+ movq %r10, 88(%rsp)
+
+#seventh iteration
+ movq 48($inp), %r13
+ movq 56($inp), %rax
+ mulq %r13
+ addq %rax, %r12
+ movq %r13, %rax
+ movq %rdx, %r13
+ adcq \$0, %r13
+
+ xorq %r14, %r14
+ shlq \$1, %rbx
+ adcq %r12, %r12 #shld \$1, %rbx, %r12
+ adcq %r13, %r13 #shld \$1, %r12, %r13
+ adcq %r14, %r14 #shld \$1, %r13, %r14
+
+ mulq %rax
+ addq %rax, %r11
+ adcq %rdx, %r12
+ adcq \$0, %r13
+
+ movq %r11, 96(%rsp)
+ movq %r12, 104(%rsp)
+
+#eighth iteration
+ movq 56($inp), %rax
+ mulq %rax
+ addq %rax, %r13
+ adcq \$0, %rdx
+
+ addq %rdx, %r14
+
+ movq %r13, 112(%rsp)
+ movq %r14, 120(%rsp)
+
+ movq (%rsp), %r8
+ movq 8(%rsp), %r9
+ movq 16(%rsp), %r10
+ movq 24(%rsp), %r11
+ movq 32(%rsp), %r12
+ movq 40(%rsp), %r13
+ movq 48(%rsp), %r14
+ movq 56(%rsp), %r15
+
+ call __rsaz_512_reduce
+
+ addq 64(%rsp), %r8
+ adcq 72(%rsp), %r9
+ adcq 80(%rsp), %r10
+ adcq 88(%rsp), %r11
+ adcq 96(%rsp), %r12
+ adcq 104(%rsp), %r13
+ adcq 112(%rsp), %r14
+ adcq 120(%rsp), %r15
+ sbbq %rcx, %rcx
+
+ call __rsaz_512_subtract
+
+ movq %r8, %rdx
+ movq %r9, %rax
+ movl 128+8(%rsp), $times
+ movq $out, $inp
+
+ decl $times
+ jnz .Loop_sqr
+___
+if ($addx) {
+$code.=<<___;
+ jmp .Lsqr_tail
+
+.align 32
+.Loop_sqrx:
+ movl $times,128+8(%rsp)
+ movq $out, %xmm0 # off-load
+ movq %rbp, %xmm1 # off-load
+#first iteration
+ mulx %rax, %r8, %r9
+
+ mulx 16($inp), %rcx, %r10
+ xor %rbp, %rbp # cf=0, of=0
+
+ mulx 24($inp), %rax, %r11
+ adcx %rcx, %r9
+
+ mulx 32($inp), %rcx, %r12
+ adcx %rax, %r10
+
+ mulx 40($inp), %rax, %r13
+ adcx %rcx, %r11
+
+ .byte 0xc4,0x62,0xf3,0xf6,0xb6,0x30,0x00,0x00,0x00 # mulx 48($inp), %rcx, %r14
+ adcx %rax, %r12
+ adcx %rcx, %r13
+
+ .byte 0xc4,0x62,0xfb,0xf6,0xbe,0x38,0x00,0x00,0x00 # mulx 56($inp), %rax, %r15
+ adcx %rax, %r14
+ adcx %rbp, %r15 # %rbp is 0
+
+ mov %r9, %rcx
+ shld \$1, %r8, %r9
+ shl \$1, %r8
+
+ xor %ebp, %ebp
+ mulx %rdx, %rax, %rdx
+ adcx %rdx, %r8
+ mov 8($inp), %rdx
+ adcx %rbp, %r9
+
+ mov %rax, (%rsp)
+ mov %r8, 8(%rsp)
+
+#second iteration
+ mulx 16($inp), %rax, %rbx
+ adox %rax, %r10
+ adcx %rbx, %r11
+
+ .byte 0xc4,0x62,0xc3,0xf6,0x86,0x18,0x00,0x00,0x00 # mulx 24($inp), $out, %r8
+ adox $out, %r11
+ adcx %r8, %r12
+
+ mulx 32($inp), %rax, %rbx
+ adox %rax, %r12
+ adcx %rbx, %r13
+
+ mulx 40($inp), $out, %r8
+ adox $out, %r13
+ adcx %r8, %r14
+
+ .byte 0xc4,0xe2,0xfb,0xf6,0x9e,0x30,0x00,0x00,0x00 # mulx 48($inp), %rax, %rbx
+ adox %rax, %r14
+ adcx %rbx, %r15
+
+ .byte 0xc4,0x62,0xc3,0xf6,0x86,0x38,0x00,0x00,0x00 # mulx 56($inp), $out, %r8
+ adox $out, %r15
+ adcx %rbp, %r8
+ adox %rbp, %r8
+
+ mov %r11, %rbx
+ shld \$1, %r10, %r11
+ shld \$1, %rcx, %r10
+
+ xor %ebp,%ebp
+ mulx %rdx, %rax, %rcx
+ mov 16($inp), %rdx
+ adcx %rax, %r9
+ adcx %rcx, %r10
+ adcx %rbp, %r11
+
+ mov %r9, 16(%rsp)
+ .byte 0x4c,0x89,0x94,0x24,0x18,0x00,0x00,0x00 # mov %r10, 24(%rsp)
+
+#third iteration
+ .byte 0xc4,0x62,0xc3,0xf6,0x8e,0x18,0x00,0x00,0x00 # mulx 24($inp), $out, %r9
+ adox $out, %r12
+ adcx %r9, %r13
+
+ mulx 32($inp), %rax, %rcx
+ adox %rax, %r13
+ adcx %rcx, %r14
+
+ mulx 40($inp), $out, %r9
+ adox $out, %r14
+ adcx %r9, %r15
+
+ .byte 0xc4,0xe2,0xfb,0xf6,0x8e,0x30,0x00,0x00,0x00 # mulx 48($inp), %rax, %rcx
+ adox %rax, %r15
+ adcx %rcx, %r8
+
+ .byte 0xc4,0x62,0xc3,0xf6,0x8e,0x38,0x00,0x00,0x00 # mulx 56($inp), $out, %r9
+ adox $out, %r8
+ adcx %rbp, %r9
+ adox %rbp, %r9
+
+ mov %r13, %rcx
+ shld \$1, %r12, %r13
+ shld \$1, %rbx, %r12
+
+ xor %ebp, %ebp
+ mulx %rdx, %rax, %rdx
+ adcx %rax, %r11
+ adcx %rdx, %r12
+ mov 24($inp), %rdx
+ adcx %rbp, %r13
+
+ mov %r11, 32(%rsp)
+ .byte 0x4c,0x89,0xa4,0x24,0x28,0x00,0x00,0x00 # mov %r12, 40(%rsp)
+
+#fourth iteration
+ .byte 0xc4,0xe2,0xfb,0xf6,0x9e,0x20,0x00,0x00,0x00 # mulx 32($inp), %rax, %rbx
+ adox %rax, %r14
+ adcx %rbx, %r15
+
+ mulx 40($inp), $out, %r10
+ adox $out, %r15
+ adcx %r10, %r8
+
+ mulx 48($inp), %rax, %rbx
+ adox %rax, %r8
+ adcx %rbx, %r9
+
+ mulx 56($inp), $out, %r10
+ adox $out, %r9
+ adcx %rbp, %r10
+ adox %rbp, %r10
+
+ .byte 0x66
+ mov %r15, %rbx
+ shld \$1, %r14, %r15
+ shld \$1, %rcx, %r14
+
+ xor %ebp, %ebp
+ mulx %rdx, %rax, %rdx
+ adcx %rax, %r13
+ adcx %rdx, %r14
+ mov 32($inp), %rdx
+ adcx %rbp, %r15
+
+ mov %r13, 48(%rsp)
+ mov %r14, 56(%rsp)
+
+#fifth iteration
+ .byte 0xc4,0x62,0xc3,0xf6,0x9e,0x28,0x00,0x00,0x00 # mulx 40($inp), $out, %r11
+ adox $out, %r8
+ adcx %r11, %r9
+
+ mulx 48($inp), %rax, %rcx
+ adox %rax, %r9
+ adcx %rcx, %r10
+
+ mulx 56($inp), $out, %r11
+ adox $out, %r10
+ adcx %rbp, %r11
+ adox %rbp, %r11
+
+ mov %r9, %rcx
+ shld \$1, %r8, %r9
+ shld \$1, %rbx, %r8
+
+ xor %ebp, %ebp
+ mulx %rdx, %rax, %rdx
+ adcx %rax, %r15
+ adcx %rdx, %r8
+ mov 40($inp), %rdx
+ adcx %rbp, %r9
+
+ mov %r15, 64(%rsp)
+ mov %r8, 72(%rsp)
+
+#sixth iteration
+ .byte 0xc4,0xe2,0xfb,0xf6,0x9e,0x30,0x00,0x00,0x00 # mulx 48($inp), %rax, %rbx
+ adox %rax, %r10
+ adcx %rbx, %r11
+
+ .byte 0xc4,0x62,0xc3,0xf6,0xa6,0x38,0x00,0x00,0x00 # mulx 56($inp), $out, %r12
+ adox $out, %r11
+ adcx %rbp, %r12
+ adox %rbp, %r12
+
+ mov %r11, %rbx
+ shld \$1, %r10, %r11
+ shld \$1, %rcx, %r10
+
+ xor %ebp, %ebp
+ mulx %rdx, %rax, %rdx
+ adcx %rax, %r9
+ adcx %rdx, %r10
+ mov 48($inp), %rdx
+ adcx %rbp, %r11
+
+ mov %r9, 80(%rsp)
+ mov %r10, 88(%rsp)
+
+#seventh iteration
+ .byte 0xc4,0x62,0xfb,0xf6,0xae,0x38,0x00,0x00,0x00 # mulx 56($inp), %rax, %r13
+ adox %rax, %r12
+ adox %rbp, %r13
+
+ xor %r14, %r14
+ shld \$1, %r13, %r14
+ shld \$1, %r12, %r13
+ shld \$1, %rbx, %r12
+
+ xor %ebp, %ebp
+ mulx %rdx, %rax, %rdx
+ adcx %rax, %r11
+ adcx %rdx, %r12
+ mov 56($inp), %rdx
+ adcx %rbp, %r13
+
+ .byte 0x4c,0x89,0x9c,0x24,0x60,0x00,0x00,0x00 # mov %r11, 96(%rsp)
+ .byte 0x4c,0x89,0xa4,0x24,0x68,0x00,0x00,0x00 # mov %r12, 104(%rsp)
+
+#eighth iteration
+ mulx %rdx, %rax, %rdx
+ adox %rax, %r13
+ adox %rbp, %rdx
+
+ .byte 0x66
+ add %rdx, %r14
+
+ movq %r13, 112(%rsp)
+ movq %r14, 120(%rsp)
+ movq %xmm0, $out
+ movq %xmm1, %rbp
+
+ movq 128(%rsp), %rdx # pull $n0
+ movq (%rsp), %r8
+ movq 8(%rsp), %r9
+ movq 16(%rsp), %r10
+ movq 24(%rsp), %r11
+ movq 32(%rsp), %r12
+ movq 40(%rsp), %r13
+ movq 48(%rsp), %r14
+ movq 56(%rsp), %r15
+
+ call __rsaz_512_reducex
+
+ addq 64(%rsp), %r8
+ adcq 72(%rsp), %r9
+ adcq 80(%rsp), %r10
+ adcq 88(%rsp), %r11
+ adcq 96(%rsp), %r12
+ adcq 104(%rsp), %r13
+ adcq 112(%rsp), %r14
+ adcq 120(%rsp), %r15
+ sbbq %rcx, %rcx
+
+ call __rsaz_512_subtract
+
+ movq %r8, %rdx
+ movq %r9, %rax
+ movl 128+8(%rsp), $times
+ movq $out, $inp
+
+ decl $times
+ jnz .Loop_sqrx
+
+.Lsqr_tail:
+___
+}
+$code.=<<___;
+
+ leaq 128+24+48(%rsp), %rax
+ movq -48(%rax), %r15
+ movq -40(%rax), %r14
+ movq -32(%rax), %r13
+ movq -24(%rax), %r12
+ movq -16(%rax), %rbp
+ movq -8(%rax), %rbx
+ leaq (%rax), %rsp
+.Lsqr_epilogue:
+ ret
+.size rsaz_512_sqr,.-rsaz_512_sqr
+___
+}
+{
+my ($out,$ap,$bp,$mod,$n0) = ("%rdi","%rsi","%rdx","%rcx","%r8");
+$code.=<<___;
+.globl rsaz_512_mul
+.type rsaz_512_mul,\@function,5
+.align 32
+rsaz_512_mul:
+ push %rbx
+ push %rbp
+ push %r12
+ push %r13
+ push %r14
+ push %r15
+
+ subq \$128+24, %rsp
+.Lmul_body:
+ movq $out, %xmm0 # off-load arguments
+ movq $mod, %xmm1
+ movq $n0, 128(%rsp)
+___
+$code.=<<___ if ($addx);
+ movl \$0x80100,%r11d
+ andl OPENSSL_ia32cap_P+8(%rip),%r11d
+ cmpl \$0x80100,%r11d # check for MULX and ADO/CX
+ je .Lmulx
+___
+$code.=<<___;
+ movq ($bp), %rbx # pass b[0]
+ movq $bp, %rbp # pass argument
+ call __rsaz_512_mul
+
+ movq %xmm0, $out
+ movq %xmm1, %rbp
+
+ movq (%rsp), %r8
+ movq 8(%rsp), %r9
+ movq 16(%rsp), %r10
+ movq 24(%rsp), %r11
+ movq 32(%rsp), %r12
+ movq 40(%rsp), %r13
+ movq 48(%rsp), %r14
+ movq 56(%rsp), %r15
+
+ call __rsaz_512_reduce
+___
+$code.=<<___ if ($addx);
+ jmp .Lmul_tail
+
+.align 32
+.Lmulx:
+ movq $bp, %rbp # pass argument
+ movq ($bp), %rdx # pass b[0]
+ call __rsaz_512_mulx
+
+ movq %xmm0, $out
+ movq %xmm1, %rbp
+
+ movq 128(%rsp), %rdx # pull $n0
+ movq (%rsp), %r8
+ movq 8(%rsp), %r9
+ movq 16(%rsp), %r10
+ movq 24(%rsp), %r11
+ movq 32(%rsp), %r12
+ movq 40(%rsp), %r13
+ movq 48(%rsp), %r14
+ movq 56(%rsp), %r15
+
+ call __rsaz_512_reducex
+.Lmul_tail:
+___
+$code.=<<___;
+ addq 64(%rsp), %r8
+ adcq 72(%rsp), %r9
+ adcq 80(%rsp), %r10
+ adcq 88(%rsp), %r11
+ adcq 96(%rsp), %r12
+ adcq 104(%rsp), %r13
+ adcq 112(%rsp), %r14
+ adcq 120(%rsp), %r15
+ sbbq %rcx, %rcx
+
+ call __rsaz_512_subtract
+
+ leaq 128+24+48(%rsp), %rax
+ movq -48(%rax), %r15
+ movq -40(%rax), %r14
+ movq -32(%rax), %r13
+ movq -24(%rax), %r12
+ movq -16(%rax), %rbp
+ movq -8(%rax), %rbx
+ leaq (%rax), %rsp
+.Lmul_epilogue:
+ ret
+.size rsaz_512_mul,.-rsaz_512_mul
+___
+}
+{
+my ($out,$ap,$bp,$mod,$n0,$pwr) = ("%rdi","%rsi","%rdx","%rcx","%r8","%r9d");
+$code.=<<___;
+.globl rsaz_512_mul_gather4
+.type rsaz_512_mul_gather4,\@function,6
+.align 32
+rsaz_512_mul_gather4:
+ push %rbx
+ push %rbp
+ push %r12
+ push %r13
+ push %r14
+ push %r15
+
+ mov $pwr, $pwr
+ subq \$128+24, %rsp
+.Lmul_gather4_body:
+___
+$code.=<<___ if ($addx);
+ movl \$0x80100,%r11d
+ andl OPENSSL_ia32cap_P+8(%rip),%r11d
+ cmpl \$0x80100,%r11d # check for MULX and ADO/CX
+ je .Lmulx_gather
+___
+$code.=<<___;
+ movl 64($bp,$pwr,4), %eax
+ movq $out, %xmm0 # off-load arguments
+ movl ($bp,$pwr,4), %ebx
+ movq $mod, %xmm1
+ movq $n0, 128(%rsp)
+
+ shlq \$32, %rax
+ or %rax, %rbx
+ movq ($ap), %rax
+ movq 8($ap), %rcx
+ leaq 128($bp,$pwr,4), %rbp
+ mulq %rbx # 0 iteration
+ movq %rax, (%rsp)
+ movq %rcx, %rax
+ movq %rdx, %r8
+
+ mulq %rbx
+ movd (%rbp), %xmm4
+ addq %rax, %r8
+ movq 16($ap), %rax
+ movq %rdx, %r9
+ adcq \$0, %r9
+
+ mulq %rbx
+ movd 64(%rbp), %xmm5
+ addq %rax, %r9
+ movq 24($ap), %rax
+ movq %rdx, %r10
+ adcq \$0, %r10
+
+ mulq %rbx
+ pslldq \$4, %xmm5
+ addq %rax, %r10
+ movq 32($ap), %rax
+ movq %rdx, %r11
+ adcq \$0, %r11
+
+ mulq %rbx
+ por %xmm5, %xmm4
+ addq %rax, %r11
+ movq 40($ap), %rax
+ movq %rdx, %r12
+ adcq \$0, %r12
+
+ mulq %rbx
+ addq %rax, %r12
+ movq 48($ap), %rax
+ movq %rdx, %r13
+ adcq \$0, %r13
+
+ mulq %rbx
+ leaq 128(%rbp), %rbp
+ addq %rax, %r13
+ movq 56($ap), %rax
+ movq %rdx, %r14
+ adcq \$0, %r14
+
+ mulq %rbx
+ movq %xmm4, %rbx
+ addq %rax, %r14
+ movq ($ap), %rax
+ movq %rdx, %r15
+ adcq \$0, %r15
+
+ leaq 8(%rsp), %rdi
+ movl \$7, %ecx
+ jmp .Loop_mul_gather
+
+.align 32
+.Loop_mul_gather:
+ mulq %rbx
+ addq %rax, %r8
+ movq 8($ap), %rax
+ movq %r8, (%rdi)
+ movq %rdx, %r8
+ adcq \$0, %r8
+
+ mulq %rbx
+ movd (%rbp), %xmm4
+ addq %rax, %r9
+ movq 16($ap), %rax
+ adcq \$0, %rdx
+ addq %r9, %r8
+ movq %rdx, %r9
+ adcq \$0, %r9
+
+ mulq %rbx
+ movd 64(%rbp), %xmm5
+ addq %rax, %r10
+ movq 24($ap), %rax
+ adcq \$0, %rdx
+ addq %r10, %r9
+ movq %rdx, %r10
+ adcq \$0, %r10
+
+ mulq %rbx
+ pslldq \$4, %xmm5
+ addq %rax, %r11
+ movq 32($ap), %rax
+ adcq \$0, %rdx
+ addq %r11, %r10
+ movq %rdx, %r11
+ adcq \$0, %r11
+
+ mulq %rbx
+ por %xmm5, %xmm4
+ addq %rax, %r12
+ movq 40($ap), %rax
+ adcq \$0, %rdx
+ addq %r12, %r11
+ movq %rdx, %r12
+ adcq \$0, %r12
+
+ mulq %rbx
+ addq %rax, %r13
+ movq 48($ap), %rax
+ adcq \$0, %rdx
+ addq %r13, %r12
+ movq %rdx, %r13
+ adcq \$0, %r13
+
+ mulq %rbx
+ addq %rax, %r14
+ movq 56($ap), %rax
+ adcq \$0, %rdx
+ addq %r14, %r13
+ movq %rdx, %r14
+ adcq \$0, %r14
+
+ mulq %rbx
+ movq %xmm4, %rbx
+ addq %rax, %r15
+ movq ($ap), %rax
+ adcq \$0, %rdx
+ addq %r15, %r14
+ movq %rdx, %r15
+ adcq \$0, %r15
+
+ leaq 128(%rbp), %rbp
+ leaq 8(%rdi), %rdi
+
+ decl %ecx
+ jnz .Loop_mul_gather
+
+ movq %r8, (%rdi)
+ movq %r9, 8(%rdi)
+ movq %r10, 16(%rdi)
+ movq %r11, 24(%rdi)
+ movq %r12, 32(%rdi)
+ movq %r13, 40(%rdi)
+ movq %r14, 48(%rdi)
+ movq %r15, 56(%rdi)
+
+ movq %xmm0, $out
+ movq %xmm1, %rbp
+
+ movq (%rsp), %r8
+ movq 8(%rsp), %r9
+ movq 16(%rsp), %r10
+ movq 24(%rsp), %r11
+ movq 32(%rsp), %r12
+ movq 40(%rsp), %r13
+ movq 48(%rsp), %r14
+ movq 56(%rsp), %r15
+
+ call __rsaz_512_reduce
+___
+$code.=<<___ if ($addx);
+ jmp .Lmul_gather_tail
+
+.align 32
+.Lmulx_gather:
+ mov 64($bp,$pwr,4), %eax
+ movq $out, %xmm0 # off-load arguments
+ lea 128($bp,$pwr,4), %rbp
+ mov ($bp,$pwr,4), %edx
+ movq $mod, %xmm1
+ mov $n0, 128(%rsp)
+
+ shl \$32, %rax
+ or %rax, %rdx
+ mulx ($ap), %rbx, %r8 # 0 iteration
+ mov %rbx, (%rsp)
+ xor %edi, %edi # cf=0, of=0
+
+ mulx 8($ap), %rax, %r9
+ movd (%rbp), %xmm4
+
+ mulx 16($ap), %rbx, %r10
+ movd 64(%rbp), %xmm5
+ adcx %rax, %r8
+
+ mulx 24($ap), %rax, %r11
+ pslldq \$4, %xmm5
+ adcx %rbx, %r9
+
+ mulx 32($ap), %rbx, %r12
+ por %xmm5, %xmm4
+ adcx %rax, %r10
+
+ mulx 40($ap), %rax, %r13
+ adcx %rbx, %r11
+
+ mulx 48($ap), %rbx, %r14
+ lea 128(%rbp), %rbp
+ adcx %rax, %r12
+
+ mulx 56($ap), %rax, %r15
+ movq %xmm4, %rdx
+ adcx %rbx, %r13
+ adcx %rax, %r14
+ mov %r8, %rbx
+ adcx %rdi, %r15 # %rdi is 0
+
+ mov \$-7, %rcx
+ jmp .Loop_mulx_gather
+
+.align 32
+.Loop_mulx_gather:
+ mulx ($ap), %rax, %r8
+ adcx %rax, %rbx
+ adox %r9, %r8
+
+ mulx 8($ap), %rax, %r9
+ .byte 0x66,0x0f,0x6e,0xa5,0x00,0x00,0x00,0x00 # movd (%rbp), %xmm4
+ adcx %rax, %r8
+ adox %r10, %r9
+
+ mulx 16($ap), %rax, %r10
+ movd 64(%rbp), %xmm5
+ lea 128(%rbp), %rbp
+ adcx %rax, %r9
+ adox %r11, %r10
+
+ .byte 0xc4,0x62,0xfb,0xf6,0x9e,0x18,0x00,0x00,0x00 # mulx 24($ap), %rax, %r11
+ pslldq \$4, %xmm5
+ por %xmm5, %xmm4
+ adcx %rax, %r10
+ adox %r12, %r11
+
+ mulx 32($ap), %rax, %r12
+ adcx %rax, %r11
+ adox %r13, %r12
+
+ mulx 40($ap), %rax, %r13
+ adcx %rax, %r12
+ adox %r14, %r13
+
+ .byte 0xc4,0x62,0xfb,0xf6,0xb6,0x30,0x00,0x00,0x00 # mulx 48($ap), %rax, %r14
+ adcx %rax, %r13
+ adox %r15, %r14
+
+ mulx 56($ap), %rax, %r15
+ movq %xmm4, %rdx
+ mov %rbx, 64(%rsp,%rcx,8)
+ adcx %rax, %r14
+ adox %rdi, %r15
+ mov %r8, %rbx
+ adcx %rdi, %r15 # cf=0
+
+ inc %rcx # of=0
+ jnz .Loop_mulx_gather
+
+ mov %r8, 64(%rsp)
+ mov %r9, 64+8(%rsp)
+ mov %r10, 64+16(%rsp)
+ mov %r11, 64+24(%rsp)
+ mov %r12, 64+32(%rsp)
+ mov %r13, 64+40(%rsp)
+ mov %r14, 64+48(%rsp)
+ mov %r15, 64+56(%rsp)
+
+ movq %xmm0, $out
+ movq %xmm1, %rbp
+
+ mov 128(%rsp), %rdx # pull $n0
+ mov (%rsp), %r8
+ mov 8(%rsp), %r9
+ mov 16(%rsp), %r10
+ mov 24(%rsp), %r11
+ mov 32(%rsp), %r12
+ mov 40(%rsp), %r13
+ mov 48(%rsp), %r14
+ mov 56(%rsp), %r15
+
+ call __rsaz_512_reducex
+
+.Lmul_gather_tail:
+___
+$code.=<<___;
+ addq 64(%rsp), %r8
+ adcq 72(%rsp), %r9
+ adcq 80(%rsp), %r10
+ adcq 88(%rsp), %r11
+ adcq 96(%rsp), %r12
+ adcq 104(%rsp), %r13
+ adcq 112(%rsp), %r14
+ adcq 120(%rsp), %r15
+ sbbq %rcx, %rcx
+
+ call __rsaz_512_subtract
+
+ leaq 128+24+48(%rsp), %rax
+ movq -48(%rax), %r15
+ movq -40(%rax), %r14
+ movq -32(%rax), %r13
+ movq -24(%rax), %r12
+ movq -16(%rax), %rbp
+ movq -8(%rax), %rbx
+ leaq (%rax), %rsp
+.Lmul_gather4_epilogue:
+ ret
+.size rsaz_512_mul_gather4,.-rsaz_512_mul_gather4
+___
+}
+{
+my ($out,$ap,$mod,$n0,$tbl,$pwr) = ("%rdi","%rsi","%rdx","%rcx","%r8","%r9d");
+$code.=<<___;
+.globl rsaz_512_mul_scatter4
+.type rsaz_512_mul_scatter4,\@function,6
+.align 32
+rsaz_512_mul_scatter4:
+ push %rbx
+ push %rbp
+ push %r12
+ push %r13
+ push %r14
+ push %r15
+
+ mov $pwr, $pwr
+ subq \$128+24, %rsp
+.Lmul_scatter4_body:
+ leaq ($tbl,$pwr,4), $tbl
+ movq $out, %xmm0 # off-load arguments
+ movq $mod, %xmm1
+ movq $tbl, %xmm2
+ movq $n0, 128(%rsp)
+
+ movq $out, %rbp
+___
+$code.=<<___ if ($addx);
+ movl \$0x80100,%r11d
+ andl OPENSSL_ia32cap_P+8(%rip),%r11d
+ cmpl \$0x80100,%r11d # check for MULX and ADO/CX
+ je .Lmulx_scatter
+___
+$code.=<<___;
+ movq ($out),%rbx # pass b[0]
+ call __rsaz_512_mul
+
+ movq %xmm0, $out
+ movq %xmm1, %rbp
+
+ movq (%rsp), %r8
+ movq 8(%rsp), %r9
+ movq 16(%rsp), %r10
+ movq 24(%rsp), %r11
+ movq 32(%rsp), %r12
+ movq 40(%rsp), %r13
+ movq 48(%rsp), %r14
+ movq 56(%rsp), %r15
+
+ call __rsaz_512_reduce
+___
+$code.=<<___ if ($addx);
+ jmp .Lmul_scatter_tail
+
+.align 32
+.Lmulx_scatter:
+ movq ($out), %rdx # pass b[0]
+ call __rsaz_512_mulx
+
+ movq %xmm0, $out
+ movq %xmm1, %rbp
+
+ movq 128(%rsp), %rdx # pull $n0
+ movq (%rsp), %r8
+ movq 8(%rsp), %r9
+ movq 16(%rsp), %r10
+ movq 24(%rsp), %r11
+ movq 32(%rsp), %r12
+ movq 40(%rsp), %r13
+ movq 48(%rsp), %r14
+ movq 56(%rsp), %r15
+
+ call __rsaz_512_reducex
+
+.Lmul_scatter_tail:
+___
+$code.=<<___;
+ addq 64(%rsp), %r8
+ adcq 72(%rsp), %r9
+ adcq 80(%rsp), %r10
+ adcq 88(%rsp), %r11
+ adcq 96(%rsp), %r12
+ adcq 104(%rsp), %r13
+ adcq 112(%rsp), %r14
+ adcq 120(%rsp), %r15
+ movq %xmm2, $inp
+ sbbq %rcx, %rcx
+
+ call __rsaz_512_subtract
+
+ movl %r8d, 64*0($inp) # scatter
+ shrq \$32, %r8
+ movl %r9d, 64*2($inp)
+ shrq \$32, %r9
+ movl %r10d, 64*4($inp)
+ shrq \$32, %r10
+ movl %r11d, 64*6($inp)
+ shrq \$32, %r11
+ movl %r12d, 64*8($inp)
+ shrq \$32, %r12
+ movl %r13d, 64*10($inp)
+ shrq \$32, %r13
+ movl %r14d, 64*12($inp)
+ shrq \$32, %r14
+ movl %r15d, 64*14($inp)
+ shrq \$32, %r15
+ movl %r8d, 64*1($inp)
+ movl %r9d, 64*3($inp)
+ movl %r10d, 64*5($inp)
+ movl %r11d, 64*7($inp)
+ movl %r12d, 64*9($inp)
+ movl %r13d, 64*11($inp)
+ movl %r14d, 64*13($inp)
+ movl %r15d, 64*15($inp)
+
+ leaq 128+24+48(%rsp), %rax
+ movq -48(%rax), %r15
+ movq -40(%rax), %r14
+ movq -32(%rax), %r13
+ movq -24(%rax), %r12
+ movq -16(%rax), %rbp
+ movq -8(%rax), %rbx
+ leaq (%rax), %rsp
+.Lmul_scatter4_epilogue:
+ ret
+.size rsaz_512_mul_scatter4,.-rsaz_512_mul_scatter4
+___
+}
+{
+my ($out,$inp,$mod,$n0) = ("%rdi","%rsi","%rdx","%rcx");
+$code.=<<___;
+.globl rsaz_512_mul_by_one
+.type rsaz_512_mul_by_one,\@function,4
+.align 32
+rsaz_512_mul_by_one:
+ push %rbx
+ push %rbp
+ push %r12
+ push %r13
+ push %r14
+ push %r15
+
+ subq \$128+24, %rsp
+.Lmul_by_one_body:
+___
+$code.=<<___ if ($addx);
+ movl OPENSSL_ia32cap_P+8(%rip),%eax
+___
+$code.=<<___;
+ movq $mod, %rbp # reassign argument
+ movq $n0, 128(%rsp)
+
+ movq ($inp), %r8
+ pxor %xmm0, %xmm0
+ movq 8($inp), %r9
+ movq 16($inp), %r10
+ movq 24($inp), %r11
+ movq 32($inp), %r12
+ movq 40($inp), %r13
+ movq 48($inp), %r14
+ movq 56($inp), %r15
+
+ movdqa %xmm0, (%rsp)
+ movdqa %xmm0, 16(%rsp)
+ movdqa %xmm0, 32(%rsp)
+ movdqa %xmm0, 48(%rsp)
+ movdqa %xmm0, 64(%rsp)
+ movdqa %xmm0, 80(%rsp)
+ movdqa %xmm0, 96(%rsp)
+___
+$code.=<<___ if ($addx);
+ andl \$0x80100,%eax
+ cmpl \$0x80100,%eax # check for MULX and ADO/CX
+ je .Lby_one_callx
+___
+$code.=<<___;
+ call __rsaz_512_reduce
+___
+$code.=<<___ if ($addx);
+ jmp .Lby_one_tail
+.align 32
+.Lby_one_callx:
+ movq 128(%rsp), %rdx # pull $n0
+ call __rsaz_512_reducex
+.Lby_one_tail:
+___
+$code.=<<___;
+ movq %r8, ($out)
+ movq %r9, 8($out)
+ movq %r10, 16($out)
+ movq %r11, 24($out)
+ movq %r12, 32($out)
+ movq %r13, 40($out)
+ movq %r14, 48($out)
+ movq %r15, 56($out)
+
+ leaq 128+24+48(%rsp), %rax
+ movq -48(%rax), %r15
+ movq -40(%rax), %r14
+ movq -32(%rax), %r13
+ movq -24(%rax), %r12
+ movq -16(%rax), %rbp
+ movq -8(%rax), %rbx
+ leaq (%rax), %rsp
+.Lmul_by_one_epilogue:
+ ret
+.size rsaz_512_mul_by_one,.-rsaz_512_mul_by_one
+___
+}
+{ # __rsaz_512_reduce
+ #
+ # input: %r8-%r15, %rbp - mod, 128(%rsp) - n0
+ # output: %r8-%r15
+ # clobbers: everything except %rbp and %rdi
+$code.=<<___;
+.type __rsaz_512_reduce,\@abi-omnipotent
+.align 32
+__rsaz_512_reduce:
+ movq %r8, %rbx
+ imulq 128+8(%rsp), %rbx
+ movq 0(%rbp), %rax
+ movl \$8, %ecx
+ jmp .Lreduction_loop
+
+.align 32
+.Lreduction_loop:
+ mulq %rbx
+ movq 8(%rbp), %rax
+ negq %r8
+ movq %rdx, %r8
+ adcq \$0, %r8
+
+ mulq %rbx
+ addq %rax, %r9
+ movq 16(%rbp), %rax
+ adcq \$0, %rdx
+ addq %r9, %r8
+ movq %rdx, %r9
+ adcq \$0, %r9
+
+ mulq %rbx
+ addq %rax, %r10
+ movq 24(%rbp), %rax
+ adcq \$0, %rdx
+ addq %r10, %r9
+ movq %rdx, %r10
+ adcq \$0, %r10
+
+ mulq %rbx
+ addq %rax, %r11
+ movq 32(%rbp), %rax
+ adcq \$0, %rdx
+ addq %r11, %r10
+ movq 128+8(%rsp), %rsi
+ #movq %rdx, %r11
+ #adcq \$0, %r11
+ adcq \$0, %rdx
+ movq %rdx, %r11
+
+ mulq %rbx
+ addq %rax, %r12
+ movq 40(%rbp), %rax
+ adcq \$0, %rdx
+ imulq %r8, %rsi
+ addq %r12, %r11
+ movq %rdx, %r12
+ adcq \$0, %r12
+
+ mulq %rbx
+ addq %rax, %r13
+ movq 48(%rbp), %rax
+ adcq \$0, %rdx
+ addq %r13, %r12
+ movq %rdx, %r13
+ adcq \$0, %r13
+
+ mulq %rbx
+ addq %rax, %r14
+ movq 56(%rbp), %rax
+ adcq \$0, %rdx
+ addq %r14, %r13
+ movq %rdx, %r14
+ adcq \$0, %r14
+
+ mulq %rbx
+ movq %rsi, %rbx
+ addq %rax, %r15
+ movq 0(%rbp), %rax
+ adcq \$0, %rdx
+ addq %r15, %r14
+ movq %rdx, %r15
+ adcq \$0, %r15
+
+ decl %ecx
+ jne .Lreduction_loop
+
+ ret
+.size __rsaz_512_reduce,.-__rsaz_512_reduce
+___
+}
+if ($addx) {
+ # __rsaz_512_reducex
+ #
+ # input: %r8-%r15, %rbp - mod, 128(%rsp) - n0
+ # output: %r8-%r15
+ # clobbers: everything except %rbp and %rdi
+$code.=<<___;
+.type __rsaz_512_reducex,\@abi-omnipotent
+.align 32
+__rsaz_512_reducex:
+ #movq 128+8(%rsp), %rdx # pull $n0
+ imulq %r8, %rdx
+ xorq %rsi, %rsi # cf=0,of=0
+ movl \$8, %ecx
+ jmp .Lreduction_loopx
+
+.align 32
+.Lreduction_loopx:
+ mov %r8, %rbx
+ mulx 0(%rbp), %rax, %r8
+ adcx %rbx, %rax
+ adox %r9, %r8
+
+ mulx 8(%rbp), %rax, %r9
+ adcx %rax, %r8
+ adox %r10, %r9
+
+ mulx 16(%rbp), %rbx, %r10
+ adcx %rbx, %r9
+ adox %r11, %r10
+
+ mulx 24(%rbp), %rbx, %r11
+ adcx %rbx, %r10
+ adox %r12, %r11
+
+ .byte 0xc4,0x62,0xe3,0xf6,0xa5,0x20,0x00,0x00,0x00 # mulx 32(%rbp), %rbx, %r12
+ mov %rdx, %rax
+ mov %r8, %rdx
+ adcx %rbx, %r11
+ adox %r13, %r12
+
+ mulx 128+8(%rsp), %rbx, %rdx
+ mov %rax, %rdx
+
+ mulx 40(%rbp), %rax, %r13
+ adcx %rax, %r12
+ adox %r14, %r13
+
+ .byte 0xc4,0x62,0xfb,0xf6,0xb5,0x30,0x00,0x00,0x00 # mulx 48(%rbp), %rax, %r14
+ adcx %rax, %r13
+ adox %r15, %r14
+
+ mulx 56(%rbp), %rax, %r15
+ mov %rbx, %rdx
+ adcx %rax, %r14
+ adox %rsi, %r15 # %rsi is 0
+ adcx %rsi, %r15 # cf=0
+
+ decl %ecx # of=0
+ jne .Lreduction_loopx
+
+ ret
+.size __rsaz_512_reducex,.-__rsaz_512_reducex
+___
+}
+{ # __rsaz_512_subtract
+ # input: %r8-%r15, %rdi - $out, %rbp - $mod, %rcx - mask
+ # output:
+ # clobbers: everything but %rdi, %rsi and %rbp
+$code.=<<___;
+.type __rsaz_512_subtract,\@abi-omnipotent
+.align 32
+__rsaz_512_subtract:
+ movq %r8, ($out)
+ movq %r9, 8($out)
+ movq %r10, 16($out)
+ movq %r11, 24($out)
+ movq %r12, 32($out)
+ movq %r13, 40($out)
+ movq %r14, 48($out)
+ movq %r15, 56($out)
+
+ movq 0($mod), %r8
+ movq 8($mod), %r9
+ negq %r8
+ notq %r9
+ andq %rcx, %r8
+ movq 16($mod), %r10
+ andq %rcx, %r9
+ notq %r10
+ movq 24($mod), %r11
+ andq %rcx, %r10
+ notq %r11
+ movq 32($mod), %r12
+ andq %rcx, %r11
+ notq %r12
+ movq 40($mod), %r13
+ andq %rcx, %r12
+ notq %r13
+ movq 48($mod), %r14
+ andq %rcx, %r13
+ notq %r14
+ movq 56($mod), %r15
+ andq %rcx, %r14
+ notq %r15
+ andq %rcx, %r15
+
+ addq ($out), %r8
+ adcq 8($out), %r9
+ adcq 16($out), %r10
+ adcq 24($out), %r11
+ adcq 32($out), %r12
+ adcq 40($out), %r13
+ adcq 48($out), %r14
+ adcq 56($out), %r15
+
+ movq %r8, ($out)
+ movq %r9, 8($out)
+ movq %r10, 16($out)
+ movq %r11, 24($out)
+ movq %r12, 32($out)
+ movq %r13, 40($out)
+ movq %r14, 48($out)
+ movq %r15, 56($out)
+
+ ret
+.size __rsaz_512_subtract,.-__rsaz_512_subtract
+___
+}
+{ # __rsaz_512_mul
+ #
+ # input: %rsi - ap, %rbp - bp
+ # ouput:
+ # clobbers: everything
+my ($ap,$bp) = ("%rsi","%rbp");
+$code.=<<___;
+.type __rsaz_512_mul,\@abi-omnipotent
+.align 32
+__rsaz_512_mul:
+ leaq 8(%rsp), %rdi
+
+ movq ($ap), %rax
+ mulq %rbx
+ movq %rax, (%rdi)
+ movq 8($ap), %rax
+ movq %rdx, %r8
+
+ mulq %rbx
+ addq %rax, %r8
+ movq 16($ap), %rax
+ movq %rdx, %r9
+ adcq \$0, %r9
+
+ mulq %rbx
+ addq %rax, %r9
+ movq 24($ap), %rax
+ movq %rdx, %r10
+ adcq \$0, %r10
+
+ mulq %rbx
+ addq %rax, %r10
+ movq 32($ap), %rax
+ movq %rdx, %r11
+ adcq \$0, %r11
+
+ mulq %rbx
+ addq %rax, %r11
+ movq 40($ap), %rax
+ movq %rdx, %r12
+ adcq \$0, %r12
+
+ mulq %rbx
+ addq %rax, %r12
+ movq 48($ap), %rax
+ movq %rdx, %r13
+ adcq \$0, %r13
+
+ mulq %rbx
+ addq %rax, %r13
+ movq 56($ap), %rax
+ movq %rdx, %r14
+ adcq \$0, %r14
+
+ mulq %rbx
+ addq %rax, %r14
+ movq ($ap), %rax
+ movq %rdx, %r15
+ adcq \$0, %r15
+
+ leaq 8($bp), $bp
+ leaq 8(%rdi), %rdi
+
+ movl \$7, %ecx
+ jmp .Loop_mul
+
+.align 32
+.Loop_mul:
+ movq ($bp), %rbx
+ mulq %rbx
+ addq %rax, %r8
+ movq 8($ap), %rax
+ movq %r8, (%rdi)
+ movq %rdx, %r8
+ adcq \$0, %r8
+
+ mulq %rbx
+ addq %rax, %r9
+ movq 16($ap), %rax
+ adcq \$0, %rdx
+ addq %r9, %r8
+ movq %rdx, %r9
+ adcq \$0, %r9
+
+ mulq %rbx
+ addq %rax, %r10
+ movq 24($ap), %rax
+ adcq \$0, %rdx
+ addq %r10, %r9
+ movq %rdx, %r10
+ adcq \$0, %r10
+
+ mulq %rbx
+ addq %rax, %r11
+ movq 32($ap), %rax
+ adcq \$0, %rdx
+ addq %r11, %r10
+ movq %rdx, %r11
+ adcq \$0, %r11
+
+ mulq %rbx
+ addq %rax, %r12
+ movq 40($ap), %rax
+ adcq \$0, %rdx
+ addq %r12, %r11
+ movq %rdx, %r12
+ adcq \$0, %r12
+
+ mulq %rbx
+ addq %rax, %r13
+ movq 48($ap), %rax
+ adcq \$0, %rdx
+ addq %r13, %r12
+ movq %rdx, %r13
+ adcq \$0, %r13
+
+ mulq %rbx
+ addq %rax, %r14
+ movq 56($ap), %rax
+ adcq \$0, %rdx
+ addq %r14, %r13
+ movq %rdx, %r14
+ leaq 8($bp), $bp
+ adcq \$0, %r14
+
+ mulq %rbx
+ addq %rax, %r15
+ movq ($ap), %rax
+ adcq \$0, %rdx
+ addq %r15, %r14
+ movq %rdx, %r15
+ adcq \$0, %r15
+
+ leaq 8(%rdi), %rdi
+
+ decl %ecx
+ jnz .Loop_mul
+
+ movq %r8, (%rdi)
+ movq %r9, 8(%rdi)
+ movq %r10, 16(%rdi)
+ movq %r11, 24(%rdi)
+ movq %r12, 32(%rdi)
+ movq %r13, 40(%rdi)
+ movq %r14, 48(%rdi)
+ movq %r15, 56(%rdi)
+
+ ret
+.size __rsaz_512_mul,.-__rsaz_512_mul
+___
+}
+if ($addx) {
+ # __rsaz_512_mulx
+ #
+ # input: %rsi - ap, %rbp - bp
+ # ouput:
+ # clobbers: everything
+my ($ap,$bp,$zero) = ("%rsi","%rbp","%rdi");
+$code.=<<___;
+.type __rsaz_512_mulx,\@abi-omnipotent
+.align 32
+__rsaz_512_mulx:
+ mulx ($ap), %rbx, %r8 # initial %rdx preloaded by caller
+ mov \$-6, %rcx
+
+ mulx 8($ap), %rax, %r9
+ movq %rbx, 8(%rsp)
+
+ mulx 16($ap), %rbx, %r10
+ adc %rax, %r8
+
+ mulx 24($ap), %rax, %r11
+ adc %rbx, %r9
+
+ mulx 32($ap), %rbx, %r12
+ adc %rax, %r10
+
+ mulx 40($ap), %rax, %r13
+ adc %rbx, %r11
+
+ mulx 48($ap), %rbx, %r14
+ adc %rax, %r12
+
+ mulx 56($ap), %rax, %r15
+ mov 8($bp), %rdx
+ adc %rbx, %r13
+ adc %rax, %r14
+ adc \$0, %r15
+
+ xor $zero, $zero # cf=0,of=0
+ jmp .Loop_mulx
+
+.align 32
+.Loop_mulx:
+ movq %r8, %rbx
+ mulx ($ap), %rax, %r8
+ adcx %rax, %rbx
+ adox %r9, %r8
+
+ mulx 8($ap), %rax, %r9
+ adcx %rax, %r8
+ adox %r10, %r9
+
+ mulx 16($ap), %rax, %r10
+ adcx %rax, %r9
+ adox %r11, %r10
+
+ mulx 24($ap), %rax, %r11
+ adcx %rax, %r10
+ adox %r12, %r11
+
+ .byte 0x3e,0xc4,0x62,0xfb,0xf6,0xa6,0x20,0x00,0x00,0x00 # mulx 32($ap), %rax, %r12
+ adcx %rax, %r11
+ adox %r13, %r12
+
+ mulx 40($ap), %rax, %r13
+ adcx %rax, %r12
+ adox %r14, %r13
+
+ mulx 48($ap), %rax, %r14
+ adcx %rax, %r13
+ adox %r15, %r14
+
+ mulx 56($ap), %rax, %r15
+ movq 64($bp,%rcx,8), %rdx
+ movq %rbx, 8+64-8(%rsp,%rcx,8)
+ adcx %rax, %r14
+ adox $zero, %r15
+ adcx $zero, %r15 # cf=0
+
+ inc %rcx # of=0
+ jnz .Loop_mulx
+
+ movq %r8, %rbx
+ mulx ($ap), %rax, %r8
+ adcx %rax, %rbx
+ adox %r9, %r8
+
+ .byte 0xc4,0x62,0xfb,0xf6,0x8e,0x08,0x00,0x00,0x00 # mulx 8($ap), %rax, %r9
+ adcx %rax, %r8
+ adox %r10, %r9
+
+ .byte 0xc4,0x62,0xfb,0xf6,0x96,0x10,0x00,0x00,0x00 # mulx 16($ap), %rax, %r10
+ adcx %rax, %r9
+ adox %r11, %r10
+
+ mulx 24($ap), %rax, %r11
+ adcx %rax, %r10
+ adox %r12, %r11
+
+ mulx 32($ap), %rax, %r12
+ adcx %rax, %r11
+ adox %r13, %r12
+
+ mulx 40($ap), %rax, %r13
+ adcx %rax, %r12
+ adox %r14, %r13
+
+ .byte 0xc4,0x62,0xfb,0xf6,0xb6,0x30,0x00,0x00,0x00 # mulx 48($ap), %rax, %r14
+ adcx %rax, %r13
+ adox %r15, %r14
+
+ .byte 0xc4,0x62,0xfb,0xf6,0xbe,0x38,0x00,0x00,0x00 # mulx 56($ap), %rax, %r15
+ adcx %rax, %r14
+ adox $zero, %r15
+ adcx $zero, %r15
+
+ mov %rbx, 8+64-8(%rsp)
+ mov %r8, 8+64(%rsp)
+ mov %r9, 8+64+8(%rsp)
+ mov %r10, 8+64+16(%rsp)
+ mov %r11, 8+64+24(%rsp)
+ mov %r12, 8+64+32(%rsp)
+ mov %r13, 8+64+40(%rsp)
+ mov %r14, 8+64+48(%rsp)
+ mov %r15, 8+64+56(%rsp)
+
+ ret
+.size __rsaz_512_mulx,.-__rsaz_512_mulx
+___
+}
+{
+my ($out,$inp,$power)= $win64 ? ("%rcx","%rdx","%r8d") : ("%rdi","%rsi","%edx");
+$code.=<<___;
+.globl rsaz_512_scatter4
+.type rsaz_512_scatter4,\@abi-omnipotent
+.align 16
+rsaz_512_scatter4:
+ leaq ($out,$power,4), $out
+ movl \$8, %r9d
+ jmp .Loop_scatter
+.align 16
+.Loop_scatter:
+ movq ($inp), %rax
+ leaq 8($inp), $inp
+ movl %eax, ($out)
+ shrq \$32, %rax
+ movl %eax, 64($out)
+ leaq 128($out), $out
+ decl %r9d
+ jnz .Loop_scatter
+ ret
+.size rsaz_512_scatter4,.-rsaz_512_scatter4
+
+.globl rsaz_512_gather4
+.type rsaz_512_gather4,\@abi-omnipotent
+.align 16
+rsaz_512_gather4:
+ leaq ($inp,$power,4), $inp
+ movl \$8, %r9d
+ jmp .Loop_gather
+.align 16
+.Loop_gather:
+ movl ($inp), %eax
+ movl 64($inp), %r8d
+ leaq 128($inp), $inp
+ shlq \$32, %r8
+ or %r8, %rax
+ movq %rax, ($out)
+ leaq 8($out), $out
+ decl %r9d
+ jnz .Loop_gather
+ ret
+.size rsaz_512_gather4,.-rsaz_512_gather4
+___
+}
+
+# EXCEPTION_DISPOSITION handler (EXCEPTION_RECORD *rec,ULONG64 frame,
+# CONTEXT *context,DISPATCHER_CONTEXT *disp)
+if ($win64) {
+$rec="%rcx";
+$frame="%rdx";
+$context="%r8";
+$disp="%r9";
+
+$code.=<<___;
+.extern __imp_RtlVirtualUnwind
+.type se_handler,\@abi-omnipotent
+.align 16
+se_handler:
+ push %rsi
+ push %rdi
+ push %rbx
+ push %rbp
+ push %r12
+ push %r13
+ push %r14
+ push %r15
+ pushfq
+ sub \$64,%rsp
+
+ mov 120($context),%rax # pull context->Rax
+ mov 248($context),%rbx # pull context->Rip
+
+ mov 8($disp),%rsi # disp->ImageBase
+ mov 56($disp),%r11 # disp->HandlerData
+
+ mov 0(%r11),%r10d # HandlerData[0]
+ lea (%rsi,%r10),%r10 # end of prologue label
+ cmp %r10,%rbx # context->Rip<end of prologue label
+ jb .Lcommon_seh_tail
+
+ mov 152($context),%rax # pull context->Rsp
+
+ mov 4(%r11),%r10d # HandlerData[1]
+ lea (%rsi,%r10),%r10 # epilogue label
+ cmp %r10,%rbx # context->Rip>=epilogue label
+ jae .Lcommon_seh_tail
+
+ lea 128+24+48(%rax),%rax
+
+ mov -8(%rax),%rbx
+ mov -16(%rax),%rbp
+ mov -24(%rax),%r12
+ mov -32(%rax),%r13
+ mov -40(%rax),%r14
+ mov -48(%rax),%r15
+ mov %rbx,144($context) # restore context->Rbx
+ mov %rbp,160($context) # restore context->Rbp
+ mov %r12,216($context) # restore context->R12
+ mov %r13,224($context) # restore context->R13
+ mov %r14,232($context) # restore context->R14
+ mov %r15,240($context) # restore context->R15
+
+.Lcommon_seh_tail:
+ mov 8(%rax),%rdi
+ mov 16(%rax),%rsi
+ mov %rax,152($context) # restore context->Rsp
+ mov %rsi,168($context) # restore context->Rsi
+ mov %rdi,176($context) # restore context->Rdi
+
+ mov 40($disp),%rdi # disp->ContextRecord
+ mov $context,%rsi # context
+ mov \$154,%ecx # sizeof(CONTEXT)
+ .long 0xa548f3fc # cld; rep movsq
+
+ mov $disp,%rsi
+ xor %rcx,%rcx # arg1, UNW_FLAG_NHANDLER
+ mov 8(%rsi),%rdx # arg2, disp->ImageBase
+ mov 0(%rsi),%r8 # arg3, disp->ControlPc
+ mov 16(%rsi),%r9 # arg4, disp->FunctionEntry
+ mov 40(%rsi),%r10 # disp->ContextRecord
+ lea 56(%rsi),%r11 # &disp->HandlerData
+ lea 24(%rsi),%r12 # &disp->EstablisherFrame
+ mov %r10,32(%rsp) # arg5
+ mov %r11,40(%rsp) # arg6
+ mov %r12,48(%rsp) # arg7
+ mov %rcx,56(%rsp) # arg8, (NULL)
+ call *__imp_RtlVirtualUnwind(%rip)
+
+ mov \$1,%eax # ExceptionContinueSearch
+ add \$64,%rsp
+ popfq
+ pop %r15
+ pop %r14
+ pop %r13
+ pop %r12
+ pop %rbp
+ pop %rbx
+ pop %rdi
+ pop %rsi
+ ret
+.size sqr_handler,.-sqr_handler
+
+.section .pdata
+.align 4
+ .rva .LSEH_begin_rsaz_512_sqr
+ .rva .LSEH_end_rsaz_512_sqr
+ .rva .LSEH_info_rsaz_512_sqr
+
+ .rva .LSEH_begin_rsaz_512_mul
+ .rva .LSEH_end_rsaz_512_mul
+ .rva .LSEH_info_rsaz_512_mul
+
+ .rva .LSEH_begin_rsaz_512_mul_gather4
+ .rva .LSEH_end_rsaz_512_mul_gather4
+ .rva .LSEH_info_rsaz_512_mul_gather4
+
+ .rva .LSEH_begin_rsaz_512_mul_scatter4
+ .rva .LSEH_end_rsaz_512_mul_scatter4
+ .rva .LSEH_info_rsaz_512_mul_scatter4
+
+ .rva .LSEH_begin_rsaz_512_mul_by_one
+ .rva .LSEH_end_rsaz_512_mul_by_one
+ .rva .LSEH_info_rsaz_512_mul_by_one
+
+.section .xdata
+.align 8
+.LSEH_info_rsaz_512_sqr:
+ .byte 9,0,0,0
+ .rva se_handler
+ .rva .Lsqr_body,.Lsqr_epilogue # HandlerData[]
+.LSEH_info_rsaz_512_mul:
+ .byte 9,0,0,0
+ .rva se_handler
+ .rva .Lmul_body,.Lmul_epilogue # HandlerData[]
+.LSEH_info_rsaz_512_mul_gather4:
+ .byte 9,0,0,0
+ .rva se_handler
+ .rva .Lmul_gather4_body,.Lmul_gather4_epilogue # HandlerData[]
+.LSEH_info_rsaz_512_mul_scatter4:
+ .byte 9,0,0,0
+ .rva se_handler
+ .rva .Lmul_scatter4_body,.Lmul_scatter4_epilogue # HandlerData[]
+.LSEH_info_rsaz_512_mul_by_one:
+ .byte 9,0,0,0
+ .rva se_handler
+ .rva .Lmul_by_one_body,.Lmul_by_one_epilogue # HandlerData[]
+___
+}
+
+$code =~ s/\`([^\`]*)\`/eval $1/gem;
+print $code;
+close STDOUT;
diff --git a/crypto/openssl/crypto/bn/asm/sparct4-mont.pl b/crypto/openssl/crypto/bn/asm/sparct4-mont.pl
new file mode 100755
index 0000000..71b4500
--- /dev/null
+++ b/crypto/openssl/crypto/bn/asm/sparct4-mont.pl
@@ -0,0 +1,1222 @@
+#!/usr/bin/env perl
+
+# ====================================================================
+# Written by David S. Miller <davem@devemloft.net> and Andy Polyakov
+# <appro@openssl.org>. The module is licensed under 2-clause BSD
+# license. November 2012. All rights reserved.
+# ====================================================================
+
+######################################################################
+# Montgomery squaring-n-multiplication module for SPARC T4.
+#
+# The module consists of three parts:
+#
+# 1) collection of "single-op" subroutines that perform single
+# operation, Montgomery squaring or multiplication, on 512-,
+# 1024-, 1536- and 2048-bit operands;
+# 2) collection of "multi-op" subroutines that perform 5 squaring and
+# 1 multiplication operations on operands of above lengths;
+# 3) fall-back and helper VIS3 subroutines.
+#
+# RSA sign is dominated by multi-op subroutine, while RSA verify and
+# DSA - by single-op. Special note about 4096-bit RSA verify result.
+# Operands are too long for dedicated hardware and it's handled by
+# VIS3 code, which is why you don't see any improvement. It's surely
+# possible to improve it [by deploying 'mpmul' instruction], maybe in
+# the future...
+#
+# Performance improvement.
+#
+# 64-bit process, VIS3:
+# sign verify sign/s verify/s
+# rsa 1024 bits 0.000628s 0.000028s 1592.4 35434.4
+# rsa 2048 bits 0.003282s 0.000106s 304.7 9438.3
+# rsa 4096 bits 0.025866s 0.000340s 38.7 2940.9
+# dsa 1024 bits 0.000301s 0.000332s 3323.7 3013.9
+# dsa 2048 bits 0.001056s 0.001233s 946.9 810.8
+#
+# 64-bit process, this module:
+# sign verify sign/s verify/s
+# rsa 1024 bits 0.000256s 0.000016s 3904.4 61411.9
+# rsa 2048 bits 0.000946s 0.000029s 1056.8 34292.7
+# rsa 4096 bits 0.005061s 0.000340s 197.6 2940.5
+# dsa 1024 bits 0.000176s 0.000195s 5674.7 5130.5
+# dsa 2048 bits 0.000296s 0.000354s 3383.2 2827.6
+#
+######################################################################
+# 32-bit process, VIS3:
+# sign verify sign/s verify/s
+# rsa 1024 bits 0.000665s 0.000028s 1504.8 35233.3
+# rsa 2048 bits 0.003349s 0.000106s 298.6 9433.4
+# rsa 4096 bits 0.025959s 0.000341s 38.5 2934.8
+# dsa 1024 bits 0.000320s 0.000341s 3123.3 2929.6
+# dsa 2048 bits 0.001101s 0.001260s 908.2 793.4
+#
+# 32-bit process, this module:
+# sign verify sign/s verify/s
+# rsa 1024 bits 0.000301s 0.000017s 3317.1 60240.0
+# rsa 2048 bits 0.001034s 0.000030s 966.9 33812.7
+# rsa 4096 bits 0.005244s 0.000341s 190.7 2935.4
+# dsa 1024 bits 0.000201s 0.000205s 4976.1 4879.2
+# dsa 2048 bits 0.000328s 0.000360s 3051.1 2774.2
+#
+# 32-bit code is prone to performance degradation as interrupt rate
+# dispatched to CPU executing the code grows. This is because in
+# standard process of handling interrupt in 32-bit process context
+# upper halves of most integer registers used as input or output are
+# zeroed. This renders result invalid, and operation has to be re-run.
+# If CPU is "bothered" with timer interrupts only, the penalty is
+# hardly measurable. But in order to mitigate this problem for higher
+# interrupt rates contemporary Linux kernel recognizes biased stack
+# even in 32-bit process context and preserves full register contents.
+# See http://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=517ffce4e1a03aea979fe3a18a3dd1761a24fafb
+# for details.
+
+$0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1;
+push(@INC,"${dir}","${dir}../../perlasm");
+require "sparcv9_modes.pl";
+
+$code.=<<___;
+#include "sparc_arch.h"
+
+#ifdef __arch64__
+.register %g2,#scratch
+.register %g3,#scratch
+#endif
+
+.section ".text",#alloc,#execinstr
+
+#ifdef __PIC__
+SPARC_PIC_THUNK(%g1)
+#endif
+___
+
+########################################################################
+# Register layout for mont[mul|sqr] instructions.
+# For details see "Oracle SPARC Architecture 2011" manual at
+# http://www.oracle.com/technetwork/server-storage/sun-sparc-enterprise/documentation/.
+#
+my @R=map("%f".2*$_,(0..11,30,31,12..29));
+my @N=(map("%l$_",(0..7)),map("%o$_",(0..5))); @N=(@N,@N,@N[0..3]);
+my @A=(@N[0..13],@R[14..31]);
+my @B=(map("%i$_",(0..5)),map("%l$_",(0..7))); @B=(@B,@B,map("%o$_",(0..3)));
+
+########################################################################
+# int bn_mul_mont_t4_$NUM(u64 *rp,const u64 *ap,const u64 *bp,
+# const u64 *np,const BN_ULONG *n0);
+#
+sub generate_bn_mul_mont_t4() {
+my $NUM=shift;
+my ($rp,$ap,$bp,$np,$sentinel)=map("%g$_",(1..5));
+
+$code.=<<___;
+.globl bn_mul_mont_t4_$NUM
+.align 32
+bn_mul_mont_t4_$NUM:
+#ifdef __arch64__
+ mov 0,$sentinel
+ mov -128,%g4
+#elif defined(SPARCV9_64BIT_STACK)
+ SPARC_LOAD_ADDRESS_LEAF(OPENSSL_sparcv9cap_P,%g1,%g5)
+ ld [%g1+0],%g1 ! OPENSSL_sparcv9_P[0]
+ mov -2047,%g4
+ and %g1,SPARCV9_64BIT_STACK,%g1
+ movrz %g1,0,%g4
+ mov -1,$sentinel
+ add %g4,-128,%g4
+#else
+ mov -1,$sentinel
+ mov -128,%g4
+#endif
+ sllx $sentinel,32,$sentinel
+ save %sp,%g4,%sp
+#ifndef __arch64__
+ save %sp,-128,%sp ! warm it up
+ save %sp,-128,%sp
+ save %sp,-128,%sp
+ save %sp,-128,%sp
+ save %sp,-128,%sp
+ save %sp,-128,%sp
+ restore
+ restore
+ restore
+ restore
+ restore
+ restore
+#endif
+ and %sp,1,%g4
+ or $sentinel,%fp,%fp
+ or %g4,$sentinel,$sentinel
+
+ ! copy arguments to global registers
+ mov %i0,$rp
+ mov %i1,$ap
+ mov %i2,$bp
+ mov %i3,$np
+ ld [%i4+0],%f1 ! load *n0
+ ld [%i4+4],%f0
+ fsrc2 %f0,%f60
+___
+
+# load ap[$NUM] ########################################################
+$code.=<<___;
+ save %sp,-128,%sp; or $sentinel,%fp,%fp
+___
+for($i=0; $i<14 && $i<$NUM; $i++) {
+my $lo=$i<13?@A[$i+1]:"%o7";
+$code.=<<___;
+ ld [$ap+$i*8+0],$lo
+ ld [$ap+$i*8+4],@A[$i]
+ sllx @A[$i],32,@A[$i]
+ or $lo,@A[$i],@A[$i]
+___
+}
+for(; $i<$NUM; $i++) {
+my ($hi,$lo)=("%f".2*($i%4),"%f".(2*($i%4)+1));
+$code.=<<___;
+ ld [$ap+$i*8+0],$lo
+ ld [$ap+$i*8+4],$hi
+ fsrc2 $hi,@A[$i]
+___
+}
+# load np[$NUM] ########################################################
+$code.=<<___;
+ save %sp,-128,%sp; or $sentinel,%fp,%fp
+___
+for($i=0; $i<14 && $i<$NUM; $i++) {
+my $lo=$i<13?@N[$i+1]:"%o7";
+$code.=<<___;
+ ld [$np+$i*8+0],$lo
+ ld [$np+$i*8+4],@N[$i]
+ sllx @N[$i],32,@N[$i]
+ or $lo,@N[$i],@N[$i]
+___
+}
+$code.=<<___;
+ save %sp,-128,%sp; or $sentinel,%fp,%fp
+___
+for(; $i<28 && $i<$NUM; $i++) {
+my $lo=$i<27?@N[$i+1]:"%o7";
+$code.=<<___;
+ ld [$np+$i*8+0],$lo
+ ld [$np+$i*8+4],@N[$i]
+ sllx @N[$i],32,@N[$i]
+ or $lo,@N[$i],@N[$i]
+___
+}
+$code.=<<___;
+ save %sp,-128,%sp; or $sentinel,%fp,%fp
+___
+for(; $i<$NUM; $i++) {
+my $lo=($i<$NUM-1)?@N[$i+1]:"%o7";
+$code.=<<___;
+ ld [$np+$i*8+0],$lo
+ ld [$np+$i*8+4],@N[$i]
+ sllx @N[$i],32,@N[$i]
+ or $lo,@N[$i],@N[$i]
+___
+}
+$code.=<<___;
+ cmp $ap,$bp
+ be SIZE_T_CC,.Lmsquare_$NUM
+ nop
+___
+
+# load bp[$NUM] ########################################################
+$code.=<<___;
+ save %sp,-128,%sp; or $sentinel,%fp,%fp
+___
+for($i=0; $i<14 && $i<$NUM; $i++) {
+my $lo=$i<13?@B[$i+1]:"%o7";
+$code.=<<___;
+ ld [$bp+$i*8+0],$lo
+ ld [$bp+$i*8+4],@B[$i]
+ sllx @B[$i],32,@B[$i]
+ or $lo,@B[$i],@B[$i]
+___
+}
+$code.=<<___;
+ save %sp,-128,%sp; or $sentinel,%fp,%fp
+___
+for(; $i<$NUM; $i++) {
+my $lo=($i<$NUM-1)?@B[$i+1]:"%o7";
+$code.=<<___;
+ ld [$bp+$i*8+0],$lo
+ ld [$bp+$i*8+4],@B[$i]
+ sllx @B[$i],32,@B[$i]
+ or $lo,@B[$i],@B[$i]
+___
+}
+# magic ################################################################
+$code.=<<___;
+ .word 0x81b02920+$NUM-1 ! montmul $NUM-1
+.Lmresume_$NUM:
+ fbu,pn %fcc3,.Lmabort_$NUM
+#ifndef __arch64__
+ and %fp,$sentinel,$sentinel
+ brz,pn $sentinel,.Lmabort_$NUM
+#endif
+ nop
+#ifdef __arch64__
+ restore
+ restore
+ restore
+ restore
+ restore
+#else
+ restore; and %fp,$sentinel,$sentinel
+ restore; and %fp,$sentinel,$sentinel
+ restore; and %fp,$sentinel,$sentinel
+ restore; and %fp,$sentinel,$sentinel
+ brz,pn $sentinel,.Lmabort1_$NUM
+ restore
+#endif
+___
+
+# save tp[$NUM] ########################################################
+for($i=0; $i<14 && $i<$NUM; $i++) {
+$code.=<<___;
+ movxtod @A[$i],@R[$i]
+___
+}
+$code.=<<___;
+#ifdef __arch64__
+ restore
+#else
+ and %fp,$sentinel,$sentinel
+ restore
+ and $sentinel,1,%o7
+ and %fp,$sentinel,$sentinel
+ srl %fp,0,%fp ! just in case?
+ or %o7,$sentinel,$sentinel
+ brz,a,pn $sentinel,.Lmdone_$NUM
+ mov 0,%i0 ! return failure
+#endif
+___
+for($i=0; $i<12 && $i<$NUM; $i++) {
+@R[$i] =~ /%f([0-9]+)/;
+my $lo = "%f".($1+1);
+$code.=<<___;
+ st $lo,[$rp+$i*8+0]
+ st @R[$i],[$rp+$i*8+4]
+___
+}
+for(; $i<$NUM; $i++) {
+my ($hi,$lo)=("%f".2*($i%4),"%f".(2*($i%4)+1));
+$code.=<<___;
+ fsrc2 @R[$i],$hi
+ st $lo,[$rp+$i*8+0]
+ st $hi,[$rp+$i*8+4]
+___
+}
+$code.=<<___;
+ mov 1,%i0 ! return success
+.Lmdone_$NUM:
+ ret
+ restore
+
+.Lmabort_$NUM:
+ restore
+ restore
+ restore
+ restore
+ restore
+.Lmabort1_$NUM:
+ restore
+
+ mov 0,%i0 ! return failure
+ ret
+ restore
+
+.align 32
+.Lmsquare_$NUM:
+ save %sp,-128,%sp; or $sentinel,%fp,%fp
+ save %sp,-128,%sp; or $sentinel,%fp,%fp
+ .word 0x81b02940+$NUM-1 ! montsqr $NUM-1
+ ba .Lmresume_$NUM
+ nop
+.type bn_mul_mont_t4_$NUM, #function
+.size bn_mul_mont_t4_$NUM, .-bn_mul_mont_t4_$NUM
+___
+}
+
+for ($i=8;$i<=32;$i+=8) {
+ &generate_bn_mul_mont_t4($i);
+}
+
+########################################################################
+#
+sub load_ccr {
+my ($ptbl,$pwr,$ccr,$skip_wr)=@_;
+$code.=<<___;
+ srl $pwr, 2, %o4
+ and $pwr, 3, %o5
+ and %o4, 7, %o4
+ sll %o5, 3, %o5 ! offset within first cache line
+ add %o5, $ptbl, $ptbl ! of the pwrtbl
+ or %g0, 1, %o5
+ sll %o5, %o4, $ccr
+___
+$code.=<<___ if (!$skip_wr);
+ wr $ccr, %g0, %ccr
+___
+}
+sub load_b_pair {
+my ($pwrtbl,$B0,$B1)=@_;
+
+$code.=<<___;
+ ldx [$pwrtbl+0*32], $B0
+ ldx [$pwrtbl+8*32], $B1
+ ldx [$pwrtbl+1*32], %o4
+ ldx [$pwrtbl+9*32], %o5
+ movvs %icc, %o4, $B0
+ ldx [$pwrtbl+2*32], %o4
+ movvs %icc, %o5, $B1
+ ldx [$pwrtbl+10*32],%o5
+ move %icc, %o4, $B0
+ ldx [$pwrtbl+3*32], %o4
+ move %icc, %o5, $B1
+ ldx [$pwrtbl+11*32],%o5
+ movneg %icc, %o4, $B0
+ ldx [$pwrtbl+4*32], %o4
+ movneg %icc, %o5, $B1
+ ldx [$pwrtbl+12*32],%o5
+ movcs %xcc, %o4, $B0
+ ldx [$pwrtbl+5*32],%o4
+ movcs %xcc, %o5, $B1
+ ldx [$pwrtbl+13*32],%o5
+ movvs %xcc, %o4, $B0
+ ldx [$pwrtbl+6*32], %o4
+ movvs %xcc, %o5, $B1
+ ldx [$pwrtbl+14*32],%o5
+ move %xcc, %o4, $B0
+ ldx [$pwrtbl+7*32], %o4
+ move %xcc, %o5, $B1
+ ldx [$pwrtbl+15*32],%o5
+ movneg %xcc, %o4, $B0
+ add $pwrtbl,16*32, $pwrtbl
+ movneg %xcc, %o5, $B1
+___
+}
+sub load_b {
+my ($pwrtbl,$Bi)=@_;
+
+$code.=<<___;
+ ldx [$pwrtbl+0*32], $Bi
+ ldx [$pwrtbl+1*32], %o4
+ ldx [$pwrtbl+2*32], %o5
+ movvs %icc, %o4, $Bi
+ ldx [$pwrtbl+3*32], %o4
+ move %icc, %o5, $Bi
+ ldx [$pwrtbl+4*32], %o5
+ movneg %icc, %o4, $Bi
+ ldx [$pwrtbl+5*32], %o4
+ movcs %xcc, %o5, $Bi
+ ldx [$pwrtbl+6*32], %o5
+ movvs %xcc, %o4, $Bi
+ ldx [$pwrtbl+7*32], %o4
+ move %xcc, %o5, $Bi
+ add $pwrtbl,8*32, $pwrtbl
+ movneg %xcc, %o4, $Bi
+___
+}
+
+########################################################################
+# int bn_pwr5_mont_t4_$NUM(u64 *tp,const u64 *np,const BN_ULONG *n0,
+# const u64 *pwrtbl,int pwr,int stride);
+#
+sub generate_bn_pwr5_mont_t4() {
+my $NUM=shift;
+my ($tp,$np,$pwrtbl,$pwr,$sentinel)=map("%g$_",(1..5));
+
+$code.=<<___;
+.globl bn_pwr5_mont_t4_$NUM
+.align 32
+bn_pwr5_mont_t4_$NUM:
+#ifdef __arch64__
+ mov 0,$sentinel
+ mov -128,%g4
+#elif defined(SPARCV9_64BIT_STACK)
+ SPARC_LOAD_ADDRESS_LEAF(OPENSSL_sparcv9cap_P,%g1,%g5)
+ ld [%g1+0],%g1 ! OPENSSL_sparcv9_P[0]
+ mov -2047,%g4
+ and %g1,SPARCV9_64BIT_STACK,%g1
+ movrz %g1,0,%g4
+ mov -1,$sentinel
+ add %g4,-128,%g4
+#else
+ mov -1,$sentinel
+ mov -128,%g4
+#endif
+ sllx $sentinel,32,$sentinel
+ save %sp,%g4,%sp
+#ifndef __arch64__
+ save %sp,-128,%sp ! warm it up
+ save %sp,-128,%sp
+ save %sp,-128,%sp
+ save %sp,-128,%sp
+ save %sp,-128,%sp
+ save %sp,-128,%sp
+ restore
+ restore
+ restore
+ restore
+ restore
+ restore
+#endif
+ and %sp,1,%g4
+ or $sentinel,%fp,%fp
+ or %g4,$sentinel,$sentinel
+
+ ! copy arguments to global registers
+ mov %i0,$tp
+ mov %i1,$np
+ ld [%i2+0],%f1 ! load *n0
+ ld [%i2+4],%f0
+ mov %i3,$pwrtbl
+ srl %i4,%g0,%i4 ! pack last arguments
+ sllx %i5,32,$pwr
+ or %i4,$pwr,$pwr
+ fsrc2 %f0,%f60
+___
+
+# load tp[$NUM] ########################################################
+$code.=<<___;
+ save %sp,-128,%sp; or $sentinel,%fp,%fp
+___
+for($i=0; $i<14 && $i<$NUM; $i++) {
+$code.=<<___;
+ ldx [$tp+$i*8],@A[$i]
+___
+}
+for(; $i<$NUM; $i++) {
+$code.=<<___;
+ ldd [$tp+$i*8],@A[$i]
+___
+}
+# load np[$NUM] ########################################################
+$code.=<<___;
+ save %sp,-128,%sp; or $sentinel,%fp,%fp
+___
+for($i=0; $i<14 && $i<$NUM; $i++) {
+$code.=<<___;
+ ldx [$np+$i*8],@N[$i]
+___
+}
+$code.=<<___;
+ save %sp,-128,%sp; or $sentinel,%fp,%fp
+___
+for(; $i<28 && $i<$NUM; $i++) {
+$code.=<<___;
+ ldx [$np+$i*8],@N[$i]
+___
+}
+$code.=<<___;
+ save %sp,-128,%sp; or $sentinel,%fp,%fp
+___
+for(; $i<$NUM; $i++) {
+$code.=<<___;
+ ldx [$np+$i*8],@N[$i]
+___
+}
+# load pwrtbl[pwr] ########################################################
+$code.=<<___;
+ save %sp,-128,%sp; or $sentinel,%fp,%fp
+
+ srlx $pwr, 32, %o4 ! unpack $pwr
+ srl $pwr, %g0, %o5
+ sub %o4, 5, %o4
+ mov $pwrtbl, %o7
+ sllx %o4, 32, $pwr ! re-pack $pwr
+ or %o5, $pwr, $pwr
+ srl %o5, %o4, %o5
+___
+ &load_ccr("%o7","%o5","%o4");
+$code.=<<___;
+ b .Lstride_$NUM
+ nop
+.align 16
+.Lstride_$NUM:
+___
+for($i=0; $i<14 && $i<$NUM; $i+=2) {
+ &load_b_pair("%o7",@B[$i],@B[$i+1]);
+}
+$code.=<<___;
+ save %sp,-128,%sp; or $sentinel,%fp,%fp
+___
+for(; $i<$NUM; $i+=2) {
+ &load_b_pair("%i7",@B[$i],@B[$i+1]);
+}
+$code.=<<___;
+ srax $pwr, 32, %o4 ! unpack $pwr
+ srl $pwr, %g0, %o5
+ sub %o4, 5, %o4
+ mov $pwrtbl, %i7
+ sllx %o4, 32, $pwr ! re-pack $pwr
+ or %o5, $pwr, $pwr
+ srl %o5, %o4, %o5
+___
+ &load_ccr("%i7","%o5","%o4",1);
+
+# magic ################################################################
+for($i=0; $i<5; $i++) {
+$code.=<<___;
+ .word 0x81b02940+$NUM-1 ! montsqr $NUM-1
+ fbu,pn %fcc3,.Labort_$NUM
+#ifndef __arch64__
+ and %fp,$sentinel,$sentinel
+ brz,pn $sentinel,.Labort_$NUM
+#endif
+ nop
+___
+}
+$code.=<<___;
+ wr %o4, %g0, %ccr
+ .word 0x81b02920+$NUM-1 ! montmul $NUM-1
+ fbu,pn %fcc3,.Labort_$NUM
+#ifndef __arch64__
+ and %fp,$sentinel,$sentinel
+ brz,pn $sentinel,.Labort_$NUM
+#endif
+
+ srax $pwr, 32, %o4
+#ifdef __arch64__
+ brgez %o4,.Lstride_$NUM
+ restore
+ restore
+ restore
+ restore
+ restore
+#else
+ brgez %o4,.Lstride_$NUM
+ restore; and %fp,$sentinel,$sentinel
+ restore; and %fp,$sentinel,$sentinel
+ restore; and %fp,$sentinel,$sentinel
+ restore; and %fp,$sentinel,$sentinel
+ brz,pn $sentinel,.Labort1_$NUM
+ restore
+#endif
+___
+
+# save tp[$NUM] ########################################################
+for($i=0; $i<14 && $i<$NUM; $i++) {
+$code.=<<___;
+ movxtod @A[$i],@R[$i]
+___
+}
+$code.=<<___;
+#ifdef __arch64__
+ restore
+#else
+ and %fp,$sentinel,$sentinel
+ restore
+ and $sentinel,1,%o7
+ and %fp,$sentinel,$sentinel
+ srl %fp,0,%fp ! just in case?
+ or %o7,$sentinel,$sentinel
+ brz,a,pn $sentinel,.Ldone_$NUM
+ mov 0,%i0 ! return failure
+#endif
+___
+for($i=0; $i<$NUM; $i++) {
+$code.=<<___;
+ std @R[$i],[$tp+$i*8]
+___
+}
+$code.=<<___;
+ mov 1,%i0 ! return success
+.Ldone_$NUM:
+ ret
+ restore
+
+.Labort_$NUM:
+ restore
+ restore
+ restore
+ restore
+ restore
+.Labort1_$NUM:
+ restore
+
+ mov 0,%i0 ! return failure
+ ret
+ restore
+.type bn_pwr5_mont_t4_$NUM, #function
+.size bn_pwr5_mont_t4_$NUM, .-bn_pwr5_mont_t4_$NUM
+___
+}
+
+for ($i=8;$i<=32;$i+=8) {
+ &generate_bn_pwr5_mont_t4($i);
+}
+
+{
+########################################################################
+# Fall-back subroutines
+#
+# copy of bn_mul_mont_vis3 adjusted for vectors of 64-bit values
+#
+($n0,$m0,$m1,$lo0,$hi0, $lo1,$hi1,$aj,$alo,$nj,$nlo,$tj)=
+ (map("%g$_",(1..5)),map("%o$_",(0..5,7)));
+
+# int bn_mul_mont(
+$rp="%o0"; # u64 *rp,
+$ap="%o1"; # const u64 *ap,
+$bp="%o2"; # const u64 *bp,
+$np="%o3"; # const u64 *np,
+$n0p="%o4"; # const BN_ULONG *n0,
+$num="%o5"; # int num); # caller ensures that num is >=3
+$code.=<<___;
+.globl bn_mul_mont_t4
+.align 32
+bn_mul_mont_t4:
+ add %sp, STACK_BIAS, %g4 ! real top of stack
+ sll $num, 3, $num ! size in bytes
+ add $num, 63, %g1
+ andn %g1, 63, %g1 ! buffer size rounded up to 64 bytes
+ sub %g4, %g1, %g1
+ andn %g1, 63, %g1 ! align at 64 byte
+ sub %g1, STACK_FRAME, %g1 ! new top of stack
+ sub %g1, %g4, %g1
+
+ save %sp, %g1, %sp
+___
+# +-------------------------------+<----- %sp
+# . .
+# +-------------------------------+<----- aligned at 64 bytes
+# | __int64 tmp[0] |
+# +-------------------------------+
+# . .
+# . .
+# +-------------------------------+<----- aligned at 64 bytes
+# . .
+($rp,$ap,$bp,$np,$n0p,$num)=map("%i$_",(0..5));
+($t0,$t1,$t2,$t3,$cnt,$tp,$bufsz)=map("%l$_",(0..7));
+($ovf,$i)=($t0,$t1);
+$code.=<<___;
+ ld [$n0p+0], $t0 ! pull n0[0..1] value
+ ld [$n0p+4], $t1
+ add %sp, STACK_BIAS+STACK_FRAME, $tp
+ ldx [$bp+0], $m0 ! m0=bp[0]
+ sllx $t1, 32, $n0
+ add $bp, 8, $bp
+ or $t0, $n0, $n0
+
+ ldx [$ap+0], $aj ! ap[0]
+
+ mulx $aj, $m0, $lo0 ! ap[0]*bp[0]
+ umulxhi $aj, $m0, $hi0
+
+ ldx [$ap+8], $aj ! ap[1]
+ add $ap, 16, $ap
+ ldx [$np+0], $nj ! np[0]
+
+ mulx $lo0, $n0, $m1 ! "tp[0]"*n0
+
+ mulx $aj, $m0, $alo ! ap[1]*bp[0]
+ umulxhi $aj, $m0, $aj ! ahi=aj
+
+ mulx $nj, $m1, $lo1 ! np[0]*m1
+ umulxhi $nj, $m1, $hi1
+
+ ldx [$np+8], $nj ! np[1]
+
+ addcc $lo0, $lo1, $lo1
+ add $np, 16, $np
+ addxc %g0, $hi1, $hi1
+
+ mulx $nj, $m1, $nlo ! np[1]*m1
+ umulxhi $nj, $m1, $nj ! nhi=nj
+
+ ba .L1st
+ sub $num, 24, $cnt ! cnt=num-3
+
+.align 16
+.L1st:
+ addcc $alo, $hi0, $lo0
+ addxc $aj, %g0, $hi0
+
+ ldx [$ap+0], $aj ! ap[j]
+ addcc $nlo, $hi1, $lo1
+ add $ap, 8, $ap
+ addxc $nj, %g0, $hi1 ! nhi=nj
+
+ ldx [$np+0], $nj ! np[j]
+ mulx $aj, $m0, $alo ! ap[j]*bp[0]
+ add $np, 8, $np
+ umulxhi $aj, $m0, $aj ! ahi=aj
+
+ mulx $nj, $m1, $nlo ! np[j]*m1
+ addcc $lo0, $lo1, $lo1 ! np[j]*m1+ap[j]*bp[0]
+ umulxhi $nj, $m1, $nj ! nhi=nj
+ addxc %g0, $hi1, $hi1
+ stxa $lo1, [$tp]0xe2 ! tp[j-1]
+ add $tp, 8, $tp ! tp++
+
+ brnz,pt $cnt, .L1st
+ sub $cnt, 8, $cnt ! j--
+!.L1st
+ addcc $alo, $hi0, $lo0
+ addxc $aj, %g0, $hi0 ! ahi=aj
+
+ addcc $nlo, $hi1, $lo1
+ addxc $nj, %g0, $hi1
+ addcc $lo0, $lo1, $lo1 ! np[j]*m1+ap[j]*bp[0]
+ addxc %g0, $hi1, $hi1
+ stxa $lo1, [$tp]0xe2 ! tp[j-1]
+ add $tp, 8, $tp
+
+ addcc $hi0, $hi1, $hi1
+ addxc %g0, %g0, $ovf ! upmost overflow bit
+ stxa $hi1, [$tp]0xe2
+ add $tp, 8, $tp
+
+ ba .Louter
+ sub $num, 16, $i ! i=num-2
+
+.align 16
+.Louter:
+ ldx [$bp+0], $m0 ! m0=bp[i]
+ add $bp, 8, $bp
+
+ sub $ap, $num, $ap ! rewind
+ sub $np, $num, $np
+ sub $tp, $num, $tp
+
+ ldx [$ap+0], $aj ! ap[0]
+ ldx [$np+0], $nj ! np[0]
+
+ mulx $aj, $m0, $lo0 ! ap[0]*bp[i]
+ ldx [$tp], $tj ! tp[0]
+ umulxhi $aj, $m0, $hi0
+ ldx [$ap+8], $aj ! ap[1]
+ addcc $lo0, $tj, $lo0 ! ap[0]*bp[i]+tp[0]
+ mulx $aj, $m0, $alo ! ap[1]*bp[i]
+ addxc %g0, $hi0, $hi0
+ mulx $lo0, $n0, $m1 ! tp[0]*n0
+ umulxhi $aj, $m0, $aj ! ahi=aj
+ mulx $nj, $m1, $lo1 ! np[0]*m1
+ add $ap, 16, $ap
+ umulxhi $nj, $m1, $hi1
+ ldx [$np+8], $nj ! np[1]
+ add $np, 16, $np
+ addcc $lo1, $lo0, $lo1
+ mulx $nj, $m1, $nlo ! np[1]*m1
+ addxc %g0, $hi1, $hi1
+ umulxhi $nj, $m1, $nj ! nhi=nj
+
+ ba .Linner
+ sub $num, 24, $cnt ! cnt=num-3
+.align 16
+.Linner:
+ addcc $alo, $hi0, $lo0
+ ldx [$tp+8], $tj ! tp[j]
+ addxc $aj, %g0, $hi0 ! ahi=aj
+ ldx [$ap+0], $aj ! ap[j]
+ add $ap, 8, $ap
+ addcc $nlo, $hi1, $lo1
+ mulx $aj, $m0, $alo ! ap[j]*bp[i]
+ addxc $nj, %g0, $hi1 ! nhi=nj
+ ldx [$np+0], $nj ! np[j]
+ add $np, 8, $np
+ umulxhi $aj, $m0, $aj ! ahi=aj
+ addcc $lo0, $tj, $lo0 ! ap[j]*bp[i]+tp[j]
+ mulx $nj, $m1, $nlo ! np[j]*m1
+ addxc %g0, $hi0, $hi0
+ umulxhi $nj, $m1, $nj ! nhi=nj
+ addcc $lo1, $lo0, $lo1 ! np[j]*m1+ap[j]*bp[i]+tp[j]
+ addxc %g0, $hi1, $hi1
+ stx $lo1, [$tp] ! tp[j-1]
+ add $tp, 8, $tp
+ brnz,pt $cnt, .Linner
+ sub $cnt, 8, $cnt
+!.Linner
+ ldx [$tp+8], $tj ! tp[j]
+ addcc $alo, $hi0, $lo0
+ addxc $aj, %g0, $hi0 ! ahi=aj
+ addcc $lo0, $tj, $lo0 ! ap[j]*bp[i]+tp[j]
+ addxc %g0, $hi0, $hi0
+
+ addcc $nlo, $hi1, $lo1
+ addxc $nj, %g0, $hi1 ! nhi=nj
+ addcc $lo1, $lo0, $lo1 ! np[j]*m1+ap[j]*bp[i]+tp[j]
+ addxc %g0, $hi1, $hi1
+ stx $lo1, [$tp] ! tp[j-1]
+
+ subcc %g0, $ovf, %g0 ! move upmost overflow to CCR.xcc
+ addxccc $hi1, $hi0, $hi1
+ addxc %g0, %g0, $ovf
+ stx $hi1, [$tp+8]
+ add $tp, 16, $tp
+
+ brnz,pt $i, .Louter
+ sub $i, 8, $i
+
+ sub $ap, $num, $ap ! rewind
+ sub $np, $num, $np
+ sub $tp, $num, $tp
+ ba .Lsub
+ subcc $num, 8, $cnt ! cnt=num-1 and clear CCR.xcc
+
+.align 16
+.Lsub:
+ ldx [$tp], $tj
+ add $tp, 8, $tp
+ ldx [$np+0], $nj
+ add $np, 8, $np
+ subccc $tj, $nj, $t2 ! tp[j]-np[j]
+ srlx $tj, 32, $tj
+ srlx $nj, 32, $nj
+ subccc $tj, $nj, $t3
+ add $rp, 8, $rp
+ st $t2, [$rp-4] ! reverse order
+ st $t3, [$rp-8]
+ brnz,pt $cnt, .Lsub
+ sub $cnt, 8, $cnt
+
+ sub $np, $num, $np ! rewind
+ sub $tp, $num, $tp
+ sub $rp, $num, $rp
+
+ subc $ovf, %g0, $ovf ! handle upmost overflow bit
+ and $tp, $ovf, $ap
+ andn $rp, $ovf, $np
+ or $np, $ap, $ap ! ap=borrow?tp:rp
+ ba .Lcopy
+ sub $num, 8, $cnt
+
+.align 16
+.Lcopy: ! copy or in-place refresh
+ ldx [$ap+0], $t2
+ add $ap, 8, $ap
+ stx %g0, [$tp] ! zap
+ add $tp, 8, $tp
+ stx $t2, [$rp+0]
+ add $rp, 8, $rp
+ brnz $cnt, .Lcopy
+ sub $cnt, 8, $cnt
+
+ mov 1, %o0
+ ret
+ restore
+.type bn_mul_mont_t4, #function
+.size bn_mul_mont_t4, .-bn_mul_mont_t4
+___
+
+# int bn_mul_mont_gather5(
+$rp="%o0"; # u64 *rp,
+$ap="%o1"; # const u64 *ap,
+$bp="%o2"; # const u64 *pwrtbl,
+$np="%o3"; # const u64 *np,
+$n0p="%o4"; # const BN_ULONG *n0,
+$num="%o5"; # int num, # caller ensures that num is >=3
+ # int power);
+$code.=<<___;
+.globl bn_mul_mont_gather5_t4
+.align 32
+bn_mul_mont_gather5_t4:
+ add %sp, STACK_BIAS, %g4 ! real top of stack
+ sll $num, 3, $num ! size in bytes
+ add $num, 63, %g1
+ andn %g1, 63, %g1 ! buffer size rounded up to 64 bytes
+ sub %g4, %g1, %g1
+ andn %g1, 63, %g1 ! align at 64 byte
+ sub %g1, STACK_FRAME, %g1 ! new top of stack
+ sub %g1, %g4, %g1
+ LDPTR [%sp+STACK_7thARG], %g4 ! load power, 7th argument
+
+ save %sp, %g1, %sp
+___
+# +-------------------------------+<----- %sp
+# . .
+# +-------------------------------+<----- aligned at 64 bytes
+# | __int64 tmp[0] |
+# +-------------------------------+
+# . .
+# . .
+# +-------------------------------+<----- aligned at 64 bytes
+# . .
+($rp,$ap,$bp,$np,$n0p,$num)=map("%i$_",(0..5));
+($t0,$t1,$t2,$t3,$cnt,$tp,$bufsz,$ccr)=map("%l$_",(0..7));
+($ovf,$i)=($t0,$t1);
+ &load_ccr($bp,"%g4",$ccr);
+ &load_b($bp,$m0,"%o7"); # m0=bp[0]
+
+$code.=<<___;
+ ld [$n0p+0], $t0 ! pull n0[0..1] value
+ ld [$n0p+4], $t1
+ add %sp, STACK_BIAS+STACK_FRAME, $tp
+ sllx $t1, 32, $n0
+ or $t0, $n0, $n0
+
+ ldx [$ap+0], $aj ! ap[0]
+
+ mulx $aj, $m0, $lo0 ! ap[0]*bp[0]
+ umulxhi $aj, $m0, $hi0
+
+ ldx [$ap+8], $aj ! ap[1]
+ add $ap, 16, $ap
+ ldx [$np+0], $nj ! np[0]
+
+ mulx $lo0, $n0, $m1 ! "tp[0]"*n0
+
+ mulx $aj, $m0, $alo ! ap[1]*bp[0]
+ umulxhi $aj, $m0, $aj ! ahi=aj
+
+ mulx $nj, $m1, $lo1 ! np[0]*m1
+ umulxhi $nj, $m1, $hi1
+
+ ldx [$np+8], $nj ! np[1]
+
+ addcc $lo0, $lo1, $lo1
+ add $np, 16, $np
+ addxc %g0, $hi1, $hi1
+
+ mulx $nj, $m1, $nlo ! np[1]*m1
+ umulxhi $nj, $m1, $nj ! nhi=nj
+
+ ba .L1st_g5
+ sub $num, 24, $cnt ! cnt=num-3
+
+.align 16
+.L1st_g5:
+ addcc $alo, $hi0, $lo0
+ addxc $aj, %g0, $hi0
+
+ ldx [$ap+0], $aj ! ap[j]
+ addcc $nlo, $hi1, $lo1
+ add $ap, 8, $ap
+ addxc $nj, %g0, $hi1 ! nhi=nj
+
+ ldx [$np+0], $nj ! np[j]
+ mulx $aj, $m0, $alo ! ap[j]*bp[0]
+ add $np, 8, $np
+ umulxhi $aj, $m0, $aj ! ahi=aj
+
+ mulx $nj, $m1, $nlo ! np[j]*m1
+ addcc $lo0, $lo1, $lo1 ! np[j]*m1+ap[j]*bp[0]
+ umulxhi $nj, $m1, $nj ! nhi=nj
+ addxc %g0, $hi1, $hi1
+ stxa $lo1, [$tp]0xe2 ! tp[j-1]
+ add $tp, 8, $tp ! tp++
+
+ brnz,pt $cnt, .L1st_g5
+ sub $cnt, 8, $cnt ! j--
+!.L1st_g5
+ addcc $alo, $hi0, $lo0
+ addxc $aj, %g0, $hi0 ! ahi=aj
+
+ addcc $nlo, $hi1, $lo1
+ addxc $nj, %g0, $hi1
+ addcc $lo0, $lo1, $lo1 ! np[j]*m1+ap[j]*bp[0]
+ addxc %g0, $hi1, $hi1
+ stxa $lo1, [$tp]0xe2 ! tp[j-1]
+ add $tp, 8, $tp
+
+ addcc $hi0, $hi1, $hi1
+ addxc %g0, %g0, $ovf ! upmost overflow bit
+ stxa $hi1, [$tp]0xe2
+ add $tp, 8, $tp
+
+ ba .Louter_g5
+ sub $num, 16, $i ! i=num-2
+
+.align 16
+.Louter_g5:
+ wr $ccr, %g0, %ccr
+___
+ &load_b($bp,$m0); # m0=bp[i]
+$code.=<<___;
+ sub $ap, $num, $ap ! rewind
+ sub $np, $num, $np
+ sub $tp, $num, $tp
+
+ ldx [$ap+0], $aj ! ap[0]
+ ldx [$np+0], $nj ! np[0]
+
+ mulx $aj, $m0, $lo0 ! ap[0]*bp[i]
+ ldx [$tp], $tj ! tp[0]
+ umulxhi $aj, $m0, $hi0
+ ldx [$ap+8], $aj ! ap[1]
+ addcc $lo0, $tj, $lo0 ! ap[0]*bp[i]+tp[0]
+ mulx $aj, $m0, $alo ! ap[1]*bp[i]
+ addxc %g0, $hi0, $hi0
+ mulx $lo0, $n0, $m1 ! tp[0]*n0
+ umulxhi $aj, $m0, $aj ! ahi=aj
+ mulx $nj, $m1, $lo1 ! np[0]*m1
+ add $ap, 16, $ap
+ umulxhi $nj, $m1, $hi1
+ ldx [$np+8], $nj ! np[1]
+ add $np, 16, $np
+ addcc $lo1, $lo0, $lo1
+ mulx $nj, $m1, $nlo ! np[1]*m1
+ addxc %g0, $hi1, $hi1
+ umulxhi $nj, $m1, $nj ! nhi=nj
+
+ ba .Linner_g5
+ sub $num, 24, $cnt ! cnt=num-3
+.align 16
+.Linner_g5:
+ addcc $alo, $hi0, $lo0
+ ldx [$tp+8], $tj ! tp[j]
+ addxc $aj, %g0, $hi0 ! ahi=aj
+ ldx [$ap+0], $aj ! ap[j]
+ add $ap, 8, $ap
+ addcc $nlo, $hi1, $lo1
+ mulx $aj, $m0, $alo ! ap[j]*bp[i]
+ addxc $nj, %g0, $hi1 ! nhi=nj
+ ldx [$np+0], $nj ! np[j]
+ add $np, 8, $np
+ umulxhi $aj, $m0, $aj ! ahi=aj
+ addcc $lo0, $tj, $lo0 ! ap[j]*bp[i]+tp[j]
+ mulx $nj, $m1, $nlo ! np[j]*m1
+ addxc %g0, $hi0, $hi0
+ umulxhi $nj, $m1, $nj ! nhi=nj
+ addcc $lo1, $lo0, $lo1 ! np[j]*m1+ap[j]*bp[i]+tp[j]
+ addxc %g0, $hi1, $hi1
+ stx $lo1, [$tp] ! tp[j-1]
+ add $tp, 8, $tp
+ brnz,pt $cnt, .Linner_g5
+ sub $cnt, 8, $cnt
+!.Linner_g5
+ ldx [$tp+8], $tj ! tp[j]
+ addcc $alo, $hi0, $lo0
+ addxc $aj, %g0, $hi0 ! ahi=aj
+ addcc $lo0, $tj, $lo0 ! ap[j]*bp[i]+tp[j]
+ addxc %g0, $hi0, $hi0
+
+ addcc $nlo, $hi1, $lo1
+ addxc $nj, %g0, $hi1 ! nhi=nj
+ addcc $lo1, $lo0, $lo1 ! np[j]*m1+ap[j]*bp[i]+tp[j]
+ addxc %g0, $hi1, $hi1
+ stx $lo1, [$tp] ! tp[j-1]
+
+ subcc %g0, $ovf, %g0 ! move upmost overflow to CCR.xcc
+ addxccc $hi1, $hi0, $hi1
+ addxc %g0, %g0, $ovf
+ stx $hi1, [$tp+8]
+ add $tp, 16, $tp
+
+ brnz,pt $i, .Louter_g5
+ sub $i, 8, $i
+
+ sub $ap, $num, $ap ! rewind
+ sub $np, $num, $np
+ sub $tp, $num, $tp
+ ba .Lsub_g5
+ subcc $num, 8, $cnt ! cnt=num-1 and clear CCR.xcc
+
+.align 16
+.Lsub_g5:
+ ldx [$tp], $tj
+ add $tp, 8, $tp
+ ldx [$np+0], $nj
+ add $np, 8, $np
+ subccc $tj, $nj, $t2 ! tp[j]-np[j]
+ srlx $tj, 32, $tj
+ srlx $nj, 32, $nj
+ subccc $tj, $nj, $t3
+ add $rp, 8, $rp
+ st $t2, [$rp-4] ! reverse order
+ st $t3, [$rp-8]
+ brnz,pt $cnt, .Lsub_g5
+ sub $cnt, 8, $cnt
+
+ sub $np, $num, $np ! rewind
+ sub $tp, $num, $tp
+ sub $rp, $num, $rp
+
+ subc $ovf, %g0, $ovf ! handle upmost overflow bit
+ and $tp, $ovf, $ap
+ andn $rp, $ovf, $np
+ or $np, $ap, $ap ! ap=borrow?tp:rp
+ ba .Lcopy_g5
+ sub $num, 8, $cnt
+
+.align 16
+.Lcopy_g5: ! copy or in-place refresh
+ ldx [$ap+0], $t2
+ add $ap, 8, $ap
+ stx %g0, [$tp] ! zap
+ add $tp, 8, $tp
+ stx $t2, [$rp+0]
+ add $rp, 8, $rp
+ brnz $cnt, .Lcopy_g5
+ sub $cnt, 8, $cnt
+
+ mov 1, %o0
+ ret
+ restore
+.type bn_mul_mont_gather5_t4, #function
+.size bn_mul_mont_gather5_t4, .-bn_mul_mont_gather5_t4
+___
+}
+
+$code.=<<___;
+.globl bn_flip_t4
+.align 32
+bn_flip_t4:
+.Loop_flip:
+ ld [%o1+0], %o4
+ sub %o2, 1, %o2
+ ld [%o1+4], %o5
+ add %o1, 8, %o1
+ st %o5, [%o0+0]
+ st %o4, [%o0+4]
+ brnz %o2, .Loop_flip
+ add %o0, 8, %o0
+ retl
+ nop
+.type bn_flip_t4, #function
+.size bn_flip_t4, .-bn_flip_t4
+
+.globl bn_flip_n_scatter5_t4
+.align 32
+bn_flip_n_scatter5_t4:
+ sll %o3, 3, %o3
+ srl %o1, 1, %o1
+ add %o3, %o2, %o2 ! &pwrtbl[pwr]
+ sub %o1, 1, %o1
+.Loop_flip_n_scatter5:
+ ld [%o0+0], %o4 ! inp[i]
+ ld [%o0+4], %o5
+ add %o0, 8, %o0
+ sllx %o5, 32, %o5
+ or %o4, %o5, %o5
+ stx %o5, [%o2]
+ add %o2, 32*8, %o2
+ brnz %o1, .Loop_flip_n_scatter5
+ sub %o1, 1, %o1
+ retl
+ nop
+.type bn_flip_n_scatter5_t4, #function
+.size bn_flip_n_scatter5_t4, .-bn_flip_n_scatter5_t4
+
+.globl bn_gather5_t4
+.align 32
+bn_gather5_t4:
+___
+ &load_ccr("%o2","%o3","%g1");
+$code.=<<___;
+ sub %o1, 1, %o1
+.Loop_gather5:
+___
+ &load_b("%o2","%g1");
+$code.=<<___;
+ stx %g1, [%o0]
+ add %o0, 8, %o0
+ brnz %o1, .Loop_gather5
+ sub %o1, 1, %o1
+
+ retl
+ nop
+.type bn_gather5_t4, #function
+.size bn_gather5_t4, .-bn_gather5_t4
+
+.asciz "Montgomery Multiplication for SPARC T4, David S. Miller, Andy Polyakov"
+.align 4
+___
+
+&emit_assembler();
+
+close STDOUT;
diff --git a/crypto/openssl/crypto/bn/asm/sparcv9-gf2m.pl b/crypto/openssl/crypto/bn/asm/sparcv9-gf2m.pl
new file mode 100755
index 0000000..ab94cd9
--- /dev/null
+++ b/crypto/openssl/crypto/bn/asm/sparcv9-gf2m.pl
@@ -0,0 +1,190 @@
+#!/usr/bin/env perl
+#
+# ====================================================================
+# Written by Andy Polyakov <appro@openssl.org> for the OpenSSL
+# project. The module is, however, dual licensed under OpenSSL and
+# CRYPTOGAMS licenses depending on where you obtain it. For further
+# details see http://www.openssl.org/~appro/cryptogams/.
+# ====================================================================
+#
+# October 2012
+#
+# The module implements bn_GF2m_mul_2x2 polynomial multiplication used
+# in bn_gf2m.c. It's kind of low-hanging mechanical port from C for
+# the time being... Except that it has two code paths: one suitable
+# for all SPARCv9 processors and one for VIS3-capable ones. Former
+# delivers ~25-45% more, more for longer keys, heaviest DH and DSA
+# verify operations on venerable UltraSPARC II. On T4 VIS3 code is
+# ~100-230% faster than gcc-generated code and ~35-90% faster than
+# the pure SPARCv9 code path.
+
+$locals=16*8;
+
+$tab="%l0";
+
+@T=("%g2","%g3");
+@i=("%g4","%g5");
+
+($a1,$a2,$a4,$a8,$a12,$a48)=map("%o$_",(0..5));
+($lo,$hi,$b)=("%g1",$a8,"%o7"); $a=$lo;
+
+$code.=<<___;
+#include <sparc_arch.h>
+
+#ifdef __arch64__
+.register %g2,#scratch
+.register %g3,#scratch
+#endif
+
+#ifdef __PIC__
+SPARC_PIC_THUNK(%g1)
+#endif
+
+.globl bn_GF2m_mul_2x2
+.align 16
+bn_GF2m_mul_2x2:
+ SPARC_LOAD_ADDRESS_LEAF(OPENSSL_sparcv9cap_P,%g1,%g5)
+ ld [%g1+0],%g1 ! OPENSSL_sparcv9cap_P[0]
+
+ andcc %g1, SPARCV9_VIS3, %g0
+ bz,pn %icc,.Lsoftware
+ nop
+
+ sllx %o1, 32, %o1
+ sllx %o3, 32, %o3
+ or %o2, %o1, %o1
+ or %o4, %o3, %o3
+ .word 0x95b262ab ! xmulx %o1, %o3, %o2
+ .word 0x99b262cb ! xmulxhi %o1, %o3, %o4
+ srlx %o2, 32, %o1 ! 13 cycles later
+ st %o2, [%o0+0]
+ st %o1, [%o0+4]
+ srlx %o4, 32, %o3
+ st %o4, [%o0+8]
+ retl
+ st %o3, [%o0+12]
+
+.align 16
+.Lsoftware:
+ save %sp,-STACK_FRAME-$locals,%sp
+
+ sllx %i1,32,$a
+ mov -1,$a12
+ sllx %i3,32,$b
+ or %i2,$a,$a
+ srlx $a12,1,$a48 ! 0x7fff...
+ or %i4,$b,$b
+ srlx $a12,2,$a12 ! 0x3fff...
+ add %sp,STACK_BIAS+STACK_FRAME,$tab
+
+ sllx $a,2,$a4
+ mov $a,$a1
+ sllx $a,1,$a2
+
+ srax $a4,63,@i[1] ! broadcast 61st bit
+ and $a48,$a4,$a4 ! (a<<2)&0x7fff...
+ srlx $a48,2,$a48
+ srax $a2,63,@i[0] ! broadcast 62nd bit
+ and $a12,$a2,$a2 ! (a<<1)&0x3fff...
+ srax $a1,63,$lo ! broadcast 63rd bit
+ and $a48,$a1,$a1 ! (a<<0)&0x1fff...
+
+ sllx $a1,3,$a8
+ and $b,$lo,$lo
+ and $b,@i[0],@i[0]
+ and $b,@i[1],@i[1]
+
+ stx %g0,[$tab+0*8] ! tab[0]=0
+ xor $a1,$a2,$a12
+ stx $a1,[$tab+1*8] ! tab[1]=a1
+ stx $a2,[$tab+2*8] ! tab[2]=a2
+ xor $a4,$a8,$a48
+ stx $a12,[$tab+3*8] ! tab[3]=a1^a2
+ xor $a4,$a1,$a1
+
+ stx $a4,[$tab+4*8] ! tab[4]=a4
+ xor $a4,$a2,$a2
+ stx $a1,[$tab+5*8] ! tab[5]=a1^a4
+ xor $a4,$a12,$a12
+ stx $a2,[$tab+6*8] ! tab[6]=a2^a4
+ xor $a48,$a1,$a1
+ stx $a12,[$tab+7*8] ! tab[7]=a1^a2^a4
+ xor $a48,$a2,$a2
+
+ stx $a8,[$tab+8*8] ! tab[8]=a8
+ xor $a48,$a12,$a12
+ stx $a1,[$tab+9*8] ! tab[9]=a1^a8
+ xor $a4,$a1,$a1
+ stx $a2,[$tab+10*8] ! tab[10]=a2^a8
+ xor $a4,$a2,$a2
+ stx $a12,[$tab+11*8] ! tab[11]=a1^a2^a8
+
+ xor $a4,$a12,$a12
+ stx $a48,[$tab+12*8] ! tab[12]=a4^a8
+ srlx $lo,1,$hi
+ stx $a1,[$tab+13*8] ! tab[13]=a1^a4^a8
+ sllx $lo,63,$lo
+ stx $a2,[$tab+14*8] ! tab[14]=a2^a4^a8
+ srlx @i[0],2,@T[0]
+ stx $a12,[$tab+15*8] ! tab[15]=a1^a2^a4^a8
+
+ sllx @i[0],62,$a1
+ sllx $b,3,@i[0]
+ srlx @i[1],3,@T[1]
+ and @i[0],`0xf<<3`,@i[0]
+ sllx @i[1],61,$a2
+ ldx [$tab+@i[0]],@i[0]
+ srlx $b,4-3,@i[1]
+ xor @T[0],$hi,$hi
+ and @i[1],`0xf<<3`,@i[1]
+ xor $a1,$lo,$lo
+ ldx [$tab+@i[1]],@i[1]
+ xor @T[1],$hi,$hi
+
+ xor @i[0],$lo,$lo
+ srlx $b,8-3,@i[0]
+ xor $a2,$lo,$lo
+ and @i[0],`0xf<<3`,@i[0]
+___
+for($n=1;$n<14;$n++) {
+$code.=<<___;
+ sllx @i[1],`$n*4`,@T[0]
+ ldx [$tab+@i[0]],@i[0]
+ srlx @i[1],`64-$n*4`,@T[1]
+ xor @T[0],$lo,$lo
+ srlx $b,`($n+2)*4`-3,@i[1]
+ xor @T[1],$hi,$hi
+ and @i[1],`0xf<<3`,@i[1]
+___
+ push(@i,shift(@i)); push(@T,shift(@T));
+}
+$code.=<<___;
+ sllx @i[1],`$n*4`,@T[0]
+ ldx [$tab+@i[0]],@i[0]
+ srlx @i[1],`64-$n*4`,@T[1]
+ xor @T[0],$lo,$lo
+
+ sllx @i[0],`($n+1)*4`,@T[0]
+ xor @T[1],$hi,$hi
+ srlx @i[0],`64-($n+1)*4`,@T[1]
+ xor @T[0],$lo,$lo
+ xor @T[1],$hi,$hi
+
+ srlx $lo,32,%i1
+ st $lo,[%i0+0]
+ st %i1,[%i0+4]
+ srlx $hi,32,%i2
+ st $hi,[%i0+8]
+ st %i2,[%i0+12]
+
+ ret
+ restore
+.type bn_GF2m_mul_2x2,#function
+.size bn_GF2m_mul_2x2,.-bn_GF2m_mul_2x2
+.asciz "GF(2^m) Multiplication for SPARCv9, CRYPTOGAMS by <appro\@openssl.org>"
+.align 4
+___
+
+$code =~ s/\`([^\`]*)\`/eval($1)/gem;
+print $code;
+close STDOUT;
diff --git a/crypto/openssl/crypto/bn/asm/vis3-mont.pl b/crypto/openssl/crypto/bn/asm/vis3-mont.pl
new file mode 100755
index 0000000..263ac02
--- /dev/null
+++ b/crypto/openssl/crypto/bn/asm/vis3-mont.pl
@@ -0,0 +1,373 @@
+#!/usr/bin/env perl
+
+# ====================================================================
+# Written by Andy Polyakov <appro@openssl.org> for the OpenSSL
+# project. The module is, however, dual licensed under OpenSSL and
+# CRYPTOGAMS licenses depending on where you obtain it. For further
+# details see http://www.openssl.org/~appro/cryptogams/.
+# ====================================================================
+
+# October 2012.
+#
+# SPARCv9 VIS3 Montgomery multiplicaion procedure suitable for T3 and
+# onward. There are three new instructions used here: umulxhi,
+# addxc[cc] and initializing store. On T3 RSA private key operations
+# are 1.54/1.87/2.11/2.26 times faster for 512/1024/2048/4096-bit key
+# lengths. This is without dedicated squaring procedure. On T4
+# corresponding coefficients are 1.47/2.10/2.80/2.90x, which is mostly
+# for reference purposes, because T4 has dedicated Montgomery
+# multiplication and squaring *instructions* that deliver even more.
+
+$bits=32;
+for (@ARGV) { $bits=64 if (/\-m64/ || /\-xarch\=v9/); }
+if ($bits==64) { $bias=2047; $frame=192; }
+else { $bias=0; $frame=112; }
+
+$code.=<<___ if ($bits==64);
+.register %g2,#scratch
+.register %g3,#scratch
+___
+$code.=<<___;
+.section ".text",#alloc,#execinstr
+___
+
+($n0,$m0,$m1,$lo0,$hi0, $lo1,$hi1,$aj,$alo,$nj,$nlo,$tj)=
+ (map("%g$_",(1..5)),map("%o$_",(0..5,7)));
+
+# int bn_mul_mont(
+$rp="%o0"; # BN_ULONG *rp,
+$ap="%o1"; # const BN_ULONG *ap,
+$bp="%o2"; # const BN_ULONG *bp,
+$np="%o3"; # const BN_ULONG *np,
+$n0p="%o4"; # const BN_ULONG *n0,
+$num="%o5"; # int num); # caller ensures that num is even
+ # and >=6
+$code.=<<___;
+.globl bn_mul_mont_vis3
+.align 32
+bn_mul_mont_vis3:
+ add %sp, $bias, %g4 ! real top of stack
+ sll $num, 2, $num ! size in bytes
+ add $num, 63, %g5
+ andn %g5, 63, %g5 ! buffer size rounded up to 64 bytes
+ add %g5, %g5, %g1
+ add %g5, %g1, %g1 ! 3*buffer size
+ sub %g4, %g1, %g1
+ andn %g1, 63, %g1 ! align at 64 byte
+ sub %g1, $frame, %g1 ! new top of stack
+ sub %g1, %g4, %g1
+
+ save %sp, %g1, %sp
+___
+
+# +-------------------------------+<----- %sp
+# . .
+# +-------------------------------+<----- aligned at 64 bytes
+# | __int64 tmp[0] |
+# +-------------------------------+
+# . .
+# . .
+# +-------------------------------+<----- aligned at 64 bytes
+# | __int64 ap[1..0] | converted ap[]
+# +-------------------------------+
+# | __int64 np[1..0] | converted np[]
+# +-------------------------------+
+# | __int64 ap[3..2] |
+# . .
+# . .
+# +-------------------------------+
+($rp,$ap,$bp,$np,$n0p,$num)=map("%i$_",(0..5));
+($t0,$t1,$t2,$t3,$cnt,$tp,$bufsz,$anp)=map("%l$_",(0..7));
+($ovf,$i)=($t0,$t1);
+$code.=<<___;
+ ld [$n0p+0], $t0 ! pull n0[0..1] value
+ add %sp, $bias+$frame, $tp
+ ld [$n0p+4], $t1
+ add $tp, %g5, $anp
+ ld [$bp+0], $t2 ! m0=bp[0]
+ sllx $t1, 32, $n0
+ ld [$bp+4], $t3
+ or $t0, $n0, $n0
+ add $bp, 8, $bp
+
+ ld [$ap+0], $t0 ! ap[0]
+ sllx $t3, 32, $m0
+ ld [$ap+4], $t1
+ or $t2, $m0, $m0
+
+ ld [$ap+8], $t2 ! ap[1]
+ sllx $t1, 32, $aj
+ ld [$ap+12], $t3
+ or $t0, $aj, $aj
+ add $ap, 16, $ap
+ stx $aj, [$anp] ! converted ap[0]
+
+ mulx $aj, $m0, $lo0 ! ap[0]*bp[0]
+ umulxhi $aj, $m0, $hi0
+
+ ld [$np+0], $t0 ! np[0]
+ sllx $t3, 32, $aj
+ ld [$np+4], $t1
+ or $t2, $aj, $aj
+
+ ld [$np+8], $t2 ! np[1]
+ sllx $t1, 32, $nj
+ ld [$np+12], $t3
+ or $t0, $nj, $nj
+ add $np, 16, $np
+ stx $nj, [$anp+8] ! converted np[0]
+
+ mulx $lo0, $n0, $m1 ! "tp[0]"*n0
+ stx $aj, [$anp+16] ! converted ap[1]
+
+ mulx $aj, $m0, $alo ! ap[1]*bp[0]
+ umulxhi $aj, $m0, $aj ! ahi=aj
+
+ mulx $nj, $m1, $lo1 ! np[0]*m1
+ umulxhi $nj, $m1, $hi1
+
+ sllx $t3, 32, $nj
+ or $t2, $nj, $nj
+ stx $nj, [$anp+24] ! converted np[1]
+ add $anp, 32, $anp
+
+ addcc $lo0, $lo1, $lo1
+ addxc %g0, $hi1, $hi1
+
+ mulx $nj, $m1, $nlo ! np[1]*m1
+ umulxhi $nj, $m1, $nj ! nhi=nj
+
+ ba .L1st
+ sub $num, 24, $cnt ! cnt=num-3
+
+.align 16
+.L1st:
+ ld [$ap+0], $t0 ! ap[j]
+ addcc $alo, $hi0, $lo0
+ ld [$ap+4], $t1
+ addxc $aj, %g0, $hi0
+
+ sllx $t1, 32, $aj
+ add $ap, 8, $ap
+ or $t0, $aj, $aj
+ stx $aj, [$anp] ! converted ap[j]
+
+ ld [$np+0], $t2 ! np[j]
+ addcc $nlo, $hi1, $lo1
+ ld [$np+4], $t3
+ addxc $nj, %g0, $hi1 ! nhi=nj
+
+ sllx $t3, 32, $nj
+ add $np, 8, $np
+ mulx $aj, $m0, $alo ! ap[j]*bp[0]
+ or $t2, $nj, $nj
+ umulxhi $aj, $m0, $aj ! ahi=aj
+ stx $nj, [$anp+8] ! converted np[j]
+ add $anp, 16, $anp ! anp++
+
+ mulx $nj, $m1, $nlo ! np[j]*m1
+ addcc $lo0, $lo1, $lo1 ! np[j]*m1+ap[j]*bp[0]
+ umulxhi $nj, $m1, $nj ! nhi=nj
+ addxc %g0, $hi1, $hi1
+ stx $lo1, [$tp] ! tp[j-1]
+ add $tp, 8, $tp ! tp++
+
+ brnz,pt $cnt, .L1st
+ sub $cnt, 8, $cnt ! j--
+!.L1st
+ addcc $alo, $hi0, $lo0
+ addxc $aj, %g0, $hi0 ! ahi=aj
+
+ addcc $nlo, $hi1, $lo1
+ addxc $nj, %g0, $hi1
+ addcc $lo0, $lo1, $lo1 ! np[j]*m1+ap[j]*bp[0]
+ addxc %g0, $hi1, $hi1
+ stx $lo1, [$tp] ! tp[j-1]
+ add $tp, 8, $tp
+
+ addcc $hi0, $hi1, $hi1
+ addxc %g0, %g0, $ovf ! upmost overflow bit
+ stx $hi1, [$tp]
+ add $tp, 8, $tp
+
+ ba .Louter
+ sub $num, 16, $i ! i=num-2
+
+.align 16
+.Louter:
+ ld [$bp+0], $t2 ! m0=bp[i]
+ ld [$bp+4], $t3
+
+ sub $anp, $num, $anp ! rewind
+ sub $tp, $num, $tp
+ sub $anp, $num, $anp
+
+ add $bp, 8, $bp
+ sllx $t3, 32, $m0
+ ldx [$anp+0], $aj ! ap[0]
+ or $t2, $m0, $m0
+ ldx [$anp+8], $nj ! np[0]
+
+ mulx $aj, $m0, $lo0 ! ap[0]*bp[i]
+ ldx [$tp], $tj ! tp[0]
+ umulxhi $aj, $m0, $hi0
+ ldx [$anp+16], $aj ! ap[1]
+ addcc $lo0, $tj, $lo0 ! ap[0]*bp[i]+tp[0]
+ mulx $aj, $m0, $alo ! ap[1]*bp[i]
+ addxc %g0, $hi0, $hi0
+ mulx $lo0, $n0, $m1 ! tp[0]*n0
+ umulxhi $aj, $m0, $aj ! ahi=aj
+ mulx $nj, $m1, $lo1 ! np[0]*m1
+ umulxhi $nj, $m1, $hi1
+ ldx [$anp+24], $nj ! np[1]
+ add $anp, 32, $anp
+ addcc $lo1, $lo0, $lo1
+ mulx $nj, $m1, $nlo ! np[1]*m1
+ addxc %g0, $hi1, $hi1
+ umulxhi $nj, $m1, $nj ! nhi=nj
+
+ ba .Linner
+ sub $num, 24, $cnt ! cnt=num-3
+.align 16
+.Linner:
+ addcc $alo, $hi0, $lo0
+ ldx [$tp+8], $tj ! tp[j]
+ addxc $aj, %g0, $hi0 ! ahi=aj
+ ldx [$anp+0], $aj ! ap[j]
+ addcc $nlo, $hi1, $lo1
+ mulx $aj, $m0, $alo ! ap[j]*bp[i]
+ addxc $nj, %g0, $hi1 ! nhi=nj
+ ldx [$anp+8], $nj ! np[j]
+ add $anp, 16, $anp
+ umulxhi $aj, $m0, $aj ! ahi=aj
+ addcc $lo0, $tj, $lo0 ! ap[j]*bp[i]+tp[j]
+ mulx $nj, $m1, $nlo ! np[j]*m1
+ addxc %g0, $hi0, $hi0
+ umulxhi $nj, $m1, $nj ! nhi=nj
+ addcc $lo1, $lo0, $lo1 ! np[j]*m1+ap[j]*bp[i]+tp[j]
+ addxc %g0, $hi1, $hi1
+ stx $lo1, [$tp] ! tp[j-1]
+ add $tp, 8, $tp
+ brnz,pt $cnt, .Linner
+ sub $cnt, 8, $cnt
+!.Linner
+ ldx [$tp+8], $tj ! tp[j]
+ addcc $alo, $hi0, $lo0
+ addxc $aj, %g0, $hi0 ! ahi=aj
+ addcc $lo0, $tj, $lo0 ! ap[j]*bp[i]+tp[j]
+ addxc %g0, $hi0, $hi0
+
+ addcc $nlo, $hi1, $lo1
+ addxc $nj, %g0, $hi1 ! nhi=nj
+ addcc $lo1, $lo0, $lo1 ! np[j]*m1+ap[j]*bp[i]+tp[j]
+ addxc %g0, $hi1, $hi1
+ stx $lo1, [$tp] ! tp[j-1]
+
+ subcc %g0, $ovf, %g0 ! move upmost overflow to CCR.xcc
+ addxccc $hi1, $hi0, $hi1
+ addxc %g0, %g0, $ovf
+ stx $hi1, [$tp+8]
+ add $tp, 16, $tp
+
+ brnz,pt $i, .Louter
+ sub $i, 8, $i
+
+ sub $anp, $num, $anp ! rewind
+ sub $tp, $num, $tp
+ sub $anp, $num, $anp
+ ba .Lsub
+ subcc $num, 8, $cnt ! cnt=num-1 and clear CCR.xcc
+
+.align 16
+.Lsub:
+ ldx [$tp], $tj
+ add $tp, 8, $tp
+ ldx [$anp+8], $nj
+ add $anp, 16, $anp
+ subccc $tj, $nj, $t2 ! tp[j]-np[j]
+ srlx $tj, 32, $tj
+ srlx $nj, 32, $nj
+ subccc $tj, $nj, $t3
+ add $rp, 8, $rp
+ st $t2, [$rp-4] ! reverse order
+ st $t3, [$rp-8]
+ brnz,pt $cnt, .Lsub
+ sub $cnt, 8, $cnt
+
+ sub $anp, $num, $anp ! rewind
+ sub $tp, $num, $tp
+ sub $anp, $num, $anp
+ sub $rp, $num, $rp
+
+ subc $ovf, %g0, $ovf ! handle upmost overflow bit
+ and $tp, $ovf, $ap
+ andn $rp, $ovf, $np
+ or $np, $ap, $ap ! ap=borrow?tp:rp
+ ba .Lcopy
+ sub $num, 8, $cnt
+
+.align 16
+.Lcopy: ! copy or in-place refresh
+ ld [$ap+0], $t2
+ ld [$ap+4], $t3
+ add $ap, 8, $ap
+ stx %g0, [$tp] ! zap
+ add $tp, 8, $tp
+ stx %g0, [$anp] ! zap
+ stx %g0, [$anp+8]
+ add $anp, 16, $anp
+ st $t3, [$rp+0] ! flip order
+ st $t2, [$rp+4]
+ add $rp, 8, $rp
+ brnz $cnt, .Lcopy
+ sub $cnt, 8, $cnt
+
+ mov 1, %o0
+ ret
+ restore
+.type bn_mul_mont_vis3, #function
+.size bn_mul_mont_vis3, .-bn_mul_mont_vis3
+.asciz "Montgomery Multiplication for SPARCv9 VIS3, CRYPTOGAMS by <appro\@openssl.org>"
+.align 4
+___
+
+# Purpose of these subroutines is to explicitly encode VIS instructions,
+# so that one can compile the module without having to specify VIS
+# extentions on compiler command line, e.g. -xarch=v9 vs. -xarch=v9a.
+# Idea is to reserve for option to produce "universal" binary and let
+# programmer detect if current CPU is VIS capable at run-time.
+sub unvis3 {
+my ($mnemonic,$rs1,$rs2,$rd)=@_;
+my %bias = ( "g" => 0, "o" => 8, "l" => 16, "i" => 24 );
+my ($ref,$opf);
+my %visopf = ( "addxc" => 0x011,
+ "addxccc" => 0x013,
+ "umulxhi" => 0x016 );
+
+ $ref = "$mnemonic\t$rs1,$rs2,$rd";
+
+ if ($opf=$visopf{$mnemonic}) {
+ foreach ($rs1,$rs2,$rd) {
+ return $ref if (!/%([goli])([0-9])/);
+ $_=$bias{$1}+$2;
+ }
+
+ return sprintf ".word\t0x%08x !%s",
+ 0x81b00000|$rd<<25|$rs1<<14|$opf<<5|$rs2,
+ $ref;
+ } else {
+ return $ref;
+ }
+}
+
+foreach (split("\n",$code)) {
+ s/\`([^\`]*)\`/eval $1/ge;
+
+ s/\b(umulxhi|addxc[c]{0,2})\s+(%[goli][0-7]),\s*(%[goli][0-7]),\s*(%[goli][0-7])/
+ &unvis3($1,$2,$3,$4)
+ /ge;
+
+ print $_,"\n";
+}
+
+close STDOUT;
diff --git a/crypto/openssl/crypto/bn/asm/x86_64-gcc.c b/crypto/openssl/crypto/bn/asm/x86_64-gcc.c
index 9c5074b..d548886 100644
--- a/crypto/openssl/crypto/bn/asm/x86_64-gcc.c
+++ b/crypto/openssl/crypto/bn/asm/x86_64-gcc.c
@@ -55,7 +55,7 @@
* machine.
*/
-# ifdef _WIN64
+# if defined(_WIN64) || !defined(__LP64__)
# define BN_ULONG unsigned long long
# else
# define BN_ULONG unsigned long
@@ -63,7 +63,6 @@
# undef mul
# undef mul_add
-# undef sqr
/*-
* "m"(a), "+m"(r) is the way to favor DirectPath µ-code;
@@ -99,8 +98,8 @@
: "cc"); \
(r)=carry, carry=high; \
} while (0)
-
-# define sqr(r0,r1,a) \
+# undef sqr
+# define sqr(r0,r1,a) \
asm ("mulq %2" \
: "=a"(r0),"=d"(r1) \
: "a"(a) \
@@ -204,20 +203,22 @@ BN_ULONG bn_div_words(BN_ULONG h, BN_ULONG l, BN_ULONG d)
BN_ULONG bn_add_words(BN_ULONG *rp, const BN_ULONG *ap, const BN_ULONG *bp,
int n)
{
- BN_ULONG ret = 0, i = 0;
+ BN_ULONG ret;
+ size_t i = 0;
if (n <= 0)
return 0;
- asm volatile (" subq %2,%2 \n"
+ asm volatile (" subq %0,%0 \n" /* clear carry */
+ " jmp 1f \n"
".p2align 4 \n"
"1: movq (%4,%2,8),%0 \n"
" adcq (%5,%2,8),%0 \n"
" movq %0,(%3,%2,8) \n"
- " leaq 1(%2),%2 \n"
+ " lea 1(%2),%2 \n"
" loop 1b \n"
- " sbbq %0,%0 \n":"=&a" (ret), "+c"(n),
- "=&r"(i)
+ " sbbq %0,%0 \n":"=&r" (ret), "+c"(n),
+ "+r"(i)
:"r"(rp), "r"(ap), "r"(bp)
:"cc", "memory");
@@ -228,20 +229,22 @@ BN_ULONG bn_add_words(BN_ULONG *rp, const BN_ULONG *ap, const BN_ULONG *bp,
BN_ULONG bn_sub_words(BN_ULONG *rp, const BN_ULONG *ap, const BN_ULONG *bp,
int n)
{
- BN_ULONG ret = 0, i = 0;
+ BN_ULONG ret;
+ size_t i = 0;
if (n <= 0)
return 0;
- asm volatile (" subq %2,%2 \n"
+ asm volatile (" subq %0,%0 \n" /* clear borrow */
+ " jmp 1f \n"
".p2align 4 \n"
"1: movq (%4,%2,8),%0 \n"
" sbbq (%5,%2,8),%0 \n"
" movq %0,(%3,%2,8) \n"
- " leaq 1(%2),%2 \n"
+ " lea 1(%2),%2 \n"
" loop 1b \n"
- " sbbq %0,%0 \n":"=&a" (ret), "+c"(n),
- "=&r"(i)
+ " sbbq %0,%0 \n":"=&r" (ret), "+c"(n),
+ "+r"(i)
:"r"(rp), "r"(ap), "r"(bp)
:"cc", "memory");
@@ -313,55 +316,58 @@ BN_ULONG bn_sub_words(BN_ULONG *r, BN_ULONG *a, BN_ULONG *b, int n)
*/
# if 0
/* original macros are kept for reference purposes */
-# define mul_add_c(a,b,c0,c1,c2) { \
- BN_ULONG ta=(a),tb=(b); \
- t1 = ta * tb; \
- t2 = BN_UMULT_HIGH(ta,tb); \
- c0 += t1; t2 += (c0<t1)?1:0; \
- c1 += t2; c2 += (c1<t2)?1:0; \
- }
-
-# define mul_add_c2(a,b,c0,c1,c2) { \
- BN_ULONG ta=(a),tb=(b),t0; \
- t1 = BN_UMULT_HIGH(ta,tb); \
- t0 = ta * tb; \
- c0 += t0; t2 = t1+((c0<t0)?1:0);\
- c1 += t2; c2 += (c1<t2)?1:0; \
- c0 += t0; t1 += (c0<t0)?1:0; \
- c1 += t1; c2 += (c1<t1)?1:0; \
- }
+# define mul_add_c(a,b,c0,c1,c2) do { \
+ BN_ULONG ta = (a), tb = (b); \
+ BN_ULONG lo, hi; \
+ BN_UMULT_LOHI(lo,hi,ta,tb); \
+ c0 += lo; hi += (c0<lo)?1:0; \
+ c1 += hi; c2 += (c1<hi)?1:0; \
+ } while(0)
+
+# define mul_add_c2(a,b,c0,c1,c2) do { \
+ BN_ULONG ta = (a), tb = (b); \
+ BN_ULONG lo, hi, tt; \
+ BN_UMULT_LOHI(lo,hi,ta,tb); \
+ c0 += lo; tt = hi+((c0<lo)?1:0); \
+ c1 += tt; c2 += (c1<tt)?1:0; \
+ c0 += lo; hi += (c0<lo)?1:0; \
+ c1 += hi; c2 += (c1<hi)?1:0; \
+ } while(0)
+
+# define sqr_add_c(a,i,c0,c1,c2) do { \
+ BN_ULONG ta = (a)[i]; \
+ BN_ULONG lo, hi; \
+ BN_UMULT_LOHI(lo,hi,ta,ta); \
+ c0 += lo; hi += (c0<lo)?1:0; \
+ c1 += hi; c2 += (c1<hi)?1:0; \
+ } while(0)
# else
-# define mul_add_c(a,b,c0,c1,c2) do { \
+# define mul_add_c(a,b,c0,c1,c2) do { \
+ BN_ULONG t1,t2; \
asm ("mulq %3" \
: "=a"(t1),"=d"(t2) \
: "a"(a),"m"(b) \
: "cc"); \
- asm ("addq %2,%0; adcq %3,%1" \
- : "+r"(c0),"+d"(t2) \
- : "a"(t1),"g"(0) \
- : "cc"); \
- asm ("addq %2,%0; adcq %3,%1" \
- : "+r"(c1),"+r"(c2) \
- : "d"(t2),"g"(0) \
- : "cc"); \
+ asm ("addq %3,%0; adcq %4,%1; adcq %5,%2" \
+ : "+r"(c0),"+r"(c1),"+r"(c2) \
+ : "r"(t1),"r"(t2),"g"(0) \
+ : "cc"); \
} while (0)
-# define sqr_add_c(a,i,c0,c1,c2) do { \
+# define sqr_add_c(a,i,c0,c1,c2) do { \
+ BN_ULONG t1,t2; \
asm ("mulq %2" \
: "=a"(t1),"=d"(t2) \
: "a"(a[i]) \
: "cc"); \
- asm ("addq %2,%0; adcq %3,%1" \
- : "+r"(c0),"+d"(t2) \
- : "a"(t1),"g"(0) \
- : "cc"); \
- asm ("addq %2,%0; adcq %3,%1" \
- : "+r"(c1),"+r"(c2) \
- : "d"(t2),"g"(0) \
- : "cc"); \
+ asm ("addq %3,%0; adcq %4,%1; adcq %5,%2" \
+ : "+r"(c0),"+r"(c1),"+r"(c2) \
+ : "r"(t1),"r"(t2),"g"(0) \
+ : "cc"); \
} while (0)
-# define mul_add_c2(a,b,c0,c1,c2) do { \
+# define mul_add_c2(a,b,c0,c1,c2) do { \
+ BN_ULONG t1,t2; \
asm ("mulq %3" \
: "=a"(t1),"=d"(t2) \
: "a"(a),"m"(b) \
@@ -382,7 +388,6 @@ BN_ULONG bn_sub_words(BN_ULONG *r, BN_ULONG *a, BN_ULONG *b, int n)
void bn_mul_comba8(BN_ULONG *r, BN_ULONG *a, BN_ULONG *b)
{
- BN_ULONG t1, t2;
BN_ULONG c1, c2, c3;
c1 = 0;
@@ -486,7 +491,6 @@ void bn_mul_comba8(BN_ULONG *r, BN_ULONG *a, BN_ULONG *b)
void bn_mul_comba4(BN_ULONG *r, BN_ULONG *a, BN_ULONG *b)
{
- BN_ULONG t1, t2;
BN_ULONG c1, c2, c3;
c1 = 0;
@@ -526,7 +530,6 @@ void bn_mul_comba4(BN_ULONG *r, BN_ULONG *a, BN_ULONG *b)
void bn_sqr_comba8(BN_ULONG *r, const BN_ULONG *a)
{
- BN_ULONG t1, t2;
BN_ULONG c1, c2, c3;
c1 = 0;
@@ -602,7 +605,6 @@ void bn_sqr_comba8(BN_ULONG *r, const BN_ULONG *a)
void bn_sqr_comba4(BN_ULONG *r, const BN_ULONG *a)
{
- BN_ULONG t1, t2;
BN_ULONG c1, c2, c3;
c1 = 0;
diff --git a/crypto/openssl/crypto/bn/asm/x86_64-mont.pl b/crypto/openssl/crypto/bn/asm/x86_64-mont.pl
index 17fb94c..2989b58 100755
--- a/crypto/openssl/crypto/bn/asm/x86_64-mont.pl
+++ b/crypto/openssl/crypto/bn/asm/x86_64-mont.pl
@@ -29,6 +29,16 @@
# to *initial* version of this module from 2005 is ~0%/30%/40%/45%
# for 512-/1024-/2048-/4096-bit RSA *sign* benchmarks respectively.
+# June 2013.
+#
+# Optimize reduction in squaring procedure and improve 1024+-bit RSA
+# sign performance by 10-16% on Intel Sandy Bridge and later
+# (virtually same on non-Intel processors).
+
+# August 2013.
+#
+# Add MULX/ADOX/ADCX code path.
+
$flavour = shift;
$output = shift;
if ($flavour =~ /\./) { $output = $flavour; undef $flavour; }
@@ -43,6 +53,21 @@ die "can't locate x86_64-xlate.pl";
open OUT,"| \"$^X\" $xlate $flavour $output";
*STDOUT=*OUT;
+if (`$ENV{CC} -Wa,-v -c -o /dev/null -x assembler /dev/null 2>&1`
+ =~ /GNU assembler version ([2-9]\.[0-9]+)/) {
+ $addx = ($1>=2.23);
+}
+
+if (!$addx && $win64 && ($flavour =~ /nasm/ || $ENV{ASM} =~ /nasm/) &&
+ `nasm -v 2>&1` =~ /NASM version ([2-9]\.[0-9]+)/) {
+ $addx = ($1>=2.10);
+}
+
+if (!$addx && $win64 && ($flavour =~ /masm/ || $ENV{ASM} =~ /ml64/) &&
+ `ml64 2>&1` =~ /Version ([0-9]+)\./) {
+ $addx = ($1>=12);
+}
+
# int bn_mul_mont(
$rp="%rdi"; # BN_ULONG *rp,
$ap="%rsi"; # const BN_ULONG *ap,
@@ -61,6 +86,8 @@ $m1="%rbp";
$code=<<___;
.text
+.extern OPENSSL_ia32cap_P
+
.globl bn_mul_mont
.type bn_mul_mont,\@function,6
.align 16
@@ -69,9 +96,16 @@ bn_mul_mont:
jnz .Lmul_enter
cmp \$8,${num}d
jb .Lmul_enter
+___
+$code.=<<___ if ($addx);
+ mov OPENSSL_ia32cap_P+8(%rip),%r11d
+___
+$code.=<<___;
cmp $ap,$bp
jne .Lmul4x_enter
- jmp .Lsqr4x_enter
+ test \$7,${num}d
+ jz .Lsqr8x_enter
+ jmp .Lmul4x_enter
.align 16
.Lmul_enter:
@@ -227,7 +261,7 @@ $code.=<<___;
lea 1($i),$i # i++
cmp $num,$i
- jl .Louter
+ jb .Louter
xor $i,$i # i=0 and clear CF!
mov (%rsp),%rax # tp[0]
@@ -280,6 +314,13 @@ $code.=<<___;
.align 16
bn_mul4x_mont:
.Lmul4x_enter:
+___
+$code.=<<___ if ($addx);
+ and \$0x80100,%r11d
+ cmp \$0x80100,%r11d
+ je .Lmulx4x_enter
+___
+$code.=<<___;
push %rbx
push %rbp
push %r12
@@ -401,7 +442,7 @@ $code.=<<___;
mov $N[1],-32(%rsp,$j,8) # tp[j-1]
mov %rdx,$N[0]
cmp $num,$j
- jl .L1st4x
+ jb .L1st4x
mulq $m0 # ap[j]*bp[0]
add %rax,$A[0]
@@ -549,7 +590,7 @@ $code.=<<___;
mov $N[1],-32(%rsp,$j,8) # tp[j-1]
mov %rdx,$N[0]
cmp $num,$j
- jl .Linner4x
+ jb .Linner4x
mulq $m0 # ap[j]*bp[i]
add %rax,$A[0]
@@ -595,7 +636,7 @@ $code.=<<___;
mov $N[1],(%rsp,$j,8) # store upmost overflow bit
cmp $num,$i
- jl .Louter4x
+ jb .Louter4x
___
{
my @ri=("%rax","%rdx",$m0,$m1);
@@ -688,25 +729,30 @@ ___
}}}
{{{
######################################################################
-# void bn_sqr4x_mont(
+# void bn_sqr8x_mont(
my $rptr="%rdi"; # const BN_ULONG *rptr,
my $aptr="%rsi"; # const BN_ULONG *aptr,
my $bptr="%rdx"; # not used
my $nptr="%rcx"; # const BN_ULONG *nptr,
my $n0 ="%r8"; # const BN_ULONG *n0);
-my $num ="%r9"; # int num, has to be divisible by 4 and
- # not less than 8
+my $num ="%r9"; # int num, has to be divisible by 8
my ($i,$j,$tptr)=("%rbp","%rcx",$rptr);
my @A0=("%r10","%r11");
my @A1=("%r12","%r13");
my ($a0,$a1,$ai)=("%r14","%r15","%rbx");
+$code.=<<___ if ($addx);
+.extern bn_sqrx8x_internal # see x86_64-mont5 module
+___
$code.=<<___;
-.type bn_sqr4x_mont,\@function,6
-.align 16
-bn_sqr4x_mont:
-.Lsqr4x_enter:
+.extern bn_sqr8x_internal # see x86_64-mont5 module
+
+.type bn_sqr8x_mont,\@function,6
+.align 32
+bn_sqr8x_mont:
+.Lsqr8x_enter:
+ mov %rsp,%rax
push %rbx
push %rbp
push %r12
@@ -714,787 +760,445 @@ bn_sqr4x_mont:
push %r14
push %r15
+ mov ${num}d,%r10d
shl \$3,${num}d # convert $num to bytes
- xor %r10,%r10
- mov %rsp,%r11 # put aside %rsp
- sub $num,%r10 # -$num
- mov ($n0),$n0 # *n0
- lea -72(%rsp,%r10,2),%rsp # alloca(frame+2*$num)
- and \$-1024,%rsp # minimize TLB usage
- ##############################################################
- # Stack layout
- #
- # +0 saved $num, used in reduction section
- # +8 &t[2*$num], used in reduction section
- # +32 saved $rptr
- # +40 saved $nptr
- # +48 saved *n0
- # +56 saved %rsp
- # +64 t[2*$num]
- #
- mov $rptr,32(%rsp) # save $rptr
- mov $nptr,40(%rsp)
- mov $n0, 48(%rsp)
- mov %r11, 56(%rsp) # save original %rsp
-.Lsqr4x_body:
+ shl \$3+2,%r10 # 4*$num
+ neg $num
+
##############################################################
- # Squaring part:
- #
- # a) multiply-n-add everything but a[i]*a[i];
- # b) shift result of a) by 1 to the left and accumulate
- # a[i]*a[i] products;
+ # ensure that stack frame doesn't alias with $aptr modulo
+ # 4096. this is done to allow memory disambiguation logic
+ # do its job.
#
- lea 32(%r10),$i # $i=-($num-32)
- lea ($aptr,$num),$aptr # end of a[] buffer, ($aptr,$i)=&ap[2]
-
- mov $num,$j # $j=$num
-
- # comments apply to $num==8 case
- mov -32($aptr,$i),$a0 # a[0]
- lea 64(%rsp,$num,2),$tptr # end of tp[] buffer, &tp[2*$num]
- mov -24($aptr,$i),%rax # a[1]
- lea -32($tptr,$i),$tptr # end of tp[] window, &tp[2*$num-"$i"]
- mov -16($aptr,$i),$ai # a[2]
- mov %rax,$a1
-
- mul $a0 # a[1]*a[0]
- mov %rax,$A0[0] # a[1]*a[0]
- mov $ai,%rax # a[2]
- mov %rdx,$A0[1]
- mov $A0[0],-24($tptr,$i) # t[1]
-
- xor $A0[0],$A0[0]
- mul $a0 # a[2]*a[0]
- add %rax,$A0[1]
- mov $ai,%rax
- adc %rdx,$A0[0]
- mov $A0[1],-16($tptr,$i) # t[2]
-
- lea -16($i),$j # j=-16
-
-
- mov 8($aptr,$j),$ai # a[3]
- mul $a1 # a[2]*a[1]
- mov %rax,$A1[0] # a[2]*a[1]+t[3]
- mov $ai,%rax
- mov %rdx,$A1[1]
-
- xor $A0[1],$A0[1]
- add $A1[0],$A0[0]
- lea 16($j),$j
- adc \$0,$A0[1]
- mul $a0 # a[3]*a[0]
- add %rax,$A0[0] # a[3]*a[0]+a[2]*a[1]+t[3]
- mov $ai,%rax
- adc %rdx,$A0[1]
- mov $A0[0],-8($tptr,$j) # t[3]
- jmp .Lsqr4x_1st
+ lea -64(%rsp,$num,4),%r11
+ mov ($n0),$n0 # *n0
+ sub $aptr,%r11
+ and \$4095,%r11
+ cmp %r11,%r10
+ jb .Lsqr8x_sp_alt
+ sub %r11,%rsp # align with $aptr
+ lea -64(%rsp,$num,4),%rsp # alloca(frame+4*$num)
+ jmp .Lsqr8x_sp_done
+
+.align 32
+.Lsqr8x_sp_alt:
+ lea 4096-64(,$num,4),%r10 # 4096-frame-4*$num
+ lea -64(%rsp,$num,4),%rsp # alloca(frame+4*$num)
+ sub %r10,%r11
+ mov \$0,%r10
+ cmovc %r10,%r11
+ sub %r11,%rsp
+.Lsqr8x_sp_done:
+ and \$-64,%rsp
+ mov $num,%r10
+ neg $num
+
+ lea 64(%rsp,$num,2),%r11 # copy of modulus
+ mov $n0, 32(%rsp)
+ mov %rax, 40(%rsp) # save original %rsp
+.Lsqr8x_body:
+
+ mov $num,$i
+ movq %r11, %xmm2 # save pointer to modulus copy
+ shr \$3+2,$i
+ mov OPENSSL_ia32cap_P+8(%rip),%eax
+ jmp .Lsqr8x_copy_n
+
+.align 32
+.Lsqr8x_copy_n:
+ movq 8*0($nptr),%xmm0
+ movq 8*1($nptr),%xmm1
+ movq 8*2($nptr),%xmm3
+ movq 8*3($nptr),%xmm4
+ lea 8*4($nptr),$nptr
+ movdqa %xmm0,16*0(%r11)
+ movdqa %xmm1,16*1(%r11)
+ movdqa %xmm3,16*2(%r11)
+ movdqa %xmm4,16*3(%r11)
+ lea 16*4(%r11),%r11
+ dec $i
+ jnz .Lsqr8x_copy_n
-.align 16
-.Lsqr4x_1st:
- mov ($aptr,$j),$ai # a[4]
- xor $A1[0],$A1[0]
- mul $a1 # a[3]*a[1]
- add %rax,$A1[1] # a[3]*a[1]+t[4]
- mov $ai,%rax
- adc %rdx,$A1[0]
-
- xor $A0[0],$A0[0]
- add $A1[1],$A0[1]
- adc \$0,$A0[0]
- mul $a0 # a[4]*a[0]
- add %rax,$A0[1] # a[4]*a[0]+a[3]*a[1]+t[4]
- mov $ai,%rax # a[3]
- adc %rdx,$A0[0]
- mov $A0[1],($tptr,$j) # t[4]
-
-
- mov 8($aptr,$j),$ai # a[5]
- xor $A1[1],$A1[1]
- mul $a1 # a[4]*a[3]
- add %rax,$A1[0] # a[4]*a[3]+t[5]
- mov $ai,%rax
- adc %rdx,$A1[1]
-
- xor $A0[1],$A0[1]
- add $A1[0],$A0[0]
- adc \$0,$A0[1]
- mul $a0 # a[5]*a[2]
- add %rax,$A0[0] # a[5]*a[2]+a[4]*a[3]+t[5]
- mov $ai,%rax
- adc %rdx,$A0[1]
- mov $A0[0],8($tptr,$j) # t[5]
-
- mov 16($aptr,$j),$ai # a[6]
- xor $A1[0],$A1[0]
- mul $a1 # a[5]*a[3]
- add %rax,$A1[1] # a[5]*a[3]+t[6]
- mov $ai,%rax
- adc %rdx,$A1[0]
-
- xor $A0[0],$A0[0]
- add $A1[1],$A0[1]
- adc \$0,$A0[0]
- mul $a0 # a[6]*a[2]
- add %rax,$A0[1] # a[6]*a[2]+a[5]*a[3]+t[6]
- mov $ai,%rax # a[3]
- adc %rdx,$A0[0]
- mov $A0[1],16($tptr,$j) # t[6]
-
-
- mov 24($aptr,$j),$ai # a[7]
- xor $A1[1],$A1[1]
- mul $a1 # a[6]*a[5]
- add %rax,$A1[0] # a[6]*a[5]+t[7]
- mov $ai,%rax
- adc %rdx,$A1[1]
-
- xor $A0[1],$A0[1]
- add $A1[0],$A0[0]
- lea 32($j),$j
- adc \$0,$A0[1]
- mul $a0 # a[7]*a[4]
- add %rax,$A0[0] # a[7]*a[4]+a[6]*a[5]+t[6]
- mov $ai,%rax
- adc %rdx,$A0[1]
- mov $A0[0],-8($tptr,$j) # t[7]
-
- cmp \$0,$j
- jne .Lsqr4x_1st
-
- xor $A1[0],$A1[0]
- add $A0[1],$A1[1]
- adc \$0,$A1[0]
- mul $a1 # a[7]*a[5]
- add %rax,$A1[1]
- adc %rdx,$A1[0]
-
- mov $A1[1],($tptr) # t[8]
- lea 16($i),$i
- mov $A1[0],8($tptr) # t[9]
- jmp .Lsqr4x_outer
+ pxor %xmm0,%xmm0
+ movq $rptr,%xmm1 # save $rptr
+ movq %r10, %xmm3 # -$num
+___
+$code.=<<___ if ($addx);
+ and \$0x80100,%eax
+ cmp \$0x80100,%eax
+ jne .Lsqr8x_nox
-.align 16
-.Lsqr4x_outer: # comments apply to $num==6 case
- mov -32($aptr,$i),$a0 # a[0]
- lea 64(%rsp,$num,2),$tptr # end of tp[] buffer, &tp[2*$num]
- mov -24($aptr,$i),%rax # a[1]
- lea -32($tptr,$i),$tptr # end of tp[] window, &tp[2*$num-"$i"]
- mov -16($aptr,$i),$ai # a[2]
- mov %rax,$a1
-
- mov -24($tptr,$i),$A0[0] # t[1]
- xor $A0[1],$A0[1]
- mul $a0 # a[1]*a[0]
- add %rax,$A0[0] # a[1]*a[0]+t[1]
- mov $ai,%rax # a[2]
- adc %rdx,$A0[1]
- mov $A0[0],-24($tptr,$i) # t[1]
-
- xor $A0[0],$A0[0]
- add -16($tptr,$i),$A0[1] # a[2]*a[0]+t[2]
- adc \$0,$A0[0]
- mul $a0 # a[2]*a[0]
- add %rax,$A0[1]
- mov $ai,%rax
- adc %rdx,$A0[0]
- mov $A0[1],-16($tptr,$i) # t[2]
-
- lea -16($i),$j # j=-16
- xor $A1[0],$A1[0]
-
-
- mov 8($aptr,$j),$ai # a[3]
- xor $A1[1],$A1[1]
- add 8($tptr,$j),$A1[0]
- adc \$0,$A1[1]
- mul $a1 # a[2]*a[1]
- add %rax,$A1[0] # a[2]*a[1]+t[3]
- mov $ai,%rax
- adc %rdx,$A1[1]
-
- xor $A0[1],$A0[1]
- add $A1[0],$A0[0]
- adc \$0,$A0[1]
- mul $a0 # a[3]*a[0]
- add %rax,$A0[0] # a[3]*a[0]+a[2]*a[1]+t[3]
- mov $ai,%rax
- adc %rdx,$A0[1]
- mov $A0[0],8($tptr,$j) # t[3]
-
- lea 16($j),$j
- jmp .Lsqr4x_inner
+ call bn_sqrx8x_internal # see x86_64-mont5 module
-.align 16
-.Lsqr4x_inner:
- mov ($aptr,$j),$ai # a[4]
- xor $A1[0],$A1[0]
- add ($tptr,$j),$A1[1]
- adc \$0,$A1[0]
- mul $a1 # a[3]*a[1]
- add %rax,$A1[1] # a[3]*a[1]+t[4]
- mov $ai,%rax
- adc %rdx,$A1[0]
-
- xor $A0[0],$A0[0]
- add $A1[1],$A0[1]
- adc \$0,$A0[0]
- mul $a0 # a[4]*a[0]
- add %rax,$A0[1] # a[4]*a[0]+a[3]*a[1]+t[4]
- mov $ai,%rax # a[3]
- adc %rdx,$A0[0]
- mov $A0[1],($tptr,$j) # t[4]
-
- mov 8($aptr,$j),$ai # a[5]
- xor $A1[1],$A1[1]
- add 8($tptr,$j),$A1[0]
- adc \$0,$A1[1]
- mul $a1 # a[4]*a[3]
- add %rax,$A1[0] # a[4]*a[3]+t[5]
- mov $ai,%rax
- adc %rdx,$A1[1]
-
- xor $A0[1],$A0[1]
- add $A1[0],$A0[0]
- lea 16($j),$j # j++
- adc \$0,$A0[1]
- mul $a0 # a[5]*a[2]
- add %rax,$A0[0] # a[5]*a[2]+a[4]*a[3]+t[5]
- mov $ai,%rax
- adc %rdx,$A0[1]
- mov $A0[0],-8($tptr,$j) # t[5], "preloaded t[1]" below
-
- cmp \$0,$j
- jne .Lsqr4x_inner
-
- xor $A1[0],$A1[0]
- add $A0[1],$A1[1]
- adc \$0,$A1[0]
- mul $a1 # a[5]*a[3]
- add %rax,$A1[1]
- adc %rdx,$A1[0]
-
- mov $A1[1],($tptr) # t[6], "preloaded t[2]" below
- mov $A1[0],8($tptr) # t[7], "preloaded t[3]" below
-
- add \$16,$i
- jnz .Lsqr4x_outer
-
- # comments apply to $num==4 case
- mov -32($aptr),$a0 # a[0]
- lea 64(%rsp,$num,2),$tptr # end of tp[] buffer, &tp[2*$num]
- mov -24($aptr),%rax # a[1]
- lea -32($tptr,$i),$tptr # end of tp[] window, &tp[2*$num-"$i"]
- mov -16($aptr),$ai # a[2]
- mov %rax,$a1
-
- xor $A0[1],$A0[1]
- mul $a0 # a[1]*a[0]
- add %rax,$A0[0] # a[1]*a[0]+t[1], preloaded t[1]
- mov $ai,%rax # a[2]
- adc %rdx,$A0[1]
- mov $A0[0],-24($tptr) # t[1]
-
- xor $A0[0],$A0[0]
- add $A1[1],$A0[1] # a[2]*a[0]+t[2], preloaded t[2]
- adc \$0,$A0[0]
- mul $a0 # a[2]*a[0]
- add %rax,$A0[1]
- mov $ai,%rax
- adc %rdx,$A0[0]
- mov $A0[1],-16($tptr) # t[2]
-
- mov -8($aptr),$ai # a[3]
- mul $a1 # a[2]*a[1]
- add %rax,$A1[0] # a[2]*a[1]+t[3], preloaded t[3]
- mov $ai,%rax
- adc \$0,%rdx
-
- xor $A0[1],$A0[1]
- add $A1[0],$A0[0]
- mov %rdx,$A1[1]
- adc \$0,$A0[1]
- mul $a0 # a[3]*a[0]
- add %rax,$A0[0] # a[3]*a[0]+a[2]*a[1]+t[3]
- mov $ai,%rax
- adc %rdx,$A0[1]
- mov $A0[0],-8($tptr) # t[3]
-
- xor $A1[0],$A1[0]
- add $A0[1],$A1[1]
- adc \$0,$A1[0]
- mul $a1 # a[3]*a[1]
- add %rax,$A1[1]
- mov -16($aptr),%rax # a[2]
- adc %rdx,$A1[0]
-
- mov $A1[1],($tptr) # t[4]
- mov $A1[0],8($tptr) # t[5]
-
- mul $ai # a[2]*a[3]
+ pxor %xmm0,%xmm0
+ lea 48(%rsp),%rax
+ lea 64(%rsp,$num,2),%rdx
+ shr \$3+2,$num
+ mov 40(%rsp),%rsi # restore %rsp
+ jmp .Lsqr8x_zero
+
+.align 32
+.Lsqr8x_nox:
___
-{
-my ($shift,$carry)=($a0,$a1);
-my @S=(@A1,$ai,$n0);
$code.=<<___;
- add \$16,$i
- xor $shift,$shift
- sub $num,$i # $i=16-$num
- xor $carry,$carry
-
- add $A1[0],%rax # t[5]
- adc \$0,%rdx
- mov %rax,8($tptr) # t[5]
- mov %rdx,16($tptr) # t[6]
- mov $carry,24($tptr) # t[7]
-
- mov -16($aptr,$i),%rax # a[0]
- lea 64(%rsp,$num,2),$tptr
- xor $A0[0],$A0[0] # t[0]
- mov -24($tptr,$i,2),$A0[1] # t[1]
-
- lea ($shift,$A0[0],2),$S[0] # t[2*i]<<1 | shift
- shr \$63,$A0[0]
- lea ($j,$A0[1],2),$S[1] # t[2*i+1]<<1 |
- shr \$63,$A0[1]
- or $A0[0],$S[1] # | t[2*i]>>63
- mov -16($tptr,$i,2),$A0[0] # t[2*i+2] # prefetch
- mov $A0[1],$shift # shift=t[2*i+1]>>63
- mul %rax # a[i]*a[i]
- neg $carry # mov $carry,cf
- mov -8($tptr,$i,2),$A0[1] # t[2*i+2+1] # prefetch
- adc %rax,$S[0]
- mov -8($aptr,$i),%rax # a[i+1] # prefetch
- mov $S[0],-32($tptr,$i,2)
- adc %rdx,$S[1]
-
- lea ($shift,$A0[0],2),$S[2] # t[2*i]<<1 | shift
- mov $S[1],-24($tptr,$i,2)
- sbb $carry,$carry # mov cf,$carry
- shr \$63,$A0[0]
- lea ($j,$A0[1],2),$S[3] # t[2*i+1]<<1 |
- shr \$63,$A0[1]
- or $A0[0],$S[3] # | t[2*i]>>63
- mov 0($tptr,$i,2),$A0[0] # t[2*i+2] # prefetch
- mov $A0[1],$shift # shift=t[2*i+1]>>63
- mul %rax # a[i]*a[i]
- neg $carry # mov $carry,cf
- mov 8($tptr,$i,2),$A0[1] # t[2*i+2+1] # prefetch
- adc %rax,$S[2]
- mov 0($aptr,$i),%rax # a[i+1] # prefetch
- mov $S[2],-16($tptr,$i,2)
- adc %rdx,$S[3]
- lea 16($i),$i
- mov $S[3],-40($tptr,$i,2)
- sbb $carry,$carry # mov cf,$carry
- jmp .Lsqr4x_shift_n_add
+ call bn_sqr8x_internal # see x86_64-mont5 module
-.align 16
-.Lsqr4x_shift_n_add:
- lea ($shift,$A0[0],2),$S[0] # t[2*i]<<1 | shift
- shr \$63,$A0[0]
- lea ($j,$A0[1],2),$S[1] # t[2*i+1]<<1 |
- shr \$63,$A0[1]
- or $A0[0],$S[1] # | t[2*i]>>63
- mov -16($tptr,$i,2),$A0[0] # t[2*i+2] # prefetch
- mov $A0[1],$shift # shift=t[2*i+1]>>63
- mul %rax # a[i]*a[i]
- neg $carry # mov $carry,cf
- mov -8($tptr,$i,2),$A0[1] # t[2*i+2+1] # prefetch
- adc %rax,$S[0]
- mov -8($aptr,$i),%rax # a[i+1] # prefetch
- mov $S[0],-32($tptr,$i,2)
- adc %rdx,$S[1]
-
- lea ($shift,$A0[0],2),$S[2] # t[2*i]<<1 | shift
- mov $S[1],-24($tptr,$i,2)
- sbb $carry,$carry # mov cf,$carry
- shr \$63,$A0[0]
- lea ($j,$A0[1],2),$S[3] # t[2*i+1]<<1 |
- shr \$63,$A0[1]
- or $A0[0],$S[3] # | t[2*i]>>63
- mov 0($tptr,$i,2),$A0[0] # t[2*i+2] # prefetch
- mov $A0[1],$shift # shift=t[2*i+1]>>63
- mul %rax # a[i]*a[i]
- neg $carry # mov $carry,cf
- mov 8($tptr,$i,2),$A0[1] # t[2*i+2+1] # prefetch
- adc %rax,$S[2]
- mov 0($aptr,$i),%rax # a[i+1] # prefetch
- mov $S[2],-16($tptr,$i,2)
- adc %rdx,$S[3]
-
- lea ($shift,$A0[0],2),$S[0] # t[2*i]<<1 | shift
- mov $S[3],-8($tptr,$i,2)
- sbb $carry,$carry # mov cf,$carry
- shr \$63,$A0[0]
- lea ($j,$A0[1],2),$S[1] # t[2*i+1]<<1 |
- shr \$63,$A0[1]
- or $A0[0],$S[1] # | t[2*i]>>63
- mov 16($tptr,$i,2),$A0[0] # t[2*i+2] # prefetch
- mov $A0[1],$shift # shift=t[2*i+1]>>63
- mul %rax # a[i]*a[i]
- neg $carry # mov $carry,cf
- mov 24($tptr,$i,2),$A0[1] # t[2*i+2+1] # prefetch
- adc %rax,$S[0]
- mov 8($aptr,$i),%rax # a[i+1] # prefetch
- mov $S[0],0($tptr,$i,2)
- adc %rdx,$S[1]
-
- lea ($shift,$A0[0],2),$S[2] # t[2*i]<<1 | shift
- mov $S[1],8($tptr,$i,2)
- sbb $carry,$carry # mov cf,$carry
- shr \$63,$A0[0]
- lea ($j,$A0[1],2),$S[3] # t[2*i+1]<<1 |
- shr \$63,$A0[1]
- or $A0[0],$S[3] # | t[2*i]>>63
- mov 32($tptr,$i,2),$A0[0] # t[2*i+2] # prefetch
- mov $A0[1],$shift # shift=t[2*i+1]>>63
- mul %rax # a[i]*a[i]
- neg $carry # mov $carry,cf
- mov 40($tptr,$i,2),$A0[1] # t[2*i+2+1] # prefetch
- adc %rax,$S[2]
- mov 16($aptr,$i),%rax # a[i+1] # prefetch
- mov $S[2],16($tptr,$i,2)
- adc %rdx,$S[3]
- mov $S[3],24($tptr,$i,2)
- sbb $carry,$carry # mov cf,$carry
- add \$32,$i
- jnz .Lsqr4x_shift_n_add
-
- lea ($shift,$A0[0],2),$S[0] # t[2*i]<<1 | shift
- shr \$63,$A0[0]
- lea ($j,$A0[1],2),$S[1] # t[2*i+1]<<1 |
- shr \$63,$A0[1]
- or $A0[0],$S[1] # | t[2*i]>>63
- mov -16($tptr),$A0[0] # t[2*i+2] # prefetch
- mov $A0[1],$shift # shift=t[2*i+1]>>63
- mul %rax # a[i]*a[i]
- neg $carry # mov $carry,cf
- mov -8($tptr),$A0[1] # t[2*i+2+1] # prefetch
- adc %rax,$S[0]
- mov -8($aptr),%rax # a[i+1] # prefetch
- mov $S[0],-32($tptr)
- adc %rdx,$S[1]
-
- lea ($shift,$A0[0],2),$S[2] # t[2*i]<<1|shift
- mov $S[1],-24($tptr)
- sbb $carry,$carry # mov cf,$carry
- shr \$63,$A0[0]
- lea ($j,$A0[1],2),$S[3] # t[2*i+1]<<1 |
- shr \$63,$A0[1]
- or $A0[0],$S[3] # | t[2*i]>>63
- mul %rax # a[i]*a[i]
- neg $carry # mov $carry,cf
- adc %rax,$S[2]
- adc %rdx,$S[3]
- mov $S[2],-16($tptr)
- mov $S[3],-8($tptr)
-___
-}
-##############################################################
-# Montgomery reduction part, "word-by-word" algorithm.
-#
-{
-my ($topbit,$nptr)=("%rbp",$aptr);
-my ($m0,$m1)=($a0,$a1);
-my @Ni=("%rbx","%r9");
-$code.=<<___;
- mov 40(%rsp),$nptr # restore $nptr
- mov 48(%rsp),$n0 # restore *n0
- xor $j,$j
- mov $num,0(%rsp) # save $num
- sub $num,$j # $j=-$num
- mov 64(%rsp),$A0[0] # t[0] # modsched #
- mov $n0,$m0 # # modsched #
- lea 64(%rsp,$num,2),%rax # end of t[] buffer
- lea 64(%rsp,$num),$tptr # end of t[] window
- mov %rax,8(%rsp) # save end of t[] buffer
- lea ($nptr,$num),$nptr # end of n[] buffer
- xor $topbit,$topbit # $topbit=0
-
- mov 0($nptr,$j),%rax # n[0] # modsched #
- mov 8($nptr,$j),$Ni[1] # n[1] # modsched #
- imulq $A0[0],$m0 # m0=t[0]*n0 # modsched #
- mov %rax,$Ni[0] # # modsched #
- jmp .Lsqr4x_mont_outer
+ pxor %xmm0,%xmm0
+ lea 48(%rsp),%rax
+ lea 64(%rsp,$num,2),%rdx
+ shr \$3+2,$num
+ mov 40(%rsp),%rsi # restore %rsp
+ jmp .Lsqr8x_zero
+
+.align 32
+.Lsqr8x_zero:
+ movdqa %xmm0,16*0(%rax) # wipe t
+ movdqa %xmm0,16*1(%rax)
+ movdqa %xmm0,16*2(%rax)
+ movdqa %xmm0,16*3(%rax)
+ lea 16*4(%rax),%rax
+ movdqa %xmm0,16*0(%rdx) # wipe n
+ movdqa %xmm0,16*1(%rdx)
+ movdqa %xmm0,16*2(%rdx)
+ movdqa %xmm0,16*3(%rdx)
+ lea 16*4(%rdx),%rdx
+ dec $num
+ jnz .Lsqr8x_zero
-.align 16
-.Lsqr4x_mont_outer:
- xor $A0[1],$A0[1]
- mul $m0 # n[0]*m0
- add %rax,$A0[0] # n[0]*m0+t[0]
- mov $Ni[1],%rax
- adc %rdx,$A0[1]
- mov $n0,$m1
+ mov \$1,%rax
+ mov -48(%rsi),%r15
+ mov -40(%rsi),%r14
+ mov -32(%rsi),%r13
+ mov -24(%rsi),%r12
+ mov -16(%rsi),%rbp
+ mov -8(%rsi),%rbx
+ lea (%rsi),%rsp
+.Lsqr8x_epilogue:
+ ret
+.size bn_sqr8x_mont,.-bn_sqr8x_mont
+___
+}}}
+
+if ($addx) {{{
+my $bp="%rdx"; # original value
- xor $A0[0],$A0[0]
- add 8($tptr,$j),$A0[1]
- adc \$0,$A0[0]
- mul $m0 # n[1]*m0
- add %rax,$A0[1] # n[1]*m0+t[1]
- mov $Ni[0],%rax
- adc %rdx,$A0[0]
-
- imulq $A0[1],$m1
-
- mov 16($nptr,$j),$Ni[0] # n[2]
- xor $A1[1],$A1[1]
- add $A0[1],$A1[0]
- adc \$0,$A1[1]
- mul $m1 # n[0]*m1
- add %rax,$A1[0] # n[0]*m1+"t[1]"
- mov $Ni[0],%rax
- adc %rdx,$A1[1]
- mov $A1[0],8($tptr,$j) # "t[1]"
-
- xor $A0[1],$A0[1]
- add 16($tptr,$j),$A0[0]
- adc \$0,$A0[1]
- mul $m0 # n[2]*m0
- add %rax,$A0[0] # n[2]*m0+t[2]
- mov $Ni[1],%rax
- adc %rdx,$A0[1]
-
- mov 24($nptr,$j),$Ni[1] # n[3]
- xor $A1[0],$A1[0]
- add $A0[0],$A1[1]
- adc \$0,$A1[0]
- mul $m1 # n[1]*m1
- add %rax,$A1[1] # n[1]*m1+"t[2]"
- mov $Ni[1],%rax
- adc %rdx,$A1[0]
- mov $A1[1],16($tptr,$j) # "t[2]"
-
- xor $A0[0],$A0[0]
- add 24($tptr,$j),$A0[1]
- lea 32($j),$j
- adc \$0,$A0[0]
- mul $m0 # n[3]*m0
- add %rax,$A0[1] # n[3]*m0+t[3]
- mov $Ni[0],%rax
- adc %rdx,$A0[0]
- jmp .Lsqr4x_mont_inner
+$code.=<<___;
+.type bn_mulx4x_mont,\@function,6
+.align 32
+bn_mulx4x_mont:
+.Lmulx4x_enter:
+ mov %rsp,%rax
+ push %rbx
+ push %rbp
+ push %r12
+ push %r13
+ push %r14
+ push %r15
-.align 16
-.Lsqr4x_mont_inner:
- mov ($nptr,$j),$Ni[0] # n[4]
- xor $A1[1],$A1[1]
- add $A0[1],$A1[0]
- adc \$0,$A1[1]
- mul $m1 # n[2]*m1
- add %rax,$A1[0] # n[2]*m1+"t[3]"
- mov $Ni[0],%rax
- adc %rdx,$A1[1]
- mov $A1[0],-8($tptr,$j) # "t[3]"
-
- xor $A0[1],$A0[1]
- add ($tptr,$j),$A0[0]
- adc \$0,$A0[1]
- mul $m0 # n[4]*m0
- add %rax,$A0[0] # n[4]*m0+t[4]
- mov $Ni[1],%rax
- adc %rdx,$A0[1]
-
- mov 8($nptr,$j),$Ni[1] # n[5]
- xor $A1[0],$A1[0]
- add $A0[0],$A1[1]
- adc \$0,$A1[0]
- mul $m1 # n[3]*m1
- add %rax,$A1[1] # n[3]*m1+"t[4]"
- mov $Ni[1],%rax
- adc %rdx,$A1[0]
- mov $A1[1],($tptr,$j) # "t[4]"
-
- xor $A0[0],$A0[0]
- add 8($tptr,$j),$A0[1]
- adc \$0,$A0[0]
- mul $m0 # n[5]*m0
- add %rax,$A0[1] # n[5]*m0+t[5]
- mov $Ni[0],%rax
- adc %rdx,$A0[0]
-
-
- mov 16($nptr,$j),$Ni[0] # n[6]
- xor $A1[1],$A1[1]
- add $A0[1],$A1[0]
- adc \$0,$A1[1]
- mul $m1 # n[4]*m1
- add %rax,$A1[0] # n[4]*m1+"t[5]"
- mov $Ni[0],%rax
- adc %rdx,$A1[1]
- mov $A1[0],8($tptr,$j) # "t[5]"
-
- xor $A0[1],$A0[1]
- add 16($tptr,$j),$A0[0]
- adc \$0,$A0[1]
- mul $m0 # n[6]*m0
- add %rax,$A0[0] # n[6]*m0+t[6]
- mov $Ni[1],%rax
- adc %rdx,$A0[1]
-
- mov 24($nptr,$j),$Ni[1] # n[7]
- xor $A1[0],$A1[0]
- add $A0[0],$A1[1]
- adc \$0,$A1[0]
- mul $m1 # n[5]*m1
- add %rax,$A1[1] # n[5]*m1+"t[6]"
- mov $Ni[1],%rax
- adc %rdx,$A1[0]
- mov $A1[1],16($tptr,$j) # "t[6]"
-
- xor $A0[0],$A0[0]
- add 24($tptr,$j),$A0[1]
- lea 32($j),$j
- adc \$0,$A0[0]
- mul $m0 # n[7]*m0
- add %rax,$A0[1] # n[7]*m0+t[7]
- mov $Ni[0],%rax
- adc %rdx,$A0[0]
- cmp \$0,$j
- jne .Lsqr4x_mont_inner
-
- sub 0(%rsp),$j # $j=-$num # modsched #
- mov $n0,$m0 # # modsched #
-
- xor $A1[1],$A1[1]
- add $A0[1],$A1[0]
- adc \$0,$A1[1]
- mul $m1 # n[6]*m1
- add %rax,$A1[0] # n[6]*m1+"t[7]"
- mov $Ni[1],%rax
- adc %rdx,$A1[1]
- mov $A1[0],-8($tptr) # "t[7]"
-
- xor $A0[1],$A0[1]
- add ($tptr),$A0[0] # +t[8]
- adc \$0,$A0[1]
- mov 0($nptr,$j),$Ni[0] # n[0] # modsched #
- add $topbit,$A0[0]
- adc \$0,$A0[1]
-
- imulq 16($tptr,$j),$m0 # m0=t[0]*n0 # modsched #
- xor $A1[0],$A1[0]
- mov 8($nptr,$j),$Ni[1] # n[1] # modsched #
- add $A0[0],$A1[1]
- mov 16($tptr,$j),$A0[0] # t[0] # modsched #
- adc \$0,$A1[0]
- mul $m1 # n[7]*m1
- add %rax,$A1[1] # n[7]*m1+"t[8]"
- mov $Ni[0],%rax # # modsched #
- adc %rdx,$A1[0]
- mov $A1[1],($tptr) # "t[8]"
-
- xor $topbit,$topbit
- add 8($tptr),$A1[0] # +t[9]
- adc $topbit,$topbit
- add $A0[1],$A1[0]
- lea 16($tptr),$tptr # "t[$num]>>128"
- adc \$0,$topbit
- mov $A1[0],-8($tptr) # "t[9]"
- cmp 8(%rsp),$tptr # are we done?
- jb .Lsqr4x_mont_outer
-
- mov 0(%rsp),$num # restore $num
- mov $topbit,($tptr) # save $topbit
+ shl \$3,${num}d # convert $num to bytes
+ .byte 0x67
+ xor %r10,%r10
+ sub $num,%r10 # -$num
+ mov ($n0),$n0 # *n0
+ lea -72(%rsp,%r10),%rsp # alloca(frame+$num+8)
+ lea ($bp,$num),%r10
+ and \$-128,%rsp
+ ##############################################################
+ # Stack layout
+ # +0 num
+ # +8 off-loaded &b[i]
+ # +16 end of b[num]
+ # +24 saved n0
+ # +32 saved rp
+ # +40 saved %rsp
+ # +48 inner counter
+ # +56
+ # +64 tmp[num+1]
+ #
+ mov $num,0(%rsp) # save $num
+ shr \$5,$num
+ mov %r10,16(%rsp) # end of b[num]
+ sub \$1,$num
+ mov $n0, 24(%rsp) # save *n0
+ mov $rp, 32(%rsp) # save $rp
+ mov %rax,40(%rsp) # save original %rsp
+ mov $num,48(%rsp) # inner counter
+ jmp .Lmulx4x_body
+
+.align 32
+.Lmulx4x_body:
___
-}
-##############################################################
-# Post-condition, 4x unrolled copy from bn_mul_mont
-#
-{
-my ($tptr,$nptr)=("%rbx",$aptr);
-my @ri=("%rax","%rdx","%r10","%r11");
+my ($aptr, $bptr, $nptr, $tptr, $mi, $bi, $zero, $num)=
+ ("%rsi","%rdi","%rcx","%rbx","%r8","%r9","%rbp","%rax");
+my $rptr=$bptr;
$code.=<<___;
- mov 64(%rsp,$num),@ri[0] # tp[0]
- lea 64(%rsp,$num),$tptr # upper half of t[2*$num] holds result
- mov 40(%rsp),$nptr # restore $nptr
- shr \$5,$num # num/4
- mov 8($tptr),@ri[1] # t[1]
- xor $i,$i # i=0 and clear CF!
-
- mov 32(%rsp),$rptr # restore $rptr
- sub 0($nptr),@ri[0]
- mov 16($tptr),@ri[2] # t[2]
- mov 24($tptr),@ri[3] # t[3]
- sbb 8($nptr),@ri[1]
- lea -1($num),$j # j=num/4-1
- jmp .Lsqr4x_sub
-.align 16
-.Lsqr4x_sub:
- mov @ri[0],0($rptr,$i,8) # rp[i]=tp[i]-np[i]
- mov @ri[1],8($rptr,$i,8) # rp[i]=tp[i]-np[i]
- sbb 16($nptr,$i,8),@ri[2]
- mov 32($tptr,$i,8),@ri[0] # tp[i+1]
- mov 40($tptr,$i,8),@ri[1]
- sbb 24($nptr,$i,8),@ri[3]
- mov @ri[2],16($rptr,$i,8) # rp[i]=tp[i]-np[i]
- mov @ri[3],24($rptr,$i,8) # rp[i]=tp[i]-np[i]
- sbb 32($nptr,$i,8),@ri[0]
- mov 48($tptr,$i,8),@ri[2]
- mov 56($tptr,$i,8),@ri[3]
- sbb 40($nptr,$i,8),@ri[1]
- lea 4($i),$i # i++
- dec $j # doesn't affect CF!
- jnz .Lsqr4x_sub
-
- mov @ri[0],0($rptr,$i,8) # rp[i]=tp[i]-np[i]
- mov 32($tptr,$i,8),@ri[0] # load overflow bit
- sbb 16($nptr,$i,8),@ri[2]
- mov @ri[1],8($rptr,$i,8) # rp[i]=tp[i]-np[i]
- sbb 24($nptr,$i,8),@ri[3]
- mov @ri[2],16($rptr,$i,8) # rp[i]=tp[i]-np[i]
-
- sbb \$0,@ri[0] # handle upmost overflow bit
- mov @ri[3],24($rptr,$i,8) # rp[i]=tp[i]-np[i]
- xor $i,$i # i=0
- and @ri[0],$tptr
- not @ri[0]
- mov $rptr,$nptr
- and @ri[0],$nptr
- lea -1($num),$j
- or $nptr,$tptr # tp=borrow?tp:rp
+ lea 8($bp),$bptr
+ mov ($bp),%rdx # b[0], $bp==%rdx actually
+ lea 64+32(%rsp),$tptr
+ mov %rdx,$bi
+
+ mulx 0*8($aptr),$mi,%rax # a[0]*b[0]
+ mulx 1*8($aptr),%r11,%r14 # a[1]*b[0]
+ add %rax,%r11
+ mov $bptr,8(%rsp) # off-load &b[i]
+ mulx 2*8($aptr),%r12,%r13 # ...
+ adc %r14,%r12
+ adc \$0,%r13
+
+ mov $mi,$bptr # borrow $bptr
+ imulq 24(%rsp),$mi # "t[0]"*n0
+ xor $zero,$zero # cf=0, of=0
+
+ mulx 3*8($aptr),%rax,%r14
+ mov $mi,%rdx
+ lea 4*8($aptr),$aptr
+ adcx %rax,%r13
+ adcx $zero,%r14 # cf=0
+
+ mulx 0*8($nptr),%rax,%r10
+ adcx %rax,$bptr # discarded
+ adox %r11,%r10
+ mulx 1*8($nptr),%rax,%r11
+ adcx %rax,%r10
+ adox %r12,%r11
+ .byte 0xc4,0x62,0xfb,0xf6,0xa1,0x10,0x00,0x00,0x00 # mulx 2*8($nptr),%rax,%r12
+ mov 48(%rsp),$bptr # counter value
+ mov %r10,-4*8($tptr)
+ adcx %rax,%r11
+ adox %r13,%r12
+ mulx 3*8($nptr),%rax,%r15
+ mov $bi,%rdx
+ mov %r11,-3*8($tptr)
+ adcx %rax,%r12
+ adox $zero,%r15 # of=0
+ lea 4*8($nptr),$nptr
+ mov %r12,-2*8($tptr)
+
+ jmp .Lmulx4x_1st
+
+.align 32
+.Lmulx4x_1st:
+ adcx $zero,%r15 # cf=0, modulo-scheduled
+ mulx 0*8($aptr),%r10,%rax # a[4]*b[0]
+ adcx %r14,%r10
+ mulx 1*8($aptr),%r11,%r14 # a[5]*b[0]
+ adcx %rax,%r11
+ mulx 2*8($aptr),%r12,%rax # ...
+ adcx %r14,%r12
+ mulx 3*8($aptr),%r13,%r14
+ .byte 0x67,0x67
+ mov $mi,%rdx
+ adcx %rax,%r13
+ adcx $zero,%r14 # cf=0
+ lea 4*8($aptr),$aptr
+ lea 4*8($tptr),$tptr
+
+ adox %r15,%r10
+ mulx 0*8($nptr),%rax,%r15
+ adcx %rax,%r10
+ adox %r15,%r11
+ mulx 1*8($nptr),%rax,%r15
+ adcx %rax,%r11
+ adox %r15,%r12
+ mulx 2*8($nptr),%rax,%r15
+ mov %r10,-5*8($tptr)
+ adcx %rax,%r12
+ mov %r11,-4*8($tptr)
+ adox %r15,%r13
+ mulx 3*8($nptr),%rax,%r15
+ mov $bi,%rdx
+ mov %r12,-3*8($tptr)
+ adcx %rax,%r13
+ adox $zero,%r15
+ lea 4*8($nptr),$nptr
+ mov %r13,-2*8($tptr)
+
+ dec $bptr # of=0, pass cf
+ jnz .Lmulx4x_1st
+
+ mov 0(%rsp),$num # load num
+ mov 8(%rsp),$bptr # re-load &b[i]
+ adc $zero,%r15 # modulo-scheduled
+ add %r15,%r14
+ sbb %r15,%r15 # top-most carry
+ mov %r14,-1*8($tptr)
+ jmp .Lmulx4x_outer
+
+.align 32
+.Lmulx4x_outer:
+ mov ($bptr),%rdx # b[i]
+ lea 8($bptr),$bptr # b++
+ sub $num,$aptr # rewind $aptr
+ mov %r15,($tptr) # save top-most carry
+ lea 64+4*8(%rsp),$tptr
+ sub $num,$nptr # rewind $nptr
+
+ mulx 0*8($aptr),$mi,%r11 # a[0]*b[i]
+ xor %ebp,%ebp # xor $zero,$zero # cf=0, of=0
+ mov %rdx,$bi
+ mulx 1*8($aptr),%r14,%r12 # a[1]*b[i]
+ adox -4*8($tptr),$mi
+ adcx %r14,%r11
+ mulx 2*8($aptr),%r15,%r13 # ...
+ adox -3*8($tptr),%r11
+ adcx %r15,%r12
+ adox $zero,%r12
+ adcx $zero,%r13
+
+ mov $bptr,8(%rsp) # off-load &b[i]
+ .byte 0x67
+ mov $mi,%r15
+ imulq 24(%rsp),$mi # "t[0]"*n0
+ xor %ebp,%ebp # xor $zero,$zero # cf=0, of=0
+
+ mulx 3*8($aptr),%rax,%r14
+ mov $mi,%rdx
+ adox -2*8($tptr),%r12
+ adcx %rax,%r13
+ adox -1*8($tptr),%r13
+ adcx $zero,%r14
+ lea 4*8($aptr),$aptr
+ adox $zero,%r14
+
+ mulx 0*8($nptr),%rax,%r10
+ adcx %rax,%r15 # discarded
+ adox %r11,%r10
+ mulx 1*8($nptr),%rax,%r11
+ adcx %rax,%r10
+ adox %r12,%r11
+ mulx 2*8($nptr),%rax,%r12
+ mov %r10,-4*8($tptr)
+ adcx %rax,%r11
+ adox %r13,%r12
+ mulx 3*8($nptr),%rax,%r15
+ mov $bi,%rdx
+ mov %r11,-3*8($tptr)
+ lea 4*8($nptr),$nptr
+ adcx %rax,%r12
+ adox $zero,%r15 # of=0
+ mov 48(%rsp),$bptr # counter value
+ mov %r12,-2*8($tptr)
+
+ jmp .Lmulx4x_inner
+
+.align 32
+.Lmulx4x_inner:
+ mulx 0*8($aptr),%r10,%rax # a[4]*b[i]
+ adcx $zero,%r15 # cf=0, modulo-scheduled
+ adox %r14,%r10
+ mulx 1*8($aptr),%r11,%r14 # a[5]*b[i]
+ adcx 0*8($tptr),%r10
+ adox %rax,%r11
+ mulx 2*8($aptr),%r12,%rax # ...
+ adcx 1*8($tptr),%r11
+ adox %r14,%r12
+ mulx 3*8($aptr),%r13,%r14
+ mov $mi,%rdx
+ adcx 2*8($tptr),%r12
+ adox %rax,%r13
+ adcx 3*8($tptr),%r13
+ adox $zero,%r14 # of=0
+ lea 4*8($aptr),$aptr
+ lea 4*8($tptr),$tptr
+ adcx $zero,%r14 # cf=0
+
+ adox %r15,%r10
+ mulx 0*8($nptr),%rax,%r15
+ adcx %rax,%r10
+ adox %r15,%r11
+ mulx 1*8($nptr),%rax,%r15
+ adcx %rax,%r11
+ adox %r15,%r12
+ mulx 2*8($nptr),%rax,%r15
+ mov %r10,-5*8($tptr)
+ adcx %rax,%r12
+ adox %r15,%r13
+ mulx 3*8($nptr),%rax,%r15
+ mov $bi,%rdx
+ mov %r11,-4*8($tptr)
+ mov %r12,-3*8($tptr)
+ adcx %rax,%r13
+ adox $zero,%r15
+ lea 4*8($nptr),$nptr
+ mov %r13,-2*8($tptr)
+
+ dec $bptr # of=0, pass cf
+ jnz .Lmulx4x_inner
+
+ mov 0(%rsp),$num # load num
+ mov 8(%rsp),$bptr # re-load &b[i]
+ adc $zero,%r15 # modulo-scheduled
+ sub 0*8($tptr),$zero # pull top-most carry
+ adc %r15,%r14
+ mov -8($nptr),$mi
+ sbb %r15,%r15 # top-most carry
+ mov %r14,-1*8($tptr)
+
+ cmp 16(%rsp),$bptr
+ jne .Lmulx4x_outer
+
+ sub %r14,$mi # compare top-most words
+ sbb $mi,$mi
+ or $mi,%r15
+
+ neg $num
+ xor %rdx,%rdx
+ mov 32(%rsp),$rptr # restore rp
+ lea 64(%rsp),$tptr
pxor %xmm0,%xmm0
- lea 64(%rsp,$num,8),$nptr
- movdqu ($tptr),%xmm1
- lea ($nptr,$num,8),$nptr
- movdqa %xmm0,64(%rsp) # zap lower half of temporary vector
- movdqa %xmm0,($nptr) # zap upper half of temporary vector
- movdqu %xmm1,($rptr)
- jmp .Lsqr4x_copy
-.align 16
-.Lsqr4x_copy: # copy or in-place refresh
- movdqu 16($tptr,$i),%xmm2
- movdqu 32($tptr,$i),%xmm1
- movdqa %xmm0,80(%rsp,$i) # zap lower half of temporary vector
- movdqa %xmm0,96(%rsp,$i) # zap lower half of temporary vector
- movdqa %xmm0,16($nptr,$i) # zap upper half of temporary vector
- movdqa %xmm0,32($nptr,$i) # zap upper half of temporary vector
- movdqu %xmm2,16($rptr,$i)
- movdqu %xmm1,32($rptr,$i)
- lea 32($i),$i
- dec $j
- jnz .Lsqr4x_copy
-
- movdqu 16($tptr,$i),%xmm2
- movdqa %xmm0,80(%rsp,$i) # zap lower half of temporary vector
- movdqa %xmm0,16($nptr,$i) # zap upper half of temporary vector
- movdqu %xmm2,16($rptr,$i)
-___
-}
-$code.=<<___;
- mov 56(%rsp),%rsi # restore %rsp
+ mov 0*8($nptr,$num),%r8
+ mov 1*8($nptr,$num),%r9
+ neg %r8
+ jmp .Lmulx4x_sub_entry
+
+.align 32
+.Lmulx4x_sub:
+ mov 0*8($nptr,$num),%r8
+ mov 1*8($nptr,$num),%r9
+ not %r8
+.Lmulx4x_sub_entry:
+ mov 2*8($nptr,$num),%r10
+ not %r9
+ and %r15,%r8
+ mov 3*8($nptr,$num),%r11
+ not %r10
+ and %r15,%r9
+ not %r11
+ and %r15,%r10
+ and %r15,%r11
+
+ neg %rdx # mov %rdx,%cf
+ adc 0*8($tptr),%r8
+ adc 1*8($tptr),%r9
+ movdqa %xmm0,($tptr)
+ adc 2*8($tptr),%r10
+ adc 3*8($tptr),%r11
+ movdqa %xmm0,16($tptr)
+ lea 4*8($tptr),$tptr
+ sbb %rdx,%rdx # mov %cf,%rdx
+
+ mov %r8,0*8($rptr)
+ mov %r9,1*8($rptr)
+ mov %r10,2*8($rptr)
+ mov %r11,3*8($rptr)
+ lea 4*8($rptr),$rptr
+
+ add \$32,$num
+ jnz .Lmulx4x_sub
+
+ mov 40(%rsp),%rsi # restore %rsp
mov \$1,%rax
- mov 0(%rsi),%r15
- mov 8(%rsi),%r14
- mov 16(%rsi),%r13
- mov 24(%rsi),%r12
- mov 32(%rsi),%rbp
- mov 40(%rsi),%rbx
- lea 48(%rsi),%rsp
-.Lsqr4x_epilogue:
+ mov -48(%rsi),%r15
+ mov -40(%rsi),%r14
+ mov -32(%rsi),%r13
+ mov -24(%rsi),%r12
+ mov -16(%rsi),%rbp
+ mov -8(%rsi),%rbx
+ lea (%rsi),%rsp
+.Lmulx4x_epilogue:
ret
-.size bn_sqr4x_mont,.-bn_sqr4x_mont
+.size bn_mulx4x_mont,.-bn_mulx4x_mont
___
}}}
$code.=<<___;
@@ -1581,18 +1285,22 @@ sqr_handler:
mov 120($context),%rax # pull context->Rax
mov 248($context),%rbx # pull context->Rip
- lea .Lsqr4x_body(%rip),%r10
+ mov 8($disp),%rsi # disp->ImageBase
+ mov 56($disp),%r11 # disp->HandlerData
+
+ mov 0(%r11),%r10d # HandlerData[0]
+ lea (%rsi,%r10),%r10 # end of prologue label
cmp %r10,%rbx # context->Rip<.Lsqr_body
jb .Lcommon_seh_tail
mov 152($context),%rax # pull context->Rsp
- lea .Lsqr4x_epilogue(%rip),%r10
+ mov 4(%r11),%r10d # HandlerData[1]
+ lea (%rsi,%r10),%r10 # epilogue label
cmp %r10,%rbx # context->Rip>=.Lsqr_epilogue
jae .Lcommon_seh_tail
- mov 56(%rax),%rax # pull saved stack pointer
- lea 48(%rax),%rax
+ mov 40(%rax),%rax # pull saved stack pointer
mov -8(%rax),%rbx
mov -16(%rax),%rbp
@@ -1657,10 +1365,16 @@ sqr_handler:
.rva .LSEH_end_bn_mul4x_mont
.rva .LSEH_info_bn_mul4x_mont
- .rva .LSEH_begin_bn_sqr4x_mont
- .rva .LSEH_end_bn_sqr4x_mont
- .rva .LSEH_info_bn_sqr4x_mont
-
+ .rva .LSEH_begin_bn_sqr8x_mont
+ .rva .LSEH_end_bn_sqr8x_mont
+ .rva .LSEH_info_bn_sqr8x_mont
+___
+$code.=<<___ if ($addx);
+ .rva .LSEH_begin_bn_mulx4x_mont
+ .rva .LSEH_end_bn_mulx4x_mont
+ .rva .LSEH_info_bn_mulx4x_mont
+___
+$code.=<<___;
.section .xdata
.align 8
.LSEH_info_bn_mul_mont:
@@ -1671,9 +1385,16 @@ sqr_handler:
.byte 9,0,0,0
.rva mul_handler
.rva .Lmul4x_body,.Lmul4x_epilogue # HandlerData[]
-.LSEH_info_bn_sqr4x_mont:
+.LSEH_info_bn_sqr8x_mont:
+ .byte 9,0,0,0
+ .rva sqr_handler
+ .rva .Lsqr8x_body,.Lsqr8x_epilogue # HandlerData[]
+___
+$code.=<<___ if ($addx);
+.LSEH_info_bn_mulx4x_mont:
.byte 9,0,0,0
.rva sqr_handler
+ .rva .Lmulx4x_body,.Lmulx4x_epilogue # HandlerData[]
___
}
diff --git a/crypto/openssl/crypto/bn/asm/x86_64-mont5.pl b/crypto/openssl/crypto/bn/asm/x86_64-mont5.pl
index dae0fe2..820de3d 100755
--- a/crypto/openssl/crypto/bn/asm/x86_64-mont5.pl
+++ b/crypto/openssl/crypto/bn/asm/x86_64-mont5.pl
@@ -17,6 +17,13 @@
# is implemented, so that scatter-/gathering can be tuned without
# bn_exp.c modifications.
+# August 2013.
+#
+# Add MULX/AD*X code paths and additional interfaces to optimize for
+# branch prediction unit. For input lengths that are multiples of 8
+# the np argument is not just modulus value, but one interleaved
+# with 0. This is to optimize post-condition...
+
$flavour = shift;
$output = shift;
if ($flavour =~ /\./) { $output = $flavour; undef $flavour; }
@@ -31,6 +38,21 @@ die "can't locate x86_64-xlate.pl";
open OUT,"| \"$^X\" $xlate $flavour $output";
*STDOUT=*OUT;
+if (`$ENV{CC} -Wa,-v -c -o /dev/null -x assembler /dev/null 2>&1`
+ =~ /GNU assembler version ([2-9]\.[0-9]+)/) {
+ $addx = ($1>=2.23);
+}
+
+if (!$addx && $win64 && ($flavour =~ /nasm/ || $ENV{ASM} =~ /nasm/) &&
+ `nasm -v 2>&1` =~ /NASM version ([2-9]\.[0-9]+)/) {
+ $addx = ($1>=2.10);
+}
+
+if (!$addx && $win64 && ($flavour =~ /masm/ || $ENV{ASM} =~ /ml64/) &&
+ `ml64 2>&1` =~ /Version ([0-9]+)\./) {
+ $addx = ($1>=12);
+}
+
# int bn_mul_mont_gather5(
$rp="%rdi"; # BN_ULONG *rp,
$ap="%rsi"; # const BN_ULONG *ap,
@@ -53,19 +75,25 @@ $m1="%rbp";
$code=<<___;
.text
+.extern OPENSSL_ia32cap_P
+
.globl bn_mul_mont_gather5
.type bn_mul_mont_gather5,\@function,6
.align 64
bn_mul_mont_gather5:
- test \$3,${num}d
+ test \$7,${num}d
jnz .Lmul_enter
- cmp \$8,${num}d
- jb .Lmul_enter
+___
+$code.=<<___ if ($addx);
+ mov OPENSSL_ia32cap_P+8(%rip),%r11d
+___
+$code.=<<___;
jmp .Lmul4x_enter
.align 16
.Lmul_enter:
mov ${num}d,${num}d
+ mov %rsp,%rax
mov `($win64?56:8)`(%rsp),%r10d # load 7th argument
push %rbx
push %rbp
@@ -78,10 +106,8 @@ $code.=<<___ if ($win64);
lea -0x28(%rsp),%rsp
movaps %xmm6,(%rsp)
movaps %xmm7,0x10(%rsp)
-.Lmul_alloca:
___
$code.=<<___;
- mov %rsp,%rax
lea 2($num),%r11
neg %r11
lea (%rsp,%r11,8),%rsp # tp=alloca(8*(num+2))
@@ -287,7 +313,7 @@ $code.=<<___;
lea 1($i),$i # i++
cmp $num,$i
- jl .Louter
+ jb .Louter
xor $i,$i # i=0 and clear CF!
mov (%rsp),%rax # tp[0]
@@ -323,18 +349,17 @@ $code.=<<___;
mov \$1,%rax
___
$code.=<<___ if ($win64);
- movaps (%rsi),%xmm6
- movaps 0x10(%rsi),%xmm7
- lea 0x28(%rsi),%rsi
+ movaps -88(%rsi),%xmm6
+ movaps -72(%rsi),%xmm7
___
$code.=<<___;
- mov (%rsi),%r15
- mov 8(%rsi),%r14
- mov 16(%rsi),%r13
- mov 24(%rsi),%r12
- mov 32(%rsi),%rbp
- mov 40(%rsi),%rbx
- lea 48(%rsi),%rsp
+ mov -48(%rsi),%r15
+ mov -40(%rsi),%r14
+ mov -32(%rsi),%r13
+ mov -24(%rsi),%r12
+ mov -16(%rsi),%rbp
+ mov -8(%rsi),%rbx
+ lea (%rsi),%rsp
.Lmul_epilogue:
ret
.size bn_mul_mont_gather5,.-bn_mul_mont_gather5
@@ -344,11 +369,18 @@ my @A=("%r10","%r11");
my @N=("%r13","%rdi");
$code.=<<___;
.type bn_mul4x_mont_gather5,\@function,6
-.align 16
+.align 32
bn_mul4x_mont_gather5:
.Lmul4x_enter:
- mov ${num}d,${num}d
- mov `($win64?56:8)`(%rsp),%r10d # load 7th argument
+___
+$code.=<<___ if ($addx);
+ and \$0x80100,%r11d
+ cmp \$0x80100,%r11d
+ je .Lmulx4x_enter
+___
+$code.=<<___;
+ .byte 0x67
+ mov %rsp,%rax
push %rbx
push %rbp
push %r12
@@ -360,23 +392,78 @@ $code.=<<___ if ($win64);
lea -0x28(%rsp),%rsp
movaps %xmm6,(%rsp)
movaps %xmm7,0x10(%rsp)
-.Lmul4x_alloca:
___
$code.=<<___;
- mov %rsp,%rax
- lea 4($num),%r11
- neg %r11
- lea (%rsp,%r11,8),%rsp # tp=alloca(8*(num+4))
- and \$-1024,%rsp # minimize TLB usage
-
- mov %rax,8(%rsp,$num,8) # tp[num+1]=%rsp
+ .byte 0x67
+ mov ${num}d,%r10d
+ shl \$3,${num}d
+ shl \$3+2,%r10d # 4*$num
+ neg $num # -$num
+
+ ##############################################################
+ # ensure that stack frame doesn't alias with $aptr+4*$num
+ # modulo 4096, which covers ret[num], am[num] and n[2*num]
+ # (see bn_exp.c). this is done to allow memory disambiguation
+ # logic do its magic. [excessive frame is allocated in order
+ # to allow bn_from_mont8x to clear it.]
+ #
+ lea -64(%rsp,$num,2),%r11
+ sub $ap,%r11
+ and \$4095,%r11
+ cmp %r11,%r10
+ jb .Lmul4xsp_alt
+ sub %r11,%rsp # align with $ap
+ lea -64(%rsp,$num,2),%rsp # alloca(128+num*8)
+ jmp .Lmul4xsp_done
+
+.align 32
+.Lmul4xsp_alt:
+ lea 4096-64(,$num,2),%r10
+ lea -64(%rsp,$num,2),%rsp # alloca(128+num*8)
+ sub %r10,%r11
+ mov \$0,%r10
+ cmovc %r10,%r11
+ sub %r11,%rsp
+.Lmul4xsp_done:
+ and \$-64,%rsp
+ neg $num
+
+ mov %rax,40(%rsp)
.Lmul4x_body:
- mov $rp,16(%rsp,$num,8) # tp[num+2]=$rp
- mov %rdx,%r12 # reassign $bp
+
+ call mul4x_internal
+
+ mov 40(%rsp),%rsi # restore %rsp
+ mov \$1,%rax
+___
+$code.=<<___ if ($win64);
+ movaps -88(%rsi),%xmm6
+ movaps -72(%rsi),%xmm7
+___
+$code.=<<___;
+ mov -48(%rsi),%r15
+ mov -40(%rsi),%r14
+ mov -32(%rsi),%r13
+ mov -24(%rsi),%r12
+ mov -16(%rsi),%rbp
+ mov -8(%rsi),%rbx
+ lea (%rsi),%rsp
+.Lmul4x_epilogue:
+ ret
+.size bn_mul4x_mont_gather5,.-bn_mul4x_mont_gather5
+
+.type mul4x_internal,\@abi-omnipotent
+.align 32
+mul4x_internal:
+ shl \$5,$num
+ mov `($win64?56:8)`(%rax),%r10d # load 7th argument
+ lea 256(%rdx,$num),%r13
+ shr \$5,$num # restore $num
___
$bp="%r12";
$STRIDE=2**5*8; # 5 is "window size"
$N=$STRIDE/4; # should match cache line size
+ $tp=$i;
$code.=<<___;
mov %r10,%r11
shr \$`log($N/8)/log(2)`,%r10
@@ -384,459 +471,2776 @@ $code.=<<___;
not %r10
lea .Lmagic_masks(%rip),%rax
and \$`2**5/($N/8)-1`,%r10 # 5 is "window size"
- lea 96($bp,%r11,8),$bp # pointer within 1st cache line
+ lea 96(%rdx,%r11,8),$bp # pointer within 1st cache line
movq 0(%rax,%r10,8),%xmm4 # set of masks denoting which
movq 8(%rax,%r10,8),%xmm5 # cache line contains element
+ add \$7,%r11
movq 16(%rax,%r10,8),%xmm6 # denoted by 7th argument
movq 24(%rax,%r10,8),%xmm7
+ and \$7,%r11
movq `0*$STRIDE/4-96`($bp),%xmm0
+ lea $STRIDE($bp),$tp # borrow $tp
movq `1*$STRIDE/4-96`($bp),%xmm1
pand %xmm4,%xmm0
movq `2*$STRIDE/4-96`($bp),%xmm2
pand %xmm5,%xmm1
movq `3*$STRIDE/4-96`($bp),%xmm3
pand %xmm6,%xmm2
+ .byte 0x67
por %xmm1,%xmm0
+ movq `0*$STRIDE/4-96`($tp),%xmm1
+ .byte 0x67
pand %xmm7,%xmm3
+ .byte 0x67
por %xmm2,%xmm0
- lea $STRIDE($bp),$bp
+ movq `1*$STRIDE/4-96`($tp),%xmm2
+ .byte 0x67
+ pand %xmm4,%xmm1
+ .byte 0x67
por %xmm3,%xmm0
+ movq `2*$STRIDE/4-96`($tp),%xmm3
movq %xmm0,$m0 # m0=bp[0]
+ movq `3*$STRIDE/4-96`($tp),%xmm0
+ mov %r13,16+8(%rsp) # save end of b[num]
+ mov $rp, 56+8(%rsp) # save $rp
+
mov ($n0),$n0 # pull n0[0] value
mov ($ap),%rax
-
- xor $i,$i # i=0
- xor $j,$j # j=0
-
- movq `0*$STRIDE/4-96`($bp),%xmm0
- movq `1*$STRIDE/4-96`($bp),%xmm1
- pand %xmm4,%xmm0
- movq `2*$STRIDE/4-96`($bp),%xmm2
- pand %xmm5,%xmm1
+ lea ($ap,$num),$ap # end of a[num]
+ neg $num
mov $n0,$m1
mulq $m0 # ap[0]*bp[0]
mov %rax,$A[0]
mov ($np),%rax
- movq `3*$STRIDE/4-96`($bp),%xmm3
- pand %xmm6,%xmm2
- por %xmm1,%xmm0
- pand %xmm7,%xmm3
+ pand %xmm5,%xmm2
+ pand %xmm6,%xmm3
+ por %xmm2,%xmm1
imulq $A[0],$m1 # "tp[0]"*n0
+ ##############################################################
+ # $tp is chosen so that writing to top-most element of the
+ # vector occurs just "above" references to powers table,
+ # "above" modulo cache-line size, which effectively precludes
+ # possibility of memory disambiguation logic failure when
+ # accessing the table.
+ #
+ lea 64+8(%rsp,%r11,8),$tp
mov %rdx,$A[1]
- por %xmm2,%xmm0
- lea $STRIDE($bp),$bp
- por %xmm3,%xmm0
+ pand %xmm7,%xmm0
+ por %xmm3,%xmm1
+ lea 2*$STRIDE($bp),$bp
+ por %xmm1,%xmm0
mulq $m1 # np[0]*m1
add %rax,$A[0] # discarded
- mov 8($ap),%rax
+ mov 8($ap,$num),%rax
adc \$0,%rdx
mov %rdx,$N[1]
mulq $m0
add %rax,$A[1]
- mov 8($np),%rax
+ mov 16*1($np),%rax # interleaved with 0, therefore 16*n
adc \$0,%rdx
mov %rdx,$A[0]
mulq $m1
add %rax,$N[1]
- mov 16($ap),%rax
+ mov 16($ap,$num),%rax
adc \$0,%rdx
add $A[1],$N[1]
- lea 4($j),$j # j++
+ lea 4*8($num),$j # j=4
+ lea 16*4($np),$np
adc \$0,%rdx
- mov $N[1],(%rsp)
+ mov $N[1],($tp)
mov %rdx,$N[0]
jmp .L1st4x
-.align 16
+
+.align 32
.L1st4x:
mulq $m0 # ap[j]*bp[0]
add %rax,$A[0]
- mov -16($np,$j,8),%rax
+ mov -16*2($np),%rax
+ lea 32($tp),$tp
adc \$0,%rdx
mov %rdx,$A[1]
mulq $m1 # np[j]*m1
add %rax,$N[0]
- mov -8($ap,$j,8),%rax
+ mov -8($ap,$j),%rax
adc \$0,%rdx
add $A[0],$N[0] # np[j]*m1+ap[j]*bp[0]
adc \$0,%rdx
- mov $N[0],-24(%rsp,$j,8) # tp[j-1]
+ mov $N[0],-24($tp) # tp[j-1]
mov %rdx,$N[1]
mulq $m0 # ap[j]*bp[0]
add %rax,$A[1]
- mov -8($np,$j,8),%rax
+ mov -16*1($np),%rax
adc \$0,%rdx
mov %rdx,$A[0]
mulq $m1 # np[j]*m1
add %rax,$N[1]
- mov ($ap,$j,8),%rax
+ mov ($ap,$j),%rax
adc \$0,%rdx
add $A[1],$N[1] # np[j]*m1+ap[j]*bp[0]
adc \$0,%rdx
- mov $N[1],-16(%rsp,$j,8) # tp[j-1]
+ mov $N[1],-16($tp) # tp[j-1]
mov %rdx,$N[0]
mulq $m0 # ap[j]*bp[0]
add %rax,$A[0]
- mov ($np,$j,8),%rax
+ mov 16*0($np),%rax
adc \$0,%rdx
mov %rdx,$A[1]
mulq $m1 # np[j]*m1
add %rax,$N[0]
- mov 8($ap,$j,8),%rax
+ mov 8($ap,$j),%rax
adc \$0,%rdx
add $A[0],$N[0] # np[j]*m1+ap[j]*bp[0]
adc \$0,%rdx
- mov $N[0],-8(%rsp,$j,8) # tp[j-1]
+ mov $N[0],-8($tp) # tp[j-1]
mov %rdx,$N[1]
mulq $m0 # ap[j]*bp[0]
add %rax,$A[1]
- mov 8($np,$j,8),%rax
+ mov 16*1($np),%rax
adc \$0,%rdx
- lea 4($j),$j # j++
mov %rdx,$A[0]
mulq $m1 # np[j]*m1
add %rax,$N[1]
- mov -16($ap,$j,8),%rax
+ mov 16($ap,$j),%rax
adc \$0,%rdx
add $A[1],$N[1] # np[j]*m1+ap[j]*bp[0]
+ lea 16*4($np),$np
adc \$0,%rdx
- mov $N[1],-32(%rsp,$j,8) # tp[j-1]
+ mov $N[1],($tp) # tp[j-1]
mov %rdx,$N[0]
- cmp $num,$j
- jl .L1st4x
+
+ add \$32,$j # j+=4
+ jnz .L1st4x
mulq $m0 # ap[j]*bp[0]
add %rax,$A[0]
- mov -16($np,$j,8),%rax
+ mov -16*2($np),%rax
+ lea 32($tp),$tp
adc \$0,%rdx
mov %rdx,$A[1]
mulq $m1 # np[j]*m1
add %rax,$N[0]
- mov -8($ap,$j,8),%rax
+ mov -8($ap),%rax
adc \$0,%rdx
add $A[0],$N[0] # np[j]*m1+ap[j]*bp[0]
adc \$0,%rdx
- mov $N[0],-24(%rsp,$j,8) # tp[j-1]
+ mov $N[0],-24($tp) # tp[j-1]
mov %rdx,$N[1]
mulq $m0 # ap[j]*bp[0]
add %rax,$A[1]
- mov -8($np,$j,8),%rax
+ mov -16*1($np),%rax
adc \$0,%rdx
mov %rdx,$A[0]
mulq $m1 # np[j]*m1
add %rax,$N[1]
- mov ($ap),%rax # ap[0]
+ mov ($ap,$num),%rax # ap[0]
adc \$0,%rdx
add $A[1],$N[1] # np[j]*m1+ap[j]*bp[0]
adc \$0,%rdx
- mov $N[1],-16(%rsp,$j,8) # tp[j-1]
+ mov $N[1],-16($tp) # tp[j-1]
mov %rdx,$N[0]
movq %xmm0,$m0 # bp[1]
+ lea ($np,$num,2),$np # rewind $np
xor $N[1],$N[1]
add $A[0],$N[0]
adc \$0,$N[1]
- mov $N[0],-8(%rsp,$j,8)
- mov $N[1],(%rsp,$j,8) # store upmost overflow bit
+ mov $N[0],-8($tp)
- lea 1($i),$i # i++
-.align 4
-.Louter4x:
- xor $j,$j # j=0
- movq `0*$STRIDE/4-96`($bp),%xmm0
- movq `1*$STRIDE/4-96`($bp),%xmm1
- pand %xmm4,%xmm0
- movq `2*$STRIDE/4-96`($bp),%xmm2
- pand %xmm5,%xmm1
+ jmp .Louter4x
- mov (%rsp),$A[0]
+.align 32
+.Louter4x:
+ mov ($tp,$num),$A[0]
mov $n0,$m1
mulq $m0 # ap[0]*bp[i]
add %rax,$A[0] # ap[0]*bp[i]+tp[0]
mov ($np),%rax
adc \$0,%rdx
+ movq `0*$STRIDE/4-96`($bp),%xmm0
+ movq `1*$STRIDE/4-96`($bp),%xmm1
+ pand %xmm4,%xmm0
+ movq `2*$STRIDE/4-96`($bp),%xmm2
+ pand %xmm5,%xmm1
movq `3*$STRIDE/4-96`($bp),%xmm3
- pand %xmm6,%xmm2
- por %xmm1,%xmm0
- pand %xmm7,%xmm3
imulq $A[0],$m1 # tp[0]*n0
+ .byte 0x67
mov %rdx,$A[1]
+ mov $N[1],($tp) # store upmost overflow bit
+ pand %xmm6,%xmm2
+ por %xmm1,%xmm0
+ pand %xmm7,%xmm3
por %xmm2,%xmm0
+ lea ($tp,$num),$tp # rewind $tp
lea $STRIDE($bp),$bp
por %xmm3,%xmm0
mulq $m1 # np[0]*m1
add %rax,$A[0] # "$N[0]", discarded
- mov 8($ap),%rax
+ mov 8($ap,$num),%rax
adc \$0,%rdx
mov %rdx,$N[1]
mulq $m0 # ap[j]*bp[i]
add %rax,$A[1]
- mov 8($np),%rax
+ mov 16*1($np),%rax # interleaved with 0, therefore 16*n
adc \$0,%rdx
- add 8(%rsp),$A[1] # +tp[1]
+ add 8($tp),$A[1] # +tp[1]
adc \$0,%rdx
mov %rdx,$A[0]
mulq $m1 # np[j]*m1
add %rax,$N[1]
- mov 16($ap),%rax
+ mov 16($ap,$num),%rax
adc \$0,%rdx
add $A[1],$N[1] # np[j]*m1+ap[j]*bp[i]+tp[j]
- lea 4($j),$j # j+=2
+ lea 4*8($num),$j # j=4
+ lea 16*4($np),$np
adc \$0,%rdx
mov %rdx,$N[0]
jmp .Linner4x
-.align 16
+
+.align 32
.Linner4x:
mulq $m0 # ap[j]*bp[i]
add %rax,$A[0]
- mov -16($np,$j,8),%rax
+ mov -16*2($np),%rax
adc \$0,%rdx
- add -16(%rsp,$j,8),$A[0] # ap[j]*bp[i]+tp[j]
+ add 16($tp),$A[0] # ap[j]*bp[i]+tp[j]
+ lea 32($tp),$tp
adc \$0,%rdx
mov %rdx,$A[1]
mulq $m1 # np[j]*m1
add %rax,$N[0]
- mov -8($ap,$j,8),%rax
+ mov -8($ap,$j),%rax
adc \$0,%rdx
add $A[0],$N[0]
adc \$0,%rdx
- mov $N[1],-32(%rsp,$j,8) # tp[j-1]
+ mov $N[1],-32($tp) # tp[j-1]
mov %rdx,$N[1]
mulq $m0 # ap[j]*bp[i]
add %rax,$A[1]
- mov -8($np,$j,8),%rax
+ mov -16*1($np),%rax
adc \$0,%rdx
- add -8(%rsp,$j,8),$A[1]
+ add -8($tp),$A[1]
adc \$0,%rdx
mov %rdx,$A[0]
mulq $m1 # np[j]*m1
add %rax,$N[1]
- mov ($ap,$j,8),%rax
+ mov ($ap,$j),%rax
adc \$0,%rdx
add $A[1],$N[1]
adc \$0,%rdx
- mov $N[0],-24(%rsp,$j,8) # tp[j-1]
+ mov $N[0],-24($tp) # tp[j-1]
mov %rdx,$N[0]
mulq $m0 # ap[j]*bp[i]
add %rax,$A[0]
- mov ($np,$j,8),%rax
+ mov 16*0($np),%rax
adc \$0,%rdx
- add (%rsp,$j,8),$A[0] # ap[j]*bp[i]+tp[j]
+ add ($tp),$A[0] # ap[j]*bp[i]+tp[j]
adc \$0,%rdx
mov %rdx,$A[1]
mulq $m1 # np[j]*m1
add %rax,$N[0]
- mov 8($ap,$j,8),%rax
+ mov 8($ap,$j),%rax
adc \$0,%rdx
add $A[0],$N[0]
adc \$0,%rdx
- mov $N[1],-16(%rsp,$j,8) # tp[j-1]
+ mov $N[1],-16($tp) # tp[j-1]
mov %rdx,$N[1]
mulq $m0 # ap[j]*bp[i]
add %rax,$A[1]
- mov 8($np,$j,8),%rax
+ mov 16*1($np),%rax
adc \$0,%rdx
- add 8(%rsp,$j,8),$A[1]
+ add 8($tp),$A[1]
adc \$0,%rdx
- lea 4($j),$j # j++
mov %rdx,$A[0]
mulq $m1 # np[j]*m1
add %rax,$N[1]
- mov -16($ap,$j,8),%rax
+ mov 16($ap,$j),%rax
adc \$0,%rdx
add $A[1],$N[1]
+ lea 16*4($np),$np
adc \$0,%rdx
- mov $N[0],-40(%rsp,$j,8) # tp[j-1]
+ mov $N[0],-8($tp) # tp[j-1]
mov %rdx,$N[0]
- cmp $num,$j
- jl .Linner4x
+
+ add \$32,$j # j+=4
+ jnz .Linner4x
mulq $m0 # ap[j]*bp[i]
add %rax,$A[0]
- mov -16($np,$j,8),%rax
+ mov -16*2($np),%rax
adc \$0,%rdx
- add -16(%rsp,$j,8),$A[0] # ap[j]*bp[i]+tp[j]
+ add 16($tp),$A[0] # ap[j]*bp[i]+tp[j]
+ lea 32($tp),$tp
adc \$0,%rdx
mov %rdx,$A[1]
mulq $m1 # np[j]*m1
add %rax,$N[0]
- mov -8($ap,$j,8),%rax
+ mov -8($ap),%rax
adc \$0,%rdx
add $A[0],$N[0]
adc \$0,%rdx
- mov $N[1],-32(%rsp,$j,8) # tp[j-1]
+ mov $N[1],-32($tp) # tp[j-1]
mov %rdx,$N[1]
mulq $m0 # ap[j]*bp[i]
add %rax,$A[1]
- mov -8($np,$j,8),%rax
+ mov $m1,%rax
+ mov -16*1($np),$m1
adc \$0,%rdx
- add -8(%rsp,$j,8),$A[1]
+ add -8($tp),$A[1]
adc \$0,%rdx
- lea 1($i),$i # i++
mov %rdx,$A[0]
mulq $m1 # np[j]*m1
add %rax,$N[1]
- mov ($ap),%rax # ap[0]
+ mov ($ap,$num),%rax # ap[0]
adc \$0,%rdx
add $A[1],$N[1]
adc \$0,%rdx
- mov $N[0],-24(%rsp,$j,8) # tp[j-1]
+ mov $N[0],-24($tp) # tp[j-1]
mov %rdx,$N[0]
movq %xmm0,$m0 # bp[i+1]
- mov $N[1],-16(%rsp,$j,8) # tp[j-1]
+ mov $N[1],-16($tp) # tp[j-1]
+ lea ($np,$num,2),$np # rewind $np
xor $N[1],$N[1]
add $A[0],$N[0]
adc \$0,$N[1]
- add (%rsp,$num,8),$N[0] # pull upmost overflow bit
- adc \$0,$N[1]
- mov $N[0],-8(%rsp,$j,8)
- mov $N[1],(%rsp,$j,8) # store upmost overflow bit
+ add ($tp),$N[0] # pull upmost overflow bit
+ adc \$0,$N[1] # upmost overflow bit
+ mov $N[0],-8($tp)
- cmp $num,$i
- jl .Louter4x
+ cmp 16+8(%rsp),$bp
+ jb .Louter4x
___
-{
-my @ri=("%rax","%rdx",$m0,$m1);
+if (1) {
$code.=<<___;
- mov 16(%rsp,$num,8),$rp # restore $rp
- mov 0(%rsp),@ri[0] # tp[0]
- pxor %xmm0,%xmm0
- mov 8(%rsp),@ri[1] # tp[1]
- shr \$2,$num # num/=4
- lea (%rsp),$ap # borrow ap for tp
- xor $i,$i # i=0 and clear CF!
-
- sub 0($np),@ri[0]
- mov 16($ap),@ri[2] # tp[2]
- mov 24($ap),@ri[3] # tp[3]
- sbb 8($np),@ri[1]
- lea -1($num),$j # j=num/4-1
+ sub $N[0],$m1 # compare top-most words
+ adc $j,$j # $j is zero
+ or $j,$N[1]
+ xor \$1,$N[1]
+ lea ($tp,$num),%rbx # tptr in .sqr4x_sub
+ lea ($np,$N[1],8),%rbp # nptr in .sqr4x_sub
+ mov %r9,%rcx
+ sar \$3+2,%rcx # cf=0
+ mov 56+8(%rsp),%rdi # rptr in .sqr4x_sub
+ jmp .Lsqr4x_sub
+___
+} else {
+my @ri=("%rax",$bp,$m0,$m1);
+my $rp="%rdx";
+$code.=<<___
+ xor \$1,$N[1]
+ lea ($tp,$num),$tp # rewind $tp
+ sar \$5,$num # cf=0
+ lea ($np,$N[1],8),$np
+ mov 56+8(%rsp),$rp # restore $rp
jmp .Lsub4x
-.align 16
+
+.align 32
.Lsub4x:
- mov @ri[0],0($rp,$i,8) # rp[i]=tp[i]-np[i]
- mov @ri[1],8($rp,$i,8) # rp[i]=tp[i]-np[i]
- sbb 16($np,$i,8),@ri[2]
- mov 32($ap,$i,8),@ri[0] # tp[i+1]
- mov 40($ap,$i,8),@ri[1]
- sbb 24($np,$i,8),@ri[3]
- mov @ri[2],16($rp,$i,8) # rp[i]=tp[i]-np[i]
- mov @ri[3],24($rp,$i,8) # rp[i]=tp[i]-np[i]
- sbb 32($np,$i,8),@ri[0]
- mov 48($ap,$i,8),@ri[2]
- mov 56($ap,$i,8),@ri[3]
- sbb 40($np,$i,8),@ri[1]
- lea 4($i),$i # i++
- dec $j # doesnn't affect CF!
+ .byte 0x66
+ mov 8*0($tp),@ri[0]
+ mov 8*1($tp),@ri[1]
+ .byte 0x66
+ sbb 16*0($np),@ri[0]
+ mov 8*2($tp),@ri[2]
+ sbb 16*1($np),@ri[1]
+ mov 3*8($tp),@ri[3]
+ lea 4*8($tp),$tp
+ sbb 16*2($np),@ri[2]
+ mov @ri[0],8*0($rp)
+ sbb 16*3($np),@ri[3]
+ lea 16*4($np),$np
+ mov @ri[1],8*1($rp)
+ mov @ri[2],8*2($rp)
+ mov @ri[3],8*3($rp)
+ lea 8*4($rp),$rp
+
+ inc $num
jnz .Lsub4x
- mov @ri[0],0($rp,$i,8) # rp[i]=tp[i]-np[i]
- mov 32($ap,$i,8),@ri[0] # load overflow bit
- sbb 16($np,$i,8),@ri[2]
- mov @ri[1],8($rp,$i,8) # rp[i]=tp[i]-np[i]
- sbb 24($np,$i,8),@ri[3]
- mov @ri[2],16($rp,$i,8) # rp[i]=tp[i]-np[i]
+ ret
+___
+}
+$code.=<<___;
+.size mul4x_internal,.-mul4x_internal
+___
+}}}
+ {{{
+######################################################################
+# void bn_power5(
+my $rptr="%rdi"; # BN_ULONG *rptr,
+my $aptr="%rsi"; # const BN_ULONG *aptr,
+my $bptr="%rdx"; # const void *table,
+my $nptr="%rcx"; # const BN_ULONG *nptr,
+my $n0 ="%r8"; # const BN_ULONG *n0);
+my $num ="%r9"; # int num, has to be divisible by 8
+ # int pwr
+
+my ($i,$j,$tptr)=("%rbp","%rcx",$rptr);
+my @A0=("%r10","%r11");
+my @A1=("%r12","%r13");
+my ($a0,$a1,$ai)=("%r14","%r15","%rbx");
- sbb \$0,@ri[0] # handle upmost overflow bit
- mov @ri[3],24($rp,$i,8) # rp[i]=tp[i]-np[i]
- xor $i,$i # i=0
- and @ri[0],$ap
- not @ri[0]
- mov $rp,$np
- and @ri[0],$np
- lea -1($num),$j
- or $np,$ap # ap=borrow?tp:rp
+$code.=<<___;
+.globl bn_power5
+.type bn_power5,\@function,6
+.align 32
+bn_power5:
+___
+$code.=<<___ if ($addx);
+ mov OPENSSL_ia32cap_P+8(%rip),%r11d
+ and \$0x80100,%r11d
+ cmp \$0x80100,%r11d
+ je .Lpowerx5_enter
+___
+$code.=<<___;
+ mov %rsp,%rax
+ push %rbx
+ push %rbp
+ push %r12
+ push %r13
+ push %r14
+ push %r15
+___
+$code.=<<___ if ($win64);
+ lea -0x28(%rsp),%rsp
+ movaps %xmm6,(%rsp)
+ movaps %xmm7,0x10(%rsp)
+___
+$code.=<<___;
+ mov ${num}d,%r10d
+ shl \$3,${num}d # convert $num to bytes
+ shl \$3+2,%r10d # 4*$num
+ neg $num
+ mov ($n0),$n0 # *n0
+
+ ##############################################################
+ # ensure that stack frame doesn't alias with $aptr+4*$num
+ # modulo 4096, which covers ret[num], am[num] and n[2*num]
+ # (see bn_exp.c). this is done to allow memory disambiguation
+ # logic do its magic.
+ #
+ lea -64(%rsp,$num,2),%r11
+ sub $aptr,%r11
+ and \$4095,%r11
+ cmp %r11,%r10
+ jb .Lpwr_sp_alt
+ sub %r11,%rsp # align with $aptr
+ lea -64(%rsp,$num,2),%rsp # alloca(frame+2*$num)
+ jmp .Lpwr_sp_done
+
+.align 32
+.Lpwr_sp_alt:
+ lea 4096-64(,$num,2),%r10 # 4096-frame-2*$num
+ lea -64(%rsp,$num,2),%rsp # alloca(frame+2*$num)
+ sub %r10,%r11
+ mov \$0,%r10
+ cmovc %r10,%r11
+ sub %r11,%rsp
+.Lpwr_sp_done:
+ and \$-64,%rsp
+ mov $num,%r10
+ neg $num
+
+ ##############################################################
+ # Stack layout
+ #
+ # +0 saved $num, used in reduction section
+ # +8 &t[2*$num], used in reduction section
+ # +32 saved *n0
+ # +40 saved %rsp
+ # +48 t[2*$num]
+ #
+ mov $n0, 32(%rsp)
+ mov %rax, 40(%rsp) # save original %rsp
+.Lpower5_body:
+ movq $rptr,%xmm1 # save $rptr
+ movq $nptr,%xmm2 # save $nptr
+ movq %r10, %xmm3 # -$num
+ movq $bptr,%xmm4
+
+ call __bn_sqr8x_internal
+ call __bn_sqr8x_internal
+ call __bn_sqr8x_internal
+ call __bn_sqr8x_internal
+ call __bn_sqr8x_internal
+
+ movq %xmm2,$nptr
+ movq %xmm4,$bptr
+ mov $aptr,$rptr
+ mov 40(%rsp),%rax
+ lea 32(%rsp),$n0
+
+ call mul4x_internal
+
+ mov 40(%rsp),%rsi # restore %rsp
+ mov \$1,%rax
+ mov -48(%rsi),%r15
+ mov -40(%rsi),%r14
+ mov -32(%rsi),%r13
+ mov -24(%rsi),%r12
+ mov -16(%rsi),%rbp
+ mov -8(%rsi),%rbx
+ lea (%rsi),%rsp
+.Lpower5_epilogue:
+ ret
+.size bn_power5,.-bn_power5
+
+.globl bn_sqr8x_internal
+.hidden bn_sqr8x_internal
+.type bn_sqr8x_internal,\@abi-omnipotent
+.align 32
+bn_sqr8x_internal:
+__bn_sqr8x_internal:
+ ##############################################################
+ # Squaring part:
+ #
+ # a) multiply-n-add everything but a[i]*a[i];
+ # b) shift result of a) by 1 to the left and accumulate
+ # a[i]*a[i] products;
+ #
+ ##############################################################
+ # a[1]a[0]
+ # a[2]a[0]
+ # a[3]a[0]
+ # a[2]a[1]
+ # a[4]a[0]
+ # a[3]a[1]
+ # a[5]a[0]
+ # a[4]a[1]
+ # a[3]a[2]
+ # a[6]a[0]
+ # a[5]a[1]
+ # a[4]a[2]
+ # a[7]a[0]
+ # a[6]a[1]
+ # a[5]a[2]
+ # a[4]a[3]
+ # a[7]a[1]
+ # a[6]a[2]
+ # a[5]a[3]
+ # a[7]a[2]
+ # a[6]a[3]
+ # a[5]a[4]
+ # a[7]a[3]
+ # a[6]a[4]
+ # a[7]a[4]
+ # a[6]a[5]
+ # a[7]a[5]
+ # a[7]a[6]
+ # a[1]a[0]
+ # a[2]a[0]
+ # a[3]a[0]
+ # a[4]a[0]
+ # a[5]a[0]
+ # a[6]a[0]
+ # a[7]a[0]
+ # a[2]a[1]
+ # a[3]a[1]
+ # a[4]a[1]
+ # a[5]a[1]
+ # a[6]a[1]
+ # a[7]a[1]
+ # a[3]a[2]
+ # a[4]a[2]
+ # a[5]a[2]
+ # a[6]a[2]
+ # a[7]a[2]
+ # a[4]a[3]
+ # a[5]a[3]
+ # a[6]a[3]
+ # a[7]a[3]
+ # a[5]a[4]
+ # a[6]a[4]
+ # a[7]a[4]
+ # a[6]a[5]
+ # a[7]a[5]
+ # a[7]a[6]
+ # a[0]a[0]
+ # a[1]a[1]
+ # a[2]a[2]
+ # a[3]a[3]
+ # a[4]a[4]
+ # a[5]a[5]
+ # a[6]a[6]
+ # a[7]a[7]
+
+ lea 32(%r10),$i # $i=-($num-32)
+ lea ($aptr,$num),$aptr # end of a[] buffer, ($aptr,$i)=&ap[2]
+
+ mov $num,$j # $j=$num
+
+ # comments apply to $num==8 case
+ mov -32($aptr,$i),$a0 # a[0]
+ lea 48+8(%rsp,$num,2),$tptr # end of tp[] buffer, &tp[2*$num]
+ mov -24($aptr,$i),%rax # a[1]
+ lea -32($tptr,$i),$tptr # end of tp[] window, &tp[2*$num-"$i"]
+ mov -16($aptr,$i),$ai # a[2]
+ mov %rax,$a1
+
+ mul $a0 # a[1]*a[0]
+ mov %rax,$A0[0] # a[1]*a[0]
+ mov $ai,%rax # a[2]
+ mov %rdx,$A0[1]
+ mov $A0[0],-24($tptr,$i) # t[1]
+
+ mul $a0 # a[2]*a[0]
+ add %rax,$A0[1]
+ mov $ai,%rax
+ adc \$0,%rdx
+ mov $A0[1],-16($tptr,$i) # t[2]
+ mov %rdx,$A0[0]
+
+
+ mov -8($aptr,$i),$ai # a[3]
+ mul $a1 # a[2]*a[1]
+ mov %rax,$A1[0] # a[2]*a[1]+t[3]
+ mov $ai,%rax
+ mov %rdx,$A1[1]
+
+ lea ($i),$j
+ mul $a0 # a[3]*a[0]
+ add %rax,$A0[0] # a[3]*a[0]+a[2]*a[1]+t[3]
+ mov $ai,%rax
+ mov %rdx,$A0[1]
+ adc \$0,$A0[1]
+ add $A1[0],$A0[0]
+ adc \$0,$A0[1]
+ mov $A0[0],-8($tptr,$j) # t[3]
+ jmp .Lsqr4x_1st
+
+.align 32
+.Lsqr4x_1st:
+ mov ($aptr,$j),$ai # a[4]
+ mul $a1 # a[3]*a[1]
+ add %rax,$A1[1] # a[3]*a[1]+t[4]
+ mov $ai,%rax
+ mov %rdx,$A1[0]
+ adc \$0,$A1[0]
+
+ mul $a0 # a[4]*a[0]
+ add %rax,$A0[1] # a[4]*a[0]+a[3]*a[1]+t[4]
+ mov $ai,%rax # a[3]
+ mov 8($aptr,$j),$ai # a[5]
+ mov %rdx,$A0[0]
+ adc \$0,$A0[0]
+ add $A1[1],$A0[1]
+ adc \$0,$A0[0]
+
+
+ mul $a1 # a[4]*a[3]
+ add %rax,$A1[0] # a[4]*a[3]+t[5]
+ mov $ai,%rax
+ mov $A0[1],($tptr,$j) # t[4]
+ mov %rdx,$A1[1]
+ adc \$0,$A1[1]
+
+ mul $a0 # a[5]*a[2]
+ add %rax,$A0[0] # a[5]*a[2]+a[4]*a[3]+t[5]
+ mov $ai,%rax
+ mov 16($aptr,$j),$ai # a[6]
+ mov %rdx,$A0[1]
+ adc \$0,$A0[1]
+ add $A1[0],$A0[0]
+ adc \$0,$A0[1]
+
+ mul $a1 # a[5]*a[3]
+ add %rax,$A1[1] # a[5]*a[3]+t[6]
+ mov $ai,%rax
+ mov $A0[0],8($tptr,$j) # t[5]
+ mov %rdx,$A1[0]
+ adc \$0,$A1[0]
+
+ mul $a0 # a[6]*a[2]
+ add %rax,$A0[1] # a[6]*a[2]+a[5]*a[3]+t[6]
+ mov $ai,%rax # a[3]
+ mov 24($aptr,$j),$ai # a[7]
+ mov %rdx,$A0[0]
+ adc \$0,$A0[0]
+ add $A1[1],$A0[1]
+ adc \$0,$A0[0]
+
+
+ mul $a1 # a[6]*a[5]
+ add %rax,$A1[0] # a[6]*a[5]+t[7]
+ mov $ai,%rax
+ mov $A0[1],16($tptr,$j) # t[6]
+ mov %rdx,$A1[1]
+ adc \$0,$A1[1]
+ lea 32($j),$j
+
+ mul $a0 # a[7]*a[4]
+ add %rax,$A0[0] # a[7]*a[4]+a[6]*a[5]+t[6]
+ mov $ai,%rax
+ mov %rdx,$A0[1]
+ adc \$0,$A0[1]
+ add $A1[0],$A0[0]
+ adc \$0,$A0[1]
+ mov $A0[0],-8($tptr,$j) # t[7]
+
+ cmp \$0,$j
+ jne .Lsqr4x_1st
+
+ mul $a1 # a[7]*a[5]
+ add %rax,$A1[1]
+ lea 16($i),$i
+ adc \$0,%rdx
+ add $A0[1],$A1[1]
+ adc \$0,%rdx
+
+ mov $A1[1],($tptr) # t[8]
+ mov %rdx,$A1[0]
+ mov %rdx,8($tptr) # t[9]
+ jmp .Lsqr4x_outer
+
+.align 32
+.Lsqr4x_outer: # comments apply to $num==6 case
+ mov -32($aptr,$i),$a0 # a[0]
+ lea 48+8(%rsp,$num,2),$tptr # end of tp[] buffer, &tp[2*$num]
+ mov -24($aptr,$i),%rax # a[1]
+ lea -32($tptr,$i),$tptr # end of tp[] window, &tp[2*$num-"$i"]
+ mov -16($aptr,$i),$ai # a[2]
+ mov %rax,$a1
+
+ mul $a0 # a[1]*a[0]
+ mov -24($tptr,$i),$A0[0] # t[1]
+ add %rax,$A0[0] # a[1]*a[0]+t[1]
+ mov $ai,%rax # a[2]
+ adc \$0,%rdx
+ mov $A0[0],-24($tptr,$i) # t[1]
+ mov %rdx,$A0[1]
+
+ mul $a0 # a[2]*a[0]
+ add %rax,$A0[1]
+ mov $ai,%rax
+ adc \$0,%rdx
+ add -16($tptr,$i),$A0[1] # a[2]*a[0]+t[2]
+ mov %rdx,$A0[0]
+ adc \$0,$A0[0]
+ mov $A0[1],-16($tptr,$i) # t[2]
+
+ xor $A1[0],$A1[0]
+
+ mov -8($aptr,$i),$ai # a[3]
+ mul $a1 # a[2]*a[1]
+ add %rax,$A1[0] # a[2]*a[1]+t[3]
+ mov $ai,%rax
+ adc \$0,%rdx
+ add -8($tptr,$i),$A1[0]
+ mov %rdx,$A1[1]
+ adc \$0,$A1[1]
+
+ mul $a0 # a[3]*a[0]
+ add %rax,$A0[0] # a[3]*a[0]+a[2]*a[1]+t[3]
+ mov $ai,%rax
+ adc \$0,%rdx
+ add $A1[0],$A0[0]
+ mov %rdx,$A0[1]
+ adc \$0,$A0[1]
+ mov $A0[0],-8($tptr,$i) # t[3]
+
+ lea ($i),$j
+ jmp .Lsqr4x_inner
+
+.align 32
+.Lsqr4x_inner:
+ mov ($aptr,$j),$ai # a[4]
+ mul $a1 # a[3]*a[1]
+ add %rax,$A1[1] # a[3]*a[1]+t[4]
+ mov $ai,%rax
+ mov %rdx,$A1[0]
+ adc \$0,$A1[0]
+ add ($tptr,$j),$A1[1]
+ adc \$0,$A1[0]
+
+ .byte 0x67
+ mul $a0 # a[4]*a[0]
+ add %rax,$A0[1] # a[4]*a[0]+a[3]*a[1]+t[4]
+ mov $ai,%rax # a[3]
+ mov 8($aptr,$j),$ai # a[5]
+ mov %rdx,$A0[0]
+ adc \$0,$A0[0]
+ add $A1[1],$A0[1]
+ adc \$0,$A0[0]
+
+ mul $a1 # a[4]*a[3]
+ add %rax,$A1[0] # a[4]*a[3]+t[5]
+ mov $A0[1],($tptr,$j) # t[4]
+ mov $ai,%rax
+ mov %rdx,$A1[1]
+ adc \$0,$A1[1]
+ add 8($tptr,$j),$A1[0]
+ lea 16($j),$j # j++
+ adc \$0,$A1[1]
+
+ mul $a0 # a[5]*a[2]
+ add %rax,$A0[0] # a[5]*a[2]+a[4]*a[3]+t[5]
+ mov $ai,%rax
+ adc \$0,%rdx
+ add $A1[0],$A0[0]
+ mov %rdx,$A0[1]
+ adc \$0,$A0[1]
+ mov $A0[0],-8($tptr,$j) # t[5], "preloaded t[1]" below
+
+ cmp \$0,$j
+ jne .Lsqr4x_inner
+
+ .byte 0x67
+ mul $a1 # a[5]*a[3]
+ add %rax,$A1[1]
+ adc \$0,%rdx
+ add $A0[1],$A1[1]
+ adc \$0,%rdx
+
+ mov $A1[1],($tptr) # t[6], "preloaded t[2]" below
+ mov %rdx,$A1[0]
+ mov %rdx,8($tptr) # t[7], "preloaded t[3]" below
+
+ add \$16,$i
+ jnz .Lsqr4x_outer
+
+ # comments apply to $num==4 case
+ mov -32($aptr),$a0 # a[0]
+ lea 48+8(%rsp,$num,2),$tptr # end of tp[] buffer, &tp[2*$num]
+ mov -24($aptr),%rax # a[1]
+ lea -32($tptr,$i),$tptr # end of tp[] window, &tp[2*$num-"$i"]
+ mov -16($aptr),$ai # a[2]
+ mov %rax,$a1
+
+ mul $a0 # a[1]*a[0]
+ add %rax,$A0[0] # a[1]*a[0]+t[1], preloaded t[1]
+ mov $ai,%rax # a[2]
+ mov %rdx,$A0[1]
+ adc \$0,$A0[1]
+
+ mul $a0 # a[2]*a[0]
+ add %rax,$A0[1]
+ mov $ai,%rax
+ mov $A0[0],-24($tptr) # t[1]
+ mov %rdx,$A0[0]
+ adc \$0,$A0[0]
+ add $A1[1],$A0[1] # a[2]*a[0]+t[2], preloaded t[2]
+ mov -8($aptr),$ai # a[3]
+ adc \$0,$A0[0]
+
+ mul $a1 # a[2]*a[1]
+ add %rax,$A1[0] # a[2]*a[1]+t[3], preloaded t[3]
+ mov $ai,%rax
+ mov $A0[1],-16($tptr) # t[2]
+ mov %rdx,$A1[1]
+ adc \$0,$A1[1]
+
+ mul $a0 # a[3]*a[0]
+ add %rax,$A0[0] # a[3]*a[0]+a[2]*a[1]+t[3]
+ mov $ai,%rax
+ mov %rdx,$A0[1]
+ adc \$0,$A0[1]
+ add $A1[0],$A0[0]
+ adc \$0,$A0[1]
+ mov $A0[0],-8($tptr) # t[3]
+
+ mul $a1 # a[3]*a[1]
+ add %rax,$A1[1]
+ mov -16($aptr),%rax # a[2]
+ adc \$0,%rdx
+ add $A0[1],$A1[1]
+ adc \$0,%rdx
+
+ mov $A1[1],($tptr) # t[4]
+ mov %rdx,$A1[0]
+ mov %rdx,8($tptr) # t[5]
+
+ mul $ai # a[2]*a[3]
+___
+{
+my ($shift,$carry)=($a0,$a1);
+my @S=(@A1,$ai,$n0);
+$code.=<<___;
+ add \$16,$i
+ xor $shift,$shift
+ sub $num,$i # $i=16-$num
+ xor $carry,$carry
+
+ add $A1[0],%rax # t[5]
+ adc \$0,%rdx
+ mov %rax,8($tptr) # t[5]
+ mov %rdx,16($tptr) # t[6]
+ mov $carry,24($tptr) # t[7]
+
+ mov -16($aptr,$i),%rax # a[0]
+ lea 48+8(%rsp),$tptr
+ xor $A0[0],$A0[0] # t[0]
+ mov 8($tptr),$A0[1] # t[1]
+
+ lea ($shift,$A0[0],2),$S[0] # t[2*i]<<1 | shift
+ shr \$63,$A0[0]
+ lea ($j,$A0[1],2),$S[1] # t[2*i+1]<<1 |
+ shr \$63,$A0[1]
+ or $A0[0],$S[1] # | t[2*i]>>63
+ mov 16($tptr),$A0[0] # t[2*i+2] # prefetch
+ mov $A0[1],$shift # shift=t[2*i+1]>>63
+ mul %rax # a[i]*a[i]
+ neg $carry # mov $carry,cf
+ mov 24($tptr),$A0[1] # t[2*i+2+1] # prefetch
+ adc %rax,$S[0]
+ mov -8($aptr,$i),%rax # a[i+1] # prefetch
+ mov $S[0],($tptr)
+ adc %rdx,$S[1]
+
+ lea ($shift,$A0[0],2),$S[2] # t[2*i]<<1 | shift
+ mov $S[1],8($tptr)
+ sbb $carry,$carry # mov cf,$carry
+ shr \$63,$A0[0]
+ lea ($j,$A0[1],2),$S[3] # t[2*i+1]<<1 |
+ shr \$63,$A0[1]
+ or $A0[0],$S[3] # | t[2*i]>>63
+ mov 32($tptr),$A0[0] # t[2*i+2] # prefetch
+ mov $A0[1],$shift # shift=t[2*i+1]>>63
+ mul %rax # a[i]*a[i]
+ neg $carry # mov $carry,cf
+ mov 40($tptr),$A0[1] # t[2*i+2+1] # prefetch
+ adc %rax,$S[2]
+ mov 0($aptr,$i),%rax # a[i+1] # prefetch
+ mov $S[2],16($tptr)
+ adc %rdx,$S[3]
+ lea 16($i),$i
+ mov $S[3],24($tptr)
+ sbb $carry,$carry # mov cf,$carry
+ lea 64($tptr),$tptr
+ jmp .Lsqr4x_shift_n_add
+
+.align 32
+.Lsqr4x_shift_n_add:
+ lea ($shift,$A0[0],2),$S[0] # t[2*i]<<1 | shift
+ shr \$63,$A0[0]
+ lea ($j,$A0[1],2),$S[1] # t[2*i+1]<<1 |
+ shr \$63,$A0[1]
+ or $A0[0],$S[1] # | t[2*i]>>63
+ mov -16($tptr),$A0[0] # t[2*i+2] # prefetch
+ mov $A0[1],$shift # shift=t[2*i+1]>>63
+ mul %rax # a[i]*a[i]
+ neg $carry # mov $carry,cf
+ mov -8($tptr),$A0[1] # t[2*i+2+1] # prefetch
+ adc %rax,$S[0]
+ mov -8($aptr,$i),%rax # a[i+1] # prefetch
+ mov $S[0],-32($tptr)
+ adc %rdx,$S[1]
+
+ lea ($shift,$A0[0],2),$S[2] # t[2*i]<<1 | shift
+ mov $S[1],-24($tptr)
+ sbb $carry,$carry # mov cf,$carry
+ shr \$63,$A0[0]
+ lea ($j,$A0[1],2),$S[3] # t[2*i+1]<<1 |
+ shr \$63,$A0[1]
+ or $A0[0],$S[3] # | t[2*i]>>63
+ mov 0($tptr),$A0[0] # t[2*i+2] # prefetch
+ mov $A0[1],$shift # shift=t[2*i+1]>>63
+ mul %rax # a[i]*a[i]
+ neg $carry # mov $carry,cf
+ mov 8($tptr),$A0[1] # t[2*i+2+1] # prefetch
+ adc %rax,$S[2]
+ mov 0($aptr,$i),%rax # a[i+1] # prefetch
+ mov $S[2],-16($tptr)
+ adc %rdx,$S[3]
+
+ lea ($shift,$A0[0],2),$S[0] # t[2*i]<<1 | shift
+ mov $S[3],-8($tptr)
+ sbb $carry,$carry # mov cf,$carry
+ shr \$63,$A0[0]
+ lea ($j,$A0[1],2),$S[1] # t[2*i+1]<<1 |
+ shr \$63,$A0[1]
+ or $A0[0],$S[1] # | t[2*i]>>63
+ mov 16($tptr),$A0[0] # t[2*i+2] # prefetch
+ mov $A0[1],$shift # shift=t[2*i+1]>>63
+ mul %rax # a[i]*a[i]
+ neg $carry # mov $carry,cf
+ mov 24($tptr),$A0[1] # t[2*i+2+1] # prefetch
+ adc %rax,$S[0]
+ mov 8($aptr,$i),%rax # a[i+1] # prefetch
+ mov $S[0],0($tptr)
+ adc %rdx,$S[1]
+
+ lea ($shift,$A0[0],2),$S[2] # t[2*i]<<1 | shift
+ mov $S[1],8($tptr)
+ sbb $carry,$carry # mov cf,$carry
+ shr \$63,$A0[0]
+ lea ($j,$A0[1],2),$S[3] # t[2*i+1]<<1 |
+ shr \$63,$A0[1]
+ or $A0[0],$S[3] # | t[2*i]>>63
+ mov 32($tptr),$A0[0] # t[2*i+2] # prefetch
+ mov $A0[1],$shift # shift=t[2*i+1]>>63
+ mul %rax # a[i]*a[i]
+ neg $carry # mov $carry,cf
+ mov 40($tptr),$A0[1] # t[2*i+2+1] # prefetch
+ adc %rax,$S[2]
+ mov 16($aptr,$i),%rax # a[i+1] # prefetch
+ mov $S[2],16($tptr)
+ adc %rdx,$S[3]
+ mov $S[3],24($tptr)
+ sbb $carry,$carry # mov cf,$carry
+ lea 64($tptr),$tptr
+ add \$32,$i
+ jnz .Lsqr4x_shift_n_add
+
+ lea ($shift,$A0[0],2),$S[0] # t[2*i]<<1 | shift
+ .byte 0x67
+ shr \$63,$A0[0]
+ lea ($j,$A0[1],2),$S[1] # t[2*i+1]<<1 |
+ shr \$63,$A0[1]
+ or $A0[0],$S[1] # | t[2*i]>>63
+ mov -16($tptr),$A0[0] # t[2*i+2] # prefetch
+ mov $A0[1],$shift # shift=t[2*i+1]>>63
+ mul %rax # a[i]*a[i]
+ neg $carry # mov $carry,cf
+ mov -8($tptr),$A0[1] # t[2*i+2+1] # prefetch
+ adc %rax,$S[0]
+ mov -8($aptr),%rax # a[i+1] # prefetch
+ mov $S[0],-32($tptr)
+ adc %rdx,$S[1]
+
+ lea ($shift,$A0[0],2),$S[2] # t[2*i]<<1|shift
+ mov $S[1],-24($tptr)
+ sbb $carry,$carry # mov cf,$carry
+ shr \$63,$A0[0]
+ lea ($j,$A0[1],2),$S[3] # t[2*i+1]<<1 |
+ shr \$63,$A0[1]
+ or $A0[0],$S[3] # | t[2*i]>>63
+ mul %rax # a[i]*a[i]
+ neg $carry # mov $carry,cf
+ adc %rax,$S[2]
+ adc %rdx,$S[3]
+ mov $S[2],-16($tptr)
+ mov $S[3],-8($tptr)
+___
+}
+######################################################################
+# Montgomery reduction part, "word-by-word" algorithm.
+#
+# This new path is inspired by multiple submissions from Intel, by
+# Shay Gueron, Vlad Krasnov, Erdinc Ozturk, James Guilford,
+# Vinodh Gopal...
+{
+my ($nptr,$tptr,$carry,$m0)=("%rbp","%rdi","%rsi","%rbx");
- movdqu ($ap),%xmm1
- movdqa %xmm0,(%rsp)
- movdqu %xmm1,($rp)
- jmp .Lcopy4x
-.align 16
-.Lcopy4x: # copy or in-place refresh
- movdqu 16($ap,$i),%xmm2
- movdqu 32($ap,$i),%xmm1
- movdqa %xmm0,16(%rsp,$i)
- movdqu %xmm2,16($rp,$i)
- movdqa %xmm0,32(%rsp,$i)
- movdqu %xmm1,32($rp,$i)
- lea 32($i),$i
- dec $j
- jnz .Lcopy4x
-
- shl \$2,$num
- movdqu 16($ap,$i),%xmm2
- movdqa %xmm0,16(%rsp,$i)
- movdqu %xmm2,16($rp,$i)
+$code.=<<___;
+ movq %xmm2,$nptr
+sqr8x_reduction:
+ xor %rax,%rax
+ lea ($nptr,$num,2),%rcx # end of n[]
+ lea 48+8(%rsp,$num,2),%rdx # end of t[] buffer
+ mov %rcx,0+8(%rsp)
+ lea 48+8(%rsp,$num),$tptr # end of initial t[] window
+ mov %rdx,8+8(%rsp)
+ neg $num
+ jmp .L8x_reduction_loop
+
+.align 32
+.L8x_reduction_loop:
+ lea ($tptr,$num),$tptr # start of current t[] window
+ .byte 0x66
+ mov 8*0($tptr),$m0
+ mov 8*1($tptr),%r9
+ mov 8*2($tptr),%r10
+ mov 8*3($tptr),%r11
+ mov 8*4($tptr),%r12
+ mov 8*5($tptr),%r13
+ mov 8*6($tptr),%r14
+ mov 8*7($tptr),%r15
+ mov %rax,(%rdx) # store top-most carry bit
+ lea 8*8($tptr),$tptr
+
+ .byte 0x67
+ mov $m0,%r8
+ imulq 32+8(%rsp),$m0 # n0*a[0]
+ mov 16*0($nptr),%rax # n[0]
+ mov \$8,%ecx
+ jmp .L8x_reduce
+
+.align 32
+.L8x_reduce:
+ mulq $m0
+ mov 16*1($nptr),%rax # n[1]
+ neg %r8
+ mov %rdx,%r8
+ adc \$0,%r8
+
+ mulq $m0
+ add %rax,%r9
+ mov 16*2($nptr),%rax
+ adc \$0,%rdx
+ add %r9,%r8
+ mov $m0,48-8+8(%rsp,%rcx,8) # put aside n0*a[i]
+ mov %rdx,%r9
+ adc \$0,%r9
+
+ mulq $m0
+ add %rax,%r10
+ mov 16*3($nptr),%rax
+ adc \$0,%rdx
+ add %r10,%r9
+ mov 32+8(%rsp),$carry # pull n0, borrow $carry
+ mov %rdx,%r10
+ adc \$0,%r10
+
+ mulq $m0
+ add %rax,%r11
+ mov 16*4($nptr),%rax
+ adc \$0,%rdx
+ imulq %r8,$carry # modulo-scheduled
+ add %r11,%r10
+ mov %rdx,%r11
+ adc \$0,%r11
+
+ mulq $m0
+ add %rax,%r12
+ mov 16*5($nptr),%rax
+ adc \$0,%rdx
+ add %r12,%r11
+ mov %rdx,%r12
+ adc \$0,%r12
+
+ mulq $m0
+ add %rax,%r13
+ mov 16*6($nptr),%rax
+ adc \$0,%rdx
+ add %r13,%r12
+ mov %rdx,%r13
+ adc \$0,%r13
+
+ mulq $m0
+ add %rax,%r14
+ mov 16*7($nptr),%rax
+ adc \$0,%rdx
+ add %r14,%r13
+ mov %rdx,%r14
+ adc \$0,%r14
+
+ mulq $m0
+ mov $carry,$m0 # n0*a[i]
+ add %rax,%r15
+ mov 16*0($nptr),%rax # n[0]
+ adc \$0,%rdx
+ add %r15,%r14
+ mov %rdx,%r15
+ adc \$0,%r15
+
+ dec %ecx
+ jnz .L8x_reduce
+
+ lea 16*8($nptr),$nptr
+ xor %rax,%rax
+ mov 8+8(%rsp),%rdx # pull end of t[]
+ cmp 0+8(%rsp),$nptr # end of n[]?
+ jae .L8x_no_tail
+
+ .byte 0x66
+ add 8*0($tptr),%r8
+ adc 8*1($tptr),%r9
+ adc 8*2($tptr),%r10
+ adc 8*3($tptr),%r11
+ adc 8*4($tptr),%r12
+ adc 8*5($tptr),%r13
+ adc 8*6($tptr),%r14
+ adc 8*7($tptr),%r15
+ sbb $carry,$carry # top carry
+
+ mov 48+56+8(%rsp),$m0 # pull n0*a[0]
+ mov \$8,%ecx
+ mov 16*0($nptr),%rax
+ jmp .L8x_tail
+
+.align 32
+.L8x_tail:
+ mulq $m0
+ add %rax,%r8
+ mov 16*1($nptr),%rax
+ mov %r8,($tptr) # save result
+ mov %rdx,%r8
+ adc \$0,%r8
+
+ mulq $m0
+ add %rax,%r9
+ mov 16*2($nptr),%rax
+ adc \$0,%rdx
+ add %r9,%r8
+ lea 8($tptr),$tptr # $tptr++
+ mov %rdx,%r9
+ adc \$0,%r9
+
+ mulq $m0
+ add %rax,%r10
+ mov 16*3($nptr),%rax
+ adc \$0,%rdx
+ add %r10,%r9
+ mov %rdx,%r10
+ adc \$0,%r10
+
+ mulq $m0
+ add %rax,%r11
+ mov 16*4($nptr),%rax
+ adc \$0,%rdx
+ add %r11,%r10
+ mov %rdx,%r11
+ adc \$0,%r11
+
+ mulq $m0
+ add %rax,%r12
+ mov 16*5($nptr),%rax
+ adc \$0,%rdx
+ add %r12,%r11
+ mov %rdx,%r12
+ adc \$0,%r12
+
+ mulq $m0
+ add %rax,%r13
+ mov 16*6($nptr),%rax
+ adc \$0,%rdx
+ add %r13,%r12
+ mov %rdx,%r13
+ adc \$0,%r13
+
+ mulq $m0
+ add %rax,%r14
+ mov 16*7($nptr),%rax
+ adc \$0,%rdx
+ add %r14,%r13
+ mov %rdx,%r14
+ adc \$0,%r14
+
+ mulq $m0
+ mov 48-16+8(%rsp,%rcx,8),$m0# pull n0*a[i]
+ add %rax,%r15
+ adc \$0,%rdx
+ add %r15,%r14
+ mov 16*0($nptr),%rax # pull n[0]
+ mov %rdx,%r15
+ adc \$0,%r15
+
+ dec %ecx
+ jnz .L8x_tail
+
+ lea 16*8($nptr),$nptr
+ mov 8+8(%rsp),%rdx # pull end of t[]
+ cmp 0+8(%rsp),$nptr # end of n[]?
+ jae .L8x_tail_done # break out of loop
+
+ mov 48+56+8(%rsp),$m0 # pull n0*a[0]
+ neg $carry
+ mov 8*0($nptr),%rax # pull n[0]
+ adc 8*0($tptr),%r8
+ adc 8*1($tptr),%r9
+ adc 8*2($tptr),%r10
+ adc 8*3($tptr),%r11
+ adc 8*4($tptr),%r12
+ adc 8*5($tptr),%r13
+ adc 8*6($tptr),%r14
+ adc 8*7($tptr),%r15
+ sbb $carry,$carry # top carry
+
+ mov \$8,%ecx
+ jmp .L8x_tail
+
+.align 32
+.L8x_tail_done:
+ add (%rdx),%r8 # can this overflow?
+ xor %rax,%rax
+
+ neg $carry
+.L8x_no_tail:
+ adc 8*0($tptr),%r8
+ adc 8*1($tptr),%r9
+ adc 8*2($tptr),%r10
+ adc 8*3($tptr),%r11
+ adc 8*4($tptr),%r12
+ adc 8*5($tptr),%r13
+ adc 8*6($tptr),%r14
+ adc 8*7($tptr),%r15
+ adc \$0,%rax # top-most carry
+ mov -16($nptr),%rcx # np[num-1]
+ xor $carry,$carry
+
+ movq %xmm2,$nptr # restore $nptr
+
+ mov %r8,8*0($tptr) # store top 512 bits
+ mov %r9,8*1($tptr)
+ movq %xmm3,$num # $num is %r9, can't be moved upwards
+ mov %r10,8*2($tptr)
+ mov %r11,8*3($tptr)
+ mov %r12,8*4($tptr)
+ mov %r13,8*5($tptr)
+ mov %r14,8*6($tptr)
+ mov %r15,8*7($tptr)
+ lea 8*8($tptr),$tptr
+
+ cmp %rdx,$tptr # end of t[]?
+ jb .L8x_reduction_loop
+___
+}
+##############################################################
+# Post-condition, 4x unrolled
+#
+{
+my ($tptr,$nptr)=("%rbx","%rbp");
+$code.=<<___;
+ #xor %rsi,%rsi # %rsi was $carry above
+ sub %r15,%rcx # compare top-most words
+ lea (%rdi,$num),$tptr # %rdi was $tptr above
+ adc %rsi,%rsi
+ mov $num,%rcx
+ or %rsi,%rax
+ movq %xmm1,$rptr # restore $rptr
+ xor \$1,%rax
+ movq %xmm1,$aptr # prepare for back-to-back call
+ lea ($nptr,%rax,8),$nptr
+ sar \$3+2,%rcx # cf=0
+ jmp .Lsqr4x_sub
+
+.align 32
+.Lsqr4x_sub:
+ .byte 0x66
+ mov 8*0($tptr),%r12
+ mov 8*1($tptr),%r13
+ sbb 16*0($nptr),%r12
+ mov 8*2($tptr),%r14
+ sbb 16*1($nptr),%r13
+ mov 8*3($tptr),%r15
+ lea 8*4($tptr),$tptr
+ sbb 16*2($nptr),%r14
+ mov %r12,8*0($rptr)
+ sbb 16*3($nptr),%r15
+ lea 16*4($nptr),$nptr
+ mov %r13,8*1($rptr)
+ mov %r14,8*2($rptr)
+ mov %r15,8*3($rptr)
+ lea 8*4($rptr),$rptr
+
+ inc %rcx # pass %cf
+ jnz .Lsqr4x_sub
___
}
$code.=<<___;
- mov 8(%rsp,$num,8),%rsi # restore %rsp
- mov \$1,%rax
+ mov $num,%r10 # prepare for back-to-back call
+ neg $num # restore $num
+ ret
+.size bn_sqr8x_internal,.-bn_sqr8x_internal
+___
+{
+$code.=<<___;
+.globl bn_from_montgomery
+.type bn_from_montgomery,\@abi-omnipotent
+.align 32
+bn_from_montgomery:
+ testl \$7,`($win64?"48(%rsp)":"%r9d")`
+ jz bn_from_mont8x
+ xor %eax,%eax
+ ret
+.size bn_from_montgomery,.-bn_from_montgomery
+
+.type bn_from_mont8x,\@function,6
+.align 32
+bn_from_mont8x:
+ .byte 0x67
+ mov %rsp,%rax
+ push %rbx
+ push %rbp
+ push %r12
+ push %r13
+ push %r14
+ push %r15
___
$code.=<<___ if ($win64);
- movaps (%rsi),%xmm6
- movaps 0x10(%rsi),%xmm7
- lea 0x28(%rsi),%rsi
+ lea -0x28(%rsp),%rsp
+ movaps %xmm6,(%rsp)
+ movaps %xmm7,0x10(%rsp)
___
$code.=<<___;
- mov (%rsi),%r15
- mov 8(%rsi),%r14
- mov 16(%rsi),%r13
- mov 24(%rsi),%r12
- mov 32(%rsi),%rbp
- mov 40(%rsi),%rbx
- lea 48(%rsi),%rsp
-.Lmul4x_epilogue:
+ .byte 0x67
+ mov ${num}d,%r10d
+ shl \$3,${num}d # convert $num to bytes
+ shl \$3+2,%r10d # 4*$num
+ neg $num
+ mov ($n0),$n0 # *n0
+
+ ##############################################################
+ # ensure that stack frame doesn't alias with $aptr+4*$num
+ # modulo 4096, which covers ret[num], am[num] and n[2*num]
+ # (see bn_exp.c). this is done to allow memory disambiguation
+ # logic do its magic.
+ #
+ lea -64(%rsp,$num,2),%r11
+ sub $aptr,%r11
+ and \$4095,%r11
+ cmp %r11,%r10
+ jb .Lfrom_sp_alt
+ sub %r11,%rsp # align with $aptr
+ lea -64(%rsp,$num,2),%rsp # alloca(frame+2*$num)
+ jmp .Lfrom_sp_done
+
+.align 32
+.Lfrom_sp_alt:
+ lea 4096-64(,$num,2),%r10 # 4096-frame-2*$num
+ lea -64(%rsp,$num,2),%rsp # alloca(frame+2*$num)
+ sub %r10,%r11
+ mov \$0,%r10
+ cmovc %r10,%r11
+ sub %r11,%rsp
+.Lfrom_sp_done:
+ and \$-64,%rsp
+ mov $num,%r10
+ neg $num
+
+ ##############################################################
+ # Stack layout
+ #
+ # +0 saved $num, used in reduction section
+ # +8 &t[2*$num], used in reduction section
+ # +32 saved *n0
+ # +40 saved %rsp
+ # +48 t[2*$num]
+ #
+ mov $n0, 32(%rsp)
+ mov %rax, 40(%rsp) # save original %rsp
+.Lfrom_body:
+ mov $num,%r11
+ lea 48(%rsp),%rax
+ pxor %xmm0,%xmm0
+ jmp .Lmul_by_1
+
+.align 32
+.Lmul_by_1:
+ movdqu ($aptr),%xmm1
+ movdqu 16($aptr),%xmm2
+ movdqu 32($aptr),%xmm3
+ movdqa %xmm0,(%rax,$num)
+ movdqu 48($aptr),%xmm4
+ movdqa %xmm0,16(%rax,$num)
+ .byte 0x48,0x8d,0xb6,0x40,0x00,0x00,0x00 # lea 64($aptr),$aptr
+ movdqa %xmm1,(%rax)
+ movdqa %xmm0,32(%rax,$num)
+ movdqa %xmm2,16(%rax)
+ movdqa %xmm0,48(%rax,$num)
+ movdqa %xmm3,32(%rax)
+ movdqa %xmm4,48(%rax)
+ lea 64(%rax),%rax
+ sub \$64,%r11
+ jnz .Lmul_by_1
+
+ movq $rptr,%xmm1
+ movq $nptr,%xmm2
+ .byte 0x67
+ mov $nptr,%rbp
+ movq %r10, %xmm3 # -num
+___
+$code.=<<___ if ($addx);
+ mov OPENSSL_ia32cap_P+8(%rip),%r11d
+ and \$0x80100,%r11d
+ cmp \$0x80100,%r11d
+ jne .Lfrom_mont_nox
+
+ lea (%rax,$num),$rptr
+ call sqrx8x_reduction
+
+ pxor %xmm0,%xmm0
+ lea 48(%rsp),%rax
+ mov 40(%rsp),%rsi # restore %rsp
+ jmp .Lfrom_mont_zero
+
+.align 32
+.Lfrom_mont_nox:
+___
+$code.=<<___;
+ call sqr8x_reduction
+
+ pxor %xmm0,%xmm0
+ lea 48(%rsp),%rax
+ mov 40(%rsp),%rsi # restore %rsp
+ jmp .Lfrom_mont_zero
+
+.align 32
+.Lfrom_mont_zero:
+ movdqa %xmm0,16*0(%rax)
+ movdqa %xmm0,16*1(%rax)
+ movdqa %xmm0,16*2(%rax)
+ movdqa %xmm0,16*3(%rax)
+ lea 16*4(%rax),%rax
+ sub \$32,$num
+ jnz .Lfrom_mont_zero
+
+ mov \$1,%rax
+ mov -48(%rsi),%r15
+ mov -40(%rsi),%r14
+ mov -32(%rsi),%r13
+ mov -24(%rsi),%r12
+ mov -16(%rsi),%rbp
+ mov -8(%rsi),%rbx
+ lea (%rsi),%rsp
+.Lfrom_epilogue:
ret
-.size bn_mul4x_mont_gather5,.-bn_mul4x_mont_gather5
+.size bn_from_mont8x,.-bn_from_mont8x
___
+}
}}}
+
+if ($addx) {{{
+my $bp="%rdx"; # restore original value
+
+$code.=<<___;
+.type bn_mulx4x_mont_gather5,\@function,6
+.align 32
+bn_mulx4x_mont_gather5:
+.Lmulx4x_enter:
+ .byte 0x67
+ mov %rsp,%rax
+ push %rbx
+ push %rbp
+ push %r12
+ push %r13
+ push %r14
+ push %r15
+___
+$code.=<<___ if ($win64);
+ lea -0x28(%rsp),%rsp
+ movaps %xmm6,(%rsp)
+ movaps %xmm7,0x10(%rsp)
+___
+$code.=<<___;
+ .byte 0x67
+ mov ${num}d,%r10d
+ shl \$3,${num}d # convert $num to bytes
+ shl \$3+2,%r10d # 4*$num
+ neg $num # -$num
+ mov ($n0),$n0 # *n0
+
+ ##############################################################
+ # ensure that stack frame doesn't alias with $aptr+4*$num
+ # modulo 4096, which covers a[num], ret[num] and n[2*num]
+ # (see bn_exp.c). this is done to allow memory disambiguation
+ # logic do its magic. [excessive frame is allocated in order
+ # to allow bn_from_mont8x to clear it.]
+ #
+ lea -64(%rsp,$num,2),%r11
+ sub $ap,%r11
+ and \$4095,%r11
+ cmp %r11,%r10
+ jb .Lmulx4xsp_alt
+ sub %r11,%rsp # align with $aptr
+ lea -64(%rsp,$num,2),%rsp # alloca(frame+$num)
+ jmp .Lmulx4xsp_done
+
+.align 32
+.Lmulx4xsp_alt:
+ lea 4096-64(,$num,2),%r10 # 4096-frame-$num
+ lea -64(%rsp,$num,2),%rsp # alloca(frame+$num)
+ sub %r10,%r11
+ mov \$0,%r10
+ cmovc %r10,%r11
+ sub %r11,%rsp
+.Lmulx4xsp_done:
+ and \$-64,%rsp # ensure alignment
+ ##############################################################
+ # Stack layout
+ # +0 -num
+ # +8 off-loaded &b[i]
+ # +16 end of b[num]
+ # +24 inner counter
+ # +32 saved n0
+ # +40 saved %rsp
+ # +48
+ # +56 saved rp
+ # +64 tmp[num+1]
+ #
+ mov $n0, 32(%rsp) # save *n0
+ mov %rax,40(%rsp) # save original %rsp
+.Lmulx4x_body:
+ call mulx4x_internal
+
+ mov 40(%rsp),%rsi # restore %rsp
+ mov \$1,%rax
+___
+$code.=<<___ if ($win64);
+ movaps -88(%rsi),%xmm6
+ movaps -72(%rsi),%xmm7
+___
+$code.=<<___;
+ mov -48(%rsi),%r15
+ mov -40(%rsi),%r14
+ mov -32(%rsi),%r13
+ mov -24(%rsi),%r12
+ mov -16(%rsi),%rbp
+ mov -8(%rsi),%rbx
+ lea (%rsi),%rsp
+.Lmulx4x_epilogue:
+ ret
+.size bn_mulx4x_mont_gather5,.-bn_mulx4x_mont_gather5
+
+.type mulx4x_internal,\@abi-omnipotent
+.align 32
+mulx4x_internal:
+ .byte 0x4c,0x89,0x8c,0x24,0x08,0x00,0x00,0x00 # mov $num,8(%rsp) # save -$num
+ .byte 0x67
+ neg $num # restore $num
+ shl \$5,$num
+ lea 256($bp,$num),%r13
+ shr \$5+5,$num
+ mov `($win64?56:8)`(%rax),%r10d # load 7th argument
+ sub \$1,$num
+ mov %r13,16+8(%rsp) # end of b[num]
+ mov $num,24+8(%rsp) # inner counter
+ mov $rp, 56+8(%rsp) # save $rp
+___
+my ($aptr, $bptr, $nptr, $tptr, $mi, $bi, $zero, $num)=
+ ("%rsi","%rdi","%rcx","%rbx","%r8","%r9","%rbp","%rax");
+my $rptr=$bptr;
+my $STRIDE=2**5*8; # 5 is "window size"
+my $N=$STRIDE/4; # should match cache line size
+$code.=<<___;
+ mov %r10,%r11
+ shr \$`log($N/8)/log(2)`,%r10
+ and \$`$N/8-1`,%r11
+ not %r10
+ lea .Lmagic_masks(%rip),%rax
+ and \$`2**5/($N/8)-1`,%r10 # 5 is "window size"
+ lea 96($bp,%r11,8),$bptr # pointer within 1st cache line
+ movq 0(%rax,%r10,8),%xmm4 # set of masks denoting which
+ movq 8(%rax,%r10,8),%xmm5 # cache line contains element
+ add \$7,%r11
+ movq 16(%rax,%r10,8),%xmm6 # denoted by 7th argument
+ movq 24(%rax,%r10,8),%xmm7
+ and \$7,%r11
+
+ movq `0*$STRIDE/4-96`($bptr),%xmm0
+ lea $STRIDE($bptr),$tptr # borrow $tptr
+ movq `1*$STRIDE/4-96`($bptr),%xmm1
+ pand %xmm4,%xmm0
+ movq `2*$STRIDE/4-96`($bptr),%xmm2
+ pand %xmm5,%xmm1
+ movq `3*$STRIDE/4-96`($bptr),%xmm3
+ pand %xmm6,%xmm2
+ por %xmm1,%xmm0
+ movq `0*$STRIDE/4-96`($tptr),%xmm1
+ pand %xmm7,%xmm3
+ por %xmm2,%xmm0
+ movq `1*$STRIDE/4-96`($tptr),%xmm2
+ por %xmm3,%xmm0
+ .byte 0x67,0x67
+ pand %xmm4,%xmm1
+ movq `2*$STRIDE/4-96`($tptr),%xmm3
+
+ movq %xmm0,%rdx # bp[0]
+ movq `3*$STRIDE/4-96`($tptr),%xmm0
+ lea 2*$STRIDE($bptr),$bptr # next &b[i]
+ pand %xmm5,%xmm2
+ .byte 0x67,0x67
+ pand %xmm6,%xmm3
+ ##############################################################
+ # $tptr is chosen so that writing to top-most element of the
+ # vector occurs just "above" references to powers table,
+ # "above" modulo cache-line size, which effectively precludes
+ # possibility of memory disambiguation logic failure when
+ # accessing the table.
+ #
+ lea 64+8*4+8(%rsp,%r11,8),$tptr
+
+ mov %rdx,$bi
+ mulx 0*8($aptr),$mi,%rax # a[0]*b[0]
+ mulx 1*8($aptr),%r11,%r12 # a[1]*b[0]
+ add %rax,%r11
+ mulx 2*8($aptr),%rax,%r13 # ...
+ adc %rax,%r12
+ adc \$0,%r13
+ mulx 3*8($aptr),%rax,%r14
+
+ mov $mi,%r15
+ imulq 32+8(%rsp),$mi # "t[0]"*n0
+ xor $zero,$zero # cf=0, of=0
+ mov $mi,%rdx
+
+ por %xmm2,%xmm1
+ pand %xmm7,%xmm0
+ por %xmm3,%xmm1
+ mov $bptr,8+8(%rsp) # off-load &b[i]
+ por %xmm1,%xmm0
+
+ .byte 0x48,0x8d,0xb6,0x20,0x00,0x00,0x00 # lea 4*8($aptr),$aptr
+ adcx %rax,%r13
+ adcx $zero,%r14 # cf=0
+
+ mulx 0*16($nptr),%rax,%r10
+ adcx %rax,%r15 # discarded
+ adox %r11,%r10
+ mulx 1*16($nptr),%rax,%r11
+ adcx %rax,%r10
+ adox %r12,%r11
+ mulx 2*16($nptr),%rax,%r12
+ mov 24+8(%rsp),$bptr # counter value
+ .byte 0x66
+ mov %r10,-8*4($tptr)
+ adcx %rax,%r11
+ adox %r13,%r12
+ mulx 3*16($nptr),%rax,%r15
+ .byte 0x67,0x67
+ mov $bi,%rdx
+ mov %r11,-8*3($tptr)
+ adcx %rax,%r12
+ adox $zero,%r15 # of=0
+ .byte 0x48,0x8d,0x89,0x40,0x00,0x00,0x00 # lea 4*16($nptr),$nptr
+ mov %r12,-8*2($tptr)
+ #jmp .Lmulx4x_1st
+
+.align 32
+.Lmulx4x_1st:
+ adcx $zero,%r15 # cf=0, modulo-scheduled
+ mulx 0*8($aptr),%r10,%rax # a[4]*b[0]
+ adcx %r14,%r10
+ mulx 1*8($aptr),%r11,%r14 # a[5]*b[0]
+ adcx %rax,%r11
+ mulx 2*8($aptr),%r12,%rax # ...
+ adcx %r14,%r12
+ mulx 3*8($aptr),%r13,%r14
+ .byte 0x67,0x67
+ mov $mi,%rdx
+ adcx %rax,%r13
+ adcx $zero,%r14 # cf=0
+ lea 4*8($aptr),$aptr
+ lea 4*8($tptr),$tptr
+
+ adox %r15,%r10
+ mulx 0*16($nptr),%rax,%r15
+ adcx %rax,%r10
+ adox %r15,%r11
+ mulx 1*16($nptr),%rax,%r15
+ adcx %rax,%r11
+ adox %r15,%r12
+ mulx 2*16($nptr),%rax,%r15
+ mov %r10,-5*8($tptr)
+ adcx %rax,%r12
+ mov %r11,-4*8($tptr)
+ adox %r15,%r13
+ mulx 3*16($nptr),%rax,%r15
+ mov $bi,%rdx
+ mov %r12,-3*8($tptr)
+ adcx %rax,%r13
+ adox $zero,%r15
+ lea 4*16($nptr),$nptr
+ mov %r13,-2*8($tptr)
+
+ dec $bptr # of=0, pass cf
+ jnz .Lmulx4x_1st
+
+ mov 8(%rsp),$num # load -num
+ movq %xmm0,%rdx # bp[1]
+ adc $zero,%r15 # modulo-scheduled
+ lea ($aptr,$num),$aptr # rewind $aptr
+ add %r15,%r14
+ mov 8+8(%rsp),$bptr # re-load &b[i]
+ adc $zero,$zero # top-most carry
+ mov %r14,-1*8($tptr)
+ jmp .Lmulx4x_outer
+
+.align 32
+.Lmulx4x_outer:
+ mov $zero,($tptr) # save top-most carry
+ lea 4*8($tptr,$num),$tptr # rewind $tptr
+ mulx 0*8($aptr),$mi,%r11 # a[0]*b[i]
+ xor $zero,$zero # cf=0, of=0
+ mov %rdx,$bi
+ mulx 1*8($aptr),%r14,%r12 # a[1]*b[i]
+ adox -4*8($tptr),$mi # +t[0]
+ adcx %r14,%r11
+ mulx 2*8($aptr),%r15,%r13 # ...
+ adox -3*8($tptr),%r11
+ adcx %r15,%r12
+ mulx 3*8($aptr),%rdx,%r14
+ adox -2*8($tptr),%r12
+ adcx %rdx,%r13
+ lea ($nptr,$num,2),$nptr # rewind $nptr
+ lea 4*8($aptr),$aptr
+ adox -1*8($tptr),%r13
+ adcx $zero,%r14
+ adox $zero,%r14
+
+ .byte 0x67
+ mov $mi,%r15
+ imulq 32+8(%rsp),$mi # "t[0]"*n0
+
+ movq `0*$STRIDE/4-96`($bptr),%xmm0
+ .byte 0x67,0x67
+ mov $mi,%rdx
+ movq `1*$STRIDE/4-96`($bptr),%xmm1
+ .byte 0x67
+ pand %xmm4,%xmm0
+ movq `2*$STRIDE/4-96`($bptr),%xmm2
+ .byte 0x67
+ pand %xmm5,%xmm1
+ movq `3*$STRIDE/4-96`($bptr),%xmm3
+ add \$$STRIDE,$bptr # next &b[i]
+ .byte 0x67
+ pand %xmm6,%xmm2
+ por %xmm1,%xmm0
+ pand %xmm7,%xmm3
+ xor $zero,$zero # cf=0, of=0
+ mov $bptr,8+8(%rsp) # off-load &b[i]
+
+ mulx 0*16($nptr),%rax,%r10
+ adcx %rax,%r15 # discarded
+ adox %r11,%r10
+ mulx 1*16($nptr),%rax,%r11
+ adcx %rax,%r10
+ adox %r12,%r11
+ mulx 2*16($nptr),%rax,%r12
+ adcx %rax,%r11
+ adox %r13,%r12
+ mulx 3*16($nptr),%rax,%r15
+ mov $bi,%rdx
+ por %xmm2,%xmm0
+ mov 24+8(%rsp),$bptr # counter value
+ mov %r10,-8*4($tptr)
+ por %xmm3,%xmm0
+ adcx %rax,%r12
+ mov %r11,-8*3($tptr)
+ adox $zero,%r15 # of=0
+ mov %r12,-8*2($tptr)
+ lea 4*16($nptr),$nptr
+ jmp .Lmulx4x_inner
+
+.align 32
+.Lmulx4x_inner:
+ mulx 0*8($aptr),%r10,%rax # a[4]*b[i]
+ adcx $zero,%r15 # cf=0, modulo-scheduled
+ adox %r14,%r10
+ mulx 1*8($aptr),%r11,%r14 # a[5]*b[i]
+ adcx 0*8($tptr),%r10
+ adox %rax,%r11
+ mulx 2*8($aptr),%r12,%rax # ...
+ adcx 1*8($tptr),%r11
+ adox %r14,%r12
+ mulx 3*8($aptr),%r13,%r14
+ mov $mi,%rdx
+ adcx 2*8($tptr),%r12
+ adox %rax,%r13
+ adcx 3*8($tptr),%r13
+ adox $zero,%r14 # of=0
+ lea 4*8($aptr),$aptr
+ lea 4*8($tptr),$tptr
+ adcx $zero,%r14 # cf=0
+
+ adox %r15,%r10
+ mulx 0*16($nptr),%rax,%r15
+ adcx %rax,%r10
+ adox %r15,%r11
+ mulx 1*16($nptr),%rax,%r15
+ adcx %rax,%r11
+ adox %r15,%r12
+ mulx 2*16($nptr),%rax,%r15
+ mov %r10,-5*8($tptr)
+ adcx %rax,%r12
+ adox %r15,%r13
+ mov %r11,-4*8($tptr)
+ mulx 3*16($nptr),%rax,%r15
+ mov $bi,%rdx
+ lea 4*16($nptr),$nptr
+ mov %r12,-3*8($tptr)
+ adcx %rax,%r13
+ adox $zero,%r15
+ mov %r13,-2*8($tptr)
+
+ dec $bptr # of=0, pass cf
+ jnz .Lmulx4x_inner
+
+ mov 0+8(%rsp),$num # load -num
+ movq %xmm0,%rdx # bp[i+1]
+ adc $zero,%r15 # modulo-scheduled
+ sub 0*8($tptr),$bptr # pull top-most carry to %cf
+ mov 8+8(%rsp),$bptr # re-load &b[i]
+ mov 16+8(%rsp),%r10
+ adc %r15,%r14
+ lea ($aptr,$num),$aptr # rewind $aptr
+ adc $zero,$zero # top-most carry
+ mov %r14,-1*8($tptr)
+
+ cmp %r10,$bptr
+ jb .Lmulx4x_outer
+
+ mov -16($nptr),%r10
+ xor %r15,%r15
+ sub %r14,%r10 # compare top-most words
+ adc %r15,%r15
+ or %r15,$zero
+ xor \$1,$zero
+ lea ($tptr,$num),%rdi # rewind $tptr
+ lea ($nptr,$num,2),$nptr # rewind $nptr
+ .byte 0x67,0x67
+ sar \$3+2,$num # cf=0
+ lea ($nptr,$zero,8),%rbp
+ mov 56+8(%rsp),%rdx # restore rp
+ mov $num,%rcx
+ jmp .Lsqrx4x_sub # common post-condition
+.size mulx4x_internal,.-mulx4x_internal
+___
+} {
+######################################################################
+# void bn_power5(
+my $rptr="%rdi"; # BN_ULONG *rptr,
+my $aptr="%rsi"; # const BN_ULONG *aptr,
+my $bptr="%rdx"; # const void *table,
+my $nptr="%rcx"; # const BN_ULONG *nptr,
+my $n0 ="%r8"; # const BN_ULONG *n0);
+my $num ="%r9"; # int num, has to be divisible by 8
+ # int pwr);
+
+my ($i,$j,$tptr)=("%rbp","%rcx",$rptr);
+my @A0=("%r10","%r11");
+my @A1=("%r12","%r13");
+my ($a0,$a1,$ai)=("%r14","%r15","%rbx");
+
+$code.=<<___;
+.type bn_powerx5,\@function,6
+.align 32
+bn_powerx5:
+.Lpowerx5_enter:
+ .byte 0x67
+ mov %rsp,%rax
+ push %rbx
+ push %rbp
+ push %r12
+ push %r13
+ push %r14
+ push %r15
+___
+$code.=<<___ if ($win64);
+ lea -0x28(%rsp),%rsp
+ movaps %xmm6,(%rsp)
+ movaps %xmm7,0x10(%rsp)
+___
+$code.=<<___;
+ .byte 0x67
+ mov ${num}d,%r10d
+ shl \$3,${num}d # convert $num to bytes
+ shl \$3+2,%r10d # 4*$num
+ neg $num
+ mov ($n0),$n0 # *n0
+
+ ##############################################################
+ # ensure that stack frame doesn't alias with $aptr+4*$num
+ # modulo 4096, which covers ret[num], am[num] and n[2*num]
+ # (see bn_exp.c). this is done to allow memory disambiguation
+ # logic do its magic.
+ #
+ lea -64(%rsp,$num,2),%r11
+ sub $aptr,%r11
+ and \$4095,%r11
+ cmp %r11,%r10
+ jb .Lpwrx_sp_alt
+ sub %r11,%rsp # align with $aptr
+ lea -64(%rsp,$num,2),%rsp # alloca(frame+2*$num)
+ jmp .Lpwrx_sp_done
+
+.align 32
+.Lpwrx_sp_alt:
+ lea 4096-64(,$num,2),%r10 # 4096-frame-2*$num
+ lea -64(%rsp,$num,2),%rsp # alloca(frame+2*$num)
+ sub %r10,%r11
+ mov \$0,%r10
+ cmovc %r10,%r11
+ sub %r11,%rsp
+.Lpwrx_sp_done:
+ and \$-64,%rsp
+ mov $num,%r10
+ neg $num
+
+ ##############################################################
+ # Stack layout
+ #
+ # +0 saved $num, used in reduction section
+ # +8 &t[2*$num], used in reduction section
+ # +16 intermediate carry bit
+ # +24 top-most carry bit, used in reduction section
+ # +32 saved *n0
+ # +40 saved %rsp
+ # +48 t[2*$num]
+ #
+ pxor %xmm0,%xmm0
+ movq $rptr,%xmm1 # save $rptr
+ movq $nptr,%xmm2 # save $nptr
+ movq %r10, %xmm3 # -$num
+ movq $bptr,%xmm4
+ mov $n0, 32(%rsp)
+ mov %rax, 40(%rsp) # save original %rsp
+.Lpowerx5_body:
+
+ call __bn_sqrx8x_internal
+ call __bn_sqrx8x_internal
+ call __bn_sqrx8x_internal
+ call __bn_sqrx8x_internal
+ call __bn_sqrx8x_internal
+
+ mov %r10,$num # -num
+ mov $aptr,$rptr
+ movq %xmm2,$nptr
+ movq %xmm4,$bptr
+ mov 40(%rsp),%rax
+
+ call mulx4x_internal
+
+ mov 40(%rsp),%rsi # restore %rsp
+ mov \$1,%rax
+___
+$code.=<<___ if ($win64);
+ movaps -88(%rsi),%xmm6
+ movaps -72(%rsi),%xmm7
+___
+$code.=<<___;
+ mov -48(%rsi),%r15
+ mov -40(%rsi),%r14
+ mov -32(%rsi),%r13
+ mov -24(%rsi),%r12
+ mov -16(%rsi),%rbp
+ mov -8(%rsi),%rbx
+ lea (%rsi),%rsp
+.Lpowerx5_epilogue:
+ ret
+.size bn_powerx5,.-bn_powerx5
+
+.globl bn_sqrx8x_internal
+.hidden bn_sqrx8x_internal
+.type bn_sqrx8x_internal,\@abi-omnipotent
+.align 32
+bn_sqrx8x_internal:
+__bn_sqrx8x_internal:
+ ##################################################################
+ # Squaring part:
+ #
+ # a) multiply-n-add everything but a[i]*a[i];
+ # b) shift result of a) by 1 to the left and accumulate
+ # a[i]*a[i] products;
+ #
+ ##################################################################
+ # a[7]a[7]a[6]a[6]a[5]a[5]a[4]a[4]a[3]a[3]a[2]a[2]a[1]a[1]a[0]a[0]
+ # a[1]a[0]
+ # a[2]a[0]
+ # a[3]a[0]
+ # a[2]a[1]
+ # a[3]a[1]
+ # a[3]a[2]
+ #
+ # a[4]a[0]
+ # a[5]a[0]
+ # a[6]a[0]
+ # a[7]a[0]
+ # a[4]a[1]
+ # a[5]a[1]
+ # a[6]a[1]
+ # a[7]a[1]
+ # a[4]a[2]
+ # a[5]a[2]
+ # a[6]a[2]
+ # a[7]a[2]
+ # a[4]a[3]
+ # a[5]a[3]
+ # a[6]a[3]
+ # a[7]a[3]
+ #
+ # a[5]a[4]
+ # a[6]a[4]
+ # a[7]a[4]
+ # a[6]a[5]
+ # a[7]a[5]
+ # a[7]a[6]
+ # a[7]a[7]a[6]a[6]a[5]a[5]a[4]a[4]a[3]a[3]a[2]a[2]a[1]a[1]a[0]a[0]
+___
+{
+my ($zero,$carry)=("%rbp","%rcx");
+my $aaptr=$zero;
+$code.=<<___;
+ lea 48+8(%rsp),$tptr
+ lea ($aptr,$num),$aaptr
+ mov $num,0+8(%rsp) # save $num
+ mov $aaptr,8+8(%rsp) # save end of $aptr
+ jmp .Lsqr8x_zero_start
+
+.align 32
+.byte 0x66,0x66,0x66,0x2e,0x0f,0x1f,0x84,0x00,0x00,0x00,0x00,0x00
+.Lsqrx8x_zero:
+ .byte 0x3e
+ movdqa %xmm0,0*8($tptr)
+ movdqa %xmm0,2*8($tptr)
+ movdqa %xmm0,4*8($tptr)
+ movdqa %xmm0,6*8($tptr)
+.Lsqr8x_zero_start: # aligned at 32
+ movdqa %xmm0,8*8($tptr)
+ movdqa %xmm0,10*8($tptr)
+ movdqa %xmm0,12*8($tptr)
+ movdqa %xmm0,14*8($tptr)
+ lea 16*8($tptr),$tptr
+ sub \$64,$num
+ jnz .Lsqrx8x_zero
+
+ mov 0*8($aptr),%rdx # a[0], modulo-scheduled
+ #xor %r9,%r9 # t[1], ex-$num, zero already
+ xor %r10,%r10
+ xor %r11,%r11
+ xor %r12,%r12
+ xor %r13,%r13
+ xor %r14,%r14
+ xor %r15,%r15
+ lea 48+8(%rsp),$tptr
+ xor $zero,$zero # cf=0, cf=0
+ jmp .Lsqrx8x_outer_loop
+
+.align 32
+.Lsqrx8x_outer_loop:
+ mulx 1*8($aptr),%r8,%rax # a[1]*a[0]
+ adcx %r9,%r8 # a[1]*a[0]+=t[1]
+ adox %rax,%r10
+ mulx 2*8($aptr),%r9,%rax # a[2]*a[0]
+ adcx %r10,%r9
+ adox %rax,%r11
+ .byte 0xc4,0xe2,0xab,0xf6,0x86,0x18,0x00,0x00,0x00 # mulx 3*8($aptr),%r10,%rax # ...
+ adcx %r11,%r10
+ adox %rax,%r12
+ .byte 0xc4,0xe2,0xa3,0xf6,0x86,0x20,0x00,0x00,0x00 # mulx 4*8($aptr),%r11,%rax
+ adcx %r12,%r11
+ adox %rax,%r13
+ mulx 5*8($aptr),%r12,%rax
+ adcx %r13,%r12
+ adox %rax,%r14
+ mulx 6*8($aptr),%r13,%rax
+ adcx %r14,%r13
+ adox %r15,%rax
+ mulx 7*8($aptr),%r14,%r15
+ mov 1*8($aptr),%rdx # a[1]
+ adcx %rax,%r14
+ adox $zero,%r15
+ adc 8*8($tptr),%r15
+ mov %r8,1*8($tptr) # t[1]
+ mov %r9,2*8($tptr) # t[2]
+ sbb $carry,$carry # mov %cf,$carry
+ xor $zero,$zero # cf=0, of=0
+
+
+ mulx 2*8($aptr),%r8,%rbx # a[2]*a[1]
+ mulx 3*8($aptr),%r9,%rax # a[3]*a[1]
+ adcx %r10,%r8
+ adox %rbx,%r9
+ mulx 4*8($aptr),%r10,%rbx # ...
+ adcx %r11,%r9
+ adox %rax,%r10
+ .byte 0xc4,0xe2,0xa3,0xf6,0x86,0x28,0x00,0x00,0x00 # mulx 5*8($aptr),%r11,%rax
+ adcx %r12,%r10
+ adox %rbx,%r11
+ .byte 0xc4,0xe2,0x9b,0xf6,0x9e,0x30,0x00,0x00,0x00 # mulx 6*8($aptr),%r12,%rbx
+ adcx %r13,%r11
+ adox %r14,%r12
+ .byte 0xc4,0x62,0x93,0xf6,0xb6,0x38,0x00,0x00,0x00 # mulx 7*8($aptr),%r13,%r14
+ mov 2*8($aptr),%rdx # a[2]
+ adcx %rax,%r12
+ adox %rbx,%r13
+ adcx %r15,%r13
+ adox $zero,%r14 # of=0
+ adcx $zero,%r14 # cf=0
+
+ mov %r8,3*8($tptr) # t[3]
+ mov %r9,4*8($tptr) # t[4]
+
+ mulx 3*8($aptr),%r8,%rbx # a[3]*a[2]
+ mulx 4*8($aptr),%r9,%rax # a[4]*a[2]
+ adcx %r10,%r8
+ adox %rbx,%r9
+ mulx 5*8($aptr),%r10,%rbx # ...
+ adcx %r11,%r9
+ adox %rax,%r10
+ .byte 0xc4,0xe2,0xa3,0xf6,0x86,0x30,0x00,0x00,0x00 # mulx 6*8($aptr),%r11,%rax
+ adcx %r12,%r10
+ adox %r13,%r11
+ .byte 0xc4,0x62,0x9b,0xf6,0xae,0x38,0x00,0x00,0x00 # mulx 7*8($aptr),%r12,%r13
+ .byte 0x3e
+ mov 3*8($aptr),%rdx # a[3]
+ adcx %rbx,%r11
+ adox %rax,%r12
+ adcx %r14,%r12
+ mov %r8,5*8($tptr) # t[5]
+ mov %r9,6*8($tptr) # t[6]
+ mulx 4*8($aptr),%r8,%rax # a[4]*a[3]
+ adox $zero,%r13 # of=0
+ adcx $zero,%r13 # cf=0
+
+ mulx 5*8($aptr),%r9,%rbx # a[5]*a[3]
+ adcx %r10,%r8
+ adox %rax,%r9
+ mulx 6*8($aptr),%r10,%rax # ...
+ adcx %r11,%r9
+ adox %r12,%r10
+ mulx 7*8($aptr),%r11,%r12
+ mov 4*8($aptr),%rdx # a[4]
+ mov 5*8($aptr),%r14 # a[5]
+ adcx %rbx,%r10
+ adox %rax,%r11
+ mov 6*8($aptr),%r15 # a[6]
+ adcx %r13,%r11
+ adox $zero,%r12 # of=0
+ adcx $zero,%r12 # cf=0
+
+ mov %r8,7*8($tptr) # t[7]
+ mov %r9,8*8($tptr) # t[8]
+
+ mulx %r14,%r9,%rax # a[5]*a[4]
+ mov 7*8($aptr),%r8 # a[7]
+ adcx %r10,%r9
+ mulx %r15,%r10,%rbx # a[6]*a[4]
+ adox %rax,%r10
+ adcx %r11,%r10
+ mulx %r8,%r11,%rax # a[7]*a[4]
+ mov %r14,%rdx # a[5]
+ adox %rbx,%r11
+ adcx %r12,%r11
+ #adox $zero,%rax # of=0
+ adcx $zero,%rax # cf=0
+
+ mulx %r15,%r14,%rbx # a[6]*a[5]
+ mulx %r8,%r12,%r13 # a[7]*a[5]
+ mov %r15,%rdx # a[6]
+ lea 8*8($aptr),$aptr
+ adcx %r14,%r11
+ adox %rbx,%r12
+ adcx %rax,%r12
+ adox $zero,%r13
+
+ .byte 0x67,0x67
+ mulx %r8,%r8,%r14 # a[7]*a[6]
+ adcx %r8,%r13
+ adcx $zero,%r14
+
+ cmp 8+8(%rsp),$aptr
+ je .Lsqrx8x_outer_break
+
+ neg $carry # mov $carry,%cf
+ mov \$-8,%rcx
+ mov $zero,%r15
+ mov 8*8($tptr),%r8
+ adcx 9*8($tptr),%r9 # +=t[9]
+ adcx 10*8($tptr),%r10 # ...
+ adcx 11*8($tptr),%r11
+ adc 12*8($tptr),%r12
+ adc 13*8($tptr),%r13
+ adc 14*8($tptr),%r14
+ adc 15*8($tptr),%r15
+ lea ($aptr),$aaptr
+ lea 2*64($tptr),$tptr
+ sbb %rax,%rax # mov %cf,$carry
+
+ mov -64($aptr),%rdx # a[0]
+ mov %rax,16+8(%rsp) # offload $carry
+ mov $tptr,24+8(%rsp)
+
+ #lea 8*8($tptr),$tptr # see 2*8*8($tptr) above
+ xor %eax,%eax # cf=0, of=0
+ jmp .Lsqrx8x_loop
+
+.align 32
+.Lsqrx8x_loop:
+ mov %r8,%rbx
+ mulx 0*8($aaptr),%rax,%r8 # a[8]*a[i]
+ adcx %rax,%rbx # +=t[8]
+ adox %r9,%r8
+
+ mulx 1*8($aaptr),%rax,%r9 # ...
+ adcx %rax,%r8
+ adox %r10,%r9
+
+ mulx 2*8($aaptr),%rax,%r10
+ adcx %rax,%r9
+ adox %r11,%r10
+
+ mulx 3*8($aaptr),%rax,%r11
+ adcx %rax,%r10
+ adox %r12,%r11
+
+ .byte 0xc4,0x62,0xfb,0xf6,0xa5,0x20,0x00,0x00,0x00 # mulx 4*8($aaptr),%rax,%r12
+ adcx %rax,%r11
+ adox %r13,%r12
+
+ mulx 5*8($aaptr),%rax,%r13
+ adcx %rax,%r12
+ adox %r14,%r13
+
+ mulx 6*8($aaptr),%rax,%r14
+ mov %rbx,($tptr,%rcx,8) # store t[8+i]
+ mov \$0,%ebx
+ adcx %rax,%r13
+ adox %r15,%r14
+
+ .byte 0xc4,0x62,0xfb,0xf6,0xbd,0x38,0x00,0x00,0x00 # mulx 7*8($aaptr),%rax,%r15
+ mov 8($aptr,%rcx,8),%rdx # a[i]
+ adcx %rax,%r14
+ adox %rbx,%r15 # %rbx is 0, of=0
+ adcx %rbx,%r15 # cf=0
+
+ .byte 0x67
+ inc %rcx # of=0
+ jnz .Lsqrx8x_loop
+
+ lea 8*8($aaptr),$aaptr
+ mov \$-8,%rcx
+ cmp 8+8(%rsp),$aaptr # done?
+ je .Lsqrx8x_break
+
+ sub 16+8(%rsp),%rbx # mov 16(%rsp),%cf
+ .byte 0x66
+ mov -64($aptr),%rdx
+ adcx 0*8($tptr),%r8
+ adcx 1*8($tptr),%r9
+ adc 2*8($tptr),%r10
+ adc 3*8($tptr),%r11
+ adc 4*8($tptr),%r12
+ adc 5*8($tptr),%r13
+ adc 6*8($tptr),%r14
+ adc 7*8($tptr),%r15
+ lea 8*8($tptr),$tptr
+ .byte 0x67
+ sbb %rax,%rax # mov %cf,%rax
+ xor %ebx,%ebx # cf=0, of=0
+ mov %rax,16+8(%rsp) # offload carry
+ jmp .Lsqrx8x_loop
+
+.align 32
+.Lsqrx8x_break:
+ sub 16+8(%rsp),%r8 # consume last carry
+ mov 24+8(%rsp),$carry # initial $tptr, borrow $carry
+ mov 0*8($aptr),%rdx # a[8], modulo-scheduled
+ xor %ebp,%ebp # xor $zero,$zero
+ mov %r8,0*8($tptr)
+ cmp $carry,$tptr # cf=0, of=0
+ je .Lsqrx8x_outer_loop
+
+ mov %r9,1*8($tptr)
+ mov 1*8($carry),%r9
+ mov %r10,2*8($tptr)
+ mov 2*8($carry),%r10
+ mov %r11,3*8($tptr)
+ mov 3*8($carry),%r11
+ mov %r12,4*8($tptr)
+ mov 4*8($carry),%r12
+ mov %r13,5*8($tptr)
+ mov 5*8($carry),%r13
+ mov %r14,6*8($tptr)
+ mov 6*8($carry),%r14
+ mov %r15,7*8($tptr)
+ mov 7*8($carry),%r15
+ mov $carry,$tptr
+ jmp .Lsqrx8x_outer_loop
+
+.align 32
+.Lsqrx8x_outer_break:
+ mov %r9,9*8($tptr) # t[9]
+ movq %xmm3,%rcx # -$num
+ mov %r10,10*8($tptr) # ...
+ mov %r11,11*8($tptr)
+ mov %r12,12*8($tptr)
+ mov %r13,13*8($tptr)
+ mov %r14,14*8($tptr)
+___
+} {
+my $i="%rcx";
+$code.=<<___;
+ lea 48+8(%rsp),$tptr
+ mov ($aptr,$i),%rdx # a[0]
+
+ mov 8($tptr),$A0[1] # t[1]
+ xor $A0[0],$A0[0] # t[0], of=0, cf=0
+ mov 0+8(%rsp),$num # restore $num
+ adox $A0[1],$A0[1]
+ mov 16($tptr),$A1[0] # t[2] # prefetch
+ mov 24($tptr),$A1[1] # t[3] # prefetch
+ #jmp .Lsqrx4x_shift_n_add # happens to be aligned
+
+.align 32
+.Lsqrx4x_shift_n_add:
+ mulx %rdx,%rax,%rbx
+ adox $A1[0],$A1[0]
+ adcx $A0[0],%rax
+ .byte 0x48,0x8b,0x94,0x0e,0x08,0x00,0x00,0x00 # mov 8($aptr,$i),%rdx # a[i+1] # prefetch
+ .byte 0x4c,0x8b,0x97,0x20,0x00,0x00,0x00 # mov 32($tptr),$A0[0] # t[2*i+4] # prefetch
+ adox $A1[1],$A1[1]
+ adcx $A0[1],%rbx
+ mov 40($tptr),$A0[1] # t[2*i+4+1] # prefetch
+ mov %rax,0($tptr)
+ mov %rbx,8($tptr)
+
+ mulx %rdx,%rax,%rbx
+ adox $A0[0],$A0[0]
+ adcx $A1[0],%rax
+ mov 16($aptr,$i),%rdx # a[i+2] # prefetch
+ mov 48($tptr),$A1[0] # t[2*i+6] # prefetch
+ adox $A0[1],$A0[1]
+ adcx $A1[1],%rbx
+ mov 56($tptr),$A1[1] # t[2*i+6+1] # prefetch
+ mov %rax,16($tptr)
+ mov %rbx,24($tptr)
+
+ mulx %rdx,%rax,%rbx
+ adox $A1[0],$A1[0]
+ adcx $A0[0],%rax
+ mov 24($aptr,$i),%rdx # a[i+3] # prefetch
+ lea 32($i),$i
+ mov 64($tptr),$A0[0] # t[2*i+8] # prefetch
+ adox $A1[1],$A1[1]
+ adcx $A0[1],%rbx
+ mov 72($tptr),$A0[1] # t[2*i+8+1] # prefetch
+ mov %rax,32($tptr)
+ mov %rbx,40($tptr)
+
+ mulx %rdx,%rax,%rbx
+ adox $A0[0],$A0[0]
+ adcx $A1[0],%rax
+ jrcxz .Lsqrx4x_shift_n_add_break
+ .byte 0x48,0x8b,0x94,0x0e,0x00,0x00,0x00,0x00 # mov 0($aptr,$i),%rdx # a[i+4] # prefetch
+ adox $A0[1],$A0[1]
+ adcx $A1[1],%rbx
+ mov 80($tptr),$A1[0] # t[2*i+10] # prefetch
+ mov 88($tptr),$A1[1] # t[2*i+10+1] # prefetch
+ mov %rax,48($tptr)
+ mov %rbx,56($tptr)
+ lea 64($tptr),$tptr
+ nop
+ jmp .Lsqrx4x_shift_n_add
+
+.align 32
+.Lsqrx4x_shift_n_add_break:
+ adcx $A1[1],%rbx
+ mov %rax,48($tptr)
+ mov %rbx,56($tptr)
+ lea 64($tptr),$tptr # end of t[] buffer
+___
+}
+######################################################################
+# Montgomery reduction part, "word-by-word" algorithm.
+#
+# This new path is inspired by multiple submissions from Intel, by
+# Shay Gueron, Vlad Krasnov, Erdinc Ozturk, James Guilford,
+# Vinodh Gopal...
+{
+my ($nptr,$carry,$m0)=("%rbp","%rsi","%rdx");
+
+$code.=<<___;
+ movq %xmm2,$nptr
+sqrx8x_reduction:
+ xor %eax,%eax # initial top-most carry bit
+ mov 32+8(%rsp),%rbx # n0
+ mov 48+8(%rsp),%rdx # "%r8", 8*0($tptr)
+ lea -128($nptr,$num,2),%rcx # end of n[]
+ #lea 48+8(%rsp,$num,2),$tptr # end of t[] buffer
+ mov %rcx, 0+8(%rsp) # save end of n[]
+ mov $tptr,8+8(%rsp) # save end of t[]
+
+ lea 48+8(%rsp),$tptr # initial t[] window
+ jmp .Lsqrx8x_reduction_loop
+
+.align 32
+.Lsqrx8x_reduction_loop:
+ mov 8*1($tptr),%r9
+ mov 8*2($tptr),%r10
+ mov 8*3($tptr),%r11
+ mov 8*4($tptr),%r12
+ mov %rdx,%r8
+ imulq %rbx,%rdx # n0*a[i]
+ mov 8*5($tptr),%r13
+ mov 8*6($tptr),%r14
+ mov 8*7($tptr),%r15
+ mov %rax,24+8(%rsp) # store top-most carry bit
+
+ lea 8*8($tptr),$tptr
+ xor $carry,$carry # cf=0,of=0
+ mov \$-8,%rcx
+ jmp .Lsqrx8x_reduce
+
+.align 32
+.Lsqrx8x_reduce:
+ mov %r8, %rbx
+ mulx 16*0($nptr),%rax,%r8 # n[0]
+ adcx %rbx,%rax # discarded
+ adox %r9,%r8
+
+ mulx 16*1($nptr),%rbx,%r9 # n[1]
+ adcx %rbx,%r8
+ adox %r10,%r9
+
+ mulx 16*2($nptr),%rbx,%r10
+ adcx %rbx,%r9
+ adox %r11,%r10
+
+ mulx 16*3($nptr),%rbx,%r11
+ adcx %rbx,%r10
+ adox %r12,%r11
+
+ .byte 0xc4,0x62,0xe3,0xf6,0xa5,0x40,0x00,0x00,0x00 # mulx 16*4($nptr),%rbx,%r12
+ mov %rdx,%rax
+ mov %r8,%rdx
+ adcx %rbx,%r11
+ adox %r13,%r12
+
+ mulx 32+8(%rsp),%rbx,%rdx # %rdx discarded
+ mov %rax,%rdx
+ mov %rax,64+48+8(%rsp,%rcx,8) # put aside n0*a[i]
+
+ mulx 16*5($nptr),%rax,%r13
+ adcx %rax,%r12
+ adox %r14,%r13
+
+ mulx 16*6($nptr),%rax,%r14
+ adcx %rax,%r13
+ adox %r15,%r14
+
+ mulx 16*7($nptr),%rax,%r15
+ mov %rbx,%rdx
+ adcx %rax,%r14
+ adox $carry,%r15 # $carry is 0
+ adcx $carry,%r15 # cf=0
+
+ .byte 0x67,0x67,0x67
+ inc %rcx # of=0
+ jnz .Lsqrx8x_reduce
+
+ mov $carry,%rax # xor %rax,%rax
+ cmp 0+8(%rsp),$nptr # end of n[]?
+ jae .Lsqrx8x_no_tail
+
+ mov 48+8(%rsp),%rdx # pull n0*a[0]
+ add 8*0($tptr),%r8
+ lea 16*8($nptr),$nptr
+ mov \$-8,%rcx
+ adcx 8*1($tptr),%r9
+ adcx 8*2($tptr),%r10
+ adc 8*3($tptr),%r11
+ adc 8*4($tptr),%r12
+ adc 8*5($tptr),%r13
+ adc 8*6($tptr),%r14
+ adc 8*7($tptr),%r15
+ lea 8*8($tptr),$tptr
+ sbb %rax,%rax # top carry
+
+ xor $carry,$carry # of=0, cf=0
+ mov %rax,16+8(%rsp)
+ jmp .Lsqrx8x_tail
+
+.align 32
+.Lsqrx8x_tail:
+ mov %r8,%rbx
+ mulx 16*0($nptr),%rax,%r8
+ adcx %rax,%rbx
+ adox %r9,%r8
+
+ mulx 16*1($nptr),%rax,%r9
+ adcx %rax,%r8
+ adox %r10,%r9
+
+ mulx 16*2($nptr),%rax,%r10
+ adcx %rax,%r9
+ adox %r11,%r10
+
+ mulx 16*3($nptr),%rax,%r11
+ adcx %rax,%r10
+ adox %r12,%r11
+
+ .byte 0xc4,0x62,0xfb,0xf6,0xa5,0x40,0x00,0x00,0x00 # mulx 16*4($nptr),%rax,%r12
+ adcx %rax,%r11
+ adox %r13,%r12
+
+ mulx 16*5($nptr),%rax,%r13
+ adcx %rax,%r12
+ adox %r14,%r13
+
+ mulx 16*6($nptr),%rax,%r14
+ adcx %rax,%r13
+ adox %r15,%r14
+
+ mulx 16*7($nptr),%rax,%r15
+ mov 72+48+8(%rsp,%rcx,8),%rdx # pull n0*a[i]
+ adcx %rax,%r14
+ adox $carry,%r15
+ mov %rbx,($tptr,%rcx,8) # save result
+ mov %r8,%rbx
+ adcx $carry,%r15 # cf=0
+
+ inc %rcx # of=0
+ jnz .Lsqrx8x_tail
+
+ cmp 0+8(%rsp),$nptr # end of n[]?
+ jae .Lsqrx8x_tail_done # break out of loop
+
+ sub 16+8(%rsp),$carry # mov 16(%rsp),%cf
+ mov 48+8(%rsp),%rdx # pull n0*a[0]
+ lea 16*8($nptr),$nptr
+ adc 8*0($tptr),%r8
+ adc 8*1($tptr),%r9
+ adc 8*2($tptr),%r10
+ adc 8*3($tptr),%r11
+ adc 8*4($tptr),%r12
+ adc 8*5($tptr),%r13
+ adc 8*6($tptr),%r14
+ adc 8*7($tptr),%r15
+ lea 8*8($tptr),$tptr
+ sbb %rax,%rax
+ sub \$8,%rcx # mov \$-8,%rcx
+
+ xor $carry,$carry # of=0, cf=0
+ mov %rax,16+8(%rsp)
+ jmp .Lsqrx8x_tail
+
+.align 32
+.Lsqrx8x_tail_done:
+ add 24+8(%rsp),%r8 # can this overflow?
+ mov $carry,%rax # xor %rax,%rax
+
+ sub 16+8(%rsp),$carry # mov 16(%rsp),%cf
+.Lsqrx8x_no_tail: # %cf is 0 if jumped here
+ adc 8*0($tptr),%r8
+ movq %xmm3,%rcx
+ adc 8*1($tptr),%r9
+ mov 16*7($nptr),$carry
+ movq %xmm2,$nptr # restore $nptr
+ adc 8*2($tptr),%r10
+ adc 8*3($tptr),%r11
+ adc 8*4($tptr),%r12
+ adc 8*5($tptr),%r13
+ adc 8*6($tptr),%r14
+ adc 8*7($tptr),%r15
+ adc %rax,%rax # top-most carry
+
+ mov 32+8(%rsp),%rbx # n0
+ mov 8*8($tptr,%rcx),%rdx # modulo-scheduled "%r8"
+
+ mov %r8,8*0($tptr) # store top 512 bits
+ lea 8*8($tptr),%r8 # borrow %r8
+ mov %r9,8*1($tptr)
+ mov %r10,8*2($tptr)
+ mov %r11,8*3($tptr)
+ mov %r12,8*4($tptr)
+ mov %r13,8*5($tptr)
+ mov %r14,8*6($tptr)
+ mov %r15,8*7($tptr)
+
+ lea 8*8($tptr,%rcx),$tptr # start of current t[] window
+ cmp 8+8(%rsp),%r8 # end of t[]?
+ jb .Lsqrx8x_reduction_loop
+___
+}
+##############################################################
+# Post-condition, 4x unrolled
+#
+{
+my ($rptr,$nptr)=("%rdx","%rbp");
+my @ri=map("%r$_",(10..13));
+my @ni=map("%r$_",(14..15));
+$code.=<<___;
+ xor %rbx,%rbx
+ sub %r15,%rsi # compare top-most words
+ adc %rbx,%rbx
+ mov %rcx,%r10 # -$num
+ .byte 0x67
+ or %rbx,%rax
+ .byte 0x67
+ mov %rcx,%r9 # -$num
+ xor \$1,%rax
+ sar \$3+2,%rcx # cf=0
+ #lea 48+8(%rsp,%r9),$tptr
+ lea ($nptr,%rax,8),$nptr
+ movq %xmm1,$rptr # restore $rptr
+ movq %xmm1,$aptr # prepare for back-to-back call
+ jmp .Lsqrx4x_sub
+
+.align 32
+.Lsqrx4x_sub:
+ .byte 0x66
+ mov 8*0($tptr),%r12
+ mov 8*1($tptr),%r13
+ sbb 16*0($nptr),%r12
+ mov 8*2($tptr),%r14
+ sbb 16*1($nptr),%r13
+ mov 8*3($tptr),%r15
+ lea 8*4($tptr),$tptr
+ sbb 16*2($nptr),%r14
+ mov %r12,8*0($rptr)
+ sbb 16*3($nptr),%r15
+ lea 16*4($nptr),$nptr
+ mov %r13,8*1($rptr)
+ mov %r14,8*2($rptr)
+ mov %r15,8*3($rptr)
+ lea 8*4($rptr),$rptr
+
+ inc %rcx
+ jnz .Lsqrx4x_sub
+___
+}
+$code.=<<___;
+ neg %r9 # restore $num
+ ret
+.size bn_sqrx8x_internal,.-bn_sqrx8x_internal
+___
+}}}
{
-my ($inp,$num,$tbl,$idx)=$win64?("%rcx","%rdx","%r8", "%r9") : # Win64 order
- ("%rdi","%rsi","%rdx","%rcx"); # Unix order
+my ($inp,$num,$tbl,$idx)=$win64?("%rcx","%edx","%r8", "%r9d") : # Win64 order
+ ("%rdi","%esi","%rdx","%ecx"); # Unix order
my $out=$inp;
my $STRIDE=2**5*8;
my $N=$STRIDE/4;
$code.=<<___;
+.globl bn_get_bits5
+.type bn_get_bits5,\@abi-omnipotent
+.align 16
+bn_get_bits5:
+ lea 0($inp),%r10
+ lea 1($inp),%r11
+ mov $num,%ecx
+ shr \$4,$num
+ and \$15,%ecx
+ lea -8(%ecx),%eax
+ cmp \$11,%ecx
+ cmova %r11,%r10
+ cmova %eax,%ecx
+ movzw (%r10,$num,2),%eax
+ shrl %cl,%eax
+ and \$31,%eax
+ ret
+.size bn_get_bits5,.-bn_get_bits5
+
.globl bn_scatter5
.type bn_scatter5,\@abi-omnipotent
.align 16
@@ -868,13 +3272,13 @@ $code.=<<___ if ($win64);
.byte 0x0f,0x29,0x7c,0x24,0x10 #movdqa %xmm7,0x10(%rsp)
___
$code.=<<___;
- mov $idx,%r11
+ mov $idx,%r11d
shr \$`log($N/8)/log(2)`,$idx
and \$`$N/8-1`,%r11
not $idx
lea .Lmagic_masks(%rip),%rax
and \$`2**5/($N/8)-1`,$idx # 5 is "window size"
- lea 96($tbl,%r11,8),$tbl # pointer within 1st cache line
+ lea 128($tbl,%r11,8),$tbl # pointer within 1st cache line
movq 0(%rax,$idx,8),%xmm4 # set of masks denoting which
movq 8(%rax,$idx,8),%xmm5 # cache line contains element
movq 16(%rax,$idx,8),%xmm6 # denoted by 7th argument
@@ -882,15 +3286,16 @@ $code.=<<___;
jmp .Lgather
.align 16
.Lgather:
- movq `0*$STRIDE/4-96`($tbl),%xmm0
- movq `1*$STRIDE/4-96`($tbl),%xmm1
+ movq `0*$STRIDE/4-128`($tbl),%xmm0
+ movq `1*$STRIDE/4-128`($tbl),%xmm1
pand %xmm4,%xmm0
- movq `2*$STRIDE/4-96`($tbl),%xmm2
+ movq `2*$STRIDE/4-128`($tbl),%xmm2
pand %xmm5,%xmm1
- movq `3*$STRIDE/4-96`($tbl),%xmm3
+ movq `3*$STRIDE/4-128`($tbl),%xmm3
pand %xmm6,%xmm2
por %xmm1,%xmm0
pand %xmm7,%xmm3
+ .byte 0x67,0x67
por %xmm2,%xmm0
lea $STRIDE($tbl),$tbl
por %xmm3,%xmm0
@@ -954,26 +3359,27 @@ mul_handler:
cmp %r10,%rbx # context->Rip<end of prologue label
jb .Lcommon_seh_tail
- lea `40+48`(%rax),%rax
-
- mov 4(%r11),%r10d # HandlerData[1]
- lea (%rsi,%r10),%r10 # end of alloca label
- cmp %r10,%rbx # context->Rip<end of alloca label
- jb .Lcommon_seh_tail
-
mov 152($context),%rax # pull context->Rsp
- mov 8(%r11),%r10d # HandlerData[2]
+ mov 4(%r11),%r10d # HandlerData[1]
lea (%rsi,%r10),%r10 # epilogue label
cmp %r10,%rbx # context->Rip>=epilogue label
jae .Lcommon_seh_tail
+ lea .Lmul_epilogue(%rip),%r10
+ cmp %r10,%rbx
+ jb .Lbody_40
+
mov 192($context),%r10 # pull $num
mov 8(%rax,%r10,8),%rax # pull saved stack pointer
+ jmp .Lbody_proceed
+
+.Lbody_40:
+ mov 40(%rax),%rax # pull saved stack pointer
+.Lbody_proceed:
- movaps (%rax),%xmm0
- movaps 16(%rax),%xmm1
- lea `40+48`(%rax),%rax
+ movaps -88(%rax),%xmm0
+ movaps -72(%rax),%xmm1
mov -8(%rax),%rbx
mov -16(%rax),%rbp
@@ -1040,6 +3446,24 @@ mul_handler:
.rva .LSEH_end_bn_mul4x_mont_gather5
.rva .LSEH_info_bn_mul4x_mont_gather5
+ .rva .LSEH_begin_bn_power5
+ .rva .LSEH_end_bn_power5
+ .rva .LSEH_info_bn_power5
+
+ .rva .LSEH_begin_bn_from_mont8x
+ .rva .LSEH_end_bn_from_mont8x
+ .rva .LSEH_info_bn_from_mont8x
+___
+$code.=<<___ if ($addx);
+ .rva .LSEH_begin_bn_mulx4x_mont_gather5
+ .rva .LSEH_end_bn_mulx4x_mont_gather5
+ .rva .LSEH_info_bn_mulx4x_mont_gather5
+
+ .rva .LSEH_begin_bn_powerx5
+ .rva .LSEH_end_bn_powerx5
+ .rva .LSEH_info_bn_powerx5
+___
+$code.=<<___;
.rva .LSEH_begin_bn_gather5
.rva .LSEH_end_bn_gather5
.rva .LSEH_info_bn_gather5
@@ -1049,12 +3473,36 @@ mul_handler:
.LSEH_info_bn_mul_mont_gather5:
.byte 9,0,0,0
.rva mul_handler
- .rva .Lmul_alloca,.Lmul_body,.Lmul_epilogue # HandlerData[]
+ .rva .Lmul_body,.Lmul_epilogue # HandlerData[]
.align 8
.LSEH_info_bn_mul4x_mont_gather5:
.byte 9,0,0,0
.rva mul_handler
- .rva .Lmul4x_alloca,.Lmul4x_body,.Lmul4x_epilogue # HandlerData[]
+ .rva .Lmul4x_body,.Lmul4x_epilogue # HandlerData[]
+.align 8
+.LSEH_info_bn_power5:
+ .byte 9,0,0,0
+ .rva mul_handler
+ .rva .Lpower5_body,.Lpower5_epilogue # HandlerData[]
+.align 8
+.LSEH_info_bn_from_mont8x:
+ .byte 9,0,0,0
+ .rva mul_handler
+ .rva .Lfrom_body,.Lfrom_epilogue # HandlerData[]
+___
+$code.=<<___ if ($addx);
+.align 8
+.LSEH_info_bn_mulx4x_mont_gather5:
+ .byte 9,0,0,0
+ .rva mul_handler
+ .rva .Lmulx4x_body,.Lmulx4x_epilogue # HandlerData[]
+.align 8
+.LSEH_info_bn_powerx5:
+ .byte 9,0,0,0
+ .rva mul_handler
+ .rva .Lpowerx5_body,.Lpowerx5_epilogue # HandlerData[]
+___
+$code.=<<___;
.align 8
.LSEH_info_bn_gather5:
.byte 0x01,0x0d,0x05,0x00
diff --git a/crypto/openssl/crypto/bn/bn.h b/crypto/openssl/crypto/bn/bn.h
index 47d8c71..5696965 100644
--- a/crypto/openssl/crypto/bn/bn.h
+++ b/crypto/openssl/crypto/bn/bn.h
@@ -256,24 +256,6 @@ extern "C" {
# define BN_HEX_FMT2 "%08X"
# endif
-/*
- * 2011-02-22 SMS. In various places, a size_t variable or a type cast to
- * size_t was used to perform integer-only operations on pointers. This
- * failed on VMS with 64-bit pointers (CC /POINTER_SIZE = 64) because size_t
- * is still only 32 bits. What's needed in these cases is an integer type
- * with the same size as a pointer, which size_t is not certain to be. The
- * only fix here is VMS-specific.
- */
-# if defined(OPENSSL_SYS_VMS)
-# if __INITIAL_POINTER_SIZE == 64
-# define PTR_SIZE_INT long long
-# else /* __INITIAL_POINTER_SIZE == 64 */
-# define PTR_SIZE_INT int
-# endif /* __INITIAL_POINTER_SIZE == 64 [else] */
-# else /* defined(OPENSSL_SYS_VMS) */
-# define PTR_SIZE_INT size_t
-# endif /* defined(OPENSSL_SYS_VMS) [else] */
-
# define BN_DEFAULT_BITS 1280
# define BN_FLG_MALLOCED 0x01
diff --git a/crypto/openssl/crypto/bn/bn_asm.c b/crypto/openssl/crypto/bn/bn_asm.c
index 114acf3..03a33cf 100644
--- a/crypto/openssl/crypto/bn/bn_asm.c
+++ b/crypto/openssl/crypto/bn/bn_asm.c
@@ -489,121 +489,144 @@ BN_ULONG bn_sub_words(BN_ULONG *r, const BN_ULONG *a, const BN_ULONG *b,
* c=(c2,c1,c0)
*/
+# ifdef BN_LLONG
/*
- * Keep in mind that carrying into high part of multiplication result
- * can not overflow, because it cannot be all-ones.
+ * Keep in mind that additions to multiplication result can not
+ * overflow, because its high half cannot be all-ones.
*/
-# ifdef BN_LLONG
-# define mul_add_c(a,b,c0,c1,c2) \
- t=(BN_ULLONG)a*b; \
- t1=(BN_ULONG)Lw(t); \
- t2=(BN_ULONG)Hw(t); \
- c0=(c0+t1)&BN_MASK2; if ((c0) < t1) t2++; \
- c1=(c1+t2)&BN_MASK2; if ((c1) < t2) c2++;
-
-# define mul_add_c2(a,b,c0,c1,c2) \
- t=(BN_ULLONG)a*b; \
- tt=(t+t)&BN_MASK; \
- if (tt < t) c2++; \
- t1=(BN_ULONG)Lw(tt); \
- t2=(BN_ULONG)Hw(tt); \
- c0=(c0+t1)&BN_MASK2; \
- if ((c0 < t1) && (((++t2)&BN_MASK2) == 0)) c2++; \
- c1=(c1+t2)&BN_MASK2; if ((c1) < t2) c2++;
-
-# define sqr_add_c(a,i,c0,c1,c2) \
- t=(BN_ULLONG)a[i]*a[i]; \
- t1=(BN_ULONG)Lw(t); \
- t2=(BN_ULONG)Hw(t); \
- c0=(c0+t1)&BN_MASK2; if ((c0) < t1) t2++; \
- c1=(c1+t2)&BN_MASK2; if ((c1) < t2) c2++;
+# define mul_add_c(a,b,c0,c1,c2) do { \
+ BN_ULONG hi; \
+ BN_ULLONG t = (BN_ULLONG)(a)*(b); \
+ t += c0; /* no carry */ \
+ c0 = (BN_ULONG)Lw(t); \
+ hi = (BN_ULONG)Hw(t); \
+ c1 = (c1+hi)&BN_MASK2; if (c1<hi) c2++; \
+ } while(0)
+
+# define mul_add_c2(a,b,c0,c1,c2) do { \
+ BN_ULONG hi; \
+ BN_ULLONG t = (BN_ULLONG)(a)*(b); \
+ BN_ULLONG tt = t+c0; /* no carry */ \
+ c0 = (BN_ULONG)Lw(tt); \
+ hi = (BN_ULONG)Hw(tt); \
+ c1 = (c1+hi)&BN_MASK2; if (c1<hi) c2++; \
+ t += c0; /* no carry */ \
+ c0 = (BN_ULONG)Lw(t); \
+ hi = (BN_ULONG)Hw(t); \
+ c1 = (c1+hi)&BN_MASK2; if (c1<hi) c2++; \
+ } while(0)
+
+# define sqr_add_c(a,i,c0,c1,c2) do { \
+ BN_ULONG hi; \
+ BN_ULLONG t = (BN_ULLONG)a[i]*a[i]; \
+ t += c0; /* no carry */ \
+ c0 = (BN_ULONG)Lw(t); \
+ hi = (BN_ULONG)Hw(t); \
+ c1 = (c1+hi)&BN_MASK2; if (c1<hi) c2++; \
+ } while(0)
# define sqr_add_c2(a,i,j,c0,c1,c2) \
mul_add_c2((a)[i],(a)[j],c0,c1,c2)
# elif defined(BN_UMULT_LOHI)
-
-# define mul_add_c(a,b,c0,c1,c2) { \
- BN_ULONG ta=(a),tb=(b); \
- BN_UMULT_LOHI(t1,t2,ta,tb); \
- c0 += t1; t2 += (c0<t1)?1:0; \
- c1 += t2; c2 += (c1<t2)?1:0; \
- }
-
-# define mul_add_c2(a,b,c0,c1,c2) { \
- BN_ULONG ta=(a),tb=(b),t0; \
- BN_UMULT_LOHI(t0,t1,ta,tb); \
- c0 += t0; t2 = t1+((c0<t0)?1:0);\
- c1 += t2; c2 += (c1<t2)?1:0; \
- c0 += t0; t1 += (c0<t0)?1:0; \
- c1 += t1; c2 += (c1<t1)?1:0; \
- }
-
-# define sqr_add_c(a,i,c0,c1,c2) { \
- BN_ULONG ta=(a)[i]; \
- BN_UMULT_LOHI(t1,t2,ta,ta); \
- c0 += t1; t2 += (c0<t1)?1:0; \
- c1 += t2; c2 += (c1<t2)?1:0; \
- }
+/*
+ * Keep in mind that additions to hi can not overflow, because
+ * the high word of a multiplication result cannot be all-ones.
+ */
+# define mul_add_c(a,b,c0,c1,c2) do { \
+ BN_ULONG ta = (a), tb = (b); \
+ BN_ULONG lo, hi; \
+ BN_UMULT_LOHI(lo,hi,ta,tb); \
+ c0 += lo; hi += (c0<lo)?1:0; \
+ c1 += hi; c2 += (c1<hi)?1:0; \
+ } while(0)
+
+# define mul_add_c2(a,b,c0,c1,c2) do { \
+ BN_ULONG ta = (a), tb = (b); \
+ BN_ULONG lo, hi, tt; \
+ BN_UMULT_LOHI(lo,hi,ta,tb); \
+ c0 += lo; tt = hi+((c0<lo)?1:0); \
+ c1 += tt; c2 += (c1<tt)?1:0; \
+ c0 += lo; hi += (c0<lo)?1:0; \
+ c1 += hi; c2 += (c1<hi)?1:0; \
+ } while(0)
+
+# define sqr_add_c(a,i,c0,c1,c2) do { \
+ BN_ULONG ta = (a)[i]; \
+ BN_ULONG lo, hi; \
+ BN_UMULT_LOHI(lo,hi,ta,ta); \
+ c0 += lo; hi += (c0<lo)?1:0; \
+ c1 += hi; c2 += (c1<hi)?1:0; \
+ } while(0)
# define sqr_add_c2(a,i,j,c0,c1,c2) \
mul_add_c2((a)[i],(a)[j],c0,c1,c2)
# elif defined(BN_UMULT_HIGH)
-
-# define mul_add_c(a,b,c0,c1,c2) { \
- BN_ULONG ta=(a),tb=(b); \
- t1 = ta * tb; \
- t2 = BN_UMULT_HIGH(ta,tb); \
- c0 += t1; t2 += (c0<t1)?1:0; \
- c1 += t2; c2 += (c1<t2)?1:0; \
- }
-
-# define mul_add_c2(a,b,c0,c1,c2) { \
- BN_ULONG ta=(a),tb=(b),t0; \
- t1 = BN_UMULT_HIGH(ta,tb); \
- t0 = ta * tb; \
- c0 += t0; t2 = t1+((c0<t0)?1:0);\
- c1 += t2; c2 += (c1<t2)?1:0; \
- c0 += t0; t1 += (c0<t0)?1:0; \
- c1 += t1; c2 += (c1<t1)?1:0; \
- }
-
-# define sqr_add_c(a,i,c0,c1,c2) { \
- BN_ULONG ta=(a)[i]; \
- t1 = ta * ta; \
- t2 = BN_UMULT_HIGH(ta,ta); \
- c0 += t1; t2 += (c0<t1)?1:0; \
- c1 += t2; c2 += (c1<t2)?1:0; \
- }
+/*
+ * Keep in mind that additions to hi can not overflow, because
+ * the high word of a multiplication result cannot be all-ones.
+ */
+# define mul_add_c(a,b,c0,c1,c2) do { \
+ BN_ULONG ta = (a), tb = (b); \
+ BN_ULONG lo = ta * tb; \
+ BN_ULONG hi = BN_UMULT_HIGH(ta,tb); \
+ c0 += lo; hi += (c0<lo)?1:0; \
+ c1 += hi; c2 += (c1<hi)?1:0; \
+ } while(0)
+
+# define mul_add_c2(a,b,c0,c1,c2) do { \
+ BN_ULONG ta = (a), tb = (b), tt; \
+ BN_ULONG lo = ta * tb; \
+ BN_ULONG hi = BN_UMULT_HIGH(ta,tb); \
+ c0 += lo; tt = hi + ((c0<lo)?1:0); \
+ c1 += tt; c2 += (c1<tt)?1:0; \
+ c0 += lo; hi += (c0<lo)?1:0; \
+ c1 += hi; c2 += (c1<hi)?1:0; \
+ } while(0)
+
+# define sqr_add_c(a,i,c0,c1,c2) do { \
+ BN_ULONG ta = (a)[i]; \
+ BN_ULONG lo = ta * ta; \
+ BN_ULONG hi = BN_UMULT_HIGH(ta,ta); \
+ c0 += lo; hi += (c0<lo)?1:0; \
+ c1 += hi; c2 += (c1<hi)?1:0; \
+ } while(0)
# define sqr_add_c2(a,i,j,c0,c1,c2) \
mul_add_c2((a)[i],(a)[j],c0,c1,c2)
# else /* !BN_LLONG */
-# define mul_add_c(a,b,c0,c1,c2) \
- t1=LBITS(a); t2=HBITS(a); \
- bl=LBITS(b); bh=HBITS(b); \
- mul64(t1,t2,bl,bh); \
- c0=(c0+t1)&BN_MASK2; if ((c0) < t1) t2++; \
- c1=(c1+t2)&BN_MASK2; if ((c1) < t2) c2++;
-
-# define mul_add_c2(a,b,c0,c1,c2) \
- t1=LBITS(a); t2=HBITS(a); \
- bl=LBITS(b); bh=HBITS(b); \
- mul64(t1,t2,bl,bh); \
- if (t2 & BN_TBIT) c2++; \
- t2=(t2+t2)&BN_MASK2; \
- if (t1 & BN_TBIT) t2++; \
- t1=(t1+t1)&BN_MASK2; \
- c0=(c0+t1)&BN_MASK2; \
- if ((c0 < t1) && (((++t2)&BN_MASK2) == 0)) c2++; \
- c1=(c1+t2)&BN_MASK2; if ((c1) < t2) c2++;
-
-# define sqr_add_c(a,i,c0,c1,c2) \
- sqr64(t1,t2,(a)[i]); \
- c0=(c0+t1)&BN_MASK2; if ((c0) < t1) t2++; \
- c1=(c1+t2)&BN_MASK2; if ((c1) < t2) c2++;
+/*
+ * Keep in mind that additions to hi can not overflow, because
+ * the high word of a multiplication result cannot be all-ones.
+ */
+# define mul_add_c(a,b,c0,c1,c2) do { \
+ BN_ULONG lo = LBITS(a), hi = HBITS(a); \
+ BN_ULONG bl = LBITS(b), bh = HBITS(b); \
+ mul64(lo,hi,bl,bh); \
+ c0 = (c0+lo)&BN_MASK2; if (c0<lo) hi++; \
+ c1 = (c1+hi)&BN_MASK2; if (c1<hi) c2++; \
+ } while(0)
+
+# define mul_add_c2(a,b,c0,c1,c2) do { \
+ BN_ULONG tt; \
+ BN_ULONG lo = LBITS(a), hi = HBITS(a); \
+ BN_ULONG bl = LBITS(b), bh = HBITS(b); \
+ mul64(lo,hi,bl,bh); \
+ tt = hi; \
+ c0 = (c0+lo)&BN_MASK2; if (c0<lo) tt++; \
+ c1 = (c1+tt)&BN_MASK2; if (c1<tt) c2++; \
+ c0 = (c0+lo)&BN_MASK2; if (c0<lo) hi++; \
+ c1 = (c1+hi)&BN_MASK2; if (c1<hi) c2++; \
+ } while(0)
+
+# define sqr_add_c(a,i,c0,c1,c2) do { \
+ BN_ULONG lo, hi; \
+ sqr64(lo,hi,(a)[i]); \
+ c0 = (c0+lo)&BN_MASK2; if (c0<lo) hi++; \
+ c1 = (c1+hi)&BN_MASK2; if (c1<hi) c2++; \
+ } while(0)
# define sqr_add_c2(a,i,j,c0,c1,c2) \
mul_add_c2((a)[i],(a)[j],c0,c1,c2)
@@ -611,12 +634,6 @@ BN_ULONG bn_sub_words(BN_ULONG *r, const BN_ULONG *a, const BN_ULONG *b,
void bn_mul_comba8(BN_ULONG *r, BN_ULONG *a, BN_ULONG *b)
{
-# ifdef BN_LLONG
- BN_ULLONG t;
-# else
- BN_ULONG bl, bh;
-# endif
- BN_ULONG t1, t2;
BN_ULONG c1, c2, c3;
c1 = 0;
@@ -720,12 +737,6 @@ void bn_mul_comba8(BN_ULONG *r, BN_ULONG *a, BN_ULONG *b)
void bn_mul_comba4(BN_ULONG *r, BN_ULONG *a, BN_ULONG *b)
{
-# ifdef BN_LLONG
- BN_ULLONG t;
-# else
- BN_ULONG bl, bh;
-# endif
- BN_ULONG t1, t2;
BN_ULONG c1, c2, c3;
c1 = 0;
@@ -765,12 +776,6 @@ void bn_mul_comba4(BN_ULONG *r, BN_ULONG *a, BN_ULONG *b)
void bn_sqr_comba8(BN_ULONG *r, const BN_ULONG *a)
{
-# ifdef BN_LLONG
- BN_ULLONG t, tt;
-# else
- BN_ULONG bl, bh;
-# endif
- BN_ULONG t1, t2;
BN_ULONG c1, c2, c3;
c1 = 0;
@@ -846,12 +851,6 @@ void bn_sqr_comba8(BN_ULONG *r, const BN_ULONG *a)
void bn_sqr_comba4(BN_ULONG *r, const BN_ULONG *a)
{
-# ifdef BN_LLONG
- BN_ULLONG t, tt;
-# else
- BN_ULONG bl, bh;
-# endif
- BN_ULONG t1, t2;
BN_ULONG c1, c2, c3;
c1 = 0;
diff --git a/crypto/openssl/crypto/bn/bn_exp.c b/crypto/openssl/crypto/bn/bn_exp.c
index 27146c8..24afdd6 100644
--- a/crypto/openssl/crypto/bn/bn_exp.c
+++ b/crypto/openssl/crypto/bn/bn_exp.c
@@ -122,6 +122,17 @@
# ifndef alloca
# define alloca(s) __builtin_alloca((s))
# endif
+#elif defined(__sun)
+# include <alloca.h>
+#endif
+
+#include "rsaz_exp.h"
+
+#undef SPARC_T4_MONT
+#if defined(OPENSSL_BN_ASM_MONT) && (defined(__sparc__) || defined(__sparc))
+# include "sparc_arch.h"
+extern unsigned int OPENSSL_sparcv9cap_P[];
+# define SPARC_T4_MONT
#endif
/* maximum precomputation table size for *variable* sliding windows */
@@ -464,6 +475,23 @@ int BN_mod_exp_mont(BIGNUM *rr, const BIGNUM *a, const BIGNUM *p,
wstart = bits - 1; /* The top bit of the window */
wend = 0; /* The bottom bit of the window */
+#if 1 /* by Shay Gueron's suggestion */
+ j = m->top; /* borrow j */
+ if (m->d[j - 1] & (((BN_ULONG)1) << (BN_BITS2 - 1))) {
+ if (bn_wexpand(r, j) == NULL)
+ goto err;
+ /* 2^(top*BN_BITS2) - m */
+ r->d[0] = (0 - m->d[0]) & BN_MASK2;
+ for (i = 1; i < j; i++)
+ r->d[i] = (~m->d[i]) & BN_MASK2;
+ r->top = j;
+ /*
+ * Upper words will be zero if the corresponding words of 'm' were
+ * 0xfff[...], so decrement r->top accordingly.
+ */
+ bn_correct_top(r);
+ } else
+#endif
if (!BN_to_montgomery(r, BN_value_one(), mont, ctx))
goto err;
for (;;) {
@@ -515,6 +543,17 @@ int BN_mod_exp_mont(BIGNUM *rr, const BIGNUM *a, const BIGNUM *p,
if (wstart < 0)
break;
}
+#if defined(SPARC_T4_MONT)
+ if (OPENSSL_sparcv9cap_P[0] & (SPARCV9_VIS3 | SPARCV9_PREFER_FPU)) {
+ j = mont->N.top; /* borrow j */
+ val[0]->d[0] = 1; /* borrow val[0] */
+ for (i = 1; i < j; i++)
+ val[0]->d[i] = 0;
+ val[0]->top = j;
+ if (!BN_mod_mul_montgomery(rr, r, val[0], mont, ctx))
+ goto err;
+ } else
+#endif
if (!BN_from_montgomery(rr, r, mont, ctx))
goto err;
ret = 1;
@@ -526,6 +565,27 @@ int BN_mod_exp_mont(BIGNUM *rr, const BIGNUM *a, const BIGNUM *p,
return (ret);
}
+#if defined(SPARC_T4_MONT)
+static BN_ULONG bn_get_bits(const BIGNUM *a, int bitpos)
+{
+ BN_ULONG ret = 0;
+ int wordpos;
+
+ wordpos = bitpos / BN_BITS2;
+ bitpos %= BN_BITS2;
+ if (wordpos >= 0 && wordpos < a->top) {
+ ret = a->d[wordpos] & BN_MASK2;
+ if (bitpos) {
+ ret >>= bitpos;
+ if (++wordpos < a->top)
+ ret |= a->d[wordpos] << (BN_BITS2 - bitpos);
+ }
+ }
+
+ return ret & BN_MASK2;
+}
+#endif
+
/*
* BN_mod_exp_mont_consttime() stores the precomputed powers in a specific
* layout so that accessing any of these table values shows the same access
@@ -594,6 +654,9 @@ int BN_mod_exp_mont_consttime(BIGNUM *rr, const BIGNUM *a, const BIGNUM *p,
int powerbufLen = 0;
unsigned char *powerbuf = NULL;
BIGNUM tmp, am;
+#if defined(SPARC_T4_MONT)
+ unsigned int t4 = 0;
+#endif
bn_check_top(a);
bn_check_top(p);
@@ -626,21 +689,62 @@ int BN_mod_exp_mont_consttime(BIGNUM *rr, const BIGNUM *a, const BIGNUM *p,
goto err;
}
+#ifdef RSAZ_ENABLED
+ /*
+ * If the size of the operands allow it, perform the optimized
+ * RSAZ exponentiation. For further information see
+ * crypto/bn/rsaz_exp.c and accompanying assembly modules.
+ */
+ if ((16 == a->top) && (16 == p->top) && (BN_num_bits(m) == 1024)
+ && rsaz_avx2_eligible()) {
+ if (NULL == bn_wexpand(rr, 16))
+ goto err;
+ RSAZ_1024_mod_exp_avx2(rr->d, a->d, p->d, m->d, mont->RR.d,
+ mont->n0[0]);
+ rr->top = 16;
+ rr->neg = 0;
+ bn_correct_top(rr);
+ ret = 1;
+ goto err;
+ } else if ((8 == a->top) && (8 == p->top) && (BN_num_bits(m) == 512)) {
+ if (NULL == bn_wexpand(rr, 8))
+ goto err;
+ RSAZ_512_mod_exp(rr->d, a->d, p->d, m->d, mont->n0[0], mont->RR.d);
+ rr->top = 8;
+ rr->neg = 0;
+ bn_correct_top(rr);
+ ret = 1;
+ goto err;
+ }
+#endif
+
/* Get the window size to use with size of p. */
window = BN_window_bits_for_ctime_exponent_size(bits);
+#if defined(SPARC_T4_MONT)
+ if (window >= 5 && (top & 15) == 0 && top <= 64 &&
+ (OPENSSL_sparcv9cap_P[1] & (CFR_MONTMUL | CFR_MONTSQR)) ==
+ (CFR_MONTMUL | CFR_MONTSQR) && (t4 = OPENSSL_sparcv9cap_P[0]))
+ window = 5;
+ else
+#endif
#if defined(OPENSSL_BN_ASM_MONT5)
- if (window == 6 && bits <= 1024)
- window = 5; /* ~5% improvement of 2048-bit RSA sign */
+ if (window >= 5) {
+ window = 5; /* ~5% improvement for RSA2048 sign, and even
+ * for RSA4096 */
+ if ((top & 7) == 0)
+ powerbufLen += 2 * top * sizeof(m->d[0]);
+ }
#endif
+ (void)0;
/*
* Allocate a buffer large enough to hold all of the pre-computed powers
* of am, am itself and tmp.
*/
numPowers = 1 << window;
- powerbufLen = sizeof(m->d[0]) * (top * numPowers +
- ((2 * top) >
- numPowers ? (2 * top) : numPowers));
+ powerbufLen += sizeof(m->d[0]) * (top * numPowers +
+ ((2 * top) >
+ numPowers ? (2 * top) : numPowers));
#ifdef alloca
if (powerbufLen < 3072)
powerbufFree =
@@ -670,15 +774,17 @@ int BN_mod_exp_mont_consttime(BIGNUM *rr, const BIGNUM *a, const BIGNUM *p,
tmp.flags = am.flags = BN_FLG_STATIC_DATA;
/* prepare a^0 in Montgomery domain */
-#if 1
+#if 1 /* by Shay Gueron's suggestion */
+ if (m->d[top - 1] & (((BN_ULONG)1) << (BN_BITS2 - 1))) {
+ /* 2^(top*BN_BITS2) - m */
+ tmp.d[0] = (0 - m->d[0]) & BN_MASK2;
+ for (i = 1; i < top; i++)
+ tmp.d[i] = (~m->d[i]) & BN_MASK2;
+ tmp.top = top;
+ } else
+#endif
if (!BN_to_montgomery(&tmp, BN_value_one(), mont, ctx))
goto err;
-#else
- tmp.d[0] = (0 - m->d[0]) & BN_MASK2; /* 2^(top*BN_BITS2) - m */
- for (i = 1; i < top; i++)
- tmp.d[i] = (~m->d[i]) & BN_MASK2;
- tmp.top = top;
-#endif
/* prepare a^1 in Montgomery domain */
if (a->neg || BN_ucmp(a, m) >= 0) {
@@ -689,6 +795,138 @@ int BN_mod_exp_mont_consttime(BIGNUM *rr, const BIGNUM *a, const BIGNUM *p,
} else if (!BN_to_montgomery(&am, a, mont, ctx))
goto err;
+#if defined(SPARC_T4_MONT)
+ if (t4) {
+ typedef int (*bn_pwr5_mont_f) (BN_ULONG *tp, const BN_ULONG *np,
+ const BN_ULONG *n0, const void *table,
+ int power, int bits);
+ int bn_pwr5_mont_t4_8(BN_ULONG *tp, const BN_ULONG *np,
+ const BN_ULONG *n0, const void *table,
+ int power, int bits);
+ int bn_pwr5_mont_t4_16(BN_ULONG *tp, const BN_ULONG *np,
+ const BN_ULONG *n0, const void *table,
+ int power, int bits);
+ int bn_pwr5_mont_t4_24(BN_ULONG *tp, const BN_ULONG *np,
+ const BN_ULONG *n0, const void *table,
+ int power, int bits);
+ int bn_pwr5_mont_t4_32(BN_ULONG *tp, const BN_ULONG *np,
+ const BN_ULONG *n0, const void *table,
+ int power, int bits);
+ static const bn_pwr5_mont_f pwr5_funcs[4] = {
+ bn_pwr5_mont_t4_8, bn_pwr5_mont_t4_16,
+ bn_pwr5_mont_t4_24, bn_pwr5_mont_t4_32
+ };
+ bn_pwr5_mont_f pwr5_worker = pwr5_funcs[top / 16 - 1];
+
+ typedef int (*bn_mul_mont_f) (BN_ULONG *rp, const BN_ULONG *ap,
+ const void *bp, const BN_ULONG *np,
+ const BN_ULONG *n0);
+ int bn_mul_mont_t4_8(BN_ULONG *rp, const BN_ULONG *ap, const void *bp,
+ const BN_ULONG *np, const BN_ULONG *n0);
+ int bn_mul_mont_t4_16(BN_ULONG *rp, const BN_ULONG *ap,
+ const void *bp, const BN_ULONG *np,
+ const BN_ULONG *n0);
+ int bn_mul_mont_t4_24(BN_ULONG *rp, const BN_ULONG *ap,
+ const void *bp, const BN_ULONG *np,
+ const BN_ULONG *n0);
+ int bn_mul_mont_t4_32(BN_ULONG *rp, const BN_ULONG *ap,
+ const void *bp, const BN_ULONG *np,
+ const BN_ULONG *n0);
+ static const bn_mul_mont_f mul_funcs[4] = {
+ bn_mul_mont_t4_8, bn_mul_mont_t4_16,
+ bn_mul_mont_t4_24, bn_mul_mont_t4_32
+ };
+ bn_mul_mont_f mul_worker = mul_funcs[top / 16 - 1];
+
+ void bn_mul_mont_vis3(BN_ULONG *rp, const BN_ULONG *ap,
+ const void *bp, const BN_ULONG *np,
+ const BN_ULONG *n0, int num);
+ void bn_mul_mont_t4(BN_ULONG *rp, const BN_ULONG *ap,
+ const void *bp, const BN_ULONG *np,
+ const BN_ULONG *n0, int num);
+ void bn_mul_mont_gather5_t4(BN_ULONG *rp, const BN_ULONG *ap,
+ const void *table, const BN_ULONG *np,
+ const BN_ULONG *n0, int num, int power);
+ void bn_flip_n_scatter5_t4(const BN_ULONG *inp, size_t num,
+ void *table, size_t power);
+ void bn_gather5_t4(BN_ULONG *out, size_t num,
+ void *table, size_t power);
+ void bn_flip_t4(BN_ULONG *dst, BN_ULONG *src, size_t num);
+
+ BN_ULONG *np = mont->N.d, *n0 = mont->n0;
+ int stride = 5 * (6 - (top / 16 - 1)); /* multiple of 5, but less
+ * than 32 */
+
+ /*
+ * BN_to_montgomery can contaminate words above .top [in
+ * BN_DEBUG[_DEBUG] build]...
+ */
+ for (i = am.top; i < top; i++)
+ am.d[i] = 0;
+ for (i = tmp.top; i < top; i++)
+ tmp.d[i] = 0;
+
+ bn_flip_n_scatter5_t4(tmp.d, top, powerbuf, 0);
+ bn_flip_n_scatter5_t4(am.d, top, powerbuf, 1);
+ if (!(*mul_worker) (tmp.d, am.d, am.d, np, n0) &&
+ !(*mul_worker) (tmp.d, am.d, am.d, np, n0))
+ bn_mul_mont_vis3(tmp.d, am.d, am.d, np, n0, top);
+ bn_flip_n_scatter5_t4(tmp.d, top, powerbuf, 2);
+
+ for (i = 3; i < 32; i++) {
+ /* Calculate a^i = a^(i-1) * a */
+ if (!(*mul_worker) (tmp.d, tmp.d, am.d, np, n0) &&
+ !(*mul_worker) (tmp.d, tmp.d, am.d, np, n0))
+ bn_mul_mont_vis3(tmp.d, tmp.d, am.d, np, n0, top);
+ bn_flip_n_scatter5_t4(tmp.d, top, powerbuf, i);
+ }
+
+ /* switch to 64-bit domain */
+ np = alloca(top * sizeof(BN_ULONG));
+ top /= 2;
+ bn_flip_t4(np, mont->N.d, top);
+
+ bits--;
+ for (wvalue = 0, i = bits % 5; i >= 0; i--, bits--)
+ wvalue = (wvalue << 1) + BN_is_bit_set(p, bits);
+ bn_gather5_t4(tmp.d, top, powerbuf, wvalue);
+
+ /*
+ * Scan the exponent one window at a time starting from the most
+ * significant bits.
+ */
+ while (bits >= 0) {
+ if (bits < stride)
+ stride = bits + 1;
+ bits -= stride;
+ wvalue = bn_get_bits(p, bits + 1);
+
+ if ((*pwr5_worker) (tmp.d, np, n0, powerbuf, wvalue, stride))
+ continue;
+ /* retry once and fall back */
+ if ((*pwr5_worker) (tmp.d, np, n0, powerbuf, wvalue, stride))
+ continue;
+
+ bits += stride - 5;
+ wvalue >>= stride - 5;
+ wvalue &= 31;
+ bn_mul_mont_t4(tmp.d, tmp.d, tmp.d, np, n0, top);
+ bn_mul_mont_t4(tmp.d, tmp.d, tmp.d, np, n0, top);
+ bn_mul_mont_t4(tmp.d, tmp.d, tmp.d, np, n0, top);
+ bn_mul_mont_t4(tmp.d, tmp.d, tmp.d, np, n0, top);
+ bn_mul_mont_t4(tmp.d, tmp.d, tmp.d, np, n0, top);
+ bn_mul_mont_gather5_t4(tmp.d, tmp.d, powerbuf, np, n0, top,
+ wvalue);
+ }
+
+ bn_flip_t4(tmp.d, tmp.d, top);
+ top *= 2;
+ /* back to 32-bit domain */
+ tmp.top = top;
+ bn_correct_top(&tmp);
+ OPENSSL_cleanse(np, top * sizeof(BN_ULONG));
+ } else
+#endif
#if defined(OPENSSL_BN_ASM_MONT5)
if (window == 5 && top > 1) {
/*
@@ -707,8 +945,15 @@ int BN_mod_exp_mont_consttime(BIGNUM *rr, const BIGNUM *a, const BIGNUM *p,
void bn_scatter5(const BN_ULONG *inp, size_t num,
void *table, size_t power);
void bn_gather5(BN_ULONG *out, size_t num, void *table, size_t power);
+ void bn_power5(BN_ULONG *rp, const BN_ULONG *ap,
+ const void *table, const BN_ULONG *np,
+ const BN_ULONG *n0, int num, int power);
+ int bn_get_bits5(const BN_ULONG *ap, int off);
+ int bn_from_montgomery(BN_ULONG *rp, const BN_ULONG *ap,
+ const BN_ULONG *not_used, const BN_ULONG *np,
+ const BN_ULONG *n0, int num);
- BN_ULONG *np = mont->N.d, *n0 = mont->n0;
+ BN_ULONG *np = mont->N.d, *n0 = mont->n0, *np2;
/*
* BN_to_montgomery can contaminate words above .top [in
@@ -719,6 +964,12 @@ int BN_mod_exp_mont_consttime(BIGNUM *rr, const BIGNUM *a, const BIGNUM *p,
for (i = tmp.top; i < top; i++)
tmp.d[i] = 0;
+ if (top & 7)
+ np2 = np;
+ else
+ for (np2 = am.d + top, i = 0; i < top; i++)
+ np2[2 * i] = np[i];
+
bn_scatter5(tmp.d, top, powerbuf, 0);
bn_scatter5(am.d, am.top, powerbuf, 1);
bn_mul_mont(tmp.d, am.d, am.d, np, n0, top);
@@ -727,7 +978,7 @@ int BN_mod_exp_mont_consttime(BIGNUM *rr, const BIGNUM *a, const BIGNUM *p,
# if 0
for (i = 3; i < 32; i++) {
/* Calculate a^i = a^(i-1) * a */
- bn_mul_mont_gather5(tmp.d, am.d, powerbuf, np, n0, top, i - 1);
+ bn_mul_mont_gather5(tmp.d, am.d, powerbuf, np2, n0, top, i - 1);
bn_scatter5(tmp.d, top, powerbuf, i);
}
# else
@@ -738,7 +989,7 @@ int BN_mod_exp_mont_consttime(BIGNUM *rr, const BIGNUM *a, const BIGNUM *p,
}
for (i = 3; i < 8; i += 2) {
int j;
- bn_mul_mont_gather5(tmp.d, am.d, powerbuf, np, n0, top, i - 1);
+ bn_mul_mont_gather5(tmp.d, am.d, powerbuf, np2, n0, top, i - 1);
bn_scatter5(tmp.d, top, powerbuf, i);
for (j = 2 * i; j < 32; j *= 2) {
bn_mul_mont(tmp.d, tmp.d, tmp.d, np, n0, top);
@@ -746,13 +997,13 @@ int BN_mod_exp_mont_consttime(BIGNUM *rr, const BIGNUM *a, const BIGNUM *p,
}
}
for (; i < 16; i += 2) {
- bn_mul_mont_gather5(tmp.d, am.d, powerbuf, np, n0, top, i - 1);
+ bn_mul_mont_gather5(tmp.d, am.d, powerbuf, np2, n0, top, i - 1);
bn_scatter5(tmp.d, top, powerbuf, i);
bn_mul_mont(tmp.d, tmp.d, tmp.d, np, n0, top);
bn_scatter5(tmp.d, top, powerbuf, 2 * i);
}
for (; i < 32; i += 2) {
- bn_mul_mont_gather5(tmp.d, am.d, powerbuf, np, n0, top, i - 1);
+ bn_mul_mont_gather5(tmp.d, am.d, powerbuf, np2, n0, top, i - 1);
bn_scatter5(tmp.d, top, powerbuf, i);
}
# endif
@@ -765,20 +1016,34 @@ int BN_mod_exp_mont_consttime(BIGNUM *rr, const BIGNUM *a, const BIGNUM *p,
* Scan the exponent one window at a time starting from the most
* significant bits.
*/
- while (bits >= 0) {
- for (wvalue = 0, i = 0; i < 5; i++, bits--)
- wvalue = (wvalue << 1) + BN_is_bit_set(p, bits);
+ if (top & 7)
+ while (bits >= 0) {
+ for (wvalue = 0, i = 0; i < 5; i++, bits--)
+ wvalue = (wvalue << 1) + BN_is_bit_set(p, bits);
- bn_mul_mont(tmp.d, tmp.d, tmp.d, np, n0, top);
- bn_mul_mont(tmp.d, tmp.d, tmp.d, np, n0, top);
- bn_mul_mont(tmp.d, tmp.d, tmp.d, np, n0, top);
- bn_mul_mont(tmp.d, tmp.d, tmp.d, np, n0, top);
- bn_mul_mont(tmp.d, tmp.d, tmp.d, np, n0, top);
- bn_mul_mont_gather5(tmp.d, tmp.d, powerbuf, np, n0, top, wvalue);
+ bn_mul_mont(tmp.d, tmp.d, tmp.d, np, n0, top);
+ bn_mul_mont(tmp.d, tmp.d, tmp.d, np, n0, top);
+ bn_mul_mont(tmp.d, tmp.d, tmp.d, np, n0, top);
+ bn_mul_mont(tmp.d, tmp.d, tmp.d, np, n0, top);
+ bn_mul_mont(tmp.d, tmp.d, tmp.d, np, n0, top);
+ bn_mul_mont_gather5(tmp.d, tmp.d, powerbuf, np, n0, top,
+ wvalue);
+ } else {
+ while (bits >= 0) {
+ wvalue = bn_get_bits5(p->d, bits - 4);
+ bits -= 5;
+ bn_power5(tmp.d, tmp.d, powerbuf, np2, n0, top, wvalue);
+ }
}
+ ret = bn_from_montgomery(tmp.d, tmp.d, NULL, np2, n0, top);
tmp.top = top;
bn_correct_top(&tmp);
+ if (ret) {
+ if (!BN_copy(rr, &tmp))
+ ret = 0;
+ goto err; /* non-zero ret means it's not error */
+ }
} else
#endif
{
@@ -844,6 +1109,15 @@ int BN_mod_exp_mont_consttime(BIGNUM *rr, const BIGNUM *a, const BIGNUM *p,
}
/* Convert the final result from montgomery to standard format */
+#if defined(SPARC_T4_MONT)
+ if (OPENSSL_sparcv9cap_P[0] & (SPARCV9_VIS3 | SPARCV9_PREFER_FPU)) {
+ am.d[0] = 1; /* borrow am */
+ for (i = 1; i < top; i++)
+ am.d[i] = 0;
+ if (!BN_mod_mul_montgomery(rr, &tmp, &am, mont, ctx))
+ goto err;
+ } else
+#endif
if (!BN_from_montgomery(rr, &tmp, mont, ctx))
goto err;
ret = 1;
diff --git a/crypto/openssl/crypto/bn/bn_gf2m.c b/crypto/openssl/crypto/bn/bn_gf2m.c
index a0ba8de..cfa1c7c 100644
--- a/crypto/openssl/crypto/bn/bn_gf2m.c
+++ b/crypto/openssl/crypto/bn/bn_gf2m.c
@@ -450,8 +450,7 @@ int BN_GF2m_mod_arr(BIGNUM *r, const BIGNUM *a, const int p[])
d0 = p[k] % BN_BITS2;
d1 = BN_BITS2 - d0;
z[n] ^= (zz << d0);
- tmp_ulong = zz >> d1;
- if (d0 && tmp_ulong)
+ if (d0 && (tmp_ulong = zz >> d1))
z[n + 1] ^= tmp_ulong;
}
diff --git a/crypto/openssl/crypto/bn/bn_lcl.h b/crypto/openssl/crypto/bn/bn_lcl.h
index 904a723..00f4f09 100644
--- a/crypto/openssl/crypto/bn/bn_lcl.h
+++ b/crypto/openssl/crypto/bn/bn_lcl.h
@@ -204,6 +204,24 @@ extern "C" {
# define BN_MUL_LOW_RECURSIVE_SIZE_NORMAL (32)/* 32 */
# define BN_MONT_CTX_SET_SIZE_WORD (64)/* 32 */
+/*
+ * 2011-02-22 SMS. In various places, a size_t variable or a type cast to
+ * size_t was used to perform integer-only operations on pointers. This
+ * failed on VMS with 64-bit pointers (CC /POINTER_SIZE = 64) because size_t
+ * is still only 32 bits. What's needed in these cases is an integer type
+ * with the same size as a pointer, which size_t is not certain to be. The
+ * only fix here is VMS-specific.
+ */
+# if defined(OPENSSL_SYS_VMS)
+# if __INITIAL_POINTER_SIZE == 64
+# define PTR_SIZE_INT long long
+# else /* __INITIAL_POINTER_SIZE == 64 */
+# define PTR_SIZE_INT int
+# endif /* __INITIAL_POINTER_SIZE == 64 [else] */
+# elif !defined(PTR_SIZE_INT) /* defined(OPENSSL_SYS_VMS) */
+# define PTR_SIZE_INT size_t
+# endif /* defined(OPENSSL_SYS_VMS) [else] */
+
# if !defined(OPENSSL_NO_ASM) && !defined(OPENSSL_NO_INLINE_ASM) && !defined(PEDANTIC)
/*
* BN_UMULT_HIGH section.
@@ -295,6 +313,15 @@ unsigned __int64 _umul128(unsigned __int64 a, unsigned __int64 b,
: "r"(a), "r"(b));
# endif
# endif
+# elif defined(__aarch64__) && defined(SIXTY_FOUR_BIT_LONG)
+# if defined(__GNUC__) && __GNUC__>=2
+# define BN_UMULT_HIGH(a,b) ({ \
+ register BN_ULONG ret; \
+ asm ("umulh %0,%1,%2" \
+ : "=r"(ret) \
+ : "r"(a), "r"(b)); \
+ ret; })
+# endif
# endif /* cpu */
# endif /* OPENSSL_NO_ASM */
diff --git a/crypto/openssl/crypto/bn/bntest.c b/crypto/openssl/crypto/bn/bntest.c
index 06662c5..470d5da 100644
--- a/crypto/openssl/crypto/bn/bntest.c
+++ b/crypto/openssl/crypto/bn/bntest.c
@@ -1042,7 +1042,6 @@ int test_mod_exp_mont_consttime(BIO *bp, BN_CTX *ctx)
int test_mod_exp_mont5(BIO *bp, BN_CTX *ctx)
{
BIGNUM *a, *p, *m, *d, *e;
-
BN_MONT_CTX *mont;
a = BN_new();
@@ -1050,7 +1049,6 @@ int test_mod_exp_mont5(BIO *bp, BN_CTX *ctx)
m = BN_new();
d = BN_new();
e = BN_new();
-
mont = BN_MONT_CTX_new();
BN_bntest_rand(m, 1024, 0, 1); /* must be odd for montgomery */
@@ -1099,6 +1097,7 @@ int test_mod_exp_mont5(BIO *bp, BN_CTX *ctx)
fprintf(stderr, "Modular exponentiation test failed!\n");
return 0;
}
+ BN_MONT_CTX_free(mont);
BN_free(a);
BN_free(p);
BN_free(m);
diff --git a/crypto/openssl/crypto/bn/rsaz_exp.c b/crypto/openssl/crypto/bn/rsaz_exp.c
new file mode 100644
index 0000000..c54c6fe
--- /dev/null
+++ b/crypto/openssl/crypto/bn/rsaz_exp.c
@@ -0,0 +1,346 @@
+/*****************************************************************************
+* *
+* Copyright (c) 2012, Intel Corporation *
+* *
+* All rights reserved. *
+* *
+* Redistribution and use in source and binary forms, with or without *
+* modification, are permitted provided that the following conditions are *
+* met: *
+* *
+* * Redistributions of source code must retain the above copyright *
+* notice, this list of conditions and the following disclaimer. *
+* *
+* * Redistributions in binary form must reproduce the above copyright *
+* notice, this list of conditions and the following disclaimer in the *
+* documentation and/or other materials provided with the *
+* distribution. *
+* *
+* * Neither the name of the Intel Corporation nor the names of its *
+* contributors may be used to endorse or promote products derived from *
+* this software without specific prior written permission. *
+* *
+* *
+* THIS SOFTWARE IS PROVIDED BY INTEL CORPORATION ""AS IS"" AND ANY *
+* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE *
+* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR *
+* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL INTEL CORPORATION OR *
+* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, *
+* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, *
+* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR *
+* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF *
+* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING *
+* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS *
+* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *
+* *
+******************************************************************************
+* Developers and authors: *
+* Shay Gueron (1, 2), and Vlad Krasnov (1) *
+* (1) Intel Corporation, Israel Development Center, Haifa, Israel *
+* (2) University of Haifa, Israel *
+*****************************************************************************/
+
+#include "rsaz_exp.h"
+
+#ifdef RSAZ_ENABLED
+
+/*
+ * See crypto/bn/asm/rsaz-avx2.pl for further details.
+ */
+void rsaz_1024_norm2red_avx2(void *red, const void *norm);
+void rsaz_1024_mul_avx2(void *ret, const void *a, const void *b,
+ const void *n, BN_ULONG k);
+void rsaz_1024_sqr_avx2(void *ret, const void *a, const void *n, BN_ULONG k,
+ int cnt);
+void rsaz_1024_scatter5_avx2(void *tbl, const void *val, int i);
+void rsaz_1024_gather5_avx2(void *val, const void *tbl, int i);
+void rsaz_1024_red2norm_avx2(void *norm, const void *red);
+
+#if defined(__GNUC__)
+# define ALIGN64 __attribute__((aligned(64)))
+#elif defined(_MSC_VER)
+# define ALIGN64 __declspec(align(64))
+#elif defined(__SUNPRO_C)
+# define ALIGN64
+# pragma align 64(one,two80)
+#else
+/* not fatal, might hurt performance a little */
+# define ALIGN64
+#endif
+
+ALIGN64 static const BN_ULONG one[40] = {
+ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+};
+
+ALIGN64 static const BN_ULONG two80[40] = {
+ 0, 0, 1 << 22, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+};
+
+void RSAZ_1024_mod_exp_avx2(BN_ULONG result_norm[16],
+ const BN_ULONG base_norm[16],
+ const BN_ULONG exponent[16],
+ const BN_ULONG m_norm[16], const BN_ULONG RR[16],
+ BN_ULONG k0)
+{
+ unsigned char storage[320 * 3 + 32 * 9 * 16 + 64]; /* 5.5KB */
+ unsigned char *p_str = storage + (64 - ((size_t)storage % 64));
+ unsigned char *a_inv, *m, *result;
+ unsigned char *table_s = p_str + 320 * 3;
+ unsigned char *R2 = table_s; /* borrow */
+ int index;
+ int wvalue;
+
+ if ((((size_t)p_str & 4095) + 320) >> 12) {
+ result = p_str;
+ a_inv = p_str + 320;
+ m = p_str + 320 * 2; /* should not cross page */
+ } else {
+ m = p_str; /* should not cross page */
+ result = p_str + 320;
+ a_inv = p_str + 320 * 2;
+ }
+
+ rsaz_1024_norm2red_avx2(m, m_norm);
+ rsaz_1024_norm2red_avx2(a_inv, base_norm);
+ rsaz_1024_norm2red_avx2(R2, RR);
+
+ rsaz_1024_mul_avx2(R2, R2, R2, m, k0);
+ rsaz_1024_mul_avx2(R2, R2, two80, m, k0);
+
+ /* table[0] = 1 */
+ rsaz_1024_mul_avx2(result, R2, one, m, k0);
+ /* table[1] = a_inv^1 */
+ rsaz_1024_mul_avx2(a_inv, a_inv, R2, m, k0);
+
+ rsaz_1024_scatter5_avx2(table_s, result, 0);
+ rsaz_1024_scatter5_avx2(table_s, a_inv, 1);
+
+ /* table[2] = a_inv^2 */
+ rsaz_1024_sqr_avx2(result, a_inv, m, k0, 1);
+ rsaz_1024_scatter5_avx2(table_s, result, 2);
+#if 0
+ /* this is almost 2x smaller and less than 1% slower */
+ for (index = 3; index < 32; index++) {
+ rsaz_1024_mul_avx2(result, result, a_inv, m, k0);
+ rsaz_1024_scatter5_avx2(table_s, result, index);
+ }
+#else
+ /* table[4] = a_inv^4 */
+ rsaz_1024_sqr_avx2(result, result, m, k0, 1);
+ rsaz_1024_scatter5_avx2(table_s, result, 4);
+ /* table[8] = a_inv^8 */
+ rsaz_1024_sqr_avx2(result, result, m, k0, 1);
+ rsaz_1024_scatter5_avx2(table_s, result, 8);
+ /* table[16] = a_inv^16 */
+ rsaz_1024_sqr_avx2(result, result, m, k0, 1);
+ rsaz_1024_scatter5_avx2(table_s, result, 16);
+ /* table[17] = a_inv^17 */
+ rsaz_1024_mul_avx2(result, result, a_inv, m, k0);
+ rsaz_1024_scatter5_avx2(table_s, result, 17);
+
+ /* table[3] */
+ rsaz_1024_gather5_avx2(result, table_s, 2);
+ rsaz_1024_mul_avx2(result, result, a_inv, m, k0);
+ rsaz_1024_scatter5_avx2(table_s, result, 3);
+ /* table[6] */
+ rsaz_1024_sqr_avx2(result, result, m, k0, 1);
+ rsaz_1024_scatter5_avx2(table_s, result, 6);
+ /* table[12] */
+ rsaz_1024_sqr_avx2(result, result, m, k0, 1);
+ rsaz_1024_scatter5_avx2(table_s, result, 12);
+ /* table[24] */
+ rsaz_1024_sqr_avx2(result, result, m, k0, 1);
+ rsaz_1024_scatter5_avx2(table_s, result, 24);
+ /* table[25] */
+ rsaz_1024_mul_avx2(result, result, a_inv, m, k0);
+ rsaz_1024_scatter5_avx2(table_s, result, 25);
+
+ /* table[5] */
+ rsaz_1024_gather5_avx2(result, table_s, 4);
+ rsaz_1024_mul_avx2(result, result, a_inv, m, k0);
+ rsaz_1024_scatter5_avx2(table_s, result, 5);
+ /* table[10] */
+ rsaz_1024_sqr_avx2(result, result, m, k0, 1);
+ rsaz_1024_scatter5_avx2(table_s, result, 10);
+ /* table[20] */
+ rsaz_1024_sqr_avx2(result, result, m, k0, 1);
+ rsaz_1024_scatter5_avx2(table_s, result, 20);
+ /* table[21] */
+ rsaz_1024_mul_avx2(result, result, a_inv, m, k0);
+ rsaz_1024_scatter5_avx2(table_s, result, 21);
+
+ /* table[7] */
+ rsaz_1024_gather5_avx2(result, table_s, 6);
+ rsaz_1024_mul_avx2(result, result, a_inv, m, k0);
+ rsaz_1024_scatter5_avx2(table_s, result, 7);
+ /* table[14] */
+ rsaz_1024_sqr_avx2(result, result, m, k0, 1);
+ rsaz_1024_scatter5_avx2(table_s, result, 14);
+ /* table[28] */
+ rsaz_1024_sqr_avx2(result, result, m, k0, 1);
+ rsaz_1024_scatter5_avx2(table_s, result, 28);
+ /* table[29] */
+ rsaz_1024_mul_avx2(result, result, a_inv, m, k0);
+ rsaz_1024_scatter5_avx2(table_s, result, 29);
+
+ /* table[9] */
+ rsaz_1024_gather5_avx2(result, table_s, 8);
+ rsaz_1024_mul_avx2(result, result, a_inv, m, k0);
+ rsaz_1024_scatter5_avx2(table_s, result, 9);
+ /* table[18] */
+ rsaz_1024_sqr_avx2(result, result, m, k0, 1);
+ rsaz_1024_scatter5_avx2(table_s, result, 18);
+ /* table[19] */
+ rsaz_1024_mul_avx2(result, result, a_inv, m, k0);
+ rsaz_1024_scatter5_avx2(table_s, result, 19);
+
+ /* table[11] */
+ rsaz_1024_gather5_avx2(result, table_s, 10);
+ rsaz_1024_mul_avx2(result, result, a_inv, m, k0);
+ rsaz_1024_scatter5_avx2(table_s, result, 11);
+ /* table[22] */
+ rsaz_1024_sqr_avx2(result, result, m, k0, 1);
+ rsaz_1024_scatter5_avx2(table_s, result, 22);
+ /* table[23] */
+ rsaz_1024_mul_avx2(result, result, a_inv, m, k0);
+ rsaz_1024_scatter5_avx2(table_s, result, 23);
+
+ /* table[13] */
+ rsaz_1024_gather5_avx2(result, table_s, 12);
+ rsaz_1024_mul_avx2(result, result, a_inv, m, k0);
+ rsaz_1024_scatter5_avx2(table_s, result, 13);
+ /* table[26] */
+ rsaz_1024_sqr_avx2(result, result, m, k0, 1);
+ rsaz_1024_scatter5_avx2(table_s, result, 26);
+ /* table[27] */
+ rsaz_1024_mul_avx2(result, result, a_inv, m, k0);
+ rsaz_1024_scatter5_avx2(table_s, result, 27);
+
+ /* table[15] */
+ rsaz_1024_gather5_avx2(result, table_s, 14);
+ rsaz_1024_mul_avx2(result, result, a_inv, m, k0);
+ rsaz_1024_scatter5_avx2(table_s, result, 15);
+ /* table[30] */
+ rsaz_1024_sqr_avx2(result, result, m, k0, 1);
+ rsaz_1024_scatter5_avx2(table_s, result, 30);
+ /* table[31] */
+ rsaz_1024_mul_avx2(result, result, a_inv, m, k0);
+ rsaz_1024_scatter5_avx2(table_s, result, 31);
+#endif
+
+ /* load first window */
+ p_str = (unsigned char *)exponent;
+ wvalue = p_str[127] >> 3;
+ rsaz_1024_gather5_avx2(result, table_s, wvalue);
+
+ index = 1014;
+
+ while (index > -1) { /* loop for the remaining 127 windows */
+
+ rsaz_1024_sqr_avx2(result, result, m, k0, 5);
+
+ wvalue = *((unsigned short *)&p_str[index / 8]);
+ wvalue = (wvalue >> (index % 8)) & 31;
+ index -= 5;
+
+ rsaz_1024_gather5_avx2(a_inv, table_s, wvalue); /* borrow a_inv */
+ rsaz_1024_mul_avx2(result, result, a_inv, m, k0);
+ }
+
+ /* square four times */
+ rsaz_1024_sqr_avx2(result, result, m, k0, 4);
+
+ wvalue = p_str[0] & 15;
+
+ rsaz_1024_gather5_avx2(a_inv, table_s, wvalue); /* borrow a_inv */
+ rsaz_1024_mul_avx2(result, result, a_inv, m, k0);
+
+ /* from Montgomery */
+ rsaz_1024_mul_avx2(result, result, one, m, k0);
+
+ rsaz_1024_red2norm_avx2(result_norm, result);
+
+ OPENSSL_cleanse(storage, sizeof(storage));
+}
+
+/*
+ * See crypto/bn/rsaz-x86_64.pl for further details.
+ */
+void rsaz_512_mul(void *ret, const void *a, const void *b, const void *n,
+ BN_ULONG k);
+void rsaz_512_mul_scatter4(void *ret, const void *a, const void *n,
+ BN_ULONG k, const void *tbl, unsigned int power);
+void rsaz_512_mul_gather4(void *ret, const void *a, const void *tbl,
+ const void *n, BN_ULONG k, unsigned int power);
+void rsaz_512_mul_by_one(void *ret, const void *a, const void *n, BN_ULONG k);
+void rsaz_512_sqr(void *ret, const void *a, const void *n, BN_ULONG k,
+ int cnt);
+void rsaz_512_scatter4(void *tbl, const BN_ULONG *val, int power);
+void rsaz_512_gather4(BN_ULONG *val, const void *tbl, int power);
+
+void RSAZ_512_mod_exp(BN_ULONG result[8],
+ const BN_ULONG base[8], const BN_ULONG exponent[8],
+ const BN_ULONG m[8], BN_ULONG k0, const BN_ULONG RR[8])
+{
+ unsigned char storage[16 * 8 * 8 + 64 * 2 + 64]; /* 1.2KB */
+ unsigned char *table = storage + (64 - ((size_t)storage % 64));
+ BN_ULONG *a_inv = (BN_ULONG *)(table + 16 * 8 * 8);
+ BN_ULONG *temp = (BN_ULONG *)(table + 16 * 8 * 8 + 8 * 8);
+ unsigned char *p_str = (unsigned char *)exponent;
+ int index;
+ unsigned int wvalue;
+
+ /* table[0] = 1_inv */
+ temp[0] = 0 - m[0];
+ temp[1] = ~m[1];
+ temp[2] = ~m[2];
+ temp[3] = ~m[3];
+ temp[4] = ~m[4];
+ temp[5] = ~m[5];
+ temp[6] = ~m[6];
+ temp[7] = ~m[7];
+ rsaz_512_scatter4(table, temp, 0);
+
+ /* table [1] = a_inv^1 */
+ rsaz_512_mul(a_inv, base, RR, m, k0);
+ rsaz_512_scatter4(table, a_inv, 1);
+
+ /* table [2] = a_inv^2 */
+ rsaz_512_sqr(temp, a_inv, m, k0, 1);
+ rsaz_512_scatter4(table, temp, 2);
+
+ for (index = 3; index < 16; index++)
+ rsaz_512_mul_scatter4(temp, a_inv, m, k0, table, index);
+
+ /* load first window */
+ wvalue = p_str[63];
+
+ rsaz_512_gather4(temp, table, wvalue >> 4);
+ rsaz_512_sqr(temp, temp, m, k0, 4);
+ rsaz_512_mul_gather4(temp, temp, table, m, k0, wvalue & 0xf);
+
+ for (index = 62; index >= 0; index--) {
+ wvalue = p_str[index];
+
+ rsaz_512_sqr(temp, temp, m, k0, 4);
+ rsaz_512_mul_gather4(temp, temp, table, m, k0, wvalue >> 4);
+
+ rsaz_512_sqr(temp, temp, m, k0, 4);
+ rsaz_512_mul_gather4(temp, temp, table, m, k0, wvalue & 0x0f);
+ }
+
+ /* from Montgomery */
+ rsaz_512_mul_by_one(result, temp, m, k0);
+
+ OPENSSL_cleanse(storage, sizeof(storage));
+}
+
+#else
+
+# if defined(PEDANTIC) || defined(__DECC) || defined(__clang__)
+static void *dummy = &dummy;
+# endif
+
+#endif
diff --git a/crypto/openssl/crypto/bn/rsaz_exp.h b/crypto/openssl/crypto/bn/rsaz_exp.h
new file mode 100644
index 0000000..33361de
--- /dev/null
+++ b/crypto/openssl/crypto/bn/rsaz_exp.h
@@ -0,0 +1,56 @@
+/******************************************************************************
+* Copyright(c) 2012, Intel Corp.
+* Developers and authors:
+* Shay Gueron (1, 2), and Vlad Krasnov (1)
+* (1) Intel Corporation, Israel Development Center, Haifa, Israel
+* (2) University of Haifa, Israel
+******************************************************************************
+* LICENSE:
+* This submission to OpenSSL is to be made available under the OpenSSL
+* license, and only to the OpenSSL project, in order to allow integration
+* into the publicly distributed code.
+* The use of this code, or portions of this code, or concepts embedded in
+* this code, or modification of this code and/or algorithm(s) in it, or the
+* use of this code for any other purpose than stated above, requires special
+* licensing.
+******************************************************************************
+* DISCLAIMER:
+* THIS SOFTWARE IS PROVIDED BY THE CONTRIBUTORS AND THE COPYRIGHT OWNERS
+* ``AS IS''. ANY EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS OR THE COPYRIGHT
+* OWNERS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
+* OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+* POSSIBILITY OF SUCH DAMAGE.
+******************************************************************************/
+
+#ifndef RSAZ_EXP_H
+# define RSAZ_EXP_H
+
+# undef RSAZ_ENABLED
+# if defined(OPENSSL_BN_ASM_MONT) && \
+ (defined(__x86_64) || defined(__x86_64__) || \
+ defined(_M_AMD64) || defined(_M_X64))
+# define RSAZ_ENABLED
+
+# include <openssl/bn.h>
+
+void RSAZ_1024_mod_exp_avx2(BN_ULONG result[16],
+ const BN_ULONG base_norm[16],
+ const BN_ULONG exponent[16],
+ const BN_ULONG m_norm[16], const BN_ULONG RR[16],
+ BN_ULONG k0);
+int rsaz_avx2_eligible();
+
+void RSAZ_512_mod_exp(BN_ULONG result[8],
+ const BN_ULONG base_norm[8], const BN_ULONG exponent[8],
+ const BN_ULONG m_norm[8], BN_ULONG k0,
+ const BN_ULONG RR[8]);
+
+# endif
+
+#endif
diff --git a/crypto/openssl/crypto/buffer/buf_str.c b/crypto/openssl/crypto/buffer/buf_str.c
index fdde3d7..ebc5ab4 100644
--- a/crypto/openssl/crypto/buffer/buf_str.c
+++ b/crypto/openssl/crypto/buffer/buf_str.c
@@ -60,6 +60,15 @@
#include "cryptlib.h"
#include <openssl/buffer.h>
+size_t BUF_strnlen(const char *str, size_t maxlen)
+{
+ const char *p;
+
+ for (p = str; maxlen-- != 0 && *p != '\0'; ++p) ;
+
+ return p - str;
+}
+
char *BUF_strdup(const char *str)
{
if (str == NULL)
@@ -74,6 +83,8 @@ char *BUF_strndup(const char *str, size_t siz)
if (str == NULL)
return (NULL);
+ siz = BUF_strnlen(str, siz);
+
ret = OPENSSL_malloc(siz + 1);
if (ret == NULL) {
BUFerr(BUF_F_BUF_STRNDUP, ERR_R_MALLOC_FAILURE);
diff --git a/crypto/openssl/crypto/buffer/buffer.h b/crypto/openssl/crypto/buffer/buffer.h
index 632df93..c343dd7 100644
--- a/crypto/openssl/crypto/buffer/buffer.h
+++ b/crypto/openssl/crypto/buffer/buffer.h
@@ -84,6 +84,7 @@ BUF_MEM *BUF_MEM_new(void);
void BUF_MEM_free(BUF_MEM *a);
int BUF_MEM_grow(BUF_MEM *str, size_t len);
int BUF_MEM_grow_clean(BUF_MEM *str, size_t len);
+size_t BUF_strnlen(const char *str, size_t maxlen);
char *BUF_strdup(const char *str);
char *BUF_strndup(const char *str, size_t siz);
void *BUF_memdup(const void *data, size_t siz);
diff --git a/crypto/openssl/crypto/camellia/Makefile b/crypto/openssl/crypto/camellia/Makefile
index 228f1dc..ab1225e 100644
--- a/crypto/openssl/crypto/camellia/Makefile
+++ b/crypto/openssl/crypto/camellia/Makefile
@@ -48,6 +48,8 @@ cmll-x86.s: asm/cmll-x86.pl ../perlasm/x86asm.pl
$(PERL) asm/cmll-x86.pl $(PERLASM_SCHEME) $(CFLAGS) $(PROCESSOR) > $@
cmll-x86_64.s: asm/cmll-x86_64.pl
$(PERL) asm/cmll-x86_64.pl $(PERLASM_SCHEME) > $@
+cmllt4-sparcv9.s: asm/cmllt4-sparcv9.pl ../perlasm/sparcv9_modes.pl
+ $(PERL) asm/cmllt4-sparcv9.pl $(CFLAGS) > $@
files:
$(PERL) $(TOP)/util/files.pl Makefile >> $(TOP)/MINFO
diff --git a/crypto/openssl/crypto/camellia/asm/cmll-x86_64.pl b/crypto/openssl/crypto/camellia/asm/cmll-x86_64.pl
index 9f4b82f..d94f46b 100755
--- a/crypto/openssl/crypto/camellia/asm/cmll-x86_64.pl
+++ b/crypto/openssl/crypto/camellia/asm/cmll-x86_64.pl
@@ -72,7 +72,7 @@ my $i=@_[0];
my $seed=defined(@_[1])?@_[1]:0;
my $scale=$seed<0?-8:8;
my $j=($i&1)*2;
-my $s0=@S[($j)%4],$s1=@S[($j+1)%4],$s2=@S[($j+2)%4],$s3=@S[($j+3)%4];
+my ($s0,$s1,$s2,$s3)=(@S[($j)%4],@S[($j+1)%4],@S[($j+2)%4],@S[($j+3)%4]);
$code.=<<___;
xor $s0,$t0 # t0^=key[0]
@@ -409,7 +409,7 @@ Camellia_Ekeygen:
push %r15
.Lkey_prologue:
- mov %rdi,$keyend # put away arguments, keyBitLength
+ mov %edi,${keyend}d # put away arguments, keyBitLength
mov %rdx,$out # keyTable
mov 0(%rsi),@S[0] # load 0-127 bits
diff --git a/crypto/openssl/crypto/camellia/asm/cmllt4-sparcv9.pl b/crypto/openssl/crypto/camellia/asm/cmllt4-sparcv9.pl
new file mode 100755
index 0000000..a813168
--- /dev/null
+++ b/crypto/openssl/crypto/camellia/asm/cmllt4-sparcv9.pl
@@ -0,0 +1,929 @@
+#!/usr/bin/env perl
+
+# ====================================================================
+# Written by David S. Miller <davem@devemloft.net> and Andy Polyakov
+# <appro@openssl.org>. The module is licensed under 2-clause BSD
+# license. October 2012. All rights reserved.
+# ====================================================================
+
+######################################################################
+# Camellia for SPARC T4.
+#
+# As with AES below results [for aligned data] are virtually identical
+# to critical path lenths for 3-cycle instruction latency:
+#
+# 128-bit key 192/256-
+# CBC encrypt 4.14/4.21(*) 5.46/5.52
+# (*) numbers after slash are for
+# misaligned data.
+#
+# As with Intel AES-NI, question is if it's possible to improve
+# performance of parallelizeable modes by interleaving round
+# instructions. In Camellia every instruction is dependent on
+# previous, which means that there is place for 2 additional ones
+# in between two dependent. Can we expect 3x performance improvement?
+# At least one can argue that it should be possible to break 2x
+# barrier... For some reason not even 2x appears to be possible:
+#
+# 128-bit key 192/256-
+# CBC decrypt 2.21/2.74 2.99/3.40
+# CTR 2.15/2.68(*) 2.93/3.34
+# (*) numbers after slash are for
+# misaligned data.
+#
+# This is for 2x interleave. But compared to 1x interleave CBC decrypt
+# improved by ... 0% for 128-bit key, and 11% for 192/256-bit one.
+# So that out-of-order execution logic can take non-interleaved code
+# to 1.87x, but can't take 2x interleaved one any further. There
+# surely is some explanation... As result 3x interleave was not even
+# attempted. Instead an effort was made to share specific modes
+# implementations with AES module (therefore sparct4_modes.pl).
+#
+# To anchor to something else, software C implementation processes
+# one byte in 38 cycles with 128-bit key on same processor.
+
+$0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1;
+push(@INC,"${dir}","${dir}../../perlasm");
+require "sparcv9_modes.pl";
+
+&asm_init(@ARGV);
+
+$::evp=1; # if $evp is set to 0, script generates module with
+# Camellia_[en|de]crypt, Camellia_set_key and Camellia_cbc_encrypt
+# entry points. These are fully compatible with openssl/camellia.h.
+
+######################################################################
+# single-round subroutines
+#
+{
+my ($inp,$out,$key,$rounds,$tmp,$mask)=map("%o$_",(0..5));
+
+$code=<<___;
+.text
+
+.globl cmll_t4_encrypt
+.align 32
+cmll_t4_encrypt:
+ andcc $inp, 7, %g1 ! is input aligned?
+ andn $inp, 7, $inp
+
+ ldx [$key + 0], %g4
+ ldx [$key + 8], %g5
+
+ ldx [$inp + 0], %o4
+ bz,pt %icc, 1f
+ ldx [$inp + 8], %o5
+ ldx [$inp + 16], $inp
+ sll %g1, 3, %g1
+ sub %g0, %g1, %o3
+ sllx %o4, %g1, %o4
+ sllx %o5, %g1, %g1
+ srlx %o5, %o3, %o5
+ srlx $inp, %o3, %o3
+ or %o5, %o4, %o4
+ or %o3, %g1, %o5
+1:
+ ld [$key + 272], $rounds ! grandRounds, 3 or 4
+ ldd [$key + 16], %f12
+ ldd [$key + 24], %f14
+ xor %g4, %o4, %o4
+ xor %g5, %o5, %o5
+ ldd [$key + 32], %f16
+ ldd [$key + 40], %f18
+ movxtod %o4, %f0
+ movxtod %o5, %f2
+ ldd [$key + 48], %f20
+ ldd [$key + 56], %f22
+ sub $rounds, 1, $rounds
+ ldd [$key + 64], %f24
+ ldd [$key + 72], %f26
+ add $key, 80, $key
+
+.Lenc:
+ camellia_f %f12, %f2, %f0, %f2
+ ldd [$key + 0], %f12
+ sub $rounds,1,$rounds
+ camellia_f %f14, %f0, %f2, %f0
+ ldd [$key + 8], %f14
+ camellia_f %f16, %f2, %f0, %f2
+ ldd [$key + 16], %f16
+ camellia_f %f18, %f0, %f2, %f0
+ ldd [$key + 24], %f18
+ camellia_f %f20, %f2, %f0, %f2
+ ldd [$key + 32], %f20
+ camellia_f %f22, %f0, %f2, %f0
+ ldd [$key + 40], %f22
+ camellia_fl %f24, %f0, %f0
+ ldd [$key + 48], %f24
+ camellia_fli %f26, %f2, %f2
+ ldd [$key + 56], %f26
+ brnz,pt $rounds, .Lenc
+ add $key, 64, $key
+
+ andcc $out, 7, $tmp ! is output aligned?
+ camellia_f %f12, %f2, %f0, %f2
+ camellia_f %f14, %f0, %f2, %f0
+ camellia_f %f16, %f2, %f0, %f2
+ camellia_f %f18, %f0, %f2, %f0
+ camellia_f %f20, %f2, %f0, %f4
+ camellia_f %f22, %f0, %f4, %f2
+ fxor %f24, %f4, %f0
+ fxor %f26, %f2, %f2
+
+ bnz,pn %icc, 2f
+ nop
+
+ std %f0, [$out + 0]
+ retl
+ std %f2, [$out + 8]
+
+2: alignaddrl $out, %g0, $out
+ mov 0xff, $mask
+ srl $mask, $tmp, $mask
+
+ faligndata %f0, %f0, %f4
+ faligndata %f0, %f2, %f6
+ faligndata %f2, %f2, %f8
+
+ stda %f4, [$out + $mask]0xc0 ! partial store
+ std %f6, [$out + 8]
+ add $out, 16, $out
+ orn %g0, $mask, $mask
+ retl
+ stda %f8, [$out + $mask]0xc0 ! partial store
+.type cmll_t4_encrypt,#function
+.size cmll_t4_encrypt,.-cmll_t4_encrypt
+
+.globl cmll_t4_decrypt
+.align 32
+cmll_t4_decrypt:
+ ld [$key + 272], $rounds ! grandRounds, 3 or 4
+ andcc $inp, 7, %g1 ! is input aligned?
+ andn $inp, 7, $inp
+
+ sll $rounds, 6, $rounds
+ add $rounds, $key, $key
+
+ ldx [$inp + 0], %o4
+ bz,pt %icc, 1f
+ ldx [$inp + 8], %o5
+ ldx [$inp + 16], $inp
+ sll %g1, 3, %g1
+ sub %g0, %g1, %g4
+ sllx %o4, %g1, %o4
+ sllx %o5, %g1, %g1
+ srlx %o5, %g4, %o5
+ srlx $inp, %g4, %g4
+ or %o5, %o4, %o4
+ or %g4, %g1, %o5
+1:
+ ldx [$key + 0], %g4
+ ldx [$key + 8], %g5
+ ldd [$key - 8], %f12
+ ldd [$key - 16], %f14
+ xor %g4, %o4, %o4
+ xor %g5, %o5, %o5
+ ldd [$key - 24], %f16
+ ldd [$key - 32], %f18
+ movxtod %o4, %f0
+ movxtod %o5, %f2
+ ldd [$key - 40], %f20
+ ldd [$key - 48], %f22
+ sub $rounds, 64, $rounds
+ ldd [$key - 56], %f24
+ ldd [$key - 64], %f26
+ sub $key, 64, $key
+
+.Ldec:
+ camellia_f %f12, %f2, %f0, %f2
+ ldd [$key - 8], %f12
+ sub $rounds, 64, $rounds
+ camellia_f %f14, %f0, %f2, %f0
+ ldd [$key - 16], %f14
+ camellia_f %f16, %f2, %f0, %f2
+ ldd [$key - 24], %f16
+ camellia_f %f18, %f0, %f2, %f0
+ ldd [$key - 32], %f18
+ camellia_f %f20, %f2, %f0, %f2
+ ldd [$key - 40], %f20
+ camellia_f %f22, %f0, %f2, %f0
+ ldd [$key - 48], %f22
+ camellia_fl %f24, %f0, %f0
+ ldd [$key - 56], %f24
+ camellia_fli %f26, %f2, %f2
+ ldd [$key - 64], %f26
+ brnz,pt $rounds, .Ldec
+ sub $key, 64, $key
+
+ andcc $out, 7, $tmp ! is output aligned?
+ camellia_f %f12, %f2, %f0, %f2
+ camellia_f %f14, %f0, %f2, %f0
+ camellia_f %f16, %f2, %f0, %f2
+ camellia_f %f18, %f0, %f2, %f0
+ camellia_f %f20, %f2, %f0, %f4
+ camellia_f %f22, %f0, %f4, %f2
+ fxor %f26, %f4, %f0
+ fxor %f24, %f2, %f2
+
+ bnz,pn %icc, 2f
+ nop
+
+ std %f0, [$out + 0]
+ retl
+ std %f2, [$out + 8]
+
+2: alignaddrl $out, %g0, $out
+ mov 0xff, $mask
+ srl $mask, $tmp, $mask
+
+ faligndata %f0, %f0, %f4
+ faligndata %f0, %f2, %f6
+ faligndata %f2, %f2, %f8
+
+ stda %f4, [$out + $mask]0xc0 ! partial store
+ std %f6, [$out + 8]
+ add $out, 16, $out
+ orn %g0, $mask, $mask
+ retl
+ stda %f8, [$out + $mask]0xc0 ! partial store
+.type cmll_t4_decrypt,#function
+.size cmll_t4_decrypt,.-cmll_t4_decrypt
+___
+}
+
+######################################################################
+# key setup subroutines
+#
+{
+sub ROTL128 {
+ my $rot = shift;
+
+ "srlx %o4, 64-$rot, %g4\n\t".
+ "sllx %o4, $rot, %o4\n\t".
+ "srlx %o5, 64-$rot, %g5\n\t".
+ "sllx %o5, $rot, %o5\n\t".
+ "or %o4, %g5, %o4\n\t".
+ "or %o5, %g4, %o5";
+}
+
+my ($inp,$bits,$out,$tmp)=map("%o$_",(0..5));
+$code.=<<___;
+.globl cmll_t4_set_key
+.align 32
+cmll_t4_set_key:
+ and $inp, 7, $tmp
+ alignaddr $inp, %g0, $inp
+ cmp $bits, 192
+ ldd [$inp + 0], %f0
+ bl,pt %icc,.L128
+ ldd [$inp + 8], %f2
+
+ be,pt %icc,.L192
+ ldd [$inp + 16], %f4
+
+ brz,pt $tmp, .L256aligned
+ ldd [$inp + 24], %f6
+
+ ldd [$inp + 32], %f8
+ faligndata %f0, %f2, %f0
+ faligndata %f2, %f4, %f2
+ faligndata %f4, %f6, %f4
+ b .L256aligned
+ faligndata %f6, %f8, %f6
+
+.align 16
+.L192:
+ brz,a,pt $tmp, .L256aligned
+ fnot2 %f4, %f6
+
+ ldd [$inp + 24], %f6
+ nop
+ faligndata %f0, %f2, %f0
+ faligndata %f2, %f4, %f2
+ faligndata %f4, %f6, %f4
+ fnot2 %f4, %f6
+
+.L256aligned:
+ std %f0, [$out + 0] ! k[0, 1]
+ fsrc2 %f0, %f28
+ std %f2, [$out + 8] ! k[2, 3]
+ fsrc2 %f2, %f30
+ fxor %f4, %f0, %f0
+ b .L128key
+ fxor %f6, %f2, %f2
+
+.align 16
+.L128:
+ brz,pt $tmp, .L128aligned
+ nop
+
+ ldd [$inp + 16], %f4
+ nop
+ faligndata %f0, %f2, %f0
+ faligndata %f2, %f4, %f2
+
+.L128aligned:
+ std %f0, [$out + 0] ! k[0, 1]
+ fsrc2 %f0, %f28
+ std %f2, [$out + 8] ! k[2, 3]
+ fsrc2 %f2, %f30
+
+.L128key:
+ mov %o7, %o5
+1: call .+8
+ add %o7, SIGMA-1b, %o4
+ mov %o5, %o7
+
+ ldd [%o4 + 0], %f16
+ ldd [%o4 + 8], %f18
+ ldd [%o4 + 16], %f20
+ ldd [%o4 + 24], %f22
+
+ camellia_f %f16, %f2, %f0, %f2
+ camellia_f %f18, %f0, %f2, %f0
+ fxor %f28, %f0, %f0
+ fxor %f30, %f2, %f2
+ camellia_f %f20, %f2, %f0, %f2
+ camellia_f %f22, %f0, %f2, %f0
+
+ bge,pn %icc, .L256key
+ nop
+ std %f0, [$out + 0x10] ! k[ 4, 5]
+ std %f2, [$out + 0x18] ! k[ 6, 7]
+
+ movdtox %f0, %o4
+ movdtox %f2, %o5
+ `&ROTL128(15)`
+ stx %o4, [$out + 0x30] ! k[12, 13]
+ stx %o5, [$out + 0x38] ! k[14, 15]
+ `&ROTL128(15)`
+ stx %o4, [$out + 0x40] ! k[16, 17]
+ stx %o5, [$out + 0x48] ! k[18, 19]
+ `&ROTL128(15)`
+ stx %o4, [$out + 0x60] ! k[24, 25]
+ `&ROTL128(15)`
+ stx %o4, [$out + 0x70] ! k[28, 29]
+ stx %o5, [$out + 0x78] ! k[30, 31]
+ `&ROTL128(34)`
+ stx %o4, [$out + 0xa0] ! k[40, 41]
+ stx %o5, [$out + 0xa8] ! k[42, 43]
+ `&ROTL128(17)`
+ stx %o4, [$out + 0xc0] ! k[48, 49]
+ stx %o5, [$out + 0xc8] ! k[50, 51]
+
+ movdtox %f28, %o4 ! k[ 0, 1]
+ movdtox %f30, %o5 ! k[ 2, 3]
+ `&ROTL128(15)`
+ stx %o4, [$out + 0x20] ! k[ 8, 9]
+ stx %o5, [$out + 0x28] ! k[10, 11]
+ `&ROTL128(30)`
+ stx %o4, [$out + 0x50] ! k[20, 21]
+ stx %o5, [$out + 0x58] ! k[22, 23]
+ `&ROTL128(15)`
+ stx %o5, [$out + 0x68] ! k[26, 27]
+ `&ROTL128(17)`
+ stx %o4, [$out + 0x80] ! k[32, 33]
+ stx %o5, [$out + 0x88] ! k[34, 35]
+ `&ROTL128(17)`
+ stx %o4, [$out + 0x90] ! k[36, 37]
+ stx %o5, [$out + 0x98] ! k[38, 39]
+ `&ROTL128(17)`
+ stx %o4, [$out + 0xb0] ! k[44, 45]
+ stx %o5, [$out + 0xb8] ! k[46, 47]
+
+ mov 3, $tmp
+ st $tmp, [$out + 0x110]
+ retl
+ xor %o0, %o0, %o0
+
+.align 16
+.L256key:
+ ldd [%o4 + 32], %f24
+ ldd [%o4 + 40], %f26
+
+ std %f0, [$out + 0x30] ! k[12, 13]
+ std %f2, [$out + 0x38] ! k[14, 15]
+
+ fxor %f4, %f0, %f0
+ fxor %f6, %f2, %f2
+ camellia_f %f24, %f2, %f0, %f2
+ camellia_f %f26, %f0, %f2, %f0
+
+ std %f0, [$out + 0x10] ! k[ 4, 5]
+ std %f2, [$out + 0x18] ! k[ 6, 7]
+
+ movdtox %f0, %o4
+ movdtox %f2, %o5
+ `&ROTL128(30)`
+ stx %o4, [$out + 0x50] ! k[20, 21]
+ stx %o5, [$out + 0x58] ! k[22, 23]
+ `&ROTL128(30)`
+ stx %o4, [$out + 0xa0] ! k[40, 41]
+ stx %o5, [$out + 0xa8] ! k[42, 43]
+ `&ROTL128(51)`
+ stx %o4, [$out + 0x100] ! k[64, 65]
+ stx %o5, [$out + 0x108] ! k[66, 67]
+
+ movdtox %f4, %o4 ! k[ 8, 9]
+ movdtox %f6, %o5 ! k[10, 11]
+ `&ROTL128(15)`
+ stx %o4, [$out + 0x20] ! k[ 8, 9]
+ stx %o5, [$out + 0x28] ! k[10, 11]
+ `&ROTL128(15)`
+ stx %o4, [$out + 0x40] ! k[16, 17]
+ stx %o5, [$out + 0x48] ! k[18, 19]
+ `&ROTL128(30)`
+ stx %o4, [$out + 0x90] ! k[36, 37]
+ stx %o5, [$out + 0x98] ! k[38, 39]
+ `&ROTL128(34)`
+ stx %o4, [$out + 0xd0] ! k[52, 53]
+ stx %o5, [$out + 0xd8] ! k[54, 55]
+ ldx [$out + 0x30], %o4 ! k[12, 13]
+ ldx [$out + 0x38], %o5 ! k[14, 15]
+ `&ROTL128(15)`
+ stx %o4, [$out + 0x30] ! k[12, 13]
+ stx %o5, [$out + 0x38] ! k[14, 15]
+ `&ROTL128(30)`
+ stx %o4, [$out + 0x70] ! k[28, 29]
+ stx %o5, [$out + 0x78] ! k[30, 31]
+ srlx %o4, 32, %g4
+ srlx %o5, 32, %g5
+ st %o4, [$out + 0xc0] ! k[48]
+ st %g5, [$out + 0xc4] ! k[49]
+ st %o5, [$out + 0xc8] ! k[50]
+ st %g4, [$out + 0xcc] ! k[51]
+ `&ROTL128(49)`
+ stx %o4, [$out + 0xe0] ! k[56, 57]
+ stx %o5, [$out + 0xe8] ! k[58, 59]
+
+ movdtox %f28, %o4 ! k[ 0, 1]
+ movdtox %f30, %o5 ! k[ 2, 3]
+ `&ROTL128(45)`
+ stx %o4, [$out + 0x60] ! k[24, 25]
+ stx %o5, [$out + 0x68] ! k[26, 27]
+ `&ROTL128(15)`
+ stx %o4, [$out + 0x80] ! k[32, 33]
+ stx %o5, [$out + 0x88] ! k[34, 35]
+ `&ROTL128(17)`
+ stx %o4, [$out + 0xb0] ! k[44, 45]
+ stx %o5, [$out + 0xb8] ! k[46, 47]
+ `&ROTL128(34)`
+ stx %o4, [$out + 0xf0] ! k[60, 61]
+ stx %o5, [$out + 0xf8] ! k[62, 63]
+
+ mov 4, $tmp
+ st $tmp, [$out + 0x110]
+ retl
+ xor %o0, %o0, %o0
+.type cmll_t4_set_key,#function
+.size cmll_t4_set_key,.-cmll_t4_set_key
+.align 32
+SIGMA:
+ .long 0xa09e667f, 0x3bcc908b, 0xb67ae858, 0x4caa73b2
+ .long 0xc6ef372f, 0xe94f82be, 0x54ff53a5, 0xf1d36f1c
+ .long 0x10e527fa, 0xde682d1d, 0xb05688c2, 0xb3e6c1fd
+.type SIGMA,#object
+.size SIGMA,.-SIGMA
+.asciz "Camellia for SPARC T4, David S. Miller, Andy Polyakov"
+___
+}
+
+{{{
+my ($inp,$out,$len,$key,$ivec,$enc)=map("%i$_",(0..5));
+my ($ileft,$iright,$ooff,$omask,$ivoff)=map("%l$_",(1..7));
+
+$code.=<<___;
+.align 32
+_cmll128_load_enckey:
+ ldx [$key + 0], %g4
+ ldx [$key + 8], %g5
+___
+for ($i=2; $i<26;$i++) { # load key schedule
+ $code.=<<___;
+ ldd [$key + `8*$i`], %f`12+2*$i`
+___
+}
+$code.=<<___;
+ retl
+ nop
+.type _cmll128_load_enckey,#function
+.size _cmll128_load_enckey,.-_cmll128_load_enckey
+_cmll256_load_enckey=_cmll128_load_enckey
+
+.align 32
+_cmll256_load_deckey:
+ ldd [$key + 64], %f62
+ ldd [$key + 72], %f60
+ b .Load_deckey
+ add $key, 64, $key
+_cmll128_load_deckey:
+ ldd [$key + 0], %f60
+ ldd [$key + 8], %f62
+.Load_deckey:
+___
+for ($i=2; $i<24;$i++) { # load key schedule
+ $code.=<<___;
+ ldd [$key + `8*$i`], %f`62-2*$i`
+___
+}
+$code.=<<___;
+ ldx [$key + 192], %g4
+ retl
+ ldx [$key + 200], %g5
+.type _cmll256_load_deckey,#function
+.size _cmll256_load_deckey,.-_cmll256_load_deckey
+
+.align 32
+_cmll128_encrypt_1x:
+___
+for ($i=0; $i<3; $i++) {
+ $code.=<<___;
+ camellia_f %f`16+16*$i+0`, %f2, %f0, %f2
+ camellia_f %f`16+16*$i+2`, %f0, %f2, %f0
+ camellia_f %f`16+16*$i+4`, %f2, %f0, %f2
+ camellia_f %f`16+16*$i+6`, %f0, %f2, %f0
+___
+$code.=<<___ if ($i<2);
+ camellia_f %f`16+16*$i+8`, %f2, %f0, %f2
+ camellia_f %f`16+16*$i+10`, %f0, %f2, %f0
+ camellia_fl %f`16+16*$i+12`, %f0, %f0
+ camellia_fli %f`16+16*$i+14`, %f2, %f2
+___
+}
+$code.=<<___;
+ camellia_f %f56, %f2, %f0, %f4
+ camellia_f %f58, %f0, %f4, %f2
+ fxor %f60, %f4, %f0
+ retl
+ fxor %f62, %f2, %f2
+.type _cmll128_encrypt_1x,#function
+.size _cmll128_encrypt_1x,.-_cmll128_encrypt_1x
+_cmll128_decrypt_1x=_cmll128_encrypt_1x
+
+.align 32
+_cmll128_encrypt_2x:
+___
+for ($i=0; $i<3; $i++) {
+ $code.=<<___;
+ camellia_f %f`16+16*$i+0`, %f2, %f0, %f2
+ camellia_f %f`16+16*$i+0`, %f6, %f4, %f6
+ camellia_f %f`16+16*$i+2`, %f0, %f2, %f0
+ camellia_f %f`16+16*$i+2`, %f4, %f6, %f4
+ camellia_f %f`16+16*$i+4`, %f2, %f0, %f2
+ camellia_f %f`16+16*$i+4`, %f6, %f4, %f6
+ camellia_f %f`16+16*$i+6`, %f0, %f2, %f0
+ camellia_f %f`16+16*$i+6`, %f4, %f6, %f4
+___
+$code.=<<___ if ($i<2);
+ camellia_f %f`16+16*$i+8`, %f2, %f0, %f2
+ camellia_f %f`16+16*$i+8`, %f6, %f4, %f6
+ camellia_f %f`16+16*$i+10`, %f0, %f2, %f0
+ camellia_f %f`16+16*$i+10`, %f4, %f6, %f4
+ camellia_fl %f`16+16*$i+12`, %f0, %f0
+ camellia_fl %f`16+16*$i+12`, %f4, %f4
+ camellia_fli %f`16+16*$i+14`, %f2, %f2
+ camellia_fli %f`16+16*$i+14`, %f6, %f6
+___
+}
+$code.=<<___;
+ camellia_f %f56, %f2, %f0, %f8
+ camellia_f %f56, %f6, %f4, %f10
+ camellia_f %f58, %f0, %f8, %f2
+ camellia_f %f58, %f4, %f10, %f6
+ fxor %f60, %f8, %f0
+ fxor %f60, %f10, %f4
+ fxor %f62, %f2, %f2
+ retl
+ fxor %f62, %f6, %f6
+.type _cmll128_encrypt_2x,#function
+.size _cmll128_encrypt_2x,.-_cmll128_encrypt_2x
+_cmll128_decrypt_2x=_cmll128_encrypt_2x
+
+.align 32
+_cmll256_encrypt_1x:
+ camellia_f %f16, %f2, %f0, %f2
+ camellia_f %f18, %f0, %f2, %f0
+ ldd [$key + 208], %f16
+ ldd [$key + 216], %f18
+ camellia_f %f20, %f2, %f0, %f2
+ camellia_f %f22, %f0, %f2, %f0
+ ldd [$key + 224], %f20
+ ldd [$key + 232], %f22
+ camellia_f %f24, %f2, %f0, %f2
+ camellia_f %f26, %f0, %f2, %f0
+ ldd [$key + 240], %f24
+ ldd [$key + 248], %f26
+ camellia_fl %f28, %f0, %f0
+ camellia_fli %f30, %f2, %f2
+ ldd [$key + 256], %f28
+ ldd [$key + 264], %f30
+___
+for ($i=1; $i<3; $i++) {
+ $code.=<<___;
+ camellia_f %f`16+16*$i+0`, %f2, %f0, %f2
+ camellia_f %f`16+16*$i+2`, %f0, %f2, %f0
+ camellia_f %f`16+16*$i+4`, %f2, %f0, %f2
+ camellia_f %f`16+16*$i+6`, %f0, %f2, %f0
+ camellia_f %f`16+16*$i+8`, %f2, %f0, %f2
+ camellia_f %f`16+16*$i+10`, %f0, %f2, %f0
+ camellia_fl %f`16+16*$i+12`, %f0, %f0
+ camellia_fli %f`16+16*$i+14`, %f2, %f2
+___
+}
+$code.=<<___;
+ camellia_f %f16, %f2, %f0, %f2
+ camellia_f %f18, %f0, %f2, %f0
+ ldd [$key + 16], %f16
+ ldd [$key + 24], %f18
+ camellia_f %f20, %f2, %f0, %f2
+ camellia_f %f22, %f0, %f2, %f0
+ ldd [$key + 32], %f20
+ ldd [$key + 40], %f22
+ camellia_f %f24, %f2, %f0, %f4
+ camellia_f %f26, %f0, %f4, %f2
+ ldd [$key + 48], %f24
+ ldd [$key + 56], %f26
+ fxor %f28, %f4, %f0
+ fxor %f30, %f2, %f2
+ ldd [$key + 64], %f28
+ retl
+ ldd [$key + 72], %f30
+.type _cmll256_encrypt_1x,#function
+.size _cmll256_encrypt_1x,.-_cmll256_encrypt_1x
+
+.align 32
+_cmll256_encrypt_2x:
+ camellia_f %f16, %f2, %f0, %f2
+ camellia_f %f16, %f6, %f4, %f6
+ camellia_f %f18, %f0, %f2, %f0
+ camellia_f %f18, %f4, %f6, %f4
+ ldd [$key + 208], %f16
+ ldd [$key + 216], %f18
+ camellia_f %f20, %f2, %f0, %f2
+ camellia_f %f20, %f6, %f4, %f6
+ camellia_f %f22, %f0, %f2, %f0
+ camellia_f %f22, %f4, %f6, %f4
+ ldd [$key + 224], %f20
+ ldd [$key + 232], %f22
+ camellia_f %f24, %f2, %f0, %f2
+ camellia_f %f24, %f6, %f4, %f6
+ camellia_f %f26, %f0, %f2, %f0
+ camellia_f %f26, %f4, %f6, %f4
+ ldd [$key + 240], %f24
+ ldd [$key + 248], %f26
+ camellia_fl %f28, %f0, %f0
+ camellia_fl %f28, %f4, %f4
+ camellia_fli %f30, %f2, %f2
+ camellia_fli %f30, %f6, %f6
+ ldd [$key + 256], %f28
+ ldd [$key + 264], %f30
+___
+for ($i=1; $i<3; $i++) {
+ $code.=<<___;
+ camellia_f %f`16+16*$i+0`, %f2, %f0, %f2
+ camellia_f %f`16+16*$i+0`, %f6, %f4, %f6
+ camellia_f %f`16+16*$i+2`, %f0, %f2, %f0
+ camellia_f %f`16+16*$i+2`, %f4, %f6, %f4
+ camellia_f %f`16+16*$i+4`, %f2, %f0, %f2
+ camellia_f %f`16+16*$i+4`, %f6, %f4, %f6
+ camellia_f %f`16+16*$i+6`, %f0, %f2, %f0
+ camellia_f %f`16+16*$i+6`, %f4, %f6, %f4
+ camellia_f %f`16+16*$i+8`, %f2, %f0, %f2
+ camellia_f %f`16+16*$i+8`, %f6, %f4, %f6
+ camellia_f %f`16+16*$i+10`, %f0, %f2, %f0
+ camellia_f %f`16+16*$i+10`, %f4, %f6, %f4
+ camellia_fl %f`16+16*$i+12`, %f0, %f0
+ camellia_fl %f`16+16*$i+12`, %f4, %f4
+ camellia_fli %f`16+16*$i+14`, %f2, %f2
+ camellia_fli %f`16+16*$i+14`, %f6, %f6
+___
+}
+$code.=<<___;
+ camellia_f %f16, %f2, %f0, %f2
+ camellia_f %f16, %f6, %f4, %f6
+ camellia_f %f18, %f0, %f2, %f0
+ camellia_f %f18, %f4, %f6, %f4
+ ldd [$key + 16], %f16
+ ldd [$key + 24], %f18
+ camellia_f %f20, %f2, %f0, %f2
+ camellia_f %f20, %f6, %f4, %f6
+ camellia_f %f22, %f0, %f2, %f0
+ camellia_f %f22, %f4, %f6, %f4
+ ldd [$key + 32], %f20
+ ldd [$key + 40], %f22
+ camellia_f %f24, %f2, %f0, %f8
+ camellia_f %f24, %f6, %f4, %f10
+ camellia_f %f26, %f0, %f8, %f2
+ camellia_f %f26, %f4, %f10, %f6
+ ldd [$key + 48], %f24
+ ldd [$key + 56], %f26
+ fxor %f28, %f8, %f0
+ fxor %f28, %f10, %f4
+ fxor %f30, %f2, %f2
+ fxor %f30, %f6, %f6
+ ldd [$key + 64], %f28
+ retl
+ ldd [$key + 72], %f30
+.type _cmll256_encrypt_2x,#function
+.size _cmll256_encrypt_2x,.-_cmll256_encrypt_2x
+
+.align 32
+_cmll256_decrypt_1x:
+ camellia_f %f16, %f2, %f0, %f2
+ camellia_f %f18, %f0, %f2, %f0
+ ldd [$key - 8], %f16
+ ldd [$key - 16], %f18
+ camellia_f %f20, %f2, %f0, %f2
+ camellia_f %f22, %f0, %f2, %f0
+ ldd [$key - 24], %f20
+ ldd [$key - 32], %f22
+ camellia_f %f24, %f2, %f0, %f2
+ camellia_f %f26, %f0, %f2, %f0
+ ldd [$key - 40], %f24
+ ldd [$key - 48], %f26
+ camellia_fl %f28, %f0, %f0
+ camellia_fli %f30, %f2, %f2
+ ldd [$key - 56], %f28
+ ldd [$key - 64], %f30
+___
+for ($i=1; $i<3; $i++) {
+ $code.=<<___;
+ camellia_f %f`16+16*$i+0`, %f2, %f0, %f2
+ camellia_f %f`16+16*$i+2`, %f0, %f2, %f0
+ camellia_f %f`16+16*$i+4`, %f2, %f0, %f2
+ camellia_f %f`16+16*$i+6`, %f0, %f2, %f0
+ camellia_f %f`16+16*$i+8`, %f2, %f0, %f2
+ camellia_f %f`16+16*$i+10`, %f0, %f2, %f0
+ camellia_fl %f`16+16*$i+12`, %f0, %f0
+ camellia_fli %f`16+16*$i+14`, %f2, %f2
+___
+}
+$code.=<<___;
+ camellia_f %f16, %f2, %f0, %f2
+ camellia_f %f18, %f0, %f2, %f0
+ ldd [$key + 184], %f16
+ ldd [$key + 176], %f18
+ camellia_f %f20, %f2, %f0, %f2
+ camellia_f %f22, %f0, %f2, %f0
+ ldd [$key + 168], %f20
+ ldd [$key + 160], %f22
+ camellia_f %f24, %f2, %f0, %f4
+ camellia_f %f26, %f0, %f4, %f2
+ ldd [$key + 152], %f24
+ ldd [$key + 144], %f26
+ fxor %f30, %f4, %f0
+ fxor %f28, %f2, %f2
+ ldd [$key + 136], %f28
+ retl
+ ldd [$key + 128], %f30
+.type _cmll256_decrypt_1x,#function
+.size _cmll256_decrypt_1x,.-_cmll256_decrypt_1x
+
+.align 32
+_cmll256_decrypt_2x:
+ camellia_f %f16, %f2, %f0, %f2
+ camellia_f %f16, %f6, %f4, %f6
+ camellia_f %f18, %f0, %f2, %f0
+ camellia_f %f18, %f4, %f6, %f4
+ ldd [$key - 8], %f16
+ ldd [$key - 16], %f18
+ camellia_f %f20, %f2, %f0, %f2
+ camellia_f %f20, %f6, %f4, %f6
+ camellia_f %f22, %f0, %f2, %f0
+ camellia_f %f22, %f4, %f6, %f4
+ ldd [$key - 24], %f20
+ ldd [$key - 32], %f22
+ camellia_f %f24, %f2, %f0, %f2
+ camellia_f %f24, %f6, %f4, %f6
+ camellia_f %f26, %f0, %f2, %f0
+ camellia_f %f26, %f4, %f6, %f4
+ ldd [$key - 40], %f24
+ ldd [$key - 48], %f26
+ camellia_fl %f28, %f0, %f0
+ camellia_fl %f28, %f4, %f4
+ camellia_fli %f30, %f2, %f2
+ camellia_fli %f30, %f6, %f6
+ ldd [$key - 56], %f28
+ ldd [$key - 64], %f30
+___
+for ($i=1; $i<3; $i++) {
+ $code.=<<___;
+ camellia_f %f`16+16*$i+0`, %f2, %f0, %f2
+ camellia_f %f`16+16*$i+0`, %f6, %f4, %f6
+ camellia_f %f`16+16*$i+2`, %f0, %f2, %f0
+ camellia_f %f`16+16*$i+2`, %f4, %f6, %f4
+ camellia_f %f`16+16*$i+4`, %f2, %f0, %f2
+ camellia_f %f`16+16*$i+4`, %f6, %f4, %f6
+ camellia_f %f`16+16*$i+6`, %f0, %f2, %f0
+ camellia_f %f`16+16*$i+6`, %f4, %f6, %f4
+ camellia_f %f`16+16*$i+8`, %f2, %f0, %f2
+ camellia_f %f`16+16*$i+8`, %f6, %f4, %f6
+ camellia_f %f`16+16*$i+10`, %f0, %f2, %f0
+ camellia_f %f`16+16*$i+10`, %f4, %f6, %f4
+ camellia_fl %f`16+16*$i+12`, %f0, %f0
+ camellia_fl %f`16+16*$i+12`, %f4, %f4
+ camellia_fli %f`16+16*$i+14`, %f2, %f2
+ camellia_fli %f`16+16*$i+14`, %f6, %f6
+___
+}
+$code.=<<___;
+ camellia_f %f16, %f2, %f0, %f2
+ camellia_f %f16, %f6, %f4, %f6
+ camellia_f %f18, %f0, %f2, %f0
+ camellia_f %f18, %f4, %f6, %f4
+ ldd [$key + 184], %f16
+ ldd [$key + 176], %f18
+ camellia_f %f20, %f2, %f0, %f2
+ camellia_f %f20, %f6, %f4, %f6
+ camellia_f %f22, %f0, %f2, %f0
+ camellia_f %f22, %f4, %f6, %f4
+ ldd [$key + 168], %f20
+ ldd [$key + 160], %f22
+ camellia_f %f24, %f2, %f0, %f8
+ camellia_f %f24, %f6, %f4, %f10
+ camellia_f %f26, %f0, %f8, %f2
+ camellia_f %f26, %f4, %f10, %f6
+ ldd [$key + 152], %f24
+ ldd [$key + 144], %f26
+ fxor %f30, %f8, %f0
+ fxor %f30, %f10, %f4
+ fxor %f28, %f2, %f2
+ fxor %f28, %f6, %f6
+ ldd [$key + 136], %f28
+ retl
+ ldd [$key + 128], %f30
+.type _cmll256_decrypt_2x,#function
+.size _cmll256_decrypt_2x,.-_cmll256_decrypt_2x
+___
+
+&alg_cbc_encrypt_implement("cmll",128);
+&alg_cbc_encrypt_implement("cmll",256);
+
+&alg_cbc_decrypt_implement("cmll",128);
+&alg_cbc_decrypt_implement("cmll",256);
+
+if ($::evp) {
+ &alg_ctr32_implement("cmll",128);
+ &alg_ctr32_implement("cmll",256);
+}
+}}}
+
+if (!$::evp) {
+$code.=<<___;
+.global Camellia_encrypt
+Camellia_encrypt=cmll_t4_encrypt
+.global Camellia_decrypt
+Camellia_decrypt=cmll_t4_decrypt
+.global Camellia_set_key
+.align 32
+Camellia_set_key:
+ andcc %o2, 7, %g0 ! double-check alignment
+ bnz,a,pn %icc, 1f
+ mov -1, %o0
+ brz,a,pn %o0, 1f
+ mov -1, %o0
+ brz,a,pn %o2, 1f
+ mov -1, %o0
+ andncc %o1, 0x1c0, %g0
+ bnz,a,pn %icc, 1f
+ mov -2, %o0
+ cmp %o1, 128
+ bl,a,pn %icc, 1f
+ mov -2, %o0
+ b cmll_t4_set_key
+ nop
+1: retl
+ nop
+.type Camellia_set_key,#function
+.size Camellia_set_key,.-Camellia_set_key
+___
+
+my ($inp,$out,$len,$key,$ivec,$enc)=map("%o$_",(0..5));
+
+$code.=<<___;
+.globl Camellia_cbc_encrypt
+.align 32
+Camellia_cbc_encrypt:
+ ld [$key + 272], %g1
+ nop
+ brz $enc, .Lcbc_decrypt
+ cmp %g1, 3
+
+ be,pt %icc, cmll128_t4_cbc_encrypt
+ nop
+ ba cmll256_t4_cbc_encrypt
+ nop
+
+.Lcbc_decrypt:
+ be,pt %icc, cmll128_t4_cbc_decrypt
+ nop
+ ba cmll256_t4_cbc_decrypt
+ nop
+.type Camellia_cbc_encrypt,#function
+.size Camellia_cbc_encrypt,.-Camellia_cbc_encrypt
+___
+}
+
+&emit_assembler();
+
+close STDOUT;
diff --git a/crypto/openssl/crypto/cast/cast_lcl.h b/crypto/openssl/crypto/cast/cast_lcl.h
index 7c4ad41..b0f0829 100644
--- a/crypto/openssl/crypto/cast/cast_lcl.h
+++ b/crypto/openssl/crypto/cast/cast_lcl.h
@@ -152,6 +152,8 @@
#if defined(OPENSSL_SYS_WIN32) && defined(_MSC_VER)
# define ROTL(a,n) (_lrotl(a,n))
+#elif defined(PEDANTIC)
+# define ROTL(a,n) ((((a)<<(n))&0xffffffffL)|((a)>>((32-(n))&31)))
#else
# define ROTL(a,n) ((((a)<<(n))&0xffffffffL)|((a)>>(32-(n))))
#endif
diff --git a/crypto/openssl/crypto/cms/Makefile b/crypto/openssl/crypto/cms/Makefile
index b124b5d..6f3a832 100644
--- a/crypto/openssl/crypto/cms/Makefile
+++ b/crypto/openssl/crypto/cms/Makefile
@@ -19,10 +19,10 @@ APPS=
LIB=$(TOP)/libcrypto.a
LIBSRC= cms_lib.c cms_asn1.c cms_att.c cms_io.c cms_smime.c cms_err.c \
cms_sd.c cms_dd.c cms_cd.c cms_env.c cms_enc.c cms_ess.c \
- cms_pwri.c
+ cms_pwri.c cms_kari.c
LIBOBJ= cms_lib.o cms_asn1.o cms_att.o cms_io.o cms_smime.o cms_err.o \
cms_sd.o cms_dd.o cms_cd.o cms_env.o cms_enc.o cms_ess.o \
- cms_pwri.o
+ cms_pwri.o cms_kari.o
SRC= $(LIBSRC)
@@ -220,20 +220,39 @@ cms_io.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
cms_io.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
cms_io.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h cms.h
cms_io.o: cms_io.c cms_lcl.h
+cms_kari.o: ../../e_os.h ../../include/openssl/aes.h
+cms_kari.o: ../../include/openssl/asn1.h ../../include/openssl/asn1t.h
+cms_kari.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h
+cms_kari.o: ../../include/openssl/cms.h ../../include/openssl/conf.h
+cms_kari.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
+cms_kari.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
+cms_kari.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
+cms_kari.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h
+cms_kari.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
+cms_kari.o: ../../include/openssl/opensslconf.h
+cms_kari.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
+cms_kari.o: ../../include/openssl/pem.h ../../include/openssl/pem2.h
+cms_kari.o: ../../include/openssl/pkcs7.h ../../include/openssl/rand.h
+cms_kari.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
+cms_kari.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
+cms_kari.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
+cms_kari.o: ../../include/openssl/x509v3.h ../asn1/asn1_locl.h ../cryptlib.h
+cms_kari.o: cms_kari.c cms_lcl.h
cms_lib.o: ../../include/openssl/asn1.h ../../include/openssl/asn1t.h
cms_lib.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h
-cms_lib.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
-cms_lib.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
-cms_lib.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
-cms_lib.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h
-cms_lib.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
-cms_lib.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
-cms_lib.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pem.h
-cms_lib.o: ../../include/openssl/pem2.h ../../include/openssl/pkcs7.h
-cms_lib.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
-cms_lib.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
-cms_lib.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h cms.h
-cms_lib.o: cms_lcl.h cms_lib.c
+cms_lib.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h
+cms_lib.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
+cms_lib.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
+cms_lib.o: ../../include/openssl/err.h ../../include/openssl/evp.h
+cms_lib.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
+cms_lib.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
+cms_lib.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
+cms_lib.o: ../../include/openssl/pem.h ../../include/openssl/pem2.h
+cms_lib.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
+cms_lib.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
+cms_lib.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h
+cms_lib.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h
+cms_lib.o: cms.h cms_lcl.h cms_lib.c
cms_pwri.o: ../../e_os.h ../../include/openssl/aes.h
cms_pwri.o: ../../include/openssl/asn1.h ../../include/openssl/asn1t.h
cms_pwri.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h
@@ -283,4 +302,4 @@ cms_smime.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
cms_smime.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
cms_smime.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h
cms_smime.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h
-cms_smime.o: ../cryptlib.h cms_lcl.h cms_smime.c
+cms_smime.o: ../asn1/asn1_locl.h ../cryptlib.h cms_lcl.h cms_smime.c
diff --git a/crypto/openssl/crypto/cms/cms.h b/crypto/openssl/crypto/cms/cms.h
index a2281ed..e6c7f96 100644
--- a/crypto/openssl/crypto/cms/cms.h
+++ b/crypto/openssl/crypto/cms/cms.h
@@ -72,9 +72,12 @@ typedef struct CMS_RevocationInfoChoice_st CMS_RevocationInfoChoice;
typedef struct CMS_RecipientInfo_st CMS_RecipientInfo;
typedef struct CMS_ReceiptRequest_st CMS_ReceiptRequest;
typedef struct CMS_Receipt_st CMS_Receipt;
+typedef struct CMS_RecipientEncryptedKey_st CMS_RecipientEncryptedKey;
+typedef struct CMS_OtherKeyAttribute_st CMS_OtherKeyAttribute;
DECLARE_STACK_OF(CMS_SignerInfo)
DECLARE_STACK_OF(GENERAL_NAMES)
+DECLARE_STACK_OF(CMS_RecipientEncryptedKey)
DECLARE_ASN1_FUNCTIONS(CMS_ContentInfo)
DECLARE_ASN1_FUNCTIONS(CMS_ReceiptRequest)
DECLARE_ASN1_PRINT_FUNCTION(CMS_ContentInfo)
@@ -82,6 +85,7 @@ DECLARE_ASN1_PRINT_FUNCTION(CMS_ContentInfo)
# define CMS_SIGNERINFO_ISSUER_SERIAL 0
# define CMS_SIGNERINFO_KEYIDENTIFIER 1
+# define CMS_RECIPINFO_NONE -1
# define CMS_RECIPINFO_TRANS 0
# define CMS_RECIPINFO_AGREE 1
# define CMS_RECIPINFO_KEK 2
@@ -111,6 +115,7 @@ DECLARE_ASN1_PRINT_FUNCTION(CMS_ContentInfo)
# define CMS_REUSE_DIGEST 0x8000
# define CMS_USE_KEYID 0x10000
# define CMS_DEBUG_DECRYPT 0x20000
+# define CMS_KEY_PARAM 0x40000
const ASN1_OBJECT *CMS_get0_type(CMS_ContentInfo *cms);
@@ -189,6 +194,7 @@ int CMS_decrypt_set1_password(CMS_ContentInfo *cms,
STACK_OF(CMS_RecipientInfo) *CMS_get0_RecipientInfos(CMS_ContentInfo *cms);
int CMS_RecipientInfo_type(CMS_RecipientInfo *ri);
+EVP_PKEY_CTX *CMS_RecipientInfo_get0_pkey_ctx(CMS_RecipientInfo *ri);
CMS_ContentInfo *CMS_EnvelopedData_create(const EVP_CIPHER *cipher);
CMS_RecipientInfo *CMS_add1_recipient_cert(CMS_ContentInfo *cms,
X509 *recip, unsigned int flags);
@@ -234,6 +240,7 @@ CMS_RecipientInfo *CMS_add0_recipient_password(CMS_ContentInfo *cms,
const EVP_CIPHER *kekciph);
int CMS_RecipientInfo_decrypt(CMS_ContentInfo *cms, CMS_RecipientInfo *ri);
+int CMS_RecipientInfo_encrypt(CMS_ContentInfo *cms, CMS_RecipientInfo *ri);
int CMS_uncompress(CMS_ContentInfo *cms, BIO *dcont, BIO *out,
unsigned int flags);
@@ -256,6 +263,8 @@ int CMS_SignedData_init(CMS_ContentInfo *cms);
CMS_SignerInfo *CMS_add1_signer(CMS_ContentInfo *cms,
X509 *signer, EVP_PKEY *pk, const EVP_MD *md,
unsigned int flags);
+EVP_PKEY_CTX *CMS_SignerInfo_get0_pkey_ctx(CMS_SignerInfo *si);
+EVP_MD_CTX *CMS_SignerInfo_get0_md_ctx(CMS_SignerInfo *si);
STACK_OF(CMS_SignerInfo) *CMS_get0_SignerInfos(CMS_ContentInfo *cms);
void CMS_SignerInfo_set1_signer_cert(CMS_SignerInfo *si, X509 *signer);
@@ -268,6 +277,7 @@ int CMS_set1_signers_certs(CMS_ContentInfo *cms, STACK_OF(X509) *certs,
void CMS_SignerInfo_get0_algs(CMS_SignerInfo *si, EVP_PKEY **pk,
X509 **signer, X509_ALGOR **pdig,
X509_ALGOR **psig);
+ASN1_OCTET_STRING *CMS_SignerInfo_get0_signature(CMS_SignerInfo *si);
int CMS_SignerInfo_sign(CMS_SignerInfo *si);
int CMS_SignerInfo_verify(CMS_SignerInfo *si);
int CMS_SignerInfo_verify_content(CMS_SignerInfo *si, BIO *chain);
@@ -331,8 +341,37 @@ void CMS_ReceiptRequest_get0_values(CMS_ReceiptRequest *rr,
int *pallorfirst,
STACK_OF(GENERAL_NAMES) **plist,
STACK_OF(GENERAL_NAMES) **prto);
-
# endif
+int CMS_RecipientInfo_kari_get0_alg(CMS_RecipientInfo *ri,
+ X509_ALGOR **palg,
+ ASN1_OCTET_STRING **pukm);
+STACK_OF(CMS_RecipientEncryptedKey)
+*CMS_RecipientInfo_kari_get0_reks(CMS_RecipientInfo *ri);
+
+int CMS_RecipientInfo_kari_get0_orig_id(CMS_RecipientInfo *ri,
+ X509_ALGOR **pubalg,
+ ASN1_BIT_STRING **pubkey,
+ ASN1_OCTET_STRING **keyid,
+ X509_NAME **issuer,
+ ASN1_INTEGER **sno);
+
+int CMS_RecipientInfo_kari_orig_id_cmp(CMS_RecipientInfo *ri, X509 *cert);
+
+int CMS_RecipientEncryptedKey_get0_id(CMS_RecipientEncryptedKey *rek,
+ ASN1_OCTET_STRING **keyid,
+ ASN1_GENERALIZEDTIME **tm,
+ CMS_OtherKeyAttribute **other,
+ X509_NAME **issuer, ASN1_INTEGER **sno);
+int CMS_RecipientEncryptedKey_cert_cmp(CMS_RecipientEncryptedKey *rek,
+ X509 *cert);
+int CMS_RecipientInfo_kari_set0_pkey(CMS_RecipientInfo *ri, EVP_PKEY *pk);
+EVP_CIPHER_CTX *CMS_RecipientInfo_kari_get0_ctx(CMS_RecipientInfo *ri);
+int CMS_RecipientInfo_kari_decrypt(CMS_ContentInfo *cms,
+ CMS_RecipientInfo *ri,
+ CMS_RecipientEncryptedKey *rek);
+
+int CMS_SharedInfo_encode(unsigned char **pder, X509_ALGOR *kekalg,
+ ASN1_OCTET_STRING *ukm, int keylen);
/* BEGIN ERROR CODES */
/*
@@ -377,6 +416,7 @@ void ERR_load_CMS_strings(void);
# define CMS_F_CMS_ENVELOPEDDATA_CREATE 124
# define CMS_F_CMS_ENVELOPEDDATA_INIT_BIO 125
# define CMS_F_CMS_ENVELOPED_DATA_INIT 126
+# define CMS_F_CMS_ENV_ASN1_CTRL 171
# define CMS_F_CMS_FINAL 127
# define CMS_F_CMS_GET0_CERTIFICATE_CHOICES 128
# define CMS_F_CMS_GET0_CONTENT 129
@@ -388,6 +428,12 @@ void ERR_load_CMS_strings(void);
# define CMS_F_CMS_RECEIPTREQUEST_CREATE0 159
# define CMS_F_CMS_RECEIPT_VERIFY 160
# define CMS_F_CMS_RECIPIENTINFO_DECRYPT 134
+# define CMS_F_CMS_RECIPIENTINFO_ENCRYPT 169
+# define CMS_F_CMS_RECIPIENTINFO_KARI_ENCRYPT 178
+# define CMS_F_CMS_RECIPIENTINFO_KARI_GET0_ALG 175
+# define CMS_F_CMS_RECIPIENTINFO_KARI_GET0_ORIG_ID 173
+# define CMS_F_CMS_RECIPIENTINFO_KARI_GET0_REKS 172
+# define CMS_F_CMS_RECIPIENTINFO_KARI_ORIG_ID_CMP 174
# define CMS_F_CMS_RECIPIENTINFO_KEKRI_DECRYPT 135
# define CMS_F_CMS_RECIPIENTINFO_KEKRI_ENCRYPT 136
# define CMS_F_CMS_RECIPIENTINFO_KEKRI_GET0_ID 137
@@ -401,6 +447,9 @@ void ERR_load_CMS_strings(void);
# define CMS_F_CMS_RECIPIENTINFO_SET0_KEY 144
# define CMS_F_CMS_RECIPIENTINFO_SET0_PASSWORD 168
# define CMS_F_CMS_RECIPIENTINFO_SET0_PKEY 145
+# define CMS_F_CMS_SD_ASN1_CTRL 170
+# define CMS_F_CMS_SET1_IAS 176
+# define CMS_F_CMS_SET1_KEYID 177
# define CMS_F_CMS_SET1_SIGNERIDENTIFIER 146
# define CMS_F_CMS_SET_DETACHED 147
# define CMS_F_CMS_SIGN 148
@@ -452,6 +501,7 @@ void ERR_load_CMS_strings(void);
# define CMS_R_NOT_A_SIGNED_RECEIPT 165
# define CMS_R_NOT_ENCRYPTED_DATA 122
# define CMS_R_NOT_KEK 123
+# define CMS_R_NOT_KEY_AGREEMENT 181
# define CMS_R_NOT_KEY_TRANSPORT 124
# define CMS_R_NOT_PWRI 177
# define CMS_R_NOT_SUPPORTED_FOR_THIS_KEY_TYPE 125
diff --git a/crypto/openssl/crypto/cms/cms_asn1.c b/crypto/openssl/crypto/cms/cms_asn1.c
index f9f267a..81a3407 100644
--- a/crypto/openssl/crypto/cms/cms_asn1.c
+++ b/crypto/openssl/crypto/cms/cms_asn1.c
@@ -97,6 +97,8 @@ static int cms_si_cb(int operation, ASN1_VALUE **pval, const ASN1_ITEM *it,
EVP_PKEY_free(si->pkey);
if (si->signer)
X509_free(si->signer);
+ if (si->pctx)
+ EVP_MD_CTX_cleanup(&si->mctx);
}
return 1;
}
@@ -164,10 +166,21 @@ ASN1_CHOICE(CMS_KeyAgreeRecipientIdentifier) = {
ASN1_IMP(CMS_KeyAgreeRecipientIdentifier, d.rKeyId, CMS_RecipientKeyIdentifier, 0)
} ASN1_CHOICE_END(CMS_KeyAgreeRecipientIdentifier)
-ASN1_SEQUENCE(CMS_RecipientEncryptedKey) = {
+static int cms_rek_cb(int operation, ASN1_VALUE **pval, const ASN1_ITEM *it,
+ void *exarg)
+{
+ CMS_RecipientEncryptedKey *rek = (CMS_RecipientEncryptedKey *)*pval;
+ if (operation == ASN1_OP_FREE_POST) {
+ if (rek->pkey)
+ EVP_PKEY_free(rek->pkey);
+ }
+ return 1;
+}
+
+ASN1_SEQUENCE_cb(CMS_RecipientEncryptedKey, cms_rek_cb) = {
ASN1_SIMPLE(CMS_RecipientEncryptedKey, rid, CMS_KeyAgreeRecipientIdentifier),
ASN1_SIMPLE(CMS_RecipientEncryptedKey, encryptedKey, ASN1_OCTET_STRING)
-} ASN1_SEQUENCE_END(CMS_RecipientEncryptedKey)
+} ASN1_SEQUENCE_END_cb(CMS_RecipientEncryptedKey, CMS_RecipientEncryptedKey)
ASN1_SEQUENCE(CMS_OriginatorPublicKey) = {
ASN1_SIMPLE(CMS_OriginatorPublicKey, algorithm, X509_ALGOR),
@@ -180,13 +193,29 @@ ASN1_CHOICE(CMS_OriginatorIdentifierOrKey) = {
ASN1_IMP(CMS_OriginatorIdentifierOrKey, d.originatorKey, CMS_OriginatorPublicKey, 1)
} ASN1_CHOICE_END(CMS_OriginatorIdentifierOrKey)
-ASN1_SEQUENCE(CMS_KeyAgreeRecipientInfo) = {
+static int cms_kari_cb(int operation, ASN1_VALUE **pval, const ASN1_ITEM *it,
+ void *exarg)
+{
+ CMS_KeyAgreeRecipientInfo *kari = (CMS_KeyAgreeRecipientInfo *)*pval;
+ if (operation == ASN1_OP_NEW_POST) {
+ EVP_CIPHER_CTX_init(&kari->ctx);
+ EVP_CIPHER_CTX_set_flags(&kari->ctx, EVP_CIPHER_CTX_FLAG_WRAP_ALLOW);
+ kari->pctx = NULL;
+ } else if (operation == ASN1_OP_FREE_POST) {
+ if (kari->pctx)
+ EVP_PKEY_CTX_free(kari->pctx);
+ EVP_CIPHER_CTX_cleanup(&kari->ctx);
+ }
+ return 1;
+}
+
+ASN1_SEQUENCE_cb(CMS_KeyAgreeRecipientInfo, cms_kari_cb) = {
ASN1_SIMPLE(CMS_KeyAgreeRecipientInfo, version, LONG),
ASN1_EXP(CMS_KeyAgreeRecipientInfo, originator, CMS_OriginatorIdentifierOrKey, 0),
ASN1_EXP_OPT(CMS_KeyAgreeRecipientInfo, ukm, ASN1_OCTET_STRING, 1),
ASN1_SIMPLE(CMS_KeyAgreeRecipientInfo, keyEncryptionAlgorithm, X509_ALGOR),
ASN1_SEQUENCE_OF(CMS_KeyAgreeRecipientInfo, recipientEncryptedKeys, CMS_RecipientEncryptedKey)
-} ASN1_SEQUENCE_END(CMS_KeyAgreeRecipientInfo)
+} ASN1_SEQUENCE_END_cb(CMS_KeyAgreeRecipientInfo, CMS_KeyAgreeRecipientInfo)
ASN1_SEQUENCE(CMS_KEKIdentifier) = {
ASN1_SIMPLE(CMS_KEKIdentifier, keyIdentifier, ASN1_OCTET_STRING),
@@ -225,6 +254,8 @@ static int cms_ri_cb(int operation, ASN1_VALUE **pval, const ASN1_ITEM *it,
EVP_PKEY_free(ktri->pkey);
if (ktri->recip)
X509_free(ktri->recip);
+ if (ktri->pctx)
+ EVP_PKEY_CTX_free(ktri->pctx);
} else if (ri->type == CMS_RECIPINFO_KEK) {
CMS_KEKRecipientInfo *kekri = ri->d.kekri;
if (kekri->key) {
@@ -379,3 +410,50 @@ ASN1_SEQUENCE(CMS_Receipt) = {
ASN1_SIMPLE(CMS_Receipt, signedContentIdentifier, ASN1_OCTET_STRING),
ASN1_SIMPLE(CMS_Receipt, originatorSignatureValue, ASN1_OCTET_STRING)
} ASN1_SEQUENCE_END(CMS_Receipt)
+
+/*
+ * Utilities to encode the CMS_SharedInfo structure used during key
+ * derivation.
+ */
+
+typedef struct {
+ X509_ALGOR *keyInfo;
+ ASN1_OCTET_STRING *entityUInfo;
+ ASN1_OCTET_STRING *suppPubInfo;
+} CMS_SharedInfo;
+
+ASN1_SEQUENCE(CMS_SharedInfo) = {
+ ASN1_SIMPLE(CMS_SharedInfo, keyInfo, X509_ALGOR),
+ ASN1_EXP_OPT(CMS_SharedInfo, entityUInfo, ASN1_OCTET_STRING, 0),
+ ASN1_EXP_OPT(CMS_SharedInfo, suppPubInfo, ASN1_OCTET_STRING, 2),
+} ASN1_SEQUENCE_END(CMS_SharedInfo)
+
+int CMS_SharedInfo_encode(unsigned char **pder, X509_ALGOR *kekalg,
+ ASN1_OCTET_STRING *ukm, int keylen)
+{
+ union {
+ CMS_SharedInfo *pecsi;
+ ASN1_VALUE *a;
+ } intsi = {
+ NULL
+ };
+
+ ASN1_OCTET_STRING oklen;
+ unsigned char kl[4];
+ CMS_SharedInfo ecsi;
+
+ keylen <<= 3;
+ kl[0] = (keylen >> 24) & 0xff;
+ kl[1] = (keylen >> 16) & 0xff;
+ kl[2] = (keylen >> 8) & 0xff;
+ kl[3] = keylen & 0xff;
+ oklen.length = 4;
+ oklen.data = kl;
+ oklen.type = V_ASN1_OCTET_STRING;
+ oklen.flags = 0;
+ ecsi.keyInfo = kekalg;
+ ecsi.entityUInfo = ukm;
+ ecsi.suppPubInfo = &oklen;
+ intsi.pecsi = &ecsi;
+ return ASN1_item_i2d(intsi.a, pder, ASN1_ITEM_rptr(CMS_SharedInfo));
+}
diff --git a/crypto/openssl/crypto/cms/cms_env.c b/crypto/openssl/crypto/cms/cms_env.c
index 1c3046c..93c06cb0 100644
--- a/crypto/openssl/crypto/cms/cms_env.c
+++ b/crypto/openssl/crypto/cms/cms_env.c
@@ -100,6 +100,36 @@ static CMS_EnvelopedData *cms_enveloped_data_init(CMS_ContentInfo *cms)
return cms_get0_enveloped(cms);
}
+int cms_env_asn1_ctrl(CMS_RecipientInfo *ri, int cmd)
+{
+ EVP_PKEY *pkey;
+ int i;
+ if (ri->type == CMS_RECIPINFO_TRANS)
+ pkey = ri->d.ktri->pkey;
+ else if (ri->type == CMS_RECIPINFO_AGREE) {
+ EVP_PKEY_CTX *pctx = ri->d.kari->pctx;
+ if (!pctx)
+ return 0;
+ pkey = EVP_PKEY_CTX_get0_pkey(pctx);
+ if (!pkey)
+ return 0;
+ } else
+ return 0;
+ if (!pkey->ameth || !pkey->ameth->pkey_ctrl)
+ return 1;
+ i = pkey->ameth->pkey_ctrl(pkey, ASN1_PKEY_CTRL_CMS_ENVELOPE, cmd, ri);
+ if (i == -2) {
+ CMSerr(CMS_F_CMS_ENV_ASN1_CTRL,
+ CMS_R_NOT_SUPPORTED_FOR_THIS_KEY_TYPE);
+ return 0;
+ }
+ if (i <= 0) {
+ CMSerr(CMS_F_CMS_ENV_ASN1_CTRL, CMS_R_CTRL_FAILURE);
+ return 0;
+ }
+ return 1;
+}
+
STACK_OF(CMS_RecipientInfo) *CMS_get0_RecipientInfos(CMS_ContentInfo *cms)
{
CMS_EnvelopedData *env;
@@ -114,6 +144,15 @@ int CMS_RecipientInfo_type(CMS_RecipientInfo *ri)
return ri->type;
}
+EVP_PKEY_CTX *CMS_RecipientInfo_get0_pkey_ctx(CMS_RecipientInfo *ri)
+{
+ if (ri->type == CMS_RECIPINFO_TRANS)
+ return ri->d.ktri->pctx;
+ else if (ri->type == CMS_RECIPINFO_AGREE)
+ return ri->d.kari->pctx;
+ return NULL;
+}
+
CMS_ContentInfo *CMS_EnvelopedData_create(const EVP_CIPHER *cipher)
{
CMS_ContentInfo *cms;
@@ -137,19 +176,63 @@ CMS_ContentInfo *CMS_EnvelopedData_create(const EVP_CIPHER *cipher)
/* Key Transport Recipient Info (KTRI) routines */
+/* Initialise a ktri based on passed certificate and key */
+
+static int cms_RecipientInfo_ktri_init(CMS_RecipientInfo *ri, X509 *recip,
+ EVP_PKEY *pk, unsigned int flags)
+{
+ CMS_KeyTransRecipientInfo *ktri;
+ int idtype;
+
+ ri->d.ktri = M_ASN1_new_of(CMS_KeyTransRecipientInfo);
+ if (!ri->d.ktri)
+ return 0;
+ ri->type = CMS_RECIPINFO_TRANS;
+
+ ktri = ri->d.ktri;
+
+ if (flags & CMS_USE_KEYID) {
+ ktri->version = 2;
+ idtype = CMS_RECIPINFO_KEYIDENTIFIER;
+ } else {
+ ktri->version = 0;
+ idtype = CMS_RECIPINFO_ISSUER_SERIAL;
+ }
+
+ /*
+ * Not a typo: RecipientIdentifier and SignerIdentifier are the same
+ * structure.
+ */
+
+ if (!cms_set1_SignerIdentifier(ktri->rid, recip, idtype))
+ return 0;
+
+ CRYPTO_add(&recip->references, 1, CRYPTO_LOCK_X509);
+ CRYPTO_add(&pk->references, 1, CRYPTO_LOCK_EVP_PKEY);
+ ktri->pkey = pk;
+ ktri->recip = recip;
+
+ if (flags & CMS_KEY_PARAM) {
+ ktri->pctx = EVP_PKEY_CTX_new(ktri->pkey, NULL);
+ if (!ktri->pctx)
+ return 0;
+ if (EVP_PKEY_encrypt_init(ktri->pctx) <= 0)
+ return 0;
+ } else if (!cms_env_asn1_ctrl(ri, 0))
+ return 0;
+ return 1;
+}
+
/*
- * Add a recipient certificate. For now only handle key transport. If we ever
- * handle key agreement will need updating.
+ * Add a recipient certificate using appropriate type of RecipientInfo
*/
CMS_RecipientInfo *CMS_add1_recipient_cert(CMS_ContentInfo *cms,
X509 *recip, unsigned int flags)
{
CMS_RecipientInfo *ri = NULL;
- CMS_KeyTransRecipientInfo *ktri;
CMS_EnvelopedData *env;
EVP_PKEY *pk = NULL;
- int i, type;
env = cms_get0_enveloped(cms);
if (!env)
goto err;
@@ -159,59 +242,36 @@ CMS_RecipientInfo *CMS_add1_recipient_cert(CMS_ContentInfo *cms,
if (!ri)
goto merr;
- /* Initialize and add key transport recipient info */
-
- ri->d.ktri = M_ASN1_new_of(CMS_KeyTransRecipientInfo);
- if (!ri->d.ktri)
- goto merr;
- ri->type = CMS_RECIPINFO_TRANS;
-
- ktri = ri->d.ktri;
-
- X509_check_purpose(recip, -1, -1);
pk = X509_get_pubkey(recip);
if (!pk) {
CMSerr(CMS_F_CMS_ADD1_RECIPIENT_CERT, CMS_R_ERROR_GETTING_PUBLIC_KEY);
goto err;
}
- CRYPTO_add(&recip->references, 1, CRYPTO_LOCK_X509);
- ktri->pkey = pk;
- ktri->recip = recip;
- if (flags & CMS_USE_KEYID) {
- ktri->version = 2;
- if (env->version < 2)
- env->version = 2;
- type = CMS_RECIPINFO_KEYIDENTIFIER;
- } else {
- ktri->version = 0;
- type = CMS_RECIPINFO_ISSUER_SERIAL;
- }
+ switch (cms_pkey_get_ri_type(pk)) {
- /*
- * Not a typo: RecipientIdentifier and SignerIdentifier are the same
- * structure.
- */
+ case CMS_RECIPINFO_TRANS:
+ if (!cms_RecipientInfo_ktri_init(ri, recip, pk, flags))
+ goto err;
+ break;
- if (!cms_set1_SignerIdentifier(ktri->rid, recip, type))
+ case CMS_RECIPINFO_AGREE:
+ if (!cms_RecipientInfo_kari_init(ri, recip, pk, flags))
+ goto err;
+ break;
+
+ default:
+ CMSerr(CMS_F_CMS_ADD1_RECIPIENT_CERT,
+ CMS_R_NOT_SUPPORTED_FOR_THIS_KEY_TYPE);
goto err;
- if (pk->ameth && pk->ameth->pkey_ctrl) {
- i = pk->ameth->pkey_ctrl(pk, ASN1_PKEY_CTRL_CMS_ENVELOPE, 0, ri);
- if (i == -2) {
- CMSerr(CMS_F_CMS_ADD1_RECIPIENT_CERT,
- CMS_R_NOT_SUPPORTED_FOR_THIS_KEY_TYPE);
- goto err;
- }
- if (i <= 0) {
- CMSerr(CMS_F_CMS_ADD1_RECIPIENT_CERT, CMS_R_CTRL_FAILURE);
- goto err;
- }
}
if (!sk_CMS_RecipientInfo_push(env->recipientInfos, ri))
goto merr;
+ EVP_PKEY_free(pk);
+
return ri;
merr:
@@ -219,6 +279,8 @@ CMS_RecipientInfo *CMS_add1_recipient_cert(CMS_ContentInfo *cms,
err:
if (ri)
M_ASN1_free_of(ri, CMS_RecipientInfo);
+ if (pk)
+ EVP_PKEY_free(pk);
return NULL;
}
@@ -288,7 +350,7 @@ static int cms_RecipientInfo_ktri_encrypt(CMS_ContentInfo *cms,
{
CMS_KeyTransRecipientInfo *ktri;
CMS_EncryptedContentInfo *ec;
- EVP_PKEY_CTX *pctx = NULL;
+ EVP_PKEY_CTX *pctx;
unsigned char *ek = NULL;
size_t eklen;
@@ -301,12 +363,19 @@ static int cms_RecipientInfo_ktri_encrypt(CMS_ContentInfo *cms,
ktri = ri->d.ktri;
ec = cms->d.envelopedData->encryptedContentInfo;
- pctx = EVP_PKEY_CTX_new(ktri->pkey, NULL);
- if (!pctx)
- return 0;
+ pctx = ktri->pctx;
- if (EVP_PKEY_encrypt_init(pctx) <= 0)
- goto err;
+ if (pctx) {
+ if (!cms_env_asn1_ctrl(ri, 0))
+ goto err;
+ } else {
+ pctx = EVP_PKEY_CTX_new(ktri->pkey, NULL);
+ if (!pctx)
+ return 0;
+
+ if (EVP_PKEY_encrypt_init(pctx) <= 0)
+ goto err;
+ }
if (EVP_PKEY_CTX_ctrl(pctx, -1, EVP_PKEY_OP_ENCRYPT,
EVP_PKEY_CTRL_CMS_ENCRYPT, 0, ri) <= 0) {
@@ -333,8 +402,10 @@ static int cms_RecipientInfo_ktri_encrypt(CMS_ContentInfo *cms,
ret = 1;
err:
- if (pctx)
+ if (pctx) {
EVP_PKEY_CTX_free(pctx);
+ ktri->pctx = NULL;
+ }
if (ek)
OPENSSL_free(ek);
return ret;
@@ -347,7 +418,7 @@ static int cms_RecipientInfo_ktri_decrypt(CMS_ContentInfo *cms,
CMS_RecipientInfo *ri)
{
CMS_KeyTransRecipientInfo *ktri = ri->d.ktri;
- EVP_PKEY_CTX *pctx = NULL;
+ EVP_PKEY *pkey = ktri->pkey;
unsigned char *ek = NULL;
size_t eklen;
int ret = 0;
@@ -359,20 +430,23 @@ static int cms_RecipientInfo_ktri_decrypt(CMS_ContentInfo *cms,
return 0;
}
- pctx = EVP_PKEY_CTX_new(ktri->pkey, NULL);
- if (!pctx)
+ ktri->pctx = EVP_PKEY_CTX_new(pkey, NULL);
+ if (!ktri->pctx)
return 0;
- if (EVP_PKEY_decrypt_init(pctx) <= 0)
+ if (EVP_PKEY_decrypt_init(ktri->pctx) <= 0)
goto err;
- if (EVP_PKEY_CTX_ctrl(pctx, -1, EVP_PKEY_OP_DECRYPT,
+ if (!cms_env_asn1_ctrl(ri, 1))
+ goto err;
+
+ if (EVP_PKEY_CTX_ctrl(ktri->pctx, -1, EVP_PKEY_OP_DECRYPT,
EVP_PKEY_CTRL_CMS_DECRYPT, 0, ri) <= 0) {
CMSerr(CMS_F_CMS_RECIPIENTINFO_KTRI_DECRYPT, CMS_R_CTRL_ERROR);
goto err;
}
- if (EVP_PKEY_decrypt(pctx, NULL, &eklen,
+ if (EVP_PKEY_decrypt(ktri->pctx, NULL, &eklen,
ktri->encryptedKey->data,
ktri->encryptedKey->length) <= 0)
goto err;
@@ -384,7 +458,7 @@ static int cms_RecipientInfo_ktri_decrypt(CMS_ContentInfo *cms,
goto err;
}
- if (EVP_PKEY_decrypt(pctx, ek, &eklen,
+ if (EVP_PKEY_decrypt(ktri->pctx, ek, &eklen,
ktri->encryptedKey->data,
ktri->encryptedKey->length) <= 0) {
CMSerr(CMS_F_CMS_RECIPIENTINFO_KTRI_DECRYPT, CMS_R_CMS_LIB);
@@ -402,8 +476,10 @@ static int cms_RecipientInfo_ktri_decrypt(CMS_ContentInfo *cms,
ec->keylen = eklen;
err:
- if (pctx)
- EVP_PKEY_CTX_free(pctx);
+ if (ktri->pctx) {
+ EVP_PKEY_CTX_free(ktri->pctx);
+ ktri->pctx = NULL;
+ }
if (!ret && ek)
OPENSSL_free(ek);
@@ -745,12 +821,99 @@ int CMS_RecipientInfo_decrypt(CMS_ContentInfo *cms, CMS_RecipientInfo *ri)
}
}
+int CMS_RecipientInfo_encrypt(CMS_ContentInfo *cms, CMS_RecipientInfo *ri)
+{
+ switch (ri->type) {
+ case CMS_RECIPINFO_TRANS:
+ return cms_RecipientInfo_ktri_encrypt(cms, ri);
+
+ case CMS_RECIPINFO_AGREE:
+ return cms_RecipientInfo_kari_encrypt(cms, ri);
+
+ case CMS_RECIPINFO_KEK:
+ return cms_RecipientInfo_kekri_encrypt(cms, ri);
+ break;
+
+ case CMS_RECIPINFO_PASS:
+ return cms_RecipientInfo_pwri_crypt(cms, ri, 1);
+ break;
+
+ default:
+ CMSerr(CMS_F_CMS_RECIPIENTINFO_ENCRYPT,
+ CMS_R_UNSUPPORTED_RECIPIENT_TYPE);
+ return 0;
+ }
+}
+
+/* Check structures and fixup version numbers (if necessary) */
+
+static void cms_env_set_originfo_version(CMS_EnvelopedData *env)
+{
+ CMS_OriginatorInfo *org = env->originatorInfo;
+ int i;
+ if (org == NULL)
+ return;
+ for (i = 0; i < sk_CMS_CertificateChoices_num(org->certificates); i++) {
+ CMS_CertificateChoices *cch;
+ cch = sk_CMS_CertificateChoices_value(org->certificates, i);
+ if (cch->type == CMS_CERTCHOICE_OTHER) {
+ env->version = 4;
+ return;
+ } else if (cch->type == CMS_CERTCHOICE_V2ACERT) {
+ if (env->version < 3)
+ env->version = 3;
+ }
+ }
+
+ for (i = 0; i < sk_CMS_RevocationInfoChoice_num(org->crls); i++) {
+ CMS_RevocationInfoChoice *rch;
+ rch = sk_CMS_RevocationInfoChoice_value(org->crls, i);
+ if (rch->type == CMS_REVCHOICE_OTHER) {
+ env->version = 4;
+ return;
+ }
+ }
+}
+
+static void cms_env_set_version(CMS_EnvelopedData *env)
+{
+ int i;
+ CMS_RecipientInfo *ri;
+
+ /*
+ * Can't set version higher than 4 so if 4 or more already nothing to do.
+ */
+ if (env->version >= 4)
+ return;
+
+ cms_env_set_originfo_version(env);
+
+ if (env->version >= 3)
+ return;
+
+ for (i = 0; i < sk_CMS_RecipientInfo_num(env->recipientInfos); i++) {
+ ri = sk_CMS_RecipientInfo_value(env->recipientInfos, i);
+ if (ri->type == CMS_RECIPINFO_PASS || ri->type == CMS_RECIPINFO_OTHER) {
+ env->version = 3;
+ return;
+ } else if (ri->type != CMS_RECIPINFO_TRANS
+ || ri->d.ktri->version != 0) {
+ env->version = 2;
+ }
+ }
+ if (env->version == 2)
+ return;
+ if (env->originatorInfo || env->unprotectedAttrs)
+ env->version = 2;
+ env->version = 0;
+}
+
BIO *cms_EnvelopedData_init_bio(CMS_ContentInfo *cms)
{
CMS_EncryptedContentInfo *ec;
STACK_OF(CMS_RecipientInfo) *rinfos;
CMS_RecipientInfo *ri;
- int i, r, ok = 0;
+ int i, ok = 0;
BIO *ret;
/* Get BIO first to set up key */
@@ -769,32 +932,13 @@ BIO *cms_EnvelopedData_init_bio(CMS_ContentInfo *cms)
for (i = 0; i < sk_CMS_RecipientInfo_num(rinfos); i++) {
ri = sk_CMS_RecipientInfo_value(rinfos, i);
-
- switch (ri->type) {
- case CMS_RECIPINFO_TRANS:
- r = cms_RecipientInfo_ktri_encrypt(cms, ri);
- break;
-
- case CMS_RECIPINFO_KEK:
- r = cms_RecipientInfo_kekri_encrypt(cms, ri);
- break;
-
- case CMS_RECIPINFO_PASS:
- r = cms_RecipientInfo_pwri_crypt(cms, ri, 1);
- break;
-
- default:
- CMSerr(CMS_F_CMS_ENVELOPEDDATA_INIT_BIO,
- CMS_R_UNSUPPORTED_RECIPIENT_TYPE);
- goto err;
- }
-
- if (r <= 0) {
+ if (CMS_RecipientInfo_encrypt(cms, ri) <= 0) {
CMSerr(CMS_F_CMS_ENVELOPEDDATA_INIT_BIO,
CMS_R_ERROR_SETTING_RECIPIENTINFO);
goto err;
}
}
+ cms_env_set_version(cms->d.envelopedData);
ok = 1;
@@ -812,3 +956,19 @@ BIO *cms_EnvelopedData_init_bio(CMS_ContentInfo *cms)
return NULL;
}
+
+/*
+ * Get RecipientInfo type (if any) supported by a key (public or private). To
+ * retain compatibility with previous behaviour if the ctrl value isn't
+ * supported we assume key transport.
+ */
+int cms_pkey_get_ri_type(EVP_PKEY *pk)
+{
+ if (pk->ameth && pk->ameth->pkey_ctrl) {
+ int i, r;
+ i = pk->ameth->pkey_ctrl(pk, ASN1_PKEY_CTRL_CMS_RI_TYPE, 0, &r);
+ if (i > 0)
+ return r;
+ }
+ return CMS_RECIPINFO_TRANS;
+}
diff --git a/crypto/openssl/crypto/cms/cms_err.c b/crypto/openssl/crypto/cms/cms_err.c
index faf2fcc..15572ea 100644
--- a/crypto/openssl/crypto/cms/cms_err.c
+++ b/crypto/openssl/crypto/cms/cms_err.c
@@ -1,6 +1,6 @@
/* crypto/cms/cms_err.c */
/* ====================================================================
- * Copyright (c) 1999-2009 The OpenSSL Project. All rights reserved.
+ * Copyright (c) 1999-2013 The OpenSSL Project. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -110,6 +110,7 @@ static ERR_STRING_DATA CMS_str_functs[] = {
{ERR_FUNC(CMS_F_CMS_ENVELOPEDDATA_INIT_BIO),
"cms_EnvelopedData_init_bio"},
{ERR_FUNC(CMS_F_CMS_ENVELOPED_DATA_INIT), "CMS_ENVELOPED_DATA_INIT"},
+ {ERR_FUNC(CMS_F_CMS_ENV_ASN1_CTRL), "cms_env_asn1_ctrl"},
{ERR_FUNC(CMS_F_CMS_FINAL), "CMS_final"},
{ERR_FUNC(CMS_F_CMS_GET0_CERTIFICATE_CHOICES),
"CMS_GET0_CERTIFICATE_CHOICES"},
@@ -124,6 +125,17 @@ static ERR_STRING_DATA CMS_str_functs[] = {
"CMS_ReceiptRequest_create0"},
{ERR_FUNC(CMS_F_CMS_RECEIPT_VERIFY), "cms_Receipt_verify"},
{ERR_FUNC(CMS_F_CMS_RECIPIENTINFO_DECRYPT), "CMS_RecipientInfo_decrypt"},
+ {ERR_FUNC(CMS_F_CMS_RECIPIENTINFO_ENCRYPT), "CMS_RecipientInfo_encrypt"},
+ {ERR_FUNC(CMS_F_CMS_RECIPIENTINFO_KARI_ENCRYPT),
+ "cms_RecipientInfo_kari_encrypt"},
+ {ERR_FUNC(CMS_F_CMS_RECIPIENTINFO_KARI_GET0_ALG),
+ "CMS_RecipientInfo_kari_get0_alg"},
+ {ERR_FUNC(CMS_F_CMS_RECIPIENTINFO_KARI_GET0_ORIG_ID),
+ "CMS_RecipientInfo_kari_get0_orig_id"},
+ {ERR_FUNC(CMS_F_CMS_RECIPIENTINFO_KARI_GET0_REKS),
+ "CMS_RecipientInfo_kari_get0_reks"},
+ {ERR_FUNC(CMS_F_CMS_RECIPIENTINFO_KARI_ORIG_ID_CMP),
+ "CMS_RecipientInfo_kari_orig_id_cmp"},
{ERR_FUNC(CMS_F_CMS_RECIPIENTINFO_KEKRI_DECRYPT),
"CMS_RECIPIENTINFO_KEKRI_DECRYPT"},
{ERR_FUNC(CMS_F_CMS_RECIPIENTINFO_KEKRI_ENCRYPT),
@@ -150,6 +162,9 @@ static ERR_STRING_DATA CMS_str_functs[] = {
"CMS_RecipientInfo_set0_password"},
{ERR_FUNC(CMS_F_CMS_RECIPIENTINFO_SET0_PKEY),
"CMS_RecipientInfo_set0_pkey"},
+ {ERR_FUNC(CMS_F_CMS_SD_ASN1_CTRL), "CMS_SD_ASN1_CTRL"},
+ {ERR_FUNC(CMS_F_CMS_SET1_IAS), "cms_set1_ias"},
+ {ERR_FUNC(CMS_F_CMS_SET1_KEYID), "cms_set1_keyid"},
{ERR_FUNC(CMS_F_CMS_SET1_SIGNERIDENTIFIER), "cms_set1_SignerIdentifier"},
{ERR_FUNC(CMS_F_CMS_SET_DETACHED), "CMS_set_detached"},
{ERR_FUNC(CMS_F_CMS_SIGN), "CMS_sign"},
@@ -221,6 +236,7 @@ static ERR_STRING_DATA CMS_str_reasons[] = {
{ERR_REASON(CMS_R_NOT_A_SIGNED_RECEIPT), "not a signed receipt"},
{ERR_REASON(CMS_R_NOT_ENCRYPTED_DATA), "not encrypted data"},
{ERR_REASON(CMS_R_NOT_KEK), "not kek"},
+ {ERR_REASON(CMS_R_NOT_KEY_AGREEMENT), "not key agreement"},
{ERR_REASON(CMS_R_NOT_KEY_TRANSPORT), "not key transport"},
{ERR_REASON(CMS_R_NOT_PWRI), "not pwri"},
{ERR_REASON(CMS_R_NOT_SUPPORTED_FOR_THIS_KEY_TYPE),
diff --git a/crypto/openssl/crypto/cms/cms_kari.c b/crypto/openssl/crypto/cms/cms_kari.c
new file mode 100644
index 0000000..2cfcdb2
--- /dev/null
+++ b/crypto/openssl/crypto/cms/cms_kari.c
@@ -0,0 +1,465 @@
+/* crypto/cms/cms_kari.c */
+/*
+ * Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL
+ * project.
+ */
+/* ====================================================================
+ * Copyright (c) 2013 The OpenSSL Project. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * 3. All advertising materials mentioning features or use of this
+ * software must display the following acknowledgment:
+ * "This product includes software developed by the OpenSSL Project
+ * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)"
+ *
+ * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
+ * endorse or promote products derived from this software without
+ * prior written permission. For written permission, please contact
+ * licensing@OpenSSL.org.
+ *
+ * 5. Products derived from this software may not be called "OpenSSL"
+ * nor may "OpenSSL" appear in their names without prior written
+ * permission of the OpenSSL Project.
+ *
+ * 6. Redistributions of any form whatsoever must retain the following
+ * acknowledgment:
+ * "This product includes software developed by the OpenSSL Project
+ * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)"
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
+ * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
+ * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+ * OF THE POSSIBILITY OF SUCH DAMAGE.
+ * ====================================================================
+ */
+
+#include "cryptlib.h"
+#include <openssl/asn1t.h>
+#include <openssl/pem.h>
+#include <openssl/x509v3.h>
+#include <openssl/err.h>
+#include <openssl/cms.h>
+#include <openssl/rand.h>
+#include <openssl/aes.h>
+#include "cms_lcl.h"
+#include "asn1_locl.h"
+
+DECLARE_ASN1_ITEM(CMS_KeyAgreeRecipientInfo)
+DECLARE_ASN1_ITEM(CMS_RecipientEncryptedKey)
+DECLARE_ASN1_ITEM(CMS_OriginatorPublicKey)
+DECLARE_ASN1_ITEM(CMS_RecipientKeyIdentifier)
+
+/* Key Agreement Recipient Info (KARI) routines */
+
+int CMS_RecipientInfo_kari_get0_alg(CMS_RecipientInfo *ri,
+ X509_ALGOR **palg,
+ ASN1_OCTET_STRING **pukm)
+{
+ if (ri->type != CMS_RECIPINFO_AGREE) {
+ CMSerr(CMS_F_CMS_RECIPIENTINFO_KARI_GET0_ALG,
+ CMS_R_NOT_KEY_AGREEMENT);
+ return 0;
+ }
+ if (palg)
+ *palg = ri->d.kari->keyEncryptionAlgorithm;
+ if (pukm)
+ *pukm = ri->d.kari->ukm;
+ return 1;
+}
+
+/* Retrieve recipient encrypted keys from a kari */
+
+STACK_OF(CMS_RecipientEncryptedKey)
+*CMS_RecipientInfo_kari_get0_reks(CMS_RecipientInfo *ri)
+{
+ if (ri->type != CMS_RECIPINFO_AGREE) {
+ CMSerr(CMS_F_CMS_RECIPIENTINFO_KARI_GET0_REKS,
+ CMS_R_NOT_KEY_AGREEMENT);
+ return NULL;
+ }
+ return ri->d.kari->recipientEncryptedKeys;
+}
+
+int CMS_RecipientInfo_kari_get0_orig_id(CMS_RecipientInfo *ri,
+ X509_ALGOR **pubalg,
+ ASN1_BIT_STRING **pubkey,
+ ASN1_OCTET_STRING **keyid,
+ X509_NAME **issuer,
+ ASN1_INTEGER **sno)
+{
+ CMS_OriginatorIdentifierOrKey *oik;
+ if (ri->type != CMS_RECIPINFO_AGREE) {
+ CMSerr(CMS_F_CMS_RECIPIENTINFO_KARI_GET0_ORIG_ID,
+ CMS_R_NOT_KEY_AGREEMENT);
+ return 0;
+ }
+ oik = ri->d.kari->originator;
+ if (issuer)
+ *issuer = NULL;
+ if (sno)
+ *sno = NULL;
+ if (keyid)
+ *keyid = NULL;
+ if (pubalg)
+ *pubalg = NULL;
+ if (pubkey)
+ *pubkey = NULL;
+ if (oik->type == CMS_OIK_ISSUER_SERIAL) {
+ if (issuer)
+ *issuer = oik->d.issuerAndSerialNumber->issuer;
+ if (sno)
+ *sno = oik->d.issuerAndSerialNumber->serialNumber;
+ } else if (oik->type == CMS_OIK_KEYIDENTIFIER) {
+ if (keyid)
+ *keyid = oik->d.subjectKeyIdentifier;
+ } else if (oik->type == CMS_OIK_PUBKEY) {
+ if (pubalg)
+ *pubalg = oik->d.originatorKey->algorithm;
+ if (pubkey)
+ *pubkey = oik->d.originatorKey->publicKey;
+ } else
+ return 0;
+ return 1;
+}
+
+int CMS_RecipientInfo_kari_orig_id_cmp(CMS_RecipientInfo *ri, X509 *cert)
+{
+ CMS_OriginatorIdentifierOrKey *oik;
+ if (ri->type != CMS_RECIPINFO_AGREE) {
+ CMSerr(CMS_F_CMS_RECIPIENTINFO_KARI_ORIG_ID_CMP,
+ CMS_R_NOT_KEY_AGREEMENT);
+ return -2;
+ }
+ oik = ri->d.kari->originator;
+ if (oik->type == CMS_OIK_ISSUER_SERIAL)
+ return cms_ias_cert_cmp(oik->d.issuerAndSerialNumber, cert);
+ else if (oik->type == CMS_OIK_KEYIDENTIFIER)
+ return cms_keyid_cert_cmp(oik->d.subjectKeyIdentifier, cert);
+ return -1;
+}
+
+int CMS_RecipientEncryptedKey_get0_id(CMS_RecipientEncryptedKey *rek,
+ ASN1_OCTET_STRING **keyid,
+ ASN1_GENERALIZEDTIME **tm,
+ CMS_OtherKeyAttribute **other,
+ X509_NAME **issuer, ASN1_INTEGER **sno)
+{
+ CMS_KeyAgreeRecipientIdentifier *rid = rek->rid;
+ if (rid->type == CMS_REK_ISSUER_SERIAL) {
+ if (issuer)
+ *issuer = rid->d.issuerAndSerialNumber->issuer;
+ if (sno)
+ *sno = rid->d.issuerAndSerialNumber->serialNumber;
+ if (keyid)
+ *keyid = NULL;
+ if (tm)
+ *tm = NULL;
+ if (other)
+ *other = NULL;
+ } else if (rid->type == CMS_REK_KEYIDENTIFIER) {
+ if (keyid)
+ *keyid = rid->d.rKeyId->subjectKeyIdentifier;
+ if (tm)
+ *tm = rid->d.rKeyId->date;
+ if (other)
+ *other = rid->d.rKeyId->other;
+ if (issuer)
+ *issuer = NULL;
+ if (sno)
+ *sno = NULL;
+ } else
+ return 0;
+ return 1;
+}
+
+int CMS_RecipientEncryptedKey_cert_cmp(CMS_RecipientEncryptedKey *rek,
+ X509 *cert)
+{
+ CMS_KeyAgreeRecipientIdentifier *rid = rek->rid;
+ if (rid->type == CMS_REK_ISSUER_SERIAL)
+ return cms_ias_cert_cmp(rid->d.issuerAndSerialNumber, cert);
+ else if (rid->type == CMS_REK_KEYIDENTIFIER)
+ return cms_keyid_cert_cmp(rid->d.rKeyId->subjectKeyIdentifier, cert);
+ else
+ return -1;
+}
+
+int CMS_RecipientInfo_kari_set0_pkey(CMS_RecipientInfo *ri, EVP_PKEY *pk)
+{
+ EVP_PKEY_CTX *pctx;
+ CMS_KeyAgreeRecipientInfo *kari = ri->d.kari;
+ if (kari->pctx) {
+ EVP_PKEY_CTX_free(kari->pctx);
+ kari->pctx = NULL;
+ }
+ if (!pk)
+ return 1;
+ pctx = EVP_PKEY_CTX_new(pk, NULL);
+ if (!pctx || !EVP_PKEY_derive_init(pctx))
+ goto err;
+ kari->pctx = pctx;
+ return 1;
+ err:
+ if (pctx)
+ EVP_PKEY_CTX_free(pctx);
+ return 0;
+}
+
+EVP_CIPHER_CTX *CMS_RecipientInfo_kari_get0_ctx(CMS_RecipientInfo *ri)
+{
+ if (ri->type == CMS_RECIPINFO_AGREE)
+ return &ri->d.kari->ctx;
+ return NULL;
+}
+
+/*
+ * Derive KEK and decrypt/encrypt with it to produce either the original CEK
+ * or the encrypted CEK.
+ */
+
+static int cms_kek_cipher(unsigned char **pout, size_t *poutlen,
+ const unsigned char *in, size_t inlen,
+ CMS_KeyAgreeRecipientInfo *kari, int enc)
+{
+ /* Key encryption key */
+ unsigned char kek[EVP_MAX_KEY_LENGTH];
+ size_t keklen;
+ int rv = 0;
+ unsigned char *out = NULL;
+ int outlen;
+ keklen = EVP_CIPHER_CTX_key_length(&kari->ctx);
+ if (keklen > EVP_MAX_KEY_LENGTH)
+ return 0;
+ /* Derive KEK */
+ if (EVP_PKEY_derive(kari->pctx, kek, &keklen) <= 0)
+ goto err;
+ /* Set KEK in context */
+ if (!EVP_CipherInit_ex(&kari->ctx, NULL, NULL, kek, NULL, enc))
+ goto err;
+ /* obtain output length of ciphered key */
+ if (!EVP_CipherUpdate(&kari->ctx, NULL, &outlen, in, inlen))
+ goto err;
+ out = OPENSSL_malloc(outlen);
+ if (!out)
+ goto err;
+ if (!EVP_CipherUpdate(&kari->ctx, out, &outlen, in, inlen))
+ goto err;
+ *pout = out;
+ *poutlen = (size_t)outlen;
+ rv = 1;
+
+ err:
+ OPENSSL_cleanse(kek, keklen);
+ if (!rv && out)
+ OPENSSL_free(out);
+ EVP_CIPHER_CTX_cleanup(&kari->ctx);
+ EVP_PKEY_CTX_free(kari->pctx);
+ kari->pctx = NULL;
+ return rv;
+}
+
+int CMS_RecipientInfo_kari_decrypt(CMS_ContentInfo *cms,
+ CMS_RecipientInfo *ri,
+ CMS_RecipientEncryptedKey *rek)
+{
+ int rv = 0;
+ unsigned char *enckey = NULL, *cek = NULL;
+ size_t enckeylen;
+ size_t ceklen;
+ CMS_EncryptedContentInfo *ec;
+ enckeylen = rek->encryptedKey->length;
+ enckey = rek->encryptedKey->data;
+ /* Setup all parameters to derive KEK */
+ if (!cms_env_asn1_ctrl(ri, 1))
+ goto err;
+ /* Attempt to decrypt CEK */
+ if (!cms_kek_cipher(&cek, &ceklen, enckey, enckeylen, ri->d.kari, 0))
+ goto err;
+ ec = cms->d.envelopedData->encryptedContentInfo;
+ if (ec->key) {
+ OPENSSL_cleanse(ec->key, ec->keylen);
+ OPENSSL_free(ec->key);
+ }
+ ec->key = cek;
+ ec->keylen = ceklen;
+ cek = NULL;
+ rv = 1;
+ err:
+ if (cek)
+ OPENSSL_free(cek);
+ return rv;
+}
+
+/* Create ephemeral key and initialise context based on it */
+static int cms_kari_create_ephemeral_key(CMS_KeyAgreeRecipientInfo *kari,
+ EVP_PKEY *pk)
+{
+ EVP_PKEY_CTX *pctx = NULL;
+ EVP_PKEY *ekey = NULL;
+ int rv = 0;
+ pctx = EVP_PKEY_CTX_new(pk, NULL);
+ if (!pctx)
+ goto err;
+ if (EVP_PKEY_keygen_init(pctx) <= 0)
+ goto err;
+ if (EVP_PKEY_keygen(pctx, &ekey) <= 0)
+ goto err;
+ EVP_PKEY_CTX_free(pctx);
+ pctx = EVP_PKEY_CTX_new(ekey, NULL);
+ if (!pctx)
+ goto err;
+ if (EVP_PKEY_derive_init(pctx) <= 0)
+ goto err;
+ kari->pctx = pctx;
+ rv = 1;
+ err:
+ if (!rv && pctx)
+ EVP_PKEY_CTX_free(pctx);
+ if (ekey)
+ EVP_PKEY_free(ekey);
+ return rv;
+}
+
+/* Initialise a ktri based on passed certificate and key */
+
+int cms_RecipientInfo_kari_init(CMS_RecipientInfo *ri, X509 *recip,
+ EVP_PKEY *pk, unsigned int flags)
+{
+ CMS_KeyAgreeRecipientInfo *kari;
+ CMS_RecipientEncryptedKey *rek = NULL;
+
+ ri->d.kari = M_ASN1_new_of(CMS_KeyAgreeRecipientInfo);
+ if (!ri->d.kari)
+ return 0;
+ ri->type = CMS_RECIPINFO_AGREE;
+
+ kari = ri->d.kari;
+ kari->version = 3;
+
+ rek = M_ASN1_new_of(CMS_RecipientEncryptedKey);
+ if (!sk_CMS_RecipientEncryptedKey_push(kari->recipientEncryptedKeys, rek)) {
+ M_ASN1_free_of(rek, CMS_RecipientEncryptedKey);
+ return 0;
+ }
+
+ if (flags & CMS_USE_KEYID) {
+ rek->rid->type = CMS_REK_KEYIDENTIFIER;
+ rek->rid->d.rKeyId = M_ASN1_new_of(CMS_RecipientKeyIdentifier);
+ if (rek->rid->d.rKeyId == NULL)
+ return 0;
+ if (!cms_set1_keyid(&rek->rid->d.rKeyId->subjectKeyIdentifier, recip))
+ return 0;
+ } else {
+ rek->rid->type = CMS_REK_ISSUER_SERIAL;
+ if (!cms_set1_ias(&rek->rid->d.issuerAndSerialNumber, recip))
+ return 0;
+ }
+
+ /* Create ephemeral key */
+ if (!cms_kari_create_ephemeral_key(kari, pk))
+ return 0;
+
+ CRYPTO_add(&pk->references, 1, CRYPTO_LOCK_EVP_PKEY);
+ rek->pkey = pk;
+ return 1;
+}
+
+static int cms_wrap_init(CMS_KeyAgreeRecipientInfo *kari,
+ const EVP_CIPHER *cipher)
+{
+ EVP_CIPHER_CTX *ctx = &kari->ctx;
+ const EVP_CIPHER *kekcipher;
+ int keylen = EVP_CIPHER_key_length(cipher);
+ /* If a suitable wrap algorithm is already set nothing to do */
+ kekcipher = EVP_CIPHER_CTX_cipher(ctx);
+
+ if (kekcipher) {
+ if (EVP_CIPHER_CTX_mode(ctx) != EVP_CIPH_WRAP_MODE)
+ return 0;
+ return 1;
+ }
+ /*
+ * Pick a cipher based on content encryption cipher. If it is DES3 use
+ * DES3 wrap otherwise use AES wrap similar to key size.
+ */
+ if (EVP_CIPHER_type(cipher) == NID_des_ede3_cbc)
+ kekcipher = EVP_des_ede3_wrap();
+ else if (keylen <= 16)
+ kekcipher = EVP_aes_128_wrap();
+ else if (keylen <= 24)
+ kekcipher = EVP_aes_192_wrap();
+ else
+ kekcipher = EVP_aes_256_wrap();
+ return EVP_EncryptInit_ex(ctx, kekcipher, NULL, NULL, NULL);
+}
+
+/* Encrypt content key in key agreement recipient info */
+
+int cms_RecipientInfo_kari_encrypt(CMS_ContentInfo *cms,
+ CMS_RecipientInfo *ri)
+{
+ CMS_KeyAgreeRecipientInfo *kari;
+ CMS_EncryptedContentInfo *ec;
+ CMS_RecipientEncryptedKey *rek;
+ STACK_OF(CMS_RecipientEncryptedKey) *reks;
+ int i;
+
+ if (ri->type != CMS_RECIPINFO_AGREE) {
+ CMSerr(CMS_F_CMS_RECIPIENTINFO_KARI_ENCRYPT, CMS_R_NOT_KEY_AGREEMENT);
+ return 0;
+ }
+ kari = ri->d.kari;
+ reks = kari->recipientEncryptedKeys;
+ ec = cms->d.envelopedData->encryptedContentInfo;
+ /* Initialise wrap algorithm parameters */
+ if (!cms_wrap_init(kari, ec->cipher))
+ return 0;
+ /*
+ * If no orignator key set up initialise for ephemeral key the public key
+ * ASN1 structure will set the actual public key value.
+ */
+ if (kari->originator->type == -1) {
+ CMS_OriginatorIdentifierOrKey *oik = kari->originator;
+ oik->type = CMS_OIK_PUBKEY;
+ oik->d.originatorKey = M_ASN1_new_of(CMS_OriginatorPublicKey);
+ if (!oik->d.originatorKey)
+ return 0;
+ }
+ /* Initialise KDF algorithm */
+ if (!cms_env_asn1_ctrl(ri, 0))
+ return 0;
+ /* For each rek, derive KEK, encrypt CEK */
+ for (i = 0; i < sk_CMS_RecipientEncryptedKey_num(reks); i++) {
+ unsigned char *enckey;
+ size_t enckeylen;
+ rek = sk_CMS_RecipientEncryptedKey_value(reks, i);
+ if (EVP_PKEY_derive_set_peer(kari->pctx, rek->pkey) <= 0)
+ return 0;
+ if (!cms_kek_cipher(&enckey, &enckeylen, ec->key, ec->keylen,
+ kari, 1))
+ return 0;
+ ASN1_STRING_set0(rek->encryptedKey, enckey, enckeylen);
+ }
+
+ return 1;
+
+}
diff --git a/crypto/openssl/crypto/cms/cms_lcl.h b/crypto/openssl/crypto/cms/cms_lcl.h
index 4f4c4c7..20f2c25 100644
--- a/crypto/openssl/crypto/cms/cms_lcl.h
+++ b/crypto/openssl/crypto/cms/cms_lcl.h
@@ -84,11 +84,9 @@ typedef struct CMS_KeyTransRecipientInfo_st CMS_KeyTransRecipientInfo;
typedef struct CMS_OriginatorPublicKey_st CMS_OriginatorPublicKey;
typedef struct CMS_OriginatorIdentifierOrKey_st CMS_OriginatorIdentifierOrKey;
typedef struct CMS_KeyAgreeRecipientInfo_st CMS_KeyAgreeRecipientInfo;
-typedef struct CMS_OtherKeyAttribute_st CMS_OtherKeyAttribute;
typedef struct CMS_RecipientKeyIdentifier_st CMS_RecipientKeyIdentifier;
typedef struct CMS_KeyAgreeRecipientIdentifier_st
CMS_KeyAgreeRecipientIdentifier;
-typedef struct CMS_RecipientEncryptedKey_st CMS_RecipientEncryptedKey;
typedef struct CMS_KEKIdentifier_st CMS_KEKIdentifier;
typedef struct CMS_KEKRecipientInfo_st CMS_KEKRecipientInfo;
typedef struct CMS_PasswordRecipientInfo_st CMS_PasswordRecipientInfo;
@@ -138,6 +136,9 @@ struct CMS_SignerInfo_st {
/* Signing certificate and key */
X509 *signer;
EVP_PKEY *pkey;
+ /* Digest and public key context for alternative parameters */
+ EVP_MD_CTX mctx;
+ EVP_PKEY_CTX *pctx;
};
struct CMS_SignerIdentifier_st {
@@ -194,6 +195,8 @@ struct CMS_KeyTransRecipientInfo_st {
/* Recipient Key and cert */
X509 *recip;
EVP_PKEY *pkey;
+ /* Public key context for this operation */
+ EVP_PKEY_CTX *pctx;
};
struct CMS_KeyAgreeRecipientInfo_st {
@@ -202,6 +205,10 @@ struct CMS_KeyAgreeRecipientInfo_st {
ASN1_OCTET_STRING *ukm;
X509_ALGOR *keyEncryptionAlgorithm;
STACK_OF(CMS_RecipientEncryptedKey) *recipientEncryptedKeys;
+ /* Public key context associated with current operation */
+ EVP_PKEY_CTX *pctx;
+ /* Cipher context for CEK wrapping */
+ EVP_CIPHER_CTX ctx;
};
struct CMS_OriginatorIdentifierOrKey_st {
@@ -221,6 +228,8 @@ struct CMS_OriginatorPublicKey_st {
struct CMS_RecipientEncryptedKey_st {
CMS_KeyAgreeRecipientIdentifier *rid;
ASN1_OCTET_STRING *encryptedKey;
+ /* Public key associated with this recipient */
+ EVP_PKEY *pkey;
};
struct CMS_KeyAgreeRecipientIdentifier_st {
@@ -394,6 +403,13 @@ DECLARE_ASN1_ALLOC_FUNCTIONS(CMS_IssuerAndSerialNumber)
# define CMS_RECIPINFO_ISSUER_SERIAL 0
# define CMS_RECIPINFO_KEYIDENTIFIER 1
+# define CMS_REK_ISSUER_SERIAL 0
+# define CMS_REK_KEYIDENTIFIER 1
+
+# define CMS_OIK_ISSUER_SERIAL 0
+# define CMS_OIK_KEYIDENTIFIER 1
+# define CMS_OIK_PUBKEY 2
+
BIO *cms_content_bio(CMS_ContentInfo *cms);
CMS_ContentInfo *cms_Data_create(void);
@@ -420,6 +436,11 @@ BIO *cms_DigestAlgorithm_init_bio(X509_ALGOR *digestAlgorithm);
int cms_DigestAlgorithm_find_ctx(EVP_MD_CTX *mctx, BIO *chain,
X509_ALGOR *mdalg);
+int cms_ias_cert_cmp(CMS_IssuerAndSerialNumber *ias, X509 *cert);
+int cms_keyid_cert_cmp(ASN1_OCTET_STRING *keyid, X509 *cert);
+int cms_set1_ias(CMS_IssuerAndSerialNumber **pias, X509 *cert);
+int cms_set1_keyid(ASN1_OCTET_STRING **pkeyid, X509 *cert);
+
BIO *cms_EncryptedContent_init_bio(CMS_EncryptedContentInfo *ec);
BIO *cms_EncryptedData_init_bio(CMS_ContentInfo *cms);
int cms_EncryptedContent_init(CMS_EncryptedContentInfo *ec,
@@ -432,6 +453,13 @@ ASN1_OCTET_STRING *cms_encode_Receipt(CMS_SignerInfo *si);
BIO *cms_EnvelopedData_init_bio(CMS_ContentInfo *cms);
CMS_EnvelopedData *cms_get0_enveloped(CMS_ContentInfo *cms);
+int cms_env_asn1_ctrl(CMS_RecipientInfo *ri, int cmd);
+int cms_pkey_get_ri_type(EVP_PKEY *pk);
+/* KARI routines */
+int cms_RecipientInfo_kari_init(CMS_RecipientInfo *ri, X509 *recip,
+ EVP_PKEY *pk, unsigned int flags);
+int cms_RecipientInfo_kari_encrypt(CMS_ContentInfo *cms,
+ CMS_RecipientInfo *ri);
/* PWRI routines */
int cms_RecipientInfo_pwri_crypt(CMS_ContentInfo *cms, CMS_RecipientInfo *ri,
diff --git a/crypto/openssl/crypto/cms/cms_lib.c b/crypto/openssl/crypto/cms/cms_lib.c
index e938461..d6cb60d 100644
--- a/crypto/openssl/crypto/cms/cms_lib.c
+++ b/crypto/openssl/crypto/cms/cms_lib.c
@@ -53,7 +53,7 @@
*/
#include <openssl/asn1t.h>
-#include <openssl/x509.h>
+#include <openssl/x509v3.h>
#include <openssl/err.h>
#include <openssl/pem.h>
#include <openssl/bio.h>
@@ -593,3 +593,60 @@ STACK_OF(X509_CRL) *CMS_get1_crls(CMS_ContentInfo *cms)
}
return crls;
}
+
+int cms_ias_cert_cmp(CMS_IssuerAndSerialNumber *ias, X509 *cert)
+{
+ int ret;
+ ret = X509_NAME_cmp(ias->issuer, X509_get_issuer_name(cert));
+ if (ret)
+ return ret;
+ return ASN1_INTEGER_cmp(ias->serialNumber, X509_get_serialNumber(cert));
+}
+
+int cms_keyid_cert_cmp(ASN1_OCTET_STRING *keyid, X509 *cert)
+{
+ X509_check_purpose(cert, -1, -1);
+ if (!cert->skid)
+ return -1;
+ return ASN1_OCTET_STRING_cmp(keyid, cert->skid);
+}
+
+int cms_set1_ias(CMS_IssuerAndSerialNumber **pias, X509 *cert)
+{
+ CMS_IssuerAndSerialNumber *ias;
+ ias = M_ASN1_new_of(CMS_IssuerAndSerialNumber);
+ if (!ias)
+ goto err;
+ if (!X509_NAME_set(&ias->issuer, X509_get_issuer_name(cert)))
+ goto err;
+ if (!ASN1_STRING_copy(ias->serialNumber, X509_get_serialNumber(cert)))
+ goto err;
+ if (*pias)
+ M_ASN1_free_of(*pias, CMS_IssuerAndSerialNumber);
+ *pias = ias;
+ return 1;
+ err:
+ if (ias)
+ M_ASN1_free_of(ias, CMS_IssuerAndSerialNumber);
+ CMSerr(CMS_F_CMS_SET1_IAS, ERR_R_MALLOC_FAILURE);
+ return 0;
+}
+
+int cms_set1_keyid(ASN1_OCTET_STRING **pkeyid, X509 *cert)
+{
+ ASN1_OCTET_STRING *keyid = NULL;
+ X509_check_purpose(cert, -1, -1);
+ if (!cert->skid) {
+ CMSerr(CMS_F_CMS_SET1_KEYID, CMS_R_CERTIFICATE_HAS_NO_KEYID);
+ return 0;
+ }
+ keyid = ASN1_STRING_dup(cert->skid);
+ if (!keyid) {
+ CMSerr(CMS_F_CMS_SET1_KEYID, ERR_R_MALLOC_FAILURE);
+ return 0;
+ }
+ if (*pkeyid)
+ ASN1_OCTET_STRING_free(*pkeyid);
+ *pkeyid = keyid;
+ return 1;
+}
diff --git a/crypto/openssl/crypto/cms/cms_sd.c b/crypto/openssl/crypto/cms/cms_sd.c
index 6daa262..721ffd5 100644
--- a/crypto/openssl/crypto/cms/cms_sd.c
+++ b/crypto/openssl/crypto/cms/cms_sd.c
@@ -55,6 +55,7 @@
#include "cryptlib.h"
#include <openssl/asn1t.h>
#include <openssl/pem.h>
+#include <openssl/x509.h>
#include <openssl/x509v3.h>
#include <openssl/err.h>
#include <openssl/cms.h>
@@ -197,27 +198,13 @@ int cms_set1_SignerIdentifier(CMS_SignerIdentifier *sid, X509 *cert, int type)
{
switch (type) {
case CMS_SIGNERINFO_ISSUER_SERIAL:
- sid->d.issuerAndSerialNumber =
- M_ASN1_new_of(CMS_IssuerAndSerialNumber);
- if (!sid->d.issuerAndSerialNumber)
- goto merr;
- if (!X509_NAME_set(&sid->d.issuerAndSerialNumber->issuer,
- X509_get_issuer_name(cert)))
- goto merr;
- if (!ASN1_STRING_copy(sid->d.issuerAndSerialNumber->serialNumber,
- X509_get_serialNumber(cert)))
- goto merr;
+ if (!cms_set1_ias(&sid->d.issuerAndSerialNumber, cert))
+ return 0;
break;
case CMS_SIGNERINFO_KEYIDENTIFIER:
- if (!cert->skid) {
- CMSerr(CMS_F_CMS_SET1_SIGNERIDENTIFIER,
- CMS_R_CERTIFICATE_HAS_NO_KEYID);
+ if (!cms_set1_keyid(&sid->d.subjectKeyIdentifier, cert))
return 0;
- }
- sid->d.subjectKeyIdentifier = ASN1_STRING_dup(cert->skid);
- if (!sid->d.subjectKeyIdentifier)
- goto merr;
break;
default:
@@ -228,11 +215,6 @@ int cms_set1_SignerIdentifier(CMS_SignerIdentifier *sid, X509 *cert, int type)
sid->type = type;
return 1;
-
- merr:
- CMSerr(CMS_F_CMS_SET1_SIGNERIDENTIFIER, ERR_R_MALLOC_FAILURE);
- return 0;
-
}
int cms_SignerIdentifier_get0_signer_id(CMS_SignerIdentifier *sid,
@@ -255,23 +237,32 @@ int cms_SignerIdentifier_get0_signer_id(CMS_SignerIdentifier *sid,
int cms_SignerIdentifier_cert_cmp(CMS_SignerIdentifier *sid, X509 *cert)
{
- int ret;
- if (sid->type == CMS_SIGNERINFO_ISSUER_SERIAL) {
- ret = X509_NAME_cmp(sid->d.issuerAndSerialNumber->issuer,
- X509_get_issuer_name(cert));
- if (ret)
- return ret;
- return ASN1_INTEGER_cmp(sid->d.issuerAndSerialNumber->serialNumber,
- X509_get_serialNumber(cert));
- } else if (sid->type == CMS_SIGNERINFO_KEYIDENTIFIER) {
- X509_check_purpose(cert, -1, -1);
- if (!cert->skid)
- return -1;
- return ASN1_OCTET_STRING_cmp(sid->d.subjectKeyIdentifier, cert->skid);
- } else
+ if (sid->type == CMS_SIGNERINFO_ISSUER_SERIAL)
+ return cms_ias_cert_cmp(sid->d.issuerAndSerialNumber, cert);
+ else if (sid->type == CMS_SIGNERINFO_KEYIDENTIFIER)
+ return cms_keyid_cert_cmp(sid->d.subjectKeyIdentifier, cert);
+ else
return -1;
}
+static int cms_sd_asn1_ctrl(CMS_SignerInfo *si, int cmd)
+{
+ EVP_PKEY *pkey = si->pkey;
+ int i;
+ if (!pkey->ameth || !pkey->ameth->pkey_ctrl)
+ return 1;
+ i = pkey->ameth->pkey_ctrl(pkey, ASN1_PKEY_CTRL_CMS_SIGN, cmd, si);
+ if (i == -2) {
+ CMSerr(CMS_F_CMS_SD_ASN1_CTRL, CMS_R_NOT_SUPPORTED_FOR_THIS_KEY_TYPE);
+ return 0;
+ }
+ if (i <= 0) {
+ CMSerr(CMS_F_CMS_SD_ASN1_CTRL, CMS_R_CTRL_FAILURE);
+ return 0;
+ }
+ return 1;
+}
+
CMS_SignerInfo *CMS_add1_signer(CMS_ContentInfo *cms,
X509 *signer, EVP_PKEY *pk, const EVP_MD *md,
unsigned int flags)
@@ -298,6 +289,8 @@ CMS_SignerInfo *CMS_add1_signer(CMS_ContentInfo *cms,
si->pkey = pk;
si->signer = signer;
+ EVP_MD_CTX_init(&si->mctx);
+ si->pctx = NULL;
if (flags & CMS_USE_KEYID) {
si->version = 3;
@@ -350,19 +343,8 @@ CMS_SignerInfo *CMS_add1_signer(CMS_ContentInfo *cms,
}
}
- if (pk->ameth && pk->ameth->pkey_ctrl) {
- i = pk->ameth->pkey_ctrl(pk, ASN1_PKEY_CTRL_CMS_SIGN, 0, si);
- if (i == -2) {
- CMSerr(CMS_F_CMS_ADD1_SIGNER,
- CMS_R_NOT_SUPPORTED_FOR_THIS_KEY_TYPE);
- goto err;
- }
- if (i <= 0) {
- CMSerr(CMS_F_CMS_ADD1_SIGNER, CMS_R_CTRL_FAILURE);
- goto err;
- }
- }
-
+ if (!(flags & CMS_KEY_PARAM) && !cms_sd_asn1_ctrl(si, 0))
+ goto err;
if (!(flags & CMS_NOATTR)) {
/*
* Initialialize signed attributes strutucture so other attributes
@@ -386,7 +368,8 @@ CMS_SignerInfo *CMS_add1_signer(CMS_ContentInfo *cms,
if (flags & CMS_REUSE_DIGEST) {
if (!cms_copy_messageDigest(cms, si))
goto err;
- if (!(flags & CMS_PARTIAL) && !CMS_SignerInfo_sign(si))
+ if (!(flags & (CMS_PARTIAL | CMS_KEY_PARAM)) &&
+ !CMS_SignerInfo_sign(si))
goto err;
}
}
@@ -397,6 +380,20 @@ CMS_SignerInfo *CMS_add1_signer(CMS_ContentInfo *cms,
goto merr;
}
+ if (flags & CMS_KEY_PARAM) {
+ if (flags & CMS_NOATTR) {
+ si->pctx = EVP_PKEY_CTX_new(si->pkey, NULL);
+ if (!si->pctx)
+ goto err;
+ if (EVP_PKEY_sign_init(si->pctx) <= 0)
+ goto err;
+ if (EVP_PKEY_CTX_set_signature_md(si->pctx, md) <= 0)
+ goto err;
+ } else if (EVP_DigestSignInit(&si->mctx, &si->pctx, md, NULL, pk) <=
+ 0)
+ goto err;
+ }
+
if (!sd->signerInfos)
sd->signerInfos = sk_CMS_SignerInfo_new_null();
if (!sd->signerInfos || !sk_CMS_SignerInfo_push(sd->signerInfos, si))
@@ -443,6 +440,16 @@ static int cms_add1_signingTime(CMS_SignerInfo *si, ASN1_TIME *t)
}
+EVP_PKEY_CTX *CMS_SignerInfo_get0_pkey_ctx(CMS_SignerInfo *si)
+{
+ return si->pctx;
+}
+
+EVP_MD_CTX *CMS_SignerInfo_get0_md_ctx(CMS_SignerInfo *si)
+{
+ return &si->mctx;
+}
+
STACK_OF(CMS_SignerInfo) *CMS_get0_SignerInfos(CMS_ContentInfo *cms)
{
CMS_SignedData *sd;
@@ -561,11 +568,17 @@ void CMS_SignerInfo_get0_algs(CMS_SignerInfo *si, EVP_PKEY **pk,
*psig = si->signatureAlgorithm;
}
+ASN1_OCTET_STRING *CMS_SignerInfo_get0_signature(CMS_SignerInfo *si)
+{
+ return si->signature;
+}
+
static int cms_SignerInfo_content_sign(CMS_ContentInfo *cms,
CMS_SignerInfo *si, BIO *chain)
{
EVP_MD_CTX mctx;
int r = 0;
+ EVP_PKEY_CTX *pctx = NULL;
EVP_MD_CTX_init(&mctx);
if (!si->pkey) {
@@ -575,6 +588,9 @@ static int cms_SignerInfo_content_sign(CMS_ContentInfo *cms,
if (!cms_DigestAlgorithm_find_ctx(&mctx, chain, si->digestAlgorithm))
goto err;
+ /* Set SignerInfo algortihm details if we used custom parametsr */
+ if (si->pctx && !cms_sd_asn1_ctrl(si, 0))
+ goto err;
/*
* If any signed attributes calculate and add messageDigest attribute
@@ -596,6 +612,23 @@ static int cms_SignerInfo_content_sign(CMS_ContentInfo *cms,
goto err;
if (!CMS_SignerInfo_sign(si))
goto err;
+ } else if (si->pctx) {
+ unsigned char *sig;
+ size_t siglen;
+ unsigned char md[EVP_MAX_MD_SIZE];
+ unsigned int mdlen;
+ pctx = si->pctx;
+ if (!EVP_DigestFinal_ex(&mctx, md, &mdlen))
+ goto err;
+ siglen = EVP_PKEY_size(si->pkey);
+ sig = OPENSSL_malloc(siglen);
+ if (!sig) {
+ CMSerr(CMS_F_CMS_SIGNERINFO_CONTENT_SIGN, ERR_R_MALLOC_FAILURE);
+ goto err;
+ }
+ if (EVP_PKEY_sign(pctx, sig, &siglen, md, mdlen) <= 0)
+ goto err;
+ ASN1_STRING_set0(si->signature, sig, siglen);
} else {
unsigned char *sig;
unsigned int siglen;
@@ -616,6 +649,8 @@ static int cms_SignerInfo_content_sign(CMS_ContentInfo *cms,
err:
EVP_MD_CTX_cleanup(&mctx);
+ if (pctx)
+ EVP_PKEY_CTX_free(pctx);
return r;
}
@@ -637,7 +672,7 @@ int cms_SignedData_final(CMS_ContentInfo *cms, BIO *chain)
int CMS_SignerInfo_sign(CMS_SignerInfo *si)
{
- EVP_MD_CTX mctx;
+ EVP_MD_CTX *mctx = &si->mctx;
EVP_PKEY_CTX *pctx;
unsigned char *abuf = NULL;
int alen;
@@ -648,15 +683,18 @@ int CMS_SignerInfo_sign(CMS_SignerInfo *si)
if (md == NULL)
return 0;
- EVP_MD_CTX_init(&mctx);
-
if (CMS_signed_get_attr_by_NID(si, NID_pkcs9_signingTime, -1) < 0) {
if (!cms_add1_signingTime(si, NULL))
goto err;
}
- if (EVP_DigestSignInit(&mctx, &pctx, md, NULL, si->pkey) <= 0)
- goto err;
+ if (si->pctx)
+ pctx = si->pctx;
+ else {
+ EVP_MD_CTX_init(mctx);
+ if (EVP_DigestSignInit(mctx, &pctx, md, NULL, si->pkey) <= 0)
+ goto err;
+ }
if (EVP_PKEY_CTX_ctrl(pctx, -1, EVP_PKEY_OP_SIGN,
EVP_PKEY_CTRL_CMS_SIGN, 0, si) <= 0) {
@@ -668,15 +706,15 @@ int CMS_SignerInfo_sign(CMS_SignerInfo *si)
ASN1_ITEM_rptr(CMS_Attributes_Sign));
if (!abuf)
goto err;
- if (EVP_DigestSignUpdate(&mctx, abuf, alen) <= 0)
+ if (EVP_DigestSignUpdate(mctx, abuf, alen) <= 0)
goto err;
- if (EVP_DigestSignFinal(&mctx, NULL, &siglen) <= 0)
+ if (EVP_DigestSignFinal(mctx, NULL, &siglen) <= 0)
goto err;
OPENSSL_free(abuf);
abuf = OPENSSL_malloc(siglen);
if (!abuf)
goto err;
- if (EVP_DigestSignFinal(&mctx, abuf, &siglen) <= 0)
+ if (EVP_DigestSignFinal(mctx, abuf, &siglen) <= 0)
goto err;
if (EVP_PKEY_CTX_ctrl(pctx, -1, EVP_PKEY_OP_SIGN,
@@ -685,7 +723,7 @@ int CMS_SignerInfo_sign(CMS_SignerInfo *si)
goto err;
}
- EVP_MD_CTX_cleanup(&mctx);
+ EVP_MD_CTX_cleanup(mctx);
ASN1_STRING_set0(si->signature, abuf, siglen);
@@ -694,15 +732,14 @@ int CMS_SignerInfo_sign(CMS_SignerInfo *si)
err:
if (abuf)
OPENSSL_free(abuf);
- EVP_MD_CTX_cleanup(&mctx);
+ EVP_MD_CTX_cleanup(mctx);
return 0;
}
int CMS_SignerInfo_verify(CMS_SignerInfo *si)
{
- EVP_MD_CTX mctx;
- EVP_PKEY_CTX *pctx;
+ EVP_MD_CTX *mctx = &si->mctx;
unsigned char *abuf = NULL;
int alen, r = -1;
const EVP_MD *md = NULL;
@@ -715,26 +752,29 @@ int CMS_SignerInfo_verify(CMS_SignerInfo *si)
md = EVP_get_digestbyobj(si->digestAlgorithm->algorithm);
if (md == NULL)
return -1;
- EVP_MD_CTX_init(&mctx);
- if (EVP_DigestVerifyInit(&mctx, &pctx, md, NULL, si->pkey) <= 0)
+ EVP_MD_CTX_init(mctx);
+ if (EVP_DigestVerifyInit(mctx, &si->pctx, md, NULL, si->pkey) <= 0)
+ goto err;
+
+ if (!cms_sd_asn1_ctrl(si, 1))
goto err;
alen = ASN1_item_i2d((ASN1_VALUE *)si->signedAttrs, &abuf,
ASN1_ITEM_rptr(CMS_Attributes_Verify));
if (!abuf)
goto err;
- r = EVP_DigestVerifyUpdate(&mctx, abuf, alen);
+ r = EVP_DigestVerifyUpdate(mctx, abuf, alen);
OPENSSL_free(abuf);
if (r <= 0) {
r = -1;
goto err;
}
- r = EVP_DigestVerifyFinal(&mctx,
+ r = EVP_DigestVerifyFinal(mctx,
si->signature->data, si->signature->length);
if (r <= 0)
CMSerr(CMS_F_CMS_SIGNERINFO_VERIFY, CMS_R_VERIFICATION_FAILURE);
err:
- EVP_MD_CTX_cleanup(&mctx);
+ EVP_MD_CTX_cleanup(mctx);
return r;
}
@@ -773,7 +813,10 @@ int CMS_SignerInfo_verify_content(CMS_SignerInfo *si, BIO *chain)
{
ASN1_OCTET_STRING *os = NULL;
EVP_MD_CTX mctx;
+ EVP_PKEY_CTX *pkctx = NULL;
int r = -1;
+ unsigned char mval[EVP_MAX_MD_SIZE];
+ unsigned int mlen;
EVP_MD_CTX_init(&mctx);
/* If we have any signed attributes look for messageDigest value */
if (CMS_signed_get_attr_count(si) >= 0) {
@@ -790,16 +833,15 @@ int CMS_SignerInfo_verify_content(CMS_SignerInfo *si, BIO *chain)
if (!cms_DigestAlgorithm_find_ctx(&mctx, chain, si->digestAlgorithm))
goto err;
+ if (EVP_DigestFinal_ex(&mctx, mval, &mlen) <= 0) {
+ CMSerr(CMS_F_CMS_SIGNERINFO_VERIFY_CONTENT,
+ CMS_R_UNABLE_TO_FINALIZE_CONTEXT);
+ goto err;
+ }
+
/* If messageDigest found compare it */
if (os) {
- unsigned char mval[EVP_MAX_MD_SIZE];
- unsigned int mlen;
- if (EVP_DigestFinal_ex(&mctx, mval, &mlen) <= 0) {
- CMSerr(CMS_F_CMS_SIGNERINFO_VERIFY_CONTENT,
- CMS_R_UNABLE_TO_FINALIZE_CONTEXT);
- goto err;
- }
if (mlen != (unsigned int)os->length) {
CMSerr(CMS_F_CMS_SIGNERINFO_VERIFY_CONTENT,
CMS_R_MESSAGEDIGEST_ATTRIBUTE_WRONG_LENGTH);
@@ -813,8 +855,17 @@ int CMS_SignerInfo_verify_content(CMS_SignerInfo *si, BIO *chain)
} else
r = 1;
} else {
- r = EVP_VerifyFinal(&mctx, si->signature->data,
- si->signature->length, si->pkey);
+ const EVP_MD *md = EVP_MD_CTX_md(&mctx);
+ pkctx = EVP_PKEY_CTX_new(si->pkey, NULL);
+ if (EVP_PKEY_verify_init(pkctx) <= 0)
+ goto err;
+ if (EVP_PKEY_CTX_set_signature_md(pkctx, md) <= 0)
+ goto err;
+ si->pctx = pkctx;
+ if (!cms_sd_asn1_ctrl(si, 1))
+ goto err;
+ r = EVP_PKEY_verify(pkctx, si->signature->data,
+ si->signature->length, mval, mlen);
if (r <= 0) {
CMSerr(CMS_F_CMS_SIGNERINFO_VERIFY_CONTENT,
CMS_R_VERIFICATION_FAILURE);
@@ -823,6 +874,8 @@ int CMS_SignerInfo_verify_content(CMS_SignerInfo *si, BIO *chain)
}
err:
+ if (pkctx)
+ EVP_PKEY_CTX_free(pkctx);
EVP_MD_CTX_cleanup(&mctx);
return r;
diff --git a/crypto/openssl/crypto/cms/cms_smime.c b/crypto/openssl/crypto/cms/cms_smime.c
index 8b37560..5522a37 100644
--- a/crypto/openssl/crypto/cms/cms_smime.c
+++ b/crypto/openssl/crypto/cms/cms_smime.c
@@ -59,6 +59,7 @@
#include <openssl/err.h>
#include <openssl/cms.h>
#include "cms_lcl.h"
+#include "asn1_locl.h"
static int cms_copy_content(BIO *out, BIO *in, unsigned int flags)
{
@@ -373,7 +374,7 @@ int CMS_verify(CMS_ContentInfo *cms, STACK_OF(X509) *certs,
tmpin = BIO_new_mem_buf(ptr, len);
if (tmpin == NULL) {
CMSerr(CMS_F_CMS_VERIFY, ERR_R_MALLOC_FAILURE);
- return 0;
+ goto err2;
}
} else
tmpin = dcont;
@@ -404,6 +405,7 @@ int CMS_verify(CMS_ContentInfo *cms, STACK_OF(X509) *certs,
else
BIO_free_all(cmsbio);
+ err2:
if (cms_certs)
sk_X509_pop_free(cms_certs, X509_free);
if (crls)
@@ -567,25 +569,63 @@ CMS_ContentInfo *CMS_encrypt(STACK_OF(X509) *certs, BIO *data,
return NULL;
}
+static int cms_kari_set1_pkey(CMS_ContentInfo *cms, CMS_RecipientInfo *ri,
+ EVP_PKEY *pk, X509 *cert)
+{
+ int i;
+ STACK_OF(CMS_RecipientEncryptedKey) *reks;
+ CMS_RecipientEncryptedKey *rek;
+ reks = CMS_RecipientInfo_kari_get0_reks(ri);
+ if (!cert)
+ return 0;
+ for (i = 0; i < sk_CMS_RecipientEncryptedKey_num(reks); i++) {
+ int rv;
+ rek = sk_CMS_RecipientEncryptedKey_value(reks, i);
+ if (CMS_RecipientEncryptedKey_cert_cmp(rek, cert))
+ continue;
+ CMS_RecipientInfo_kari_set0_pkey(ri, pk);
+ rv = CMS_RecipientInfo_kari_decrypt(cms, ri, rek);
+ CMS_RecipientInfo_kari_set0_pkey(ri, NULL);
+ if (rv > 0)
+ return 1;
+ return -1;
+ }
+ return 0;
+}
+
int CMS_decrypt_set1_pkey(CMS_ContentInfo *cms, EVP_PKEY *pk, X509 *cert)
{
STACK_OF(CMS_RecipientInfo) *ris;
CMS_RecipientInfo *ri;
- int i, r;
- int debug = 0, ri_match = 0;
+ int i, r, ri_type;
+ int debug = 0, match_ri = 0;
ris = CMS_get0_RecipientInfos(cms);
if (ris)
debug = cms->d.envelopedData->encryptedContentInfo->debug;
+ ri_type = cms_pkey_get_ri_type(pk);
+ if (ri_type == CMS_RECIPINFO_NONE) {
+ CMSerr(CMS_F_CMS_DECRYPT_SET1_PKEY,
+ CMS_R_NOT_SUPPORTED_FOR_THIS_KEY_TYPE);
+ return 0;
+ }
+
for (i = 0; i < sk_CMS_RecipientInfo_num(ris); i++) {
ri = sk_CMS_RecipientInfo_value(ris, i);
- if (CMS_RecipientInfo_type(ri) != CMS_RECIPINFO_TRANS)
+ if (CMS_RecipientInfo_type(ri) != ri_type)
continue;
- ri_match = 1;
+ match_ri = 1;
+ if (ri_type == CMS_RECIPINFO_AGREE) {
+ r = cms_kari_set1_pkey(cms, ri, pk, cert);
+ if (r > 0)
+ return 1;
+ if (r < 0)
+ return 0;
+ }
/*
* If we have a cert try matching RecipientInfo otherwise try them
* all.
*/
- if (!cert || (CMS_RecipientInfo_ktri_cert_cmp(ri, cert) == 0)) {
+ else if (!cert || !CMS_RecipientInfo_ktri_cert_cmp(ri, cert)) {
CMS_RecipientInfo_set0_pkey(ri, pk);
r = CMS_RecipientInfo_decrypt(cms, ri);
CMS_RecipientInfo_set0_pkey(ri, NULL);
@@ -613,7 +653,7 @@ int CMS_decrypt_set1_pkey(CMS_ContentInfo *cms, EVP_PKEY *pk, X509 *cert)
}
}
/* If no cert and not debugging always return success */
- if (ri_match && !cert && !debug) {
+ if (match_ri && !cert && !debug) {
ERR_clear_error();
return 1;
}
diff --git a/crypto/openssl/crypto/cryptlib.c b/crypto/openssl/crypto/cryptlib.c
index c654a5c..ca0e3cc 100644
--- a/crypto/openssl/crypto/cryptlib.c
+++ b/crypto/openssl/crypto/cryptlib.c
@@ -653,7 +653,7 @@ const char *CRYPTO_get_lock_name(int type)
defined(__x86_64) || defined(__x86_64__) || \
defined(_M_AMD64) || defined(_M_X64)
-unsigned int OPENSSL_ia32cap_P[2];
+extern unsigned int OPENSSL_ia32cap_P[4];
unsigned long *OPENSSL_ia32cap_loc(void)
{
if (sizeof(long) == 4)
@@ -663,6 +663,9 @@ unsigned long *OPENSSL_ia32cap_loc(void)
* is 32-bit.
*/
OPENSSL_ia32cap_P[1] = 0;
+
+ OPENSSL_ia32cap_P[2] = 0;
+
return (unsigned long *)OPENSSL_ia32cap_P;
}
@@ -676,7 +679,7 @@ typedef unsigned long long IA32CAP;
void OPENSSL_cpuid_setup(void)
{
static int trigger = 0;
- IA32CAP OPENSSL_ia32_cpuid(void);
+ IA32CAP OPENSSL_ia32_cpuid(unsigned int *);
IA32CAP vec;
char *env;
@@ -694,9 +697,23 @@ void OPENSSL_cpuid_setup(void)
vec = strtoul(env + off, NULL, 0);
# endif
if (off)
- vec = OPENSSL_ia32_cpuid() & ~vec;
+ vec = OPENSSL_ia32_cpuid(OPENSSL_ia32cap_P) & ~vec;
+ else if (env[0] == ':')
+ vec = OPENSSL_ia32_cpuid(OPENSSL_ia32cap_P);
+
+ OPENSSL_ia32cap_P[2] = 0;
+ if ((env = strchr(env, ':'))) {
+ unsigned int vecx;
+ env++;
+ off = (env[0] == '~') ? 1 : 0;
+ vecx = strtoul(env + off, NULL, 0);
+ if (off)
+ OPENSSL_ia32cap_P[2] &= ~vecx;
+ else
+ OPENSSL_ia32cap_P[2] = vecx;
+ }
} else
- vec = OPENSSL_ia32_cpuid();
+ vec = OPENSSL_ia32_cpuid(OPENSSL_ia32cap_P);
/*
* |(1<<10) sets a reserved bit to signal that variable
@@ -706,6 +723,8 @@ void OPENSSL_cpuid_setup(void)
OPENSSL_ia32cap_P[0] = (unsigned int)vec | (1 << 10);
OPENSSL_ia32cap_P[1] = (unsigned int)(vec >> 32);
}
+# else
+unsigned int OPENSSL_ia32cap_P[4];
# endif
#else
@@ -857,8 +876,12 @@ void OPENSSL_showfatal(const char *fmta, ...)
if ((h = GetStdHandle(STD_ERROR_HANDLE)) != NULL &&
GetFileType(h) != FILE_TYPE_UNKNOWN) {
/* must be console application */
+ int len;
+ DWORD out;
+
va_start(ap, fmta);
- vfprintf(stderr, fmta, ap);
+ len = _vsnprintf((char *)buf, sizeof(buf), fmta, ap);
+ WriteFile(h, buf, len < 0 ? sizeof(buf) : (DWORD) len, &out, NULL);
va_end(ap);
return;
}
@@ -965,7 +988,9 @@ void OpenSSLDie(const char *file, int line, const char *assertion)
/*
* Win32 abort() customarily shows a dialog, but we just did that...
*/
+# if !defined(_WIN32_WCE)
raise(SIGABRT);
+# endif
_exit(3);
#endif
}
diff --git a/crypto/openssl/crypto/cversion.c b/crypto/openssl/crypto/cversion.c
index 9e6f50d..bfff699 100644
--- a/crypto/openssl/crypto/cversion.c
+++ b/crypto/openssl/crypto/cversion.c
@@ -68,7 +68,11 @@ const char *SSLeay_version(int t)
return OPENSSL_VERSION_TEXT;
if (t == SSLEAY_BUILT_ON) {
#ifdef DATE
+# ifdef OPENSSL_USE_BUILD_DATE
return (DATE);
+# else
+ return ("built on: reproducible build, date unspecified");
+# endif
#else
return ("built on: date not available");
#endif
diff --git a/crypto/openssl/crypto/des/Makefile b/crypto/openssl/crypto/des/Makefile
index fbc77c1..8b5166c 100644
--- a/crypto/openssl/crypto/des/Makefile
+++ b/crypto/openssl/crypto/des/Makefile
@@ -61,6 +61,8 @@ des: des.o cbc3_enc.o lib
des_enc-sparc.S: asm/des_enc.m4
m4 -B 8192 asm/des_enc.m4 > des_enc-sparc.S
+dest4-sparcv9.s: asm/dest4-sparcv9.pl
+ $(PERL) asm/dest4-sparcv9.pl $(CFLAGS) > $@
des-586.s: asm/des-586.pl ../perlasm/x86asm.pl ../perlasm/cbc.pl
$(PERL) asm/des-586.pl $(PERLASM_SCHEME) $(CFLAGS) > $@
diff --git a/crypto/openssl/crypto/des/asm/des-586.pl b/crypto/openssl/crypto/des/asm/des-586.pl
index 5b5f39c..bd6a7dd 100644
--- a/crypto/openssl/crypto/des/asm/des-586.pl
+++ b/crypto/openssl/crypto/des/asm/des-586.pl
@@ -25,6 +25,7 @@ $small_footprint=1 if (grep(/\-DOPENSSL_SMALL_FOOTPRINT/,@ARGV));
# the folded loop is only 3% slower than unrolled, but >7 times smaller
&public_label("DES_SPtrans");
+&static_label("des_sptrans");
&DES_encrypt_internal();
&DES_decrypt_internal();
@@ -158,7 +159,7 @@ sub DES_encrypt
&call (&label("pic_point"));
&set_label("pic_point");
&blindpop($trans);
- &lea ($trans,&DWP(&label("DES_SPtrans")."-".&label("pic_point"),$trans));
+ &lea ($trans,&DWP(&label("des_sptrans")."-".&label("pic_point"),$trans));
&mov( "ecx", &wparam(1) );
@@ -315,6 +316,7 @@ sub FP_new
sub DES_SPtrans
{
&set_label("DES_SPtrans",64);
+ &set_label("des_sptrans");
&data_word(0x02080800, 0x00080000, 0x02000002, 0x02080802);
&data_word(0x02000000, 0x00080802, 0x00080002, 0x02000002);
&data_word(0x00080802, 0x02080800, 0x02080000, 0x00000802);
diff --git a/crypto/openssl/crypto/des/asm/des_enc.m4 b/crypto/openssl/crypto/des/asm/des_enc.m4
index 3280595..dda08e1 100644
--- a/crypto/openssl/crypto/des/asm/des_enc.m4
+++ b/crypto/openssl/crypto/des/asm/des_enc.m4
@@ -46,6 +46,8 @@
.ident "des_enc.m4 2.1"
.file "des_enc-sparc.S"
+#include <openssl/opensslconf.h>
+
#if defined(__SUNPRO_C) && defined(__sparcv9)
# define ABI64 /* They've said -xarch=v9 at command line */
#elif defined(__GNUC__) && defined(__arch64__)
diff --git a/crypto/openssl/crypto/des/asm/dest4-sparcv9.pl b/crypto/openssl/crypto/des/asm/dest4-sparcv9.pl
new file mode 100755
index 0000000..1dc6024
--- /dev/null
+++ b/crypto/openssl/crypto/des/asm/dest4-sparcv9.pl
@@ -0,0 +1,617 @@
+#!/usr/bin/env perl
+
+# ====================================================================
+# Written by David S. Miller <davem@devemloft.net> and Andy Polyakov
+# <appro@openssl.org>. The module is licensed under 2-clause BSD
+# license. March 2013. All rights reserved.
+# ====================================================================
+
+######################################################################
+# DES for SPARC T4.
+#
+# As with other hardware-assisted ciphers CBC encrypt results [for
+# aligned data] are virtually identical to critical path lengths:
+#
+# DES Triple-DES
+# CBC encrypt 4.14/4.15(*) 11.7/11.7
+# CBC decrypt 1.77/4.11(**) 6.42/7.47
+#
+# (*) numbers after slash are for
+# misaligned data;
+# (**) this is result for largest
+# block size, unlike all other
+# cases smaller blocks results
+# are better[?];
+
+$0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1;
+push(@INC,"${dir}","${dir}../../perlasm");
+require "sparcv9_modes.pl";
+
+&asm_init(@ARGV);
+
+$code.=<<___ if ($::abibits==64);
+.register %g2,#scratch
+.register %g3,#scratch
+___
+
+$code.=<<___;
+.text
+___
+
+{ my ($inp,$out)=("%o0","%o1");
+
+$code.=<<___;
+.align 32
+.globl des_t4_key_expand
+.type des_t4_key_expand,#function
+des_t4_key_expand:
+ andcc $inp, 0x7, %g0
+ alignaddr $inp, %g0, $inp
+ bz,pt %icc, 1f
+ ldd [$inp + 0x00], %f0
+ ldd [$inp + 0x08], %f2
+ faligndata %f0, %f2, %f0
+1: des_kexpand %f0, 0, %f0
+ des_kexpand %f0, 1, %f2
+ std %f0, [$out + 0x00]
+ des_kexpand %f2, 3, %f6
+ std %f2, [$out + 0x08]
+ des_kexpand %f2, 2, %f4
+ des_kexpand %f6, 3, %f10
+ std %f6, [$out + 0x18]
+ des_kexpand %f6, 2, %f8
+ std %f4, [$out + 0x10]
+ des_kexpand %f10, 3, %f14
+ std %f10, [$out + 0x28]
+ des_kexpand %f10, 2, %f12
+ std %f8, [$out + 0x20]
+ des_kexpand %f14, 1, %f16
+ std %f14, [$out + 0x38]
+ des_kexpand %f16, 3, %f20
+ std %f12, [$out + 0x30]
+ des_kexpand %f16, 2, %f18
+ std %f16, [$out + 0x40]
+ des_kexpand %f20, 3, %f24
+ std %f20, [$out + 0x50]
+ des_kexpand %f20, 2, %f22
+ std %f18, [$out + 0x48]
+ des_kexpand %f24, 3, %f28
+ std %f24, [$out + 0x60]
+ des_kexpand %f24, 2, %f26
+ std %f22, [$out + 0x58]
+ des_kexpand %f28, 1, %f30
+ std %f28, [$out + 0x70]
+ std %f26, [$out + 0x68]
+ retl
+ std %f30, [$out + 0x78]
+.size des_t4_key_expand,.-des_t4_key_expand
+___
+}
+{ my ($inp,$out,$len,$key,$ivec) = map("%o$_",(0..4));
+ my ($ileft,$iright,$omask) = map("%g$_",(1..3));
+
+$code.=<<___;
+.globl des_t4_cbc_encrypt
+.align 32
+des_t4_cbc_encrypt:
+ cmp $len, 0
+ be,pn $::size_t_cc, .Lcbc_abort
+ nop
+ ld [$ivec + 0], %f0 ! load ivec
+ ld [$ivec + 4], %f1
+
+ and $inp, 7, $ileft
+ andn $inp, 7, $inp
+ sll $ileft, 3, $ileft
+ mov 0xff, $omask
+ prefetch [$inp], 20
+ prefetch [$inp + 63], 20
+ sub %g0, $ileft, $iright
+ and $out, 7, %g4
+ alignaddrl $out, %g0, $out
+ srl $omask, %g4, $omask
+ srlx $len, 3, $len
+ movrz %g4, 0, $omask
+ prefetch [$out], 22
+
+ ldd [$key + 0x00], %f4 ! load key schedule
+ ldd [$key + 0x08], %f6
+ ldd [$key + 0x10], %f8
+ ldd [$key + 0x18], %f10
+ ldd [$key + 0x20], %f12
+ ldd [$key + 0x28], %f14
+ ldd [$key + 0x30], %f16
+ ldd [$key + 0x38], %f18
+ ldd [$key + 0x40], %f20
+ ldd [$key + 0x48], %f22
+ ldd [$key + 0x50], %f24
+ ldd [$key + 0x58], %f26
+ ldd [$key + 0x60], %f28
+ ldd [$key + 0x68], %f30
+ ldd [$key + 0x70], %f32
+ ldd [$key + 0x78], %f34
+
+.Ldes_cbc_enc_loop:
+ ldx [$inp + 0], %g4
+ brz,pt $ileft, 4f
+ nop
+
+ ldx [$inp + 8], %g5
+ sllx %g4, $ileft, %g4
+ srlx %g5, $iright, %g5
+ or %g5, %g4, %g4
+4:
+ movxtod %g4, %f2
+ prefetch [$inp + 8+63], 20
+ add $inp, 8, $inp
+ fxor %f2, %f0, %f0 ! ^= ivec
+ prefetch [$out + 63], 22
+
+ des_ip %f0, %f0
+ des_round %f4, %f6, %f0, %f0
+ des_round %f8, %f10, %f0, %f0
+ des_round %f12, %f14, %f0, %f0
+ des_round %f16, %f18, %f0, %f0
+ des_round %f20, %f22, %f0, %f0
+ des_round %f24, %f26, %f0, %f0
+ des_round %f28, %f30, %f0, %f0
+ des_round %f32, %f34, %f0, %f0
+ des_iip %f0, %f0
+
+ brnz,pn $omask, 2f
+ sub $len, 1, $len
+
+ std %f0, [$out + 0]
+ brnz,pt $len, .Ldes_cbc_enc_loop
+ add $out, 8, $out
+
+ st %f0, [$ivec + 0] ! write out ivec
+ retl
+ st %f1, [$ivec + 4]
+.Lcbc_abort:
+ retl
+ nop
+
+.align 16
+2: ldxa [$inp]0x82, %g4 ! avoid read-after-write hazard
+ ! and ~4x deterioration
+ ! in inp==out case
+ faligndata %f0, %f0, %f2 ! handle unaligned output
+
+ stda %f2, [$out + $omask]0xc0 ! partial store
+ add $out, 8, $out
+ orn %g0, $omask, $omask
+ stda %f2, [$out + $omask]0xc0 ! partial store
+
+ brnz,pt $len, .Ldes_cbc_enc_loop+4
+ orn %g0, $omask, $omask
+
+ st %f0, [$ivec + 0] ! write out ivec
+ retl
+ st %f1, [$ivec + 4]
+.type des_t4_cbc_encrypt,#function
+.size des_t4_cbc_encrypt,.-des_t4_cbc_encrypt
+
+.globl des_t4_cbc_decrypt
+.align 32
+des_t4_cbc_decrypt:
+ cmp $len, 0
+ be,pn $::size_t_cc, .Lcbc_abort
+ nop
+ ld [$ivec + 0], %f2 ! load ivec
+ ld [$ivec + 4], %f3
+
+ and $inp, 7, $ileft
+ andn $inp, 7, $inp
+ sll $ileft, 3, $ileft
+ mov 0xff, $omask
+ prefetch [$inp], 20
+ prefetch [$inp + 63], 20
+ sub %g0, $ileft, $iright
+ and $out, 7, %g4
+ alignaddrl $out, %g0, $out
+ srl $omask, %g4, $omask
+ srlx $len, 3, $len
+ movrz %g4, 0, $omask
+ prefetch [$out], 22
+
+ ldd [$key + 0x78], %f4 ! load key schedule
+ ldd [$key + 0x70], %f6
+ ldd [$key + 0x68], %f8
+ ldd [$key + 0x60], %f10
+ ldd [$key + 0x58], %f12
+ ldd [$key + 0x50], %f14
+ ldd [$key + 0x48], %f16
+ ldd [$key + 0x40], %f18
+ ldd [$key + 0x38], %f20
+ ldd [$key + 0x30], %f22
+ ldd [$key + 0x28], %f24
+ ldd [$key + 0x20], %f26
+ ldd [$key + 0x18], %f28
+ ldd [$key + 0x10], %f30
+ ldd [$key + 0x08], %f32
+ ldd [$key + 0x00], %f34
+
+.Ldes_cbc_dec_loop:
+ ldx [$inp + 0], %g4
+ brz,pt $ileft, 4f
+ nop
+
+ ldx [$inp + 8], %g5
+ sllx %g4, $ileft, %g4
+ srlx %g5, $iright, %g5
+ or %g5, %g4, %g4
+4:
+ movxtod %g4, %f0
+ prefetch [$inp + 8+63], 20
+ add $inp, 8, $inp
+ prefetch [$out + 63], 22
+
+ des_ip %f0, %f0
+ des_round %f4, %f6, %f0, %f0
+ des_round %f8, %f10, %f0, %f0
+ des_round %f12, %f14, %f0, %f0
+ des_round %f16, %f18, %f0, %f0
+ des_round %f20, %f22, %f0, %f0
+ des_round %f24, %f26, %f0, %f0
+ des_round %f28, %f30, %f0, %f0
+ des_round %f32, %f34, %f0, %f0
+ des_iip %f0, %f0
+
+ fxor %f2, %f0, %f0 ! ^= ivec
+ movxtod %g4, %f2
+
+ brnz,pn $omask, 2f
+ sub $len, 1, $len
+
+ std %f0, [$out + 0]
+ brnz,pt $len, .Ldes_cbc_dec_loop
+ add $out, 8, $out
+
+ st %f2, [$ivec + 0] ! write out ivec
+ retl
+ st %f3, [$ivec + 4]
+
+.align 16
+2: ldxa [$inp]0x82, %g4 ! avoid read-after-write hazard
+ ! and ~4x deterioration
+ ! in inp==out case
+ faligndata %f0, %f0, %f0 ! handle unaligned output
+
+ stda %f0, [$out + $omask]0xc0 ! partial store
+ add $out, 8, $out
+ orn %g0, $omask, $omask
+ stda %f0, [$out + $omask]0xc0 ! partial store
+
+ brnz,pt $len, .Ldes_cbc_dec_loop+4
+ orn %g0, $omask, $omask
+
+ st %f2, [$ivec + 0] ! write out ivec
+ retl
+ st %f3, [$ivec + 4]
+.type des_t4_cbc_decrypt,#function
+.size des_t4_cbc_decrypt,.-des_t4_cbc_decrypt
+___
+
+# One might wonder why does one have back-to-back des_iip/des_ip
+# pairs between EDE passes. Indeed, aren't they inverse of each other?
+# They almost are. Outcome of the pair is 32-bit words being swapped
+# in target register. Consider pair of des_iip/des_ip as a way to
+# perform the due swap, it's actually fastest way in this case.
+
+$code.=<<___;
+.globl des_t4_ede3_cbc_encrypt
+.align 32
+des_t4_ede3_cbc_encrypt:
+ cmp $len, 0
+ be,pn $::size_t_cc, .Lcbc_abort
+ nop
+ ld [$ivec + 0], %f0 ! load ivec
+ ld [$ivec + 4], %f1
+
+ and $inp, 7, $ileft
+ andn $inp, 7, $inp
+ sll $ileft, 3, $ileft
+ mov 0xff, $omask
+ prefetch [$inp], 20
+ prefetch [$inp + 63], 20
+ sub %g0, $ileft, $iright
+ and $out, 7, %g4
+ alignaddrl $out, %g0, $out
+ srl $omask, %g4, $omask
+ srlx $len, 3, $len
+ movrz %g4, 0, $omask
+ prefetch [$out], 22
+
+ ldd [$key + 0x00], %f4 ! load key schedule
+ ldd [$key + 0x08], %f6
+ ldd [$key + 0x10], %f8
+ ldd [$key + 0x18], %f10
+ ldd [$key + 0x20], %f12
+ ldd [$key + 0x28], %f14
+ ldd [$key + 0x30], %f16
+ ldd [$key + 0x38], %f18
+ ldd [$key + 0x40], %f20
+ ldd [$key + 0x48], %f22
+ ldd [$key + 0x50], %f24
+ ldd [$key + 0x58], %f26
+ ldd [$key + 0x60], %f28
+ ldd [$key + 0x68], %f30
+ ldd [$key + 0x70], %f32
+ ldd [$key + 0x78], %f34
+
+.Ldes_ede3_cbc_enc_loop:
+ ldx [$inp + 0], %g4
+ brz,pt $ileft, 4f
+ nop
+
+ ldx [$inp + 8], %g5
+ sllx %g4, $ileft, %g4
+ srlx %g5, $iright, %g5
+ or %g5, %g4, %g4
+4:
+ movxtod %g4, %f2
+ prefetch [$inp + 8+63], 20
+ add $inp, 8, $inp
+ fxor %f2, %f0, %f0 ! ^= ivec
+ prefetch [$out + 63], 22
+
+ des_ip %f0, %f0
+ des_round %f4, %f6, %f0, %f0
+ des_round %f8, %f10, %f0, %f0
+ des_round %f12, %f14, %f0, %f0
+ des_round %f16, %f18, %f0, %f0
+ ldd [$key + 0x100-0x08], %f36
+ ldd [$key + 0x100-0x10], %f38
+ des_round %f20, %f22, %f0, %f0
+ ldd [$key + 0x100-0x18], %f40
+ ldd [$key + 0x100-0x20], %f42
+ des_round %f24, %f26, %f0, %f0
+ ldd [$key + 0x100-0x28], %f44
+ ldd [$key + 0x100-0x30], %f46
+ des_round %f28, %f30, %f0, %f0
+ ldd [$key + 0x100-0x38], %f48
+ ldd [$key + 0x100-0x40], %f50
+ des_round %f32, %f34, %f0, %f0
+ ldd [$key + 0x100-0x48], %f52
+ ldd [$key + 0x100-0x50], %f54
+ des_iip %f0, %f0
+
+ ldd [$key + 0x100-0x58], %f56
+ ldd [$key + 0x100-0x60], %f58
+ des_ip %f0, %f0
+ ldd [$key + 0x100-0x68], %f60
+ ldd [$key + 0x100-0x70], %f62
+ des_round %f36, %f38, %f0, %f0
+ ldd [$key + 0x100-0x78], %f36
+ ldd [$key + 0x100-0x80], %f38
+ des_round %f40, %f42, %f0, %f0
+ des_round %f44, %f46, %f0, %f0
+ des_round %f48, %f50, %f0, %f0
+ ldd [$key + 0x100+0x00], %f40
+ ldd [$key + 0x100+0x08], %f42
+ des_round %f52, %f54, %f0, %f0
+ ldd [$key + 0x100+0x10], %f44
+ ldd [$key + 0x100+0x18], %f46
+ des_round %f56, %f58, %f0, %f0
+ ldd [$key + 0x100+0x20], %f48
+ ldd [$key + 0x100+0x28], %f50
+ des_round %f60, %f62, %f0, %f0
+ ldd [$key + 0x100+0x30], %f52
+ ldd [$key + 0x100+0x38], %f54
+ des_round %f36, %f38, %f0, %f0
+ ldd [$key + 0x100+0x40], %f56
+ ldd [$key + 0x100+0x48], %f58
+ des_iip %f0, %f0
+
+ ldd [$key + 0x100+0x50], %f60
+ ldd [$key + 0x100+0x58], %f62
+ des_ip %f0, %f0
+ ldd [$key + 0x100+0x60], %f36
+ ldd [$key + 0x100+0x68], %f38
+ des_round %f40, %f42, %f0, %f0
+ ldd [$key + 0x100+0x70], %f40
+ ldd [$key + 0x100+0x78], %f42
+ des_round %f44, %f46, %f0, %f0
+ des_round %f48, %f50, %f0, %f0
+ des_round %f52, %f54, %f0, %f0
+ des_round %f56, %f58, %f0, %f0
+ des_round %f60, %f62, %f0, %f0
+ des_round %f36, %f38, %f0, %f0
+ des_round %f40, %f42, %f0, %f0
+ des_iip %f0, %f0
+
+ brnz,pn $omask, 2f
+ sub $len, 1, $len
+
+ std %f0, [$out + 0]
+ brnz,pt $len, .Ldes_ede3_cbc_enc_loop
+ add $out, 8, $out
+
+ st %f0, [$ivec + 0] ! write out ivec
+ retl
+ st %f1, [$ivec + 4]
+
+.align 16
+2: ldxa [$inp]0x82, %g4 ! avoid read-after-write hazard
+ ! and ~2x deterioration
+ ! in inp==out case
+ faligndata %f0, %f0, %f2 ! handle unaligned output
+
+ stda %f2, [$out + $omask]0xc0 ! partial store
+ add $out, 8, $out
+ orn %g0, $omask, $omask
+ stda %f2, [$out + $omask]0xc0 ! partial store
+
+ brnz,pt $len, .Ldes_ede3_cbc_enc_loop+4
+ orn %g0, $omask, $omask
+
+ st %f0, [$ivec + 0] ! write out ivec
+ retl
+ st %f1, [$ivec + 4]
+.type des_t4_ede3_cbc_encrypt,#function
+.size des_t4_ede3_cbc_encrypt,.-des_t4_ede3_cbc_encrypt
+
+.globl des_t4_ede3_cbc_decrypt
+.align 32
+des_t4_ede3_cbc_decrypt:
+ cmp $len, 0
+ be,pn $::size_t_cc, .Lcbc_abort
+ nop
+ ld [$ivec + 0], %f2 ! load ivec
+ ld [$ivec + 4], %f3
+
+ and $inp, 7, $ileft
+ andn $inp, 7, $inp
+ sll $ileft, 3, $ileft
+ mov 0xff, $omask
+ prefetch [$inp], 20
+ prefetch [$inp + 63], 20
+ sub %g0, $ileft, $iright
+ and $out, 7, %g4
+ alignaddrl $out, %g0, $out
+ srl $omask, %g4, $omask
+ srlx $len, 3, $len
+ movrz %g4, 0, $omask
+ prefetch [$out], 22
+
+ ldd [$key + 0x100+0x78], %f4 ! load key schedule
+ ldd [$key + 0x100+0x70], %f6
+ ldd [$key + 0x100+0x68], %f8
+ ldd [$key + 0x100+0x60], %f10
+ ldd [$key + 0x100+0x58], %f12
+ ldd [$key + 0x100+0x50], %f14
+ ldd [$key + 0x100+0x48], %f16
+ ldd [$key + 0x100+0x40], %f18
+ ldd [$key + 0x100+0x38], %f20
+ ldd [$key + 0x100+0x30], %f22
+ ldd [$key + 0x100+0x28], %f24
+ ldd [$key + 0x100+0x20], %f26
+ ldd [$key + 0x100+0x18], %f28
+ ldd [$key + 0x100+0x10], %f30
+ ldd [$key + 0x100+0x08], %f32
+ ldd [$key + 0x100+0x00], %f34
+
+.Ldes_ede3_cbc_dec_loop:
+ ldx [$inp + 0], %g4
+ brz,pt $ileft, 4f
+ nop
+
+ ldx [$inp + 8], %g5
+ sllx %g4, $ileft, %g4
+ srlx %g5, $iright, %g5
+ or %g5, %g4, %g4
+4:
+ movxtod %g4, %f0
+ prefetch [$inp + 8+63], 20
+ add $inp, 8, $inp
+ prefetch [$out + 63], 22
+
+ des_ip %f0, %f0
+ des_round %f4, %f6, %f0, %f0
+ des_round %f8, %f10, %f0, %f0
+ des_round %f12, %f14, %f0, %f0
+ des_round %f16, %f18, %f0, %f0
+ ldd [$key + 0x80+0x00], %f36
+ ldd [$key + 0x80+0x08], %f38
+ des_round %f20, %f22, %f0, %f0
+ ldd [$key + 0x80+0x10], %f40
+ ldd [$key + 0x80+0x18], %f42
+ des_round %f24, %f26, %f0, %f0
+ ldd [$key + 0x80+0x20], %f44
+ ldd [$key + 0x80+0x28], %f46
+ des_round %f28, %f30, %f0, %f0
+ ldd [$key + 0x80+0x30], %f48
+ ldd [$key + 0x80+0x38], %f50
+ des_round %f32, %f34, %f0, %f0
+ ldd [$key + 0x80+0x40], %f52
+ ldd [$key + 0x80+0x48], %f54
+ des_iip %f0, %f0
+
+ ldd [$key + 0x80+0x50], %f56
+ ldd [$key + 0x80+0x58], %f58
+ des_ip %f0, %f0
+ ldd [$key + 0x80+0x60], %f60
+ ldd [$key + 0x80+0x68], %f62
+ des_round %f36, %f38, %f0, %f0
+ ldd [$key + 0x80+0x70], %f36
+ ldd [$key + 0x80+0x78], %f38
+ des_round %f40, %f42, %f0, %f0
+ des_round %f44, %f46, %f0, %f0
+ des_round %f48, %f50, %f0, %f0
+ ldd [$key + 0x80-0x08], %f40
+ ldd [$key + 0x80-0x10], %f42
+ des_round %f52, %f54, %f0, %f0
+ ldd [$key + 0x80-0x18], %f44
+ ldd [$key + 0x80-0x20], %f46
+ des_round %f56, %f58, %f0, %f0
+ ldd [$key + 0x80-0x28], %f48
+ ldd [$key + 0x80-0x30], %f50
+ des_round %f60, %f62, %f0, %f0
+ ldd [$key + 0x80-0x38], %f52
+ ldd [$key + 0x80-0x40], %f54
+ des_round %f36, %f38, %f0, %f0
+ ldd [$key + 0x80-0x48], %f56
+ ldd [$key + 0x80-0x50], %f58
+ des_iip %f0, %f0
+
+ ldd [$key + 0x80-0x58], %f60
+ ldd [$key + 0x80-0x60], %f62
+ des_ip %f0, %f0
+ ldd [$key + 0x80-0x68], %f36
+ ldd [$key + 0x80-0x70], %f38
+ des_round %f40, %f42, %f0, %f0
+ ldd [$key + 0x80-0x78], %f40
+ ldd [$key + 0x80-0x80], %f42
+ des_round %f44, %f46, %f0, %f0
+ des_round %f48, %f50, %f0, %f0
+ des_round %f52, %f54, %f0, %f0
+ des_round %f56, %f58, %f0, %f0
+ des_round %f60, %f62, %f0, %f0
+ des_round %f36, %f38, %f0, %f0
+ des_round %f40, %f42, %f0, %f0
+ des_iip %f0, %f0
+
+ fxor %f2, %f0, %f0 ! ^= ivec
+ movxtod %g4, %f2
+
+ brnz,pn $omask, 2f
+ sub $len, 1, $len
+
+ std %f0, [$out + 0]
+ brnz,pt $len, .Ldes_ede3_cbc_dec_loop
+ add $out, 8, $out
+
+ st %f2, [$ivec + 0] ! write out ivec
+ retl
+ st %f3, [$ivec + 4]
+
+.align 16
+2: ldxa [$inp]0x82, %g4 ! avoid read-after-write hazard
+ ! and ~3x deterioration
+ ! in inp==out case
+ faligndata %f0, %f0, %f0 ! handle unaligned output
+
+ stda %f0, [$out + $omask]0xc0 ! partial store
+ add $out, 8, $out
+ orn %g0, $omask, $omask
+ stda %f0, [$out + $omask]0xc0 ! partial store
+
+ brnz,pt $len, .Ldes_ede3_cbc_dec_loop+4
+ orn %g0, $omask, $omask
+
+ st %f2, [$ivec + 0] ! write out ivec
+ retl
+ st %f3, [$ivec + 4]
+.type des_t4_ede3_cbc_decrypt,#function
+.size des_t4_ede3_cbc_decrypt,.-des_t4_ede3_cbc_decrypt
+___
+}
+$code.=<<___;
+.asciz "DES for SPARC T4, David S. Miller, Andy Polyakov"
+.align 4
+___
+
+&emit_assembler();
+
+close STDOUT;
diff --git a/crypto/openssl/crypto/des/des_locl.h b/crypto/openssl/crypto/des/des_locl.h
index 1a8e41d..23ea9d3 100644
--- a/crypto/openssl/crypto/des/des_locl.h
+++ b/crypto/openssl/crypto/des/des_locl.h
@@ -162,8 +162,10 @@
} \
}
-# if (defined(OPENSSL_SYS_WIN32) && defined(_MSC_VER)) || defined(__ICC)
+# if (defined(OPENSSL_SYS_WIN32) && defined(_MSC_VER))
# define ROTATE(a,n) (_lrotr(a,n))
+# elif defined(__ICC)
+# define ROTATE(a,n) (_rotr(a,n))
# elif defined(__GNUC__) && __GNUC__>=2 && !defined(__STRICT_ANSI__) && !defined(OPENSSL_NO_ASM) && !defined(OPENSSL_NO_INLINE_ASM) && !defined(PEDANTIC)
# if defined(__i386) || defined(__i386__) || defined(__x86_64) || defined(__x86_64__)
# define ROTATE(a,n) ({ register unsigned int ret; \
diff --git a/crypto/openssl/crypto/des/read_pwd.c b/crypto/openssl/crypto/des/read_pwd.c
index 16ba0a9..514a706 100644
--- a/crypto/openssl/crypto/des/read_pwd.c
+++ b/crypto/openssl/crypto/des/read_pwd.c
@@ -172,7 +172,7 @@
# include <sys/ioctl.h>
#endif
-#if defined(OPENSSL_SYS_MSDOS) && !defined(__CYGWIN32__) && !defined(OPENSSL_SYS_WINCE)
+#if defined(OPENSSL_SYS_MSDOS) && !defined(OPENSSL_SYS_WINCE)
# include <conio.h>
# define fgets(a,b,c) noecho_fgets(a,b,c)
#endif
diff --git a/crypto/openssl/crypto/dh/Makefile b/crypto/openssl/crypto/dh/Makefile
index 6d574f4..46fa5ac 100644
--- a/crypto/openssl/crypto/dh/Makefile
+++ b/crypto/openssl/crypto/dh/Makefile
@@ -18,9 +18,9 @@ APPS=
LIB=$(TOP)/libcrypto.a
LIBSRC= dh_asn1.c dh_gen.c dh_key.c dh_lib.c dh_check.c dh_err.c dh_depr.c \
- dh_ameth.c dh_pmeth.c dh_prn.c
+ dh_ameth.c dh_pmeth.c dh_prn.c dh_rfc5114.c dh_kdf.c
LIBOBJ= dh_asn1.o dh_gen.o dh_key.o dh_lib.o dh_check.o dh_err.o dh_depr.o \
- dh_ameth.o dh_pmeth.o dh_prn.o
+ dh_ameth.o dh_pmeth.o dh_prn.o dh_rfc5114.o dh_kdf.o
SRC= $(LIBSRC)
@@ -80,13 +80,13 @@ clean:
dh_ameth.o: ../../e_os.h ../../include/openssl/asn1.h
dh_ameth.o: ../../include/openssl/bio.h ../../include/openssl/bn.h
-dh_ameth.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
-dh_ameth.o: ../../include/openssl/dh.h ../../include/openssl/e_os2.h
-dh_ameth.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
-dh_ameth.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
-dh_ameth.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h
-dh_ameth.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
-dh_ameth.o: ../../include/openssl/opensslconf.h
+dh_ameth.o: ../../include/openssl/buffer.h ../../include/openssl/cms.h
+dh_ameth.o: ../../include/openssl/crypto.h ../../include/openssl/dh.h
+dh_ameth.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
+dh_ameth.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
+dh_ameth.o: ../../include/openssl/err.h ../../include/openssl/evp.h
+dh_ameth.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
+dh_ameth.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
dh_ameth.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
dh_ameth.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
dh_ameth.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
@@ -134,6 +134,19 @@ dh_gen.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
dh_gen.o: ../../include/openssl/ossl_typ.h ../../include/openssl/safestack.h
dh_gen.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
dh_gen.o: ../cryptlib.h dh_gen.c
+dh_kdf.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h
+dh_kdf.o: ../../include/openssl/buffer.h ../../include/openssl/cms.h
+dh_kdf.o: ../../include/openssl/crypto.h ../../include/openssl/dh.h
+dh_kdf.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
+dh_kdf.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
+dh_kdf.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h
+dh_kdf.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
+dh_kdf.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
+dh_kdf.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h
+dh_kdf.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
+dh_kdf.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
+dh_kdf.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
+dh_kdf.o: dh_kdf.c
dh_key.o: ../../e_os.h ../../include/openssl/bio.h ../../include/openssl/bn.h
dh_key.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
dh_key.o: ../../include/openssl/dh.h ../../include/openssl/e_os2.h
@@ -160,11 +173,12 @@ dh_pmeth.o: ../../e_os.h ../../include/openssl/asn1.h
dh_pmeth.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h
dh_pmeth.o: ../../include/openssl/bn.h ../../include/openssl/buffer.h
dh_pmeth.o: ../../include/openssl/crypto.h ../../include/openssl/dh.h
-dh_pmeth.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
-dh_pmeth.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
-dh_pmeth.o: ../../include/openssl/err.h ../../include/openssl/evp.h
-dh_pmeth.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
-dh_pmeth.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
+dh_pmeth.o: ../../include/openssl/dsa.h ../../include/openssl/e_os2.h
+dh_pmeth.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
+dh_pmeth.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
+dh_pmeth.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h
+dh_pmeth.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
+dh_pmeth.o: ../../include/openssl/opensslconf.h
dh_pmeth.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
dh_pmeth.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
dh_pmeth.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
@@ -180,3 +194,11 @@ dh_prn.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
dh_prn.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
dh_prn.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h
dh_prn.o: ../../include/openssl/symhacks.h ../cryptlib.h dh_prn.c
+dh_rfc5114.o: ../../e_os.h ../../include/openssl/bio.h
+dh_rfc5114.o: ../../include/openssl/bn.h ../../include/openssl/buffer.h
+dh_rfc5114.o: ../../include/openssl/crypto.h ../../include/openssl/dh.h
+dh_rfc5114.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h
+dh_rfc5114.o: ../../include/openssl/lhash.h ../../include/openssl/opensslconf.h
+dh_rfc5114.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
+dh_rfc5114.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h
+dh_rfc5114.o: ../../include/openssl/symhacks.h ../cryptlib.h dh_rfc5114.c
diff --git a/crypto/openssl/crypto/dh/dh.h b/crypto/openssl/crypto/dh/dh.h
index 4cbaa97..0502f1a 100644
--- a/crypto/openssl/crypto/dh/dh.h
+++ b/crypto/openssl/crypto/dh/dh.h
@@ -167,6 +167,9 @@ struct dh_st {
# define DH_CHECK_P_NOT_SAFE_PRIME 0x02
# define DH_UNABLE_TO_CHECK_GENERATOR 0x04
# define DH_NOT_SUITABLE_GENERATOR 0x08
+# define DH_CHECK_Q_NOT_PRIME 0x10
+# define DH_CHECK_INVALID_Q_VALUE 0x20
+# define DH_CHECK_INVALID_J_VALUE 0x40
/* DH_check_pub_key error codes */
# define DH_CHECK_PUBKEY_TOO_SMALL 0x01
@@ -217,8 +220,11 @@ int DH_check(const DH *dh, int *codes);
int DH_check_pub_key(const DH *dh, const BIGNUM *pub_key, int *codes);
int DH_generate_key(DH *dh);
int DH_compute_key(unsigned char *key, const BIGNUM *pub_key, DH *dh);
+int DH_compute_key_padded(unsigned char *key, const BIGNUM *pub_key, DH *dh);
DH *d2i_DHparams(DH **a, const unsigned char **pp, long length);
int i2d_DHparams(const DH *a, unsigned char **pp);
+DH *d2i_DHxparams(DH **a, const unsigned char **pp, long length);
+int i2d_DHxparams(const DH *a, unsigned char **pp);
# ifndef OPENSSL_NO_FP_API
int DHparams_print_fp(FILE *fp, const DH *x);
# endif
@@ -228,16 +234,109 @@ int DHparams_print(BIO *bp, const DH *x);
int DHparams_print(char *bp, const DH *x);
# endif
+/* RFC 5114 parameters */
+DH *DH_get_1024_160(void);
+DH *DH_get_2048_224(void);
+DH *DH_get_2048_256(void);
+
+/* RFC2631 KDF */
+int DH_KDF_X9_42(unsigned char *out, size_t outlen,
+ const unsigned char *Z, size_t Zlen,
+ ASN1_OBJECT *key_oid,
+ const unsigned char *ukm, size_t ukmlen, const EVP_MD *md);
+
# define EVP_PKEY_CTX_set_dh_paramgen_prime_len(ctx, len) \
EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DH, EVP_PKEY_OP_PARAMGEN, \
EVP_PKEY_CTRL_DH_PARAMGEN_PRIME_LEN, len, NULL)
+# define EVP_PKEY_CTX_set_dh_paramgen_subprime_len(ctx, len) \
+ EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DH, EVP_PKEY_OP_PARAMGEN, \
+ EVP_PKEY_CTRL_DH_PARAMGEN_SUBPRIME_LEN, len, NULL)
+
+# define EVP_PKEY_CTX_set_dh_paramgen_type(ctx, typ) \
+ EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DH, EVP_PKEY_OP_PARAMGEN, \
+ EVP_PKEY_CTRL_DH_PARAMGEN_TYPE, typ, NULL)
+
# define EVP_PKEY_CTX_set_dh_paramgen_generator(ctx, gen) \
EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DH, EVP_PKEY_OP_PARAMGEN, \
EVP_PKEY_CTRL_DH_PARAMGEN_GENERATOR, gen, NULL)
+# define EVP_PKEY_CTX_set_dh_rfc5114(ctx, gen) \
+ EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, EVP_PKEY_OP_PARAMGEN, \
+ EVP_PKEY_CTRL_DH_RFC5114, gen, NULL)
+
+# define EVP_PKEY_CTX_set_dhx_rfc5114(ctx, gen) \
+ EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, EVP_PKEY_OP_PARAMGEN, \
+ EVP_PKEY_CTRL_DH_RFC5114, gen, NULL)
+
+# define EVP_PKEY_CTX_set_dh_kdf_type(ctx, kdf) \
+ EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, \
+ EVP_PKEY_OP_DERIVE, \
+ EVP_PKEY_CTRL_DH_KDF_TYPE, kdf, NULL)
+
+# define EVP_PKEY_CTX_get_dh_kdf_type(ctx) \
+ EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, \
+ EVP_PKEY_OP_DERIVE, \
+ EVP_PKEY_CTRL_DH_KDF_TYPE, -2, NULL)
+
+# define EVP_PKEY_CTX_set0_dh_kdf_oid(ctx, oid) \
+ EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, \
+ EVP_PKEY_OP_DERIVE, \
+ EVP_PKEY_CTRL_DH_KDF_OID, 0, (void *)oid)
+
+# define EVP_PKEY_CTX_get0_dh_kdf_oid(ctx, poid) \
+ EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, \
+ EVP_PKEY_OP_DERIVE, \
+ EVP_PKEY_CTRL_GET_DH_KDF_OID, 0, (void *)poid)
+
+# define EVP_PKEY_CTX_set_dh_kdf_md(ctx, md) \
+ EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, \
+ EVP_PKEY_OP_DERIVE, \
+ EVP_PKEY_CTRL_DH_KDF_MD, 0, (void *)md)
+
+# define EVP_PKEY_CTX_get_dh_kdf_md(ctx, pmd) \
+ EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, \
+ EVP_PKEY_OP_DERIVE, \
+ EVP_PKEY_CTRL_GET_DH_KDF_MD, 0, (void *)pmd)
+
+# define EVP_PKEY_CTX_set_dh_kdf_outlen(ctx, len) \
+ EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, \
+ EVP_PKEY_OP_DERIVE, \
+ EVP_PKEY_CTRL_DH_KDF_OUTLEN, len, NULL)
+
+# define EVP_PKEY_CTX_get_dh_kdf_outlen(ctx, plen) \
+ EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, \
+ EVP_PKEY_OP_DERIVE, \
+ EVP_PKEY_CTRL_GET_DH_KDF_OUTLEN, 0, (void *)plen)
+
+# define EVP_PKEY_CTX_set0_dh_kdf_ukm(ctx, p, plen) \
+ EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, \
+ EVP_PKEY_OP_DERIVE, \
+ EVP_PKEY_CTRL_DH_KDF_UKM, plen, (void *)p)
+
+# define EVP_PKEY_CTX_get0_dh_kdf_ukm(ctx, p) \
+ EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_DHX, \
+ EVP_PKEY_OP_DERIVE, \
+ EVP_PKEY_CTRL_GET_DH_KDF_UKM, 0, (void *)p)
+
# define EVP_PKEY_CTRL_DH_PARAMGEN_PRIME_LEN (EVP_PKEY_ALG_CTRL + 1)
# define EVP_PKEY_CTRL_DH_PARAMGEN_GENERATOR (EVP_PKEY_ALG_CTRL + 2)
+# define EVP_PKEY_CTRL_DH_RFC5114 (EVP_PKEY_ALG_CTRL + 3)
+# define EVP_PKEY_CTRL_DH_PARAMGEN_SUBPRIME_LEN (EVP_PKEY_ALG_CTRL + 4)
+# define EVP_PKEY_CTRL_DH_PARAMGEN_TYPE (EVP_PKEY_ALG_CTRL + 5)
+# define EVP_PKEY_CTRL_DH_KDF_TYPE (EVP_PKEY_ALG_CTRL + 6)
+# define EVP_PKEY_CTRL_DH_KDF_MD (EVP_PKEY_ALG_CTRL + 7)
+# define EVP_PKEY_CTRL_GET_DH_KDF_MD (EVP_PKEY_ALG_CTRL + 8)
+# define EVP_PKEY_CTRL_DH_KDF_OUTLEN (EVP_PKEY_ALG_CTRL + 9)
+# define EVP_PKEY_CTRL_GET_DH_KDF_OUTLEN (EVP_PKEY_ALG_CTRL + 10)
+# define EVP_PKEY_CTRL_DH_KDF_UKM (EVP_PKEY_ALG_CTRL + 11)
+# define EVP_PKEY_CTRL_GET_DH_KDF_UKM (EVP_PKEY_ALG_CTRL + 12)
+# define EVP_PKEY_CTRL_DH_KDF_OID (EVP_PKEY_ALG_CTRL + 13)
+# define EVP_PKEY_CTRL_GET_DH_KDF_OID (EVP_PKEY_ALG_CTRL + 14)
+
+/* KDF types */
+# define EVP_PKEY_DH_KDF_NONE 1
+# define EVP_PKEY_DH_KDF_X9_42 2
/* BEGIN ERROR CODES */
/*
@@ -252,6 +351,9 @@ void ERR_load_DH_strings(void);
# define DH_F_COMPUTE_KEY 102
# define DH_F_DHPARAMS_PRINT_FP 101
# define DH_F_DH_BUILTIN_GENPARAMS 106
+# define DH_F_DH_CMS_DECRYPT 117
+# define DH_F_DH_CMS_SET_PEERKEY 118
+# define DH_F_DH_CMS_SET_SHARED_INFO 119
# define DH_F_DH_COMPUTE_KEY 114
# define DH_F_DH_GENERATE_KEY 115
# define DH_F_DH_GENERATE_PARAMETERS_EX 116
@@ -273,6 +375,7 @@ void ERR_load_DH_strings(void);
# define DH_R_BN_ERROR 106
# define DH_R_DECODE_ERROR 104
# define DH_R_INVALID_PUBKEY 102
+# define DH_R_KDF_PARAMETER_ERROR 112
# define DH_R_KEYS_NOT_SET 108
# define DH_R_KEY_SIZE_TOO_SMALL 110
# define DH_R_MODULUS_TOO_LARGE 103
@@ -280,6 +383,8 @@ void ERR_load_DH_strings(void);
# define DH_R_NO_PARAMETERS_SET 107
# define DH_R_NO_PRIVATE_VALUE 100
# define DH_R_PARAMETER_ENCODING_ERROR 105
+# define DH_R_PEER_KEY_ERROR 113
+# define DH_R_SHARED_INFO_ERROR 114
#ifdef __cplusplus
}
diff --git a/crypto/openssl/crypto/dh/dh_ameth.c b/crypto/openssl/crypto/dh/dh_ameth.c
index 873eb2e..ac72468 100644
--- a/crypto/openssl/crypto/dh/dh_ameth.c
+++ b/crypto/openssl/crypto/dh/dh_ameth.c
@@ -63,6 +63,31 @@
#include <openssl/dh.h>
#include <openssl/bn.h>
#include "asn1_locl.h"
+#ifndef OPENSSL_NO_CMS
+# include <openssl/cms.h>
+#endif
+
+extern const EVP_PKEY_ASN1_METHOD dhx_asn1_meth;
+
+/*
+ * i2d/d2i like DH parameter functions which use the appropriate routine for
+ * PKCS#3 DH or X9.42 DH.
+ */
+
+static DH *d2i_dhp(const EVP_PKEY *pkey, const unsigned char **pp,
+ long length)
+{
+ if (pkey->ameth == &dhx_asn1_meth)
+ return d2i_DHxparams(NULL, pp, length);
+ return d2i_DHparams(NULL, pp, length);
+}
+
+static int i2d_dhp(const EVP_PKEY *pkey, const DH *a, unsigned char **pp)
+{
+ if (pkey->ameth == &dhx_asn1_meth)
+ return i2d_DHxparams(a, pp);
+ return i2d_DHparams(a, pp);
+}
static void int_dh_free(EVP_PKEY *pkey)
{
@@ -94,7 +119,7 @@ static int dh_pub_decode(EVP_PKEY *pkey, X509_PUBKEY *pubkey)
pm = pstr->data;
pmlen = pstr->length;
- if (!(dh = d2i_DHparams(NULL, &pm, pmlen))) {
+ if (!(dh = d2i_dhp(pkey, &pm, pmlen))) {
DHerr(DH_F_DH_PUB_DECODE, DH_R_DECODE_ERROR);
goto err;
}
@@ -111,7 +136,7 @@ static int dh_pub_decode(EVP_PKEY *pkey, X509_PUBKEY *pubkey)
}
ASN1_INTEGER_free(public_key);
- EVP_PKEY_assign_DH(pkey, dh);
+ EVP_PKEY_assign(pkey, pkey->ameth->pkey_id, dh);
return 1;
err:
@@ -139,7 +164,7 @@ static int dh_pub_encode(X509_PUBKEY *pk, const EVP_PKEY *pkey)
DHerr(DH_F_DH_PUB_ENCODE, ERR_R_MALLOC_FAILURE);
goto err;
}
- str->length = i2d_DHparams(dh, &str->data);
+ str->length = i2d_dhp(pkey, dh, &str->data);
if (str->length <= 0) {
DHerr(DH_F_DH_PUB_ENCODE, ERR_R_MALLOC_FAILURE);
goto err;
@@ -159,7 +184,7 @@ static int dh_pub_encode(X509_PUBKEY *pk, const EVP_PKEY *pkey)
goto err;
}
- if (X509_PUBKEY_set0_param(pk, OBJ_nid2obj(EVP_PKEY_DH),
+ if (X509_PUBKEY_set0_param(pk, OBJ_nid2obj(pkey->ameth->pkey_id),
ptype, str, penc, penclen))
return 1;
@@ -204,7 +229,7 @@ static int dh_priv_decode(EVP_PKEY *pkey, PKCS8_PRIV_KEY_INFO *p8)
pstr = pval;
pm = pstr->data;
pmlen = pstr->length;
- if (!(dh = d2i_DHparams(NULL, &pm, pmlen)))
+ if (!(dh = d2i_dhp(pkey, &pm, pmlen)))
goto decerr;
/* We have parameters now set private key */
if (!(dh->priv_key = ASN1_INTEGER_to_BN(privkey, NULL))) {
@@ -215,7 +240,7 @@ static int dh_priv_decode(EVP_PKEY *pkey, PKCS8_PRIV_KEY_INFO *p8)
if (!DH_generate_key(dh))
goto dherr;
- EVP_PKEY_assign_DH(pkey, dh);
+ EVP_PKEY_assign(pkey, pkey->ameth->pkey_id, dh);
ASN1_STRING_clear_free(privkey);
@@ -243,7 +268,7 @@ static int dh_priv_encode(PKCS8_PRIV_KEY_INFO *p8, const EVP_PKEY *pkey)
goto err;
}
- params->length = i2d_DHparams(pkey->pkey.dh, &params->data);
+ params->length = i2d_dhp(pkey, pkey->pkey.dh, &params->data);
if (params->length <= 0) {
DHerr(DH_F_DH_PRIV_ENCODE, ERR_R_MALLOC_FAILURE);
goto err;
@@ -263,7 +288,7 @@ static int dh_priv_encode(PKCS8_PRIV_KEY_INFO *p8, const EVP_PKEY *pkey)
ASN1_STRING_clear_free(prkey);
prkey = NULL;
- if (!PKCS8_pkey_set0(p8, OBJ_nid2obj(NID_dhKeyAgreement), 0,
+ if (!PKCS8_pkey_set0(p8, OBJ_nid2obj(pkey->ameth->pkey_id), 0,
V_ASN1_SEQUENCE, params, dp, dplen))
goto err;
@@ -292,17 +317,17 @@ static int dh_param_decode(EVP_PKEY *pkey,
const unsigned char **pder, int derlen)
{
DH *dh;
- if (!(dh = d2i_DHparams(NULL, pder, derlen))) {
+ if (!(dh = d2i_dhp(pkey, pder, derlen))) {
DHerr(DH_F_DH_PARAM_DECODE, ERR_R_DH_LIB);
return 0;
}
- EVP_PKEY_assign_DH(pkey, dh);
+ EVP_PKEY_assign(pkey, pkey->ameth->pkey_id, dh);
return 1;
}
static int dh_param_encode(const EVP_PKEY *pkey, unsigned char **pder)
{
- return i2d_DHparams(pkey->pkey.dh, pder);
+ return i2d_dhp(pkey, pkey->pkey.dh, pder);
}
static int do_dh_print(BIO *bp, const DH *x, int indent,
@@ -334,15 +359,18 @@ static int do_dh_print(BIO *bp, const DH *x, int indent,
}
update_buflen(x->g, &buf_len);
+ update_buflen(x->q, &buf_len);
+ update_buflen(x->j, &buf_len);
+ update_buflen(x->counter, &buf_len);
update_buflen(pub_key, &buf_len);
update_buflen(priv_key, &buf_len);
if (ptype == 2)
- ktype = "PKCS#3 DH Private-Key";
+ ktype = "DH Private-Key";
else if (ptype == 1)
- ktype = "PKCS#3 DH Public-Key";
+ ktype = "DH Public-Key";
else
- ktype = "PKCS#3 DH Parameters";
+ ktype = "DH Parameters";
m = OPENSSL_malloc(buf_len + 10);
if (m == NULL) {
@@ -364,6 +392,29 @@ static int do_dh_print(BIO *bp, const DH *x, int indent,
goto err;
if (!ASN1_bn_print(bp, "generator:", x->g, m, indent))
goto err;
+ if (x->q && !ASN1_bn_print(bp, "subgroup order:", x->q, m, indent))
+ goto err;
+ if (x->j && !ASN1_bn_print(bp, "subgroup factor:", x->j, m, indent))
+ goto err;
+ if (x->seed) {
+ int i;
+ BIO_indent(bp, indent, 128);
+ BIO_puts(bp, "seed:");
+ for (i = 0; i < x->seedlen; i++) {
+ if ((i % 15) == 0) {
+ if (BIO_puts(bp, "\n") <= 0
+ || !BIO_indent(bp, indent + 4, 128))
+ goto err;
+ }
+ if (BIO_printf(bp, "%02x%s", x->seed[i],
+ ((i + 1) == x->seedlen) ? "" : ":") <= 0)
+ goto err;
+ }
+ if (BIO_write(bp, "\n", 1) <= 0)
+ return (0);
+ }
+ if (x->counter && !ASN1_bn_print(bp, "counter:", x->counter, m, indent))
+ goto err;
if (x->length != 0) {
BIO_indent(bp, indent, 128);
if (BIO_printf(bp, "recommended-private-length: %d bits\n",
@@ -396,29 +447,76 @@ static int dh_cmp_parameters(const EVP_PKEY *a, const EVP_PKEY *b)
if (BN_cmp(a->pkey.dh->p, b->pkey.dh->p) ||
BN_cmp(a->pkey.dh->g, b->pkey.dh->g))
return 0;
- else
- return 1;
+ else if (a->ameth == &dhx_asn1_meth) {
+ if (BN_cmp(a->pkey.dh->q, b->pkey.dh->q))
+ return 0;
+ }
+ return 1;
}
-static int dh_copy_parameters(EVP_PKEY *to, const EVP_PKEY *from)
+static int int_dh_bn_cpy(BIGNUM **dst, const BIGNUM *src)
{
BIGNUM *a;
+ if (src) {
+ a = BN_dup(src);
+ if (!a)
+ return 0;
+ } else
+ a = NULL;
+ if (*dst)
+ BN_free(*dst);
+ *dst = a;
+ return 1;
+}
- if ((a = BN_dup(from->pkey.dh->p)) == NULL)
+static int int_dh_param_copy(DH *to, const DH *from, int is_x942)
+{
+ if (is_x942 == -1)
+ is_x942 = ! !from->q;
+ if (!int_dh_bn_cpy(&to->p, from->p))
return 0;
- if (to->pkey.dh->p != NULL)
- BN_free(to->pkey.dh->p);
- to->pkey.dh->p = a;
-
- if ((a = BN_dup(from->pkey.dh->g)) == NULL)
+ if (!int_dh_bn_cpy(&to->g, from->g))
return 0;
- if (to->pkey.dh->g != NULL)
- BN_free(to->pkey.dh->g);
- to->pkey.dh->g = a;
-
+ if (is_x942) {
+ if (!int_dh_bn_cpy(&to->q, from->q))
+ return 0;
+ if (!int_dh_bn_cpy(&to->j, from->j))
+ return 0;
+ if (to->seed) {
+ OPENSSL_free(to->seed);
+ to->seed = NULL;
+ to->seedlen = 0;
+ }
+ if (from->seed) {
+ to->seed = BUF_memdup(from->seed, from->seedlen);
+ if (!to->seed)
+ return 0;
+ to->seedlen = from->seedlen;
+ }
+ } else
+ to->length = from->length;
return 1;
}
+DH *DHparams_dup(DH *dh)
+{
+ DH *ret;
+ ret = DH_new();
+ if (!ret)
+ return NULL;
+ if (!int_dh_param_copy(ret, dh, -1)) {
+ DH_free(ret);
+ return NULL;
+ }
+ return ret;
+}
+
+static int dh_copy_parameters(EVP_PKEY *to, const EVP_PKEY *from)
+{
+ return int_dh_param_copy(to->pkey.dh, from->pkey.dh,
+ from->ameth == &dhx_asn1_meth);
+}
+
static int dh_missing_parameters(const EVP_PKEY *a)
{
if (!a->pkey.dh->p || !a->pkey.dh->g)
@@ -459,6 +557,33 @@ int DHparams_print(BIO *bp, const DH *x)
return do_dh_print(bp, x, 4, NULL, 0);
}
+#ifndef OPENSSL_NO_CMS
+static int dh_cms_decrypt(CMS_RecipientInfo *ri);
+static int dh_cms_encrypt(CMS_RecipientInfo *ri);
+#endif
+
+static int dh_pkey_ctrl(EVP_PKEY *pkey, int op, long arg1, void *arg2)
+{
+ switch (op) {
+#ifndef OPENSSL_NO_CMS
+
+ case ASN1_PKEY_CTRL_CMS_ENVELOPE:
+ if (arg1 == 1)
+ return dh_cms_decrypt(arg2);
+ else if (arg1 == 0)
+ return dh_cms_encrypt(arg2);
+ return -2;
+
+ case ASN1_PKEY_CTRL_CMS_RI_TYPE:
+ *(int *)arg2 = CMS_RECIPINFO_AGREE;
+ return 1;
+#endif
+ default:
+ return -2;
+ }
+
+}
+
const EVP_PKEY_ASN1_METHOD dh_asn1_meth = {
EVP_PKEY_DH,
EVP_PKEY_DH,
@@ -490,3 +615,343 @@ const EVP_PKEY_ASN1_METHOD dh_asn1_meth = {
int_dh_free,
0
};
+
+const EVP_PKEY_ASN1_METHOD dhx_asn1_meth = {
+ EVP_PKEY_DHX,
+ EVP_PKEY_DHX,
+ 0,
+
+ "X9.42 DH",
+ "OpenSSL X9.42 DH method",
+
+ dh_pub_decode,
+ dh_pub_encode,
+ dh_pub_cmp,
+ dh_public_print,
+
+ dh_priv_decode,
+ dh_priv_encode,
+ dh_private_print,
+
+ int_dh_size,
+ dh_bits,
+
+ dh_param_decode,
+ dh_param_encode,
+ dh_missing_parameters,
+ dh_copy_parameters,
+ dh_cmp_parameters,
+ dh_param_print,
+ 0,
+
+ int_dh_free,
+ dh_pkey_ctrl
+};
+
+#ifndef OPENSSL_NO_CMS
+
+static int dh_cms_set_peerkey(EVP_PKEY_CTX *pctx,
+ X509_ALGOR *alg, ASN1_BIT_STRING *pubkey)
+{
+ ASN1_OBJECT *aoid;
+ int atype;
+ void *aval;
+ ASN1_INTEGER *public_key = NULL;
+ int rv = 0;
+ EVP_PKEY *pkpeer = NULL, *pk = NULL;
+ DH *dhpeer = NULL;
+ const unsigned char *p;
+ int plen;
+
+ X509_ALGOR_get0(&aoid, &atype, &aval, alg);
+ if (OBJ_obj2nid(aoid) != NID_dhpublicnumber)
+ goto err;
+ /* Only absent parameters allowed in RFC XXXX */
+ if (atype != V_ASN1_UNDEF && atype == V_ASN1_NULL)
+ goto err;
+
+ pk = EVP_PKEY_CTX_get0_pkey(pctx);
+ if (!pk)
+ goto err;
+ if (pk->type != EVP_PKEY_DHX)
+ goto err;
+ /* Get parameters from parent key */
+ dhpeer = DHparams_dup(pk->pkey.dh);
+ /* We have parameters now set public key */
+ plen = ASN1_STRING_length(pubkey);
+ p = ASN1_STRING_data(pubkey);
+ if (!p || !plen)
+ goto err;
+
+ if (!(public_key = d2i_ASN1_INTEGER(NULL, &p, plen))) {
+ DHerr(DH_F_DH_CMS_SET_PEERKEY, DH_R_DECODE_ERROR);
+ goto err;
+ }
+
+ /* We have parameters now set public key */
+ if (!(dhpeer->pub_key = ASN1_INTEGER_to_BN(public_key, NULL))) {
+ DHerr(DH_F_DH_CMS_SET_PEERKEY, DH_R_BN_DECODE_ERROR);
+ goto err;
+ }
+
+ pkpeer = EVP_PKEY_new();
+ if (!pkpeer)
+ goto err;
+ EVP_PKEY_assign(pkpeer, pk->ameth->pkey_id, dhpeer);
+ dhpeer = NULL;
+ if (EVP_PKEY_derive_set_peer(pctx, pkpeer) > 0)
+ rv = 1;
+ err:
+ if (public_key)
+ ASN1_INTEGER_free(public_key);
+ if (pkpeer)
+ EVP_PKEY_free(pkpeer);
+ if (dhpeer)
+ DH_free(dhpeer);
+ return rv;
+}
+
+static int dh_cms_set_shared_info(EVP_PKEY_CTX *pctx, CMS_RecipientInfo *ri)
+{
+ int rv = 0;
+
+ X509_ALGOR *alg, *kekalg = NULL;
+ ASN1_OCTET_STRING *ukm;
+ const unsigned char *p;
+ unsigned char *dukm = NULL;
+ size_t dukmlen = 0;
+ int keylen, plen;
+ const EVP_CIPHER *kekcipher;
+ EVP_CIPHER_CTX *kekctx;
+
+ if (!CMS_RecipientInfo_kari_get0_alg(ri, &alg, &ukm))
+ goto err;
+
+ /*
+ * For DH we only have one OID permissible. If ever any more get defined
+ * we will need something cleverer.
+ */
+ if (OBJ_obj2nid(alg->algorithm) != NID_id_smime_alg_ESDH) {
+ DHerr(DH_F_DH_CMS_SET_SHARED_INFO, DH_R_KDF_PARAMETER_ERROR);
+ goto err;
+ }
+
+ if (EVP_PKEY_CTX_set_dh_kdf_type(pctx, EVP_PKEY_DH_KDF_X9_42) <= 0)
+ goto err;
+
+ if (EVP_PKEY_CTX_set_dh_kdf_md(pctx, EVP_sha1()) <= 0)
+ goto err;
+
+ if (alg->parameter->type != V_ASN1_SEQUENCE)
+ goto err;
+
+ p = alg->parameter->value.sequence->data;
+ plen = alg->parameter->value.sequence->length;
+ kekalg = d2i_X509_ALGOR(NULL, &p, plen);
+ if (!kekalg)
+ goto err;
+ kekctx = CMS_RecipientInfo_kari_get0_ctx(ri);
+ if (!kekctx)
+ goto err;
+ kekcipher = EVP_get_cipherbyobj(kekalg->algorithm);
+ if (!kekcipher || EVP_CIPHER_mode(kekcipher) != EVP_CIPH_WRAP_MODE)
+ goto err;
+ if (!EVP_EncryptInit_ex(kekctx, kekcipher, NULL, NULL, NULL))
+ goto err;
+ if (EVP_CIPHER_asn1_to_param(kekctx, kekalg->parameter) <= 0)
+ goto err;
+
+ keylen = EVP_CIPHER_CTX_key_length(kekctx);
+ if (EVP_PKEY_CTX_set_dh_kdf_outlen(pctx, keylen) <= 0)
+ goto err;
+ /* Use OBJ_nid2obj to ensure we use built in OID that isn't freed */
+ if (EVP_PKEY_CTX_set0_dh_kdf_oid(pctx,
+ OBJ_nid2obj(EVP_CIPHER_type(kekcipher)))
+ <= 0)
+ goto err;
+
+ if (ukm) {
+ dukmlen = ASN1_STRING_length(ukm);
+ dukm = BUF_memdup(ASN1_STRING_data(ukm), dukmlen);
+ if (!dukm)
+ goto err;
+ }
+
+ if (EVP_PKEY_CTX_set0_dh_kdf_ukm(pctx, dukm, dukmlen) <= 0)
+ goto err;
+ dukm = NULL;
+
+ rv = 1;
+ err:
+ if (kekalg)
+ X509_ALGOR_free(kekalg);
+ if (dukm)
+ OPENSSL_free(dukm);
+ return rv;
+}
+
+static int dh_cms_decrypt(CMS_RecipientInfo *ri)
+{
+ EVP_PKEY_CTX *pctx;
+ pctx = CMS_RecipientInfo_get0_pkey_ctx(ri);
+ if (!pctx)
+ return 0;
+ /* See if we need to set peer key */
+ if (!EVP_PKEY_CTX_get0_peerkey(pctx)) {
+ X509_ALGOR *alg;
+ ASN1_BIT_STRING *pubkey;
+ if (!CMS_RecipientInfo_kari_get0_orig_id(ri, &alg, &pubkey,
+ NULL, NULL, NULL))
+ return 0;
+ if (!alg || !pubkey)
+ return 0;
+ if (!dh_cms_set_peerkey(pctx, alg, pubkey)) {
+ DHerr(DH_F_DH_CMS_DECRYPT, DH_R_PEER_KEY_ERROR);
+ return 0;
+ }
+ }
+ /* Set DH derivation parameters and initialise unwrap context */
+ if (!dh_cms_set_shared_info(pctx, ri)) {
+ DHerr(DH_F_DH_CMS_DECRYPT, DH_R_SHARED_INFO_ERROR);
+ return 0;
+ }
+ return 1;
+}
+
+static int dh_cms_encrypt(CMS_RecipientInfo *ri)
+{
+ EVP_PKEY_CTX *pctx;
+ EVP_PKEY *pkey;
+ EVP_CIPHER_CTX *ctx;
+ int keylen;
+ X509_ALGOR *talg, *wrap_alg = NULL;
+ ASN1_OBJECT *aoid;
+ ASN1_BIT_STRING *pubkey;
+ ASN1_STRING *wrap_str;
+ ASN1_OCTET_STRING *ukm;
+ unsigned char *penc = NULL, *dukm = NULL;
+ int penclen;
+ size_t dukmlen = 0;
+ int rv = 0;
+ int kdf_type, wrap_nid;
+ const EVP_MD *kdf_md;
+ pctx = CMS_RecipientInfo_get0_pkey_ctx(ri);
+ if (!pctx)
+ return 0;
+ /* Get ephemeral key */
+ pkey = EVP_PKEY_CTX_get0_pkey(pctx);
+ if (!CMS_RecipientInfo_kari_get0_orig_id(ri, &talg, &pubkey,
+ NULL, NULL, NULL))
+ goto err;
+ X509_ALGOR_get0(&aoid, NULL, NULL, talg);
+ /* Is everything uninitialised? */
+ if (aoid == OBJ_nid2obj(NID_undef)) {
+ ASN1_INTEGER *pubk;
+ pubk = BN_to_ASN1_INTEGER(pkey->pkey.dh->pub_key, NULL);
+ if (!pubk)
+ goto err;
+ /* Set the key */
+
+ penclen = i2d_ASN1_INTEGER(pubk, &penc);
+ ASN1_INTEGER_free(pubk);
+ if (penclen <= 0)
+ goto err;
+ ASN1_STRING_set0(pubkey, penc, penclen);
+ pubkey->flags &= ~(ASN1_STRING_FLAG_BITS_LEFT | 0x07);
+ pubkey->flags |= ASN1_STRING_FLAG_BITS_LEFT;
+
+ penc = NULL;
+ X509_ALGOR_set0(talg, OBJ_nid2obj(NID_dhpublicnumber),
+ V_ASN1_UNDEF, NULL);
+ }
+
+ /* See if custom paraneters set */
+ kdf_type = EVP_PKEY_CTX_get_dh_kdf_type(pctx);
+ if (kdf_type <= 0)
+ goto err;
+ if (!EVP_PKEY_CTX_get_dh_kdf_md(pctx, &kdf_md))
+ goto err;
+
+ if (kdf_type == EVP_PKEY_DH_KDF_NONE) {
+ kdf_type = EVP_PKEY_DH_KDF_X9_42;
+ if (EVP_PKEY_CTX_set_dh_kdf_type(pctx, kdf_type) <= 0)
+ goto err;
+ } else if (kdf_type != EVP_PKEY_DH_KDF_X9_42)
+ /* Unknown KDF */
+ goto err;
+ if (kdf_md == NULL) {
+ /* Only SHA1 supported */
+ kdf_md = EVP_sha1();
+ if (EVP_PKEY_CTX_set_dh_kdf_md(pctx, kdf_md) <= 0)
+ goto err;
+ } else if (EVP_MD_type(kdf_md) != NID_sha1)
+ /* Unsupported digest */
+ goto err;
+
+ if (!CMS_RecipientInfo_kari_get0_alg(ri, &talg, &ukm))
+ goto err;
+
+ /* Get wrap NID */
+ ctx = CMS_RecipientInfo_kari_get0_ctx(ri);
+ wrap_nid = EVP_CIPHER_CTX_type(ctx);
+ if (EVP_PKEY_CTX_set0_dh_kdf_oid(pctx, OBJ_nid2obj(wrap_nid)) <= 0)
+ goto err;
+ keylen = EVP_CIPHER_CTX_key_length(ctx);
+
+ /* Package wrap algorithm in an AlgorithmIdentifier */
+
+ wrap_alg = X509_ALGOR_new();
+ if (!wrap_alg)
+ goto err;
+ wrap_alg->algorithm = OBJ_nid2obj(wrap_nid);
+ wrap_alg->parameter = ASN1_TYPE_new();
+ if (!wrap_alg->parameter)
+ goto err;
+ if (EVP_CIPHER_param_to_asn1(ctx, wrap_alg->parameter) <= 0)
+ goto err;
+ if (ASN1_TYPE_get(wrap_alg->parameter) == NID_undef) {
+ ASN1_TYPE_free(wrap_alg->parameter);
+ wrap_alg->parameter = NULL;
+ }
+
+ if (EVP_PKEY_CTX_set_dh_kdf_outlen(pctx, keylen) <= 0)
+ goto err;
+
+ if (ukm) {
+ dukmlen = ASN1_STRING_length(ukm);
+ dukm = BUF_memdup(ASN1_STRING_data(ukm), dukmlen);
+ if (!dukm)
+ goto err;
+ }
+
+ if (EVP_PKEY_CTX_set0_dh_kdf_ukm(pctx, dukm, dukmlen) <= 0)
+ goto err;
+ dukm = NULL;
+
+ /*
+ * Now need to wrap encoding of wrap AlgorithmIdentifier into parameter
+ * of another AlgorithmIdentifier.
+ */
+ penc = NULL;
+ penclen = i2d_X509_ALGOR(wrap_alg, &penc);
+ if (!penc || !penclen)
+ goto err;
+ wrap_str = ASN1_STRING_new();
+ if (!wrap_str)
+ goto err;
+ ASN1_STRING_set0(wrap_str, penc, penclen);
+ penc = NULL;
+ X509_ALGOR_set0(talg, OBJ_nid2obj(NID_id_smime_alg_ESDH),
+ V_ASN1_SEQUENCE, wrap_str);
+
+ rv = 1;
+
+ err:
+ if (penc)
+ OPENSSL_free(penc);
+ if (wrap_alg)
+ X509_ALGOR_free(wrap_alg);
+ return rv;
+}
+
+#endif
diff --git a/crypto/openssl/crypto/dh/dh_asn1.c b/crypto/openssl/crypto/dh/dh_asn1.c
index e6ee3cf..f470214 100644
--- a/crypto/openssl/crypto/dh/dh_asn1.c
+++ b/crypto/openssl/crypto/dh/dh_asn1.c
@@ -89,7 +89,101 @@ ASN1_SEQUENCE_cb(DHparams, dh_cb) = {
IMPLEMENT_ASN1_ENCODE_FUNCTIONS_const_fname(DH, DHparams, DHparams)
-DH *DHparams_dup(DH *dh)
+/*
+ * Internal only structures for handling X9.42 DH: this gets translated to or
+ * from a DH structure straight away.
+ */
+
+typedef struct {
+ ASN1_BIT_STRING *seed;
+ BIGNUM *counter;
+} int_dhvparams;
+
+typedef struct {
+ BIGNUM *p;
+ BIGNUM *q;
+ BIGNUM *g;
+ BIGNUM *j;
+ int_dhvparams *vparams;
+} int_dhx942_dh;
+
+ASN1_SEQUENCE(DHvparams) = {
+ ASN1_SIMPLE(int_dhvparams, seed, ASN1_BIT_STRING),
+ ASN1_SIMPLE(int_dhvparams, counter, BIGNUM)
+} ASN1_SEQUENCE_END_name(int_dhvparams, DHvparams)
+
+ASN1_SEQUENCE(DHxparams) = {
+ ASN1_SIMPLE(int_dhx942_dh, p, BIGNUM),
+ ASN1_SIMPLE(int_dhx942_dh, g, BIGNUM),
+ ASN1_SIMPLE(int_dhx942_dh, q, BIGNUM),
+ ASN1_OPT(int_dhx942_dh, j, BIGNUM),
+ ASN1_OPT(int_dhx942_dh, vparams, DHvparams),
+} ASN1_SEQUENCE_END_name(int_dhx942_dh, DHxparams)
+
+int_dhx942_dh *d2i_int_dhx(int_dhx942_dh **a,
+ const unsigned char **pp, long length);
+int i2d_int_dhx(const int_dhx942_dh *a, unsigned char **pp);
+
+IMPLEMENT_ASN1_ENCODE_FUNCTIONS_const_fname(int_dhx942_dh, DHxparams, int_dhx)
+
+/* Application leve function: read in X9.42 DH parameters into DH structure */
+
+DH *d2i_DHxparams(DH **a, const unsigned char **pp, long length)
{
- return ASN1_item_dup(ASN1_ITEM_rptr(DHparams), dh);
+ int_dhx942_dh *dhx = NULL;
+ DH *dh = NULL;
+ dh = DH_new();
+ if (!dh)
+ return NULL;
+ dhx = d2i_int_dhx(NULL, pp, length);
+ if (!dhx) {
+ DH_free(dh);
+ return NULL;
+ }
+
+ if (a) {
+ if (*a)
+ DH_free(*a);
+ *a = dh;
+ }
+
+ dh->p = dhx->p;
+ dh->q = dhx->q;
+ dh->g = dhx->g;
+ dh->j = dhx->j;
+
+ if (dhx->vparams) {
+ dh->seed = dhx->vparams->seed->data;
+ dh->seedlen = dhx->vparams->seed->length;
+ dh->counter = dhx->vparams->counter;
+ dhx->vparams->seed->data = NULL;
+ ASN1_BIT_STRING_free(dhx->vparams->seed);
+ OPENSSL_free(dhx->vparams);
+ dhx->vparams = NULL;
+ }
+
+ OPENSSL_free(dhx);
+ return dh;
+}
+
+int i2d_DHxparams(const DH *dh, unsigned char **pp)
+{
+ int_dhx942_dh dhx;
+ int_dhvparams dhv;
+ ASN1_BIT_STRING bs;
+ dhx.p = dh->p;
+ dhx.g = dh->g;
+ dhx.q = dh->q;
+ dhx.j = dh->j;
+ if (dh->counter && dh->seed && dh->seedlen > 0) {
+ bs.flags = ASN1_STRING_FLAG_BITS_LEFT;
+ bs.data = dh->seed;
+ bs.length = dh->seedlen;
+ dhv.seed = &bs;
+ dhv.counter = dh->counter;
+ dhx.vparams = &dhv;
+ } else
+ dhx.vparams = NULL;
+
+ return i2d_int_dhx(&dhx, pp);
}
diff --git a/crypto/openssl/crypto/dh/dh_check.c b/crypto/openssl/crypto/dh/dh_check.c
index c39ed97..347467c 100644
--- a/crypto/openssl/crypto/dh/dh_check.c
+++ b/crypto/openssl/crypto/dh/dh_check.c
@@ -76,17 +76,43 @@ int DH_check(const DH *dh, int *ret)
int ok = 0;
BN_CTX *ctx = NULL;
BN_ULONG l;
- BIGNUM *q = NULL;
+ BIGNUM *t1 = NULL, *t2 = NULL;
*ret = 0;
ctx = BN_CTX_new();
if (ctx == NULL)
goto err;
- q = BN_new();
- if (q == NULL)
+ BN_CTX_start(ctx);
+ t1 = BN_CTX_get(ctx);
+ if (t1 == NULL)
+ goto err;
+ t2 = BN_CTX_get(ctx);
+ if (t2 == NULL)
goto err;
- if (BN_is_word(dh->g, DH_GENERATOR_2)) {
+ if (dh->q) {
+ if (BN_cmp(dh->g, BN_value_one()) <= 0)
+ *ret |= DH_NOT_SUITABLE_GENERATOR;
+ else if (BN_cmp(dh->g, dh->p) >= 0)
+ *ret |= DH_NOT_SUITABLE_GENERATOR;
+ else {
+ /* Check g^q == 1 mod p */
+ if (!BN_mod_exp(t1, dh->g, dh->q, dh->p, ctx))
+ goto err;
+ if (!BN_is_one(t1))
+ *ret |= DH_NOT_SUITABLE_GENERATOR;
+ }
+ if (!BN_is_prime_ex(dh->q, BN_prime_checks, ctx, NULL))
+ *ret |= DH_CHECK_Q_NOT_PRIME;
+ /* Check p == 1 mod q i.e. q divides p - 1 */
+ if (!BN_div(t1, t2, dh->p, dh->q, ctx))
+ goto err;
+ if (!BN_is_one(t2))
+ *ret |= DH_CHECK_INVALID_Q_VALUE;
+ if (dh->j && BN_cmp(dh->j, t1))
+ *ret |= DH_CHECK_INVALID_J_VALUE;
+
+ } else if (BN_is_word(dh->g, DH_GENERATOR_2)) {
l = BN_mod_word(dh->p, 24);
if (l != 11)
*ret |= DH_NOT_SUITABLE_GENERATOR;
@@ -107,18 +133,18 @@ int DH_check(const DH *dh, int *ret)
if (!BN_is_prime_ex(dh->p, BN_prime_checks, ctx, NULL))
*ret |= DH_CHECK_P_NOT_PRIME;
- else {
- if (!BN_rshift1(q, dh->p))
+ else if (!dh->q) {
+ if (!BN_rshift1(t1, dh->p))
goto err;
- if (!BN_is_prime_ex(q, BN_prime_checks, ctx, NULL))
+ if (!BN_is_prime_ex(t1, BN_prime_checks, ctx, NULL))
*ret |= DH_CHECK_P_NOT_SAFE_PRIME;
}
ok = 1;
err:
- if (ctx != NULL)
+ if (ctx != NULL) {
+ BN_CTX_end(ctx);
BN_CTX_free(ctx);
- if (q != NULL)
- BN_free(q);
+ }
return (ok);
}
diff --git a/crypto/openssl/crypto/dh/dh_err.c b/crypto/openssl/crypto/dh/dh_err.c
index 6ed5eb7..b890cca 100644
--- a/crypto/openssl/crypto/dh/dh_err.c
+++ b/crypto/openssl/crypto/dh/dh_err.c
@@ -1,6 +1,6 @@
/* crypto/dh/dh_err.c */
/* ====================================================================
- * Copyright (c) 1999-2011 The OpenSSL Project. All rights reserved.
+ * Copyright (c) 1999-2013 The OpenSSL Project. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -73,6 +73,9 @@ static ERR_STRING_DATA DH_str_functs[] = {
{ERR_FUNC(DH_F_COMPUTE_KEY), "COMPUTE_KEY"},
{ERR_FUNC(DH_F_DHPARAMS_PRINT_FP), "DHparams_print_fp"},
{ERR_FUNC(DH_F_DH_BUILTIN_GENPARAMS), "DH_BUILTIN_GENPARAMS"},
+ {ERR_FUNC(DH_F_DH_CMS_DECRYPT), "DH_CMS_DECRYPT"},
+ {ERR_FUNC(DH_F_DH_CMS_SET_PEERKEY), "DH_CMS_SET_PEERKEY"},
+ {ERR_FUNC(DH_F_DH_CMS_SET_SHARED_INFO), "DH_CMS_SET_SHARED_INFO"},
{ERR_FUNC(DH_F_DH_COMPUTE_KEY), "DH_compute_key"},
{ERR_FUNC(DH_F_DH_GENERATE_KEY), "DH_generate_key"},
{ERR_FUNC(DH_F_DH_GENERATE_PARAMETERS_EX), "DH_generate_parameters_ex"},
@@ -96,6 +99,7 @@ static ERR_STRING_DATA DH_str_reasons[] = {
{ERR_REASON(DH_R_BN_ERROR), "bn error"},
{ERR_REASON(DH_R_DECODE_ERROR), "decode error"},
{ERR_REASON(DH_R_INVALID_PUBKEY), "invalid public key"},
+ {ERR_REASON(DH_R_KDF_PARAMETER_ERROR), "kdf parameter error"},
{ERR_REASON(DH_R_KEYS_NOT_SET), "keys not set"},
{ERR_REASON(DH_R_KEY_SIZE_TOO_SMALL), "key size too small"},
{ERR_REASON(DH_R_MODULUS_TOO_LARGE), "modulus too large"},
@@ -103,6 +107,8 @@ static ERR_STRING_DATA DH_str_reasons[] = {
{ERR_REASON(DH_R_NO_PARAMETERS_SET), "no parameters set"},
{ERR_REASON(DH_R_NO_PRIVATE_VALUE), "no private value"},
{ERR_REASON(DH_R_PARAMETER_ENCODING_ERROR), "parameter encoding error"},
+ {ERR_REASON(DH_R_PEER_KEY_ERROR), "peer key error"},
+ {ERR_REASON(DH_R_SHARED_INFO_ERROR), "shared info error"},
{0, NULL}
};
diff --git a/crypto/openssl/crypto/dh/dh_kdf.c b/crypto/openssl/crypto/dh/dh_kdf.c
new file mode 100644
index 0000000..a882cb2
--- /dev/null
+++ b/crypto/openssl/crypto/dh/dh_kdf.c
@@ -0,0 +1,187 @@
+/* crypto/dh/dh_kdf.c */
+/*
+ * Written by Stephen Henson for the OpenSSL project.
+ */
+/* ====================================================================
+ * Copyright (c) 2013 The OpenSSL Project. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * 3. All advertising materials mentioning features or use of this
+ * software must display the following acknowledgment:
+ * "This product includes software developed by the OpenSSL Project
+ * for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
+ *
+ * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
+ * endorse or promote products derived from this software without
+ * prior written permission. For written permission, please contact
+ * openssl-core@openssl.org.
+ *
+ * 5. Products derived from this software may not be called "OpenSSL"
+ * nor may "OpenSSL" appear in their names without prior written
+ * permission of the OpenSSL Project.
+ *
+ * 6. Redistributions of any form whatsoever must retain the following
+ * acknowledgment:
+ * "This product includes software developed by the OpenSSL Project
+ * for use in the OpenSSL Toolkit (http://www.openssl.org/)"
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
+ * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
+ * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+ * OF THE POSSIBILITY OF SUCH DAMAGE.
+ * ====================================================================
+ */
+
+#include <string.h>
+#include <openssl/dh.h>
+#include <openssl/evp.h>
+#include <openssl/asn1.h>
+#include <openssl/cms.h>
+
+/* Key derivation from X9.42/RFC2631 */
+
+#define DH_KDF_MAX (1L << 30)
+
+/* Skip past an ASN1 structure: for OBJECT skip content octets too */
+
+static int skip_asn1(unsigned char **pp, long *plen, int exptag)
+{
+ const unsigned char *q = *pp;
+ int i, tag, xclass;
+ long tmplen;
+ i = ASN1_get_object(&q, &tmplen, &tag, &xclass, *plen);
+ if (i & 0x80)
+ return 0;
+ if (tag != exptag || xclass != V_ASN1_UNIVERSAL)
+ return 0;
+ if (tag == V_ASN1_OBJECT)
+ q += tmplen;
+ *plen -= q - *pp;
+ *pp = (unsigned char *)q;
+ return 1;
+}
+
+/*
+ * Encode the DH shared info structure, return an offset to the counter value
+ * so we can update the structure without reencoding it.
+ */
+
+static int dh_sharedinfo_encode(unsigned char **pder, unsigned char **pctr,
+ ASN1_OBJECT *key_oid, size_t outlen,
+ const unsigned char *ukm, size_t ukmlen)
+{
+ unsigned char *p;
+ int derlen;
+ long tlen;
+ /* "magic" value to check offset is sane */
+ static unsigned char ctr[4] = { 0xF3, 0x17, 0x22, 0x53 };
+ X509_ALGOR atmp;
+ ASN1_OCTET_STRING ctr_oct, ukm_oct, *pukm_oct;
+ ASN1_TYPE ctr_atype;
+ if (ukmlen > DH_KDF_MAX || outlen > DH_KDF_MAX)
+ return 0;
+ ctr_oct.data = ctr;
+ ctr_oct.length = 4;
+ ctr_oct.flags = 0;
+ ctr_oct.type = V_ASN1_OCTET_STRING;
+ ctr_atype.type = V_ASN1_OCTET_STRING;
+ ctr_atype.value.octet_string = &ctr_oct;
+ atmp.algorithm = key_oid;
+ atmp.parameter = &ctr_atype;
+ if (ukm) {
+ ukm_oct.type = V_ASN1_OCTET_STRING;
+ ukm_oct.flags = 0;
+ ukm_oct.data = (unsigned char *)ukm;
+ ukm_oct.length = ukmlen;
+ pukm_oct = &ukm_oct;
+ } else
+ pukm_oct = NULL;
+ derlen = CMS_SharedInfo_encode(pder, &atmp, pukm_oct, outlen);
+ if (derlen <= 0)
+ return 0;
+ p = *pder;
+ tlen = derlen;
+ if (!skip_asn1(&p, &tlen, V_ASN1_SEQUENCE))
+ return 0;
+ if (!skip_asn1(&p, &tlen, V_ASN1_SEQUENCE))
+ return 0;
+ if (!skip_asn1(&p, &tlen, V_ASN1_OBJECT))
+ return 0;
+ if (!skip_asn1(&p, &tlen, V_ASN1_OCTET_STRING))
+ return 0;
+ if (CRYPTO_memcmp(p, ctr, 4))
+ return 0;
+ *pctr = p;
+ return derlen;
+}
+
+int DH_KDF_X9_42(unsigned char *out, size_t outlen,
+ const unsigned char *Z, size_t Zlen,
+ ASN1_OBJECT *key_oid,
+ const unsigned char *ukm, size_t ukmlen, const EVP_MD *md)
+{
+ EVP_MD_CTX mctx;
+ int rv = 0;
+ unsigned int i;
+ size_t mdlen;
+ unsigned char *der = NULL, *ctr;
+ int derlen;
+ if (Zlen > DH_KDF_MAX)
+ return 0;
+ mdlen = EVP_MD_size(md);
+ EVP_MD_CTX_init(&mctx);
+ derlen = dh_sharedinfo_encode(&der, &ctr, key_oid, outlen, ukm, ukmlen);
+ if (derlen == 0)
+ goto err;
+ for (i = 1;; i++) {
+ unsigned char mtmp[EVP_MAX_MD_SIZE];
+ EVP_DigestInit_ex(&mctx, md, NULL);
+ if (!EVP_DigestUpdate(&mctx, Z, Zlen))
+ goto err;
+ ctr[3] = i & 0xFF;
+ ctr[2] = (i >> 8) & 0xFF;
+ ctr[1] = (i >> 16) & 0xFF;
+ ctr[0] = (i >> 24) & 0xFF;
+ if (!EVP_DigestUpdate(&mctx, der, derlen))
+ goto err;
+ if (outlen >= mdlen) {
+ if (!EVP_DigestFinal(&mctx, out, NULL))
+ goto err;
+ outlen -= mdlen;
+ if (outlen == 0)
+ break;
+ out += mdlen;
+ } else {
+ if (!EVP_DigestFinal(&mctx, mtmp, NULL))
+ goto err;
+ memcpy(out, mtmp, outlen);
+ OPENSSL_cleanse(mtmp, mdlen);
+ break;
+ }
+ }
+ rv = 1;
+ err:
+ if (der)
+ OPENSSL_free(der);
+ EVP_MD_CTX_cleanup(&mctx);
+ return rv;
+}
diff --git a/crypto/openssl/crypto/dh/dh_key.c b/crypto/openssl/crypto/dh/dh_key.c
index 9e1d8e5..1d80fb2 100644
--- a/crypto/openssl/crypto/dh/dh_key.c
+++ b/crypto/openssl/crypto/dh/dh_key.c
@@ -94,6 +94,20 @@ int DH_compute_key(unsigned char *key, const BIGNUM *pub_key, DH *dh)
return dh->meth->compute_key(key, pub_key, dh);
}
+int DH_compute_key_padded(unsigned char *key, const BIGNUM *pub_key, DH *dh)
+{
+ int rv, pad;
+ rv = dh->meth->compute_key(key, pub_key, dh);
+ if (rv <= 0)
+ return rv;
+ pad = BN_num_bytes(dh->p) - rv;
+ if (pad > 0) {
+ memmove(key + pad, key, rv);
+ memset(key, 0, pad);
+ }
+ return rv + pad;
+}
+
static DH_METHOD dh_ossl = {
"OpenSSL DH Method",
generate_key,
diff --git a/crypto/openssl/crypto/dh/dh_pmeth.c b/crypto/openssl/crypto/dh/dh_pmeth.c
index 65bc388..b58e3fa 100644
--- a/crypto/openssl/crypto/dh/dh_pmeth.c
+++ b/crypto/openssl/crypto/dh/dh_pmeth.c
@@ -63,6 +63,10 @@
#include <openssl/evp.h>
#include <openssl/dh.h>
#include <openssl/bn.h>
+#ifndef OPENSSL_NO_DSA
+# include <openssl/dsa.h>
+#endif
+#include <openssl/objects.h>
#include "evp_locl.h"
/* DH pkey context structure */
@@ -72,9 +76,23 @@ typedef struct {
int prime_len;
int generator;
int use_dsa;
+ int subprime_len;
+ /* message digest used for parameter generation */
+ const EVP_MD *md;
+ int rfc5114_param;
/* Keygen callback info */
int gentmp[2];
- /* message digest */
+ /* KDF (if any) to use for DH */
+ char kdf_type;
+ /* OID to use for KDF */
+ ASN1_OBJECT *kdf_oid;
+ /* Message digest to use for key derivation */
+ const EVP_MD *kdf_md;
+ /* User key material */
+ unsigned char *kdf_ukm;
+ size_t kdf_ukmlen;
+ /* KDF output length */
+ size_t kdf_outlen;
} DH_PKEY_CTX;
static int pkey_dh_init(EVP_PKEY_CTX *ctx)
@@ -84,8 +102,18 @@ static int pkey_dh_init(EVP_PKEY_CTX *ctx)
if (!dctx)
return 0;
dctx->prime_len = 1024;
+ dctx->subprime_len = -1;
dctx->generator = 2;
dctx->use_dsa = 0;
+ dctx->md = NULL;
+ dctx->rfc5114_param = 0;
+
+ dctx->kdf_type = EVP_PKEY_DH_KDF_NONE;
+ dctx->kdf_oid = NULL;
+ dctx->kdf_md = NULL;
+ dctx->kdf_ukm = NULL;
+ dctx->kdf_ukmlen = 0;
+ dctx->kdf_outlen = 0;
ctx->data = dctx;
ctx->keygen_info = dctx->gentmp;
@@ -102,16 +130,35 @@ static int pkey_dh_copy(EVP_PKEY_CTX *dst, EVP_PKEY_CTX *src)
sctx = src->data;
dctx = dst->data;
dctx->prime_len = sctx->prime_len;
+ dctx->subprime_len = sctx->subprime_len;
dctx->generator = sctx->generator;
dctx->use_dsa = sctx->use_dsa;
+ dctx->md = sctx->md;
+ dctx->rfc5114_param = sctx->rfc5114_param;
+
+ dctx->kdf_type = sctx->kdf_type;
+ dctx->kdf_oid = OBJ_dup(sctx->kdf_oid);
+ if (!dctx->kdf_oid)
+ return 0;
+ dctx->kdf_md = sctx->kdf_md;
+ if (dctx->kdf_ukm) {
+ dctx->kdf_ukm = BUF_memdup(sctx->kdf_ukm, sctx->kdf_ukmlen);
+ dctx->kdf_ukmlen = sctx->kdf_ukmlen;
+ }
+ dctx->kdf_outlen = sctx->kdf_outlen;
return 1;
}
static void pkey_dh_cleanup(EVP_PKEY_CTX *ctx)
{
DH_PKEY_CTX *dctx = ctx->data;
- if (dctx)
+ if (dctx) {
+ if (dctx->kdf_ukm)
+ OPENSSL_free(dctx->kdf_ukm);
+ if (dctx->kdf_oid)
+ ASN1_OBJECT_free(dctx->kdf_oid);
OPENSSL_free(dctx);
+ }
}
static int pkey_dh_ctrl(EVP_PKEY_CTX *ctx, int type, int p1, void *p2)
@@ -124,14 +171,89 @@ static int pkey_dh_ctrl(EVP_PKEY_CTX *ctx, int type, int p1, void *p2)
dctx->prime_len = p1;
return 1;
+ case EVP_PKEY_CTRL_DH_PARAMGEN_SUBPRIME_LEN:
+ if (dctx->use_dsa == 0)
+ return -2;
+ dctx->subprime_len = p1;
+ return 1;
+
case EVP_PKEY_CTRL_DH_PARAMGEN_GENERATOR:
+ if (dctx->use_dsa)
+ return -2;
dctx->generator = p1;
return 1;
+ case EVP_PKEY_CTRL_DH_PARAMGEN_TYPE:
+#ifdef OPENSSL_NO_DSA
+ if (p1 != 0)
+ return -2;
+#else
+ if (p1 < 0 || p1 > 2)
+ return -2;
+#endif
+ dctx->use_dsa = p1;
+ return 1;
+
+ case EVP_PKEY_CTRL_DH_RFC5114:
+ if (p1 < 1 || p1 > 3)
+ return -2;
+ dctx->rfc5114_param = p1;
+ return 1;
+
case EVP_PKEY_CTRL_PEER_KEY:
/* Default behaviour is OK */
return 1;
+ case EVP_PKEY_CTRL_DH_KDF_TYPE:
+ if (p1 == -2)
+ return dctx->kdf_type;
+ if (p1 != EVP_PKEY_DH_KDF_NONE && p1 != EVP_PKEY_DH_KDF_X9_42)
+ return -2;
+ dctx->kdf_type = p1;
+ return 1;
+
+ case EVP_PKEY_CTRL_DH_KDF_MD:
+ dctx->kdf_md = p2;
+ return 1;
+
+ case EVP_PKEY_CTRL_GET_DH_KDF_MD:
+ *(const EVP_MD **)p2 = dctx->kdf_md;
+ return 1;
+
+ case EVP_PKEY_CTRL_DH_KDF_OUTLEN:
+ if (p1 <= 0)
+ return -2;
+ dctx->kdf_outlen = (size_t)p1;
+ return 1;
+
+ case EVP_PKEY_CTRL_GET_DH_KDF_OUTLEN:
+ *(int *)p2 = dctx->kdf_outlen;
+ return 1;
+
+ case EVP_PKEY_CTRL_DH_KDF_UKM:
+ if (dctx->kdf_ukm)
+ OPENSSL_free(dctx->kdf_ukm);
+ dctx->kdf_ukm = p2;
+ if (p2)
+ dctx->kdf_ukmlen = p1;
+ else
+ dctx->kdf_ukmlen = 0;
+ return 1;
+
+ case EVP_PKEY_CTRL_GET_DH_KDF_UKM:
+ *(unsigned char **)p2 = dctx->kdf_ukm;
+ return dctx->kdf_ukmlen;
+
+ case EVP_PKEY_CTRL_DH_KDF_OID:
+ if (dctx->kdf_oid)
+ ASN1_OBJECT_free(dctx->kdf_oid);
+ dctx->kdf_oid = p2;
+ return 1;
+
+ case EVP_PKEY_CTRL_GET_DH_KDF_OID:
+ *(ASN1_OBJECT **)p2 = dctx->kdf_oid;
+ return 1;
+
default:
return -2;
@@ -146,30 +268,139 @@ static int pkey_dh_ctrl_str(EVP_PKEY_CTX *ctx,
len = atoi(value);
return EVP_PKEY_CTX_set_dh_paramgen_prime_len(ctx, len);
}
+ if (!strcmp(type, "dh_rfc5114")) {
+ DH_PKEY_CTX *dctx = ctx->data;
+ int len;
+ len = atoi(value);
+ if (len < 0 || len > 3)
+ return -2;
+ dctx->rfc5114_param = len;
+ return 1;
+ }
if (!strcmp(type, "dh_paramgen_generator")) {
int len;
len = atoi(value);
return EVP_PKEY_CTX_set_dh_paramgen_generator(ctx, len);
}
+ if (!strcmp(type, "dh_paramgen_subprime_len")) {
+ int len;
+ len = atoi(value);
+ return EVP_PKEY_CTX_set_dh_paramgen_subprime_len(ctx, len);
+ }
+ if (!strcmp(type, "dh_paramgen_type")) {
+ int typ;
+ typ = atoi(value);
+ return EVP_PKEY_CTX_set_dh_paramgen_type(ctx, typ);
+ }
return -2;
}
+#ifndef OPENSSL_NO_DSA
+
+extern int dsa_builtin_paramgen(DSA *ret, size_t bits, size_t qbits,
+ const EVP_MD *evpmd,
+ const unsigned char *seed_in, size_t seed_len,
+ unsigned char *seed_out, int *counter_ret,
+ unsigned long *h_ret, BN_GENCB *cb);
+
+extern int dsa_builtin_paramgen2(DSA *ret, size_t L, size_t N,
+ const EVP_MD *evpmd,
+ const unsigned char *seed_in,
+ size_t seed_len, int idx,
+ unsigned char *seed_out, int *counter_ret,
+ unsigned long *h_ret, BN_GENCB *cb);
+
+static DSA *dsa_dh_generate(DH_PKEY_CTX *dctx, BN_GENCB *pcb)
+{
+ DSA *ret;
+ int rv = 0;
+ int prime_len = dctx->prime_len;
+ int subprime_len = dctx->subprime_len;
+ const EVP_MD *md = dctx->md;
+ if (dctx->use_dsa > 2)
+ return NULL;
+ ret = DSA_new();
+ if (!ret)
+ return NULL;
+ if (subprime_len == -1) {
+ if (prime_len >= 2048)
+ subprime_len = 256;
+ else
+ subprime_len = 160;
+ }
+ if (md == NULL) {
+ if (prime_len >= 2048)
+ md = EVP_sha256();
+ else
+ md = EVP_sha1();
+ }
+ if (dctx->use_dsa == 1)
+ rv = dsa_builtin_paramgen(ret, prime_len, subprime_len, md,
+ NULL, 0, NULL, NULL, NULL, pcb);
+ else if (dctx->use_dsa == 2)
+ rv = dsa_builtin_paramgen2(ret, prime_len, subprime_len, md,
+ NULL, 0, -1, NULL, NULL, NULL, pcb);
+ if (rv <= 0) {
+ DSA_free(ret);
+ return NULL;
+ }
+ return ret;
+}
+
+#endif
+
static int pkey_dh_paramgen(EVP_PKEY_CTX *ctx, EVP_PKEY *pkey)
{
DH *dh = NULL;
DH_PKEY_CTX *dctx = ctx->data;
BN_GENCB *pcb, cb;
int ret;
+ if (dctx->rfc5114_param) {
+ switch (dctx->rfc5114_param) {
+ case 1:
+ dh = DH_get_1024_160();
+ break;
+
+ case 2:
+ dh = DH_get_2048_224();
+ break;
+
+ case 3:
+ dh = DH_get_2048_256();
+ break;
+
+ default:
+ return -2;
+ }
+ EVP_PKEY_assign(pkey, EVP_PKEY_DHX, dh);
+ return 1;
+ }
+
if (ctx->pkey_gencb) {
pcb = &cb;
evp_pkey_set_cb_translate(pcb, ctx);
} else
pcb = NULL;
+#ifndef OPENSSL_NO_DSA
+ if (dctx->use_dsa) {
+ DSA *dsa_dh;
+ dsa_dh = dsa_dh_generate(dctx, pcb);
+ if (!dsa_dh)
+ return 0;
+ dh = DSA_dup_DH(dsa_dh);
+ DSA_free(dsa_dh);
+ if (!dh)
+ return 0;
+ EVP_PKEY_assign(pkey, EVP_PKEY_DHX, dh);
+ return 1;
+ }
+#endif
dh = DH_new();
if (!dh)
return 0;
ret = DH_generate_parameters_ex(dh,
dctx->prime_len, dctx->generator, pcb);
+
if (ret)
EVP_PKEY_assign_DH(pkey, dh);
else
@@ -187,7 +418,7 @@ static int pkey_dh_keygen(EVP_PKEY_CTX *ctx, EVP_PKEY *pkey)
dh = DH_new();
if (!dh)
return 0;
- EVP_PKEY_assign_DH(pkey, dh);
+ EVP_PKEY_assign(pkey, ctx->pmeth->pkey_id, dh);
/* Note: if error return, pkey is freed by parent routine */
if (!EVP_PKEY_copy_parameters(pkey, ctx->pkey))
return 0;
@@ -198,21 +429,96 @@ static int pkey_dh_derive(EVP_PKEY_CTX *ctx, unsigned char *key,
size_t *keylen)
{
int ret;
+ DH *dh;
+ DH_PKEY_CTX *dctx = ctx->data;
+ BIGNUM *dhpub;
if (!ctx->pkey || !ctx->peerkey) {
DHerr(DH_F_PKEY_DH_DERIVE, DH_R_KEYS_NOT_SET);
return 0;
}
- ret = DH_compute_key(key, ctx->peerkey->pkey.dh->pub_key,
- ctx->pkey->pkey.dh);
- if (ret < 0)
+ dh = ctx->pkey->pkey.dh;
+ dhpub = ctx->peerkey->pkey.dh->pub_key;
+ if (dctx->kdf_type == EVP_PKEY_DH_KDF_NONE) {
+ if (key == NULL) {
+ *keylen = DH_size(dh);
+ return 1;
+ }
+ ret = DH_compute_key(key, dhpub, dh);
+ if (ret < 0)
+ return ret;
+ *keylen = ret;
+ return 1;
+ } else if (dctx->kdf_type == EVP_PKEY_DH_KDF_X9_42) {
+ unsigned char *Z = NULL;
+ size_t Zlen = 0;
+ if (!dctx->kdf_outlen || !dctx->kdf_oid)
+ return 0;
+ if (key == NULL) {
+ *keylen = dctx->kdf_outlen;
+ return 1;
+ }
+ if (*keylen != dctx->kdf_outlen)
+ return 0;
+ ret = 0;
+ Zlen = DH_size(dh);
+ Z = OPENSSL_malloc(Zlen);
+ if (!Z) {
+ goto err;
+ }
+ if (DH_compute_key_padded(Z, dhpub, dh) <= 0)
+ goto err;
+ if (!DH_KDF_X9_42(key, *keylen, Z, Zlen, dctx->kdf_oid,
+ dctx->kdf_ukm, dctx->kdf_ukmlen, dctx->kdf_md))
+ goto err;
+ *keylen = dctx->kdf_outlen;
+ ret = 1;
+ err:
+ if (Z) {
+ OPENSSL_cleanse(Z, Zlen);
+ OPENSSL_free(Z);
+ }
return ret;
- *keylen = ret;
+ }
return 1;
}
const EVP_PKEY_METHOD dh_pkey_meth = {
EVP_PKEY_DH,
- EVP_PKEY_FLAG_AUTOARGLEN,
+ 0,
+ pkey_dh_init,
+ pkey_dh_copy,
+ pkey_dh_cleanup,
+
+ 0,
+ pkey_dh_paramgen,
+
+ 0,
+ pkey_dh_keygen,
+
+ 0,
+ 0,
+
+ 0,
+ 0,
+
+ 0, 0,
+
+ 0, 0, 0, 0,
+
+ 0, 0,
+
+ 0, 0,
+
+ 0,
+ pkey_dh_derive,
+
+ pkey_dh_ctrl,
+ pkey_dh_ctrl_str
+};
+
+const EVP_PKEY_METHOD dhx_pkey_meth = {
+ EVP_PKEY_DHX,
+ 0,
pkey_dh_init,
pkey_dh_copy,
pkey_dh_cleanup,
diff --git a/crypto/openssl/crypto/dh/dh_rfc5114.c b/crypto/openssl/crypto/dh/dh_rfc5114.c
new file mode 100644
index 0000000..e96e2aa
--- /dev/null
+++ b/crypto/openssl/crypto/dh/dh_rfc5114.c
@@ -0,0 +1,285 @@
+/*
+ * Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL project
+ * 2011.
+ */
+/* ====================================================================
+ * Copyright (c) 2011 The OpenSSL Project. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * 3. All advertising materials mentioning features or use of this
+ * software must display the following acknowledgment:
+ * "This product includes software developed by the OpenSSL Project
+ * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)"
+ *
+ * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
+ * endorse or promote products derived from this software without
+ * prior written permission. For written permission, please contact
+ * licensing@OpenSSL.org.
+ *
+ * 5. Products derived from this software may not be called "OpenSSL"
+ * nor may "OpenSSL" appear in their names without prior written
+ * permission of the OpenSSL Project.
+ *
+ * 6. Redistributions of any form whatsoever must retain the following
+ * acknowledgment:
+ * "This product includes software developed by the OpenSSL Project
+ * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)"
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
+ * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
+ * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+ * OF THE POSSIBILITY OF SUCH DAMAGE.
+ * ====================================================================
+ *
+ * This product includes cryptographic software written by Eric Young
+ * (eay@cryptsoft.com). This product includes software written by Tim
+ * Hudson (tjh@cryptsoft.com).
+ *
+ */
+
+#include <stdio.h>
+#include "cryptlib.h"
+#include <openssl/dh.h>
+#include <openssl/bn.h>
+
+/* DH parameters from RFC5114 */
+
+#if BN_BITS2 == 64
+static const BN_ULONG dh1024_160_p[] = {
+ 0xDF1FB2BC2E4A4371ULL, 0xE68CFDA76D4DA708ULL, 0x45BF37DF365C1A65ULL,
+ 0xA151AF5F0DC8B4BDULL, 0xFAA31A4FF55BCCC0ULL, 0x4EFFD6FAE5644738ULL,
+ 0x98488E9C219A7372ULL, 0xACCBDD7D90C4BD70ULL, 0x24975C3CD49B83BFULL,
+ 0x13ECB4AEA9061123ULL, 0x9838EF1E2EE652C0ULL, 0x6073E28675A23D18ULL,
+ 0x9A6A9DCA52D23B61ULL, 0x52C99FBCFB06A3C6ULL, 0xDE92DE5EAE5D54ECULL,
+ 0xB10B8F96A080E01DULL
+};
+
+static const BN_ULONG dh1024_160_g[] = {
+ 0x855E6EEB22B3B2E5ULL, 0x858F4DCEF97C2A24ULL, 0x2D779D5918D08BC8ULL,
+ 0xD662A4D18E73AFA3ULL, 0x1DBF0A0169B6A28AULL, 0xA6A24C087A091F53ULL,
+ 0x909D0D2263F80A76ULL, 0xD7FBD7D3B9A92EE1ULL, 0x5E91547F9E2749F4ULL,
+ 0x160217B4B01B886AULL, 0x777E690F5504F213ULL, 0x266FEA1E5C41564BULL,
+ 0xD6406CFF14266D31ULL, 0xF8104DD258AC507FULL, 0x6765A442EFB99905ULL,
+ 0xA4D1CBD5C3FD3412ULL
+};
+
+static const BN_ULONG dh1024_160_q[] = {
+ 0x64B7CB9D49462353ULL, 0x81A8DF278ABA4E7DULL, 0x00000000F518AA87ULL
+};
+
+static const BN_ULONG dh2048_224_p[] = {
+ 0x0AC4DFFE0C10E64FULL, 0xCF9DE5384E71B81CULL, 0x7EF363E2FFA31F71ULL,
+ 0xE3FB73C16B8E75B9ULL, 0xC9B53DCF4BA80A29ULL, 0x23F10B0E16E79763ULL,
+ 0xC52172E413042E9BULL, 0xBE60E69CC928B2B9ULL, 0x80CD86A1B9E587E8ULL,
+ 0x315D75E198C641A4ULL, 0xCDF93ACC44328387ULL, 0x15987D9ADC0A486DULL,
+ 0x7310F7121FD5A074ULL, 0x278273C7DE31EFDCULL, 0x1602E714415D9330ULL,
+ 0x81286130BC8985DBULL, 0xB3BF8A3170918836ULL, 0x6A00E0A0B9C49708ULL,
+ 0xC6BA0B2C8BBC27BEULL, 0xC9F98D11ED34DBF6ULL, 0x7AD5B7D0B6C12207ULL,
+ 0xD91E8FEF55B7394BULL, 0x9037C9EDEFDA4DF8ULL, 0x6D3F8152AD6AC212ULL,
+ 0x1DE6B85A1274A0A6ULL, 0xEB3D688A309C180EULL, 0xAF9A3C407BA1DF15ULL,
+ 0xE6FA141DF95A56DBULL, 0xB54B1597B61D0A75ULL, 0xA20D64E5683B9FD1ULL,
+ 0xD660FAA79559C51FULL, 0xAD107E1E9123A9D0ULL
+};
+
+static const BN_ULONG dh2048_224_g[] = {
+ 0x84B890D3191F2BFAULL, 0x81BC087F2A7065B3ULL, 0x19C418E1F6EC0179ULL,
+ 0x7B5A0F1C71CFFF4CULL, 0xEDFE72FE9B6AA4BDULL, 0x81E1BCFE94B30269ULL,
+ 0x566AFBB48D6C0191ULL, 0xB539CCE3409D13CDULL, 0x6AA21E7F5F2FF381ULL,
+ 0xD9E263E4770589EFULL, 0x10E183EDD19963DDULL, 0xB70A8137150B8EEBULL,
+ 0x051AE3D428C8F8ACULL, 0xBB77A86F0C1AB15BULL, 0x6E3025E316A330EFULL,
+ 0x19529A45D6F83456ULL, 0xF180EB34118E98D1ULL, 0xB5F6C6B250717CBEULL,
+ 0x09939D54DA7460CDULL, 0xE247150422EA1ED4ULL, 0xB8A762D0521BC98AULL,
+ 0xF4D027275AC1348BULL, 0xC17669101999024AULL, 0xBE5E9001A8D66AD7ULL,
+ 0xC57DB17C620A8652ULL, 0xAB739D7700C29F52ULL, 0xDD921F01A70C4AFAULL,
+ 0xA6824A4E10B9A6F0ULL, 0x74866A08CFE4FFE3ULL, 0x6CDEBE7B89998CAFULL,
+ 0x9DF30B5C8FFDAC50ULL, 0xAC4032EF4F2D9AE3ULL
+};
+
+static const BN_ULONG dh2048_224_q[] = {
+ 0xBF389A99B36371EBULL, 0x1F80535A4738CEBCULL, 0xC58D93FE99717710ULL,
+ 0x00000000801C0D34ULL
+};
+
+static const BN_ULONG dh2048_256_p[] = {
+ 0xDB094AE91E1A1597ULL, 0x693877FAD7EF09CAULL, 0x6116D2276E11715FULL,
+ 0xA4B54330C198AF12ULL, 0x75F26375D7014103ULL, 0xC3A3960A54E710C3ULL,
+ 0xDED4010ABD0BE621ULL, 0xC0B857F689962856ULL, 0xB3CA3F7971506026ULL,
+ 0x1CCACB83E6B486F6ULL, 0x67E144E514056425ULL, 0xF6A167B5A41825D9ULL,
+ 0x3AD8347796524D8EULL, 0xF13C6D9A51BFA4ABULL, 0x2D52526735488A0EULL,
+ 0xB63ACAE1CAA6B790ULL, 0x4FDB70C581B23F76ULL, 0xBC39A0BF12307F5CULL,
+ 0xB941F54EB1E59BB8ULL, 0x6C5BFC11D45F9088ULL, 0x22E0B1EF4275BF7BULL,
+ 0x91F9E6725B4758C0ULL, 0x5A8A9D306BCF67EDULL, 0x209E0C6497517ABDULL,
+ 0x3BF4296D830E9A7CULL, 0x16C3D91134096FAAULL, 0xFAF7DF4561B2AA30ULL,
+ 0xE00DF8F1D61957D4ULL, 0x5D2CEED4435E3B00ULL, 0x8CEEF608660DD0F2ULL,
+ 0xFFBBD19C65195999ULL, 0x87A8E61DB4B6663CULL
+};
+
+static const BN_ULONG dh2048_256_g[] = {
+ 0x664B4C0F6CC41659ULL, 0x5E2327CFEF98C582ULL, 0xD647D148D4795451ULL,
+ 0x2F63078490F00EF8ULL, 0x184B523D1DB246C3ULL, 0xC7891428CDC67EB6ULL,
+ 0x7FD028370DF92B52ULL, 0xB3353BBB64E0EC37ULL, 0xECD06E1557CD0915ULL,
+ 0xB7D2BBD2DF016199ULL, 0xC8484B1E052588B9ULL, 0xDB2A3B7313D3FE14ULL,
+ 0xD052B985D182EA0AULL, 0xA4BD1BFFE83B9C80ULL, 0xDFC967C1FB3F2E55ULL,
+ 0xB5045AF2767164E1ULL, 0x1D14348F6F2F9193ULL, 0x64E67982428EBC83ULL,
+ 0x8AC376D282D6ED38ULL, 0x777DE62AAAB8A862ULL, 0xDDF463E5E9EC144BULL,
+ 0x0196F931C77A57F2ULL, 0xA55AE31341000A65ULL, 0x901228F8C28CBB18ULL,
+ 0xBC3773BF7E8C6F62ULL, 0xBE3A6C1B0C6B47B1ULL, 0xFF4FED4AAC0BB555ULL,
+ 0x10DBC15077BE463FULL, 0x07F4793A1A0BA125ULL, 0x4CA7B18F21EF2054ULL,
+ 0x2E77506660EDBD48ULL, 0x3FB32C9B73134D0BULL
+};
+
+static const BN_ULONG dh2048_256_q[] = {
+ 0xA308B0FE64F5FBD3ULL, 0x99B1A47D1EB3750BULL, 0xB447997640129DA2ULL,
+ 0x8CF83642A709A097ULL
+};
+
+#elif BN_BITS2 == 32
+
+static const BN_ULONG dh1024_160_p[] = {
+ 0x2E4A4371, 0xDF1FB2BC, 0x6D4DA708, 0xE68CFDA7, 0x365C1A65, 0x45BF37DF,
+ 0x0DC8B4BD, 0xA151AF5F, 0xF55BCCC0, 0xFAA31A4F, 0xE5644738, 0x4EFFD6FA,
+ 0x219A7372, 0x98488E9C, 0x90C4BD70, 0xACCBDD7D, 0xD49B83BF, 0x24975C3C,
+ 0xA9061123, 0x13ECB4AE, 0x2EE652C0, 0x9838EF1E, 0x75A23D18, 0x6073E286,
+ 0x52D23B61, 0x9A6A9DCA, 0xFB06A3C6, 0x52C99FBC, 0xAE5D54EC, 0xDE92DE5E,
+ 0xA080E01D, 0xB10B8F96
+};
+
+static const BN_ULONG dh1024_160_g[] = {
+ 0x22B3B2E5, 0x855E6EEB, 0xF97C2A24, 0x858F4DCE, 0x18D08BC8, 0x2D779D59,
+ 0x8E73AFA3, 0xD662A4D1, 0x69B6A28A, 0x1DBF0A01, 0x7A091F53, 0xA6A24C08,
+ 0x63F80A76, 0x909D0D22, 0xB9A92EE1, 0xD7FBD7D3, 0x9E2749F4, 0x5E91547F,
+ 0xB01B886A, 0x160217B4, 0x5504F213, 0x777E690F, 0x5C41564B, 0x266FEA1E,
+ 0x14266D31, 0xD6406CFF, 0x58AC507F, 0xF8104DD2, 0xEFB99905, 0x6765A442,
+ 0xC3FD3412, 0xA4D1CBD5
+};
+
+static const BN_ULONG dh1024_160_q[] = {
+ 0x49462353, 0x64B7CB9D, 0x8ABA4E7D, 0x81A8DF27, 0xF518AA87
+};
+
+static const BN_ULONG dh2048_224_p[] = {
+ 0x0C10E64F, 0x0AC4DFFE, 0x4E71B81C, 0xCF9DE538, 0xFFA31F71, 0x7EF363E2,
+ 0x6B8E75B9, 0xE3FB73C1, 0x4BA80A29, 0xC9B53DCF, 0x16E79763, 0x23F10B0E,
+ 0x13042E9B, 0xC52172E4, 0xC928B2B9, 0xBE60E69C, 0xB9E587E8, 0x80CD86A1,
+ 0x98C641A4, 0x315D75E1, 0x44328387, 0xCDF93ACC, 0xDC0A486D, 0x15987D9A,
+ 0x1FD5A074, 0x7310F712, 0xDE31EFDC, 0x278273C7, 0x415D9330, 0x1602E714,
+ 0xBC8985DB, 0x81286130, 0x70918836, 0xB3BF8A31, 0xB9C49708, 0x6A00E0A0,
+ 0x8BBC27BE, 0xC6BA0B2C, 0xED34DBF6, 0xC9F98D11, 0xB6C12207, 0x7AD5B7D0,
+ 0x55B7394B, 0xD91E8FEF, 0xEFDA4DF8, 0x9037C9ED, 0xAD6AC212, 0x6D3F8152,
+ 0x1274A0A6, 0x1DE6B85A, 0x309C180E, 0xEB3D688A, 0x7BA1DF15, 0xAF9A3C40,
+ 0xF95A56DB, 0xE6FA141D, 0xB61D0A75, 0xB54B1597, 0x683B9FD1, 0xA20D64E5,
+ 0x9559C51F, 0xD660FAA7, 0x9123A9D0, 0xAD107E1E
+};
+
+static const BN_ULONG dh2048_224_g[] = {
+ 0x191F2BFA, 0x84B890D3, 0x2A7065B3, 0x81BC087F, 0xF6EC0179, 0x19C418E1,
+ 0x71CFFF4C, 0x7B5A0F1C, 0x9B6AA4BD, 0xEDFE72FE, 0x94B30269, 0x81E1BCFE,
+ 0x8D6C0191, 0x566AFBB4, 0x409D13CD, 0xB539CCE3, 0x5F2FF381, 0x6AA21E7F,
+ 0x770589EF, 0xD9E263E4, 0xD19963DD, 0x10E183ED, 0x150B8EEB, 0xB70A8137,
+ 0x28C8F8AC, 0x051AE3D4, 0x0C1AB15B, 0xBB77A86F, 0x16A330EF, 0x6E3025E3,
+ 0xD6F83456, 0x19529A45, 0x118E98D1, 0xF180EB34, 0x50717CBE, 0xB5F6C6B2,
+ 0xDA7460CD, 0x09939D54, 0x22EA1ED4, 0xE2471504, 0x521BC98A, 0xB8A762D0,
+ 0x5AC1348B, 0xF4D02727, 0x1999024A, 0xC1766910, 0xA8D66AD7, 0xBE5E9001,
+ 0x620A8652, 0xC57DB17C, 0x00C29F52, 0xAB739D77, 0xA70C4AFA, 0xDD921F01,
+ 0x10B9A6F0, 0xA6824A4E, 0xCFE4FFE3, 0x74866A08, 0x89998CAF, 0x6CDEBE7B,
+ 0x8FFDAC50, 0x9DF30B5C, 0x4F2D9AE3, 0xAC4032EF
+};
+
+static const BN_ULONG dh2048_224_q[] = {
+ 0xB36371EB, 0xBF389A99, 0x4738CEBC, 0x1F80535A, 0x99717710, 0xC58D93FE,
+ 0x801C0D34
+};
+
+static const BN_ULONG dh2048_256_p[] = {
+ 0x1E1A1597, 0xDB094AE9, 0xD7EF09CA, 0x693877FA, 0x6E11715F, 0x6116D227,
+ 0xC198AF12, 0xA4B54330, 0xD7014103, 0x75F26375, 0x54E710C3, 0xC3A3960A,
+ 0xBD0BE621, 0xDED4010A, 0x89962856, 0xC0B857F6, 0x71506026, 0xB3CA3F79,
+ 0xE6B486F6, 0x1CCACB83, 0x14056425, 0x67E144E5, 0xA41825D9, 0xF6A167B5,
+ 0x96524D8E, 0x3AD83477, 0x51BFA4AB, 0xF13C6D9A, 0x35488A0E, 0x2D525267,
+ 0xCAA6B790, 0xB63ACAE1, 0x81B23F76, 0x4FDB70C5, 0x12307F5C, 0xBC39A0BF,
+ 0xB1E59BB8, 0xB941F54E, 0xD45F9088, 0x6C5BFC11, 0x4275BF7B, 0x22E0B1EF,
+ 0x5B4758C0, 0x91F9E672, 0x6BCF67ED, 0x5A8A9D30, 0x97517ABD, 0x209E0C64,
+ 0x830E9A7C, 0x3BF4296D, 0x34096FAA, 0x16C3D911, 0x61B2AA30, 0xFAF7DF45,
+ 0xD61957D4, 0xE00DF8F1, 0x435E3B00, 0x5D2CEED4, 0x660DD0F2, 0x8CEEF608,
+ 0x65195999, 0xFFBBD19C, 0xB4B6663C, 0x87A8E61D
+};
+
+static const BN_ULONG dh2048_256_g[] = {
+ 0x6CC41659, 0x664B4C0F, 0xEF98C582, 0x5E2327CF, 0xD4795451, 0xD647D148,
+ 0x90F00EF8, 0x2F630784, 0x1DB246C3, 0x184B523D, 0xCDC67EB6, 0xC7891428,
+ 0x0DF92B52, 0x7FD02837, 0x64E0EC37, 0xB3353BBB, 0x57CD0915, 0xECD06E15,
+ 0xDF016199, 0xB7D2BBD2, 0x052588B9, 0xC8484B1E, 0x13D3FE14, 0xDB2A3B73,
+ 0xD182EA0A, 0xD052B985, 0xE83B9C80, 0xA4BD1BFF, 0xFB3F2E55, 0xDFC967C1,
+ 0x767164E1, 0xB5045AF2, 0x6F2F9193, 0x1D14348F, 0x428EBC83, 0x64E67982,
+ 0x82D6ED38, 0x8AC376D2, 0xAAB8A862, 0x777DE62A, 0xE9EC144B, 0xDDF463E5,
+ 0xC77A57F2, 0x0196F931, 0x41000A65, 0xA55AE313, 0xC28CBB18, 0x901228F8,
+ 0x7E8C6F62, 0xBC3773BF, 0x0C6B47B1, 0xBE3A6C1B, 0xAC0BB555, 0xFF4FED4A,
+ 0x77BE463F, 0x10DBC150, 0x1A0BA125, 0x07F4793A, 0x21EF2054, 0x4CA7B18F,
+ 0x60EDBD48, 0x2E775066, 0x73134D0B, 0x3FB32C9B
+};
+
+static const BN_ULONG dh2048_256_q[] = {
+ 0x64F5FBD3, 0xA308B0FE, 0x1EB3750B, 0x99B1A47D, 0x40129DA2, 0xB4479976,
+ 0xA709A097, 0x8CF83642
+};
+
+#else
+# error "unsupported BN_BITS2"
+#endif
+
+/* Macro to make a BIGNUM from static data */
+
+#define make_dh_bn(x) static const BIGNUM _bignum_##x = { (BN_ULONG *) x, \
+ sizeof(x)/sizeof(BN_ULONG),\
+ sizeof(x)/sizeof(BN_ULONG),\
+ 0, BN_FLG_STATIC_DATA }
+
+/*
+ * Macro to make a DH structure from BIGNUM data. NB: although just copying
+ * the BIGNUM static pointers would be more efficient we can't as they get
+ * wiped using BN_clear_free() when DH_free() is called.
+ */
+
+#define make_dh(x) \
+DH * DH_get_##x(void) \
+ { \
+ DH *dh; \
+ make_dh_bn(dh##x##_p); \
+ make_dh_bn(dh##x##_q); \
+ make_dh_bn(dh##x##_g); \
+ dh = DH_new(); \
+ if (!dh) \
+ return NULL; \
+ dh->p = BN_dup(&_bignum_dh##x##_p); \
+ dh->g = BN_dup(&_bignum_dh##x##_g); \
+ dh->q = BN_dup(&_bignum_dh##x##_q); \
+ if (!dh->p || !dh->q || !dh->g) \
+ { \
+ DH_free(dh); \
+ return NULL; \
+ } \
+ return dh; \
+ }
+
+make_dh(1024_160)
+make_dh(2048_224)
+make_dh(2048_256)
diff --git a/crypto/openssl/crypto/dh/dhtest.c b/crypto/openssl/crypto/dh/dhtest.c
index 5a4ee9a..c9dd76b 100644
--- a/crypto/openssl/crypto/dh/dhtest.c
+++ b/crypto/openssl/crypto/dh/dhtest.c
@@ -96,6 +96,8 @@ static int MS_CALLBACK cb(int p, int n, BN_GENCB *arg);
static const char rnd_seed[] =
"string to make the random number generator think it has entropy";
+static int run_rfc5114_tests(void);
+
int main(int argc, char *argv[])
{
BN_GENCB _cb;
@@ -199,6 +201,8 @@ int main(int argc, char *argv[])
ret = 1;
} else
ret = 0;
+ if (!run_rfc5114_tests())
+ ret = 1;
err:
ERR_print_errors_fp(stderr);
@@ -238,4 +242,323 @@ static int MS_CALLBACK cb(int p, int n, BN_GENCB *arg)
# endif
return 1;
}
+
+/* Test data from RFC 5114 */
+
+static const unsigned char dhtest_1024_160_xA[] = {
+ 0xB9, 0xA3, 0xB3, 0xAE, 0x8F, 0xEF, 0xC1, 0xA2, 0x93, 0x04, 0x96, 0x50,
+ 0x70, 0x86, 0xF8, 0x45, 0x5D, 0x48, 0x94, 0x3E
+};
+
+static const unsigned char dhtest_1024_160_yA[] = {
+ 0x2A, 0x85, 0x3B, 0x3D, 0x92, 0x19, 0x75, 0x01, 0xB9, 0x01, 0x5B, 0x2D,
+ 0xEB, 0x3E, 0xD8, 0x4F, 0x5E, 0x02, 0x1D, 0xCC, 0x3E, 0x52, 0xF1, 0x09,
+ 0xD3, 0x27, 0x3D, 0x2B, 0x75, 0x21, 0x28, 0x1C, 0xBA, 0xBE, 0x0E, 0x76,
+ 0xFF, 0x57, 0x27, 0xFA, 0x8A, 0xCC, 0xE2, 0x69, 0x56, 0xBA, 0x9A, 0x1F,
+ 0xCA, 0x26, 0xF2, 0x02, 0x28, 0xD8, 0x69, 0x3F, 0xEB, 0x10, 0x84, 0x1D,
+ 0x84, 0xA7, 0x36, 0x00, 0x54, 0xEC, 0xE5, 0xA7, 0xF5, 0xB7, 0xA6, 0x1A,
+ 0xD3, 0xDF, 0xB3, 0xC6, 0x0D, 0x2E, 0x43, 0x10, 0x6D, 0x87, 0x27, 0xDA,
+ 0x37, 0xDF, 0x9C, 0xCE, 0x95, 0xB4, 0x78, 0x75, 0x5D, 0x06, 0xBC, 0xEA,
+ 0x8F, 0x9D, 0x45, 0x96, 0x5F, 0x75, 0xA5, 0xF3, 0xD1, 0xDF, 0x37, 0x01,
+ 0x16, 0x5F, 0xC9, 0xE5, 0x0C, 0x42, 0x79, 0xCE, 0xB0, 0x7F, 0x98, 0x95,
+ 0x40, 0xAE, 0x96, 0xD5, 0xD8, 0x8E, 0xD7, 0x76
+};
+
+static const unsigned char dhtest_1024_160_xB[] = {
+ 0x93, 0x92, 0xC9, 0xF9, 0xEB, 0x6A, 0x7A, 0x6A, 0x90, 0x22, 0xF7, 0xD8,
+ 0x3E, 0x72, 0x23, 0xC6, 0x83, 0x5B, 0xBD, 0xDA
+};
+
+static const unsigned char dhtest_1024_160_yB[] = {
+ 0x71, 0x7A, 0x6C, 0xB0, 0x53, 0x37, 0x1F, 0xF4, 0xA3, 0xB9, 0x32, 0x94,
+ 0x1C, 0x1E, 0x56, 0x63, 0xF8, 0x61, 0xA1, 0xD6, 0xAD, 0x34, 0xAE, 0x66,
+ 0x57, 0x6D, 0xFB, 0x98, 0xF6, 0xC6, 0xCB, 0xF9, 0xDD, 0xD5, 0xA5, 0x6C,
+ 0x78, 0x33, 0xF6, 0xBC, 0xFD, 0xFF, 0x09, 0x55, 0x82, 0xAD, 0x86, 0x8E,
+ 0x44, 0x0E, 0x8D, 0x09, 0xFD, 0x76, 0x9E, 0x3C, 0xEC, 0xCD, 0xC3, 0xD3,
+ 0xB1, 0xE4, 0xCF, 0xA0, 0x57, 0x77, 0x6C, 0xAA, 0xF9, 0x73, 0x9B, 0x6A,
+ 0x9F, 0xEE, 0x8E, 0x74, 0x11, 0xF8, 0xD6, 0xDA, 0xC0, 0x9D, 0x6A, 0x4E,
+ 0xDB, 0x46, 0xCC, 0x2B, 0x5D, 0x52, 0x03, 0x09, 0x0E, 0xAE, 0x61, 0x26,
+ 0x31, 0x1E, 0x53, 0xFD, 0x2C, 0x14, 0xB5, 0x74, 0xE6, 0xA3, 0x10, 0x9A,
+ 0x3D, 0xA1, 0xBE, 0x41, 0xBD, 0xCE, 0xAA, 0x18, 0x6F, 0x5C, 0xE0, 0x67,
+ 0x16, 0xA2, 0xB6, 0xA0, 0x7B, 0x3C, 0x33, 0xFE
+};
+
+static const unsigned char dhtest_1024_160_Z[] = {
+ 0x5C, 0x80, 0x4F, 0x45, 0x4D, 0x30, 0xD9, 0xC4, 0xDF, 0x85, 0x27, 0x1F,
+ 0x93, 0x52, 0x8C, 0x91, 0xDF, 0x6B, 0x48, 0xAB, 0x5F, 0x80, 0xB3, 0xB5,
+ 0x9C, 0xAA, 0xC1, 0xB2, 0x8F, 0x8A, 0xCB, 0xA9, 0xCD, 0x3E, 0x39, 0xF3,
+ 0xCB, 0x61, 0x45, 0x25, 0xD9, 0x52, 0x1D, 0x2E, 0x64, 0x4C, 0x53, 0xB8,
+ 0x07, 0xB8, 0x10, 0xF3, 0x40, 0x06, 0x2F, 0x25, 0x7D, 0x7D, 0x6F, 0xBF,
+ 0xE8, 0xD5, 0xE8, 0xF0, 0x72, 0xE9, 0xB6, 0xE9, 0xAF, 0xDA, 0x94, 0x13,
+ 0xEA, 0xFB, 0x2E, 0x8B, 0x06, 0x99, 0xB1, 0xFB, 0x5A, 0x0C, 0xAC, 0xED,
+ 0xDE, 0xAE, 0xAD, 0x7E, 0x9C, 0xFB, 0xB3, 0x6A, 0xE2, 0xB4, 0x20, 0x83,
+ 0x5B, 0xD8, 0x3A, 0x19, 0xFB, 0x0B, 0x5E, 0x96, 0xBF, 0x8F, 0xA4, 0xD0,
+ 0x9E, 0x34, 0x55, 0x25, 0x16, 0x7E, 0xCD, 0x91, 0x55, 0x41, 0x6F, 0x46,
+ 0xF4, 0x08, 0xED, 0x31, 0xB6, 0x3C, 0x6E, 0x6D
+};
+
+static const unsigned char dhtest_2048_224_xA[] = {
+ 0x22, 0xE6, 0x26, 0x01, 0xDB, 0xFF, 0xD0, 0x67, 0x08, 0xA6, 0x80, 0xF7,
+ 0x47, 0xF3, 0x61, 0xF7, 0x6D, 0x8F, 0x4F, 0x72, 0x1A, 0x05, 0x48, 0xE4,
+ 0x83, 0x29, 0x4B, 0x0C
+};
+
+static const unsigned char dhtest_2048_224_yA[] = {
+ 0x1B, 0x3A, 0x63, 0x45, 0x1B, 0xD8, 0x86, 0xE6, 0x99, 0xE6, 0x7B, 0x49,
+ 0x4E, 0x28, 0x8B, 0xD7, 0xF8, 0xE0, 0xD3, 0x70, 0xBA, 0xDD, 0xA7, 0xA0,
+ 0xEF, 0xD2, 0xFD, 0xE7, 0xD8, 0xF6, 0x61, 0x45, 0xCC, 0x9F, 0x28, 0x04,
+ 0x19, 0x97, 0x5E, 0xB8, 0x08, 0x87, 0x7C, 0x8A, 0x4C, 0x0C, 0x8E, 0x0B,
+ 0xD4, 0x8D, 0x4A, 0x54, 0x01, 0xEB, 0x1E, 0x87, 0x76, 0xBF, 0xEE, 0xE1,
+ 0x34, 0xC0, 0x38, 0x31, 0xAC, 0x27, 0x3C, 0xD9, 0xD6, 0x35, 0xAB, 0x0C,
+ 0xE0, 0x06, 0xA4, 0x2A, 0x88, 0x7E, 0x3F, 0x52, 0xFB, 0x87, 0x66, 0xB6,
+ 0x50, 0xF3, 0x80, 0x78, 0xBC, 0x8E, 0xE8, 0x58, 0x0C, 0xEF, 0xE2, 0x43,
+ 0x96, 0x8C, 0xFC, 0x4F, 0x8D, 0xC3, 0xDB, 0x08, 0x45, 0x54, 0x17, 0x1D,
+ 0x41, 0xBF, 0x2E, 0x86, 0x1B, 0x7B, 0xB4, 0xD6, 0x9D, 0xD0, 0xE0, 0x1E,
+ 0xA3, 0x87, 0xCB, 0xAA, 0x5C, 0xA6, 0x72, 0xAF, 0xCB, 0xE8, 0xBD, 0xB9,
+ 0xD6, 0x2D, 0x4C, 0xE1, 0x5F, 0x17, 0xDD, 0x36, 0xF9, 0x1E, 0xD1, 0xEE,
+ 0xDD, 0x65, 0xCA, 0x4A, 0x06, 0x45, 0x5C, 0xB9, 0x4C, 0xD4, 0x0A, 0x52,
+ 0xEC, 0x36, 0x0E, 0x84, 0xB3, 0xC9, 0x26, 0xE2, 0x2C, 0x43, 0x80, 0xA3,
+ 0xBF, 0x30, 0x9D, 0x56, 0x84, 0x97, 0x68, 0xB7, 0xF5, 0x2C, 0xFD, 0xF6,
+ 0x55, 0xFD, 0x05, 0x3A, 0x7E, 0xF7, 0x06, 0x97, 0x9E, 0x7E, 0x58, 0x06,
+ 0xB1, 0x7D, 0xFA, 0xE5, 0x3A, 0xD2, 0xA5, 0xBC, 0x56, 0x8E, 0xBB, 0x52,
+ 0x9A, 0x7A, 0x61, 0xD6, 0x8D, 0x25, 0x6F, 0x8F, 0xC9, 0x7C, 0x07, 0x4A,
+ 0x86, 0x1D, 0x82, 0x7E, 0x2E, 0xBC, 0x8C, 0x61, 0x34, 0x55, 0x31, 0x15,
+ 0xB7, 0x0E, 0x71, 0x03, 0x92, 0x0A, 0xA1, 0x6D, 0x85, 0xE5, 0x2B, 0xCB,
+ 0xAB, 0x8D, 0x78, 0x6A, 0x68, 0x17, 0x8F, 0xA8, 0xFF, 0x7C, 0x2F, 0x5C,
+ 0x71, 0x64, 0x8D, 0x6F
+};
+
+static const unsigned char dhtest_2048_224_xB[] = {
+ 0x4F, 0xF3, 0xBC, 0x96, 0xC7, 0xFC, 0x6A, 0x6D, 0x71, 0xD3, 0xB3, 0x63,
+ 0x80, 0x0A, 0x7C, 0xDF, 0xEF, 0x6F, 0xC4, 0x1B, 0x44, 0x17, 0xEA, 0x15,
+ 0x35, 0x3B, 0x75, 0x90
+};
+
+static const unsigned char dhtest_2048_224_yB[] = {
+ 0x4D, 0xCE, 0xE9, 0x92, 0xA9, 0x76, 0x2A, 0x13, 0xF2, 0xF8, 0x38, 0x44,
+ 0xAD, 0x3D, 0x77, 0xEE, 0x0E, 0x31, 0xC9, 0x71, 0x8B, 0x3D, 0xB6, 0xC2,
+ 0x03, 0x5D, 0x39, 0x61, 0x18, 0x2C, 0x3E, 0x0B, 0xA2, 0x47, 0xEC, 0x41,
+ 0x82, 0xD7, 0x60, 0xCD, 0x48, 0xD9, 0x95, 0x99, 0x97, 0x06, 0x22, 0xA1,
+ 0x88, 0x1B, 0xBA, 0x2D, 0xC8, 0x22, 0x93, 0x9C, 0x78, 0xC3, 0x91, 0x2C,
+ 0x66, 0x61, 0xFA, 0x54, 0x38, 0xB2, 0x07, 0x66, 0x22, 0x2B, 0x75, 0xE2,
+ 0x4C, 0x2E, 0x3A, 0xD0, 0xC7, 0x28, 0x72, 0x36, 0x12, 0x95, 0x25, 0xEE,
+ 0x15, 0xB5, 0xDD, 0x79, 0x98, 0xAA, 0x04, 0xC4, 0xA9, 0x69, 0x6C, 0xAC,
+ 0xD7, 0x17, 0x20, 0x83, 0xA9, 0x7A, 0x81, 0x66, 0x4E, 0xAD, 0x2C, 0x47,
+ 0x9E, 0x44, 0x4E, 0x4C, 0x06, 0x54, 0xCC, 0x19, 0xE2, 0x8D, 0x77, 0x03,
+ 0xCE, 0xE8, 0xDA, 0xCD, 0x61, 0x26, 0xF5, 0xD6, 0x65, 0xEC, 0x52, 0xC6,
+ 0x72, 0x55, 0xDB, 0x92, 0x01, 0x4B, 0x03, 0x7E, 0xB6, 0x21, 0xA2, 0xAC,
+ 0x8E, 0x36, 0x5D, 0xE0, 0x71, 0xFF, 0xC1, 0x40, 0x0A, 0xCF, 0x07, 0x7A,
+ 0x12, 0x91, 0x3D, 0xD8, 0xDE, 0x89, 0x47, 0x34, 0x37, 0xAB, 0x7B, 0xA3,
+ 0x46, 0x74, 0x3C, 0x1B, 0x21, 0x5D, 0xD9, 0xC1, 0x21, 0x64, 0xA7, 0xE4,
+ 0x05, 0x31, 0x18, 0xD1, 0x99, 0xBE, 0xC8, 0xEF, 0x6F, 0xC5, 0x61, 0x17,
+ 0x0C, 0x84, 0xC8, 0x7D, 0x10, 0xEE, 0x9A, 0x67, 0x4A, 0x1F, 0xA8, 0xFF,
+ 0xE1, 0x3B, 0xDF, 0xBA, 0x1D, 0x44, 0xDE, 0x48, 0x94, 0x6D, 0x68, 0xDC,
+ 0x0C, 0xDD, 0x77, 0x76, 0x35, 0xA7, 0xAB, 0x5B, 0xFB, 0x1E, 0x4B, 0xB7,
+ 0xB8, 0x56, 0xF9, 0x68, 0x27, 0x73, 0x4C, 0x18, 0x41, 0x38, 0xE9, 0x15,
+ 0xD9, 0xC3, 0x00, 0x2E, 0xBC, 0xE5, 0x31, 0x20, 0x54, 0x6A, 0x7E, 0x20,
+ 0x02, 0x14, 0x2B, 0x6C
+};
+
+static const unsigned char dhtest_2048_224_Z[] = {
+ 0x34, 0xD9, 0xBD, 0xDC, 0x1B, 0x42, 0x17, 0x6C, 0x31, 0x3F, 0xEA, 0x03,
+ 0x4C, 0x21, 0x03, 0x4D, 0x07, 0x4A, 0x63, 0x13, 0xBB, 0x4E, 0xCD, 0xB3,
+ 0x70, 0x3F, 0xFF, 0x42, 0x45, 0x67, 0xA4, 0x6B, 0xDF, 0x75, 0x53, 0x0E,
+ 0xDE, 0x0A, 0x9D, 0xA5, 0x22, 0x9D, 0xE7, 0xD7, 0x67, 0x32, 0x28, 0x6C,
+ 0xBC, 0x0F, 0x91, 0xDA, 0x4C, 0x3C, 0x85, 0x2F, 0xC0, 0x99, 0xC6, 0x79,
+ 0x53, 0x1D, 0x94, 0xC7, 0x8A, 0xB0, 0x3D, 0x9D, 0xEC, 0xB0, 0xA4, 0xE4,
+ 0xCA, 0x8B, 0x2B, 0xB4, 0x59, 0x1C, 0x40, 0x21, 0xCF, 0x8C, 0xE3, 0xA2,
+ 0x0A, 0x54, 0x1D, 0x33, 0x99, 0x40, 0x17, 0xD0, 0x20, 0x0A, 0xE2, 0xC9,
+ 0x51, 0x6E, 0x2F, 0xF5, 0x14, 0x57, 0x79, 0x26, 0x9E, 0x86, 0x2B, 0x0F,
+ 0xB4, 0x74, 0xA2, 0xD5, 0x6D, 0xC3, 0x1E, 0xD5, 0x69, 0xA7, 0x70, 0x0B,
+ 0x4C, 0x4A, 0xB1, 0x6B, 0x22, 0xA4, 0x55, 0x13, 0x53, 0x1E, 0xF5, 0x23,
+ 0xD7, 0x12, 0x12, 0x07, 0x7B, 0x5A, 0x16, 0x9B, 0xDE, 0xFF, 0xAD, 0x7A,
+ 0xD9, 0x60, 0x82, 0x84, 0xC7, 0x79, 0x5B, 0x6D, 0x5A, 0x51, 0x83, 0xB8,
+ 0x70, 0x66, 0xDE, 0x17, 0xD8, 0xD6, 0x71, 0xC9, 0xEB, 0xD8, 0xEC, 0x89,
+ 0x54, 0x4D, 0x45, 0xEC, 0x06, 0x15, 0x93, 0xD4, 0x42, 0xC6, 0x2A, 0xB9,
+ 0xCE, 0x3B, 0x1C, 0xB9, 0x94, 0x3A, 0x1D, 0x23, 0xA5, 0xEA, 0x3B, 0xCF,
+ 0x21, 0xA0, 0x14, 0x71, 0xE6, 0x7E, 0x00, 0x3E, 0x7F, 0x8A, 0x69, 0xC7,
+ 0x28, 0xBE, 0x49, 0x0B, 0x2F, 0xC8, 0x8C, 0xFE, 0xB9, 0x2D, 0xB6, 0xA2,
+ 0x15, 0xE5, 0xD0, 0x3C, 0x17, 0xC4, 0x64, 0xC9, 0xAC, 0x1A, 0x46, 0xE2,
+ 0x03, 0xE1, 0x3F, 0x95, 0x29, 0x95, 0xFB, 0x03, 0xC6, 0x9D, 0x3C, 0xC4,
+ 0x7F, 0xCB, 0x51, 0x0B, 0x69, 0x98, 0xFF, 0xD3, 0xAA, 0x6D, 0xE7, 0x3C,
+ 0xF9, 0xF6, 0x38, 0x69
+};
+
+static const unsigned char dhtest_2048_256_xA[] = {
+ 0x08, 0x81, 0x38, 0x2C, 0xDB, 0x87, 0x66, 0x0C, 0x6D, 0xC1, 0x3E, 0x61,
+ 0x49, 0x38, 0xD5, 0xB9, 0xC8, 0xB2, 0xF2, 0x48, 0x58, 0x1C, 0xC5, 0xE3,
+ 0x1B, 0x35, 0x45, 0x43, 0x97, 0xFC, 0xE5, 0x0E
+};
+
+static const unsigned char dhtest_2048_256_yA[] = {
+ 0x2E, 0x93, 0x80, 0xC8, 0x32, 0x3A, 0xF9, 0x75, 0x45, 0xBC, 0x49, 0x41,
+ 0xDE, 0xB0, 0xEC, 0x37, 0x42, 0xC6, 0x2F, 0xE0, 0xEC, 0xE8, 0x24, 0xA6,
+ 0xAB, 0xDB, 0xE6, 0x6C, 0x59, 0xBE, 0xE0, 0x24, 0x29, 0x11, 0xBF, 0xB9,
+ 0x67, 0x23, 0x5C, 0xEB, 0xA3, 0x5A, 0xE1, 0x3E, 0x4E, 0xC7, 0x52, 0xBE,
+ 0x63, 0x0B, 0x92, 0xDC, 0x4B, 0xDE, 0x28, 0x47, 0xA9, 0xC6, 0x2C, 0xB8,
+ 0x15, 0x27, 0x45, 0x42, 0x1F, 0xB7, 0xEB, 0x60, 0xA6, 0x3C, 0x0F, 0xE9,
+ 0x15, 0x9F, 0xCC, 0xE7, 0x26, 0xCE, 0x7C, 0xD8, 0x52, 0x3D, 0x74, 0x50,
+ 0x66, 0x7E, 0xF8, 0x40, 0xE4, 0x91, 0x91, 0x21, 0xEB, 0x5F, 0x01, 0xC8,
+ 0xC9, 0xB0, 0xD3, 0xD6, 0x48, 0xA9, 0x3B, 0xFB, 0x75, 0x68, 0x9E, 0x82,
+ 0x44, 0xAC, 0x13, 0x4A, 0xF5, 0x44, 0x71, 0x1C, 0xE7, 0x9A, 0x02, 0xDC,
+ 0xC3, 0x42, 0x26, 0x68, 0x47, 0x80, 0xDD, 0xDC, 0xB4, 0x98, 0x59, 0x41,
+ 0x06, 0xC3, 0x7F, 0x5B, 0xC7, 0x98, 0x56, 0x48, 0x7A, 0xF5, 0xAB, 0x02,
+ 0x2A, 0x2E, 0x5E, 0x42, 0xF0, 0x98, 0x97, 0xC1, 0xA8, 0x5A, 0x11, 0xEA,
+ 0x02, 0x12, 0xAF, 0x04, 0xD9, 0xB4, 0xCE, 0xBC, 0x93, 0x7C, 0x3C, 0x1A,
+ 0x3E, 0x15, 0xA8, 0xA0, 0x34, 0x2E, 0x33, 0x76, 0x15, 0xC8, 0x4E, 0x7F,
+ 0xE3, 0xB8, 0xB9, 0xB8, 0x7F, 0xB1, 0xE7, 0x3A, 0x15, 0xAF, 0x12, 0xA3,
+ 0x0D, 0x74, 0x6E, 0x06, 0xDF, 0xC3, 0x4F, 0x29, 0x0D, 0x79, 0x7C, 0xE5,
+ 0x1A, 0xA1, 0x3A, 0xA7, 0x85, 0xBF, 0x66, 0x58, 0xAF, 0xF5, 0xE4, 0xB0,
+ 0x93, 0x00, 0x3C, 0xBE, 0xAF, 0x66, 0x5B, 0x3C, 0x2E, 0x11, 0x3A, 0x3A,
+ 0x4E, 0x90, 0x52, 0x69, 0x34, 0x1D, 0xC0, 0x71, 0x14, 0x26, 0x68, 0x5F,
+ 0x4E, 0xF3, 0x7E, 0x86, 0x8A, 0x81, 0x26, 0xFF, 0x3F, 0x22, 0x79, 0xB5,
+ 0x7C, 0xA6, 0x7E, 0x29
+};
+
+static const unsigned char dhtest_2048_256_xB[] = {
+ 0x7D, 0x62, 0xA7, 0xE3, 0xEF, 0x36, 0xDE, 0x61, 0x7B, 0x13, 0xD1, 0xAF,
+ 0xB8, 0x2C, 0x78, 0x0D, 0x83, 0xA2, 0x3B, 0xD4, 0xEE, 0x67, 0x05, 0x64,
+ 0x51, 0x21, 0xF3, 0x71, 0xF5, 0x46, 0xA5, 0x3D
+};
+
+static const unsigned char dhtest_2048_256_yB[] = {
+ 0x57, 0x5F, 0x03, 0x51, 0xBD, 0x2B, 0x1B, 0x81, 0x74, 0x48, 0xBD, 0xF8,
+ 0x7A, 0x6C, 0x36, 0x2C, 0x1E, 0x28, 0x9D, 0x39, 0x03, 0xA3, 0x0B, 0x98,
+ 0x32, 0xC5, 0x74, 0x1F, 0xA2, 0x50, 0x36, 0x3E, 0x7A, 0xCB, 0xC7, 0xF7,
+ 0x7F, 0x3D, 0xAC, 0xBC, 0x1F, 0x13, 0x1A, 0xDD, 0x8E, 0x03, 0x36, 0x7E,
+ 0xFF, 0x8F, 0xBB, 0xB3, 0xE1, 0xC5, 0x78, 0x44, 0x24, 0x80, 0x9B, 0x25,
+ 0xAF, 0xE4, 0xD2, 0x26, 0x2A, 0x1A, 0x6F, 0xD2, 0xFA, 0xB6, 0x41, 0x05,
+ 0xCA, 0x30, 0xA6, 0x74, 0xE0, 0x7F, 0x78, 0x09, 0x85, 0x20, 0x88, 0x63,
+ 0x2F, 0xC0, 0x49, 0x23, 0x37, 0x91, 0xAD, 0x4E, 0xDD, 0x08, 0x3A, 0x97,
+ 0x8B, 0x88, 0x3E, 0xE6, 0x18, 0xBC, 0x5E, 0x0D, 0xD0, 0x47, 0x41, 0x5F,
+ 0x2D, 0x95, 0xE6, 0x83, 0xCF, 0x14, 0x82, 0x6B, 0x5F, 0xBE, 0x10, 0xD3,
+ 0xCE, 0x41, 0xC6, 0xC1, 0x20, 0xC7, 0x8A, 0xB2, 0x00, 0x08, 0xC6, 0x98,
+ 0xBF, 0x7F, 0x0B, 0xCA, 0xB9, 0xD7, 0xF4, 0x07, 0xBE, 0xD0, 0xF4, 0x3A,
+ 0xFB, 0x29, 0x70, 0xF5, 0x7F, 0x8D, 0x12, 0x04, 0x39, 0x63, 0xE6, 0x6D,
+ 0xDD, 0x32, 0x0D, 0x59, 0x9A, 0xD9, 0x93, 0x6C, 0x8F, 0x44, 0x13, 0x7C,
+ 0x08, 0xB1, 0x80, 0xEC, 0x5E, 0x98, 0x5C, 0xEB, 0xE1, 0x86, 0xF3, 0xD5,
+ 0x49, 0x67, 0x7E, 0x80, 0x60, 0x73, 0x31, 0xEE, 0x17, 0xAF, 0x33, 0x80,
+ 0xA7, 0x25, 0xB0, 0x78, 0x23, 0x17, 0xD7, 0xDD, 0x43, 0xF5, 0x9D, 0x7A,
+ 0xF9, 0x56, 0x8A, 0x9B, 0xB6, 0x3A, 0x84, 0xD3, 0x65, 0xF9, 0x22, 0x44,
+ 0xED, 0x12, 0x09, 0x88, 0x21, 0x93, 0x02, 0xF4, 0x29, 0x24, 0xC7, 0xCA,
+ 0x90, 0xB8, 0x9D, 0x24, 0xF7, 0x1B, 0x0A, 0xB6, 0x97, 0x82, 0x3D, 0x7D,
+ 0xEB, 0x1A, 0xFF, 0x5B, 0x0E, 0x8E, 0x4A, 0x45, 0xD4, 0x9F, 0x7F, 0x53,
+ 0x75, 0x7E, 0x19, 0x13
+};
+
+static const unsigned char dhtest_2048_256_Z[] = {
+ 0x86, 0xC7, 0x0B, 0xF8, 0xD0, 0xBB, 0x81, 0xBB, 0x01, 0x07, 0x8A, 0x17,
+ 0x21, 0x9C, 0xB7, 0xD2, 0x72, 0x03, 0xDB, 0x2A, 0x19, 0xC8, 0x77, 0xF1,
+ 0xD1, 0xF1, 0x9F, 0xD7, 0xD7, 0x7E, 0xF2, 0x25, 0x46, 0xA6, 0x8F, 0x00,
+ 0x5A, 0xD5, 0x2D, 0xC8, 0x45, 0x53, 0xB7, 0x8F, 0xC6, 0x03, 0x30, 0xBE,
+ 0x51, 0xEA, 0x7C, 0x06, 0x72, 0xCA, 0xC1, 0x51, 0x5E, 0x4B, 0x35, 0xC0,
+ 0x47, 0xB9, 0xA5, 0x51, 0xB8, 0x8F, 0x39, 0xDC, 0x26, 0xDA, 0x14, 0xA0,
+ 0x9E, 0xF7, 0x47, 0x74, 0xD4, 0x7C, 0x76, 0x2D, 0xD1, 0x77, 0xF9, 0xED,
+ 0x5B, 0xC2, 0xF1, 0x1E, 0x52, 0xC8, 0x79, 0xBD, 0x95, 0x09, 0x85, 0x04,
+ 0xCD, 0x9E, 0xEC, 0xD8, 0xA8, 0xF9, 0xB3, 0xEF, 0xBD, 0x1F, 0x00, 0x8A,
+ 0xC5, 0x85, 0x30, 0x97, 0xD9, 0xD1, 0x83, 0x7F, 0x2B, 0x18, 0xF7, 0x7C,
+ 0xD7, 0xBE, 0x01, 0xAF, 0x80, 0xA7, 0xC7, 0xB5, 0xEA, 0x3C, 0xA5, 0x4C,
+ 0xC0, 0x2D, 0x0C, 0x11, 0x6F, 0xEE, 0x3F, 0x95, 0xBB, 0x87, 0x39, 0x93,
+ 0x85, 0x87, 0x5D, 0x7E, 0x86, 0x74, 0x7E, 0x67, 0x6E, 0x72, 0x89, 0x38,
+ 0xAC, 0xBF, 0xF7, 0x09, 0x8E, 0x05, 0xBE, 0x4D, 0xCF, 0xB2, 0x40, 0x52,
+ 0xB8, 0x3A, 0xEF, 0xFB, 0x14, 0x78, 0x3F, 0x02, 0x9A, 0xDB, 0xDE, 0x7F,
+ 0x53, 0xFA, 0xE9, 0x20, 0x84, 0x22, 0x40, 0x90, 0xE0, 0x07, 0xCE, 0xE9,
+ 0x4D, 0x4B, 0xF2, 0xBA, 0xCE, 0x9F, 0xFD, 0x4B, 0x57, 0xD2, 0xAF, 0x7C,
+ 0x72, 0x4D, 0x0C, 0xAA, 0x19, 0xBF, 0x05, 0x01, 0xF6, 0xF1, 0x7B, 0x4A,
+ 0xA1, 0x0F, 0x42, 0x5E, 0x3E, 0xA7, 0x60, 0x80, 0xB4, 0xB9, 0xD6, 0xB3,
+ 0xCE, 0xFE, 0xA1, 0x15, 0xB2, 0xCE, 0xB8, 0x78, 0x9B, 0xB8, 0xA3, 0xB0,
+ 0xEA, 0x87, 0xFE, 0xBE, 0x63, 0xB6, 0xC8, 0xF8, 0x46, 0xEC, 0x6D, 0xB0,
+ 0xC2, 0x6C, 0x5D, 0x7C
+};
+
+typedef struct {
+ DH *(*get_param) (void);
+ const unsigned char *xA;
+ size_t xA_len;
+ const unsigned char *yA;
+ size_t yA_len;
+ const unsigned char *xB;
+ size_t xB_len;
+ const unsigned char *yB;
+ size_t yB_len;
+ const unsigned char *Z;
+ size_t Z_len;
+} rfc5114_td;
+
+# define make_rfc5114_td(pre) { \
+ DH_get_##pre, \
+ dhtest_##pre##_xA, sizeof(dhtest_##pre##_xA), \
+ dhtest_##pre##_yA, sizeof(dhtest_##pre##_yA), \
+ dhtest_##pre##_xB, sizeof(dhtest_##pre##_xB), \
+ dhtest_##pre##_yB, sizeof(dhtest_##pre##_yB), \
+ dhtest_##pre##_Z, sizeof(dhtest_##pre##_Z) \
+ }
+
+static const rfc5114_td rfctd[] = {
+ make_rfc5114_td(1024_160),
+ make_rfc5114_td(2048_224),
+ make_rfc5114_td(2048_256)
+};
+
+static int run_rfc5114_tests(void)
+{
+ int i;
+ for (i = 0; i < (int)(sizeof(rfctd) / sizeof(rfc5114_td)); i++) {
+ DH *dhA, *dhB;
+ unsigned char *Z1 = NULL, *Z2 = NULL;
+ const rfc5114_td *td = rfctd + i;
+ /* Set up DH structures setting key components */
+ dhA = td->get_param();
+ dhB = td->get_param();
+ if (!dhA || !dhB)
+ goto bad_err;
+
+ dhA->priv_key = BN_bin2bn(td->xA, td->xA_len, NULL);
+ dhA->pub_key = BN_bin2bn(td->yA, td->yA_len, NULL);
+
+ dhB->priv_key = BN_bin2bn(td->xB, td->xB_len, NULL);
+ dhB->pub_key = BN_bin2bn(td->yB, td->yB_len, NULL);
+
+ if (!dhA->priv_key || !dhA->pub_key
+ || !dhB->priv_key || !dhB->pub_key)
+ goto bad_err;
+
+ if ((td->Z_len != (size_t)DH_size(dhA))
+ || (td->Z_len != (size_t)DH_size(dhB)))
+ goto err;
+
+ Z1 = OPENSSL_malloc(DH_size(dhA));
+ Z2 = OPENSSL_malloc(DH_size(dhB));
+ /*
+ * Work out shared secrets using both sides and compare with expected
+ * values.
+ */
+ if (!DH_compute_key(Z1, dhB->pub_key, dhA))
+ goto bad_err;
+ if (!DH_compute_key(Z2, dhA->pub_key, dhB))
+ goto bad_err;
+
+ if (memcmp(Z1, td->Z, td->Z_len))
+ goto err;
+ if (memcmp(Z2, td->Z, td->Z_len))
+ goto err;
+
+ printf("RFC5114 parameter test %d OK\n", i + 1);
+
+ DH_free(dhA);
+ DH_free(dhB);
+ OPENSSL_free(Z1);
+ OPENSSL_free(Z2);
+
+ }
+ return 1;
+ bad_err:
+ fprintf(stderr, "Initalisation error RFC5114 set %d\n", i + 1);
+ ERR_print_errors_fp(stderr);
+ return 0;
+ err:
+ fprintf(stderr, "Test failed RFC5114 set %d\n", i + 1);
+ return 0;
+}
+
#endif
diff --git a/crypto/openssl/crypto/dsa/dsa.h b/crypto/openssl/crypto/dsa/dsa.h
index a2f0ee7..545358f 100644
--- a/crypto/openssl/crypto/dsa/dsa.h
+++ b/crypto/openssl/crypto/dsa/dsa.h
@@ -287,6 +287,7 @@ void ERR_load_DSA_strings(void);
# define DSA_F_DO_DSA_PRINT 104
# define DSA_F_DSAPARAMS_PRINT 100
# define DSA_F_DSAPARAMS_PRINT_FP 101
+# define DSA_F_DSA_BUILTIN_PARAMGEN2 126
# define DSA_F_DSA_DO_SIGN 112
# define DSA_F_DSA_DO_VERIFY 113
# define DSA_F_DSA_GENERATE_KEY 124
@@ -316,12 +317,14 @@ void ERR_load_DSA_strings(void);
# define DSA_R_DATA_TOO_LARGE_FOR_KEY_SIZE 100
# define DSA_R_DECODE_ERROR 104
# define DSA_R_INVALID_DIGEST_TYPE 106
+# define DSA_R_INVALID_PARAMETERS 112
# define DSA_R_MISSING_PARAMETERS 101
# define DSA_R_MODULUS_TOO_LARGE 103
# define DSA_R_NEED_NEW_SETUP_VALUES 110
# define DSA_R_NON_FIPS_DSA_METHOD 111
# define DSA_R_NO_PARAMETERS_SET 107
# define DSA_R_PARAMETER_ENCODING_ERROR 105
+# define DSA_R_Q_NOT_PRIME 113
#ifdef __cplusplus
}
diff --git a/crypto/openssl/crypto/dsa/dsa_ameth.c b/crypto/openssl/crypto/dsa/dsa_ameth.c
index a2840ea..2a5cd71 100644
--- a/crypto/openssl/crypto/dsa/dsa_ameth.c
+++ b/crypto/openssl/crypto/dsa/dsa_ameth.c
@@ -601,10 +601,14 @@ static int dsa_pkey_ctrl(EVP_PKEY *pkey, int op, long arg1, void *arg2)
X509_ALGOR_set0(alg2, OBJ_nid2obj(snid), V_ASN1_UNDEF, 0);
}
return 1;
+
+ case ASN1_PKEY_CTRL_CMS_RI_TYPE:
+ *(int *)arg2 = CMS_RECIPINFO_NONE;
+ return 1;
#endif
case ASN1_PKEY_CTRL_DEFAULT_MD_NID:
- *(int *)arg2 = NID_sha1;
+ *(int *)arg2 = NID_sha256;
return 2;
default:
diff --git a/crypto/openssl/crypto/dsa/dsa_err.c b/crypto/openssl/crypto/dsa/dsa_err.c
index 746f5df..f5ddc66 100644
--- a/crypto/openssl/crypto/dsa/dsa_err.c
+++ b/crypto/openssl/crypto/dsa/dsa_err.c
@@ -1,6 +1,6 @@
/* crypto/dsa/dsa_err.c */
/* ====================================================================
- * Copyright (c) 1999-2011 The OpenSSL Project. All rights reserved.
+ * Copyright (c) 1999-2013 The OpenSSL Project. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -74,6 +74,7 @@ static ERR_STRING_DATA DSA_str_functs[] = {
{ERR_FUNC(DSA_F_DO_DSA_PRINT), "DO_DSA_PRINT"},
{ERR_FUNC(DSA_F_DSAPARAMS_PRINT), "DSAparams_print"},
{ERR_FUNC(DSA_F_DSAPARAMS_PRINT_FP), "DSAparams_print_fp"},
+ {ERR_FUNC(DSA_F_DSA_BUILTIN_PARAMGEN2), "DSA_BUILTIN_PARAMGEN2"},
{ERR_FUNC(DSA_F_DSA_DO_SIGN), "DSA_do_sign"},
{ERR_FUNC(DSA_F_DSA_DO_VERIFY), "DSA_do_verify"},
{ERR_FUNC(DSA_F_DSA_GENERATE_KEY), "DSA_generate_key"},
@@ -107,12 +108,14 @@ static ERR_STRING_DATA DSA_str_reasons[] = {
"data too large for key size"},
{ERR_REASON(DSA_R_DECODE_ERROR), "decode error"},
{ERR_REASON(DSA_R_INVALID_DIGEST_TYPE), "invalid digest type"},
+ {ERR_REASON(DSA_R_INVALID_PARAMETERS), "invalid parameters"},
{ERR_REASON(DSA_R_MISSING_PARAMETERS), "missing parameters"},
{ERR_REASON(DSA_R_MODULUS_TOO_LARGE), "modulus too large"},
{ERR_REASON(DSA_R_NEED_NEW_SETUP_VALUES), "need new setup values"},
{ERR_REASON(DSA_R_NON_FIPS_DSA_METHOD), "non fips dsa method"},
{ERR_REASON(DSA_R_NO_PARAMETERS_SET), "no parameters set"},
{ERR_REASON(DSA_R_PARAMETER_ENCODING_ERROR), "parameter encoding error"},
+ {ERR_REASON(DSA_R_Q_NOT_PRIME), "q not prime"},
{0, NULL}
};
diff --git a/crypto/openssl/crypto/dsa/dsa_gen.c b/crypto/openssl/crypto/dsa/dsa_gen.c
index d686ab0..5a328aaa 100644
--- a/crypto/openssl/crypto/dsa/dsa_gen.c
+++ b/crypto/openssl/crypto/dsa/dsa_gen.c
@@ -86,6 +86,8 @@
# include "dsa_locl.h"
# ifdef OPENSSL_FIPS
+/* Workaround bug in prototype */
+# define fips_dsa_builtin_paramgen2 fips_dsa_paramgen_bad
# include <openssl/fips.h>
# endif
@@ -383,4 +385,371 @@ int dsa_builtin_paramgen(DSA *ret, size_t bits, size_t qbits,
BN_MONT_CTX_free(mont);
return ok;
}
+
+# ifdef OPENSSL_FIPS
+# undef fips_dsa_builtin_paramgen2
+extern int fips_dsa_builtin_paramgen2(DSA *ret, size_t L, size_t N,
+ const EVP_MD *evpmd,
+ const unsigned char *seed_in,
+ size_t seed_len, int idx,
+ unsigned char *seed_out,
+ int *counter_ret, unsigned long *h_ret,
+ BN_GENCB *cb);
+# endif
+
+/*
+ * This is a parameter generation algorithm for the DSA2 algorithm as
+ * described in FIPS 186-3.
+ */
+
+int dsa_builtin_paramgen2(DSA *ret, size_t L, size_t N,
+ const EVP_MD *evpmd, const unsigned char *seed_in,
+ size_t seed_len, int idx, unsigned char *seed_out,
+ int *counter_ret, unsigned long *h_ret,
+ BN_GENCB *cb)
+{
+ int ok = -1;
+ unsigned char *seed = NULL, *seed_tmp = NULL;
+ unsigned char md[EVP_MAX_MD_SIZE];
+ int mdsize;
+ BIGNUM *r0, *W, *X, *c, *test;
+ BIGNUM *g = NULL, *q = NULL, *p = NULL;
+ BN_MONT_CTX *mont = NULL;
+ int i, k, n = 0, m = 0, qsize = N >> 3;
+ int counter = 0;
+ int r = 0;
+ BN_CTX *ctx = NULL;
+ EVP_MD_CTX mctx;
+ unsigned int h = 2;
+
+# ifdef OPENSSL_FIPS
+
+ if (FIPS_mode())
+ return fips_dsa_builtin_paramgen2(ret, L, N, evpmd,
+ seed_in, seed_len, idx,
+ seed_out, counter_ret, h_ret, cb);
+# endif
+
+ EVP_MD_CTX_init(&mctx);
+
+ if (evpmd == NULL) {
+ if (N == 160)
+ evpmd = EVP_sha1();
+ else if (N == 224)
+ evpmd = EVP_sha224();
+ else
+ evpmd = EVP_sha256();
+ }
+
+ mdsize = EVP_MD_size(evpmd);
+ /* If unverificable g generation only don't need seed */
+ if (!ret->p || !ret->q || idx >= 0) {
+ if (seed_len == 0)
+ seed_len = mdsize;
+
+ seed = OPENSSL_malloc(seed_len);
+
+ if (seed_out)
+ seed_tmp = seed_out;
+ else
+ seed_tmp = OPENSSL_malloc(seed_len);
+
+ if (!seed || !seed_tmp)
+ goto err;
+
+ if (seed_in)
+ memcpy(seed, seed_in, seed_len);
+
+ }
+
+ if ((ctx = BN_CTX_new()) == NULL)
+ goto err;
+
+ if ((mont = BN_MONT_CTX_new()) == NULL)
+ goto err;
+
+ BN_CTX_start(ctx);
+ r0 = BN_CTX_get(ctx);
+ g = BN_CTX_get(ctx);
+ W = BN_CTX_get(ctx);
+ X = BN_CTX_get(ctx);
+ c = BN_CTX_get(ctx);
+ test = BN_CTX_get(ctx);
+
+ /* if p, q already supplied generate g only */
+ if (ret->p && ret->q) {
+ p = ret->p;
+ q = ret->q;
+ if (idx >= 0)
+ memcpy(seed_tmp, seed, seed_len);
+ goto g_only;
+ } else {
+ p = BN_CTX_get(ctx);
+ q = BN_CTX_get(ctx);
+ }
+
+ if (!BN_lshift(test, BN_value_one(), L - 1))
+ goto err;
+ for (;;) {
+ for (;;) { /* find q */
+ unsigned char *pmd;
+ /* step 1 */
+ if (!BN_GENCB_call(cb, 0, m++))
+ goto err;
+
+ if (!seed_in) {
+ if (RAND_pseudo_bytes(seed, seed_len) < 0)
+ goto err;
+ }
+ /* step 2 */
+ if (!EVP_Digest(seed, seed_len, md, NULL, evpmd, NULL))
+ goto err;
+ /* Take least significant bits of md */
+ if (mdsize > qsize)
+ pmd = md + mdsize - qsize;
+ else
+ pmd = md;
+
+ if (mdsize < qsize)
+ memset(md + mdsize, 0, qsize - mdsize);
+
+ /* step 3 */
+ pmd[0] |= 0x80;
+ pmd[qsize - 1] |= 0x01;
+ if (!BN_bin2bn(pmd, qsize, q))
+ goto err;
+
+ /* step 4 */
+ r = BN_is_prime_fasttest_ex(q, DSS_prime_checks, ctx,
+ seed_in ? 1 : 0, cb);
+ if (r > 0)
+ break;
+ if (r != 0)
+ goto err;
+ /* Provided seed didn't produce a prime: error */
+ if (seed_in) {
+ ok = 0;
+ DSAerr(DSA_F_DSA_BUILTIN_PARAMGEN2, DSA_R_Q_NOT_PRIME);
+ goto err;
+ }
+
+ /* do a callback call */
+ /* step 5 */
+ }
+ /* Copy seed to seed_out before we mess with it */
+ if (seed_out)
+ memcpy(seed_out, seed, seed_len);
+
+ if (!BN_GENCB_call(cb, 2, 0))
+ goto err;
+ if (!BN_GENCB_call(cb, 3, 0))
+ goto err;
+
+ /* step 6 */
+ counter = 0;
+ /* "offset = 1" */
+
+ n = (L - 1) / (mdsize << 3);
+
+ for (;;) {
+ if ((counter != 0) && !BN_GENCB_call(cb, 0, counter))
+ goto err;
+
+ /* step 7 */
+ BN_zero(W);
+ /* now 'buf' contains "SEED + offset - 1" */
+ for (k = 0; k <= n; k++) {
+ /*
+ * obtain "SEED + offset + k" by incrementing:
+ */
+ for (i = seed_len - 1; i >= 0; i--) {
+ seed[i]++;
+ if (seed[i] != 0)
+ break;
+ }
+
+ if (!EVP_Digest(seed, seed_len, md, NULL, evpmd, NULL))
+ goto err;
+
+ /* step 8 */
+ if (!BN_bin2bn(md, mdsize, r0))
+ goto err;
+ if (!BN_lshift(r0, r0, (mdsize << 3) * k))
+ goto err;
+ if (!BN_add(W, W, r0))
+ goto err;
+ }
+
+ /* more of step 8 */
+ if (!BN_mask_bits(W, L - 1))
+ goto err;
+ if (!BN_copy(X, W))
+ goto err;
+ if (!BN_add(X, X, test))
+ goto err;
+
+ /* step 9 */
+ if (!BN_lshift1(r0, q))
+ goto err;
+ if (!BN_mod(c, X, r0, ctx))
+ goto err;
+ if (!BN_sub(r0, c, BN_value_one()))
+ goto err;
+ if (!BN_sub(p, X, r0))
+ goto err;
+
+ /* step 10 */
+ if (BN_cmp(p, test) >= 0) {
+ /* step 11 */
+ r = BN_is_prime_fasttest_ex(p, DSS_prime_checks, ctx, 1, cb);
+ if (r > 0)
+ goto end; /* found it */
+ if (r != 0)
+ goto err;
+ }
+
+ /* step 13 */
+ counter++;
+ /* "offset = offset + n + 1" */
+
+ /* step 14 */
+ if (counter >= (int)(4 * L))
+ break;
+ }
+ if (seed_in) {
+ ok = 0;
+ DSAerr(DSA_F_DSA_BUILTIN_PARAMGEN2, DSA_R_INVALID_PARAMETERS);
+ goto err;
+ }
+ }
+ end:
+ if (!BN_GENCB_call(cb, 2, 1))
+ goto err;
+
+ g_only:
+
+ /* We now need to generate g */
+ /* Set r0=(p-1)/q */
+ if (!BN_sub(test, p, BN_value_one()))
+ goto err;
+ if (!BN_div(r0, NULL, test, q, ctx))
+ goto err;
+
+ if (idx < 0) {
+ if (!BN_set_word(test, h))
+ goto err;
+ } else
+ h = 1;
+ if (!BN_MONT_CTX_set(mont, p, ctx))
+ goto err;
+
+ for (;;) {
+ static const unsigned char ggen[4] = { 0x67, 0x67, 0x65, 0x6e };
+ if (idx >= 0) {
+ md[0] = idx & 0xff;
+ md[1] = (h >> 8) & 0xff;
+ md[2] = h & 0xff;
+ if (!EVP_DigestInit_ex(&mctx, evpmd, NULL))
+ goto err;
+ if (!EVP_DigestUpdate(&mctx, seed_tmp, seed_len))
+ goto err;
+ if (!EVP_DigestUpdate(&mctx, ggen, sizeof(ggen)))
+ goto err;
+ if (!EVP_DigestUpdate(&mctx, md, 3))
+ goto err;
+ if (!EVP_DigestFinal_ex(&mctx, md, NULL))
+ goto err;
+ if (!BN_bin2bn(md, mdsize, test))
+ goto err;
+ }
+ /* g=test^r0%p */
+ if (!BN_mod_exp_mont(g, test, r0, p, ctx, mont))
+ goto err;
+ if (!BN_is_one(g))
+ break;
+ if (idx < 0 && !BN_add(test, test, BN_value_one()))
+ goto err;
+ h++;
+ if (idx >= 0 && h > 0xffff)
+ goto err;
+ }
+
+ if (!BN_GENCB_call(cb, 3, 1))
+ goto err;
+
+ ok = 1;
+ err:
+ if (ok == 1) {
+ if (p != ret->p) {
+ if (ret->p)
+ BN_free(ret->p);
+ ret->p = BN_dup(p);
+ }
+ if (q != ret->q) {
+ if (ret->q)
+ BN_free(ret->q);
+ ret->q = BN_dup(q);
+ }
+ if (ret->g)
+ BN_free(ret->g);
+ ret->g = BN_dup(g);
+ if (ret->p == NULL || ret->q == NULL || ret->g == NULL) {
+ ok = -1;
+ goto err;
+ }
+ if (counter_ret != NULL)
+ *counter_ret = counter;
+ if (h_ret != NULL)
+ *h_ret = h;
+ }
+ if (seed)
+ OPENSSL_free(seed);
+ if (seed_out != seed_tmp)
+ OPENSSL_free(seed_tmp);
+ if (ctx) {
+ BN_CTX_end(ctx);
+ BN_CTX_free(ctx);
+ }
+ if (mont != NULL)
+ BN_MONT_CTX_free(mont);
+ EVP_MD_CTX_cleanup(&mctx);
+ return ok;
+}
+
+int dsa_paramgen_check_g(DSA *dsa)
+{
+ BN_CTX *ctx;
+ BIGNUM *tmp;
+ BN_MONT_CTX *mont = NULL;
+ int rv = -1;
+ ctx = BN_CTX_new();
+ if (!ctx)
+ return -1;
+ BN_CTX_start(ctx);
+ if (BN_cmp(dsa->g, BN_value_one()) <= 0)
+ return 0;
+ if (BN_cmp(dsa->g, dsa->p) >= 0)
+ return 0;
+ tmp = BN_CTX_get(ctx);
+ if (!tmp)
+ goto err;
+ if ((mont = BN_MONT_CTX_new()) == NULL)
+ goto err;
+ if (!BN_MONT_CTX_set(mont, dsa->p, ctx))
+ goto err;
+ /* Work out g^q mod p */
+ if (!BN_mod_exp_mont(tmp, dsa->g, dsa->q, dsa->p, ctx, mont))
+ goto err;
+ if (!BN_cmp(tmp, BN_value_one()))
+ rv = 1;
+ else
+ rv = 0;
+ err:
+ BN_CTX_end(ctx);
+ if (mont)
+ BN_MONT_CTX_free(mont);
+ BN_CTX_free(ctx);
+ return rv;
+
+}
#endif
diff --git a/crypto/openssl/crypto/dsa/dsa_locl.h b/crypto/openssl/crypto/dsa/dsa_locl.h
index f32ee96..9c23c3e 100644
--- a/crypto/openssl/crypto/dsa/dsa_locl.h
+++ b/crypto/openssl/crypto/dsa/dsa_locl.h
@@ -59,3 +59,11 @@ int dsa_builtin_paramgen(DSA *ret, size_t bits, size_t qbits,
size_t seed_len, unsigned char *seed_out,
int *counter_ret, unsigned long *h_ret,
BN_GENCB *cb);
+
+int dsa_builtin_paramgen2(DSA *ret, size_t L, size_t N,
+ const EVP_MD *evpmd, const unsigned char *seed_in,
+ size_t seed_len, int idx, unsigned char *seed_out,
+ int *counter_ret, unsigned long *h_ret,
+ BN_GENCB *cb);
+
+int dsa_paramgen_check_g(DSA *dsa);
diff --git a/crypto/openssl/crypto/dsa/dsa_ossl.c b/crypto/openssl/crypto/dsa/dsa_ossl.c
index 6edb26d..f0ec8fa 100644
--- a/crypto/openssl/crypto/dsa/dsa_ossl.c
+++ b/crypto/openssl/crypto/dsa/dsa_ossl.c
@@ -398,11 +398,7 @@ static int dsa_do_verify(const unsigned char *dgst, int dgst_len,
ret = (BN_ucmp(&u1, sig->r) == 0);
err:
- /*
- * XXX: surely this is wrong - if ret is 0, it just didn't verify; there
- * is no error in BN. Test should be ret == -1 (Ben)
- */
- if (ret != 1)
+ if (ret < 0)
DSAerr(DSA_F_DSA_DO_VERIFY, ERR_R_BN_LIB);
if (ctx != NULL)
BN_CTX_free(ctx);
diff --git a/crypto/openssl/crypto/dsa/dsa_pmeth.c b/crypto/openssl/crypto/dsa/dsa_pmeth.c
index 0d480f6..42b8bb0 100644
--- a/crypto/openssl/crypto/dsa/dsa_pmeth.c
+++ b/crypto/openssl/crypto/dsa/dsa_pmeth.c
@@ -197,6 +197,10 @@ static int pkey_dsa_ctrl(EVP_PKEY_CTX *ctx, int type, int p1, void *p2)
dctx->md = p2;
return 1;
+ case EVP_PKEY_CTRL_GET_MD:
+ *(const EVP_MD **)p2 = dctx->md;
+ return 1;
+
case EVP_PKEY_CTRL_DIGESTINIT:
case EVP_PKEY_CTRL_PKCS7_SIGN:
case EVP_PKEY_CTRL_CMS_SIGN:
diff --git a/crypto/openssl/crypto/ebcdic.c b/crypto/openssl/crypto/ebcdic.c
index 4b7652c..fd6df92 100644
--- a/crypto/openssl/crypto/ebcdic.c
+++ b/crypto/openssl/crypto/ebcdic.c
@@ -3,7 +3,7 @@
#ifndef CHARSET_EBCDIC
# include <openssl/e_os2.h>
-# if defined(PEDANTIC) || defined(__DECC) || defined(OPENSSL_SYS_MACOSX)
+# if defined(PEDANTIC) || defined(__DECC) || defined(OPENSSL_SYS_MACOSX) || defined(__clang__)
static void *dummy = &dummy;
# endif
diff --git a/crypto/openssl/crypto/ec/Makefile b/crypto/openssl/crypto/ec/Makefile
index 2753b28..359ef4e 100644
--- a/crypto/openssl/crypto/ec/Makefile
+++ b/crypto/openssl/crypto/ec/Makefile
@@ -11,6 +11,8 @@ MAKEFILE= Makefile
AR= ar r
CFLAGS= $(INCLUDES) $(CFLAG)
+ASFLAGS= $(INCLUDES) $(ASFLAG)
+AFLAGS= $(ASFLAGS)
GENERAL=Makefile
TEST=ectest.c
@@ -27,7 +29,7 @@ LIBOBJ= ec_lib.o ecp_smpl.o ecp_mont.o ecp_nist.o ec_cvt.o ec_mult.o\
ec_err.o ec_curve.o ec_check.o ec_print.o ec_asn1.o ec_key.o\
ec2_smpl.o ec2_mult.o ec_ameth.o ec_pmeth.o eck_prn.o \
ecp_nistp224.o ecp_nistp256.o ecp_nistp521.o ecp_nistputil.o \
- ecp_oct.o ec2_oct.o ec_oct.o
+ ecp_oct.o ec2_oct.o ec_oct.o $(EC_ASM)
SRC= $(LIBSRC)
@@ -46,6 +48,12 @@ lib: $(LIBOBJ)
$(RANLIB) $(LIB) || echo Never mind.
@touch lib
+ecp_nistz256-x86_64.s: asm/ecp_nistz256-x86_64.pl
+ $(PERL) asm/ecp_nistz256-x86_64.pl $(PERLASM_SCHEME) > $@
+
+ecp_nistz256-avx2.s: asm/ecp_nistz256-avx2.pl
+ $(PERL) asm/ecp_nistz256-avx2.pl $(PERLASM_SCHEME) > $@
+
files:
$(PERL) $(TOP)/util/files.pl Makefile >> $(TOP)/MINFO
@@ -110,14 +118,14 @@ ec2_smpl.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
ec2_smpl.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h
ec2_smpl.o: ../../include/openssl/symhacks.h ec2_smpl.c ec_lcl.h
ec_ameth.o: ../../e_os.h ../../include/openssl/asn1.h
-ec_ameth.o: ../../include/openssl/bio.h ../../include/openssl/bn.h
-ec_ameth.o: ../../include/openssl/buffer.h ../../include/openssl/cms.h
-ec_ameth.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
-ec_ameth.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
-ec_ameth.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
-ec_ameth.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h
-ec_ameth.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
-ec_ameth.o: ../../include/openssl/opensslconf.h
+ec_ameth.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h
+ec_ameth.o: ../../include/openssl/bn.h ../../include/openssl/buffer.h
+ec_ameth.o: ../../include/openssl/cms.h ../../include/openssl/crypto.h
+ec_ameth.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
+ec_ameth.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
+ec_ameth.o: ../../include/openssl/err.h ../../include/openssl/evp.h
+ec_ameth.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
+ec_ameth.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
ec_ameth.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
ec_ameth.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
ec_ameth.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
@@ -198,18 +206,19 @@ ec_oct.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h
ec_oct.o: ../../include/openssl/symhacks.h ec_lcl.h ec_oct.c
ec_pmeth.o: ../../e_os.h ../../include/openssl/asn1.h
ec_pmeth.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h
-ec_pmeth.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
-ec_pmeth.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
-ec_pmeth.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
-ec_pmeth.o: ../../include/openssl/err.h ../../include/openssl/evp.h
-ec_pmeth.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
-ec_pmeth.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
+ec_pmeth.o: ../../include/openssl/bn.h ../../include/openssl/buffer.h
+ec_pmeth.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
+ec_pmeth.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
+ec_pmeth.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
+ec_pmeth.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h
+ec_pmeth.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
+ec_pmeth.o: ../../include/openssl/opensslconf.h
ec_pmeth.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
ec_pmeth.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
ec_pmeth.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
ec_pmeth.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h
ec_pmeth.o: ../../include/openssl/x509_vfy.h ../cryptlib.h ../evp/evp_locl.h
-ec_pmeth.o: ec_pmeth.c
+ec_pmeth.o: ec_lcl.h ec_pmeth.c
ec_print.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h
ec_print.o: ../../include/openssl/bn.h ../../include/openssl/crypto.h
ec_print.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
diff --git a/crypto/openssl/crypto/ec/asm/ecp_nistz256-avx2.pl b/crypto/openssl/crypto/ec/asm/ecp_nistz256-avx2.pl
new file mode 100755
index 0000000..4c220aa
--- /dev/null
+++ b/crypto/openssl/crypto/ec/asm/ecp_nistz256-avx2.pl
@@ -0,0 +1,2093 @@
+#!/usr/bin/env perl
+
+##############################################################################
+# #
+# Copyright 2014 Intel Corporation #
+# #
+# Licensed under the Apache License, Version 2.0 (the "License"); #
+# you may not use this file except in compliance with the License. #
+# You may obtain a copy of the License at #
+# #
+# http://www.apache.org/licenses/LICENSE-2.0 #
+# #
+# Unless required by applicable law or agreed to in writing, software #
+# distributed under the License is distributed on an "AS IS" BASIS, #
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. #
+# See the License for the specific language governing permissions and #
+# limitations under the License. #
+# #
+##############################################################################
+# #
+# Developers and authors: #
+# Shay Gueron (1, 2), and Vlad Krasnov (1) #
+# (1) Intel Corporation, Israel Development Center #
+# (2) University of Haifa #
+# Reference: #
+# S.Gueron and V.Krasnov, "Fast Prime Field Elliptic Curve Cryptography with#
+# 256 Bit Primes" #
+# #
+##############################################################################
+
+$flavour = shift;
+$output = shift;
+if ($flavour =~ /\./) { $output = $flavour; undef $flavour; }
+
+$win64=0; $win64=1 if ($flavour =~ /[nm]asm|mingw64/ || $output =~ /\.asm$/);
+
+$0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1;
+( $xlate="${dir}x86_64-xlate.pl" and -f $xlate ) or
+( $xlate="${dir}../../perlasm/x86_64-xlate.pl" and -f $xlate) or
+die "can't locate x86_64-xlate.pl";
+
+open OUT,"| \"$^X\" $xlate $flavour $output";
+*STDOUT=*OUT;
+
+if (`$ENV{CC} -Wa,-v -c -o /dev/null -x assembler /dev/null 2>&1`
+ =~ /GNU assembler version ([2-9]\.[0-9]+)/) {
+ $avx = ($1>=2.19) + ($1>=2.22);
+ $addx = ($1>=2.23);
+}
+
+if (!$addx && $win64 && ($flavour =~ /nasm/ || $ENV{ASM} =~ /nasm/) &&
+ `nasm -v 2>&1` =~ /NASM version ([2-9]\.[0-9]+)/) {
+ $avx = ($1>=2.09) + ($1>=2.10);
+ $addx = ($1>=2.10);
+}
+
+if (!$addx && $win64 && ($flavour =~ /masm/ || $ENV{ASM} =~ /ml64/) &&
+ `ml64 2>&1` =~ /Version ([0-9]+)\./) {
+ $avx = ($1>=10) + ($1>=11);
+ $addx = ($1>=12);
+}
+
+if (!$addx && `$ENV{CC} -v 2>&1` =~ /(^clang version|based on LLVM) ([3-9])\.([0-9]+)/) {
+ my $ver = $2 + $3/100.0; # 3.1->3.01, 3.10->3.10
+ $avx = ($ver>=3.0) + ($ver>=3.01);
+ $addx = ($ver>=3.03);
+}
+
+if ($avx>=2) {{
+$digit_size = "\$29";
+$n_digits = "\$9";
+
+$code.=<<___;
+.text
+
+.align 64
+.LAVX2_AND_MASK:
+.LAVX2_POLY:
+.quad 0x1fffffff, 0x1fffffff, 0x1fffffff, 0x1fffffff
+.quad 0x1fffffff, 0x1fffffff, 0x1fffffff, 0x1fffffff
+.quad 0x1fffffff, 0x1fffffff, 0x1fffffff, 0x1fffffff
+.quad 0x000001ff, 0x000001ff, 0x000001ff, 0x000001ff
+.quad 0x00000000, 0x00000000, 0x00000000, 0x00000000
+.quad 0x00000000, 0x00000000, 0x00000000, 0x00000000
+.quad 0x00040000, 0x00040000, 0x00040000, 0x00040000
+.quad 0x1fe00000, 0x1fe00000, 0x1fe00000, 0x1fe00000
+.quad 0x00ffffff, 0x00ffffff, 0x00ffffff, 0x00ffffff
+
+.LAVX2_POLY_x2:
+.quad 0x7FFFFFFC, 0x7FFFFFFC, 0x7FFFFFFC, 0x7FFFFFFC
+.quad 0x7FFFFFFC, 0x7FFFFFFC, 0x7FFFFFFC, 0x7FFFFFFC
+.quad 0x7FFFFFFC, 0x7FFFFFFC, 0x7FFFFFFC, 0x7FFFFFFC
+.quad 0x400007FC, 0x400007FC, 0x400007FC, 0x400007FC
+.quad 0x3FFFFFFE, 0x3FFFFFFE, 0x3FFFFFFE, 0x3FFFFFFE
+.quad 0x3FFFFFFE, 0x3FFFFFFE, 0x3FFFFFFE, 0x3FFFFFFE
+.quad 0x400FFFFE, 0x400FFFFE, 0x400FFFFE, 0x400FFFFE
+.quad 0x7F7FFFFE, 0x7F7FFFFE, 0x7F7FFFFE, 0x7F7FFFFE
+.quad 0x03FFFFFC, 0x03FFFFFC, 0x03FFFFFC, 0x03FFFFFC
+
+.LAVX2_POLY_x8:
+.quad 0xFFFFFFF8, 0xFFFFFFF8, 0xFFFFFFF8, 0xFFFFFFF8
+.quad 0xFFFFFFF8, 0xFFFFFFF8, 0xFFFFFFF8, 0xFFFFFFF8
+.quad 0xFFFFFFF8, 0xFFFFFFF8, 0xFFFFFFF8, 0xFFFFFFF8
+.quad 0x80000FF8, 0x80000FF8, 0x80000FF8, 0x80000FF8
+.quad 0x7FFFFFFC, 0x7FFFFFFC, 0x7FFFFFFC, 0x7FFFFFFC
+.quad 0x7FFFFFFC, 0x7FFFFFFC, 0x7FFFFFFC, 0x7FFFFFFC
+.quad 0x801FFFFC, 0x801FFFFC, 0x801FFFFC, 0x801FFFFC
+.quad 0xFEFFFFFC, 0xFEFFFFFC, 0xFEFFFFFC, 0xFEFFFFFC
+.quad 0x07FFFFF8, 0x07FFFFF8, 0x07FFFFF8, 0x07FFFFF8
+
+.LONE:
+.quad 0x00000020, 0x00000020, 0x00000020, 0x00000020
+.quad 0x00000000, 0x00000000, 0x00000000, 0x00000000
+.quad 0x00000000, 0x00000000, 0x00000000, 0x00000000
+.quad 0x1fffc000, 0x1fffc000, 0x1fffc000, 0x1fffc000
+.quad 0x1fffffff, 0x1fffffff, 0x1fffffff, 0x1fffffff
+.quad 0x1fffffff, 0x1fffffff, 0x1fffffff, 0x1fffffff
+.quad 0x1f7fffff, 0x1f7fffff, 0x1f7fffff, 0x1f7fffff
+.quad 0x03ffffff, 0x03ffffff, 0x03ffffff, 0x03ffffff
+.quad 0x00000000, 0x00000000, 0x00000000, 0x00000000
+
+# RR = 2^266 mod p in AVX2 format, to transform from the native OpenSSL
+# Montgomery form (*2^256) to our format (*2^261)
+
+.LTO_MONT_AVX2:
+.quad 0x00000400, 0x00000400, 0x00000400, 0x00000400
+.quad 0x00000000, 0x00000000, 0x00000000, 0x00000000
+.quad 0x00000000, 0x00000000, 0x00000000, 0x00000000
+.quad 0x1ff80000, 0x1ff80000, 0x1ff80000, 0x1ff80000
+.quad 0x1fffffff, 0x1fffffff, 0x1fffffff, 0x1fffffff
+.quad 0x1fffffff, 0x1fffffff, 0x1fffffff, 0x1fffffff
+.quad 0x0fffffff, 0x0fffffff, 0x0fffffff, 0x0fffffff
+.quad 0x1fffffff, 0x1fffffff, 0x1fffffff, 0x1fffffff
+.quad 0x00000003, 0x00000003, 0x00000003, 0x00000003
+
+.LFROM_MONT_AVX2:
+.quad 0x00000001, 0x00000001, 0x00000001, 0x00000001
+.quad 0x00000000, 0x00000000, 0x00000000, 0x00000000
+.quad 0x00000000, 0x00000000, 0x00000000, 0x00000000
+.quad 0x1ffffe00, 0x1ffffe00, 0x1ffffe00, 0x1ffffe00
+.quad 0x1fffffff, 0x1fffffff, 0x1fffffff, 0x1fffffff
+.quad 0x1fffffff, 0x1fffffff, 0x1fffffff, 0x1fffffff
+.quad 0x1ffbffff, 0x1ffbffff, 0x1ffbffff, 0x1ffbffff
+.quad 0x001fffff, 0x001fffff, 0x001fffff, 0x001fffff
+.quad 0x00000000, 0x00000000, 0x00000000, 0x00000000
+
+.LIntOne:
+.long 1,1,1,1,1,1,1,1
+___
+
+{
+# This function recieves a pointer to an array of four affine points
+# (X, Y, <1>) and rearanges the data for AVX2 execution, while
+# converting it to 2^29 radix redundant form
+
+my ($X0,$X1,$X2,$X3, $Y0,$Y1,$Y2,$Y3,
+ $T0,$T1,$T2,$T3, $T4,$T5,$T6,$T7)=map("%ymm$_",(0..15));
+
+$code.=<<___;
+.globl ecp_nistz256_avx2_transpose_convert
+.type ecp_nistz256_avx2_transpose_convert,\@function,2
+.align 64
+ecp_nistz256_avx2_transpose_convert:
+ vzeroupper
+___
+$code.=<<___ if ($win64);
+ lea -8-16*10(%rsp), %rsp
+ vmovaps %xmm6, -8-16*10(%rax)
+ vmovaps %xmm7, -8-16*9(%rax)
+ vmovaps %xmm8, -8-16*8(%rax)
+ vmovaps %xmm9, -8-16*7(%rax)
+ vmovaps %xmm10, -8-16*6(%rax)
+ vmovaps %xmm11, -8-16*5(%rax)
+ vmovaps %xmm12, -8-16*4(%rax)
+ vmovaps %xmm13, -8-16*3(%rax)
+ vmovaps %xmm14, -8-16*2(%rax)
+ vmovaps %xmm15, -8-16*1(%rax)
+___
+$code.=<<___;
+ # Load the data
+ vmovdqa 32*0(%rsi), $X0
+ lea 112(%rsi), %rax # size optimization
+ vmovdqa 32*1(%rsi), $Y0
+ lea .LAVX2_AND_MASK(%rip), %rdx
+ vmovdqa 32*2(%rsi), $X1
+ vmovdqa 32*3(%rsi), $Y1
+ vmovdqa 32*4-112(%rax), $X2
+ vmovdqa 32*5-112(%rax), $Y2
+ vmovdqa 32*6-112(%rax), $X3
+ vmovdqa 32*7-112(%rax), $Y3
+
+ # Transpose X and Y independently
+ vpunpcklqdq $X1, $X0, $T0 # T0 = [B2 A2 B0 A0]
+ vpunpcklqdq $X3, $X2, $T1 # T1 = [D2 C2 D0 C0]
+ vpunpckhqdq $X1, $X0, $T2 # T2 = [B3 A3 B1 A1]
+ vpunpckhqdq $X3, $X2, $T3 # T3 = [D3 C3 D1 C1]
+
+ vpunpcklqdq $Y1, $Y0, $T4
+ vpunpcklqdq $Y3, $Y2, $T5
+ vpunpckhqdq $Y1, $Y0, $T6
+ vpunpckhqdq $Y3, $Y2, $T7
+
+ vperm2i128 \$0x20, $T1, $T0, $X0 # X0 = [D0 C0 B0 A0]
+ vperm2i128 \$0x20, $T3, $T2, $X1 # X1 = [D1 C1 B1 A1]
+ vperm2i128 \$0x31, $T1, $T0, $X2 # X2 = [D2 C2 B2 A2]
+ vperm2i128 \$0x31, $T3, $T2, $X3 # X3 = [D3 C3 B3 A3]
+
+ vperm2i128 \$0x20, $T5, $T4, $Y0
+ vperm2i128 \$0x20, $T7, $T6, $Y1
+ vperm2i128 \$0x31, $T5, $T4, $Y2
+ vperm2i128 \$0x31, $T7, $T6, $Y3
+ vmovdqa (%rdx), $T7
+
+ vpand (%rdx), $X0, $T0 # out[0] = in[0] & mask;
+ vpsrlq \$29, $X0, $X0
+ vpand $T7, $X0, $T1 # out[1] = (in[0] >> shift) & mask;
+ vpsrlq \$29, $X0, $X0
+ vpsllq \$6, $X1, $T2
+ vpxor $X0, $T2, $T2
+ vpand $T7, $T2, $T2 # out[2] = ((in[0] >> (shift*2)) ^ (in[1] << (64-shift*2))) & mask;
+ vpsrlq \$23, $X1, $X1
+ vpand $T7, $X1, $T3 # out[3] = (in[1] >> ((shift*3)%64)) & mask;
+ vpsrlq \$29, $X1, $X1
+ vpsllq \$12, $X2, $T4
+ vpxor $X1, $T4, $T4
+ vpand $T7, $T4, $T4 # out[4] = ((in[1] >> ((shift*4)%64)) ^ (in[2] << (64*2-shift*4))) & mask;
+ vpsrlq \$17, $X2, $X2
+ vpand $T7, $X2, $T5 # out[5] = (in[2] >> ((shift*5)%64)) & mask;
+ vpsrlq \$29, $X2, $X2
+ vpsllq \$18, $X3, $T6
+ vpxor $X2, $T6, $T6
+ vpand $T7, $T6, $T6 # out[6] = ((in[2] >> ((shift*6)%64)) ^ (in[3] << (64*3-shift*6))) & mask;
+ vpsrlq \$11, $X3, $X3
+ vmovdqa $T0, 32*0(%rdi)
+ lea 112(%rdi), %rax # size optimization
+ vpand $T7, $X3, $T0 # out[7] = (in[3] >> ((shift*7)%64)) & mask;
+ vpsrlq \$29, $X3, $X3 # out[8] = (in[3] >> ((shift*8)%64)) & mask;
+
+ vmovdqa $T1, 32*1(%rdi)
+ vmovdqa $T2, 32*2(%rdi)
+ vmovdqa $T3, 32*3(%rdi)
+ vmovdqa $T4, 32*4-112(%rax)
+ vmovdqa $T5, 32*5-112(%rax)
+ vmovdqa $T6, 32*6-112(%rax)
+ vmovdqa $T0, 32*7-112(%rax)
+ vmovdqa $X3, 32*8-112(%rax)
+ lea 448(%rdi), %rax # size optimization
+
+ vpand $T7, $Y0, $T0 # out[0] = in[0] & mask;
+ vpsrlq \$29, $Y0, $Y0
+ vpand $T7, $Y0, $T1 # out[1] = (in[0] >> shift) & mask;
+ vpsrlq \$29, $Y0, $Y0
+ vpsllq \$6, $Y1, $T2
+ vpxor $Y0, $T2, $T2
+ vpand $T7, $T2, $T2 # out[2] = ((in[0] >> (shift*2)) ^ (in[1] << (64-shift*2))) & mask;
+ vpsrlq \$23, $Y1, $Y1
+ vpand $T7, $Y1, $T3 # out[3] = (in[1] >> ((shift*3)%64)) & mask;
+ vpsrlq \$29, $Y1, $Y1
+ vpsllq \$12, $Y2, $T4
+ vpxor $Y1, $T4, $T4
+ vpand $T7, $T4, $T4 # out[4] = ((in[1] >> ((shift*4)%64)) ^ (in[2] << (64*2-shift*4))) & mask;
+ vpsrlq \$17, $Y2, $Y2
+ vpand $T7, $Y2, $T5 # out[5] = (in[2] >> ((shift*5)%64)) & mask;
+ vpsrlq \$29, $Y2, $Y2
+ vpsllq \$18, $Y3, $T6
+ vpxor $Y2, $T6, $T6
+ vpand $T7, $T6, $T6 # out[6] = ((in[2] >> ((shift*6)%64)) ^ (in[3] << (64*3-shift*6))) & mask;
+ vpsrlq \$11, $Y3, $Y3
+ vmovdqa $T0, 32*9-448(%rax)
+ vpand $T7, $Y3, $T0 # out[7] = (in[3] >> ((shift*7)%64)) & mask;
+ vpsrlq \$29, $Y3, $Y3 # out[8] = (in[3] >> ((shift*8)%64)) & mask;
+
+ vmovdqa $T1, 32*10-448(%rax)
+ vmovdqa $T2, 32*11-448(%rax)
+ vmovdqa $T3, 32*12-448(%rax)
+ vmovdqa $T4, 32*13-448(%rax)
+ vmovdqa $T5, 32*14-448(%rax)
+ vmovdqa $T6, 32*15-448(%rax)
+ vmovdqa $T0, 32*16-448(%rax)
+ vmovdqa $Y3, 32*17-448(%rax)
+
+ vzeroupper
+___
+$code.=<<___ if ($win64);
+ movaps 16*0(%rsp), %xmm6
+ movaps 16*1(%rsp), %xmm7
+ movaps 16*2(%rsp), %xmm8
+ movaps 16*3(%rsp), %xmm9
+ movaps 16*4(%rsp), %xmm10
+ movaps 16*5(%rsp), %xmm11
+ movaps 16*6(%rsp), %xmm12
+ movaps 16*7(%rsp), %xmm13
+ movaps 16*8(%rsp), %xmm14
+ movaps 16*9(%rsp), %xmm15
+ lea 8+16*10(%rsp), %rsp
+___
+$code.=<<___;
+ ret
+.size ecp_nistz256_avx2_transpose_convert,.-ecp_nistz256_avx2_transpose_convert
+___
+}
+{
+################################################################################
+# This function recieves a pointer to an array of four AVX2 formatted points
+# (X, Y, Z) convert the data to normal representation, and rearanges the data
+
+my ($D0,$D1,$D2,$D3, $D4,$D5,$D6,$D7, $D8)=map("%ymm$_",(0..8));
+my ($T0,$T1,$T2,$T3, $T4,$T5,$T6)=map("%ymm$_",(9..15));
+
+$code.=<<___;
+
+.globl ecp_nistz256_avx2_convert_transpose_back
+.type ecp_nistz256_avx2_convert_transpose_back,\@function,2
+.align 32
+ecp_nistz256_avx2_convert_transpose_back:
+ vzeroupper
+___
+$code.=<<___ if ($win64);
+ lea -8-16*10(%rsp), %rsp
+ vmovaps %xmm6, -8-16*10(%rax)
+ vmovaps %xmm7, -8-16*9(%rax)
+ vmovaps %xmm8, -8-16*8(%rax)
+ vmovaps %xmm9, -8-16*7(%rax)
+ vmovaps %xmm10, -8-16*6(%rax)
+ vmovaps %xmm11, -8-16*5(%rax)
+ vmovaps %xmm12, -8-16*4(%rax)
+ vmovaps %xmm13, -8-16*3(%rax)
+ vmovaps %xmm14, -8-16*2(%rax)
+ vmovaps %xmm15, -8-16*1(%rax)
+___
+$code.=<<___;
+ mov \$3, %ecx
+
+.Lconv_loop:
+ vmovdqa 32*0(%rsi), $D0
+ lea 160(%rsi), %rax # size optimization
+ vmovdqa 32*1(%rsi), $D1
+ vmovdqa 32*2(%rsi), $D2
+ vmovdqa 32*3(%rsi), $D3
+ vmovdqa 32*4-160(%rax), $D4
+ vmovdqa 32*5-160(%rax), $D5
+ vmovdqa 32*6-160(%rax), $D6
+ vmovdqa 32*7-160(%rax), $D7
+ vmovdqa 32*8-160(%rax), $D8
+
+ vpsllq \$29, $D1, $D1
+ vpsllq \$58, $D2, $T0
+ vpaddq $D1, $D0, $D0
+ vpaddq $T0, $D0, $D0 # out[0] = (in[0]) ^ (in[1] << shift*1) ^ (in[2] << shift*2);
+
+ vpsrlq \$6, $D2, $D2
+ vpsllq \$23, $D3, $D3
+ vpsllq \$52, $D4, $T1
+ vpaddq $D2, $D3, $D3
+ vpaddq $D3, $T1, $D1 # out[1] = (in[2] >> (64*1-shift*2)) ^ (in[3] << shift*3%64) ^ (in[4] << shift*4%64);
+
+ vpsrlq \$12, $D4, $D4
+ vpsllq \$17, $D5, $D5
+ vpsllq \$46, $D6, $T2
+ vpaddq $D4, $D5, $D5
+ vpaddq $D5, $T2, $D2 # out[2] = (in[4] >> (64*2-shift*4)) ^ (in[5] << shift*5%64) ^ (in[6] << shift*6%64);
+
+ vpsrlq \$18, $D6, $D6
+ vpsllq \$11, $D7, $D7
+ vpsllq \$40, $D8, $T3
+ vpaddq $D6, $D7, $D7
+ vpaddq $D7, $T3, $D3 # out[3] = (in[6] >> (64*3-shift*6)) ^ (in[7] << shift*7%64) ^ (in[8] << shift*8%64);
+
+ vpunpcklqdq $D1, $D0, $T0 # T0 = [B2 A2 B0 A0]
+ vpunpcklqdq $D3, $D2, $T1 # T1 = [D2 C2 D0 C0]
+ vpunpckhqdq $D1, $D0, $T2 # T2 = [B3 A3 B1 A1]
+ vpunpckhqdq $D3, $D2, $T3 # T3 = [D3 C3 D1 C1]
+
+ vperm2i128 \$0x20, $T1, $T0, $D0 # X0 = [D0 C0 B0 A0]
+ vperm2i128 \$0x20, $T3, $T2, $D1 # X1 = [D1 C1 B1 A1]
+ vperm2i128 \$0x31, $T1, $T0, $D2 # X2 = [D2 C2 B2 A2]
+ vperm2i128 \$0x31, $T3, $T2, $D3 # X3 = [D3 C3 B3 A3]
+
+ vmovdqa $D0, 32*0(%rdi)
+ vmovdqa $D1, 32*3(%rdi)
+ vmovdqa $D2, 32*6(%rdi)
+ vmovdqa $D3, 32*9(%rdi)
+
+ lea 32*9(%rsi), %rsi
+ lea 32*1(%rdi), %rdi
+
+ dec %ecx
+ jnz .Lconv_loop
+
+ vzeroupper
+___
+$code.=<<___ if ($win64);
+ movaps 16*0(%rsp), %xmm6
+ movaps 16*1(%rsp), %xmm7
+ movaps 16*2(%rsp), %xmm8
+ movaps 16*3(%rsp), %xmm9
+ movaps 16*4(%rsp), %xmm10
+ movaps 16*5(%rsp), %xmm11
+ movaps 16*6(%rsp), %xmm12
+ movaps 16*7(%rsp), %xmm13
+ movaps 16*8(%rsp), %xmm14
+ movaps 16*9(%rsp), %xmm15
+ lea 8+16*10(%rsp), %rsp
+___
+$code.=<<___;
+ ret
+.size ecp_nistz256_avx2_convert_transpose_back,.-ecp_nistz256_avx2_convert_transpose_back
+___
+}
+{
+my ($r_ptr,$a_ptr,$b_ptr,$itr)=("%rdi","%rsi","%rdx","%ecx");
+my ($ACC0,$ACC1,$ACC2,$ACC3,$ACC4,$ACC5,$ACC6,$ACC7,$ACC8)=map("%ymm$_",(0..8));
+my ($B,$Y,$T0,$AND_MASK,$OVERFLOW)=map("%ymm$_",(9..13));
+
+sub NORMALIZE {
+my $ret=<<___;
+ vpsrlq $digit_size, $ACC0, $T0
+ vpand $AND_MASK, $ACC0, $ACC0
+ vpaddq $T0, $ACC1, $ACC1
+
+ vpsrlq $digit_size, $ACC1, $T0
+ vpand $AND_MASK, $ACC1, $ACC1
+ vpaddq $T0, $ACC2, $ACC2
+
+ vpsrlq $digit_size, $ACC2, $T0
+ vpand $AND_MASK, $ACC2, $ACC2
+ vpaddq $T0, $ACC3, $ACC3
+
+ vpsrlq $digit_size, $ACC3, $T0
+ vpand $AND_MASK, $ACC3, $ACC3
+ vpaddq $T0, $ACC4, $ACC4
+
+ vpsrlq $digit_size, $ACC4, $T0
+ vpand $AND_MASK, $ACC4, $ACC4
+ vpaddq $T0, $ACC5, $ACC5
+
+ vpsrlq $digit_size, $ACC5, $T0
+ vpand $AND_MASK, $ACC5, $ACC5
+ vpaddq $T0, $ACC6, $ACC6
+
+ vpsrlq $digit_size, $ACC6, $T0
+ vpand $AND_MASK, $ACC6, $ACC6
+ vpaddq $T0, $ACC7, $ACC7
+
+ vpsrlq $digit_size, $ACC7, $T0
+ vpand $AND_MASK, $ACC7, $ACC7
+ vpaddq $T0, $ACC8, $ACC8
+ #vpand $AND_MASK, $ACC8, $ACC8
+___
+ $ret;
+}
+
+sub STORE {
+my $ret=<<___;
+ vmovdqa $ACC0, 32*0(%rdi)
+ lea 160(%rdi), %rax # size optimization
+ vmovdqa $ACC1, 32*1(%rdi)
+ vmovdqa $ACC2, 32*2(%rdi)
+ vmovdqa $ACC3, 32*3(%rdi)
+ vmovdqa $ACC4, 32*4-160(%rax)
+ vmovdqa $ACC5, 32*5-160(%rax)
+ vmovdqa $ACC6, 32*6-160(%rax)
+ vmovdqa $ACC7, 32*7-160(%rax)
+ vmovdqa $ACC8, 32*8-160(%rax)
+___
+ $ret;
+}
+
+$code.=<<___;
+.type avx2_normalize,\@abi-omnipotent
+.align 32
+avx2_normalize:
+ vpsrlq $digit_size, $ACC0, $T0
+ vpand $AND_MASK, $ACC0, $ACC0
+ vpaddq $T0, $ACC1, $ACC1
+
+ vpsrlq $digit_size, $ACC1, $T0
+ vpand $AND_MASK, $ACC1, $ACC1
+ vpaddq $T0, $ACC2, $ACC2
+
+ vpsrlq $digit_size, $ACC2, $T0
+ vpand $AND_MASK, $ACC2, $ACC2
+ vpaddq $T0, $ACC3, $ACC3
+
+ vpsrlq $digit_size, $ACC3, $T0
+ vpand $AND_MASK, $ACC3, $ACC3
+ vpaddq $T0, $ACC4, $ACC4
+
+ vpsrlq $digit_size, $ACC4, $T0
+ vpand $AND_MASK, $ACC4, $ACC4
+ vpaddq $T0, $ACC5, $ACC5
+
+ vpsrlq $digit_size, $ACC5, $T0
+ vpand $AND_MASK, $ACC5, $ACC5
+ vpaddq $T0, $ACC6, $ACC6
+
+ vpsrlq $digit_size, $ACC6, $T0
+ vpand $AND_MASK, $ACC6, $ACC6
+ vpaddq $T0, $ACC7, $ACC7
+
+ vpsrlq $digit_size, $ACC7, $T0
+ vpand $AND_MASK, $ACC7, $ACC7
+ vpaddq $T0, $ACC8, $ACC8
+ #vpand $AND_MASK, $ACC8, $ACC8
+
+ ret
+.size avx2_normalize,.-avx2_normalize
+
+.type avx2_normalize_n_store,\@abi-omnipotent
+.align 32
+avx2_normalize_n_store:
+ vpsrlq $digit_size, $ACC0, $T0
+ vpand $AND_MASK, $ACC0, $ACC0
+ vpaddq $T0, $ACC1, $ACC1
+
+ vpsrlq $digit_size, $ACC1, $T0
+ vpand $AND_MASK, $ACC1, $ACC1
+ vmovdqa $ACC0, 32*0(%rdi)
+ lea 160(%rdi), %rax # size optimization
+ vpaddq $T0, $ACC2, $ACC2
+
+ vpsrlq $digit_size, $ACC2, $T0
+ vpand $AND_MASK, $ACC2, $ACC2
+ vmovdqa $ACC1, 32*1(%rdi)
+ vpaddq $T0, $ACC3, $ACC3
+
+ vpsrlq $digit_size, $ACC3, $T0
+ vpand $AND_MASK, $ACC3, $ACC3
+ vmovdqa $ACC2, 32*2(%rdi)
+ vpaddq $T0, $ACC4, $ACC4
+
+ vpsrlq $digit_size, $ACC4, $T0
+ vpand $AND_MASK, $ACC4, $ACC4
+ vmovdqa $ACC3, 32*3(%rdi)
+ vpaddq $T0, $ACC5, $ACC5
+
+ vpsrlq $digit_size, $ACC5, $T0
+ vpand $AND_MASK, $ACC5, $ACC5
+ vmovdqa $ACC4, 32*4-160(%rax)
+ vpaddq $T0, $ACC6, $ACC6
+
+ vpsrlq $digit_size, $ACC6, $T0
+ vpand $AND_MASK, $ACC6, $ACC6
+ vmovdqa $ACC5, 32*5-160(%rax)
+ vpaddq $T0, $ACC7, $ACC7
+
+ vpsrlq $digit_size, $ACC7, $T0
+ vpand $AND_MASK, $ACC7, $ACC7
+ vmovdqa $ACC6, 32*6-160(%rax)
+ vpaddq $T0, $ACC8, $ACC8
+ #vpand $AND_MASK, $ACC8, $ACC8
+ vmovdqa $ACC7, 32*7-160(%rax)
+ vmovdqa $ACC8, 32*8-160(%rax)
+
+ ret
+.size avx2_normalize_n_store,.-avx2_normalize_n_store
+
+################################################################################
+# void avx2_mul_x4(void* RESULTx4, void *Ax4, void *Bx4);
+.type avx2_mul_x4,\@abi-omnipotent
+.align 32
+avx2_mul_x4:
+ lea .LAVX2_POLY(%rip), %rax
+
+ vpxor $ACC0, $ACC0, $ACC0
+ vpxor $ACC1, $ACC1, $ACC1
+ vpxor $ACC2, $ACC2, $ACC2
+ vpxor $ACC3, $ACC3, $ACC3
+ vpxor $ACC4, $ACC4, $ACC4
+ vpxor $ACC5, $ACC5, $ACC5
+ vpxor $ACC6, $ACC6, $ACC6
+ vpxor $ACC7, $ACC7, $ACC7
+
+ vmovdqa 32*7(%rax), %ymm14
+ vmovdqa 32*8(%rax), %ymm15
+
+ mov $n_digits, $itr
+ lea -512($a_ptr), $a_ptr # strategic bias to control u-op density
+ jmp .Lavx2_mul_x4_loop
+
+.align 32
+.Lavx2_mul_x4_loop:
+ vmovdqa 32*0($b_ptr), $B
+ lea 32*1($b_ptr), $b_ptr
+
+ vpmuludq 32*0+512($a_ptr), $B, $T0
+ vpmuludq 32*1+512($a_ptr), $B, $OVERFLOW # borrow $OVERFLOW
+ vpaddq $T0, $ACC0, $ACC0
+ vpmuludq 32*2+512($a_ptr), $B, $T0
+ vpaddq $OVERFLOW, $ACC1, $ACC1
+ vpand $AND_MASK, $ACC0, $Y
+ vpmuludq 32*3+512($a_ptr), $B, $OVERFLOW
+ vpaddq $T0, $ACC2, $ACC2
+ vpmuludq 32*4+512($a_ptr), $B, $T0
+ vpaddq $OVERFLOW, $ACC3, $ACC3
+ vpmuludq 32*5+512($a_ptr), $B, $OVERFLOW
+ vpaddq $T0, $ACC4, $ACC4
+ vpmuludq 32*6+512($a_ptr), $B, $T0
+ vpaddq $OVERFLOW, $ACC5, $ACC5
+ vpmuludq 32*7+512($a_ptr), $B, $OVERFLOW
+ vpaddq $T0, $ACC6, $ACC6
+
+ # Skip some multiplications, optimizing for the constant poly
+ vpmuludq $AND_MASK, $Y, $T0
+ vpaddq $OVERFLOW, $ACC7, $ACC7
+ vpmuludq 32*8+512($a_ptr), $B, $ACC8
+ vpaddq $T0, $ACC0, $OVERFLOW
+ vpaddq $T0, $ACC1, $ACC0
+ vpsrlq $digit_size, $OVERFLOW, $OVERFLOW
+ vpaddq $T0, $ACC2, $ACC1
+ vpmuludq 32*3(%rax), $Y, $T0
+ vpaddq $OVERFLOW, $ACC0, $ACC0
+ vpaddq $T0, $ACC3, $ACC2
+ .byte 0x67
+ vmovdqa $ACC4, $ACC3
+ vpsllq \$18, $Y, $OVERFLOW
+ .byte 0x67
+ vmovdqa $ACC5, $ACC4
+ vpmuludq %ymm14, $Y, $T0
+ vpaddq $OVERFLOW, $ACC6, $ACC5
+ vpmuludq %ymm15, $Y, $OVERFLOW
+ vpaddq $T0, $ACC7, $ACC6
+ vpaddq $OVERFLOW, $ACC8, $ACC7
+
+ dec $itr
+ jnz .Lavx2_mul_x4_loop
+
+ vpxor $ACC8, $ACC8, $ACC8
+
+ ret
+.size avx2_mul_x4,.-avx2_mul_x4
+
+# Function optimized for the constant 1
+################################################################################
+# void avx2_mul_by1_x4(void* RESULTx4, void *Ax4);
+.type avx2_mul_by1_x4,\@abi-omnipotent
+.align 32
+avx2_mul_by1_x4:
+ lea .LAVX2_POLY(%rip), %rax
+
+ vpxor $ACC0, $ACC0, $ACC0
+ vpxor $ACC1, $ACC1, $ACC1
+ vpxor $ACC2, $ACC2, $ACC2
+ vpxor $ACC3, $ACC3, $ACC3
+ vpxor $ACC4, $ACC4, $ACC4
+ vpxor $ACC5, $ACC5, $ACC5
+ vpxor $ACC6, $ACC6, $ACC6
+ vpxor $ACC7, $ACC7, $ACC7
+ vpxor $ACC8, $ACC8, $ACC8
+
+ vmovdqa 32*3+.LONE(%rip), %ymm14
+ vmovdqa 32*7+.LONE(%rip), %ymm15
+
+ mov $n_digits, $itr
+ jmp .Lavx2_mul_by1_x4_loop
+
+.align 32
+.Lavx2_mul_by1_x4_loop:
+ vmovdqa 32*0($a_ptr), $B
+ .byte 0x48,0x8d,0xb6,0x20,0,0,0 # lea 32*1($a_ptr), $a_ptr
+
+ vpsllq \$5, $B, $OVERFLOW
+ vpmuludq %ymm14, $B, $T0
+ vpaddq $OVERFLOW, $ACC0, $ACC0
+ vpaddq $T0, $ACC3, $ACC3
+ .byte 0x67
+ vpmuludq $AND_MASK, $B, $T0
+ vpand $AND_MASK, $ACC0, $Y
+ vpaddq $T0, $ACC4, $ACC4
+ vpaddq $T0, $ACC5, $ACC5
+ vpaddq $T0, $ACC6, $ACC6
+ vpsllq \$23, $B, $T0
+
+ .byte 0x67,0x67
+ vpmuludq %ymm15, $B, $OVERFLOW
+ vpsubq $T0, $ACC6, $ACC6
+
+ vpmuludq $AND_MASK, $Y, $T0
+ vpaddq $OVERFLOW, $ACC7, $ACC7
+ vpaddq $T0, $ACC0, $OVERFLOW
+ vpaddq $T0, $ACC1, $ACC0
+ .byte 0x67,0x67
+ vpsrlq $digit_size, $OVERFLOW, $OVERFLOW
+ vpaddq $T0, $ACC2, $ACC1
+ vpmuludq 32*3(%rax), $Y, $T0
+ vpaddq $OVERFLOW, $ACC0, $ACC0
+ vpaddq $T0, $ACC3, $ACC2
+ vmovdqa $ACC4, $ACC3
+ vpsllq \$18, $Y, $OVERFLOW
+ vmovdqa $ACC5, $ACC4
+ vpmuludq 32*7(%rax), $Y, $T0
+ vpaddq $OVERFLOW, $ACC6, $ACC5
+ vpaddq $T0, $ACC7, $ACC6
+ vpmuludq 32*8(%rax), $Y, $ACC7
+
+ dec $itr
+ jnz .Lavx2_mul_by1_x4_loop
+
+ ret
+.size avx2_mul_by1_x4,.-avx2_mul_by1_x4
+
+################################################################################
+# void avx2_sqr_x4(void* RESULTx4, void *Ax4, void *Bx4);
+.type avx2_sqr_x4,\@abi-omnipotent
+.align 32
+avx2_sqr_x4:
+ lea .LAVX2_POLY(%rip), %rax
+
+ vmovdqa 32*7(%rax), %ymm14
+ vmovdqa 32*8(%rax), %ymm15
+
+ vmovdqa 32*0($a_ptr), $B
+ vmovdqa 32*1($a_ptr), $ACC1
+ vmovdqa 32*2($a_ptr), $ACC2
+ vmovdqa 32*3($a_ptr), $ACC3
+ vmovdqa 32*4($a_ptr), $ACC4
+ vmovdqa 32*5($a_ptr), $ACC5
+ vmovdqa 32*6($a_ptr), $ACC6
+ vmovdqa 32*7($a_ptr), $ACC7
+ vpaddq $ACC1, $ACC1, $ACC1 # 2*$ACC0..7
+ vmovdqa 32*8($a_ptr), $ACC8
+ vpaddq $ACC2, $ACC2, $ACC2
+ vmovdqa $ACC1, 32*0(%rcx)
+ vpaddq $ACC3, $ACC3, $ACC3
+ vmovdqa $ACC2, 32*1(%rcx)
+ vpaddq $ACC4, $ACC4, $ACC4
+ vmovdqa $ACC3, 32*2(%rcx)
+ vpaddq $ACC5, $ACC5, $ACC5
+ vmovdqa $ACC4, 32*3(%rcx)
+ vpaddq $ACC6, $ACC6, $ACC6
+ vmovdqa $ACC5, 32*4(%rcx)
+ vpaddq $ACC7, $ACC7, $ACC7
+ vmovdqa $ACC6, 32*5(%rcx)
+ vpaddq $ACC8, $ACC8, $ACC8
+ vmovdqa $ACC7, 32*6(%rcx)
+ vmovdqa $ACC8, 32*7(%rcx)
+
+ #itr 1
+ vpmuludq $B, $B, $ACC0
+ vpmuludq $B, $ACC1, $ACC1
+ vpand $AND_MASK, $ACC0, $Y
+ vpmuludq $B, $ACC2, $ACC2
+ vpmuludq $B, $ACC3, $ACC3
+ vpmuludq $B, $ACC4, $ACC4
+ vpmuludq $B, $ACC5, $ACC5
+ vpmuludq $B, $ACC6, $ACC6
+ vpmuludq $AND_MASK, $Y, $T0
+ vpmuludq $B, $ACC7, $ACC7
+ vpmuludq $B, $ACC8, $ACC8
+ vmovdqa 32*1($a_ptr), $B
+
+ vpaddq $T0, $ACC0, $OVERFLOW
+ vpaddq $T0, $ACC1, $ACC0
+ vpsrlq $digit_size, $OVERFLOW, $OVERFLOW
+ vpaddq $T0, $ACC2, $ACC1
+ vpmuludq 32*3(%rax), $Y, $T0
+ vpaddq $OVERFLOW, $ACC0, $ACC0
+ vpaddq $T0, $ACC3, $ACC2
+ vmovdqa $ACC4, $ACC3
+ vpsllq \$18, $Y, $T0
+ vmovdqa $ACC5, $ACC4
+ vpmuludq %ymm14, $Y, $OVERFLOW
+ vpaddq $T0, $ACC6, $ACC5
+ vpmuludq %ymm15, $Y, $T0
+ vpaddq $OVERFLOW, $ACC7, $ACC6
+ vpaddq $T0, $ACC8, $ACC7
+
+ #itr 2
+ vpmuludq $B, $B, $OVERFLOW
+ vpand $AND_MASK, $ACC0, $Y
+ vpmuludq 32*1(%rcx), $B, $T0
+ vpaddq $OVERFLOW, $ACC1, $ACC1
+ vpmuludq 32*2(%rcx), $B, $OVERFLOW
+ vpaddq $T0, $ACC2, $ACC2
+ vpmuludq 32*3(%rcx), $B, $T0
+ vpaddq $OVERFLOW, $ACC3, $ACC3
+ vpmuludq 32*4(%rcx), $B, $OVERFLOW
+ vpaddq $T0, $ACC4, $ACC4
+ vpmuludq 32*5(%rcx), $B, $T0
+ vpaddq $OVERFLOW, $ACC5, $ACC5
+ vpmuludq 32*6(%rcx), $B, $OVERFLOW
+ vpaddq $T0, $ACC6, $ACC6
+
+ vpmuludq $AND_MASK, $Y, $T0
+ vpaddq $OVERFLOW, $ACC7, $ACC7
+ vpmuludq 32*7(%rcx), $B, $ACC8
+ vmovdqa 32*2($a_ptr), $B
+ vpaddq $T0, $ACC0, $OVERFLOW
+ vpaddq $T0, $ACC1, $ACC0
+ vpsrlq $digit_size, $OVERFLOW, $OVERFLOW
+ vpaddq $T0, $ACC2, $ACC1
+ vpmuludq 32*3(%rax), $Y, $T0
+ vpaddq $OVERFLOW, $ACC0, $ACC0
+ vpaddq $T0, $ACC3, $ACC2
+ vmovdqa $ACC4, $ACC3
+ vpsllq \$18, $Y, $T0
+ vmovdqa $ACC5, $ACC4
+ vpmuludq %ymm14, $Y, $OVERFLOW
+ vpaddq $T0, $ACC6, $ACC5
+ vpmuludq %ymm15, $Y, $T0
+ vpaddq $OVERFLOW, $ACC7, $ACC6
+ vpaddq $T0, $ACC8, $ACC7
+
+ #itr 3
+ vpmuludq $B, $B, $T0
+ vpand $AND_MASK, $ACC0, $Y
+ vpmuludq 32*2(%rcx), $B, $OVERFLOW
+ vpaddq $T0, $ACC2, $ACC2
+ vpmuludq 32*3(%rcx), $B, $T0
+ vpaddq $OVERFLOW, $ACC3, $ACC3
+ vpmuludq 32*4(%rcx), $B, $OVERFLOW
+ vpaddq $T0, $ACC4, $ACC4
+ vpmuludq 32*5(%rcx), $B, $T0
+ vpaddq $OVERFLOW, $ACC5, $ACC5
+ vpmuludq 32*6(%rcx), $B, $OVERFLOW
+ vpaddq $T0, $ACC6, $ACC6
+
+ vpmuludq $AND_MASK, $Y, $T0
+ vpaddq $OVERFLOW, $ACC7, $ACC7
+ vpmuludq 32*7(%rcx), $B, $ACC8
+ vmovdqa 32*3($a_ptr), $B
+ vpaddq $T0, $ACC0, $OVERFLOW
+ vpaddq $T0, $ACC1, $ACC0
+ vpsrlq $digit_size, $OVERFLOW, $OVERFLOW
+ vpaddq $T0, $ACC2, $ACC1
+ vpmuludq 32*3(%rax), $Y, $T0
+ vpaddq $OVERFLOW, $ACC0, $ACC0
+ vpaddq $T0, $ACC3, $ACC2
+ vmovdqa $ACC4, $ACC3
+ vpsllq \$18, $Y, $T0
+ vmovdqa $ACC5, $ACC4
+ vpmuludq %ymm14, $Y, $OVERFLOW
+ vpaddq $T0, $ACC6, $ACC5
+ vpmuludq %ymm15, $Y, $T0
+ vpand $AND_MASK, $ACC0, $Y
+ vpaddq $OVERFLOW, $ACC7, $ACC6
+ vpaddq $T0, $ACC8, $ACC7
+
+ #itr 4
+ vpmuludq $B, $B, $OVERFLOW
+ vpmuludq 32*3(%rcx), $B, $T0
+ vpaddq $OVERFLOW, $ACC3, $ACC3
+ vpmuludq 32*4(%rcx), $B, $OVERFLOW
+ vpaddq $T0, $ACC4, $ACC4
+ vpmuludq 32*5(%rcx), $B, $T0
+ vpaddq $OVERFLOW, $ACC5, $ACC5
+ vpmuludq 32*6(%rcx), $B, $OVERFLOW
+ vpaddq $T0, $ACC6, $ACC6
+
+ vpmuludq $AND_MASK, $Y, $T0
+ vpaddq $OVERFLOW, $ACC7, $ACC7
+ vpmuludq 32*7(%rcx), $B, $ACC8
+ vmovdqa 32*4($a_ptr), $B
+ vpaddq $T0, $ACC0, $OVERFLOW
+ vpaddq $T0, $ACC1, $ACC0
+ vpsrlq $digit_size, $OVERFLOW, $OVERFLOW
+ vpaddq $T0, $ACC2, $ACC1
+ vpmuludq 32*3(%rax), $Y, $T0
+ vpaddq $OVERFLOW, $ACC0, $ACC0
+ vpaddq $T0, $ACC3, $ACC2
+ vmovdqa $ACC4, $ACC3
+ vpsllq \$18, $Y, $T0
+ vmovdqa $ACC5, $ACC4
+ vpmuludq %ymm14, $Y, $OVERFLOW
+ vpaddq $T0, $ACC6, $ACC5
+ vpmuludq %ymm15, $Y, $T0
+ vpand $AND_MASK, $ACC0, $Y
+ vpaddq $OVERFLOW, $ACC7, $ACC6
+ vpaddq $T0, $ACC8, $ACC7
+
+ #itr 5
+ vpmuludq $B, $B, $T0
+ vpmuludq 32*4(%rcx), $B, $OVERFLOW
+ vpaddq $T0, $ACC4, $ACC4
+ vpmuludq 32*5(%rcx), $B, $T0
+ vpaddq $OVERFLOW, $ACC5, $ACC5
+ vpmuludq 32*6(%rcx), $B, $OVERFLOW
+ vpaddq $T0, $ACC6, $ACC6
+
+ vpmuludq $AND_MASK, $Y, $T0
+ vpaddq $OVERFLOW, $ACC7, $ACC7
+ vpmuludq 32*7(%rcx), $B, $ACC8
+ vmovdqa 32*5($a_ptr), $B
+ vpaddq $T0, $ACC0, $OVERFLOW
+ vpsrlq $digit_size, $OVERFLOW, $OVERFLOW
+ vpaddq $T0, $ACC1, $ACC0
+ vpaddq $T0, $ACC2, $ACC1
+ vpmuludq 32*3+.LAVX2_POLY(%rip), $Y, $T0
+ vpaddq $OVERFLOW, $ACC0, $ACC0
+ vpaddq $T0, $ACC3, $ACC2
+ vmovdqa $ACC4, $ACC3
+ vpsllq \$18, $Y, $T0
+ vmovdqa $ACC5, $ACC4
+ vpmuludq %ymm14, $Y, $OVERFLOW
+ vpaddq $T0, $ACC6, $ACC5
+ vpmuludq %ymm15, $Y, $T0
+ vpand $AND_MASK, $ACC0, $Y
+ vpaddq $OVERFLOW, $ACC7, $ACC6
+ vpaddq $T0, $ACC8, $ACC7
+
+ #itr 6
+ vpmuludq $B, $B, $OVERFLOW
+ vpmuludq 32*5(%rcx), $B, $T0
+ vpaddq $OVERFLOW, $ACC5, $ACC5
+ vpmuludq 32*6(%rcx), $B, $OVERFLOW
+ vpaddq $T0, $ACC6, $ACC6
+
+ vpmuludq $AND_MASK, $Y, $T0
+ vpaddq $OVERFLOW, $ACC7, $ACC7
+ vpmuludq 32*7(%rcx), $B, $ACC8
+ vmovdqa 32*6($a_ptr), $B
+ vpaddq $T0, $ACC0, $OVERFLOW
+ vpaddq $T0, $ACC1, $ACC0
+ vpsrlq $digit_size, $OVERFLOW, $OVERFLOW
+ vpaddq $T0, $ACC2, $ACC1
+ vpmuludq 32*3(%rax), $Y, $T0
+ vpaddq $OVERFLOW, $ACC0, $ACC0
+ vpaddq $T0, $ACC3, $ACC2
+ vmovdqa $ACC4, $ACC3
+ vpsllq \$18, $Y, $T0
+ vmovdqa $ACC5, $ACC4
+ vpmuludq %ymm14, $Y, $OVERFLOW
+ vpaddq $T0, $ACC6, $ACC5
+ vpmuludq %ymm15, $Y, $T0
+ vpand $AND_MASK, $ACC0, $Y
+ vpaddq $OVERFLOW, $ACC7, $ACC6
+ vpaddq $T0, $ACC8, $ACC7
+
+ #itr 7
+ vpmuludq $B, $B, $T0
+ vpmuludq 32*6(%rcx), $B, $OVERFLOW
+ vpaddq $T0, $ACC6, $ACC6
+
+ vpmuludq $AND_MASK, $Y, $T0
+ vpaddq $OVERFLOW, $ACC7, $ACC7
+ vpmuludq 32*7(%rcx), $B, $ACC8
+ vmovdqa 32*7($a_ptr), $B
+ vpaddq $T0, $ACC0, $OVERFLOW
+ vpsrlq $digit_size, $OVERFLOW, $OVERFLOW
+ vpaddq $T0, $ACC1, $ACC0
+ vpaddq $T0, $ACC2, $ACC1
+ vpmuludq 32*3(%rax), $Y, $T0
+ vpaddq $OVERFLOW, $ACC0, $ACC0
+ vpaddq $T0, $ACC3, $ACC2
+ vmovdqa $ACC4, $ACC3
+ vpsllq \$18, $Y, $T0
+ vmovdqa $ACC5, $ACC4
+ vpmuludq %ymm14, $Y, $OVERFLOW
+ vpaddq $T0, $ACC6, $ACC5
+ vpmuludq %ymm15, $Y, $T0
+ vpand $AND_MASK, $ACC0, $Y
+ vpaddq $OVERFLOW, $ACC7, $ACC6
+ vpaddq $T0, $ACC8, $ACC7
+
+ #itr 8
+ vpmuludq $B, $B, $OVERFLOW
+
+ vpmuludq $AND_MASK, $Y, $T0
+ vpaddq $OVERFLOW, $ACC7, $ACC7
+ vpmuludq 32*7(%rcx), $B, $ACC8
+ vmovdqa 32*8($a_ptr), $B
+ vpaddq $T0, $ACC0, $OVERFLOW
+ vpsrlq $digit_size, $OVERFLOW, $OVERFLOW
+ vpaddq $T0, $ACC1, $ACC0
+ vpaddq $T0, $ACC2, $ACC1
+ vpmuludq 32*3(%rax), $Y, $T0
+ vpaddq $OVERFLOW, $ACC0, $ACC0
+ vpaddq $T0, $ACC3, $ACC2
+ vmovdqa $ACC4, $ACC3
+ vpsllq \$18, $Y, $T0
+ vmovdqa $ACC5, $ACC4
+ vpmuludq %ymm14, $Y, $OVERFLOW
+ vpaddq $T0, $ACC6, $ACC5
+ vpmuludq %ymm15, $Y, $T0
+ vpand $AND_MASK, $ACC0, $Y
+ vpaddq $OVERFLOW, $ACC7, $ACC6
+ vpaddq $T0, $ACC8, $ACC7
+
+ #itr 9
+ vpmuludq $B, $B, $ACC8
+
+ vpmuludq $AND_MASK, $Y, $T0
+ vpaddq $T0, $ACC0, $OVERFLOW
+ vpsrlq $digit_size, $OVERFLOW, $OVERFLOW
+ vpaddq $T0, $ACC1, $ACC0
+ vpaddq $T0, $ACC2, $ACC1
+ vpmuludq 32*3(%rax), $Y, $T0
+ vpaddq $OVERFLOW, $ACC0, $ACC0
+ vpaddq $T0, $ACC3, $ACC2
+ vmovdqa $ACC4, $ACC3
+ vpsllq \$18, $Y, $T0
+ vmovdqa $ACC5, $ACC4
+ vpmuludq %ymm14, $Y, $OVERFLOW
+ vpaddq $T0, $ACC6, $ACC5
+ vpmuludq %ymm15, $Y, $T0
+ vpaddq $OVERFLOW, $ACC7, $ACC6
+ vpaddq $T0, $ACC8, $ACC7
+
+ vpxor $ACC8, $ACC8, $ACC8
+
+ ret
+.size avx2_sqr_x4,.-avx2_sqr_x4
+
+################################################################################
+# void avx2_sub_x4(void* RESULTx4, void *Ax4, void *Bx4);
+.type avx2_sub_x4,\@abi-omnipotent
+.align 32
+avx2_sub_x4:
+ vmovdqa 32*0($a_ptr), $ACC0
+ lea 160($a_ptr), $a_ptr
+ lea .LAVX2_POLY_x8+128(%rip), %rax
+ lea 128($b_ptr), $b_ptr
+ vmovdqa 32*1-160($a_ptr), $ACC1
+ vmovdqa 32*2-160($a_ptr), $ACC2
+ vmovdqa 32*3-160($a_ptr), $ACC3
+ vmovdqa 32*4-160($a_ptr), $ACC4
+ vmovdqa 32*5-160($a_ptr), $ACC5
+ vmovdqa 32*6-160($a_ptr), $ACC6
+ vmovdqa 32*7-160($a_ptr), $ACC7
+ vmovdqa 32*8-160($a_ptr), $ACC8
+
+ vpaddq 32*0-128(%rax), $ACC0, $ACC0
+ vpaddq 32*1-128(%rax), $ACC1, $ACC1
+ vpaddq 32*2-128(%rax), $ACC2, $ACC2
+ vpaddq 32*3-128(%rax), $ACC3, $ACC3
+ vpaddq 32*4-128(%rax), $ACC4, $ACC4
+ vpaddq 32*5-128(%rax), $ACC5, $ACC5
+ vpaddq 32*6-128(%rax), $ACC6, $ACC6
+ vpaddq 32*7-128(%rax), $ACC7, $ACC7
+ vpaddq 32*8-128(%rax), $ACC8, $ACC8
+
+ vpsubq 32*0-128($b_ptr), $ACC0, $ACC0
+ vpsubq 32*1-128($b_ptr), $ACC1, $ACC1
+ vpsubq 32*2-128($b_ptr), $ACC2, $ACC2
+ vpsubq 32*3-128($b_ptr), $ACC3, $ACC3
+ vpsubq 32*4-128($b_ptr), $ACC4, $ACC4
+ vpsubq 32*5-128($b_ptr), $ACC5, $ACC5
+ vpsubq 32*6-128($b_ptr), $ACC6, $ACC6
+ vpsubq 32*7-128($b_ptr), $ACC7, $ACC7
+ vpsubq 32*8-128($b_ptr), $ACC8, $ACC8
+
+ ret
+.size avx2_sub_x4,.-avx2_sub_x4
+
+.type avx2_select_n_store,\@abi-omnipotent
+.align 32
+avx2_select_n_store:
+ vmovdqa `8+32*9*8`(%rsp), $Y
+ vpor `8+32*9*8+32`(%rsp), $Y, $Y
+
+ vpandn $ACC0, $Y, $ACC0
+ vpandn $ACC1, $Y, $ACC1
+ vpandn $ACC2, $Y, $ACC2
+ vpandn $ACC3, $Y, $ACC3
+ vpandn $ACC4, $Y, $ACC4
+ vpandn $ACC5, $Y, $ACC5
+ vpandn $ACC6, $Y, $ACC6
+ vmovdqa `8+32*9*8+32`(%rsp), $B
+ vpandn $ACC7, $Y, $ACC7
+ vpandn `8+32*9*8`(%rsp), $B, $B
+ vpandn $ACC8, $Y, $ACC8
+
+ vpand 32*0(%rsi), $B, $T0
+ lea 160(%rsi), %rax
+ vpand 32*1(%rsi), $B, $Y
+ vpxor $T0, $ACC0, $ACC0
+ vpand 32*2(%rsi), $B, $T0
+ vpxor $Y, $ACC1, $ACC1
+ vpand 32*3(%rsi), $B, $Y
+ vpxor $T0, $ACC2, $ACC2
+ vpand 32*4-160(%rax), $B, $T0
+ vpxor $Y, $ACC3, $ACC3
+ vpand 32*5-160(%rax), $B, $Y
+ vpxor $T0, $ACC4, $ACC4
+ vpand 32*6-160(%rax), $B, $T0
+ vpxor $Y, $ACC5, $ACC5
+ vpand 32*7-160(%rax), $B, $Y
+ vpxor $T0, $ACC6, $ACC6
+ vpand 32*8-160(%rax), $B, $T0
+ vmovdqa `8+32*9*8+32`(%rsp), $B
+ vpxor $Y, $ACC7, $ACC7
+
+ vpand 32*0(%rdx), $B, $Y
+ lea 160(%rdx), %rax
+ vpxor $T0, $ACC8, $ACC8
+ vpand 32*1(%rdx), $B, $T0
+ vpxor $Y, $ACC0, $ACC0
+ vpand 32*2(%rdx), $B, $Y
+ vpxor $T0, $ACC1, $ACC1
+ vpand 32*3(%rdx), $B, $T0
+ vpxor $Y, $ACC2, $ACC2
+ vpand 32*4-160(%rax), $B, $Y
+ vpxor $T0, $ACC3, $ACC3
+ vpand 32*5-160(%rax), $B, $T0
+ vpxor $Y, $ACC4, $ACC4
+ vpand 32*6-160(%rax), $B, $Y
+ vpxor $T0, $ACC5, $ACC5
+ vpand 32*7-160(%rax), $B, $T0
+ vpxor $Y, $ACC6, $ACC6
+ vpand 32*8-160(%rax), $B, $Y
+ vpxor $T0, $ACC7, $ACC7
+ vpxor $Y, $ACC8, $ACC8
+ `&STORE`
+
+ ret
+.size avx2_select_n_store,.-avx2_select_n_store
+___
+$code.=<<___ if (0); # inlined
+################################################################################
+# void avx2_mul_by2_x4(void* RESULTx4, void *Ax4);
+.type avx2_mul_by2_x4,\@abi-omnipotent
+.align 32
+avx2_mul_by2_x4:
+ vmovdqa 32*0($a_ptr), $ACC0
+ lea 160($a_ptr), %rax
+ vmovdqa 32*1($a_ptr), $ACC1
+ vmovdqa 32*2($a_ptr), $ACC2
+ vmovdqa 32*3($a_ptr), $ACC3
+ vmovdqa 32*4-160(%rax), $ACC4
+ vmovdqa 32*5-160(%rax), $ACC5
+ vmovdqa 32*6-160(%rax), $ACC6
+ vmovdqa 32*7-160(%rax), $ACC7
+ vmovdqa 32*8-160(%rax), $ACC8
+
+ vpaddq $ACC0, $ACC0, $ACC0
+ vpaddq $ACC1, $ACC1, $ACC1
+ vpaddq $ACC2, $ACC2, $ACC2
+ vpaddq $ACC3, $ACC3, $ACC3
+ vpaddq $ACC4, $ACC4, $ACC4
+ vpaddq $ACC5, $ACC5, $ACC5
+ vpaddq $ACC6, $ACC6, $ACC6
+ vpaddq $ACC7, $ACC7, $ACC7
+ vpaddq $ACC8, $ACC8, $ACC8
+
+ ret
+.size avx2_mul_by2_x4,.-avx2_mul_by2_x4
+___
+my ($r_ptr_in,$a_ptr_in,$b_ptr_in)=("%rdi","%rsi","%rdx");
+my ($r_ptr,$a_ptr,$b_ptr)=("%r8","%r9","%r10");
+
+$code.=<<___;
+################################################################################
+# void ecp_nistz256_avx2_point_add_affine_x4(void* RESULTx4, void *Ax4, void *Bx4);
+.globl ecp_nistz256_avx2_point_add_affine_x4
+.type ecp_nistz256_avx2_point_add_affine_x4,\@function,3
+.align 32
+ecp_nistz256_avx2_point_add_affine_x4:
+ mov %rsp, %rax
+ push %rbp
+ vzeroupper
+___
+$code.=<<___ if ($win64);
+ lea -16*10(%rsp), %rsp
+ vmovaps %xmm6, -8-16*10(%rax)
+ vmovaps %xmm7, -8-16*9(%rax)
+ vmovaps %xmm8, -8-16*8(%rax)
+ vmovaps %xmm9, -8-16*7(%rax)
+ vmovaps %xmm10, -8-16*6(%rax)
+ vmovaps %xmm11, -8-16*5(%rax)
+ vmovaps %xmm12, -8-16*4(%rax)
+ vmovaps %xmm13, -8-16*3(%rax)
+ vmovaps %xmm14, -8-16*2(%rax)
+ vmovaps %xmm15, -8-16*1(%rax)
+___
+$code.=<<___;
+ lea -8(%rax), %rbp
+
+# Result + 32*0 = Result.X
+# Result + 32*9 = Result.Y
+# Result + 32*18 = Result.Z
+
+# A + 32*0 = A.X
+# A + 32*9 = A.Y
+# A + 32*18 = A.Z
+
+# B + 32*0 = B.X
+# B + 32*9 = B.Y
+
+ sub \$`32*9*8+32*2+32*8`, %rsp
+ and \$-64, %rsp
+
+ mov $r_ptr_in, $r_ptr
+ mov $a_ptr_in, $a_ptr
+ mov $b_ptr_in, $b_ptr
+
+ vmovdqa 32*0($a_ptr_in), %ymm0
+ vmovdqa .LAVX2_AND_MASK(%rip), $AND_MASK
+ vpxor %ymm1, %ymm1, %ymm1
+ lea 256($a_ptr_in), %rax # size optimization
+ vpor 32*1($a_ptr_in), %ymm0, %ymm0
+ vpor 32*2($a_ptr_in), %ymm0, %ymm0
+ vpor 32*3($a_ptr_in), %ymm0, %ymm0
+ vpor 32*4-256(%rax), %ymm0, %ymm0
+ lea 256(%rax), %rcx # size optimization
+ vpor 32*5-256(%rax), %ymm0, %ymm0
+ vpor 32*6-256(%rax), %ymm0, %ymm0
+ vpor 32*7-256(%rax), %ymm0, %ymm0
+ vpor 32*8-256(%rax), %ymm0, %ymm0
+ vpor 32*9-256(%rax), %ymm0, %ymm0
+ vpor 32*10-256(%rax), %ymm0, %ymm0
+ vpor 32*11-256(%rax), %ymm0, %ymm0
+ vpor 32*12-512(%rcx), %ymm0, %ymm0
+ vpor 32*13-512(%rcx), %ymm0, %ymm0
+ vpor 32*14-512(%rcx), %ymm0, %ymm0
+ vpor 32*15-512(%rcx), %ymm0, %ymm0
+ vpor 32*16-512(%rcx), %ymm0, %ymm0
+ vpor 32*17-512(%rcx), %ymm0, %ymm0
+ vpcmpeqq %ymm1, %ymm0, %ymm0
+ vmovdqa %ymm0, `32*9*8`(%rsp)
+
+ vpxor %ymm1, %ymm1, %ymm1
+ vmovdqa 32*0($b_ptr), %ymm0
+ lea 256($b_ptr), %rax # size optimization
+ vpor 32*1($b_ptr), %ymm0, %ymm0
+ vpor 32*2($b_ptr), %ymm0, %ymm0
+ vpor 32*3($b_ptr), %ymm0, %ymm0
+ vpor 32*4-256(%rax), %ymm0, %ymm0
+ lea 256(%rax), %rcx # size optimization
+ vpor 32*5-256(%rax), %ymm0, %ymm0
+ vpor 32*6-256(%rax), %ymm0, %ymm0
+ vpor 32*7-256(%rax), %ymm0, %ymm0
+ vpor 32*8-256(%rax), %ymm0, %ymm0
+ vpor 32*9-256(%rax), %ymm0, %ymm0
+ vpor 32*10-256(%rax), %ymm0, %ymm0
+ vpor 32*11-256(%rax), %ymm0, %ymm0
+ vpor 32*12-512(%rcx), %ymm0, %ymm0
+ vpor 32*13-512(%rcx), %ymm0, %ymm0
+ vpor 32*14-512(%rcx), %ymm0, %ymm0
+ vpor 32*15-512(%rcx), %ymm0, %ymm0
+ vpor 32*16-512(%rcx), %ymm0, %ymm0
+ vpor 32*17-512(%rcx), %ymm0, %ymm0
+ vpcmpeqq %ymm1, %ymm0, %ymm0
+ vmovdqa %ymm0, `32*9*8+32`(%rsp)
+
+ # Z1^2 = Z1*Z1
+ lea `32*9*2`($a_ptr), %rsi
+ lea `32*9*2`(%rsp), %rdi
+ lea `32*9*8+32*2`(%rsp), %rcx # temporary vector
+ call avx2_sqr_x4
+ call avx2_normalize_n_store
+
+ # U2 = X2*Z1^2
+ lea `32*9*0`($b_ptr), %rsi
+ lea `32*9*2`(%rsp), %rdx
+ lea `32*9*0`(%rsp), %rdi
+ call avx2_mul_x4
+ #call avx2_normalize
+ `&STORE`
+
+ # S2 = Z1*Z1^2 = Z1^3
+ lea `32*9*2`($a_ptr), %rsi
+ lea `32*9*2`(%rsp), %rdx
+ lea `32*9*1`(%rsp), %rdi
+ call avx2_mul_x4
+ call avx2_normalize_n_store
+
+ # S2 = S2*Y2 = Y2*Z1^3
+ lea `32*9*1`($b_ptr), %rsi
+ lea `32*9*1`(%rsp), %rdx
+ lea `32*9*1`(%rsp), %rdi
+ call avx2_mul_x4
+ call avx2_normalize_n_store
+
+ # H = U2 - U1 = U2 - X1
+ lea `32*9*0`(%rsp), %rsi
+ lea `32*9*0`($a_ptr), %rdx
+ lea `32*9*3`(%rsp), %rdi
+ call avx2_sub_x4
+ call avx2_normalize_n_store
+
+ # R = S2 - S1 = S2 - Y1
+ lea `32*9*1`(%rsp), %rsi
+ lea `32*9*1`($a_ptr), %rdx
+ lea `32*9*4`(%rsp), %rdi
+ call avx2_sub_x4
+ call avx2_normalize_n_store
+
+ # Z3 = H*Z1*Z2
+ lea `32*9*3`(%rsp), %rsi
+ lea `32*9*2`($a_ptr), %rdx
+ lea `32*9*2`($r_ptr), %rdi
+ call avx2_mul_x4
+ call avx2_normalize
+
+ lea .LONE(%rip), %rsi
+ lea `32*9*2`($a_ptr), %rdx
+ call avx2_select_n_store
+
+ # R^2 = R^2
+ lea `32*9*4`(%rsp), %rsi
+ lea `32*9*6`(%rsp), %rdi
+ lea `32*9*8+32*2`(%rsp), %rcx # temporary vector
+ call avx2_sqr_x4
+ call avx2_normalize_n_store
+
+ # H^2 = H^2
+ lea `32*9*3`(%rsp), %rsi
+ lea `32*9*5`(%rsp), %rdi
+ call avx2_sqr_x4
+ call avx2_normalize_n_store
+
+ # H^3 = H^2*H
+ lea `32*9*3`(%rsp), %rsi
+ lea `32*9*5`(%rsp), %rdx
+ lea `32*9*7`(%rsp), %rdi
+ call avx2_mul_x4
+ call avx2_normalize_n_store
+
+ # U2 = U1*H^2
+ lea `32*9*0`($a_ptr), %rsi
+ lea `32*9*5`(%rsp), %rdx
+ lea `32*9*0`(%rsp), %rdi
+ call avx2_mul_x4
+ #call avx2_normalize
+ `&STORE`
+
+ # Hsqr = U2*2
+ #lea 32*9*0(%rsp), %rsi
+ #lea 32*9*5(%rsp), %rdi
+ #call avx2_mul_by2_x4
+
+ vpaddq $ACC0, $ACC0, $ACC0 # inlined avx2_mul_by2_x4
+ lea `32*9*5`(%rsp), %rdi
+ vpaddq $ACC1, $ACC1, $ACC1
+ vpaddq $ACC2, $ACC2, $ACC2
+ vpaddq $ACC3, $ACC3, $ACC3
+ vpaddq $ACC4, $ACC4, $ACC4
+ vpaddq $ACC5, $ACC5, $ACC5
+ vpaddq $ACC6, $ACC6, $ACC6
+ vpaddq $ACC7, $ACC7, $ACC7
+ vpaddq $ACC8, $ACC8, $ACC8
+ call avx2_normalize_n_store
+
+ # X3 = R^2 - H^3
+ #lea 32*9*6(%rsp), %rsi
+ #lea 32*9*7(%rsp), %rdx
+ #lea 32*9*5(%rsp), %rcx
+ #lea 32*9*0($r_ptr), %rdi
+ #call avx2_sub_x4
+ #NORMALIZE
+ #STORE
+
+ # X3 = X3 - U2*2
+ #lea 32*9*0($r_ptr), %rsi
+ #lea 32*9*0($r_ptr), %rdi
+ #call avx2_sub_x4
+ #NORMALIZE
+ #STORE
+
+ lea `32*9*6+128`(%rsp), %rsi
+ lea .LAVX2_POLY_x2+128(%rip), %rax
+ lea `32*9*7+128`(%rsp), %rdx
+ lea `32*9*5+128`(%rsp), %rcx
+ lea `32*9*0`($r_ptr), %rdi
+
+ vmovdqa 32*0-128(%rsi), $ACC0
+ vmovdqa 32*1-128(%rsi), $ACC1
+ vmovdqa 32*2-128(%rsi), $ACC2
+ vmovdqa 32*3-128(%rsi), $ACC3
+ vmovdqa 32*4-128(%rsi), $ACC4
+ vmovdqa 32*5-128(%rsi), $ACC5
+ vmovdqa 32*6-128(%rsi), $ACC6
+ vmovdqa 32*7-128(%rsi), $ACC7
+ vmovdqa 32*8-128(%rsi), $ACC8
+
+ vpaddq 32*0-128(%rax), $ACC0, $ACC0
+ vpaddq 32*1-128(%rax), $ACC1, $ACC1
+ vpaddq 32*2-128(%rax), $ACC2, $ACC2
+ vpaddq 32*3-128(%rax), $ACC3, $ACC3
+ vpaddq 32*4-128(%rax), $ACC4, $ACC4
+ vpaddq 32*5-128(%rax), $ACC5, $ACC5
+ vpaddq 32*6-128(%rax), $ACC6, $ACC6
+ vpaddq 32*7-128(%rax), $ACC7, $ACC7
+ vpaddq 32*8-128(%rax), $ACC8, $ACC8
+
+ vpsubq 32*0-128(%rdx), $ACC0, $ACC0
+ vpsubq 32*1-128(%rdx), $ACC1, $ACC1
+ vpsubq 32*2-128(%rdx), $ACC2, $ACC2
+ vpsubq 32*3-128(%rdx), $ACC3, $ACC3
+ vpsubq 32*4-128(%rdx), $ACC4, $ACC4
+ vpsubq 32*5-128(%rdx), $ACC5, $ACC5
+ vpsubq 32*6-128(%rdx), $ACC6, $ACC6
+ vpsubq 32*7-128(%rdx), $ACC7, $ACC7
+ vpsubq 32*8-128(%rdx), $ACC8, $ACC8
+
+ vpsubq 32*0-128(%rcx), $ACC0, $ACC0
+ vpsubq 32*1-128(%rcx), $ACC1, $ACC1
+ vpsubq 32*2-128(%rcx), $ACC2, $ACC2
+ vpsubq 32*3-128(%rcx), $ACC3, $ACC3
+ vpsubq 32*4-128(%rcx), $ACC4, $ACC4
+ vpsubq 32*5-128(%rcx), $ACC5, $ACC5
+ vpsubq 32*6-128(%rcx), $ACC6, $ACC6
+ vpsubq 32*7-128(%rcx), $ACC7, $ACC7
+ vpsubq 32*8-128(%rcx), $ACC8, $ACC8
+ call avx2_normalize
+
+ lea 32*0($b_ptr), %rsi
+ lea 32*0($a_ptr), %rdx
+ call avx2_select_n_store
+
+ # H = U2 - X3
+ lea `32*9*0`(%rsp), %rsi
+ lea `32*9*0`($r_ptr), %rdx
+ lea `32*9*3`(%rsp), %rdi
+ call avx2_sub_x4
+ call avx2_normalize_n_store
+
+ #
+ lea `32*9*3`(%rsp), %rsi
+ lea `32*9*4`(%rsp), %rdx
+ lea `32*9*3`(%rsp), %rdi
+ call avx2_mul_x4
+ call avx2_normalize_n_store
+
+ #
+ lea `32*9*7`(%rsp), %rsi
+ lea `32*9*1`($a_ptr), %rdx
+ lea `32*9*1`(%rsp), %rdi
+ call avx2_mul_x4
+ call avx2_normalize_n_store
+
+ #
+ lea `32*9*3`(%rsp), %rsi
+ lea `32*9*1`(%rsp), %rdx
+ lea `32*9*1`($r_ptr), %rdi
+ call avx2_sub_x4
+ call avx2_normalize
+
+ lea 32*9($b_ptr), %rsi
+ lea 32*9($a_ptr), %rdx
+ call avx2_select_n_store
+
+ #lea 32*9*0($r_ptr), %rsi
+ #lea 32*9*0($r_ptr), %rdi
+ #call avx2_mul_by1_x4
+ #NORMALIZE
+ #STORE
+
+ lea `32*9*1`($r_ptr), %rsi
+ lea `32*9*1`($r_ptr), %rdi
+ call avx2_mul_by1_x4
+ call avx2_normalize_n_store
+
+ vzeroupper
+___
+$code.=<<___ if ($win64);
+ movaps %xmm6, -16*10(%rbp)
+ movaps %xmm7, -16*9(%rbp)
+ movaps %xmm8, -16*8(%rbp)
+ movaps %xmm9, -16*7(%rbp)
+ movaps %xmm10, -16*6(%rbp)
+ movaps %xmm11, -16*5(%rbp)
+ movaps %xmm12, -16*4(%rbp)
+ movaps %xmm13, -16*3(%rbp)
+ movaps %xmm14, -16*2(%rbp)
+ movaps %xmm15, -16*1(%rbp)
+___
+$code.=<<___;
+ mov %rbp, %rsp
+ pop %rbp
+ ret
+.size ecp_nistz256_avx2_point_add_affine_x4,.-ecp_nistz256_avx2_point_add_affine_x4
+
+################################################################################
+# void ecp_nistz256_avx2_point_add_affines_x4(void* RESULTx4, void *Ax4, void *Bx4);
+.globl ecp_nistz256_avx2_point_add_affines_x4
+.type ecp_nistz256_avx2_point_add_affines_x4,\@function,3
+.align 32
+ecp_nistz256_avx2_point_add_affines_x4:
+ mov %rsp, %rax
+ push %rbp
+ vzeroupper
+___
+$code.=<<___ if ($win64);
+ lea -16*10(%rsp), %rsp
+ vmovaps %xmm6, -8-16*10(%rax)
+ vmovaps %xmm7, -8-16*9(%rax)
+ vmovaps %xmm8, -8-16*8(%rax)
+ vmovaps %xmm9, -8-16*7(%rax)
+ vmovaps %xmm10, -8-16*6(%rax)
+ vmovaps %xmm11, -8-16*5(%rax)
+ vmovaps %xmm12, -8-16*4(%rax)
+ vmovaps %xmm13, -8-16*3(%rax)
+ vmovaps %xmm14, -8-16*2(%rax)
+ vmovaps %xmm15, -8-16*1(%rax)
+___
+$code.=<<___;
+ lea -8(%rax), %rbp
+
+# Result + 32*0 = Result.X
+# Result + 32*9 = Result.Y
+# Result + 32*18 = Result.Z
+
+# A + 32*0 = A.X
+# A + 32*9 = A.Y
+
+# B + 32*0 = B.X
+# B + 32*9 = B.Y
+
+ sub \$`32*9*8+32*2+32*8`, %rsp
+ and \$-64, %rsp
+
+ mov $r_ptr_in, $r_ptr
+ mov $a_ptr_in, $a_ptr
+ mov $b_ptr_in, $b_ptr
+
+ vmovdqa 32*0($a_ptr_in), %ymm0
+ vmovdqa .LAVX2_AND_MASK(%rip), $AND_MASK
+ vpxor %ymm1, %ymm1, %ymm1
+ lea 256($a_ptr_in), %rax # size optimization
+ vpor 32*1($a_ptr_in), %ymm0, %ymm0
+ vpor 32*2($a_ptr_in), %ymm0, %ymm0
+ vpor 32*3($a_ptr_in), %ymm0, %ymm0
+ vpor 32*4-256(%rax), %ymm0, %ymm0
+ lea 256(%rax), %rcx # size optimization
+ vpor 32*5-256(%rax), %ymm0, %ymm0
+ vpor 32*6-256(%rax), %ymm0, %ymm0
+ vpor 32*7-256(%rax), %ymm0, %ymm0
+ vpor 32*8-256(%rax), %ymm0, %ymm0
+ vpor 32*9-256(%rax), %ymm0, %ymm0
+ vpor 32*10-256(%rax), %ymm0, %ymm0
+ vpor 32*11-256(%rax), %ymm0, %ymm0
+ vpor 32*12-512(%rcx), %ymm0, %ymm0
+ vpor 32*13-512(%rcx), %ymm0, %ymm0
+ vpor 32*14-512(%rcx), %ymm0, %ymm0
+ vpor 32*15-512(%rcx), %ymm0, %ymm0
+ vpor 32*16-512(%rcx), %ymm0, %ymm0
+ vpor 32*17-512(%rcx), %ymm0, %ymm0
+ vpcmpeqq %ymm1, %ymm0, %ymm0
+ vmovdqa %ymm0, `32*9*8`(%rsp)
+
+ vpxor %ymm1, %ymm1, %ymm1
+ vmovdqa 32*0($b_ptr), %ymm0
+ lea 256($b_ptr), %rax # size optimization
+ vpor 32*1($b_ptr), %ymm0, %ymm0
+ vpor 32*2($b_ptr), %ymm0, %ymm0
+ vpor 32*3($b_ptr), %ymm0, %ymm0
+ vpor 32*4-256(%rax), %ymm0, %ymm0
+ lea 256(%rax), %rcx # size optimization
+ vpor 32*5-256(%rax), %ymm0, %ymm0
+ vpor 32*6-256(%rax), %ymm0, %ymm0
+ vpor 32*7-256(%rax), %ymm0, %ymm0
+ vpor 32*8-256(%rax), %ymm0, %ymm0
+ vpor 32*9-256(%rax), %ymm0, %ymm0
+ vpor 32*10-256(%rax), %ymm0, %ymm0
+ vpor 32*11-256(%rax), %ymm0, %ymm0
+ vpor 32*12-512(%rcx), %ymm0, %ymm0
+ vpor 32*13-512(%rcx), %ymm0, %ymm0
+ vpor 32*14-512(%rcx), %ymm0, %ymm0
+ vpor 32*15-512(%rcx), %ymm0, %ymm0
+ vpor 32*16-512(%rcx), %ymm0, %ymm0
+ vpor 32*17-512(%rcx), %ymm0, %ymm0
+ vpcmpeqq %ymm1, %ymm0, %ymm0
+ vmovdqa %ymm0, `32*9*8+32`(%rsp)
+
+ # H = U2 - U1 = X2 - X1
+ lea `32*9*0`($b_ptr), %rsi
+ lea `32*9*0`($a_ptr), %rdx
+ lea `32*9*3`(%rsp), %rdi
+ call avx2_sub_x4
+ call avx2_normalize_n_store
+
+ # R = S2 - S1 = Y2 - Y1
+ lea `32*9*1`($b_ptr), %rsi
+ lea `32*9*1`($a_ptr), %rdx
+ lea `32*9*4`(%rsp), %rdi
+ call avx2_sub_x4
+ call avx2_normalize_n_store
+
+ # Z3 = H*Z1*Z2 = H
+ lea `32*9*3`(%rsp), %rsi
+ lea `32*9*2`($r_ptr), %rdi
+ call avx2_mul_by1_x4
+ call avx2_normalize
+
+ vmovdqa `32*9*8`(%rsp), $B
+ vpor `32*9*8+32`(%rsp), $B, $B
+
+ vpandn $ACC0, $B, $ACC0
+ lea .LONE+128(%rip), %rax
+ vpandn $ACC1, $B, $ACC1
+ vpandn $ACC2, $B, $ACC2
+ vpandn $ACC3, $B, $ACC3
+ vpandn $ACC4, $B, $ACC4
+ vpandn $ACC5, $B, $ACC5
+ vpandn $ACC6, $B, $ACC6
+ vpandn $ACC7, $B, $ACC7
+
+ vpand 32*0-128(%rax), $B, $T0
+ vpandn $ACC8, $B, $ACC8
+ vpand 32*1-128(%rax), $B, $Y
+ vpxor $T0, $ACC0, $ACC0
+ vpand 32*2-128(%rax), $B, $T0
+ vpxor $Y, $ACC1, $ACC1
+ vpand 32*3-128(%rax), $B, $Y
+ vpxor $T0, $ACC2, $ACC2
+ vpand 32*4-128(%rax), $B, $T0
+ vpxor $Y, $ACC3, $ACC3
+ vpand 32*5-128(%rax), $B, $Y
+ vpxor $T0, $ACC4, $ACC4
+ vpand 32*6-128(%rax), $B, $T0
+ vpxor $Y, $ACC5, $ACC5
+ vpand 32*7-128(%rax), $B, $Y
+ vpxor $T0, $ACC6, $ACC6
+ vpand 32*8-128(%rax), $B, $T0
+ vpxor $Y, $ACC7, $ACC7
+ vpxor $T0, $ACC8, $ACC8
+ `&STORE`
+
+ # R^2 = R^2
+ lea `32*9*4`(%rsp), %rsi
+ lea `32*9*6`(%rsp), %rdi
+ lea `32*9*8+32*2`(%rsp), %rcx # temporary vector
+ call avx2_sqr_x4
+ call avx2_normalize_n_store
+
+ # H^2 = H^2
+ lea `32*9*3`(%rsp), %rsi
+ lea `32*9*5`(%rsp), %rdi
+ call avx2_sqr_x4
+ call avx2_normalize_n_store
+
+ # H^3 = H^2*H
+ lea `32*9*3`(%rsp), %rsi
+ lea `32*9*5`(%rsp), %rdx
+ lea `32*9*7`(%rsp), %rdi
+ call avx2_mul_x4
+ call avx2_normalize_n_store
+
+ # U2 = U1*H^2
+ lea `32*9*0`($a_ptr), %rsi
+ lea `32*9*5`(%rsp), %rdx
+ lea `32*9*0`(%rsp), %rdi
+ call avx2_mul_x4
+ #call avx2_normalize
+ `&STORE`
+
+ # Hsqr = U2*2
+ #lea 32*9*0(%rsp), %rsi
+ #lea 32*9*5(%rsp), %rdi
+ #call avx2_mul_by2_x4
+
+ vpaddq $ACC0, $ACC0, $ACC0 # inlined avx2_mul_by2_x4
+ lea `32*9*5`(%rsp), %rdi
+ vpaddq $ACC1, $ACC1, $ACC1
+ vpaddq $ACC2, $ACC2, $ACC2
+ vpaddq $ACC3, $ACC3, $ACC3
+ vpaddq $ACC4, $ACC4, $ACC4
+ vpaddq $ACC5, $ACC5, $ACC5
+ vpaddq $ACC6, $ACC6, $ACC6
+ vpaddq $ACC7, $ACC7, $ACC7
+ vpaddq $ACC8, $ACC8, $ACC8
+ call avx2_normalize_n_store
+
+ # X3 = R^2 - H^3
+ #lea 32*9*6(%rsp), %rsi
+ #lea 32*9*7(%rsp), %rdx
+ #lea 32*9*5(%rsp), %rcx
+ #lea 32*9*0($r_ptr), %rdi
+ #call avx2_sub_x4
+ #NORMALIZE
+ #STORE
+
+ # X3 = X3 - U2*2
+ #lea 32*9*0($r_ptr), %rsi
+ #lea 32*9*0($r_ptr), %rdi
+ #call avx2_sub_x4
+ #NORMALIZE
+ #STORE
+
+ lea `32*9*6+128`(%rsp), %rsi
+ lea .LAVX2_POLY_x2+128(%rip), %rax
+ lea `32*9*7+128`(%rsp), %rdx
+ lea `32*9*5+128`(%rsp), %rcx
+ lea `32*9*0`($r_ptr), %rdi
+
+ vmovdqa 32*0-128(%rsi), $ACC0
+ vmovdqa 32*1-128(%rsi), $ACC1
+ vmovdqa 32*2-128(%rsi), $ACC2
+ vmovdqa 32*3-128(%rsi), $ACC3
+ vmovdqa 32*4-128(%rsi), $ACC4
+ vmovdqa 32*5-128(%rsi), $ACC5
+ vmovdqa 32*6-128(%rsi), $ACC6
+ vmovdqa 32*7-128(%rsi), $ACC7
+ vmovdqa 32*8-128(%rsi), $ACC8
+
+ vpaddq 32*0-128(%rax), $ACC0, $ACC0
+ vpaddq 32*1-128(%rax), $ACC1, $ACC1
+ vpaddq 32*2-128(%rax), $ACC2, $ACC2
+ vpaddq 32*3-128(%rax), $ACC3, $ACC3
+ vpaddq 32*4-128(%rax), $ACC4, $ACC4
+ vpaddq 32*5-128(%rax), $ACC5, $ACC5
+ vpaddq 32*6-128(%rax), $ACC6, $ACC6
+ vpaddq 32*7-128(%rax), $ACC7, $ACC7
+ vpaddq 32*8-128(%rax), $ACC8, $ACC8
+
+ vpsubq 32*0-128(%rdx), $ACC0, $ACC0
+ vpsubq 32*1-128(%rdx), $ACC1, $ACC1
+ vpsubq 32*2-128(%rdx), $ACC2, $ACC2
+ vpsubq 32*3-128(%rdx), $ACC3, $ACC3
+ vpsubq 32*4-128(%rdx), $ACC4, $ACC4
+ vpsubq 32*5-128(%rdx), $ACC5, $ACC5
+ vpsubq 32*6-128(%rdx), $ACC6, $ACC6
+ vpsubq 32*7-128(%rdx), $ACC7, $ACC7
+ vpsubq 32*8-128(%rdx), $ACC8, $ACC8
+
+ vpsubq 32*0-128(%rcx), $ACC0, $ACC0
+ vpsubq 32*1-128(%rcx), $ACC1, $ACC1
+ vpsubq 32*2-128(%rcx), $ACC2, $ACC2
+ vpsubq 32*3-128(%rcx), $ACC3, $ACC3
+ vpsubq 32*4-128(%rcx), $ACC4, $ACC4
+ vpsubq 32*5-128(%rcx), $ACC5, $ACC5
+ vpsubq 32*6-128(%rcx), $ACC6, $ACC6
+ vpsubq 32*7-128(%rcx), $ACC7, $ACC7
+ vpsubq 32*8-128(%rcx), $ACC8, $ACC8
+ call avx2_normalize
+
+ lea 32*0($b_ptr), %rsi
+ lea 32*0($a_ptr), %rdx
+ call avx2_select_n_store
+
+ # H = U2 - X3
+ lea `32*9*0`(%rsp), %rsi
+ lea `32*9*0`($r_ptr), %rdx
+ lea `32*9*3`(%rsp), %rdi
+ call avx2_sub_x4
+ call avx2_normalize_n_store
+
+ # H = H*R
+ lea `32*9*3`(%rsp), %rsi
+ lea `32*9*4`(%rsp), %rdx
+ lea `32*9*3`(%rsp), %rdi
+ call avx2_mul_x4
+ call avx2_normalize_n_store
+
+ # S2 = S1 * H^3
+ lea `32*9*7`(%rsp), %rsi
+ lea `32*9*1`($a_ptr), %rdx
+ lea `32*9*1`(%rsp), %rdi
+ call avx2_mul_x4
+ call avx2_normalize_n_store
+
+ #
+ lea `32*9*3`(%rsp), %rsi
+ lea `32*9*1`(%rsp), %rdx
+ lea `32*9*1`($r_ptr), %rdi
+ call avx2_sub_x4
+ call avx2_normalize
+
+ lea 32*9($b_ptr), %rsi
+ lea 32*9($a_ptr), %rdx
+ call avx2_select_n_store
+
+ #lea 32*9*0($r_ptr), %rsi
+ #lea 32*9*0($r_ptr), %rdi
+ #call avx2_mul_by1_x4
+ #NORMALIZE
+ #STORE
+
+ lea `32*9*1`($r_ptr), %rsi
+ lea `32*9*1`($r_ptr), %rdi
+ call avx2_mul_by1_x4
+ call avx2_normalize_n_store
+
+ vzeroupper
+___
+$code.=<<___ if ($win64);
+ movaps %xmm6, -16*10(%rbp)
+ movaps %xmm7, -16*9(%rbp)
+ movaps %xmm8, -16*8(%rbp)
+ movaps %xmm9, -16*7(%rbp)
+ movaps %xmm10, -16*6(%rbp)
+ movaps %xmm11, -16*5(%rbp)
+ movaps %xmm12, -16*4(%rbp)
+ movaps %xmm13, -16*3(%rbp)
+ movaps %xmm14, -16*2(%rbp)
+ movaps %xmm15, -16*1(%rbp)
+___
+$code.=<<___;
+ mov %rbp, %rsp
+ pop %rbp
+ ret
+.size ecp_nistz256_avx2_point_add_affines_x4,.-ecp_nistz256_avx2_point_add_affines_x4
+
+################################################################################
+# void ecp_nistz256_avx2_to_mont(void* RESULTx4, void *Ax4);
+.globl ecp_nistz256_avx2_to_mont
+.type ecp_nistz256_avx2_to_mont,\@function,2
+.align 32
+ecp_nistz256_avx2_to_mont:
+ vzeroupper
+___
+$code.=<<___ if ($win64);
+ lea -8-16*10(%rsp), %rsp
+ vmovaps %xmm6, -8-16*10(%rax)
+ vmovaps %xmm7, -8-16*9(%rax)
+ vmovaps %xmm8, -8-16*8(%rax)
+ vmovaps %xmm9, -8-16*7(%rax)
+ vmovaps %xmm10, -8-16*6(%rax)
+ vmovaps %xmm11, -8-16*5(%rax)
+ vmovaps %xmm12, -8-16*4(%rax)
+ vmovaps %xmm13, -8-16*3(%rax)
+ vmovaps %xmm14, -8-16*2(%rax)
+ vmovaps %xmm15, -8-16*1(%rax)
+___
+$code.=<<___;
+ vmovdqa .LAVX2_AND_MASK(%rip), $AND_MASK
+ lea .LTO_MONT_AVX2(%rip), %rdx
+ call avx2_mul_x4
+ call avx2_normalize_n_store
+
+ vzeroupper
+___
+$code.=<<___ if ($win64);
+ movaps 16*0(%rsp), %xmm6
+ movaps 16*1(%rsp), %xmm7
+ movaps 16*2(%rsp), %xmm8
+ movaps 16*3(%rsp), %xmm9
+ movaps 16*4(%rsp), %xmm10
+ movaps 16*5(%rsp), %xmm11
+ movaps 16*6(%rsp), %xmm12
+ movaps 16*7(%rsp), %xmm13
+ movaps 16*8(%rsp), %xmm14
+ movaps 16*9(%rsp), %xmm15
+ lea 8+16*10(%rsp), %rsp
+___
+$code.=<<___;
+ ret
+.size ecp_nistz256_avx2_to_mont,.-ecp_nistz256_avx2_to_mont
+
+################################################################################
+# void ecp_nistz256_avx2_from_mont(void* RESULTx4, void *Ax4);
+.globl ecp_nistz256_avx2_from_mont
+.type ecp_nistz256_avx2_from_mont,\@function,2
+.align 32
+ecp_nistz256_avx2_from_mont:
+ vzeroupper
+___
+$code.=<<___ if ($win64);
+ lea -8-16*10(%rsp), %rsp
+ vmovaps %xmm6, -8-16*10(%rax)
+ vmovaps %xmm7, -8-16*9(%rax)
+ vmovaps %xmm8, -8-16*8(%rax)
+ vmovaps %xmm9, -8-16*7(%rax)
+ vmovaps %xmm10, -8-16*6(%rax)
+ vmovaps %xmm11, -8-16*5(%rax)
+ vmovaps %xmm12, -8-16*4(%rax)
+ vmovaps %xmm13, -8-16*3(%rax)
+ vmovaps %xmm14, -8-16*2(%rax)
+ vmovaps %xmm15, -8-16*1(%rax)
+___
+$code.=<<___;
+ vmovdqa .LAVX2_AND_MASK(%rip), $AND_MASK
+ lea .LFROM_MONT_AVX2(%rip), %rdx
+ call avx2_mul_x4
+ call avx2_normalize_n_store
+
+ vzeroupper
+___
+$code.=<<___ if ($win64);
+ movaps 16*0(%rsp), %xmm6
+ movaps 16*1(%rsp), %xmm7
+ movaps 16*2(%rsp), %xmm8
+ movaps 16*3(%rsp), %xmm9
+ movaps 16*4(%rsp), %xmm10
+ movaps 16*5(%rsp), %xmm11
+ movaps 16*6(%rsp), %xmm12
+ movaps 16*7(%rsp), %xmm13
+ movaps 16*8(%rsp), %xmm14
+ movaps 16*9(%rsp), %xmm15
+ lea 8+16*10(%rsp), %rsp
+___
+$code.=<<___;
+ ret
+.size ecp_nistz256_avx2_from_mont,.-ecp_nistz256_avx2_from_mont
+
+################################################################################
+# void ecp_nistz256_avx2_set1(void* RESULTx4);
+.globl ecp_nistz256_avx2_set1
+.type ecp_nistz256_avx2_set1,\@function,1
+.align 32
+ecp_nistz256_avx2_set1:
+ lea .LONE+128(%rip), %rax
+ lea 128(%rdi), %rdi
+ vzeroupper
+ vmovdqa 32*0-128(%rax), %ymm0
+ vmovdqa 32*1-128(%rax), %ymm1
+ vmovdqa 32*2-128(%rax), %ymm2
+ vmovdqa 32*3-128(%rax), %ymm3
+ vmovdqa 32*4-128(%rax), %ymm4
+ vmovdqa 32*5-128(%rax), %ymm5
+ vmovdqa %ymm0, 32*0-128(%rdi)
+ vmovdqa 32*6-128(%rax), %ymm0
+ vmovdqa %ymm1, 32*1-128(%rdi)
+ vmovdqa 32*7-128(%rax), %ymm1
+ vmovdqa %ymm2, 32*2-128(%rdi)
+ vmovdqa 32*8-128(%rax), %ymm2
+ vmovdqa %ymm3, 32*3-128(%rdi)
+ vmovdqa %ymm4, 32*4-128(%rdi)
+ vmovdqa %ymm5, 32*5-128(%rdi)
+ vmovdqa %ymm0, 32*6-128(%rdi)
+ vmovdqa %ymm1, 32*7-128(%rdi)
+ vmovdqa %ymm2, 32*8-128(%rdi)
+
+ vzeroupper
+ ret
+.size ecp_nistz256_avx2_set1,.-ecp_nistz256_avx2_set1
+___
+}
+{
+################################################################################
+# void ecp_nistz256_avx2_multi_select_w7(void* RESULT, void *in,
+# int index0, int index1, int index2, int index3);
+################################################################################
+
+my ($val,$in_t,$index0,$index1,$index2,$index3)=("%rdi","%rsi","%edx","%ecx","%r8d","%r9d");
+my ($INDEX0,$INDEX1,$INDEX2,$INDEX3)=map("%ymm$_",(0..3));
+my ($R0a,$R0b,$R1a,$R1b,$R2a,$R2b,$R3a,$R3b)=map("%ymm$_",(4..11));
+my ($M0,$T0,$T1,$TMP0)=map("%ymm$_",(12..15));
+
+$code.=<<___;
+.globl ecp_nistz256_avx2_multi_select_w7
+.type ecp_nistz256_avx2_multi_select_w7,\@function,6
+.align 32
+ecp_nistz256_avx2_multi_select_w7:
+ vzeroupper
+___
+$code.=<<___ if ($win64);
+ lea -8-16*10(%rsp), %rsp
+ vmovaps %xmm6, -8-16*10(%rax)
+ vmovaps %xmm7, -8-16*9(%rax)
+ vmovaps %xmm8, -8-16*8(%rax)
+ vmovaps %xmm9, -8-16*7(%rax)
+ vmovaps %xmm10, -8-16*6(%rax)
+ vmovaps %xmm11, -8-16*5(%rax)
+ vmovaps %xmm12, -8-16*4(%rax)
+ vmovaps %xmm13, -8-16*3(%rax)
+ vmovaps %xmm14, -8-16*2(%rax)
+ vmovaps %xmm15, -8-16*1(%rax)
+___
+$code.=<<___;
+ lea .LIntOne(%rip), %rax
+
+ vmovd $index0, %xmm0
+ vmovd $index1, %xmm1
+ vmovd $index2, %xmm2
+ vmovd $index3, %xmm3
+
+ vpxor $R0a, $R0a, $R0a
+ vpxor $R0b, $R0b, $R0b
+ vpxor $R1a, $R1a, $R1a
+ vpxor $R1b, $R1b, $R1b
+ vpxor $R2a, $R2a, $R2a
+ vpxor $R2b, $R2b, $R2b
+ vpxor $R3a, $R3a, $R3a
+ vpxor $R3b, $R3b, $R3b
+ vmovdqa (%rax), $M0
+
+ vpermd $INDEX0, $R0a, $INDEX0
+ vpermd $INDEX1, $R0a, $INDEX1
+ vpermd $INDEX2, $R0a, $INDEX2
+ vpermd $INDEX3, $R0a, $INDEX3
+
+ mov \$64, %ecx
+ lea 112($val), $val # size optimization
+ jmp .Lmulti_select_loop_avx2
+
+# INDEX=0, corresponds to the point at infty (0,0)
+.align 32
+.Lmulti_select_loop_avx2:
+ vpcmpeqd $INDEX0, $M0, $TMP0
+
+ vmovdqa `32*0+32*64*2*0`($in_t), $T0
+ vmovdqa `32*1+32*64*2*0`($in_t), $T1
+ vpand $TMP0, $T0, $T0
+ vpand $TMP0, $T1, $T1
+ vpxor $T0, $R0a, $R0a
+ vpxor $T1, $R0b, $R0b
+
+ vpcmpeqd $INDEX1, $M0, $TMP0
+
+ vmovdqa `32*0+32*64*2*1`($in_t), $T0
+ vmovdqa `32*1+32*64*2*1`($in_t), $T1
+ vpand $TMP0, $T0, $T0
+ vpand $TMP0, $T1, $T1
+ vpxor $T0, $R1a, $R1a
+ vpxor $T1, $R1b, $R1b
+
+ vpcmpeqd $INDEX2, $M0, $TMP0
+
+ vmovdqa `32*0+32*64*2*2`($in_t), $T0
+ vmovdqa `32*1+32*64*2*2`($in_t), $T1
+ vpand $TMP0, $T0, $T0
+ vpand $TMP0, $T1, $T1
+ vpxor $T0, $R2a, $R2a
+ vpxor $T1, $R2b, $R2b
+
+ vpcmpeqd $INDEX3, $M0, $TMP0
+
+ vmovdqa `32*0+32*64*2*3`($in_t), $T0
+ vmovdqa `32*1+32*64*2*3`($in_t), $T1
+ vpand $TMP0, $T0, $T0
+ vpand $TMP0, $T1, $T1
+ vpxor $T0, $R3a, $R3a
+ vpxor $T1, $R3b, $R3b
+
+ vpaddd (%rax), $M0, $M0 # increment
+ lea 32*2($in_t), $in_t
+
+ dec %ecx
+ jnz .Lmulti_select_loop_avx2
+
+ vmovdqu $R0a, 32*0-112($val)
+ vmovdqu $R0b, 32*1-112($val)
+ vmovdqu $R1a, 32*2-112($val)
+ vmovdqu $R1b, 32*3-112($val)
+ vmovdqu $R2a, 32*4-112($val)
+ vmovdqu $R2b, 32*5-112($val)
+ vmovdqu $R3a, 32*6-112($val)
+ vmovdqu $R3b, 32*7-112($val)
+
+ vzeroupper
+___
+$code.=<<___ if ($win64);
+ movaps 16*0(%rsp), %xmm6
+ movaps 16*1(%rsp), %xmm7
+ movaps 16*2(%rsp), %xmm8
+ movaps 16*3(%rsp), %xmm9
+ movaps 16*4(%rsp), %xmm10
+ movaps 16*5(%rsp), %xmm11
+ movaps 16*6(%rsp), %xmm12
+ movaps 16*7(%rsp), %xmm13
+ movaps 16*8(%rsp), %xmm14
+ movaps 16*9(%rsp), %xmm15
+ lea 8+16*10(%rsp), %rsp
+___
+$code.=<<___;
+ ret
+.size ecp_nistz256_avx2_multi_select_w7,.-ecp_nistz256_avx2_multi_select_w7
+
+.extern OPENSSL_ia32cap_P
+.globl ecp_nistz_avx2_eligible
+.type ecp_nistz_avx2_eligible,\@abi-omnipotent
+.align 32
+ecp_nistz_avx2_eligible:
+ mov OPENSSL_ia32cap_P+8(%rip),%eax
+ shr \$5,%eax
+ and \$1,%eax
+ ret
+.size ecp_nistz_avx2_eligible,.-ecp_nistz_avx2_eligible
+___
+}
+}} else {{ # assembler is too old
+$code.=<<___;
+.text
+
+.globl ecp_nistz256_avx2_transpose_convert
+.globl ecp_nistz256_avx2_convert_transpose_back
+.globl ecp_nistz256_avx2_point_add_affine_x4
+.globl ecp_nistz256_avx2_point_add_affines_x4
+.globl ecp_nistz256_avx2_to_mont
+.globl ecp_nistz256_avx2_from_mont
+.globl ecp_nistz256_avx2_set1
+.globl ecp_nistz256_avx2_multi_select_w7
+.type ecp_nistz256_avx2_multi_select_w7,\@abi-omnipotent
+ecp_nistz256_avx2_transpose_convert:
+ecp_nistz256_avx2_convert_transpose_back:
+ecp_nistz256_avx2_point_add_affine_x4:
+ecp_nistz256_avx2_point_add_affines_x4:
+ecp_nistz256_avx2_to_mont:
+ecp_nistz256_avx2_from_mont:
+ecp_nistz256_avx2_set1:
+ecp_nistz256_avx2_multi_select_w7:
+ .byte 0x0f,0x0b # ud2
+ ret
+.size ecp_nistz256_avx2_multi_select_w7,.-ecp_nistz256_avx2_multi_select_w7
+
+.globl ecp_nistz_avx2_eligible
+.type ecp_nistz_avx2_eligible,\@abi-omnipotent
+ecp_nistz_avx2_eligible:
+ xor %eax,%eax
+ ret
+.size ecp_nistz_avx2_eligible,.-ecp_nistz_avx2_eligible
+___
+}}
+
+foreach (split("\n",$code)) {
+ s/\`([^\`]*)\`/eval($1)/geo;
+
+ print $_,"\n";
+}
+
+close STDOUT;
diff --git a/crypto/openssl/crypto/ec/asm/ecp_nistz256-x86_64.pl b/crypto/openssl/crypto/ec/asm/ecp_nistz256-x86_64.pl
new file mode 100755
index 0000000..84379fc
--- /dev/null
+++ b/crypto/openssl/crypto/ec/asm/ecp_nistz256-x86_64.pl
@@ -0,0 +1,2997 @@
+#!/usr/bin/env perl
+
+##############################################################################
+# #
+# Copyright 2014 Intel Corporation #
+# #
+# Licensed under the Apache License, Version 2.0 (the "License"); #
+# you may not use this file except in compliance with the License. #
+# You may obtain a copy of the License at #
+# #
+# http://www.apache.org/licenses/LICENSE-2.0 #
+# #
+# Unless required by applicable law or agreed to in writing, software #
+# distributed under the License is distributed on an "AS IS" BASIS, #
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. #
+# See the License for the specific language governing permissions and #
+# limitations under the License. #
+# #
+##############################################################################
+# #
+# Developers and authors: #
+# Shay Gueron (1, 2), and Vlad Krasnov (1) #
+# (1) Intel Corporation, Israel Development Center #
+# (2) University of Haifa #
+# Reference: #
+# S.Gueron and V.Krasnov, "Fast Prime Field Elliptic Curve Cryptography with#
+# 256 Bit Primes" #
+# #
+##############################################################################
+
+# Further optimization by <appro@openssl.org>:
+#
+# this/original with/without -DECP_NISTZ256_ASM(*)
+# Opteron +12-49% +110-150%
+# Bulldozer +14-45% +175-210%
+# P4 +18-46% n/a :-(
+# Westmere +12-34% +80-87%
+# Sandy Bridge +9-35% +110-120%
+# Ivy Bridge +9-35% +110-125%
+# Haswell +8-37% +140-160%
+# Broadwell +18-58% +145-210%
+# Atom +15-50% +130-180%
+# VIA Nano +43-160% +300-480%
+#
+# (*) "without -DECP_NISTZ256_ASM" refers to build with
+# "enable-ec_nistp_64_gcc_128";
+#
+# Ranges denote minimum and maximum improvement coefficients depending
+# on benchmark. Lower coefficients are for ECDSA sign, relatively fastest
+# server-side operation. Keep in mind that +100% means 2x improvement.
+
+$flavour = shift;
+$output = shift;
+if ($flavour =~ /\./) { $output = $flavour; undef $flavour; }
+
+$win64=0; $win64=1 if ($flavour =~ /[nm]asm|mingw64/ || $output =~ /\.asm$/);
+
+$0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1;
+( $xlate="${dir}x86_64-xlate.pl" and -f $xlate ) or
+( $xlate="${dir}../../perlasm/x86_64-xlate.pl" and -f $xlate) or
+die "can't locate x86_64-xlate.pl";
+
+open OUT,"| \"$^X\" $xlate $flavour $output";
+*STDOUT=*OUT;
+
+if (`$ENV{CC} -Wa,-v -c -o /dev/null -x assembler /dev/null 2>&1`
+ =~ /GNU assembler version ([2-9]\.[0-9]+)/) {
+ $avx = ($1>=2.19) + ($1>=2.22);
+ $addx = ($1>=2.23);
+}
+
+if (!$addx && $win64 && ($flavour =~ /nasm/ || $ENV{ASM} =~ /nasm/) &&
+ `nasm -v 2>&1` =~ /NASM version ([2-9]\.[0-9]+)/) {
+ $avx = ($1>=2.09) + ($1>=2.10);
+ $addx = ($1>=2.10);
+}
+
+if (!$addx && $win64 && ($flavour =~ /masm/ || $ENV{ASM} =~ /ml64/) &&
+ `ml64 2>&1` =~ /Version ([0-9]+)\./) {
+ $avx = ($1>=10) + ($1>=11);
+ $addx = ($1>=12);
+}
+
+if (!$addx && `$ENV{CC} -v 2>&1` =~ /(^clang version|based on LLVM) ([3-9])\.([0-9]+)/) {
+ my $ver = $2 + $3/100.0; # 3.1->3.01, 3.10->3.10
+ $avx = ($ver>=3.0) + ($ver>=3.01);
+ $addx = ($ver>=3.03);
+}
+
+$code.=<<___;
+.text
+.extern OPENSSL_ia32cap_P
+
+# The polynomial
+.align 64
+.Lpoly:
+.quad 0xffffffffffffffff, 0x00000000ffffffff, 0x0000000000000000, 0xffffffff00000001
+
+# 2^512 mod P precomputed for NIST P256 polynomial
+.LRR:
+.quad 0x0000000000000003, 0xfffffffbffffffff, 0xfffffffffffffffe, 0x00000004fffffffd
+
+.LOne:
+.long 1,1,1,1,1,1,1,1
+.LTwo:
+.long 2,2,2,2,2,2,2,2
+.LThree:
+.long 3,3,3,3,3,3,3,3
+.LONE_mont:
+.quad 0x0000000000000001, 0xffffffff00000000, 0xffffffffffffffff, 0x00000000fffffffe
+___
+
+{
+################################################################################
+# void ecp_nistz256_mul_by_2(uint64_t res[4], uint64_t a[4]);
+
+my ($a0,$a1,$a2,$a3)=map("%r$_",(8..11));
+my ($t0,$t1,$t2,$t3,$t4)=("%rax","%rdx","%rcx","%r12","%r13");
+my ($r_ptr,$a_ptr,$b_ptr)=("%rdi","%rsi","%rdx");
+
+$code.=<<___;
+
+.globl ecp_nistz256_mul_by_2
+.type ecp_nistz256_mul_by_2,\@function,2
+.align 64
+ecp_nistz256_mul_by_2:
+ push %r12
+ push %r13
+
+ mov 8*0($a_ptr), $a0
+ mov 8*1($a_ptr), $a1
+ add $a0, $a0 # a0:a3+a0:a3
+ mov 8*2($a_ptr), $a2
+ adc $a1, $a1
+ mov 8*3($a_ptr), $a3
+ lea .Lpoly(%rip), $a_ptr
+ mov $a0, $t0
+ adc $a2, $a2
+ adc $a3, $a3
+ mov $a1, $t1
+ sbb $t4, $t4
+
+ sub 8*0($a_ptr), $a0
+ mov $a2, $t2
+ sbb 8*1($a_ptr), $a1
+ sbb 8*2($a_ptr), $a2
+ mov $a3, $t3
+ sbb 8*3($a_ptr), $a3
+ test $t4, $t4
+
+ cmovz $t0, $a0
+ cmovz $t1, $a1
+ mov $a0, 8*0($r_ptr)
+ cmovz $t2, $a2
+ mov $a1, 8*1($r_ptr)
+ cmovz $t3, $a3
+ mov $a2, 8*2($r_ptr)
+ mov $a3, 8*3($r_ptr)
+
+ pop %r13
+ pop %r12
+ ret
+.size ecp_nistz256_mul_by_2,.-ecp_nistz256_mul_by_2
+
+################################################################################
+# void ecp_nistz256_div_by_2(uint64_t res[4], uint64_t a[4]);
+.globl ecp_nistz256_div_by_2
+.type ecp_nistz256_div_by_2,\@function,2
+.align 32
+ecp_nistz256_div_by_2:
+ push %r12
+ push %r13
+
+ mov 8*0($a_ptr), $a0
+ mov 8*1($a_ptr), $a1
+ mov 8*2($a_ptr), $a2
+ mov $a0, $t0
+ mov 8*3($a_ptr), $a3
+ lea .Lpoly(%rip), $a_ptr
+
+ mov $a1, $t1
+ xor $t4, $t4
+ add 8*0($a_ptr), $a0
+ mov $a2, $t2
+ adc 8*1($a_ptr), $a1
+ adc 8*2($a_ptr), $a2
+ mov $a3, $t3
+ adc 8*3($a_ptr), $a3
+ adc \$0, $t4
+ xor $a_ptr, $a_ptr # borrow $a_ptr
+ test \$1, $t0
+
+ cmovz $t0, $a0
+ cmovz $t1, $a1
+ cmovz $t2, $a2
+ cmovz $t3, $a3
+ cmovz $a_ptr, $t4
+
+ mov $a1, $t0 # a0:a3>>1
+ shr \$1, $a0
+ shl \$63, $t0
+ mov $a2, $t1
+ shr \$1, $a1
+ or $t0, $a0
+ shl \$63, $t1
+ mov $a3, $t2
+ shr \$1, $a2
+ or $t1, $a1
+ shl \$63, $t2
+ shr \$1, $a3
+ shl \$63, $t4
+ or $t2, $a2
+ or $t4, $a3
+
+ mov $a0, 8*0($r_ptr)
+ mov $a1, 8*1($r_ptr)
+ mov $a2, 8*2($r_ptr)
+ mov $a3, 8*3($r_ptr)
+
+ pop %r13
+ pop %r12
+ ret
+.size ecp_nistz256_div_by_2,.-ecp_nistz256_div_by_2
+
+################################################################################
+# void ecp_nistz256_mul_by_3(uint64_t res[4], uint64_t a[4]);
+.globl ecp_nistz256_mul_by_3
+.type ecp_nistz256_mul_by_3,\@function,2
+.align 32
+ecp_nistz256_mul_by_3:
+ push %r12
+ push %r13
+
+ mov 8*0($a_ptr), $a0
+ xor $t4, $t4
+ mov 8*1($a_ptr), $a1
+ add $a0, $a0 # a0:a3+a0:a3
+ mov 8*2($a_ptr), $a2
+ adc $a1, $a1
+ mov 8*3($a_ptr), $a3
+ mov $a0, $t0
+ adc $a2, $a2
+ adc $a3, $a3
+ mov $a1, $t1
+ adc \$0, $t4
+
+ sub \$-1, $a0
+ mov $a2, $t2
+ sbb .Lpoly+8*1(%rip), $a1
+ sbb \$0, $a2
+ mov $a3, $t3
+ sbb .Lpoly+8*3(%rip), $a3
+ test $t4, $t4
+
+ cmovz $t0, $a0
+ cmovz $t1, $a1
+ cmovz $t2, $a2
+ cmovz $t3, $a3
+
+ xor $t4, $t4
+ add 8*0($a_ptr), $a0 # a0:a3+=a_ptr[0:3]
+ adc 8*1($a_ptr), $a1
+ mov $a0, $t0
+ adc 8*2($a_ptr), $a2
+ adc 8*3($a_ptr), $a3
+ mov $a1, $t1
+ adc \$0, $t4
+
+ sub \$-1, $a0
+ mov $a2, $t2
+ sbb .Lpoly+8*1(%rip), $a1
+ sbb \$0, $a2
+ mov $a3, $t3
+ sbb .Lpoly+8*3(%rip), $a3
+ test $t4, $t4
+
+ cmovz $t0, $a0
+ cmovz $t1, $a1
+ mov $a0, 8*0($r_ptr)
+ cmovz $t2, $a2
+ mov $a1, 8*1($r_ptr)
+ cmovz $t3, $a3
+ mov $a2, 8*2($r_ptr)
+ mov $a3, 8*3($r_ptr)
+
+ pop %r13
+ pop %r12
+ ret
+.size ecp_nistz256_mul_by_3,.-ecp_nistz256_mul_by_3
+
+################################################################################
+# void ecp_nistz256_add(uint64_t res[4], uint64_t a[4], uint64_t b[4]);
+.globl ecp_nistz256_add
+.type ecp_nistz256_add,\@function,3
+.align 32
+ecp_nistz256_add:
+ push %r12
+ push %r13
+
+ mov 8*0($a_ptr), $a0
+ xor $t4, $t4
+ mov 8*1($a_ptr), $a1
+ mov 8*2($a_ptr), $a2
+ mov 8*3($a_ptr), $a3
+ lea .Lpoly(%rip), $a_ptr
+
+ add 8*0($b_ptr), $a0
+ adc 8*1($b_ptr), $a1
+ mov $a0, $t0
+ adc 8*2($b_ptr), $a2
+ adc 8*3($b_ptr), $a3
+ mov $a1, $t1
+ adc \$0, $t4
+
+ sub 8*0($a_ptr), $a0
+ mov $a2, $t2
+ sbb 8*1($a_ptr), $a1
+ sbb 8*2($a_ptr), $a2
+ mov $a3, $t3
+ sbb 8*3($a_ptr), $a3
+ test $t4, $t4
+
+ cmovz $t0, $a0
+ cmovz $t1, $a1
+ mov $a0, 8*0($r_ptr)
+ cmovz $t2, $a2
+ mov $a1, 8*1($r_ptr)
+ cmovz $t3, $a3
+ mov $a2, 8*2($r_ptr)
+ mov $a3, 8*3($r_ptr)
+
+ pop %r13
+ pop %r12
+ ret
+.size ecp_nistz256_add,.-ecp_nistz256_add
+
+################################################################################
+# void ecp_nistz256_sub(uint64_t res[4], uint64_t a[4], uint64_t b[4]);
+.globl ecp_nistz256_sub
+.type ecp_nistz256_sub,\@function,3
+.align 32
+ecp_nistz256_sub:
+ push %r12
+ push %r13
+
+ mov 8*0($a_ptr), $a0
+ xor $t4, $t4
+ mov 8*1($a_ptr), $a1
+ mov 8*2($a_ptr), $a2
+ mov 8*3($a_ptr), $a3
+ lea .Lpoly(%rip), $a_ptr
+
+ sub 8*0($b_ptr), $a0
+ sbb 8*1($b_ptr), $a1
+ mov $a0, $t0
+ sbb 8*2($b_ptr), $a2
+ sbb 8*3($b_ptr), $a3
+ mov $a1, $t1
+ sbb \$0, $t4
+
+ add 8*0($a_ptr), $a0
+ mov $a2, $t2
+ adc 8*1($a_ptr), $a1
+ adc 8*2($a_ptr), $a2
+ mov $a3, $t3
+ adc 8*3($a_ptr), $a3
+ test $t4, $t4
+
+ cmovz $t0, $a0
+ cmovz $t1, $a1
+ mov $a0, 8*0($r_ptr)
+ cmovz $t2, $a2
+ mov $a1, 8*1($r_ptr)
+ cmovz $t3, $a3
+ mov $a2, 8*2($r_ptr)
+ mov $a3, 8*3($r_ptr)
+
+ pop %r13
+ pop %r12
+ ret
+.size ecp_nistz256_sub,.-ecp_nistz256_sub
+
+################################################################################
+# void ecp_nistz256_neg(uint64_t res[4], uint64_t a[4]);
+.globl ecp_nistz256_neg
+.type ecp_nistz256_neg,\@function,2
+.align 32
+ecp_nistz256_neg:
+ push %r12
+ push %r13
+
+ xor $a0, $a0
+ xor $a1, $a1
+ xor $a2, $a2
+ xor $a3, $a3
+ xor $t4, $t4
+
+ sub 8*0($a_ptr), $a0
+ sbb 8*1($a_ptr), $a1
+ sbb 8*2($a_ptr), $a2
+ mov $a0, $t0
+ sbb 8*3($a_ptr), $a3
+ lea .Lpoly(%rip), $a_ptr
+ mov $a1, $t1
+ sbb \$0, $t4
+
+ add 8*0($a_ptr), $a0
+ mov $a2, $t2
+ adc 8*1($a_ptr), $a1
+ adc 8*2($a_ptr), $a2
+ mov $a3, $t3
+ adc 8*3($a_ptr), $a3
+ test $t4, $t4
+
+ cmovz $t0, $a0
+ cmovz $t1, $a1
+ mov $a0, 8*0($r_ptr)
+ cmovz $t2, $a2
+ mov $a1, 8*1($r_ptr)
+ cmovz $t3, $a3
+ mov $a2, 8*2($r_ptr)
+ mov $a3, 8*3($r_ptr)
+
+ pop %r13
+ pop %r12
+ ret
+.size ecp_nistz256_neg,.-ecp_nistz256_neg
+___
+}
+{
+my ($r_ptr,$a_ptr,$b_org,$b_ptr)=("%rdi","%rsi","%rdx","%rbx");
+my ($acc0,$acc1,$acc2,$acc3,$acc4,$acc5,$acc6,$acc7)=map("%r$_",(8..15));
+my ($t0,$t1,$t2,$t3,$t4)=("%rcx","%rbp","%rbx","%rdx","%rax");
+my ($poly1,$poly3)=($acc6,$acc7);
+
+$code.=<<___;
+################################################################################
+# void ecp_nistz256_to_mont(
+# uint64_t res[4],
+# uint64_t in[4]);
+.globl ecp_nistz256_to_mont
+.type ecp_nistz256_to_mont,\@function,2
+.align 32
+ecp_nistz256_to_mont:
+___
+$code.=<<___ if ($addx);
+ mov \$0x80100, %ecx
+ and OPENSSL_ia32cap_P+8(%rip), %ecx
+___
+$code.=<<___;
+ lea .LRR(%rip), $b_org
+ jmp .Lmul_mont
+.size ecp_nistz256_to_mont,.-ecp_nistz256_to_mont
+
+################################################################################
+# void ecp_nistz256_mul_mont(
+# uint64_t res[4],
+# uint64_t a[4],
+# uint64_t b[4]);
+
+.globl ecp_nistz256_mul_mont
+.type ecp_nistz256_mul_mont,\@function,3
+.align 32
+ecp_nistz256_mul_mont:
+___
+$code.=<<___ if ($addx);
+ mov \$0x80100, %ecx
+ and OPENSSL_ia32cap_P+8(%rip), %ecx
+___
+$code.=<<___;
+.Lmul_mont:
+ push %rbp
+ push %rbx
+ push %r12
+ push %r13
+ push %r14
+ push %r15
+___
+$code.=<<___ if ($addx);
+ cmp \$0x80100, %ecx
+ je .Lmul_montx
+___
+$code.=<<___;
+ mov $b_org, $b_ptr
+ mov 8*0($b_org), %rax
+ mov 8*0($a_ptr), $acc1
+ mov 8*1($a_ptr), $acc2
+ mov 8*2($a_ptr), $acc3
+ mov 8*3($a_ptr), $acc4
+
+ call __ecp_nistz256_mul_montq
+___
+$code.=<<___ if ($addx);
+ jmp .Lmul_mont_done
+
+.align 32
+.Lmul_montx:
+ mov $b_org, $b_ptr
+ mov 8*0($b_org), %rdx
+ mov 8*0($a_ptr), $acc1
+ mov 8*1($a_ptr), $acc2
+ mov 8*2($a_ptr), $acc3
+ mov 8*3($a_ptr), $acc4
+ lea -128($a_ptr), $a_ptr # control u-op density
+
+ call __ecp_nistz256_mul_montx
+___
+$code.=<<___;
+.Lmul_mont_done:
+ pop %r15
+ pop %r14
+ pop %r13
+ pop %r12
+ pop %rbx
+ pop %rbp
+ ret
+.size ecp_nistz256_mul_mont,.-ecp_nistz256_mul_mont
+
+.type __ecp_nistz256_mul_montq,\@abi-omnipotent
+.align 32
+__ecp_nistz256_mul_montq:
+ ########################################################################
+ # Multiply a by b[0]
+ mov %rax, $t1
+ mulq $acc1
+ mov .Lpoly+8*1(%rip),$poly1
+ mov %rax, $acc0
+ mov $t1, %rax
+ mov %rdx, $acc1
+
+ mulq $acc2
+ mov .Lpoly+8*3(%rip),$poly3
+ add %rax, $acc1
+ mov $t1, %rax
+ adc \$0, %rdx
+ mov %rdx, $acc2
+
+ mulq $acc3
+ add %rax, $acc2
+ mov $t1, %rax
+ adc \$0, %rdx
+ mov %rdx, $acc3
+
+ mulq $acc4
+ add %rax, $acc3
+ mov $acc0, %rax
+ adc \$0, %rdx
+ xor $acc5, $acc5
+ mov %rdx, $acc4
+
+ ########################################################################
+ # First reduction step
+ # Basically now we want to multiply acc[0] by p256,
+ # and add the result to the acc.
+ # Due to the special form of p256 we do some optimizations
+ #
+ # acc[0] x p256[0..1] = acc[0] x 2^96 - acc[0]
+ # then we add acc[0] and get acc[0] x 2^96
+
+ mov $acc0, $t1
+ shl \$32, $acc0
+ mulq $poly3
+ shr \$32, $t1
+ add $acc0, $acc1 # +=acc[0]<<96
+ adc $t1, $acc2
+ adc %rax, $acc3
+ mov 8*1($b_ptr), %rax
+ adc %rdx, $acc4
+ adc \$0, $acc5
+ xor $acc0, $acc0
+
+ ########################################################################
+ # Multiply by b[1]
+ mov %rax, $t1
+ mulq 8*0($a_ptr)
+ add %rax, $acc1
+ mov $t1, %rax
+ adc \$0, %rdx
+ mov %rdx, $t0
+
+ mulq 8*1($a_ptr)
+ add $t0, $acc2
+ adc \$0, %rdx
+ add %rax, $acc2
+ mov $t1, %rax
+ adc \$0, %rdx
+ mov %rdx, $t0
+
+ mulq 8*2($a_ptr)
+ add $t0, $acc3
+ adc \$0, %rdx
+ add %rax, $acc3
+ mov $t1, %rax
+ adc \$0, %rdx
+ mov %rdx, $t0
+
+ mulq 8*3($a_ptr)
+ add $t0, $acc4
+ adc \$0, %rdx
+ add %rax, $acc4
+ mov $acc1, %rax
+ adc %rdx, $acc5
+ adc \$0, $acc0
+
+ ########################################################################
+ # Second reduction step
+ mov $acc1, $t1
+ shl \$32, $acc1
+ mulq $poly3
+ shr \$32, $t1
+ add $acc1, $acc2
+ adc $t1, $acc3
+ adc %rax, $acc4
+ mov 8*2($b_ptr), %rax
+ adc %rdx, $acc5
+ adc \$0, $acc0
+ xor $acc1, $acc1
+
+ ########################################################################
+ # Multiply by b[2]
+ mov %rax, $t1
+ mulq 8*0($a_ptr)
+ add %rax, $acc2
+ mov $t1, %rax
+ adc \$0, %rdx
+ mov %rdx, $t0
+
+ mulq 8*1($a_ptr)
+ add $t0, $acc3
+ adc \$0, %rdx
+ add %rax, $acc3
+ mov $t1, %rax
+ adc \$0, %rdx
+ mov %rdx, $t0
+
+ mulq 8*2($a_ptr)
+ add $t0, $acc4
+ adc \$0, %rdx
+ add %rax, $acc4
+ mov $t1, %rax
+ adc \$0, %rdx
+ mov %rdx, $t0
+
+ mulq 8*3($a_ptr)
+ add $t0, $acc5
+ adc \$0, %rdx
+ add %rax, $acc5
+ mov $acc2, %rax
+ adc %rdx, $acc0
+ adc \$0, $acc1
+
+ ########################################################################
+ # Third reduction step
+ mov $acc2, $t1
+ shl \$32, $acc2
+ mulq $poly3
+ shr \$32, $t1
+ add $acc2, $acc3
+ adc $t1, $acc4
+ adc %rax, $acc5
+ mov 8*3($b_ptr), %rax
+ adc %rdx, $acc0
+ adc \$0, $acc1
+ xor $acc2, $acc2
+
+ ########################################################################
+ # Multiply by b[3]
+ mov %rax, $t1
+ mulq 8*0($a_ptr)
+ add %rax, $acc3
+ mov $t1, %rax
+ adc \$0, %rdx
+ mov %rdx, $t0
+
+ mulq 8*1($a_ptr)
+ add $t0, $acc4
+ adc \$0, %rdx
+ add %rax, $acc4
+ mov $t1, %rax
+ adc \$0, %rdx
+ mov %rdx, $t0
+
+ mulq 8*2($a_ptr)
+ add $t0, $acc5
+ adc \$0, %rdx
+ add %rax, $acc5
+ mov $t1, %rax
+ adc \$0, %rdx
+ mov %rdx, $t0
+
+ mulq 8*3($a_ptr)
+ add $t0, $acc0
+ adc \$0, %rdx
+ add %rax, $acc0
+ mov $acc3, %rax
+ adc %rdx, $acc1
+ adc \$0, $acc2
+
+ ########################################################################
+ # Final reduction step
+ mov $acc3, $t1
+ shl \$32, $acc3
+ mulq $poly3
+ shr \$32, $t1
+ add $acc3, $acc4
+ adc $t1, $acc5
+ mov $acc4, $t0
+ adc %rax, $acc0
+ adc %rdx, $acc1
+ mov $acc5, $t1
+ adc \$0, $acc2
+
+ ########################################################################
+ # Branch-less conditional subtraction of P
+ sub \$-1, $acc4 # .Lpoly[0]
+ mov $acc0, $t2
+ sbb $poly1, $acc5 # .Lpoly[1]
+ sbb \$0, $acc0 # .Lpoly[2]
+ mov $acc1, $t3
+ sbb $poly3, $acc1 # .Lpoly[3]
+ sbb \$0, $acc2
+
+ cmovc $t0, $acc4
+ cmovc $t1, $acc5
+ mov $acc4, 8*0($r_ptr)
+ cmovc $t2, $acc0
+ mov $acc5, 8*1($r_ptr)
+ cmovc $t3, $acc1
+ mov $acc0, 8*2($r_ptr)
+ mov $acc1, 8*3($r_ptr)
+
+ ret
+.size __ecp_nistz256_mul_montq,.-__ecp_nistz256_mul_montq
+
+################################################################################
+# void ecp_nistz256_sqr_mont(
+# uint64_t res[4],
+# uint64_t a[4]);
+
+# we optimize the square according to S.Gueron and V.Krasnov,
+# "Speeding up Big-Number Squaring"
+.globl ecp_nistz256_sqr_mont
+.type ecp_nistz256_sqr_mont,\@function,2
+.align 32
+ecp_nistz256_sqr_mont:
+___
+$code.=<<___ if ($addx);
+ mov \$0x80100, %ecx
+ and OPENSSL_ia32cap_P+8(%rip), %ecx
+___
+$code.=<<___;
+ push %rbp
+ push %rbx
+ push %r12
+ push %r13
+ push %r14
+ push %r15
+___
+$code.=<<___ if ($addx);
+ cmp \$0x80100, %ecx
+ je .Lsqr_montx
+___
+$code.=<<___;
+ mov 8*0($a_ptr), %rax
+ mov 8*1($a_ptr), $acc6
+ mov 8*2($a_ptr), $acc7
+ mov 8*3($a_ptr), $acc0
+
+ call __ecp_nistz256_sqr_montq
+___
+$code.=<<___ if ($addx);
+ jmp .Lsqr_mont_done
+
+.align 32
+.Lsqr_montx:
+ mov 8*0($a_ptr), %rdx
+ mov 8*1($a_ptr), $acc6
+ mov 8*2($a_ptr), $acc7
+ mov 8*3($a_ptr), $acc0
+ lea -128($a_ptr), $a_ptr # control u-op density
+
+ call __ecp_nistz256_sqr_montx
+___
+$code.=<<___;
+.Lsqr_mont_done:
+ pop %r15
+ pop %r14
+ pop %r13
+ pop %r12
+ pop %rbx
+ pop %rbp
+ ret
+.size ecp_nistz256_sqr_mont,.-ecp_nistz256_sqr_mont
+
+.type __ecp_nistz256_sqr_montq,\@abi-omnipotent
+.align 32
+__ecp_nistz256_sqr_montq:
+ mov %rax, $acc5
+ mulq $acc6 # a[1]*a[0]
+ mov %rax, $acc1
+ mov $acc7, %rax
+ mov %rdx, $acc2
+
+ mulq $acc5 # a[0]*a[2]
+ add %rax, $acc2
+ mov $acc0, %rax
+ adc \$0, %rdx
+ mov %rdx, $acc3
+
+ mulq $acc5 # a[0]*a[3]
+ add %rax, $acc3
+ mov $acc7, %rax
+ adc \$0, %rdx
+ mov %rdx, $acc4
+
+ #################################
+ mulq $acc6 # a[1]*a[2]
+ add %rax, $acc3
+ mov $acc0, %rax
+ adc \$0, %rdx
+ mov %rdx, $t1
+
+ mulq $acc6 # a[1]*a[3]
+ add %rax, $acc4
+ mov $acc0, %rax
+ adc \$0, %rdx
+ add $t1, $acc4
+ mov %rdx, $acc5
+ adc \$0, $acc5
+
+ #################################
+ mulq $acc7 # a[2]*a[3]
+ xor $acc7, $acc7
+ add %rax, $acc5
+ mov 8*0($a_ptr), %rax
+ mov %rdx, $acc6
+ adc \$0, $acc6
+
+ add $acc1, $acc1 # acc1:6<<1
+ adc $acc2, $acc2
+ adc $acc3, $acc3
+ adc $acc4, $acc4
+ adc $acc5, $acc5
+ adc $acc6, $acc6
+ adc \$0, $acc7
+
+ mulq %rax
+ mov %rax, $acc0
+ mov 8*1($a_ptr), %rax
+ mov %rdx, $t0
+
+ mulq %rax
+ add $t0, $acc1
+ adc %rax, $acc2
+ mov 8*2($a_ptr), %rax
+ adc \$0, %rdx
+ mov %rdx, $t0
+
+ mulq %rax
+ add $t0, $acc3
+ adc %rax, $acc4
+ mov 8*3($a_ptr), %rax
+ adc \$0, %rdx
+ mov %rdx, $t0
+
+ mulq %rax
+ add $t0, $acc5
+ adc %rax, $acc6
+ mov $acc0, %rax
+ adc %rdx, $acc7
+
+ mov .Lpoly+8*1(%rip), $a_ptr
+ mov .Lpoly+8*3(%rip), $t1
+
+ ##########################################
+ # Now the reduction
+ # First iteration
+ mov $acc0, $t0
+ shl \$32, $acc0
+ mulq $t1
+ shr \$32, $t0
+ add $acc0, $acc1 # +=acc[0]<<96
+ adc $t0, $acc2
+ adc %rax, $acc3
+ mov $acc1, %rax
+ adc \$0, %rdx
+
+ ##########################################
+ # Second iteration
+ mov $acc1, $t0
+ shl \$32, $acc1
+ mov %rdx, $acc0
+ mulq $t1
+ shr \$32, $t0
+ add $acc1, $acc2
+ adc $t0, $acc3
+ adc %rax, $acc0
+ mov $acc2, %rax
+ adc \$0, %rdx
+
+ ##########################################
+ # Third iteration
+ mov $acc2, $t0
+ shl \$32, $acc2
+ mov %rdx, $acc1
+ mulq $t1
+ shr \$32, $t0
+ add $acc2, $acc3
+ adc $t0, $acc0
+ adc %rax, $acc1
+ mov $acc3, %rax
+ adc \$0, %rdx
+
+ ###########################################
+ # Last iteration
+ mov $acc3, $t0
+ shl \$32, $acc3
+ mov %rdx, $acc2
+ mulq $t1
+ shr \$32, $t0
+ add $acc3, $acc0
+ adc $t0, $acc1
+ adc %rax, $acc2
+ adc \$0, %rdx
+ xor $acc3, $acc3
+
+ ############################################
+ # Add the rest of the acc
+ add $acc0, $acc4
+ adc $acc1, $acc5
+ mov $acc4, $acc0
+ adc $acc2, $acc6
+ adc %rdx, $acc7
+ mov $acc5, $acc1
+ adc \$0, $acc3
+
+ sub \$-1, $acc4 # .Lpoly[0]
+ mov $acc6, $acc2
+ sbb $a_ptr, $acc5 # .Lpoly[1]
+ sbb \$0, $acc6 # .Lpoly[2]
+ mov $acc7, $t0
+ sbb $t1, $acc7 # .Lpoly[3]
+ sbb \$0, $acc3
+
+ cmovc $acc0, $acc4
+ cmovc $acc1, $acc5
+ mov $acc4, 8*0($r_ptr)
+ cmovc $acc2, $acc6
+ mov $acc5, 8*1($r_ptr)
+ cmovc $t0, $acc7
+ mov $acc6, 8*2($r_ptr)
+ mov $acc7, 8*3($r_ptr)
+
+ ret
+.size __ecp_nistz256_sqr_montq,.-__ecp_nistz256_sqr_montq
+___
+
+if ($addx) {
+$code.=<<___;
+.type __ecp_nistz256_mul_montx,\@abi-omnipotent
+.align 32
+__ecp_nistz256_mul_montx:
+ ########################################################################
+ # Multiply by b[0]
+ mulx $acc1, $acc0, $acc1
+ mulx $acc2, $t0, $acc2
+ mov \$32, $poly1
+ xor $acc5, $acc5 # cf=0
+ mulx $acc3, $t1, $acc3
+ mov .Lpoly+8*3(%rip), $poly3
+ adc $t0, $acc1
+ mulx $acc4, $t0, $acc4
+ mov $acc0, %rdx
+ adc $t1, $acc2
+ shlx $poly1,$acc0,$t1
+ adc $t0, $acc3
+ shrx $poly1,$acc0,$t0
+ adc \$0, $acc4
+
+ ########################################################################
+ # First reduction step
+ add $t1, $acc1
+ adc $t0, $acc2
+
+ mulx $poly3, $t0, $t1
+ mov 8*1($b_ptr), %rdx
+ adc $t0, $acc3
+ adc $t1, $acc4
+ adc \$0, $acc5
+ xor $acc0, $acc0 # $acc0=0,cf=0,of=0
+
+ ########################################################################
+ # Multiply by b[1]
+ mulx 8*0+128($a_ptr), $t0, $t1
+ adcx $t0, $acc1
+ adox $t1, $acc2
+
+ mulx 8*1+128($a_ptr), $t0, $t1
+ adcx $t0, $acc2
+ adox $t1, $acc3
+
+ mulx 8*2+128($a_ptr), $t0, $t1
+ adcx $t0, $acc3
+ adox $t1, $acc4
+
+ mulx 8*3+128($a_ptr), $t0, $t1
+ mov $acc1, %rdx
+ adcx $t0, $acc4
+ shlx $poly1, $acc1, $t0
+ adox $t1, $acc5
+ shrx $poly1, $acc1, $t1
+
+ adcx $acc0, $acc5
+ adox $acc0, $acc0
+ adc \$0, $acc0
+
+ ########################################################################
+ # Second reduction step
+ add $t0, $acc2
+ adc $t1, $acc3
+
+ mulx $poly3, $t0, $t1
+ mov 8*2($b_ptr), %rdx
+ adc $t0, $acc4
+ adc $t1, $acc5
+ adc \$0, $acc0
+ xor $acc1 ,$acc1 # $acc1=0,cf=0,of=0
+
+ ########################################################################
+ # Multiply by b[2]
+ mulx 8*0+128($a_ptr), $t0, $t1
+ adcx $t0, $acc2
+ adox $t1, $acc3
+
+ mulx 8*1+128($a_ptr), $t0, $t1
+ adcx $t0, $acc3
+ adox $t1, $acc4
+
+ mulx 8*2+128($a_ptr), $t0, $t1
+ adcx $t0, $acc4
+ adox $t1, $acc5
+
+ mulx 8*3+128($a_ptr), $t0, $t1
+ mov $acc2, %rdx
+ adcx $t0, $acc5
+ shlx $poly1, $acc2, $t0
+ adox $t1, $acc0
+ shrx $poly1, $acc2, $t1
+
+ adcx $acc1, $acc0
+ adox $acc1, $acc1
+ adc \$0, $acc1
+
+ ########################################################################
+ # Third reduction step
+ add $t0, $acc3
+ adc $t1, $acc4
+
+ mulx $poly3, $t0, $t1
+ mov 8*3($b_ptr), %rdx
+ adc $t0, $acc5
+ adc $t1, $acc0
+ adc \$0, $acc1
+ xor $acc2, $acc2 # $acc2=0,cf=0,of=0
+
+ ########################################################################
+ # Multiply by b[3]
+ mulx 8*0+128($a_ptr), $t0, $t1
+ adcx $t0, $acc3
+ adox $t1, $acc4
+
+ mulx 8*1+128($a_ptr), $t0, $t1
+ adcx $t0, $acc4
+ adox $t1, $acc5
+
+ mulx 8*2+128($a_ptr), $t0, $t1
+ adcx $t0, $acc5
+ adox $t1, $acc0
+
+ mulx 8*3+128($a_ptr), $t0, $t1
+ mov $acc3, %rdx
+ adcx $t0, $acc0
+ shlx $poly1, $acc3, $t0
+ adox $t1, $acc1
+ shrx $poly1, $acc3, $t1
+
+ adcx $acc2, $acc1
+ adox $acc2, $acc2
+ adc \$0, $acc2
+
+ ########################################################################
+ # Fourth reduction step
+ add $t0, $acc4
+ adc $t1, $acc5
+
+ mulx $poly3, $t0, $t1
+ mov $acc4, $t2
+ mov .Lpoly+8*1(%rip), $poly1
+ adc $t0, $acc0
+ mov $acc5, $t3
+ adc $t1, $acc1
+ adc \$0, $acc2
+
+ ########################################################################
+ # Branch-less conditional subtraction of P
+ xor %eax, %eax
+ mov $acc0, $t0
+ sbb \$-1, $acc4 # .Lpoly[0]
+ sbb $poly1, $acc5 # .Lpoly[1]
+ sbb \$0, $acc0 # .Lpoly[2]
+ mov $acc1, $t1
+ sbb $poly3, $acc1 # .Lpoly[3]
+ sbb \$0, $acc2
+
+ cmovc $t2, $acc4
+ cmovc $t3, $acc5
+ mov $acc4, 8*0($r_ptr)
+ cmovc $t0, $acc0
+ mov $acc5, 8*1($r_ptr)
+ cmovc $t1, $acc1
+ mov $acc0, 8*2($r_ptr)
+ mov $acc1, 8*3($r_ptr)
+
+ ret
+.size __ecp_nistz256_mul_montx,.-__ecp_nistz256_mul_montx
+
+.type __ecp_nistz256_sqr_montx,\@abi-omnipotent
+.align 32
+__ecp_nistz256_sqr_montx:
+ mulx $acc6, $acc1, $acc2 # a[0]*a[1]
+ mulx $acc7, $t0, $acc3 # a[0]*a[2]
+ xor %eax, %eax
+ adc $t0, $acc2
+ mulx $acc0, $t1, $acc4 # a[0]*a[3]
+ mov $acc6, %rdx
+ adc $t1, $acc3
+ adc \$0, $acc4
+ xor $acc5, $acc5 # $acc5=0,cf=0,of=0
+
+ #################################
+ mulx $acc7, $t0, $t1 # a[1]*a[2]
+ adcx $t0, $acc3
+ adox $t1, $acc4
+
+ mulx $acc0, $t0, $t1 # a[1]*a[3]
+ mov $acc7, %rdx
+ adcx $t0, $acc4
+ adox $t1, $acc5
+ adc \$0, $acc5
+
+ #################################
+ mulx $acc0, $t0, $acc6 # a[2]*a[3]
+ mov 8*0+128($a_ptr), %rdx
+ xor $acc7, $acc7 # $acc7=0,cf=0,of=0
+ adcx $acc1, $acc1 # acc1:6<<1
+ adox $t0, $acc5
+ adcx $acc2, $acc2
+ adox $acc7, $acc6 # of=0
+
+ mulx %rdx, $acc0, $t1
+ mov 8*1+128($a_ptr), %rdx
+ adcx $acc3, $acc3
+ adox $t1, $acc1
+ adcx $acc4, $acc4
+ mulx %rdx, $t0, $t4
+ mov 8*2+128($a_ptr), %rdx
+ adcx $acc5, $acc5
+ adox $t0, $acc2
+ adcx $acc6, $acc6
+ .byte 0x67
+ mulx %rdx, $t0, $t1
+ mov 8*3+128($a_ptr), %rdx
+ adox $t4, $acc3
+ adcx $acc7, $acc7
+ adox $t0, $acc4
+ mov \$32, $a_ptr
+ adox $t1, $acc5
+ .byte 0x67,0x67
+ mulx %rdx, $t0, $t4
+ mov $acc0, %rdx
+ adox $t0, $acc6
+ shlx $a_ptr, $acc0, $t0
+ adox $t4, $acc7
+ shrx $a_ptr, $acc0, $t4
+ mov .Lpoly+8*3(%rip), $t1
+
+ # reduction step 1
+ add $t0, $acc1
+ adc $t4, $acc2
+
+ mulx $t1, $t0, $acc0
+ mov $acc1, %rdx
+ adc $t0, $acc3
+ shlx $a_ptr, $acc1, $t0
+ adc \$0, $acc0
+ shrx $a_ptr, $acc1, $t4
+
+ # reduction step 2
+ add $t0, $acc2
+ adc $t4, $acc3
+
+ mulx $t1, $t0, $acc1
+ mov $acc2, %rdx
+ adc $t0, $acc0
+ shlx $a_ptr, $acc2, $t0
+ adc \$0, $acc1
+ shrx $a_ptr, $acc2, $t4
+
+ # reduction step 3
+ add $t0, $acc3
+ adc $t4, $acc0
+
+ mulx $t1, $t0, $acc2
+ mov $acc3, %rdx
+ adc $t0, $acc1
+ shlx $a_ptr, $acc3, $t0
+ adc \$0, $acc2
+ shrx $a_ptr, $acc3, $t4
+
+ # reduction step 4
+ add $t0, $acc0
+ adc $t4, $acc1
+
+ mulx $t1, $t0, $acc3
+ adc $t0, $acc2
+ adc \$0, $acc3
+
+ xor $t3, $t3 # cf=0
+ adc $acc0, $acc4 # accumulate upper half
+ mov .Lpoly+8*1(%rip), $a_ptr
+ adc $acc1, $acc5
+ mov $acc4, $acc0
+ adc $acc2, $acc6
+ adc $acc3, $acc7
+ mov $acc5, $acc1
+ adc \$0, $t3
+
+ xor %eax, %eax # cf=0
+ sbb \$-1, $acc4 # .Lpoly[0]
+ mov $acc6, $acc2
+ sbb $a_ptr, $acc5 # .Lpoly[1]
+ sbb \$0, $acc6 # .Lpoly[2]
+ mov $acc7, $acc3
+ sbb $t1, $acc7 # .Lpoly[3]
+ sbb \$0, $t3
+
+ cmovc $acc0, $acc4
+ cmovc $acc1, $acc5
+ mov $acc4, 8*0($r_ptr)
+ cmovc $acc2, $acc6
+ mov $acc5, 8*1($r_ptr)
+ cmovc $acc3, $acc7
+ mov $acc6, 8*2($r_ptr)
+ mov $acc7, 8*3($r_ptr)
+
+ ret
+.size __ecp_nistz256_sqr_montx,.-__ecp_nistz256_sqr_montx
+___
+}
+}
+{
+my ($r_ptr,$in_ptr)=("%rdi","%rsi");
+my ($acc0,$acc1,$acc2,$acc3)=map("%r$_",(8..11));
+my ($t0,$t1,$t2)=("%rcx","%r12","%r13");
+
+$code.=<<___;
+################################################################################
+# void ecp_nistz256_from_mont(
+# uint64_t res[4],
+# uint64_t in[4]);
+# This one performs Montgomery multiplication by 1, so we only need the reduction
+
+.globl ecp_nistz256_from_mont
+.type ecp_nistz256_from_mont,\@function,2
+.align 32
+ecp_nistz256_from_mont:
+ push %r12
+ push %r13
+
+ mov 8*0($in_ptr), %rax
+ mov .Lpoly+8*3(%rip), $t2
+ mov 8*1($in_ptr), $acc1
+ mov 8*2($in_ptr), $acc2
+ mov 8*3($in_ptr), $acc3
+ mov %rax, $acc0
+ mov .Lpoly+8*1(%rip), $t1
+
+ #########################################
+ # First iteration
+ mov %rax, $t0
+ shl \$32, $acc0
+ mulq $t2
+ shr \$32, $t0
+ add $acc0, $acc1
+ adc $t0, $acc2
+ adc %rax, $acc3
+ mov $acc1, %rax
+ adc \$0, %rdx
+
+ #########################################
+ # Second iteration
+ mov $acc1, $t0
+ shl \$32, $acc1
+ mov %rdx, $acc0
+ mulq $t2
+ shr \$32, $t0
+ add $acc1, $acc2
+ adc $t0, $acc3
+ adc %rax, $acc0
+ mov $acc2, %rax
+ adc \$0, %rdx
+
+ ##########################################
+ # Third iteration
+ mov $acc2, $t0
+ shl \$32, $acc2
+ mov %rdx, $acc1
+ mulq $t2
+ shr \$32, $t0
+ add $acc2, $acc3
+ adc $t0, $acc0
+ adc %rax, $acc1
+ mov $acc3, %rax
+ adc \$0, %rdx
+
+ ###########################################
+ # Last iteration
+ mov $acc3, $t0
+ shl \$32, $acc3
+ mov %rdx, $acc2
+ mulq $t2
+ shr \$32, $t0
+ add $acc3, $acc0
+ adc $t0, $acc1
+ mov $acc0, $t0
+ adc %rax, $acc2
+ mov $acc1, $in_ptr
+ adc \$0, %rdx
+
+ ###########################################
+ # Branch-less conditional subtraction
+ sub \$-1, $acc0
+ mov $acc2, %rax
+ sbb $t1, $acc1
+ sbb \$0, $acc2
+ mov %rdx, $acc3
+ sbb $t2, %rdx
+ sbb $t2, $t2
+
+ cmovnz $t0, $acc0
+ cmovnz $in_ptr, $acc1
+ mov $acc0, 8*0($r_ptr)
+ cmovnz %rax, $acc2
+ mov $acc1, 8*1($r_ptr)
+ cmovz %rdx, $acc3
+ mov $acc2, 8*2($r_ptr)
+ mov $acc3, 8*3($r_ptr)
+
+ pop %r13
+ pop %r12
+ ret
+.size ecp_nistz256_from_mont,.-ecp_nistz256_from_mont
+___
+}
+{
+my ($val,$in_t,$index)=$win64?("%rcx","%rdx","%r8d"):("%rdi","%rsi","%edx");
+my ($ONE,$INDEX,$Ra,$Rb,$Rc,$Rd,$Re,$Rf)=map("%xmm$_",(0..7));
+my ($M0,$T0a,$T0b,$T0c,$T0d,$T0e,$T0f,$TMP0)=map("%xmm$_",(8..15));
+my ($M1,$T2a,$T2b,$TMP2,$M2,$T2a,$T2b,$TMP2)=map("%xmm$_",(8..15));
+
+$code.=<<___;
+################################################################################
+# void ecp_nistz256_select_w5(uint64_t *val, uint64_t *in_t, int index);
+.globl ecp_nistz256_select_w5
+.type ecp_nistz256_select_w5,\@abi-omnipotent
+.align 32
+ecp_nistz256_select_w5:
+___
+$code.=<<___ if ($avx>1);
+ mov OPENSSL_ia32cap_P+8(%rip), %eax
+ test \$`1<<5`, %eax
+ jnz .Lavx2_select_w5
+___
+$code.=<<___ if ($win64);
+ lea -0x88(%rsp), %rax
+.LSEH_begin_ecp_nistz256_select_w5:
+ .byte 0x48,0x8d,0x60,0xe0 #lea -0x20(%rax), %rsp
+ .byte 0x0f,0x29,0x70,0xe0 #movaps %xmm6, -0x20(%rax)
+ .byte 0x0f,0x29,0x78,0xf0 #movaps %xmm7, -0x10(%rax)
+ .byte 0x44,0x0f,0x29,0x00 #movaps %xmm8, 0(%rax)
+ .byte 0x44,0x0f,0x29,0x48,0x10 #movaps %xmm9, 0x10(%rax)
+ .byte 0x44,0x0f,0x29,0x50,0x20 #movaps %xmm10, 0x20(%rax)
+ .byte 0x44,0x0f,0x29,0x58,0x30 #movaps %xmm11, 0x30(%rax)
+ .byte 0x44,0x0f,0x29,0x60,0x40 #movaps %xmm12, 0x40(%rax)
+ .byte 0x44,0x0f,0x29,0x68,0x50 #movaps %xmm13, 0x50(%rax)
+ .byte 0x44,0x0f,0x29,0x70,0x60 #movaps %xmm14, 0x60(%rax)
+ .byte 0x44,0x0f,0x29,0x78,0x70 #movaps %xmm15, 0x70(%rax)
+___
+$code.=<<___;
+ movdqa .LOne(%rip), $ONE
+ movd $index, $INDEX
+
+ pxor $Ra, $Ra
+ pxor $Rb, $Rb
+ pxor $Rc, $Rc
+ pxor $Rd, $Rd
+ pxor $Re, $Re
+ pxor $Rf, $Rf
+
+ movdqa $ONE, $M0
+ pshufd \$0, $INDEX, $INDEX
+
+ mov \$16, %rax
+.Lselect_loop_sse_w5:
+
+ movdqa $M0, $TMP0
+ paddd $ONE, $M0
+ pcmpeqd $INDEX, $TMP0
+
+ movdqa 16*0($in_t), $T0a
+ movdqa 16*1($in_t), $T0b
+ movdqa 16*2($in_t), $T0c
+ movdqa 16*3($in_t), $T0d
+ movdqa 16*4($in_t), $T0e
+ movdqa 16*5($in_t), $T0f
+ lea 16*6($in_t), $in_t
+
+ pand $TMP0, $T0a
+ pand $TMP0, $T0b
+ por $T0a, $Ra
+ pand $TMP0, $T0c
+ por $T0b, $Rb
+ pand $TMP0, $T0d
+ por $T0c, $Rc
+ pand $TMP0, $T0e
+ por $T0d, $Rd
+ pand $TMP0, $T0f
+ por $T0e, $Re
+ por $T0f, $Rf
+
+ dec %rax
+ jnz .Lselect_loop_sse_w5
+
+ movdqu $Ra, 16*0($val)
+ movdqu $Rb, 16*1($val)
+ movdqu $Rc, 16*2($val)
+ movdqu $Rd, 16*3($val)
+ movdqu $Re, 16*4($val)
+ movdqu $Rf, 16*5($val)
+___
+$code.=<<___ if ($win64);
+ movaps (%rsp), %xmm6
+ movaps 0x10(%rsp), %xmm7
+ movaps 0x20(%rsp), %xmm8
+ movaps 0x30(%rsp), %xmm9
+ movaps 0x40(%rsp), %xmm10
+ movaps 0x50(%rsp), %xmm11
+ movaps 0x60(%rsp), %xmm12
+ movaps 0x70(%rsp), %xmm13
+ movaps 0x80(%rsp), %xmm14
+ movaps 0x90(%rsp), %xmm15
+ lea 0xa8(%rsp), %rsp
+.LSEH_end_ecp_nistz256_select_w5:
+___
+$code.=<<___;
+ ret
+.size ecp_nistz256_select_w5,.-ecp_nistz256_select_w5
+
+################################################################################
+# void ecp_nistz256_select_w7(uint64_t *val, uint64_t *in_t, int index);
+.globl ecp_nistz256_select_w7
+.type ecp_nistz256_select_w7,\@abi-omnipotent
+.align 32
+ecp_nistz256_select_w7:
+___
+$code.=<<___ if ($avx>1);
+ mov OPENSSL_ia32cap_P+8(%rip), %eax
+ test \$`1<<5`, %eax
+ jnz .Lavx2_select_w7
+___
+$code.=<<___ if ($win64);
+ lea -0x88(%rsp), %rax
+.LSEH_begin_ecp_nistz256_select_w7:
+ .byte 0x48,0x8d,0x60,0xe0 #lea -0x20(%rax), %rsp
+ .byte 0x0f,0x29,0x70,0xe0 #movaps %xmm6, -0x20(%rax)
+ .byte 0x0f,0x29,0x78,0xf0 #movaps %xmm7, -0x10(%rax)
+ .byte 0x44,0x0f,0x29,0x00 #movaps %xmm8, 0(%rax)
+ .byte 0x44,0x0f,0x29,0x48,0x10 #movaps %xmm9, 0x10(%rax)
+ .byte 0x44,0x0f,0x29,0x50,0x20 #movaps %xmm10, 0x20(%rax)
+ .byte 0x44,0x0f,0x29,0x58,0x30 #movaps %xmm11, 0x30(%rax)
+ .byte 0x44,0x0f,0x29,0x60,0x40 #movaps %xmm12, 0x40(%rax)
+ .byte 0x44,0x0f,0x29,0x68,0x50 #movaps %xmm13, 0x50(%rax)
+ .byte 0x44,0x0f,0x29,0x70,0x60 #movaps %xmm14, 0x60(%rax)
+ .byte 0x44,0x0f,0x29,0x78,0x70 #movaps %xmm15, 0x70(%rax)
+___
+$code.=<<___;
+ movdqa .LOne(%rip), $M0
+ movd $index, $INDEX
+
+ pxor $Ra, $Ra
+ pxor $Rb, $Rb
+ pxor $Rc, $Rc
+ pxor $Rd, $Rd
+
+ movdqa $M0, $ONE
+ pshufd \$0, $INDEX, $INDEX
+ mov \$64, %rax
+
+.Lselect_loop_sse_w7:
+ movdqa $M0, $TMP0
+ paddd $ONE, $M0
+ movdqa 16*0($in_t), $T0a
+ movdqa 16*1($in_t), $T0b
+ pcmpeqd $INDEX, $TMP0
+ movdqa 16*2($in_t), $T0c
+ movdqa 16*3($in_t), $T0d
+ lea 16*4($in_t), $in_t
+
+ pand $TMP0, $T0a
+ pand $TMP0, $T0b
+ por $T0a, $Ra
+ pand $TMP0, $T0c
+ por $T0b, $Rb
+ pand $TMP0, $T0d
+ por $T0c, $Rc
+ prefetcht0 255($in_t)
+ por $T0d, $Rd
+
+ dec %rax
+ jnz .Lselect_loop_sse_w7
+
+ movdqu $Ra, 16*0($val)
+ movdqu $Rb, 16*1($val)
+ movdqu $Rc, 16*2($val)
+ movdqu $Rd, 16*3($val)
+___
+$code.=<<___ if ($win64);
+ movaps (%rsp), %xmm6
+ movaps 0x10(%rsp), %xmm7
+ movaps 0x20(%rsp), %xmm8
+ movaps 0x30(%rsp), %xmm9
+ movaps 0x40(%rsp), %xmm10
+ movaps 0x50(%rsp), %xmm11
+ movaps 0x60(%rsp), %xmm12
+ movaps 0x70(%rsp), %xmm13
+ movaps 0x80(%rsp), %xmm14
+ movaps 0x90(%rsp), %xmm15
+ lea 0xa8(%rsp), %rsp
+.LSEH_end_ecp_nistz256_select_w7:
+___
+$code.=<<___;
+ ret
+.size ecp_nistz256_select_w7,.-ecp_nistz256_select_w7
+___
+}
+if ($avx>1) {
+my ($val,$in_t,$index)=$win64?("%rcx","%rdx","%r8d"):("%rdi","%rsi","%edx");
+my ($TWO,$INDEX,$Ra,$Rb,$Rc)=map("%ymm$_",(0..4));
+my ($M0,$T0a,$T0b,$T0c,$TMP0)=map("%ymm$_",(5..9));
+my ($M1,$T1a,$T1b,$T1c,$TMP1)=map("%ymm$_",(10..14));
+
+$code.=<<___;
+################################################################################
+# void ecp_nistz256_avx2_select_w5(uint64_t *val, uint64_t *in_t, int index);
+.type ecp_nistz256_avx2_select_w5,\@abi-omnipotent
+.align 32
+ecp_nistz256_avx2_select_w5:
+.Lavx2_select_w5:
+ vzeroupper
+___
+$code.=<<___ if ($win64);
+ lea -0x88(%rsp), %rax
+.LSEH_begin_ecp_nistz256_avx2_select_w5:
+ .byte 0x48,0x8d,0x60,0xe0 #lea -0x20(%rax), %rsp
+ .byte 0xc5,0xf8,0x29,0x70,0xe0 #vmovaps %xmm6, -0x20(%rax)
+ .byte 0xc5,0xf8,0x29,0x78,0xf0 #vmovaps %xmm7, -0x10(%rax)
+ .byte 0xc5,0x78,0x29,0x40,0x00 #vmovaps %xmm8, 8(%rax)
+ .byte 0xc5,0x78,0x29,0x48,0x10 #vmovaps %xmm9, 0x10(%rax)
+ .byte 0xc5,0x78,0x29,0x50,0x20 #vmovaps %xmm10, 0x20(%rax)
+ .byte 0xc5,0x78,0x29,0x58,0x30 #vmovaps %xmm11, 0x30(%rax)
+ .byte 0xc5,0x78,0x29,0x60,0x40 #vmovaps %xmm12, 0x40(%rax)
+ .byte 0xc5,0x78,0x29,0x68,0x50 #vmovaps %xmm13, 0x50(%rax)
+ .byte 0xc5,0x78,0x29,0x70,0x60 #vmovaps %xmm14, 0x60(%rax)
+ .byte 0xc5,0x78,0x29,0x78,0x70 #vmovaps %xmm15, 0x70(%rax)
+___
+$code.=<<___;
+ vmovdqa .LTwo(%rip), $TWO
+
+ vpxor $Ra, $Ra, $Ra
+ vpxor $Rb, $Rb, $Rb
+ vpxor $Rc, $Rc, $Rc
+
+ vmovdqa .LOne(%rip), $M0
+ vmovdqa .LTwo(%rip), $M1
+
+ vmovd $index, %xmm1
+ vpermd $INDEX, $Ra, $INDEX
+
+ mov \$8, %rax
+.Lselect_loop_avx2_w5:
+
+ vmovdqa 32*0($in_t), $T0a
+ vmovdqa 32*1($in_t), $T0b
+ vmovdqa 32*2($in_t), $T0c
+
+ vmovdqa 32*3($in_t), $T1a
+ vmovdqa 32*4($in_t), $T1b
+ vmovdqa 32*5($in_t), $T1c
+
+ vpcmpeqd $INDEX, $M0, $TMP0
+ vpcmpeqd $INDEX, $M1, $TMP1
+
+ vpaddd $TWO, $M0, $M0
+ vpaddd $TWO, $M1, $M1
+ lea 32*6($in_t), $in_t
+
+ vpand $TMP0, $T0a, $T0a
+ vpand $TMP0, $T0b, $T0b
+ vpand $TMP0, $T0c, $T0c
+ vpand $TMP1, $T1a, $T1a
+ vpand $TMP1, $T1b, $T1b
+ vpand $TMP1, $T1c, $T1c
+
+ vpxor $T0a, $Ra, $Ra
+ vpxor $T0b, $Rb, $Rb
+ vpxor $T0c, $Rc, $Rc
+ vpxor $T1a, $Ra, $Ra
+ vpxor $T1b, $Rb, $Rb
+ vpxor $T1c, $Rc, $Rc
+
+ dec %rax
+ jnz .Lselect_loop_avx2_w5
+
+ vmovdqu $Ra, 32*0($val)
+ vmovdqu $Rb, 32*1($val)
+ vmovdqu $Rc, 32*2($val)
+ vzeroupper
+___
+$code.=<<___ if ($win64);
+ movaps (%rsp), %xmm6
+ movaps 0x10(%rsp), %xmm7
+ movaps 0x20(%rsp), %xmm8
+ movaps 0x30(%rsp), %xmm9
+ movaps 0x40(%rsp), %xmm10
+ movaps 0x50(%rsp), %xmm11
+ movaps 0x60(%rsp), %xmm12
+ movaps 0x70(%rsp), %xmm13
+ movaps 0x80(%rsp), %xmm14
+ movaps 0x90(%rsp), %xmm15
+ lea 0xa8(%rsp), %rsp
+.LSEH_end_ecp_nistz256_avx2_select_w5:
+___
+$code.=<<___;
+ ret
+.size ecp_nistz256_avx2_select_w5,.-ecp_nistz256_avx2_select_w5
+___
+}
+if ($avx>1) {
+my ($val,$in_t,$index)=$win64?("%rcx","%rdx","%r8d"):("%rdi","%rsi","%edx");
+my ($THREE,$INDEX,$Ra,$Rb)=map("%ymm$_",(0..3));
+my ($M0,$T0a,$T0b,$TMP0)=map("%ymm$_",(4..7));
+my ($M1,$T1a,$T1b,$TMP1)=map("%ymm$_",(8..11));
+my ($M2,$T2a,$T2b,$TMP2)=map("%ymm$_",(12..15));
+
+$code.=<<___;
+
+################################################################################
+# void ecp_nistz256_avx2_select_w7(uint64_t *val, uint64_t *in_t, int index);
+.globl ecp_nistz256_avx2_select_w7
+.type ecp_nistz256_avx2_select_w7,\@abi-omnipotent
+.align 32
+ecp_nistz256_avx2_select_w7:
+.Lavx2_select_w7:
+ vzeroupper
+___
+$code.=<<___ if ($win64);
+ lea -0x88(%rsp), %rax
+.LSEH_begin_ecp_nistz256_avx2_select_w7:
+ .byte 0x48,0x8d,0x60,0xe0 #lea -0x20(%rax), %rsp
+ .byte 0xc5,0xf8,0x29,0x70,0xe0 #vmovaps %xmm6, -0x20(%rax)
+ .byte 0xc5,0xf8,0x29,0x78,0xf0 #vmovaps %xmm7, -0x10(%rax)
+ .byte 0xc5,0x78,0x29,0x40,0x00 #vmovaps %xmm8, 8(%rax)
+ .byte 0xc5,0x78,0x29,0x48,0x10 #vmovaps %xmm9, 0x10(%rax)
+ .byte 0xc5,0x78,0x29,0x50,0x20 #vmovaps %xmm10, 0x20(%rax)
+ .byte 0xc5,0x78,0x29,0x58,0x30 #vmovaps %xmm11, 0x30(%rax)
+ .byte 0xc5,0x78,0x29,0x60,0x40 #vmovaps %xmm12, 0x40(%rax)
+ .byte 0xc5,0x78,0x29,0x68,0x50 #vmovaps %xmm13, 0x50(%rax)
+ .byte 0xc5,0x78,0x29,0x70,0x60 #vmovaps %xmm14, 0x60(%rax)
+ .byte 0xc5,0x78,0x29,0x78,0x70 #vmovaps %xmm15, 0x70(%rax)
+___
+$code.=<<___;
+ vmovdqa .LThree(%rip), $THREE
+
+ vpxor $Ra, $Ra, $Ra
+ vpxor $Rb, $Rb, $Rb
+
+ vmovdqa .LOne(%rip), $M0
+ vmovdqa .LTwo(%rip), $M1
+ vmovdqa .LThree(%rip), $M2
+
+ vmovd $index, %xmm1
+ vpermd $INDEX, $Ra, $INDEX
+ # Skip index = 0, because it is implicitly the point at infinity
+
+ mov \$21, %rax
+.Lselect_loop_avx2_w7:
+
+ vmovdqa 32*0($in_t), $T0a
+ vmovdqa 32*1($in_t), $T0b
+
+ vmovdqa 32*2($in_t), $T1a
+ vmovdqa 32*3($in_t), $T1b
+
+ vmovdqa 32*4($in_t), $T2a
+ vmovdqa 32*5($in_t), $T2b
+
+ vpcmpeqd $INDEX, $M0, $TMP0
+ vpcmpeqd $INDEX, $M1, $TMP1
+ vpcmpeqd $INDEX, $M2, $TMP2
+
+ vpaddd $THREE, $M0, $M0
+ vpaddd $THREE, $M1, $M1
+ vpaddd $THREE, $M2, $M2
+ lea 32*6($in_t), $in_t
+
+ vpand $TMP0, $T0a, $T0a
+ vpand $TMP0, $T0b, $T0b
+ vpand $TMP1, $T1a, $T1a
+ vpand $TMP1, $T1b, $T1b
+ vpand $TMP2, $T2a, $T2a
+ vpand $TMP2, $T2b, $T2b
+
+ vpxor $T0a, $Ra, $Ra
+ vpxor $T0b, $Rb, $Rb
+ vpxor $T1a, $Ra, $Ra
+ vpxor $T1b, $Rb, $Rb
+ vpxor $T2a, $Ra, $Ra
+ vpxor $T2b, $Rb, $Rb
+
+ dec %rax
+ jnz .Lselect_loop_avx2_w7
+
+
+ vmovdqa 32*0($in_t), $T0a
+ vmovdqa 32*1($in_t), $T0b
+
+ vpcmpeqd $INDEX, $M0, $TMP0
+
+ vpand $TMP0, $T0a, $T0a
+ vpand $TMP0, $T0b, $T0b
+
+ vpxor $T0a, $Ra, $Ra
+ vpxor $T0b, $Rb, $Rb
+
+ vmovdqu $Ra, 32*0($val)
+ vmovdqu $Rb, 32*1($val)
+ vzeroupper
+___
+$code.=<<___ if ($win64);
+ movaps (%rsp), %xmm6
+ movaps 0x10(%rsp), %xmm7
+ movaps 0x20(%rsp), %xmm8
+ movaps 0x30(%rsp), %xmm9
+ movaps 0x40(%rsp), %xmm10
+ movaps 0x50(%rsp), %xmm11
+ movaps 0x60(%rsp), %xmm12
+ movaps 0x70(%rsp), %xmm13
+ movaps 0x80(%rsp), %xmm14
+ movaps 0x90(%rsp), %xmm15
+ lea 0xa8(%rsp), %rsp
+.LSEH_end_ecp_nistz256_avx2_select_w7:
+___
+$code.=<<___;
+ ret
+.size ecp_nistz256_avx2_select_w7,.-ecp_nistz256_avx2_select_w7
+___
+} else {
+$code.=<<___;
+.globl ecp_nistz256_avx2_select_w7
+.type ecp_nistz256_avx2_select_w7,\@function,3
+.align 32
+ecp_nistz256_avx2_select_w7:
+ .byte 0x0f,0x0b # ud2
+ ret
+.size ecp_nistz256_avx2_select_w7,.-ecp_nistz256_avx2_select_w7
+___
+}
+{{{
+########################################################################
+# This block implements higher level point_double, point_add and
+# point_add_affine. The key to performance in this case is to allow
+# out-of-order execution logic to overlap computations from next step
+# with tail processing from current step. By using tailored calling
+# sequence we minimize inter-step overhead to give processor better
+# shot at overlapping operations...
+#
+# You will notice that input data is copied to stack. Trouble is that
+# there are no registers to spare for holding original pointers and
+# reloading them, pointers, would create undesired dependencies on
+# effective addresses calculation paths. In other words it's too done
+# to favour out-of-order execution logic.
+# <appro@openssl.org>
+
+my ($r_ptr,$a_ptr,$b_org,$b_ptr)=("%rdi","%rsi","%rdx","%rbx");
+my ($acc0,$acc1,$acc2,$acc3,$acc4,$acc5,$acc6,$acc7)=map("%r$_",(8..15));
+my ($t0,$t1,$t2,$t3,$t4)=("%rax","%rbp","%rcx",$acc4,$acc4);
+my ($poly1,$poly3)=($acc6,$acc7);
+
+sub load_for_mul () {
+my ($a,$b,$src0) = @_;
+my $bias = $src0 eq "%rax" ? 0 : -128;
+
+" mov $b, $src0
+ lea $b, $b_ptr
+ mov 8*0+$a, $acc1
+ mov 8*1+$a, $acc2
+ lea $bias+$a, $a_ptr
+ mov 8*2+$a, $acc3
+ mov 8*3+$a, $acc4"
+}
+
+sub load_for_sqr () {
+my ($a,$src0) = @_;
+my $bias = $src0 eq "%rax" ? 0 : -128;
+
+" mov 8*0+$a, $src0
+ mov 8*1+$a, $acc6
+ lea $bias+$a, $a_ptr
+ mov 8*2+$a, $acc7
+ mov 8*3+$a, $acc0"
+}
+
+ {
+########################################################################
+# operate in 4-5-0-1 "name space" that matches multiplication output
+#
+my ($a0,$a1,$a2,$a3,$t3,$t4)=($acc4,$acc5,$acc0,$acc1,$acc2,$acc3);
+
+$code.=<<___;
+.type __ecp_nistz256_add_toq,\@abi-omnipotent
+.align 32
+__ecp_nistz256_add_toq:
+ add 8*0($b_ptr), $a0
+ adc 8*1($b_ptr), $a1
+ mov $a0, $t0
+ adc 8*2($b_ptr), $a2
+ adc 8*3($b_ptr), $a3
+ mov $a1, $t1
+ sbb $t4, $t4
+
+ sub \$-1, $a0
+ mov $a2, $t2
+ sbb $poly1, $a1
+ sbb \$0, $a2
+ mov $a3, $t3
+ sbb $poly3, $a3
+ test $t4, $t4
+
+ cmovz $t0, $a0
+ cmovz $t1, $a1
+ mov $a0, 8*0($r_ptr)
+ cmovz $t2, $a2
+ mov $a1, 8*1($r_ptr)
+ cmovz $t3, $a3
+ mov $a2, 8*2($r_ptr)
+ mov $a3, 8*3($r_ptr)
+
+ ret
+.size __ecp_nistz256_add_toq,.-__ecp_nistz256_add_toq
+
+.type __ecp_nistz256_sub_fromq,\@abi-omnipotent
+.align 32
+__ecp_nistz256_sub_fromq:
+ sub 8*0($b_ptr), $a0
+ sbb 8*1($b_ptr), $a1
+ mov $a0, $t0
+ sbb 8*2($b_ptr), $a2
+ sbb 8*3($b_ptr), $a3
+ mov $a1, $t1
+ sbb $t4, $t4
+
+ add \$-1, $a0
+ mov $a2, $t2
+ adc $poly1, $a1
+ adc \$0, $a2
+ mov $a3, $t3
+ adc $poly3, $a3
+ test $t4, $t4
+
+ cmovz $t0, $a0
+ cmovz $t1, $a1
+ mov $a0, 8*0($r_ptr)
+ cmovz $t2, $a2
+ mov $a1, 8*1($r_ptr)
+ cmovz $t3, $a3
+ mov $a2, 8*2($r_ptr)
+ mov $a3, 8*3($r_ptr)
+
+ ret
+.size __ecp_nistz256_sub_fromq,.-__ecp_nistz256_sub_fromq
+
+.type __ecp_nistz256_subq,\@abi-omnipotent
+.align 32
+__ecp_nistz256_subq:
+ sub $a0, $t0
+ sbb $a1, $t1
+ mov $t0, $a0
+ sbb $a2, $t2
+ sbb $a3, $t3
+ mov $t1, $a1
+ sbb $t4, $t4
+
+ add \$-1, $t0
+ mov $t2, $a2
+ adc $poly1, $t1
+ adc \$0, $t2
+ mov $t3, $a3
+ adc $poly3, $t3
+ test $t4, $t4
+
+ cmovnz $t0, $a0
+ cmovnz $t1, $a1
+ cmovnz $t2, $a2
+ cmovnz $t3, $a3
+
+ ret
+.size __ecp_nistz256_subq,.-__ecp_nistz256_subq
+
+.type __ecp_nistz256_mul_by_2q,\@abi-omnipotent
+.align 32
+__ecp_nistz256_mul_by_2q:
+ add $a0, $a0 # a0:a3+a0:a3
+ adc $a1, $a1
+ mov $a0, $t0
+ adc $a2, $a2
+ adc $a3, $a3
+ mov $a1, $t1
+ sbb $t4, $t4
+
+ sub \$-1, $a0
+ mov $a2, $t2
+ sbb $poly1, $a1
+ sbb \$0, $a2
+ mov $a3, $t3
+ sbb $poly3, $a3
+ test $t4, $t4
+
+ cmovz $t0, $a0
+ cmovz $t1, $a1
+ mov $a0, 8*0($r_ptr)
+ cmovz $t2, $a2
+ mov $a1, 8*1($r_ptr)
+ cmovz $t3, $a3
+ mov $a2, 8*2($r_ptr)
+ mov $a3, 8*3($r_ptr)
+
+ ret
+.size __ecp_nistz256_mul_by_2q,.-__ecp_nistz256_mul_by_2q
+___
+ }
+sub gen_double () {
+ my $x = shift;
+ my ($src0,$sfx,$bias);
+ my ($S,$M,$Zsqr,$in_x,$tmp0)=map(32*$_,(0..4));
+
+ if ($x ne "x") {
+ $src0 = "%rax";
+ $sfx = "";
+ $bias = 0;
+
+$code.=<<___;
+.globl ecp_nistz256_point_double
+.type ecp_nistz256_point_double,\@function,2
+.align 32
+ecp_nistz256_point_double:
+___
+$code.=<<___ if ($addx);
+ mov \$0x80100, %ecx
+ and OPENSSL_ia32cap_P+8(%rip), %ecx
+ cmp \$0x80100, %ecx
+ je .Lpoint_doublex
+___
+ } else {
+ $src0 = "%rdx";
+ $sfx = "x";
+ $bias = 128;
+
+$code.=<<___;
+.type ecp_nistz256_point_doublex,\@function,2
+.align 32
+ecp_nistz256_point_doublex:
+.Lpoint_doublex:
+___
+ }
+$code.=<<___;
+ push %rbp
+ push %rbx
+ push %r12
+ push %r13
+ push %r14
+ push %r15
+ sub \$32*5+8, %rsp
+
+ movdqu 0x00($a_ptr), %xmm0 # copy *(P256_POINT *)$a_ptr.x
+ mov $a_ptr, $b_ptr # backup copy
+ movdqu 0x10($a_ptr), %xmm1
+ mov 0x20+8*0($a_ptr), $acc4 # load in_y in "5-4-0-1" order
+ mov 0x20+8*1($a_ptr), $acc5
+ mov 0x20+8*2($a_ptr), $acc0
+ mov 0x20+8*3($a_ptr), $acc1
+ mov .Lpoly+8*1(%rip), $poly1
+ mov .Lpoly+8*3(%rip), $poly3
+ movdqa %xmm0, $in_x(%rsp)
+ movdqa %xmm1, $in_x+0x10(%rsp)
+ lea 0x20($r_ptr), $acc2
+ lea 0x40($r_ptr), $acc3
+ movq $r_ptr, %xmm0
+ movq $acc2, %xmm1
+ movq $acc3, %xmm2
+
+ lea $S(%rsp), $r_ptr
+ call __ecp_nistz256_mul_by_2$x # p256_mul_by_2(S, in_y);
+
+ mov 0x40+8*0($a_ptr), $src0
+ mov 0x40+8*1($a_ptr), $acc6
+ mov 0x40+8*2($a_ptr), $acc7
+ mov 0x40+8*3($a_ptr), $acc0
+ lea 0x40-$bias($a_ptr), $a_ptr
+ lea $Zsqr(%rsp), $r_ptr
+ call __ecp_nistz256_sqr_mont$x # p256_sqr_mont(Zsqr, in_z);
+
+ `&load_for_sqr("$S(%rsp)", "$src0")`
+ lea $S(%rsp), $r_ptr
+ call __ecp_nistz256_sqr_mont$x # p256_sqr_mont(S, S);
+
+ mov 0x20($b_ptr), $src0 # $b_ptr is still valid
+ mov 0x40+8*0($b_ptr), $acc1
+ mov 0x40+8*1($b_ptr), $acc2
+ mov 0x40+8*2($b_ptr), $acc3
+ mov 0x40+8*3($b_ptr), $acc4
+ lea 0x40-$bias($b_ptr), $a_ptr
+ lea 0x20($b_ptr), $b_ptr
+ movq %xmm2, $r_ptr
+ call __ecp_nistz256_mul_mont$x # p256_mul_mont(res_z, in_z, in_y);
+ call __ecp_nistz256_mul_by_2$x # p256_mul_by_2(res_z, res_z);
+
+ mov $in_x+8*0(%rsp), $acc4 # "5-4-0-1" order
+ mov $in_x+8*1(%rsp), $acc5
+ lea $Zsqr(%rsp), $b_ptr
+ mov $in_x+8*2(%rsp), $acc0
+ mov $in_x+8*3(%rsp), $acc1
+ lea $M(%rsp), $r_ptr
+ call __ecp_nistz256_add_to$x # p256_add(M, in_x, Zsqr);
+
+ mov $in_x+8*0(%rsp), $acc4 # "5-4-0-1" order
+ mov $in_x+8*1(%rsp), $acc5
+ lea $Zsqr(%rsp), $b_ptr
+ mov $in_x+8*2(%rsp), $acc0
+ mov $in_x+8*3(%rsp), $acc1
+ lea $Zsqr(%rsp), $r_ptr
+ call __ecp_nistz256_sub_from$x # p256_sub(Zsqr, in_x, Zsqr);
+
+ `&load_for_sqr("$S(%rsp)", "$src0")`
+ movq %xmm1, $r_ptr
+ call __ecp_nistz256_sqr_mont$x # p256_sqr_mont(res_y, S);
+___
+{
+######## ecp_nistz256_div_by_2(res_y, res_y); ##########################
+# operate in 4-5-6-7 "name space" that matches squaring output
+#
+my ($poly1,$poly3)=($a_ptr,$t1);
+my ($a0,$a1,$a2,$a3,$t3,$t4,$t1)=($acc4,$acc5,$acc6,$acc7,$acc0,$acc1,$acc2);
+
+$code.=<<___;
+ xor $t4, $t4
+ mov $a0, $t0
+ add \$-1, $a0
+ mov $a1, $t1
+ adc $poly1, $a1
+ mov $a2, $t2
+ adc \$0, $a2
+ mov $a3, $t3
+ adc $poly3, $a3
+ adc \$0, $t4
+ xor $a_ptr, $a_ptr # borrow $a_ptr
+ test \$1, $t0
+
+ cmovz $t0, $a0
+ cmovz $t1, $a1
+ cmovz $t2, $a2
+ cmovz $t3, $a3
+ cmovz $a_ptr, $t4
+
+ mov $a1, $t0 # a0:a3>>1
+ shr \$1, $a0
+ shl \$63, $t0
+ mov $a2, $t1
+ shr \$1, $a1
+ or $t0, $a0
+ shl \$63, $t1
+ mov $a3, $t2
+ shr \$1, $a2
+ or $t1, $a1
+ shl \$63, $t2
+ mov $a0, 8*0($r_ptr)
+ shr \$1, $a3
+ mov $a1, 8*1($r_ptr)
+ shl \$63, $t4
+ or $t2, $a2
+ or $t4, $a3
+ mov $a2, 8*2($r_ptr)
+ mov $a3, 8*3($r_ptr)
+___
+}
+$code.=<<___;
+ `&load_for_mul("$M(%rsp)", "$Zsqr(%rsp)", "$src0")`
+ lea $M(%rsp), $r_ptr
+ call __ecp_nistz256_mul_mont$x # p256_mul_mont(M, M, Zsqr);
+
+ lea $tmp0(%rsp), $r_ptr
+ call __ecp_nistz256_mul_by_2$x
+
+ lea $M(%rsp), $b_ptr
+ lea $M(%rsp), $r_ptr
+ call __ecp_nistz256_add_to$x # p256_mul_by_3(M, M);
+
+ `&load_for_mul("$S(%rsp)", "$in_x(%rsp)", "$src0")`
+ lea $S(%rsp), $r_ptr
+ call __ecp_nistz256_mul_mont$x # p256_mul_mont(S, S, in_x);
+
+ lea $tmp0(%rsp), $r_ptr
+ call __ecp_nistz256_mul_by_2$x # p256_mul_by_2(tmp0, S);
+
+ `&load_for_sqr("$M(%rsp)", "$src0")`
+ movq %xmm0, $r_ptr
+ call __ecp_nistz256_sqr_mont$x # p256_sqr_mont(res_x, M);
+
+ lea $tmp0(%rsp), $b_ptr
+ mov $acc6, $acc0 # harmonize sqr output and sub input
+ mov $acc7, $acc1
+ mov $a_ptr, $poly1
+ mov $t1, $poly3
+ call __ecp_nistz256_sub_from$x # p256_sub(res_x, res_x, tmp0);
+
+ mov $S+8*0(%rsp), $t0
+ mov $S+8*1(%rsp), $t1
+ mov $S+8*2(%rsp), $t2
+ mov $S+8*3(%rsp), $acc2 # "4-5-0-1" order
+ lea $S(%rsp), $r_ptr
+ call __ecp_nistz256_sub$x # p256_sub(S, S, res_x);
+
+ mov $M(%rsp), $src0
+ lea $M(%rsp), $b_ptr
+ mov $acc4, $acc6 # harmonize sub output and mul input
+ xor %ecx, %ecx
+ mov $acc4, $S+8*0(%rsp) # have to save:-(
+ mov $acc5, $acc2
+ mov $acc5, $S+8*1(%rsp)
+ cmovz $acc0, $acc3
+ mov $acc0, $S+8*2(%rsp)
+ lea $S-$bias(%rsp), $a_ptr
+ cmovz $acc1, $acc4
+ mov $acc1, $S+8*3(%rsp)
+ mov $acc6, $acc1
+ lea $S(%rsp), $r_ptr
+ call __ecp_nistz256_mul_mont$x # p256_mul_mont(S, S, M);
+
+ movq %xmm1, $b_ptr
+ movq %xmm1, $r_ptr
+ call __ecp_nistz256_sub_from$x # p256_sub(res_y, S, res_y);
+
+ add \$32*5+8, %rsp
+ pop %r15
+ pop %r14
+ pop %r13
+ pop %r12
+ pop %rbx
+ pop %rbp
+ ret
+.size ecp_nistz256_point_double$sfx,.-ecp_nistz256_point_double$sfx
+___
+}
+&gen_double("q");
+
+sub gen_add () {
+ my $x = shift;
+ my ($src0,$sfx,$bias);
+ my ($H,$Hsqr,$R,$Rsqr,$Hcub,
+ $U1,$U2,$S1,$S2,
+ $res_x,$res_y,$res_z,
+ $in1_x,$in1_y,$in1_z,
+ $in2_x,$in2_y,$in2_z)=map(32*$_,(0..17));
+ my ($Z1sqr, $Z2sqr) = ($Hsqr, $Rsqr);
+
+ if ($x ne "x") {
+ $src0 = "%rax";
+ $sfx = "";
+ $bias = 0;
+
+$code.=<<___;
+.globl ecp_nistz256_point_add
+.type ecp_nistz256_point_add,\@function,3
+.align 32
+ecp_nistz256_point_add:
+___
+$code.=<<___ if ($addx);
+ mov \$0x80100, %ecx
+ and OPENSSL_ia32cap_P+8(%rip), %ecx
+ cmp \$0x80100, %ecx
+ je .Lpoint_addx
+___
+ } else {
+ $src0 = "%rdx";
+ $sfx = "x";
+ $bias = 128;
+
+$code.=<<___;
+.type ecp_nistz256_point_addx,\@function,3
+.align 32
+ecp_nistz256_point_addx:
+.Lpoint_addx:
+___
+ }
+$code.=<<___;
+ push %rbp
+ push %rbx
+ push %r12
+ push %r13
+ push %r14
+ push %r15
+ sub \$32*18+8, %rsp
+
+ movdqu 0x00($a_ptr), %xmm0 # copy *(P256_POINT *)$a_ptr
+ movdqu 0x10($a_ptr), %xmm1
+ movdqu 0x20($a_ptr), %xmm2
+ movdqu 0x30($a_ptr), %xmm3
+ movdqu 0x40($a_ptr), %xmm4
+ movdqu 0x50($a_ptr), %xmm5
+ mov $a_ptr, $b_ptr # reassign
+ mov $b_org, $a_ptr # reassign
+ movdqa %xmm0, $in1_x(%rsp)
+ movdqa %xmm1, $in1_x+0x10(%rsp)
+ por %xmm0, %xmm1
+ movdqa %xmm2, $in1_y(%rsp)
+ movdqa %xmm3, $in1_y+0x10(%rsp)
+ por %xmm2, %xmm3
+ movdqa %xmm4, $in1_z(%rsp)
+ movdqa %xmm5, $in1_z+0x10(%rsp)
+ por %xmm1, %xmm3
+
+ movdqu 0x00($a_ptr), %xmm0 # copy *(P256_POINT *)$b_ptr
+ pshufd \$0xb1, %xmm3, %xmm5
+ movdqu 0x10($a_ptr), %xmm1
+ movdqu 0x20($a_ptr), %xmm2
+ por %xmm3, %xmm5
+ movdqu 0x30($a_ptr), %xmm3
+ mov 0x40+8*0($a_ptr), $src0 # load original in2_z
+ mov 0x40+8*1($a_ptr), $acc6
+ mov 0x40+8*2($a_ptr), $acc7
+ mov 0x40+8*3($a_ptr), $acc0
+ movdqa %xmm0, $in2_x(%rsp)
+ pshufd \$0x1e, %xmm5, %xmm4
+ movdqa %xmm1, $in2_x+0x10(%rsp)
+ por %xmm0, %xmm1
+ movq $r_ptr, %xmm0 # save $r_ptr
+ movdqa %xmm2, $in2_y(%rsp)
+ movdqa %xmm3, $in2_y+0x10(%rsp)
+ por %xmm2, %xmm3
+ por %xmm4, %xmm5
+ pxor %xmm4, %xmm4
+ por %xmm1, %xmm3
+
+ lea 0x40-$bias($a_ptr), $a_ptr # $a_ptr is still valid
+ mov $src0, $in2_z+8*0(%rsp) # make in2_z copy
+ mov $acc6, $in2_z+8*1(%rsp)
+ mov $acc7, $in2_z+8*2(%rsp)
+ mov $acc0, $in2_z+8*3(%rsp)
+ lea $Z2sqr(%rsp), $r_ptr # Z2^2
+ call __ecp_nistz256_sqr_mont$x # p256_sqr_mont(Z2sqr, in2_z);
+
+ pcmpeqd %xmm4, %xmm5
+ pshufd \$0xb1, %xmm3, %xmm4
+ por %xmm3, %xmm4
+ pshufd \$0, %xmm5, %xmm5 # in1infty
+ pshufd \$0x1e, %xmm4, %xmm3
+ por %xmm3, %xmm4
+ pxor %xmm3, %xmm3
+ pcmpeqd %xmm3, %xmm4
+ pshufd \$0, %xmm4, %xmm4 # in2infty
+ mov 0x40+8*0($b_ptr), $src0 # load original in1_z
+ mov 0x40+8*1($b_ptr), $acc6
+ mov 0x40+8*2($b_ptr), $acc7
+ mov 0x40+8*3($b_ptr), $acc0
+
+ lea 0x40-$bias($b_ptr), $a_ptr
+ lea $Z1sqr(%rsp), $r_ptr # Z1^2
+ call __ecp_nistz256_sqr_mont$x # p256_sqr_mont(Z1sqr, in1_z);
+
+ `&load_for_mul("$Z2sqr(%rsp)", "$in2_z(%rsp)", "$src0")`
+ lea $S1(%rsp), $r_ptr # S1 = Z2^3
+ call __ecp_nistz256_mul_mont$x # p256_mul_mont(S1, Z2sqr, in2_z);
+
+ `&load_for_mul("$Z1sqr(%rsp)", "$in1_z(%rsp)", "$src0")`
+ lea $S2(%rsp), $r_ptr # S2 = Z1^3
+ call __ecp_nistz256_mul_mont$x # p256_mul_mont(S2, Z1sqr, in1_z);
+
+ `&load_for_mul("$S1(%rsp)", "$in1_y(%rsp)", "$src0")`
+ lea $S1(%rsp), $r_ptr # S1 = Y1*Z2^3
+ call __ecp_nistz256_mul_mont$x # p256_mul_mont(S1, S1, in1_y);
+
+ `&load_for_mul("$S2(%rsp)", "$in2_y(%rsp)", "$src0")`
+ lea $S2(%rsp), $r_ptr # S2 = Y2*Z1^3
+ call __ecp_nistz256_mul_mont$x # p256_mul_mont(S2, S2, in2_y);
+
+ lea $S1(%rsp), $b_ptr
+ lea $R(%rsp), $r_ptr # R = S2 - S1
+ call __ecp_nistz256_sub_from$x # p256_sub(R, S2, S1);
+
+ or $acc5, $acc4 # see if result is zero
+ movdqa %xmm4, %xmm2
+ or $acc0, $acc4
+ or $acc1, $acc4
+ por %xmm5, %xmm2 # in1infty || in2infty
+ movq $acc4, %xmm3
+
+ `&load_for_mul("$Z2sqr(%rsp)", "$in1_x(%rsp)", "$src0")`
+ lea $U1(%rsp), $r_ptr # U1 = X1*Z2^2
+ call __ecp_nistz256_mul_mont$x # p256_mul_mont(U1, in1_x, Z2sqr);
+
+ `&load_for_mul("$Z1sqr(%rsp)", "$in2_x(%rsp)", "$src0")`
+ lea $U2(%rsp), $r_ptr # U2 = X2*Z1^2
+ call __ecp_nistz256_mul_mont$x # p256_mul_mont(U2, in2_x, Z1sqr);
+
+ lea $U1(%rsp), $b_ptr
+ lea $H(%rsp), $r_ptr # H = U2 - U1
+ call __ecp_nistz256_sub_from$x # p256_sub(H, U2, U1);
+
+ or $acc5, $acc4 # see if result is zero
+ or $acc0, $acc4
+ or $acc1, $acc4
+
+ .byte 0x3e # predict taken
+ jnz .Ladd_proceed$x # is_equal(U1,U2)?
+ movq %xmm2, $acc0
+ movq %xmm3, $acc1
+ test $acc0, $acc0
+ jnz .Ladd_proceed$x # (in1infty || in2infty)?
+ test $acc1, $acc1
+ jz .Ladd_proceed$x # is_equal(S1,S2)?
+
+ movq %xmm0, $r_ptr # restore $r_ptr
+ pxor %xmm0, %xmm0
+ movdqu %xmm0, 0x00($r_ptr)
+ movdqu %xmm0, 0x10($r_ptr)
+ movdqu %xmm0, 0x20($r_ptr)
+ movdqu %xmm0, 0x30($r_ptr)
+ movdqu %xmm0, 0x40($r_ptr)
+ movdqu %xmm0, 0x50($r_ptr)
+ jmp .Ladd_done$x
+
+.align 32
+.Ladd_proceed$x:
+ `&load_for_sqr("$R(%rsp)", "$src0")`
+ lea $Rsqr(%rsp), $r_ptr # R^2
+ call __ecp_nistz256_sqr_mont$x # p256_sqr_mont(Rsqr, R);
+
+ `&load_for_mul("$H(%rsp)", "$in1_z(%rsp)", "$src0")`
+ lea $res_z(%rsp), $r_ptr # Z3 = H*Z1*Z2
+ call __ecp_nistz256_mul_mont$x # p256_mul_mont(res_z, H, in1_z);
+
+ `&load_for_sqr("$H(%rsp)", "$src0")`
+ lea $Hsqr(%rsp), $r_ptr # H^2
+ call __ecp_nistz256_sqr_mont$x # p256_sqr_mont(Hsqr, H);
+
+ `&load_for_mul("$res_z(%rsp)", "$in2_z(%rsp)", "$src0")`
+ lea $res_z(%rsp), $r_ptr # Z3 = H*Z1*Z2
+ call __ecp_nistz256_mul_mont$x # p256_mul_mont(res_z, res_z, in2_z);
+
+ `&load_for_mul("$Hsqr(%rsp)", "$H(%rsp)", "$src0")`
+ lea $Hcub(%rsp), $r_ptr # H^3
+ call __ecp_nistz256_mul_mont$x # p256_mul_mont(Hcub, Hsqr, H);
+
+ `&load_for_mul("$Hsqr(%rsp)", "$U1(%rsp)", "$src0")`
+ lea $U2(%rsp), $r_ptr # U1*H^2
+ call __ecp_nistz256_mul_mont$x # p256_mul_mont(U2, U1, Hsqr);
+___
+{
+#######################################################################
+# operate in 4-5-0-1 "name space" that matches multiplication output
+#
+my ($acc0,$acc1,$acc2,$acc3,$t3,$t4)=($acc4,$acc5,$acc0,$acc1,$acc2,$acc3);
+my ($poly1, $poly3)=($acc6,$acc7);
+
+$code.=<<___;
+ #lea $U2(%rsp), $a_ptr
+ #lea $Hsqr(%rsp), $r_ptr # 2*U1*H^2
+ #call __ecp_nistz256_mul_by_2 # ecp_nistz256_mul_by_2(Hsqr, U2);
+
+ add $acc0, $acc0 # a0:a3+a0:a3
+ lea $Rsqr(%rsp), $a_ptr
+ adc $acc1, $acc1
+ mov $acc0, $t0
+ adc $acc2, $acc2
+ adc $acc3, $acc3
+ mov $acc1, $t1
+ sbb $t4, $t4
+
+ sub \$-1, $acc0
+ mov $acc2, $t2
+ sbb $poly1, $acc1
+ sbb \$0, $acc2
+ mov $acc3, $t3
+ sbb $poly3, $acc3
+ test $t4, $t4
+
+ cmovz $t0, $acc0
+ mov 8*0($a_ptr), $t0
+ cmovz $t1, $acc1
+ mov 8*1($a_ptr), $t1
+ cmovz $t2, $acc2
+ mov 8*2($a_ptr), $t2
+ cmovz $t3, $acc3
+ mov 8*3($a_ptr), $t3
+
+ call __ecp_nistz256_sub$x # p256_sub(res_x, Rsqr, Hsqr);
+
+ lea $Hcub(%rsp), $b_ptr
+ lea $res_x(%rsp), $r_ptr
+ call __ecp_nistz256_sub_from$x # p256_sub(res_x, res_x, Hcub);
+
+ mov $U2+8*0(%rsp), $t0
+ mov $U2+8*1(%rsp), $t1
+ mov $U2+8*2(%rsp), $t2
+ mov $U2+8*3(%rsp), $t3
+ lea $res_y(%rsp), $r_ptr
+
+ call __ecp_nistz256_sub$x # p256_sub(res_y, U2, res_x);
+
+ mov $acc0, 8*0($r_ptr) # save the result, as
+ mov $acc1, 8*1($r_ptr) # __ecp_nistz256_sub doesn't
+ mov $acc2, 8*2($r_ptr)
+ mov $acc3, 8*3($r_ptr)
+___
+}
+$code.=<<___;
+ `&load_for_mul("$S1(%rsp)", "$Hcub(%rsp)", "$src0")`
+ lea $S2(%rsp), $r_ptr
+ call __ecp_nistz256_mul_mont$x # p256_mul_mont(S2, S1, Hcub);
+
+ `&load_for_mul("$R(%rsp)", "$res_y(%rsp)", "$src0")`
+ lea $res_y(%rsp), $r_ptr
+ call __ecp_nistz256_mul_mont$x # p256_mul_mont(res_y, R, res_y);
+
+ lea $S2(%rsp), $b_ptr
+ lea $res_y(%rsp), $r_ptr
+ call __ecp_nistz256_sub_from$x # p256_sub(res_y, res_y, S2);
+
+ movq %xmm0, $r_ptr # restore $r_ptr
+
+ movdqa %xmm5, %xmm0 # copy_conditional(res_z, in2_z, in1infty);
+ movdqa %xmm5, %xmm1
+ pandn $res_z(%rsp), %xmm0
+ movdqa %xmm5, %xmm2
+ pandn $res_z+0x10(%rsp), %xmm1
+ movdqa %xmm5, %xmm3
+ pand $in2_z(%rsp), %xmm2
+ pand $in2_z+0x10(%rsp), %xmm3
+ por %xmm0, %xmm2
+ por %xmm1, %xmm3
+
+ movdqa %xmm4, %xmm0 # copy_conditional(res_z, in1_z, in2infty);
+ movdqa %xmm4, %xmm1
+ pandn %xmm2, %xmm0
+ movdqa %xmm4, %xmm2
+ pandn %xmm3, %xmm1
+ movdqa %xmm4, %xmm3
+ pand $in1_z(%rsp), %xmm2
+ pand $in1_z+0x10(%rsp), %xmm3
+ por %xmm0, %xmm2
+ por %xmm1, %xmm3
+ movdqu %xmm2, 0x40($r_ptr)
+ movdqu %xmm3, 0x50($r_ptr)
+
+ movdqa %xmm5, %xmm0 # copy_conditional(res_x, in2_x, in1infty);
+ movdqa %xmm5, %xmm1
+ pandn $res_x(%rsp), %xmm0
+ movdqa %xmm5, %xmm2
+ pandn $res_x+0x10(%rsp), %xmm1
+ movdqa %xmm5, %xmm3
+ pand $in2_x(%rsp), %xmm2
+ pand $in2_x+0x10(%rsp), %xmm3
+ por %xmm0, %xmm2
+ por %xmm1, %xmm3
+
+ movdqa %xmm4, %xmm0 # copy_conditional(res_x, in1_x, in2infty);
+ movdqa %xmm4, %xmm1
+ pandn %xmm2, %xmm0
+ movdqa %xmm4, %xmm2
+ pandn %xmm3, %xmm1
+ movdqa %xmm4, %xmm3
+ pand $in1_x(%rsp), %xmm2
+ pand $in1_x+0x10(%rsp), %xmm3
+ por %xmm0, %xmm2
+ por %xmm1, %xmm3
+ movdqu %xmm2, 0x00($r_ptr)
+ movdqu %xmm3, 0x10($r_ptr)
+
+ movdqa %xmm5, %xmm0 # copy_conditional(res_y, in2_y, in1infty);
+ movdqa %xmm5, %xmm1
+ pandn $res_y(%rsp), %xmm0
+ movdqa %xmm5, %xmm2
+ pandn $res_y+0x10(%rsp), %xmm1
+ movdqa %xmm5, %xmm3
+ pand $in2_y(%rsp), %xmm2
+ pand $in2_y+0x10(%rsp), %xmm3
+ por %xmm0, %xmm2
+ por %xmm1, %xmm3
+
+ movdqa %xmm4, %xmm0 # copy_conditional(res_y, in1_y, in2infty);
+ movdqa %xmm4, %xmm1
+ pandn %xmm2, %xmm0
+ movdqa %xmm4, %xmm2
+ pandn %xmm3, %xmm1
+ movdqa %xmm4, %xmm3
+ pand $in1_y(%rsp), %xmm2
+ pand $in1_y+0x10(%rsp), %xmm3
+ por %xmm0, %xmm2
+ por %xmm1, %xmm3
+ movdqu %xmm2, 0x20($r_ptr)
+ movdqu %xmm3, 0x30($r_ptr)
+
+.Ladd_done$x:
+ add \$32*18+8, %rsp
+ pop %r15
+ pop %r14
+ pop %r13
+ pop %r12
+ pop %rbx
+ pop %rbp
+ ret
+.size ecp_nistz256_point_add$sfx,.-ecp_nistz256_point_add$sfx
+___
+}
+&gen_add("q");
+
+sub gen_add_affine () {
+ my $x = shift;
+ my ($src0,$sfx,$bias);
+ my ($U2,$S2,$H,$R,$Hsqr,$Hcub,$Rsqr,
+ $res_x,$res_y,$res_z,
+ $in1_x,$in1_y,$in1_z,
+ $in2_x,$in2_y)=map(32*$_,(0..14));
+ my $Z1sqr = $S2;
+
+ if ($x ne "x") {
+ $src0 = "%rax";
+ $sfx = "";
+ $bias = 0;
+
+$code.=<<___;
+.globl ecp_nistz256_point_add_affine
+.type ecp_nistz256_point_add_affine,\@function,3
+.align 32
+ecp_nistz256_point_add_affine:
+___
+$code.=<<___ if ($addx);
+ mov \$0x80100, %ecx
+ and OPENSSL_ia32cap_P+8(%rip), %ecx
+ cmp \$0x80100, %ecx
+ je .Lpoint_add_affinex
+___
+ } else {
+ $src0 = "%rdx";
+ $sfx = "x";
+ $bias = 128;
+
+$code.=<<___;
+.type ecp_nistz256_point_add_affinex,\@function,3
+.align 32
+ecp_nistz256_point_add_affinex:
+.Lpoint_add_affinex:
+___
+ }
+$code.=<<___;
+ push %rbp
+ push %rbx
+ push %r12
+ push %r13
+ push %r14
+ push %r15
+ sub \$32*15+8, %rsp
+
+ movdqu 0x00($a_ptr), %xmm0 # copy *(P256_POINT *)$a_ptr
+ mov $b_org, $b_ptr # reassign
+ movdqu 0x10($a_ptr), %xmm1
+ movdqu 0x20($a_ptr), %xmm2
+ movdqu 0x30($a_ptr), %xmm3
+ movdqu 0x40($a_ptr), %xmm4
+ movdqu 0x50($a_ptr), %xmm5
+ mov 0x40+8*0($a_ptr), $src0 # load original in1_z
+ mov 0x40+8*1($a_ptr), $acc6
+ mov 0x40+8*2($a_ptr), $acc7
+ mov 0x40+8*3($a_ptr), $acc0
+ movdqa %xmm0, $in1_x(%rsp)
+ movdqa %xmm1, $in1_x+0x10(%rsp)
+ por %xmm0, %xmm1
+ movdqa %xmm2, $in1_y(%rsp)
+ movdqa %xmm3, $in1_y+0x10(%rsp)
+ por %xmm2, %xmm3
+ movdqa %xmm4, $in1_z(%rsp)
+ movdqa %xmm5, $in1_z+0x10(%rsp)
+ por %xmm1, %xmm3
+
+ movdqu 0x00($b_ptr), %xmm0 # copy *(P256_POINT_AFFINE *)$b_ptr
+ pshufd \$0xb1, %xmm3, %xmm5
+ movdqu 0x10($b_ptr), %xmm1
+ movdqu 0x20($b_ptr), %xmm2
+ por %xmm3, %xmm5
+ movdqu 0x30($b_ptr), %xmm3
+ movdqa %xmm0, $in2_x(%rsp)
+ pshufd \$0x1e, %xmm5, %xmm4
+ movdqa %xmm1, $in2_x+0x10(%rsp)
+ por %xmm0, %xmm1
+ movq $r_ptr, %xmm0 # save $r_ptr
+ movdqa %xmm2, $in2_y(%rsp)
+ movdqa %xmm3, $in2_y+0x10(%rsp)
+ por %xmm2, %xmm3
+ por %xmm4, %xmm5
+ pxor %xmm4, %xmm4
+ por %xmm1, %xmm3
+
+ lea 0x40-$bias($a_ptr), $a_ptr # $a_ptr is still valid
+ lea $Z1sqr(%rsp), $r_ptr # Z1^2
+ call __ecp_nistz256_sqr_mont$x # p256_sqr_mont(Z1sqr, in1_z);
+
+ pcmpeqd %xmm4, %xmm5
+ pshufd \$0xb1, %xmm3, %xmm4
+ mov 0x00($b_ptr), $src0 # $b_ptr is still valid
+ #lea 0x00($b_ptr), $b_ptr
+ mov $acc4, $acc1 # harmonize sqr output and mul input
+ por %xmm3, %xmm4
+ pshufd \$0, %xmm5, %xmm5 # in1infty
+ pshufd \$0x1e, %xmm4, %xmm3
+ mov $acc5, $acc2
+ por %xmm3, %xmm4
+ pxor %xmm3, %xmm3
+ mov $acc6, $acc3
+ pcmpeqd %xmm3, %xmm4
+ pshufd \$0, %xmm4, %xmm4 # in2infty
+
+ lea $Z1sqr-$bias(%rsp), $a_ptr
+ mov $acc7, $acc4
+ lea $U2(%rsp), $r_ptr # U2 = X2*Z1^2
+ call __ecp_nistz256_mul_mont$x # p256_mul_mont(U2, Z1sqr, in2_x);
+
+ lea $in1_x(%rsp), $b_ptr
+ lea $H(%rsp), $r_ptr # H = U2 - U1
+ call __ecp_nistz256_sub_from$x # p256_sub(H, U2, in1_x);
+
+ `&load_for_mul("$Z1sqr(%rsp)", "$in1_z(%rsp)", "$src0")`
+ lea $S2(%rsp), $r_ptr # S2 = Z1^3
+ call __ecp_nistz256_mul_mont$x # p256_mul_mont(S2, Z1sqr, in1_z);
+
+ `&load_for_mul("$H(%rsp)", "$in1_z(%rsp)", "$src0")`
+ lea $res_z(%rsp), $r_ptr # Z3 = H*Z1*Z2
+ call __ecp_nistz256_mul_mont$x # p256_mul_mont(res_z, H, in1_z);
+
+ `&load_for_mul("$S2(%rsp)", "$in2_y(%rsp)", "$src0")`
+ lea $S2(%rsp), $r_ptr # S2 = Y2*Z1^3
+ call __ecp_nistz256_mul_mont$x # p256_mul_mont(S2, S2, in2_y);
+
+ lea $in1_y(%rsp), $b_ptr
+ lea $R(%rsp), $r_ptr # R = S2 - S1
+ call __ecp_nistz256_sub_from$x # p256_sub(R, S2, in1_y);
+
+ `&load_for_sqr("$H(%rsp)", "$src0")`
+ lea $Hsqr(%rsp), $r_ptr # H^2
+ call __ecp_nistz256_sqr_mont$x # p256_sqr_mont(Hsqr, H);
+
+ `&load_for_sqr("$R(%rsp)", "$src0")`
+ lea $Rsqr(%rsp), $r_ptr # R^2
+ call __ecp_nistz256_sqr_mont$x # p256_sqr_mont(Rsqr, R);
+
+ `&load_for_mul("$H(%rsp)", "$Hsqr(%rsp)", "$src0")`
+ lea $Hcub(%rsp), $r_ptr # H^3
+ call __ecp_nistz256_mul_mont$x # p256_mul_mont(Hcub, Hsqr, H);
+
+ `&load_for_mul("$Hsqr(%rsp)", "$in1_x(%rsp)", "$src0")`
+ lea $U2(%rsp), $r_ptr # U1*H^2
+ call __ecp_nistz256_mul_mont$x # p256_mul_mont(U2, in1_x, Hsqr);
+___
+{
+#######################################################################
+# operate in 4-5-0-1 "name space" that matches multiplication output
+#
+my ($acc0,$acc1,$acc2,$acc3,$t3,$t4)=($acc4,$acc5,$acc0,$acc1,$acc2,$acc3);
+my ($poly1, $poly3)=($acc6,$acc7);
+
+$code.=<<___;
+ #lea $U2(%rsp), $a_ptr
+ #lea $Hsqr(%rsp), $r_ptr # 2*U1*H^2
+ #call __ecp_nistz256_mul_by_2 # ecp_nistz256_mul_by_2(Hsqr, U2);
+
+ add $acc0, $acc0 # a0:a3+a0:a3
+ lea $Rsqr(%rsp), $a_ptr
+ adc $acc1, $acc1
+ mov $acc0, $t0
+ adc $acc2, $acc2
+ adc $acc3, $acc3
+ mov $acc1, $t1
+ sbb $t4, $t4
+
+ sub \$-1, $acc0
+ mov $acc2, $t2
+ sbb $poly1, $acc1
+ sbb \$0, $acc2
+ mov $acc3, $t3
+ sbb $poly3, $acc3
+ test $t4, $t4
+
+ cmovz $t0, $acc0
+ mov 8*0($a_ptr), $t0
+ cmovz $t1, $acc1
+ mov 8*1($a_ptr), $t1
+ cmovz $t2, $acc2
+ mov 8*2($a_ptr), $t2
+ cmovz $t3, $acc3
+ mov 8*3($a_ptr), $t3
+
+ call __ecp_nistz256_sub$x # p256_sub(res_x, Rsqr, Hsqr);
+
+ lea $Hcub(%rsp), $b_ptr
+ lea $res_x(%rsp), $r_ptr
+ call __ecp_nistz256_sub_from$x # p256_sub(res_x, res_x, Hcub);
+
+ mov $U2+8*0(%rsp), $t0
+ mov $U2+8*1(%rsp), $t1
+ mov $U2+8*2(%rsp), $t2
+ mov $U2+8*3(%rsp), $t3
+ lea $H(%rsp), $r_ptr
+
+ call __ecp_nistz256_sub$x # p256_sub(H, U2, res_x);
+
+ mov $acc0, 8*0($r_ptr) # save the result, as
+ mov $acc1, 8*1($r_ptr) # __ecp_nistz256_sub doesn't
+ mov $acc2, 8*2($r_ptr)
+ mov $acc3, 8*3($r_ptr)
+___
+}
+$code.=<<___;
+ `&load_for_mul("$Hcub(%rsp)", "$in1_y(%rsp)", "$src0")`
+ lea $S2(%rsp), $r_ptr
+ call __ecp_nistz256_mul_mont$x # p256_mul_mont(S2, Hcub, in1_y);
+
+ `&load_for_mul("$H(%rsp)", "$R(%rsp)", "$src0")`
+ lea $H(%rsp), $r_ptr
+ call __ecp_nistz256_mul_mont$x # p256_mul_mont(H, H, R);
+
+ lea $S2(%rsp), $b_ptr
+ lea $res_y(%rsp), $r_ptr
+ call __ecp_nistz256_sub_from$x # p256_sub(res_y, H, S2);
+
+ movq %xmm0, $r_ptr # restore $r_ptr
+
+ movdqa %xmm5, %xmm0 # copy_conditional(res_z, ONE, in1infty);
+ movdqa %xmm5, %xmm1
+ pandn $res_z(%rsp), %xmm0
+ movdqa %xmm5, %xmm2
+ pandn $res_z+0x10(%rsp), %xmm1
+ movdqa %xmm5, %xmm3
+ pand .LONE_mont(%rip), %xmm2
+ pand .LONE_mont+0x10(%rip), %xmm3
+ por %xmm0, %xmm2
+ por %xmm1, %xmm3
+
+ movdqa %xmm4, %xmm0 # copy_conditional(res_z, in1_z, in2infty);
+ movdqa %xmm4, %xmm1
+ pandn %xmm2, %xmm0
+ movdqa %xmm4, %xmm2
+ pandn %xmm3, %xmm1
+ movdqa %xmm4, %xmm3
+ pand $in1_z(%rsp), %xmm2
+ pand $in1_z+0x10(%rsp), %xmm3
+ por %xmm0, %xmm2
+ por %xmm1, %xmm3
+ movdqu %xmm2, 0x40($r_ptr)
+ movdqu %xmm3, 0x50($r_ptr)
+
+ movdqa %xmm5, %xmm0 # copy_conditional(res_x, in2_x, in1infty);
+ movdqa %xmm5, %xmm1
+ pandn $res_x(%rsp), %xmm0
+ movdqa %xmm5, %xmm2
+ pandn $res_x+0x10(%rsp), %xmm1
+ movdqa %xmm5, %xmm3
+ pand $in2_x(%rsp), %xmm2
+ pand $in2_x+0x10(%rsp), %xmm3
+ por %xmm0, %xmm2
+ por %xmm1, %xmm3
+
+ movdqa %xmm4, %xmm0 # copy_conditional(res_x, in1_x, in2infty);
+ movdqa %xmm4, %xmm1
+ pandn %xmm2, %xmm0
+ movdqa %xmm4, %xmm2
+ pandn %xmm3, %xmm1
+ movdqa %xmm4, %xmm3
+ pand $in1_x(%rsp), %xmm2
+ pand $in1_x+0x10(%rsp), %xmm3
+ por %xmm0, %xmm2
+ por %xmm1, %xmm3
+ movdqu %xmm2, 0x00($r_ptr)
+ movdqu %xmm3, 0x10($r_ptr)
+
+ movdqa %xmm5, %xmm0 # copy_conditional(res_y, in2_y, in1infty);
+ movdqa %xmm5, %xmm1
+ pandn $res_y(%rsp), %xmm0
+ movdqa %xmm5, %xmm2
+ pandn $res_y+0x10(%rsp), %xmm1
+ movdqa %xmm5, %xmm3
+ pand $in2_y(%rsp), %xmm2
+ pand $in2_y+0x10(%rsp), %xmm3
+ por %xmm0, %xmm2
+ por %xmm1, %xmm3
+
+ movdqa %xmm4, %xmm0 # copy_conditional(res_y, in1_y, in2infty);
+ movdqa %xmm4, %xmm1
+ pandn %xmm2, %xmm0
+ movdqa %xmm4, %xmm2
+ pandn %xmm3, %xmm1
+ movdqa %xmm4, %xmm3
+ pand $in1_y(%rsp), %xmm2
+ pand $in1_y+0x10(%rsp), %xmm3
+ por %xmm0, %xmm2
+ por %xmm1, %xmm3
+ movdqu %xmm2, 0x20($r_ptr)
+ movdqu %xmm3, 0x30($r_ptr)
+
+ add \$32*15+8, %rsp
+ pop %r15
+ pop %r14
+ pop %r13
+ pop %r12
+ pop %rbx
+ pop %rbp
+ ret
+.size ecp_nistz256_point_add_affine$sfx,.-ecp_nistz256_point_add_affine$sfx
+___
+}
+&gen_add_affine("q");
+
+########################################################################
+# AD*X magic
+#
+if ($addx) { {
+########################################################################
+# operate in 4-5-0-1 "name space" that matches multiplication output
+#
+my ($a0,$a1,$a2,$a3,$t3,$t4)=($acc4,$acc5,$acc0,$acc1,$acc2,$acc3);
+
+$code.=<<___;
+.type __ecp_nistz256_add_tox,\@abi-omnipotent
+.align 32
+__ecp_nistz256_add_tox:
+ xor $t4, $t4
+ adc 8*0($b_ptr), $a0
+ adc 8*1($b_ptr), $a1
+ mov $a0, $t0
+ adc 8*2($b_ptr), $a2
+ adc 8*3($b_ptr), $a3
+ mov $a1, $t1
+ adc \$0, $t4
+
+ xor $t3, $t3
+ sbb \$-1, $a0
+ mov $a2, $t2
+ sbb $poly1, $a1
+ sbb \$0, $a2
+ mov $a3, $t3
+ sbb $poly3, $a3
+
+ bt \$0, $t4
+ cmovnc $t0, $a0
+ cmovnc $t1, $a1
+ mov $a0, 8*0($r_ptr)
+ cmovnc $t2, $a2
+ mov $a1, 8*1($r_ptr)
+ cmovnc $t3, $a3
+ mov $a2, 8*2($r_ptr)
+ mov $a3, 8*3($r_ptr)
+
+ ret
+.size __ecp_nistz256_add_tox,.-__ecp_nistz256_add_tox
+
+.type __ecp_nistz256_sub_fromx,\@abi-omnipotent
+.align 32
+__ecp_nistz256_sub_fromx:
+ xor $t4, $t4
+ sbb 8*0($b_ptr), $a0
+ sbb 8*1($b_ptr), $a1
+ mov $a0, $t0
+ sbb 8*2($b_ptr), $a2
+ sbb 8*3($b_ptr), $a3
+ mov $a1, $t1
+ sbb \$0, $t4
+
+ xor $t3, $t3
+ adc \$-1, $a0
+ mov $a2, $t2
+ adc $poly1, $a1
+ adc \$0, $a2
+ mov $a3, $t3
+ adc $poly3, $a3
+
+ bt \$0, $t4
+ cmovnc $t0, $a0
+ cmovnc $t1, $a1
+ mov $a0, 8*0($r_ptr)
+ cmovnc $t2, $a2
+ mov $a1, 8*1($r_ptr)
+ cmovnc $t3, $a3
+ mov $a2, 8*2($r_ptr)
+ mov $a3, 8*3($r_ptr)
+
+ ret
+.size __ecp_nistz256_sub_fromx,.-__ecp_nistz256_sub_fromx
+
+.type __ecp_nistz256_subx,\@abi-omnipotent
+.align 32
+__ecp_nistz256_subx:
+ xor $t4, $t4
+ sbb $a0, $t0
+ sbb $a1, $t1
+ mov $t0, $a0
+ sbb $a2, $t2
+ sbb $a3, $t3
+ mov $t1, $a1
+ sbb \$0, $t4
+
+ xor $a3 ,$a3
+ adc \$-1, $t0
+ mov $t2, $a2
+ adc $poly1, $t1
+ adc \$0, $t2
+ mov $t3, $a3
+ adc $poly3, $t3
+
+ bt \$0, $t4
+ cmovc $t0, $a0
+ cmovc $t1, $a1
+ cmovc $t2, $a2
+ cmovc $t3, $a3
+
+ ret
+.size __ecp_nistz256_subx,.-__ecp_nistz256_subx
+
+.type __ecp_nistz256_mul_by_2x,\@abi-omnipotent
+.align 32
+__ecp_nistz256_mul_by_2x:
+ xor $t4, $t4
+ adc $a0, $a0 # a0:a3+a0:a3
+ adc $a1, $a1
+ mov $a0, $t0
+ adc $a2, $a2
+ adc $a3, $a3
+ mov $a1, $t1
+ adc \$0, $t4
+
+ xor $t3, $t3
+ sbb \$-1, $a0
+ mov $a2, $t2
+ sbb $poly1, $a1
+ sbb \$0, $a2
+ mov $a3, $t3
+ sbb $poly3, $a3
+
+ bt \$0, $t4
+ cmovnc $t0, $a0
+ cmovnc $t1, $a1
+ mov $a0, 8*0($r_ptr)
+ cmovnc $t2, $a2
+ mov $a1, 8*1($r_ptr)
+ cmovnc $t3, $a3
+ mov $a2, 8*2($r_ptr)
+ mov $a3, 8*3($r_ptr)
+
+ ret
+.size __ecp_nistz256_mul_by_2x,.-__ecp_nistz256_mul_by_2x
+___
+ }
+&gen_double("x");
+&gen_add("x");
+&gen_add_affine("x");
+}
+}}}
+
+$code =~ s/\`([^\`]*)\`/eval $1/gem;
+print $code;
+close STDOUT;
diff --git a/crypto/openssl/crypto/ec/ec.h b/crypto/openssl/crypto/ec/ec.h
index c4e7aea..6d3178f 100644
--- a/crypto/openssl/crypto/ec/ec.h
+++ b/crypto/openssl/crypto/ec/ec.h
@@ -240,6 +240,12 @@ int EC_GROUP_set_generator(EC_GROUP *group, const EC_POINT *generator,
*/
const EC_POINT *EC_GROUP_get0_generator(const EC_GROUP *group);
+/** Returns the montgomery data for order(Generator)
+ * \param group EC_GROUP object
+ * \return the currently used generator (possibly NULL).
+*/
+BN_MONT_CTX *EC_GROUP_get_mont_data(const EC_GROUP *group);
+
/** Gets the order of a EC_GROUP
* \param group EC_GROUP object
* \param order BIGNUM to which the order is copied
@@ -404,6 +410,9 @@ typedef struct {
*/
size_t EC_get_builtin_curves(EC_builtin_curve *r, size_t nitems);
+const char *EC_curve_nid2nist(int nid);
+int EC_curve_nist2nid(const char *name);
+
/********************************************************************/
/* EC_POINT functions */
/********************************************************************/
@@ -986,10 +995,78 @@ int EC_KEY_print_fp(FILE *fp, const EC_KEY *key, int off);
# endif
# define EVP_PKEY_CTX_set_ec_paramgen_curve_nid(ctx, nid) \
- EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, EVP_PKEY_OP_PARAMGEN, \
+ EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \
+ EVP_PKEY_OP_PARAMGEN|EVP_PKEY_OP_KEYGEN, \
EVP_PKEY_CTRL_EC_PARAMGEN_CURVE_NID, nid, NULL)
+# define EVP_PKEY_CTX_set_ec_param_enc(ctx, flag) \
+ EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \
+ EVP_PKEY_OP_PARAMGEN|EVP_PKEY_OP_KEYGEN, \
+ EVP_PKEY_CTRL_EC_PARAM_ENC, flag, NULL)
+
+# define EVP_PKEY_CTX_set_ecdh_cofactor_mode(ctx, flag) \
+ EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \
+ EVP_PKEY_OP_DERIVE, \
+ EVP_PKEY_CTRL_EC_ECDH_COFACTOR, flag, NULL)
+
+# define EVP_PKEY_CTX_get_ecdh_cofactor_mode(ctx) \
+ EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \
+ EVP_PKEY_OP_DERIVE, \
+ EVP_PKEY_CTRL_EC_ECDH_COFACTOR, -2, NULL)
+
+# define EVP_PKEY_CTX_set_ecdh_kdf_type(ctx, kdf) \
+ EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \
+ EVP_PKEY_OP_DERIVE, \
+ EVP_PKEY_CTRL_EC_KDF_TYPE, kdf, NULL)
+
+# define EVP_PKEY_CTX_get_ecdh_kdf_type(ctx) \
+ EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \
+ EVP_PKEY_OP_DERIVE, \
+ EVP_PKEY_CTRL_EC_KDF_TYPE, -2, NULL)
+
+# define EVP_PKEY_CTX_set_ecdh_kdf_md(ctx, md) \
+ EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \
+ EVP_PKEY_OP_DERIVE, \
+ EVP_PKEY_CTRL_EC_KDF_MD, 0, (void *)md)
+
+# define EVP_PKEY_CTX_get_ecdh_kdf_md(ctx, pmd) \
+ EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \
+ EVP_PKEY_OP_DERIVE, \
+ EVP_PKEY_CTRL_GET_EC_KDF_MD, 0, (void *)pmd)
+
+# define EVP_PKEY_CTX_set_ecdh_kdf_outlen(ctx, len) \
+ EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \
+ EVP_PKEY_OP_DERIVE, \
+ EVP_PKEY_CTRL_EC_KDF_OUTLEN, len, NULL)
+
+# define EVP_PKEY_CTX_get_ecdh_kdf_outlen(ctx, plen) \
+ EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \
+ EVP_PKEY_OP_DERIVE, \
+ EVP_PKEY_CTRL_GET_EC_KDF_OUTLEN, 0, (void *)plen)
+
+# define EVP_PKEY_CTX_set0_ecdh_kdf_ukm(ctx, p, plen) \
+ EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \
+ EVP_PKEY_OP_DERIVE, \
+ EVP_PKEY_CTRL_EC_KDF_UKM, plen, (void *)p)
+
+# define EVP_PKEY_CTX_get0_ecdh_kdf_ukm(ctx, p) \
+ EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, \
+ EVP_PKEY_OP_DERIVE, \
+ EVP_PKEY_CTRL_GET_EC_KDF_UKM, 0, (void *)p)
+
# define EVP_PKEY_CTRL_EC_PARAMGEN_CURVE_NID (EVP_PKEY_ALG_CTRL + 1)
+# define EVP_PKEY_CTRL_EC_PARAM_ENC (EVP_PKEY_ALG_CTRL + 2)
+# define EVP_PKEY_CTRL_EC_ECDH_COFACTOR (EVP_PKEY_ALG_CTRL + 3)
+# define EVP_PKEY_CTRL_EC_KDF_TYPE (EVP_PKEY_ALG_CTRL + 4)
+# define EVP_PKEY_CTRL_EC_KDF_MD (EVP_PKEY_ALG_CTRL + 5)
+# define EVP_PKEY_CTRL_GET_EC_KDF_MD (EVP_PKEY_ALG_CTRL + 6)
+# define EVP_PKEY_CTRL_EC_KDF_OUTLEN (EVP_PKEY_ALG_CTRL + 7)
+# define EVP_PKEY_CTRL_GET_EC_KDF_OUTLEN (EVP_PKEY_ALG_CTRL + 8)
+# define EVP_PKEY_CTRL_EC_KDF_UKM (EVP_PKEY_ALG_CTRL + 9)
+# define EVP_PKEY_CTRL_GET_EC_KDF_UKM (EVP_PKEY_ALG_CTRL + 10)
+/* KDF types */
+# define EVP_PKEY_ECDH_KDF_NONE 1
+# define EVP_PKEY_ECDH_KDF_X9_62 2
/* BEGIN ERROR CODES */
/*
@@ -1007,6 +1084,8 @@ void ERR_load_EC_strings(void);
# define EC_F_D2I_ECPKPARAMETERS 145
# define EC_F_D2I_ECPRIVATEKEY 146
# define EC_F_DO_EC_KEY_PRINT 221
+# define EC_F_ECDH_CMS_DECRYPT 238
+# define EC_F_ECDH_CMS_SET_SHARED_INFO 239
# define EC_F_ECKEY_PARAM2TYPE 223
# define EC_F_ECKEY_PARAM_DECODE 212
# define EC_F_ECKEY_PRIV_DECODE 213
@@ -1018,6 +1097,12 @@ void ERR_load_EC_strings(void);
# define EC_F_ECPARAMETERS_PRINT_FP 148
# define EC_F_ECPKPARAMETERS_PRINT 149
# define EC_F_ECPKPARAMETERS_PRINT_FP 150
+# define EC_F_ECP_NISTZ256_GET_AFFINE 240
+# define EC_F_ECP_NISTZ256_MULT_PRECOMPUTE 243
+# define EC_F_ECP_NISTZ256_POINTS_MUL 241
+# define EC_F_ECP_NISTZ256_PRE_COMP_NEW 244
+# define EC_F_ECP_NISTZ256_SET_WORDS 245
+# define EC_F_ECP_NISTZ256_WINDOWED_MUL 242
# define EC_F_ECP_NIST_MOD_192 203
# define EC_F_ECP_NIST_MOD_224 204
# define EC_F_ECP_NIST_MOD_256 205
@@ -1157,6 +1242,7 @@ void ERR_load_EC_strings(void);
# define EC_R_INVALID_COMPRESSED_POINT 110
# define EC_R_INVALID_COMPRESSION_BIT 109
# define EC_R_INVALID_CURVE 141
+# define EC_R_INVALID_DIGEST 151
# define EC_R_INVALID_DIGEST_TYPE 138
# define EC_R_INVALID_ENCODING 102
# define EC_R_INVALID_FIELD 103
@@ -1165,6 +1251,7 @@ void ERR_load_EC_strings(void);
# define EC_R_INVALID_PENTANOMIAL_BASIS 132
# define EC_R_INVALID_PRIVATE_KEY 123
# define EC_R_INVALID_TRINOMIAL_BASIS 137
+# define EC_R_KDF_PARAMETER_ERROR 148
# define EC_R_KEYS_NOT_SET 140
# define EC_R_MISSING_PARAMETERS 124
# define EC_R_MISSING_PRIVATE_KEY 125
@@ -1175,9 +1262,11 @@ void ERR_load_EC_strings(void);
# define EC_R_NO_FIELD_MOD 133
# define EC_R_NO_PARAMETERS_SET 139
# define EC_R_PASSED_NULL_PARAMETER 134
+# define EC_R_PEER_KEY_ERROR 149
# define EC_R_PKPARAMETERS2GROUP_FAILURE 127
# define EC_R_POINT_AT_INFINITY 106
# define EC_R_POINT_IS_NOT_ON_CURVE 107
+# define EC_R_SHARED_INFO_ERROR 150
# define EC_R_SLOT_FULL 108
# define EC_R_UNDEFINED_GENERATOR 113
# define EC_R_UNDEFINED_ORDER 128
diff --git a/crypto/openssl/crypto/ec/ec_ameth.c b/crypto/openssl/crypto/ec/ec_ameth.c
index 5cefb5a..83e208c 100644
--- a/crypto/openssl/crypto/ec/ec_ameth.c
+++ b/crypto/openssl/crypto/ec/ec_ameth.c
@@ -64,8 +64,12 @@
#ifndef OPENSSL_NO_CMS
# include <openssl/cms.h>
#endif
+#include <openssl/asn1t.h>
#include "asn1_locl.h"
+static int ecdh_cms_decrypt(CMS_RecipientInfo *ri);
+static int ecdh_cms_encrypt(CMS_RecipientInfo *ri);
+
static int eckey_param2type(int *pptype, void **ppval, EC_KEY *ec_key)
{
const EC_GROUP *group;
@@ -580,10 +584,21 @@ static int ec_pkey_ctrl(EVP_PKEY *pkey, int op, long arg1, void *arg2)
X509_ALGOR_set0(alg2, OBJ_nid2obj(snid), V_ASN1_UNDEF, 0);
}
return 1;
+
+ case ASN1_PKEY_CTRL_CMS_ENVELOPE:
+ if (arg1 == 1)
+ return ecdh_cms_decrypt(arg2);
+ else if (arg1 == 0)
+ return ecdh_cms_encrypt(arg2);
+ return -2;
+
+ case ASN1_PKEY_CTRL_CMS_RI_TYPE:
+ *(int *)arg2 = CMS_RECIPINFO_AGREE;
+ return 1;
#endif
case ASN1_PKEY_CTRL_DEFAULT_MD_NID:
- *(int *)arg2 = NID_sha1;
+ *(int *)arg2 = NID_sha256;
return 2;
default:
@@ -625,3 +640,326 @@ const EVP_PKEY_ASN1_METHOD eckey_asn1_meth = {
old_ec_priv_decode,
old_ec_priv_encode
};
+
+#ifndef OPENSSL_NO_CMS
+
+static int ecdh_cms_set_peerkey(EVP_PKEY_CTX *pctx,
+ X509_ALGOR *alg, ASN1_BIT_STRING *pubkey)
+{
+ ASN1_OBJECT *aoid;
+ int atype;
+ void *aval;
+ int rv = 0;
+ EVP_PKEY *pkpeer = NULL;
+ EC_KEY *ecpeer = NULL;
+ const unsigned char *p;
+ int plen;
+ X509_ALGOR_get0(&aoid, &atype, &aval, alg);
+ if (OBJ_obj2nid(aoid) != NID_X9_62_id_ecPublicKey)
+ goto err;
+ /* If absent parameters get group from main key */
+ if (atype == V_ASN1_UNDEF || atype == V_ASN1_NULL) {
+ const EC_GROUP *grp;
+ EVP_PKEY *pk;
+ pk = EVP_PKEY_CTX_get0_pkey(pctx);
+ if (!pk)
+ goto err;
+ grp = EC_KEY_get0_group(pk->pkey.ec);
+ ecpeer = EC_KEY_new();
+ if (!ecpeer)
+ goto err;
+ if (!EC_KEY_set_group(ecpeer, grp))
+ goto err;
+ } else {
+ ecpeer = eckey_type2param(atype, aval);
+ if (!ecpeer)
+ goto err;
+ }
+ /* We have parameters now set public key */
+ plen = ASN1_STRING_length(pubkey);
+ p = ASN1_STRING_data(pubkey);
+ if (!p || !plen)
+ goto err;
+ if (!o2i_ECPublicKey(&ecpeer, &p, plen))
+ goto err;
+ pkpeer = EVP_PKEY_new();
+ if (!pkpeer)
+ goto err;
+ EVP_PKEY_set1_EC_KEY(pkpeer, ecpeer);
+ if (EVP_PKEY_derive_set_peer(pctx, pkpeer) > 0)
+ rv = 1;
+ err:
+ if (ecpeer)
+ EC_KEY_free(ecpeer);
+ if (pkpeer)
+ EVP_PKEY_free(pkpeer);
+ return rv;
+}
+
+/* Set KDF parameters based on KDF NID */
+static int ecdh_cms_set_kdf_param(EVP_PKEY_CTX *pctx, int eckdf_nid)
+{
+ int kdf_nid, kdfmd_nid, cofactor;
+ const EVP_MD *kdf_md;
+ if (eckdf_nid == NID_undef)
+ return 0;
+
+ /* Lookup KDF type, cofactor mode and digest */
+ if (!OBJ_find_sigid_algs(eckdf_nid, &kdfmd_nid, &kdf_nid))
+ return 0;
+
+ if (kdf_nid == NID_dh_std_kdf)
+ cofactor = 0;
+ else if (kdf_nid == NID_dh_cofactor_kdf)
+ cofactor = 1;
+ else
+ return 0;
+
+ if (EVP_PKEY_CTX_set_ecdh_cofactor_mode(pctx, cofactor) <= 0)
+ return 0;
+
+ if (EVP_PKEY_CTX_set_ecdh_kdf_type(pctx, EVP_PKEY_ECDH_KDF_X9_62) <= 0)
+ return 0;
+
+ kdf_md = EVP_get_digestbynid(kdfmd_nid);
+ if (!kdf_md)
+ return 0;
+
+ if (EVP_PKEY_CTX_set_ecdh_kdf_md(pctx, kdf_md) <= 0)
+ return 0;
+ return 1;
+}
+
+static int ecdh_cms_set_shared_info(EVP_PKEY_CTX *pctx, CMS_RecipientInfo *ri)
+{
+ int rv = 0;
+
+ X509_ALGOR *alg, *kekalg = NULL;
+ ASN1_OCTET_STRING *ukm;
+ const unsigned char *p;
+ unsigned char *der = NULL;
+ int plen, keylen;
+ const EVP_CIPHER *kekcipher;
+ EVP_CIPHER_CTX *kekctx;
+
+ if (!CMS_RecipientInfo_kari_get0_alg(ri, &alg, &ukm))
+ return 0;
+
+ if (!ecdh_cms_set_kdf_param(pctx, OBJ_obj2nid(alg->algorithm))) {
+ ECerr(EC_F_ECDH_CMS_SET_SHARED_INFO, EC_R_KDF_PARAMETER_ERROR);
+ return 0;
+ }
+
+ if (alg->parameter->type != V_ASN1_SEQUENCE)
+ return 0;
+
+ p = alg->parameter->value.sequence->data;
+ plen = alg->parameter->value.sequence->length;
+ kekalg = d2i_X509_ALGOR(NULL, &p, plen);
+ if (!kekalg)
+ goto err;
+ kekctx = CMS_RecipientInfo_kari_get0_ctx(ri);
+ if (!kekctx)
+ goto err;
+ kekcipher = EVP_get_cipherbyobj(kekalg->algorithm);
+ if (!kekcipher || EVP_CIPHER_mode(kekcipher) != EVP_CIPH_WRAP_MODE)
+ goto err;
+ if (!EVP_EncryptInit_ex(kekctx, kekcipher, NULL, NULL, NULL))
+ goto err;
+ if (EVP_CIPHER_asn1_to_param(kekctx, kekalg->parameter) <= 0)
+ goto err;
+
+ keylen = EVP_CIPHER_CTX_key_length(kekctx);
+ if (EVP_PKEY_CTX_set_ecdh_kdf_outlen(pctx, keylen) <= 0)
+ goto err;
+
+ plen = CMS_SharedInfo_encode(&der, kekalg, ukm, keylen);
+
+ if (!plen)
+ goto err;
+
+ if (EVP_PKEY_CTX_set0_ecdh_kdf_ukm(pctx, der, plen) <= 0)
+ goto err;
+ der = NULL;
+
+ rv = 1;
+ err:
+ if (kekalg)
+ X509_ALGOR_free(kekalg);
+ if (der)
+ OPENSSL_free(der);
+ return rv;
+}
+
+static int ecdh_cms_decrypt(CMS_RecipientInfo *ri)
+{
+ EVP_PKEY_CTX *pctx;
+ pctx = CMS_RecipientInfo_get0_pkey_ctx(ri);
+ if (!pctx)
+ return 0;
+ /* See if we need to set peer key */
+ if (!EVP_PKEY_CTX_get0_peerkey(pctx)) {
+ X509_ALGOR *alg;
+ ASN1_BIT_STRING *pubkey;
+ if (!CMS_RecipientInfo_kari_get0_orig_id(ri, &alg, &pubkey,
+ NULL, NULL, NULL))
+ return 0;
+ if (!alg || !pubkey)
+ return 0;
+ if (!ecdh_cms_set_peerkey(pctx, alg, pubkey)) {
+ ECerr(EC_F_ECDH_CMS_DECRYPT, EC_R_PEER_KEY_ERROR);
+ return 0;
+ }
+ }
+ /* Set ECDH derivation parameters and initialise unwrap context */
+ if (!ecdh_cms_set_shared_info(pctx, ri)) {
+ ECerr(EC_F_ECDH_CMS_DECRYPT, EC_R_SHARED_INFO_ERROR);
+ return 0;
+ }
+ return 1;
+}
+
+static int ecdh_cms_encrypt(CMS_RecipientInfo *ri)
+{
+ EVP_PKEY_CTX *pctx;
+ EVP_PKEY *pkey;
+ EVP_CIPHER_CTX *ctx;
+ int keylen;
+ X509_ALGOR *talg, *wrap_alg = NULL;
+ ASN1_OBJECT *aoid;
+ ASN1_BIT_STRING *pubkey;
+ ASN1_STRING *wrap_str;
+ ASN1_OCTET_STRING *ukm;
+ unsigned char *penc = NULL;
+ int penclen;
+ int rv = 0;
+ int ecdh_nid, kdf_type, kdf_nid, wrap_nid;
+ const EVP_MD *kdf_md;
+ pctx = CMS_RecipientInfo_get0_pkey_ctx(ri);
+ if (!pctx)
+ return 0;
+ /* Get ephemeral key */
+ pkey = EVP_PKEY_CTX_get0_pkey(pctx);
+ if (!CMS_RecipientInfo_kari_get0_orig_id(ri, &talg, &pubkey,
+ NULL, NULL, NULL))
+ goto err;
+ X509_ALGOR_get0(&aoid, NULL, NULL, talg);
+ /* Is everything uninitialised? */
+ if (aoid == OBJ_nid2obj(NID_undef)) {
+
+ EC_KEY *eckey = pkey->pkey.ec;
+ /* Set the key */
+ unsigned char *p;
+
+ penclen = i2o_ECPublicKey(eckey, NULL);
+ if (penclen <= 0)
+ goto err;
+ penc = OPENSSL_malloc(penclen);
+ if (!penc)
+ goto err;
+ p = penc;
+ penclen = i2o_ECPublicKey(eckey, &p);
+ if (penclen <= 0)
+ goto err;
+ ASN1_STRING_set0(pubkey, penc, penclen);
+ pubkey->flags &= ~(ASN1_STRING_FLAG_BITS_LEFT | 0x07);
+ pubkey->flags |= ASN1_STRING_FLAG_BITS_LEFT;
+
+ penc = NULL;
+ X509_ALGOR_set0(talg, OBJ_nid2obj(NID_X9_62_id_ecPublicKey),
+ V_ASN1_UNDEF, NULL);
+ }
+
+ /* See if custom paraneters set */
+ kdf_type = EVP_PKEY_CTX_get_ecdh_kdf_type(pctx);
+ if (kdf_type <= 0)
+ goto err;
+ if (!EVP_PKEY_CTX_get_ecdh_kdf_md(pctx, &kdf_md))
+ goto err;
+ ecdh_nid = EVP_PKEY_CTX_get_ecdh_cofactor_mode(pctx);
+ if (ecdh_nid < 0)
+ goto err;
+ else if (ecdh_nid == 0)
+ ecdh_nid = NID_dh_std_kdf;
+ else if (ecdh_nid == 1)
+ ecdh_nid = NID_dh_cofactor_kdf;
+
+ if (kdf_type == EVP_PKEY_ECDH_KDF_NONE) {
+ kdf_type = EVP_PKEY_ECDH_KDF_X9_62;
+ if (EVP_PKEY_CTX_set_ecdh_kdf_type(pctx, kdf_type) <= 0)
+ goto err;
+ } else
+ /* Uknown KDF */
+ goto err;
+ if (kdf_md == NULL) {
+ /* Fixme later for better MD */
+ kdf_md = EVP_sha1();
+ if (EVP_PKEY_CTX_set_ecdh_kdf_md(pctx, kdf_md) <= 0)
+ goto err;
+ }
+
+ if (!CMS_RecipientInfo_kari_get0_alg(ri, &talg, &ukm))
+ goto err;
+
+ /* Lookup NID for KDF+cofactor+digest */
+
+ if (!OBJ_find_sigid_by_algs(&kdf_nid, EVP_MD_type(kdf_md), ecdh_nid))
+ goto err;
+ /* Get wrap NID */
+ ctx = CMS_RecipientInfo_kari_get0_ctx(ri);
+ wrap_nid = EVP_CIPHER_CTX_type(ctx);
+ keylen = EVP_CIPHER_CTX_key_length(ctx);
+
+ /* Package wrap algorithm in an AlgorithmIdentifier */
+
+ wrap_alg = X509_ALGOR_new();
+ if (!wrap_alg)
+ goto err;
+ wrap_alg->algorithm = OBJ_nid2obj(wrap_nid);
+ wrap_alg->parameter = ASN1_TYPE_new();
+ if (!wrap_alg->parameter)
+ goto err;
+ if (EVP_CIPHER_param_to_asn1(ctx, wrap_alg->parameter) <= 0)
+ goto err;
+ if (ASN1_TYPE_get(wrap_alg->parameter) == NID_undef) {
+ ASN1_TYPE_free(wrap_alg->parameter);
+ wrap_alg->parameter = NULL;
+ }
+
+ if (EVP_PKEY_CTX_set_ecdh_kdf_outlen(pctx, keylen) <= 0)
+ goto err;
+
+ penclen = CMS_SharedInfo_encode(&penc, wrap_alg, ukm, keylen);
+
+ if (!penclen)
+ goto err;
+
+ if (EVP_PKEY_CTX_set0_ecdh_kdf_ukm(pctx, penc, penclen) <= 0)
+ goto err;
+ penc = NULL;
+
+ /*
+ * Now need to wrap encoding of wrap AlgorithmIdentifier into parameter
+ * of another AlgorithmIdentifier.
+ */
+ penclen = i2d_X509_ALGOR(wrap_alg, &penc);
+ if (!penc || !penclen)
+ goto err;
+ wrap_str = ASN1_STRING_new();
+ if (!wrap_str)
+ goto err;
+ ASN1_STRING_set0(wrap_str, penc, penclen);
+ penc = NULL;
+ X509_ALGOR_set0(talg, OBJ_nid2obj(kdf_nid), V_ASN1_SEQUENCE, wrap_str);
+
+ rv = 1;
+
+ err:
+ if (penc)
+ OPENSSL_free(penc);
+ if (wrap_alg)
+ X509_ALGOR_free(wrap_alg);
+ return rv;
+}
+
+#endif
diff --git a/crypto/openssl/crypto/ec/ec_curve.c b/crypto/openssl/crypto/ec/ec_curve.c
index e4bcb5d..6dbe9d8 100644
--- a/crypto/openssl/crypto/ec/ec_curve.c
+++ b/crypto/openssl/crypto/ec/ec_curve.c
@@ -69,11 +69,16 @@
*
*/
+#include <string.h>
#include "ec_lcl.h"
#include <openssl/err.h>
#include <openssl/obj_mac.h>
#include <openssl/opensslconf.h>
+#ifdef OPENSSL_FIPS
+# include <openssl/fips.h>
+#endif
+
typedef struct {
int field_type, /* either NID_X9_62_prime_field or
* NID_X9_62_characteristic_two_field */
@@ -2282,6 +2287,554 @@ static const struct {
#endif
+/*
+ * These curves were added by Annie Yousar <a.yousar@informatik.hu-berlin.de>
+ * For the definition of RFC 5639 curves see
+ * http://www.ietf.org/rfc/rfc5639.txt These curves are generated verifiable
+ * at random, nevertheless the seed is omitted as parameter because the
+ * generation mechanism is different from those defined in ANSI X9.62.
+ */
+
+static const struct {
+ EC_CURVE_DATA h;
+ unsigned char data[0 + 20 * 6];
+} _EC_brainpoolP160r1 = {
+ {
+ NID_X9_62_prime_field, 0, 20, 1
+ },
+ {
+ /* no seed */
+ /* p */
+ 0xE9, 0x5E, 0x4A, 0x5F, 0x73, 0x70, 0x59, 0xDC, 0x60, 0xDF, 0xC7, 0xAD,
+ 0x95, 0xB3, 0xD8, 0x13, 0x95, 0x15, 0x62, 0x0F,
+ /* a */
+ 0x34, 0x0E, 0x7B, 0xE2, 0xA2, 0x80, 0xEB, 0x74, 0xE2, 0xBE, 0x61, 0xBA,
+ 0xDA, 0x74, 0x5D, 0x97, 0xE8, 0xF7, 0xC3, 0x00,
+ /* b */
+ 0x1E, 0x58, 0x9A, 0x85, 0x95, 0x42, 0x34, 0x12, 0x13, 0x4F, 0xAA, 0x2D,
+ 0xBD, 0xEC, 0x95, 0xC8, 0xD8, 0x67, 0x5E, 0x58,
+ /* x */
+ 0xBE, 0xD5, 0xAF, 0x16, 0xEA, 0x3F, 0x6A, 0x4F, 0x62, 0x93, 0x8C, 0x46,
+ 0x31, 0xEB, 0x5A, 0xF7, 0xBD, 0xBC, 0xDB, 0xC3,
+ /* y */
+ 0x16, 0x67, 0xCB, 0x47, 0x7A, 0x1A, 0x8E, 0xC3, 0x38, 0xF9, 0x47, 0x41,
+ 0x66, 0x9C, 0x97, 0x63, 0x16, 0xDA, 0x63, 0x21,
+ /* order */
+ 0xE9, 0x5E, 0x4A, 0x5F, 0x73, 0x70, 0x59, 0xDC, 0x60, 0xDF, 0x59, 0x91,
+ 0xD4, 0x50, 0x29, 0x40, 0x9E, 0x60, 0xFC, 0x09
+ }
+};
+
+static const struct {
+ EC_CURVE_DATA h;
+ unsigned char data[0 + 20 * 6];
+} _EC_brainpoolP160t1 = {
+ {
+ NID_X9_62_prime_field, 0, 20, 1
+ },
+ {
+ /* no seed */
+ /* p */
+ 0xE9, 0x5E, 0x4A, 0x5F, 0x73, 0x70, 0x59, 0xDC, 0x60, 0xDF, 0xC7, 0xAD,
+ 0x95, 0xB3, 0xD8, 0x13, 0x95, 0x15, 0x62, 0x0F,
+ /* a */
+ 0xE9, 0x5E, 0x4A, 0x5F, 0x73, 0x70, 0x59, 0xDC, 0x60, 0xDF, 0xC7, 0xAD,
+ 0x95, 0xB3, 0xD8, 0x13, 0x95, 0x15, 0x62, 0x0C,
+ /* b */
+ 0x7A, 0x55, 0x6B, 0x6D, 0xAE, 0x53, 0x5B, 0x7B, 0x51, 0xED, 0x2C, 0x4D,
+ 0x7D, 0xAA, 0x7A, 0x0B, 0x5C, 0x55, 0xF3, 0x80,
+ /* x */
+ 0xB1, 0x99, 0xB1, 0x3B, 0x9B, 0x34, 0xEF, 0xC1, 0x39, 0x7E, 0x64, 0xBA,
+ 0xEB, 0x05, 0xAC, 0xC2, 0x65, 0xFF, 0x23, 0x78,
+ /* y */
+ 0xAD, 0xD6, 0x71, 0x8B, 0x7C, 0x7C, 0x19, 0x61, 0xF0, 0x99, 0x1B, 0x84,
+ 0x24, 0x43, 0x77, 0x21, 0x52, 0xC9, 0xE0, 0xAD,
+ /* order */
+ 0xE9, 0x5E, 0x4A, 0x5F, 0x73, 0x70, 0x59, 0xDC, 0x60, 0xDF, 0x59, 0x91,
+ 0xD4, 0x50, 0x29, 0x40, 0x9E, 0x60, 0xFC, 0x09
+ }
+};
+
+static const struct {
+ EC_CURVE_DATA h;
+ unsigned char data[0 + 24 * 6];
+} _EC_brainpoolP192r1 = {
+ {
+ NID_X9_62_prime_field, 0, 24, 1
+ },
+ {
+ /* no seed */
+ /* p */
+ 0xC3, 0x02, 0xF4, 0x1D, 0x93, 0x2A, 0x36, 0xCD, 0xA7, 0xA3, 0x46, 0x30,
+ 0x93, 0xD1, 0x8D, 0xB7, 0x8F, 0xCE, 0x47, 0x6D, 0xE1, 0xA8, 0x62, 0x97,
+ /* a */
+ 0x6A, 0x91, 0x17, 0x40, 0x76, 0xB1, 0xE0, 0xE1, 0x9C, 0x39, 0xC0, 0x31,
+ 0xFE, 0x86, 0x85, 0xC1, 0xCA, 0xE0, 0x40, 0xE5, 0xC6, 0x9A, 0x28, 0xEF,
+ /* b */
+ 0x46, 0x9A, 0x28, 0xEF, 0x7C, 0x28, 0xCC, 0xA3, 0xDC, 0x72, 0x1D, 0x04,
+ 0x4F, 0x44, 0x96, 0xBC, 0xCA, 0x7E, 0xF4, 0x14, 0x6F, 0xBF, 0x25, 0xC9,
+ /* x */
+ 0xC0, 0xA0, 0x64, 0x7E, 0xAA, 0xB6, 0xA4, 0x87, 0x53, 0xB0, 0x33, 0xC5,
+ 0x6C, 0xB0, 0xF0, 0x90, 0x0A, 0x2F, 0x5C, 0x48, 0x53, 0x37, 0x5F, 0xD6,
+ /* y */
+ 0x14, 0xB6, 0x90, 0x86, 0x6A, 0xBD, 0x5B, 0xB8, 0x8B, 0x5F, 0x48, 0x28,
+ 0xC1, 0x49, 0x00, 0x02, 0xE6, 0x77, 0x3F, 0xA2, 0xFA, 0x29, 0x9B, 0x8F,
+ /* order */
+ 0xC3, 0x02, 0xF4, 0x1D, 0x93, 0x2A, 0x36, 0xCD, 0xA7, 0xA3, 0x46, 0x2F,
+ 0x9E, 0x9E, 0x91, 0x6B, 0x5B, 0xE8, 0xF1, 0x02, 0x9A, 0xC4, 0xAC, 0xC1
+ }
+};
+
+static const struct {
+ EC_CURVE_DATA h;
+ unsigned char data[0 + 24 * 6];
+} _EC_brainpoolP192t1 = {
+ {
+ NID_X9_62_prime_field, 0, 24, 1
+ },
+ {
+ /* no seed */
+ /* p */
+ 0xC3, 0x02, 0xF4, 0x1D, 0x93, 0x2A, 0x36, 0xCD, 0xA7, 0xA3, 0x46, 0x30,
+ 0x93, 0xD1, 0x8D, 0xB7, 0x8F, 0xCE, 0x47, 0x6D, 0xE1, 0xA8, 0x62, 0x97,
+ /* a */
+ 0xC3, 0x02, 0xF4, 0x1D, 0x93, 0x2A, 0x36, 0xCD, 0xA7, 0xA3, 0x46, 0x30,
+ 0x93, 0xD1, 0x8D, 0xB7, 0x8F, 0xCE, 0x47, 0x6D, 0xE1, 0xA8, 0x62, 0x94,
+ /* b */
+ 0x13, 0xD5, 0x6F, 0xFA, 0xEC, 0x78, 0x68, 0x1E, 0x68, 0xF9, 0xDE, 0xB4,
+ 0x3B, 0x35, 0xBE, 0xC2, 0xFB, 0x68, 0x54, 0x2E, 0x27, 0x89, 0x7B, 0x79,
+ /* x */
+ 0x3A, 0xE9, 0xE5, 0x8C, 0x82, 0xF6, 0x3C, 0x30, 0x28, 0x2E, 0x1F, 0xE7,
+ 0xBB, 0xF4, 0x3F, 0xA7, 0x2C, 0x44, 0x6A, 0xF6, 0xF4, 0x61, 0x81, 0x29,
+ /* y */
+ 0x09, 0x7E, 0x2C, 0x56, 0x67, 0xC2, 0x22, 0x3A, 0x90, 0x2A, 0xB5, 0xCA,
+ 0x44, 0x9D, 0x00, 0x84, 0xB7, 0xE5, 0xB3, 0xDE, 0x7C, 0xCC, 0x01, 0xC9,
+ /* order */
+ 0xC3, 0x02, 0xF4, 0x1D, 0x93, 0x2A, 0x36, 0xCD, 0xA7, 0xA3, 0x46, 0x2F,
+ 0x9E, 0x9E, 0x91, 0x6B, 0x5B, 0xE8, 0xF1, 0x02, 0x9A, 0xC4, 0xAC, 0xC1
+ }
+};
+
+static const struct {
+ EC_CURVE_DATA h;
+ unsigned char data[0 + 28 * 6];
+} _EC_brainpoolP224r1 = {
+ {
+ NID_X9_62_prime_field, 0, 28, 1
+ },
+ {
+ /* no seed */
+ /* p */
+ 0xD7, 0xC1, 0x34, 0xAA, 0x26, 0x43, 0x66, 0x86, 0x2A, 0x18, 0x30, 0x25,
+ 0x75, 0xD1, 0xD7, 0x87, 0xB0, 0x9F, 0x07, 0x57, 0x97, 0xDA, 0x89, 0xF5,
+ 0x7E, 0xC8, 0xC0, 0xFF,
+ /* a */
+ 0x68, 0xA5, 0xE6, 0x2C, 0xA9, 0xCE, 0x6C, 0x1C, 0x29, 0x98, 0x03, 0xA6,
+ 0xC1, 0x53, 0x0B, 0x51, 0x4E, 0x18, 0x2A, 0xD8, 0xB0, 0x04, 0x2A, 0x59,
+ 0xCA, 0xD2, 0x9F, 0x43,
+ /* b */
+ 0x25, 0x80, 0xF6, 0x3C, 0xCF, 0xE4, 0x41, 0x38, 0x87, 0x07, 0x13, 0xB1,
+ 0xA9, 0x23, 0x69, 0xE3, 0x3E, 0x21, 0x35, 0xD2, 0x66, 0xDB, 0xB3, 0x72,
+ 0x38, 0x6C, 0x40, 0x0B,
+ /* x */
+ 0x0D, 0x90, 0x29, 0xAD, 0x2C, 0x7E, 0x5C, 0xF4, 0x34, 0x08, 0x23, 0xB2,
+ 0xA8, 0x7D, 0xC6, 0x8C, 0x9E, 0x4C, 0xE3, 0x17, 0x4C, 0x1E, 0x6E, 0xFD,
+ 0xEE, 0x12, 0xC0, 0x7D,
+ /* y */
+ 0x58, 0xAA, 0x56, 0xF7, 0x72, 0xC0, 0x72, 0x6F, 0x24, 0xC6, 0xB8, 0x9E,
+ 0x4E, 0xCD, 0xAC, 0x24, 0x35, 0x4B, 0x9E, 0x99, 0xCA, 0xA3, 0xF6, 0xD3,
+ 0x76, 0x14, 0x02, 0xCD,
+ /* order */
+ 0xD7, 0xC1, 0x34, 0xAA, 0x26, 0x43, 0x66, 0x86, 0x2A, 0x18, 0x30, 0x25,
+ 0x75, 0xD0, 0xFB, 0x98, 0xD1, 0x16, 0xBC, 0x4B, 0x6D, 0xDE, 0xBC, 0xA3,
+ 0xA5, 0xA7, 0x93, 0x9F
+ }
+};
+
+static const struct {
+ EC_CURVE_DATA h;
+ unsigned char data[0 + 28 * 6];
+} _EC_brainpoolP224t1 = {
+ {
+ NID_X9_62_prime_field, 0, 28, 1
+ },
+ {
+ /* no seed */
+ /* p */
+ 0xD7, 0xC1, 0x34, 0xAA, 0x26, 0x43, 0x66, 0x86, 0x2A, 0x18, 0x30, 0x25,
+ 0x75, 0xD1, 0xD7, 0x87, 0xB0, 0x9F, 0x07, 0x57, 0x97, 0xDA, 0x89, 0xF5,
+ 0x7E, 0xC8, 0xC0, 0xFF,
+ /* a */
+ 0xD7, 0xC1, 0x34, 0xAA, 0x26, 0x43, 0x66, 0x86, 0x2A, 0x18, 0x30, 0x25,
+ 0x75, 0xD1, 0xD7, 0x87, 0xB0, 0x9F, 0x07, 0x57, 0x97, 0xDA, 0x89, 0xF5,
+ 0x7E, 0xC8, 0xC0, 0xFC,
+ /* b */
+ 0x4B, 0x33, 0x7D, 0x93, 0x41, 0x04, 0xCD, 0x7B, 0xEF, 0x27, 0x1B, 0xF6,
+ 0x0C, 0xED, 0x1E, 0xD2, 0x0D, 0xA1, 0x4C, 0x08, 0xB3, 0xBB, 0x64, 0xF1,
+ 0x8A, 0x60, 0x88, 0x8D,
+ /* x */
+ 0x6A, 0xB1, 0xE3, 0x44, 0xCE, 0x25, 0xFF, 0x38, 0x96, 0x42, 0x4E, 0x7F,
+ 0xFE, 0x14, 0x76, 0x2E, 0xCB, 0x49, 0xF8, 0x92, 0x8A, 0xC0, 0xC7, 0x60,
+ 0x29, 0xB4, 0xD5, 0x80,
+ /* y */
+ 0x03, 0x74, 0xE9, 0xF5, 0x14, 0x3E, 0x56, 0x8C, 0xD2, 0x3F, 0x3F, 0x4D,
+ 0x7C, 0x0D, 0x4B, 0x1E, 0x41, 0xC8, 0xCC, 0x0D, 0x1C, 0x6A, 0xBD, 0x5F,
+ 0x1A, 0x46, 0xDB, 0x4C,
+ /* order */
+ 0xD7, 0xC1, 0x34, 0xAA, 0x26, 0x43, 0x66, 0x86, 0x2A, 0x18, 0x30, 0x25,
+ 0x75, 0xD0, 0xFB, 0x98, 0xD1, 0x16, 0xBC, 0x4B, 0x6D, 0xDE, 0xBC, 0xA3,
+ 0xA5, 0xA7, 0x93, 0x9F
+ }
+};
+
+static const struct {
+ EC_CURVE_DATA h;
+ unsigned char data[0 + 32 * 6];
+} _EC_brainpoolP256r1 = {
+ {
+ NID_X9_62_prime_field, 0, 32, 1
+ },
+ {
+ /* no seed */
+ /* p */
+ 0xA9, 0xFB, 0x57, 0xDB, 0xA1, 0xEE, 0xA9, 0xBC, 0x3E, 0x66, 0x0A, 0x90,
+ 0x9D, 0x83, 0x8D, 0x72, 0x6E, 0x3B, 0xF6, 0x23, 0xD5, 0x26, 0x20, 0x28,
+ 0x20, 0x13, 0x48, 0x1D, 0x1F, 0x6E, 0x53, 0x77,
+ /* a */
+ 0x7D, 0x5A, 0x09, 0x75, 0xFC, 0x2C, 0x30, 0x57, 0xEE, 0xF6, 0x75, 0x30,
+ 0x41, 0x7A, 0xFF, 0xE7, 0xFB, 0x80, 0x55, 0xC1, 0x26, 0xDC, 0x5C, 0x6C,
+ 0xE9, 0x4A, 0x4B, 0x44, 0xF3, 0x30, 0xB5, 0xD9,
+ /* b */
+ 0x26, 0xDC, 0x5C, 0x6C, 0xE9, 0x4A, 0x4B, 0x44, 0xF3, 0x30, 0xB5, 0xD9,
+ 0xBB, 0xD7, 0x7C, 0xBF, 0x95, 0x84, 0x16, 0x29, 0x5C, 0xF7, 0xE1, 0xCE,
+ 0x6B, 0xCC, 0xDC, 0x18, 0xFF, 0x8C, 0x07, 0xB6,
+ /* x */
+ 0x8B, 0xD2, 0xAE, 0xB9, 0xCB, 0x7E, 0x57, 0xCB, 0x2C, 0x4B, 0x48, 0x2F,
+ 0xFC, 0x81, 0xB7, 0xAF, 0xB9, 0xDE, 0x27, 0xE1, 0xE3, 0xBD, 0x23, 0xC2,
+ 0x3A, 0x44, 0x53, 0xBD, 0x9A, 0xCE, 0x32, 0x62,
+ /* y */
+ 0x54, 0x7E, 0xF8, 0x35, 0xC3, 0xDA, 0xC4, 0xFD, 0x97, 0xF8, 0x46, 0x1A,
+ 0x14, 0x61, 0x1D, 0xC9, 0xC2, 0x77, 0x45, 0x13, 0x2D, 0xED, 0x8E, 0x54,
+ 0x5C, 0x1D, 0x54, 0xC7, 0x2F, 0x04, 0x69, 0x97,
+ /* order */
+ 0xA9, 0xFB, 0x57, 0xDB, 0xA1, 0xEE, 0xA9, 0xBC, 0x3E, 0x66, 0x0A, 0x90,
+ 0x9D, 0x83, 0x8D, 0x71, 0x8C, 0x39, 0x7A, 0xA3, 0xB5, 0x61, 0xA6, 0xF7,
+ 0x90, 0x1E, 0x0E, 0x82, 0x97, 0x48, 0x56, 0xA7
+ }
+};
+
+static const struct {
+ EC_CURVE_DATA h;
+ unsigned char data[0 + 32 * 6];
+} _EC_brainpoolP256t1 = {
+ {
+ NID_X9_62_prime_field, 0, 32, 1
+ },
+ {
+ /* no seed */
+ /* p */
+ 0xA9, 0xFB, 0x57, 0xDB, 0xA1, 0xEE, 0xA9, 0xBC, 0x3E, 0x66, 0x0A, 0x90,
+ 0x9D, 0x83, 0x8D, 0x72, 0x6E, 0x3B, 0xF6, 0x23, 0xD5, 0x26, 0x20, 0x28,
+ 0x20, 0x13, 0x48, 0x1D, 0x1F, 0x6E, 0x53, 0x77,
+ /* a */
+ 0xA9, 0xFB, 0x57, 0xDB, 0xA1, 0xEE, 0xA9, 0xBC, 0x3E, 0x66, 0x0A, 0x90,
+ 0x9D, 0x83, 0x8D, 0x72, 0x6E, 0x3B, 0xF6, 0x23, 0xD5, 0x26, 0x20, 0x28,
+ 0x20, 0x13, 0x48, 0x1D, 0x1F, 0x6E, 0x53, 0x74,
+ /* b */
+ 0x66, 0x2C, 0x61, 0xC4, 0x30, 0xD8, 0x4E, 0xA4, 0xFE, 0x66, 0xA7, 0x73,
+ 0x3D, 0x0B, 0x76, 0xB7, 0xBF, 0x93, 0xEB, 0xC4, 0xAF, 0x2F, 0x49, 0x25,
+ 0x6A, 0xE5, 0x81, 0x01, 0xFE, 0xE9, 0x2B, 0x04,
+ /* x */
+ 0xA3, 0xE8, 0xEB, 0x3C, 0xC1, 0xCF, 0xE7, 0xB7, 0x73, 0x22, 0x13, 0xB2,
+ 0x3A, 0x65, 0x61, 0x49, 0xAF, 0xA1, 0x42, 0xC4, 0x7A, 0xAF, 0xBC, 0x2B,
+ 0x79, 0xA1, 0x91, 0x56, 0x2E, 0x13, 0x05, 0xF4,
+ /* y */
+ 0x2D, 0x99, 0x6C, 0x82, 0x34, 0x39, 0xC5, 0x6D, 0x7F, 0x7B, 0x22, 0xE1,
+ 0x46, 0x44, 0x41, 0x7E, 0x69, 0xBC, 0xB6, 0xDE, 0x39, 0xD0, 0x27, 0x00,
+ 0x1D, 0xAB, 0xE8, 0xF3, 0x5B, 0x25, 0xC9, 0xBE,
+ /* order */
+ 0xA9, 0xFB, 0x57, 0xDB, 0xA1, 0xEE, 0xA9, 0xBC, 0x3E, 0x66, 0x0A, 0x90,
+ 0x9D, 0x83, 0x8D, 0x71, 0x8C, 0x39, 0x7A, 0xA3, 0xB5, 0x61, 0xA6, 0xF7,
+ 0x90, 0x1E, 0x0E, 0x82, 0x97, 0x48, 0x56, 0xA7
+ }
+};
+
+static const struct {
+ EC_CURVE_DATA h;
+ unsigned char data[0 + 40 * 6];
+} _EC_brainpoolP320r1 = {
+ {
+ NID_X9_62_prime_field, 0, 40, 1
+ },
+ {
+ /* no seed */
+ /* p */
+ 0xD3, 0x5E, 0x47, 0x20, 0x36, 0xBC, 0x4F, 0xB7, 0xE1, 0x3C, 0x78, 0x5E,
+ 0xD2, 0x01, 0xE0, 0x65, 0xF9, 0x8F, 0xCF, 0xA6, 0xF6, 0xF4, 0x0D, 0xEF,
+ 0x4F, 0x92, 0xB9, 0xEC, 0x78, 0x93, 0xEC, 0x28, 0xFC, 0xD4, 0x12, 0xB1,
+ 0xF1, 0xB3, 0x2E, 0x27,
+ /* a */
+ 0x3E, 0xE3, 0x0B, 0x56, 0x8F, 0xBA, 0xB0, 0xF8, 0x83, 0xCC, 0xEB, 0xD4,
+ 0x6D, 0x3F, 0x3B, 0xB8, 0xA2, 0xA7, 0x35, 0x13, 0xF5, 0xEB, 0x79, 0xDA,
+ 0x66, 0x19, 0x0E, 0xB0, 0x85, 0xFF, 0xA9, 0xF4, 0x92, 0xF3, 0x75, 0xA9,
+ 0x7D, 0x86, 0x0E, 0xB4,
+ /* b */
+ 0x52, 0x08, 0x83, 0x94, 0x9D, 0xFD, 0xBC, 0x42, 0xD3, 0xAD, 0x19, 0x86,
+ 0x40, 0x68, 0x8A, 0x6F, 0xE1, 0x3F, 0x41, 0x34, 0x95, 0x54, 0xB4, 0x9A,
+ 0xCC, 0x31, 0xDC, 0xCD, 0x88, 0x45, 0x39, 0x81, 0x6F, 0x5E, 0xB4, 0xAC,
+ 0x8F, 0xB1, 0xF1, 0xA6,
+ /* x */
+ 0x43, 0xBD, 0x7E, 0x9A, 0xFB, 0x53, 0xD8, 0xB8, 0x52, 0x89, 0xBC, 0xC4,
+ 0x8E, 0xE5, 0xBF, 0xE6, 0xF2, 0x01, 0x37, 0xD1, 0x0A, 0x08, 0x7E, 0xB6,
+ 0xE7, 0x87, 0x1E, 0x2A, 0x10, 0xA5, 0x99, 0xC7, 0x10, 0xAF, 0x8D, 0x0D,
+ 0x39, 0xE2, 0x06, 0x11,
+ /* y */
+ 0x14, 0xFD, 0xD0, 0x55, 0x45, 0xEC, 0x1C, 0xC8, 0xAB, 0x40, 0x93, 0x24,
+ 0x7F, 0x77, 0x27, 0x5E, 0x07, 0x43, 0xFF, 0xED, 0x11, 0x71, 0x82, 0xEA,
+ 0xA9, 0xC7, 0x78, 0x77, 0xAA, 0xAC, 0x6A, 0xC7, 0xD3, 0x52, 0x45, 0xD1,
+ 0x69, 0x2E, 0x8E, 0xE1,
+ /* order */
+ 0xD3, 0x5E, 0x47, 0x20, 0x36, 0xBC, 0x4F, 0xB7, 0xE1, 0x3C, 0x78, 0x5E,
+ 0xD2, 0x01, 0xE0, 0x65, 0xF9, 0x8F, 0xCF, 0xA5, 0xB6, 0x8F, 0x12, 0xA3,
+ 0x2D, 0x48, 0x2E, 0xC7, 0xEE, 0x86, 0x58, 0xE9, 0x86, 0x91, 0x55, 0x5B,
+ 0x44, 0xC5, 0x93, 0x11
+ }
+};
+
+static const struct {
+ EC_CURVE_DATA h;
+ unsigned char data[0 + 40 * 6];
+} _EC_brainpoolP320t1 = {
+ {
+ NID_X9_62_prime_field, 0, 40, 1
+ },
+ {
+ /* no seed */
+ /* p */
+ 0xD3, 0x5E, 0x47, 0x20, 0x36, 0xBC, 0x4F, 0xB7, 0xE1, 0x3C, 0x78, 0x5E,
+ 0xD2, 0x01, 0xE0, 0x65, 0xF9, 0x8F, 0xCF, 0xA6, 0xF6, 0xF4, 0x0D, 0xEF,
+ 0x4F, 0x92, 0xB9, 0xEC, 0x78, 0x93, 0xEC, 0x28, 0xFC, 0xD4, 0x12, 0xB1,
+ 0xF1, 0xB3, 0x2E, 0x27,
+ /* a */
+ 0xD3, 0x5E, 0x47, 0x20, 0x36, 0xBC, 0x4F, 0xB7, 0xE1, 0x3C, 0x78, 0x5E,
+ 0xD2, 0x01, 0xE0, 0x65, 0xF9, 0x8F, 0xCF, 0xA6, 0xF6, 0xF4, 0x0D, 0xEF,
+ 0x4F, 0x92, 0xB9, 0xEC, 0x78, 0x93, 0xEC, 0x28, 0xFC, 0xD4, 0x12, 0xB1,
+ 0xF1, 0xB3, 0x2E, 0x24,
+ /* b */
+ 0xA7, 0xF5, 0x61, 0xE0, 0x38, 0xEB, 0x1E, 0xD5, 0x60, 0xB3, 0xD1, 0x47,
+ 0xDB, 0x78, 0x20, 0x13, 0x06, 0x4C, 0x19, 0xF2, 0x7E, 0xD2, 0x7C, 0x67,
+ 0x80, 0xAA, 0xF7, 0x7F, 0xB8, 0xA5, 0x47, 0xCE, 0xB5, 0xB4, 0xFE, 0xF4,
+ 0x22, 0x34, 0x03, 0x53,
+ /* x */
+ 0x92, 0x5B, 0xE9, 0xFB, 0x01, 0xAF, 0xC6, 0xFB, 0x4D, 0x3E, 0x7D, 0x49,
+ 0x90, 0x01, 0x0F, 0x81, 0x34, 0x08, 0xAB, 0x10, 0x6C, 0x4F, 0x09, 0xCB,
+ 0x7E, 0xE0, 0x78, 0x68, 0xCC, 0x13, 0x6F, 0xFF, 0x33, 0x57, 0xF6, 0x24,
+ 0xA2, 0x1B, 0xED, 0x52,
+ /* y */
+ 0x63, 0xBA, 0x3A, 0x7A, 0x27, 0x48, 0x3E, 0xBF, 0x66, 0x71, 0xDB, 0xEF,
+ 0x7A, 0xBB, 0x30, 0xEB, 0xEE, 0x08, 0x4E, 0x58, 0xA0, 0xB0, 0x77, 0xAD,
+ 0x42, 0xA5, 0xA0, 0x98, 0x9D, 0x1E, 0xE7, 0x1B, 0x1B, 0x9B, 0xC0, 0x45,
+ 0x5F, 0xB0, 0xD2, 0xC3,
+ /* order */
+ 0xD3, 0x5E, 0x47, 0x20, 0x36, 0xBC, 0x4F, 0xB7, 0xE1, 0x3C, 0x78, 0x5E,
+ 0xD2, 0x01, 0xE0, 0x65, 0xF9, 0x8F, 0xCF, 0xA5, 0xB6, 0x8F, 0x12, 0xA3,
+ 0x2D, 0x48, 0x2E, 0xC7, 0xEE, 0x86, 0x58, 0xE9, 0x86, 0x91, 0x55, 0x5B,
+ 0x44, 0xC5, 0x93, 0x11
+ }
+};
+
+static const struct {
+ EC_CURVE_DATA h;
+ unsigned char data[0 + 48 * 6];
+} _EC_brainpoolP384r1 = {
+ {
+ NID_X9_62_prime_field, 0, 48, 1
+ },
+ {
+ /* no seed */
+ /* p */
+ 0x8C, 0xB9, 0x1E, 0x82, 0xA3, 0x38, 0x6D, 0x28, 0x0F, 0x5D, 0x6F, 0x7E,
+ 0x50, 0xE6, 0x41, 0xDF, 0x15, 0x2F, 0x71, 0x09, 0xED, 0x54, 0x56, 0xB4,
+ 0x12, 0xB1, 0xDA, 0x19, 0x7F, 0xB7, 0x11, 0x23, 0xAC, 0xD3, 0xA7, 0x29,
+ 0x90, 0x1D, 0x1A, 0x71, 0x87, 0x47, 0x00, 0x13, 0x31, 0x07, 0xEC, 0x53,
+ /* a */
+ 0x7B, 0xC3, 0x82, 0xC6, 0x3D, 0x8C, 0x15, 0x0C, 0x3C, 0x72, 0x08, 0x0A,
+ 0xCE, 0x05, 0xAF, 0xA0, 0xC2, 0xBE, 0xA2, 0x8E, 0x4F, 0xB2, 0x27, 0x87,
+ 0x13, 0x91, 0x65, 0xEF, 0xBA, 0x91, 0xF9, 0x0F, 0x8A, 0xA5, 0x81, 0x4A,
+ 0x50, 0x3A, 0xD4, 0xEB, 0x04, 0xA8, 0xC7, 0xDD, 0x22, 0xCE, 0x28, 0x26,
+ /* b */
+ 0x04, 0xA8, 0xC7, 0xDD, 0x22, 0xCE, 0x28, 0x26, 0x8B, 0x39, 0xB5, 0x54,
+ 0x16, 0xF0, 0x44, 0x7C, 0x2F, 0xB7, 0x7D, 0xE1, 0x07, 0xDC, 0xD2, 0xA6,
+ 0x2E, 0x88, 0x0E, 0xA5, 0x3E, 0xEB, 0x62, 0xD5, 0x7C, 0xB4, 0x39, 0x02,
+ 0x95, 0xDB, 0xC9, 0x94, 0x3A, 0xB7, 0x86, 0x96, 0xFA, 0x50, 0x4C, 0x11,
+ /* x */
+ 0x1D, 0x1C, 0x64, 0xF0, 0x68, 0xCF, 0x45, 0xFF, 0xA2, 0xA6, 0x3A, 0x81,
+ 0xB7, 0xC1, 0x3F, 0x6B, 0x88, 0x47, 0xA3, 0xE7, 0x7E, 0xF1, 0x4F, 0xE3,
+ 0xDB, 0x7F, 0xCA, 0xFE, 0x0C, 0xBD, 0x10, 0xE8, 0xE8, 0x26, 0xE0, 0x34,
+ 0x36, 0xD6, 0x46, 0xAA, 0xEF, 0x87, 0xB2, 0xE2, 0x47, 0xD4, 0xAF, 0x1E,
+ /* y */
+ 0x8A, 0xBE, 0x1D, 0x75, 0x20, 0xF9, 0xC2, 0xA4, 0x5C, 0xB1, 0xEB, 0x8E,
+ 0x95, 0xCF, 0xD5, 0x52, 0x62, 0xB7, 0x0B, 0x29, 0xFE, 0xEC, 0x58, 0x64,
+ 0xE1, 0x9C, 0x05, 0x4F, 0xF9, 0x91, 0x29, 0x28, 0x0E, 0x46, 0x46, 0x21,
+ 0x77, 0x91, 0x81, 0x11, 0x42, 0x82, 0x03, 0x41, 0x26, 0x3C, 0x53, 0x15,
+ /* order */
+ 0x8C, 0xB9, 0x1E, 0x82, 0xA3, 0x38, 0x6D, 0x28, 0x0F, 0x5D, 0x6F, 0x7E,
+ 0x50, 0xE6, 0x41, 0xDF, 0x15, 0x2F, 0x71, 0x09, 0xED, 0x54, 0x56, 0xB3,
+ 0x1F, 0x16, 0x6E, 0x6C, 0xAC, 0x04, 0x25, 0xA7, 0xCF, 0x3A, 0xB6, 0xAF,
+ 0x6B, 0x7F, 0xC3, 0x10, 0x3B, 0x88, 0x32, 0x02, 0xE9, 0x04, 0x65, 0x65
+ }
+};
+
+static const struct {
+ EC_CURVE_DATA h;
+ unsigned char data[0 + 48 * 6];
+} _EC_brainpoolP384t1 = {
+ {
+ NID_X9_62_prime_field, 0, 48, 1
+ },
+ {
+ /* no seed */
+ /* p */
+ 0x8C, 0xB9, 0x1E, 0x82, 0xA3, 0x38, 0x6D, 0x28, 0x0F, 0x5D, 0x6F, 0x7E,
+ 0x50, 0xE6, 0x41, 0xDF, 0x15, 0x2F, 0x71, 0x09, 0xED, 0x54, 0x56, 0xB4,
+ 0x12, 0xB1, 0xDA, 0x19, 0x7F, 0xB7, 0x11, 0x23, 0xAC, 0xD3, 0xA7, 0x29,
+ 0x90, 0x1D, 0x1A, 0x71, 0x87, 0x47, 0x00, 0x13, 0x31, 0x07, 0xEC, 0x53,
+ /* a */
+ 0x8C, 0xB9, 0x1E, 0x82, 0xA3, 0x38, 0x6D, 0x28, 0x0F, 0x5D, 0x6F, 0x7E,
+ 0x50, 0xE6, 0x41, 0xDF, 0x15, 0x2F, 0x71, 0x09, 0xED, 0x54, 0x56, 0xB4,
+ 0x12, 0xB1, 0xDA, 0x19, 0x7F, 0xB7, 0x11, 0x23, 0xAC, 0xD3, 0xA7, 0x29,
+ 0x90, 0x1D, 0x1A, 0x71, 0x87, 0x47, 0x00, 0x13, 0x31, 0x07, 0xEC, 0x50,
+ /* b */
+ 0x7F, 0x51, 0x9E, 0xAD, 0xA7, 0xBD, 0xA8, 0x1B, 0xD8, 0x26, 0xDB, 0xA6,
+ 0x47, 0x91, 0x0F, 0x8C, 0x4B, 0x93, 0x46, 0xED, 0x8C, 0xCD, 0xC6, 0x4E,
+ 0x4B, 0x1A, 0xBD, 0x11, 0x75, 0x6D, 0xCE, 0x1D, 0x20, 0x74, 0xAA, 0x26,
+ 0x3B, 0x88, 0x80, 0x5C, 0xED, 0x70, 0x35, 0x5A, 0x33, 0xB4, 0x71, 0xEE,
+ /* x */
+ 0x18, 0xDE, 0x98, 0xB0, 0x2D, 0xB9, 0xA3, 0x06, 0xF2, 0xAF, 0xCD, 0x72,
+ 0x35, 0xF7, 0x2A, 0x81, 0x9B, 0x80, 0xAB, 0x12, 0xEB, 0xD6, 0x53, 0x17,
+ 0x24, 0x76, 0xFE, 0xCD, 0x46, 0x2A, 0xAB, 0xFF, 0xC4, 0xFF, 0x19, 0x1B,
+ 0x94, 0x6A, 0x5F, 0x54, 0xD8, 0xD0, 0xAA, 0x2F, 0x41, 0x88, 0x08, 0xCC,
+ /* y */
+ 0x25, 0xAB, 0x05, 0x69, 0x62, 0xD3, 0x06, 0x51, 0xA1, 0x14, 0xAF, 0xD2,
+ 0x75, 0x5A, 0xD3, 0x36, 0x74, 0x7F, 0x93, 0x47, 0x5B, 0x7A, 0x1F, 0xCA,
+ 0x3B, 0x88, 0xF2, 0xB6, 0xA2, 0x08, 0xCC, 0xFE, 0x46, 0x94, 0x08, 0x58,
+ 0x4D, 0xC2, 0xB2, 0x91, 0x26, 0x75, 0xBF, 0x5B, 0x9E, 0x58, 0x29, 0x28,
+ /* order */
+ 0x8C, 0xB9, 0x1E, 0x82, 0xA3, 0x38, 0x6D, 0x28, 0x0F, 0x5D, 0x6F, 0x7E,
+ 0x50, 0xE6, 0x41, 0xDF, 0x15, 0x2F, 0x71, 0x09, 0xED, 0x54, 0x56, 0xB3,
+ 0x1F, 0x16, 0x6E, 0x6C, 0xAC, 0x04, 0x25, 0xA7, 0xCF, 0x3A, 0xB6, 0xAF,
+ 0x6B, 0x7F, 0xC3, 0x10, 0x3B, 0x88, 0x32, 0x02, 0xE9, 0x04, 0x65, 0x65
+ }
+};
+
+static const struct {
+ EC_CURVE_DATA h;
+ unsigned char data[0 + 64 * 6];
+} _EC_brainpoolP512r1 = {
+ {
+ NID_X9_62_prime_field, 0, 64, 1
+ },
+ {
+ /* no seed */
+ /* p */
+ 0xAA, 0xDD, 0x9D, 0xB8, 0xDB, 0xE9, 0xC4, 0x8B, 0x3F, 0xD4, 0xE6, 0xAE,
+ 0x33, 0xC9, 0xFC, 0x07, 0xCB, 0x30, 0x8D, 0xB3, 0xB3, 0xC9, 0xD2, 0x0E,
+ 0xD6, 0x63, 0x9C, 0xCA, 0x70, 0x33, 0x08, 0x71, 0x7D, 0x4D, 0x9B, 0x00,
+ 0x9B, 0xC6, 0x68, 0x42, 0xAE, 0xCD, 0xA1, 0x2A, 0xE6, 0xA3, 0x80, 0xE6,
+ 0x28, 0x81, 0xFF, 0x2F, 0x2D, 0x82, 0xC6, 0x85, 0x28, 0xAA, 0x60, 0x56,
+ 0x58, 0x3A, 0x48, 0xF3,
+ /* a */
+ 0x78, 0x30, 0xA3, 0x31, 0x8B, 0x60, 0x3B, 0x89, 0xE2, 0x32, 0x71, 0x45,
+ 0xAC, 0x23, 0x4C, 0xC5, 0x94, 0xCB, 0xDD, 0x8D, 0x3D, 0xF9, 0x16, 0x10,
+ 0xA8, 0x34, 0x41, 0xCA, 0xEA, 0x98, 0x63, 0xBC, 0x2D, 0xED, 0x5D, 0x5A,
+ 0xA8, 0x25, 0x3A, 0xA1, 0x0A, 0x2E, 0xF1, 0xC9, 0x8B, 0x9A, 0xC8, 0xB5,
+ 0x7F, 0x11, 0x17, 0xA7, 0x2B, 0xF2, 0xC7, 0xB9, 0xE7, 0xC1, 0xAC, 0x4D,
+ 0x77, 0xFC, 0x94, 0xCA,
+ /* b */
+ 0x3D, 0xF9, 0x16, 0x10, 0xA8, 0x34, 0x41, 0xCA, 0xEA, 0x98, 0x63, 0xBC,
+ 0x2D, 0xED, 0x5D, 0x5A, 0xA8, 0x25, 0x3A, 0xA1, 0x0A, 0x2E, 0xF1, 0xC9,
+ 0x8B, 0x9A, 0xC8, 0xB5, 0x7F, 0x11, 0x17, 0xA7, 0x2B, 0xF2, 0xC7, 0xB9,
+ 0xE7, 0xC1, 0xAC, 0x4D, 0x77, 0xFC, 0x94, 0xCA, 0xDC, 0x08, 0x3E, 0x67,
+ 0x98, 0x40, 0x50, 0xB7, 0x5E, 0xBA, 0xE5, 0xDD, 0x28, 0x09, 0xBD, 0x63,
+ 0x80, 0x16, 0xF7, 0x23,
+ /* x */
+ 0x81, 0xAE, 0xE4, 0xBD, 0xD8, 0x2E, 0xD9, 0x64, 0x5A, 0x21, 0x32, 0x2E,
+ 0x9C, 0x4C, 0x6A, 0x93, 0x85, 0xED, 0x9F, 0x70, 0xB5, 0xD9, 0x16, 0xC1,
+ 0xB4, 0x3B, 0x62, 0xEE, 0xF4, 0xD0, 0x09, 0x8E, 0xFF, 0x3B, 0x1F, 0x78,
+ 0xE2, 0xD0, 0xD4, 0x8D, 0x50, 0xD1, 0x68, 0x7B, 0x93, 0xB9, 0x7D, 0x5F,
+ 0x7C, 0x6D, 0x50, 0x47, 0x40, 0x6A, 0x5E, 0x68, 0x8B, 0x35, 0x22, 0x09,
+ 0xBC, 0xB9, 0xF8, 0x22,
+ /* y */
+ 0x7D, 0xDE, 0x38, 0x5D, 0x56, 0x63, 0x32, 0xEC, 0xC0, 0xEA, 0xBF, 0xA9,
+ 0xCF, 0x78, 0x22, 0xFD, 0xF2, 0x09, 0xF7, 0x00, 0x24, 0xA5, 0x7B, 0x1A,
+ 0xA0, 0x00, 0xC5, 0x5B, 0x88, 0x1F, 0x81, 0x11, 0xB2, 0xDC, 0xDE, 0x49,
+ 0x4A, 0x5F, 0x48, 0x5E, 0x5B, 0xCA, 0x4B, 0xD8, 0x8A, 0x27, 0x63, 0xAE,
+ 0xD1, 0xCA, 0x2B, 0x2F, 0xA8, 0xF0, 0x54, 0x06, 0x78, 0xCD, 0x1E, 0x0F,
+ 0x3A, 0xD8, 0x08, 0x92,
+ /* order */
+ 0xAA, 0xDD, 0x9D, 0xB8, 0xDB, 0xE9, 0xC4, 0x8B, 0x3F, 0xD4, 0xE6, 0xAE,
+ 0x33, 0xC9, 0xFC, 0x07, 0xCB, 0x30, 0x8D, 0xB3, 0xB3, 0xC9, 0xD2, 0x0E,
+ 0xD6, 0x63, 0x9C, 0xCA, 0x70, 0x33, 0x08, 0x70, 0x55, 0x3E, 0x5C, 0x41,
+ 0x4C, 0xA9, 0x26, 0x19, 0x41, 0x86, 0x61, 0x19, 0x7F, 0xAC, 0x10, 0x47,
+ 0x1D, 0xB1, 0xD3, 0x81, 0x08, 0x5D, 0xDA, 0xDD, 0xB5, 0x87, 0x96, 0x82,
+ 0x9C, 0xA9, 0x00, 0x69
+ }
+};
+
+static const struct {
+ EC_CURVE_DATA h;
+ unsigned char data[0 + 64 * 6];
+} _EC_brainpoolP512t1 = {
+ {
+ NID_X9_62_prime_field, 0, 64, 1
+ },
+ {
+ /* no seed */
+ /* p */
+ 0xAA, 0xDD, 0x9D, 0xB8, 0xDB, 0xE9, 0xC4, 0x8B, 0x3F, 0xD4, 0xE6, 0xAE,
+ 0x33, 0xC9, 0xFC, 0x07, 0xCB, 0x30, 0x8D, 0xB3, 0xB3, 0xC9, 0xD2, 0x0E,
+ 0xD6, 0x63, 0x9C, 0xCA, 0x70, 0x33, 0x08, 0x71, 0x7D, 0x4D, 0x9B, 0x00,
+ 0x9B, 0xC6, 0x68, 0x42, 0xAE, 0xCD, 0xA1, 0x2A, 0xE6, 0xA3, 0x80, 0xE6,
+ 0x28, 0x81, 0xFF, 0x2F, 0x2D, 0x82, 0xC6, 0x85, 0x28, 0xAA, 0x60, 0x56,
+ 0x58, 0x3A, 0x48, 0xF3,
+ /* a */
+ 0xAA, 0xDD, 0x9D, 0xB8, 0xDB, 0xE9, 0xC4, 0x8B, 0x3F, 0xD4, 0xE6, 0xAE,
+ 0x33, 0xC9, 0xFC, 0x07, 0xCB, 0x30, 0x8D, 0xB3, 0xB3, 0xC9, 0xD2, 0x0E,
+ 0xD6, 0x63, 0x9C, 0xCA, 0x70, 0x33, 0x08, 0x71, 0x7D, 0x4D, 0x9B, 0x00,
+ 0x9B, 0xC6, 0x68, 0x42, 0xAE, 0xCD, 0xA1, 0x2A, 0xE6, 0xA3, 0x80, 0xE6,
+ 0x28, 0x81, 0xFF, 0x2F, 0x2D, 0x82, 0xC6, 0x85, 0x28, 0xAA, 0x60, 0x56,
+ 0x58, 0x3A, 0x48, 0xF0,
+ /* b */
+ 0x7C, 0xBB, 0xBC, 0xF9, 0x44, 0x1C, 0xFA, 0xB7, 0x6E, 0x18, 0x90, 0xE4,
+ 0x68, 0x84, 0xEA, 0xE3, 0x21, 0xF7, 0x0C, 0x0B, 0xCB, 0x49, 0x81, 0x52,
+ 0x78, 0x97, 0x50, 0x4B, 0xEC, 0x3E, 0x36, 0xA6, 0x2B, 0xCD, 0xFA, 0x23,
+ 0x04, 0x97, 0x65, 0x40, 0xF6, 0x45, 0x00, 0x85, 0xF2, 0xDA, 0xE1, 0x45,
+ 0xC2, 0x25, 0x53, 0xB4, 0x65, 0x76, 0x36, 0x89, 0x18, 0x0E, 0xA2, 0x57,
+ 0x18, 0x67, 0x42, 0x3E,
+ /* x */
+ 0x64, 0x0E, 0xCE, 0x5C, 0x12, 0x78, 0x87, 0x17, 0xB9, 0xC1, 0xBA, 0x06,
+ 0xCB, 0xC2, 0xA6, 0xFE, 0xBA, 0x85, 0x84, 0x24, 0x58, 0xC5, 0x6D, 0xDE,
+ 0x9D, 0xB1, 0x75, 0x8D, 0x39, 0xC0, 0x31, 0x3D, 0x82, 0xBA, 0x51, 0x73,
+ 0x5C, 0xDB, 0x3E, 0xA4, 0x99, 0xAA, 0x77, 0xA7, 0xD6, 0x94, 0x3A, 0x64,
+ 0xF7, 0xA3, 0xF2, 0x5F, 0xE2, 0x6F, 0x06, 0xB5, 0x1B, 0xAA, 0x26, 0x96,
+ 0xFA, 0x90, 0x35, 0xDA,
+ /* y */
+ 0x5B, 0x53, 0x4B, 0xD5, 0x95, 0xF5, 0xAF, 0x0F, 0xA2, 0xC8, 0x92, 0x37,
+ 0x6C, 0x84, 0xAC, 0xE1, 0xBB, 0x4E, 0x30, 0x19, 0xB7, 0x16, 0x34, 0xC0,
+ 0x11, 0x31, 0x15, 0x9C, 0xAE, 0x03, 0xCE, 0xE9, 0xD9, 0x93, 0x21, 0x84,
+ 0xBE, 0xEF, 0x21, 0x6B, 0xD7, 0x1D, 0xF2, 0xDA, 0xDF, 0x86, 0xA6, 0x27,
+ 0x30, 0x6E, 0xCF, 0xF9, 0x6D, 0xBB, 0x8B, 0xAC, 0xE1, 0x98, 0xB6, 0x1E,
+ 0x00, 0xF8, 0xB3, 0x32,
+ /* order */
+ 0xAA, 0xDD, 0x9D, 0xB8, 0xDB, 0xE9, 0xC4, 0x8B, 0x3F, 0xD4, 0xE6, 0xAE,
+ 0x33, 0xC9, 0xFC, 0x07, 0xCB, 0x30, 0x8D, 0xB3, 0xB3, 0xC9, 0xD2, 0x0E,
+ 0xD6, 0x63, 0x9C, 0xCA, 0x70, 0x33, 0x08, 0x70, 0x55, 0x3E, 0x5C, 0x41,
+ 0x4C, 0xA9, 0x26, 0x19, 0x41, 0x86, 0x61, 0x19, 0x7F, 0xAC, 0x10, 0x47,
+ 0x1D, 0xB1, 0xD3, 0x81, 0x08, 0x5D, 0xDA, 0xDD, 0xB5, 0x87, 0x96, 0x82,
+ 0x9C, 0xA9, 0x00, 0x69
+ }
+};
+
typedef struct _ec_list_element_st {
int nid;
const EC_CURVE_DATA *data;
@@ -2343,13 +2896,15 @@ static const ec_list_element curve_list[] = {
"X9.62 curve over a 239 bit prime field"},
{NID_X9_62_prime239v3, &_EC_X9_62_PRIME_239V3.h, 0,
"X9.62 curve over a 239 bit prime field"},
-#ifndef OPENSSL_NO_EC_NISTP_64_GCC_128
- {NID_X9_62_prime256v1, &_EC_X9_62_PRIME_256V1.h, EC_GFp_nistp256_method,
- "X9.62/SECG curve over a 256 bit prime field"},
+ {NID_X9_62_prime256v1, &_EC_X9_62_PRIME_256V1.h,
+#if defined(ECP_NISTZ256_ASM)
+ EC_GFp_nistz256_method,
+#elif !defined(OPENSSL_NO_EC_NISTP_64_GCC_128)
+ EC_GFp_nistp256_method,
#else
- {NID_X9_62_prime256v1, &_EC_X9_62_PRIME_256V1.h, 0,
- "X9.62/SECG curve over a 256 bit prime field"},
+ 0,
#endif
+ "X9.62/SECG curve over a 256 bit prime field"},
#ifndef OPENSSL_NO_EC2M
/* characteristic two field curves */
/* NIST/SECG curves */
@@ -2460,6 +3015,35 @@ static const ec_list_element curve_list[] = {
"\n\tIPSec/IKE/Oakley curve #4 over a 185 bit binary field.\n"
"\tNot suitable for ECDSA.\n\tQuestionable extension field!"},
#endif
+ /* brainpool curves */
+ {NID_brainpoolP160r1, &_EC_brainpoolP160r1.h, 0,
+ "RFC 5639 curve over a 160 bit prime field"},
+ {NID_brainpoolP160t1, &_EC_brainpoolP160t1.h, 0,
+ "RFC 5639 curve over a 160 bit prime field"},
+ {NID_brainpoolP192r1, &_EC_brainpoolP192r1.h, 0,
+ "RFC 5639 curve over a 192 bit prime field"},
+ {NID_brainpoolP192t1, &_EC_brainpoolP192t1.h, 0,
+ "RFC 5639 curve over a 192 bit prime field"},
+ {NID_brainpoolP224r1, &_EC_brainpoolP224r1.h, 0,
+ "RFC 5639 curve over a 224 bit prime field"},
+ {NID_brainpoolP224t1, &_EC_brainpoolP224t1.h, 0,
+ "RFC 5639 curve over a 224 bit prime field"},
+ {NID_brainpoolP256r1, &_EC_brainpoolP256r1.h, 0,
+ "RFC 5639 curve over a 256 bit prime field"},
+ {NID_brainpoolP256t1, &_EC_brainpoolP256t1.h, 0,
+ "RFC 5639 curve over a 256 bit prime field"},
+ {NID_brainpoolP320r1, &_EC_brainpoolP320r1.h, 0,
+ "RFC 5639 curve over a 320 bit prime field"},
+ {NID_brainpoolP320t1, &_EC_brainpoolP320t1.h, 0,
+ "RFC 5639 curve over a 320 bit prime field"},
+ {NID_brainpoolP384r1, &_EC_brainpoolP384r1.h, 0,
+ "RFC 5639 curve over a 384 bit prime field"},
+ {NID_brainpoolP384t1, &_EC_brainpoolP384t1.h, 0,
+ "RFC 5639 curve over a 384 bit prime field"},
+ {NID_brainpoolP512r1, &_EC_brainpoolP512r1.h, 0,
+ "RFC 5639 curve over a 512 bit prime field"},
+ {NID_brainpoolP512t1, &_EC_brainpoolP512t1.h, 0,
+ "RFC 5639 curve over a 512 bit prime field"},
};
#define curve_list_length (sizeof(curve_list)/sizeof(ec_list_element))
@@ -2578,6 +3162,10 @@ EC_GROUP *EC_GROUP_new_by_curve_name(int nid)
size_t i;
EC_GROUP *ret = NULL;
+#ifdef OPENSSL_FIPS
+ if (FIPS_mode())
+ return FIPS_ec_group_new_by_curve_name(nid);
+#endif
if (nid <= 0)
return NULL;
@@ -2613,3 +3201,48 @@ size_t EC_get_builtin_curves(EC_builtin_curve *r, size_t nitems)
return curve_list_length;
}
+
+/* Functions to translate between common NIST curve names and NIDs */
+
+typedef struct {
+ const char *name; /* NIST Name of curve */
+ int nid; /* Curve NID */
+} EC_NIST_NAME;
+
+static EC_NIST_NAME nist_curves[] = {
+ {"B-163", NID_sect163r2},
+ {"B-233", NID_sect233r1},
+ {"B-283", NID_sect283r1},
+ {"B-409", NID_sect409r1},
+ {"B-571", NID_sect571r1},
+ {"K-163", NID_sect163k1},
+ {"K-233", NID_sect233k1},
+ {"K-283", NID_sect283k1},
+ {"K-409", NID_sect409k1},
+ {"K-571", NID_sect571k1},
+ {"P-192", NID_X9_62_prime192v1},
+ {"P-224", NID_secp224r1},
+ {"P-256", NID_X9_62_prime256v1},
+ {"P-384", NID_secp384r1},
+ {"P-521", NID_secp521r1}
+};
+
+const char *EC_curve_nid2nist(int nid)
+{
+ size_t i;
+ for (i = 0; i < sizeof(nist_curves) / sizeof(EC_NIST_NAME); i++) {
+ if (nist_curves[i].nid == nid)
+ return nist_curves[i].name;
+ }
+ return NULL;
+}
+
+int EC_curve_nist2nid(const char *name)
+{
+ size_t i;
+ for (i = 0; i < sizeof(nist_curves) / sizeof(EC_NIST_NAME); i++) {
+ if (!strcmp(nist_curves[i].name, name))
+ return nist_curves[i].nid;
+ }
+ return NID_undef;
+}
diff --git a/crypto/openssl/crypto/ec/ec_cvt.c b/crypto/openssl/crypto/ec/ec_cvt.c
index 487d727..5a832ba 100644
--- a/crypto/openssl/crypto/ec/ec_cvt.c
+++ b/crypto/openssl/crypto/ec/ec_cvt.c
@@ -72,12 +72,20 @@
#include <openssl/err.h>
#include "ec_lcl.h"
+#ifdef OPENSSL_FIPS
+# include <openssl/fips.h>
+#endif
+
EC_GROUP *EC_GROUP_new_curve_GFp(const BIGNUM *p, const BIGNUM *a,
const BIGNUM *b, BN_CTX *ctx)
{
const EC_METHOD *meth;
EC_GROUP *ret;
+#ifdef OPENSSL_FIPS
+ if (FIPS_mode())
+ return FIPS_ec_group_new_curve_gfp(p, a, b, ctx);
+#endif
#if defined(OPENSSL_BN_ASM_MONT)
/*
* This might appear controversial, but the fact is that generic
@@ -152,6 +160,10 @@ EC_GROUP *EC_GROUP_new_curve_GF2m(const BIGNUM *p, const BIGNUM *a,
const EC_METHOD *meth;
EC_GROUP *ret;
+# ifdef OPENSSL_FIPS
+ if (FIPS_mode())
+ return FIPS_ec_group_new_curve_gf2m(p, a, b, ctx);
+# endif
meth = EC_GF2m_simple_method();
ret = EC_GROUP_new(meth);
diff --git a/crypto/openssl/crypto/ec/ec_err.c b/crypto/openssl/crypto/ec/ec_err.c
index 58eae7c..6fe5baa 100644
--- a/crypto/openssl/crypto/ec/ec_err.c
+++ b/crypto/openssl/crypto/ec/ec_err.c
@@ -1,6 +1,6 @@
/* crypto/ec/ec_err.c */
/* ====================================================================
- * Copyright (c) 1999-2011 The OpenSSL Project. All rights reserved.
+ * Copyright (c) 1999-2015 The OpenSSL Project. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -76,6 +76,8 @@ static ERR_STRING_DATA EC_str_functs[] = {
{ERR_FUNC(EC_F_D2I_ECPKPARAMETERS), "d2i_ECPKParameters"},
{ERR_FUNC(EC_F_D2I_ECPRIVATEKEY), "d2i_ECPrivateKey"},
{ERR_FUNC(EC_F_DO_EC_KEY_PRINT), "DO_EC_KEY_PRINT"},
+ {ERR_FUNC(EC_F_ECDH_CMS_DECRYPT), "ECDH_CMS_DECRYPT"},
+ {ERR_FUNC(EC_F_ECDH_CMS_SET_SHARED_INFO), "ECDH_CMS_SET_SHARED_INFO"},
{ERR_FUNC(EC_F_ECKEY_PARAM2TYPE), "ECKEY_PARAM2TYPE"},
{ERR_FUNC(EC_F_ECKEY_PARAM_DECODE), "ECKEY_PARAM_DECODE"},
{ERR_FUNC(EC_F_ECKEY_PRIV_DECODE), "ECKEY_PRIV_DECODE"},
@@ -87,6 +89,13 @@ static ERR_STRING_DATA EC_str_functs[] = {
{ERR_FUNC(EC_F_ECPARAMETERS_PRINT_FP), "ECParameters_print_fp"},
{ERR_FUNC(EC_F_ECPKPARAMETERS_PRINT), "ECPKParameters_print"},
{ERR_FUNC(EC_F_ECPKPARAMETERS_PRINT_FP), "ECPKParameters_print_fp"},
+ {ERR_FUNC(EC_F_ECP_NISTZ256_GET_AFFINE), "ecp_nistz256_get_affine"},
+ {ERR_FUNC(EC_F_ECP_NISTZ256_MULT_PRECOMPUTE),
+ "ecp_nistz256_mult_precompute"},
+ {ERR_FUNC(EC_F_ECP_NISTZ256_POINTS_MUL), "ecp_nistz256_points_mul"},
+ {ERR_FUNC(EC_F_ECP_NISTZ256_PRE_COMP_NEW), "ecp_nistz256_pre_comp_new"},
+ {ERR_FUNC(EC_F_ECP_NISTZ256_SET_WORDS), "ecp_nistz256_set_words"},
+ {ERR_FUNC(EC_F_ECP_NISTZ256_WINDOWED_MUL), "ecp_nistz256_windowed_mul"},
{ERR_FUNC(EC_F_ECP_NIST_MOD_192), "ECP_NIST_MOD_192"},
{ERR_FUNC(EC_F_ECP_NIST_MOD_224), "ECP_NIST_MOD_224"},
{ERR_FUNC(EC_F_ECP_NIST_MOD_256), "ECP_NIST_MOD_256"},
@@ -271,6 +280,7 @@ static ERR_STRING_DATA EC_str_reasons[] = {
{ERR_REASON(EC_R_INVALID_COMPRESSED_POINT), "invalid compressed point"},
{ERR_REASON(EC_R_INVALID_COMPRESSION_BIT), "invalid compression bit"},
{ERR_REASON(EC_R_INVALID_CURVE), "invalid curve"},
+ {ERR_REASON(EC_R_INVALID_DIGEST), "invalid digest"},
{ERR_REASON(EC_R_INVALID_DIGEST_TYPE), "invalid digest type"},
{ERR_REASON(EC_R_INVALID_ENCODING), "invalid encoding"},
{ERR_REASON(EC_R_INVALID_FIELD), "invalid field"},
@@ -279,6 +289,7 @@ static ERR_STRING_DATA EC_str_reasons[] = {
{ERR_REASON(EC_R_INVALID_PENTANOMIAL_BASIS), "invalid pentanomial basis"},
{ERR_REASON(EC_R_INVALID_PRIVATE_KEY), "invalid private key"},
{ERR_REASON(EC_R_INVALID_TRINOMIAL_BASIS), "invalid trinomial basis"},
+ {ERR_REASON(EC_R_KDF_PARAMETER_ERROR), "kdf parameter error"},
{ERR_REASON(EC_R_KEYS_NOT_SET), "keys not set"},
{ERR_REASON(EC_R_MISSING_PARAMETERS), "missing parameters"},
{ERR_REASON(EC_R_MISSING_PRIVATE_KEY), "missing private key"},
@@ -290,10 +301,12 @@ static ERR_STRING_DATA EC_str_reasons[] = {
{ERR_REASON(EC_R_NO_FIELD_MOD), "no field mod"},
{ERR_REASON(EC_R_NO_PARAMETERS_SET), "no parameters set"},
{ERR_REASON(EC_R_PASSED_NULL_PARAMETER), "passed null parameter"},
+ {ERR_REASON(EC_R_PEER_KEY_ERROR), "peer key error"},
{ERR_REASON(EC_R_PKPARAMETERS2GROUP_FAILURE),
"pkparameters2group failure"},
{ERR_REASON(EC_R_POINT_AT_INFINITY), "point at infinity"},
{ERR_REASON(EC_R_POINT_IS_NOT_ON_CURVE), "point is not on curve"},
+ {ERR_REASON(EC_R_SHARED_INFO_ERROR), "shared info error"},
{ERR_REASON(EC_R_SLOT_FULL), "slot full"},
{ERR_REASON(EC_R_UNDEFINED_GENERATOR), "undefined generator"},
{ERR_REASON(EC_R_UNDEFINED_ORDER), "undefined order"},
diff --git a/crypto/openssl/crypto/ec/ec_lcl.h b/crypto/openssl/crypto/ec/ec_lcl.h
index d79ed1e..969fd14 100644
--- a/crypto/openssl/crypto/ec/ec_lcl.h
+++ b/crypto/openssl/crypto/ec/ec_lcl.h
@@ -212,6 +212,13 @@ struct ec_group_st {
BIGNUM order, cofactor;
int curve_name; /* optional NID for named curve */
int asn1_flag; /* flag to control the asn1 encoding */
+ /*
+ * Kludge: upper bit of ans1_flag is used to denote structure
+ * version. Is set, then last field is present. This is done
+ * for interoperation with FIPS code.
+ */
+#define EC_GROUP_ASN1_FLAG_MASK 0x7fffffff
+#define EC_GROUP_VERSION(p) (p->asn1_flag&~EC_GROUP_ASN1_FLAG_MASK)
point_conversion_form_t asn1_form;
unsigned char *seed; /* optional seed for parameters (appears in
* ASN1) */
@@ -252,6 +259,7 @@ struct ec_group_st {
/* method-specific */
int (*field_mod_func) (BIGNUM *, const BIGNUM *, const BIGNUM *,
BN_CTX *);
+ BN_MONT_CTX *mont_data; /* data for ECDSA inverse */
} /* EC_GROUP */ ;
struct ec_key_st {
@@ -541,3 +549,20 @@ void ec_GFp_nistp_points_make_affine_internal(size_t num, void *point_array,
void ec_GFp_nistp_recode_scalar_bits(unsigned char *sign,
unsigned char *digit, unsigned char in);
#endif
+int ec_precompute_mont_data(EC_GROUP *);
+
+#ifdef ECP_NISTZ256_ASM
+/** Returns GFp methods using montgomery multiplication, with x86-64 optimized
+ * P256. See http://eprint.iacr.org/2013/816.
+ * \return EC_METHOD object
+ */
+const EC_METHOD *EC_GFp_nistz256_method(void);
+#endif
+
+#ifdef OPENSSL_FIPS
+EC_GROUP *FIPS_ec_group_new_curve_gfp(const BIGNUM *p, const BIGNUM *a,
+ const BIGNUM *b, BN_CTX *ctx);
+EC_GROUP *FIPS_ec_group_new_curve_gf2m(const BIGNUM *p, const BIGNUM *a,
+ const BIGNUM *b, BN_CTX *ctx);
+EC_GROUP *FIPS_ec_group_new_by_curve_name(int nid);
+#endif
diff --git a/crypto/openssl/crypto/ec/ec_lib.c b/crypto/openssl/crypto/ec/ec_lib.c
index e227520..3ffa112 100644
--- a/crypto/openssl/crypto/ec/ec_lib.c
+++ b/crypto/openssl/crypto/ec/ec_lib.c
@@ -94,13 +94,14 @@ EC_GROUP *EC_GROUP_new(const EC_METHOD *meth)
ret->meth = meth;
ret->extra_data = NULL;
+ ret->mont_data = NULL;
ret->generator = NULL;
BN_init(&ret->order);
BN_init(&ret->cofactor);
ret->curve_name = 0;
- ret->asn1_flag = 0;
+ ret->asn1_flag = ~EC_GROUP_ASN1_FLAG_MASK;
ret->asn1_form = POINT_CONVERSION_UNCOMPRESSED;
ret->seed = NULL;
@@ -124,6 +125,9 @@ void EC_GROUP_free(EC_GROUP *group)
EC_EX_DATA_free_all_data(&group->extra_data);
+ if (EC_GROUP_VERSION(group) && group->mont_data)
+ BN_MONT_CTX_free(group->mont_data);
+
if (group->generator != NULL)
EC_POINT_free(group->generator);
BN_free(&group->order);
@@ -147,6 +151,9 @@ void EC_GROUP_clear_free(EC_GROUP *group)
EC_EX_DATA_clear_free_all_data(&group->extra_data);
+ if (EC_GROUP_VERSION(group) && group->mont_data)
+ BN_MONT_CTX_free(group->mont_data);
+
if (group->generator != NULL)
EC_POINT_clear_free(group->generator);
BN_clear_free(&group->order);
@@ -189,6 +196,22 @@ int EC_GROUP_copy(EC_GROUP *dest, const EC_GROUP *src)
return 0;
}
+ if (EC_GROUP_VERSION(src) && src->mont_data != NULL) {
+ if (dest->mont_data == NULL) {
+ dest->mont_data = BN_MONT_CTX_new();
+ if (dest->mont_data == NULL)
+ return 0;
+ }
+ if (!BN_MONT_CTX_copy(dest->mont_data, src->mont_data))
+ return 0;
+ } else {
+ /* src->generator == NULL */
+ if (EC_GROUP_VERSION(dest) && dest->mont_data != NULL) {
+ BN_MONT_CTX_free(dest->mont_data);
+ dest->mont_data = NULL;
+ }
+ }
+
if (src->generator != NULL) {
if (dest->generator == NULL) {
dest->generator = EC_POINT_new(dest);
@@ -295,6 +318,13 @@ int EC_GROUP_set_generator(EC_GROUP *group, const EC_POINT *generator,
} else
BN_zero(&group->cofactor);
+ /*
+ * We ignore the return value because some groups have an order with
+ * factors of two, which makes the Montgomery setup fail.
+ * |group->mont_data| will be NULL in this case.
+ */
+ ec_precompute_mont_data(group);
+
return 1;
}
@@ -303,6 +333,11 @@ const EC_POINT *EC_GROUP_get0_generator(const EC_GROUP *group)
return group->generator;
}
+BN_MONT_CTX *EC_GROUP_get_mont_data(const EC_GROUP *group)
+{
+ return EC_GROUP_VERSION(group) ? group->mont_data : NULL;
+}
+
int EC_GROUP_get_order(const EC_GROUP *group, BIGNUM *order, BN_CTX *ctx)
{
if (!BN_copy(order, &group->order))
@@ -332,12 +367,13 @@ int EC_GROUP_get_curve_name(const EC_GROUP *group)
void EC_GROUP_set_asn1_flag(EC_GROUP *group, int flag)
{
- group->asn1_flag = flag;
+ group->asn1_flag &= ~EC_GROUP_ASN1_FLAG_MASK;
+ group->asn1_flag |= flag & EC_GROUP_ASN1_FLAG_MASK;
}
int EC_GROUP_get_asn1_flag(const EC_GROUP *group)
{
- return group->asn1_flag;
+ return group->asn1_flag & EC_GROUP_ASN1_FLAG_MASK;
}
void EC_GROUP_set_point_conversion_form(EC_GROUP *group,
@@ -1057,3 +1093,42 @@ int EC_GROUP_have_precompute_mult(const EC_GROUP *group)
return 0; /* cannot tell whether precomputation has
* been performed */
}
+
+/*
+ * ec_precompute_mont_data sets |group->mont_data| from |group->order| and
+ * returns one on success. On error it returns zero.
+ */
+int ec_precompute_mont_data(EC_GROUP *group)
+{
+ BN_CTX *ctx = BN_CTX_new();
+ int ret = 0;
+
+ if (!EC_GROUP_VERSION(group))
+ goto err;
+
+ if (group->mont_data) {
+ BN_MONT_CTX_free(group->mont_data);
+ group->mont_data = NULL;
+ }
+
+ if (ctx == NULL)
+ goto err;
+
+ group->mont_data = BN_MONT_CTX_new();
+ if (!group->mont_data)
+ goto err;
+
+ if (!BN_MONT_CTX_set(group->mont_data, &group->order, ctx)) {
+ BN_MONT_CTX_free(group->mont_data);
+ group->mont_data = NULL;
+ goto err;
+ }
+
+ ret = 1;
+
+ err:
+
+ if (ctx)
+ BN_CTX_free(ctx);
+ return ret;
+}
diff --git a/crypto/openssl/crypto/ec/ec_pmeth.c b/crypto/openssl/crypto/ec/ec_pmeth.c
index c189d3f..b767490 100644
--- a/crypto/openssl/crypto/ec/ec_pmeth.c
+++ b/crypto/openssl/crypto/ec/ec_pmeth.c
@@ -61,6 +61,7 @@
#include <openssl/asn1t.h>
#include <openssl/x509.h>
#include <openssl/ec.h>
+#include "ec_lcl.h"
#include <openssl/ecdsa.h>
#include <openssl/evp.h>
#include "evp_locl.h"
@@ -72,6 +73,19 @@ typedef struct {
EC_GROUP *gen_group;
/* message digest */
const EVP_MD *md;
+ /* Duplicate key if custom cofactor needed */
+ EC_KEY *co_key;
+ /* Cofactor mode */
+ signed char cofactor_mode;
+ /* KDF (if any) to use for ECDH */
+ char kdf_type;
+ /* Message digest to use for key derivation */
+ const EVP_MD *kdf_md;
+ /* User key material */
+ unsigned char *kdf_ukm;
+ size_t kdf_ukmlen;
+ /* KDF output length */
+ size_t kdf_outlen;
} EC_PKEY_CTX;
static int pkey_ec_init(EVP_PKEY_CTX *ctx)
@@ -83,6 +97,14 @@ static int pkey_ec_init(EVP_PKEY_CTX *ctx)
dctx->gen_group = NULL;
dctx->md = NULL;
+ dctx->cofactor_mode = -1;
+ dctx->co_key = NULL;
+ dctx->kdf_type = EVP_PKEY_ECDH_KDF_NONE;
+ dctx->kdf_md = NULL;
+ dctx->kdf_outlen = 0;
+ dctx->kdf_ukm = NULL;
+ dctx->kdf_ukmlen = 0;
+
ctx->data = dctx;
return 1;
@@ -101,6 +123,22 @@ static int pkey_ec_copy(EVP_PKEY_CTX *dst, EVP_PKEY_CTX *src)
return 0;
}
dctx->md = sctx->md;
+
+ if (sctx->co_key) {
+ dctx->co_key = EC_KEY_dup(sctx->co_key);
+ if (!dctx->co_key)
+ return 0;
+ }
+ dctx->kdf_type = sctx->kdf_type;
+ dctx->kdf_md = sctx->kdf_md;
+ dctx->kdf_outlen = sctx->kdf_outlen;
+ if (sctx->kdf_ukm) {
+ dctx->kdf_ukm = BUF_memdup(sctx->kdf_ukm, sctx->kdf_ukmlen);
+ if (!dctx->kdf_ukm)
+ return 0;
+ } else
+ dctx->kdf_ukm = NULL;
+ dctx->kdf_ukmlen = sctx->kdf_ukmlen;
return 1;
}
@@ -110,6 +148,10 @@ static void pkey_ec_cleanup(EVP_PKEY_CTX *ctx)
if (dctx) {
if (dctx->gen_group)
EC_GROUP_free(dctx->gen_group);
+ if (dctx->co_key)
+ EC_KEY_free(dctx->co_key);
+ if (dctx->kdf_ukm)
+ OPENSSL_free(dctx->kdf_ukm);
OPENSSL_free(dctx);
}
}
@@ -168,18 +210,21 @@ static int pkey_ec_derive(EVP_PKEY_CTX *ctx, unsigned char *key,
int ret;
size_t outlen;
const EC_POINT *pubkey = NULL;
+ EC_KEY *eckey;
+ EC_PKEY_CTX *dctx = ctx->data;
if (!ctx->pkey || !ctx->peerkey) {
ECerr(EC_F_PKEY_EC_DERIVE, EC_R_KEYS_NOT_SET);
return 0;
}
+ eckey = dctx->co_key ? dctx->co_key : ctx->pkey->pkey.ec;
+
if (!key) {
const EC_GROUP *group;
- group = EC_KEY_get0_group(ctx->pkey->pkey.ec);
+ group = EC_KEY_get0_group(eckey);
*keylen = (EC_GROUP_get_degree(group) + 7) / 8;
return 1;
}
-
pubkey = EC_KEY_get0_public_key(ctx->peerkey->pkey.ec);
/*
@@ -189,12 +234,48 @@ static int pkey_ec_derive(EVP_PKEY_CTX *ctx, unsigned char *key,
outlen = *keylen;
- ret = ECDH_compute_key(key, outlen, pubkey, ctx->pkey->pkey.ec, 0);
- if (ret < 0)
- return ret;
+ ret = ECDH_compute_key(key, outlen, pubkey, eckey, 0);
+ if (ret <= 0)
+ return 0;
*keylen = ret;
return 1;
}
+
+static int pkey_ec_kdf_derive(EVP_PKEY_CTX *ctx,
+ unsigned char *key, size_t *keylen)
+{
+ EC_PKEY_CTX *dctx = ctx->data;
+ unsigned char *ktmp = NULL;
+ size_t ktmplen;
+ int rv = 0;
+ if (dctx->kdf_type == EVP_PKEY_ECDH_KDF_NONE)
+ return pkey_ec_derive(ctx, key, keylen);
+ if (!key) {
+ *keylen = dctx->kdf_outlen;
+ return 1;
+ }
+ if (*keylen != dctx->kdf_outlen)
+ return 0;
+ if (!pkey_ec_derive(ctx, NULL, &ktmplen))
+ return 0;
+ ktmp = OPENSSL_malloc(ktmplen);
+ if (!ktmp)
+ return 0;
+ if (!pkey_ec_derive(ctx, ktmp, &ktmplen))
+ goto err;
+ /* Do KDF stuff */
+ if (!ECDH_KDF_X9_62(key, *keylen, ktmp, ktmplen,
+ dctx->kdf_ukm, dctx->kdf_ukmlen, dctx->kdf_md))
+ goto err;
+ rv = 1;
+
+ err:
+ if (ktmp) {
+ OPENSSL_cleanse(ktmp, ktmplen);
+ OPENSSL_free(ktmp);
+ }
+ return rv;
+}
#endif
static int pkey_ec_ctrl(EVP_PKEY_CTX *ctx, int type, int p1, void *p2)
@@ -213,6 +294,90 @@ static int pkey_ec_ctrl(EVP_PKEY_CTX *ctx, int type, int p1, void *p2)
dctx->gen_group = group;
return 1;
+ case EVP_PKEY_CTRL_EC_PARAM_ENC:
+ if (!dctx->gen_group) {
+ ECerr(EC_F_PKEY_EC_CTRL, EC_R_NO_PARAMETERS_SET);
+ return 0;
+ }
+ EC_GROUP_set_asn1_flag(dctx->gen_group, p1);
+ return 1;
+
+#ifndef OPENSSL_NO_ECDH
+ case EVP_PKEY_CTRL_EC_ECDH_COFACTOR:
+ if (p1 == -2) {
+ if (dctx->cofactor_mode != -1)
+ return dctx->cofactor_mode;
+ else {
+ EC_KEY *ec_key = ctx->pkey->pkey.ec;
+ return EC_KEY_get_flags(ec_key) & EC_FLAG_COFACTOR_ECDH ? 1 :
+ 0;
+ }
+ } else if (p1 < -1 || p1 > 1)
+ return -2;
+ dctx->cofactor_mode = p1;
+ if (p1 != -1) {
+ EC_KEY *ec_key = ctx->pkey->pkey.ec;
+ if (!ec_key->group)
+ return -2;
+ /* If cofactor is 1 cofactor mode does nothing */
+ if (BN_is_one(&ec_key->group->cofactor))
+ return 1;
+ if (!dctx->co_key) {
+ dctx->co_key = EC_KEY_dup(ec_key);
+ if (!dctx->co_key)
+ return 0;
+ }
+ if (p1)
+ EC_KEY_set_flags(dctx->co_key, EC_FLAG_COFACTOR_ECDH);
+ else
+ EC_KEY_clear_flags(dctx->co_key, EC_FLAG_COFACTOR_ECDH);
+ } else if (dctx->co_key) {
+ EC_KEY_free(dctx->co_key);
+ dctx->co_key = NULL;
+ }
+ return 1;
+#endif
+
+ case EVP_PKEY_CTRL_EC_KDF_TYPE:
+ if (p1 == -2)
+ return dctx->kdf_type;
+ if (p1 != EVP_PKEY_ECDH_KDF_NONE && p1 != EVP_PKEY_ECDH_KDF_X9_62)
+ return -2;
+ dctx->kdf_type = p1;
+ return 1;
+
+ case EVP_PKEY_CTRL_EC_KDF_MD:
+ dctx->kdf_md = p2;
+ return 1;
+
+ case EVP_PKEY_CTRL_GET_EC_KDF_MD:
+ *(const EVP_MD **)p2 = dctx->kdf_md;
+ return 1;
+
+ case EVP_PKEY_CTRL_EC_KDF_OUTLEN:
+ if (p1 <= 0)
+ return -2;
+ dctx->kdf_outlen = (size_t)p1;
+ return 1;
+
+ case EVP_PKEY_CTRL_GET_EC_KDF_OUTLEN:
+ *(int *)p2 = dctx->kdf_outlen;
+ return 1;
+
+ case EVP_PKEY_CTRL_EC_KDF_UKM:
+ if (dctx->kdf_ukm)
+ OPENSSL_free(dctx->kdf_ukm);
+ dctx->kdf_ukm = p2;
+ if (p2)
+ dctx->kdf_ukmlen = p1;
+ else
+ dctx->kdf_ukmlen = 0;
+ return 1;
+
+ case EVP_PKEY_CTRL_GET_EC_KDF_UKM:
+ *(unsigned char **)p2 = dctx->kdf_ukm;
+ return dctx->kdf_ukmlen;
+
case EVP_PKEY_CTRL_MD:
if (EVP_MD_type((const EVP_MD *)p2) != NID_sha1 &&
EVP_MD_type((const EVP_MD *)p2) != NID_ecdsa_with_SHA1 &&
@@ -226,6 +391,10 @@ static int pkey_ec_ctrl(EVP_PKEY_CTX *ctx, int type, int p1, void *p2)
dctx->md = p2;
return 1;
+ case EVP_PKEY_CTRL_GET_MD:
+ *(const EVP_MD **)p2 = dctx->md;
+ return 1;
+
case EVP_PKEY_CTRL_PEER_KEY:
/* Default behaviour is OK */
case EVP_PKEY_CTRL_DIGESTINIT:
@@ -244,7 +413,9 @@ static int pkey_ec_ctrl_str(EVP_PKEY_CTX *ctx,
{
if (!strcmp(type, "ec_paramgen_curve")) {
int nid;
- nid = OBJ_sn2nid(value);
+ nid = EC_curve_nist2nid(value);
+ if (nid == NID_undef)
+ nid = OBJ_sn2nid(value);
if (nid == NID_undef)
nid = OBJ_ln2nid(value);
if (nid == NID_undef) {
@@ -252,7 +423,28 @@ static int pkey_ec_ctrl_str(EVP_PKEY_CTX *ctx,
return 0;
}
return EVP_PKEY_CTX_set_ec_paramgen_curve_nid(ctx, nid);
+ } else if (!strcmp(type, "ec_param_enc")) {
+ int param_enc;
+ if (!strcmp(value, "explicit"))
+ param_enc = 0;
+ else if (!strcmp(value, "named_curve"))
+ param_enc = OPENSSL_EC_NAMED_CURVE;
+ else
+ return -2;
+ return EVP_PKEY_CTX_set_ec_param_enc(ctx, param_enc);
+ } else if (!strcmp(type, "ecdh_kdf_md")) {
+ const EVP_MD *md;
+ if (!(md = EVP_get_digestbyname(value))) {
+ ECerr(EC_F_PKEY_EC_CTRL_STR, EC_R_INVALID_DIGEST);
+ return 0;
+ }
+ return EVP_PKEY_CTX_set_ecdh_kdf_md(ctx, md);
+ } else if (!strcmp(type, "ecdh_cofactor_mode")) {
+ int co_mode;
+ co_mode = atoi(value);
+ return EVP_PKEY_CTX_set_ecdh_cofactor_mode(ctx, co_mode);
}
+
return -2;
}
@@ -279,7 +471,8 @@ static int pkey_ec_paramgen(EVP_PKEY_CTX *ctx, EVP_PKEY *pkey)
static int pkey_ec_keygen(EVP_PKEY_CTX *ctx, EVP_PKEY *pkey)
{
EC_KEY *ec = NULL;
- if (ctx->pkey == NULL) {
+ EC_PKEY_CTX *dctx = ctx->data;
+ if (ctx->pkey == NULL && dctx->gen_group == NULL) {
ECerr(EC_F_PKEY_EC_KEYGEN, EC_R_NO_PARAMETERS_SET);
return 0;
}
@@ -287,9 +480,14 @@ static int pkey_ec_keygen(EVP_PKEY_CTX *ctx, EVP_PKEY *pkey)
if (!ec)
return 0;
EVP_PKEY_assign_EC_KEY(pkey, ec);
- /* Note: if error return, pkey is freed by parent routine */
- if (!EVP_PKEY_copy_parameters(pkey, ctx->pkey))
- return 0;
+ if (ctx->pkey) {
+ /* Note: if error return, pkey is freed by parent routine */
+ if (!EVP_PKEY_copy_parameters(pkey, ctx->pkey))
+ return 0;
+ } else {
+ if (!EC_KEY_set_group(ec, dctx->gen_group))
+ return 0;
+ }
return EC_KEY_generate_key(pkey->pkey.ec);
}
@@ -322,7 +520,7 @@ const EVP_PKEY_METHOD ec_pkey_meth = {
0,
#ifndef OPENSSL_NO_ECDH
- pkey_ec_derive,
+ pkey_ec_kdf_derive,
#else
0,
#endif
diff --git a/crypto/openssl/crypto/ec/eck_prn.c b/crypto/openssl/crypto/ec/eck_prn.c
index 5ef12ec..df9b37a 100644
--- a/crypto/openssl/crypto/ec/eck_prn.c
+++ b/crypto/openssl/crypto/ec/eck_prn.c
@@ -171,6 +171,7 @@ int ECPKParameters_print(BIO *bp, const EC_GROUP *x, int off)
if (EC_GROUP_get_asn1_flag(x)) {
/* the curve parameter are given by an asn1 OID */
int nid;
+ const char *nname;
if (!BIO_indent(bp, off, 128))
goto err;
@@ -183,6 +184,13 @@ int ECPKParameters_print(BIO *bp, const EC_GROUP *x, int off)
goto err;
if (BIO_printf(bp, "\n") <= 0)
goto err;
+ nname = EC_curve_nid2nist(nid);
+ if (nname) {
+ if (!BIO_indent(bp, off, 128))
+ goto err;
+ if (BIO_printf(bp, "NIST CURVE: %s\n", nname) <= 0)
+ goto err;
+ }
} else {
/* explicit parameters */
int is_char_two = 0;
diff --git a/crypto/openssl/crypto/ec/ecp_nistp521.c b/crypto/openssl/crypto/ec/ecp_nistp521.c
index cc76345..360b9a3 100644
--- a/crypto/openssl/crypto/ec/ecp_nistp521.c
+++ b/crypto/openssl/crypto/ec/ecp_nistp521.c
@@ -1282,11 +1282,11 @@ static void point_add(felem x3, felem y3, felem z3,
felem_scalar128(tmp2, 2);
/* tmp2[i] < 17*2^121 */
felem_diff128(tmp, tmp2);
- /*-
- * tmp[i] < 2^127 - 2^69 + 17*2^122
- * = 2^126 - 2^122 - 2^6 - 2^2 - 1
- * < 2^127
- */
+ /*-
+ * tmp[i] < 2^127 - 2^69 + 17*2^122
+ * = 2^126 - 2^122 - 2^6 - 2^2 - 1
+ * < 2^127
+ */
felem_reduce(y_out, tmp);
copy_conditional(x_out, x2, z1_is_zero);
diff --git a/crypto/openssl/crypto/ec/ecp_nistz256.c b/crypto/openssl/crypto/ec/ecp_nistz256.c
new file mode 100644
index 0000000..ca44d0a
--- /dev/null
+++ b/crypto/openssl/crypto/ec/ecp_nistz256.c
@@ -0,0 +1,1521 @@
+/******************************************************************************
+ * *
+ * Copyright 2014 Intel Corporation *
+ * *
+ * Licensed under the Apache License, Version 2.0 (the "License"); *
+ * you may not use this file except in compliance with the License. *
+ * You may obtain a copy of the License at *
+ * *
+ * http://www.apache.org/licenses/LICENSE-2.0 *
+ * *
+ * Unless required by applicable law or agreed to in writing, software *
+ * distributed under the License is distributed on an "AS IS" BASIS, *
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. *
+ * See the License for the specific language governing permissions and *
+ * limitations under the License. *
+ * *
+ ******************************************************************************
+ * *
+ * Developers and authors: *
+ * Shay Gueron (1, 2), and Vlad Krasnov (1) *
+ * (1) Intel Corporation, Israel Development Center *
+ * (2) University of Haifa *
+ * Reference: *
+ * S.Gueron and V.Krasnov, "Fast Prime Field Elliptic Curve Cryptography with *
+ * 256 Bit Primes" *
+ * *
+ ******************************************************************************/
+
+#include <string.h>
+
+#include <openssl/bn.h>
+#include <openssl/err.h>
+#include <openssl/ec.h>
+#include "cryptlib.h"
+
+#include "ec_lcl.h"
+
+#if BN_BITS2 != 64
+# define TOBN(hi,lo) lo,hi
+#else
+# define TOBN(hi,lo) ((BN_ULONG)hi<<32|lo)
+#endif
+
+#if defined(__GNUC__)
+# define ALIGN32 __attribute((aligned(32)))
+#elif defined(_MSC_VER)
+# define ALIGN32 __declspec(align(32))
+#else
+# define ALIGN32
+#endif
+
+#define ALIGNPTR(p,N) ((unsigned char *)p+N-(size_t)p%N)
+#define P256_LIMBS (256/BN_BITS2)
+
+typedef unsigned short u16;
+
+typedef struct {
+ BN_ULONG X[P256_LIMBS];
+ BN_ULONG Y[P256_LIMBS];
+ BN_ULONG Z[P256_LIMBS];
+} P256_POINT;
+
+typedef struct {
+ BN_ULONG X[P256_LIMBS];
+ BN_ULONG Y[P256_LIMBS];
+} P256_POINT_AFFINE;
+
+typedef P256_POINT_AFFINE PRECOMP256_ROW[64];
+
+/* structure for precomputed multiples of the generator */
+typedef struct ec_pre_comp_st {
+ const EC_GROUP *group; /* Parent EC_GROUP object */
+ size_t w; /* Window size */
+ /*
+ * Constant time access to the X and Y coordinates of the pre-computed,
+ * generator multiplies, in the Montgomery domain. Pre-calculated
+ * multiplies are stored in affine form.
+ */
+ PRECOMP256_ROW *precomp;
+ void *precomp_storage;
+ int references;
+} EC_PRE_COMP;
+
+/* Functions implemented in assembly */
+/* Modular mul by 2: res = 2*a mod P */
+void ecp_nistz256_mul_by_2(BN_ULONG res[P256_LIMBS],
+ const BN_ULONG a[P256_LIMBS]);
+/* Modular div by 2: res = a/2 mod P */
+void ecp_nistz256_div_by_2(BN_ULONG res[P256_LIMBS],
+ const BN_ULONG a[P256_LIMBS]);
+/* Modular mul by 3: res = 3*a mod P */
+void ecp_nistz256_mul_by_3(BN_ULONG res[P256_LIMBS],
+ const BN_ULONG a[P256_LIMBS]);
+/* Modular add: res = a+b mod P */
+void ecp_nistz256_add(BN_ULONG res[P256_LIMBS],
+ const BN_ULONG a[P256_LIMBS],
+ const BN_ULONG b[P256_LIMBS]);
+/* Modular sub: res = a-b mod P */
+void ecp_nistz256_sub(BN_ULONG res[P256_LIMBS],
+ const BN_ULONG a[P256_LIMBS],
+ const BN_ULONG b[P256_LIMBS]);
+/* Modular neg: res = -a mod P */
+void ecp_nistz256_neg(BN_ULONG res[P256_LIMBS], const BN_ULONG a[P256_LIMBS]);
+/* Montgomery mul: res = a*b*2^-256 mod P */
+void ecp_nistz256_mul_mont(BN_ULONG res[P256_LIMBS],
+ const BN_ULONG a[P256_LIMBS],
+ const BN_ULONG b[P256_LIMBS]);
+/* Montgomery sqr: res = a*a*2^-256 mod P */
+void ecp_nistz256_sqr_mont(BN_ULONG res[P256_LIMBS],
+ const BN_ULONG a[P256_LIMBS]);
+/* Convert a number from Montgomery domain, by multiplying with 1 */
+void ecp_nistz256_from_mont(BN_ULONG res[P256_LIMBS],
+ const BN_ULONG in[P256_LIMBS]);
+/* Convert a number to Montgomery domain, by multiplying with 2^512 mod P*/
+void ecp_nistz256_to_mont(BN_ULONG res[P256_LIMBS],
+ const BN_ULONG in[P256_LIMBS]);
+/* Functions that perform constant time access to the precomputed tables */
+void ecp_nistz256_select_w5(P256_POINT * val,
+ const P256_POINT * in_t, int index);
+void ecp_nistz256_select_w7(P256_POINT_AFFINE * val,
+ const P256_POINT_AFFINE * in_t, int index);
+
+/* One converted into the Montgomery domain */
+static const BN_ULONG ONE[P256_LIMBS] = {
+ TOBN(0x00000000, 0x00000001), TOBN(0xffffffff, 0x00000000),
+ TOBN(0xffffffff, 0xffffffff), TOBN(0x00000000, 0xfffffffe)
+};
+
+static void *ecp_nistz256_pre_comp_dup(void *);
+static void ecp_nistz256_pre_comp_free(void *);
+static void ecp_nistz256_pre_comp_clear_free(void *);
+static EC_PRE_COMP *ecp_nistz256_pre_comp_new(const EC_GROUP *group);
+
+/* Precomputed tables for the default generator */
+#include "ecp_nistz256_table.c"
+
+/* Recode window to a signed digit, see ecp_nistputil.c for details */
+static unsigned int _booth_recode_w5(unsigned int in)
+{
+ unsigned int s, d;
+
+ s = ~((in >> 5) - 1);
+ d = (1 << 6) - in - 1;
+ d = (d & s) | (in & ~s);
+ d = (d >> 1) + (d & 1);
+
+ return (d << 1) + (s & 1);
+}
+
+static unsigned int _booth_recode_w7(unsigned int in)
+{
+ unsigned int s, d;
+
+ s = ~((in >> 7) - 1);
+ d = (1 << 8) - in - 1;
+ d = (d & s) | (in & ~s);
+ d = (d >> 1) + (d & 1);
+
+ return (d << 1) + (s & 1);
+}
+
+static void copy_conditional(BN_ULONG dst[P256_LIMBS],
+ const BN_ULONG src[P256_LIMBS], BN_ULONG move)
+{
+ BN_ULONG mask1 = -move;
+ BN_ULONG mask2 = ~mask1;
+
+ dst[0] = (src[0] & mask1) ^ (dst[0] & mask2);
+ dst[1] = (src[1] & mask1) ^ (dst[1] & mask2);
+ dst[2] = (src[2] & mask1) ^ (dst[2] & mask2);
+ dst[3] = (src[3] & mask1) ^ (dst[3] & mask2);
+ if (P256_LIMBS == 8) {
+ dst[4] = (src[4] & mask1) ^ (dst[4] & mask2);
+ dst[5] = (src[5] & mask1) ^ (dst[5] & mask2);
+ dst[6] = (src[6] & mask1) ^ (dst[6] & mask2);
+ dst[7] = (src[7] & mask1) ^ (dst[7] & mask2);
+ }
+}
+
+static BN_ULONG is_zero(BN_ULONG in)
+{
+ in |= (0 - in);
+ in = ~in;
+ in &= BN_MASK2;
+ in >>= BN_BITS2 - 1;
+ return in;
+}
+
+static BN_ULONG is_equal(const BN_ULONG a[P256_LIMBS],
+ const BN_ULONG b[P256_LIMBS])
+{
+ BN_ULONG res;
+
+ res = a[0] ^ b[0];
+ res |= a[1] ^ b[1];
+ res |= a[2] ^ b[2];
+ res |= a[3] ^ b[3];
+ if (P256_LIMBS == 8) {
+ res |= a[4] ^ b[4];
+ res |= a[5] ^ b[5];
+ res |= a[6] ^ b[6];
+ res |= a[7] ^ b[7];
+ }
+
+ return is_zero(res);
+}
+
+static BN_ULONG is_one(const BN_ULONG a[P256_LIMBS])
+{
+ BN_ULONG res;
+
+ res = a[0] ^ ONE[0];
+ res |= a[1] ^ ONE[1];
+ res |= a[2] ^ ONE[2];
+ res |= a[3] ^ ONE[3];
+ if (P256_LIMBS == 8) {
+ res |= a[4] ^ ONE[4];
+ res |= a[5] ^ ONE[5];
+ res |= a[6] ^ ONE[6];
+ }
+
+ return is_zero(res);
+}
+
+static int ecp_nistz256_set_words(BIGNUM *a, BN_ULONG words[P256_LIMBS])
+ {
+ if (bn_wexpand(a, P256_LIMBS) == NULL) {
+ ECerr(EC_F_ECP_NISTZ256_SET_WORDS, ERR_R_MALLOC_FAILURE);
+ return 0;
+ }
+ memcpy(a->d, words, sizeof(BN_ULONG) * P256_LIMBS);
+ a->top = P256_LIMBS;
+ bn_correct_top(a);
+ return 1;
+}
+
+#ifndef ECP_NISTZ256_REFERENCE_IMPLEMENTATION
+void ecp_nistz256_point_double(P256_POINT *r, const P256_POINT *a);
+void ecp_nistz256_point_add(P256_POINT *r,
+ const P256_POINT *a, const P256_POINT *b);
+void ecp_nistz256_point_add_affine(P256_POINT *r,
+ const P256_POINT *a,
+ const P256_POINT_AFFINE *b);
+#else
+/* Point double: r = 2*a */
+static void ecp_nistz256_point_double(P256_POINT *r, const P256_POINT *a)
+{
+ BN_ULONG S[P256_LIMBS];
+ BN_ULONG M[P256_LIMBS];
+ BN_ULONG Zsqr[P256_LIMBS];
+ BN_ULONG tmp0[P256_LIMBS];
+
+ const BN_ULONG *in_x = a->X;
+ const BN_ULONG *in_y = a->Y;
+ const BN_ULONG *in_z = a->Z;
+
+ BN_ULONG *res_x = r->X;
+ BN_ULONG *res_y = r->Y;
+ BN_ULONG *res_z = r->Z;
+
+ ecp_nistz256_mul_by_2(S, in_y);
+
+ ecp_nistz256_sqr_mont(Zsqr, in_z);
+
+ ecp_nistz256_sqr_mont(S, S);
+
+ ecp_nistz256_mul_mont(res_z, in_z, in_y);
+ ecp_nistz256_mul_by_2(res_z, res_z);
+
+ ecp_nistz256_add(M, in_x, Zsqr);
+ ecp_nistz256_sub(Zsqr, in_x, Zsqr);
+
+ ecp_nistz256_sqr_mont(res_y, S);
+ ecp_nistz256_div_by_2(res_y, res_y);
+
+ ecp_nistz256_mul_mont(M, M, Zsqr);
+ ecp_nistz256_mul_by_3(M, M);
+
+ ecp_nistz256_mul_mont(S, S, in_x);
+ ecp_nistz256_mul_by_2(tmp0, S);
+
+ ecp_nistz256_sqr_mont(res_x, M);
+
+ ecp_nistz256_sub(res_x, res_x, tmp0);
+ ecp_nistz256_sub(S, S, res_x);
+
+ ecp_nistz256_mul_mont(S, S, M);
+ ecp_nistz256_sub(res_y, S, res_y);
+}
+
+/* Point addition: r = a+b */
+static void ecp_nistz256_point_add(P256_POINT *r,
+ const P256_POINT *a, const P256_POINT *b)
+{
+ BN_ULONG U2[P256_LIMBS], S2[P256_LIMBS];
+ BN_ULONG U1[P256_LIMBS], S1[P256_LIMBS];
+ BN_ULONG Z1sqr[P256_LIMBS];
+ BN_ULONG Z2sqr[P256_LIMBS];
+ BN_ULONG H[P256_LIMBS], R[P256_LIMBS];
+ BN_ULONG Hsqr[P256_LIMBS];
+ BN_ULONG Rsqr[P256_LIMBS];
+ BN_ULONG Hcub[P256_LIMBS];
+
+ BN_ULONG res_x[P256_LIMBS];
+ BN_ULONG res_y[P256_LIMBS];
+ BN_ULONG res_z[P256_LIMBS];
+
+ BN_ULONG in1infty, in2infty;
+
+ const BN_ULONG *in1_x = a->X;
+ const BN_ULONG *in1_y = a->Y;
+ const BN_ULONG *in1_z = a->Z;
+
+ const BN_ULONG *in2_x = b->X;
+ const BN_ULONG *in2_y = b->Y;
+ const BN_ULONG *in2_z = b->Z;
+
+ /* We encode infinity as (0,0), which is not on the curve,
+ * so it is OK. */
+ in1infty = (in1_x[0] | in1_x[1] | in1_x[2] | in1_x[3] |
+ in1_y[0] | in1_y[1] | in1_y[2] | in1_y[3]);
+ if (P256_LIMBS == 8)
+ in1infty |= (in1_x[4] | in1_x[5] | in1_x[6] | in1_x[7] |
+ in1_y[4] | in1_y[5] | in1_y[6] | in1_y[7]);
+
+ in2infty = (in2_x[0] | in2_x[1] | in2_x[2] | in2_x[3] |
+ in2_y[0] | in2_y[1] | in2_y[2] | in2_y[3]);
+ if (P256_LIMBS == 8)
+ in2infty |= (in2_x[4] | in2_x[5] | in2_x[6] | in2_x[7] |
+ in2_y[4] | in2_y[5] | in2_y[6] | in2_y[7]);
+
+ in1infty = is_zero(in1infty);
+ in2infty = is_zero(in2infty);
+
+ ecp_nistz256_sqr_mont(Z2sqr, in2_z); /* Z2^2 */
+ ecp_nistz256_sqr_mont(Z1sqr, in1_z); /* Z1^2 */
+
+ ecp_nistz256_mul_mont(S1, Z2sqr, in2_z); /* S1 = Z2^3 */
+ ecp_nistz256_mul_mont(S2, Z1sqr, in1_z); /* S2 = Z1^3 */
+
+ ecp_nistz256_mul_mont(S1, S1, in1_y); /* S1 = Y1*Z2^3 */
+ ecp_nistz256_mul_mont(S2, S2, in2_y); /* S2 = Y2*Z1^3 */
+ ecp_nistz256_sub(R, S2, S1); /* R = S2 - S1 */
+
+ ecp_nistz256_mul_mont(U1, in1_x, Z2sqr); /* U1 = X1*Z2^2 */
+ ecp_nistz256_mul_mont(U2, in2_x, Z1sqr); /* U2 = X2*Z1^2 */
+ ecp_nistz256_sub(H, U2, U1); /* H = U2 - U1 */
+
+ /*
+ * This should not happen during sign/ecdh, so no constant time violation
+ */
+ if (is_equal(U1, U2) && !in1infty && !in2infty) {
+ if (is_equal(S1, S2)) {
+ ecp_nistz256_point_double(r, a);
+ return;
+ } else {
+ memset(r, 0, sizeof(*r));
+ return;
+ }
+ }
+
+ ecp_nistz256_sqr_mont(Rsqr, R); /* R^2 */
+ ecp_nistz256_mul_mont(res_z, H, in1_z); /* Z3 = H*Z1*Z2 */
+ ecp_nistz256_sqr_mont(Hsqr, H); /* H^2 */
+ ecp_nistz256_mul_mont(res_z, res_z, in2_z); /* Z3 = H*Z1*Z2 */
+ ecp_nistz256_mul_mont(Hcub, Hsqr, H); /* H^3 */
+
+ ecp_nistz256_mul_mont(U2, U1, Hsqr); /* U1*H^2 */
+ ecp_nistz256_mul_by_2(Hsqr, U2); /* 2*U1*H^2 */
+
+ ecp_nistz256_sub(res_x, Rsqr, Hsqr);
+ ecp_nistz256_sub(res_x, res_x, Hcub);
+
+ ecp_nistz256_sub(res_y, U2, res_x);
+
+ ecp_nistz256_mul_mont(S2, S1, Hcub);
+ ecp_nistz256_mul_mont(res_y, R, res_y);
+ ecp_nistz256_sub(res_y, res_y, S2);
+
+ copy_conditional(res_x, in2_x, in1infty);
+ copy_conditional(res_y, in2_y, in1infty);
+ copy_conditional(res_z, in2_z, in1infty);
+
+ copy_conditional(res_x, in1_x, in2infty);
+ copy_conditional(res_y, in1_y, in2infty);
+ copy_conditional(res_z, in1_z, in2infty);
+
+ memcpy(r->X, res_x, sizeof(res_x));
+ memcpy(r->Y, res_y, sizeof(res_y));
+ memcpy(r->Z, res_z, sizeof(res_z));
+}
+
+/* Point addition when b is known to be affine: r = a+b */
+static void ecp_nistz256_point_add_affine(P256_POINT *r,
+ const P256_POINT *a,
+ const P256_POINT_AFFINE *b)
+{
+ BN_ULONG U2[P256_LIMBS], S2[P256_LIMBS];
+ BN_ULONG Z1sqr[P256_LIMBS];
+ BN_ULONG H[P256_LIMBS], R[P256_LIMBS];
+ BN_ULONG Hsqr[P256_LIMBS];
+ BN_ULONG Rsqr[P256_LIMBS];
+ BN_ULONG Hcub[P256_LIMBS];
+
+ BN_ULONG res_x[P256_LIMBS];
+ BN_ULONG res_y[P256_LIMBS];
+ BN_ULONG res_z[P256_LIMBS];
+
+ BN_ULONG in1infty, in2infty;
+
+ const BN_ULONG *in1_x = a->X;
+ const BN_ULONG *in1_y = a->Y;
+ const BN_ULONG *in1_z = a->Z;
+
+ const BN_ULONG *in2_x = b->X;
+ const BN_ULONG *in2_y = b->Y;
+
+ /*
+ * In affine representation we encode infty as (0,0), which is not on the
+ * curve, so it is OK
+ */
+ in1infty = (in1_x[0] | in1_x[1] | in1_x[2] | in1_x[3] |
+ in1_y[0] | in1_y[1] | in1_y[2] | in1_y[3]);
+ if (P256_LIMBS == 8)
+ in1infty |= (in1_x[4] | in1_x[5] | in1_x[6] | in1_x[7] |
+ in1_y[4] | in1_y[5] | in1_y[6] | in1_y[7]);
+
+ in2infty = (in2_x[0] | in2_x[1] | in2_x[2] | in2_x[3] |
+ in2_y[0] | in2_y[1] | in2_y[2] | in2_y[3]);
+ if (P256_LIMBS == 8)
+ in2infty |= (in2_x[4] | in2_x[5] | in2_x[6] | in2_x[7] |
+ in2_y[4] | in2_y[5] | in2_y[6] | in2_y[7]);
+
+ in1infty = is_zero(in1infty);
+ in2infty = is_zero(in2infty);
+
+ ecp_nistz256_sqr_mont(Z1sqr, in1_z); /* Z1^2 */
+
+ ecp_nistz256_mul_mont(U2, in2_x, Z1sqr); /* U2 = X2*Z1^2 */
+ ecp_nistz256_sub(H, U2, in1_x); /* H = U2 - U1 */
+
+ ecp_nistz256_mul_mont(S2, Z1sqr, in1_z); /* S2 = Z1^3 */
+
+ ecp_nistz256_mul_mont(res_z, H, in1_z); /* Z3 = H*Z1*Z2 */
+
+ ecp_nistz256_mul_mont(S2, S2, in2_y); /* S2 = Y2*Z1^3 */
+ ecp_nistz256_sub(R, S2, in1_y); /* R = S2 - S1 */
+
+ ecp_nistz256_sqr_mont(Hsqr, H); /* H^2 */
+ ecp_nistz256_sqr_mont(Rsqr, R); /* R^2 */
+ ecp_nistz256_mul_mont(Hcub, Hsqr, H); /* H^3 */
+
+ ecp_nistz256_mul_mont(U2, in1_x, Hsqr); /* U1*H^2 */
+ ecp_nistz256_mul_by_2(Hsqr, U2); /* 2*U1*H^2 */
+
+ ecp_nistz256_sub(res_x, Rsqr, Hsqr);
+ ecp_nistz256_sub(res_x, res_x, Hcub);
+ ecp_nistz256_sub(H, U2, res_x);
+
+ ecp_nistz256_mul_mont(S2, in1_y, Hcub);
+ ecp_nistz256_mul_mont(H, H, R);
+ ecp_nistz256_sub(res_y, H, S2);
+
+ copy_conditional(res_x, in2_x, in1infty);
+ copy_conditional(res_x, in1_x, in2infty);
+
+ copy_conditional(res_y, in2_y, in1infty);
+ copy_conditional(res_y, in1_y, in2infty);
+
+ copy_conditional(res_z, ONE, in1infty);
+ copy_conditional(res_z, in1_z, in2infty);
+
+ memcpy(r->X, res_x, sizeof(res_x));
+ memcpy(r->Y, res_y, sizeof(res_y));
+ memcpy(r->Z, res_z, sizeof(res_z));
+}
+#endif
+
+/* r = in^-1 mod p */
+static void ecp_nistz256_mod_inverse(BN_ULONG r[P256_LIMBS],
+ const BN_ULONG in[P256_LIMBS])
+{
+ /*
+ * The poly is ffffffff 00000001 00000000 00000000 00000000 ffffffff
+ * ffffffff ffffffff We use FLT and used poly-2 as exponent
+ */
+ BN_ULONG p2[P256_LIMBS];
+ BN_ULONG p4[P256_LIMBS];
+ BN_ULONG p8[P256_LIMBS];
+ BN_ULONG p16[P256_LIMBS];
+ BN_ULONG p32[P256_LIMBS];
+ BN_ULONG res[P256_LIMBS];
+ int i;
+
+ ecp_nistz256_sqr_mont(res, in);
+ ecp_nistz256_mul_mont(p2, res, in); /* 3*p */
+
+ ecp_nistz256_sqr_mont(res, p2);
+ ecp_nistz256_sqr_mont(res, res);
+ ecp_nistz256_mul_mont(p4, res, p2); /* f*p */
+
+ ecp_nistz256_sqr_mont(res, p4);
+ ecp_nistz256_sqr_mont(res, res);
+ ecp_nistz256_sqr_mont(res, res);
+ ecp_nistz256_sqr_mont(res, res);
+ ecp_nistz256_mul_mont(p8, res, p4); /* ff*p */
+
+ ecp_nistz256_sqr_mont(res, p8);
+ for (i = 0; i < 7; i++)
+ ecp_nistz256_sqr_mont(res, res);
+ ecp_nistz256_mul_mont(p16, res, p8); /* ffff*p */
+
+ ecp_nistz256_sqr_mont(res, p16);
+ for (i = 0; i < 15; i++)
+ ecp_nistz256_sqr_mont(res, res);
+ ecp_nistz256_mul_mont(p32, res, p16); /* ffffffff*p */
+
+ ecp_nistz256_sqr_mont(res, p32);
+ for (i = 0; i < 31; i++)
+ ecp_nistz256_sqr_mont(res, res);
+ ecp_nistz256_mul_mont(res, res, in);
+
+ for (i = 0; i < 32 * 4; i++)
+ ecp_nistz256_sqr_mont(res, res);
+ ecp_nistz256_mul_mont(res, res, p32);
+
+ for (i = 0; i < 32; i++)
+ ecp_nistz256_sqr_mont(res, res);
+ ecp_nistz256_mul_mont(res, res, p32);
+
+ for (i = 0; i < 16; i++)
+ ecp_nistz256_sqr_mont(res, res);
+ ecp_nistz256_mul_mont(res, res, p16);
+
+ for (i = 0; i < 8; i++)
+ ecp_nistz256_sqr_mont(res, res);
+ ecp_nistz256_mul_mont(res, res, p8);
+
+ ecp_nistz256_sqr_mont(res, res);
+ ecp_nistz256_sqr_mont(res, res);
+ ecp_nistz256_sqr_mont(res, res);
+ ecp_nistz256_sqr_mont(res, res);
+ ecp_nistz256_mul_mont(res, res, p4);
+
+ ecp_nistz256_sqr_mont(res, res);
+ ecp_nistz256_sqr_mont(res, res);
+ ecp_nistz256_mul_mont(res, res, p2);
+
+ ecp_nistz256_sqr_mont(res, res);
+ ecp_nistz256_sqr_mont(res, res);
+ ecp_nistz256_mul_mont(res, res, in);
+
+ memcpy(r, res, sizeof(res));
+}
+
+/*
+ * ecp_nistz256_bignum_to_field_elem copies the contents of |in| to |out| and
+ * returns one if it fits. Otherwise it returns zero.
+ */
+static int ecp_nistz256_bignum_to_field_elem(BN_ULONG out[P256_LIMBS],
+ const BIGNUM *in)
+{
+ if (in->top > P256_LIMBS)
+ return 0;
+
+ memset(out, 0, sizeof(BN_ULONG) * P256_LIMBS);
+ memcpy(out, in->d, sizeof(BN_ULONG) * in->top);
+ return 1;
+}
+
+/* r = sum(scalar[i]*point[i]) */
+static int ecp_nistz256_windowed_mul(const EC_GROUP *group,
+ P256_POINT *r,
+ const BIGNUM **scalar,
+ const EC_POINT **point,
+ int num, BN_CTX *ctx)
+{
+
+ int i, j, ret = 0;
+ unsigned int index;
+ unsigned char (*p_str)[33] = NULL;
+ const unsigned int window_size = 5;
+ const unsigned int mask = (1 << (window_size + 1)) - 1;
+ unsigned int wvalue;
+ BN_ULONG tmp[P256_LIMBS];
+ ALIGN32 P256_POINT h;
+ const BIGNUM **scalars = NULL;
+ P256_POINT (*table)[16] = NULL;
+ void *table_storage = NULL;
+
+ if ((table_storage =
+ OPENSSL_malloc(num * 16 * sizeof(P256_POINT) + 64)) == NULL
+ || (p_str =
+ OPENSSL_malloc(num * 33 * sizeof(unsigned char))) == NULL
+ || (scalars = OPENSSL_malloc(num * sizeof(BIGNUM *))) == NULL) {
+ ECerr(EC_F_ECP_NISTZ256_WINDOWED_MUL, ERR_R_MALLOC_FAILURE);
+ goto err;
+ } else {
+ table = (void *)ALIGNPTR(table_storage, 64);
+ }
+
+ for (i = 0; i < num; i++) {
+ P256_POINT *row = table[i];
+
+ /* This is an unusual input, we don't guarantee constant-timeness. */
+ if ((BN_num_bits(scalar[i]) > 256) || BN_is_negative(scalar[i])) {
+ BIGNUM *mod;
+
+ if ((mod = BN_CTX_get(ctx)) == NULL)
+ goto err;
+ if (!BN_nnmod(mod, scalar[i], &group->order, ctx)) {
+ ECerr(EC_F_ECP_NISTZ256_WINDOWED_MUL, ERR_R_BN_LIB);
+ goto err;
+ }
+ scalars[i] = mod;
+ } else
+ scalars[i] = scalar[i];
+
+ for (j = 0; j < scalars[i]->top * BN_BYTES; j += BN_BYTES) {
+ BN_ULONG d = scalars[i]->d[j / BN_BYTES];
+
+ p_str[i][j + 0] = d & 0xff;
+ p_str[i][j + 1] = (d >> 8) & 0xff;
+ p_str[i][j + 2] = (d >> 16) & 0xff;
+ p_str[i][j + 3] = (d >>= 24) & 0xff;
+ if (BN_BYTES == 8) {
+ d >>= 8;
+ p_str[i][j + 4] = d & 0xff;
+ p_str[i][j + 5] = (d >> 8) & 0xff;
+ p_str[i][j + 6] = (d >> 16) & 0xff;
+ p_str[i][j + 7] = (d >> 24) & 0xff;
+ }
+ }
+ for (; j < 33; j++)
+ p_str[i][j] = 0;
+
+ /* table[0] is implicitly (0,0,0) (the point at infinity),
+ * therefore it is not stored. All other values are actually
+ * stored with an offset of -1 in table.
+ */
+
+ if (!ecp_nistz256_bignum_to_field_elem(row[1 - 1].X, &point[i]->X)
+ || !ecp_nistz256_bignum_to_field_elem(row[1 - 1].Y, &point[i]->Y)
+ || !ecp_nistz256_bignum_to_field_elem(row[1 - 1].Z, &point[i]->Z)) {
+ ECerr(EC_F_ECP_NISTZ256_WINDOWED_MUL, EC_R_COORDINATES_OUT_OF_RANGE);
+ goto err;
+ }
+
+ ecp_nistz256_point_double(&row[ 2 - 1], &row[ 1 - 1]);
+ ecp_nistz256_point_add (&row[ 3 - 1], &row[ 2 - 1], &row[1 - 1]);
+ ecp_nistz256_point_double(&row[ 4 - 1], &row[ 2 - 1]);
+ ecp_nistz256_point_double(&row[ 6 - 1], &row[ 3 - 1]);
+ ecp_nistz256_point_double(&row[ 8 - 1], &row[ 4 - 1]);
+ ecp_nistz256_point_double(&row[12 - 1], &row[ 6 - 1]);
+ ecp_nistz256_point_add (&row[ 5 - 1], &row[ 4 - 1], &row[1 - 1]);
+ ecp_nistz256_point_add (&row[ 7 - 1], &row[ 6 - 1], &row[1 - 1]);
+ ecp_nistz256_point_add (&row[ 9 - 1], &row[ 8 - 1], &row[1 - 1]);
+ ecp_nistz256_point_add (&row[13 - 1], &row[12 - 1], &row[1 - 1]);
+ ecp_nistz256_point_double(&row[14 - 1], &row[ 7 - 1]);
+ ecp_nistz256_point_double(&row[10 - 1], &row[ 5 - 1]);
+ ecp_nistz256_point_add (&row[15 - 1], &row[14 - 1], &row[1 - 1]);
+ ecp_nistz256_point_add (&row[11 - 1], &row[10 - 1], &row[1 - 1]);
+ ecp_nistz256_point_add (&row[16 - 1], &row[15 - 1], &row[1 - 1]);
+ }
+
+ index = 255;
+
+ wvalue = p_str[0][(index - 1) / 8];
+ wvalue = (wvalue >> ((index - 1) % 8)) & mask;
+
+ ecp_nistz256_select_w5(r, table[0], _booth_recode_w5(wvalue) >> 1);
+
+ while (index >= 5) {
+ for (i = (index == 255 ? 1 : 0); i < num; i++) {
+ unsigned int off = (index - 1) / 8;
+
+ wvalue = p_str[i][off] | p_str[i][off + 1] << 8;
+ wvalue = (wvalue >> ((index - 1) % 8)) & mask;
+
+ wvalue = _booth_recode_w5(wvalue);
+
+ ecp_nistz256_select_w5(&h, table[i], wvalue >> 1);
+
+ ecp_nistz256_neg(tmp, h.Y);
+ copy_conditional(h.Y, tmp, (wvalue & 1));
+
+ ecp_nistz256_point_add(r, r, &h);
+ }
+
+ index -= window_size;
+
+ ecp_nistz256_point_double(r, r);
+ ecp_nistz256_point_double(r, r);
+ ecp_nistz256_point_double(r, r);
+ ecp_nistz256_point_double(r, r);
+ ecp_nistz256_point_double(r, r);
+ }
+
+ /* Final window */
+ for (i = 0; i < num; i++) {
+ wvalue = p_str[i][0];
+ wvalue = (wvalue << 1) & mask;
+
+ wvalue = _booth_recode_w5(wvalue);
+
+ ecp_nistz256_select_w5(&h, table[i], wvalue >> 1);
+
+ ecp_nistz256_neg(tmp, h.Y);
+ copy_conditional(h.Y, tmp, wvalue & 1);
+
+ ecp_nistz256_point_add(r, r, &h);
+ }
+
+ ret = 1;
+ err:
+ if (table_storage)
+ OPENSSL_free(table_storage);
+ if (p_str)
+ OPENSSL_free(p_str);
+ if (scalars)
+ OPENSSL_free(scalars);
+ return ret;
+}
+
+/* Coordinates of G, for which we have precomputed tables */
+const static BN_ULONG def_xG[P256_LIMBS] = {
+ TOBN(0x79e730d4, 0x18a9143c), TOBN(0x75ba95fc, 0x5fedb601),
+ TOBN(0x79fb732b, 0x77622510), TOBN(0x18905f76, 0xa53755c6)
+};
+
+const static BN_ULONG def_yG[P256_LIMBS] = {
+ TOBN(0xddf25357, 0xce95560a), TOBN(0x8b4ab8e4, 0xba19e45c),
+ TOBN(0xd2e88688, 0xdd21f325), TOBN(0x8571ff18, 0x25885d85)
+};
+
+/*
+ * ecp_nistz256_is_affine_G returns one if |generator| is the standard, P-256
+ * generator.
+ */
+static int ecp_nistz256_is_affine_G(const EC_POINT *generator)
+{
+ return (generator->X.top == P256_LIMBS) &&
+ (generator->Y.top == P256_LIMBS) &&
+ (generator->Z.top == (P256_LIMBS - P256_LIMBS / 8)) &&
+ is_equal(generator->X.d, def_xG) &&
+ is_equal(generator->Y.d, def_yG) && is_one(generator->Z.d);
+}
+
+static int ecp_nistz256_mult_precompute(EC_GROUP *group, BN_CTX *ctx)
+{
+ /*
+ * We precompute a table for a Booth encoded exponent (wNAF) based
+ * computation. Each table holds 64 values for safe access, with an
+ * implicit value of infinity at index zero. We use window of size 7, and
+ * therefore require ceil(256/7) = 37 tables.
+ */
+ BIGNUM *order;
+ EC_POINT *P = NULL, *T = NULL;
+ const EC_POINT *generator;
+ EC_PRE_COMP *pre_comp;
+ BN_CTX *new_ctx = NULL;
+ int i, j, k, ret = 0;
+ size_t w;
+
+ PRECOMP256_ROW *preComputedTable = NULL;
+ unsigned char *precomp_storage = NULL;
+
+ /* if there is an old EC_PRE_COMP object, throw it away */
+ EC_EX_DATA_free_data(&group->extra_data, ecp_nistz256_pre_comp_dup,
+ ecp_nistz256_pre_comp_free,
+ ecp_nistz256_pre_comp_clear_free);
+
+ generator = EC_GROUP_get0_generator(group);
+ if (generator == NULL) {
+ ECerr(EC_F_ECP_NISTZ256_MULT_PRECOMPUTE, EC_R_UNDEFINED_GENERATOR);
+ return 0;
+ }
+
+ if (ecp_nistz256_is_affine_G(generator)) {
+ /*
+ * No need to calculate tables for the standard generator because we
+ * have them statically.
+ */
+ return 1;
+ }
+
+ if ((pre_comp = ecp_nistz256_pre_comp_new(group)) == NULL)
+ return 0;
+
+ if (ctx == NULL) {
+ ctx = new_ctx = BN_CTX_new();
+ if (ctx == NULL)
+ goto err;
+ }
+
+ BN_CTX_start(ctx);
+ order = BN_CTX_get(ctx);
+
+ if (order == NULL)
+ goto err;
+
+ if (!EC_GROUP_get_order(group, order, ctx))
+ goto err;
+
+ if (BN_is_zero(order)) {
+ ECerr(EC_F_ECP_NISTZ256_MULT_PRECOMPUTE, EC_R_UNKNOWN_ORDER);
+ goto err;
+ }
+
+ w = 7;
+
+ if ((precomp_storage =
+ OPENSSL_malloc(37 * 64 * sizeof(P256_POINT_AFFINE) + 64)) == NULL) {
+ ECerr(EC_F_ECP_NISTZ256_MULT_PRECOMPUTE, ERR_R_MALLOC_FAILURE);
+ goto err;
+ } else {
+ preComputedTable = (void *)ALIGNPTR(precomp_storage, 64);
+ }
+
+ P = EC_POINT_new(group);
+ T = EC_POINT_new(group);
+ if (P == NULL || T == NULL)
+ goto err;
+
+ /*
+ * The zero entry is implicitly infinity, and we skip it, storing other
+ * values with -1 offset.
+ */
+ if (!EC_POINT_copy(T, generator))
+ goto err;
+
+ for (k = 0; k < 64; k++) {
+ if (!EC_POINT_copy(P, T))
+ goto err;
+ for (j = 0; j < 37; j++) {
+ /*
+ * It would be faster to use EC_POINTs_make_affine and
+ * make multiple points affine at the same time.
+ */
+ if (!EC_POINT_make_affine(group, P, ctx))
+ goto err;
+ if (!ecp_nistz256_bignum_to_field_elem(preComputedTable[j][k].X,
+ &P->X) ||
+ !ecp_nistz256_bignum_to_field_elem(preComputedTable[j][k].Y,
+ &P->Y)) {
+ ECerr(EC_F_ECP_NISTZ256_MULT_PRECOMPUTE,
+ EC_R_COORDINATES_OUT_OF_RANGE);
+ goto err;
+ }
+ for (i = 0; i < 7; i++) {
+ if (!EC_POINT_dbl(group, P, P, ctx))
+ goto err;
+ }
+ }
+ if (!EC_POINT_add(group, T, T, generator, ctx))
+ goto err;
+ }
+
+ pre_comp->group = group;
+ pre_comp->w = w;
+ pre_comp->precomp = preComputedTable;
+ pre_comp->precomp_storage = precomp_storage;
+
+ precomp_storage = NULL;
+
+ if (!EC_EX_DATA_set_data(&group->extra_data, pre_comp,
+ ecp_nistz256_pre_comp_dup,
+ ecp_nistz256_pre_comp_free,
+ ecp_nistz256_pre_comp_clear_free)) {
+ goto err;
+ }
+
+ pre_comp = NULL;
+
+ ret = 1;
+
+ err:
+ if (ctx != NULL)
+ BN_CTX_end(ctx);
+ BN_CTX_free(new_ctx);
+
+ if (pre_comp)
+ ecp_nistz256_pre_comp_free(pre_comp);
+ if (precomp_storage)
+ OPENSSL_free(precomp_storage);
+ if (P)
+ EC_POINT_free(P);
+ if (T)
+ EC_POINT_free(T);
+ return ret;
+}
+
+/*
+ * Note that by default ECP_NISTZ256_AVX2 is undefined. While it's great
+ * code processing 4 points in parallel, corresponding serial operation
+ * is several times slower, because it uses 29x29=58-bit multiplication
+ * as opposite to 64x64=128-bit in integer-only scalar case. As result
+ * it doesn't provide *significant* performance improvement. Note that
+ * just defining ECP_NISTZ256_AVX2 is not sufficient to make it work,
+ * you'd need to compile even asm/ecp_nistz256-avx.pl module.
+ */
+#if defined(ECP_NISTZ256_AVX2)
+# if !(defined(__x86_64) || defined(__x86_64__)) || \
+ defined(_M_AMD64) || defined(_MX64)) || \
+ !(defined(__GNUC__) || defined(_MSC_VER)) /* this is for ALIGN32 */
+# undef ECP_NISTZ256_AVX2
+# else
+/* Constant time access, loading four values, from four consecutive tables */
+void ecp_nistz256_avx2_select_w7(P256_POINT_AFFINE * val,
+ const P256_POINT_AFFINE * in_t, int index);
+void ecp_nistz256_avx2_multi_select_w7(void *result, const void *in, int index0,
+ int index1, int index2, int index3);
+void ecp_nistz256_avx2_transpose_convert(void *RESULTx4, const void *in);
+void ecp_nistz256_avx2_convert_transpose_back(void *result, const void *Ax4);
+void ecp_nistz256_avx2_point_add_affine_x4(void *RESULTx4, const void *Ax4,
+ const void *Bx4);
+void ecp_nistz256_avx2_point_add_affines_x4(void *RESULTx4, const void *Ax4,
+ const void *Bx4);
+void ecp_nistz256_avx2_to_mont(void *RESULTx4, const void *Ax4);
+void ecp_nistz256_avx2_from_mont(void *RESULTx4, const void *Ax4);
+void ecp_nistz256_avx2_set1(void *RESULTx4);
+int ecp_nistz_avx2_eligible(void);
+
+static void booth_recode_w7(unsigned char *sign,
+ unsigned char *digit, unsigned char in)
+{
+ unsigned char s, d;
+
+ s = ~((in >> 7) - 1);
+ d = (1 << 8) - in - 1;
+ d = (d & s) | (in & ~s);
+ d = (d >> 1) + (d & 1);
+
+ *sign = s & 1;
+ *digit = d;
+}
+
+/*
+ * ecp_nistz256_avx2_mul_g performs multiplication by G, using only the
+ * precomputed table. It does 4 affine point additions in parallel,
+ * significantly speeding up point multiplication for a fixed value.
+ */
+static void ecp_nistz256_avx2_mul_g(P256_POINT *r,
+ unsigned char p_str[33],
+ const P256_POINT_AFFINE(*preComputedTable)[64])
+{
+ const unsigned int window_size = 7;
+ const unsigned int mask = (1 << (window_size + 1)) - 1;
+ unsigned int wvalue;
+ /* Using 4 windows at a time */
+ unsigned char sign0, digit0;
+ unsigned char sign1, digit1;
+ unsigned char sign2, digit2;
+ unsigned char sign3, digit3;
+ unsigned int index = 0;
+ BN_ULONG tmp[P256_LIMBS];
+ int i;
+
+ ALIGN32 BN_ULONG aX4[4 * 9 * 3] = { 0 };
+ ALIGN32 BN_ULONG bX4[4 * 9 * 2] = { 0 };
+ ALIGN32 P256_POINT_AFFINE point_arr[P256_LIMBS];
+ ALIGN32 P256_POINT res_point_arr[P256_LIMBS];
+
+ /* Initial four windows */
+ wvalue = *((u16 *) & p_str[0]);
+ wvalue = (wvalue << 1) & mask;
+ index += window_size;
+ booth_recode_w7(&sign0, &digit0, wvalue);
+ wvalue = *((u16 *) & p_str[(index - 1) / 8]);
+ wvalue = (wvalue >> ((index - 1) % 8)) & mask;
+ index += window_size;
+ booth_recode_w7(&sign1, &digit1, wvalue);
+ wvalue = *((u16 *) & p_str[(index - 1) / 8]);
+ wvalue = (wvalue >> ((index - 1) % 8)) & mask;
+ index += window_size;
+ booth_recode_w7(&sign2, &digit2, wvalue);
+ wvalue = *((u16 *) & p_str[(index - 1) / 8]);
+ wvalue = (wvalue >> ((index - 1) % 8)) & mask;
+ index += window_size;
+ booth_recode_w7(&sign3, &digit3, wvalue);
+
+ ecp_nistz256_avx2_multi_select_w7(point_arr, preComputedTable[0],
+ digit0, digit1, digit2, digit3);
+
+ ecp_nistz256_neg(tmp, point_arr[0].Y);
+ copy_conditional(point_arr[0].Y, tmp, sign0);
+ ecp_nistz256_neg(tmp, point_arr[1].Y);
+ copy_conditional(point_arr[1].Y, tmp, sign1);
+ ecp_nistz256_neg(tmp, point_arr[2].Y);
+ copy_conditional(point_arr[2].Y, tmp, sign2);
+ ecp_nistz256_neg(tmp, point_arr[3].Y);
+ copy_conditional(point_arr[3].Y, tmp, sign3);
+
+ ecp_nistz256_avx2_transpose_convert(aX4, point_arr);
+ ecp_nistz256_avx2_to_mont(aX4, aX4);
+ ecp_nistz256_avx2_to_mont(&aX4[4 * 9], &aX4[4 * 9]);
+ ecp_nistz256_avx2_set1(&aX4[4 * 9 * 2]);
+
+ wvalue = *((u16 *) & p_str[(index - 1) / 8]);
+ wvalue = (wvalue >> ((index - 1) % 8)) & mask;
+ index += window_size;
+ booth_recode_w7(&sign0, &digit0, wvalue);
+ wvalue = *((u16 *) & p_str[(index - 1) / 8]);
+ wvalue = (wvalue >> ((index - 1) % 8)) & mask;
+ index += window_size;
+ booth_recode_w7(&sign1, &digit1, wvalue);
+ wvalue = *((u16 *) & p_str[(index - 1) / 8]);
+ wvalue = (wvalue >> ((index - 1) % 8)) & mask;
+ index += window_size;
+ booth_recode_w7(&sign2, &digit2, wvalue);
+ wvalue = *((u16 *) & p_str[(index - 1) / 8]);
+ wvalue = (wvalue >> ((index - 1) % 8)) & mask;
+ index += window_size;
+ booth_recode_w7(&sign3, &digit3, wvalue);
+
+ ecp_nistz256_avx2_multi_select_w7(point_arr, preComputedTable[4 * 1],
+ digit0, digit1, digit2, digit3);
+
+ ecp_nistz256_neg(tmp, point_arr[0].Y);
+ copy_conditional(point_arr[0].Y, tmp, sign0);
+ ecp_nistz256_neg(tmp, point_arr[1].Y);
+ copy_conditional(point_arr[1].Y, tmp, sign1);
+ ecp_nistz256_neg(tmp, point_arr[2].Y);
+ copy_conditional(point_arr[2].Y, tmp, sign2);
+ ecp_nistz256_neg(tmp, point_arr[3].Y);
+ copy_conditional(point_arr[3].Y, tmp, sign3);
+
+ ecp_nistz256_avx2_transpose_convert(bX4, point_arr);
+ ecp_nistz256_avx2_to_mont(bX4, bX4);
+ ecp_nistz256_avx2_to_mont(&bX4[4 * 9], &bX4[4 * 9]);
+ /* Optimized when both inputs are affine */
+ ecp_nistz256_avx2_point_add_affines_x4(aX4, aX4, bX4);
+
+ for (i = 2; i < 9; i++) {
+ wvalue = *((u16 *) & p_str[(index - 1) / 8]);
+ wvalue = (wvalue >> ((index - 1) % 8)) & mask;
+ index += window_size;
+ booth_recode_w7(&sign0, &digit0, wvalue);
+ wvalue = *((u16 *) & p_str[(index - 1) / 8]);
+ wvalue = (wvalue >> ((index - 1) % 8)) & mask;
+ index += window_size;
+ booth_recode_w7(&sign1, &digit1, wvalue);
+ wvalue = *((u16 *) & p_str[(index - 1) / 8]);
+ wvalue = (wvalue >> ((index - 1) % 8)) & mask;
+ index += window_size;
+ booth_recode_w7(&sign2, &digit2, wvalue);
+ wvalue = *((u16 *) & p_str[(index - 1) / 8]);
+ wvalue = (wvalue >> ((index - 1) % 8)) & mask;
+ index += window_size;
+ booth_recode_w7(&sign3, &digit3, wvalue);
+
+ ecp_nistz256_avx2_multi_select_w7(point_arr,
+ preComputedTable[4 * i],
+ digit0, digit1, digit2, digit3);
+
+ ecp_nistz256_neg(tmp, point_arr[0].Y);
+ copy_conditional(point_arr[0].Y, tmp, sign0);
+ ecp_nistz256_neg(tmp, point_arr[1].Y);
+ copy_conditional(point_arr[1].Y, tmp, sign1);
+ ecp_nistz256_neg(tmp, point_arr[2].Y);
+ copy_conditional(point_arr[2].Y, tmp, sign2);
+ ecp_nistz256_neg(tmp, point_arr[3].Y);
+ copy_conditional(point_arr[3].Y, tmp, sign3);
+
+ ecp_nistz256_avx2_transpose_convert(bX4, point_arr);
+ ecp_nistz256_avx2_to_mont(bX4, bX4);
+ ecp_nistz256_avx2_to_mont(&bX4[4 * 9], &bX4[4 * 9]);
+
+ ecp_nistz256_avx2_point_add_affine_x4(aX4, aX4, bX4);
+ }
+
+ ecp_nistz256_avx2_from_mont(&aX4[4 * 9 * 0], &aX4[4 * 9 * 0]);
+ ecp_nistz256_avx2_from_mont(&aX4[4 * 9 * 1], &aX4[4 * 9 * 1]);
+ ecp_nistz256_avx2_from_mont(&aX4[4 * 9 * 2], &aX4[4 * 9 * 2]);
+
+ ecp_nistz256_avx2_convert_transpose_back(res_point_arr, aX4);
+ /* Last window is performed serially */
+ wvalue = *((u16 *) & p_str[(index - 1) / 8]);
+ wvalue = (wvalue >> ((index - 1) % 8)) & mask;
+ booth_recode_w7(&sign0, &digit0, wvalue);
+ ecp_nistz256_avx2_select_w7((P256_POINT_AFFINE *) r,
+ preComputedTable[36], digit0);
+ ecp_nistz256_neg(tmp, r->Y);
+ copy_conditional(r->Y, tmp, sign0);
+ memcpy(r->Z, ONE, sizeof(ONE));
+ /* Sum the four windows */
+ ecp_nistz256_point_add(r, r, &res_point_arr[0]);
+ ecp_nistz256_point_add(r, r, &res_point_arr[1]);
+ ecp_nistz256_point_add(r, r, &res_point_arr[2]);
+ ecp_nistz256_point_add(r, r, &res_point_arr[3]);
+}
+# endif
+#endif
+
+static int ecp_nistz256_set_from_affine(EC_POINT *out, const EC_GROUP *group,
+ const P256_POINT_AFFINE *in,
+ BN_CTX *ctx)
+{
+ BIGNUM x, y;
+ BN_ULONG d_x[P256_LIMBS], d_y[P256_LIMBS];
+ int ret = 0;
+
+ memcpy(d_x, in->X, sizeof(d_x));
+ x.d = d_x;
+ x.dmax = x.top = P256_LIMBS;
+ x.neg = 0;
+ x.flags = BN_FLG_STATIC_DATA;
+
+ memcpy(d_y, in->Y, sizeof(d_y));
+ y.d = d_y;
+ y.dmax = y.top = P256_LIMBS;
+ y.neg = 0;
+ y.flags = BN_FLG_STATIC_DATA;
+
+ ret = EC_POINT_set_affine_coordinates_GFp(group, out, &x, &y, ctx);
+
+ return ret;
+}
+
+/* r = scalar*G + sum(scalars[i]*points[i]) */
+static int ecp_nistz256_points_mul(const EC_GROUP *group,
+ EC_POINT *r,
+ const BIGNUM *scalar,
+ size_t num,
+ const EC_POINT *points[],
+ const BIGNUM *scalars[], BN_CTX *ctx)
+{
+ int i = 0, ret = 0, no_precomp_for_generator = 0, p_is_infinity = 0;
+ size_t j;
+ unsigned char p_str[33] = { 0 };
+ const PRECOMP256_ROW *preComputedTable = NULL;
+ const EC_PRE_COMP *pre_comp = NULL;
+ const EC_POINT *generator = NULL;
+ unsigned int index = 0;
+ BN_CTX *new_ctx = NULL;
+ const BIGNUM **new_scalars = NULL;
+ const EC_POINT **new_points = NULL;
+ const unsigned int window_size = 7;
+ const unsigned int mask = (1 << (window_size + 1)) - 1;
+ unsigned int wvalue;
+ ALIGN32 union {
+ P256_POINT p;
+ P256_POINT_AFFINE a;
+ } t, p;
+ BIGNUM *tmp_scalar;
+
+ if (group->meth != r->meth) {
+ ECerr(EC_F_ECP_NISTZ256_POINTS_MUL, EC_R_INCOMPATIBLE_OBJECTS);
+ return 0;
+ }
+
+ if ((scalar == NULL) && (num == 0))
+ return EC_POINT_set_to_infinity(group, r);
+
+ for (j = 0; j < num; j++) {
+ if (group->meth != points[j]->meth) {
+ ECerr(EC_F_ECP_NISTZ256_POINTS_MUL, EC_R_INCOMPATIBLE_OBJECTS);
+ return 0;
+ }
+ }
+
+ if (ctx == NULL) {
+ ctx = new_ctx = BN_CTX_new();
+ if (ctx == NULL)
+ goto err;
+ }
+
+ BN_CTX_start(ctx);
+
+ if (scalar) {
+ generator = EC_GROUP_get0_generator(group);
+ if (generator == NULL) {
+ ECerr(EC_F_ECP_NISTZ256_POINTS_MUL, EC_R_UNDEFINED_GENERATOR);
+ goto err;
+ }
+
+ /* look if we can use precomputed multiples of generator */
+ pre_comp =
+ EC_EX_DATA_get_data(group->extra_data, ecp_nistz256_pre_comp_dup,
+ ecp_nistz256_pre_comp_free,
+ ecp_nistz256_pre_comp_clear_free);
+
+ if (pre_comp) {
+ /*
+ * If there is a precomputed table for the generator, check that
+ * it was generated with the same generator.
+ */
+ EC_POINT *pre_comp_generator = EC_POINT_new(group);
+ if (pre_comp_generator == NULL)
+ goto err;
+
+ if (!ecp_nistz256_set_from_affine
+ (pre_comp_generator, group, pre_comp->precomp[0], ctx)) {
+ EC_POINT_free(pre_comp_generator);
+ goto err;
+ }
+
+ if (0 == EC_POINT_cmp(group, generator, pre_comp_generator, ctx))
+ preComputedTable = (const PRECOMP256_ROW *)pre_comp->precomp;
+
+ EC_POINT_free(pre_comp_generator);
+ }
+
+ if (preComputedTable == NULL && ecp_nistz256_is_affine_G(generator)) {
+ /*
+ * If there is no precomputed data, but the generator
+ * is the default, a hardcoded table of precomputed
+ * data is used. This is because applications, such as
+ * Apache, do not use EC_KEY_precompute_mult.
+ */
+ preComputedTable = (const PRECOMP256_ROW *)ecp_nistz256_precomputed;
+ }
+
+ if (preComputedTable) {
+ if ((BN_num_bits(scalar) > 256)
+ || BN_is_negative(scalar)) {
+ if ((tmp_scalar = BN_CTX_get(ctx)) == NULL)
+ goto err;
+
+ if (!BN_nnmod(tmp_scalar, scalar, &group->order, ctx)) {
+ ECerr(EC_F_ECP_NISTZ256_POINTS_MUL, ERR_R_BN_LIB);
+ goto err;
+ }
+ scalar = tmp_scalar;
+ }
+
+ for (i = 0; i < scalar->top * BN_BYTES; i += BN_BYTES) {
+ BN_ULONG d = scalar->d[i / BN_BYTES];
+
+ p_str[i + 0] = d & 0xff;
+ p_str[i + 1] = (d >> 8) & 0xff;
+ p_str[i + 2] = (d >> 16) & 0xff;
+ p_str[i + 3] = (d >>= 24) & 0xff;
+ if (BN_BYTES == 8) {
+ d >>= 8;
+ p_str[i + 4] = d & 0xff;
+ p_str[i + 5] = (d >> 8) & 0xff;
+ p_str[i + 6] = (d >> 16) & 0xff;
+ p_str[i + 7] = (d >> 24) & 0xff;
+ }
+ }
+
+ for (; i < 33; i++)
+ p_str[i] = 0;
+
+#if defined(ECP_NISTZ256_AVX2)
+ if (ecp_nistz_avx2_eligible()) {
+ ecp_nistz256_avx2_mul_g(&p.p, p_str, preComputedTable);
+ } else
+#endif
+ {
+ /* First window */
+ wvalue = (p_str[0] << 1) & mask;
+ index += window_size;
+
+ wvalue = _booth_recode_w7(wvalue);
+
+ ecp_nistz256_select_w7(&p.a, preComputedTable[0], wvalue >> 1);
+
+ ecp_nistz256_neg(p.p.Z, p.p.Y);
+ copy_conditional(p.p.Y, p.p.Z, wvalue & 1);
+
+ memcpy(p.p.Z, ONE, sizeof(ONE));
+
+ for (i = 1; i < 37; i++) {
+ unsigned int off = (index - 1) / 8;
+ wvalue = p_str[off] | p_str[off + 1] << 8;
+ wvalue = (wvalue >> ((index - 1) % 8)) & mask;
+ index += window_size;
+
+ wvalue = _booth_recode_w7(wvalue);
+
+ ecp_nistz256_select_w7(&t.a,
+ preComputedTable[i], wvalue >> 1);
+
+ ecp_nistz256_neg(t.p.Z, t.a.Y);
+ copy_conditional(t.a.Y, t.p.Z, wvalue & 1);
+
+ ecp_nistz256_point_add_affine(&p.p, &p.p, &t.a);
+ }
+ }
+ } else {
+ p_is_infinity = 1;
+ no_precomp_for_generator = 1;
+ }
+ } else
+ p_is_infinity = 1;
+
+ if (no_precomp_for_generator) {
+ /*
+ * Without a precomputed table for the generator, it has to be
+ * handled like a normal point.
+ */
+ new_scalars = OPENSSL_malloc((num + 1) * sizeof(BIGNUM *));
+ if (!new_scalars) {
+ ECerr(EC_F_ECP_NISTZ256_POINTS_MUL, ERR_R_MALLOC_FAILURE);
+ goto err;
+ }
+
+ new_points = OPENSSL_malloc((num + 1) * sizeof(EC_POINT *));
+ if (!new_points) {
+ ECerr(EC_F_ECP_NISTZ256_POINTS_MUL, ERR_R_MALLOC_FAILURE);
+ goto err;
+ }
+
+ memcpy(new_scalars, scalars, num * sizeof(BIGNUM *));
+ new_scalars[num] = scalar;
+ memcpy(new_points, points, num * sizeof(EC_POINT *));
+ new_points[num] = generator;
+
+ scalars = new_scalars;
+ points = new_points;
+ num++;
+ }
+
+ if (num) {
+ P256_POINT *out = &t.p;
+ if (p_is_infinity)
+ out = &p.p;
+
+ if (!ecp_nistz256_windowed_mul(group, out, scalars, points, num, ctx))
+ goto err;
+
+ if (!p_is_infinity)
+ ecp_nistz256_point_add(&p.p, &p.p, out);
+ }
+
+ /* Not constant-time, but we're only operating on the public output. */
+ if (!ecp_nistz256_set_words(&r->X, p.p.X) ||
+ !ecp_nistz256_set_words(&r->Y, p.p.Y) ||
+ !ecp_nistz256_set_words(&r->Z, p.p.Z)) {
+ goto err;
+ }
+ r->Z_is_one = is_one(p.p.Z) & 1;
+
+ ret = 1;
+
+err:
+ if (ctx)
+ BN_CTX_end(ctx);
+ BN_CTX_free(new_ctx);
+ if (new_points)
+ OPENSSL_free(new_points);
+ if (new_scalars)
+ OPENSSL_free(new_scalars);
+ return ret;
+}
+
+static int ecp_nistz256_get_affine(const EC_GROUP *group,
+ const EC_POINT *point,
+ BIGNUM *x, BIGNUM *y, BN_CTX *ctx)
+{
+ BN_ULONG z_inv2[P256_LIMBS];
+ BN_ULONG z_inv3[P256_LIMBS];
+ BN_ULONG x_aff[P256_LIMBS];
+ BN_ULONG y_aff[P256_LIMBS];
+ BN_ULONG point_x[P256_LIMBS], point_y[P256_LIMBS], point_z[P256_LIMBS];
+ BN_ULONG x_ret[P256_LIMBS], y_ret[P256_LIMBS];
+
+ if (EC_POINT_is_at_infinity(group, point)) {
+ ECerr(EC_F_ECP_NISTZ256_GET_AFFINE, EC_R_POINT_AT_INFINITY);
+ return 0;
+ }
+
+ if (!ecp_nistz256_bignum_to_field_elem(point_x, &point->X) ||
+ !ecp_nistz256_bignum_to_field_elem(point_y, &point->Y) ||
+ !ecp_nistz256_bignum_to_field_elem(point_z, &point->Z)) {
+ ECerr(EC_F_ECP_NISTZ256_GET_AFFINE, EC_R_COORDINATES_OUT_OF_RANGE);
+ return 0;
+ }
+
+ ecp_nistz256_mod_inverse(z_inv3, point_z);
+ ecp_nistz256_sqr_mont(z_inv2, z_inv3);
+ ecp_nistz256_mul_mont(x_aff, z_inv2, point_x);
+
+ if (x != NULL) {
+ ecp_nistz256_from_mont(x_ret, x_aff);
+ if (!ecp_nistz256_set_words(x, x_ret))
+ return 0;
+ }
+
+ if (y != NULL) {
+ ecp_nistz256_mul_mont(z_inv3, z_inv3, z_inv2);
+ ecp_nistz256_mul_mont(y_aff, z_inv3, point_y);
+ ecp_nistz256_from_mont(y_ret, y_aff);
+ if (!ecp_nistz256_set_words(y, y_ret))
+ return 0;
+ }
+
+ return 1;
+}
+
+static EC_PRE_COMP *ecp_nistz256_pre_comp_new(const EC_GROUP *group)
+{
+ EC_PRE_COMP *ret = NULL;
+
+ if (!group)
+ return NULL;
+
+ ret = (EC_PRE_COMP *)OPENSSL_malloc(sizeof(EC_PRE_COMP));
+
+ if (!ret) {
+ ECerr(EC_F_ECP_NISTZ256_PRE_COMP_NEW, ERR_R_MALLOC_FAILURE);
+ return ret;
+ }
+
+ ret->group = group;
+ ret->w = 6; /* default */
+ ret->precomp = NULL;
+ ret->precomp_storage = NULL;
+ ret->references = 1;
+ return ret;
+}
+
+static void *ecp_nistz256_pre_comp_dup(void *src_)
+{
+ EC_PRE_COMP *src = src_;
+
+ /* no need to actually copy, these objects never change! */
+ CRYPTO_add(&src->references, 1, CRYPTO_LOCK_EC_PRE_COMP);
+
+ return src_;
+}
+
+static void ecp_nistz256_pre_comp_free(void *pre_)
+{
+ int i;
+ EC_PRE_COMP *pre = pre_;
+
+ if (!pre)
+ return;
+
+ i = CRYPTO_add(&pre->references, -1, CRYPTO_LOCK_EC_PRE_COMP);
+ if (i > 0)
+ return;
+
+ if (pre->precomp_storage)
+ OPENSSL_free(pre->precomp_storage);
+
+ OPENSSL_free(pre);
+}
+
+static void ecp_nistz256_pre_comp_clear_free(void *pre_)
+{
+ int i;
+ EC_PRE_COMP *pre = pre_;
+
+ if (!pre)
+ return;
+
+ i = CRYPTO_add(&pre->references, -1, CRYPTO_LOCK_EC_PRE_COMP);
+ if (i > 0)
+ return;
+
+ if (pre->precomp_storage) {
+ OPENSSL_cleanse(pre->precomp,
+ 32 * sizeof(unsigned char) * (1 << pre->w) * 2 * 37);
+ OPENSSL_free(pre->precomp_storage);
+ }
+ OPENSSL_cleanse(pre, sizeof *pre);
+ OPENSSL_free(pre);
+}
+
+static int ecp_nistz256_window_have_precompute_mult(const EC_GROUP *group)
+{
+ /* There is a hard-coded table for the default generator. */
+ const EC_POINT *generator = EC_GROUP_get0_generator(group);
+ if (generator != NULL && ecp_nistz256_is_affine_G(generator)) {
+ /* There is a hard-coded table for the default generator. */
+ return 1;
+ }
+
+ return EC_EX_DATA_get_data(group->extra_data, ecp_nistz256_pre_comp_dup,
+ ecp_nistz256_pre_comp_free,
+ ecp_nistz256_pre_comp_clear_free) != NULL;
+}
+
+const EC_METHOD *EC_GFp_nistz256_method(void)
+{
+ static const EC_METHOD ret = {
+ EC_FLAGS_DEFAULT_OCT,
+ NID_X9_62_prime_field,
+ ec_GFp_mont_group_init,
+ ec_GFp_mont_group_finish,
+ ec_GFp_mont_group_clear_finish,
+ ec_GFp_mont_group_copy,
+ ec_GFp_mont_group_set_curve,
+ ec_GFp_simple_group_get_curve,
+ ec_GFp_simple_group_get_degree,
+ ec_GFp_simple_group_check_discriminant,
+ ec_GFp_simple_point_init,
+ ec_GFp_simple_point_finish,
+ ec_GFp_simple_point_clear_finish,
+ ec_GFp_simple_point_copy,
+ ec_GFp_simple_point_set_to_infinity,
+ ec_GFp_simple_set_Jprojective_coordinates_GFp,
+ ec_GFp_simple_get_Jprojective_coordinates_GFp,
+ ec_GFp_simple_point_set_affine_coordinates,
+ ecp_nistz256_get_affine,
+ 0, 0, 0,
+ ec_GFp_simple_add,
+ ec_GFp_simple_dbl,
+ ec_GFp_simple_invert,
+ ec_GFp_simple_is_at_infinity,
+ ec_GFp_simple_is_on_curve,
+ ec_GFp_simple_cmp,
+ ec_GFp_simple_make_affine,
+ ec_GFp_simple_points_make_affine,
+ ecp_nistz256_points_mul, /* mul */
+ ecp_nistz256_mult_precompute, /* precompute_mult */
+ ecp_nistz256_window_have_precompute_mult, /* have_precompute_mult */
+ ec_GFp_mont_field_mul,
+ ec_GFp_mont_field_sqr,
+ 0, /* field_div */
+ ec_GFp_mont_field_encode,
+ ec_GFp_mont_field_decode,
+ ec_GFp_mont_field_set_to_one
+ };
+
+ return &ret;
+}
diff --git a/crypto/openssl/crypto/ec/ecp_nistz256_table.c b/crypto/openssl/crypto/ec/ecp_nistz256_table.c
new file mode 100644
index 0000000..216d024
--- /dev/null
+++ b/crypto/openssl/crypto/ec/ecp_nistz256_table.c
@@ -0,0 +1,9533 @@
+/*
+ * This is the precomputed constant time access table for the code in
+ * ecp_montp256.c, for the default generator. The table consists of 37
+ * subtables, each subtable contains 64 affine points. The affine points are
+ * encoded as eight uint64's, four for the x coordinate and four for the y.
+ * Both values are in little-endian order. There are 37 tables because a
+ * signed, 6-bit wNAF form of the scalar is used and ceil(256/(6 + 1)) = 37.
+ * Within each table there are 64 values because the 6-bit wNAF value can
+ * take 64 values, ignoring the sign bit, which is implemented by performing
+ * a negation of the affine point when required. We would like to align it
+ * to 2MB in order to increase the chances of using a large page but that
+ * appears to lead to invalid ELF files being produced.
+ */
+
+#if defined(__GNUC__)
+__attribute((aligned(4096)))
+#elif defined(_MSC_VER)
+__declspec(align(4096))
+#elif defined(__SUNPRO_C)
+# pragma align 4096(ecp_nistz256_precomputed)
+#endif
+static const BN_ULONG ecp_nistz256_precomputed[37][64 *
+ sizeof(P256_POINT_AFFINE) /
+ sizeof(BN_ULONG)] = {
+ {TOBN(0x79e730d4, 0x18a9143c), TOBN(0x75ba95fc, 0x5fedb601),
+ TOBN(0x79fb732b, 0x77622510), TOBN(0x18905f76, 0xa53755c6),
+ TOBN(0xddf25357, 0xce95560a), TOBN(0x8b4ab8e4, 0xba19e45c),
+ TOBN(0xd2e88688, 0xdd21f325), TOBN(0x8571ff18, 0x25885d85),
+ TOBN(0x850046d4, 0x10ddd64d), TOBN(0xaa6ae3c1, 0xa433827d),
+ TOBN(0x73220503, 0x8d1490d9), TOBN(0xf6bb32e4, 0x3dcf3a3b),
+ TOBN(0x2f3648d3, 0x61bee1a5), TOBN(0x152cd7cb, 0xeb236ff8),
+ TOBN(0x19a8fb0e, 0x92042dbe), TOBN(0x78c57751, 0x0a5b8a3b),
+ TOBN(0xffac3f90, 0x4eebc127), TOBN(0xb027f84a, 0x087d81fb),
+ TOBN(0x66ad77dd, 0x87cbbc98), TOBN(0x26936a3f, 0xb6ff747e),
+ TOBN(0xb04c5c1f, 0xc983a7eb), TOBN(0x583e47ad, 0x0861fe1a),
+ TOBN(0x78820831, 0x1a2ee98e), TOBN(0xd5f06a29, 0xe587cc07),
+ TOBN(0x74b0b50d, 0x46918dcc), TOBN(0x4650a6ed, 0xc623c173),
+ TOBN(0x0cdaacac, 0xe8100af2), TOBN(0x577362f5, 0x41b0176b),
+ TOBN(0x2d96f24c, 0xe4cbaba6), TOBN(0x17628471, 0xfad6f447),
+ TOBN(0x6b6c36de, 0xe5ddd22e), TOBN(0x84b14c39, 0x4c5ab863),
+ TOBN(0xbe1b8aae, 0xc45c61f5), TOBN(0x90ec649a, 0x94b9537d),
+ TOBN(0x941cb5aa, 0xd076c20c), TOBN(0xc9079605, 0x890523c8),
+ TOBN(0xeb309b4a, 0xe7ba4f10), TOBN(0x73c568ef, 0xe5eb882b),
+ TOBN(0x3540a987, 0x7e7a1f68), TOBN(0x73a076bb, 0x2dd1e916),
+ TOBN(0x40394737, 0x3e77664a), TOBN(0x55ae744f, 0x346cee3e),
+ TOBN(0xd50a961a, 0x5b17a3ad), TOBN(0x13074b59, 0x54213673),
+ TOBN(0x93d36220, 0xd377e44b), TOBN(0x299c2b53, 0xadff14b5),
+ TOBN(0xf424d44c, 0xef639f11), TOBN(0xa4c9916d, 0x4a07f75f),
+ TOBN(0x0746354e, 0xa0173b4f), TOBN(0x2bd20213, 0xd23c00f7),
+ TOBN(0xf43eaab5, 0x0c23bb08), TOBN(0x13ba5119, 0xc3123e03),
+ TOBN(0x2847d030, 0x3f5b9d4d), TOBN(0x6742f2f2, 0x5da67bdd),
+ TOBN(0xef933bdc, 0x77c94195), TOBN(0xeaedd915, 0x6e240867),
+ TOBN(0x27f14cd1, 0x9499a78f), TOBN(0x462ab5c5, 0x6f9b3455),
+ TOBN(0x8f90f02a, 0xf02cfc6b), TOBN(0xb763891e, 0xb265230d),
+ TOBN(0xf59da3a9, 0x532d4977), TOBN(0x21e3327d, 0xcf9eba15),
+ TOBN(0x123c7b84, 0xbe60bbf0), TOBN(0x56ec12f2, 0x7706df76),
+ TOBN(0x75c96e8f, 0x264e20e8), TOBN(0xabe6bfed, 0x59a7a841),
+ TOBN(0x2cc09c04, 0x44c8eb00), TOBN(0xe05b3080, 0xf0c4e16b),
+ TOBN(0x1eb7777a, 0xa45f3314), TOBN(0x56af7bed, 0xce5d45e3),
+ TOBN(0x2b6e019a, 0x88b12f1a), TOBN(0x086659cd, 0xfd835f9b),
+ TOBN(0x2c18dbd1, 0x9dc21ec8), TOBN(0x98f9868a, 0x0fcf8139),
+ TOBN(0x737d2cd6, 0x48250b49), TOBN(0xcc61c947, 0x24b3428f),
+ TOBN(0x0c2b4078, 0x80dd9e76), TOBN(0xc43a8991, 0x383fbe08),
+ TOBN(0x5f7d2d65, 0x779be5d2), TOBN(0x78719a54, 0xeb3b4ab5),
+ TOBN(0xea7d260a, 0x6245e404), TOBN(0x9de40795, 0x6e7fdfe0),
+ TOBN(0x1ff3a415, 0x8dac1ab5), TOBN(0x3e7090f1, 0x649c9073),
+ TOBN(0x1a768561, 0x2b944e88), TOBN(0x250f939e, 0xe57f61c8),
+ TOBN(0x0c0daa89, 0x1ead643d), TOBN(0x68930023, 0xe125b88e),
+ TOBN(0x04b71aa7, 0xd2697768), TOBN(0xabdedef5, 0xca345a33),
+ TOBN(0x2409d29d, 0xee37385e), TOBN(0x4ee1df77, 0xcb83e156),
+ TOBN(0x0cac12d9, 0x1cbb5b43), TOBN(0x170ed2f6, 0xca895637),
+ TOBN(0x28228cfa, 0x8ade6d66), TOBN(0x7ff57c95, 0x53238aca),
+ TOBN(0xccc42563, 0x4b2ed709), TOBN(0x0e356769, 0x856fd30d),
+ TOBN(0xbcbcd43f, 0x559e9811), TOBN(0x738477ac, 0x5395b759),
+ TOBN(0x35752b90, 0xc00ee17f), TOBN(0x68748390, 0x742ed2e3),
+ TOBN(0x7cd06422, 0xbd1f5bc1), TOBN(0xfbc08769, 0xc9e7b797),
+ TOBN(0xa242a35b, 0xb0cf664a), TOBN(0x126e48f7, 0x7f9707e3),
+ TOBN(0x1717bf54, 0xc6832660), TOBN(0xfaae7332, 0xfd12c72e),
+ TOBN(0x27b52db7, 0x995d586b), TOBN(0xbe29569e, 0x832237c2),
+ TOBN(0xe8e4193e, 0x2a65e7db), TOBN(0x152706dc, 0x2eaa1bbb),
+ TOBN(0x72bcd8b7, 0xbc60055b), TOBN(0x03cc23ee, 0x56e27e4b),
+ TOBN(0xee337424, 0xe4819370), TOBN(0xe2aa0e43, 0x0ad3da09),
+ TOBN(0x40b8524f, 0x6383c45d), TOBN(0xd7663554, 0x42a41b25),
+ TOBN(0x64efa6de, 0x778a4797), TOBN(0x2042170a, 0x7079adf4),
+ TOBN(0x808b0b65, 0x0bc6fb80), TOBN(0x5882e075, 0x3ffe2e6b),
+ TOBN(0xd5ef2f7c, 0x2c83f549), TOBN(0x54d63c80, 0x9103b723),
+ TOBN(0xf2f11bd6, 0x52a23f9b), TOBN(0x3670c319, 0x4b0b6587),
+ TOBN(0x55c4623b, 0xb1580e9e), TOBN(0x64edf7b2, 0x01efe220),
+ TOBN(0x97091dcb, 0xd53c5c9d), TOBN(0xf17624b6, 0xac0a177b),
+ TOBN(0xb0f13975, 0x2cfe2dff), TOBN(0xc1a35c0a, 0x6c7a574e),
+ TOBN(0x227d3146, 0x93e79987), TOBN(0x0575bf30, 0xe89cb80e),
+ TOBN(0x2f4e247f, 0x0d1883bb), TOBN(0xebd51226, 0x3274c3d0),
+ TOBN(0x5f3e51c8, 0x56ada97a), TOBN(0x4afc964d, 0x8f8b403e),
+ TOBN(0xa6f247ab, 0x412e2979), TOBN(0x675abd1b, 0x6f80ebda),
+ TOBN(0x66a2bd72, 0x5e485a1d), TOBN(0x4b2a5caf, 0x8f4f0b3c),
+ TOBN(0x2626927f, 0x1b847bba), TOBN(0x6c6fc7d9, 0x0502394d),
+ TOBN(0xfea912ba, 0xa5659ae8), TOBN(0x68363aba, 0x25e1a16e),
+ TOBN(0xb8842277, 0x752c41ac), TOBN(0xfe545c28, 0x2897c3fc),
+ TOBN(0x2d36e9e7, 0xdc4c696b), TOBN(0x5806244a, 0xfba977c5),
+ TOBN(0x85665e9b, 0xe39508c1), TOBN(0xf720ee25, 0x6d12597b),
+ TOBN(0x8a979129, 0xd2337a31), TOBN(0x5916868f, 0x0f862bdc),
+ TOBN(0x048099d9, 0x5dd283ba), TOBN(0xe2d1eeb6, 0xfe5bfb4e),
+ TOBN(0x82ef1c41, 0x7884005d), TOBN(0xa2d4ec17, 0xffffcbae),
+ TOBN(0x9161c53f, 0x8aa95e66), TOBN(0x5ee104e1, 0xc5fee0d0),
+ TOBN(0x562e4cec, 0xc135b208), TOBN(0x74e1b265, 0x4783f47d),
+ TOBN(0x6d2a506c, 0x5a3f3b30), TOBN(0xecead9f4, 0xc16762fc),
+ TOBN(0xf29dd4b2, 0xe286e5b9), TOBN(0x1b0fadc0, 0x83bb3c61),
+ TOBN(0x7a75023e, 0x7fac29a4), TOBN(0xc086d5f1, 0xc9477fa3),
+ TOBN(0x0fc61135, 0x2f6f3076), TOBN(0xc99ffa23, 0xe3912a9a),
+ TOBN(0x6a0b0685, 0xd2f8ba3d), TOBN(0xfdc777e8, 0xe93358a4),
+ TOBN(0x94a787bb, 0x35415f04), TOBN(0x640c2d6a, 0x4d23fea4),
+ TOBN(0x9de917da, 0x153a35b5), TOBN(0x793e8d07, 0x5d5cd074),
+ TOBN(0xf4f87653, 0x2de45068), TOBN(0x37c7a7e8, 0x9e2e1f6e),
+ TOBN(0xd0825fa2, 0xa3584069), TOBN(0xaf2cea7c, 0x1727bf42),
+ TOBN(0x0360a4fb, 0x9e4785a9), TOBN(0xe5fda49c, 0x27299f4a),
+ TOBN(0x48068e13, 0x71ac2f71), TOBN(0x83d0687b, 0x9077666f),
+ TOBN(0x6d3883b2, 0x15d02819), TOBN(0x6d0d7550, 0x40dd9a35),
+ TOBN(0x61d7cbf9, 0x1d2b469f), TOBN(0xf97b232f, 0x2efc3115),
+ TOBN(0xa551d750, 0xb24bcbc7), TOBN(0x11ea4949, 0x88a1e356),
+ TOBN(0x7669f031, 0x93cb7501), TOBN(0x595dc55e, 0xca737b8a),
+ TOBN(0xa4a319ac, 0xd837879f), TOBN(0x6fc1b49e, 0xed6b67b0),
+ TOBN(0xe3959933, 0x32f1f3af), TOBN(0x966742eb, 0x65432a2e),
+ TOBN(0x4b8dc9fe, 0xb4966228), TOBN(0x96cc6312, 0x43f43950),
+ TOBN(0x12068859, 0xc9b731ee), TOBN(0x7b948dc3, 0x56f79968),
+ TOBN(0x61e4ad32, 0xed1f8008), TOBN(0xe6c9267a, 0xd8b17538),
+ TOBN(0x1ac7c5eb, 0x857ff6fb), TOBN(0x994baaa8, 0x55f2fb10),
+ TOBN(0x84cf14e1, 0x1d248018), TOBN(0x5a39898b, 0x628ac508),
+ TOBN(0x14fde97b, 0x5fa944f5), TOBN(0xed178030, 0xd12e5ac7),
+ TOBN(0x042c2af4, 0x97e2feb4), TOBN(0xd36a42d7, 0xaebf7313),
+ TOBN(0x49d2c9eb, 0x084ffdd7), TOBN(0x9f8aa54b, 0x2ef7c76a),
+ TOBN(0x9200b7ba, 0x09895e70), TOBN(0x3bd0c66f, 0xddb7fb58),
+ TOBN(0x2d97d108, 0x78eb4cbb), TOBN(0x2d431068, 0xd84bde31),
+ TOBN(0x4b523eb7, 0x172ccd1f), TOBN(0x7323cb28, 0x30a6a892),
+ TOBN(0x97082ec0, 0xcfe153eb), TOBN(0xe97f6b6a, 0xf2aadb97),
+ TOBN(0x1d3d393e, 0xd1a83da1), TOBN(0xa6a7f9c7, 0x804b2a68),
+ TOBN(0x4a688b48, 0x2d0cb71e), TOBN(0xa9b4cc5f, 0x40585278),
+ TOBN(0x5e5db46a, 0xcb66e132), TOBN(0xf1be963a, 0x0d925880),
+ TOBN(0x944a7027, 0x0317b9e2), TOBN(0xe266f959, 0x48603d48),
+ TOBN(0x98db6673, 0x5c208899), TOBN(0x90472447, 0xa2fb18a3),
+ TOBN(0x8a966939, 0x777c619f), TOBN(0x3798142a, 0x2a3be21b),
+ TOBN(0xb4241cb1, 0x3298b343), TOBN(0xa3a14e49, 0xb44f65a1),
+ TOBN(0xc5f4d6cd, 0x3ac77acd), TOBN(0xd0288cb5, 0x52b6fc3c),
+ TOBN(0xd5cc8c2f, 0x1c040abc), TOBN(0xb675511e, 0x06bf9b4a),
+ TOBN(0xd667da37, 0x9b3aa441), TOBN(0x460d45ce, 0x51601f72),
+ TOBN(0xe2f73c69, 0x6755ff89), TOBN(0xdd3cf7e7, 0x473017e6),
+ TOBN(0x8ef5689d, 0x3cf7600d), TOBN(0x948dc4f8, 0xb1fc87b4),
+ TOBN(0xd9e9fe81, 0x4ea53299), TOBN(0x2d921ca2, 0x98eb6028),
+ TOBN(0xfaecedfd, 0x0c9803fc), TOBN(0xf38ae891, 0x4d7b4745),
+ TOBN(0xd8c5fccf, 0xc5e3a3d8), TOBN(0xbefd904c, 0x4079dfbf),
+ TOBN(0xbc6d6a58, 0xfead0197), TOBN(0x39227077, 0x695532a4),
+ TOBN(0x09e23e6d, 0xdbef42f5), TOBN(0x7e449b64, 0x480a9908),
+ TOBN(0x7b969c1a, 0xad9a2e40), TOBN(0x6231d792, 0x9591c2a4),
+ TOBN(0x87151456, 0x0f664534), TOBN(0x85ceae7c, 0x4b68f103),
+ TOBN(0xac09c4ae, 0x65578ab9), TOBN(0x33ec6868, 0xf044b10c),
+ TOBN(0x6ac4832b, 0x3a8ec1f1), TOBN(0x5509d128, 0x5847d5ef),
+ TOBN(0xf909604f, 0x763f1574), TOBN(0xb16c4303, 0xc32f63c4),
+ TOBN(0xb6ab2014, 0x7ca23cd3), TOBN(0xcaa7a5c6, 0xa391849d),
+ TOBN(0x5b0673a3, 0x75678d94), TOBN(0xc982ddd4, 0xdd303e64),
+ TOBN(0xfd7b000b, 0x5db6f971), TOBN(0xbba2cb1f, 0x6f876f92),
+ TOBN(0xc77332a3, 0x3c569426), TOBN(0xa159100c, 0x570d74f8),
+ TOBN(0xfd16847f, 0xdec67ef5), TOBN(0x742ee464, 0x233e76b7),
+ TOBN(0x0b8e4134, 0xefc2b4c8), TOBN(0xca640b86, 0x42a3e521),
+ TOBN(0x653a0190, 0x8ceb6aa9), TOBN(0x313c300c, 0x547852d5),
+ TOBN(0x24e4ab12, 0x6b237af7), TOBN(0x2ba90162, 0x8bb47af8),
+ TOBN(0x3d5e58d6, 0xa8219bb7), TOBN(0xc691d0bd, 0x1b06c57f),
+ TOBN(0x0ae4cb10, 0xd257576e), TOBN(0x3569656c, 0xd54a3dc3),
+ TOBN(0xe5ebaebd, 0x94cda03a), TOBN(0x934e82d3, 0x162bfe13),
+ TOBN(0x450ac0ba, 0xe251a0c6), TOBN(0x480b9e11, 0xdd6da526),
+ TOBN(0x00467bc5, 0x8cce08b5), TOBN(0xb636458c, 0x7f178d55),
+ TOBN(0xc5748bae, 0xa677d806), TOBN(0x2763a387, 0xdfa394eb),
+ TOBN(0xa12b448a, 0x7d3cebb6), TOBN(0xe7adda3e, 0x6f20d850),
+ TOBN(0xf63ebce5, 0x1558462c), TOBN(0x58b36143, 0x620088a8),
+ TOBN(0x8a2cc3ca, 0x4d63c0ee), TOBN(0x51233117, 0x0fe948ce),
+ TOBN(0x7463fd85, 0x222ef33b), TOBN(0xadf0c7dc, 0x7c603d6c),
+ TOBN(0x0ec32d3b, 0xfe7765e5), TOBN(0xccaab359, 0xbf380409),
+ TOBN(0xbdaa84d6, 0x8e59319c), TOBN(0xd9a4c280, 0x9c80c34d),
+ TOBN(0xa9d89488, 0xa059c142), TOBN(0x6f5ae714, 0xff0b9346),
+ TOBN(0x068f237d, 0x16fb3664), TOBN(0x5853e4c4, 0x363186ac),
+ TOBN(0xe2d87d23, 0x63c52f98), TOBN(0x2ec4a766, 0x81828876),
+ TOBN(0x47b864fa, 0xe14e7b1c), TOBN(0x0c0bc0e5, 0x69192408),
+ TOBN(0xe4d7681d, 0xb82e9f3e), TOBN(0x83200f0b, 0xdf25e13c),
+ TOBN(0x8909984c, 0x66f27280), TOBN(0x462d7b00, 0x75f73227),
+ TOBN(0xd90ba188, 0xf2651798), TOBN(0x74c6e18c, 0x36ab1c34),
+ TOBN(0xab256ea3, 0x5ef54359), TOBN(0x03466612, 0xd1aa702f),
+ TOBN(0x624d6049, 0x2ed22e91), TOBN(0x6fdfe0b5, 0x6f072822),
+ TOBN(0xeeca1115, 0x39ce2271), TOBN(0x98100a4f, 0xdb01614f),
+ TOBN(0xb6b0daa2, 0xa35c628f), TOBN(0xb6f94d2e, 0xc87e9a47),
+ TOBN(0xc6773259, 0x1d57d9ce), TOBN(0xf70bfeec, 0x03884a7b),
+ TOBN(0x5fb35ccf, 0xed2bad01), TOBN(0xa155cbe3, 0x1da6a5c7),
+ TOBN(0xc2e2594c, 0x30a92f8f), TOBN(0x649c89ce, 0x5bfafe43),
+ TOBN(0xd158667d, 0xe9ff257a), TOBN(0x9b359611, 0xf32c50ae),
+ TOBN(0x4b00b20b, 0x906014cf), TOBN(0xf3a8cfe3, 0x89bc7d3d),
+ TOBN(0x4ff23ffd, 0x248a7d06), TOBN(0x80c5bfb4, 0x878873fa),
+ TOBN(0xb7d9ad90, 0x05745981), TOBN(0x179c85db, 0x3db01994),
+ TOBN(0xba41b062, 0x61a6966c), TOBN(0x4d82d052, 0xeadce5a8),
+ TOBN(0x9e91cd3b, 0xa5e6a318), TOBN(0x47795f4f, 0x95b2dda0),
+ TOBN(0xecfd7c1f, 0xd55a897c), TOBN(0x009194ab, 0xb29110fb),
+ TOBN(0x5f0e2046, 0xe381d3b0), TOBN(0x5f3425f6, 0xa98dd291),
+ TOBN(0xbfa06687, 0x730d50da), TOBN(0x0423446c, 0x4b083b7f),
+ TOBN(0x397a247d, 0xd69d3417), TOBN(0xeb629f90, 0x387ba42a),
+ TOBN(0x1ee426cc, 0xd5cd79bf), TOBN(0x0032940b, 0x946c6e18),
+ TOBN(0x1b1e8ae0, 0x57477f58), TOBN(0xe94f7d34, 0x6d823278),
+ TOBN(0xc747cb96, 0x782ba21a), TOBN(0xc5254469, 0xf72b33a5),
+ TOBN(0x772ef6de, 0xc7f80c81), TOBN(0xd73acbfe, 0x2cd9e6b5),
+ TOBN(0x4075b5b1, 0x49ee90d9), TOBN(0x785c339a, 0xa06e9eba),
+ TOBN(0xa1030d5b, 0xabf825e0), TOBN(0xcec684c3, 0xa42931dc),
+ TOBN(0x42ab62c9, 0xc1586e63), TOBN(0x45431d66, 0x5ab43f2b),
+ TOBN(0x57c8b2c0, 0x55f7835d), TOBN(0x033da338, 0xc1b7f865),
+ TOBN(0x283c7513, 0xcaa76097), TOBN(0x0a624fa9, 0x36c83906),
+ TOBN(0x6b20afec, 0x715af2c7), TOBN(0x4b969974, 0xeba78bfd),
+ TOBN(0x220755cc, 0xd921d60e), TOBN(0x9b944e10, 0x7baeca13),
+ TOBN(0x04819d51, 0x5ded93d4), TOBN(0x9bbff86e, 0x6dddfd27),
+ TOBN(0x6b344130, 0x77adc612), TOBN(0xa7496529, 0xbbd803a0),
+ TOBN(0x1a1baaa7, 0x6d8805bd), TOBN(0xc8403902, 0x470343ad),
+ TOBN(0x39f59f66, 0x175adff1), TOBN(0x0b26d7fb, 0xb7d8c5b7),
+ TOBN(0xa875f5ce, 0x529d75e3), TOBN(0x85efc7e9, 0x41325cc2),
+ TOBN(0x21950b42, 0x1ff6acd3), TOBN(0xffe70484, 0x53dc6909),
+ TOBN(0xff4cd0b2, 0x28766127), TOBN(0xabdbe608, 0x4fb7db2b),
+ TOBN(0x837c9228, 0x5e1109e8), TOBN(0x26147d27, 0xf4645b5a),
+ TOBN(0x4d78f592, 0xf7818ed8), TOBN(0xd394077e, 0xf247fa36),
+ TOBN(0x0fb9c2d0, 0x488c171a), TOBN(0xa78bfbaa, 0x13685278),
+ TOBN(0xedfbe268, 0xd5b1fa6a), TOBN(0x0dceb8db, 0x2b7eaba7),
+ TOBN(0xbf9e8089, 0x9ae2b710), TOBN(0xefde7ae6, 0xa4449c96),
+ TOBN(0x43b7716b, 0xcc143a46), TOBN(0xd7d34194, 0xc3628c13),
+ TOBN(0x508cec1c, 0x3b3f64c9), TOBN(0xe20bc0ba, 0x1e5edf3f),
+ TOBN(0xda1deb85, 0x2f4318d4), TOBN(0xd20ebe0d, 0x5c3fa443),
+ TOBN(0x370b4ea7, 0x73241ea3), TOBN(0x61f1511c, 0x5e1a5f65),
+ TOBN(0x99a5e23d, 0x82681c62), TOBN(0xd731e383, 0xa2f54c2d),
+ TOBN(0x2692f36e, 0x83445904), TOBN(0x2e0ec469, 0xaf45f9c0),
+ TOBN(0x905a3201, 0xc67528b7), TOBN(0x88f77f34, 0xd0e5e542),
+ TOBN(0xf67a8d29, 0x5864687c), TOBN(0x23b92eae, 0x22df3562),
+ TOBN(0x5c27014b, 0x9bbec39e), TOBN(0x7ef2f226, 0x9c0f0f8d),
+ TOBN(0x97359638, 0x546c4d8d), TOBN(0x5f9c3fc4, 0x92f24679),
+ TOBN(0x912e8bed, 0xa8c8acd9), TOBN(0xec3a318d, 0x306634b0),
+ TOBN(0x80167f41, 0xc31cb264), TOBN(0x3db82f6f, 0x522113f2),
+ TOBN(0xb155bcd2, 0xdcafe197), TOBN(0xfba1da59, 0x43465283),
+ TOBN(0xa0425b8e, 0xb212cf53), TOBN(0x4f2e512e, 0xf8557c5f),
+ TOBN(0xc1286ff9, 0x25c4d56c), TOBN(0xbb8a0fea, 0xee26c851),
+ TOBN(0xc28f70d2, 0xe7d6107e), TOBN(0x7ee0c444, 0xe76265aa),
+ TOBN(0x3df277a4, 0x1d1936b1), TOBN(0x1a556e3f, 0xea9595eb),
+ TOBN(0x258bbbf9, 0xe7305683), TOBN(0x31eea5bf, 0x07ef5be6),
+ TOBN(0x0deb0e4a, 0x46c814c1), TOBN(0x5cee8449, 0xa7b730dd),
+ TOBN(0xeab495c5, 0xa0182bde), TOBN(0xee759f87, 0x9e27a6b4),
+ TOBN(0xc2cf6a68, 0x80e518ca), TOBN(0x25e8013f, 0xf14cf3f4),
+ TOBN(0x8fc44140, 0x7e8d7a14), TOBN(0xbb1ff3ca, 0x9556f36a),
+ TOBN(0x6a844385, 0x14600044), TOBN(0xba3f0c4a, 0x7451ae63),
+ TOBN(0xdfcac25b, 0x1f9af32a), TOBN(0x01e0db86, 0xb1f2214b),
+ TOBN(0x4e9a5bc2, 0xa4b596ac), TOBN(0x83927681, 0x026c2c08),
+ TOBN(0x3ec832e7, 0x7acaca28), TOBN(0x1bfeea57, 0xc7385b29),
+ TOBN(0x068212e3, 0xfd1eaf38), TOBN(0xc1329830, 0x6acf8ccc),
+ TOBN(0xb909f2db, 0x2aac9e59), TOBN(0x5748060d, 0xb661782a),
+ TOBN(0xc5ab2632, 0xc79b7a01), TOBN(0xda44c6c6, 0x00017626),
+ TOBN(0xf26c00e8, 0xa7ea82f0), TOBN(0x99cac80d, 0xe4299aaf),
+ TOBN(0xd66fe3b6, 0x7ed78be1), TOBN(0x305f725f, 0x648d02cd),
+ TOBN(0x33ed1bc4, 0x623fb21b), TOBN(0xfa70533e, 0x7a6319ad),
+ TOBN(0x17ab562d, 0xbe5ffb3e), TOBN(0x06374994, 0x56674741),
+ TOBN(0x69d44ed6, 0x5c46aa8e), TOBN(0x2100d5d3, 0xa8d063d1),
+ TOBN(0xcb9727ea, 0xa2d17c36), TOBN(0x4c2bab1b, 0x8add53b7),
+ TOBN(0xa084e90c, 0x15426704), TOBN(0x778afcd3, 0xa837ebea),
+ TOBN(0x6651f701, 0x7ce477f8), TOBN(0xa0624998, 0x46fb7a8b),
+ TOBN(0xdc1e6828, 0xed8a6e19), TOBN(0x33fc2336, 0x4189d9c7),
+ TOBN(0x026f8fe2, 0x671c39bc), TOBN(0xd40c4ccd, 0xbc6f9915),
+ TOBN(0xafa135bb, 0xf80e75ca), TOBN(0x12c651a0, 0x22adff2c),
+ TOBN(0xc40a04bd, 0x4f51ad96), TOBN(0x04820109, 0xbbe4e832),
+ TOBN(0x3667eb1a, 0x7f4c04cc), TOBN(0x59556621, 0xa9404f84),
+ TOBN(0x71cdf653, 0x7eceb50a), TOBN(0x994a44a6, 0x9b8335fa),
+ TOBN(0xd7faf819, 0xdbeb9b69), TOBN(0x473c5680, 0xeed4350d),
+ TOBN(0xb6658466, 0xda44bba2), TOBN(0x0d1bc780, 0x872bdbf3),
+ TOBN(0xe535f175, 0xa1962f91), TOBN(0x6ed7e061, 0xed58f5a7),
+ TOBN(0x177aa4c0, 0x2089a233), TOBN(0x0dbcb03a, 0xe539b413),
+ TOBN(0xe3dc424e, 0xbb32e38e), TOBN(0x6472e5ef, 0x6806701e),
+ TOBN(0xdd47ff98, 0x814be9ee), TOBN(0x6b60cfff, 0x35ace009),
+ TOBN(0xb8d3d931, 0x9ff91fe5), TOBN(0x039c4800, 0xf0518eed),
+ TOBN(0x95c37632, 0x9182cb26), TOBN(0x0763a434, 0x82fc568d),
+ TOBN(0x707c04d5, 0x383e76ba), TOBN(0xac98b930, 0x824e8197),
+ TOBN(0x92bf7c8f, 0x91230de0), TOBN(0x90876a01, 0x40959b70),
+ TOBN(0xdb6d96f3, 0x05968b80), TOBN(0x380a0913, 0x089f73b9),
+ TOBN(0x7da70b83, 0xc2c61e01), TOBN(0x95fb8394, 0x569b38c7),
+ TOBN(0x9a3c6512, 0x80edfe2f), TOBN(0x8f726bb9, 0x8faeaf82),
+ TOBN(0x8010a4a0, 0x78424bf8), TOBN(0x29672044, 0x0e844970)}
+ ,
+ {TOBN(0x63c5cb81, 0x7a2ad62a), TOBN(0x7ef2b6b9, 0xac62ff54),
+ TOBN(0x3749bba4, 0xb3ad9db5), TOBN(0xad311f2c, 0x46d5a617),
+ TOBN(0xb77a8087, 0xc2ff3b6d), TOBN(0xb46feaf3, 0x367834ff),
+ TOBN(0xf8aa266d, 0x75d6b138), TOBN(0xfa38d320, 0xec008188),
+ TOBN(0x486d8ffa, 0x696946fc), TOBN(0x50fbc6d8, 0xb9cba56d),
+ TOBN(0x7e3d423e, 0x90f35a15), TOBN(0x7c3da195, 0xc0dd962c),
+ TOBN(0xe673fdb0, 0x3cfd5d8b), TOBN(0x0704b7c2, 0x889dfca5),
+ TOBN(0xf6ce581f, 0xf52305aa), TOBN(0x399d49eb, 0x914d5e53),
+ TOBN(0x380a496d, 0x6ec293cd), TOBN(0x733dbda7, 0x8e7051f5),
+ TOBN(0x037e388d, 0xb849140a), TOBN(0xee4b32b0, 0x5946dbf6),
+ TOBN(0xb1c4fda9, 0xcae368d1), TOBN(0x5001a7b0, 0xfdb0b2f3),
+ TOBN(0x6df59374, 0x2e3ac46e), TOBN(0x4af675f2, 0x39b3e656),
+ TOBN(0x44e38110, 0x39949296), TOBN(0x5b63827b, 0x361db1b5),
+ TOBN(0x3e5323ed, 0x206eaff5), TOBN(0x942370d2, 0xc21f4290),
+ TOBN(0xf2caaf2e, 0xe0d985a1), TOBN(0x192cc64b, 0x7239846d),
+ TOBN(0x7c0b8f47, 0xae6312f8), TOBN(0x7dc61f91, 0x96620108),
+ TOBN(0xb830fb5b, 0xc2da7de9), TOBN(0xd0e643df, 0x0ff8d3be),
+ TOBN(0x31ee77ba, 0x188a9641), TOBN(0x4e8aa3aa, 0xbcf6d502),
+ TOBN(0xf9fb6532, 0x9a49110f), TOBN(0xd18317f6, 0x2dd6b220),
+ TOBN(0x7e3ced41, 0x52c3ea5a), TOBN(0x0d296a14, 0x7d579c4a),
+ TOBN(0x35d6a53e, 0xed4c3717), TOBN(0x9f8240cf, 0x3d0ed2a3),
+ TOBN(0x8c0d4d05, 0xe5543aa5), TOBN(0x45d5bbfb, 0xdd33b4b4),
+ TOBN(0xfa04cc73, 0x137fd28e), TOBN(0x862ac6ef, 0xc73b3ffd),
+ TOBN(0x403ff9f5, 0x31f51ef2), TOBN(0x34d5e0fc, 0xbc73f5a2),
+ TOBN(0xf2526820, 0x08913f4f), TOBN(0xea20ed61, 0xeac93d95),
+ TOBN(0x51ed38b4, 0x6ca6b26c), TOBN(0x8662dcbc, 0xea4327b0),
+ TOBN(0x6daf295c, 0x725d2aaa), TOBN(0xbad2752f, 0x8e52dcda),
+ TOBN(0x2210e721, 0x0b17dacc), TOBN(0xa37f7912, 0xd51e8232),
+ TOBN(0x4f7081e1, 0x44cc3add), TOBN(0xd5ffa1d6, 0x87be82cf),
+ TOBN(0x89890b6c, 0x0edd6472), TOBN(0xada26e1a, 0x3ed17863),
+ TOBN(0x276f2715, 0x63483caa), TOBN(0xe6924cd9, 0x2f6077fd),
+ TOBN(0x05a7fe98, 0x0a466e3c), TOBN(0xf1c794b0, 0xb1902d1f),
+ TOBN(0xe5213688, 0x82a8042c), TOBN(0xd931cfaf, 0xcd278298),
+ TOBN(0x069a0ae0, 0xf597a740), TOBN(0x0adbb3f3, 0xeb59107c),
+ TOBN(0x983e951e, 0x5eaa8eb8), TOBN(0xe663a8b5, 0x11b48e78),
+ TOBN(0x1631cc0d, 0x8a03f2c5), TOBN(0x7577c11e, 0x11e271e2),
+ TOBN(0x33b2385c, 0x08369a90), TOBN(0x2990c59b, 0x190eb4f8),
+ TOBN(0x819a6145, 0xc68eac80), TOBN(0x7a786d62, 0x2ec4a014),
+ TOBN(0x33faadbe, 0x20ac3a8d), TOBN(0x31a21781, 0x5aba2d30),
+ TOBN(0x209d2742, 0xdba4f565), TOBN(0xdb2ce9e3, 0x55aa0fbb),
+ TOBN(0x8cef334b, 0x168984df), TOBN(0xe81dce17, 0x33879638),
+ TOBN(0xf6e6949c, 0x263720f0), TOBN(0x5c56feaf, 0xf593cbec),
+ TOBN(0x8bff5601, 0xfde58c84), TOBN(0x74e24117, 0x2eccb314),
+ TOBN(0xbcf01b61, 0x4c9a8a78), TOBN(0xa233e35e, 0x544c9868),
+ TOBN(0xb3156bf3, 0x8bd7aff1), TOBN(0x1b5ee4cb, 0x1d81b146),
+ TOBN(0x7ba1ac41, 0xd628a915), TOBN(0x8f3a8f9c, 0xfd89699e),
+ TOBN(0x7329b9c9, 0xa0748be7), TOBN(0x1d391c95, 0xa92e621f),
+ TOBN(0xe51e6b21, 0x4d10a837), TOBN(0xd255f53a, 0x4947b435),
+ TOBN(0x07669e04, 0xf1788ee3), TOBN(0xc14f27af, 0xa86938a2),
+ TOBN(0x8b47a334, 0xe93a01c0), TOBN(0xff627438, 0xd9366808),
+ TOBN(0x7a0985d8, 0xca2a5965), TOBN(0x3d9a5542, 0xd6e9b9b3),
+ TOBN(0xc23eb80b, 0x4cf972e8), TOBN(0x5c1c33bb, 0x4fdf72fd),
+ TOBN(0x0c4a58d4, 0x74a86108), TOBN(0xf8048a8f, 0xee4c5d90),
+ TOBN(0xe3c7c924, 0xe86d4c80), TOBN(0x28c889de, 0x056a1e60),
+ TOBN(0x57e2662e, 0xb214a040), TOBN(0xe8c48e98, 0x37e10347),
+ TOBN(0x87742862, 0x80ac748a), TOBN(0xf1c24022, 0x186b06f2),
+ TOBN(0xac2dd4c3, 0x5f74040a), TOBN(0x409aeb71, 0xfceac957),
+ TOBN(0x4fbad782, 0x55c4ec23), TOBN(0xb359ed61, 0x8a7b76ec),
+ TOBN(0x12744926, 0xed6f4a60), TOBN(0xe21e8d7f, 0x4b912de3),
+ TOBN(0xe2575a59, 0xfc705a59), TOBN(0x72f1d4de, 0xed2dbc0e),
+ TOBN(0x3d2b24b9, 0xeb7926b8), TOBN(0xbff88cb3, 0xcdbe5509),
+ TOBN(0xd0f399af, 0xe4dd640b), TOBN(0x3c5fe130, 0x2f76ed45),
+ TOBN(0x6f3562f4, 0x3764fb3d), TOBN(0x7b5af318, 0x3151b62d),
+ TOBN(0xd5bd0bc7, 0xd79ce5f3), TOBN(0xfdaf6b20, 0xec66890f),
+ TOBN(0x735c67ec, 0x6063540c), TOBN(0x50b259c2, 0xe5f9cb8f),
+ TOBN(0xb8734f9a, 0x3f99c6ab), TOBN(0xf8cc13d5, 0xa3a7bc85),
+ TOBN(0x80c1b305, 0xc5217659), TOBN(0xfe5364d4, 0x4ec12a54),
+ TOBN(0xbd87045e, 0x681345fe), TOBN(0x7f8efeb1, 0x582f897f),
+ TOBN(0xe8cbf1e5, 0xd5923359), TOBN(0xdb0cea9d, 0x539b9fb0),
+ TOBN(0x0c5b34cf, 0x49859b98), TOBN(0x5e583c56, 0xa4403cc6),
+ TOBN(0x11fc1a2d, 0xd48185b7), TOBN(0xc93fbc7e, 0x6e521787),
+ TOBN(0x47e7a058, 0x05105b8b), TOBN(0x7b4d4d58, 0xdb8260c8),
+ TOBN(0xe33930b0, 0x46eb842a), TOBN(0x8e844a9a, 0x7bdae56d),
+ TOBN(0x34ef3a9e, 0x13f7fdfc), TOBN(0xb3768f82, 0x636ca176),
+ TOBN(0x2821f4e0, 0x4e09e61c), TOBN(0x414dc3a1, 0xa0c7cddc),
+ TOBN(0xd5379437, 0x54945fcd), TOBN(0x151b6eef, 0xb3555ff1),
+ TOBN(0xb31bd613, 0x6339c083), TOBN(0x39ff8155, 0xdfb64701),
+ TOBN(0x7c3388d2, 0xe29604ab), TOBN(0x1e19084b, 0xa6b10442),
+ TOBN(0x17cf54c0, 0xeccd47ef), TOBN(0x89693385, 0x4a5dfb30),
+ TOBN(0x69d023fb, 0x47daf9f6), TOBN(0x9222840b, 0x7d91d959),
+ TOBN(0x439108f5, 0x803bac62), TOBN(0x0b7dd91d, 0x379bd45f),
+ TOBN(0xd651e827, 0xca63c581), TOBN(0x5c5d75f6, 0x509c104f),
+ TOBN(0x7d5fc738, 0x1f2dc308), TOBN(0x20faa7bf, 0xd98454be),
+ TOBN(0x95374bee, 0xa517b031), TOBN(0xf036b9b1, 0x642692ac),
+ TOBN(0xc5106109, 0x39842194), TOBN(0xb7e2353e, 0x49d05295),
+ TOBN(0xfc8c1d5c, 0xefb42ee0), TOBN(0xe04884eb, 0x08ce811c),
+ TOBN(0xf1f75d81, 0x7419f40e), TOBN(0x5b0ac162, 0xa995c241),
+ TOBN(0x120921bb, 0xc4c55646), TOBN(0x713520c2, 0x8d33cf97),
+ TOBN(0xb4a65a5c, 0xe98c5100), TOBN(0x6cec871d, 0x2ddd0f5a),
+ TOBN(0x251f0b7f, 0x9ba2e78b), TOBN(0x224a8434, 0xce3a2a5f),
+ TOBN(0x26827f61, 0x25f5c46f), TOBN(0x6a22bedc, 0x48545ec0),
+ TOBN(0x25ae5fa0, 0xb1bb5cdc), TOBN(0xd693682f, 0xfcb9b98f),
+ TOBN(0x32027fe8, 0x91e5d7d3), TOBN(0xf14b7d17, 0x73a07678),
+ TOBN(0xf88497b3, 0xc0dfdd61), TOBN(0xf7c2eec0, 0x2a8c4f48),
+ TOBN(0xaa5573f4, 0x3756e621), TOBN(0xc013a240, 0x1825b948),
+ TOBN(0x1c03b345, 0x63878572), TOBN(0xa0472bea, 0x653a4184),
+ TOBN(0xf4222e27, 0x0ac69a80), TOBN(0x34096d25, 0xf51e54f6),
+ TOBN(0x00a648cb, 0x8fffa591), TOBN(0x4e87acdc, 0x69b6527f),
+ TOBN(0x0575e037, 0xe285ccb4), TOBN(0x188089e4, 0x50ddcf52),
+ TOBN(0xaa96c9a8, 0x870ff719), TOBN(0x74a56cd8, 0x1fc7e369),
+ TOBN(0x41d04ee2, 0x1726931a), TOBN(0x0bbbb2c8, 0x3660ecfd),
+ TOBN(0xa6ef6de5, 0x24818e18), TOBN(0xe421cc51, 0xe7d57887),
+ TOBN(0xf127d208, 0xbea87be6), TOBN(0x16a475d3, 0xb1cdd682),
+ TOBN(0x9db1b684, 0x439b63f7), TOBN(0x5359b3db, 0xf0f113b6),
+ TOBN(0xdfccf1de, 0x8bf06e31), TOBN(0x1fdf8f44, 0xdd383901),
+ TOBN(0x10775cad, 0x5017e7d2), TOBN(0xdfc3a597, 0x58d11eef),
+ TOBN(0x6ec9c8a0, 0xb1ecff10), TOBN(0xee6ed6cc, 0x28400549),
+ TOBN(0xb5ad7bae, 0x1b4f8d73), TOBN(0x61b4f11d, 0xe00aaab9),
+ TOBN(0x7b32d69b, 0xd4eff2d7), TOBN(0x88ae6771, 0x4288b60f),
+ TOBN(0x159461b4, 0x37a1e723), TOBN(0x1f3d4789, 0x570aae8c),
+ TOBN(0x869118c0, 0x7f9871da), TOBN(0x35fbda78, 0xf635e278),
+ TOBN(0x738f3641, 0xe1541dac), TOBN(0x6794b13a, 0xc0dae45f),
+ TOBN(0x065064ac, 0x09cc0917), TOBN(0x27c53729, 0xc68540fd),
+ TOBN(0x0d2d4c8e, 0xef227671), TOBN(0xd23a9f80, 0xa1785a04),
+ TOBN(0x98c59528, 0x52650359), TOBN(0xfa09ad01, 0x74a1acad),
+ TOBN(0x082d5a29, 0x0b55bf5c), TOBN(0xa40f1c67, 0x419b8084),
+ TOBN(0x3a5c752e, 0xdcc18770), TOBN(0x4baf1f2f, 0x8825c3a5),
+ TOBN(0xebd63f74, 0x21b153ed), TOBN(0xa2383e47, 0xb2f64723),
+ TOBN(0xe7bf620a, 0x2646d19a), TOBN(0x56cb44ec, 0x03c83ffd),
+ TOBN(0xaf7267c9, 0x4f6be9f1), TOBN(0x8b2dfd7b, 0xc06bb5e9),
+ TOBN(0xb87072f2, 0xa672c5c7), TOBN(0xeacb11c8, 0x0d53c5e2),
+ TOBN(0x22dac29d, 0xff435932), TOBN(0x37bdb99d, 0x4408693c),
+ TOBN(0xf6e62fb6, 0x2899c20f), TOBN(0x3535d512, 0x447ece24),
+ TOBN(0xfbdc6b88, 0xff577ce3), TOBN(0x726693bd, 0x190575f2),
+ TOBN(0x6772b0e5, 0xab4b35a2), TOBN(0x1d8b6001, 0xf5eeaacf),
+ TOBN(0x728f7ce4, 0x795b9580), TOBN(0x4a20ed2a, 0x41fb81da),
+ TOBN(0x9f685cd4, 0x4fec01e6), TOBN(0x3ed7ddcc, 0xa7ff50ad),
+ TOBN(0x460fd264, 0x0c2d97fd), TOBN(0x3a241426, 0xeb82f4f9),
+ TOBN(0x17d1df2c, 0x6a8ea820), TOBN(0xb2b50d3b, 0xf22cc254),
+ TOBN(0x03856cba, 0xb7291426), TOBN(0x87fd26ae, 0x04f5ee39),
+ TOBN(0x9cb696cc, 0x02bee4ba), TOBN(0x53121804, 0x06820fd6),
+ TOBN(0xa5dfc269, 0x0212e985), TOBN(0x666f7ffa, 0x160f9a09),
+ TOBN(0xc503cd33, 0xbccd9617), TOBN(0x365dede4, 0xba7730a3),
+ TOBN(0x798c6355, 0x5ddb0786), TOBN(0xa6c3200e, 0xfc9cd3bc),
+ TOBN(0x060ffb2c, 0xe5e35efd), TOBN(0x99a4e25b, 0x5555a1c1),
+ TOBN(0x11d95375, 0xf70b3751), TOBN(0x0a57354a, 0x160e1bf6),
+ TOBN(0xecb3ae4b, 0xf8e4b065), TOBN(0x07a834c4, 0x2e53022b),
+ TOBN(0x1cd300b3, 0x8692ed96), TOBN(0x16a6f792, 0x61ee14ec),
+ TOBN(0x8f1063c6, 0x6a8649ed), TOBN(0xfbcdfcfe, 0x869f3e14),
+ TOBN(0x2cfb97c1, 0x00a7b3ec), TOBN(0xcea49b3c, 0x7130c2f1),
+ TOBN(0x462d044f, 0xe9d96488), TOBN(0x4b53d52e, 0x8182a0c1),
+ TOBN(0x84b6ddd3, 0x0391e9e9), TOBN(0x80ab7b48, 0xb1741a09),
+ TOBN(0xec0e15d4, 0x27d3317f), TOBN(0x8dfc1ddb, 0x1a64671e),
+ TOBN(0x93cc5d5f, 0xd49c5b92), TOBN(0xc995d53d, 0x3674a331),
+ TOBN(0x302e41ec, 0x090090ae), TOBN(0x2278a0cc, 0xedb06830),
+ TOBN(0x1d025932, 0xfbc99690), TOBN(0x0c32fbd2, 0xb80d68da),
+ TOBN(0xd79146da, 0xf341a6c1), TOBN(0xae0ba139, 0x1bef68a0),
+ TOBN(0xc6b8a563, 0x8d774b3a), TOBN(0x1cf307bd, 0x880ba4d7),
+ TOBN(0xc033bdc7, 0x19803511), TOBN(0xa9f97b3b, 0x8888c3be),
+ TOBN(0x3d68aebc, 0x85c6d05e), TOBN(0xc3b88a9d, 0x193919eb),
+ TOBN(0x2d300748, 0xc48b0ee3), TOBN(0x7506bc7c, 0x07a746c1),
+ TOBN(0xfc48437c, 0x6e6d57f3), TOBN(0x5bd71587, 0xcfeaa91a),
+ TOBN(0xa4ed0408, 0xc1bc5225), TOBN(0xd0b946db, 0x2719226d),
+ TOBN(0x109ecd62, 0x758d2d43), TOBN(0x75c8485a, 0x2751759b),
+ TOBN(0xb0b75f49, 0x9ce4177a), TOBN(0x4fa61a1e, 0x79c10c3d),
+ TOBN(0xc062d300, 0xa167fcd7), TOBN(0x4df3874c, 0x750f0fa8),
+ TOBN(0x29ae2cf9, 0x83dfedc9), TOBN(0xf8437134, 0x8d87631a),
+ TOBN(0xaf571711, 0x7429c8d2), TOBN(0x18d15867, 0x146d9272),
+ TOBN(0x83053ecf, 0x69769bb7), TOBN(0xc55eb856, 0xc479ab82),
+ TOBN(0x5ef7791c, 0x21b0f4b2), TOBN(0xaa5956ba, 0x3d491525),
+ TOBN(0x407a96c2, 0x9fe20eba), TOBN(0xf27168bb, 0xe52a5ad3),
+ TOBN(0x43b60ab3, 0xbf1d9d89), TOBN(0xe45c51ef, 0x710e727a),
+ TOBN(0xdfca5276, 0x099b4221), TOBN(0x8dc6407c, 0x2557a159),
+ TOBN(0x0ead8335, 0x91035895), TOBN(0x0a9db957, 0x9c55dc32),
+ TOBN(0xe40736d3, 0xdf61bc76), TOBN(0x13a619c0, 0x3f778cdb),
+ TOBN(0x6dd921a4, 0xc56ea28f), TOBN(0x76a52433, 0x2fa647b4),
+ TOBN(0x23591891, 0xac5bdc5d), TOBN(0xff4a1a72, 0xbac7dc01),
+ TOBN(0x9905e261, 0x62df8453), TOBN(0x3ac045df, 0xe63b265f),
+ TOBN(0x8a3f341b, 0xad53dba7), TOBN(0x8ec269cc, 0x837b625a),
+ TOBN(0xd71a2782, 0x3ae31189), TOBN(0x8fb4f9a3, 0x55e96120),
+ TOBN(0x804af823, 0xff9875cf), TOBN(0x23224f57, 0x5d442a9b),
+ TOBN(0x1c4d3b9e, 0xecc62679), TOBN(0x91da22fb, 0xa0e7ddb1),
+ TOBN(0xa370324d, 0x6c04a661), TOBN(0x9710d3b6, 0x5e376d17),
+ TOBN(0xed8c98f0, 0x3044e357), TOBN(0xc364ebbe, 0x6422701c),
+ TOBN(0x347f5d51, 0x7733d61c), TOBN(0xd55644b9, 0xcea826c3),
+ TOBN(0x80c6e0ad, 0x55a25548), TOBN(0x0aa7641d, 0x844220a7),
+ TOBN(0x1438ec81, 0x31810660), TOBN(0x9dfa6507, 0xde4b4043),
+ TOBN(0x10b515d8, 0xcc3e0273), TOBN(0x1b6066dd, 0x28d8cfb2),
+ TOBN(0xd3b04591, 0x9c9efebd), TOBN(0x425d4bdf, 0xa21c1ff4),
+ TOBN(0x5fe5af19, 0xd57607d3), TOBN(0xbbf773f7, 0x54481084),
+ TOBN(0x8435bd69, 0x94b03ed1), TOBN(0xd9ad1de3, 0x634cc546),
+ TOBN(0x2cf423fc, 0x00e420ca), TOBN(0xeed26d80, 0xa03096dd),
+ TOBN(0xd7f60be7, 0xa4db09d2), TOBN(0xf47f569d, 0x960622f7),
+ TOBN(0xe5925fd7, 0x7296c729), TOBN(0xeff2db26, 0x26ca2715),
+ TOBN(0xa6fcd014, 0xb913e759), TOBN(0x53da4786, 0x8ff4de93),
+ TOBN(0x14616d79, 0xc32068e1), TOBN(0xb187d664, 0xccdf352e),
+ TOBN(0xf7afb650, 0x1dc90b59), TOBN(0x8170e943, 0x7daa1b26),
+ TOBN(0xc8e3bdd8, 0x700c0a84), TOBN(0x6e8d345f, 0x6482bdfa),
+ TOBN(0x84cfbfa1, 0xc5c5ea50), TOBN(0xd3baf14c, 0x67960681),
+ TOBN(0x26398403, 0x0dd50942), TOBN(0xe4b7839c, 0x4716a663),
+ TOBN(0xd5f1f794, 0xe7de6dc0), TOBN(0x5cd0f4d4, 0x622aa7ce),
+ TOBN(0x5295f3f1, 0x59acfeec), TOBN(0x8d933552, 0x953e0607),
+ TOBN(0xc7db8ec5, 0x776c5722), TOBN(0xdc467e62, 0x2b5f290c),
+ TOBN(0xd4297e70, 0x4ff425a9), TOBN(0x4be924c1, 0x0cf7bb72),
+ TOBN(0x0d5dc5ae, 0xa1892131), TOBN(0x8bf8a8e3, 0xa705c992),
+ TOBN(0x73a0b064, 0x7a305ac5), TOBN(0x00c9ca4e, 0x9a8c77a8),
+ TOBN(0x5dfee80f, 0x83774bdd), TOBN(0x63131602, 0x85734485),
+ TOBN(0xa1b524ae, 0x914a69a9), TOBN(0xebc2ffaf, 0xd4e300d7),
+ TOBN(0x52c93db7, 0x7cfa46a5), TOBN(0x71e6161f, 0x21653b50),
+ TOBN(0x3574fc57, 0xa4bc580a), TOBN(0xc09015dd, 0xe1bc1253),
+ TOBN(0x4b7b47b2, 0xd174d7aa), TOBN(0x4072d8e8, 0xf3a15d04),
+ TOBN(0xeeb7d47f, 0xd6fa07ed), TOBN(0x6f2b9ff9, 0xedbdafb1),
+ TOBN(0x18c51615, 0x3760fe8a), TOBN(0x7a96e6bf, 0xf06c6c13),
+ TOBN(0x4d7a0410, 0x0ea2d071), TOBN(0xa1914e9b, 0x0be2a5ce),
+ TOBN(0x5726e357, 0xd8a3c5cf), TOBN(0x1197ecc3, 0x2abb2b13),
+ TOBN(0x6c0d7f7f, 0x31ae88dd), TOBN(0x15b20d1a, 0xfdbb3efe),
+ TOBN(0xcd06aa26, 0x70584039), TOBN(0x2277c969, 0xa7dc9747),
+ TOBN(0xbca69587, 0x7855d815), TOBN(0x899ea238, 0x5188b32a),
+ TOBN(0x37d9228b, 0x760c1c9d), TOBN(0xc7efbb11, 0x9b5c18da),
+ TOBN(0x7f0d1bc8, 0x19f6dbc5), TOBN(0x4875384b, 0x07e6905b),
+ TOBN(0xc7c50baa, 0x3ba8cd86), TOBN(0xb0ce40fb, 0xc2905de0),
+ TOBN(0x70840673, 0x7a231952), TOBN(0xa912a262, 0xcf43de26),
+ TOBN(0x9c38ddcc, 0xeb5b76c1), TOBN(0x746f5285, 0x26fc0ab4),
+ TOBN(0x52a63a50, 0xd62c269f), TOBN(0x60049c55, 0x99458621),
+ TOBN(0xe7f48f82, 0x3c2f7c9e), TOBN(0x6bd99043, 0x917d5cf3),
+ TOBN(0xeb1317a8, 0x8701f469), TOBN(0xbd3fe2ed, 0x9a449fe0),
+ TOBN(0x421e79ca, 0x12ef3d36), TOBN(0x9ee3c36c, 0x3e7ea5de),
+ TOBN(0xe48198b5, 0xcdff36f7), TOBN(0xaff4f967, 0xc6b82228),
+ TOBN(0x15e19dd0, 0xc47adb7e), TOBN(0x45699b23, 0x032e7dfa),
+ TOBN(0x40680c8b, 0x1fae026a), TOBN(0x5a347a48, 0x550dbf4d),
+ TOBN(0xe652533b, 0x3cef0d7d), TOBN(0xd94f7b18, 0x2bbb4381),
+ TOBN(0x838752be, 0x0e80f500), TOBN(0x8e6e2488, 0x9e9c9bfb),
+ TOBN(0xc9751697, 0x16caca6a), TOBN(0x866c49d8, 0x38531ad9),
+ TOBN(0xc917e239, 0x7151ade1), TOBN(0x2d016ec1, 0x6037c407),
+ TOBN(0xa407ccc9, 0x00eac3f9), TOBN(0x835f6280, 0xe2ed4748),
+ TOBN(0xcc54c347, 0x1cc98e0d), TOBN(0x0e969937, 0xdcb572eb),
+ TOBN(0x1b16c8e8, 0x8f30c9cb), TOBN(0xa606ae75, 0x373c4661),
+ TOBN(0x47aa689b, 0x35502cab), TOBN(0xf89014ae, 0x4d9bb64f),
+ TOBN(0x202f6a9c, 0x31c71f7b), TOBN(0x01f95aa3, 0x296ffe5c),
+ TOBN(0x5fc06014, 0x53cec3a3), TOBN(0xeb991237, 0x5f498a45),
+ TOBN(0xae9a935e, 0x5d91ba87), TOBN(0xc6ac6281, 0x0b564a19),
+ TOBN(0x8a8fe81c, 0x3bd44e69), TOBN(0x7c8b467f, 0x9dd11d45),
+ TOBN(0xf772251f, 0xea5b8e69), TOBN(0xaeecb3bd, 0xc5b75fbc),
+ TOBN(0x1aca3331, 0x887ff0e5), TOBN(0xbe5d49ff, 0x19f0a131),
+ TOBN(0x582c13aa, 0xe5c8646f), TOBN(0xdbaa12e8, 0x20e19980),
+ TOBN(0x8f40f31a, 0xf7abbd94), TOBN(0x1f13f5a8, 0x1dfc7663),
+ TOBN(0x5d81f1ee, 0xaceb4fc0), TOBN(0x36256002, 0x5e6f0f42),
+ TOBN(0x4b67d6d7, 0x751370c8), TOBN(0x2608b698, 0x03e80589),
+ TOBN(0xcfc0d2fc, 0x05268301), TOBN(0xa6943d39, 0x40309212),
+ TOBN(0x192a90c2, 0x1fd0e1c2), TOBN(0xb209f113, 0x37f1dc76),
+ TOBN(0xefcc5e06, 0x97bf1298), TOBN(0xcbdb6730, 0x219d639e),
+ TOBN(0xd009c116, 0xb81e8c6f), TOBN(0xa3ffdde3, 0x1a7ce2e5),
+ TOBN(0xc53fbaaa, 0xa914d3ba), TOBN(0x836d500f, 0x88df85ee),
+ TOBN(0xd98dc71b, 0x66ee0751), TOBN(0x5a3d7005, 0x714516fd),
+ TOBN(0x21d3634d, 0x39eedbba), TOBN(0x35cd2e68, 0x0455a46d),
+ TOBN(0xc8cafe65, 0xf9d7eb0c), TOBN(0xbda3ce9e, 0x00cefb3e),
+ TOBN(0xddc17a60, 0x2c9cf7a4), TOBN(0x01572ee4, 0x7bcb8773),
+ TOBN(0xa92b2b01, 0x8c7548df), TOBN(0x732fd309, 0xa84600e3),
+ TOBN(0xe22109c7, 0x16543a40), TOBN(0x9acafd36, 0xfede3c6c),
+ TOBN(0xfb206852, 0x6824e614), TOBN(0x2a4544a9, 0xda25dca0),
+ TOBN(0x25985262, 0x91d60b06), TOBN(0x281b7be9, 0x28753545),
+ TOBN(0xec667b1a, 0x90f13b27), TOBN(0x33a83aff, 0x940e2eb4),
+ TOBN(0x80009862, 0xd5d721d5), TOBN(0x0c3357a3, 0x5bd3a182),
+ TOBN(0x27f3a83b, 0x7aa2cda4), TOBN(0xb58ae74e, 0xf6f83085),
+ TOBN(0x2a911a81, 0x2e6dad6b), TOBN(0xde286051, 0xf43d6c5b),
+ TOBN(0x4bdccc41, 0xf996c4d8), TOBN(0xe7312ec0, 0x0ae1e24e)}
+ ,
+ {TOBN(0xf8d112e7, 0x6e6485b3), TOBN(0x4d3e24db, 0x771c52f8),
+ TOBN(0x48e3ee41, 0x684a2f6d), TOBN(0x7161957d, 0x21d95551),
+ TOBN(0x19631283, 0xcdb12a6c), TOBN(0xbf3fa882, 0x2e50e164),
+ TOBN(0xf6254b63, 0x3166cc73), TOBN(0x3aefa7ae, 0xaee8cc38),
+ TOBN(0x79b0fe62, 0x3b36f9fd), TOBN(0x26543b23, 0xfde19fc0),
+ TOBN(0x136e64a0, 0x958482ef), TOBN(0x23f63771, 0x9b095825),
+ TOBN(0x14cfd596, 0xb6a1142e), TOBN(0x5ea6aac6, 0x335aac0b),
+ TOBN(0x86a0e8bd, 0xf3081dd5), TOBN(0x5fb89d79, 0x003dc12a),
+ TOBN(0xf615c33a, 0xf72e34d4), TOBN(0x0bd9ea40, 0x110eec35),
+ TOBN(0x1c12bc5b, 0xc1dea34e), TOBN(0x686584c9, 0x49ae4699),
+ TOBN(0x13ad95d3, 0x8c97b942), TOBN(0x4609561a, 0x4e5c7562),
+ TOBN(0x9e94a4ae, 0xf2737f89), TOBN(0xf57594c6, 0x371c78b6),
+ TOBN(0x0f0165fc, 0xe3779ee3), TOBN(0xe00e7f9d, 0xbd495d9e),
+ TOBN(0x1fa4efa2, 0x20284e7a), TOBN(0x4564bade, 0x47ac6219),
+ TOBN(0x90e6312a, 0xc4708e8e), TOBN(0x4f5725fb, 0xa71e9adf),
+ TOBN(0xe95f55ae, 0x3d684b9f), TOBN(0x47f7ccb1, 0x1e94b415),
+ TOBN(0x7322851b, 0x8d946581), TOBN(0xf0d13133, 0xbdf4a012),
+ TOBN(0xa3510f69, 0x6584dae0), TOBN(0x03a7c171, 0x3c9f6c6d),
+ TOBN(0x5be97f38, 0xe475381a), TOBN(0xca1ba422, 0x85823334),
+ TOBN(0xf83cc5c7, 0x0be17dda), TOBN(0x158b1494, 0x0b918c0f),
+ TOBN(0xda3a77e5, 0x522e6b69), TOBN(0x69c908c3, 0xbbcd6c18),
+ TOBN(0x1f1b9e48, 0xd924fd56), TOBN(0x37c64e36, 0xaa4bb3f7),
+ TOBN(0x5a4fdbdf, 0xee478d7d), TOBN(0xba75c8bc, 0x0193f7a0),
+ TOBN(0x84bc1e84, 0x56cd16df), TOBN(0x1fb08f08, 0x46fad151),
+ TOBN(0x8a7cabf9, 0x842e9f30), TOBN(0xa331d4bf, 0x5eab83af),
+ TOBN(0xd272cfba, 0x017f2a6a), TOBN(0x27560abc, 0x83aba0e3),
+ TOBN(0x94b83387, 0x0e3a6b75), TOBN(0x25c6aea2, 0x6b9f50f5),
+ TOBN(0x803d691d, 0xb5fdf6d0), TOBN(0x03b77509, 0xe6333514),
+ TOBN(0x36178903, 0x61a341c1), TOBN(0x3604dc60, 0x0cfd6142),
+ TOBN(0x022295eb, 0x8533316c), TOBN(0x3dbde4ac, 0x44af2922),
+ TOBN(0x898afc5d, 0x1c7eef69), TOBN(0x58896805, 0xd14f4fa1),
+ TOBN(0x05002160, 0x203c21ca), TOBN(0x6f0d1f30, 0x40ef730b),
+ TOBN(0x8e8c44d4, 0x196224f8), TOBN(0x75a4ab95, 0x374d079d),
+ TOBN(0x79085ecc, 0x7d48f123), TOBN(0x56f04d31, 0x1bf65ad8),
+ TOBN(0xe220bf1c, 0xbda602b2), TOBN(0x73ee1742, 0xf9612c69),
+ TOBN(0x76008fc8, 0x084fd06b), TOBN(0x4000ef9f, 0xf11380d1),
+ TOBN(0x48201b4b, 0x12cfe297), TOBN(0x3eee129c, 0x292f74e5),
+ TOBN(0xe1fe114e, 0xc9e874e8), TOBN(0x899b055c, 0x92c5fc41),
+ TOBN(0x4e477a64, 0x3a39c8cf), TOBN(0x82f09efe, 0x78963cc9),
+ TOBN(0x6fd3fd8f, 0xd333f863), TOBN(0x85132b2a, 0xdc949c63),
+ TOBN(0x7e06a3ab, 0x516eb17b), TOBN(0x73bec06f, 0xd2c7372b),
+ TOBN(0xe4f74f55, 0xba896da6), TOBN(0xbb4afef8, 0x8e9eb40f),
+ TOBN(0x2d75bec8, 0xe61d66b0), TOBN(0x02bda4b4, 0xef29300b),
+ TOBN(0x8bbaa8de, 0x026baa5a), TOBN(0xff54befd, 0xa07f4440),
+ TOBN(0xbd9b8b1d, 0xbe7a2af3), TOBN(0xec51caa9, 0x4fb74a72),
+ TOBN(0xb9937a4b, 0x63879697), TOBN(0x7c9a9d20, 0xec2687d5),
+ TOBN(0x1773e44f, 0x6ef5f014), TOBN(0x8abcf412, 0xe90c6900),
+ TOBN(0x387bd022, 0x8142161e), TOBN(0x50393755, 0xfcb6ff2a),
+ TOBN(0x9813fd56, 0xed6def63), TOBN(0x53cf6482, 0x7d53106c),
+ TOBN(0x991a35bd, 0x431f7ac1), TOBN(0xf1e274dd, 0x63e65faf),
+ TOBN(0xf63ffa3c, 0x44cc7880), TOBN(0x411a426b, 0x7c256981),
+ TOBN(0xb698b9fd, 0x93a420e0), TOBN(0x89fdddc0, 0xae53f8fe),
+ TOBN(0x766e0722, 0x32398baa), TOBN(0x205fee42, 0x5cfca031),
+ TOBN(0xa49f5341, 0x7a029cf2), TOBN(0xa88c68b8, 0x4023890d),
+ TOBN(0xbc275041, 0x7337aaa8), TOBN(0x9ed364ad, 0x0eb384f4),
+ TOBN(0xe0816f85, 0x29aba92f), TOBN(0x2e9e1941, 0x04e38a88),
+ TOBN(0x57eef44a, 0x3dafd2d5), TOBN(0x35d1fae5, 0x97ed98d8),
+ TOBN(0x50628c09, 0x2307f9b1), TOBN(0x09d84aae, 0xd6cba5c6),
+ TOBN(0x67071bc7, 0x88aaa691), TOBN(0x2dea57a9, 0xafe6cb03),
+ TOBN(0xdfe11bb4, 0x3d78ac01), TOBN(0x7286418c, 0x7fd7aa51),
+ TOBN(0xfabf7709, 0x77f7195a), TOBN(0x8ec86167, 0xadeb838f),
+ TOBN(0xea1285a8, 0xbb4f012d), TOBN(0xd6883503, 0x9a3eab3f),
+ TOBN(0xee5d24f8, 0x309004c2), TOBN(0xa96e4b76, 0x13ffe95e),
+ TOBN(0x0cdffe12, 0xbd223ea4), TOBN(0x8f5c2ee5, 0xb6739a53),
+ TOBN(0x5cb4aaa5, 0xdd968198), TOBN(0xfa131c52, 0x72413a6c),
+ TOBN(0x53d46a90, 0x9536d903), TOBN(0xb270f0d3, 0x48606d8e),
+ TOBN(0x518c7564, 0xa053a3bc), TOBN(0x088254b7, 0x1a86caef),
+ TOBN(0xb3ba8cb4, 0x0ab5efd0), TOBN(0x5c59900e, 0x4605945d),
+ TOBN(0xecace1dd, 0xa1887395), TOBN(0x40960f36, 0x932a65de),
+ TOBN(0x9611ff5c, 0x3aa95529), TOBN(0xc58215b0, 0x7c1e5a36),
+ TOBN(0xd48c9b58, 0xf0e1a524), TOBN(0xb406856b, 0xf590dfb8),
+ TOBN(0xc7605e04, 0x9cd95662), TOBN(0x0dd036ee, 0xa33ecf82),
+ TOBN(0xa50171ac, 0xc33156b3), TOBN(0xf09d24ea, 0x4a80172e),
+ TOBN(0x4e1f72c6, 0x76dc8eef), TOBN(0xe60caadc, 0x5e3d44ee),
+ TOBN(0x006ef8a6, 0x979b1d8f), TOBN(0x60908a1c, 0x97788d26),
+ TOBN(0x6e08f95b, 0x266feec0), TOBN(0x618427c2, 0x22e8c94e),
+ TOBN(0x3d613339, 0x59145a65), TOBN(0xcd9bc368, 0xfa406337),
+ TOBN(0x82d11be3, 0x2d8a52a0), TOBN(0xf6877b27, 0x97a1c590),
+ TOBN(0x837a819b, 0xf5cbdb25), TOBN(0x2a4fd1d8, 0xde090249),
+ TOBN(0x622a7de7, 0x74990e5f), TOBN(0x840fa5a0, 0x7945511b),
+ TOBN(0x30b974be, 0x6558842d), TOBN(0x70df8c64, 0x17f3d0a6),
+ TOBN(0x7c803520, 0x7542e46d), TOBN(0x7251fe7f, 0xe4ecc823),
+ TOBN(0xe59134cb, 0x5e9aac9a), TOBN(0x11bb0934, 0xf0045d71),
+ TOBN(0x53e5d9b5, 0xdbcb1d4e), TOBN(0x8d97a905, 0x92defc91),
+ TOBN(0xfe289327, 0x7946d3f9), TOBN(0xe132bd24, 0x07472273),
+ TOBN(0xeeeb510c, 0x1eb6ae86), TOBN(0x777708c5, 0xf0595067),
+ TOBN(0x18e2c8cd, 0x1297029e), TOBN(0x2c61095c, 0xbbf9305e),
+ TOBN(0xe466c258, 0x6b85d6d9), TOBN(0x8ac06c36, 0xda1ea530),
+ TOBN(0xa365dc39, 0xa1304668), TOBN(0xe4a9c885, 0x07f89606),
+ TOBN(0x65a4898f, 0xacc7228d), TOBN(0x3e2347ff, 0x84ca8303),
+ TOBN(0xa5f6fb77, 0xea7d23a3), TOBN(0x2fac257d, 0x672a71cd),
+ TOBN(0x6908bef8, 0x7e6a44d3), TOBN(0x8ff87566, 0x891d3d7a),
+ TOBN(0xe58e90b3, 0x6b0cf82e), TOBN(0x6438d246, 0x2615b5e7),
+ TOBN(0x07b1f8fc, 0x669c145a), TOBN(0xb0d8b2da, 0x36f1e1cb),
+ TOBN(0x54d5dadb, 0xd9184c4d), TOBN(0x3dbb18d5, 0xf93d9976),
+ TOBN(0x0a3e0f56, 0xd1147d47), TOBN(0x2afa8c8d, 0xa0a48609),
+ TOBN(0x275353e8, 0xbc36742c), TOBN(0x898f427e, 0xeea0ed90),
+ TOBN(0x26f4947e, 0x3e477b00), TOBN(0x8ad8848a, 0x308741e3),
+ TOBN(0x6c703c38, 0xd74a2a46), TOBN(0x5e3e05a9, 0x9ba17ba2),
+ TOBN(0xc1fa6f66, 0x4ab9a9e4), TOBN(0x474a2d9a, 0x3841d6ec),
+ TOBN(0x871239ad, 0x653ae326), TOBN(0x14bcf72a, 0xa74cbb43),
+ TOBN(0x8737650e, 0x20d4c083), TOBN(0x3df86536, 0x110ed4af),
+ TOBN(0xd2d86fe7, 0xb53ca555), TOBN(0x688cb00d, 0xabd5d538),
+ TOBN(0xcf81bda3, 0x1ad38468), TOBN(0x7ccfe3cc, 0xf01167b6),
+ TOBN(0xcf4f47e0, 0x6c4c1fe6), TOBN(0x557e1f1a, 0x298bbb79),
+ TOBN(0xf93b974f, 0x30d45a14), TOBN(0x174a1d2d, 0x0baf97c4),
+ TOBN(0x7a003b30, 0xc51fbf53), TOBN(0xd8940991, 0xee68b225),
+ TOBN(0x5b0aa7b7, 0x1c0f4173), TOBN(0x975797c9, 0xa20a7153),
+ TOBN(0x26e08c07, 0xe3533d77), TOBN(0xd7222e6a, 0x2e341c99),
+ TOBN(0x9d60ec3d, 0x8d2dc4ed), TOBN(0xbdfe0d8f, 0x7c476cf8),
+ TOBN(0x1fe59ab6, 0x1d056605), TOBN(0xa9ea9df6, 0x86a8551f),
+ TOBN(0x8489941e, 0x47fb8d8c), TOBN(0xfeb874eb, 0x4a7f1b10),
+ TOBN(0xfe5fea86, 0x7ee0d98f), TOBN(0x201ad34b, 0xdbf61864),
+ TOBN(0x45d8fe47, 0x37c031d4), TOBN(0xd5f49fae, 0x795f0822),
+ TOBN(0xdb0fb291, 0xc7f4a40c), TOBN(0x2e69d9c1, 0x730ddd92),
+ TOBN(0x754e1054, 0x49d76987), TOBN(0x8a24911d, 0x7662db87),
+ TOBN(0x61fc1810, 0x60a71676), TOBN(0xe852d1a8, 0xf66a8ad1),
+ TOBN(0x172bbd65, 0x6417231e), TOBN(0x0d6de7bd, 0x3babb11f),
+ TOBN(0x6fde6f88, 0xc8e347f8), TOBN(0x1c587547, 0x9bd99cc3),
+ TOBN(0x78e54ed0, 0x34076950), TOBN(0x97f0f334, 0x796e83ba),
+ TOBN(0xe4dbe1ce, 0x4924867a), TOBN(0xbd5f51b0, 0x60b84917),
+ TOBN(0x37530040, 0x3cb09a79), TOBN(0xdb3fe0f8, 0xff1743d8),
+ TOBN(0xed7894d8, 0x556fa9db), TOBN(0xfa262169, 0x23412fbf),
+ TOBN(0x563be0db, 0xba7b9291), TOBN(0x6ca8b8c0, 0x0c9fb234),
+ TOBN(0xed406aa9, 0xbd763802), TOBN(0xc21486a0, 0x65303da1),
+ TOBN(0x61ae291e, 0xc7e62ec4), TOBN(0x622a0492, 0xdf99333e),
+ TOBN(0x7fd80c9d, 0xbb7a8ee0), TOBN(0xdc2ed3bc, 0x6c01aedb),
+ TOBN(0x35c35a12, 0x08be74ec), TOBN(0xd540cb1a, 0x469f671f),
+ TOBN(0xd16ced4e, 0xcf84f6c7), TOBN(0x8561fb9c, 0x2d090f43),
+ TOBN(0x7e693d79, 0x6f239db4), TOBN(0xa736f928, 0x77bd0d94),
+ TOBN(0x07b4d929, 0x2c1950ee), TOBN(0xda177543, 0x56dc11b3),
+ TOBN(0xa5dfbbaa, 0x7a6a878e), TOBN(0x1c70cb29, 0x4decb08a),
+ TOBN(0xfba28c8b, 0x6f0f7c50), TOBN(0xa8eba2b8, 0x854dcc6d),
+ TOBN(0x5ff8e89a, 0x36b78642), TOBN(0x070c1c8e, 0xf6873adf),
+ TOBN(0xbbd3c371, 0x6484d2e4), TOBN(0xfb78318f, 0x0d414129),
+ TOBN(0x2621a39c, 0x6ad93b0b), TOBN(0x979d74c2, 0xa9e917f7),
+ TOBN(0xfc195647, 0x61fb0428), TOBN(0x4d78954a, 0xbee624d4),
+ TOBN(0xb94896e0, 0xb8ae86fd), TOBN(0x6667ac0c, 0xc91c8b13),
+ TOBN(0x9f180512, 0x43bcf832), TOBN(0xfbadf8b7, 0xa0010137),
+ TOBN(0xc69b4089, 0xb3ba8aa7), TOBN(0xfac4bacd, 0xe687ce85),
+ TOBN(0x9164088d, 0x977eab40), TOBN(0x51f4c5b6, 0x2760b390),
+ TOBN(0xd238238f, 0x340dd553), TOBN(0x358566c3, 0xdb1d31c9),
+ TOBN(0x3a5ad69e, 0x5068f5ff), TOBN(0xf31435fc, 0xdaff6b06),
+ TOBN(0xae549a5b, 0xd6debff0), TOBN(0x59e5f0b7, 0x75e01331),
+ TOBN(0x5d492fb8, 0x98559acf), TOBN(0x96018c2e, 0x4db79b50),
+ TOBN(0x55f4a48f, 0x609f66aa), TOBN(0x1943b3af, 0x4900a14f),
+ TOBN(0xc22496df, 0x15a40d39), TOBN(0xb2a44684, 0x4c20f7c5),
+ TOBN(0x76a35afa, 0x3b98404c), TOBN(0xbec75725, 0xff5d1b77),
+ TOBN(0xb67aa163, 0xbea06444), TOBN(0x27e95bb2, 0xf724b6f2),
+ TOBN(0x3c20e3e9, 0xd238c8ab), TOBN(0x1213754e, 0xddd6ae17),
+ TOBN(0x8c431020, 0x716e0f74), TOBN(0x6679c82e, 0xffc095c2),
+ TOBN(0x2eb3adf4, 0xd0ac2932), TOBN(0x2cc970d3, 0x01bb7a76),
+ TOBN(0x70c71f2f, 0x740f0e66), TOBN(0x545c616b, 0x2b6b23cc),
+ TOBN(0x4528cfcb, 0xb40a8bd7), TOBN(0xff839633, 0x2ab27722),
+ TOBN(0x049127d9, 0x025ac99a), TOBN(0xd314d4a0, 0x2b63e33b),
+ TOBN(0xc8c310e7, 0x28d84519), TOBN(0x0fcb8983, 0xb3bc84ba),
+ TOBN(0x2cc52261, 0x38634818), TOBN(0x501814f4, 0xb44c2e0b),
+ TOBN(0xf7e181aa, 0x54dfdba3), TOBN(0xcfd58ff0, 0xe759718c),
+ TOBN(0xf90cdb14, 0xd3b507a8), TOBN(0x57bd478e, 0xc50bdad8),
+ TOBN(0x29c197e2, 0x50e5f9aa), TOBN(0x4db6eef8, 0xe40bc855),
+ TOBN(0x2cc8f21a, 0xd1fc0654), TOBN(0xc71cc963, 0x81269d73),
+ TOBN(0xecfbb204, 0x077f49f9), TOBN(0xdde92571, 0xca56b793),
+ TOBN(0x9abed6a3, 0xf97ad8f7), TOBN(0xe6c19d3f, 0x924de3bd),
+ TOBN(0x8dce92f4, 0xa140a800), TOBN(0x85f44d1e, 0x1337af07),
+ TOBN(0x5953c08b, 0x09d64c52), TOBN(0xa1b5e49f, 0xf5df9749),
+ TOBN(0x336a8fb8, 0x52735f7d), TOBN(0xb332b6db, 0x9add676b),
+ TOBN(0x558b88a0, 0xb4511aa4), TOBN(0x09788752, 0xdbd5cc55),
+ TOBN(0x16b43b9c, 0xd8cd52bd), TOBN(0x7f0bc5a0, 0xc2a2696b),
+ TOBN(0x146e12d4, 0xc11f61ef), TOBN(0x9ce10754, 0x3a83e79e),
+ TOBN(0x08ec73d9, 0x6cbfca15), TOBN(0x09ff29ad, 0x5b49653f),
+ TOBN(0xe31b72bd, 0xe7da946e), TOBN(0xebf9eb3b, 0xee80a4f2),
+ TOBN(0xd1aabd08, 0x17598ce4), TOBN(0x18b5fef4, 0x53f37e80),
+ TOBN(0xd5d5cdd3, 0x5958cd79), TOBN(0x3580a1b5, 0x1d373114),
+ TOBN(0xa36e4c91, 0xfa935726), TOBN(0xa38c534d, 0xef20d760),
+ TOBN(0x7088e40a, 0x2ff5845b), TOBN(0xe5bb40bd, 0xbd78177f),
+ TOBN(0x4f06a7a8, 0x857f9920), TOBN(0xe3cc3e50, 0xe968f05d),
+ TOBN(0x1d68b7fe, 0xe5682d26), TOBN(0x5206f76f, 0xaec7f87c),
+ TOBN(0x41110530, 0x041951ab), TOBN(0x58ec52c1, 0xd4b5a71a),
+ TOBN(0xf3488f99, 0x0f75cf9a), TOBN(0xf411951f, 0xba82d0d5),
+ TOBN(0x27ee75be, 0x618895ab), TOBN(0xeae060d4, 0x6d8aab14),
+ TOBN(0x9ae1df73, 0x7fb54dc2), TOBN(0x1f3e391b, 0x25963649),
+ TOBN(0x242ec32a, 0xfe055081), TOBN(0x5bd450ef, 0x8491c9bd),
+ TOBN(0x367efc67, 0x981eb389), TOBN(0xed7e1928, 0x3a0550d5),
+ TOBN(0x362e776b, 0xab3ce75c), TOBN(0xe890e308, 0x1f24c523),
+ TOBN(0xb961b682, 0xfeccef76), TOBN(0x8b8e11f5, 0x8bba6d92),
+ TOBN(0x8f2ccc4c, 0x2b2375c4), TOBN(0x0d7f7a52, 0xe2f86cfa),
+ TOBN(0xfd94d30a, 0x9efe5633), TOBN(0x2d8d246b, 0x5451f934),
+ TOBN(0x2234c6e3, 0x244e6a00), TOBN(0xde2b5b0d, 0xddec8c50),
+ TOBN(0x2ce53c5a, 0xbf776f5b), TOBN(0x6f724071, 0x60357b05),
+ TOBN(0xb2593717, 0x71bf3f7a), TOBN(0x87d2501c, 0x440c4a9f),
+ TOBN(0x440552e1, 0x87b05340), TOBN(0xb7bf7cc8, 0x21624c32),
+ TOBN(0x4155a6ce, 0x22facddb), TOBN(0x5a4228cb, 0x889837ef),
+ TOBN(0xef87d6d6, 0xfd4fd671), TOBN(0xa233687e, 0xc2daa10e),
+ TOBN(0x75622244, 0x03c0eb96), TOBN(0x7632d184, 0x8bf19be6),
+ TOBN(0x05d0f8e9, 0x40735ff4), TOBN(0x3a3e6e13, 0xc00931f1),
+ TOBN(0x31ccde6a, 0xdafe3f18), TOBN(0xf381366a, 0xcfe51207),
+ TOBN(0x24c222a9, 0x60167d92), TOBN(0x62f9d6f8, 0x7529f18c),
+ TOBN(0x412397c0, 0x0353b114), TOBN(0x334d89dc, 0xef808043),
+ TOBN(0xd9ec63ba, 0x2a4383ce), TOBN(0xcec8e937, 0x5cf92ba0),
+ TOBN(0xfb8b4288, 0xc8be74c0), TOBN(0x67d6912f, 0x105d4391),
+ TOBN(0x7b996c46, 0x1b913149), TOBN(0x36aae2ef, 0x3a4e02da),
+ TOBN(0xb68aa003, 0x972de594), TOBN(0x284ec70d, 0x4ec6d545),
+ TOBN(0xf3d2b2d0, 0x61391d54), TOBN(0x69c5d5d6, 0xfe114e92),
+ TOBN(0xbe0f00b5, 0xb4482dff), TOBN(0xe1596fa5, 0xf5bf33c5),
+ TOBN(0x10595b56, 0x96a71cba), TOBN(0x944938b2, 0xfdcadeb7),
+ TOBN(0xa282da4c, 0xfccd8471), TOBN(0x98ec05f3, 0x0d37bfe1),
+ TOBN(0xe171ce1b, 0x0698304a), TOBN(0x2d691444, 0x21bdf79b),
+ TOBN(0xd0cd3b74, 0x1b21dec1), TOBN(0x712ecd8b, 0x16a15f71),
+ TOBN(0x8d4c00a7, 0x00fd56e1), TOBN(0x02ec9692, 0xf9527c18),
+ TOBN(0x21c44937, 0x4a3e42e1), TOBN(0x9176fbab, 0x1392ae0a),
+ TOBN(0x8726f1ba, 0x44b7b618), TOBN(0xb4d7aae9, 0xf1de491c),
+ TOBN(0xf91df7b9, 0x07b582c0), TOBN(0x7e116c30, 0xef60aa3a),
+ TOBN(0x99270f81, 0x466265d7), TOBN(0xb15b6fe2, 0x4df7adf0),
+ TOBN(0xfe33b2d3, 0xf9738f7f), TOBN(0x48553ab9, 0xd6d70f95),
+ TOBN(0x2cc72ac8, 0xc21e94db), TOBN(0x795ac38d, 0xbdc0bbee),
+ TOBN(0x0a1be449, 0x2e40478f), TOBN(0x81bd3394, 0x052bde55),
+ TOBN(0x63c8dbe9, 0x56b3c4f2), TOBN(0x017a99cf, 0x904177cc),
+ TOBN(0x947bbddb, 0x4d010fc1), TOBN(0xacf9b00b, 0xbb2c9b21),
+ TOBN(0x2970bc8d, 0x47173611), TOBN(0x1a4cbe08, 0xac7d756f),
+ TOBN(0x06d9f4aa, 0x67d541a2), TOBN(0xa3e8b689, 0x59c2cf44),
+ TOBN(0xaad066da, 0x4d88f1dd), TOBN(0xc604f165, 0x7ad35dea),
+ TOBN(0x7edc0720, 0x4478ca67), TOBN(0xa10dfae0, 0xba02ce06),
+ TOBN(0xeceb1c76, 0xaf36f4e4), TOBN(0x994b2292, 0xaf3f8f48),
+ TOBN(0xbf9ed77b, 0x77c8a68c), TOBN(0x74f544ea, 0x51744c9d),
+ TOBN(0x82d05bb9, 0x8113a757), TOBN(0x4ef2d2b4, 0x8a9885e4),
+ TOBN(0x1e332be5, 0x1aa7865f), TOBN(0x22b76b18, 0x290d1a52),
+ TOBN(0x308a2310, 0x44351683), TOBN(0x9d861896, 0xa3f22840),
+ TOBN(0x5959ddcd, 0x841ed947), TOBN(0x0def0c94, 0x154b73bf),
+ TOBN(0xf0105417, 0x4c7c15e0), TOBN(0x539bfb02, 0x3a277c32),
+ TOBN(0xe699268e, 0xf9dccf5f), TOBN(0x9f5796a5, 0x0247a3bd),
+ TOBN(0x8b839de8, 0x4f157269), TOBN(0xc825c1e5, 0x7a30196b),
+ TOBN(0x6ef0aabc, 0xdc8a5a91), TOBN(0xf4a8ce6c, 0x498b7fe6),
+ TOBN(0x1cce35a7, 0x70cbac78), TOBN(0x83488e9b, 0xf6b23958),
+ TOBN(0x0341a070, 0xd76cb011), TOBN(0xda6c9d06, 0xae1b2658),
+ TOBN(0xb701fb30, 0xdd648c52), TOBN(0x994ca02c, 0x52fb9fd1),
+ TOBN(0x06933117, 0x6f563086), TOBN(0x3d2b8100, 0x17856bab),
+ TOBN(0xe89f48c8, 0x5963a46e), TOBN(0x658ab875, 0xa99e61c7),
+ TOBN(0x6e296f87, 0x4b8517b4), TOBN(0x36c4fcdc, 0xfc1bc656),
+ TOBN(0xde5227a1, 0xa3906def), TOBN(0x9fe95f57, 0x62418945),
+ TOBN(0x20c91e81, 0xfdd96cde), TOBN(0x5adbe47e, 0xda4480de),
+ TOBN(0xa009370f, 0x396de2b6), TOBN(0x98583d4b, 0xf0ecc7bd),
+ TOBN(0xf44f6b57, 0xe51d0672), TOBN(0x03d6b078, 0x556b1984),
+ TOBN(0x27dbdd93, 0xb0b64912), TOBN(0x9b3a3434, 0x15687b09),
+ TOBN(0x0dba6461, 0x51ec20a9), TOBN(0xec93db7f, 0xff28187c),
+ TOBN(0x00ff8c24, 0x66e48bdd), TOBN(0x2514f2f9, 0x11ccd78e),
+ TOBN(0xeba11f4f, 0xe1250603), TOBN(0x8a22cd41, 0x243fa156),
+ TOBN(0xa4e58df4, 0xb283e4c6), TOBN(0x78c29859, 0x8b39783f),
+ TOBN(0x5235aee2, 0xa5259809), TOBN(0xc16284b5, 0x0e0227dd),
+ TOBN(0xa5f57916, 0x1338830d), TOBN(0x6d4b8a6b, 0xd2123fca),
+ TOBN(0x236ea68a, 0xf9c546f8), TOBN(0xc1d36873, 0xfa608d36),
+ TOBN(0xcd76e495, 0x8d436d13), TOBN(0xd4d9c221, 0x8fb080af),
+ TOBN(0x665c1728, 0xe8ad3fb5), TOBN(0xcf1ebe4d, 0xb3d572e0),
+ TOBN(0xa7a8746a, 0x584c5e20), TOBN(0x267e4ea1, 0xb9dc7035),
+ TOBN(0x593a15cf, 0xb9548c9b), TOBN(0x5e6e2135, 0x4bd012f3),
+ TOBN(0xdf31cc6a, 0x8c8f936e), TOBN(0x8af84d04, 0xb5c241dc),
+ TOBN(0x63990a6f, 0x345efb86), TOBN(0x6fef4e61, 0xb9b962cb)}
+ ,
+ {TOBN(0xf6368f09, 0x25722608), TOBN(0x131260db, 0x131cf5c6),
+ TOBN(0x40eb353b, 0xfab4f7ac), TOBN(0x85c78880, 0x37eee829),
+ TOBN(0x4c1581ff, 0xc3bdf24e), TOBN(0x5bff75cb, 0xf5c3c5a8),
+ TOBN(0x35e8c83f, 0xa14e6f40), TOBN(0xb81d1c0f, 0x0295e0ca),
+ TOBN(0xfcde7cc8, 0xf43a730f), TOBN(0xe89b6f3c, 0x33ab590e),
+ TOBN(0xc823f529, 0xad03240b), TOBN(0x82b79afe, 0x98bea5db),
+ TOBN(0x568f2856, 0x962fe5de), TOBN(0x0c590adb, 0x60c591f3),
+ TOBN(0x1fc74a14, 0x4a28a858), TOBN(0x3b662498, 0xb3203f4c),
+ TOBN(0x91e3cf0d, 0x6c39765a), TOBN(0xa2db3acd, 0xac3cca0b),
+ TOBN(0x288f2f08, 0xcb953b50), TOBN(0x2414582c, 0xcf43cf1a),
+ TOBN(0x8dec8bbc, 0x60eee9a8), TOBN(0x54c79f02, 0x729aa042),
+ TOBN(0xd81cd5ec, 0x6532f5d5), TOBN(0xa672303a, 0xcf82e15f),
+ TOBN(0x376aafa8, 0x719c0563), TOBN(0xcd8ad2dc, 0xbc5fc79f),
+ TOBN(0x303fdb9f, 0xcb750cd3), TOBN(0x14ff052f, 0x4418b08e),
+ TOBN(0xf75084cf, 0x3e2d6520), TOBN(0x7ebdf0f8, 0x144ed509),
+ TOBN(0xf43bf0f2, 0xd3f25b98), TOBN(0x86ad71cf, 0xa354d837),
+ TOBN(0xb827fe92, 0x26f43572), TOBN(0xdfd3ab5b, 0x5d824758),
+ TOBN(0x315dd23a, 0x539094c1), TOBN(0x85c0e37a, 0x66623d68),
+ TOBN(0x575c7972, 0x7be19ae0), TOBN(0x616a3396, 0xdf0d36b5),
+ TOBN(0xa1ebb3c8, 0x26b1ff7e), TOBN(0x635b9485, 0x140ad453),
+ TOBN(0x92bf3cda, 0xda430c0b), TOBN(0x4702850e, 0x3a96dac6),
+ TOBN(0xc91cf0a5, 0x15ac326a), TOBN(0x95de4f49, 0xab8c25e4),
+ TOBN(0xb01bad09, 0xe265c17c), TOBN(0x24e45464, 0x087b3881),
+ TOBN(0xd43e583c, 0xe1fac5ca), TOBN(0xe17cb318, 0x6ead97a6),
+ TOBN(0x6cc39243, 0x74dcec46), TOBN(0x33cfc02d, 0x54c2b73f),
+ TOBN(0x82917844, 0xf26cd99c), TOBN(0x8819dd95, 0xd1773f89),
+ TOBN(0x09572aa6, 0x0871f427), TOBN(0x8e0cf365, 0xf6f01c34),
+ TOBN(0x7fa52988, 0xbff1f5af), TOBN(0x4eb357ea, 0xe75e8e50),
+ TOBN(0xd9d0c8c4, 0x868af75d), TOBN(0xd7325cff, 0x45c8c7ea),
+ TOBN(0xab471996, 0xcc81ecb0), TOBN(0xff5d55f3, 0x611824ed),
+ TOBN(0xbe314541, 0x1977a0ee), TOBN(0x5085c4c5, 0x722038c6),
+ TOBN(0x2d5335bf, 0xf94bb495), TOBN(0x894ad8a6, 0xc8e2a082),
+ TOBN(0x5c3e2341, 0xada35438), TOBN(0xf4a9fc89, 0x049b8c4e),
+ TOBN(0xbeeb355a, 0x9f17cf34), TOBN(0x3f311e0e, 0x6c91fe10),
+ TOBN(0xc2d20038, 0x92ab9891), TOBN(0x257bdcc1, 0x3e8ce9a9),
+ TOBN(0x1b2d9789, 0x88c53bee), TOBN(0x927ce89a, 0xcdba143a),
+ TOBN(0xb0a32cca, 0x523db280), TOBN(0x5c889f8a, 0x50d43783),
+ TOBN(0x503e04b3, 0x4897d16f), TOBN(0x8cdb6e78, 0x08f5f2e8),
+ TOBN(0x6ab91cf0, 0x179c8e74), TOBN(0xd8874e52, 0x48211d60),
+ TOBN(0xf948d4d5, 0xea851200), TOBN(0x4076d41e, 0xe6f9840a),
+ TOBN(0xc20e263c, 0x47b517ea), TOBN(0x79a448fd, 0x30685e5e),
+ TOBN(0xe55f6f78, 0xf90631a0), TOBN(0x88a790b1, 0xa79e6346),
+ TOBN(0x62160c7d, 0x80969fe8), TOBN(0x54f92fd4, 0x41491bb9),
+ TOBN(0xa6645c23, 0x5c957526), TOBN(0xf44cc5ae, 0xbea3ce7b),
+ TOBN(0xf7628327, 0x8b1e68b7), TOBN(0xc731ad7a, 0x303f29d3),
+ TOBN(0xfe5a9ca9, 0x57d03ecb), TOBN(0x96c0d50c, 0x41bc97a7),
+ TOBN(0xc4669fe7, 0x9b4f7f24), TOBN(0xfdd781d8, 0x3d9967ef),
+ TOBN(0x7892c7c3, 0x5d2c208d), TOBN(0x8bf64f7c, 0xae545cb3),
+ TOBN(0xc01f862c, 0x467be912), TOBN(0xf4c85ee9, 0xc73d30cc),
+ TOBN(0x1fa6f4be, 0x6ab83ec7), TOBN(0xa07a3c1c, 0x4e3e3cf9),
+ TOBN(0x87f8ef45, 0x0c00beb3), TOBN(0x30e2c2b3, 0x000d4c3e),
+ TOBN(0x1aa00b94, 0xfe08bf5b), TOBN(0x32c133aa, 0x9224ef52),
+ TOBN(0x38df16bb, 0x32e5685d), TOBN(0x68a9e069, 0x58e6f544),
+ TOBN(0x495aaff7, 0xcdc5ebc6), TOBN(0xf894a645, 0x378b135f),
+ TOBN(0xf316350a, 0x09e27ecf), TOBN(0xeced201e, 0x58f7179d),
+ TOBN(0x2eec273c, 0xe97861ba), TOBN(0x47ec2cae, 0xd693be2e),
+ TOBN(0xfa4c97c4, 0xf68367ce), TOBN(0xe4f47d0b, 0xbe5a5755),
+ TOBN(0x17de815d, 0xb298a979), TOBN(0xd7eca659, 0xc177dc7d),
+ TOBN(0x20fdbb71, 0x49ded0a3), TOBN(0x4cb2aad4, 0xfb34d3c5),
+ TOBN(0x2cf31d28, 0x60858a33), TOBN(0x3b6873ef, 0xa24aa40f),
+ TOBN(0x540234b2, 0x2c11bb37), TOBN(0x2d0366dd, 0xed4c74a3),
+ TOBN(0xf9a968da, 0xeec5f25d), TOBN(0x36601068, 0x67b63142),
+ TOBN(0x07cd6d2c, 0x68d7b6d4), TOBN(0xa8f74f09, 0x0c842942),
+ TOBN(0xe2751404, 0x7768b1ee), TOBN(0x4b5f7e89, 0xfe62aee4),
+ TOBN(0xc6a77177, 0x89070d26), TOBN(0xa1f28e4e, 0xdd1c8bc7),
+ TOBN(0xea5f4f06, 0x469e1f17), TOBN(0x78fc242a, 0xfbdb78e0),
+ TOBN(0xc9c7c592, 0x8b0588f1), TOBN(0xb6b7a0fd, 0x1535921e),
+ TOBN(0xcc5bdb91, 0xbde5ae35), TOBN(0xb42c485e, 0x12ff1864),
+ TOBN(0xa1113e13, 0xdbab98aa), TOBN(0xde9d469b, 0xa17b1024),
+ TOBN(0x23f48b37, 0xc0462d3a), TOBN(0x3752e537, 0x7c5c078d),
+ TOBN(0xe3a86add, 0x15544eb9), TOBN(0xf013aea7, 0x80fba279),
+ TOBN(0x8b5bb76c, 0xf22001b5), TOBN(0xe617ba14, 0xf02891ab),
+ TOBN(0xd39182a6, 0x936219d3), TOBN(0x5ce1f194, 0xae51cb19),
+ TOBN(0xc78f8598, 0xbf07a74c), TOBN(0x6d7158f2, 0x22cbf1bc),
+ TOBN(0x3b846b21, 0xe300ce18), TOBN(0x35fba630, 0x2d11275d),
+ TOBN(0x5fe25c36, 0xa0239b9b), TOBN(0xd8beb35d, 0xdf05d940),
+ TOBN(0x4db02bb0, 0x1f7e320d), TOBN(0x0641c364, 0x6da320ea),
+ TOBN(0x6d95fa5d, 0x821389a3), TOBN(0x92699748, 0x8fcd8e3d),
+ TOBN(0x316fef17, 0xceb6c143), TOBN(0x67fcb841, 0xd933762b),
+ TOBN(0xbb837e35, 0x118b17f8), TOBN(0x4b92552f, 0x9fd24821),
+ TOBN(0xae6bc70e, 0x46aca793), TOBN(0x1cf0b0e4, 0xe579311b),
+ TOBN(0x8dc631be, 0x5802f716), TOBN(0x099bdc6f, 0xbddbee4d),
+ TOBN(0xcc352bb2, 0x0caf8b05), TOBN(0xf74d505a, 0x72d63df2),
+ TOBN(0xb9876d4b, 0x91c4f408), TOBN(0x1ce18473, 0x9e229b2d),
+ TOBN(0x49507597, 0x83abdb4a), TOBN(0x850fbcb6, 0xdee84b18),
+ TOBN(0x6325236e, 0x609e67dc), TOBN(0x04d831d9, 0x9336c6d8),
+ TOBN(0x8deaae3b, 0xfa12d45d), TOBN(0xe425f8ce, 0x4746e246),
+ TOBN(0x8004c175, 0x24f5f31e), TOBN(0xaca16d8f, 0xad62c3b7),
+ TOBN(0x0dc15a6a, 0x9152f934), TOBN(0xf1235e5d, 0xed0e12c1),
+ TOBN(0xc33c06ec, 0xda477dac), TOBN(0x76be8732, 0xb2ea0006),
+ TOBN(0xcf3f7831, 0x0c0cd313), TOBN(0x3c524553, 0xa614260d),
+ TOBN(0x31a756f8, 0xcab22d15), TOBN(0x03ee10d1, 0x77827a20),
+ TOBN(0xd1e059b2, 0x1994ef20), TOBN(0x2a653b69, 0x638ae318),
+ TOBN(0x70d5eb58, 0x2f699010), TOBN(0x279739f7, 0x09f5f84a),
+ TOBN(0x5da4663c, 0x8b799336), TOBN(0xfdfdf14d, 0x203c37eb),
+ TOBN(0x32d8a9dc, 0xa1dbfb2d), TOBN(0xab40cff0, 0x77d48f9b),
+ TOBN(0xc018b383, 0xd20b42d5), TOBN(0xf9a810ef, 0x9f78845f),
+ TOBN(0x40af3753, 0xbdba9df0), TOBN(0xb90bdcfc, 0x131dfdf9),
+ TOBN(0x18720591, 0xf01ab782), TOBN(0xc823f211, 0x6af12a88),
+ TOBN(0xa51b80f3, 0x0dc14401), TOBN(0xde248f77, 0xfb2dfbe3),
+ TOBN(0xef5a44e5, 0x0cafe751), TOBN(0x73997c9c, 0xd4dcd221),
+ TOBN(0x32fd86d1, 0xde854024), TOBN(0xd5b53adc, 0xa09b84bb),
+ TOBN(0x008d7a11, 0xdcedd8d1), TOBN(0x406bd1c8, 0x74b32c84),
+ TOBN(0x5d4472ff, 0x05dde8b1), TOBN(0x2e25f2cd, 0xfce2b32f),
+ TOBN(0xbec0dd5e, 0x29dfc254), TOBN(0x4455fcf6, 0x2b98b267),
+ TOBN(0x0b4d43a5, 0xc72df2ad), TOBN(0xea70e6be, 0x48a75397),
+ TOBN(0x2aad6169, 0x5820f3bf), TOBN(0xf410d2dd, 0x9e37f68f),
+ TOBN(0x70fb7dba, 0x7be5ac83), TOBN(0x636bb645, 0x36ec3eec),
+ TOBN(0x27104ea3, 0x9754e21c), TOBN(0xbc87a3e6, 0x8d63c373),
+ TOBN(0x483351d7, 0x4109db9a), TOBN(0x0fa724e3, 0x60134da7),
+ TOBN(0x9ff44c29, 0xb0720b16), TOBN(0x2dd0cf13, 0x06aceead),
+ TOBN(0x5942758c, 0xe26929a6), TOBN(0x96c5db92, 0xb766a92b),
+ TOBN(0xcec7d4c0, 0x5f18395e), TOBN(0xd3f22744, 0x1f80d032),
+ TOBN(0x7a68b37a, 0xcb86075b), TOBN(0x074764dd, 0xafef92db),
+ TOBN(0xded1e950, 0x7bc7f389), TOBN(0xc580c850, 0xb9756460),
+ TOBN(0xaeeec2a4, 0x7da48157), TOBN(0x3f0b4e7f, 0x82c587b3),
+ TOBN(0x231c6de8, 0xa9f19c53), TOBN(0x5717bd73, 0x6974e34e),
+ TOBN(0xd9e1d216, 0xf1508fa9), TOBN(0x9f112361, 0xdadaa124),
+ TOBN(0x80145e31, 0x823b7348), TOBN(0x4dd8f0d5, 0xac634069),
+ TOBN(0xe3d82fc7, 0x2297c258), TOBN(0x276fcfee, 0x9cee7431),
+ TOBN(0x8eb61b5e, 0x2bc0aea9), TOBN(0x4f668fd5, 0xde329431),
+ TOBN(0x03a32ab1, 0x38e4b87e), TOBN(0xe1374517, 0x73d0ef0b),
+ TOBN(0x1a46f7e6, 0x853ac983), TOBN(0xc3bdf42e, 0x68e78a57),
+ TOBN(0xacf20785, 0x2ea96dd1), TOBN(0xa10649b9, 0xf1638460),
+ TOBN(0xf2369f0b, 0x879fbbed), TOBN(0x0ff0ae86, 0xda9d1869),
+ TOBN(0x5251d759, 0x56766f45), TOBN(0x4984d8c0, 0x2be8d0fc),
+ TOBN(0x7ecc95a6, 0xd21008f0), TOBN(0x29bd54a0, 0x3a1a1c49),
+ TOBN(0xab9828c5, 0xd26c50f3), TOBN(0x32c0087c, 0x51d0d251),
+ TOBN(0x9bac3ce6, 0x0c1cdb26), TOBN(0xcd94d947, 0x557ca205),
+ TOBN(0x1b1bd598, 0x9db1fdcd), TOBN(0x0eda0108, 0xa3d8b149),
+ TOBN(0x95066610, 0x56152fcc), TOBN(0xc2f037e6, 0xe7192b33),
+ TOBN(0xdeffb41a, 0xc92e05a4), TOBN(0x1105f6c2, 0xc2f6c62e),
+ TOBN(0x68e73500, 0x8733913c), TOBN(0xcce86163, 0x3f3adc40),
+ TOBN(0xf407a942, 0x38a278e9), TOBN(0xd13c1b9d, 0x2ab21292),
+ TOBN(0x93ed7ec7, 0x1c74cf5c), TOBN(0x8887dc48, 0xf1a4c1b4),
+ TOBN(0x3830ff30, 0x4b3a11f1), TOBN(0x358c5a3c, 0x58937cb6),
+ TOBN(0x027dc404, 0x89022829), TOBN(0x40e93977, 0x3b798f79),
+ TOBN(0x90ad3337, 0x38be6ead), TOBN(0x9c23f6bc, 0xf34c0a5d),
+ TOBN(0xd1711a35, 0xfbffd8bb), TOBN(0x60fcfb49, 0x1949d3dd),
+ TOBN(0x09c8ef4b, 0x7825d93a), TOBN(0x24233cff, 0xa0a8c968),
+ TOBN(0x67ade46c, 0xe6d982af), TOBN(0xebb6bf3e, 0xe7544d7c),
+ TOBN(0xd6b9ba76, 0x3d8bd087), TOBN(0x46fe382d, 0x4dc61280),
+ TOBN(0xbd39a7e8, 0xb5bdbd75), TOBN(0xab381331, 0xb8f228fe),
+ TOBN(0x0709a77c, 0xce1c4300), TOBN(0x6a247e56, 0xf337ceac),
+ TOBN(0x8f34f21b, 0x636288be), TOBN(0x9dfdca74, 0xc8a7c305),
+ TOBN(0x6decfd1b, 0xea919e04), TOBN(0xcdf2688d, 0x8e1991f8),
+ TOBN(0xe607df44, 0xd0f8a67e), TOBN(0xd985df4b, 0x0b58d010),
+ TOBN(0x57f834c5, 0x0c24f8f4), TOBN(0xe976ef56, 0xa0bf01ae),
+ TOBN(0x536395ac, 0xa1c32373), TOBN(0x351027aa, 0x734c0a13),
+ TOBN(0xd2f1b5d6, 0x5e6bd5bc), TOBN(0x2b539e24, 0x223debed),
+ TOBN(0xd4994cec, 0x0eaa1d71), TOBN(0x2a83381d, 0x661dcf65),
+ TOBN(0x5f1aed2f, 0x7b54c740), TOBN(0x0bea3fa5, 0xd6dda5ee),
+ TOBN(0x9d4fb684, 0x36cc6134), TOBN(0x8eb9bbf3, 0xc0a443dd),
+ TOBN(0xfc500e2e, 0x383b7d2a), TOBN(0x7aad621c, 0x5b775257),
+ TOBN(0x69284d74, 0x0a8f7cc0), TOBN(0xe820c2ce, 0x07562d65),
+ TOBN(0xbf9531b9, 0x499758ee), TOBN(0x73e95ca5, 0x6ee0cc2d),
+ TOBN(0xf61790ab, 0xfbaf50a5), TOBN(0xdf55e76b, 0x684e0750),
+ TOBN(0xec516da7, 0xf176b005), TOBN(0x575553bb, 0x7a2dddc7),
+ TOBN(0x37c87ca3, 0x553afa73), TOBN(0x315f3ffc, 0x4d55c251),
+ TOBN(0xe846442a, 0xaf3e5d35), TOBN(0x61b91149, 0x6495ff28),
+ TOBN(0x23cc95d3, 0xfa326dc3), TOBN(0x1df4da1f, 0x18fc2cea),
+ TOBN(0x24bf9adc, 0xd0a37d59), TOBN(0xb6710053, 0x320d6e1e),
+ TOBN(0x96f9667e, 0x618344d1), TOBN(0xcc7ce042, 0xa06445af),
+ TOBN(0xa02d8514, 0xd68dbc3a), TOBN(0x4ea109e4, 0x280b5a5b),
+ TOBN(0x5741a7ac, 0xb40961bf), TOBN(0x4ada5937, 0x6aa56bfa),
+ TOBN(0x7feb9145, 0x02b765d1), TOBN(0x561e97be, 0xe6ad1582),
+ TOBN(0xbbc4a5b6, 0xda3982f5), TOBN(0x0c2659ed, 0xb546f468),
+ TOBN(0xb8e7e6aa, 0x59612d20), TOBN(0xd83dfe20, 0xac19e8e0),
+ TOBN(0x8530c45f, 0xb835398c), TOBN(0x6106a8bf, 0xb38a41c2),
+ TOBN(0x21e8f9a6, 0x35f5dcdb), TOBN(0x39707137, 0xcae498ed),
+ TOBN(0x70c23834, 0xd8249f00), TOBN(0x9f14b58f, 0xab2537a0),
+ TOBN(0xd043c365, 0x5f61c0c2), TOBN(0xdc5926d6, 0x09a194a7),
+ TOBN(0xddec0339, 0x8e77738a), TOBN(0xd07a63ef, 0xfba46426),
+ TOBN(0x2e58e79c, 0xee7f6e86), TOBN(0xe59b0459, 0xff32d241),
+ TOBN(0xc5ec84e5, 0x20fa0338), TOBN(0x97939ac8, 0xeaff5ace),
+ TOBN(0x0310a4e3, 0xb4a38313), TOBN(0x9115fba2, 0x8f9d9885),
+ TOBN(0x8dd710c2, 0x5fadf8c3), TOBN(0x66be38a2, 0xce19c0e2),
+ TOBN(0xd42a279c, 0x4cfe5022), TOBN(0x597bb530, 0x0e24e1b8),
+ TOBN(0x3cde86b7, 0xc153ca7f), TOBN(0xa8d30fb3, 0x707d63bd),
+ TOBN(0xac905f92, 0xbd60d21e), TOBN(0x98e7ffb6, 0x7b9a54ab),
+ TOBN(0xd7147df8, 0xe9726a30), TOBN(0xb5e216ff, 0xafce3533),
+ TOBN(0xb550b799, 0x2ff1ec40), TOBN(0x6b613b87, 0xa1e953fd),
+ TOBN(0x87b88dba, 0x792d5610), TOBN(0x2ee1270a, 0xa190fbe1),
+ TOBN(0x02f4e2dc, 0x2ef581da), TOBN(0x016530e4, 0xeff82a95),
+ TOBN(0xcbb93dfd, 0x8fd6ee89), TOBN(0x16d3d986, 0x46848fff),
+ TOBN(0x600eff24, 0x1da47adf), TOBN(0x1b9754a0, 0x0ad47a71),
+ TOBN(0x8f9266df, 0x70c33b98), TOBN(0xaadc87ae, 0xdf34186e),
+ TOBN(0x0d2ce8e1, 0x4ad24132), TOBN(0x8a47cbfc, 0x19946eba),
+ TOBN(0x47feeb66, 0x62b5f3af), TOBN(0xcefab561, 0x0abb3734),
+ TOBN(0x449de60e, 0x19f35cb1), TOBN(0x39f8db14, 0x157f0eb9),
+ TOBN(0xffaecc5b, 0x3c61bfd6), TOBN(0xa5a4d41d, 0x41216703),
+ TOBN(0x7f8fabed, 0x224e1cc2), TOBN(0x0d5a8186, 0x871ad953),
+ TOBN(0xf10774f7, 0xd22da9a9), TOBN(0x45b8a678, 0xcc8a9b0d),
+ TOBN(0xd9c2e722, 0xbdc32cff), TOBN(0xbf71b5f5, 0x337202a5),
+ TOBN(0x95c57f2f, 0x69fc4db9), TOBN(0xb6dad34c, 0x765d01e1),
+ TOBN(0x7e0bd13f, 0xcb904635), TOBN(0x61751253, 0x763a588c),
+ TOBN(0xd85c2997, 0x81af2c2d), TOBN(0xc0f7d9c4, 0x81b9d7da),
+ TOBN(0x838a34ae, 0x08533e8d), TOBN(0x15c4cb08, 0x311d8311),
+ TOBN(0x97f83285, 0x8e121e14), TOBN(0xeea7dc1e, 0x85000a5f),
+ TOBN(0x0c6059b6, 0x5d256274), TOBN(0xec9beace, 0xb95075c0),
+ TOBN(0x173daad7, 0x1df97828), TOBN(0xbf851cb5, 0xa8937877),
+ TOBN(0xb083c594, 0x01646f3c), TOBN(0x3bad30cf, 0x50c6d352),
+ TOBN(0xfeb2b202, 0x496bbcea), TOBN(0x3cf9fd4f, 0x18a1e8ba),
+ TOBN(0xd26de7ff, 0x1c066029), TOBN(0x39c81e9e, 0x4e9ed4f8),
+ TOBN(0xd8be0cb9, 0x7b390d35), TOBN(0x01df2bbd, 0x964aab27),
+ TOBN(0x3e8c1a65, 0xc3ef64f8), TOBN(0x567291d1, 0x716ed1dd),
+ TOBN(0x95499c6c, 0x5f5406d3), TOBN(0x71fdda39, 0x5ba8e23f),
+ TOBN(0xcfeb320e, 0xd5096ece), TOBN(0xbe7ba92b, 0xca66dd16),
+ TOBN(0x4608d36b, 0xc6fb5a7d), TOBN(0xe3eea15a, 0x6d2dd0e0),
+ TOBN(0x75b0a3eb, 0x8f97a36a), TOBN(0xf59814cc, 0x1c83de1e),
+ TOBN(0x56c9c5b0, 0x1c33c23f), TOBN(0xa96c1da4, 0x6faa4136),
+ TOBN(0x46bf2074, 0xde316551), TOBN(0x3b866e7b, 0x1f756c8f),
+ TOBN(0x727727d8, 0x1495ed6b), TOBN(0xb2394243, 0xb682dce7),
+ TOBN(0x8ab8454e, 0x758610f3), TOBN(0xc243ce84, 0x857d72a4),
+ TOBN(0x7b320d71, 0xdbbf370f), TOBN(0xff9afa37, 0x78e0f7ca),
+ TOBN(0x0119d1e0, 0xea7b523f), TOBN(0xb997f8cb, 0x058c7d42),
+ TOBN(0x285bcd2a, 0x37bbb184), TOBN(0x51dcec49, 0xa45d1fa6),
+ TOBN(0x6ade3b64, 0xe29634cb), TOBN(0x080c94a7, 0x26b86ef1),
+ TOBN(0xba583db1, 0x2283fbe3), TOBN(0x902bddc8, 0x5a9315ed),
+ TOBN(0x07c1ccb3, 0x86964bec), TOBN(0x78f4eacf, 0xb6258301),
+ TOBN(0x4bdf3a49, 0x56f90823), TOBN(0xba0f5080, 0x741d777b),
+ TOBN(0x091d71c3, 0xf38bf760), TOBN(0x9633d50f, 0x9b625b02),
+ TOBN(0x03ecb743, 0xb8c9de61), TOBN(0xb4751254, 0x5de74720),
+ TOBN(0x9f9defc9, 0x74ce1cb2), TOBN(0x774a4f6a, 0x00bd32ef),
+ TOBN(0xaca385f7, 0x73848f22), TOBN(0x53dad716, 0xf3f8558e),
+ TOBN(0xab7b34b0, 0x93c471f9), TOBN(0xf530e069, 0x19644bc7),
+ TOBN(0x3d9fb1ff, 0xdd59d31a), TOBN(0x4382e0df, 0x08daa795),
+ TOBN(0x165c6f4b, 0xd5cc88d7), TOBN(0xeaa392d5, 0x4a18c900),
+ TOBN(0x94203c67, 0x648024ee), TOBN(0x188763f2, 0x8c2fabcd),
+ TOBN(0xa80f87ac, 0xbbaec835), TOBN(0x632c96e0, 0xf29d8d54),
+ TOBN(0x29b0a60e, 0x4c00a95e), TOBN(0x2ef17f40, 0xe011e9fa),
+ TOBN(0xf6c0e1d1, 0x15b77223), TOBN(0xaaec2c62, 0x14b04e32),
+ TOBN(0xd35688d8, 0x3d84e58c), TOBN(0x2af5094c, 0x958571db),
+ TOBN(0x4fff7e19, 0x760682a6), TOBN(0x4cb27077, 0xe39a407c),
+ TOBN(0x0f59c547, 0x4ff0e321), TOBN(0x169f34a6, 0x1b34c8ff),
+ TOBN(0x2bff1096, 0x52bc1ba7), TOBN(0xa25423b7, 0x83583544),
+ TOBN(0x5d55d5d5, 0x0ac8b782), TOBN(0xff6622ec, 0x2db3c892),
+ TOBN(0x48fce741, 0x6b8bb642), TOBN(0x31d6998c, 0x69d7e3dc),
+ TOBN(0xdbaf8004, 0xcadcaed0), TOBN(0x801b0142, 0xd81d053c),
+ TOBN(0x94b189fc, 0x59630ec6), TOBN(0x120e9934, 0xaf762c8e),
+ TOBN(0x53a29aa4, 0xfdc6a404), TOBN(0x19d8e01e, 0xa1909948),
+ TOBN(0x3cfcabf1, 0xd7e89681), TOBN(0x3321a50d, 0x4e132d37),
+ TOBN(0xd0496863, 0xe9a86111), TOBN(0x8c0cde61, 0x06a3bc65),
+ TOBN(0xaf866c49, 0xfc9f8eef), TOBN(0x2066350e, 0xff7f5141),
+ TOBN(0x4f8a4689, 0xe56ddfbd), TOBN(0xea1b0c07, 0xfe32983a),
+ TOBN(0x2b317462, 0x873cb8cb), TOBN(0x658deddc, 0x2d93229f),
+ TOBN(0x65efaf4d, 0x0f64ef58), TOBN(0xfe43287d, 0x730cc7a8),
+ TOBN(0xaebc0c72, 0x3d047d70), TOBN(0x92efa539, 0xd92d26c9),
+ TOBN(0x06e78457, 0x94b56526), TOBN(0x415cb80f, 0x0961002d),
+ TOBN(0x89e5c565, 0x76dcb10f), TOBN(0x8bbb6982, 0xff9259fe),
+ TOBN(0x4fe8795b, 0x9abc2668), TOBN(0xb5d4f534, 0x1e678fb1),
+ TOBN(0x6601f3be, 0x7b7da2b9), TOBN(0x98da59e2, 0xa13d6805),
+ TOBN(0x190d8ea6, 0x01799a52), TOBN(0xa20cec41, 0xb86d2952),
+ TOBN(0x3062ffb2, 0x7fff2a7c), TOBN(0x741b32e5, 0x79f19d37),
+ TOBN(0xf80d8181, 0x4eb57d47), TOBN(0x7a2d0ed4, 0x16aef06b),
+ TOBN(0x09735fb0, 0x1cecb588), TOBN(0x1641caaa, 0xc6061f5b)}
+ ,
+ {TOBN(0x7f99824f, 0x20151427), TOBN(0x206828b6, 0x92430206),
+ TOBN(0xaa9097d7, 0xe1112357), TOBN(0xacf9a2f2, 0x09e414ec),
+ TOBN(0xdbdac9da, 0x27915356), TOBN(0x7e0734b7, 0x001efee3),
+ TOBN(0x54fab5bb, 0xd2b288e2), TOBN(0x4c630fc4, 0xf62dd09c),
+ TOBN(0x8537107a, 0x1ac2703b), TOBN(0xb49258d8, 0x6bc857b5),
+ TOBN(0x57df14de, 0xbcdaccd1), TOBN(0x24ab68d7, 0xc4ae8529),
+ TOBN(0x7ed8b5d4, 0x734e59d0), TOBN(0x5f8740c8, 0xc495cc80),
+ TOBN(0x84aedd5a, 0x291db9b3), TOBN(0x80b360f8, 0x4fb995be),
+ TOBN(0xae915f5d, 0x5fa067d1), TOBN(0x4134b57f, 0x9668960c),
+ TOBN(0xbd3656d6, 0xa48edaac), TOBN(0xdac1e3e4, 0xfc1d7436),
+ TOBN(0x674ff869, 0xd81fbb26), TOBN(0x449ed3ec, 0xb26c33d4),
+ TOBN(0x85138705, 0xd94203e8), TOBN(0xccde538b, 0xbeeb6f4a),
+ TOBN(0x55d5c68d, 0xa61a76fa), TOBN(0x598b441d, 0xca1554dc),
+ TOBN(0xd39923b9, 0x773b279c), TOBN(0x33331d3c, 0x36bf9efc),
+ TOBN(0x2d4c848e, 0x298de399), TOBN(0xcfdb8e77, 0xa1a27f56),
+ TOBN(0x94c855ea, 0x57b8ab70), TOBN(0xdcdb9dae, 0x6f7879ba),
+ TOBN(0x7bdff8c2, 0x019f2a59), TOBN(0xb3ce5bb3, 0xcb4fbc74),
+ TOBN(0xea907f68, 0x8a9173dd), TOBN(0x6cd3d0d3, 0x95a75439),
+ TOBN(0x92ecc4d6, 0xefed021c), TOBN(0x09a9f9b0, 0x6a77339a),
+ TOBN(0x87ca6b15, 0x7188c64a), TOBN(0x10c29968, 0x44899158),
+ TOBN(0x5859a229, 0xed6e82ef), TOBN(0x16f338e3, 0x65ebaf4e),
+ TOBN(0x0cd31387, 0x5ead67ae), TOBN(0x1c73d228, 0x54ef0bb4),
+ TOBN(0x4cb55131, 0x74a5c8c7), TOBN(0x01cd2970, 0x7f69ad6a),
+ TOBN(0xa04d00dd, 0xe966f87e), TOBN(0xd96fe447, 0x0b7b0321),
+ TOBN(0x342ac06e, 0x88fbd381), TOBN(0x02cd4a84, 0x5c35a493),
+ TOBN(0xe8fa89de, 0x54f1bbcd), TOBN(0x341d6367, 0x2575ed4c),
+ TOBN(0xebe357fb, 0xd238202b), TOBN(0x600b4d1a, 0xa984ead9),
+ TOBN(0xc35c9f44, 0x52436ea0), TOBN(0x96fe0a39, 0xa370751b),
+ TOBN(0x4c4f0736, 0x7f636a38), TOBN(0x9f943fb7, 0x0e76d5cb),
+ TOBN(0xb03510ba, 0xa8b68b8b), TOBN(0xc246780a, 0x9ed07a1f),
+ TOBN(0x3c051415, 0x6d549fc2), TOBN(0xc2953f31, 0x607781ca),
+ TOBN(0x955e2c69, 0xd8d95413), TOBN(0xb300fadc, 0x7bd282e3),
+ TOBN(0x81fe7b50, 0x87e9189f), TOBN(0xdb17375c, 0xf42dda27),
+ TOBN(0x22f7d896, 0xcf0a5904), TOBN(0xa0e57c5a, 0xebe348e6),
+ TOBN(0xa61011d3, 0xf40e3c80), TOBN(0xb1189321, 0x8db705c5),
+ TOBN(0x4ed9309e, 0x50fedec3), TOBN(0xdcf14a10, 0x4d6d5c1d),
+ TOBN(0x056c265b, 0x55691342), TOBN(0xe8e08504, 0x91049dc7),
+ TOBN(0x131329f5, 0xc9bae20a), TOBN(0x96c8b3e8, 0xd9dccdb4),
+ TOBN(0x8c5ff838, 0xfb4ee6b4), TOBN(0xfc5a9aeb, 0x41e8ccf0),
+ TOBN(0x7417b764, 0xfae050c6), TOBN(0x0953c3d7, 0x00452080),
+ TOBN(0x21372682, 0x38dfe7e8), TOBN(0xea417e15, 0x2bb79d4b),
+ TOBN(0x59641f1c, 0x76e7cf2d), TOBN(0x271e3059, 0xea0bcfcc),
+ TOBN(0x624c7dfd, 0x7253ecbd), TOBN(0x2f552e25, 0x4fca6186),
+ TOBN(0xcbf84ecd, 0x4d866e9c), TOBN(0x73967709, 0xf68d4610),
+ TOBN(0xa14b1163, 0xc27901b4), TOBN(0xfd9236e0, 0x899b8bf3),
+ TOBN(0x42b091ec, 0xcbc6da0a), TOBN(0xbb1dac6f, 0x5ad1d297),
+ TOBN(0x80e61d53, 0xa91cf76e), TOBN(0x4110a412, 0xd31f1ee7),
+ TOBN(0x2d87c3ba, 0x13efcf77), TOBN(0x1f374bb4, 0xdf450d76),
+ TOBN(0x5e78e2f2, 0x0d188dab), TOBN(0xe3968ed0, 0xf4b885ef),
+ TOBN(0x46c0568e, 0x7314570f), TOBN(0x31616338, 0x01170521),
+ TOBN(0x18e1e7e2, 0x4f0c8afe), TOBN(0x4caa75ff, 0xdeea78da),
+ TOBN(0x82db67f2, 0x7c5d8a51), TOBN(0x36a44d86, 0x6f505370),
+ TOBN(0xd72c5bda, 0x0333974f), TOBN(0x5db516ae, 0x27a70146),
+ TOBN(0x34705281, 0x210ef921), TOBN(0xbff17a8f, 0x0c9c38e5),
+ TOBN(0x78f4814e, 0x12476da1), TOBN(0xc1e16613, 0x33c16980),
+ TOBN(0x9e5b386f, 0x424d4bca), TOBN(0x4c274e87, 0xc85740de),
+ TOBN(0xb6a9b88d, 0x6c2f5226), TOBN(0x14d1b944, 0x550d7ca8),
+ TOBN(0x580c85fc, 0x1fc41709), TOBN(0xc1da368b, 0x54c6d519),
+ TOBN(0x2b0785ce, 0xd5113cf7), TOBN(0x0670f633, 0x5a34708f),
+ TOBN(0x46e23767, 0x15cc3f88), TOBN(0x1b480cfa, 0x50c72c8f),
+ TOBN(0x20288602, 0x4147519a), TOBN(0xd0981eac, 0x26b372f0),
+ TOBN(0xa9d4a7ca, 0xa785ebc8), TOBN(0xd953c50d, 0xdbdf58e9),
+ TOBN(0x9d6361cc, 0xfd590f8f), TOBN(0x72e9626b, 0x44e6c917),
+ TOBN(0x7fd96110, 0x22eb64cf), TOBN(0x863ebb7e, 0x9eb288f3),
+ TOBN(0x6e6ab761, 0x6aca8ee7), TOBN(0x97d10b39, 0xd7b40358),
+ TOBN(0x1687d377, 0x1e5feb0d), TOBN(0xc83e50e4, 0x8265a27a),
+ TOBN(0x8f75a9fe, 0xc954b313), TOBN(0xcc2e8f47, 0x310d1f61),
+ TOBN(0xf5ba81c5, 0x6557d0e0), TOBN(0x25f9680c, 0x3eaf6207),
+ TOBN(0xf95c6609, 0x4354080b), TOBN(0x5225bfa5, 0x7bf2fe1c),
+ TOBN(0xc5c004e2, 0x5c7d98fa), TOBN(0x3561bf1c, 0x019aaf60),
+ TOBN(0x5e6f9f17, 0xba151474), TOBN(0xdec2f934, 0xb04f6eca),
+ TOBN(0x64e368a1, 0x269acb1e), TOBN(0x1332d9e4, 0x0cdda493),
+ TOBN(0x60d6cf69, 0xdf23de05), TOBN(0x66d17da2, 0x009339a0),
+ TOBN(0x9fcac985, 0x0a693923), TOBN(0xbcf057fc, 0xed7c6a6d),
+ TOBN(0xc3c5c8c5, 0xf0b5662c), TOBN(0x25318dd8, 0xdcba4f24),
+ TOBN(0x60e8cb75, 0x082b69ff), TOBN(0x7c23b3ee, 0x1e728c01),
+ TOBN(0x15e10a0a, 0x097e4403), TOBN(0xcb3d0a86, 0x19854665),
+ TOBN(0x88d8e211, 0xd67d4826), TOBN(0xb39af66e, 0x0b9d2839),
+ TOBN(0xa5f94588, 0xbd475ca8), TOBN(0xe06b7966, 0xc077b80b),
+ TOBN(0xfedb1485, 0xda27c26c), TOBN(0xd290d33a, 0xfe0fd5e0),
+ TOBN(0xa40bcc47, 0xf34fb0fa), TOBN(0xb4760cc8, 0x1fb1ab09),
+ TOBN(0x8fca0993, 0xa273bfe3), TOBN(0x13e4fe07, 0xf70b213c),
+ TOBN(0x3bcdb992, 0xfdb05163), TOBN(0x8c484b11, 0x0c2b19b6),
+ TOBN(0x1acb815f, 0xaaf2e3e2), TOBN(0xc6905935, 0xb89ff1b4),
+ TOBN(0xb2ad6f9d, 0x586e74e1), TOBN(0x488883ad, 0x67b80484),
+ TOBN(0x758aa2c7, 0x369c3ddb), TOBN(0x8ab74e69, 0x9f9afd31),
+ TOBN(0x10fc2d28, 0x5e21beb1), TOBN(0x3484518a, 0x318c42f9),
+ TOBN(0x377427dc, 0x53cf40c3), TOBN(0x9de0781a, 0x391bc1d9),
+ TOBN(0x8faee858, 0x693807e1), TOBN(0xa3865327, 0x4e81ccc7),
+ TOBN(0x02c30ff2, 0x6f835b84), TOBN(0xb604437b, 0x0d3d38d4),
+ TOBN(0xb3fc8a98, 0x5ca1823d), TOBN(0xb82f7ec9, 0x03be0324),
+ TOBN(0xee36d761, 0xcf684a33), TOBN(0x5a01df0e, 0x9f29bf7d),
+ TOBN(0x686202f3, 0x1306583d), TOBN(0x05b10da0, 0x437c622e),
+ TOBN(0xbf9aaa0f, 0x076a7bc8), TOBN(0x25e94efb, 0x8f8f4e43),
+ TOBN(0x8a35c9b7, 0xfa3dc26d), TOBN(0xe0e5fb93, 0x96ff03c5),
+ TOBN(0xa77e3843, 0xebc394ce), TOBN(0xcede6595, 0x8361de60),
+ TOBN(0xd27c22f6, 0xa1993545), TOBN(0xab01cc36, 0x24d671ba),
+ TOBN(0x63fa2877, 0xa169c28e), TOBN(0x925ef904, 0x2eb08376),
+ TOBN(0x3b2fa3cf, 0x53aa0b32), TOBN(0xb27beb5b, 0x71c49d7a),
+ TOBN(0xb60e1834, 0xd105e27f), TOBN(0xd6089788, 0x4f68570d),
+ TOBN(0x23094ce0, 0xd6fbc2ac), TOBN(0x738037a1, 0x815ff551),
+ TOBN(0xda73b1bb, 0x6bef119c), TOBN(0xdcf6c430, 0xeef506ba),
+ TOBN(0x00e4fe7b, 0xe3ef104a), TOBN(0xebdd9a2c, 0x0a065628),
+ TOBN(0x853a81c3, 0x8792043e), TOBN(0x22ad6ece, 0xb3b59108),
+ TOBN(0x9fb813c0, 0x39cd297d), TOBN(0x8ec7e16e, 0x05bda5d9),
+ TOBN(0x2834797c, 0x0d104b96), TOBN(0xcc11a2e7, 0x7c511510),
+ TOBN(0x96ca5a53, 0x96ee6380), TOBN(0x054c8655, 0xcea38742),
+ TOBN(0xb5946852, 0xd54dfa7d), TOBN(0x97c422e7, 0x1f4ab207),
+ TOBN(0xbf907509, 0x0c22b540), TOBN(0x2cde42aa, 0xb7c267d4),
+ TOBN(0xba18f9ed, 0x5ab0d693), TOBN(0x3ba62aa6, 0x6e4660d9),
+ TOBN(0xb24bf97b, 0xab9ea96a), TOBN(0x5d039642, 0xe3b60e32),
+ TOBN(0x4e6a4506, 0x7c4d9bd5), TOBN(0x666c5b9e, 0x7ed4a6a4),
+ TOBN(0xfa3fdcd9, 0x8edbd7cc), TOBN(0x4660bb87, 0xc6ccd753),
+ TOBN(0x9ae90820, 0x21e6b64f), TOBN(0x8a56a713, 0xb36bfb3f),
+ TOBN(0xabfce096, 0x5726d47f), TOBN(0x9eed01b2, 0x0b1a9a7f),
+ TOBN(0x30e9cad4, 0x4eb74a37), TOBN(0x7b2524cc, 0x53e9666d),
+ TOBN(0x6a29683b, 0x8f4b002f), TOBN(0xc2200d7a, 0x41f4fc20),
+ TOBN(0xcf3af47a, 0x3a338acc), TOBN(0x6539a4fb, 0xe7128975),
+ TOBN(0xcec31c14, 0xc33c7fcf), TOBN(0x7eb6799b, 0xc7be322b),
+ TOBN(0x119ef4e9, 0x6646f623), TOBN(0x7b7a26a5, 0x54d7299b),
+ TOBN(0xcb37f08d, 0x403f46f2), TOBN(0x94b8fc43, 0x1a0ec0c7),
+ TOBN(0xbb8514e3, 0xc332142f), TOBN(0xf3ed2c33, 0xe80d2a7a),
+ TOBN(0x8d2080af, 0xb639126c), TOBN(0xf7b6be60, 0xe3553ade),
+ TOBN(0x3950aa9f, 0x1c7e2b09), TOBN(0x847ff958, 0x6410f02b),
+ TOBN(0x877b7cf5, 0x678a31b0), TOBN(0xd50301ae, 0x3998b620),
+ TOBN(0x734257c5, 0xc00fb396), TOBN(0xf9fb18a0, 0x04e672a6),
+ TOBN(0xff8bd8eb, 0xe8758851), TOBN(0x1e64e4c6, 0x5d99ba44),
+ TOBN(0x4b8eaedf, 0x7dfd93b7), TOBN(0xba2f2a98, 0x04e76b8c),
+ TOBN(0x7d790cba, 0xe8053433), TOBN(0xc8e725a0, 0x3d2c9585),
+ TOBN(0x58c5c476, 0xcdd8f5ed), TOBN(0xd106b952, 0xefa9fe1d),
+ TOBN(0x3c5c775b, 0x0eff13a9), TOBN(0x242442ba, 0xe057b930),
+ TOBN(0xe9f458d4, 0xc9b70cbd), TOBN(0x69b71448, 0xa3cdb89a),
+ TOBN(0x41ee46f6, 0x0e2ed742), TOBN(0x573f1045, 0x40067493),
+ TOBN(0xb1e154ff, 0x9d54c304), TOBN(0x2ad0436a, 0x8d3a7502),
+ TOBN(0xee4aaa2d, 0x431a8121), TOBN(0xcd38b3ab, 0x886f11ed),
+ TOBN(0x57d49ea6, 0x034a0eb7), TOBN(0xd2b773bd, 0xf7e85e58),
+ TOBN(0x4a559ac4, 0x9b5c1f14), TOBN(0xc444be1a, 0x3e54df2b),
+ TOBN(0x13aad704, 0xeda41891), TOBN(0xcd927bec, 0x5eb5c788),
+ TOBN(0xeb3c8516, 0xe48c8a34), TOBN(0x1b7ac812, 0x4b546669),
+ TOBN(0x1815f896, 0x594df8ec), TOBN(0x87c6a79c, 0x79227865),
+ TOBN(0xae02a2f0, 0x9b56ddbd), TOBN(0x1339b5ac, 0x8a2f1cf3),
+ TOBN(0xf2b569c7, 0x839dff0d), TOBN(0xb0b9e864, 0xfee9a43d),
+ TOBN(0x4ff8ca41, 0x77bb064e), TOBN(0x145a2812, 0xfd249f63),
+ TOBN(0x3ab7beac, 0xf86f689a), TOBN(0x9bafec27, 0x01d35f5e),
+ TOBN(0x28054c65, 0x4265aa91), TOBN(0xa4b18304, 0x035efe42),
+ TOBN(0x6887b0e6, 0x9639dec7), TOBN(0xf4b8f6ad, 0x3d52aea5),
+ TOBN(0xfb9293cc, 0x971a8a13), TOBN(0x3f159e5d, 0x4c934d07),
+ TOBN(0x2c50e9b1, 0x09acbc29), TOBN(0x08eb65e6, 0x7154d129),
+ TOBN(0x4feff589, 0x30b75c3e), TOBN(0x0bb82fe2, 0x94491c93),
+ TOBN(0xd8ac377a, 0x89af62bb), TOBN(0xd7b51490, 0x9685e49f),
+ TOBN(0xabca9a7b, 0x04497f19), TOBN(0x1b35ed0a, 0x1a7ad13f),
+ TOBN(0x6b601e21, 0x3ec86ed6), TOBN(0xda91fcb9, 0xce0c76f1),
+ TOBN(0x9e28507b, 0xd7ab27e1), TOBN(0x7c19a555, 0x63945b7b),
+ TOBN(0x6b43f0a1, 0xaafc9827), TOBN(0x443b4fbd, 0x3aa55b91),
+ TOBN(0x962b2e65, 0x6962c88f), TOBN(0x139da8d4, 0xce0db0ca),
+ TOBN(0xb93f05dd, 0x1b8d6c4f), TOBN(0x779cdff7, 0x180b9824),
+ TOBN(0xbba23fdd, 0xae57c7b7), TOBN(0x345342f2, 0x1b932522),
+ TOBN(0xfd9c80fe, 0x556d4aa3), TOBN(0xa03907ba, 0x6525bb61),
+ TOBN(0x38b010e1, 0xff218933), TOBN(0xc066b654, 0xaa52117b),
+ TOBN(0x8e141920, 0x94f2e6ea), TOBN(0x66a27dca, 0x0d32f2b2),
+ TOBN(0x69c7f993, 0x048b3717), TOBN(0xbf5a989a, 0xb178ae1c),
+ TOBN(0x49fa9058, 0x564f1d6b), TOBN(0x27ec6e15, 0xd31fde4e),
+ TOBN(0x4cce0373, 0x7276e7fc), TOBN(0x64086d79, 0x89d6bf02),
+ TOBN(0x5a72f046, 0x4ccdd979), TOBN(0x909c3566, 0x47775631),
+ TOBN(0x1c07bc6b, 0x75dd7125), TOBN(0xb4c6bc97, 0x87a0428d),
+ TOBN(0x507ece52, 0xfdeb6b9d), TOBN(0xfca56512, 0xb2c95432),
+ TOBN(0x15d97181, 0xd0e8bd06), TOBN(0x384dd317, 0xc6bb46ea),
+ TOBN(0x5441ea20, 0x3952b624), TOBN(0xbcf70dee, 0x4e7dc2fb),
+ TOBN(0x372b016e, 0x6628e8c3), TOBN(0x07a0d667, 0xb60a7522),
+ TOBN(0xcf05751b, 0x0a344ee2), TOBN(0x0ec09a48, 0x118bdeec),
+ TOBN(0x6e4b3d4e, 0xd83dce46), TOBN(0x43a6316d, 0x99d2fc6e),
+ TOBN(0xa99d8989, 0x56cf044c), TOBN(0x7c7f4454, 0xae3e5fb7),
+ TOBN(0xb2e6b121, 0xfbabbe92), TOBN(0x281850fb, 0xe1330076),
+ TOBN(0x093581ec, 0x97890015), TOBN(0x69b1dded, 0x75ff77f5),
+ TOBN(0x7cf0b18f, 0xab105105), TOBN(0x953ced31, 0xa89ccfef),
+ TOBN(0x3151f85f, 0xeb914009), TOBN(0x3c9f1b87, 0x88ed48ad),
+ TOBN(0xc9aba1a1, 0x4a7eadcb), TOBN(0x928e7501, 0x522e71cf),
+ TOBN(0xeaede727, 0x3a2e4f83), TOBN(0x467e10d1, 0x1ce3bbd3),
+ TOBN(0xf3442ac3, 0xb955dcf0), TOBN(0xba96307d, 0xd3d5e527),
+ TOBN(0xf763a10e, 0xfd77f474), TOBN(0x5d744bd0, 0x6a6e1ff0),
+ TOBN(0xd287282a, 0xa777899e), TOBN(0xe20eda8f, 0xd03f3cde),
+ TOBN(0x6a7e75bb, 0x50b07d31), TOBN(0x0b7e2a94, 0x6f379de4),
+ TOBN(0x31cb64ad, 0x19f593cf), TOBN(0x7b1a9e4f, 0x1e76ef1d),
+ TOBN(0xe18c9c9d, 0xb62d609c), TOBN(0x439bad6d, 0xe779a650),
+ TOBN(0x219d9066, 0xe032f144), TOBN(0x1db632b8, 0xe8b2ec6a),
+ TOBN(0xff0d0fd4, 0xfda12f78), TOBN(0x56fb4c2d, 0x2a25d265),
+ TOBN(0x5f4e2ee1, 0x255a03f1), TOBN(0x61cd6af2, 0xe96af176),
+ TOBN(0xe0317ba8, 0xd068bc97), TOBN(0x927d6bab, 0x264b988e),
+ TOBN(0xa18f07e0, 0xe90fb21e), TOBN(0x00fd2b80, 0xbba7fca1),
+ TOBN(0x20387f27, 0x95cd67b5), TOBN(0x5b89a4e7, 0xd39707f7),
+ TOBN(0x8f83ad3f, 0x894407ce), TOBN(0xa0025b94, 0x6c226132),
+ TOBN(0xc79563c7, 0xf906c13b), TOBN(0x5f548f31, 0x4e7bb025),
+ TOBN(0x2b4c6b8f, 0xeac6d113), TOBN(0xa67e3f9c, 0x0e813c76),
+ TOBN(0x3982717c, 0x3fe1f4b9), TOBN(0x58865819, 0x26d8050e),
+ TOBN(0x99f3640c, 0xf7f06f20), TOBN(0xdc610216, 0x2a66ebc2),
+ TOBN(0x52f2c175, 0x767a1e08), TOBN(0x05660e1a, 0x5999871b),
+ TOBN(0x6b0f1762, 0x6d3c4693), TOBN(0xf0e7d627, 0x37ed7bea),
+ TOBN(0xc51758c7, 0xb75b226d), TOBN(0x40a88628, 0x1f91613b),
+ TOBN(0x889dbaa7, 0xbbb38ce0), TOBN(0xe0404b65, 0xbddcad81),
+ TOBN(0xfebccd3a, 0x8bc9671f), TOBN(0xfbf9a357, 0xee1f5375),
+ TOBN(0x5dc169b0, 0x28f33398), TOBN(0xb07ec11d, 0x72e90f65),
+ TOBN(0xae7f3b4a, 0xfaab1eb1), TOBN(0xd970195e, 0x5f17538a),
+ TOBN(0x52b05cbe, 0x0181e640), TOBN(0xf5debd62, 0x2643313d),
+ TOBN(0x76148154, 0x5df31f82), TOBN(0x23e03b33, 0x3a9e13c5),
+ TOBN(0xff758949, 0x4fde0c1f), TOBN(0xbf8a1abe, 0xe5b6ec20),
+ TOBN(0x702278fb, 0x87e1db6c), TOBN(0xc447ad7a, 0x35ed658f),
+ TOBN(0x48d4aa38, 0x03d0ccf2), TOBN(0x80acb338, 0x819a7c03),
+ TOBN(0x9bc7c89e, 0x6e17cecc), TOBN(0x46736b8b, 0x03be1d82),
+ TOBN(0xd65d7b60, 0xc0432f96), TOBN(0xddebe7a3, 0xdeb5442f),
+ TOBN(0x79a25307, 0x7dff69a2), TOBN(0x37a56d94, 0x02cf3122),
+ TOBN(0x8bab8aed, 0xf2350d0a), TOBN(0x13c3f276, 0x037b0d9a),
+ TOBN(0xc664957c, 0x44c65cae), TOBN(0x88b44089, 0xc2e71a88),
+ TOBN(0xdb88e5a3, 0x5cb02664), TOBN(0x5d4c0bf1, 0x8686c72e),
+ TOBN(0xea3d9b62, 0xa682d53e), TOBN(0x9b605ef4, 0x0b2ad431),
+ TOBN(0x71bac202, 0xc69645d0), TOBN(0xa115f03a, 0x6a1b66e7),
+ TOBN(0xfe2c563a, 0x158f4dc4), TOBN(0xf715b3a0, 0x4d12a78c),
+ TOBN(0x8f7f0a48, 0xd413213a), TOBN(0x2035806d, 0xc04becdb),
+ TOBN(0xecd34a99, 0x5d8587f5), TOBN(0x4d8c3079, 0x9f6d3a71),
+ TOBN(0x1b2a2a67, 0x8d95a8f6), TOBN(0xc58c9d7d, 0xf2110d0d),
+ TOBN(0xdeee81d5, 0xcf8fba3f), TOBN(0xa42be3c0, 0x0c7cdf68),
+ TOBN(0x2126f742, 0xd43b5eaa), TOBN(0x054a0766, 0xdfa59b85),
+ TOBN(0x9d0d5e36, 0x126bfd45), TOBN(0xa1f8fbd7, 0x384f8a8f),
+ TOBN(0x317680f5, 0xd563fccc), TOBN(0x48ca5055, 0xf280a928),
+ TOBN(0xe00b81b2, 0x27b578cf), TOBN(0x10aad918, 0x2994a514),
+ TOBN(0xd9e07b62, 0xb7bdc953), TOBN(0x9f0f6ff2, 0x5bc086dd),
+ TOBN(0x09d1ccff, 0x655eee77), TOBN(0x45475f79, 0x5bef7df1),
+ TOBN(0x3faa28fa, 0x86f702cc), TOBN(0x92e60905, 0x0f021f07),
+ TOBN(0xe9e62968, 0x7f8fa8c6), TOBN(0xbd71419a, 0xf036ea2c),
+ TOBN(0x171ee1cc, 0x6028da9a), TOBN(0x5352fe1a, 0xc251f573),
+ TOBN(0xf8ff236e, 0x3fa997f4), TOBN(0xd831b6c9, 0xa5749d5f),
+ TOBN(0x7c872e1d, 0xe350e2c2), TOBN(0xc56240d9, 0x1e0ce403),
+ TOBN(0xf9deb077, 0x6974f5cb), TOBN(0x7d50ba87, 0x961c3728),
+ TOBN(0xd6f89426, 0x5a3a2518), TOBN(0xcf817799, 0xc6303d43),
+ TOBN(0x510a0471, 0x619e5696), TOBN(0xab049ff6, 0x3a5e307b),
+ TOBN(0xe4cdf9b0, 0xfeb13ec7), TOBN(0xd5e97117, 0x9d8ff90c),
+ TOBN(0xf6f64d06, 0x9afa96af), TOBN(0x00d0bf5e, 0x9d2012a2),
+ TOBN(0xe63f301f, 0x358bcdc0), TOBN(0x07689e99, 0x0a9d47f8),
+ TOBN(0x1f689e2f, 0x4f43d43a), TOBN(0x4d542a16, 0x90920904),
+ TOBN(0xaea293d5, 0x9ca0a707), TOBN(0xd061fe45, 0x8ac68065),
+ TOBN(0x1033bf1b, 0x0090008c), TOBN(0x29749558, 0xc08a6db6),
+ TOBN(0x74b5fc59, 0xc1d5d034), TOBN(0xf712e9f6, 0x67e215e0),
+ TOBN(0xfd520cbd, 0x860200e6), TOBN(0x0229acb4, 0x3ea22588),
+ TOBN(0x9cd1e14c, 0xfff0c82e), TOBN(0x87684b62, 0x59c69e73),
+ TOBN(0xda85e61c, 0x96ccb989), TOBN(0x2d5dbb02, 0xa3d06493),
+ TOBN(0xf22ad33a, 0xe86b173c), TOBN(0xe8e41ea5, 0xa79ff0e3),
+ TOBN(0x01d2d725, 0xdd0d0c10), TOBN(0x31f39088, 0x032d28f9),
+ TOBN(0x7b3f71e1, 0x7829839e), TOBN(0x0cf691b4, 0x4502ae58),
+ TOBN(0xef658dbd, 0xbefc6115), TOBN(0xa5cd6ee5, 0xb3ab5314),
+ TOBN(0x206c8d7b, 0x5f1d2347), TOBN(0x794645ba, 0x4cc2253a),
+ TOBN(0xd517d8ff, 0x58389e08), TOBN(0x4fa20dee, 0x9f847288),
+ TOBN(0xeba072d8, 0xd797770a), TOBN(0x7360c91d, 0xbf429e26),
+ TOBN(0x7200a3b3, 0x80af8279), TOBN(0x6a1c9150, 0x82dadce3),
+ TOBN(0x0ee6d3a7, 0xc35d8794), TOBN(0x042e6558, 0x0356bae5),
+ TOBN(0x9f59698d, 0x643322fd), TOBN(0x9379ae15, 0x50a61967),
+ TOBN(0x64b9ae62, 0xfcc9981e), TOBN(0xaed3d631, 0x6d2934c6),
+ TOBN(0x2454b302, 0x5e4e65eb), TOBN(0xab09f647, 0xf9950428)}
+ ,
+ {TOBN(0xb2083a12, 0x22248acc), TOBN(0x1f6ec0ef, 0x3264e366),
+ TOBN(0x5659b704, 0x5afdee28), TOBN(0x7a823a40, 0xe6430bb5),
+ TOBN(0x24592a04, 0xe1900a79), TOBN(0xcde09d4a, 0xc9ee6576),
+ TOBN(0x52b6463f, 0x4b5ea54a), TOBN(0x1efe9ed3, 0xd3ca65a7),
+ TOBN(0xe27a6dbe, 0x305406dd), TOBN(0x8eb7dc7f, 0xdd5d1957),
+ TOBN(0xf54a6876, 0x387d4d8f), TOBN(0x9c479409, 0xc7762de4),
+ TOBN(0xbe4d5b5d, 0x99b30778), TOBN(0x25380c56, 0x6e793682),
+ TOBN(0x602d37f3, 0xdac740e3), TOBN(0x140deabe, 0x1566e4ae),
+ TOBN(0x4481d067, 0xafd32acf), TOBN(0xd8f0fcca, 0xe1f71ccf),
+ TOBN(0xd208dd0c, 0xb596f2da), TOBN(0xd049d730, 0x9aad93f9),
+ TOBN(0xc79f263d, 0x42ab580e), TOBN(0x09411bb1, 0x23f707b4),
+ TOBN(0x8cfde1ff, 0x835e0eda), TOBN(0x72707490, 0x90f03402),
+ TOBN(0xeaee6126, 0xc49a861e), TOBN(0x024f3b65, 0xe14f0d06),
+ TOBN(0x51a3f1e8, 0xc69bfc17), TOBN(0xc3c3a8e9, 0xa7686381),
+ TOBN(0x3400752c, 0xb103d4c8), TOBN(0x02bc4613, 0x9218b36b),
+ TOBN(0xc67f75eb, 0x7651504a), TOBN(0xd6848b56, 0xd02aebfa),
+ TOBN(0xbd9802e6, 0xc30fa92b), TOBN(0x5a70d96d, 0x9a552784),
+ TOBN(0x9085c4ea, 0x3f83169b), TOBN(0xfa9423bb, 0x06908228),
+ TOBN(0x2ffebe12, 0xfe97a5b9), TOBN(0x85da6049, 0x71b99118),
+ TOBN(0x9cbc2f7f, 0x63178846), TOBN(0xfd96bc70, 0x9153218e),
+ TOBN(0x958381db, 0x1782269b), TOBN(0xae34bf79, 0x2597e550),
+ TOBN(0xbb5c6064, 0x5f385153), TOBN(0x6f0e96af, 0xe3088048),
+ TOBN(0xbf6a0215, 0x77884456), TOBN(0xb3b5688c, 0x69310ea7),
+ TOBN(0x17c94295, 0x04fad2de), TOBN(0xe020f0e5, 0x17896d4d),
+ TOBN(0x730ba0ab, 0x0976505f), TOBN(0x567f6813, 0x095e2ec5),
+ TOBN(0x47062010, 0x6331ab71), TOBN(0x72cfa977, 0x41d22b9f),
+ TOBN(0x33e55ead, 0x8a2373da), TOBN(0xa8d0d5f4, 0x7ba45a68),
+ TOBN(0xba1d8f9c, 0x03029d15), TOBN(0x8f34f1cc, 0xfc55b9f3),
+ TOBN(0xcca4428d, 0xbbe5a1a9), TOBN(0x8187fd5f, 0x3126bd67),
+ TOBN(0x0036973a, 0x48105826), TOBN(0xa39b6663, 0xb8bd61a0),
+ TOBN(0x6d42deef, 0x2d65a808), TOBN(0x4969044f, 0x94636b19),
+ TOBN(0xf611ee47, 0xdd5d564c), TOBN(0x7b2f3a49, 0xd2873077),
+ TOBN(0x94157d45, 0x300eb294), TOBN(0x2b2a656e, 0x169c1494),
+ TOBN(0xc000dd76, 0xd3a47aa9), TOBN(0xa2864e4f, 0xa6243ea4),
+ TOBN(0x82716c47, 0xdb89842e), TOBN(0x12dfd7d7, 0x61479fb7),
+ TOBN(0x3b9a2c56, 0xe0b2f6dc), TOBN(0x46be862a, 0xd7f85d67),
+ TOBN(0x03b0d8dd, 0x0f82b214), TOBN(0x460c34f9, 0xf103cbc6),
+ TOBN(0xf32e5c03, 0x18d79e19), TOBN(0x8b8888ba, 0xa84117f8),
+ TOBN(0x8f3c37dc, 0xc0722677), TOBN(0x10d21be9, 0x1c1c0f27),
+ TOBN(0xd47c8468, 0xe0f7a0c6), TOBN(0x9bf02213, 0xadecc0e0),
+ TOBN(0x0baa7d12, 0x42b48b99), TOBN(0x1bcb665d, 0x48424096),
+ TOBN(0x8b847cd6, 0xebfb5cfb), TOBN(0x87c2ae56, 0x9ad4d10d),
+ TOBN(0xf1cbb122, 0x0de36726), TOBN(0xe7043c68, 0x3fdfbd21),
+ TOBN(0x4bd0826a, 0x4e79d460), TOBN(0x11f5e598, 0x4bd1a2cb),
+ TOBN(0x97554160, 0xb7fe7b6e), TOBN(0x7d16189a, 0x400a3fb2),
+ TOBN(0xd73e9bea, 0xe328ca1e), TOBN(0x0dd04b97, 0xe793d8cc),
+ TOBN(0xa9c83c9b, 0x506db8cc), TOBN(0x5cd47aae, 0xcf38814c),
+ TOBN(0x26fc430d, 0xb64b45e6), TOBN(0x079b5499, 0xd818ea84),
+ TOBN(0xebb01102, 0xc1c24a3b), TOBN(0xca24e568, 0x1c161c1a),
+ TOBN(0x103eea69, 0x36f00a4a), TOBN(0x9ad76ee8, 0x76176c7b),
+ TOBN(0x97451fc2, 0x538e0ff7), TOBN(0x94f89809, 0x6604b3b0),
+ TOBN(0x6311436e, 0x3249cfd7), TOBN(0x27b4a7bd, 0x41224f69),
+ TOBN(0x03b5d21a, 0xe0ac2941), TOBN(0x279b0254, 0xc2d31937),
+ TOBN(0x3307c052, 0xcac992d0), TOBN(0x6aa7cb92, 0xefa8b1f3),
+ TOBN(0x5a182580, 0x0d37c7a5), TOBN(0x13380c37, 0x342d5422),
+ TOBN(0x92ac2d66, 0xd5d2ef92), TOBN(0x035a70c9, 0x030c63c6),
+ TOBN(0xc16025dd, 0x4ce4f152), TOBN(0x1f419a71, 0xf9df7c06),
+ TOBN(0x6d5b2214, 0x91e4bb14), TOBN(0xfc43c6cc, 0x839fb4ce),
+ TOBN(0x49f06591, 0x925d6b2d), TOBN(0x4b37d9d3, 0x62186598),
+ TOBN(0x8c54a971, 0xd01b1629), TOBN(0xe1a9c29f, 0x51d50e05),
+ TOBN(0x5109b785, 0x71ba1861), TOBN(0x48b22d5c, 0xd0c8f93d),
+ TOBN(0xe8fa84a7, 0x8633bb93), TOBN(0x53fba6ba, 0x5aebbd08),
+ TOBN(0x7ff27df3, 0xe5eea7d8), TOBN(0x521c8796, 0x68ca7158),
+ TOBN(0xb9d5133b, 0xce6f1a05), TOBN(0x2d50cd53, 0xfd0ebee4),
+ TOBN(0xc82115d6, 0xc5a3ef16), TOBN(0x993eff9d, 0xba079221),
+ TOBN(0xe4da2c5e, 0x4b5da81c), TOBN(0x9a89dbdb, 0x8033fd85),
+ TOBN(0x60819ebf, 0x2b892891), TOBN(0x53902b21, 0x5d14a4d5),
+ TOBN(0x6ac35051, 0xd7fda421), TOBN(0xcc6ab885, 0x61c83284),
+ TOBN(0x14eba133, 0xf74cff17), TOBN(0x240aaa03, 0xecb813f2),
+ TOBN(0xcfbb6540, 0x6f665bee), TOBN(0x084b1fe4, 0xa425ad73),
+ TOBN(0x009d5d16, 0xd081f6a6), TOBN(0x35304fe8, 0xeef82c90),
+ TOBN(0xf20346d5, 0xaa9eaa22), TOBN(0x0ada9f07, 0xac1c91e3),
+ TOBN(0xa6e21678, 0x968a6144), TOBN(0x54c1f77c, 0x07b31a1e),
+ TOBN(0xd6bb787e, 0x5781fbe1), TOBN(0x61bd2ee0, 0xe31f1c4a),
+ TOBN(0xf25aa1e9, 0x781105fc), TOBN(0x9cf2971f, 0x7b2f8e80),
+ TOBN(0x26d15412, 0xcdff919b), TOBN(0x01db4ebe, 0x34bc896e),
+ TOBN(0x7d9b3e23, 0xb40df1cf), TOBN(0x59337373, 0x94e971b4),
+ TOBN(0xbf57bd14, 0x669cf921), TOBN(0x865daedf, 0x0c1a1064),
+ TOBN(0x3eb70bd3, 0x83279125), TOBN(0xbc3d5b9f, 0x34ecdaab),
+ TOBN(0x91e3ed7e, 0x5f755caf), TOBN(0x49699f54, 0xd41e6f02),
+ TOBN(0x185770e1, 0xd4a7a15b), TOBN(0x08f3587a, 0xeaac87e7),
+ TOBN(0x352018db, 0x473133ea), TOBN(0x674ce719, 0x04fd30fc),
+ TOBN(0x7b8d9835, 0x088b3e0e), TOBN(0x7a0356a9, 0x5d0d47a1),
+ TOBN(0x9d9e7659, 0x6474a3c4), TOBN(0x61ea48a7, 0xff66966c),
+ TOBN(0x30417758, 0x0f3e4834), TOBN(0xfdbb21c2, 0x17a9afcb),
+ TOBN(0x756fa17f, 0x2f9a67b3), TOBN(0x2a6b2421, 0xa245c1a8),
+ TOBN(0x64be2794, 0x4af02291), TOBN(0xade465c6, 0x2a5804fe),
+ TOBN(0x8dffbd39, 0xa6f08fd7), TOBN(0xc4efa84c, 0xaa14403b),
+ TOBN(0xa1b91b2a, 0x442b0f5c), TOBN(0xb748e317, 0xcf997736),
+ TOBN(0x8d1b62bf, 0xcee90e16), TOBN(0x907ae271, 0x0b2078c0),
+ TOBN(0xdf31534b, 0x0c9bcddd), TOBN(0x043fb054, 0x39adce83),
+ TOBN(0x99031043, 0xd826846a), TOBN(0x61a9c0d6, 0xb144f393),
+ TOBN(0xdab48046, 0x47718427), TOBN(0xdf17ff9b, 0x6e830f8b),
+ TOBN(0x408d7ee8, 0xe49a1347), TOBN(0x6ac71e23, 0x91c1d4ae),
+ TOBN(0xc8cbb9fd, 0x1defd73c), TOBN(0x19840657, 0xbbbbfec5),
+ TOBN(0x39db1cb5, 0x9e7ef8ea), TOBN(0x78aa8296, 0x64105f30),
+ TOBN(0xa3d9b7f0, 0xa3738c29), TOBN(0x0a2f235a, 0xbc3250a3),
+ TOBN(0x55e506f6, 0x445e4caf), TOBN(0x0974f73d, 0x33475f7a),
+ TOBN(0xd37dbba3, 0x5ba2f5a8), TOBN(0x542c6e63, 0x6af40066),
+ TOBN(0x26d99b53, 0xc5d73e2c), TOBN(0x06060d7d, 0x6c3ca33e),
+ TOBN(0xcdbef1c2, 0x065fef4a), TOBN(0x77e60f7d, 0xfd5b92e3),
+ TOBN(0xd7c549f0, 0x26708350), TOBN(0x201b3ad0, 0x34f121bf),
+ TOBN(0x5fcac2a1, 0x0334fc14), TOBN(0x8a9a9e09, 0x344552f6),
+ TOBN(0x7dd8a1d3, 0x97653082), TOBN(0x5fc0738f, 0x79d4f289),
+ TOBN(0x787d244d, 0x17d2d8c3), TOBN(0xeffc6345, 0x70830684),
+ TOBN(0x5ddb96dd, 0xe4f73ae5), TOBN(0x8efb14b1, 0x172549a5),
+ TOBN(0x6eb73eee, 0x2245ae7a), TOBN(0xbca4061e, 0xea11f13e),
+ TOBN(0xb577421d, 0x30b01f5d), TOBN(0xaa688b24, 0x782e152c),
+ TOBN(0x67608e71, 0xbd3502ba), TOBN(0x4ef41f24, 0xb4de75a0),
+ TOBN(0xb08dde5e, 0xfd6125e5), TOBN(0xde484825, 0xa409543f),
+ TOBN(0x1f198d98, 0x65cc2295), TOBN(0x428a3771, 0x6e0edfa2),
+ TOBN(0x4f9697a2, 0xadf35fc7), TOBN(0x01a43c79, 0xf7cac3c7),
+ TOBN(0xb05d7059, 0x0fd3659a), TOBN(0x8927f30c, 0xbb7f2d9a),
+ TOBN(0x4023d1ac, 0x8cf984d3), TOBN(0x32125ed3, 0x02897a45),
+ TOBN(0xfb572dad, 0x3d414205), TOBN(0x73000ef2, 0xe3fa82a9),
+ TOBN(0x4c0868e9, 0xf10a5581), TOBN(0x5b61fc67, 0x6b0b3ca5),
+ TOBN(0xc1258d5b, 0x7cae440c), TOBN(0x21c08b41, 0x402b7531),
+ TOBN(0xf61a8955, 0xde932321), TOBN(0x3568faf8, 0x2d1408af),
+ TOBN(0x71b15e99, 0x9ecf965b), TOBN(0xf14ed248, 0xe917276f),
+ TOBN(0xc6f4caa1, 0x820cf9e2), TOBN(0x681b20b2, 0x18d83c7e),
+ TOBN(0x6cde738d, 0xc6c01120), TOBN(0x71db0813, 0xae70e0db),
+ TOBN(0x95fc0644, 0x74afe18c), TOBN(0x34619053, 0x129e2be7),
+ TOBN(0x80615cea, 0xdb2a3b15), TOBN(0x0a49a19e, 0xdb4c7073),
+ TOBN(0x0e1b84c8, 0x8fd2d367), TOBN(0xd74bf462, 0x033fb8aa),
+ TOBN(0x889f6d65, 0x533ef217), TOBN(0x7158c7e4, 0xc3ca2e87),
+ TOBN(0xfb670dfb, 0xdc2b4167), TOBN(0x75910a01, 0x844c257f),
+ TOBN(0xf336bf07, 0xcf88577d), TOBN(0x22245250, 0xe45e2ace),
+ TOBN(0x2ed92e8d, 0x7ca23d85), TOBN(0x29f8be4c, 0x2b812f58),
+ TOBN(0xdd9ebaa7, 0x076fe12b), TOBN(0x3f2400cb, 0xae1537f9),
+ TOBN(0x1aa93528, 0x17bdfb46), TOBN(0xc0f98430, 0x67883b41),
+ TOBN(0x5590ede1, 0x0170911d), TOBN(0x7562f5bb, 0x34d4b17f),
+ TOBN(0xe1fa1df2, 0x1826b8d2), TOBN(0xb40b796a, 0x6bd80d59),
+ TOBN(0xd65bf197, 0x3467ba92), TOBN(0x8c9b46db, 0xf70954b0),
+ TOBN(0x97c8a0f3, 0x0e78f15d), TOBN(0xa8f3a69a, 0x85a4c961),
+ TOBN(0x4242660f, 0x61e4ce9b), TOBN(0xbf06aab3, 0x6ea6790c),
+ TOBN(0xc6706f8e, 0xec986416), TOBN(0x9e56dec1, 0x9a9fc225),
+ TOBN(0x527c46f4, 0x9a9898d9), TOBN(0xd799e77b, 0x5633cdef),
+ TOBN(0x24eacc16, 0x7d9e4297), TOBN(0xabb61cea, 0x6b1cb734),
+ TOBN(0xbee2e8a7, 0xf778443c), TOBN(0x3bb42bf1, 0x29de2fe6),
+ TOBN(0xcbed86a1, 0x3003bb6f), TOBN(0xd3918e6c, 0xd781cdf6),
+ TOBN(0x4bee3271, 0x9a5103f1), TOBN(0x5243efc6, 0xf50eac06),
+ TOBN(0xb8e122cb, 0x6adcc119), TOBN(0x1b7faa84, 0xc0b80a08),
+ TOBN(0x32c3d1bd, 0x6dfcd08c), TOBN(0x129dec4e, 0x0be427de),
+ TOBN(0x98ab679c, 0x1d263c83), TOBN(0xafc83cb7, 0xcef64eff),
+ TOBN(0x85eb6088, 0x2fa6be76), TOBN(0x892585fb, 0x1328cbfe),
+ TOBN(0xc154d3ed, 0xcf618dda), TOBN(0xc44f601b, 0x3abaf26e),
+ TOBN(0x7bf57d0b, 0x2be1fdfd), TOBN(0xa833bd2d, 0x21137fee),
+ TOBN(0x9353af36, 0x2db591a8), TOBN(0xc76f26dc, 0x5562a056),
+ TOBN(0x1d87e47d, 0x3fdf5a51), TOBN(0x7afb5f93, 0x55c9cab0),
+ TOBN(0x91bbf58f, 0x89e0586e), TOBN(0x7c72c018, 0x0d843709),
+ TOBN(0xa9a5aafb, 0x99b5c3dc), TOBN(0xa48a0f1d, 0x3844aeb0),
+ TOBN(0x7178b7dd, 0xb667e482), TOBN(0x453985e9, 0x6e23a59a),
+ TOBN(0x4a54c860, 0x01b25dd8), TOBN(0x0dd37f48, 0xfb897c8a),
+ TOBN(0x5f8aa610, 0x0ea90cd9), TOBN(0xc8892c68, 0x16d5830d),
+ TOBN(0xeb4befc0, 0xef514ca5), TOBN(0x478eb679, 0xe72c9ee6),
+ TOBN(0x9bca20da, 0xdbc40d5f), TOBN(0xf015de21, 0xdde4f64a),
+ TOBN(0xaa6a4de0, 0xeaf4b8a5), TOBN(0x68cfd9ca, 0x4bc60e32),
+ TOBN(0x668a4b01, 0x7fd15e70), TOBN(0xd9f0694a, 0xf27dc09d),
+ TOBN(0xf6c3cad5, 0xba708bcd), TOBN(0x5cd2ba69, 0x5bb95c2a),
+ TOBN(0xaa28c1d3, 0x33c0a58f), TOBN(0x23e274e3, 0xabc77870),
+ TOBN(0x44c3692d, 0xdfd20a4a), TOBN(0x091c5fd3, 0x81a66653),
+ TOBN(0x6c0bb691, 0x09a0757d), TOBN(0x9072e8b9, 0x667343ea),
+ TOBN(0x31d40eb0, 0x80848bec), TOBN(0x95bd480a, 0x79fd36cc),
+ TOBN(0x01a77c61, 0x65ed43f5), TOBN(0xafccd127, 0x2e0d40bf),
+ TOBN(0xeccfc82d, 0x1cc1884b), TOBN(0xc85ac201, 0x5d4753b4),
+ TOBN(0xc7a6caac, 0x658e099f), TOBN(0xcf46369e, 0x04b27390),
+ TOBN(0xe2e7d049, 0x506467ea), TOBN(0x481b63a2, 0x37cdeccc),
+ TOBN(0x4029abd8, 0xed80143a), TOBN(0x28bfe3c7, 0xbcb00b88),
+ TOBN(0x3bec1009, 0x0643d84a), TOBN(0x885f3668, 0xabd11041),
+ TOBN(0xdb02432c, 0xf83a34d6), TOBN(0x32f7b360, 0x719ceebe),
+ TOBN(0xf06c7837, 0xdad1fe7a), TOBN(0x60a157a9, 0x5441a0b0),
+ TOBN(0x704970e9, 0xe2d47550), TOBN(0xcd2bd553, 0x271b9020),
+ TOBN(0xff57f82f, 0x33e24a0b), TOBN(0x9cbee23f, 0xf2565079),
+ TOBN(0x16353427, 0xeb5f5825), TOBN(0x276feec4, 0xe948d662),
+ TOBN(0xd1b62bc6, 0xda10032b), TOBN(0x718351dd, 0xf0e72a53),
+ TOBN(0x93452076, 0x2420e7ba), TOBN(0x96368fff, 0x3a00118d),
+ TOBN(0x00ce2d26, 0x150a49e4), TOBN(0x0c28b636, 0x3f04706b),
+ TOBN(0xbad65a46, 0x58b196d0), TOBN(0x6c8455fc, 0xec9f8b7c),
+ TOBN(0xe90c895f, 0x2d71867e), TOBN(0x5c0be31b, 0xedf9f38c),
+ TOBN(0x2a37a15e, 0xd8f6ec04), TOBN(0x239639e7, 0x8cd85251),
+ TOBN(0xd8975315, 0x9c7c4c6b), TOBN(0x603aa3c0, 0xd7409af7),
+ TOBN(0xb8d53d0c, 0x007132fb), TOBN(0x68d12af7, 0xa6849238),
+ TOBN(0xbe0607e7, 0xbf5d9279), TOBN(0x9aa50055, 0xaada74ce),
+ TOBN(0xe81079cb, 0xba7e8ccb), TOBN(0x610c71d1, 0xa5f4ff5e),
+ TOBN(0x9e2ee1a7, 0x5aa07093), TOBN(0xca84004b, 0xa75da47c),
+ TOBN(0x074d3951, 0x3de75401), TOBN(0xf938f756, 0xbb311592),
+ TOBN(0x96197618, 0x00a43421), TOBN(0x39a25362, 0x07bc78c8),
+ TOBN(0x278f710a, 0x0a171276), TOBN(0xb28446ea, 0x8d1a8f08),
+ TOBN(0x184781bf, 0xe3b6a661), TOBN(0x7751cb1d, 0xe6d279f7),
+ TOBN(0xf8ff95d6, 0xc59eb662), TOBN(0x186d90b7, 0x58d3dea7),
+ TOBN(0x0e4bb6c1, 0xdfb4f754), TOBN(0x5c5cf56b, 0x2b2801dc),
+ TOBN(0xc561e452, 0x1f54564d), TOBN(0xb4fb8c60, 0xf0dd7f13),
+ TOBN(0xf8849630, 0x33ff98c7), TOBN(0x9619fffa, 0xcf17769c),
+ TOBN(0xf8090bf6, 0x1bfdd80a), TOBN(0x14d9a149, 0x422cfe63),
+ TOBN(0xb354c360, 0x6f6df9ea), TOBN(0xdbcf770d, 0x218f17ea),
+ TOBN(0x207db7c8, 0x79eb3480), TOBN(0x213dbda8, 0x559b6a26),
+ TOBN(0xac4c200b, 0x29fc81b3), TOBN(0xebc3e09f, 0x171d87c1),
+ TOBN(0x91799530, 0x1481aa9e), TOBN(0x051b92e1, 0x92e114fa),
+ TOBN(0xdf8f92e9, 0xecb5537f), TOBN(0x44b1b2cc, 0x290c7483),
+ TOBN(0xa711455a, 0x2adeb016), TOBN(0x964b6856, 0x81a10c2c),
+ TOBN(0x4f159d99, 0xcec03623), TOBN(0x05532225, 0xef3271ea),
+ TOBN(0xb231bea3, 0xc5ee4849), TOBN(0x57a54f50, 0x7094f103),
+ TOBN(0x3e2d421d, 0x9598b352), TOBN(0xe865a49c, 0x67412ab4),
+ TOBN(0xd2998a25, 0x1cc3a912), TOBN(0x5d092808, 0x0c74d65d),
+ TOBN(0x73f45908, 0x4088567a), TOBN(0xeb6b280e, 0x1f214a61),
+ TOBN(0x8c9adc34, 0xcaf0c13d), TOBN(0x39d12938, 0xf561fb80),
+ TOBN(0xb2dc3a5e, 0xbc6edfb4), TOBN(0x7485b1b1, 0xfe4d210e),
+ TOBN(0x062e0400, 0xe186ae72), TOBN(0x91e32d5c, 0x6eeb3b88),
+ TOBN(0x6df574d7, 0x4be59224), TOBN(0xebc88ccc, 0x716d55f3),
+ TOBN(0x26c2e6d0, 0xcad6ed33), TOBN(0xc6e21e7d, 0x0d3e8b10),
+ TOBN(0x2cc5840e, 0x5bcc36bb), TOBN(0x9292445e, 0x7da74f69),
+ TOBN(0x8be8d321, 0x4e5193a8), TOBN(0x3ec23629, 0x8df06413),
+ TOBN(0xc7e9ae85, 0xb134defa), TOBN(0x6073b1d0, 0x1bb2d475),
+ TOBN(0xb9ad615e, 0x2863c00d), TOBN(0x9e29493d, 0x525f4ac4),
+ TOBN(0xc32b1dea, 0x4e9acf4f), TOBN(0x3e1f01c8, 0xa50db88d),
+ TOBN(0xb05d70ea, 0x04da916c), TOBN(0x714b0d0a, 0xd865803e),
+ TOBN(0x4bd493fc, 0x9920cb5e), TOBN(0x5b44b1f7, 0x92c7a3ac),
+ TOBN(0xa2a77293, 0xbcec9235), TOBN(0x5ee06e87, 0xcd378553),
+ TOBN(0xceff8173, 0xda621607), TOBN(0x2bb03e4c, 0x99f5d290),
+ TOBN(0x2945106a, 0xa6f734ac), TOBN(0xb5056604, 0xd25c4732),
+ TOBN(0x5945920c, 0xe079afee), TOBN(0x686e17a0, 0x6789831f),
+ TOBN(0x5966bee8, 0xb74a5ae5), TOBN(0x38a673a2, 0x1e258d46),
+ TOBN(0xbd1cc1f2, 0x83141c95), TOBN(0x3b2ecf4f, 0x0e96e486),
+ TOBN(0xcd3aa896, 0x74e5fc78), TOBN(0x415ec10c, 0x2482fa7a),
+ TOBN(0x15234419, 0x80503380), TOBN(0x513d917a, 0xd314b392),
+ TOBN(0xb0b52f4e, 0x63caecae), TOBN(0x07bf22ad, 0x2dc7780b),
+ TOBN(0xe761e8a1, 0xe4306839), TOBN(0x1b3be962, 0x5dd7feaa),
+ TOBN(0x4fe728de, 0x74c778f1), TOBN(0xf1fa0bda, 0x5e0070f6),
+ TOBN(0x85205a31, 0x6ec3f510), TOBN(0x2c7e4a14, 0xd2980475),
+ TOBN(0xde3c19c0, 0x6f30ebfd), TOBN(0xdb1c1f38, 0xd4b7e644),
+ TOBN(0xfe291a75, 0x5dce364a), TOBN(0xb7b22a3c, 0x058f5be3),
+ TOBN(0x2cd2c302, 0x37fea38c), TOBN(0x2930967a, 0x2e17be17),
+ TOBN(0x87f009de, 0x0c061c65), TOBN(0xcb014aac, 0xedc6ed44),
+ TOBN(0x49bd1cb4, 0x3bafb1eb), TOBN(0x81bd8b5c, 0x282d3688),
+ TOBN(0x1cdab87e, 0xf01a17af), TOBN(0x21f37ac4, 0xe710063b),
+ TOBN(0x5a6c5676, 0x42fc8193), TOBN(0xf4753e70, 0x56a6015c),
+ TOBN(0x020f795e, 0xa15b0a44), TOBN(0x8f37c8d7, 0x8958a958),
+ TOBN(0x63b7e89b, 0xa4b675b5), TOBN(0xb4fb0c0c, 0x0fc31aea),
+ TOBN(0xed95e639, 0xa7ff1f2e), TOBN(0x9880f5a3, 0x619614fb),
+ TOBN(0xdeb6ff02, 0x947151ab), TOBN(0x5bc5118c, 0xa868dcdb),
+ TOBN(0xd8da2055, 0x4c20cea5), TOBN(0xcac2776e, 0x14c4d69a),
+ TOBN(0xcccb22c1, 0x622d599b), TOBN(0xa4ddb653, 0x68a9bb50),
+ TOBN(0x2c4ff151, 0x1b4941b4), TOBN(0xe1ff19b4, 0x6efba588),
+ TOBN(0x35034363, 0xc48345e0), TOBN(0x45542e3d, 0x1e29dfc4),
+ TOBN(0xf197cb91, 0x349f7aed), TOBN(0x3b2b5a00, 0x8fca8420),
+ TOBN(0x7c175ee8, 0x23aaf6d8), TOBN(0x54dcf421, 0x35af32b6),
+ TOBN(0x0ba14307, 0x27d6561e), TOBN(0x879d5ee4, 0xd175b1e2),
+ TOBN(0xc7c43673, 0x99807db5), TOBN(0x77a54455, 0x9cd55bcd),
+ TOBN(0xe6c2ff13, 0x0105c072), TOBN(0x18f7a99f, 0x8dda7da4),
+ TOBN(0x4c301820, 0x0e2d35c1), TOBN(0x06a53ca0, 0xd9cc6c82),
+ TOBN(0xaa21cc1e, 0xf1aa1d9e), TOBN(0x32414334, 0x4a75b1e8),
+ TOBN(0x2a6d1328, 0x0ebe9fdc), TOBN(0x16bd173f, 0x98a4755a),
+ TOBN(0xfbb9b245, 0x2133ffd9), TOBN(0x39a8b2f1, 0x830f1a20),
+ TOBN(0x484bc97d, 0xd5a1f52a), TOBN(0xd6aebf56, 0xa40eddf8),
+ TOBN(0x32257acb, 0x76ccdac6), TOBN(0xaf4d36ec, 0x1586ff27),
+ TOBN(0x8eaa8863, 0xf8de7dd1), TOBN(0x0045d5cf, 0x88647c16)}
+ ,
+ {TOBN(0xa6f3d574, 0xc005979d), TOBN(0xc2072b42, 0x6a40e350),
+ TOBN(0xfca5c156, 0x8de2ecf9), TOBN(0xa8c8bf5b, 0xa515344e),
+ TOBN(0x97aee555, 0x114df14a), TOBN(0xd4374a4d, 0xfdc5ec6b),
+ TOBN(0x754cc28f, 0x2ca85418), TOBN(0x71cb9e27, 0xd3c41f78),
+ TOBN(0x89105079, 0x03605c39), TOBN(0xf0843d9e, 0xa142c96c),
+ TOBN(0xf3744934, 0x16923684), TOBN(0x732caa2f, 0xfa0a2893),
+ TOBN(0xb2e8c270, 0x61160170), TOBN(0xc32788cc, 0x437fbaa3),
+ TOBN(0x39cd818e, 0xa6eda3ac), TOBN(0xe2e94239, 0x9e2b2e07),
+ TOBN(0x6967d39b, 0x0260e52a), TOBN(0xd42585cc, 0x90653325),
+ TOBN(0x0d9bd605, 0x21ca7954), TOBN(0x4fa20877, 0x81ed57b3),
+ TOBN(0x60c1eff8, 0xe34a0bbe), TOBN(0x56b0040c, 0x84f6ef64),
+ TOBN(0x28be2b24, 0xb1af8483), TOBN(0xb2278163, 0xf5531614),
+ TOBN(0x8df27545, 0x5922ac1c), TOBN(0xa7b3ef5c, 0xa52b3f63),
+ TOBN(0x8e77b214, 0x71de57c4), TOBN(0x31682c10, 0x834c008b),
+ TOBN(0xc76824f0, 0x4bd55d31), TOBN(0xb6d1c086, 0x17b61c71),
+ TOBN(0x31db0903, 0xc2a5089d), TOBN(0x9c092172, 0x184e5d3f),
+ TOBN(0xdd7ced5b, 0xc00cc638), TOBN(0x1a2015eb, 0x61278fc2),
+ TOBN(0x2e8e5288, 0x6a37f8d6), TOBN(0xc457786f, 0xe79933ad),
+ TOBN(0xb3fe4cce, 0x2c51211a), TOBN(0xad9b10b2, 0x24c20498),
+ TOBN(0x90d87a4f, 0xd28db5e5), TOBN(0x698cd105, 0x3aca2fc3),
+ TOBN(0x4f112d07, 0xe91b536d), TOBN(0xceb982f2, 0x9eba09d6),
+ TOBN(0x3c157b2c, 0x197c396f), TOBN(0xe23c2d41, 0x7b66eb24),
+ TOBN(0x480c57d9, 0x3f330d37), TOBN(0xb3a4c8a1, 0x79108deb),
+ TOBN(0x702388de, 0xcb199ce5), TOBN(0x0b019211, 0xb944a8d4),
+ TOBN(0x24f2a692, 0x840bb336), TOBN(0x7c353bdc, 0xa669fa7b),
+ TOBN(0xda20d6fc, 0xdec9c300), TOBN(0x625fbe2f, 0xa13a4f17),
+ TOBN(0xa2b1b61a, 0xdbc17328), TOBN(0x008965bf, 0xa9515621),
+ TOBN(0x49690939, 0xc620ff46), TOBN(0x182dd27d, 0x8717e91c),
+ TOBN(0x5ace5035, 0xea6c3997), TOBN(0x54259aaa, 0xc2610bef),
+ TOBN(0xef18bb3f, 0x3c80dd39), TOBN(0x6910b95b, 0x5fc3fa39),
+ TOBN(0xfce2f510, 0x43e09aee), TOBN(0xced56c9f, 0xa7675665),
+ TOBN(0x10e265ac, 0xd872db61), TOBN(0x6982812e, 0xae9fce69),
+ TOBN(0x29be11c6, 0xce800998), TOBN(0x72bb1752, 0xb90360d9),
+ TOBN(0x2c193197, 0x5a4ad590), TOBN(0x2ba2f548, 0x9fc1dbc0),
+ TOBN(0x7fe4eebb, 0xe490ebe0), TOBN(0x12a0a4cd, 0x7fae11c0),
+ TOBN(0x7197cf81, 0xe903ba37), TOBN(0xcf7d4aa8, 0xde1c6dd8),
+ TOBN(0x92af6bf4, 0x3fd5684c), TOBN(0x2b26eecf, 0x80360aa1),
+ TOBN(0xbd960f30, 0x00546a82), TOBN(0x407b3c43, 0xf59ad8fe),
+ TOBN(0x86cae5fe, 0x249c82ba), TOBN(0x9e0faec7, 0x2463744c),
+ TOBN(0x87f551e8, 0x94916272), TOBN(0x033f9344, 0x6ceb0615),
+ TOBN(0x1e5eb0d1, 0x8be82e84), TOBN(0x89967f0e, 0x7a582fef),
+ TOBN(0xbcf687d5, 0xa6e921fa), TOBN(0xdfee4cf3, 0xd37a09ba),
+ TOBN(0x94f06965, 0xb493c465), TOBN(0x638b9a1c, 0x7635c030),
+ TOBN(0x76667864, 0x66f05e9f), TOBN(0xccaf6808, 0xc04da725),
+ TOBN(0xca2eb690, 0x768fccfc), TOBN(0xf402d37d, 0xb835b362),
+ TOBN(0x0efac0d0, 0xe2fdfcce), TOBN(0xefc9cdef, 0xb638d990),
+ TOBN(0x2af12b72, 0xd1669a8b), TOBN(0x33c536bc, 0x5774ccbd),
+ TOBN(0x30b21909, 0xfb34870e), TOBN(0xc38fa2f7, 0x7df25aca),
+ TOBN(0x74c5f02b, 0xbf81f3f5), TOBN(0x0525a5ae, 0xaf7e4581),
+ TOBN(0x88d2aaba, 0x433c54ae), TOBN(0xed9775db, 0x806a56c5),
+ TOBN(0xd320738a, 0xc0edb37d), TOBN(0x25fdb6ee, 0x66cc1f51),
+ TOBN(0xac661d17, 0x10600d76), TOBN(0x931ec1f3, 0xbdd1ed76),
+ TOBN(0x65c11d62, 0x19ee43f1), TOBN(0x5cd57c3e, 0x60829d97),
+ TOBN(0xd26c91a3, 0x984be6e8), TOBN(0xf08d9309, 0x8b0c53bd),
+ TOBN(0x94bc9e5b, 0xc016e4ea), TOBN(0xd3916839, 0x11d43d2b),
+ TOBN(0x886c5ad7, 0x73701155), TOBN(0xe0377626, 0x20b00715),
+ TOBN(0x7f01c9ec, 0xaa80ba59), TOBN(0x3083411a, 0x68538e51),
+ TOBN(0x970370f1, 0xe88128af), TOBN(0x625cc3db, 0x91dec14b),
+ TOBN(0xfef9666c, 0x01ac3107), TOBN(0xb2a8d577, 0xd5057ac3),
+ TOBN(0xb0f26299, 0x92be5df7), TOBN(0xf579c8e5, 0x00353924),
+ TOBN(0xb8fa3d93, 0x1341ed7a), TOBN(0x4223272c, 0xa7b59d49),
+ TOBN(0x3dcb1947, 0x83b8c4a4), TOBN(0x4e413c01, 0xed1302e4),
+ TOBN(0x6d999127, 0xe17e44ce), TOBN(0xee86bf75, 0x33b3adfb),
+ TOBN(0xf6902fe6, 0x25aa96ca), TOBN(0xb73540e4, 0xe5aae47d),
+ TOBN(0x32801d7b, 0x1b4a158c), TOBN(0xe571c99e, 0x27e2a369),
+ TOBN(0x40cb76c0, 0x10d9f197), TOBN(0xc308c289, 0x3167c0ae),
+ TOBN(0xa6ef9dd3, 0xeb7958f2), TOBN(0xa7226dfc, 0x300879b1),
+ TOBN(0x6cd0b362, 0x7edf0636), TOBN(0x4efbce6c, 0x7bc37eed),
+ TOBN(0x75f92a05, 0x8d699021), TOBN(0x586d4c79, 0x772566e3),
+ TOBN(0x378ca5f1, 0x761ad23a), TOBN(0x650d86fc, 0x1465a8ac),
+ TOBN(0x7a4ed457, 0x842ba251), TOBN(0x6b65e3e6, 0x42234933),
+ TOBN(0xaf1543b7, 0x31aad657), TOBN(0xa4cefe98, 0xcbfec369),
+ TOBN(0xb587da90, 0x9f47befb), TOBN(0x6562e9fb, 0x41312d13),
+ TOBN(0xa691ea59, 0xeff1cefe), TOBN(0xcc30477a, 0x05fc4cf6),
+ TOBN(0xa1632461, 0x0b0ffd3d), TOBN(0xa1f16f3b, 0x5b355956),
+ TOBN(0x5b148d53, 0x4224ec24), TOBN(0xdc834e7b, 0xf977012a),
+ TOBN(0x7bfc5e75, 0xb2c69dbc), TOBN(0x3aa77a29, 0x03c3da6c),
+ TOBN(0xde0df03c, 0xca910271), TOBN(0xcbd5ca4a, 0x7806dc55),
+ TOBN(0xe1ca5807, 0x6db476cb), TOBN(0xfde15d62, 0x5f37a31e),
+ TOBN(0xf49af520, 0xf41af416), TOBN(0x96c5c5b1, 0x7d342db5),
+ TOBN(0x155c43b7, 0xeb4ceb9b), TOBN(0x2e993010, 0x4e77371a),
+ TOBN(0x1d2987da, 0x675d43af), TOBN(0xef2bc1c0, 0x8599fd72),
+ TOBN(0x96894b7b, 0x9342f6b2), TOBN(0x201eadf2, 0x7c8e71f0),
+ TOBN(0xf3479d9f, 0x4a1f3efc), TOBN(0xe0f8a742, 0x702a9704),
+ TOBN(0xeafd44b6, 0xb3eba40c), TOBN(0xf9739f29, 0xc1c1e0d0),
+ TOBN(0x0091471a, 0x619d505e), TOBN(0xc15f9c96, 0x9d7c263e),
+ TOBN(0x5be47285, 0x83afbe33), TOBN(0xa3b6d6af, 0x04f1e092),
+ TOBN(0xe76526b9, 0x751a9d11), TOBN(0x2ec5b26d, 0x9a4ae4d2),
+ TOBN(0xeb66f4d9, 0x02f6fb8d), TOBN(0x4063c561, 0x96912164),
+ TOBN(0xeb7050c1, 0x80ef3000), TOBN(0x288d1c33, 0xeaa5b3f0),
+ TOBN(0xe87c68d6, 0x07806fd8), TOBN(0xb2f7f9d5, 0x4bbbf50f),
+ TOBN(0x25972f3a, 0xac8d6627), TOBN(0xf8547774, 0x10e8c13b),
+ TOBN(0xcc50ef6c, 0x872b4a60), TOBN(0xab2a34a4, 0x4613521b),
+ TOBN(0x39c5c190, 0x983e15d1), TOBN(0x61dde5df, 0x59905512),
+ TOBN(0xe417f621, 0x9f2275f3), TOBN(0x0750c8b6, 0x451d894b),
+ TOBN(0x75b04ab9, 0x78b0bdaa), TOBN(0x3bfd9fd4, 0x458589bd),
+ TOBN(0xf1013e30, 0xee9120b6), TOBN(0x2b51af93, 0x23a4743e),
+ TOBN(0xea96ffae, 0x48d14d9e), TOBN(0x71dc0dbe, 0x698a1d32),
+ TOBN(0x914962d2, 0x0180cca4), TOBN(0x1ae60677, 0xc3568963),
+ TOBN(0x8cf227b1, 0x437bc444), TOBN(0xc650c83b, 0xc9962c7a),
+ TOBN(0x23c2c7dd, 0xfe7ccfc4), TOBN(0xf925c89d, 0x1b929d48),
+ TOBN(0x4460f74b, 0x06783c33), TOBN(0xac2c8d49, 0xa590475a),
+ TOBN(0xfb40b407, 0xb807bba0), TOBN(0x9d1e362d, 0x69ff8f3a),
+ TOBN(0xa33e9681, 0xcbef64a4), TOBN(0x67ece5fa, 0x332fb4b2),
+ TOBN(0x6900a99b, 0x739f10e3), TOBN(0xc3341ca9, 0xff525925),
+ TOBN(0xee18a626, 0xa9e2d041), TOBN(0xa5a83685, 0x29580ddd),
+ TOBN(0xf3470c81, 0x9d7de3cd), TOBN(0xedf02586, 0x2062cf9c),
+ TOBN(0xf43522fa, 0xc010edb0), TOBN(0x30314135, 0x13a4b1ae),
+ TOBN(0xc792e02a, 0xdb22b94b), TOBN(0x993d8ae9, 0xa1eaa45b),
+ TOBN(0x8aad6cd3, 0xcd1e1c63), TOBN(0x89529ca7, 0xc5ce688a),
+ TOBN(0x2ccee3aa, 0xe572a253), TOBN(0xe02b6438, 0x02a21efb),
+ TOBN(0xa7091b6e, 0xc9430358), TOBN(0x06d1b1fa, 0x9d7db504),
+ TOBN(0x58846d32, 0xc4744733), TOBN(0x40517c71, 0x379f9e34),
+ TOBN(0x2f65655f, 0x130ef6ca), TOBN(0x526e4488, 0xf1f3503f),
+ TOBN(0x8467bd17, 0x7ee4a976), TOBN(0x1d9dc913, 0x921363d1),
+ TOBN(0xd8d24c33, 0xb069e041), TOBN(0x5eb5da0a, 0x2cdf7f51),
+ TOBN(0x1c0f3cb1, 0x197b994f), TOBN(0x3c95a6c5, 0x2843eae9),
+ TOBN(0x7766ffc9, 0xa6097ea5), TOBN(0x7bea4093, 0xd723b867),
+ TOBN(0xb48e1f73, 0x4db378f9), TOBN(0x70025b00, 0xe37b77ac),
+ TOBN(0x943dc8e7, 0xaf24ad46), TOBN(0xb98a15ac, 0x16d00a85),
+ TOBN(0x3adc38ba, 0x2743b004), TOBN(0xb1c7f4f7, 0x334415ee),
+ TOBN(0xea43df8f, 0x1e62d05a), TOBN(0x32618905, 0x9d76a3b6),
+ TOBN(0x2fbd0bb5, 0xa23a0f46), TOBN(0x5bc971db, 0x6a01918c),
+ TOBN(0x7801d94a, 0xb4743f94), TOBN(0xb94df65e, 0x676ae22b),
+ TOBN(0xaafcbfab, 0xaf95894c), TOBN(0x7b9bdc07, 0x276b2241),
+ TOBN(0xeaf98362, 0x5bdda48b), TOBN(0x5977faf2, 0xa3fcb4df),
+ TOBN(0xbed042ef, 0x052c4b5b), TOBN(0x9fe87f71, 0x067591f0),
+ TOBN(0xc89c73ca, 0x22f24ec7), TOBN(0x7d37fa9e, 0xe64a9f1b),
+ TOBN(0x2710841a, 0x15562627), TOBN(0x2c01a613, 0xc243b034),
+ TOBN(0x1d135c56, 0x2bc68609), TOBN(0xc2ca1715, 0x8b03f1f6),
+ TOBN(0xc9966c2d, 0x3eb81d82), TOBN(0xc02abf4a, 0x8f6df13e),
+ TOBN(0x77b34bd7, 0x8f72b43b), TOBN(0xaff6218f, 0x360c82b0),
+ TOBN(0x0aa5726c, 0x8d55b9d2), TOBN(0xdc0adbe9, 0x99e9bffb),
+ TOBN(0x9097549c, 0xefb9e72a), TOBN(0x16755712, 0x9dfb3111),
+ TOBN(0xdd8bf984, 0xf26847f9), TOBN(0xbcb8e387, 0xdfb30cb7),
+ TOBN(0xc1fd32a7, 0x5171ef9c), TOBN(0x977f3fc7, 0x389b363f),
+ TOBN(0x116eaf2b, 0xf4babda0), TOBN(0xfeab68bd, 0xf7113c8e),
+ TOBN(0xd1e3f064, 0xb7def526), TOBN(0x1ac30885, 0xe0b3fa02),
+ TOBN(0x1c5a6e7b, 0x40142d9d), TOBN(0x839b5603, 0x30921c0b),
+ TOBN(0x48f301fa, 0x36a116a3), TOBN(0x380e1107, 0xcfd9ee6d),
+ TOBN(0x7945ead8, 0x58854be1), TOBN(0x4111c12e, 0xcbd4d49d),
+ TOBN(0xece3b1ec, 0x3a29c2ef), TOBN(0x6356d404, 0x8d3616f5),
+ TOBN(0x9f0d6a8f, 0x594d320e), TOBN(0x0989316d, 0xf651ccd2),
+ TOBN(0x6c32117a, 0x0f8fdde4), TOBN(0x9abe5cc5, 0xa26a9bbc),
+ TOBN(0xcff560fb, 0x9723f671), TOBN(0x21b2a12d, 0x7f3d593c),
+ TOBN(0xe4cb18da, 0x24ba0696), TOBN(0x186e2220, 0xc3543384),
+ TOBN(0x722f64e0, 0x88312c29), TOBN(0x94282a99, 0x17dc7752),
+ TOBN(0x62467bbf, 0x5a85ee89), TOBN(0xf435c650, 0xf10076a0),
+ TOBN(0xc9ff1539, 0x43b3a50b), TOBN(0x7132130c, 0x1a53efbc),
+ TOBN(0x31bfe063, 0xf7b0c5b7), TOBN(0xb0179a7d, 0x4ea994cc),
+ TOBN(0x12d064b3, 0xc85f455b), TOBN(0x47259328, 0x8f6e0062),
+ TOBN(0xf64e590b, 0xb875d6d9), TOBN(0x22dd6225, 0xad92bcc7),
+ TOBN(0xb658038e, 0xb9c3bd6d), TOBN(0x00cdb0d6, 0xfbba27c8),
+ TOBN(0x0c681337, 0x1062c45d), TOBN(0xd8515b8c, 0x2d33407d),
+ TOBN(0xcb8f699e, 0x8cbb5ecf), TOBN(0x8c4347f8, 0xc608d7d8),
+ TOBN(0x2c11850a, 0xbb3e00db), TOBN(0x20a8dafd, 0xecb49d19),
+ TOBN(0xbd781480, 0x45ee2f40), TOBN(0x75e354af, 0x416b60cf),
+ TOBN(0xde0b58a1, 0x8d49a8c4), TOBN(0xe40e94e2, 0xfa359536),
+ TOBN(0xbd4fa59f, 0x62accd76), TOBN(0x05cf466a, 0x8c762837),
+ TOBN(0xb5abda99, 0x448c277b), TOBN(0x5a9e01bf, 0x48b13740),
+ TOBN(0x9d457798, 0x326aad8d), TOBN(0xbdef4954, 0xc396f7e7),
+ TOBN(0x6fb274a2, 0xc253e292), TOBN(0x2800bf0a, 0x1cfe53e7),
+ TOBN(0x22426d31, 0x44438fd4), TOBN(0xef233923, 0x5e259f9a),
+ TOBN(0x4188503c, 0x03f66264), TOBN(0x9e5e7f13, 0x7f9fdfab),
+ TOBN(0x565eb76c, 0x5fcc1aba), TOBN(0xea632548, 0x59b5bff8),
+ TOBN(0x5587c087, 0xaab6d3fa), TOBN(0x92b639ea, 0x6ce39c1b),
+ TOBN(0x0706e782, 0x953b135c), TOBN(0x7308912e, 0x425268ef),
+ TOBN(0x599e92c7, 0x090e7469), TOBN(0x83b90f52, 0x9bc35e75),
+ TOBN(0x4750b3d0, 0x244975b3), TOBN(0xf3a44358, 0x11965d72),
+ TOBN(0x179c6774, 0x9c8dc751), TOBN(0xff18cdfe, 0xd23d9ff0),
+ TOBN(0xc4013833, 0x2028e247), TOBN(0x96e280e2, 0xf3bfbc79),
+ TOBN(0xf60417bd, 0xd0880a84), TOBN(0x263c9f3d, 0x2a568151),
+ TOBN(0x36be15b3, 0x2d2ce811), TOBN(0x846dc0c2, 0xf8291d21),
+ TOBN(0x5cfa0ecb, 0x789fcfdb), TOBN(0x45a0beed, 0xd7535b9a),
+ TOBN(0xec8e9f07, 0x96d69af1), TOBN(0x31a7c5b8, 0x599ab6dc),
+ TOBN(0xd36d45ef, 0xf9e2e09f), TOBN(0x3cf49ef1, 0xdcee954b),
+ TOBN(0x6be34cf3, 0x086cff9b), TOBN(0x88dbd491, 0x39a3360f),
+ TOBN(0x1e96b8cc, 0x0dbfbd1d), TOBN(0xc1e5f7bf, 0xcb7e2552),
+ TOBN(0x0547b214, 0x28819d98), TOBN(0xc770dd9c, 0x7aea9dcb),
+ TOBN(0xaef0d4c7, 0x041d68c8), TOBN(0xcc2b9818, 0x13cb9ba8),
+ TOBN(0x7fc7bc76, 0xfe86c607), TOBN(0x6b7b9337, 0x502a9a95),
+ TOBN(0x1948dc27, 0xd14dab63), TOBN(0x249dd198, 0xdae047be),
+ TOBN(0xe8356584, 0xa981a202), TOBN(0x3531dd18, 0x3a893387),
+ TOBN(0x1be11f90, 0xc85c7209), TOBN(0x93d2fe1e, 0xe2a52b5a),
+ TOBN(0x8225bfe2, 0xec6d6b97), TOBN(0x9cf6d6f4, 0xbd0aa5de),
+ TOBN(0x911459cb, 0x54779f5f), TOBN(0x5649cddb, 0x86aeb1f3),
+ TOBN(0x32133579, 0x3f26ce5a), TOBN(0xc289a102, 0x550f431e),
+ TOBN(0x559dcfda, 0x73b84c6f), TOBN(0x84973819, 0xee3ac4d7),
+ TOBN(0xb51e55e6, 0xf2606a82), TOBN(0xe25f7061, 0x90f2fb57),
+ TOBN(0xacef6c2a, 0xb1a4e37c), TOBN(0x864e359d, 0x5dcf2706),
+ TOBN(0x479e6b18, 0x7ce57316), TOBN(0x2cab2500, 0x3a96b23d),
+ TOBN(0xed489862, 0x8ef16df7), TOBN(0x2056538c, 0xef3758b5),
+ TOBN(0xa7df865e, 0xf15d3101), TOBN(0x80c5533a, 0x61b553d7),
+ TOBN(0x366e1997, 0x4ed14294), TOBN(0x6620741f, 0xb3c0bcd6),
+ TOBN(0x21d1d9c4, 0xedc45418), TOBN(0x005b859e, 0xc1cc4a9d),
+ TOBN(0xdf01f630, 0xa1c462f0), TOBN(0x15d06cf3, 0xf26820c7),
+ TOBN(0x9f7f24ee, 0x3484be47), TOBN(0x2ff33e96, 0x4a0c902f),
+ TOBN(0x00bdf457, 0x5a0bc453), TOBN(0x2378dfaf, 0x1aa238db),
+ TOBN(0x272420ec, 0x856720f2), TOBN(0x2ad9d95b, 0x96797291),
+ TOBN(0xd1242cc6, 0x768a1558), TOBN(0x2e287f8b, 0x5cc86aa8),
+ TOBN(0x796873d0, 0x990cecaa), TOBN(0xade55f81, 0x675d4080),
+ TOBN(0x2645eea3, 0x21f0cd84), TOBN(0x7a1efa0f, 0xb4e17d02),
+ TOBN(0xf6858420, 0x037cc061), TOBN(0x682e05f0, 0xd5d43e12),
+ TOBN(0x59c36994, 0x27218710), TOBN(0x85cbba4d, 0x3f7cd2fc),
+ TOBN(0x726f9729, 0x7a3cd22a), TOBN(0x9f8cd5dc, 0x4a628397),
+ TOBN(0x17b93ab9, 0xc23165ed), TOBN(0xff5f5dbf, 0x122823d4),
+ TOBN(0xc1e4e4b5, 0x654a446d), TOBN(0xd1a9496f, 0x677257ba),
+ TOBN(0x6387ba94, 0xde766a56), TOBN(0x23608bc8, 0x521ec74a),
+ TOBN(0x16a522d7, 0x6688c4d4), TOBN(0x9d6b4282, 0x07373abd),
+ TOBN(0xa62f07ac, 0xb42efaa3), TOBN(0xf73e00f7, 0xe3b90180),
+ TOBN(0x36175fec, 0x49421c3e), TOBN(0xc4e44f9b, 0x3dcf2678),
+ TOBN(0x76df436b, 0x7220f09f), TOBN(0x172755fb, 0x3aa8b6cf),
+ TOBN(0xbab89d57, 0x446139cc), TOBN(0x0a0a6e02, 0x5fe0208f),
+ TOBN(0xcdbb63e2, 0x11e5d399), TOBN(0x33ecaa12, 0xa8977f0b),
+ TOBN(0x59598b21, 0xf7c42664), TOBN(0xb3e91b32, 0xab65d08a),
+ TOBN(0x035822ee, 0xf4502526), TOBN(0x1dcf0176, 0x720a82a9),
+ TOBN(0x50f8598f, 0x3d589e02), TOBN(0xdf0478ff, 0xb1d63d2c),
+ TOBN(0x8b8068bd, 0x1571cd07), TOBN(0x30c3aa4f, 0xd79670cd),
+ TOBN(0x25e8fd4b, 0x941ade7f), TOBN(0x3d1debdc, 0x32790011),
+ TOBN(0x65b6dcbd, 0x3a3f9ff0), TOBN(0x282736a4, 0x793de69c),
+ TOBN(0xef69a0c3, 0xd41d3bd3), TOBN(0xb533b8c9, 0x07a26bde),
+ TOBN(0xe2801d97, 0xdb2edf9f), TOBN(0xdc4a8269, 0xe1877af0),
+ TOBN(0x6c1c5851, 0x3d590dbe), TOBN(0x84632f6b, 0xee4e9357),
+ TOBN(0xd36d36b7, 0x79b33374), TOBN(0xb46833e3, 0x9bbca2e6),
+ TOBN(0x37893913, 0xf7fc0586), TOBN(0x385315f7, 0x66bf4719),
+ TOBN(0x72c56293, 0xb31855dc), TOBN(0xd1416d4e, 0x849061fe),
+ TOBN(0xbeb3ab78, 0x51047213), TOBN(0x447f6e61, 0xf040c996),
+ TOBN(0xd06d310d, 0x638b1d0c), TOBN(0xe28a413f, 0xbad1522e),
+ TOBN(0x685a76cb, 0x82003f86), TOBN(0x610d07f7, 0x0bcdbca3),
+ TOBN(0x6ff66021, 0x9ca4c455), TOBN(0x7df39b87, 0xcea10eec),
+ TOBN(0xb9255f96, 0xe22db218), TOBN(0x8cc6d9eb, 0x08a34c44),
+ TOBN(0xcd4ffb86, 0x859f9276), TOBN(0x8fa15eb2, 0x50d07335),
+ TOBN(0xdf553845, 0xcf2c24b5), TOBN(0x89f66a9f, 0x52f9c3ba),
+ TOBN(0x8f22b5b9, 0xe4a7ceb3), TOBN(0xaffef809, 0x0e134686),
+ TOBN(0x3e53e1c6, 0x8eb8fac2), TOBN(0x93c1e4eb, 0x28aec98e),
+ TOBN(0xb6b91ec5, 0x32a43bcb), TOBN(0x2dbfa947, 0xb2d74a51),
+ TOBN(0xe065d190, 0xca84bad7), TOBN(0xfb13919f, 0xad58e65c),
+ TOBN(0x3c41718b, 0xf1cb6e31), TOBN(0x688969f0, 0x06d05c3f),
+ TOBN(0xd4f94ce7, 0x21264d45), TOBN(0xfdfb65e9, 0x7367532b),
+ TOBN(0x5b1be8b1, 0x0945a39d), TOBN(0x229f789c, 0x2b8baf3b),
+ TOBN(0xd8f41f3e, 0x6f49f15d), TOBN(0x678ce828, 0x907f0792),
+ TOBN(0xc69ace82, 0xfca6e867), TOBN(0x106451ae, 0xd01dcc89),
+ TOBN(0x1bb4f7f0, 0x19fc32d2), TOBN(0x64633dfc, 0xb00c52d2),
+ TOBN(0x8f13549a, 0xad9ea445), TOBN(0x99a3bf50, 0xfb323705),
+ TOBN(0x0c9625a2, 0x534d4dbc), TOBN(0x45b8f1d1, 0xc2a2fea3),
+ TOBN(0x76ec21a1, 0xa530fc1a), TOBN(0x4bac9c2a, 0x9e5bd734),
+ TOBN(0x5996d76a, 0x7b4e3587), TOBN(0x0045cdee, 0x1182d9e3),
+ TOBN(0x1aee24b9, 0x1207f13d), TOBN(0x66452e97, 0x97345a41),
+ TOBN(0x16e5b054, 0x9f950cd0), TOBN(0x9cc72fb1, 0xd7fdd075),
+ TOBN(0x6edd61e7, 0x66249663), TOBN(0xde4caa4d, 0xf043cccb),
+ TOBN(0x11b1f57a, 0x55c7ac17), TOBN(0x779cbd44, 0x1a85e24d),
+ TOBN(0x78030f86, 0xe46081e7), TOBN(0xfd4a6032, 0x8e20f643),
+ TOBN(0xcc7a6488, 0x0a750c0f), TOBN(0x39bacfe3, 0x4e548e83),
+ TOBN(0x3d418c76, 0x0c110f05), TOBN(0x3e4daa4c, 0xb1f11588),
+ TOBN(0x2733e7b5, 0x5ffc69ff), TOBN(0x46f147bc, 0x92053127),
+ TOBN(0x885b2434, 0xd722df94), TOBN(0x6a444f65, 0xe6fc6b7c)}
+ ,
+ {TOBN(0x7a1a465a, 0xc3f16ea8), TOBN(0x115a461d, 0xb2f1d11c),
+ TOBN(0x4767dd95, 0x6c68a172), TOBN(0x3392f2eb, 0xd13a4698),
+ TOBN(0xc7a99ccd, 0xe526cdc7), TOBN(0x8e537fdc, 0x22292b81),
+ TOBN(0x76d8cf69, 0xa6d39198), TOBN(0xffc5ff43, 0x2446852d),
+ TOBN(0x97b14f7e, 0xa90567e6), TOBN(0x513257b7, 0xb6ae5cb7),
+ TOBN(0x85454a3c, 0x9f10903d), TOBN(0xd8d2c9ad, 0x69bc3724),
+ TOBN(0x38da9324, 0x6b29cb44), TOBN(0xb540a21d, 0x77c8cbac),
+ TOBN(0x9bbfe435, 0x01918e42), TOBN(0xfffa707a, 0x56c3614e),
+ TOBN(0x0ce4e3f1, 0xd4e353b7), TOBN(0x062d8a14, 0xef46b0a0),
+ TOBN(0x6408d5ab, 0x574b73fd), TOBN(0xbc41d1c9, 0xd3273ffd),
+ TOBN(0x3538e1e7, 0x6be77800), TOBN(0x71fe8b37, 0xc5655031),
+ TOBN(0x1cd91621, 0x6b9b331a), TOBN(0xad825d0b, 0xbb388f73),
+ TOBN(0x56c2e05b, 0x1cb76219), TOBN(0x0ec0bf91, 0x71567e7e),
+ TOBN(0xe7076f86, 0x61c4c910), TOBN(0xd67b085b, 0xbabc04d9),
+ TOBN(0x9fb90459, 0x5e93a96a), TOBN(0x7526c1ea, 0xfbdc249a),
+ TOBN(0x0d44d367, 0xecdd0bb7), TOBN(0x95399917, 0x9dc0d695),
+ TOBN(0x61360ee9, 0x9e240d18), TOBN(0x057cdcac, 0xb4b94466),
+ TOBN(0xe7667cd1, 0x2fe5325c), TOBN(0x1fa297b5, 0x21974e3b),
+ TOBN(0xfa4081e7, 0xdb083d76), TOBN(0x31993be6, 0xf206bd15),
+ TOBN(0x8949269b, 0x14c19f8c), TOBN(0x21468d72, 0xa9d92357),
+ TOBN(0x2ccbc583, 0xa4c506ec), TOBN(0x957ed188, 0xd1acfe97),
+ TOBN(0x8baed833, 0x12f1aea2), TOBN(0xef2a6cb4, 0x8325362d),
+ TOBN(0x130dde42, 0x8e195c43), TOBN(0xc842025a, 0x0e6050c6),
+ TOBN(0x2da972a7, 0x08686a5d), TOBN(0xb52999a1, 0xe508b4a8),
+ TOBN(0xd9f090b9, 0x10a5a8bd), TOBN(0xca91d249, 0x096864da),
+ TOBN(0x8e6a93be, 0x3f67dbc1), TOBN(0xacae6fba, 0xf5f4764c),
+ TOBN(0x1563c6e0, 0xd21411a0), TOBN(0x28fa787f, 0xda0a4ad8),
+ TOBN(0xd524491c, 0x908c8030), TOBN(0x1257ba0e, 0x4c795f07),
+ TOBN(0x83f49167, 0xceca9754), TOBN(0x426d2cf6, 0x4b7939a0),
+ TOBN(0x2555e355, 0x723fd0bf), TOBN(0xa96e6d06, 0xc4f144e2),
+ TOBN(0x4768a8dd, 0x87880e61), TOBN(0x15543815, 0xe508e4d5),
+ TOBN(0x09d7e772, 0xb1b65e15), TOBN(0x63439dd6, 0xac302fa0),
+ TOBN(0xb93f802f, 0xc14e35c2), TOBN(0x71735b7c, 0x4341333c),
+ TOBN(0x03a25104, 0x16d4f362), TOBN(0x3f4d069b, 0xbf433c8e),
+ TOBN(0x0d83ae01, 0xf78f5a7c), TOBN(0x50a8ffbe, 0x7c4eed07),
+ TOBN(0xc74f8906, 0x76e10f83), TOBN(0x7d080966, 0x9ddaf8e1),
+ TOBN(0xb11df8e1, 0x698e04cc), TOBN(0x877be203, 0x169005c8),
+ TOBN(0x32749e8c, 0x4f3c6179), TOBN(0x2dbc9d0a, 0x7853fc05),
+ TOBN(0x187d4f93, 0x9454d937), TOBN(0xe682ce9d, 0xb4800e1b),
+ TOBN(0xa9129ad8, 0x165e68e8), TOBN(0x0fe29735, 0xbe7f785b),
+ TOBN(0x5303f40c, 0x5b9e02b7), TOBN(0xa37c9692, 0x35ee04e8),
+ TOBN(0x5f46cc20, 0x34d6632b), TOBN(0x55ef72b2, 0x96ac545b),
+ TOBN(0xabec5c1f, 0x7b91b062), TOBN(0x0a79e1c7, 0xbb33e821),
+ TOBN(0xbb04b428, 0x3a9f4117), TOBN(0x0de1f28f, 0xfd2a475a),
+ TOBN(0x31019ccf, 0x3a4434b4), TOBN(0xa3458111, 0x1a7954dc),
+ TOBN(0xa9dac80d, 0xe34972a7), TOBN(0xb043d054, 0x74f6b8dd),
+ TOBN(0x021c319e, 0x11137b1a), TOBN(0x00a754ce, 0xed5cc03f),
+ TOBN(0x0aa2c794, 0xcbea5ad4), TOBN(0x093e67f4, 0x70c015b6),
+ TOBN(0x72cdfee9, 0xc97e3f6b), TOBN(0xc10bcab4, 0xb6da7461),
+ TOBN(0x3b02d2fc, 0xb59806b9), TOBN(0x85185e89, 0xa1de6f47),
+ TOBN(0x39e6931f, 0x0eb6c4d4), TOBN(0x4d4440bd, 0xd4fa5b04),
+ TOBN(0x5418786e, 0x34be7eb8), TOBN(0x6380e521, 0x9d7259bc),
+ TOBN(0x20ac0351, 0xd598d710), TOBN(0x272c4166, 0xcb3a4da4),
+ TOBN(0xdb82fe1a, 0xca71de1f), TOBN(0x746e79f2, 0xd8f54b0f),
+ TOBN(0x6e7fc736, 0x4b573e9b), TOBN(0x75d03f46, 0xfd4b5040),
+ TOBN(0x5c1cc36d, 0x0b98d87b), TOBN(0x513ba3f1, 0x1f472da1),
+ TOBN(0x79d0af26, 0xabb177dd), TOBN(0xf82ab568, 0x7891d564),
+ TOBN(0x2b6768a9, 0x72232173), TOBN(0xefbb3bb0, 0x8c1f6619),
+ TOBN(0xb29c11db, 0xa6d18358), TOBN(0x519e2797, 0xb0916d3a),
+ TOBN(0xd4dc18f0, 0x9188e290), TOBN(0x648e86e3, 0x98b0ca7f),
+ TOBN(0x859d3145, 0x983c38b5), TOBN(0xb14f176c, 0x637abc8b),
+ TOBN(0x2793fb9d, 0xcaff7be6), TOBN(0xebe5a55f, 0x35a66a5a),
+ TOBN(0x7cec1dcd, 0x9f87dc59), TOBN(0x7c595cd3, 0xfbdbf560),
+ TOBN(0x5b543b22, 0x26eb3257), TOBN(0x69080646, 0xc4c935fd),
+ TOBN(0x7f2e4403, 0x81e9ede3), TOBN(0x243c3894, 0xcaf6df0a),
+ TOBN(0x7c605bb1, 0x1c073b11), TOBN(0xcd06a541, 0xba6a4a62),
+ TOBN(0x29168949, 0x49d4e2e5), TOBN(0x33649d07, 0x4af66880),
+ TOBN(0xbfc0c885, 0xe9a85035), TOBN(0xb4e52113, 0xfc410f4b),
+ TOBN(0xdca3b706, 0x78a6513b), TOBN(0x92ea4a2a, 0x9edb1943),
+ TOBN(0x02642216, 0xdb6e2dd8), TOBN(0x9b45d0b4, 0x9fd57894),
+ TOBN(0x114e70db, 0xc69d11ae), TOBN(0x1477dd19, 0x4c57595f),
+ TOBN(0xbc2208b4, 0xec77c272), TOBN(0x95c5b4d7, 0xdb68f59c),
+ TOBN(0xb8c4fc63, 0x42e532b7), TOBN(0x386ba422, 0x9ae35290),
+ TOBN(0xfb5dda42, 0xd201ecbc), TOBN(0x2353dc8b, 0xa0e38fd6),
+ TOBN(0x9a0b85ea, 0x68f7e978), TOBN(0x96ec5682, 0x2ad6d11f),
+ TOBN(0x5e279d6c, 0xe5f6886d), TOBN(0xd3fe03cd, 0x3cb1914d),
+ TOBN(0xfe541fa4, 0x7ea67c77), TOBN(0x952bd2af, 0xe3ea810c),
+ TOBN(0x791fef56, 0x8d01d374), TOBN(0xa3a1c621, 0x0f11336e),
+ TOBN(0x5ad0d5a9, 0xc7ec6d79), TOBN(0xff7038af, 0x3225c342),
+ TOBN(0x003c6689, 0xbc69601b), TOBN(0x25059bc7, 0x45e8747d),
+ TOBN(0xfa4965b2, 0xf2086fbf), TOBN(0xf6840ea6, 0x86916078),
+ TOBN(0xd7ac7620, 0x70081d6c), TOBN(0xe600da31, 0xb5328645),
+ TOBN(0x01916f63, 0x529b8a80), TOBN(0xe80e4858, 0x2d7d6f3e),
+ TOBN(0x29eb0fe8, 0xd664ca7c), TOBN(0xf017637b, 0xe7b43b0c),
+ TOBN(0x9a75c806, 0x76cb2566), TOBN(0x8f76acb1, 0xb24892d9),
+ TOBN(0x7ae7b9cc, 0x1f08fe45), TOBN(0x19ef7329, 0x6a4907d8),
+ TOBN(0x2db4ab71, 0x5f228bf0), TOBN(0xf3cdea39, 0x817032d7),
+ TOBN(0x0b1f482e, 0xdcabe3c0), TOBN(0x3baf76b4, 0xbb86325c),
+ TOBN(0xd49065e0, 0x10089465), TOBN(0x3bab5d29, 0x8e77c596),
+ TOBN(0x7636c3a6, 0x193dbd95), TOBN(0xdef5d294, 0xb246e499),
+ TOBN(0xb22c58b9, 0x286b2475), TOBN(0xa0b93939, 0xcd80862b),
+ TOBN(0x3002c83a, 0xf0992388), TOBN(0x6de01f9b, 0xeacbe14c),
+ TOBN(0x6aac688e, 0xadd70482), TOBN(0x708de92a, 0x7b4a4e8a),
+ TOBN(0x75b6dd73, 0x758a6eef), TOBN(0xea4bf352, 0x725b3c43),
+ TOBN(0x10041f2c, 0x87912868), TOBN(0xb1b1be95, 0xef09297a),
+ TOBN(0x19ae23c5, 0xa9f3860a), TOBN(0xc4f0f839, 0x515dcf4b),
+ TOBN(0x3c7ecca3, 0x97f6306a), TOBN(0x744c44ae, 0x68a3a4b0),
+ TOBN(0x69cd13a0, 0xb3a1d8a2), TOBN(0x7cad0a1e, 0x5256b578),
+ TOBN(0xea653fcd, 0x33791d9e), TOBN(0x9cc2a05d, 0x74b2e05f),
+ TOBN(0x73b391dc, 0xfd7affa2), TOBN(0xddb7091e, 0xb6b05442),
+ TOBN(0xc71e27bf, 0x8538a5c6), TOBN(0x195c63dd, 0x89abff17),
+ TOBN(0xfd315285, 0x1b71e3da), TOBN(0x9cbdfda7, 0xfa680fa0),
+ TOBN(0x9db876ca, 0x849d7eab), TOBN(0xebe2764b, 0x3c273271),
+ TOBN(0x663357e3, 0xf208dcea), TOBN(0x8c5bd833, 0x565b1b70),
+ TOBN(0xccc3b4f5, 0x9837fc0d), TOBN(0x9b641ba8, 0xa79cf00f),
+ TOBN(0x7428243d, 0xdfdf3990), TOBN(0x83a594c4, 0x020786b1),
+ TOBN(0xb712451a, 0x526c4502), TOBN(0x9d39438e, 0x6adb3f93),
+ TOBN(0xfdb261e3, 0xe9ff0ccd), TOBN(0x80344e3c, 0xe07af4c3),
+ TOBN(0x75900d7c, 0x2fa4f126), TOBN(0x08a3b865, 0x5c99a232),
+ TOBN(0x2478b6bf, 0xdb25e0c3), TOBN(0x482cc2c2, 0x71db2edf),
+ TOBN(0x37df7e64, 0x5f321bb8), TOBN(0x8a93821b, 0x9a8005b4),
+ TOBN(0x3fa2f10c, 0xcc8c1958), TOBN(0x0d332218, 0x2c269d0a),
+ TOBN(0x20ab8119, 0xe246b0e6), TOBN(0xb39781e4, 0xd349fd17),
+ TOBN(0xd293231e, 0xb31aa100), TOBN(0x4b779c97, 0xbb032168),
+ TOBN(0x4b3f19e1, 0xc8470500), TOBN(0x45b7efe9, 0x0c4c869d),
+ TOBN(0xdb84f38a, 0xa1a6bbcc), TOBN(0x3b59cb15, 0xb2fddbc1),
+ TOBN(0xba5514df, 0x3fd165e8), TOBN(0x499fd6a9, 0x061f8811),
+ TOBN(0x72cd1fe0, 0xbfef9f00), TOBN(0x120a4bb9, 0x79ad7e8a),
+ TOBN(0xf2ffd095, 0x5f4a5ac5), TOBN(0xcfd174f1, 0x95a7a2f0),
+ TOBN(0xd42301ba, 0x9d17baf1), TOBN(0xd2fa487a, 0x77f22089),
+ TOBN(0x9cb09efe, 0xb1dc77e1), TOBN(0xe9566939, 0x21c99682),
+ TOBN(0x8c546901, 0x6c6067bb), TOBN(0xfd378574, 0x61c24456),
+ TOBN(0x2b6a6cbe, 0x81796b33), TOBN(0x62d550f6, 0x58e87f8b),
+ TOBN(0x1b763e1c, 0x7f1b01b4), TOBN(0x4b93cfea, 0x1b1b5e12),
+ TOBN(0xb9345238, 0x1d531696), TOBN(0x57201c00, 0x88cdde69),
+ TOBN(0xdde92251, 0x9a86afc7), TOBN(0xe3043895, 0xbd35cea8),
+ TOBN(0x7608c1e1, 0x8555970d), TOBN(0x8267dfa9, 0x2535935e),
+ TOBN(0xd4c60a57, 0x322ea38b), TOBN(0xe0bf7977, 0x804ef8b5),
+ TOBN(0x1a0dab28, 0xc06fece4), TOBN(0xd405991e, 0x94e7b49d),
+ TOBN(0xc542b6d2, 0x706dab28), TOBN(0xcb228da3, 0xa91618fb),
+ TOBN(0x224e4164, 0x107d1cea), TOBN(0xeb9fdab3, 0xd0f5d8f1),
+ TOBN(0xc02ba386, 0x0d6e41cd), TOBN(0x676a72c5, 0x9b1f7146),
+ TOBN(0xffd6dd98, 0x4d6cb00b), TOBN(0xcef9c5ca, 0xde2e8d7c),
+ TOBN(0xa1bbf5d7, 0x641c7936), TOBN(0x1b95b230, 0xee8f772e),
+ TOBN(0xf765a92e, 0xe8ac25b1), TOBN(0xceb04cfc, 0x3a18b7c6),
+ TOBN(0x27944cef, 0x0acc8966), TOBN(0xcbb3c957, 0x434c1004),
+ TOBN(0x9c9971a1, 0xa43ff93c), TOBN(0x5bc2db17, 0xa1e358a9),
+ TOBN(0x45b4862e, 0xa8d9bc82), TOBN(0x70ebfbfb, 0x2201e052),
+ TOBN(0xafdf64c7, 0x92871591), TOBN(0xea5bcae6, 0xb42d0219),
+ TOBN(0xde536c55, 0x2ad8f03c), TOBN(0xcd6c3f4d, 0xa76aa33c),
+ TOBN(0xbeb5f623, 0x0bca6de3), TOBN(0xdd20dd99, 0xb1e706fd),
+ TOBN(0x90b3ff9d, 0xac9059d4), TOBN(0x2d7b2902, 0x7ccccc4e),
+ TOBN(0x8a090a59, 0xce98840f), TOBN(0xa5d947e0, 0x8410680a),
+ TOBN(0x49ae346a, 0x923379a5), TOBN(0x7dbc84f9, 0xb28a3156),
+ TOBN(0xfd40d916, 0x54a1aff2), TOBN(0xabf318ba, 0x3a78fb9b),
+ TOBN(0x50152ed8, 0x3029f95e), TOBN(0x9fc1dd77, 0xc58ad7fa),
+ TOBN(0x5fa57915, 0x13595c17), TOBN(0xb9504668, 0x8f62b3a9),
+ TOBN(0x907b5b24, 0xff3055b0), TOBN(0x2e995e35, 0x9a84f125),
+ TOBN(0x87dacf69, 0x7e9bbcfb), TOBN(0x95d0c1d6, 0xe86d96e3),
+ TOBN(0x65726e3c, 0x2d95a75c), TOBN(0x2c3c9001, 0xacd27f21),
+ TOBN(0x1deab561, 0x6c973f57), TOBN(0x108b7e2c, 0xa5221643),
+ TOBN(0x5fee9859, 0xc4ef79d4), TOBN(0xbd62b88a, 0x40d4b8c6),
+ TOBN(0xb4dd29c4, 0x197c75d6), TOBN(0x266a6df2, 0xb7076feb),
+ TOBN(0x9512d0ea, 0x4bf2df11), TOBN(0x1320c24f, 0x6b0cc9ec),
+ TOBN(0x6bb1e0e1, 0x01a59596), TOBN(0x8317c5bb, 0xeff9aaac),
+ TOBN(0x65bb405e, 0x385aa6c9), TOBN(0x613439c1, 0x8f07988f),
+ TOBN(0xd730049f, 0x16a66e91), TOBN(0xe97f2820, 0xfa1b0e0d),
+ TOBN(0x4131e003, 0x304c28ea), TOBN(0x820ab732, 0x526bac62),
+ TOBN(0xb2ac9ef9, 0x28714423), TOBN(0x54ecfffa, 0xadb10cb2),
+ TOBN(0x8781476e, 0xf886a4cc), TOBN(0x4b2c87b5, 0xdb2f8d49),
+ TOBN(0xe857cd20, 0x0a44295d), TOBN(0x707d7d21, 0x58c6b044),
+ TOBN(0xae8521f9, 0xf596757c), TOBN(0x87448f03, 0x67b2b714),
+ TOBN(0x13a9bc45, 0x5ebcd58d), TOBN(0x79bcced9, 0x9122d3c1),
+ TOBN(0x3c644247, 0x9e076642), TOBN(0x0cf22778, 0x2df4767d),
+ TOBN(0x5e61aee4, 0x71d444b6), TOBN(0x211236bf, 0xc5084a1d),
+ TOBN(0x7e15bc9a, 0x4fd3eaf6), TOBN(0x68df2c34, 0xab622bf5),
+ TOBN(0x9e674f0f, 0x59bf4f36), TOBN(0xf883669b, 0xd7f34d73),
+ TOBN(0xc48ac1b8, 0x31497b1d), TOBN(0x323b925d, 0x5106703b),
+ TOBN(0x22156f42, 0x74082008), TOBN(0xeffc521a, 0xc8482bcb),
+ TOBN(0x5c6831bf, 0x12173479), TOBN(0xcaa2528f, 0xc4739490),
+ TOBN(0x84d2102a, 0x8f1b3c4d), TOBN(0xcf64dfc1, 0x2d9bec0d),
+ TOBN(0x433febad, 0x78a546ef), TOBN(0x1f621ec3, 0x7b73cef1),
+ TOBN(0x6aecd627, 0x37338615), TOBN(0x162082ab, 0x01d8edf6),
+ TOBN(0x833a8119, 0x19e86b66), TOBN(0x6023a251, 0xd299b5db),
+ TOBN(0xf5bb0c3a, 0xbbf04b89), TOBN(0x6735eb69, 0xae749a44),
+ TOBN(0xd0e058c5, 0x4713de3b), TOBN(0xfdf2593e, 0x2c3d4ccd),
+ TOBN(0x1b8f414e, 0xfdd23667), TOBN(0xdd52aaca, 0xfa2015ee),
+ TOBN(0x3e31b517, 0xbd9625ff), TOBN(0x5ec9322d, 0x8db5918c),
+ TOBN(0xbc73ac85, 0xa96f5294), TOBN(0x82aa5bf3, 0x61a0666a),
+ TOBN(0x49755810, 0xbf08ac42), TOBN(0xd21cdfd5, 0x891cedfc),
+ TOBN(0x918cb57b, 0x67f8be10), TOBN(0x365d1a7c, 0x56ffa726),
+ TOBN(0x2435c504, 0x6532de93), TOBN(0xc0fc5e10, 0x2674cd02),
+ TOBN(0x6e51fcf8, 0x9cbbb142), TOBN(0x1d436e5a, 0xafc50692),
+ TOBN(0x766bffff, 0x3fbcae22), TOBN(0x3148c2fd, 0xfd55d3b8),
+ TOBN(0x52c7fdc9, 0x233222fa), TOBN(0x89ff1092, 0xe419fb6b),
+ TOBN(0x3cd6db99, 0x25254977), TOBN(0x2e85a161, 0x1cf12ca7),
+ TOBN(0xadd2547c, 0xdc810bc9), TOBN(0xea3f458f, 0x9d257c22),
+ TOBN(0x642c1fbe, 0x27d6b19b), TOBN(0xed07e6b5, 0x140481a6),
+ TOBN(0x6ada1d42, 0x86d2e0f8), TOBN(0xe5920122, 0x0e8a9fd5),
+ TOBN(0x02c936af, 0x708c1b49), TOBN(0x60f30fee, 0x2b4bfaff),
+ TOBN(0x6637ad06, 0x858e6a61), TOBN(0xce4c7767, 0x3fd374d0),
+ TOBN(0x39d54b2d, 0x7188defb), TOBN(0xa8c9d250, 0xf56a6b66),
+ TOBN(0x58fc0f5e, 0xb24fe1dc), TOBN(0x9eaf9dee, 0x6b73f24c),
+ TOBN(0xa90d588b, 0x33650705), TOBN(0xde5b62c5, 0xaf2ec729),
+ TOBN(0x5c72cfae, 0xd3c2b36e), TOBN(0x868c19d5, 0x034435da),
+ TOBN(0x88605f93, 0xe17ee145), TOBN(0xaa60c4ee, 0x77a5d5b1),
+ TOBN(0xbcf5bfd2, 0x3b60c472), TOBN(0xaf4ef13c, 0xeb1d3049),
+ TOBN(0x373f44fc, 0xe13895c9), TOBN(0xf29b382f, 0x0cbc9822),
+ TOBN(0x1bfcb853, 0x73efaef6), TOBN(0xcf56ac9c, 0xa8c96f40),
+ TOBN(0xd7adf109, 0x7a191e24), TOBN(0x98035f44, 0xbf8a8dc2),
+ TOBN(0xf40a71b9, 0x1e750c84), TOBN(0xc57f7b0c, 0x5dc6c469),
+ TOBN(0x49a0e79c, 0x6fbc19c1), TOBN(0x6b0f5889, 0xa48ebdb8),
+ TOBN(0x5d3fd084, 0xa07c4e9f), TOBN(0xc3830111, 0xab27de14),
+ TOBN(0x0e4929fe, 0x33e08dcc), TOBN(0xf4a5ad24, 0x40bb73a3),
+ TOBN(0xde86c2bf, 0x490f97ca), TOBN(0x288f09c6, 0x67a1ce18),
+ TOBN(0x364bb886, 0x1844478d), TOBN(0x7840fa42, 0xceedb040),
+ TOBN(0x1269fdd2, 0x5a631b37), TOBN(0x94761f1e, 0xa47c8b7d),
+ TOBN(0xfc0c2e17, 0x481c6266), TOBN(0x85e16ea2, 0x3daa5fa7),
+ TOBN(0xccd86033, 0x92491048), TOBN(0x0c2f6963, 0xf4d402d7),
+ TOBN(0x6336f7df, 0xdf6a865c), TOBN(0x0a2a463c, 0xb5c02a87),
+ TOBN(0xb0e29be7, 0xbf2f12ee), TOBN(0xf0a22002, 0x66bad988),
+ TOBN(0x27f87e03, 0x9123c1d7), TOBN(0x21669c55, 0x328a8c98),
+ TOBN(0x186b9803, 0x92f14529), TOBN(0xd3d056cc, 0x63954df3),
+ TOBN(0x2f03fd58, 0x175a46f6), TOBN(0x63e34ebe, 0x11558558),
+ TOBN(0xe13fedee, 0x5b80cfa5), TOBN(0xe872a120, 0xd401dbd1),
+ TOBN(0x52657616, 0xe8a9d667), TOBN(0xbc8da4b6, 0xe08d6693),
+ TOBN(0x370fb9bb, 0x1b703e75), TOBN(0x6773b186, 0xd4338363),
+ TOBN(0x18dad378, 0xecef7bff), TOBN(0xaac787ed, 0x995677da),
+ TOBN(0x4801ea8b, 0x0437164b), TOBN(0xf430ad20, 0x73fe795e),
+ TOBN(0xb164154d, 0x8ee5eb73), TOBN(0x0884ecd8, 0x108f7c0e),
+ TOBN(0x0e6ec096, 0x5f520698), TOBN(0x640631fe, 0x44f7b8d9),
+ TOBN(0x92fd34fc, 0xa35a68b9), TOBN(0x9c5a4b66, 0x4d40cf4e),
+ TOBN(0x949454bf, 0x80b6783d), TOBN(0x80e701fe, 0x3a320a10),
+ TOBN(0x8d1a564a, 0x1a0a39b2), TOBN(0x1436d53d, 0x320587db),
+ TOBN(0xf5096e6d, 0x6556c362), TOBN(0xbc23a3c0, 0xe2455d7e),
+ TOBN(0x3a7aee54, 0x807230f9), TOBN(0x9ba1cfa6, 0x22ae82fd),
+ TOBN(0x833a057a, 0x99c5d706), TOBN(0x8be85f4b, 0x842315c9),
+ TOBN(0xd083179a, 0x66a72f12), TOBN(0x2fc77d5d, 0xcdcc73cd),
+ TOBN(0x22b88a80, 0x5616ee30), TOBN(0xfb09548f, 0xe7ab1083),
+ TOBN(0x8ad6ab0d, 0x511270cd), TOBN(0x61f6c57a, 0x6924d9ab),
+ TOBN(0xa0f7bf72, 0x90aecb08), TOBN(0x849f87c9, 0x0df784a4),
+ TOBN(0x27c79c15, 0xcfaf1d03), TOBN(0xbbf9f675, 0xc463face),
+ TOBN(0x91502c65, 0x765ba543), TOBN(0x18ce3cac, 0x42ea60dd),
+ TOBN(0xe5cee6ac, 0x6e43ecb3), TOBN(0x63e4e910, 0x68f2aeeb),
+ TOBN(0x26234fa3, 0xc85932ee), TOBN(0x96883e8b, 0x4c90c44d),
+ TOBN(0x29b9e738, 0xa18a50f6), TOBN(0xbfc62b2a, 0x3f0420df),
+ TOBN(0xd22a7d90, 0x6d3e1fa9), TOBN(0x17115618, 0xfe05b8a3),
+ TOBN(0x2a0c9926, 0xbb2b9c01), TOBN(0xc739fcc6, 0xe07e76a2),
+ TOBN(0x540e9157, 0x165e439a), TOBN(0x06353a62, 0x6a9063d8),
+ TOBN(0x84d95594, 0x61e927a3), TOBN(0x013b9b26, 0xe2e0be7f),
+ TOBN(0x4feaec3b, 0x973497f1), TOBN(0x15c0f94e, 0x093ebc2d),
+ TOBN(0x6af5f227, 0x33af0583), TOBN(0x0c2af206, 0xc61f3340),
+ TOBN(0xd25dbdf1, 0x4457397c), TOBN(0x2e8ed017, 0xcabcbae0),
+ TOBN(0xe3010938, 0xc2815306), TOBN(0xbaa99337, 0xe8c6cd68),
+ TOBN(0x08513182, 0x3b0ec7de), TOBN(0x1e1b822b, 0x58df05df),
+ TOBN(0x5c14842f, 0xa5c3b683), TOBN(0x98fe977e, 0x3eba34ce),
+ TOBN(0xfd2316c2, 0x0d5e8873), TOBN(0xe48d839a, 0xbd0d427d),
+ TOBN(0x495b2218, 0x623fc961), TOBN(0x24ee56e7, 0xb46fba5e),
+ TOBN(0x9184a55b, 0x91e4de58), TOBN(0xa7488ca5, 0xdfdea288),
+ TOBN(0xa723862e, 0xa8dcc943), TOBN(0x92d762b2, 0x849dc0fc),
+ TOBN(0x3c444a12, 0x091ff4a9), TOBN(0x581113fa, 0x0cada274),
+ TOBN(0xb9de0a45, 0x30d8eae2), TOBN(0x5e0fcd85, 0xdf6b41ea),
+ TOBN(0x6233ea68, 0xc094dbb5), TOBN(0xb77d062e, 0xd968d410),
+ TOBN(0x3e719bbc, 0x58b3002d), TOBN(0x68e7dd3d, 0x3dc49d58),
+ TOBN(0x8d825740, 0x013a5e58), TOBN(0x21311747, 0x3c9e3c1b),
+ TOBN(0x0cb0a2a7, 0x7c99b6ab), TOBN(0x5c48a3b3, 0xc2f888f2)}
+ ,
+ {TOBN(0xc7913e91, 0x991724f3), TOBN(0x5eda799c, 0x39cbd686),
+ TOBN(0xddb595c7, 0x63d4fc1e), TOBN(0x6b63b80b, 0xac4fed54),
+ TOBN(0x6ea0fc69, 0x7e5fb516), TOBN(0x737708ba, 0xd0f1c964),
+ TOBN(0x9628745f, 0x11a92ca5), TOBN(0x61f37958, 0x9a86967a),
+ TOBN(0x9af39b2c, 0xaa665072), TOBN(0x78322fa4, 0xefd324ef),
+ TOBN(0x3d153394, 0xc327bd31), TOBN(0x81d5f271, 0x3129dab0),
+ TOBN(0xc72e0c42, 0xf48027f5), TOBN(0xaa40cdbc, 0x8536e717),
+ TOBN(0xf45a657a, 0x2d369d0f), TOBN(0xb03bbfc4, 0xea7f74e6),
+ TOBN(0x46a8c418, 0x0d738ded), TOBN(0x6f1a5bb0, 0xe0de5729),
+ TOBN(0xf10230b9, 0x8ba81675), TOBN(0x32c6f30c, 0x112b33d4),
+ TOBN(0x7559129d, 0xd8fffb62), TOBN(0x6a281b47, 0xb459bf05),
+ TOBN(0x77c1bd3a, 0xfa3b6776), TOBN(0x0709b380, 0x7829973a),
+ TOBN(0x8c26b232, 0xa3326505), TOBN(0x38d69272, 0xee1d41bf),
+ TOBN(0x0459453e, 0xffe32afa), TOBN(0xce8143ad, 0x7cb3ea87),
+ TOBN(0x932ec1fa, 0x7e6ab666), TOBN(0x6cd2d230, 0x22286264),
+ TOBN(0x459a46fe, 0x6736f8ed), TOBN(0x50bf0d00, 0x9eca85bb),
+ TOBN(0x0b825852, 0x877a21ec), TOBN(0x300414a7, 0x0f537a94),
+ TOBN(0x3f1cba40, 0x21a9a6a2), TOBN(0x50824eee, 0x76943c00),
+ TOBN(0xa0dbfcec, 0xf83cba5d), TOBN(0xf9538148, 0x93b4f3c0),
+ TOBN(0x61744162, 0x48f24dd7), TOBN(0x5322d64d, 0xe4fb09dd),
+ TOBN(0x57447384, 0x3d9325f3), TOBN(0xa9bef2d0, 0xf371cb84),
+ TOBN(0x77d2188b, 0xa61e36c5), TOBN(0xbbd6a7d7, 0xc602df72),
+ TOBN(0xba3aa902, 0x8f61bc0b), TOBN(0xf49085ed, 0x6ed0b6a1),
+ TOBN(0x8bc625d6, 0xae6e8298), TOBN(0x832b0b1d, 0xa2e9c01d),
+ TOBN(0xa337c447, 0xf1f0ced1), TOBN(0x800cc793, 0x9492dd2b),
+ TOBN(0x4b93151d, 0xbea08efa), TOBN(0x820cf3f8, 0xde0a741e),
+ TOBN(0xff1982dc, 0x1c0f7d13), TOBN(0xef921960, 0x84dde6ca),
+ TOBN(0x1ad7d972, 0x45f96ee3), TOBN(0x319c8dbe, 0x29dea0c7),
+ TOBN(0xd3ea3871, 0x7b82b99b), TOBN(0x75922d4d, 0x470eb624),
+ TOBN(0x8f66ec54, 0x3b95d466), TOBN(0x66e673cc, 0xbee1e346),
+ TOBN(0x6afe67c4, 0xb5f2b89a), TOBN(0x3de9c1e6, 0x290e5cd3),
+ TOBN(0x8c278bb6, 0x310a2ada), TOBN(0x420fa384, 0x0bdb323b),
+ TOBN(0x0ae1d63b, 0x0eb919b0), TOBN(0xd74ee51d, 0xa74b9620),
+ TOBN(0x395458d0, 0xa674290c), TOBN(0x324c930f, 0x4620a510),
+ TOBN(0x2d1f4d19, 0xfbac27d4), TOBN(0x4086e8ca, 0x9bedeeac),
+ TOBN(0x0cdd211b, 0x9b679ab8), TOBN(0x5970167d, 0x7090fec4),
+ TOBN(0x3420f2c9, 0xfaf1fc63), TOBN(0x616d333a, 0x328c8bb4),
+ TOBN(0x7d65364c, 0x57f1fe4a), TOBN(0x9343e877, 0x55e5c73a),
+ TOBN(0x5795176b, 0xe970e78c), TOBN(0xa36ccebf, 0x60533627),
+ TOBN(0xfc7c7380, 0x09cdfc1b), TOBN(0xb39a2afe, 0xb3fec326),
+ TOBN(0xb7ff1ba1, 0x6224408a), TOBN(0xcc856e92, 0x247cfc5e),
+ TOBN(0x01f102e7, 0xc18bc493), TOBN(0x4613ab74, 0x2091c727),
+ TOBN(0xaa25e89c, 0xc420bf2b), TOBN(0x00a53176, 0x90337ec2),
+ TOBN(0xd2be9f43, 0x7d025fc7), TOBN(0x3316fb85, 0x6e6fe3dc),
+ TOBN(0x27520af5, 0x9ac50814), TOBN(0xfdf95e78, 0x9a8e4223),
+ TOBN(0xb7e7df2a, 0x56bec5a0), TOBN(0xf7022f7d, 0xdf159e5d),
+ TOBN(0x93eeeab1, 0xcac1fe8f), TOBN(0x8040188c, 0x37451168),
+ TOBN(0x7ee8aa8a, 0xd967dce6), TOBN(0xfa0e79e7, 0x3abc9299),
+ TOBN(0x67332cfc, 0x2064cfd1), TOBN(0x339c31de, 0xb0651934),
+ TOBN(0x719b28d5, 0x2a3bcbea), TOBN(0xee74c82b, 0x9d6ae5c6),
+ TOBN(0x0927d05e, 0xbaf28ee6), TOBN(0x82cecf2c, 0x9d719028),
+ TOBN(0x0b0d353e, 0xddb30289), TOBN(0xfe4bb977, 0xfddb2e29),
+ TOBN(0xbb5bb990, 0x640bfd9e), TOBN(0xd226e277, 0x82f62108),
+ TOBN(0x4bf00985, 0x02ffdd56), TOBN(0x7756758a, 0x2ca1b1b5),
+ TOBN(0xc32b62a3, 0x5285fe91), TOBN(0xedbc546a, 0x8c9cd140),
+ TOBN(0x1e47a013, 0xaf5cb008), TOBN(0xbca7e720, 0x073ce8f2),
+ TOBN(0xe10b2ab8, 0x17a91cae), TOBN(0xb89aab65, 0x08e27f63),
+ TOBN(0x7b3074a7, 0xdba3ddf9), TOBN(0x1c20ce09, 0x330c2972),
+ TOBN(0x6b9917b4, 0x5fcf7e33), TOBN(0xe6793743, 0x945ceb42),
+ TOBN(0x18fc2215, 0x5c633d19), TOBN(0xad1adb3c, 0xc7485474),
+ TOBN(0x646f9679, 0x6424c49b), TOBN(0xf888dfe8, 0x67c241c9),
+ TOBN(0xe12d4b93, 0x24f68b49), TOBN(0x9a6b62d8, 0xa571df20),
+ TOBN(0x81b4b26d, 0x179483cb), TOBN(0x666f9632, 0x9511fae2),
+ TOBN(0xd281b3e4, 0xd53aa51f), TOBN(0x7f96a765, 0x7f3dbd16),
+ TOBN(0xa7f8b5bf, 0x074a30ce), TOBN(0xd7f52107, 0x005a32e6),
+ TOBN(0x6f9e0907, 0x50237ed4), TOBN(0x2f21da47, 0x8096fa2b),
+ TOBN(0xf3e19cb4, 0xeec863a0), TOBN(0xd18f77fd, 0x9527620a),
+ TOBN(0x9505c81c, 0x407c1cf8), TOBN(0x9998db4e, 0x1b6ec284),
+ TOBN(0x7e3389e5, 0xc247d44d), TOBN(0x12507141, 0x3f4f3d80),
+ TOBN(0xd4ba0110, 0x4a78a6c7), TOBN(0x312874a0, 0x767720be),
+ TOBN(0xded059a6, 0x75944370), TOBN(0xd6123d90, 0x3b2c0bdd),
+ TOBN(0xa56b717b, 0x51c108e3), TOBN(0x9bb7940e, 0x070623e9),
+ TOBN(0x794e2d59, 0x84ac066c), TOBN(0xf5954a92, 0xe68c69a0),
+ TOBN(0x28c52458, 0x4fd99dcc), TOBN(0x60e639fc, 0xb1012517),
+ TOBN(0xc2e60125, 0x7de79248), TOBN(0xe9ef6404, 0xf12fc6d7),
+ TOBN(0x4c4f2808, 0x2a3b5d32), TOBN(0x865ad32e, 0xc768eb8a),
+ TOBN(0xac02331b, 0x13fb70b6), TOBN(0x037b44c1, 0x95599b27),
+ TOBN(0x1a860fc4, 0x60bd082c), TOBN(0xa2e25745, 0xc980cd01),
+ TOBN(0xee3387a8, 0x1da0263e), TOBN(0x931bfb95, 0x2d10f3d6),
+ TOBN(0x5b687270, 0xa1f24a32), TOBN(0xf140e65d, 0xca494b86),
+ TOBN(0x4f4ddf91, 0xb2f1ac7a), TOBN(0xf99eaabb, 0x760fee27),
+ TOBN(0x57f4008a, 0x49c228e5), TOBN(0x090be440, 0x1cf713bb),
+ TOBN(0xac91fbe4, 0x5004f022), TOBN(0xd838c2c2, 0x569e1af6),
+ TOBN(0xd6c7d20b, 0x0f1daaa5), TOBN(0xaa063ac1, 0x1bbb02c0),
+ TOBN(0x0938a422, 0x59558a78), TOBN(0x5343c669, 0x8435da2f),
+ TOBN(0x96f67b18, 0x034410dc), TOBN(0x7cc1e424, 0x84510804),
+ TOBN(0x86a1543f, 0x16dfbb7d), TOBN(0x921fa942, 0x5b5bd592),
+ TOBN(0x9dcccb6e, 0xb33dd03c), TOBN(0x8581ddd9, 0xb843f51e),
+ TOBN(0x54935fcb, 0x81d73c9e), TOBN(0x6d07e979, 0x0a5e97ab),
+ TOBN(0x4dc7b30a, 0xcf3a6bab), TOBN(0x147ab1f3, 0x170bee11),
+ TOBN(0x0aaf8e3d, 0x9fafdee4), TOBN(0xfab3dbcb, 0x538a8b95),
+ TOBN(0x405df4b3, 0x6ef13871), TOBN(0xf1f4e9cb, 0x088d5a49),
+ TOBN(0x9bcd24d3, 0x66b33f1d), TOBN(0x3b97b820, 0x5ce445c0),
+ TOBN(0xe2926549, 0xba93ff61), TOBN(0xd9c341ce, 0x4dafe616),
+ TOBN(0xfb30a76e, 0x16efb6f3), TOBN(0xdf24b8ca, 0x605b953c),
+ TOBN(0x8bd52afe, 0xc2fffb9f), TOBN(0xbbac5ff7, 0xe19d0b96),
+ TOBN(0x43c01b87, 0x459afccd), TOBN(0x6bd45143, 0xb7432652),
+ TOBN(0x84734530, 0x55b5d78e), TOBN(0x81088fdb, 0x1554ba7d),
+ TOBN(0xada0a52c, 0x1e269375), TOBN(0xf9f037c4, 0x2dc5ec10),
+ TOBN(0xc0660607, 0x94bfbc11), TOBN(0xc0a630bb, 0xc9c40d2f),
+ TOBN(0x5efc797e, 0xab64c31e), TOBN(0xffdb1dab, 0x74507144),
+ TOBN(0xf6124287, 0x1ca6790c), TOBN(0xe9609d81, 0xe69bf1bf),
+ TOBN(0xdb898595, 0x00d24fc9), TOBN(0x9c750333, 0xe51fb417),
+ TOBN(0x51830a91, 0xfef7bbde), TOBN(0x0ce67dc8, 0x945f585c),
+ TOBN(0x9a730ed4, 0x4763eb50), TOBN(0x24a0e221, 0xc1ab0d66),
+ TOBN(0x643b6393, 0x648748f3), TOBN(0x1982daa1, 0x6d3c6291),
+ TOBN(0x6f00a9f7, 0x8bbc5549), TOBN(0x7a1783e1, 0x7f36384e),
+ TOBN(0xe8346323, 0xde977f50), TOBN(0x91ab688d, 0xb245502a),
+ TOBN(0x331ab6b5, 0x6d0bdd66), TOBN(0x0a6ef32e, 0x64b71229),
+ TOBN(0x1028150e, 0xfe7c352f), TOBN(0x27e04350, 0xce7b39d3),
+ TOBN(0x2a3c8acd, 0xc1070c82), TOBN(0xfb2034d3, 0x80c9feef),
+ TOBN(0x2d729621, 0x709f3729), TOBN(0x8df290bf, 0x62cb4549),
+ TOBN(0x02f99f33, 0xfc2e4326), TOBN(0x3b30076d, 0x5eddf032),
+ TOBN(0xbb21f8cf, 0x0c652fb5), TOBN(0x314fb49e, 0xed91cf7b),
+ TOBN(0xa013eca5, 0x2f700750), TOBN(0x2b9e3c23, 0x712a4575),
+ TOBN(0xe5355557, 0xaf30fbb0), TOBN(0x1ada3516, 0x7c77e771),
+ TOBN(0x45f6ecb2, 0x7b135670), TOBN(0xe85d19df, 0x7cfc202e),
+ TOBN(0x0f1b50c7, 0x58d1be9f), TOBN(0x5ebf2c0a, 0xead2e344),
+ TOBN(0x1531fe4e, 0xabc199c9), TOBN(0xc7032592, 0x56bab0ae),
+ TOBN(0x16ab2e48, 0x6c1fec54), TOBN(0x0f87fda8, 0x04280188),
+ TOBN(0xdc9f46fc, 0x609e4a74), TOBN(0x2a44a143, 0xba667f91),
+ TOBN(0xbc3d8b95, 0xb4d83436), TOBN(0xa01e4bd0, 0xc7bd2958),
+ TOBN(0x7b182932, 0x73483c90), TOBN(0xa79c6aa1, 0xa7c7b598),
+ TOBN(0xbf3983c6, 0xeaaac07e), TOBN(0x8f18181e, 0x96e0d4e6),
+ TOBN(0x8553d37c, 0x051af62b), TOBN(0xe9a998eb, 0x0bf94496),
+ TOBN(0xe0844f9f, 0xb0d59aa1), TOBN(0x983fd558, 0xe6afb813),
+ TOBN(0x9670c0ca, 0x65d69804), TOBN(0x732b22de, 0x6ea5ff2d),
+ TOBN(0xd7640ba9, 0x5fd8623b), TOBN(0x9f619163, 0xa6351782),
+ TOBN(0x0bfc27ee, 0xacee5043), TOBN(0xae419e73, 0x2eb10f02),
+ TOBN(0x19c028d1, 0x8943fb05), TOBN(0x71f01cf7, 0xff13aa2a),
+ TOBN(0x7790737e, 0x8887a132), TOBN(0x67513309, 0x66318410),
+ TOBN(0x9819e8a3, 0x7ddb795e), TOBN(0xfecb8ef5, 0xdad100b2),
+ TOBN(0x59f74a22, 0x3021926a), TOBN(0xb7c28a49, 0x6f9b4c1c),
+ TOBN(0xed1a733f, 0x912ad0ab), TOBN(0x42a910af, 0x01a5659c),
+ TOBN(0x3842c6e0, 0x7bd68cab), TOBN(0x2b57fa38, 0x76d70ac8),
+ TOBN(0x8a6707a8, 0x3c53aaeb), TOBN(0x62c1c510, 0x65b4db18),
+ TOBN(0x8de2c1fb, 0xb2d09dc7), TOBN(0xc3dfed12, 0x266bd23b),
+ TOBN(0x927d039b, 0xd5b27db6), TOBN(0x2fb2f0f1, 0x103243da),
+ TOBN(0xf855a07b, 0x80be7399), TOBN(0xed9327ce, 0x1f9f27a8),
+ TOBN(0xa0bd99c7, 0x729bdef7), TOBN(0x2b67125e, 0x28250d88),
+ TOBN(0x784b26e8, 0x8670ced7), TOBN(0xe3dfe41f, 0xc31bd3b4),
+ TOBN(0x9e353a06, 0xbcc85cbc), TOBN(0x302e2909, 0x60178a9d),
+ TOBN(0x860abf11, 0xa6eac16e), TOBN(0x76447000, 0xaa2b3aac),
+ TOBN(0x46ff9d19, 0x850afdab), TOBN(0x35bdd6a5, 0xfdb2d4c1),
+ TOBN(0xe82594b0, 0x7e5c9ce9), TOBN(0x0f379e53, 0x20af346e),
+ TOBN(0x608b31e3, 0xbc65ad4a), TOBN(0x710c6b12, 0x267c4826),
+ TOBN(0x51c966f9, 0x71954cf1), TOBN(0xb1cec793, 0x0d0aa215),
+ TOBN(0x1f155989, 0x86bd23a8), TOBN(0xae2ff99c, 0xf9452e86),
+ TOBN(0xd8dd953c, 0x340ceaa2), TOBN(0x26355275, 0x2e2e9333),
+ TOBN(0x15d4e5f9, 0x8586f06d), TOBN(0xd6bf94a8, 0xf7cab546),
+ TOBN(0x33c59a0a, 0xb76a9af0), TOBN(0x52740ab3, 0xba095af7),
+ TOBN(0xc444de8a, 0x24389ca0), TOBN(0xcc6f9863, 0x706da0cb),
+ TOBN(0xb5a741a7, 0x6b2515cf), TOBN(0x71c41601, 0x9585c749),
+ TOBN(0x78350d4f, 0xe683de97), TOBN(0x31d61524, 0x63d0b5f5),
+ TOBN(0x7a0cc5e1, 0xfbce090b), TOBN(0xaac927ed, 0xfbcb2a5b),
+ TOBN(0xe920de49, 0x20d84c35), TOBN(0x8c06a0b6, 0x22b4de26),
+ TOBN(0xd34dd58b, 0xafe7ddf3), TOBN(0x55851fed, 0xc1e6e55b),
+ TOBN(0xd1395616, 0x960696e7), TOBN(0x940304b2, 0x5f22705f),
+ TOBN(0x6f43f861, 0xb0a2a860), TOBN(0xcf121282, 0x0e7cc981),
+ TOBN(0x12186212, 0x0ab64a96), TOBN(0x09215b9a, 0xb789383c),
+ TOBN(0x311eb305, 0x37387c09), TOBN(0xc5832fce, 0xf03ee760),
+ TOBN(0x30358f58, 0x32f7ea19), TOBN(0xe01d3c34, 0x91d53551),
+ TOBN(0x1ca5ee41, 0xda48ea80), TOBN(0x34e71e8e, 0xcf4fa4c1),
+ TOBN(0x312abd25, 0x7af1e1c7), TOBN(0xe3afcdeb, 0x2153f4a5),
+ TOBN(0x9d5c84d7, 0x00235e9a), TOBN(0x0308d3f4, 0x8c4c836f),
+ TOBN(0xc0a66b04, 0x89332de5), TOBN(0x610dd399, 0x89e566ef),
+ TOBN(0xf8eea460, 0xd1ac1635), TOBN(0x84cbb3fb, 0x20a2c0df),
+ TOBN(0x40afb488, 0xe74a48c5), TOBN(0x29738198, 0xd326b150),
+ TOBN(0x2a17747f, 0xa6d74081), TOBN(0x60ea4c05, 0x55a26214),
+ TOBN(0x53514bb4, 0x1f88c5fe), TOBN(0xedd64567, 0x7e83426c),
+ TOBN(0xd5d6cbec, 0x96460b25), TOBN(0xa12fd0ce, 0x68dc115e),
+ TOBN(0xc5bc3ed2, 0x697840ea), TOBN(0x969876a8, 0xa6331e31),
+ TOBN(0x60c36217, 0x472ff580), TOBN(0xf4229705, 0x4ad41393),
+ TOBN(0x4bd99ef0, 0xa03b8b92), TOBN(0x501c7317, 0xc144f4f6),
+ TOBN(0x159009b3, 0x18464945), TOBN(0x6d5e594c, 0x74c5c6be),
+ TOBN(0x2d587011, 0x321a3660), TOBN(0xd1e184b1, 0x3898d022),
+ TOBN(0x5ba04752, 0x4c6a7e04), TOBN(0x47fa1e2b, 0x45550b65),
+ TOBN(0x9419daf0, 0x48c0a9a5), TOBN(0x66362953, 0x7c243236),
+ TOBN(0xcd0744b1, 0x5cb12a88), TOBN(0x561b6f9a, 0x2b646188),
+ TOBN(0x599415a5, 0x66c2c0c0), TOBN(0xbe3f0859, 0x0f83f09a),
+ TOBN(0x9141c5be, 0xb92041b8), TOBN(0x01ae38c7, 0x26477d0d),
+ TOBN(0xca8b71f3, 0xd12c7a94), TOBN(0xfab5b31f, 0x765c70db),
+ TOBN(0x76ae7492, 0x487443e9), TOBN(0x8595a310, 0x990d1349),
+ TOBN(0xf8dbeda8, 0x7d460a37), TOBN(0x7f7ad082, 0x1e45a38f),
+ TOBN(0xed1d4db6, 0x1059705a), TOBN(0xa3dd492a, 0xe6b9c697),
+ TOBN(0x4b92ee3a, 0x6eb38bd5), TOBN(0xbab2609d, 0x67cc0bb7),
+ TOBN(0x7fc4fe89, 0x6e70ee82), TOBN(0xeff2c56e, 0x13e6b7e3),
+ TOBN(0x9b18959e, 0x34d26fca), TOBN(0x2517ab66, 0x889d6b45),
+ TOBN(0xf167b4e0, 0xbdefdd4f), TOBN(0x69958465, 0xf366e401),
+ TOBN(0x5aa368ab, 0xa73bbec0), TOBN(0x12148709, 0x7b240c21),
+ TOBN(0x378c3233, 0x18969006), TOBN(0xcb4d73ce, 0xe1fe53d1),
+ TOBN(0x5f50a80e, 0x130c4361), TOBN(0xd67f5951, 0x7ef5212b),
+ TOBN(0xf145e21e, 0x9e70c72e), TOBN(0xb2e52e29, 0x5566d2fb),
+ TOBN(0x44eaba4a, 0x032397f5), TOBN(0x5e56937b, 0x7e31a7de),
+ TOBN(0x68dcf517, 0x456c61e1), TOBN(0xbc2e954a, 0xa8b0a388),
+ TOBN(0xe3552fa7, 0x60a8b755), TOBN(0x03442dae, 0x73ad0cde),
+ TOBN(0x37ffe747, 0xceb26210), TOBN(0x983545e8, 0x787baef9),
+ TOBN(0x8b8c8535, 0x86a3de31), TOBN(0xc621dbcb, 0xfacd46db),
+ TOBN(0x82e442e9, 0x59266fbb), TOBN(0xa3514c37, 0x339d471c),
+ TOBN(0x3a11b771, 0x62cdad96), TOBN(0xf0cb3b3c, 0xecf9bdf0),
+ TOBN(0x3fcbdbce, 0x478e2135), TOBN(0x7547b5cf, 0xbda35342),
+ TOBN(0xa97e81f1, 0x8a677af6), TOBN(0xc8c2bf83, 0x28817987),
+ TOBN(0xdf07eaaf, 0x45580985), TOBN(0xc68d1f05, 0xc93b45cb),
+ TOBN(0x106aa2fe, 0xc77b4cac), TOBN(0x4c1d8afc, 0x04a7ae86),
+ TOBN(0xdb41c3fd, 0x9eb45ab2), TOBN(0x5b234b5b, 0xd4b22e74),
+ TOBN(0xda253dec, 0xf215958a), TOBN(0x67e0606e, 0xa04edfa0),
+ TOBN(0xabbbf070, 0xef751b11), TOBN(0xf352f175, 0xf6f06dce),
+ TOBN(0xdfc4b6af, 0x6839f6b4), TOBN(0x53ddf9a8, 0x9959848e),
+ TOBN(0xda49c379, 0xc21520b0), TOBN(0x90864ff0, 0xdbd5d1b6),
+ TOBN(0x2f055d23, 0x5f49c7f7), TOBN(0xe51e4e6a, 0xa796b2d8),
+ TOBN(0xc361a67f, 0x5c9dc340), TOBN(0x5ad53c37, 0xbca7c620),
+ TOBN(0xda1d6588, 0x32c756d0), TOBN(0xad60d911, 0x8bb67e13),
+ TOBN(0xd6c47bdf, 0x0eeec8c6), TOBN(0x4a27fec1, 0x078a1821),
+ TOBN(0x081f7415, 0xc3099524), TOBN(0x8effdf0b, 0x82cd8060),
+ TOBN(0xdb70ec1c, 0x65842df8), TOBN(0x8821b358, 0xd319a901),
+ TOBN(0x72ee56ee, 0xde42b529), TOBN(0x5bb39592, 0x236e4286),
+ TOBN(0xd1183316, 0xfd6f7140), TOBN(0xf9fadb5b, 0xbd8e81f7),
+ TOBN(0x701d5e0c, 0x5a02d962), TOBN(0xfdee4dbf, 0x1b601324),
+ TOBN(0xbed17407, 0x35d7620e), TOBN(0x04e3c2c3, 0xf48c0012),
+ TOBN(0x9ee29da7, 0x3455449a), TOBN(0x562cdef4, 0x91a836c4),
+ TOBN(0x8f682a5f, 0x47701097), TOBN(0x617125d8, 0xff88d0c2),
+ TOBN(0x948fda24, 0x57bb86dd), TOBN(0x348abb8f, 0x289f7286),
+ TOBN(0xeb10eab5, 0x99d94bbd), TOBN(0xd51ba28e, 0x4684d160),
+ TOBN(0xabe0e51c, 0x30c8f41a), TOBN(0x66588b45, 0x13254f4a),
+ TOBN(0x147ebf01, 0xfad097a5), TOBN(0x49883ea8, 0x610e815d),
+ TOBN(0xe44d60ba, 0x8a11de56), TOBN(0xa970de6e, 0x827a7a6d),
+ TOBN(0x2be41424, 0x5e17fc19), TOBN(0xd833c657, 0x01214057),
+ TOBN(0x1375813b, 0x363e723f), TOBN(0x6820bb88, 0xe6a52e9b),
+ TOBN(0x7e7f6970, 0xd875d56a), TOBN(0xd6a0a9ac, 0x51fbf6bf),
+ TOBN(0x54ba8790, 0xa3083c12), TOBN(0xebaeb23d, 0x6ae7eb64),
+ TOBN(0xa8685c3a, 0xb99a907a), TOBN(0xf1e74550, 0x026bf40b),
+ TOBN(0x7b73a027, 0xc802cd9e), TOBN(0x9a8a927c, 0x4fef4635),
+ TOBN(0xe1b6f60c, 0x08191224), TOBN(0xc4126ebb, 0xde4ec091),
+ TOBN(0xe1dff4dc, 0x4ae38d84), TOBN(0xde3f57db, 0x4f2ef985),
+ TOBN(0x34964337, 0xd446a1dd), TOBN(0x7bf217a0, 0x859e77f6),
+ TOBN(0x8ff10527, 0x8e1d13f5), TOBN(0xa304ef03, 0x74eeae27),
+ TOBN(0xfc6f5e47, 0xd19dfa5a), TOBN(0xdb007de3, 0x7fad982b),
+ TOBN(0x28205ad1, 0x613715f5), TOBN(0x251e6729, 0x7889529e),
+ TOBN(0x72705184, 0x1ae98e78), TOBN(0xf818537d, 0x271cac32),
+ TOBN(0xc8a15b7e, 0xb7f410f5), TOBN(0xc474356f, 0x81f62393),
+ TOBN(0x92dbdc5a, 0xc242316b), TOBN(0xabe060ac, 0xdbf4aff5),
+ TOBN(0x6e8c38fe, 0x909a8ec6), TOBN(0x43e514e5, 0x6116cb94),
+ TOBN(0x2078fa38, 0x07d784f9), TOBN(0x1161a880, 0xf4b5b357),
+ TOBN(0x5283ce79, 0x13adea3d), TOBN(0x0756c3e6, 0xcc6a910b),
+ TOBN(0x60bcfe01, 0xaaa79697), TOBN(0x04a73b29, 0x56391db1),
+ TOBN(0xdd8dad47, 0x189b45a0), TOBN(0xbfac0dd0, 0x48d5b8d9),
+ TOBN(0x34ab3af5, 0x7d3d2ec2), TOBN(0x6fa2fc2d, 0x207bd3af),
+ TOBN(0x9ff40092, 0x66550ded), TOBN(0x719b3e87, 0x1fd5b913),
+ TOBN(0xa573a496, 0x6d17fbc7), TOBN(0x0cd1a70a, 0x73d2b24e),
+ TOBN(0x34e2c5ca, 0xb2676937), TOBN(0xe7050b06, 0xbf669f21),
+ TOBN(0xfbe948b6, 0x1ede9046), TOBN(0xa0530051, 0x97662659),
+ TOBN(0x58cbd4ed, 0xf10124c5), TOBN(0xde2646e4, 0xdd6c06c8),
+ TOBN(0x332f8108, 0x8cad38c0), TOBN(0x471b7e90, 0x6bd68ae2),
+ TOBN(0x56ac3fb2, 0x0d8e27a3), TOBN(0xb54660db, 0x136b4b0d),
+ TOBN(0x123a1e11, 0xa6fd8de4), TOBN(0x44dbffea, 0xa37799ef),
+ TOBN(0x4540b977, 0xce6ac17c), TOBN(0x495173a8, 0xaf60acef)}
+ ,
+ {TOBN(0x9ebb284d, 0x391c2a82), TOBN(0xbcdd4863, 0x158308e8),
+ TOBN(0x006f16ec, 0x83f1edca), TOBN(0xa13e2c37, 0x695dc6c8),
+ TOBN(0x2ab756f0, 0x4a057a87), TOBN(0xa8765500, 0xa6b48f98),
+ TOBN(0x4252face, 0x68651c44), TOBN(0xa52b540b, 0xe1765e02),
+ TOBN(0x4f922fc5, 0x16a0d2bb), TOBN(0x0d5cc16c, 0x1a623499),
+ TOBN(0x9241cf3a, 0x57c62c8b), TOBN(0x2f5e6961, 0xfd1b667f),
+ TOBN(0x5c15c70b, 0xf5a01797), TOBN(0x3d20b44d, 0x60956192),
+ TOBN(0x04911b37, 0x071fdb52), TOBN(0xf648f916, 0x8d6f0f7b),
+ TOBN(0x6dc1acaf, 0xe60b7cf7), TOBN(0x25860a50, 0x84a9d869),
+ TOBN(0x56fc6f09, 0xe7ba8ac4), TOBN(0x828c5bd0, 0x6148d29e),
+ TOBN(0xac6b435e, 0xdc55ae5f), TOBN(0xa527f56c, 0xc0117411),
+ TOBN(0x94d5045e, 0xfd24342c), TOBN(0x2c4c0a35, 0x70b67c0d),
+ TOBN(0x027cc8b8, 0xfac61d9a), TOBN(0x7d25e062, 0xe3c6fe8a),
+ TOBN(0xe08805bf, 0xe5bff503), TOBN(0x13271e6c, 0x6ff632f7),
+ TOBN(0x55dca6c0, 0x232f76a5), TOBN(0x8957c32d, 0x701ef426),
+ TOBN(0xee728bcb, 0xa10a5178), TOBN(0x5ea60411, 0xb62c5173),
+ TOBN(0xfc4e964e, 0xd0b8892b), TOBN(0x9ea17683, 0x9301bb74),
+ TOBN(0x6265c5ae, 0xfcc48626), TOBN(0xe60cf82e, 0xbb3e9102),
+ TOBN(0x57adf797, 0xd4df5531), TOBN(0x235b59a1, 0x8deeefe2),
+ TOBN(0x60adcf58, 0x3f306eb1), TOBN(0x105c2753, 0x3d09492d),
+ TOBN(0x4090914b, 0xb5def996), TOBN(0x1cb69c83, 0x233dd1e7),
+ TOBN(0xc1e9c1d3, 0x9b3d5e76), TOBN(0x1f3338ed, 0xfccf6012),
+ TOBN(0xb1e95d0d, 0x2f5378a8), TOBN(0xacf4c2c7, 0x2f00cd21),
+ TOBN(0x6e984240, 0xeb5fe290), TOBN(0xd66c038d, 0x248088ae),
+ TOBN(0x804d264a, 0xf94d70cf), TOBN(0xbdb802ef, 0x7314bf7e),
+ TOBN(0x8fb54de2, 0x4333ed02), TOBN(0x740461e0, 0x285635d9),
+ TOBN(0x4113b2c8, 0x365e9383), TOBN(0xea762c83, 0x3fdef652),
+ TOBN(0x4eec6e2e, 0x47b956c1), TOBN(0xa3d814be, 0x65620fa4),
+ TOBN(0x9ad5462b, 0xb4d8bc50), TOBN(0x181c0b16, 0xa9195770),
+ TOBN(0xebd4fe1c, 0x78412a68), TOBN(0xae0341bc, 0xc0dff48c),
+ TOBN(0xb6bc45cf, 0x7003e866), TOBN(0xf11a6dea, 0x8a24a41b),
+ TOBN(0x5407151a, 0xd04c24c2), TOBN(0x62c9d27d, 0xda5b7b68),
+ TOBN(0x2e964235, 0x88cceff6), TOBN(0x8594c54f, 0x8b07ed69),
+ TOBN(0x1578e73c, 0xc84d0d0d), TOBN(0x7b4e1055, 0xff532868),
+ TOBN(0xa348c0d5, 0xb5ec995a), TOBN(0xbf4b9d55, 0x14289a54),
+ TOBN(0x9ba155a6, 0x58fbd777), TOBN(0x186ed7a8, 0x1a84491d),
+ TOBN(0xd4992b30, 0x614c0900), TOBN(0xda98d121, 0xbd00c24b),
+ TOBN(0x7f534dc8, 0x7ec4bfa1), TOBN(0x4a5ff674, 0x37dc34bc),
+ TOBN(0x68c196b8, 0x1d7ea1d7), TOBN(0x38cf2893, 0x80a6d208),
+ TOBN(0xfd56cd09, 0xe3cbbd6e), TOBN(0xec72e27e, 0x4205a5b6),
+ TOBN(0x15ea68f5, 0xa44f77f7), TOBN(0x7aa5f9fd, 0xb43c52bc),
+ TOBN(0x86ff676f, 0x94f0e609), TOBN(0xa4cde963, 0x2e2d432b),
+ TOBN(0x8cafa0c0, 0xeee470af), TOBN(0x84137d0e, 0x8a3f5ec8),
+ TOBN(0xebb40411, 0xfaa31231), TOBN(0xa239c13f, 0x6f7f7ccf),
+ TOBN(0x32865719, 0xa8afd30b), TOBN(0x86798328, 0x8a826dce),
+ TOBN(0xdf04e891, 0xc4a8fbe0), TOBN(0xbb6b6e1b, 0xebf56ad3),
+ TOBN(0x0a695b11, 0x471f1ff0), TOBN(0xd76c3389, 0xbe15baf0),
+ TOBN(0x018edb95, 0xbe96c43e), TOBN(0xf2beaaf4, 0x90794158),
+ TOBN(0x152db09e, 0xc3076a27), TOBN(0x5e82908e, 0xe416545d),
+ TOBN(0xa2c41272, 0x356d6f2e), TOBN(0xdc9c9642, 0x31fd74e1),
+ TOBN(0x66ceb88d, 0x519bf615), TOBN(0xe29ecd76, 0x05a2274e),
+ TOBN(0x3a0473c4, 0xbf5e2fa0), TOBN(0x6b6eb671, 0x64284e67),
+ TOBN(0xe8b97932, 0xb88756dd), TOBN(0xed4e8652, 0xf17e3e61),
+ TOBN(0xc2dd1499, 0x3ee1c4a4), TOBN(0xc0aaee17, 0x597f8c0e),
+ TOBN(0x15c4edb9, 0x6c168af3), TOBN(0x6563c7bf, 0xb39ae875),
+ TOBN(0xadfadb6f, 0x20adb436), TOBN(0xad55e8c9, 0x9a042ac0),
+ TOBN(0x975a1ed8, 0xb76da1f5), TOBN(0x10dfa466, 0xa58acb94),
+ TOBN(0x8dd7f7e3, 0xac060282), TOBN(0x6813e66a, 0x572a051e),
+ TOBN(0xb4ccae1e, 0x350cb901), TOBN(0xb653d656, 0x50cb7822),
+ TOBN(0x42484710, 0xdfab3b87), TOBN(0xcd7ee537, 0x9b670fd0),
+ TOBN(0x0a50b12e, 0x523b8bf6), TOBN(0x8009eb5b, 0x8f910c1b),
+ TOBN(0xf535af82, 0x4a167588), TOBN(0x0f835f9c, 0xfb2a2abd),
+ TOBN(0xf59b2931, 0x2afceb62), TOBN(0xc797df2a, 0x169d383f),
+ TOBN(0xeb3f5fb0, 0x66ac02b0), TOBN(0x029d4c6f, 0xdaa2d0ca),
+ TOBN(0xd4059bc1, 0xafab4bc5), TOBN(0x833f5c6f, 0x56783247),
+ TOBN(0xb5346630, 0x8d2d3605), TOBN(0x83387891, 0xd34d8433),
+ TOBN(0xd973b30f, 0xadd9419a), TOBN(0xbcca1099, 0xafe3fce8),
+ TOBN(0x08178315, 0x0809aac6), TOBN(0x01b7f21a, 0x540f0f11),
+ TOBN(0x65c29219, 0x909523c8), TOBN(0xa62f648f, 0xa3a1c741),
+ TOBN(0x88598d4f, 0x60c9e55a), TOBN(0xbce9141b, 0x0e4f347a),
+ TOBN(0x9af97d84, 0x35f9b988), TOBN(0x0210da62, 0x320475b6),
+ TOBN(0x3c076e22, 0x9191476c), TOBN(0x7520dbd9, 0x44fc7834),
+ TOBN(0x6a6b2cfe, 0xc1ab1bbd), TOBN(0xef8a65be, 0xdc650938),
+ TOBN(0x72855540, 0x805d7bc4), TOBN(0xda389396, 0xed11fdfd),
+ TOBN(0xa9d5bd36, 0x74660876), TOBN(0x11d67c54, 0xb45dff35),
+ TOBN(0x6af7d148, 0xa4f5da94), TOBN(0xbb8d4c3f, 0xc0bbeb31),
+ TOBN(0x87a7ebd1, 0xe0a1b12a), TOBN(0x1e4ef88d, 0x770ba95f),
+ TOBN(0x8c33345c, 0xdc2ae9cb), TOBN(0xcecf1276, 0x01cc8403),
+ TOBN(0x687c012e, 0x1b39b80f), TOBN(0xfd90d0ad, 0x35c33ba4),
+ TOBN(0xa3ef5a67, 0x5c9661c2), TOBN(0x368fc88e, 0xe017429e),
+ TOBN(0xd30c6761, 0x196a2fa2), TOBN(0x931b9817, 0xbd5b312e),
+ TOBN(0xba01000c, 0x72f54a31), TOBN(0xa203d2c8, 0x66eaa541),
+ TOBN(0xf2abdee0, 0x98939db3), TOBN(0xe37d6c2c, 0x3e606c02),
+ TOBN(0xf2921574, 0x521ff643), TOBN(0x2781b3c4, 0xd7e2fca3),
+ TOBN(0x664300b0, 0x7850ec06), TOBN(0xac5a38b9, 0x7d3a10cf),
+ TOBN(0x9233188d, 0xe34ab39d), TOBN(0xe77057e4, 0x5072cbb9),
+ TOBN(0xbcf0c042, 0xb59e78df), TOBN(0x4cfc91e8, 0x1d97de52),
+ TOBN(0x4661a26c, 0x3ee0ca4a), TOBN(0x5620a4c1, 0xfb8507bc),
+ TOBN(0x4b44d4aa, 0x049f842c), TOBN(0xceabc5d5, 0x1540e82b),
+ TOBN(0x306710fd, 0x15c6f156), TOBN(0xbe5ae52b, 0x63db1d72),
+ TOBN(0x06f1e7e6, 0x334957f1), TOBN(0x57e388f0, 0x31144a70),
+ TOBN(0xfb69bb2f, 0xdf96447b), TOBN(0x0f78ebd3, 0x73e38a12),
+ TOBN(0xb8222605, 0x2b7ce542), TOBN(0xe6d4ce99, 0x7472bde1),
+ TOBN(0x53e16ebe, 0x09d2f4da), TOBN(0x180ff42e, 0x53b92b2e),
+ TOBN(0xc59bcc02, 0x2c34a1c6), TOBN(0x3803d6f9, 0x422c46c2),
+ TOBN(0x18aff74f, 0x5c14a8a2), TOBN(0x55aebf80, 0x10a08b28),
+ TOBN(0x66097d58, 0x7135593f), TOBN(0x32e6eff7, 0x2be570cd),
+ TOBN(0x584e6a10, 0x2a8c860d), TOBN(0xcd185890, 0xa2eb4163),
+ TOBN(0x7ceae99d, 0x6d97e134), TOBN(0xd42c6b70, 0xdd8447ce),
+ TOBN(0x59ddbb4a, 0xb8c50273), TOBN(0x03c612df, 0x3cf34e1e),
+ TOBN(0x84b9ca15, 0x04b6c5a0), TOBN(0x35216f39, 0x18f0e3a3),
+ TOBN(0x3ec2d2bc, 0xbd986c00), TOBN(0x8bf546d9, 0xd19228fe),
+ TOBN(0xd1c655a4, 0x4cd623c3), TOBN(0x366ce718, 0x502b8e5a),
+ TOBN(0x2cfc84b4, 0xeea0bfe7), TOBN(0xe01d5cee, 0xcf443e8e),
+ TOBN(0x8ec045d9, 0x036520f8), TOBN(0xdfb3c3d1, 0x92d40e98),
+ TOBN(0x0bac4cce, 0xcc559a04), TOBN(0x35eccae5, 0x240ea6b1),
+ TOBN(0x180b32db, 0xf8a5a0ac), TOBN(0x547972a5, 0xeb699700),
+ TOBN(0xa3765801, 0xca26bca0), TOBN(0x57e09d0e, 0xa647f25a),
+ TOBN(0xb956970e, 0x2fdd23cc), TOBN(0xb80288bc, 0x5682e971),
+ TOBN(0xe6e6d91e, 0x9ae86ebc), TOBN(0x0564c83f, 0x8c9f1939),
+ TOBN(0x551932a2, 0x39560368), TOBN(0xe893752b, 0x049c28e2),
+ TOBN(0x0b03cee5, 0xa6a158c3), TOBN(0xe12d656b, 0x04964263),
+ TOBN(0x4b47554e, 0x63e3bc1d), TOBN(0xc719b6a2, 0x45044ff7),
+ TOBN(0x4f24d30a, 0xe48daa07), TOBN(0xa3f37556, 0xc8c1edc3),
+ TOBN(0x9a47bf76, 0x0700d360), TOBN(0xbb1a1824, 0x822ae4e2),
+ TOBN(0x22e275a3, 0x89f1fb4c), TOBN(0x72b1aa23, 0x9968c5f5),
+ TOBN(0xa75feaca, 0xbe063f64), TOBN(0x9b392f43, 0xbce47a09),
+ TOBN(0xd4241509, 0x1ad07aca), TOBN(0x4b0c591b, 0x8d26cd0f),
+ TOBN(0x2d42ddfd, 0x92f1169a), TOBN(0x63aeb1ac, 0x4cbf2392),
+ TOBN(0x1de9e877, 0x0691a2af), TOBN(0xebe79af7, 0xd98021da),
+ TOBN(0xcfdf2a4e, 0x40e50acf), TOBN(0xf0a98ad7, 0xaf01d665),
+ TOBN(0xefb640bf, 0x1831be1f), TOBN(0x6fe8bd2f, 0x80e9ada0),
+ TOBN(0x94c103a1, 0x6cafbc91), TOBN(0x170f8759, 0x8308e08c),
+ TOBN(0x5de2d2ab, 0x9780ff4f), TOBN(0x666466bc, 0x45b201f2),
+ TOBN(0x58af2010, 0xf5b343bc), TOBN(0x0f2e400a, 0xf2f142fe),
+ TOBN(0x3483bfde, 0xa85f4bdf), TOBN(0xf0b1d093, 0x03bfeaa9),
+ TOBN(0x2ea01b95, 0xc7081603), TOBN(0xe943e4c9, 0x3dba1097),
+ TOBN(0x47be92ad, 0xb438f3a6), TOBN(0x00bb7742, 0xe5bf6636),
+ TOBN(0x136b7083, 0x824297b4), TOBN(0x9d0e5580, 0x5584455f),
+ TOBN(0xab48cedc, 0xf1c7d69e), TOBN(0x53a9e481, 0x2a256e76),
+ TOBN(0x0402b0e0, 0x65eb2413), TOBN(0xdadbbb84, 0x8fc407a7),
+ TOBN(0xa65cd5a4, 0x8d7f5492), TOBN(0x21d44293, 0x74bae294),
+ TOBN(0x66917ce6, 0x3b5f1cc4), TOBN(0x37ae52ea, 0xce872e62),
+ TOBN(0xbb087b72, 0x2905f244), TOBN(0x12077086, 0x1e6af74f),
+ TOBN(0x4b644e49, 0x1058edea), TOBN(0x827510e3, 0xb638ca1d),
+ TOBN(0x8cf2b704, 0x6038591c), TOBN(0xffc8b47a, 0xfe635063),
+ TOBN(0x3ae220e6, 0x1b4d5e63), TOBN(0xbd864742, 0x9d961b4b),
+ TOBN(0x610c107e, 0x9bd16bed), TOBN(0x4270352a, 0x1127147b),
+ TOBN(0x7d17ffe6, 0x64cfc50e), TOBN(0x50dee01a, 0x1e36cb42),
+ TOBN(0x068a7622, 0x35dc5f9a), TOBN(0x9a08d536, 0xdf53f62c),
+ TOBN(0x4ed71457, 0x6be5f7de), TOBN(0xd93006f8, 0xc2263c9e),
+ TOBN(0xe073694c, 0xcacacb36), TOBN(0x2ff7a5b4, 0x3ae118ab),
+ TOBN(0x3cce53f1, 0xcd871236), TOBN(0xf156a39d, 0xc2aa6d52),
+ TOBN(0x9cc5f271, 0xb198d76d), TOBN(0xbc615b6f, 0x81383d39),
+ TOBN(0xa54538e8, 0xde3eee6b), TOBN(0x58c77538, 0xab910d91),
+ TOBN(0x31e5bdbc, 0x58d278bd), TOBN(0x3cde4adf, 0xb963acae),
+ TOBN(0xb1881fd2, 0x5302169c), TOBN(0x8ca60fa0, 0xa989ed8b),
+ TOBN(0xa1999458, 0xff96a0ee), TOBN(0xc1141f03, 0xac6c283d),
+ TOBN(0x7677408d, 0x6dfafed3), TOBN(0x33a01653, 0x39661588),
+ TOBN(0x3c9c15ec, 0x0b726fa0), TOBN(0x090cfd93, 0x6c9b56da),
+ TOBN(0xe34f4bae, 0xa3c40af5), TOBN(0x3469eadb, 0xd21129f1),
+ TOBN(0xcc51674a, 0x1e207ce8), TOBN(0x1e293b24, 0xc83b1ef9),
+ TOBN(0x17173d13, 0x1e6c0bb4), TOBN(0x19004695, 0x90776d35),
+ TOBN(0xe7980e34, 0x6de6f922), TOBN(0x873554cb, 0xf4dd9a22),
+ TOBN(0x0316c627, 0xcbf18a51), TOBN(0x4d93651b, 0x3032c081),
+ TOBN(0x207f2771, 0x3946834d), TOBN(0x2c08d7b4, 0x30cdbf80),
+ TOBN(0x137a4fb4, 0x86df2a61), TOBN(0xa1ed9c07, 0xecf7b4a2),
+ TOBN(0xb2e460e2, 0x7bd042ff), TOBN(0xb7f5e2fa, 0x5f62f5ec),
+ TOBN(0x7aa6ec6b, 0xcc2423b7), TOBN(0x75ce0a7f, 0xba63eea7),
+ TOBN(0x67a45fb1, 0xf250a6e1), TOBN(0x93bc919c, 0xe53cdc9f),
+ TOBN(0x9271f56f, 0x871942df), TOBN(0x2372ff6f, 0x7859ad66),
+ TOBN(0x5f4c2b96, 0x33cb1a78), TOBN(0xe3e29101, 0x5838aa83),
+ TOBN(0xa7ed1611, 0xe4e8110c), TOBN(0x2a2d70d5, 0x330198ce),
+ TOBN(0xbdf132e8, 0x6720efe0), TOBN(0xe61a8962, 0x66a471bf),
+ TOBN(0x796d3a85, 0x825808bd), TOBN(0x51dc3cb7, 0x3fd6e902),
+ TOBN(0x643c768a, 0x916219d1), TOBN(0x36cd7685, 0xa2ad7d32),
+ TOBN(0xe3db9d05, 0xb22922a4), TOBN(0x6494c87e, 0xdba29660),
+ TOBN(0xf0ac91df, 0xbcd2ebc7), TOBN(0x4deb57a0, 0x45107f8d),
+ TOBN(0x42271f59, 0xc3d12a73), TOBN(0x5f71687c, 0xa5c2c51d),
+ TOBN(0xcb1f50c6, 0x05797bcb), TOBN(0x29ed0ed9, 0xd6d34eb0),
+ TOBN(0xe5fe5b47, 0x4683c2eb), TOBN(0x4956eeb5, 0x97447c46),
+ TOBN(0x5b163a43, 0x71207167), TOBN(0x93fa2fed, 0x0248c5ef),
+ TOBN(0x67930af2, 0x31f63950), TOBN(0xa77797c1, 0x14caa2c9),
+ TOBN(0x526e80ee, 0x27ac7e62), TOBN(0xe1e6e626, 0x58b28aec),
+ TOBN(0x636178b0, 0xb3c9fef0), TOBN(0xaf7752e0, 0x6d5f90be),
+ TOBN(0x94ecaf18, 0xeece51cf), TOBN(0x2864d0ed, 0xca806e1f),
+ TOBN(0x6de2e383, 0x97c69134), TOBN(0x5a42c316, 0xeb291293),
+ TOBN(0xc7779219, 0x6a60bae0), TOBN(0xa24de346, 0x6b7599d1),
+ TOBN(0x49d374aa, 0xb75d4941), TOBN(0x98900586, 0x2d501ff0),
+ TOBN(0x9f16d40e, 0xeb7974cf), TOBN(0x1033860b, 0xcdd8c115),
+ TOBN(0xb6c69ac8, 0x2094cec3), TOBN(0x9976fb88, 0x403b770c),
+ TOBN(0x1dea026c, 0x4859590d), TOBN(0xb6acbb46, 0x8562d1fd),
+ TOBN(0x7cd6c461, 0x44569d85), TOBN(0xc3190a36, 0x97f0891d),
+ TOBN(0xc6f53195, 0x48d5a17d), TOBN(0x7d919966, 0xd749abc8),
+ TOBN(0x65104837, 0xdd1c8a20), TOBN(0x7e5410c8, 0x2f683419),
+ TOBN(0x958c3ca8, 0xbe94022e), TOBN(0x605c3197, 0x6145dac2),
+ TOBN(0x3fc07501, 0x01683d54), TOBN(0x1d7127c5, 0x595b1234),
+ TOBN(0x10b8f87c, 0x9481277f), TOBN(0x677db2a8, 0xe65a1adb),
+ TOBN(0xec2fccaa, 0xddce3345), TOBN(0x2a6811b7, 0x012a4350),
+ TOBN(0x96760ff1, 0xac598bdc), TOBN(0x054d652a, 0xd1bf4128),
+ TOBN(0x0a1151d4, 0x92a21005), TOBN(0xad7f3971, 0x33110fdf),
+ TOBN(0x8c95928c, 0x1960100f), TOBN(0x6c91c825, 0x7bf03362),
+ TOBN(0xc8c8b2a2, 0xce309f06), TOBN(0xfdb27b59, 0xca27204b),
+ TOBN(0xd223eaa5, 0x0848e32e), TOBN(0xb93e4b2e, 0xe7bfaf1e),
+ TOBN(0xc5308ae6, 0x44aa3ded), TOBN(0x317a666a, 0xc015d573),
+ TOBN(0xc888ce23, 0x1a979707), TOBN(0xf141c1e6, 0x0d5c4958),
+ TOBN(0xb53b7de5, 0x61906373), TOBN(0x858dbade, 0xeb999595),
+ TOBN(0x8cbb47b2, 0xa59e5c36), TOBN(0x660318b3, 0xdcf4e842),
+ TOBN(0xbd161ccd, 0x12ba4b7a), TOBN(0xf399daab, 0xf8c8282a),
+ TOBN(0x1587633a, 0xeeb2130d), TOBN(0xa465311a, 0xda38dd7d),
+ TOBN(0x5f75eec8, 0x64d3779b), TOBN(0x3c5d0476, 0xad64c171),
+ TOBN(0x87410371, 0x2a914428), TOBN(0x8096a891, 0x90e2fc29),
+ TOBN(0xd3d2ae9d, 0x23b3ebc2), TOBN(0x90bdd6db, 0xa580cfd6),
+ TOBN(0x52dbb7f3, 0xc5b01f6c), TOBN(0xe68eded4, 0xe102a2dc),
+ TOBN(0x17785b77, 0x99eb6df0), TOBN(0x26c3cc51, 0x7386b779),
+ TOBN(0x345ed988, 0x6417a48e), TOBN(0xe990b4e4, 0x07d6ef31),
+ TOBN(0x0f456b7e, 0x2586abba), TOBN(0x239ca6a5, 0x59c96e9a),
+ TOBN(0xe327459c, 0xe2eb4206), TOBN(0x3a4c3313, 0xa002b90a),
+ TOBN(0x2a114806, 0xf6a3f6fb), TOBN(0xad5cad2f, 0x85c251dd),
+ TOBN(0x92c1f613, 0xf5a784d3), TOBN(0xec7bfacf, 0x349766d5),
+ TOBN(0x04b3cd33, 0x3e23cb3b), TOBN(0x3979fe84, 0xc5a64b2d),
+ TOBN(0x192e2720, 0x7e589106), TOBN(0xa60c43d1, 0xa15b527f),
+ TOBN(0x2dae9082, 0xbe7cf3a6), TOBN(0xcc86ba92, 0xbc967274),
+ TOBN(0xf28a2ce8, 0xaea0a8a9), TOBN(0x404ca6d9, 0x6ee988b3),
+ TOBN(0xfd7e9c5d, 0x005921b8), TOBN(0xf56297f1, 0x44e79bf9),
+ TOBN(0xa163b460, 0x0d75ddc2), TOBN(0x30b23616, 0xa1f2be87),
+ TOBN(0x4b070d21, 0xbfe50e2b), TOBN(0x7ef8cfd0, 0xe1bfede1),
+ TOBN(0xadba0011, 0x2aac4ae0), TOBN(0x2a3e7d01, 0xb9ebd033),
+ TOBN(0x995277ec, 0xe38d9d1c), TOBN(0xb500249e, 0x9c5d2de3),
+ TOBN(0x8912b820, 0xf13ca8c9), TOBN(0xc8798114, 0x877793af),
+ TOBN(0x19e6125d, 0xec3f1dec), TOBN(0x07b1f040, 0x911178da),
+ TOBN(0xd93ededa, 0x904a6738), TOBN(0x55187a5a, 0x0bebedcd),
+ TOBN(0xf7d04722, 0xeb329d41), TOBN(0xf449099e, 0xf170b391),
+ TOBN(0xfd317a69, 0xca99f828), TOBN(0x50c3db2b, 0x34a4976d),
+ TOBN(0xe9ba7784, 0x3757b392), TOBN(0x326caefd, 0xaa3ca05a),
+ TOBN(0x78e5293b, 0xf1e593d4), TOBN(0x7842a937, 0x0d98fd13),
+ TOBN(0xe694bf96, 0x5f96b10d), TOBN(0x373a9df6, 0x06a8cd05),
+ TOBN(0x997d1e51, 0xe8f0c7fc), TOBN(0x1d019790, 0x63fd972e),
+ TOBN(0x0064d858, 0x5499fb32), TOBN(0x7b67bad9, 0x77a8aeb7),
+ TOBN(0x1d3eb977, 0x2d08eec5), TOBN(0x5fc047a6, 0xcbabae1d),
+ TOBN(0x0577d159, 0xe54a64bb), TOBN(0x8862201b, 0xc43497e4),
+ TOBN(0xad6b4e28, 0x2ce0608d), TOBN(0x8b687b7d, 0x0b167aac),
+ TOBN(0x6ed4d367, 0x8b2ecfa9), TOBN(0x24dfe62d, 0xa90c3c38),
+ TOBN(0xa1862e10, 0x3fe5c42b), TOBN(0x1ca73dca, 0xd5732a9f),
+ TOBN(0x35f038b7, 0x76bb87ad), TOBN(0x674976ab, 0xf242b81f),
+ TOBN(0x4f2bde7e, 0xb0fd90cd), TOBN(0x6efc172e, 0xa7fdf092),
+ TOBN(0x3806b69b, 0x92222f1f), TOBN(0x5a2459ca, 0x6cf7ae70),
+ TOBN(0x6789f69c, 0xa85217ee), TOBN(0x5f232b5e, 0xe3dc85ac),
+ TOBN(0x660e3ec5, 0x48e9e516), TOBN(0x124b4e47, 0x3197eb31),
+ TOBN(0x10a0cb13, 0xaafcca23), TOBN(0x7bd63ba4, 0x8213224f),
+ TOBN(0xaffad7cc, 0x290a7f4f), TOBN(0x6b409c9e, 0x0286b461),
+ TOBN(0x58ab809f, 0xffa407af), TOBN(0xc3122eed, 0xc68ac073),
+ TOBN(0x17bf9e50, 0x4ef24d7e), TOBN(0x5d929794, 0x3e2a5811),
+ TOBN(0x519bc867, 0x02902e01), TOBN(0x76bba5da, 0x39c8a851),
+ TOBN(0xe9f9669c, 0xda94951e), TOBN(0x4b6af58d, 0x66b8d418),
+ TOBN(0xfa321074, 0x17d426a4), TOBN(0xc78e66a9, 0x9dde6027),
+ TOBN(0x0516c083, 0x4a53b964), TOBN(0xfc659d38, 0xff602330),
+ TOBN(0x0ab55e5c, 0x58c5c897), TOBN(0x985099b2, 0x838bc5df),
+ TOBN(0x061d9efc, 0xc52fc238), TOBN(0x712b2728, 0x6ac1da3f),
+ TOBN(0xfb658149, 0x9283fe08), TOBN(0x4954ac94, 0xb8aaa2f7),
+ TOBN(0x85c0ada4, 0x7fb2e74f), TOBN(0xee8ba98e, 0xb89926b0),
+ TOBN(0xe4f9d37d, 0x23d1af5b), TOBN(0x14ccdbf9, 0xba9b015e),
+ TOBN(0xb674481b, 0x7bfe7178), TOBN(0x4e1debae, 0x65405868),
+ TOBN(0x061b2821, 0xc48c867d), TOBN(0x69c15b35, 0x513b30ea),
+ TOBN(0x3b4a1666, 0x36871088), TOBN(0xe5e29f5d, 0x1220b1ff),
+ TOBN(0x4b82bb35, 0x233d9f4d), TOBN(0x4e076333, 0x18cdc675)}
+ ,
+ {TOBN(0x0d53f5c7, 0xa3e6fced), TOBN(0xe8cbbdd5, 0xf45fbdeb),
+ TOBN(0xf85c01df, 0x13339a70), TOBN(0x0ff71880, 0x142ceb81),
+ TOBN(0x4c4e8774, 0xbd70437a), TOBN(0x5fb32891, 0xba0bda6a),
+ TOBN(0x1cdbebd2, 0xf18bd26e), TOBN(0x2f9526f1, 0x03a9d522),
+ TOBN(0x40ce3051, 0x92c4d684), TOBN(0x8b04d725, 0x7612efcd),
+ TOBN(0xb9dcda36, 0x6f9cae20), TOBN(0x0edc4d24, 0xf058856c),
+ TOBN(0x64f2e6bf, 0x85427900), TOBN(0x3de81295, 0xdc09dfea),
+ TOBN(0xd41b4487, 0x379bf26c), TOBN(0x50b62c6d, 0x6df135a9),
+ TOBN(0xd4f8e3b4, 0xc72dfe67), TOBN(0xc416b0f6, 0x90e19fdf),
+ TOBN(0x18b9098d, 0x4c13bd35), TOBN(0xac11118a, 0x15b8cb9e),
+ TOBN(0xf598a318, 0xf0062841), TOBN(0xbfe0602f, 0x89f356f4),
+ TOBN(0x7ae3637e, 0x30177a0c), TOBN(0x34097747, 0x61136537),
+ TOBN(0x0db2fb5e, 0xd005832a), TOBN(0x5f5efd3b, 0x91042e4f),
+ TOBN(0x8c4ffdc6, 0xed70f8ca), TOBN(0xe4645d0b, 0xb52da9cc),
+ TOBN(0x9596f58b, 0xc9001d1f), TOBN(0x52c8f0bc, 0x4e117205),
+ TOBN(0xfd4aa0d2, 0xe398a084), TOBN(0x815bfe3a, 0x104f49de),
+ TOBN(0x97e5443f, 0x23885e5f), TOBN(0xf72f8f99, 0xe8433aab),
+ TOBN(0xbd00b154, 0xe4d4e604), TOBN(0xd0b35e6a, 0xe5e173ff),
+ TOBN(0x57b2a048, 0x9164722d), TOBN(0x3e3c665b, 0x88761ec8),
+ TOBN(0x6bdd1397, 0x3da83832), TOBN(0x3c8b1a1e, 0x73dafe3b),
+ TOBN(0x4497ace6, 0x54317cac), TOBN(0xbe600ab9, 0x521771b3),
+ TOBN(0xb42e409e, 0xb0dfe8b8), TOBN(0x386a67d7, 0x3942310f),
+ TOBN(0x25548d8d, 0x4431cc28), TOBN(0xa7cff142, 0x985dc524),
+ TOBN(0x4d60f5a1, 0x93c4be32), TOBN(0x83ebd5c8, 0xd071c6e1),
+ TOBN(0xba3a80a7, 0xb1fd2b0b), TOBN(0x9b3ad396, 0x5bec33e8),
+ TOBN(0xb3868d61, 0x79743fb3), TOBN(0xcfd169fc, 0xfdb462fa),
+ TOBN(0xd3b499d7, 0x9ce0a6af), TOBN(0x55dc1cf1, 0xe42d3ff8),
+ TOBN(0x04fb9e6c, 0xc6c3e1b2), TOBN(0x47e6961d, 0x6f69a474),
+ TOBN(0x54eb3acc, 0xe548b37b), TOBN(0xb38e7542, 0x84d40549),
+ TOBN(0x8c3daa51, 0x7b341b4f), TOBN(0x2f6928ec, 0x690bf7fa),
+ TOBN(0x0496b323, 0x86ce6c41), TOBN(0x01be1c55, 0x10adadcd),
+ TOBN(0xc04e67e7, 0x4bb5faf9), TOBN(0x3cbaf678, 0xe15c9985),
+ TOBN(0x8cd12145, 0x50ca4247), TOBN(0xba1aa47a, 0xe7dd30aa),
+ TOBN(0x2f81ddf1, 0xe58fee24), TOBN(0x03452936, 0xeec9b0e8),
+ TOBN(0x8bdc3b81, 0x243aea96), TOBN(0x9a2919af, 0x15c3d0e5),
+ TOBN(0x9ea640ec, 0x10948361), TOBN(0x5ac86d5b, 0x6e0bcccf),
+ TOBN(0xf892d918, 0xc36cf440), TOBN(0xaed3e837, 0xc939719c),
+ TOBN(0xb07b08d2, 0xc0218b64), TOBN(0x6f1bcbba, 0xce9790dd),
+ TOBN(0x4a84d6ed, 0x60919b8e), TOBN(0xd8900791, 0x8ac1f9eb),
+ TOBN(0xf84941aa, 0x0dd5daef), TOBN(0xb22fe40a, 0x67fd62c5),
+ TOBN(0x97e15ba2, 0x157f2db3), TOBN(0xbda2fc8f, 0x8e28ca9c),
+ TOBN(0x5d050da4, 0x37b9f454), TOBN(0x3d57eb57, 0x2379d72e),
+ TOBN(0xe9b5eba2, 0xfb5ee997), TOBN(0x01648ca2, 0xe11538ca),
+ TOBN(0x32bb76f6, 0xf6327974), TOBN(0x338f14b8, 0xff3f4bb7),
+ TOBN(0x524d226a, 0xd7ab9a2d), TOBN(0x9c00090d, 0x7dfae958),
+ TOBN(0x0ba5f539, 0x8751d8c2), TOBN(0x8afcbcdd, 0x3ab8262d),
+ TOBN(0x57392729, 0xe99d043b), TOBN(0xef51263b, 0xaebc943a),
+ TOBN(0x9feace93, 0x20862935), TOBN(0x639efc03, 0xb06c817b),
+ TOBN(0x1fe054b3, 0x66b4be7a), TOBN(0x3f25a9de, 0x84a37a1e),
+ TOBN(0xf39ef1ad, 0x78d75cd9), TOBN(0xd7b58f49, 0x5062c1b5),
+ TOBN(0x6f74f9a9, 0xff563436), TOBN(0xf718ff29, 0xe8af51e7),
+ TOBN(0x5234d313, 0x15e97fec), TOBN(0xb6a8e2b1, 0x292f1c0a),
+ TOBN(0xa7f53aa8, 0x327720c1), TOBN(0x956ca322, 0xba092cc8),
+ TOBN(0x8f03d64a, 0x28746c4d), TOBN(0x51fe1782, 0x66d0d392),
+ TOBN(0xd19b34db, 0x3c832c80), TOBN(0x60dccc5c, 0x6da2e3b4),
+ TOBN(0x245dd62e, 0x0a104ccc), TOBN(0xa7ab1de1, 0x620b21fd),
+ TOBN(0xb293ae0b, 0x3893d123), TOBN(0xf7b75783, 0xb15ee71c),
+ TOBN(0x5aa3c614, 0x42a9468b), TOBN(0xd686123c, 0xdb15d744),
+ TOBN(0x8c616891, 0xa7ab4116), TOBN(0x6fcd72c8, 0xa4e6a459),
+ TOBN(0xac219110, 0x77e5fad7), TOBN(0xfb6a20e7, 0x704fa46b),
+ TOBN(0xe839be7d, 0x341d81dc), TOBN(0xcddb6889, 0x32148379),
+ TOBN(0xda6211a1, 0xf7026ead), TOBN(0xf3b2575f, 0xf4d1cc5e),
+ TOBN(0x40cfc8f6, 0xa7a73ae6), TOBN(0x83879a5e, 0x61d5b483),
+ TOBN(0xc5acb1ed, 0x41a50ebc), TOBN(0x59a60cc8, 0x3c07d8fa),
+ TOBN(0x1b73bdce, 0xb1876262), TOBN(0x2b0d79f0, 0x12af4ee9),
+ TOBN(0x8bcf3b0b, 0xd46e1d07), TOBN(0x17d6af9d, 0xe45d152f),
+ TOBN(0x73520461, 0x6d736451), TOBN(0x43cbbd97, 0x56b0bf5a),
+ TOBN(0xb0833a5b, 0xd5999b9d), TOBN(0x702614f0, 0xeb72e398),
+ TOBN(0x0aadf01a, 0x59c3e9f8), TOBN(0x40200e77, 0xce6b3d16),
+ TOBN(0xda22bdd3, 0xdeddafad), TOBN(0x76dedaf4, 0x310d72e1),
+ TOBN(0x49ef807c, 0x4bc2e88f), TOBN(0x6ba81291, 0x146dd5a5),
+ TOBN(0xa1a4077a, 0x7d8d59e9), TOBN(0x87b6a2e7, 0x802db349),
+ TOBN(0xd5679997, 0x1b4e598e), TOBN(0xf499ef1f, 0x06fe4b1d),
+ TOBN(0x3978d3ae, 0xfcb267c5), TOBN(0xb582b557, 0x235786d0),
+ TOBN(0x32b3b2ca, 0x1715cb07), TOBN(0x4c3de6a2, 0x8480241d),
+ TOBN(0x63b5ffed, 0xcb571ecd), TOBN(0xeaf53900, 0xed2fe9a9),
+ TOBN(0xdec98d4a, 0xc3b81990), TOBN(0x1cb83722, 0x9e0cc8fe),
+ TOBN(0xfe0b0491, 0xd2b427b9), TOBN(0x0f2386ac, 0xe983a66c),
+ TOBN(0x930c4d1e, 0xb3291213), TOBN(0xa2f82b2e, 0x59a62ae4),
+ TOBN(0x77233853, 0xf93e89e3), TOBN(0x7f8063ac, 0x11777c7f),
+ TOBN(0xff0eb567, 0x59ad2877), TOBN(0x6f454642, 0x9865c754),
+ TOBN(0xe6fe701a, 0x236e9a84), TOBN(0xc586ef16, 0x06e40fc3),
+ TOBN(0x3f62b6e0, 0x24bafad9), TOBN(0xc8b42bd2, 0x64da906a),
+ TOBN(0xc98e1eb4, 0xda3276a0), TOBN(0x30d0e5fc, 0x06cbf852),
+ TOBN(0x1b6b2ae1, 0xe8b4dfd4), TOBN(0xd754d5c7, 0x8301cbac),
+ TOBN(0x66097629, 0x112a39ac), TOBN(0xf86b5999, 0x93ba4ab9),
+ TOBN(0x26c9dea7, 0x99f9d581), TOBN(0x0473b1a8, 0xc2fafeaa),
+ TOBN(0x1469af55, 0x3b2505a5), TOBN(0x227d16d7, 0xd6a43323),
+ TOBN(0x3316f73c, 0xad3d97f9), TOBN(0x52bf3bb5, 0x1f137455),
+ TOBN(0x953eafeb, 0x09954e7c), TOBN(0xa721dfed, 0xdd732411),
+ TOBN(0xb4929821, 0x141d4579), TOBN(0x3411321c, 0xaa3bd435),
+ TOBN(0xafb355aa, 0x17fa6015), TOBN(0xb4e7ef4a, 0x18e42f0e),
+ TOBN(0x604ac97c, 0x59371000), TOBN(0xe1c48c70, 0x7f759c18),
+ TOBN(0x3f62ecc5, 0xa5db6b65), TOBN(0x0a78b173, 0x38a21495),
+ TOBN(0x6be1819d, 0xbcc8ad94), TOBN(0x70dc04f6, 0xd89c3400),
+ TOBN(0x462557b4, 0xa6b4840a), TOBN(0x544c6ade, 0x60bd21c0),
+ TOBN(0x6a00f24e, 0x907a544b), TOBN(0xa7520dcb, 0x313da210),
+ TOBN(0xfe939b75, 0x11e4994b), TOBN(0x918b6ba6, 0xbc275d70),
+ TOBN(0xd3e5e0fc, 0x644be892), TOBN(0x707a9816, 0xfdaf6c42),
+ TOBN(0x60145567, 0xf15c13fe), TOBN(0x4818ebaa, 0xe130a54a),
+ TOBN(0x28aad3ad, 0x58d2f767), TOBN(0xdc5267fd, 0xd7e7c773),
+ TOBN(0x4919cc88, 0xc3afcc98), TOBN(0xaa2e6ab0, 0x2db8cd4b),
+ TOBN(0xd46fec04, 0xd0c63eaa), TOBN(0xa1cb92c5, 0x19ffa832),
+ TOBN(0x678dd178, 0xe43a631f), TOBN(0xfb5ae1cd, 0x3dc788b3),
+ TOBN(0x68b4fb90, 0x6e77de04), TOBN(0x7992bcf0, 0xf06dbb97),
+ TOBN(0x896e6a13, 0xc417c01d), TOBN(0x8d96332c, 0xb956be01),
+ TOBN(0x902fc93a, 0x413aa2b9), TOBN(0x99a4d915, 0xfc98c8a5),
+ TOBN(0x52c29407, 0x565f1137), TOBN(0x4072690f, 0x21e4f281),
+ TOBN(0x36e607cf, 0x02ff6072), TOBN(0xa47d2ca9, 0x8ad98cdc),
+ TOBN(0xbf471d1e, 0xf5f56609), TOBN(0xbcf86623, 0xf264ada0),
+ TOBN(0xb70c0687, 0xaa9e5cb6), TOBN(0xc98124f2, 0x17401c6c),
+ TOBN(0x8189635f, 0xd4a61435), TOBN(0xd28fb8af, 0xa9d98ea6),
+ TOBN(0xb9a67c2a, 0x40c251f8), TOBN(0x88cd5d87, 0xa2da44be),
+ TOBN(0x437deb96, 0xe09b5423), TOBN(0x150467db, 0x64287dc1),
+ TOBN(0xe161debb, 0xcdabb839), TOBN(0xa79e9742, 0xf1839a3e),
+ TOBN(0xbb8dd3c2, 0x652d202b), TOBN(0x7b3e67f7, 0xe9f97d96),
+ TOBN(0x5aa5d78f, 0xb1cb6ac9), TOBN(0xffa13e8e, 0xca1d0d45),
+ TOBN(0x369295dd, 0x2ba5bf95), TOBN(0xd68bd1f8, 0x39aff05e),
+ TOBN(0xaf0d86f9, 0x26d783f2), TOBN(0x543a59b3, 0xfc3aafc1),
+ TOBN(0x3fcf81d2, 0x7b7da97c), TOBN(0xc990a056, 0xd25dee46),
+ TOBN(0x3e6775b8, 0x519cce2c), TOBN(0xfc9af71f, 0xae13d863),
+ TOBN(0x774a4a6f, 0x47c1605c), TOBN(0x46ba4245, 0x2fd205e8),
+ TOBN(0xa06feea4, 0xd3fd524d), TOBN(0x1e724641, 0x6de1acc2),
+ TOBN(0xf53816f1, 0x334e2b42), TOBN(0x49e5918e, 0x922f0024),
+ TOBN(0x439530b6, 0x65c7322d), TOBN(0xcf12cc01, 0xb3c1b3fb),
+ TOBN(0xc70b0186, 0x0172f685), TOBN(0xb915ee22, 0x1b58391d),
+ TOBN(0x9afdf03b, 0xa317db24), TOBN(0x87dec659, 0x17b8ffc4),
+ TOBN(0x7f46597b, 0xe4d3d050), TOBN(0x80a1c1ed, 0x006500e7),
+ TOBN(0x84902a96, 0x78bf030e), TOBN(0xfb5e9c9a, 0x50560148),
+ TOBN(0x6dae0a92, 0x63362426), TOBN(0xdcaeecf4, 0xa9e30c40),
+ TOBN(0xc0d887bb, 0x518d0c6b), TOBN(0x99181152, 0xcb985b9d),
+ TOBN(0xad186898, 0xef7bc381), TOBN(0x18168ffb, 0x9ee46201),
+ TOBN(0x9a04cdaa, 0x2502753c), TOBN(0xbb279e26, 0x51407c41),
+ TOBN(0xeacb03aa, 0xf23564e5), TOBN(0x18336582, 0x71e61016),
+ TOBN(0x8684b8c4, 0xeb809877), TOBN(0xb336e18d, 0xea0e672e),
+ TOBN(0xefb601f0, 0x34ee5867), TOBN(0x2733edbe, 0x1341cfd1),
+ TOBN(0xb15e809a, 0x26025c3c), TOBN(0xe6e981a6, 0x9350df88),
+ TOBN(0x92376237, 0x8502fd8e), TOBN(0x4791f216, 0x0c12be9b),
+ TOBN(0xb7256789, 0x25f02425), TOBN(0xec863194, 0x7a974443),
+ TOBN(0x7c0ce882, 0xfb41cc52), TOBN(0xc266ff7e, 0xf25c07f2),
+ TOBN(0x3d4da8c3, 0x017025f3), TOBN(0xefcf628c, 0xfb9579b4),
+ TOBN(0x5c4d0016, 0x1f3716ec), TOBN(0x9c27ebc4, 0x6801116e),
+ TOBN(0x5eba0ea1, 0x1da1767e), TOBN(0xfe151452, 0x47004c57),
+ TOBN(0x3ace6df6, 0x8c2373b7), TOBN(0x75c3dffe, 0x5dbc37ac),
+ TOBN(0x3dc32a73, 0xddc925fc), TOBN(0xb679c841, 0x2f65ee0b),
+ TOBN(0x715a3295, 0x451cbfeb), TOBN(0xd9889768, 0xf76e9a29),
+ TOBN(0xec20ce7f, 0xb28ad247), TOBN(0xe99146c4, 0x00894d79),
+ TOBN(0x71457d7c, 0x9f5e3ea7), TOBN(0x097b2662, 0x38030031),
+ TOBN(0xdb7f6ae6, 0xcf9f82a8), TOBN(0x319decb9, 0x438f473a),
+ TOBN(0xa63ab386, 0x283856c3), TOBN(0x13e3172f, 0xb06a361b),
+ TOBN(0x2959f8dc, 0x7d5a006c), TOBN(0x2dbc27c6, 0x75fba752),
+ TOBN(0xc1227ab2, 0x87c22c9e), TOBN(0x06f61f75, 0x71a268b2),
+ TOBN(0x1b6bb971, 0x04779ce2), TOBN(0xaca83812, 0x0aadcb1d),
+ TOBN(0x297ae0bc, 0xaeaab2d5), TOBN(0xa5c14ee7, 0x5bfb9f13),
+ TOBN(0xaa00c583, 0xf17a62c7), TOBN(0x39eb962c, 0x173759f6),
+ TOBN(0x1eeba1d4, 0x86c9a88f), TOBN(0x0ab6c37a, 0xdf016c5e),
+ TOBN(0xa2a147db, 0xa28a0749), TOBN(0x246c20d6, 0xee519165),
+ TOBN(0x5068d1b1, 0xd3810715), TOBN(0xb1e7018c, 0x748160b9),
+ TOBN(0x03f5b1fa, 0xf380ff62), TOBN(0xef7fb1dd, 0xf3cb2c1e),
+ TOBN(0xeab539a8, 0xfc91a7da), TOBN(0x83ddb707, 0xf3f9b561),
+ TOBN(0xc550e211, 0xfe7df7a4), TOBN(0xa7cd07f2, 0x063f6f40),
+ TOBN(0xb0de3635, 0x2976879c), TOBN(0xb5f83f85, 0xe55741da),
+ TOBN(0x4ea9d25e, 0xf3d8ac3d), TOBN(0x6fe2066f, 0x62819f02),
+ TOBN(0x4ab2b9c2, 0xcef4a564), TOBN(0x1e155d96, 0x5ffa2de3),
+ TOBN(0x0eb0a19b, 0xc3a72d00), TOBN(0x4037665b, 0x8513c31b),
+ TOBN(0x2fb2b6bf, 0x04c64637), TOBN(0x45c34d6e, 0x08cdc639),
+ TOBN(0x56f1e10f, 0xf01fd796), TOBN(0x4dfb8101, 0xfe3667b8),
+ TOBN(0xe0eda253, 0x9021d0c0), TOBN(0x7a94e9ff, 0x8a06c6ab),
+ TOBN(0x2d3bb0d9, 0xbb9aa882), TOBN(0xea20e4e5, 0xec05fd10),
+ TOBN(0xed7eeb5f, 0x1a1ca64e), TOBN(0x2fa6b43c, 0xc6327cbd),
+ TOBN(0xb577e3cf, 0x3aa91121), TOBN(0x8c6bd5ea, 0x3a34079b),
+ TOBN(0xd7e5ba39, 0x60e02fc0), TOBN(0xf16dd2c3, 0x90141bf8),
+ TOBN(0xb57276d9, 0x80101b98), TOBN(0x760883fd, 0xb82f0f66),
+ TOBN(0x89d7de75, 0x4bc3eff3), TOBN(0x03b60643, 0x5dc2ab40),
+ TOBN(0xcd6e53df, 0xe05beeac), TOBN(0xf2f1e862, 0xbc3325cd),
+ TOBN(0xdd0f7921, 0x774f03c3), TOBN(0x97ca7221, 0x4552cc1b),
+ TOBN(0x5a0d6afe, 0x1cd19f72), TOBN(0xa20915dc, 0xf183fbeb),
+ TOBN(0x9fda4b40, 0x832c403c), TOBN(0x32738edd, 0xbe425442),
+ TOBN(0x469a1df6, 0xb5eccf1a), TOBN(0x4b5aff42, 0x28bbe1f0),
+ TOBN(0x31359d7f, 0x570dfc93), TOBN(0xa18be235, 0xf0088628),
+ TOBN(0xa5b30fba, 0xb00ed3a9), TOBN(0x34c61374, 0x73cdf8be),
+ TOBN(0x2c5c5f46, 0xabc56797), TOBN(0x5cecf93d, 0xb82a8ae2),
+ TOBN(0x7d3dbe41, 0xa968fbf0), TOBN(0xd23d4583, 0x1a5c7f3d),
+ TOBN(0xf28f69a0, 0xc087a9c7), TOBN(0xc2d75471, 0x474471ca),
+ TOBN(0x36ec9f4a, 0x4eb732ec), TOBN(0x6c943bbd, 0xb1ca6bed),
+ TOBN(0xd64535e1, 0xf2457892), TOBN(0x8b84a8ea, 0xf7e2ac06),
+ TOBN(0xe0936cd3, 0x2499dd5f), TOBN(0x12053d7e, 0x0ed04e57),
+ TOBN(0x4bdd0076, 0xe4305d9d), TOBN(0x34a527b9, 0x1f67f0a2),
+ TOBN(0xe79a4af0, 0x9cec46ea), TOBN(0xb15347a1, 0x658b9bc7),
+ TOBN(0x6bd2796f, 0x35af2f75), TOBN(0xac957990, 0x4051c435),
+ TOBN(0x2669dda3, 0xc33a655d), TOBN(0x5d503c2e, 0x88514aa3),
+ TOBN(0xdfa11337, 0x3753dd41), TOBN(0x3f054673, 0x0b754f78),
+ TOBN(0xbf185677, 0x496125bd), TOBN(0xfb0023c8, 0x3775006c),
+ TOBN(0xfa0f072f, 0x3a037899), TOBN(0x4222b6eb, 0x0e4aea57),
+ TOBN(0x3dde5e76, 0x7866d25a), TOBN(0xb6eb04f8, 0x4837aa6f),
+ TOBN(0x5315591a, 0x2cf1cdb8), TOBN(0x6dfb4f41, 0x2d4e683c),
+ TOBN(0x7e923ea4, 0x48ee1f3a), TOBN(0x9604d9f7, 0x05a2afd5),
+ TOBN(0xbe1d4a33, 0x40ea4948), TOBN(0x5b45f1f4, 0xb44cbd2f),
+ TOBN(0x5faf8376, 0x4acc757e), TOBN(0xa7cf9ab8, 0x63d68ff7),
+ TOBN(0x8ad62f69, 0xdf0e404b), TOBN(0xd65f33c2, 0x12bdafdf),
+ TOBN(0xc365de15, 0xa377b14e), TOBN(0x6bf5463b, 0x8e39f60c),
+ TOBN(0x62030d2d, 0x2ce68148), TOBN(0xd95867ef, 0xe6f843a8),
+ TOBN(0xd39a0244, 0xef5ab017), TOBN(0x0bd2d8c1, 0x4ab55d12),
+ TOBN(0xc9503db3, 0x41639169), TOBN(0x2d4e25b0, 0xf7660c8a),
+ TOBN(0x760cb3b5, 0xe224c5d7), TOBN(0xfa3baf8c, 0x68616919),
+ TOBN(0x9fbca113, 0x8d142552), TOBN(0x1ab18bf1, 0x7669ebf5),
+ TOBN(0x55e6f53e, 0x9bdf25dd), TOBN(0x04cc0bf3, 0xcb6cd154),
+ TOBN(0x595bef49, 0x95e89080), TOBN(0xfe9459a8, 0x104a9ac1),
+ TOBN(0xad2d89ca, 0xcce9bb32), TOBN(0xddea65e1, 0xf7de8285),
+ TOBN(0x62ed8c35, 0xb351bd4b), TOBN(0x4150ff36, 0x0c0e19a7),
+ TOBN(0x86e3c801, 0x345f4e47), TOBN(0x3bf21f71, 0x203a266c),
+ TOBN(0x7ae110d4, 0x855b1f13), TOBN(0x5d6aaf6a, 0x07262517),
+ TOBN(0x1e0f12e1, 0x813d28f1), TOBN(0x6000e11d, 0x7ad7a523),
+ TOBN(0xc7d8deef, 0xc744a17b), TOBN(0x1e990b48, 0x14c05a00),
+ TOBN(0x68fddaee, 0x93e976d5), TOBN(0x696241d1, 0x46610d63),
+ TOBN(0xb204e7c3, 0x893dda88), TOBN(0x8bccfa65, 0x6a3a6946),
+ TOBN(0xb59425b4, 0xc5cd1411), TOBN(0x701b4042, 0xff3658b1),
+ TOBN(0xe3e56bca, 0x4784cf93), TOBN(0x27de5f15, 0x8fe68d60),
+ TOBN(0x4ab9cfce, 0xf8d53f19), TOBN(0xddb10311, 0xa40a730d),
+ TOBN(0x6fa73cd1, 0x4eee0a8a), TOBN(0xfd548748, 0x5249719d),
+ TOBN(0x49d66316, 0xa8123ef0), TOBN(0x73c32db4, 0xe7f95438),
+ TOBN(0x2e2ed209, 0x0d9e7854), TOBN(0xf98a9329, 0x9d9f0507),
+ TOBN(0xc5d33cf6, 0x0c6aa20a), TOBN(0x9a32ba14, 0x75279bb2),
+ TOBN(0x7e3202cb, 0x774a7307), TOBN(0x64ed4bc4, 0xe8c42dbd),
+ TOBN(0xc20f1a06, 0xd4caed0d), TOBN(0xb8021407, 0x171d22b3),
+ TOBN(0xd426ca04, 0xd13268d7), TOBN(0x92377007, 0x25f4d126),
+ TOBN(0x4204cbc3, 0x71f21a85), TOBN(0x18461b7a, 0xf82369ba),
+ TOBN(0xc0c07d31, 0x3fc858f9), TOBN(0x5deb5a50, 0xe2bab569),
+ TOBN(0xd5959d46, 0xd5eea89e), TOBN(0xfdff8424, 0x08437f4b),
+ TOBN(0xf21071e4, 0x3cfe254f), TOBN(0x72417696, 0x95468321),
+ TOBN(0x5d8288b9, 0x102cae3e), TOBN(0x2d143e3d, 0xf1965dff),
+ TOBN(0x00c9a376, 0xa078d847), TOBN(0x6fc0da31, 0x26028731),
+ TOBN(0xa2baeadf, 0xe45083a2), TOBN(0x66bc7218, 0x5e5b4bcd),
+ TOBN(0x2c826442, 0xd04b8e7f), TOBN(0xc19f5451, 0x6c4b586b),
+ TOBN(0x60182c49, 0x5b7eeed5), TOBN(0xd9954ecd, 0x7aa9dfa1),
+ TOBN(0xa403a8ec, 0xc73884ad), TOBN(0x7fb17de2, 0x9bb39041),
+ TOBN(0x694b64c5, 0xabb020e8), TOBN(0x3d18c184, 0x19c4eec7),
+ TOBN(0x9c4673ef, 0x1c4793e5), TOBN(0xc7b8aeb5, 0x056092e6),
+ TOBN(0x3aa1ca43, 0xf0f8c16b), TOBN(0x224ed5ec, 0xd679b2f6),
+ TOBN(0x0d56eeaf, 0x55a205c9), TOBN(0xbfe115ba, 0x4b8e028b),
+ TOBN(0x97e60849, 0x3927f4fe), TOBN(0xf91fbf94, 0x759aa7c5),
+ TOBN(0x985af769, 0x6be90a51), TOBN(0xc1277b78, 0x78ccb823),
+ TOBN(0x395b656e, 0xe7a75952), TOBN(0x00df7de0, 0x928da5f5),
+ TOBN(0x09c23175, 0x4ca4454f), TOBN(0x4ec971f4, 0x7aa2d3c1),
+ TOBN(0x45c3c507, 0xe75d9ccc), TOBN(0x63b7be8a, 0x3dc90306),
+ TOBN(0x37e09c66, 0x5db44bdc), TOBN(0x50d60da1, 0x6841c6a2),
+ TOBN(0x6f9b65ee, 0x08df1b12), TOBN(0x38734879, 0x7ff089df),
+ TOBN(0x9c331a66, 0x3fe8013d), TOBN(0x017f5de9, 0x5f42fcc8),
+ TOBN(0x43077866, 0xe8e57567), TOBN(0xc9f781ce, 0xf9fcdb18),
+ TOBN(0x38131dda, 0x9b12e174), TOBN(0x25d84aa3, 0x8a03752a),
+ TOBN(0x45e09e09, 0x4d0c0ce2), TOBN(0x1564008b, 0x92bebba5),
+ TOBN(0xf7e8ad31, 0xa87284c7), TOBN(0xb7c4b46c, 0x97e7bbaa),
+ TOBN(0x3e22a7b3, 0x97acf4ec), TOBN(0x0426c400, 0x5ea8b640),
+ TOBN(0x5e3295a6, 0x4e969285), TOBN(0x22aabc59, 0xa6a45670),
+ TOBN(0xb929714c, 0x5f5942bc), TOBN(0x9a6168bd, 0xfa3182ed),
+ TOBN(0x2216a665, 0x104152ba), TOBN(0x46908d03, 0xb6926368)}
+ ,
+ {TOBN(0xa9f5d874, 0x5a1251fb), TOBN(0x967747a8, 0xc72725c7),
+ TOBN(0x195c33e5, 0x31ffe89e), TOBN(0x609d210f, 0xe964935e),
+ TOBN(0xcafd6ca8, 0x2fe12227), TOBN(0xaf9b5b96, 0x0426469d),
+ TOBN(0x2e9ee04c, 0x5693183c), TOBN(0x1084a333, 0xc8146fef),
+ TOBN(0x96649933, 0xaed1d1f7), TOBN(0x566eaff3, 0x50563090),
+ TOBN(0x345057f0, 0xad2e39cf), TOBN(0x148ff65b, 0x1f832124),
+ TOBN(0x042e89d4, 0xcf94cf0d), TOBN(0x319bec84, 0x520c58b3),
+ TOBN(0x2a267626, 0x5361aa0d), TOBN(0xc86fa302, 0x8fbc87ad),
+ TOBN(0xfc83d2ab, 0x5c8b06d5), TOBN(0xb1a785a2, 0xfe4eac46),
+ TOBN(0xb99315bc, 0x846f7779), TOBN(0xcf31d816, 0xef9ea505),
+ TOBN(0x2391fe6a, 0x15d7dc85), TOBN(0x2f132b04, 0xb4016b33),
+ TOBN(0x29547fe3, 0x181cb4c7), TOBN(0xdb66d8a6, 0x650155a1),
+ TOBN(0x6b66d7e1, 0xadc1696f), TOBN(0x98ebe593, 0x0acd72d0),
+ TOBN(0x65f24550, 0xcc1b7435), TOBN(0xce231393, 0xb4b9a5ec),
+ TOBN(0x234a22d4, 0xdb067df9), TOBN(0x98dda095, 0xcaff9b00),
+ TOBN(0x1bbc75a0, 0x6100c9c1), TOBN(0x1560a9c8, 0x939cf695),
+ TOBN(0xcf006d3e, 0x99e0925f), TOBN(0x2dd74a96, 0x6322375a),
+ TOBN(0xc58b446a, 0xb56af5ba), TOBN(0x50292683, 0xe0b9b4f1),
+ TOBN(0xe2c34cb4, 0x1aeaffa3), TOBN(0x8b17203f, 0x9b9587c1),
+ TOBN(0x6d559207, 0xead1350c), TOBN(0x2b66a215, 0xfb7f9604),
+ TOBN(0x0850325e, 0xfe51bf74), TOBN(0x9c4f579e, 0x5e460094),
+ TOBN(0x5c87b92a, 0x76da2f25), TOBN(0x889de4e0, 0x6febef33),
+ TOBN(0x6900ec06, 0x646083ce), TOBN(0xbe2a0335, 0xbfe12773),
+ TOBN(0xadd1da35, 0xc5344110), TOBN(0x757568b7, 0xb802cd20),
+ TOBN(0x75559779, 0x00f7e6c8), TOBN(0x38e8b94f, 0x0facd2f0),
+ TOBN(0xfea1f3af, 0x03fde375), TOBN(0x5e11a1d8, 0x75881dfc),
+ TOBN(0xb3a6b02e, 0xc1e2f2ef), TOBN(0x193d2bbb, 0xc605a6c5),
+ TOBN(0x325ffeee, 0x339a0b2d), TOBN(0x27b6a724, 0x9e0c8846),
+ TOBN(0xe4050f1c, 0xf1c367ca), TOBN(0x9bc85a9b, 0xc90fbc7d),
+ TOBN(0xa373c4a2, 0xe1a11032), TOBN(0xb64232b7, 0xad0393a9),
+ TOBN(0xf5577eb0, 0x167dad29), TOBN(0x1604f301, 0x94b78ab2),
+ TOBN(0x0baa94af, 0xe829348b), TOBN(0x77fbd8dd, 0x41654342),
+ TOBN(0xdab50ea5, 0xb964e39a), TOBN(0xd4c29e3c, 0xd0d3c76e),
+ TOBN(0x80dae67c, 0x56d11964), TOBN(0x7307a8bf, 0xe5ffcc2f),
+ TOBN(0x65bbc1aa, 0x91708c3b), TOBN(0xa151e62c, 0x28bf0eeb),
+ TOBN(0x6cb53381, 0x6fa34db7), TOBN(0x5139e05c, 0xa29403a8),
+ TOBN(0x6ff651b4, 0x94a7cd2e), TOBN(0x5671ffd1, 0x0699336c),
+ TOBN(0x6f5fd2cc, 0x979a896a), TOBN(0x11e893a8, 0xd8148cef),
+ TOBN(0x988906a1, 0x65cf7b10), TOBN(0x81b67178, 0xc50d8485),
+ TOBN(0x7c0deb35, 0x8a35b3de), TOBN(0x423ac855, 0xc1d29799),
+ TOBN(0xaf580d87, 0xdac50b74), TOBN(0x28b2b89f, 0x5869734c),
+ TOBN(0x99a3b936, 0x874e28fb), TOBN(0xbb2c9190, 0x25f3f73a),
+ TOBN(0x199f6918, 0x84a9d5b7), TOBN(0x7ebe2325, 0x7e770374),
+ TOBN(0xf442e107, 0x0738efe2), TOBN(0xcf9f3f56, 0xcf9082d2),
+ TOBN(0x719f69e1, 0x09618708), TOBN(0xcc9e8364, 0xc183f9b1),
+ TOBN(0xec203a95, 0x366a21af), TOBN(0x6aec5d6d, 0x068b141f),
+ TOBN(0xee2df78a, 0x994f04e9), TOBN(0xb39ccae8, 0x271245b0),
+ TOBN(0xb875a4a9, 0x97e43f4f), TOBN(0x507dfe11, 0xdb2cea98),
+ TOBN(0x4fbf81cb, 0x489b03e9), TOBN(0xdb86ec5b, 0x6ec414fa),
+ TOBN(0xfad444f9, 0xf51b3ae5), TOBN(0xca7d33d6, 0x1914e3fe),
+ TOBN(0xa9c32f5c, 0x0ae6c4d0), TOBN(0xa9ca1d1e, 0x73969568),
+ TOBN(0x98043c31, 0x1aa7467e), TOBN(0xe832e75c, 0xe21b5ac6),
+ TOBN(0x314b7aea, 0x5232123d), TOBN(0x08307c8c, 0x65ae86db),
+ TOBN(0x06e7165c, 0xaa4668ed), TOBN(0xb170458b, 0xb4d3ec39),
+ TOBN(0x4d2e3ec6, 0xc19bb986), TOBN(0xc5f34846, 0xae0304ed),
+ TOBN(0x917695a0, 0x6c9f9722), TOBN(0x6c7f7317, 0x4cab1c0a),
+ TOBN(0x6295940e, 0x9d6d2e8b), TOBN(0xd318b8c1, 0x549f7c97),
+ TOBN(0x22453204, 0x97713885), TOBN(0x468d834b, 0xa8a440fe),
+ TOBN(0xd81fe5b2, 0xbfba796e), TOBN(0x152364db, 0x6d71f116),
+ TOBN(0xbb8c7c59, 0xb5b66e53), TOBN(0x0b12c61b, 0x2641a192),
+ TOBN(0x31f14802, 0xfcf0a7fd), TOBN(0x42fd0789, 0x5488b01e),
+ TOBN(0x71d78d6d, 0x9952b498), TOBN(0x8eb572d9, 0x07ac5201),
+ TOBN(0xe0a2a44c, 0x4d194a88), TOBN(0xd2b63fd9, 0xba017e66),
+ TOBN(0x78efc6c8, 0xf888aefc), TOBN(0xb76f6bda, 0x4a881a11),
+ TOBN(0x187f314b, 0xb46c2397), TOBN(0x004cf566, 0x5ded2819),
+ TOBN(0xa9ea5704, 0x38764d34), TOBN(0xbba45217, 0x78084709),
+ TOBN(0x06474571, 0x1171121e), TOBN(0xad7b7eb1, 0xe7c9b671),
+ TOBN(0xdacfbc40, 0x730f7507), TOBN(0x178cd8c6, 0xc7ad7bd1),
+ TOBN(0xbf0be101, 0xb2a67238), TOBN(0x3556d367, 0xaf9c14f2),
+ TOBN(0x104b7831, 0xa5662075), TOBN(0x58ca59bb, 0x79d9e60a),
+ TOBN(0x4bc45392, 0xa569a73b), TOBN(0x517a52e8, 0x5698f6c9),
+ TOBN(0x85643da5, 0xaeadd755), TOBN(0x1aed0cd5, 0x2a581b84),
+ TOBN(0xb9b4ff84, 0x80af1372), TOBN(0x244c3113, 0xf1ba5d1f),
+ TOBN(0x2a5dacbe, 0xf5f98d31), TOBN(0x2c3323e8, 0x4375bc2a),
+ TOBN(0x17a3ab4a, 0x5594b1dd), TOBN(0xa1928bfb, 0xceb4797e),
+ TOBN(0xe83af245, 0xe4886a19), TOBN(0x8979d546, 0x72b5a74a),
+ TOBN(0xa0f726bc, 0x19f9e967), TOBN(0xd9d03152, 0xe8fbbf4e),
+ TOBN(0xcfd6f51d, 0xb7707d40), TOBN(0x633084d9, 0x63f6e6e0),
+ TOBN(0xedcd9cdc, 0x55667eaf), TOBN(0x73b7f92b, 0x2e44d56f),
+ TOBN(0xfb2e39b6, 0x4e962b14), TOBN(0x7d408f6e, 0xf671fcbf),
+ TOBN(0xcc634ddc, 0x164a89bb), TOBN(0x74a42bb2, 0x3ef3bd05),
+ TOBN(0x1280dbb2, 0x428decbb), TOBN(0x6103f6bb, 0x402c8596),
+ TOBN(0xfa2bf581, 0x355a5752), TOBN(0x562f96a8, 0x00946674),
+ TOBN(0x4e4ca16d, 0x6da0223b), TOBN(0xfe47819f, 0x28d3aa25),
+ TOBN(0x9eea3075, 0xf8dfcf8a), TOBN(0xa284f0aa, 0x95669825),
+ TOBN(0xb3fca250, 0x867d3fd8), TOBN(0x20757b5f, 0x269d691e),
+ TOBN(0xf2c24020, 0x93b8a5de), TOBN(0xd3f93359, 0xebc06da6),
+ TOBN(0x1178293e, 0xb2739c33), TOBN(0xd2a3e770, 0xbcd686e5),
+ TOBN(0xa76f49f4, 0xcd941534), TOBN(0x0d37406b, 0xe3c71c0e),
+ TOBN(0x172d9397, 0x3b97f7e3), TOBN(0xec17e239, 0xbd7fd0de),
+ TOBN(0xe3290551, 0x6f496ba2), TOBN(0x6a693172, 0x36ad50e7),
+ TOBN(0xc4e539a2, 0x83e7eff5), TOBN(0x752737e7, 0x18e1b4cf),
+ TOBN(0xa2f7932c, 0x68af43ee), TOBN(0x5502468e, 0x703d00bd),
+ TOBN(0xe5dc978f, 0x2fb061f5), TOBN(0xc9a1904a, 0x28c815ad),
+ TOBN(0xd3af538d, 0x470c56a4), TOBN(0x159abc5f, 0x193d8ced),
+ TOBN(0x2a37245f, 0x20108ef3), TOBN(0xfa17081e, 0x223f7178),
+ TOBN(0x27b0fb2b, 0x10c8c0f5), TOBN(0x2102c3ea, 0x40650547),
+ TOBN(0x594564df, 0x8ac3bfa7), TOBN(0x98102033, 0x509dad96),
+ TOBN(0x6989643f, 0xf1d18a13), TOBN(0x35eebd91, 0xd7fc5af0),
+ TOBN(0x078d096a, 0xfaeaafd8), TOBN(0xb7a89341, 0xdef3de98),
+ TOBN(0x2a206e8d, 0xecf2a73a), TOBN(0x066a6397, 0x8e551994),
+ TOBN(0x3a6a088a, 0xb98d53a2), TOBN(0x0ce7c67c, 0x2d1124aa),
+ TOBN(0x48cec671, 0x759a113c), TOBN(0xe3b373d3, 0x4f6f67fa),
+ TOBN(0x5455d479, 0xfd36727b), TOBN(0xe5a428ee, 0xa13c0d81),
+ TOBN(0xb853dbc8, 0x1c86682b), TOBN(0xb78d2727, 0xb8d02b2a),
+ TOBN(0xaaf69bed, 0x8ebc329a), TOBN(0xdb6b40b3, 0x293b2148),
+ TOBN(0xe42ea77d, 0xb8c4961f), TOBN(0xb1a12f7c, 0x20e5e0ab),
+ TOBN(0xa0ec5274, 0x79e8b05e), TOBN(0x68027391, 0xfab60a80),
+ TOBN(0x6bfeea5f, 0x16b1bd5e), TOBN(0xf957e420, 0x4de30ad3),
+ TOBN(0xcbaf664e, 0x6a353b9e), TOBN(0x5c873312, 0x26d14feb),
+ TOBN(0x4e87f98c, 0xb65f57cb), TOBN(0xdb60a621, 0x5e0cdd41),
+ TOBN(0x67c16865, 0xa6881440), TOBN(0x1093ef1a, 0x46ab52aa),
+ TOBN(0xc095afb5, 0x3f4ece64), TOBN(0x6a6bb02e, 0x7604551a),
+ TOBN(0x55d44b4e, 0x0b26b8cd), TOBN(0xe5f9a999, 0xf971268a),
+ TOBN(0xc08ec425, 0x11a7de84), TOBN(0x83568095, 0xfda469dd),
+ TOBN(0x737bfba1, 0x6c6c90a2), TOBN(0x1cb9c4a0, 0xbe229831),
+ TOBN(0x93bccbba, 0xbb2eec64), TOBN(0xa0c23b64, 0xda03adbe),
+ TOBN(0x5f7aa00a, 0xe0e86ac4), TOBN(0x470b941e, 0xfc1401e6),
+ TOBN(0x5ad8d679, 0x9df43574), TOBN(0x4ccfb8a9, 0x0f65d810),
+ TOBN(0x1bce80e3, 0xaa7fbd81), TOBN(0x273291ad, 0x9508d20a),
+ TOBN(0xf5c4b46b, 0x42a92806), TOBN(0x810684ec, 0xa86ab44a),
+ TOBN(0x4591640b, 0xca0bc9f8), TOBN(0xb5efcdfc, 0x5c4b6054),
+ TOBN(0x16fc8907, 0x6e9edd12), TOBN(0xe29d0b50, 0xd4d792f9),
+ TOBN(0xa45fd01c, 0x9b03116d), TOBN(0x85035235, 0xc81765a4),
+ TOBN(0x1fe2a9b2, 0xb4b4b67c), TOBN(0xc1d10df0, 0xe8020604),
+ TOBN(0x9d64abfc, 0xbc8058d8), TOBN(0x8943b9b2, 0x712a0fbb),
+ TOBN(0x90eed914, 0x3b3def04), TOBN(0x85ab3aa2, 0x4ce775ff),
+ TOBN(0x605fd4ca, 0x7bbc9040), TOBN(0x8b34a564, 0xe2c75dfb),
+ TOBN(0x41ffc94a, 0x10358560), TOBN(0x2d8a5072, 0x9e5c28aa),
+ TOBN(0xe915a0fc, 0x4cc7eb15), TOBN(0xe9efab05, 0x8f6d0f5d),
+ TOBN(0xdbab47a9, 0xd19e9b91), TOBN(0x8cfed745, 0x0276154c),
+ TOBN(0x154357ae, 0x2cfede0d), TOBN(0x520630df, 0x19f5a4ef),
+ TOBN(0x25759f7c, 0xe382360f), TOBN(0xb6db05c9, 0x88bf5857),
+ TOBN(0x2917d61d, 0x6c58d46c), TOBN(0x14f8e491, 0xfd20cb7a),
+ TOBN(0xb68a727a, 0x11c20340), TOBN(0x0386f86f, 0xaf7ccbb6),
+ TOBN(0x5c8bc6cc, 0xfee09a20), TOBN(0x7d76ff4a, 0xbb7eea35),
+ TOBN(0xa7bdebe7, 0xdb15be7a), TOBN(0x67a08054, 0xd89f0302),
+ TOBN(0x56bf0ea9, 0xc1193364), TOBN(0xc8244467, 0x62837ebe),
+ TOBN(0x32bd8e8b, 0x20d841b8), TOBN(0x127a0548, 0xdbb8a54f),
+ TOBN(0x83dd4ca6, 0x63b20236), TOBN(0x87714718, 0x203491fa),
+ TOBN(0x4dabcaaa, 0xaa8a5288), TOBN(0x91cc0c8a, 0xaf23a1c9),
+ TOBN(0x34c72c6a, 0x3f220e0c), TOBN(0xbcc20bdf, 0x1232144a),
+ TOBN(0x6e2f42da, 0xa20ede1b), TOBN(0xc441f00c, 0x74a00515),
+ TOBN(0xbf46a5b6, 0x734b8c4b), TOBN(0x57409503, 0x7b56c9a4),
+ TOBN(0x9f735261, 0xe4585d45), TOBN(0x9231faed, 0x6734e642),
+ TOBN(0x1158a176, 0xbe70ee6c), TOBN(0x35f1068d, 0x7c3501bf),
+ TOBN(0x6beef900, 0xa2d26115), TOBN(0x649406f2, 0xef0afee3),
+ TOBN(0x3f43a60a, 0xbc2420a1), TOBN(0x509002a7, 0xd5aee4ac),
+ TOBN(0xb46836a5, 0x3ff3571b), TOBN(0x24f98b78, 0x837927c1),
+ TOBN(0x6254256a, 0x4533c716), TOBN(0xf27abb0b, 0xd07ee196),
+ TOBN(0xd7cf64fc, 0x5c6d5bfd), TOBN(0x6915c751, 0xf0cd7a77),
+ TOBN(0xd9f59012, 0x8798f534), TOBN(0x772b0da8, 0xf81d8b5f),
+ TOBN(0x1244260c, 0x2e03fa69), TOBN(0x36cf0e3a, 0x3be1a374),
+ TOBN(0x6e7c1633, 0xef06b960), TOBN(0xa71a4c55, 0x671f90f6),
+ TOBN(0x7a941251, 0x33c673db), TOBN(0xc0bea510, 0x73e8c131),
+ TOBN(0x61a8a699, 0xd4f6c734), TOBN(0x25e78c88, 0x341ed001),
+ TOBN(0x5c18acf8, 0x8e2f7d90), TOBN(0xfdbf33d7, 0x77be32cd),
+ TOBN(0x0a085cd7, 0xd2eb5ee9), TOBN(0x2d702cfb, 0xb3201115),
+ TOBN(0xb6e0ebdb, 0x85c88ce8), TOBN(0x23a3ce3c, 0x1e01d617),
+ TOBN(0x3041618e, 0x567333ac), TOBN(0x9dd0fd8f, 0x157edb6b),
+ TOBN(0x27f74702, 0xb57872b8), TOBN(0x2ef26b4f, 0x657d5fe1),
+ TOBN(0x95426f0a, 0x57cf3d40), TOBN(0x847e2ad1, 0x65a6067a),
+ TOBN(0xd474d9a0, 0x09996a74), TOBN(0x16a56acd, 0x2a26115c),
+ TOBN(0x02a615c3, 0xd16f4d43), TOBN(0xcc3fc965, 0xaadb85b7),
+ TOBN(0x386bda73, 0xce07d1b0), TOBN(0xd82910c2, 0x58ad4178),
+ TOBN(0x124f82cf, 0xcd2617f4), TOBN(0xcc2f5e8d, 0xef691770),
+ TOBN(0x82702550, 0xb8c30ccc), TOBN(0x7b856aea, 0x1a8e575a),
+ TOBN(0xbb822fef, 0xb1ab9459), TOBN(0x085928bc, 0xec24e38e),
+ TOBN(0x5d0402ec, 0xba8f4b4d), TOBN(0xc07cd4ba, 0x00b4d58b),
+ TOBN(0x5d8dffd5, 0x29227e7a), TOBN(0x61d44d0c, 0x31bf386f),
+ TOBN(0xe486dc2b, 0x135e6f4d), TOBN(0x680962eb, 0xe79410ef),
+ TOBN(0xa61bd343, 0xf10088b5), TOBN(0x6aa76076, 0xe2e28686),
+ TOBN(0x80463d11, 0x8fb98871), TOBN(0xcb26f5c3, 0xbbc76aff),
+ TOBN(0xd4ab8edd, 0xfbe03614), TOBN(0xc8eb579b, 0xc0cf2dee),
+ TOBN(0xcc004c15, 0xc93bae41), TOBN(0x46fbae5d, 0x3aeca3b2),
+ TOBN(0x671235cf, 0x0f1e9ab1), TOBN(0xadfba934, 0x9ec285c1),
+ TOBN(0x88ded013, 0xf216c980), TOBN(0xc8ac4fb8, 0xf79e0bc1),
+ TOBN(0xa29b89c6, 0xfb97a237), TOBN(0xb697b780, 0x9922d8e7),
+ TOBN(0x3142c639, 0xddb945b5), TOBN(0x447b06c7, 0xe094c3a9),
+ TOBN(0xcdcb3642, 0x72266c90), TOBN(0x633aad08, 0xa9385046),
+ TOBN(0xa36c936b, 0xb57c6477), TOBN(0x871f8b64, 0xe94dbcc6),
+ TOBN(0x28d0fb62, 0xa591a67b), TOBN(0x9d40e081, 0xc1d926f5),
+ TOBN(0x3111eaf6, 0xf2d84b5a), TOBN(0x228993f9, 0xa565b644),
+ TOBN(0x0ccbf592, 0x2c83188b), TOBN(0xf87b30ab, 0x3df3e197),
+ TOBN(0xb8658b31, 0x7642bca8), TOBN(0x1a032d7f, 0x52800f17),
+ TOBN(0x051dcae5, 0x79bf9445), TOBN(0xeba6b8ee, 0x54a2e253),
+ TOBN(0x5c8b9cad, 0xd4485692), TOBN(0x84bda40e, 0x8986e9be),
+ TOBN(0xd16d16a4, 0x2f0db448), TOBN(0x8ec80050, 0xa14d4188),
+ TOBN(0xb2b26107, 0x98fa7aaa), TOBN(0x41209ee4, 0xf073aa4e),
+ TOBN(0xf1570359, 0xf2d6b19b), TOBN(0xcbe6868c, 0xfc577caf),
+ TOBN(0x186c4bdc, 0x32c04dd3), TOBN(0xa6c35fae, 0xcfeee397),
+ TOBN(0xb4a1b312, 0xf086c0cf), TOBN(0xe0a5ccc6, 0xd9461fe2),
+ TOBN(0xc32278aa, 0x1536189f), TOBN(0x1126c55f, 0xba6df571),
+ TOBN(0x0f71a602, 0xb194560e), TOBN(0x8b2d7405, 0x324bd6e1),
+ TOBN(0x8481939e, 0x3738be71), TOBN(0xb5090b1a, 0x1a4d97a9),
+ TOBN(0x116c65a3, 0xf05ba915), TOBN(0x21863ad3, 0xaae448aa),
+ TOBN(0xd24e2679, 0xa7aae5d3), TOBN(0x7076013d, 0x0de5c1c4),
+ TOBN(0x2d50f8ba, 0xbb05b629), TOBN(0x73c1abe2, 0x6e66efbb),
+ TOBN(0xefd4b422, 0xf2488af7), TOBN(0xe4105d02, 0x663ba575),
+ TOBN(0x7eb60a8b, 0x53a69457), TOBN(0x62210008, 0xc945973b),
+ TOBN(0xfb255478, 0x77a50ec6), TOBN(0xbf0392f7, 0x0a37a72c),
+ TOBN(0xa0a7a19c, 0x4be18e7a), TOBN(0x90d8ea16, 0x25b1e0af),
+ TOBN(0x7582a293, 0xef953f57), TOBN(0x90a64d05, 0xbdc5465a),
+ TOBN(0xca79c497, 0xe2510717), TOBN(0x560dbb7c, 0x18cb641f),
+ TOBN(0x1d8e3286, 0x4b66abfb), TOBN(0xd26f52e5, 0x59030900),
+ TOBN(0x1ee3f643, 0x5584941a), TOBN(0x6d3b3730, 0x569f5958),
+ TOBN(0x9ff2a62f, 0x4789dba5), TOBN(0x91fcb815, 0x72b5c9b7),
+ TOBN(0xf446cb7d, 0x6c8f9a0e), TOBN(0x48f625c1, 0x39b7ecb5),
+ TOBN(0xbabae801, 0x1c6219b8), TOBN(0xe7a562d9, 0x28ac2f23),
+ TOBN(0xe1b48732, 0x26e20588), TOBN(0x06ee1cad, 0x775af051),
+ TOBN(0xda29ae43, 0xfaff79f7), TOBN(0xc141a412, 0x652ee9e0),
+ TOBN(0x1e127f6f, 0x195f4bd0), TOBN(0x29c6ab4f, 0x072f34f8),
+ TOBN(0x7b7c1477, 0x30448112), TOBN(0x82b51af1, 0xe4a38656),
+ TOBN(0x2bf2028a, 0x2f315010), TOBN(0xc9a4a01f, 0x6ea88cd4),
+ TOBN(0xf63e95d8, 0x257e5818), TOBN(0xdd8efa10, 0xb4519b16),
+ TOBN(0xed8973e0, 0x0da910bf), TOBN(0xed49d077, 0x5c0fe4a9),
+ TOBN(0xac3aac5e, 0xb7caee1e), TOBN(0x1033898d, 0xa7f4da57),
+ TOBN(0x42145c0e, 0x5c6669b9), TOBN(0x42daa688, 0xc1aa2aa0),
+ TOBN(0x629cc15c, 0x1a1d885a), TOBN(0x25572ec0, 0xf4b76817),
+ TOBN(0x8312e435, 0x9c8f8f28), TOBN(0x8107f8cd, 0x81965490),
+ TOBN(0x516ff3a3, 0x6fa6110c), TOBN(0x74fb1eb1, 0xfb93561f),
+ TOBN(0x6c0c9047, 0x8457522b), TOBN(0xcfd32104, 0x6bb8bdc6),
+ TOBN(0x2d6884a2, 0xcc80ad57), TOBN(0x7c27fc35, 0x86a9b637),
+ TOBN(0x3461baed, 0xadf4e8cd), TOBN(0x1d56251a, 0x617242f0),
+ TOBN(0x0b80d209, 0xc955bef4), TOBN(0xdf02cad2, 0x06adb047),
+ TOBN(0xf0d7cb91, 0x5ec74fee), TOBN(0xd2503375, 0x1111ba44),
+ TOBN(0x9671755e, 0xdf53cb36), TOBN(0x54dcb612, 0x3368551b),
+ TOBN(0x66d69aac, 0xc8a025a4), TOBN(0x6be946c6, 0xe77ef445),
+ TOBN(0x719946d1, 0xa995e094), TOBN(0x65e848f6, 0xe51e04d8),
+ TOBN(0xe62f3300, 0x6a1e3113), TOBN(0x1541c7c1, 0x501de503),
+ TOBN(0x4daac9fa, 0xf4acfade), TOBN(0x0e585897, 0x44cd0b71),
+ TOBN(0x544fd869, 0x0a51cd77), TOBN(0x60fc20ed, 0x0031016d),
+ TOBN(0x58b404ec, 0xa4276867), TOBN(0x46f6c3cc, 0x34f34993),
+ TOBN(0x477ca007, 0xc636e5bd), TOBN(0x8018f5e5, 0x7c458b47),
+ TOBN(0xa1202270, 0xe47b668f), TOBN(0xcef48ccd, 0xee14f203),
+ TOBN(0x23f98bae, 0x62ff9b4d), TOBN(0x55acc035, 0xc589eddd),
+ TOBN(0x3fe712af, 0x64db4444), TOBN(0x19e9d634, 0xbecdd480),
+ TOBN(0xe08bc047, 0xa930978a), TOBN(0x2dbf24ec, 0xa1280733),
+ TOBN(0x3c0ae38c, 0x2cd706b2), TOBN(0x5b012a5b, 0x359017b9),
+ TOBN(0x3943c38c, 0x72e0f5ae), TOBN(0x786167ea, 0x57176fa3),
+ TOBN(0xe5f9897d, 0x594881dc), TOBN(0x6b5efad8, 0xcfb820c1),
+ TOBN(0xb2179093, 0xd55018de), TOBN(0x39ad7d32, 0x0bac56ce),
+ TOBN(0xb55122e0, 0x2cfc0e81), TOBN(0x117c4661, 0xf6d89daa),
+ TOBN(0x362d01e1, 0xcb64fa09), TOBN(0x6a309b4e, 0x3e9c4ddd),
+ TOBN(0xfa979fb7, 0xabea49b1), TOBN(0xb4b1d27d, 0x10e2c6c5),
+ TOBN(0xbd61c2c4, 0x23afde7a), TOBN(0xeb6614f8, 0x9786d358),
+ TOBN(0x4a5d816b, 0x7f6f7459), TOBN(0xe431a44f, 0x09360e7b),
+ TOBN(0x8c27a032, 0xc309914c), TOBN(0xcea5d68a, 0xcaede3d8),
+ TOBN(0x3668f665, 0x3a0a3f95), TOBN(0x89369416, 0x7ceba27b),
+ TOBN(0x89981fad, 0xe4728fe9), TOBN(0x7102c8a0, 0x8a093562),
+ TOBN(0xbb80310e, 0x235d21c8), TOBN(0x505e55d1, 0xbefb7f7b),
+ TOBN(0xa0a90811, 0x12958a67), TOBN(0xd67e106a, 0x4d851fef),
+ TOBN(0xb84011a9, 0x431dd80e), TOBN(0xeb7c7cca, 0x73306cd9),
+ TOBN(0x20fadd29, 0xd1b3b730), TOBN(0x83858b5b, 0xfe37b3d3),
+ TOBN(0xbf4cd193, 0xb6251d5c), TOBN(0x1cca1fd3, 0x1352d952),
+ TOBN(0xc66157a4, 0x90fbc051), TOBN(0x7990a638, 0x89b98636),}
+ ,
+ {TOBN(0xe5aa692a, 0x87dec0e1), TOBN(0x010ded8d, 0xf7b39d00),
+ TOBN(0x7b1b80c8, 0x54cfa0b5), TOBN(0x66beb876, 0xa0f8ea28),
+ TOBN(0x50d7f531, 0x3476cd0e), TOBN(0xa63d0e65, 0xb08d3949),
+ TOBN(0x1a09eea9, 0x53479fc6), TOBN(0x82ae9891, 0xf499e742),
+ TOBN(0xab58b910, 0x5ca7d866), TOBN(0x582967e2, 0x3adb3b34),
+ TOBN(0x89ae4447, 0xcceac0bc), TOBN(0x919c667c, 0x7bf56af5),
+ TOBN(0x9aec17b1, 0x60f5dcd7), TOBN(0xec697b9f, 0xddcaadbc),
+ TOBN(0x0b98f341, 0x463467f5), TOBN(0xb187f1f7, 0xa967132f),
+ TOBN(0x90fe7a1d, 0x214aeb18), TOBN(0x1506af3c, 0x741432f7),
+ TOBN(0xbb5565f9, 0xe591a0c4), TOBN(0x10d41a77, 0xb44f1bc3),
+ TOBN(0xa09d65e4, 0xa84bde96), TOBN(0x42f060d8, 0xf20a6a1c),
+ TOBN(0x652a3bfd, 0xf27f9ce7), TOBN(0xb6bdb65c, 0x3b3d739f),
+ TOBN(0xeb5ddcb6, 0xec7fae9f), TOBN(0x995f2714, 0xefb66e5a),
+ TOBN(0xdee95d8e, 0x69445d52), TOBN(0x1b6c2d46, 0x09e27620),
+ TOBN(0x32621c31, 0x8129d716), TOBN(0xb03909f1, 0x0958c1aa),
+ TOBN(0x8c468ef9, 0x1af4af63), TOBN(0x162c429f, 0xfba5cdf6),
+ TOBN(0x2f682343, 0x753b9371), TOBN(0x29cab45a, 0x5f1f9cd7),
+ TOBN(0x571623ab, 0xb245db96), TOBN(0xc507db09, 0x3fd79999),
+ TOBN(0x4e2ef652, 0xaf036c32), TOBN(0x86f0cc78, 0x05018e5c),
+ TOBN(0xc10a73d4, 0xab8be350), TOBN(0x6519b397, 0x7e826327),
+ TOBN(0xe8cb5eef, 0x9c053df7), TOBN(0x8de25b37, 0xb300ea6f),
+ TOBN(0xdb03fa92, 0xc849cffb), TOBN(0x242e43a7, 0xe84169bb),
+ TOBN(0xe4fa51f4, 0xdd6f958e), TOBN(0x6925a77f, 0xf4445a8d),
+ TOBN(0xe6e72a50, 0xe90d8949), TOBN(0xc66648e3, 0x2b1f6390),
+ TOBN(0xb2ab1957, 0x173e460c), TOBN(0x1bbbce75, 0x30704590),
+ TOBN(0xc0a90dbd, 0xdb1c7162), TOBN(0x505e399e, 0x15cdd65d),
+ TOBN(0x68434dcb, 0x57797ab7), TOBN(0x60ad35ba, 0x6a2ca8e8),
+ TOBN(0x4bfdb1e0, 0xde3336c1), TOBN(0xbbef99eb, 0xd8b39015),
+ TOBN(0x6c3b96f3, 0x1711ebec), TOBN(0x2da40f1f, 0xce98fdc4),
+ TOBN(0xb99774d3, 0x57b4411f), TOBN(0x87c8bdf4, 0x15b65bb6),
+ TOBN(0xda3a89e3, 0xc2eef12d), TOBN(0xde95bb9b, 0x3c7471f3),
+ TOBN(0x600f225b, 0xd812c594), TOBN(0x54907c5d, 0x2b75a56b),
+ TOBN(0xa93cc5f0, 0x8db60e35), TOBN(0x743e3cd6, 0xfa833319),
+ TOBN(0x7dad5c41, 0xf81683c9), TOBN(0x70c1e7d9, 0x9c34107e),
+ TOBN(0x0edc4a39, 0xa6be0907), TOBN(0x36d47035, 0x86d0b7d3),
+ TOBN(0x8c76da03, 0x272bfa60), TOBN(0x0b4a07ea, 0x0f08a414),
+ TOBN(0x699e4d29, 0x45c1dd53), TOBN(0xcadc5898, 0x231debb5),
+ TOBN(0xdf49fcc7, 0xa77f00e0), TOBN(0x93057bbf, 0xa73e5a0e),
+ TOBN(0x2f8b7ecd, 0x027a4cd1), TOBN(0x114734b3, 0xc614011a),
+ TOBN(0xe7a01db7, 0x67677c68), TOBN(0x89d9be5e, 0x7e273f4f),
+ TOBN(0xd225cb2e, 0x089808ef), TOBN(0xf1f7a27d, 0xd59e4107),
+ TOBN(0x53afc761, 0x8211b9c9), TOBN(0x0361bc67, 0xe6819159),
+ TOBN(0x2a865d0b, 0x7f071426), TOBN(0x6a3c1810, 0xe7072567),
+ TOBN(0x3e3bca1e, 0x0d6bcabd), TOBN(0xa1b02bc1, 0x408591bc),
+ TOBN(0xe0deee59, 0x31fba239), TOBN(0xf47424d3, 0x98bd91d1),
+ TOBN(0x0f8886f4, 0x071a3c1d), TOBN(0x3f7d41e8, 0xa819233b),
+ TOBN(0x708623c2, 0xcf6eb998), TOBN(0x86bb49af, 0x609a287f),
+ TOBN(0x942bb249, 0x63c90762), TOBN(0x0ef6eea5, 0x55a9654b),
+ TOBN(0x5f6d2d72, 0x36f5defe), TOBN(0xfa9922dc, 0x56f99176),
+ TOBN(0x6c8c5ece, 0xf78ce0c7), TOBN(0x7b44589d, 0xbe09b55e),
+ TOBN(0xe11b3bca, 0x9ea83770), TOBN(0xd7fa2c7f, 0x2ab71547),
+ TOBN(0x2a3dd6fa, 0x2a1ddcc0), TOBN(0x09acb430, 0x5a7b7707),
+ TOBN(0x4add4a2e, 0x649d4e57), TOBN(0xcd53a2b0, 0x1917526e),
+ TOBN(0xc5262330, 0x20b44ac4), TOBN(0x4028746a, 0xbaa2c31d),
+ TOBN(0x51318390, 0x64291d4c), TOBN(0xbf48f151, 0xee5ad909),
+ TOBN(0xcce57f59, 0x7b185681), TOBN(0x7c3ac1b0, 0x4854d442),
+ TOBN(0x65587dc3, 0xc093c171), TOBN(0xae7acb24, 0x24f42b65),
+ TOBN(0x5a338adb, 0x955996cb), TOBN(0xc8e65675, 0x6051f91b),
+ TOBN(0x66711fba, 0x28b8d0b1), TOBN(0x15d74137, 0xb6c10a90),
+ TOBN(0x70cdd7eb, 0x3a232a80), TOBN(0xc9e2f07f, 0x6191ed24),
+ TOBN(0xa80d1db6, 0xf79588c0), TOBN(0xfa52fc69, 0xb55768cc),
+ TOBN(0x0b4df1ae, 0x7f54438a), TOBN(0x0cadd1a7, 0xf9b46a4f),
+ TOBN(0xb40ea6b3, 0x1803dd6f), TOBN(0x488e4fa5, 0x55eaae35),
+ TOBN(0x9f047d55, 0x382e4e16), TOBN(0xc9b5b7e0, 0x2f6e0c98),
+ TOBN(0x6b1bd2d3, 0x95762649), TOBN(0xa9604ee7, 0xc7aea3f6),
+ TOBN(0x3646ff27, 0x6dc6f896), TOBN(0x9bf0e7f5, 0x2860bad1),
+ TOBN(0x2d92c821, 0x7cb44b92), TOBN(0xa2f5ce63, 0xaea9c182),
+ TOBN(0xd0a2afb1, 0x9154a5fd), TOBN(0x482e474c, 0x95801da6),
+ TOBN(0xc19972d0, 0xb611c24b), TOBN(0x1d468e65, 0x60a8f351),
+ TOBN(0xeb758069, 0x7bcf6421), TOBN(0xec9dd0ee, 0x88fbc491),
+ TOBN(0x5b59d2bf, 0x956c2e32), TOBN(0x73dc6864, 0xdcddf94e),
+ TOBN(0xfd5e2321, 0xbcee7665), TOBN(0xa7b4f8ef, 0x5e9a06c4),
+ TOBN(0xfba918dd, 0x7280f855), TOBN(0xbbaac260, 0x8baec688),
+ TOBN(0xa3b3f00f, 0x33400f42), TOBN(0x3d2dba29, 0x66f2e6e4),
+ TOBN(0xb6f71a94, 0x98509375), TOBN(0x8f33031f, 0xcea423cc),
+ TOBN(0x009b8dd0, 0x4807e6fb), TOBN(0x5163cfe5, 0x5cdb954c),
+ TOBN(0x03cc8f17, 0xcf41c6e8), TOBN(0xf1f03c2a, 0x037b925c),
+ TOBN(0xc39c19cc, 0x66d2427c), TOBN(0x823d24ba, 0x7b6c18e4),
+ TOBN(0x32ef9013, 0x901f0b4f), TOBN(0x684360f1, 0xf8941c2e),
+ TOBN(0x0ebaff52, 0x2c28092e), TOBN(0x7891e4e3, 0x256c932f),
+ TOBN(0x51264319, 0xac445e3d), TOBN(0x553432e7, 0x8ea74381),
+ TOBN(0xe6eeaa69, 0x67e9c50a), TOBN(0x27ced284, 0x62e628c7),
+ TOBN(0x3f96d375, 0x7a4afa57), TOBN(0xde0a14c3, 0xe484c150),
+ TOBN(0x364a24eb, 0x38bd9923), TOBN(0x1df18da0, 0xe5177422),
+ TOBN(0x174e8f82, 0xd8d38a9b), TOBN(0x2e97c600, 0xe7de1391),
+ TOBN(0xc5709850, 0xa1c175dd), TOBN(0x969041a0, 0x32ae5035),
+ TOBN(0xcbfd533b, 0x76a2086b), TOBN(0xd6bba71b, 0xd7c2e8fe),
+ TOBN(0xb2d58ee6, 0x099dfb67), TOBN(0x3a8b342d, 0x064a85d9),
+ TOBN(0x3bc07649, 0x522f9be3), TOBN(0x690c075b, 0xdf1f49a8),
+ TOBN(0x80e1aee8, 0x3854ec42), TOBN(0x2a7dbf44, 0x17689dc7),
+ TOBN(0xc004fc0e, 0x3faf4078), TOBN(0xb2f02e9e, 0xdf11862c),
+ TOBN(0xf10a5e0f, 0xa0a1b7b3), TOBN(0x30aca623, 0x8936ec80),
+ TOBN(0xf83cbf05, 0x02f40d9a), TOBN(0x4681c468, 0x2c318a4d),
+ TOBN(0x98575618, 0x0e9c2674), TOBN(0xbe79d046, 0x1847092e),
+ TOBN(0xaf1e480a, 0x78bd01e0), TOBN(0x6dd359e4, 0x72a51db9),
+ TOBN(0x62ce3821, 0xe3afbab6), TOBN(0xc5cee5b6, 0x17733199),
+ TOBN(0xe08b30d4, 0x6ffd9fbb), TOBN(0x6e5bc699, 0x36c610b7),
+ TOBN(0xf343cff2, 0x9ce262cf), TOBN(0xca2e4e35, 0x68b914c1),
+ TOBN(0x011d64c0, 0x16de36c5), TOBN(0xe0b10fdd, 0x42e2b829),
+ TOBN(0x78942981, 0x6685aaf8), TOBN(0xe7511708, 0x230ede97),
+ TOBN(0x671ed8fc, 0x3b922bf8), TOBN(0xe4d8c0a0, 0x4c29b133),
+ TOBN(0x87eb1239, 0x3b6e99c4), TOBN(0xaff3974c, 0x8793beba),
+ TOBN(0x03749405, 0x2c18df9b), TOBN(0xc5c3a293, 0x91007139),
+ TOBN(0x6a77234f, 0xe37a0b95), TOBN(0x02c29a21, 0xb661c96b),
+ TOBN(0xc3aaf1d6, 0x141ecf61), TOBN(0x9195509e, 0x3bb22f53),
+ TOBN(0x29597404, 0x22d51357), TOBN(0x1b083822, 0x537bed60),
+ TOBN(0xcd7d6e35, 0xe07289f0), TOBN(0x1f94c48c, 0x6dd86eff),
+ TOBN(0xc8bb1f82, 0xeb0f9cfa), TOBN(0x9ee0b7e6, 0x1b2eb97d),
+ TOBN(0x5a52fe2e, 0x34d74e31), TOBN(0xa352c310, 0x3bf79ab6),
+ TOBN(0x97ff6c5a, 0xabfeeb8f), TOBN(0xbfbe8fef, 0xf5c97305),
+ TOBN(0xd6081ce6, 0xa7904608), TOBN(0x1f812f3a, 0xc4fca249),
+ TOBN(0x9b24bc9a, 0xb9e5e200), TOBN(0x91022c67, 0x38012ee8),
+ TOBN(0xe83d9c5d, 0x30a713a1), TOBN(0x4876e3f0, 0x84ef0f93),
+ TOBN(0xc9777029, 0xc1fbf928), TOBN(0xef7a6bb3, 0xbce7d2a4),
+ TOBN(0xb8067228, 0xdfa2a659), TOBN(0xd5cd3398, 0xd877a48f),
+ TOBN(0xbea4fd8f, 0x025d0f3f), TOBN(0xd67d2e35, 0x2eae7c2b),
+ TOBN(0x184de7d7, 0xcc5f4394), TOBN(0xb5551b5c, 0x4536e142),
+ TOBN(0x2e89b212, 0xd34aa60a), TOBN(0x14a96fea, 0xf50051d5),
+ TOBN(0x4e21ef74, 0x0d12bb0b), TOBN(0xc522f020, 0x60b9677e),
+ TOBN(0x8b12e467, 0x2df7731d), TOBN(0x39f80382, 0x7b326d31),
+ TOBN(0xdfb8630c, 0x39024a94), TOBN(0xaacb96a8, 0x97319452),
+ TOBN(0xd68a3961, 0xeda3867c), TOBN(0x0c58e2b0, 0x77c4ffca),
+ TOBN(0x3d545d63, 0x4da919fa), TOBN(0xef79b69a, 0xf15e2289),
+ TOBN(0x54bc3d3d, 0x808bab10), TOBN(0xc8ab3007, 0x45f82c37),
+ TOBN(0xc12738b6, 0x7c4a658a), TOBN(0xb3c47639, 0x40e72182),
+ TOBN(0x3b77be46, 0x8798e44f), TOBN(0xdc047df2, 0x17a7f85f),
+ TOBN(0x2439d4c5, 0x5e59d92d), TOBN(0xcedca475, 0xe8e64d8d),
+ TOBN(0xa724cd0d, 0x87ca9b16), TOBN(0x35e4fd59, 0xa5540dfe),
+ TOBN(0xf8c1ff18, 0xe4bcf6b1), TOBN(0x856d6285, 0x295018fa),
+ TOBN(0x433f665c, 0x3263c949), TOBN(0xa6a76dd6, 0xa1f21409),
+ TOBN(0x17d32334, 0xcc7b4f79), TOBN(0xa1d03122, 0x06720e4a),
+ TOBN(0xadb6661d, 0x81d9bed5), TOBN(0xf0d6fb02, 0x11db15d1),
+ TOBN(0x7fd11ad5, 0x1fb747d2), TOBN(0xab50f959, 0x3033762b),
+ TOBN(0x2a7e711b, 0xfbefaf5a), TOBN(0xc7393278, 0x3fef2bbf),
+ TOBN(0xe29fa244, 0x0df6f9be), TOBN(0x9092757b, 0x71efd215),
+ TOBN(0xee60e311, 0x4f3d6fd9), TOBN(0x338542d4, 0x0acfb78b),
+ TOBN(0x44a23f08, 0x38961a0f), TOBN(0x1426eade, 0x986987ca),
+ TOBN(0x36e6ee2e, 0x4a863cc6), TOBN(0x48059420, 0x628b8b79),
+ TOBN(0x30303ad8, 0x7396e1de), TOBN(0x5c8bdc48, 0x38c5aad1),
+ TOBN(0x3e40e11f, 0x5c8f5066), TOBN(0xabd6e768, 0x8d246bbd),
+ TOBN(0x68aa40bb, 0x23330a01), TOBN(0xd23f5ee4, 0xc34eafa0),
+ TOBN(0x3bbee315, 0x5de02c21), TOBN(0x18dd4397, 0xd1d8dd06),
+ TOBN(0x3ba1939a, 0x122d7b44), TOBN(0xe6d3b40a, 0xa33870d6),
+ TOBN(0x8e620f70, 0x1c4fe3f8), TOBN(0xf6bba1a5, 0xd3a50cbf),
+ TOBN(0x4a78bde5, 0xcfc0aee0), TOBN(0x847edc46, 0xc08c50bd),
+ TOBN(0xbaa2439c, 0xad63c9b2), TOBN(0xceb4a728, 0x10fc2acb),
+ TOBN(0xa419e40e, 0x26da033d), TOBN(0x6cc3889d, 0x03e02683),
+ TOBN(0x1cd28559, 0xfdccf725), TOBN(0x0fd7e0f1, 0x8d13d208),
+ TOBN(0x01b9733b, 0x1f0df9d4), TOBN(0x8cc2c5f3, 0xa2b5e4f3),
+ TOBN(0x43053bfa, 0x3a304fd4), TOBN(0x8e87665c, 0x0a9f1aa7),
+ TOBN(0x087f29ec, 0xd73dc965), TOBN(0x15ace455, 0x3e9023db),
+ TOBN(0x2370e309, 0x2bce28b4), TOBN(0xf9723442, 0xb6b1e84a),
+ TOBN(0xbeee662e, 0xb72d9f26), TOBN(0xb19396de, 0xf0e47109),
+ TOBN(0x85b1fa73, 0xe13289d0), TOBN(0x436cf77e, 0x54e58e32),
+ TOBN(0x0ec833b3, 0xe990ef77), TOBN(0x7373e3ed, 0x1b11fc25),
+ TOBN(0xbe0eda87, 0x0fc332ce), TOBN(0xced04970, 0x8d7ea856),
+ TOBN(0xf85ff785, 0x7e977ca0), TOBN(0xb66ee8da, 0xdfdd5d2b),
+ TOBN(0xf5e37950, 0x905af461), TOBN(0x587b9090, 0x966d487c),
+ TOBN(0x6a198a1b, 0x32ba0127), TOBN(0xa7720e07, 0x141615ac),
+ TOBN(0xa23f3499, 0x996ef2f2), TOBN(0xef5f64b4, 0x470bcb3d),
+ TOBN(0xa526a962, 0x92b8c559), TOBN(0x0c14aac0, 0x69740a0f),
+ TOBN(0x0d41a9e3, 0xa6bdc0a5), TOBN(0x97d52106, 0x9c48aef4),
+ TOBN(0xcf16bd30, 0x3e7c253b), TOBN(0xcc834b1a, 0x47fdedc1),
+ TOBN(0x7362c6e5, 0x373aab2e), TOBN(0x264ed85e, 0xc5f590ff),
+ TOBN(0x7a46d9c0, 0x66d41870), TOBN(0xa50c20b1, 0x4787ba09),
+ TOBN(0x185e7e51, 0xe3d44635), TOBN(0xb3b3e080, 0x31e2d8dc),
+ TOBN(0xbed1e558, 0xa179e9d9), TOBN(0x2daa3f79, 0x74a76781),
+ TOBN(0x4372baf2, 0x3a40864f), TOBN(0x46900c54, 0x4fe75cb5),
+ TOBN(0xb95f171e, 0xf76765d0), TOBN(0x4ad726d2, 0x95c87502),
+ TOBN(0x2ec769da, 0x4d7c99bd), TOBN(0x5e2ddd19, 0xc36cdfa8),
+ TOBN(0xc22117fc, 0xa93e6dea), TOBN(0xe8a2583b, 0x93771123),
+ TOBN(0xbe2f6089, 0xfa08a3a2), TOBN(0x4809d5ed, 0x8f0e1112),
+ TOBN(0x3b414aa3, 0xda7a095e), TOBN(0x9049acf1, 0x26f5aadd),
+ TOBN(0x78d46a4d, 0x6be8b84a), TOBN(0xd66b1963, 0xb732b9b3),
+ TOBN(0x5c2ac2a0, 0xde6e9555), TOBN(0xcf52d098, 0xb5bd8770),
+ TOBN(0x15a15fa6, 0x0fd28921), TOBN(0x56ccb81e, 0x8b27536d),
+ TOBN(0x0f0d8ab8, 0x9f4ccbb8), TOBN(0xed5f44d2, 0xdb221729),
+ TOBN(0x43141988, 0x00bed10c), TOBN(0xc94348a4, 0x1d735b8b),
+ TOBN(0x79f3e9c4, 0x29ef8479), TOBN(0x4c13a4e3, 0x614c693f),
+ TOBN(0x32c9af56, 0x8e143a14), TOBN(0xbc517799, 0xe29ac5c4),
+ TOBN(0x05e17992, 0x2774856f), TOBN(0x6e52fb05, 0x6c1bf55f),
+ TOBN(0xaeda4225, 0xe4f19e16), TOBN(0x70f4728a, 0xaf5ccb26),
+ TOBN(0x5d2118d1, 0xb2947f22), TOBN(0xc827ea16, 0x281d6fb9),
+ TOBN(0x8412328d, 0x8cf0eabd), TOBN(0x45ee9fb2, 0x03ef9dcf),
+ TOBN(0x8e700421, 0xbb937d63), TOBN(0xdf8ff2d5, 0xcc4b37a6),
+ TOBN(0xa4c0d5b2, 0x5ced7b68), TOBN(0x6537c1ef, 0xc7308f59),
+ TOBN(0x25ce6a26, 0x3b37f8e8), TOBN(0x170e9a9b, 0xdeebc6ce),
+ TOBN(0xdd037952, 0x8728d72c), TOBN(0x445b0e55, 0x850154bc),
+ TOBN(0x4b7d0e06, 0x83a7337b), TOBN(0x1e3416d4, 0xffecf249),
+ TOBN(0x24840eff, 0x66a2b71f), TOBN(0xd0d9a50a, 0xb37cc26d),
+ TOBN(0xe2198150, 0x6fe28ef7), TOBN(0x3cc5ef16, 0x23324c7f),
+ TOBN(0x220f3455, 0x769b5263), TOBN(0xe2ade2f1, 0xa10bf475),
+ TOBN(0x28cd20fa, 0x458d3671), TOBN(0x1549722c, 0x2dc4847b),
+ TOBN(0x6dd01e55, 0x591941e3), TOBN(0x0e6fbcea, 0x27128ccb),
+ TOBN(0xae1a1e6b, 0x3bef0262), TOBN(0xfa8c472c, 0x8f54e103),
+ TOBN(0x7539c0a8, 0x72c052ec), TOBN(0xd7b27369, 0x5a3490e9),
+ TOBN(0x143fe1f1, 0x71684349), TOBN(0x36b4722e, 0x32e19b97),
+ TOBN(0xdc059227, 0x90980aff), TOBN(0x175c9c88, 0x9e13d674),
+ TOBN(0xa7de5b22, 0x6e6bfdb1), TOBN(0x5ea5b7b2, 0xbedb4b46),
+ TOBN(0xd5570191, 0xd34a6e44), TOBN(0xfcf60d2e, 0xa24ff7e6),
+ TOBN(0x614a392d, 0x677819e1), TOBN(0x7be74c7e, 0xaa5a29e8),
+ TOBN(0xab50fece, 0x63c85f3f), TOBN(0xaca2e2a9, 0x46cab337),
+ TOBN(0x7f700388, 0x122a6fe3), TOBN(0xdb69f703, 0x882a04a8),
+ TOBN(0x9a77935d, 0xcf7aed57), TOBN(0xdf16207c, 0x8d91c86f),
+ TOBN(0x2fca49ab, 0x63ed9998), TOBN(0xa3125c44, 0xa77ddf96),
+ TOBN(0x05dd8a86, 0x24344072), TOBN(0xa023dda2, 0xfec3fb56),
+ TOBN(0x421b41fc, 0x0c743032), TOBN(0x4f2120c1, 0x5e438639),
+ TOBN(0xfb7cae51, 0xc83c1b07), TOBN(0xb2370caa, 0xcac2171a),
+ TOBN(0x2eb2d962, 0x6cc820fb), TOBN(0x59feee5c, 0xb85a44bf),
+ TOBN(0x94620fca, 0x5b6598f0), TOBN(0x6b922cae, 0x7e314051),
+ TOBN(0xff8745ad, 0x106bed4e), TOBN(0x546e71f5, 0xdfa1e9ab),
+ TOBN(0x935c1e48, 0x1ec29487), TOBN(0x9509216c, 0x4d936530),
+ TOBN(0xc7ca3067, 0x85c9a2db), TOBN(0xd6ae5152, 0x6be8606f),
+ TOBN(0x09dbcae6, 0xe14c651d), TOBN(0xc9536e23, 0x9bc32f96),
+ TOBN(0xa90535a9, 0x34521b03), TOBN(0xf39c526c, 0x878756ff),
+ TOBN(0x383172ec, 0x8aedf03c), TOBN(0x20a8075e, 0xefe0c034),
+ TOBN(0xf22f9c62, 0x64026422), TOBN(0x8dd10780, 0x24b9d076),
+ TOBN(0x944c742a, 0x3bef2950), TOBN(0x55b9502e, 0x88a2b00b),
+ TOBN(0xa59e14b4, 0x86a09817), TOBN(0xa39dd3ac, 0x47bb4071),
+ TOBN(0x55137f66, 0x3be0592f), TOBN(0x07fcafd4, 0xc9e63f5b),
+ TOBN(0x963652ee, 0x346eb226), TOBN(0x7dfab085, 0xec2facb7),
+ TOBN(0x273bf2b8, 0x691add26), TOBN(0x30d74540, 0xf2b46c44),
+ TOBN(0x05e8e73e, 0xf2c2d065), TOBN(0xff9b8a00, 0xd42eeac9),
+ TOBN(0x2fcbd205, 0x97209d22), TOBN(0xeb740ffa, 0xde14ea2c),
+ TOBN(0xc71ff913, 0xa8aef518), TOBN(0x7bfc74bb, 0xfff4cfa2),
+ TOBN(0x1716680c, 0xb6b36048), TOBN(0x121b2cce, 0x9ef79af1),
+ TOBN(0xbff3c836, 0xa01eb3d3), TOBN(0x50eb1c6a, 0x5f79077b),
+ TOBN(0xa48c32d6, 0xa004bbcf), TOBN(0x47a59316, 0x7d64f61d),
+ TOBN(0x6068147f, 0x93102016), TOBN(0x12c5f654, 0x94d12576),
+ TOBN(0xefb071a7, 0xc9bc6b91), TOBN(0x7c2da0c5, 0x6e23ea95),
+ TOBN(0xf4fd45b6, 0xd4a1dd5d), TOBN(0x3e7ad9b6, 0x9122b13c),
+ TOBN(0x342ca118, 0xe6f57a48), TOBN(0x1c2e94a7, 0x06f8288f),
+ TOBN(0x99e68f07, 0x5a97d231), TOBN(0x7c80de97, 0x4d838758),
+ TOBN(0xbce0f5d0, 0x05872727), TOBN(0xbe5d95c2, 0x19c4d016),
+ TOBN(0x921d5cb1, 0x9c2492ee), TOBN(0x42192dc1, 0x404d6fb3),
+ TOBN(0x4c84dcd1, 0x32f988d3), TOBN(0xde26d61f, 0xa17b8e85),
+ TOBN(0xc466dcb6, 0x137c7408), TOBN(0x9a38d7b6, 0x36a266da),
+ TOBN(0x7ef5cb06, 0x83bebf1b), TOBN(0xe5cdcbbf, 0x0fd014e3),
+ TOBN(0x30aa376d, 0xf65965a0), TOBN(0x60fe88c2, 0xebb3e95e),
+ TOBN(0x33fd0b61, 0x66ee6f20), TOBN(0x8827dcdb, 0x3f41f0a0),
+ TOBN(0xbf8a9d24, 0x0c56c690), TOBN(0x40265dad, 0xddb7641d),
+ TOBN(0x522b05bf, 0x3a6b662b), TOBN(0x466d1dfe, 0xb1478c9b),
+ TOBN(0xaa616962, 0x1484469b), TOBN(0x0db60549, 0x02df8f9f),
+ TOBN(0xc37bca02, 0x3cb8bf51), TOBN(0x5effe346, 0x21371ce8),
+ TOBN(0xe8f65264, 0xff112c32), TOBN(0x8a9c736d, 0x7b971fb2),
+ TOBN(0xa4f19470, 0x7b75080d), TOBN(0xfc3f2c5a, 0x8839c59b),
+ TOBN(0x1d6c777e, 0x5aeb49c2), TOBN(0xf3db034d, 0xda1addfe),
+ TOBN(0xd76fee5a, 0x5535affc), TOBN(0x0853ac70, 0xb92251fd),
+ TOBN(0x37e3d594, 0x8b2a29d5), TOBN(0x28f1f457, 0x4de00ddb),
+ TOBN(0x8083c1b5, 0xf42c328b), TOBN(0xd8ef1d8f, 0xe493c73b),
+ TOBN(0x96fb6260, 0x41dc61bd), TOBN(0xf74e8a9d, 0x27ee2f8a),
+ TOBN(0x7c605a80, 0x2c946a5d), TOBN(0xeed48d65, 0x3839ccfd),
+ TOBN(0x9894344f, 0x3a29467a), TOBN(0xde81e949, 0xc51eba6d),
+ TOBN(0xdaea066b, 0xa5e5c2f2), TOBN(0x3fc8a614, 0x08c8c7b3),
+ TOBN(0x7adff88f, 0x06d0de9f), TOBN(0xbbc11cf5, 0x3b75ce0a),
+ TOBN(0x9fbb7acc, 0xfbbc87d5), TOBN(0xa1458e26, 0x7badfde2)}
+ ,
+ {TOBN(0x1cb43668, 0xe039c256), TOBN(0x5f26fb8b, 0x7c17fd5d),
+ TOBN(0xeee426af, 0x79aa062b), TOBN(0x072002d0, 0xd78fbf04),
+ TOBN(0x4c9ca237, 0xe84fb7e3), TOBN(0xb401d8a1, 0x0c82133d),
+ TOBN(0xaaa52592, 0x6d7e4181), TOBN(0xe9430833, 0x73dbb152),
+ TOBN(0xf92dda31, 0xbe24319a), TOBN(0x03f7d28b, 0xe095a8e7),
+ TOBN(0xa52fe840, 0x98782185), TOBN(0x276ddafe, 0x29c24dbc),
+ TOBN(0x80cd5496, 0x1d7a64eb), TOBN(0xe4360889, 0x7f1dbe42),
+ TOBN(0x2f81a877, 0x8438d2d5), TOBN(0x7e4d52a8, 0x85169036),
+ TOBN(0x19e3d5b1, 0x1d59715d), TOBN(0xc7eaa762, 0xd788983e),
+ TOBN(0xe5a730b0, 0xabf1f248), TOBN(0xfbab8084, 0xfae3fd83),
+ TOBN(0x65e50d21, 0x53765b2f), TOBN(0xbdd4e083, 0xfa127f3d),
+ TOBN(0x9cf3c074, 0x397b1b10), TOBN(0x59f8090c, 0xb1b59fd3),
+ TOBN(0x7b15fd9d, 0x615faa8f), TOBN(0x8fa1eb40, 0x968554ed),
+ TOBN(0x7bb4447e, 0x7aa44882), TOBN(0x2bb2d0d1, 0x029fff32),
+ TOBN(0x075e2a64, 0x6caa6d2f), TOBN(0x8eb879de, 0x22e7351b),
+ TOBN(0xbcd5624e, 0x9a506c62), TOBN(0x218eaef0, 0xa87e24dc),
+ TOBN(0x37e56847, 0x44ddfa35), TOBN(0x9ccfc5c5, 0xdab3f747),
+ TOBN(0x9ac1df3f, 0x1ee96cf4), TOBN(0x0c0571a1, 0x3b480b8f),
+ TOBN(0x2fbeb3d5, 0x4b3a7b3c), TOBN(0x35c03669, 0x5dcdbb99),
+ TOBN(0x52a0f5dc, 0xb2415b3a), TOBN(0xd57759b4, 0x4413ed9a),
+ TOBN(0x1fe647d8, 0x3d30a2c5), TOBN(0x0857f77e, 0xf78a81dc),
+ TOBN(0x11d5a334, 0x131a4a9b), TOBN(0xc0a94af9, 0x29d393f5),
+ TOBN(0xbc3a5c0b, 0xdaa6ec1a), TOBN(0xba9fe493, 0x88d2d7ed),
+ TOBN(0xbb4335b4, 0xbb614797), TOBN(0x991c4d68, 0x72f83533),
+ TOBN(0x53258c28, 0xd2f01cb3), TOBN(0x93d6eaa3, 0xd75db0b1),
+ TOBN(0x419a2b0d, 0xe87d0db4), TOBN(0xa1e48f03, 0xd8fe8493),
+ TOBN(0xf747faf6, 0xc508b23a), TOBN(0xf137571a, 0x35d53549),
+ TOBN(0x9f5e58e2, 0xfcf9b838), TOBN(0xc7186cee, 0xa7fd3cf5),
+ TOBN(0x77b868ce, 0xe978a1d3), TOBN(0xe3a68b33, 0x7ab92d04),
+ TOBN(0x51029794, 0x87a5b862), TOBN(0x5f0606c3, 0x3a61d41d),
+ TOBN(0x2814be27, 0x6f9326f1), TOBN(0x2f521c14, 0xc6fe3c2e),
+ TOBN(0x17464d7d, 0xacdf7351), TOBN(0x10f5f9d3, 0x777f7e44),
+ TOBN(0xce8e616b, 0x269fb37d), TOBN(0xaaf73804, 0x7de62de5),
+ TOBN(0xaba11175, 0x4fdd4153), TOBN(0x515759ba, 0x3770b49b),
+ TOBN(0x8b09ebf8, 0xaa423a61), TOBN(0x592245a1, 0xcd41fb92),
+ TOBN(0x1cba8ec1, 0x9b4c8936), TOBN(0xa87e91e3, 0xaf36710e),
+ TOBN(0x1fd84ce4, 0x3d34a2e3), TOBN(0xee3759ce, 0xb43b5d61),
+ TOBN(0x895bc78c, 0x619186c7), TOBN(0xf19c3809, 0xcbb9725a),
+ TOBN(0xc0be21aa, 0xde744b1f), TOBN(0xa7d222b0, 0x60f8056b),
+ TOBN(0x74be6157, 0xb23efe11), TOBN(0x6fab2b4f, 0x0cd68253),
+ TOBN(0xad33ea5f, 0x4bf1d725), TOBN(0x9c1d8ee2, 0x4f6c950f),
+ TOBN(0x544ee78a, 0xa377af06), TOBN(0x54f489bb, 0x94a113e1),
+ TOBN(0x8f11d634, 0x992fb7e8), TOBN(0x0169a7aa, 0xa2a44347),
+ TOBN(0x1d49d4af, 0x95020e00), TOBN(0x95945722, 0xe08e120b),
+ TOBN(0xb6e33878, 0xa4d32282), TOBN(0xe36e029d, 0x48020ae7),
+ TOBN(0xe05847fb, 0x37a9b750), TOBN(0xf876812c, 0xb29e3819),
+ TOBN(0x84ad138e, 0xd23a17f0), TOBN(0x6d7b4480, 0xf0b3950e),
+ TOBN(0xdfa8aef4, 0x2fd67ae0), TOBN(0x8d3eea24, 0x52333af6),
+ TOBN(0x0d052075, 0xb15d5acc), TOBN(0xc6d9c79f, 0xbd815bc4),
+ TOBN(0x8dcafd88, 0xdfa36cf2), TOBN(0x908ccbe2, 0x38aa9070),
+ TOBN(0x638722c4, 0xba35afce), TOBN(0x5a3da8b0, 0xfd6abf0b),
+ TOBN(0x2dce252c, 0xc9c335c1), TOBN(0x84e7f0de, 0x65aa799b),
+ TOBN(0x2101a522, 0xb99a72cb), TOBN(0x06de6e67, 0x87618016),
+ TOBN(0x5ff8c7cd, 0xe6f3653e), TOBN(0x0a821ab5, 0xc7a6754a),
+ TOBN(0x7e3fa52b, 0x7cb0b5a2), TOBN(0xa7fb121c, 0xc9048790),
+ TOBN(0x1a725020, 0x06ce053a), TOBN(0xb490a31f, 0x04e929b0),
+ TOBN(0xe17be47d, 0x62dd61ad), TOBN(0x781a961c, 0x6be01371),
+ TOBN(0x1063bfd3, 0xdae3cbba), TOBN(0x35647406, 0x7f73c9ba),
+ TOBN(0xf50e957b, 0x2736a129), TOBN(0xa6313702, 0xed13f256),
+ TOBN(0x9436ee65, 0x3a19fcc5), TOBN(0xcf2bdb29, 0xe7a4c8b6),
+ TOBN(0xb06b1244, 0xc5f95cd8), TOBN(0xda8c8af0, 0xf4ab95f4),
+ TOBN(0x1bae59c2, 0xb9e5836d), TOBN(0x07d51e7e, 0x3acffffc),
+ TOBN(0x01e15e6a, 0xc2ccbcda), TOBN(0x3bc1923f, 0x8528c3e0),
+ TOBN(0x43324577, 0xa49fead4), TOBN(0x61a1b884, 0x2aa7a711),
+ TOBN(0xf9a86e08, 0x700230ef), TOBN(0x0af585a1, 0xbd19adf8),
+ TOBN(0x7645f361, 0xf55ad8f2), TOBN(0x6e676223, 0x46c3614c),
+ TOBN(0x23cb257c, 0x4e774d3f), TOBN(0x82a38513, 0xac102d1b),
+ TOBN(0x9bcddd88, 0x7b126aa5), TOBN(0xe716998b, 0xeefd3ee4),
+ TOBN(0x4239d571, 0xfb167583), TOBN(0xdd011c78, 0xd16c8f8a),
+ TOBN(0x271c2895, 0x69a27519), TOBN(0x9ce0a3b7, 0xd2d64b6a),
+ TOBN(0x8c977289, 0xd5ec6738), TOBN(0xa3b49f9a, 0x8840ef6b),
+ TOBN(0x808c14c9, 0x9a453419), TOBN(0x5c00295b, 0x0cf0a2d5),
+ TOBN(0x524414fb, 0x1d4bcc76), TOBN(0xb07691d2, 0x459a88f1),
+ TOBN(0x77f43263, 0xf70d110f), TOBN(0x64ada5e0, 0xb7abf9f3),
+ TOBN(0xafd0f94e, 0x5b544cf5), TOBN(0xb4a13a15, 0xfd2713fe),
+ TOBN(0xb99b7d6e, 0x250c74f4), TOBN(0x097f2f73, 0x20324e45),
+ TOBN(0x994b37d8, 0xaffa8208), TOBN(0xc3c31b0b, 0xdc29aafc),
+ TOBN(0x3da74651, 0x7a3a607f), TOBN(0xd8e1b8c1, 0xfe6955d6),
+ TOBN(0x716e1815, 0xc8418682), TOBN(0x541d487f, 0x7dc91d97),
+ TOBN(0x48a04669, 0xc6996982), TOBN(0xf39cab15, 0x83a6502e),
+ TOBN(0x025801a0, 0xe68db055), TOBN(0xf3569758, 0xba3338d5),
+ TOBN(0xb0c8c0aa, 0xee2afa84), TOBN(0x4f6985d3, 0xfb6562d1),
+ TOBN(0x351f1f15, 0x132ed17a), TOBN(0x510ed0b4, 0xc04365fe),
+ TOBN(0xa3f98138, 0xe5b1f066), TOBN(0xbc9d95d6, 0x32df03dc),
+ TOBN(0xa83ccf6e, 0x19abd09e), TOBN(0x0b4097c1, 0x4ff17edb),
+ TOBN(0x58a5c478, 0xd64a06ce), TOBN(0x2ddcc3fd, 0x544a58fd),
+ TOBN(0xd449503d, 0x9e8153b8), TOBN(0x3324fd02, 0x7774179b),
+ TOBN(0xaf5d47c8, 0xdbd9120c), TOBN(0xeb860162, 0x34fa94db),
+ TOBN(0x5817bdd1, 0x972f07f4), TOBN(0xe5579e2e, 0xd27bbceb),
+ TOBN(0x86847a1f, 0x5f11e5a6), TOBN(0xb39ed255, 0x7c3cf048),
+ TOBN(0xe1076417, 0xa2f62e55), TOBN(0x6b9ab38f, 0x1bcf82a2),
+ TOBN(0x4bb7c319, 0x7aeb29f9), TOBN(0xf6d17da3, 0x17227a46),
+ TOBN(0xab53ddbd, 0x0f968c00), TOBN(0xa03da7ec, 0x000c880b),
+ TOBN(0x7b239624, 0x6a9ad24d), TOBN(0x612c0401, 0x01ec60d0),
+ TOBN(0x70d10493, 0x109f5df1), TOBN(0xfbda4030, 0x80af7550),
+ TOBN(0x30b93f95, 0xc6b9a9b3), TOBN(0x0c74ec71, 0x007d9418),
+ TOBN(0x94175564, 0x6edb951f), TOBN(0x5f4a9d78, 0x7f22c282),
+ TOBN(0xb7870895, 0xb38d1196), TOBN(0xbc593df3, 0xa228ce7c),
+ TOBN(0xc78c5bd4, 0x6af3641a), TOBN(0x7802200b, 0x3d9b3dcc),
+ TOBN(0x0dc73f32, 0x8be33304), TOBN(0x847ed87d, 0x61ffb79a),
+ TOBN(0xf85c974e, 0x6d671192), TOBN(0x1e14100a, 0xde16f60f),
+ TOBN(0x45cb0d5a, 0x95c38797), TOBN(0x18923bba, 0x9b022da4),
+ TOBN(0xef2be899, 0xbbe7e86e), TOBN(0x4a1510ee, 0x216067bf),
+ TOBN(0xd98c8154, 0x84d5ce3e), TOBN(0x1af777f0, 0xf92a2b90),
+ TOBN(0x9fbcb400, 0x4ef65724), TOBN(0x3e04a4c9, 0x3c0ca6fe),
+ TOBN(0xfb3e2cb5, 0x55002994), TOBN(0x1f3a93c5, 0x5363ecab),
+ TOBN(0x1fe00efe, 0x3923555b), TOBN(0x744bedd9, 0x1e1751ea),
+ TOBN(0x3fb2db59, 0x6ab69357), TOBN(0x8dbd7365, 0xf5e6618b),
+ TOBN(0x99d53099, 0xdf1ea40e), TOBN(0xb3f24a0b, 0x57d61e64),
+ TOBN(0xd088a198, 0x596eb812), TOBN(0x22c8361b, 0x5762940b),
+ TOBN(0x66f01f97, 0xf9c0d95c), TOBN(0x88461172, 0x8e43cdae),
+ TOBN(0x11599a7f, 0xb72b15c3), TOBN(0x135a7536, 0x420d95cc),
+ TOBN(0x2dcdf0f7, 0x5f7ae2f6), TOBN(0x15fc6e1d, 0xd7fa6da2),
+ TOBN(0x81ca829a, 0xd1d441b6), TOBN(0x84c10cf8, 0x04a106b6),
+ TOBN(0xa9b26c95, 0xa73fbbd0), TOBN(0x7f24e0cb, 0x4d8f6ee8),
+ TOBN(0x48b45937, 0x1e25a043), TOBN(0xf8a74fca, 0x036f3dfe),
+ TOBN(0x1ed46585, 0xc9f84296), TOBN(0x7fbaa8fb, 0x3bc278b0),
+ TOBN(0xa8e96cd4, 0x6c4fcbd0), TOBN(0x940a1202, 0x73b60a5f),
+ TOBN(0x34aae120, 0x55a4aec8), TOBN(0x550e9a74, 0xdbd742f0),
+ TOBN(0x794456d7, 0x228c68ab), TOBN(0x492f8868, 0xa4e25ec6),
+ TOBN(0x682915ad, 0xb2d8f398), TOBN(0xf13b51cc, 0x5b84c953),
+ TOBN(0xcda90ab8, 0x5bb917d6), TOBN(0x4b615560, 0x4ea3dee1),
+ TOBN(0x578b4e85, 0x0a52c1c8), TOBN(0xeab1a695, 0x20b75fc4),
+ TOBN(0x60c14f3c, 0xaa0bb3c6), TOBN(0x220f448a, 0xb8216094),
+ TOBN(0x4fe7ee31, 0xb0e63d34), TOBN(0xf4600572, 0xa9e54fab),
+ TOBN(0xc0493334, 0xd5e7b5a4), TOBN(0x8589fb92, 0x06d54831),
+ TOBN(0xaa70f5cc, 0x6583553a), TOBN(0x0879094a, 0xe25649e5),
+ TOBN(0xcc904507, 0x10044652), TOBN(0xebb0696d, 0x02541c4f),
+ TOBN(0x5a171fde, 0xb9718710), TOBN(0x38f1bed8, 0xf374a9f5),
+ TOBN(0xc8c582e1, 0xba39bdc1), TOBN(0xfc457b0a, 0x908cc0ce),
+ TOBN(0x9a187fd4, 0x883841e2), TOBN(0x8ec25b39, 0x38725381),
+ TOBN(0x2553ed05, 0x96f84395), TOBN(0x095c7661, 0x6f6c6897),
+ TOBN(0x917ac85c, 0x4bdc5610), TOBN(0xb2885fe4, 0x179eb301),
+ TOBN(0x5fc65547, 0x8b78bdcc), TOBN(0x4a9fc893, 0xe59e4699),
+ TOBN(0xbb7ff0cd, 0x3ce299af), TOBN(0x195be9b3, 0xadf38b20),
+ TOBN(0x6a929c87, 0xd38ddb8f), TOBN(0x55fcc99c, 0xb21a51b9),
+ TOBN(0x2b695b4c, 0x721a4593), TOBN(0xed1e9a15, 0x768eaac2),
+ TOBN(0xfb63d71c, 0x7489f914), TOBN(0xf98ba31c, 0x78118910),
+ TOBN(0x80291373, 0x9b128eb4), TOBN(0x7801214e, 0xd448af4a),
+ TOBN(0xdbd2e22b, 0x55418dd3), TOBN(0xeffb3c0d, 0xd3998242),
+ TOBN(0xdfa6077c, 0xc7bf3827), TOBN(0xf2165bcb, 0x47f8238f),
+ TOBN(0xfe37cf68, 0x8564d554), TOBN(0xe5f825c4, 0x0a81fb98),
+ TOBN(0x43cc4f67, 0xffed4d6f), TOBN(0xbc609578, 0xb50a34b0),
+ TOBN(0x8aa8fcf9, 0x5041faf1), TOBN(0x5659f053, 0x651773b6),
+ TOBN(0xe87582c3, 0x6044d63b), TOBN(0xa6089409, 0x0cdb0ca0),
+ TOBN(0x8c993e0f, 0xbfb2bcf6), TOBN(0xfc64a719, 0x45985cfc),
+ TOBN(0x15c4da80, 0x83dbedba), TOBN(0x804ae112, 0x2be67df7),
+ TOBN(0xda4c9658, 0xa23defde), TOBN(0x12002ddd, 0x5156e0d3),
+ TOBN(0xe68eae89, 0x5dd21b96), TOBN(0x8b99f28b, 0xcf44624d),
+ TOBN(0x0ae00808, 0x1ec8897a), TOBN(0xdd0a9303, 0x6712f76e),
+ TOBN(0x96237522, 0x4e233de4), TOBN(0x192445b1, 0x2b36a8a5),
+ TOBN(0xabf9ff74, 0x023993d9), TOBN(0x21f37bf4, 0x2aad4a8f),
+ TOBN(0x340a4349, 0xf8bd2bbd), TOBN(0x1d902cd9, 0x4868195d),
+ TOBN(0x3d27bbf1, 0xe5fdb6f1), TOBN(0x7a5ab088, 0x124f9f1c),
+ TOBN(0xc466ab06, 0xf7a09e03), TOBN(0x2f8a1977, 0x31f2c123),
+ TOBN(0xda355dc7, 0x041b6657), TOBN(0xcb840d12, 0x8ece2a7c),
+ TOBN(0xb600ad9f, 0x7db32675), TOBN(0x78fea133, 0x07a06f1b),
+ TOBN(0x5d032269, 0xb31f6094), TOBN(0x07753ef5, 0x83ec37aa),
+ TOBN(0x03485aed, 0x9c0bea78), TOBN(0x41bb3989, 0xbc3f4524),
+ TOBN(0x09403761, 0x697f726d), TOBN(0x6109beb3, 0xdf394820),
+ TOBN(0x804111ea, 0x3b6d1145), TOBN(0xb6271ea9, 0xa8582654),
+ TOBN(0x619615e6, 0x24e66562), TOBN(0xa2554945, 0xd7b6ad9c),
+ TOBN(0xd9c4985e, 0x99bfe35f), TOBN(0x9770ccc0, 0x7b51cdf6),
+ TOBN(0x7c327013, 0x92881832), TOBN(0x8777d45f, 0x286b26d1),
+ TOBN(0x9bbeda22, 0xd847999d), TOBN(0x03aa33b6, 0xc3525d32),
+ TOBN(0x4b7b96d4, 0x28a959a1), TOBN(0xbb3786e5, 0x31e5d234),
+ TOBN(0xaeb5d3ce, 0x6961f247), TOBN(0x20aa85af, 0x02f93d3f),
+ TOBN(0x9cd1ad3d, 0xd7a7ae4f), TOBN(0xbf6688f0, 0x781adaa8),
+ TOBN(0xb1b40e86, 0x7469cead), TOBN(0x1904c524, 0x309fca48),
+ TOBN(0x9b7312af, 0x4b54bbc7), TOBN(0xbe24bf8f, 0x593affa2),
+ TOBN(0xbe5e0790, 0xbd98764b), TOBN(0xa0f45f17, 0xa26e299e),
+ TOBN(0x4af0d2c2, 0x6b8fe4c7), TOBN(0xef170db1, 0x8ae8a3e6),
+ TOBN(0x0e8d61a0, 0x29e0ccc1), TOBN(0xcd53e87e, 0x60ad36ca),
+ TOBN(0x328c6623, 0xc8173822), TOBN(0x7ee1767d, 0xa496be55),
+ TOBN(0x89f13259, 0x648945af), TOBN(0x9e45a5fd, 0x25c8009c),
+ TOBN(0xaf2febd9, 0x1f61ab8c), TOBN(0x43f6bc86, 0x8a275385),
+ TOBN(0x87792348, 0xf2142e79), TOBN(0x17d89259, 0xc6e6238a),
+ TOBN(0x7536d2f6, 0x4a839d9b), TOBN(0x1f428fce, 0x76a1fbdc),
+ TOBN(0x1c109601, 0x0db06dfe), TOBN(0xbfc16bc1, 0x50a3a3cc),
+ TOBN(0xf9cbd9ec, 0x9b30f41b), TOBN(0x5b5da0d6, 0x00138cce),
+ TOBN(0xec1d0a48, 0x56ef96a7), TOBN(0xb47eb848, 0x982bf842),
+ TOBN(0x66deae32, 0xec3f700d), TOBN(0x4e43c42c, 0xaa1181e0),
+ TOBN(0xa1d72a31, 0xd1a4aa2a), TOBN(0x440d4668, 0xc004f3ce),
+ TOBN(0x0d6a2d3b, 0x45fe8a7a), TOBN(0x820e52e2, 0xfb128365),
+ TOBN(0x29ac5fcf, 0x25e51b09), TOBN(0x180cd2bf, 0x2023d159),
+ TOBN(0xa9892171, 0xa1ebf90e), TOBN(0xf97c4c87, 0x7c132181),
+ TOBN(0x9f1dc724, 0xc03dbb7e), TOBN(0xae043765, 0x018cbbe4),
+ TOBN(0xfb0b2a36, 0x0767d153), TOBN(0xa8e2f4d6, 0x249cbaeb),
+ TOBN(0x172a5247, 0xd95ea168), TOBN(0x1758fada, 0x2970764a),
+ TOBN(0xac803a51, 0x1d978169), TOBN(0x299cfe2e, 0xde77e01b),
+ TOBN(0x652a1e17, 0xb0a98927), TOBN(0x2e26e1d1, 0x20014495),
+ TOBN(0x7ae0af9f, 0x7175b56a), TOBN(0xc2e22a80, 0xd64b9f95),
+ TOBN(0x4d0ff9fb, 0xd90a060a), TOBN(0x496a27db, 0xbaf38085),
+ TOBN(0x32305401, 0xda776bcf), TOBN(0xb8cdcef6, 0x725f209e),
+ TOBN(0x61ba0f37, 0x436a0bba), TOBN(0x263fa108, 0x76860049),
+ TOBN(0x92beb98e, 0xda3542cf), TOBN(0xa2d4d14a, 0xd5849538),
+ TOBN(0x989b9d68, 0x12e9a1bc), TOBN(0x61d9075c, 0x5f6e3268),
+ TOBN(0x352c6aa9, 0x99ace638), TOBN(0xde4e4a55, 0x920f43ff),
+ TOBN(0xe5e4144a, 0xd673c017), TOBN(0x667417ae, 0x6f6e05ea),
+ TOBN(0x613416ae, 0xdcd1bd56), TOBN(0x5eb36201, 0x86693711),
+ TOBN(0x2d7bc504, 0x3a1aa914), TOBN(0x175a1299, 0x76dc5975),
+ TOBN(0xe900e0f2, 0x3fc8125c), TOBN(0x569ef68c, 0x11198875),
+ TOBN(0x9012db63, 0x63a113b4), TOBN(0xe3bd3f56, 0x98835766),
+ TOBN(0xa5c94a52, 0x76412dea), TOBN(0xad9e2a09, 0xaa735e5c),
+ TOBN(0x405a984c, 0x508b65e9), TOBN(0xbde4a1d1, 0x6df1a0d1),
+ TOBN(0x1a9433a1, 0xdfba80da), TOBN(0xe9192ff9, 0x9440ad2e),
+ TOBN(0x9f649696, 0x5099fe92), TOBN(0x25ddb65c, 0x0b27a54a),
+ TOBN(0x178279dd, 0xc590da61), TOBN(0x5479a999, 0xfbde681a),
+ TOBN(0xd0e84e05, 0x013fe162), TOBN(0xbe11dc92, 0x632d471b),
+ TOBN(0xdf0b0c45, 0xfc0e089f), TOBN(0x04fb15b0, 0x4c144025),
+ TOBN(0xa61d5fc2, 0x13c99927), TOBN(0xa033e9e0, 0x3de2eb35),
+ TOBN(0xf8185d5c, 0xb8dacbb4), TOBN(0x9a88e265, 0x8644549d),
+ TOBN(0xf717af62, 0x54671ff6), TOBN(0x4bd4241b, 0x5fa58603),
+ TOBN(0x06fba40b, 0xe67773c0), TOBN(0xc1d933d2, 0x6a2847e9),
+ TOBN(0xf4f5acf3, 0x689e2c70), TOBN(0x92aab0e7, 0x46bafd31),
+ TOBN(0x798d76aa, 0x3473f6e5), TOBN(0xcc6641db, 0x93141934),
+ TOBN(0xcae27757, 0xd31e535e), TOBN(0x04cc43b6, 0x87c2ee11),
+ TOBN(0x8d1f9675, 0x2e029ffa), TOBN(0xc2150672, 0xe4cc7a2c),
+ TOBN(0x3b03c1e0, 0x8d68b013), TOBN(0xa9d6816f, 0xedf298f3),
+ TOBN(0x1bfbb529, 0xa2804464), TOBN(0x95a52fae, 0x5db22125),
+ TOBN(0x55b32160, 0x0e1cb64e), TOBN(0x004828f6, 0x7e7fc9fe),
+ TOBN(0x13394b82, 0x1bb0fb93), TOBN(0xb6293a2d, 0x35f1a920),
+ TOBN(0xde35ef21, 0xd145d2d9), TOBN(0xbe6225b3, 0xbb8fa603),
+ TOBN(0x00fc8f6b, 0x32cf252d), TOBN(0xa28e52e6, 0x117cf8c2),
+ TOBN(0x9d1dc89b, 0x4c371e6d), TOBN(0xcebe0675, 0x36ef0f28),
+ TOBN(0x5de05d09, 0xa4292f81), TOBN(0xa8303593, 0x353e3083),
+ TOBN(0xa1715b0a, 0x7e37a9bb), TOBN(0x8c56f61e, 0x2b8faec3),
+ TOBN(0x52507431, 0x33c9b102), TOBN(0x0130cefc, 0xa44431f0),
+ TOBN(0x56039fa0, 0xbd865cfb), TOBN(0x4b03e578, 0xbc5f1dd7),
+ TOBN(0x40edf2e4, 0xbabe7224), TOBN(0xc752496d, 0x3a1988f6),
+ TOBN(0xd1572d3b, 0x564beb6b), TOBN(0x0db1d110, 0x39a1c608),
+ TOBN(0x568d1934, 0x16f60126), TOBN(0x05ae9668, 0xf354af33),
+ TOBN(0x19de6d37, 0xc92544f2), TOBN(0xcc084353, 0xa35837d5),
+ TOBN(0xcbb6869c, 0x1a514ece), TOBN(0xb633e728, 0x2e1d1066),
+ TOBN(0xf15dd69f, 0x936c581c), TOBN(0x96e7b8ce, 0x7439c4f9),
+ TOBN(0x5e676f48, 0x2e448a5b), TOBN(0xb2ca7d5b, 0xfd916bbb),
+ TOBN(0xd55a2541, 0xf5024025), TOBN(0x47bc5769, 0xe4c2d937),
+ TOBN(0x7d31b92a, 0x0362189f), TOBN(0x83f3086e, 0xef7816f9),
+ TOBN(0xf9f46d94, 0xb587579a), TOBN(0xec2d22d8, 0x30e76c5f),
+ TOBN(0x27d57461, 0xb000ffcf), TOBN(0xbb7e65f9, 0x364ffc2c),
+ TOBN(0x7c7c9477, 0x6652a220), TOBN(0x61618f89, 0xd696c981),
+ TOBN(0x5021701d, 0x89effff3), TOBN(0xf2c8ff8e, 0x7c314163),
+ TOBN(0x2da413ad, 0x8efb4d3e), TOBN(0x937b5adf, 0xce176d95),
+ TOBN(0x22867d34, 0x2a67d51c), TOBN(0x262b9b10, 0x18eb3ac9),
+ TOBN(0x4e314fe4, 0xc43ff28b), TOBN(0x76476627, 0x6a664e7a),
+ TOBN(0x3e90e40b, 0xb7a565c2), TOBN(0x8588993a, 0xc1acf831),
+ TOBN(0xd7b501d6, 0x8f938829), TOBN(0x996627ee, 0x3edd7d4c),
+ TOBN(0x37d44a62, 0x90cd34c7), TOBN(0xa8327499, 0xf3833e8d),
+ TOBN(0x2e18917d, 0x4bf50353), TOBN(0x85dd726b, 0x556765fb),
+ TOBN(0x54fe65d6, 0x93d5ab66), TOBN(0x3ddbaced, 0x915c25fe),
+ TOBN(0xa799d9a4, 0x12f22e85), TOBN(0xe2a24867, 0x6d06f6bc),
+ TOBN(0xf4f1ee56, 0x43ca1637), TOBN(0xfda2828b, 0x61ece30a),
+ TOBN(0x758c1a3e, 0xa2dee7a6), TOBN(0xdcde2f3c, 0x734b2284),
+ TOBN(0xaba445d2, 0x4eaba6ad), TOBN(0x35aaf668, 0x76cee0a7),
+ TOBN(0x7e0b04a9, 0xe5aa049a), TOBN(0xe74083ad, 0x91103e84),
+ TOBN(0xbeb183ce, 0x40afecc3), TOBN(0x6b89de9f, 0xea043f7a),}
+ ,
+ {TOBN(0x0e299d23, 0xfe67ba66), TOBN(0x91450760, 0x93cf2f34),
+ TOBN(0xf45b5ea9, 0x97fcf913), TOBN(0x5be00843, 0x8bd7ddda),
+ TOBN(0x358c3e05, 0xd53ff04d), TOBN(0xbf7ccdc3, 0x5de91ef7),
+ TOBN(0xad684dbf, 0xb69ec1a0), TOBN(0x367e7cf2, 0x801fd997),
+ TOBN(0x0ca1f3b7, 0xb0dc8595), TOBN(0x27de4608, 0x9f1d9f2e),
+ TOBN(0x1af3bf39, 0xbadd82a7), TOBN(0x79356a79, 0x65862448),
+ TOBN(0xc0602345, 0xf5f9a052), TOBN(0x1a8b0f89, 0x139a42f9),
+ TOBN(0xb53eee42, 0x844d40fc), TOBN(0x93b0bfe5, 0x4e5b6368),
+ TOBN(0x5434dd02, 0xc024789c), TOBN(0x90dca9ea, 0x41b57bfc),
+ TOBN(0x8aa898e2, 0x243398df), TOBN(0xf607c834, 0x894a94bb),
+ TOBN(0xbb07be97, 0xc2c99b76), TOBN(0x6576ba67, 0x18c29302),
+ TOBN(0x3d79efcc, 0xe703a88c), TOBN(0xf259ced7, 0xb6a0d106),
+ TOBN(0x0f893a5d, 0xc8de610b), TOBN(0xe8c515fb, 0x67e223ce),
+ TOBN(0x7774bfa6, 0x4ead6dc5), TOBN(0x89d20f95, 0x925c728f),
+ TOBN(0x7a1e0966, 0x098583ce), TOBN(0xa2eedb94, 0x93f2a7d7),
+ TOBN(0x1b282097, 0x4c304d4a), TOBN(0x0842e3da, 0xc077282d),
+ TOBN(0xe4d972a3, 0x3b9e2d7b), TOBN(0x7cc60b27, 0xc48218ff),
+ TOBN(0x8fc70838, 0x84149d91), TOBN(0x5c04346f, 0x2f461ecc),
+ TOBN(0xebe9fdf2, 0x614650a9), TOBN(0x5e35b537, 0xc1f666ac),
+ TOBN(0x645613d1, 0x88babc83), TOBN(0x88cace3a, 0xc5e1c93e),
+ TOBN(0x209ca375, 0x3de92e23), TOBN(0xccb03cc8, 0x5fbbb6e3),
+ TOBN(0xccb90f03, 0xd7b1487e), TOBN(0xfa9c2a38, 0xc710941f),
+ TOBN(0x756c3823, 0x6724ceed), TOBN(0x3a902258, 0x192d0323),
+ TOBN(0xb150e519, 0xea5e038e), TOBN(0xdcba2865, 0xc7427591),
+ TOBN(0xe549237f, 0x78890732), TOBN(0xc443bef9, 0x53fcb4d9),
+ TOBN(0x9884d8a6, 0xeb3480d6), TOBN(0x8a35b6a1, 0x3048b186),
+ TOBN(0xb4e44716, 0x65e9a90a), TOBN(0x45bf380d, 0x653006c0),
+ TOBN(0x8f3f820d, 0x4fe9ae3b), TOBN(0x244a35a0, 0x979a3b71),
+ TOBN(0xa1010e9d, 0x74cd06ff), TOBN(0x9c17c7df, 0xaca3eeac),
+ TOBN(0x74c86cd3, 0x8063aa2b), TOBN(0x8595c4b3, 0x734614ff),
+ TOBN(0xa3de00ca, 0x990f62cc), TOBN(0xd9bed213, 0xca0c3be5),
+ TOBN(0x7886078a, 0xdf8ce9f5), TOBN(0xddb27ce3, 0x5cd44444),
+ TOBN(0xed374a66, 0x58926ddd), TOBN(0x138b2d49, 0x908015b8),
+ TOBN(0x886c6579, 0xde1f7ab8), TOBN(0x888b9aa0, 0xc3020b7a),
+ TOBN(0xd3ec034e, 0x3a96e355), TOBN(0xba65b0b8, 0xf30fbe9a),
+ TOBN(0x064c8e50, 0xff21367a), TOBN(0x1f508ea4, 0x0b04b46e),
+ TOBN(0x98561a49, 0x747c866c), TOBN(0xbbb1e5fe, 0x0518a062),
+ TOBN(0x20ff4e8b, 0xecdc3608), TOBN(0x7f55cded, 0x20184027),
+ TOBN(0x8d73ec95, 0xf38c85f0), TOBN(0x5b589fdf, 0x8bc3b8c3),
+ TOBN(0xbe95dd98, 0x0f12b66f), TOBN(0xf5bd1a09, 0x0e338e01),
+ TOBN(0x65163ae5, 0x5e915918), TOBN(0x6158d6d9, 0x86f8a46b),
+ TOBN(0x8466b538, 0xeeebf99c), TOBN(0xca8761f6, 0xbca477ef),
+ TOBN(0xaf3449c2, 0x9ebbc601), TOBN(0xef3b0f41, 0xe0c3ae2f),
+ TOBN(0xaa6c577d, 0x5de63752), TOBN(0xe9166601, 0x64682a51),
+ TOBN(0x5a3097be, 0xfc15aa1e), TOBN(0x40d12548, 0xb54b0745),
+ TOBN(0x5bad4706, 0x519a5f12), TOBN(0xed03f717, 0xa439dee6),
+ TOBN(0x0794bb6c, 0x4a02c499), TOBN(0xf725083d, 0xcffe71d2),
+ TOBN(0x2cad7519, 0x0f3adcaf), TOBN(0x7f68ea1c, 0x43729310),
+ TOBN(0xe747c8c7, 0xb7ffd977), TOBN(0xec104c35, 0x80761a22),
+ TOBN(0x8395ebaf, 0x5a3ffb83), TOBN(0xfb3261f4, 0xe4b63db7),
+ TOBN(0x53544960, 0xd883e544), TOBN(0x13520d70, 0x8cc2eeb8),
+ TOBN(0x08f6337b, 0xd3d65f99), TOBN(0x83997db2, 0x781cf95b),
+ TOBN(0xce6ff106, 0x0dbd2c01), TOBN(0x4f8eea6b, 0x1f9ce934),
+ TOBN(0x546f7c4b, 0x0e993921), TOBN(0x6236a324, 0x5e753fc7),
+ TOBN(0x65a41f84, 0xa16022e9), TOBN(0x0c18d878, 0x43d1dbb2),
+ TOBN(0x73c55640, 0x2d4cef9c), TOBN(0xa0428108, 0x70444c74),
+ TOBN(0x68e4f15e, 0x9afdfb3c), TOBN(0x49a56143, 0x5bdfb6df),
+ TOBN(0xa9bc1bd4, 0x5f823d97), TOBN(0xbceb5970, 0xea111c2a),
+ TOBN(0x366b455f, 0xb269bbc4), TOBN(0x7cd85e1e, 0xe9bc5d62),
+ TOBN(0xc743c41c, 0x4f18b086), TOBN(0xa4b40990, 0x95294fb9),
+ TOBN(0x9c7c581d, 0x26ee8382), TOBN(0xcf17dcc5, 0x359d638e),
+ TOBN(0xee8273ab, 0xb728ae3d), TOBN(0x1d112926, 0xf821f047),
+ TOBN(0x11498477, 0x50491a74), TOBN(0x687fa761, 0xfde0dfb9),
+ TOBN(0x2c258022, 0x7ea435ab), TOBN(0x6b8bdb94, 0x91ce7e3f),
+ TOBN(0x4c5b5dc9, 0x3bf834aa), TOBN(0x04371819, 0x4f6c7e4b),
+ TOBN(0xc284e00a, 0x3736bcad), TOBN(0x0d881118, 0x21ae8f8d),
+ TOBN(0xf9cf0f82, 0xf48c8e33), TOBN(0xa11fd075, 0xa1bf40db),
+ TOBN(0xdceab0de, 0xdc2733e5), TOBN(0xc560a8b5, 0x8e986bd7),
+ TOBN(0x48dd1fe2, 0x3929d097), TOBN(0x3885b290, 0x92f188f1),
+ TOBN(0x0f2ae613, 0xda6fcdac), TOBN(0x9054303e, 0xb662a46c),
+ TOBN(0xb6871e44, 0x0738042a), TOBN(0x98e6a977, 0xbdaf6449),
+ TOBN(0xd8bc0650, 0xd1c9df1b), TOBN(0xef3d6451, 0x36e098f9),
+ TOBN(0x03fbae82, 0xb6d72d28), TOBN(0x77ca9db1, 0xf5d84080),
+ TOBN(0x8a112cff, 0xa58efc1c), TOBN(0x518d761c, 0xc564cb4a),
+ TOBN(0x69b5740e, 0xf0d1b5ce), TOBN(0x717039cc, 0xe9eb1785),
+ TOBN(0x3fe29f90, 0x22f53382), TOBN(0x8e54ba56, 0x6bc7c95c),
+ TOBN(0x9c806d8a, 0xf7f91d0f), TOBN(0x3b61b0f1, 0xa82a5728),
+ TOBN(0x4640032d, 0x94d76754), TOBN(0x273eb5de, 0x47d834c6),
+ TOBN(0x2988abf7, 0x7b4e4d53), TOBN(0xb7ce66bf, 0xde401777),
+ TOBN(0x9fba6b32, 0x715071b3), TOBN(0x82413c24, 0xad3a1a98),
+ TOBN(0x5b7fc8c4, 0xe0e8ad93), TOBN(0xb5679aee, 0x5fab868d),
+ TOBN(0xb1f9d2fa, 0x2b3946f3), TOBN(0x458897dc, 0x5685b50a),
+ TOBN(0x1e98c930, 0x89d0caf3), TOBN(0x39564c5f, 0x78642e92),
+ TOBN(0x1b77729a, 0x0dbdaf18), TOBN(0xf9170722, 0x579e82e6),
+ TOBN(0x680c0317, 0xe4515fa5), TOBN(0xf85cff84, 0xfb0c790f),
+ TOBN(0xc7a82aab, 0x6d2e0765), TOBN(0x7446bca9, 0x35c82b32),
+ TOBN(0x5de607aa, 0x6d63184f), TOBN(0x7c1a46a8, 0x262803a6),
+ TOBN(0xd218313d, 0xaebe8035), TOBN(0x92113ffd, 0xc73c51f8),
+ TOBN(0x4b38e083, 0x12e7e46c), TOBN(0x69d0a37a, 0x56126bd5),
+ TOBN(0xfb3f324b, 0x73c07e04), TOBN(0xa0c22f67, 0x8fda7267),
+ TOBN(0x8f2c0051, 0x4d2c7d8f), TOBN(0xbc45ced3, 0xcbe2cae5),
+ TOBN(0xe1c6cf07, 0xa8f0f277), TOBN(0xbc392312, 0x1eb99a98),
+ TOBN(0x75537b7e, 0x3cc8ac85), TOBN(0x8d725f57, 0xdd02753b),
+ TOBN(0xfd05ff64, 0xb737df2f), TOBN(0x55fe8712, 0xf6d2531d),
+ TOBN(0x57ce04a9, 0x6ab6b01c), TOBN(0x69a02a89, 0x7cd93724),
+ TOBN(0x4f82ac35, 0xcf86699b), TOBN(0x8242d3ad, 0x9cb4b232),
+ TOBN(0x713d0f65, 0xd62105e5), TOBN(0xbb222bfa, 0x2d29be61),
+ TOBN(0xf2f9a79e, 0x6cfbef09), TOBN(0xfc24d8d3, 0xd5d6782f),
+ TOBN(0x5db77085, 0xd4129967), TOBN(0xdb81c3cc, 0xdc3c2a43),
+ TOBN(0x9d655fc0, 0x05d8d9a3), TOBN(0x3f5d057a, 0x54298026),
+ TOBN(0x1157f56d, 0x88c54694), TOBN(0xb26baba5, 0x9b09573e),
+ TOBN(0x2cab03b0, 0x22adffd1), TOBN(0x60a412c8, 0xdd69f383),
+ TOBN(0xed76e98b, 0x54b25039), TOBN(0xd4ee67d3, 0x687e714d),
+ TOBN(0x87739648, 0x7b00b594), TOBN(0xce419775, 0xc9ef709b),
+ TOBN(0x40f76f85, 0x1c203a40), TOBN(0x30d352d6, 0xeafd8f91),
+ TOBN(0xaf196d3d, 0x95578dd2), TOBN(0xea4bb3d7, 0x77cc3f3d),
+ TOBN(0x42a5bd03, 0xb98e782b), TOBN(0xac958c40, 0x0624920d),
+ TOBN(0xb838134c, 0xfc56fcc8), TOBN(0x86ec4ccf, 0x89572e5e),
+ TOBN(0x69c43526, 0x9be47be0), TOBN(0x323b7dd8, 0xcb28fea1),
+ TOBN(0xfa5538ba, 0x3a6c67e5), TOBN(0xef921d70, 0x1d378e46),
+ TOBN(0xf92961fc, 0x3c4b880e), TOBN(0x3f6f914e, 0x98940a67),
+ TOBN(0xa990eb0a, 0xfef0ff39), TOBN(0xa6c2920f, 0xf0eeff9c),
+ TOBN(0xca804166, 0x51b8d9a3), TOBN(0x42531bc9, 0x0ffb0db1),
+ TOBN(0x72ce4718, 0xaa82e7ce), TOBN(0x6e199913, 0xdf574741),
+ TOBN(0xd5f1b13d, 0xd5d36946), TOBN(0x8255dc65, 0xf68f0194),
+ TOBN(0xdc9df4cd, 0x8710d230), TOBN(0x3453c20f, 0x138c1988),
+ TOBN(0x9af98dc0, 0x89a6ef01), TOBN(0x4dbcc3f0, 0x9857df85),
+ TOBN(0x34805601, 0x5c1ad924), TOBN(0x40448da5, 0xd0493046),
+ TOBN(0xf629926d, 0x4ee343e2), TOBN(0x6343f1bd, 0x90e8a301),
+ TOBN(0xefc93491, 0x40815b3f), TOBN(0xf882a423, 0xde8f66fb),
+ TOBN(0x3a12d5f4, 0xe7db9f57), TOBN(0x7dfba38a, 0x3c384c27),
+ TOBN(0x7a904bfd, 0x6fc660b1), TOBN(0xeb6c5db3, 0x2773b21c),
+ TOBN(0xc350ee66, 0x1cdfe049), TOBN(0x9baac0ce, 0x44540f29),
+ TOBN(0xbc57b6ab, 0xa5ec6aad), TOBN(0x167ce8c3, 0x0a7c1baa),
+ TOBN(0xb23a03a5, 0x53fb2b56), TOBN(0x6ce141e7, 0x4e057f78),
+ TOBN(0x796525c3, 0x89e490d9), TOBN(0x0bc95725, 0xa31a7e75),
+ TOBN(0x1ec56791, 0x1220fd06), TOBN(0x716e3a3c, 0x408b0bd6),
+ TOBN(0x31cd6bf7, 0xe8ebeba9), TOBN(0xa7326ca6, 0xbee6b670),
+ TOBN(0x3d9f851c, 0xcd090c43), TOBN(0x561e8f13, 0xf12c3988),
+ TOBN(0x50490b6a, 0x904b7be4), TOBN(0x61690ce1, 0x0410737b),
+ TOBN(0x299e9a37, 0x0f009052), TOBN(0x258758f0, 0xf026092e),
+ TOBN(0x9fa255f3, 0xfdfcdc0f), TOBN(0xdbc9fb1f, 0xc0e1bcd2),
+ TOBN(0x35f9dd6e, 0x24651840), TOBN(0xdca45a84, 0xa5c59abc),
+ TOBN(0x103d396f, 0xecca4938), TOBN(0x4532da0a, 0xb97b3f29),
+ TOBN(0xc4135ea5, 0x1999a6bf), TOBN(0x3aa9505a, 0x5e6bf2ee),
+ TOBN(0xf77cef06, 0x3f5be093), TOBN(0x97d1a0f8, 0xa943152e),
+ TOBN(0x2cb0ebba, 0x2e1c21dd), TOBN(0xf41b29fc, 0x2c6797c4),
+ TOBN(0xc6e17321, 0xb300101f), TOBN(0x4422b0e9, 0xd0d79a89),
+ TOBN(0x49e4901c, 0x92f1bfc4), TOBN(0x06ab1f8f, 0xe1e10ed9),
+ TOBN(0x84d35577, 0xdb2926b8), TOBN(0xca349d39, 0x356e8ec2),
+ TOBN(0x70b63d32, 0x343bf1a9), TOBN(0x8fd3bd28, 0x37d1a6b1),
+ TOBN(0x0454879c, 0x316865b4), TOBN(0xee959ff6, 0xc458efa2),
+ TOBN(0x0461dcf8, 0x9706dc3f), TOBN(0x737db0e2, 0x164e4b2e),
+ TOBN(0x09262680, 0x2f8843c8), TOBN(0x54498bbc, 0x7745e6f6),
+ TOBN(0x359473fa, 0xa29e24af), TOBN(0xfcc3c454, 0x70aa87a1),
+ TOBN(0xfd2c4bf5, 0x00573ace), TOBN(0xb65b514e, 0x28dd1965),
+ TOBN(0xe46ae7cf, 0x2193e393), TOBN(0x60e9a4e1, 0xf5444d97),
+ TOBN(0xe7594e96, 0x00ff38ed), TOBN(0x43d84d2f, 0x0a0e0f02),
+ TOBN(0x8b6db141, 0xee398a21), TOBN(0xb88a56ae, 0xe3bcc5be),
+ TOBN(0x0a1aa52f, 0x373460ea), TOBN(0x20da1a56, 0x160bb19b),
+ TOBN(0xfb54999d, 0x65bf0384), TOBN(0x71a14d24, 0x5d5a180e),
+ TOBN(0xbc44db7b, 0x21737b04), TOBN(0xd84fcb18, 0x01dd8e92),
+ TOBN(0x80de937b, 0xfa44b479), TOBN(0x53505499, 0x5c98fd4f),
+ TOBN(0x1edb12ab, 0x28f08727), TOBN(0x4c58b582, 0xa5f3ef53),
+ TOBN(0xbfb236d8, 0x8327f246), TOBN(0xc3a3bfaa, 0x4d7df320),
+ TOBN(0xecd96c59, 0xb96024f2), TOBN(0xfc293a53, 0x7f4e0433),
+ TOBN(0x5341352b, 0x5acf6e10), TOBN(0xc50343fd, 0xafe652c3),
+ TOBN(0x4af3792d, 0x18577a7f), TOBN(0xe1a4c617, 0xaf16823d),
+ TOBN(0x9b26d0cd, 0x33425d0a), TOBN(0x306399ed, 0x9b7bc47f),
+ TOBN(0x2a792f33, 0x706bb20b), TOBN(0x31219614, 0x98111055),
+ TOBN(0x864ec064, 0x87f5d28b), TOBN(0x11392d91, 0x962277fd),
+ TOBN(0xb5aa7942, 0xbb6aed5f), TOBN(0x080094dc, 0x47e799d9),
+ TOBN(0x4afa588c, 0x208ba19b), TOBN(0xd3e7570f, 0x8512f284),
+ TOBN(0xcbae64e6, 0x02f5799a), TOBN(0xdeebe7ef, 0x514b9492),
+ TOBN(0x30300f98, 0xe5c298ff), TOBN(0x17f561be, 0x3678361f),
+ TOBN(0xf52ff312, 0x98cb9a16), TOBN(0x6233c3bc, 0x5562d490),
+ TOBN(0x7bfa15a1, 0x92e3a2cb), TOBN(0x961bcfd1, 0xe6365119),
+ TOBN(0x3bdd29bf, 0x2c8c53b1), TOBN(0x739704df, 0x822844ba),
+ TOBN(0x7dacfb58, 0x7e7b754b), TOBN(0x23360791, 0xa806c9b9),
+ TOBN(0xe7eb88c9, 0x23504452), TOBN(0x2983e996, 0x852c1783),
+ TOBN(0xdd4ae529, 0x958d881d), TOBN(0x026bae03, 0x262c7b3c),
+ TOBN(0x3a6f9193, 0x960b52d1), TOBN(0xd0980f90, 0x92696cfb),
+ TOBN(0x4c1f428c, 0xd5f30851), TOBN(0x94dfed27, 0x2a4f6630),
+ TOBN(0x4df53772, 0xfc5d48a4), TOBN(0xdd2d5a2f, 0x933260ce),
+ TOBN(0x574115bd, 0xd44cc7a5), TOBN(0x4ba6b20d, 0xbd12533a),
+ TOBN(0x30e93cb8, 0x243057c9), TOBN(0x794c486a, 0x14de320e),
+ TOBN(0xe925d4ce, 0xf21496e4), TOBN(0xf951d198, 0xec696331),
+ TOBN(0x9810e2de, 0x3e8d812f), TOBN(0xd0a47259, 0x389294ab),
+ TOBN(0x513ba2b5, 0x0e3bab66), TOBN(0x462caff5, 0xabad306f),
+ TOBN(0xe2dc6d59, 0xaf04c49e), TOBN(0x1aeb8750, 0xe0b84b0b),
+ TOBN(0xc034f12f, 0x2f7d0ca2), TOBN(0x6d2e8128, 0xe06acf2f),
+ TOBN(0x801f4f83, 0x21facc2f), TOBN(0xa1170c03, 0xf40ef607),
+ TOBN(0xfe0a1d4f, 0x7805a99c), TOBN(0xbde56a36, 0xcc26aba5),
+ TOBN(0x5b1629d0, 0x35531f40), TOBN(0xac212c2b, 0x9afa6108),
+ TOBN(0x30a06bf3, 0x15697be5), TOBN(0x6f0545dc, 0x2c63c7c1),
+ TOBN(0x5d8cb842, 0x7ccdadaf), TOBN(0xd52e379b, 0xac7015bb),
+ TOBN(0xc4f56147, 0xf462c23e), TOBN(0xd44a4298, 0x46bc24b0),
+ TOBN(0xbc73d23a, 0xe2856d4f), TOBN(0x61cedd8c, 0x0832bcdf),
+ TOBN(0x60953556, 0x99f241d7), TOBN(0xee4adbd7, 0x001a349d),
+ TOBN(0x0b35bf6a, 0xaa89e491), TOBN(0x7f0076f4, 0x136f7546),
+ TOBN(0xd19a18ba, 0x9264da3d), TOBN(0x6eb2d2cd, 0x62a7a28b),
+ TOBN(0xcdba941f, 0x8761c971), TOBN(0x1550518b, 0xa3be4a5d),
+ TOBN(0xd0e8e2f0, 0x57d0b70c), TOBN(0xeea8612e, 0xcd133ba3),
+ TOBN(0x814670f0, 0x44416aec), TOBN(0x424db6c3, 0x30775061),
+ TOBN(0xd96039d1, 0x16213fd1), TOBN(0xc61e7fa5, 0x18a3478f),
+ TOBN(0xa805bdcc, 0xcb0c5021), TOBN(0xbdd6f3a8, 0x0cc616dd),
+ TOBN(0x06009667, 0x5d97f7e2), TOBN(0x31db0fc1, 0xaf0bf4b6),
+ TOBN(0x23680ed4, 0x5491627a), TOBN(0xb99a3c66, 0x7d741fb1),
+ TOBN(0xe9bb5f55, 0x36b1ff92), TOBN(0x29738577, 0x512b388d),
+ TOBN(0xdb8a2ce7, 0x50fcf263), TOBN(0x385346d4, 0x6c4f7b47),
+ TOBN(0xbe86c5ef, 0x31631f9e), TOBN(0xbf91da21, 0x03a57a29),
+ TOBN(0xc3b1f796, 0x7b23f821), TOBN(0x0f7d00d2, 0x770db354),
+ TOBN(0x8ffc6c3b, 0xd8fe79da), TOBN(0xcc5e8c40, 0xd525c996),
+ TOBN(0x4640991d, 0xcfff632a), TOBN(0x64d97e8c, 0x67112528),
+ TOBN(0xc232d973, 0x02f1cd1e), TOBN(0xce87eacb, 0x1dd212a4),
+ TOBN(0x6e4c8c73, 0xe69802f7), TOBN(0x12ef0290, 0x1fffddbd),
+ TOBN(0x941ec74e, 0x1bcea6e2), TOBN(0xd0b54024, 0x3cb92cbb),
+ TOBN(0x809fb9d4, 0x7e8f9d05), TOBN(0x3bf16159, 0xf2992aae),
+ TOBN(0xad40f279, 0xf8a7a838), TOBN(0x11aea631, 0x05615660),
+ TOBN(0xbf52e6f1, 0xa01f6fa1), TOBN(0xef046995, 0x3dc2aec9),
+ TOBN(0x785dbec9, 0xd8080711), TOBN(0xe1aec60a, 0x9fdedf76),
+ TOBN(0xece797b5, 0xfa21c126), TOBN(0xc66e898f, 0x05e52732),
+ TOBN(0x39bb69c4, 0x08811fdb), TOBN(0x8bfe1ef8, 0x2fc7f082),
+ TOBN(0xc8e7a393, 0x174f4138), TOBN(0xfba8ad1d, 0xd58d1f98),
+ TOBN(0xbc21d0ce, 0xbfd2fd5b), TOBN(0x0b839a82, 0x6ee60d61),
+ TOBN(0xaacf7658, 0xafd22253), TOBN(0xb526bed8, 0xaae396b3),
+ TOBN(0xccc1bbc2, 0x38564464), TOBN(0x9e3ff947, 0x8c45bc73),
+ TOBN(0xcde9bca3, 0x58188a78), TOBN(0x138b8ee0, 0xd73bf8f7),
+ TOBN(0x5c7e234c, 0x4123c489), TOBN(0x66e69368, 0xfa643297),
+ TOBN(0x0629eeee, 0x39a15fa3), TOBN(0x95fab881, 0xa9e2a927),
+ TOBN(0xb2497007, 0xeafbb1e1), TOBN(0xd75c9ce6, 0xe75b7a93),
+ TOBN(0x3558352d, 0xefb68d78), TOBN(0xa2f26699, 0x223f6396),
+ TOBN(0xeb911ecf, 0xe469b17a), TOBN(0x62545779, 0xe72d3ec2),
+ TOBN(0x8ea47de7, 0x82cb113f), TOBN(0xebe4b086, 0x4e1fa98d),
+ TOBN(0xec2d5ed7, 0x8cdfedb1), TOBN(0xa535c077, 0xfe211a74),
+ TOBN(0x9678109b, 0x11d244c5), TOBN(0xf17c8bfb, 0xbe299a76),
+ TOBN(0xb651412e, 0xfb11fbc4), TOBN(0xea0b5482, 0x94ab3f65),
+ TOBN(0xd8dffd95, 0x0cf78243), TOBN(0x2e719e57, 0xce0361d4),
+ TOBN(0x9007f085, 0x304ddc5b), TOBN(0x095e8c6d, 0x4daba2ea),
+ TOBN(0x5a33cdb4, 0x3f9d28a9), TOBN(0x85b95cd8, 0xe2283003),
+ TOBN(0xbcd6c819, 0xb9744733), TOBN(0x29c5f538, 0xfc7f5783),
+ TOBN(0x6c49b2fa, 0xd59038e4), TOBN(0x68349cc1, 0x3bbe1018),
+ TOBN(0xcc490c1d, 0x21830ee5), TOBN(0x36f9c4ee, 0xe9bfa297),
+ TOBN(0x58fd7294, 0x48de1a94), TOBN(0xaadb13a8, 0x4e8f2cdc),
+ TOBN(0x515eaaa0, 0x81313dba), TOBN(0xc76bb468, 0xc2152dd8),
+ TOBN(0x357f8d75, 0xa653dbf8), TOBN(0xe4d8c4d1, 0xb14ac143),
+ TOBN(0xbdb8e675, 0xb055cb40), TOBN(0x898f8e7b, 0x977b5167),
+ TOBN(0xecc65651, 0xb82fb863), TOBN(0x56544814, 0x6d88f01f),
+ TOBN(0xb0928e95, 0x263a75a9), TOBN(0xcfb6836f, 0x1a22fcda),
+ TOBN(0x651d14db, 0x3f3bd37c), TOBN(0x1d3837fb, 0xb6ad4664),
+ TOBN(0x7c5fb538, 0xff4f94ab), TOBN(0x7243c712, 0x6d7fb8f2),
+ TOBN(0xef13d60c, 0xa85c5287), TOBN(0x18cfb7c7, 0x4bb8dd1b),
+ TOBN(0x82f9bfe6, 0x72908219), TOBN(0x35c4592b, 0x9d5144ab),
+ TOBN(0x52734f37, 0x9cf4b42f), TOBN(0x6bac55e7, 0x8c60ddc4),
+ TOBN(0xb5cd811e, 0x94dea0f6), TOBN(0x259ecae4, 0xe18cc1a3),
+ TOBN(0x6a0e836e, 0x15e660f8), TOBN(0x6c639ea6, 0x0e02bff2),
+ TOBN(0x8721b8cb, 0x7e1026fd), TOBN(0x9e73b50b, 0x63261942),
+ TOBN(0xb8c70974, 0x77f01da3), TOBN(0x1839e6a6, 0x8268f57f),
+ TOBN(0x571b9415, 0x5150b805), TOBN(0x1892389e, 0xf92c7097),
+ TOBN(0x8d69c18e, 0x4a084b95), TOBN(0x7014c512, 0xbe5b495c),
+ TOBN(0x4780db36, 0x1b07523c), TOBN(0x2f6219ce, 0x2c1c64fa),
+ TOBN(0xc38b81b0, 0x602c105a), TOBN(0xab4f4f20, 0x5dc8e360),
+ TOBN(0x20d3c982, 0xcf7d62d2), TOBN(0x1f36e29d, 0x23ba8150),
+ TOBN(0x48ae0bf0, 0x92763f9e), TOBN(0x7a527e6b, 0x1d3a7007),
+ TOBN(0xb4a89097, 0x581a85e3), TOBN(0x1f1a520f, 0xdc158be5),
+ TOBN(0xf98db37d, 0x167d726e), TOBN(0x8802786e, 0x1113e862)}
+ ,
+ {TOBN(0xefb2149e, 0x36f09ab0), TOBN(0x03f163ca, 0x4a10bb5b),
+ TOBN(0xd0297045, 0x06e20998), TOBN(0x56f0af00, 0x1b5a3bab),
+ TOBN(0x7af4cfec, 0x70880e0d), TOBN(0x7332a66f, 0xbe3d913f),
+ TOBN(0x32e6c84a, 0x7eceb4bd), TOBN(0xedc4a79a, 0x9c228f55),
+ TOBN(0xc37c7dd0, 0xc55c4496), TOBN(0xa6a96357, 0x25bbabd2),
+ TOBN(0x5b7e63f2, 0xadd7f363), TOBN(0x9dce3782, 0x2e73f1df),
+ TOBN(0xe1e5a16a, 0xb2b91f71), TOBN(0xe4489823, 0x5ba0163c),
+ TOBN(0xf2759c32, 0xf6e515ad), TOBN(0xa5e2f1f8, 0x8615eecf),
+ TOBN(0x74519be7, 0xabded551), TOBN(0x03d358b8, 0xc8b74410),
+ TOBN(0x4d00b10b, 0x0e10d9a9), TOBN(0x6392b0b1, 0x28da52b7),
+ TOBN(0x6744a298, 0x0b75c904), TOBN(0xc305b0ae, 0xa8f7f96c),
+ TOBN(0x042e421d, 0x182cf932), TOBN(0xf6fc5d50, 0x9e4636ca),
+ TOBN(0x795847c9, 0xd64cc78c), TOBN(0x6c50621b, 0x9b6cb27b),
+ TOBN(0x07099bf8, 0xdf8022ab), TOBN(0x48f862eb, 0xc04eda1d),
+ TOBN(0xd12732ed, 0xe1603c16), TOBN(0x19a80e0f, 0x5c9a9450),
+ TOBN(0xe2257f54, 0xb429b4fc), TOBN(0x66d3b2c6, 0x45460515),
+ TOBN(0x6ca4f87e, 0x822e37be), TOBN(0x73f237b4, 0x253bda4e),
+ TOBN(0xf747f3a2, 0x41190aeb), TOBN(0xf06fa36f, 0x804cf284),
+ TOBN(0x0a6bbb6e, 0xfc621c12), TOBN(0x5d624b64, 0x40b80ec6),
+ TOBN(0x4b072425, 0x7ba556f3), TOBN(0x7fa0c354, 0x3e2d20a8),
+ TOBN(0xe921fa31, 0xe3229d41), TOBN(0xa929c652, 0x94531bd4),
+ TOBN(0x84156027, 0xa6d38209), TOBN(0xf3d69f73, 0x6bdb97bd),
+ TOBN(0x8906d19a, 0x16833631), TOBN(0x68a34c2e, 0x03d51be3),
+ TOBN(0xcb59583b, 0x0e511cd8), TOBN(0x99ce6bfd, 0xfdc132a8),
+ TOBN(0x3facdaaa, 0xffcdb463), TOBN(0x658bbc1a, 0x34a38b08),
+ TOBN(0x12a801f8, 0xf1a9078d), TOBN(0x1567bcf9, 0x6ab855de),
+ TOBN(0xe08498e0, 0x3572359b), TOBN(0xcf0353e5, 0x8659e68b),
+ TOBN(0xbb86e9c8, 0x7d23807c), TOBN(0xbc08728d, 0x2198e8a2),
+ TOBN(0x8de2b7bc, 0x453cadd6), TOBN(0x203900a7, 0xbc0bc1f8),
+ TOBN(0xbcd86e47, 0xa6abd3af), TOBN(0x911cac12, 0x8502effb),
+ TOBN(0x2d550242, 0xec965469), TOBN(0x0e9f7692, 0x29e0017e),
+ TOBN(0x633f078f, 0x65979885), TOBN(0xfb87d449, 0x4cf751ef),
+ TOBN(0xe1790e4b, 0xfc25419a), TOBN(0x36467203, 0x4bff3cfd),
+ TOBN(0xc8db6386, 0x25b6e83f), TOBN(0x6cc69f23, 0x6cad6fd2),
+ TOBN(0x0219e45a, 0x6bc68bb9), TOBN(0xe43d79b6, 0x297f7334),
+ TOBN(0x7d445368, 0x465dc97c), TOBN(0x4b9eea32, 0x2a0b949a),
+ TOBN(0x1b96c6ba, 0x6102d021), TOBN(0xeaafac78, 0x2f4461ea),
+ TOBN(0xd4b85c41, 0xc49f19a8), TOBN(0x275c28e4, 0xcf538875),
+ TOBN(0x35451a9d, 0xdd2e54e0), TOBN(0x6991adb5, 0x0605618b),
+ TOBN(0x5b8b4bcd, 0x7b36cd24), TOBN(0x372a4f8c, 0x56f37216),
+ TOBN(0xc890bd73, 0xa6a5da60), TOBN(0x6f083da0, 0xdc4c9ff0),
+ TOBN(0xf4e14d94, 0xf0536e57), TOBN(0xf9ee1eda, 0xaaec8243),
+ TOBN(0x571241ec, 0x8bdcf8e7), TOBN(0xa5db8271, 0x0b041e26),
+ TOBN(0x9a0b9a99, 0xe3fff040), TOBN(0xcaaf21dd, 0x7c271202),
+ TOBN(0xb4e2b2e1, 0x4f0dd2e8), TOBN(0xe77e7c4f, 0x0a377ac7),
+ TOBN(0x69202c3f, 0x0d7a2198), TOBN(0xf759b7ff, 0x28200eb8),
+ TOBN(0xc87526ed, 0xdcfe314e), TOBN(0xeb84c524, 0x53d5cf99),
+ TOBN(0xb1b52ace, 0x515138b6), TOBN(0x5aa7ff8c, 0x23fca3f4),
+ TOBN(0xff0b13c3, 0xb9791a26), TOBN(0x960022da, 0xcdd58b16),
+ TOBN(0xdbd55c92, 0x57aad2de), TOBN(0x3baaaaa3, 0xf30fe619),
+ TOBN(0x9a4b2346, 0x0d881efd), TOBN(0x506416c0, 0x46325e2a),
+ TOBN(0x91381e76, 0x035c18d4), TOBN(0xb3bb68be, 0xf27817b0),
+ TOBN(0x15bfb8bf, 0x5116f937), TOBN(0x7c64a586, 0xc1268943),
+ TOBN(0x71e25cc3, 0x8419a2c8), TOBN(0x9fd6b0c4, 0x8335f463),
+ TOBN(0x4bf0ba3c, 0xe8ee0e0e), TOBN(0x6f6fba60, 0x298c21fa),
+ TOBN(0x57d57b39, 0xae66bee0), TOBN(0x292d5130, 0x22672544),
+ TOBN(0xf451105d, 0xbab093b3), TOBN(0x012f59b9, 0x02839986),
+ TOBN(0x8a915802, 0x3474a89c), TOBN(0x048c919c, 0x2de03e97),
+ TOBN(0xc476a2b5, 0x91071cd5), TOBN(0x791ed89a, 0x034970a5),
+ TOBN(0x89bd9042, 0xe1b7994b), TOBN(0x8eaf5179, 0xa1057ffd),
+ TOBN(0x6066e2a2, 0xd551ee10), TOBN(0x87a8f1d8, 0x727e09a6),
+ TOBN(0x00d08bab, 0x2c01148d), TOBN(0x6da8e4f1, 0x424f33fe),
+ TOBN(0x466d17f0, 0xcf9a4e71), TOBN(0xff502010, 0x3bf5cb19),
+ TOBN(0xdccf97d8, 0xd062ecc0), TOBN(0x80c0d9af, 0x81d80ac4),
+ TOBN(0xe87771d8, 0x033f2876), TOBN(0xb0186ec6, 0x7d5cc3db),
+ TOBN(0x58e8bb80, 0x3bc9bc1d), TOBN(0x4d1395cc, 0x6f6ef60e),
+ TOBN(0xa73c62d6, 0x186244a0), TOBN(0x918e5f23, 0x110a5b53),
+ TOBN(0xed4878ca, 0x741b7eab), TOBN(0x3038d71a, 0xdbe03e51),
+ TOBN(0x840204b7, 0xa93c3246), TOBN(0x21ab6069, 0xa0b9b4cd),
+ TOBN(0xf5fa6e2b, 0xb1d64218), TOBN(0x1de6ad0e, 0xf3d56191),
+ TOBN(0x570aaa88, 0xff1929c7), TOBN(0xc6df4c6b, 0x640e87b5),
+ TOBN(0xde8a74f2, 0xc65f0ccc), TOBN(0x8b972fd5, 0xe6f6cc01),
+ TOBN(0x3fff36b6, 0x0b846531), TOBN(0xba7e45e6, 0x10a5e475),
+ TOBN(0x84a1d10e, 0x4145b6c5), TOBN(0xf1f7f91a, 0x5e046d9d),
+ TOBN(0x0317a692, 0x44de90d7), TOBN(0x951a1d4a, 0xf199c15e),
+ TOBN(0x91f78046, 0xc9d73deb), TOBN(0x74c82828, 0xfab8224f),
+ TOBN(0xaa6778fc, 0xe7560b90), TOBN(0xb4073e61, 0xa7e824ce),
+ TOBN(0xff0d693c, 0xd642eba8), TOBN(0x7ce2e57a, 0x5dccef38),
+ TOBN(0x89c2c789, 0x1df1ad46), TOBN(0x83a06922, 0x098346fd),
+ TOBN(0x2d715d72, 0xda2fc177), TOBN(0x7b6dd71d, 0x85b6cf1d),
+ TOBN(0xc60a6d0a, 0x73fa9cb0), TOBN(0xedd3992e, 0x328bf5a9),
+ TOBN(0xc380ddd0, 0x832c8c82), TOBN(0xd182d410, 0xa2a0bf50),
+ TOBN(0x7d9d7438, 0xd9a528db), TOBN(0xe8b1a0e9, 0xcaf53994),
+ TOBN(0xddd6e5fe, 0x0e19987c), TOBN(0xacb8df03, 0x190b059d),
+ TOBN(0x53703a32, 0x8300129f), TOBN(0x1f637662, 0x68c43bfd),
+ TOBN(0xbcbd1913, 0x00e54051), TOBN(0x812fcc62, 0x7bf5a8c5),
+ TOBN(0x3f969d5f, 0x29fb85da), TOBN(0x72f4e00a, 0x694759e8),
+ TOBN(0x426b6e52, 0x790726b7), TOBN(0x617bbc87, 0x3bdbb209),
+ TOBN(0x511f8bb9, 0x97aee317), TOBN(0x812a4096, 0xe81536a8),
+ TOBN(0x137dfe59, 0x3ac09b9b), TOBN(0x0682238f, 0xba8c9a7a),
+ TOBN(0x7072ead6, 0xaeccb4bd), TOBN(0x6a34e9aa, 0x692ba633),
+ TOBN(0xc82eaec2, 0x6fff9d33), TOBN(0xfb753512, 0x1d4d2b62),
+ TOBN(0x1a0445ff, 0x1d7aadab), TOBN(0x65d38260, 0xd5f6a67c),
+ TOBN(0x6e62fb08, 0x91cfb26f), TOBN(0xef1e0fa5, 0x5c7d91d6),
+ TOBN(0x47e7c7ba, 0x33db72cd), TOBN(0x017cbc09, 0xfa7c74b2),
+ TOBN(0x3c931590, 0xf50a503c), TOBN(0xcac54f60, 0x616baa42),
+ TOBN(0x9b6cd380, 0xb2369f0f), TOBN(0x97d3a70d, 0x23c76151),
+ TOBN(0x5f9dd6fc, 0x9862a9c6), TOBN(0x044c4ab2, 0x12312f51),
+ TOBN(0x035ea0fd, 0x834a2ddc), TOBN(0x49e6b862, 0xcc7b826d),
+ TOBN(0xb03d6883, 0x62fce490), TOBN(0x62f2497a, 0xb37e36e9),
+ TOBN(0x04b005b6, 0xc6458293), TOBN(0x36bb5276, 0xe8d10af7),
+ TOBN(0xacf2dc13, 0x8ee617b8), TOBN(0x470d2d35, 0xb004b3d4),
+ TOBN(0x06790832, 0xfeeb1b77), TOBN(0x2bb75c39, 0x85657f9c),
+ TOBN(0xd70bd4ed, 0xc0f60004), TOBN(0xfe797ecc, 0x219b018b),
+ TOBN(0x9b5bec2a, 0x753aebcc), TOBN(0xdaf9f3dc, 0xc939eca5),
+ TOBN(0xd6bc6833, 0xd095ad09), TOBN(0x98abdd51, 0xdaa4d2fc),
+ TOBN(0xd9840a31, 0x8d168be5), TOBN(0xcf7c10e0, 0x2325a23c),
+ TOBN(0xa5c02aa0, 0x7e6ecfaf), TOBN(0x2462e7e6, 0xb5bfdf18),
+ TOBN(0xab2d8a8b, 0xa0cc3f12), TOBN(0x68dd485d, 0xbc672a29),
+ TOBN(0x72039752, 0x596f2cd3), TOBN(0x5d3eea67, 0xa0cf3d8d),
+ TOBN(0x810a1a81, 0xe6602671), TOBN(0x8f144a40, 0x14026c0c),
+ TOBN(0xbc753a6d, 0x76b50f85), TOBN(0xc4dc21e8, 0x645cd4a4),
+ TOBN(0xc5262dea, 0x521d0378), TOBN(0x802b8e0e, 0x05011c6f),
+ TOBN(0x1ba19cbb, 0x0b4c19ea), TOBN(0x21db64b5, 0xebf0aaec),
+ TOBN(0x1f394ee9, 0x70342f9d), TOBN(0x93a10aee, 0x1bc44a14),
+ TOBN(0xa7eed31b, 0x3efd0baa), TOBN(0x6e7c824e, 0x1d154e65),
+ TOBN(0xee23fa81, 0x9966e7ee), TOBN(0x64ec4aa8, 0x05b7920d),
+ TOBN(0x2d44462d, 0x2d90aad4), TOBN(0xf44dd195, 0xdf277ad5),
+ TOBN(0x8d6471f1, 0xbb46b6a1), TOBN(0x1e65d313, 0xfd885090),
+ TOBN(0x33a800f5, 0x13a977b4), TOBN(0xaca9d721, 0x0797e1ef),
+ TOBN(0x9a5a85a0, 0xfcff6a17), TOBN(0x9970a3f3, 0x1eca7cee),
+ TOBN(0xbb9f0d6b, 0xc9504be3), TOBN(0xe0c504be, 0xadd24ee2),
+ TOBN(0x7e09d956, 0x77fcc2f4), TOBN(0xef1a5227, 0x65bb5fc4),
+ TOBN(0x145d4fb1, 0x8b9286aa), TOBN(0x66fd0c5d, 0x6649028b),
+ TOBN(0x98857ceb, 0x1bf4581c), TOBN(0xe635e186, 0xaca7b166),
+ TOBN(0x278ddd22, 0x659722ac), TOBN(0xa0903c4c, 0x1db68007),
+ TOBN(0x366e4589, 0x48f21402), TOBN(0x31b49c14, 0xb96abda2),
+ TOBN(0x329c4b09, 0xe0403190), TOBN(0x97197ca3, 0xd29f43fe),
+ TOBN(0x8073dd1e, 0x274983d8), TOBN(0xda1a3bde, 0x55717c8f),
+ TOBN(0xfd3d4da2, 0x0361f9d1), TOBN(0x1332d081, 0x4c7de1ce),
+ TOBN(0x9b7ef7a3, 0xaa6d0e10), TOBN(0x17db2e73, 0xf54f1c4a),
+ TOBN(0xaf3dffae, 0x4cd35567), TOBN(0xaaa2f406, 0xe56f4e71),
+ TOBN(0x8966759e, 0x7ace3fc7), TOBN(0x9594eacf, 0x45a8d8c6),
+ TOBN(0x8de3bd8b, 0x91834e0e), TOBN(0xafe4ca53, 0x548c0421),
+ TOBN(0xfdd7e856, 0xe6ee81c6), TOBN(0x8f671beb, 0x6b891a3a),
+ TOBN(0xf7a58f2b, 0xfae63829), TOBN(0x9ab186fb, 0x9c11ac9f),
+ TOBN(0x8d6eb369, 0x10b5be76), TOBN(0x046b7739, 0xfb040bcd),
+ TOBN(0xccb4529f, 0xcb73de88), TOBN(0x1df0fefc, 0xcf26be03),
+ TOBN(0xad7757a6, 0xbcfcd027), TOBN(0xa8786c75, 0xbb3165ca),
+ TOBN(0xe9db1e34, 0x7e99a4d9), TOBN(0x99ee86df, 0xb06c504b),
+ TOBN(0x5b7c2ddd, 0xc15c9f0a), TOBN(0xdf87a734, 0x4295989e),
+ TOBN(0x59ece47c, 0x03d08fda), TOBN(0xb074d3dd, 0xad5fc702),
+ TOBN(0x20407903, 0x51a03776), TOBN(0x2bb1f77b, 0x2a608007),
+ TOBN(0x25c58f4f, 0xe1153185), TOBN(0xe6df62f6, 0x766e6447),
+ TOBN(0xefb3d1be, 0xed51275a), TOBN(0x5de47dc7, 0x2f0f483f),
+ TOBN(0x7932d98e, 0x97c2bedf), TOBN(0xd5c11927, 0x0219f8a1),
+ TOBN(0x9d751200, 0xa73a294e), TOBN(0x5f88434a, 0x9dc20172),
+ TOBN(0xd28d9fd3, 0xa26f506a), TOBN(0xa890cd31, 0x9d1dcd48),
+ TOBN(0x0aebaec1, 0x70f4d3b4), TOBN(0xfd1a1369, 0x0ffc8d00),
+ TOBN(0xb9d9c240, 0x57d57838), TOBN(0x45929d26, 0x68bac361),
+ TOBN(0x5a2cd060, 0x25b15ca6), TOBN(0x4b3c83e1, 0x6e474446),
+ TOBN(0x1aac7578, 0xee1e5134), TOBN(0xa418f5d6, 0xc91e2f41),
+ TOBN(0x6936fc8a, 0x213ed68b), TOBN(0x860ae7ed, 0x510a5224),
+ TOBN(0x63660335, 0xdef09b53), TOBN(0x641b2897, 0xcd79c98d),
+ TOBN(0x29bd38e1, 0x01110f35), TOBN(0x79c26f42, 0x648b1937),
+ TOBN(0x64dae519, 0x9d9164f4), TOBN(0xd85a2310, 0x0265c273),
+ TOBN(0x7173dd5d, 0x4b07e2b1), TOBN(0xd144c4cb, 0x8d9ea221),
+ TOBN(0xe8b04ea4, 0x1105ab14), TOBN(0x92dda542, 0xfe80d8f1),
+ TOBN(0xe9982fa8, 0xcf03dce6), TOBN(0x8b5ea965, 0x1a22cffc),
+ TOBN(0xf7f4ea7f, 0x3fad88c4), TOBN(0x62db773e, 0x6a5ba95c),
+ TOBN(0xd20f02fb, 0x93f24567), TOBN(0xfd46c69a, 0x315257ca),
+ TOBN(0x0ac74cc7, 0x8bcab987), TOBN(0x46f31c01, 0x5ceca2f5),
+ TOBN(0x40aedb59, 0x888b219e), TOBN(0xe50ecc37, 0xe1fccd02),
+ TOBN(0x1bcd9dad, 0x911f816c), TOBN(0x583cc1ec, 0x8db9b00c),
+ TOBN(0xf3cd2e66, 0xa483bf11), TOBN(0xfa08a6f5, 0xb1b2c169),
+ TOBN(0xf375e245, 0x4be9fa28), TOBN(0x99a7ffec, 0x5b6d011f),
+ TOBN(0x6a3ebddb, 0xc4ae62da), TOBN(0x6cea00ae, 0x374aef5d),
+ TOBN(0xab5fb98d, 0x9d4d05bc), TOBN(0x7cba1423, 0xd560f252),
+ TOBN(0x49b2cc21, 0x208490de), TOBN(0x1ca66ec3, 0xbcfb2879),
+ TOBN(0x7f1166b7, 0x1b6fb16f), TOBN(0xfff63e08, 0x65fe5db3),
+ TOBN(0xb8345abe, 0x8b2610be), TOBN(0xb732ed80, 0x39de3df4),
+ TOBN(0x0e24ed50, 0x211c32b4), TOBN(0xd10d8a69, 0x848ff27d),
+ TOBN(0xc1074398, 0xed4de248), TOBN(0xd7cedace, 0x10488927),
+ TOBN(0xa4aa6bf8, 0x85673e13), TOBN(0xb46bae91, 0x6daf30af),
+ TOBN(0x07088472, 0xfcef7ad8), TOBN(0x61151608, 0xd4b35e97),
+ TOBN(0xbcfe8f26, 0xdde29986), TOBN(0xeb84c4c7, 0xd5a34c79),
+ TOBN(0xc1eec55c, 0x164e1214), TOBN(0x891be86d, 0xa147bb03),
+ TOBN(0x9fab4d10, 0x0ba96835), TOBN(0xbf01e9b8, 0xa5c1ae9f),
+ TOBN(0x6b4de139, 0xb186ebc0), TOBN(0xd5c74c26, 0x85b91bca),
+ TOBN(0x5086a99c, 0xc2d93854), TOBN(0xeed62a7b, 0xa7a9dfbc),
+ TOBN(0x8778ed6f, 0x76b7618a), TOBN(0xbff750a5, 0x03b66062),
+ TOBN(0x4cb7be22, 0xb65186db), TOBN(0x369dfbf0, 0xcc3a6d13),
+ TOBN(0xc7dab26c, 0x7191a321), TOBN(0x9edac3f9, 0x40ed718e),
+ TOBN(0xbc142b36, 0xd0cfd183), TOBN(0xc8af82f6, 0x7c991693),
+ TOBN(0xb3d1e4d8, 0x97ce0b2a), TOBN(0xe6d7c87f, 0xc3a55cdf),
+ TOBN(0x35846b95, 0x68b81afe), TOBN(0x018d12af, 0xd3c239d8),
+ TOBN(0x2b2c6208, 0x01206e15), TOBN(0xe0e42453, 0xa3b882c6),
+ TOBN(0x854470a3, 0xa50162d5), TOBN(0x08157478, 0x7017a62a),
+ TOBN(0x18bd3fb4, 0x820357c7), TOBN(0x992039ae, 0x6f1458ad),
+ TOBN(0x9a1df3c5, 0x25b44aa1), TOBN(0x2d780357, 0xed3d5281),
+ TOBN(0x58cf7e4d, 0xc77ad4d4), TOBN(0xd49a7998, 0xf9df4fc4),
+ TOBN(0x4465a8b5, 0x1d71205e), TOBN(0xa0ee0ea6, 0x649254aa),
+ TOBN(0x4b5eeecf, 0xab7bd771), TOBN(0x6c873073, 0x35c262b9),
+ TOBN(0xdc5bd648, 0x3c9d61e7), TOBN(0x233d6d54, 0x321460d2),
+ TOBN(0xd20c5626, 0xfc195bcc), TOBN(0x25445958, 0x04d78b63),
+ TOBN(0xe03fcb3d, 0x17ec8ef3), TOBN(0x54b690d1, 0x46b8f781),
+ TOBN(0x82fa2c8a, 0x21230646), TOBN(0xf51aabb9, 0x084f418c),
+ TOBN(0xff4fbec1, 0x1a30ba43), TOBN(0x6a5acf73, 0x743c9df7),
+ TOBN(0x1da2b357, 0xd635b4d5), TOBN(0xc3de68dd, 0xecd5c1da),
+ TOBN(0xa689080b, 0xd61af0dd), TOBN(0xdea5938a, 0xd665bf99),
+ TOBN(0x0231d71a, 0xfe637294), TOBN(0x01968aa6, 0xa5a81cd8),
+ TOBN(0x11252d50, 0x048e63b5), TOBN(0xc446bc52, 0x6ca007e9),
+ TOBN(0xef8c50a6, 0x96d6134b), TOBN(0x9361fbf5, 0x9e09a05c),
+ TOBN(0xf17f85a6, 0xdca3291a), TOBN(0xb178d548, 0xff251a21),
+ TOBN(0x87f6374b, 0xa4df3915), TOBN(0x566ce1bf, 0x2fd5d608),
+ TOBN(0x425cba4d, 0x7de35102), TOBN(0x6b745f8f, 0x58c5d5e2),
+ TOBN(0x88402af6, 0x63122edf), TOBN(0x3190f9ed, 0x3b989a89),
+ TOBN(0x4ad3d387, 0xebba3156), TOBN(0xef385ad9, 0xc7c469a5),
+ TOBN(0xb08281de, 0x3f642c29), TOBN(0x20be0888, 0x910ffb88),
+ TOBN(0xf353dd4a, 0xd5292546), TOBN(0x3f1627de, 0x8377a262),
+ TOBN(0xa5faa013, 0xeefcd638), TOBN(0x8f3bf626, 0x74cc77c3),
+ TOBN(0x32618f65, 0xa348f55e), TOBN(0x5787c0dc, 0x9fefeb9e),
+ TOBN(0xf1673aa2, 0xd9a23e44), TOBN(0x88dfa993, 0x4e10690d),
+ TOBN(0x1ced1b36, 0x2bf91108), TOBN(0x9193ceca, 0x3af48649),
+ TOBN(0xfb34327d, 0x2d738fc5), TOBN(0x6697b037, 0x975fee6c),
+ TOBN(0x2f485da0, 0xc04079a5), TOBN(0x2cdf5735, 0x2feaa1ac),
+ TOBN(0x76944420, 0xbd55659e), TOBN(0x7973e32b, 0x4376090c),
+ TOBN(0x86bb4fe1, 0x163b591a), TOBN(0x10441aed, 0xc196f0ca),
+ TOBN(0x3b431f4a, 0x045ad915), TOBN(0x6c11b437, 0xa4afacb1),
+ TOBN(0x30b0c7db, 0x71fdbbd8), TOBN(0xb642931f, 0xeda65acd),
+ TOBN(0x4baae6e8, 0x9c92b235), TOBN(0xa73bbd0e, 0x6b3993a1),
+ TOBN(0xd06d60ec, 0x693dd031), TOBN(0x03cab91b, 0x7156881c),
+ TOBN(0xd615862f, 0x1db3574b), TOBN(0x485b0185, 0x64bb061a),
+ TOBN(0x27434988, 0xa0181e06), TOBN(0x2cd61ad4, 0xc1c0c757),
+ TOBN(0x3effed5a, 0x2ff9f403), TOBN(0x8dc98d8b, 0x62239029),
+ TOBN(0x2206021e, 0x1f17b70d), TOBN(0xafbec0ca, 0xbf510015),
+ TOBN(0x9fed7164, 0x80130dfa), TOBN(0x306dc2b5, 0x8a02dcf5),
+ TOBN(0x48f06620, 0xfeb10fc0), TOBN(0x78d1e1d5, 0x5a57cf51),
+ TOBN(0xadef8c5a, 0x192ef710), TOBN(0x88afbd4b, 0x3b7431f9),
+ TOBN(0x7e1f7407, 0x64250c9e), TOBN(0x6e31318d, 0xb58bec07),
+ TOBN(0xfd4fc4b8, 0x24f89b4e), TOBN(0x65a5dd88, 0x48c36a2a),
+ TOBN(0x4f1eccff, 0xf024baa7), TOBN(0x22a21cf2, 0xcba94650),
+ TOBN(0x95d29dee, 0x42a554f7), TOBN(0x828983a5, 0x002ec4ba),
+ TOBN(0x8112a1f7, 0x8badb73d), TOBN(0x79ea8897, 0xa27c1839),
+ TOBN(0x8969a5a7, 0xd065fd83), TOBN(0xf49af791, 0xb262a0bc),
+ TOBN(0xfcdea8b6, 0xaf2b5127), TOBN(0x10e913e1, 0x564c2dbc),
+ TOBN(0x51239d14, 0xbc21ef51), TOBN(0xe51c3ceb, 0x4ce57292),
+ TOBN(0x795ff068, 0x47bbcc3b), TOBN(0x86b46e1e, 0xbd7e11e6),
+ TOBN(0x0ea6ba23, 0x80041ef4), TOBN(0xd72fe505, 0x6262342e),
+ TOBN(0x8abc6dfd, 0x31d294d4), TOBN(0xbbe017a2, 0x1278c2c9),
+ TOBN(0xb1fcfa09, 0xb389328a), TOBN(0x322fbc62, 0xd01771b5),
+ TOBN(0x04c0d063, 0x60b045bf), TOBN(0xdb652edc, 0x10e52d01),
+ TOBN(0x50ef932c, 0x03ec6627), TOBN(0xde1b3b2d, 0xc1ee50e3),
+ TOBN(0x5ab7bdc5, 0xdc37a90d), TOBN(0xfea67213, 0x31e33a96),
+ TOBN(0x6482b5cb, 0x4f2999aa), TOBN(0x38476cc6, 0xb8cbf0dd),
+ TOBN(0x93ebfacb, 0x173405bb), TOBN(0x15cdafe7, 0xe52369ec),
+ TOBN(0xd42d5ba4, 0xd935b7db), TOBN(0x648b6004, 0x1c99a4cd),
+ TOBN(0x785101bd, 0xa3b5545b), TOBN(0x4bf2c38a, 0x9dd67faf),
+ TOBN(0xb1aadc63, 0x4442449c), TOBN(0xe0e9921a, 0x33ad4fb8),
+ TOBN(0x5c552313, 0xaa686d82), TOBN(0xdee635fa, 0x465d866c),
+ TOBN(0xbc3c224a, 0x18ee6e8a), TOBN(0xeed748a6, 0xed42e02f),
+ TOBN(0xe70f930a, 0xd474cd08), TOBN(0x774ea6ec, 0xfff24adf),
+ TOBN(0x03e2de1c, 0xf3480d4a), TOBN(0xf0d8edc7, 0xbc8acf1a),
+ TOBN(0xf23e3303, 0x68295a9c), TOBN(0xfadd5f68, 0xc546a97d),
+ TOBN(0x895597ad, 0x96f8acb1), TOBN(0xbddd49d5, 0x671bdae2),
+ TOBN(0x16fcd528, 0x21dd43f4), TOBN(0xa5a45412, 0x6619141a)}
+ ,
+ {TOBN(0x8ce9b6bf, 0xc360e25a), TOBN(0xe6425195, 0x075a1a78),
+ TOBN(0x9dc756a8, 0x481732f4), TOBN(0x83c0440f, 0x5432b57a),
+ TOBN(0xc670b3f1, 0xd720281f), TOBN(0x2205910e, 0xd135e051),
+ TOBN(0xded14b0e, 0xdb052be7), TOBN(0x697b3d27, 0xc568ea39),
+ TOBN(0x2e599b9a, 0xfb3ff9ed), TOBN(0x28c2e0ab, 0x17f6515c),
+ TOBN(0x1cbee4fd, 0x474da449), TOBN(0x071279a4, 0x4f364452),
+ TOBN(0x97abff66, 0x01fbe855), TOBN(0x3ee394e8, 0x5fda51c4),
+ TOBN(0x190385f6, 0x67597c0b), TOBN(0x6e9fccc6, 0xa27ee34b),
+ TOBN(0x0b89de93, 0x14092ebb), TOBN(0xf17256bd, 0x428e240c),
+ TOBN(0xcf89a7f3, 0x93d2f064), TOBN(0x4f57841e, 0xe1ed3b14),
+ TOBN(0x4ee14405, 0xe708d855), TOBN(0x856aae72, 0x03f1c3d0),
+ TOBN(0xc8e5424f, 0xbdd7eed5), TOBN(0x3333e4ef, 0x73ab4270),
+ TOBN(0x3bc77ade, 0xdda492f8), TOBN(0xc11a3aea, 0x78297205),
+ TOBN(0x5e89a3e7, 0x34931b4c), TOBN(0x17512e2e, 0x9f5694bb),
+ TOBN(0x5dc349f3, 0x177bf8b6), TOBN(0x232ea4ba, 0x08c7ff3e),
+ TOBN(0x9c4f9d16, 0xf511145d), TOBN(0xccf109a3, 0x33b379c3),
+ TOBN(0xe75e7a88, 0xa1f25897), TOBN(0x7ac6961f, 0xa1b5d4d8),
+ TOBN(0xe3e10773, 0x08f3ed5c), TOBN(0x208a54ec, 0x0a892dfb),
+ TOBN(0xbe826e19, 0x78660710), TOBN(0x0cf70a97, 0x237df2c8),
+ TOBN(0x418a7340, 0xed704da5), TOBN(0xa3eeb9a9, 0x08ca33fd),
+ TOBN(0x49d96233, 0x169bca96), TOBN(0x04d286d4, 0x2da6aafb),
+ TOBN(0xc09606ec, 0xa0c2fa94), TOBN(0x8869d0d5, 0x23ff0fb3),
+ TOBN(0xa99937e5, 0xd0150d65), TOBN(0xa92e2503, 0x240c14c9),
+ TOBN(0x656bf945, 0x108e2d49), TOBN(0x152a733a, 0xa2f59e2b),
+ TOBN(0xb4323d58, 0x8434a920), TOBN(0xc0af8e93, 0x622103c5),
+ TOBN(0x667518ef, 0x938dbf9a), TOBN(0xa1843073, 0x83a9cdf2),
+ TOBN(0x350a94aa, 0x5447ab80), TOBN(0xe5e5a325, 0xc75a3d61),
+ TOBN(0x74ba507f, 0x68411a9e), TOBN(0x10581fc1, 0x594f70c5),
+ TOBN(0x60e28570, 0x80eb24a9), TOBN(0x7bedfb4d, 0x488e0cfd),
+ TOBN(0x721ebbd7, 0xc259cdb8), TOBN(0x0b0da855, 0xbc6390a9),
+ TOBN(0x2b4d04db, 0xde314c70), TOBN(0xcdbf1fbc, 0x6c32e846),
+ TOBN(0x33833eab, 0xb162fc9e), TOBN(0x9939b48b, 0xb0dd3ab7),
+ TOBN(0x5aaa98a7, 0xcb0c9c8c), TOBN(0x75105f30, 0x81c4375c),
+ TOBN(0xceee5057, 0x5ef1c90f), TOBN(0xb31e065f, 0xc23a17bf),
+ TOBN(0x5364d275, 0xd4b6d45a), TOBN(0xd363f3ad, 0x62ec8996),
+ TOBN(0xb5d21239, 0x4391c65b), TOBN(0x84564765, 0xebb41b47),
+ TOBN(0x20d18ecc, 0x37107c78), TOBN(0xacff3b6b, 0x570c2a66),
+ TOBN(0x22f975d9, 0x9bd0d845), TOBN(0xef0a0c46, 0xba178fa0),
+ TOBN(0x1a419651, 0x76b6028e), TOBN(0xc49ec674, 0x248612d4),
+ TOBN(0x5b6ac4f2, 0x7338af55), TOBN(0x06145e62, 0x7bee5a36),
+ TOBN(0x33e95d07, 0xe75746b5), TOBN(0x1c1e1f6d, 0xc40c78be),
+ TOBN(0x967833ef, 0x222ff8e2), TOBN(0x4bedcf6a, 0xb49180ad),
+ TOBN(0x6b37e9c1, 0x3d7a4c8a), TOBN(0x2748887c, 0x6ddfe760),
+ TOBN(0xf7055123, 0xaa3a5bbc), TOBN(0x954ff225, 0x7bbb8e74),
+ TOBN(0xc42b8ab1, 0x97c3dfb9), TOBN(0x55a549b0, 0xcf168154),
+ TOBN(0xad6748e7, 0xc1b50692), TOBN(0x2775780f, 0x6fc5cbcb),
+ TOBN(0x4eab80b8, 0xe1c9d7c8), TOBN(0x8c69dae1, 0x3fdbcd56),
+ TOBN(0x47e6b4fb, 0x9969eace), TOBN(0x002f1085, 0xa705cb5a),
+ TOBN(0x4e23ca44, 0x6d3fea55), TOBN(0xb4ae9c86, 0xf4810568),
+ TOBN(0x47bfb91b, 0x2a62f27d), TOBN(0x60deb4c9, 0xd9bac28c),
+ TOBN(0xa892d894, 0x7de6c34c), TOBN(0x4ee68259, 0x4494587d),
+ TOBN(0x914ee14e, 0x1a3f8a5b), TOBN(0xbb113eaa, 0x28700385),
+ TOBN(0x81ca03b9, 0x2115b4c9), TOBN(0x7c163d38, 0x8908cad1),
+ TOBN(0xc912a118, 0xaa18179a), TOBN(0xe09ed750, 0x886e3081),
+ TOBN(0xa676e3fa, 0x26f516ca), TOBN(0x753cacf7, 0x8e732f91),
+ TOBN(0x51592aea, 0x833da8b4), TOBN(0xc626f42f, 0x4cbea8aa),
+ TOBN(0xef9dc899, 0xa7b56eaf), TOBN(0x00c0e52c, 0x34ef7316),
+ TOBN(0x5b1e4e24, 0xfe818a86), TOBN(0x9d31e20d, 0xc538be47),
+ TOBN(0x22eb932d, 0x3ed68974), TOBN(0xe44bbc08, 0x7c4e87c4),
+ TOBN(0x4121086e, 0x0dde9aef), TOBN(0x8e6b9cff, 0x134f4345),
+ TOBN(0x96892c1f, 0x711b0eb9), TOBN(0xb905f2c8, 0x780ab954),
+ TOBN(0xace26309, 0xa20792db), TOBN(0xec8ac9b3, 0x0684e126),
+ TOBN(0x486ad8b6, 0xb40a2447), TOBN(0x60121fc1, 0x9fe3fb24),
+ TOBN(0x5626fccf, 0x1a8e3b3f), TOBN(0x4e568622, 0x6ad1f394),
+ TOBN(0xda7aae0d, 0x196aa5a1), TOBN(0xe0df8c77, 0x1041b5fb),
+ TOBN(0x451465d9, 0x26b318b7), TOBN(0xc29b6e55, 0x7ab136e9),
+ TOBN(0x2c2ab48b, 0x71148463), TOBN(0xb5738de3, 0x64454a76),
+ TOBN(0x54ccf9a0, 0x5a03abe4), TOBN(0x377c0296, 0x0427d58e),
+ TOBN(0x73f5f0b9, 0x2bb39c1f), TOBN(0x14373f2c, 0xe608d8c5),
+ TOBN(0xdcbfd314, 0x00fbb805), TOBN(0xdf18fb20, 0x83afdcfb),
+ TOBN(0x81a57f42, 0x42b3523f), TOBN(0xe958532d, 0x87f650fb),
+ TOBN(0xaa8dc8b6, 0x8b0a7d7c), TOBN(0x1b75dfb7, 0x150166be),
+ TOBN(0x90e4f7c9, 0x2d7d1413), TOBN(0x67e2d6b5, 0x9834f597),
+ TOBN(0x4fd4f4f9, 0xa808c3e8), TOBN(0xaf8237e0, 0xd5281ec1),
+ TOBN(0x25ab5fdc, 0x84687cee), TOBN(0xc5ded6b1, 0xa5b26c09),
+ TOBN(0x8e4a5aec, 0xc8ea7650), TOBN(0x23b73e5c, 0x14cc417f),
+ TOBN(0x2bfb4318, 0x3037bf52), TOBN(0xb61e6db5, 0x78c725d7),
+ TOBN(0x8efd4060, 0xbbb3e5d7), TOBN(0x2e014701, 0xdbac488e),
+ TOBN(0xac75cf9a, 0x360aa449), TOBN(0xb70cfd05, 0x79634d08),
+ TOBN(0xa591536d, 0xfffb15ef), TOBN(0xb2c37582, 0xd07c106c),
+ TOBN(0xb4293fdc, 0xf50225f9), TOBN(0xc52e175c, 0xb0e12b03),
+ TOBN(0xf649c3ba, 0xd0a8bf64), TOBN(0x745a8fef, 0xeb8ae3c6),
+ TOBN(0x30d7e5a3, 0x58321bc3), TOBN(0xb1732be7, 0x0bc4df48),
+ TOBN(0x1f217993, 0xe9ea5058), TOBN(0xf7a71cde, 0x3e4fd745),
+ TOBN(0x86cc533e, 0x894c5bbb), TOBN(0x6915c7d9, 0x69d83082),
+ TOBN(0xa6aa2d05, 0x5815c244), TOBN(0xaeeee592, 0x49b22ce5),
+ TOBN(0x89e39d13, 0x78135486), TOBN(0x3a275c1f, 0x16b76f2f),
+ TOBN(0xdb6bcc1b, 0xe036e8f5), TOBN(0x4df69b21, 0x5e4709f5),
+ TOBN(0xa188b250, 0x2d0f39aa), TOBN(0x622118bb, 0x15a85947),
+ TOBN(0x2ebf520f, 0xfde0f4fa), TOBN(0xa40e9f29, 0x4860e539),
+ TOBN(0x7b6a51eb, 0x22b57f0f), TOBN(0x849a33b9, 0x7e80644a),
+ TOBN(0x50e5d16f, 0x1cf095fe), TOBN(0xd754b54e, 0xec55f002),
+ TOBN(0x5cfbbb22, 0x236f4a98), TOBN(0x0b0c59e9, 0x066800bb),
+ TOBN(0x4ac69a8f, 0x5a9a7774), TOBN(0x2b33f804, 0xd6bec948),
+ TOBN(0xb3729295, 0x32e6c466), TOBN(0x68956d0f, 0x4e599c73),
+ TOBN(0xa47a249f, 0x155c31cc), TOBN(0x24d80f0d, 0xe1ce284e),
+ TOBN(0xcd821dfb, 0x988baf01), TOBN(0xe6331a7d, 0xdbb16647),
+ TOBN(0x1eb8ad33, 0x094cb960), TOBN(0x593cca38, 0xc91bbca5),
+ TOBN(0x384aac8d, 0x26567456), TOBN(0x40fa0309, 0xc04b6490),
+ TOBN(0x97834cd6, 0xdab6c8f6), TOBN(0x68a7318d, 0x3f91e55f),
+ TOBN(0xa00fd04e, 0xfc4d3157), TOBN(0xb56f8ab2, 0x2bf3bdea),
+ TOBN(0x014f5648, 0x4fa57172), TOBN(0x948c5860, 0x450abdb3),
+ TOBN(0x342b5df0, 0x0ebd4f08), TOBN(0x3e5168cd, 0x0e82938e),
+ TOBN(0x7aedc1ce, 0xb0df5dd0), TOBN(0x6bbbc6d9, 0xe5732516),
+ TOBN(0xc7bfd486, 0x605daaa6), TOBN(0x46fd72b7, 0xbb9a6c9e),
+ TOBN(0xe4847fb1, 0xa124fb89), TOBN(0x75959cbd, 0xa2d8ffbc),
+ TOBN(0x42579f65, 0xc8a588ee), TOBN(0x368c92e6, 0xb80b499d),
+ TOBN(0xea4ef6cd, 0x999a5df1), TOBN(0xaa73bb7f, 0x936fe604),
+ TOBN(0xf347a70d, 0x6457d188), TOBN(0x86eda86b, 0x8b7a388b),
+ TOBN(0xb7cdff06, 0x0ccd6013), TOBN(0xbeb1b6c7, 0xd0053fb2),
+ TOBN(0x0b022387, 0x99240a9f), TOBN(0x1bbb384f, 0x776189b2),
+ TOBN(0x8695e71e, 0x9066193a), TOBN(0x2eb50097, 0x06ffac7e),
+ TOBN(0x0654a9c0, 0x4a7d2caa), TOBN(0x6f3fb3d1, 0xa5aaa290),
+ TOBN(0x835db041, 0xff476e8f), TOBN(0x540b8b0b, 0xc42295e4),
+ TOBN(0xa5c73ac9, 0x05e214f5), TOBN(0x9a74075a, 0x56a0b638),
+ TOBN(0x2e4b1090, 0xce9e680b), TOBN(0x57a5b479, 0x6b8d9afa),
+ TOBN(0x0dca48e7, 0x26bfe65c), TOBN(0x097e391c, 0x7290c307),
+ TOBN(0x683c462e, 0x6669e72e), TOBN(0xf505be1e, 0x062559ac),
+ TOBN(0x5fbe3ea1, 0xe3a3035a), TOBN(0x6431ebf6, 0x9cd50da8),
+ TOBN(0xfd169d5c, 0x1f6407f2), TOBN(0x8d838a95, 0x60fce6b8),
+ TOBN(0x2a2bfa7f, 0x650006f0), TOBN(0xdfd7dad3, 0x50c0fbb2),
+ TOBN(0x92452495, 0xccf9ad96), TOBN(0x183bf494, 0xd95635f9),
+ TOBN(0x02d5df43, 0x4a7bd989), TOBN(0x505385cc, 0xa5431095),
+ TOBN(0xdd98e67d, 0xfd43f53e), TOBN(0xd61e1a6c, 0x500c34a9),
+ TOBN(0x5a4b46c6, 0x4a8a3d62), TOBN(0x8469c4d0, 0x247743d2),
+ TOBN(0x2bb3a13d, 0x88f7e433), TOBN(0x62b23a10, 0x01be5849),
+ TOBN(0xe83596b4, 0xa63d1a4c), TOBN(0x454e7fea, 0x7d183f3e),
+ TOBN(0x643fce61, 0x17afb01c), TOBN(0x4e65e5e6, 0x1c4c3638),
+ TOBN(0x41d85ea1, 0xef74c45b), TOBN(0x2cfbfa66, 0xae328506),
+ TOBN(0x98b078f5, 0x3ada7da9), TOBN(0xd985fe37, 0xec752fbb),
+ TOBN(0xeece68fe, 0x5a0148b4), TOBN(0x6f9a55c7, 0x2d78136d),
+ TOBN(0x232dccc4, 0xd2b729ce), TOBN(0xa27e0dfd, 0x90aafbc4),
+ TOBN(0x96474452, 0x12b4603e), TOBN(0xa876c551, 0x6b706d14),
+ TOBN(0xdf145fcf, 0x69a9d412), TOBN(0xe2ab75b7, 0x2d479c34),
+ TOBN(0x12df9a76, 0x1a23ff97), TOBN(0xc6138992, 0x5d359d10),
+ TOBN(0x6e51c7ae, 0xfa835f22), TOBN(0x69a79cb1, 0xc0fcc4d9),
+ TOBN(0xf57f350d, 0x594cc7e1), TOBN(0x3079ca63, 0x3350ab79),
+ TOBN(0x226fb614, 0x9aff594a), TOBN(0x35afec02, 0x6d59a62b),
+ TOBN(0x9bee46f4, 0x06ed2c6e), TOBN(0x58da1735, 0x7d939a57),
+ TOBN(0x44c50402, 0x8fd1797e), TOBN(0xd8853e7c, 0x5ccea6ca),
+ TOBN(0x4065508d, 0xa35fcd5f), TOBN(0x8965df8c, 0x495ccaeb),
+ TOBN(0x0f2da850, 0x12e1a962), TOBN(0xee471b94, 0xc1cf1cc4),
+ TOBN(0xcef19bc8, 0x0a08fb75), TOBN(0x704958f5, 0x81de3591),
+ TOBN(0x2867f8b2, 0x3aef4f88), TOBN(0x8d749384, 0xea9f9a5f),
+ TOBN(0x1b385537, 0x8c9049f4), TOBN(0x5be948f3, 0x7b92d8b6),
+ TOBN(0xd96f725d, 0xb6e2bd6b), TOBN(0x37a222bc, 0x958c454d),
+ TOBN(0xe7c61abb, 0x8809bf61), TOBN(0x46f07fbc, 0x1346f18d),
+ TOBN(0xfb567a7a, 0xe87c0d1c), TOBN(0x84a461c8, 0x7ef3d07a),
+ TOBN(0x0a5adce6, 0xd9278d98), TOBN(0x24d94813, 0x9dfc73e1),
+ TOBN(0x4f3528b6, 0x054321c3), TOBN(0x2e03fdde, 0x692ea706),
+ TOBN(0x10e60619, 0x47b533c0), TOBN(0x1a8bc73f, 0x2ca3c055),
+ TOBN(0xae58d4b2, 0x1bb62b8f), TOBN(0xb2045a73, 0x584a24e3),
+ TOBN(0x3ab3d5af, 0xbd76e195), TOBN(0x478dd1ad, 0x6938a810),
+ TOBN(0x6ffab393, 0x6ee3d5cb), TOBN(0xdfb693db, 0x22b361e4),
+ TOBN(0xf9694496, 0x51dbf1a7), TOBN(0xcab4b4ef, 0x08a2e762),
+ TOBN(0xe8c92f25, 0xd39bba9a), TOBN(0x850e61bc, 0xf1464d96),
+ TOBN(0xb7e830e3, 0xdc09508b), TOBN(0xfaf6d2cf, 0x74317655),
+ TOBN(0x72606ceb, 0xdf690355), TOBN(0x48bb92b3, 0xd0c3ded6),
+ TOBN(0x65b75484, 0x5c7cf892), TOBN(0xf6cd7ac9, 0xd5d5f01f),
+ TOBN(0xc2c30a59, 0x96401d69), TOBN(0x91268650, 0xed921878),
+ TOBN(0x380bf913, 0xb78c558f), TOBN(0x43c0baeb, 0xc8afdaa9),
+ TOBN(0x377f61d5, 0x54f169d3), TOBN(0xf8da07e3, 0xae5ff20b),
+ TOBN(0xb676c49d, 0xa8a90ea8), TOBN(0x81c1ff2b, 0x83a29b21),
+ TOBN(0x383297ac, 0x2ad8d276), TOBN(0x3001122f, 0xba89f982),
+ TOBN(0xe1d794be, 0x6718e448), TOBN(0x246c1482, 0x7c3e6e13),
+ TOBN(0x56646ef8, 0x5d26b5ef), TOBN(0x80f5091e, 0x88069cdd),
+ TOBN(0xc5992e2f, 0x724bdd38), TOBN(0x02e915b4, 0x8471e8c7),
+ TOBN(0x96ff320a, 0x0d0ff2a9), TOBN(0xbf886487, 0x4384d1a0),
+ TOBN(0xbbe1e6a6, 0xc93f72d6), TOBN(0xd5f75d12, 0xcad800ea),
+ TOBN(0xfa40a09f, 0xe7acf117), TOBN(0x32c8cdd5, 0x7581a355),
+ TOBN(0x74221992, 0x7023c499), TOBN(0xa8afe5d7, 0x38ec3901),
+ TOBN(0x5691afcb, 0xa90e83f0), TOBN(0x41bcaa03, 0x0b8f8eac),
+ TOBN(0xe38b5ff9, 0x8d2668d5), TOBN(0x0715281a, 0x7ad81965),
+ TOBN(0x1bc8fc7c, 0x03c6ce11), TOBN(0xcbbee6e2, 0x8b650436),
+ TOBN(0x06b00fe8, 0x0cdb9808), TOBN(0x17d6e066, 0xfe3ed315),
+ TOBN(0x2e9d38c6, 0x4d0b5018), TOBN(0xab8bfd56, 0x844dcaef),
+ TOBN(0x42894a59, 0x513aed8b), TOBN(0xf77f3b6d, 0x314bd07a),
+ TOBN(0xbbdecb8f, 0x8e42b582), TOBN(0xf10e2fa8, 0xd2390fe6),
+ TOBN(0xefb95022, 0x62a2f201), TOBN(0x4d59ea50, 0x50ee32b0),
+ TOBN(0xd87f7728, 0x6da789a8), TOBN(0xcf98a2cf, 0xf79492c4),
+ TOBN(0xf9577239, 0x720943c2), TOBN(0xba044cf5, 0x3990b9d0),
+ TOBN(0x5aa8e823, 0x95f2884a), TOBN(0x834de6ed, 0x0278a0af),
+ TOBN(0xc8e1ee9a, 0x5f25bd12), TOBN(0x9259ceaa, 0x6f7ab271),
+ TOBN(0x7e6d97a2, 0x77d00b76), TOBN(0x5c0c6eea, 0xa437832a),
+ TOBN(0x5232c20f, 0x5606b81d), TOBN(0xabd7b375, 0x0d991ee5),
+ TOBN(0x4d2bfe35, 0x8632d951), TOBN(0x78f85146, 0x98ed9364),
+ TOBN(0x951873f0, 0xf30c3282), TOBN(0x0da8ac80, 0xa789230b),
+ TOBN(0x3ac7789c, 0x5398967f), TOBN(0xa69b8f7f, 0xbdda0fb5),
+ TOBN(0xe5db7717, 0x6add8545), TOBN(0x1b71cb66, 0x72c49b66),
+ TOBN(0xd8560739, 0x68421d77), TOBN(0x03840fe8, 0x83e3afea),
+ TOBN(0xb391dad5, 0x1ec69977), TOBN(0xae243fb9, 0x307f6726),
+ TOBN(0xc88ac87b, 0xe8ca160c), TOBN(0x5174cced, 0x4ce355f4),
+ TOBN(0x98a35966, 0xe58ba37d), TOBN(0xfdcc8da2, 0x7817335d),
+ TOBN(0x5b752830, 0x83fbc7bf), TOBN(0x68e419d4, 0xd9c96984),
+ TOBN(0x409a39f4, 0x02a40380), TOBN(0x88940faf, 0x1fe977bc),
+ TOBN(0xc640a94b, 0x8f8edea6), TOBN(0x1e22cd17, 0xed11547d),
+ TOBN(0xe28568ce, 0x59ffc3e2), TOBN(0x60aa1b55, 0xc1dee4e7),
+ TOBN(0xc67497c8, 0x837cb363), TOBN(0x06fb438a, 0x105a2bf2),
+ TOBN(0x30357ec4, 0x500d8e20), TOBN(0x1ad9095d, 0x0670db10),
+ TOBN(0x7f589a05, 0xc73b7cfd), TOBN(0xf544607d, 0x880d6d28),
+ TOBN(0x17ba93b1, 0xa20ef103), TOBN(0xad859130, 0x6ba6577b),
+ TOBN(0x65c91cf6, 0x6fa214a0), TOBN(0xd7d49c6c, 0x27990da5),
+ TOBN(0xecd9ec8d, 0x20bb569d), TOBN(0xbd4b2502, 0xeeffbc33),
+ TOBN(0x2056ca5a, 0x6bed0467), TOBN(0x7916a1f7, 0x5b63728c),
+ TOBN(0xd4f9497d, 0x53a4f566), TOBN(0x89734664, 0x97b56810),
+ TOBN(0xf8e1da74, 0x0494a621), TOBN(0x82546a93, 0x8d011c68),
+ TOBN(0x1f3acb19, 0xc61ac162), TOBN(0x52f8fa9c, 0xabad0d3e),
+ TOBN(0x15356523, 0xb4b7ea43), TOBN(0x5a16ad61, 0xae608125),
+ TOBN(0xb0bcb87f, 0x4faed184), TOBN(0x5f236b1d, 0x5029f45f),
+ TOBN(0xd42c7607, 0x0bc6b1fc), TOBN(0xc644324e, 0x68aefce3),
+ TOBN(0x8e191d59, 0x5c5d8446), TOBN(0xc0208077, 0x13ae1979),
+ TOBN(0xadcaee55, 0x3ba59cc7), TOBN(0x20ed6d6b, 0xa2cb81ba),
+ TOBN(0x0952ba19, 0xb6efcffc), TOBN(0x60f12d68, 0x97c0b87c),
+ TOBN(0x4ee2c7c4, 0x9caa30bc), TOBN(0x767238b7, 0x97fbff4e),
+ TOBN(0xebc73921, 0x501b5d92), TOBN(0x3279e3df, 0xc2a37737),
+ TOBN(0x9fc12bc8, 0x6d197543), TOBN(0xfa94dc6f, 0x0a40db4e),
+ TOBN(0x7392b41a, 0x530ccbbd), TOBN(0x87c82146, 0xea823525),
+ TOBN(0xa52f984c, 0x05d98d0c), TOBN(0x2ae57d73, 0x5ef6974c),
+ TOBN(0x9377f7bf, 0x3042a6dd), TOBN(0xb1a007c0, 0x19647a64),
+ TOBN(0xfaa9079a, 0x0cca9767), TOBN(0x3d81a25b, 0xf68f72d5),
+ TOBN(0x752067f8, 0xff81578e), TOBN(0x78622150, 0x9045447d),
+ TOBN(0xc0c22fcf, 0x0505aa6f), TOBN(0x1030f0a6, 0x6bed1c77),
+ TOBN(0x31f29f15, 0x1f0bd739), TOBN(0x2d7989c7, 0xe6debe85),
+ TOBN(0x5c070e72, 0x8e677e98), TOBN(0x0a817bd3, 0x06e81fd5),
+ TOBN(0xc110d830, 0xb0f2ac95), TOBN(0x48d0995a, 0xab20e64e),
+ TOBN(0x0f3e00e1, 0x7729cd9a), TOBN(0x2a570c20, 0xdd556946),
+ TOBN(0x912dbcfd, 0x4e86214d), TOBN(0x2d014ee2, 0xcf615498),
+ TOBN(0x55e2b1e6, 0x3530d76e), TOBN(0xc5135ae4, 0xfd0fd6d1),
+ TOBN(0x0066273a, 0xd4f3049f), TOBN(0xbb8e9893, 0xe7087477),
+ TOBN(0x2dba1ddb, 0x14c6e5fd), TOBN(0xdba37886, 0x51f57e6c),
+ TOBN(0x5aaee0a6, 0x5a72f2cf), TOBN(0x1208bfbf, 0x7bea5642),
+ TOBN(0xf5c6aa3b, 0x67872c37), TOBN(0xd726e083, 0x43f93224),
+ TOBN(0x1854daa5, 0x061f1658), TOBN(0xc0016df1, 0xdf0cd2b3),
+ TOBN(0xc2a3f23e, 0x833d50de), TOBN(0x73b681d2, 0xbbbd3017),
+ TOBN(0x2f046dc4, 0x3ac343c0), TOBN(0x9c847e7d, 0x85716421),
+ TOBN(0xe1e13c91, 0x0917eed4), TOBN(0x3fc9eebd, 0x63a1b9c6),
+ TOBN(0x0f816a72, 0x7fe02299), TOBN(0x6335ccc2, 0x294f3319),
+ TOBN(0x3820179f, 0x4745c5be), TOBN(0xe647b782, 0x922f066e),
+ TOBN(0xc22e49de, 0x02cafb8a), TOBN(0x299bc2ff, 0xfcc2eccc),
+ TOBN(0x9a8feea2, 0x6e0e8282), TOBN(0xa627278b, 0xfe893205),
+ TOBN(0xa7e19733, 0x7933e47b), TOBN(0xf4ff6b13, 0x2e766402),
+ TOBN(0xa4d8be0a, 0x98440d9f), TOBN(0x658f5c2f, 0x38938808),
+ TOBN(0x90b75677, 0xc95b3b3e), TOBN(0xfa044269, 0x3137b6ff),
+ TOBN(0x077b039b, 0x43c47c29), TOBN(0xcca95dd3, 0x8a6445b2),
+ TOBN(0x0b498ba4, 0x2333fc4c), TOBN(0x274f8e68, 0xf736a1b1),
+ TOBN(0x6ca348fd, 0x5f1d4b2e), TOBN(0x24d3be78, 0xa8f10199),
+ TOBN(0x8535f858, 0xca14f530), TOBN(0xa6e7f163, 0x5b982e51),
+ TOBN(0x847c8512, 0x36e1bf62), TOBN(0xf6a7c58e, 0x03448418),
+ TOBN(0x583f3703, 0xf9374ab6), TOBN(0x864f9195, 0x6e564145),
+ TOBN(0x33bc3f48, 0x22526d50), TOBN(0x9f323c80, 0x1262a496),
+ TOBN(0xaa97a7ae, 0x3f046a9a), TOBN(0x70da183e, 0xdf8a039a),
+ TOBN(0x5b68f71c, 0x52aa0ba6), TOBN(0x9be0fe51, 0x21459c2d),
+ TOBN(0xc1e17eb6, 0xcbc613e5), TOBN(0x33131d55, 0x497ea61c),
+ TOBN(0x2f69d39e, 0xaf7eded5), TOBN(0x73c2f434, 0xde6af11b),
+ TOBN(0x4ca52493, 0xa4a375fa), TOBN(0x5f06787c, 0xb833c5c2),
+ TOBN(0x814e091f, 0x3e6e71cf), TOBN(0x76451f57, 0x8b746666)}
+ ,
+ {TOBN(0x80f9bdef, 0x694db7e0), TOBN(0xedca8787, 0xb9fcddc6),
+ TOBN(0x51981c34, 0x03b8dce1), TOBN(0x4274dcf1, 0x70e10ba1),
+ TOBN(0xf72743b8, 0x6def6d1a), TOBN(0xd25b1670, 0xebdb1866),
+ TOBN(0xc4491e8c, 0x050c6f58), TOBN(0x2be2b2ab, 0x87fbd7f5),
+ TOBN(0x3e0e5c9d, 0xd111f8ec), TOBN(0xbcc33f8d, 0xb7c4e760),
+ TOBN(0x702f9a91, 0xbd392a51), TOBN(0x7da4a795, 0xc132e92d),
+ TOBN(0x1a0b0ae3, 0x0bb1151b), TOBN(0x54febac8, 0x02e32251),
+ TOBN(0xea3a5082, 0x694e9e78), TOBN(0xe58ffec1, 0xe4fe40b8),
+ TOBN(0xf85592fc, 0xd1e0cf9e), TOBN(0xdea75f0d, 0xc0e7b2e8),
+ TOBN(0xc04215cf, 0xc135584e), TOBN(0x174fc727, 0x2f57092a),
+ TOBN(0xe7277877, 0xeb930bea), TOBN(0x504caccb, 0x5eb02a5a),
+ TOBN(0xf9fe08f7, 0xf5241b9b), TOBN(0xe7fb62f4, 0x8d5ca954),
+ TOBN(0xfbb8349d, 0x29c4120b), TOBN(0x9f94391f, 0xc0d0d915),
+ TOBN(0xc4074fa7, 0x5410ba51), TOBN(0xa66adbf6, 0x150a5911),
+ TOBN(0xc164543c, 0x34bfca38), TOBN(0xe0f27560, 0xb9e1ccfc),
+ TOBN(0x99da0f53, 0xe820219c), TOBN(0xe8234498, 0xc6b4997a),
+ TOBN(0xcfb88b76, 0x9d4c5423), TOBN(0x9e56eb10, 0xb0521c49),
+ TOBN(0x418e0b5e, 0xbe8700a1), TOBN(0x00cbaad6, 0xf93cb58a),
+ TOBN(0xe923fbde, 0xd92a5e67), TOBN(0xca4979ac, 0x1f347f11),
+ TOBN(0x89162d85, 0x6bc0585b), TOBN(0xdd6254af, 0xac3c70e3),
+ TOBN(0x7b23c513, 0x516e19e4), TOBN(0x56e2e847, 0xc5c4d593),
+ TOBN(0x9f727d73, 0x5ce71ef6), TOBN(0x5b6304a6, 0xf79a44c5),
+ TOBN(0x6638a736, 0x3ab7e433), TOBN(0x1adea470, 0xfe742f83),
+ TOBN(0xe054b854, 0x5b7fc19f), TOBN(0xf935381a, 0xba1d0698),
+ TOBN(0x546eab2d, 0x799e9a74), TOBN(0x96239e0e, 0xa949f729),
+ TOBN(0xca274c6b, 0x7090055a), TOBN(0x835142c3, 0x9020c9b0),
+ TOBN(0xa405667a, 0xa2e8807f), TOBN(0x29f2c085, 0x1aa3d39e),
+ TOBN(0xcc555d64, 0x42fc72f5), TOBN(0xe856e0e7, 0xfbeacb3c),
+ TOBN(0xb5504f9d, 0x918e4936), TOBN(0x65035ef6, 0xb2513982),
+ TOBN(0x0553a0c2, 0x6f4d9cb9), TOBN(0x6cb10d56, 0xbea85509),
+ TOBN(0x48d957b7, 0xa242da11), TOBN(0x16a4d3dd, 0x672b7268),
+ TOBN(0x3d7e637c, 0x8502a96b), TOBN(0x27c7032b, 0x730d463b),
+ TOBN(0xbdc02b18, 0xe4136a14), TOBN(0xbacf969d, 0x678e32bf),
+ TOBN(0xc98d89a3, 0xdd9c3c03), TOBN(0x7b92420a, 0x23becc4f),
+ TOBN(0xd4b41f78, 0xc64d565c), TOBN(0x9f969d00, 0x10f28295),
+ TOBN(0xec7f7f76, 0xb13d051a), TOBN(0x08945e1e, 0xa92da585),
+ TOBN(0x55366b7d, 0x5846426f), TOBN(0xe7d09e89, 0x247d441d),
+ TOBN(0x510b404d, 0x736fbf48), TOBN(0x7fa003d0, 0xe784bd7d),
+ TOBN(0x25f7614f, 0x17fd9596), TOBN(0x49e0e0a1, 0x35cb98db),
+ TOBN(0x2c65957b, 0x2e83a76a), TOBN(0x5d40da8d, 0xcddbe0f8),
+ TOBN(0xf2b8c405, 0x050bad24), TOBN(0x8918426d, 0xc2aa4823),
+ TOBN(0x2aeab3dd, 0xa38365a7), TOBN(0x72031717, 0x7c91b690),
+ TOBN(0x8b00d699, 0x60a94120), TOBN(0x478a255d, 0xe99eaeec),
+ TOBN(0xbf656a5f, 0x6f60aafd), TOBN(0xdfd7cb75, 0x5dee77b3),
+ TOBN(0x37f68bb4, 0xa595939d), TOBN(0x03556479, 0x28740217),
+ TOBN(0x8e740e7c, 0x84ad7612), TOBN(0xd89bc843, 0x9044695f),
+ TOBN(0xf7f3da5d, 0x85a9184d), TOBN(0x562563bb, 0x9fc0b074),
+ TOBN(0x06d2e6aa, 0xf88a888e), TOBN(0x612d8643, 0x161fbe7c),
+ TOBN(0x465edba7, 0xf64085e7), TOBN(0xb230f304, 0x29aa8511),
+ TOBN(0x53388426, 0xcda2d188), TOBN(0x90885735, 0x4b666649),
+ TOBN(0x6f02ff9a, 0x652f54f6), TOBN(0x65c82294, 0x5fae2bf0),
+ TOBN(0x7816ade0, 0x62f5eee3), TOBN(0xdcdbdf43, 0xfcc56d70),
+ TOBN(0x9fb3bba3, 0x54530bb2), TOBN(0xbde3ef77, 0xcb0869ea),
+ TOBN(0x89bc9046, 0x0b431163), TOBN(0x4d03d7d2, 0xe4819a35),
+ TOBN(0x33ae4f9e, 0x43b6a782), TOBN(0x216db307, 0x9c88a686),
+ TOBN(0x91dd88e0, 0x00ffedd9), TOBN(0xb280da9f, 0x12bd4840),
+ TOBN(0x32a7cb8a, 0x1635e741), TOBN(0xfe14008a, 0x78be02a7),
+ TOBN(0x3fafb334, 0x1b7ae030), TOBN(0x7fd508e7, 0x5add0ce9),
+ TOBN(0x72c83219, 0xd607ad51), TOBN(0x0f229c0a, 0x8d40964a),
+ TOBN(0x1be2c336, 0x1c878da2), TOBN(0xe0c96742, 0xeab2ab86),
+ TOBN(0x458f8691, 0x3e538cd7), TOBN(0xa7001f6c, 0x8e08ad53),
+ TOBN(0x52b8c6e6, 0xbf5d15ff), TOBN(0x548234a4, 0x011215dd),
+ TOBN(0xff5a9d2d, 0x3d5b4045), TOBN(0xb0ffeeb6, 0x4a904190),
+ TOBN(0x55a3aca4, 0x48607f8b), TOBN(0x8cbd665c, 0x30a0672a),
+ TOBN(0x87f834e0, 0x42583068), TOBN(0x02da2aeb, 0xf3f6e683),
+ TOBN(0x6b763e5d, 0x05c12248), TOBN(0x7230378f, 0x65a8aefc),
+ TOBN(0x93bd80b5, 0x71e8e5ca), TOBN(0x53ab041c, 0xb3b62524),
+ TOBN(0x1b860513, 0x6c9c552e), TOBN(0xe84d402c, 0xd5524e66),
+ TOBN(0xa37f3573, 0xf37f5937), TOBN(0xeb0f6c7d, 0xd1e4fca5),
+ TOBN(0x2965a554, 0xac8ab0fc), TOBN(0x17fbf56c, 0x274676ac),
+ TOBN(0x2e2f6bd9, 0xacf7d720), TOBN(0x41fc8f88, 0x10224766),
+ TOBN(0x517a14b3, 0x85d53bef), TOBN(0xdae327a5, 0x7d76a7d1),
+ TOBN(0x6ad0a065, 0xc4818267), TOBN(0x33aa189b, 0x37c1bbc1),
+ TOBN(0x64970b52, 0x27392a92), TOBN(0x21699a1c, 0x2d1535ea),
+ TOBN(0xcd20779c, 0xc2d7a7fd), TOBN(0xe3186059, 0x99c83cf2),
+ TOBN(0x9b69440b, 0x72c0b8c7), TOBN(0xa81497d7, 0x7b9e0e4d),
+ TOBN(0x515d5c89, 0x1f5f82dc), TOBN(0x9a7f67d7, 0x6361079e),
+ TOBN(0xa8da81e3, 0x11a35330), TOBN(0xe44990c4, 0x4b18be1b),
+ TOBN(0xc7d5ed95, 0xaf103e59), TOBN(0xece8aba7, 0x8dac9261),
+ TOBN(0xbe82b099, 0x9394b8d3), TOBN(0x6830f09a, 0x16adfe83),
+ TOBN(0x250a29b4, 0x88172d01), TOBN(0x8b20bd65, 0xcaff9e02),
+ TOBN(0xb8a7661e, 0xe8a6329a), TOBN(0x4520304d, 0xd3fce920),
+ TOBN(0xae45da1f, 0x2b47f7ef), TOBN(0xe07f5288, 0x5bffc540),
+ TOBN(0xf7997009, 0x3464f874), TOBN(0x2244c2cd, 0xa6fa1f38),
+ TOBN(0x43c41ac1, 0x94d7d9b1), TOBN(0x5bafdd82, 0xc82e7f17),
+ TOBN(0xdf0614c1, 0x5fda0fca), TOBN(0x74b043a7, 0xa8ae37ad),
+ TOBN(0x3ba6afa1, 0x9e71734c), TOBN(0x15d5437e, 0x9c450f2e),
+ TOBN(0x4a5883fe, 0x67e242b1), TOBN(0x5143bdc2, 0x2c1953c2),
+ TOBN(0x542b8b53, 0xfc5e8920), TOBN(0x363bf9a8, 0x9a9cee08),
+ TOBN(0x02375f10, 0xc3486e08), TOBN(0x2037543b, 0x8c5e70d2),
+ TOBN(0x7109bccc, 0x625640b4), TOBN(0xcbc1051e, 0x8bc62c3b),
+ TOBN(0xf8455fed, 0x803f26ea), TOBN(0x6badceab, 0xeb372424),
+ TOBN(0xa2a9ce7c, 0x6b53f5f9), TOBN(0x64246595, 0x1b176d99),
+ TOBN(0xb1298d36, 0xb95c081b), TOBN(0x53505bb8, 0x1d9a9ee6),
+ TOBN(0x3f6f9e61, 0xf2ba70b0), TOBN(0xd07e16c9, 0x8afad453),
+ TOBN(0x9f1694bb, 0xe7eb4a6a), TOBN(0xdfebced9, 0x3cb0bc8e),
+ TOBN(0x92d3dcdc, 0x53868c8b), TOBN(0x174311a2, 0x386107a6),
+ TOBN(0x4109e07c, 0x689b4e64), TOBN(0x30e4587f, 0x2df3dcb6),
+ TOBN(0x841aea31, 0x0811b3b2), TOBN(0x6144d41d, 0x0cce43ea),
+ TOBN(0x464c4581, 0x2a9a7803), TOBN(0xd03d371f, 0x3e158930),
+ TOBN(0xc676d7f2, 0xb1f3390b), TOBN(0x9f7a1b8c, 0xa5b61272),
+ TOBN(0x4ebebfc9, 0xc2e127a9), TOBN(0x4602500c, 0x5dd997bf),
+ TOBN(0x7f09771c, 0x4711230f), TOBN(0x058eb37c, 0x020f09c1),
+ TOBN(0xab693d4b, 0xfee5e38b), TOBN(0x9289eb1f, 0x4653cbc0),
+ TOBN(0xbecf46ab, 0xd51b9cf5), TOBN(0xd2aa9c02, 0x9f0121af),
+ TOBN(0x36aaf7d2, 0xe90dc274), TOBN(0x909e4ea0, 0x48b95a3c),
+ TOBN(0xe6b70496, 0x6f32dbdb), TOBN(0x672188a0, 0x8b030b3e),
+ TOBN(0xeeffe5b3, 0xcfb617e2), TOBN(0x87e947de, 0x7c82709e),
+ TOBN(0xa44d2b39, 0x1770f5a7), TOBN(0xe4d4d791, 0x0e44eb82),
+ TOBN(0x42e69d1e, 0x3f69712a), TOBN(0xbf11c4d6, 0xac6a820e),
+ TOBN(0xb5e7f3e5, 0x42c4224c), TOBN(0xd6b4e81c, 0x449d941c),
+ TOBN(0x5d72bd16, 0x5450e878), TOBN(0x6a61e28a, 0xee25ac54),
+ TOBN(0x33272094, 0xe6f1cd95), TOBN(0x7512f30d, 0x0d18673f),
+ TOBN(0x32f7a4ca, 0x5afc1464), TOBN(0x2f095656, 0x6bbb977b),
+ TOBN(0x586f47ca, 0xa8226200), TOBN(0x02c868ad, 0x1ac07369),
+ TOBN(0x4ef2b845, 0xc613acbe), TOBN(0x43d7563e, 0x0386054c),
+ TOBN(0x54da9dc7, 0xab952578), TOBN(0xb5423df2, 0x26e84d0b),
+ TOBN(0xa8b64eeb, 0x9b872042), TOBN(0xac205782, 0x5990f6df),
+ TOBN(0x4ff696eb, 0x21f4c77a), TOBN(0x1a79c3e4, 0xaab273af),
+ TOBN(0x29bc922e, 0x9436b3f1), TOBN(0xff807ef8, 0xd6d9a27a),
+ TOBN(0x82acea3d, 0x778f22a0), TOBN(0xfb10b2e8, 0x5b5e7469),
+ TOBN(0xc0b16980, 0x2818ee7d), TOBN(0x011afff4, 0xc91c1a2f),
+ TOBN(0x95a6d126, 0xad124418), TOBN(0x31c081a5, 0xe72e295f),
+ TOBN(0x36bb283a, 0xf2f4db75), TOBN(0xd115540f, 0x7acef462),
+ TOBN(0xc7f3a8f8, 0x33f6746c), TOBN(0x21e46f65, 0xfea990ca),
+ TOBN(0x915fd5c5, 0xcaddb0a9), TOBN(0xbd41f016, 0x78614555),
+ TOBN(0x346f4434, 0x426ffb58), TOBN(0x80559436, 0x14dbc204),
+ TOBN(0xf3dd20fe, 0x5a969b7f), TOBN(0x9d59e956, 0xe899a39a),
+ TOBN(0xf1b0971c, 0x8ad4cf4b), TOBN(0x03448860, 0x2ffb8fb8),
+ TOBN(0xf071ac3c, 0x65340ba4), TOBN(0x408d0596, 0xb27fd758),
+ TOBN(0xe7c78ea4, 0x98c364b0), TOBN(0xa4aac4a5, 0x051e8ab5),
+ TOBN(0xb9e1d560, 0x485d9002), TOBN(0x9acd518a, 0x88844455),
+ TOBN(0xe4ca688f, 0xd06f56c0), TOBN(0xa48af70d, 0xdf027972),
+ TOBN(0x691f0f04, 0x5e9a609d), TOBN(0xa9dd82cd, 0xee61270e),
+ TOBN(0x8903ca63, 0xa0ef18d3), TOBN(0x9fb7ee35, 0x3d6ca3bd),
+ TOBN(0xa7b4a09c, 0xabf47d03), TOBN(0x4cdada01, 0x1c67de8e),
+ TOBN(0x52003749, 0x9355a244), TOBN(0xe77fd2b6, 0x4f2151a9),
+ TOBN(0x695d6cf6, 0x66b4efcb), TOBN(0xc5a0cacf, 0xda2cfe25),
+ TOBN(0x104efe5c, 0xef811865), TOBN(0xf52813e8, 0x9ea5cc3d),
+ TOBN(0x855683dc, 0x40b58dbc), TOBN(0x0338ecde, 0x175fcb11),
+ TOBN(0xf9a05637, 0x74921592), TOBN(0xb4f1261d, 0xb9bb9d31),
+ TOBN(0x551429b7, 0x4e9c5459), TOBN(0xbe182e6f, 0x6ea71f53),
+ TOBN(0xd3a3b07c, 0xdfc50573), TOBN(0x9ba1afda, 0x62be8d44),
+ TOBN(0x9bcfd2cb, 0x52ab65d3), TOBN(0xdf11d547, 0xa9571802),
+ TOBN(0x099403ee, 0x02a2404a), TOBN(0x497406f4, 0x21088a71),
+ TOBN(0x99479409, 0x5004ae71), TOBN(0xbdb42078, 0xa812c362),
+ TOBN(0x2b72a30f, 0xd8828442), TOBN(0x283add27, 0xfcb5ed1c),
+ TOBN(0xf7c0e200, 0x66a40015), TOBN(0x3e3be641, 0x08b295ef),
+ TOBN(0xac127dc1, 0xe038a675), TOBN(0x729deff3, 0x8c5c6320),
+ TOBN(0xb7df8fd4, 0xa90d2c53), TOBN(0x9b74b0ec, 0x681e7cd3),
+ TOBN(0x5cb5a623, 0xdab407e5), TOBN(0xcdbd3615, 0x76b340c6),
+ TOBN(0xa184415a, 0x7d28392c), TOBN(0xc184c1d8, 0xe96f7830),
+ TOBN(0xc3204f19, 0x81d3a80f), TOBN(0xfde0c841, 0xc8e02432),
+ TOBN(0x78203b3e, 0x8149e0c1), TOBN(0x5904bdbb, 0x08053a73),
+ TOBN(0x30fc1dd1, 0x101b6805), TOBN(0x43c223bc, 0x49aa6d49),
+ TOBN(0x9ed67141, 0x7a174087), TOBN(0x311469a0, 0xd5997008),
+ TOBN(0xb189b684, 0x5e43fc61), TOBN(0xf3282375, 0xe0d3ab57),
+ TOBN(0x4fa34b67, 0xb1181da8), TOBN(0x621ed0b2, 0x99ee52b8),
+ TOBN(0x9b178de1, 0xad990676), TOBN(0xd51de67b, 0x56d54065),
+ TOBN(0x2a2c27c4, 0x7538c201), TOBN(0x33856ec8, 0x38a40f5c),
+ TOBN(0x2522fc15, 0xbe6cdcde), TOBN(0x1e603f33, 0x9f0c6f89),
+ TOBN(0x7994edc3, 0x103e30a6), TOBN(0x033a00db, 0x220c853e),
+ TOBN(0xd3cfa409, 0xf7bb7fd7), TOBN(0x70f8781e, 0x462d18f6),
+ TOBN(0xbbd82980, 0x687fe295), TOBN(0x6eef4c32, 0x595669f3),
+ TOBN(0x86a9303b, 0x2f7e85c3), TOBN(0x5fce4621, 0x71988f9b),
+ TOBN(0x5b935bf6, 0xc138acb5), TOBN(0x30ea7d67, 0x25661212),
+ TOBN(0xef1eb5f4, 0xe51ab9a2), TOBN(0x0587c98a, 0xae067c78),
+ TOBN(0xb3ce1b3c, 0x77ca9ca6), TOBN(0x2a553d4d, 0x54b5f057),
+ TOBN(0xc7898236, 0x4da29ec2), TOBN(0xdbdd5d13, 0xb9c57316),
+ TOBN(0xc57d6e6b, 0x2cd80d47), TOBN(0x80b460cf, 0xfe9e7391),
+ TOBN(0x98648cab, 0xf963c31e), TOBN(0x67f9f633, 0xcc4d32fd),
+ TOBN(0x0af42a9d, 0xfdf7c687), TOBN(0x55f292a3, 0x0b015ea7),
+ TOBN(0x89e468b2, 0xcd21ab3d), TOBN(0xe504f022, 0xc393d392),
+ TOBN(0xab21e1d4, 0xa5013af9), TOBN(0xe3283f78, 0xc2c28acb),
+ TOBN(0xf38b35f6, 0x226bf99f), TOBN(0xe8354274, 0x0e291e69),
+ TOBN(0x61673a15, 0xb20c162d), TOBN(0xc101dc75, 0xb04fbdbe),
+ TOBN(0x8323b4c2, 0x255bd617), TOBN(0x6c969693, 0x6c2a9154),
+ TOBN(0xc6e65860, 0x62679387), TOBN(0x8e01db0c, 0xb8c88e23),
+ TOBN(0x33c42873, 0x893a5559), TOBN(0x7630f04b, 0x47a3e149),
+ TOBN(0xb5d80805, 0xddcf35f8), TOBN(0x582ca080, 0x77dfe732),
+ TOBN(0x2c7156e1, 0x0b1894a0), TOBN(0x92034001, 0xd81c68c0),
+ TOBN(0xed225d00, 0xc8b115b5), TOBN(0x237f9c22, 0x83b907f2),
+ TOBN(0x0ea2f32f, 0x4470e2c0), TOBN(0xb725f7c1, 0x58be4e95),
+ TOBN(0x0f1dcafa, 0xb1ae5463), TOBN(0x59ed5187, 0x1ba2fc04),
+ TOBN(0xf6e0f316, 0xd0115d4d), TOBN(0x5180b12f, 0xd3691599),
+ TOBN(0x157e32c9, 0x527f0a41), TOBN(0x7b0b081d, 0xa8e0ecc0),
+ TOBN(0x6dbaaa8a, 0xbf4f0dd0), TOBN(0x99b289c7, 0x4d252696),
+ TOBN(0x79b7755e, 0xdbf864fe), TOBN(0x6974e2b1, 0x76cad3ab),
+ TOBN(0x35dbbee2, 0x06ddd657), TOBN(0xe7cbdd11, 0x2ff3a96d),
+ TOBN(0x88381968, 0x076be758), TOBN(0x2d737e72, 0x08c91f5d),
+ TOBN(0x5f83ab62, 0x86ec3776), TOBN(0x98aa649d, 0x945fa7a1),
+ TOBN(0xf477ec37, 0x72ef0933), TOBN(0x66f52b1e, 0x098c17b1),
+ TOBN(0x9eec58fb, 0xd803738b), TOBN(0x91aaade7, 0xe4e86aa4),
+ TOBN(0x6b1ae617, 0xa5b51492), TOBN(0x63272121, 0xbbc45974),
+ TOBN(0x7e0e28f0, 0x862c5129), TOBN(0x0a8f79a9, 0x3321a4a0),
+ TOBN(0xe26d1664, 0x5041c88f), TOBN(0x0571b805, 0x53233e3a),
+ TOBN(0xd1b0ccde, 0xc9520711), TOBN(0x55a9e4ed, 0x3c8b84bf),
+ TOBN(0x9426bd39, 0xa1fef314), TOBN(0x4f5f638e, 0x6eb93f2b),
+ TOBN(0xba2a1ed3, 0x2bf9341b), TOBN(0xd63c1321, 0x4d42d5a9),
+ TOBN(0xd2964a89, 0x316dc7c5), TOBN(0xd1759606, 0xca511851),
+ TOBN(0xd8a9201f, 0xf9e6ed35), TOBN(0xb7b5ee45, 0x6736925a),
+ TOBN(0x0a83fbbc, 0x99581af7), TOBN(0x3076bc40, 0x64eeb051),
+ TOBN(0x5511c98c, 0x02dec312), TOBN(0x270de898, 0x238dcb78),
+ TOBN(0x2cf4cf9c, 0x539c08c9), TOBN(0xa70cb65e, 0x38d3b06e),
+ TOBN(0xb12ec10e, 0xcfe57bbd), TOBN(0x82c7b656, 0x35a0c2b5),
+ TOBN(0xddc7d5cd, 0x161c67bd), TOBN(0xe32e8985, 0xae3a32cc),
+ TOBN(0x7aba9444, 0xd11a5529), TOBN(0xe964ed02, 0x2427fa1a),
+ TOBN(0x1528392d, 0x24a1770a), TOBN(0xa152ce2c, 0x12c72fcd),
+ TOBN(0x714553a4, 0x8ec07649), TOBN(0x18b4c290, 0x459dd453),
+ TOBN(0xea32b714, 0x7b64b110), TOBN(0xb871bfa5, 0x2e6f07a2),
+ TOBN(0xb67112e5, 0x9e2e3c9b), TOBN(0xfbf250e5, 0x44aa90f6),
+ TOBN(0xf77aedb8, 0xbd539006), TOBN(0x3b0cdf9a, 0xd172a66f),
+ TOBN(0xedf69fea, 0xf8c51187), TOBN(0x05bb67ec, 0x741e4da7),
+ TOBN(0x47df0f32, 0x08114345), TOBN(0x56facb07, 0xbb9792b1),
+ TOBN(0xf3e007e9, 0x8f6229e4), TOBN(0x62d103f4, 0x526fba0f),
+ TOBN(0x4f33bef7, 0xb0339d79), TOBN(0x9841357b, 0xb59bfec1),
+ TOBN(0xfa8dbb59, 0xc34e6705), TOBN(0xc3c7180b, 0x7fdaa84c),
+ TOBN(0xf95872fc, 0xa4108537), TOBN(0x8750cc3b, 0x932a3e5a),
+ TOBN(0xb61cc69d, 0xb7275d7d), TOBN(0xffa0168b, 0x2e59b2e9),
+ TOBN(0xca032abc, 0x6ecbb493), TOBN(0x1d86dbd3, 0x2c9082d8),
+ TOBN(0xae1e0b67, 0xe28ef5ba), TOBN(0x2c9a4699, 0xcb18e169),
+ TOBN(0x0ecd0e33, 0x1e6bbd20), TOBN(0x571b360e, 0xaf5e81d2),
+ TOBN(0xcd9fea58, 0x101c1d45), TOBN(0x6651788e, 0x18880452),
+ TOBN(0xa9972635, 0x1f8dd446), TOBN(0x44bed022, 0xe37281d0),
+ TOBN(0x094b2b2d, 0x33da525d), TOBN(0xf193678e, 0x13144fd8),
+ TOBN(0xb8ab5ba4, 0xf4c1061d), TOBN(0x4343b5fa, 0xdccbe0f4),
+ TOBN(0xa8702371, 0x63812713), TOBN(0x47bf6d2d, 0xf7611d93),
+ TOBN(0x46729b8c, 0xbd21e1d7), TOBN(0x7484d4e0, 0xd629e77d),
+ TOBN(0x830e6eea, 0x60dbac1f), TOBN(0x23d8c484, 0xda06a2f7),
+ TOBN(0x896714b0, 0x50ca535b), TOBN(0xdc8d3644, 0xebd97a9b),
+ TOBN(0x106ef9fa, 0xb12177b4), TOBN(0xf79bf464, 0x534d5d9c),
+ TOBN(0x2537a349, 0xa6ab360b), TOBN(0xc7c54253, 0xa00c744f),
+ TOBN(0xb3c7a047, 0xe5911a76), TOBN(0x61ffa5c8, 0x647f1ee7),
+ TOBN(0x15aed36f, 0x8f56ab42), TOBN(0x6a0d41b0, 0xa3ff9ac9),
+ TOBN(0x68f469f5, 0xcc30d357), TOBN(0xbe9adf81, 0x6b72be96),
+ TOBN(0x1cd926fe, 0x903ad461), TOBN(0x7e89e38f, 0xcaca441b),
+ TOBN(0xf0f82de5, 0xfacf69d4), TOBN(0x363b7e76, 0x4775344c),
+ TOBN(0x6894f312, 0xb2e36d04), TOBN(0x3c6cb4fe, 0x11d1c9a5),
+ TOBN(0x85d9c339, 0x4008e1f2), TOBN(0x5e9a85ea, 0x249f326c),
+ TOBN(0xdc35c60a, 0x678c5e06), TOBN(0xc08b944f, 0x9f86fba9),
+ TOBN(0xde40c02c, 0x89f71f0f), TOBN(0xad8f3e31, 0xff3da3c0),
+ TOBN(0x3ea5096b, 0x42125ded), TOBN(0x13879cbf, 0xa7379183),
+ TOBN(0x6f4714a5, 0x6b306a0b), TOBN(0x359c2ea6, 0x67646c5e),
+ TOBN(0xfacf8943, 0x07726368), TOBN(0x07a58935, 0x65ff431e),
+ TOBN(0x24d661d1, 0x68754ab0), TOBN(0x801fce1d, 0x6f429a76),
+ TOBN(0xc068a85f, 0xa58ce769), TOBN(0xedc35c54, 0x5d5eca2b),
+ TOBN(0xea31276f, 0xa3f660d1), TOBN(0xa0184ebe, 0xb8fc7167),
+ TOBN(0x0f20f21a, 0x1d8db0ae), TOBN(0xd96d095f, 0x56c35e12),
+ TOBN(0xedf402b5, 0xf8c2a25b), TOBN(0x1bb772b9, 0x059204b6),
+ TOBN(0x50cbeae2, 0x19b4e34c), TOBN(0x93109d80, 0x3fa0845a),
+ TOBN(0x54f7ccf7, 0x8ef59fb5), TOBN(0x3b438fe2, 0x88070963),
+ TOBN(0x9e28c659, 0x31f3ba9b), TOBN(0x9cc31b46, 0xead9da92),
+ TOBN(0x3c2f0ba9, 0xb733aa5f), TOBN(0xdece47cb, 0xf05af235),
+ TOBN(0xf8e3f715, 0xa2ac82a5), TOBN(0xc97ba641, 0x2203f18a),
+ TOBN(0xc3af5504, 0x09c11060), TOBN(0x56ea2c05, 0x46af512d),
+ TOBN(0xfac28daf, 0xf3f28146), TOBN(0x87fab43a, 0x959ef494),}
+ ,
+ {TOBN(0x09891641, 0xd4c5105f), TOBN(0x1ae80f8e, 0x6d7fbd65),
+ TOBN(0x9d67225f, 0xbee6bdb0), TOBN(0x3b433b59, 0x7fc4d860),
+ TOBN(0x44e66db6, 0x93e85638), TOBN(0xf7b59252, 0xe3e9862f),
+ TOBN(0xdb785157, 0x665c32ec), TOBN(0x702fefd7, 0xae362f50),
+ TOBN(0x3754475d, 0x0fefb0c3), TOBN(0xd48fb56b, 0x46d7c35d),
+ TOBN(0xa070b633, 0x363798a4), TOBN(0xae89f3d2, 0x8fdb98e6),
+ TOBN(0x970b89c8, 0x6363d14c), TOBN(0x89817521, 0x67abd27d),
+ TOBN(0x9bf7d474, 0x44d5a021), TOBN(0xb3083baf, 0xcac72aee),
+ TOBN(0x389741de, 0xbe949a44), TOBN(0x638e9388, 0x546a4fa5),
+ TOBN(0x3fe6419c, 0xa0047bdc), TOBN(0x7047f648, 0xaaea57ca),
+ TOBN(0x54e48a90, 0x41fbab17), TOBN(0xda8e0b28, 0x576bdba2),
+ TOBN(0xe807eebc, 0xc72afddc), TOBN(0x07d3336d, 0xf42577bf),
+ TOBN(0x62a8c244, 0xbfe20925), TOBN(0x91c19ac3, 0x8fdce867),
+ TOBN(0x5a96a5d5, 0xdd387063), TOBN(0x61d587d4, 0x21d324f6),
+ TOBN(0xe87673a2, 0xa37173ea), TOBN(0x23848008, 0x53778b65),
+ TOBN(0x10f8441e, 0x05bab43e), TOBN(0xfa11fe12, 0x4621efbe),
+ TOBN(0x047b772e, 0x81685d7b), TOBN(0x23f27d81, 0xbf34a976),
+ TOBN(0xc27608e2, 0x915f48ef), TOBN(0x3b0b43fa, 0xa521d5c3),
+ TOBN(0x7613fb26, 0x63ca7284), TOBN(0x7f5729b4, 0x1d4db837),
+ TOBN(0x87b14898, 0x583b526b), TOBN(0x00b732a6, 0xbbadd3d1),
+ TOBN(0x8e02f426, 0x2048e396), TOBN(0x436b50b6, 0x383d9de4),
+ TOBN(0xf78d3481, 0x471e85ad), TOBN(0x8b01ea6a, 0xd005c8d6),
+ TOBN(0xd3c7afee, 0x97015c07), TOBN(0x46cdf1a9, 0x4e3ba2ae),
+ TOBN(0x7a42e501, 0x83d3a1d2), TOBN(0xd54b5268, 0xb541dff4),
+ TOBN(0x3f24cf30, 0x4e23e9bc), TOBN(0x4387f816, 0x126e3624),
+ TOBN(0x26a46a03, 0x3b0b6d61), TOBN(0xaf1bc845, 0x8b2d777c),
+ TOBN(0x25c401ba, 0x527de79c), TOBN(0x0e1346d4, 0x4261bbb6),
+ TOBN(0x4b96c44b, 0x287b4bc7), TOBN(0x658493c7, 0x5254562f),
+ TOBN(0x23f949fe, 0xb8a24a20), TOBN(0x17ebfed1, 0xf52ca53f),
+ TOBN(0x9b691bbe, 0xbcfb4853), TOBN(0x5617ff6b, 0x6278a05d),
+ TOBN(0x241b34c5, 0xe3c99ebd), TOBN(0xfc64242e, 0x1784156a),
+ TOBN(0x4206482f, 0x695d67df), TOBN(0xb967ce0e, 0xee27c011),
+ TOBN(0x65db3751, 0x21c80b5d), TOBN(0x2e7a563c, 0xa31ecca0),
+ TOBN(0xe56ffc4e, 0x5238a07e), TOBN(0x3d6c2966, 0x32ced854),
+ TOBN(0xe99d7d1a, 0xaf70b885), TOBN(0xafc3bad9, 0x2d686459),
+ TOBN(0x9c78bf46, 0x0cc8ba5b), TOBN(0x5a439519, 0x18955aa3),
+ TOBN(0xf8b517a8, 0x5fe4e314), TOBN(0xe60234d0, 0xfcb8906f),
+ TOBN(0xffe542ac, 0xf2061b23), TOBN(0x287e191f, 0x6b4cb59c),
+ TOBN(0x21857ddc, 0x09d877d8), TOBN(0x1c23478c, 0x14678941),
+ TOBN(0xbbf0c056, 0xb6e05ea4), TOBN(0x82da4b53, 0xb01594fe),
+ TOBN(0xf7526791, 0xfadb8608), TOBN(0x049e832d, 0x7b74cdf6),
+ TOBN(0xa43581cc, 0xc2b90a34), TOBN(0x73639eb8, 0x9360b10c),
+ TOBN(0x4fba331f, 0xe1e4a71b), TOBN(0x6ffd6b93, 0x8072f919),
+ TOBN(0x6e53271c, 0x65679032), TOBN(0x67206444, 0xf14272ce),
+ TOBN(0xc0f734a3, 0xb2335834), TOBN(0x9526205a, 0x90ef6860),
+ TOBN(0xcb8be717, 0x04e2bb0d), TOBN(0x2418871e, 0x02f383fa),
+ TOBN(0xd7177681, 0x4082c157), TOBN(0xcc914ad0, 0x29c20073),
+ TOBN(0xf186c1eb, 0xe587e728), TOBN(0x6fdb3c22, 0x61bcd5fd),
+ TOBN(0x30d014a6, 0xf2f9f8e9), TOBN(0x963ece23, 0x4fec49d2),
+ TOBN(0x862025c5, 0x9605a8d9), TOBN(0x39874445, 0x19f8929a),
+ TOBN(0x01b6ff65, 0x12bf476a), TOBN(0x598a64d8, 0x09cf7d91),
+ TOBN(0xd7ec7749, 0x93be56ca), TOBN(0x10899785, 0xcbb33615),
+ TOBN(0xb8a092fd, 0x02eee3ad), TOBN(0xa86b3d35, 0x30145270),
+ TOBN(0x323d98c6, 0x8512b675), TOBN(0x4b8bc785, 0x62ebb40f),
+ TOBN(0x7d301f54, 0x413f9cde), TOBN(0xa5e4fb4f, 0x2bab5664),
+ TOBN(0x1d2b252d, 0x1cbfec23), TOBN(0xfcd576bb, 0xe177120d),
+ TOBN(0x04427d3e, 0x83731a34), TOBN(0x2bb9028e, 0xed836e8e),
+ TOBN(0xb36acff8, 0xb612ca7c), TOBN(0xb88fe5ef, 0xd3d9c73a),
+ TOBN(0xbe2a6bc6, 0xedea4eb3), TOBN(0x43b93133, 0x488eec77),
+ TOBN(0xf41ff566, 0xb17106e1), TOBN(0x469e9172, 0x654efa32),
+ TOBN(0xb4480f04, 0x41c23fa3), TOBN(0xb4712eb0, 0xc1989a2e),
+ TOBN(0x3ccbba0f, 0x93a29ca7), TOBN(0x6e205c14, 0xd619428c),
+ TOBN(0x90db7957, 0xb3641686), TOBN(0x0432691d, 0x45ac8b4e),
+ TOBN(0x07a759ac, 0xf64e0350), TOBN(0x0514d89c, 0x9c972517),
+ TOBN(0x1701147f, 0xa8e67fc3), TOBN(0x9e2e0b8b, 0xab2085be),
+ TOBN(0xd5651824, 0xac284e57), TOBN(0x890d4325, 0x74893664),
+ TOBN(0x8a7c5e6e, 0xc55e68a3), TOBN(0xbf12e90b, 0x4339c85a),
+ TOBN(0x31846b85, 0xf922b655), TOBN(0x9a54ce4d, 0x0bf4d700),
+ TOBN(0xd7f4e83a, 0xf1a14295), TOBN(0x916f955c, 0xb285d4f9),
+ TOBN(0xe57bb0e0, 0x99ffdaba), TOBN(0x28a43034, 0xeab0d152),
+ TOBN(0x0a36ffa2, 0xb8a9cef8), TOBN(0x5517407e, 0xb9ec051a),
+ TOBN(0x9c796096, 0xea68e672), TOBN(0x853db5fb, 0xfb3c77fb),
+ TOBN(0x21474ba9, 0xe864a51a), TOBN(0x6c267699, 0x6e8a1b8b),
+ TOBN(0x7c823626, 0x94120a28), TOBN(0xe61e9a48, 0x8383a5db),
+ TOBN(0x7dd75003, 0x9f84216d), TOBN(0xab020d07, 0xad43cd85),
+ TOBN(0x9437ae48, 0xda12c659), TOBN(0x6449c2eb, 0xe65452ad),
+ TOBN(0xcc7c4c1c, 0x2cf9d7c1), TOBN(0x1320886a, 0xee95e5ab),
+ TOBN(0xbb7b9056, 0xbeae170c), TOBN(0xc8a5b250, 0xdbc0d662),
+ TOBN(0x4ed81432, 0xc11d2303), TOBN(0x7da66912, 0x1f03769f),
+ TOBN(0x3ac7a5fd, 0x84539828), TOBN(0x14dada94, 0x3bccdd02),
+ TOBN(0x8b84c321, 0x7ef6b0d1), TOBN(0x52a9477a, 0x7c933f22),
+ TOBN(0x5ef6728a, 0xfd440b82), TOBN(0x5c3bd859, 0x6ce4bd5e),
+ TOBN(0x918b80f5, 0xf22c2d3e), TOBN(0x368d5040, 0xb7bb6cc5),
+ TOBN(0xb66142a1, 0x2695a11c), TOBN(0x60ac583a, 0xeb19ea70),
+ TOBN(0x317cbb98, 0x0eab2437), TOBN(0x8cc08c55, 0x5e2654c8),
+ TOBN(0xfe2d6520, 0xe6d8307f), TOBN(0xe9f147f3, 0x57428993),
+ TOBN(0x5f9c7d14, 0xd2fd6cf1), TOBN(0xa3ecd064, 0x2d4fcbb0),
+ TOBN(0xad83fef0, 0x8e7341f7), TOBN(0x643f23a0, 0x3a63115c),
+ TOBN(0xd38a78ab, 0xe65ab743), TOBN(0xbf7c75b1, 0x35edc89c),
+ TOBN(0x3dd8752e, 0x530df568), TOBN(0xf85c4a76, 0xe308c682),
+ TOBN(0x4c9955b2, 0xe68acf37), TOBN(0xa544df3d, 0xab32af85),
+ TOBN(0x4b8ec3f5, 0xa25cf493), TOBN(0x4d8f2764, 0x1a622feb),
+ TOBN(0x7bb4f7aa, 0xf0dcbc49), TOBN(0x7de551f9, 0x70bbb45b),
+ TOBN(0xcfd0f3e4, 0x9f2ca2e5), TOBN(0xece58709, 0x1f5c76ef),
+ TOBN(0x32920edd, 0x167d79ae), TOBN(0x039df8a2, 0xfa7d7ec1),
+ TOBN(0xf46206c0, 0xbb30af91), TOBN(0x1ff5e2f5, 0x22676b59),
+ TOBN(0x11f4a039, 0x6ea51d66), TOBN(0x506c1445, 0x807d7a26),
+ TOBN(0x60da5705, 0x755a9b24), TOBN(0x8fc8cc32, 0x1f1a319e),
+ TOBN(0x83642d4d, 0x9433d67d), TOBN(0x7fa5cb8f, 0x6a7dd296),
+ TOBN(0x576591db, 0x9b7bde07), TOBN(0x13173d25, 0x419716fb),
+ TOBN(0xea30599d, 0xd5b340ff), TOBN(0xfc6b5297, 0xb0fe76c5),
+ TOBN(0x1c6968c8, 0xab8f5adc), TOBN(0xf723c7f5, 0x901c928d),
+ TOBN(0x4203c321, 0x9773d402), TOBN(0xdf7c6aa3, 0x1b51dd47),
+ TOBN(0x3d49e37a, 0x552be23c), TOBN(0x57febee8, 0x0b5a6e87),
+ TOBN(0xc5ecbee4, 0x7bd8e739), TOBN(0x79d44994, 0xae63bf75),
+ TOBN(0x168bd00f, 0x38fb8923), TOBN(0x75d48ee4, 0xd0533130),
+ TOBN(0x554f77aa, 0xdb5cdf33), TOBN(0x3396e896, 0x3c696769),
+ TOBN(0x2fdddbf2, 0xd3fd674e), TOBN(0xbbb8f6ee, 0x99d0e3e5),
+ TOBN(0x51b90651, 0xcbae2f70), TOBN(0xefc4bc05, 0x93aaa8eb),
+ TOBN(0x8ecd8689, 0xdd1df499), TOBN(0x1aee99a8, 0x22f367a5),
+ TOBN(0x95d485b9, 0xae8274c5), TOBN(0x6c14d445, 0x7d30b39c),
+ TOBN(0xbafea90b, 0xbcc1ef81), TOBN(0x7c5f317a, 0xa459a2ed),
+ TOBN(0x01211075, 0x4ef44227), TOBN(0xa17bed6e, 0xdc20f496),
+ TOBN(0x0cdfe424, 0x819853cd), TOBN(0x13793298, 0xf71e2ce7),
+ TOBN(0x3c1f3078, 0xdbbe307b), TOBN(0x6dd1c20e, 0x76ee9936),
+ TOBN(0x23ee4b57, 0x423caa20), TOBN(0x4ac3793b, 0x8efb840e),
+ TOBN(0x934438eb, 0xed1f8ca0), TOBN(0x3e546658, 0x4ebb25a2),
+ TOBN(0xc415af0e, 0xc069896f), TOBN(0xc13eddb0, 0x9a5aa43d),
+ TOBN(0x7a04204f, 0xd49eb8f6), TOBN(0xd0d5bdfc, 0xd74f1670),
+ TOBN(0x3697e286, 0x56fc0558), TOBN(0x10207371, 0x01cebade),
+ TOBN(0x5f87e690, 0x0647a82b), TOBN(0x908e0ed4, 0x8f40054f),
+ TOBN(0xa9f633d4, 0x79853803), TOBN(0x8ed13c9a, 0x4a28b252),
+ TOBN(0x3e2ef676, 0x1f460f64), TOBN(0x53930b9b, 0x36d06336),
+ TOBN(0x347073ac, 0x8fc4979b), TOBN(0x84380e0e, 0x5ecd5597),
+ TOBN(0xe3b22c6b, 0xc4fe3c39), TOBN(0xba4a8153, 0x6c7bebdf),
+ TOBN(0xf23ab6b7, 0x25693459), TOBN(0x53bc3770, 0x14922b11),
+ TOBN(0x4645c8ab, 0x5afc60db), TOBN(0xaa022355, 0x20b9f2a3),
+ TOBN(0x52a2954c, 0xce0fc507), TOBN(0x8c2731bb, 0x7ce1c2e7),
+ TOBN(0xf39608ab, 0x18a0339d), TOBN(0xac7a658d, 0x3735436c),
+ TOBN(0xb22c2b07, 0xcd992b4f), TOBN(0x4e83daec, 0xf40dcfd4),
+ TOBN(0x8a34c7be, 0x2f39ea3e), TOBN(0xef0c005f, 0xb0a56d2e),
+ TOBN(0x62731f6a, 0x6edd8038), TOBN(0x5721d740, 0x4e3cb075),
+ TOBN(0x1ea41511, 0xfbeeee1b), TOBN(0xd1ef5e73, 0xef1d0c05),
+ TOBN(0x42feefd1, 0x73c07d35), TOBN(0xe530a00a, 0x8a329493),
+ TOBN(0x5d55b7fe, 0xf15ebfb0), TOBN(0x549de03c, 0xd322491a),
+ TOBN(0xf7b5f602, 0x745b3237), TOBN(0x3632a3a2, 0x1ab6e2b6),
+ TOBN(0x0d3bba89, 0x0ef59f78), TOBN(0x0dfc6443, 0xc9e52b9a),
+ TOBN(0x1dc79699, 0x72631447), TOBN(0xef033917, 0xb3be20b1),
+ TOBN(0x0c92735d, 0xb1383948), TOBN(0xc1fc29a2, 0xc0dd7d7d),
+ TOBN(0x6485b697, 0x403ed068), TOBN(0x13bfaab3, 0xaac93bdc),
+ TOBN(0x410dc6a9, 0x0deeaf52), TOBN(0xb003fb02, 0x4c641c15),
+ TOBN(0x1384978c, 0x5bc504c4), TOBN(0x37640487, 0x864a6a77),
+ TOBN(0x05991bc6, 0x222a77da), TOBN(0x62260a57, 0x5e47eb11),
+ TOBN(0xc7af6613, 0xf21b432c), TOBN(0x22f3acc9, 0xab4953e9),
+ TOBN(0x52934922, 0x8e41d155), TOBN(0x4d024568, 0x3ac059ef),
+ TOBN(0xb0201755, 0x4d884411), TOBN(0xce8055cf, 0xa59a178f),
+ TOBN(0xcd77d1af, 0xf6204549), TOBN(0xa0a00a3e, 0xc7066759),
+ TOBN(0x471071ef, 0x0272c229), TOBN(0x009bcf6b, 0xd3c4b6b0),
+ TOBN(0x2a2638a8, 0x22305177), TOBN(0xd51d59df, 0x41645bbf),
+ TOBN(0xa81142fd, 0xc0a7a3c0), TOBN(0xa17eca6d, 0x4c7063ee),
+ TOBN(0x0bb887ed, 0x60d9dcec), TOBN(0xd6d28e51, 0x20ad2455),
+ TOBN(0xebed6308, 0xa67102ba), TOBN(0x042c3114, 0x8bffa408),
+ TOBN(0xfd099ac5, 0x8aa68e30), TOBN(0x7a6a3d7c, 0x1483513e),
+ TOBN(0xffcc6b75, 0xba2d8f0c), TOBN(0x54dacf96, 0x1e78b954),
+ TOBN(0xf645696f, 0xa4a9af89), TOBN(0x3a411940, 0x06ac98ec),
+ TOBN(0x41b8b3f6, 0x22a67a20), TOBN(0x2d0b1e0f, 0x99dec626),
+ TOBN(0x27c89192, 0x40be34e8), TOBN(0xc7162b37, 0x91907f35),
+ TOBN(0x90188ec1, 0xa956702b), TOBN(0xca132f7d, 0xdf93769c),
+ TOBN(0x3ece44f9, 0x0e2025b4), TOBN(0x67aaec69, 0x0c62f14c),
+ TOBN(0xad741418, 0x22e3cc11), TOBN(0xcf9b75c3, 0x7ff9a50e),
+ TOBN(0x02fa2b16, 0x4d348272), TOBN(0xbd99d61a, 0x9959d56d),
+ TOBN(0xbc4f19db, 0x18762916), TOBN(0xcc7cce50, 0x49c1ac80),
+ TOBN(0x4d59ebaa, 0xd846bd83), TOBN(0x8775a9dc, 0xa9202849),
+ TOBN(0x07ec4ae1, 0x6e1f4ca9), TOBN(0x27eb5875, 0xba893f11),
+ TOBN(0x00284d51, 0x662cc565), TOBN(0x82353a6b, 0x0db4138d),
+ TOBN(0xd9c7aaaa, 0xaa32a594), TOBN(0xf5528b5e, 0xa5669c47),
+ TOBN(0xf3220231, 0x2f23c5ff), TOBN(0xe3e8147a, 0x6affa3a1),
+ TOBN(0xfb423d5c, 0x202ddda0), TOBN(0x3d6414ac, 0x6b871bd4),
+ TOBN(0x586f82e1, 0xa51a168a), TOBN(0xb712c671, 0x48ae5448),
+ TOBN(0x9a2e4bd1, 0x76233eb8), TOBN(0x0188223a, 0x78811ca9),
+ TOBN(0x553c5e21, 0xf7c18de1), TOBN(0x7682e451, 0xb27bb286),
+ TOBN(0x3ed036b3, 0x0e51e929), TOBN(0xf487211b, 0xec9cb34f),
+ TOBN(0x0d094277, 0x0c24efc8), TOBN(0x0349fd04, 0xbef737a4),
+ TOBN(0x6d1c9dd2, 0x514cdd28), TOBN(0x29c135ff, 0x30da9521),
+ TOBN(0xea6e4508, 0xf78b0b6f), TOBN(0x176f5dd2, 0x678c143c),
+ TOBN(0x08148418, 0x4be21e65), TOBN(0x27f7525c, 0xe7df38c4),
+ TOBN(0x1fb70e09, 0x748ab1a4), TOBN(0x9cba50a0, 0x5efe4433),
+ TOBN(0x7846c7a6, 0x15f75af2), TOBN(0x2a7c2c57, 0x5ee73ea8),
+ TOBN(0x42e566a4, 0x3f0a449a), TOBN(0x45474c3b, 0xad90fc3d),
+ TOBN(0x7447be3d, 0x8b61d057), TOBN(0x3e9d1cf1, 0x3a4ec092),
+ TOBN(0x1603e453, 0xf380a6e6), TOBN(0x0b86e431, 0x9b1437c2),
+ TOBN(0x7a4173f2, 0xef29610a), TOBN(0x8fa729a7, 0xf03d57f7),
+ TOBN(0x3e186f6e, 0x6c9c217e), TOBN(0xbe1d3079, 0x91919524),
+ TOBN(0x92a62a70, 0x153d4fb1), TOBN(0x32ed3e34, 0xd68c2f71),
+ TOBN(0xd785027f, 0x9eb1a8b7), TOBN(0xbc37eb77, 0xc5b22fe8),
+ TOBN(0x466b34f0, 0xb9d6a191), TOBN(0x008a89af, 0x9a05f816),
+ TOBN(0x19b028fb, 0x7d42c10a), TOBN(0x7fe8c92f, 0x49b3f6b8),
+ TOBN(0x58907cc0, 0xa5a0ade3), TOBN(0xb3154f51, 0x559d1a7c),
+ TOBN(0x5066efb6, 0xd9790ed6), TOBN(0xa77a0cbc, 0xa6aa793b),
+ TOBN(0x1a915f3c, 0x223e042e), TOBN(0x1c5def04, 0x69c5874b),
+ TOBN(0x0e830078, 0x73b6c1da), TOBN(0x55cf85d2, 0xfcd8557a),
+ TOBN(0x0f7c7c76, 0x0460f3b1), TOBN(0x87052acb, 0x46e58063),
+ TOBN(0x09212b80, 0x907eae66), TOBN(0x3cb068e0, 0x4d721c89),
+ TOBN(0xa87941ae, 0xdd45ac1c), TOBN(0xde8d5c0d, 0x0daa0dbb),
+ TOBN(0xda421fdc, 0xe3502e6e), TOBN(0xc8944201, 0x4d89a084),
+ TOBN(0x7307ba5e, 0xf0c24bfb), TOBN(0xda212beb, 0x20bde0ef),
+ TOBN(0xea2da24b, 0xf82ce682), TOBN(0x058d3816, 0x07f71fe4),
+ TOBN(0x35a02462, 0x5ffad8de), TOBN(0xcd7b05dc, 0xaadcefab),
+ TOBN(0xd442f8ed, 0x1d9f54ec), TOBN(0x8be3d618, 0xb2d3b5ca),
+ TOBN(0xe2220ed0, 0xe06b2ce2), TOBN(0x82699a5f, 0x1b0da4c0),
+ TOBN(0x3ff106f5, 0x71c0c3a7), TOBN(0x8f580f5a, 0x0d34180c),
+ TOBN(0x4ebb120e, 0x22d7d375), TOBN(0x5e5782cc, 0xe9513675),
+ TOBN(0x2275580c, 0x99c82a70), TOBN(0xe8359fbf, 0x15ea8c4c),
+ TOBN(0x53b48db8, 0x7b415e70), TOBN(0xaacf2240, 0x100c6014),
+ TOBN(0x9faaccf5, 0xe4652f1d), TOBN(0xbd6fdd2a, 0xd56157b2),
+ TOBN(0xa4f4fb1f, 0x6261ec50), TOBN(0x244e55ad, 0x476bcd52),
+ TOBN(0x881c9305, 0x047d320b), TOBN(0x1ca983d5, 0x6181263f),
+ TOBN(0x354e9a44, 0x278fb8ee), TOBN(0xad2dbc0f, 0x396e4964),
+ TOBN(0x723f3aa2, 0x9268b3de), TOBN(0x0d1ca29a, 0xe6e0609a),
+ TOBN(0x794866aa, 0x6cf44252), TOBN(0x0b59f3e3, 0x01af87ed),
+ TOBN(0xe234e5ff, 0x7f4a6c51), TOBN(0xa8768fd2, 0x61dc2f7e),
+ TOBN(0xdafc7332, 0x0a94d81f), TOBN(0xd7f84282, 0x06938ce1),
+ TOBN(0xae0b3c0e, 0x0546063e), TOBN(0x7fbadcb2, 0x5d61abc6),
+ TOBN(0xd5d7a2c9, 0x369ac400), TOBN(0xa5978d09, 0xae67d10c),
+ TOBN(0x290f211e, 0x4f85eaac), TOBN(0xe61e2ad1, 0xfacac681),
+ TOBN(0xae125225, 0x388384cd), TOBN(0xa7fb68e9, 0xccfde30f),
+ TOBN(0x7a59b936, 0x3daed4c2), TOBN(0x80a9aa40, 0x2606f789),
+ TOBN(0xb40c1ea5, 0xf6a6d90a), TOBN(0x948364d3, 0x514d5885),
+ TOBN(0x062ebc60, 0x70985182), TOBN(0xa6db5b0e, 0x33310895),
+ TOBN(0x64a12175, 0xe329c2f5), TOBN(0xc5f25bd2, 0x90ea237e),
+ TOBN(0x7915c524, 0x2d0a4c23), TOBN(0xeb5d26e4, 0x6bb3cc52),
+ TOBN(0x369a9116, 0xc09e2c92), TOBN(0x0c527f92, 0xcf182cf8),
+ TOBN(0x9e591938, 0x2aede0ac), TOBN(0xb2922208, 0x6cc34939),
+ TOBN(0x3c9d8962, 0x99a34361), TOBN(0x3c81836d, 0xc1905fe6),
+ TOBN(0x4bfeb57f, 0xa001ec5a), TOBN(0xe993f5bb, 0xa0dc5dba),
+ TOBN(0x47884109, 0x724a1380), TOBN(0x8a0369ab, 0x32fe9a04),
+ TOBN(0xea068d60, 0x8c927db8), TOBN(0xbf5f37cf, 0x94655741),
+ TOBN(0x47d402a2, 0x04b6c7ea), TOBN(0x4551c295, 0x6af259cb),
+ TOBN(0x698b71e7, 0xed77ee8b), TOBN(0xbddf7bd0, 0xf309d5c7),
+ TOBN(0x6201c22c, 0x34e780ca), TOBN(0xab04f7d8, 0x4c295ef4),
+ TOBN(0x1c947294, 0x4313a8ce), TOBN(0xe532e4ac, 0x92ca4cfe),
+ TOBN(0x89738f80, 0xd0a7a97a), TOBN(0xec088c88, 0xa580fd5b),
+ TOBN(0x612b1ecc, 0x42ce9e51), TOBN(0x8f9840fd, 0xb25fdd2a),
+ TOBN(0x3cda78c0, 0x01e7f839), TOBN(0x546b3d3a, 0xece05480),
+ TOBN(0x271719a9, 0x80d30916), TOBN(0x45497107, 0x584c20c4),
+ TOBN(0xaf8f9478, 0x5bc78608), TOBN(0x28c7d484, 0x277e2a4c),
+ TOBN(0xfce01767, 0x88a2ffe4), TOBN(0xdc506a35, 0x28e169a5),
+ TOBN(0x0ea10861, 0x7af9c93a), TOBN(0x1ed24361, 0x03fa0e08),
+ TOBN(0x96eaaa92, 0xa3d694e7), TOBN(0xc0f43b4d, 0xef50bc74),
+ TOBN(0xce6aa58c, 0x64114db4), TOBN(0x8218e8ea, 0x7c000fd4),
+ TOBN(0xac815dfb, 0x185f8844), TOBN(0xcd7e90cb, 0x1557abfb),
+ TOBN(0x23d16655, 0xafbfecdf), TOBN(0x80f3271f, 0x085cac4a),
+ TOBN(0x7fc39aa7, 0xd0e62f47), TOBN(0x88d519d1, 0x460a48e5),
+ TOBN(0x59559ac4, 0xd28f101e), TOBN(0x7981d9e9, 0xca9ae816),
+ TOBN(0x5c38652c, 0x9ac38203), TOBN(0x86eaf87f, 0x57657fe5),
+ TOBN(0x568fc472, 0xe21f5416), TOBN(0x2afff39c, 0xe7e597b5),
+ TOBN(0x3adbbb07, 0x256d4eab), TOBN(0x22598692, 0x8285ab89),
+ TOBN(0x35f8112a, 0x041caefe), TOBN(0x95df02e3, 0xa5064c8b),
+ TOBN(0x4d63356e, 0xc7004bf3), TOBN(0x230a08f4, 0xdb83c7de),
+ TOBN(0xca27b270, 0x8709a7b7), TOBN(0x0d1c4cc4, 0xcb9abd2d),
+ TOBN(0x8a0bc66e, 0x7550fee8), TOBN(0x369cd4c7, 0x9cf7247e),
+ TOBN(0x75562e84, 0x92b5b7e7), TOBN(0x8fed0da0, 0x5802af7b),
+ TOBN(0x6a7091c2, 0xe48fb889), TOBN(0x26882c13, 0x7b8a9d06),
+ TOBN(0xa2498663, 0x1b82a0e2), TOBN(0x844ed736, 0x3518152d),
+ TOBN(0x282f476f, 0xd86e27c7), TOBN(0xa04edaca, 0x04afefdc),
+ TOBN(0x8b256ebc, 0x6119e34d), TOBN(0x56a413e9, 0x0787d78b),}
+ ,
+ {TOBN(0x82ee061d, 0x5a74be50), TOBN(0xe41781c4, 0xdea16ff5),
+ TOBN(0xe0b0c81e, 0x99bfc8a2), TOBN(0x624f4d69, 0x0b547e2d),
+ TOBN(0x3a83545d, 0xbdcc9ae4), TOBN(0x2573dbb6, 0x409b1e8e),
+ TOBN(0x482960c4, 0xa6c93539), TOBN(0xf01059ad, 0x5ae18798),
+ TOBN(0x715c9f97, 0x3112795f), TOBN(0xe8244437, 0x984e6ee1),
+ TOBN(0x55cb4858, 0xecb66bcd), TOBN(0x7c136735, 0xabaffbee),
+ TOBN(0x54661595, 0x5dbec38e), TOBN(0x51c0782c, 0x388ad153),
+ TOBN(0x9ba4c53a, 0xc6e0952f), TOBN(0x27e6782a, 0x1b21dfa8),
+ TOBN(0x682f903d, 0x4ed2dbc2), TOBN(0x0eba59c8, 0x7c3b2d83),
+ TOBN(0x8e9dc84d, 0x9c7e9335), TOBN(0x5f9b21b0, 0x0eb226d7),
+ TOBN(0xe33bd394, 0xaf267bae), TOBN(0xaa86cc25, 0xbe2e15ae),
+ TOBN(0x4f0bf67d, 0x6a8ec500), TOBN(0x5846aa44, 0xf9630658),
+ TOBN(0xfeb09740, 0xe2c2bf15), TOBN(0x627a2205, 0xa9e99704),
+ TOBN(0xec8d73d0, 0xc2fbc565), TOBN(0x223eed8f, 0xc20c8de8),
+ TOBN(0x1ee32583, 0xa8363b49), TOBN(0x1a0b6cb9, 0xc9c2b0a6),
+ TOBN(0x49f7c3d2, 0x90dbc85c), TOBN(0xa8dfbb97, 0x1ef4c1ac),
+ TOBN(0xafb34d4c, 0x65c7c2ab), TOBN(0x1d4610e7, 0xe2c5ea84),
+ TOBN(0x893f6d1b, 0x973c4ab5), TOBN(0xa3cdd7e9, 0x945ba5c4),
+ TOBN(0x60514983, 0x064417ee), TOBN(0x1459b23c, 0xad6bdf2b),
+ TOBN(0x23b2c341, 0x5cf726c3), TOBN(0x3a829635, 0x32d6354a),
+ TOBN(0x294f901f, 0xab192c18), TOBN(0xec5fcbfe, 0x7030164f),
+ TOBN(0xe2e2fcb7, 0xe2246ba6), TOBN(0x1e7c88b3, 0x221a1a0c),
+ TOBN(0x72c7dd93, 0xc92d88c5), TOBN(0x41c2148e, 0x1106fb59),
+ TOBN(0x547dd4f5, 0xa0f60f14), TOBN(0xed9b52b2, 0x63960f31),
+ TOBN(0x6c8349eb, 0xb0a5b358), TOBN(0xb154c5c2, 0x9e7e2ed6),
+ TOBN(0xcad5eccf, 0xeda462db), TOBN(0xf2d6dbe4, 0x2de66b69),
+ TOBN(0x426aedf3, 0x8665e5b2), TOBN(0x488a8513, 0x7b7f5723),
+ TOBN(0x15cc43b3, 0x8bcbb386), TOBN(0x27ad0af3, 0xd791d879),
+ TOBN(0xc16c236e, 0x846e364f), TOBN(0x7f33527c, 0xdea50ca0),
+ TOBN(0xc4810775, 0x0926b86d), TOBN(0x6c2a3609, 0x0598e70c),
+ TOBN(0xa6755e52, 0xf024e924), TOBN(0xe0fa07a4, 0x9db4afca),
+ TOBN(0x15c3ce7d, 0x66831790), TOBN(0x5b4ef350, 0xa6cbb0d6),
+ TOBN(0x2c4aafc4, 0xb6205969), TOBN(0x42563f02, 0xf6c7854f),
+ TOBN(0x016aced5, 0x1d983b48), TOBN(0xfeb356d8, 0x99949755),
+ TOBN(0x8c2a2c81, 0xd1a39bd7), TOBN(0x8f44340f, 0xe6934ae9),
+ TOBN(0x148cf91c, 0x447904da), TOBN(0x7340185f, 0x0f51a926),
+ TOBN(0x2f8f00fb, 0x7409ab46), TOBN(0x057e78e6, 0x80e289b2),
+ TOBN(0x03e5022c, 0xa888e5d1), TOBN(0x3c87111a, 0x9dede4e2),
+ TOBN(0x5b9b0e1c, 0x7809460b), TOBN(0xe751c852, 0x71c9abc7),
+ TOBN(0x8b944e28, 0xc7cc1dc9), TOBN(0x4f201ffa, 0x1d3cfa08),
+ TOBN(0x02fc905c, 0x3e6721ce), TOBN(0xd52d70da, 0xd0b3674c),
+ TOBN(0x5dc2e5ca, 0x18810da4), TOBN(0xa984b273, 0x5c69dd99),
+ TOBN(0x63b92527, 0x84de5ca4), TOBN(0x2f1c9872, 0xc852dec4),
+ TOBN(0x18b03593, 0xc2e3de09), TOBN(0x19d70b01, 0x9813dc2f),
+ TOBN(0x42806b2d, 0xa6dc1d29), TOBN(0xd3030009, 0xf871e144),
+ TOBN(0xa1feb333, 0xaaf49276), TOBN(0xb5583b9e, 0xc70bc04b),
+ TOBN(0x1db0be78, 0x95695f20), TOBN(0xfc841811, 0x89d012b5),
+ TOBN(0x6409f272, 0x05f61643), TOBN(0x40d34174, 0xd5883128),
+ TOBN(0xd79196f5, 0x67419833), TOBN(0x6059e252, 0x863b7b08),
+ TOBN(0x84da1817, 0x1c56700c), TOBN(0x5758ee56, 0xb28d3ec4),
+ TOBN(0x7da2771d, 0x013b0ea6), TOBN(0xfddf524b, 0x54c5e9b9),
+ TOBN(0x7df4faf8, 0x24305d80), TOBN(0x58f5c1bf, 0x3a97763f),
+ TOBN(0xa5af37f1, 0x7c696042), TOBN(0xd4cba22c, 0x4a2538de),
+ TOBN(0x211cb995, 0x9ea42600), TOBN(0xcd105f41, 0x7b069889),
+ TOBN(0xb1e1cf19, 0xddb81e74), TOBN(0x472f2d89, 0x5157b8ca),
+ TOBN(0x086fb008, 0xee9db885), TOBN(0x365cd570, 0x0f26d131),
+ TOBN(0x284b02bb, 0xa2be7053), TOBN(0xdcbbf7c6, 0x7ab9a6d6),
+ TOBN(0x4425559c, 0x20f7a530), TOBN(0x961f2dfa, 0x188767c8),
+ TOBN(0xe2fd9435, 0x70dc80c4), TOBN(0x104d6b63, 0xf0784120),
+ TOBN(0x7f592bc1, 0x53567122), TOBN(0xf6bc1246, 0xf688ad77),
+ TOBN(0x05214c05, 0x0f15dde9), TOBN(0xa47a76a8, 0x0d5f2b82),
+ TOBN(0xbb254d30, 0x62e82b62), TOBN(0x11a05fe0, 0x3ec955ee),
+ TOBN(0x7eaff46e, 0x9d529b36), TOBN(0x55ab1301, 0x8f9e3df6),
+ TOBN(0xc463e371, 0x99317698), TOBN(0xfd251438, 0xccda47ad),
+ TOBN(0xca9c3547, 0x23d695ea), TOBN(0x48ce626e, 0x16e589b5),
+ TOBN(0x6b5b64c7, 0xb187d086), TOBN(0xd02e1794, 0xb2207948),
+ TOBN(0x8b58e98f, 0x7198111d), TOBN(0x90ca6305, 0xdcf9c3cc),
+ TOBN(0x5691fe72, 0xf34089b0), TOBN(0x60941af1, 0xfc7c80ff),
+ TOBN(0xa09bc0a2, 0x22eb51e5), TOBN(0xc0bb7244, 0xaa9cf09a),
+ TOBN(0x36a8077f, 0x80159f06), TOBN(0x8b5c989e, 0xdddc560e),
+ TOBN(0x19d2f316, 0x512e1f43), TOBN(0x02eac554, 0xad08ff62),
+ TOBN(0x012ab84c, 0x07d20b4e), TOBN(0x37d1e115, 0xd6d4e4e1),
+ TOBN(0xb6443e1a, 0xab7b19a8), TOBN(0xf08d067e, 0xdef8cd45),
+ TOBN(0x63adf3e9, 0x685e03da), TOBN(0xcf15a10e, 0x4792b916),
+ TOBN(0xf44bcce5, 0xb738a425), TOBN(0xebe131d5, 0x9636b2fd),
+ TOBN(0x94068841, 0x7850d605), TOBN(0x09684eaa, 0xb40d749d),
+ TOBN(0x8c3c669c, 0x72ba075b), TOBN(0x89f78b55, 0xba469015),
+ TOBN(0x5706aade, 0x3e9f8ba8), TOBN(0x6d8bd565, 0xb32d7ed7),
+ TOBN(0x25f4e63b, 0x805f08d6), TOBN(0x7f48200d, 0xc3bcc1b5),
+ TOBN(0x4e801968, 0xb025d847), TOBN(0x74afac04, 0x87cbe0a8),
+ TOBN(0x43ed2c2b, 0x7e63d690), TOBN(0xefb6bbf0, 0x0223cdb8),
+ TOBN(0x4fec3cae, 0x2884d3fe), TOBN(0x065ecce6, 0xd75e25a4),
+ TOBN(0x6c2294ce, 0x69f79071), TOBN(0x0d9a8e5f, 0x044b8666),
+ TOBN(0x5009f238, 0x17b69d8f), TOBN(0x3c29f8fe, 0xc5dfdaf7),
+ TOBN(0x9067528f, 0xebae68c4), TOBN(0x5b385632, 0x30c5ba21),
+ TOBN(0x540df119, 0x1fdd1aec), TOBN(0xcf37825b, 0xcfba4c78),
+ TOBN(0x77eff980, 0xbeb11454), TOBN(0x40a1a991, 0x60c1b066),
+ TOBN(0xe8018980, 0xf889a1c7), TOBN(0xb9c52ae9, 0x76c24be0),
+ TOBN(0x05fbbcce, 0x45650ef4), TOBN(0xae000f10, 0x8aa29ac7),
+ TOBN(0x884b7172, 0x4f04c470), TOBN(0x7cd4fde2, 0x19bb5c25),
+ TOBN(0x6477b22a, 0xe8840869), TOBN(0xa8868859, 0x5fbd0686),
+ TOBN(0xf23cc02e, 0x1116dfba), TOBN(0x76cd563f, 0xd87d7776),
+ TOBN(0xe2a37598, 0xa9d82abf), TOBN(0x5f188ccb, 0xe6c170f5),
+ TOBN(0x81682200, 0x5066b087), TOBN(0xda22c212, 0xc7155ada),
+ TOBN(0x151e5d3a, 0xfbddb479), TOBN(0x4b606b84, 0x6d715b99),
+ TOBN(0x4a73b54b, 0xf997cb2e), TOBN(0x9a1bfe43, 0x3ecd8b66),
+ TOBN(0x1c312809, 0x2a67d48a), TOBN(0xcd6a671e, 0x031fa9e2),
+ TOBN(0xbec3312a, 0x0e43a34a), TOBN(0x1d935639, 0x55ef47d3),
+ TOBN(0x5ea02489, 0x8fea73ea), TOBN(0x8247b364, 0xa035afb2),
+ TOBN(0xb58300a6, 0x5265b54c), TOBN(0x3286662f, 0x722c7148),
+ TOBN(0xb77fd76b, 0xb4ec4c20), TOBN(0xf0a12fa7, 0x0f3fe3fd),
+ TOBN(0xf845bbf5, 0x41d8c7e8), TOBN(0xe4d969ca, 0x5ec10aa8),
+ TOBN(0x4c0053b7, 0x43e232a3), TOBN(0xdc7a3fac, 0x37f8a45a),
+ TOBN(0x3c4261c5, 0x20d81c8f), TOBN(0xfd4b3453, 0xb00eab00),
+ TOBN(0x76d48f86, 0xd36e3062), TOBN(0x626c5277, 0xa143ff02),
+ TOBN(0x538174de, 0xaf76f42e), TOBN(0x2267aa86, 0x6407ceac),
+ TOBN(0xfad76351, 0x72e572d5), TOBN(0xab861af7, 0xba7330eb),
+ TOBN(0xa0a1c8c7, 0x418d8657), TOBN(0x988821cb, 0x20289a52),
+ TOBN(0x79732522, 0xcccc18ad), TOBN(0xaadf3f8d, 0xf1a6e027),
+ TOBN(0xf7382c93, 0x17c2354d), TOBN(0x5ce1680c, 0xd818b689),
+ TOBN(0x359ebbfc, 0xd9ecbee9), TOBN(0x4330689c, 0x1cae62ac),
+ TOBN(0xb55ce5b4, 0xc51ac38a), TOBN(0x7921dfea, 0xfe238ee8),
+ TOBN(0x3972bef8, 0x271d1ca5), TOBN(0x3e423bc7, 0xe8aabd18),
+ TOBN(0x57b09f3f, 0x44a3e5e3), TOBN(0x5da886ae, 0x7b444d66),
+ TOBN(0x68206634, 0xa9964375), TOBN(0x356a2fa3, 0x699cd0ff),
+ TOBN(0xaf0faa24, 0xdba515e9), TOBN(0x536e1f5c, 0xb321d79a),
+ TOBN(0xd3b9913a, 0x5c04e4ea), TOBN(0xd549dcfe, 0xd6f11513),
+ TOBN(0xee227bf5, 0x79fd1d94), TOBN(0x9f35afee, 0xb43f2c67),
+ TOBN(0xd2638d24, 0xf1314f53), TOBN(0x62baf948, 0xcabcd822),
+ TOBN(0x5542de29, 0x4ef48db0), TOBN(0xb3eb6a04, 0xfc5f6bb2),
+ TOBN(0x23c110ae, 0x1208e16a), TOBN(0x1a4d15b5, 0xf8363e24),
+ TOBN(0x30716844, 0x164be00b), TOBN(0xa8e24824, 0xf6f4690d),
+ TOBN(0x548773a2, 0x90b170cf), TOBN(0xa1bef331, 0x42f191f4),
+ TOBN(0x70f418d0, 0x9247aa97), TOBN(0xea06028e, 0x48be9147),
+ TOBN(0xe13122f3, 0xdbfb894e), TOBN(0xbe9b79f6, 0xce274b18),
+ TOBN(0x85a49de5, 0xca58aadf), TOBN(0x24957758, 0x11487351),
+ TOBN(0x111def61, 0xbb939099), TOBN(0x1d6a974a, 0x26d13694),
+ TOBN(0x4474b4ce, 0xd3fc253b), TOBN(0x3a1485e6, 0x4c5db15e),
+ TOBN(0xe79667b4, 0x147c15b4), TOBN(0xe34f553b, 0x7bc61301),
+ TOBN(0x032b80f8, 0x17094381), TOBN(0x55d8bafd, 0x723eaa21),
+ TOBN(0x5a987995, 0xf1c0e74e), TOBN(0x5a9b292e, 0xebba289c),
+ TOBN(0x413cd4b2, 0xeb4c8251), TOBN(0x98b5d243, 0xd162db0a),
+ TOBN(0xbb47bf66, 0x68342520), TOBN(0x08d68949, 0xbaa862d1),
+ TOBN(0x11f349c7, 0xe906abcd), TOBN(0x454ce985, 0xed7bf00e),
+ TOBN(0xacab5c9e, 0xb55b803b), TOBN(0xb03468ea, 0x31e3c16d),
+ TOBN(0x5c24213d, 0xd273bf12), TOBN(0x211538eb, 0x71587887),
+ TOBN(0x198e4a2f, 0x731dea2d), TOBN(0xd5856cf2, 0x74ed7b2a),
+ TOBN(0x86a632eb, 0x13a664fe), TOBN(0x932cd909, 0xbda41291),
+ TOBN(0x850e95d4, 0xc0c4ddc0), TOBN(0xc0f422f8, 0x347fc2c9),
+ TOBN(0xe68cbec4, 0x86076bcb), TOBN(0xf9e7c0c0, 0xcd6cd286),
+ TOBN(0x65994ddb, 0x0f5f27ca), TOBN(0xe85461fb, 0xa80d59ff),
+ TOBN(0xff05481a, 0x66601023), TOBN(0xc665427a, 0xfc9ebbfb),
+ TOBN(0xb0571a69, 0x7587fd52), TOBN(0x935289f8, 0x8d49efce),
+ TOBN(0x61becc60, 0xea420688), TOBN(0xb22639d9, 0x13a786af),
+ TOBN(0x1a8e6220, 0x361ecf90), TOBN(0x001f23e0, 0x25506463),
+ TOBN(0xe4ae9b5d, 0x0a5c2b79), TOBN(0xebc9cdad, 0xd8149db5),
+ TOBN(0xb33164a1, 0x934aa728), TOBN(0x750eb00e, 0xae9b60f3),
+ TOBN(0x5a91615b, 0x9b9cfbfd), TOBN(0x97015cbf, 0xef45f7f6),
+ TOBN(0xb462c4a5, 0xbf5151df), TOBN(0x21adcc41, 0xb07118f2),
+ TOBN(0xd60c545b, 0x043fa42c), TOBN(0xfc21aa54, 0xe96be1ab),
+ TOBN(0xe84bc32f, 0x4e51ea80), TOBN(0x3dae45f0, 0x259b5d8d),
+ TOBN(0xbb73c7eb, 0xc38f1b5e), TOBN(0xe405a74a, 0xe8ae617d),
+ TOBN(0xbb1ae9c6, 0x9f1c56bd), TOBN(0x8c176b98, 0x49f196a4),
+ TOBN(0xc448f311, 0x6875092b), TOBN(0xb5afe3de, 0x9f976033),
+ TOBN(0xa8dafd49, 0x145813e5), TOBN(0x687fc4d9, 0xe2b34226),
+ TOBN(0xf2dfc92d, 0x4c7ff57f), TOBN(0x004e3fc1, 0x401f1b46),
+ TOBN(0x5afddab6, 0x1430c9ab), TOBN(0x0bdd41d3, 0x2238e997),
+ TOBN(0xf0947430, 0x418042ae), TOBN(0x71f9adda, 0xcdddc4cb),
+ TOBN(0x7090c016, 0xc52dd907), TOBN(0xd9bdf44d, 0x29e2047f),
+ TOBN(0xe6f1fe80, 0x1b1011a6), TOBN(0xb63accbc, 0xd9acdc78),
+ TOBN(0xcfc7e235, 0x1272a95b), TOBN(0x0c667717, 0xa6276ac8),
+ TOBN(0x3c0d3709, 0xe2d7eef7), TOBN(0x5add2b06, 0x9a685b3e),
+ TOBN(0x363ad32d, 0x14ea5d65), TOBN(0xf8e01f06, 0x8d7dd506),
+ TOBN(0xc9ea2213, 0x75b4aac6), TOBN(0xed2a2bf9, 0x0d353466),
+ TOBN(0x439d79b5, 0xe9d3a7c3), TOBN(0x8e0ee5a6, 0x81b7f34b),
+ TOBN(0xcf3dacf5, 0x1dc4ba75), TOBN(0x1d3d1773, 0xeb3310c7),
+ TOBN(0xa8e67112, 0x7747ae83), TOBN(0x31f43160, 0x197d6b40),
+ TOBN(0x0521ccee, 0xcd961400), TOBN(0x67246f11, 0xf6535768),
+ TOBN(0x702fcc5a, 0xef0c3133), TOBN(0x247cc45d, 0x7e16693b),
+ TOBN(0xfd484e49, 0xc729b749), TOBN(0x522cef7d, 0xb218320f),
+ TOBN(0xe56ef405, 0x59ab93b3), TOBN(0x225fba11, 0x9f181071),
+ TOBN(0x33bd6595, 0x15330ed0), TOBN(0xc4be69d5, 0x1ddb32f7),
+ TOBN(0x264c7668, 0x0448087c), TOBN(0xac30903f, 0x71432dae),
+ TOBN(0x3851b266, 0x00f9bf47), TOBN(0x400ed311, 0x6cdd6d03),
+ TOBN(0x045e79fe, 0xf8fd2424), TOBN(0xfdfd974a, 0xfa6da98b),
+ TOBN(0x45c9f641, 0x0c1e673a), TOBN(0x76f2e733, 0x5b2c5168),
+ TOBN(0x1adaebb5, 0x2a601753), TOBN(0xb286514c, 0xc57c2d49),
+ TOBN(0xd8769670, 0x1e0bfd24), TOBN(0x950c547e, 0x04478922),
+ TOBN(0xd1d41969, 0xe5d32bfe), TOBN(0x30bc1472, 0x750d6c3e),
+ TOBN(0x8f3679fe, 0xe0e27f3a), TOBN(0x8f64a7dc, 0xa4a6ee0c),
+ TOBN(0x2fe59937, 0x633dfb1f), TOBN(0xea82c395, 0x977f2547),
+ TOBN(0xcbdfdf1a, 0x661ea646), TOBN(0xc7ccc591, 0xb9085451),
+ TOBN(0x82177962, 0x81761e13), TOBN(0xda57596f, 0x9196885c),
+ TOBN(0xbc17e849, 0x28ffbd70), TOBN(0x1e6e0a41, 0x2671d36f),
+ TOBN(0x61ae872c, 0x4152fcf5), TOBN(0x441c87b0, 0x9e77e754),
+ TOBN(0xd0799dd5, 0xa34dff09), TOBN(0x766b4e44, 0x88a6b171),
+ TOBN(0xdc06a512, 0x11f1c792), TOBN(0xea02ae93, 0x4be35c3e),
+ TOBN(0xe5ca4d6d, 0xe90c469e), TOBN(0x4df4368e, 0x56e4ff5c),
+ TOBN(0x7817acab, 0x4baef62e), TOBN(0x9f5a2202, 0xa85b91e8),
+ TOBN(0x9666ebe6, 0x6ce57610), TOBN(0x32ad31f3, 0xf73bfe03),
+ TOBN(0x628330a4, 0x25bcf4d6), TOBN(0xea950593, 0x515056e6),
+ TOBN(0x59811c89, 0xe1332156), TOBN(0xc89cf1fe, 0x8c11b2d7),
+ TOBN(0x75b63913, 0x04e60cc0), TOBN(0xce811e8d, 0x4625d375),
+ TOBN(0x030e43fc, 0x2d26e562), TOBN(0xfbb30b4b, 0x608d36a0),
+ TOBN(0x634ff82c, 0x48528118), TOBN(0x7c6fe085, 0xcd285911),
+ TOBN(0x7f2830c0, 0x99358f28), TOBN(0x2e60a95e, 0x665e6c09),
+ TOBN(0x08407d3d, 0x9b785dbf), TOBN(0x530889ab, 0xa759bce7),
+ TOBN(0xf228e0e6, 0x52f61239), TOBN(0x2b6d1461, 0x6879be3c),
+ TOBN(0xe6902c04, 0x51a7bbf7), TOBN(0x30ad99f0, 0x76f24a64),
+ TOBN(0x66d9317a, 0x98bc6da0), TOBN(0xf4f877f3, 0xcb596ac0),
+ TOBN(0xb05ff62d, 0x4c44f119), TOBN(0x4555f536, 0xe9b77416),
+ TOBN(0xc7c0d059, 0x8caed63b), TOBN(0x0cd2b7ce, 0xc358b2a9),
+ TOBN(0x3f33287b, 0x46945fa3), TOBN(0xf8785b20, 0xd67c8791),
+ TOBN(0xc54a7a61, 0x9637bd08), TOBN(0x54d4598c, 0x18be79d7),
+ TOBN(0x889e5acb, 0xc46d7ce1), TOBN(0x9a515bb7, 0x8b085877),
+ TOBN(0xfac1a03d, 0x0b7a5050), TOBN(0x7d3e738a, 0xf2926035),
+ TOBN(0x861cc2ce, 0x2a6cb0eb), TOBN(0x6f2e2955, 0x8f7adc79),
+ TOBN(0x61c4d451, 0x33016376), TOBN(0xd9fd2c80, 0x5ad59090),
+ TOBN(0xe5a83738, 0xb2b836a1), TOBN(0x855b41a0, 0x7c0d6622),
+ TOBN(0x186fe317, 0x7cc19af1), TOBN(0x6465c1ff, 0xfdd99acb),
+ TOBN(0x46e5c23f, 0x6974b99e), TOBN(0x75a7cf8b, 0xa2717cbe),
+ TOBN(0x4d2ebc3f, 0x062be658), TOBN(0x094b4447, 0x5f209c98),
+ TOBN(0x4af285ed, 0xb940cb5a), TOBN(0x6706d792, 0x7cc82f10),
+ TOBN(0xc8c8776c, 0x030526fa), TOBN(0xfa8e6f76, 0xa0da9140),
+ TOBN(0x77ea9d34, 0x591ee4f0), TOBN(0x5f46e337, 0x40274166),
+ TOBN(0x1bdf98bb, 0xea671457), TOBN(0xd7c08b46, 0x862a1fe2),
+ TOBN(0x46cc303c, 0x1c08ad63), TOBN(0x99543440, 0x4c845e7b),
+ TOBN(0x1b8fbdb5, 0x48f36bf7), TOBN(0x5b82c392, 0x8c8273a7),
+ TOBN(0x08f712c4, 0x928435d5), TOBN(0x071cf0f1, 0x79330380),
+ TOBN(0xc74c2d24, 0xa8da054a), TOBN(0xcb0e7201, 0x43c46b5c),
+ TOBN(0x0ad7337a, 0xc0b7eff3), TOBN(0x8552225e, 0xc5e48b3c),
+ TOBN(0xe6f78b0c, 0x73f13a5f), TOBN(0x5e70062e, 0x82349cbe),
+ TOBN(0x6b8d5048, 0xe7073969), TOBN(0x392d2a29, 0xc33cb3d2),
+ TOBN(0xee4f727c, 0x4ecaa20f), TOBN(0xa068c99e, 0x2ccde707),
+ TOBN(0xfcd5651f, 0xb87a2913), TOBN(0xea3e3c15, 0x3cc252f0),
+ TOBN(0x777d92df, 0x3b6cd3e4), TOBN(0x7a414143, 0xc5a732e7),
+ TOBN(0xa895951a, 0xa71ff493), TOBN(0xfe980c92, 0xbbd37cf6),
+ TOBN(0x45bd5e64, 0xdecfeeff), TOBN(0x910dc2a9, 0xa44c43e9),
+ TOBN(0xcb403f26, 0xcca9f54d), TOBN(0x928bbdfb, 0x9303f6db),
+ TOBN(0x3c37951e, 0xa9eee67c), TOBN(0x3bd61a52, 0xf79961c3),
+ TOBN(0x09a238e6, 0x395c9a79), TOBN(0x6940ca2d, 0x61eb352d),
+ TOBN(0x7d1e5c5e, 0xc1875631), TOBN(0x1e19742c, 0x1e1b20d1),
+ TOBN(0x4633d908, 0x23fc2e6e), TOBN(0xa76e29a9, 0x08959149),
+ TOBN(0x61069d9c, 0x84ed7da5), TOBN(0x0baa11cf, 0x5dbcad51),
+ TOBN(0xd01eec64, 0x961849da), TOBN(0x93b75f1f, 0xaf3d8c28),
+ TOBN(0x57bc4f9f, 0x1ca2ee44), TOBN(0x5a26322d, 0x00e00558),
+ TOBN(0x1888d658, 0x61a023ef), TOBN(0x1d72aab4, 0xb9e5246e),
+ TOBN(0xa9a26348, 0xe5563ec0), TOBN(0xa0971963, 0xc3439a43),
+ TOBN(0x567dd54b, 0xadb9b5b7), TOBN(0x73fac1a1, 0xc45a524b),
+ TOBN(0x8fe97ef7, 0xfe38e608), TOBN(0x608748d2, 0x3f384f48),
+ TOBN(0xb0571794, 0xc486094f), TOBN(0x869254a3, 0x8bf3a8d6),
+ TOBN(0x148a8dd1, 0x310b0e25), TOBN(0x99ab9f3f, 0x9aa3f7d8),
+ TOBN(0x0927c68a, 0x6706c02e), TOBN(0x22b5e76c, 0x69790e6c),
+ TOBN(0x6c325260, 0x6c71376c), TOBN(0x53a57690, 0x09ef6657),
+ TOBN(0x8d63f852, 0xedffcf3a), TOBN(0xb4d2ed04, 0x3c0a6f55),
+ TOBN(0xdb3aa8de, 0x12519b9e), TOBN(0x5d38e9c4, 0x1e0a569a),
+ TOBN(0x871528bf, 0x303747e2), TOBN(0xa208e77c, 0xf5b5c18d),
+ TOBN(0x9d129c88, 0xca6bf923), TOBN(0xbcbf197f, 0xbf02839f),
+ TOBN(0x9b9bf030, 0x27323194), TOBN(0x3b055a8b, 0x339ca59d),
+ TOBN(0xb46b2312, 0x0f669520), TOBN(0x19789f1f, 0x497e5f24),
+ TOBN(0x9c499468, 0xaaf01801), TOBN(0x72ee1190, 0x8b69d59c),
+ TOBN(0x8bd39595, 0xacf4c079), TOBN(0x3ee11ece, 0x8e0cd048),
+ TOBN(0xebde86ec, 0x1ed66f18), TOBN(0x225d906b, 0xd61fce43),
+ TOBN(0x5cab07d6, 0xe8bed74d), TOBN(0x16e4617f, 0x27855ab7),
+ TOBN(0x6568aadd, 0xb2fbc3dd), TOBN(0xedb5484f, 0x8aeddf5b),
+ TOBN(0x878f20e8, 0x6dcf2fad), TOBN(0x3516497c, 0x615f5699),}
+ ,
+ {TOBN(0xef0a3fec, 0xfa181e69), TOBN(0x9ea02f81, 0x30d69a98),
+ TOBN(0xb2e9cf8e, 0x66eab95d), TOBN(0x520f2beb, 0x24720021),
+ TOBN(0x621c540a, 0x1df84361), TOBN(0x12037721, 0x71fa6d5d),
+ TOBN(0x6e3c7b51, 0x0ff5f6ff), TOBN(0x817a069b, 0xabb2bef3),
+ TOBN(0x83572fb6, 0xb294cda6), TOBN(0x6ce9bf75, 0xb9039f34),
+ TOBN(0x20e012f0, 0x095cbb21), TOBN(0xa0aecc1b, 0xd063f0da),
+ TOBN(0x57c21c3a, 0xf02909e5), TOBN(0xc7d59ecf, 0x48ce9cdc),
+ TOBN(0x2732b844, 0x8ae336f8), TOBN(0x056e3723, 0x3f4f85f4),
+ TOBN(0x8a10b531, 0x89e800ca), TOBN(0x50fe0c17, 0x145208fd),
+ TOBN(0x9e43c0d3, 0xb714ba37), TOBN(0x427d200e, 0x34189acc),
+ TOBN(0x05dee24f, 0xe616e2c0), TOBN(0x9c25f4c8, 0xee1854c1),
+ TOBN(0x4d3222a5, 0x8f342a73), TOBN(0x0807804f, 0xa027c952),
+ TOBN(0xc222653a, 0x4f0d56f3), TOBN(0x961e4047, 0xca28b805),
+ TOBN(0x2c03f8b0, 0x4a73434b), TOBN(0x4c966787, 0xab712a19),
+ TOBN(0xcc196c42, 0x864fee42), TOBN(0xc1be93da, 0x5b0ece5c),
+ TOBN(0xa87d9f22, 0xc131c159), TOBN(0x2bb6d593, 0xdce45655),
+ TOBN(0x22c49ec9, 0xb809b7ce), TOBN(0x8a41486b, 0xe2c72c2c),
+ TOBN(0x813b9420, 0xfea0bf36), TOBN(0xb3d36ee9, 0xa66dac69),
+ TOBN(0x6fddc08a, 0x328cc987), TOBN(0x0a3bcd2c, 0x3a326461),
+ TOBN(0x7103c49d, 0xd810dbba), TOBN(0xf9d81a28, 0x4b78a4c4),
+ TOBN(0x3de865ad, 0xe4d55941), TOBN(0xdedafa5e, 0x30384087),
+ TOBN(0x6f414abb, 0x4ef18b9b), TOBN(0x9ee9ea42, 0xfaee5268),
+ TOBN(0x260faa16, 0x37a55a4a), TOBN(0xeb19a514, 0x015f93b9),
+ TOBN(0x51d7ebd2, 0x9e9c3598), TOBN(0x523fc56d, 0x1932178e),
+ TOBN(0x501d070c, 0xb98fe684), TOBN(0xd60fbe9a, 0x124a1458),
+ TOBN(0xa45761c8, 0x92bc6b3f), TOBN(0xf5384858, 0xfe6f27cb),
+ TOBN(0x4b0271f7, 0xb59e763b), TOBN(0x3d4606a9, 0x5b5a8e5e),
+ TOBN(0x1eda5d9b, 0x05a48292), TOBN(0xda7731d0, 0xe6fec446),
+ TOBN(0xa3e33693, 0x90d45871), TOBN(0xe9764040, 0x06166d8d),
+ TOBN(0xb5c33682, 0x89a90403), TOBN(0x4bd17983, 0x72f1d637),
+ TOBN(0xa616679e, 0xd5d2c53a), TOBN(0x5ec4bcd8, 0xfdcf3b87),
+ TOBN(0xae6d7613, 0xb66a694e), TOBN(0x7460fc76, 0xe3fc27e5),
+ TOBN(0x70469b82, 0x95caabee), TOBN(0xde024ca5, 0x889501e3),
+ TOBN(0x6bdadc06, 0x076ed265), TOBN(0x0cb1236b, 0x5a0ef8b2),
+ TOBN(0x4065ddbf, 0x0972ebf9), TOBN(0xf1dd3875, 0x22aca432),
+ TOBN(0xa88b97cf, 0x744aff76), TOBN(0xd1359afd, 0xfe8e3d24),
+ TOBN(0x52a3ba2b, 0x91502cf3), TOBN(0x2c3832a8, 0x084db75d),
+ TOBN(0x04a12ddd, 0xde30b1c9), TOBN(0x7802eabc, 0xe31fd60c),
+ TOBN(0x33707327, 0xa37fddab), TOBN(0x65d6f2ab, 0xfaafa973),
+ TOBN(0x3525c5b8, 0x11e6f91a), TOBN(0x76aeb0c9, 0x5f46530b),
+ TOBN(0xe8815ff6, 0x2f93a675), TOBN(0xa6ec9684, 0x05f48679),
+ TOBN(0x6dcbb556, 0x358ae884), TOBN(0x0af61472, 0xe19e3873),
+ TOBN(0x72334372, 0xa5f696be), TOBN(0xc65e57ea, 0x6f22fb70),
+ TOBN(0x268da30c, 0x946cea90), TOBN(0x136a8a87, 0x65681b2a),
+ TOBN(0xad5e81dc, 0x0f9f44d4), TOBN(0xf09a6960, 0x2c46585a),
+ TOBN(0xd1649164, 0xc447d1b1), TOBN(0x3b4b36c8, 0x879dc8b1),
+ TOBN(0x20d4177b, 0x3b6b234c), TOBN(0x096a2505, 0x1730d9d0),
+ TOBN(0x0611b9b8, 0xef80531d), TOBN(0xba904b3b, 0x64bb495d),
+ TOBN(0x1192d9d4, 0x93a3147a), TOBN(0x9f30a5dc, 0x9a565545),
+ TOBN(0x90b1f9cb, 0x6ef07212), TOBN(0x29958546, 0x0d87fc13),
+ TOBN(0xd3323eff, 0xc17db9ba), TOBN(0xcb18548c, 0xcb1644a8),
+ TOBN(0x18a306d4, 0x4f49ffbc), TOBN(0x28d658f1, 0x4c2e8684),
+ TOBN(0x44ba60cd, 0xa99f8c71), TOBN(0x67b7abdb, 0x4bf742ff),
+ TOBN(0x66310f9c, 0x914b3f99), TOBN(0xae430a32, 0xf412c161),
+ TOBN(0x1e6776d3, 0x88ace52f), TOBN(0x4bc0fa24, 0x52d7067d),
+ TOBN(0x03c286aa, 0x8f07cd1b), TOBN(0x4cb8f38c, 0xa985b2c1),
+ TOBN(0x83ccbe80, 0x8c3bff36), TOBN(0x005a0bd2, 0x5263e575),
+ TOBN(0x460d7dda, 0x259bdcd1), TOBN(0x4a1c5642, 0xfa5cab6b),
+ TOBN(0x2b7bdbb9, 0x9fe4fc88), TOBN(0x09418e28, 0xcc97bbb5),
+ TOBN(0xd8274fb4, 0xa12321ae), TOBN(0xb137007d, 0x5c87b64e),
+ TOBN(0x80531fe1, 0xc63c4962), TOBN(0x50541e89, 0x981fdb25),
+ TOBN(0xdc1291a1, 0xfd4c2b6b), TOBN(0xc0693a17, 0xa6df4fca),
+ TOBN(0xb2c4604e, 0x0117f203), TOBN(0x245f1963, 0x0a99b8d0),
+ TOBN(0xaedc20aa, 0xc6212c44), TOBN(0xb1ed4e56, 0x520f52a8),
+ TOBN(0xfe48f575, 0xf8547be3), TOBN(0x0a7033cd, 0xa9e45f98),
+ TOBN(0x4b45d3a9, 0x18c50100), TOBN(0xb2a6cd6a, 0xa61d41da),
+ TOBN(0x60bbb4f5, 0x57933c6b), TOBN(0xa7538ebd, 0x2b0d7ffc),
+ TOBN(0x9ea3ab8d, 0x8cd626b6), TOBN(0x8273a484, 0x3601625a),
+ TOBN(0x88859845, 0x0168e508), TOBN(0x8cbc9bb2, 0x99a94abd),
+ TOBN(0x713ac792, 0xfab0a671), TOBN(0xa3995b19, 0x6c9ebffc),
+ TOBN(0xe711668e, 0x1239e152), TOBN(0x56892558, 0xbbb8dff4),
+ TOBN(0x8bfc7dab, 0xdbf17963), TOBN(0x5b59fe5a, 0xb3de1253),
+ TOBN(0x7e3320eb, 0x34a9f7ae), TOBN(0xe5e8cf72, 0xd751efe4),
+ TOBN(0x7ea003bc, 0xd9be2f37), TOBN(0xc0f551a0, 0xb6c08ef7),
+ TOBN(0x56606268, 0x038f6725), TOBN(0x1dd38e35, 0x6d92d3b6),
+ TOBN(0x07dfce7c, 0xc3cbd686), TOBN(0x4e549e04, 0x651c5da8),
+ TOBN(0x4058f93b, 0x08b19340), TOBN(0xc2fae6f4, 0xcac6d89d),
+ TOBN(0x4bad8a8c, 0x8f159cc7), TOBN(0x0ddba4b3, 0xcb0b601c),
+ TOBN(0xda4fc7b5, 0x1dd95f8c), TOBN(0x1d163cd7, 0xcea5c255),
+ TOBN(0x30707d06, 0x274a8c4c), TOBN(0x79d9e008, 0x2802e9ce),
+ TOBN(0x02a29ebf, 0xe6ddd505), TOBN(0x37064e74, 0xb50bed1a),
+ TOBN(0x3f6bae65, 0xa7327d57), TOBN(0x3846f5f1, 0xf83920bc),
+ TOBN(0x87c37491, 0x60df1b9b), TOBN(0x4cfb2895, 0x2d1da29f),
+ TOBN(0x10a478ca, 0x4ed1743c), TOBN(0x390c6030, 0x3edd47c6),
+ TOBN(0x8f3e5312, 0x8c0a78de), TOBN(0xccd02bda, 0x1e85df70),
+ TOBN(0xd6c75c03, 0xa61b6582), TOBN(0x0762921c, 0xfc0eebd1),
+ TOBN(0xd34d0823, 0xd85010c0), TOBN(0xd73aaacb, 0x0044cf1f),
+ TOBN(0xfb4159bb, 0xa3b5e78a), TOBN(0x2287c7f7, 0xe5826f3f),
+ TOBN(0x4aeaf742, 0x580b1a01), TOBN(0xf080415d, 0x60423b79),
+ TOBN(0xe12622cd, 0xa7dea144), TOBN(0x49ea4996, 0x59d62472),
+ TOBN(0xb42991ef, 0x571f3913), TOBN(0x0610f214, 0xf5b25a8a),
+ TOBN(0x47adc585, 0x30b79e8f), TOBN(0xf90e3df6, 0x07a065a2),
+ TOBN(0x5d0a5deb, 0x43e2e034), TOBN(0x53fb5a34, 0x444024aa),
+ TOBN(0xa8628c68, 0x6b0c9f7f), TOBN(0x9c69c29c, 0xac563656),
+ TOBN(0x5a231feb, 0xbace47b6), TOBN(0xbdce0289, 0x9ea5a2ec),
+ TOBN(0x05da1fac, 0x9463853e), TOBN(0x96812c52, 0x509e78aa),
+ TOBN(0xd3fb5771, 0x57151692), TOBN(0xeb2721f8, 0xd98e1c44),
+ TOBN(0xc0506087, 0x32399be1), TOBN(0xda5a5511, 0xd979d8b8),
+ TOBN(0x737ed55d, 0xc6f56780), TOBN(0xe20d3004, 0x0dc7a7f4),
+ TOBN(0x02ce7301, 0xf5941a03), TOBN(0x91ef5215, 0xed30f83a),
+ TOBN(0x28727fc1, 0x4092d85f), TOBN(0x72d223c6, 0x5c49e41a),
+ TOBN(0xa7cf30a2, 0xba6a4d81), TOBN(0x7c086209, 0xb030d87d),
+ TOBN(0x04844c7d, 0xfc588b09), TOBN(0x728cd499, 0x5874bbb0),
+ TOBN(0xcc1281ee, 0xe84c0495), TOBN(0x0769b5ba, 0xec31958f),
+ TOBN(0x665c228b, 0xf99c2471), TOBN(0xf2d8a11b, 0x191eb110),
+ TOBN(0x4594f494, 0xd36d7024), TOBN(0x482ded8b, 0xcdcb25a1),
+ TOBN(0xc958a9d8, 0xdadd4885), TOBN(0x7004477e, 0xf1d2b547),
+ TOBN(0x0a45f6ef, 0x2a0af550), TOBN(0x4fc739d6, 0x2f8d6351),
+ TOBN(0x75cdaf27, 0x786f08a9), TOBN(0x8700bb26, 0x42c2737f),
+ TOBN(0x855a7141, 0x1c4e2670), TOBN(0x810188c1, 0x15076fef),
+ TOBN(0xc251d0c9, 0xabcd3297), TOBN(0xae4c8967, 0xf48108eb),
+ TOBN(0xbd146de7, 0x18ceed30), TOBN(0xf9d4f07a, 0xc986bced),
+ TOBN(0x5ad98ed5, 0x83fa1e08), TOBN(0x7780d33e, 0xbeabd1fb),
+ TOBN(0xe330513c, 0x903b1196), TOBN(0xba11de9e, 0xa47bc8c4),
+ TOBN(0x684334da, 0x02c2d064), TOBN(0x7ecf360d, 0xa48de23b),
+ TOBN(0x57a1b474, 0x0a9089d8), TOBN(0xf28fa439, 0xff36734c),
+ TOBN(0xf2a482cb, 0xea4570b3), TOBN(0xee65d68b, 0xa5ebcee9),
+ TOBN(0x988d0036, 0xb9694cd5), TOBN(0x53edd0e9, 0x37885d32),
+ TOBN(0xe37e3307, 0xbeb9bc6d), TOBN(0xe9abb907, 0x9f5c6768),
+ TOBN(0x4396ccd5, 0x51f2160f), TOBN(0x2500888c, 0x47336da6),
+ TOBN(0x383f9ed9, 0x926fce43), TOBN(0x809dd1c7, 0x04da2930),
+ TOBN(0x30f6f596, 0x8a4cb227), TOBN(0x0d700c7f, 0x73a56b38),
+ TOBN(0x1825ea33, 0xab64a065), TOBN(0xaab9b735, 0x1338df80),
+ TOBN(0x1516100d, 0x9b63f57f), TOBN(0x2574395a, 0x27a6a634),
+ TOBN(0xb5560fb6, 0x700a1acd), TOBN(0xe823fd73, 0xfd999681),
+ TOBN(0xda915d1f, 0x6cb4e1ba), TOBN(0x0d030118, 0x6ebe00a3),
+ TOBN(0x744fb0c9, 0x89fca8cd), TOBN(0x970d01db, 0xf9da0e0b),
+ TOBN(0x0ad8c564, 0x7931d76f), TOBN(0xb15737bf, 0xf659b96a),
+ TOBN(0xdc9933e8, 0xa8b484e7), TOBN(0xb2fdbdf9, 0x7a26dec7),
+ TOBN(0x2349e9a4, 0x9f1f0136), TOBN(0x7860368e, 0x70fddddb),
+ TOBN(0xd93d2c1c, 0xf9ad3e18), TOBN(0x6d6c5f17, 0x689f4e79),
+ TOBN(0x7a544d91, 0xb24ff1b6), TOBN(0x3e12a5eb, 0xfe16cd8c),
+ TOBN(0x543574e9, 0xa56b872f), TOBN(0xa1ad550c, 0xfcf68ea2),
+ TOBN(0x689e37d2, 0x3f560ef7), TOBN(0x8c54b9ca, 0xc9d47a8b),
+ TOBN(0x46d40a4a, 0x088ac342), TOBN(0xec450c7c, 0x1576c6d0),
+ TOBN(0xb589e31c, 0x1f9689e9), TOBN(0xdacf2602, 0xb8781718),
+ TOBN(0xa89237c6, 0xc8cb6b42), TOBN(0x1326fc93, 0xb96ef381),
+ TOBN(0x55d56c6d, 0xb5f07825), TOBN(0xacba2eea, 0x7449e22d),
+ TOBN(0x74e0887a, 0x633c3000), TOBN(0xcb6cd172, 0xd7cbcf71),
+ TOBN(0x309e81de, 0xc36cf1be), TOBN(0x07a18a6d, 0x60ae399b),
+ TOBN(0xb36c2679, 0x9edce57e), TOBN(0x52b892f4, 0xdf001d41),
+ TOBN(0xd884ae5d, 0x16a1f2c6), TOBN(0x9b329424, 0xefcc370a),
+ TOBN(0x3120daf2, 0xbd2e21df), TOBN(0x55298d2d, 0x02470a99),
+ TOBN(0x0b78af6c, 0xa05db32e), TOBN(0x5c76a331, 0x601f5636),
+ TOBN(0xaae861ff, 0xf8a4f29c), TOBN(0x70dc9240, 0xd68f8d49),
+ TOBN(0x960e649f, 0x81b1321c), TOBN(0x3d2c801b, 0x8792e4ce),
+ TOBN(0xf479f772, 0x42521876), TOBN(0x0bed93bc, 0x416c79b1),
+ TOBN(0xa67fbc05, 0x263e5bc9), TOBN(0x01e8e630, 0x521db049),
+ TOBN(0x76f26738, 0xc6f3431e), TOBN(0xe609cb02, 0xe3267541),
+ TOBN(0xb10cff2d, 0x818c877c), TOBN(0x1f0e75ce, 0x786a13cb),
+ TOBN(0xf4fdca64, 0x1158544d), TOBN(0x5d777e89, 0x6cb71ed0),
+ TOBN(0x3c233737, 0xa9aa4755), TOBN(0x7b453192, 0xe527ab40),
+ TOBN(0xdb59f688, 0x39f05ffe), TOBN(0x8f4f4be0, 0x6d82574e),
+ TOBN(0xcce3450c, 0xee292d1b), TOBN(0xaa448a12, 0x61ccd086),
+ TOBN(0xabce91b3, 0xf7914967), TOBN(0x4537f09b, 0x1908a5ed),
+ TOBN(0xa812421e, 0xf51042e7), TOBN(0xfaf5cebc, 0xec0b3a34),
+ TOBN(0x730ffd87, 0x4ca6b39a), TOBN(0x70fb72ed, 0x02efd342),
+ TOBN(0xeb4735f9, 0xd75c8edb), TOBN(0xc11f2157, 0xc278aa51),
+ TOBN(0xc459f635, 0xbf3bfebf), TOBN(0x3a1ff0b4, 0x6bd9601f),
+ TOBN(0xc9d12823, 0xc420cb73), TOBN(0x3e9af3e2, 0x3c2915a3),
+ TOBN(0xe0c82c72, 0xb41c3440), TOBN(0x175239e5, 0xe3039a5f),
+ TOBN(0xe1084b8a, 0x558795a3), TOBN(0x328d0a1d, 0xd01e5c60),
+ TOBN(0x0a495f2e, 0xd3788a04), TOBN(0x25d8ff16, 0x66c11a9f),
+ TOBN(0xf5155f05, 0x9ed692d6), TOBN(0x954fa107, 0x4f425fe4),
+ TOBN(0xd16aabf2, 0xe98aaa99), TOBN(0x90cd8ba0, 0x96b0f88a),
+ TOBN(0x957f4782, 0xc154026a), TOBN(0x54ee0734, 0x52af56d2),
+ TOBN(0xbcf89e54, 0x45b4147a), TOBN(0x3d102f21, 0x9a52816c),
+ TOBN(0x6808517e, 0x39b62e77), TOBN(0x92e25421, 0x69169ad8),
+ TOBN(0xd721d871, 0xbb608558), TOBN(0x60e4ebae, 0xf6d4ff9b),
+ TOBN(0x0ba10819, 0x41f2763e), TOBN(0xca2e45be, 0x51ee3247),
+ TOBN(0x66d172ec, 0x2bfd7a5f), TOBN(0x528a8f2f, 0x74d0b12d),
+ TOBN(0xe17f1e38, 0xdabe70dc), TOBN(0x1d5d7316, 0x9f93983c),
+ TOBN(0x51b2184a, 0xdf423e31), TOBN(0xcb417291, 0xaedb1a10),
+ TOBN(0x2054ca93, 0x625bcab9), TOBN(0x54396860, 0xa98998f0),
+ TOBN(0x4e53f6c4, 0xa54ae57e), TOBN(0x0ffeb590, 0xee648e9d),
+ TOBN(0xfbbdaadc, 0x6afaf6bc), TOBN(0xf88ae796, 0xaa3bfb8a),
+ TOBN(0x209f1d44, 0xd2359ed9), TOBN(0xac68dd03, 0xf3544ce2),
+ TOBN(0xf378da47, 0xfd51e569), TOBN(0xe1abd860, 0x2cc80097),
+ TOBN(0x23ca18d9, 0x343b6e3a), TOBN(0x480797e8, 0xb40a1bae),
+ TOBN(0xd1f0c717, 0x533f3e67), TOBN(0x44896970, 0x06e6cdfc),
+ TOBN(0x8ca21055, 0x52a82e8d), TOBN(0xb2caf785, 0x78460cdc),
+ TOBN(0x4c1b7b62, 0xe9037178), TOBN(0xefc09d2c, 0xdb514b58),
+ TOBN(0x5f2df9ee, 0x9113be5c), TOBN(0x2fbda78f, 0xb3f9271c),
+ TOBN(0xe09a81af, 0x8f83fc54), TOBN(0x06b13866, 0x8afb5141),
+ TOBN(0x38f6480f, 0x43e3865d), TOBN(0x72dd77a8, 0x1ddf47d9),
+ TOBN(0xf2a8e971, 0x4c205ff7), TOBN(0x46d449d8, 0x9d088ad8),
+ TOBN(0x926619ea, 0x185d706f), TOBN(0xe47e02eb, 0xc7dd7f62),
+ TOBN(0xe7f120a7, 0x8cbc2031), TOBN(0xc18bef00, 0x998d4ac9),
+ TOBN(0x18f37a9c, 0x6bdf22da), TOBN(0xefbc432f, 0x90dc82df),
+ TOBN(0xc52cef8e, 0x5d703651), TOBN(0x82887ba0, 0xd99881a5),
+ TOBN(0x7cec9dda, 0xb920ec1d), TOBN(0xd0d7e8c3, 0xec3e8d3b),
+ TOBN(0x445bc395, 0x4ca88747), TOBN(0xedeaa2e0, 0x9fd53535),
+ TOBN(0x461b1d93, 0x6cc87475), TOBN(0xd92a52e2, 0x6d2383bd),
+ TOBN(0xfabccb59, 0xd7903546), TOBN(0x6111a761, 0x3d14b112),
+ TOBN(0x0ae584fe, 0xb3d5f612), TOBN(0x5ea69b8d, 0x60e828ec),
+ TOBN(0x6c078985, 0x54087030), TOBN(0x649cab04, 0xac4821fe),
+ TOBN(0x25ecedcf, 0x8bdce214), TOBN(0xb5622f72, 0x86af7361),
+ TOBN(0x0e1227aa, 0x7038b9e2), TOBN(0xd0efb273, 0xac20fa77),
+ TOBN(0x817ff88b, 0x79df975b), TOBN(0x856bf286, 0x1999503e),
+ TOBN(0xb4d5351f, 0x5038ec46), TOBN(0x740a52c5, 0xfc42af6e),
+ TOBN(0x2e38bb15, 0x2cbb1a3f), TOBN(0xc3eb99fe, 0x17a83429),
+ TOBN(0xca4fcbf1, 0xdd66bb74), TOBN(0x880784d6, 0xcde5e8fc),
+ TOBN(0xddc84c1c, 0xb4e7a0be), TOBN(0x8780510d, 0xbd15a72f),
+ TOBN(0x44bcf1af, 0x81ec30e1), TOBN(0x141e50a8, 0x0a61073e),
+ TOBN(0x0d955718, 0x47be87ae), TOBN(0x68a61417, 0xf76a4372),
+ TOBN(0xf57e7e87, 0xc607c3d3), TOBN(0x043afaf8, 0x5252f332),
+ TOBN(0xcc14e121, 0x1552a4d2), TOBN(0xb6dee692, 0xbb4d4ab4),
+ TOBN(0xb6ab74c8, 0xa03816a4), TOBN(0x84001ae4, 0x6f394a29),
+ TOBN(0x5bed8344, 0xd795fb45), TOBN(0x57326e7d, 0xb79f55a5),
+ TOBN(0xc9533ce0, 0x4accdffc), TOBN(0x53473caf, 0x3993fa04),
+ TOBN(0x7906eb93, 0xa13df4c8), TOBN(0xa73e51f6, 0x97cbe46f),
+ TOBN(0xd1ab3ae1, 0x0ae4ccf8), TOBN(0x25614508, 0x8a5b3dbc),
+ TOBN(0x61eff962, 0x11a71b27), TOBN(0xdf71412b, 0x6bb7fa39),
+ TOBN(0xb31ba6b8, 0x2bd7f3ef), TOBN(0xb0b9c415, 0x69180d29),
+ TOBN(0xeec14552, 0x014cdde5), TOBN(0x702c624b, 0x227b4bbb),
+ TOBN(0x2b15e8c2, 0xd3e988f3), TOBN(0xee3bcc6d, 0xa4f7fd04),
+ TOBN(0x9d00822a, 0x42ac6c85), TOBN(0x2db0cea6, 0x1df9f2b7),
+ TOBN(0xd7cad2ab, 0x42de1e58), TOBN(0x346ed526, 0x2d6fbb61),
+ TOBN(0xb3962995, 0x1a2faf09), TOBN(0x2fa8a580, 0x7c25612e),
+ TOBN(0x30ae04da, 0x7cf56490), TOBN(0x75662908, 0x0eea3961),
+ TOBN(0x3609f5c5, 0x3d080847), TOBN(0xcb081d39, 0x5241d4f6),
+ TOBN(0xb4fb3810, 0x77961a63), TOBN(0xc20c5984, 0x2abb66fc),
+ TOBN(0x3d40aa7c, 0xf902f245), TOBN(0x9cb12736, 0x4e536b1e),
+ TOBN(0x5eda24da, 0x99b3134f), TOBN(0xafbd9c69, 0x5cd011af),
+ TOBN(0x9a16e30a, 0xc7088c7d), TOBN(0x5ab65710, 0x3207389f),
+ TOBN(0x1b09547f, 0xe7407a53), TOBN(0x2322f9d7, 0x4fdc6eab),
+ TOBN(0xc0f2f22d, 0x7430de4d), TOBN(0x19382696, 0xe68ca9a9),
+ TOBN(0x17f1eff1, 0x918e5868), TOBN(0xe3b5b635, 0x586f4204),
+ TOBN(0x146ef980, 0x3fbc4341), TOBN(0x359f2c80, 0x5b5eed4e),
+ TOBN(0x9f35744e, 0x7482e41d), TOBN(0x9a9ac3ec, 0xf3b224c2),
+ TOBN(0x9161a6fe, 0x91fc50ae), TOBN(0x89ccc66b, 0xc613fa7c),
+ TOBN(0x89268b14, 0xc732f15a), TOBN(0x7cd6f4e2, 0xb467ed03),
+ TOBN(0xfbf79869, 0xce56b40e), TOBN(0xf93e094c, 0xc02dde98),
+ TOBN(0xefe0c3a8, 0xedee2cd7), TOBN(0x90f3ffc0, 0xb268fd42),
+ TOBN(0x81a7fd56, 0x08241aed), TOBN(0x95ab7ad8, 0x00b1afe8),
+ TOBN(0x40127056, 0x3e310d52), TOBN(0xd3ffdeb1, 0x09d9fc43),
+ TOBN(0xc8f85c91, 0xd11a8594), TOBN(0x2e74d258, 0x31cf6db8),
+ TOBN(0x829c7ca3, 0x02b5dfd0), TOBN(0xe389cfbe, 0x69143c86),
+ TOBN(0xd01b6405, 0x941768d8), TOBN(0x45103995, 0x03bf825d),
+ TOBN(0xcc4ee166, 0x56cd17e2), TOBN(0xbea3c283, 0xba037e79),
+ TOBN(0x4e1ac06e, 0xd9a47520), TOBN(0xfbfe18aa, 0xaf852404),
+ TOBN(0x5615f8e2, 0x8087648a), TOBN(0x7301e47e, 0xb9d150d9),
+ TOBN(0x79f9f9dd, 0xb299b977), TOBN(0x76697a7b, 0xa5b78314),
+ TOBN(0x10d67468, 0x7d7c90e7), TOBN(0x7afffe03, 0x937210b5),
+ TOBN(0x5aef3e4b, 0x28c22cee), TOBN(0xefb0ecd8, 0x09fd55ae),
+ TOBN(0x4cea7132, 0x0d2a5d6a), TOBN(0x9cfb5fa1, 0x01db6357),
+ TOBN(0x395e0b57, 0xf36e1ac5), TOBN(0x008fa9ad, 0x36cafb7d),
+ TOBN(0x8f6cdf70, 0x5308c4db), TOBN(0x51527a37, 0x95ed2477),
+ TOBN(0xba0dee30, 0x5bd21311), TOBN(0x6ed41b22, 0x909c90d7),
+ TOBN(0xc5f6b758, 0x7c8696d3), TOBN(0x0db8eaa8, 0x3ce83a80),
+ TOBN(0xd297fe37, 0xb24b4b6f), TOBN(0xfe58afe8, 0x522d1f0d),
+ TOBN(0x97358736, 0x8c98dbd9), TOBN(0x6bc226ca, 0x9454a527),
+ TOBN(0xa12b384e, 0xce53c2d0), TOBN(0x779d897d, 0x5e4606da),
+ TOBN(0xa53e47b0, 0x73ec12b0), TOBN(0x462dbbba, 0x5756f1ad),
+ TOBN(0x69fe09f2, 0xcafe37b6), TOBN(0x273d1ebf, 0xecce2e17),
+ TOBN(0x8ac1d538, 0x3cf607fd), TOBN(0x8035f7ff, 0x12e10c25),}
+ ,
+ {TOBN(0x854d34c7, 0x7e6c5520), TOBN(0xc27df9ef, 0xdcb9ea58),
+ TOBN(0x405f2369, 0xd686666d), TOBN(0x29d1febf, 0x0417aa85),
+ TOBN(0x9846819e, 0x93470afe), TOBN(0x3e6a9669, 0xe2a27f9e),
+ TOBN(0x24d008a2, 0xe31e6504), TOBN(0xdba7cecf, 0x9cb7680a),
+ TOBN(0xecaff541, 0x338d6e43), TOBN(0x56f7dd73, 0x4541d5cc),
+ TOBN(0xb5d426de, 0x96bc88ca), TOBN(0x48d94f6b, 0x9ed3a2c3),
+ TOBN(0x6354a3bb, 0x2ef8279c), TOBN(0xd575465b, 0x0b1867f2),
+ TOBN(0xef99b0ff, 0x95225151), TOBN(0xf3e19d88, 0xf94500d8),
+ TOBN(0x92a83268, 0xe32dd620), TOBN(0x913ec99f, 0x627849a2),
+ TOBN(0xedd8fdfa, 0x2c378882), TOBN(0xaf96f33e, 0xee6f8cfe),
+ TOBN(0xc06737e5, 0xdc3fa8a5), TOBN(0x236bb531, 0xb0b03a1d),
+ TOBN(0x33e59f29, 0x89f037b0), TOBN(0x13f9b5a7, 0xd9a12a53),
+ TOBN(0x0d0df6ce, 0x51efb310), TOBN(0xcb5b2eb4, 0x958df5be),
+ TOBN(0xd6459e29, 0x36158e59), TOBN(0x82aae2b9, 0x1466e336),
+ TOBN(0xfb658a39, 0x411aa636), TOBN(0x7152ecc5, 0xd4c0a933),
+ TOBN(0xf10c758a, 0x49f026b7), TOBN(0xf4837f97, 0xcb09311f),
+ TOBN(0xddfb02c4, 0xc753c45f), TOBN(0x18ca81b6, 0xf9c840fe),
+ TOBN(0x846fd09a, 0xb0f8a3e6), TOBN(0xb1162add, 0xe7733dbc),
+ TOBN(0x7070ad20, 0x236e3ab6), TOBN(0xf88cdaf5, 0xb2a56326),
+ TOBN(0x05fc8719, 0x997cbc7a), TOBN(0x442cd452, 0x4b665272),
+ TOBN(0x7807f364, 0xb71698f5), TOBN(0x6ba418d2, 0x9f7b605e),
+ TOBN(0xfd20b00f, 0xa03b2cbb), TOBN(0x883eca37, 0xda54386f),
+ TOBN(0xff0be43f, 0xf3437f24), TOBN(0xe910b432, 0xa48bb33c),
+ TOBN(0x4963a128, 0x329df765), TOBN(0xac1dd556, 0xbe2fe6f7),
+ TOBN(0x557610f9, 0x24a0a3fc), TOBN(0x38e17bf4, 0xe881c3f9),
+ TOBN(0x6ba84faf, 0xed0dac99), TOBN(0xd4a222c3, 0x59eeb918),
+ TOBN(0xc79c1dbe, 0x13f542b6), TOBN(0x1fc65e0d, 0xe425d457),
+ TOBN(0xeffb754f, 0x1debb779), TOBN(0x638d8fd0, 0x9e08af60),
+ TOBN(0x994f523a, 0x626332d5), TOBN(0x7bc38833, 0x5561bb44),
+ TOBN(0x005ed4b0, 0x3d845ea2), TOBN(0xd39d3ee1, 0xc2a1f08a),
+ TOBN(0x6561fdd3, 0xe7676b0d), TOBN(0x620e35ff, 0xfb706017),
+ TOBN(0x36ce424f, 0xf264f9a8), TOBN(0xc4c3419f, 0xda2681f7),
+ TOBN(0xfb6afd2f, 0x69beb6e8), TOBN(0x3a50b993, 0x6d700d03),
+ TOBN(0xc840b2ad, 0x0c83a14f), TOBN(0x573207be, 0x54085bef),
+ TOBN(0x5af882e3, 0x09fe7e5b), TOBN(0x957678a4, 0x3b40a7e1),
+ TOBN(0x172d4bdd, 0x543056e2), TOBN(0x9c1b26b4, 0x0df13c0a),
+ TOBN(0x1c30861c, 0xf405ff06), TOBN(0xebac86bd, 0x486e828b),
+ TOBN(0xe791a971, 0x636933fc), TOBN(0x50e7c2be, 0x7aeee947),
+ TOBN(0xc3d4a095, 0xfa90d767), TOBN(0xae60eb7b, 0xe670ab7b),
+ TOBN(0x17633a64, 0x397b056d), TOBN(0x93a21f33, 0x105012aa),
+ TOBN(0x663c370b, 0xabb88643), TOBN(0x91df36d7, 0x22e21599),
+ TOBN(0x183ba835, 0x8b761671), TOBN(0x381eea1d, 0x728f3bf1),
+ TOBN(0xb9b2f1ba, 0x39966e6c), TOBN(0x7c464a28, 0xe7295492),
+ TOBN(0x0fd5f70a, 0x09b26b7f), TOBN(0xa9aba1f9, 0xfbe009df),
+ TOBN(0x857c1f22, 0x369b87ad), TOBN(0x3c00e5d9, 0x32fca556),
+ TOBN(0x1ad74cab, 0x90b06466), TOBN(0xa7112386, 0x550faaf2),
+ TOBN(0x7435e198, 0x6d9bd5f5), TOBN(0x2dcc7e38, 0x59c3463f),
+ TOBN(0xdc7df748, 0xca7bd4b2), TOBN(0x13cd4c08, 0x9dec2f31),
+ TOBN(0x0d3b5df8, 0xe3237710), TOBN(0x0dadb26e, 0xcbd2f7b0),
+ TOBN(0x9f5966ab, 0xe4aa082b), TOBN(0x666ec8de, 0x350e966e),
+ TOBN(0x1bfd1ed5, 0xee524216), TOBN(0xcd93c59b, 0x41dab0b6),
+ TOBN(0x658a8435, 0xd186d6ba), TOBN(0x1b7d34d2, 0x159d1195),
+ TOBN(0x5936e460, 0x22caf46b), TOBN(0x6a45dd8f, 0x9a96fe4f),
+ TOBN(0xf7925434, 0xb98f474e), TOBN(0x41410412, 0x0053ef15),
+ TOBN(0x71cf8d12, 0x41de97bf), TOBN(0xb8547b61, 0xbd80bef4),
+ TOBN(0xb47d3970, 0xc4db0037), TOBN(0xf1bcd328, 0xfef20dff),
+ TOBN(0x31a92e09, 0x10caad67), TOBN(0x1f591960, 0x5531a1e1),
+ TOBN(0x3bb852e0, 0x5f4fc840), TOBN(0x63e297ca, 0x93a72c6c),
+ TOBN(0x3c2b0b2e, 0x49abad67), TOBN(0x6ec405fc, 0xed3db0d9),
+ TOBN(0xdc14a530, 0x7fef1d40), TOBN(0xccd19846, 0x280896fc),
+ TOBN(0x00f83176, 0x9bb81648), TOBN(0xd69eb485, 0x653120d0),
+ TOBN(0xd17d75f4, 0x4ccabc62), TOBN(0x34a07f82, 0xb749fcb1),
+ TOBN(0x2c3af787, 0xbbfb5554), TOBN(0xb06ed4d0, 0x62e283f8),
+ TOBN(0x5722889f, 0xa19213a0), TOBN(0x162b085e, 0xdcf3c7b4),
+ TOBN(0xbcaecb31, 0xe0dd3eca), TOBN(0xc6237fbc, 0xe52f13a5),
+ TOBN(0xcc2b6b03, 0x27bac297), TOBN(0x2ae1cac5, 0xb917f54a),
+ TOBN(0x474807d4, 0x7845ae4f), TOBN(0xfec7dd92, 0xce5972e0),
+ TOBN(0xc3bd2541, 0x1d7915bb), TOBN(0x66f85dc4, 0xd94907ca),
+ TOBN(0xd981b888, 0xbdbcf0ca), TOBN(0xd75f5da6, 0xdf279e9f),
+ TOBN(0x128bbf24, 0x7054e934), TOBN(0x3c6ff6e5, 0x81db134b),
+ TOBN(0x795b7cf4, 0x047d26e4), TOBN(0xf370f7b8, 0x5049ec37),
+ TOBN(0xc6712d4d, 0xced945af), TOBN(0xdf30b5ec, 0x095642bc),
+ TOBN(0x9b034c62, 0x4896246e), TOBN(0x5652c016, 0xee90bbd1),
+ TOBN(0xeb38636f, 0x87fedb73), TOBN(0x5e32f847, 0x0135a613),
+ TOBN(0x0703b312, 0xcf933c83), TOBN(0xd05bb76e, 0x1a7f47e6),
+ TOBN(0x825e4f0c, 0x949c2415), TOBN(0x569e5622, 0x7250d6f8),
+ TOBN(0xbbe9eb3a, 0x6568013e), TOBN(0x8dbd203f, 0x22f243fc),
+ TOBN(0x9dbd7694, 0xb342734a), TOBN(0x8f6d12f8, 0x46afa984),
+ TOBN(0xb98610a2, 0xc9eade29), TOBN(0xbab4f323, 0x47dd0f18),
+ TOBN(0x5779737b, 0x671c0d46), TOBN(0x10b6a7c6, 0xd3e0a42a),
+ TOBN(0xfb19ddf3, 0x3035b41c), TOBN(0xd336343f, 0x99c45895),
+ TOBN(0x61fe4938, 0x54c857e5), TOBN(0xc4d506be, 0xae4e57d5),
+ TOBN(0x3cd8c8cb, 0xbbc33f75), TOBN(0x7281f08a, 0x9262c77d),
+ TOBN(0x083f4ea6, 0xf11a2823), TOBN(0x8895041e, 0x9fba2e33),
+ TOBN(0xfcdfea49, 0x9c438edf), TOBN(0x7678dcc3, 0x91edba44),
+ TOBN(0xf07b3b87, 0xe2ba50f0), TOBN(0xc13888ef, 0x43948c1b),
+ TOBN(0xc2135ad4, 0x1140af42), TOBN(0x8e5104f3, 0x926ed1a7),
+ TOBN(0xf24430cb, 0x88f6695f), TOBN(0x0ce0637b, 0x6d73c120),
+ TOBN(0xb2db01e6, 0xfe631e8f), TOBN(0x1c5563d7, 0xd7bdd24b),
+ TOBN(0x8daea3ba, 0x369ad44f), TOBN(0x000c81b6, 0x8187a9f9),
+ TOBN(0x5f48a951, 0xaae1fd9a), TOBN(0xe35626c7, 0x8d5aed8a),
+ TOBN(0x20952763, 0x0498c622), TOBN(0x76d17634, 0x773aa504),
+ TOBN(0x36d90dda, 0xeb300f7a), TOBN(0x9dcf7dfc, 0xedb5e801),
+ TOBN(0x645cb268, 0x74d5244c), TOBN(0xa127ee79, 0x348e3aa2),
+ TOBN(0x488acc53, 0x575f1dbb), TOBN(0x95037e85, 0x80e6161e),
+ TOBN(0x57e59283, 0x292650d0), TOBN(0xabe67d99, 0x14938216),
+ TOBN(0x3c7f944b, 0x3f8e1065), TOBN(0xed908cb6, 0x330e8924),
+ TOBN(0x08ee8fd5, 0x6f530136), TOBN(0x2227b7d5, 0xd7ffc169),
+ TOBN(0x4f55c893, 0xb5cd6dd5), TOBN(0x82225e11, 0xa62796e8),
+ TOBN(0x5c6cead1, 0xcb18e12c), TOBN(0x4381ae0c, 0x84f5a51a),
+ TOBN(0x345913d3, 0x7fafa4c8), TOBN(0x3d918082, 0x0491aac0),
+ TOBN(0x9347871f, 0x3e69264c), TOBN(0xbea9dd3c, 0xb4f4f0cd),
+ TOBN(0xbda5d067, 0x3eadd3e7), TOBN(0x0033c1b8, 0x0573bcd8),
+ TOBN(0x25589379, 0x5da2486c), TOBN(0xcb89ee5b, 0x86abbee7),
+ TOBN(0x8fe0a8f3, 0x22532e5d), TOBN(0xb6410ff0, 0x727dfc4c),
+ TOBN(0x619b9d58, 0x226726db), TOBN(0x5ec25669, 0x7a2b2dc7),
+ TOBN(0xaf4d2e06, 0x4c3beb01), TOBN(0x852123d0, 0x7acea556),
+ TOBN(0x0e9470fa, 0xf783487a), TOBN(0x75a7ea04, 0x5664b3eb),
+ TOBN(0x4ad78f35, 0x6798e4ba), TOBN(0x9214e6e5, 0xc7d0e091),
+ TOBN(0xc420b488, 0xb1290403), TOBN(0x64049e0a, 0xfc295749),
+ TOBN(0x03ef5af1, 0x3ae9841f), TOBN(0xdbe4ca19, 0xb0b662a6),
+ TOBN(0x46845c5f, 0xfa453458), TOBN(0xf8dabf19, 0x10b66722),
+ TOBN(0xb650f0aa, 0xcce2793b), TOBN(0x71db851e, 0xc5ec47c1),
+ TOBN(0x3eb78f3e, 0x3b234fa9), TOBN(0xb0c60f35, 0xfc0106ce),
+ TOBN(0x05427121, 0x774eadbd), TOBN(0x25367faf, 0xce323863),
+ TOBN(0x7541b5c9, 0xcd086976), TOBN(0x4ff069e2, 0xdc507ad1),
+ TOBN(0x74145256, 0x8776e667), TOBN(0x6e76142c, 0xb23c6bb5),
+ TOBN(0xdbf30712, 0x1b3a8a87), TOBN(0x60e7363e, 0x98450836),
+ TOBN(0x5741450e, 0xb7366d80), TOBN(0xe4ee14ca, 0x4837dbdf),
+ TOBN(0xa765eb9b, 0x69d4316f), TOBN(0x04548dca, 0x8ef43825),
+ TOBN(0x9c9f4e4c, 0x5ae888eb), TOBN(0x733abb51, 0x56e9ac99),
+ TOBN(0xdaad3c20, 0xba6ac029), TOBN(0x9b8dd3d3, 0x2ba3e38e),
+ TOBN(0xa9bb4c92, 0x0bc5d11a), TOBN(0xf20127a7, 0x9c5f88a3),
+ TOBN(0x4f52b06e, 0x161d3cb8), TOBN(0x26c1ff09, 0x6afaf0a6),
+ TOBN(0x32670d2f, 0x7189e71f), TOBN(0xc6438748, 0x5ecf91e7),
+ TOBN(0x15758e57, 0xdb757a21), TOBN(0x427d09f8, 0x290a9ce5),
+ TOBN(0x846a308f, 0x38384a7a), TOBN(0xaac3acb4, 0xb0732b99),
+ TOBN(0x9e941009, 0x17845819), TOBN(0x95cba111, 0xa7ce5e03),
+ TOBN(0x6f3d4f7f, 0xb00009c4), TOBN(0xb8396c27, 0x8ff28b5f),
+ TOBN(0xb1a9ae43, 0x1c97975d), TOBN(0x9d7ba8af, 0xe5d9fed5),
+ TOBN(0x338cf09f, 0x34f485b6), TOBN(0xbc0ddacc, 0x64122516),
+ TOBN(0xa450da12, 0x05d471fe), TOBN(0x4c3a6250, 0x628dd8c9),
+ TOBN(0x69c7d103, 0xd1295837), TOBN(0xa2893e50, 0x3807eb2f),
+ TOBN(0xd6e1e1de, 0xbdb41491), TOBN(0xc630745b, 0x5e138235),
+ TOBN(0xc892109e, 0x48661ae1), TOBN(0x8d17e7eb, 0xea2b2674),
+ TOBN(0x00ec0f87, 0xc328d6b5), TOBN(0x6d858645, 0xf079ff9e),
+ TOBN(0x6cdf243e, 0x19115ead), TOBN(0x1ce1393e, 0x4bac4fcf),
+ TOBN(0x2c960ed0, 0x9c29f25b), TOBN(0x59be4d8e, 0x9d388a05),
+ TOBN(0x0d46e06c, 0xd0def72b), TOBN(0xb923db5d, 0xe0342748),
+ TOBN(0xf7d3aacd, 0x936d4a3d), TOBN(0x558519cc, 0x0b0b099e),
+ TOBN(0x3ea8ebf8, 0x827097ef), TOBN(0x259353db, 0xd054f55d),
+ TOBN(0x84c89abc, 0x6d2ed089), TOBN(0x5c548b69, 0x8e096a7c),
+ TOBN(0xd587f616, 0x994b995d), TOBN(0x4d1531f6, 0xa5845601),
+ TOBN(0x792ab31e, 0x451fd9f0), TOBN(0xc8b57bb2, 0x65adf6ca),
+ TOBN(0x68440fcb, 0x1cd5ad73), TOBN(0xb9c860e6, 0x6144da4f),
+ TOBN(0x2ab286aa, 0x8462beb8), TOBN(0xcc6b8fff, 0xef46797f),
+ TOBN(0xac820da4, 0x20c8a471), TOBN(0x69ae05a1, 0x77ff7faf),
+ TOBN(0xb9163f39, 0xbfb5da77), TOBN(0xbd03e590, 0x2c73ab7a),
+ TOBN(0x7e862b5e, 0xb2940d9e), TOBN(0x3c663d86, 0x4b9af564),
+ TOBN(0xd8309031, 0xbde3033d), TOBN(0x298231b2, 0xd42c5bc6),
+ TOBN(0x42090d2c, 0x552ad093), TOBN(0xa4799d1c, 0xff854695),
+ TOBN(0x0a88b5d6, 0xd31f0d00), TOBN(0xf8b40825, 0xa2f26b46),
+ TOBN(0xec29b1ed, 0xf1bd7218), TOBN(0xd491c53b, 0x4b24c86e),
+ TOBN(0xd2fe588f, 0x3395ea65), TOBN(0x6f3764f7, 0x4456ef15),
+ TOBN(0xdb43116d, 0xcdc34800), TOBN(0xcdbcd456, 0xc1e33955),
+ TOBN(0xefdb5540, 0x74ab286b), TOBN(0x948c7a51, 0xd18c5d7c),
+ TOBN(0xeb81aa37, 0x7378058e), TOBN(0x41c746a1, 0x04411154),
+ TOBN(0xa10c73bc, 0xfb828ac7), TOBN(0x6439be91, 0x9d972b29),
+ TOBN(0x4bf3b4b0, 0x43a2fbad), TOBN(0x39e6dadf, 0x82b5e840),
+ TOBN(0x4f716408, 0x6397bd4c), TOBN(0x0f7de568, 0x7f1eeccb),
+ TOBN(0x5865c5a1, 0xd2ffbfc1), TOBN(0xf74211fa, 0x4ccb6451),
+ TOBN(0x66368a88, 0xc0b32558), TOBN(0x5b539dc2, 0x9ad7812e),
+ TOBN(0x579483d0, 0x2f3af6f6), TOBN(0x52132078, 0x99934ece),
+ TOBN(0x50b9650f, 0xdcc9e983), TOBN(0xca989ec9, 0xaee42b8a),
+ TOBN(0x6a44c829, 0xd6f62f99), TOBN(0x8f06a309, 0x4c2a7c0c),
+ TOBN(0x4ea2b3a0, 0x98a0cb0a), TOBN(0x5c547b70, 0xbeee8364),
+ TOBN(0x461d40e1, 0x682afe11), TOBN(0x9e0fc77a, 0x7b41c0a8),
+ TOBN(0x79e4aefd, 0xe20d5d36), TOBN(0x2916e520, 0x32dd9f63),
+ TOBN(0xf59e52e8, 0x3f883faf), TOBN(0x396f9639, 0x2b868d35),
+ TOBN(0xc902a9df, 0x4ca19881), TOBN(0x0fc96822, 0xdb2401a6),
+ TOBN(0x41237587, 0x66f1c68d), TOBN(0x10fc6de3, 0xfb476c0d),
+ TOBN(0xf8b6b579, 0x841f5d90), TOBN(0x2ba8446c, 0xfa24f44a),
+ TOBN(0xa237b920, 0xef4a9975), TOBN(0x60bb6004, 0x2330435f),
+ TOBN(0xd6f4ab5a, 0xcfb7e7b5), TOBN(0xb2ac5097, 0x83435391),
+ TOBN(0xf036ee2f, 0xb0d1ea67), TOBN(0xae779a6a, 0x74c56230),
+ TOBN(0x59bff8c8, 0xab838ae6), TOBN(0xcd83ca99, 0x9b38e6f0),
+ TOBN(0xbb27bef5, 0xe33deed3), TOBN(0xe6356f6f, 0x001892a8),
+ TOBN(0xbf3be6cc, 0x7adfbd3e), TOBN(0xaecbc81c, 0x33d1ac9d),
+ TOBN(0xe4feb909, 0xe6e861dc), TOBN(0x90a247a4, 0x53f5f801),
+ TOBN(0x01c50acb, 0x27346e57), TOBN(0xce29242e, 0x461acc1b),
+ TOBN(0x04dd214a, 0x2f998a91), TOBN(0x271ee9b1, 0xd4baf27b),
+ TOBN(0x7e3027d1, 0xe8c26722), TOBN(0x21d1645c, 0x1820dce5),
+ TOBN(0x086f242c, 0x7501779c), TOBN(0xf0061407, 0xfa0e8009),
+ TOBN(0xf23ce477, 0x60187129), TOBN(0x05bbdedb, 0x0fde9bd0),
+ TOBN(0x682f4832, 0x25d98473), TOBN(0xf207fe85, 0x5c658427),
+ TOBN(0xb6fdd7ba, 0x4166ffa1), TOBN(0x0c314056, 0x9eed799d),
+ TOBN(0x0db8048f, 0x4107e28f), TOBN(0x74ed3871, 0x41216840),
+ TOBN(0x74489f8f, 0x56a3c06e), TOBN(0x1e1c005b, 0x12777134),
+ TOBN(0xdb332a73, 0xf37ec3c3), TOBN(0xc65259bd, 0xdd59eba0),
+ TOBN(0x2291709c, 0xdb4d3257), TOBN(0x9a793b25, 0xbd389390),
+ TOBN(0xf39fe34b, 0xe43756f0), TOBN(0x2f76bdce, 0x9afb56c9),
+ TOBN(0x9f37867a, 0x61208b27), TOBN(0xea1d4307, 0x089972c3),
+ TOBN(0x8c595330, 0x8bdf623a), TOBN(0x5f5accda, 0x8441fb7d),
+ TOBN(0xfafa9418, 0x32ddfd95), TOBN(0x6ad40c5a, 0x0fde9be7),
+ TOBN(0x43faba89, 0xaeca8709), TOBN(0xc64a7cf1, 0x2c248a9d),
+ TOBN(0x16620252, 0x72637a76), TOBN(0xaee1c791, 0x22b8d1bb),
+ TOBN(0xf0f798fd, 0x21a843b2), TOBN(0x56e4ed4d, 0x8d005cb1),
+ TOBN(0x355f7780, 0x1f0d8abe), TOBN(0x197b04cf, 0x34522326),
+ TOBN(0x41f9b31f, 0xfd42c13f), TOBN(0x5ef7feb2, 0xb40f933d),
+ TOBN(0x27326f42, 0x5d60bad4), TOBN(0x027ecdb2, 0x8c92cf89),
+ TOBN(0x04aae4d1, 0x4e3352fe), TOBN(0x08414d2f, 0x73591b90),
+ TOBN(0x5ed6124e, 0xb7da7d60), TOBN(0xb985b931, 0x4d13d4ec),
+ TOBN(0xa592d3ab, 0x96bf36f9), TOBN(0x012dbed5, 0xbbdf51df),
+ TOBN(0xa57963c0, 0xdf6c177d), TOBN(0x010ec869, 0x87ca29cf),
+ TOBN(0xba1700f6, 0xbf926dff), TOBN(0x7c9fdbd1, 0xf4bf6bc2),
+ TOBN(0xdc18dc8f, 0x64da11f5), TOBN(0xa6074b7a, 0xd938ae75),
+ TOBN(0x14270066, 0xe84f44a4), TOBN(0x99998d38, 0xd27b954e),
+ TOBN(0xc1be8ab2, 0xb4f38e9a), TOBN(0x8bb55bbf, 0x15c01016),
+ TOBN(0xf73472b4, 0x0ea2ab30), TOBN(0xd365a340, 0xf73d68dd),
+ TOBN(0xc01a7168, 0x19c2e1eb), TOBN(0x32f49e37, 0x34061719),
+ TOBN(0xb73c57f1, 0x01d8b4d6), TOBN(0x03c8423c, 0x26b47700),
+ TOBN(0x321d0bc8, 0xa4d8826a), TOBN(0x6004213c, 0x4bc0e638),
+ TOBN(0xf78c64a1, 0xc1c06681), TOBN(0x16e0a16f, 0xef018e50),
+ TOBN(0x31cbdf91, 0xdb42b2b3), TOBN(0xf8f4ffce, 0xe0d36f58),
+ TOBN(0xcdcc71cd, 0x4cc5e3e0), TOBN(0xd55c7cfa, 0xa129e3e0),
+ TOBN(0xccdb6ba0, 0x0fb2cbf1), TOBN(0x6aba0005, 0xc4bce3cb),
+ TOBN(0x501cdb30, 0xd232cfc4), TOBN(0x9ddcf12e, 0xd58a3cef),
+ TOBN(0x02d2cf9c, 0x87e09149), TOBN(0xdc5d7ec7, 0x2c976257),
+ TOBN(0x6447986e, 0x0b50d7dd), TOBN(0x88fdbaf7, 0x807f112a),
+ TOBN(0x58c9822a, 0xb00ae9f6), TOBN(0x6abfb950, 0x6d3d27e0),
+ TOBN(0xd0a74487, 0x8a429f4f), TOBN(0x0649712b, 0xdb516609),
+ TOBN(0xb826ba57, 0xe769b5df), TOBN(0x82335df2, 0x1fc7aaf2),
+ TOBN(0x2389f067, 0x5c93d995), TOBN(0x59ac367a, 0x68677be6),
+ TOBN(0xa77985ff, 0x21d9951b), TOBN(0x038956fb, 0x85011cce),
+ TOBN(0x608e48cb, 0xbb734e37), TOBN(0xc08c0bf2, 0x2be5b26f),
+ TOBN(0x17bbdd3b, 0xf9b1a0d9), TOBN(0xeac7d898, 0x10483319),
+ TOBN(0xc95c4baf, 0xbc1a6dea), TOBN(0xfdd0e2bf, 0x172aafdb),
+ TOBN(0x40373cbc, 0x8235c41a), TOBN(0x14303f21, 0xfb6f41d5),
+ TOBN(0xba063621, 0x0408f237), TOBN(0xcad3b09a, 0xecd2d1ed),
+ TOBN(0x4667855a, 0x52abb6a2), TOBN(0xba9157dc, 0xaa8b417b),
+ TOBN(0xfe7f3507, 0x4f013efb), TOBN(0x1b112c4b, 0xaa38c4a2),
+ TOBN(0xa1406a60, 0x9ba64345), TOBN(0xe53cba33, 0x6993c80b),
+ TOBN(0x45466063, 0xded40d23), TOBN(0x3d5f1f4d, 0x54908e25),
+ TOBN(0x9ebefe62, 0x403c3c31), TOBN(0x274ea0b5, 0x0672a624),
+ TOBN(0xff818d99, 0x451d1b71), TOBN(0x80e82643, 0x8f79cf79),
+ TOBN(0xa165df13, 0x73ce37f5), TOBN(0xa744ef4f, 0xfe3a21fd),
+ TOBN(0x73f1e7f5, 0xcf551396), TOBN(0xc616898e, 0x868c676b),
+ TOBN(0x671c28c7, 0x8c442c36), TOBN(0xcfe5e558, 0x5e0a317d),
+ TOBN(0x1242d818, 0x7051f476), TOBN(0x56fad2a6, 0x14f03442),
+ TOBN(0x262068bc, 0x0a44d0f6), TOBN(0xdfa2cd6e, 0xce6edf4e),
+ TOBN(0x0f43813a, 0xd15d1517), TOBN(0x61214cb2, 0x377d44f5),
+ TOBN(0xd399aa29, 0xc639b35f), TOBN(0x42136d71, 0x54c51c19),
+ TOBN(0x9774711b, 0x08417221), TOBN(0x0a5546b3, 0x52545a57),
+ TOBN(0x80624c41, 0x1150582d), TOBN(0x9ec5c418, 0xfbc555bc),
+ TOBN(0x2c87dcad, 0x771849f1), TOBN(0xb0c932c5, 0x01d7bf6f),
+ TOBN(0x6aa5cd3e, 0x89116eb2), TOBN(0xd378c25a, 0x51ca7bd3),
+ TOBN(0xc612a0da, 0x9e6e3e31), TOBN(0x0417a54d, 0xb68ad5d0),
+ TOBN(0x00451e4a, 0x22c6edb8), TOBN(0x9fbfe019, 0xb42827ce),
+ TOBN(0x2fa92505, 0xba9384a2), TOBN(0x21b8596e, 0x64ad69c1),
+ TOBN(0x8f4fcc49, 0x983b35a6), TOBN(0xde093760, 0x72754672),
+ TOBN(0x2f14ccc8, 0xf7bffe6d), TOBN(0x27566bff, 0x5d94263d),
+ TOBN(0xb5b4e9c6, 0x2df3ec30), TOBN(0x94f1d7d5, 0x3e6ea6ba),
+ TOBN(0x97b7851a, 0xaaca5e9b), TOBN(0x518aa521, 0x56713b97),
+ TOBN(0x3357e8c7, 0x150a61f6), TOBN(0x7842e7e2, 0xec2c2b69),
+ TOBN(0x8dffaf65, 0x6868a548), TOBN(0xd963bd82, 0xe068fc81),
+ TOBN(0x64da5c8b, 0x65917733), TOBN(0x927090ff, 0x7b247328),}
+ ,
+ {TOBN(0x214bc9a7, 0xd298c241), TOBN(0xe3b697ba, 0x56807cfd),
+ TOBN(0xef1c7802, 0x4564eadb), TOBN(0xdde8cdcf, 0xb48149c5),
+ TOBN(0x946bf0a7, 0x5a4d2604), TOBN(0x27154d7f, 0x6c1538af),
+ TOBN(0x95cc9230, 0xde5b1fcc), TOBN(0xd88519e9, 0x66864f82),
+ TOBN(0xb828dd1a, 0x7cb1282c), TOBN(0xa08d7626, 0xbe46973a),
+ TOBN(0x6baf8d40, 0xe708d6b2), TOBN(0x72571fa1, 0x4daeb3f3),
+ TOBN(0x85b1732f, 0xf22dfd98), TOBN(0x87ab01a7, 0x0087108d),
+ TOBN(0xaaaafea8, 0x5988207a), TOBN(0xccc832f8, 0x69f00755),
+ TOBN(0x964d950e, 0x36ff3bf0), TOBN(0x8ad20f6f, 0xf0b34638),
+ TOBN(0x4d9177b3, 0xb5d7585f), TOBN(0xcf839760, 0xef3f019f),
+ TOBN(0x582fc5b3, 0x8288c545), TOBN(0x2f8e4e9b, 0x13116bd1),
+ TOBN(0xf91e1b2f, 0x332120ef), TOBN(0xcf568724, 0x2a17dd23),
+ TOBN(0x488f1185, 0xca8d9d1a), TOBN(0xadf2c77d, 0xd987ded2),
+ TOBN(0x5f3039f0, 0x60c46124), TOBN(0xe5d70b75, 0x71e095f4),
+ TOBN(0x82d58650, 0x6260e70f), TOBN(0x39d75ea7, 0xf750d105),
+ TOBN(0x8cf3d0b1, 0x75bac364), TOBN(0xf3a7564d, 0x21d01329),
+ TOBN(0x182f04cd, 0x2f52d2a7), TOBN(0x4fde149a, 0xe2df565a),
+ TOBN(0xb80c5eec, 0xa79fb2f7), TOBN(0xab491d7b, 0x22ddc897),
+ TOBN(0x99d76c18, 0xc6312c7f), TOBN(0xca0d5f3d, 0x6aa41a57),
+ TOBN(0x71207325, 0xd15363a0), TOBN(0xe82aa265, 0xbeb252c2),
+ TOBN(0x94ab4700, 0xec3128c2), TOBN(0x6c76d862, 0x8e383f49),
+ TOBN(0xdc36b150, 0xc03024eb), TOBN(0xfb439477, 0x53daac69),
+ TOBN(0xfc68764a, 0x8dc79623), TOBN(0x5b86995d, 0xb440fbb2),
+ TOBN(0xd66879bf, 0xccc5ee0d), TOBN(0x05228942, 0x95aa8bd3),
+ TOBN(0xb51a40a5, 0x1e6a75c1), TOBN(0x24327c76, 0x0ea7d817),
+ TOBN(0x06630182, 0x07774597), TOBN(0xd6fdbec3, 0x97fa7164),
+ TOBN(0x20c99dfb, 0x13c90f48), TOBN(0xd6ac5273, 0x686ef263),
+ TOBN(0xc6a50bdc, 0xfef64eeb), TOBN(0xcd87b281, 0x86fdfc32),
+ TOBN(0xb24aa43e, 0x3fcd3efc), TOBN(0xdd26c034, 0xb8088e9a),
+ TOBN(0xa5ef4dc9, 0xbd3d46ea), TOBN(0xa2f99d58, 0x8a4c6a6f),
+ TOBN(0xddabd355, 0x2f1da46c), TOBN(0x72c3f8ce, 0x1afacdd1),
+ TOBN(0xd90c4eee, 0x92d40578), TOBN(0xd28bb41f, 0xca623b94),
+ TOBN(0x50fc0711, 0x745edc11), TOBN(0x9dd9ad7d, 0x3dc87558),
+ TOBN(0xce6931fb, 0xb49d1e64), TOBN(0x6c77a0a2, 0xc98bd0f9),
+ TOBN(0x62b9a629, 0x6baf7cb1), TOBN(0xcf065f91, 0xccf72d22),
+ TOBN(0x7203cce9, 0x79639071), TOBN(0x09ae4885, 0xf9cb732f),
+ TOBN(0x5e7c3bec, 0xee8314f3), TOBN(0x1c068aed, 0xdbea298f),
+ TOBN(0x08d381f1, 0x7c80acec), TOBN(0x03b56be8, 0xe330495b),
+ TOBN(0xaeffb8f2, 0x9222882d), TOBN(0x95ff38f6, 0xc4af8bf7),
+ TOBN(0x50e32d35, 0x1fc57d8c), TOBN(0x6635be52, 0x17b444f0),
+ TOBN(0x04d15276, 0xa5177900), TOBN(0x4e1dbb47, 0xf6858752),
+ TOBN(0x5b475622, 0xc615796c), TOBN(0xa6fa0387, 0x691867bf),
+ TOBN(0xed7f5d56, 0x2844c6d0), TOBN(0xc633cf9b, 0x03a2477d),
+ TOBN(0xf6be5c40, 0x2d3721d6), TOBN(0xaf312eb7, 0xe9fd68e6),
+ TOBN(0x242792d2, 0xe7417ce1), TOBN(0xff42bc71, 0x970ee7f5),
+ TOBN(0x1ff4dc6d, 0x5c67a41e), TOBN(0x77709b7b, 0x20882a58),
+ TOBN(0x3554731d, 0xbe217f2c), TOBN(0x2af2a8cd, 0x5bb72177),
+ TOBN(0x58eee769, 0x591dd059), TOBN(0xbb2930c9, 0x4bba6477),
+ TOBN(0x863ee047, 0x7d930cfc), TOBN(0x4c262ad1, 0x396fd1f4),
+ TOBN(0xf4765bc8, 0x039af7e1), TOBN(0x2519834b, 0x5ba104f6),
+ TOBN(0x7cd61b4c, 0xd105f961), TOBN(0xa5415da5, 0xd63bca54),
+ TOBN(0x778280a0, 0x88a1f17c), TOBN(0xc4968949, 0x2329512c),
+ TOBN(0x174a9126, 0xcecdaa7a), TOBN(0xfc8c7e0e, 0x0b13247b),
+ TOBN(0x29c110d2, 0x3484c1c4), TOBN(0xf8eb8757, 0x831dfc3b),
+ TOBN(0x022f0212, 0xc0067452), TOBN(0x3f6f69ee, 0x7b9b926c),
+ TOBN(0x09032da0, 0xef42daf4), TOBN(0x79f00ade, 0x83f80de4),
+ TOBN(0x6210db71, 0x81236c97), TOBN(0x74f7685b, 0x3ee0781f),
+ TOBN(0x4df7da7b, 0xa3e41372), TOBN(0x2aae38b1, 0xb1a1553e),
+ TOBN(0x1688e222, 0xf6dd9d1b), TOBN(0x57695448, 0x5b8b6487),
+ TOBN(0x478d2127, 0x4b2edeaa), TOBN(0xb2818fa5, 0x1e85956a),
+ TOBN(0x1e6addda, 0xf176f2c0), TOBN(0x01ca4604, 0xe2572658),
+ TOBN(0x0a404ded, 0x85342ffb), TOBN(0x8cf60f96, 0x441838d6),
+ TOBN(0x9bbc691c, 0xc9071c4a), TOBN(0xfd588744, 0x34442803),
+ TOBN(0x97101c85, 0x809c0d81), TOBN(0xa7fb754c, 0x8c456f7f),
+ TOBN(0xc95f3c5c, 0xd51805e1), TOBN(0xab4ccd39, 0xb299dca8),
+ TOBN(0x3e03d20b, 0x47eaf500), TOBN(0xfa3165c1, 0xd7b80893),
+ TOBN(0x005e8b54, 0xe160e552), TOBN(0xdc4972ba, 0x9019d11f),
+ TOBN(0x21a6972e, 0x0c9a4a7a), TOBN(0xa52c258f, 0x37840fd7),
+ TOBN(0xf8559ff4, 0xc1e99d81), TOBN(0x08e1a7d6, 0xa3c617c0),
+ TOBN(0xb398fd43, 0x248c6ba7), TOBN(0x6ffedd91, 0xd1283794),
+ TOBN(0x8a6a59d2, 0xd629d208), TOBN(0xa9d141d5, 0x3490530e),
+ TOBN(0x42f6fc18, 0x38505989), TOBN(0x09bf250d, 0x479d94ee),
+ TOBN(0x223ad3b1, 0xb3822790), TOBN(0x6c5926c0, 0x93b8971c),
+ TOBN(0x609efc7e, 0x75f7fa62), TOBN(0x45d66a6d, 0x1ec2d989),
+ TOBN(0x4422d663, 0x987d2792), TOBN(0x4a73caad, 0x3eb31d2b),
+ TOBN(0xf06c2ac1, 0xa32cb9e6), TOBN(0xd9445c5f, 0x91aeba84),
+ TOBN(0x6af7a1d5, 0xaf71013f), TOBN(0xe68216e5, 0x0bedc946),
+ TOBN(0xf4cba30b, 0xd27370a0), TOBN(0x7981afbf, 0x870421cc),
+ TOBN(0x02496a67, 0x9449f0e1), TOBN(0x86cfc4be, 0x0a47edae),
+ TOBN(0x3073c936, 0xb1feca22), TOBN(0xf5694612, 0x03f8f8fb),
+ TOBN(0xd063b723, 0x901515ea), TOBN(0x4c6c77a5, 0x749cf038),
+ TOBN(0x6361e360, 0xab9e5059), TOBN(0x596cf171, 0xa76a37c0),
+ TOBN(0x800f53fa, 0x6530ae7a), TOBN(0x0f5e631e, 0x0792a7a6),
+ TOBN(0x5cc29c24, 0xefdb81c9), TOBN(0xa269e868, 0x3f9c40ba),
+ TOBN(0xec14f9e1, 0x2cb7191e), TOBN(0x78ea1bd8, 0xe5b08ea6),
+ TOBN(0x3c65aa9b, 0x46332bb9), TOBN(0x84cc22b3, 0xbf80ce25),
+ TOBN(0x0098e9e9, 0xd49d5bf1), TOBN(0xcd4ec1c6, 0x19087da4),
+ TOBN(0x3c9d07c5, 0xaef6e357), TOBN(0x839a0268, 0x9f8f64b8),
+ TOBN(0xc5e9eb62, 0xc6d8607f), TOBN(0x759689f5, 0x6aa995e4),
+ TOBN(0x70464669, 0xbbb48317), TOBN(0x921474bf, 0xe402417d),
+ TOBN(0xcabe135b, 0x2a354c8c), TOBN(0xd51e52d2, 0x812fa4b5),
+ TOBN(0xec741096, 0x53311fe8), TOBN(0x4f774535, 0xb864514b),
+ TOBN(0xbcadd671, 0x5bde48f8), TOBN(0xc9703873, 0x2189bc7d),
+ TOBN(0x5d45299e, 0xc709ee8a), TOBN(0xd1287ee2, 0x845aaff8),
+ TOBN(0x7d1f8874, 0xdb1dbf1f), TOBN(0xea46588b, 0x990c88d6),
+ TOBN(0x60ba649a, 0x84368313), TOBN(0xd5fdcbce, 0x60d543ae),
+ TOBN(0x90b46d43, 0x810d5ab0), TOBN(0x6739d8f9, 0x04d7e5cc),
+ TOBN(0x021c1a58, 0x0d337c33), TOBN(0x00a61162, 0x68e67c40),
+ TOBN(0x95ef413b, 0x379f0a1f), TOBN(0xfe126605, 0xe9e2ab95),
+ TOBN(0x67578b85, 0x2f5f199c), TOBN(0xf5c00329, 0x2cb84913),
+ TOBN(0xf7956430, 0x37577dd8), TOBN(0x83b82af4, 0x29c5fe88),
+ TOBN(0x9c1bea26, 0xcdbdc132), TOBN(0x589fa086, 0x9c04339e),
+ TOBN(0x033e9538, 0xb13799df), TOBN(0x85fa8b21, 0xd295d034),
+ TOBN(0xdf17f73f, 0xbd9ddcca), TOBN(0xf32bd122, 0xddb66334),
+ TOBN(0x55ef88a7, 0x858b044c), TOBN(0x1f0d69c2, 0x5aa9e397),
+ TOBN(0x55fd9cc3, 0x40d85559), TOBN(0xc774df72, 0x7785ddb2),
+ TOBN(0x5dcce9f6, 0xd3bd2e1c), TOBN(0xeb30da20, 0xa85dfed0),
+ TOBN(0x5ed7f5bb, 0xd3ed09c4), TOBN(0x7d42a35c, 0x82a9c1bd),
+ TOBN(0xcf3de995, 0x9890272d), TOBN(0x75f3432a, 0x3e713a10),
+ TOBN(0x5e13479f, 0xe28227b8), TOBN(0xb8561ea9, 0xfefacdc8),
+ TOBN(0xa6a297a0, 0x8332aafd), TOBN(0x9b0d8bb5, 0x73809b62),
+ TOBN(0xd2fa1cfd, 0x0c63036f), TOBN(0x7a16eb55, 0xbd64bda8),
+ TOBN(0x3f5cf5f6, 0x78e62ddc), TOBN(0x2267c454, 0x07fd752b),
+ TOBN(0x5e361b6b, 0x5e437bbe), TOBN(0x95c59501, 0x8354e075),
+ TOBN(0xec725f85, 0xf2b254d9), TOBN(0x844b617d, 0x2cb52b4e),
+ TOBN(0xed8554f5, 0xcf425fb5), TOBN(0xab67703e, 0x2af9f312),
+ TOBN(0x4cc34ec1, 0x3cf48283), TOBN(0xb09daa25, 0x9c8a705e),
+ TOBN(0xd1e9d0d0, 0x5b7d4f84), TOBN(0x4df6ef64, 0xdb38929d),
+ TOBN(0xe16b0763, 0xaa21ba46), TOBN(0xc6b1d178, 0xa293f8fb),
+ TOBN(0x0ff5b602, 0xd520aabf), TOBN(0x94d671bd, 0xc339397a),
+ TOBN(0x7c7d98cf, 0x4f5792fa), TOBN(0x7c5e0d67, 0x11215261),
+ TOBN(0x9b19a631, 0xa7c5a6d4), TOBN(0xc8511a62, 0x7a45274d),
+ TOBN(0x0c16621c, 0xa5a60d99), TOBN(0xf7fbab88, 0xcf5e48cb),
+ TOBN(0xab1e6ca2, 0xf7ddee08), TOBN(0x83bd08ce, 0xe7867f3c),
+ TOBN(0xf7e48e8a, 0x2ac13e27), TOBN(0x4494f6df, 0x4eb1a9f5),
+ TOBN(0xedbf84eb, 0x981f0a62), TOBN(0x49badc32, 0x536438f0),
+ TOBN(0x50bea541, 0x004f7571), TOBN(0xbac67d10, 0xdf1c94ee),
+ TOBN(0x253d73a1, 0xb727bc31), TOBN(0xb3d01cf2, 0x30686e28),
+ TOBN(0x51b77b1b, 0x55fd0b8b), TOBN(0xa099d183, 0xfeec3173),
+ TOBN(0x202b1fb7, 0x670e72b7), TOBN(0xadc88b33, 0xa8e1635f),
+ TOBN(0x34e8216a, 0xf989d905), TOBN(0xc2e68d20, 0x29b58d01),
+ TOBN(0x11f81c92, 0x6fe55a93), TOBN(0x15f1462a, 0x8f296f40),
+ TOBN(0x1915d375, 0xea3d62f2), TOBN(0xa17765a3, 0x01c8977d),
+ TOBN(0x7559710a, 0xe47b26f6), TOBN(0xe0bd29c8, 0x535077a5),
+ TOBN(0x615f976d, 0x08d84858), TOBN(0x370dfe85, 0x69ced5c1),
+ TOBN(0xbbc7503c, 0xa734fa56), TOBN(0xfbb9f1ec, 0x91ac4574),
+ TOBN(0x95d7ec53, 0x060dd7ef), TOBN(0xeef2dacd, 0x6e657979),
+ TOBN(0x54511af3, 0xe2a08235), TOBN(0x1e324aa4, 0x1f4aea3d),
+ TOBN(0x550e7e71, 0xe6e67671), TOBN(0xbccd5190, 0xbf52faf7),
+ TOBN(0xf880d316, 0x223cc62a), TOBN(0x0d402c7e, 0x2b32eb5d),
+ TOBN(0xa40bc039, 0x306a5a3b), TOBN(0x4e0a41fd, 0x96783a1b),
+ TOBN(0xa1e8d39a, 0x0253cdd4), TOBN(0x6480be26, 0xc7388638),
+ TOBN(0xee365e1d, 0x2285f382), TOBN(0x188d8d8f, 0xec0b5c36),
+ TOBN(0x34ef1a48, 0x1f0f4d82), TOBN(0x1a8f43e1, 0xa487d29a),
+ TOBN(0x8168226d, 0x77aefb3a), TOBN(0xf69a751e, 0x1e72c253),
+ TOBN(0x8e04359a, 0xe9594df1), TOBN(0x475ffd7d, 0xd14c0467),
+ TOBN(0xb5a2c2b1, 0x3844e95c), TOBN(0x85caf647, 0xdd12ef94),
+ TOBN(0x1ecd2a9f, 0xf1063d00), TOBN(0x1dd2e229, 0x23843311),
+ TOBN(0x38f0e09d, 0x73d17244), TOBN(0x3ede7746, 0x8fc653f1),
+ TOBN(0xae4459f5, 0xdc20e21c), TOBN(0x00db2ffa, 0x6a8599ea),
+ TOBN(0x11682c39, 0x30cfd905), TOBN(0x4934d074, 0xa5c112a6),
+ TOBN(0xbdf063c5, 0x568bfe95), TOBN(0x779a440a, 0x016c441a),
+ TOBN(0x0c23f218, 0x97d6fbdc), TOBN(0xd3a5cd87, 0xe0776aac),
+ TOBN(0xcee37f72, 0xd712e8db), TOBN(0xfb28c70d, 0x26f74e8d),
+ TOBN(0xffe0c728, 0xb61301a0), TOBN(0xa6282168, 0xd3724354),
+ TOBN(0x7ff4cb00, 0x768ffedc), TOBN(0xc51b3088, 0x03b02de9),
+ TOBN(0xa5a8147c, 0x3902dda5), TOBN(0x35d2f706, 0xfe6973b4),
+ TOBN(0x5ac2efcf, 0xc257457e), TOBN(0x933f48d4, 0x8700611b),
+ TOBN(0xc365af88, 0x4912beb2), TOBN(0x7f5a4de6, 0x162edf94),
+ TOBN(0xc646ba7c, 0x0c32f34b), TOBN(0x632c6af3, 0xb2091074),
+ TOBN(0x58d4f2e3, 0x753e43a9), TOBN(0x70e1d217, 0x24d4e23f),
+ TOBN(0xb24bf729, 0xafede6a6), TOBN(0x7f4a94d8, 0x710c8b60),
+ TOBN(0xaad90a96, 0x8d4faa6a), TOBN(0xd9ed0b32, 0xb066b690),
+ TOBN(0x52fcd37b, 0x78b6dbfd), TOBN(0x0b64615e, 0x8bd2b431),
+ TOBN(0x228e2048, 0xcfb9fad5), TOBN(0xbeaa386d, 0x240b76bd),
+ TOBN(0x2d6681c8, 0x90dad7bc), TOBN(0x3e553fc3, 0x06d38f5e),
+ TOBN(0xf27cdb9b, 0x9d5f9750), TOBN(0x3e85c52a, 0xd28c5b0e),
+ TOBN(0x190795af, 0x5247c39b), TOBN(0x547831eb, 0xbddd6828),
+ TOBN(0xf327a227, 0x4a82f424), TOBN(0x36919c78, 0x7e47f89d),
+ TOBN(0xe4783919, 0x43c7392c), TOBN(0xf101b9aa, 0x2316fefe),
+ TOBN(0xbcdc9e9c, 0x1c5009d2), TOBN(0xfb55ea13, 0x9cd18345),
+ TOBN(0xf5b5e231, 0xa3ce77c7), TOBN(0xde6b4527, 0xd2f2cb3d),
+ TOBN(0x10f6a333, 0x9bb26f5f), TOBN(0x1e85db8e, 0x044d85b6),
+ TOBN(0xc3697a08, 0x94197e54), TOBN(0x65e18cc0, 0xa7cb4ea8),
+ TOBN(0xa38c4f50, 0xa471fe6e), TOBN(0xf031747a, 0x2f13439c),
+ TOBN(0x53c4a6ba, 0xc007318b), TOBN(0xa8da3ee5, 0x1deccb3d),
+ TOBN(0x0555b31c, 0x558216b1), TOBN(0x90c7810c, 0x2f79e6c2),
+ TOBN(0x9b669f4d, 0xfe8eed3c), TOBN(0x70398ec8, 0xe0fac126),
+ TOBN(0xa96a449e, 0xf701b235), TOBN(0x0ceecdb3, 0xeb94f395),
+ TOBN(0x285fc368, 0xd0cb7431), TOBN(0x0d37bb52, 0x16a18c64),
+ TOBN(0x05110d38, 0xb880d2dd), TOBN(0xa60f177b, 0x65930d57),
+ TOBN(0x7da34a67, 0xf36235f5), TOBN(0x47f5e17c, 0x183816b9),
+ TOBN(0xc7664b57, 0xdb394af4), TOBN(0x39ba215d, 0x7036f789),
+ TOBN(0x46d2ca0e, 0x2f27b472), TOBN(0xc42647ee, 0xf73a84b7),
+ TOBN(0x44bc7545, 0x64488f1d), TOBN(0xaa922708, 0xf4cf85d5),
+ TOBN(0x721a01d5, 0x53e4df63), TOBN(0x649c0c51, 0x5db46ced),
+ TOBN(0x6bf0d64e, 0x3cffcb6c), TOBN(0xe3bf93fe, 0x50f71d96),
+ TOBN(0x75044558, 0xbcc194a0), TOBN(0x16ae3372, 0x6afdc554),
+ TOBN(0xbfc01adf, 0x5ca48f3f), TOBN(0x64352f06, 0xe22a9b84),
+ TOBN(0xcee54da1, 0xc1099e4a), TOBN(0xbbda54e8, 0xfa1b89c0),
+ TOBN(0x166a3df5, 0x6f6e55fb), TOBN(0x1ca44a24, 0x20176f88),
+ TOBN(0x936afd88, 0xdfb7b5ff), TOBN(0xe34c2437, 0x8611d4a0),
+ TOBN(0x7effbb75, 0x86142103), TOBN(0x6704ba1b, 0x1f34fc4d),
+ TOBN(0x7c2a468f, 0x10c1b122), TOBN(0x36b3a610, 0x8c6aace9),
+ TOBN(0xabfcc0a7, 0x75a0d050), TOBN(0x066f9197, 0x3ce33e32),
+ TOBN(0xce905ef4, 0x29fe09be), TOBN(0x89ee25ba, 0xa8376351),
+ TOBN(0x2a3ede22, 0xfd29dc76), TOBN(0x7fd32ed9, 0x36f17260),
+ TOBN(0x0cadcf68, 0x284b4126), TOBN(0x63422f08, 0xa7951fc8),
+ TOBN(0x562b24f4, 0x0807e199), TOBN(0xfe9ce5d1, 0x22ad4490),
+ TOBN(0xc2f51b10, 0x0db2b1b4), TOBN(0xeb3613ff, 0xe4541d0d),
+ TOBN(0xbd2c4a05, 0x2680813b), TOBN(0x527aa55d, 0x561b08d6),
+ TOBN(0xa9f8a40e, 0xa7205558), TOBN(0xe3eea56f, 0x243d0bec),
+ TOBN(0x7b853817, 0xa0ff58b3), TOBN(0xb67d3f65, 0x1a69e627),
+ TOBN(0x0b76bbb9, 0xa869b5d6), TOBN(0xa3afeb82, 0x546723ed),
+ TOBN(0x5f24416d, 0x3e554892), TOBN(0x8413b53d, 0x430e2a45),
+ TOBN(0x99c56aee, 0x9032a2a0), TOBN(0x09432bf6, 0xeec367b1),
+ TOBN(0x552850c6, 0xdaf0ecc1), TOBN(0x49ebce55, 0x5bc92048),
+ TOBN(0xdfb66ba6, 0x54811307), TOBN(0x1b84f797, 0x6f298597),
+ TOBN(0x79590481, 0x8d1d7a0d), TOBN(0xd9fabe03, 0x3a6fa556),
+ TOBN(0xa40f9c59, 0xba9e5d35), TOBN(0xcb1771c1, 0xf6247577),
+ TOBN(0x542a47ca, 0xe9a6312b), TOBN(0xa34b3560, 0x552dd8c5),
+ TOBN(0xfdf94de0, 0x0d794716), TOBN(0xd46124a9, 0x9c623094),
+ TOBN(0x56b7435d, 0x68afe8b4), TOBN(0x27f20540, 0x6c0d8ea1),
+ TOBN(0x12b77e14, 0x73186898), TOBN(0xdbc3dd46, 0x7479490f),
+ TOBN(0x951a9842, 0xc03b0c05), TOBN(0x8b1b3bb3, 0x7921bc96),
+ TOBN(0xa573b346, 0x2b202e0a), TOBN(0x77e4665d, 0x47254d56),
+ TOBN(0x08b70dfc, 0xd23e3984), TOBN(0xab86e8bc, 0xebd14236),
+ TOBN(0xaa3e07f8, 0x57114ba7), TOBN(0x5ac71689, 0xab0ef4f2),
+ TOBN(0x88fca384, 0x0139d9af), TOBN(0x72733f88, 0x76644af0),
+ TOBN(0xf122f72a, 0x65d74f4a), TOBN(0x13931577, 0xa5626c7a),
+ TOBN(0xd5b5d9eb, 0x70f8d5a4), TOBN(0x375adde7, 0xd7bbb228),
+ TOBN(0x31e88b86, 0x0c1c0b32), TOBN(0xd1f568c4, 0x173edbaa),
+ TOBN(0x1592fc83, 0x5459df02), TOBN(0x2beac0fb, 0x0fcd9a7e),
+ TOBN(0xb0a6fdb8, 0x1b473b0a), TOBN(0xe3224c6f, 0x0fe8fc48),
+ TOBN(0x680bd00e, 0xe87edf5b), TOBN(0x30385f02, 0x20e77cf5),
+ TOBN(0xe9ab98c0, 0x4d42d1b2), TOBN(0x72d191d2, 0xd3816d77),
+ TOBN(0x1564daca, 0x0917d9e5), TOBN(0x394eab59, 0x1f8fed7f),
+ TOBN(0xa209aa8d, 0x7fbb3896), TOBN(0x5564f3b9, 0xbe6ac98e),
+ TOBN(0xead21d05, 0xd73654ef), TOBN(0x68d1a9c4, 0x13d78d74),
+ TOBN(0x61e01708, 0x6d4973a0), TOBN(0x83da3500, 0x46e6d32a),
+ TOBN(0x6a3dfca4, 0x68ae0118), TOBN(0xa1b9a4c9, 0xd02da069),
+ TOBN(0x0b2ff9c7, 0xebab8302), TOBN(0x98af07c3, 0x944ba436),
+ TOBN(0x85997326, 0x995f0f9f), TOBN(0x467fade0, 0x71b58bc6),
+ TOBN(0x47e4495a, 0xbd625a2b), TOBN(0xfdd2d01d, 0x33c3b8cd),
+ TOBN(0x2c38ae28, 0xc693f9fa), TOBN(0x48622329, 0x348f7999),
+ TOBN(0x97bf738e, 0x2161f583), TOBN(0x15ee2fa7, 0x565e8cc9),
+ TOBN(0xa1a5c845, 0x5777e189), TOBN(0xcc10bee0, 0x456f2829),
+ TOBN(0x8ad95c56, 0xda762bd5), TOBN(0x152e2214, 0xe9d91da8),
+ TOBN(0x975b0e72, 0x7cb23c74), TOBN(0xfd5d7670, 0xa90c66df),
+ TOBN(0xb5b5b8ad, 0x225ffc53), TOBN(0xab6dff73, 0xfaded2ae),
+ TOBN(0xebd56781, 0x6f4cbe9d), TOBN(0x0ed8b249, 0x6a574bd7),
+ TOBN(0x41c246fe, 0x81a881fa), TOBN(0x91564805, 0xc3db9c70),
+ TOBN(0xd7c12b08, 0x5b862809), TOBN(0x1facd1f1, 0x55858d7b),
+ TOBN(0x7693747c, 0xaf09e92a), TOBN(0x3b69dcba, 0x189a425f),
+ TOBN(0x0be28e9f, 0x967365ef), TOBN(0x57300eb2, 0xe801f5c9),
+ TOBN(0x93b8ac6a, 0xd583352f), TOBN(0xa2cf1f89, 0xcd05b2b7),
+ TOBN(0x7c0c9b74, 0x4dcc40cc), TOBN(0xfee38c45, 0xada523fb),
+ TOBN(0xb49a4dec, 0x1099cc4d), TOBN(0x325c377f, 0x69f069c6),
+ TOBN(0xe12458ce, 0x476cc9ff), TOBN(0x580e0b6c, 0xc6d4cb63),
+ TOBN(0xd561c8b7, 0x9072289b), TOBN(0x0377f264, 0xa619e6da),
+ TOBN(0x26685362, 0x88e591a5), TOBN(0xa453a7bd, 0x7523ca2b),
+ TOBN(0x8a9536d2, 0xc1df4533), TOBN(0xc8e50f2f, 0xbe972f79),
+ TOBN(0xd433e50f, 0x6d3549cf), TOBN(0x6f33696f, 0xfacd665e),
+ TOBN(0x695bfdac, 0xce11fcb4), TOBN(0x810ee252, 0xaf7c9860),
+ TOBN(0x65450fe1, 0x7159bb2c), TOBN(0xf7dfbebe, 0x758b357b),
+ TOBN(0x2b057e74, 0xd69fea72), TOBN(0xd485717a, 0x92731745),}
+ ,
+ {TOBN(0x896c42e8, 0xee36860c), TOBN(0xdaf04dfd, 0x4113c22d),
+ TOBN(0x1adbb7b7, 0x44104213), TOBN(0xe5fd5fa1, 0x1fd394ea),
+ TOBN(0x68235d94, 0x1a4e0551), TOBN(0x6772cfbe, 0x18d10151),
+ TOBN(0x276071e3, 0x09984523), TOBN(0xe4e879de, 0x5a56ba98),
+ TOBN(0xaaafafb0, 0x285b9491), TOBN(0x01a0be88, 0x1e4c705e),
+ TOBN(0xff1d4f5d, 0x2ad9caab), TOBN(0x6e349a4a, 0xc37a233f),
+ TOBN(0xcf1c1246, 0x4a1c6a16), TOBN(0xd99e6b66, 0x29383260),
+ TOBN(0xea3d4366, 0x5f6d5471), TOBN(0x36974d04, 0xff8cc89b),
+ TOBN(0xc26c49a1, 0xcfe89d80), TOBN(0xb42c026d, 0xda9c8371),
+ TOBN(0xca6c013a, 0xdad066d2), TOBN(0xfb8f7228, 0x56a4f3ee),
+ TOBN(0x08b579ec, 0xd850935b), TOBN(0x34c1a74c, 0xd631e1b3),
+ TOBN(0xcb5fe596, 0xac198534), TOBN(0x39ff21f6, 0xe1f24f25),
+ TOBN(0x27f29e14, 0x8f929057), TOBN(0x7a64ae06, 0xc0c853df),
+ TOBN(0x256cd183, 0x58e9c5ce), TOBN(0x9d9cce82, 0xded092a5),
+ TOBN(0xcc6e5979, 0x6e93b7c7), TOBN(0xe1e47092, 0x31bb9e27),
+ TOBN(0xb70b3083, 0xaa9e29a0), TOBN(0xbf181a75, 0x3785e644),
+ TOBN(0xf53f2c65, 0x8ead09f7), TOBN(0x1335e1d5, 0x9780d14d),
+ TOBN(0x69cc20e0, 0xcd1b66bc), TOBN(0x9b670a37, 0xbbe0bfc8),
+ TOBN(0xce53dc81, 0x28efbeed), TOBN(0x0c74e77c, 0x8326a6e5),
+ TOBN(0x3604e0d2, 0xb88e9a63), TOBN(0xbab38fca, 0x13dc2248),
+ TOBN(0x8ed6e8c8, 0x5c0a3f1e), TOBN(0xbcad2492, 0x7c87c37f),
+ TOBN(0xfdfb62bb, 0x9ee3b78d), TOBN(0xeba8e477, 0xcbceba46),
+ TOBN(0x37d38cb0, 0xeeaede4b), TOBN(0x0bc498e8, 0x7976deb6),
+ TOBN(0xb2944c04, 0x6b6147fb), TOBN(0x8b123f35, 0xf71f9609),
+ TOBN(0xa155dcc7, 0xde79dc24), TOBN(0xf1168a32, 0x558f69cd),
+ TOBN(0xbac21595, 0x0d1850df), TOBN(0x15c8295b, 0xb204c848),
+ TOBN(0xf661aa36, 0x7d8184ff), TOBN(0xc396228e, 0x30447bdb),
+ TOBN(0x11cd5143, 0xbde4a59e), TOBN(0xe3a26e3b, 0x6beab5e6),
+ TOBN(0xd3b3a13f, 0x1402b9d0), TOBN(0x573441c3, 0x2c7bc863),
+ TOBN(0x4b301ec4, 0x578c3e6e), TOBN(0xc26fc9c4, 0x0adaf57e),
+ TOBN(0x96e71bfd, 0x7493cea3), TOBN(0xd05d4b3f, 0x1af81456),
+ TOBN(0xdaca2a8a, 0x6a8c608f), TOBN(0x53ef07f6, 0x0725b276),
+ TOBN(0x07a5fbd2, 0x7824fc56), TOBN(0x34675218, 0x13289077),
+ TOBN(0x5bf69fd5, 0xe0c48349), TOBN(0xa613ddd3, 0xb6aa7875),
+ TOBN(0x7f78c19c, 0x5450d866), TOBN(0x46f4409c, 0x8f84a481),
+ TOBN(0x9f1d1928, 0x90fce239), TOBN(0x016c4168, 0xb2ce44b9),
+ TOBN(0xbae023f0, 0xc7435978), TOBN(0xb152c888, 0x20e30e19),
+ TOBN(0x9c241645, 0xe3fa6faf), TOBN(0x735d95c1, 0x84823e60),
+ TOBN(0x03197573, 0x03955317), TOBN(0x0b4b02a9, 0xf03b4995),
+ TOBN(0x076bf559, 0x70274600), TOBN(0x32c5cc53, 0xaaf57508),
+ TOBN(0xe8af6d1f, 0x60624129), TOBN(0xb7bc5d64, 0x9a5e2b5e),
+ TOBN(0x3814b048, 0x5f082d72), TOBN(0x76f267f2, 0xce19677a),
+ TOBN(0x626c630f, 0xb36eed93), TOBN(0x55230cd7, 0x3bf56803),
+ TOBN(0x78837949, 0xce2736a0), TOBN(0x0d792d60, 0xaa6c55f1),
+ TOBN(0x0318dbfd, 0xd5c7c5d2), TOBN(0xb38f8da7, 0x072b342d),
+ TOBN(0x3569bddc, 0x7b8de38a), TOBN(0xf25b5887, 0xa1c94842),
+ TOBN(0xb2d5b284, 0x2946ad60), TOBN(0x854f29ad, 0xe9d1707e),
+ TOBN(0xaa5159dc, 0x2c6a4509), TOBN(0x899f94c0, 0x57189837),
+ TOBN(0xcf6adc51, 0xf4a55b03), TOBN(0x261762de, 0x35e3b2d5),
+ TOBN(0x4cc43012, 0x04827b51), TOBN(0xcd22a113, 0xc6021442),
+ TOBN(0xce2fd61a, 0x247c9569), TOBN(0x59a50973, 0xd152beca),
+ TOBN(0x6c835a11, 0x63a716d4), TOBN(0xc26455ed, 0x187dedcf),
+ TOBN(0x27f536e0, 0x49ce89e7), TOBN(0x18908539, 0xcc890cb5),
+ TOBN(0x308909ab, 0xd83c2aa1), TOBN(0xecd3142b, 0x1ab73bd3),
+ TOBN(0x6a85bf59, 0xb3f5ab84), TOBN(0x3c320a68, 0xf2bea4c6),
+ TOBN(0xad8dc538, 0x6da4541f), TOBN(0xeaf34eb0, 0xb7c41186),
+ TOBN(0x1c780129, 0x977c97c4), TOBN(0x5ff9beeb, 0xc57eb9fa),
+ TOBN(0xa24d0524, 0xc822c478), TOBN(0xfd8eec2a, 0x461cd415),
+ TOBN(0xfbde194e, 0xf027458c), TOBN(0xb4ff5319, 0x1d1be115),
+ TOBN(0x63f874d9, 0x4866d6f4), TOBN(0x35c75015, 0xb21ad0c9),
+ TOBN(0xa6b5c9d6, 0x46ac49d2), TOBN(0x42c77c0b, 0x83137aa9),
+ TOBN(0x24d000fc, 0x68225a38), TOBN(0x0f63cfc8, 0x2fe1e907),
+ TOBN(0x22d1b01b, 0xc6441f95), TOBN(0x7d38f719, 0xec8e448f),
+ TOBN(0x9b33fa5f, 0x787fb1ba), TOBN(0x94dcfda1, 0x190158df),
+ TOBN(0xc47cb339, 0x5f6d4a09), TOBN(0x6b4f355c, 0xee52b826),
+ TOBN(0x3d100f5d, 0xf51b930a), TOBN(0xf4512fac, 0x9f668f69),
+ TOBN(0x546781d5, 0x206c4c74), TOBN(0xd021d4d4, 0xcb4d2e48),
+ TOBN(0x494a54c2, 0xca085c2d), TOBN(0xf1dbaca4, 0x520850a8),
+ TOBN(0x63c79326, 0x490a1aca), TOBN(0xcb64dd9c, 0x41526b02),
+ TOBN(0xbb772591, 0xa2979258), TOBN(0x3f582970, 0x48d97846),
+ TOBN(0xd66b70d1, 0x7c213ba7), TOBN(0xc28febb5, 0xe8a0ced4),
+ TOBN(0x6b911831, 0xc10338c1), TOBN(0x0d54e389, 0xbf0126f3),
+ TOBN(0x7048d460, 0x4af206ee), TOBN(0x786c88f6, 0x77e97cb9),
+ TOBN(0xd4375ae1, 0xac64802e), TOBN(0x469bcfe1, 0xd53ec11c),
+ TOBN(0xfc9b340d, 0x47062230), TOBN(0xe743bb57, 0xc5b4a3ac),
+ TOBN(0xfe00b4aa, 0x59ef45ac), TOBN(0x29a4ef23, 0x59edf188),
+ TOBN(0x40242efe, 0xb483689b), TOBN(0x2575d3f6, 0x513ac262),
+ TOBN(0xf30037c8, 0x0ca6db72), TOBN(0xc9fcce82, 0x98864be2),
+ TOBN(0x84a112ff, 0x0149362d), TOBN(0x95e57582, 0x1c4ae971),
+ TOBN(0x1fa4b1a8, 0x945cf86c), TOBN(0x4525a734, 0x0b024a2f),
+ TOBN(0xe76c8b62, 0x8f338360), TOBN(0x483ff593, 0x28edf32b),
+ TOBN(0x67e8e90a, 0x298b1aec), TOBN(0x9caab338, 0x736d9a21),
+ TOBN(0x5c09d2fd, 0x66892709), TOBN(0x2496b4dc, 0xb55a1d41),
+ TOBN(0x93f5fb1a, 0xe24a4394), TOBN(0x08c75049, 0x6fa8f6c1),
+ TOBN(0xcaead1c2, 0xc905d85f), TOBN(0xe9d7f790, 0x0733ae57),
+ TOBN(0x24c9a65c, 0xf07cdd94), TOBN(0x7389359c, 0xa4b55931),
+ TOBN(0xf58709b7, 0x367e45f7), TOBN(0x1f203067, 0xcb7e7adc),
+ TOBN(0x82444bff, 0xc7b72818), TOBN(0x07303b35, 0xbaac8033),
+ TOBN(0x1e1ee4e4, 0xd13b7ea1), TOBN(0xe6489b24, 0xe0e74180),
+ TOBN(0xa5f2c610, 0x7e70ef70), TOBN(0xa1655412, 0xbdd10894),
+ TOBN(0x555ebefb, 0x7af4194e), TOBN(0x533c1c3c, 0x8e89bd9c),
+ TOBN(0x735b9b57, 0x89895856), TOBN(0x15fb3cd2, 0x567f5c15),
+ TOBN(0x057fed45, 0x526f09fd), TOBN(0xe8a4f10c, 0x8128240a),
+ TOBN(0x9332efc4, 0xff2bfd8d), TOBN(0x214e77a0, 0xbd35aa31),
+ TOBN(0x32896d73, 0x14faa40e), TOBN(0x767867ec, 0x01e5f186),
+ TOBN(0xc9adf8f1, 0x17a1813e), TOBN(0xcb6cda78, 0x54741795),
+ TOBN(0xb7521b6d, 0x349d51aa), TOBN(0xf56b5a9e, 0xe3c7b8e9),
+ TOBN(0xc6f1e5c9, 0x32a096df), TOBN(0x083667c4, 0xa3635024),
+ TOBN(0x365ea135, 0x18087f2f), TOBN(0xf1b8eaac, 0xd136e45d),
+ TOBN(0xc8a0e484, 0x73aec989), TOBN(0xd75a324b, 0x142c9259),
+ TOBN(0xb7b4d001, 0x01dae185), TOBN(0x45434e0b, 0x9b7a94bc),
+ TOBN(0xf54339af, 0xfbd8cb0b), TOBN(0xdcc4569e, 0xe98ef49e),
+ TOBN(0x7789318a, 0x09a51299), TOBN(0x81b4d206, 0xb2b025d8),
+ TOBN(0xf64aa418, 0xfae85792), TOBN(0x3e50258f, 0xacd7baf7),
+ TOBN(0xdce84cdb, 0x2996864b), TOBN(0xa2e67089, 0x1f485fa4),
+ TOBN(0xb28b2bb6, 0x534c6a5a), TOBN(0x31a7ec6b, 0xc94b9d39),
+ TOBN(0x1d217766, 0xd6bc20da), TOBN(0x4acdb5ec, 0x86761190),
+ TOBN(0x68726328, 0x73701063), TOBN(0x4d24ee7c, 0x2128c29b),
+ TOBN(0xc072ebd3, 0xa19fd868), TOBN(0x612e481c, 0xdb8ddd3b),
+ TOBN(0xb4e1d754, 0x1a64d852), TOBN(0x00ef95ac, 0xc4c6c4ab),
+ TOBN(0x1536d2ed, 0xaa0a6c46), TOBN(0x61294086, 0x43774790),
+ TOBN(0x54af25e8, 0x343fda10), TOBN(0x9ff9d98d, 0xfd25d6f2),
+ TOBN(0x0746af7c, 0x468b8835), TOBN(0x977a31cb, 0x730ecea7),
+ TOBN(0xa5096b80, 0xc2cf4a81), TOBN(0xaa986833, 0x6458c37a),
+ TOBN(0x6af29bf3, 0xa6bd9d34), TOBN(0x6a62fe9b, 0x33c5d854),
+ TOBN(0x50e6c304, 0xb7133b5e), TOBN(0x04b60159, 0x7d6e6848),
+ TOBN(0x4cd296df, 0x5579bea4), TOBN(0x10e35ac8, 0x5ceedaf1),
+ TOBN(0x04c4c5fd, 0xe3bcc5b1), TOBN(0x95f9ee8a, 0x89412cf9),
+ TOBN(0x2c9459ee, 0x82b6eb0f), TOBN(0x2e845765, 0x95c2aadd),
+ TOBN(0x774a84ae, 0xd327fcfe), TOBN(0xd8c93722, 0x0368d476),
+ TOBN(0x0dbd5748, 0xf83e8a3b), TOBN(0xa579aa96, 0x8d2495f3),
+ TOBN(0x535996a0, 0xae496e9b), TOBN(0x07afbfe9, 0xb7f9bcc2),
+ TOBN(0x3ac1dc6d, 0x5b7bd293), TOBN(0x3b592cff, 0x7022323d),
+ TOBN(0xba0deb98, 0x9c0a3e76), TOBN(0x18e78e9f, 0x4b197acb),
+ TOBN(0x211cde10, 0x296c36ef), TOBN(0x7ee89672, 0x82c4da77),
+ TOBN(0xb617d270, 0xa57836da), TOBN(0xf0cd9c31, 0x9cb7560b),
+ TOBN(0x01fdcbf7, 0xe455fe90), TOBN(0x3fb53cbb, 0x7e7334f3),
+ TOBN(0x781e2ea4, 0x4e7de4ec), TOBN(0x8adab3ad, 0x0b384fd0),
+ TOBN(0x129eee2f, 0x53d64829), TOBN(0x7a471e17, 0xa261492b),
+ TOBN(0xe4f9adb9, 0xe4cb4a2c), TOBN(0x3d359f6f, 0x97ba2c2d),
+ TOBN(0x346c6786, 0x0aacd697), TOBN(0x92b444c3, 0x75c2f8a8),
+ TOBN(0xc79fa117, 0xd85df44e), TOBN(0x56782372, 0x398ddf31),
+ TOBN(0x60e690f2, 0xbbbab3b8), TOBN(0x4851f8ae, 0x8b04816b),
+ TOBN(0xc72046ab, 0x9c92e4d2), TOBN(0x518c74a1, 0x7cf3136b),
+ TOBN(0xff4eb50a, 0xf9877d4c), TOBN(0x14578d90, 0xa919cabb),
+ TOBN(0x8218f8c4, 0xac5eb2b6), TOBN(0xa3ccc547, 0x542016e4),
+ TOBN(0x025bf48e, 0x327f8349), TOBN(0xf3e97346, 0xf43cb641),
+ TOBN(0xdc2bafdf, 0x500f1085), TOBN(0x57167876, 0x2f063055),
+ TOBN(0x5bd914b9, 0x411925a6), TOBN(0x7c078d48, 0xa1123de5),
+ TOBN(0xee6bf835, 0x182b165d), TOBN(0xb11b5e5b, 0xba519727),
+ TOBN(0xe33ea76c, 0x1eea7b85), TOBN(0x2352b461, 0x92d4f85e),
+ TOBN(0xf101d334, 0xafe115bb), TOBN(0xfabc1294, 0x889175a3),
+ TOBN(0x7f6bcdc0, 0x5233f925), TOBN(0xe0a802db, 0xe77fec55),
+ TOBN(0xbdb47b75, 0x8069b659), TOBN(0x1c5e12de, 0xf98fbd74),
+ TOBN(0x869c58c6, 0x4b8457ee), TOBN(0xa5360f69, 0x4f7ea9f7),
+ TOBN(0xe576c09f, 0xf460b38f), TOBN(0x6b70d548, 0x22b7fb36),
+ TOBN(0x3fd237f1, 0x3bfae315), TOBN(0x33797852, 0xcbdff369),
+ TOBN(0x97df25f5, 0x25b516f9), TOBN(0x46f388f2, 0xba38ad2d),
+ TOBN(0x656c4658, 0x89d8ddbb), TOBN(0x8830b26e, 0x70f38ee8),
+ TOBN(0x4320fd5c, 0xde1212b0), TOBN(0xc34f30cf, 0xe4a2edb2),
+ TOBN(0xabb131a3, 0x56ab64b8), TOBN(0x7f77f0cc, 0xd99c5d26),
+ TOBN(0x66856a37, 0xbf981d94), TOBN(0x19e76d09, 0x738bd76e),
+ TOBN(0xe76c8ac3, 0x96238f39), TOBN(0xc0a482be, 0xa830b366),
+ TOBN(0xb7b8eaff, 0x0b4eb499), TOBN(0x8ecd83bc, 0x4bfb4865),
+ TOBN(0x971b2cb7, 0xa2f3776f), TOBN(0xb42176a4, 0xf4b88adf),
+ TOBN(0xb9617df5, 0xbe1fa446), TOBN(0x8b32d508, 0xcd031bd2),
+ TOBN(0x1c6bd47d, 0x53b618c0), TOBN(0xc424f46c, 0x6a227923),
+ TOBN(0x7303ffde, 0xdd92d964), TOBN(0xe9712878, 0x71b5abf2),
+ TOBN(0x8f48a632, 0xf815561d), TOBN(0x85f48ff5, 0xd3c055d1),
+ TOBN(0x222a1427, 0x7525684f), TOBN(0xd0d841a0, 0x67360cc3),
+ TOBN(0x4245a926, 0x0b9267c6), TOBN(0xc78913f1, 0xcf07f863),
+ TOBN(0xaa844c8e, 0x4d0d9e24), TOBN(0xa42ad522, 0x3d5f9017),
+ TOBN(0xbd371749, 0xa2c989d5), TOBN(0x928292df, 0xe1f5e78e),
+ TOBN(0x493b383e, 0x0a1ea6da), TOBN(0x5136fd8d, 0x13aee529),
+ TOBN(0x860c44b1, 0xf2c34a99), TOBN(0x3b00aca4, 0xbf5855ac),
+ TOBN(0xabf6aaa0, 0xfaaf37be), TOBN(0x65f43682, 0x2a53ec08),
+ TOBN(0x1d9a5801, 0xa11b12e1), TOBN(0x78a7ab2c, 0xe20ed475),
+ TOBN(0x0de1067e, 0x9a41e0d5), TOBN(0x30473f5f, 0x305023ea),
+ TOBN(0xdd3ae09d, 0x169c7d97), TOBN(0x5cd5baa4, 0xcfaef9cd),
+ TOBN(0x5cd7440b, 0x65a44803), TOBN(0xdc13966a, 0x47f364de),
+ TOBN(0x077b2be8, 0x2b8357c1), TOBN(0x0cb1b4c5, 0xe9d57c2a),
+ TOBN(0x7a4ceb32, 0x05ff363e), TOBN(0xf310fa4d, 0xca35a9ef),
+ TOBN(0xdbb7b352, 0xf97f68c6), TOBN(0x0c773b50, 0x0b02cf58),
+ TOBN(0xea2e4821, 0x3c1f96d9), TOBN(0xffb357b0, 0xeee01815),
+ TOBN(0xb9c924cd, 0xe0f28039), TOBN(0x0b36c95a, 0x46a3fbe4),
+ TOBN(0x1faaaea4, 0x5e46db6c), TOBN(0xcae575c3, 0x1928aaff),
+ TOBN(0x7f671302, 0xa70dab86), TOBN(0xfcbd12a9, 0x71c58cfc),
+ TOBN(0xcbef9acf, 0xbee0cb92), TOBN(0x573da0b9, 0xf8c1b583),
+ TOBN(0x4752fcfe, 0x0d41d550), TOBN(0xe7eec0e3, 0x2155cffe),
+ TOBN(0x0fc39fcb, 0x545ae248), TOBN(0x522cb8d1, 0x8065f44e),
+ TOBN(0x263c962a, 0x70cbb96c), TOBN(0xe034362a, 0xbcd124a9),
+ TOBN(0xf120db28, 0x3c2ae58d), TOBN(0xb9a38d49, 0xfef6d507),
+ TOBN(0xb1fd2a82, 0x1ff140fd), TOBN(0xbd162f30, 0x20aee7e0),
+ TOBN(0x4e17a5d4, 0xcb251949), TOBN(0x2aebcb83, 0x4f7e1c3d),
+ TOBN(0x608eb25f, 0x937b0527), TOBN(0xf42e1e47, 0xeb7d9997),
+ TOBN(0xeba699c4, 0xb8a53a29), TOBN(0x1f921c71, 0xe091b536),
+ TOBN(0xcce29e7b, 0x5b26bbd5), TOBN(0x7a8ef5ed, 0x3b61a680),
+ TOBN(0xe5ef8043, 0xba1f1c7e), TOBN(0x16ea8217, 0x18158dda),
+ TOBN(0x01778a2b, 0x599ff0f9), TOBN(0x68a923d7, 0x8104fc6b),
+ TOBN(0x5bfa44df, 0xda694ff3), TOBN(0x4f7199db, 0xf7667f12),
+ TOBN(0xc06d8ff6, 0xe46f2a79), TOBN(0x08b5dead, 0xe9f8131d),
+ TOBN(0x02519a59, 0xabb4ce7c), TOBN(0xc4f710bc, 0xb42aec3e),
+ TOBN(0x3d77b057, 0x78bde41a), TOBN(0x6474bf80, 0xb4186b5a),
+ TOBN(0x048b3f67, 0x88c65741), TOBN(0xc64519de, 0x03c7c154),
+ TOBN(0xdf073846, 0x0edfcc4f), TOBN(0x319aa737, 0x48f1aa6b),
+ TOBN(0x8b9f8a02, 0xca909f77), TOBN(0x90258139, 0x7580bfef),
+ TOBN(0xd8bfd3ca, 0xc0c22719), TOBN(0xc60209e4, 0xc9ca151e),
+ TOBN(0x7a744ab5, 0xd9a1a69c), TOBN(0x6de5048b, 0x14937f8f),
+ TOBN(0x171938d8, 0xe115ac04), TOBN(0x7df70940, 0x1c6b16d2),
+ TOBN(0xa6aeb663, 0x7f8e94e7), TOBN(0xc130388e, 0x2a2cf094),
+ TOBN(0x1850be84, 0x77f54e6e), TOBN(0x9f258a72, 0x65d60fe5),
+ TOBN(0xff7ff0c0, 0x6c9146d6), TOBN(0x039aaf90, 0xe63a830b),
+ TOBN(0x38f27a73, 0x9460342f), TOBN(0x4703148c, 0x3f795f8a),
+ TOBN(0x1bb5467b, 0x9681a97e), TOBN(0x00931ba5, 0xecaeb594),
+ TOBN(0xcdb6719d, 0x786f337c), TOBN(0xd9c01cd2, 0xe704397d),
+ TOBN(0x0f4a3f20, 0x555c2fef), TOBN(0x00452509, 0x7c0af223),
+ TOBN(0x54a58047, 0x84db8e76), TOBN(0x3bacf1aa, 0x93c8aa06),
+ TOBN(0x11ca957c, 0xf7919422), TOBN(0x50641053, 0x78cdaa40),
+ TOBN(0x7a303874, 0x9f7144ae), TOBN(0x170c963f, 0x43d4acfd),
+ TOBN(0x5e148149, 0x58ddd3ef), TOBN(0xa7bde582, 0x9e72dba8),
+ TOBN(0x0769da8b, 0x6fa68750), TOBN(0xfa64e532, 0x572e0249),
+ TOBN(0xfcaadf9d, 0x2619ad31), TOBN(0x87882daa, 0xa7b349cd),
+ TOBN(0x9f6eb731, 0x6c67a775), TOBN(0xcb10471a, 0xefc5d0b1),
+ TOBN(0xb433750c, 0xe1b806b2), TOBN(0x19c5714d, 0x57b1ae7e),
+ TOBN(0xc0dc8b7b, 0xed03fd3f), TOBN(0xdd03344f, 0x31bc194e),
+ TOBN(0xa66c52a7, 0x8c6320b5), TOBN(0x8bc82ce3, 0xd0b6fd93),
+ TOBN(0xf8e13501, 0xb35f1341), TOBN(0xe53156dd, 0x25a43e42),
+ TOBN(0xd3adf27e, 0x4daeb85c), TOBN(0xb81d8379, 0xbbeddeb5),
+ TOBN(0x1b0b546e, 0x2e435867), TOBN(0x9020eb94, 0xeba5dd60),
+ TOBN(0x37d91161, 0x8210cb9d), TOBN(0x4c596b31, 0x5c91f1cf),
+ TOBN(0xb228a90f, 0x0e0b040d), TOBN(0xbaf02d82, 0x45ff897f),
+ TOBN(0x2aac79e6, 0x00fa6122), TOBN(0x24828817, 0x8e36f557),
+ TOBN(0xb9521d31, 0x113ec356), TOBN(0x9e48861e, 0x15eff1f8),
+ TOBN(0x2aa1d412, 0xe0d41715), TOBN(0x71f86203, 0x53f131b8),
+ TOBN(0xf60da8da, 0x3fd19408), TOBN(0x4aa716dc, 0x278d9d99),
+ TOBN(0x394531f7, 0xa8c51c90), TOBN(0xb560b0e8, 0xf59db51c),
+ TOBN(0xa28fc992, 0xfa34bdad), TOBN(0xf024fa14, 0x9cd4f8bd),
+ TOBN(0x5cf530f7, 0x23a9d0d3), TOBN(0x615ca193, 0xe28c9b56),
+ TOBN(0x6d2a483d, 0x6f73c51e), TOBN(0xa4cb2412, 0xea0dc2dd),
+ TOBN(0x50663c41, 0x1eb917ff), TOBN(0x3d3a74cf, 0xeade299e),
+ TOBN(0x29b3990f, 0x4a7a9202), TOBN(0xa9bccf59, 0xa7b15c3d),
+ TOBN(0x66a3ccdc, 0xa5df9208), TOBN(0x48027c14, 0x43f2f929),
+ TOBN(0xd385377c, 0x40b557f0), TOBN(0xe001c366, 0xcd684660),
+ TOBN(0x1b18ed6b, 0xe2183a27), TOBN(0x879738d8, 0x63210329),
+ TOBN(0xa687c74b, 0xbda94882), TOBN(0xd1bbcc48, 0xa684b299),
+ TOBN(0xaf6f1112, 0x863b3724), TOBN(0x6943d1b4, 0x2c8ce9f8),
+ TOBN(0xe044a3bb, 0x098cafb4), TOBN(0x27ed2310, 0x60d48caf),
+ TOBN(0x542b5675, 0x3a31b84d), TOBN(0xcbf3dd50, 0xfcddbed7),
+ TOBN(0x25031f16, 0x41b1d830), TOBN(0xa7ec851d, 0xcb0c1e27),
+ TOBN(0xac1c8fe0, 0xb5ae75db), TOBN(0xb24c7557, 0x08c52120),
+ TOBN(0x57f811dc, 0x1d4636c3), TOBN(0xf8436526, 0x681a9939),
+ TOBN(0x1f6bc6d9, 0x9c81adb3), TOBN(0x840f8ac3, 0x5b7d80d4),
+ TOBN(0x731a9811, 0xf4387f1a), TOBN(0x7c501cd3, 0xb5156880),
+ TOBN(0xa5ca4a07, 0xdfe68867), TOBN(0xf123d8f0, 0x5fcea120),
+ TOBN(0x1fbb0e71, 0xd607039e), TOBN(0x2b70e215, 0xcd3a4546),
+ TOBN(0x32d2f01d, 0x53324091), TOBN(0xb796ff08, 0x180ab19b),
+ TOBN(0x32d87a86, 0x3c57c4aa), TOBN(0x2aed9caf, 0xb7c49a27),
+ TOBN(0x9fb35eac, 0x31630d98), TOBN(0x338e8cdf, 0x5c3e20a3),
+ TOBN(0x80f16182, 0x66cde8db), TOBN(0x4e159980, 0x2d72fd36),
+ TOBN(0xd7b8f13b, 0x9b6e5072), TOBN(0xf5213907, 0x3b7b5dc1),
+ TOBN(0x4d431f1d, 0x8ce4396e), TOBN(0x37a1a680, 0xa7ed2142),
+ TOBN(0xbf375696, 0xd01aaf6b), TOBN(0xaa1c0c54, 0xe63aab66),
+ TOBN(0x3014368b, 0x4ed80940), TOBN(0x67e6d056, 0x7a6fcedd),
+ TOBN(0x7c208c49, 0xca97579f), TOBN(0xfe3d7a81, 0xa23597f6),
+ TOBN(0x5e203202, 0x7e096ae2), TOBN(0xb1f3e1e7, 0x24b39366),
+ TOBN(0x26da26f3, 0x2fdcdffc), TOBN(0x79422f1d, 0x6097be83),}
+ ,
+ {TOBN(0x263a2cfb, 0x9db3b381), TOBN(0x9c3a2dee, 0xd4df0a4b),
+ TOBN(0x728d06e9, 0x7d04e61f), TOBN(0x8b1adfbc, 0x42449325),
+ TOBN(0x6ec1d939, 0x7e053a1b), TOBN(0xee2be5c7, 0x66daf707),
+ TOBN(0x80ba1e14, 0x810ac7ab), TOBN(0xdd2ae778, 0xf530f174),
+ TOBN(0x0435d97a, 0x205b9d8b), TOBN(0x6eb8f064, 0x056756d4),
+ TOBN(0xd5e88a8b, 0xb6f8210e), TOBN(0x070ef12d, 0xec9fd9ea),
+ TOBN(0x4d849505, 0x3bcc876a), TOBN(0x12a75338, 0xa7404ce3),
+ TOBN(0xd22b49e1, 0xb8a1db5e), TOBN(0xec1f2051, 0x14bfa5ad),
+ TOBN(0xadbaeb79, 0xb6828f36), TOBN(0x9d7a0258, 0x01bd5b9e),
+ TOBN(0xeda01e0d, 0x1e844b0c), TOBN(0x4b625175, 0x887edfc9),
+ TOBN(0x14109fdd, 0x9669b621), TOBN(0x88a2ca56, 0xf6f87b98),
+ TOBN(0xfe2eb788, 0x170df6bc), TOBN(0x0cea06f4, 0xffa473f9),
+ TOBN(0x43ed81b5, 0xc4e83d33), TOBN(0xd9f35879, 0x5efd488b),
+ TOBN(0x164a620f, 0x9deb4d0f), TOBN(0xc6927bdb, 0xac6a7394),
+ TOBN(0x45c28df7, 0x9f9e0f03), TOBN(0x2868661e, 0xfcd7e1a9),
+ TOBN(0x7cf4e8d0, 0xffa348f1), TOBN(0x6bd4c284, 0x398538e0),
+ TOBN(0x2618a091, 0x289a8619), TOBN(0xef796e60, 0x6671b173),
+ TOBN(0x664e46e5, 0x9090c632), TOBN(0xa38062d4, 0x1e66f8fb),
+ TOBN(0x6c744a20, 0x0573274e), TOBN(0xd07b67e4, 0xa9271394),
+ TOBN(0x391223b2, 0x6bdc0e20), TOBN(0xbe2d93f1, 0xeb0a05a7),
+ TOBN(0xf23e2e53, 0x3f36d141), TOBN(0xe84bb3d4, 0x4dfca442),
+ TOBN(0xb804a48d, 0x6b7c023a), TOBN(0x1e16a8fa, 0x76431c3b),
+ TOBN(0x1b5452ad, 0xddd472e0), TOBN(0x7d405ee7, 0x0d1ee127),
+ TOBN(0x50fc6f1d, 0xffa27599), TOBN(0x351ac53c, 0xbf391b35),
+ TOBN(0x7efa14b8, 0x4444896b), TOBN(0x64974d2f, 0xf94027fb),
+ TOBN(0xefdcd0e8, 0xde84487d), TOBN(0x8c45b260, 0x2b48989b),
+ TOBN(0xa8fcbbc2, 0xd8463487), TOBN(0xd1b2b3f7, 0x3fbc476c),
+ TOBN(0x21d005b7, 0xc8f443c0), TOBN(0x518f2e67, 0x40c0139c),
+ TOBN(0x56036e8c, 0x06d75fc1), TOBN(0x2dcf7bb7, 0x3249a89f),
+ TOBN(0x81dd1d3d, 0xe245e7dd), TOBN(0xf578dc4b, 0xebd6e2a7),
+ TOBN(0x4c028903, 0xdf2ce7a0), TOBN(0xaee36288, 0x9c39afac),
+ TOBN(0xdc847c31, 0x146404ab), TOBN(0x6304c0d8, 0xa4e97818),
+ TOBN(0xae51dca2, 0xa91f6791), TOBN(0x2abe4190, 0x9baa9efc),
+ TOBN(0xd9d2e2f4, 0x559c7ac1), TOBN(0xe82f4b51, 0xfc9f773a),
+ TOBN(0xa7713027, 0x4073e81c), TOBN(0xc0276fac, 0xfbb596fc),
+ TOBN(0x1d819fc9, 0xa684f70c), TOBN(0x29b47fdd, 0xc9f7b1e0),
+ TOBN(0x358de103, 0x459b1940), TOBN(0xec881c59, 0x5b013e93),
+ TOBN(0x51574c93, 0x49532ad3), TOBN(0x2db1d445, 0xb37b46de),
+ TOBN(0xc6445b87, 0xdf239fd8), TOBN(0xc718af75, 0x151d24ee),
+ TOBN(0xaea1c4a4, 0xf43c6259), TOBN(0x40c0e5d7, 0x70be02f7),
+ TOBN(0x6a4590f4, 0x721b33f2), TOBN(0x2124f1fb, 0xfedf04ea),
+ TOBN(0xf8e53cde, 0x9745efe7), TOBN(0xe7e10432, 0x65f046d9),
+ TOBN(0xc3fca28e, 0xe4d0c7e6), TOBN(0x847e339a, 0x87253b1b),
+ TOBN(0x9b595348, 0x3743e643), TOBN(0xcb6a0a0b, 0x4fd12fc5),
+ TOBN(0xfb6836c3, 0x27d02dcc), TOBN(0x5ad00982, 0x7a68bcc2),
+ TOBN(0x1b24b44c, 0x005e912d), TOBN(0xcc83d20f, 0x811fdcfe),
+ TOBN(0x36527ec1, 0x666fba0c), TOBN(0x69948197, 0x14754635),
+ TOBN(0xfcdcb1a8, 0x556da9c2), TOBN(0xa5934267, 0x81a732b2),
+ TOBN(0xec1214ed, 0xa714181d), TOBN(0x609ac13b, 0x6067b341),
+ TOBN(0xff4b4c97, 0xa545df1f), TOBN(0xa1240501, 0x34d2076b),
+ TOBN(0x6efa0c23, 0x1409ca97), TOBN(0x254cc1a8, 0x20638c43),
+ TOBN(0xd4e363af, 0xdcfb46cd), TOBN(0x62c2adc3, 0x03942a27),
+ TOBN(0xc67b9df0, 0x56e46483), TOBN(0xa55abb20, 0x63736356),
+ TOBN(0xab93c098, 0xc551bc52), TOBN(0x382b49f9, 0xb15fe64b),
+ TOBN(0x9ec221ad, 0x4dff8d47), TOBN(0x79caf615, 0x437df4d6),
+ TOBN(0x5f13dc64, 0xbb456509), TOBN(0xe4c589d9, 0x191f0714),
+ TOBN(0x27b6a8ab, 0x3fd40e09), TOBN(0xe455842e, 0x77313ea9),
+ TOBN(0x8b51d1e2, 0x1f55988b), TOBN(0x5716dd73, 0x062bbbfc),
+ TOBN(0x633c11e5, 0x4e8bf3de), TOBN(0x9a0e77b6, 0x1b85be3b),
+ TOBN(0x56510729, 0x0911cca6), TOBN(0x27e76495, 0xefa6590f),
+ TOBN(0xe4ac8b33, 0x070d3aab), TOBN(0x2643672b, 0x9a2cd5e5),
+ TOBN(0x52eff79b, 0x1cfc9173), TOBN(0x665ca49b, 0x90a7c13f),
+ TOBN(0x5a8dda59, 0xb3efb998), TOBN(0x8a5b922d, 0x052f1341),
+ TOBN(0xae9ebbab, 0x3cf9a530), TOBN(0x35986e7b, 0xf56da4d7),
+ TOBN(0x3a636b5c, 0xff3513cc), TOBN(0xbb0cf8ba, 0x3198f7dd),
+ TOBN(0xb8d40522, 0x41f16f86), TOBN(0x760575d8, 0xde13a7bf),
+ TOBN(0x36f74e16, 0x9f7aa181), TOBN(0x163a3ecf, 0xf509ed1c),
+ TOBN(0x6aead61f, 0x3c40a491), TOBN(0x158c95fc, 0xdfe8fcaa),
+ TOBN(0xa3991b6e, 0x13cda46f), TOBN(0x79482415, 0x342faed0),
+ TOBN(0xf3ba5bde, 0x666b5970), TOBN(0x1d52e6bc, 0xb26ab6dd),
+ TOBN(0x768ba1e7, 0x8608dd3d), TOBN(0x4930db2a, 0xea076586),
+ TOBN(0xd9575714, 0xe7dc1afa), TOBN(0x1fc7bf7d, 0xf7c58817),
+ TOBN(0x6b47accd, 0xd9eee96c), TOBN(0x0ca277fb, 0xe58cec37),
+ TOBN(0x113fe413, 0xe702c42a), TOBN(0xdd1764ee, 0xc47cbe51),
+ TOBN(0x041e7cde, 0x7b3ed739), TOBN(0x50cb7459, 0x5ce9e1c0),
+ TOBN(0x35568513, 0x2925b212), TOBN(0x7cff95c4, 0x001b081c),
+ TOBN(0x63ee4cbd, 0x8088b454), TOBN(0xdb7f32f7, 0x9a9e0c8a),
+ TOBN(0xb377d418, 0x6b2447cb), TOBN(0xe3e982aa, 0xd370219b),
+ TOBN(0x06ccc1e4, 0xc2a2a593), TOBN(0x72c36865, 0x0773f24f),
+ TOBN(0xa13b4da7, 0x95859423), TOBN(0x8bbf1d33, 0x75040c8f),
+ TOBN(0x726f0973, 0xda50c991), TOBN(0x48afcd5b, 0x822d6ee2),
+ TOBN(0xe5fc718b, 0x20fd7771), TOBN(0xb9e8e77d, 0xfd0807a1),
+ TOBN(0x7f5e0f44, 0x99a7703d), TOBN(0x6972930e, 0x618e36f3),
+ TOBN(0x2b7c77b8, 0x23807bbe), TOBN(0xe5b82405, 0xcb27ff50),
+ TOBN(0xba8b8be3, 0xbd379062), TOBN(0xd64b7a1d, 0x2dce4a92),
+ TOBN(0x040a73c5, 0xb2952e37), TOBN(0x0a9e252e, 0xd438aeca),
+ TOBN(0xdd43956b, 0xc39d3bcb), TOBN(0x1a31ca00, 0xb32b2d63),
+ TOBN(0xd67133b8, 0x5c417a18), TOBN(0xd08e4790, 0x2ef442c8),
+ TOBN(0x98cb1ae9, 0x255c0980), TOBN(0x4bd86381, 0x2b4a739f),
+ TOBN(0x5a5c31e1, 0x1e4a45a1), TOBN(0x1e5d55fe, 0x9cb0db2f),
+ TOBN(0x74661b06, 0x8ff5cc29), TOBN(0x026b389f, 0x0eb8a4f4),
+ TOBN(0x536b21a4, 0x58848c24), TOBN(0x2e5bf8ec, 0x81dc72b0),
+ TOBN(0x03c187d0, 0xad886aac), TOBN(0x5c16878a, 0xb771b645),
+ TOBN(0xb07dfc6f, 0xc74045ab), TOBN(0x2c6360bf, 0x7800caed),
+ TOBN(0x24295bb5, 0xb9c972a3), TOBN(0xc9e6f88e, 0x7c9a6dba),
+ TOBN(0x90ffbf24, 0x92a79aa6), TOBN(0xde29d50a, 0x41c26ac2),
+ TOBN(0x9f0af483, 0xd309cbe6), TOBN(0x5b020d8a, 0xe0bced4f),
+ TOBN(0x606e986d, 0xb38023e3), TOBN(0xad8f2c9d, 0x1abc6933),
+ TOBN(0x19292e1d, 0xe7400e93), TOBN(0xfe3e18a9, 0x52be5e4d),
+ TOBN(0xe8e9771d, 0x2e0680bf), TOBN(0x8c5bec98, 0xc54db063),
+ TOBN(0x2af9662a, 0x74a55d1f), TOBN(0xe3fbf28f, 0x046f66d8),
+ TOBN(0xa3a72ab4, 0xd4dc4794), TOBN(0x09779f45, 0x5c7c2dd8),
+ TOBN(0xd893bdaf, 0xc3d19d8d), TOBN(0xd5a75094, 0x57d6a6df),
+ TOBN(0x8cf8fef9, 0x952e6255), TOBN(0x3da67cfb, 0xda9a8aff),
+ TOBN(0x4c23f62a, 0x2c160dcd), TOBN(0x34e6c5e3, 0x8f90eaef),
+ TOBN(0x35865519, 0xa9a65d5a), TOBN(0x07c48aae, 0x8fd38a3d),
+ TOBN(0xb7e7aeda, 0x50068527), TOBN(0x2c09ef23, 0x1c90936a),
+ TOBN(0x31ecfeb6, 0xe879324c), TOBN(0xa0871f6b, 0xfb0ec938),
+ TOBN(0xb1f0fb68, 0xd84d835d), TOBN(0xc90caf39, 0x861dc1e6),
+ TOBN(0x12e5b046, 0x7594f8d7), TOBN(0x26897ae2, 0x65012b92),
+ TOBN(0xbcf68a08, 0xa4d6755d), TOBN(0x403ee41c, 0x0991fbda),
+ TOBN(0x733e343e, 0x3bbf17e8), TOBN(0xd2c7980d, 0x679b3d65),
+ TOBN(0x33056232, 0xd2e11305), TOBN(0x966be492, 0xf3c07a6f),
+ TOBN(0x6a8878ff, 0xbb15509d), TOBN(0xff221101, 0x0a9b59a4),
+ TOBN(0x6c9f564a, 0xabe30129), TOBN(0xc6f2c940, 0x336e64cf),
+ TOBN(0x0fe75262, 0x8b0c8022), TOBN(0xbe0267e9, 0x6ae8db87),
+ TOBN(0x22e192f1, 0x93bc042b), TOBN(0xf085b534, 0xb237c458),
+ TOBN(0xa0d192bd, 0x832c4168), TOBN(0x7a76e9e3, 0xbdf6271d),
+ TOBN(0x52a882fa, 0xb88911b5), TOBN(0xc85345e4, 0xb4db0eb5),
+ TOBN(0xa3be02a6, 0x81a7c3ff), TOBN(0x51889c8c, 0xf0ec0469),
+ TOBN(0x9d031369, 0xa5e829e5), TOBN(0xcbb4c6fc, 0x1607aa41),
+ TOBN(0x75ac59a6, 0x241d84c1), TOBN(0xc043f2bf, 0x8829e0ee),
+ TOBN(0x82a38f75, 0x8ea5e185), TOBN(0x8bda40b9, 0xd87cbd9f),
+ TOBN(0x9e65e75e, 0x2d8fc601), TOBN(0x3d515f74, 0xa35690b3),
+ TOBN(0x534acf4f, 0xda79e5ac), TOBN(0x68b83b3a, 0x8630215f),
+ TOBN(0x5c748b2e, 0xd085756e), TOBN(0xb0317258, 0xe5d37cb2),
+ TOBN(0x6735841a, 0xc5ccc2c4), TOBN(0x7d7dc96b, 0x3d9d5069),
+ TOBN(0xa147e410, 0xfd1754bd), TOBN(0x65296e94, 0xd399ddd5),
+ TOBN(0xf6b5b2d0, 0xbc8fa5bc), TOBN(0x8a5ead67, 0x500c277b),
+ TOBN(0x214625e6, 0xdfa08a5d), TOBN(0x51fdfedc, 0x959cf047),
+ TOBN(0x6bc9430b, 0x289fca32), TOBN(0xe36ff0cf, 0x9d9bdc3f),
+ TOBN(0x2fe187cb, 0x58ea0ede), TOBN(0xed66af20, 0x5a900b3f),
+ TOBN(0x00e0968b, 0x5fa9f4d6), TOBN(0x2d4066ce, 0x37a362e7),
+ TOBN(0xa99a9748, 0xbd07e772), TOBN(0x710989c0, 0x06a4f1d0),
+ TOBN(0xd5dedf35, 0xce40cbd8), TOBN(0xab55c5f0, 0x1743293d),
+ TOBN(0x766f1144, 0x8aa24e2c), TOBN(0x94d874f8, 0x605fbcb4),
+ TOBN(0xa365f0e8, 0xa518001b), TOBN(0xee605eb6, 0x9d04ef0f),
+ TOBN(0x5a3915cd, 0xba8d4d25), TOBN(0x44c0e1b8, 0xb5113472),
+ TOBN(0xcbb024e8, 0x8b6740dc), TOBN(0x89087a53, 0xee1d4f0c),
+ TOBN(0xa88fa05c, 0x1fc4e372), TOBN(0x8bf395cb, 0xaf8b3af2),
+ TOBN(0x1e71c9a1, 0xdeb8568b), TOBN(0xa35daea0, 0x80fb3d32),
+ TOBN(0xe8b6f266, 0x2cf8fb81), TOBN(0x6d51afe8, 0x9490696a),
+ TOBN(0x81beac6e, 0x51803a19), TOBN(0xe3d24b7f, 0x86219080),
+ TOBN(0x727cfd9d, 0xdf6f463c), TOBN(0x8c6865ca, 0x72284ee8),
+ TOBN(0x32c88b7d, 0xb743f4ef), TOBN(0x3793909b, 0xe7d11dce),
+ TOBN(0xd398f922, 0x2ff2ebe8), TOBN(0x2c70ca44, 0xe5e49796),
+ TOBN(0xdf4d9929, 0xcb1131b1), TOBN(0x7826f298, 0x25888e79),
+ TOBN(0x4d3a112c, 0xf1d8740a), TOBN(0x00384cb6, 0x270afa8b),
+ TOBN(0xcb64125b, 0x3ab48095), TOBN(0x3451c256, 0x62d05106),
+ TOBN(0xd73d577d, 0xa4955845), TOBN(0x39570c16, 0xbf9f4433),
+ TOBN(0xd7dfaad3, 0xadecf263), TOBN(0xf1c3d8d1, 0xdc76e102),
+ TOBN(0x5e774a58, 0x54c6a836), TOBN(0xdad4b672, 0x3e92d47b),
+ TOBN(0xbe7e990f, 0xf0d796a0), TOBN(0x5fc62478, 0xdf0e8b02),
+ TOBN(0x8aae8bf4, 0x030c00ad), TOBN(0x3d2db93b, 0x9004ba0f),
+ TOBN(0xe48c8a79, 0xd85d5ddc), TOBN(0xe907caa7, 0x6bb07f34),
+ TOBN(0x58db343a, 0xa39eaed5), TOBN(0x0ea6e007, 0xadaf5724),
+ TOBN(0xe00df169, 0xd23233f3), TOBN(0x3e322796, 0x77cb637f),
+ TOBN(0x1f897c0e, 0x1da0cf6c), TOBN(0xa651f5d8, 0x31d6bbdd),
+ TOBN(0xdd61af19, 0x1a230c76), TOBN(0xbd527272, 0xcdaa5e4a),
+ TOBN(0xca753636, 0xd0abcd7e), TOBN(0x78bdd37c, 0x370bd8dc),
+ TOBN(0xc23916c2, 0x17cd93fe), TOBN(0x65b97a4d, 0xdadce6e2),
+ TOBN(0xe04ed4eb, 0x174e42f8), TOBN(0x1491ccaa, 0xbb21480a),
+ TOBN(0x145a8280, 0x23196332), TOBN(0x3c3862d7, 0x587b479a),
+ TOBN(0x9f4a88a3, 0x01dcd0ed), TOBN(0x4da2b7ef, 0x3ea12f1f),
+ TOBN(0xf8e7ae33, 0xb126e48e), TOBN(0x404a0b32, 0xf494e237),
+ TOBN(0x9beac474, 0xc55acadb), TOBN(0x4ee5cf3b, 0xcbec9fd9),
+ TOBN(0x336b33b9, 0x7df3c8c3), TOBN(0xbd905fe3, 0xb76808fd),
+ TOBN(0x8f436981, 0xaa45c16a), TOBN(0x255c5bfa, 0x3dd27b62),
+ TOBN(0x71965cbf, 0xc3dd9b4d), TOBN(0xce23edbf, 0xfc068a87),
+ TOBN(0xb78d4725, 0x745b029b), TOBN(0x74610713, 0xcefdd9bd),
+ TOBN(0x7116f75f, 0x1266bf52), TOBN(0x02046722, 0x18e49bb6),
+ TOBN(0xdf43df9f, 0x3d6f19e3), TOBN(0xef1bc7d0, 0xe685cb2f),
+ TOBN(0xcddb27c1, 0x7078c432), TOBN(0xe1961b9c, 0xb77fedb7),
+ TOBN(0x1edc2f5c, 0xc2290570), TOBN(0x2c3fefca, 0x19cbd886),
+ TOBN(0xcf880a36, 0xc2af389a), TOBN(0x96c610fd, 0xbda71cea),
+ TOBN(0xf03977a9, 0x32aa8463), TOBN(0x8eb7763f, 0x8586d90a),
+ TOBN(0x3f342454, 0x2a296e77), TOBN(0xc8718683, 0x42837a35),
+ TOBN(0x7dc71090, 0x6a09c731), TOBN(0x54778ffb, 0x51b816db),
+ TOBN(0x6b33bfec, 0xaf06defd), TOBN(0xfe3c105f, 0x8592b70b),
+ TOBN(0xf937fda4, 0x61da6114), TOBN(0x3c13e651, 0x4c266ad7),
+ TOBN(0xe363a829, 0x855938e8), TOBN(0x2eeb5d9e, 0x9de54b72),
+ TOBN(0xbeb93b0e, 0x20ccfab9), TOBN(0x3dffbb5f, 0x25e61a25),
+ TOBN(0x7f655e43, 0x1acc093d), TOBN(0x0cb6cc3d, 0x3964ce61),
+ TOBN(0x6ab283a1, 0xe5e9b460), TOBN(0x55d787c5, 0xa1c7e72d),
+ TOBN(0x4d2efd47, 0xdeadbf02), TOBN(0x11e80219, 0xac459068),
+ TOBN(0x810c7626, 0x71f311f0), TOBN(0xfa17ef8d, 0x4ab6ef53),
+ TOBN(0xaf47fd25, 0x93e43bff), TOBN(0x5cb5ff3f, 0x0be40632),
+ TOBN(0x54687106, 0x8ee61da3), TOBN(0x7764196e, 0xb08afd0f),
+ TOBN(0x831ab3ed, 0xf0290a8f), TOBN(0xcae81966, 0xcb47c387),
+ TOBN(0xaad7dece, 0x184efb4f), TOBN(0xdcfc53b3, 0x4749110e),
+ TOBN(0x6698f23c, 0x4cb632f9), TOBN(0xc42a1ad6, 0xb91f8067),
+ TOBN(0xb116a81d, 0x6284180a), TOBN(0xebedf5f8, 0xe901326f),
+ TOBN(0xf2274c9f, 0x97e3e044), TOBN(0x42018520, 0x11d09fc9),
+ TOBN(0x56a65f17, 0xd18e6e23), TOBN(0x2ea61e2a, 0x352b683c),
+ TOBN(0x27d291bc, 0x575eaa94), TOBN(0x9e7bc721, 0xb8ff522d),
+ TOBN(0x5f7268bf, 0xa7f04d6f), TOBN(0x5868c73f, 0xaba41748),
+ TOBN(0x9f85c2db, 0x7be0eead), TOBN(0x511e7842, 0xff719135),
+ TOBN(0x5a06b1e9, 0xc5ea90d7), TOBN(0x0c19e283, 0x26fab631),
+ TOBN(0x8af8f0cf, 0xe9206c55), TOBN(0x89389cb4, 0x3553c06a),
+ TOBN(0x39dbed97, 0xf65f8004), TOBN(0x0621b037, 0xc508991d),
+ TOBN(0x1c52e635, 0x96e78cc4), TOBN(0x5385c8b2, 0x0c06b4a8),
+ TOBN(0xd84ddfdb, 0xb0e87d03), TOBN(0xc49dfb66, 0x934bafad),
+ TOBN(0x7071e170, 0x59f70772), TOBN(0x3a073a84, 0x3a1db56b),
+ TOBN(0x03494903, 0x3b8af190), TOBN(0x7d882de3, 0xd32920f0),
+ TOBN(0x91633f0a, 0xb2cf8940), TOBN(0x72b0b178, 0x6f948f51),
+ TOBN(0x2d28dc30, 0x782653c8), TOBN(0x88829849, 0xdb903a05),
+ TOBN(0xb8095d0c, 0x6a19d2bb), TOBN(0x4b9e7f0c, 0x86f782cb),
+ TOBN(0x7af73988, 0x2d907064), TOBN(0xd12be0fe, 0x8b32643c),
+ TOBN(0x358ed23d, 0x0e165dc3), TOBN(0x3d47ce62, 0x4e2378ce),
+ TOBN(0x7e2bb0b9, 0xfeb8a087), TOBN(0x3246e8ae, 0xe29e10b9),
+ TOBN(0x459f4ec7, 0x03ce2b4d), TOBN(0xe9b4ca1b, 0xbbc077cf),
+ TOBN(0x2613b4f2, 0x0e9940c1), TOBN(0xfc598bb9, 0x047d1eb1),
+ TOBN(0x9744c62b, 0x45036099), TOBN(0xa9dee742, 0x167c65d8),
+ TOBN(0x0c511525, 0xdabe1943), TOBN(0xda110554, 0x93c6c624),
+ TOBN(0xae00a52c, 0x651a3be2), TOBN(0xcda5111d, 0x884449a6),
+ TOBN(0x063c06f4, 0xff33bed1), TOBN(0x73baaf9a, 0x0d3d76b4),
+ TOBN(0x52fb0c9d, 0x7fc63668), TOBN(0x6886c9dd, 0x0c039cde),
+ TOBN(0x602bd599, 0x55b22351), TOBN(0xb00cab02, 0x360c7c13),
+ TOBN(0x8cb616bc, 0x81b69442), TOBN(0x41486700, 0xb55c3cee),
+ TOBN(0x71093281, 0xf49ba278), TOBN(0xad956d9c, 0x64a50710),
+ TOBN(0x9561f28b, 0x638a7e81), TOBN(0x54155cdf, 0x5980ddc3),
+ TOBN(0xb2db4a96, 0xd26f247a), TOBN(0x9d774e4e, 0x4787d100),
+ TOBN(0x1a9e6e2e, 0x078637d2), TOBN(0x1c363e2d, 0x5e0ae06a),
+ TOBN(0x7493483e, 0xe9cfa354), TOBN(0x76843cb3, 0x7f74b98d),
+ TOBN(0xbaca6591, 0xd4b66947), TOBN(0xb452ce98, 0x04460a8c),
+ TOBN(0x6830d246, 0x43768f55), TOBN(0xf4197ed8, 0x7dff12df),
+ TOBN(0x6521b472, 0x400dd0f7), TOBN(0x59f5ca8f, 0x4b1e7093),
+ TOBN(0x6feff11b, 0x080338ae), TOBN(0x0ada31f6, 0xa29ca3c6),
+ TOBN(0x24794eb6, 0x94a2c215), TOBN(0xd83a43ab, 0x05a57ab4),
+ TOBN(0x264a543a, 0x2a6f89fe), TOBN(0x2c2a3868, 0xdd5ec7c2),
+ TOBN(0xd3373940, 0x8439d9b2), TOBN(0x715ea672, 0x0acd1f11),
+ TOBN(0x42c1d235, 0xe7e6cc19), TOBN(0x81ce6e96, 0xb990585c),
+ TOBN(0x04e5dfe0, 0xd809c7bd), TOBN(0xd7b2580c, 0x8f1050ab),
+ TOBN(0x6d91ad78, 0xd8a4176f), TOBN(0x0af556ee, 0x4e2e897c),
+ TOBN(0x162a8b73, 0x921de0ac), TOBN(0x52ac9c22, 0x7ea78400),
+ TOBN(0xee2a4eea, 0xefce2174), TOBN(0xbe61844e, 0x6d637f79),
+ TOBN(0x0491f1bc, 0x789a283b), TOBN(0x72d3ac3d, 0x880836f4),
+ TOBN(0xaa1c5ea3, 0x88e5402d), TOBN(0x1b192421, 0xd5cc473d),
+ TOBN(0x5c0b9998, 0x9dc84cac), TOBN(0xb0a8482d, 0x9c6e75b8),
+ TOBN(0x639961d0, 0x3a191ce2), TOBN(0xda3bc865, 0x6d837930),
+ TOBN(0xca990653, 0x056e6f8f), TOBN(0x84861c41, 0x64d133a7),
+ TOBN(0x8b403276, 0x746abe40), TOBN(0xb7b4d51a, 0xebf8e303),
+ TOBN(0x05b43211, 0x220a255d), TOBN(0xc997152c, 0x02419e6e),
+ TOBN(0x76ff47b6, 0x630c2fea), TOBN(0x50518677, 0x281fdade),
+ TOBN(0x3283b8ba, 0xcf902b0b), TOBN(0x8d4b4eb5, 0x37db303b),
+ TOBN(0xcc89f42d, 0x755011bc), TOBN(0xb43d74bb, 0xdd09d19b),
+ TOBN(0x65746bc9, 0x8adba350), TOBN(0x364eaf8c, 0xb51c1927),
+ TOBN(0x13c76596, 0x10ad72ec), TOBN(0x30045121, 0xf8d40c20),
+ TOBN(0x6d2d99b7, 0xea7b979b), TOBN(0xcd78cd74, 0xe6fb3bcd),
+ TOBN(0x11e45a9e, 0x86cffbfe), TOBN(0x78a61cf4, 0x637024f6),
+ TOBN(0xd06bc872, 0x3d502295), TOBN(0xf1376854, 0x458cb288),
+ TOBN(0xb9db26a1, 0x342f8586), TOBN(0xf33effcf, 0x4beee09e),
+ TOBN(0xd7e0c4cd, 0xb30cfb3a), TOBN(0x6d09b8c1, 0x6c9db4c8),
+ TOBN(0x40ba1a42, 0x07c8d9df), TOBN(0x6fd495f7, 0x1c52c66d),
+ TOBN(0xfb0e169f, 0x275264da), TOBN(0x80c2b746, 0xe57d8362),
+ TOBN(0xedd987f7, 0x49ad7222), TOBN(0xfdc229af, 0x4398ec7b),}
+ ,
+ {TOBN(0xb0d1ed84, 0x52666a58), TOBN(0x4bcb6e00, 0xe6a9c3c2),
+ TOBN(0x3c57411c, 0x26906408), TOBN(0xcfc20755, 0x13556400),
+ TOBN(0xa08b1c50, 0x5294dba3), TOBN(0xa30ba286, 0x8b7dd31e),
+ TOBN(0xd70ba90e, 0x991eca74), TOBN(0x094e142c, 0xe762c2b9),
+ TOBN(0xb81d783e, 0x979f3925), TOBN(0x1efd130a, 0xaf4c89a7),
+ TOBN(0x525c2144, 0xfd1bf7fa), TOBN(0x4b296904, 0x1b265a9e),
+ TOBN(0xed8e9634, 0xb9db65b6), TOBN(0x35c82e32, 0x03599d8a),
+ TOBN(0xdaa7a54f, 0x403563f3), TOBN(0x9df088ad, 0x022c38ab),
+ TOBN(0xe5cfb066, 0xbb3fd30a), TOBN(0x429169da, 0xeff0354e),
+ TOBN(0x809cf852, 0x3524e36c), TOBN(0x136f4fb3, 0x0155be1d),
+ TOBN(0x4826af01, 0x1fbba712), TOBN(0x6ef0f0b4, 0x506ba1a1),
+ TOBN(0xd9928b31, 0x77aea73e), TOBN(0xe2bf6af2, 0x5eaa244e),
+ TOBN(0x8d084f12, 0x4237b64b), TOBN(0x688ebe99, 0xe3ecfd07),
+ TOBN(0x57b8a70c, 0xf6845dd8), TOBN(0x808fc59c, 0x5da4a325),
+ TOBN(0xa9032b2b, 0xa3585862), TOBN(0xb66825d5, 0xedf29386),
+ TOBN(0xb5a5a8db, 0x431ec29b), TOBN(0xbb143a98, 0x3a1e8dc8),
+ TOBN(0x35ee94ce, 0x12ae381b), TOBN(0x3a7f176c, 0x86ccda90),
+ TOBN(0xc63a657e, 0x4606eaca), TOBN(0x9ae5a380, 0x43cd04df),
+ TOBN(0x9bec8d15, 0xed251b46), TOBN(0x1f5d6d30, 0xcaca5e64),
+ TOBN(0x347b3b35, 0x9ff20f07), TOBN(0x4d65f034, 0xf7e4b286),
+ TOBN(0x9e93ba24, 0xf111661e), TOBN(0xedced484, 0xb105eb04),
+ TOBN(0x96dc9ba1, 0xf424b578), TOBN(0xbf8f66b7, 0xe83e9069),
+ TOBN(0x872d4df4, 0xd7ed8216), TOBN(0xbf07f377, 0x8e2cbecf),
+ TOBN(0x4281d899, 0x98e73754), TOBN(0xfec85fbb, 0x8aab8708),
+ TOBN(0x9a3c0dee, 0xa5ba5b0b), TOBN(0xe6a116ce, 0x42d05299),
+ TOBN(0xae9775fe, 0xe9b02d42), TOBN(0x72b05200, 0xa1545cb6),
+ TOBN(0xbc506f7d, 0x31a3b4ea), TOBN(0xe5893078, 0x8bbd9b32),
+ TOBN(0xc8bc5f37, 0xe4b12a97), TOBN(0x6b000c06, 0x4a73b671),
+ TOBN(0x13b5bf22, 0x765fa7d0), TOBN(0x59805bf0, 0x1d6a5370),
+ TOBN(0x67a5e29d, 0x4280db98), TOBN(0x4f53916f, 0x776b1ce3),
+ TOBN(0x714ff61f, 0x33ddf626), TOBN(0x4206238e, 0xa085d103),
+ TOBN(0x1c50d4b7, 0xe5809ee3), TOBN(0x999f450d, 0x85f8eb1d),
+ TOBN(0x658a6051, 0xe4c79e9b), TOBN(0x1394cb73, 0xc66a9fea),
+ TOBN(0x27f31ed5, 0xc6be7b23), TOBN(0xf4c88f36, 0x5aa6f8fe),
+ TOBN(0x0fb0721f, 0x4aaa499e), TOBN(0x68b3a7d5, 0xe3fb2a6b),
+ TOBN(0xa788097d, 0x3a92851d), TOBN(0x060e7f8a, 0xe96f4913),
+ TOBN(0x82eebe73, 0x1a3a93bc), TOBN(0x42bbf465, 0xa21adc1a),
+ TOBN(0xc10b6fa4, 0xef030efd), TOBN(0x247aa4c7, 0x87b097bb),
+ TOBN(0x8b8dc632, 0xf60c77da), TOBN(0x6ffbc26a, 0xc223523e),
+ TOBN(0xa4f6ff11, 0x344579cf), TOBN(0x5825653c, 0x980250f6),
+ TOBN(0xb2dd097e, 0xbc1aa2b9), TOBN(0x07889393, 0x37a0333a),
+ TOBN(0x1cf55e71, 0x37a0db38), TOBN(0x2648487f, 0x792c1613),
+ TOBN(0xdad01336, 0x3fcef261), TOBN(0x6239c81d, 0x0eabf129),
+ TOBN(0x8ee761de, 0x9d276be2), TOBN(0x406a7a34, 0x1eda6ad3),
+ TOBN(0x4bf367ba, 0x4a493b31), TOBN(0x54f20a52, 0x9bf7f026),
+ TOBN(0xb696e062, 0x9795914b), TOBN(0xcddab96d, 0x8bf236ac),
+ TOBN(0x4ff2c70a, 0xed25ea13), TOBN(0xfa1d09eb, 0x81cbbbe7),
+ TOBN(0x88fc8c87, 0x468544c5), TOBN(0x847a670d, 0x696b3317),
+ TOBN(0xf133421e, 0x64bcb626), TOBN(0xaea638c8, 0x26dee0b5),
+ TOBN(0xd6e7680b, 0xb310346c), TOBN(0xe06f4097, 0xd5d4ced3),
+ TOBN(0x09961452, 0x7512a30b), TOBN(0xf3d867fd, 0xe589a59a),
+ TOBN(0x2e73254f, 0x52d0c180), TOBN(0x9063d8a3, 0x333c74ac),
+ TOBN(0xeda6c595, 0xd314e7bc), TOBN(0x2ee7464b, 0x467899ed),
+ TOBN(0x1cef423c, 0x0a1ed5d3), TOBN(0x217e76ea, 0x69cc7613),
+ TOBN(0x27ccce1f, 0xe7cda917), TOBN(0x12d8016b, 0x8a893f16),
+ TOBN(0xbcd6de84, 0x9fc74f6b), TOBN(0xfa5817e2, 0xf3144e61),
+ TOBN(0x1f354164, 0x0821ee4c), TOBN(0x1583eab4, 0x0bc61992),
+ TOBN(0x7490caf6, 0x1d72879f), TOBN(0x998ad9f3, 0xf76ae7b2),
+ TOBN(0x1e181950, 0xa41157f7), TOBN(0xa9d7e1e6, 0xe8da3a7e),
+ TOBN(0x963784eb, 0x8426b95f), TOBN(0x0ee4ed6e, 0x542e2a10),
+ TOBN(0xb79d4cc5, 0xac751e7b), TOBN(0x93f96472, 0xfd4211bd),
+ TOBN(0x8c72d3d2, 0xc8de4fc6), TOBN(0x7b69cbf5, 0xdf44f064),
+ TOBN(0x3da90ca2, 0xf4bf94e1), TOBN(0x1a5325f8, 0xf12894e2),
+ TOBN(0x0a437f6c, 0x7917d60b), TOBN(0x9be70486, 0x96c9cb5d),
+ TOBN(0xb4d880bf, 0xe1dc5c05), TOBN(0xd738adda, 0xeebeeb57),
+ TOBN(0x6f0119d3, 0xdf0fe6a3), TOBN(0x5c686e55, 0x66eaaf5a),
+ TOBN(0x9cb10b50, 0xdfd0b7ec), TOBN(0xbdd0264b, 0x6a497c21),
+ TOBN(0xfc093514, 0x8c546c96), TOBN(0x58a947fa, 0x79dbf42a),
+ TOBN(0xc0b48d4e, 0x49ccd6d7), TOBN(0xff8fb02c, 0x88bd5580),
+ TOBN(0xc75235e9, 0x07d473b2), TOBN(0x4fab1ac5, 0xa2188af3),
+ TOBN(0x030fa3bc, 0x97576ec0), TOBN(0xe8c946e8, 0x0b7e7d2f),
+ TOBN(0x40a5c9cc, 0x70305600), TOBN(0x6d8260a9, 0xc8b013b4),
+ TOBN(0x0368304f, 0x70bba85c), TOBN(0xad090da1, 0xa4a0d311),
+ TOBN(0x7170e870, 0x2415eec1), TOBN(0xbfba35fe, 0x8461ea47),
+ TOBN(0x6279019a, 0xc1e91938), TOBN(0xa47638f3, 0x1afc415f),
+ TOBN(0x36c65cbb, 0xbcba0e0f), TOBN(0x02160efb, 0x034e2c48),
+ TOBN(0xe6c51073, 0x615cd9e4), TOBN(0x498ec047, 0xf1243c06),
+ TOBN(0x3e5a8809, 0xb17b3d8c), TOBN(0x5cd99e61, 0x0cc565f1),
+ TOBN(0x81e312df, 0x7851dafe), TOBN(0xf156f5ba, 0xa79061e2),
+ TOBN(0x80d62b71, 0x880c590e), TOBN(0xbec9746f, 0x0a39faa1),
+ TOBN(0x1d98a9c1, 0xc8ed1f7a), TOBN(0x09e43bb5, 0xa81d5ff2),
+ TOBN(0xd5f00f68, 0x0da0794a), TOBN(0x412050d9, 0x661aa836),
+ TOBN(0xa89f7c4e, 0x90747e40), TOBN(0x6dc05ebb, 0xb62a3686),
+ TOBN(0xdf4de847, 0x308e3353), TOBN(0x53868fbb, 0x9fb53bb9),
+ TOBN(0x2b09d2c3, 0xcfdcf7dd), TOBN(0x41a9fce3, 0x723fcab4),
+ TOBN(0x73d905f7, 0x07f57ca3), TOBN(0x080f9fb1, 0xac8e1555),
+ TOBN(0x7c088e84, 0x9ba7a531), TOBN(0x07d35586, 0xed9a147f),
+ TOBN(0x602846ab, 0xaf48c336), TOBN(0x7320fd32, 0x0ccf0e79),
+ TOBN(0xaa780798, 0xb18bd1ff), TOBN(0x52c2e300, 0xafdd2905),
+ TOBN(0xf27ea3d6, 0x434267cd), TOBN(0x8b96d16d, 0x15605b5f),
+ TOBN(0x7bb31049, 0x4b45706b), TOBN(0xe7f58b8e, 0x743d25f8),
+ TOBN(0xe9b5e45b, 0x87f30076), TOBN(0xd19448d6, 0x5d053d5a),
+ TOBN(0x1ecc8cb9, 0xd3210a04), TOBN(0x6bc7d463, 0xdafb5269),
+ TOBN(0x3e59b10a, 0x67c3489f), TOBN(0x1769788c, 0x65641e1b),
+ TOBN(0x8a53b82d, 0xbd6cb838), TOBN(0x7066d6e6, 0x236d5f22),
+ TOBN(0x03aa1c61, 0x6908536e), TOBN(0xc971da0d, 0x66ae9809),
+ TOBN(0x01b3a86b, 0xc49a2fac), TOBN(0x3b8420c0, 0x3092e77a),
+ TOBN(0x02057300, 0x7d6fb556), TOBN(0x6941b2a1, 0xbff40a87),
+ TOBN(0x140b6308, 0x0658ff2a), TOBN(0x87804363, 0x3424ab36),
+ TOBN(0x0253bd51, 0x5751e299), TOBN(0xc75bcd76, 0x449c3e3a),
+ TOBN(0x92eb4090, 0x7f8f875d), TOBN(0x9c9d754e, 0x56c26bbf),
+ TOBN(0x158cea61, 0x8110bbe7), TOBN(0x62a6b802, 0x745f91ea),
+ TOBN(0xa79c41aa, 0xc6e7394b), TOBN(0x445b6a83, 0xad57ef10),
+ TOBN(0x0c5277eb, 0x6ea6f40c), TOBN(0x319fe96b, 0x88633365),
+ TOBN(0x0b0fc61f, 0x385f63cb), TOBN(0x41250c84, 0x22bdd127),
+ TOBN(0x67d153f1, 0x09e942c2), TOBN(0x60920d08, 0xc021ad5d),
+ TOBN(0x229f5746, 0x724d81a5), TOBN(0xb7ffb892, 0x5bba3299),
+ TOBN(0x518c51a1, 0xde413032), TOBN(0x2a9bfe77, 0x3c2fd94c),
+ TOBN(0xcbcde239, 0x3191f4fd), TOBN(0x43093e16, 0xd3d6ada1),
+ TOBN(0x184579f3, 0x58769606), TOBN(0x2c94a8b3, 0xd236625c),
+ TOBN(0x6922b9c0, 0x5c437d8e), TOBN(0x3d4ae423, 0xd8d9f3c8),
+ TOBN(0xf72c31c1, 0x2e7090a2), TOBN(0x4ac3f5f3, 0xd76a55bd),
+ TOBN(0x342508fc, 0x6b6af991), TOBN(0x0d527100, 0x1b5cebbd),
+ TOBN(0xb84740d0, 0xdd440dd7), TOBN(0x748ef841, 0x780162fd),
+ TOBN(0xa8dbfe0e, 0xdfc6fafb), TOBN(0xeadfdf05, 0xf7300f27),
+ TOBN(0x7d06555f, 0xfeba4ec9), TOBN(0x12c56f83, 0x9e25fa97),
+ TOBN(0x77f84203, 0xd39b8c34), TOBN(0xed8b1be6, 0x3125eddb),
+ TOBN(0x5bbf2441, 0xf6e39dc5), TOBN(0xb00f6ee6, 0x6a5d678a),
+ TOBN(0xba456ecf, 0x57d0ea99), TOBN(0xdcae0f58, 0x17e06c43),
+ TOBN(0x01643de4, 0x0f5b4baa), TOBN(0x2c324341, 0xd161b9be),
+ TOBN(0x80177f55, 0xe126d468), TOBN(0xed325f1f, 0x76748e09),
+ TOBN(0x6116004a, 0xcfa9bdc2), TOBN(0x2d8607e6, 0x3a9fb468),
+ TOBN(0x0e573e27, 0x6009d660), TOBN(0x3a525d2e, 0x8d10c5a1),
+ TOBN(0xd26cb45c, 0x3b9009a0), TOBN(0xb6b0cdc0, 0xde9d7448),
+ TOBN(0x949c9976, 0xe1337c26), TOBN(0x6faadebd, 0xd73d68e5),
+ TOBN(0x9e158614, 0xf1b768d9), TOBN(0x22dfa557, 0x9cc4f069),
+ TOBN(0xccd6da17, 0xbe93c6d6), TOBN(0x24866c61, 0xa504f5b9),
+ TOBN(0x2121353c, 0x8d694da1), TOBN(0x1c6ca580, 0x0140b8c6),
+ TOBN(0xc245ad8c, 0xe964021e), TOBN(0xb83bffba, 0x032b82b3),
+ TOBN(0xfaa220c6, 0x47ef9898), TOBN(0x7e8d3ac6, 0x982c948a),
+ TOBN(0x1faa2091, 0xbc2d124a), TOBN(0xbd54c3dd, 0x05b15ff4),
+ TOBN(0x386bf3ab, 0xc87c6fb7), TOBN(0xfb2b0563, 0xfdeb6f66),
+ TOBN(0x4e77c557, 0x5b45afb4), TOBN(0xe9ded649, 0xefb8912d),
+ TOBN(0x7ec9bbf5, 0x42f6e557), TOBN(0x2570dfff, 0x62671f00),
+ TOBN(0x2b3bfb78, 0x88e084bd), TOBN(0xa024b238, 0xf37fe5b4),
+ TOBN(0x44e7dc04, 0x95649aee), TOBN(0x498ca255, 0x5e7ec1d8),
+ TOBN(0x3bc766ea, 0xaaa07e86), TOBN(0x0db6facb, 0xf3608586),
+ TOBN(0xbadd2549, 0xbdc259c8), TOBN(0x95af3c6e, 0x041c649f),
+ TOBN(0xb36a928c, 0x02e30afb), TOBN(0x9b5356ad, 0x008a88b8),
+ TOBN(0x4b67a5f1, 0xcf1d9e9d), TOBN(0xc6542e47, 0xa5d8d8ce),
+ TOBN(0x73061fe8, 0x7adfb6cc), TOBN(0xcc826fd3, 0x98678141),
+ TOBN(0x00e758b1, 0x3c80515a), TOBN(0x6afe3247, 0x41485083),
+ TOBN(0x0fcb08b9, 0xb6ae8a75), TOBN(0xb8cf388d, 0x4acf51e1),
+ TOBN(0x344a5560, 0x6961b9d6), TOBN(0x1a6778b8, 0x6a97fd0c),
+ TOBN(0xd840fdc1, 0xecc4c7e3), TOBN(0xde9fe47d, 0x16db68cc),
+ TOBN(0xe95f89de, 0xa3e216aa), TOBN(0x84f1a6a4, 0x9594a8be),
+ TOBN(0x7ddc7d72, 0x5a7b162b), TOBN(0xc5cfda19, 0xadc817a3),
+ TOBN(0x80a5d350, 0x78b58d46), TOBN(0x93365b13, 0x82978f19),
+ TOBN(0x2e44d225, 0x26a1fc90), TOBN(0x0d6d10d2, 0x4d70705d),
+ TOBN(0xd94b6b10, 0xd70c45f4), TOBN(0x0f201022, 0xb216c079),
+ TOBN(0xcec966c5, 0x658fde41), TOBN(0xa8d2bc7d, 0x7e27601d),
+ TOBN(0xbfcce3e1, 0xff230be7), TOBN(0x3394ff6b, 0x0033ffb5),
+ TOBN(0xd890c509, 0x8132c9af), TOBN(0xaac4b0eb, 0x361e7868),
+ TOBN(0x5194ded3, 0xe82d15aa), TOBN(0x4550bd2e, 0x23ae6b7d),
+ TOBN(0x3fda318e, 0xea5399d4), TOBN(0xd989bffa, 0x91638b80),
+ TOBN(0x5ea124d0, 0xa14aa12d), TOBN(0x1fb1b899, 0x3667b944),
+ TOBN(0x95ec7969, 0x44c44d6a), TOBN(0x91df144a, 0x57e86137),
+ TOBN(0x915fd620, 0x73adac44), TOBN(0x8f01732d, 0x59a83801),
+ TOBN(0xec579d25, 0x3aa0a633), TOBN(0x06de5e7c, 0xc9d6d59c),
+ TOBN(0xc132f958, 0xb1ef8010), TOBN(0x29476f96, 0xe65c1a02),
+ TOBN(0x336a77c0, 0xd34c3565), TOBN(0xef1105b2, 0x1b9f1e9e),
+ TOBN(0x63e6d08b, 0xf9e08002), TOBN(0x9aff2f21, 0xc613809e),
+ TOBN(0xb5754f85, 0x3a80e75d), TOBN(0xde71853e, 0x6bbda681),
+ TOBN(0x86f041df, 0x8197fd7a), TOBN(0x8b332e08, 0x127817fa),
+ TOBN(0x05d99be8, 0xb9c20cda), TOBN(0x89f7aad5, 0xd5cd0c98),
+ TOBN(0x7ef936fe, 0x5bb94183), TOBN(0x92ca0753, 0xb05cd7f2),
+ TOBN(0x9d65db11, 0x74a1e035), TOBN(0x02628cc8, 0x13eaea92),
+ TOBN(0xf2d9e242, 0x49e4fbf2), TOBN(0x94fdfd9b, 0xe384f8b7),
+ TOBN(0x65f56054, 0x63428c6b), TOBN(0x2f7205b2, 0x90b409a5),
+ TOBN(0xf778bb78, 0xff45ae11), TOBN(0xa13045be, 0xc5ee53b2),
+ TOBN(0xe00a14ff, 0x03ef77fe), TOBN(0x689cd59f, 0xffef8bef),
+ TOBN(0x3578f0ed, 0x1e9ade22), TOBN(0xe99f3ec0, 0x6268b6a8),
+ TOBN(0xa2057d91, 0xea1b3c3e), TOBN(0x2d1a7053, 0xb8823a4a),
+ TOBN(0xabbb336a, 0x2cca451e), TOBN(0xcd2466e3, 0x2218bb5d),
+ TOBN(0x3ac1f42f, 0xc8cb762d), TOBN(0x7e312aae, 0x7690211f),
+ TOBN(0xebb9bd73, 0x45d07450), TOBN(0x207c4b82, 0x46c2213f),
+ TOBN(0x99d425c1, 0x375913ec), TOBN(0x94e45e96, 0x67908220),
+ TOBN(0xc08f3087, 0xcd67dbf6), TOBN(0xa5670fbe, 0xc0887056),
+ TOBN(0x6717b64a, 0x66f5b8fc), TOBN(0xd5a56aea, 0x786fec28),
+ TOBN(0xa8c3f55f, 0xc0ff4952), TOBN(0xa77fefae, 0x457ac49b),
+ TOBN(0x29882d7c, 0x98379d44), TOBN(0xd000bdfb, 0x509edc8a),
+ TOBN(0xc6f95979, 0xe66fe464), TOBN(0x504a6115, 0xfa61bde0),
+ TOBN(0x56b3b871, 0xeffea31a), TOBN(0x2d3de26d, 0xf0c21a54),
+ TOBN(0x21dbff31, 0x834753bf), TOBN(0xe67ecf49, 0x69269d86),
+ TOBN(0x7a176952, 0x151fe690), TOBN(0x03515804, 0x7f2adb5f),
+ TOBN(0xee794b15, 0xd1b62a8d), TOBN(0xf004ceec, 0xaae454e6),
+ TOBN(0x0897ea7c, 0xf0386fac), TOBN(0x3b62ff12, 0xd1fca751),
+ TOBN(0x154181df, 0x1b7a04ec), TOBN(0x2008e04a, 0xfb5847ec),
+ TOBN(0xd147148e, 0x41dbd772), TOBN(0x2b419f73, 0x22942654),
+ TOBN(0x669f30d3, 0xe9c544f7), TOBN(0x52a2c223, 0xc8540149),
+ TOBN(0x5da9ee14, 0x634dfb02), TOBN(0x5f074ff0, 0xf47869f3),
+ TOBN(0x74ee878d, 0xa3933acc), TOBN(0xe6510651, 0x4fe35ed1),
+ TOBN(0xb3eb9482, 0xf1012e7a), TOBN(0x51013cc0, 0xa8a566ae),
+ TOBN(0xdd5e9243, 0x47c00d3b), TOBN(0x7fde089d, 0x946bb0e5),
+ TOBN(0x030754fe, 0xc731b4b3), TOBN(0x12a136a4, 0x99fda062),
+ TOBN(0x7c1064b8, 0x5a1a35bc), TOBN(0xbf1f5763, 0x446c84ef),
+ TOBN(0xed29a56d, 0xa16d4b34), TOBN(0x7fba9d09, 0xdca21c4f),
+ TOBN(0x66d7ac00, 0x6d8de486), TOBN(0x60061987, 0x73a2a5e1),
+ TOBN(0x8b400f86, 0x9da28ff0), TOBN(0x3133f708, 0x43c4599c),
+ TOBN(0x9911c9b8, 0xee28cb0d), TOBN(0xcd7e2874, 0x8e0af61d),
+ TOBN(0x5a85f0f2, 0x72ed91fc), TOBN(0x85214f31, 0x9cd4a373),
+ TOBN(0x881fe5be, 0x1925253c), TOBN(0xd8dc98e0, 0x91e8bc76),
+ TOBN(0x7120affe, 0x585cc3a2), TOBN(0x724952ed, 0x735bf97a),
+ TOBN(0x5581e7dc, 0x3eb34581), TOBN(0x5cbff4f2, 0xe52ee57d),
+ TOBN(0x8d320a0e, 0x87d8cc7b), TOBN(0x9beaa7f3, 0xf1d280d0),
+ TOBN(0x7a0b9571, 0x9beec704), TOBN(0x9126332e, 0x5b7f0057),
+ TOBN(0x01fbc1b4, 0x8ed3bd6d), TOBN(0x35bb2c12, 0xd945eb24),
+ TOBN(0x6404694e, 0x9a8ae255), TOBN(0xb6092eec, 0x8d6abfb3),
+ TOBN(0x4d76143f, 0xcc058865), TOBN(0x7b0a5af2, 0x6e249922),
+ TOBN(0x8aef9440, 0x6a50d353), TOBN(0xe11e4bcc, 0x64f0e07a),
+ TOBN(0x4472993a, 0xa14a90fa), TOBN(0x7706e20c, 0xba0c51d4),
+ TOBN(0xf403292f, 0x1532672d), TOBN(0x52573bfa, 0x21829382),
+ TOBN(0x6a7bb6a9, 0x3b5bdb83), TOBN(0x08da65c0, 0xa4a72318),
+ TOBN(0xc58d22aa, 0x63eb065f), TOBN(0x1717596c, 0x1b15d685),
+ TOBN(0x112df0d0, 0xb266d88b), TOBN(0xf688ae97, 0x5941945a),
+ TOBN(0x487386e3, 0x7c292cac), TOBN(0x42f3b50d, 0x57d6985c),
+ TOBN(0x6da4f998, 0x6a90fc34), TOBN(0xc8f257d3, 0x65ca8a8d),
+ TOBN(0xc2feabca, 0x6951f762), TOBN(0xe1bc81d0, 0x74c323ac),
+ TOBN(0x1bc68f67, 0x251a2a12), TOBN(0x10d86587, 0xbe8a70dc),
+ TOBN(0xd648af7f, 0xf0f84d2e), TOBN(0xf0aa9ebc, 0x6a43ac92),
+ TOBN(0x69e3be04, 0x27596893), TOBN(0xb6bb02a6, 0x45bf452b),
+ TOBN(0x0875c11a, 0xf4c698c8), TOBN(0x6652b5c7, 0xbece3794),
+ TOBN(0x7b3755fd, 0x4f5c0499), TOBN(0x6ea16558, 0xb5532b38),
+ TOBN(0xd1c69889, 0xa2e96ef7), TOBN(0x9c773c3a, 0x61ed8f48),
+ TOBN(0x2b653a40, 0x9b323abc), TOBN(0xe26605e1, 0xf0e1d791),
+ TOBN(0x45d41064, 0x4a87157a), TOBN(0x8f9a78b7, 0xcbbce616),
+ TOBN(0xcf1e44aa, 0xc407eddd), TOBN(0x81ddd1d8, 0xa35b964f),
+ TOBN(0x473e339e, 0xfd083999), TOBN(0x6c94bdde, 0x8e796802),
+ TOBN(0x5a304ada, 0x8545d185), TOBN(0x82ae44ea, 0x738bb8cb),
+ TOBN(0x628a35e3, 0xdf87e10e), TOBN(0xd3624f3d, 0xa15b9fe3),
+ TOBN(0xcc44209b, 0x14be4254), TOBN(0x7d0efcbc, 0xbdbc2ea5),
+ TOBN(0x1f603362, 0x04c37bbe), TOBN(0x21f363f5, 0x56a5852c),
+ TOBN(0xa1503d1c, 0xa8501550), TOBN(0x2251e0e1, 0xd8ab10bb),
+ TOBN(0xde129c96, 0x6961c51c), TOBN(0x1f7246a4, 0x81910f68),
+ TOBN(0x2eb744ee, 0x5f2591f2), TOBN(0x3c47d33f, 0x5e627157),
+ TOBN(0x4d6d62c9, 0x22f3bd68), TOBN(0x6120a64b, 0xcb8df856),
+ TOBN(0x3a9ac6c0, 0x7b5d07df), TOBN(0xa92b9558, 0x7ef39783),
+ TOBN(0xe128a134, 0xab3a9b4f), TOBN(0x41c18807, 0xb1252f05),
+ TOBN(0xfc7ed089, 0x80ba9b1c), TOBN(0xac8dc6de, 0xc532a9dd),
+ TOBN(0xbf829cef, 0x55246809), TOBN(0x101b784f, 0x5b4ee80f),
+ TOBN(0xc09945bb, 0xb6f11603), TOBN(0x57b09dbe, 0x41d2801e),
+ TOBN(0xfba5202f, 0xa97534a8), TOBN(0x7fd8ae5f, 0xc17b9614),
+ TOBN(0xa50ba666, 0x78308435), TOBN(0x9572f77c, 0xd3868c4d),
+ TOBN(0x0cef7bfd, 0x2dd7aab0), TOBN(0xe7958e08, 0x2c7c79ff),
+ TOBN(0x81262e42, 0x25346689), TOBN(0x716da290, 0xb07c7004),
+ TOBN(0x35f911ea, 0xb7950ee3), TOBN(0x6fd72969, 0x261d21b5),
+ TOBN(0x52389803, 0x08b640d3), TOBN(0x5b0026ee, 0x887f12a1),
+ TOBN(0x20e21660, 0x742e9311), TOBN(0x0ef6d541, 0x5ff77ff7),
+ TOBN(0x969127f0, 0xf9c41135), TOBN(0xf21d60c9, 0x68a64993),
+ TOBN(0x656e5d0c, 0xe541875c), TOBN(0xf1e0f84e, 0xa1d3c233),
+ TOBN(0x9bcca359, 0x06002d60), TOBN(0xbe2da60c, 0x06191552),
+ TOBN(0x5da8bbae, 0x61181ec3), TOBN(0x9f04b823, 0x65806f19),
+ TOBN(0xf1604a7d, 0xd4b79bb8), TOBN(0xaee806fb, 0x52c878c8),
+ TOBN(0x34144f11, 0x8d47b8e8), TOBN(0x72edf52b, 0x949f9054),
+ TOBN(0xebfca84e, 0x2127015a), TOBN(0x9051d0c0, 0x9cb7cef3),
+ TOBN(0x86e8fe58, 0x296deec8), TOBN(0x33b28188, 0x41010d74),}
+ ,
+ {TOBN(0x01079383, 0x171b445f), TOBN(0x9bcf21e3, 0x8131ad4c),
+ TOBN(0x8cdfe205, 0xc93987e8), TOBN(0xe63f4152, 0xc92e8c8f),
+ TOBN(0x729462a9, 0x30add43d), TOBN(0x62ebb143, 0xc980f05a),
+ TOBN(0x4f3954e5, 0x3b06e968), TOBN(0xfe1d75ad, 0x242cf6b1),
+ TOBN(0x5f95c6c7, 0xaf8685c8), TOBN(0xd4c1c8ce, 0x2f8f01aa),
+ TOBN(0xc44bbe32, 0x2574692a), TOBN(0xb8003478, 0xd4a4a068),
+ TOBN(0x7c8fc6e5, 0x2eca3cdb), TOBN(0xea1db16b, 0xec04d399),
+ TOBN(0xb05bc82e, 0x8f2bc5cf), TOBN(0x763d517f, 0xf44793d2),
+ TOBN(0x4451c1b8, 0x08bd98d0), TOBN(0x644b1cd4, 0x6575f240),
+ TOBN(0x6907eb33, 0x7375d270), TOBN(0x56c8bebd, 0xfa2286bd),
+ TOBN(0xc713d2ac, 0xc4632b46), TOBN(0x17da427a, 0xafd60242),
+ TOBN(0x313065b7, 0xc95c7546), TOBN(0xf8239898, 0xbf17a3de),
+ TOBN(0xf3b7963f, 0x4c830320), TOBN(0x842c7aa0, 0x903203e3),
+ TOBN(0xaf22ca0a, 0xe7327afb), TOBN(0x38e13092, 0x967609b6),
+ TOBN(0x73b8fb62, 0x757558f1), TOBN(0x3cc3e831, 0xf7eca8c1),
+ TOBN(0xe4174474, 0xf6331627), TOBN(0xa77989ca, 0xc3c40234),
+ TOBN(0xe5fd17a1, 0x44a081e0), TOBN(0xd797fb7d, 0xb70e296a),
+ TOBN(0x2b472b30, 0x481f719c), TOBN(0x0e632a98, 0xfe6f8c52),
+ TOBN(0x89ccd116, 0xc5f0c284), TOBN(0xf51088af, 0x2d987c62),
+ TOBN(0x2a2bccda, 0x4c2de6cf), TOBN(0x810f9efe, 0xf679f0f9),
+ TOBN(0xb0f394b9, 0x7ffe4b3e), TOBN(0x0b691d21, 0xe5fa5d21),
+ TOBN(0xb0bd7747, 0x9dfbbc75), TOBN(0xd2830fda, 0xfaf78b00),
+ TOBN(0xf78c249c, 0x52434f57), TOBN(0x4b1f7545, 0x98096dab),
+ TOBN(0x73bf6f94, 0x8ff8c0b3), TOBN(0x34aef03d, 0x454e134c),
+ TOBN(0xf8d151f4, 0xb7ac7ec5), TOBN(0xd6ceb95a, 0xe50da7d5),
+ TOBN(0xa1b492b0, 0xdc3a0eb8), TOBN(0x75157b69, 0xb3dd2863),
+ TOBN(0xe2c4c74e, 0xc5413d62), TOBN(0xbe329ff7, 0xbc5fc4c7),
+ TOBN(0x835a2aea, 0x60fa9dda), TOBN(0xf117f5ad, 0x7445cb87),
+ TOBN(0xae8317f4, 0xb0166f7a), TOBN(0xfbd3e3f7, 0xceec74e6),
+ TOBN(0xfdb516ac, 0xe0874bfd), TOBN(0x3d846019, 0xc681f3a3),
+ TOBN(0x0b12ee5c, 0x7c1620b0), TOBN(0xba68b4dd, 0x2b63c501),
+ TOBN(0xac03cd32, 0x6668c51e), TOBN(0x2a6279f7, 0x4e0bcb5b),
+ TOBN(0x17bd69b0, 0x6ae85c10), TOBN(0x72946979, 0x1dfdd3a6),
+ TOBN(0xd9a03268, 0x2c078bec), TOBN(0x41c6a658, 0xbfd68a52),
+ TOBN(0xcdea1024, 0x0e023900), TOBN(0xbaeec121, 0xb10d144d),
+ TOBN(0x5a600e74, 0x058ab8dc), TOBN(0x1333af21, 0xbb89ccdd),
+ TOBN(0xdf25eae0, 0x3aaba1f1), TOBN(0x2cada16e, 0x3b7144cf),
+ TOBN(0x657ee27d, 0x71ab98bc), TOBN(0x99088b4c, 0x7a6fc96e),
+ TOBN(0x05d5c0a0, 0x3549dbd4), TOBN(0x42cbdf8f, 0xf158c3ac),
+ TOBN(0x3fb6b3b0, 0x87edd685), TOBN(0x22071cf6, 0x86f064d0),
+ TOBN(0xd2d6721f, 0xff2811e5), TOBN(0xdb81b703, 0xfe7fae8c),
+ TOBN(0x3cfb74ef, 0xd3f1f7bb), TOBN(0x0cdbcd76, 0x16cdeb5d),
+ TOBN(0x4f39642a, 0x566a808c), TOBN(0x02b74454, 0x340064d6),
+ TOBN(0xfabbadca, 0x0528fa6f), TOBN(0xe4c3074c, 0xd3fc0bb6),
+ TOBN(0xb32cb8b0, 0xb796d219), TOBN(0xc3e95f4f, 0x34741dd9),
+ TOBN(0x87212125, 0x68edf6f5), TOBN(0x7a03aee4, 0xa2b9cb8e),
+ TOBN(0x0cd3c376, 0xf53a89aa), TOBN(0x0d8af9b1, 0x948a28dc),
+ TOBN(0xcf86a3f4, 0x902ab04f), TOBN(0x8aacb62a, 0x7f42002d),
+ TOBN(0x106985eb, 0xf62ffd52), TOBN(0xe670b54e, 0x5797bf10),
+ TOBN(0x4b405209, 0xc5e30aef), TOBN(0x12c97a20, 0x4365b5e9),
+ TOBN(0x104646ce, 0x1fe32093), TOBN(0x13cb4ff6, 0x3907a8c9),
+ TOBN(0x8b9f30d1, 0xd46e726b), TOBN(0xe1985e21, 0xaba0f499),
+ TOBN(0xc573dea9, 0x10a230cd), TOBN(0x24f46a93, 0xcd30f947),
+ TOBN(0xf2623fcf, 0xabe2010a), TOBN(0x3f278cb2, 0x73f00e4f),
+ TOBN(0xed55c67d, 0x50b920eb), TOBN(0xf1cb9a2d, 0x8e760571),
+ TOBN(0x7c50d109, 0x0895b709), TOBN(0x4207cf07, 0x190d4369),
+ TOBN(0x3b027e81, 0xc4127fe1), TOBN(0xa9f8b9ad, 0x3ae9c566),
+ TOBN(0x5ab10851, 0xacbfbba5), TOBN(0xa747d648, 0x569556f5),
+ TOBN(0xcc172b5c, 0x2ba97bf7), TOBN(0x15e0f77d, 0xbcfa3324),
+ TOBN(0xa345b797, 0x7686279d), TOBN(0x5a723480, 0xe38003d3),
+ TOBN(0xfd8e139f, 0x8f5fcda8), TOBN(0xf3e558c4, 0xbdee5bfd),
+ TOBN(0xd76cbaf4, 0xe33f9f77), TOBN(0x3a4c97a4, 0x71771969),
+ TOBN(0xda27e84b, 0xf6dce6a7), TOBN(0xff373d96, 0x13e6c2d1),
+ TOBN(0xf115193c, 0xd759a6e9), TOBN(0x3f9b7025, 0x63d2262c),
+ TOBN(0xd9764a31, 0x317cd062), TOBN(0x30779d8e, 0x199f8332),
+ TOBN(0xd8074106, 0x16b11b0b), TOBN(0x7917ab9f, 0x78aeaed8),
+ TOBN(0xb67a9cbe, 0x28fb1d8e), TOBN(0x2e313563, 0x136eda33),
+ TOBN(0x010b7069, 0xa371a86c), TOBN(0x44d90fa2, 0x6744e6b7),
+ TOBN(0x68190867, 0xd6b3e243), TOBN(0x9fe6cd9d, 0x59048c48),
+ TOBN(0xb900b028, 0x95731538), TOBN(0xa012062f, 0x32cae04f),
+ TOBN(0x8107c8bc, 0x9399d082), TOBN(0x47e8c54a, 0x41df12e2),
+ TOBN(0x14ba5117, 0xb6ef3f73), TOBN(0x22260bea, 0x81362f0b),
+ TOBN(0x90ea261e, 0x1a18cc20), TOBN(0x2192999f, 0x2321d636),
+ TOBN(0xef64d314, 0xe311b6a0), TOBN(0xd7401e4c, 0x3b54a1f5),
+ TOBN(0x19019983, 0x6fbca2ba), TOBN(0x46ad3293, 0x8fbffc4b),
+ TOBN(0xa142d3f6, 0x3786bf40), TOBN(0xeb5cbc26, 0xb67039fc),
+ TOBN(0x9cb0ae6c, 0x252bd479), TOBN(0x05e0f88a, 0x12b5848f),
+ TOBN(0x78f6d2b2, 0xa5c97663), TOBN(0x6f6e149b, 0xc162225c),
+ TOBN(0xe602235c, 0xde601a89), TOBN(0xd17bbe98, 0xf373be1f),
+ TOBN(0xcaf49a5b, 0xa8471827), TOBN(0x7e1a0a85, 0x18aaa116),
+ TOBN(0x6c833196, 0x270580c3), TOBN(0x1e233839, 0xf1c98a14),
+ TOBN(0x67b2f7b4, 0xae34e0a5), TOBN(0x47ac8745, 0xd8ce7289),
+ TOBN(0x2b74779a, 0x100dd467), TOBN(0x274a4337, 0x4ee50d09),
+ TOBN(0x603dcf13, 0x83608bc9), TOBN(0xcd9da6c3, 0xc89e8388),
+ TOBN(0x2660199f, 0x355116ac), TOBN(0xcc38bb59, 0xb6d18eed),
+ TOBN(0x3075f31f, 0x2f4bc071), TOBN(0x9774457f, 0x265dc57e),
+ TOBN(0x06a6a9c8, 0xc6db88bb), TOBN(0x6429d07f, 0x4ec98e04),
+ TOBN(0x8d05e57b, 0x05ecaa8b), TOBN(0x20f140b1, 0x7872ea7b),
+ TOBN(0xdf8c0f09, 0xca494693), TOBN(0x48d3a020, 0xf252e909),
+ TOBN(0x4c5c29af, 0x57b14b12), TOBN(0x7e6fa37d, 0xbf47ad1c),
+ TOBN(0x66e7b506, 0x49a0c938), TOBN(0xb72c0d48, 0x6be5f41f),
+ TOBN(0x6a6242b8, 0xb2359412), TOBN(0xcd35c774, 0x8e859480),
+ TOBN(0x12536fea, 0x87baa627), TOBN(0x58c1fec1, 0xf72aa680),
+ TOBN(0x6c29b637, 0x601e5dc9), TOBN(0x9e3c3c1c, 0xde9e01b9),
+ TOBN(0xefc8127b, 0x2bcfe0b0), TOBN(0x35107102, 0x2a12f50d),
+ TOBN(0x6ccd6cb1, 0x4879b397), TOBN(0xf792f804, 0xf8a82f21),
+ TOBN(0x509d4804, 0xa9b46402), TOBN(0xedddf85d, 0xc10f0850),
+ TOBN(0x928410dc, 0x4b6208aa), TOBN(0xf6229c46, 0x391012dc),
+ TOBN(0xc5a7c41e, 0x7727b9b6), TOBN(0x289e4e4b, 0xaa444842),
+ TOBN(0x049ba1d9, 0xe9a947ea), TOBN(0x44f9e47f, 0x83c8debc),
+ TOBN(0xfa77a1fe, 0x611f8b8e), TOBN(0xfd2e416a, 0xf518f427),
+ TOBN(0xc5fffa70, 0x114ebac3), TOBN(0xfe57c4e9, 0x5d89697b),
+ TOBN(0xfdd053ac, 0xb1aaf613), TOBN(0x31df210f, 0xea585a45),
+ TOBN(0x318cc10e, 0x24985034), TOBN(0x1a38efd1, 0x5f1d6130),
+ TOBN(0xbf86f237, 0x0b1e9e21), TOBN(0xb258514d, 0x1dbe88aa),
+ TOBN(0x1e38a588, 0x90c1baf9), TOBN(0x2936a01e, 0xbdb9b692),
+ TOBN(0xd576de98, 0x6dd5b20c), TOBN(0xb586bf71, 0x70f98ecf),
+ TOBN(0xcccf0f12, 0xc42d2fd7), TOBN(0x8717e61c, 0xfb35bd7b),
+ TOBN(0x8b1e5722, 0x35e6fc06), TOBN(0x3477728f, 0x0b3e13d5),
+ TOBN(0x150c294d, 0xaa8a7372), TOBN(0xc0291d43, 0x3bfa528a),
+ TOBN(0xc6c8bc67, 0xcec5a196), TOBN(0xdeeb31e4, 0x5c2e8a7c),
+ TOBN(0xba93e244, 0xfb6e1c51), TOBN(0xb9f8b71b, 0x2e28e156),
+ TOBN(0xce65a287, 0x968a2ab9), TOBN(0xe3c5ce69, 0x46bbcb1f),
+ TOBN(0xf8c835b9, 0xe7ae3f30), TOBN(0x16bbee26, 0xff72b82b),
+ TOBN(0x665e2017, 0xfd42cd22), TOBN(0x1e139970, 0xf8b1d2a0),
+ TOBN(0x125cda29, 0x79204932), TOBN(0x7aee94a5, 0x49c3bee5),
+ TOBN(0x68c70160, 0x89821a66), TOBN(0xf7c37678, 0x8f981669),
+ TOBN(0xd90829fc, 0x48cc3645), TOBN(0x346af049, 0xd70addfc),
+ TOBN(0x2057b232, 0x370bf29c), TOBN(0xf90c73ce, 0x42e650ee),
+ TOBN(0xe03386ea, 0xa126ab90), TOBN(0x0e266e7e, 0x975a087b),
+ TOBN(0x80578eb9, 0x0fca65d9), TOBN(0x7e2989ea, 0x16af45b8),
+ TOBN(0x7438212d, 0xcac75a4e), TOBN(0x38c7ca39, 0x4fef36b8),
+ TOBN(0x8650c494, 0xd402676a), TOBN(0x26ab5a66, 0xf72c7c48),
+ TOBN(0x4e6cb426, 0xce3a464e), TOBN(0xf8f99896, 0x2b72f841),
+ TOBN(0x8c318491, 0x1a335cc8), TOBN(0x563459ba, 0x6a5913e4),
+ TOBN(0x1b920d61, 0xc7b32919), TOBN(0x805ab8b6, 0xa02425ad),
+ TOBN(0x2ac512da, 0x8d006086), TOBN(0x6ca4846a, 0xbcf5c0fd),
+ TOBN(0xafea51d8, 0xac2138d7), TOBN(0xcb647545, 0x344cd443),
+ TOBN(0x0429ee8f, 0xbd7d9040), TOBN(0xee66a2de, 0x819b9c96),
+ TOBN(0x54f9ec25, 0xdea7d744), TOBN(0x2ffea642, 0x671721bb),
+ TOBN(0x4f19dbd1, 0x114344ea), TOBN(0x04304536, 0xfd0dbc8b),
+ TOBN(0x014b50aa, 0x29ec7f91), TOBN(0xb5fc22fe, 0xbb06014d),
+ TOBN(0x60d963a9, 0x1ee682e0), TOBN(0xdf48abc0, 0xfe85c727),
+ TOBN(0x0cadba13, 0x2e707c2d), TOBN(0xde608d3a, 0xa645aeff),
+ TOBN(0x05f1c28b, 0xedafd883), TOBN(0x3c362ede, 0xbd94de1f),
+ TOBN(0x8dd0629d, 0x13593e41), TOBN(0x0a5e736f, 0x766d6eaf),
+ TOBN(0xbfa92311, 0xf68cf9d1), TOBN(0xa4f9ef87, 0xc1797556),
+ TOBN(0x10d75a1f, 0x5601c209), TOBN(0x651c374c, 0x09b07361),
+ TOBN(0x49950b58, 0x88b5cead), TOBN(0x0ef00058, 0x6fa9dbaa),
+ TOBN(0xf51ddc26, 0x4e15f33a), TOBN(0x1f8b5ca6, 0x2ef46140),
+ TOBN(0x343ac0a3, 0xee9523f0), TOBN(0xbb75eab2, 0x975ea978),
+ TOBN(0x1bccf332, 0x107387f4), TOBN(0x790f9259, 0x9ab0062e),
+ TOBN(0xf1a363ad, 0x1e4f6a5f), TOBN(0x06e08b84, 0x62519a50),
+ TOBN(0x60915187, 0x7265f1ee), TOBN(0x6a80ca34, 0x93ae985e),
+ TOBN(0x81b29768, 0xaaba4864), TOBN(0xb13cabf2, 0x8d52a7d6),
+ TOBN(0xb5c36348, 0x8ead03f1), TOBN(0xc932ad95, 0x81c7c1c0),
+ TOBN(0x5452708e, 0xcae1e27b), TOBN(0x9dac4269, 0x1b0df648),
+ TOBN(0x233e3f0c, 0xdfcdb8bc), TOBN(0xe6ceccdf, 0xec540174),
+ TOBN(0xbd0d845e, 0x95081181), TOBN(0xcc8a7920, 0x699355d5),
+ TOBN(0x111c0f6d, 0xc3b375a8), TOBN(0xfd95bc6b, 0xfd51e0dc),
+ TOBN(0x4a106a26, 0x6888523a), TOBN(0x4d142bd6, 0xcb01a06d),
+ TOBN(0x79bfd289, 0xadb9b397), TOBN(0x0bdbfb94, 0xe9863914),
+ TOBN(0x29d8a229, 0x1660f6a6), TOBN(0x7f6abcd6, 0x551c042d),
+ TOBN(0x13039deb, 0x0ac3ffe8), TOBN(0xa01be628, 0xec8523fb),
+ TOBN(0x6ea34103, 0x0ca1c328), TOBN(0xc74114bd, 0xb903928e),
+ TOBN(0x8aa4ff4e, 0x9e9144b0), TOBN(0x7064091f, 0x7f9a4b17),
+ TOBN(0xa3f4f521, 0xe447f2c4), TOBN(0x81b8da7a, 0x604291f0),
+ TOBN(0xd680bc46, 0x7d5926de), TOBN(0x84f21fd5, 0x34a1202f),
+ TOBN(0x1d1e3181, 0x4e9df3d8), TOBN(0x1ca4861a, 0x39ab8d34),
+ TOBN(0x809ddeec, 0x5b19aa4a), TOBN(0x59f72f7e, 0x4d329366),
+ TOBN(0xa2f93f41, 0x386d5087), TOBN(0x40bf739c, 0xdd67d64f),
+ TOBN(0xb4494205, 0x66702158), TOBN(0xc33c65be, 0x73b1e178),
+ TOBN(0xcdcd657c, 0x38ca6153), TOBN(0x97f4519a, 0xdc791976),
+ TOBN(0xcc7c7f29, 0xcd6e1f39), TOBN(0x38de9cfb, 0x7e3c3932),
+ TOBN(0xe448eba3, 0x7b793f85), TOBN(0xe9f8dbf9, 0xf067e914),
+ TOBN(0xc0390266, 0xf114ae87), TOBN(0x39ed75a7, 0xcd6a8e2a),
+ TOBN(0xadb14848, 0x7ffba390), TOBN(0x67f8cb8b, 0x6af9bc09),
+ TOBN(0x322c3848, 0x9c7476db), TOBN(0xa320fecf, 0x52a538d6),
+ TOBN(0xe0493002, 0xb2aced2b), TOBN(0xdfba1809, 0x616bd430),
+ TOBN(0x531c4644, 0xc331be70), TOBN(0xbc04d32e, 0x90d2e450),
+ TOBN(0x1805a0d1, 0x0f9f142d), TOBN(0x2c44a0c5, 0x47ee5a23),
+ TOBN(0x31875a43, 0x3989b4e3), TOBN(0x6b1949fd, 0x0c063481),
+ TOBN(0x2dfb9e08, 0xbe0f4492), TOBN(0x3ff0da03, 0xe9d5e517),
+ TOBN(0x03dbe9a1, 0xf79466a8), TOBN(0x0b87bcd0, 0x15ea9932),
+ TOBN(0xeb64fc83, 0xab1f58ab), TOBN(0x6d9598da, 0x817edc8a),
+ TOBN(0x699cff66, 0x1d3b67e5), TOBN(0x645c0f29, 0x92635853),
+ TOBN(0x253cdd82, 0xeabaf21c), TOBN(0x82b9602a, 0x2241659e),
+ TOBN(0x2cae07ec, 0x2d9f7091), TOBN(0xbe4c720c, 0x8b48cd9b),
+ TOBN(0x6ce5bc03, 0x6f08d6c9), TOBN(0x36e8a997, 0xaf10bf40),
+ TOBN(0x83422d21, 0x3e10ff12), TOBN(0x7b26d3eb, 0xbcc12494),
+ TOBN(0xb240d2d0, 0xc9469ad6), TOBN(0xc4a11b4d, 0x30afa05b),
+ TOBN(0x4b604ace, 0xdd6ba286), TOBN(0x18486600, 0x3ee2864c),
+ TOBN(0x5869d6ba, 0x8d9ce5be), TOBN(0x0d8f68c5, 0xff4bfb0d),
+ TOBN(0xb69f210b, 0x5700cf73), TOBN(0x61f6653a, 0x6d37c135),
+ TOBN(0xff3d432b, 0x5aff5a48), TOBN(0x0d81c4b9, 0x72ba3a69),
+ TOBN(0xee879ae9, 0xfa1899ef), TOBN(0xbac7e2a0, 0x2d6acafd),
+ TOBN(0xd6d93f6c, 0x1c664399), TOBN(0x4c288de1, 0x5bcb135d),
+ TOBN(0x83031dab, 0x9dab7cbf), TOBN(0xfe23feb0, 0x3abbf5f0),
+ TOBN(0x9f1b2466, 0xcdedca85), TOBN(0x140bb710, 0x1a09538c),
+ TOBN(0xac8ae851, 0x5e11115d), TOBN(0x0d63ff67, 0x6f03f59e),
+ TOBN(0x755e5551, 0x7d234afb), TOBN(0x61c2db4e, 0x7e208fc1),
+ TOBN(0xaa9859ce, 0xf28a4b5d), TOBN(0xbdd6d4fc, 0x34af030f),
+ TOBN(0xd1c4a26d, 0x3be01cb1), TOBN(0x9ba14ffc, 0x243aa07c),
+ TOBN(0xf95cd3a9, 0xb2503502), TOBN(0xe379bc06, 0x7d2a93ab),
+ TOBN(0x3efc18e9, 0xd4ca8d68), TOBN(0x083558ec, 0x80bb412a),
+ TOBN(0xd903b940, 0x9645a968), TOBN(0xa499f0b6, 0x9ba6054f),
+ TOBN(0x208b573c, 0xb8349abe), TOBN(0x3baab3e5, 0x30b4fc1c),
+ TOBN(0x87e978ba, 0xcb524990), TOBN(0x3524194e, 0xccdf0e80),
+ TOBN(0x62711725, 0x7d4bcc42), TOBN(0xe90a3d9b, 0xb90109ba),
+ TOBN(0x3b1bdd57, 0x1323e1e0), TOBN(0xb78e9bd5, 0x5eae1599),
+ TOBN(0x0794b746, 0x9e03d278), TOBN(0x80178605, 0xd70e6297),
+ TOBN(0x171792f8, 0x99c97855), TOBN(0x11b393ee, 0xf5a86b5c),
+ TOBN(0x48ef6582, 0xd8884f27), TOBN(0xbd44737a, 0xbf19ba5f),
+ TOBN(0x8698de4c, 0xa42062c6), TOBN(0x8975eb80, 0x61ce9c54),
+ TOBN(0xd50e57c7, 0xd7fe71f3), TOBN(0x15342190, 0xbc97ce38),
+ TOBN(0x51bda2de, 0x4df07b63), TOBN(0xba12aeae, 0x200eb87d),
+ TOBN(0xabe135d2, 0xa9b4f8f6), TOBN(0x04619d65, 0xfad6d99c),
+ TOBN(0x4a6683a7, 0x7994937c), TOBN(0x7a778c8b, 0x6f94f09a),
+ TOBN(0x8c508623, 0x20a71b89), TOBN(0x241a2aed, 0x1c229165),
+ TOBN(0x352be595, 0xaaf83a99), TOBN(0x9fbfee7f, 0x1562bac8),
+ TOBN(0xeaf658b9, 0x5c4017e3), TOBN(0x1dc7f9e0, 0x15120b86),
+ TOBN(0xd84f13dd, 0x4c034d6f), TOBN(0x283dd737, 0xeaea3038),
+ TOBN(0x197f2609, 0xcd85d6a2), TOBN(0x6ebbc345, 0xfae60177),
+ TOBN(0xb80f031b, 0x4e12fede), TOBN(0xde55d0c2, 0x07a2186b),
+ TOBN(0x1fb3e37f, 0x24dcdd5a), TOBN(0x8d602da5, 0x7ed191fb),
+ TOBN(0x108fb056, 0x76023e0d), TOBN(0x70178c71, 0x459c20c0),
+ TOBN(0xfad5a386, 0x3fe54cf0), TOBN(0xa4a3ec4f, 0x02bbb475),
+ TOBN(0x1aa5ec20, 0x919d94d7), TOBN(0x5d3b63b5, 0xa81e4ab3),
+ TOBN(0x7fa733d8, 0x5ad3d2af), TOBN(0xfbc586dd, 0xd1ac7a37),
+ TOBN(0x282925de, 0x40779614), TOBN(0xfe0ffffb, 0xe74a242a),
+ TOBN(0x3f39e67f, 0x906151e5), TOBN(0xcea27f5f, 0x55e10649),
+ TOBN(0xdca1d4e1, 0xc17cf7b7), TOBN(0x0c326d12, 0x2fe2362d),
+ TOBN(0x05f7ac33, 0x7dd35df3), TOBN(0x0c3b7639, 0xc396dbdf),
+ TOBN(0x0912f5ac, 0x03b7db1c), TOBN(0x9dea4b70, 0x5c9ed4a9),
+ TOBN(0x475e6e53, 0xaae3f639), TOBN(0xfaba0e7c, 0xfc278bac),
+ TOBN(0x16f9e221, 0x9490375f), TOBN(0xaebf9746, 0xa5a7ed0a),
+ TOBN(0x45f9af3f, 0xf41ad5d6), TOBN(0x03c4623c, 0xb2e99224),
+ TOBN(0x82c5bb5c, 0xb3cf56aa), TOBN(0x64311819, 0x34567ed3),
+ TOBN(0xec57f211, 0x8be489ac), TOBN(0x2821895d, 0xb9a1104b),
+ TOBN(0x610dc875, 0x6064e007), TOBN(0x8e526f3f, 0x5b20d0fe),
+ TOBN(0x6e71ca77, 0x5b645aee), TOBN(0x3d1dcb9f, 0x800e10ff),
+ TOBN(0x36b51162, 0x189cf6de), TOBN(0x2c5a3e30, 0x6bb17353),
+ TOBN(0xc186cd3e, 0x2a6c6fbf), TOBN(0xa74516fa, 0x4bf97906),
+ TOBN(0x5b4b8f4b, 0x279d6901), TOBN(0x0c4e57b4, 0x2b573743),
+ TOBN(0x75fdb229, 0xb6e386b6), TOBN(0xb46793fd, 0x99deac27),
+ TOBN(0xeeec47ea, 0xcf712629), TOBN(0xe965f3c4, 0xcbc3b2dd),
+ TOBN(0x8dd1fb83, 0x425c6559), TOBN(0x7fc00ee6, 0x0af06fda),
+ TOBN(0xe98c9225, 0x33d956df), TOBN(0x0f1ef335, 0x4fbdc8a2),
+ TOBN(0x2abb5145, 0xb79b8ea2), TOBN(0x40fd2945, 0xbdbff288),
+ TOBN(0x6a814ac4, 0xd7185db7), TOBN(0xc4329d6f, 0xc084609a),
+ TOBN(0xc9ba7b52, 0xed1be45d), TOBN(0x891dd20d, 0xe4cd2c74),
+ TOBN(0x5a4d4a7f, 0x824139b1), TOBN(0x66c17716, 0xb873c710),
+ TOBN(0x5e5bc141, 0x2843c4e0), TOBN(0xd5ac4817, 0xb97eb5bf),
+ TOBN(0xc0f8af54, 0x450c95c7), TOBN(0xc91b3fa0, 0x318406c5),
+ TOBN(0x360c340a, 0xab9d97f8), TOBN(0xfb57bd07, 0x90a2d611),
+ TOBN(0x4339ae3c, 0xa6a6f7e5), TOBN(0x9c1fcd2a, 0x2feb8a10),
+ TOBN(0x972bcca9, 0xc7ea7432), TOBN(0x1b0b924c, 0x308076f6),
+ TOBN(0x80b2814a, 0x2a5b4ca5), TOBN(0x2f78f55b, 0x61ef3b29),
+ TOBN(0xf838744a, 0xc18a414f), TOBN(0xc611eaae, 0x903d0a86),
+ TOBN(0x94dabc16, 0x2a453f55), TOBN(0xe6f2e3da, 0x14efb279),
+ TOBN(0x5b7a6017, 0x9320dc3c), TOBN(0x692e382f, 0x8df6b5a4),
+ TOBN(0x3f5e15e0, 0x2d40fa90), TOBN(0xc87883ae, 0x643dd318),
+ TOBN(0x511053e4, 0x53544774), TOBN(0x834d0ecc, 0x3adba2bc),
+ TOBN(0x4215d7f7, 0xbae371f5), TOBN(0xfcfd57bf, 0x6c8663bc),
+ TOBN(0xded2383d, 0xd6901b1d), TOBN(0x3b49fbb4, 0xb5587dc3),
+ TOBN(0xfd44a08d, 0x07625f62), TOBN(0x3ee4d65b, 0x9de9b762),}
+ ,
+ {TOBN(0x64e5137d, 0x0d63d1fa), TOBN(0x658fc052, 0x02a9d89f),
+ TOBN(0x48894874, 0x50436309), TOBN(0xe9ae30f8, 0xd598da61),
+ TOBN(0x2ed710d1, 0x818baf91), TOBN(0xe27e9e06, 0x8b6a0c20),
+ TOBN(0x1e28dcfb, 0x1c1a6b44), TOBN(0x883acb64, 0xd6ac57dc),
+ TOBN(0x8735728d, 0xc2c6ff70), TOBN(0x79d6122f, 0xc5dc2235),
+ TOBN(0x23f5d003, 0x19e277f9), TOBN(0x7ee84e25, 0xdded8cc7),
+ TOBN(0x91a8afb0, 0x63cd880a), TOBN(0x3f3ea7c6, 0x3574af60),
+ TOBN(0x0cfcdc84, 0x02de7f42), TOBN(0x62d0792f, 0xb31aa152),
+ TOBN(0x8e1b4e43, 0x8a5807ce), TOBN(0xad283893, 0xe4109a7e),
+ TOBN(0xc30cc9cb, 0xafd59dda), TOBN(0xf65f36c6, 0x3d8d8093),
+ TOBN(0xdf31469e, 0xa60d32b2), TOBN(0xee93df4b, 0x3e8191c8),
+ TOBN(0x9c1017c5, 0x355bdeb5), TOBN(0xd2623185, 0x8616aa28),
+ TOBN(0xb02c83f9, 0xdec31a21), TOBN(0x988c8b23, 0x6ad9d573),
+ TOBN(0x53e983ae, 0xa57be365), TOBN(0xe968734d, 0x646f834e),
+ TOBN(0x9137ea8f, 0x5da6309b), TOBN(0x10f3a624, 0xc1f1ce16),
+ TOBN(0x782a9ea2, 0xca440921), TOBN(0xdf94739e, 0x5b46f1b5),
+ TOBN(0x9f9be006, 0xcce85c9b), TOBN(0x360e70d6, 0xa4c7c2d3),
+ TOBN(0x2cd5beea, 0xaefa1e60), TOBN(0x64cf63c0, 0x8c3d2b6d),
+ TOBN(0xfb107fa3, 0xe1cf6f90), TOBN(0xb7e937c6, 0xd5e044e6),
+ TOBN(0x74e8ca78, 0xce34db9f), TOBN(0x4f8b36c1, 0x3e210bd0),
+ TOBN(0x1df165a4, 0x34a35ea8), TOBN(0x3418e0f7, 0x4d4412f6),
+ TOBN(0x5af1f8af, 0x518836c3), TOBN(0x42ceef4d, 0x130e1965),
+ TOBN(0x5560ca0b, 0x543a1957), TOBN(0xc33761e5, 0x886cb123),
+ TOBN(0x66624b1f, 0xfe98ed30), TOBN(0xf772f4bf, 0x1090997d),
+ TOBN(0xf4e540bb, 0x4885d410), TOBN(0x7287f810, 0x9ba5f8d7),
+ TOBN(0x22d0d865, 0xde98dfb1), TOBN(0x49ff51a1, 0xbcfbb8a3),
+ TOBN(0xb6b6fa53, 0x6bc3012e), TOBN(0x3d31fd72, 0x170d541d),
+ TOBN(0x8018724f, 0x4b0f4966), TOBN(0x79e7399f, 0x87dbde07),
+ TOBN(0x56f8410e, 0xf4f8b16a), TOBN(0x97241afe, 0xc47b266a),
+ TOBN(0x0a406b8e, 0x6d9c87c1), TOBN(0x803f3e02, 0xcd42ab1b),
+ TOBN(0x7f0309a8, 0x04dbec69), TOBN(0xa83b85f7, 0x3bbad05f),
+ TOBN(0xc6097273, 0xad8e197f), TOBN(0xc097440e, 0x5067adc1),
+ TOBN(0x730eafb6, 0x3524ff16), TOBN(0xd7f9b51e, 0x823fc6ce),
+ TOBN(0x27bd0d32, 0x443e4ac0), TOBN(0x40c59ad9, 0x4d66f217),
+ TOBN(0x6c33136f, 0x17c387a4), TOBN(0x5043b8d5, 0xeb86804d),
+ TOBN(0x74970312, 0x675a73c9), TOBN(0x838fdb31, 0xf16669b6),
+ TOBN(0xc507b6dd, 0x418e7ddd), TOBN(0x39888d93, 0x472f19d6),
+ TOBN(0x7eae26be, 0x0c27eb4d), TOBN(0x17b53ed3, 0xfbabb884),
+ TOBN(0xfc27021b, 0x2b01ae4f), TOBN(0x88462e87, 0xcf488682),
+ TOBN(0xbee096ec, 0x215e2d87), TOBN(0xeb2fea9a, 0xd242e29b),
+ TOBN(0x5d985b5f, 0xb821fc28), TOBN(0x89d2e197, 0xdc1e2ad2),
+ TOBN(0x55b566b8, 0x9030ba62), TOBN(0xe3fd41b5, 0x4f41b1c6),
+ TOBN(0xb738ac2e, 0xb9a96d61), TOBN(0x7f8567ca, 0x369443f4),
+ TOBN(0x8698622d, 0xf803a440), TOBN(0x2b586236, 0x8fe2f4dc),
+ TOBN(0xbbcc00c7, 0x56b95bce), TOBN(0x5ec03906, 0x616da680),
+ TOBN(0x79162ee6, 0x72214252), TOBN(0x43132b63, 0x86a892d2),
+ TOBN(0x4bdd3ff2, 0x2f3263bf), TOBN(0xd5b3733c, 0x9cd0a142),
+ TOBN(0x592eaa82, 0x44415ccb), TOBN(0x663e8924, 0x8d5474ea),
+ TOBN(0x8058a25e, 0x5236344e), TOBN(0x82e8df9d, 0xbda76ee6),
+ TOBN(0xdcf6efd8, 0x11cc3d22), TOBN(0x00089cda, 0x3b4ab529),
+ TOBN(0x91d3a071, 0xbd38a3db), TOBN(0x4ea97fc0, 0xef72b925),
+ TOBN(0x0c9fc15b, 0xea3edf75), TOBN(0x5a6297cd, 0xa4348ed3),
+ TOBN(0x0d38ab35, 0xce7c42d4), TOBN(0x9fd493ef, 0x82feab10),
+ TOBN(0x46056b6d, 0x82111b45), TOBN(0xda11dae1, 0x73efc5c3),
+ TOBN(0xdc740278, 0x5545a7fb), TOBN(0xbdb2601c, 0x40d507e6),
+ TOBN(0x121dfeeb, 0x7066fa58), TOBN(0x214369a8, 0x39ae8c2a),
+ TOBN(0x195709cb, 0x06e0956c), TOBN(0x4c9d254f, 0x010cd34b),
+ TOBN(0xf51e13f7, 0x0471a532), TOBN(0xe19d6791, 0x1e73054d),
+ TOBN(0xf702a628, 0xdb5c7be3), TOBN(0xc7141218, 0xb24dde05),
+ TOBN(0xdc18233c, 0xf29b2e2e), TOBN(0x3a6bd1e8, 0x85342dba),
+ TOBN(0x3f747fa0, 0xb311898c), TOBN(0xe2a272e4, 0xcd0eac65),
+ TOBN(0x4bba5851, 0xf914d0bc), TOBN(0x7a1a9660, 0xc4a43ee3),
+ TOBN(0xe5a367ce, 0xa1c8cde9), TOBN(0x9d958ba9, 0x7271abe3),
+ TOBN(0xf3ff7eb6, 0x3d1615cd), TOBN(0xa2280dce, 0xf5ae20b0),
+ TOBN(0x56dba5c1, 0xcf640147), TOBN(0xea5a2e3d, 0x5e83d118),
+ TOBN(0x04cd6b6d, 0xda24c511), TOBN(0x1c0f4671, 0xe854d214),
+ TOBN(0x91a6b7a9, 0x69565381), TOBN(0xdc966240, 0xdecf1f5b),
+ TOBN(0x1b22d21c, 0xfcf5d009), TOBN(0x2a05f641, 0x9021dbd5),
+ TOBN(0x8c0ed566, 0xd4312483), TOBN(0x5179a95d, 0x643e216f),
+ TOBN(0xcc185fec, 0x17044493), TOBN(0xb3063339, 0x54991a21),
+ TOBN(0xd801ecdb, 0x0081a726), TOBN(0x0149b0c6, 0x4fa89bbb),
+ TOBN(0xafe9065a, 0x4391b6b9), TOBN(0xedc92786, 0xd633f3a3),
+ TOBN(0xe408c24a, 0xae6a8e13), TOBN(0x85833fde, 0x9f3897ab),
+ TOBN(0x43800e7e, 0xd81a0715), TOBN(0xde08e346, 0xb44ffc5f),
+ TOBN(0x7094184c, 0xcdeff2e0), TOBN(0x49f9387b, 0x165eaed1),
+ TOBN(0x635d6129, 0x777c468a), TOBN(0x8c0dcfd1, 0x538c2dd8),
+ TOBN(0xd6d9d9e3, 0x7a6a308b), TOBN(0x62375830, 0x4c2767d3),
+ TOBN(0x874a8bc6, 0xf38cbeb6), TOBN(0xd94d3f1a, 0xccb6fd9e),
+ TOBN(0x92a9735b, 0xba21f248), TOBN(0x272ad0e5, 0x6cd1efb0),
+ TOBN(0x7437b69c, 0x05b03284), TOBN(0xe7f04702, 0x6948c225),
+ TOBN(0x8a56c04a, 0xcba2ecec), TOBN(0x0c181270, 0xe3a73e41),
+ TOBN(0x6cb34e9d, 0x03e93725), TOBN(0xf77c8713, 0x496521a9),
+ TOBN(0x94569183, 0xfa7f9f90), TOBN(0xf2e7aa4c, 0x8c9707ad),
+ TOBN(0xced2c9ba, 0x26c1c9a3), TOBN(0x9109fe96, 0x40197507),
+ TOBN(0x9ae868a9, 0xe9adfe1c), TOBN(0x3984403d, 0x314e39bb),
+ TOBN(0xb5875720, 0xf2fe378f), TOBN(0x33f901e0, 0xba44a628),
+ TOBN(0xea1125fe, 0x3652438c), TOBN(0xae9ec4e6, 0x9dd1f20b),
+ TOBN(0x1e740d9e, 0xbebf7fbd), TOBN(0x6dbd3ddc, 0x42dbe79c),
+ TOBN(0x62082aec, 0xedd36776), TOBN(0xf612c478, 0xe9859039),
+ TOBN(0xa493b201, 0x032f7065), TOBN(0xebd4d8f2, 0x4ff9b211),
+ TOBN(0x3f23a0aa, 0xaac4cb32), TOBN(0xea3aadb7, 0x15ed4005),
+ TOBN(0xacf17ea4, 0xafa27e63), TOBN(0x56125c1a, 0xc11fd66c),
+ TOBN(0x266344a4, 0x3794f8dc), TOBN(0xdcca923a, 0x483c5c36),
+ TOBN(0x2d6b6bbf, 0x3f9d10a0), TOBN(0xb320c5ca, 0x81d9bdf3),
+ TOBN(0x620e28ff, 0x47b50a95), TOBN(0x933e3b01, 0xcef03371),
+ TOBN(0xf081bf85, 0x99100153), TOBN(0x183be9a0, 0xc3a8c8d6),
+ TOBN(0x4e3ddc5a, 0xd6bbe24d), TOBN(0xc6c74630, 0x53843795),
+ TOBN(0x78193dd7, 0x65ec2d4c), TOBN(0xb8df26cc, 0xcd3c89b2),
+ TOBN(0x98dbe399, 0x5a483f8d), TOBN(0x72d8a957, 0x7dd3313a),
+ TOBN(0x65087294, 0xab0bd375), TOBN(0xfcd89248, 0x7c259d16),
+ TOBN(0x8a9443d7, 0x7613aa81), TOBN(0x80100800, 0x85fe6584),
+ TOBN(0x70fc4dbc, 0x7fb10288), TOBN(0xf58280d3, 0xe86beee8),
+ TOBN(0x14fdd82f, 0x7c978c38), TOBN(0xdf1204c1, 0x0de44d7b),
+ TOBN(0xa08a1c84, 0x4160252f), TOBN(0x591554ca, 0xc17646a5),
+ TOBN(0x214a37d6, 0xa05bd525), TOBN(0x48d5f09b, 0x07957b3c),
+ TOBN(0x0247cdcb, 0xd7109bc9), TOBN(0x40f9e4bb, 0x30599ce7),
+ TOBN(0xc325fa03, 0xf46ad2ec), TOBN(0x00f766cf, 0xc3e3f9ee),
+ TOBN(0xab556668, 0xd43a4577), TOBN(0x68d30a61, 0x3ee03b93),
+ TOBN(0x7ddc81ea, 0x77b46a08), TOBN(0xcf5a6477, 0xc7480699),
+ TOBN(0x43a8cb34, 0x6633f683), TOBN(0x1b867e6b, 0x92363c60),
+ TOBN(0x43921114, 0x1f60558e), TOBN(0xcdbcdd63, 0x2f41450e),
+ TOBN(0x7fc04601, 0xcc630e8b), TOBN(0xea7c66d5, 0x97038b43),
+ TOBN(0x7259b8a5, 0x04e99fd8), TOBN(0x98a8dd12, 0x4785549a),
+ TOBN(0x0e459a7c, 0x840552e1), TOBN(0xcdfcf4d0, 0x4bb0909e),
+ TOBN(0x34a86db2, 0x53758da7), TOBN(0xe643bb83, 0xeac997e1),
+ TOBN(0x96400bd7, 0x530c5b7e), TOBN(0x9f97af87, 0xb41c8b52),
+ TOBN(0x34fc8820, 0xfbeee3f9), TOBN(0x93e53490, 0x49091afd),
+ TOBN(0x764b9be5, 0x9a31f35c), TOBN(0x71f37864, 0x57e3d924),
+ TOBN(0x02fb34e0, 0x943aa75e), TOBN(0xa18c9c58, 0xab8ff6e4),
+ TOBN(0x080f31b1, 0x33cf0d19), TOBN(0x5c9682db, 0x083518a7),
+ TOBN(0x873d4ca6, 0xb709c3de), TOBN(0x64a84262, 0x3575b8f0),
+ TOBN(0x6275da1f, 0x020154bb), TOBN(0x97678caa, 0xd17cf1ab),
+ TOBN(0x8779795f, 0x951a95c3), TOBN(0xdd35b163, 0x50fccc08),
+ TOBN(0x32709627, 0x33d8f031), TOBN(0x3c5ab10a, 0x498dd85c),
+ TOBN(0xb6c185c3, 0x41dca566), TOBN(0x7de7feda, 0xd8622aa3),
+ TOBN(0x99e84d92, 0x901b6dfb), TOBN(0x30a02b0e, 0x7c4ad288),
+ TOBN(0xc7c81daa, 0x2fd3cf36), TOBN(0xd1319547, 0xdf89e59f),
+ TOBN(0xb2be8184, 0xcd496733), TOBN(0xd5f449eb, 0x93d3412b),
+ TOBN(0x7ea41b1b, 0x25fe531d), TOBN(0xf9797432, 0x6a1d5646),
+ TOBN(0x86067f72, 0x2bde501a), TOBN(0xf91481c0, 0x0c85e89c),
+ TOBN(0xca8ee465, 0xf8b05bc6), TOBN(0x1844e1cf, 0x02e83cda),
+ TOBN(0xca82114a, 0xb4dbe33b), TOBN(0x0f9f8769, 0x4eabfde2),
+ TOBN(0x4936b1c0, 0x38b27fe2), TOBN(0x63b6359b, 0xaba402df),
+ TOBN(0x40c0ea2f, 0x656bdbab), TOBN(0x9c992a89, 0x6580c39c),
+ TOBN(0x600e8f15, 0x2a60aed1), TOBN(0xeb089ca4, 0xe0bf49df),
+ TOBN(0x9c233d7d, 0x2d42d99a), TOBN(0x648d3f95, 0x4c6bc2fa),
+ TOBN(0xdcc383a8, 0xe1add3f3), TOBN(0xf42c0c6a, 0x4f64a348),
+ TOBN(0x2abd176f, 0x0030dbdb), TOBN(0x4de501a3, 0x7d6c215e),
+ TOBN(0x4a107c1f, 0x4b9a64bc), TOBN(0xa77f0ad3, 0x2496cd59),
+ TOBN(0xfb78ac62, 0x7688dffb), TOBN(0x7025a2ca, 0x67937d8e),
+ TOBN(0xfde8b2d1, 0xd1a8f4e7), TOBN(0xf5b3da47, 0x7354927c),
+ TOBN(0xe48606a3, 0xd9205735), TOBN(0xac477cc6, 0xe177b917),
+ TOBN(0xfb1f73d2, 0xa883239a), TOBN(0xe12572f6, 0xcc8b8357),
+ TOBN(0x9d355e9c, 0xfb1f4f86), TOBN(0x89b795f8, 0xd9f3ec6e),
+ TOBN(0x27be56f1, 0xb54398dc), TOBN(0x1890efd7, 0x3fedeed5),
+ TOBN(0x62f77f1f, 0x9c6d0140), TOBN(0x7ef0e314, 0x596f0ee4),
+ TOBN(0x50ca6631, 0xcc61dab3), TOBN(0x4a39801d, 0xf4866e4f),
+ TOBN(0x66c8d032, 0xae363b39), TOBN(0x22c591e5, 0x2ead66aa),
+ TOBN(0x954ba308, 0xde02a53e), TOBN(0x2a6c060f, 0xd389f357),
+ TOBN(0xe6cfcde8, 0xfbf40b66), TOBN(0x8e02fc56, 0xc6340ce1),
+ TOBN(0xe4957795, 0x73adb4ba), TOBN(0x7b86122c, 0xa7b03805),
+ TOBN(0x63f83512, 0x0c8e6fa6), TOBN(0x83660ea0, 0x057d7804),
+ TOBN(0xbad79105, 0x21ba473c), TOBN(0xb6c50bee, 0xded5389d),
+ TOBN(0xee2caf4d, 0xaa7c9bc0), TOBN(0xd97b8de4, 0x8c4e98a7),
+ TOBN(0xa9f63e70, 0xab3bbddb), TOBN(0x3898aabf, 0x2597815a),
+ TOBN(0x7659af89, 0xac15b3d9), TOBN(0xedf7725b, 0x703ce784),
+ TOBN(0x25470fab, 0xe085116b), TOBN(0x04a43375, 0x87285310),
+ TOBN(0x4e39187e, 0xe2bfd52f), TOBN(0x36166b44, 0x7d9ebc74),
+ TOBN(0x92ad433c, 0xfd4b322c), TOBN(0x726aa817, 0xba79ab51),
+ TOBN(0xf96eacd8, 0xc1db15eb), TOBN(0xfaf71e91, 0x0476be63),
+ TOBN(0xdd69a640, 0x641fad98), TOBN(0xb7995918, 0x29622559),
+ TOBN(0x03c6daa5, 0xde4199dc), TOBN(0x92cadc97, 0xad545eb4),
+ TOBN(0x1028238b, 0x256534e4), TOBN(0x73e80ce6, 0x8595409a),
+ TOBN(0x690d4c66, 0xd05dc59b), TOBN(0xc95f7b8f, 0x981dee80),
+ TOBN(0xf4337014, 0xd856ac25), TOBN(0x441bd9dd, 0xac524dca),
+ TOBN(0x640b3d85, 0x5f0499f5), TOBN(0x39cf84a9, 0xd5fda182),
+ TOBN(0x04e7b055, 0xb2aa95a0), TOBN(0x29e33f0a, 0x0ddf1860),
+ TOBN(0x082e74b5, 0x423f6b43), TOBN(0x217edeb9, 0x0aaa2b0f),
+ TOBN(0x58b83f35, 0x83cbea55), TOBN(0xc485ee4d, 0xbc185d70),
+ TOBN(0x833ff03b, 0x1e5f6992), TOBN(0xb5b9b9cc, 0xcf0c0dd5),
+ TOBN(0x7caaee8e, 0x4e9e8a50), TOBN(0x462e907b, 0x6269dafd),
+ TOBN(0x6ed5cee9, 0xfbe791c6), TOBN(0x68ca3259, 0xed430790),
+ TOBN(0x2b72bdf2, 0x13b5ba88), TOBN(0x60294c8a, 0x35ef0ac4),
+ TOBN(0x9c3230ed, 0x19b99b08), TOBN(0x560fff17, 0x6c2589aa),
+ TOBN(0x552b8487, 0xd6770374), TOBN(0xa373202d, 0x9a56f685),
+ TOBN(0xd3e7f907, 0x45f175d9), TOBN(0x3c2f315f, 0xd080d810),
+ TOBN(0x1130e9dd, 0x7b9520e8), TOBN(0xc078f9e2, 0x0af037b5),
+ TOBN(0x38cd2ec7, 0x1e9c104c), TOBN(0x0f684368, 0xc472fe92),
+ TOBN(0xd3f1b5ed, 0x6247e7ef), TOBN(0xb32d33a9, 0x396dfe21),
+ TOBN(0x46f59cf4, 0x4a9aa2c2), TOBN(0x69cd5168, 0xff0f7e41),
+ TOBN(0x3f59da0f, 0x4b3234da), TOBN(0xcf0b0235, 0xb4579ebe),
+ TOBN(0x6d1cbb25, 0x6d2476c7), TOBN(0x4f0837e6, 0x9dc30f08),
+ TOBN(0x9a4075bb, 0x906f6e98), TOBN(0x253bb434, 0xc761e7d1),
+ TOBN(0xde2e645f, 0x6e73af10), TOBN(0xb89a4060, 0x0c5f131c),
+ TOBN(0xd12840c5, 0xb8cc037f), TOBN(0x3d093a5b, 0x7405bb47),
+ TOBN(0x6202c253, 0x206348b8), TOBN(0xbf5d57fc, 0xc55a3ca7),
+ TOBN(0x89f6c90c, 0x8c3bef48), TOBN(0x23ac7623, 0x5a0a960a),
+ TOBN(0xdfbd3d6b, 0x552b42ab), TOBN(0x3ef22458, 0x132061f6),
+ TOBN(0xd74e9bda, 0xc97e6516), TOBN(0x88779360, 0xc230f49e),
+ TOBN(0xa6ec1de3, 0x1e74ea49), TOBN(0x581dcee5, 0x3fb645a2),
+ TOBN(0xbaef2391, 0x8f483f14), TOBN(0x6d2dddfc, 0xd137d13b),
+ TOBN(0x54cde50e, 0xd2743a42), TOBN(0x89a34fc5, 0xe4d97e67),
+ TOBN(0x13f1f5b3, 0x12e08ce5), TOBN(0xa80540b8, 0xa7f0b2ca),
+ TOBN(0x854bcf77, 0x01982805), TOBN(0xb8653ffd, 0x233bea04),
+ TOBN(0x8e7b8787, 0x02b0b4c9), TOBN(0x2675261f, 0x9acb170a),
+ TOBN(0x061a9d90, 0x930c14e5), TOBN(0xb59b30e0, 0xdef0abea),
+ TOBN(0x1dc19ea6, 0x0200ec7d), TOBN(0xb6f4a3f9, 0x0bce132b),
+ TOBN(0xb8d5de90, 0xf13e27e0), TOBN(0xbaee5ef0, 0x1fade16f),
+ TOBN(0x6f406aaa, 0xe4c6cf38), TOBN(0xab4cfe06, 0xd1369815),
+ TOBN(0x0dcffe87, 0xefd550c6), TOBN(0x9d4f59c7, 0x75ff7d39),
+ TOBN(0xb02553b1, 0x51deb6ad), TOBN(0x812399a4, 0xb1877749),
+ TOBN(0xce90f71f, 0xca6006e1), TOBN(0xc32363a6, 0xb02b6e77),
+ TOBN(0x02284fbe, 0xdc36c64d), TOBN(0x86c81e31, 0xa7e1ae61),
+ TOBN(0x2576c7e5, 0xb909d94a), TOBN(0x8b6f7d02, 0x818b2bb0),
+ TOBN(0xeca3ed07, 0x56faa38a), TOBN(0xa3790e6c, 0x9305bb54),
+ TOBN(0xd784eeda, 0x7bc73061), TOBN(0xbd56d369, 0x6dd50614),
+ TOBN(0xd6575949, 0x229a8aa9), TOBN(0xdcca8f47, 0x4595ec28),
+ TOBN(0x814305c1, 0x06ab4fe6), TOBN(0xc8c39768, 0x24f43f16),
+ TOBN(0xe2a45f36, 0x523f2b36), TOBN(0x995c6493, 0x920d93bb),
+ TOBN(0xf8afdab7, 0x90f1632b), TOBN(0x79ebbecd, 0x1c295954),
+ TOBN(0xc7bb3ddb, 0x79592f48), TOBN(0x67216a7b, 0x5f88e998),
+ TOBN(0xd91f098b, 0xbc01193e), TOBN(0xf7d928a5, 0xb1db83fc),
+ TOBN(0x55e38417, 0xe991f600), TOBN(0x2a91113e, 0x2981a934),
+ TOBN(0xcbc9d648, 0x06b13bde), TOBN(0xb011b6ac, 0x0755ff44),
+ TOBN(0x6f4cb518, 0x045ec613), TOBN(0x522d2d31, 0xc2f5930a),
+ TOBN(0x5acae1af, 0x382e65de), TOBN(0x57643067, 0x27bc966f),
+ TOBN(0x5e12705d, 0x1c7193f0), TOBN(0xf0f32f47, 0x3be8858e),
+ TOBN(0x785c3d7d, 0x96c6dfc7), TOBN(0xd75b4a20, 0xbf31795d),
+ TOBN(0x91acf17b, 0x342659d4), TOBN(0xe596ea34, 0x44f0378f),
+ TOBN(0x4515708f, 0xce52129d), TOBN(0x17387e1e, 0x79f2f585),
+ TOBN(0x72cfd2e9, 0x49dee168), TOBN(0x1ae05223, 0x3e2af239),
+ TOBN(0x009e75be, 0x1d94066a), TOBN(0x6cca31c7, 0x38abf413),
+ TOBN(0xb50bd61d, 0x9bc49908), TOBN(0x4a9b4a8c, 0xf5e2bc1e),
+ TOBN(0xeb6cc5f7, 0x946f83ac), TOBN(0x27da93fc, 0xebffab28),
+ TOBN(0xea314c96, 0x4821c8c5), TOBN(0x8de49ded, 0xa83c15f4),
+ TOBN(0x7a64cf20, 0x7af33004), TOBN(0x45f1bfeb, 0xc9627e10),
+ TOBN(0x878b0626, 0x54b9df60), TOBN(0x5e4fdc3c, 0xa95c0b33),
+ TOBN(0xe54a37ca, 0xc2035d8e), TOBN(0x9087cda9, 0x80f20b8c),
+ TOBN(0x36f61c23, 0x8319ade4), TOBN(0x766f287a, 0xde8cfdf8),
+ TOBN(0x48821948, 0x346f3705), TOBN(0x49a7b853, 0x16e4f4a2),
+ TOBN(0xb9b3f8a7, 0x5cedadfd), TOBN(0x8f562815, 0x8db2a815),
+ TOBN(0xc0b7d554, 0x01f68f95), TOBN(0x12971e27, 0x688a208e),
+ TOBN(0xc9f8b696, 0xd0ff34fc), TOBN(0x20824de2, 0x1222718c),
+ TOBN(0x7213cf9f, 0x0c95284d), TOBN(0xe2ad741b, 0xdc158240),
+ TOBN(0x0ee3a6df, 0x54043ccf), TOBN(0x16ff479b, 0xd84412b3),
+ TOBN(0xf6c74ee0, 0xdfc98af0), TOBN(0xa78a169f, 0x52fcd2fb),
+ TOBN(0xd8ae8746, 0x99c930e9), TOBN(0x1d33e858, 0x49e117a5),
+ TOBN(0x7581fcb4, 0x6624759f), TOBN(0xde50644f, 0x5bedc01d),
+ TOBN(0xbeec5d00, 0xcaf3155e), TOBN(0x672d66ac, 0xbc73e75f),
+ TOBN(0x86b9d8c6, 0x270b01db), TOBN(0xd249ef83, 0x50f55b79),
+ TOBN(0x6131d6d4, 0x73978fe3), TOBN(0xcc4e4542, 0x754b00a1),
+ TOBN(0x4e05df05, 0x57dfcfe9), TOBN(0x94b29cdd, 0x51ef6bf0),
+ TOBN(0xe4530cff, 0x9bc7edf2), TOBN(0x8ac236fd, 0xd3da65f3),
+ TOBN(0x0faf7d5f, 0xc8eb0b48), TOBN(0x4d2de14c, 0x660eb039),
+ TOBN(0xc006bba7, 0x60430e54), TOBN(0x10a2d0d6, 0xda3289ab),
+ TOBN(0x9c037a5d, 0xd7979c59), TOBN(0x04d1f3d3, 0xa116d944),
+ TOBN(0x9ff22473, 0x8a0983cd), TOBN(0x28e25b38, 0xc883cabb),
+ TOBN(0xe968dba5, 0x47a58995), TOBN(0x2c80b505, 0x774eebdf),
+ TOBN(0xee763b71, 0x4a953beb), TOBN(0x502e223f, 0x1642e7f6),
+ TOBN(0x6fe4b641, 0x61d5e722), TOBN(0x9d37c5b0, 0xdbef5316),
+ TOBN(0x0115ed70, 0xf8330bc7), TOBN(0x139850e6, 0x75a72789),
+ TOBN(0x27d7faec, 0xffceccc2), TOBN(0x3016a860, 0x4fd9f7f6),
+ TOBN(0xc492ec64, 0x4cd8f64c), TOBN(0x58a2d790, 0x279d7b51),
+ TOBN(0x0ced1fc5, 0x1fc75256), TOBN(0x3e658aed, 0x8f433017),
+ TOBN(0x0b61942e, 0x05da59eb), TOBN(0xba3d60a3, 0x0ddc3722),
+ TOBN(0x7c311cd1, 0x742e7f87), TOBN(0x6473ffee, 0xf6b01b6e),}
+ ,
+ {TOBN(0x8303604f, 0x692ac542), TOBN(0xf079ffe1, 0x227b91d3),
+ TOBN(0x19f63e63, 0x15aaf9bd), TOBN(0xf99ee565, 0xf1f344fb),
+ TOBN(0x8a1d661f, 0xd6219199), TOBN(0x8c883bc6, 0xd48ce41c),
+ TOBN(0x1065118f, 0x3c74d904), TOBN(0x713889ee, 0x0faf8b1b),
+ TOBN(0x972b3f8f, 0x81a1b3be), TOBN(0x4f3ce145, 0xce2764a0),
+ TOBN(0xe2d0f1cc, 0x28c4f5f7), TOBN(0xdeee0c0d, 0xc7f3985b),
+ TOBN(0x7df4adc0, 0xd39e25c3), TOBN(0x40619820, 0xc467a080),
+ TOBN(0x440ebc93, 0x61cf5a58), TOBN(0x527729a6, 0x422ad600),
+ TOBN(0xca6c0937, 0xb1b76ba6), TOBN(0x1a2eab85, 0x4d2026dc),
+ TOBN(0xb1715e15, 0x19d9ae0a), TOBN(0xf1ad9199, 0xbac4a026),
+ TOBN(0x35b3dfb8, 0x07ea7b0e), TOBN(0xedf5496f, 0x3ed9eb89),
+ TOBN(0x8932e5ff, 0x2d6d08ab), TOBN(0xf314874e, 0x25bd2731),
+ TOBN(0xefb26a75, 0x3f73f449), TOBN(0x1d1c94f8, 0x8d44fc79),
+ TOBN(0x49f0fbc5, 0x3bc0dc4d), TOBN(0xb747ea0b, 0x3698a0d0),
+ TOBN(0x5218c3fe, 0x228d291e), TOBN(0x35b804b5, 0x43c129d6),
+ TOBN(0xfac859b8, 0xd1acc516), TOBN(0x6c10697d, 0x95d6e668),
+ TOBN(0xc38e438f, 0x0876fd4e), TOBN(0x45f0c307, 0x83d2f383),
+ TOBN(0x203cc2ec, 0xb10934cb), TOBN(0x6a8f2439, 0x2c9d46ee),
+ TOBN(0xf16b431b, 0x65ccde7b), TOBN(0x41e2cd18, 0x27e76a6f),
+ TOBN(0xb9c8cf8f, 0x4e3484d7), TOBN(0x64426efd, 0x8315244a),
+ TOBN(0x1c0a8e44, 0xfc94dea3), TOBN(0x34c8cdbf, 0xdad6a0b0),
+ TOBN(0x919c3840, 0x04113cef), TOBN(0xfd32fba4, 0x15490ffa),
+ TOBN(0x58d190f6, 0x795dcfb7), TOBN(0xfef01b03, 0x83588baf),
+ TOBN(0x9e6d1d63, 0xca1fc1c0), TOBN(0x53173f96, 0xf0a41ac9),
+ TOBN(0x2b1d402a, 0xba16f73b), TOBN(0x2fb31014, 0x8cf9b9fc),
+ TOBN(0x2d51e60e, 0x446ef7bf), TOBN(0xc731021b, 0xb91e1745),
+ TOBN(0x9d3b4724, 0x4fee99d4), TOBN(0x4bca48b6, 0xfac5c1ea),
+ TOBN(0x70f5f514, 0xbbea9af7), TOBN(0x751f55a5, 0x974c283a),
+ TOBN(0x6e30251a, 0xcb452fdb), TOBN(0x31ee6965, 0x50f30650),
+ TOBN(0xb0b3e508, 0x933548d9), TOBN(0xb8949a4f, 0xf4b0ef5b),
+ TOBN(0x208b8326, 0x3c88f3bd), TOBN(0xab147c30, 0xdb1d9989),
+ TOBN(0xed6515fd, 0x44d4df03), TOBN(0x17a12f75, 0xe72eb0c5),
+ TOBN(0x3b59796d, 0x36cf69db), TOBN(0x1219eee9, 0x56670c18),
+ TOBN(0xfe3341f7, 0x7a070d8e), TOBN(0x9b70130b, 0xa327f90c),
+ TOBN(0x36a32462, 0x0ae18e0e), TOBN(0x2021a623, 0x46c0a638),
+ TOBN(0x251b5817, 0xc62eb0d4), TOBN(0x87bfbcdf, 0x4c762293),
+ TOBN(0xf78ab505, 0xcdd61d64), TOBN(0x8c7a53fc, 0xc8c18857),
+ TOBN(0xa653ce6f, 0x16147515), TOBN(0x9c923aa5, 0xea7d52d5),
+ TOBN(0xc24709cb, 0x5c18871f), TOBN(0x7d53bec8, 0x73b3cc74),
+ TOBN(0x59264aff, 0xfdd1d4c4), TOBN(0x5555917e, 0x240da582),
+ TOBN(0xcae8bbda, 0x548f5a0e), TOBN(0x1910eaba, 0x3bbfbbe1),
+ TOBN(0xae579685, 0x7677afc3), TOBN(0x49ea61f1, 0x73ff0b5c),
+ TOBN(0x78655478, 0x4f7c3922), TOBN(0x95d337cd, 0x20c68eef),
+ TOBN(0x68f1e1e5, 0xdf779ab9), TOBN(0x14b491b0, 0xb5cf69a8),
+ TOBN(0x7a6cbbe0, 0x28e3fe89), TOBN(0xe7e1fee4, 0xc5aac0eb),
+ TOBN(0x7f47eda5, 0x697e5140), TOBN(0x4f450137, 0xb454921f),
+ TOBN(0xdb625f84, 0x95cd8185), TOBN(0x74be0ba1, 0xcdb2e583),
+ TOBN(0xaee4fd7c, 0xdd5e6de4), TOBN(0x4251437d, 0xe8101739),
+ TOBN(0x686d72a0, 0xac620366), TOBN(0x4be3fb9c, 0xb6d59344),
+ TOBN(0x6e8b44e7, 0xa1eb75b9), TOBN(0x84e39da3, 0x91a5c10c),
+ TOBN(0x37cc1490, 0xb38f0409), TOBN(0x02951943, 0x2c2ade82),
+ TOBN(0x9b688783, 0x1190a2d8), TOBN(0x25627d14, 0x231182ba),
+ TOBN(0x6eb550aa, 0x658a6d87), TOBN(0x1405aaa7, 0xcf9c7325),
+ TOBN(0xd147142e, 0x5c8748c9), TOBN(0x7f637e4f, 0x53ede0e0),
+ TOBN(0xf8ca2776, 0x14ffad2c), TOBN(0xe58fb1bd, 0xbafb6791),
+ TOBN(0x17158c23, 0xbf8f93fc), TOBN(0x7f15b373, 0x0a4a4655),
+ TOBN(0x39d4add2, 0xd842ca72), TOBN(0xa71e4391, 0x3ed96305),
+ TOBN(0x5bb09cbe, 0x6700be14), TOBN(0x68d69d54, 0xd8befcf6),
+ TOBN(0xa45f5367, 0x37183bcf), TOBN(0x7152b7bb, 0x3370dff7),
+ TOBN(0xcf887baa, 0xbf12525b), TOBN(0xe7ac7bdd, 0xd6d1e3cd),
+ TOBN(0x25914f78, 0x81fdad90), TOBN(0xcf638f56, 0x0d2cf6ab),
+ TOBN(0xb90bc03f, 0xcc054de5), TOBN(0x932811a7, 0x18b06350),
+ TOBN(0x2f00b330, 0x9bbd11ff), TOBN(0x76108a6f, 0xb4044974),
+ TOBN(0x801bb9e0, 0xa851d266), TOBN(0x0dd099be, 0xbf8990c1),
+ TOBN(0x58c5aaaa, 0xabe32986), TOBN(0x0fe9dd2a, 0x50d59c27),
+ TOBN(0x84951ff4, 0x8d307305), TOBN(0x6c23f829, 0x86529b78),
+ TOBN(0x50bb2218, 0x0b136a79), TOBN(0x7e2174de, 0x77a20996),
+ TOBN(0x6f00a4b9, 0xc0bb4da6), TOBN(0x89a25a17, 0xefdde8da),
+ TOBN(0xf728a27e, 0xc11ee01d), TOBN(0xf900553a, 0xe5f10dfb),
+ TOBN(0x189a83c8, 0x02ec893c), TOBN(0x3ca5bdc1, 0x23f66d77),
+ TOBN(0x98781537, 0x97eada9f), TOBN(0x59c50ab3, 0x10256230),
+ TOBN(0x346042d9, 0x323c69b3), TOBN(0x1b715a6d, 0x2c460449),
+ TOBN(0xa41dd476, 0x6ae06e0b), TOBN(0xcdd7888e, 0x9d42e25f),
+ TOBN(0x0f395f74, 0x56b25a20), TOBN(0xeadfe0ae, 0x8700e27e),
+ TOBN(0xb09d52a9, 0x69950093), TOBN(0x3525d9cb, 0x327f8d40),
+ TOBN(0xb8235a94, 0x67df886a), TOBN(0x77e4b0dd, 0x035faec2),
+ TOBN(0x115eb20a, 0x517d7061), TOBN(0x77fe3433, 0x6c2df683),
+ TOBN(0x6870ddc7, 0xcdc6fc67), TOBN(0xb1610588, 0x0b87de83),
+ TOBN(0x343584ca, 0xd9c4ddbe), TOBN(0xb3164f1c, 0x3d754be2),
+ TOBN(0x0731ed3a, 0xc1e6c894), TOBN(0x26327dec, 0x4f6b904c),
+ TOBN(0x9d49c6de, 0x97b5cd32), TOBN(0x40835dae, 0xb5eceecd),
+ TOBN(0xc66350ed, 0xd9ded7fe), TOBN(0x8aeebb5c, 0x7a678804),
+ TOBN(0x51d42fb7, 0x5b8ee9ec), TOBN(0xd7a17bdd, 0x8e3ca118),
+ TOBN(0x40d7511a, 0x2ef4400e), TOBN(0xc48990ac, 0x875a66f4),
+ TOBN(0x8de07d2a, 0x2199e347), TOBN(0xbee75556, 0x2a39e051),
+ TOBN(0x56918786, 0x916e51dc), TOBN(0xeb191313, 0x4a2d89ec),
+ TOBN(0x6679610d, 0x37d341ed), TOBN(0x434fbb41, 0x56d51c2b),
+ TOBN(0xe54b7ee7, 0xd7492dba), TOBN(0xaa33a79a, 0x59021493),
+ TOBN(0x49fc5054, 0xe4bd6d3d), TOBN(0x09540f04, 0x5ab551d0),
+ TOBN(0x8acc9085, 0x4942d3a6), TOBN(0x231af02f, 0x2d28323b),
+ TOBN(0x93458cac, 0x0992c163), TOBN(0x1fef8e71, 0x888e3bb4),
+ TOBN(0x27578da5, 0xbe8c268c), TOBN(0xcc8be792, 0xe805ec00),
+ TOBN(0x29267bae, 0xc61c3855), TOBN(0xebff429d, 0x58c1fd3b),
+ TOBN(0x22d886c0, 0x8c0b93b8), TOBN(0xca5e00b2, 0x2ddb8953),
+ TOBN(0xcf330117, 0xc3fed8b7), TOBN(0xd49ac6fa, 0x819c01f6),
+ TOBN(0x6ddaa6bd, 0x3c0fbd54), TOBN(0x91743068, 0x8049a2cf),
+ TOBN(0xd67f981e, 0xaff2ef81), TOBN(0xc3654d35, 0x2818ae80),
+ TOBN(0x81d05044, 0x1b2aa892), TOBN(0x2db067bf, 0x3d099328),
+ TOBN(0xe7c79e86, 0x703dcc97), TOBN(0xe66f9b37, 0xe133e215),
+ TOBN(0xcdf119a6, 0xe39a7a5c), TOBN(0x47c60de3, 0x876f1b61),
+ TOBN(0x6e405939, 0xd860f1b2), TOBN(0x3e9a1dbc, 0xf5ed4d4a),
+ TOBN(0x3f23619e, 0xc9b6bcbd), TOBN(0x5ee790cf, 0x734e4497),
+ TOBN(0xf0a834b1, 0x5bdaf9bb), TOBN(0x02cedda7, 0x4ca295f0),
+ TOBN(0x4619aa2b, 0xcb8e378c), TOBN(0xe5613244, 0xcc987ea4),
+ TOBN(0x0bc022cc, 0x76b23a50), TOBN(0x4a2793ad, 0x0a6c21ce),
+ TOBN(0x38328780, 0x89cac3f5), TOBN(0x29176f1b, 0xcba26d56),
+ TOBN(0x06296187, 0x4f6f59eb), TOBN(0x86e9bca9, 0x8bdc658e),
+ TOBN(0x2ca9c4d3, 0x57e30402), TOBN(0x5438b216, 0x516a09bb),
+ TOBN(0x0a6a063c, 0x7672765a), TOBN(0x37a3ce64, 0x0547b9bf),
+ TOBN(0x42c099c8, 0x98b1a633), TOBN(0xb5ab800d, 0x05ee6961),
+ TOBN(0xf1963f59, 0x11a5acd6), TOBN(0xbaee6157, 0x46201063),
+ TOBN(0x36d9a649, 0xa596210a), TOBN(0xaed04363, 0x1ba7138c),
+ TOBN(0xcf817d1c, 0xa4a82b76), TOBN(0x5586960e, 0xf3806be9),
+ TOBN(0x7ab67c89, 0x09dc6bb5), TOBN(0x52ace7a0, 0x114fe7eb),
+ TOBN(0xcd987618, 0xcbbc9b70), TOBN(0x4f06fd5a, 0x604ca5e1),
+ TOBN(0x90af14ca, 0x6dbde133), TOBN(0x1afe4322, 0x948a3264),
+ TOBN(0xa70d2ca6, 0xc44b2c6c), TOBN(0xab726799, 0x0ef87dfe),
+ TOBN(0x310f64dc, 0x2e696377), TOBN(0x49b42e68, 0x4c8126a0),
+ TOBN(0x0ea444c3, 0xcea0b176), TOBN(0x53a8ddf7, 0xcb269182),
+ TOBN(0xf3e674eb, 0xbbba9dcb), TOBN(0x0d2878a8, 0xd8669d33),
+ TOBN(0x04b935d5, 0xd019b6a3), TOBN(0xbb5cf88e, 0x406f1e46),
+ TOBN(0xa1912d16, 0x5b57c111), TOBN(0x9803fc21, 0x19ebfd78),
+ TOBN(0x4f231c9e, 0xc07764a9), TOBN(0xd93286ee, 0xb75bd055),
+ TOBN(0x83a9457d, 0x8ee6c9de), TOBN(0x04695915, 0x6087ec90),
+ TOBN(0x14c6dd8a, 0x58d6cd46), TOBN(0x9cb633b5, 0x8e6634d2),
+ TOBN(0xc1305047, 0xf81bc328), TOBN(0x12ede0e2, 0x26a177e5),
+ TOBN(0x332cca62, 0x065a6f4f), TOBN(0xc3a47ecd, 0x67be487b),
+ TOBN(0x741eb187, 0x0f47ed1c), TOBN(0x99e66e58, 0xe7598b14),
+ TOBN(0x6f0544ca, 0x63d0ff12), TOBN(0xe5efc784, 0xb610a05f),
+ TOBN(0xf72917b1, 0x7cad7b47), TOBN(0x3ff6ea20, 0xf2cac0c0),
+ TOBN(0xcc23791b, 0xf21db8b7), TOBN(0x7dac70b1, 0xd7d93565),
+ TOBN(0x682cda1d, 0x694bdaad), TOBN(0xeb88bb8c, 0x1023516d),
+ TOBN(0xc4c634b4, 0xdfdbeb1b), TOBN(0x22f5ca72, 0xb4ee4dea),
+ TOBN(0x1045a368, 0xe6524821), TOBN(0xed9e8a3f, 0x052b18b2),
+ TOBN(0x9b7f2cb1, 0xb961f49a), TOBN(0x7fee2ec1, 0x7b009670),
+ TOBN(0x350d8754, 0x22507a6d), TOBN(0x561bd711, 0x4db55f1d),
+ TOBN(0x4c189ccc, 0x320bbcaf), TOBN(0x568434cf, 0xdf1de48c),
+ TOBN(0x6af1b00e, 0x0fa8f128), TOBN(0xf0ba9d02, 0x8907583c),
+ TOBN(0x735a4004, 0x32ff9f60), TOBN(0x3dd8e4b6, 0xc25dcf33),
+ TOBN(0xf2230f16, 0x42c74cef), TOBN(0xd8117623, 0x013fa8ad),
+ TOBN(0x36822876, 0xf51fe76e), TOBN(0x8a6811cc, 0x11d62589),
+ TOBN(0xc3fc7e65, 0x46225718), TOBN(0xb7df2c9f, 0xc82fdbcd),
+ TOBN(0x3b1d4e52, 0xdd7b205b), TOBN(0xb6959478, 0x47a2e414),
+ TOBN(0x05e4d793, 0xefa91148), TOBN(0xb47ed446, 0xfd2e9675),
+ TOBN(0x1a7098b9, 0x04c9d9bf), TOBN(0x661e2881, 0x1b793048),
+ TOBN(0xb1a16966, 0xb01ee461), TOBN(0xbc521308, 0x2954746f),
+ TOBN(0xc909a0fc, 0x2477de50), TOBN(0xd80bb41c, 0x7dbd51ef),
+ TOBN(0xa85be7ec, 0x53294905), TOBN(0x6d465b18, 0x83958f97),
+ TOBN(0x16f6f330, 0xfb6840fd), TOBN(0xfaaeb214, 0x3401e6c8),
+ TOBN(0xaf83d30f, 0xccb5b4f8), TOBN(0x22885739, 0x266dec4b),
+ TOBN(0x51b4367c, 0x7bc467df), TOBN(0x926562e3, 0xd842d27a),
+ TOBN(0xdfcb6614, 0x0fea14a6), TOBN(0xeb394dae, 0xf2734cd9),
+ TOBN(0x3eeae5d2, 0x11c0be98), TOBN(0xb1e6ed11, 0x814e8165),
+ TOBN(0x191086bc, 0xe52bce1c), TOBN(0x14b74cc6, 0xa75a04da),
+ TOBN(0x63cf1186, 0x8c060985), TOBN(0x071047de, 0x2dbd7f7c),
+ TOBN(0x4e433b8b, 0xce0942ca), TOBN(0xecbac447, 0xd8fec61d),
+ TOBN(0x8f0ed0e2, 0xebf3232f), TOBN(0xfff80f9e, 0xc52a2edd),
+ TOBN(0xad9ab433, 0x75b55fdb), TOBN(0x73ca7820, 0xe42e0c11),
+ TOBN(0x6dace0a0, 0xe6251b46), TOBN(0x89bc6b5c, 0x4c0d932d),
+ TOBN(0x3438cd77, 0x095da19a), TOBN(0x2f24a939, 0x8d48bdfb),
+ TOBN(0x99b47e46, 0x766561b7), TOBN(0x736600e6, 0x0ed0322a),
+ TOBN(0x06a47cb1, 0x638e1865), TOBN(0x927c1c2d, 0xcb136000),
+ TOBN(0x29542337, 0x0cc5df69), TOBN(0x99b37c02, 0x09d649a9),
+ TOBN(0xc5f0043c, 0x6aefdb27), TOBN(0x6cdd9987, 0x1be95c27),
+ TOBN(0x69850931, 0x390420d2), TOBN(0x299c40ac, 0x0983efa4),
+ TOBN(0x3a05e778, 0xaf39aead), TOBN(0x84274408, 0x43a45193),
+ TOBN(0x6bcd0fb9, 0x91a711a0), TOBN(0x461592c8, 0x9f52ab17),
+ TOBN(0xb49302b4, 0xda3c6ed6), TOBN(0xc51fddc7, 0x330d7067),
+ TOBN(0x94babeb6, 0xda50d531), TOBN(0x521b840d, 0xa6a7b9da),
+ TOBN(0x5305151e, 0x404bdc89), TOBN(0x1bcde201, 0xd0d07449),
+ TOBN(0xf427a78b, 0x3b76a59a), TOBN(0xf84841ce, 0x07791a1b),
+ TOBN(0xebd314be, 0xbf91ed1c), TOBN(0x8e61d34c, 0xbf172943),
+ TOBN(0x1d5dc451, 0x5541b892), TOBN(0xb186ee41, 0xfc9d9e54),
+ TOBN(0x9d9f345e, 0xd5bf610d), TOBN(0x3e7ba65d, 0xf6acca9f),
+ TOBN(0x9dda787a, 0xa8369486), TOBN(0x09f9dab7, 0x8eb5ba53),
+ TOBN(0x5afb2033, 0xd6481bc3), TOBN(0x76f4ce30, 0xafa62104),
+ TOBN(0xa8fa00cf, 0xf4f066b5), TOBN(0x89ab5143, 0x461dafc2),
+ TOBN(0x44339ed7, 0xa3389998), TOBN(0x2ff862f1, 0xbc214903),
+ TOBN(0x2c88f985, 0xb05556e3), TOBN(0xcd96058e, 0x3467081e),
+ TOBN(0x7d6a4176, 0xedc637ea), TOBN(0xe1743d09, 0x36a5acdc),
+ TOBN(0x66fd72e2, 0x7eb37726), TOBN(0xf7fa264e, 0x1481a037),
+ TOBN(0x9fbd3bde, 0x45f4aa79), TOBN(0xed1e0147, 0x767c3e22),
+ TOBN(0x7621f979, 0x82e7abe2), TOBN(0x19eedc72, 0x45f633f8),
+ TOBN(0xe69b155e, 0x6137bf3a), TOBN(0xa0ad13ce, 0x414ee94e),
+ TOBN(0x93e3d524, 0x1c0e651a), TOBN(0xab1a6e2a, 0x02ce227e),
+ TOBN(0xe7af1797, 0x4ab27eca), TOBN(0x245446de, 0xbd444f39),
+ TOBN(0x59e22a21, 0x56c07613), TOBN(0x43deafce, 0xf4275498),
+ TOBN(0x10834ccb, 0x67fd0946), TOBN(0xa75841e5, 0x47406edf),
+ TOBN(0xebd6a677, 0x7b0ac93d), TOBN(0xa6e37b0d, 0x78f5e0d7),
+ TOBN(0x2516c096, 0x76f5492b), TOBN(0x1e4bf888, 0x9ac05f3a),
+ TOBN(0xcdb42ce0, 0x4df0ba2b), TOBN(0x935d5cfd, 0x5062341b),
+ TOBN(0x8a303333, 0x82acac20), TOBN(0x429438c4, 0x5198b00e),
+ TOBN(0x1d083bc9, 0x049d33fa), TOBN(0x58b82dda, 0x946f67ff),
+ TOBN(0xac3e2db8, 0x67a1d6a3), TOBN(0x62e6bead, 0x1798aac8),
+ TOBN(0xfc85980f, 0xde46c58c), TOBN(0xa7f69379, 0x69c8d7be),
+ TOBN(0x23557927, 0x837b35ec), TOBN(0x06a933d8, 0xe0790c0c),
+ TOBN(0x827c0e9b, 0x077ff55d), TOBN(0x53977798, 0xbb26e680),
+ TOBN(0x59530874, 0x1d9cb54f), TOBN(0xcca3f449, 0x4aac53ef),
+ TOBN(0x11dc5c87, 0xa07eda0f), TOBN(0xc138bccf, 0xfd6400c8),
+ TOBN(0x549680d3, 0x13e5da72), TOBN(0xc93eed82, 0x4540617e),
+ TOBN(0xfd3db157, 0x4d0b75c0), TOBN(0x9716eb42, 0x6386075b),
+ TOBN(0x0639605c, 0x817b2c16), TOBN(0x09915109, 0xf1e4f201),
+ TOBN(0x35c9a928, 0x5cca6c3b), TOBN(0xb25f7d1a, 0x3505c900),
+ TOBN(0xeb9f7d20, 0x630480c4), TOBN(0xc3c7b8c6, 0x2a1a501c),
+ TOBN(0x3f99183c, 0x5a1f8e24), TOBN(0xfdb118fa, 0x9dd255f0),
+ TOBN(0xb9b18b90, 0xc27f62a6), TOBN(0xe8f732f7, 0x396ec191),
+ TOBN(0x524a2d91, 0x0be786ab), TOBN(0x5d32adef, 0x0ac5a0f5),
+ TOBN(0x9b53d4d6, 0x9725f694), TOBN(0x032a76c6, 0x0510ba89),
+ TOBN(0x840391a3, 0xebeb1544), TOBN(0x44b7b88c, 0x3ed73ac3),
+ TOBN(0xd24bae7a, 0x256cb8b3), TOBN(0x7ceb151a, 0xe394cb12),
+ TOBN(0xbd6b66d0, 0x5bc1e6a8), TOBN(0xec70cecb, 0x090f07bf),
+ TOBN(0x270644ed, 0x7d937589), TOBN(0xee9e1a3d, 0x5f1dccfe),
+ TOBN(0xb0d40a84, 0x745b98d2), TOBN(0xda429a21, 0x2556ed40),
+ TOBN(0xf676eced, 0x85148cb9), TOBN(0x5a22d40c, 0xded18936),
+ TOBN(0x3bc4b9e5, 0x70e8a4ce), TOBN(0xbfd1445b, 0x9eae0379),
+ TOBN(0xf23f2c0c, 0x1a0bd47e), TOBN(0xa9c0bb31, 0xe1845531),
+ TOBN(0x9ddc4d60, 0x0a4c3f6b), TOBN(0xbdfaad79, 0x2c15ef44),
+ TOBN(0xce55a236, 0x7f484acc), TOBN(0x08653ca7, 0x055b1f15),
+ TOBN(0x2efa8724, 0x538873a3), TOBN(0x09299e5d, 0xace1c7e7),
+ TOBN(0x07afab66, 0xade332ba), TOBN(0x9be1fdf6, 0x92dd71b7),
+ TOBN(0xa49b5d59, 0x5758b11c), TOBN(0x0b852893, 0xc8654f40),
+ TOBN(0xb63ef6f4, 0x52379447), TOBN(0xd4957d29, 0x105e690c),
+ TOBN(0x7d484363, 0x646559b0), TOBN(0xf4a8273c, 0x49788a8e),
+ TOBN(0xee406cb8, 0x34ce54a9), TOBN(0x1e1c260f, 0xf86fda9b),
+ TOBN(0xe150e228, 0xcf6a4a81), TOBN(0x1fa3b6a3, 0x1b488772),
+ TOBN(0x1e6ff110, 0xc5a9c15b), TOBN(0xc6133b91, 0x8ad6aa47),
+ TOBN(0x8ac5d55c, 0x9dffa978), TOBN(0xba1d1c1d, 0x5f3965f2),
+ TOBN(0xf969f4e0, 0x7732b52f), TOBN(0xfceecdb5, 0xa5172a07),
+ TOBN(0xb0120a5f, 0x10f2b8f5), TOBN(0xc83a6cdf, 0x5c4c2f63),
+ TOBN(0x4d47a491, 0xf8f9c213), TOBN(0xd9e1cce5, 0xd3f1bbd5),
+ TOBN(0x0d91bc7c, 0xaba7e372), TOBN(0xfcdc74c8, 0xdfd1a2db),
+ TOBN(0x05efa800, 0x374618e5), TOBN(0x11216969, 0x15a7925e),
+ TOBN(0xd4c89823, 0xf6021c5d), TOBN(0x880d5e84, 0xeff14423),
+ TOBN(0x6523bc5a, 0x6dcd1396), TOBN(0xd1acfdfc, 0x113c978b),
+ TOBN(0xb0c164e8, 0xbbb66840), TOBN(0xf7f4301e, 0x72b58459),
+ TOBN(0xc29ad4a6, 0xa638e8ec), TOBN(0xf5ab8961, 0x46b78699),
+ TOBN(0x9dbd7974, 0x0e954750), TOBN(0x0121de88, 0x64f9d2c6),
+ TOBN(0x2e597b42, 0xd985232e), TOBN(0x55b6c3c5, 0x53451777),
+ TOBN(0xbb53e547, 0x519cb9fb), TOBN(0xf134019f, 0x8428600d),
+ TOBN(0x5a473176, 0xe081791a), TOBN(0x2f3e2263, 0x35fb0c08),
+ TOBN(0xb28c3017, 0x73d273b0), TOBN(0xccd21076, 0x7721ef9a),
+ TOBN(0x054cc292, 0xb650dc39), TOBN(0x662246de, 0x6188045e),
+ TOBN(0x904b52fa, 0x6b83c0d1), TOBN(0xa72df267, 0x97e9cd46),
+ TOBN(0x886b43cd, 0x899725e4), TOBN(0x2b651688, 0xd849ff22),
+ TOBN(0x60479b79, 0x02f34533), TOBN(0x5e354c14, 0x0c77c148),
+ TOBN(0xb4bb7581, 0xa8537c78), TOBN(0x188043d7, 0xefe1495f),
+ TOBN(0x9ba12f42, 0x8c1d5026), TOBN(0x2e0c8a26, 0x93d4aaab),
+ TOBN(0xbdba7b8b, 0xaa57c450), TOBN(0x140c9ad6, 0x9bbdafef),
+ TOBN(0x2067aa42, 0x25ac0f18), TOBN(0xf7b1295b, 0x04d1fbf3),
+ TOBN(0x14829111, 0xa4b04824), TOBN(0x2ce3f192, 0x33bd5e91),
+ TOBN(0x9c7a1d55, 0x8f2e1b72), TOBN(0xfe932286, 0x302aa243),
+ TOBN(0x497ca7b4, 0xd4be9554), TOBN(0xb8e821b8, 0xe0547a6e),
+ TOBN(0xfb2838be, 0x67e573e0), TOBN(0x05891db9, 0x4084c44b),
+ TOBN(0x91311373, 0x96c1c2c5), TOBN(0x6aebfa3f, 0xd958444b),
+ TOBN(0xac9cdce9, 0xe56e55c1), TOBN(0x7148ced3, 0x2caa46d0),
+ TOBN(0x2e10c7ef, 0xb61fe8eb), TOBN(0x9fd835da, 0xff97cf4d),}
+ ,
+ {TOBN(0xa36da109, 0x081e9387), TOBN(0xfb9780d7, 0x8c935828),
+ TOBN(0xd5940332, 0xe540b015), TOBN(0xc9d7b51b, 0xe0f466fa),
+ TOBN(0xfaadcd41, 0xd6d9f671), TOBN(0xba6c1e28, 0xb1a2ac17),
+ TOBN(0x066a7833, 0xed201e5f), TOBN(0x19d99719, 0xf90f462b),
+ TOBN(0xf431f462, 0x060b5f61), TOBN(0xa56f46b4, 0x7bd057c2),
+ TOBN(0x348dca6c, 0x47e1bf65), TOBN(0x9a38783e, 0x41bcf1ff),
+ TOBN(0x7a5d33a9, 0xda710718), TOBN(0x5a779987, 0x2e0aeaf6),
+ TOBN(0xca87314d, 0x2d29d187), TOBN(0xfa0edc3e, 0xc687d733),
+ TOBN(0x9df33621, 0x6a31e09b), TOBN(0xde89e44d, 0xc1350e35),
+ TOBN(0x29214871, 0x4ca0cf52), TOBN(0xdf379672, 0x0b88a538),
+ TOBN(0xc92a510a, 0x2591d61b), TOBN(0x79aa87d7, 0x585b447b),
+ TOBN(0xf67db604, 0xe5287f77), TOBN(0x1697c8bf, 0x5efe7a80),
+ TOBN(0x1c894849, 0xcb198ac7), TOBN(0xa884a93d, 0x0f264665),
+ TOBN(0x2da964ef, 0x9b200678), TOBN(0x3c351b87, 0x009834e6),
+ TOBN(0xafb2ef9f, 0xe2c4b44b), TOBN(0x580f6c47, 0x3326790c),
+ TOBN(0xb8480521, 0x0b02264a), TOBN(0x8ba6f9e2, 0x42a194e2),
+ TOBN(0xfc87975f, 0x8fb54738), TOBN(0x35160788, 0x27c3ead3),
+ TOBN(0x834116d2, 0xb74a085a), TOBN(0x53c99a73, 0xa62fe996),
+ TOBN(0x87585be0, 0x5b81c51b), TOBN(0x925bafa8, 0xbe0852b7),
+ TOBN(0x76a4fafd, 0xa84d19a7), TOBN(0x39a45982, 0x585206d4),
+ TOBN(0x499b6ab6, 0x5eb03c0e), TOBN(0xf19b7954, 0x72bc3fde),
+ TOBN(0xa86b5b9c, 0x6e3a80d2), TOBN(0xe4377508, 0x6d42819f),
+ TOBN(0xc1663650, 0xbb3ee8a3), TOBN(0x75eb14fc, 0xb132075f),
+ TOBN(0xa8ccc906, 0x7ad834f6), TOBN(0xea6a2474, 0xe6e92ffd),
+ TOBN(0x9d72fd95, 0x0f8d6758), TOBN(0xcb84e101, 0x408c07dd),
+ TOBN(0xb9114bfd, 0xa5e23221), TOBN(0x358b5fe2, 0xe94e742c),
+ TOBN(0x1c0577ec, 0x95f40e75), TOBN(0xf0155451, 0x3d73f3d6),
+ TOBN(0x9d55cd67, 0xbd1b9b66), TOBN(0x63e86e78, 0xaf8d63c7),
+ TOBN(0x39d934ab, 0xd3c095f1), TOBN(0x04b261be, 0xe4b76d71),
+ TOBN(0x1d2e6970, 0xe73e6984), TOBN(0x879fb23b, 0x5e5fcb11),
+ TOBN(0x11506c72, 0xdfd75490), TOBN(0x3a97d085, 0x61bcf1c1),
+ TOBN(0x43201d82, 0xbf5e7007), TOBN(0x7f0ac52f, 0x798232a7),
+ TOBN(0x2715cbc4, 0x6eb564d4), TOBN(0x8d6c752c, 0x9e570e29),
+ TOBN(0xf80247c8, 0x9ef5fd5d), TOBN(0xc3c66b46, 0xd53eb514),
+ TOBN(0x9666b401, 0x0f87de56), TOBN(0xce62c06f, 0xc6c603b5),
+ TOBN(0xae7b4c60, 0x7e4fc942), TOBN(0x38ac0b77, 0x663a9c19),
+ TOBN(0xcb4d20ee, 0x4b049136), TOBN(0x8b63bf12, 0x356a4613),
+ TOBN(0x1221aef6, 0x70e08128), TOBN(0xe62d8c51, 0x4acb6b16),
+ TOBN(0x71f64a67, 0x379e7896), TOBN(0xb25237a2, 0xcafd7fa5),
+ TOBN(0xf077bd98, 0x3841ba6a), TOBN(0xc4ac0244, 0x3cd16e7e),
+ TOBN(0x548ba869, 0x21fea4ca), TOBN(0xd36d0817, 0xf3dfdac1),
+ TOBN(0x09d8d71f, 0xf4685faf), TOBN(0x8eff66be, 0xc52c459a),
+ TOBN(0x182faee7, 0x0b57235e), TOBN(0xee3c39b1, 0x0106712b),
+ TOBN(0x5107331f, 0xc0fcdcb0), TOBN(0x669fb9dc, 0xa51054ba),
+ TOBN(0xb25101fb, 0x319d7682), TOBN(0xb0293129, 0x0a982fee),
+ TOBN(0x51c1c9b9, 0x0261b344), TOBN(0x0e008c5b, 0xbfd371fa),
+ TOBN(0xd866dd1c, 0x0278ca33), TOBN(0x666f76a6, 0xe5aa53b1),
+ TOBN(0xe5cfb779, 0x6013a2cf), TOBN(0x1d3a1aad, 0xa3521836),
+ TOBN(0xcedd2531, 0x73faa485), TOBN(0xc8ee6c4f, 0xc0a76878),
+ TOBN(0xddbccfc9, 0x2a11667d), TOBN(0x1a418ea9, 0x1c2f695a),
+ TOBN(0xdb11bd92, 0x51f73971), TOBN(0x3e4b3c82, 0xda2ed89f),
+ TOBN(0x9a44f3f4, 0xe73e0319), TOBN(0xd1e3de0f, 0x303431af),
+ TOBN(0x3c5604ff, 0x50f75f9c), TOBN(0x1d8eddf3, 0x7e752b22),
+ TOBN(0x0ef074dd, 0x3c9a1118), TOBN(0xd0ffc172, 0xccb86d7b),
+ TOBN(0xabd1ece3, 0x037d90f2), TOBN(0xe3f307d6, 0x6055856c),
+ TOBN(0x422f9328, 0x7e4c6daf), TOBN(0x902aac66, 0x334879a0),
+ TOBN(0xb6a1e7bf, 0x94cdfade), TOBN(0x6c97e1ed, 0x7fc6d634),
+ TOBN(0x662ad24d, 0xa2fb63f8), TOBN(0xf81be1b9, 0xa5928405),
+ TOBN(0x86d765e4, 0xd14b4206), TOBN(0xbecc2e0e, 0x8fa0db65),
+ TOBN(0xa28838e0, 0xb17fc76c), TOBN(0xe49a602a, 0xe37cf24e),
+ TOBN(0x76b4131a, 0x567193ec), TOBN(0xaf3c305a, 0xe5f6e70b),
+ TOBN(0x9587bd39, 0x031eebdd), TOBN(0x5709def8, 0x71bbe831),
+ TOBN(0x57059983, 0x0eb2b669), TOBN(0x4d80ce1b, 0x875b7029),
+ TOBN(0x838a7da8, 0x0364ac16), TOBN(0x2f431d23, 0xbe1c83ab),
+ TOBN(0xe56812a6, 0xf9294dd3), TOBN(0xb448d01f, 0x9b4b0d77),
+ TOBN(0xf3ae6061, 0x04e8305c), TOBN(0x2bead645, 0x94d8c63e),
+ TOBN(0x0a85434d, 0x84fd8b07), TOBN(0x537b983f, 0xf7a9dee5),
+ TOBN(0xedcc5f18, 0xef55bd85), TOBN(0x2041af62, 0x21c6cf8b),
+ TOBN(0x8e52874c, 0xb940c71e), TOBN(0x211935a9, 0xdb5f4b3a),
+ TOBN(0x94350492, 0x301b1dc3), TOBN(0x33d2646d, 0x29958620),
+ TOBN(0x16b0d64b, 0xef911404), TOBN(0x9d1f25ea, 0x9a3c5ef4),
+ TOBN(0x20f200eb, 0x4a352c78), TOBN(0x43929f2c, 0x4bd0b428),
+ TOBN(0xa5656667, 0xc7196e29), TOBN(0x7992c2f0, 0x9391be48),
+ TOBN(0xaaa97cbd, 0x9ee0cd6e), TOBN(0x51b0310c, 0x3dc8c9bf),
+ TOBN(0x237f8acf, 0xdd9f22cb), TOBN(0xbb1d81a1, 0xb585d584),
+ TOBN(0x8d5d85f5, 0x8c416388), TOBN(0x0d6e5a5a, 0x42fe474f),
+ TOBN(0xe7812766, 0x38235d4e), TOBN(0x1c62bd67, 0x496e3298),
+ TOBN(0x8378660c, 0x3f175bc8), TOBN(0x4d04e189, 0x17afdd4d),
+ TOBN(0x32a81601, 0x85a8068c), TOBN(0xdb58e4e1, 0x92b29a85),
+ TOBN(0xe8a65b86, 0xc70d8a3b), TOBN(0x5f0e6f4e, 0x98a0403b),
+ TOBN(0x08129684, 0x69ed2370), TOBN(0x34dc30bd, 0x0871ee26),
+ TOBN(0x3a5ce948, 0x7c9c5b05), TOBN(0x7d487b80, 0x43a90c87),
+ TOBN(0x4089ba37, 0xdd0e7179), TOBN(0x45f80191, 0xb4041811),
+ TOBN(0x1c3e1058, 0x98747ba5), TOBN(0x98c4e13a, 0x6e1ae592),
+ TOBN(0xd44636e6, 0xe82c9f9e), TOBN(0x711db87c, 0xc33a1043),
+ TOBN(0x6f431263, 0xaa8aec05), TOBN(0x43ff120d, 0x2744a4aa),
+ TOBN(0xd3bd892f, 0xae77779b), TOBN(0xf0fe0cc9, 0x8cdc9f82),
+ TOBN(0xca5f7fe6, 0xf1c5b1bc), TOBN(0xcc63a682, 0x44929a72),
+ TOBN(0xc7eaba0c, 0x09dbe19a), TOBN(0x2f3585ad, 0x6b5c73c2),
+ TOBN(0x8ab8924b, 0x0ae50c30), TOBN(0x17fcd27a, 0x638b30ba),
+ TOBN(0xaf414d34, 0x10b3d5a5), TOBN(0x09c107d2, 0x2a9accf1),
+ TOBN(0x15dac49f, 0x946a6242), TOBN(0xaec3df2a, 0xd707d642),
+ TOBN(0x2c2492b7, 0x3f894ae0), TOBN(0xf59df3e5, 0xb75f18ce),
+ TOBN(0x7cb740d2, 0x8f53cad0), TOBN(0x3eb585fb, 0xc4f01294),
+ TOBN(0x17da0c86, 0x32c7f717), TOBN(0xeb8c795b, 0xaf943f4c),
+ TOBN(0x4ee23fb5, 0xf67c51d2), TOBN(0xef187575, 0x68889949),
+ TOBN(0xa6b4bdb2, 0x0389168b), TOBN(0xc4ecd258, 0xea577d03),
+ TOBN(0x3a63782b, 0x55743082), TOBN(0x6f678f4c, 0xc72f08cd),
+ TOBN(0x553511cf, 0x65e58dd8), TOBN(0xd53b4e3e, 0xd402c0cd),
+ TOBN(0x37de3e29, 0xa037c14c), TOBN(0x86b6c516, 0xc05712aa),
+ TOBN(0x2834da3e, 0xb38dff6f), TOBN(0xbe012c52, 0xea636be8),
+ TOBN(0x292d238c, 0x61dd37f8), TOBN(0x0e54523f, 0x8f8142db),
+ TOBN(0xe31eb436, 0x036a05d8), TOBN(0x83e3cdff, 0x1e93c0ff),
+ TOBN(0x3fd2fe0f, 0x50821ddf), TOBN(0xc8e19b0d, 0xff9eb33b),
+ TOBN(0xc8cc943f, 0xb569a5fe), TOBN(0xad0090d4, 0xd4342d75),
+ TOBN(0x82090b4b, 0xcaeca000), TOBN(0xca39687f, 0x1bd410eb),
+ TOBN(0xe7bb0df7, 0x65959d77), TOBN(0x39d78218, 0x9c964999),
+ TOBN(0xd87f62e8, 0xb2415451), TOBN(0xe5efb774, 0xbed76108),
+ TOBN(0x3ea011a4, 0xe822f0d0), TOBN(0xbc647ad1, 0x5a8704f8),
+ TOBN(0xbb315b35, 0x50c6820f), TOBN(0x863dec3d, 0xb7e76bec),
+ TOBN(0x01ff5d3a, 0xf017bfc7), TOBN(0x20054439, 0x976b8229),
+ TOBN(0x067fca37, 0x0bbd0d3b), TOBN(0xf63dde64, 0x7f5e3d0f),
+ TOBN(0x22dbefb3, 0x2a4c94e9), TOBN(0xafbff0fe, 0x96f8278a),
+ TOBN(0x80aea0b1, 0x3503793d), TOBN(0xb2238029, 0x5f06cd29),
+ TOBN(0x65703e57, 0x8ec3feca), TOBN(0x06c38314, 0x393e7053),
+ TOBN(0xa0b751eb, 0x7c6734c4), TOBN(0xd2e8a435, 0xc59f0f1e),
+ TOBN(0x147d9052, 0x5e9ca895), TOBN(0x2f4dd31e, 0x972072df),
+ TOBN(0xa16fda8e, 0xe6c6755c), TOBN(0xc66826ff, 0xcf196558),
+ TOBN(0x1f1a76a3, 0x0cf43895), TOBN(0xa9d604e0, 0x83c3097b),
+ TOBN(0xe1908309, 0x66390e0e), TOBN(0xa50bf753, 0xb3c85eff),
+ TOBN(0x0696bdde, 0xf6a70251), TOBN(0x548b801b, 0x3c6ab16a),
+ TOBN(0x37fcf704, 0xa4d08762), TOBN(0x090b3def, 0xdff76c4e),
+ TOBN(0x87e8cb89, 0x69cb9158), TOBN(0x44a90744, 0x995ece43),
+ TOBN(0xf85395f4, 0x0ad9fbf5), TOBN(0x49b0f6c5, 0x4fb0c82d),
+ TOBN(0x75d9bc15, 0xadf7cccf), TOBN(0x81a3e5d6, 0xdfa1e1b0),
+ TOBN(0x8c39e444, 0x249bc17e), TOBN(0xf37dccb2, 0x8ea7fd43),
+ TOBN(0xda654873, 0x907fba12), TOBN(0x35daa6da, 0x4a372904),
+ TOBN(0x0564cfc6, 0x6283a6c5), TOBN(0xd09fa4f6, 0x4a9395bf),
+ TOBN(0x688e9ec9, 0xaeb19a36), TOBN(0xd913f1ce, 0xc7bfbfb4),
+ TOBN(0x797b9a3c, 0x61c2faa6), TOBN(0x2f979bec, 0x6a0a9c12),
+ TOBN(0xb5969d0f, 0x359679ec), TOBN(0xebcf523d, 0x079b0460),
+ TOBN(0xfd6b0008, 0x10fab870), TOBN(0x3f2edcda, 0x9373a39c),
+ TOBN(0x0d64f9a7, 0x6f568431), TOBN(0xf848c27c, 0x02f8898c),
+ TOBN(0xf418ade1, 0x260b5bd5), TOBN(0xc1f3e323, 0x6973dee8),
+ TOBN(0x46e9319c, 0x26c185dd), TOBN(0x6d85b7d8, 0x546f0ac4),
+ TOBN(0x427965f2, 0x247f9d57), TOBN(0xb519b636, 0xb0035f48),
+ TOBN(0x6b6163a9, 0xab87d59c), TOBN(0xff9f58c3, 0x39caaa11),
+ TOBN(0x4ac39cde, 0x3177387b), TOBN(0x5f6557c2, 0x873e77f9),
+ TOBN(0x67504006, 0x36a83041), TOBN(0x9b1c96ca, 0x75ef196c),
+ TOBN(0xf34283de, 0xb08c7940), TOBN(0x7ea09644, 0x1128c316),
+ TOBN(0xb510b3b5, 0x6aa39dff), TOBN(0x59b43da2, 0x9f8e4d8c),
+ TOBN(0xa8ce31fd, 0x9e4c4b9f), TOBN(0x0e20be26, 0xc1303c01),
+ TOBN(0x18187182, 0xe8ee47c9), TOBN(0xd9687cdb, 0x7db98101),
+ TOBN(0x7a520e4d, 0xa1e14ff6), TOBN(0x429808ba, 0x8836d572),
+ TOBN(0xa37ca60d, 0x4944b663), TOBN(0xf901f7a9, 0xa3f91ae5),
+ TOBN(0xe4e3e76e, 0x9e36e3b1), TOBN(0x9aa219cf, 0x29d93250),
+ TOBN(0x347fe275, 0x056a2512), TOBN(0xa4d643d9, 0xde65d95c),
+ TOBN(0x9669d396, 0x699fc3ed), TOBN(0xb598dee2, 0xcf8c6bbe),
+ TOBN(0x682ac1e5, 0xdda9e5c6), TOBN(0x4e0d3c72, 0xcaa9fc95),
+ TOBN(0x17faaade, 0x772bea44), TOBN(0x5ef8428c, 0xab0009c8),
+ TOBN(0xcc4ce47a, 0x460ff016), TOBN(0xda6d12bf, 0x725281cb),
+ TOBN(0x44c67848, 0x0223aad2), TOBN(0x6e342afa, 0x36256e28),
+ TOBN(0x1400bb0b, 0x93a37c04), TOBN(0x62b1bc9b, 0xdd10bd96),
+ TOBN(0x7251adeb, 0x0dac46b7), TOBN(0x7d33b92e, 0x7be4ef51),
+ TOBN(0x28b2a94b, 0xe61fa29a), TOBN(0x4b2be13f, 0x06422233),
+ TOBN(0x36d6d062, 0x330d8d37), TOBN(0x5ef80e1e, 0xb28ca005),
+ TOBN(0x174d4699, 0x6d16768e), TOBN(0x9fc4ff6a, 0x628bf217),
+ TOBN(0x77705a94, 0x154e490d), TOBN(0x9d96dd28, 0x8d2d997a),
+ TOBN(0x77e2d9d8, 0xce5d72c4), TOBN(0x9d06c5a4, 0xc11c714f),
+ TOBN(0x02aa5136, 0x79e4a03e), TOBN(0x1386b3c2, 0x030ff28b),
+ TOBN(0xfe82e8a6, 0xfb283f61), TOBN(0x7df203e5, 0xf3abc3fb),
+ TOBN(0xeec7c351, 0x3a4d3622), TOBN(0xf7d17dbf, 0xdf762761),
+ TOBN(0xc3956e44, 0x522055f0), TOBN(0xde3012db, 0x8fa748db),
+ TOBN(0xca9fcb63, 0xbf1dcc14), TOBN(0xa56d9dcf, 0xbe4e2f3a),
+ TOBN(0xb86186b6, 0x8bcec9c2), TOBN(0x7cf24df9, 0x680b9f06),
+ TOBN(0xc46b45ea, 0xc0d29281), TOBN(0xfff42bc5, 0x07b10e12),
+ TOBN(0x12263c40, 0x4d289427), TOBN(0x3d5f1899, 0xb4848ec4),
+ TOBN(0x11f97010, 0xd040800c), TOBN(0xb4c5f529, 0x300feb20),
+ TOBN(0xcc543f8f, 0xde94fdcb), TOBN(0xe96af739, 0xc7c2f05e),
+ TOBN(0xaa5e0036, 0x882692e1), TOBN(0x09c75b68, 0x950d4ae9),
+ TOBN(0x62f63df2, 0xb5932a7a), TOBN(0x2658252e, 0xde0979ad),
+ TOBN(0x2a19343f, 0xb5e69631), TOBN(0x718c7501, 0x525b666b),
+ TOBN(0x26a42d69, 0xea40dc3a), TOBN(0xdc84ad22, 0xaecc018f),
+ TOBN(0x25c36c7b, 0x3270f04a), TOBN(0x46ba6d47, 0x50fa72ed),
+ TOBN(0x6c37d1c5, 0x93e58a8e), TOBN(0xa2394731, 0x120c088c),
+ TOBN(0xc3be4263, 0xcb6e86da), TOBN(0x2c417d36, 0x7126d038),
+ TOBN(0x5b70f9c5, 0x8b6f8efa), TOBN(0x671a2faa, 0x37718536),
+ TOBN(0xd3ced3c6, 0xb539c92b), TOBN(0xe56f1bd9, 0xa31203c2),
+ TOBN(0x8b096ec4, 0x9ff3c8eb), TOBN(0x2deae432, 0x43491cea),
+ TOBN(0x2465c6eb, 0x17943794), TOBN(0x5d267e66, 0x20586843),
+ TOBN(0x9d3d116d, 0xb07159d0), TOBN(0xae07a67f, 0xc1896210),
+ TOBN(0x8fc84d87, 0xbb961579), TOBN(0x30009e49, 0x1c1f8dd6),
+ TOBN(0x8a8caf22, 0xe3132819), TOBN(0xcffa197c, 0xf23ab4ff),
+ TOBN(0x58103a44, 0x205dd687), TOBN(0x57b796c3, 0x0ded67a2),
+ TOBN(0x0b9c3a6c, 0xa1779ad7), TOBN(0xa33cfe2e, 0x357c09c5),
+ TOBN(0x2ea29315, 0x3db4a57e), TOBN(0x91959695, 0x8ebeb52e),
+ TOBN(0x118db9a6, 0xe546c879), TOBN(0x8e996df4, 0x6295c8d6),
+ TOBN(0xdd990484, 0x55ec806b), TOBN(0x24f291ca, 0x165c1035),
+ TOBN(0xcca523bb, 0x440e2229), TOBN(0x324673a2, 0x73ef4d04),
+ TOBN(0xaf3adf34, 0x3e11ec39), TOBN(0x6136d7f1, 0xdc5968d3),
+ TOBN(0x7a7b2899, 0xb053a927), TOBN(0x3eaa2661, 0xae067ecd),
+ TOBN(0x8549b9c8, 0x02779cd9), TOBN(0x061d7940, 0xc53385ea),
+ TOBN(0x3e0ba883, 0xf06d18bd), TOBN(0x4ba6de53, 0xb2700843),
+ TOBN(0xb966b668, 0x591a9e4d), TOBN(0x93f67567, 0x7f4fa0ed),
+ TOBN(0x5a02711b, 0x4347237b), TOBN(0xbc041e2f, 0xe794608e),
+ TOBN(0x55af10f5, 0x70f73d8c), TOBN(0xd2d4d4f7, 0xbb7564f7),
+ TOBN(0xd7d27a89, 0xb3e93ce7), TOBN(0xf7b5a875, 0x5d3a2c1b),
+ TOBN(0xb29e68a0, 0x255b218a), TOBN(0xb533837e, 0x8af76754),
+ TOBN(0xd1b05a73, 0x579fab2e), TOBN(0xb41055a1, 0xecd74385),
+ TOBN(0xb2369274, 0x445e9115), TOBN(0x2972a7c4, 0xf520274e),
+ TOBN(0x6c08334e, 0xf678e68a), TOBN(0x4e4160f0, 0x99b057ed),
+ TOBN(0x3cfe11b8, 0x52ccb69a), TOBN(0x2fd1823a, 0x21c8f772),
+ TOBN(0xdf7f072f, 0x3298f055), TOBN(0x8c0566f9, 0xfec74a6e),
+ TOBN(0xe549e019, 0x5bb4d041), TOBN(0x7c3930ba, 0x9208d850),
+ TOBN(0xe07141fc, 0xaaa2902b), TOBN(0x539ad799, 0xe4f69ad3),
+ TOBN(0xa6453f94, 0x813f9ffd), TOBN(0xc58d3c48, 0x375bc2f7),
+ TOBN(0xb3326fad, 0x5dc64e96), TOBN(0x3aafcaa9, 0xb240e354),
+ TOBN(0x1d1b0903, 0xaca1e7a9), TOBN(0x4ceb9767, 0x1211b8a0),
+ TOBN(0xeca83e49, 0xe32a858e), TOBN(0x4c32892e, 0xae907bad),
+ TOBN(0xd5b42ab6, 0x2eb9b494), TOBN(0x7fde3ee2, 0x1eabae1b),
+ TOBN(0x13b5ab09, 0xcaf54957), TOBN(0xbfb028be, 0xe5f5d5d5),
+ TOBN(0x928a0650, 0x2003e2c0), TOBN(0x90793aac, 0x67476843),
+ TOBN(0x5e942e79, 0xc81710a0), TOBN(0x557e4a36, 0x27ccadd4),
+ TOBN(0x72a2bc56, 0x4bcf6d0c), TOBN(0x09ee5f43, 0x26d7b80c),
+ TOBN(0x6b70dbe9, 0xd4292f19), TOBN(0x56f74c26, 0x63f16b18),
+ TOBN(0xc23db0f7, 0x35fbb42a), TOBN(0xb606bdf6, 0x6ae10040),
+ TOBN(0x1eb15d4d, 0x044573ac), TOBN(0x7dc3cf86, 0x556b0ba4),
+ TOBN(0x97af9a33, 0xc60df6f7), TOBN(0x0b1ef85c, 0xa716ce8c),
+ TOBN(0x2922f884, 0xc96958be), TOBN(0x7c32fa94, 0x35690963),
+ TOBN(0x2d7f667c, 0xeaa00061), TOBN(0xeaaf7c17, 0x3547365c),
+ TOBN(0x1eb4de46, 0x87032d58), TOBN(0xc54f3d83, 0x5e2c79e0),
+ TOBN(0x07818df4, 0x5d04ef23), TOBN(0x55faa9c8, 0x673d41b4),
+ TOBN(0xced64f6f, 0x89b95355), TOBN(0x4860d2ea, 0xb7415c84),
+ TOBN(0x5fdb9bd2, 0x050ebad3), TOBN(0xdb53e0cc, 0x6685a5bf),
+ TOBN(0xb830c031, 0x9feb6593), TOBN(0xdd87f310, 0x6accff17),
+ TOBN(0x2303ebab, 0x9f555c10), TOBN(0x94603695, 0x287e7065),
+ TOBN(0xf88311c3, 0x2e83358c), TOBN(0x508dd9b4, 0xeefb0178),
+ TOBN(0x7ca23706, 0x2dba8652), TOBN(0x62aac5a3, 0x0047abe5),
+ TOBN(0x9a61d2a0, 0x8b1ea7b3), TOBN(0xd495ab63, 0xae8b1485),
+ TOBN(0x38740f84, 0x87052f99), TOBN(0x178ebe5b, 0xb2974eea),
+ TOBN(0x030bbcca, 0x5b36d17f), TOBN(0xb5e4cce3, 0xaaf86eea),
+ TOBN(0xb51a0220, 0x68f8e9e0), TOBN(0xa4348796, 0x09eb3e75),
+ TOBN(0xbe592309, 0xeef1a752), TOBN(0x5d7162d7, 0x6f2aa1ed),
+ TOBN(0xaebfb5ed, 0x0f007dd2), TOBN(0x255e14b2, 0xc89edd22),
+ TOBN(0xba85e072, 0x0303b697), TOBN(0xc5d17e25, 0xf05720ff),
+ TOBN(0x02b58d6e, 0x5128ebb6), TOBN(0x2c80242d, 0xd754e113),
+ TOBN(0x919fca5f, 0xabfae1ca), TOBN(0x937afaac, 0x1a21459b),
+ TOBN(0x9e0ca91c, 0x1f66a4d2), TOBN(0x194cc7f3, 0x23ec1331),
+ TOBN(0xad25143a, 0x8aa11690), TOBN(0xbe40ad8d, 0x09b59e08),
+ TOBN(0x37d60d9b, 0xe750860a), TOBN(0x6c53b008, 0xc6bf434c),
+ TOBN(0xb572415d, 0x1356eb80), TOBN(0xb8bf9da3, 0x9578ded8),
+ TOBN(0x22658e36, 0x5e8fb38b), TOBN(0x9b70ce22, 0x5af8cb22),
+ TOBN(0x7c00018a, 0x829a8180), TOBN(0x84329f93, 0xb81ed295),
+ TOBN(0x7c343ea2, 0x5f3cea83), TOBN(0x38f8655f, 0x67586536),
+ TOBN(0xa661a0d0, 0x1d3ec517), TOBN(0x98744652, 0x512321ae),
+ TOBN(0x084ca591, 0xeca92598), TOBN(0xa9bb9dc9, 0x1dcb3feb),
+ TOBN(0x14c54355, 0x78b4c240), TOBN(0x5ed62a3b, 0x610cafdc),
+ TOBN(0x07512f37, 0x1b38846b), TOBN(0x571bb70a, 0xb0e38161),
+ TOBN(0xb556b95b, 0x2da705d2), TOBN(0x3ef8ada6, 0xb1a08f98),
+ TOBN(0x85302ca7, 0xddecfbe5), TOBN(0x0e530573, 0x943105cd),
+ TOBN(0x60554d55, 0x21a9255d), TOBN(0x63a32fa1, 0xf2f3802a),
+ TOBN(0x35c8c5b0, 0xcd477875), TOBN(0x97f458ea, 0x6ad42da1),
+ TOBN(0x832d7080, 0xeb6b242d), TOBN(0xd30bd023, 0x3b71e246),
+ TOBN(0x7027991b, 0xbe31139d), TOBN(0x68797e91, 0x462e4e53),
+ TOBN(0x423fe20a, 0x6b4e185a), TOBN(0x82f2c67e, 0x42d9b707),
+ TOBN(0x25c81768, 0x4cf7811b), TOBN(0xbd53005e, 0x045bb95d),}
+ ,
+ {TOBN(0xe5f649be, 0x9d8e68fd), TOBN(0xdb0f0533, 0x1b044320),
+ TOBN(0xf6fde9b3, 0xe0c33398), TOBN(0x92f4209b, 0x66c8cfae),
+ TOBN(0xe9d1afcc, 0x1a739d4b), TOBN(0x09aea75f, 0xa28ab8de),
+ TOBN(0x14375fb5, 0xeac6f1d0), TOBN(0x6420b560, 0x708f7aa5),
+ TOBN(0x9eae499c, 0x6254dc41), TOBN(0x7e293924, 0x7a837e7e),
+ TOBN(0x74aec08c, 0x090524a7), TOBN(0xf82b9219, 0x8d6f55f2),
+ TOBN(0x493c962e, 0x1402cec5), TOBN(0x9f17ca17, 0xfa2f30e7),
+ TOBN(0xbcd783e8, 0xe9b879cb), TOBN(0xea3d8c14, 0x5a6f145f),
+ TOBN(0xdede15e7, 0x5e0dee6e), TOBN(0x74f24872, 0xdc628aa2),
+ TOBN(0xd3e9c4fe, 0x7861bb93), TOBN(0x56d4822a, 0x6187b2e0),
+ TOBN(0xb66417cf, 0xc59826f9), TOBN(0xca260969, 0x2408169e),
+ TOBN(0xedf69d06, 0xc79ef885), TOBN(0x00031f8a, 0xdc7d138f),
+ TOBN(0x103c46e6, 0x0ebcf726), TOBN(0x4482b831, 0x6231470e),
+ TOBN(0x6f6dfaca, 0x487c2109), TOBN(0x2e0ace97, 0x62e666ef),
+ TOBN(0x3246a9d3, 0x1f8d1f42), TOBN(0x1b1e83f1, 0x574944d2),
+ TOBN(0x13dfa63a, 0xa57f334b), TOBN(0x0cf8daed, 0x9f025d81),
+ TOBN(0x30d78ea8, 0x00ee11c1), TOBN(0xeb053cd4, 0xb5e3dd75),
+ TOBN(0x9b65b13e, 0xd58c43c5), TOBN(0xc3ad49bd, 0xbd151663),
+ TOBN(0x99fd8e41, 0xb6427990), TOBN(0x12cf15bd, 0x707eae1e),
+ TOBN(0x29ad4f1b, 0x1aabb71e), TOBN(0x5143e74d, 0x07545d0e),
+ TOBN(0x30266336, 0xc88bdee1), TOBN(0x25f29306, 0x5876767c),
+ TOBN(0x9c078571, 0xc6731996), TOBN(0xc88690b2, 0xed552951),
+ TOBN(0x274f2c2d, 0x852705b4), TOBN(0xb0bf8d44, 0x4e09552d),
+ TOBN(0x7628beeb, 0x986575d1), TOBN(0x407be238, 0x7f864651),
+ TOBN(0x0e5e3049, 0xa639fc6b), TOBN(0xe75c35d9, 0x86003625),
+ TOBN(0x0cf35bd8, 0x5dcc1646), TOBN(0x8bcaced2, 0x6c26273a),
+ TOBN(0xe22ecf1d, 0xb5536742), TOBN(0x013dd897, 0x1a9e068b),
+ TOBN(0x17f411cb, 0x8a7909c5), TOBN(0x5757ac98, 0x861dd506),
+ TOBN(0x85de1f0d, 0x1e935abb), TOBN(0xdefd10b4, 0x154de37a),
+ TOBN(0xb8d9e392, 0x369cebb5), TOBN(0x54d5ef9b, 0x761324be),
+ TOBN(0x4d6341ba, 0x74f17e26), TOBN(0xc0a0e3c8, 0x78c1dde4),
+ TOBN(0xa6d77581, 0x87d918fd), TOBN(0x66876015, 0x02ca3a13),
+ TOBN(0xc7313e9c, 0xf36658f0), TOBN(0xc433ef1c, 0x71f8057e),
+ TOBN(0x85326246, 0x1b6a835a), TOBN(0xc8f05398, 0x7c86394c),
+ TOBN(0xff398cdf, 0xe983c4a1), TOBN(0xbf5e8162, 0x03b7b931),
+ TOBN(0x93193c46, 0xb7b9045b), TOBN(0x1e4ebf5d, 0xa4a6e46b),
+ TOBN(0xf9942a60, 0x43a24fe7), TOBN(0x29c1191e, 0xffb3492b),
+ TOBN(0x9f662449, 0x902fde05), TOBN(0xc792a7ac, 0x6713c32d),
+ TOBN(0x2fd88ad8, 0xb737982c), TOBN(0x7e3a0319, 0xa21e60e3),
+ TOBN(0x09b0de44, 0x7383591a), TOBN(0x6df141ee, 0x8310a456),
+ TOBN(0xaec1a039, 0xe6d6f471), TOBN(0x14b2ba0f, 0x1198d12e),
+ TOBN(0xebc1a160, 0x3aeee5ac), TOBN(0x401f4836, 0xe0b964ce),
+ TOBN(0x2ee43796, 0x4fd03f66), TOBN(0x3fdb4e49, 0xdd8f3f12),
+ TOBN(0x6ef267f6, 0x29380f18), TOBN(0x3e8e9670, 0x8da64d16),
+ TOBN(0xbc19180c, 0x207674f1), TOBN(0x112e09a7, 0x33ae8fdb),
+ TOBN(0x99667554, 0x6aaeb71e), TOBN(0x79432af1, 0xe101b1c7),
+ TOBN(0xd5eb558f, 0xde2ddec6), TOBN(0x81392d1f, 0x5357753f),
+ TOBN(0xa7a76b97, 0x3ae1158a), TOBN(0x416fbbff, 0x4a899991),
+ TOBN(0x9e65fdfd, 0x0d4a9dcf), TOBN(0x7bc29e48, 0x944ddf12),
+ TOBN(0xbc1a92d9, 0x3c856866), TOBN(0x273c6905, 0x6e98dfe2),
+ TOBN(0x69fce418, 0xcdfaa6b8), TOBN(0x606bd823, 0x5061c69f),
+ TOBN(0x42d495a0, 0x6af75e27), TOBN(0x8ed3d505, 0x6d873a1f),
+ TOBN(0xaf552841, 0x6ab25b6a), TOBN(0xc6c0ffc7, 0x2b1a4523),
+ TOBN(0xab18827b, 0x21c99e03), TOBN(0x060e8648, 0x9034691b),
+ TOBN(0x5207f90f, 0x93c7f398), TOBN(0x9f4a96cb, 0x82f8d10b),
+ TOBN(0xdd71cd79, 0x3ad0f9e3), TOBN(0x84f435d2, 0xfc3a54f5),
+ TOBN(0x4b03c55b, 0x8e33787f), TOBN(0xef42f975, 0xa6384673),
+ TOBN(0xff7304f7, 0x5051b9f0), TOBN(0x18aca1dc, 0x741c87c2),
+ TOBN(0x56f120a7, 0x2d4bfe80), TOBN(0xfd823b3d, 0x053e732c),
+ TOBN(0x11bccfe4, 0x7537ca16), TOBN(0xdf6c9c74, 0x1b5a996b),
+ TOBN(0xee7332c7, 0x904fc3fa), TOBN(0x14a23f45, 0xc7e3636a),
+ TOBN(0xc38659c3, 0xf091d9aa), TOBN(0x4a995e5d, 0xb12d8540),
+ TOBN(0x20a53bec, 0xf3a5598a), TOBN(0x56534b17, 0xb1eaa995),
+ TOBN(0x9ed3dca4, 0xbf04e03c), TOBN(0x716c563a, 0xd8d56268),
+ TOBN(0x27ba77a4, 0x1d6178e7), TOBN(0xe4c80c40, 0x68a1ff8e),
+ TOBN(0x75011099, 0x0a13f63d), TOBN(0x7bf33521, 0xa61d46f3),
+ TOBN(0x0aff218e, 0x10b365bb), TOBN(0x81021804, 0x0fd7ea75),
+ TOBN(0x05a3fd8a, 0xa4b3a925), TOBN(0xb829e75f, 0x9b3db4e6),
+ TOBN(0x6bdc75a5, 0x4d53e5fb), TOBN(0x04a5dc02, 0xd52717e3),
+ TOBN(0x86af502f, 0xe9a42ec2), TOBN(0x8867e8fb, 0x2630e382),
+ TOBN(0xbf845c6e, 0xbec9889b), TOBN(0x54f491f2, 0xcb47c98d),
+ TOBN(0xa3091fba, 0x790c2a12), TOBN(0xd7f6fd78, 0xc20f708b),
+ TOBN(0xa569ac30, 0xacde5e17), TOBN(0xd0f996d0, 0x6852b4d7),
+ TOBN(0xe51d4bb5, 0x4609ae54), TOBN(0x3fa37d17, 0x0daed061),
+ TOBN(0x62a88684, 0x34b8fb41), TOBN(0x99a2acbd, 0x9efb64f1),
+ TOBN(0xb75c1a5e, 0x6448e1f2), TOBN(0xfa99951a, 0x42b5a069),
+ TOBN(0x6d956e89, 0x2f3b26e7), TOBN(0xf4709860, 0xda875247),
+ TOBN(0x3ad15179, 0x2482dda3), TOBN(0xd64110e3, 0x017d82f0),
+ TOBN(0x14928d2c, 0xfad414e4), TOBN(0x2b155f58, 0x2ed02b24),
+ TOBN(0x481a141b, 0xcb821bf1), TOBN(0x12e3c770, 0x4f81f5da),
+ TOBN(0xe49c5de5, 0x9fff8381), TOBN(0x11053232, 0x5bbec894),
+ TOBN(0xa0d051cc, 0x454d88c4), TOBN(0x4f6db89c, 0x1f8e531b),
+ TOBN(0x34fe3fd6, 0xca563a44), TOBN(0x7f5c2215, 0x58da8ab9),
+ TOBN(0x8445016d, 0x9474f0a1), TOBN(0x17d34d61, 0xcb7d8a0a),
+ TOBN(0x8e9d3910, 0x1c474019), TOBN(0xcaff2629, 0xd52ceefb),
+ TOBN(0xf9cf3e32, 0xc1622c2b), TOBN(0xd4b95e3c, 0xe9071a05),
+ TOBN(0xfbbca61f, 0x1594438c), TOBN(0x1eb6e6a6, 0x04aadedf),
+ TOBN(0x853027f4, 0x68e14940), TOBN(0x221d322a, 0xdfabda9c),
+ TOBN(0xed8ea9f6, 0xb7cb179a), TOBN(0xdc7b764d, 0xb7934dcc),
+ TOBN(0xfcb13940, 0x5e09180d), TOBN(0x6629a6bf, 0xb47dc2dd),
+ TOBN(0xbfc55e4e, 0x9f5a915e), TOBN(0xb1db9d37, 0x6204441e),
+ TOBN(0xf82d68cf, 0x930c5f53), TOBN(0x17d3a142, 0xcbb605b1),
+ TOBN(0xdd5944ea, 0x308780f2), TOBN(0xdc8de761, 0x3845f5e4),
+ TOBN(0x6beaba7d, 0x7624d7a3), TOBN(0x1e709afd, 0x304df11e),
+ TOBN(0x95364376, 0x02170456), TOBN(0xbf204b3a, 0xc8f94b64),
+ TOBN(0x4e53af7c, 0x5680ca68), TOBN(0x0526074a, 0xe0c67574),
+ TOBN(0x95d8cef8, 0xecd92af6), TOBN(0xe6b9fa7a, 0x6cd1745a),
+ TOBN(0x3d546d3d, 0xa325c3e4), TOBN(0x1f57691d, 0x9ae93aae),
+ TOBN(0xe891f3fe, 0x9d2e1a33), TOBN(0xd430093f, 0xac063d35),
+ TOBN(0xeda59b12, 0x5513a327), TOBN(0xdc2134f3, 0x5536f18f),
+ TOBN(0xaa51fe2c, 0x5c210286), TOBN(0x3f68aaee, 0x1cab658c),
+ TOBN(0x5a23a00b, 0xf9357292), TOBN(0x9a626f39, 0x7efdabed),
+ TOBN(0xfe2b3bf3, 0x199d78e3), TOBN(0xb7a2af77, 0x71bbc345),
+ TOBN(0x3d19827a, 0x1e59802c), TOBN(0x823bbc15, 0xb487a51c),
+ TOBN(0x856139f2, 0x99d0a422), TOBN(0x9ac3df65, 0xf456c6fb),
+ TOBN(0xaddf65c6, 0x701f8bd6), TOBN(0x149f321e, 0x3758df87),
+ TOBN(0xb1ecf714, 0x721b7eba), TOBN(0xe17df098, 0x31a3312a),
+ TOBN(0xdb2fd6ec, 0xd5c4d581), TOBN(0xfd02996f, 0x8fcea1b3),
+ TOBN(0xe29fa63e, 0x7882f14f), TOBN(0xc9f6dc35, 0x07c6cadc),
+ TOBN(0x46f22d6f, 0xb882bed0), TOBN(0x1a45755b, 0xd118e52c),
+ TOBN(0x9f2c7c27, 0x7c4608cf), TOBN(0x7ccbdf32, 0x568012c2),
+ TOBN(0xfcb0aedd, 0x61729b0e), TOBN(0x7ca2ca9e, 0xf7d75dbf),
+ TOBN(0xf58fecb1, 0x6f640f62), TOBN(0xe274b92b, 0x39f51946),
+ TOBN(0x7f4dfc04, 0x6288af44), TOBN(0x0a91f32a, 0xeac329e5),
+ TOBN(0x43ad274b, 0xd6aaba31), TOBN(0x719a1640, 0x0f6884f9),
+ TOBN(0x685d29f6, 0xdaf91e20), TOBN(0x5ec1cc33, 0x27e49d52),
+ TOBN(0x38f4de96, 0x3b54a059), TOBN(0x0e0015e5, 0xefbcfdb3),
+ TOBN(0x177d23d9, 0x4dbb8da6), TOBN(0x98724aa2, 0x97a617ad),
+ TOBN(0x30f0885b, 0xfdb6558e), TOBN(0xf9f7a28a, 0xc7899a96),
+ TOBN(0xd2ae8ac8, 0x872dc112), TOBN(0xfa0642ca, 0x73c3c459),
+ TOBN(0x15296981, 0xe7dfc8d6), TOBN(0x67cd4450, 0x1fb5b94a),
+ TOBN(0x0ec71cf1, 0x0eddfd37), TOBN(0xc7e5eeb3, 0x9a8eddc7),
+ TOBN(0x02ac8e3d, 0x81d95028), TOBN(0x0088f172, 0x70b0e35d),
+ TOBN(0xec041fab, 0xe1881fe3), TOBN(0x62cf71b8, 0xd99e7faa),
+ TOBN(0x5043dea7, 0xe0f222c2), TOBN(0x309d42ac, 0x72e65142),
+ TOBN(0x94fe9ddd, 0x9216cd30), TOBN(0xd6539c7d, 0x0f87feec),
+ TOBN(0x03c5a57c, 0x432ac7d7), TOBN(0x72692cf0, 0x327fda10),
+ TOBN(0xec28c85f, 0x280698de), TOBN(0x2331fb46, 0x7ec283b1),
+ TOBN(0xd34bfa32, 0x2867e633), TOBN(0x78709a82, 0x0a9cc815),
+ TOBN(0xb7fe6964, 0x875e2fa5), TOBN(0x25cc064f, 0x9e98bfb5),
+ TOBN(0x9eb0151c, 0x493a65c5), TOBN(0x5fb5d941, 0x53182464),
+ TOBN(0x69e6f130, 0xf04618e2), TOBN(0xa8ecec22, 0xf89c8ab6),
+ TOBN(0xcd6ac88b, 0xb96209bd), TOBN(0x65fa8cdb, 0xb3e1c9e0),
+ TOBN(0xa47d22f5, 0x4a8d8eac), TOBN(0x83895cdf, 0x8d33f963),
+ TOBN(0xa8adca59, 0xb56cd3d1), TOBN(0x10c8350b, 0xdaf38232),
+ TOBN(0x2b161fb3, 0xa5080a9f), TOBN(0xbe7f5c64, 0x3af65b3a),
+ TOBN(0x2c754039, 0x97403a11), TOBN(0x94626cf7, 0x121b96af),
+ TOBN(0x431de7c4, 0x6a983ec2), TOBN(0x3780dd3a, 0x52cc3df7),
+ TOBN(0xe28a0e46, 0x2baf8e3b), TOBN(0xabe68aad, 0x51d299ae),
+ TOBN(0x603eb8f9, 0x647a2408), TOBN(0x14c61ed6, 0x5c750981),
+ TOBN(0x88b34414, 0xc53352e7), TOBN(0x5a34889c, 0x1337d46e),
+ TOBN(0x612c1560, 0xf95f2bc8), TOBN(0x8a3f8441, 0xd4807a3a),
+ TOBN(0x680d9e97, 0x5224da68), TOBN(0x60cd6e88, 0xc3eb00e9),
+ TOBN(0x3875a98e, 0x9a6bc375), TOBN(0xdc80f924, 0x4fd554c2),
+ TOBN(0x6c4b3415, 0x6ac77407), TOBN(0xa1e5ea8f, 0x25420681),
+ TOBN(0x541bfa14, 0x4607a458), TOBN(0x5dbc7e7a, 0x96d7fbf9),
+ TOBN(0x646a851b, 0x31590a47), TOBN(0x039e85ba, 0x15ee6df8),
+ TOBN(0xd19fa231, 0xd7b43fc0), TOBN(0x84bc8be8, 0x299a0e04),
+ TOBN(0x2b9d2936, 0xf20df03a), TOBN(0x24054382, 0x8608d472),
+ TOBN(0x76b6ba04, 0x9149202a), TOBN(0xb21c3831, 0x3670e7b7),
+ TOBN(0xddd93059, 0xd6fdee10), TOBN(0x9da47ad3, 0x78488e71),
+ TOBN(0x99cc1dfd, 0xa0fcfb25), TOBN(0x42abde10, 0x64696954),
+ TOBN(0x14cc15fc, 0x17eab9fe), TOBN(0xd6e863e4, 0xd3e70972),
+ TOBN(0x29a7765c, 0x6432112c), TOBN(0x88660001, 0x5b0774d8),
+ TOBN(0x3729175a, 0x2c088eae), TOBN(0x13afbcae, 0x8230b8d4),
+ TOBN(0x44768151, 0x915f4379), TOBN(0xf086431a, 0xd8d22812),
+ TOBN(0x37461955, 0xc298b974), TOBN(0x905fb5f0, 0xf8711e04),
+ TOBN(0x787abf3a, 0xfe969d18), TOBN(0x392167c2, 0x6f6a494e),
+ TOBN(0xfc7a0d2d, 0x28c511da), TOBN(0xf127c7dc, 0xb66a262d),
+ TOBN(0xf9c4bb95, 0xfd63fdf0), TOBN(0x90016589, 0x3913ef46),
+ TOBN(0x74d2a73c, 0x11aa600d), TOBN(0x2f5379bd, 0x9fb5ab52),
+ TOBN(0xe49e53a4, 0x7fb70068), TOBN(0x68dd39e5, 0x404aa9a7),
+ TOBN(0xb9b0cf57, 0x2ecaa9c3), TOBN(0xba0e103b, 0xe824826b),
+ TOBN(0x60c2198b, 0x4631a3c4), TOBN(0xc5ff84ab, 0xfa8966a2),
+ TOBN(0x2d6ebe22, 0xac95aff8), TOBN(0x1c9bb6db, 0xb5a46d09),
+ TOBN(0x419062da, 0x53ee4f8d), TOBN(0x7b9042d0, 0xbb97efef),
+ TOBN(0x0f87f080, 0x830cf6bd), TOBN(0x4861d19a, 0x6ec8a6c6),
+ TOBN(0xd3a0daa1, 0x202f01aa), TOBN(0xb0111674, 0xf25afbd5),
+ TOBN(0x6d00d6cf, 0x1afb20d9), TOBN(0x13695000, 0x40671bc5),
+ TOBN(0x913ab0dc, 0x2485ea9b), TOBN(0x1f2bed06, 0x9eef61ac),
+ TOBN(0x850c8217, 0x6d799e20), TOBN(0x93415f37, 0x3271c2de),
+ TOBN(0x5afb06e9, 0x6c4f5910), TOBN(0x688a52df, 0xc4e9e421),
+ TOBN(0x30495ba3, 0xe2a9a6db), TOBN(0x4601303d, 0x58f9268b),
+ TOBN(0xbe3b0dad, 0x7eb0f04f), TOBN(0x4ea47250, 0x4456936d),
+ TOBN(0x8caf8798, 0xd33fd3e7), TOBN(0x1ccd8a89, 0xeb433708),
+ TOBN(0x9effe3e8, 0x87fd50ad), TOBN(0xbe240a56, 0x6b29c4df),
+ TOBN(0xec4ffd98, 0xca0e7ebd), TOBN(0xf586783a, 0xe748616e),
+ TOBN(0xa5b00d8f, 0xc77baa99), TOBN(0x0acada29, 0xb4f34c9c),
+ TOBN(0x36dad67d, 0x0fe723ac), TOBN(0x1d8e53a5, 0x39c36c1e),
+ TOBN(0xe4dd342d, 0x1f4bea41), TOBN(0x64fd5e35, 0xebc9e4e0),
+ TOBN(0x96f01f90, 0x57908805), TOBN(0xb5b9ea3d, 0x5ed480dd),
+ TOBN(0x366c5dc2, 0x3efd2dd0), TOBN(0xed2fe305, 0x6e9dfa27),
+ TOBN(0x4575e892, 0x6e9197e2), TOBN(0x11719c09, 0xab502a5d),
+ TOBN(0x264c7bec, 0xe81f213f), TOBN(0x741b9241, 0x55f5c457),
+ TOBN(0x78ac7b68, 0x49a5f4f4), TOBN(0xf91d70a2, 0x9fc45b7d),
+ TOBN(0x39b05544, 0xb0f5f355), TOBN(0x11f06bce, 0xeef930d9),
+ TOBN(0xdb84d25d, 0x038d05e1), TOBN(0x04838ee5, 0xbacc1d51),
+ TOBN(0x9da3ce86, 0x9e8ee00b), TOBN(0xc3412057, 0xc36eda1f),
+ TOBN(0xae80b913, 0x64d9c2f4), TOBN(0x7468bac3, 0xa010a8ff),
+ TOBN(0xdfd20037, 0x37359d41), TOBN(0x1a0f5ab8, 0x15efeacc),
+ TOBN(0x7c25ad2f, 0x659d0ce0), TOBN(0x4011bcbb, 0x6785cff1),
+ TOBN(0x128b9912, 0x7e2192c7), TOBN(0xa549d8e1, 0x13ccb0e8),
+ TOBN(0x805588d8, 0xc85438b1), TOBN(0x5680332d, 0xbc25cb27),
+ TOBN(0xdcd1bc96, 0x1a4bfdf4), TOBN(0x779ff428, 0x706f6566),
+ TOBN(0x8bbee998, 0xf059987a), TOBN(0xf6ce8cf2, 0xcc686de7),
+ TOBN(0xf8ad3c4a, 0x953cfdb2), TOBN(0xd1d426d9, 0x2205da36),
+ TOBN(0xb3c0f13f, 0xc781a241), TOBN(0x3e89360e, 0xd75362a8),
+ TOBN(0xccd05863, 0xc8a91184), TOBN(0x9bd0c9b7, 0xefa8a7f4),
+ TOBN(0x97ee4d53, 0x8a912a4b), TOBN(0xde5e15f8, 0xbcf518fd),
+ TOBN(0x6a055bf8, 0xc467e1e0), TOBN(0x10be4b4b, 0x1587e256),
+ TOBN(0xd90c14f2, 0x668621c9), TOBN(0xd5518f51, 0xab9c92c1),
+ TOBN(0x8e6a0100, 0xd6d47b3c), TOBN(0xcbe980dd, 0x66716175),
+ TOBN(0x500d3f10, 0xddd83683), TOBN(0x3b6cb35d, 0x99cac73c),
+ TOBN(0x53730c8b, 0x6083d550), TOBN(0xcf159767, 0xdf0a1987),
+ TOBN(0x84bfcf53, 0x43ad73b3), TOBN(0x1b528c20, 0x4f035a94),
+ TOBN(0x4294edf7, 0x33eeac69), TOBN(0xb6283e83, 0x817f3240),
+ TOBN(0xc3fdc959, 0x0a5f25b1), TOBN(0xefaf8aa5, 0x5844ee22),
+ TOBN(0xde269ba5, 0xdbdde4de), TOBN(0xe3347160, 0xc56133bf),
+ TOBN(0xc1184219, 0x8d9ea9f8), TOBN(0x090de5db, 0xf3fc1ab5),
+ TOBN(0x404c37b1, 0x0bf22cda), TOBN(0x7de20ec8, 0xf5618894),
+ TOBN(0x754c588e, 0xecdaecab), TOBN(0x6ca4b0ed, 0x88342743),
+ TOBN(0x76f08bdd, 0xf4a938ec), TOBN(0xd182de89, 0x91493ccb),
+ TOBN(0xd652c53e, 0xc8a4186a), TOBN(0xb3e878db, 0x946d8e33),
+ TOBN(0x088453c0, 0x5f37663c), TOBN(0x5cd9daaa, 0xb407748b),
+ TOBN(0xa1f5197f, 0x586d5e72), TOBN(0x47500be8, 0xc443ca59),
+ TOBN(0x78ef35b2, 0xe2652424), TOBN(0x09c5d26f, 0x6dd7767d),
+ TOBN(0x7175a79a, 0xa74d3f7b), TOBN(0x0428fd8d, 0xcf5ea459),
+ TOBN(0x511cb97c, 0xa5d1746d), TOBN(0x36363939, 0xe71d1278),
+ TOBN(0xcf2df955, 0x10350bf4), TOBN(0xb3817439, 0x60aae782),
+ TOBN(0xa748c0e4, 0x3e688809), TOBN(0x98021fbf, 0xd7a5a006),
+ TOBN(0x9076a70c, 0x0e367a98), TOBN(0xbea1bc15, 0x0f62b7c2),
+ TOBN(0x2645a68c, 0x30fe0343), TOBN(0xacaffa78, 0x699dc14f),
+ TOBN(0xf4469964, 0x457bf9c4), TOBN(0x0db6407b, 0x0d2ead83),
+ TOBN(0x68d56cad, 0xb2c6f3eb), TOBN(0x3b512e73, 0xf376356c),
+ TOBN(0xe43b0e1f, 0xfce10408), TOBN(0x89ddc003, 0x5a5e257d),
+ TOBN(0xb0ae0d12, 0x0362e5b3), TOBN(0x07f983c7, 0xb0519161),
+ TOBN(0xc2e94d15, 0x5d5231e7), TOBN(0xcff22aed, 0x0b4f9513),
+ TOBN(0xb02588dd, 0x6ad0b0b5), TOBN(0xb967d1ac, 0x11d0dcd5),
+ TOBN(0x8dac6bc6, 0xcf777b6c), TOBN(0x0062bdbd, 0x4c6d1959),
+ TOBN(0x53da71b5, 0x0ef5cc85), TOBN(0x07012c7d, 0x4006f14f),
+ TOBN(0x4617f962, 0xac47800d), TOBN(0x53365f2b, 0xc102ed75),
+ TOBN(0xb422efcb, 0x4ab8c9d3), TOBN(0x195cb26b, 0x34af31c9),
+ TOBN(0x3a926e29, 0x05f2c4ce), TOBN(0xbd2bdecb, 0x9856966c),
+ TOBN(0x5d16ab3a, 0x85527015), TOBN(0x9f81609e, 0x4486c231),
+ TOBN(0xd8b96b2c, 0xda350002), TOBN(0xbd054690, 0xfa1b7d36),
+ TOBN(0xdc90ebf5, 0xe71d79bc), TOBN(0xf241b6f9, 0x08964e4e),
+ TOBN(0x7c838643, 0x2fe3cd4c), TOBN(0xe0f33acb, 0xb4bc633c),
+ TOBN(0xb4a9ecec, 0x3d139f1f), TOBN(0x05ce69cd, 0xdc4a1f49),
+ TOBN(0xa19d1b16, 0xf5f98aaf), TOBN(0x45bb71d6, 0x6f23e0ef),
+ TOBN(0x33789fcd, 0x46cdfdd3), TOBN(0x9b8e2978, 0xcee040ca),
+ TOBN(0x9c69b246, 0xae0a6828), TOBN(0xba533d24, 0x7078d5aa),
+ TOBN(0x7a2e42c0, 0x7bb4fbdb), TOBN(0xcfb4879a, 0x7035385c),
+ TOBN(0x8c3dd30b, 0x3281705b), TOBN(0x7e361c6c, 0x404fe081),
+ TOBN(0x7b21649c, 0x3f604edf), TOBN(0x5dbf6a3f, 0xe52ffe47),
+ TOBN(0xc41b7c23, 0x4b54d9bf), TOBN(0x1374e681, 0x3511c3d9),
+ TOBN(0x1863bf16, 0xc1b2b758), TOBN(0x90e78507, 0x1e9e6a96),
+ TOBN(0xab4bf98d, 0x5d86f174), TOBN(0xd74e0bd3, 0x85e96fe4),
+ TOBN(0x8afde39f, 0xcac5d344), TOBN(0x90946dbc, 0xbd91b847),
+ TOBN(0xf5b42358, 0xfe1a838c), TOBN(0x05aae6c5, 0x620ac9d8),
+ TOBN(0x8e193bd8, 0xa1ce5a0b), TOBN(0x8f710571, 0x4dabfd72),
+ TOBN(0x8d8fdd48, 0x182caaac), TOBN(0x8c4aeefa, 0x040745cf),
+ TOBN(0x73c6c30a, 0xf3b93e6d), TOBN(0x991241f3, 0x16f42011),
+ TOBN(0xa0158eea, 0xe457a477), TOBN(0xd19857db, 0xee6ddc05),
+ TOBN(0xb3265224, 0x18c41671), TOBN(0x3ffdfc7e, 0x3c2c0d58),
+ TOBN(0x3a3a5254, 0x26ee7cda), TOBN(0x341b0869, 0xdf02c3a8),
+ TOBN(0xa023bf42, 0x723bbfc8), TOBN(0x3d15002a, 0x14452691),}
+ ,
+ {TOBN(0x5ef7324c, 0x85edfa30), TOBN(0x25976554, 0x87d4f3da),
+ TOBN(0x352f5bc0, 0xdcb50c86), TOBN(0x8f6927b0, 0x4832a96c),
+ TOBN(0xd08ee1ba, 0x55f2f94c), TOBN(0x6a996f99, 0x344b45fa),
+ TOBN(0xe133cb8d, 0xa8aa455d), TOBN(0x5d0721ec, 0x758dc1f7),
+ TOBN(0x6ba7a920, 0x79e5fb67), TOBN(0xe1331feb, 0x70aa725e),
+ TOBN(0x5080ccf5, 0x7df5d837), TOBN(0xe4cae01d, 0x7ff72e21),
+ TOBN(0xd9243ee6, 0x0412a77d), TOBN(0x06ff7cac, 0xdf449025),
+ TOBN(0xbe75f7cd, 0x23ef5a31), TOBN(0xbc957822, 0x0ddef7a8),
+ TOBN(0x8cf7230c, 0xb0ce1c55), TOBN(0x5b534d05, 0x0bbfb607),
+ TOBN(0xee1ef113, 0x0e16363b), TOBN(0x27e0aa7a, 0xb4999e82),
+ TOBN(0xce1dac2d, 0x79362c41), TOBN(0x67920c90, 0x91bb6cb0),
+ TOBN(0x1e648d63, 0x2223df24), TOBN(0x0f7d9eef, 0xe32e8f28),
+ TOBN(0x6943f39a, 0xfa833834), TOBN(0x22951722, 0xa6328562),
+ TOBN(0x81d63dd5, 0x4170fc10), TOBN(0x9f5fa58f, 0xaecc2e6d),
+ TOBN(0xb66c8725, 0xe77d9a3b), TOBN(0x11235cea, 0x6384ebe0),
+ TOBN(0x06a8c118, 0x5845e24a), TOBN(0x0137b286, 0xebd093b1),
+ TOBN(0xc589e1ce, 0x44ace150), TOBN(0xe0f8d3d9, 0x4381e97c),
+ TOBN(0x59e99b11, 0x62c5a4b8), TOBN(0x90d262f7, 0xfd0ec9f9),
+ TOBN(0xfbc854c9, 0x283e13c9), TOBN(0x2d04fde7, 0xaedc7085),
+ TOBN(0x057d7765, 0x47dcbecb), TOBN(0x8dbdf591, 0x9a76fa5f),
+ TOBN(0xd0150695, 0x0de1e578), TOBN(0x2e1463e7, 0xe9f72bc6),
+ TOBN(0xffa68441, 0x1b39eca5), TOBN(0x673c8530, 0x7c037f2f),
+ TOBN(0xd0d6a600, 0x747f91da), TOBN(0xb08d43e1, 0xc9cb78e9),
+ TOBN(0x0fc0c644, 0x27b5cef5), TOBN(0x5c1d160a, 0xa60a2fd6),
+ TOBN(0xf98cae53, 0x28c8e13b), TOBN(0x375f10c4, 0xb2eddcd1),
+ TOBN(0xd4eb8b7f, 0x5cce06ad), TOBN(0xb4669f45, 0x80a2e1ef),
+ TOBN(0xd593f9d0, 0x5bbd8699), TOBN(0x5528a4c9, 0xe7976d13),
+ TOBN(0x3923e095, 0x1c7e28d3), TOBN(0xb9293790, 0x3f6bb577),
+ TOBN(0xdb567d6a, 0xc42bd6d2), TOBN(0x6df86468, 0xbb1f96ae),
+ TOBN(0x0efe5b1a, 0x4843b28e), TOBN(0x961bbb05, 0x6379b240),
+ TOBN(0xb6caf5f0, 0x70a6a26b), TOBN(0x70686c0d, 0x328e6e39),
+ TOBN(0x80da06cf, 0x895fc8d3), TOBN(0x804d8810, 0xb363fdc9),
+ TOBN(0xbe22877b, 0x207f1670), TOBN(0x9b0dd188, 0x4e615291),
+ TOBN(0x625ae8dc, 0x97a3c2bf), TOBN(0x08584ef7, 0x439b86e8),
+ TOBN(0xde7190a5, 0xdcd898ff), TOBN(0x26286c40, 0x2058ee3d),
+ TOBN(0x3db0b217, 0x5f87b1c1), TOBN(0xcc334771, 0x102a6db5),
+ TOBN(0xd99de954, 0x2f770fb1), TOBN(0x97c1c620, 0x4cd7535e),
+ TOBN(0xd3b6c448, 0x3f09cefc), TOBN(0xd725af15, 0x5a63b4f8),
+ TOBN(0x0c95d24f, 0xc01e20ec), TOBN(0xdfd37494, 0x9ae7121f),
+ TOBN(0x7d6ddb72, 0xec77b7ec), TOBN(0xfe079d3b, 0x0353a4ae),
+ TOBN(0x3066e70a, 0x2e6ac8d2), TOBN(0x9c6b5a43, 0x106e5c05),
+ TOBN(0x52d3c6f5, 0xede59b8c), TOBN(0x30d6a5c3, 0xfccec9ae),
+ TOBN(0xedec7c22, 0x4fc0a9ef), TOBN(0x190ff083, 0x95c16ced),
+ TOBN(0xbe12ec8f, 0x94de0fde), TOBN(0x0d131ab8, 0x852d3433),
+ TOBN(0x42ace07e, 0x85701291), TOBN(0x94793ed9, 0x194061a8),
+ TOBN(0x30e83ed6, 0xd7f4a485), TOBN(0x9eec7269, 0xf9eeff4d),
+ TOBN(0x90acba59, 0x0c9d8005), TOBN(0x5feca458, 0x1e79b9d1),
+ TOBN(0x8fbe5427, 0x1d506a1e), TOBN(0xa32b2c8e, 0x2439cfa7),
+ TOBN(0x1671c173, 0x73dd0b4e), TOBN(0x37a28214, 0x44a054c6),
+ TOBN(0x81760a1b, 0x4e8b53f1), TOBN(0xa6c04224, 0xf9f93b9e),
+ TOBN(0x18784b34, 0xcf671e3c), TOBN(0x81bbecd2, 0xcda9b994),
+ TOBN(0x38831979, 0xb2ab3848), TOBN(0xef54feb7, 0xf2e03c2d),
+ TOBN(0xcf197ca7, 0xfb8088fa), TOBN(0x01427247, 0x4ddc96c5),
+ TOBN(0xa2d2550a, 0x30777176), TOBN(0x53469898, 0x4d0cf71d),
+ TOBN(0x6ce937b8, 0x3a2aaac6), TOBN(0xe9f91dc3, 0x5af38d9b),
+ TOBN(0x2598ad83, 0xc8bf2899), TOBN(0x8e706ac9, 0xb5536c16),
+ TOBN(0x40dc7495, 0xf688dc98), TOBN(0x26490cd7, 0x124c4afc),
+ TOBN(0xe651ec84, 0x1f18775c), TOBN(0x393ea6c3, 0xb4fdaf4a),
+ TOBN(0x1e1f3343, 0x7f338e0d), TOBN(0x39fb832b, 0x6053e7b5),
+ TOBN(0x46e702da, 0x619e14d5), TOBN(0x859cacd1, 0xcdeef6e0),
+ TOBN(0x63b99ce7, 0x4462007d), TOBN(0xb8ab48a5, 0x4cb5f5b7),
+ TOBN(0x9ec673d2, 0xf55edde7), TOBN(0xd1567f74, 0x8cfaefda),
+ TOBN(0x46381b6b, 0x0887bcec), TOBN(0x694497ce, 0xe178f3c2),
+ TOBN(0x5e6525e3, 0x1e6266cb), TOBN(0x5931de26, 0x697d6413),
+ TOBN(0x87f8df7c, 0x0e58d493), TOBN(0xb1ae5ed0, 0x58b73f12),
+ TOBN(0xc368f784, 0xdea0c34d), TOBN(0x9bd0a120, 0x859a91a0),
+ TOBN(0xb00d88b7, 0xcc863c68), TOBN(0x3a1cc11e, 0x3d1f4d65),
+ TOBN(0xea38e0e7, 0x0aa85593), TOBN(0x37f13e98, 0x7dc4aee8),
+ TOBN(0x10d38667, 0xbc947bad), TOBN(0x738e07ce, 0x2a36ee2e),
+ TOBN(0xc93470cd, 0xc577fcac), TOBN(0xdee1b616, 0x2782470d),
+ TOBN(0x36a25e67, 0x2e793d12), TOBN(0xd6aa6cae, 0xe0f186da),
+ TOBN(0x474d0fd9, 0x80e07af7), TOBN(0xf7cdc47d, 0xba8a5cd4),
+ TOBN(0x28af6d9d, 0xab15247f), TOBN(0x7c789c10, 0x493a537f),
+ TOBN(0x7ac9b110, 0x23a334e7), TOBN(0x0236ac09, 0x12c9c277),
+ TOBN(0xa7e5bd25, 0x1d7a5144), TOBN(0x098b9c2a, 0xf13ec4ec),
+ TOBN(0x3639daca, 0xd3f0abca), TOBN(0x642da81a, 0xa23960f9),
+ TOBN(0x7d2e5c05, 0x4f7269b1), TOBN(0xfcf30777, 0xe287c385),
+ TOBN(0x10edc84f, 0xf2a46f21), TOBN(0x35441757, 0x4f43fa36),
+ TOBN(0xf1327899, 0xfd703431), TOBN(0xa438d7a6, 0x16dd587a),
+ TOBN(0x65c34c57, 0xe9c8352d), TOBN(0xa728edab, 0x5cc5a24e),
+ TOBN(0xaed78abc, 0x42531689), TOBN(0x0a51a0e8, 0x010963ef),
+ TOBN(0x5776fa0a, 0xd717d9b3), TOBN(0xf356c239, 0x7dd3428b),
+ TOBN(0x29903fff, 0x8d3a3dac), TOBN(0x409597fa, 0x3d94491f),
+ TOBN(0x4cd7a5ff, 0xbf4a56a4), TOBN(0xe5096474, 0x8adab462),
+ TOBN(0xa97b5126, 0x5c3427b0), TOBN(0x6401405c, 0xd282c9bd),
+ TOBN(0x3629f8d7, 0x222c5c45), TOBN(0xb1c02c16, 0xe8d50aed),
+ TOBN(0xbea2ed75, 0xd9635bc9), TOBN(0x226790c7, 0x6e24552f),
+ TOBN(0x3c33f2a3, 0x65f1d066), TOBN(0x2a43463e, 0x6dfccc2e),
+ TOBN(0x8cc3453a, 0xdb483761), TOBN(0xe7cc6085, 0x65d5672b),
+ TOBN(0x277ed6cb, 0xde3efc87), TOBN(0x19f2f368, 0x69234eaf),
+ TOBN(0x9aaf4317, 0x5c0b800b), TOBN(0x1f1e7c89, 0x8b6da6e2),
+ TOBN(0x6cfb4715, 0xb94ec75e), TOBN(0xd590dd5f, 0x453118c2),
+ TOBN(0x14e49da1, 0x1f17a34c), TOBN(0x5420ab39, 0x235a1456),
+ TOBN(0xb7637241, 0x2f50363b), TOBN(0x7b15d623, 0xc3fabb6e),
+ TOBN(0xa0ef40b1, 0xe274e49c), TOBN(0x5cf50744, 0x96b1860a),
+ TOBN(0xd6583fbf, 0x66afe5a4), TOBN(0x44240510, 0xf47e3e9a),
+ TOBN(0x99254343, 0x11b2d595), TOBN(0xf1367499, 0xeec8df57),
+ TOBN(0x3cb12c61, 0x3e73dd05), TOBN(0xd248c033, 0x7dac102a),
+ TOBN(0xcf154f13, 0xa77739f5), TOBN(0xbf4288cb, 0x23d2af42),
+ TOBN(0xaa64c9b6, 0x32e4a1cf), TOBN(0xee8c07a8, 0xc8a208f3),
+ TOBN(0xe10d4999, 0x6fe8393f), TOBN(0x0f809a3f, 0xe91f3a32),
+ TOBN(0x61096d1c, 0x802f63c8), TOBN(0x289e1462, 0x57750d3d),
+ TOBN(0xed06167e, 0x9889feea), TOBN(0xd5c9c0e2, 0xe0993909),
+ TOBN(0x46fca0d8, 0x56508ac6), TOBN(0x91826047, 0x4f1b8e83),
+ TOBN(0x4f2c877a, 0x9a4a2751), TOBN(0x71bd0072, 0xcae6fead),
+ TOBN(0x38df8dcc, 0x06aa1941), TOBN(0x5a074b4c, 0x63beeaa8),
+ TOBN(0xd6d65934, 0xc1cec8ed), TOBN(0xa6ecb49e, 0xaabc03bd),
+ TOBN(0xaade91c2, 0xde8a8415), TOBN(0xcfb0efdf, 0x691136e0),
+ TOBN(0x11af45ee, 0x23ab3495), TOBN(0xa132df88, 0x0b77463d),
+ TOBN(0x8923c15c, 0x815d06f4), TOBN(0xc3ceb3f5, 0x0d61a436),
+ TOBN(0xaf52291d, 0xe88fb1da), TOBN(0xea057974, 0x1da12179),
+ TOBN(0xb0d7218c, 0xd2fef720), TOBN(0x6c0899c9, 0x8e1d8845),
+ TOBN(0x98157504, 0x752ddad7), TOBN(0xd60bd74f, 0xa1a68a97),
+ TOBN(0x7047a3a9, 0xf658fb99), TOBN(0x1f5d86d6, 0x5f8511e4),
+ TOBN(0xb8a4bc42, 0x4b5a6d88), TOBN(0x69eb2c33, 0x1abefa7d),
+ TOBN(0x95bf39e8, 0x13c9c510), TOBN(0xf571960a, 0xd48aab43),
+ TOBN(0x7e8cfbcf, 0x704e23c6), TOBN(0xc71b7d22, 0x28aaa65b),
+ TOBN(0xa041b2bd, 0x245e3c83), TOBN(0x69b98834, 0xd21854ff),
+ TOBN(0x89d227a3, 0x963bfeec), TOBN(0x99947aaa, 0xde7da7cb),
+ TOBN(0x1d9ee9db, 0xee68a9b1), TOBN(0x0a08f003, 0x698ec368),
+ TOBN(0xe9ea4094, 0x78ef2487), TOBN(0xc8d2d415, 0x02cfec26),
+ TOBN(0xc52f9a6e, 0xb7dcf328), TOBN(0x0ed489e3, 0x85b6a937),
+ TOBN(0x9b94986b, 0xbef3366e), TOBN(0x0de59c70, 0xedddddb8),
+ TOBN(0xffdb748c, 0xeadddbe2), TOBN(0x9b9784bb, 0x8266ea40),
+ TOBN(0x142b5502, 0x1a93507a), TOBN(0xb4cd1187, 0x8d3c06cf),
+ TOBN(0xdf70e76a, 0x91ec3f40), TOBN(0x484e81ad, 0x4e7553c2),
+ TOBN(0x830f87b5, 0x272e9d6e), TOBN(0xea1c93e5, 0xc6ff514a),
+ TOBN(0x67cc2adc, 0xc4192a8e), TOBN(0xc77e27e2, 0x42f4535a),
+ TOBN(0x9cdbab36, 0xd2b713c5), TOBN(0x86274ea0, 0xcf7b0cd3),
+ TOBN(0x784680f3, 0x09af826b), TOBN(0xbfcc837a, 0x0c72dea3),
+ TOBN(0xa8bdfe9d, 0xd6529b73), TOBN(0x708aa228, 0x63a88002),
+ TOBN(0x6c7a9a54, 0xc91d45b9), TOBN(0xdf1a38bb, 0xfd004f56),
+ TOBN(0x2e8c9a26, 0xb8bad853), TOBN(0x2d52cea3, 0x3723eae7),
+ TOBN(0x054d6d81, 0x56ca2830), TOBN(0xa3317d14, 0x9a8dc411),
+ TOBN(0xa08662fe, 0xfd4ddeda), TOBN(0xed2a153a, 0xb55d792b),
+ TOBN(0x7035c16a, 0xbfc6e944), TOBN(0xb6bc5834, 0x00171cf3),
+ TOBN(0xe27152b3, 0x83d102b6), TOBN(0xfe695a47, 0x0646b848),
+ TOBN(0xa5bb09d8, 0x916e6d37), TOBN(0xb4269d64, 0x0d17015e),
+ TOBN(0x8d8156a1, 0x0a1d2285), TOBN(0xfeef6c51, 0x46d26d72),
+ TOBN(0x9dac57c8, 0x4c5434a7), TOBN(0x0282e5be, 0x59d39e31),
+ TOBN(0xedfff181, 0x721c486d), TOBN(0x301baf10, 0xbc58824e),
+ TOBN(0x8136a6aa, 0x00570031), TOBN(0x55aaf78c, 0x1cddde68),
+ TOBN(0x26829371, 0x59c63952), TOBN(0x3a3bd274, 0x8bc25baf),
+ TOBN(0xecdf8657, 0xb7e52dc3), TOBN(0x2dd8c087, 0xfd78e6c8),
+ TOBN(0x20553274, 0xf5531461), TOBN(0x8b4a1281, 0x5d95499b),
+ TOBN(0xe2c8763a, 0x1a80f9d2), TOBN(0xd1dbe32b, 0x4ddec758),
+ TOBN(0xaf12210d, 0x30c34169), TOBN(0xba74a953, 0x78baa533),
+ TOBN(0x3d133c6e, 0xa438f254), TOBN(0xa431531a, 0x201bef5b),
+ TOBN(0x15295e22, 0xf669d7ec), TOBN(0xca374f64, 0x357fb515),
+ TOBN(0x8a8406ff, 0xeaa3fdb3), TOBN(0x106ae448, 0xdf3f2da8),
+ TOBN(0x8f9b0a90, 0x33c8e9a1), TOBN(0x234645e2, 0x71ad5885),
+ TOBN(0x3d083224, 0x1c0aed14), TOBN(0xf10a7d3e, 0x7a942d46),
+ TOBN(0x7c11deee, 0x40d5c9be), TOBN(0xb2bae7ff, 0xba84ed98),
+ TOBN(0x93e97139, 0xaad58ddd), TOBN(0x3d872796, 0x3f6d1fa3),
+ TOBN(0x483aca81, 0x8569ff13), TOBN(0x8b89a5fb, 0x9a600f72),
+ TOBN(0x4cbc27c3, 0xc06f2b86), TOBN(0x22130713, 0x63ad9c0b),
+ TOBN(0xb5358b1e, 0x48ac2840), TOBN(0x18311294, 0xecba9477),
+ TOBN(0xda58f990, 0xa6946b43), TOBN(0x3098baf9, 0x9ab41819),
+ TOBN(0x66c4c158, 0x4198da52), TOBN(0xab4fc17c, 0x146bfd1b),
+ TOBN(0x2f0a4c3c, 0xbf36a908), TOBN(0x2ae9e34b, 0x58cf7838),
+ TOBN(0xf411529e, 0x3fa11b1f), TOBN(0x21e43677, 0x974af2b4),
+ TOBN(0x7c20958e, 0xc230793b), TOBN(0x710ea885, 0x16e840f3),
+ TOBN(0xfc0b21fc, 0xc5dc67cf), TOBN(0x08d51647, 0x88405718),
+ TOBN(0xd955c21f, 0xcfe49eb7), TOBN(0x9722a5d5, 0x56dd4a1f),
+ TOBN(0xc9ef50e2, 0xc861baa5), TOBN(0xc0c21a5d, 0x9505ac3e),
+ TOBN(0xaf6b9a33, 0x8b7c063f), TOBN(0xc6370339, 0x2f4779c1),
+ TOBN(0x22df99c7, 0x638167c3), TOBN(0xfe6ffe76, 0x795db30c),
+ TOBN(0x2b822d33, 0xa4854989), TOBN(0xfef031dd, 0x30563aa5),
+ TOBN(0x16b09f82, 0xd57c667f), TOBN(0xc70312ce, 0xcc0b76f1),
+ TOBN(0xbf04a9e6, 0xc9118aec), TOBN(0x82fcb419, 0x3409d133),
+ TOBN(0x1a8ab385, 0xab45d44d), TOBN(0xfba07222, 0x617b83a3),
+ TOBN(0xb05f50dd, 0x58e81b52), TOBN(0x1d8db553, 0x21ce5aff),
+ TOBN(0x3097b8d4, 0xe344a873), TOBN(0x7d8d116d, 0xfe36d53e),
+ TOBN(0x6db22f58, 0x7875e750), TOBN(0x2dc5e373, 0x43e144ea),
+ TOBN(0xc05f32e6, 0xe799eb95), TOBN(0xe9e5f4df, 0x6899e6ec),
+ TOBN(0xbdc3bd68, 0x1fab23d5), TOBN(0xb72b8ab7, 0x73af60e6),
+ TOBN(0x8db27ae0, 0x2cecc84a), TOBN(0x600016d8, 0x7bdb871c),
+ TOBN(0x42a44b13, 0xd7c46f58), TOBN(0xb8919727, 0xc3a77d39),
+ TOBN(0xcfc6bbbd, 0xdafd6088), TOBN(0x1a740146, 0x6bd20d39),
+ TOBN(0x8c747abd, 0x98c41072), TOBN(0x4c91e765, 0xbdf68ea1),
+ TOBN(0x7c95e5ca, 0x08819a78), TOBN(0xcf48b729, 0xc9587921),
+ TOBN(0x091c7c5f, 0xdebbcc7d), TOBN(0x6f287404, 0xf0e05149),
+ TOBN(0xf83b5ac2, 0x26cd44ec), TOBN(0x88ae32a6, 0xcfea250e),
+ TOBN(0x6ac5047a, 0x1d06ebc5), TOBN(0xc7e550b4, 0xd434f781),
+ TOBN(0x61ab1cf2, 0x5c727bd2), TOBN(0x2e4badb1, 0x1cf915b0),
+ TOBN(0x1b4dadec, 0xf69d3920), TOBN(0xe61b1ca6, 0xf14c1dfe),
+ TOBN(0x90b479cc, 0xbd6bd51f), TOBN(0x8024e401, 0x8045ec30),
+ TOBN(0xcab29ca3, 0x25ef0e62), TOBN(0x4f2e9416, 0x49e4ebc0),
+ TOBN(0x45eb40ec, 0x0ccced58), TOBN(0x25cd4b9c, 0x0da44f98),
+ TOBN(0x43e06458, 0x871812c6), TOBN(0x99f80d55, 0x16cef651),
+ TOBN(0x571340c9, 0xce6dc153), TOBN(0x138d5117, 0xd8665521),
+ TOBN(0xacdb45bc, 0x4e07014d), TOBN(0x2f34bb38, 0x84b60b91),
+ TOBN(0xf44a4fd2, 0x2ae8921e), TOBN(0xb039288e, 0x892ba1e2),
+ TOBN(0x9da50174, 0xb1c180b2), TOBN(0x6b70ab66, 0x1693dc87),
+ TOBN(0x7e9babc9, 0xe7057481), TOBN(0x4581ddef, 0x9c80dc41),
+ TOBN(0x0c890da9, 0x51294682), TOBN(0x0b5629d3, 0x3f4736e5),
+ TOBN(0x2340c79e, 0xb06f5b41), TOBN(0xa42e84ce, 0x4e243469),
+ TOBN(0xf9a20135, 0x045a71a9), TOBN(0xefbfb415, 0xd27b6fb6),
+ TOBN(0x25ebea23, 0x9d33cd6f), TOBN(0x9caedb88, 0xaa6c0af8),
+ TOBN(0x53dc7e9a, 0xd9ce6f96), TOBN(0x3897f9fd, 0x51e0b15a),
+ TOBN(0xf51cb1f8, 0x8e5d788e), TOBN(0x1aec7ba8, 0xe1d490ee),
+ TOBN(0x265991e0, 0xcc58cb3c), TOBN(0x9f306e8c, 0x9fc3ad31),
+ TOBN(0x5fed006e, 0x5040a0ac), TOBN(0xca9d5043, 0xfb476f2e),
+ TOBN(0xa19c06e8, 0xbeea7a23), TOBN(0xd2865801, 0x0edabb63),
+ TOBN(0xdb92293f, 0x6967469a), TOBN(0x2894d839, 0x8d8a8ed8),
+ TOBN(0x87c9e406, 0xbbc77122), TOBN(0x8671c6f1, 0x2ea3a26a),
+ TOBN(0xe42df8d6, 0xd7de9853), TOBN(0x2e3ce346, 0xb1f2bcc7),
+ TOBN(0xda601dfc, 0x899d50cf), TOBN(0xbfc913de, 0xfb1b598f),
+ TOBN(0x81c4909f, 0xe61f7908), TOBN(0x192e304f, 0x9bbc7b29),
+ TOBN(0xc3ed8738, 0xc104b338), TOBN(0xedbe9e47, 0x783f5d61),
+ TOBN(0x0c06e9be, 0x2db30660), TOBN(0xda3e613f, 0xc0eb7d8e),
+ TOBN(0xd8fa3e97, 0x322e096e), TOBN(0xfebd91e8, 0xd336e247),
+ TOBN(0x8f13ccc4, 0xdf655a49), TOBN(0xa9e00dfc, 0x5eb20210),
+ TOBN(0x84631d0f, 0xc656b6ea), TOBN(0x93a058cd, 0xd8c0d947),
+ TOBN(0x6846904a, 0x67bd3448), TOBN(0x4a3d4e1a, 0xf394fd5c),
+ TOBN(0xc102c1a5, 0xdb225f52), TOBN(0xe3455bba, 0xfc4f5e9a),
+ TOBN(0x6b36985b, 0x4b9ad1ce), TOBN(0xa9818536, 0x5bb7f793),
+ TOBN(0x6c25e1d0, 0x48b1a416), TOBN(0x1381dd53, 0x3c81bee7),
+ TOBN(0xd2a30d61, 0x7a4a7620), TOBN(0xc8412926, 0x39b8944c),
+ TOBN(0x3c1c6fbe, 0x7a97c33a), TOBN(0x941e541d, 0x938664e7),
+ TOBN(0x417499e8, 0x4a34f239), TOBN(0x15fdb83c, 0xb90402d5),
+ TOBN(0xb75f46bf, 0x433aa832), TOBN(0xb61e15af, 0x63215db1),
+ TOBN(0xaabe59d4, 0xa127f89a), TOBN(0x5d541e0c, 0x07e816da),
+ TOBN(0xaaba0659, 0xa618b692), TOBN(0x55327733, 0x17266026),
+ TOBN(0xaf53a0fc, 0x95f57552), TOBN(0x32947650, 0x6cacb0c9),
+ TOBN(0x253ff58d, 0xc821be01), TOBN(0xb0309531, 0xa06f1146),
+ TOBN(0x59bbbdf5, 0x05c2e54d), TOBN(0x158f27ad, 0x26e8dd22),
+ TOBN(0xcc5b7ffb, 0x397e1e53), TOBN(0xae03f65b, 0x7fc1e50d),
+ TOBN(0xa9784ebd, 0x9c95f0f9), TOBN(0x5ed9deb2, 0x24640771),
+ TOBN(0x31244af7, 0x035561c4), TOBN(0x87332f3a, 0x7ee857de),
+ TOBN(0x09e16e9e, 0x2b9e0d88), TOBN(0x52d910f4, 0x56a06049),
+ TOBN(0x507ed477, 0xa9592f48), TOBN(0x85cb917b, 0x2365d678),
+ TOBN(0xf8511c93, 0x4c8998d1), TOBN(0x2186a3f1, 0x730ea58f),
+ TOBN(0x50189626, 0xb2029db0), TOBN(0x9137a6d9, 0x02ceb75a),
+ TOBN(0x2fe17f37, 0x748bc82c), TOBN(0x87c2e931, 0x80469f8c),
+ TOBN(0x850f71cd, 0xbf891aa2), TOBN(0x0ca1b89b, 0x75ec3d8d),
+ TOBN(0x516c43aa, 0x5e1cd3cd), TOBN(0x89397808, 0x9a887c28),
+ TOBN(0x0059c699, 0xddea1f9f), TOBN(0x7737d6fa, 0x8e6868f7),
+ TOBN(0x6d93746a, 0x60f1524b), TOBN(0x36985e55, 0xba052aa7),
+ TOBN(0x41b1d322, 0xed923ea5), TOBN(0x3429759f, 0x25852a11),
+ TOBN(0xbeca6ec3, 0x092e9f41), TOBN(0x3a238c66, 0x62256bbd),
+ TOBN(0xd82958ea, 0x70ad487d), TOBN(0x4ac8aaf9, 0x65610d93),
+ TOBN(0x3fa101b1, 0x5e4ccab0), TOBN(0x9bf430f2, 0x9de14bfb),
+ TOBN(0xa10f5cc6, 0x6531899d), TOBN(0x590005fb, 0xea8ce17d),
+ TOBN(0xc437912f, 0x24544cb6), TOBN(0x9987b71a, 0xd79ac2e3),
+ TOBN(0x13e3d9dd, 0xc058a212), TOBN(0x00075aac, 0xd2de9606),
+ TOBN(0x80ab508b, 0x6cac8369), TOBN(0x87842be7, 0xf54f6c89),
+ TOBN(0xa7ad663d, 0x6bc532a4), TOBN(0x67813de7, 0x78a91bc8),
+ TOBN(0x5dcb61ce, 0xc3427239), TOBN(0x5f3c7cf0, 0xc56934d9),
+ TOBN(0xc079e0fb, 0xe3191591), TOBN(0xe40896bd, 0xb01aada7),
+ TOBN(0x8d466791, 0x0492d25f), TOBN(0x8aeb30c9, 0xe7408276),
+ TOBN(0xe9437495, 0x9287aacc), TOBN(0x23d4708d, 0x79fe03d4),
+ TOBN(0x8cda9cf2, 0xd0c05199), TOBN(0x502fbc22, 0xfae78454),
+ TOBN(0xc0bda9df, 0xf572a182), TOBN(0x5f9b71b8, 0x6158b372),
+ TOBN(0xe0f33a59, 0x2b82dd07), TOBN(0x76302735, 0x9523032e),
+ TOBN(0x7fe1a721, 0xc4505a32), TOBN(0x7b6e3e82, 0xf796409f),}
+ ,
+ {TOBN(0xe3417bc0, 0x35d0b34a), TOBN(0x440b386b, 0x8327c0a7),
+ TOBN(0x8fb7262d, 0xac0362d1), TOBN(0x2c41114c, 0xe0cdf943),
+ TOBN(0x2ba5cef1, 0xad95a0b1), TOBN(0xc09b37a8, 0x67d54362),
+ TOBN(0x26d6cdd2, 0x01e486c9), TOBN(0x20477abf, 0x42ff9297),
+ TOBN(0xa004dcb3, 0x292a9287), TOBN(0xddc15cf6, 0x77b092c7),
+ TOBN(0x083a8464, 0x806c0605), TOBN(0x4a68df70, 0x3db997b0),
+ TOBN(0x9c134e45, 0x05bf7dd0), TOBN(0xa4e63d39, 0x8ccf7f8c),
+ TOBN(0xa6e6517f, 0x41b5f8af), TOBN(0xaa8b9342, 0xad7bc1cc),
+ TOBN(0x126f35b5, 0x1e706ad9), TOBN(0xb99cebb4, 0xc3a9ebdf),
+ TOBN(0xa75389af, 0xbf608d90), TOBN(0x76113c4f, 0xc6c89858),
+ TOBN(0x80de8eb0, 0x97e2b5aa), TOBN(0x7e1022cc, 0x63b91304),
+ TOBN(0x3bdab605, 0x6ccc066c), TOBN(0x33cbb144, 0xb2edf900),
+ TOBN(0xc4176471, 0x7af715d2), TOBN(0xe2f7f594, 0xd0134a96),
+ TOBN(0x2c1873ef, 0xa41ec956), TOBN(0xe4e7b4f6, 0x77821304),
+ TOBN(0xe5c8ff97, 0x88d5374a), TOBN(0x2b915e63, 0x80823d5b),
+ TOBN(0xea6bc755, 0xb2ee8fe2), TOBN(0x6657624c, 0xe7112651),
+ TOBN(0x157af101, 0xdace5aca), TOBN(0xc4fdbcf2, 0x11a6a267),
+ TOBN(0xdaddf340, 0xc49c8609), TOBN(0x97e49f52, 0xe9604a65),
+ TOBN(0x9be8e790, 0x937e2ad5), TOBN(0x846e2508, 0x326e17f1),
+ TOBN(0x3f38007a, 0x0bbbc0dc), TOBN(0xcf03603f, 0xb11e16d6),
+ TOBN(0xd6f800e0, 0x7442f1d5), TOBN(0x475607d1, 0x66e0e3ab),
+ TOBN(0x82807f16, 0xb7c64047), TOBN(0x8858e1e3, 0xa749883d),
+ TOBN(0x5859120b, 0x8231ee10), TOBN(0x1b80e7eb, 0x638a1ece),
+ TOBN(0xcb72525a, 0xc6aa73a4), TOBN(0xa7cdea3d, 0x844423ac),
+ TOBN(0x5ed0c007, 0xf8ae7c38), TOBN(0x6db07a5c, 0x3d740192),
+ TOBN(0xbe5e9c2a, 0x5fe36db3), TOBN(0xd5b9d57a, 0x76e95046),
+ TOBN(0x54ac32e7, 0x8eba20f2), TOBN(0xef11ca8f, 0x71b9a352),
+ TOBN(0x305e373e, 0xff98a658), TOBN(0xffe5a100, 0x823eb667),
+ TOBN(0x57477b11, 0xe51732d2), TOBN(0xdfd6eb28, 0x2538fc0e),
+ TOBN(0x5c43b0cc, 0x3b39eec5), TOBN(0x6af12778, 0xcb36cc57),
+ TOBN(0x70b0852d, 0x06c425ae), TOBN(0x6df92f8c, 0x5c221b9b),
+ TOBN(0x6c8d4f9e, 0xce826d9c), TOBN(0xf59aba7b, 0xb49359c3),
+ TOBN(0x5c8ed8d5, 0xda64309d), TOBN(0x61a6de56, 0x91b30704),
+ TOBN(0xd6b52f6a, 0x2f9b5808), TOBN(0x0eee4194, 0x98c958a7),
+ TOBN(0xcddd9aab, 0x771e4caa), TOBN(0x83965dfd, 0x78bc21be),
+ TOBN(0x02affce3, 0xb3b504f5), TOBN(0x30847a21, 0x561c8291),
+ TOBN(0xd2eb2cf1, 0x52bfda05), TOBN(0xe0e4c4e9, 0x6197b98c),
+ TOBN(0x1d35076c, 0xf8a1726f), TOBN(0x6c06085b, 0x2db11e3d),
+ TOBN(0x15c0c4d7, 0x4463ba14), TOBN(0x9d292f83, 0x0030238c),
+ TOBN(0x1311ee8b, 0x3727536d), TOBN(0xfeea86ef, 0xbeaedc1e),
+ TOBN(0xb9d18cd3, 0x66131e2e), TOBN(0xf31d974f, 0x80fe2682),
+ TOBN(0xb6e49e0f, 0xe4160289), TOBN(0x7c48ec0b, 0x08e92799),
+ TOBN(0x818111d8, 0xd1989aa7), TOBN(0xb34fa0aa, 0xebf926f9),
+ TOBN(0xdb5fe2f5, 0xa245474a), TOBN(0xf80a6ebb, 0x3c7ca756),
+ TOBN(0xa7f96054, 0xafa05dd8), TOBN(0x26dfcf21, 0xfcaf119e),
+ TOBN(0xe20ef2e3, 0x0564bb59), TOBN(0xef4dca50, 0x61cb02b8),
+ TOBN(0xcda7838a, 0x65d30672), TOBN(0x8b08d534, 0xfd657e86),
+ TOBN(0x4c5b4395, 0x46d595c8), TOBN(0x39b58725, 0x425cb836),
+ TOBN(0x8ea61059, 0x3de9abe3), TOBN(0x40434881, 0x9cdc03be),
+ TOBN(0x9b261245, 0xcfedce8c), TOBN(0x78c318b4, 0xcf5234a1),
+ TOBN(0x510bcf16, 0xfde24c99), TOBN(0x2a77cb75, 0xa2c2ff5d),
+ TOBN(0x9c895c2b, 0x27960fb4), TOBN(0xd30ce975, 0xb0eda42b),
+ TOBN(0xfda85393, 0x1a62cc26), TOBN(0x23c69b96, 0x50c0e052),
+ TOBN(0xa227df15, 0xbfc633f3), TOBN(0x2ac78848, 0x1bae7d48),
+ TOBN(0x487878f9, 0x187d073d), TOBN(0x6c2be919, 0x967f807d),
+ TOBN(0x765861d8, 0x336e6d8f), TOBN(0x88b8974c, 0xce528a43),
+ TOBN(0x09521177, 0xff57d051), TOBN(0x2ff38037, 0xfb6a1961),
+ TOBN(0xfc0aba74, 0xa3d76ad4), TOBN(0x7c764803, 0x25a7ec17),
+ TOBN(0x7532d75f, 0x48879bc8), TOBN(0xea7eacc0, 0x58ce6bc1),
+ TOBN(0xc82176b4, 0x8e896c16), TOBN(0x9a30e0b2, 0x2c750fed),
+ TOBN(0xc37e2c2e, 0x421d3aa4), TOBN(0xf926407c, 0xe84fa840),
+ TOBN(0x18abc03d, 0x1454e41c), TOBN(0x26605ecd, 0x3f7af644),
+ TOBN(0x242341a6, 0xd6a5eabf), TOBN(0x1edb84f4, 0x216b668e),
+ TOBN(0xd836edb8, 0x04010102), TOBN(0x5b337ce7, 0x945e1d8c),
+ TOBN(0xd2075c77, 0xc055dc14), TOBN(0x2a0ffa25, 0x81d89cdf),
+ TOBN(0x8ce815ea, 0x6ffdcbaf), TOBN(0xa3428878, 0xfb648867),
+ TOBN(0x277699cf, 0x884655fb), TOBN(0xfa5b5bd6, 0x364d3e41),
+ TOBN(0x01f680c6, 0x441e1cb7), TOBN(0x3fd61e66, 0xb70a7d67),
+ TOBN(0x666ba2dc, 0xcc78cf66), TOBN(0xb3018174, 0x6fdbff77),
+ TOBN(0x8d4dd0db, 0x168d4668), TOBN(0x259455d0, 0x1dab3a2a),
+ TOBN(0xf58564c5, 0xcde3acec), TOBN(0x77141925, 0x13adb276),
+ TOBN(0x527d725d, 0x8a303f65), TOBN(0x55deb6c9, 0xe6f38f7b),
+ TOBN(0xfd5bb657, 0xb1fa70fb), TOBN(0xfa07f50f, 0xd8073a00),
+ TOBN(0xf72e3aa7, 0xbca02500), TOBN(0xf68f895d, 0x9975740d),
+ TOBN(0x30112060, 0x5cae2a6a), TOBN(0x01bd7218, 0x02874842),
+ TOBN(0x3d423891, 0x7ce47bd3), TOBN(0xa66663c1, 0x789544f6),
+ TOBN(0x864d05d7, 0x3272d838), TOBN(0xe22924f9, 0xfa6295c5),
+ TOBN(0x8189593f, 0x6c2fda32), TOBN(0x330d7189, 0xb184b544),
+ TOBN(0x79efa62c, 0xbde1f714), TOBN(0x35771c94, 0xe5cb1a63),
+ TOBN(0x2f4826b8, 0x641c8332), TOBN(0x00a894fb, 0xc8cee854),
+ TOBN(0xb4b9a39b, 0x36194d40), TOBN(0xe857a7c5, 0x77612601),
+ TOBN(0xf4209dd2, 0x4ecf2f58), TOBN(0x82b9e66d, 0x5a033487),
+ TOBN(0xc1e36934, 0xe4e8b9dd), TOBN(0xd2372c9d, 0xa42377d7),
+ TOBN(0x51dc94c7, 0x0e3ae43b), TOBN(0x4c57761e, 0x04474f6f),
+ TOBN(0xdcdacd0a, 0x1058a318), TOBN(0x369cf3f5, 0x78053a9a),
+ TOBN(0xc6c3de50, 0x31c68de2), TOBN(0x4653a576, 0x3c4b6d9f),
+ TOBN(0x1688dd5a, 0xaa4e5c97), TOBN(0x5be80aa1, 0xb7ab3c74),
+ TOBN(0x70cefe7c, 0xbc65c283), TOBN(0x57f95f13, 0x06867091),
+ TOBN(0xa39114e2, 0x4415503b), TOBN(0xc08ff7c6, 0x4cbb17e9),
+ TOBN(0x1eff674d, 0xd7dec966), TOBN(0x6d4690af, 0x53376f63),
+ TOBN(0xff6fe32e, 0xea74237b), TOBN(0xc436d17e, 0xcd57508e),
+ TOBN(0x15aa28e1, 0xedcc40fe), TOBN(0x0d769c04, 0x581bbb44),
+ TOBN(0xc240b6de, 0x34eaacda), TOBN(0xd9e116e8, 0x2ba0f1de),
+ TOBN(0xcbe45ec7, 0x79438e55), TOBN(0x91787c9d, 0x96f752d7),
+ TOBN(0x897f532b, 0xf129ac2f), TOBN(0xd307b7c8, 0x5a36e22c),
+ TOBN(0x91940675, 0x749fb8f3), TOBN(0xd14f95d0, 0x157fdb28),
+ TOBN(0xfe51d029, 0x6ae55043), TOBN(0x8931e98f, 0x44a87de1),
+ TOBN(0xe57f1cc6, 0x09e4fee2), TOBN(0x0d063b67, 0x4e072d92),
+ TOBN(0x70a998b9, 0xed0e4316), TOBN(0xe74a736b, 0x306aca46),
+ TOBN(0xecf0fbf2, 0x4fda97c7), TOBN(0xa40f65cb, 0x3e178d93),
+ TOBN(0x16253604, 0x16df4285), TOBN(0xb0c9babb, 0xd0c56ae2),
+ TOBN(0x73032b19, 0xcfc5cfc3), TOBN(0xe497e5c3, 0x09752056),
+ TOBN(0x12096bb4, 0x164bda96), TOBN(0x1ee42419, 0xa0b74da1),
+ TOBN(0x8fc36243, 0x403826ba), TOBN(0x0c8f0069, 0xdc09e660),
+ TOBN(0x8667e981, 0xc27253c9), TOBN(0x05a6aefb, 0x92b36a45),
+ TOBN(0xa62c4b36, 0x9cb7bb46), TOBN(0x8394f375, 0x11f7027b),
+ TOBN(0x747bc79c, 0x5f109d0f), TOBN(0xcad88a76, 0x5b8cc60a),
+ TOBN(0x80c5a66b, 0x58f09e68), TOBN(0xe753d451, 0xf6127eac),
+ TOBN(0xc44b74a1, 0x5b0ec6f5), TOBN(0x47989fe4, 0x5289b2b8),
+ TOBN(0x745f8484, 0x58d6fc73), TOBN(0xec362a6f, 0xf61c70ab),
+ TOBN(0x070c98a7, 0xb3a8ad41), TOBN(0x73a20fc0, 0x7b63db51),
+ TOBN(0xed2c2173, 0xf44c35f4), TOBN(0x8a56149d, 0x9acc9dca),
+ TOBN(0x98f17881, 0x9ac6e0f4), TOBN(0x360fdeaf, 0xa413b5ed),
+ TOBN(0x0625b8f4, 0xa300b0fd), TOBN(0xf1f4d76a, 0x5b3222d3),
+ TOBN(0x9d6f5109, 0x587f76b8), TOBN(0x8b4ee08d, 0x2317fdb5),
+ TOBN(0x88089bb7, 0x8c68b095), TOBN(0x95570e9a, 0x5808d9b9),
+ TOBN(0xa395c36f, 0x35d33ae7), TOBN(0x200ea123, 0x50bb5a94),
+ TOBN(0x20c789bd, 0x0bafe84b), TOBN(0x243ef52d, 0x0919276a),
+ TOBN(0x3934c577, 0xe23ae233), TOBN(0xb93807af, 0xa460d1ec),
+ TOBN(0xb72a53b1, 0xf8fa76a4), TOBN(0xd8914cb0, 0xc3ca4491),
+ TOBN(0x2e128494, 0x3fb42622), TOBN(0x3b2700ac, 0x500907d5),
+ TOBN(0xf370fb09, 0x1a95ec63), TOBN(0xf8f30be2, 0x31b6dfbd),
+ TOBN(0xf2b2f8d2, 0x69e55f15), TOBN(0x1fead851, 0xcc1323e9),
+ TOBN(0xfa366010, 0xd9e5eef6), TOBN(0x64d487b0, 0xe316107e),
+ TOBN(0x4c076b86, 0xd23ddc82), TOBN(0x03fd344c, 0x7e0143f0),
+ TOBN(0xa95362ff, 0x317af2c5), TOBN(0x0add3db7, 0xe18b7a4f),
+ TOBN(0x9c673e3f, 0x8260e01b), TOBN(0xfbeb49e5, 0x54a1cc91),
+ TOBN(0x91351bf2, 0x92f2e433), TOBN(0xc755e7ec, 0x851141eb),
+ TOBN(0xc9a95139, 0x29607745), TOBN(0x0ca07420, 0xa26f2b28),
+ TOBN(0xcb2790e7, 0x4bc6f9dd), TOBN(0x345bbb58, 0xadcaffc0),
+ TOBN(0xc65ea38c, 0xbe0f27a2), TOBN(0x67c24d7c, 0x641fcb56),
+ TOBN(0x2c25f0a7, 0xa9e2c757), TOBN(0x93f5cdb0, 0x16f16c49),
+ TOBN(0x2ca5a9d7, 0xc5ee30a1), TOBN(0xd1593635, 0xb909b729),
+ TOBN(0x804ce9f3, 0xdadeff48), TOBN(0xec464751, 0xb07c30c3),
+ TOBN(0x89d65ff3, 0x9e49af6a), TOBN(0xf2d6238a, 0x6f3d01bc),
+ TOBN(0x1095561e, 0x0bced843), TOBN(0x51789e12, 0xc8a13fd8),
+ TOBN(0xd633f929, 0x763231df), TOBN(0x46df9f7d, 0xe7cbddef),
+ TOBN(0x01c889c0, 0xcb265da8), TOBN(0xfce1ad10, 0xaf4336d2),
+ TOBN(0x8d110df6, 0xfc6a0a7e), TOBN(0xdd431b98, 0x6da425dc),
+ TOBN(0xcdc4aeab, 0x1834aabe), TOBN(0x84deb124, 0x8439b7fc),
+ TOBN(0x8796f169, 0x3c2a5998), TOBN(0x9b9247b4, 0x7947190d),
+ TOBN(0x55b9d9a5, 0x11597014), TOBN(0x7e9dd70d, 0x7b1566ee),
+ TOBN(0x94ad78f7, 0xcbcd5e64), TOBN(0x0359ac17, 0x9bd4c032),
+ TOBN(0x3b11baaf, 0x7cc222ae), TOBN(0xa6a6e284, 0xba78e812),
+ TOBN(0x8392053f, 0x24cea1a0), TOBN(0xc97bce4a, 0x33621491),
+ TOBN(0x7eb1db34, 0x35399ee9), TOBN(0x473f78ef, 0xece81ad1),
+ TOBN(0x41d72fe0, 0xf63d3d0d), TOBN(0xe620b880, 0xafab62fc),
+ TOBN(0x92096bc9, 0x93158383), TOBN(0x41a21357, 0x8f896f6c),
+ TOBN(0x1b5ee2fa, 0xc7dcfcab), TOBN(0x650acfde, 0x9546e007),
+ TOBN(0xc081b749, 0xb1b02e07), TOBN(0xda9e41a0, 0xf9eca03d),
+ TOBN(0x013ba727, 0x175a54ab), TOBN(0xca0cd190, 0xea5d8d10),
+ TOBN(0x85ea52c0, 0x95fd96a9), TOBN(0x2c591b9f, 0xbc5c3940),
+ TOBN(0x6fb4d4e4, 0x2bad4d5f), TOBN(0xfa4c3590, 0xfef0059b),
+ TOBN(0x6a10218a, 0xf5122294), TOBN(0x9a78a81a, 0xa85751d1),
+ TOBN(0x04f20579, 0xa98e84e7), TOBN(0xfe1242c0, 0x4997e5b5),
+ TOBN(0xe77a273b, 0xca21e1e4), TOBN(0xfcc8b1ef, 0x9411939d),
+ TOBN(0xe20ea302, 0x92d0487a), TOBN(0x1442dbec, 0x294b91fe),
+ TOBN(0x1f7a4afe, 0xbb6b0e8f), TOBN(0x1700ef74, 0x6889c318),
+ TOBN(0xf5bbffc3, 0x70f1fc62), TOBN(0x3b31d4b6, 0x69c79cca),
+ TOBN(0xe8bc2aab, 0xa7f6340d), TOBN(0xb0b08ab4, 0xa725e10a),
+ TOBN(0x44f05701, 0xae340050), TOBN(0xba4b3016, 0x1cf0c569),
+ TOBN(0x5aa29f83, 0xfbe19a51), TOBN(0x1b9ed428, 0xb71d752e),
+ TOBN(0x1666e54e, 0xeb4819f5), TOBN(0x616cdfed, 0x9e18b75b),
+ TOBN(0x112ed5be, 0x3ee27b0b), TOBN(0xfbf28319, 0x44c7de4d),
+ TOBN(0xd685ec85, 0xe0e60d84), TOBN(0x68037e30, 0x1db7ee78),
+ TOBN(0x5b65bdcd, 0x003c4d6e), TOBN(0x33e7363a, 0x93e29a6a),
+ TOBN(0x995b3a61, 0x08d0756c), TOBN(0xd727f85c, 0x2faf134b),
+ TOBN(0xfac6edf7, 0x1d337823), TOBN(0x99b9aa50, 0x0439b8b4),
+ TOBN(0x722eb104, 0xe2b4e075), TOBN(0x49987295, 0x437c4926),
+ TOBN(0xb1e4c0e4, 0x46a9b82d), TOBN(0xd0cb3197, 0x57a006f5),
+ TOBN(0xf3de0f7d, 0xd7808c56), TOBN(0xb5c54d8f, 0x51f89772),
+ TOBN(0x500a114a, 0xadbd31aa), TOBN(0x9afaaaa6, 0x295f6cab),
+ TOBN(0x94705e21, 0x04cf667a), TOBN(0xfc2a811b, 0x9d3935d7),
+ TOBN(0x560b0280, 0x6d09267c), TOBN(0xf19ed119, 0xf780e53b),
+ TOBN(0xf0227c09, 0x067b6269), TOBN(0x967b8533, 0x5caef599),
+ TOBN(0x155b9243, 0x68efeebc), TOBN(0xcd6d34f5, 0xc497bae6),
+ TOBN(0x1dd8d5d3, 0x6cceb370), TOBN(0x2aeac579, 0xa78d7bf9),
+ TOBN(0x5d65017d, 0x70b67a62), TOBN(0x70c8e44f, 0x17c53f67),
+ TOBN(0xd1fc0950, 0x86a34d09), TOBN(0xe0fca256, 0xe7134907),
+ TOBN(0xe24fa29c, 0x80fdd315), TOBN(0x2c4acd03, 0xd87499ad),
+ TOBN(0xbaaf7517, 0x3b5a9ba6), TOBN(0xb9cbe1f6, 0x12e51a51),
+ TOBN(0xd88edae3, 0x5e154897), TOBN(0xe4309c3c, 0x77b66ca0),
+ TOBN(0xf5555805, 0xf67f3746), TOBN(0x85fc37ba, 0xa36401ff),
+ TOBN(0xdf86e2ca, 0xd9499a53), TOBN(0x6270b2a3, 0xecbc955b),
+ TOBN(0xafae64f5, 0x974ad33b), TOBN(0x04d85977, 0xfe7b2df1),
+ TOBN(0x2a3db3ff, 0x4ab03f73), TOBN(0x0b87878a, 0x8702740a),
+ TOBN(0x6d263f01, 0x5a061732), TOBN(0xc25430ce, 0xa32a1901),
+ TOBN(0xf7ebab3d, 0xdb155018), TOBN(0x3a86f693, 0x63a9b78e),
+ TOBN(0x349ae368, 0xda9f3804), TOBN(0x470f07fe, 0xa164349c),
+ TOBN(0xd52f4cc9, 0x8562baa5), TOBN(0xc74a9e86, 0x2b290df3),
+ TOBN(0xd3a1aa35, 0x43471a24), TOBN(0x239446be, 0xb8194511),
+ TOBN(0xbec2dd00, 0x81dcd44d), TOBN(0xca3d7f0f, 0xc42ac82d),
+ TOBN(0x1f3db085, 0xfdaf4520), TOBN(0xbb6d3e80, 0x4549daf2),
+ TOBN(0xf5969d8a, 0x19ad5c42), TOBN(0x7052b13d, 0xdbfd1511),
+ TOBN(0x11890d1b, 0x682b9060), TOBN(0xa71d3883, 0xac34452c),
+ TOBN(0xa438055b, 0x783805b4), TOBN(0x43241277, 0x4725b23e),
+ TOBN(0xf20cf96e, 0x4901bbed), TOBN(0x6419c710, 0xf432a2bb),
+ TOBN(0x57a0fbb9, 0xdfa9cd7d), TOBN(0x589111e4, 0x00daa249),
+ TOBN(0x19809a33, 0x7b60554e), TOBN(0xea5f8887, 0xede283a4),
+ TOBN(0x2d713802, 0x503bfd35), TOBN(0x151bb0af, 0x585d2a53),
+ TOBN(0x40b08f74, 0x43b30ca8), TOBN(0xe10b5bba, 0xd9934583),
+ TOBN(0xe8a546d6, 0xb51110ad), TOBN(0x1dd50e66, 0x28e0b6c5),
+ TOBN(0x292e9d54, 0xcff2b821), TOBN(0x3882555d, 0x47281760),
+ TOBN(0x134838f8, 0x3724d6e3), TOBN(0xf2c679e0, 0x22ddcda1),
+ TOBN(0x40ee8815, 0x6d2a5768), TOBN(0x7f227bd2, 0x1c1e7e2d),
+ TOBN(0x487ba134, 0xd04ff443), TOBN(0x76e2ff3d, 0xc614e54b),
+ TOBN(0x36b88d6f, 0xa3177ec7), TOBN(0xbf731d51, 0x2328fff5),
+ TOBN(0x758caea2, 0x49ba158e), TOBN(0x5ab8ff4c, 0x02938188),
+ TOBN(0x33e16056, 0x35edc56d), TOBN(0x5a69d349, 0x7e940d79),
+ TOBN(0x6c4fd001, 0x03866dcb), TOBN(0x20a38f57, 0x4893cdef),
+ TOBN(0xfbf3e790, 0xfac3a15b), TOBN(0x6ed7ea2e, 0x7a4f8e6b),
+ TOBN(0xa663eb4f, 0xbc3aca86), TOBN(0x22061ea5, 0x080d53f7),
+ TOBN(0x2480dfe6, 0xf546783f), TOBN(0xd38bc6da, 0x5a0a641e),
+ TOBN(0xfb093cd1, 0x2ede8965), TOBN(0x89654db4, 0xacb455cf),
+ TOBN(0x413cbf9a, 0x26e1adee), TOBN(0x291f3764, 0x373294d4),
+ TOBN(0x00797257, 0x648083fe), TOBN(0x25f504d3, 0x208cc341),
+ TOBN(0x635a8e5e, 0xc3a0ee43), TOBN(0x70aaebca, 0x679898ff),
+ TOBN(0x9ee9f547, 0x5dc63d56), TOBN(0xce987966, 0xffb34d00),
+ TOBN(0xf9f86b19, 0x5e26310a), TOBN(0x9e435484, 0x382a8ca8),
+ TOBN(0x253bcb81, 0xc2352fe4), TOBN(0xa4eac8b0, 0x4474b571),
+ TOBN(0xc1b97512, 0xc1ad8cf8), TOBN(0x193b4e9e, 0x99e0b697),
+ TOBN(0x939d2716, 0x01e85df0), TOBN(0x4fb265b3, 0xcd44eafd),
+ TOBN(0x321e7dcd, 0xe51e1ae2), TOBN(0x8e3a8ca6, 0xe3d8b096),
+ TOBN(0x8de46cb0, 0x52604998), TOBN(0x91099ad8, 0x39072aa7),
+ TOBN(0x2617f91c, 0x93aa96b8), TOBN(0x0fc8716b, 0x7fca2e13),
+ TOBN(0xa7106f5e, 0x95328723), TOBN(0xd1c9c40b, 0x262e6522),
+ TOBN(0xb9bafe86, 0x42b7c094), TOBN(0x1873439d, 0x1543c021),
+ TOBN(0xe1baa5de, 0x5cbefd5d), TOBN(0xa363fc5e, 0x521e8aff),
+ TOBN(0xefe6320d, 0xf862eaac), TOBN(0x14419c63, 0x22c647dc),
+ TOBN(0x0e06707c, 0x4e46d428), TOBN(0xcb6c834f, 0x4a178f8f),
+ TOBN(0x0f993a45, 0xd30f917c), TOBN(0xd4c4b049, 0x9879afee),
+ TOBN(0xb6142a1e, 0x70500063), TOBN(0x7c9b41c3, 0xa5d9d605),
+ TOBN(0xbc00fc2f, 0x2f8ba2c7), TOBN(0x0966eb2f, 0x7c67aa28),
+ TOBN(0x13f7b516, 0x5a786972), TOBN(0x3bfb7557, 0x8a2fbba0),
+ TOBN(0x131c4f23, 0x5a2b9620), TOBN(0xbff3ed27, 0x6faf46be),
+ TOBN(0x9b4473d1, 0x7e172323), TOBN(0x421e8878, 0x339f6246),
+ TOBN(0x0fa8587a, 0x25a41632), TOBN(0xc0814124, 0xa35b6c93),
+ TOBN(0x2b18a9f5, 0x59ebb8db), TOBN(0x264e3357, 0x76edb29c),
+ TOBN(0xaf245ccd, 0xc87c51e2), TOBN(0x16b3015b, 0x501e6214),
+ TOBN(0xbb31c560, 0x0a3882ce), TOBN(0x6961bb94, 0xfec11e04),
+ TOBN(0x3b825b8d, 0xeff7a3a0), TOBN(0xbec33738, 0xb1df7326),
+ TOBN(0x68ad747c, 0x99604a1f), TOBN(0xd154c934, 0x9a3bd499),
+ TOBN(0xac33506f, 0x1cc7a906), TOBN(0x73bb5392, 0x6c560e8f),
+ TOBN(0x6428fcbe, 0x263e3944), TOBN(0xc11828d5, 0x1c387434),
+ TOBN(0x3cd04be1, 0x3e4b12ff), TOBN(0xc3aad9f9, 0x2d88667c),
+ TOBN(0xc52ddcf8, 0x248120cf), TOBN(0x985a892e, 0x2a389532),
+ TOBN(0xfbb4b21b, 0x3bb85fa0), TOBN(0xf95375e0, 0x8dfc6269),
+ TOBN(0xfb4fb06c, 0x7ee2acea), TOBN(0x6785426e, 0x309c4d1f),
+ TOBN(0x659b17c8, 0xd8ceb147), TOBN(0x9b649eee, 0xb70a5554),
+ TOBN(0x6b7fa0b5, 0xac6bc634), TOBN(0xd99fe2c7, 0x1d6e732f),
+ TOBN(0x30e6e762, 0x8d3abba2), TOBN(0x18fee6e7, 0xa797b799),
+ TOBN(0x5c9d360d, 0xc696464d), TOBN(0xe3baeb48, 0x27bfde12),
+ TOBN(0x2bf5db47, 0xf23206d5), TOBN(0x2f6d3420, 0x1d260152),
+ TOBN(0x17b87653, 0x3f8ff89a), TOBN(0x5157c30c, 0x378fa458),
+ TOBN(0x7517c5c5, 0x2d4fb936), TOBN(0xef22f7ac, 0xe6518cdc),
+ TOBN(0xdeb483e6, 0xbf847a64), TOBN(0xf5084558, 0x92e0fa89),}
+ ,
+ {TOBN(0xab9659d8, 0xdf7304d4), TOBN(0xb71bcf1b, 0xff210e8e),
+ TOBN(0xa9a2438b, 0xd73fbd60), TOBN(0x4595cd1f, 0x5d11b4de),
+ TOBN(0x9c0d329a, 0x4835859d), TOBN(0x4a0f0d2d, 0x7dbb6e56),
+ TOBN(0xc6038e5e, 0xdf928a4e), TOBN(0xc9429621, 0x8f5ad154),
+ TOBN(0x91213462, 0xf23f2d92), TOBN(0x6cab71bd, 0x60b94078),
+ TOBN(0x6bdd0a63, 0x176cde20), TOBN(0x54c9b20c, 0xee4d54bc),
+ TOBN(0x3cd2d8aa, 0x9f2ac02f), TOBN(0x03f8e617, 0x206eedb0),
+ TOBN(0xc7f68e16, 0x93086434), TOBN(0x831469c5, 0x92dd3db9),
+ TOBN(0x8521df24, 0x8f981354), TOBN(0x587e23ec, 0x3588a259),
+ TOBN(0xcbedf281, 0xd7a0992c), TOBN(0x06930a55, 0x38961407),
+ TOBN(0x09320deb, 0xbe5bbe21), TOBN(0xa7ffa5b5, 0x2491817f),
+ TOBN(0xe6c8b4d9, 0x09065160), TOBN(0xac4f3992, 0xfff6d2a9),
+ TOBN(0x7aa7a158, 0x3ae9c1bd), TOBN(0xe0af6d98, 0xe37ce240),
+ TOBN(0xe54342d9, 0x28ab38b4), TOBN(0xe8b75007, 0x0a1c98ca),
+ TOBN(0xefce86af, 0xe02358f2), TOBN(0x31b8b856, 0xea921228),
+ TOBN(0x052a1912, 0x0a1c67fc), TOBN(0xb4069ea4, 0xe3aead59),
+ TOBN(0x3232d6e2, 0x7fa03cb3), TOBN(0xdb938e5b, 0x0fdd7d88),
+ TOBN(0x04c1d2cd, 0x2ccbfc5d), TOBN(0xd2f45c12, 0xaf3a580f),
+ TOBN(0x592620b5, 0x7883e614), TOBN(0x5fd27e68, 0xbe7c5f26),
+ TOBN(0x139e45a9, 0x1567e1e3), TOBN(0x2cc71d2d, 0x44d8aaaf),
+ TOBN(0x4a9090cd, 0xe36d0757), TOBN(0xf722d7b1, 0xd9a29382),
+ TOBN(0xfb7fb04c, 0x04b48ddf), TOBN(0x628ad2a7, 0xebe16f43),
+ TOBN(0xcd3fbfb5, 0x20226040), TOBN(0x6c34ecb1, 0x5104b6c4),
+ TOBN(0x30c0754e, 0xc903c188), TOBN(0xec336b08, 0x2d23cab0),
+ TOBN(0x473d62a2, 0x1e206ee5), TOBN(0xf1e27480, 0x8c49a633),
+ TOBN(0x87ab956c, 0xe9f6b2c3), TOBN(0x61830b48, 0x62b606ea),
+ TOBN(0x67cd6846, 0xe78e815f), TOBN(0xfe40139f, 0x4c02082a),
+ TOBN(0x52bbbfcb, 0x952ec365), TOBN(0x74c11642, 0x6b9836ab),
+ TOBN(0x9f51439e, 0x558df019), TOBN(0x230da4ba, 0xac712b27),
+ TOBN(0x518919e3, 0x55185a24), TOBN(0x4dcefcdd, 0x84b78f50),
+ TOBN(0xa7d90fb2, 0xa47d4c5a), TOBN(0x55ac9abf, 0xb30e009e),
+ TOBN(0xfd2fc359, 0x74eed273), TOBN(0xb72d824c, 0xdbea8faf),
+ TOBN(0xce721a74, 0x4513e2ca), TOBN(0x0b418612, 0x38240b2c),
+ TOBN(0x05199968, 0xd5baa450), TOBN(0xeb1757ed, 0x2b0e8c25),
+ TOBN(0x6ebc3e28, 0x3dfac6d5), TOBN(0xb2431e2e, 0x48a237f5),
+ TOBN(0x2acb5e23, 0x52f61499), TOBN(0x5558a2a7, 0xe06c936b),
+ TOBN(0xd213f923, 0xcbb13d1b), TOBN(0x98799f42, 0x5bfb9bfe),
+ TOBN(0x1ae8ddc9, 0x701144a9), TOBN(0x0b8b3bb6, 0x4c5595ee),
+ TOBN(0x0ea9ef2e, 0x3ecebb21), TOBN(0x17cb6c4b, 0x3671f9a7),
+ TOBN(0x47ef464f, 0x726f1d1f), TOBN(0x171b9484, 0x6943a276),
+ TOBN(0x51a4ae2d, 0x7ef0329c), TOBN(0x08509222, 0x91c4402a),
+ TOBN(0x64a61d35, 0xafd45bbc), TOBN(0x38f096fe, 0x3035a851),
+ TOBN(0xc7468b74, 0xa1dec027), TOBN(0xe8cf10e7, 0x4fc7dcba),
+ TOBN(0xea35ff40, 0xf4a06353), TOBN(0x0b4c0dfa, 0x8b77dd66),
+ TOBN(0x779b8552, 0xde7e5c19), TOBN(0xfab28609, 0xc1c0256c),
+ TOBN(0x64f58eee, 0xabd4743d), TOBN(0x4e8ef838, 0x7b6cc93b),
+ TOBN(0xee650d26, 0x4cb1bf3d), TOBN(0x4c1f9d09, 0x73dedf61),
+ TOBN(0xaef7c9d7, 0xbfb70ced), TOBN(0x1ec0507e, 0x1641de1e),
+ TOBN(0xcd7e5cc7, 0xcde45079), TOBN(0xde173c9a, 0x516ac9e4),
+ TOBN(0x517a8494, 0xc170315c), TOBN(0x438fd905, 0x91d8e8fb),
+ TOBN(0x5145c506, 0xc7d9630b), TOBN(0x6457a87b, 0xf47d4d75),
+ TOBN(0xd31646bf, 0x0d9a80e8), TOBN(0x453add2b, 0xcef3aabe),
+ TOBN(0xc9941109, 0xa607419d), TOBN(0xfaa71e62, 0xbb6bca80),
+ TOBN(0x34158c13, 0x07c431f3), TOBN(0x594abebc, 0x992bc47a),
+ TOBN(0x6dfea691, 0xeb78399f), TOBN(0x48aafb35, 0x3f42cba4),
+ TOBN(0xedcd65af, 0x077c04f0), TOBN(0x1a29a366, 0xe884491a),
+ TOBN(0x023a40e5, 0x1c21f2bf), TOBN(0xf99a513c, 0xa5057aee),
+ TOBN(0xa3fe7e25, 0xbcab072e), TOBN(0x8568d2e1, 0x40e32bcf),
+ TOBN(0x904594eb, 0xd3f69d9f), TOBN(0x181a9733, 0x07affab1),
+ TOBN(0xe4d68d76, 0xb6e330f4), TOBN(0x87a6dafb, 0xc75a7fc1),
+ TOBN(0x549db2b5, 0xef7d9289), TOBN(0x2480d4a8, 0x197f015a),
+ TOBN(0x61d5590b, 0xc40493b6), TOBN(0x3a55b52e, 0x6f780331),
+ TOBN(0x40eb8115, 0x309eadb0), TOBN(0xdea7de5a, 0x92e5c625),
+ TOBN(0x64d631f0, 0xcc6a3d5a), TOBN(0x9d5e9d7c, 0x93e8dd61),
+ TOBN(0xf297bef5, 0x206d3ffc), TOBN(0x23d5e033, 0x7d808bd4),
+ TOBN(0x4a4f6912, 0xd24cf5ba), TOBN(0xe4d8163b, 0x09cdaa8a),
+ TOBN(0x0e0de9ef, 0xd3082e8e), TOBN(0x4fe1246c, 0x0192f360),
+ TOBN(0x1f900150, 0x4b8eee0a), TOBN(0x5219da81, 0xf1da391b),
+ TOBN(0x7bf6a5c1, 0xf7ea25aa), TOBN(0xd165e6bf, 0xfbb07d5f),
+ TOBN(0xe3539361, 0x89e78671), TOBN(0xa3fcac89, 0x2bac4219),
+ TOBN(0xdfab6fd4, 0xf0baa8ab), TOBN(0x5a4adac1, 0xe2c1c2e5),
+ TOBN(0x6cd75e31, 0x40d85849), TOBN(0xce263fea, 0x19b39181),
+ TOBN(0xcb6803d3, 0x07032c72), TOBN(0x7f40d5ce, 0x790968c8),
+ TOBN(0xa6de86bd, 0xdce978f0), TOBN(0x25547c4f, 0x368f751c),
+ TOBN(0xb1e685fd, 0x65fb2a9e), TOBN(0xce69336f, 0x1eb9179c),
+ TOBN(0xb15d1c27, 0x12504442), TOBN(0xb7df465c, 0xb911a06b),
+ TOBN(0xb8d804a3, 0x315980cd), TOBN(0x693bc492, 0xfa3bebf7),
+ TOBN(0x3578aeee, 0x2253c504), TOBN(0x158de498, 0xcd2474a2),
+ TOBN(0x1331f5c7, 0xcfda8368), TOBN(0xd2d7bbb3, 0x78d7177e),
+ TOBN(0xdf61133a, 0xf3c1e46e), TOBN(0x5836ce7d, 0xd30e7be8),
+ TOBN(0x83084f19, 0x94f834cb), TOBN(0xd35653d4, 0x429ed782),
+ TOBN(0xa542f16f, 0x59e58243), TOBN(0xc2b52f65, 0x0470a22d),
+ TOBN(0xe3b6221b, 0x18f23d96), TOBN(0xcb05abac, 0x3f5252b4),
+ TOBN(0xca00938b, 0x87d61402), TOBN(0x2f186cdd, 0x411933e4),
+ TOBN(0xe042ece5, 0x9a29a5c5), TOBN(0xb19b3c07, 0x3b6c8402),
+ TOBN(0xc97667c7, 0x19d92684), TOBN(0xb5624622, 0xebc66372),
+ TOBN(0x0cb96e65, 0x3c04fa02), TOBN(0x83a7176c, 0x8eaa39aa),
+ TOBN(0x2033561d, 0xeaa1633f), TOBN(0x45a9d086, 0x4533df73),
+ TOBN(0xe0542c1d, 0x3dc090bc), TOBN(0x82c996ef, 0xaa59c167),
+ TOBN(0xe3f735e8, 0x0ee7fc4d), TOBN(0x7b179393, 0x7c35db79),
+ TOBN(0xb6419e25, 0xf8c5dbfd), TOBN(0x4d9d7a1e, 0x1f327b04),
+ TOBN(0x979f6f9b, 0x298dfca8), TOBN(0xc7c5dff1, 0x8de9366a),
+ TOBN(0x1b7a588d, 0x04c82bdd), TOBN(0x68005534, 0xf8319dfd),
+ TOBN(0xde8a55b5, 0xd8eb9580), TOBN(0x5ea886da, 0x8d5bca81),
+ TOBN(0xe8530a01, 0x252a0b4d), TOBN(0x1bffb4fe, 0x35eaa0a1),
+ TOBN(0x2ad828b1, 0xd8e99563), TOBN(0x7de96ef5, 0x95f9cd87),
+ TOBN(0x4abb2d0c, 0xd77d970c), TOBN(0x03cfb933, 0xd33ef9cb),
+ TOBN(0xb0547c01, 0x8b211fe9), TOBN(0x2fe64809, 0xa56ed1c6),
+ TOBN(0xcb7d5624, 0xc2ac98cc), TOBN(0x2a1372c0, 0x1a393e33),
+ TOBN(0xc8d1ec1c, 0x29660521), TOBN(0xf3d31b04, 0xb37ac3e9),
+ TOBN(0xa29ae9df, 0x5ece6e7c), TOBN(0x0603ac8f, 0x0facfb55),
+ TOBN(0xcfe85b7a, 0xdda233a5), TOBN(0xe618919f, 0xbd75f0b8),
+ TOBN(0xf555a3d2, 0x99bf1603), TOBN(0x1f43afc9, 0xf184255a),
+ TOBN(0xdcdaf341, 0x319a3e02), TOBN(0xd3b117ef, 0x03903a39),
+ TOBN(0xe095da13, 0x65d1d131), TOBN(0x86f16367, 0xc37ad03e),
+ TOBN(0x5f37389e, 0x462cd8dd), TOBN(0xc103fa04, 0xd67a60e6),
+ TOBN(0x57c34344, 0xf4b478f0), TOBN(0xce91edd8, 0xe117c98d),
+ TOBN(0x001777b0, 0x231fc12e), TOBN(0x11ae47f2, 0xb207bccb),
+ TOBN(0xd983cf8d, 0x20f8a242), TOBN(0x7aff5b1d, 0xf22e1ad8),
+ TOBN(0x68fd11d0, 0x7fc4feb3), TOBN(0x5d53ae90, 0xb0f1c3e1),
+ TOBN(0x50fb7905, 0xec041803), TOBN(0x85e3c977, 0x14404888),
+ TOBN(0x0e67faed, 0xac628d8f), TOBN(0x2e865150, 0x6668532c),
+ TOBN(0x15acaaa4, 0x6a67a6b0), TOBN(0xf4cdee25, 0xb25cec41),
+ TOBN(0x49ee565a, 0xe4c6701e), TOBN(0x2a04ca66, 0xfc7d63d8),
+ TOBN(0xeb105018, 0xef0543fb), TOBN(0xf709a4f5, 0xd1b0d81d),
+ TOBN(0x5b906ee6, 0x2915d333), TOBN(0xf4a87412, 0x96f1f0ab),
+ TOBN(0xb6b82fa7, 0x4d82f4c2), TOBN(0x90725a60, 0x6804efb3),
+ TOBN(0xbc82ec46, 0xadc3425e), TOBN(0xb7b80581, 0x2787843e),
+ TOBN(0xdf46d91c, 0xdd1fc74c), TOBN(0xdc1c62cb, 0xe783a6c4),
+ TOBN(0x59d1b9f3, 0x1a04cbba), TOBN(0xd87f6f72, 0x95e40764),
+ TOBN(0x02b4cfc1, 0x317f4a76), TOBN(0x8d2703eb, 0x91036bce),
+ TOBN(0x98206cc6, 0xa5e72a56), TOBN(0x57be9ed1, 0xcf53fb0f),
+ TOBN(0x09374571, 0xef0b17ac), TOBN(0x74b2655e, 0xd9181b38),
+ TOBN(0xc8f80ea8, 0x89935d0e), TOBN(0xc0d9e942, 0x91529936),
+ TOBN(0x19686041, 0x1e84e0e5), TOBN(0xa5db84d3, 0xaea34c93),
+ TOBN(0xf9d5bb19, 0x7073a732), TOBN(0xb8d2fe56, 0x6bcfd7c0),
+ TOBN(0x45775f36, 0xf3eb82fa), TOBN(0x8cb20ccc, 0xfdff8b58),
+ TOBN(0x1659b65f, 0x8374c110), TOBN(0xb8b4a422, 0x330c789a),
+ TOBN(0x75e3c3ea, 0x6fe8208b), TOBN(0xbd74b9e4, 0x286e78fe),
+ TOBN(0x0be2e81b, 0xd7d93a1a), TOBN(0x7ed06e27, 0xdd0a5aae),
+ TOBN(0x721f5a58, 0x6be8b800), TOBN(0x428299d1, 0xd846db28),
+ TOBN(0x95cb8e6b, 0x5be88ed3), TOBN(0xc3186b23, 0x1c034e11),
+ TOBN(0xa6312c9e, 0x8977d99b), TOBN(0xbe944331, 0x83f531e7),
+ TOBN(0x8232c0c2, 0x18d3b1d4), TOBN(0x617aae8b, 0xe1247b73),
+ TOBN(0x40153fc4, 0x282aec3b), TOBN(0xc6063d2f, 0xf7b8f823),
+ TOBN(0x68f10e58, 0x3304f94c), TOBN(0x31efae74, 0xee676346),
+ TOBN(0xbadb6c6d, 0x40a9b97c), TOBN(0x14702c63, 0x4f666256),
+ TOBN(0xdeb954f1, 0x5184b2e3), TOBN(0x5184a526, 0x94b6ca40),
+ TOBN(0xfff05337, 0x003c32ea), TOBN(0x5aa374dd, 0x205974c7),
+ TOBN(0x9a763854, 0x4b0dd71a), TOBN(0x459cd27f, 0xdeb947ec),
+ TOBN(0xa6e28161, 0x459c2b92), TOBN(0x2f020fa8, 0x75ee8ef5),
+ TOBN(0xb132ec2d, 0x30b06310), TOBN(0xc3e15899, 0xbc6a4530),
+ TOBN(0xdc5f53fe, 0xaa3f451a), TOBN(0x3a3c7f23, 0xc2d9acac),
+ TOBN(0x2ec2f892, 0x6b27e58b), TOBN(0x68466ee7, 0xd742799f),
+ TOBN(0x98324dd4, 0x1fa26613), TOBN(0xa2dc6dab, 0xbdc29d63),
+ TOBN(0xf9675faa, 0xd712d657), TOBN(0x813994be, 0x21fd8d15),
+ TOBN(0x5ccbb722, 0xfd4f7553), TOBN(0x5135ff8b, 0xf3a36b20),
+ TOBN(0x44be28af, 0x69559df5), TOBN(0x40b65bed, 0x9d41bf30),
+ TOBN(0xd98bf2a4, 0x3734e520), TOBN(0x5e3abbe3, 0x209bdcba),
+ TOBN(0x77c76553, 0xbc945b35), TOBN(0x5331c093, 0xc6ef14aa),
+ TOBN(0x518ffe29, 0x76b60c80), TOBN(0x2285593b, 0x7ace16f8),
+ TOBN(0xab1f64cc, 0xbe2b9784), TOBN(0xe8f2c0d9, 0xab2421b6),
+ TOBN(0x617d7174, 0xc1df065c), TOBN(0xafeeb5ab, 0x5f6578fa),
+ TOBN(0x16ff1329, 0x263b54a8), TOBN(0x45c55808, 0xc990dce3),
+ TOBN(0x42eab6c0, 0xecc8c177), TOBN(0x799ea9b5, 0x5982ecaa),
+ TOBN(0xf65da244, 0xb607ef8e), TOBN(0x8ab226ce, 0x32a3fc2c),
+ TOBN(0x745741e5, 0x7ea973dc), TOBN(0x5c00ca70, 0x20888f2e),
+ TOBN(0x7cdce3cf, 0x45fd9cf1), TOBN(0x8a741ef1, 0x5507f872),
+ TOBN(0x47c51c2f, 0x196b4cec), TOBN(0x70d08e43, 0xc97ea618),
+ TOBN(0x930da15c, 0x15b18a2b), TOBN(0x33b6c678, 0x2f610514),
+ TOBN(0xc662e4f8, 0x07ac9794), TOBN(0x1eccf050, 0xba06cb79),
+ TOBN(0x1ff08623, 0xe7d954e5), TOBN(0x6ef2c5fb, 0x24cf71c3),
+ TOBN(0xb2c063d2, 0x67978453), TOBN(0xa0cf3796, 0x1d654af8),
+ TOBN(0x7cb242ea, 0x7ebdaa37), TOBN(0x206e0b10, 0xb86747e0),
+ TOBN(0x481dae5f, 0xd5ecfefc), TOBN(0x07084fd8, 0xc2bff8fc),
+ TOBN(0x8040a01a, 0xea324596), TOBN(0x4c646980, 0xd4de4036),
+ TOBN(0x9eb8ab4e, 0xd65abfc3), TOBN(0xe01cb91f, 0x13541ec7),
+ TOBN(0x8f029adb, 0xfd695012), TOBN(0x9ae28483, 0x3c7569ec),
+ TOBN(0xa5614c9e, 0xa66d80a1), TOBN(0x680a3e44, 0x75f5f911),
+ TOBN(0x0c07b14d, 0xceba4fc1), TOBN(0x891c285b, 0xa13071c1),
+ TOBN(0xcac67ceb, 0x799ece3c), TOBN(0x29b910a9, 0x41e07e27),
+ TOBN(0x66bdb409, 0xf2e43123), TOBN(0x06f8b137, 0x7ac9ecbe),
+ TOBN(0x5981fafd, 0x38547090), TOBN(0x19ab8b9f, 0x85e3415d),
+ TOBN(0xfc28c194, 0xc7e31b27), TOBN(0x843be0aa, 0x6fbcbb42),
+ TOBN(0xf3b1ed43, 0xa6db836c), TOBN(0x2a1330e4, 0x01a45c05),
+ TOBN(0x4f19f3c5, 0x95c1a377), TOBN(0xa85f39d0, 0x44b5ee33),
+ TOBN(0x3da18e6d, 0x4ae52834), TOBN(0x5a403b39, 0x7423dcb0),
+ TOBN(0xbb555e0a, 0xf2374aef), TOBN(0x2ad599c4, 0x1e8ca111),
+ TOBN(0x1b3a2fb9, 0x014b3bf8), TOBN(0x73092684, 0xf66d5007),
+ TOBN(0x079f1426, 0xc4340102), TOBN(0x1827cf81, 0x8fddf4de),
+ TOBN(0xc83605f6, 0xf10ff927), TOBN(0xd3871451, 0x23739fc6),
+ TOBN(0x6d163450, 0xcac1c2cc), TOBN(0x6b521296, 0xa2ec1ac5),
+ TOBN(0x0606c4f9, 0x6e3cb4a5), TOBN(0xe47d3f41, 0x778abff7),
+ TOBN(0x425a8d5e, 0xbe8e3a45), TOBN(0x53ea9e97, 0xa6102160),
+ TOBN(0x477a106e, 0x39cbb688), TOBN(0x532401d2, 0xf3386d32),
+ TOBN(0x8e564f64, 0xb1b9b421), TOBN(0xca9b8388, 0x81dad33f),
+ TOBN(0xb1422b4e, 0x2093913e), TOBN(0x533d2f92, 0x69bc8112),
+ TOBN(0x3fa017be, 0xebe7b2c7), TOBN(0xb2767c4a, 0xcaf197c6),
+ TOBN(0xc925ff87, 0xaedbae9f), TOBN(0x7daf0eb9, 0x36880a54),
+ TOBN(0x9284ddf5, 0x9c4d0e71), TOBN(0x1581cf93, 0x316f8cf5),
+ TOBN(0x3eeca887, 0x3ac1f452), TOBN(0xb417fce9, 0xfb6aeffe),
+ TOBN(0xa5918046, 0xeefb8dc3), TOBN(0x73d318ac, 0x02209400),
+ TOBN(0xe800400f, 0x728693e5), TOBN(0xe87d814b, 0x339927ed),
+ TOBN(0x93e94d3b, 0x57ea9910), TOBN(0xff8a35b6, 0x2245fb69),
+ TOBN(0x043853d7, 0x7f200d34), TOBN(0x470f1e68, 0x0f653ce1),
+ TOBN(0x81ac05bd, 0x59a06379), TOBN(0xa14052c2, 0x03930c29),
+ TOBN(0x6b72fab5, 0x26bc2797), TOBN(0x13670d16, 0x99f16771),
+ TOBN(0x00170052, 0x1e3e48d1), TOBN(0x978fe401, 0xb7adf678),
+ TOBN(0x55ecfb92, 0xd41c5dd4), TOBN(0x5ff8e247, 0xc7b27da5),
+ TOBN(0xe7518272, 0x013fb606), TOBN(0x5768d7e5, 0x2f547a3c),
+ TOBN(0xbb24eaa3, 0x60017a5f), TOBN(0x6b18e6e4, 0x9c64ce9b),
+ TOBN(0xc225c655, 0x103dde07), TOBN(0xfc3672ae, 0x7592f7ea),
+ TOBN(0x9606ad77, 0xd06283a1), TOBN(0x542fc650, 0xe4d59d99),
+ TOBN(0xabb57c49, 0x2a40e7c2), TOBN(0xac948f13, 0xa8db9f55),
+ TOBN(0x6d4c9682, 0xb04465c3), TOBN(0xe3d062fa, 0x6468bd15),
+ TOBN(0xa51729ac, 0x5f318d7e), TOBN(0x1fc87df6, 0x9eb6fc95),
+ TOBN(0x63d146a8, 0x0591f652), TOBN(0xa861b8f7, 0x589621aa),
+ TOBN(0x59f5f15a, 0xce31348c), TOBN(0x8f663391, 0x440da6da),
+ TOBN(0xcfa778ac, 0xb591ffa3), TOBN(0x027ca9c5, 0x4cdfebce),
+ TOBN(0xbe8e05a5, 0x444ea6b3), TOBN(0x8aab4e69, 0xa78d8254),
+ TOBN(0x2437f04f, 0xb474d6b8), TOBN(0x6597ffd4, 0x045b3855),
+ TOBN(0xbb0aea4e, 0xca47ecaa), TOBN(0x568aae83, 0x85c7ebfc),
+ TOBN(0x0e966e64, 0xc73b2383), TOBN(0x49eb3447, 0xd17d8762),
+ TOBN(0xde107821, 0x8da05dab), TOBN(0x443d8baa, 0x016b7236),
+ TOBN(0x163b63a5, 0xea7610d6), TOBN(0xe47e4185, 0xce1ca979),
+ TOBN(0xae648b65, 0x80baa132), TOBN(0xebf53de2, 0x0e0d5b64),
+ TOBN(0x8d3bfcb4, 0xd3c8c1ca), TOBN(0x0d914ef3, 0x5d04b309),
+ TOBN(0x55ef6415, 0x3de7d395), TOBN(0xbde1666f, 0x26b850e8),
+ TOBN(0xdbe1ca6e, 0xd449ab19), TOBN(0x8902b322, 0xe89a2672),
+ TOBN(0xb1674b7e, 0xdacb7a53), TOBN(0x8e9faf6e, 0xf52523ff),
+ TOBN(0x6ba535da, 0x9a85788b), TOBN(0xd21f03ae, 0xbd0626d4),
+ TOBN(0x099f8c47, 0xe873dc64), TOBN(0xcda8564d, 0x018ec97e),
+ TOBN(0x3e8d7a5c, 0xde92c68c), TOBN(0x78e035a1, 0x73323cc4),
+ TOBN(0x3ef26275, 0xf880ff7c), TOBN(0xa4ee3dff, 0x273eedaa),
+ TOBN(0x58823507, 0xaf4e18f8), TOBN(0x967ec9b5, 0x0672f328),
+ TOBN(0x9ded19d9, 0x559d3186), TOBN(0x5e2ab3de, 0x6cdce39c),
+ TOBN(0xabad6e4d, 0x11c226df), TOBN(0xf9783f43, 0x87723014),
+ TOBN(0x9a49a0cf, 0x1a885719), TOBN(0xfc0c1a5a, 0x90da9dbf),
+ TOBN(0x8bbaec49, 0x571d92ac), TOBN(0x569e85fe, 0x4692517f),
+ TOBN(0x8333b014, 0xa14ea4af), TOBN(0x32f2a62f, 0x12e5c5ad),
+ TOBN(0x98c2ce3a, 0x06d89b85), TOBN(0xb90741aa, 0x2ff77a08),
+ TOBN(0x2530defc, 0x01f795a2), TOBN(0xd6e5ba0b, 0x84b3c199),
+ TOBN(0x7d8e8451, 0x12e4c936), TOBN(0xae419f7d, 0xbd0be17b),
+ TOBN(0xa583fc8c, 0x22262bc9), TOBN(0x6b842ac7, 0x91bfe2bd),
+ TOBN(0x33cef4e9, 0x440d6827), TOBN(0x5f69f4de, 0xef81fb14),
+ TOBN(0xf16cf6f6, 0x234fbb92), TOBN(0x76ae3fc3, 0xd9e7e158),
+ TOBN(0x4e89f6c2, 0xe9740b33), TOBN(0x677bc85d, 0x4962d6a1),
+ TOBN(0x6c6d8a7f, 0x68d10d15), TOBN(0x5f9a7224, 0x0257b1cd),
+ TOBN(0x7096b916, 0x4ad85961), TOBN(0x5f8c47f7, 0xe657ab4a),
+ TOBN(0xde57d7d0, 0xf7461d7e), TOBN(0x7eb6094d, 0x80ce5ee2),
+ TOBN(0x0b1e1dfd, 0x34190547), TOBN(0x8a394f43, 0xf05dd150),
+ TOBN(0x0a9eb24d, 0x97df44e6), TOBN(0x78ca06bf, 0x87675719),
+ TOBN(0x6f0b3462, 0x6ffeec22), TOBN(0x9d91bcea, 0x36cdd8fb),
+ TOBN(0xac83363c, 0xa105be47), TOBN(0x81ba76c1, 0x069710e3),
+ TOBN(0x3d1b24cb, 0x28c682c6), TOBN(0x27f25228, 0x8612575b),
+ TOBN(0xb587c779, 0xe8e66e98), TOBN(0x7b0c03e9, 0x405eb1fe),
+ TOBN(0xfdf0d030, 0x15b548e7), TOBN(0xa8be76e0, 0x38b36af7),
+ TOBN(0x4cdab04a, 0x4f310c40), TOBN(0x6287223e, 0xf47ecaec),
+ TOBN(0x678e6055, 0x8b399320), TOBN(0x61fe3fa6, 0xc01e4646),
+ TOBN(0xc482866b, 0x03261a5e), TOBN(0xdfcf45b8, 0x5c2f244a),
+ TOBN(0x8fab9a51, 0x2f684b43), TOBN(0xf796c654, 0xc7220a66),
+ TOBN(0x1d90707e, 0xf5afa58f), TOBN(0x2c421d97, 0x4fdbe0de),
+ TOBN(0xc4f4cda3, 0xaf2ebc2f), TOBN(0xa0af843d, 0xcb4efe24),
+ TOBN(0x53b857c1, 0x9ccd10b1), TOBN(0xddc9d1eb, 0x914d3e04),
+ TOBN(0x7bdec8bb, 0x62771deb), TOBN(0x829277aa, 0x91c5aa81),
+ TOBN(0x7af18dd6, 0x832391ae), TOBN(0x1740f316, 0xc71a84ca),}
+ ,
+ {TOBN(0x8928e99a, 0xeeaf8c49), TOBN(0xee7aa73d, 0x6e24d728),
+ TOBN(0x4c5007c2, 0xe72b156c), TOBN(0x5fcf57c5, 0xed408a1d),
+ TOBN(0x9f719e39, 0xb6057604), TOBN(0x7d343c01, 0xc2868bbf),
+ TOBN(0x2cca254b, 0x7e103e2d), TOBN(0xe6eb38a9, 0xf131bea2),
+ TOBN(0xb33e624f, 0x8be762b4), TOBN(0x2a9ee4d1, 0x058e3413),
+ TOBN(0x968e6369, 0x67d805fa), TOBN(0x9848949b, 0x7db8bfd7),
+ TOBN(0x5308d7e5, 0xd23a8417), TOBN(0x892f3b1d, 0xf3e29da5),
+ TOBN(0xc95c139e, 0x3dee471f), TOBN(0x8631594d, 0xd757e089),
+ TOBN(0xe0c82a3c, 0xde918dcc), TOBN(0x2e7b5994, 0x26fdcf4b),
+ TOBN(0x82c50249, 0x32cb1b2d), TOBN(0xea613a9d, 0x7657ae07),
+ TOBN(0xc2eb5f6c, 0xf1fdc9f7), TOBN(0xb6eae8b8, 0x879fe682),
+ TOBN(0x253dfee0, 0x591cbc7f), TOBN(0x000da713, 0x3e1290e6),
+ TOBN(0x1083e2ea, 0x1f095615), TOBN(0x0a28ad77, 0x14e68c33),
+ TOBN(0x6bfc0252, 0x3d8818be), TOBN(0xb585113a, 0xf35850cd),
+ TOBN(0x7d935f0b, 0x30df8aa1), TOBN(0xaddda07c, 0x4ab7e3ac),
+ TOBN(0x92c34299, 0x552f00cb), TOBN(0xc33ed1de, 0x2909df6c),
+ TOBN(0x22c2195d, 0x80e87766), TOBN(0x9e99e6d8, 0x9ddf4ac0),
+ TOBN(0x09642e4e, 0x65e74934), TOBN(0x2610ffa2, 0xff1ff241),
+ TOBN(0x4d1d47d4, 0x751c8159), TOBN(0x697b4985, 0xaf3a9363),
+ TOBN(0x0318ca46, 0x87477c33), TOBN(0xa90cb565, 0x9441eff3),
+ TOBN(0x58bb3848, 0x36f024cb), TOBN(0x85be1f77, 0x36016168),
+ TOBN(0x6c59587c, 0xdc7e07f1), TOBN(0x191be071, 0xaf1d8f02),
+ TOBN(0xbf169fa5, 0xcca5e55c), TOBN(0x3864ba3c, 0xf7d04eac),
+ TOBN(0x915e367f, 0x8d7d05db), TOBN(0xb48a876d, 0xa6549e5d),
+ TOBN(0xef89c656, 0x580e40a2), TOBN(0xf194ed8c, 0x728068bc),
+ TOBN(0x74528045, 0xa47990c9), TOBN(0xf53fc7d7, 0x5e1a4649),
+ TOBN(0xbec5ae9b, 0x78593e7d), TOBN(0x2cac4ee3, 0x41db65d7),
+ TOBN(0xa8c1eb24, 0x04a3d39b), TOBN(0x53b7d634, 0x03f8f3ef),
+ TOBN(0x2dc40d48, 0x3e07113c), TOBN(0x6e4a5d39, 0x7d8b63ae),
+ TOBN(0x5582a94b, 0x79684c2b), TOBN(0x932b33d4, 0x622da26c),
+ TOBN(0xf534f651, 0x0dbbf08d), TOBN(0x211d07c9, 0x64c23a52),
+ TOBN(0x0eeece0f, 0xee5bdc9b), TOBN(0xdf178168, 0xf7015558),
+ TOBN(0xd4294635, 0x0a712229), TOBN(0x93cbe448, 0x09273f8c),
+ TOBN(0x00b095ef, 0x8f13bc83), TOBN(0xbb741972, 0x8798978c),
+ TOBN(0x9d7309a2, 0x56dbe6e7), TOBN(0xe578ec56, 0x5a5d39ec),
+ TOBN(0x3961151b, 0x851f9a31), TOBN(0x2da7715d, 0xe5709eb4),
+ TOBN(0x867f3017, 0x53dfabf0), TOBN(0x728d2078, 0xb8e39259),
+ TOBN(0x5c75a0cd, 0x815d9958), TOBN(0xf84867a6, 0x16603be1),
+ TOBN(0xc865b13d, 0x70e35b1c), TOBN(0x02414468, 0x19b03e2c),
+ TOBN(0xe46041da, 0xac1f3121), TOBN(0x7c9017ad, 0x6f028a7c),
+ TOBN(0xabc96de9, 0x0a482873), TOBN(0x4265d6b1, 0xb77e54d4),
+ TOBN(0x68c38e79, 0xa57d88e7), TOBN(0xd461d766, 0x9ce82de3),
+ TOBN(0x817a9ec5, 0x64a7e489), TOBN(0xcc5675cd, 0xa0def5f2),
+ TOBN(0x9a00e785, 0x985d494e), TOBN(0xc626833f, 0x1b03514a),
+ TOBN(0xabe7905a, 0x83cdd60e), TOBN(0x50602fb5, 0xa1170184),
+ TOBN(0x689886cd, 0xb023642a), TOBN(0xd568d090, 0xa6e1fb00),
+ TOBN(0x5b1922c7, 0x0259217f), TOBN(0x93831cd9, 0xc43141e4),
+ TOBN(0xdfca3587, 0x0c95f86e), TOBN(0xdec2057a, 0x568ae828),
+ TOBN(0xc44ea599, 0xf98a759a), TOBN(0x55a0a7a2, 0xf7c23c1d),
+ TOBN(0xd5ffb6e6, 0x94c4f687), TOBN(0x3563cce2, 0x12848478),
+ TOBN(0x812b3517, 0xe7b1fbe1), TOBN(0x8a7dc979, 0x4f7338e0),
+ TOBN(0x211ecee9, 0x52d048db), TOBN(0x2eea4056, 0xc86ea3b8),
+ TOBN(0xd8cb68a7, 0xba772b34), TOBN(0xe16ed341, 0x5f4e2541),
+ TOBN(0x9b32f6a6, 0x0fec14db), TOBN(0xeee376f7, 0x391698be),
+ TOBN(0xe9a7aa17, 0x83674c02), TOBN(0x65832f97, 0x5843022a),
+ TOBN(0x29f3a8da, 0x5ba4990f), TOBN(0x79a59c3a, 0xfb8e3216),
+ TOBN(0x9cdc4d2e, 0xbd19bb16), TOBN(0xc6c7cfd0, 0xb3262d86),
+ TOBN(0xd4ce14d0, 0x969c0b47), TOBN(0x1fa352b7, 0x13e56128),
+ TOBN(0x383d55b8, 0x973db6d3), TOBN(0x71836850, 0xe8e5b7bf),
+ TOBN(0xc7714596, 0xe6bb571f), TOBN(0x259df31f, 0x2d5b2dd2),
+ TOBN(0x568f8925, 0x913cc16d), TOBN(0x18bc5b6d, 0xe1a26f5a),
+ TOBN(0xdfa413be, 0xf5f499ae), TOBN(0xf8835dec, 0xc3f0ae84),
+ TOBN(0xb6e60bd8, 0x65a40ab0), TOBN(0x65596439, 0x194b377e),
+ TOBN(0xbcd85625, 0x92084a69), TOBN(0x5ce433b9, 0x4f23ede0),
+ TOBN(0xe8e8f04f, 0x6ad65143), TOBN(0x11511827, 0xd6e14af6),
+ TOBN(0x3d390a10, 0x8295c0c7), TOBN(0x71e29ee4, 0x621eba16),
+ TOBN(0xa588fc09, 0x63717b46), TOBN(0x02be02fe, 0xe06ad4a2),
+ TOBN(0x931558c6, 0x04c22b22), TOBN(0xbb4d4bd6, 0x12f3c849),
+ TOBN(0x54a4f496, 0x20efd662), TOBN(0x92ba6d20, 0xc5952d14),
+ TOBN(0x2db8ea1e, 0xcc9784c2), TOBN(0x81cc10ca, 0x4b353644),
+ TOBN(0x40b570ad, 0x4b4d7f6c), TOBN(0x5c9f1d96, 0x84a1dcd2),
+ TOBN(0x01379f81, 0x3147e797), TOBN(0xe5c6097b, 0x2bd499f5),
+ TOBN(0x40dcafa6, 0x328e5e20), TOBN(0xf7b5244a, 0x54815550),
+ TOBN(0xb9a4f118, 0x47bfc978), TOBN(0x0ea0e79f, 0xd25825b1),
+ TOBN(0xa50f96eb, 0x646c7ecf), TOBN(0xeb811493, 0x446dea9d),
+ TOBN(0x2af04677, 0xdfabcf69), TOBN(0xbe3a068f, 0xc713f6e8),
+ TOBN(0x860d523d, 0x42e06189), TOBN(0xbf077941, 0x4e3aff13),
+ TOBN(0x0b616dca, 0xc1b20650), TOBN(0xe66dd6d1, 0x2131300d),
+ TOBN(0xd4a0fd67, 0xff99abde), TOBN(0xc9903550, 0xc7aac50d),
+ TOBN(0x022ecf8b, 0x7c46b2d7), TOBN(0x3333b1e8, 0x3abf92af),
+ TOBN(0x11cc113c, 0x6c491c14), TOBN(0x05976688, 0x80dd3f88),
+ TOBN(0xf5b4d9e7, 0x29d932ed), TOBN(0xe982aad8, 0xa2c38b6d),
+ TOBN(0x6f925347, 0x8be0dcf0), TOBN(0x700080ae, 0x65ca53f2),
+ TOBN(0xd8131156, 0x443ca77f), TOBN(0xe92d6942, 0xec51f984),
+ TOBN(0xd2a08af8, 0x85dfe9ae), TOBN(0xd825d9a5, 0x4d2a86ca),
+ TOBN(0x2c53988d, 0x39dff020), TOBN(0xf38b135a, 0x430cdc40),
+ TOBN(0x0c918ae0, 0x62a7150b), TOBN(0xf31fd8de, 0x0c340e9b),
+ TOBN(0xafa0e7ae, 0x4dbbf02e), TOBN(0x5847fb2a, 0x5eba6239),
+ TOBN(0x6b1647dc, 0xdccbac8b), TOBN(0xb642aa78, 0x06f485c8),
+ TOBN(0x873f3765, 0x7038ecdf), TOBN(0x2ce5e865, 0xfa49d3fe),
+ TOBN(0xea223788, 0xc98c4400), TOBN(0x8104a8cd, 0xf1fa5279),
+ TOBN(0xbcf7cc7a, 0x06becfd7), TOBN(0x49424316, 0xc8f974ae),
+ TOBN(0xc0da65e7, 0x84d6365d), TOBN(0xbcb7443f, 0x8f759fb8),
+ TOBN(0x35c712b1, 0x7ae81930), TOBN(0x80428dff, 0x4c6e08ab),
+ TOBN(0xf19dafef, 0xa4faf843), TOBN(0xced8538d, 0xffa9855f),
+ TOBN(0x20ac409c, 0xbe3ac7ce), TOBN(0x358c1fb6, 0x882da71e),
+ TOBN(0xafa9c0e5, 0xfd349961), TOBN(0x2b2cfa51, 0x8421c2fc),
+ TOBN(0x2a80db17, 0xf3a28d38), TOBN(0xa8aba539, 0x5d138e7e),
+ TOBN(0x52012d1d, 0x6e96eb8d), TOBN(0x65d8dea0, 0xcbaf9622),
+ TOBN(0x57735447, 0xb264f56c), TOBN(0xbeebef3f, 0x1b6c8da2),
+ TOBN(0xfc346d98, 0xce785254), TOBN(0xd50e8d72, 0xbb64a161),
+ TOBN(0xc03567c7, 0x49794add), TOBN(0x15a76065, 0x752c7ef6),
+ TOBN(0x59f3a222, 0x961f23d6), TOBN(0x378e4438, 0x73ecc0b0),
+ TOBN(0xc74be434, 0x5a82fde4), TOBN(0xae509af2, 0xd8b9cf34),
+ TOBN(0x4a61ee46, 0x577f44a1), TOBN(0xe09b748c, 0xb611deeb),
+ TOBN(0xc0481b2c, 0xf5f7b884), TOBN(0x35626678, 0x61acfa6b),
+ TOBN(0x37f4c518, 0xbf8d21e6), TOBN(0x22d96531, 0xb205a76d),
+ TOBN(0x37fb85e1, 0x954073c0), TOBN(0xbceafe4f, 0x65b3a567),
+ TOBN(0xefecdef7, 0xbe42a582), TOBN(0xd3fc6080, 0x65046be6),
+ TOBN(0xc9af13c8, 0x09e8dba9), TOBN(0x1e6c9847, 0x641491ff),
+ TOBN(0x3b574925, 0xd30c31f7), TOBN(0xb7eb72ba, 0xac2a2122),
+ TOBN(0x776a0dac, 0xef0859e7), TOBN(0x06fec314, 0x21900942),
+ TOBN(0x2464bc10, 0xf8c22049), TOBN(0x9bfbcce7, 0x875ebf69),
+ TOBN(0xd7a88e2a, 0x4336326b), TOBN(0xda05261c, 0x5bc2acfa),
+ TOBN(0xc29f5bdc, 0xeba7efc8), TOBN(0x471237ca, 0x25dbbf2e),
+ TOBN(0xa72773f2, 0x2975f127), TOBN(0xdc744e8e, 0x04d0b326),
+ TOBN(0x38a7ed16, 0xa56edb73), TOBN(0x64357e37, 0x2c007e70),
+ TOBN(0xa167d15b, 0x5080b400), TOBN(0x07b41164, 0x23de4be1),
+ TOBN(0xb2d91e32, 0x74c89883), TOBN(0x3c162821, 0x2882e7ed),
+ TOBN(0xad6b36ba, 0x7503e482), TOBN(0x48434e8e, 0x0ea34331),
+ TOBN(0x79f4f24f, 0x2c7ae0b9), TOBN(0xc46fbf81, 0x1939b44a),
+ TOBN(0x76fefae8, 0x56595eb1), TOBN(0x417b66ab, 0xcd5f29c7),
+ TOBN(0x5f2332b2, 0xc5ceec20), TOBN(0xd69661ff, 0xe1a1cae2),
+ TOBN(0x5ede7e52, 0x9b0286e6), TOBN(0x9d062529, 0xe276b993),
+ TOBN(0x324794b0, 0x7e50122b), TOBN(0xdd744f8b, 0x4af07ca5),
+ TOBN(0x30a12f08, 0xd63fc97b), TOBN(0x39650f1a, 0x76626d9d),
+ TOBN(0x101b47f7, 0x1fa38477), TOBN(0x3d815f19, 0xd4dc124f),
+ TOBN(0x1569ae95, 0xb26eb58a), TOBN(0xc3cde188, 0x95fb1887),
+ TOBN(0x54e9f37b, 0xf9539a48), TOBN(0xb0100e06, 0x7408c1a5),
+ TOBN(0x821d9811, 0xea580cbb), TOBN(0x8af52d35, 0x86e50c56),
+ TOBN(0xdfbd9d47, 0xdbbf698b), TOBN(0x2961a1ea, 0x03dc1c73),
+ TOBN(0x203d38f8, 0xe76a5df8), TOBN(0x08a53a68, 0x6def707a),
+ TOBN(0x26eefb48, 0x1bee45d4), TOBN(0xb3cee346, 0x3c688036),
+ TOBN(0x463c5315, 0xc42f2469), TOBN(0x19d84d2e, 0x81378162),
+ TOBN(0x22d7c3c5, 0x1c4d349f), TOBN(0x65965844, 0x163d59c5),
+ TOBN(0xcf198c56, 0xb8abceae), TOBN(0x6fb1fb1b, 0x628559d5),
+ TOBN(0x8bbffd06, 0x07bf8fe3), TOBN(0x46259c58, 0x3467734b),
+ TOBN(0xd8953cea, 0x35f7f0d3), TOBN(0x1f0bece2, 0xd65b0ff1),
+ TOBN(0xf7d5b4b3, 0xf3c72914), TOBN(0x29e8ea95, 0x3cb53389),
+ TOBN(0x4a365626, 0x836b6d46), TOBN(0xe849f910, 0xea174fde),
+ TOBN(0x7ec62fbb, 0xf4737f21), TOBN(0xd8dba5ab, 0x6209f5ac),
+ TOBN(0x24b5d7a9, 0xa5f9adbe), TOBN(0x707d28f7, 0xa61dc768),
+ TOBN(0x7711460b, 0xcaa999ea), TOBN(0xba7b174d, 0x1c92e4cc),
+ TOBN(0x3c4bab66, 0x18d4bf2d), TOBN(0xb8f0c980, 0xeb8bd279),
+ TOBN(0x024bea9a, 0x324b4737), TOBN(0xfba9e423, 0x32a83bca),
+ TOBN(0x6e635643, 0xa232dced), TOBN(0x99619367, 0x2571c8ba),
+ TOBN(0xe8c9f357, 0x54b7032b), TOBN(0xf936b3ba, 0x2442d54a),
+ TOBN(0x2263f0f0, 0x8290c65a), TOBN(0x48989780, 0xee2c7fdb),
+ TOBN(0xadc5d55a, 0x13d4f95e), TOBN(0x737cff85, 0xad9b8500),
+ TOBN(0x271c557b, 0x8a73f43d), TOBN(0xbed617a4, 0xe18bc476),
+ TOBN(0x66245401, 0x7dfd8ab2), TOBN(0xae7b89ae, 0x3a2870aa),
+ TOBN(0x1b555f53, 0x23a7e545), TOBN(0x6791e247, 0xbe057e4c),
+ TOBN(0x860136ad, 0x324fa34d), TOBN(0xea111447, 0x4cbeae28),
+ TOBN(0x023a4270, 0xbedd3299), TOBN(0x3d5c3a7f, 0xc1c35c34),
+ TOBN(0xb0f6db67, 0x8d0412d2), TOBN(0xd92625e2, 0xfcdc6b9a),
+ TOBN(0x92ae5ccc, 0x4e28a982), TOBN(0xea251c36, 0x47a3ce7e),
+ TOBN(0x9d658932, 0x790691bf), TOBN(0xed610589, 0x06b736ae),
+ TOBN(0x712c2f04, 0xc0d63b6e), TOBN(0x5cf06fd5, 0xc63d488f),
+ TOBN(0x97363fac, 0xd9588e41), TOBN(0x1f9bf762, 0x2b93257e),
+ TOBN(0xa9d1ffc4, 0x667acace), TOBN(0x1cf4a1aa, 0x0a061ecf),
+ TOBN(0x40e48a49, 0xdc1818d0), TOBN(0x0643ff39, 0xa3621ab0),
+ TOBN(0x5768640c, 0xe39ef639), TOBN(0x1fc099ea, 0x04d86854),
+ TOBN(0x9130b9c3, 0xeccd28fd), TOBN(0xd743cbd2, 0x7eec54ab),
+ TOBN(0x052b146f, 0xe5b475b6), TOBN(0x058d9a82, 0x900a7d1f),
+ TOBN(0x65e02292, 0x91262b72), TOBN(0x96f924f9, 0xbb0edf03),
+ TOBN(0x5cfa59c8, 0xfe206842), TOBN(0xf6037004, 0x5eafa720),
+ TOBN(0x5f30699e, 0x18d7dd96), TOBN(0x381e8782, 0xcbab2495),
+ TOBN(0x91669b46, 0xdd8be949), TOBN(0xb40606f5, 0x26aae8ef),
+ TOBN(0x2812b839, 0xfc6751a4), TOBN(0x16196214, 0xfba800ef),
+ TOBN(0x4398d5ca, 0x4c1a2875), TOBN(0x720c00ee, 0x653d8349),
+ TOBN(0xc2699eb0, 0xd820007c), TOBN(0x880ee660, 0xa39b5825),
+ TOBN(0x70694694, 0x471f6984), TOBN(0xf7d16ea8, 0xe3dda99a),
+ TOBN(0x28d675b2, 0xc0519a23), TOBN(0x9ebf94fe, 0x4f6952e3),
+ TOBN(0xf28bb767, 0xa2294a8a), TOBN(0x85512b4d, 0xfe0af3f5),
+ TOBN(0x18958ba8, 0x99b16a0d), TOBN(0x95c2430c, 0xba7548a7),
+ TOBN(0xb30d1b10, 0xa16be615), TOBN(0xe3ebbb97, 0x85bfb74c),
+ TOBN(0xa3273cfe, 0x18549fdb), TOBN(0xf6e200bf, 0x4fcdb792),
+ TOBN(0x54a76e18, 0x83aba56c), TOBN(0x73ec66f6, 0x89ef6aa2),
+ TOBN(0x8d17add7, 0xd1b9a305), TOBN(0xa959c5b9, 0xb7ae1b9d),
+ TOBN(0x88643522, 0x6bcc094a), TOBN(0xcc5616c4, 0xd7d429b9),
+ TOBN(0xa6dada01, 0xe6a33f7c), TOBN(0xc6217a07, 0x9d4e70ad),
+ TOBN(0xd619a818, 0x09c15b7c), TOBN(0xea06b329, 0x0e80c854),
+ TOBN(0x174811ce, 0xa5f5e7b9), TOBN(0x66dfc310, 0x787c65f4),
+ TOBN(0x4ea7bd69, 0x3316ab54), TOBN(0xc12c4acb, 0x1dcc0f70),
+ TOBN(0xe4308d1a, 0x1e407dd9), TOBN(0xe8a3587c, 0x91afa997),
+ TOBN(0xea296c12, 0xab77b7a5), TOBN(0xb5ad49e4, 0x673c0d52),
+ TOBN(0x40f9b2b2, 0x7006085a), TOBN(0xa88ff340, 0x87bf6ec2),
+ TOBN(0x978603b1, 0x4e3066a6), TOBN(0xb3f99fc2, 0xb5e486e2),
+ TOBN(0x07b53f5e, 0xb2e63645), TOBN(0xbe57e547, 0x84c84232),
+ TOBN(0xd779c216, 0x7214d5cf), TOBN(0x617969cd, 0x029a3aca),
+ TOBN(0xd17668cd, 0x8a7017a0), TOBN(0x77b4d19a, 0xbe9b7ee8),
+ TOBN(0x58fd0e93, 0x9c161776), TOBN(0xa8c4f4ef, 0xd5968a72),
+ TOBN(0x296071cc, 0x67b3de77), TOBN(0xae3c0b8e, 0x634f7905),
+ TOBN(0x67e440c2, 0x8a7100c9), TOBN(0xbb8c3c1b, 0xeb4b9b42),
+ TOBN(0x6d71e8ea, 0xc51b3583), TOBN(0x7591f5af, 0x9525e642),
+ TOBN(0xf73a2f7b, 0x13f509f3), TOBN(0x618487aa, 0x5619ac9b),
+ TOBN(0x3a72e5f7, 0x9d61718a), TOBN(0x00413bcc, 0x7592d28c),
+ TOBN(0x7d9b11d3, 0x963c35cf), TOBN(0x77623bcf, 0xb90a46ed),
+ TOBN(0xdeef273b, 0xdcdd2a50), TOBN(0x4a741f9b, 0x0601846e),
+ TOBN(0x33b89e51, 0x0ec6e929), TOBN(0xcb02319f, 0x8b7f22cd),
+ TOBN(0xbbe1500d, 0x084bae24), TOBN(0x2f0ae8d7, 0x343d2693),
+ TOBN(0xacffb5f2, 0x7cdef811), TOBN(0xaa0c030a, 0x263fb94f),
+ TOBN(0x6eef0d61, 0xa0f442de), TOBN(0xf92e1817, 0x27b139d3),
+ TOBN(0x1ae6deb7, 0x0ad8bc28), TOBN(0xa89e38dc, 0xc0514130),
+ TOBN(0x81eeb865, 0xd2fdca23), TOBN(0x5a15ee08, 0xcc8ef895),
+ TOBN(0x768fa10a, 0x01905614), TOBN(0xeff5b8ef, 0x880ee19b),
+ TOBN(0xf0c0cabb, 0xcb1c8a0e), TOBN(0x2e1ee9cd, 0xb8c838f9),
+ TOBN(0x0587d8b8, 0x8a4a14c0), TOBN(0xf6f27896, 0x2ff698e5),
+ TOBN(0xed38ef1c, 0x89ee6256), TOBN(0xf44ee1fe, 0x6b353b45),
+ TOBN(0x9115c0c7, 0x70e903b3), TOBN(0xc78ec0a1, 0x818f31df),
+ TOBN(0x6c003324, 0xb7dccbc6), TOBN(0xd96dd1f3, 0x163bbc25),
+ TOBN(0x33aa82dd, 0x5cedd805), TOBN(0x123aae4f, 0x7f7eb2f1),
+ TOBN(0x1723fcf5, 0xa26262cd), TOBN(0x1f7f4d5d, 0x0060ebd5),
+ TOBN(0xf19c5c01, 0xb2eaa3af), TOBN(0x2ccb9b14, 0x9790accf),
+ TOBN(0x1f9c1cad, 0x52324aa6), TOBN(0x63200526, 0x7247df54),
+ TOBN(0x5732fe42, 0xbac96f82), TOBN(0x52fe771f, 0x01a1c384),
+ TOBN(0x546ca13d, 0xb1001684), TOBN(0xb56b4eee, 0xa1709f75),
+ TOBN(0x266545a9, 0xd5db8672), TOBN(0xed971c90, 0x1e8f3cfb),
+ TOBN(0x4e7d8691, 0xe3a07b29), TOBN(0x7570d9ec, 0xe4b696b9),
+ TOBN(0xdc5fa067, 0x7bc7e9ae), TOBN(0x68b44caf, 0xc82c4844),
+ TOBN(0x519d34b3, 0xbf44da80), TOBN(0x283834f9, 0x5ab32e66),
+ TOBN(0x6e608797, 0x6278a000), TOBN(0x1e62960e, 0x627312f6),
+ TOBN(0x9b87b27b, 0xe6901c55), TOBN(0x80e78538, 0x24fdbc1f),
+ TOBN(0xbbbc0951, 0x2facc27d), TOBN(0x06394239, 0xac143b5a),
+ TOBN(0x35bb4a40, 0x376c1944), TOBN(0x7cb62694, 0x63da1511),
+ TOBN(0xafd29161, 0xb7148a3b), TOBN(0xa6f9d9ed, 0x4e2ea2ee),
+ TOBN(0x15dc2ca2, 0x880dd212), TOBN(0x903c3813, 0xa61139a9),
+ TOBN(0x2aa7b46d, 0x6c0f8785), TOBN(0x36ce2871, 0x901c60ff),
+ TOBN(0xc683b028, 0xe10d9c12), TOBN(0x7573baa2, 0x032f33d3),
+ TOBN(0x87a9b1f6, 0x67a31b58), TOBN(0xfd3ed11a, 0xf4ffae12),
+ TOBN(0x83dcaa9a, 0x0cb2748e), TOBN(0x8239f018, 0x5d6fdf16),
+ TOBN(0xba67b49c, 0x72753941), TOBN(0x2beec455, 0xc321cb36),
+ TOBN(0x88015606, 0x3f8b84ce), TOBN(0x76417083, 0x8d38c86f),
+ TOBN(0x054f1ca7, 0x598953dd), TOBN(0xc939e110, 0x4e8e7429),
+ TOBN(0x9b1ac2b3, 0x5a914f2f), TOBN(0x39e35ed3, 0xe74b8f9c),
+ TOBN(0xd0debdb2, 0x781b2fb0), TOBN(0x1585638f, 0x2d997ba2),
+ TOBN(0x9c4b646e, 0x9e2fce99), TOBN(0x68a21081, 0x1e80857f),
+ TOBN(0x06d54e44, 0x3643b52a), TOBN(0xde8d6d63, 0x0d8eb843),
+ TOBN(0x70321563, 0x42146a0a), TOBN(0x8ba826f2, 0x5eaa3622),
+ TOBN(0x227a58bd, 0x86138787), TOBN(0x43b6c03c, 0x10281d37),
+ TOBN(0x6326afbb, 0xb54dde39), TOBN(0x744e5e8a, 0xdb6f2d5f),
+ TOBN(0x48b2a99a, 0xcff158e1), TOBN(0xa93c8fa0, 0xef87918f),
+ TOBN(0x2182f956, 0xde058c5c), TOBN(0x216235d2, 0x936f9e7a),
+ TOBN(0xace0c0db, 0xd2e31e67), TOBN(0xc96449bf, 0xf23ac3e7),
+ TOBN(0x7e9a2874, 0x170693bd), TOBN(0xa28e14fd, 0xa45e6335),
+ TOBN(0x5757f6b3, 0x56427344), TOBN(0x822e4556, 0xacf8edf9),
+ TOBN(0x2b7a6ee2, 0xe6a285cd), TOBN(0x5866f211, 0xa9df3af0),
+ TOBN(0x40dde2dd, 0xf845b844), TOBN(0x986c3726, 0x110e5e49),
+ TOBN(0x73680c2a, 0xf7172277), TOBN(0x57b94f0f, 0x0cccb244),
+ TOBN(0xbdff7267, 0x2d438ca7), TOBN(0xbad1ce11, 0xcf4663fd),
+ TOBN(0x9813ed9d, 0xd8f71cae), TOBN(0xf43272a6, 0x961fdaa6),
+ TOBN(0xbeff0119, 0xbd6d1637), TOBN(0xfebc4f91, 0x30361978),
+ TOBN(0x02b37a95, 0x2f41deff), TOBN(0x0e44a59a, 0xe63b89b7),
+ TOBN(0x673257dc, 0x143ff951), TOBN(0x19c02205, 0xd752baf4),
+ TOBN(0x46c23069, 0xc4b7d692), TOBN(0x2e6392c3, 0xfd1502ac),
+ TOBN(0x6057b1a2, 0x1b220846), TOBN(0xe51ff946, 0x0c1b5b63),}
+ ,
+ {TOBN(0x6e85cb51, 0x566c5c43), TOBN(0xcff9c919, 0x3597f046),
+ TOBN(0x9354e90c, 0x4994d94a), TOBN(0xe0a39332, 0x2147927d),
+ TOBN(0x8427fac1, 0x0dc1eb2b), TOBN(0x88cfd8c2, 0x2ff319fa),
+ TOBN(0xe2d4e684, 0x01965274), TOBN(0xfa2e067d, 0x67aaa746),
+ TOBN(0xb6d92a7f, 0x3e5f9f11), TOBN(0x9afe153a, 0xd6cb3b8e),
+ TOBN(0x4d1a6dd7, 0xddf800bd), TOBN(0xf6c13cc0, 0xcaf17e19),
+ TOBN(0x15f6c58e, 0x325fc3ee), TOBN(0x71095400, 0xa31dc3b2),
+ TOBN(0x168e7c07, 0xafa3d3e7), TOBN(0x3f8417a1, 0x94c7ae2d),
+ TOBN(0xec234772, 0x813b230d), TOBN(0x634d0f5f, 0x17344427),
+ TOBN(0x11548ab1, 0xd77fc56a), TOBN(0x7fab1750, 0xce06af77),
+ TOBN(0xb62c10a7, 0x4f7c4f83), TOBN(0xa7d2edc4, 0x220a67d9),
+ TOBN(0x1c404170, 0x921209a0), TOBN(0x0b9815a0, 0xface59f0),
+ TOBN(0x2842589b, 0x319540c3), TOBN(0x18490f59, 0xa283d6f8),
+ TOBN(0xa2731f84, 0xdaae9fcb), TOBN(0x3db6d960, 0xc3683ba0),
+ TOBN(0xc85c63bb, 0x14611069), TOBN(0xb19436af, 0x0788bf05),
+ TOBN(0x905459df, 0x347460d2), TOBN(0x73f6e094, 0xe11a7db1),
+ TOBN(0xdc7f938e, 0xb6357f37), TOBN(0xc5d00f79, 0x2bd8aa62),
+ TOBN(0xc878dcb9, 0x2ca979fc), TOBN(0x37e83ed9, 0xeb023a99),
+ TOBN(0x6b23e273, 0x1560bf3d), TOBN(0x1086e459, 0x1d0fae61),
+ TOBN(0x78248316, 0x9a9414bd), TOBN(0x1b956bc0, 0xf0ea9ea1),
+ TOBN(0x7b85bb91, 0xc31b9c38), TOBN(0x0c5aa90b, 0x48ef57b5),
+ TOBN(0xdedeb169, 0xaf3bab6f), TOBN(0xe610ad73, 0x2d373685),
+ TOBN(0xf13870df, 0x02ba8e15), TOBN(0x0337edb6, 0x8ca7f771),
+ TOBN(0xe4acf747, 0xb62c036c), TOBN(0xd921d576, 0xb6b94e81),
+ TOBN(0xdbc86439, 0x2c422f7a), TOBN(0xfb635362, 0xed348898),
+ TOBN(0x83084668, 0xc45bfcd1), TOBN(0xc357c9e3, 0x2b315e11),
+ TOBN(0xb173b540, 0x5b2e5b8c), TOBN(0x7e946931, 0xe102b9a4),
+ TOBN(0x17c890eb, 0x7b0fb199), TOBN(0xec225a83, 0xd61b662b),
+ TOBN(0xf306a3c8, 0xee3c76cb), TOBN(0x3cf11623, 0xd32a1f6e),
+ TOBN(0xe6d5ab64, 0x6863e956), TOBN(0x3b8a4cbe, 0x5c005c26),
+ TOBN(0xdcd529a5, 0x9ce6bb27), TOBN(0xc4afaa52, 0x04d4b16f),
+ TOBN(0xb0624a26, 0x7923798d), TOBN(0x85e56df6, 0x6b307fab),
+ TOBN(0x0281893c, 0x2bf29698), TOBN(0x91fc19a4, 0xd7ce7603),
+ TOBN(0x75a5dca3, 0xad9a558f), TOBN(0x40ceb3fa, 0x4d50bf77),
+ TOBN(0x1baf6060, 0xbc9ba369), TOBN(0x927e1037, 0x597888c2),
+ TOBN(0xd936bf19, 0x86a34c07), TOBN(0xd4cf10c1, 0xc34ae980),
+ TOBN(0x3a3e5334, 0x859dd614), TOBN(0x9c475b5b, 0x18d0c8ee),
+ TOBN(0x63080d1f, 0x07cd51d5), TOBN(0xc9c0d0a6, 0xb88b4326),
+ TOBN(0x1ac98691, 0xc234296f), TOBN(0x2a0a83a4, 0x94887fb6),
+ TOBN(0x56511427, 0x0cea9cf2), TOBN(0x5230a6e8, 0xa24802f5),
+ TOBN(0xf7a2bf0f, 0x72e3d5c1), TOBN(0x37717446, 0x4f21439e),
+ TOBN(0xfedcbf25, 0x9ce30334), TOBN(0xe0030a78, 0x7ce202f9),
+ TOBN(0x6f2d9ebf, 0x1202e9ca), TOBN(0xe79dde6c, 0x75e6e591),
+ TOBN(0xf52072af, 0xf1dac4f8), TOBN(0x6c8d087e, 0xbb9b404d),
+ TOBN(0xad0fc73d, 0xbce913af), TOBN(0x909e587b, 0x458a07cb),
+ TOBN(0x1300da84, 0xd4f00c8a), TOBN(0x425cd048, 0xb54466ac),
+ TOBN(0xb59cb9be, 0x90e9d8bf), TOBN(0x991616db, 0x3e431b0e),
+ TOBN(0xd3aa117a, 0x531aecff), TOBN(0x91af92d3, 0x59f4dc3b),
+ TOBN(0x9b1ec292, 0xe93fda29), TOBN(0x76bb6c17, 0xe97d91bc),
+ TOBN(0x7509d95f, 0xaface1e6), TOBN(0x3653fe47, 0xbe855ae3),
+ TOBN(0x73180b28, 0x0f680e75), TOBN(0x75eefd1b, 0xeeb6c26c),
+ TOBN(0xa4cdf29f, 0xb66d4236), TOBN(0x2d70a997, 0x6b5821d8),
+ TOBN(0x7a3ee207, 0x20445c36), TOBN(0x71d1ac82, 0x59877174),
+ TOBN(0x0fc539f7, 0x949f73e9), TOBN(0xd05cf3d7, 0x982e3081),
+ TOBN(0x8758e20b, 0x7b1c7129), TOBN(0xffadcc20, 0x569e61f2),
+ TOBN(0xb05d3a2f, 0x59544c2d), TOBN(0xbe16f5c1, 0x9fff5e53),
+ TOBN(0x73cf65b8, 0xaad58135), TOBN(0x622c2119, 0x037aa5be),
+ TOBN(0x79373b3f, 0x646fd6a0), TOBN(0x0e029db5, 0x0d3978cf),
+ TOBN(0x8bdfc437, 0x94fba037), TOBN(0xaefbd687, 0x620797a6),
+ TOBN(0x3fa5382b, 0xbd30d38e), TOBN(0x7627cfbf, 0x585d7464),
+ TOBN(0xb2330fef, 0x4e4ca463), TOBN(0xbcef7287, 0x3566cc63),
+ TOBN(0xd161d2ca, 0xcf780900), TOBN(0x135dc539, 0x5b54827d),
+ TOBN(0x638f052e, 0x27bf1bc6), TOBN(0x10a224f0, 0x07dfa06c),
+ TOBN(0xe973586d, 0x6d3321da), TOBN(0x8b0c5738, 0x26152c8f),
+ TOBN(0x07ef4f2a, 0x34606074), TOBN(0x80fe7fe8, 0xa0f7047a),
+ TOBN(0x3d1a8152, 0xe1a0e306), TOBN(0x32cf43d8, 0x88da5222),
+ TOBN(0xbf89a95f, 0x5f02ffe6), TOBN(0x3d9eb9a4, 0x806ad3ea),
+ TOBN(0x012c17bb, 0x79c8e55e), TOBN(0xfdcd1a74, 0x99c81dac),
+ TOBN(0x7043178b, 0xb9556098), TOBN(0x4090a1df, 0x801c3886),
+ TOBN(0x759800ff, 0x9b67b912), TOBN(0x3e5c0304, 0x232620c8),
+ TOBN(0x4b9d3c4b, 0x70dceeca), TOBN(0xbb2d3c15, 0x181f648e),
+ TOBN(0xf981d837, 0x6e33345c), TOBN(0xb626289b, 0x0cf2297a),
+ TOBN(0x766ac659, 0x8baebdcf), TOBN(0x1a28ae09, 0x75df01e5),
+ TOBN(0xb71283da, 0x375876d8), TOBN(0x4865a96d, 0x607b9800),
+ TOBN(0x25dd1bcd, 0x237936b2), TOBN(0x332f4f4b, 0x60417494),
+ TOBN(0xd0923d68, 0x370a2147), TOBN(0x497f5dfb, 0xdc842203),
+ TOBN(0x9dc74cbd, 0x32be5e0f), TOBN(0x7475bcb7, 0x17a01375),
+ TOBN(0x438477c9, 0x50d872b1), TOBN(0xcec67879, 0xffe1d63d),
+ TOBN(0x9b006014, 0xd8578c70), TOBN(0xc9ad99a8, 0x78bb6b8b),
+ TOBN(0x6799008e, 0x11fb3806), TOBN(0xcfe81435, 0xcd44cab3),
+ TOBN(0xa2ee1582, 0x2f4fb344), TOBN(0xb8823450, 0x483fa6eb),
+ TOBN(0x622d323d, 0x652c7749), TOBN(0xd8474a98, 0xbeb0a15b),
+ TOBN(0xe43c154d, 0x5d1c00d0), TOBN(0x7fd581d9, 0x0e3e7aac),
+ TOBN(0x2b44c619, 0x2525ddf8), TOBN(0x67a033eb, 0xb8ae9739),
+ TOBN(0x113ffec1, 0x9ef2d2e4), TOBN(0x1bf6767e, 0xd5a0ea7f),
+ TOBN(0x57fff75e, 0x03714c0a), TOBN(0xa23c422e, 0x0a23e9ee),
+ TOBN(0xdd5f6b2d, 0x540f83af), TOBN(0xc2c2c27e, 0x55ea46a7),
+ TOBN(0xeb6b4246, 0x672a1208), TOBN(0xd13599f7, 0xae634f7a),
+ TOBN(0xcf914b5c, 0xd7b32c6e), TOBN(0x61a5a640, 0xeaf61814),
+ TOBN(0x8dc3df8b, 0x208a1bbb), TOBN(0xef627fd6, 0xb6d79aa5),
+ TOBN(0x44232ffc, 0xc4c86bc8), TOBN(0xe6f9231b, 0x061539fe),
+ TOBN(0x1d04f25a, 0x958b9533), TOBN(0x180cf934, 0x49e8c885),
+ TOBN(0x89689595, 0x9884aaf7), TOBN(0xb1959be3, 0x07b348a6),
+ TOBN(0x96250e57, 0x3c147c87), TOBN(0xae0efb3a, 0xdd0c61f8),
+ TOBN(0xed00745e, 0xca8c325e), TOBN(0x3c911696, 0xecff3f70),
+ TOBN(0x73acbc65, 0x319ad41d), TOBN(0x7b01a020, 0xf0b1c7ef),
+ TOBN(0xea32b293, 0x63a1483f), TOBN(0x89eabe71, 0x7a248f96),
+ TOBN(0x9c6231d3, 0x343157e5), TOBN(0x93a375e5, 0xdf3c546d),
+ TOBN(0xe76e9343, 0x6a2afe69), TOBN(0xc4f89100, 0xe166c88e),
+ TOBN(0x248efd0d, 0x4f872093), TOBN(0xae0eb3ea, 0x8fe0ea61),
+ TOBN(0xaf89790d, 0x9d79046e), TOBN(0x4d650f2d, 0x6cee0976),
+ TOBN(0xa3935d9a, 0x43071eca), TOBN(0x66fcd2c9, 0x283b0bfe),
+ TOBN(0x0e665eb5, 0x696605f1), TOBN(0xe77e5d07, 0xa54cd38d),
+ TOBN(0x90ee050a, 0x43d950cf), TOBN(0x86ddebda, 0xd32e69b5),
+ TOBN(0x6ad94a3d, 0xfddf7415), TOBN(0xf7fa1309, 0x3f6e8d5a),
+ TOBN(0xc4831d1d, 0xe9957f75), TOBN(0x7de28501, 0xd5817447),
+ TOBN(0x6f1d7078, 0x9e2aeb6b), TOBN(0xba2b9ff4, 0xf67a53c2),
+ TOBN(0x36963767, 0xdf9defc3), TOBN(0x479deed3, 0x0d38022c),
+ TOBN(0xd2edb89b, 0x3a8631e8), TOBN(0x8de855de, 0x7a213746),
+ TOBN(0xb2056cb7, 0xb00c5f11), TOBN(0xdeaefbd0, 0x2c9b85e4),
+ TOBN(0x03f39a8d, 0xd150892d), TOBN(0x37b84686, 0x218b7985),
+ TOBN(0x36296dd8, 0xb7375f1a), TOBN(0x472cd4b1, 0xb78e898e),
+ TOBN(0x15dff651, 0xe9f05de9), TOBN(0xd4045069, 0x2ce98ba9),
+ TOBN(0x8466a7ae, 0x9b38024c), TOBN(0xb910e700, 0xe5a6b5ef),
+ TOBN(0xae1c56ea, 0xb3aa8f0d), TOBN(0xbab2a507, 0x7eee74a6),
+ TOBN(0x0dca11e2, 0x4b4c4620), TOBN(0xfd896e2e, 0x4c47d1f4),
+ TOBN(0xeb45ae53, 0x308fbd93), TOBN(0x46cd5a2e, 0x02c36fda),
+ TOBN(0x6a3d4e90, 0xbaa48385), TOBN(0xdd55e62e, 0x9dbe9960),
+ TOBN(0xa1406aa0, 0x2a81ede7), TOBN(0x6860dd14, 0xf9274ea7),
+ TOBN(0xcfdcb0c2, 0x80414f86), TOBN(0xff410b10, 0x22f94327),
+ TOBN(0x5a33cc38, 0x49ad467b), TOBN(0xefb48b6c, 0x0a7335f1),
+ TOBN(0x14fb54a4, 0xb153a360), TOBN(0x604aa9d2, 0xb52469cc),
+ TOBN(0x5e9dc486, 0x754e48e9), TOBN(0x693cb455, 0x37471e8e),
+ TOBN(0xfb2fd7cd, 0x8d3b37b6), TOBN(0x63345e16, 0xcf09ff07),
+ TOBN(0x9910ba6b, 0x23a5d896), TOBN(0x1fe19e35, 0x7fe4364e),
+ TOBN(0x6e1da8c3, 0x9a33c677), TOBN(0x15b4488b, 0x29fd9fd0),
+ TOBN(0x1f439254, 0x1a1f22bf), TOBN(0x920a8a70, 0xab8163e8),
+ TOBN(0x3fd1b249, 0x07e5658e), TOBN(0xf2c4f79c, 0xb6ec839b),
+ TOBN(0x1abbc3d0, 0x4aa38d1b), TOBN(0x3b0db35c, 0xb5d9510e),
+ TOBN(0x1754ac78, 0x3e60dec0), TOBN(0x53272fd7, 0xea099b33),
+ TOBN(0x5fb0494f, 0x07a8e107), TOBN(0x4a89e137, 0x6a8191fa),
+ TOBN(0xa113b7f6, 0x3c4ad544), TOBN(0x88a2e909, 0x6cb9897b),
+ TOBN(0x17d55de3, 0xb44a3f84), TOBN(0xacb2f344, 0x17c6c690),
+ TOBN(0x32088168, 0x10232390), TOBN(0xf2e8a61f, 0x6c733bf7),
+ TOBN(0xa774aab6, 0x9c2d7652), TOBN(0xfb5307e3, 0xed95c5bc),
+ TOBN(0xa05c73c2, 0x4981f110), TOBN(0x1baae31c, 0xa39458c9),
+ TOBN(0x1def185b, 0xcbea62e7), TOBN(0xe8ac9eae, 0xeaf63059),
+ TOBN(0x098a8cfd, 0x9921851c), TOBN(0xd959c3f1, 0x3abe2f5b),
+ TOBN(0xa4f19525, 0x20e40ae5), TOBN(0x320789e3, 0x07a24aa1),
+ TOBN(0x259e6927, 0x7392b2bc), TOBN(0x58f6c667, 0x1918668b),
+ TOBN(0xce1db2bb, 0xc55d2d8b), TOBN(0x41d58bb7, 0xf4f6ca56),
+ TOBN(0x7650b680, 0x8f877614), TOBN(0x905e16ba, 0xf4c349ed),
+ TOBN(0xed415140, 0xf661acac), TOBN(0x3b8784f0, 0xcb2270af),
+ TOBN(0x3bc280ac, 0x8a402cba), TOBN(0xd53f7146, 0x0937921a),
+ TOBN(0xc03c8ee5, 0xe5681e83), TOBN(0x62126105, 0xf6ac9e4a),
+ TOBN(0x9503a53f, 0x936b1a38), TOBN(0x3d45e2d4, 0x782fecbd),
+ TOBN(0x69a5c439, 0x76e8ae98), TOBN(0xb53b2eeb, 0xbfb4b00e),
+ TOBN(0xf1674712, 0x72386c89), TOBN(0x30ca34a2, 0x4268bce4),
+ TOBN(0x7f1ed86c, 0x78341730), TOBN(0x8ef5beb8, 0xb525e248),
+ TOBN(0xbbc489fd, 0xb74fbf38), TOBN(0x38a92a0e, 0x91a0b382),
+ TOBN(0x7a77ba3f, 0x22433ccf), TOBN(0xde8362d6, 0xa29f05a9),
+ TOBN(0x7f6a30ea, 0x61189afc), TOBN(0x693b5505, 0x59ef114f),
+ TOBN(0x50266bc0, 0xcd1797a1), TOBN(0xea17b47e, 0xf4b7af2d),
+ TOBN(0xd6c4025c, 0x3df9483e), TOBN(0x8cbb9d9f, 0xa37b18c9),
+ TOBN(0x91cbfd9c, 0x4d8424cf), TOBN(0xdb7048f1, 0xab1c3506),
+ TOBN(0x9eaf641f, 0x028206a3), TOBN(0xf986f3f9, 0x25bdf6ce),
+ TOBN(0x262143b5, 0x224c08dc), TOBN(0x2bbb09b4, 0x81b50c91),
+ TOBN(0xc16ed709, 0xaca8c84f), TOBN(0xa6210d9d, 0xb2850ca8),
+ TOBN(0x6d8df67a, 0x09cb54d6), TOBN(0x91eef6e0, 0x500919a4),
+ TOBN(0x90f61381, 0x0f132857), TOBN(0x9acede47, 0xf8d5028b),
+ TOBN(0x844d1b71, 0x90b771c3), TOBN(0x563b71e4, 0xba6426be),
+ TOBN(0x2efa2e83, 0xbdb802ff), TOBN(0x3410cbab, 0xab5b4a41),
+ TOBN(0x555b2d26, 0x30da84dd), TOBN(0xd0711ae9, 0xee1cc29a),
+ TOBN(0xcf3e8c60, 0x2f547792), TOBN(0x03d7d5de, 0xdc678b35),
+ TOBN(0x071a2fa8, 0xced806b8), TOBN(0x222e6134, 0x697f1478),
+ TOBN(0xdc16fd5d, 0xabfcdbbf), TOBN(0x44912ebf, 0x121b53b8),
+ TOBN(0xac943674, 0x2496c27c), TOBN(0x8ea3176c, 0x1ffc26b0),
+ TOBN(0xb6e224ac, 0x13debf2c), TOBN(0x524cc235, 0xf372a832),
+ TOBN(0xd706e1d8, 0x9f6f1b18), TOBN(0x2552f005, 0x44cce35b),
+ TOBN(0x8c8326c2, 0xa88e31fc), TOBN(0xb5468b2c, 0xf9552047),
+ TOBN(0xce683e88, 0x3ff90f2b), TOBN(0x77947bdf, 0x2f0a5423),
+ TOBN(0xd0a1b28b, 0xed56e328), TOBN(0xaee35253, 0xc20134ac),
+ TOBN(0x7e98367d, 0x3567962f), TOBN(0x379ed61f, 0x8188bffb),
+ TOBN(0x73bba348, 0xfaf130a1), TOBN(0x6c1f75e1, 0x904ed734),
+ TOBN(0x18956642, 0x3b4a79fc), TOBN(0xf20bc83d, 0x54ef4493),
+ TOBN(0x836d425d, 0x9111eca1), TOBN(0xe5b5c318, 0x009a8dcf),
+ TOBN(0x3360b25d, 0x13221bc5), TOBN(0x707baad2, 0x6b3eeaf7),
+ TOBN(0xd7279ed8, 0x743a95a1), TOBN(0x7450a875, 0x969e809f),
+ TOBN(0x32b6bd53, 0xe5d0338f), TOBN(0x1e77f7af, 0x2b883bbc),
+ TOBN(0x90da12cc, 0x1063ecd0), TOBN(0xe2697b58, 0xc315be47),
+ TOBN(0x2771a5bd, 0xda85d534), TOBN(0x53e78c1f, 0xff980eea),
+ TOBN(0xadf1cf84, 0x900385e7), TOBN(0x7d3b14f6, 0xc9387b62),
+ TOBN(0x170e74b0, 0xcb8f2bd2), TOBN(0x2d50b486, 0x827fa993),
+ TOBN(0xcdbe8c9a, 0xf6f32bab), TOBN(0x55e906b0, 0xc3b93ab8),
+ TOBN(0x747f22fc, 0x8fe280d1), TOBN(0xcd8e0de5, 0xb2e114ab),
+ TOBN(0x5ab7dbeb, 0xe10b68b0), TOBN(0x9dc63a9c, 0xa480d4b2),
+ TOBN(0x78d4bc3b, 0x4be1495f), TOBN(0x25eb3db8, 0x9359122d),
+ TOBN(0x3f8ac05b, 0x0809cbdc), TOBN(0xbf4187bb, 0xd37c702f),
+ TOBN(0x84cea069, 0x1416a6a5), TOBN(0x8f860c79, 0x43ef881c),
+ TOBN(0x41311f8a, 0x38038a5d), TOBN(0xe78c2ec0, 0xfc612067),
+ TOBN(0x494d2e81, 0x5ad73581), TOBN(0xb4cc9e00, 0x59604097),
+ TOBN(0xff558aec, 0xf3612cba), TOBN(0x35beef7a, 0x9e36c39e),
+ TOBN(0x1845c7cf, 0xdbcf41b9), TOBN(0x5703662a, 0xaea997c0),
+ TOBN(0x8b925afe, 0xe402f6d8), TOBN(0xd0a1b1ae, 0x4dd72162),
+ TOBN(0x9f47b375, 0x03c41c4b), TOBN(0xa023829b, 0x0391d042),
+ TOBN(0x5f5045c3, 0x503b8b0a), TOBN(0x123c2688, 0x98c010e5),
+ TOBN(0x324ec0cc, 0x36ba06ee), TOBN(0xface3115, 0x3dd2cc0c),
+ TOBN(0xb364f3be, 0xf333e91f), TOBN(0xef8aff73, 0x28e832b0),
+ TOBN(0x1e9bad04, 0x2d05841b), TOBN(0x42f0e3df, 0x356a21e2),
+ TOBN(0xa3270bcb, 0x4add627e), TOBN(0xb09a8158, 0xd322e711),
+ TOBN(0x86e326a1, 0x0fee104a), TOBN(0xad7788f8, 0x3703f65d),
+ TOBN(0x7e765430, 0x47bc4833), TOBN(0x6cee582b, 0x2b9b893a),
+ TOBN(0x9cd2a167, 0xe8f55a7b), TOBN(0xefbee3c6, 0xd9e4190d),
+ TOBN(0x33ee7185, 0xd40c2e9d), TOBN(0x844cc9c5, 0xa380b548),
+ TOBN(0x323f8ecd, 0x66926e04), TOBN(0x0001e38f, 0x8110c1ba),
+ TOBN(0x8dbcac12, 0xfc6a7f07), TOBN(0xd65e1d58, 0x0cec0827),
+ TOBN(0xd2cd4141, 0xbe76ca2d), TOBN(0x7895cf5c, 0xe892f33a),
+ TOBN(0x956d230d, 0x367139d2), TOBN(0xa91abd3e, 0xd012c4c1),
+ TOBN(0x34fa4883, 0x87eb36bf), TOBN(0xc5f07102, 0x914b8fb4),
+ TOBN(0x90f0e579, 0xadb9c95f), TOBN(0xfe6ea8cb, 0x28888195),
+ TOBN(0x7b9b5065, 0xedfa9284), TOBN(0x6c510bd2, 0x2b8c8d65),
+ TOBN(0xd7b8ebef, 0xcbe8aafd), TOBN(0xedb3af98, 0x96b1da07),
+ TOBN(0x28ff779d, 0x6295d426), TOBN(0x0c4f6ac7, 0x3fa3ad7b),
+ TOBN(0xec44d054, 0x8b8e2604), TOBN(0x9b32a66d, 0x8b0050e1),
+ TOBN(0x1f943366, 0xf0476ce2), TOBN(0x7554d953, 0xa602c7b4),
+ TOBN(0xbe35aca6, 0x524f2809), TOBN(0xb6881229, 0xfd4edbea),
+ TOBN(0xe8cd0c8f, 0x508efb63), TOBN(0x9eb5b5c8, 0x6abcefc7),
+ TOBN(0xf5621f5f, 0xb441ab4f), TOBN(0x79e6c046, 0xb76a2b22),
+ TOBN(0x74a4792c, 0xe37a1f69), TOBN(0xcbd252cb, 0x03542b60),
+ TOBN(0x785f65d5, 0xb3c20bd3), TOBN(0x8dea6143, 0x4fabc60c),
+ TOBN(0x45e21446, 0xde673629), TOBN(0x57f7aa1e, 0x703c2d21),
+ TOBN(0xa0e99b7f, 0x98c868c7), TOBN(0x4e42f66d, 0x8b641676),
+ TOBN(0x602884dc, 0x91077896), TOBN(0xa0d690cf, 0xc2c9885b),
+ TOBN(0xfeb4da33, 0x3b9a5187), TOBN(0x5f789598, 0x153c87ee),
+ TOBN(0x2192dd47, 0x52b16dba), TOBN(0xdeefc0e6, 0x3524c1b1),
+ TOBN(0x465ea76e, 0xe4383693), TOBN(0x79401711, 0x361b8d98),
+ TOBN(0xa5f9ace9, 0xf21a15cb), TOBN(0x73d26163, 0xefee9aeb),
+ TOBN(0xcca844b3, 0xe677016c), TOBN(0x6c122b07, 0x57eaee06),
+ TOBN(0xb782dce7, 0x15f09690), TOBN(0x508b9b12, 0x2dfc0fc9),
+ TOBN(0x9015ab4b, 0x65d89fc6), TOBN(0x5e79dab7, 0xd6d5bb0f),
+ TOBN(0x64f021f0, 0x6c775aa2), TOBN(0xdf09d8cc, 0x37c7eca1),
+ TOBN(0x9a761367, 0xef2fa506), TOBN(0xed4ca476, 0x5b81eec6),
+ TOBN(0x262ede36, 0x10bbb8b5), TOBN(0x0737ce83, 0x0641ada3),
+ TOBN(0x4c94288a, 0xe9831ccc), TOBN(0x487fc1ce, 0x8065e635),
+ TOBN(0xb13d7ab3, 0xb8bb3659), TOBN(0xdea5df3e, 0x855e4120),
+ TOBN(0xb9a18573, 0x85eb0244), TOBN(0x1a1b8ea3, 0xa7cfe0a3),
+ TOBN(0x3b837119, 0x67b0867c), TOBN(0x8d5e0d08, 0x9d364520),
+ TOBN(0x52dccc1e, 0xd930f0e3), TOBN(0xefbbcec7, 0xbf20bbaf),
+ TOBN(0x99cffcab, 0x0263ad10), TOBN(0xd8199e6d, 0xfcd18f8a),
+ TOBN(0x64e2773f, 0xe9f10617), TOBN(0x0079e8e1, 0x08704848),
+ TOBN(0x1169989f, 0x8a342283), TOBN(0x8097799c, 0xa83012e6),
+ TOBN(0xece966cb, 0x8a6a9001), TOBN(0x93b3afef, 0x072ac7fc),
+ TOBN(0xe6893a2a, 0x2db3d5ba), TOBN(0x263dc462, 0x89bf4fdc),
+ TOBN(0x8852dfc9, 0xe0396673), TOBN(0x7ac70895, 0x3af362b6),
+ TOBN(0xbb9cce4d, 0x5c2f342b), TOBN(0xbf80907a, 0xb52d7aae),
+ TOBN(0x97f3d3cd, 0x2161bcd0), TOBN(0xb25b0834, 0x0962744d),
+ TOBN(0xc5b18ea5, 0x6c3a1dda), TOBN(0xfe4ec7eb, 0x06c92317),
+ TOBN(0xb787b890, 0xad1c4afe), TOBN(0xdccd9a92, 0x0ede801a),
+ TOBN(0x9ac6ddda, 0xdb58da1f), TOBN(0x22bbc12f, 0xb8cae6ee),
+ TOBN(0xc6f8bced, 0x815c4a43), TOBN(0x8105a92c, 0xf96480c7),
+ TOBN(0x0dc3dbf3, 0x7a859d51), TOBN(0xe3ec7ce6, 0x3041196b),
+ TOBN(0xd9f64b25, 0x0d1067c9), TOBN(0xf2321321, 0x3d1f8dd8),
+ TOBN(0x8b5c619c, 0x76497ee8), TOBN(0x5d2b0ac6, 0xc717370e),
+ TOBN(0x98204cb6, 0x4fcf68e1), TOBN(0x0bdec211, 0x62bc6792),
+ TOBN(0x6973ccef, 0xa63b1011), TOBN(0xf9e3fa97, 0xe0de1ac5),
+ TOBN(0x5efb693e, 0x3d0e0c8b), TOBN(0x037248e9, 0xd2d4fcb4),}
+ ,
+ {TOBN(0x80802dc9, 0x1ec34f9e), TOBN(0xd8772d35, 0x33810603),
+ TOBN(0x3f06d66c, 0x530cb4f3), TOBN(0x7be5ed0d, 0xc475c129),
+ TOBN(0xcb9e3c19, 0x31e82b10), TOBN(0xc63d2857, 0xc9ff6b4c),
+ TOBN(0xb92118c6, 0x92a1b45e), TOBN(0x0aec4414, 0x7285bbca),
+ TOBN(0xfc189ae7, 0x1e29a3ef), TOBN(0xcbe906f0, 0x4c93302e),
+ TOBN(0xd0107914, 0xceaae10e), TOBN(0xb7a23f34, 0xb68e19f8),
+ TOBN(0xe9d875c2, 0xefd2119d), TOBN(0x03198c6e, 0xfcadc9c8),
+ TOBN(0x65591bf6, 0x4da17113), TOBN(0x3cf0bbf8, 0x3d443038),
+ TOBN(0xae485bb7, 0x2b724759), TOBN(0x945353e1, 0xb2d4c63a),
+ TOBN(0x82159d07, 0xde7d6f2c), TOBN(0x389caef3, 0x4ec5b109),
+ TOBN(0x4a8ebb53, 0xdb65ef14), TOBN(0x2dc2cb7e, 0xdd99de43),
+ TOBN(0x816fa3ed, 0x83f2405f), TOBN(0x73429bb9, 0xc14208a3),
+ TOBN(0xb618d590, 0xb01e6e27), TOBN(0x047e2ccd, 0xe180b2dc),
+ TOBN(0xd1b299b5, 0x04aea4a9), TOBN(0x412c9e1e, 0x9fa403a4),
+ TOBN(0x88d28a36, 0x79407552), TOBN(0x49c50136, 0xf332b8e3),
+ TOBN(0x3a1b6fcc, 0xe668de19), TOBN(0x178851bc, 0x75122b97),
+ TOBN(0xb1e13752, 0xfb85fa4c), TOBN(0xd61257ce, 0x383c8ce9),
+ TOBN(0xd43da670, 0xd2f74dae), TOBN(0xa35aa23f, 0xbf846bbb),
+ TOBN(0x5e74235d, 0x4421fc83), TOBN(0xf6df8ee0, 0xc363473b),
+ TOBN(0x34d7f52a, 0x3c4aa158), TOBN(0x50d05aab, 0x9bc6d22e),
+ TOBN(0x8c56e735, 0xa64785f4), TOBN(0xbc56637b, 0x5f29cd07),
+ TOBN(0x53b2bb80, 0x3ee35067), TOBN(0x50235a0f, 0xdc919270),
+ TOBN(0x191ab6d8, 0xf2c4aa65), TOBN(0xc3475831, 0x8396023b),
+ TOBN(0x80400ba5, 0xf0f805ba), TOBN(0x8881065b, 0x5ec0f80f),
+ TOBN(0xc370e522, 0xcc1b5e83), TOBN(0xde2d4ad1, 0x860b8bfb),
+ TOBN(0xad364df0, 0x67b256df), TOBN(0x8f12502e, 0xe0138997),
+ TOBN(0x503fa0dc, 0x7783920a), TOBN(0xe80014ad, 0xc0bc866a),
+ TOBN(0x3f89b744, 0xd3064ba6), TOBN(0x03511dcd, 0xcba5dba5),
+ TOBN(0x197dd46d, 0x95a7b1a2), TOBN(0x9c4e7ad6, 0x3c6341fb),
+ TOBN(0x426eca29, 0x484c2ece), TOBN(0x9211e489, 0xde7f4f8a),
+ TOBN(0x14997f6e, 0xc78ef1f4), TOBN(0x2b2c0910, 0x06574586),
+ TOBN(0x17286a6e, 0x1c3eede8), TOBN(0x25f92e47, 0x0f60e018),
+ TOBN(0x805c5646, 0x31890a36), TOBN(0x703ef600, 0x57feea5b),
+ TOBN(0x389f747c, 0xaf3c3030), TOBN(0xe0e5daeb, 0x54dd3739),
+ TOBN(0xfe24a4c3, 0xc9c9f155), TOBN(0x7e4bf176, 0xb5393962),
+ TOBN(0x37183de2, 0xaf20bf29), TOBN(0x4a1bd7b5, 0xf95a8c3b),
+ TOBN(0xa83b9699, 0x46191d3d), TOBN(0x281fc8dd, 0x7b87f257),
+ TOBN(0xb18e2c13, 0x54107588), TOBN(0x6372def7, 0x9b2bafe8),
+ TOBN(0xdaf4bb48, 0x0d8972ca), TOBN(0x3f2dd4b7, 0x56167a3f),
+ TOBN(0x1eace32d, 0x84310cf4), TOBN(0xe3bcefaf, 0xe42700aa),
+ TOBN(0x5fe5691e, 0xd785e73d), TOBN(0xa5db5ab6, 0x2ea60467),
+ TOBN(0x02e23d41, 0xdfc6514a), TOBN(0x35e8048e, 0xe03c3665),
+ TOBN(0x3f8b118f, 0x1adaa0f8), TOBN(0x28ec3b45, 0x84ce1a5a),
+ TOBN(0xe8cacc6e, 0x2c6646b8), TOBN(0x1343d185, 0xdbd0e40f),
+ TOBN(0xe5d7f844, 0xcaaa358c), TOBN(0x1a1db7e4, 0x9924182a),
+ TOBN(0xd64cd42d, 0x9c875d9a), TOBN(0xb37b515f, 0x042eeec8),
+ TOBN(0x4d4dd409, 0x7b165fbe), TOBN(0xfc322ed9, 0xe206eff3),
+ TOBN(0x7dee4102, 0x59b7e17e), TOBN(0x55a481c0, 0x8236ca00),
+ TOBN(0x8c885312, 0xc23fc975), TOBN(0x15715806, 0x05d6297b),
+ TOBN(0xa078868e, 0xf78edd39), TOBN(0x956b31e0, 0x03c45e52),
+ TOBN(0x470275d5, 0xff7b33a6), TOBN(0xc8d5dc3a, 0x0c7e673f),
+ TOBN(0x419227b4, 0x7e2f2598), TOBN(0x8b37b634, 0x4c14a975),
+ TOBN(0xd0667ed6, 0x8b11888c), TOBN(0x5e0e8c3e, 0x803e25dc),
+ TOBN(0x34e5d0dc, 0xb987a24a), TOBN(0x9f40ac3b, 0xae920323),
+ TOBN(0x5463de95, 0x34e0f63a), TOBN(0xa128bf92, 0x6b6328f9),
+ TOBN(0x491ccd7c, 0xda64f1b7), TOBN(0x7ef1ec27, 0xc47bde35),
+ TOBN(0xa857240f, 0xa36a2737), TOBN(0x35dc1366, 0x63621bc1),
+ TOBN(0x7a3a6453, 0xd4fb6897), TOBN(0x80f1a439, 0xc929319d),
+ TOBN(0xfc18274b, 0xf8cb0ba0), TOBN(0xb0b53766, 0x8078c5eb),
+ TOBN(0xfb0d4924, 0x1e01d0ef), TOBN(0x50d7c67d, 0x372ab09c),
+ TOBN(0xb4e370af, 0x3aeac968), TOBN(0xe4f7fee9, 0xc4b63266),
+ TOBN(0xb4acd4c2, 0xe3ac5664), TOBN(0xf8910bd2, 0xceb38cbf),
+ TOBN(0x1c3ae50c, 0xc9c0726e), TOBN(0x15309569, 0xd97b40bf),
+ TOBN(0x70884b7f, 0xfd5a5a1b), TOBN(0x3890896a, 0xef8314cd),
+ TOBN(0x58e1515c, 0xa5618c93), TOBN(0xe665432b, 0x77d942d1),
+ TOBN(0xb32181bf, 0xb6f767a8), TOBN(0x753794e8, 0x3a604110),
+ TOBN(0x09afeb7c, 0xe8c0dbcc), TOBN(0x31e02613, 0x598673a3),
+ TOBN(0x5d98e557, 0x7d46db00), TOBN(0xfc21fb8c, 0x9d985b28),
+ TOBN(0xc9040116, 0xb0843e0b), TOBN(0x53b1b3a8, 0x69b04531),
+ TOBN(0xdd1649f0, 0x85d7d830), TOBN(0xbb3bcc87, 0xcb7427e8),
+ TOBN(0x77261100, 0xc93dce83), TOBN(0x7e79da61, 0xa1922a2a),
+ TOBN(0x587a2b02, 0xf3149ce8), TOBN(0x147e1384, 0xde92ec83),
+ TOBN(0x484c83d3, 0xaf077f30), TOBN(0xea78f844, 0x0658b53a),
+ TOBN(0x912076c2, 0x027aec53), TOBN(0xf34714e3, 0x93c8177d),
+ TOBN(0x37ef5d15, 0xc2376c84), TOBN(0x8315b659, 0x3d1aa783),
+ TOBN(0x3a75c484, 0xef852a90), TOBN(0x0ba0c58a, 0x16086bd4),
+ TOBN(0x29688d7a, 0x529a6d48), TOBN(0x9c7f250d, 0xc2f19203),
+ TOBN(0x123042fb, 0x682e2df9), TOBN(0x2b7587e7, 0xad8121bc),
+ TOBN(0x30fc0233, 0xe0182a65), TOBN(0xb82ecf87, 0xe3e1128a),
+ TOBN(0x71682861, 0x93fb098f), TOBN(0x043e21ae, 0x85e9e6a7),
+ TOBN(0xab5b49d6, 0x66c834ea), TOBN(0x3be43e18, 0x47414287),
+ TOBN(0xf40fb859, 0x219a2a47), TOBN(0x0e6559e9, 0xcc58df3c),
+ TOBN(0xfe1dfe8e, 0x0c6615b4), TOBN(0x14abc8fd, 0x56459d70),
+ TOBN(0x7be0fa8e, 0x05de0386), TOBN(0x8e63ef68, 0xe9035c7c),
+ TOBN(0x116401b4, 0x53b31e91), TOBN(0x0cba7ad4, 0x4436b4d8),
+ TOBN(0x9151f9a0, 0x107afd66), TOBN(0xafaca8d0, 0x1f0ee4c4),
+ TOBN(0x75fe5c1d, 0x9ee9761c), TOBN(0x3497a16b, 0xf0c0588f),
+ TOBN(0x3ee2bebd, 0x0304804c), TOBN(0xa8fb9a60, 0xc2c990b9),
+ TOBN(0xd14d32fe, 0x39251114), TOBN(0x36bf25bc, 0xcac73366),
+ TOBN(0xc9562c66, 0xdba7495c), TOBN(0x324d301b, 0x46ad348b),
+ TOBN(0x9f46620c, 0xd670407e), TOBN(0x0ea8d4f1, 0xe3733a01),
+ TOBN(0xd396d532, 0xb0c324e0), TOBN(0x5b211a0e, 0x03c317cd),
+ TOBN(0x090d7d20, 0x5ffe7b37), TOBN(0x3b7f3efb, 0x1747d2da),
+ TOBN(0xa2cb525f, 0xb54fc519), TOBN(0x6e220932, 0xf66a971e),
+ TOBN(0xddc160df, 0xb486d440), TOBN(0x7fcfec46, 0x3fe13465),
+ TOBN(0x83da7e4e, 0x76e4c151), TOBN(0xd6fa48a1, 0xd8d302b5),
+ TOBN(0xc6304f26, 0x5872cd88), TOBN(0x806c1d3c, 0x278b90a1),
+ TOBN(0x3553e725, 0xcaf0bc1c), TOBN(0xff59e603, 0xbb9d8d5c),
+ TOBN(0xa4550f32, 0x7a0b85dd), TOBN(0xdec5720a, 0x93ecc217),
+ TOBN(0x0b88b741, 0x69d62213), TOBN(0x7212f245, 0x5b365955),
+ TOBN(0x20764111, 0xb5cae787), TOBN(0x13cb7f58, 0x1dfd3124),
+ TOBN(0x2dca77da, 0x1175aefb), TOBN(0xeb75466b, 0xffaae775),
+ TOBN(0x74d76f3b, 0xdb6cff32), TOBN(0x7440f37a, 0x61fcda9a),
+ TOBN(0x1bb3ac92, 0xb525028b), TOBN(0x20fbf8f7, 0xa1975f29),
+ TOBN(0x982692e1, 0xdf83097f), TOBN(0x28738f6c, 0x554b0800),
+ TOBN(0xdc703717, 0xa2ce2f2f), TOBN(0x7913b93c, 0x40814194),
+ TOBN(0x04924593, 0x1fe89636), TOBN(0x7b98443f, 0xf78834a6),
+ TOBN(0x11c6ab01, 0x5114a5a1), TOBN(0x60deb383, 0xffba5f4c),
+ TOBN(0x4caa54c6, 0x01a982e6), TOBN(0x1dd35e11, 0x3491cd26),
+ TOBN(0x973c315f, 0x7cbd6b05), TOBN(0xcab00775, 0x52494724),
+ TOBN(0x04659b1f, 0x6565e15a), TOBN(0xbf30f529, 0x8c8fb026),
+ TOBN(0xfc21641b, 0xa8a0de37), TOBN(0xe9c7a366, 0xfa5e5114),
+ TOBN(0xdb849ca5, 0x52f03ad8), TOBN(0xc7e8dbe9, 0x024e35c0),
+ TOBN(0xa1a2bbac, 0xcfc3c789), TOBN(0xbf733e7d, 0x9c26f262),
+ TOBN(0x882ffbf5, 0xb8444823), TOBN(0xb7224e88, 0x6bf8483b),
+ TOBN(0x53023b8b, 0x65bef640), TOBN(0xaabfec91, 0xd4d5f8cd),
+ TOBN(0xa40e1510, 0x079ea1bd), TOBN(0x1ad9addc, 0xd05d5d26),
+ TOBN(0xdb3f2eab, 0x13e68d4f), TOBN(0x1cff1ae2, 0x640f803f),
+ TOBN(0xe0e7b749, 0xd4cee117), TOBN(0x8e9f275b, 0x4036d909),
+ TOBN(0xce34e31d, 0x8f4d4c38), TOBN(0x22b37f69, 0xd75130fc),
+ TOBN(0x83e0f1fd, 0xb4014604), TOBN(0xa8ce9919, 0x89415078),
+ TOBN(0x82375b75, 0x41792efe), TOBN(0x4f59bf5c, 0x97d4515b),
+ TOBN(0xac4f324f, 0x923a277d), TOBN(0xd9bc9b7d, 0x650f3406),
+ TOBN(0xc6fa87d1, 0x8a39bc51), TOBN(0x82588530, 0x5ccc108f),
+ TOBN(0x5ced3c9f, 0x82e4c634), TOBN(0x8efb8314, 0x3a4464f8),
+ TOBN(0xe706381b, 0x7a1dca25), TOBN(0x6cd15a3c, 0x5a2a412b),
+ TOBN(0x9347a8fd, 0xbfcd8fb5), TOBN(0x31db2eef, 0x6e54cd22),
+ TOBN(0xc4aeb11e, 0xf8d8932f), TOBN(0x11e7c1ed, 0x344411af),
+ TOBN(0x2653050c, 0xdc9a151e), TOBN(0x9edbfc08, 0x3bb0a859),
+ TOBN(0x926c81c7, 0xfd5691e7), TOBN(0x9c1b2342, 0x6f39019a),
+ TOBN(0x64a81c8b, 0x7f8474b9), TOBN(0x90657c07, 0x01761819),
+ TOBN(0x390b3331, 0x55e0375a), TOBN(0xc676c626, 0xb6ebc47d),
+ TOBN(0x51623247, 0xb7d6dee8), TOBN(0x0948d927, 0x79659313),
+ TOBN(0x99700161, 0xe9ab35ed), TOBN(0x06cc32b4, 0x8ddde408),
+ TOBN(0x6f2fd664, 0x061ef338), TOBN(0x1606fa02, 0xc202e9ed),
+ TOBN(0x55388bc1, 0x929ba99b), TOBN(0xc4428c5e, 0x1e81df69),
+ TOBN(0xce2028ae, 0xf91b0b2a), TOBN(0xce870a23, 0xf03dfd3f),
+ TOBN(0x66ec2c87, 0x0affe8ed), TOBN(0xb205fb46, 0x284d0c00),
+ TOBN(0xbf5dffe7, 0x44cefa48), TOBN(0xb6fc37a8, 0xa19876d7),
+ TOBN(0xbecfa84c, 0x08b72863), TOBN(0xd7205ff5, 0x2576374f),
+ TOBN(0x80330d32, 0x8887de41), TOBN(0x5de0df0c, 0x869ea534),
+ TOBN(0x13f42753, 0x3c56ea17), TOBN(0xeb1f6069, 0x452b1a78),
+ TOBN(0x50474396, 0xe30ea15c), TOBN(0x575816a1, 0xc1494125),
+ TOBN(0xbe1ce55b, 0xfe6bb38f), TOBN(0xb901a948, 0x96ae30f7),
+ TOBN(0xe5af0f08, 0xd8fc3548), TOBN(0x5010b5d0, 0xd73bfd08),
+ TOBN(0x993d2880, 0x53fe655a), TOBN(0x99f2630b, 0x1c1309fd),
+ TOBN(0xd8677baf, 0xb4e3b76f), TOBN(0x14e51ddc, 0xb840784b),
+ TOBN(0x326c750c, 0xbf0092ce), TOBN(0xc83d306b, 0xf528320f),
+ TOBN(0xc4456715, 0x77d4715c), TOBN(0xd30019f9, 0x6b703235),
+ TOBN(0x207ccb2e, 0xd669e986), TOBN(0x57c824af, 0xf6dbfc28),
+ TOBN(0xf0eb532f, 0xd8f92a23), TOBN(0x4a557fd4, 0x9bb98fd2),
+ TOBN(0xa57acea7, 0xc1e6199a), TOBN(0x0c663820, 0x8b94b1ed),
+ TOBN(0x9b42be8f, 0xf83a9266), TOBN(0xc7741c97, 0x0101bd45),
+ TOBN(0x95770c11, 0x07bd9ceb), TOBN(0x1f50250a, 0x8b2e0744),
+ TOBN(0xf762eec8, 0x1477b654), TOBN(0xc65b900e, 0x15efe59a),
+ TOBN(0x88c96148, 0x9546a897), TOBN(0x7e8025b3, 0xc30b4d7c),
+ TOBN(0xae4065ef, 0x12045cf9), TOBN(0x6fcb2caf, 0x9ccce8bd),
+ TOBN(0x1fa0ba4e, 0xf2cf6525), TOBN(0xf683125d, 0xcb72c312),
+ TOBN(0xa01da4ea, 0xe312410e), TOBN(0x67e28677, 0x6cd8e830),
+ TOBN(0xabd95752, 0x98fb3f07), TOBN(0x05f11e11, 0xeef649a5),
+ TOBN(0xba47faef, 0x9d3472c2), TOBN(0x3adff697, 0xc77d1345),
+ TOBN(0x4761fa04, 0xdd15afee), TOBN(0x64f1f61a, 0xb9e69462),
+ TOBN(0xfa691fab, 0x9bfb9093), TOBN(0x3df8ae8f, 0xa1133dfe),
+ TOBN(0xcd5f8967, 0x58cc710d), TOBN(0xfbb88d50, 0x16c7fe79),
+ TOBN(0x8e011b4c, 0xe88c50d1), TOBN(0x7532e807, 0xa8771c4f),
+ TOBN(0x64c78a48, 0xe2278ee4), TOBN(0x0b283e83, 0x3845072a),
+ TOBN(0x98a6f291, 0x49e69274), TOBN(0xb96e9668, 0x1868b21c),
+ TOBN(0x38f0adc2, 0xb1a8908e), TOBN(0x90afcff7, 0x1feb829d),
+ TOBN(0x9915a383, 0x210b0856), TOBN(0xa5a80602, 0xdef04889),
+ TOBN(0x800e9af9, 0x7c64d509), TOBN(0x81382d0b, 0xb8996f6f),
+ TOBN(0x490eba53, 0x81927e27), TOBN(0x46c63b32, 0x4af50182),
+ TOBN(0x784c5fd9, 0xd3ad62ce), TOBN(0xe4fa1870, 0xf8ae8736),
+ TOBN(0x4ec9d0bc, 0xd7466b25), TOBN(0x84ddbe1a, 0xdb235c65),
+ TOBN(0x5e2645ee, 0x163c1688), TOBN(0x570bd00e, 0x00eba747),
+ TOBN(0xfa51b629, 0x128bfa0f), TOBN(0x92fce1bd, 0x6c1d3b68),
+ TOBN(0x3e7361dc, 0xb66778b1), TOBN(0x9c7d249d, 0x5561d2bb),
+ TOBN(0xa40b28bf, 0x0bbc6229), TOBN(0x1c83c05e, 0xdfd91497),
+ TOBN(0x5f9f5154, 0xf083df05), TOBN(0xbac38b3c, 0xeee66c9d),
+ TOBN(0xf71db7e3, 0xec0dfcfd), TOBN(0xf2ecda8e, 0x8b0a8416),
+ TOBN(0x52fddd86, 0x7812aa66), TOBN(0x2896ef10, 0x4e6f4272),
+ TOBN(0xff27186a, 0x0fe9a745), TOBN(0x08249fcd, 0x49ca70db),
+ TOBN(0x7425a2e6, 0x441cac49), TOBN(0xf4a0885a, 0xece5ff57),
+ TOBN(0x6e2cb731, 0x7d7ead58), TOBN(0xf96cf7d6, 0x1898d104),
+ TOBN(0xafe67c9d, 0x4f2c9a89), TOBN(0x89895a50, 0x1c7bf5bc),
+ TOBN(0xdc7cb8e5, 0x573cecfa), TOBN(0x66497eae, 0xd15f03e6),
+ TOBN(0x6bc0de69, 0x3f084420), TOBN(0x323b9b36, 0xacd532b0),
+ TOBN(0xcfed390a, 0x0115a3c1), TOBN(0x9414c40b, 0x2d65ca0e),
+ TOBN(0x641406bd, 0x2f530c78), TOBN(0x29369a44, 0x833438f2),
+ TOBN(0x996884f5, 0x903fa271), TOBN(0xe6da0fd2, 0xb9da921e),
+ TOBN(0xa6f2f269, 0x5db01e54), TOBN(0x1ee3e9bd, 0x6876214e),
+ TOBN(0xa26e181c, 0xe27a9497), TOBN(0x36d254e4, 0x8e215e04),
+ TOBN(0x42f32a6c, 0x252cabca), TOBN(0x99481487, 0x80b57614),
+ TOBN(0x4c4dfe69, 0x40d9cae1), TOBN(0x05869580, 0x11a10f09),
+ TOBN(0xca287b57, 0x3491b64b), TOBN(0x77862d5d, 0x3fd4a53b),
+ TOBN(0xbf94856e, 0x50349126), TOBN(0x2be30bd1, 0x71c5268f),
+ TOBN(0x10393f19, 0xcbb650a6), TOBN(0x639531fe, 0x778cf9fd),
+ TOBN(0x02556a11, 0xb2935359), TOBN(0xda38aa96, 0xaf8c126e),
+ TOBN(0x47dbe6c2, 0x0960167f), TOBN(0x37bbabb6, 0x501901cd),
+ TOBN(0xb6e979e0, 0x2c947778), TOBN(0xd69a5175, 0x7a1a1dc6),
+ TOBN(0xc3ed5095, 0x9d9faf0c), TOBN(0x4dd9c096, 0x1d5fa5f0),
+ TOBN(0xa0c4304d, 0x64f16ea8), TOBN(0x8b1cac16, 0x7e718623),
+ TOBN(0x0b576546, 0x7c67f03e), TOBN(0x559cf5ad, 0xcbd88c01),
+ TOBN(0x074877bb, 0x0e2af19a), TOBN(0x1f717ec1, 0xa1228c92),
+ TOBN(0x70bcb800, 0x326e8920), TOBN(0xec6e2c5c, 0x4f312804),
+ TOBN(0x426aea7d, 0x3fca4752), TOBN(0xf12c0949, 0x2211f62a),
+ TOBN(0x24beecd8, 0x7be7b6b5), TOBN(0xb77eaf4c, 0x36d7a27d),
+ TOBN(0x154c2781, 0xfda78fd3), TOBN(0x848a83b0, 0x264eeabe),
+ TOBN(0x81287ef0, 0x4ffe2bc4), TOBN(0x7b6d88c6, 0xb6b6fc2a),
+ TOBN(0x805fb947, 0xce417d99), TOBN(0x4b93dcc3, 0x8b916cc4),
+ TOBN(0x72e65bb3, 0x21273323), TOBN(0xbcc1badd, 0x6ea9886e),
+ TOBN(0x0e223011, 0x4bc5ee85), TOBN(0xa561be74, 0xc18ee1e4),
+ TOBN(0x762fd2d4, 0xa6bcf1f1), TOBN(0x50e6a5a4, 0x95231489),
+ TOBN(0xca96001f, 0xa00b500b), TOBN(0x5c098cfc, 0x5d7dcdf5),
+ TOBN(0xa64e2d2e, 0x8c446a85), TOBN(0xbae9bcf1, 0x971f3c62),
+ TOBN(0x4ec22683, 0x8435a2c5), TOBN(0x8ceaed6c, 0x4bad4643),
+ TOBN(0xe9f8fb47, 0xccccf4e3), TOBN(0xbd4f3fa4, 0x1ce3b21e),
+ TOBN(0xd79fb110, 0xa3db3292), TOBN(0xe28a37da, 0xb536c66a),
+ TOBN(0x279ce87b, 0x8e49e6a9), TOBN(0x70ccfe8d, 0xfdcec8e3),
+ TOBN(0x2193e4e0, 0x3ba464b2), TOBN(0x0f39d60e, 0xaca9a398),
+ TOBN(0x7d7932af, 0xf82c12ab), TOBN(0xd8ff50ed, 0x91e7e0f7),
+ TOBN(0xea961058, 0xfa28a7e0), TOBN(0xc726cf25, 0x0bf5ec74),
+ TOBN(0xe74d55c8, 0xdb229666), TOBN(0x0bd9abbf, 0xa57f5799),
+ TOBN(0x7479ef07, 0x4dfc47b3), TOBN(0xd9c65fc3, 0x0c52f91d),
+ TOBN(0x8e0283fe, 0x36a8bde2), TOBN(0xa32a8b5e, 0x7d4b7280),
+ TOBN(0x6a677c61, 0x12e83233), TOBN(0x0fbb3512, 0xdcc9bf28),
+ TOBN(0x562e8ea5, 0x0d780f61), TOBN(0x0db8b22b, 0x1dc4e89c),
+ TOBN(0x0a6fd1fb, 0x89be0144), TOBN(0x8c77d246, 0xca57113b),
+ TOBN(0x4639075d, 0xff09c91c), TOBN(0x5b47b17f, 0x5060824c),
+ TOBN(0x58aea2b0, 0x16287b52), TOBN(0xa1343520, 0xd0cd8eb0),
+ TOBN(0x6148b4d0, 0xc5d58573), TOBN(0xdd2b6170, 0x291c68ae),
+ TOBN(0xa61b3929, 0x1da3b3b7), TOBN(0x5f946d79, 0x08c4ac10),
+ TOBN(0x4105d4a5, 0x7217d583), TOBN(0x5061da3d, 0x25e6de5e),
+ TOBN(0x3113940d, 0xec1b4991), TOBN(0xf12195e1, 0x36f485ae),
+ TOBN(0xa7507fb2, 0x731a2ee0), TOBN(0x95057a8e, 0x6e9e196e),
+ TOBN(0xa3c2c911, 0x2e130136), TOBN(0x97dfbb36, 0x33c60d15),
+ TOBN(0xcaf3c581, 0xb300ee2b), TOBN(0x77f25d90, 0xf4bac8b8),
+ TOBN(0xdb1c4f98, 0x6d840cd6), TOBN(0x471d62c0, 0xe634288c),
+ TOBN(0x8ec2f85e, 0xcec8a161), TOBN(0x41f37cbc, 0xfa6f4ae2),
+ TOBN(0x6793a20f, 0x4b709985), TOBN(0x7a7bd33b, 0xefa8985b),
+ TOBN(0x2c6a3fbd, 0x938e6446), TOBN(0x19042619, 0x2a8d47c1),
+ TOBN(0x16848667, 0xcc36975f), TOBN(0x02acf168, 0x9d5f1dfb),
+ TOBN(0x62d41ad4, 0x613baa94), TOBN(0xb56fbb92, 0x9f684670),
+ TOBN(0xce610d0d, 0xe9e40569), TOBN(0x7b99c65f, 0x35489fef),
+ TOBN(0x0c88ad1b, 0x3df18b97), TOBN(0x81b7d9be, 0x5d0e9edb),
+ TOBN(0xd85218c0, 0xc716cc0a), TOBN(0xf4b5ff90, 0x85691c49),
+ TOBN(0xa4fd666b, 0xce356ac6), TOBN(0x17c72895, 0x4b327a7a),
+ TOBN(0xf93d5085, 0xda6be7de), TOBN(0xff71530e, 0x3301d34e),
+ TOBN(0x4cd96442, 0xd8f448e8), TOBN(0x9283d331, 0x2ed18ffa),
+ TOBN(0x4d33dd99, 0x2a849870), TOBN(0xa716964b, 0x41576335),
+ TOBN(0xff5e3a9b, 0x179be0e5), TOBN(0x5b9d6b1b, 0x83b13632),
+ TOBN(0x3b8bd7d4, 0xa52f313b), TOBN(0xc9dd95a0, 0x637a4660),
+ TOBN(0x30035962, 0x0b3e218f), TOBN(0xce1481a3, 0xc7b28a3c),
+ TOBN(0xab41b43a, 0x43228d83), TOBN(0x24ae1c30, 0x4ad63f99),
+ TOBN(0x8e525f1a, 0x46a51229), TOBN(0x14af860f, 0xcd26d2b4),
+ TOBN(0xd6baef61, 0x3f714aa1), TOBN(0xf51865ad, 0xeb78795e),
+ TOBN(0xd3e21fce, 0xe6a9d694), TOBN(0x82ceb1dd, 0x8a37b527)}
+};
diff --git a/crypto/openssl/crypto/ecdh/Makefile b/crypto/openssl/crypto/ecdh/Makefile
index f076635..1b31ba1 100644
--- a/crypto/openssl/crypto/ecdh/Makefile
+++ b/crypto/openssl/crypto/ecdh/Makefile
@@ -17,9 +17,9 @@ TEST=ecdhtest.c
APPS=
LIB=$(TOP)/libcrypto.a
-LIBSRC= ech_lib.c ech_ossl.c ech_key.c ech_err.c
+LIBSRC= ech_lib.c ech_ossl.c ech_key.c ech_err.c ech_kdf.c
-LIBOBJ= ech_lib.o ech_ossl.o ech_key.o ech_err.o
+LIBOBJ= ech_lib.o ech_ossl.o ech_key.o ech_err.o ech_kdf.o
SRC= $(LIBSRC)
@@ -85,6 +85,14 @@ ech_err.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
ech_err.o: ../../include/openssl/ossl_typ.h ../../include/openssl/safestack.h
ech_err.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
ech_err.o: ech_err.c
+ech_kdf.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h
+ech_kdf.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
+ech_kdf.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
+ech_kdf.o: ../../include/openssl/evp.h ../../include/openssl/obj_mac.h
+ech_kdf.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
+ech_kdf.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
+ech_kdf.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h
+ech_kdf.o: ../../include/openssl/symhacks.h ech_kdf.c
ech_key.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h
ech_key.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
ech_key.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
diff --git a/crypto/openssl/crypto/ecdh/ecdh.h b/crypto/openssl/crypto/ecdh/ecdh.h
index a9b811a..25348b3 100644
--- a/crypto/openssl/crypto/ecdh/ecdh.h
+++ b/crypto/openssl/crypto/ecdh/ecdh.h
@@ -85,6 +85,8 @@
extern "C" {
#endif
+# define EC_FLAG_COFACTOR_ECDH 0x1000
+
const ECDH_METHOD *ECDH_OpenSSL(void);
void ECDH_set_default_method(const ECDH_METHOD *);
@@ -101,6 +103,11 @@ int ECDH_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new
int ECDH_set_ex_data(EC_KEY *d, int idx, void *arg);
void *ECDH_get_ex_data(EC_KEY *d, int idx);
+int ECDH_KDF_X9_62(unsigned char *out, size_t outlen,
+ const unsigned char *Z, size_t Zlen,
+ const unsigned char *sinfo, size_t sinfolen,
+ const EVP_MD *md);
+
/* BEGIN ERROR CODES */
/*
* The following lines are auto generated by the script mkerr.pl. Any changes
diff --git a/crypto/openssl/crypto/ecdh/ecdhtest.c b/crypto/openssl/crypto/ecdh/ecdhtest.c
index 996321d..2fe2c66 100644
--- a/crypto/openssl/crypto/ecdh/ecdhtest.c
+++ b/crypto/openssl/crypto/ecdh/ecdhtest.c
@@ -312,6 +312,170 @@ static int test_ecdh_curve(int nid, const char *text, BN_CTX *ctx, BIO *out)
return (ret);
}
+/* Keys and shared secrets from RFC 7027 */
+
+static const unsigned char bp256_da[] = {
+ 0x81, 0xDB, 0x1E, 0xE1, 0x00, 0x15, 0x0F, 0xF2, 0xEA, 0x33, 0x8D, 0x70,
+ 0x82, 0x71, 0xBE, 0x38, 0x30, 0x0C, 0xB5, 0x42, 0x41, 0xD7, 0x99, 0x50,
+ 0xF7, 0x7B, 0x06, 0x30, 0x39, 0x80, 0x4F, 0x1D
+};
+
+static const unsigned char bp256_db[] = {
+ 0x55, 0xE4, 0x0B, 0xC4, 0x1E, 0x37, 0xE3, 0xE2, 0xAD, 0x25, 0xC3, 0xC6,
+ 0x65, 0x45, 0x11, 0xFF, 0xA8, 0x47, 0x4A, 0x91, 0xA0, 0x03, 0x20, 0x87,
+ 0x59, 0x38, 0x52, 0xD3, 0xE7, 0xD7, 0x6B, 0xD3
+};
+
+static const unsigned char bp256_Z[] = {
+ 0x89, 0xAF, 0xC3, 0x9D, 0x41, 0xD3, 0xB3, 0x27, 0x81, 0x4B, 0x80, 0x94,
+ 0x0B, 0x04, 0x25, 0x90, 0xF9, 0x65, 0x56, 0xEC, 0x91, 0xE6, 0xAE, 0x79,
+ 0x39, 0xBC, 0xE3, 0x1F, 0x3A, 0x18, 0xBF, 0x2B
+};
+
+static const unsigned char bp384_da[] = {
+ 0x1E, 0x20, 0xF5, 0xE0, 0x48, 0xA5, 0x88, 0x6F, 0x1F, 0x15, 0x7C, 0x74,
+ 0xE9, 0x1B, 0xDE, 0x2B, 0x98, 0xC8, 0xB5, 0x2D, 0x58, 0xE5, 0x00, 0x3D,
+ 0x57, 0x05, 0x3F, 0xC4, 0xB0, 0xBD, 0x65, 0xD6, 0xF1, 0x5E, 0xB5, 0xD1,
+ 0xEE, 0x16, 0x10, 0xDF, 0x87, 0x07, 0x95, 0x14, 0x36, 0x27, 0xD0, 0x42
+};
+
+static const unsigned char bp384_db[] = {
+ 0x03, 0x26, 0x40, 0xBC, 0x60, 0x03, 0xC5, 0x92, 0x60, 0xF7, 0x25, 0x0C,
+ 0x3D, 0xB5, 0x8C, 0xE6, 0x47, 0xF9, 0x8E, 0x12, 0x60, 0xAC, 0xCE, 0x4A,
+ 0xCD, 0xA3, 0xDD, 0x86, 0x9F, 0x74, 0xE0, 0x1F, 0x8B, 0xA5, 0xE0, 0x32,
+ 0x43, 0x09, 0xDB, 0x6A, 0x98, 0x31, 0x49, 0x7A, 0xBA, 0xC9, 0x66, 0x70
+};
+
+static const unsigned char bp384_Z[] = {
+ 0x0B, 0xD9, 0xD3, 0xA7, 0xEA, 0x0B, 0x3D, 0x51, 0x9D, 0x09, 0xD8, 0xE4,
+ 0x8D, 0x07, 0x85, 0xFB, 0x74, 0x4A, 0x6B, 0x35, 0x5E, 0x63, 0x04, 0xBC,
+ 0x51, 0xC2, 0x29, 0xFB, 0xBC, 0xE2, 0x39, 0xBB, 0xAD, 0xF6, 0x40, 0x37,
+ 0x15, 0xC3, 0x5D, 0x4F, 0xB2, 0xA5, 0x44, 0x4F, 0x57, 0x5D, 0x4F, 0x42
+};
+
+static const unsigned char bp512_da[] = {
+ 0x16, 0x30, 0x2F, 0xF0, 0xDB, 0xBB, 0x5A, 0x8D, 0x73, 0x3D, 0xAB, 0x71,
+ 0x41, 0xC1, 0xB4, 0x5A, 0xCB, 0xC8, 0x71, 0x59, 0x39, 0x67, 0x7F, 0x6A,
+ 0x56, 0x85, 0x0A, 0x38, 0xBD, 0x87, 0xBD, 0x59, 0xB0, 0x9E, 0x80, 0x27,
+ 0x96, 0x09, 0xFF, 0x33, 0x3E, 0xB9, 0xD4, 0xC0, 0x61, 0x23, 0x1F, 0xB2,
+ 0x6F, 0x92, 0xEE, 0xB0, 0x49, 0x82, 0xA5, 0xF1, 0xD1, 0x76, 0x4C, 0xAD,
+ 0x57, 0x66, 0x54, 0x22
+};
+
+static const unsigned char bp512_db[] = {
+ 0x23, 0x0E, 0x18, 0xE1, 0xBC, 0xC8, 0x8A, 0x36, 0x2F, 0xA5, 0x4E, 0x4E,
+ 0xA3, 0x90, 0x20, 0x09, 0x29, 0x2F, 0x7F, 0x80, 0x33, 0x62, 0x4F, 0xD4,
+ 0x71, 0xB5, 0xD8, 0xAC, 0xE4, 0x9D, 0x12, 0xCF, 0xAB, 0xBC, 0x19, 0x96,
+ 0x3D, 0xAB, 0x8E, 0x2F, 0x1E, 0xBA, 0x00, 0xBF, 0xFB, 0x29, 0xE4, 0xD7,
+ 0x2D, 0x13, 0xF2, 0x22, 0x45, 0x62, 0xF4, 0x05, 0xCB, 0x80, 0x50, 0x36,
+ 0x66, 0xB2, 0x54, 0x29
+};
+
+static const unsigned char bp512_Z[] = {
+ 0xA7, 0x92, 0x70, 0x98, 0x65, 0x5F, 0x1F, 0x99, 0x76, 0xFA, 0x50, 0xA9,
+ 0xD5, 0x66, 0x86, 0x5D, 0xC5, 0x30, 0x33, 0x18, 0x46, 0x38, 0x1C, 0x87,
+ 0x25, 0x6B, 0xAF, 0x32, 0x26, 0x24, 0x4B, 0x76, 0xD3, 0x64, 0x03, 0xC0,
+ 0x24, 0xD7, 0xBB, 0xF0, 0xAA, 0x08, 0x03, 0xEA, 0xFF, 0x40, 0x5D, 0x3D,
+ 0x24, 0xF1, 0x1A, 0x9B, 0x5C, 0x0B, 0xEF, 0x67, 0x9F, 0xE1, 0x45, 0x4B,
+ 0x21, 0xC4, 0xCD, 0x1F
+};
+
+/* Given private value and NID, create EC_KEY structure */
+
+static EC_KEY *mk_eckey(int nid, const unsigned char *p, size_t plen)
+{
+ int ok = 0;
+ EC_KEY *k = NULL;
+ BIGNUM *priv = NULL;
+ EC_POINT *pub = NULL;
+ const EC_GROUP *grp;
+ k = EC_KEY_new_by_curve_name(nid);
+ if (!k)
+ goto err;
+ priv = BN_bin2bn(p, plen, NULL);
+ if (!priv)
+ goto err;
+ if (!EC_KEY_set_private_key(k, priv))
+ goto err;
+ grp = EC_KEY_get0_group(k);
+ pub = EC_POINT_new(grp);
+ if (!pub)
+ goto err;
+ if (!EC_POINT_mul(grp, pub, priv, NULL, NULL, NULL))
+ goto err;
+ if (!EC_KEY_set_public_key(k, pub))
+ goto err;
+ ok = 1;
+ err:
+ if (priv)
+ BN_clear_free(priv);
+ if (pub)
+ EC_POINT_free(pub);
+ if (ok)
+ return k;
+ else if (k)
+ EC_KEY_free(k);
+ return NULL;
+}
+
+/*
+ * Known answer test: compute shared secret and check it matches expected
+ * value.
+ */
+
+static int ecdh_kat(BIO *out, const char *cname, int nid,
+ const unsigned char *k1, size_t k1_len,
+ const unsigned char *k2, size_t k2_len,
+ const unsigned char *Z, size_t Zlen)
+{
+ int rv = 0;
+ EC_KEY *key1 = NULL, *key2 = NULL;
+ unsigned char *Ztmp = NULL;
+ size_t Ztmplen;
+ BIO_puts(out, "Testing ECDH shared secret with ");
+ BIO_puts(out, cname);
+ key1 = mk_eckey(nid, k1, k1_len);
+ key2 = mk_eckey(nid, k2, k2_len);
+ if (!key1 || !key2)
+ goto err;
+ Ztmplen = (EC_GROUP_get_degree(EC_KEY_get0_group(key1)) + 7) / 8;
+ if (Ztmplen != Zlen)
+ goto err;
+ Ztmp = OPENSSL_malloc(Ztmplen);
+ if (!ECDH_compute_key(Ztmp, Ztmplen,
+ EC_KEY_get0_public_key(key2), key1, 0))
+ goto err;
+ if (memcmp(Ztmp, Z, Zlen))
+ goto err;
+ memset(Ztmp, 0, Zlen);
+ if (!ECDH_compute_key(Ztmp, Ztmplen,
+ EC_KEY_get0_public_key(key1), key2, 0))
+ goto err;
+ if (memcmp(Ztmp, Z, Zlen))
+ goto err;
+ rv = 1;
+ err:
+ if (key1)
+ EC_KEY_free(key1);
+ if (key2)
+ EC_KEY_free(key2);
+ if (Ztmp)
+ OPENSSL_free(Ztmp);
+ if (rv)
+ BIO_puts(out, " ok\n");
+ else {
+ fprintf(stderr, "Error in ECDH routines\n");
+ ERR_print_errors_fp(stderr);
+ }
+ return rv;
+}
+
+# define test_ecdh_kat(bio, curve, bits) \
+ ecdh_kat(bio, curve, NID_brainpoolP##bits##r1, \
+ bp##bits##_da, sizeof(bp##bits##_da), \
+ bp##bits##_db, sizeof(bp##bits##_db), \
+ bp##bits##_Z, sizeof(bp##bits##_Z))
+
int main(int argc, char *argv[])
{
BN_CTX *ctx = NULL;
@@ -372,6 +536,12 @@ int main(int argc, char *argv[])
if (!test_ecdh_curve(NID_sect571r1, "NIST Binary-Curve B-571", ctx, out))
goto err;
# endif
+ if (!test_ecdh_kat(out, "Brainpool Prime-Curve brainpoolP256r1", 256))
+ goto err;
+ if (!test_ecdh_kat(out, "Brainpool Prime-Curve brainpoolP384r1", 384))
+ goto err;
+ if (!test_ecdh_kat(out, "Brainpool Prime-Curve brainpoolP512r1", 512))
+ goto err;
ret = 0;
diff --git a/crypto/openssl/crypto/ecdh/ech_kdf.c b/crypto/openssl/crypto/ecdh/ech_kdf.c
new file mode 100644
index 0000000..ac722ac
--- /dev/null
+++ b/crypto/openssl/crypto/ecdh/ech_kdf.c
@@ -0,0 +1,111 @@
+/* crypto/ecdh/ec_kdf.c */
+/*
+ * Written by Stephen Henson for the OpenSSL project.
+ */
+/* ====================================================================
+ * Copyright (c) 2013 The OpenSSL Project. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * 3. All advertising materials mentioning features or use of this
+ * software must display the following acknowledgment:
+ * "This product includes software developed by the OpenSSL Project
+ * for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
+ *
+ * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
+ * endorse or promote products derived from this software without
+ * prior written permission. For written permission, please contact
+ * openssl-core@openssl.org.
+ *
+ * 5. Products derived from this software may not be called "OpenSSL"
+ * nor may "OpenSSL" appear in their names without prior written
+ * permission of the OpenSSL Project.
+ *
+ * 6. Redistributions of any form whatsoever must retain the following
+ * acknowledgment:
+ * "This product includes software developed by the OpenSSL Project
+ * for use in the OpenSSL Toolkit (http://www.openssl.org/)"
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
+ * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
+ * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+ * OF THE POSSIBILITY OF SUCH DAMAGE.
+ * ====================================================================
+ */
+
+#define OPENSSL_FIPSAPI
+
+#include <string.h>
+#include <openssl/ecdh.h>
+#include <openssl/evp.h>
+
+/* Key derivation function from X9.62/SECG */
+/* Way more than we will ever need */
+#define ECDH_KDF_MAX (1 << 30)
+
+int ECDH_KDF_X9_62(unsigned char *out, size_t outlen,
+ const unsigned char *Z, size_t Zlen,
+ const unsigned char *sinfo, size_t sinfolen,
+ const EVP_MD *md)
+{
+ EVP_MD_CTX mctx;
+ int rv = 0;
+ unsigned int i;
+ size_t mdlen;
+ unsigned char ctr[4];
+ if (sinfolen > ECDH_KDF_MAX || outlen > ECDH_KDF_MAX
+ || Zlen > ECDH_KDF_MAX)
+ return 0;
+ mdlen = EVP_MD_size(md);
+ EVP_MD_CTX_init(&mctx);
+ for (i = 1;; i++) {
+ unsigned char mtmp[EVP_MAX_MD_SIZE];
+ EVP_DigestInit_ex(&mctx, md, NULL);
+ ctr[3] = i & 0xFF;
+ ctr[2] = (i >> 8) & 0xFF;
+ ctr[1] = (i >> 16) & 0xFF;
+ ctr[0] = (i >> 24) & 0xFF;
+ if (!EVP_DigestUpdate(&mctx, Z, Zlen))
+ goto err;
+ if (!EVP_DigestUpdate(&mctx, ctr, sizeof(ctr)))
+ goto err;
+ if (!EVP_DigestUpdate(&mctx, sinfo, sinfolen))
+ goto err;
+ if (outlen >= mdlen) {
+ if (!EVP_DigestFinal(&mctx, out, NULL))
+ goto err;
+ outlen -= mdlen;
+ if (outlen == 0)
+ break;
+ out += mdlen;
+ } else {
+ if (!EVP_DigestFinal(&mctx, mtmp, NULL))
+ goto err;
+ memcpy(out, mtmp, outlen);
+ OPENSSL_cleanse(mtmp, mdlen);
+ break;
+ }
+ }
+ rv = 1;
+ err:
+ EVP_MD_CTX_cleanup(&mctx);
+ return rv;
+}
diff --git a/crypto/openssl/crypto/ecdh/ech_ossl.c b/crypto/openssl/crypto/ecdh/ech_ossl.c
index d448b19..df115cc 100644
--- a/crypto/openssl/crypto/ecdh/ech_ossl.c
+++ b/crypto/openssl/crypto/ecdh/ech_ossl.c
@@ -138,6 +138,16 @@ static int ecdh_compute_key(void *out, size_t outlen, const EC_POINT *pub_key,
}
group = EC_KEY_get0_group(ecdh);
+
+ if (EC_KEY_get_flags(ecdh) & EC_FLAG_COFACTOR_ECDH) {
+ if (!EC_GROUP_get_cofactor(group, x, ctx) ||
+ !BN_mul(x, x, priv_key, ctx)) {
+ ECDHerr(ECDH_F_ECDH_COMPUTE_KEY, ERR_R_MALLOC_FAILURE);
+ goto err;
+ }
+ priv_key = x;
+ }
+
if ((tmp = EC_POINT_new(group)) == NULL) {
ECDHerr(ECDH_F_ECDH_COMPUTE_KEY, ERR_R_MALLOC_FAILURE);
goto err;
diff --git a/crypto/openssl/crypto/ecdsa/ecdsa.h b/crypto/openssl/crypto/ecdsa/ecdsa.h
index faf76b1..c4016ac 100644
--- a/crypto/openssl/crypto/ecdsa/ecdsa.h
+++ b/crypto/openssl/crypto/ecdsa/ecdsa.h
@@ -228,6 +228,80 @@ int ECDSA_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new
int ECDSA_set_ex_data(EC_KEY *d, int idx, void *arg);
void *ECDSA_get_ex_data(EC_KEY *d, int idx);
+/** Allocates and initialize a ECDSA_METHOD structure
+ * \param ecdsa_method pointer to ECDSA_METHOD to copy. (May be NULL)
+ * \return pointer to a ECDSA_METHOD structure or NULL if an error occurred
+ */
+
+ECDSA_METHOD *ECDSA_METHOD_new(ECDSA_METHOD *ecdsa_method);
+
+/** frees a ECDSA_METHOD structure
+ * \param ecdsa_method pointer to the ECDSA_METHOD structure
+ */
+void ECDSA_METHOD_free(ECDSA_METHOD *ecdsa_method);
+
+/** Sets application specific data in the ECDSA_METHOD
+ * \param ecdsa_method pointer to existing ECDSA_METHOD
+ * \param app application specific data to set
+ */
+
+void ECDSA_METHOD_set_app_data(ECDSA_METHOD *ecdsa_method, void *app);
+
+/** Returns application specific data from a ECDSA_METHOD structure
+ * \param ecdsa_method pointer to ECDSA_METHOD structure
+ * \return pointer to application specific data.
+ */
+
+void *ECDSA_METHOD_get_app_data(ECDSA_METHOD *ecdsa_method);
+
+/** Set the ECDSA_do_sign function in the ECDSA_METHOD
+ * \param ecdsa_method pointer to existing ECDSA_METHOD
+ * \param ecdsa_do_sign a funtion of type ECDSA_do_sign
+ */
+
+void ECDSA_METHOD_set_sign(ECDSA_METHOD *ecdsa_method,
+ ECDSA_SIG *(*ecdsa_do_sign) (const unsigned char
+ *dgst, int dgst_len,
+ const BIGNUM *inv,
+ const BIGNUM *rp,
+ EC_KEY *eckey));
+
+/** Set the ECDSA_sign_setup function in the ECDSA_METHOD
+ * \param ecdsa_method pointer to existing ECDSA_METHOD
+ * \param ecdsa_sign_setup a funtion of type ECDSA_sign_setup
+ */
+
+void ECDSA_METHOD_set_sign_setup(ECDSA_METHOD *ecdsa_method,
+ int (*ecdsa_sign_setup) (EC_KEY *eckey,
+ BN_CTX *ctx,
+ BIGNUM **kinv,
+ BIGNUM **r));
+
+/** Set the ECDSA_do_verify function in the ECDSA_METHOD
+ * \param ecdsa_method pointer to existing ECDSA_METHOD
+ * \param ecdsa_do_verify a funtion of type ECDSA_do_verify
+ */
+
+void ECDSA_METHOD_set_verify(ECDSA_METHOD *ecdsa_method,
+ int (*ecdsa_do_verify) (const unsigned char
+ *dgst, int dgst_len,
+ const ECDSA_SIG *sig,
+ EC_KEY *eckey));
+
+void ECDSA_METHOD_set_flags(ECDSA_METHOD *ecdsa_method, int flags);
+
+/** Set the flags field in the ECDSA_METHOD
+ * \param ecdsa_method pointer to existing ECDSA_METHOD
+ * \param flags flags value to set
+ */
+
+void ECDSA_METHOD_set_name(ECDSA_METHOD *ecdsa_method, char *name);
+
+/** Set the name field in the ECDSA_METHOD
+ * \param ecdsa_method pointer to existing ECDSA_METHOD
+ * \param name name to set
+ */
+
/* BEGIN ERROR CODES */
/*
* The following lines are auto generated by the script mkerr.pl. Any changes
@@ -242,6 +316,7 @@ void ERR_load_ECDSA_strings(void);
# define ECDSA_F_ECDSA_DATA_NEW_METHOD 100
# define ECDSA_F_ECDSA_DO_SIGN 101
# define ECDSA_F_ECDSA_DO_VERIFY 102
+# define ECDSA_F_ECDSA_METHOD_NEW 105
# define ECDSA_F_ECDSA_SIGN_SETUP 103
/* Reason codes. */
diff --git a/crypto/openssl/crypto/ecdsa/ecs_err.c b/crypto/openssl/crypto/ecdsa/ecs_err.c
index 6fc64a0..f1fa7b5 100644
--- a/crypto/openssl/crypto/ecdsa/ecs_err.c
+++ b/crypto/openssl/crypto/ecdsa/ecs_err.c
@@ -74,6 +74,7 @@ static ERR_STRING_DATA ECDSA_str_functs[] = {
{ERR_FUNC(ECDSA_F_ECDSA_DATA_NEW_METHOD), "ECDSA_DATA_NEW_METHOD"},
{ERR_FUNC(ECDSA_F_ECDSA_DO_SIGN), "ECDSA_do_sign"},
{ERR_FUNC(ECDSA_F_ECDSA_DO_VERIFY), "ECDSA_do_verify"},
+ {ERR_FUNC(ECDSA_F_ECDSA_METHOD_NEW), "ECDSA_METHOD_new"},
{ERR_FUNC(ECDSA_F_ECDSA_SIGN_SETUP), "ECDSA_sign_setup"},
{0, NULL}
};
diff --git a/crypto/openssl/crypto/ecdsa/ecs_lib.c b/crypto/openssl/crypto/ecdsa/ecs_lib.c
index 0f2d343..1c02310 100644
--- a/crypto/openssl/crypto/ecdsa/ecs_lib.c
+++ b/crypto/openssl/crypto/ecdsa/ecs_lib.c
@@ -275,3 +275,80 @@ void *ECDSA_get_ex_data(EC_KEY *d, int idx)
return NULL;
return (CRYPTO_get_ex_data(&ecdsa->ex_data, idx));
}
+
+ECDSA_METHOD *ECDSA_METHOD_new(ECDSA_METHOD *ecdsa_meth)
+{
+ ECDSA_METHOD *ret;
+
+ ret = OPENSSL_malloc(sizeof(ECDSA_METHOD));
+ if (ret == NULL) {
+ ECDSAerr(ECDSA_F_ECDSA_METHOD_NEW, ERR_R_MALLOC_FAILURE);
+ return NULL;
+ }
+
+ if (ecdsa_meth)
+ *ret = *ecdsa_meth;
+ else {
+ ret->ecdsa_sign_setup = 0;
+ ret->ecdsa_do_sign = 0;
+ ret->ecdsa_do_verify = 0;
+ ret->name = NULL;
+ ret->flags = 0;
+ }
+ ret->flags |= ECDSA_METHOD_FLAG_ALLOCATED;
+ return ret;
+}
+
+void ECDSA_METHOD_set_sign(ECDSA_METHOD *ecdsa_method,
+ ECDSA_SIG *(*ecdsa_do_sign) (const unsigned char
+ *dgst, int dgst_len,
+ const BIGNUM *inv,
+ const BIGNUM *rp,
+ EC_KEY *eckey))
+{
+ ecdsa_method->ecdsa_do_sign = ecdsa_do_sign;
+}
+
+void ECDSA_METHOD_set_sign_setup(ECDSA_METHOD *ecdsa_method,
+ int (*ecdsa_sign_setup) (EC_KEY *eckey,
+ BN_CTX *ctx,
+ BIGNUM **kinv,
+ BIGNUM **r))
+{
+ ecdsa_method->ecdsa_sign_setup = ecdsa_sign_setup;
+}
+
+void ECDSA_METHOD_set_verify(ECDSA_METHOD *ecdsa_method,
+ int (*ecdsa_do_verify) (const unsigned char
+ *dgst, int dgst_len,
+ const ECDSA_SIG *sig,
+ EC_KEY *eckey))
+{
+ ecdsa_method->ecdsa_do_verify = ecdsa_do_verify;
+}
+
+void ECDSA_METHOD_set_flags(ECDSA_METHOD *ecdsa_method, int flags)
+{
+ ecdsa_method->flags = flags | ECDSA_METHOD_FLAG_ALLOCATED;
+}
+
+void ECDSA_METHOD_set_name(ECDSA_METHOD *ecdsa_method, char *name)
+{
+ ecdsa_method->name = name;
+}
+
+void ECDSA_METHOD_free(ECDSA_METHOD *ecdsa_method)
+{
+ if (ecdsa_method->flags & ECDSA_METHOD_FLAG_ALLOCATED)
+ OPENSSL_free(ecdsa_method);
+}
+
+void ECDSA_METHOD_set_app_data(ECDSA_METHOD *ecdsa_method, void *app)
+{
+ ecdsa_method->app_data = app;
+}
+
+void *ECDSA_METHOD_get_app_data(ECDSA_METHOD *ecdsa_method)
+{
+ return ecdsa_method->app_data;
+}
diff --git a/crypto/openssl/crypto/ecdsa/ecs_locl.h b/crypto/openssl/crypto/ecdsa/ecs_locl.h
index 76b2caf..d3a5efc 100644
--- a/crypto/openssl/crypto/ecdsa/ecs_locl.h
+++ b/crypto/openssl/crypto/ecdsa/ecs_locl.h
@@ -79,9 +79,13 @@ struct ecdsa_method {
int (*finish) (EC_KEY *eckey);
# endif
int flags;
- char *app_data;
+ void *app_data;
};
+/* The ECDSA_METHOD was allocated and can be freed */
+
+# define ECDSA_METHOD_FLAG_ALLOCATED 0x2
+
/*
* If this flag is set the ECDSA method is FIPS compliant and can be used in
* FIPS mode. This is set in the validated module method. If an application
diff --git a/crypto/openssl/crypto/ecdsa/ecs_ossl.c b/crypto/openssl/crypto/ecdsa/ecs_ossl.c
index 4c5fa6b..dd76960 100644
--- a/crypto/openssl/crypto/ecdsa/ecs_ossl.c
+++ b/crypto/openssl/crypto/ecdsa/ecs_ossl.c
@@ -179,10 +179,32 @@ static int ecdsa_sign_setup(EC_KEY *eckey, BN_CTX *ctx_in, BIGNUM **kinvp,
while (BN_is_zero(r));
/* compute the inverse of k */
- if (!BN_mod_inverse(k, k, order, ctx)) {
- ECDSAerr(ECDSA_F_ECDSA_SIGN_SETUP, ERR_R_BN_LIB);
- goto err;
+ if (EC_GROUP_get_mont_data(group) != NULL) {
+ /*
+ * We want inverse in constant time, therefore we utilize the fact
+ * order must be prime and use Fermats Little Theorem instead.
+ */
+ if (!BN_set_word(X, 2)) {
+ ECDSAerr(ECDSA_F_ECDSA_SIGN_SETUP, ERR_R_BN_LIB);
+ goto err;
+ }
+ if (!BN_mod_sub(X, order, X, order, ctx)) {
+ ECDSAerr(ECDSA_F_ECDSA_SIGN_SETUP, ERR_R_BN_LIB);
+ goto err;
+ }
+ BN_set_flags(X, BN_FLG_CONSTTIME);
+ if (!BN_mod_exp_mont_consttime
+ (k, k, X, order, ctx, EC_GROUP_get_mont_data(group))) {
+ ECDSAerr(ECDSA_F_ECDSA_SIGN_SETUP, ERR_R_BN_LIB);
+ goto err;
+ }
+ } else {
+ if (!BN_mod_inverse(k, k, order, ctx)) {
+ ECDSAerr(ECDSA_F_ECDSA_SIGN_SETUP, ERR_R_BN_LIB);
+ goto err;
+ }
}
+
/* clear old values if necessary */
if (*rp != NULL)
BN_clear_free(*rp);
diff --git a/crypto/openssl/crypto/engine/Makefile b/crypto/openssl/crypto/engine/Makefile
index 8ceb747..426388e 100644
--- a/crypto/openssl/crypto/engine/Makefile
+++ b/crypto/openssl/crypto/engine/Makefile
@@ -22,13 +22,13 @@ LIBSRC= eng_err.c eng_lib.c eng_list.c eng_init.c eng_ctrl.c \
tb_rsa.c tb_dsa.c tb_ecdsa.c tb_dh.c tb_ecdh.c tb_rand.c tb_store.c \
tb_cipher.c tb_digest.c tb_pkmeth.c tb_asnmth.c \
eng_openssl.c eng_cnf.c eng_dyn.c eng_cryptodev.c \
- eng_rsax.c eng_rdrand.c
+ eng_rdrand.c
LIBOBJ= eng_err.o eng_lib.o eng_list.o eng_init.o eng_ctrl.o \
eng_table.o eng_pkey.o eng_fat.o eng_all.o \
tb_rsa.o tb_dsa.o tb_ecdsa.o tb_dh.o tb_ecdh.o tb_rand.o tb_store.o \
tb_cipher.o tb_digest.o tb_pkmeth.o tb_asnmth.o \
eng_openssl.o eng_cnf.o eng_dyn.o eng_cryptodev.o \
- eng_rsax.o eng_rdrand.o
+ eng_rdrand.o
SRC= $(LIBSRC)
@@ -267,20 +267,6 @@ eng_rdrand.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
eng_rdrand.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
eng_rdrand.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
eng_rdrand.o: eng_rdrand.c
-eng_rsax.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h
-eng_rsax.o: ../../include/openssl/bn.h ../../include/openssl/buffer.h
-eng_rsax.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
-eng_rsax.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
-eng_rsax.o: ../../include/openssl/ecdsa.h ../../include/openssl/engine.h
-eng_rsax.o: ../../include/openssl/err.h ../../include/openssl/evp.h
-eng_rsax.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
-eng_rsax.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
-eng_rsax.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
-eng_rsax.o: ../../include/openssl/pkcs7.h ../../include/openssl/rsa.h
-eng_rsax.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
-eng_rsax.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
-eng_rsax.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
-eng_rsax.o: eng_rsax.c
eng_table.o: ../../e_os.h ../../include/openssl/asn1.h
eng_table.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h
eng_table.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
diff --git a/crypto/openssl/crypto/engine/eng_all.c b/crypto/openssl/crypto/engine/eng_all.c
index 7edf12e..195a3a9 100644
--- a/crypto/openssl/crypto/engine/eng_all.c
+++ b/crypto/openssl/crypto/engine/eng_all.c
@@ -76,9 +76,6 @@ void ENGINE_load_builtin_engines(void)
#if !defined(OPENSSL_NO_HW) && (defined(__OpenBSD__) || defined(__FreeBSD__) || defined(HAVE_CRYPTODEV))
ENGINE_load_cryptodev();
#endif
-#ifndef OPENSSL_NO_RSAX
- ENGINE_load_rsax();
-#endif
#ifndef OPENSSL_NO_RDRAND
ENGINE_load_rdrand();
#endif
diff --git a/crypto/openssl/crypto/engine/eng_cryptodev.c b/crypto/openssl/crypto/engine/eng_cryptodev.c
index bcb936d..926d95c 100644
--- a/crypto/openssl/crypto/engine/eng_cryptodev.c
+++ b/crypto/openssl/crypto/engine/eng_cryptodev.c
@@ -54,10 +54,10 @@ void ENGINE_load_cryptodev(void)
# include <sys/types.h>
# include <crypto/cryptodev.h>
-# include <crypto/dh/dh.h>
-# include <crypto/dsa/dsa.h>
-# include <crypto/err/err.h>
-# include <crypto/rsa/rsa.h>
+# include <openssl/dh.h>
+# include <openssl/dsa.h>
+# include <openssl/err.h>
+# include <openssl/rsa.h>
# include <sys/ioctl.h>
# include <errno.h>
# include <stdio.h>
@@ -160,6 +160,17 @@ static struct {
{
CRYPTO_AES_CBC, NID_aes_256_cbc, 16, 32,
},
+# ifdef CRYPTO_AES_CTR
+ {
+ CRYPTO_AES_CTR, NID_aes_128_ctr, 14, 16,
+ },
+ {
+ CRYPTO_AES_CTR, NID_aes_192_ctr, 14, 24,
+ },
+ {
+ CRYPTO_AES_CTR, NID_aes_256_ctr, 14, 32,
+ },
+# endif
{
CRYPTO_BLF_CBC, NID_bf_cbc, 8, 16,
},
@@ -630,6 +641,46 @@ const EVP_CIPHER cryptodev_aes_256_cbc = {
NULL
};
+# ifdef CRYPTO_AES_CTR
+const EVP_CIPHER cryptodev_aes_ctr = {
+ NID_aes_128_ctr,
+ 16, 16, 14,
+ EVP_CIPH_CTR_MODE,
+ cryptodev_init_key,
+ cryptodev_cipher,
+ cryptodev_cleanup,
+ sizeof(struct dev_crypto_state),
+ EVP_CIPHER_set_asn1_iv,
+ EVP_CIPHER_get_asn1_iv,
+ NULL
+};
+
+const EVP_CIPHER cryptodev_aes_ctr_192 = {
+ NID_aes_192_ctr,
+ 16, 24, 14,
+ EVP_CIPH_CTR_MODE,
+ cryptodev_init_key,
+ cryptodev_cipher,
+ cryptodev_cleanup,
+ sizeof(struct dev_crypto_state),
+ EVP_CIPHER_set_asn1_iv,
+ EVP_CIPHER_get_asn1_iv,
+ NULL
+};
+
+const EVP_CIPHER cryptodev_aes_ctr_256 = {
+ NID_aes_256_ctr,
+ 16, 32, 14,
+ EVP_CIPH_CTR_MODE,
+ cryptodev_init_key,
+ cryptodev_cipher,
+ cryptodev_cleanup,
+ sizeof(struct dev_crypto_state),
+ EVP_CIPHER_set_asn1_iv,
+ EVP_CIPHER_get_asn1_iv,
+ NULL
+};
+# endif
/*
* Registered by the ENGINE when used to find out how to deal with
* a particular NID in the ENGINE. this says what we'll do at the
@@ -667,6 +718,17 @@ cryptodev_engine_ciphers(ENGINE *e, const EVP_CIPHER **cipher,
case NID_aes_256_cbc:
*cipher = &cryptodev_aes_256_cbc;
break;
+# ifdef CRYPTO_AES_CTR
+ case NID_aes_128_ctr:
+ *cipher = &cryptodev_aes_ctr;
+ break;
+ case NID_aes_192_ctr:
+ *cipher = &cryptodev_aes_ctr_192;
+ break;
+ case NID_aes_256_ctr:
+ *cipher = &cryptodev_aes_ctr_256;
+ break;
+# endif
default:
*cipher = NULL;
break;
diff --git a/crypto/openssl/crypto/engine/eng_rsax.c b/crypto/openssl/crypto/engine/eng_rsax.c
deleted file mode 100644
index 86ee9d8..0000000
--- a/crypto/openssl/crypto/engine/eng_rsax.c
+++ /dev/null
@@ -1,701 +0,0 @@
-/* crypto/engine/eng_rsax.c */
-/* Copyright (c) 2010-2010 Intel Corp.
- * Author: Vinodh.Gopal@intel.com
- * Jim Guilford
- * Erdinc.Ozturk@intel.com
- * Maxim.Perminov@intel.com
- * Ying.Huang@intel.com
- *
- * More information about algorithm used can be found at:
- * http://www.cse.buffalo.edu/srds2009/escs2009_submission_Gopal.pdf
- */
-/* ====================================================================
- * Copyright (c) 1999-2001 The OpenSSL Project. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- *
- * 3. All advertising materials mentioning features or use of this
- * software must display the following acknowledgment:
- * "This product includes software developed by the OpenSSL Project
- * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)"
- *
- * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
- * endorse or promote products derived from this software without
- * prior written permission. For written permission, please contact
- * licensing@OpenSSL.org.
- *
- * 5. Products derived from this software may not be called "OpenSSL"
- * nor may "OpenSSL" appear in their names without prior written
- * permission of the OpenSSL Project.
- *
- * 6. Redistributions of any form whatsoever must retain the following
- * acknowledgment:
- * "This product includes software developed by the OpenSSL Project
- * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)"
- *
- * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
- * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
- * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
- * OF THE POSSIBILITY OF SUCH DAMAGE.
- * ====================================================================
- *
- * This product includes cryptographic software written by Eric Young
- * (eay@cryptsoft.com). This product includes software written by Tim
- * Hudson (tjh@cryptsoft.com).
- */
-
-#include <openssl/opensslconf.h>
-
-#include <stdio.h>
-#include <string.h>
-#include <openssl/crypto.h>
-#include <openssl/buffer.h>
-#include <openssl/engine.h>
-#ifndef OPENSSL_NO_RSA
-# include <openssl/rsa.h>
-#endif
-#include <openssl/bn.h>
-#include <openssl/err.h>
-
-/* RSAX is available **ONLY* on x86_64 CPUs */
-#undef COMPILE_RSAX
-
-#if (defined(__x86_64) || defined(__x86_64__) || \
- defined(_M_AMD64) || defined (_M_X64)) && !defined(OPENSSL_NO_ASM)
-# define COMPILE_RSAX
-static ENGINE *ENGINE_rsax(void);
-#endif
-
-void ENGINE_load_rsax(void)
-{
-/* On non-x86 CPUs it just returns. */
-#ifdef COMPILE_RSAX
- ENGINE *toadd = ENGINE_rsax();
- if (!toadd)
- return;
- ENGINE_add(toadd);
- ENGINE_free(toadd);
- ERR_clear_error();
-#endif
-}
-
-#ifdef COMPILE_RSAX
-# define E_RSAX_LIB_NAME "rsax engine"
-
-static int e_rsax_destroy(ENGINE *e);
-static int e_rsax_init(ENGINE *e);
-static int e_rsax_finish(ENGINE *e);
-static int e_rsax_ctrl(ENGINE *e, int cmd, long i, void *p, void (*f) (void));
-
-# ifndef OPENSSL_NO_RSA
-/* RSA stuff */
-static int e_rsax_rsa_mod_exp(BIGNUM *r, const BIGNUM *I, RSA *rsa,
- BN_CTX *ctx);
-static int e_rsax_rsa_finish(RSA *r);
-# endif
-
-static const ENGINE_CMD_DEFN e_rsax_cmd_defns[] = {
- {0, NULL, NULL, 0}
-};
-
-# ifndef OPENSSL_NO_RSA
-/* Our internal RSA_METHOD that we provide pointers to */
-static RSA_METHOD e_rsax_rsa = {
- "Intel RSA-X method",
- NULL,
- NULL,
- NULL,
- NULL,
- e_rsax_rsa_mod_exp,
- NULL,
- NULL,
- e_rsax_rsa_finish,
- RSA_FLAG_CACHE_PUBLIC | RSA_FLAG_CACHE_PRIVATE,
- NULL,
- NULL,
- NULL
-};
-# endif
-
-/* Constants used when creating the ENGINE */
-static const char *engine_e_rsax_id = "rsax";
-static const char *engine_e_rsax_name = "RSAX engine support";
-
-/* This internal function is used by ENGINE_rsax() */
-static int bind_helper(ENGINE *e)
-{
-# ifndef OPENSSL_NO_RSA
- const RSA_METHOD *meth1;
-# endif
- if (!ENGINE_set_id(e, engine_e_rsax_id) ||
- !ENGINE_set_name(e, engine_e_rsax_name) ||
-# ifndef OPENSSL_NO_RSA
- !ENGINE_set_RSA(e, &e_rsax_rsa) ||
-# endif
- !ENGINE_set_destroy_function(e, e_rsax_destroy) ||
- !ENGINE_set_init_function(e, e_rsax_init) ||
- !ENGINE_set_finish_function(e, e_rsax_finish) ||
- !ENGINE_set_ctrl_function(e, e_rsax_ctrl) ||
- !ENGINE_set_cmd_defns(e, e_rsax_cmd_defns))
- return 0;
-
-# ifndef OPENSSL_NO_RSA
- meth1 = RSA_PKCS1_SSLeay();
- e_rsax_rsa.rsa_pub_enc = meth1->rsa_pub_enc;
- e_rsax_rsa.rsa_pub_dec = meth1->rsa_pub_dec;
- e_rsax_rsa.rsa_priv_enc = meth1->rsa_priv_enc;
- e_rsax_rsa.rsa_priv_dec = meth1->rsa_priv_dec;
- e_rsax_rsa.bn_mod_exp = meth1->bn_mod_exp;
-# endif
- return 1;
-}
-
-static ENGINE *ENGINE_rsax(void)
-{
- ENGINE *ret = ENGINE_new();
- if (!ret)
- return NULL;
- if (!bind_helper(ret)) {
- ENGINE_free(ret);
- return NULL;
- }
- return ret;
-}
-
-# ifndef OPENSSL_NO_RSA
-/* Used to attach our own key-data to an RSA structure */
-static int rsax_ex_data_idx = -1;
-# endif
-
-static int e_rsax_destroy(ENGINE *e)
-{
- return 1;
-}
-
-/* (de)initialisation functions. */
-static int e_rsax_init(ENGINE *e)
-{
-# ifndef OPENSSL_NO_RSA
- if (rsax_ex_data_idx == -1)
- rsax_ex_data_idx = RSA_get_ex_new_index(0, NULL, NULL, NULL, NULL);
-# endif
- if (rsax_ex_data_idx == -1)
- return 0;
- return 1;
-}
-
-static int e_rsax_finish(ENGINE *e)
-{
- return 1;
-}
-
-static int e_rsax_ctrl(ENGINE *e, int cmd, long i, void *p, void (*f) (void))
-{
- int to_return = 1;
-
- switch (cmd) {
- /* The command isn't understood by this engine */
- default:
- to_return = 0;
- break;
- }
-
- return to_return;
-}
-
-# ifndef OPENSSL_NO_RSA
-
-# ifdef _WIN32
-typedef unsigned __int64 UINT64;
-# else
-typedef unsigned long long UINT64;
-# endif
-typedef unsigned short UINT16;
-
-/*
- * Table t is interleaved in the following manner: The order in memory is
- * t[0][0], t[0][1], ..., t[0][7], t[1][0], ... A particular 512-bit value is
- * stored in t[][index] rather than the more normal t[index][]; i.e. the
- * qwords of a particular entry in t are not adjacent in memory
- */
-
-/* Init BIGNUM b from the interleaved UINT64 array */
-static int interleaved_array_to_bn_512(BIGNUM *b, UINT64 *array);
-
-/*
- * Extract array elements from BIGNUM b To set the whole array from b, call
- * with n=8
- */
-static int bn_extract_to_array_512(const BIGNUM *b, unsigned int n,
- UINT64 *array);
-
-struct mod_ctx_512 {
- UINT64 t[8][8];
- UINT64 m[8];
- UINT64 m1[8]; /* 2^278 % m */
- UINT64 m2[8]; /* 2^640 % m */
- UINT64 k1[2]; /* (- 1/m) % 2^128 */
-};
-
-static int mod_exp_pre_compute_data_512(UINT64 *m, struct mod_ctx_512 *data);
-
-void mod_exp_512(UINT64 *result, /* 512 bits, 8 qwords */
- UINT64 *g, /* 512 bits, 8 qwords */
- UINT64 *exp, /* 512 bits, 8 qwords */
- struct mod_ctx_512 *data);
-
-typedef struct st_e_rsax_mod_ctx {
- UINT64 type;
- union {
- struct mod_ctx_512 b512;
- } ctx;
-
-} E_RSAX_MOD_CTX;
-
-static E_RSAX_MOD_CTX *e_rsax_get_ctx(RSA *rsa, int idx, BIGNUM *m)
-{
- E_RSAX_MOD_CTX *hptr;
-
- if (idx < 0 || idx > 2)
- return NULL;
-
- hptr = RSA_get_ex_data(rsa, rsax_ex_data_idx);
- if (!hptr) {
- hptr = OPENSSL_malloc(3 * sizeof(E_RSAX_MOD_CTX));
- if (!hptr)
- return NULL;
- hptr[2].type = hptr[1].type = hptr[0].type = 0;
- RSA_set_ex_data(rsa, rsax_ex_data_idx, hptr);
- }
-
- if (hptr[idx].type == (UINT64)BN_num_bits(m))
- return hptr + idx;
-
- if (BN_num_bits(m) == 512) {
- UINT64 _m[8];
- bn_extract_to_array_512(m, 8, _m);
- memset(&hptr[idx].ctx.b512, 0, sizeof(struct mod_ctx_512));
- mod_exp_pre_compute_data_512(_m, &hptr[idx].ctx.b512);
- }
-
- hptr[idx].type = BN_num_bits(m);
- return hptr + idx;
-}
-
-static int e_rsax_rsa_finish(RSA *rsa)
-{
- E_RSAX_MOD_CTX *hptr = RSA_get_ex_data(rsa, rsax_ex_data_idx);
- if (hptr) {
- OPENSSL_free(hptr);
- RSA_set_ex_data(rsa, rsax_ex_data_idx, NULL);
- }
- if (rsa->_method_mod_n)
- BN_MONT_CTX_free(rsa->_method_mod_n);
- if (rsa->_method_mod_p)
- BN_MONT_CTX_free(rsa->_method_mod_p);
- if (rsa->_method_mod_q)
- BN_MONT_CTX_free(rsa->_method_mod_q);
- return 1;
-}
-
-static int e_rsax_bn_mod_exp(BIGNUM *r, const BIGNUM *g, const BIGNUM *e,
- const BIGNUM *m, BN_CTX *ctx,
- BN_MONT_CTX *in_mont,
- E_RSAX_MOD_CTX *rsax_mod_ctx)
-{
- if (rsax_mod_ctx && BN_get_flags(e, BN_FLG_CONSTTIME) != 0) {
- if (BN_num_bits(m) == 512) {
- UINT64 _r[8];
- UINT64 _g[8];
- UINT64 _e[8];
-
- /* Init the arrays from the BIGNUMs */
- bn_extract_to_array_512(g, 8, _g);
- bn_extract_to_array_512(e, 8, _e);
-
- mod_exp_512(_r, _g, _e, &rsax_mod_ctx->ctx.b512);
- /* Return the result in the BIGNUM */
- interleaved_array_to_bn_512(r, _r);
- return 1;
- }
- }
-
- return BN_mod_exp_mont(r, g, e, m, ctx, in_mont);
-}
-
-/*
- * Declares for the Intel CIAP 512-bit / CRT / 1024 bit RSA modular
- * exponentiation routine precalculations and a structure to hold the
- * necessary values. These files are meant to live in crypto/rsa/ in the
- * target openssl.
- */
-
-/*
- * Local method: extracts a piece from a BIGNUM, to fit it into
- * an array. Call with n=8 to extract an entire 512-bit BIGNUM
- */
-static int bn_extract_to_array_512(const BIGNUM *b, unsigned int n,
- UINT64 *array)
-{
- int i;
- UINT64 tmp;
- unsigned char bn_buff[64];
- memset(bn_buff, 0, 64);
- if (BN_num_bytes(b) > 64) {
- printf("Can't support this byte size\n");
- return 0;
- }
- if (BN_num_bytes(b) != 0) {
- if (!BN_bn2bin(b, bn_buff + (64 - BN_num_bytes(b)))) {
- printf("Error's in bn2bin\n");
- /* We have to error, here */
- return 0;
- }
- }
- while (n-- > 0) {
- array[n] = 0;
- for (i = 7; i >= 0; i--) {
- tmp = bn_buff[63 - (n * 8 + i)];
- array[n] |= tmp << (8 * i);
- }
- }
- return 1;
-}
-
-/* Init a 512-bit BIGNUM from the UINT64*_ (8 * 64) interleaved array */
-static int interleaved_array_to_bn_512(BIGNUM *b, UINT64 *array)
-{
- unsigned char tmp[64];
- int n = 8;
- int i;
- while (n-- > 0) {
- for (i = 7; i >= 0; i--) {
- tmp[63 - (n * 8 + i)] = (unsigned char)(array[n] >> (8 * i));
- }}
- BN_bin2bn(tmp, 64, b);
- return 0;
-}
-
-/* The main 512bit precompute call */
-static int mod_exp_pre_compute_data_512(UINT64 *m, struct mod_ctx_512 *data)
-{
- BIGNUM two_768, two_640, two_128, two_512, tmp, _m, tmp2;
-
- /* We need a BN_CTX for the modulo functions */
- BN_CTX *ctx;
- /* Some tmps */
- UINT64 _t[8];
- int i, j, ret = 0;
-
- /* Init _m with m */
- BN_init(&_m);
- interleaved_array_to_bn_512(&_m, m);
- memset(_t, 0, 64);
-
- /* Inits */
- BN_init(&two_768);
- BN_init(&two_640);
- BN_init(&two_128);
- BN_init(&two_512);
- BN_init(&tmp);
- BN_init(&tmp2);
-
- /* Create our context */
- if ((ctx = BN_CTX_new()) == NULL) {
- goto err;
- }
- BN_CTX_start(ctx);
-
- /*
- * For production, if you care, these only need to be set once,
- * and may be made constants.
- */
- BN_lshift(&two_768, BN_value_one(), 768);
- BN_lshift(&two_640, BN_value_one(), 640);
- BN_lshift(&two_128, BN_value_one(), 128);
- BN_lshift(&two_512, BN_value_one(), 512);
-
- if (0 == (m[7] & 0x8000000000000000)) {
- goto err;
- }
- if (0 == (m[0] & 0x1)) { /* Odd modulus required for Mont */
- goto err;
- }
-
- /* Precompute m1 */
- BN_mod(&tmp, &two_768, &_m, ctx);
- if (!bn_extract_to_array_512(&tmp, 8, &data->m1[0])) {
- goto err;
- }
-
- /* Precompute m2 */
- BN_mod(&tmp, &two_640, &_m, ctx);
- if (!bn_extract_to_array_512(&tmp, 8, &data->m2[0])) {
- goto err;
- }
-
- /*
- * Precompute k1, a 128b number = ((-1)* m-1 ) mod 2128; k1 should
- * be non-negative.
- */
- BN_mod_inverse(&tmp, &_m, &two_128, ctx);
- if (!BN_is_zero(&tmp)) {
- BN_sub(&tmp, &two_128, &tmp);
- }
- if (!bn_extract_to_array_512(&tmp, 2, &data->k1[0])) {
- goto err;
- }
-
- /* Precompute t */
- for (i = 0; i < 8; i++) {
- BN_zero(&tmp);
- if (i & 1) {
- BN_add(&tmp, &two_512, &tmp);
- }
- if (i & 2) {
- BN_add(&tmp, &two_512, &tmp);
- }
- if (i & 4) {
- BN_add(&tmp, &two_640, &tmp);
- }
-
- BN_nnmod(&tmp2, &tmp, &_m, ctx);
- if (!bn_extract_to_array_512(&tmp2, 8, _t)) {
- goto err;
- }
- for (j = 0; j < 8; j++)
- data->t[j][i] = _t[j];
- }
-
- /* Precompute m */
- for (i = 0; i < 8; i++) {
- data->m[i] = m[i];
- }
-
- ret = 1;
-
- err:
- /* Cleanup */
- if (ctx != NULL) {
- BN_CTX_end(ctx);
- BN_CTX_free(ctx);
- }
- BN_free(&two_768);
- BN_free(&two_640);
- BN_free(&two_128);
- BN_free(&two_512);
- BN_free(&tmp);
- BN_free(&tmp2);
- BN_free(&_m);
-
- return ret;
-}
-
-static int e_rsax_rsa_mod_exp(BIGNUM *r0, const BIGNUM *I, RSA *rsa,
- BN_CTX *ctx)
-{
- BIGNUM *r1, *m1, *vrfy;
- BIGNUM local_dmp1, local_dmq1, local_c, local_r1;
- BIGNUM *dmp1, *dmq1, *c, *pr1;
- int ret = 0;
-
- BN_CTX_start(ctx);
- r1 = BN_CTX_get(ctx);
- m1 = BN_CTX_get(ctx);
- vrfy = BN_CTX_get(ctx);
-
- {
- BIGNUM local_p, local_q;
- BIGNUM *p = NULL, *q = NULL;
- int error = 0;
-
- /*
- * Make sure BN_mod_inverse in Montgomery intialization uses the
- * BN_FLG_CONSTTIME flag (unless RSA_FLAG_NO_CONSTTIME is set)
- */
- if (!(rsa->flags & RSA_FLAG_NO_CONSTTIME)) {
- BN_init(&local_p);
- p = &local_p;
- BN_with_flags(p, rsa->p, BN_FLG_CONSTTIME);
-
- BN_init(&local_q);
- q = &local_q;
- BN_with_flags(q, rsa->q, BN_FLG_CONSTTIME);
- } else {
- p = rsa->p;
- q = rsa->q;
- }
-
- if (rsa->flags & RSA_FLAG_CACHE_PRIVATE) {
- if (!BN_MONT_CTX_set_locked
- (&rsa->_method_mod_p, CRYPTO_LOCK_RSA, p, ctx))
- error = 1;
- if (!BN_MONT_CTX_set_locked
- (&rsa->_method_mod_q, CRYPTO_LOCK_RSA, q, ctx))
- error = 1;
- }
-
- /* clean up */
- if (!(rsa->flags & RSA_FLAG_NO_CONSTTIME)) {
- BN_free(&local_p);
- BN_free(&local_q);
- }
- if (error)
- goto err;
- }
-
- if (rsa->flags & RSA_FLAG_CACHE_PUBLIC)
- if (!BN_MONT_CTX_set_locked
- (&rsa->_method_mod_n, CRYPTO_LOCK_RSA, rsa->n, ctx))
- goto err;
-
- /* compute I mod q */
- if (!(rsa->flags & RSA_FLAG_NO_CONSTTIME)) {
- c = &local_c;
- BN_with_flags(c, I, BN_FLG_CONSTTIME);
- if (!BN_mod(r1, c, rsa->q, ctx))
- goto err;
- } else {
- if (!BN_mod(r1, I, rsa->q, ctx))
- goto err;
- }
-
- /* compute r1^dmq1 mod q */
- if (!(rsa->flags & RSA_FLAG_NO_CONSTTIME)) {
- dmq1 = &local_dmq1;
- BN_with_flags(dmq1, rsa->dmq1, BN_FLG_CONSTTIME);
- } else
- dmq1 = rsa->dmq1;
-
- if (!e_rsax_bn_mod_exp(m1, r1, dmq1, rsa->q, ctx,
- rsa->_method_mod_q, e_rsax_get_ctx(rsa, 0,
- rsa->q)))
- goto err;
-
- /* compute I mod p */
- if (!(rsa->flags & RSA_FLAG_NO_CONSTTIME)) {
- c = &local_c;
- BN_with_flags(c, I, BN_FLG_CONSTTIME);
- if (!BN_mod(r1, c, rsa->p, ctx))
- goto err;
- } else {
- if (!BN_mod(r1, I, rsa->p, ctx))
- goto err;
- }
-
- /* compute r1^dmp1 mod p */
- if (!(rsa->flags & RSA_FLAG_NO_CONSTTIME)) {
- dmp1 = &local_dmp1;
- BN_with_flags(dmp1, rsa->dmp1, BN_FLG_CONSTTIME);
- } else
- dmp1 = rsa->dmp1;
-
- if (!e_rsax_bn_mod_exp(r0, r1, dmp1, rsa->p, ctx,
- rsa->_method_mod_p, e_rsax_get_ctx(rsa, 1,
- rsa->p)))
- goto err;
-
- if (!BN_sub(r0, r0, m1))
- goto err;
- /*
- * This will help stop the size of r0 increasing, which does affect the
- * multiply if it optimised for a power of 2 size
- */
- if (BN_is_negative(r0))
- if (!BN_add(r0, r0, rsa->p))
- goto err;
-
- if (!BN_mul(r1, r0, rsa->iqmp, ctx))
- goto err;
-
- /* Turn BN_FLG_CONSTTIME flag on before division operation */
- if (!(rsa->flags & RSA_FLAG_NO_CONSTTIME)) {
- pr1 = &local_r1;
- BN_with_flags(pr1, r1, BN_FLG_CONSTTIME);
- } else
- pr1 = r1;
- if (!BN_mod(r0, pr1, rsa->p, ctx))
- goto err;
-
- /*
- * If p < q it is occasionally possible for the correction of adding 'p'
- * if r0 is negative above to leave the result still negative. This can
- * break the private key operations: the following second correction
- * should *always* correct this rare occurrence. This will *never* happen
- * with OpenSSL generated keys because they ensure p > q [steve]
- */
- if (BN_is_negative(r0))
- if (!BN_add(r0, r0, rsa->p))
- goto err;
- if (!BN_mul(r1, r0, rsa->q, ctx))
- goto err;
- if (!BN_add(r0, r1, m1))
- goto err;
-
- if (rsa->e && rsa->n) {
- if (!e_rsax_bn_mod_exp
- (vrfy, r0, rsa->e, rsa->n, ctx, rsa->_method_mod_n,
- e_rsax_get_ctx(rsa, 2, rsa->n)))
- goto err;
-
- /*
- * If 'I' was greater than (or equal to) rsa->n, the operation will
- * be equivalent to using 'I mod n'. However, the result of the
- * verify will *always* be less than 'n' so we don't check for
- * absolute equality, just congruency.
- */
- if (!BN_sub(vrfy, vrfy, I))
- goto err;
- if (!BN_mod(vrfy, vrfy, rsa->n, ctx))
- goto err;
- if (BN_is_negative(vrfy))
- if (!BN_add(vrfy, vrfy, rsa->n))
- goto err;
- if (!BN_is_zero(vrfy)) {
- /*
- * 'I' and 'vrfy' aren't congruent mod n. Don't leak
- * miscalculated CRT output, just do a raw (slower) mod_exp and
- * return that instead.
- */
-
- BIGNUM local_d;
- BIGNUM *d = NULL;
-
- if (!(rsa->flags & RSA_FLAG_NO_CONSTTIME)) {
- d = &local_d;
- BN_with_flags(d, rsa->d, BN_FLG_CONSTTIME);
- } else
- d = rsa->d;
- if (!e_rsax_bn_mod_exp(r0, I, d, rsa->n, ctx,
- rsa->_method_mod_n, e_rsax_get_ctx(rsa, 2,
- rsa->n)))
- goto err;
- }
- }
- ret = 1;
-
- err:
- BN_CTX_end(ctx);
-
- return ret;
-}
-# endif /* !OPENSSL_NO_RSA */
-#endif /* !COMPILE_RSAX */
diff --git a/crypto/openssl/crypto/engine/engine.h b/crypto/openssl/crypto/engine/engine.h
index e81096a..bd7b591 100644
--- a/crypto/openssl/crypto/engine/engine.h
+++ b/crypto/openssl/crypto/engine/engine.h
@@ -413,7 +413,6 @@ void ENGINE_load_gost(void);
# endif
# endif
void ENGINE_load_cryptodev(void);
-void ENGINE_load_rsax(void);
void ENGINE_load_rdrand(void);
void ENGINE_load_builtin_engines(void);
diff --git a/crypto/openssl/crypto/evp/Makefile b/crypto/openssl/crypto/evp/Makefile
index ed1502d..aaaad98 100644
--- a/crypto/openssl/crypto/evp/Makefile
+++ b/crypto/openssl/crypto/evp/Makefile
@@ -28,8 +28,8 @@ LIBSRC= encode.c digest.c evp_enc.c evp_key.c evp_acnf.c evp_cnf.c \
bio_md.c bio_b64.c bio_enc.c evp_err.c e_null.c \
c_all.c c_allc.c c_alld.c evp_lib.c bio_ok.c \
evp_pkey.c evp_pbe.c p5_crpt.c p5_crpt2.c \
- e_old.c pmeth_lib.c pmeth_fn.c pmeth_gn.c m_sigver.c evp_fips.c \
- e_aes_cbc_hmac_sha1.c e_rc4_hmac_md5.c
+ e_old.c pmeth_lib.c pmeth_fn.c pmeth_gn.c m_sigver.c \
+ e_aes_cbc_hmac_sha1.c e_aes_cbc_hmac_sha256.c e_rc4_hmac_md5.c
LIBOBJ= encode.o digest.o evp_enc.o evp_key.o evp_acnf.o evp_cnf.o \
e_des.o e_bf.o e_idea.o e_des3.o e_camellia.o\
@@ -41,8 +41,8 @@ LIBOBJ= encode.o digest.o evp_enc.o evp_key.o evp_acnf.o evp_cnf.o \
bio_md.o bio_b64.o bio_enc.o evp_err.o e_null.o \
c_all.o c_allc.o c_alld.o evp_lib.o bio_ok.o \
evp_pkey.o evp_pbe.o p5_crpt.o p5_crpt2.o \
- e_old.o pmeth_lib.o pmeth_fn.o pmeth_gn.o m_sigver.o evp_fips.o \
- e_aes_cbc_hmac_sha1.o e_rc4_hmac_md5.o
+ e_old.o pmeth_lib.o pmeth_fn.o pmeth_gn.o m_sigver.o \
+ e_aes_cbc_hmac_sha1.o e_aes_cbc_hmac_sha256.o e_rc4_hmac_md5.o
SRC= $(LIBSRC)
@@ -204,16 +204,36 @@ e_aes_cbc_hmac_sha1.o: ../../include/openssl/bio.h
e_aes_cbc_hmac_sha1.o: ../../include/openssl/crypto.h
e_aes_cbc_hmac_sha1.o: ../../include/openssl/e_os2.h
e_aes_cbc_hmac_sha1.o: ../../include/openssl/evp.h
+e_aes_cbc_hmac_sha1.o: ../../include/openssl/modes.h
e_aes_cbc_hmac_sha1.o: ../../include/openssl/obj_mac.h
e_aes_cbc_hmac_sha1.o: ../../include/openssl/objects.h
e_aes_cbc_hmac_sha1.o: ../../include/openssl/opensslconf.h
e_aes_cbc_hmac_sha1.o: ../../include/openssl/opensslv.h
e_aes_cbc_hmac_sha1.o: ../../include/openssl/ossl_typ.h
+e_aes_cbc_hmac_sha1.o: ../../include/openssl/rand.h
e_aes_cbc_hmac_sha1.o: ../../include/openssl/safestack.h
e_aes_cbc_hmac_sha1.o: ../../include/openssl/sha.h
e_aes_cbc_hmac_sha1.o: ../../include/openssl/stack.h
-e_aes_cbc_hmac_sha1.o: ../../include/openssl/symhacks.h e_aes_cbc_hmac_sha1.c
-e_aes_cbc_hmac_sha1.o: evp_locl.h
+e_aes_cbc_hmac_sha1.o: ../../include/openssl/symhacks.h ../modes/modes_lcl.h
+e_aes_cbc_hmac_sha1.o: e_aes_cbc_hmac_sha1.c
+e_aes_cbc_hmac_sha256.o: ../../include/openssl/aes.h
+e_aes_cbc_hmac_sha256.o: ../../include/openssl/asn1.h
+e_aes_cbc_hmac_sha256.o: ../../include/openssl/bio.h
+e_aes_cbc_hmac_sha256.o: ../../include/openssl/crypto.h
+e_aes_cbc_hmac_sha256.o: ../../include/openssl/e_os2.h
+e_aes_cbc_hmac_sha256.o: ../../include/openssl/evp.h
+e_aes_cbc_hmac_sha256.o: ../../include/openssl/modes.h
+e_aes_cbc_hmac_sha256.o: ../../include/openssl/obj_mac.h
+e_aes_cbc_hmac_sha256.o: ../../include/openssl/objects.h
+e_aes_cbc_hmac_sha256.o: ../../include/openssl/opensslconf.h
+e_aes_cbc_hmac_sha256.o: ../../include/openssl/opensslv.h
+e_aes_cbc_hmac_sha256.o: ../../include/openssl/ossl_typ.h
+e_aes_cbc_hmac_sha256.o: ../../include/openssl/rand.h
+e_aes_cbc_hmac_sha256.o: ../../include/openssl/safestack.h
+e_aes_cbc_hmac_sha256.o: ../../include/openssl/sha.h
+e_aes_cbc_hmac_sha256.o: ../../include/openssl/stack.h
+e_aes_cbc_hmac_sha256.o: ../../include/openssl/symhacks.h ../modes/modes_lcl.h
+e_aes_cbc_hmac_sha256.o: e_aes_cbc_hmac_sha256.c
e_bf.o: ../../e_os.h ../../include/openssl/asn1.h ../../include/openssl/bio.h
e_bf.o: ../../include/openssl/blowfish.h ../../include/openssl/buffer.h
e_bf.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
@@ -227,11 +247,13 @@ e_camellia.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h
e_camellia.o: ../../include/openssl/camellia.h ../../include/openssl/crypto.h
e_camellia.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h
e_camellia.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h
-e_camellia.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
+e_camellia.o: ../../include/openssl/modes.h ../../include/openssl/obj_mac.h
+e_camellia.o: ../../include/openssl/objects.h
e_camellia.o: ../../include/openssl/opensslconf.h
e_camellia.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
e_camellia.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h
-e_camellia.o: ../../include/openssl/symhacks.h e_camellia.c evp_locl.h
+e_camellia.o: ../../include/openssl/symhacks.h ../modes/modes_lcl.h
+e_camellia.o: e_camellia.c evp_locl.h
e_cast.o: ../../e_os.h ../../include/openssl/asn1.h ../../include/openssl/bio.h
e_cast.o: ../../include/openssl/buffer.h ../../include/openssl/cast.h
e_cast.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
@@ -260,9 +282,10 @@ e_des3.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h
e_des3.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
e_des3.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
e_des3.o: ../../include/openssl/ossl_typ.h ../../include/openssl/rand.h
-e_des3.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h
-e_des3.o: ../../include/openssl/symhacks.h ../../include/openssl/ui.h
-e_des3.o: ../../include/openssl/ui_compat.h ../cryptlib.h e_des3.c evp_locl.h
+e_des3.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
+e_des3.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
+e_des3.o: ../../include/openssl/ui.h ../../include/openssl/ui_compat.h
+e_des3.o: ../cryptlib.h e_des3.c evp_locl.h
e_idea.o: ../../e_os.h ../../include/openssl/asn1.h ../../include/openssl/bio.h
e_idea.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
e_idea.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h
@@ -394,13 +417,6 @@ evp_err.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
evp_err.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
evp_err.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h
evp_err.o: ../../include/openssl/symhacks.h evp_err.c
-evp_fips.o: ../../include/openssl/asn1.h ../../include/openssl/bio.h
-evp_fips.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
-evp_fips.o: ../../include/openssl/evp.h ../../include/openssl/obj_mac.h
-evp_fips.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
-evp_fips.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
-evp_fips.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h
-evp_fips.o: ../../include/openssl/symhacks.h evp_fips.c
evp_key.o: ../../e_os.h ../../include/openssl/asn1.h
evp_key.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h
evp_key.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
diff --git a/crypto/openssl/crypto/evp/c_allc.c b/crypto/openssl/crypto/evp/c_allc.c
index 3097c21..280e584 100644
--- a/crypto/openssl/crypto/evp/c_allc.c
+++ b/crypto/openssl/crypto/evp/c_allc.c
@@ -93,6 +93,7 @@ void OpenSSL_add_all_ciphers(void)
EVP_add_cipher(EVP_des_ecb());
EVP_add_cipher(EVP_des_ede());
EVP_add_cipher(EVP_des_ede3());
+ EVP_add_cipher(EVP_des_ede3_wrap());
#endif
#ifndef OPENSSL_NO_RC4
@@ -172,6 +173,8 @@ void OpenSSL_add_all_ciphers(void)
EVP_add_cipher(EVP_aes_128_ctr());
EVP_add_cipher(EVP_aes_128_gcm());
EVP_add_cipher(EVP_aes_128_xts());
+ EVP_add_cipher(EVP_aes_128_ccm());
+ EVP_add_cipher(EVP_aes_128_wrap());
EVP_add_cipher_alias(SN_aes_128_cbc, "AES128");
EVP_add_cipher_alias(SN_aes_128_cbc, "aes128");
EVP_add_cipher(EVP_aes_192_ecb());
@@ -182,6 +185,8 @@ void OpenSSL_add_all_ciphers(void)
EVP_add_cipher(EVP_aes_192_ofb());
EVP_add_cipher(EVP_aes_192_ctr());
EVP_add_cipher(EVP_aes_192_gcm());
+ EVP_add_cipher(EVP_aes_192_ccm());
+ EVP_add_cipher(EVP_aes_192_wrap());
EVP_add_cipher_alias(SN_aes_192_cbc, "AES192");
EVP_add_cipher_alias(SN_aes_192_cbc, "aes192");
EVP_add_cipher(EVP_aes_256_ecb());
@@ -193,12 +198,18 @@ void OpenSSL_add_all_ciphers(void)
EVP_add_cipher(EVP_aes_256_ctr());
EVP_add_cipher(EVP_aes_256_gcm());
EVP_add_cipher(EVP_aes_256_xts());
+ EVP_add_cipher(EVP_aes_256_ccm());
+ EVP_add_cipher(EVP_aes_256_wrap());
EVP_add_cipher_alias(SN_aes_256_cbc, "AES256");
EVP_add_cipher_alias(SN_aes_256_cbc, "aes256");
# if !defined(OPENSSL_NO_SHA) && !defined(OPENSSL_NO_SHA1)
EVP_add_cipher(EVP_aes_128_cbc_hmac_sha1());
EVP_add_cipher(EVP_aes_256_cbc_hmac_sha1());
# endif
+# if !defined(OPENSSL_NO_SHA) && !defined(OPENSSL_NO_SHA256)
+ EVP_add_cipher(EVP_aes_128_cbc_hmac_sha256());
+ EVP_add_cipher(EVP_aes_256_cbc_hmac_sha256());
+# endif
#endif
#ifndef OPENSSL_NO_CAMELLIA
diff --git a/crypto/openssl/crypto/evp/digest.c b/crypto/openssl/crypto/evp/digest.c
index 2e202c8..f2643f3 100644
--- a/crypto/openssl/crypto/evp/digest.c
+++ b/crypto/openssl/crypto/evp/digest.c
@@ -119,6 +119,7 @@
#ifdef OPENSSL_FIPS
# include <openssl/fips.h>
+# include "evp_locl.h"
#endif
void EVP_MD_CTX_init(EVP_MD_CTX *ctx)
@@ -145,6 +146,17 @@ int EVP_DigestInit(EVP_MD_CTX *ctx, const EVP_MD *type)
int EVP_DigestInit_ex(EVP_MD_CTX *ctx, const EVP_MD *type, ENGINE *impl)
{
EVP_MD_CTX_clear_flags(ctx, EVP_MD_CTX_FLAG_CLEANED);
+#ifdef OPENSSL_FIPS
+ /* If FIPS mode switch to approved implementation if possible */
+ if (FIPS_mode()) {
+ const EVP_MD *fipsmd;
+ if (type) {
+ fipsmd = evp_get_fips_md(type);
+ if (fipsmd)
+ type = fipsmd;
+ }
+ }
+#endif
#ifndef OPENSSL_NO_ENGINE
/*
* Whether it's nice or not, "Inits" can be used on "Final"'d contexts so
diff --git a/crypto/openssl/crypto/evp/e_aes.c b/crypto/openssl/crypto/evp/e_aes.c
index a4327fc..1734a82 100644
--- a/crypto/openssl/crypto/evp/e_aes.c
+++ b/crypto/openssl/crypto/evp/e_aes.c
@@ -57,12 +57,17 @@
# include <assert.h>
# include <openssl/aes.h>
# include "evp_locl.h"
-# ifndef OPENSSL_FIPS
-# include "modes_lcl.h"
-# include <openssl/rand.h>
+# include "modes_lcl.h"
+# include <openssl/rand.h>
+
+# undef EVP_CIPH_FLAG_FIPS
+# define EVP_CIPH_FLAG_FIPS 0
typedef struct {
- AES_KEY ks;
+ union {
+ double align;
+ AES_KEY ks;
+ } ks;
block128_f block;
union {
cbc128_f cbc;
@@ -71,7 +76,10 @@ typedef struct {
} EVP_AES_KEY;
typedef struct {
- AES_KEY ks; /* AES key schedule to use */
+ union {
+ double align;
+ AES_KEY ks;
+ } ks; /* AES key schedule to use */
int key_set; /* Set if key initialised */
int iv_set; /* Set if an iv is set */
GCM128_CONTEXT gcm;
@@ -84,7 +92,10 @@ typedef struct {
} EVP_AES_GCM_CTX;
typedef struct {
- AES_KEY ks1, ks2; /* AES key schedules to use */
+ union {
+ double align;
+ AES_KEY ks;
+ } ks1, ks2; /* AES key schedules to use */
XTS128_CONTEXT xts;
void (*stream) (const unsigned char *in,
unsigned char *out, size_t length,
@@ -93,7 +104,10 @@ typedef struct {
} EVP_AES_XTS_CTX;
typedef struct {
- AES_KEY ks; /* AES key schedule to use */
+ union {
+ double align;
+ AES_KEY ks;
+ } ks; /* AES key schedule to use */
int key_set; /* Set if key initialised */
int iv_set; /* Set if an iv is set */
int tag_set; /* Set if tag is valid */
@@ -103,9 +117,9 @@ typedef struct {
ccm128_f str;
} EVP_AES_CCM_CTX;
-# define MAXBITCHUNK ((size_t)1<<(sizeof(size_t)*8-4))
+# define MAXBITCHUNK ((size_t)1<<(sizeof(size_t)*8-4))
-# ifdef VPAES_ASM
+# ifdef VPAES_ASM
int vpaes_set_encrypt_key(const unsigned char *userKey, int bits,
AES_KEY *key);
int vpaes_set_decrypt_key(const unsigned char *userKey, int bits,
@@ -120,8 +134,8 @@ void vpaes_cbc_encrypt(const unsigned char *in,
unsigned char *out,
size_t length,
const AES_KEY *key, unsigned char *ivec, int enc);
-# endif
-# ifdef BSAES_ASM
+# endif
+# ifdef BSAES_ASM
void bsaes_cbc_encrypt(const unsigned char *in, unsigned char *out,
size_t length, const AES_KEY *key,
unsigned char ivec[16], int enc);
@@ -134,40 +148,54 @@ void bsaes_xts_encrypt(const unsigned char *inp, unsigned char *out,
void bsaes_xts_decrypt(const unsigned char *inp, unsigned char *out,
size_t len, const AES_KEY *key1,
const AES_KEY *key2, const unsigned char iv[16]);
-# endif
-# ifdef AES_CTR_ASM
+# endif
+# ifdef AES_CTR_ASM
void AES_ctr32_encrypt(const unsigned char *in, unsigned char *out,
size_t blocks, const AES_KEY *key,
const unsigned char ivec[AES_BLOCK_SIZE]);
-# endif
-# ifdef AES_XTS_ASM
+# endif
+# ifdef AES_XTS_ASM
void AES_xts_encrypt(const char *inp, char *out, size_t len,
const AES_KEY *key1, const AES_KEY *key2,
const unsigned char iv[16]);
void AES_xts_decrypt(const char *inp, char *out, size_t len,
const AES_KEY *key1, const AES_KEY *key2,
const unsigned char iv[16]);
+# endif
+
+# if defined(OPENSSL_CPUID_OBJ) && (defined(__powerpc__) || defined(__ppc__) || defined(_ARCH_PPC))
+# include "ppc_arch.h"
+# ifdef VPAES_ASM
+# define VPAES_CAPABLE (OPENSSL_ppccap_P & PPC_ALTIVEC)
# endif
+# define HWAES_CAPABLE (OPENSSL_ppccap_P & PPC_CRYPTO207)
+# define HWAES_set_encrypt_key aes_p8_set_encrypt_key
+# define HWAES_set_decrypt_key aes_p8_set_decrypt_key
+# define HWAES_encrypt aes_p8_encrypt
+# define HWAES_decrypt aes_p8_decrypt
+# define HWAES_cbc_encrypt aes_p8_cbc_encrypt
+# define HWAES_ctr32_encrypt_blocks aes_p8_ctr32_encrypt_blocks
+# endif
-# if defined(AES_ASM) && !defined(I386_ONLY) && ( \
+# if defined(AES_ASM) && !defined(I386_ONLY) && ( \
((defined(__i386) || defined(__i386__) || \
defined(_M_IX86)) && defined(OPENSSL_IA32_SSE2))|| \
defined(__x86_64) || defined(__x86_64__) || \
defined(_M_AMD64) || defined(_M_X64) || \
defined(__INTEL__) )
-extern unsigned int OPENSSL_ia32cap_P[2];
+extern unsigned int OPENSSL_ia32cap_P[];
-# ifdef VPAES_ASM
-# define VPAES_CAPABLE (OPENSSL_ia32cap_P[1]&(1<<(41-32)))
-# endif
-# ifdef BSAES_ASM
-# define BSAES_CAPABLE (OPENSSL_ia32cap_P[1]&(1<<(41-32)))
-# endif
+# ifdef VPAES_ASM
+# define VPAES_CAPABLE (OPENSSL_ia32cap_P[1]&(1<<(41-32)))
+# endif
+# ifdef BSAES_ASM
+# define BSAES_CAPABLE (OPENSSL_ia32cap_P[1]&(1<<(41-32)))
+# endif
/*
* AES-NI section
*/
-# define AESNI_CAPABLE (OPENSSL_ia32cap_P[1]&(1<<(57-32)))
+# define AESNI_CAPABLE (OPENSSL_ia32cap_P[1]&(1<<(57-32)))
int aesni_set_encrypt_key(const unsigned char *userKey, int bits,
AES_KEY *key);
@@ -218,6 +246,26 @@ void aesni_ccm64_decrypt_blocks(const unsigned char *in,
const unsigned char ivec[16],
unsigned char cmac[16]);
+# if defined(__x86_64) || defined(__x86_64__) || defined(_M_AMD64) || defined(_M_X64)
+size_t aesni_gcm_encrypt(const unsigned char *in,
+ unsigned char *out,
+ size_t len,
+ const void *key, unsigned char ivec[16], u64 *Xi);
+# define AES_gcm_encrypt aesni_gcm_encrypt
+size_t aesni_gcm_decrypt(const unsigned char *in,
+ unsigned char *out,
+ size_t len,
+ const void *key, unsigned char ivec[16], u64 *Xi);
+# define AES_gcm_decrypt aesni_gcm_decrypt
+void gcm_ghash_avx(u64 Xi[2], const u128 Htable[16], const u8 *in,
+ size_t len);
+# define AES_GCM_ASM(gctx) (gctx->ctr==aesni_ctr32_encrypt_blocks && \
+ gctx->gcm.ghash==gcm_ghash_avx)
+# define AES_GCM_ASM2(gctx) (gctx->gcm.block==(block128_f)aesni_encrypt && \
+ gctx->gcm.ghash==gcm_ghash_avx)
+# undef AES_GCM_ASM2 /* minor size optimization */
+# endif
+
static int aesni_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key,
const unsigned char *iv, int enc)
{
@@ -271,23 +319,23 @@ static int aesni_ecb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
return 1;
}
-# define aesni_ofb_cipher aes_ofb_cipher
+# define aesni_ofb_cipher aes_ofb_cipher
static int aesni_ofb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
const unsigned char *in, size_t len);
-# define aesni_cfb_cipher aes_cfb_cipher
+# define aesni_cfb_cipher aes_cfb_cipher
static int aesni_cfb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
const unsigned char *in, size_t len);
-# define aesni_cfb8_cipher aes_cfb8_cipher
+# define aesni_cfb8_cipher aes_cfb8_cipher
static int aesni_cfb8_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
const unsigned char *in, size_t len);
-# define aesni_cfb1_cipher aes_cfb1_cipher
+# define aesni_cfb1_cipher aes_cfb1_cipher
static int aesni_cfb1_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
const unsigned char *in, size_t len);
-# define aesni_ctr_cipher aes_ctr_cipher
+# define aesni_ctr_cipher aes_ctr_cipher
static int aesni_ctr_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
const unsigned char *in, size_t len);
@@ -298,7 +346,7 @@ static int aesni_gcm_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key,
if (!iv && !key)
return 1;
if (key) {
- aesni_set_encrypt_key(key, ctx->key_len * 8, &gctx->ks);
+ aesni_set_encrypt_key(key, ctx->key_len * 8, &gctx->ks.ks);
CRYPTO_gcm128_init(&gctx->gcm, &gctx->ks, (block128_f) aesni_encrypt);
gctx->ctr = (ctr128_f) aesni_ctr32_encrypt_blocks;
/*
@@ -323,7 +371,7 @@ static int aesni_gcm_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key,
return 1;
}
-# define aesni_gcm_cipher aes_gcm_cipher
+# define aesni_gcm_cipher aes_gcm_cipher
static int aesni_gcm_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
const unsigned char *in, size_t len);
@@ -337,17 +385,17 @@ static int aesni_xts_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key,
if (key) {
/* key_len is two AES keys */
if (enc) {
- aesni_set_encrypt_key(key, ctx->key_len * 4, &xctx->ks1);
+ aesni_set_encrypt_key(key, ctx->key_len * 4, &xctx->ks1.ks);
xctx->xts.block1 = (block128_f) aesni_encrypt;
xctx->stream = aesni_xts_encrypt;
} else {
- aesni_set_decrypt_key(key, ctx->key_len * 4, &xctx->ks1);
+ aesni_set_decrypt_key(key, ctx->key_len * 4, &xctx->ks1.ks);
xctx->xts.block1 = (block128_f) aesni_decrypt;
xctx->stream = aesni_xts_decrypt;
}
aesni_set_encrypt_key(key + ctx->key_len / 2,
- ctx->key_len * 4, &xctx->ks2);
+ ctx->key_len * 4, &xctx->ks2.ks);
xctx->xts.block2 = (block128_f) aesni_encrypt;
xctx->xts.key1 = &xctx->ks1;
@@ -361,7 +409,7 @@ static int aesni_xts_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key,
return 1;
}
-# define aesni_xts_cipher aes_xts_cipher
+# define aesni_xts_cipher aes_xts_cipher
static int aesni_xts_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
const unsigned char *in, size_t len);
@@ -372,7 +420,7 @@ static int aesni_ccm_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key,
if (!iv && !key)
return 1;
if (key) {
- aesni_set_encrypt_key(key, ctx->key_len * 8, &cctx->ks);
+ aesni_set_encrypt_key(key, ctx->key_len * 8, &cctx->ks.ks);
CRYPTO_ccm128_init(&cctx->ccm, cctx->M, cctx->L,
&cctx->ks, (block128_f) aesni_encrypt);
cctx->str = enc ? (ccm128_f) aesni_ccm64_encrypt_blocks :
@@ -386,11 +434,11 @@ static int aesni_ccm_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key,
return 1;
}
-# define aesni_ccm_cipher aes_ccm_cipher
+# define aesni_ccm_cipher aes_ccm_cipher
static int aesni_ccm_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
const unsigned char *in, size_t len);
-# define BLOCK_CIPHER_generic(nid,keylen,blocksize,ivlen,nmode,mode,MODE,flags) \
+# define BLOCK_CIPHER_generic(nid,keylen,blocksize,ivlen,nmode,mode,MODE,flags) \
static const EVP_CIPHER aesni_##keylen##_##mode = { \
nid##_##keylen##_##nmode,blocksize,keylen/8,ivlen, \
flags|EVP_CIPH_##MODE##_MODE, \
@@ -411,7 +459,7 @@ static const EVP_CIPHER aes_##keylen##_##mode = { \
const EVP_CIPHER *EVP_aes_##keylen##_##mode(void) \
{ return AESNI_CAPABLE?&aesni_##keylen##_##mode:&aes_##keylen##_##mode; }
-# define BLOCK_CIPHER_custom(nid,keylen,blocksize,ivlen,mode,MODE,flags) \
+# define BLOCK_CIPHER_custom(nid,keylen,blocksize,ivlen,mode,MODE,flags) \
static const EVP_CIPHER aesni_##keylen##_##mode = { \
nid##_##keylen##_##mode,blocksize, \
(EVP_CIPH_##MODE##_MODE==EVP_CIPH_XTS_MODE?2:1)*keylen/8, ivlen, \
@@ -433,9 +481,378 @@ static const EVP_CIPHER aes_##keylen##_##mode = { \
const EVP_CIPHER *EVP_aes_##keylen##_##mode(void) \
{ return AESNI_CAPABLE?&aesni_##keylen##_##mode:&aes_##keylen##_##mode; }
+# elif defined(AES_ASM) && (defined(__sparc) || defined(__sparc__))
+
+# include "sparc_arch.h"
+
+extern unsigned int OPENSSL_sparcv9cap_P[];
+
+# define SPARC_AES_CAPABLE (OPENSSL_sparcv9cap_P[1] & CFR_AES)
+
+void aes_t4_set_encrypt_key(const unsigned char *key, int bits, AES_KEY *ks);
+void aes_t4_set_decrypt_key(const unsigned char *key, int bits, AES_KEY *ks);
+void aes_t4_encrypt(const unsigned char *in, unsigned char *out,
+ const AES_KEY *key);
+void aes_t4_decrypt(const unsigned char *in, unsigned char *out,
+ const AES_KEY *key);
+/*
+ * Key-length specific subroutines were chosen for following reason.
+ * Each SPARC T4 core can execute up to 8 threads which share core's
+ * resources. Loading as much key material to registers allows to
+ * minimize references to shared memory interface, as well as amount
+ * of instructions in inner loops [much needed on T4]. But then having
+ * non-key-length specific routines would require conditional branches
+ * either in inner loops or on subroutines' entries. Former is hardly
+ * acceptable, while latter means code size increase to size occupied
+ * by multiple key-length specfic subroutines, so why fight?
+ */
+void aes128_t4_cbc_encrypt(const unsigned char *in, unsigned char *out,
+ size_t len, const AES_KEY *key,
+ unsigned char *ivec);
+void aes128_t4_cbc_decrypt(const unsigned char *in, unsigned char *out,
+ size_t len, const AES_KEY *key,
+ unsigned char *ivec);
+void aes192_t4_cbc_encrypt(const unsigned char *in, unsigned char *out,
+ size_t len, const AES_KEY *key,
+ unsigned char *ivec);
+void aes192_t4_cbc_decrypt(const unsigned char *in, unsigned char *out,
+ size_t len, const AES_KEY *key,
+ unsigned char *ivec);
+void aes256_t4_cbc_encrypt(const unsigned char *in, unsigned char *out,
+ size_t len, const AES_KEY *key,
+ unsigned char *ivec);
+void aes256_t4_cbc_decrypt(const unsigned char *in, unsigned char *out,
+ size_t len, const AES_KEY *key,
+ unsigned char *ivec);
+void aes128_t4_ctr32_encrypt(const unsigned char *in, unsigned char *out,
+ size_t blocks, const AES_KEY *key,
+ unsigned char *ivec);
+void aes192_t4_ctr32_encrypt(const unsigned char *in, unsigned char *out,
+ size_t blocks, const AES_KEY *key,
+ unsigned char *ivec);
+void aes256_t4_ctr32_encrypt(const unsigned char *in, unsigned char *out,
+ size_t blocks, const AES_KEY *key,
+ unsigned char *ivec);
+void aes128_t4_xts_encrypt(const unsigned char *in, unsigned char *out,
+ size_t blocks, const AES_KEY *key1,
+ const AES_KEY *key2, const unsigned char *ivec);
+void aes128_t4_xts_decrypt(const unsigned char *in, unsigned char *out,
+ size_t blocks, const AES_KEY *key1,
+ const AES_KEY *key2, const unsigned char *ivec);
+void aes256_t4_xts_encrypt(const unsigned char *in, unsigned char *out,
+ size_t blocks, const AES_KEY *key1,
+ const AES_KEY *key2, const unsigned char *ivec);
+void aes256_t4_xts_decrypt(const unsigned char *in, unsigned char *out,
+ size_t blocks, const AES_KEY *key1,
+ const AES_KEY *key2, const unsigned char *ivec);
+
+static int aes_t4_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key,
+ const unsigned char *iv, int enc)
+{
+ int ret, mode, bits;
+ EVP_AES_KEY *dat = (EVP_AES_KEY *) ctx->cipher_data;
+
+ mode = ctx->cipher->flags & EVP_CIPH_MODE;
+ bits = ctx->key_len * 8;
+ if ((mode == EVP_CIPH_ECB_MODE || mode == EVP_CIPH_CBC_MODE)
+ && !enc) {
+ ret = 0;
+ aes_t4_set_decrypt_key(key, bits, ctx->cipher_data);
+ dat->block = (block128_f) aes_t4_decrypt;
+ switch (bits) {
+ case 128:
+ dat->stream.cbc = mode == EVP_CIPH_CBC_MODE ?
+ (cbc128_f) aes128_t4_cbc_decrypt : NULL;
+ break;
+ case 192:
+ dat->stream.cbc = mode == EVP_CIPH_CBC_MODE ?
+ (cbc128_f) aes192_t4_cbc_decrypt : NULL;
+ break;
+ case 256:
+ dat->stream.cbc = mode == EVP_CIPH_CBC_MODE ?
+ (cbc128_f) aes256_t4_cbc_decrypt : NULL;
+ break;
+ default:
+ ret = -1;
+ }
+ } else {
+ ret = 0;
+ aes_t4_set_encrypt_key(key, bits, ctx->cipher_data);
+ dat->block = (block128_f) aes_t4_encrypt;
+ switch (bits) {
+ case 128:
+ if (mode == EVP_CIPH_CBC_MODE)
+ dat->stream.cbc = (cbc128_f) aes128_t4_cbc_encrypt;
+ else if (mode == EVP_CIPH_CTR_MODE)
+ dat->stream.ctr = (ctr128_f) aes128_t4_ctr32_encrypt;
+ else
+ dat->stream.cbc = NULL;
+ break;
+ case 192:
+ if (mode == EVP_CIPH_CBC_MODE)
+ dat->stream.cbc = (cbc128_f) aes192_t4_cbc_encrypt;
+ else if (mode == EVP_CIPH_CTR_MODE)
+ dat->stream.ctr = (ctr128_f) aes192_t4_ctr32_encrypt;
+ else
+ dat->stream.cbc = NULL;
+ break;
+ case 256:
+ if (mode == EVP_CIPH_CBC_MODE)
+ dat->stream.cbc = (cbc128_f) aes256_t4_cbc_encrypt;
+ else if (mode == EVP_CIPH_CTR_MODE)
+ dat->stream.ctr = (ctr128_f) aes256_t4_ctr32_encrypt;
+ else
+ dat->stream.cbc = NULL;
+ break;
+ default:
+ ret = -1;
+ }
+ }
+
+ if (ret < 0) {
+ EVPerr(EVP_F_AES_T4_INIT_KEY, EVP_R_AES_KEY_SETUP_FAILED);
+ return 0;
+ }
+
+ return 1;
+}
+
+# define aes_t4_cbc_cipher aes_cbc_cipher
+static int aes_t4_cbc_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
+ const unsigned char *in, size_t len);
+
+# define aes_t4_ecb_cipher aes_ecb_cipher
+static int aes_t4_ecb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
+ const unsigned char *in, size_t len);
+
+# define aes_t4_ofb_cipher aes_ofb_cipher
+static int aes_t4_ofb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
+ const unsigned char *in, size_t len);
+
+# define aes_t4_cfb_cipher aes_cfb_cipher
+static int aes_t4_cfb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
+ const unsigned char *in, size_t len);
+
+# define aes_t4_cfb8_cipher aes_cfb8_cipher
+static int aes_t4_cfb8_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
+ const unsigned char *in, size_t len);
+
+# define aes_t4_cfb1_cipher aes_cfb1_cipher
+static int aes_t4_cfb1_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
+ const unsigned char *in, size_t len);
+
+# define aes_t4_ctr_cipher aes_ctr_cipher
+static int aes_t4_ctr_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
+ const unsigned char *in, size_t len);
+
+static int aes_t4_gcm_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key,
+ const unsigned char *iv, int enc)
+{
+ EVP_AES_GCM_CTX *gctx = ctx->cipher_data;
+ if (!iv && !key)
+ return 1;
+ if (key) {
+ int bits = ctx->key_len * 8;
+ aes_t4_set_encrypt_key(key, bits, &gctx->ks.ks);
+ CRYPTO_gcm128_init(&gctx->gcm, &gctx->ks,
+ (block128_f) aes_t4_encrypt);
+ switch (bits) {
+ case 128:
+ gctx->ctr = (ctr128_f) aes128_t4_ctr32_encrypt;
+ break;
+ case 192:
+ gctx->ctr = (ctr128_f) aes192_t4_ctr32_encrypt;
+ break;
+ case 256:
+ gctx->ctr = (ctr128_f) aes256_t4_ctr32_encrypt;
+ break;
+ default:
+ return 0;
+ }
+ /*
+ * If we have an iv can set it directly, otherwise use saved IV.
+ */
+ if (iv == NULL && gctx->iv_set)
+ iv = gctx->iv;
+ if (iv) {
+ CRYPTO_gcm128_setiv(&gctx->gcm, iv, gctx->ivlen);
+ gctx->iv_set = 1;
+ }
+ gctx->key_set = 1;
+ } else {
+ /* If key set use IV, otherwise copy */
+ if (gctx->key_set)
+ CRYPTO_gcm128_setiv(&gctx->gcm, iv, gctx->ivlen);
+ else
+ memcpy(gctx->iv, iv, gctx->ivlen);
+ gctx->iv_set = 1;
+ gctx->iv_gen = 0;
+ }
+ return 1;
+}
+
+# define aes_t4_gcm_cipher aes_gcm_cipher
+static int aes_t4_gcm_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
+ const unsigned char *in, size_t len);
+
+static int aes_t4_xts_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key,
+ const unsigned char *iv, int enc)
+{
+ EVP_AES_XTS_CTX *xctx = ctx->cipher_data;
+ if (!iv && !key)
+ return 1;
+
+ if (key) {
+ int bits = ctx->key_len * 4;
+ xctx->stream = NULL;
+ /* key_len is two AES keys */
+ if (enc) {
+ aes_t4_set_encrypt_key(key, bits, &xctx->ks1.ks);
+ xctx->xts.block1 = (block128_f) aes_t4_encrypt;
+ switch (bits) {
+ case 128:
+ xctx->stream = aes128_t4_xts_encrypt;
+ break;
+# if 0 /* not yet */
+ case 192:
+ xctx->stream = aes192_t4_xts_encrypt;
+ break;
+# endif
+ case 256:
+ xctx->stream = aes256_t4_xts_encrypt;
+ break;
+ default:
+ return 0;
+ }
+ } else {
+ aes_t4_set_decrypt_key(key, ctx->key_len * 4, &xctx->ks1.ks);
+ xctx->xts.block1 = (block128_f) aes_t4_decrypt;
+ switch (bits) {
+ case 128:
+ xctx->stream = aes128_t4_xts_decrypt;
+ break;
+# if 0 /* not yet */
+ case 192:
+ xctx->stream = aes192_t4_xts_decrypt;
+ break;
+# endif
+ case 256:
+ xctx->stream = aes256_t4_xts_decrypt;
+ break;
+ default:
+ return 0;
+ }
+ }
+
+ aes_t4_set_encrypt_key(key + ctx->key_len / 2,
+ ctx->key_len * 4, &xctx->ks2.ks);
+ xctx->xts.block2 = (block128_f) aes_t4_encrypt;
+
+ xctx->xts.key1 = &xctx->ks1;
+ }
+
+ if (iv) {
+ xctx->xts.key2 = &xctx->ks2;
+ memcpy(ctx->iv, iv, 16);
+ }
+
+ return 1;
+}
+
+# define aes_t4_xts_cipher aes_xts_cipher
+static int aes_t4_xts_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
+ const unsigned char *in, size_t len);
+
+static int aes_t4_ccm_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key,
+ const unsigned char *iv, int enc)
+{
+ EVP_AES_CCM_CTX *cctx = ctx->cipher_data;
+ if (!iv && !key)
+ return 1;
+ if (key) {
+ int bits = ctx->key_len * 8;
+ aes_t4_set_encrypt_key(key, bits, &cctx->ks.ks);
+ CRYPTO_ccm128_init(&cctx->ccm, cctx->M, cctx->L,
+ &cctx->ks, (block128_f) aes_t4_encrypt);
+# if 0 /* not yet */
+ switch (bits) {
+ case 128:
+ cctx->str = enc ? (ccm128_f) aes128_t4_ccm64_encrypt :
+ (ccm128_f) ae128_t4_ccm64_decrypt;
+ break;
+ case 192:
+ cctx->str = enc ? (ccm128_f) aes192_t4_ccm64_encrypt :
+ (ccm128_f) ae192_t4_ccm64_decrypt;
+ break;
+ case 256:
+ cctx->str = enc ? (ccm128_f) aes256_t4_ccm64_encrypt :
+ (ccm128_f) ae256_t4_ccm64_decrypt;
+ break;
+ default:
+ return 0;
+ }
# else
+ cctx->str = NULL;
+# endif
+ cctx->key_set = 1;
+ }
+ if (iv) {
+ memcpy(ctx->iv, iv, 15 - cctx->L);
+ cctx->iv_set = 1;
+ }
+ return 1;
+}
-# define BLOCK_CIPHER_generic(nid,keylen,blocksize,ivlen,nmode,mode,MODE,flags) \
+# define aes_t4_ccm_cipher aes_ccm_cipher
+static int aes_t4_ccm_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
+ const unsigned char *in, size_t len);
+
+# define BLOCK_CIPHER_generic(nid,keylen,blocksize,ivlen,nmode,mode,MODE,flags) \
+static const EVP_CIPHER aes_t4_##keylen##_##mode = { \
+ nid##_##keylen##_##nmode,blocksize,keylen/8,ivlen, \
+ flags|EVP_CIPH_##MODE##_MODE, \
+ aes_t4_init_key, \
+ aes_t4_##mode##_cipher, \
+ NULL, \
+ sizeof(EVP_AES_KEY), \
+ NULL,NULL,NULL,NULL }; \
+static const EVP_CIPHER aes_##keylen##_##mode = { \
+ nid##_##keylen##_##nmode,blocksize, \
+ keylen/8,ivlen, \
+ flags|EVP_CIPH_##MODE##_MODE, \
+ aes_init_key, \
+ aes_##mode##_cipher, \
+ NULL, \
+ sizeof(EVP_AES_KEY), \
+ NULL,NULL,NULL,NULL }; \
+const EVP_CIPHER *EVP_aes_##keylen##_##mode(void) \
+{ return SPARC_AES_CAPABLE?&aes_t4_##keylen##_##mode:&aes_##keylen##_##mode; }
+
+# define BLOCK_CIPHER_custom(nid,keylen,blocksize,ivlen,mode,MODE,flags) \
+static const EVP_CIPHER aes_t4_##keylen##_##mode = { \
+ nid##_##keylen##_##mode,blocksize, \
+ (EVP_CIPH_##MODE##_MODE==EVP_CIPH_XTS_MODE?2:1)*keylen/8, ivlen, \
+ flags|EVP_CIPH_##MODE##_MODE, \
+ aes_t4_##mode##_init_key, \
+ aes_t4_##mode##_cipher, \
+ aes_##mode##_cleanup, \
+ sizeof(EVP_AES_##MODE##_CTX), \
+ NULL,NULL,aes_##mode##_ctrl,NULL }; \
+static const EVP_CIPHER aes_##keylen##_##mode = { \
+ nid##_##keylen##_##mode,blocksize, \
+ (EVP_CIPH_##MODE##_MODE==EVP_CIPH_XTS_MODE?2:1)*keylen/8, ivlen, \
+ flags|EVP_CIPH_##MODE##_MODE, \
+ aes_##mode##_init_key, \
+ aes_##mode##_cipher, \
+ aes_##mode##_cleanup, \
+ sizeof(EVP_AES_##MODE##_CTX), \
+ NULL,NULL,aes_##mode##_ctrl,NULL }; \
+const EVP_CIPHER *EVP_aes_##keylen##_##mode(void) \
+{ return SPARC_AES_CAPABLE?&aes_t4_##keylen##_##mode:&aes_##keylen##_##mode; }
+
+# else
+
+# define BLOCK_CIPHER_generic(nid,keylen,blocksize,ivlen,nmode,mode,MODE,flags) \
static const EVP_CIPHER aes_##keylen##_##mode = { \
nid##_##keylen##_##nmode,blocksize,keylen/8,ivlen, \
flags|EVP_CIPH_##MODE##_MODE, \
@@ -447,7 +864,7 @@ static const EVP_CIPHER aes_##keylen##_##mode = { \
const EVP_CIPHER *EVP_aes_##keylen##_##mode(void) \
{ return &aes_##keylen##_##mode; }
-# define BLOCK_CIPHER_custom(nid,keylen,blocksize,ivlen,mode,MODE,flags) \
+# define BLOCK_CIPHER_custom(nid,keylen,blocksize,ivlen,mode,MODE,flags) \
static const EVP_CIPHER aes_##keylen##_##mode = { \
nid##_##keylen##_##mode,blocksize, \
(EVP_CIPH_##MODE##_MODE==EVP_CIPH_XTS_MODE?2:1)*keylen/8, ivlen, \
@@ -459,9 +876,42 @@ static const EVP_CIPHER aes_##keylen##_##mode = { \
NULL,NULL,aes_##mode##_ctrl,NULL }; \
const EVP_CIPHER *EVP_aes_##keylen##_##mode(void) \
{ return &aes_##keylen##_##mode; }
+# endif
+
+# if defined(OPENSSL_CPUID_OBJ) && (defined(__arm__) || defined(__arm) || defined(__aarch64__))
+# include "arm_arch.h"
+# if __ARM_MAX_ARCH__>=7
+# if defined(BSAES_ASM)
+# define BSAES_CAPABLE (OPENSSL_armcap_P & ARMV7_NEON)
+# endif
+# define HWAES_CAPABLE (OPENSSL_armcap_P & ARMV8_AES)
+# define HWAES_set_encrypt_key aes_v8_set_encrypt_key
+# define HWAES_set_decrypt_key aes_v8_set_decrypt_key
+# define HWAES_encrypt aes_v8_encrypt
+# define HWAES_decrypt aes_v8_decrypt
+# define HWAES_cbc_encrypt aes_v8_cbc_encrypt
+# define HWAES_ctr32_encrypt_blocks aes_v8_ctr32_encrypt_blocks
# endif
+# endif
+
+# if defined(HWAES_CAPABLE)
+int HWAES_set_encrypt_key(const unsigned char *userKey, const int bits,
+ AES_KEY *key);
+int HWAES_set_decrypt_key(const unsigned char *userKey, const int bits,
+ AES_KEY *key);
+void HWAES_encrypt(const unsigned char *in, unsigned char *out,
+ const AES_KEY *key);
+void HWAES_decrypt(const unsigned char *in, unsigned char *out,
+ const AES_KEY *key);
+void HWAES_cbc_encrypt(const unsigned char *in, unsigned char *out,
+ size_t length, const AES_KEY *key,
+ unsigned char *ivec, const int enc);
+void HWAES_ctr32_encrypt_blocks(const unsigned char *in, unsigned char *out,
+ size_t len, const AES_KEY *key,
+ const unsigned char ivec[16]);
+# endif
-# define BLOCK_CIPHER_generic_pack(nid,keylen,flags) \
+# define BLOCK_CIPHER_generic_pack(nid,keylen,flags) \
BLOCK_CIPHER_generic(nid,keylen,16,16,cbc,cbc,CBC,flags|EVP_CIPH_FLAG_DEFAULT_ASN1) \
BLOCK_CIPHER_generic(nid,keylen,16,0,ecb,ecb,ECB,flags|EVP_CIPH_FLAG_DEFAULT_ASN1) \
BLOCK_CIPHER_generic(nid,keylen,1,16,ofb128,ofb,OFB,flags|EVP_CIPH_FLAG_DEFAULT_ASN1) \
@@ -479,51 +929,80 @@ static int aes_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key,
mode = ctx->cipher->flags & EVP_CIPH_MODE;
if ((mode == EVP_CIPH_ECB_MODE || mode == EVP_CIPH_CBC_MODE)
&& !enc)
-# ifdef BSAES_CAPABLE
+# ifdef HWAES_CAPABLE
+ if (HWAES_CAPABLE) {
+ ret = HWAES_set_decrypt_key(key, ctx->key_len * 8, &dat->ks.ks);
+ dat->block = (block128_f) HWAES_decrypt;
+ dat->stream.cbc = NULL;
+# ifdef HWAES_cbc_encrypt
+ if (mode == EVP_CIPH_CBC_MODE)
+ dat->stream.cbc = (cbc128_f) HWAES_cbc_encrypt;
+# endif
+ } else
+# endif
+# ifdef BSAES_CAPABLE
if (BSAES_CAPABLE && mode == EVP_CIPH_CBC_MODE) {
- ret = AES_set_decrypt_key(key, ctx->key_len * 8, &dat->ks);
+ ret = AES_set_decrypt_key(key, ctx->key_len * 8, &dat->ks.ks);
dat->block = (block128_f) AES_decrypt;
dat->stream.cbc = (cbc128_f) bsaes_cbc_encrypt;
} else
-# endif
-# ifdef VPAES_CAPABLE
+# endif
+# ifdef VPAES_CAPABLE
if (VPAES_CAPABLE) {
- ret = vpaes_set_decrypt_key(key, ctx->key_len * 8, &dat->ks);
+ ret = vpaes_set_decrypt_key(key, ctx->key_len * 8, &dat->ks.ks);
dat->block = (block128_f) vpaes_decrypt;
dat->stream.cbc = mode == EVP_CIPH_CBC_MODE ?
(cbc128_f) vpaes_cbc_encrypt : NULL;
} else
-# endif
+# endif
{
- ret = AES_set_decrypt_key(key, ctx->key_len * 8, &dat->ks);
+ ret = AES_set_decrypt_key(key, ctx->key_len * 8, &dat->ks.ks);
dat->block = (block128_f) AES_decrypt;
dat->stream.cbc = mode == EVP_CIPH_CBC_MODE ?
(cbc128_f) AES_cbc_encrypt : NULL;
} else
-# ifdef BSAES_CAPABLE
+# ifdef HWAES_CAPABLE
+ if (HWAES_CAPABLE) {
+ ret = HWAES_set_encrypt_key(key, ctx->key_len * 8, &dat->ks.ks);
+ dat->block = (block128_f) HWAES_encrypt;
+ dat->stream.cbc = NULL;
+# ifdef HWAES_cbc_encrypt
+ if (mode == EVP_CIPH_CBC_MODE)
+ dat->stream.cbc = (cbc128_f) HWAES_cbc_encrypt;
+ else
+# endif
+# ifdef HWAES_ctr32_encrypt_blocks
+ if (mode == EVP_CIPH_CTR_MODE)
+ dat->stream.ctr = (ctr128_f) HWAES_ctr32_encrypt_blocks;
+ else
+# endif
+ (void)0; /* terminate potentially open 'else' */
+ } else
+# endif
+# ifdef BSAES_CAPABLE
if (BSAES_CAPABLE && mode == EVP_CIPH_CTR_MODE) {
- ret = AES_set_encrypt_key(key, ctx->key_len * 8, &dat->ks);
+ ret = AES_set_encrypt_key(key, ctx->key_len * 8, &dat->ks.ks);
dat->block = (block128_f) AES_encrypt;
dat->stream.ctr = (ctr128_f) bsaes_ctr32_encrypt_blocks;
} else
-# endif
-# ifdef VPAES_CAPABLE
+# endif
+# ifdef VPAES_CAPABLE
if (VPAES_CAPABLE) {
- ret = vpaes_set_encrypt_key(key, ctx->key_len * 8, &dat->ks);
+ ret = vpaes_set_encrypt_key(key, ctx->key_len * 8, &dat->ks.ks);
dat->block = (block128_f) vpaes_encrypt;
dat->stream.cbc = mode == EVP_CIPH_CBC_MODE ?
(cbc128_f) vpaes_cbc_encrypt : NULL;
} else
-# endif
+# endif
{
- ret = AES_set_encrypt_key(key, ctx->key_len * 8, &dat->ks);
+ ret = AES_set_encrypt_key(key, ctx->key_len * 8, &dat->ks.ks);
dat->block = (block128_f) AES_encrypt;
dat->stream.cbc = mode == EVP_CIPH_CBC_MODE ?
(cbc128_f) AES_cbc_encrypt : NULL;
-# ifdef AES_CTR_ASM
+# ifdef AES_CTR_ASM
if (mode == EVP_CIPH_CTR_MODE)
dat->stream.ctr = (ctr128_f) AES_ctr32_encrypt;
-# endif
+# endif
}
if (ret < 0) {
@@ -544,7 +1023,7 @@ static int aes_cbc_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
else if (ctx->encrypt)
CRYPTO_cbc128_encrypt(in, out, len, &dat->ks, ctx->iv, dat->block);
else
- CRYPTO_cbc128_encrypt(in, out, len, &dat->ks, ctx->iv, dat->block);
+ CRYPTO_cbc128_decrypt(in, out, len, &dat->ks, ctx->iv, dat->block);
return 1;
}
@@ -680,11 +1159,6 @@ static int aes_gcm_ctrl(EVP_CIPHER_CTX *c, int type, int arg, void *ptr)
case EVP_CTRL_GCM_SET_IVLEN:
if (arg <= 0)
return 0;
-# ifdef OPENSSL_FIPS
- if (FIPS_module_mode() && !(c->flags & EVP_CIPH_FLAG_NON_FIPS_ALLOW)
- && arg < 12)
- return 0;
-# endif
/* Allocate memory for IV if needed */
if ((arg > EVP_MAX_IV_LENGTH) && (arg > gctx->ivlen)) {
if (gctx->iv != c->iv)
@@ -805,34 +1279,47 @@ static int aes_gcm_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key,
return 1;
if (key) {
do {
-# ifdef BSAES_CAPABLE
+# ifdef HWAES_CAPABLE
+ if (HWAES_CAPABLE) {
+ HWAES_set_encrypt_key(key, ctx->key_len * 8, &gctx->ks.ks);
+ CRYPTO_gcm128_init(&gctx->gcm, &gctx->ks,
+ (block128_f) HWAES_encrypt);
+# ifdef HWAES_ctr32_encrypt_blocks
+ gctx->ctr = (ctr128_f) HWAES_ctr32_encrypt_blocks;
+# else
+ gctx->ctr = NULL;
+# endif
+ break;
+ } else
+# endif
+# ifdef BSAES_CAPABLE
if (BSAES_CAPABLE) {
- AES_set_encrypt_key(key, ctx->key_len * 8, &gctx->ks);
+ AES_set_encrypt_key(key, ctx->key_len * 8, &gctx->ks.ks);
CRYPTO_gcm128_init(&gctx->gcm, &gctx->ks,
(block128_f) AES_encrypt);
gctx->ctr = (ctr128_f) bsaes_ctr32_encrypt_blocks;
break;
} else
-# endif
-# ifdef VPAES_CAPABLE
+# endif
+# ifdef VPAES_CAPABLE
if (VPAES_CAPABLE) {
- vpaes_set_encrypt_key(key, ctx->key_len * 8, &gctx->ks);
+ vpaes_set_encrypt_key(key, ctx->key_len * 8, &gctx->ks.ks);
CRYPTO_gcm128_init(&gctx->gcm, &gctx->ks,
(block128_f) vpaes_encrypt);
gctx->ctr = NULL;
break;
} else
-# endif
+# endif
(void)0; /* terminate potentially open 'else' */
- AES_set_encrypt_key(key, ctx->key_len * 8, &gctx->ks);
+ AES_set_encrypt_key(key, ctx->key_len * 8, &gctx->ks.ks);
CRYPTO_gcm128_init(&gctx->gcm, &gctx->ks,
(block128_f) AES_encrypt);
-# ifdef AES_CTR_ASM
+# ifdef AES_CTR_ASM
gctx->ctr = (ctr128_f) AES_ctr32_encrypt;
-# else
+# else
gctx->ctr = NULL;
-# endif
+# endif
} while (0);
/*
@@ -891,11 +1378,38 @@ static int aes_gcm_tls_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
if (ctx->encrypt) {
/* Encrypt payload */
if (gctx->ctr) {
+ size_t bulk = 0;
+# if defined(AES_GCM_ASM)
+ if (len >= 32 && AES_GCM_ASM(gctx)) {
+ if (CRYPTO_gcm128_encrypt(&gctx->gcm, NULL, NULL, 0))
+ return -1;
+
+ bulk = AES_gcm_encrypt(in, out, len,
+ gctx->gcm.key,
+ gctx->gcm.Yi.c, gctx->gcm.Xi.u);
+ gctx->gcm.len.u[1] += bulk;
+ }
+# endif
if (CRYPTO_gcm128_encrypt_ctr32(&gctx->gcm,
- in, out, len, gctx->ctr))
+ in + bulk,
+ out + bulk,
+ len - bulk, gctx->ctr))
goto err;
} else {
- if (CRYPTO_gcm128_encrypt(&gctx->gcm, in, out, len))
+ size_t bulk = 0;
+# if defined(AES_GCM_ASM2)
+ if (len >= 32 && AES_GCM_ASM2(gctx)) {
+ if (CRYPTO_gcm128_encrypt(&gctx->gcm, NULL, NULL, 0))
+ return -1;
+
+ bulk = AES_gcm_encrypt(in, out, len,
+ gctx->gcm.key,
+ gctx->gcm.Yi.c, gctx->gcm.Xi.u);
+ gctx->gcm.len.u[1] += bulk;
+ }
+# endif
+ if (CRYPTO_gcm128_encrypt(&gctx->gcm,
+ in + bulk, out + bulk, len - bulk))
goto err;
}
out += len;
@@ -905,11 +1419,38 @@ static int aes_gcm_tls_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
} else {
/* Decrypt */
if (gctx->ctr) {
+ size_t bulk = 0;
+# if defined(AES_GCM_ASM)
+ if (len >= 16 && AES_GCM_ASM(gctx)) {
+ if (CRYPTO_gcm128_decrypt(&gctx->gcm, NULL, NULL, 0))
+ return -1;
+
+ bulk = AES_gcm_decrypt(in, out, len,
+ gctx->gcm.key,
+ gctx->gcm.Yi.c, gctx->gcm.Xi.u);
+ gctx->gcm.len.u[1] += bulk;
+ }
+# endif
if (CRYPTO_gcm128_decrypt_ctr32(&gctx->gcm,
- in, out, len, gctx->ctr))
+ in + bulk,
+ out + bulk,
+ len - bulk, gctx->ctr))
goto err;
} else {
- if (CRYPTO_gcm128_decrypt(&gctx->gcm, in, out, len))
+ size_t bulk = 0;
+# if defined(AES_GCM_ASM2)
+ if (len >= 16 && AES_GCM_ASM2(gctx)) {
+ if (CRYPTO_gcm128_decrypt(&gctx->gcm, NULL, NULL, 0))
+ return -1;
+
+ bulk = AES_gcm_decrypt(in, out, len,
+ gctx->gcm.key,
+ gctx->gcm.Yi.c, gctx->gcm.Xi.u);
+ gctx->gcm.len.u[1] += bulk;
+ }
+# endif
+ if (CRYPTO_gcm128_decrypt(&gctx->gcm,
+ in + bulk, out + bulk, len - bulk))
goto err;
}
/* Retrieve tag */
@@ -947,20 +1488,90 @@ static int aes_gcm_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
return -1;
} else if (ctx->encrypt) {
if (gctx->ctr) {
+ size_t bulk = 0;
+# if defined(AES_GCM_ASM)
+ if (len >= 32 && AES_GCM_ASM(gctx)) {
+ size_t res = (16 - gctx->gcm.mres) % 16;
+
+ if (CRYPTO_gcm128_encrypt(&gctx->gcm, in, out, res))
+ return -1;
+
+ bulk = AES_gcm_encrypt(in + res,
+ out + res, len - res,
+ gctx->gcm.key, gctx->gcm.Yi.c,
+ gctx->gcm.Xi.u);
+ gctx->gcm.len.u[1] += bulk;
+ bulk += res;
+ }
+# endif
if (CRYPTO_gcm128_encrypt_ctr32(&gctx->gcm,
- in, out, len, gctx->ctr))
+ in + bulk,
+ out + bulk,
+ len - bulk, gctx->ctr))
return -1;
} else {
- if (CRYPTO_gcm128_encrypt(&gctx->gcm, in, out, len))
+ size_t bulk = 0;
+# if defined(AES_GCM_ASM2)
+ if (len >= 32 && AES_GCM_ASM2(gctx)) {
+ size_t res = (16 - gctx->gcm.mres) % 16;
+
+ if (CRYPTO_gcm128_encrypt(&gctx->gcm, in, out, res))
+ return -1;
+
+ bulk = AES_gcm_encrypt(in + res,
+ out + res, len - res,
+ gctx->gcm.key, gctx->gcm.Yi.c,
+ gctx->gcm.Xi.u);
+ gctx->gcm.len.u[1] += bulk;
+ bulk += res;
+ }
+# endif
+ if (CRYPTO_gcm128_encrypt(&gctx->gcm,
+ in + bulk, out + bulk, len - bulk))
return -1;
}
} else {
if (gctx->ctr) {
+ size_t bulk = 0;
+# if defined(AES_GCM_ASM)
+ if (len >= 16 && AES_GCM_ASM(gctx)) {
+ size_t res = (16 - gctx->gcm.mres) % 16;
+
+ if (CRYPTO_gcm128_decrypt(&gctx->gcm, in, out, res))
+ return -1;
+
+ bulk = AES_gcm_decrypt(in + res,
+ out + res, len - res,
+ gctx->gcm.key,
+ gctx->gcm.Yi.c, gctx->gcm.Xi.u);
+ gctx->gcm.len.u[1] += bulk;
+ bulk += res;
+ }
+# endif
if (CRYPTO_gcm128_decrypt_ctr32(&gctx->gcm,
- in, out, len, gctx->ctr))
+ in + bulk,
+ out + bulk,
+ len - bulk, gctx->ctr))
return -1;
} else {
- if (CRYPTO_gcm128_decrypt(&gctx->gcm, in, out, len))
+ size_t bulk = 0;
+# if defined(AES_GCM_ASM2)
+ if (len >= 16 && AES_GCM_ASM2(gctx)) {
+ size_t res = (16 - gctx->gcm.mres) % 16;
+
+ if (CRYPTO_gcm128_decrypt(&gctx->gcm, in, out, res))
+ return -1;
+
+ bulk = AES_gcm_decrypt(in + res,
+ out + res, len - res,
+ gctx->gcm.key,
+ gctx->gcm.Yi.c, gctx->gcm.Xi.u);
+ gctx->gcm.len.u[1] += bulk;
+ bulk += res;
+ }
+# endif
+ if (CRYPTO_gcm128_decrypt(&gctx->gcm,
+ in + bulk, out + bulk, len - bulk))
return -1;
}
}
@@ -983,7 +1594,7 @@ static int aes_gcm_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
}
-# define CUSTOM_FLAGS (EVP_CIPH_FLAG_DEFAULT_ASN1 \
+# define CUSTOM_FLAGS (EVP_CIPH_FLAG_DEFAULT_ASN1 \
| EVP_CIPH_CUSTOM_IV | EVP_CIPH_FLAG_CUSTOM_CIPHER \
| EVP_CIPH_ALWAYS_CALL_INIT | EVP_CIPH_CTRL_INIT \
| EVP_CIPH_CUSTOM_COPY)
@@ -1032,47 +1643,69 @@ static int aes_xts_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key,
if (key)
do {
-# ifdef AES_XTS_ASM
+# ifdef AES_XTS_ASM
xctx->stream = enc ? AES_xts_encrypt : AES_xts_decrypt;
-# else
+# else
xctx->stream = NULL;
-# endif
+# endif
/* key_len is two AES keys */
-# ifdef BSAES_CAPABLE
+# ifdef HWAES_CAPABLE
+ if (HWAES_CAPABLE) {
+ if (enc) {
+ HWAES_set_encrypt_key(key, ctx->key_len * 4,
+ &xctx->ks1.ks);
+ xctx->xts.block1 = (block128_f) HWAES_encrypt;
+ } else {
+ HWAES_set_decrypt_key(key, ctx->key_len * 4,
+ &xctx->ks1.ks);
+ xctx->xts.block1 = (block128_f) HWAES_decrypt;
+ }
+
+ HWAES_set_encrypt_key(key + ctx->key_len / 2,
+ ctx->key_len * 4, &xctx->ks2.ks);
+ xctx->xts.block2 = (block128_f) HWAES_encrypt;
+
+ xctx->xts.key1 = &xctx->ks1;
+ break;
+ } else
+# endif
+# ifdef BSAES_CAPABLE
if (BSAES_CAPABLE)
xctx->stream = enc ? bsaes_xts_encrypt : bsaes_xts_decrypt;
else
-# endif
-# ifdef VPAES_CAPABLE
+# endif
+# ifdef VPAES_CAPABLE
if (VPAES_CAPABLE) {
if (enc) {
- vpaes_set_encrypt_key(key, ctx->key_len * 4, &xctx->ks1);
+ vpaes_set_encrypt_key(key, ctx->key_len * 4,
+ &xctx->ks1.ks);
xctx->xts.block1 = (block128_f) vpaes_encrypt;
} else {
- vpaes_set_decrypt_key(key, ctx->key_len * 4, &xctx->ks1);
+ vpaes_set_decrypt_key(key, ctx->key_len * 4,
+ &xctx->ks1.ks);
xctx->xts.block1 = (block128_f) vpaes_decrypt;
}
vpaes_set_encrypt_key(key + ctx->key_len / 2,
- ctx->key_len * 4, &xctx->ks2);
+ ctx->key_len * 4, &xctx->ks2.ks);
xctx->xts.block2 = (block128_f) vpaes_encrypt;
xctx->xts.key1 = &xctx->ks1;
break;
} else
-# endif
+# endif
(void)0; /* terminate potentially open 'else' */
if (enc) {
- AES_set_encrypt_key(key, ctx->key_len * 4, &xctx->ks1);
+ AES_set_encrypt_key(key, ctx->key_len * 4, &xctx->ks1.ks);
xctx->xts.block1 = (block128_f) AES_encrypt;
} else {
- AES_set_decrypt_key(key, ctx->key_len * 4, &xctx->ks1);
+ AES_set_decrypt_key(key, ctx->key_len * 4, &xctx->ks1.ks);
xctx->xts.block1 = (block128_f) AES_decrypt;
}
AES_set_encrypt_key(key + ctx->key_len / 2,
- ctx->key_len * 4, &xctx->ks2);
+ ctx->key_len * 4, &xctx->ks2.ks);
xctx->xts.block2 = (block128_f) AES_encrypt;
xctx->xts.key1 = &xctx->ks1;
@@ -1094,14 +1727,6 @@ static int aes_xts_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
return 0;
if (!out || !in || len < AES_BLOCK_SIZE)
return 0;
-# ifdef OPENSSL_FIPS
- /* Requirement of SP800-38E */
- if (FIPS_module_mode() && !(ctx->flags & EVP_CIPH_FLAG_NON_FIPS_ALLOW) &&
- (len > (1UL << 20) * 16)) {
- EVPerr(EVP_F_AES_XTS_CIPHER, EVP_R_TOO_LARGE);
- return 0;
- }
-# endif
if (xctx->stream)
(*xctx->stream) (in, out, len,
xctx->xts.key1, xctx->xts.key2, ctx->iv);
@@ -1111,9 +1736,9 @@ static int aes_xts_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
return 1;
}
-# define aes_xts_cleanup NULL
+# define aes_xts_cleanup NULL
-# define XTS_FLAGS (EVP_CIPH_FLAG_DEFAULT_ASN1 | EVP_CIPH_CUSTOM_IV \
+# define XTS_FLAGS (EVP_CIPH_FLAG_DEFAULT_ASN1 | EVP_CIPH_CUSTOM_IV \
| EVP_CIPH_ALWAYS_CALL_INIT | EVP_CIPH_CTRL_INIT \
| EVP_CIPH_CUSTOM_COPY)
@@ -1191,17 +1816,28 @@ static int aes_ccm_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key,
return 1;
if (key)
do {
-# ifdef VPAES_CAPABLE
+# ifdef HWAES_CAPABLE
+ if (HWAES_CAPABLE) {
+ HWAES_set_encrypt_key(key, ctx->key_len * 8, &cctx->ks.ks);
+
+ CRYPTO_ccm128_init(&cctx->ccm, cctx->M, cctx->L,
+ &cctx->ks, (block128_f) HWAES_encrypt);
+ cctx->str = NULL;
+ cctx->key_set = 1;
+ break;
+ } else
+# endif
+# ifdef VPAES_CAPABLE
if (VPAES_CAPABLE) {
- vpaes_set_encrypt_key(key, ctx->key_len * 8, &cctx->ks);
+ vpaes_set_encrypt_key(key, ctx->key_len * 8, &cctx->ks.ks);
CRYPTO_ccm128_init(&cctx->ccm, cctx->M, cctx->L,
&cctx->ks, (block128_f) vpaes_encrypt);
cctx->str = NULL;
cctx->key_set = 1;
break;
}
-# endif
- AES_set_encrypt_key(key, ctx->key_len * 8, &cctx->ks);
+# endif
+ AES_set_encrypt_key(key, ctx->key_len * 8, &cctx->ks.ks);
CRYPTO_ccm128_init(&cctx->ccm, cctx->M, cctx->L,
&cctx->ks, (block128_f) AES_encrypt);
cctx->str = NULL;
@@ -1274,7 +1910,7 @@ static int aes_ccm_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
}
-# define aes_ccm_cleanup NULL
+# define aes_ccm_cleanup NULL
BLOCK_CIPHER_custom(NID_aes, 128, 1, 12, ccm, CCM,
EVP_CIPH_FLAG_FIPS | CUSTOM_FLAGS)
@@ -1282,5 +1918,107 @@ BLOCK_CIPHER_custom(NID_aes, 128, 1, 12, ccm, CCM,
EVP_CIPH_FLAG_FIPS | CUSTOM_FLAGS)
BLOCK_CIPHER_custom(NID_aes, 256, 1, 12, ccm, CCM,
EVP_CIPH_FLAG_FIPS | CUSTOM_FLAGS)
-# endif
#endif
+typedef struct {
+ union {
+ double align;
+ AES_KEY ks;
+ } ks;
+ /* Indicates if IV has been set */
+ unsigned char *iv;
+} EVP_AES_WRAP_CTX;
+
+static int aes_wrap_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key,
+ const unsigned char *iv, int enc)
+{
+ EVP_AES_WRAP_CTX *wctx = ctx->cipher_data;
+ if (!iv && !key)
+ return 1;
+ if (key) {
+ if (ctx->encrypt)
+ AES_set_encrypt_key(key, ctx->key_len * 8, &wctx->ks.ks);
+ else
+ AES_set_decrypt_key(key, ctx->key_len * 8, &wctx->ks.ks);
+ if (!iv)
+ wctx->iv = NULL;
+ }
+ if (iv) {
+ memcpy(ctx->iv, iv, 8);
+ wctx->iv = ctx->iv;
+ }
+ return 1;
+}
+
+static int aes_wrap_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
+ const unsigned char *in, size_t inlen)
+{
+ EVP_AES_WRAP_CTX *wctx = ctx->cipher_data;
+ size_t rv;
+ if (!in)
+ return 0;
+ if (inlen % 8)
+ return -1;
+ if (ctx->encrypt && inlen < 8)
+ return -1;
+ if (!ctx->encrypt && inlen < 16)
+ return -1;
+ if (!out) {
+ if (ctx->encrypt)
+ return inlen + 8;
+ else
+ return inlen - 8;
+ }
+ if (ctx->encrypt)
+ rv = CRYPTO_128_wrap(&wctx->ks.ks, wctx->iv, out, in, inlen,
+ (block128_f) AES_encrypt);
+ else
+ rv = CRYPTO_128_unwrap(&wctx->ks.ks, wctx->iv, out, in, inlen,
+ (block128_f) AES_decrypt);
+ return rv ? (int)rv : -1;
+}
+
+#define WRAP_FLAGS (EVP_CIPH_WRAP_MODE \
+ | EVP_CIPH_CUSTOM_IV | EVP_CIPH_FLAG_CUSTOM_CIPHER \
+ | EVP_CIPH_ALWAYS_CALL_INIT | EVP_CIPH_FLAG_DEFAULT_ASN1)
+
+static const EVP_CIPHER aes_128_wrap = {
+ NID_id_aes128_wrap,
+ 8, 16, 8, WRAP_FLAGS,
+ aes_wrap_init_key, aes_wrap_cipher,
+ NULL,
+ sizeof(EVP_AES_WRAP_CTX),
+ NULL, NULL, NULL, NULL
+};
+
+const EVP_CIPHER *EVP_aes_128_wrap(void)
+{
+ return &aes_128_wrap;
+}
+
+static const EVP_CIPHER aes_192_wrap = {
+ NID_id_aes192_wrap,
+ 8, 24, 8, WRAP_FLAGS,
+ aes_wrap_init_key, aes_wrap_cipher,
+ NULL,
+ sizeof(EVP_AES_WRAP_CTX),
+ NULL, NULL, NULL, NULL
+};
+
+const EVP_CIPHER *EVP_aes_192_wrap(void)
+{
+ return &aes_192_wrap;
+}
+
+static const EVP_CIPHER aes_256_wrap = {
+ NID_id_aes256_wrap,
+ 8, 32, 8, WRAP_FLAGS,
+ aes_wrap_init_key, aes_wrap_cipher,
+ NULL,
+ sizeof(EVP_AES_WRAP_CTX),
+ NULL, NULL, NULL, NULL
+};
+
+const EVP_CIPHER *EVP_aes_256_wrap(void)
+{
+ return &aes_256_wrap;
+}
diff --git a/crypto/openssl/crypto/evp/e_aes_cbc_hmac_sha1.c b/crypto/openssl/crypto/evp/e_aes_cbc_hmac_sha1.c
index d1f5928..8330964 100644
--- a/crypto/openssl/crypto/evp/e_aes_cbc_hmac_sha1.c
+++ b/crypto/openssl/crypto/evp/e_aes_cbc_hmac_sha1.c
@@ -58,7 +58,8 @@
# include <openssl/objects.h>
# include <openssl/aes.h>
# include <openssl/sha.h>
-# include "evp_locl.h"
+# include <openssl/rand.h>
+# include "modes_lcl.h"
# ifndef EVP_CIPH_FLAG_AEAD_CIPHER
# define EVP_CIPH_FLAG_AEAD_CIPHER 0x200000
@@ -70,6 +71,10 @@
# define EVP_CIPH_FLAG_DEFAULT_ASN1 0
# endif
+# if !defined(EVP_CIPH_FLAG_TLS1_1_MULTIBLOCK)
+# define EVP_CIPH_FLAG_TLS1_1_MULTIBLOCK 0
+# endif
+
# define TLS1_1_VERSION 0x0302
typedef struct {
@@ -89,11 +94,7 @@ typedef struct {
defined(_M_AMD64) || defined(_M_X64) || \
defined(__INTEL__) )
-# if defined(__GNUC__) && __GNUC__>=2 && !defined(PEDANTIC)
-# define BSWAP(x) ({ unsigned int r=(x); asm ("bswapl %0":"=r"(r):"0"(r)); r; })
-# endif
-
-extern unsigned int OPENSSL_ia32cap_P[2];
+extern unsigned int OPENSSL_ia32cap_P[];
# define AESNI_CAPABLE (1<<(57-32))
int aesni_set_encrypt_key(const unsigned char *userKey, int bits,
@@ -110,6 +111,10 @@ void aesni_cbc_sha1_enc(const void *inp, void *out, size_t blocks,
const AES_KEY *key, unsigned char iv[16],
SHA_CTX *ctx, const void *in0);
+void aesni256_cbc_sha1_dec(const void *inp, void *out, size_t blocks,
+ const AES_KEY *key, unsigned char iv[16],
+ SHA_CTX *ctx, const void *in0);
+
# define data(ctx) ((EVP_AES_HMAC_SHA1 *)(ctx)->cipher_data)
static int aesni_cbc_hmac_sha1_init_key(EVP_CIPHER_CTX *ctx,
@@ -134,6 +139,7 @@ static int aesni_cbc_hmac_sha1_init_key(EVP_CIPHER_CTX *ctx,
}
# define STITCHED_CALL
+# undef STITCHED_DECRYPT_CALL
# if !defined(STITCHED_CALL)
# define aes_off 0
@@ -177,6 +183,275 @@ static void sha1_update(SHA_CTX *c, const void *data, size_t len)
# endif
# define SHA1_Update sha1_update
+# if !defined(OPENSSL_NO_MULTIBLOCK) && EVP_CIPH_FLAG_TLS1_1_MULTIBLOCK
+
+typedef struct {
+ unsigned int A[8], B[8], C[8], D[8], E[8];
+} SHA1_MB_CTX;
+typedef struct {
+ const unsigned char *ptr;
+ int blocks;
+} HASH_DESC;
+
+void sha1_multi_block(SHA1_MB_CTX *, const HASH_DESC *, int);
+
+typedef struct {
+ const unsigned char *inp;
+ unsigned char *out;
+ int blocks;
+ u64 iv[2];
+} CIPH_DESC;
+
+void aesni_multi_cbc_encrypt(CIPH_DESC *, void *, int);
+
+static size_t tls1_1_multi_block_encrypt(EVP_AES_HMAC_SHA1 *key,
+ unsigned char *out,
+ const unsigned char *inp,
+ size_t inp_len, int n4x)
+{ /* n4x is 1 or 2 */
+ HASH_DESC hash_d[8], edges[8];
+ CIPH_DESC ciph_d[8];
+ unsigned char storage[sizeof(SHA1_MB_CTX) + 32];
+ union {
+ u64 q[16];
+ u32 d[32];
+ u8 c[128];
+ } blocks[8];
+ SHA1_MB_CTX *ctx;
+ unsigned int frag, last, packlen, i, x4 = 4 * n4x, minblocks, processed =
+ 0;
+ size_t ret = 0;
+ u8 *IVs;
+# if defined(BSWAP8)
+ u64 seqnum;
+# endif
+
+ /* ask for IVs in bulk */
+ if (RAND_bytes((IVs = blocks[0].c), 16 * x4) <= 0)
+ return 0;
+
+ ctx = (SHA1_MB_CTX *) (storage + 32 - ((size_t)storage % 32)); /* align */
+
+ frag = (unsigned int)inp_len >> (1 + n4x);
+ last = (unsigned int)inp_len + frag - (frag << (1 + n4x));
+ if (last > frag && ((last + 13 + 9) % 64) < (x4 - 1)) {
+ frag++;
+ last -= x4 - 1;
+ }
+
+ packlen = 5 + 16 + ((frag + 20 + 16) & -16);
+
+ /* populate descriptors with pointers and IVs */
+ hash_d[0].ptr = inp;
+ ciph_d[0].inp = inp;
+ /* 5+16 is place for header and explicit IV */
+ ciph_d[0].out = out + 5 + 16;
+ memcpy(ciph_d[0].out - 16, IVs, 16);
+ memcpy(ciph_d[0].iv, IVs, 16);
+ IVs += 16;
+
+ for (i = 1; i < x4; i++) {
+ ciph_d[i].inp = hash_d[i].ptr = hash_d[i - 1].ptr + frag;
+ ciph_d[i].out = ciph_d[i - 1].out + packlen;
+ memcpy(ciph_d[i].out - 16, IVs, 16);
+ memcpy(ciph_d[i].iv, IVs, 16);
+ IVs += 16;
+ }
+
+# if defined(BSWAP8)
+ memcpy(blocks[0].c, key->md.data, 8);
+ seqnum = BSWAP8(blocks[0].q[0]);
+# endif
+ for (i = 0; i < x4; i++) {
+ unsigned int len = (i == (x4 - 1) ? last : frag);
+# if !defined(BSWAP8)
+ unsigned int carry, j;
+# endif
+
+ ctx->A[i] = key->md.h0;
+ ctx->B[i] = key->md.h1;
+ ctx->C[i] = key->md.h2;
+ ctx->D[i] = key->md.h3;
+ ctx->E[i] = key->md.h4;
+
+ /* fix seqnum */
+# if defined(BSWAP8)
+ blocks[i].q[0] = BSWAP8(seqnum + i);
+# else
+ for (carry = i, j = 8; j--;) {
+ blocks[i].c[j] = ((u8 *)key->md.data)[j] + carry;
+ carry = (blocks[i].c[j] - carry) >> (sizeof(carry) * 8 - 1);
+ }
+# endif
+ blocks[i].c[8] = ((u8 *)key->md.data)[8];
+ blocks[i].c[9] = ((u8 *)key->md.data)[9];
+ blocks[i].c[10] = ((u8 *)key->md.data)[10];
+ /* fix length */
+ blocks[i].c[11] = (u8)(len >> 8);
+ blocks[i].c[12] = (u8)(len);
+
+ memcpy(blocks[i].c + 13, hash_d[i].ptr, 64 - 13);
+ hash_d[i].ptr += 64 - 13;
+ hash_d[i].blocks = (len - (64 - 13)) / 64;
+
+ edges[i].ptr = blocks[i].c;
+ edges[i].blocks = 1;
+ }
+
+ /* hash 13-byte headers and first 64-13 bytes of inputs */
+ sha1_multi_block(ctx, edges, n4x);
+ /* hash bulk inputs */
+# define MAXCHUNKSIZE 2048
+# if MAXCHUNKSIZE%64
+# error "MAXCHUNKSIZE is not divisible by 64"
+# elif MAXCHUNKSIZE
+ /*
+ * goal is to minimize pressure on L1 cache by moving in shorter steps,
+ * so that hashed data is still in the cache by the time we encrypt it
+ */
+ minblocks = ((frag <= last ? frag : last) - (64 - 13)) / 64;
+ if (minblocks > MAXCHUNKSIZE / 64) {
+ for (i = 0; i < x4; i++) {
+ edges[i].ptr = hash_d[i].ptr;
+ edges[i].blocks = MAXCHUNKSIZE / 64;
+ ciph_d[i].blocks = MAXCHUNKSIZE / 16;
+ }
+ do {
+ sha1_multi_block(ctx, edges, n4x);
+ aesni_multi_cbc_encrypt(ciph_d, &key->ks, n4x);
+
+ for (i = 0; i < x4; i++) {
+ edges[i].ptr = hash_d[i].ptr += MAXCHUNKSIZE;
+ hash_d[i].blocks -= MAXCHUNKSIZE / 64;
+ edges[i].blocks = MAXCHUNKSIZE / 64;
+ ciph_d[i].inp += MAXCHUNKSIZE;
+ ciph_d[i].out += MAXCHUNKSIZE;
+ ciph_d[i].blocks = MAXCHUNKSIZE / 16;
+ memcpy(ciph_d[i].iv, ciph_d[i].out - 16, 16);
+ }
+ processed += MAXCHUNKSIZE;
+ minblocks -= MAXCHUNKSIZE / 64;
+ } while (minblocks > MAXCHUNKSIZE / 64);
+ }
+# endif
+# undef MAXCHUNKSIZE
+ sha1_multi_block(ctx, hash_d, n4x);
+
+ memset(blocks, 0, sizeof(blocks));
+ for (i = 0; i < x4; i++) {
+ unsigned int len = (i == (x4 - 1) ? last : frag),
+ off = hash_d[i].blocks * 64;
+ const unsigned char *ptr = hash_d[i].ptr + off;
+
+ off = (len - processed) - (64 - 13) - off; /* remainder actually */
+ memcpy(blocks[i].c, ptr, off);
+ blocks[i].c[off] = 0x80;
+ len += 64 + 13; /* 64 is HMAC header */
+ len *= 8; /* convert to bits */
+ if (off < (64 - 8)) {
+# ifdef BSWAP4
+ blocks[i].d[15] = BSWAP4(len);
+# else
+ PUTU32(blocks[i].c + 60, len);
+# endif
+ edges[i].blocks = 1;
+ } else {
+# ifdef BSWAP4
+ blocks[i].d[31] = BSWAP4(len);
+# else
+ PUTU32(blocks[i].c + 124, len);
+# endif
+ edges[i].blocks = 2;
+ }
+ edges[i].ptr = blocks[i].c;
+ }
+
+ /* hash input tails and finalize */
+ sha1_multi_block(ctx, edges, n4x);
+
+ memset(blocks, 0, sizeof(blocks));
+ for (i = 0; i < x4; i++) {
+# ifdef BSWAP4
+ blocks[i].d[0] = BSWAP4(ctx->A[i]);
+ ctx->A[i] = key->tail.h0;
+ blocks[i].d[1] = BSWAP4(ctx->B[i]);
+ ctx->B[i] = key->tail.h1;
+ blocks[i].d[2] = BSWAP4(ctx->C[i]);
+ ctx->C[i] = key->tail.h2;
+ blocks[i].d[3] = BSWAP4(ctx->D[i]);
+ ctx->D[i] = key->tail.h3;
+ blocks[i].d[4] = BSWAP4(ctx->E[i]);
+ ctx->E[i] = key->tail.h4;
+ blocks[i].c[20] = 0x80;
+ blocks[i].d[15] = BSWAP4((64 + 20) * 8);
+# else
+ PUTU32(blocks[i].c + 0, ctx->A[i]);
+ ctx->A[i] = key->tail.h0;
+ PUTU32(blocks[i].c + 4, ctx->B[i]);
+ ctx->B[i] = key->tail.h1;
+ PUTU32(blocks[i].c + 8, ctx->C[i]);
+ ctx->C[i] = key->tail.h2;
+ PUTU32(blocks[i].c + 12, ctx->D[i]);
+ ctx->D[i] = key->tail.h3;
+ PUTU32(blocks[i].c + 16, ctx->E[i]);
+ ctx->E[i] = key->tail.h4;
+ blocks[i].c[20] = 0x80;
+ PUTU32(blocks[i].c + 60, (64 + 20) * 8);
+# endif
+ edges[i].ptr = blocks[i].c;
+ edges[i].blocks = 1;
+ }
+
+ /* finalize MACs */
+ sha1_multi_block(ctx, edges, n4x);
+
+ for (i = 0; i < x4; i++) {
+ unsigned int len = (i == (x4 - 1) ? last : frag), pad, j;
+ unsigned char *out0 = out;
+
+ memcpy(ciph_d[i].out, ciph_d[i].inp, len - processed);
+ ciph_d[i].inp = ciph_d[i].out;
+
+ out += 5 + 16 + len;
+
+ /* write MAC */
+ PUTU32(out + 0, ctx->A[i]);
+ PUTU32(out + 4, ctx->B[i]);
+ PUTU32(out + 8, ctx->C[i]);
+ PUTU32(out + 12, ctx->D[i]);
+ PUTU32(out + 16, ctx->E[i]);
+ out += 20;
+ len += 20;
+
+ /* pad */
+ pad = 15 - len % 16;
+ for (j = 0; j <= pad; j++)
+ *(out++) = pad;
+ len += pad + 1;
+
+ ciph_d[i].blocks = (len - processed) / 16;
+ len += 16; /* account for explicit iv */
+
+ /* arrange header */
+ out0[0] = ((u8 *)key->md.data)[8];
+ out0[1] = ((u8 *)key->md.data)[9];
+ out0[2] = ((u8 *)key->md.data)[10];
+ out0[3] = (u8)(len >> 8);
+ out0[4] = (u8)(len);
+
+ ret += len + 5;
+ inp += frag;
+ }
+
+ aesni_multi_cbc_encrypt(ciph_d, &key->ks, n4x);
+
+ OPENSSL_cleanse(blocks, sizeof(blocks));
+ OPENSSL_cleanse(ctx, sizeof(*ctx));
+
+ return ret;
+}
+# endif
+
static int aesni_cbc_hmac_sha1_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
const unsigned char *in, size_t len)
{
@@ -257,10 +532,7 @@ static int aesni_cbc_hmac_sha1_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
/* arrange cache line alignment */
pmac = (void *)(((size_t)mac.c + 31) & ((size_t)0 - 32));
- /* decrypt HMAC|padding at once */
- aesni_cbc_encrypt(in, out, len, &key->ks, ctx->iv, 0);
-
- if (plen) { /* "TLS" mode of operation */
+ if (plen != NO_PAYLOAD_LENGTH) { /* "TLS" mode of operation */
size_t inp_len, mask, j, i;
unsigned int res, maxpad, pad, bitlen;
int ret = 1;
@@ -268,17 +540,37 @@ static int aesni_cbc_hmac_sha1_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
unsigned int u[SHA_LBLOCK];
unsigned char c[SHA_CBLOCK];
} *data = (void *)key->md.data;
+# if defined(STITCHED_DECRYPT_CALL)
+ unsigned char tail_iv[AES_BLOCK_SIZE];
+ int stitch = 0;
+# endif
if ((key->aux.tls_aad[plen - 4] << 8 | key->aux.tls_aad[plen - 3])
- >= TLS1_1_VERSION)
- iv = AES_BLOCK_SIZE;
-
- if (len < (iv + SHA_DIGEST_LENGTH + 1))
+ >= TLS1_1_VERSION) {
+ if (len < (AES_BLOCK_SIZE + SHA_DIGEST_LENGTH + 1))
+ return 0;
+
+ /* omit explicit iv */
+ memcpy(ctx->iv, in, AES_BLOCK_SIZE);
+ in += AES_BLOCK_SIZE;
+ out += AES_BLOCK_SIZE;
+ len -= AES_BLOCK_SIZE;
+ } else if (len < (SHA_DIGEST_LENGTH + 1))
return 0;
- /* omit explicit iv */
- out += iv;
- len -= iv;
+# if defined(STITCHED_DECRYPT_CALL)
+ if (len >= 1024 && ctx->key_len == 32) {
+ /* decrypt last block */
+ memcpy(tail_iv, in + len - 2 * AES_BLOCK_SIZE,
+ AES_BLOCK_SIZE);
+ aesni_cbc_encrypt(in + len - AES_BLOCK_SIZE,
+ out + len - AES_BLOCK_SIZE, AES_BLOCK_SIZE,
+ &key->ks, tail_iv, 0);
+ stitch = 1;
+ } else
+# endif
+ /* decrypt HMAC|padding at once */
+ aesni_cbc_encrypt(in, out, len, &key->ks, ctx->iv, 0);
/* figure out payload length */
pad = out[len - 1];
@@ -298,6 +590,29 @@ static int aesni_cbc_hmac_sha1_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
key->md = key->head;
SHA1_Update(&key->md, key->aux.tls_aad, plen);
+# if defined(STITCHED_DECRYPT_CALL)
+ if (stitch) {
+ blocks = (len - (256 + 32 + SHA_CBLOCK)) / SHA_CBLOCK;
+ aes_off = len - AES_BLOCK_SIZE - blocks * SHA_CBLOCK;
+ sha_off = SHA_CBLOCK - plen;
+
+ aesni_cbc_encrypt(in, out, aes_off, &key->ks, ctx->iv, 0);
+
+ SHA1_Update(&key->md, out, sha_off);
+ aesni256_cbc_sha1_dec(in + aes_off,
+ out + aes_off, blocks, &key->ks,
+ ctx->iv, &key->md, out + sha_off);
+
+ sha_off += blocks *= SHA_CBLOCK;
+ out += sha_off;
+ len -= sha_off;
+ inp_len -= sha_off;
+
+ key->md.Nl += (blocks << 3); /* at most 18 bits */
+ memcpy(ctx->iv, tail_iv, AES_BLOCK_SIZE);
+ }
+# endif
+
# if 1
len -= SHA_DIGEST_LENGTH; /* amend mac */
if (len >= (256 + SHA_CBLOCK)) {
@@ -311,8 +626,8 @@ static int aesni_cbc_hmac_sha1_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
/* but pretend as if we hashed padded payload */
bitlen = key->md.Nl + (inp_len << 3); /* at most 18 bits */
-# ifdef BSWAP
- bitlen = BSWAP(bitlen);
+# ifdef BSWAP4
+ bitlen = BSWAP4(bitlen);
# else
mac.c[0] = 0;
mac.c[1] = (unsigned char)(bitlen >> 16);
@@ -376,12 +691,12 @@ static int aesni_cbc_hmac_sha1_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
pmac->u[3] |= key->md.h3 & mask;
pmac->u[4] |= key->md.h4 & mask;
-# ifdef BSWAP
- pmac->u[0] = BSWAP(pmac->u[0]);
- pmac->u[1] = BSWAP(pmac->u[1]);
- pmac->u[2] = BSWAP(pmac->u[2]);
- pmac->u[3] = BSWAP(pmac->u[3]);
- pmac->u[4] = BSWAP(pmac->u[4]);
+# ifdef BSWAP4
+ pmac->u[0] = BSWAP4(pmac->u[0]);
+ pmac->u[1] = BSWAP4(pmac->u[1]);
+ pmac->u[2] = BSWAP4(pmac->u[2]);
+ pmac->u[3] = BSWAP4(pmac->u[3]);
+ pmac->u[4] = BSWAP4(pmac->u[4]);
# else
for (i = 0; i < 5; i++) {
res = pmac->u[i];
@@ -458,6 +773,33 @@ static int aesni_cbc_hmac_sha1_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
# endif
return ret;
} else {
+# if defined(STITCHED_DECRYPT_CALL)
+ if (len >= 1024 && ctx->key_len == 32) {
+ if (sha_off %= SHA_CBLOCK)
+ blocks = (len - 3 * SHA_CBLOCK) / SHA_CBLOCK;
+ else
+ blocks = (len - 2 * SHA_CBLOCK) / SHA_CBLOCK;
+ aes_off = len - blocks * SHA_CBLOCK;
+
+ aesni_cbc_encrypt(in, out, aes_off, &key->ks, ctx->iv, 0);
+ SHA1_Update(&key->md, out, sha_off);
+ aesni256_cbc_sha1_dec(in + aes_off,
+ out + aes_off, blocks, &key->ks,
+ ctx->iv, &key->md, out + sha_off);
+
+ sha_off += blocks *= SHA_CBLOCK;
+ out += sha_off;
+ len -= sha_off;
+
+ key->md.Nh += blocks >> 29;
+ key->md.Nl += blocks <<= 3;
+ if (key->md.Nl < (unsigned int)blocks)
+ key->md.Nh++;
+ } else
+# endif
+ /* decrypt HMAC|padding at once */
+ aesni_cbc_encrypt(in, out, len, &key->ks, ctx->iv, 0);
+
SHA1_Update(&key->md, out, len);
}
}
@@ -531,6 +873,70 @@ static int aesni_cbc_hmac_sha1_ctrl(EVP_CIPHER_CTX *ctx, int type, int arg,
return SHA_DIGEST_LENGTH;
}
}
+# if !defined(OPENSSL_NO_MULTIBLOCK) && EVP_CIPH_FLAG_TLS1_1_MULTIBLOCK
+ case EVP_CTRL_TLS1_1_MULTIBLOCK_MAX_BUFSIZE:
+ return (int)(5 + 16 + ((arg + 20 + 16) & -16));
+ case EVP_CTRL_TLS1_1_MULTIBLOCK_AAD:
+ {
+ EVP_CTRL_TLS1_1_MULTIBLOCK_PARAM *param =
+ (EVP_CTRL_TLS1_1_MULTIBLOCK_PARAM *) ptr;
+ unsigned int n4x = 1, x4;
+ unsigned int frag, last, packlen, inp_len;
+
+ if (arg < (int)sizeof(EVP_CTRL_TLS1_1_MULTIBLOCK_PARAM))
+ return -1;
+
+ inp_len = param->inp[11] << 8 | param->inp[12];
+
+ if (ctx->encrypt) {
+ if ((param->inp[9] << 8 | param->inp[10]) < TLS1_1_VERSION)
+ return -1;
+
+ if (inp_len) {
+ if (inp_len < 4096)
+ return 0; /* too short */
+
+ if (inp_len >= 8192 && OPENSSL_ia32cap_P[2] & (1 << 5))
+ n4x = 2; /* AVX2 */
+ } else if ((n4x = param->interleave / 4) && n4x <= 2)
+ inp_len = param->len;
+ else
+ return -1;
+
+ key->md = key->head;
+ SHA1_Update(&key->md, param->inp, 13);
+
+ x4 = 4 * n4x;
+ n4x += 1;
+
+ frag = inp_len >> n4x;
+ last = inp_len + frag - (frag << n4x);
+ if (last > frag && ((last + 13 + 9) % 64 < (x4 - 1))) {
+ frag++;
+ last -= x4 - 1;
+ }
+
+ packlen = 5 + 16 + ((frag + 20 + 16) & -16);
+ packlen = (packlen << n4x) - packlen;
+ packlen += 5 + 16 + ((last + 20 + 16) & -16);
+
+ param->interleave = x4;
+
+ return (int)packlen;
+ } else
+ return -1; /* not yet */
+ }
+ case EVP_CTRL_TLS1_1_MULTIBLOCK_ENCRYPT:
+ {
+ EVP_CTRL_TLS1_1_MULTIBLOCK_PARAM *param =
+ (EVP_CTRL_TLS1_1_MULTIBLOCK_PARAM *) ptr;
+
+ return (int)tls1_1_multi_block_encrypt(key, param->out,
+ param->inp, param->len,
+ param->interleave / 4);
+ }
+ case EVP_CTRL_TLS1_1_MULTIBLOCK_DECRYPT:
+# endif
default:
return -1;
}
@@ -544,7 +950,7 @@ static EVP_CIPHER aesni_128_cbc_hmac_sha1_cipher = {
# endif
16, 16, 16,
EVP_CIPH_CBC_MODE | EVP_CIPH_FLAG_DEFAULT_ASN1 |
- EVP_CIPH_FLAG_AEAD_CIPHER,
+ EVP_CIPH_FLAG_AEAD_CIPHER | EVP_CIPH_FLAG_TLS1_1_MULTIBLOCK,
aesni_cbc_hmac_sha1_init_key,
aesni_cbc_hmac_sha1_cipher,
NULL,
@@ -563,7 +969,7 @@ static EVP_CIPHER aesni_256_cbc_hmac_sha1_cipher = {
# endif
16, 32, 16,
EVP_CIPH_CBC_MODE | EVP_CIPH_FLAG_DEFAULT_ASN1 |
- EVP_CIPH_FLAG_AEAD_CIPHER,
+ EVP_CIPH_FLAG_AEAD_CIPHER | EVP_CIPH_FLAG_TLS1_1_MULTIBLOCK,
aesni_cbc_hmac_sha1_init_key,
aesni_cbc_hmac_sha1_cipher,
NULL,
diff --git a/crypto/openssl/crypto/evp/e_aes_cbc_hmac_sha256.c b/crypto/openssl/crypto/evp/e_aes_cbc_hmac_sha256.c
new file mode 100644
index 0000000..b1c586e
--- /dev/null
+++ b/crypto/openssl/crypto/evp/e_aes_cbc_hmac_sha256.c
@@ -0,0 +1,973 @@
+/* ====================================================================
+ * Copyright (c) 2011-2013 The OpenSSL Project. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * 3. All advertising materials mentioning features or use of this
+ * software must display the following acknowledgment:
+ * "This product includes software developed by the OpenSSL Project
+ * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)"
+ *
+ * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
+ * endorse or promote products derived from this software without
+ * prior written permission. For written permission, please contact
+ * licensing@OpenSSL.org.
+ *
+ * 5. Products derived from this software may not be called "OpenSSL"
+ * nor may "OpenSSL" appear in their names without prior written
+ * permission of the OpenSSL Project.
+ *
+ * 6. Redistributions of any form whatsoever must retain the following
+ * acknowledgment:
+ * "This product includes software developed by the OpenSSL Project
+ * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)"
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
+ * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
+ * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+ * OF THE POSSIBILITY OF SUCH DAMAGE.
+ * ====================================================================
+ */
+
+#include <openssl/opensslconf.h>
+
+#include <stdio.h>
+#include <string.h>
+
+#if !defined(OPENSSL_NO_AES) && !defined(OPENSSL_NO_SHA256)
+
+# include <openssl/evp.h>
+# include <openssl/objects.h>
+# include <openssl/aes.h>
+# include <openssl/sha.h>
+# include <openssl/rand.h>
+# include "modes_lcl.h"
+
+# ifndef EVP_CIPH_FLAG_AEAD_CIPHER
+# define EVP_CIPH_FLAG_AEAD_CIPHER 0x200000
+# define EVP_CTRL_AEAD_TLS1_AAD 0x16
+# define EVP_CTRL_AEAD_SET_MAC_KEY 0x17
+# endif
+
+# if !defined(EVP_CIPH_FLAG_DEFAULT_ASN1)
+# define EVP_CIPH_FLAG_DEFAULT_ASN1 0
+# endif
+
+# if !defined(EVP_CIPH_FLAG_TLS1_1_MULTIBLOCK)
+# define EVP_CIPH_FLAG_TLS1_1_MULTIBLOCK 0
+# endif
+
+# define TLS1_1_VERSION 0x0302
+
+typedef struct {
+ AES_KEY ks;
+ SHA256_CTX head, tail, md;
+ size_t payload_length; /* AAD length in decrypt case */
+ union {
+ unsigned int tls_ver;
+ unsigned char tls_aad[16]; /* 13 used */
+ } aux;
+} EVP_AES_HMAC_SHA256;
+
+# define NO_PAYLOAD_LENGTH ((size_t)-1)
+
+# if defined(AES_ASM) && ( \
+ defined(__x86_64) || defined(__x86_64__) || \
+ defined(_M_AMD64) || defined(_M_X64) || \
+ defined(__INTEL__) )
+
+extern unsigned int OPENSSL_ia32cap_P[];
+# define AESNI_CAPABLE (1<<(57-32))
+
+int aesni_set_encrypt_key(const unsigned char *userKey, int bits,
+ AES_KEY *key);
+int aesni_set_decrypt_key(const unsigned char *userKey, int bits,
+ AES_KEY *key);
+
+void aesni_cbc_encrypt(const unsigned char *in,
+ unsigned char *out,
+ size_t length,
+ const AES_KEY *key, unsigned char *ivec, int enc);
+
+int aesni_cbc_sha256_enc(const void *inp, void *out, size_t blocks,
+ const AES_KEY *key, unsigned char iv[16],
+ SHA256_CTX *ctx, const void *in0);
+
+# define data(ctx) ((EVP_AES_HMAC_SHA256 *)(ctx)->cipher_data)
+
+static int aesni_cbc_hmac_sha256_init_key(EVP_CIPHER_CTX *ctx,
+ const unsigned char *inkey,
+ const unsigned char *iv, int enc)
+{
+ EVP_AES_HMAC_SHA256 *key = data(ctx);
+ int ret;
+
+ if (enc)
+ memset(&key->ks, 0, sizeof(key->ks.rd_key)),
+ ret = aesni_set_encrypt_key(inkey, ctx->key_len * 8, &key->ks);
+ else
+ ret = aesni_set_decrypt_key(inkey, ctx->key_len * 8, &key->ks);
+
+ SHA256_Init(&key->head); /* handy when benchmarking */
+ key->tail = key->head;
+ key->md = key->head;
+
+ key->payload_length = NO_PAYLOAD_LENGTH;
+
+ return ret < 0 ? 0 : 1;
+}
+
+# define STITCHED_CALL
+
+# if !defined(STITCHED_CALL)
+# define aes_off 0
+# endif
+
+void sha256_block_data_order(void *c, const void *p, size_t len);
+
+static void sha256_update(SHA256_CTX *c, const void *data, size_t len)
+{
+ const unsigned char *ptr = data;
+ size_t res;
+
+ if ((res = c->num)) {
+ res = SHA256_CBLOCK - res;
+ if (len < res)
+ res = len;
+ SHA256_Update(c, ptr, res);
+ ptr += res;
+ len -= res;
+ }
+
+ res = len % SHA256_CBLOCK;
+ len -= res;
+
+ if (len) {
+ sha256_block_data_order(c, ptr, len / SHA256_CBLOCK);
+
+ ptr += len;
+ c->Nh += len >> 29;
+ c->Nl += len <<= 3;
+ if (c->Nl < (unsigned int)len)
+ c->Nh++;
+ }
+
+ if (res)
+ SHA256_Update(c, ptr, res);
+}
+
+# ifdef SHA256_Update
+# undef SHA256_Update
+# endif
+# define SHA256_Update sha256_update
+
+# if !defined(OPENSSL_NO_MULTIBLOCK) && EVP_CIPH_FLAG_TLS1_1_MULTIBLOCK
+
+typedef struct {
+ unsigned int A[8], B[8], C[8], D[8], E[8], F[8], G[8], H[8];
+} SHA256_MB_CTX;
+typedef struct {
+ const unsigned char *ptr;
+ int blocks;
+} HASH_DESC;
+
+void sha256_multi_block(SHA256_MB_CTX *, const HASH_DESC *, int);
+
+typedef struct {
+ const unsigned char *inp;
+ unsigned char *out;
+ int blocks;
+ u64 iv[2];
+} CIPH_DESC;
+
+void aesni_multi_cbc_encrypt(CIPH_DESC *, void *, int);
+
+static size_t tls1_1_multi_block_encrypt(EVP_AES_HMAC_SHA256 *key,
+ unsigned char *out,
+ const unsigned char *inp,
+ size_t inp_len, int n4x)
+{ /* n4x is 1 or 2 */
+ HASH_DESC hash_d[8], edges[8];
+ CIPH_DESC ciph_d[8];
+ unsigned char storage[sizeof(SHA256_MB_CTX) + 32];
+ union {
+ u64 q[16];
+ u32 d[32];
+ u8 c[128];
+ } blocks[8];
+ SHA256_MB_CTX *ctx;
+ unsigned int frag, last, packlen, i, x4 = 4 * n4x, minblocks, processed =
+ 0;
+ size_t ret = 0;
+ u8 *IVs;
+# if defined(BSWAP8)
+ u64 seqnum;
+# endif
+
+ /* ask for IVs in bulk */
+ if (RAND_bytes((IVs = blocks[0].c), 16 * x4) <= 0)
+ return 0;
+
+ /* align */
+ ctx = (SHA256_MB_CTX *) (storage + 32 - ((size_t)storage % 32));
+
+ frag = (unsigned int)inp_len >> (1 + n4x);
+ last = (unsigned int)inp_len + frag - (frag << (1 + n4x));
+ if (last > frag && ((last + 13 + 9) % 64) < (x4 - 1)) {
+ frag++;
+ last -= x4 - 1;
+ }
+
+ packlen = 5 + 16 + ((frag + 32 + 16) & -16);
+
+ /* populate descriptors with pointers and IVs */
+ hash_d[0].ptr = inp;
+ ciph_d[0].inp = inp;
+ /* 5+16 is place for header and explicit IV */
+ ciph_d[0].out = out + 5 + 16;
+ memcpy(ciph_d[0].out - 16, IVs, 16);
+ memcpy(ciph_d[0].iv, IVs, 16);
+ IVs += 16;
+
+ for (i = 1; i < x4; i++) {
+ ciph_d[i].inp = hash_d[i].ptr = hash_d[i - 1].ptr + frag;
+ ciph_d[i].out = ciph_d[i - 1].out + packlen;
+ memcpy(ciph_d[i].out - 16, IVs, 16);
+ memcpy(ciph_d[i].iv, IVs, 16);
+ IVs += 16;
+ }
+
+# if defined(BSWAP8)
+ memcpy(blocks[0].c, key->md.data, 8);
+ seqnum = BSWAP8(blocks[0].q[0]);
+# endif
+ for (i = 0; i < x4; i++) {
+ unsigned int len = (i == (x4 - 1) ? last : frag);
+# if !defined(BSWAP8)
+ unsigned int carry, j;
+# endif
+
+ ctx->A[i] = key->md.h[0];
+ ctx->B[i] = key->md.h[1];
+ ctx->C[i] = key->md.h[2];
+ ctx->D[i] = key->md.h[3];
+ ctx->E[i] = key->md.h[4];
+ ctx->F[i] = key->md.h[5];
+ ctx->G[i] = key->md.h[6];
+ ctx->H[i] = key->md.h[7];
+
+ /* fix seqnum */
+# if defined(BSWAP8)
+ blocks[i].q[0] = BSWAP8(seqnum + i);
+# else
+ for (carry = i, j = 8; j--;) {
+ blocks[i].c[j] = ((u8 *)key->md.data)[j] + carry;
+ carry = (blocks[i].c[j] - carry) >> (sizeof(carry) * 8 - 1);
+ }
+# endif
+ blocks[i].c[8] = ((u8 *)key->md.data)[8];
+ blocks[i].c[9] = ((u8 *)key->md.data)[9];
+ blocks[i].c[10] = ((u8 *)key->md.data)[10];
+ /* fix length */
+ blocks[i].c[11] = (u8)(len >> 8);
+ blocks[i].c[12] = (u8)(len);
+
+ memcpy(blocks[i].c + 13, hash_d[i].ptr, 64 - 13);
+ hash_d[i].ptr += 64 - 13;
+ hash_d[i].blocks = (len - (64 - 13)) / 64;
+
+ edges[i].ptr = blocks[i].c;
+ edges[i].blocks = 1;
+ }
+
+ /* hash 13-byte headers and first 64-13 bytes of inputs */
+ sha256_multi_block(ctx, edges, n4x);
+ /* hash bulk inputs */
+# define MAXCHUNKSIZE 2048
+# if MAXCHUNKSIZE%64
+# error "MAXCHUNKSIZE is not divisible by 64"
+# elif MAXCHUNKSIZE
+ /*
+ * goal is to minimize pressure on L1 cache by moving in shorter steps,
+ * so that hashed data is still in the cache by the time we encrypt it
+ */
+ minblocks = ((frag <= last ? frag : last) - (64 - 13)) / 64;
+ if (minblocks > MAXCHUNKSIZE / 64) {
+ for (i = 0; i < x4; i++) {
+ edges[i].ptr = hash_d[i].ptr;
+ edges[i].blocks = MAXCHUNKSIZE / 64;
+ ciph_d[i].blocks = MAXCHUNKSIZE / 16;
+ }
+ do {
+ sha256_multi_block(ctx, edges, n4x);
+ aesni_multi_cbc_encrypt(ciph_d, &key->ks, n4x);
+
+ for (i = 0; i < x4; i++) {
+ edges[i].ptr = hash_d[i].ptr += MAXCHUNKSIZE;
+ hash_d[i].blocks -= MAXCHUNKSIZE / 64;
+ edges[i].blocks = MAXCHUNKSIZE / 64;
+ ciph_d[i].inp += MAXCHUNKSIZE;
+ ciph_d[i].out += MAXCHUNKSIZE;
+ ciph_d[i].blocks = MAXCHUNKSIZE / 16;
+ memcpy(ciph_d[i].iv, ciph_d[i].out - 16, 16);
+ }
+ processed += MAXCHUNKSIZE;
+ minblocks -= MAXCHUNKSIZE / 64;
+ } while (minblocks > MAXCHUNKSIZE / 64);
+ }
+# endif
+# undef MAXCHUNKSIZE
+ sha256_multi_block(ctx, hash_d, n4x);
+
+ memset(blocks, 0, sizeof(blocks));
+ for (i = 0; i < x4; i++) {
+ unsigned int len = (i == (x4 - 1) ? last : frag),
+ off = hash_d[i].blocks * 64;
+ const unsigned char *ptr = hash_d[i].ptr + off;
+
+ off = (len - processed) - (64 - 13) - off; /* remainder actually */
+ memcpy(blocks[i].c, ptr, off);
+ blocks[i].c[off] = 0x80;
+ len += 64 + 13; /* 64 is HMAC header */
+ len *= 8; /* convert to bits */
+ if (off < (64 - 8)) {
+# ifdef BSWAP4
+ blocks[i].d[15] = BSWAP4(len);
+# else
+ PUTU32(blocks[i].c + 60, len);
+# endif
+ edges[i].blocks = 1;
+ } else {
+# ifdef BSWAP4
+ blocks[i].d[31] = BSWAP4(len);
+# else
+ PUTU32(blocks[i].c + 124, len);
+# endif
+ edges[i].blocks = 2;
+ }
+ edges[i].ptr = blocks[i].c;
+ }
+
+ /* hash input tails and finalize */
+ sha256_multi_block(ctx, edges, n4x);
+
+ memset(blocks, 0, sizeof(blocks));
+ for (i = 0; i < x4; i++) {
+# ifdef BSWAP4
+ blocks[i].d[0] = BSWAP4(ctx->A[i]);
+ ctx->A[i] = key->tail.h[0];
+ blocks[i].d[1] = BSWAP4(ctx->B[i]);
+ ctx->B[i] = key->tail.h[1];
+ blocks[i].d[2] = BSWAP4(ctx->C[i]);
+ ctx->C[i] = key->tail.h[2];
+ blocks[i].d[3] = BSWAP4(ctx->D[i]);
+ ctx->D[i] = key->tail.h[3];
+ blocks[i].d[4] = BSWAP4(ctx->E[i]);
+ ctx->E[i] = key->tail.h[4];
+ blocks[i].d[5] = BSWAP4(ctx->F[i]);
+ ctx->F[i] = key->tail.h[5];
+ blocks[i].d[6] = BSWAP4(ctx->G[i]);
+ ctx->G[i] = key->tail.h[6];
+ blocks[i].d[7] = BSWAP4(ctx->H[i]);
+ ctx->H[i] = key->tail.h[7];
+ blocks[i].c[32] = 0x80;
+ blocks[i].d[15] = BSWAP4((64 + 32) * 8);
+# else
+ PUTU32(blocks[i].c + 0, ctx->A[i]);
+ ctx->A[i] = key->tail.h[0];
+ PUTU32(blocks[i].c + 4, ctx->B[i]);
+ ctx->B[i] = key->tail.h[1];
+ PUTU32(blocks[i].c + 8, ctx->C[i]);
+ ctx->C[i] = key->tail.h[2];
+ PUTU32(blocks[i].c + 12, ctx->D[i]);
+ ctx->D[i] = key->tail.h[3];
+ PUTU32(blocks[i].c + 16, ctx->E[i]);
+ ctx->E[i] = key->tail.h[4];
+ PUTU32(blocks[i].c + 20, ctx->F[i]);
+ ctx->F[i] = key->tail.h[5];
+ PUTU32(blocks[i].c + 24, ctx->G[i]);
+ ctx->G[i] = key->tail.h[6];
+ PUTU32(blocks[i].c + 28, ctx->H[i]);
+ ctx->H[i] = key->tail.h[7];
+ blocks[i].c[32] = 0x80;
+ PUTU32(blocks[i].c + 60, (64 + 32) * 8);
+# endif
+ edges[i].ptr = blocks[i].c;
+ edges[i].blocks = 1;
+ }
+
+ /* finalize MACs */
+ sha256_multi_block(ctx, edges, n4x);
+
+ for (i = 0; i < x4; i++) {
+ unsigned int len = (i == (x4 - 1) ? last : frag), pad, j;
+ unsigned char *out0 = out;
+
+ memcpy(ciph_d[i].out, ciph_d[i].inp, len - processed);
+ ciph_d[i].inp = ciph_d[i].out;
+
+ out += 5 + 16 + len;
+
+ /* write MAC */
+ PUTU32(out + 0, ctx->A[i]);
+ PUTU32(out + 4, ctx->B[i]);
+ PUTU32(out + 8, ctx->C[i]);
+ PUTU32(out + 12, ctx->D[i]);
+ PUTU32(out + 16, ctx->E[i]);
+ PUTU32(out + 20, ctx->F[i]);
+ PUTU32(out + 24, ctx->G[i]);
+ PUTU32(out + 28, ctx->H[i]);
+ out += 32;
+ len += 32;
+
+ /* pad */
+ pad = 15 - len % 16;
+ for (j = 0; j <= pad; j++)
+ *(out++) = pad;
+ len += pad + 1;
+
+ ciph_d[i].blocks = (len - processed) / 16;
+ len += 16; /* account for explicit iv */
+
+ /* arrange header */
+ out0[0] = ((u8 *)key->md.data)[8];
+ out0[1] = ((u8 *)key->md.data)[9];
+ out0[2] = ((u8 *)key->md.data)[10];
+ out0[3] = (u8)(len >> 8);
+ out0[4] = (u8)(len);
+
+ ret += len + 5;
+ inp += frag;
+ }
+
+ aesni_multi_cbc_encrypt(ciph_d, &key->ks, n4x);
+
+ OPENSSL_cleanse(blocks, sizeof(blocks));
+ OPENSSL_cleanse(ctx, sizeof(*ctx));
+
+ return ret;
+}
+# endif
+
+static int aesni_cbc_hmac_sha256_cipher(EVP_CIPHER_CTX *ctx,
+ unsigned char *out,
+ const unsigned char *in, size_t len)
+{
+ EVP_AES_HMAC_SHA256 *key = data(ctx);
+ unsigned int l;
+ size_t plen = key->payload_length, iv = 0, /* explicit IV in TLS 1.1 and
+ * later */
+ sha_off = 0;
+# if defined(STITCHED_CALL)
+ size_t aes_off = 0, blocks;
+
+ sha_off = SHA256_CBLOCK - key->md.num;
+# endif
+
+ key->payload_length = NO_PAYLOAD_LENGTH;
+
+ if (len % AES_BLOCK_SIZE)
+ return 0;
+
+ if (ctx->encrypt) {
+ if (plen == NO_PAYLOAD_LENGTH)
+ plen = len;
+ else if (len !=
+ ((plen + SHA256_DIGEST_LENGTH +
+ AES_BLOCK_SIZE) & -AES_BLOCK_SIZE))
+ return 0;
+ else if (key->aux.tls_ver >= TLS1_1_VERSION)
+ iv = AES_BLOCK_SIZE;
+
+# if defined(STITCHED_CALL)
+ if (OPENSSL_ia32cap_P[1] & (1 << (60 - 32)) && /* AVX? */
+ plen > (sha_off + iv) &&
+ (blocks = (plen - (sha_off + iv)) / SHA256_CBLOCK)) {
+ SHA256_Update(&key->md, in + iv, sha_off);
+
+ (void)aesni_cbc_sha256_enc(in, out, blocks, &key->ks,
+ ctx->iv, &key->md, in + iv + sha_off);
+ blocks *= SHA256_CBLOCK;
+ aes_off += blocks;
+ sha_off += blocks;
+ key->md.Nh += blocks >> 29;
+ key->md.Nl += blocks <<= 3;
+ if (key->md.Nl < (unsigned int)blocks)
+ key->md.Nh++;
+ } else {
+ sha_off = 0;
+ }
+# endif
+ sha_off += iv;
+ SHA256_Update(&key->md, in + sha_off, plen - sha_off);
+
+ if (plen != len) { /* "TLS" mode of operation */
+ if (in != out)
+ memcpy(out + aes_off, in + aes_off, plen - aes_off);
+
+ /* calculate HMAC and append it to payload */
+ SHA256_Final(out + plen, &key->md);
+ key->md = key->tail;
+ SHA256_Update(&key->md, out + plen, SHA256_DIGEST_LENGTH);
+ SHA256_Final(out + plen, &key->md);
+
+ /* pad the payload|hmac */
+ plen += SHA256_DIGEST_LENGTH;
+ for (l = len - plen - 1; plen < len; plen++)
+ out[plen] = l;
+ /* encrypt HMAC|padding at once */
+ aesni_cbc_encrypt(out + aes_off, out + aes_off, len - aes_off,
+ &key->ks, ctx->iv, 1);
+ } else {
+ aesni_cbc_encrypt(in + aes_off, out + aes_off, len - aes_off,
+ &key->ks, ctx->iv, 1);
+ }
+ } else {
+ union {
+ unsigned int u[SHA256_DIGEST_LENGTH / sizeof(unsigned int)];
+ unsigned char c[64 + SHA256_DIGEST_LENGTH];
+ } mac, *pmac;
+
+ /* arrange cache line alignment */
+ pmac = (void *)(((size_t)mac.c + 63) & ((size_t)0 - 64));
+
+ /* decrypt HMAC|padding at once */
+ aesni_cbc_encrypt(in, out, len, &key->ks, ctx->iv, 0);
+
+ if (plen != NO_PAYLOAD_LENGTH) { /* "TLS" mode of operation */
+ size_t inp_len, mask, j, i;
+ unsigned int res, maxpad, pad, bitlen;
+ int ret = 1;
+ union {
+ unsigned int u[SHA_LBLOCK];
+ unsigned char c[SHA256_CBLOCK];
+ } *data = (void *)key->md.data;
+
+ if ((key->aux.tls_aad[plen - 4] << 8 | key->aux.tls_aad[plen - 3])
+ >= TLS1_1_VERSION)
+ iv = AES_BLOCK_SIZE;
+
+ if (len < (iv + SHA256_DIGEST_LENGTH + 1))
+ return 0;
+
+ /* omit explicit iv */
+ out += iv;
+ len -= iv;
+
+ /* figure out payload length */
+ pad = out[len - 1];
+ maxpad = len - (SHA256_DIGEST_LENGTH + 1);
+ maxpad |= (255 - maxpad) >> (sizeof(maxpad) * 8 - 8);
+ maxpad &= 255;
+
+ inp_len = len - (SHA256_DIGEST_LENGTH + pad + 1);
+ mask = (0 - ((inp_len - len) >> (sizeof(inp_len) * 8 - 1)));
+ inp_len &= mask;
+ ret &= (int)mask;
+
+ key->aux.tls_aad[plen - 2] = inp_len >> 8;
+ key->aux.tls_aad[plen - 1] = inp_len;
+
+ /* calculate HMAC */
+ key->md = key->head;
+ SHA256_Update(&key->md, key->aux.tls_aad, plen);
+
+# if 1
+ len -= SHA256_DIGEST_LENGTH; /* amend mac */
+ if (len >= (256 + SHA256_CBLOCK)) {
+ j = (len - (256 + SHA256_CBLOCK)) & (0 - SHA256_CBLOCK);
+ j += SHA256_CBLOCK - key->md.num;
+ SHA256_Update(&key->md, out, j);
+ out += j;
+ len -= j;
+ inp_len -= j;
+ }
+
+ /* but pretend as if we hashed padded payload */
+ bitlen = key->md.Nl + (inp_len << 3); /* at most 18 bits */
+# ifdef BSWAP4
+ bitlen = BSWAP4(bitlen);
+# else
+ mac.c[0] = 0;
+ mac.c[1] = (unsigned char)(bitlen >> 16);
+ mac.c[2] = (unsigned char)(bitlen >> 8);
+ mac.c[3] = (unsigned char)bitlen;
+ bitlen = mac.u[0];
+# endif
+
+ pmac->u[0] = 0;
+ pmac->u[1] = 0;
+ pmac->u[2] = 0;
+ pmac->u[3] = 0;
+ pmac->u[4] = 0;
+ pmac->u[5] = 0;
+ pmac->u[6] = 0;
+ pmac->u[7] = 0;
+
+ for (res = key->md.num, j = 0; j < len; j++) {
+ size_t c = out[j];
+ mask = (j - inp_len) >> (sizeof(j) * 8 - 8);
+ c &= mask;
+ c |= 0x80 & ~mask & ~((inp_len - j) >> (sizeof(j) * 8 - 8));
+ data->c[res++] = (unsigned char)c;
+
+ if (res != SHA256_CBLOCK)
+ continue;
+
+ /* j is not incremented yet */
+ mask = 0 - ((inp_len + 7 - j) >> (sizeof(j) * 8 - 1));
+ data->u[SHA_LBLOCK - 1] |= bitlen & mask;
+ sha256_block_data_order(&key->md, data, 1);
+ mask &= 0 - ((j - inp_len - 72) >> (sizeof(j) * 8 - 1));
+ pmac->u[0] |= key->md.h[0] & mask;
+ pmac->u[1] |= key->md.h[1] & mask;
+ pmac->u[2] |= key->md.h[2] & mask;
+ pmac->u[3] |= key->md.h[3] & mask;
+ pmac->u[4] |= key->md.h[4] & mask;
+ pmac->u[5] |= key->md.h[5] & mask;
+ pmac->u[6] |= key->md.h[6] & mask;
+ pmac->u[7] |= key->md.h[7] & mask;
+ res = 0;
+ }
+
+ for (i = res; i < SHA256_CBLOCK; i++, j++)
+ data->c[i] = 0;
+
+ if (res > SHA256_CBLOCK - 8) {
+ mask = 0 - ((inp_len + 8 - j) >> (sizeof(j) * 8 - 1));
+ data->u[SHA_LBLOCK - 1] |= bitlen & mask;
+ sha256_block_data_order(&key->md, data, 1);
+ mask &= 0 - ((j - inp_len - 73) >> (sizeof(j) * 8 - 1));
+ pmac->u[0] |= key->md.h[0] & mask;
+ pmac->u[1] |= key->md.h[1] & mask;
+ pmac->u[2] |= key->md.h[2] & mask;
+ pmac->u[3] |= key->md.h[3] & mask;
+ pmac->u[4] |= key->md.h[4] & mask;
+ pmac->u[5] |= key->md.h[5] & mask;
+ pmac->u[6] |= key->md.h[6] & mask;
+ pmac->u[7] |= key->md.h[7] & mask;
+
+ memset(data, 0, SHA256_CBLOCK);
+ j += 64;
+ }
+ data->u[SHA_LBLOCK - 1] = bitlen;
+ sha256_block_data_order(&key->md, data, 1);
+ mask = 0 - ((j - inp_len - 73) >> (sizeof(j) * 8 - 1));
+ pmac->u[0] |= key->md.h[0] & mask;
+ pmac->u[1] |= key->md.h[1] & mask;
+ pmac->u[2] |= key->md.h[2] & mask;
+ pmac->u[3] |= key->md.h[3] & mask;
+ pmac->u[4] |= key->md.h[4] & mask;
+ pmac->u[5] |= key->md.h[5] & mask;
+ pmac->u[6] |= key->md.h[6] & mask;
+ pmac->u[7] |= key->md.h[7] & mask;
+
+# ifdef BSWAP4
+ pmac->u[0] = BSWAP4(pmac->u[0]);
+ pmac->u[1] = BSWAP4(pmac->u[1]);
+ pmac->u[2] = BSWAP4(pmac->u[2]);
+ pmac->u[3] = BSWAP4(pmac->u[3]);
+ pmac->u[4] = BSWAP4(pmac->u[4]);
+ pmac->u[5] = BSWAP4(pmac->u[5]);
+ pmac->u[6] = BSWAP4(pmac->u[6]);
+ pmac->u[7] = BSWAP4(pmac->u[7]);
+# else
+ for (i = 0; i < 8; i++) {
+ res = pmac->u[i];
+ pmac->c[4 * i + 0] = (unsigned char)(res >> 24);
+ pmac->c[4 * i + 1] = (unsigned char)(res >> 16);
+ pmac->c[4 * i + 2] = (unsigned char)(res >> 8);
+ pmac->c[4 * i + 3] = (unsigned char)res;
+ }
+# endif
+ len += SHA256_DIGEST_LENGTH;
+# else
+ SHA256_Update(&key->md, out, inp_len);
+ res = key->md.num;
+ SHA256_Final(pmac->c, &key->md);
+
+ {
+ unsigned int inp_blocks, pad_blocks;
+
+ /* but pretend as if we hashed padded payload */
+ inp_blocks =
+ 1 + ((SHA256_CBLOCK - 9 - res) >> (sizeof(res) * 8 - 1));
+ res += (unsigned int)(len - inp_len);
+ pad_blocks = res / SHA256_CBLOCK;
+ res %= SHA256_CBLOCK;
+ pad_blocks +=
+ 1 + ((SHA256_CBLOCK - 9 - res) >> (sizeof(res) * 8 - 1));
+ for (; inp_blocks < pad_blocks; inp_blocks++)
+ sha1_block_data_order(&key->md, data, 1);
+ }
+# endif
+ key->md = key->tail;
+ SHA256_Update(&key->md, pmac->c, SHA256_DIGEST_LENGTH);
+ SHA256_Final(pmac->c, &key->md);
+
+ /* verify HMAC */
+ out += inp_len;
+ len -= inp_len;
+# if 1
+ {
+ unsigned char *p =
+ out + len - 1 - maxpad - SHA256_DIGEST_LENGTH;
+ size_t off = out - p;
+ unsigned int c, cmask;
+
+ maxpad += SHA256_DIGEST_LENGTH;
+ for (res = 0, i = 0, j = 0; j < maxpad; j++) {
+ c = p[j];
+ cmask =
+ ((int)(j - off - SHA256_DIGEST_LENGTH)) >>
+ (sizeof(int) * 8 - 1);
+ res |= (c ^ pad) & ~cmask; /* ... and padding */
+ cmask &= ((int)(off - 1 - j)) >> (sizeof(int) * 8 - 1);
+ res |= (c ^ pmac->c[i]) & cmask;
+ i += 1 & cmask;
+ }
+ maxpad -= SHA256_DIGEST_LENGTH;
+
+ res = 0 - ((0 - res) >> (sizeof(res) * 8 - 1));
+ ret &= (int)~res;
+ }
+# else
+ for (res = 0, i = 0; i < SHA256_DIGEST_LENGTH; i++)
+ res |= out[i] ^ pmac->c[i];
+ res = 0 - ((0 - res) >> (sizeof(res) * 8 - 1));
+ ret &= (int)~res;
+
+ /* verify padding */
+ pad = (pad & ~res) | (maxpad & res);
+ out = out + len - 1 - pad;
+ for (res = 0, i = 0; i < pad; i++)
+ res |= out[i] ^ pad;
+
+ res = (0 - res) >> (sizeof(res) * 8 - 1);
+ ret &= (int)~res;
+# endif
+ return ret;
+ } else {
+ SHA256_Update(&key->md, out, len);
+ }
+ }
+
+ return 1;
+}
+
+static int aesni_cbc_hmac_sha256_ctrl(EVP_CIPHER_CTX *ctx, int type, int arg,
+ void *ptr)
+{
+ EVP_AES_HMAC_SHA256 *key = data(ctx);
+
+ switch (type) {
+ case EVP_CTRL_AEAD_SET_MAC_KEY:
+ {
+ unsigned int i;
+ unsigned char hmac_key[64];
+
+ memset(hmac_key, 0, sizeof(hmac_key));
+
+ if (arg > (int)sizeof(hmac_key)) {
+ SHA256_Init(&key->head);
+ SHA256_Update(&key->head, ptr, arg);
+ SHA256_Final(hmac_key, &key->head);
+ } else {
+ memcpy(hmac_key, ptr, arg);
+ }
+
+ for (i = 0; i < sizeof(hmac_key); i++)
+ hmac_key[i] ^= 0x36; /* ipad */
+ SHA256_Init(&key->head);
+ SHA256_Update(&key->head, hmac_key, sizeof(hmac_key));
+
+ for (i = 0; i < sizeof(hmac_key); i++)
+ hmac_key[i] ^= 0x36 ^ 0x5c; /* opad */
+ SHA256_Init(&key->tail);
+ SHA256_Update(&key->tail, hmac_key, sizeof(hmac_key));
+
+ OPENSSL_cleanse(hmac_key, sizeof(hmac_key));
+
+ return 1;
+ }
+ case EVP_CTRL_AEAD_TLS1_AAD:
+ {
+ unsigned char *p = ptr;
+ unsigned int len = p[arg - 2] << 8 | p[arg - 1];
+
+ if (arg != EVP_AEAD_TLS1_AAD_LEN)
+ return -1;
+
+ len = p[arg - 2] << 8 | p[arg - 1];
+
+ if (ctx->encrypt) {
+ key->payload_length = len;
+ if ((key->aux.tls_ver =
+ p[arg - 4] << 8 | p[arg - 3]) >= TLS1_1_VERSION) {
+ len -= AES_BLOCK_SIZE;
+ p[arg - 2] = len >> 8;
+ p[arg - 1] = len;
+ }
+ key->md = key->head;
+ SHA256_Update(&key->md, p, arg);
+
+ return (int)(((len + SHA256_DIGEST_LENGTH +
+ AES_BLOCK_SIZE) & -AES_BLOCK_SIZE)
+ - len);
+ } else {
+ memcpy(key->aux.tls_aad, ptr, arg);
+ key->payload_length = arg;
+
+ return SHA256_DIGEST_LENGTH;
+ }
+ }
+# if !defined(OPENSSL_NO_MULTIBLOCK) && EVP_CIPH_FLAG_TLS1_1_MULTIBLOCK
+ case EVP_CTRL_TLS1_1_MULTIBLOCK_MAX_BUFSIZE:
+ return (int)(5 + 16 + ((arg + 32 + 16) & -16));
+ case EVP_CTRL_TLS1_1_MULTIBLOCK_AAD:
+ {
+ EVP_CTRL_TLS1_1_MULTIBLOCK_PARAM *param =
+ (EVP_CTRL_TLS1_1_MULTIBLOCK_PARAM *) ptr;
+ unsigned int n4x = 1, x4;
+ unsigned int frag, last, packlen, inp_len;
+
+ if (arg < (int)sizeof(EVP_CTRL_TLS1_1_MULTIBLOCK_PARAM))
+ return -1;
+
+ inp_len = param->inp[11] << 8 | param->inp[12];
+
+ if (ctx->encrypt) {
+ if ((param->inp[9] << 8 | param->inp[10]) < TLS1_1_VERSION)
+ return -1;
+
+ if (inp_len) {
+ if (inp_len < 4096)
+ return 0; /* too short */
+
+ if (inp_len >= 8192 && OPENSSL_ia32cap_P[2] & (1 << 5))
+ n4x = 2; /* AVX2 */
+ } else if ((n4x = param->interleave / 4) && n4x <= 2)
+ inp_len = param->len;
+ else
+ return -1;
+
+ key->md = key->head;
+ SHA256_Update(&key->md, param->inp, 13);
+
+ x4 = 4 * n4x;
+ n4x += 1;
+
+ frag = inp_len >> n4x;
+ last = inp_len + frag - (frag << n4x);
+ if (last > frag && ((last + 13 + 9) % 64 < (x4 - 1))) {
+ frag++;
+ last -= x4 - 1;
+ }
+
+ packlen = 5 + 16 + ((frag + 32 + 16) & -16);
+ packlen = (packlen << n4x) - packlen;
+ packlen += 5 + 16 + ((last + 32 + 16) & -16);
+
+ param->interleave = x4;
+
+ return (int)packlen;
+ } else
+ return -1; /* not yet */
+ }
+ case EVP_CTRL_TLS1_1_MULTIBLOCK_ENCRYPT:
+ {
+ EVP_CTRL_TLS1_1_MULTIBLOCK_PARAM *param =
+ (EVP_CTRL_TLS1_1_MULTIBLOCK_PARAM *) ptr;
+
+ return (int)tls1_1_multi_block_encrypt(key, param->out,
+ param->inp, param->len,
+ param->interleave / 4);
+ }
+ case EVP_CTRL_TLS1_1_MULTIBLOCK_DECRYPT:
+# endif
+ default:
+ return -1;
+ }
+}
+
+static EVP_CIPHER aesni_128_cbc_hmac_sha256_cipher = {
+# ifdef NID_aes_128_cbc_hmac_sha256
+ NID_aes_128_cbc_hmac_sha256,
+# else
+ NID_undef,
+# endif
+ 16, 16, 16,
+ EVP_CIPH_CBC_MODE | EVP_CIPH_FLAG_DEFAULT_ASN1 |
+ EVP_CIPH_FLAG_AEAD_CIPHER | EVP_CIPH_FLAG_TLS1_1_MULTIBLOCK,
+ aesni_cbc_hmac_sha256_init_key,
+ aesni_cbc_hmac_sha256_cipher,
+ NULL,
+ sizeof(EVP_AES_HMAC_SHA256),
+ EVP_CIPH_FLAG_DEFAULT_ASN1 ? NULL : EVP_CIPHER_set_asn1_iv,
+ EVP_CIPH_FLAG_DEFAULT_ASN1 ? NULL : EVP_CIPHER_get_asn1_iv,
+ aesni_cbc_hmac_sha256_ctrl,
+ NULL
+};
+
+static EVP_CIPHER aesni_256_cbc_hmac_sha256_cipher = {
+# ifdef NID_aes_256_cbc_hmac_sha256
+ NID_aes_256_cbc_hmac_sha256,
+# else
+ NID_undef,
+# endif
+ 16, 32, 16,
+ EVP_CIPH_CBC_MODE | EVP_CIPH_FLAG_DEFAULT_ASN1 |
+ EVP_CIPH_FLAG_AEAD_CIPHER | EVP_CIPH_FLAG_TLS1_1_MULTIBLOCK,
+ aesni_cbc_hmac_sha256_init_key,
+ aesni_cbc_hmac_sha256_cipher,
+ NULL,
+ sizeof(EVP_AES_HMAC_SHA256),
+ EVP_CIPH_FLAG_DEFAULT_ASN1 ? NULL : EVP_CIPHER_set_asn1_iv,
+ EVP_CIPH_FLAG_DEFAULT_ASN1 ? NULL : EVP_CIPHER_get_asn1_iv,
+ aesni_cbc_hmac_sha256_ctrl,
+ NULL
+};
+
+const EVP_CIPHER *EVP_aes_128_cbc_hmac_sha256(void)
+{
+ return ((OPENSSL_ia32cap_P[1] & AESNI_CAPABLE) &&
+ aesni_cbc_sha256_enc(NULL, NULL, 0, NULL, NULL, NULL, NULL) ?
+ &aesni_128_cbc_hmac_sha256_cipher : NULL);
+}
+
+const EVP_CIPHER *EVP_aes_256_cbc_hmac_sha256(void)
+{
+ return ((OPENSSL_ia32cap_P[1] & AESNI_CAPABLE) &&
+ aesni_cbc_sha256_enc(NULL, NULL, 0, NULL, NULL, NULL, NULL) ?
+ &aesni_256_cbc_hmac_sha256_cipher : NULL);
+}
+# else
+const EVP_CIPHER *EVP_aes_128_cbc_hmac_sha256(void)
+{
+ return NULL;
+}
+
+const EVP_CIPHER *EVP_aes_256_cbc_hmac_sha256(void)
+{
+ return NULL;
+}
+# endif
+#endif
diff --git a/crypto/openssl/crypto/evp/e_camellia.c b/crypto/openssl/crypto/evp/e_camellia.c
index 27bc489..f9c8401 100644
--- a/crypto/openssl/crypto/evp/e_camellia.c
+++ b/crypto/openssl/crypto/evp/e_camellia.c
@@ -61,6 +61,7 @@
# include <assert.h>
# include <openssl/camellia.h>
# include "evp_locl.h"
+# include "modes_lcl.h"
static int camellia_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key,
const unsigned char *iv, int enc);
@@ -68,48 +69,322 @@ static int camellia_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key,
/* Camellia subkey Structure */
typedef struct {
CAMELLIA_KEY ks;
+ block128_f block;
+ union {
+ cbc128_f cbc;
+ ctr128_f ctr;
+ } stream;
} EVP_CAMELLIA_KEY;
+# define MAXBITCHUNK ((size_t)1<<(sizeof(size_t)*8-4))
+
/* Attribute operation for Camellia */
# define data(ctx) EVP_C_DATA(EVP_CAMELLIA_KEY,ctx)
-IMPLEMENT_BLOCK_CIPHER(camellia_128, ks, Camellia, EVP_CAMELLIA_KEY,
- NID_camellia_128, 16, 16, 16, 128,
- 0, camellia_init_key, NULL,
- EVP_CIPHER_set_asn1_iv, EVP_CIPHER_get_asn1_iv, NULL)
- IMPLEMENT_BLOCK_CIPHER(camellia_192, ks, Camellia, EVP_CAMELLIA_KEY,
- NID_camellia_192, 16, 24, 16, 128,
- 0, camellia_init_key, NULL,
- EVP_CIPHER_set_asn1_iv, EVP_CIPHER_get_asn1_iv, NULL)
- IMPLEMENT_BLOCK_CIPHER(camellia_256, ks, Camellia, EVP_CAMELLIA_KEY,
- NID_camellia_256, 16, 32, 16, 128,
- 0, camellia_init_key, NULL,
- EVP_CIPHER_set_asn1_iv, EVP_CIPHER_get_asn1_iv, NULL)
-# define IMPLEMENT_CAMELLIA_CFBR(ksize,cbits) IMPLEMENT_CFBR(camellia,Camellia,EVP_CAMELLIA_KEY,ks,ksize,cbits,16)
- IMPLEMENT_CAMELLIA_CFBR(128, 1)
- IMPLEMENT_CAMELLIA_CFBR(192, 1)
- IMPLEMENT_CAMELLIA_CFBR(256, 1)
-
- IMPLEMENT_CAMELLIA_CFBR(128, 8)
- IMPLEMENT_CAMELLIA_CFBR(192, 8)
- IMPLEMENT_CAMELLIA_CFBR(256, 8)
+# if defined(AES_ASM) && (defined(__sparc) || defined(__sparc__))
+/* ---------^^^ this is not a typo, just a way to detect that
+ * assembler support was in general requested... */
+# include "sparc_arch.h"
+
+extern unsigned int OPENSSL_sparcv9cap_P[];
+
+# define SPARC_CMLL_CAPABLE (OPENSSL_sparcv9cap_P[1] & CFR_CAMELLIA)
+
+void cmll_t4_set_key(const unsigned char *key, int bits, CAMELLIA_KEY *ks);
+void cmll_t4_encrypt(const unsigned char *in, unsigned char *out,
+ const CAMELLIA_KEY *key);
+void cmll_t4_decrypt(const unsigned char *in, unsigned char *out,
+ const CAMELLIA_KEY *key);
+
+void cmll128_t4_cbc_encrypt(const unsigned char *in, unsigned char *out,
+ size_t len, const CAMELLIA_KEY *key,
+ unsigned char *ivec);
+void cmll128_t4_cbc_decrypt(const unsigned char *in, unsigned char *out,
+ size_t len, const CAMELLIA_KEY *key,
+ unsigned char *ivec);
+void cmll256_t4_cbc_encrypt(const unsigned char *in, unsigned char *out,
+ size_t len, const CAMELLIA_KEY *key,
+ unsigned char *ivec);
+void cmll256_t4_cbc_decrypt(const unsigned char *in, unsigned char *out,
+ size_t len, const CAMELLIA_KEY *key,
+ unsigned char *ivec);
+void cmll128_t4_ctr32_encrypt(const unsigned char *in, unsigned char *out,
+ size_t blocks, const CAMELLIA_KEY *key,
+ unsigned char *ivec);
+void cmll256_t4_ctr32_encrypt(const unsigned char *in, unsigned char *out,
+ size_t blocks, const CAMELLIA_KEY *key,
+ unsigned char *ivec);
+
+static int cmll_t4_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key,
+ const unsigned char *iv, int enc)
+{
+ int ret, mode, bits;
+ EVP_CAMELLIA_KEY *dat = (EVP_CAMELLIA_KEY *) ctx->cipher_data;
+
+ mode = ctx->cipher->flags & EVP_CIPH_MODE;
+ bits = ctx->key_len * 8;
+
+ cmll_t4_set_key(key, bits, &dat->ks);
+
+ if ((mode == EVP_CIPH_ECB_MODE || mode == EVP_CIPH_CBC_MODE)
+ && !enc) {
+ ret = 0;
+ dat->block = (block128_f) cmll_t4_decrypt;
+ switch (bits) {
+ case 128:
+ dat->stream.cbc = mode == EVP_CIPH_CBC_MODE ?
+ (cbc128_f) cmll128_t4_cbc_decrypt : NULL;
+ break;
+ case 192:
+ case 256:
+ dat->stream.cbc = mode == EVP_CIPH_CBC_MODE ?
+ (cbc128_f) cmll256_t4_cbc_decrypt : NULL;
+ break;
+ default:
+ ret = -1;
+ }
+ } else {
+ ret = 0;
+ dat->block = (block128_f) cmll_t4_encrypt;
+ switch (bits) {
+ case 128:
+ if (mode == EVP_CIPH_CBC_MODE)
+ dat->stream.cbc = (cbc128_f) cmll128_t4_cbc_encrypt;
+ else if (mode == EVP_CIPH_CTR_MODE)
+ dat->stream.ctr = (ctr128_f) cmll128_t4_ctr32_encrypt;
+ else
+ dat->stream.cbc = NULL;
+ break;
+ case 192:
+ case 256:
+ if (mode == EVP_CIPH_CBC_MODE)
+ dat->stream.cbc = (cbc128_f) cmll256_t4_cbc_encrypt;
+ else if (mode == EVP_CIPH_CTR_MODE)
+ dat->stream.ctr = (ctr128_f) cmll256_t4_ctr32_encrypt;
+ else
+ dat->stream.cbc = NULL;
+ break;
+ default:
+ ret = -1;
+ }
+ }
+
+ if (ret < 0) {
+ EVPerr(EVP_F_CMLL_T4_INIT_KEY, EVP_R_CAMELLIA_KEY_SETUP_FAILED);
+ return 0;
+ }
+
+ return 1;
+}
+
+# define cmll_t4_cbc_cipher camellia_cbc_cipher
+static int cmll_t4_cbc_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
+ const unsigned char *in, size_t len);
+
+# define cmll_t4_ecb_cipher camellia_ecb_cipher
+static int cmll_t4_ecb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
+ const unsigned char *in, size_t len);
+# define cmll_t4_ofb_cipher camellia_ofb_cipher
+static int cmll_t4_ofb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
+ const unsigned char *in, size_t len);
+
+# define cmll_t4_cfb_cipher camellia_cfb_cipher
+static int cmll_t4_cfb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
+ const unsigned char *in, size_t len);
+
+# define cmll_t4_cfb8_cipher camellia_cfb8_cipher
+static int cmll_t4_cfb8_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
+ const unsigned char *in, size_t len);
+
+# define cmll_t4_cfb1_cipher camellia_cfb1_cipher
+static int cmll_t4_cfb1_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
+ const unsigned char *in, size_t len);
+
+# define cmll_t4_ctr_cipher camellia_ctr_cipher
+static int cmll_t4_ctr_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
+ const unsigned char *in, size_t len);
+
+# define BLOCK_CIPHER_generic(nid,keylen,blocksize,ivlen,nmode,mode,MODE,flags) \
+static const EVP_CIPHER cmll_t4_##keylen##_##mode = { \
+ nid##_##keylen##_##nmode,blocksize,keylen/8,ivlen, \
+ flags|EVP_CIPH_##MODE##_MODE, \
+ cmll_t4_init_key, \
+ cmll_t4_##mode##_cipher, \
+ NULL, \
+ sizeof(EVP_CAMELLIA_KEY), \
+ NULL,NULL,NULL,NULL }; \
+static const EVP_CIPHER camellia_##keylen##_##mode = { \
+ nid##_##keylen##_##nmode,blocksize, \
+ keylen/8,ivlen, \
+ flags|EVP_CIPH_##MODE##_MODE, \
+ camellia_init_key, \
+ camellia_##mode##_cipher, \
+ NULL, \
+ sizeof(EVP_CAMELLIA_KEY), \
+ NULL,NULL,NULL,NULL }; \
+const EVP_CIPHER *EVP_camellia_##keylen##_##mode(void) \
+{ return SPARC_CMLL_CAPABLE?&cmll_t4_##keylen##_##mode:&camellia_##keylen##_##mode; }
+
+# else
+
+# define BLOCK_CIPHER_generic(nid,keylen,blocksize,ivlen,nmode,mode,MODE,flags) \
+static const EVP_CIPHER camellia_##keylen##_##mode = { \
+ nid##_##keylen##_##nmode,blocksize,keylen/8,ivlen, \
+ flags|EVP_CIPH_##MODE##_MODE, \
+ camellia_init_key, \
+ camellia_##mode##_cipher, \
+ NULL, \
+ sizeof(EVP_CAMELLIA_KEY), \
+ NULL,NULL,NULL,NULL }; \
+const EVP_CIPHER *EVP_camellia_##keylen##_##mode(void) \
+{ return &camellia_##keylen##_##mode; }
+
+# endif
+
+# define BLOCK_CIPHER_generic_pack(nid,keylen,flags) \
+ BLOCK_CIPHER_generic(nid,keylen,16,16,cbc,cbc,CBC,flags|EVP_CIPH_FLAG_DEFAULT_ASN1) \
+ BLOCK_CIPHER_generic(nid,keylen,16,0,ecb,ecb,ECB,flags|EVP_CIPH_FLAG_DEFAULT_ASN1) \
+ BLOCK_CIPHER_generic(nid,keylen,1,16,ofb128,ofb,OFB,flags|EVP_CIPH_FLAG_DEFAULT_ASN1) \
+ BLOCK_CIPHER_generic(nid,keylen,1,16,cfb128,cfb,CFB,flags|EVP_CIPH_FLAG_DEFAULT_ASN1) \
+ BLOCK_CIPHER_generic(nid,keylen,1,16,cfb1,cfb1,CFB,flags) \
+ BLOCK_CIPHER_generic(nid,keylen,1,16,cfb8,cfb8,CFB,flags)
+# if 0 /* not yet, missing NID */
+BLOCK_CIPHER_generic(nid, keylen, 1, 16, ctr, ctr, CTR, flags)
+# endif
/* The subkey for Camellia is generated. */
static int camellia_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key,
const unsigned char *iv, int enc)
{
- int ret;
-
- ret = Camellia_set_key(key, ctx->key_len * 8, ctx->cipher_data);
+ int ret, mode;
+ EVP_CAMELLIA_KEY *dat = (EVP_CAMELLIA_KEY *) ctx->cipher_data;
+ ret = Camellia_set_key(key, ctx->key_len * 8, &dat->ks);
if (ret < 0) {
EVPerr(EVP_F_CAMELLIA_INIT_KEY, EVP_R_CAMELLIA_KEY_SETUP_FAILED);
return 0;
}
+ mode = ctx->cipher->flags & EVP_CIPH_MODE;
+ if ((mode == EVP_CIPH_ECB_MODE || mode == EVP_CIPH_CBC_MODE)
+ && !enc) {
+ dat->block = (block128_f) Camellia_decrypt;
+ dat->stream.cbc = mode == EVP_CIPH_CBC_MODE ?
+ (cbc128_f) Camellia_cbc_encrypt : NULL;
+ } else {
+ dat->block = (block128_f) Camellia_encrypt;
+ dat->stream.cbc = mode == EVP_CIPH_CBC_MODE ?
+ (cbc128_f) Camellia_cbc_encrypt : NULL;
+ }
+
return 1;
}
+static int camellia_cbc_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
+ const unsigned char *in, size_t len)
+{
+ EVP_CAMELLIA_KEY *dat = (EVP_CAMELLIA_KEY *) ctx->cipher_data;
+
+ if (dat->stream.cbc)
+ (*dat->stream.cbc) (in, out, len, &dat->ks, ctx->iv, ctx->encrypt);
+ else if (ctx->encrypt)
+ CRYPTO_cbc128_encrypt(in, out, len, &dat->ks, ctx->iv, dat->block);
+ else
+ CRYPTO_cbc128_decrypt(in, out, len, &dat->ks, ctx->iv, dat->block);
+
+ return 1;
+}
+
+static int camellia_ecb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
+ const unsigned char *in, size_t len)
+{
+ size_t bl = ctx->cipher->block_size;
+ size_t i;
+ EVP_CAMELLIA_KEY *dat = (EVP_CAMELLIA_KEY *) ctx->cipher_data;
+
+ if (len < bl)
+ return 1;
+
+ for (i = 0, len -= bl; i <= len; i += bl)
+ (*dat->block) (in + i, out + i, &dat->ks);
+
+ return 1;
+}
+
+static int camellia_ofb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
+ const unsigned char *in, size_t len)
+{
+ EVP_CAMELLIA_KEY *dat = (EVP_CAMELLIA_KEY *) ctx->cipher_data;
+
+ CRYPTO_ofb128_encrypt(in, out, len, &dat->ks,
+ ctx->iv, &ctx->num, dat->block);
+ return 1;
+}
+
+static int camellia_cfb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
+ const unsigned char *in, size_t len)
+{
+ EVP_CAMELLIA_KEY *dat = (EVP_CAMELLIA_KEY *) ctx->cipher_data;
+
+ CRYPTO_cfb128_encrypt(in, out, len, &dat->ks,
+ ctx->iv, &ctx->num, ctx->encrypt, dat->block);
+ return 1;
+}
+
+static int camellia_cfb8_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
+ const unsigned char *in, size_t len)
+{
+ EVP_CAMELLIA_KEY *dat = (EVP_CAMELLIA_KEY *) ctx->cipher_data;
+
+ CRYPTO_cfb128_8_encrypt(in, out, len, &dat->ks,
+ ctx->iv, &ctx->num, ctx->encrypt, dat->block);
+ return 1;
+}
+
+static int camellia_cfb1_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
+ const unsigned char *in, size_t len)
+{
+ EVP_CAMELLIA_KEY *dat = (EVP_CAMELLIA_KEY *) ctx->cipher_data;
+
+ if (ctx->flags & EVP_CIPH_FLAG_LENGTH_BITS) {
+ CRYPTO_cfb128_1_encrypt(in, out, len, &dat->ks,
+ ctx->iv, &ctx->num, ctx->encrypt, dat->block);
+ return 1;
+ }
+
+ while (len >= MAXBITCHUNK) {
+ CRYPTO_cfb128_1_encrypt(in, out, MAXBITCHUNK * 8, &dat->ks,
+ ctx->iv, &ctx->num, ctx->encrypt, dat->block);
+ len -= MAXBITCHUNK;
+ }
+ if (len)
+ CRYPTO_cfb128_1_encrypt(in, out, len * 8, &dat->ks,
+ ctx->iv, &ctx->num, ctx->encrypt, dat->block);
+
+ return 1;
+}
+
+# if 0 /* not yet, missing NID */
+static int camellia_ctr_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
+ const unsigned char *in, size_t len)
+{
+ unsigned int num = ctx->num;
+ EVP_CAMELLIA_KEY *dat = (EVP_CAMELLIA_KEY *) ctx->cipher_data;
+
+ if (dat->stream.ctr)
+ CRYPTO_ctr128_encrypt_ctr32(in, out, len, &dat->ks,
+ ctx->iv, ctx->buf, &num, dat->stream.ctr);
+ else
+ CRYPTO_ctr128_encrypt(in, out, len, &dat->ks,
+ ctx->iv, ctx->buf, &num, dat->block);
+ ctx->num = (size_t)num;
+ return 1;
+}
+# endif
+
+BLOCK_CIPHER_generic_pack(NID_camellia, 128, 0)
+ BLOCK_CIPHER_generic_pack(NID_camellia, 192, 0)
+ BLOCK_CIPHER_generic_pack(NID_camellia, 256, 0)
#else
# ifdef PEDANTIC
diff --git a/crypto/openssl/crypto/evp/e_des.c b/crypto/openssl/crypto/evp/e_des.c
index ea1a4c4..aae13a6 100644
--- a/crypto/openssl/crypto/evp/e_des.c
+++ b/crypto/openssl/crypto/evp/e_des.c
@@ -65,6 +65,32 @@
# include <openssl/des.h>
# include <openssl/rand.h>
+typedef struct {
+ union {
+ double align;
+ DES_key_schedule ks;
+ } ks;
+ union {
+ void (*cbc) (const void *, void *, size_t, const void *, void *);
+ } stream;
+} EVP_DES_KEY;
+
+# if defined(AES_ASM) && (defined(__sparc) || defined(__sparc__))
+/* ---------^^^ this is not a typo, just a way to detect that
+ * assembler support was in general requested... */
+# include "sparc_arch.h"
+
+extern unsigned int OPENSSL_sparcv9cap_P[];
+
+# define SPARC_DES_CAPABLE (OPENSSL_sparcv9cap_P[1] & CFR_DES)
+
+void des_t4_key_expand(const void *key, DES_key_schedule *ks);
+void des_t4_cbc_encrypt(const void *inp, void *out, size_t len,
+ DES_key_schedule *ks, unsigned char iv[8]);
+void des_t4_cbc_decrypt(const void *inp, void *out, size_t len,
+ DES_key_schedule *ks, unsigned char iv[8]);
+# endif
+
static int des_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key,
const unsigned char *iv, int enc);
static int des_ctrl(EVP_CIPHER_CTX *c, int type, int arg, void *ptr);
@@ -102,6 +128,12 @@ static int des_ofb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
static int des_cbc_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
const unsigned char *in, size_t inl)
{
+ EVP_DES_KEY *dat = (EVP_DES_KEY *) ctx->cipher_data;
+
+ if (dat->stream.cbc) {
+ (*dat->stream.cbc) (in, out, inl, &dat->ks.ks, ctx->iv);
+ return 1;
+ }
while (inl >= EVP_MAXCHUNK) {
DES_ncbc_encrypt(in, out, (long)EVP_MAXCHUNK, ctx->cipher_data,
(DES_cblock *)ctx->iv, ctx->encrypt);
@@ -179,16 +211,15 @@ static int des_cfb8_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
return 1;
}
-BLOCK_CIPHER_defs(des, DES_key_schedule, NID_des, 8, 8, 8, 64,
+BLOCK_CIPHER_defs(des, EVP_DES_KEY, NID_des, 8, 8, 8, 64,
EVP_CIPH_RAND_KEY, des_init_key, NULL,
EVP_CIPHER_set_asn1_iv, EVP_CIPHER_get_asn1_iv, des_ctrl)
+ BLOCK_CIPHER_def_cfb(des, EVP_DES_KEY, NID_des, 8, 8, 1,
+ EVP_CIPH_RAND_KEY, des_init_key, NULL,
+ EVP_CIPHER_set_asn1_iv, EVP_CIPHER_get_asn1_iv, des_ctrl)
-BLOCK_CIPHER_def_cfb(des, DES_key_schedule, NID_des, 8, 8, 1,
- EVP_CIPH_RAND_KEY, des_init_key, NULL,
- EVP_CIPHER_set_asn1_iv, EVP_CIPHER_get_asn1_iv, des_ctrl)
-
-BLOCK_CIPHER_def_cfb(des, DES_key_schedule, NID_des, 8, 8, 8,
+ BLOCK_CIPHER_def_cfb(des, EVP_DES_KEY, NID_des, 8, 8, 8,
EVP_CIPH_RAND_KEY, des_init_key, NULL,
EVP_CIPHER_set_asn1_iv, EVP_CIPHER_get_asn1_iv, des_ctrl)
@@ -196,8 +227,22 @@ static int des_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key,
const unsigned char *iv, int enc)
{
DES_cblock *deskey = (DES_cblock *)key;
+ EVP_DES_KEY *dat = (EVP_DES_KEY *) ctx->cipher_data;
+
+ dat->stream.cbc = NULL;
+# if defined(SPARC_DES_CAPABLE)
+ if (SPARC_DES_CAPABLE) {
+ int mode = ctx->cipher->flags & EVP_CIPH_MODE;
+
+ if (mode == EVP_CIPH_CBC_MODE) {
+ des_t4_key_expand(key, &dat->ks.ks);
+ dat->stream.cbc = enc ? des_t4_cbc_encrypt : des_t4_cbc_decrypt;
+ return 1;
+ }
+ }
+# endif
# ifdef EVP_CHECK_DES_KEY
- if (DES_set_key_checked(deskey, ctx->cipher_data) != 0)
+ if (DES_set_key_checked(deskey, dat->ks.ks) != 0)
return 0;
# else
DES_set_key_unchecked(deskey, ctx->cipher_data);
diff --git a/crypto/openssl/crypto/evp/e_des3.c b/crypto/openssl/crypto/evp/e_des3.c
index 07a5aca..96f272e 100644
--- a/crypto/openssl/crypto/evp/e_des3.c
+++ b/crypto/openssl/crypto/evp/e_des3.c
@@ -65,7 +65,38 @@
# include <openssl/des.h>
# include <openssl/rand.h>
-# ifndef OPENSSL_FIPS
+/* Block use of implementations in FIPS mode */
+# undef EVP_CIPH_FLAG_FIPS
+# define EVP_CIPH_FLAG_FIPS 0
+
+typedef struct {
+ union {
+ double align;
+ DES_key_schedule ks[3];
+ } ks;
+ union {
+ void (*cbc) (const void *, void *, size_t, const void *, void *);
+ } stream;
+} DES_EDE_KEY;
+# define ks1 ks.ks[0]
+# define ks2 ks.ks[1]
+# define ks3 ks.ks[2]
+
+# if defined(AES_ASM) && (defined(__sparc) || defined(__sparc__))
+/* ---------^^^ this is not a typo, just a way to detect that
+ * assembler support was in general requested... */
+# include "sparc_arch.h"
+
+extern unsigned int OPENSSL_sparcv9cap_P[];
+
+# define SPARC_DES_CAPABLE (OPENSSL_sparcv9cap_P[1] & CFR_DES)
+
+void des_t4_key_expand(const void *key, DES_key_schedule *ks);
+void des_t4_ede3_cbc_encrypt(const void *inp, void *out, size_t len,
+ DES_key_schedule *ks, unsigned char iv[8]);
+void des_t4_ede3_cbc_decrypt(const void *inp, void *out, size_t len,
+ DES_key_schedule *ks, unsigned char iv[8]);
+# endif
static int des_ede_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key,
const unsigned char *iv, int enc);
@@ -75,13 +106,7 @@ static int des_ede3_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key,
static int des3_ctrl(EVP_CIPHER_CTX *c, int type, int arg, void *ptr);
-typedef struct {
- DES_key_schedule ks1; /* key schedule */
- DES_key_schedule ks2; /* key schedule (for ede) */
- DES_key_schedule ks3; /* key schedule (for ede3) */
-} DES_EDE_KEY;
-
-# define data(ctx) ((DES_EDE_KEY *)(ctx)->cipher_data)
+# define data(ctx) ((DES_EDE_KEY *)(ctx)->cipher_data)
/*
* Because of various casts and different args can't use
@@ -123,7 +148,9 @@ static int des_ede_ofb_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
static int des_ede_cbc_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
const unsigned char *in, size_t inl)
{
-# ifdef KSSL_DEBUG
+ DES_EDE_KEY *dat = data(ctx);
+
+# ifdef KSSL_DEBUG
{
int i;
fprintf(stderr, "des_ede_cbc_cipher(ctx=%p, buflen=%d)\n", ctx,
@@ -133,21 +160,24 @@ static int des_ede_cbc_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
fprintf(stderr, "%02X", ctx->iv[i]);
fprintf(stderr, "\n");
}
-# endif /* KSSL_DEBUG */
+# endif /* KSSL_DEBUG */
+ if (dat->stream.cbc) {
+ (*dat->stream.cbc) (in, out, inl, &dat->ks, ctx->iv);
+ return 1;
+ }
+
while (inl >= EVP_MAXCHUNK) {
DES_ede3_cbc_encrypt(in, out, (long)EVP_MAXCHUNK,
- &data(ctx)->ks1, &data(ctx)->ks2,
- &data(ctx)->ks3, (DES_cblock *)ctx->iv,
- ctx->encrypt);
+ &dat->ks1, &dat->ks2, &dat->ks3,
+ (DES_cblock *)ctx->iv, ctx->encrypt);
inl -= EVP_MAXCHUNK;
in += EVP_MAXCHUNK;
out += EVP_MAXCHUNK;
}
if (inl)
DES_ede3_cbc_encrypt(in, out, (long)inl,
- &data(ctx)->ks1, &data(ctx)->ks2,
- &data(ctx)->ks3, (DES_cblock *)ctx->iv,
- ctx->encrypt);
+ &dat->ks1, &dat->ks2, &dat->ks3,
+ (DES_cblock *)ctx->iv, ctx->encrypt);
return 1;
}
@@ -215,39 +245,57 @@ static int des_ede3_cfb8_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
}
BLOCK_CIPHER_defs(des_ede, DES_EDE_KEY, NID_des_ede, 8, 16, 8, 64,
- EVP_CIPH_RAND_KEY, des_ede_init_key, NULL,
- EVP_CIPHER_set_asn1_iv, EVP_CIPHER_get_asn1_iv, des3_ctrl)
-# define des_ede3_cfb64_cipher des_ede_cfb64_cipher
-# define des_ede3_ofb_cipher des_ede_ofb_cipher
-# define des_ede3_cbc_cipher des_ede_cbc_cipher
-# define des_ede3_ecb_cipher des_ede_ecb_cipher
+ EVP_CIPH_RAND_KEY | EVP_CIPH_FLAG_DEFAULT_ASN1,
+ des_ede_init_key, NULL, NULL, NULL, des3_ctrl)
+# define des_ede3_cfb64_cipher des_ede_cfb64_cipher
+# define des_ede3_ofb_cipher des_ede_ofb_cipher
+# define des_ede3_cbc_cipher des_ede_cbc_cipher
+# define des_ede3_ecb_cipher des_ede_ecb_cipher
BLOCK_CIPHER_defs(des_ede3, DES_EDE_KEY, NID_des_ede3, 8, 24, 8, 64,
- EVP_CIPH_RAND_KEY, des_ede3_init_key, NULL,
- EVP_CIPHER_set_asn1_iv, EVP_CIPHER_get_asn1_iv, des3_ctrl)
+ EVP_CIPH_RAND_KEY | EVP_CIPH_FLAG_FIPS |
+ EVP_CIPH_FLAG_DEFAULT_ASN1, des_ede3_init_key, NULL, NULL, NULL,
+ des3_ctrl)
BLOCK_CIPHER_def_cfb(des_ede3, DES_EDE_KEY, NID_des_ede3, 24, 8, 1,
- EVP_CIPH_RAND_KEY, des_ede3_init_key, NULL,
- EVP_CIPHER_set_asn1_iv,
- EVP_CIPHER_get_asn1_iv, des3_ctrl)
+ EVP_CIPH_RAND_KEY | EVP_CIPH_FLAG_FIPS |
+ EVP_CIPH_FLAG_DEFAULT_ASN1, des_ede3_init_key, NULL, NULL,
+ NULL, des3_ctrl)
BLOCK_CIPHER_def_cfb(des_ede3, DES_EDE_KEY, NID_des_ede3, 24, 8, 8,
- EVP_CIPH_RAND_KEY, des_ede3_init_key, NULL,
- EVP_CIPHER_set_asn1_iv,
- EVP_CIPHER_get_asn1_iv, des3_ctrl)
+ EVP_CIPH_RAND_KEY | EVP_CIPH_FLAG_FIPS |
+ EVP_CIPH_FLAG_DEFAULT_ASN1, des_ede3_init_key, NULL, NULL,
+ NULL, des3_ctrl)
static int des_ede_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key,
const unsigned char *iv, int enc)
{
DES_cblock *deskey = (DES_cblock *)key;
-# ifdef EVP_CHECK_DES_KEY
- if (DES_set_key_checked(&deskey[0], &data(ctx)->ks1)
- ! !DES_set_key_checked(&deskey[1], &data(ctx)->ks2))
+ DES_EDE_KEY *dat = data(ctx);
+
+ dat->stream.cbc = NULL;
+# if defined(SPARC_DES_CAPABLE)
+ if (SPARC_DES_CAPABLE) {
+ int mode = ctx->cipher->flags & EVP_CIPH_MODE;
+
+ if (mode == EVP_CIPH_CBC_MODE) {
+ des_t4_key_expand(&deskey[0], &dat->ks1);
+ des_t4_key_expand(&deskey[1], &dat->ks2);
+ memcpy(&dat->ks3, &dat->ks1, sizeof(dat->ks1));
+ dat->stream.cbc = enc ? des_t4_ede3_cbc_encrypt :
+ des_t4_ede3_cbc_decrypt;
+ return 1;
+ }
+ }
+# endif
+# ifdef EVP_CHECK_DES_KEY
+ if (DES_set_key_checked(&deskey[0], &dat->ks1)
+ ! !DES_set_key_checked(&deskey[1], &dat->ks2))
return 0;
-# else
- DES_set_key_unchecked(&deskey[0], &data(ctx)->ks1);
- DES_set_key_unchecked(&deskey[1], &data(ctx)->ks2);
-# endif
- memcpy(&data(ctx)->ks3, &data(ctx)->ks1, sizeof(data(ctx)->ks1));
+# else
+ DES_set_key_unchecked(&deskey[0], &dat->ks1);
+ DES_set_key_unchecked(&deskey[1], &dat->ks2);
+# endif
+ memcpy(&dat->ks3, &dat->ks1, sizeof(dat->ks1));
return 1;
}
@@ -255,7 +303,9 @@ static int des_ede3_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key,
const unsigned char *iv, int enc)
{
DES_cblock *deskey = (DES_cblock *)key;
-# ifdef KSSL_DEBUG
+ DES_EDE_KEY *dat = data(ctx);
+
+# ifdef KSSL_DEBUG
{
int i;
fprintf(stderr, "des_ede3_init_key(ctx=%p)\n", ctx);
@@ -270,18 +320,33 @@ static int des_ede3_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key,
fprintf(stderr, "\n");
}
}
-# endif /* KSSL_DEBUG */
+# endif /* KSSL_DEBUG */
+
+ dat->stream.cbc = NULL;
+# if defined(SPARC_DES_CAPABLE)
+ if (SPARC_DES_CAPABLE) {
+ int mode = ctx->cipher->flags & EVP_CIPH_MODE;
-# ifdef EVP_CHECK_DES_KEY
- if (DES_set_key_checked(&deskey[0], &data(ctx)->ks1)
- || DES_set_key_checked(&deskey[1], &data(ctx)->ks2)
- || DES_set_key_checked(&deskey[2], &data(ctx)->ks3))
+ if (mode == EVP_CIPH_CBC_MODE) {
+ des_t4_key_expand(&deskey[0], &dat->ks1);
+ des_t4_key_expand(&deskey[1], &dat->ks2);
+ des_t4_key_expand(&deskey[2], &dat->ks3);
+ dat->stream.cbc = enc ? des_t4_ede3_cbc_encrypt :
+ des_t4_ede3_cbc_decrypt;
+ return 1;
+ }
+ }
+# endif
+# ifdef EVP_CHECK_DES_KEY
+ if (DES_set_key_checked(&deskey[0], &dat->ks1)
+ || DES_set_key_checked(&deskey[1], &dat->ks2)
+ || DES_set_key_checked(&deskey[2], &dat->ks3))
return 0;
-# else
- DES_set_key_unchecked(&deskey[0], &data(ctx)->ks1);
- DES_set_key_unchecked(&deskey[1], &data(ctx)->ks2);
- DES_set_key_unchecked(&deskey[2], &data(ctx)->ks3);
-# endif
+# else
+ DES_set_key_unchecked(&deskey[0], &dat->ks1);
+ DES_set_key_unchecked(&deskey[1], &dat->ks2);
+ DES_set_key_unchecked(&deskey[2], &dat->ks3);
+# endif
return 1;
}
@@ -315,5 +380,115 @@ const EVP_CIPHER *EVP_des_ede3(void)
{
return &des_ede3_ecb;
}
+
+# ifndef OPENSSL_NO_SHA
+
+# include <openssl/sha.h>
+
+static const unsigned char wrap_iv[8] =
+ { 0x4a, 0xdd, 0xa2, 0x2c, 0x79, 0xe8, 0x21, 0x05 };
+
+static int des_ede3_unwrap(EVP_CIPHER_CTX *ctx, unsigned char *out,
+ const unsigned char *in, size_t inl)
+{
+ unsigned char icv[8], iv[8], sha1tmp[SHA_DIGEST_LENGTH];
+ int rv = -1;
+ if (inl < 24)
+ return -1;
+ if (!out)
+ return inl - 16;
+ memcpy(ctx->iv, wrap_iv, 8);
+ /* Decrypt first block which will end up as icv */
+ des_ede_cbc_cipher(ctx, icv, in, 8);
+ /* Decrypt central blocks */
+ /*
+ * If decrypting in place move whole output along a block so the next
+ * des_ede_cbc_cipher is in place.
+ */
+ if (out == in) {
+ memmove(out, out + 8, inl - 8);
+ in -= 8;
+ }
+ des_ede_cbc_cipher(ctx, out, in + 8, inl - 16);
+ /* Decrypt final block which will be IV */
+ des_ede_cbc_cipher(ctx, iv, in + inl - 8, 8);
+ /* Reverse order of everything */
+ BUF_reverse(icv, NULL, 8);
+ BUF_reverse(out, NULL, inl - 16);
+ BUF_reverse(ctx->iv, iv, 8);
+ /* Decrypt again using new IV */
+ des_ede_cbc_cipher(ctx, out, out, inl - 16);
+ des_ede_cbc_cipher(ctx, icv, icv, 8);
+ /* Work out SHA1 hash of first portion */
+ SHA1(out, inl - 16, sha1tmp);
+
+ if (!CRYPTO_memcmp(sha1tmp, icv, 8))
+ rv = inl - 16;
+ OPENSSL_cleanse(icv, 8);
+ OPENSSL_cleanse(sha1tmp, SHA_DIGEST_LENGTH);
+ OPENSSL_cleanse(iv, 8);
+ OPENSSL_cleanse(ctx->iv, 8);
+ if (rv == -1)
+ OPENSSL_cleanse(out, inl - 16);
+
+ return rv;
+}
+
+static int des_ede3_wrap(EVP_CIPHER_CTX *ctx, unsigned char *out,
+ const unsigned char *in, size_t inl)
+{
+ unsigned char sha1tmp[SHA_DIGEST_LENGTH];
+ if (!out)
+ return inl + 16;
+ /* Copy input to output buffer + 8 so we have space for IV */
+ memmove(out + 8, in, inl);
+ /* Work out ICV */
+ SHA1(in, inl, sha1tmp);
+ memcpy(out + inl + 8, sha1tmp, 8);
+ OPENSSL_cleanse(sha1tmp, SHA_DIGEST_LENGTH);
+ /* Generate random IV */
+ if (RAND_bytes(ctx->iv, 8) <= 0)
+ return -1;
+ memcpy(out, ctx->iv, 8);
+ /* Encrypt everything after IV in place */
+ des_ede_cbc_cipher(ctx, out + 8, out + 8, inl + 8);
+ BUF_reverse(out, NULL, inl + 16);
+ memcpy(ctx->iv, wrap_iv, 8);
+ des_ede_cbc_cipher(ctx, out, out, inl + 16);
+ return inl + 16;
+}
+
+static int des_ede3_wrap_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
+ const unsigned char *in, size_t inl)
+{
+ /*
+ * Sanity check input length: we typically only wrap keys so EVP_MAXCHUNK
+ * is more than will ever be needed. Also input length must be a multiple
+ * of 8 bits.
+ */
+ if (inl >= EVP_MAXCHUNK || inl % 8)
+ return -1;
+ if (ctx->encrypt)
+ return des_ede3_wrap(ctx, out, in, inl);
+ else
+ return des_ede3_unwrap(ctx, out, in, inl);
+}
+
+static const EVP_CIPHER des3_wrap = {
+ NID_id_smime_alg_CMS3DESwrap,
+ 8, 24, 0,
+ EVP_CIPH_WRAP_MODE | EVP_CIPH_CUSTOM_IV | EVP_CIPH_FLAG_CUSTOM_CIPHER
+ | EVP_CIPH_FLAG_DEFAULT_ASN1,
+ des_ede3_init_key, des_ede3_wrap_cipher,
+ NULL,
+ sizeof(DES_EDE_KEY),
+ NULL, NULL, NULL, NULL
+};
+
+const EVP_CIPHER *EVP_des_ede3_wrap(void)
+{
+ return &des3_wrap;
+}
+
# endif
#endif
diff --git a/crypto/openssl/crypto/evp/e_null.c b/crypto/openssl/crypto/evp/e_null.c
index af90ce3..599fcb8 100644
--- a/crypto/openssl/crypto/evp/e_null.c
+++ b/crypto/openssl/crypto/evp/e_null.c
@@ -61,8 +61,6 @@
#include <openssl/evp.h>
#include <openssl/objects.h>
-#ifndef OPENSSL_FIPS
-
static int null_init_key(EVP_CIPHER_CTX *ctx, const unsigned char *key,
const unsigned char *iv, int enc);
static int null_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
@@ -100,4 +98,3 @@ static int null_cipher(EVP_CIPHER_CTX *ctx, unsigned char *out,
memcpy((char *)out, (const char *)in, inl);
return 1;
}
-#endif
diff --git a/crypto/openssl/crypto/evp/encode.c b/crypto/openssl/crypto/evp/encode.c
index 5c5988f..c361d1f 100644
--- a/crypto/openssl/crypto/evp/encode.c
+++ b/crypto/openssl/crypto/evp/encode.c
@@ -248,7 +248,7 @@ int EVP_DecodeUpdate(EVP_ENCODE_CTX *ctx, unsigned char *out, int *outl,
/* We parse the input data */
for (i = 0; i < inl; i++) {
- /* If the current line is > 80 characters, scream alot */
+ /* If the current line is > 80 characters, scream a lot */
if (ln >= 80) {
rv = -1;
goto end;
diff --git a/crypto/openssl/crypto/evp/evp.h b/crypto/openssl/crypto/evp/evp.h
index 6cf98ac..39ab793 100644
--- a/crypto/openssl/crypto/evp/evp.h
+++ b/crypto/openssl/crypto/evp/evp.h
@@ -113,6 +113,7 @@
# define EVP_PKEY_DSA3 NID_dsaWithSHA1
# define EVP_PKEY_DSA4 NID_dsaWithSHA1_2
# define EVP_PKEY_DH NID_dhKeyAgreement
+# define EVP_PKEY_DHX NID_dhpublicnumber
# define EVP_PKEY_EC NID_X9_62_id_ecPublicKey
# define EVP_PKEY_HMAC NID_hmac
# define EVP_PKEY_CMAC NID_cmac
@@ -345,6 +346,7 @@ struct evp_cipher_st {
# define EVP_CIPH_GCM_MODE 0x6
# define EVP_CIPH_CCM_MODE 0x7
# define EVP_CIPH_XTS_MODE 0x10001
+# define EVP_CIPH_WRAP_MODE 0x10002
# define EVP_CIPH_MODE 0xF0007
/* Set if variable length cipher */
# define EVP_CIPH_VARIABLE_LENGTH 0x8
@@ -375,6 +377,14 @@ struct evp_cipher_st {
*/
# define EVP_CIPH_FLAG_CUSTOM_CIPHER 0x100000
# define EVP_CIPH_FLAG_AEAD_CIPHER 0x200000
+# define EVP_CIPH_FLAG_TLS1_1_MULTIBLOCK 0x400000
+
+/*
+ * Cipher context flag to indicate we can handle wrap mode: if allowed in
+ * older applications it could overflow buffers.
+ */
+
+# define EVP_CIPHER_CTX_FLAG_WRAP_ALLOW 0x1
/* ctrl() values */
@@ -408,9 +418,21 @@ struct evp_cipher_st {
/* Set the GCM invocation field, decrypt only */
# define EVP_CTRL_GCM_SET_IV_INV 0x18
+# define EVP_CTRL_TLS1_1_MULTIBLOCK_AAD 0x19
+# define EVP_CTRL_TLS1_1_MULTIBLOCK_ENCRYPT 0x1a
+# define EVP_CTRL_TLS1_1_MULTIBLOCK_DECRYPT 0x1b
+# define EVP_CTRL_TLS1_1_MULTIBLOCK_MAX_BUFSIZE 0x1c
+
/* RFC 5246 defines additional data to be 13 bytes in length */
# define EVP_AEAD_TLS1_AAD_LEN 13
+typedef struct {
+ unsigned char *out;
+ const unsigned char *inp;
+ size_t len;
+ unsigned int interleave;
+} EVP_CTRL_TLS1_1_MULTIBLOCK_PARAM;
+
/* GCM TLS constants */
/* Length of fixed part of IV derived from PRF */
# define EVP_GCM_TLS_FIXED_IV_LEN 4
@@ -639,7 +661,8 @@ int EVP_DigestSignFinal(EVP_MD_CTX *ctx,
int EVP_DigestVerifyInit(EVP_MD_CTX *ctx, EVP_PKEY_CTX **pctx,
const EVP_MD *type, ENGINE *e, EVP_PKEY *pkey);
-int EVP_DigestVerifyFinal(EVP_MD_CTX *ctx, unsigned char *sig, size_t siglen);
+int EVP_DigestVerifyFinal(EVP_MD_CTX *ctx,
+ const unsigned char *sig, size_t siglen);
int EVP_OpenInit(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *type,
const unsigned char *ek, int ekl, const unsigned char *iv,
@@ -744,6 +767,7 @@ const EVP_CIPHER *EVP_des_cbc(void);
const EVP_CIPHER *EVP_des_ede_cbc(void);
const EVP_CIPHER *EVP_des_ede3_cbc(void);
const EVP_CIPHER *EVP_desx_cbc(void);
+const EVP_CIPHER *EVP_des_ede3_wrap(void);
/*
* This should now be supported through the dev_crypto ENGINE. But also, why
* are rc4 and md5 declarations made here inside a "NO_DES" precompiler
@@ -813,6 +837,7 @@ const EVP_CIPHER *EVP_aes_128_ctr(void);
const EVP_CIPHER *EVP_aes_128_ccm(void);
const EVP_CIPHER *EVP_aes_128_gcm(void);
const EVP_CIPHER *EVP_aes_128_xts(void);
+const EVP_CIPHER *EVP_aes_128_wrap(void);
const EVP_CIPHER *EVP_aes_192_ecb(void);
const EVP_CIPHER *EVP_aes_192_cbc(void);
const EVP_CIPHER *EVP_aes_192_cfb1(void);
@@ -823,6 +848,7 @@ const EVP_CIPHER *EVP_aes_192_ofb(void);
const EVP_CIPHER *EVP_aes_192_ctr(void);
const EVP_CIPHER *EVP_aes_192_ccm(void);
const EVP_CIPHER *EVP_aes_192_gcm(void);
+const EVP_CIPHER *EVP_aes_192_wrap(void);
const EVP_CIPHER *EVP_aes_256_ecb(void);
const EVP_CIPHER *EVP_aes_256_cbc(void);
const EVP_CIPHER *EVP_aes_256_cfb1(void);
@@ -834,10 +860,15 @@ const EVP_CIPHER *EVP_aes_256_ctr(void);
const EVP_CIPHER *EVP_aes_256_ccm(void);
const EVP_CIPHER *EVP_aes_256_gcm(void);
const EVP_CIPHER *EVP_aes_256_xts(void);
+const EVP_CIPHER *EVP_aes_256_wrap(void);
# if !defined(OPENSSL_NO_SHA) && !defined(OPENSSL_NO_SHA1)
const EVP_CIPHER *EVP_aes_128_cbc_hmac_sha1(void);
const EVP_CIPHER *EVP_aes_256_cbc_hmac_sha1(void);
# endif
+# ifndef OPENSSL_NO_SHA256
+const EVP_CIPHER *EVP_aes_128_cbc_hmac_sha256(void);
+const EVP_CIPHER *EVP_aes_256_cbc_hmac_sha256(void);
+# endif
# endif
# ifndef OPENSSL_NO_CAMELLIA
const EVP_CIPHER *EVP_camellia_128_ecb(void);
@@ -1028,6 +1059,7 @@ void EVP_PBE_cleanup(void);
# define ASN1_PKEY_CTRL_DEFAULT_MD_NID 0x3
# define ASN1_PKEY_CTRL_CMS_SIGN 0x5
# define ASN1_PKEY_CTRL_CMS_ENVELOPE 0x7
+# define ASN1_PKEY_CTRL_CMS_RI_TYPE 0x8
int EVP_PKEY_asn1_get_count(void);
const EVP_PKEY_ASN1_METHOD *EVP_PKEY_asn1_get0(int idx);
@@ -1091,6 +1123,19 @@ void EVP_PKEY_asn1_set_free(EVP_PKEY_ASN1_METHOD *ameth,
void EVP_PKEY_asn1_set_ctrl(EVP_PKEY_ASN1_METHOD *ameth,
int (*pkey_ctrl) (EVP_PKEY *pkey, int op,
long arg1, void *arg2));
+void EVP_PKEY_asn1_set_item(EVP_PKEY_ASN1_METHOD *ameth,
+ int (*item_verify) (EVP_MD_CTX *ctx,
+ const ASN1_ITEM *it,
+ void *asn,
+ X509_ALGOR *a,
+ ASN1_BIT_STRING *sig,
+ EVP_PKEY *pkey),
+ int (*item_sign) (EVP_MD_CTX *ctx,
+ const ASN1_ITEM *it,
+ void *asn,
+ X509_ALGOR *alg1,
+ X509_ALGOR *alg2,
+ ASN1_BIT_STRING *sig));
# define EVP_PKEY_OP_UNDEFINED 0
# define EVP_PKEY_OP_PARAMGEN (1<<1)
@@ -1121,6 +1166,10 @@ void EVP_PKEY_asn1_set_ctrl(EVP_PKEY_ASN1_METHOD *ameth,
EVP_PKEY_CTX_ctrl(ctx, -1, EVP_PKEY_OP_TYPE_SIG, \
EVP_PKEY_CTRL_MD, 0, (void *)md)
+# define EVP_PKEY_CTX_get_signature_md(ctx, pmd) \
+ EVP_PKEY_CTX_ctrl(ctx, -1, EVP_PKEY_OP_TYPE_SIG, \
+ EVP_PKEY_CTRL_GET_MD, 0, (void *)pmd)
+
# define EVP_PKEY_CTRL_MD 1
# define EVP_PKEY_CTRL_PEER_KEY 2
@@ -1142,6 +1191,8 @@ void EVP_PKEY_asn1_set_ctrl(EVP_PKEY_ASN1_METHOD *ameth,
# define EVP_PKEY_CTRL_CIPHER 12
+# define EVP_PKEY_CTRL_GET_MD 13
+
# define EVP_PKEY_ALG_CTRL 0x1000
# define EVP_PKEY_FLAG_AUTOARGLEN 2
@@ -1327,11 +1378,13 @@ void ERR_load_EVP_strings(void);
# define EVP_F_AESNI_INIT_KEY 165
# define EVP_F_AESNI_XTS_CIPHER 176
# define EVP_F_AES_INIT_KEY 133
+# define EVP_F_AES_T4_INIT_KEY 178
# define EVP_F_AES_XTS 172
# define EVP_F_AES_XTS_CIPHER 175
# define EVP_F_ALG_MODULE_INIT 177
# define EVP_F_CAMELLIA_INIT_KEY 159
# define EVP_F_CMAC_INIT 173
+# define EVP_F_CMLL_T4_INIT_KEY 179
# define EVP_F_D2I_PKEY 100
# define EVP_F_DO_SIGVER_INIT 161
# define EVP_F_DSAPKEY2PKCS8 134
@@ -1471,6 +1524,7 @@ void ERR_load_EVP_strings(void);
# define EVP_R_UNSUPPORTED_PRF 125
# define EVP_R_UNSUPPORTED_PRIVATE_KEY_ALGORITHM 118
# define EVP_R_UNSUPPORTED_SALT_TYPE 126
+# define EVP_R_WRAP_MODE_NOT_ALLOWED 170
# define EVP_R_WRONG_FINAL_BLOCK_LENGTH 109
# define EVP_R_WRONG_PUBLIC_KEY_TYPE 110
diff --git a/crypto/openssl/crypto/evp/evp_enc.c b/crypto/openssl/crypto/evp/evp_enc.c
index 4e983c4..65f0e02 100644
--- a/crypto/openssl/crypto/evp/evp_enc.c
+++ b/crypto/openssl/crypto/evp/evp_enc.c
@@ -169,8 +169,14 @@ int EVP_CipherInit_ex(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher,
#endif
#ifdef OPENSSL_FIPS
- if (FIPS_mode())
+ if (FIPS_mode()) {
+ const EVP_CIPHER *fcipher;
+ if (cipher)
+ fcipher = evp_get_fips_cipher(cipher);
+ if (fcipher)
+ cipher = fcipher;
return FIPS_cipherinit(ctx, cipher, key, iv, enc);
+ }
#endif
ctx->cipher = cipher;
if (ctx->cipher->ctx_size) {
@@ -183,7 +189,8 @@ int EVP_CipherInit_ex(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher,
ctx->cipher_data = NULL;
}
ctx->key_len = cipher->key_len;
- ctx->flags = 0;
+ /* Preserve wrap enable flag, zero everything else */
+ ctx->flags &= EVP_CIPHER_CTX_FLAG_WRAP_ALLOW;
if (ctx->cipher->flags & EVP_CIPH_CTRL_INIT) {
if (!EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_INIT, 0, NULL)) {
EVPerr(EVP_F_EVP_CIPHERINIT_EX, EVP_R_INITIALIZATION_ERROR);
@@ -206,6 +213,12 @@ int EVP_CipherInit_ex(EVP_CIPHER_CTX *ctx, const EVP_CIPHER *cipher,
|| ctx->cipher->block_size == 8
|| ctx->cipher->block_size == 16);
+ if (!(ctx->flags & EVP_CIPHER_CTX_FLAG_WRAP_ALLOW)
+ && EVP_CIPHER_CTX_mode(ctx) == EVP_CIPH_WRAP_MODE) {
+ EVPerr(EVP_F_EVP_CIPHERINIT_EX, EVP_R_WRAP_MODE_NOT_ALLOWED);
+ return 0;
+ }
+
if (!(EVP_CIPHER_CTX_flags(ctx) & EVP_CIPH_CUSTOM_IV)) {
switch (EVP_CIPHER_CTX_mode(ctx)) {
diff --git a/crypto/openssl/crypto/evp/evp_err.c b/crypto/openssl/crypto/evp/evp_err.c
index 686a699..15cf553 100644
--- a/crypto/openssl/crypto/evp/evp_err.c
+++ b/crypto/openssl/crypto/evp/evp_err.c
@@ -1,6 +1,6 @@
/* crypto/evp/evp_err.c */
/* ====================================================================
- * Copyright (c) 1999-2011 The OpenSSL Project. All rights reserved.
+ * Copyright (c) 1999-2013 The OpenSSL Project. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -73,11 +73,13 @@ static ERR_STRING_DATA EVP_str_functs[] = {
{ERR_FUNC(EVP_F_AESNI_INIT_KEY), "AESNI_INIT_KEY"},
{ERR_FUNC(EVP_F_AESNI_XTS_CIPHER), "AESNI_XTS_CIPHER"},
{ERR_FUNC(EVP_F_AES_INIT_KEY), "AES_INIT_KEY"},
+ {ERR_FUNC(EVP_F_AES_T4_INIT_KEY), "AES_T4_INIT_KEY"},
{ERR_FUNC(EVP_F_AES_XTS), "AES_XTS"},
{ERR_FUNC(EVP_F_AES_XTS_CIPHER), "AES_XTS_CIPHER"},
{ERR_FUNC(EVP_F_ALG_MODULE_INIT), "ALG_MODULE_INIT"},
{ERR_FUNC(EVP_F_CAMELLIA_INIT_KEY), "CAMELLIA_INIT_KEY"},
{ERR_FUNC(EVP_F_CMAC_INIT), "CMAC_INIT"},
+ {ERR_FUNC(EVP_F_CMLL_T4_INIT_KEY), "CMLL_T4_INIT_KEY"},
{ERR_FUNC(EVP_F_D2I_PKEY), "D2I_PKEY"},
{ERR_FUNC(EVP_F_DO_SIGVER_INIT), "DO_SIGVER_INIT"},
{ERR_FUNC(EVP_F_DSAPKEY2PKCS8), "DSAPKEY2PKCS8"},
@@ -232,6 +234,7 @@ static ERR_STRING_DATA EVP_str_reasons[] = {
{ERR_REASON(EVP_R_UNSUPPORTED_PRIVATE_KEY_ALGORITHM),
"unsupported private key algorithm"},
{ERR_REASON(EVP_R_UNSUPPORTED_SALT_TYPE), "unsupported salt type"},
+ {ERR_REASON(EVP_R_WRAP_MODE_NOT_ALLOWED), "wrap mode not allowed"},
{ERR_REASON(EVP_R_WRONG_FINAL_BLOCK_LENGTH), "wrong final block length"},
{ERR_REASON(EVP_R_WRONG_PUBLIC_KEY_TYPE), "wrong public key type"},
{0, NULL}
diff --git a/crypto/openssl/crypto/evp/evp_extra_test.c b/crypto/openssl/crypto/evp/evp_extra_test.c
index 21688b0..0f7b011 100644
--- a/crypto/openssl/crypto/evp/evp_extra_test.c
+++ b/crypto/openssl/crypto/evp/evp_extra_test.c
@@ -345,7 +345,7 @@ static int test_EVP_DigestVerifyInit(void)
if (pkey == NULL ||
!EVP_DigestVerifyInit(&md_ctx, NULL, EVP_sha256(), NULL, pkey) ||
!EVP_DigestVerifyUpdate(&md_ctx, kMsg, sizeof(kMsg)) ||
- !EVP_DigestVerifyFinal(&md_ctx, (unsigned char *)kSignature, sizeof(kSignature))) {
+ !EVP_DigestVerifyFinal(&md_ctx, kSignature, sizeof(kSignature))) {
goto out;
}
ret = 1;
diff --git a/crypto/openssl/crypto/evp/evp_fips.c b/crypto/openssl/crypto/evp/evp_fips.c
deleted file mode 100644
index 71a32fc..0000000
--- a/crypto/openssl/crypto/evp/evp_fips.c
+++ /dev/null
@@ -1,310 +0,0 @@
-/* crypto/evp/evp_fips.c */
-/*
- * Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL
- * project.
- */
-/* ====================================================================
- * Copyright (c) 2011 The OpenSSL Project. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- *
- * 3. All advertising materials mentioning features or use of this
- * software must display the following acknowledgment:
- * "This product includes software developed by the OpenSSL Project
- * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)"
- *
- * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
- * endorse or promote products derived from this software without
- * prior written permission. For written permission, please contact
- * licensing@OpenSSL.org.
- *
- * 5. Products derived from this software may not be called "OpenSSL"
- * nor may "OpenSSL" appear in their names without prior written
- * permission of the OpenSSL Project.
- *
- * 6. Redistributions of any form whatsoever must retain the following
- * acknowledgment:
- * "This product includes software developed by the OpenSSL Project
- * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)"
- *
- * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
- * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
- * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
- * OF THE POSSIBILITY OF SUCH DAMAGE.
- * ====================================================================
- */
-
-#include <openssl/evp.h>
-
-#ifdef OPENSSL_FIPS
-# include <openssl/fips.h>
-
-const EVP_CIPHER *EVP_aes_128_cbc(void)
-{
- return FIPS_evp_aes_128_cbc();
-}
-
-const EVP_CIPHER *EVP_aes_128_ccm(void)
-{
- return FIPS_evp_aes_128_ccm();
-}
-
-const EVP_CIPHER *EVP_aes_128_cfb1(void)
-{
- return FIPS_evp_aes_128_cfb1();
-}
-
-const EVP_CIPHER *EVP_aes_128_cfb128(void)
-{
- return FIPS_evp_aes_128_cfb128();
-}
-
-const EVP_CIPHER *EVP_aes_128_cfb8(void)
-{
- return FIPS_evp_aes_128_cfb8();
-}
-
-const EVP_CIPHER *EVP_aes_128_ctr(void)
-{
- return FIPS_evp_aes_128_ctr();
-}
-
-const EVP_CIPHER *EVP_aes_128_ecb(void)
-{
- return FIPS_evp_aes_128_ecb();
-}
-
-const EVP_CIPHER *EVP_aes_128_gcm(void)
-{
- return FIPS_evp_aes_128_gcm();
-}
-
-const EVP_CIPHER *EVP_aes_128_ofb(void)
-{
- return FIPS_evp_aes_128_ofb();
-}
-
-const EVP_CIPHER *EVP_aes_128_xts(void)
-{
- return FIPS_evp_aes_128_xts();
-}
-
-const EVP_CIPHER *EVP_aes_192_cbc(void)
-{
- return FIPS_evp_aes_192_cbc();
-}
-
-const EVP_CIPHER *EVP_aes_192_ccm(void)
-{
- return FIPS_evp_aes_192_ccm();
-}
-
-const EVP_CIPHER *EVP_aes_192_cfb1(void)
-{
- return FIPS_evp_aes_192_cfb1();
-}
-
-const EVP_CIPHER *EVP_aes_192_cfb128(void)
-{
- return FIPS_evp_aes_192_cfb128();
-}
-
-const EVP_CIPHER *EVP_aes_192_cfb8(void)
-{
- return FIPS_evp_aes_192_cfb8();
-}
-
-const EVP_CIPHER *EVP_aes_192_ctr(void)
-{
- return FIPS_evp_aes_192_ctr();
-}
-
-const EVP_CIPHER *EVP_aes_192_ecb(void)
-{
- return FIPS_evp_aes_192_ecb();
-}
-
-const EVP_CIPHER *EVP_aes_192_gcm(void)
-{
- return FIPS_evp_aes_192_gcm();
-}
-
-const EVP_CIPHER *EVP_aes_192_ofb(void)
-{
- return FIPS_evp_aes_192_ofb();
-}
-
-const EVP_CIPHER *EVP_aes_256_cbc(void)
-{
- return FIPS_evp_aes_256_cbc();
-}
-
-const EVP_CIPHER *EVP_aes_256_ccm(void)
-{
- return FIPS_evp_aes_256_ccm();
-}
-
-const EVP_CIPHER *EVP_aes_256_cfb1(void)
-{
- return FIPS_evp_aes_256_cfb1();
-}
-
-const EVP_CIPHER *EVP_aes_256_cfb128(void)
-{
- return FIPS_evp_aes_256_cfb128();
-}
-
-const EVP_CIPHER *EVP_aes_256_cfb8(void)
-{
- return FIPS_evp_aes_256_cfb8();
-}
-
-const EVP_CIPHER *EVP_aes_256_ctr(void)
-{
- return FIPS_evp_aes_256_ctr();
-}
-
-const EVP_CIPHER *EVP_aes_256_ecb(void)
-{
- return FIPS_evp_aes_256_ecb();
-}
-
-const EVP_CIPHER *EVP_aes_256_gcm(void)
-{
- return FIPS_evp_aes_256_gcm();
-}
-
-const EVP_CIPHER *EVP_aes_256_ofb(void)
-{
- return FIPS_evp_aes_256_ofb();
-}
-
-const EVP_CIPHER *EVP_aes_256_xts(void)
-{
- return FIPS_evp_aes_256_xts();
-}
-
-const EVP_CIPHER *EVP_des_ede(void)
-{
- return FIPS_evp_des_ede();
-}
-
-const EVP_CIPHER *EVP_des_ede3(void)
-{
- return FIPS_evp_des_ede3();
-}
-
-const EVP_CIPHER *EVP_des_ede3_cbc(void)
-{
- return FIPS_evp_des_ede3_cbc();
-}
-
-const EVP_CIPHER *EVP_des_ede3_cfb1(void)
-{
- return FIPS_evp_des_ede3_cfb1();
-}
-
-const EVP_CIPHER *EVP_des_ede3_cfb64(void)
-{
- return FIPS_evp_des_ede3_cfb64();
-}
-
-const EVP_CIPHER *EVP_des_ede3_cfb8(void)
-{
- return FIPS_evp_des_ede3_cfb8();
-}
-
-const EVP_CIPHER *EVP_des_ede3_ecb(void)
-{
- return FIPS_evp_des_ede3_ecb();
-}
-
-const EVP_CIPHER *EVP_des_ede3_ofb(void)
-{
- return FIPS_evp_des_ede3_ofb();
-}
-
-const EVP_CIPHER *EVP_des_ede_cbc(void)
-{
- return FIPS_evp_des_ede_cbc();
-}
-
-const EVP_CIPHER *EVP_des_ede_cfb64(void)
-{
- return FIPS_evp_des_ede_cfb64();
-}
-
-const EVP_CIPHER *EVP_des_ede_ecb(void)
-{
- return FIPS_evp_des_ede_ecb();
-}
-
-const EVP_CIPHER *EVP_des_ede_ofb(void)
-{
- return FIPS_evp_des_ede_ofb();
-}
-
-const EVP_CIPHER *EVP_enc_null(void)
-{
- return FIPS_evp_enc_null();
-}
-
-const EVP_MD *EVP_sha1(void)
-{
- return FIPS_evp_sha1();
-}
-
-const EVP_MD *EVP_sha224(void)
-{
- return FIPS_evp_sha224();
-}
-
-const EVP_MD *EVP_sha256(void)
-{
- return FIPS_evp_sha256();
-}
-
-const EVP_MD *EVP_sha384(void)
-{
- return FIPS_evp_sha384();
-}
-
-const EVP_MD *EVP_sha512(void)
-{
- return FIPS_evp_sha512();
-}
-
-const EVP_MD *EVP_dss(void)
-{
- return FIPS_evp_dss();
-}
-
-const EVP_MD *EVP_dss1(void)
-{
- return FIPS_evp_dss1();
-}
-
-const EVP_MD *EVP_ecdsa(void)
-{
- return FIPS_evp_ecdsa();
-}
-
-#endif
diff --git a/crypto/openssl/crypto/evp/evp_lib.c b/crypto/openssl/crypto/evp/evp_lib.c
index d4d2b4b..a53a27c 100644
--- a/crypto/openssl/crypto/evp/evp_lib.c
+++ b/crypto/openssl/crypto/evp/evp_lib.c
@@ -60,6 +60,10 @@
#include "cryptlib.h"
#include <openssl/evp.h>
#include <openssl/objects.h>
+#ifdef OPENSSL_FIPS
+# include <openssl/fips.h>
+# include "evp_locl.h"
+#endif
int EVP_CIPHER_param_to_asn1(EVP_CIPHER_CTX *c, ASN1_TYPE *type)
{
@@ -67,9 +71,13 @@ int EVP_CIPHER_param_to_asn1(EVP_CIPHER_CTX *c, ASN1_TYPE *type)
if (c->cipher->set_asn1_parameters != NULL)
ret = c->cipher->set_asn1_parameters(c, type);
- else if (c->cipher->flags & EVP_CIPH_FLAG_DEFAULT_ASN1)
- ret = EVP_CIPHER_set_asn1_iv(c, type);
- else
+ else if (c->cipher->flags & EVP_CIPH_FLAG_DEFAULT_ASN1) {
+ if (EVP_CIPHER_CTX_mode(c) == EVP_CIPH_WRAP_MODE) {
+ ASN1_TYPE_set(type, V_ASN1_NULL, NULL);
+ ret = 1;
+ } else
+ ret = EVP_CIPHER_set_asn1_iv(c, type);
+ } else
ret = -1;
return (ret);
}
@@ -80,9 +88,11 @@ int EVP_CIPHER_asn1_to_param(EVP_CIPHER_CTX *c, ASN1_TYPE *type)
if (c->cipher->get_asn1_parameters != NULL)
ret = c->cipher->get_asn1_parameters(c, type);
- else if (c->cipher->flags & EVP_CIPH_FLAG_DEFAULT_ASN1)
+ else if (c->cipher->flags & EVP_CIPH_FLAG_DEFAULT_ASN1) {
+ if (EVP_CIPHER_CTX_mode(c) == EVP_CIPH_WRAP_MODE)
+ return 1;
ret = EVP_CIPHER_get_asn1_iv(c, type);
- else
+ } else
ret = -1;
return (ret);
}
@@ -200,12 +210,22 @@ const EVP_CIPHER *EVP_CIPHER_CTX_cipher(const EVP_CIPHER_CTX *ctx)
unsigned long EVP_CIPHER_flags(const EVP_CIPHER *cipher)
{
+#ifdef OPENSSL_FIPS
+ const EVP_CIPHER *fcipher;
+ fcipher = evp_get_fips_cipher(cipher);
+ if (fcipher && fcipher->flags & EVP_CIPH_FLAG_FIPS)
+ return cipher->flags | EVP_CIPH_FLAG_FIPS;
+#endif
return cipher->flags;
}
unsigned long EVP_CIPHER_CTX_flags(const EVP_CIPHER_CTX *ctx)
{
+#ifdef OPENSSL_FIPS
+ return EVP_CIPHER_flags(ctx->cipher);
+#else
return ctx->cipher->flags;
+#endif
}
void *EVP_CIPHER_CTX_get_app_data(const EVP_CIPHER_CTX *ctx)
@@ -272,8 +292,40 @@ int EVP_MD_size(const EVP_MD *md)
return md->md_size;
}
+#ifdef OPENSSL_FIPS
+
+const EVP_MD *evp_get_fips_md(const EVP_MD *md)
+{
+ int nid = EVP_MD_type(md);
+ if (nid == NID_dsa)
+ return FIPS_evp_dss1();
+ else if (nid == NID_dsaWithSHA)
+ return FIPS_evp_dss();
+ else if (nid == NID_ecdsa_with_SHA1)
+ return FIPS_evp_ecdsa();
+ else
+ return FIPS_get_digestbynid(nid);
+}
+
+const EVP_CIPHER *evp_get_fips_cipher(const EVP_CIPHER *cipher)
+{
+ int nid = cipher->nid;
+ if (nid == NID_undef)
+ return FIPS_evp_enc_null();
+ else
+ return FIPS_get_cipherbynid(nid);
+}
+
+#endif
+
unsigned long EVP_MD_flags(const EVP_MD *md)
{
+#ifdef OPENSSL_FIPS
+ const EVP_MD *fmd;
+ fmd = evp_get_fips_md(md);
+ if (fmd && fmd->flags & EVP_MD_FLAG_FIPS)
+ return md->flags | EVP_MD_FLAG_FIPS;
+#endif
return md->flags;
}
diff --git a/crypto/openssl/crypto/evp/evp_locl.h b/crypto/openssl/crypto/evp/evp_locl.h
index 980dada..2bb709a 100644
--- a/crypto/openssl/crypto/evp/evp_locl.h
+++ b/crypto/openssl/crypto/evp/evp_locl.h
@@ -333,6 +333,9 @@ int PKCS5_v2_PBKDF2_keyivgen(EVP_CIPHER_CTX *ctx, const char *pass,
const EVP_CIPHER *c, const EVP_MD *md,
int en_de);
+const EVP_MD *evp_get_fips_md(const EVP_MD *md);
+const EVP_CIPHER *evp_get_fips_cipher(const EVP_CIPHER *cipher);
+
#ifdef OPENSSL_FIPS
# ifdef OPENSSL_DOING_MAKEDEPEND
diff --git a/crypto/openssl/crypto/evp/evp_test.c b/crypto/openssl/crypto/evp/evp_test.c
index d06b4ee..d7441ec 100644
--- a/crypto/openssl/crypto/evp/evp_test.c
+++ b/crypto/openssl/crypto/evp/evp_test.c
@@ -132,11 +132,13 @@ static int test1_exit(int ec)
static void test1(const EVP_CIPHER *c, const unsigned char *key, int kn,
const unsigned char *iv, int in,
const unsigned char *plaintext, int pn,
- const unsigned char *ciphertext, int cn, int encdec)
+ const unsigned char *ciphertext, int cn,
+ const unsigned char *aad, int an,
+ const unsigned char *tag, int tn, int encdec)
{
EVP_CIPHER_CTX ctx;
unsigned char out[4096];
- int outl, outl2;
+ int outl, outl2, mode;
printf("Testing cipher %s%s\n", EVP_CIPHER_name(c),
(encdec ==
@@ -147,15 +149,78 @@ static void test1(const EVP_CIPHER *c, const unsigned char *key, int kn,
hexdump(stdout, "IV", iv, in);
hexdump(stdout, "Plaintext", plaintext, pn);
hexdump(stdout, "Ciphertext", ciphertext, cn);
-
- if (kn != c->key_len) {
+ if (an)
+ hexdump(stdout, "AAD", aad, an);
+ if (tn)
+ hexdump(stdout, "Tag", tag, tn);
+ mode = EVP_CIPHER_mode(c);
+ if (kn != EVP_CIPHER_key_length(c)) {
fprintf(stderr, "Key length doesn't match, got %d expected %lu\n", kn,
- (unsigned long)c->key_len);
+ (unsigned long)EVP_CIPHER_key_length(c));
test1_exit(5);
}
EVP_CIPHER_CTX_init(&ctx);
+ EVP_CIPHER_CTX_set_flags(&ctx, EVP_CIPHER_CTX_FLAG_WRAP_ALLOW);
if (encdec != 0) {
- if (!EVP_EncryptInit_ex(&ctx, c, NULL, key, iv)) {
+ if (mode == EVP_CIPH_GCM_MODE) {
+ if (!EVP_EncryptInit_ex(&ctx, c, NULL, NULL, NULL)) {
+ fprintf(stderr, "EncryptInit failed\n");
+ ERR_print_errors_fp(stderr);
+ test1_exit(10);
+ }
+ if (!EVP_CIPHER_CTX_ctrl(&ctx, EVP_CTRL_GCM_SET_IVLEN, in, NULL)) {
+ fprintf(stderr, "IV length set failed\n");
+ ERR_print_errors_fp(stderr);
+ test1_exit(11);
+ }
+ if (!EVP_EncryptInit_ex(&ctx, NULL, NULL, key, iv)) {
+ fprintf(stderr, "Key/IV set failed\n");
+ ERR_print_errors_fp(stderr);
+ test1_exit(12);
+ }
+ if (an && !EVP_EncryptUpdate(&ctx, NULL, &outl, aad, an)) {
+ fprintf(stderr, "AAD set failed\n");
+ ERR_print_errors_fp(stderr);
+ test1_exit(13);
+ }
+ } else if (mode == EVP_CIPH_CCM_MODE) {
+ if (!EVP_EncryptInit_ex(&ctx, c, NULL, NULL, NULL)) {
+ fprintf(stderr, "EncryptInit failed\n");
+ ERR_print_errors_fp(stderr);
+ test1_exit(10);
+ }
+ if (!EVP_CIPHER_CTX_ctrl(&ctx, EVP_CTRL_CCM_SET_IVLEN, in, NULL)) {
+ fprintf(stderr, "IV length set failed\n");
+ ERR_print_errors_fp(stderr);
+ test1_exit(11);
+ }
+ if (!EVP_CIPHER_CTX_ctrl(&ctx, EVP_CTRL_CCM_SET_TAG, tn, NULL)) {
+ fprintf(stderr, "Tag length set failed\n");
+ ERR_print_errors_fp(stderr);
+ test1_exit(11);
+ }
+ if (!EVP_EncryptInit_ex(&ctx, NULL, NULL, key, iv)) {
+ fprintf(stderr, "Key/IV set failed\n");
+ ERR_print_errors_fp(stderr);
+ test1_exit(12);
+ }
+ if (!EVP_EncryptUpdate(&ctx, NULL, &outl, NULL, pn)) {
+ fprintf(stderr, "Plaintext length set failed\n");
+ ERR_print_errors_fp(stderr);
+ test1_exit(12);
+ }
+ if (an && !EVP_EncryptUpdate(&ctx, NULL, &outl, aad, an)) {
+ fprintf(stderr, "AAD set failed\n");
+ ERR_print_errors_fp(stderr);
+ test1_exit(13);
+ }
+ } else if (mode == EVP_CIPH_WRAP_MODE) {
+ if (!EVP_EncryptInit_ex(&ctx, c, NULL, key, in ? iv : NULL)) {
+ fprintf(stderr, "EncryptInit failed\n");
+ ERR_print_errors_fp(stderr);
+ test1_exit(10);
+ }
+ } else if (!EVP_EncryptInit_ex(&ctx, c, NULL, key, iv)) {
fprintf(stderr, "EncryptInit failed\n");
ERR_print_errors_fp(stderr);
test1_exit(10);
@@ -185,10 +250,93 @@ static void test1(const EVP_CIPHER *c, const unsigned char *key, int kn,
hexdump(stderr, "Expected", ciphertext, cn);
test1_exit(9);
}
+ if (mode == EVP_CIPH_GCM_MODE || mode == EVP_CIPH_CCM_MODE) {
+ unsigned char rtag[16];
+ /*
+ * Note: EVP_CTRL_CCM_GET_TAG has same value as
+ * EVP_CTRL_GCM_GET_TAG
+ */
+ if (!EVP_CIPHER_CTX_ctrl(&ctx, EVP_CTRL_GCM_GET_TAG, tn, rtag)) {
+ fprintf(stderr, "Get tag failed\n");
+ ERR_print_errors_fp(stderr);
+ test1_exit(14);
+ }
+ if (memcmp(rtag, tag, tn)) {
+ fprintf(stderr, "Tag mismatch\n");
+ hexdump(stderr, "Got", rtag, tn);
+ hexdump(stderr, "Expected", tag, tn);
+ test1_exit(9);
+ }
+ }
}
if (encdec <= 0) {
- if (!EVP_DecryptInit_ex(&ctx, c, NULL, key, iv)) {
+ if (mode == EVP_CIPH_GCM_MODE) {
+ if (!EVP_DecryptInit_ex(&ctx, c, NULL, NULL, NULL)) {
+ fprintf(stderr, "EncryptInit failed\n");
+ ERR_print_errors_fp(stderr);
+ test1_exit(10);
+ }
+ if (!EVP_CIPHER_CTX_ctrl(&ctx, EVP_CTRL_GCM_SET_IVLEN, in, NULL)) {
+ fprintf(stderr, "IV length set failed\n");
+ ERR_print_errors_fp(stderr);
+ test1_exit(11);
+ }
+ if (!EVP_DecryptInit_ex(&ctx, NULL, NULL, key, iv)) {
+ fprintf(stderr, "Key/IV set failed\n");
+ ERR_print_errors_fp(stderr);
+ test1_exit(12);
+ }
+ if (!EVP_CIPHER_CTX_ctrl
+ (&ctx, EVP_CTRL_GCM_SET_TAG, tn, (void *)tag)) {
+ fprintf(stderr, "Set tag failed\n");
+ ERR_print_errors_fp(stderr);
+ test1_exit(14);
+ }
+ if (an && !EVP_DecryptUpdate(&ctx, NULL, &outl, aad, an)) {
+ fprintf(stderr, "AAD set failed\n");
+ ERR_print_errors_fp(stderr);
+ test1_exit(13);
+ }
+ } else if (mode == EVP_CIPH_CCM_MODE) {
+ if (!EVP_DecryptInit_ex(&ctx, c, NULL, NULL, NULL)) {
+ fprintf(stderr, "DecryptInit failed\n");
+ ERR_print_errors_fp(stderr);
+ test1_exit(10);
+ }
+ if (!EVP_CIPHER_CTX_ctrl(&ctx, EVP_CTRL_CCM_SET_IVLEN, in, NULL)) {
+ fprintf(stderr, "IV length set failed\n");
+ ERR_print_errors_fp(stderr);
+ test1_exit(11);
+ }
+ if (!EVP_CIPHER_CTX_ctrl
+ (&ctx, EVP_CTRL_CCM_SET_TAG, tn, (void *)tag)) {
+ fprintf(stderr, "Tag length set failed\n");
+ ERR_print_errors_fp(stderr);
+ test1_exit(11);
+ }
+ if (!EVP_DecryptInit_ex(&ctx, NULL, NULL, key, iv)) {
+ fprintf(stderr, "Key/Nonce set failed\n");
+ ERR_print_errors_fp(stderr);
+ test1_exit(12);
+ }
+ if (!EVP_DecryptUpdate(&ctx, NULL, &outl, NULL, pn)) {
+ fprintf(stderr, "Plaintext length set failed\n");
+ ERR_print_errors_fp(stderr);
+ test1_exit(12);
+ }
+ if (an && !EVP_EncryptUpdate(&ctx, NULL, &outl, aad, an)) {
+ fprintf(stderr, "AAD set failed\n");
+ ERR_print_errors_fp(stderr);
+ test1_exit(13);
+ }
+ } else if (mode == EVP_CIPH_WRAP_MODE) {
+ if (!EVP_DecryptInit_ex(&ctx, c, NULL, key, in ? iv : NULL)) {
+ fprintf(stderr, "EncryptInit failed\n");
+ ERR_print_errors_fp(stderr);
+ test1_exit(10);
+ }
+ } else if (!EVP_DecryptInit_ex(&ctx, c, NULL, key, iv)) {
fprintf(stderr, "DecryptInit failed\n");
ERR_print_errors_fp(stderr);
test1_exit(11);
@@ -200,7 +348,8 @@ static void test1(const EVP_CIPHER *c, const unsigned char *key, int kn,
ERR_print_errors_fp(stderr);
test1_exit(6);
}
- if (!EVP_DecryptFinal_ex(&ctx, out + outl, &outl2)) {
+ if (mode != EVP_CIPH_CCM_MODE
+ && !EVP_DecryptFinal_ex(&ctx, out + outl, &outl2)) {
fprintf(stderr, "DecryptFinal failed\n");
ERR_print_errors_fp(stderr);
test1_exit(7);
@@ -228,7 +377,9 @@ static void test1(const EVP_CIPHER *c, const unsigned char *key, int kn,
static int test_cipher(const char *cipher, const unsigned char *key, int kn,
const unsigned char *iv, int in,
const unsigned char *plaintext, int pn,
- const unsigned char *ciphertext, int cn, int encdec)
+ const unsigned char *ciphertext, int cn,
+ const unsigned char *aad, int an,
+ const unsigned char *tag, int tn, int encdec)
{
const EVP_CIPHER *c;
@@ -236,7 +387,8 @@ static int test_cipher(const char *cipher, const unsigned char *key, int kn,
if (!c)
return 0;
- test1(c, key, kn, iv, in, plaintext, pn, ciphertext, cn, encdec);
+ test1(c, key, kn, iv, in, plaintext, pn, ciphertext, cn, aad, an, tag, tn,
+ encdec);
return 1;
}
@@ -316,7 +468,7 @@ int main(int argc, char **argv)
perror(szTestFile);
EXIT(2);
}
-
+ ERR_load_crypto_strings();
/* Load up the software EVP_CIPHER and EVP_MD definitions */
OpenSSL_add_all_ciphers();
OpenSSL_add_all_digests();
@@ -346,9 +498,11 @@ int main(int argc, char **argv)
char line[4096];
char *p;
char *cipher;
- unsigned char *iv, *key, *plaintext, *ciphertext;
+ unsigned char *iv, *key, *plaintext, *ciphertext, *aad, *tag;
int encdec;
int kn, in, pn, cn;
+ int an = 0;
+ int tn = 0;
if (!fgets((char *)line, sizeof line, f))
break;
@@ -361,19 +515,37 @@ int main(int argc, char **argv)
plaintext = ustrsep(&p, ":");
ciphertext = ustrsep(&p, ":");
if (p[-1] == '\n') {
- p[-1] = '\0';
encdec = -1;
+ p[-1] = '\0';
+ tag = aad = NULL;
+ an = tn = 0;
} else {
- encdec = atoi(sstrsep(&p, "\n"));
+ aad = ustrsep(&p, ":");
+ tag = ustrsep(&p, ":");
+ if (tag == NULL) {
+ p = (char *)aad;
+ tag = aad = NULL;
+ an = tn = 0;
+ }
+ if (p[-1] == '\n') {
+ encdec = -1;
+ p[-1] = '\0';
+ } else
+ encdec = atoi(sstrsep(&p, "\n"));
}
kn = convert(key);
in = convert(iv);
pn = convert(plaintext);
cn = convert(ciphertext);
+ if (aad) {
+ an = convert(aad);
+ tn = convert(tag);
+ }
if (!test_cipher
- (cipher, key, kn, iv, in, plaintext, pn, ciphertext, cn, encdec)
+ (cipher, key, kn, iv, in, plaintext, pn, ciphertext, cn, aad, an,
+ tag, tn, encdec)
&& !test_digest(cipher, plaintext, pn, ciphertext, cn)) {
#ifdef OPENSSL_NO_AES
if (strstr(cipher, "AES") == cipher) {
diff --git a/crypto/openssl/crypto/evp/evptests.txt b/crypto/openssl/crypto/evp/evptests.txt
index c273707..4e9958b 100644
--- a/crypto/openssl/crypto/evp/evptests.txt
+++ b/crypto/openssl/crypto/evp/evptests.txt
@@ -1,4 +1,5 @@
#cipher:key:iv:plaintext:ciphertext:0/1(decrypt/encrypt)
+#aadcipher:key:iv:plaintext:ciphertext:aad:tag:0/1(decrypt/encrypt)
#digest:::input:output
# SHA(1) tests (from shatest.c)
@@ -332,3 +333,69 @@ SEED-ECB:00000000000000000000000000000000::000102030405060708090A0B0C0D0E0F:5EBA
SEED-ECB:000102030405060708090A0B0C0D0E0F::00000000000000000000000000000000:C11F22F20140505084483597E4370F43:1
SEED-ECB:4706480851E61BE85D74BFB3FD956185::83A2F8A288641FB9A4E9A5CC2F131C7D:EE54D13EBCAE706D226BC3142CD40D4A:1
SEED-ECB:28DBC3BC49FFD87DCFA509B11D422BE7::B41E6BE2EBA84A148E2EED84593C5EC7:9B9B7BFCD1813CB95D0B3618F40F5122:1
+
+# AES CCM 256 bit key
+aes-256-ccm:1bde3251d41a8b5ea013c195ae128b218b3e0306376357077ef1c1c78548b92e:5b8e40746f6b98e00f1d13ff41:53bd72a97089e312422bf72e242377b3c6ee3e2075389b999c4ef7f28bd2b80a:9a5fcccdb4cf04e7293d2775cc76a488f042382d949b43b7d6bb2b9864786726:c17a32514eb6103f3249e076d4c871dc97e04b286699e54491dc18f6d734d4c0:2024931d73bca480c24a24ece6b6c2bf
+
+# AES GCM test vectors from http://csrc.nist.gov/groups/ST/toolkit/BCM/documents/proposedmodes/gcm/gcm-spec.pdf
+aes-128-gcm:00000000000000000000000000000000:000000000000000000000000::::58e2fccefa7e3061367f1d57a4e7455a
+aes-128-gcm:00000000000000000000000000000000:000000000000000000000000:00000000000000000000000000000000:0388dace60b6a392f328c2b971b2fe78::ab6e47d42cec13bdf53a67b21257bddf
+aes-128-gcm:feffe9928665731c6d6a8f9467308308:cafebabefacedbaddecaf888:d9313225f88406e5a55909c5aff5269a86a7a9531534f7da2e4c303d8a318a721c3c0c95956809532fcf0e2449a6b525b16aedf5aa0de657ba637b391aafd255:42831ec2217774244b7221b784d0d49ce3aa212f2c02a4e035c17e2329aca12e21d514b25466931c7d8f6a5aac84aa051ba30b396a0aac973d58e091473f5985::4d5c2af327cd64a62cf35abd2ba6fab4
+aes-128-gcm:feffe9928665731c6d6a8f9467308308:cafebabefacedbaddecaf888:d9313225f88406e5a55909c5aff5269a86a7a9531534f7da2e4c303d8a318a721c3c0c95956809532fcf0e2449a6b525b16aedf5aa0de657ba637b39:42831ec2217774244b7221b784d0d49ce3aa212f2c02a4e035c17e2329aca12e21d514b25466931c7d8f6a5aac84aa051ba30b396a0aac973d58e091:feedfacedeadbeeffeedfacedeadbeefabaddad2:5bc94fbc3221a5db94fae95ae7121a47
+aes-128-gcm:feffe9928665731c6d6a8f9467308308:cafebabefacedbad:d9313225f88406e5a55909c5aff5269a86a7a9531534f7da2e4c303d8a318a721c3c0c95956809532fcf0e2449a6b525b16aedf5aa0de657ba637b39:61353b4c2806934a777ff51fa22a4755699b2a714fcdc6f83766e5f97b6c742373806900e49f24b22b097544d4896b424989b5e1ebac0f07c23f4598:feedfacedeadbeeffeedfacedeadbeefabaddad2:3612d2e79e3b0785561be14aaca2fccb
+aes-128-gcm:feffe9928665731c6d6a8f9467308308:9313225df88406e555909c5aff5269aa6a7a9538534f7da1e4c303d2a318a728c3c0c95156809539fcf0e2429a6b525416aedbf5a0de6a57a637b39b:d9313225f88406e5a55909c5aff5269a86a7a9531534f7da2e4c303d8a318a721c3c0c95956809532fcf0e2449a6b525b16aedf5aa0de657ba637b39:8ce24998625615b603a033aca13fb894be9112a5c3a211a8ba262a3cca7e2ca701e4a9a4fba43c90ccdcb281d48c7c6fd62875d2aca417034c34aee5:feedfacedeadbeeffeedfacedeadbeefabaddad2:619cc5aefffe0bfa462af43c1699d050
+aes-192-gcm:000000000000000000000000000000000000000000000000:000000000000000000000000::::cd33b28ac773f74ba00ed1f312572435
+aes-192-gcm:000000000000000000000000000000000000000000000000:000000000000000000000000:00000000000000000000000000000000:98e7247c07f0fe411c267e4384b0f600::2ff58d80033927ab8ef4d4587514f0fb
+aes-192-gcm:feffe9928665731c6d6a8f9467308308feffe9928665731c:cafebabefacedbaddecaf888:d9313225f88406e5a55909c5aff5269a86a7a9531534f7da2e4c303d8a318a721c3c0c95956809532fcf0e2449a6b525b16aedf5aa0de657ba637b391aafd255:3980ca0b3c00e841eb06fac4872a2757859e1ceaa6efd984628593b40ca1e19c7d773d00c144c525ac619d18c84a3f4718e2448b2fe324d9ccda2710acade256::9924a7c8587336bfb118024db8674a14
+aes-192-gcm:feffe9928665731c6d6a8f9467308308feffe9928665731c:cafebabefacedbaddecaf888:d9313225f88406e5a55909c5aff5269a86a7a9531534f7da2e4c303d8a318a721c3c0c95956809532fcf0e2449a6b525b16aedf5aa0de657ba637b39:3980ca0b3c00e841eb06fac4872a2757859e1ceaa6efd984628593b40ca1e19c7d773d00c144c525ac619d18c84a3f4718e2448b2fe324d9ccda2710:feedfacedeadbeeffeedfacedeadbeefabaddad2:2519498e80f1478f37ba55bd6d27618c
+aes-192-gcm:feffe9928665731c6d6a8f9467308308feffe9928665731c:cafebabefacedbad:d9313225f88406e5a55909c5aff5269a86a7a9531534f7da2e4c303d8a318a721c3c0c95956809532fcf0e2449a6b525b16aedf5aa0de657ba637b39:0f10f599ae14a154ed24b36e25324db8c566632ef2bbb34f8347280fc4507057fddc29df9a471f75c66541d4d4dad1c9e93a19a58e8b473fa0f062f7:feedfacedeadbeeffeedfacedeadbeefabaddad2:65dcc57fcf623a24094fcca40d3533f8
+aes-192-gcm:feffe9928665731c6d6a8f9467308308feffe9928665731c:9313225df88406e555909c5aff5269aa6a7a9538534f7da1e4c303d2a318a728c3c0c95156809539fcf0e2429a6b525416aedbf5a0de6a57a637b39b:d9313225f88406e5a55909c5aff5269a86a7a9531534f7da2e4c303d8a318a721c3c0c95956809532fcf0e2449a6b525b16aedf5aa0de657ba637b39:d27e88681ce3243c4830165a8fdcf9ff1de9a1d8e6b447ef6ef7b79828666e4581e79012af34ddd9e2f037589b292db3e67c036745fa22e7e9b7373b:feedfacedeadbeeffeedfacedeadbeefabaddad2:dcf566ff291c25bbb8568fc3d376a6d9
+aes-256-gcm:0000000000000000000000000000000000000000000000000000000000000000:000000000000000000000000::::530f8afbc74536b9a963b4f1c4cb738b
+aes-256-gcm:0000000000000000000000000000000000000000000000000000000000000000:000000000000000000000000:00000000000000000000000000000000:cea7403d4d606b6e074ec5d3baf39d18::d0d1c8a799996bf0265b98b5d48ab919
+aes-256-gcm:feffe9928665731c6d6a8f9467308308feffe9928665731c6d6a8f9467308308:cafebabefacedbaddecaf888:d9313225f88406e5a55909c5aff5269a86a7a9531534f7da2e4c303d8a318a721c3c0c95956809532fcf0e2449a6b525b16aedf5aa0de657ba637b391aafd255:522dc1f099567d07f47f37a32a84427d643a8cdcbfe5c0c97598a2bd2555d1aa8cb08e48590dbb3da7b08b1056828838c5f61e6393ba7a0abcc9f662898015ad::b094dac5d93471bdec1a502270e3cc6c
+aes-256-gcm:feffe9928665731c6d6a8f9467308308feffe9928665731c6d6a8f9467308308:cafebabefacedbaddecaf888:d9313225f88406e5a55909c5aff5269a86a7a9531534f7da2e4c303d8a318a721c3c0c95956809532fcf0e2449a6b525b16aedf5aa0de657ba637b39:522dc1f099567d07f47f37a32a84427d643a8cdcbfe5c0c97598a2bd2555d1aa8cb08e48590dbb3da7b08b1056828838c5f61e6393ba7a0abcc9f662:feedfacedeadbeeffeedfacedeadbeefabaddad2:76fc6ece0f4e1768cddf8853bb2d551b
+aes-256-gcm:feffe9928665731c6d6a8f9467308308feffe9928665731c6d6a8f9467308308:cafebabefacedbad:d9313225f88406e5a55909c5aff5269a86a7a9531534f7da2e4c303d8a318a721c3c0c95956809532fcf0e2449a6b525b16aedf5aa0de657ba637b39:c3762df1ca787d32ae47c13bf19844cbaf1ae14d0b976afac52ff7d79bba9de0feb582d33934a4f0954cc2363bc73f7862ac430e64abe499f47c9b1f:feedfacedeadbeeffeedfacedeadbeefabaddad2:3a337dbf46a792c45e454913fe2ea8f2
+aes-256-gcm:feffe9928665731c6d6a8f9467308308feffe9928665731c6d6a8f9467308308:9313225df88406e555909c5aff5269aa6a7a9538534f7da1e4c303d2a318a728c3c0c95156809539fcf0e2429a6b525416aedbf5a0de6a57a637b39b:d9313225f88406e5a55909c5aff5269a86a7a9531534f7da2e4c303d8a318a721c3c0c95956809532fcf0e2449a6b525b16aedf5aa0de657ba637b39:5a8def2f0c9e53f1f75d7853659e2a20eeb2b22aafde6419a058ab4f6f746bf40fc0c3b780f244452da3ebf1c5d82cdea2418997200ef82e44ae7e3f:feedfacedeadbeeffeedfacedeadbeefabaddad2:a44a8266ee1c8eb0c8b5d4cf5ae9f19a
+# local add-ons, primarily streaming ghash tests
+# 128 bytes aad
+aes-128-gcm:00000000000000000000000000000000:000000000000000000000000:::d9313225f88406e5a55909c5aff5269a86a7a9531534f7da2e4c303d8a318a721c3c0c95956809532fcf0e2449a6b525b16aedf5aa0de657ba637b391aafd255522dc1f099567d07f47f37a32a84427d643a8cdcbfe5c0c97598a2bd2555d1aa8cb08e48590dbb3da7b08b1056828838c5f61e6393ba7a0abcc9f662898015ad:5fea793a2d6f974d37e68e0cb8ff9492
+# 48 bytes plaintext
+aes-128-gcm:00000000000000000000000000000000:000000000000000000000000:000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000:0388dace60b6a392f328c2b971b2fe78f795aaab494b5923f7fd89ff948bc1e0200211214e7394da2089b6acd093abe0::9dd0a376b08e40eb00c35f29f9ea61a4
+# 80 bytes plaintext
+aes-128-gcm:00000000000000000000000000000000:000000000000000000000000:0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000:0388dace60b6a392f328c2b971b2fe78f795aaab494b5923f7fd89ff948bc1e0200211214e7394da2089b6acd093abe0c94da219118e297d7b7ebcbcc9c388f28ade7d85a8ee35616f7124a9d5270291::98885a3a22bd4742fe7b72172193b163
+# 128 bytes plaintext
+aes-128-gcm:00000000000000000000000000000000:000000000000000000000000:0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000:0388dace60b6a392f328c2b971b2fe78f795aaab494b5923f7fd89ff948bc1e0200211214e7394da2089b6acd093abe0c94da219118e297d7b7ebcbcc9c388f28ade7d85a8ee35616f7124a9d527029195b84d1b96c690ff2f2de30bf2ec89e00253786e126504f0dab90c48a30321de3345e6b0461e7c9e6c6b7afedde83f40::cac45f60e31efd3b5a43b98a22ce1aa1
+# 192 bytes plaintext, iv is chosen so that initial counter LSB is 0xFF
+aes-128-gcm:00000000000000000000000000000000:ffffffff000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000:000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000:56b3373ca9ef6e4a2b64fe1e9a17b61425f10d47a75a5fce13efc6bc784af24f4141bdd48cf7c770887afd573cca5418a9aeffcd7c5ceddfc6a78397b9a85b499da558257267caab2ad0b23ca476a53cb17fb41c4b8b475cb4f3f7165094c229c9e8c4dc0a2a5ff1903e501511221376a1cdb8364c5061a20cae74bc4acd76ceb0abc9fd3217ef9f8c90be402ddf6d8697f4f880dff15bfb7a6b28241ec8fe183c2d59e3f9dfff653c7126f0acb9e64211f42bae12af462b1070bef1ab5e3606::566f8ef683078bfdeeffa869d751a017
+# 80 bytes plaintext, submitted by Intel
+aes-128-gcm:843ffcf5d2b72694d19ed01d01249412:dbcca32ebf9b804617c3aa9e:000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f:6268c6fa2a80b2d137467f092f657ac04d89be2beaa623d61b5a868c8f03ff95d3dcee23ad2f1ab3a6c80eaf4b140eb05de3457f0fbc111a6b43d0763aa422a3013cf1dc37fe417d1fbfc449b75d4cc5:00000000000000000000000000000000101112131415161718191a1b1c1d1e1f:3b629ccfbc1119b7319e1dce2cd6fd6d
+
+# AES XTS test vectors from IEEE Std 1619-2007
+aes-128-xts:0000000000000000000000000000000000000000000000000000000000000000:00000000000000000000000000000000:0000000000000000000000000000000000000000000000000000000000000000:917cf69ebd68b2ec9b9fe9a3eadda692cd43d2f59598ed858c02c2652fbf922e
+aes-128-xts:1111111111111111111111111111111122222222222222222222222222222222:33333333330000000000000000000000:4444444444444444444444444444444444444444444444444444444444444444:c454185e6a16936e39334038acef838bfb186fff7480adc4289382ecd6d394f0
+aes-128-xts:fffefdfcfbfaf9f8f7f6f5f4f3f2f1f022222222222222222222222222222222:33333333330000000000000000000000:4444444444444444444444444444444444444444444444444444444444444444:af85336b597afc1a900b2eb21ec949d292df4c047e0b21532186a5971a227a89
+aes-128-xts:2718281828459045235360287471352631415926535897932384626433832795:00000000000000000000000000000000:000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff:27a7479befa1d476489f308cd4cfa6e2a96e4bbe3208ff25287dd3819616e89cc78cf7f5e543445f8333d8fa7f56000005279fa5d8b5e4ad40e736ddb4d35412328063fd2aab53e5ea1e0a9f332500a5df9487d07a5c92cc512c8866c7e860ce93fdf166a24912b422976146ae20ce846bb7dc9ba94a767aaef20c0d61ad02655ea92dc4c4e41a8952c651d33174be51a10c421110e6d81588ede82103a252d8a750e8768defffed9122810aaeb99f9172af82b604dc4b8e51bcb08235a6f4341332e4ca60482a4ba1a03b3e65008fc5da76b70bf1690db4eae29c5f1badd03c5ccf2a55d705ddcd86d449511ceb7ec30bf12b1fa35b913f9f747a8afd1b130e94bff94effd01a91735ca1726acd0b197c4e5b03393697e126826fb6bbde8ecc1e08298516e2c9ed03ff3c1b7860f6de76d4cecd94c8119855ef5297ca67e9f3e7ff72b1e99785ca0a7e7720c5b36dc6d72cac9574c8cbbc2f801e23e56fd344b07f22154beba0f08ce8891e643ed995c94d9a69c9f1b5f499027a78572aeebd74d20cc39881c213ee770b1010e4bea718846977ae119f7a023ab58cca0ad752afe656bb3c17256a9f6e9bf19fdd5a38fc82bbe872c5539edb609ef4f79c203ebb140f2e583cb2ad15b4aa5b655016a8449277dbd477ef2c8d6c017db738b18deb4a427d1923ce3ff262735779a418f20a282df920147beabe421ee5319d0568
+aes-128-xts:2718281828459045235360287471352631415926535897932384626433832795:01000000000000000000000000000000:27a7479befa1d476489f308cd4cfa6e2a96e4bbe3208ff25287dd3819616e89cc78cf7f5e543445f8333d8fa7f56000005279fa5d8b5e4ad40e736ddb4d35412328063fd2aab53e5ea1e0a9f332500a5df9487d07a5c92cc512c8866c7e860ce93fdf166a24912b422976146ae20ce846bb7dc9ba94a767aaef20c0d61ad02655ea92dc4c4e41a8952c651d33174be51a10c421110e6d81588ede82103a252d8a750e8768defffed9122810aaeb99f9172af82b604dc4b8e51bcb08235a6f4341332e4ca60482a4ba1a03b3e65008fc5da76b70bf1690db4eae29c5f1badd03c5ccf2a55d705ddcd86d449511ceb7ec30bf12b1fa35b913f9f747a8afd1b130e94bff94effd01a91735ca1726acd0b197c4e5b03393697e126826fb6bbde8ecc1e08298516e2c9ed03ff3c1b7860f6de76d4cecd94c8119855ef5297ca67e9f3e7ff72b1e99785ca0a7e7720c5b36dc6d72cac9574c8cbbc2f801e23e56fd344b07f22154beba0f08ce8891e643ed995c94d9a69c9f1b5f499027a78572aeebd74d20cc39881c213ee770b1010e4bea718846977ae119f7a023ab58cca0ad752afe656bb3c17256a9f6e9bf19fdd5a38fc82bbe872c5539edb609ef4f79c203ebb140f2e583cb2ad15b4aa5b655016a8449277dbd477ef2c8d6c017db738b18deb4a427d1923ce3ff262735779a418f20a282df920147beabe421ee5319d0568:264d3ca8512194fec312c8c9891f279fefdd608d0c027b60483a3fa811d65ee59d52d9e40ec5672d81532b38b6b089ce951f0f9c35590b8b978d175213f329bb1c2fd30f2f7f30492a61a532a79f51d36f5e31a7c9a12c286082ff7d2394d18f783e1a8e72c722caaaa52d8f065657d2631fd25bfd8e5baad6e527d763517501c68c5edc3cdd55435c532d7125c8614deed9adaa3acade5888b87bef641c4c994c8091b5bcd387f3963fb5bc37aa922fbfe3df4e5b915e6eb514717bdd2a74079a5073f5c4bfd46adf7d282e7a393a52579d11a028da4d9cd9c77124f9648ee383b1ac763930e7162a8d37f350b2f74b8472cf09902063c6b32e8c2d9290cefbd7346d1c779a0df50edcde4531da07b099c638e83a755944df2aef1aa31752fd323dcb710fb4bfbb9d22b925bc3577e1b8949e729a90bbafeacf7f7879e7b1147e28ba0bae940db795a61b15ecf4df8db07b824bb062802cc98a9545bb2aaeed77cb3fc6db15dcd7d80d7d5bc406c4970a3478ada8899b329198eb61c193fb6275aa8ca340344a75a862aebe92eee1ce032fd950b47d7704a3876923b4ad62844bf4a09c4dbe8b4397184b7471360c9564880aedddb9baa4af2e75394b08cd32ff479c57a07d3eab5d54de5f9738b8d27f27a9f0ab11799d7b7ffefb2704c95c6ad12c39f1e867a4b7b1d7818a4b753dfd2a89ccb45e001a03a867b187f225dd
+aes-128-xts:2718281828459045235360287471352631415926535897932384626433832795:02000000000000000000000000000000:264d3ca8512194fec312c8c9891f279fefdd608d0c027b60483a3fa811d65ee59d52d9e40ec5672d81532b38b6b089ce951f0f9c35590b8b978d175213f329bb1c2fd30f2f7f30492a61a532a79f51d36f5e31a7c9a12c286082ff7d2394d18f783e1a8e72c722caaaa52d8f065657d2631fd25bfd8e5baad6e527d763517501c68c5edc3cdd55435c532d7125c8614deed9adaa3acade5888b87bef641c4c994c8091b5bcd387f3963fb5bc37aa922fbfe3df4e5b915e6eb514717bdd2a74079a5073f5c4bfd46adf7d282e7a393a52579d11a028da4d9cd9c77124f9648ee383b1ac763930e7162a8d37f350b2f74b8472cf09902063c6b32e8c2d9290cefbd7346d1c779a0df50edcde4531da07b099c638e83a755944df2aef1aa31752fd323dcb710fb4bfbb9d22b925bc3577e1b8949e729a90bbafeacf7f7879e7b1147e28ba0bae940db795a61b15ecf4df8db07b824bb062802cc98a9545bb2aaeed77cb3fc6db15dcd7d80d7d5bc406c4970a3478ada8899b329198eb61c193fb6275aa8ca340344a75a862aebe92eee1ce032fd950b47d7704a3876923b4ad62844bf4a09c4dbe8b4397184b7471360c9564880aedddb9baa4af2e75394b08cd32ff479c57a07d3eab5d54de5f9738b8d27f27a9f0ab11799d7b7ffefb2704c95c6ad12c39f1e867a4b7b1d7818a4b753dfd2a89ccb45e001a03a867b187f225dd:fa762a3680b76007928ed4a4f49a9456031b704782e65e16cecb54ed7d017b5e18abd67b338e81078f21edb7868d901ebe9c731a7c18b5e6dec1d6a72e078ac9a4262f860beefa14f4e821018272e411a951502b6e79066e84252c3346f3aa62344351a291d4bedc7a07618bdea2af63145cc7a4b8d4070691ae890cd65733e7946e9021a1dffc4c59f159425ee6d50ca9b135fa6162cea18a939838dc000fb386fad086acce5ac07cb2ece7fd580b00cfa5e98589631dc25e8e2a3daf2ffdec26531659912c9d8f7a15e5865ea8fb5816d6207052bd7128cd743c12c8118791a4736811935eb982a532349e31dd401e0b660a568cb1a4711f552f55ded59f1f15bf7196b3ca12a91e488ef59d64f3a02bf45239499ac6176ae321c4a211ec545365971c5d3f4f09d4eb139bfdf2073d33180b21002b65cc9865e76cb24cd92c874c24c18350399a936ab3637079295d76c417776b94efce3a0ef7206b15110519655c956cbd8b2489405ee2b09a6b6eebe0c53790a12a8998378b33a5b71159625f4ba49d2a2fdba59fbf0897bc7aabd8d707dc140a80f0f309f835d3da54ab584e501dfa0ee977fec543f74186a802b9a37adb3e8291eca04d66520d229e60401e7282bef486ae059aa70696e0e305d777140a7a883ecdcb69b9ff938e8a4231864c69ca2c2043bed007ff3e605e014bcf518138dc3a25c5e236171a2d01d6
+aes-128-xts:2718281828459045235360287471352631415926535897932384626433832795:fd000000000000000000000000000000:8e41b78c390b5af9d758bb214a67e9f6bf7727b09ac6124084c37611398fa45daad94868600ed391fb1acd4857a95b466e62ef9f4b377244d1c152e7b30d731aad30c716d214b707aed99eb5b5e580b3e887cf7497465651d4b60e6042051da3693c3b78c14489543be8b6ad0ba629565bba202313ba7b0d0c94a3252b676f46cc02ce0f8a7d34c0ed229129673c1f61aed579d08a9203a25aac3a77e9db60267996db38df637356d9dcd1632e369939f2a29d89345c66e05066f1a3677aef18dea4113faeb629e46721a66d0a7e785d3e29af2594eb67dfa982affe0aac058f6e15864269b135418261fc3afb089472cf68c45dd7f231c6249ba0255e1e033833fc4d00a3fe02132d7bc3873614b8aee34273581ea0325c81f0270affa13641d052d36f0757d484014354d02d6883ca15c24d8c3956b1bd027bcf41f151fd8023c5340e5606f37e90fdb87c86fb4fa634b3718a30bace06a66eaf8f63c4aa3b637826a87fe8cfa44282e92cb1615af3a28e53bc74c7cba1a0977be9065d0c1a5dec6c54ae38d37f37aa35283e048e5530a85c4e7a29d7b92ec0c3169cdf2a805c7604bce60049b9fb7b8eaac10f51ae23794ceba68bb58112e293b9b692ca721b37c662f8574ed4dba6f88e170881c82cddc1034a0ca7e284bf0962b6b26292d836fa9f73c1ac770eef0f2d3a1eaf61d3e03555fd424eedd67e18a18094f888:d55f684f81f4426e9fde92a5ff02df2ac896af63962888a97910c1379e20b0a3b1db613fb7fe2e07004329ea5c22bfd33e3dbe4cf58cc608c2c26c19a2e2fe22f98732c2b5cb844cc6c0702d91e1d50fc4382a7eba5635cd602432a2306ac4ce82f8d70c8d9bc15f918fe71e74c622d5cf71178bf6e0b9cc9f2b41dd8dbe441c41cd0c73a6dc47a348f6702f9d0e9b1b1431e948e299b9ec2272ab2c5f0c7be86affa5dec87a0bee81d3d50007edaa2bcfccb35605155ff36ed8edd4a40dcd4b243acd11b2b987bdbfaf91a7cac27e9c5aea525ee53de7b2d3332c8644402b823e94a7db26276d2d23aa07180f76b4fd29b9c0823099c9d62c519880aee7e9697617c1497d47bf3e571950311421b6b734d38b0db91eb85331b91ea9f61530f54512a5a52a4bad589eb69781d537f23297bb459bdad2948a29e1550bf4787e0be95bb173cf5fab17dab7a13a052a63453d97ccec1a321954886b7a1299faaeecae35c6eaaca753b041b5e5f093bf83397fd21dd6b3012066fcc058cc32c3b09d7562dee29509b5839392c9ff05f51f3166aaac4ac5f238038a3045e6f72e48ef0fe8bc675e82c318a268e43970271bf119b81bf6a982746554f84e72b9f00280a320a08142923c23c883423ff949827f29bbacdc1ccdb04938ce6098c95ba6b32528f4ef78eed778b2e122ddfd1cbdd11d1c0a6783e011fc536d63d053260637
+aes-128-xts:2718281828459045235360287471352631415926535897932384626433832795:fe000000000000000000000000000000:d55f684f81f4426e9fde92a5ff02df2ac896af63962888a97910c1379e20b0a3b1db613fb7fe2e07004329ea5c22bfd33e3dbe4cf58cc608c2c26c19a2e2fe22f98732c2b5cb844cc6c0702d91e1d50fc4382a7eba5635cd602432a2306ac4ce82f8d70c8d9bc15f918fe71e74c622d5cf71178bf6e0b9cc9f2b41dd8dbe441c41cd0c73a6dc47a348f6702f9d0e9b1b1431e948e299b9ec2272ab2c5f0c7be86affa5dec87a0bee81d3d50007edaa2bcfccb35605155ff36ed8edd4a40dcd4b243acd11b2b987bdbfaf91a7cac27e9c5aea525ee53de7b2d3332c8644402b823e94a7db26276d2d23aa07180f76b4fd29b9c0823099c9d62c519880aee7e9697617c1497d47bf3e571950311421b6b734d38b0db91eb85331b91ea9f61530f54512a5a52a4bad589eb69781d537f23297bb459bdad2948a29e1550bf4787e0be95bb173cf5fab17dab7a13a052a63453d97ccec1a321954886b7a1299faaeecae35c6eaaca753b041b5e5f093bf83397fd21dd6b3012066fcc058cc32c3b09d7562dee29509b5839392c9ff05f51f3166aaac4ac5f238038a3045e6f72e48ef0fe8bc675e82c318a268e43970271bf119b81bf6a982746554f84e72b9f00280a320a08142923c23c883423ff949827f29bbacdc1ccdb04938ce6098c95ba6b32528f4ef78eed778b2e122ddfd1cbdd11d1c0a6783e011fc536d63d053260637:72efc1ebfe1ee25975a6eb3aa8589dda2b261f1c85bdab442a9e5b2dd1d7c3957a16fc08e526d4b1223f1b1232a11af274c3d70dac57f83e0983c498f1a6f1aecb021c3e70085a1e527f1ce41ee5911a82020161529cd82773762daf5459de94a0a82adae7e1703c808543c29ed6fb32d9e004327c1355180c995a07741493a09c21ba01a387882da4f62534b87bb15d60d197201c0fd3bf30c1500a3ecfecdd66d8721f90bcc4c17ee925c61b0a03727a9c0d5f5ca462fbfa0af1c2513a9d9d4b5345bd27a5f6e653f751693e6b6a2b8ead57d511e00e58c45b7b8d005af79288f5c7c22fd4f1bf7a898b03a5634c6a1ae3f9fae5de4f296a2896b23e7ed43ed14fa5a2803f4d28f0d3ffcf24757677aebdb47bb388378708948a8d4126ed1839e0da29a537a8c198b3c66ab00712dd261674bf45a73d67f76914f830ca014b65596f27e4cf62de66125a5566df9975155628b400fbfb3a29040ed50faffdbb18aece7c5c44693260aab386c0a37b11b114f1c415aebb653be468179428d43a4d8bc3ec38813eca30a13cf1bb18d524f1992d44d8b1a42ea30b22e6c95b199d8d182f8840b09d059585c31ad691fa0619ff038aca2c39a943421157361717c49d322028a74648113bd8c9d7ec77cf3c89c1ec8718ceff8516d96b34c3c614f10699c9abc4ed0411506223bea16af35c883accdbe1104eef0cfdb54e12fb230a
+aes-128-xts:2718281828459045235360287471352631415926535897932384626433832795:ff000000000000000000000000000000:72efc1ebfe1ee25975a6eb3aa8589dda2b261f1c85bdab442a9e5b2dd1d7c3957a16fc08e526d4b1223f1b1232a11af274c3d70dac57f83e0983c498f1a6f1aecb021c3e70085a1e527f1ce41ee5911a82020161529cd82773762daf5459de94a0a82adae7e1703c808543c29ed6fb32d9e004327c1355180c995a07741493a09c21ba01a387882da4f62534b87bb15d60d197201c0fd3bf30c1500a3ecfecdd66d8721f90bcc4c17ee925c61b0a03727a9c0d5f5ca462fbfa0af1c2513a9d9d4b5345bd27a5f6e653f751693e6b6a2b8ead57d511e00e58c45b7b8d005af79288f5c7c22fd4f1bf7a898b03a5634c6a1ae3f9fae5de4f296a2896b23e7ed43ed14fa5a2803f4d28f0d3ffcf24757677aebdb47bb388378708948a8d4126ed1839e0da29a537a8c198b3c66ab00712dd261674bf45a73d67f76914f830ca014b65596f27e4cf62de66125a5566df9975155628b400fbfb3a29040ed50faffdbb18aece7c5c44693260aab386c0a37b11b114f1c415aebb653be468179428d43a4d8bc3ec38813eca30a13cf1bb18d524f1992d44d8b1a42ea30b22e6c95b199d8d182f8840b09d059585c31ad691fa0619ff038aca2c39a943421157361717c49d322028a74648113bd8c9d7ec77cf3c89c1ec8718ceff8516d96b34c3c614f10699c9abc4ed0411506223bea16af35c883accdbe1104eef0cfdb54e12fb230a:3260ae8dad1f4a32c5cafe3ab0eb95549d461a67ceb9e5aa2d3afb62dece0553193ba50c75be251e08d1d08f1088576c7efdfaaf3f459559571e12511753b07af073f35da06af0ce0bbf6b8f5ccc5cea500ec1b211bd51f63b606bf6528796ca12173ba39b8935ee44ccce646f90a45bf9ccc567f0ace13dc2d53ebeedc81f58b2e41179dddf0d5a5c42f5d8506c1a5d2f8f59f3ea873cbcd0eec19acbf325423bd3dcb8c2b1bf1d1eaed0eba7f0698e4314fbeb2f1566d1b9253008cbccf45a2b0d9c5c9c21474f4076e02be26050b99dee4fd68a4cf890e496e4fcae7b70f94ea5a9062da0daeba1993d2ccd1dd3c244b8428801495a58b216547e7e847c46d1d756377b6242d2e5fb83bf752b54e0df71e889f3a2bb0f4c10805bf3c590376e3c24e22ff57f7fa965577375325cea5d920db94b9c336b455f6e894c01866fe9fbb8c8d3f70a2957285f6dfb5dcd8cbf54782f8fe7766d4723819913ac773421e3a31095866bad22c86a6036b2518b2059b4229d18c8c2ccbdf906c6cc6e82464ee57bddb0bebcb1dc645325bfb3e665ef7251082c88ebb1cf203bd779fdd38675713c8daadd17e1cabee432b09787b6ddf3304e38b731b45df5df51b78fcfb3d32466028d0ba36555e7e11ab0ee0666061d1645d962444bc47a38188930a84b4d561395c73c087021927ca638b7afc8a8679ccb84c26555440ec7f10445cd
+
+aes-256-xts:27182818284590452353602874713526624977572470936999595749669676273141592653589793238462643383279502884197169399375105820974944592:ff000000000000000000000000000000:000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff:1c3b3a102f770386e4836c99e370cf9bea00803f5e482357a4ae12d414a3e63b5d31e276f8fe4a8d66b317f9ac683f44680a86ac35adfc3345befecb4bb188fd5776926c49a3095eb108fd1098baec70aaa66999a72a82f27d848b21d4a741b0c5cd4d5fff9dac89aeba122961d03a757123e9870f8acf1000020887891429ca2a3e7a7d7df7b10355165c8b9a6d0a7de8b062c4500dc4cd120c0f7418dae3d0b5781c34803fa75421c790dfe1de1834f280d7667b327f6c8cd7557e12ac3a0f93ec05c52e0493ef31a12d3d9260f79a289d6a379bc70c50841473d1a8cc81ec583e9645e07b8d9670655ba5bbcfecc6dc3966380ad8fecb17b6ba02469a020a84e18e8f84252070c13e9f1f289be54fbc481457778f616015e1327a02b140f1505eb309326d68378f8374595c849d84f4c333ec4423885143cb47bd71c5edae9be69a2ffeceb1bec9de244fbe15992b11b77c040f12bd8f6a975a44a0f90c29a9abc3d4d893927284c58754cce294529f8614dcd2aba991925fedc4ae74ffac6e333b93eb4aff0479da9a410e4450e0dd7ae4c6e2910900575da401fc07059f645e8b7e9bfdef33943054ff84011493c27b3429eaedb4ed5376441a77ed43851ad77f16f541dfd269d50d6a5f14fb0aab1cbb4c1550be97f7ab4066193c4caa773dad38014bd2092fa755c824bb5e54c4f36ffda9fcea70b9c6e693e148c151
+aes-256-xts:27182818284590452353602874713526624977572470936999595749669676273141592653589793238462643383279502884197169399375105820974944592:ffff0000000000000000000000000000:000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff:77a31251618a15e6b92d1d66dffe7b50b50bad552305ba0217a610688eff7e11e1d0225438e093242d6db274fde801d4cae06f2092c728b2478559df58e837c2469ee4a4fa794e4bbc7f39bc026e3cb72c33b0888f25b4acf56a2a9804f1ce6d3d6e1dc6ca181d4b546179d55544aa7760c40d06741539c7e3cd9d2f6650b2013fd0eeb8c2b8e3d8d240ccae2d4c98320a7442e1c8d75a42d6e6cfa4c2eca1798d158c7aecdf82490f24bb9b38e108bcda12c3faf9a21141c3613b58367f922aaa26cd22f23d708dae699ad7cb40a8ad0b6e2784973dcb605684c08b8d6998c69aac049921871ebb65301a4619ca80ecb485a31d744223ce8ddc2394828d6a80470c092f5ba413c3378fa6054255c6f9df4495862bbb3287681f931b687c888abf844dfc8fc28331e579928cd12bd2390ae123cf03818d14dedde5c0c24c8ab018bfca75ca096f2d531f3d1619e785f1ada437cab92e980558b3dce1474afb75bfedbf8ff54cb2618e0244c9ac0d3c66fb51598cd2db11f9be39791abe447c63094f7c453b7ff87cb5bb36b7c79efb0872d17058b83b15ab0866ad8a58656c5a7e20dbdf308b2461d97c0ec0024a2715055249cf3b478ddd4740de654f75ca686e0d7345c69ed50cdc2a8b332b1f8824108ac937eb050585608ee734097fc09054fbff89eeaeea791f4a7ab1f9868294a4f9e27b42af8100cb9d59cef9645803
+aes-256-xts:27182818284590452353602874713526624977572470936999595749669676273141592653589793238462643383279502884197169399375105820974944592:ffffff00000000000000000000000000:000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff:e387aaa58ba483afa7e8eb469778317ecf4cf573aa9d4eac23f2cdf914e4e200a8b490e42ee646802dc6ee2b471b278195d60918ececb44bf79966f83faba0499298ebc699c0c8634715a320bb4f075d622e74c8c932004f25b41e361025b5a87815391f6108fc4afa6a05d9303c6ba68a128a55705d415985832fdeaae6c8e19110e84d1b1f199a2692119edc96132658f09da7c623efcec712537a3d94c0bf5d7e352ec94ae5797fdb377dc1551150721adf15bd26a8efc2fcaad56881fa9e62462c28f30ae1ceaca93c345cf243b73f542e2074a705bd2643bb9f7cc79bb6e7091ea6e232df0f9ad0d6cf502327876d82207abf2115cdacf6d5a48f6c1879a65b115f0f8b3cb3c59d15dd8c769bc014795a1837f3901b5845eb491adfefe097b1fa30a12fc1f65ba22905031539971a10f2f36c321bb51331cdefb39e3964c7ef079994f5b69b2edd83a71ef549971ee93f44eac3938fcdd61d01fa71799da3a8091c4c48aa9ed263ff0749df95d44fef6a0bb578ec69456aa5408ae32c7af08ad7ba8921287e3bbee31b767be06a0e705c864a769137df28292283ea81a2480241b44d9921cdbec1bc28dc1fda114bd8e5217ac9d8ebafa720e9da4f9ace231cc949e5b96fe76ffc21063fddc83a6b8679c00d35e09576a875305bed5f36ed242c8900dd1fa965bc950dfce09b132263a1eef52dd6888c309f5a7d712826
+aes-256-xts:27182818284590452353602874713526624977572470936999595749669676273141592653589793238462643383279502884197169399375105820974944592:ffffffff000000000000000000000000:000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff:bf53d2dade78e822a4d949a9bc6766b01b06a8ef70d26748c6a7fc36d80ae4c5520f7c4ab0ac8544424fa405162fef5a6b7f229498063618d39f0003cb5fb8d1c86b643497da1ff945c8d3bedeca4f479702a7a735f043ddb1d6aaade3c4a0ac7ca7f3fa5279bef56f82cd7a2f38672e824814e10700300a055e1630b8f1cb0e919f5e942010a416e2bf48cb46993d3cb6a51c19bacf864785a00bc2ecff15d350875b246ed53e68be6f55bd7e05cfc2b2ed6432198a6444b6d8c247fab941f569768b5c429366f1d3f00f0345b96123d56204c01c63b22ce78baf116e525ed90fdea39fa469494d3866c31e05f295ff21fea8d4e6e13d67e47ce722e9698a1c1048d68ebcde76b86fcf976eab8aa9790268b7068e017a8b9b749409514f1053027fd16c3786ea1bac5f15cb79711ee2abe82f5cf8b13ae73030ef5b9e4457e75d1304f988d62dd6fc4b94ed38ba831da4b7634971b6cd8ec325d9c61c00f1df73627ed3745a5e8489f3a95c69639c32cd6e1d537a85f75cc844726e8a72fc0077ad22000f1d5078f6b866318c668f1ad03d5a5fced5219f2eabbd0aa5c0f460d183f04404a0d6f469558e81fab24a167905ab4c7878502ad3e38fdbe62a41556cec37325759533ce8f25f367c87bb5578d667ae93f9e2fd99bcbc5f2fbba88cf6516139420fcff3b7361d86322c4bd84c82f335abb152c4a93411373aaa8220
+aes-256-xts:27182818284590452353602874713526624977572470936999595749669676273141592653589793238462643383279502884197169399375105820974944592:ffffffffff0000000000000000000000:000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff:64497e5a831e4a932c09be3e5393376daa599548b816031d224bbf50a818ed2350eae7e96087c8a0db51ad290bd00c1ac1620857635bf246c176ab463be30b808da548081ac847b158e1264be25bb0910bbc92647108089415d45fab1b3d2604e8a8eff1ae4020cfa39936b66827b23f371b92200be90251e6d73c5f86de5fd4a950781933d79a28272b782a2ec313efdfcc0628f43d744c2dc2ff3dcb66999b50c7ca895b0c64791eeaa5f29499fb1c026f84ce5b5c72ba1083cddb5ce45434631665c333b60b11593fb253c5179a2c8db813782a004856a1653011e93fb6d876c18366dd8683f53412c0c180f9c848592d593f8609ca736317d356e13e2bff3a9f59cd9aeb19cd482593d8c46128bb32423b37a9adfb482b99453fbe25a41bf6feb4aa0bef5ed24bf73c762978025482c13115e4015aac992e5613a3b5c2f685b84795cb6e9b2656d8c88157e52c42f978d8634c43d06fea928f2822e465aa6576e9bf419384506cc3ce3c54ac1a6f67dc66f3b30191e698380bc999b05abce19dc0c6dcc2dd001ec535ba18deb2df1a101023108318c75dc98611a09dc48a0acdec676fabdf222f07e026f059b672b56e5cbc8e1d21bbd867dd927212054681d70ea737134cdfce93b6f82ae22423274e58a0821cc5502e2d0ab4585e94de6975be5e0b4efce51cd3e70c25a1fbbbd609d273ad5b0d59631c531f6a0a57b9
+
+aes-128-xts:fffefdfcfbfaf9f8f7f6f5f4f3f2f1f0bfbebdbcbbbab9b8b7b6b5b4b3b2b1b0:9a785634120000000000000000000000:000102030405060708090a0b0c0d0e0f10:6c1625db4671522d3d7599601de7ca09ed
+aes-128-xts:fffefdfcfbfaf9f8f7f6f5f4f3f2f1f0bfbebdbcbbbab9b8b7b6b5b4b3b2b1b0:9a785634120000000000000000000000:000102030405060708090a0b0c0d0e0f1011:d069444b7a7e0cab09e24447d24deb1fedbf
+aes-128-xts:fffefdfcfbfaf9f8f7f6f5f4f3f2f1f0bfbebdbcbbbab9b8b7b6b5b4b3b2b1b0:9a785634120000000000000000000000:000102030405060708090a0b0c0d0e0f101112:e5df1351c0544ba1350b3363cd8ef4beedbf9d
+aes-128-xts:fffefdfcfbfaf9f8f7f6f5f4f3f2f1f0bfbebdbcbbbab9b8b7b6b5b4b3b2b1b0:9a785634120000000000000000000000:000102030405060708090a0b0c0d0e0f10111213:9d84c813f719aa2c7be3f66171c7c5c2edbf9dac
+aes-128-xts:e0e1e2e3e4e5e6e7e8e9eaebecedeeefc0c1c2c3c4c5c6c7c8c9cacbcccdcecf:21436587a90000000000000000000000:000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff:38b45812ef43a05bd957e545907e223b954ab4aaf088303ad910eadf14b42be68b2461149d8c8ba85f992be970bc621f1b06573f63e867bf5875acafa04e42ccbd7bd3c2a0fb1fff791ec5ec36c66ae4ac1e806d81fbf709dbe29e471fad38549c8e66f5345d7c1eb94f405d1ec785cc6f6a68f6254dd8339f9d84057e01a17741990482999516b5611a38f41bb6478e6f173f320805dd71b1932fc333cb9ee39936beea9ad96fa10fb4112b901734ddad40bc1878995f8e11aee7d141a2f5d48b7a4e1e7f0b2c04830e69a4fd1378411c2f287edf48c6c4e5c247a19680f7fe41cefbd49b582106e3616cbbe4dfb2344b2ae9519391f3e0fb4922254b1d6d2d19c6d4d537b3a26f3bcc51588b32f3eca0829b6a5ac72578fb814fb43cf80d64a233e3f997a3f02683342f2b33d25b492536b93becb2f5e1a8b82f5b883342729e8ae09d16938841a21a97fb543eea3bbff59f13c1a18449e398701c1ad51648346cbc04c27bb2da3b93a1372ccae548fb53bee476f9e9c91773b1bb19828394d55d3e1a20ed69113a860b6829ffa847224604435070221b257e8dff783615d2cae4803a93aa4334ab482a0afac9c0aeda70b45a481df5dec5df8cc0f423c77a5fd46cd312021d4b438862419a791be03bb4d97c0e59578542531ba466a83baf92cefc151b5cc1611a167893819b63fb8a6b18e86de60290fa72b797b0ce59f3
+# AES wrap tests from RFC3394
+id-aes128-wrap:000102030405060708090A0B0C0D0E0F::00112233445566778899AABBCCDDEEFF:1FA68B0A8112B447AEF34BD8FB5A7B829D3E862371D2CFE5
+id-aes192-wrap:000102030405060708090A0B0C0D0E0F1011121314151617::00112233445566778899AABBCCDDEEFF:96778B25AE6CA435F92B5B97C050AED2468AB8A17AD84E5D
+id-aes256-wrap:000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F::00112233445566778899AABBCCDDEEFF:64E8C3F9CE0F5BA263E9777905818A2A93C8191E7D6E8AE7
+id-aes192-wrap:000102030405060708090A0B0C0D0E0F1011121314151617::00112233445566778899AABBCCDDEEFF0001020304050607:031D33264E15D33268F24EC260743EDCE1C6C7DDEE725A936BA814915C6762D2
+id-aes256-wrap:000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F::00112233445566778899AABBCCDDEEFF0001020304050607:A8F9BC1612C68B3FF6E6F4FBE30E71E4769C8B80A32CB8958CD5D17D6B254DA1
+id-aes256-wrap:000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F::00112233445566778899AABBCCDDEEFF000102030405060708090A0B0C0D0E0F:28C9F404C4B810F4CBCCB35CFB87F8263F5786E2D80ED326CBC7F0E71A99F43BFB988B9B7A02DD21
diff --git a/crypto/openssl/crypto/evp/m_dss.c b/crypto/openssl/crypto/evp/m_dss.c
index f22ba52..1478448 100644
--- a/crypto/openssl/crypto/evp/m_dss.c
+++ b/crypto/openssl/crypto/evp/m_dss.c
@@ -66,7 +66,6 @@
#endif
#ifndef OPENSSL_NO_SHA
-# ifndef OPENSSL_FIPS
static int init(EVP_MD_CTX *ctx)
{
@@ -102,5 +101,4 @@ const EVP_MD *EVP_dss(void)
{
return (&dsa_md);
}
-# endif
#endif
diff --git a/crypto/openssl/crypto/evp/m_dss1.c b/crypto/openssl/crypto/evp/m_dss1.c
index 976148e..e36fabf 100644
--- a/crypto/openssl/crypto/evp/m_dss1.c
+++ b/crypto/openssl/crypto/evp/m_dss1.c
@@ -68,8 +68,6 @@
# include <openssl/dsa.h>
# endif
-# ifndef OPENSSL_FIPS
-
static int init(EVP_MD_CTX *ctx)
{
return SHA1_Init(ctx->md_data);
@@ -104,5 +102,4 @@ const EVP_MD *EVP_dss1(void)
{
return (&dss1_md);
}
-# endif
#endif
diff --git a/crypto/openssl/crypto/evp/m_ecdsa.c b/crypto/openssl/crypto/evp/m_ecdsa.c
index d11a13a..803d314 100644
--- a/crypto/openssl/crypto/evp/m_ecdsa.c
+++ b/crypto/openssl/crypto/evp/m_ecdsa.c
@@ -116,7 +116,6 @@
#include <openssl/x509.h>
#ifndef OPENSSL_NO_SHA
-# ifndef OPENSSL_FIPS
static int init(EVP_MD_CTX *ctx)
{
@@ -152,5 +151,4 @@ const EVP_MD *EVP_ecdsa(void)
{
return (&ecdsa_md);
}
-# endif
#endif
diff --git a/crypto/openssl/crypto/evp/m_sha1.c b/crypto/openssl/crypto/evp/m_sha1.c
index 0cc6355..a74e6b7 100644
--- a/crypto/openssl/crypto/evp/m_sha1.c
+++ b/crypto/openssl/crypto/evp/m_sha1.c
@@ -59,16 +59,14 @@
#include <stdio.h>
#include "cryptlib.h"
-#ifndef OPENSSL_FIPS
+#ifndef OPENSSL_NO_SHA
-# ifndef OPENSSL_NO_SHA
-
-# include <openssl/evp.h>
-# include <openssl/objects.h>
-# include <openssl/sha.h>
-# ifndef OPENSSL_NO_RSA
-# include <openssl/rsa.h>
-# endif
+# include <openssl/evp.h>
+# include <openssl/objects.h>
+# include <openssl/sha.h>
+# ifndef OPENSSL_NO_RSA
+# include <openssl/rsa.h>
+# endif
static int init(EVP_MD_CTX *ctx)
{
@@ -104,9 +102,9 @@ const EVP_MD *EVP_sha1(void)
{
return (&sha1_md);
}
-# endif
+#endif
-# ifndef OPENSSL_NO_SHA256
+#ifndef OPENSSL_NO_SHA256
static int init224(EVP_MD_CTX *ctx)
{
return SHA224_Init(ctx->md_data);
@@ -171,9 +169,9 @@ const EVP_MD *EVP_sha256(void)
{
return (&sha256_md);
}
-# endif /* ifndef OPENSSL_NO_SHA256 */
+#endif /* ifndef OPENSSL_NO_SHA256 */
-# ifndef OPENSSL_NO_SHA512
+#ifndef OPENSSL_NO_SHA512
static int init384(EVP_MD_CTX *ctx)
{
return SHA384_Init(ctx->md_data);
@@ -234,6 +232,4 @@ const EVP_MD *EVP_sha512(void)
{
return (&sha512_md);
}
-# endif /* ifndef OPENSSL_NO_SHA512 */
-
-#endif
+#endif /* ifndef OPENSSL_NO_SHA512 */
diff --git a/crypto/openssl/crypto/evp/m_sigver.c b/crypto/openssl/crypto/evp/m_sigver.c
index e153a18..4492d20 100644
--- a/crypto/openssl/crypto/evp/m_sigver.c
+++ b/crypto/openssl/crypto/evp/m_sigver.c
@@ -73,15 +73,18 @@ static int do_sigver_init(EVP_MD_CTX *ctx, EVP_PKEY_CTX **pctx,
if (ctx->pctx == NULL)
return 0;
- if (type == NULL) {
- int def_nid;
- if (EVP_PKEY_get_default_digest_nid(pkey, &def_nid) > 0)
- type = EVP_get_digestbynid(def_nid);
- }
+ if (!(ctx->pctx->pmeth->flags & EVP_PKEY_FLAG_SIGCTX_CUSTOM)) {
- if (type == NULL) {
- EVPerr(EVP_F_DO_SIGVER_INIT, EVP_R_NO_DEFAULT_DIGEST);
- return 0;
+ if (type == NULL) {
+ int def_nid;
+ if (EVP_PKEY_get_default_digest_nid(pkey, &def_nid) > 0)
+ type = EVP_get_digestbynid(def_nid);
+ }
+
+ if (type == NULL) {
+ EVPerr(EVP_F_DO_SIGVER_INIT, EVP_R_NO_DEFAULT_DIGEST);
+ return 0;
+ }
}
if (ver) {
@@ -103,6 +106,8 @@ static int do_sigver_init(EVP_MD_CTX *ctx, EVP_PKEY_CTX **pctx,
return 0;
if (pctx)
*pctx = ctx->pctx;
+ if (ctx->pctx->pmeth->flags & EVP_PKEY_FLAG_SIGCTX_CUSTOM)
+ return 1;
if (!EVP_DigestInit_ex(ctx, type, e))
return 0;
return 1;
@@ -124,7 +129,19 @@ int EVP_DigestSignFinal(EVP_MD_CTX *ctx, unsigned char *sigret,
size_t *siglen)
{
int sctx, r = 0;
- if (ctx->pctx->pmeth->signctx)
+ EVP_PKEY_CTX *pctx = ctx->pctx;
+ if (pctx->pmeth->flags & EVP_PKEY_FLAG_SIGCTX_CUSTOM) {
+ EVP_PKEY_CTX *dctx;
+ if (!sigret)
+ return pctx->pmeth->signctx(pctx, sigret, siglen, ctx);
+ dctx = EVP_PKEY_CTX_dup(ctx->pctx);
+ if (!dctx)
+ return 0;
+ r = dctx->pmeth->signctx(dctx, sigret, siglen, ctx);
+ EVP_PKEY_CTX_free(dctx);
+ return r;
+ }
+ if (pctx->pmeth->signctx)
sctx = 1;
else
sctx = 0;
@@ -147,20 +164,19 @@ int EVP_DigestSignFinal(EVP_MD_CTX *ctx, unsigned char *sigret,
return 0;
} else {
if (sctx) {
- if (ctx->pctx->pmeth->signctx(ctx->pctx, sigret, siglen, ctx) <=
- 0)
+ if (pctx->pmeth->signctx(pctx, sigret, siglen, ctx) <= 0)
return 0;
} else {
int s = EVP_MD_size(ctx->digest);
- if (s < 0
- || EVP_PKEY_sign(ctx->pctx, sigret, siglen, NULL, s) <= 0)
+ if (s < 0 || EVP_PKEY_sign(pctx, sigret, siglen, NULL, s) <= 0)
return 0;
}
}
return 1;
}
-int EVP_DigestVerifyFinal(EVP_MD_CTX *ctx, unsigned char *sig, size_t siglen)
+int EVP_DigestVerifyFinal(EVP_MD_CTX *ctx, const unsigned char *sig,
+ size_t siglen)
{
EVP_MD_CTX tmp_ctx;
unsigned char md[EVP_MAX_MD_SIZE];
diff --git a/crypto/openssl/crypto/evp/p_lib.c b/crypto/openssl/crypto/evp/p_lib.c
index 2b84dc7..1171d30 100644
--- a/crypto/openssl/crypto/evp/p_lib.c
+++ b/crypto/openssl/crypto/evp/p_lib.c
@@ -337,7 +337,7 @@ int EVP_PKEY_set1_DH(EVP_PKEY *pkey, DH *key)
DH *EVP_PKEY_get1_DH(EVP_PKEY *pkey)
{
- if (pkey->type != EVP_PKEY_DH) {
+ if (pkey->type != EVP_PKEY_DH && pkey->type != EVP_PKEY_DHX) {
EVPerr(EVP_F_EVP_PKEY_GET1_DH, EVP_R_EXPECTING_A_DH_KEY);
return NULL;
}
diff --git a/crypto/openssl/crypto/evp/pmeth_lib.c b/crypto/openssl/crypto/evp/pmeth_lib.c
index ae8bccb..9f81d10 100644
--- a/crypto/openssl/crypto/evp/pmeth_lib.c
+++ b/crypto/openssl/crypto/evp/pmeth_lib.c
@@ -75,6 +75,7 @@ STACK_OF(EVP_PKEY_METHOD) *app_pkey_methods = NULL;
extern const EVP_PKEY_METHOD rsa_pkey_meth, dh_pkey_meth, dsa_pkey_meth;
extern const EVP_PKEY_METHOD ec_pkey_meth, hmac_pkey_meth, cmac_pkey_meth;
+extern const EVP_PKEY_METHOD dhx_pkey_meth;
static const EVP_PKEY_METHOD *standard_methods[] = {
#ifndef OPENSSL_NO_RSA
@@ -90,7 +91,10 @@ static const EVP_PKEY_METHOD *standard_methods[] = {
&ec_pkey_meth,
#endif
&hmac_pkey_meth,
- &cmac_pkey_meth
+ &cmac_pkey_meth,
+#ifndef OPENSSL_NO_DH
+ &dhx_pkey_meth
+#endif
};
DECLARE_OBJ_BSEARCH_CMP_FN(const EVP_PKEY_METHOD *, const EVP_PKEY_METHOD *,
diff --git a/crypto/openssl/crypto/hmac/hm_ameth.c b/crypto/openssl/crypto/hmac/hm_ameth.c
index 641c797..29b2b5d 100644
--- a/crypto/openssl/crypto/hmac/hm_ameth.c
+++ b/crypto/openssl/crypto/hmac/hm_ameth.c
@@ -87,7 +87,7 @@ static int hmac_pkey_ctrl(EVP_PKEY *pkey, int op, long arg1, void *arg2)
{
switch (op) {
case ASN1_PKEY_CTRL_DEFAULT_MD_NID:
- *(int *)arg2 = NID_sha1;
+ *(int *)arg2 = NID_sha256;
return 1;
default:
diff --git a/crypto/openssl/crypto/hmac/hmac.c b/crypto/openssl/crypto/hmac/hmac.c
index 33d88be..51a0a3e 100644
--- a/crypto/openssl/crypto/hmac/hmac.c
+++ b/crypto/openssl/crypto/hmac/hmac.c
@@ -72,6 +72,16 @@ int HMAC_Init_ex(HMAC_CTX *ctx, const void *key, int len,
unsigned char pad[HMAC_MAX_MD_CBLOCK];
#ifdef OPENSSL_FIPS
+ /* If FIPS mode switch to approved implementation if possible */
+ if (FIPS_mode()) {
+ const EVP_MD *fipsmd;
+ if (md) {
+ fipsmd = FIPS_get_digestbynid(EVP_MD_type(md));
+ if (fipsmd)
+ md = fipsmd;
+ }
+ }
+
if (FIPS_mode()) {
/* If we have an ENGINE need to allow non FIPS */
if ((impl || ctx->i_ctx.engine)
diff --git a/crypto/openssl/crypto/hmac/hmactest.c b/crypto/openssl/crypto/hmac/hmactest.c
index 271d0eb..5a57395 100644
--- a/crypto/openssl/crypto/hmac/hmactest.c
+++ b/crypto/openssl/crypto/hmac/hmactest.c
@@ -195,6 +195,7 @@ int main(int argc, char *argv[])
}
printf("test 4 ok\n");
test5:
+ HMAC_CTX_cleanup(&ctx);
HMAC_CTX_init(&ctx);
if (HMAC_Init_ex(&ctx, test[4].key, test[4].key_len, NULL, NULL)) {
printf("Should fail to initialise HMAC with empty MD (test 5)\n");
@@ -284,6 +285,7 @@ test5:
printf("test 5 ok\n");
}
test6:
+ HMAC_CTX_cleanup(&ctx);
HMAC_CTX_init(&ctx);
if (!HMAC_Init_ex(&ctx, test[7].key, test[7].key_len, EVP_sha1(), NULL)) {
printf("Failed to initialise HMAC (test 6)\n");
@@ -314,6 +316,7 @@ test6:
printf("test 6 ok\n");
}
end:
+ HMAC_CTX_cleanup(&ctx);
EXIT(err);
return (0);
}
diff --git a/crypto/openssl/crypto/jpake/jpake.c b/crypto/openssl/crypto/jpake/jpake.c
index ed2e888..8c38727 100644
--- a/crypto/openssl/crypto/jpake/jpake.c
+++ b/crypto/openssl/crypto/jpake/jpake.c
@@ -4,6 +4,7 @@
#include <openssl/sha.h>
#include <openssl/err.h>
#include <memory.h>
+#include <string.h>
/*
* In the definition, (xa, xb, xc, xd) are Alice's (x1, x2, x3, x4) or
diff --git a/crypto/openssl/crypto/md32_common.h b/crypto/openssl/crypto/md32_common.h
index 1823833..96828d2 100644
--- a/crypto/openssl/crypto/md32_common.h
+++ b/crypto/openssl/crypto/md32_common.h
@@ -215,12 +215,30 @@
asm ("bswapl %0":"=r"(r):"0"(r)); \
*((unsigned int *)(c))=r; (c)+=4; r; })
# endif
+# elif defined(__aarch64__)
+# if defined(__BYTE_ORDER__)
+# if defined(__ORDER_LITTLE_ENDIAN__) && __BYTE_ORDER__==__ORDER_LITTLE_ENDIAN__
+# define HOST_c2l(c,l) ({ unsigned int r; \
+ asm ("rev %w0,%w1" \
+ :"=r"(r) \
+ :"r"(*((const unsigned int *)(c))));\
+ (c)+=4; (l)=r; })
+# define HOST_l2c(l,c) ({ unsigned int r; \
+ asm ("rev %w0,%w1" \
+ :"=r"(r) \
+ :"r"((unsigned int)(l)));\
+ *((unsigned int *)(c))=r; (c)+=4; r; })
+# elif defined(__ORDER_BIG_ENDIAN__) && __BYTE_ORDER__==__ORDER_BIG_ENDIAN__
+# define HOST_c2l(c,l) ((l)=*((const unsigned int *)(c)), (c)+=4, (l))
+# define HOST_l2c(l,c) (*((unsigned int *)(c))=(l), (c)+=4, (l))
+# endif
+# endif
# endif
# endif
-# endif
-# if defined(__s390__) || defined(__s390x__)
-# define HOST_c2l(c,l) ((l)=*((const unsigned int *)(c)), (c)+=4, (l))
-# define HOST_l2c(l,c) (*((unsigned int *)(c))=(l), (c)+=4, (l))
+# if defined(__s390__) || defined(__s390x__)
+# define HOST_c2l(c,l) ((l)=*((const unsigned int *)(c)), (c)+=4, (l))
+# define HOST_l2c(l,c) (*((unsigned int *)(c))=(l), (c)+=4, (l))
+# endif
# endif
# ifndef HOST_c2l
@@ -250,12 +268,12 @@
(c)+=4; (l); })
# endif
# endif
-# endif
-# if defined(__i386) || defined(__i386__) || defined(__x86_64) || defined(__x86_64__)
-# ifndef B_ENDIAN
- /* See comment in DATA_ORDER_IS_BIG_ENDIAN section. */
-# define HOST_c2l(c,l) ((l)=*((const unsigned int *)(c)), (c)+=4, l)
-# define HOST_l2c(l,c) (*((unsigned int *)(c))=(l), (c)+=4, l)
+# if defined(__i386) || defined(__i386__) || defined(__x86_64) || defined(__x86_64__)
+# ifndef B_ENDIAN
+ /* See comment in DATA_ORDER_IS_BIG_ENDIAN section. */
+# define HOST_c2l(c,l) ((l)=*((const unsigned int *)(c)), (c)+=4, l)
+# define HOST_l2c(l,c) (*((unsigned int *)(c))=(l), (c)+=4, l)
+# endif
# endif
# endif
diff --git a/crypto/openssl/crypto/md5/Makefile b/crypto/openssl/crypto/md5/Makefile
index 0f87dbd..f5240da 100644
--- a/crypto/openssl/crypto/md5/Makefile
+++ b/crypto/openssl/crypto/md5/Makefile
@@ -52,6 +52,9 @@ md5-ia64.s: asm/md5-ia64.S
$(CC) $(CFLAGS) -E asm/md5-ia64.S | \
$(PERL) -ne 's/;\s+/;\n/g; print;' > $@
+md5-sparcv9.S: asm/md5-sparcv9.pl
+ $(PERL) asm/md5-sparcv9.pl $@ $(CFLAGS)
+
files:
$(PERL) $(TOP)/util/files.pl Makefile >> $(TOP)/MINFO
diff --git a/crypto/openssl/crypto/md5/asm/md5-sparcv9.pl b/crypto/openssl/crypto/md5/asm/md5-sparcv9.pl
new file mode 100755
index 0000000..407da3c
--- /dev/null
+++ b/crypto/openssl/crypto/md5/asm/md5-sparcv9.pl
@@ -0,0 +1,430 @@
+#!/usr/bin/env perl
+
+# ====================================================================
+# Written by Andy Polyakov <appro@openssl.org> for the OpenSSL
+# project. The module is, however, dual licensed under OpenSSL and
+# CRYPTOGAMS licenses depending on where you obtain it. For further
+# details see http://www.openssl.org/~appro/cryptogams/.
+#
+# Hardware SPARC T4 support by David S. Miller <davem@davemloft.net>.
+# ====================================================================
+
+# MD5 for SPARCv9, 6.9 cycles per byte on UltraSPARC, >40% faster than
+# code generated by Sun C 5.2.
+
+# SPARC T4 MD5 hardware achieves 3.20 cycles per byte, which is 2.1x
+# faster than software. Multi-process benchmark saturates at 12x
+# single-process result on 8-core processor, or ~11GBps per 2.85GHz
+# socket.
+
+$output=shift;
+open STDOUT,">$output";
+
+use integer;
+
+($ctx,$inp,$len)=("%i0","%i1","%i2"); # input arguments
+
+# 64-bit values
+@X=("%o0","%o1","%o2","%o3","%o4","%o5","%o7","%g1","%g2");
+$tx="%g3";
+($AB,$CD)=("%g4","%g5");
+
+# 32-bit values
+@V=($A,$B,$C,$D)=map("%l$_",(0..3));
+($t1,$t2,$t3,$saved_asi)=map("%l$_",(4..7));
+($shr,$shl1,$shl2)=("%i3","%i4","%i5");
+
+my @K=( 0xd76aa478,0xe8c7b756,0x242070db,0xc1bdceee,
+ 0xf57c0faf,0x4787c62a,0xa8304613,0xfd469501,
+ 0x698098d8,0x8b44f7af,0xffff5bb1,0x895cd7be,
+ 0x6b901122,0xfd987193,0xa679438e,0x49b40821,
+
+ 0xf61e2562,0xc040b340,0x265e5a51,0xe9b6c7aa,
+ 0xd62f105d,0x02441453,0xd8a1e681,0xe7d3fbc8,
+ 0x21e1cde6,0xc33707d6,0xf4d50d87,0x455a14ed,
+ 0xa9e3e905,0xfcefa3f8,0x676f02d9,0x8d2a4c8a,
+
+ 0xfffa3942,0x8771f681,0x6d9d6122,0xfde5380c,
+ 0xa4beea44,0x4bdecfa9,0xf6bb4b60,0xbebfbc70,
+ 0x289b7ec6,0xeaa127fa,0xd4ef3085,0x04881d05,
+ 0xd9d4d039,0xe6db99e5,0x1fa27cf8,0xc4ac5665,
+
+ 0xf4292244,0x432aff97,0xab9423a7,0xfc93a039,
+ 0x655b59c3,0x8f0ccc92,0xffeff47d,0x85845dd1,
+ 0x6fa87e4f,0xfe2ce6e0,0xa3014314,0x4e0811a1,
+ 0xf7537e82,0xbd3af235,0x2ad7d2bb,0xeb86d391, 0 );
+
+sub R0 {
+ my ($i,$a,$b,$c,$d) = @_;
+ my $rot = (7,12,17,22)[$i%4];
+ my $j = ($i+1)/2;
+
+ if ($i&1) {
+ $code.=<<___;
+ srlx @X[$j],$shr,@X[$j] ! align X[`$i+1`]
+ and $b,$t1,$t1 ! round $i
+ sllx @X[$j+1],$shl1,$tx
+ add $t2,$a,$a
+ sllx $tx,$shl2,$tx
+ xor $d,$t1,$t1
+ or $tx,@X[$j],@X[$j]
+ sethi %hi(@K[$i+1]),$t2
+ add $t1,$a,$a
+ or $t2,%lo(@K[$i+1]),$t2
+ sll $a,$rot,$t3
+ add @X[$j],$t2,$t2 ! X[`$i+1`]+K[`$i+1`]
+ srl $a,32-$rot,$a
+ add $b,$t3,$t3
+ xor $b,$c,$t1
+ add $t3,$a,$a
+___
+ } else {
+ $code.=<<___;
+ srlx @X[$j],32,$tx ! extract X[`2*$j+1`]
+ and $b,$t1,$t1 ! round $i
+ add $t2,$a,$a
+ xor $d,$t1,$t1
+ sethi %hi(@K[$i+1]),$t2
+ add $t1,$a,$a
+ or $t2,%lo(@K[$i+1]),$t2
+ sll $a,$rot,$t3
+ add $tx,$t2,$t2 ! X[`2*$j+1`]+K[`$i+1`]
+ srl $a,32-$rot,$a
+ add $b,$t3,$t3
+ xor $b,$c,$t1
+ add $t3,$a,$a
+___
+ }
+}
+
+sub R0_1 {
+ my ($i,$a,$b,$c,$d) = @_;
+ my $rot = (7,12,17,22)[$i%4];
+
+$code.=<<___;
+ srlx @X[0],32,$tx ! extract X[1]
+ and $b,$t1,$t1 ! round $i
+ add $t2,$a,$a
+ xor $d,$t1,$t1
+ sethi %hi(@K[$i+1]),$t2
+ add $t1,$a,$a
+ or $t2,%lo(@K[$i+1]),$t2
+ sll $a,$rot,$t3
+ add $tx,$t2,$t2 ! X[1]+K[`$i+1`]
+ srl $a,32-$rot,$a
+ add $b,$t3,$t3
+ andn $b,$c,$t1
+ add $t3,$a,$a
+___
+}
+
+sub R1 {
+ my ($i,$a,$b,$c,$d) = @_;
+ my $rot = (5,9,14,20)[$i%4];
+ my $j = $i<31 ? (1+5*($i+1))%16 : (5+3*($i+1))%16;
+ my $xi = @X[$j/2];
+
+$code.=<<___ if ($j&1 && ($xi=$tx));
+ srlx @X[$j/2],32,$xi ! extract X[$j]
+___
+$code.=<<___;
+ and $b,$d,$t3 ! round $i
+ add $t2,$a,$a
+ or $t3,$t1,$t1
+ sethi %hi(@K[$i+1]),$t2
+ add $t1,$a,$a
+ or $t2,%lo(@K[$i+1]),$t2
+ sll $a,$rot,$t3
+ add $xi,$t2,$t2 ! X[$j]+K[`$i+1`]
+ srl $a,32-$rot,$a
+ add $b,$t3,$t3
+ `$i<31?"andn":"xor"` $b,$c,$t1
+ add $t3,$a,$a
+___
+}
+
+sub R2 {
+ my ($i,$a,$b,$c,$d) = @_;
+ my $rot = (4,11,16,23)[$i%4];
+ my $j = $i<47 ? (5+3*($i+1))%16 : (0+7*($i+1))%16;
+ my $xi = @X[$j/2];
+
+$code.=<<___ if ($j&1 && ($xi=$tx));
+ srlx @X[$j/2],32,$xi ! extract X[$j]
+___
+$code.=<<___;
+ add $t2,$a,$a ! round $i
+ xor $b,$t1,$t1
+ sethi %hi(@K[$i+1]),$t2
+ add $t1,$a,$a
+ or $t2,%lo(@K[$i+1]),$t2
+ sll $a,$rot,$t3
+ add $xi,$t2,$t2 ! X[$j]+K[`$i+1`]
+ srl $a,32-$rot,$a
+ add $b,$t3,$t3
+ xor $b,$c,$t1
+ add $t3,$a,$a
+___
+}
+
+sub R3 {
+ my ($i,$a,$b,$c,$d) = @_;
+ my $rot = (6,10,15,21)[$i%4];
+ my $j = (0+7*($i+1))%16;
+ my $xi = @X[$j/2];
+
+$code.=<<___;
+ add $t2,$a,$a ! round $i
+___
+$code.=<<___ if ($j&1 && ($xi=$tx));
+ srlx @X[$j/2],32,$xi ! extract X[$j]
+___
+$code.=<<___;
+ orn $b,$d,$t1
+ sethi %hi(@K[$i+1]),$t2
+ xor $c,$t1,$t1
+ or $t2,%lo(@K[$i+1]),$t2
+ add $t1,$a,$a
+ sll $a,$rot,$t3
+ add $xi,$t2,$t2 ! X[$j]+K[`$i+1`]
+ srl $a,32-$rot,$a
+ add $b,$t3,$t3
+ add $t3,$a,$a
+___
+}
+
+$code.=<<___;
+#include "sparc_arch.h"
+
+#ifdef __arch64__
+.register %g2,#scratch
+.register %g3,#scratch
+#endif
+
+.section ".text",#alloc,#execinstr
+
+#ifdef __PIC__
+SPARC_PIC_THUNK(%g1)
+#endif
+
+.globl md5_block_asm_data_order
+.align 32
+md5_block_asm_data_order:
+ SPARC_LOAD_ADDRESS_LEAF(OPENSSL_sparcv9cap_P,%g1,%g5)
+ ld [%g1+4],%g1 ! OPENSSL_sparcv9cap_P[1]
+
+ andcc %g1, CFR_MD5, %g0
+ be .Lsoftware
+ nop
+
+ mov 4, %g1
+ andcc %o1, 0x7, %g0
+ lda [%o0 + %g0]0x88, %f0 ! load context
+ lda [%o0 + %g1]0x88, %f1
+ add %o0, 8, %o0
+ lda [%o0 + %g0]0x88, %f2
+ lda [%o0 + %g1]0x88, %f3
+ bne,pn %icc, .Lhwunaligned
+ sub %o0, 8, %o0
+
+.Lhw_loop:
+ ldd [%o1 + 0x00], %f8
+ ldd [%o1 + 0x08], %f10
+ ldd [%o1 + 0x10], %f12
+ ldd [%o1 + 0x18], %f14
+ ldd [%o1 + 0x20], %f16
+ ldd [%o1 + 0x28], %f18
+ ldd [%o1 + 0x30], %f20
+ subcc %o2, 1, %o2 ! done yet?
+ ldd [%o1 + 0x38], %f22
+ add %o1, 0x40, %o1
+ prefetch [%o1 + 63], 20
+
+ .word 0x81b02800 ! MD5
+
+ bne,pt SIZE_T_CC, .Lhw_loop
+ nop
+
+.Lhwfinish:
+ sta %f0, [%o0 + %g0]0x88 ! store context
+ sta %f1, [%o0 + %g1]0x88
+ add %o0, 8, %o0
+ sta %f2, [%o0 + %g0]0x88
+ sta %f3, [%o0 + %g1]0x88
+ retl
+ nop
+
+.align 8
+.Lhwunaligned:
+ alignaddr %o1, %g0, %o1
+
+ ldd [%o1 + 0x00], %f10
+.Lhwunaligned_loop:
+ ldd [%o1 + 0x08], %f12
+ ldd [%o1 + 0x10], %f14
+ ldd [%o1 + 0x18], %f16
+ ldd [%o1 + 0x20], %f18
+ ldd [%o1 + 0x28], %f20
+ ldd [%o1 + 0x30], %f22
+ ldd [%o1 + 0x38], %f24
+ subcc %o2, 1, %o2 ! done yet?
+ ldd [%o1 + 0x40], %f26
+ add %o1, 0x40, %o1
+ prefetch [%o1 + 63], 20
+
+ faligndata %f10, %f12, %f8
+ faligndata %f12, %f14, %f10
+ faligndata %f14, %f16, %f12
+ faligndata %f16, %f18, %f14
+ faligndata %f18, %f20, %f16
+ faligndata %f20, %f22, %f18
+ faligndata %f22, %f24, %f20
+ faligndata %f24, %f26, %f22
+
+ .word 0x81b02800 ! MD5
+
+ bne,pt SIZE_T_CC, .Lhwunaligned_loop
+ for %f26, %f26, %f10 ! %f10=%f26
+
+ ba .Lhwfinish
+ nop
+
+.align 16
+.Lsoftware:
+ save %sp,-STACK_FRAME,%sp
+
+ rd %asi,$saved_asi
+ wr %g0,0x88,%asi ! ASI_PRIMARY_LITTLE
+ and $inp,7,$shr
+ andn $inp,7,$inp
+
+ sll $shr,3,$shr ! *=8
+ mov 56,$shl2
+ ld [$ctx+0],$A
+ sub $shl2,$shr,$shl2
+ ld [$ctx+4],$B
+ and $shl2,32,$shl1
+ add $shl2,8,$shl2
+ ld [$ctx+8],$C
+ sub $shl2,$shl1,$shl2 ! shr+shl1+shl2==64
+ ld [$ctx+12],$D
+ nop
+
+.Loop:
+ cmp $shr,0 ! was inp aligned?
+ ldxa [$inp+0]%asi,@X[0] ! load little-endian input
+ ldxa [$inp+8]%asi,@X[1]
+ ldxa [$inp+16]%asi,@X[2]
+ ldxa [$inp+24]%asi,@X[3]
+ ldxa [$inp+32]%asi,@X[4]
+ sllx $A,32,$AB ! pack A,B
+ ldxa [$inp+40]%asi,@X[5]
+ sllx $C,32,$CD ! pack C,D
+ ldxa [$inp+48]%asi,@X[6]
+ or $B,$AB,$AB
+ ldxa [$inp+56]%asi,@X[7]
+ or $D,$CD,$CD
+ bnz,a,pn %icc,.+8
+ ldxa [$inp+64]%asi,@X[8]
+
+ srlx @X[0],$shr,@X[0] ! align X[0]
+ sllx @X[1],$shl1,$tx
+ sethi %hi(@K[0]),$t2
+ sllx $tx,$shl2,$tx
+ or $t2,%lo(@K[0]),$t2
+ or $tx,@X[0],@X[0]
+ xor $C,$D,$t1
+ add @X[0],$t2,$t2 ! X[0]+K[0]
+___
+ for ($i=0;$i<15;$i++) { &R0($i,@V); unshift(@V,pop(@V)); }
+ for (;$i<16;$i++) { &R0_1($i,@V); unshift(@V,pop(@V)); }
+ for (;$i<32;$i++) { &R1($i,@V); unshift(@V,pop(@V)); }
+ for (;$i<48;$i++) { &R2($i,@V); unshift(@V,pop(@V)); }
+ for (;$i<64;$i++) { &R3($i,@V); unshift(@V,pop(@V)); }
+$code.=<<___;
+ srlx $AB,32,$t1 ! unpack A,B,C,D and accumulate
+ add $inp,64,$inp ! advance inp
+ srlx $CD,32,$t2
+ add $t1,$A,$A
+ subcc $len,1,$len ! done yet?
+ add $AB,$B,$B
+ add $t2,$C,$C
+ add $CD,$D,$D
+ srl $B,0,$B ! clruw $B
+ bne SIZE_T_CC,.Loop
+ srl $D,0,$D ! clruw $D
+
+ st $A,[$ctx+0] ! write out ctx
+ st $B,[$ctx+4]
+ st $C,[$ctx+8]
+ st $D,[$ctx+12]
+
+ wr %g0,$saved_asi,%asi
+ ret
+ restore
+.type md5_block_asm_data_order,#function
+.size md5_block_asm_data_order,(.-md5_block_asm_data_order)
+
+.asciz "MD5 block transform for SPARCv9, CRYPTOGAMS by <appro\@openssl.org>"
+.align 4
+___
+
+# Purpose of these subroutines is to explicitly encode VIS instructions,
+# so that one can compile the module without having to specify VIS
+# extentions on compiler command line, e.g. -xarch=v9 vs. -xarch=v9a.
+# Idea is to reserve for option to produce "universal" binary and let
+# programmer detect if current CPU is VIS capable at run-time.
+sub unvis {
+my ($mnemonic,$rs1,$rs2,$rd)=@_;
+my $ref,$opf;
+my %visopf = ( "faligndata" => 0x048,
+ "for" => 0x07c );
+
+ $ref = "$mnemonic\t$rs1,$rs2,$rd";
+
+ if ($opf=$visopf{$mnemonic}) {
+ foreach ($rs1,$rs2,$rd) {
+ return $ref if (!/%f([0-9]{1,2})/);
+ $_=$1;
+ if ($1>=32) {
+ return $ref if ($1&1);
+ # re-encode for upper double register addressing
+ $_=($1|$1>>5)&31;
+ }
+ }
+
+ return sprintf ".word\t0x%08x !%s",
+ 0x81b00000|$rd<<25|$rs1<<14|$opf<<5|$rs2,
+ $ref;
+ } else {
+ return $ref;
+ }
+}
+sub unalignaddr {
+my ($mnemonic,$rs1,$rs2,$rd)=@_;
+my %bias = ( "g" => 0, "o" => 8, "l" => 16, "i" => 24 );
+my $ref="$mnemonic\t$rs1,$rs2,$rd";
+
+ foreach ($rs1,$rs2,$rd) {
+ if (/%([goli])([0-7])/) { $_=$bias{$1}+$2; }
+ else { return $ref; }
+ }
+ return sprintf ".word\t0x%08x !%s",
+ 0x81b00300|$rd<<25|$rs1<<14|$rs2,
+ $ref;
+}
+
+foreach (split("\n",$code)) {
+ s/\`([^\`]*)\`/eval $1/ge;
+
+ s/\b(f[^\s]*)\s+(%f[0-9]{1,2}),\s*(%f[0-9]{1,2}),\s*(%f[0-9]{1,2})/
+ &unvis($1,$2,$3,$4)
+ /ge;
+ s/\b(alignaddr)\s+(%[goli][0-7]),\s*(%[goli][0-7]),\s*(%[goli][0-7])/
+ &unalignaddr($1,$2,$3,$4)
+ /ge;
+
+ print $_,"\n";
+}
+
+close STDOUT;
diff --git a/crypto/openssl/crypto/md5/md5_locl.h b/crypto/openssl/crypto/md5/md5_locl.h
index 5f6f2fd..82e6921 100644
--- a/crypto/openssl/crypto/md5/md5_locl.h
+++ b/crypto/openssl/crypto/md5/md5_locl.h
@@ -71,6 +71,8 @@
# define md5_block_data_order md5_block_asm_data_order
# elif defined(__ia64) || defined(__ia64__) || defined(_M_IA64)
# define md5_block_data_order md5_block_asm_data_order
+# elif defined(__sparc) || defined(__sparc__)
+# define md5_block_data_order md5_block_asm_data_order
# endif
#endif
diff --git a/crypto/openssl/crypto/modes/Makefile b/crypto/openssl/crypto/modes/Makefile
index e278fa6..a7863d9 100644
--- a/crypto/openssl/crypto/modes/Makefile
+++ b/crypto/openssl/crypto/modes/Makefile
@@ -22,9 +22,9 @@ APPS=
LIB=$(TOP)/libcrypto.a
LIBSRC= cbc128.c ctr128.c cts128.c cfb128.c ofb128.c gcm128.c \
- ccm128.c xts128.c
+ ccm128.c xts128.c wrap128.c
LIBOBJ= cbc128.o ctr128.o cts128.o cfb128.o ofb128.o gcm128.o \
- ccm128.o xts128.o $(MODES_ASM_OBJ)
+ ccm128.o xts128.o wrap128.o $(MODES_ASM_OBJ)
SRC= $(LIBSRC)
@@ -50,20 +50,26 @@ ghash-x86.s: asm/ghash-x86.pl
$(PERL) asm/ghash-x86.pl $(PERLASM_SCHEME) $(CFLAGS) $(PROCESSOR) > $@
ghash-x86_64.s: asm/ghash-x86_64.pl
$(PERL) asm/ghash-x86_64.pl $(PERLASM_SCHEME) > $@
+aesni-gcm-x86_64.s: asm/aesni-gcm-x86_64.pl
+ $(PERL) asm/aesni-gcm-x86_64.pl $(PERLASM_SCHEME) > $@
ghash-sparcv9.s: asm/ghash-sparcv9.pl
$(PERL) asm/ghash-sparcv9.pl $@ $(CFLAGS)
ghash-alpha.s: asm/ghash-alpha.pl
- (preproc=/tmp/$$$$.$@; trap "rm $$preproc" INT; \
+ (preproc=$$$$.$@.S; trap "rm $$preproc" INT; \
$(PERL) asm/ghash-alpha.pl > $$preproc && \
- $(CC) -E $$preproc > $@ && rm $$preproc)
-
+ $(CC) -E -P $$preproc > $@ && rm $$preproc)
ghash-parisc.s: asm/ghash-parisc.pl
$(PERL) asm/ghash-parisc.pl $(PERLASM_SCHEME) $@
+ghashv8-armx.S: asm/ghashv8-armx.pl
+ $(PERL) asm/ghashv8-armx.pl $(PERLASM_SCHEME) $@
+ghashp8-ppc.s: asm/ghashp8-ppc.pl
+ $(PERL) asm/ghashp8-ppc.pl $(PERLASM_SCHEME) $@
# GNU make "catch all"
ghash-%.S: asm/ghash-%.pl; $(PERL) $< $(PERLASM_SCHEME) $@
ghash-armv4.o: ghash-armv4.S
+ghashv8-armx.o: ghashv8-armx.S
files:
$(PERL) $(TOP)/util/files.pl Makefile >> $(TOP)/MINFO
@@ -139,6 +145,14 @@ ofb128.o: ../../include/openssl/modes.h ../../include/openssl/opensslconf.h
ofb128.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
ofb128.o: ../../include/openssl/safestack.h ../../include/openssl/stack.h
ofb128.o: ../../include/openssl/symhacks.h modes_lcl.h ofb128.c
+wrap128.o: ../../e_os.h ../../include/openssl/bio.h
+wrap128.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
+wrap128.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h
+wrap128.o: ../../include/openssl/lhash.h ../../include/openssl/modes.h
+wrap128.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
+wrap128.o: ../../include/openssl/ossl_typ.h ../../include/openssl/safestack.h
+wrap128.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
+wrap128.o: ../cryptlib.h wrap128.c
xts128.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
xts128.o: ../../include/openssl/modes.h ../../include/openssl/opensslconf.h
xts128.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
diff --git a/crypto/openssl/crypto/modes/asm/aesni-gcm-x86_64.pl b/crypto/openssl/crypto/modes/asm/aesni-gcm-x86_64.pl
new file mode 100755
index 0000000..7e4e04e
--- /dev/null
+++ b/crypto/openssl/crypto/modes/asm/aesni-gcm-x86_64.pl
@@ -0,0 +1,1057 @@
+#!/usr/bin/env perl
+#
+# ====================================================================
+# Written by Andy Polyakov <appro@openssl.org> for the OpenSSL
+# project. The module is, however, dual licensed under OpenSSL and
+# CRYPTOGAMS licenses depending on where you obtain it. For further
+# details see http://www.openssl.org/~appro/cryptogams/.
+# ====================================================================
+#
+#
+# AES-NI-CTR+GHASH stitch.
+#
+# February 2013
+#
+# OpenSSL GCM implementation is organized in such way that its
+# performance is rather close to the sum of its streamed components,
+# in the context parallelized AES-NI CTR and modulo-scheduled
+# PCLMULQDQ-enabled GHASH. Unfortunately, as no stitch implementation
+# was observed to perform significantly better than the sum of the
+# components on contemporary CPUs, the effort was deemed impossible to
+# justify. This module is based on combination of Intel submissions,
+# [1] and [2], with MOVBE twist suggested by Ilya Albrekht and Max
+# Locktyukhin of Intel Corp. who verified that it reduces shuffles
+# pressure with notable relative improvement, achieving 1.0 cycle per
+# byte processed with 128-bit key on Haswell processor, and 0.74 -
+# on Broadwell. [Mentioned results are raw profiled measurements for
+# favourable packet size, one divisible by 96. Applications using the
+# EVP interface will observe a few percent worse performance.]
+#
+# [1] http://rt.openssl.org/Ticket/Display.html?id=2900&user=guest&pass=guest
+# [2] http://www.intel.com/content/dam/www/public/us/en/documents/software-support/enabling-high-performance-gcm.pdf
+
+$flavour = shift;
+$output = shift;
+if ($flavour =~ /\./) { $output = $flavour; undef $flavour; }
+
+$win64=0; $win64=1 if ($flavour =~ /[nm]asm|mingw64/ || $output =~ /\.asm$/);
+
+$0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1;
+( $xlate="${dir}x86_64-xlate.pl" and -f $xlate ) or
+( $xlate="${dir}../../perlasm/x86_64-xlate.pl" and -f $xlate) or
+die "can't locate x86_64-xlate.pl";
+
+if (`$ENV{CC} -Wa,-v -c -o /dev/null -x assembler /dev/null 2>&1`
+ =~ /GNU assembler version ([2-9]\.[0-9]+)/) {
+ $avx = ($1>=2.19) + ($1>=2.22);
+}
+
+if (!$avx && $win64 && ($flavour =~ /nasm/ || $ENV{ASM} =~ /nasm/) &&
+ `nasm -v 2>&1` =~ /NASM version ([2-9]\.[0-9]+)/) {
+ $avx = ($1>=2.09) + ($1>=2.10);
+}
+
+if (!$avx && $win64 && ($flavour =~ /masm/ || $ENV{ASM} =~ /ml64/) &&
+ `ml64 2>&1` =~ /Version ([0-9]+)\./) {
+ $avx = ($1>=10) + ($1>=11);
+}
+
+if (!$avx && `$ENV{CC} -v 2>&1` =~ /(^clang version|based on LLVM) ([3-9]\.[0-9]+)/) {
+ $avx = ($2>=3.0) + ($2>3.0);
+}
+
+open OUT,"| \"$^X\" $xlate $flavour $output";
+*STDOUT=*OUT;
+
+if ($avx>1) {{{
+
+($inp,$out,$len,$key,$ivp,$Xip)=("%rdi","%rsi","%rdx","%rcx","%r8","%r9");
+
+($Ii,$T1,$T2,$Hkey,
+ $Z0,$Z1,$Z2,$Z3,$Xi) = map("%xmm$_",(0..8));
+
+($inout0,$inout1,$inout2,$inout3,$inout4,$inout5,$rndkey) = map("%xmm$_",(9..15));
+
+($counter,$rounds,$ret,$const,$in0,$end0)=("%ebx","%ebp","%r10","%r11","%r14","%r15");
+
+$code=<<___;
+.text
+
+.type _aesni_ctr32_ghash_6x,\@abi-omnipotent
+.align 32
+_aesni_ctr32_ghash_6x:
+ vmovdqu 0x20($const),$T2 # borrow $T2, .Lone_msb
+ sub \$6,$len
+ vpxor $Z0,$Z0,$Z0 # $Z0 = 0
+ vmovdqu 0x00-0x80($key),$rndkey
+ vpaddb $T2,$T1,$inout1
+ vpaddb $T2,$inout1,$inout2
+ vpaddb $T2,$inout2,$inout3
+ vpaddb $T2,$inout3,$inout4
+ vpaddb $T2,$inout4,$inout5
+ vpxor $rndkey,$T1,$inout0
+ vmovdqu $Z0,16+8(%rsp) # "$Z3" = 0
+ jmp .Loop6x
+
+.align 32
+.Loop6x:
+ add \$`6<<24`,$counter
+ jc .Lhandle_ctr32 # discard $inout[1-5]?
+ vmovdqu 0x00-0x20($Xip),$Hkey # $Hkey^1
+ vpaddb $T2,$inout5,$T1 # next counter value
+ vpxor $rndkey,$inout1,$inout1
+ vpxor $rndkey,$inout2,$inout2
+
+.Lresume_ctr32:
+ vmovdqu $T1,($ivp) # save next counter value
+ vpclmulqdq \$0x10,$Hkey,$Z3,$Z1
+ vpxor $rndkey,$inout3,$inout3
+ vmovups 0x10-0x80($key),$T2 # borrow $T2 for $rndkey
+ vpclmulqdq \$0x01,$Hkey,$Z3,$Z2
+ xor %r12,%r12
+ cmp $in0,$end0
+
+ vaesenc $T2,$inout0,$inout0
+ vmovdqu 0x30+8(%rsp),$Ii # I[4]
+ vpxor $rndkey,$inout4,$inout4
+ vpclmulqdq \$0x00,$Hkey,$Z3,$T1
+ vaesenc $T2,$inout1,$inout1
+ vpxor $rndkey,$inout5,$inout5
+ setnc %r12b
+ vpclmulqdq \$0x11,$Hkey,$Z3,$Z3
+ vaesenc $T2,$inout2,$inout2
+ vmovdqu 0x10-0x20($Xip),$Hkey # $Hkey^2
+ neg %r12
+ vaesenc $T2,$inout3,$inout3
+ vpxor $Z1,$Z2,$Z2
+ vpclmulqdq \$0x00,$Hkey,$Ii,$Z1
+ vpxor $Z0,$Xi,$Xi # modulo-scheduled
+ vaesenc $T2,$inout4,$inout4
+ vpxor $Z1,$T1,$Z0
+ and \$0x60,%r12
+ vmovups 0x20-0x80($key),$rndkey
+ vpclmulqdq \$0x10,$Hkey,$Ii,$T1
+ vaesenc $T2,$inout5,$inout5
+
+ vpclmulqdq \$0x01,$Hkey,$Ii,$T2
+ lea ($in0,%r12),$in0
+ vaesenc $rndkey,$inout0,$inout0
+ vpxor 16+8(%rsp),$Xi,$Xi # modulo-scheduled [vpxor $Z3,$Xi,$Xi]
+ vpclmulqdq \$0x11,$Hkey,$Ii,$Hkey
+ vmovdqu 0x40+8(%rsp),$Ii # I[3]
+ vaesenc $rndkey,$inout1,$inout1
+ movbe 0x58($in0),%r13
+ vaesenc $rndkey,$inout2,$inout2
+ movbe 0x50($in0),%r12
+ vaesenc $rndkey,$inout3,$inout3
+ mov %r13,0x20+8(%rsp)
+ vaesenc $rndkey,$inout4,$inout4
+ mov %r12,0x28+8(%rsp)
+ vmovdqu 0x30-0x20($Xip),$Z1 # borrow $Z1 for $Hkey^3
+ vaesenc $rndkey,$inout5,$inout5
+
+ vmovups 0x30-0x80($key),$rndkey
+ vpxor $T1,$Z2,$Z2
+ vpclmulqdq \$0x00,$Z1,$Ii,$T1
+ vaesenc $rndkey,$inout0,$inout0
+ vpxor $T2,$Z2,$Z2
+ vpclmulqdq \$0x10,$Z1,$Ii,$T2
+ vaesenc $rndkey,$inout1,$inout1
+ vpxor $Hkey,$Z3,$Z3
+ vpclmulqdq \$0x01,$Z1,$Ii,$Hkey
+ vaesenc $rndkey,$inout2,$inout2
+ vpclmulqdq \$0x11,$Z1,$Ii,$Z1
+ vmovdqu 0x50+8(%rsp),$Ii # I[2]
+ vaesenc $rndkey,$inout3,$inout3
+ vaesenc $rndkey,$inout4,$inout4
+ vpxor $T1,$Z0,$Z0
+ vmovdqu 0x40-0x20($Xip),$T1 # borrow $T1 for $Hkey^4
+ vaesenc $rndkey,$inout5,$inout5
+
+ vmovups 0x40-0x80($key),$rndkey
+ vpxor $T2,$Z2,$Z2
+ vpclmulqdq \$0x00,$T1,$Ii,$T2
+ vaesenc $rndkey,$inout0,$inout0
+ vpxor $Hkey,$Z2,$Z2
+ vpclmulqdq \$0x10,$T1,$Ii,$Hkey
+ vaesenc $rndkey,$inout1,$inout1
+ movbe 0x48($in0),%r13
+ vpxor $Z1,$Z3,$Z3
+ vpclmulqdq \$0x01,$T1,$Ii,$Z1
+ vaesenc $rndkey,$inout2,$inout2
+ movbe 0x40($in0),%r12
+ vpclmulqdq \$0x11,$T1,$Ii,$T1
+ vmovdqu 0x60+8(%rsp),$Ii # I[1]
+ vaesenc $rndkey,$inout3,$inout3
+ mov %r13,0x30+8(%rsp)
+ vaesenc $rndkey,$inout4,$inout4
+ mov %r12,0x38+8(%rsp)
+ vpxor $T2,$Z0,$Z0
+ vmovdqu 0x60-0x20($Xip),$T2 # borrow $T2 for $Hkey^5
+ vaesenc $rndkey,$inout5,$inout5
+
+ vmovups 0x50-0x80($key),$rndkey
+ vpxor $Hkey,$Z2,$Z2
+ vpclmulqdq \$0x00,$T2,$Ii,$Hkey
+ vaesenc $rndkey,$inout0,$inout0
+ vpxor $Z1,$Z2,$Z2
+ vpclmulqdq \$0x10,$T2,$Ii,$Z1
+ vaesenc $rndkey,$inout1,$inout1
+ movbe 0x38($in0),%r13
+ vpxor $T1,$Z3,$Z3
+ vpclmulqdq \$0x01,$T2,$Ii,$T1
+ vpxor 0x70+8(%rsp),$Xi,$Xi # accumulate I[0]
+ vaesenc $rndkey,$inout2,$inout2
+ movbe 0x30($in0),%r12
+ vpclmulqdq \$0x11,$T2,$Ii,$T2
+ vaesenc $rndkey,$inout3,$inout3
+ mov %r13,0x40+8(%rsp)
+ vaesenc $rndkey,$inout4,$inout4
+ mov %r12,0x48+8(%rsp)
+ vpxor $Hkey,$Z0,$Z0
+ vmovdqu 0x70-0x20($Xip),$Hkey # $Hkey^6
+ vaesenc $rndkey,$inout5,$inout5
+
+ vmovups 0x60-0x80($key),$rndkey
+ vpxor $Z1,$Z2,$Z2
+ vpclmulqdq \$0x10,$Hkey,$Xi,$Z1
+ vaesenc $rndkey,$inout0,$inout0
+ vpxor $T1,$Z2,$Z2
+ vpclmulqdq \$0x01,$Hkey,$Xi,$T1
+ vaesenc $rndkey,$inout1,$inout1
+ movbe 0x28($in0),%r13
+ vpxor $T2,$Z3,$Z3
+ vpclmulqdq \$0x00,$Hkey,$Xi,$T2
+ vaesenc $rndkey,$inout2,$inout2
+ movbe 0x20($in0),%r12
+ vpclmulqdq \$0x11,$Hkey,$Xi,$Xi
+ vaesenc $rndkey,$inout3,$inout3
+ mov %r13,0x50+8(%rsp)
+ vaesenc $rndkey,$inout4,$inout4
+ mov %r12,0x58+8(%rsp)
+ vpxor $Z1,$Z2,$Z2
+ vaesenc $rndkey,$inout5,$inout5
+ vpxor $T1,$Z2,$Z2
+
+ vmovups 0x70-0x80($key),$rndkey
+ vpslldq \$8,$Z2,$Z1
+ vpxor $T2,$Z0,$Z0
+ vmovdqu 0x10($const),$Hkey # .Lpoly
+
+ vaesenc $rndkey,$inout0,$inout0
+ vpxor $Xi,$Z3,$Z3
+ vaesenc $rndkey,$inout1,$inout1
+ vpxor $Z1,$Z0,$Z0
+ movbe 0x18($in0),%r13
+ vaesenc $rndkey,$inout2,$inout2
+ movbe 0x10($in0),%r12
+ vpalignr \$8,$Z0,$Z0,$Ii # 1st phase
+ vpclmulqdq \$0x10,$Hkey,$Z0,$Z0
+ mov %r13,0x60+8(%rsp)
+ vaesenc $rndkey,$inout3,$inout3
+ mov %r12,0x68+8(%rsp)
+ vaesenc $rndkey,$inout4,$inout4
+ vmovups 0x80-0x80($key),$T1 # borrow $T1 for $rndkey
+ vaesenc $rndkey,$inout5,$inout5
+
+ vaesenc $T1,$inout0,$inout0
+ vmovups 0x90-0x80($key),$rndkey
+ vaesenc $T1,$inout1,$inout1
+ vpsrldq \$8,$Z2,$Z2
+ vaesenc $T1,$inout2,$inout2
+ vpxor $Z2,$Z3,$Z3
+ vaesenc $T1,$inout3,$inout3
+ vpxor $Ii,$Z0,$Z0
+ movbe 0x08($in0),%r13
+ vaesenc $T1,$inout4,$inout4
+ movbe 0x00($in0),%r12
+ vaesenc $T1,$inout5,$inout5
+ vmovups 0xa0-0x80($key),$T1
+ cmp \$11,$rounds
+ jb .Lenc_tail # 128-bit key
+
+ vaesenc $rndkey,$inout0,$inout0
+ vaesenc $rndkey,$inout1,$inout1
+ vaesenc $rndkey,$inout2,$inout2
+ vaesenc $rndkey,$inout3,$inout3
+ vaesenc $rndkey,$inout4,$inout4
+ vaesenc $rndkey,$inout5,$inout5
+
+ vaesenc $T1,$inout0,$inout0
+ vaesenc $T1,$inout1,$inout1
+ vaesenc $T1,$inout2,$inout2
+ vaesenc $T1,$inout3,$inout3
+ vaesenc $T1,$inout4,$inout4
+ vmovups 0xb0-0x80($key),$rndkey
+ vaesenc $T1,$inout5,$inout5
+ vmovups 0xc0-0x80($key),$T1
+ je .Lenc_tail # 192-bit key
+
+ vaesenc $rndkey,$inout0,$inout0
+ vaesenc $rndkey,$inout1,$inout1
+ vaesenc $rndkey,$inout2,$inout2
+ vaesenc $rndkey,$inout3,$inout3
+ vaesenc $rndkey,$inout4,$inout4
+ vaesenc $rndkey,$inout5,$inout5
+
+ vaesenc $T1,$inout0,$inout0
+ vaesenc $T1,$inout1,$inout1
+ vaesenc $T1,$inout2,$inout2
+ vaesenc $T1,$inout3,$inout3
+ vaesenc $T1,$inout4,$inout4
+ vmovups 0xd0-0x80($key),$rndkey
+ vaesenc $T1,$inout5,$inout5
+ vmovups 0xe0-0x80($key),$T1
+ jmp .Lenc_tail # 256-bit key
+
+.align 32
+.Lhandle_ctr32:
+ vmovdqu ($const),$Ii # borrow $Ii for .Lbswap_mask
+ vpshufb $Ii,$T1,$Z2 # byte-swap counter
+ vmovdqu 0x30($const),$Z1 # borrow $Z1, .Ltwo_lsb
+ vpaddd 0x40($const),$Z2,$inout1 # .Lone_lsb
+ vpaddd $Z1,$Z2,$inout2
+ vmovdqu 0x00-0x20($Xip),$Hkey # $Hkey^1
+ vpaddd $Z1,$inout1,$inout3
+ vpshufb $Ii,$inout1,$inout1
+ vpaddd $Z1,$inout2,$inout4
+ vpshufb $Ii,$inout2,$inout2
+ vpxor $rndkey,$inout1,$inout1
+ vpaddd $Z1,$inout3,$inout5
+ vpshufb $Ii,$inout3,$inout3
+ vpxor $rndkey,$inout2,$inout2
+ vpaddd $Z1,$inout4,$T1 # byte-swapped next counter value
+ vpshufb $Ii,$inout4,$inout4
+ vpshufb $Ii,$inout5,$inout5
+ vpshufb $Ii,$T1,$T1 # next counter value
+ jmp .Lresume_ctr32
+
+.align 32
+.Lenc_tail:
+ vaesenc $rndkey,$inout0,$inout0
+ vmovdqu $Z3,16+8(%rsp) # postpone vpxor $Z3,$Xi,$Xi
+ vpalignr \$8,$Z0,$Z0,$Xi # 2nd phase
+ vaesenc $rndkey,$inout1,$inout1
+ vpclmulqdq \$0x10,$Hkey,$Z0,$Z0
+ vpxor 0x00($inp),$T1,$T2
+ vaesenc $rndkey,$inout2,$inout2
+ vpxor 0x10($inp),$T1,$Ii
+ vaesenc $rndkey,$inout3,$inout3
+ vpxor 0x20($inp),$T1,$Z1
+ vaesenc $rndkey,$inout4,$inout4
+ vpxor 0x30($inp),$T1,$Z2
+ vaesenc $rndkey,$inout5,$inout5
+ vpxor 0x40($inp),$T1,$Z3
+ vpxor 0x50($inp),$T1,$Hkey
+ vmovdqu ($ivp),$T1 # load next counter value
+
+ vaesenclast $T2,$inout0,$inout0
+ vmovdqu 0x20($const),$T2 # borrow $T2, .Lone_msb
+ vaesenclast $Ii,$inout1,$inout1
+ vpaddb $T2,$T1,$Ii
+ mov %r13,0x70+8(%rsp)
+ lea 0x60($inp),$inp
+ vaesenclast $Z1,$inout2,$inout2
+ vpaddb $T2,$Ii,$Z1
+ mov %r12,0x78+8(%rsp)
+ lea 0x60($out),$out
+ vmovdqu 0x00-0x80($key),$rndkey
+ vaesenclast $Z2,$inout3,$inout3
+ vpaddb $T2,$Z1,$Z2
+ vaesenclast $Z3, $inout4,$inout4
+ vpaddb $T2,$Z2,$Z3
+ vaesenclast $Hkey,$inout5,$inout5
+ vpaddb $T2,$Z3,$Hkey
+
+ add \$0x60,$ret
+ sub \$0x6,$len
+ jc .L6x_done
+
+ vmovups $inout0,-0x60($out) # save output
+ vpxor $rndkey,$T1,$inout0
+ vmovups $inout1,-0x50($out)
+ vmovdqa $Ii,$inout1 # 0 latency
+ vmovups $inout2,-0x40($out)
+ vmovdqa $Z1,$inout2 # 0 latency
+ vmovups $inout3,-0x30($out)
+ vmovdqa $Z2,$inout3 # 0 latency
+ vmovups $inout4,-0x20($out)
+ vmovdqa $Z3,$inout4 # 0 latency
+ vmovups $inout5,-0x10($out)
+ vmovdqa $Hkey,$inout5 # 0 latency
+ vmovdqu 0x20+8(%rsp),$Z3 # I[5]
+ jmp .Loop6x
+
+.L6x_done:
+ vpxor 16+8(%rsp),$Xi,$Xi # modulo-scheduled
+ vpxor $Z0,$Xi,$Xi # modulo-scheduled
+
+ ret
+.size _aesni_ctr32_ghash_6x,.-_aesni_ctr32_ghash_6x
+___
+######################################################################
+#
+# size_t aesni_gcm_[en|de]crypt(const void *inp, void *out, size_t len,
+# const AES_KEY *key, unsigned char iv[16],
+# struct { u128 Xi,H,Htbl[9]; } *Xip);
+$code.=<<___;
+.globl aesni_gcm_decrypt
+.type aesni_gcm_decrypt,\@function,6
+.align 32
+aesni_gcm_decrypt:
+ xor $ret,$ret
+ cmp \$0x60,$len # minimal accepted length
+ jb .Lgcm_dec_abort
+
+ lea (%rsp),%rax # save stack pointer
+ push %rbx
+ push %rbp
+ push %r12
+ push %r13
+ push %r14
+ push %r15
+___
+$code.=<<___ if ($win64);
+ lea -0xa8(%rsp),%rsp
+ movaps %xmm6,-0xd8(%rax)
+ movaps %xmm7,-0xc8(%rax)
+ movaps %xmm8,-0xb8(%rax)
+ movaps %xmm9,-0xa8(%rax)
+ movaps %xmm10,-0x98(%rax)
+ movaps %xmm11,-0x88(%rax)
+ movaps %xmm12,-0x78(%rax)
+ movaps %xmm13,-0x68(%rax)
+ movaps %xmm14,-0x58(%rax)
+ movaps %xmm15,-0x48(%rax)
+.Lgcm_dec_body:
+___
+$code.=<<___;
+ vzeroupper
+
+ vmovdqu ($ivp),$T1 # input counter value
+ add \$-128,%rsp
+ mov 12($ivp),$counter
+ lea .Lbswap_mask(%rip),$const
+ lea -0x80($key),$in0 # borrow $in0
+ mov \$0xf80,$end0 # borrow $end0
+ vmovdqu ($Xip),$Xi # load Xi
+ and \$-128,%rsp # ensure stack alignment
+ vmovdqu ($const),$Ii # borrow $Ii for .Lbswap_mask
+ lea 0x80($key),$key # size optimization
+ lea 0x20+0x20($Xip),$Xip # size optimization
+ mov 0xf0-0x80($key),$rounds
+ vpshufb $Ii,$Xi,$Xi
+
+ and $end0,$in0
+ and %rsp,$end0
+ sub $in0,$end0
+ jc .Ldec_no_key_aliasing
+ cmp \$768,$end0
+ jnc .Ldec_no_key_aliasing
+ sub $end0,%rsp # avoid aliasing with key
+.Ldec_no_key_aliasing:
+
+ vmovdqu 0x50($inp),$Z3 # I[5]
+ lea ($inp),$in0
+ vmovdqu 0x40($inp),$Z0
+ lea -0xc0($inp,$len),$end0
+ vmovdqu 0x30($inp),$Z1
+ shr \$4,$len
+ xor $ret,$ret
+ vmovdqu 0x20($inp),$Z2
+ vpshufb $Ii,$Z3,$Z3 # passed to _aesni_ctr32_ghash_6x
+ vmovdqu 0x10($inp),$T2
+ vpshufb $Ii,$Z0,$Z0
+ vmovdqu ($inp),$Hkey
+ vpshufb $Ii,$Z1,$Z1
+ vmovdqu $Z0,0x30(%rsp)
+ vpshufb $Ii,$Z2,$Z2
+ vmovdqu $Z1,0x40(%rsp)
+ vpshufb $Ii,$T2,$T2
+ vmovdqu $Z2,0x50(%rsp)
+ vpshufb $Ii,$Hkey,$Hkey
+ vmovdqu $T2,0x60(%rsp)
+ vmovdqu $Hkey,0x70(%rsp)
+
+ call _aesni_ctr32_ghash_6x
+
+ vmovups $inout0,-0x60($out) # save output
+ vmovups $inout1,-0x50($out)
+ vmovups $inout2,-0x40($out)
+ vmovups $inout3,-0x30($out)
+ vmovups $inout4,-0x20($out)
+ vmovups $inout5,-0x10($out)
+
+ vpshufb ($const),$Xi,$Xi # .Lbswap_mask
+ vmovdqu $Xi,-0x40($Xip) # output Xi
+
+ vzeroupper
+___
+$code.=<<___ if ($win64);
+ movaps -0xd8(%rax),%xmm6
+ movaps -0xd8(%rax),%xmm7
+ movaps -0xb8(%rax),%xmm8
+ movaps -0xa8(%rax),%xmm9
+ movaps -0x98(%rax),%xmm10
+ movaps -0x88(%rax),%xmm11
+ movaps -0x78(%rax),%xmm12
+ movaps -0x68(%rax),%xmm13
+ movaps -0x58(%rax),%xmm14
+ movaps -0x48(%rax),%xmm15
+___
+$code.=<<___;
+ mov -48(%rax),%r15
+ mov -40(%rax),%r14
+ mov -32(%rax),%r13
+ mov -24(%rax),%r12
+ mov -16(%rax),%rbp
+ mov -8(%rax),%rbx
+ lea (%rax),%rsp # restore %rsp
+.Lgcm_dec_abort:
+ mov $ret,%rax # return value
+ ret
+.size aesni_gcm_decrypt,.-aesni_gcm_decrypt
+___
+
+$code.=<<___;
+.type _aesni_ctr32_6x,\@abi-omnipotent
+.align 32
+_aesni_ctr32_6x:
+ vmovdqu 0x00-0x80($key),$Z0 # borrow $Z0 for $rndkey
+ vmovdqu 0x20($const),$T2 # borrow $T2, .Lone_msb
+ lea -1($rounds),%r13
+ vmovups 0x10-0x80($key),$rndkey
+ lea 0x20-0x80($key),%r12
+ vpxor $Z0,$T1,$inout0
+ add \$`6<<24`,$counter
+ jc .Lhandle_ctr32_2
+ vpaddb $T2,$T1,$inout1
+ vpaddb $T2,$inout1,$inout2
+ vpxor $Z0,$inout1,$inout1
+ vpaddb $T2,$inout2,$inout3
+ vpxor $Z0,$inout2,$inout2
+ vpaddb $T2,$inout3,$inout4
+ vpxor $Z0,$inout3,$inout3
+ vpaddb $T2,$inout4,$inout5
+ vpxor $Z0,$inout4,$inout4
+ vpaddb $T2,$inout5,$T1
+ vpxor $Z0,$inout5,$inout5
+ jmp .Loop_ctr32
+
+.align 16
+.Loop_ctr32:
+ vaesenc $rndkey,$inout0,$inout0
+ vaesenc $rndkey,$inout1,$inout1
+ vaesenc $rndkey,$inout2,$inout2
+ vaesenc $rndkey,$inout3,$inout3
+ vaesenc $rndkey,$inout4,$inout4
+ vaesenc $rndkey,$inout5,$inout5
+ vmovups (%r12),$rndkey
+ lea 0x10(%r12),%r12
+ dec %r13d
+ jnz .Loop_ctr32
+
+ vmovdqu (%r12),$Hkey # last round key
+ vaesenc $rndkey,$inout0,$inout0
+ vpxor 0x00($inp),$Hkey,$Z0
+ vaesenc $rndkey,$inout1,$inout1
+ vpxor 0x10($inp),$Hkey,$Z1
+ vaesenc $rndkey,$inout2,$inout2
+ vpxor 0x20($inp),$Hkey,$Z2
+ vaesenc $rndkey,$inout3,$inout3
+ vpxor 0x30($inp),$Hkey,$Xi
+ vaesenc $rndkey,$inout4,$inout4
+ vpxor 0x40($inp),$Hkey,$T2
+ vaesenc $rndkey,$inout5,$inout5
+ vpxor 0x50($inp),$Hkey,$Hkey
+ lea 0x60($inp),$inp
+
+ vaesenclast $Z0,$inout0,$inout0
+ vaesenclast $Z1,$inout1,$inout1
+ vaesenclast $Z2,$inout2,$inout2
+ vaesenclast $Xi,$inout3,$inout3
+ vaesenclast $T2,$inout4,$inout4
+ vaesenclast $Hkey,$inout5,$inout5
+ vmovups $inout0,0x00($out)
+ vmovups $inout1,0x10($out)
+ vmovups $inout2,0x20($out)
+ vmovups $inout3,0x30($out)
+ vmovups $inout4,0x40($out)
+ vmovups $inout5,0x50($out)
+ lea 0x60($out),$out
+
+ ret
+.align 32
+.Lhandle_ctr32_2:
+ vpshufb $Ii,$T1,$Z2 # byte-swap counter
+ vmovdqu 0x30($const),$Z1 # borrow $Z1, .Ltwo_lsb
+ vpaddd 0x40($const),$Z2,$inout1 # .Lone_lsb
+ vpaddd $Z1,$Z2,$inout2
+ vpaddd $Z1,$inout1,$inout3
+ vpshufb $Ii,$inout1,$inout1
+ vpaddd $Z1,$inout2,$inout4
+ vpshufb $Ii,$inout2,$inout2
+ vpxor $Z0,$inout1,$inout1
+ vpaddd $Z1,$inout3,$inout5
+ vpshufb $Ii,$inout3,$inout3
+ vpxor $Z0,$inout2,$inout2
+ vpaddd $Z1,$inout4,$T1 # byte-swapped next counter value
+ vpshufb $Ii,$inout4,$inout4
+ vpxor $Z0,$inout3,$inout3
+ vpshufb $Ii,$inout5,$inout5
+ vpxor $Z0,$inout4,$inout4
+ vpshufb $Ii,$T1,$T1 # next counter value
+ vpxor $Z0,$inout5,$inout5
+ jmp .Loop_ctr32
+.size _aesni_ctr32_6x,.-_aesni_ctr32_6x
+
+.globl aesni_gcm_encrypt
+.type aesni_gcm_encrypt,\@function,6
+.align 32
+aesni_gcm_encrypt:
+ xor $ret,$ret
+ cmp \$0x60*3,$len # minimal accepted length
+ jb .Lgcm_enc_abort
+
+ lea (%rsp),%rax # save stack pointer
+ push %rbx
+ push %rbp
+ push %r12
+ push %r13
+ push %r14
+ push %r15
+___
+$code.=<<___ if ($win64);
+ lea -0xa8(%rsp),%rsp
+ movaps %xmm6,-0xd8(%rax)
+ movaps %xmm7,-0xc8(%rax)
+ movaps %xmm8,-0xb8(%rax)
+ movaps %xmm9,-0xa8(%rax)
+ movaps %xmm10,-0x98(%rax)
+ movaps %xmm11,-0x88(%rax)
+ movaps %xmm12,-0x78(%rax)
+ movaps %xmm13,-0x68(%rax)
+ movaps %xmm14,-0x58(%rax)
+ movaps %xmm15,-0x48(%rax)
+.Lgcm_enc_body:
+___
+$code.=<<___;
+ vzeroupper
+
+ vmovdqu ($ivp),$T1 # input counter value
+ add \$-128,%rsp
+ mov 12($ivp),$counter
+ lea .Lbswap_mask(%rip),$const
+ lea -0x80($key),$in0 # borrow $in0
+ mov \$0xf80,$end0 # borrow $end0
+ lea 0x80($key),$key # size optimization
+ vmovdqu ($const),$Ii # borrow $Ii for .Lbswap_mask
+ and \$-128,%rsp # ensure stack alignment
+ mov 0xf0-0x80($key),$rounds
+
+ and $end0,$in0
+ and %rsp,$end0
+ sub $in0,$end0
+ jc .Lenc_no_key_aliasing
+ cmp \$768,$end0
+ jnc .Lenc_no_key_aliasing
+ sub $end0,%rsp # avoid aliasing with key
+.Lenc_no_key_aliasing:
+
+ lea ($out),$in0
+ lea -0xc0($out,$len),$end0
+ shr \$4,$len
+
+ call _aesni_ctr32_6x
+ vpshufb $Ii,$inout0,$Xi # save bswapped output on stack
+ vpshufb $Ii,$inout1,$T2
+ vmovdqu $Xi,0x70(%rsp)
+ vpshufb $Ii,$inout2,$Z0
+ vmovdqu $T2,0x60(%rsp)
+ vpshufb $Ii,$inout3,$Z1
+ vmovdqu $Z0,0x50(%rsp)
+ vpshufb $Ii,$inout4,$Z2
+ vmovdqu $Z1,0x40(%rsp)
+ vpshufb $Ii,$inout5,$Z3 # passed to _aesni_ctr32_ghash_6x
+ vmovdqu $Z2,0x30(%rsp)
+
+ call _aesni_ctr32_6x
+
+ vmovdqu ($Xip),$Xi # load Xi
+ lea 0x20+0x20($Xip),$Xip # size optimization
+ sub \$12,$len
+ mov \$0x60*2,$ret
+ vpshufb $Ii,$Xi,$Xi
+
+ call _aesni_ctr32_ghash_6x
+ vmovdqu 0x20(%rsp),$Z3 # I[5]
+ vmovdqu ($const),$Ii # borrow $Ii for .Lbswap_mask
+ vmovdqu 0x00-0x20($Xip),$Hkey # $Hkey^1
+ vpunpckhqdq $Z3,$Z3,$T1
+ vmovdqu 0x20-0x20($Xip),$rndkey # borrow $rndkey for $HK
+ vmovups $inout0,-0x60($out) # save output
+ vpshufb $Ii,$inout0,$inout0 # but keep bswapped copy
+ vpxor $Z3,$T1,$T1
+ vmovups $inout1,-0x50($out)
+ vpshufb $Ii,$inout1,$inout1
+ vmovups $inout2,-0x40($out)
+ vpshufb $Ii,$inout2,$inout2
+ vmovups $inout3,-0x30($out)
+ vpshufb $Ii,$inout3,$inout3
+ vmovups $inout4,-0x20($out)
+ vpshufb $Ii,$inout4,$inout4
+ vmovups $inout5,-0x10($out)
+ vpshufb $Ii,$inout5,$inout5
+ vmovdqu $inout0,0x10(%rsp) # free $inout0
+___
+{ my ($HK,$T3)=($rndkey,$inout0);
+
+$code.=<<___;
+ vmovdqu 0x30(%rsp),$Z2 # I[4]
+ vmovdqu 0x10-0x20($Xip),$Ii # borrow $Ii for $Hkey^2
+ vpunpckhqdq $Z2,$Z2,$T2
+ vpclmulqdq \$0x00,$Hkey,$Z3,$Z1
+ vpxor $Z2,$T2,$T2
+ vpclmulqdq \$0x11,$Hkey,$Z3,$Z3
+ vpclmulqdq \$0x00,$HK,$T1,$T1
+
+ vmovdqu 0x40(%rsp),$T3 # I[3]
+ vpclmulqdq \$0x00,$Ii,$Z2,$Z0
+ vmovdqu 0x30-0x20($Xip),$Hkey # $Hkey^3
+ vpxor $Z1,$Z0,$Z0
+ vpunpckhqdq $T3,$T3,$Z1
+ vpclmulqdq \$0x11,$Ii,$Z2,$Z2
+ vpxor $T3,$Z1,$Z1
+ vpxor $Z3,$Z2,$Z2
+ vpclmulqdq \$0x10,$HK,$T2,$T2
+ vmovdqu 0x50-0x20($Xip),$HK
+ vpxor $T1,$T2,$T2
+
+ vmovdqu 0x50(%rsp),$T1 # I[2]
+ vpclmulqdq \$0x00,$Hkey,$T3,$Z3
+ vmovdqu 0x40-0x20($Xip),$Ii # borrow $Ii for $Hkey^4
+ vpxor $Z0,$Z3,$Z3
+ vpunpckhqdq $T1,$T1,$Z0
+ vpclmulqdq \$0x11,$Hkey,$T3,$T3
+ vpxor $T1,$Z0,$Z0
+ vpxor $Z2,$T3,$T3
+ vpclmulqdq \$0x00,$HK,$Z1,$Z1
+ vpxor $T2,$Z1,$Z1
+
+ vmovdqu 0x60(%rsp),$T2 # I[1]
+ vpclmulqdq \$0x00,$Ii,$T1,$Z2
+ vmovdqu 0x60-0x20($Xip),$Hkey # $Hkey^5
+ vpxor $Z3,$Z2,$Z2
+ vpunpckhqdq $T2,$T2,$Z3
+ vpclmulqdq \$0x11,$Ii,$T1,$T1
+ vpxor $T2,$Z3,$Z3
+ vpxor $T3,$T1,$T1
+ vpclmulqdq \$0x10,$HK,$Z0,$Z0
+ vmovdqu 0x80-0x20($Xip),$HK
+ vpxor $Z1,$Z0,$Z0
+
+ vpxor 0x70(%rsp),$Xi,$Xi # accumulate I[0]
+ vpclmulqdq \$0x00,$Hkey,$T2,$Z1
+ vmovdqu 0x70-0x20($Xip),$Ii # borrow $Ii for $Hkey^6
+ vpunpckhqdq $Xi,$Xi,$T3
+ vpxor $Z2,$Z1,$Z1
+ vpclmulqdq \$0x11,$Hkey,$T2,$T2
+ vpxor $Xi,$T3,$T3
+ vpxor $T1,$T2,$T2
+ vpclmulqdq \$0x00,$HK,$Z3,$Z3
+ vpxor $Z0,$Z3,$Z0
+
+ vpclmulqdq \$0x00,$Ii,$Xi,$Z2
+ vmovdqu 0x00-0x20($Xip),$Hkey # $Hkey^1
+ vpunpckhqdq $inout5,$inout5,$T1
+ vpclmulqdq \$0x11,$Ii,$Xi,$Xi
+ vpxor $inout5,$T1,$T1
+ vpxor $Z1,$Z2,$Z1
+ vpclmulqdq \$0x10,$HK,$T3,$T3
+ vmovdqu 0x20-0x20($Xip),$HK
+ vpxor $T2,$Xi,$Z3
+ vpxor $Z0,$T3,$Z2
+
+ vmovdqu 0x10-0x20($Xip),$Ii # borrow $Ii for $Hkey^2
+ vpxor $Z1,$Z3,$T3 # aggregated Karatsuba post-processing
+ vpclmulqdq \$0x00,$Hkey,$inout5,$Z0
+ vpxor $T3,$Z2,$Z2
+ vpunpckhqdq $inout4,$inout4,$T2
+ vpclmulqdq \$0x11,$Hkey,$inout5,$inout5
+ vpxor $inout4,$T2,$T2
+ vpslldq \$8,$Z2,$T3
+ vpclmulqdq \$0x00,$HK,$T1,$T1
+ vpxor $T3,$Z1,$Xi
+ vpsrldq \$8,$Z2,$Z2
+ vpxor $Z2,$Z3,$Z3
+
+ vpclmulqdq \$0x00,$Ii,$inout4,$Z1
+ vmovdqu 0x30-0x20($Xip),$Hkey # $Hkey^3
+ vpxor $Z0,$Z1,$Z1
+ vpunpckhqdq $inout3,$inout3,$T3
+ vpclmulqdq \$0x11,$Ii,$inout4,$inout4
+ vpxor $inout3,$T3,$T3
+ vpxor $inout5,$inout4,$inout4
+ vpalignr \$8,$Xi,$Xi,$inout5 # 1st phase
+ vpclmulqdq \$0x10,$HK,$T2,$T2
+ vmovdqu 0x50-0x20($Xip),$HK
+ vpxor $T1,$T2,$T2
+
+ vpclmulqdq \$0x00,$Hkey,$inout3,$Z0
+ vmovdqu 0x40-0x20($Xip),$Ii # borrow $Ii for $Hkey^4
+ vpxor $Z1,$Z0,$Z0
+ vpunpckhqdq $inout2,$inout2,$T1
+ vpclmulqdq \$0x11,$Hkey,$inout3,$inout3
+ vpxor $inout2,$T1,$T1
+ vpxor $inout4,$inout3,$inout3
+ vxorps 0x10(%rsp),$Z3,$Z3 # accumulate $inout0
+ vpclmulqdq \$0x00,$HK,$T3,$T3
+ vpxor $T2,$T3,$T3
+
+ vpclmulqdq \$0x10,0x10($const),$Xi,$Xi
+ vxorps $inout5,$Xi,$Xi
+
+ vpclmulqdq \$0x00,$Ii,$inout2,$Z1
+ vmovdqu 0x60-0x20($Xip),$Hkey # $Hkey^5
+ vpxor $Z0,$Z1,$Z1
+ vpunpckhqdq $inout1,$inout1,$T2
+ vpclmulqdq \$0x11,$Ii,$inout2,$inout2
+ vpxor $inout1,$T2,$T2
+ vpalignr \$8,$Xi,$Xi,$inout5 # 2nd phase
+ vpxor $inout3,$inout2,$inout2
+ vpclmulqdq \$0x10,$HK,$T1,$T1
+ vmovdqu 0x80-0x20($Xip),$HK
+ vpxor $T3,$T1,$T1
+
+ vxorps $Z3,$inout5,$inout5
+ vpclmulqdq \$0x10,0x10($const),$Xi,$Xi
+ vxorps $inout5,$Xi,$Xi
+
+ vpclmulqdq \$0x00,$Hkey,$inout1,$Z0
+ vmovdqu 0x70-0x20($Xip),$Ii # borrow $Ii for $Hkey^6
+ vpxor $Z1,$Z0,$Z0
+ vpunpckhqdq $Xi,$Xi,$T3
+ vpclmulqdq \$0x11,$Hkey,$inout1,$inout1
+ vpxor $Xi,$T3,$T3
+ vpxor $inout2,$inout1,$inout1
+ vpclmulqdq \$0x00,$HK,$T2,$T2
+ vpxor $T1,$T2,$T2
+
+ vpclmulqdq \$0x00,$Ii,$Xi,$Z1
+ vpclmulqdq \$0x11,$Ii,$Xi,$Z3
+ vpxor $Z0,$Z1,$Z1
+ vpclmulqdq \$0x10,$HK,$T3,$Z2
+ vpxor $inout1,$Z3,$Z3
+ vpxor $T2,$Z2,$Z2
+
+ vpxor $Z1,$Z3,$Z0 # aggregated Karatsuba post-processing
+ vpxor $Z0,$Z2,$Z2
+ vpslldq \$8,$Z2,$T1
+ vmovdqu 0x10($const),$Hkey # .Lpoly
+ vpsrldq \$8,$Z2,$Z2
+ vpxor $T1,$Z1,$Xi
+ vpxor $Z2,$Z3,$Z3
+
+ vpalignr \$8,$Xi,$Xi,$T2 # 1st phase
+ vpclmulqdq \$0x10,$Hkey,$Xi,$Xi
+ vpxor $T2,$Xi,$Xi
+
+ vpalignr \$8,$Xi,$Xi,$T2 # 2nd phase
+ vpclmulqdq \$0x10,$Hkey,$Xi,$Xi
+ vpxor $Z3,$T2,$T2
+ vpxor $T2,$Xi,$Xi
+___
+}
+$code.=<<___;
+ vpshufb ($const),$Xi,$Xi # .Lbswap_mask
+ vmovdqu $Xi,-0x40($Xip) # output Xi
+
+ vzeroupper
+___
+$code.=<<___ if ($win64);
+ movaps -0xd8(%rax),%xmm6
+ movaps -0xc8(%rax),%xmm7
+ movaps -0xb8(%rax),%xmm8
+ movaps -0xa8(%rax),%xmm9
+ movaps -0x98(%rax),%xmm10
+ movaps -0x88(%rax),%xmm11
+ movaps -0x78(%rax),%xmm12
+ movaps -0x68(%rax),%xmm13
+ movaps -0x58(%rax),%xmm14
+ movaps -0x48(%rax),%xmm15
+___
+$code.=<<___;
+ mov -48(%rax),%r15
+ mov -40(%rax),%r14
+ mov -32(%rax),%r13
+ mov -24(%rax),%r12
+ mov -16(%rax),%rbp
+ mov -8(%rax),%rbx
+ lea (%rax),%rsp # restore %rsp
+.Lgcm_enc_abort:
+ mov $ret,%rax # return value
+ ret
+.size aesni_gcm_encrypt,.-aesni_gcm_encrypt
+___
+
+$code.=<<___;
+.align 64
+.Lbswap_mask:
+ .byte 15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0
+.Lpoly:
+ .byte 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xc2
+.Lone_msb:
+ .byte 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
+.Ltwo_lsb:
+ .byte 2,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+.Lone_lsb:
+ .byte 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
+.asciz "AES-NI GCM module for x86_64, CRYPTOGAMS by <appro\@openssl.org>"
+.align 64
+___
+if ($win64) {
+$rec="%rcx";
+$frame="%rdx";
+$context="%r8";
+$disp="%r9";
+
+$code.=<<___
+.extern __imp_RtlVirtualUnwind
+.type gcm_se_handler,\@abi-omnipotent
+.align 16
+gcm_se_handler:
+ push %rsi
+ push %rdi
+ push %rbx
+ push %rbp
+ push %r12
+ push %r13
+ push %r14
+ push %r15
+ pushfq
+ sub \$64,%rsp
+
+ mov 120($context),%rax # pull context->Rax
+ mov 248($context),%rbx # pull context->Rip
+
+ mov 8($disp),%rsi # disp->ImageBase
+ mov 56($disp),%r11 # disp->HandlerData
+
+ mov 0(%r11),%r10d # HandlerData[0]
+ lea (%rsi,%r10),%r10 # prologue label
+ cmp %r10,%rbx # context->Rip<prologue label
+ jb .Lcommon_seh_tail
+
+ mov 152($context),%rax # pull context->Rsp
+
+ mov 4(%r11),%r10d # HandlerData[1]
+ lea (%rsi,%r10),%r10 # epilogue label
+ cmp %r10,%rbx # context->Rip>=epilogue label
+ jae .Lcommon_seh_tail
+
+ mov 120($context),%rax # pull context->Rax
+
+ mov -48(%rax),%r15
+ mov -40(%rax),%r14
+ mov -32(%rax),%r13
+ mov -24(%rax),%r12
+ mov -16(%rax),%rbp
+ mov -8(%rax),%rbx
+ mov %r15,240($context)
+ mov %r14,232($context)
+ mov %r13,224($context)
+ mov %r12,216($context)
+ mov %rbp,160($context)
+ mov %rbx,144($context)
+
+ lea -0xd8(%rax),%rsi # %xmm save area
+ lea 512($context),%rdi # & context.Xmm6
+ mov \$20,%ecx # 10*sizeof(%xmm0)/sizeof(%rax)
+ .long 0xa548f3fc # cld; rep movsq
+
+.Lcommon_seh_tail:
+ mov 8(%rax),%rdi
+ mov 16(%rax),%rsi
+ mov %rax,152($context) # restore context->Rsp
+ mov %rsi,168($context) # restore context->Rsi
+ mov %rdi,176($context) # restore context->Rdi
+
+ mov 40($disp),%rdi # disp->ContextRecord
+ mov $context,%rsi # context
+ mov \$154,%ecx # sizeof(CONTEXT)
+ .long 0xa548f3fc # cld; rep movsq
+
+ mov $disp,%rsi
+ xor %rcx,%rcx # arg1, UNW_FLAG_NHANDLER
+ mov 8(%rsi),%rdx # arg2, disp->ImageBase
+ mov 0(%rsi),%r8 # arg3, disp->ControlPc
+ mov 16(%rsi),%r9 # arg4, disp->FunctionEntry
+ mov 40(%rsi),%r10 # disp->ContextRecord
+ lea 56(%rsi),%r11 # &disp->HandlerData
+ lea 24(%rsi),%r12 # &disp->EstablisherFrame
+ mov %r10,32(%rsp) # arg5
+ mov %r11,40(%rsp) # arg6
+ mov %r12,48(%rsp) # arg7
+ mov %rcx,56(%rsp) # arg8, (NULL)
+ call *__imp_RtlVirtualUnwind(%rip)
+
+ mov \$1,%eax # ExceptionContinueSearch
+ add \$64,%rsp
+ popfq
+ pop %r15
+ pop %r14
+ pop %r13
+ pop %r12
+ pop %rbp
+ pop %rbx
+ pop %rdi
+ pop %rsi
+ ret
+.size gcm_se_handler,.-gcm_se_handler
+
+.section .pdata
+.align 4
+ .rva .LSEH_begin_aesni_gcm_decrypt
+ .rva .LSEH_end_aesni_gcm_decrypt
+ .rva .LSEH_gcm_dec_info
+
+ .rva .LSEH_begin_aesni_gcm_encrypt
+ .rva .LSEH_end_aesni_gcm_encrypt
+ .rva .LSEH_gcm_enc_info
+.section .xdata
+.align 8
+.LSEH_gcm_dec_info:
+ .byte 9,0,0,0
+ .rva gcm_se_handler
+ .rva .Lgcm_dec_body,.Lgcm_dec_abort
+.LSEH_gcm_enc_info:
+ .byte 9,0,0,0
+ .rva gcm_se_handler
+ .rva .Lgcm_enc_body,.Lgcm_enc_abort
+___
+}
+}}} else {{{
+$code=<<___; # assembler is too old
+.text
+
+.globl aesni_gcm_encrypt
+.type aesni_gcm_encrypt,\@abi-omnipotent
+aesni_gcm_encrypt:
+ xor %eax,%eax
+ ret
+.size aesni_gcm_encrypt,.-aesni_gcm_encrypt
+
+.globl aesni_gcm_decrypt
+.type aesni_gcm_decrypt,\@abi-omnipotent
+aesni_gcm_decrypt:
+ xor %eax,%eax
+ ret
+.size aesni_gcm_decrypt,.-aesni_gcm_decrypt
+___
+}}}
+
+$code =~ s/\`([^\`]*)\`/eval($1)/gem;
+
+print $code;
+
+close STDOUT;
diff --git a/crypto/openssl/crypto/modes/asm/ghash-armv4.pl b/crypto/openssl/crypto/modes/asm/ghash-armv4.pl
index d91586e..77fbf34 100755
--- a/crypto/openssl/crypto/modes/asm/ghash-armv4.pl
+++ b/crypto/openssl/crypto/modes/asm/ghash-armv4.pl
@@ -35,6 +35,20 @@
# Add NEON implementation featuring polynomial multiplication, i.e. no
# lookup tables involved. On Cortex A8 it was measured to process one
# byte in 15 cycles or 55% faster than integer-only code.
+#
+# April 2014
+#
+# Switch to multiplication algorithm suggested in paper referred
+# below and combine it with reduction algorithm from x86 module.
+# Performance improvement over previous version varies from 65% on
+# Snapdragon S4 to 110% on Cortex A9. In absolute terms Cortex A8
+# processes one byte in 8.45 cycles, A9 - in 10.2, Snapdragon S4 -
+# in 9.33.
+#
+# Câmara, D.; Gouvêa, C. P. L.; López, J. & Dahab, R.: Fast Software
+# Polynomial Multiplication on ARM Processors using the NEON Engine.
+#
+# http://conradoplg.cryptoland.net/files/2010/12/mocrysen13.pdf
# ====================================================================
# Note about "528B" variant. In ARM case it makes lesser sense to
@@ -303,117 +317,161 @@ $code.=<<___;
.size gcm_gmult_4bit,.-gcm_gmult_4bit
___
{
-my $cnt=$Htbl; # $Htbl is used once in the very beginning
-
-my ($Hhi, $Hlo, $Zo, $T, $xi, $mod) = map("d$_",(0..7));
-my ($Qhi, $Qlo, $Z, $R, $zero, $Qpost, $IN) = map("q$_",(8..15));
-
-# Z:Zo keeps 128-bit result shifted by 1 to the right, with bottom bit
-# in Zo. Or should I say "top bit", because GHASH is specified in
-# reverse bit order? Otherwise straightforward 128-bt H by one input
-# byte multiplication and modulo-reduction, times 16.
+my ($Xl,$Xm,$Xh,$IN)=map("q$_",(0..3));
+my ($t0,$t1,$t2,$t3)=map("q$_",(8..12));
+my ($Hlo,$Hhi,$Hhl,$k48,$k32,$k16)=map("d$_",(26..31));
-sub Dlo() { shift=~m|q([1]?[0-9])|?"d".($1*2):""; }
-sub Dhi() { shift=~m|q([1]?[0-9])|?"d".($1*2+1):""; }
-sub Q() { shift=~m|d([1-3]?[02468])|?"q".($1/2):""; }
+sub clmul64x64 {
+my ($r,$a,$b)=@_;
+$code.=<<___;
+ vext.8 $t0#lo, $a, $a, #1 @ A1
+ vmull.p8 $t0, $t0#lo, $b @ F = A1*B
+ vext.8 $r#lo, $b, $b, #1 @ B1
+ vmull.p8 $r, $a, $r#lo @ E = A*B1
+ vext.8 $t1#lo, $a, $a, #2 @ A2
+ vmull.p8 $t1, $t1#lo, $b @ H = A2*B
+ vext.8 $t3#lo, $b, $b, #2 @ B2
+ vmull.p8 $t3, $a, $t3#lo @ G = A*B2
+ vext.8 $t2#lo, $a, $a, #3 @ A3
+ veor $t0, $t0, $r @ L = E + F
+ vmull.p8 $t2, $t2#lo, $b @ J = A3*B
+ vext.8 $r#lo, $b, $b, #3 @ B3
+ veor $t1, $t1, $t3 @ M = G + H
+ vmull.p8 $r, $a, $r#lo @ I = A*B3
+ veor $t0#lo, $t0#lo, $t0#hi @ t0 = (L) (P0 + P1) << 8
+ vand $t0#hi, $t0#hi, $k48
+ vext.8 $t3#lo, $b, $b, #4 @ B4
+ veor $t1#lo, $t1#lo, $t1#hi @ t1 = (M) (P2 + P3) << 16
+ vand $t1#hi, $t1#hi, $k32
+ vmull.p8 $t3, $a, $t3#lo @ K = A*B4
+ veor $t2, $t2, $r @ N = I + J
+ veor $t0#lo, $t0#lo, $t0#hi
+ veor $t1#lo, $t1#lo, $t1#hi
+ veor $t2#lo, $t2#lo, $t2#hi @ t2 = (N) (P4 + P5) << 24
+ vand $t2#hi, $t2#hi, $k16
+ vext.8 $t0, $t0, $t0, #15
+ veor $t3#lo, $t3#lo, $t3#hi @ t3 = (K) (P6 + P7) << 32
+ vmov.i64 $t3#hi, #0
+ vext.8 $t1, $t1, $t1, #14
+ veor $t2#lo, $t2#lo, $t2#hi
+ vmull.p8 $r, $a, $b @ D = A*B
+ vext.8 $t3, $t3, $t3, #12
+ vext.8 $t2, $t2, $t2, #13
+ veor $t0, $t0, $t1
+ veor $t2, $t2, $t3
+ veor $r, $r, $t0
+ veor $r, $r, $t2
+___
+}
$code.=<<___;
-#if __ARM_ARCH__>=7
+#if __ARM_MAX_ARCH__>=7
+.arch armv7-a
.fpu neon
+.global gcm_init_neon
+.type gcm_init_neon,%function
+.align 4
+gcm_init_neon:
+ vld1.64 $IN#hi,[r1,:64]! @ load H
+ vmov.i8 $t0,#0xe1
+ vld1.64 $IN#lo,[r1,:64]
+ vshl.i64 $t0#hi,#57
+ vshr.u64 $t0#lo,#63 @ t0=0xc2....01
+ vdup.8 $t1,$IN#hi[7]
+ vshr.u64 $Hlo,$IN#lo,#63
+ vshr.s8 $t1,#7 @ broadcast carry bit
+ vshl.i64 $IN,$IN,#1
+ vand $t0,$t0,$t1
+ vorr $IN#hi,$Hlo @ H<<<=1
+ veor $IN,$IN,$t0 @ twisted H
+ vstmia r0,{$IN}
+
+ ret @ bx lr
+.size gcm_init_neon,.-gcm_init_neon
+
.global gcm_gmult_neon
.type gcm_gmult_neon,%function
.align 4
gcm_gmult_neon:
- sub $Htbl,#16 @ point at H in GCM128_CTX
- vld1.64 `&Dhi("$IN")`,[$Xi,:64]!@ load Xi
- vmov.i32 $mod,#0xe1 @ our irreducible polynomial
- vld1.64 `&Dlo("$IN")`,[$Xi,:64]!
- vshr.u64 $mod,#32
- vldmia $Htbl,{$Hhi-$Hlo} @ load H
- veor $zero,$zero
+ vld1.64 $IN#hi,[$Xi,:64]! @ load Xi
+ vld1.64 $IN#lo,[$Xi,:64]!
+ vmov.i64 $k48,#0x0000ffffffffffff
+ vldmia $Htbl,{$Hlo-$Hhi} @ load twisted H
+ vmov.i64 $k32,#0x00000000ffffffff
#ifdef __ARMEL__
vrev64.8 $IN,$IN
#endif
- veor $Qpost,$Qpost
- veor $R,$R
- mov $cnt,#16
- veor $Z,$Z
+ vmov.i64 $k16,#0x000000000000ffff
+ veor $Hhl,$Hlo,$Hhi @ Karatsuba pre-processing
mov $len,#16
- veor $Zo,$Zo
- vdup.8 $xi,`&Dlo("$IN")`[0] @ broadcast lowest byte
- b .Linner_neon
+ b .Lgmult_neon
.size gcm_gmult_neon,.-gcm_gmult_neon
.global gcm_ghash_neon
.type gcm_ghash_neon,%function
.align 4
gcm_ghash_neon:
- vld1.64 `&Dhi("$Z")`,[$Xi,:64]! @ load Xi
- vmov.i32 $mod,#0xe1 @ our irreducible polynomial
- vld1.64 `&Dlo("$Z")`,[$Xi,:64]!
- vshr.u64 $mod,#32
- vldmia $Xi,{$Hhi-$Hlo} @ load H
- veor $zero,$zero
- nop
+ vld1.64 $Xl#hi,[$Xi,:64]! @ load Xi
+ vld1.64 $Xl#lo,[$Xi,:64]!
+ vmov.i64 $k48,#0x0000ffffffffffff
+ vldmia $Htbl,{$Hlo-$Hhi} @ load twisted H
+ vmov.i64 $k32,#0x00000000ffffffff
#ifdef __ARMEL__
- vrev64.8 $Z,$Z
+ vrev64.8 $Xl,$Xl
#endif
-.Louter_neon:
- vld1.64 `&Dhi($IN)`,[$inp]! @ load inp
- veor $Qpost,$Qpost
- vld1.64 `&Dlo($IN)`,[$inp]!
- veor $R,$R
- mov $cnt,#16
+ vmov.i64 $k16,#0x000000000000ffff
+ veor $Hhl,$Hlo,$Hhi @ Karatsuba pre-processing
+
+.Loop_neon:
+ vld1.64 $IN#hi,[$inp]! @ load inp
+ vld1.64 $IN#lo,[$inp]!
#ifdef __ARMEL__
vrev64.8 $IN,$IN
#endif
- veor $Zo,$Zo
- veor $IN,$Z @ inp^=Xi
- veor $Z,$Z
- vdup.8 $xi,`&Dlo("$IN")`[0] @ broadcast lowest byte
-.Linner_neon:
- subs $cnt,$cnt,#1
- vmull.p8 $Qlo,$Hlo,$xi @ H.lo·Xi[i]
- vmull.p8 $Qhi,$Hhi,$xi @ H.hi·Xi[i]
- vext.8 $IN,$zero,#1 @ IN>>=8
-
- veor $Z,$Qpost @ modulo-scheduled part
- vshl.i64 `&Dlo("$R")`,#48
- vdup.8 $xi,`&Dlo("$IN")`[0] @ broadcast lowest byte
- veor $T,`&Dlo("$Qlo")`,`&Dlo("$Z")`
-
- veor `&Dhi("$Z")`,`&Dlo("$R")`
- vuzp.8 $Qlo,$Qhi
- vsli.8 $Zo,$T,#1 @ compose the "carry" byte
- vext.8 $Z,$zero,#1 @ Z>>=8
-
- vmull.p8 $R,$Zo,$mod @ "carry"·0xe1
- vshr.u8 $Zo,$T,#7 @ save Z's bottom bit
- vext.8 $Qpost,$Qlo,$zero,#1 @ Qlo>>=8
- veor $Z,$Qhi
- bne .Linner_neon
-
- veor $Z,$Qpost @ modulo-scheduled artefact
- vshl.i64 `&Dlo("$R")`,#48
- veor `&Dhi("$Z")`,`&Dlo("$R")`
-
- @ finalization, normalize Z:Zo
- vand $Zo,$mod @ suffices to mask the bit
- vshr.u64 `&Dhi(&Q("$Zo"))`,`&Dlo("$Z")`,#63
- vshl.i64 $Z,#1
+ veor $IN,$Xl @ inp^=Xi
+.Lgmult_neon:
+___
+ &clmul64x64 ($Xl,$Hlo,"$IN#lo"); # H.lo·Xi.lo
+$code.=<<___;
+ veor $IN#lo,$IN#lo,$IN#hi @ Karatsuba pre-processing
+___
+ &clmul64x64 ($Xm,$Hhl,"$IN#lo"); # (H.lo+H.hi)·(Xi.lo+Xi.hi)
+ &clmul64x64 ($Xh,$Hhi,"$IN#hi"); # H.hi·Xi.hi
+$code.=<<___;
+ veor $Xm,$Xm,$Xl @ Karatsuba post-processing
+ veor $Xm,$Xm,$Xh
+ veor $Xl#hi,$Xl#hi,$Xm#lo
+ veor $Xh#lo,$Xh#lo,$Xm#hi @ Xh|Xl - 256-bit result
+
+ @ equivalent of reduction_avx from ghash-x86_64.pl
+ vshl.i64 $t1,$Xl,#57 @ 1st phase
+ vshl.i64 $t2,$Xl,#62
+ veor $t2,$t2,$t1 @
+ vshl.i64 $t1,$Xl,#63
+ veor $t2, $t2, $t1 @
+ veor $Xl#hi,$Xl#hi,$t2#lo @
+ veor $Xh#lo,$Xh#lo,$t2#hi
+
+ vshr.u64 $t2,$Xl,#1 @ 2nd phase
+ veor $Xh,$Xh,$Xl
+ veor $Xl,$Xl,$t2 @
+ vshr.u64 $t2,$t2,#6
+ vshr.u64 $Xl,$Xl,#1 @
+ veor $Xl,$Xl,$Xh @
+ veor $Xl,$Xl,$t2 @
+
subs $len,#16
- vorr $Z,`&Q("$Zo")` @ Z=Z:Zo<<1
- bne .Louter_neon
+ bne .Loop_neon
#ifdef __ARMEL__
- vrev64.8 $Z,$Z
+ vrev64.8 $Xl,$Xl
#endif
sub $Xi,#16
- vst1.64 `&Dhi("$Z")`,[$Xi,:64]! @ write out Xi
- vst1.64 `&Dlo("$Z")`,[$Xi,:64]
+ vst1.64 $Xl#hi,[$Xi,:64]! @ write out Xi
+ vst1.64 $Xl#lo,[$Xi,:64]
- bx lr
+ ret @ bx lr
.size gcm_ghash_neon,.-gcm_ghash_neon
#endif
___
@@ -423,7 +481,13 @@ $code.=<<___;
.align 2
___
-$code =~ s/\`([^\`]*)\`/eval $1/gem;
-$code =~ s/\bbx\s+lr\b/.word\t0xe12fff1e/gm; # make it possible to compile with -march=armv4
-print $code;
+foreach (split("\n",$code)) {
+ s/\`([^\`]*)\`/eval $1/geo;
+
+ s/\bq([0-9]+)#(lo|hi)/sprintf "d%d",2*$1+($2 eq "hi")/geo or
+ s/\bret\b/bx lr/go or
+ s/\bbx\s+lr\b/.word\t0xe12fff1e/go; # make it possible to compile with -march=armv4
+
+ print $_,"\n";
+}
close STDOUT; # enforce flush
diff --git a/crypto/openssl/crypto/modes/asm/ghash-s390x.pl b/crypto/openssl/crypto/modes/asm/ghash-s390x.pl
index 6a40d5d..39096b4 100755
--- a/crypto/openssl/crypto/modes/asm/ghash-s390x.pl
+++ b/crypto/openssl/crypto/modes/asm/ghash-s390x.pl
@@ -186,13 +186,13 @@ $code.=<<___;
sllg $rem1,$Zlo,3
xgr $Zlo,$tmp
ngr $rem1,$x78
+ sllg $tmp,$Zhi,60
j .Lghash_inner
.align 16
.Lghash_inner:
srlg $Zlo,$Zlo,4
- sllg $tmp,$Zhi,60
- xg $Zlo,8($nlo,$Htbl)
srlg $Zhi,$Zhi,4
+ xg $Zlo,8($nlo,$Htbl)
llgc $xi,0($cnt,$Xi)
xg $Zhi,0($nlo,$Htbl)
sllg $nlo,$xi,4
@@ -213,9 +213,9 @@ $code.=<<___;
sllg $rem1,$Zlo,3
xgr $Zlo,$tmp
ngr $rem1,$x78
+ sllg $tmp,$Zhi,60
brct $cnt,.Lghash_inner
- sllg $tmp,$Zhi,60
srlg $Zlo,$Zlo,4
srlg $Zhi,$Zhi,4
xg $Zlo,8($nlo,$Htbl)
diff --git a/crypto/openssl/crypto/modes/asm/ghash-sparcv9.pl b/crypto/openssl/crypto/modes/asm/ghash-sparcv9.pl
index 70e7b04..0365e0f 100755
--- a/crypto/openssl/crypto/modes/asm/ghash-sparcv9.pl
+++ b/crypto/openssl/crypto/modes/asm/ghash-sparcv9.pl
@@ -36,6 +36,15 @@
# references to input data and Z.hi updates to achieve 12 cycles
# timing. To anchor to something else, sha1-sparcv9.pl spends 11.6
# cycles to process one byte on UltraSPARC pre-Tx CPU and ~24 on T1.
+#
+# October 2012
+#
+# Add VIS3 lookup-table-free implementation using polynomial
+# multiplication xmulx[hi] and extended addition addxc[cc]
+# instructions. 4.52/7.63x improvement on T3/T4 or in absolute
+# terms 7.90/2.14 cycles per byte. On T4 multi-process benchmark
+# saturates at ~15.5x single-process result on 8-core processor,
+# or ~20.5GBps per 2.85GHz socket.
$bits=32;
for (@ARGV) { $bits=64 if (/\-m64/ || /\-xarch\=v9/); }
@@ -66,6 +75,10 @@ $Htbl="%i1";
$inp="%i2";
$len="%i3";
+$code.=<<___ if ($bits==64);
+.register %g2,#scratch
+.register %g3,#scratch
+___
$code.=<<___;
.section ".text",#alloc,#execinstr
@@ -321,10 +334,238 @@ gcm_gmult_4bit:
restore
.type gcm_gmult_4bit,#function
.size gcm_gmult_4bit,(.-gcm_gmult_4bit)
-.asciz "GHASH for SPARCv9, CRYPTOGAMS by <appro\@openssl.org>"
+___
+
+{{{
+# Straightforward 128x128-bit multiplication using Karatsuba algorithm
+# followed by pair of 64-bit reductions [with a shortcut in first one,
+# which allowed to break dependency between reductions and remove one
+# multiplication from critical path]. While it might be suboptimal
+# with regard to sheer number of multiplications, other methods [such
+# as aggregate reduction] would require more 64-bit registers, which
+# we don't have in 32-bit application context.
+
+($Xip,$Htable,$inp,$len)=map("%i$_",(0..3));
+
+($Hhl,$Hlo,$Hhi,$Xlo,$Xhi,$xE1,$sqr, $C0,$C1,$C2,$C3,$V)=
+ (map("%o$_",(0..5,7)),map("%g$_",(1..5)));
+
+($shl,$shr)=map("%l$_",(0..7));
+
+# For details regarding "twisted H" see ghash-x86.pl.
+$code.=<<___;
+.globl gcm_init_vis3
+.align 32
+gcm_init_vis3:
+ save %sp,-$frame,%sp
+
+ ldx [%i1+0],$Hhi
+ ldx [%i1+8],$Hlo
+ mov 0xE1,$Xhi
+ mov 1,$Xlo
+ sllx $Xhi,57,$Xhi
+ srax $Hhi,63,$C0 ! broadcast carry
+ addcc $Hlo,$Hlo,$Hlo ! H<<=1
+ addxc $Hhi,$Hhi,$Hhi
+ and $C0,$Xlo,$Xlo
+ and $C0,$Xhi,$Xhi
+ xor $Xlo,$Hlo,$Hlo
+ xor $Xhi,$Hhi,$Hhi
+ stx $Hlo,[%i0+8] ! save twisted H
+ stx $Hhi,[%i0+0]
+
+ sethi %hi(0xA0406080),$V
+ sethi %hi(0x20C0E000),%l0
+ or $V,%lo(0xA0406080),$V
+ or %l0,%lo(0x20C0E000),%l0
+ sllx $V,32,$V
+ or %l0,$V,$V ! (0xE0·i)&0xff=0xA040608020C0E000
+ stx $V,[%i0+16]
+
+ ret
+ restore
+.type gcm_init_vis3,#function
+.size gcm_init_vis3,.-gcm_init_vis3
+
+.globl gcm_gmult_vis3
+.align 32
+gcm_gmult_vis3:
+ save %sp,-$frame,%sp
+
+ ldx [$Xip+8],$Xlo ! load Xi
+ ldx [$Xip+0],$Xhi
+ ldx [$Htable+8],$Hlo ! load twisted H
+ ldx [$Htable+0],$Hhi
+
+ mov 0xE1,%l7
+ sllx %l7,57,$xE1 ! 57 is not a typo
+ ldx [$Htable+16],$V ! (0xE0·i)&0xff=0xA040608020C0E000
+
+ xor $Hhi,$Hlo,$Hhl ! Karatsuba pre-processing
+ xmulx $Xlo,$Hlo,$C0
+ xor $Xlo,$Xhi,$C2 ! Karatsuba pre-processing
+ xmulx $C2,$Hhl,$C1
+ xmulxhi $Xlo,$Hlo,$Xlo
+ xmulxhi $C2,$Hhl,$C2
+ xmulxhi $Xhi,$Hhi,$C3
+ xmulx $Xhi,$Hhi,$Xhi
+
+ sll $C0,3,$sqr
+ srlx $V,$sqr,$sqr ! ·0xE0 [implicit &(7<<3)]
+ xor $C0,$sqr,$sqr
+ sllx $sqr,57,$sqr ! ($C0·0xE1)<<1<<56 [implicit &0x7f]
+
+ xor $C0,$C1,$C1 ! Karatsuba post-processing
+ xor $Xlo,$C2,$C2
+ xor $sqr,$Xlo,$Xlo ! real destination is $C1
+ xor $C3,$C2,$C2
+ xor $Xlo,$C1,$C1
+ xor $Xhi,$C2,$C2
+ xor $Xhi,$C1,$C1
+
+ xmulxhi $C0,$xE1,$Xlo ! ·0xE1<<1<<56
+ xor $C0,$C2,$C2
+ xmulx $C1,$xE1,$C0
+ xor $C1,$C3,$C3
+ xmulxhi $C1,$xE1,$C1
+
+ xor $Xlo,$C2,$C2
+ xor $C0,$C2,$C2
+ xor $C1,$C3,$C3
+
+ stx $C2,[$Xip+8] ! save Xi
+ stx $C3,[$Xip+0]
+
+ ret
+ restore
+.type gcm_gmult_vis3,#function
+.size gcm_gmult_vis3,.-gcm_gmult_vis3
+
+.globl gcm_ghash_vis3
+.align 32
+gcm_ghash_vis3:
+ save %sp,-$frame,%sp
+
+ ldx [$Xip+8],$C2 ! load Xi
+ ldx [$Xip+0],$C3
+ ldx [$Htable+8],$Hlo ! load twisted H
+ ldx [$Htable+0],$Hhi
+
+ mov 0xE1,%l7
+ sllx %l7,57,$xE1 ! 57 is not a typo
+ ldx [$Htable+16],$V ! (0xE0·i)&0xff=0xA040608020C0E000
+
+ and $inp,7,$shl
+ andn $inp,7,$inp
+ sll $shl,3,$shl
+ prefetch [$inp+63], 20
+ sub %g0,$shl,$shr
+
+ xor $Hhi,$Hlo,$Hhl ! Karatsuba pre-processing
+.Loop:
+ ldx [$inp+8],$Xlo
+ brz,pt $shl,1f
+ ldx [$inp+0],$Xhi
+
+ ldx [$inp+16],$C1 ! align data
+ srlx $Xlo,$shr,$C0
+ sllx $Xlo,$shl,$Xlo
+ sllx $Xhi,$shl,$Xhi
+ srlx $C1,$shr,$C1
+ or $C0,$Xhi,$Xhi
+ or $C1,$Xlo,$Xlo
+1:
+ add $inp,16,$inp
+ sub $len,16,$len
+ xor $C2,$Xlo,$Xlo
+ xor $C3,$Xhi,$Xhi
+ prefetch [$inp+63], 20
+
+ xmulx $Xlo,$Hlo,$C0
+ xor $Xlo,$Xhi,$C2 ! Karatsuba pre-processing
+ xmulx $C2,$Hhl,$C1
+ xmulxhi $Xlo,$Hlo,$Xlo
+ xmulxhi $C2,$Hhl,$C2
+ xmulxhi $Xhi,$Hhi,$C3
+ xmulx $Xhi,$Hhi,$Xhi
+
+ sll $C0,3,$sqr
+ srlx $V,$sqr,$sqr ! ·0xE0 [implicit &(7<<3)]
+ xor $C0,$sqr,$sqr
+ sllx $sqr,57,$sqr ! ($C0·0xE1)<<1<<56 [implicit &0x7f]
+
+ xor $C0,$C1,$C1 ! Karatsuba post-processing
+ xor $Xlo,$C2,$C2
+ xor $sqr,$Xlo,$Xlo ! real destination is $C1
+ xor $C3,$C2,$C2
+ xor $Xlo,$C1,$C1
+ xor $Xhi,$C2,$C2
+ xor $Xhi,$C1,$C1
+
+ xmulxhi $C0,$xE1,$Xlo ! ·0xE1<<1<<56
+ xor $C0,$C2,$C2
+ xmulx $C1,$xE1,$C0
+ xor $C1,$C3,$C3
+ xmulxhi $C1,$xE1,$C1
+
+ xor $Xlo,$C2,$C2
+ xor $C0,$C2,$C2
+ brnz,pt $len,.Loop
+ xor $C1,$C3,$C3
+
+ stx $C2,[$Xip+8] ! save Xi
+ stx $C3,[$Xip+0]
+
+ ret
+ restore
+.type gcm_ghash_vis3,#function
+.size gcm_ghash_vis3,.-gcm_ghash_vis3
+___
+}}}
+$code.=<<___;
+.asciz "GHASH for SPARCv9/VIS3, CRYPTOGAMS by <appro\@openssl.org>"
.align 4
___
-$code =~ s/\`([^\`]*)\`/eval $1/gem;
-print $code;
+
+# Purpose of these subroutines is to explicitly encode VIS instructions,
+# so that one can compile the module without having to specify VIS
+# extentions on compiler command line, e.g. -xarch=v9 vs. -xarch=v9a.
+# Idea is to reserve for option to produce "universal" binary and let
+# programmer detect if current CPU is VIS capable at run-time.
+sub unvis3 {
+my ($mnemonic,$rs1,$rs2,$rd)=@_;
+my %bias = ( "g" => 0, "o" => 8, "l" => 16, "i" => 24 );
+my ($ref,$opf);
+my %visopf = ( "addxc" => 0x011,
+ "addxccc" => 0x013,
+ "xmulx" => 0x115,
+ "xmulxhi" => 0x116 );
+
+ $ref = "$mnemonic\t$rs1,$rs2,$rd";
+
+ if ($opf=$visopf{$mnemonic}) {
+ foreach ($rs1,$rs2,$rd) {
+ return $ref if (!/%([goli])([0-9])/);
+ $_=$bias{$1}+$2;
+ }
+
+ return sprintf ".word\t0x%08x !%s",
+ 0x81b00000|$rd<<25|$rs1<<14|$opf<<5|$rs2,
+ $ref;
+ } else {
+ return $ref;
+ }
+}
+
+foreach (split("\n",$code)) {
+ s/\`([^\`]*)\`/eval $1/ge;
+
+ s/\b(xmulx[hi]*|addxc[c]{0,2})\s+(%[goli][0-7]),\s*(%[goli][0-7]),\s*(%[goli][0-7])/
+ &unvis3($1,$2,$3,$4)
+ /ge;
+
+ print $_,"\n";
+}
+
close STDOUT;
diff --git a/crypto/openssl/crypto/modes/asm/ghash-x86.pl b/crypto/openssl/crypto/modes/asm/ghash-x86.pl
index 83c727e..23a5527 100755
--- a/crypto/openssl/crypto/modes/asm/ghash-x86.pl
+++ b/crypto/openssl/crypto/modes/asm/ghash-x86.pl
@@ -12,25 +12,27 @@
# The module implements "4-bit" GCM GHASH function and underlying
# single multiplication operation in GF(2^128). "4-bit" means that it
# uses 256 bytes per-key table [+64/128 bytes fixed table]. It has two
-# code paths: vanilla x86 and vanilla MMX. Former will be executed on
-# 486 and Pentium, latter on all others. MMX GHASH features so called
+# code paths: vanilla x86 and vanilla SSE. Former will be executed on
+# 486 and Pentium, latter on all others. SSE GHASH features so called
# "528B" variant of "4-bit" method utilizing additional 256+16 bytes
# of per-key storage [+512 bytes shared table]. Performance results
# are for streamed GHASH subroutine and are expressed in cycles per
# processed byte, less is better:
#
-# gcc 2.95.3(*) MMX assembler x86 assembler
+# gcc 2.95.3(*) SSE assembler x86 assembler
#
# Pentium 105/111(**) - 50
# PIII 68 /75 12.2 24
# P4 125/125 17.8 84(***)
# Opteron 66 /70 10.1 30
# Core2 54 /67 8.4 18
+# Atom 105/105 16.8 53
+# VIA Nano 69 /71 13.0 27
#
# (*) gcc 3.4.x was observed to generate few percent slower code,
# which is one of reasons why 2.95.3 results were chosen,
# another reason is lack of 3.4.x results for older CPUs;
-# comparison with MMX results is not completely fair, because C
+# comparison with SSE results is not completely fair, because C
# results are for vanilla "256B" implementation, while
# assembler results are for "528B";-)
# (**) second number is result for code compiled with -fPIC flag,
@@ -40,8 +42,8 @@
#
# To summarize, it's >2-5 times faster than gcc-generated code. To
# anchor it to something else SHA1 assembler processes one byte in
-# 11-13 cycles on contemporary x86 cores. As for choice of MMX in
-# particular, see comment at the end of the file...
+# ~7 cycles on contemporary x86 cores. As for choice of MMX/SSE
+# in particular, see comment at the end of the file...
# May 2010
#
@@ -113,6 +115,16 @@
# similar manner resulted in almost 20% degradation on Sandy Bridge,
# where original 64-bit code processes one byte in 1.95 cycles.
+#####################################################################
+# For reference, AMD Bulldozer processes one byte in 1.98 cycles in
+# 32-bit mode and 1.89 in 64-bit.
+
+# February 2013
+#
+# Overhaul: aggregate Karatsuba post-processing, improve ILP in
+# reduction_alg9. Resulting performance is 1.96 cycles per byte on
+# Westmere, 1.95 - on Sandy/Ivy Bridge, 1.76 - on Bulldozer.
+
$0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1;
push(@INC,"${dir}","${dir}../../perlasm");
require "x86asm.pl";
@@ -822,17 +834,18 @@ $len="ebx";
&static_label("bswap");
sub clmul64x64_T2 { # minimal "register" pressure
-my ($Xhi,$Xi,$Hkey)=@_;
+my ($Xhi,$Xi,$Hkey,$HK)=@_;
&movdqa ($Xhi,$Xi); #
&pshufd ($T1,$Xi,0b01001110);
- &pshufd ($T2,$Hkey,0b01001110);
+ &pshufd ($T2,$Hkey,0b01001110) if (!defined($HK));
&pxor ($T1,$Xi); #
- &pxor ($T2,$Hkey);
+ &pxor ($T2,$Hkey) if (!defined($HK));
+ $HK=$T2 if (!defined($HK));
&pclmulqdq ($Xi,$Hkey,0x00); #######
&pclmulqdq ($Xhi,$Hkey,0x11); #######
- &pclmulqdq ($T1,$T2,0x00); #######
+ &pclmulqdq ($T1,$HK,0x00); #######
&xorps ($T1,$Xi); #
&xorps ($T1,$Xhi); #
@@ -879,31 +892,32 @@ if (1) { # Algorithm 9 with <<1 twist.
# below. Algorithm 9 was therefore chosen for
# further optimization...
-sub reduction_alg9 { # 17/13 times faster than Intel version
+sub reduction_alg9 { # 17/11 times faster than Intel version
my ($Xhi,$Xi) = @_;
# 1st phase
- &movdqa ($T1,$Xi); #
+ &movdqa ($T2,$Xi); #
+ &movdqa ($T1,$Xi);
+ &psllq ($Xi,5);
+ &pxor ($T1,$Xi); #
&psllq ($Xi,1);
&pxor ($Xi,$T1); #
- &psllq ($Xi,5); #
- &pxor ($Xi,$T1); #
&psllq ($Xi,57); #
- &movdqa ($T2,$Xi); #
+ &movdqa ($T1,$Xi); #
&pslldq ($Xi,8);
- &psrldq ($T2,8); #
- &pxor ($Xi,$T1);
- &pxor ($Xhi,$T2); #
+ &psrldq ($T1,8); #
+ &pxor ($Xi,$T2);
+ &pxor ($Xhi,$T1); #
# 2nd phase
&movdqa ($T2,$Xi);
+ &psrlq ($Xi,1);
+ &pxor ($Xhi,$T2); #
+ &pxor ($T2,$Xi);
&psrlq ($Xi,5);
&pxor ($Xi,$T2); #
&psrlq ($Xi,1); #
- &pxor ($Xi,$T2); #
- &pxor ($T2,$Xhi);
- &psrlq ($Xi,1); #
- &pxor ($Xi,$T2); #
+ &pxor ($Xi,$Xhi) #
}
&function_begin_B("gcm_init_clmul");
@@ -937,8 +951,14 @@ my ($Xhi,$Xi) = @_;
&clmul64x64_T2 ($Xhi,$Xi,$Hkey);
&reduction_alg9 ($Xhi,$Xi);
+ &pshufd ($T1,$Hkey,0b01001110);
+ &pshufd ($T2,$Xi,0b01001110);
+ &pxor ($T1,$Hkey); # Karatsuba pre-processing
&movdqu (&QWP(0,$Htbl),$Hkey); # save H
+ &pxor ($T2,$Xi); # Karatsuba pre-processing
&movdqu (&QWP(16,$Htbl),$Xi); # save H^2
+ &palignr ($T2,$T1,8); # low part is H.lo^H.hi
+ &movdqu (&QWP(32,$Htbl),$T2); # save Karatsuba "salt"
&ret ();
&function_end_B("gcm_init_clmul");
@@ -956,8 +976,9 @@ my ($Xhi,$Xi) = @_;
&movdqa ($T3,&QWP(0,$const));
&movups ($Hkey,&QWP(0,$Htbl));
&pshufb ($Xi,$T3);
+ &movups ($T2,&QWP(32,$Htbl));
- &clmul64x64_T2 ($Xhi,$Xi,$Hkey);
+ &clmul64x64_T2 ($Xhi,$Xi,$Hkey,$T2);
&reduction_alg9 ($Xhi,$Xi);
&pshufb ($Xi,$T3);
@@ -994,79 +1015,109 @@ my ($Xhi,$Xi) = @_;
&movdqu ($Xn,&QWP(16,$inp)); # Ii+1
&pshufb ($T1,$T3);
&pshufb ($Xn,$T3);
+ &movdqu ($T3,&QWP(32,$Htbl));
&pxor ($Xi,$T1); # Ii+Xi
- &clmul64x64_T2 ($Xhn,$Xn,$Hkey); # H*Ii+1
+ &pshufd ($T1,$Xn,0b01001110); # H*Ii+1
+ &movdqa ($Xhn,$Xn);
+ &pxor ($T1,$Xn); #
+ &lea ($inp,&DWP(32,$inp)); # i+=2
+
+ &pclmulqdq ($Xn,$Hkey,0x00); #######
+ &pclmulqdq ($Xhn,$Hkey,0x11); #######
+ &pclmulqdq ($T1,$T3,0x00); #######
&movups ($Hkey,&QWP(16,$Htbl)); # load H^2
+ &nop ();
- &lea ($inp,&DWP(32,$inp)); # i+=2
&sub ($len,0x20);
&jbe (&label("even_tail"));
+ &jmp (&label("mod_loop"));
-&set_label("mod_loop");
- &clmul64x64_T2 ($Xhi,$Xi,$Hkey); # H^2*(Ii+Xi)
- &movdqu ($T1,&QWP(0,$inp)); # Ii
- &movups ($Hkey,&QWP(0,$Htbl)); # load H
+&set_label("mod_loop",32);
+ &pshufd ($T2,$Xi,0b01001110); # H^2*(Ii+Xi)
+ &movdqa ($Xhi,$Xi);
+ &pxor ($T2,$Xi); #
+ &nop ();
- &pxor ($Xi,$Xn); # (H*Ii+1) + H^2*(Ii+Xi)
- &pxor ($Xhi,$Xhn);
+ &pclmulqdq ($Xi,$Hkey,0x00); #######
+ &pclmulqdq ($Xhi,$Hkey,0x11); #######
+ &pclmulqdq ($T2,$T3,0x10); #######
+ &movups ($Hkey,&QWP(0,$Htbl)); # load H
- &movdqu ($Xn,&QWP(16,$inp)); # Ii+1
- &pshufb ($T1,$T3);
- &pshufb ($Xn,$T3);
+ &xorps ($Xi,$Xn); # (H*Ii+1) + H^2*(Ii+Xi)
+ &movdqa ($T3,&QWP(0,$const));
+ &xorps ($Xhi,$Xhn);
+ &movdqu ($Xhn,&QWP(0,$inp)); # Ii
+ &pxor ($T1,$Xi); # aggregated Karatsuba post-processing
+ &movdqu ($Xn,&QWP(16,$inp)); # Ii+1
+ &pxor ($T1,$Xhi); #
- &movdqa ($T3,$Xn); #&clmul64x64_TX ($Xhn,$Xn,$Hkey); H*Ii+1
- &movdqa ($Xhn,$Xn);
- &pxor ($Xhi,$T1); # "Ii+Xi", consume early
+ &pshufb ($Xhn,$T3);
+ &pxor ($T2,$T1); #
- &movdqa ($T1,$Xi); #&reduction_alg9($Xhi,$Xi); 1st phase
+ &movdqa ($T1,$T2); #
+ &psrldq ($T2,8);
+ &pslldq ($T1,8); #
+ &pxor ($Xhi,$T2);
+ &pxor ($Xi,$T1); #
+ &pshufb ($Xn,$T3);
+ &pxor ($Xhi,$Xhn); # "Ii+Xi", consume early
+
+ &movdqa ($Xhn,$Xn); #&clmul64x64_TX ($Xhn,$Xn,$Hkey); H*Ii+1
+ &movdqa ($T2,$Xi); #&reduction_alg9($Xhi,$Xi); 1st phase
+ &movdqa ($T1,$Xi);
+ &psllq ($Xi,5);
+ &pxor ($T1,$Xi); #
&psllq ($Xi,1);
&pxor ($Xi,$T1); #
- &psllq ($Xi,5); #
- &pxor ($Xi,$T1); #
&pclmulqdq ($Xn,$Hkey,0x00); #######
+ &movups ($T3,&QWP(32,$Htbl));
&psllq ($Xi,57); #
- &movdqa ($T2,$Xi); #
+ &movdqa ($T1,$Xi); #
&pslldq ($Xi,8);
- &psrldq ($T2,8); #
- &pxor ($Xi,$T1);
- &pshufd ($T1,$T3,0b01001110);
+ &psrldq ($T1,8); #
+ &pxor ($Xi,$T2);
+ &pxor ($Xhi,$T1); #
+ &pshufd ($T1,$Xhn,0b01001110);
+ &movdqa ($T2,$Xi); # 2nd phase
+ &psrlq ($Xi,1);
+ &pxor ($T1,$Xhn);
&pxor ($Xhi,$T2); #
- &pxor ($T1,$T3);
- &pshufd ($T3,$Hkey,0b01001110);
- &pxor ($T3,$Hkey); #
-
&pclmulqdq ($Xhn,$Hkey,0x11); #######
- &movdqa ($T2,$Xi); # 2nd phase
+ &movups ($Hkey,&QWP(16,$Htbl)); # load H^2
+ &pxor ($T2,$Xi);
&psrlq ($Xi,5);
&pxor ($Xi,$T2); #
&psrlq ($Xi,1); #
- &pxor ($Xi,$T2); #
- &pxor ($T2,$Xhi);
- &psrlq ($Xi,1); #
- &pxor ($Xi,$T2); #
-
+ &pxor ($Xi,$Xhi) #
&pclmulqdq ($T1,$T3,0x00); #######
- &movups ($Hkey,&QWP(16,$Htbl)); # load H^2
- &xorps ($T1,$Xn); #
- &xorps ($T1,$Xhn); #
-
- &movdqa ($T3,$T1); #
- &psrldq ($T1,8);
- &pslldq ($T3,8); #
- &pxor ($Xhn,$T1);
- &pxor ($Xn,$T3); #
- &movdqa ($T3,&QWP(0,$const));
&lea ($inp,&DWP(32,$inp));
&sub ($len,0x20);
&ja (&label("mod_loop"));
&set_label("even_tail");
- &clmul64x64_T2 ($Xhi,$Xi,$Hkey); # H^2*(Ii+Xi)
+ &pshufd ($T2,$Xi,0b01001110); # H^2*(Ii+Xi)
+ &movdqa ($Xhi,$Xi);
+ &pxor ($T2,$Xi); #
- &pxor ($Xi,$Xn); # (H*Ii+1) + H^2*(Ii+Xi)
- &pxor ($Xhi,$Xhn);
+ &pclmulqdq ($Xi,$Hkey,0x00); #######
+ &pclmulqdq ($Xhi,$Hkey,0x11); #######
+ &pclmulqdq ($T2,$T3,0x10); #######
+ &movdqa ($T3,&QWP(0,$const));
+
+ &xorps ($Xi,$Xn); # (H*Ii+1) + H^2*(Ii+Xi)
+ &xorps ($Xhi,$Xhn);
+ &pxor ($T1,$Xi); # aggregated Karatsuba post-processing
+ &pxor ($T1,$Xhi); #
+
+ &pxor ($T2,$T1); #
+
+ &movdqa ($T1,$T2); #
+ &psrldq ($T2,8);
+ &pslldq ($T1,8); #
+ &pxor ($Xhi,$T2);
+ &pxor ($Xi,$T1); #
&reduction_alg9 ($Xhi,$Xi);
@@ -1273,13 +1324,6 @@ my ($Xhi,$Xi)=@_;
&set_label("bswap",64);
&data_byte(15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0);
&data_byte(1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xc2); # 0x1c2_polynomial
-}} # $sse2
-
-&set_label("rem_4bit",64);
- &data_word(0,0x0000<<$S,0,0x1C20<<$S,0,0x3840<<$S,0,0x2460<<$S);
- &data_word(0,0x7080<<$S,0,0x6CA0<<$S,0,0x48C0<<$S,0,0x54E0<<$S);
- &data_word(0,0xE100<<$S,0,0xFD20<<$S,0,0xD940<<$S,0,0xC560<<$S);
- &data_word(0,0x9180<<$S,0,0x8DA0<<$S,0,0xA9C0<<$S,0,0xB5E0<<$S);
&set_label("rem_8bit",64);
&data_short(0x0000,0x01C2,0x0384,0x0246,0x0708,0x06CA,0x048C,0x054E);
&data_short(0x0E10,0x0FD2,0x0D94,0x0C56,0x0918,0x08DA,0x0A9C,0x0B5E);
@@ -1313,6 +1357,13 @@ my ($Xhi,$Xi)=@_;
&data_short(0xA7D0,0xA612,0xA454,0xA596,0xA0D8,0xA11A,0xA35C,0xA29E);
&data_short(0xB5E0,0xB422,0xB664,0xB7A6,0xB2E8,0xB32A,0xB16C,0xB0AE);
&data_short(0xBBF0,0xBA32,0xB874,0xB9B6,0xBCF8,0xBD3A,0xBF7C,0xBEBE);
+}} # $sse2
+
+&set_label("rem_4bit",64);
+ &data_word(0,0x0000<<$S,0,0x1C20<<$S,0,0x3840<<$S,0,0x2460<<$S);
+ &data_word(0,0x7080<<$S,0,0x6CA0<<$S,0,0x48C0<<$S,0,0x54E0<<$S);
+ &data_word(0,0xE100<<$S,0,0xFD20<<$S,0,0xD940<<$S,0,0xC560<<$S);
+ &data_word(0,0x9180<<$S,0,0x8DA0<<$S,0,0xA9C0<<$S,0,0xB5E0<<$S);
}}} # !$x86only
&asciz("GHASH for x86, CRYPTOGAMS by <appro\@openssl.org>");
diff --git a/crypto/openssl/crypto/modes/asm/ghash-x86_64.pl b/crypto/openssl/crypto/modes/asm/ghash-x86_64.pl
index 38d779e..6e656ca 100755
--- a/crypto/openssl/crypto/modes/asm/ghash-x86_64.pl
+++ b/crypto/openssl/crypto/modes/asm/ghash-x86_64.pl
@@ -22,6 +22,8 @@
# P4 28.6 14.0 +100%
# Opteron 19.3 7.7 +150%
# Core2 17.8 8.1(**) +120%
+# Atom 31.6 16.8 +88%
+# VIA Nano 21.8 10.1 +115%
#
# (*) comparison is not completely fair, because C results are
# for vanilla "256B" implementation, while assembler results
@@ -39,6 +41,44 @@
# providing access to a Westmere-based system on behalf of Intel
# Open Source Technology Centre.
+# December 2012
+#
+# Overhaul: aggregate Karatsuba post-processing, improve ILP in
+# reduction_alg9, increase reduction aggregate factor to 4x. As for
+# the latter. ghash-x86.pl discusses that it makes lesser sense to
+# increase aggregate factor. Then why increase here? Critical path
+# consists of 3 independent pclmulqdq instructions, Karatsuba post-
+# processing and reduction. "On top" of this we lay down aggregated
+# multiplication operations, triplets of independent pclmulqdq's. As
+# issue rate for pclmulqdq is limited, it makes lesser sense to
+# aggregate more multiplications than it takes to perform remaining
+# non-multiplication operations. 2x is near-optimal coefficient for
+# contemporary Intel CPUs (therefore modest improvement coefficient),
+# but not for Bulldozer. Latter is because logical SIMD operations
+# are twice as slow in comparison to Intel, so that critical path is
+# longer. A CPU with higher pclmulqdq issue rate would also benefit
+# from higher aggregate factor...
+#
+# Westmere 1.78(+13%)
+# Sandy Bridge 1.80(+8%)
+# Ivy Bridge 1.80(+7%)
+# Haswell 0.55(+93%) (if system doesn't support AVX)
+# Broadwell 0.45(+110%)(if system doesn't support AVX)
+# Bulldozer 1.49(+27%)
+# Silvermont 2.88(+13%)
+
+# March 2013
+#
+# ... 8x aggregate factor AVX code path is using reduction algorithm
+# suggested by Shay Gueron[1]. Even though contemporary AVX-capable
+# CPUs such as Sandy and Ivy Bridge can execute it, the code performs
+# sub-optimally in comparison to above mentioned version. But thanks
+# to Ilya Albrekht and Max Locktyukhin of Intel Corp. we knew that
+# it performs in 0.41 cycles per byte on Haswell processor, and in
+# 0.29 on Broadwell.
+#
+# [1] http://rt.openssl.org/Ticket/Display.html?id=2900&user=guest&pass=guest
+
$flavour = shift;
$output = shift;
if ($flavour =~ /\./) { $output = $flavour; undef $flavour; }
@@ -50,9 +90,30 @@ $0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1;
( $xlate="${dir}../../perlasm/x86_64-xlate.pl" and -f $xlate) or
die "can't locate x86_64-xlate.pl";
+if (`$ENV{CC} -Wa,-v -c -o /dev/null -x assembler /dev/null 2>&1`
+ =~ /GNU assembler version ([2-9]\.[0-9]+)/) {
+ $avx = ($1>=2.19) + ($1>=2.22);
+}
+
+if (!$avx && $win64 && ($flavour =~ /nasm/ || $ENV{ASM} =~ /nasm/) &&
+ `nasm -v 2>&1` =~ /NASM version ([2-9]\.[0-9]+)/) {
+ $avx = ($1>=2.09) + ($1>=2.10);
+}
+
+if (!$avx && $win64 && ($flavour =~ /masm/ || $ENV{ASM} =~ /ml64/) &&
+ `ml64 2>&1` =~ /Version ([0-9]+)\./) {
+ $avx = ($1>=10) + ($1>=11);
+}
+
+if (!$avx && `$ENV{CC} -v 2>&1` =~ /(^clang version|based on LLVM) ([3-9]\.[0-9]+)/) {
+ $avx = ($2>=3.0) + ($2>3.0);
+}
+
open OUT,"| \"$^X\" $xlate $flavour $output";
*STDOUT=*OUT;
+$do4xaggr=1;
+
# common register layout
$nlo="%rax";
$nhi="%rbx";
@@ -160,6 +221,7 @@ ___
$code=<<___;
.text
+.extern OPENSSL_ia32cap_P
.globl gcm_gmult_4bit
.type gcm_gmult_4bit,\@function,2
@@ -352,19 +414,27 @@ ___
($T1,$T2,$T3)=("%xmm3","%xmm4","%xmm5");
sub clmul64x64_T2 { # minimal register pressure
-my ($Xhi,$Xi,$Hkey,$modulo)=@_;
+my ($Xhi,$Xi,$Hkey,$HK)=@_;
-$code.=<<___ if (!defined($modulo));
+if (!defined($HK)) { $HK = $T2;
+$code.=<<___;
movdqa $Xi,$Xhi #
pshufd \$0b01001110,$Xi,$T1
pshufd \$0b01001110,$Hkey,$T2
pxor $Xi,$T1 #
pxor $Hkey,$T2
___
+} else {
+$code.=<<___;
+ movdqa $Xi,$Xhi #
+ pshufd \$0b01001110,$Xi,$T1
+ pxor $Xi,$T1 #
+___
+}
$code.=<<___;
pclmulqdq \$0x00,$Hkey,$Xi #######
pclmulqdq \$0x11,$Hkey,$Xhi #######
- pclmulqdq \$0x00,$T2,$T1 #######
+ pclmulqdq \$0x00,$HK,$T1 #######
pxor $Xi,$T1 #
pxor $Xhi,$T1 #
@@ -376,42 +446,53 @@ $code.=<<___;
___
}
-sub reduction_alg9 { # 17/13 times faster than Intel version
+sub reduction_alg9 { # 17/11 times faster than Intel version
my ($Xhi,$Xi) = @_;
$code.=<<___;
# 1st phase
- movdqa $Xi,$T1 #
+ movdqa $Xi,$T2 #
+ movdqa $Xi,$T1
+ psllq \$5,$Xi
+ pxor $Xi,$T1 #
psllq \$1,$Xi
pxor $T1,$Xi #
- psllq \$5,$Xi #
- pxor $T1,$Xi #
psllq \$57,$Xi #
- movdqa $Xi,$T2 #
+ movdqa $Xi,$T1 #
pslldq \$8,$Xi
- psrldq \$8,$T2 #
- pxor $T1,$Xi
- pxor $T2,$Xhi #
+ psrldq \$8,$T1 #
+ pxor $T2,$Xi
+ pxor $T1,$Xhi #
# 2nd phase
movdqa $Xi,$T2
+ psrlq \$1,$Xi
+ pxor $T2,$Xhi #
+ pxor $Xi,$T2
psrlq \$5,$Xi
pxor $T2,$Xi #
psrlq \$1,$Xi #
- pxor $T2,$Xi #
- pxor $Xhi,$T2
- psrlq \$1,$Xi #
- pxor $T2,$Xi #
+ pxor $Xhi,$Xi #
___
}
{ my ($Htbl,$Xip)=@_4args;
+ my $HK="%xmm6";
$code.=<<___;
.globl gcm_init_clmul
.type gcm_init_clmul,\@abi-omnipotent
.align 16
gcm_init_clmul:
+.L_init_clmul:
+___
+$code.=<<___ if ($win64);
+.LSEH_begin_gcm_init_clmul:
+ # I can't trust assembler to use specific encoding:-(
+ .byte 0x48,0x83,0xec,0x18 #sub $0x18,%rsp
+ .byte 0x0f,0x29,0x34,0x24 #movaps %xmm6,(%rsp)
+___
+$code.=<<___;
movdqu ($Xip),$Hkey
pshufd \$0b01001110,$Hkey,$Hkey # dword swap
@@ -430,13 +511,47 @@ gcm_init_clmul:
pxor $T3,$Hkey # if(carry) H^=0x1c2_polynomial
# calculate H^2
+ pshufd \$0b01001110,$Hkey,$HK
movdqa $Hkey,$Xi
+ pxor $Hkey,$HK
___
- &clmul64x64_T2 ($Xhi,$Xi,$Hkey);
+ &clmul64x64_T2 ($Xhi,$Xi,$Hkey,$HK);
&reduction_alg9 ($Xhi,$Xi);
$code.=<<___;
- movdqu $Hkey,($Htbl) # save H
- movdqu $Xi,16($Htbl) # save H^2
+ pshufd \$0b01001110,$Hkey,$T1
+ pshufd \$0b01001110,$Xi,$T2
+ pxor $Hkey,$T1 # Karatsuba pre-processing
+ movdqu $Hkey,0x00($Htbl) # save H
+ pxor $Xi,$T2 # Karatsuba pre-processing
+ movdqu $Xi,0x10($Htbl) # save H^2
+ palignr \$8,$T1,$T2 # low part is H.lo^H.hi...
+ movdqu $T2,0x20($Htbl) # save Karatsuba "salt"
+___
+if ($do4xaggr) {
+ &clmul64x64_T2 ($Xhi,$Xi,$Hkey,$HK); # H^3
+ &reduction_alg9 ($Xhi,$Xi);
+$code.=<<___;
+ movdqa $Xi,$T3
+___
+ &clmul64x64_T2 ($Xhi,$Xi,$Hkey,$HK); # H^4
+ &reduction_alg9 ($Xhi,$Xi);
+$code.=<<___;
+ pshufd \$0b01001110,$T3,$T1
+ pshufd \$0b01001110,$Xi,$T2
+ pxor $T3,$T1 # Karatsuba pre-processing
+ movdqu $T3,0x30($Htbl) # save H^3
+ pxor $Xi,$T2 # Karatsuba pre-processing
+ movdqu $Xi,0x40($Htbl) # save H^4
+ palignr \$8,$T1,$T2 # low part is H^3.lo^H^3.hi...
+ movdqu $T2,0x50($Htbl) # save Karatsuba "salt"
+___
+}
+$code.=<<___ if ($win64);
+ movaps (%rsp),%xmm6
+ lea 0x18(%rsp),%rsp
+.LSEH_end_gcm_init_clmul:
+___
+$code.=<<___;
ret
.size gcm_init_clmul,.-gcm_init_clmul
___
@@ -449,13 +564,38 @@ $code.=<<___;
.type gcm_gmult_clmul,\@abi-omnipotent
.align 16
gcm_gmult_clmul:
+.L_gmult_clmul:
movdqu ($Xip),$Xi
movdqa .Lbswap_mask(%rip),$T3
movdqu ($Htbl),$Hkey
+ movdqu 0x20($Htbl),$T2
pshufb $T3,$Xi
___
- &clmul64x64_T2 ($Xhi,$Xi,$Hkey);
- &reduction_alg9 ($Xhi,$Xi);
+ &clmul64x64_T2 ($Xhi,$Xi,$Hkey,$T2);
+$code.=<<___ if (0 || (&reduction_alg9($Xhi,$Xi)&&0));
+ # experimental alternative. special thing about is that there
+ # no dependency between the two multiplications...
+ mov \$`0xE1<<1`,%eax
+ mov \$0xA040608020C0E000,%r10 # ((7..0)·0xE0)&0xff
+ mov \$0x07,%r11d
+ movq %rax,$T1
+ movq %r10,$T2
+ movq %r11,$T3 # borrow $T3
+ pand $Xi,$T3
+ pshufb $T3,$T2 # ($Xi&7)·0xE0
+ movq %rax,$T3
+ pclmulqdq \$0x00,$Xi,$T1 # ·(0xE1<<1)
+ pxor $Xi,$T2
+ pslldq \$15,$T2
+ paddd $T2,$T2 # <<(64+56+1)
+ pxor $T2,$Xi
+ pclmulqdq \$0x01,$T3,$Xi
+ movdqa .Lbswap_mask(%rip),$T3 # reload $T3
+ psrldq \$1,$T1
+ pxor $T1,$Xhi
+ pslldq \$7,$Xi
+ pxor $Xhi,$Xi
+___
$code.=<<___;
pshufb $T3,$Xi
movdqu $Xi,($Xip)
@@ -465,129 +605,327 @@ ___
}
{ my ($Xip,$Htbl,$inp,$len)=@_4args;
- my $Xn="%xmm6";
- my $Xhn="%xmm7";
- my $Hkey2="%xmm8";
- my $T1n="%xmm9";
- my $T2n="%xmm10";
+ my ($Xln,$Xmn,$Xhn,$Hkey2,$HK) = map("%xmm$_",(3..7));
+ my ($T1,$T2,$T3)=map("%xmm$_",(8..10));
$code.=<<___;
.globl gcm_ghash_clmul
.type gcm_ghash_clmul,\@abi-omnipotent
-.align 16
+.align 32
gcm_ghash_clmul:
+.L_ghash_clmul:
___
$code.=<<___ if ($win64);
+ lea -0x88(%rsp),%rax
.LSEH_begin_gcm_ghash_clmul:
# I can't trust assembler to use specific encoding:-(
- .byte 0x48,0x83,0xec,0x58 #sub \$0x58,%rsp
- .byte 0x0f,0x29,0x34,0x24 #movaps %xmm6,(%rsp)
- .byte 0x0f,0x29,0x7c,0x24,0x10 #movdqa %xmm7,0x10(%rsp)
- .byte 0x44,0x0f,0x29,0x44,0x24,0x20 #movaps %xmm8,0x20(%rsp)
- .byte 0x44,0x0f,0x29,0x4c,0x24,0x30 #movaps %xmm9,0x30(%rsp)
- .byte 0x44,0x0f,0x29,0x54,0x24,0x40 #movaps %xmm10,0x40(%rsp)
+ .byte 0x48,0x8d,0x60,0xe0 #lea -0x20(%rax),%rsp
+ .byte 0x0f,0x29,0x70,0xe0 #movaps %xmm6,-0x20(%rax)
+ .byte 0x0f,0x29,0x78,0xf0 #movaps %xmm7,-0x10(%rax)
+ .byte 0x44,0x0f,0x29,0x00 #movaps %xmm8,0(%rax)
+ .byte 0x44,0x0f,0x29,0x48,0x10 #movaps %xmm9,0x10(%rax)
+ .byte 0x44,0x0f,0x29,0x50,0x20 #movaps %xmm10,0x20(%rax)
+ .byte 0x44,0x0f,0x29,0x58,0x30 #movaps %xmm11,0x30(%rax)
+ .byte 0x44,0x0f,0x29,0x60,0x40 #movaps %xmm12,0x40(%rax)
+ .byte 0x44,0x0f,0x29,0x68,0x50 #movaps %xmm13,0x50(%rax)
+ .byte 0x44,0x0f,0x29,0x70,0x60 #movaps %xmm14,0x60(%rax)
+ .byte 0x44,0x0f,0x29,0x78,0x70 #movaps %xmm15,0x70(%rax)
___
$code.=<<___;
movdqa .Lbswap_mask(%rip),$T3
movdqu ($Xip),$Xi
movdqu ($Htbl),$Hkey
+ movdqu 0x20($Htbl),$HK
pshufb $T3,$Xi
sub \$0x10,$len
jz .Lodd_tail
- movdqu 16($Htbl),$Hkey2
+ movdqu 0x10($Htbl),$Hkey2
+___
+if ($do4xaggr) {
+my ($Xl,$Xm,$Xh,$Hkey3,$Hkey4)=map("%xmm$_",(11..15));
+
+$code.=<<___;
+ mov OPENSSL_ia32cap_P+4(%rip),%eax
+ cmp \$0x30,$len
+ jb .Lskip4x
+
+ and \$`1<<26|1<<22`,%eax # isolate MOVBE+XSAVE
+ cmp \$`1<<22`,%eax # check for MOVBE without XSAVE
+ je .Lskip4x
+
+ sub \$0x30,$len
+ mov \$0xA040608020C0E000,%rax # ((7..0)·0xE0)&0xff
+ movdqu 0x30($Htbl),$Hkey3
+ movdqu 0x40($Htbl),$Hkey4
+
+ #######
+ # Xi+4 =[(H*Ii+3) + (H^2*Ii+2) + (H^3*Ii+1) + H^4*(Ii+Xi)] mod P
+ #
+ movdqu 0x30($inp),$Xln
+ movdqu 0x20($inp),$Xl
+ pshufb $T3,$Xln
+ pshufb $T3,$Xl
+ movdqa $Xln,$Xhn
+ pshufd \$0b01001110,$Xln,$Xmn
+ pxor $Xln,$Xmn
+ pclmulqdq \$0x00,$Hkey,$Xln
+ pclmulqdq \$0x11,$Hkey,$Xhn
+ pclmulqdq \$0x00,$HK,$Xmn
+
+ movdqa $Xl,$Xh
+ pshufd \$0b01001110,$Xl,$Xm
+ pxor $Xl,$Xm
+ pclmulqdq \$0x00,$Hkey2,$Xl
+ pclmulqdq \$0x11,$Hkey2,$Xh
+ pclmulqdq \$0x10,$HK,$Xm
+ xorps $Xl,$Xln
+ xorps $Xh,$Xhn
+ movups 0x50($Htbl),$HK
+ xorps $Xm,$Xmn
+
+ movdqu 0x10($inp),$Xl
+ movdqu 0($inp),$T1
+ pshufb $T3,$Xl
+ pshufb $T3,$T1
+ movdqa $Xl,$Xh
+ pshufd \$0b01001110,$Xl,$Xm
+ pxor $T1,$Xi
+ pxor $Xl,$Xm
+ pclmulqdq \$0x00,$Hkey3,$Xl
+ movdqa $Xi,$Xhi
+ pshufd \$0b01001110,$Xi,$T1
+ pxor $Xi,$T1
+ pclmulqdq \$0x11,$Hkey3,$Xh
+ pclmulqdq \$0x00,$HK,$Xm
+ xorps $Xl,$Xln
+ xorps $Xh,$Xhn
+
+ lea 0x40($inp),$inp
+ sub \$0x40,$len
+ jc .Ltail4x
+
+ jmp .Lmod4_loop
+.align 32
+.Lmod4_loop:
+ pclmulqdq \$0x00,$Hkey4,$Xi
+ xorps $Xm,$Xmn
+ movdqu 0x30($inp),$Xl
+ pshufb $T3,$Xl
+ pclmulqdq \$0x11,$Hkey4,$Xhi
+ xorps $Xln,$Xi
+ movdqu 0x20($inp),$Xln
+ movdqa $Xl,$Xh
+ pclmulqdq \$0x10,$HK,$T1
+ pshufd \$0b01001110,$Xl,$Xm
+ xorps $Xhn,$Xhi
+ pxor $Xl,$Xm
+ pshufb $T3,$Xln
+ movups 0x20($Htbl),$HK
+ xorps $Xmn,$T1
+ pclmulqdq \$0x00,$Hkey,$Xl
+ pshufd \$0b01001110,$Xln,$Xmn
+
+ pxor $Xi,$T1 # aggregated Karatsuba post-processing
+ movdqa $Xln,$Xhn
+ pxor $Xhi,$T1 #
+ pxor $Xln,$Xmn
+ movdqa $T1,$T2 #
+ pclmulqdq \$0x11,$Hkey,$Xh
+ pslldq \$8,$T1
+ psrldq \$8,$T2 #
+ pxor $T1,$Xi
+ movdqa .L7_mask(%rip),$T1
+ pxor $T2,$Xhi #
+ movq %rax,$T2
+
+ pand $Xi,$T1 # 1st phase
+ pshufb $T1,$T2 #
+ pxor $Xi,$T2 #
+ pclmulqdq \$0x00,$HK,$Xm
+ psllq \$57,$T2 #
+ movdqa $T2,$T1 #
+ pslldq \$8,$T2
+ pclmulqdq \$0x00,$Hkey2,$Xln
+ psrldq \$8,$T1 #
+ pxor $T2,$Xi
+ pxor $T1,$Xhi #
+ movdqu 0($inp),$T1
+
+ movdqa $Xi,$T2 # 2nd phase
+ psrlq \$1,$Xi
+ pclmulqdq \$0x11,$Hkey2,$Xhn
+ xorps $Xl,$Xln
+ movdqu 0x10($inp),$Xl
+ pshufb $T3,$Xl
+ pclmulqdq \$0x10,$HK,$Xmn
+ xorps $Xh,$Xhn
+ movups 0x50($Htbl),$HK
+ pshufb $T3,$T1
+ pxor $T2,$Xhi #
+ pxor $Xi,$T2
+ psrlq \$5,$Xi
+
+ movdqa $Xl,$Xh
+ pxor $Xm,$Xmn
+ pshufd \$0b01001110,$Xl,$Xm
+ pxor $T2,$Xi #
+ pxor $T1,$Xhi
+ pxor $Xl,$Xm
+ pclmulqdq \$0x00,$Hkey3,$Xl
+ psrlq \$1,$Xi #
+ pxor $Xhi,$Xi #
+ movdqa $Xi,$Xhi
+ pclmulqdq \$0x11,$Hkey3,$Xh
+ xorps $Xl,$Xln
+ pshufd \$0b01001110,$Xi,$T1
+ pxor $Xi,$T1
+
+ pclmulqdq \$0x00,$HK,$Xm
+ xorps $Xh,$Xhn
+
+ lea 0x40($inp),$inp
+ sub \$0x40,$len
+ jnc .Lmod4_loop
+
+.Ltail4x:
+ pclmulqdq \$0x00,$Hkey4,$Xi
+ pclmulqdq \$0x11,$Hkey4,$Xhi
+ pclmulqdq \$0x10,$HK,$T1
+ xorps $Xm,$Xmn
+ xorps $Xln,$Xi
+ xorps $Xhn,$Xhi
+ pxor $Xi,$Xhi # aggregated Karatsuba post-processing
+ pxor $Xmn,$T1
+
+ pxor $Xhi,$T1 #
+ pxor $Xi,$Xhi
+
+ movdqa $T1,$T2 #
+ psrldq \$8,$T1
+ pslldq \$8,$T2 #
+ pxor $T1,$Xhi
+ pxor $T2,$Xi #
+___
+ &reduction_alg9($Xhi,$Xi);
+$code.=<<___;
+ add \$0x40,$len
+ jz .Ldone
+ movdqu 0x20($Htbl),$HK
+ sub \$0x10,$len
+ jz .Lodd_tail
+.Lskip4x:
+___
+}
+$code.=<<___;
#######
# Xi+2 =[H*(Ii+1 + Xi+1)] mod P =
# [(H*Ii+1) + (H*Xi+1)] mod P =
# [(H*Ii+1) + H^2*(Ii+Xi)] mod P
#
movdqu ($inp),$T1 # Ii
- movdqu 16($inp),$Xn # Ii+1
+ movdqu 16($inp),$Xln # Ii+1
pshufb $T3,$T1
- pshufb $T3,$Xn
+ pshufb $T3,$Xln
pxor $T1,$Xi # Ii+Xi
-___
- &clmul64x64_T2 ($Xhn,$Xn,$Hkey); # H*Ii+1
-$code.=<<___;
- movdqa $Xi,$Xhi #
- pshufd \$0b01001110,$Xi,$T1
- pshufd \$0b01001110,$Hkey2,$T2
- pxor $Xi,$T1 #
- pxor $Hkey2,$T2
+
+ movdqa $Xln,$Xhn
+ pshufd \$0b01001110,$Xln,$Xmn
+ pxor $Xln,$Xmn
+ pclmulqdq \$0x00,$Hkey,$Xln
+ pclmulqdq \$0x11,$Hkey,$Xhn
+ pclmulqdq \$0x00,$HK,$Xmn
lea 32($inp),$inp # i+=2
+ nop
sub \$0x20,$len
jbe .Leven_tail
+ nop
+ jmp .Lmod_loop
+.align 32
.Lmod_loop:
-___
- &clmul64x64_T2 ($Xhi,$Xi,$Hkey2,1); # H^2*(Ii+Xi)
-$code.=<<___;
- movdqu ($inp),$T1 # Ii
- pxor $Xn,$Xi # (H*Ii+1) + H^2*(Ii+Xi)
- pxor $Xhn,$Xhi
+ movdqa $Xi,$Xhi
+ movdqa $Xmn,$T1
+ pshufd \$0b01001110,$Xi,$Xmn #
+ pxor $Xi,$Xmn #
- movdqu 16($inp),$Xn # Ii+1
- pshufb $T3,$T1
- pshufb $T3,$Xn
+ pclmulqdq \$0x00,$Hkey2,$Xi
+ pclmulqdq \$0x11,$Hkey2,$Xhi
+ pclmulqdq \$0x10,$HK,$Xmn
- movdqa $Xn,$Xhn #
- pshufd \$0b01001110,$Xn,$T1n
- pshufd \$0b01001110,$Hkey,$T2n
- pxor $Xn,$T1n #
- pxor $Hkey,$T2n
- pxor $T1,$Xhi # "Ii+Xi", consume early
+ pxor $Xln,$Xi # (H*Ii+1) + H^2*(Ii+Xi)
+ pxor $Xhn,$Xhi
+ movdqu ($inp),$T2 # Ii
+ pxor $Xi,$T1 # aggregated Karatsuba post-processing
+ pshufb $T3,$T2
+ movdqu 16($inp),$Xln # Ii+1
+
+ pxor $Xhi,$T1
+ pxor $T2,$Xhi # "Ii+Xi", consume early
+ pxor $T1,$Xmn
+ pshufb $T3,$Xln
+ movdqa $Xmn,$T1 #
+ psrldq \$8,$T1
+ pslldq \$8,$Xmn #
+ pxor $T1,$Xhi
+ pxor $Xmn,$Xi #
+
+ movdqa $Xln,$Xhn #
- movdqa $Xi,$T1 # 1st phase
+ movdqa $Xi,$T2 # 1st phase
+ movdqa $Xi,$T1
+ psllq \$5,$Xi
+ pxor $Xi,$T1 #
+ pclmulqdq \$0x00,$Hkey,$Xln #######
psllq \$1,$Xi
pxor $T1,$Xi #
- psllq \$5,$Xi #
- pxor $T1,$Xi #
- pclmulqdq \$0x00,$Hkey,$Xn #######
psllq \$57,$Xi #
- movdqa $Xi,$T2 #
+ movdqa $Xi,$T1 #
pslldq \$8,$Xi
- psrldq \$8,$T2 #
- pxor $T1,$Xi
- pxor $T2,$Xhi #
+ psrldq \$8,$T1 #
+ pxor $T2,$Xi
+ pshufd \$0b01001110,$Xhn,$Xmn
+ pxor $T1,$Xhi #
+ pxor $Xhn,$Xmn #
- pclmulqdq \$0x11,$Hkey,$Xhn #######
movdqa $Xi,$T2 # 2nd phase
+ psrlq \$1,$Xi
+ pclmulqdq \$0x11,$Hkey,$Xhn #######
+ pxor $T2,$Xhi #
+ pxor $Xi,$T2
psrlq \$5,$Xi
pxor $T2,$Xi #
+ lea 32($inp),$inp
psrlq \$1,$Xi #
- pxor $T2,$Xi #
- pxor $Xhi,$T2
- psrlq \$1,$Xi #
- pxor $T2,$Xi #
+ pclmulqdq \$0x00,$HK,$Xmn #######
+ pxor $Xhi,$Xi #
- pclmulqdq \$0x00,$T2n,$T1n #######
- movdqa $Xi,$Xhi #
- pshufd \$0b01001110,$Xi,$T1
- pshufd \$0b01001110,$Hkey2,$T2
- pxor $Xi,$T1 #
- pxor $Hkey2,$T2
-
- pxor $Xn,$T1n #
- pxor $Xhn,$T1n #
- movdqa $T1n,$T2n #
- psrldq \$8,$T1n
- pslldq \$8,$T2n #
- pxor $T1n,$Xhn
- pxor $T2n,$Xn #
-
- lea 32($inp),$inp
sub \$0x20,$len
ja .Lmod_loop
.Leven_tail:
-___
- &clmul64x64_T2 ($Xhi,$Xi,$Hkey2,1); # H^2*(Ii+Xi)
-$code.=<<___;
- pxor $Xn,$Xi # (H*Ii+1) + H^2*(Ii+Xi)
+ movdqa $Xi,$Xhi
+ movdqa $Xmn,$T1
+ pshufd \$0b01001110,$Xi,$Xmn #
+ pxor $Xi,$Xmn #
+
+ pclmulqdq \$0x00,$Hkey2,$Xi
+ pclmulqdq \$0x11,$Hkey2,$Xhi
+ pclmulqdq \$0x10,$HK,$Xmn
+
+ pxor $Xln,$Xi # (H*Ii+1) + H^2*(Ii+Xi)
pxor $Xhn,$Xhi
+ pxor $Xi,$T1
+ pxor $Xhi,$T1
+ pxor $T1,$Xmn
+ movdqa $Xmn,$T1 #
+ psrldq \$8,$T1
+ pslldq \$8,$Xmn #
+ pxor $T1,$Xhi
+ pxor $Xmn,$Xi #
___
&reduction_alg9 ($Xhi,$Xi);
$code.=<<___;
@@ -599,7 +937,7 @@ $code.=<<___;
pshufb $T3,$T1
pxor $T1,$Xi # Ii+Xi
___
- &clmul64x64_T2 ($Xhi,$Xi,$Hkey); # H*(Ii+Xi)
+ &clmul64x64_T2 ($Xhi,$Xi,$Hkey,$HK); # H*(Ii+Xi)
&reduction_alg9 ($Xhi,$Xi);
$code.=<<___;
.Ldone:
@@ -612,21 +950,607 @@ $code.=<<___ if ($win64);
movaps 0x20(%rsp),%xmm8
movaps 0x30(%rsp),%xmm9
movaps 0x40(%rsp),%xmm10
- add \$0x58,%rsp
+ movaps 0x50(%rsp),%xmm11
+ movaps 0x60(%rsp),%xmm12
+ movaps 0x70(%rsp),%xmm13
+ movaps 0x80(%rsp),%xmm14
+ movaps 0x90(%rsp),%xmm15
+ lea 0xa8(%rsp),%rsp
+.LSEH_end_gcm_ghash_clmul:
___
$code.=<<___;
ret
-.LSEH_end_gcm_ghash_clmul:
.size gcm_ghash_clmul,.-gcm_ghash_clmul
___
}
+
+$code.=<<___;
+.globl gcm_init_avx
+.type gcm_init_avx,\@abi-omnipotent
+.align 32
+gcm_init_avx:
+___
+if ($avx) {
+my ($Htbl,$Xip)=@_4args;
+my $HK="%xmm6";
+
+$code.=<<___ if ($win64);
+.LSEH_begin_gcm_init_avx:
+ # I can't trust assembler to use specific encoding:-(
+ .byte 0x48,0x83,0xec,0x18 #sub $0x18,%rsp
+ .byte 0x0f,0x29,0x34,0x24 #movaps %xmm6,(%rsp)
+___
+$code.=<<___;
+ vzeroupper
+
+ vmovdqu ($Xip),$Hkey
+ vpshufd \$0b01001110,$Hkey,$Hkey # dword swap
+
+ # <<1 twist
+ vpshufd \$0b11111111,$Hkey,$T2 # broadcast uppermost dword
+ vpsrlq \$63,$Hkey,$T1
+ vpsllq \$1,$Hkey,$Hkey
+ vpxor $T3,$T3,$T3 #
+ vpcmpgtd $T2,$T3,$T3 # broadcast carry bit
+ vpslldq \$8,$T1,$T1
+ vpor $T1,$Hkey,$Hkey # H<<=1
+
+ # magic reduction
+ vpand .L0x1c2_polynomial(%rip),$T3,$T3
+ vpxor $T3,$Hkey,$Hkey # if(carry) H^=0x1c2_polynomial
+
+ vpunpckhqdq $Hkey,$Hkey,$HK
+ vmovdqa $Hkey,$Xi
+ vpxor $Hkey,$HK,$HK
+ mov \$4,%r10 # up to H^8
+ jmp .Linit_start_avx
+___
+
+sub clmul64x64_avx {
+my ($Xhi,$Xi,$Hkey,$HK)=@_;
+
+if (!defined($HK)) { $HK = $T2;
+$code.=<<___;
+ vpunpckhqdq $Xi,$Xi,$T1
+ vpunpckhqdq $Hkey,$Hkey,$T2
+ vpxor $Xi,$T1,$T1 #
+ vpxor $Hkey,$T2,$T2
+___
+} else {
+$code.=<<___;
+ vpunpckhqdq $Xi,$Xi,$T1
+ vpxor $Xi,$T1,$T1 #
+___
+}
+$code.=<<___;
+ vpclmulqdq \$0x11,$Hkey,$Xi,$Xhi #######
+ vpclmulqdq \$0x00,$Hkey,$Xi,$Xi #######
+ vpclmulqdq \$0x00,$HK,$T1,$T1 #######
+ vpxor $Xi,$Xhi,$T2 #
+ vpxor $T2,$T1,$T1 #
+
+ vpslldq \$8,$T1,$T2 #
+ vpsrldq \$8,$T1,$T1
+ vpxor $T2,$Xi,$Xi #
+ vpxor $T1,$Xhi,$Xhi
+___
+}
+
+sub reduction_avx {
+my ($Xhi,$Xi) = @_;
+
+$code.=<<___;
+ vpsllq \$57,$Xi,$T1 # 1st phase
+ vpsllq \$62,$Xi,$T2
+ vpxor $T1,$T2,$T2 #
+ vpsllq \$63,$Xi,$T1
+ vpxor $T1,$T2,$T2 #
+ vpslldq \$8,$T2,$T1 #
+ vpsrldq \$8,$T2,$T2
+ vpxor $T1,$Xi,$Xi #
+ vpxor $T2,$Xhi,$Xhi
+
+ vpsrlq \$1,$Xi,$T2 # 2nd phase
+ vpxor $Xi,$Xhi,$Xhi
+ vpxor $T2,$Xi,$Xi #
+ vpsrlq \$5,$T2,$T2
+ vpxor $T2,$Xi,$Xi #
+ vpsrlq \$1,$Xi,$Xi #
+ vpxor $Xhi,$Xi,$Xi #
+___
+}
$code.=<<___;
+.align 32
+.Linit_loop_avx:
+ vpalignr \$8,$T1,$T2,$T3 # low part is H.lo^H.hi...
+ vmovdqu $T3,-0x10($Htbl) # save Karatsuba "salt"
+___
+ &clmul64x64_avx ($Xhi,$Xi,$Hkey,$HK); # calculate H^3,5,7
+ &reduction_avx ($Xhi,$Xi);
+$code.=<<___;
+.Linit_start_avx:
+ vmovdqa $Xi,$T3
+___
+ &clmul64x64_avx ($Xhi,$Xi,$Hkey,$HK); # calculate H^2,4,6,8
+ &reduction_avx ($Xhi,$Xi);
+$code.=<<___;
+ vpshufd \$0b01001110,$T3,$T1
+ vpshufd \$0b01001110,$Xi,$T2
+ vpxor $T3,$T1,$T1 # Karatsuba pre-processing
+ vmovdqu $T3,0x00($Htbl) # save H^1,3,5,7
+ vpxor $Xi,$T2,$T2 # Karatsuba pre-processing
+ vmovdqu $Xi,0x10($Htbl) # save H^2,4,6,8
+ lea 0x30($Htbl),$Htbl
+ sub \$1,%r10
+ jnz .Linit_loop_avx
+
+ vpalignr \$8,$T2,$T1,$T3 # last "salt" is flipped
+ vmovdqu $T3,-0x10($Htbl)
+
+ vzeroupper
+___
+$code.=<<___ if ($win64);
+ movaps (%rsp),%xmm6
+ lea 0x18(%rsp),%rsp
+.LSEH_end_gcm_init_avx:
+___
+$code.=<<___;
+ ret
+.size gcm_init_avx,.-gcm_init_avx
+___
+} else {
+$code.=<<___;
+ jmp .L_init_clmul
+.size gcm_init_avx,.-gcm_init_avx
+___
+}
+
+$code.=<<___;
+.globl gcm_gmult_avx
+.type gcm_gmult_avx,\@abi-omnipotent
+.align 32
+gcm_gmult_avx:
+ jmp .L_gmult_clmul
+.size gcm_gmult_avx,.-gcm_gmult_avx
+___
+
+$code.=<<___;
+.globl gcm_ghash_avx
+.type gcm_ghash_avx,\@abi-omnipotent
+.align 32
+gcm_ghash_avx:
+___
+if ($avx) {
+my ($Xip,$Htbl,$inp,$len)=@_4args;
+my ($Xlo,$Xhi,$Xmi,
+ $Zlo,$Zhi,$Zmi,
+ $Hkey,$HK,$T1,$T2,
+ $Xi,$Xo,$Tred,$bswap,$Ii,$Ij) = map("%xmm$_",(0..15));
+
+$code.=<<___ if ($win64);
+ lea -0x88(%rsp),%rax
+.LSEH_begin_gcm_ghash_avx:
+ # I can't trust assembler to use specific encoding:-(
+ .byte 0x48,0x8d,0x60,0xe0 #lea -0x20(%rax),%rsp
+ .byte 0x0f,0x29,0x70,0xe0 #movaps %xmm6,-0x20(%rax)
+ .byte 0x0f,0x29,0x78,0xf0 #movaps %xmm7,-0x10(%rax)
+ .byte 0x44,0x0f,0x29,0x00 #movaps %xmm8,0(%rax)
+ .byte 0x44,0x0f,0x29,0x48,0x10 #movaps %xmm9,0x10(%rax)
+ .byte 0x44,0x0f,0x29,0x50,0x20 #movaps %xmm10,0x20(%rax)
+ .byte 0x44,0x0f,0x29,0x58,0x30 #movaps %xmm11,0x30(%rax)
+ .byte 0x44,0x0f,0x29,0x60,0x40 #movaps %xmm12,0x40(%rax)
+ .byte 0x44,0x0f,0x29,0x68,0x50 #movaps %xmm13,0x50(%rax)
+ .byte 0x44,0x0f,0x29,0x70,0x60 #movaps %xmm14,0x60(%rax)
+ .byte 0x44,0x0f,0x29,0x78,0x70 #movaps %xmm15,0x70(%rax)
+___
+$code.=<<___;
+ vzeroupper
+
+ vmovdqu ($Xip),$Xi # load $Xi
+ lea .L0x1c2_polynomial(%rip),%r10
+ lea 0x40($Htbl),$Htbl # size optimization
+ vmovdqu .Lbswap_mask(%rip),$bswap
+ vpshufb $bswap,$Xi,$Xi
+ cmp \$0x80,$len
+ jb .Lshort_avx
+ sub \$0x80,$len
+
+ vmovdqu 0x70($inp),$Ii # I[7]
+ vmovdqu 0x00-0x40($Htbl),$Hkey # $Hkey^1
+ vpshufb $bswap,$Ii,$Ii
+ vmovdqu 0x20-0x40($Htbl),$HK
+
+ vpunpckhqdq $Ii,$Ii,$T2
+ vmovdqu 0x60($inp),$Ij # I[6]
+ vpclmulqdq \$0x00,$Hkey,$Ii,$Xlo
+ vpxor $Ii,$T2,$T2
+ vpshufb $bswap,$Ij,$Ij
+ vpclmulqdq \$0x11,$Hkey,$Ii,$Xhi
+ vmovdqu 0x10-0x40($Htbl),$Hkey # $Hkey^2
+ vpunpckhqdq $Ij,$Ij,$T1
+ vmovdqu 0x50($inp),$Ii # I[5]
+ vpclmulqdq \$0x00,$HK,$T2,$Xmi
+ vpxor $Ij,$T1,$T1
+
+ vpshufb $bswap,$Ii,$Ii
+ vpclmulqdq \$0x00,$Hkey,$Ij,$Zlo
+ vpunpckhqdq $Ii,$Ii,$T2
+ vpclmulqdq \$0x11,$Hkey,$Ij,$Zhi
+ vmovdqu 0x30-0x40($Htbl),$Hkey # $Hkey^3
+ vpxor $Ii,$T2,$T2
+ vmovdqu 0x40($inp),$Ij # I[4]
+ vpclmulqdq \$0x10,$HK,$T1,$Zmi
+ vmovdqu 0x50-0x40($Htbl),$HK
+
+ vpshufb $bswap,$Ij,$Ij
+ vpxor $Xlo,$Zlo,$Zlo
+ vpclmulqdq \$0x00,$Hkey,$Ii,$Xlo
+ vpxor $Xhi,$Zhi,$Zhi
+ vpunpckhqdq $Ij,$Ij,$T1
+ vpclmulqdq \$0x11,$Hkey,$Ii,$Xhi
+ vmovdqu 0x40-0x40($Htbl),$Hkey # $Hkey^4
+ vpxor $Xmi,$Zmi,$Zmi
+ vpclmulqdq \$0x00,$HK,$T2,$Xmi
+ vpxor $Ij,$T1,$T1
+
+ vmovdqu 0x30($inp),$Ii # I[3]
+ vpxor $Zlo,$Xlo,$Xlo
+ vpclmulqdq \$0x00,$Hkey,$Ij,$Zlo
+ vpxor $Zhi,$Xhi,$Xhi
+ vpshufb $bswap,$Ii,$Ii
+ vpclmulqdq \$0x11,$Hkey,$Ij,$Zhi
+ vmovdqu 0x60-0x40($Htbl),$Hkey # $Hkey^5
+ vpxor $Zmi,$Xmi,$Xmi
+ vpunpckhqdq $Ii,$Ii,$T2
+ vpclmulqdq \$0x10,$HK,$T1,$Zmi
+ vmovdqu 0x80-0x40($Htbl),$HK
+ vpxor $Ii,$T2,$T2
+
+ vmovdqu 0x20($inp),$Ij # I[2]
+ vpxor $Xlo,$Zlo,$Zlo
+ vpclmulqdq \$0x00,$Hkey,$Ii,$Xlo
+ vpxor $Xhi,$Zhi,$Zhi
+ vpshufb $bswap,$Ij,$Ij
+ vpclmulqdq \$0x11,$Hkey,$Ii,$Xhi
+ vmovdqu 0x70-0x40($Htbl),$Hkey # $Hkey^6
+ vpxor $Xmi,$Zmi,$Zmi
+ vpunpckhqdq $Ij,$Ij,$T1
+ vpclmulqdq \$0x00,$HK,$T2,$Xmi
+ vpxor $Ij,$T1,$T1
+
+ vmovdqu 0x10($inp),$Ii # I[1]
+ vpxor $Zlo,$Xlo,$Xlo
+ vpclmulqdq \$0x00,$Hkey,$Ij,$Zlo
+ vpxor $Zhi,$Xhi,$Xhi
+ vpshufb $bswap,$Ii,$Ii
+ vpclmulqdq \$0x11,$Hkey,$Ij,$Zhi
+ vmovdqu 0x90-0x40($Htbl),$Hkey # $Hkey^7
+ vpxor $Zmi,$Xmi,$Xmi
+ vpunpckhqdq $Ii,$Ii,$T2
+ vpclmulqdq \$0x10,$HK,$T1,$Zmi
+ vmovdqu 0xb0-0x40($Htbl),$HK
+ vpxor $Ii,$T2,$T2
+
+ vmovdqu ($inp),$Ij # I[0]
+ vpxor $Xlo,$Zlo,$Zlo
+ vpclmulqdq \$0x00,$Hkey,$Ii,$Xlo
+ vpxor $Xhi,$Zhi,$Zhi
+ vpshufb $bswap,$Ij,$Ij
+ vpclmulqdq \$0x11,$Hkey,$Ii,$Xhi
+ vmovdqu 0xa0-0x40($Htbl),$Hkey # $Hkey^8
+ vpxor $Xmi,$Zmi,$Zmi
+ vpclmulqdq \$0x10,$HK,$T2,$Xmi
+
+ lea 0x80($inp),$inp
+ cmp \$0x80,$len
+ jb .Ltail_avx
+
+ vpxor $Xi,$Ij,$Ij # accumulate $Xi
+ sub \$0x80,$len
+ jmp .Loop8x_avx
+
+.align 32
+.Loop8x_avx:
+ vpunpckhqdq $Ij,$Ij,$T1
+ vmovdqu 0x70($inp),$Ii # I[7]
+ vpxor $Xlo,$Zlo,$Zlo
+ vpxor $Ij,$T1,$T1
+ vpclmulqdq \$0x00,$Hkey,$Ij,$Xi
+ vpshufb $bswap,$Ii,$Ii
+ vpxor $Xhi,$Zhi,$Zhi
+ vpclmulqdq \$0x11,$Hkey,$Ij,$Xo
+ vmovdqu 0x00-0x40($Htbl),$Hkey # $Hkey^1
+ vpunpckhqdq $Ii,$Ii,$T2
+ vpxor $Xmi,$Zmi,$Zmi
+ vpclmulqdq \$0x00,$HK,$T1,$Tred
+ vmovdqu 0x20-0x40($Htbl),$HK
+ vpxor $Ii,$T2,$T2
+
+ vmovdqu 0x60($inp),$Ij # I[6]
+ vpclmulqdq \$0x00,$Hkey,$Ii,$Xlo
+ vpxor $Zlo,$Xi,$Xi # collect result
+ vpshufb $bswap,$Ij,$Ij
+ vpclmulqdq \$0x11,$Hkey,$Ii,$Xhi
+ vxorps $Zhi,$Xo,$Xo
+ vmovdqu 0x10-0x40($Htbl),$Hkey # $Hkey^2
+ vpunpckhqdq $Ij,$Ij,$T1
+ vpclmulqdq \$0x00,$HK, $T2,$Xmi
+ vpxor $Zmi,$Tred,$Tred
+ vxorps $Ij,$T1,$T1
+
+ vmovdqu 0x50($inp),$Ii # I[5]
+ vpxor $Xi,$Tred,$Tred # aggregated Karatsuba post-processing
+ vpclmulqdq \$0x00,$Hkey,$Ij,$Zlo
+ vpxor $Xo,$Tred,$Tred
+ vpslldq \$8,$Tred,$T2
+ vpxor $Xlo,$Zlo,$Zlo
+ vpclmulqdq \$0x11,$Hkey,$Ij,$Zhi
+ vpsrldq \$8,$Tred,$Tred
+ vpxor $T2, $Xi, $Xi
+ vmovdqu 0x30-0x40($Htbl),$Hkey # $Hkey^3
+ vpshufb $bswap,$Ii,$Ii
+ vxorps $Tred,$Xo, $Xo
+ vpxor $Xhi,$Zhi,$Zhi
+ vpunpckhqdq $Ii,$Ii,$T2
+ vpclmulqdq \$0x10,$HK, $T1,$Zmi
+ vmovdqu 0x50-0x40($Htbl),$HK
+ vpxor $Ii,$T2,$T2
+ vpxor $Xmi,$Zmi,$Zmi
+
+ vmovdqu 0x40($inp),$Ij # I[4]
+ vpalignr \$8,$Xi,$Xi,$Tred # 1st phase
+ vpclmulqdq \$0x00,$Hkey,$Ii,$Xlo
+ vpshufb $bswap,$Ij,$Ij
+ vpxor $Zlo,$Xlo,$Xlo
+ vpclmulqdq \$0x11,$Hkey,$Ii,$Xhi
+ vmovdqu 0x40-0x40($Htbl),$Hkey # $Hkey^4
+ vpunpckhqdq $Ij,$Ij,$T1
+ vpxor $Zhi,$Xhi,$Xhi
+ vpclmulqdq \$0x00,$HK, $T2,$Xmi
+ vxorps $Ij,$T1,$T1
+ vpxor $Zmi,$Xmi,$Xmi
+
+ vmovdqu 0x30($inp),$Ii # I[3]
+ vpclmulqdq \$0x10,(%r10),$Xi,$Xi
+ vpclmulqdq \$0x00,$Hkey,$Ij,$Zlo
+ vpshufb $bswap,$Ii,$Ii
+ vpxor $Xlo,$Zlo,$Zlo
+ vpclmulqdq \$0x11,$Hkey,$Ij,$Zhi
+ vmovdqu 0x60-0x40($Htbl),$Hkey # $Hkey^5
+ vpunpckhqdq $Ii,$Ii,$T2
+ vpxor $Xhi,$Zhi,$Zhi
+ vpclmulqdq \$0x10,$HK, $T1,$Zmi
+ vmovdqu 0x80-0x40($Htbl),$HK
+ vpxor $Ii,$T2,$T2
+ vpxor $Xmi,$Zmi,$Zmi
+
+ vmovdqu 0x20($inp),$Ij # I[2]
+ vpclmulqdq \$0x00,$Hkey,$Ii,$Xlo
+ vpshufb $bswap,$Ij,$Ij
+ vpxor $Zlo,$Xlo,$Xlo
+ vpclmulqdq \$0x11,$Hkey,$Ii,$Xhi
+ vmovdqu 0x70-0x40($Htbl),$Hkey # $Hkey^6
+ vpunpckhqdq $Ij,$Ij,$T1
+ vpxor $Zhi,$Xhi,$Xhi
+ vpclmulqdq \$0x00,$HK, $T2,$Xmi
+ vpxor $Ij,$T1,$T1
+ vpxor $Zmi,$Xmi,$Xmi
+ vxorps $Tred,$Xi,$Xi
+
+ vmovdqu 0x10($inp),$Ii # I[1]
+ vpalignr \$8,$Xi,$Xi,$Tred # 2nd phase
+ vpclmulqdq \$0x00,$Hkey,$Ij,$Zlo
+ vpshufb $bswap,$Ii,$Ii
+ vpxor $Xlo,$Zlo,$Zlo
+ vpclmulqdq \$0x11,$Hkey,$Ij,$Zhi
+ vmovdqu 0x90-0x40($Htbl),$Hkey # $Hkey^7
+ vpclmulqdq \$0x10,(%r10),$Xi,$Xi
+ vxorps $Xo,$Tred,$Tred
+ vpunpckhqdq $Ii,$Ii,$T2
+ vpxor $Xhi,$Zhi,$Zhi
+ vpclmulqdq \$0x10,$HK, $T1,$Zmi
+ vmovdqu 0xb0-0x40($Htbl),$HK
+ vpxor $Ii,$T2,$T2
+ vpxor $Xmi,$Zmi,$Zmi
+
+ vmovdqu ($inp),$Ij # I[0]
+ vpclmulqdq \$0x00,$Hkey,$Ii,$Xlo
+ vpshufb $bswap,$Ij,$Ij
+ vpclmulqdq \$0x11,$Hkey,$Ii,$Xhi
+ vmovdqu 0xa0-0x40($Htbl),$Hkey # $Hkey^8
+ vpxor $Tred,$Ij,$Ij
+ vpclmulqdq \$0x10,$HK, $T2,$Xmi
+ vpxor $Xi,$Ij,$Ij # accumulate $Xi
+
+ lea 0x80($inp),$inp
+ sub \$0x80,$len
+ jnc .Loop8x_avx
+
+ add \$0x80,$len
+ jmp .Ltail_no_xor_avx
+
+.align 32
+.Lshort_avx:
+ vmovdqu -0x10($inp,$len),$Ii # very last word
+ lea ($inp,$len),$inp
+ vmovdqu 0x00-0x40($Htbl),$Hkey # $Hkey^1
+ vmovdqu 0x20-0x40($Htbl),$HK
+ vpshufb $bswap,$Ii,$Ij
+
+ vmovdqa $Xlo,$Zlo # subtle way to zero $Zlo,
+ vmovdqa $Xhi,$Zhi # $Zhi and
+ vmovdqa $Xmi,$Zmi # $Zmi
+ sub \$0x10,$len
+ jz .Ltail_avx
+
+ vpunpckhqdq $Ij,$Ij,$T1
+ vpxor $Xlo,$Zlo,$Zlo
+ vpclmulqdq \$0x00,$Hkey,$Ij,$Xlo
+ vpxor $Ij,$T1,$T1
+ vmovdqu -0x20($inp),$Ii
+ vpxor $Xhi,$Zhi,$Zhi
+ vpclmulqdq \$0x11,$Hkey,$Ij,$Xhi
+ vmovdqu 0x10-0x40($Htbl),$Hkey # $Hkey^2
+ vpshufb $bswap,$Ii,$Ij
+ vpxor $Xmi,$Zmi,$Zmi
+ vpclmulqdq \$0x00,$HK,$T1,$Xmi
+ vpsrldq \$8,$HK,$HK
+ sub \$0x10,$len
+ jz .Ltail_avx
+
+ vpunpckhqdq $Ij,$Ij,$T1
+ vpxor $Xlo,$Zlo,$Zlo
+ vpclmulqdq \$0x00,$Hkey,$Ij,$Xlo
+ vpxor $Ij,$T1,$T1
+ vmovdqu -0x30($inp),$Ii
+ vpxor $Xhi,$Zhi,$Zhi
+ vpclmulqdq \$0x11,$Hkey,$Ij,$Xhi
+ vmovdqu 0x30-0x40($Htbl),$Hkey # $Hkey^3
+ vpshufb $bswap,$Ii,$Ij
+ vpxor $Xmi,$Zmi,$Zmi
+ vpclmulqdq \$0x00,$HK,$T1,$Xmi
+ vmovdqu 0x50-0x40($Htbl),$HK
+ sub \$0x10,$len
+ jz .Ltail_avx
+
+ vpunpckhqdq $Ij,$Ij,$T1
+ vpxor $Xlo,$Zlo,$Zlo
+ vpclmulqdq \$0x00,$Hkey,$Ij,$Xlo
+ vpxor $Ij,$T1,$T1
+ vmovdqu -0x40($inp),$Ii
+ vpxor $Xhi,$Zhi,$Zhi
+ vpclmulqdq \$0x11,$Hkey,$Ij,$Xhi
+ vmovdqu 0x40-0x40($Htbl),$Hkey # $Hkey^4
+ vpshufb $bswap,$Ii,$Ij
+ vpxor $Xmi,$Zmi,$Zmi
+ vpclmulqdq \$0x00,$HK,$T1,$Xmi
+ vpsrldq \$8,$HK,$HK
+ sub \$0x10,$len
+ jz .Ltail_avx
+
+ vpunpckhqdq $Ij,$Ij,$T1
+ vpxor $Xlo,$Zlo,$Zlo
+ vpclmulqdq \$0x00,$Hkey,$Ij,$Xlo
+ vpxor $Ij,$T1,$T1
+ vmovdqu -0x50($inp),$Ii
+ vpxor $Xhi,$Zhi,$Zhi
+ vpclmulqdq \$0x11,$Hkey,$Ij,$Xhi
+ vmovdqu 0x60-0x40($Htbl),$Hkey # $Hkey^5
+ vpshufb $bswap,$Ii,$Ij
+ vpxor $Xmi,$Zmi,$Zmi
+ vpclmulqdq \$0x00,$HK,$T1,$Xmi
+ vmovdqu 0x80-0x40($Htbl),$HK
+ sub \$0x10,$len
+ jz .Ltail_avx
+
+ vpunpckhqdq $Ij,$Ij,$T1
+ vpxor $Xlo,$Zlo,$Zlo
+ vpclmulqdq \$0x00,$Hkey,$Ij,$Xlo
+ vpxor $Ij,$T1,$T1
+ vmovdqu -0x60($inp),$Ii
+ vpxor $Xhi,$Zhi,$Zhi
+ vpclmulqdq \$0x11,$Hkey,$Ij,$Xhi
+ vmovdqu 0x70-0x40($Htbl),$Hkey # $Hkey^6
+ vpshufb $bswap,$Ii,$Ij
+ vpxor $Xmi,$Zmi,$Zmi
+ vpclmulqdq \$0x00,$HK,$T1,$Xmi
+ vpsrldq \$8,$HK,$HK
+ sub \$0x10,$len
+ jz .Ltail_avx
+
+ vpunpckhqdq $Ij,$Ij,$T1
+ vpxor $Xlo,$Zlo,$Zlo
+ vpclmulqdq \$0x00,$Hkey,$Ij,$Xlo
+ vpxor $Ij,$T1,$T1
+ vmovdqu -0x70($inp),$Ii
+ vpxor $Xhi,$Zhi,$Zhi
+ vpclmulqdq \$0x11,$Hkey,$Ij,$Xhi
+ vmovdqu 0x90-0x40($Htbl),$Hkey # $Hkey^7
+ vpshufb $bswap,$Ii,$Ij
+ vpxor $Xmi,$Zmi,$Zmi
+ vpclmulqdq \$0x00,$HK,$T1,$Xmi
+ vmovq 0xb8-0x40($Htbl),$HK
+ sub \$0x10,$len
+ jmp .Ltail_avx
+
+.align 32
+.Ltail_avx:
+ vpxor $Xi,$Ij,$Ij # accumulate $Xi
+.Ltail_no_xor_avx:
+ vpunpckhqdq $Ij,$Ij,$T1
+ vpxor $Xlo,$Zlo,$Zlo
+ vpclmulqdq \$0x00,$Hkey,$Ij,$Xlo
+ vpxor $Ij,$T1,$T1
+ vpxor $Xhi,$Zhi,$Zhi
+ vpclmulqdq \$0x11,$Hkey,$Ij,$Xhi
+ vpxor $Xmi,$Zmi,$Zmi
+ vpclmulqdq \$0x00,$HK,$T1,$Xmi
+
+ vmovdqu (%r10),$Tred
+
+ vpxor $Xlo,$Zlo,$Xi
+ vpxor $Xhi,$Zhi,$Xo
+ vpxor $Xmi,$Zmi,$Zmi
+
+ vpxor $Xi, $Zmi,$Zmi # aggregated Karatsuba post-processing
+ vpxor $Xo, $Zmi,$Zmi
+ vpslldq \$8, $Zmi,$T2
+ vpsrldq \$8, $Zmi,$Zmi
+ vpxor $T2, $Xi, $Xi
+ vpxor $Zmi,$Xo, $Xo
+
+ vpclmulqdq \$0x10,$Tred,$Xi,$T2 # 1st phase
+ vpalignr \$8,$Xi,$Xi,$Xi
+ vpxor $T2,$Xi,$Xi
+
+ vpclmulqdq \$0x10,$Tred,$Xi,$T2 # 2nd phase
+ vpalignr \$8,$Xi,$Xi,$Xi
+ vpxor $Xo,$Xi,$Xi
+ vpxor $T2,$Xi,$Xi
+
+ cmp \$0,$len
+ jne .Lshort_avx
+
+ vpshufb $bswap,$Xi,$Xi
+ vmovdqu $Xi,($Xip)
+ vzeroupper
+___
+$code.=<<___ if ($win64);
+ movaps (%rsp),%xmm6
+ movaps 0x10(%rsp),%xmm7
+ movaps 0x20(%rsp),%xmm8
+ movaps 0x30(%rsp),%xmm9
+ movaps 0x40(%rsp),%xmm10
+ movaps 0x50(%rsp),%xmm11
+ movaps 0x60(%rsp),%xmm12
+ movaps 0x70(%rsp),%xmm13
+ movaps 0x80(%rsp),%xmm14
+ movaps 0x90(%rsp),%xmm15
+ lea 0xa8(%rsp),%rsp
+.LSEH_end_gcm_ghash_avx:
+___
+$code.=<<___;
+ ret
+.size gcm_ghash_avx,.-gcm_ghash_avx
+___
+} else {
+$code.=<<___;
+ jmp .L_ghash_clmul
+.size gcm_ghash_avx,.-gcm_ghash_avx
+___
+}
+
+$code.=<<___;
.align 64
.Lbswap_mask:
.byte 15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0
.L0x1c2_polynomial:
.byte 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xc2
+.L7_mask:
+ .long 7,0,7,0
+.L7_mask_poly:
+ .long 7,0,`0xE1<<1`,0
.align 64
.type .Lrem_4bit,\@object
.Lrem_4bit:
@@ -774,10 +1698,24 @@ se_handler:
.rva .LSEH_end_gcm_ghash_4bit
.rva .LSEH_info_gcm_ghash_4bit
+ .rva .LSEH_begin_gcm_init_clmul
+ .rva .LSEH_end_gcm_init_clmul
+ .rva .LSEH_info_gcm_init_clmul
+
.rva .LSEH_begin_gcm_ghash_clmul
.rva .LSEH_end_gcm_ghash_clmul
.rva .LSEH_info_gcm_ghash_clmul
+___
+$code.=<<___ if ($avx);
+ .rva .LSEH_begin_gcm_init_avx
+ .rva .LSEH_end_gcm_init_avx
+ .rva .LSEH_info_gcm_init_clmul
+ .rva .LSEH_begin_gcm_ghash_avx
+ .rva .LSEH_end_gcm_ghash_avx
+ .rva .LSEH_info_gcm_ghash_clmul
+___
+$code.=<<___;
.section .xdata
.align 8
.LSEH_info_gcm_gmult_4bit:
@@ -788,14 +1726,23 @@ se_handler:
.byte 9,0,0,0
.rva se_handler
.rva .Lghash_prologue,.Lghash_epilogue # HandlerData
+.LSEH_info_gcm_init_clmul:
+ .byte 0x01,0x08,0x03,0x00
+ .byte 0x08,0x68,0x00,0x00 #movaps 0x00(rsp),xmm6
+ .byte 0x04,0x22,0x00,0x00 #sub rsp,0x18
.LSEH_info_gcm_ghash_clmul:
- .byte 0x01,0x1f,0x0b,0x00
- .byte 0x1f,0xa8,0x04,0x00 #movaps 0x40(rsp),xmm10
- .byte 0x19,0x98,0x03,0x00 #movaps 0x30(rsp),xmm9
- .byte 0x13,0x88,0x02,0x00 #movaps 0x20(rsp),xmm8
- .byte 0x0d,0x78,0x01,0x00 #movaps 0x10(rsp),xmm7
- .byte 0x08,0x68,0x00,0x00 #movaps (rsp),xmm6
- .byte 0x04,0xa2,0x00,0x00 #sub rsp,0x58
+ .byte 0x01,0x33,0x16,0x00
+ .byte 0x33,0xf8,0x09,0x00 #movaps 0x90(rsp),xmm15
+ .byte 0x2e,0xe8,0x08,0x00 #movaps 0x80(rsp),xmm14
+ .byte 0x29,0xd8,0x07,0x00 #movaps 0x70(rsp),xmm13
+ .byte 0x24,0xc8,0x06,0x00 #movaps 0x60(rsp),xmm12
+ .byte 0x1f,0xb8,0x05,0x00 #movaps 0x50(rsp),xmm11
+ .byte 0x1a,0xa8,0x04,0x00 #movaps 0x40(rsp),xmm10
+ .byte 0x15,0x98,0x03,0x00 #movaps 0x30(rsp),xmm9
+ .byte 0x10,0x88,0x02,0x00 #movaps 0x20(rsp),xmm8
+ .byte 0x0c,0x78,0x01,0x00 #movaps 0x10(rsp),xmm7
+ .byte 0x08,0x68,0x00,0x00 #movaps 0x00(rsp),xmm6
+ .byte 0x04,0x01,0x15,0x00 #sub rsp,0xa8
___
}
diff --git a/crypto/openssl/crypto/modes/asm/ghashp8-ppc.pl b/crypto/openssl/crypto/modes/asm/ghashp8-ppc.pl
new file mode 100755
index 0000000..e76a58c
--- /dev/null
+++ b/crypto/openssl/crypto/modes/asm/ghashp8-ppc.pl
@@ -0,0 +1,234 @@
+#!/usr/bin/env perl
+#
+# ====================================================================
+# Written by Andy Polyakov <appro@openssl.org> for the OpenSSL
+# project. The module is, however, dual licensed under OpenSSL and
+# CRYPTOGAMS licenses depending on where you obtain it. For further
+# details see http://www.openssl.org/~appro/cryptogams/.
+# ====================================================================
+#
+# GHASH for for PowerISA v2.07.
+#
+# July 2014
+#
+# Accurate performance measurements are problematic, because it's
+# always virtualized setup with possibly throttled processor.
+# Relative comparison is therefore more informative. This initial
+# version is ~2.1x slower than hardware-assisted AES-128-CTR, ~12x
+# faster than "4-bit" integer-only compiler-generated 64-bit code.
+# "Initial version" means that there is room for futher improvement.
+
+$flavour=shift;
+$output =shift;
+
+if ($flavour =~ /64/) {
+ $SIZE_T=8;
+ $LRSAVE=2*$SIZE_T;
+ $STU="stdu";
+ $POP="ld";
+ $PUSH="std";
+} elsif ($flavour =~ /32/) {
+ $SIZE_T=4;
+ $LRSAVE=$SIZE_T;
+ $STU="stwu";
+ $POP="lwz";
+ $PUSH="stw";
+} else { die "nonsense $flavour"; }
+
+$0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1;
+( $xlate="${dir}ppc-xlate.pl" and -f $xlate ) or
+( $xlate="${dir}../../perlasm/ppc-xlate.pl" and -f $xlate) or
+die "can't locate ppc-xlate.pl";
+
+open STDOUT,"| $^X $xlate $flavour $output" || die "can't call $xlate: $!";
+
+my ($Xip,$Htbl,$inp,$len)=map("r$_",(3..6)); # argument block
+
+my ($Xl,$Xm,$Xh,$IN)=map("v$_",(0..3));
+my ($zero,$t0,$t1,$t2,$xC2,$H,$Hh,$Hl,$lemask)=map("v$_",(4..12));
+my $vrsave="r12";
+
+$code=<<___;
+.machine "any"
+
+.text
+
+.globl .gcm_init_p8
+.align 5
+.gcm_init_p8:
+ lis r0,0xfff0
+ li r8,0x10
+ mfspr $vrsave,256
+ li r9,0x20
+ mtspr 256,r0
+ li r10,0x30
+ lvx_u $H,0,r4 # load H
+
+ vspltisb $xC2,-16 # 0xf0
+ vspltisb $t0,1 # one
+ vaddubm $xC2,$xC2,$xC2 # 0xe0
+ vxor $zero,$zero,$zero
+ vor $xC2,$xC2,$t0 # 0xe1
+ vsldoi $xC2,$xC2,$zero,15 # 0xe1...
+ vsldoi $t1,$zero,$t0,1 # ...1
+ vaddubm $xC2,$xC2,$xC2 # 0xc2...
+ vspltisb $t2,7
+ vor $xC2,$xC2,$t1 # 0xc2....01
+ vspltb $t1,$H,0 # most significant byte
+ vsl $H,$H,$t0 # H<<=1
+ vsrab $t1,$t1,$t2 # broadcast carry bit
+ vand $t1,$t1,$xC2
+ vxor $H,$H,$t1 # twisted H
+
+ vsldoi $H,$H,$H,8 # twist even more ...
+ vsldoi $xC2,$zero,$xC2,8 # 0xc2.0
+ vsldoi $Hl,$zero,$H,8 # ... and split
+ vsldoi $Hh,$H,$zero,8
+
+ stvx_u $xC2,0,r3 # save pre-computed table
+ stvx_u $Hl,r8,r3
+ stvx_u $H, r9,r3
+ stvx_u $Hh,r10,r3
+
+ mtspr 256,$vrsave
+ blr
+ .long 0
+ .byte 0,12,0x14,0,0,0,2,0
+ .long 0
+.size .gcm_init_p8,.-.gcm_init_p8
+
+.globl .gcm_gmult_p8
+.align 5
+.gcm_gmult_p8:
+ lis r0,0xfff8
+ li r8,0x10
+ mfspr $vrsave,256
+ li r9,0x20
+ mtspr 256,r0
+ li r10,0x30
+ lvx_u $IN,0,$Xip # load Xi
+
+ lvx_u $Hl,r8,$Htbl # load pre-computed table
+ le?lvsl $lemask,r0,r0
+ lvx_u $H, r9,$Htbl
+ le?vspltisb $t0,0x07
+ lvx_u $Hh,r10,$Htbl
+ le?vxor $lemask,$lemask,$t0
+ lvx_u $xC2,0,$Htbl
+ le?vperm $IN,$IN,$IN,$lemask
+ vxor $zero,$zero,$zero
+
+ vpmsumd $Xl,$IN,$Hl # H.lo·Xi.lo
+ vpmsumd $Xm,$IN,$H # H.hi·Xi.lo+H.lo·Xi.hi
+ vpmsumd $Xh,$IN,$Hh # H.hi·Xi.hi
+
+ vpmsumd $t2,$Xl,$xC2 # 1st phase
+
+ vsldoi $t0,$Xm,$zero,8
+ vsldoi $t1,$zero,$Xm,8
+ vxor $Xl,$Xl,$t0
+ vxor $Xh,$Xh,$t1
+
+ vsldoi $Xl,$Xl,$Xl,8
+ vxor $Xl,$Xl,$t2
+
+ vsldoi $t1,$Xl,$Xl,8 # 2nd phase
+ vpmsumd $Xl,$Xl,$xC2
+ vxor $t1,$t1,$Xh
+ vxor $Xl,$Xl,$t1
+
+ le?vperm $Xl,$Xl,$Xl,$lemask
+ stvx_u $Xl,0,$Xip # write out Xi
+
+ mtspr 256,$vrsave
+ blr
+ .long 0
+ .byte 0,12,0x14,0,0,0,2,0
+ .long 0
+.size .gcm_gmult_p8,.-.gcm_gmult_p8
+
+.globl .gcm_ghash_p8
+.align 5
+.gcm_ghash_p8:
+ lis r0,0xfff8
+ li r8,0x10
+ mfspr $vrsave,256
+ li r9,0x20
+ mtspr 256,r0
+ li r10,0x30
+ lvx_u $Xl,0,$Xip # load Xi
+
+ lvx_u $Hl,r8,$Htbl # load pre-computed table
+ le?lvsl $lemask,r0,r0
+ lvx_u $H, r9,$Htbl
+ le?vspltisb $t0,0x07
+ lvx_u $Hh,r10,$Htbl
+ le?vxor $lemask,$lemask,$t0
+ lvx_u $xC2,0,$Htbl
+ le?vperm $Xl,$Xl,$Xl,$lemask
+ vxor $zero,$zero,$zero
+
+ lvx_u $IN,0,$inp
+ addi $inp,$inp,16
+ subi $len,$len,16
+ le?vperm $IN,$IN,$IN,$lemask
+ vxor $IN,$IN,$Xl
+ b Loop
+
+.align 5
+Loop:
+ subic $len,$len,16
+ vpmsumd $Xl,$IN,$Hl # H.lo·Xi.lo
+ subfe. r0,r0,r0 # borrow?-1:0
+ vpmsumd $Xm,$IN,$H # H.hi·Xi.lo+H.lo·Xi.hi
+ and r0,r0,$len
+ vpmsumd $Xh,$IN,$Hh # H.hi·Xi.hi
+ add $inp,$inp,r0
+
+ vpmsumd $t2,$Xl,$xC2 # 1st phase
+
+ vsldoi $t0,$Xm,$zero,8
+ vsldoi $t1,$zero,$Xm,8
+ vxor $Xl,$Xl,$t0
+ vxor $Xh,$Xh,$t1
+
+ vsldoi $Xl,$Xl,$Xl,8
+ vxor $Xl,$Xl,$t2
+ lvx_u $IN,0,$inp
+ addi $inp,$inp,16
+
+ vsldoi $t1,$Xl,$Xl,8 # 2nd phase
+ vpmsumd $Xl,$Xl,$xC2
+ le?vperm $IN,$IN,$IN,$lemask
+ vxor $t1,$t1,$Xh
+ vxor $IN,$IN,$t1
+ vxor $IN,$IN,$Xl
+ beq Loop # did $len-=16 borrow?
+
+ vxor $Xl,$Xl,$t1
+ le?vperm $Xl,$Xl,$Xl,$lemask
+ stvx_u $Xl,0,$Xip # write out Xi
+
+ mtspr 256,$vrsave
+ blr
+ .long 0
+ .byte 0,12,0x14,0,0,0,4,0
+ .long 0
+.size .gcm_ghash_p8,.-.gcm_ghash_p8
+
+.asciz "GHASH for PowerISA 2.07, CRYPTOGAMS by <appro\@openssl.org>"
+.align 2
+___
+
+foreach (split("\n",$code)) {
+ if ($flavour =~ /le$/o) { # little-endian
+ s/le\?//o or
+ s/be\?/#be#/o;
+ } else {
+ s/le\?/#le#/o or
+ s/be\?//o;
+ }
+ print $_,"\n";
+}
+
+close STDOUT; # enforce flush
diff --git a/crypto/openssl/crypto/modes/asm/ghashv8-armx.pl b/crypto/openssl/crypto/modes/asm/ghashv8-armx.pl
new file mode 100755
index 0000000..0b9cd73
--- /dev/null
+++ b/crypto/openssl/crypto/modes/asm/ghashv8-armx.pl
@@ -0,0 +1,409 @@
+#!/usr/bin/env perl
+#
+# ====================================================================
+# Written by Andy Polyakov <appro@openssl.org> for the OpenSSL
+# project. The module is, however, dual licensed under OpenSSL and
+# CRYPTOGAMS licenses depending on where you obtain it. For further
+# details see http://www.openssl.org/~appro/cryptogams/.
+# ====================================================================
+#
+# GHASH for ARMv8 Crypto Extension, 64-bit polynomial multiplication.
+#
+# June 2014
+#
+# Initial version was developed in tight cooperation with Ard
+# Biesheuvel <ard.biesheuvel@linaro.org> from bits-n-pieces from
+# other assembly modules. Just like aesv8-armx.pl this module
+# supports both AArch32 and AArch64 execution modes.
+#
+# July 2014
+#
+# Implement 2x aggregated reduction [see ghash-x86.pl for background
+# information].
+#
+# Current performance in cycles per processed byte:
+#
+# PMULL[2] 32-bit NEON(*)
+# Apple A7 0.92 5.62
+# Cortex-A53 1.01 8.39
+# Cortex-A57 1.17 7.61
+#
+# (*) presented for reference/comparison purposes;
+
+$flavour = shift;
+open STDOUT,">".shift;
+
+$Xi="x0"; # argument block
+$Htbl="x1";
+$inp="x2";
+$len="x3";
+
+$inc="x12";
+
+{
+my ($Xl,$Xm,$Xh,$IN)=map("q$_",(0..3));
+my ($t0,$t1,$t2,$xC2,$H,$Hhl,$H2)=map("q$_",(8..14));
+
+$code=<<___;
+#include "arm_arch.h"
+
+.text
+___
+$code.=".arch armv8-a+crypto\n" if ($flavour =~ /64/);
+$code.=".fpu neon\n.code 32\n" if ($flavour !~ /64/);
+
+################################################################################
+# void gcm_init_v8(u128 Htable[16],const u64 H[2]);
+#
+# input: 128-bit H - secret parameter E(K,0^128)
+# output: precomputed table filled with degrees of twisted H;
+# H is twisted to handle reverse bitness of GHASH;
+# only few of 16 slots of Htable[16] are used;
+# data is opaque to outside world (which allows to
+# optimize the code independently);
+#
+$code.=<<___;
+.global gcm_init_v8
+.type gcm_init_v8,%function
+.align 4
+gcm_init_v8:
+ vld1.64 {$t1},[x1] @ load input H
+ vmov.i8 $xC2,#0xe1
+ vshl.i64 $xC2,$xC2,#57 @ 0xc2.0
+ vext.8 $IN,$t1,$t1,#8
+ vshr.u64 $t2,$xC2,#63
+ vdup.32 $t1,${t1}[1]
+ vext.8 $t0,$t2,$xC2,#8 @ t0=0xc2....01
+ vshr.u64 $t2,$IN,#63
+ vshr.s32 $t1,$t1,#31 @ broadcast carry bit
+ vand $t2,$t2,$t0
+ vshl.i64 $IN,$IN,#1
+ vext.8 $t2,$t2,$t2,#8
+ vand $t0,$t0,$t1
+ vorr $IN,$IN,$t2 @ H<<<=1
+ veor $H,$IN,$t0 @ twisted H
+ vst1.64 {$H},[x0],#16 @ store Htable[0]
+
+ @ calculate H^2
+ vext.8 $t0,$H,$H,#8 @ Karatsuba pre-processing
+ vpmull.p64 $Xl,$H,$H
+ veor $t0,$t0,$H
+ vpmull2.p64 $Xh,$H,$H
+ vpmull.p64 $Xm,$t0,$t0
+
+ vext.8 $t1,$Xl,$Xh,#8 @ Karatsuba post-processing
+ veor $t2,$Xl,$Xh
+ veor $Xm,$Xm,$t1
+ veor $Xm,$Xm,$t2
+ vpmull.p64 $t2,$Xl,$xC2 @ 1st phase
+
+ vmov $Xh#lo,$Xm#hi @ Xh|Xm - 256-bit result
+ vmov $Xm#hi,$Xl#lo @ Xm is rotated Xl
+ veor $Xl,$Xm,$t2
+
+ vext.8 $t2,$Xl,$Xl,#8 @ 2nd phase
+ vpmull.p64 $Xl,$Xl,$xC2
+ veor $t2,$t2,$Xh
+ veor $H2,$Xl,$t2
+
+ vext.8 $t1,$H2,$H2,#8 @ Karatsuba pre-processing
+ veor $t1,$t1,$H2
+ vext.8 $Hhl,$t0,$t1,#8 @ pack Karatsuba pre-processed
+ vst1.64 {$Hhl-$H2},[x0] @ store Htable[1..2]
+
+ ret
+.size gcm_init_v8,.-gcm_init_v8
+___
+################################################################################
+# void gcm_gmult_v8(u64 Xi[2],const u128 Htable[16]);
+#
+# input: Xi - current hash value;
+# Htable - table precomputed in gcm_init_v8;
+# output: Xi - next hash value Xi;
+#
+$code.=<<___;
+.global gcm_gmult_v8
+.type gcm_gmult_v8,%function
+.align 4
+gcm_gmult_v8:
+ vld1.64 {$t1},[$Xi] @ load Xi
+ vmov.i8 $xC2,#0xe1
+ vld1.64 {$H-$Hhl},[$Htbl] @ load twisted H, ...
+ vshl.u64 $xC2,$xC2,#57
+#ifndef __ARMEB__
+ vrev64.8 $t1,$t1
+#endif
+ vext.8 $IN,$t1,$t1,#8
+
+ vpmull.p64 $Xl,$H,$IN @ H.lo·Xi.lo
+ veor $t1,$t1,$IN @ Karatsuba pre-processing
+ vpmull2.p64 $Xh,$H,$IN @ H.hi·Xi.hi
+ vpmull.p64 $Xm,$Hhl,$t1 @ (H.lo+H.hi)·(Xi.lo+Xi.hi)
+
+ vext.8 $t1,$Xl,$Xh,#8 @ Karatsuba post-processing
+ veor $t2,$Xl,$Xh
+ veor $Xm,$Xm,$t1
+ veor $Xm,$Xm,$t2
+ vpmull.p64 $t2,$Xl,$xC2 @ 1st phase of reduction
+
+ vmov $Xh#lo,$Xm#hi @ Xh|Xm - 256-bit result
+ vmov $Xm#hi,$Xl#lo @ Xm is rotated Xl
+ veor $Xl,$Xm,$t2
+
+ vext.8 $t2,$Xl,$Xl,#8 @ 2nd phase of reduction
+ vpmull.p64 $Xl,$Xl,$xC2
+ veor $t2,$t2,$Xh
+ veor $Xl,$Xl,$t2
+
+#ifndef __ARMEB__
+ vrev64.8 $Xl,$Xl
+#endif
+ vext.8 $Xl,$Xl,$Xl,#8
+ vst1.64 {$Xl},[$Xi] @ write out Xi
+
+ ret
+.size gcm_gmult_v8,.-gcm_gmult_v8
+___
+################################################################################
+# void gcm_ghash_v8(u64 Xi[2],const u128 Htable[16],const u8 *inp,size_t len);
+#
+# input: table precomputed in gcm_init_v8;
+# current hash value Xi;
+# pointer to input data;
+# length of input data in bytes, but divisible by block size;
+# output: next hash value Xi;
+#
+$code.=<<___;
+.global gcm_ghash_v8
+.type gcm_ghash_v8,%function
+.align 4
+gcm_ghash_v8:
+___
+$code.=<<___ if ($flavour !~ /64/);
+ vstmdb sp!,{d8-d15} @ 32-bit ABI says so
+___
+$code.=<<___;
+ vld1.64 {$Xl},[$Xi] @ load [rotated] Xi
+ @ "[rotated]" means that
+ @ loaded value would have
+ @ to be rotated in order to
+ @ make it appear as in
+ @ alorithm specification
+ subs $len,$len,#32 @ see if $len is 32 or larger
+ mov $inc,#16 @ $inc is used as post-
+ @ increment for input pointer;
+ @ as loop is modulo-scheduled
+ @ $inc is zeroed just in time
+ @ to preclude oversteping
+ @ inp[len], which means that
+ @ last block[s] are actually
+ @ loaded twice, but last
+ @ copy is not processed
+ vld1.64 {$H-$Hhl},[$Htbl],#32 @ load twisted H, ..., H^2
+ vmov.i8 $xC2,#0xe1
+ vld1.64 {$H2},[$Htbl]
+ cclr $inc,eq @ is it time to zero $inc?
+ vext.8 $Xl,$Xl,$Xl,#8 @ rotate Xi
+ vld1.64 {$t0},[$inp],#16 @ load [rotated] I[0]
+ vshl.u64 $xC2,$xC2,#57 @ compose 0xc2.0 constant
+#ifndef __ARMEB__
+ vrev64.8 $t0,$t0
+ vrev64.8 $Xl,$Xl
+#endif
+ vext.8 $IN,$t0,$t0,#8 @ rotate I[0]
+ b.lo .Lodd_tail_v8 @ $len was less than 32
+___
+{ my ($Xln,$Xmn,$Xhn,$In) = map("q$_",(4..7));
+ #######
+ # Xi+2 =[H*(Ii+1 + Xi+1)] mod P =
+ # [(H*Ii+1) + (H*Xi+1)] mod P =
+ # [(H*Ii+1) + H^2*(Ii+Xi)] mod P
+ #
+$code.=<<___;
+ vld1.64 {$t1},[$inp],$inc @ load [rotated] I[1]
+#ifndef __ARMEB__
+ vrev64.8 $t1,$t1
+#endif
+ vext.8 $In,$t1,$t1,#8
+ veor $IN,$IN,$Xl @ I[i]^=Xi
+ vpmull.p64 $Xln,$H,$In @ H·Ii+1
+ veor $t1,$t1,$In @ Karatsuba pre-processing
+ vpmull2.p64 $Xhn,$H,$In
+ b .Loop_mod2x_v8
+
+.align 4
+.Loop_mod2x_v8:
+ vext.8 $t2,$IN,$IN,#8
+ subs $len,$len,#32 @ is there more data?
+ vpmull.p64 $Xl,$H2,$IN @ H^2.lo·Xi.lo
+ cclr $inc,lo @ is it time to zero $inc?
+
+ vpmull.p64 $Xmn,$Hhl,$t1
+ veor $t2,$t2,$IN @ Karatsuba pre-processing
+ vpmull2.p64 $Xh,$H2,$IN @ H^2.hi·Xi.hi
+ veor $Xl,$Xl,$Xln @ accumulate
+ vpmull2.p64 $Xm,$Hhl,$t2 @ (H^2.lo+H^2.hi)·(Xi.lo+Xi.hi)
+ vld1.64 {$t0},[$inp],$inc @ load [rotated] I[i+2]
+
+ veor $Xh,$Xh,$Xhn
+ cclr $inc,eq @ is it time to zero $inc?
+ veor $Xm,$Xm,$Xmn
+
+ vext.8 $t1,$Xl,$Xh,#8 @ Karatsuba post-processing
+ veor $t2,$Xl,$Xh
+ veor $Xm,$Xm,$t1
+ vld1.64 {$t1},[$inp],$inc @ load [rotated] I[i+3]
+#ifndef __ARMEB__
+ vrev64.8 $t0,$t0
+#endif
+ veor $Xm,$Xm,$t2
+ vpmull.p64 $t2,$Xl,$xC2 @ 1st phase of reduction
+
+#ifndef __ARMEB__
+ vrev64.8 $t1,$t1
+#endif
+ vmov $Xh#lo,$Xm#hi @ Xh|Xm - 256-bit result
+ vmov $Xm#hi,$Xl#lo @ Xm is rotated Xl
+ vext.8 $In,$t1,$t1,#8
+ vext.8 $IN,$t0,$t0,#8
+ veor $Xl,$Xm,$t2
+ vpmull.p64 $Xln,$H,$In @ H·Ii+1
+ veor $IN,$IN,$Xh @ accumulate $IN early
+
+ vext.8 $t2,$Xl,$Xl,#8 @ 2nd phase of reduction
+ vpmull.p64 $Xl,$Xl,$xC2
+ veor $IN,$IN,$t2
+ veor $t1,$t1,$In @ Karatsuba pre-processing
+ veor $IN,$IN,$Xl
+ vpmull2.p64 $Xhn,$H,$In
+ b.hs .Loop_mod2x_v8 @ there was at least 32 more bytes
+
+ veor $Xh,$Xh,$t2
+ vext.8 $IN,$t0,$t0,#8 @ re-construct $IN
+ adds $len,$len,#32 @ re-construct $len
+ veor $Xl,$Xl,$Xh @ re-construct $Xl
+ b.eq .Ldone_v8 @ is $len zero?
+___
+}
+$code.=<<___;
+.Lodd_tail_v8:
+ vext.8 $t2,$Xl,$Xl,#8
+ veor $IN,$IN,$Xl @ inp^=Xi
+ veor $t1,$t0,$t2 @ $t1 is rotated inp^Xi
+
+ vpmull.p64 $Xl,$H,$IN @ H.lo·Xi.lo
+ veor $t1,$t1,$IN @ Karatsuba pre-processing
+ vpmull2.p64 $Xh,$H,$IN @ H.hi·Xi.hi
+ vpmull.p64 $Xm,$Hhl,$t1 @ (H.lo+H.hi)·(Xi.lo+Xi.hi)
+
+ vext.8 $t1,$Xl,$Xh,#8 @ Karatsuba post-processing
+ veor $t2,$Xl,$Xh
+ veor $Xm,$Xm,$t1
+ veor $Xm,$Xm,$t2
+ vpmull.p64 $t2,$Xl,$xC2 @ 1st phase of reduction
+
+ vmov $Xh#lo,$Xm#hi @ Xh|Xm - 256-bit result
+ vmov $Xm#hi,$Xl#lo @ Xm is rotated Xl
+ veor $Xl,$Xm,$t2
+
+ vext.8 $t2,$Xl,$Xl,#8 @ 2nd phase of reduction
+ vpmull.p64 $Xl,$Xl,$xC2
+ veor $t2,$t2,$Xh
+ veor $Xl,$Xl,$t2
+
+.Ldone_v8:
+#ifndef __ARMEB__
+ vrev64.8 $Xl,$Xl
+#endif
+ vext.8 $Xl,$Xl,$Xl,#8
+ vst1.64 {$Xl},[$Xi] @ write out Xi
+
+___
+$code.=<<___ if ($flavour !~ /64/);
+ vldmia sp!,{d8-d15} @ 32-bit ABI says so
+___
+$code.=<<___;
+ ret
+.size gcm_ghash_v8,.-gcm_ghash_v8
+___
+}
+$code.=<<___;
+.asciz "GHASH for ARMv8, CRYPTOGAMS by <appro\@openssl.org>"
+.align 2
+___
+
+if ($flavour =~ /64/) { ######## 64-bit code
+ sub unvmov {
+ my $arg=shift;
+
+ $arg =~ m/q([0-9]+)#(lo|hi),\s*q([0-9]+)#(lo|hi)/o &&
+ sprintf "ins v%d.d[%d],v%d.d[%d]",$1,($2 eq "lo")?0:1,$3,($4 eq "lo")?0:1;
+ }
+ foreach(split("\n",$code)) {
+ s/cclr\s+([wx])([^,]+),\s*([a-z]+)/csel $1$2,$1zr,$1$2,$3/o or
+ s/vmov\.i8/movi/o or # fix up legacy mnemonics
+ s/vmov\s+(.*)/unvmov($1)/geo or
+ s/vext\.8/ext/o or
+ s/vshr\.s/sshr\.s/o or
+ s/vshr/ushr/o or
+ s/^(\s+)v/$1/o or # strip off v prefix
+ s/\bbx\s+lr\b/ret/o;
+
+ s/\bq([0-9]+)\b/"v".($1<8?$1:$1+8).".16b"/geo; # old->new registers
+ s/@\s/\/\//o; # old->new style commentary
+
+ # fix up remainig legacy suffixes
+ s/\.[ui]?8(\s)/$1/o;
+ s/\.[uis]?32//o and s/\.16b/\.4s/go;
+ m/\.p64/o and s/\.16b/\.1q/o; # 1st pmull argument
+ m/l\.p64/o and s/\.16b/\.1d/go; # 2nd and 3rd pmull arguments
+ s/\.[uisp]?64//o and s/\.16b/\.2d/go;
+ s/\.[42]([sd])\[([0-3])\]/\.$1\[$2\]/o;
+
+ print $_,"\n";
+ }
+} else { ######## 32-bit code
+ sub unvdup32 {
+ my $arg=shift;
+
+ $arg =~ m/q([0-9]+),\s*q([0-9]+)\[([0-3])\]/o &&
+ sprintf "vdup.32 q%d,d%d[%d]",$1,2*$2+($3>>1),$3&1;
+ }
+ sub unvpmullp64 {
+ my ($mnemonic,$arg)=@_;
+
+ if ($arg =~ m/q([0-9]+),\s*q([0-9]+),\s*q([0-9]+)/o) {
+ my $word = 0xf2a00e00|(($1&7)<<13)|(($1&8)<<19)
+ |(($2&7)<<17)|(($2&8)<<4)
+ |(($3&7)<<1) |(($3&8)<<2);
+ $word |= 0x00010001 if ($mnemonic =~ "2");
+ # since ARMv7 instructions are always encoded little-endian.
+ # correct solution is to use .inst directive, but older
+ # assemblers don't implement it:-(
+ sprintf ".byte\t0x%02x,0x%02x,0x%02x,0x%02x\t@ %s %s",
+ $word&0xff,($word>>8)&0xff,
+ ($word>>16)&0xff,($word>>24)&0xff,
+ $mnemonic,$arg;
+ }
+ }
+
+ foreach(split("\n",$code)) {
+ s/\b[wx]([0-9]+)\b/r$1/go; # new->old registers
+ s/\bv([0-9])\.[12468]+[bsd]\b/q$1/go; # new->old registers
+ s/\/\/\s?/@ /o; # new->old style commentary
+
+ # fix up remainig new-style suffixes
+ s/\],#[0-9]+/]!/o;
+
+ s/cclr\s+([^,]+),\s*([a-z]+)/mov$2 $1,#0/o or
+ s/vdup\.32\s+(.*)/unvdup32($1)/geo or
+ s/v?(pmull2?)\.p64\s+(.*)/unvpmullp64($1,$2)/geo or
+ s/\bq([0-9]+)#(lo|hi)/sprintf "d%d",2*$1+($2 eq "hi")/geo or
+ s/^(\s+)b\./$1b/o or
+ s/^(\s+)ret/$1bx\tlr/o;
+
+ print $_,"\n";
+ }
+}
+
+close STDOUT; # enforce flush
diff --git a/crypto/openssl/crypto/modes/cbc128.c b/crypto/openssl/crypto/modes/cbc128.c
index 1ed7967..c13caea 100644
--- a/crypto/openssl/crypto/modes/cbc128.c
+++ b/crypto/openssl/crypto/modes/cbc128.c
@@ -59,7 +59,7 @@
#endif
#include <assert.h>
-#ifndef STRICT_ALIGNMENT
+#if !defined(STRICT_ALIGNMENT) && !defined(PEDANTIC)
# define STRICT_ALIGNMENT 0
#endif
diff --git a/crypto/openssl/crypto/modes/gcm128.c b/crypto/openssl/crypto/modes/gcm128.c
index 0ee569f..e299131 100644
--- a/crypto/openssl/crypto/modes/gcm128.c
+++ b/crypto/openssl/crypto/modes/gcm128.c
@@ -687,20 +687,31 @@ static void gcm_gmult_1bit(u64 Xi[2], const u64 H[2])
#endif
-#if TABLE_BITS==4 && defined(GHASH_ASM)
+#if TABLE_BITS==4 && (defined(GHASH_ASM) || defined(OPENSSL_CPUID_OBJ))
# if !defined(I386_ONLY) && \
(defined(__i386) || defined(__i386__) || \
defined(__x86_64) || defined(__x86_64__) || \
defined(_M_IX86) || defined(_M_AMD64) || defined(_M_X64))
# define GHASH_ASM_X86_OR_64
# define GCM_FUNCREF_4BIT
-extern unsigned int OPENSSL_ia32cap_P[2];
+extern unsigned int OPENSSL_ia32cap_P[];
void gcm_init_clmul(u128 Htable[16], const u64 Xi[2]);
void gcm_gmult_clmul(u64 Xi[2], const u128 Htable[16]);
void gcm_ghash_clmul(u64 Xi[2], const u128 Htable[16], const u8 *inp,
size_t len);
+# if defined(__i386) || defined(__i386__) || defined(_M_IX86)
+# define gcm_init_avx gcm_init_clmul
+# define gcm_gmult_avx gcm_gmult_clmul
+# define gcm_ghash_avx gcm_ghash_clmul
+# else
+void gcm_init_avx(u128 Htable[16], const u64 Xi[2]);
+void gcm_gmult_avx(u64 Xi[2], const u128 Htable[16]);
+void gcm_ghash_avx(u64 Xi[2], const u128 Htable[16], const u8 *inp,
+ size_t len);
+# endif
+
# if defined(__i386) || defined(__i386__) || defined(_M_IX86)
# define GHASH_ASM_X86
void gcm_gmult_4bit_mmx(u64 Xi[2], const u128 Htable[16]);
@@ -711,15 +722,41 @@ void gcm_gmult_4bit_x86(u64 Xi[2], const u128 Htable[16]);
void gcm_ghash_4bit_x86(u64 Xi[2], const u128 Htable[16], const u8 *inp,
size_t len);
# endif
-# elif defined(__arm__) || defined(__arm)
+# elif defined(__arm__) || defined(__arm) || defined(__aarch64__)
# include "arm_arch.h"
-# if __ARM_ARCH__>=7
+# if __ARM_MAX_ARCH__>=7
# define GHASH_ASM_ARM
# define GCM_FUNCREF_4BIT
+# define PMULL_CAPABLE (OPENSSL_armcap_P & ARMV8_PMULL)
+# if defined(__arm__) || defined(__arm)
+# define NEON_CAPABLE (OPENSSL_armcap_P & ARMV7_NEON)
+# endif
+void gcm_init_neon(u128 Htable[16], const u64 Xi[2]);
void gcm_gmult_neon(u64 Xi[2], const u128 Htable[16]);
void gcm_ghash_neon(u64 Xi[2], const u128 Htable[16], const u8 *inp,
size_t len);
+void gcm_init_v8(u128 Htable[16], const u64 Xi[2]);
+void gcm_gmult_v8(u64 Xi[2], const u128 Htable[16]);
+void gcm_ghash_v8(u64 Xi[2], const u128 Htable[16], const u8 *inp,
+ size_t len);
# endif
+# elif defined(__sparc__) || defined(__sparc)
+# include "sparc_arch.h"
+# define GHASH_ASM_SPARC
+# define GCM_FUNCREF_4BIT
+extern unsigned int OPENSSL_sparcv9cap_P[];
+void gcm_init_vis3(u128 Htable[16], const u64 Xi[2]);
+void gcm_gmult_vis3(u64 Xi[2], const u128 Htable[16]);
+void gcm_ghash_vis3(u64 Xi[2], const u128 Htable[16], const u8 *inp,
+ size_t len);
+# elif defined(OPENSSL_CPUID_OBJ) && (defined(__powerpc__) || defined(__ppc__) || defined(_ARCH_PPC))
+# include "ppc_arch.h"
+# define GHASH_ASM_PPC
+# define GCM_FUNCREF_4BIT
+void gcm_init_p8(u128 Htable[16], const u64 Xi[2]);
+void gcm_gmult_p8(u64 Xi[2], const u128 Htable[16]);
+void gcm_ghash_p8(u64 Xi[2], const u128 Htable[16], const u8 *inp,
+ size_t len);
# endif
#endif
@@ -768,9 +805,15 @@ void CRYPTO_gcm128_init(GCM128_CONTEXT *ctx, void *key, block128_f block)
# if !defined(GHASH_ASM_X86) || defined(OPENSSL_IA32_SSE2)
if (OPENSSL_ia32cap_P[0] & (1 << 24) && /* check FXSR bit */
OPENSSL_ia32cap_P[1] & (1 << 1)) { /* check PCLMULQDQ bit */
- gcm_init_clmul(ctx->Htable, ctx->H.u);
- ctx->gmult = gcm_gmult_clmul;
- ctx->ghash = gcm_ghash_clmul;
+ if (((OPENSSL_ia32cap_P[1] >> 22) & 0x41) == 0x41) { /* AVX+MOVBE */
+ gcm_init_avx(ctx->Htable, ctx->H.u);
+ ctx->gmult = gcm_gmult_avx;
+ ctx->ghash = gcm_ghash_avx;
+ } else {
+ gcm_init_clmul(ctx->Htable, ctx->H.u);
+ ctx->gmult = gcm_gmult_clmul;
+ ctx->ghash = gcm_ghash_clmul;
+ }
return;
}
# endif
@@ -792,13 +835,52 @@ void CRYPTO_gcm128_init(GCM128_CONTEXT *ctx, void *key, block128_f block)
ctx->ghash = gcm_ghash_4bit;
# endif
# elif defined(GHASH_ASM_ARM)
- if (OPENSSL_armcap_P & ARMV7_NEON) {
+# ifdef PMULL_CAPABLE
+ if (PMULL_CAPABLE) {
+ gcm_init_v8(ctx->Htable, ctx->H.u);
+ ctx->gmult = gcm_gmult_v8;
+ ctx->ghash = gcm_ghash_v8;
+ } else
+# endif
+# ifdef NEON_CAPABLE
+ if (NEON_CAPABLE) {
+ gcm_init_neon(ctx->Htable, ctx->H.u);
ctx->gmult = gcm_gmult_neon;
ctx->ghash = gcm_ghash_neon;
+ } else
+# endif
+ {
+ gcm_init_4bit(ctx->Htable, ctx->H.u);
+ ctx->gmult = gcm_gmult_4bit;
+# if defined(GHASH)
+ ctx->ghash = gcm_ghash_4bit;
+# else
+ ctx->ghash = NULL;
+# endif
+ }
+# elif defined(GHASH_ASM_SPARC)
+ if (OPENSSL_sparcv9cap_P[0] & SPARCV9_VIS3) {
+ gcm_init_vis3(ctx->Htable, ctx->H.u);
+ ctx->gmult = gcm_gmult_vis3;
+ ctx->ghash = gcm_ghash_vis3;
+ } else {
+ gcm_init_4bit(ctx->Htable, ctx->H.u);
+ ctx->gmult = gcm_gmult_4bit;
+ ctx->ghash = gcm_ghash_4bit;
+ }
+# elif defined(GHASH_ASM_PPC)
+ if (OPENSSL_ppccap_P & PPC_CRYPTO207) {
+ gcm_init_p8(ctx->Htable, ctx->H.u);
+ ctx->gmult = gcm_gmult_p8;
+ ctx->ghash = gcm_ghash_p8;
} else {
gcm_init_4bit(ctx->Htable, ctx->H.u);
ctx->gmult = gcm_gmult_4bit;
+# if defined(GHASH)
ctx->ghash = gcm_ghash_4bit;
+# else
+ ctx->ghash = NULL;
+# endif
}
# else
gcm_init_4bit(ctx->Htable, ctx->H.u);
diff --git a/crypto/openssl/crypto/modes/modes.h b/crypto/openssl/crypto/modes/modes.h
index 880f020..fd48849 100644
--- a/crypto/openssl/crypto/modes/modes.h
+++ b/crypto/openssl/crypto/modes/modes.h
@@ -148,6 +148,16 @@ int CRYPTO_xts128_encrypt(const XTS128_CONTEXT *ctx,
const unsigned char *inp, unsigned char *out,
size_t len, int enc);
+size_t CRYPTO_128_wrap(void *key, const unsigned char *iv,
+ unsigned char *out,
+ const unsigned char *in, size_t inlen,
+ block128_f block);
+
+size_t CRYPTO_128_unwrap(void *key, const unsigned char *iv,
+ unsigned char *out,
+ const unsigned char *in, size_t inlen,
+ block128_f block);
+
#ifdef __cplusplus
}
#endif
diff --git a/crypto/openssl/crypto/modes/modes_lcl.h b/crypto/openssl/crypto/modes/modes_lcl.h
index 296849b..fe14ec7 100644
--- a/crypto/openssl/crypto/modes/modes_lcl.h
+++ b/crypto/openssl/crypto/modes/modes_lcl.h
@@ -25,39 +25,49 @@ typedef unsigned int u32;
typedef unsigned char u8;
#define STRICT_ALIGNMENT 1
-#if defined(__i386) || defined(__i386__) || \
- defined(__x86_64) || defined(__x86_64__) || \
- defined(_M_IX86) || defined(_M_AMD64) || defined(_M_X64) || \
- defined(__s390__) || defined(__s390x__)
-# undef STRICT_ALIGNMENT
+#ifndef PEDANTIC
+# if defined(__i386) || defined(__i386__) || \
+ defined(__x86_64) || defined(__x86_64__) || \
+ defined(_M_IX86) || defined(_M_AMD64) || defined(_M_X64) || \
+ defined(__aarch64__) || \
+ defined(__s390__) || defined(__s390x__)
+# undef STRICT_ALIGNMENT
+# endif
#endif
#if !defined(PEDANTIC) && !defined(OPENSSL_NO_ASM) && !defined(OPENSSL_NO_INLINE_ASM)
# if defined(__GNUC__) && __GNUC__>=2
# if defined(__x86_64) || defined(__x86_64__)
-# define BSWAP8(x) ({ u64 ret=(x); \
+# define BSWAP8(x) ({ u64 ret_=(x); \
asm ("bswapq %0" \
- : "+r"(ret)); ret; })
-# define BSWAP4(x) ({ u32 ret=(x); \
+ : "+r"(ret_)); ret_; })
+# define BSWAP4(x) ({ u32 ret_=(x); \
asm ("bswapl %0" \
- : "+r"(ret)); ret; })
+ : "+r"(ret_)); ret_; })
# elif (defined(__i386) || defined(__i386__)) && !defined(I386_ONLY)
-# define BSWAP8(x) ({ u32 lo=(u64)(x)>>32,hi=(x); \
+# define BSWAP8(x) ({ u32 lo_=(u64)(x)>>32,hi_=(x); \
asm ("bswapl %0; bswapl %1" \
- : "+r"(hi),"+r"(lo)); \
- (u64)hi<<32|lo; })
-# define BSWAP4(x) ({ u32 ret=(x); \
+ : "+r"(hi_),"+r"(lo_)); \
+ (u64)hi_<<32|lo_; })
+# define BSWAP4(x) ({ u32 ret_=(x); \
asm ("bswapl %0" \
- : "+r"(ret)); ret; })
+ : "+r"(ret_)); ret_; })
+# elif defined(__aarch64__)
+# define BSWAP8(x) ({ u64 ret_; \
+ asm ("rev %0,%1" \
+ : "=r"(ret_) : "r"(x)); ret_; })
+# define BSWAP4(x) ({ u32 ret_; \
+ asm ("rev %w0,%w1" \
+ : "=r"(ret_) : "r"(x)); ret_; })
# elif (defined(__arm__) || defined(__arm)) && !defined(STRICT_ALIGNMENT)
-# define BSWAP8(x) ({ u32 lo=(u64)(x)>>32,hi=(x); \
+# define BSWAP8(x) ({ u32 lo_=(u64)(x)>>32,hi_=(x); \
asm ("rev %0,%0; rev %1,%1" \
- : "+r"(hi),"+r"(lo)); \
- (u64)hi<<32|lo; })
-# define BSWAP4(x) ({ u32 ret; \
+ : "+r"(hi_),"+r"(lo_)); \
+ (u64)hi_<<32|lo_; })
+# define BSWAP4(x) ({ u32 ret_; \
asm ("rev %0,%1" \
- : "=r"(ret) : "r"((u32)(x))); \
- ret; })
+ : "=r"(ret_) : "r"((u32)(x))); \
+ ret_; })
# endif
# elif defined(_MSC_VER)
# if _MSC_VER>=1300
diff --git a/crypto/openssl/crypto/modes/wrap128.c b/crypto/openssl/crypto/modes/wrap128.c
new file mode 100644
index 0000000..4dcaf03
--- /dev/null
+++ b/crypto/openssl/crypto/modes/wrap128.c
@@ -0,0 +1,138 @@
+/* crypto/modes/wrap128.c */
+/*
+ * Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL
+ * project.
+ */
+/* ====================================================================
+ * Copyright (c) 2013 The OpenSSL Project. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * 3. All advertising materials mentioning features or use of this
+ * software must display the following acknowledgment:
+ * "This product includes software developed by the OpenSSL Project
+ * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)"
+ *
+ * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
+ * endorse or promote products derived from this software without
+ * prior written permission. For written permission, please contact
+ * licensing@OpenSSL.org.
+ *
+ * 5. Products derived from this software may not be called "OpenSSL"
+ * nor may "OpenSSL" appear in their names without prior written
+ * permission of the OpenSSL Project.
+ *
+ * 6. Redistributions of any form whatsoever must retain the following
+ * acknowledgment:
+ * "This product includes software developed by the OpenSSL Project
+ * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)"
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
+ * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
+ * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+ * OF THE POSSIBILITY OF SUCH DAMAGE.
+ * ====================================================================
+ */
+
+#include "cryptlib.h"
+#include <openssl/modes.h>
+
+static const unsigned char default_iv[] = {
+ 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6, 0xA6,
+};
+
+/*
+ * Input size limit: lower than maximum of standards but far larger than
+ * anything that will be used in practice.
+ */
+#define CRYPTO128_WRAP_MAX (1UL << 31)
+
+size_t CRYPTO_128_wrap(void *key, const unsigned char *iv,
+ unsigned char *out,
+ const unsigned char *in, size_t inlen,
+ block128_f block)
+{
+ unsigned char *A, B[16], *R;
+ size_t i, j, t;
+ if ((inlen & 0x7) || (inlen < 8) || (inlen > CRYPTO128_WRAP_MAX))
+ return 0;
+ A = B;
+ t = 1;
+ memcpy(out + 8, in, inlen);
+ if (!iv)
+ iv = default_iv;
+
+ memcpy(A, iv, 8);
+
+ for (j = 0; j < 6; j++) {
+ R = out + 8;
+ for (i = 0; i < inlen; i += 8, t++, R += 8) {
+ memcpy(B + 8, R, 8);
+ block(B, B, key);
+ A[7] ^= (unsigned char)(t & 0xff);
+ if (t > 0xff) {
+ A[6] ^= (unsigned char)((t >> 8) & 0xff);
+ A[5] ^= (unsigned char)((t >> 16) & 0xff);
+ A[4] ^= (unsigned char)((t >> 24) & 0xff);
+ }
+ memcpy(R, B + 8, 8);
+ }
+ }
+ memcpy(out, A, 8);
+ return inlen + 8;
+}
+
+size_t CRYPTO_128_unwrap(void *key, const unsigned char *iv,
+ unsigned char *out,
+ const unsigned char *in, size_t inlen,
+ block128_f block)
+{
+ unsigned char *A, B[16], *R;
+ size_t i, j, t;
+ inlen -= 8;
+ if ((inlen & 0x7) || (inlen < 16) || (inlen > CRYPTO128_WRAP_MAX))
+ return 0;
+ A = B;
+ t = 6 * (inlen >> 3);
+ memcpy(A, in, 8);
+ memcpy(out, in + 8, inlen);
+ for (j = 0; j < 6; j++) {
+ R = out + inlen - 8;
+ for (i = 0; i < inlen; i += 8, t--, R -= 8) {
+ A[7] ^= (unsigned char)(t & 0xff);
+ if (t > 0xff) {
+ A[6] ^= (unsigned char)((t >> 8) & 0xff);
+ A[5] ^= (unsigned char)((t >> 16) & 0xff);
+ A[4] ^= (unsigned char)((t >> 24) & 0xff);
+ }
+ memcpy(B + 8, R, 8);
+ block(B, B, key);
+ memcpy(R, B + 8, 8);
+ }
+ }
+ if (!iv)
+ iv = default_iv;
+ if (memcmp(A, iv, 8)) {
+ OPENSSL_cleanse(out, inlen);
+ return 0;
+ }
+ return inlen;
+}
diff --git a/crypto/openssl/crypto/o_str.c b/crypto/openssl/crypto/o_str.c
index b23ef32..4e2d096 100644
--- a/crypto/openssl/crypto/o_str.c
+++ b/crypto/openssl/crypto/o_str.c
@@ -62,7 +62,7 @@
#include "o_str.h"
#if !defined(OPENSSL_IMPLEMENTS_strncasecmp) && \
- !defined(OPENSSL_SYSNAME_WIN32) && \
+ !defined(OPENSSL_SYSNAME_WIN32) && !defined(OPENSSL_SYSNAME_WINCE) && \
!defined(NETWARE_CLIB)
# include <strings.h>
#endif
diff --git a/crypto/openssl/crypto/o_time.c b/crypto/openssl/crypto/o_time.c
index e18b71d..58413fe 100644
--- a/crypto/openssl/crypto/o_time.c
+++ b/crypto/openssl/crypto/o_time.c
@@ -246,9 +246,73 @@ struct tm *OPENSSL_gmtime(const time_t *timer, struct tm *result)
static long date_to_julian(int y, int m, int d);
static void julian_to_date(long jd, int *y, int *m, int *d);
+static int julian_adj(const struct tm *tm, int off_day, long offset_sec,
+ long *pday, int *psec);
int OPENSSL_gmtime_adj(struct tm *tm, int off_day, long offset_sec)
{
+ int time_sec, time_year, time_month, time_day;
+ long time_jd;
+
+ /* Convert time and offset into julian day and seconds */
+ if (!julian_adj(tm, off_day, offset_sec, &time_jd, &time_sec))
+ return 0;
+
+ /* Convert Julian day back to date */
+
+ julian_to_date(time_jd, &time_year, &time_month, &time_day);
+
+ if (time_year < 1900 || time_year > 9999)
+ return 0;
+
+ /* Update tm structure */
+
+ tm->tm_year = time_year - 1900;
+ tm->tm_mon = time_month - 1;
+ tm->tm_mday = time_day;
+
+ tm->tm_hour = time_sec / 3600;
+ tm->tm_min = (time_sec / 60) % 60;
+ tm->tm_sec = time_sec % 60;
+
+ return 1;
+
+}
+
+int OPENSSL_gmtime_diff(int *pday, int *psec,
+ const struct tm *from, const struct tm *to)
+{
+ int from_sec, to_sec, diff_sec;
+ long from_jd, to_jd, diff_day;
+ if (!julian_adj(from, 0, 0, &from_jd, &from_sec))
+ return 0;
+ if (!julian_adj(to, 0, 0, &to_jd, &to_sec))
+ return 0;
+ diff_day = to_jd - from_jd;
+ diff_sec = to_sec - from_sec;
+ /* Adjust differences so both positive or both negative */
+ if (diff_day > 0 && diff_sec < 0) {
+ diff_day--;
+ diff_sec += SECS_PER_DAY;
+ }
+ if (diff_day < 0 && diff_sec > 0) {
+ diff_day++;
+ diff_sec -= SECS_PER_DAY;
+ }
+
+ if (pday)
+ *pday = (int)diff_day;
+ if (psec)
+ *psec = diff_sec;
+
+ return 1;
+
+}
+
+/* Convert tm structure and offset into julian day and seconds */
+static int julian_adj(const struct tm *tm, int off_day, long offset_sec,
+ long *pday, int *psec)
+{
int offset_hms, offset_day;
long time_jd;
int time_year, time_month, time_day;
@@ -284,25 +348,9 @@ int OPENSSL_gmtime_adj(struct tm *tm, int off_day, long offset_sec)
if (time_jd < 0)
return 0;
- /* Convert Julian day back to date */
-
- julian_to_date(time_jd, &time_year, &time_month, &time_day);
-
- if (time_year < 1900 || time_year > 9999)
- return 0;
-
- /* Update tm structure */
-
- tm->tm_year = time_year - 1900;
- tm->tm_mon = time_month - 1;
- tm->tm_mday = time_day;
-
- tm->tm_hour = offset_hms / 3600;
- tm->tm_min = (offset_hms / 60) % 60;
- tm->tm_sec = offset_hms % 60;
-
+ *pday = time_jd;
+ *psec = offset_hms;
return 1;
-
}
/*
@@ -354,27 +402,39 @@ int main(int argc, char **argv)
int check_time(long offset)
{
- struct tm tm1, tm2;
+ struct tm tm1, tm2, o1;
+ int off_day, off_sec;
+ long toffset;
time_t t1, t2;
time(&t1);
t2 = t1 + offset;
OPENSSL_gmtime(&t2, &tm2);
OPENSSL_gmtime(&t1, &tm1);
+ o1 = tm1;
OPENSSL_gmtime_adj(&tm1, 0, offset);
- if ((tm1.tm_year == tm2.tm_year) &&
- (tm1.tm_mon == tm2.tm_mon) &&
- (tm1.tm_mday == tm2.tm_mday) &&
- (tm1.tm_hour == tm2.tm_hour) &&
- (tm1.tm_min == tm2.tm_min) && (tm1.tm_sec == tm2.tm_sec))
- return 1;
- fprintf(stderr, "TIME ERROR!!\n");
- fprintf(stderr, "Time1: %d/%d/%d, %d:%02d:%02d\n",
- tm2.tm_mday, tm2.tm_mon + 1, tm2.tm_year + 1900,
- tm2.tm_hour, tm2.tm_min, tm2.tm_sec);
- fprintf(stderr, "Time2: %d/%d/%d, %d:%02d:%02d\n",
- tm1.tm_mday, tm1.tm_mon + 1, tm1.tm_year + 1900,
- tm1.tm_hour, tm1.tm_min, tm1.tm_sec);
- return 0;
+ if ((tm1.tm_year != tm2.tm_year) ||
+ (tm1.tm_mon != tm2.tm_mon) ||
+ (tm1.tm_mday != tm2.tm_mday) ||
+ (tm1.tm_hour != tm2.tm_hour) ||
+ (tm1.tm_min != tm2.tm_min) || (tm1.tm_sec != tm2.tm_sec)) {
+ fprintf(stderr, "TIME ERROR!!\n");
+ fprintf(stderr, "Time1: %d/%d/%d, %d:%02d:%02d\n",
+ tm2.tm_mday, tm2.tm_mon + 1, tm2.tm_year + 1900,
+ tm2.tm_hour, tm2.tm_min, tm2.tm_sec);
+ fprintf(stderr, "Time2: %d/%d/%d, %d:%02d:%02d\n",
+ tm1.tm_mday, tm1.tm_mon + 1, tm1.tm_year + 1900,
+ tm1.tm_hour, tm1.tm_min, tm1.tm_sec);
+ return 0;
+ }
+ OPENSSL_gmtime_diff(&o1, &tm1, &off_day, &off_sec);
+ toffset = (long)off_day *SECS_PER_DAY + off_sec;
+ if (offset != toffset) {
+ fprintf(stderr, "TIME OFFSET ERROR!!\n");
+ fprintf(stderr, "Expected %ld, Got %ld (%d:%d)\n",
+ offset, toffset, off_day, off_sec);
+ return 0;
+ }
+ return 1;
}
#endif
diff --git a/crypto/openssl/crypto/o_time.h b/crypto/openssl/crypto/o_time.h
index 901b200..a83a3d2 100644
--- a/crypto/openssl/crypto/o_time.h
+++ b/crypto/openssl/crypto/o_time.h
@@ -64,5 +64,7 @@
struct tm *OPENSSL_gmtime(const time_t *timer, struct tm *result);
int OPENSSL_gmtime_adj(struct tm *tm, int offset_day, long offset_sec);
+int OPENSSL_gmtime_diff(int *pday, int *psec,
+ const struct tm *from, const struct tm *to);
#endif
diff --git a/crypto/openssl/crypto/objects/obj_dat.h b/crypto/openssl/crypto/objects/obj_dat.h
index bc69665..b7e3cf2 100644
--- a/crypto/openssl/crypto/objects/obj_dat.h
+++ b/crypto/openssl/crypto/objects/obj_dat.h
@@ -62,12 +62,12 @@
* [including the GNU Public Licence.]
*/
-#define NUM_NID 920
-#define NUM_SN 913
-#define NUM_LN 913
-#define NUM_OBJ 857
+#define NUM_NID 958
+#define NUM_SN 951
+#define NUM_LN 951
+#define NUM_OBJ 890
-static const unsigned char lvalues[5974]={
+static const unsigned char lvalues[6255]={
0x2A,0x86,0x48,0x86,0xF7,0x0D, /* [ 0] OBJ_rsadsi */
0x2A,0x86,0x48,0x86,0xF7,0x0D,0x01, /* [ 6] OBJ_pkcs */
0x2A,0x86,0x48,0x86,0xF7,0x0D,0x02,0x02, /* [ 13] OBJ_md2 */
@@ -919,6 +919,39 @@ static const unsigned char lvalues[5974]={
0x2A,0x86,0x48,0x86,0xF7,0x0D,0x01,0x01,0x08,/* [5946] OBJ_mgf1 */
0x2A,0x86,0x48,0x86,0xF7,0x0D,0x01,0x01,0x0A,/* [5955] OBJ_rsassaPss */
0x2A,0x86,0x48,0x86,0xF7,0x0D,0x01,0x01,0x07,/* [5964] OBJ_rsaesOaep */
+0x2A,0x86,0x48,0xCE,0x3E,0x02,0x01, /* [5973] OBJ_dhpublicnumber */
+0x2B,0x24,0x03,0x03,0x02,0x08,0x01,0x01,0x01,/* [5980] OBJ_brainpoolP160r1 */
+0x2B,0x24,0x03,0x03,0x02,0x08,0x01,0x01,0x02,/* [5989] OBJ_brainpoolP160t1 */
+0x2B,0x24,0x03,0x03,0x02,0x08,0x01,0x01,0x03,/* [5998] OBJ_brainpoolP192r1 */
+0x2B,0x24,0x03,0x03,0x02,0x08,0x01,0x01,0x04,/* [6007] OBJ_brainpoolP192t1 */
+0x2B,0x24,0x03,0x03,0x02,0x08,0x01,0x01,0x05,/* [6016] OBJ_brainpoolP224r1 */
+0x2B,0x24,0x03,0x03,0x02,0x08,0x01,0x01,0x06,/* [6025] OBJ_brainpoolP224t1 */
+0x2B,0x24,0x03,0x03,0x02,0x08,0x01,0x01,0x07,/* [6034] OBJ_brainpoolP256r1 */
+0x2B,0x24,0x03,0x03,0x02,0x08,0x01,0x01,0x08,/* [6043] OBJ_brainpoolP256t1 */
+0x2B,0x24,0x03,0x03,0x02,0x08,0x01,0x01,0x09,/* [6052] OBJ_brainpoolP320r1 */
+0x2B,0x24,0x03,0x03,0x02,0x08,0x01,0x01,0x0A,/* [6061] OBJ_brainpoolP320t1 */
+0x2B,0x24,0x03,0x03,0x02,0x08,0x01,0x01,0x0B,/* [6070] OBJ_brainpoolP384r1 */
+0x2B,0x24,0x03,0x03,0x02,0x08,0x01,0x01,0x0C,/* [6079] OBJ_brainpoolP384t1 */
+0x2B,0x24,0x03,0x03,0x02,0x08,0x01,0x01,0x0D,/* [6088] OBJ_brainpoolP512r1 */
+0x2B,0x24,0x03,0x03,0x02,0x08,0x01,0x01,0x0E,/* [6097] OBJ_brainpoolP512t1 */
+0x2A,0x86,0x48,0x86,0xF7,0x0D,0x01,0x01,0x09,/* [6106] OBJ_pSpecified */
+0x2B,0x81,0x05,0x10,0x86,0x48,0x3F,0x00,0x02,/* [6115] OBJ_dhSinglePass_stdDH_sha1kdf_scheme */
+0x2B,0x81,0x04,0x01,0x0B,0x00, /* [6124] OBJ_dhSinglePass_stdDH_sha224kdf_scheme */
+0x2B,0x81,0x04,0x01,0x0B,0x01, /* [6130] OBJ_dhSinglePass_stdDH_sha256kdf_scheme */
+0x2B,0x81,0x04,0x01,0x0B,0x02, /* [6136] OBJ_dhSinglePass_stdDH_sha384kdf_scheme */
+0x2B,0x81,0x04,0x01,0x0B,0x03, /* [6142] OBJ_dhSinglePass_stdDH_sha512kdf_scheme */
+0x2B,0x81,0x05,0x10,0x86,0x48,0x3F,0x00,0x03,/* [6148] OBJ_dhSinglePass_cofactorDH_sha1kdf_scheme */
+0x2B,0x81,0x04,0x01,0x0E,0x00, /* [6157] OBJ_dhSinglePass_cofactorDH_sha224kdf_scheme */
+0x2B,0x81,0x04,0x01,0x0E,0x01, /* [6163] OBJ_dhSinglePass_cofactorDH_sha256kdf_scheme */
+0x2B,0x81,0x04,0x01,0x0E,0x02, /* [6169] OBJ_dhSinglePass_cofactorDH_sha384kdf_scheme */
+0x2B,0x81,0x04,0x01,0x0E,0x03, /* [6175] OBJ_dhSinglePass_cofactorDH_sha512kdf_scheme */
+0x2B,0x06,0x01,0x04,0x01,0xD6,0x79,0x02,0x04,0x02,/* [6181] OBJ_ct_precert_scts */
+0x2B,0x06,0x01,0x04,0x01,0xD6,0x79,0x02,0x04,0x03,/* [6191] OBJ_ct_precert_poison */
+0x2B,0x06,0x01,0x04,0x01,0xD6,0x79,0x02,0x04,0x04,/* [6201] OBJ_ct_precert_signer */
+0x2B,0x06,0x01,0x04,0x01,0xD6,0x79,0x02,0x04,0x05,/* [6211] OBJ_ct_cert_scts */
+0x2B,0x06,0x01,0x04,0x01,0x82,0x37,0x3C,0x02,0x01,0x01,/* [6221] OBJ_jurisdictionLocalityName */
+0x2B,0x06,0x01,0x04,0x01,0x82,0x37,0x3C,0x02,0x01,0x02,/* [6232] OBJ_jurisdictionStateOrProvinceName */
+0x2B,0x06,0x01,0x04,0x01,0x82,0x37,0x3C,0x02,0x01,0x03,/* [6243] OBJ_jurisdictionCountryName */
};
static const ASN1_OBJECT nid_objs[NUM_NID]={
@@ -2399,12 +2432,95 @@ static const ASN1_OBJECT nid_objs[NUM_NID]={
{"AES-256-CBC-HMAC-SHA1","aes-256-cbc-hmac-sha1",
NID_aes_256_cbc_hmac_sha1,0,NULL,0},
{"RSAES-OAEP","rsaesOaep",NID_rsaesOaep,9,&(lvalues[5964]),0},
+{"dhpublicnumber","X9.42 DH",NID_dhpublicnumber,7,&(lvalues[5973]),0},
+{"brainpoolP160r1","brainpoolP160r1",NID_brainpoolP160r1,9,
+ &(lvalues[5980]),0},
+{"brainpoolP160t1","brainpoolP160t1",NID_brainpoolP160t1,9,
+ &(lvalues[5989]),0},
+{"brainpoolP192r1","brainpoolP192r1",NID_brainpoolP192r1,9,
+ &(lvalues[5998]),0},
+{"brainpoolP192t1","brainpoolP192t1",NID_brainpoolP192t1,9,
+ &(lvalues[6007]),0},
+{"brainpoolP224r1","brainpoolP224r1",NID_brainpoolP224r1,9,
+ &(lvalues[6016]),0},
+{"brainpoolP224t1","brainpoolP224t1",NID_brainpoolP224t1,9,
+ &(lvalues[6025]),0},
+{"brainpoolP256r1","brainpoolP256r1",NID_brainpoolP256r1,9,
+ &(lvalues[6034]),0},
+{"brainpoolP256t1","brainpoolP256t1",NID_brainpoolP256t1,9,
+ &(lvalues[6043]),0},
+{"brainpoolP320r1","brainpoolP320r1",NID_brainpoolP320r1,9,
+ &(lvalues[6052]),0},
+{"brainpoolP320t1","brainpoolP320t1",NID_brainpoolP320t1,9,
+ &(lvalues[6061]),0},
+{"brainpoolP384r1","brainpoolP384r1",NID_brainpoolP384r1,9,
+ &(lvalues[6070]),0},
+{"brainpoolP384t1","brainpoolP384t1",NID_brainpoolP384t1,9,
+ &(lvalues[6079]),0},
+{"brainpoolP512r1","brainpoolP512r1",NID_brainpoolP512r1,9,
+ &(lvalues[6088]),0},
+{"brainpoolP512t1","brainpoolP512t1",NID_brainpoolP512t1,9,
+ &(lvalues[6097]),0},
+{"PSPECIFIED","pSpecified",NID_pSpecified,9,&(lvalues[6106]),0},
+{"dhSinglePass-stdDH-sha1kdf-scheme",
+ "dhSinglePass-stdDH-sha1kdf-scheme",
+ NID_dhSinglePass_stdDH_sha1kdf_scheme,9,&(lvalues[6115]),0},
+{"dhSinglePass-stdDH-sha224kdf-scheme",
+ "dhSinglePass-stdDH-sha224kdf-scheme",
+ NID_dhSinglePass_stdDH_sha224kdf_scheme,6,&(lvalues[6124]),0},
+{"dhSinglePass-stdDH-sha256kdf-scheme",
+ "dhSinglePass-stdDH-sha256kdf-scheme",
+ NID_dhSinglePass_stdDH_sha256kdf_scheme,6,&(lvalues[6130]),0},
+{"dhSinglePass-stdDH-sha384kdf-scheme",
+ "dhSinglePass-stdDH-sha384kdf-scheme",
+ NID_dhSinglePass_stdDH_sha384kdf_scheme,6,&(lvalues[6136]),0},
+{"dhSinglePass-stdDH-sha512kdf-scheme",
+ "dhSinglePass-stdDH-sha512kdf-scheme",
+ NID_dhSinglePass_stdDH_sha512kdf_scheme,6,&(lvalues[6142]),0},
+{"dhSinglePass-cofactorDH-sha1kdf-scheme",
+ "dhSinglePass-cofactorDH-sha1kdf-scheme",
+ NID_dhSinglePass_cofactorDH_sha1kdf_scheme,9,&(lvalues[6148]),0},
+{"dhSinglePass-cofactorDH-sha224kdf-scheme",
+ "dhSinglePass-cofactorDH-sha224kdf-scheme",
+ NID_dhSinglePass_cofactorDH_sha224kdf_scheme,6,&(lvalues[6157]),0},
+{"dhSinglePass-cofactorDH-sha256kdf-scheme",
+ "dhSinglePass-cofactorDH-sha256kdf-scheme",
+ NID_dhSinglePass_cofactorDH_sha256kdf_scheme,6,&(lvalues[6163]),0},
+{"dhSinglePass-cofactorDH-sha384kdf-scheme",
+ "dhSinglePass-cofactorDH-sha384kdf-scheme",
+ NID_dhSinglePass_cofactorDH_sha384kdf_scheme,6,&(lvalues[6169]),0},
+{"dhSinglePass-cofactorDH-sha512kdf-scheme",
+ "dhSinglePass-cofactorDH-sha512kdf-scheme",
+ NID_dhSinglePass_cofactorDH_sha512kdf_scheme,6,&(lvalues[6175]),0},
+{"dh-std-kdf","dh-std-kdf",NID_dh_std_kdf,0,NULL,0},
+{"dh-cofactor-kdf","dh-cofactor-kdf",NID_dh_cofactor_kdf,0,NULL,0},
+{"AES-128-CBC-HMAC-SHA256","aes-128-cbc-hmac-sha256",
+ NID_aes_128_cbc_hmac_sha256,0,NULL,0},
+{"AES-192-CBC-HMAC-SHA256","aes-192-cbc-hmac-sha256",
+ NID_aes_192_cbc_hmac_sha256,0,NULL,0},
+{"AES-256-CBC-HMAC-SHA256","aes-256-cbc-hmac-sha256",
+ NID_aes_256_cbc_hmac_sha256,0,NULL,0},
+{"ct_precert_scts","CT Precertificate SCTs",NID_ct_precert_scts,10,
+ &(lvalues[6181]),0},
+{"ct_precert_poison","CT Precertificate Poison",NID_ct_precert_poison,
+ 10,&(lvalues[6191]),0},
+{"ct_precert_signer","CT Precertificate Signer",NID_ct_precert_signer,
+ 10,&(lvalues[6201]),0},
+{"ct_cert_scts","CT Certificate SCTs",NID_ct_cert_scts,10,
+ &(lvalues[6211]),0},
+{"jurisdictionL","jurisdictionLocalityName",
+ NID_jurisdictionLocalityName,11,&(lvalues[6221]),0},
+{"jurisdictionST","jurisdictionStateOrProvinceName",
+ NID_jurisdictionStateOrProvinceName,11,&(lvalues[6232]),0},
+{"jurisdictionC","jurisdictionCountryName",
+ NID_jurisdictionCountryName,11,&(lvalues[6243]),0},
};
static const unsigned int sn_objs[NUM_SN]={
364, /* "AD_DVCS" */
419, /* "AES-128-CBC" */
916, /* "AES-128-CBC-HMAC-SHA1" */
+948, /* "AES-128-CBC-HMAC-SHA256" */
421, /* "AES-128-CFB" */
650, /* "AES-128-CFB1" */
653, /* "AES-128-CFB8" */
@@ -2414,6 +2530,7 @@ static const unsigned int sn_objs[NUM_SN]={
913, /* "AES-128-XTS" */
423, /* "AES-192-CBC" */
917, /* "AES-192-CBC-HMAC-SHA1" */
+949, /* "AES-192-CBC-HMAC-SHA256" */
425, /* "AES-192-CFB" */
651, /* "AES-192-CFB1" */
654, /* "AES-192-CFB8" */
@@ -2422,6 +2539,7 @@ static const unsigned int sn_objs[NUM_SN]={
424, /* "AES-192-OFB" */
427, /* "AES-256-CBC" */
918, /* "AES-256-CBC-HMAC-SHA1" */
+950, /* "AES-256-CBC-HMAC-SHA256" */
429, /* "AES-256-CFB" */
652, /* "AES-256-CFB1" */
655, /* "AES-256-CFB8" */
@@ -2537,6 +2655,7 @@ static const unsigned int sn_objs[NUM_SN]={
69, /* "PBKDF2" */
162, /* "PBMAC1" */
127, /* "PKIX" */
+935, /* "PSPECIFIED" */
98, /* "RC2-40-CBC" */
166, /* "RC2-64-CBC" */
37, /* "RC2-CBC" */
@@ -2613,6 +2732,20 @@ static const unsigned int sn_objs[NUM_SN]={
87, /* "basicConstraints" */
365, /* "basicOCSPResponse" */
285, /* "biometricInfo" */
+921, /* "brainpoolP160r1" */
+922, /* "brainpoolP160t1" */
+923, /* "brainpoolP192r1" */
+924, /* "brainpoolP192t1" */
+925, /* "brainpoolP224r1" */
+926, /* "brainpoolP224t1" */
+927, /* "brainpoolP256r1" */
+928, /* "brainpoolP256t1" */
+929, /* "brainpoolP320r1" */
+930, /* "brainpoolP320t1" */
+931, /* "brainpoolP384r1" */
+932, /* "brainpoolP384t1" */
+933, /* "brainpoolP512r1" */
+934, /* "brainpoolP512t1" */
494, /* "buildingName" */
860, /* "businessCategory" */
691, /* "c2onb191v4" */
@@ -2658,6 +2791,10 @@ static const unsigned int sn_objs[NUM_SN]={
884, /* "crossCertificatePair" */
806, /* "cryptocom" */
805, /* "cryptopro" */
+954, /* "ct_cert_scts" */
+952, /* "ct_precert_poison" */
+951, /* "ct_precert_scts" */
+953, /* "ct_precert_signer" */
500, /* "dITRedirect" */
451, /* "dNSDomain" */
495, /* "dSAQuality" */
@@ -2667,7 +2804,20 @@ static const unsigned int sn_objs[NUM_SN]={
891, /* "deltaRevocationList" */
107, /* "description" */
871, /* "destinationIndicator" */
+947, /* "dh-cofactor-kdf" */
+946, /* "dh-std-kdf" */
28, /* "dhKeyAgreement" */
+941, /* "dhSinglePass-cofactorDH-sha1kdf-scheme" */
+942, /* "dhSinglePass-cofactorDH-sha224kdf-scheme" */
+943, /* "dhSinglePass-cofactorDH-sha256kdf-scheme" */
+944, /* "dhSinglePass-cofactorDH-sha384kdf-scheme" */
+945, /* "dhSinglePass-cofactorDH-sha512kdf-scheme" */
+936, /* "dhSinglePass-stdDH-sha1kdf-scheme" */
+937, /* "dhSinglePass-stdDH-sha224kdf-scheme" */
+938, /* "dhSinglePass-stdDH-sha256kdf-scheme" */
+939, /* "dhSinglePass-stdDH-sha384kdf-scheme" */
+940, /* "dhSinglePass-stdDH-sha512kdf-scheme" */
+920, /* "dhpublicnumber" */
382, /* "directory" */
887, /* "distinguishedName" */
892, /* "dmdName" */
@@ -2978,6 +3128,9 @@ static const unsigned int sn_objs[NUM_SN]={
86, /* "issuerAltName" */
770, /* "issuingDistributionPoint" */
492, /* "janetMailbox" */
+957, /* "jurisdictionC" */
+955, /* "jurisdictionL" */
+956, /* "jurisdictionST" */
150, /* "keyBag" */
83, /* "keyUsage" */
477, /* "lastModifiedBy" */
@@ -3328,6 +3481,10 @@ static const unsigned int ln_objs[NUM_LN]={
285, /* "Biometric Info" */
179, /* "CA Issuers" */
785, /* "CA Repository" */
+954, /* "CT Certificate SCTs" */
+952, /* "CT Precertificate Poison" */
+951, /* "CT Precertificate SCTs" */
+953, /* "CT Precertificate Signer" */
131, /* "Code Signing" */
783, /* "Diffie-Hellman based MAC" */
382, /* "Directory" */
@@ -3451,6 +3608,7 @@ static const unsigned int ln_objs[NUM_LN]={
85, /* "X509v3 Subject Alternative Name" */
769, /* "X509v3 Subject Directory Attributes" */
82, /* "X509v3 Subject Key Identifier" */
+920, /* "X9.42 DH" */
184, /* "X9.57" */
185, /* "X9.57 CM ?" */
478, /* "aRecord" */
@@ -3463,6 +3621,7 @@ static const unsigned int ln_objs[NUM_LN]={
606, /* "additional verification" */
419, /* "aes-128-cbc" */
916, /* "aes-128-cbc-hmac-sha1" */
+948, /* "aes-128-cbc-hmac-sha256" */
896, /* "aes-128-ccm" */
421, /* "aes-128-cfb" */
650, /* "aes-128-cfb1" */
@@ -3474,6 +3633,7 @@ static const unsigned int ln_objs[NUM_LN]={
913, /* "aes-128-xts" */
423, /* "aes-192-cbc" */
917, /* "aes-192-cbc-hmac-sha1" */
+949, /* "aes-192-cbc-hmac-sha256" */
899, /* "aes-192-ccm" */
425, /* "aes-192-cfb" */
651, /* "aes-192-cfb1" */
@@ -3484,6 +3644,7 @@ static const unsigned int ln_objs[NUM_LN]={
424, /* "aes-192-ofb" */
427, /* "aes-256-cbc" */
918, /* "aes-256-cbc-hmac-sha1" */
+950, /* "aes-256-cbc-hmac-sha256" */
902, /* "aes-256-ccm" */
429, /* "aes-256-cfb" */
652, /* "aes-256-cfb1" */
@@ -3502,6 +3663,20 @@ static const unsigned int ln_objs[NUM_LN]={
93, /* "bf-cfb" */
92, /* "bf-ecb" */
94, /* "bf-ofb" */
+921, /* "brainpoolP160r1" */
+922, /* "brainpoolP160t1" */
+923, /* "brainpoolP192r1" */
+924, /* "brainpoolP192t1" */
+925, /* "brainpoolP224r1" */
+926, /* "brainpoolP224t1" */
+927, /* "brainpoolP256r1" */
+928, /* "brainpoolP256t1" */
+929, /* "brainpoolP320r1" */
+930, /* "brainpoolP320t1" */
+931, /* "brainpoolP384r1" */
+932, /* "brainpoolP384t1" */
+933, /* "brainpoolP512r1" */
+934, /* "brainpoolP512t1" */
494, /* "buildingName" */
860, /* "businessCategory" */
691, /* "c2onb191v4" */
@@ -3593,7 +3768,19 @@ static const unsigned int ln_objs[NUM_LN]={
107, /* "description" */
871, /* "destinationIndicator" */
80, /* "desx-cbc" */
+947, /* "dh-cofactor-kdf" */
+946, /* "dh-std-kdf" */
28, /* "dhKeyAgreement" */
+941, /* "dhSinglePass-cofactorDH-sha1kdf-scheme" */
+942, /* "dhSinglePass-cofactorDH-sha224kdf-scheme" */
+943, /* "dhSinglePass-cofactorDH-sha256kdf-scheme" */
+944, /* "dhSinglePass-cofactorDH-sha384kdf-scheme" */
+945, /* "dhSinglePass-cofactorDH-sha512kdf-scheme" */
+936, /* "dhSinglePass-stdDH-sha1kdf-scheme" */
+937, /* "dhSinglePass-stdDH-sha224kdf-scheme" */
+938, /* "dhSinglePass-stdDH-sha256kdf-scheme" */
+939, /* "dhSinglePass-stdDH-sha384kdf-scheme" */
+940, /* "dhSinglePass-stdDH-sha512kdf-scheme" */
11, /* "directory services (X.500)" */
378, /* "directory services - algorithms" */
887, /* "distinguishedName" */
@@ -3881,6 +4068,9 @@ static const unsigned int ln_objs[NUM_LN]={
645, /* "itu-t" */
492, /* "janetMailbox" */
646, /* "joint-iso-itu-t" */
+957, /* "jurisdictionCountryName" */
+955, /* "jurisdictionLocalityName" */
+956, /* "jurisdictionStateOrProvinceName" */
150, /* "keyBag" */
773, /* "kisa" */
477, /* "lastModifiedBy" */
@@ -3917,6 +4107,7 @@ static const unsigned int ln_objs[NUM_LN]={
18, /* "organizationalUnitName" */
475, /* "otherMailbox" */
876, /* "owner" */
+935, /* "pSpecified" */
489, /* "pagerTelephoneNumber" */
782, /* "password based MAC" */
374, /* "path" */
@@ -4560,6 +4751,14 @@ static const unsigned int obj_objs[NUM_OBJ]={
505, /* OBJ_mime_mhs_headings 1 3 6 1 7 1 1 */
506, /* OBJ_mime_mhs_bodies 1 3 6 1 7 1 2 */
119, /* OBJ_ripemd160WithRSA 1 3 36 3 3 1 2 */
+937, /* OBJ_dhSinglePass_stdDH_sha224kdf_scheme 1 3 132 1 11 0 */
+938, /* OBJ_dhSinglePass_stdDH_sha256kdf_scheme 1 3 132 1 11 1 */
+939, /* OBJ_dhSinglePass_stdDH_sha384kdf_scheme 1 3 132 1 11 2 */
+940, /* OBJ_dhSinglePass_stdDH_sha512kdf_scheme 1 3 132 1 11 3 */
+942, /* OBJ_dhSinglePass_cofactorDH_sha224kdf_scheme 1 3 132 1 14 0 */
+943, /* OBJ_dhSinglePass_cofactorDH_sha256kdf_scheme 1 3 132 1 14 1 */
+944, /* OBJ_dhSinglePass_cofactorDH_sha384kdf_scheme 1 3 132 1 14 2 */
+945, /* OBJ_dhSinglePass_cofactorDH_sha512kdf_scheme 1 3 132 1 14 3 */
631, /* OBJ_setAttr_GenCryptgrm 2 23 42 3 3 3 1 */
632, /* OBJ_setAttr_T2Enc 2 23 42 3 3 4 1 */
633, /* OBJ_setAttr_T2cleartxt 2 23 42 3 3 4 2 */
@@ -4608,6 +4807,7 @@ static const unsigned int obj_objs[NUM_OBJ]={
416, /* OBJ_ecdsa_with_SHA1 1 2 840 10045 4 1 */
791, /* OBJ_ecdsa_with_Recommended 1 2 840 10045 4 2 */
792, /* OBJ_ecdsa_with_Specified 1 2 840 10045 4 3 */
+920, /* OBJ_dhpublicnumber 1 2 840 10046 2 1 */
258, /* OBJ_id_pkix_mod 1 3 6 1 5 5 7 0 */
175, /* OBJ_id_pe 1 3 6 1 5 5 7 1 */
259, /* OBJ_id_qt 1 3 6 1 5 5 7 2 */
@@ -4825,6 +5025,7 @@ static const unsigned int obj_objs[NUM_OBJ]={
644, /* OBJ_rsaOAEPEncryptionSET 1 2 840 113549 1 1 6 */
919, /* OBJ_rsaesOaep 1 2 840 113549 1 1 7 */
911, /* OBJ_mgf1 1 2 840 113549 1 1 8 */
+935, /* OBJ_pSpecified 1 2 840 113549 1 1 9 */
912, /* OBJ_rsassaPss 1 2 840 113549 1 1 10 */
668, /* OBJ_sha256WithRSAEncryption 1 2 840 113549 1 1 11 */
669, /* OBJ_sha384WithRSAEncryption 1 2 840 113549 1 1 12 */
@@ -4886,6 +5087,22 @@ static const unsigned int obj_objs[NUM_OBJ]={
373, /* OBJ_id_pkix_OCSP_valid 1 3 6 1 5 5 7 48 1 9 */
374, /* OBJ_id_pkix_OCSP_path 1 3 6 1 5 5 7 48 1 10 */
375, /* OBJ_id_pkix_OCSP_trustRoot 1 3 6 1 5 5 7 48 1 11 */
+921, /* OBJ_brainpoolP160r1 1 3 36 3 3 2 8 1 1 1 */
+922, /* OBJ_brainpoolP160t1 1 3 36 3 3 2 8 1 1 2 */
+923, /* OBJ_brainpoolP192r1 1 3 36 3 3 2 8 1 1 3 */
+924, /* OBJ_brainpoolP192t1 1 3 36 3 3 2 8 1 1 4 */
+925, /* OBJ_brainpoolP224r1 1 3 36 3 3 2 8 1 1 5 */
+926, /* OBJ_brainpoolP224t1 1 3 36 3 3 2 8 1 1 6 */
+927, /* OBJ_brainpoolP256r1 1 3 36 3 3 2 8 1 1 7 */
+928, /* OBJ_brainpoolP256t1 1 3 36 3 3 2 8 1 1 8 */
+929, /* OBJ_brainpoolP320r1 1 3 36 3 3 2 8 1 1 9 */
+930, /* OBJ_brainpoolP320t1 1 3 36 3 3 2 8 1 1 10 */
+931, /* OBJ_brainpoolP384r1 1 3 36 3 3 2 8 1 1 11 */
+932, /* OBJ_brainpoolP384t1 1 3 36 3 3 2 8 1 1 12 */
+933, /* OBJ_brainpoolP512r1 1 3 36 3 3 2 8 1 1 13 */
+934, /* OBJ_brainpoolP512t1 1 3 36 3 3 2 8 1 1 14 */
+936, /* OBJ_dhSinglePass_stdDH_sha1kdf_scheme 1 3 133 16 840 63 0 2 */
+941, /* OBJ_dhSinglePass_cofactorDH_sha1kdf_scheme 1 3 133 16 840 63 0 3 */
418, /* OBJ_aes_128_ecb 2 16 840 1 101 3 4 1 1 */
419, /* OBJ_aes_128_cbc 2 16 840 1 101 3 4 1 2 */
420, /* OBJ_aes_128_ofb128 2 16 840 1 101 3 4 1 3 */
@@ -5013,6 +5230,10 @@ static const unsigned int obj_objs[NUM_OBJ]={
138, /* OBJ_ms_efs 1 3 6 1 4 1 311 10 3 4 */
648, /* OBJ_ms_smartcard_login 1 3 6 1 4 1 311 20 2 2 */
649, /* OBJ_ms_upn 1 3 6 1 4 1 311 20 2 3 */
+951, /* OBJ_ct_precert_scts 1 3 6 1 4 1 11129 2 4 2 */
+952, /* OBJ_ct_precert_poison 1 3 6 1 4 1 11129 2 4 3 */
+953, /* OBJ_ct_precert_signer 1 3 6 1 4 1 11129 2 4 4 */
+954, /* OBJ_ct_cert_scts 1 3 6 1 4 1 11129 2 4 5 */
751, /* OBJ_camellia_128_cbc 1 2 392 200011 61 1 1 1 2 */
752, /* OBJ_camellia_192_cbc 1 2 392 200011 61 1 1 1 3 */
753, /* OBJ_camellia_256_cbc 1 2 392 200011 61 1 1 1 4 */
@@ -5091,5 +5312,8 @@ static const unsigned int obj_objs[NUM_OBJ]={
154, /* OBJ_secretBag 1 2 840 113549 1 12 10 1 5 */
155, /* OBJ_safeContentsBag 1 2 840 113549 1 12 10 1 6 */
34, /* OBJ_idea_cbc 1 3 6 1 4 1 188 7 1 1 2 */
+955, /* OBJ_jurisdictionLocalityName 1 3 6 1 4 1 311 60 2 1 1 */
+956, /* OBJ_jurisdictionStateOrProvinceName 1 3 6 1 4 1 311 60 2 1 2 */
+957, /* OBJ_jurisdictionCountryName 1 3 6 1 4 1 311 60 2 1 3 */
};
diff --git a/crypto/openssl/crypto/objects/obj_mac.h b/crypto/openssl/crypto/objects/obj_mac.h
index f752aef..779c309 100644
--- a/crypto/openssl/crypto/objects/obj_mac.h
+++ b/crypto/openssl/crypto/objects/obj_mac.h
@@ -590,6 +590,11 @@
#define NID_mgf1 911
#define OBJ_mgf1 OBJ_pkcs1,8L
+#define SN_pSpecified "PSPECIFIED"
+#define LN_pSpecified "pSpecified"
+#define NID_pSpecified 935
+#define OBJ_pSpecified OBJ_pkcs1,9L
+
#define SN_rsassaPss "RSASSA-PSS"
#define LN_rsassaPss "rsassaPss"
#define NID_rsassaPss 912
@@ -4029,3 +4034,161 @@
#define SN_aes_256_cbc_hmac_sha1 "AES-256-CBC-HMAC-SHA1"
#define LN_aes_256_cbc_hmac_sha1 "aes-256-cbc-hmac-sha1"
#define NID_aes_256_cbc_hmac_sha1 918
+
+#define SN_aes_128_cbc_hmac_sha256 "AES-128-CBC-HMAC-SHA256"
+#define LN_aes_128_cbc_hmac_sha256 "aes-128-cbc-hmac-sha256"
+#define NID_aes_128_cbc_hmac_sha256 948
+
+#define SN_aes_192_cbc_hmac_sha256 "AES-192-CBC-HMAC-SHA256"
+#define LN_aes_192_cbc_hmac_sha256 "aes-192-cbc-hmac-sha256"
+#define NID_aes_192_cbc_hmac_sha256 949
+
+#define SN_aes_256_cbc_hmac_sha256 "AES-256-CBC-HMAC-SHA256"
+#define LN_aes_256_cbc_hmac_sha256 "aes-256-cbc-hmac-sha256"
+#define NID_aes_256_cbc_hmac_sha256 950
+
+#define SN_dhpublicnumber "dhpublicnumber"
+#define LN_dhpublicnumber "X9.42 DH"
+#define NID_dhpublicnumber 920
+#define OBJ_dhpublicnumber OBJ_ISO_US,10046L,2L,1L
+
+#define SN_brainpoolP160r1 "brainpoolP160r1"
+#define NID_brainpoolP160r1 921
+#define OBJ_brainpoolP160r1 1L,3L,36L,3L,3L,2L,8L,1L,1L,1L
+
+#define SN_brainpoolP160t1 "brainpoolP160t1"
+#define NID_brainpoolP160t1 922
+#define OBJ_brainpoolP160t1 1L,3L,36L,3L,3L,2L,8L,1L,1L,2L
+
+#define SN_brainpoolP192r1 "brainpoolP192r1"
+#define NID_brainpoolP192r1 923
+#define OBJ_brainpoolP192r1 1L,3L,36L,3L,3L,2L,8L,1L,1L,3L
+
+#define SN_brainpoolP192t1 "brainpoolP192t1"
+#define NID_brainpoolP192t1 924
+#define OBJ_brainpoolP192t1 1L,3L,36L,3L,3L,2L,8L,1L,1L,4L
+
+#define SN_brainpoolP224r1 "brainpoolP224r1"
+#define NID_brainpoolP224r1 925
+#define OBJ_brainpoolP224r1 1L,3L,36L,3L,3L,2L,8L,1L,1L,5L
+
+#define SN_brainpoolP224t1 "brainpoolP224t1"
+#define NID_brainpoolP224t1 926
+#define OBJ_brainpoolP224t1 1L,3L,36L,3L,3L,2L,8L,1L,1L,6L
+
+#define SN_brainpoolP256r1 "brainpoolP256r1"
+#define NID_brainpoolP256r1 927
+#define OBJ_brainpoolP256r1 1L,3L,36L,3L,3L,2L,8L,1L,1L,7L
+
+#define SN_brainpoolP256t1 "brainpoolP256t1"
+#define NID_brainpoolP256t1 928
+#define OBJ_brainpoolP256t1 1L,3L,36L,3L,3L,2L,8L,1L,1L,8L
+
+#define SN_brainpoolP320r1 "brainpoolP320r1"
+#define NID_brainpoolP320r1 929
+#define OBJ_brainpoolP320r1 1L,3L,36L,3L,3L,2L,8L,1L,1L,9L
+
+#define SN_brainpoolP320t1 "brainpoolP320t1"
+#define NID_brainpoolP320t1 930
+#define OBJ_brainpoolP320t1 1L,3L,36L,3L,3L,2L,8L,1L,1L,10L
+
+#define SN_brainpoolP384r1 "brainpoolP384r1"
+#define NID_brainpoolP384r1 931
+#define OBJ_brainpoolP384r1 1L,3L,36L,3L,3L,2L,8L,1L,1L,11L
+
+#define SN_brainpoolP384t1 "brainpoolP384t1"
+#define NID_brainpoolP384t1 932
+#define OBJ_brainpoolP384t1 1L,3L,36L,3L,3L,2L,8L,1L,1L,12L
+
+#define SN_brainpoolP512r1 "brainpoolP512r1"
+#define NID_brainpoolP512r1 933
+#define OBJ_brainpoolP512r1 1L,3L,36L,3L,3L,2L,8L,1L,1L,13L
+
+#define SN_brainpoolP512t1 "brainpoolP512t1"
+#define NID_brainpoolP512t1 934
+#define OBJ_brainpoolP512t1 1L,3L,36L,3L,3L,2L,8L,1L,1L,14L
+
+#define OBJ_x9_63_scheme 1L,3L,133L,16L,840L,63L,0L
+
+#define OBJ_secg_scheme OBJ_certicom_arc,1L
+
+#define SN_dhSinglePass_stdDH_sha1kdf_scheme "dhSinglePass-stdDH-sha1kdf-scheme"
+#define NID_dhSinglePass_stdDH_sha1kdf_scheme 936
+#define OBJ_dhSinglePass_stdDH_sha1kdf_scheme OBJ_x9_63_scheme,2L
+
+#define SN_dhSinglePass_stdDH_sha224kdf_scheme "dhSinglePass-stdDH-sha224kdf-scheme"
+#define NID_dhSinglePass_stdDH_sha224kdf_scheme 937
+#define OBJ_dhSinglePass_stdDH_sha224kdf_scheme OBJ_secg_scheme,11L,0L
+
+#define SN_dhSinglePass_stdDH_sha256kdf_scheme "dhSinglePass-stdDH-sha256kdf-scheme"
+#define NID_dhSinglePass_stdDH_sha256kdf_scheme 938
+#define OBJ_dhSinglePass_stdDH_sha256kdf_scheme OBJ_secg_scheme,11L,1L
+
+#define SN_dhSinglePass_stdDH_sha384kdf_scheme "dhSinglePass-stdDH-sha384kdf-scheme"
+#define NID_dhSinglePass_stdDH_sha384kdf_scheme 939
+#define OBJ_dhSinglePass_stdDH_sha384kdf_scheme OBJ_secg_scheme,11L,2L
+
+#define SN_dhSinglePass_stdDH_sha512kdf_scheme "dhSinglePass-stdDH-sha512kdf-scheme"
+#define NID_dhSinglePass_stdDH_sha512kdf_scheme 940
+#define OBJ_dhSinglePass_stdDH_sha512kdf_scheme OBJ_secg_scheme,11L,3L
+
+#define SN_dhSinglePass_cofactorDH_sha1kdf_scheme "dhSinglePass-cofactorDH-sha1kdf-scheme"
+#define NID_dhSinglePass_cofactorDH_sha1kdf_scheme 941
+#define OBJ_dhSinglePass_cofactorDH_sha1kdf_scheme OBJ_x9_63_scheme,3L
+
+#define SN_dhSinglePass_cofactorDH_sha224kdf_scheme "dhSinglePass-cofactorDH-sha224kdf-scheme"
+#define NID_dhSinglePass_cofactorDH_sha224kdf_scheme 942
+#define OBJ_dhSinglePass_cofactorDH_sha224kdf_scheme OBJ_secg_scheme,14L,0L
+
+#define SN_dhSinglePass_cofactorDH_sha256kdf_scheme "dhSinglePass-cofactorDH-sha256kdf-scheme"
+#define NID_dhSinglePass_cofactorDH_sha256kdf_scheme 943
+#define OBJ_dhSinglePass_cofactorDH_sha256kdf_scheme OBJ_secg_scheme,14L,1L
+
+#define SN_dhSinglePass_cofactorDH_sha384kdf_scheme "dhSinglePass-cofactorDH-sha384kdf-scheme"
+#define NID_dhSinglePass_cofactorDH_sha384kdf_scheme 944
+#define OBJ_dhSinglePass_cofactorDH_sha384kdf_scheme OBJ_secg_scheme,14L,2L
+
+#define SN_dhSinglePass_cofactorDH_sha512kdf_scheme "dhSinglePass-cofactorDH-sha512kdf-scheme"
+#define NID_dhSinglePass_cofactorDH_sha512kdf_scheme 945
+#define OBJ_dhSinglePass_cofactorDH_sha512kdf_scheme OBJ_secg_scheme,14L,3L
+
+#define SN_dh_std_kdf "dh-std-kdf"
+#define NID_dh_std_kdf 946
+
+#define SN_dh_cofactor_kdf "dh-cofactor-kdf"
+#define NID_dh_cofactor_kdf 947
+
+#define SN_ct_precert_scts "ct_precert_scts"
+#define LN_ct_precert_scts "CT Precertificate SCTs"
+#define NID_ct_precert_scts 951
+#define OBJ_ct_precert_scts 1L,3L,6L,1L,4L,1L,11129L,2L,4L,2L
+
+#define SN_ct_precert_poison "ct_precert_poison"
+#define LN_ct_precert_poison "CT Precertificate Poison"
+#define NID_ct_precert_poison 952
+#define OBJ_ct_precert_poison 1L,3L,6L,1L,4L,1L,11129L,2L,4L,3L
+
+#define SN_ct_precert_signer "ct_precert_signer"
+#define LN_ct_precert_signer "CT Precertificate Signer"
+#define NID_ct_precert_signer 953
+#define OBJ_ct_precert_signer 1L,3L,6L,1L,4L,1L,11129L,2L,4L,4L
+
+#define SN_ct_cert_scts "ct_cert_scts"
+#define LN_ct_cert_scts "CT Certificate SCTs"
+#define NID_ct_cert_scts 954
+#define OBJ_ct_cert_scts 1L,3L,6L,1L,4L,1L,11129L,2L,4L,5L
+
+#define SN_jurisdictionLocalityName "jurisdictionL"
+#define LN_jurisdictionLocalityName "jurisdictionLocalityName"
+#define NID_jurisdictionLocalityName 955
+#define OBJ_jurisdictionLocalityName 1L,3L,6L,1L,4L,1L,311L,60L,2L,1L,1L
+
+#define SN_jurisdictionStateOrProvinceName "jurisdictionST"
+#define LN_jurisdictionStateOrProvinceName "jurisdictionStateOrProvinceName"
+#define NID_jurisdictionStateOrProvinceName 956
+#define OBJ_jurisdictionStateOrProvinceName 1L,3L,6L,1L,4L,1L,311L,60L,2L,1L,2L
+
+#define SN_jurisdictionCountryName "jurisdictionC"
+#define LN_jurisdictionCountryName "jurisdictionCountryName"
+#define NID_jurisdictionCountryName 957
+#define OBJ_jurisdictionCountryName 1L,3L,6L,1L,4L,1L,311L,60L,2L,1L,3L
diff --git a/crypto/openssl/crypto/objects/obj_mac.num b/crypto/openssl/crypto/objects/obj_mac.num
index 1d0a7c8..8e5ea83 100644
--- a/crypto/openssl/crypto/objects/obj_mac.num
+++ b/crypto/openssl/crypto/objects/obj_mac.num
@@ -917,3 +917,41 @@ aes_128_cbc_hmac_sha1 916
aes_192_cbc_hmac_sha1 917
aes_256_cbc_hmac_sha1 918
rsaesOaep 919
+dhpublicnumber 920
+brainpoolP160r1 921
+brainpoolP160t1 922
+brainpoolP192r1 923
+brainpoolP192t1 924
+brainpoolP224r1 925
+brainpoolP224t1 926
+brainpoolP256r1 927
+brainpoolP256t1 928
+brainpoolP320r1 929
+brainpoolP320t1 930
+brainpoolP384r1 931
+brainpoolP384t1 932
+brainpoolP512r1 933
+brainpoolP512t1 934
+pSpecified 935
+dhSinglePass_stdDH_sha1kdf_scheme 936
+dhSinglePass_stdDH_sha224kdf_scheme 937
+dhSinglePass_stdDH_sha256kdf_scheme 938
+dhSinglePass_stdDH_sha384kdf_scheme 939
+dhSinglePass_stdDH_sha512kdf_scheme 940
+dhSinglePass_cofactorDH_sha1kdf_scheme 941
+dhSinglePass_cofactorDH_sha224kdf_scheme 942
+dhSinglePass_cofactorDH_sha256kdf_scheme 943
+dhSinglePass_cofactorDH_sha384kdf_scheme 944
+dhSinglePass_cofactorDH_sha512kdf_scheme 945
+dh_std_kdf 946
+dh_cofactor_kdf 947
+aes_128_cbc_hmac_sha256 948
+aes_192_cbc_hmac_sha256 949
+aes_256_cbc_hmac_sha256 950
+ct_precert_scts 951
+ct_precert_poison 952
+ct_precert_signer 953
+ct_cert_scts 954
+jurisdictionLocalityName 955
+jurisdictionStateOrProvinceName 956
+jurisdictionCountryName 957
diff --git a/crypto/openssl/crypto/objects/obj_xref.h b/crypto/openssl/crypto/objects/obj_xref.h
index b8f7d34..e453e99 100644
--- a/crypto/openssl/crypto/objects/obj_xref.h
+++ b/crypto/openssl/crypto/objects/obj_xref.h
@@ -41,6 +41,21 @@ static const nid_triple sigoid_srt[] = {
{NID_id_GostR3411_94_with_GostR3410_2001_cc, NID_id_GostR3411_94,
NID_id_GostR3410_2001_cc},
{NID_rsassaPss, NID_undef, NID_rsaEncryption},
+ {NID_dhSinglePass_stdDH_sha1kdf_scheme, NID_sha1, NID_dh_std_kdf},
+ {NID_dhSinglePass_stdDH_sha224kdf_scheme, NID_sha224, NID_dh_std_kdf},
+ {NID_dhSinglePass_stdDH_sha256kdf_scheme, NID_sha256, NID_dh_std_kdf},
+ {NID_dhSinglePass_stdDH_sha384kdf_scheme, NID_sha384, NID_dh_std_kdf},
+ {NID_dhSinglePass_stdDH_sha512kdf_scheme, NID_sha512, NID_dh_std_kdf},
+ {NID_dhSinglePass_cofactorDH_sha1kdf_scheme, NID_sha1,
+ NID_dh_cofactor_kdf},
+ {NID_dhSinglePass_cofactorDH_sha224kdf_scheme, NID_sha224,
+ NID_dh_cofactor_kdf},
+ {NID_dhSinglePass_cofactorDH_sha256kdf_scheme, NID_sha256,
+ NID_dh_cofactor_kdf},
+ {NID_dhSinglePass_cofactorDH_sha384kdf_scheme, NID_sha384,
+ NID_dh_cofactor_kdf},
+ {NID_dhSinglePass_cofactorDH_sha512kdf_scheme, NID_sha512,
+ NID_dh_cofactor_kdf},
};
static const nid_triple *const sigoid_srt_xref[] = {
@@ -54,19 +69,29 @@ static const nid_triple *const sigoid_srt_xref[] = {
&sigoid_srt[5],
&sigoid_srt[8],
&sigoid_srt[12],
+ &sigoid_srt[30],
+ &sigoid_srt[35],
&sigoid_srt[6],
&sigoid_srt[10],
&sigoid_srt[11],
&sigoid_srt[13],
&sigoid_srt[24],
&sigoid_srt[20],
+ &sigoid_srt[32],
+ &sigoid_srt[37],
&sigoid_srt[14],
&sigoid_srt[21],
+ &sigoid_srt[33],
+ &sigoid_srt[38],
&sigoid_srt[15],
&sigoid_srt[22],
+ &sigoid_srt[34],
+ &sigoid_srt[39],
&sigoid_srt[16],
&sigoid_srt[23],
&sigoid_srt[19],
+ &sigoid_srt[31],
+ &sigoid_srt[36],
&sigoid_srt[25],
&sigoid_srt[26],
&sigoid_srt[27],
diff --git a/crypto/openssl/crypto/objects/obj_xref.txt b/crypto/openssl/crypto/objects/obj_xref.txt
index cb91718..19c9422 100644
--- a/crypto/openssl/crypto/objects/obj_xref.txt
+++ b/crypto/openssl/crypto/objects/obj_xref.txt
@@ -44,3 +44,15 @@ id_GostR3411_94_with_GostR3410_2001 id_GostR3411_94 id_GostR3410_2001
id_GostR3411_94_with_GostR3410_94 id_GostR3411_94 id_GostR3410_94
id_GostR3411_94_with_GostR3410_94_cc id_GostR3411_94 id_GostR3410_94_cc
id_GostR3411_94_with_GostR3410_2001_cc id_GostR3411_94 id_GostR3410_2001_cc
+# ECDH KDFs and their corresponding message digests and schemes
+dhSinglePass_stdDH_sha1kdf_scheme sha1 dh_std_kdf
+dhSinglePass_stdDH_sha224kdf_scheme sha224 dh_std_kdf
+dhSinglePass_stdDH_sha256kdf_scheme sha256 dh_std_kdf
+dhSinglePass_stdDH_sha384kdf_scheme sha384 dh_std_kdf
+dhSinglePass_stdDH_sha512kdf_scheme sha512 dh_std_kdf
+
+dhSinglePass_cofactorDH_sha1kdf_scheme sha1 dh_cofactor_kdf
+dhSinglePass_cofactorDH_sha224kdf_scheme sha224 dh_cofactor_kdf
+dhSinglePass_cofactorDH_sha256kdf_scheme sha256 dh_cofactor_kdf
+dhSinglePass_cofactorDH_sha384kdf_scheme sha384 dh_cofactor_kdf
+dhSinglePass_cofactorDH_sha512kdf_scheme sha512 dh_cofactor_kdf
diff --git a/crypto/openssl/crypto/objects/objects.txt b/crypto/openssl/crypto/objects/objects.txt
index d3bfad7..b57aabb 100644
--- a/crypto/openssl/crypto/objects/objects.txt
+++ b/crypto/openssl/crypto/objects/objects.txt
@@ -168,6 +168,7 @@ pkcs1 5 : RSA-SHA1 : sha1WithRSAEncryption
# According to PKCS #1 version 2.1
pkcs1 7 : RSAES-OAEP : rsaesOaep
pkcs1 8 : MGF1 : mgf1
+pkcs1 9 : PSPECIFIED : pSpecified
pkcs1 10 : RSASSA-PSS : rsassaPss
pkcs1 11 : RSA-SHA256 : sha256WithRSAEncryption
@@ -1290,3 +1291,60 @@ kisa 1 6 : SEED-OFB : seed-ofb
: AES-128-CBC-HMAC-SHA1 : aes-128-cbc-hmac-sha1
: AES-192-CBC-HMAC-SHA1 : aes-192-cbc-hmac-sha1
: AES-256-CBC-HMAC-SHA1 : aes-256-cbc-hmac-sha1
+ : AES-128-CBC-HMAC-SHA256 : aes-128-cbc-hmac-sha256
+ : AES-192-CBC-HMAC-SHA256 : aes-192-cbc-hmac-sha256
+ : AES-256-CBC-HMAC-SHA256 : aes-256-cbc-hmac-sha256
+
+ISO-US 10046 2 1 : dhpublicnumber : X9.42 DH
+
+# RFC 5639 curve OIDs (see http://www.ietf.org/rfc/rfc5639.txt)
+# versionOne OBJECT IDENTIFIER ::= {
+# iso(1) identifified-organization(3) teletrust(36) algorithm(3)
+# signature-algorithm(3) ecSign(2) ecStdCurvesAndGeneration(8)
+# ellipticCurve(1) 1 }
+1 3 36 3 3 2 8 1 1 1 : brainpoolP160r1
+1 3 36 3 3 2 8 1 1 2 : brainpoolP160t1
+1 3 36 3 3 2 8 1 1 3 : brainpoolP192r1
+1 3 36 3 3 2 8 1 1 4 : brainpoolP192t1
+1 3 36 3 3 2 8 1 1 5 : brainpoolP224r1
+1 3 36 3 3 2 8 1 1 6 : brainpoolP224t1
+1 3 36 3 3 2 8 1 1 7 : brainpoolP256r1
+1 3 36 3 3 2 8 1 1 8 : brainpoolP256t1
+1 3 36 3 3 2 8 1 1 9 : brainpoolP320r1
+1 3 36 3 3 2 8 1 1 10 : brainpoolP320t1
+1 3 36 3 3 2 8 1 1 11 : brainpoolP384r1
+1 3 36 3 3 2 8 1 1 12 : brainpoolP384t1
+1 3 36 3 3 2 8 1 1 13 : brainpoolP512r1
+1 3 36 3 3 2 8 1 1 14 : brainpoolP512t1
+
+# ECDH schemes from RFC5753
+!Alias x9-63-scheme 1 3 133 16 840 63 0
+!Alias secg-scheme certicom-arc 1
+
+x9-63-scheme 2 : dhSinglePass-stdDH-sha1kdf-scheme
+secg-scheme 11 0 : dhSinglePass-stdDH-sha224kdf-scheme
+secg-scheme 11 1 : dhSinglePass-stdDH-sha256kdf-scheme
+secg-scheme 11 2 : dhSinglePass-stdDH-sha384kdf-scheme
+secg-scheme 11 3 : dhSinglePass-stdDH-sha512kdf-scheme
+
+x9-63-scheme 3 : dhSinglePass-cofactorDH-sha1kdf-scheme
+secg-scheme 14 0 : dhSinglePass-cofactorDH-sha224kdf-scheme
+secg-scheme 14 1 : dhSinglePass-cofactorDH-sha256kdf-scheme
+secg-scheme 14 2 : dhSinglePass-cofactorDH-sha384kdf-scheme
+secg-scheme 14 3 : dhSinglePass-cofactorDH-sha512kdf-scheme
+# NIDs for use with lookup tables.
+ : dh-std-kdf
+ : dh-cofactor-kdf
+
+# RFC 6962 Extension OIDs (see http://www.ietf.org/rfc/rfc6962.txt)
+1 3 6 1 4 1 11129 2 4 2 : ct_precert_scts : CT Precertificate SCTs
+1 3 6 1 4 1 11129 2 4 3 : ct_precert_poison : CT Precertificate Poison
+1 3 6 1 4 1 11129 2 4 4 : ct_precert_signer : CT Precertificate Signer
+1 3 6 1 4 1 11129 2 4 5 : ct_cert_scts : CT Certificate SCTs
+
+# CABForum EV SSL Certificate Guidelines
+# (see https://cabforum.org/extended-validation/)
+# OIDs for Subject Jurisdiction of Incorporation or Registration
+1 3 6 1 4 1 311 60 2 1 1 : jurisdictionL : jurisdictionLocalityName
+1 3 6 1 4 1 311 60 2 1 2 : jurisdictionST : jurisdictionStateOrProvinceName
+1 3 6 1 4 1 311 60 2 1 3 : jurisdictionC : jurisdictionCountryName
diff --git a/crypto/openssl/crypto/objects/objxref.pl b/crypto/openssl/crypto/objects/objxref.pl
index 35c0651..1913b9d 100755
--- a/crypto/openssl/crypto/objects/objxref.pl
+++ b/crypto/openssl/crypto/objects/objxref.pl
@@ -39,7 +39,8 @@ my @xrkeys = keys %xref_tbl;
my @srt1 = sort { $oid_tbl{$a} <=> $oid_tbl{$b}} @xrkeys;
-for(my $i = 0; $i <= $#srt1; $i++)
+my $i;
+for($i = 0; $i <= $#srt1; $i++)
{
$xref_tbl{$srt1[$i]}[2] = $i;
}
diff --git a/crypto/openssl/crypto/ocsp/ocsp.h b/crypto/openssl/crypto/ocsp/ocsp.h
index 25ef019..ca2ee76d 100644
--- a/crypto/openssl/crypto/ocsp/ocsp.h
+++ b/crypto/openssl/crypto/ocsp/ocsp.h
@@ -394,11 +394,22 @@ typedef struct ocsp_service_locator_st {
OCSP_CERTID *OCSP_CERTID_dup(OCSP_CERTID *id);
-OCSP_RESPONSE *OCSP_sendreq_bio(BIO *b, char *path, OCSP_REQUEST *req);
-OCSP_REQ_CTX *OCSP_sendreq_new(BIO *io, char *path, OCSP_REQUEST *req,
+OCSP_RESPONSE *OCSP_sendreq_bio(BIO *b, const char *path, OCSP_REQUEST *req);
+OCSP_REQ_CTX *OCSP_sendreq_new(BIO *io, const char *path, OCSP_REQUEST *req,
int maxline);
+int OCSP_REQ_CTX_nbio(OCSP_REQ_CTX *rctx);
int OCSP_sendreq_nbio(OCSP_RESPONSE **presp, OCSP_REQ_CTX *rctx);
+OCSP_REQ_CTX *OCSP_REQ_CTX_new(BIO *io, int maxline);
void OCSP_REQ_CTX_free(OCSP_REQ_CTX *rctx);
+void OCSP_set_max_response_length(OCSP_REQ_CTX *rctx, unsigned long len);
+int OCSP_REQ_CTX_i2d(OCSP_REQ_CTX *rctx, const ASN1_ITEM *it,
+ ASN1_VALUE *val);
+int OCSP_REQ_CTX_nbio_d2i(OCSP_REQ_CTX *rctx, ASN1_VALUE **pval,
+ const ASN1_ITEM *it);
+BIO *OCSP_REQ_CTX_get0_mem_bio(OCSP_REQ_CTX *rctx);
+int OCSP_REQ_CTX_i2d(OCSP_REQ_CTX *rctx, const ASN1_ITEM *it,
+ ASN1_VALUE *val);
+int OCSP_REQ_CTX_http(OCSP_REQ_CTX *rctx, const char *op, const char *path);
int OCSP_REQ_CTX_set1_req(OCSP_REQ_CTX *rctx, OCSP_REQUEST *req);
int OCSP_REQ_CTX_add1_header(OCSP_REQ_CTX *rctx,
const char *name, const char *value);
@@ -447,7 +458,7 @@ int OCSP_check_validity(ASN1_GENERALIZEDTIME *thisupd,
int OCSP_request_verify(OCSP_REQUEST *req, STACK_OF(X509) *certs,
X509_STORE *store, unsigned long flags);
-int OCSP_parse_url(char *url, char **phost, char **pport, char **ppath,
+int OCSP_parse_url(const char *url, char **phost, char **pport, char **ppath,
int *pssl);
int OCSP_id_issuer_cmp(OCSP_CERTID *a, OCSP_CERTID *b);
diff --git a/crypto/openssl/crypto/ocsp/ocsp_ht.c b/crypto/openssl/crypto/ocsp/ocsp_ht.c
index 970fea4..88b26b3 100644
--- a/crypto/openssl/crypto/ocsp/ocsp_ht.c
+++ b/crypto/openssl/crypto/ocsp/ocsp_ht.c
@@ -81,9 +81,10 @@ struct ocsp_req_ctx_st {
BIO *io; /* BIO to perform I/O with */
BIO *mem; /* Memory BIO response is built into */
unsigned long asn1_len; /* ASN1 length of response */
+ unsigned long max_resp_len; /* Maximum length of response */
};
-#define OCSP_MAX_REQUEST_LENGTH (100 * 1024)
+#define OCSP_MAX_RESP_LENGTH (100 * 1024)
#define OCSP_MAX_LINE_LEN 4096;
/* OCSP states */
@@ -100,15 +101,42 @@ struct ocsp_req_ctx_st {
#define OHS_ASN1_HEADER 3
/* OCSP content octets being read */
#define OHS_ASN1_CONTENT 4
+/* First call: ready to start I/O */
+#define OHS_ASN1_WRITE_INIT (5 | OHS_NOREAD)
/* Request being sent */
#define OHS_ASN1_WRITE (6 | OHS_NOREAD)
/* Request being flushed */
#define OHS_ASN1_FLUSH (7 | OHS_NOREAD)
/* Completed */
#define OHS_DONE (8 | OHS_NOREAD)
+/* Headers set, no final \r\n included */
+#define OHS_HTTP_HEADER (9 | OHS_NOREAD)
static int parse_http_line1(char *line);
+OCSP_REQ_CTX *OCSP_REQ_CTX_new(BIO *io, int maxline)
+{
+ OCSP_REQ_CTX *rctx;
+ rctx = OPENSSL_malloc(sizeof(OCSP_REQ_CTX));
+ if (!rctx)
+ return NULL;
+ rctx->state = OHS_ERROR;
+ rctx->max_resp_len = OCSP_MAX_RESP_LENGTH;
+ rctx->mem = BIO_new(BIO_s_mem());
+ rctx->io = io;
+ rctx->asn1_len = 0;
+ if (maxline > 0)
+ rctx->iobuflen = maxline;
+ else
+ rctx->iobuflen = OCSP_MAX_LINE_LEN;
+ rctx->iobuf = OPENSSL_malloc(rctx->iobuflen);
+ if (!rctx->iobuf || !rctx->mem) {
+ OCSP_REQ_CTX_free(rctx);
+ return NULL;
+ }
+ return rctx;
+}
+
void OCSP_REQ_CTX_free(OCSP_REQ_CTX *rctx)
{
if (rctx->mem)
@@ -118,20 +146,71 @@ void OCSP_REQ_CTX_free(OCSP_REQ_CTX *rctx)
OPENSSL_free(rctx);
}
-int OCSP_REQ_CTX_set1_req(OCSP_REQ_CTX *rctx, OCSP_REQUEST *req)
+BIO *OCSP_REQ_CTX_get0_mem_bio(OCSP_REQ_CTX *rctx)
+{
+ return rctx->mem;
+}
+
+void OCSP_set_max_response_length(OCSP_REQ_CTX *rctx, unsigned long len)
+{
+ if (len == 0)
+ rctx->max_resp_len = OCSP_MAX_RESP_LENGTH;
+ else
+ rctx->max_resp_len = len;
+}
+
+int OCSP_REQ_CTX_i2d(OCSP_REQ_CTX *rctx, const ASN1_ITEM *it, ASN1_VALUE *val)
{
static const char req_hdr[] =
"Content-Type: application/ocsp-request\r\n"
"Content-Length: %d\r\n\r\n";
- if (BIO_printf(rctx->mem, req_hdr, i2d_OCSP_REQUEST(req, NULL)) <= 0)
+ int reqlen = ASN1_item_i2d(val, NULL, it);
+ if (BIO_printf(rctx->mem, req_hdr, reqlen) <= 0)
+ return 0;
+ if (ASN1_item_i2d_bio(it, rctx->mem, val) <= 0)
+ return 0;
+ rctx->state = OHS_ASN1_WRITE_INIT;
+ return 1;
+}
+
+int OCSP_REQ_CTX_nbio_d2i(OCSP_REQ_CTX *rctx,
+ ASN1_VALUE **pval, const ASN1_ITEM *it)
+{
+ int rv, len;
+ const unsigned char *p;
+
+ rv = OCSP_REQ_CTX_nbio(rctx);
+ if (rv != 1)
+ return rv;
+
+ len = BIO_get_mem_data(rctx->mem, &p);
+ *pval = ASN1_item_d2i(NULL, &p, len, it);
+ if (*pval == NULL) {
+ rctx->state = OHS_ERROR;
return 0;
- if (i2d_OCSP_REQUEST_bio(rctx->mem, req) <= 0)
+ }
+ return 1;
+}
+
+int OCSP_REQ_CTX_http(OCSP_REQ_CTX *rctx, const char *op, const char *path)
+{
+ static const char http_hdr[] = "%s %s HTTP/1.0\r\n";
+
+ if (!path)
+ path = "/";
+
+ if (BIO_printf(rctx->mem, http_hdr, op, path) <= 0)
return 0;
- rctx->state = OHS_ASN1_WRITE;
- rctx->asn1_len = BIO_get_mem_data(rctx->mem, NULL);
+ rctx->state = OHS_HTTP_HEADER;
return 1;
}
+int OCSP_REQ_CTX_set1_req(OCSP_REQ_CTX *rctx, OCSP_REQUEST *req)
+{
+ return OCSP_REQ_CTX_i2d(rctx, ASN1_ITEM_rptr(OCSP_REQUEST),
+ (ASN1_VALUE *)req);
+}
+
int OCSP_REQ_CTX_add1_header(OCSP_REQ_CTX *rctx,
const char *name, const char *value)
{
@@ -147,39 +226,27 @@ int OCSP_REQ_CTX_add1_header(OCSP_REQ_CTX *rctx,
}
if (BIO_write(rctx->mem, "\r\n", 2) != 2)
return 0;
+ rctx->state = OHS_HTTP_HEADER;
return 1;
}
-OCSP_REQ_CTX *OCSP_sendreq_new(BIO *io, char *path, OCSP_REQUEST *req,
+OCSP_REQ_CTX *OCSP_sendreq_new(BIO *io, const char *path, OCSP_REQUEST *req,
int maxline)
{
- static const char post_hdr[] = "POST %s HTTP/1.0\r\n";
- OCSP_REQ_CTX *rctx;
- rctx = OPENSSL_malloc(sizeof(OCSP_REQ_CTX));
+ OCSP_REQ_CTX *rctx = NULL;
+ rctx = OCSP_REQ_CTX_new(io, maxline);
if (!rctx)
return NULL;
- rctx->state = OHS_ERROR;
- rctx->mem = BIO_new(BIO_s_mem());
- rctx->io = io;
- rctx->asn1_len = 0;
- if (maxline > 0)
- rctx->iobuflen = maxline;
- else
- rctx->iobuflen = OCSP_MAX_LINE_LEN;
- rctx->iobuf = OPENSSL_malloc(rctx->iobuflen);
- if (!rctx->mem || !rctx->iobuf)
- goto err;
- if (!path)
- path = "/";
- if (BIO_printf(rctx->mem, post_hdr, path) <= 0)
+ if (!OCSP_REQ_CTX_http(rctx, "POST", path))
goto err;
if (req && !OCSP_REQ_CTX_set1_req(rctx, req))
goto err;
return rctx;
+
err:
OCSP_REQ_CTX_free(rctx);
return NULL;
@@ -256,7 +323,7 @@ static int parse_http_line1(char *line)
}
-int OCSP_sendreq_nbio(OCSP_RESPONSE **presp, OCSP_REQ_CTX *rctx)
+int OCSP_REQ_CTX_nbio(OCSP_REQ_CTX *rctx)
{
int i, n;
const unsigned char *p;
@@ -277,6 +344,17 @@ int OCSP_sendreq_nbio(OCSP_RESPONSE **presp, OCSP_REQ_CTX *rctx)
}
switch (rctx->state) {
+ case OHS_HTTP_HEADER:
+ /* Last operation was adding headers: need a final \r\n */
+ if (BIO_write(rctx->mem, "\r\n", 2) != 2) {
+ rctx->state = OHS_ERROR;
+ return 0;
+ }
+ rctx->state = OHS_ASN1_WRITE_INIT;
+
+ case OHS_ASN1_WRITE_INIT:
+ rctx->asn1_len = BIO_get_mem_data(rctx->mem, NULL);
+ rctx->state = OHS_ASN1_WRITE;
case OHS_ASN1_WRITE:
n = BIO_get_mem_data(rctx->mem, &p);
@@ -412,7 +490,7 @@ int OCSP_sendreq_nbio(OCSP_RESPONSE **presp, OCSP_REQ_CTX *rctx)
rctx->asn1_len |= *p++;
}
- if (rctx->asn1_len > OCSP_MAX_REQUEST_LENGTH) {
+ if (rctx->asn1_len > rctx->max_resp_len) {
rctx->state = OHS_ERROR;
return 0;
}
@@ -426,18 +504,12 @@ int OCSP_sendreq_nbio(OCSP_RESPONSE **presp, OCSP_REQ_CTX *rctx)
/* Fall thru */
case OHS_ASN1_CONTENT:
- n = BIO_get_mem_data(rctx->mem, &p);
+ n = BIO_get_mem_data(rctx->mem, NULL);
if (n < (int)rctx->asn1_len)
goto next_io;
- *presp = d2i_OCSP_RESPONSE(NULL, &p, rctx->asn1_len);
- if (*presp) {
- rctx->state = OHS_DONE;
- return 1;
- }
-
- rctx->state = OHS_ERROR;
- return 0;
+ rctx->state = OHS_DONE;
+ return 1;
break;
@@ -450,9 +522,16 @@ int OCSP_sendreq_nbio(OCSP_RESPONSE **presp, OCSP_REQ_CTX *rctx)
}
+int OCSP_sendreq_nbio(OCSP_RESPONSE **presp, OCSP_REQ_CTX *rctx)
+{
+ return OCSP_REQ_CTX_nbio_d2i(rctx,
+ (ASN1_VALUE **)presp,
+ ASN1_ITEM_rptr(OCSP_RESPONSE));
+}
+
/* Blocking OCSP request handler: now a special case of non-blocking I/O */
-OCSP_RESPONSE *OCSP_sendreq_bio(BIO *b, char *path, OCSP_REQUEST *req)
+OCSP_RESPONSE *OCSP_sendreq_bio(BIO *b, const char *path, OCSP_REQUEST *req)
{
OCSP_RESPONSE *resp = NULL;
OCSP_REQ_CTX *ctx;
diff --git a/crypto/openssl/crypto/ocsp/ocsp_lib.c b/crypto/openssl/crypto/ocsp/ocsp_lib.c
index d28d6b5..442a5b6 100644
--- a/crypto/openssl/crypto/ocsp/ocsp_lib.c
+++ b/crypto/openssl/crypto/ocsp/ocsp_lib.c
@@ -175,7 +175,7 @@ int OCSP_id_cmp(OCSP_CERTID *a, OCSP_CERTID *b)
* whether it is SSL.
*/
-int OCSP_parse_url(char *url, char **phost, char **pport, char **ppath,
+int OCSP_parse_url(const char *url, char **phost, char **pport, char **ppath,
int *pssl)
{
char *p, *buf;
diff --git a/crypto/openssl/crypto/opensslconf.h b/crypto/openssl/crypto/opensslconf.h
index 4a6e276..15487c9 100644
--- a/crypto/openssl/crypto/opensslconf.h
+++ b/crypto/openssl/crypto/opensslconf.h
@@ -20,6 +20,9 @@ extern "C" {
#ifndef OPENSSL_NO_KRB5
# define OPENSSL_NO_KRB5
#endif
+#ifndef OPENSSL_NO_LIBUNBOUND
+# define OPENSSL_NO_LIBUNBOUND
+#endif
#ifndef OPENSSL_NO_MD2
# define OPENSSL_NO_MD2
#endif
@@ -32,6 +35,9 @@ extern "C" {
#ifndef OPENSSL_NO_SCTP
# define OPENSSL_NO_SCTP
#endif
+#ifndef OPENSSL_NO_SSL_TRACE
+# define OPENSSL_NO_SSL_TRACE
+#endif
#ifndef OPENSSL_NO_STORE
# define OPENSSL_NO_STORE
#endif
@@ -62,6 +68,9 @@ extern "C" {
# if defined(OPENSSL_NO_KRB5) && !defined(NO_KRB5)
# define NO_KRB5
# endif
+# if defined(OPENSSL_NO_LIBUNBOUND) && !defined(NO_LIBUNBOUND)
+# define NO_LIBUNBOUND
+# endif
# if defined(OPENSSL_NO_MD2) && !defined(NO_MD2)
# define NO_MD2
# endif
@@ -74,6 +83,9 @@ extern "C" {
# if defined(OPENSSL_NO_SCTP) && !defined(NO_SCTP)
# define NO_SCTP
# endif
+# if defined(OPENSSL_NO_SSL_TRACE) && !defined(NO_SSL_TRACE)
+# define NO_SSL_TRACE
+# endif
# if defined(OPENSSL_NO_STORE) && !defined(NO_STORE)
# define NO_STORE
# endif
diff --git a/crypto/openssl/crypto/opensslv.h b/crypto/openssl/crypto/opensslv.h
index b02adfa..edef989 100644
--- a/crypto/openssl/crypto/opensslv.h
+++ b/crypto/openssl/crypto/opensslv.h
@@ -30,11 +30,11 @@ extern "C" {
* (Prior to 0.9.5a beta1, a different scheme was used: MMNNFFRBB for
* major minor fix final patch/beta)
*/
-# define OPENSSL_VERSION_NUMBER 0x1000110fL
+# define OPENSSL_VERSION_NUMBER 0x1000204fL
# ifdef OPENSSL_FIPS
-# define OPENSSL_VERSION_TEXT "OpenSSL 1.0.1p-fips 9 Jul 2015"
+# define OPENSSL_VERSION_TEXT "OpenSSL 1.0.2d-fips 9 Jul 2015"
# else
-# define OPENSSL_VERSION_TEXT "OpenSSL 1.0.1p-freebsd 9 Jul 2015"
+# define OPENSSL_VERSION_TEXT "OpenSSL 1.0.2d-freebsd 9 Jul 2015"
# endif
# define OPENSSL_VERSION_PTEXT " part of " OPENSSL_VERSION_TEXT
diff --git a/crypto/openssl/crypto/ossl_typ.h b/crypto/openssl/crypto/ossl_typ.h
index 0fcb0ce..9144ea2 100644
--- a/crypto/openssl/crypto/ossl_typ.h
+++ b/crypto/openssl/crypto/ossl_typ.h
@@ -100,6 +100,8 @@ typedef int ASN1_BOOLEAN;
typedef int ASN1_NULL;
# endif
+typedef struct asn1_object_st ASN1_OBJECT;
+
typedef struct ASN1_ITEM_st ASN1_ITEM;
typedef struct asn1_pctx_st ASN1_PCTX;
diff --git a/crypto/openssl/crypto/pem/Makefile b/crypto/openssl/crypto/pem/Makefile
index 7a930ee..65de60e 100644
--- a/crypto/openssl/crypto/pem/Makefile
+++ b/crypto/openssl/crypto/pem/Makefile
@@ -171,12 +171,13 @@ pem_pk8.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
pem_pk8.o: ../cryptlib.h pem_pk8.c
pem_pkey.o: ../../e_os.h ../../include/openssl/asn1.h
pem_pkey.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h
-pem_pkey.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
-pem_pkey.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
-pem_pkey.o: ../../include/openssl/ecdsa.h ../../include/openssl/engine.h
-pem_pkey.o: ../../include/openssl/err.h ../../include/openssl/evp.h
-pem_pkey.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
-pem_pkey.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
+pem_pkey.o: ../../include/openssl/crypto.h ../../include/openssl/dh.h
+pem_pkey.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
+pem_pkey.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
+pem_pkey.o: ../../include/openssl/engine.h ../../include/openssl/err.h
+pem_pkey.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h
+pem_pkey.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
+pem_pkey.o: ../../include/openssl/opensslconf.h
pem_pkey.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
pem_pkey.o: ../../include/openssl/pem.h ../../include/openssl/pem2.h
pem_pkey.o: ../../include/openssl/pkcs12.h ../../include/openssl/pkcs7.h
diff --git a/crypto/openssl/crypto/pem/pem.h b/crypto/openssl/crypto/pem/pem.h
index 2cdad8a..d3b23fc 100644
--- a/crypto/openssl/crypto/pem/pem.h
+++ b/crypto/openssl/crypto/pem/pem.h
@@ -129,6 +129,7 @@ extern "C" {
# define PEM_STRING_PKCS8 "ENCRYPTED PRIVATE KEY"
# define PEM_STRING_PKCS8INF "PRIVATE KEY"
# define PEM_STRING_DHPARAMS "DH PARAMETERS"
+# define PEM_STRING_DHXPARAMS "X9.42 DH PARAMETERS"
# define PEM_STRING_SSL_SESSION "SSL SESSION PARAMETERS"
# define PEM_STRING_DSAPARAMS "DSA PARAMETERS"
# define PEM_STRING_ECDSA_PUBLIC "ECDSA PUBLIC KEY"
@@ -181,7 +182,6 @@ typedef struct pem_ctx_st {
int num_recipient;
PEM_USER **recipient;
-
/*-
XXX(ben): don#t think this is used!
STACK *x509_chain; / * certificate chain */
@@ -399,8 +399,8 @@ int PEM_do_header(EVP_CIPHER_INFO *cipher, unsigned char *data, long *len,
# ifndef OPENSSL_NO_BIO
int PEM_read_bio(BIO *bp, char **name, char **header,
unsigned char **data, long *len);
-int PEM_write_bio(BIO *bp, const char *name, char *hdr, unsigned char *data,
- long len);
+int PEM_write_bio(BIO *bp, const char *name, const char *hdr,
+ const unsigned char *data, long len);
int PEM_bytes_read_bio(unsigned char **pdata, long *plen, char **pnm,
const char *name, BIO *bp, pem_password_cb *cb,
void *u);
@@ -419,7 +419,8 @@ int PEM_X509_INFO_write_bio(BIO *bp, X509_INFO *xi, EVP_CIPHER *enc,
int PEM_read(FILE *fp, char **name, char **header,
unsigned char **data, long *len);
-int PEM_write(FILE *fp, char *name, char *hdr, unsigned char *data, long len);
+int PEM_write(FILE *fp, const char *name, const char *hdr,
+ const unsigned char *data, long len);
void *PEM_ASN1_read(d2i_of_void *d2i, const char *name, FILE *fp, void **x,
pem_password_cb *cb, void *u);
int PEM_ASN1_write(i2d_of_void *i2d, const char *name, FILE *fp,
@@ -474,6 +475,7 @@ DECLARE_PEM_rw(EC_PUBKEY, EC_KEY)
# endif
# ifndef OPENSSL_NO_DH
DECLARE_PEM_rw_const(DHparams, DH)
+DECLARE_PEM_write_const(DHxparams, DH)
# endif
DECLARE_PEM_rw_cb(PrivateKey, EVP_PKEY)
DECLARE_PEM_rw(PUBKEY, EVP_PKEY)
@@ -562,8 +564,10 @@ void ERR_load_PEM_strings(void);
# define PEM_F_PEM_PK8PKEY 119
# define PEM_F_PEM_READ 108
# define PEM_F_PEM_READ_BIO 109
+# define PEM_F_PEM_READ_BIO_DHPARAMS 141
# define PEM_F_PEM_READ_BIO_PARAMETERS 140
# define PEM_F_PEM_READ_BIO_PRIVATEKEY 123
+# define PEM_F_PEM_READ_DHPARAMS 142
# define PEM_F_PEM_READ_PRIVATEKEY 124
# define PEM_F_PEM_SEALFINAL 110
# define PEM_F_PEM_SEALINIT 111
diff --git a/crypto/openssl/crypto/pem/pem_all.c b/crypto/openssl/crypto/pem/pem_all.c
index 64b8ba7..0e5be63 100644
--- a/crypto/openssl/crypto/pem/pem_all.c
+++ b/crypto/openssl/crypto/pem/pem_all.c
@@ -421,6 +421,7 @@ EC_KEY *PEM_read_ECPrivateKey(FILE *fp, EC_KEY **eckey, pem_password_cb *cb,
#ifndef OPENSSL_NO_DH
-IMPLEMENT_PEM_rw_const(DHparams, DH, PEM_STRING_DHPARAMS, DHparams)
+IMPLEMENT_PEM_write_const(DHparams, DH, PEM_STRING_DHPARAMS, DHparams)
+ IMPLEMENT_PEM_write_const(DHxparams, DH, PEM_STRING_DHXPARAMS, DHxparams)
#endif
- IMPLEMENT_PEM_rw(PUBKEY, EVP_PKEY, PEM_STRING_PUBLIC, PUBKEY)
+IMPLEMENT_PEM_rw(PUBKEY, EVP_PKEY, PEM_STRING_PUBLIC, PUBKEY)
diff --git a/crypto/openssl/crypto/pem/pem_err.c b/crypto/openssl/crypto/pem/pem_err.c
index 702c5ad..e1f4fdb 100644
--- a/crypto/openssl/crypto/pem/pem_err.c
+++ b/crypto/openssl/crypto/pem/pem_err.c
@@ -1,6 +1,6 @@
/* crypto/pem/pem_err.c */
/* ====================================================================
- * Copyright (c) 1999-2007 The OpenSSL Project. All rights reserved.
+ * Copyright (c) 1999-2011 The OpenSSL Project. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -99,8 +99,10 @@ static ERR_STRING_DATA PEM_str_functs[] = {
{ERR_FUNC(PEM_F_PEM_PK8PKEY), "PEM_PK8PKEY"},
{ERR_FUNC(PEM_F_PEM_READ), "PEM_read"},
{ERR_FUNC(PEM_F_PEM_READ_BIO), "PEM_read_bio"},
+ {ERR_FUNC(PEM_F_PEM_READ_BIO_DHPARAMS), "PEM_READ_BIO_DHPARAMS"},
{ERR_FUNC(PEM_F_PEM_READ_BIO_PARAMETERS), "PEM_read_bio_Parameters"},
{ERR_FUNC(PEM_F_PEM_READ_BIO_PRIVATEKEY), "PEM_READ_BIO_PRIVATEKEY"},
+ {ERR_FUNC(PEM_F_PEM_READ_DHPARAMS), "PEM_READ_DHPARAMS"},
{ERR_FUNC(PEM_F_PEM_READ_PRIVATEKEY), "PEM_READ_PRIVATEKEY"},
{ERR_FUNC(PEM_F_PEM_SEALFINAL), "PEM_SealFinal"},
{ERR_FUNC(PEM_F_PEM_SEALINIT), "PEM_SealInit"},
diff --git a/crypto/openssl/crypto/pem/pem_lib.c b/crypto/openssl/crypto/pem/pem_lib.c
index 5507161..a29821a 100644
--- a/crypto/openssl/crypto/pem/pem_lib.c
+++ b/crypto/openssl/crypto/pem/pem_lib.c
@@ -229,6 +229,10 @@ static int check_pem(const char *nm, const char *name)
}
return 0;
}
+ /* If reading DH parameters handle X9.42 DH format too */
+ if (!strcmp(nm, PEM_STRING_DHXPARAMS) &&
+ !strcmp(name, PEM_STRING_DHPARAMS))
+ return 1;
/* Permit older strings */
@@ -472,8 +476,9 @@ int PEM_do_header(EVP_CIPHER_INFO *cipher, unsigned char *data, long *plen,
EVP_CIPHER_CTX_cleanup(&ctx);
OPENSSL_cleanse((char *)buf, sizeof(buf));
OPENSSL_cleanse((char *)key, sizeof(key));
- j += i;
- if (!o) {
+ if (o)
+ j += i;
+ else {
PEMerr(PEM_F_PEM_DO_HEADER, PEM_R_BAD_DECRYPT);
return (0);
}
@@ -574,8 +579,8 @@ static int load_iv(char **fromp, unsigned char *to, int num)
}
#ifndef OPENSSL_NO_FP_API
-int PEM_write(FILE *fp, char *name, char *header, unsigned char *data,
- long len)
+int PEM_write(FILE *fp, const char *name, const char *header,
+ const unsigned char *data, long len)
{
BIO *b;
int ret;
@@ -591,8 +596,8 @@ int PEM_write(FILE *fp, char *name, char *header, unsigned char *data,
}
#endif
-int PEM_write_bio(BIO *bp, const char *name, char *header,
- unsigned char *data, long len)
+int PEM_write_bio(BIO *bp, const char *name, const char *header,
+ const unsigned char *data, long len)
{
int nlen, n, i, j, outl;
unsigned char *buf = NULL;
diff --git a/crypto/openssl/crypto/pem/pem_pkey.c b/crypto/openssl/crypto/pem/pem_pkey.c
index 0b05e63..04d6319 100644
--- a/crypto/openssl/crypto/pem/pem_pkey.c
+++ b/crypto/openssl/crypto/pem/pem_pkey.c
@@ -68,6 +68,9 @@
#ifndef OPENSSL_NO_ENGINE
# include <openssl/engine.h>
#endif
+#ifndef OPENSSL_NO_DH
+# include <openssl/dh.h>
+#endif
#include "asn1_locl.h"
int pem_check_suffix(const char *pem_str, const char *suffix);
@@ -241,3 +244,50 @@ int PEM_write_PrivateKey(FILE *fp, EVP_PKEY *x, const EVP_CIPHER *enc,
}
#endif
+
+#ifndef OPENSSL_NO_DH
+
+/* Transparently read in PKCS#3 or X9.42 DH parameters */
+
+DH *PEM_read_bio_DHparams(BIO *bp, DH **x, pem_password_cb *cb, void *u)
+{
+ char *nm = NULL;
+ const unsigned char *p = NULL;
+ unsigned char *data = NULL;
+ long len;
+ DH *ret = NULL;
+
+ if (!PEM_bytes_read_bio(&data, &len, &nm, PEM_STRING_DHPARAMS, bp, cb, u))
+ return NULL;
+ p = data;
+
+ if (!strcmp(nm, PEM_STRING_DHXPARAMS))
+ ret = d2i_DHxparams(x, &p, len);
+ else
+ ret = d2i_DHparams(x, &p, len);
+
+ if (ret == NULL)
+ PEMerr(PEM_F_PEM_READ_BIO_DHPARAMS, ERR_R_ASN1_LIB);
+ OPENSSL_free(nm);
+ OPENSSL_free(data);
+ return ret;
+}
+
+# ifndef OPENSSL_NO_FP_API
+DH *PEM_read_DHparams(FILE *fp, DH **x, pem_password_cb *cb, void *u)
+{
+ BIO *b;
+ DH *ret;
+
+ if ((b = BIO_new(BIO_s_file())) == NULL) {
+ PEMerr(PEM_F_PEM_READ_DHPARAMS, ERR_R_BUF_LIB);
+ return (0);
+ }
+ BIO_set_fp(b, fp, BIO_NOCLOSE);
+ ret = PEM_read_bio_DHparams(b, x, cb, u);
+ BIO_free(b);
+ return (ret);
+}
+# endif
+
+#endif
diff --git a/crypto/openssl/crypto/perlasm/ppc-xlate.pl b/crypto/openssl/crypto/perlasm/ppc-xlate.pl
index a3edd98..f89e814 100755
--- a/crypto/openssl/crypto/perlasm/ppc-xlate.pl
+++ b/crypto/openssl/crypto/perlasm/ppc-xlate.pl
@@ -27,7 +27,8 @@ my $globl = sub {
/osx/ && do { $name = "_$name";
last;
};
- /linux.*32/ && do { $ret .= ".globl $name\n";
+ /linux.*(32|64le)/
+ && do { $ret .= ".globl $name\n";
$ret .= ".type $name,\@function";
last;
};
@@ -37,7 +38,6 @@ my $globl = sub {
$ret .= ".align 3\n";
$ret .= "$name:\n";
$ret .= ".quad .$name,.TOC.\@tocbase,0\n";
- $ret .= ".size $name,24\n";
$ret .= ".previous\n";
$name = ".$name";
@@ -50,7 +50,9 @@ my $globl = sub {
$ret;
};
my $text = sub {
- ($flavour =~ /aix/) ? ".csect" : ".text";
+ my $ret = ($flavour =~ /aix/) ? ".csect\t.text[PR],7" : ".text";
+ $ret = ".abiversion 2\n".$ret if ($flavour =~ /linux.*64le/);
+ $ret;
};
my $machine = sub {
my $junk = shift;
@@ -62,9 +64,12 @@ my $machine = sub {
".machine $arch";
};
my $size = sub {
- if ($flavour =~ /linux.*32/)
+ if ($flavour =~ /linux/)
{ shift;
- ".size " . join(",",@_);
+ my $name = shift; $name =~ s|^[\.\_]||;
+ my $ret = ".size $name,.-".($flavour=~/64$/?".":"").$name;
+ $ret .= "\n.size .$name,.-.$name" if ($flavour=~/64$/);
+ $ret;
}
else
{ ""; }
@@ -77,6 +82,25 @@ my $asciz = sub {
else
{ ""; }
};
+my $quad = sub {
+ shift;
+ my @ret;
+ my ($hi,$lo);
+ for (@_) {
+ if (/^0x([0-9a-f]*?)([0-9a-f]{1,8})$/io)
+ { $hi=$1?"0x$1":"0"; $lo="0x$2"; }
+ elsif (/^([0-9]+)$/o)
+ { $hi=$1>>32; $lo=$1&0xffffffff; } # error-prone with 32-bit perl
+ else
+ { $hi=undef; $lo=$_; }
+
+ if (defined($hi))
+ { push(@ret,$flavour=~/le$/o?".long\t$lo,$hi":".long\t$hi,$lo"); }
+ else
+ { push(@ret,".quad $lo"); }
+ }
+ join("\n",@ret);
+};
################################################################
# simplified mnemonics not handled by at least one assembler
@@ -122,6 +146,46 @@ my $extrdi = sub {
$b = ($b+$n)&63; $n = 64-$n;
" rldicl $ra,$rs,$b,$n";
};
+my $vmr = sub {
+ my ($f,$vx,$vy) = @_;
+ " vor $vx,$vy,$vy";
+};
+
+# PowerISA 2.06 stuff
+sub vsxmem_op {
+ my ($f, $vrt, $ra, $rb, $op) = @_;
+ " .long ".sprintf "0x%X",(31<<26)|($vrt<<21)|($ra<<16)|($rb<<11)|($op*2+1);
+}
+# made-up unaligned memory reference AltiVec/VMX instructions
+my $lvx_u = sub { vsxmem_op(@_, 844); }; # lxvd2x
+my $stvx_u = sub { vsxmem_op(@_, 972); }; # stxvd2x
+my $lvdx_u = sub { vsxmem_op(@_, 588); }; # lxsdx
+my $stvdx_u = sub { vsxmem_op(@_, 716); }; # stxsdx
+my $lvx_4w = sub { vsxmem_op(@_, 780); }; # lxvw4x
+my $stvx_4w = sub { vsxmem_op(@_, 908); }; # stxvw4x
+
+# PowerISA 2.07 stuff
+sub vcrypto_op {
+ my ($f, $vrt, $vra, $vrb, $op) = @_;
+ " .long ".sprintf "0x%X",(4<<26)|($vrt<<21)|($vra<<16)|($vrb<<11)|$op;
+}
+my $vcipher = sub { vcrypto_op(@_, 1288); };
+my $vcipherlast = sub { vcrypto_op(@_, 1289); };
+my $vncipher = sub { vcrypto_op(@_, 1352); };
+my $vncipherlast= sub { vcrypto_op(@_, 1353); };
+my $vsbox = sub { vcrypto_op(@_, 0, 1480); };
+my $vshasigmad = sub { my ($st,$six)=splice(@_,-2); vcrypto_op(@_, $st<<4|$six, 1730); };
+my $vshasigmaw = sub { my ($st,$six)=splice(@_,-2); vcrypto_op(@_, $st<<4|$six, 1666); };
+my $vpmsumb = sub { vcrypto_op(@_, 1032); };
+my $vpmsumd = sub { vcrypto_op(@_, 1224); };
+my $vpmsubh = sub { vcrypto_op(@_, 1096); };
+my $vpmsumw = sub { vcrypto_op(@_, 1160); };
+my $vaddudm = sub { vcrypto_op(@_, 192); };
+
+my $mtsle = sub {
+ my ($f, $arg) = @_;
+ " .long ".sprintf "0x%X",(31<<26)|($arg<<21)|(147*2);
+};
while($line=<>) {
@@ -138,7 +202,10 @@ while($line=<>) {
{
$line =~ s|(^[\.\w]+)\:\s*||;
my $label = $1;
- printf "%s:",($GLOBALS{$label} or $label) if ($label);
+ if ($label) {
+ printf "%s:",($GLOBALS{$label} or $label);
+ printf "\n.localentry\t$GLOBALS{$label},0" if ($GLOBALS{$label} && $flavour =~ /linux.*64le/);
+ }
}
{
@@ -147,7 +214,7 @@ while($line=<>) {
my $mnemonic = $2;
my $f = $3;
my $opcode = eval("\$$mnemonic");
- $line =~ s|\bc?[rf]([0-9]+)\b|$1|g if ($c ne "." and $flavour !~ /osx/);
+ $line =~ s/\b(c?[rf]|v|vs)([0-9]+)\b/$2/g if ($c ne "." and $flavour !~ /osx/);
if (ref($opcode) eq 'CODE') { $line = &$opcode($f,split(',',$line)); }
elsif ($mnemonic) { $line = $c.$mnemonic.$f."\t".$line; }
}
diff --git a/crypto/openssl/crypto/perlasm/sparcv9_modes.pl b/crypto/openssl/crypto/perlasm/sparcv9_modes.pl
new file mode 100755
index 0000000..eb267a5
--- /dev/null
+++ b/crypto/openssl/crypto/perlasm/sparcv9_modes.pl
@@ -0,0 +1,1687 @@
+#!/usr/bin/env perl
+
+# Specific modes implementations for SPARC Architecture 2011. There
+# is T4 dependency though, an ASI value that is not specified in the
+# Architecture Manual. But as SPARC universe is rather monocultural,
+# we imply that processor capable of executing crypto instructions
+# can handle the ASI in question as well. This means that we ought to
+# keep eyes open when new processors emerge...
+#
+# As for above mentioned ASI. It's so called "block initializing
+# store" which cancels "read" in "read-update-write" on cache lines.
+# This is "cooperative" optimization, as it reduces overall pressure
+# on memory interface. Benefits can't be observed/quantified with
+# usual benchmarks, on the contrary you can notice that single-thread
+# performance for parallelizable modes is ~1.5% worse for largest
+# block sizes [though few percent better for not so long ones]. All
+# this based on suggestions from David Miller.
+
+sub asm_init { # to be called with @ARGV as argument
+ for (@_) { $::abibits=64 if (/\-m64/ || /\-xarch\=v9/); }
+ if ($::abibits==64) { $::bias=2047; $::frame=192; $::size_t_cc="%xcc"; }
+ else { $::bias=0; $::frame=112; $::size_t_cc="%icc"; }
+}
+
+# unified interface
+my ($inp,$out,$len,$key,$ivec)=map("%i$_",(0..5));
+# local variables
+my ($ileft,$iright,$ooff,$omask,$ivoff,$blk_init)=map("%l$_",(0..7));
+
+sub alg_cbc_encrypt_implement {
+my ($alg,$bits) = @_;
+
+$::code.=<<___;
+.globl ${alg}${bits}_t4_cbc_encrypt
+.align 32
+${alg}${bits}_t4_cbc_encrypt:
+ save %sp, -$::frame, %sp
+ cmp $len, 0
+ be,pn $::size_t_cc, .L${bits}_cbc_enc_abort
+ sub $inp, $out, $blk_init ! $inp!=$out
+___
+$::code.=<<___ if (!$::evp);
+ andcc $ivec, 7, $ivoff
+ alignaddr $ivec, %g0, $ivec
+
+ ldd [$ivec + 0], %f0 ! load ivec
+ bz,pt %icc, 1f
+ ldd [$ivec + 8], %f2
+ ldd [$ivec + 16], %f4
+ faligndata %f0, %f2, %f0
+ faligndata %f2, %f4, %f2
+1:
+___
+$::code.=<<___ if ($::evp);
+ ld [$ivec + 0], %f0
+ ld [$ivec + 4], %f1
+ ld [$ivec + 8], %f2
+ ld [$ivec + 12], %f3
+___
+$::code.=<<___;
+ prefetch [$inp], 20
+ prefetch [$inp + 63], 20
+ call _${alg}${bits}_load_enckey
+ and $inp, 7, $ileft
+ andn $inp, 7, $inp
+ sll $ileft, 3, $ileft
+ mov 64, $iright
+ mov 0xff, $omask
+ sub $iright, $ileft, $iright
+ and $out, 7, $ooff
+ cmp $len, 127
+ movrnz $ooff, 0, $blk_init ! if ( $out&7 ||
+ movleu $::size_t_cc, 0, $blk_init ! $len<128 ||
+ brnz,pn $blk_init, .L${bits}cbc_enc_blk ! $inp==$out)
+ srl $omask, $ooff, $omask
+
+ alignaddrl $out, %g0, $out
+ srlx $len, 4, $len
+ prefetch [$out], 22
+
+.L${bits}_cbc_enc_loop:
+ ldx [$inp + 0], %o0
+ brz,pt $ileft, 4f
+ ldx [$inp + 8], %o1
+
+ ldx [$inp + 16], %o2
+ sllx %o0, $ileft, %o0
+ srlx %o1, $iright, %g1
+ sllx %o1, $ileft, %o1
+ or %g1, %o0, %o0
+ srlx %o2, $iright, %o2
+ or %o2, %o1, %o1
+4:
+ xor %g4, %o0, %o0 ! ^= rk[0]
+ xor %g5, %o1, %o1
+ movxtod %o0, %f12
+ movxtod %o1, %f14
+
+ fxor %f12, %f0, %f0 ! ^= ivec
+ fxor %f14, %f2, %f2
+ prefetch [$out + 63], 22
+ prefetch [$inp + 16+63], 20
+ call _${alg}${bits}_encrypt_1x
+ add $inp, 16, $inp
+
+ brnz,pn $ooff, 2f
+ sub $len, 1, $len
+
+ std %f0, [$out + 0]
+ std %f2, [$out + 8]
+ brnz,pt $len, .L${bits}_cbc_enc_loop
+ add $out, 16, $out
+___
+$::code.=<<___ if ($::evp);
+ st %f0, [$ivec + 0]
+ st %f1, [$ivec + 4]
+ st %f2, [$ivec + 8]
+ st %f3, [$ivec + 12]
+___
+$::code.=<<___ if (!$::evp);
+ brnz,pn $ivoff, 3f
+ nop
+
+ std %f0, [$ivec + 0] ! write out ivec
+ std %f2, [$ivec + 8]
+___
+$::code.=<<___;
+.L${bits}_cbc_enc_abort:
+ ret
+ restore
+
+.align 16
+2: ldxa [$inp]0x82, %o0 ! avoid read-after-write hazard
+ ! and ~3x deterioration
+ ! in inp==out case
+ faligndata %f0, %f0, %f4 ! handle unaligned output
+ faligndata %f0, %f2, %f6
+ faligndata %f2, %f2, %f8
+
+ stda %f4, [$out + $omask]0xc0 ! partial store
+ std %f6, [$out + 8]
+ add $out, 16, $out
+ orn %g0, $omask, $omask
+ stda %f8, [$out + $omask]0xc0 ! partial store
+
+ brnz,pt $len, .L${bits}_cbc_enc_loop+4
+ orn %g0, $omask, $omask
+___
+$::code.=<<___ if ($::evp);
+ st %f0, [$ivec + 0]
+ st %f1, [$ivec + 4]
+ st %f2, [$ivec + 8]
+ st %f3, [$ivec + 12]
+___
+$::code.=<<___ if (!$::evp);
+ brnz,pn $ivoff, 3f
+ nop
+
+ std %f0, [$ivec + 0] ! write out ivec
+ std %f2, [$ivec + 8]
+ ret
+ restore
+
+.align 16
+3: alignaddrl $ivec, $ivoff, %g0 ! handle unaligned ivec
+ mov 0xff, $omask
+ srl $omask, $ivoff, $omask
+ faligndata %f0, %f0, %f4
+ faligndata %f0, %f2, %f6
+ faligndata %f2, %f2, %f8
+ stda %f4, [$ivec + $omask]0xc0
+ std %f6, [$ivec + 8]
+ add $ivec, 16, $ivec
+ orn %g0, $omask, $omask
+ stda %f8, [$ivec + $omask]0xc0
+___
+$::code.=<<___;
+ ret
+ restore
+
+!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+.align 32
+.L${bits}cbc_enc_blk:
+ add $out, $len, $blk_init
+ and $blk_init, 63, $blk_init ! tail
+ sub $len, $blk_init, $len
+ add $blk_init, 15, $blk_init ! round up to 16n
+ srlx $len, 4, $len
+ srl $blk_init, 4, $blk_init
+
+.L${bits}_cbc_enc_blk_loop:
+ ldx [$inp + 0], %o0
+ brz,pt $ileft, 5f
+ ldx [$inp + 8], %o1
+
+ ldx [$inp + 16], %o2
+ sllx %o0, $ileft, %o0
+ srlx %o1, $iright, %g1
+ sllx %o1, $ileft, %o1
+ or %g1, %o0, %o0
+ srlx %o2, $iright, %o2
+ or %o2, %o1, %o1
+5:
+ xor %g4, %o0, %o0 ! ^= rk[0]
+ xor %g5, %o1, %o1
+ movxtod %o0, %f12
+ movxtod %o1, %f14
+
+ fxor %f12, %f0, %f0 ! ^= ivec
+ fxor %f14, %f2, %f2
+ prefetch [$inp + 16+63], 20
+ call _${alg}${bits}_encrypt_1x
+ add $inp, 16, $inp
+ sub $len, 1, $len
+
+ stda %f0, [$out]0xe2 ! ASI_BLK_INIT, T4-specific
+ add $out, 8, $out
+ stda %f2, [$out]0xe2 ! ASI_BLK_INIT, T4-specific
+ brnz,pt $len, .L${bits}_cbc_enc_blk_loop
+ add $out, 8, $out
+
+ membar #StoreLoad|#StoreStore
+ brnz,pt $blk_init, .L${bits}_cbc_enc_loop
+ mov $blk_init, $len
+___
+$::code.=<<___ if ($::evp);
+ st %f0, [$ivec + 0]
+ st %f1, [$ivec + 4]
+ st %f2, [$ivec + 8]
+ st %f3, [$ivec + 12]
+___
+$::code.=<<___ if (!$::evp);
+ brnz,pn $ivoff, 3b
+ nop
+
+ std %f0, [$ivec + 0] ! write out ivec
+ std %f2, [$ivec + 8]
+___
+$::code.=<<___;
+ ret
+ restore
+.type ${alg}${bits}_t4_cbc_encrypt,#function
+.size ${alg}${bits}_t4_cbc_encrypt,.-${alg}${bits}_t4_cbc_encrypt
+___
+}
+
+sub alg_cbc_decrypt_implement {
+my ($alg,$bits) = @_;
+
+$::code.=<<___;
+.globl ${alg}${bits}_t4_cbc_decrypt
+.align 32
+${alg}${bits}_t4_cbc_decrypt:
+ save %sp, -$::frame, %sp
+ cmp $len, 0
+ be,pn $::size_t_cc, .L${bits}_cbc_dec_abort
+ sub $inp, $out, $blk_init ! $inp!=$out
+___
+$::code.=<<___ if (!$::evp);
+ andcc $ivec, 7, $ivoff
+ alignaddr $ivec, %g0, $ivec
+
+ ldd [$ivec + 0], %f12 ! load ivec
+ bz,pt %icc, 1f
+ ldd [$ivec + 8], %f14
+ ldd [$ivec + 16], %f0
+ faligndata %f12, %f14, %f12
+ faligndata %f14, %f0, %f14
+1:
+___
+$::code.=<<___ if ($::evp);
+ ld [$ivec + 0], %f12 ! load ivec
+ ld [$ivec + 4], %f13
+ ld [$ivec + 8], %f14
+ ld [$ivec + 12], %f15
+___
+$::code.=<<___;
+ prefetch [$inp], 20
+ prefetch [$inp + 63], 20
+ call _${alg}${bits}_load_deckey
+ and $inp, 7, $ileft
+ andn $inp, 7, $inp
+ sll $ileft, 3, $ileft
+ mov 64, $iright
+ mov 0xff, $omask
+ sub $iright, $ileft, $iright
+ and $out, 7, $ooff
+ cmp $len, 255
+ movrnz $ooff, 0, $blk_init ! if ( $out&7 ||
+ movleu $::size_t_cc, 0, $blk_init ! $len<256 ||
+ brnz,pn $blk_init, .L${bits}cbc_dec_blk ! $inp==$out)
+ srl $omask, $ooff, $omask
+
+ andcc $len, 16, %g0 ! is number of blocks even?
+ srlx $len, 4, $len
+ alignaddrl $out, %g0, $out
+ bz %icc, .L${bits}_cbc_dec_loop2x
+ prefetch [$out], 22
+.L${bits}_cbc_dec_loop:
+ ldx [$inp + 0], %o0
+ brz,pt $ileft, 4f
+ ldx [$inp + 8], %o1
+
+ ldx [$inp + 16], %o2
+ sllx %o0, $ileft, %o0
+ srlx %o1, $iright, %g1
+ sllx %o1, $ileft, %o1
+ or %g1, %o0, %o0
+ srlx %o2, $iright, %o2
+ or %o2, %o1, %o1
+4:
+ xor %g4, %o0, %o2 ! ^= rk[0]
+ xor %g5, %o1, %o3
+ movxtod %o2, %f0
+ movxtod %o3, %f2
+
+ prefetch [$out + 63], 22
+ prefetch [$inp + 16+63], 20
+ call _${alg}${bits}_decrypt_1x
+ add $inp, 16, $inp
+
+ fxor %f12, %f0, %f0 ! ^= ivec
+ fxor %f14, %f2, %f2
+ movxtod %o0, %f12
+ movxtod %o1, %f14
+
+ brnz,pn $ooff, 2f
+ sub $len, 1, $len
+
+ std %f0, [$out + 0]
+ std %f2, [$out + 8]
+ brnz,pt $len, .L${bits}_cbc_dec_loop2x
+ add $out, 16, $out
+___
+$::code.=<<___ if ($::evp);
+ st %f12, [$ivec + 0]
+ st %f13, [$ivec + 4]
+ st %f14, [$ivec + 8]
+ st %f15, [$ivec + 12]
+___
+$::code.=<<___ if (!$::evp);
+ brnz,pn $ivoff, .L${bits}_cbc_dec_unaligned_ivec
+ nop
+
+ std %f12, [$ivec + 0] ! write out ivec
+ std %f14, [$ivec + 8]
+___
+$::code.=<<___;
+.L${bits}_cbc_dec_abort:
+ ret
+ restore
+
+.align 16
+2: ldxa [$inp]0x82, %o0 ! avoid read-after-write hazard
+ ! and ~3x deterioration
+ ! in inp==out case
+ faligndata %f0, %f0, %f4 ! handle unaligned output
+ faligndata %f0, %f2, %f6
+ faligndata %f2, %f2, %f8
+
+ stda %f4, [$out + $omask]0xc0 ! partial store
+ std %f6, [$out + 8]
+ add $out, 16, $out
+ orn %g0, $omask, $omask
+ stda %f8, [$out + $omask]0xc0 ! partial store
+
+ brnz,pt $len, .L${bits}_cbc_dec_loop2x+4
+ orn %g0, $omask, $omask
+___
+$::code.=<<___ if ($::evp);
+ st %f12, [$ivec + 0]
+ st %f13, [$ivec + 4]
+ st %f14, [$ivec + 8]
+ st %f15, [$ivec + 12]
+___
+$::code.=<<___ if (!$::evp);
+ brnz,pn $ivoff, .L${bits}_cbc_dec_unaligned_ivec
+ nop
+
+ std %f12, [$ivec + 0] ! write out ivec
+ std %f14, [$ivec + 8]
+___
+$::code.=<<___;
+ ret
+ restore
+
+!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+.align 32
+.L${bits}_cbc_dec_loop2x:
+ ldx [$inp + 0], %o0
+ ldx [$inp + 8], %o1
+ ldx [$inp + 16], %o2
+ brz,pt $ileft, 4f
+ ldx [$inp + 24], %o3
+
+ ldx [$inp + 32], %o4
+ sllx %o0, $ileft, %o0
+ srlx %o1, $iright, %g1
+ or %g1, %o0, %o0
+ sllx %o1, $ileft, %o1
+ srlx %o2, $iright, %g1
+ or %g1, %o1, %o1
+ sllx %o2, $ileft, %o2
+ srlx %o3, $iright, %g1
+ or %g1, %o2, %o2
+ sllx %o3, $ileft, %o3
+ srlx %o4, $iright, %o4
+ or %o4, %o3, %o3
+4:
+ xor %g4, %o0, %o4 ! ^= rk[0]
+ xor %g5, %o1, %o5
+ movxtod %o4, %f0
+ movxtod %o5, %f2
+ xor %g4, %o2, %o4
+ xor %g5, %o3, %o5
+ movxtod %o4, %f4
+ movxtod %o5, %f6
+
+ prefetch [$out + 63], 22
+ prefetch [$inp + 32+63], 20
+ call _${alg}${bits}_decrypt_2x
+ add $inp, 32, $inp
+
+ movxtod %o0, %f8
+ movxtod %o1, %f10
+ fxor %f12, %f0, %f0 ! ^= ivec
+ fxor %f14, %f2, %f2
+ movxtod %o2, %f12
+ movxtod %o3, %f14
+ fxor %f8, %f4, %f4
+ fxor %f10, %f6, %f6
+
+ brnz,pn $ooff, 2f
+ sub $len, 2, $len
+
+ std %f0, [$out + 0]
+ std %f2, [$out + 8]
+ std %f4, [$out + 16]
+ std %f6, [$out + 24]
+ brnz,pt $len, .L${bits}_cbc_dec_loop2x
+ add $out, 32, $out
+___
+$::code.=<<___ if ($::evp);
+ st %f12, [$ivec + 0]
+ st %f13, [$ivec + 4]
+ st %f14, [$ivec + 8]
+ st %f15, [$ivec + 12]
+___
+$::code.=<<___ if (!$::evp);
+ brnz,pn $ivoff, .L${bits}_cbc_dec_unaligned_ivec
+ nop
+
+ std %f12, [$ivec + 0] ! write out ivec
+ std %f14, [$ivec + 8]
+___
+$::code.=<<___;
+ ret
+ restore
+
+.align 16
+2: ldxa [$inp]0x82, %o0 ! avoid read-after-write hazard
+ ! and ~3x deterioration
+ ! in inp==out case
+ faligndata %f0, %f0, %f8 ! handle unaligned output
+ faligndata %f0, %f2, %f0
+ faligndata %f2, %f4, %f2
+ faligndata %f4, %f6, %f4
+ faligndata %f6, %f6, %f6
+ stda %f8, [$out + $omask]0xc0 ! partial store
+ std %f0, [$out + 8]
+ std %f2, [$out + 16]
+ std %f4, [$out + 24]
+ add $out, 32, $out
+ orn %g0, $omask, $omask
+ stda %f6, [$out + $omask]0xc0 ! partial store
+
+ brnz,pt $len, .L${bits}_cbc_dec_loop2x+4
+ orn %g0, $omask, $omask
+___
+$::code.=<<___ if ($::evp);
+ st %f12, [$ivec + 0]
+ st %f13, [$ivec + 4]
+ st %f14, [$ivec + 8]
+ st %f15, [$ivec + 12]
+___
+$::code.=<<___ if (!$::evp);
+ brnz,pn $ivoff, .L${bits}_cbc_dec_unaligned_ivec
+ nop
+
+ std %f12, [$ivec + 0] ! write out ivec
+ std %f14, [$ivec + 8]
+ ret
+ restore
+
+.align 16
+.L${bits}_cbc_dec_unaligned_ivec:
+ alignaddrl $ivec, $ivoff, %g0 ! handle unaligned ivec
+ mov 0xff, $omask
+ srl $omask, $ivoff, $omask
+ faligndata %f12, %f12, %f0
+ faligndata %f12, %f14, %f2
+ faligndata %f14, %f14, %f4
+ stda %f0, [$ivec + $omask]0xc0
+ std %f2, [$ivec + 8]
+ add $ivec, 16, $ivec
+ orn %g0, $omask, $omask
+ stda %f4, [$ivec + $omask]0xc0
+___
+$::code.=<<___;
+ ret
+ restore
+
+!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+.align 32
+.L${bits}cbc_dec_blk:
+ add $out, $len, $blk_init
+ and $blk_init, 63, $blk_init ! tail
+ sub $len, $blk_init, $len
+ add $blk_init, 15, $blk_init ! round up to 16n
+ srlx $len, 4, $len
+ srl $blk_init, 4, $blk_init
+ sub $len, 1, $len
+ add $blk_init, 1, $blk_init
+
+.L${bits}_cbc_dec_blk_loop2x:
+ ldx [$inp + 0], %o0
+ ldx [$inp + 8], %o1
+ ldx [$inp + 16], %o2
+ brz,pt $ileft, 5f
+ ldx [$inp + 24], %o3
+
+ ldx [$inp + 32], %o4
+ sllx %o0, $ileft, %o0
+ srlx %o1, $iright, %g1
+ or %g1, %o0, %o0
+ sllx %o1, $ileft, %o1
+ srlx %o2, $iright, %g1
+ or %g1, %o1, %o1
+ sllx %o2, $ileft, %o2
+ srlx %o3, $iright, %g1
+ or %g1, %o2, %o2
+ sllx %o3, $ileft, %o3
+ srlx %o4, $iright, %o4
+ or %o4, %o3, %o3
+5:
+ xor %g4, %o0, %o4 ! ^= rk[0]
+ xor %g5, %o1, %o5
+ movxtod %o4, %f0
+ movxtod %o5, %f2
+ xor %g4, %o2, %o4
+ xor %g5, %o3, %o5
+ movxtod %o4, %f4
+ movxtod %o5, %f6
+
+ prefetch [$inp + 32+63], 20
+ call _${alg}${bits}_decrypt_2x
+ add $inp, 32, $inp
+ subcc $len, 2, $len
+
+ movxtod %o0, %f8
+ movxtod %o1, %f10
+ fxor %f12, %f0, %f0 ! ^= ivec
+ fxor %f14, %f2, %f2
+ movxtod %o2, %f12
+ movxtod %o3, %f14
+ fxor %f8, %f4, %f4
+ fxor %f10, %f6, %f6
+
+ stda %f0, [$out]0xe2 ! ASI_BLK_INIT, T4-specific
+ add $out, 8, $out
+ stda %f2, [$out]0xe2 ! ASI_BLK_INIT, T4-specific
+ add $out, 8, $out
+ stda %f4, [$out]0xe2 ! ASI_BLK_INIT, T4-specific
+ add $out, 8, $out
+ stda %f6, [$out]0xe2 ! ASI_BLK_INIT, T4-specific
+ bgu,pt $::size_t_cc, .L${bits}_cbc_dec_blk_loop2x
+ add $out, 8, $out
+
+ add $blk_init, $len, $len
+ andcc $len, 1, %g0 ! is number of blocks even?
+ membar #StoreLoad|#StoreStore
+ bnz,pt %icc, .L${bits}_cbc_dec_loop
+ srl $len, 0, $len
+ brnz,pn $len, .L${bits}_cbc_dec_loop2x
+ nop
+___
+$::code.=<<___ if ($::evp);
+ st %f12, [$ivec + 0] ! write out ivec
+ st %f13, [$ivec + 4]
+ st %f14, [$ivec + 8]
+ st %f15, [$ivec + 12]
+___
+$::code.=<<___ if (!$::evp);
+ brnz,pn $ivoff, 3b
+ nop
+
+ std %f12, [$ivec + 0] ! write out ivec
+ std %f14, [$ivec + 8]
+___
+$::code.=<<___;
+ ret
+ restore
+.type ${alg}${bits}_t4_cbc_decrypt,#function
+.size ${alg}${bits}_t4_cbc_decrypt,.-${alg}${bits}_t4_cbc_decrypt
+___
+}
+
+sub alg_ctr32_implement {
+my ($alg,$bits) = @_;
+
+$::code.=<<___;
+.globl ${alg}${bits}_t4_ctr32_encrypt
+.align 32
+${alg}${bits}_t4_ctr32_encrypt:
+ save %sp, -$::frame, %sp
+
+ prefetch [$inp], 20
+ prefetch [$inp + 63], 20
+ call _${alg}${bits}_load_enckey
+ sllx $len, 4, $len
+
+ ld [$ivec + 0], %l4 ! counter
+ ld [$ivec + 4], %l5
+ ld [$ivec + 8], %l6
+ ld [$ivec + 12], %l7
+
+ sllx %l4, 32, %o5
+ or %l5, %o5, %o5
+ sllx %l6, 32, %g1
+ xor %o5, %g4, %g4 ! ^= rk[0]
+ xor %g1, %g5, %g5
+ movxtod %g4, %f14 ! most significant 64 bits
+
+ sub $inp, $out, $blk_init ! $inp!=$out
+ and $inp, 7, $ileft
+ andn $inp, 7, $inp
+ sll $ileft, 3, $ileft
+ mov 64, $iright
+ mov 0xff, $omask
+ sub $iright, $ileft, $iright
+ and $out, 7, $ooff
+ cmp $len, 255
+ movrnz $ooff, 0, $blk_init ! if ( $out&7 ||
+ movleu $::size_t_cc, 0, $blk_init ! $len<256 ||
+ brnz,pn $blk_init, .L${bits}_ctr32_blk ! $inp==$out)
+ srl $omask, $ooff, $omask
+
+ andcc $len, 16, %g0 ! is number of blocks even?
+ alignaddrl $out, %g0, $out
+ bz %icc, .L${bits}_ctr32_loop2x
+ srlx $len, 4, $len
+.L${bits}_ctr32_loop:
+ ldx [$inp + 0], %o0
+ brz,pt $ileft, 4f
+ ldx [$inp + 8], %o1
+
+ ldx [$inp + 16], %o2
+ sllx %o0, $ileft, %o0
+ srlx %o1, $iright, %g1
+ sllx %o1, $ileft, %o1
+ or %g1, %o0, %o0
+ srlx %o2, $iright, %o2
+ or %o2, %o1, %o1
+4:
+ xor %g5, %l7, %g1 ! ^= rk[0]
+ add %l7, 1, %l7
+ movxtod %g1, %f2
+ srl %l7, 0, %l7 ! clruw
+ prefetch [$out + 63], 22
+ prefetch [$inp + 16+63], 20
+___
+$::code.=<<___ if ($alg eq "aes");
+ aes_eround01 %f16, %f14, %f2, %f4
+ aes_eround23 %f18, %f14, %f2, %f2
+___
+$::code.=<<___ if ($alg eq "cmll");
+ camellia_f %f16, %f2, %f14, %f2
+ camellia_f %f18, %f14, %f2, %f0
+___
+$::code.=<<___;
+ call _${alg}${bits}_encrypt_1x+8
+ add $inp, 16, $inp
+
+ movxtod %o0, %f10
+ movxtod %o1, %f12
+ fxor %f10, %f0, %f0 ! ^= inp
+ fxor %f12, %f2, %f2
+
+ brnz,pn $ooff, 2f
+ sub $len, 1, $len
+
+ std %f0, [$out + 0]
+ std %f2, [$out + 8]
+ brnz,pt $len, .L${bits}_ctr32_loop2x
+ add $out, 16, $out
+
+ ret
+ restore
+
+.align 16
+2: ldxa [$inp]0x82, %o0 ! avoid read-after-write hazard
+ ! and ~3x deterioration
+ ! in inp==out case
+ faligndata %f0, %f0, %f4 ! handle unaligned output
+ faligndata %f0, %f2, %f6
+ faligndata %f2, %f2, %f8
+ stda %f4, [$out + $omask]0xc0 ! partial store
+ std %f6, [$out + 8]
+ add $out, 16, $out
+ orn %g0, $omask, $omask
+ stda %f8, [$out + $omask]0xc0 ! partial store
+
+ brnz,pt $len, .L${bits}_ctr32_loop2x+4
+ orn %g0, $omask, $omask
+
+ ret
+ restore
+
+!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+.align 32
+.L${bits}_ctr32_loop2x:
+ ldx [$inp + 0], %o0
+ ldx [$inp + 8], %o1
+ ldx [$inp + 16], %o2
+ brz,pt $ileft, 4f
+ ldx [$inp + 24], %o3
+
+ ldx [$inp + 32], %o4
+ sllx %o0, $ileft, %o0
+ srlx %o1, $iright, %g1
+ or %g1, %o0, %o0
+ sllx %o1, $ileft, %o1
+ srlx %o2, $iright, %g1
+ or %g1, %o1, %o1
+ sllx %o2, $ileft, %o2
+ srlx %o3, $iright, %g1
+ or %g1, %o2, %o2
+ sllx %o3, $ileft, %o3
+ srlx %o4, $iright, %o4
+ or %o4, %o3, %o3
+4:
+ xor %g5, %l7, %g1 ! ^= rk[0]
+ add %l7, 1, %l7
+ movxtod %g1, %f2
+ srl %l7, 0, %l7 ! clruw
+ xor %g5, %l7, %g1
+ add %l7, 1, %l7
+ movxtod %g1, %f6
+ srl %l7, 0, %l7 ! clruw
+ prefetch [$out + 63], 22
+ prefetch [$inp + 32+63], 20
+___
+$::code.=<<___ if ($alg eq "aes");
+ aes_eround01 %f16, %f14, %f2, %f8
+ aes_eround23 %f18, %f14, %f2, %f2
+ aes_eround01 %f16, %f14, %f6, %f10
+ aes_eround23 %f18, %f14, %f6, %f6
+___
+$::code.=<<___ if ($alg eq "cmll");
+ camellia_f %f16, %f2, %f14, %f2
+ camellia_f %f16, %f6, %f14, %f6
+ camellia_f %f18, %f14, %f2, %f0
+ camellia_f %f18, %f14, %f6, %f4
+___
+$::code.=<<___;
+ call _${alg}${bits}_encrypt_2x+16
+ add $inp, 32, $inp
+
+ movxtod %o0, %f8
+ movxtod %o1, %f10
+ movxtod %o2, %f12
+ fxor %f8, %f0, %f0 ! ^= inp
+ movxtod %o3, %f8
+ fxor %f10, %f2, %f2
+ fxor %f12, %f4, %f4
+ fxor %f8, %f6, %f6
+
+ brnz,pn $ooff, 2f
+ sub $len, 2, $len
+
+ std %f0, [$out + 0]
+ std %f2, [$out + 8]
+ std %f4, [$out + 16]
+ std %f6, [$out + 24]
+ brnz,pt $len, .L${bits}_ctr32_loop2x
+ add $out, 32, $out
+
+ ret
+ restore
+
+.align 16
+2: ldxa [$inp]0x82, %o0 ! avoid read-after-write hazard
+ ! and ~3x deterioration
+ ! in inp==out case
+ faligndata %f0, %f0, %f8 ! handle unaligned output
+ faligndata %f0, %f2, %f0
+ faligndata %f2, %f4, %f2
+ faligndata %f4, %f6, %f4
+ faligndata %f6, %f6, %f6
+
+ stda %f8, [$out + $omask]0xc0 ! partial store
+ std %f0, [$out + 8]
+ std %f2, [$out + 16]
+ std %f4, [$out + 24]
+ add $out, 32, $out
+ orn %g0, $omask, $omask
+ stda %f6, [$out + $omask]0xc0 ! partial store
+
+ brnz,pt $len, .L${bits}_ctr32_loop2x+4
+ orn %g0, $omask, $omask
+
+ ret
+ restore
+
+!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+.align 32
+.L${bits}_ctr32_blk:
+ add $out, $len, $blk_init
+ and $blk_init, 63, $blk_init ! tail
+ sub $len, $blk_init, $len
+ add $blk_init, 15, $blk_init ! round up to 16n
+ srlx $len, 4, $len
+ srl $blk_init, 4, $blk_init
+ sub $len, 1, $len
+ add $blk_init, 1, $blk_init
+
+.L${bits}_ctr32_blk_loop2x:
+ ldx [$inp + 0], %o0
+ ldx [$inp + 8], %o1
+ ldx [$inp + 16], %o2
+ brz,pt $ileft, 5f
+ ldx [$inp + 24], %o3
+
+ ldx [$inp + 32], %o4
+ sllx %o0, $ileft, %o0
+ srlx %o1, $iright, %g1
+ or %g1, %o0, %o0
+ sllx %o1, $ileft, %o1
+ srlx %o2, $iright, %g1
+ or %g1, %o1, %o1
+ sllx %o2, $ileft, %o2
+ srlx %o3, $iright, %g1
+ or %g1, %o2, %o2
+ sllx %o3, $ileft, %o3
+ srlx %o4, $iright, %o4
+ or %o4, %o3, %o3
+5:
+ xor %g5, %l7, %g1 ! ^= rk[0]
+ add %l7, 1, %l7
+ movxtod %g1, %f2
+ srl %l7, 0, %l7 ! clruw
+ xor %g5, %l7, %g1
+ add %l7, 1, %l7
+ movxtod %g1, %f6
+ srl %l7, 0, %l7 ! clruw
+ prefetch [$inp + 32+63], 20
+___
+$::code.=<<___ if ($alg eq "aes");
+ aes_eround01 %f16, %f14, %f2, %f8
+ aes_eround23 %f18, %f14, %f2, %f2
+ aes_eround01 %f16, %f14, %f6, %f10
+ aes_eround23 %f18, %f14, %f6, %f6
+___
+$::code.=<<___ if ($alg eq "cmll");
+ camellia_f %f16, %f2, %f14, %f2
+ camellia_f %f16, %f6, %f14, %f6
+ camellia_f %f18, %f14, %f2, %f0
+ camellia_f %f18, %f14, %f6, %f4
+___
+$::code.=<<___;
+ call _${alg}${bits}_encrypt_2x+16
+ add $inp, 32, $inp
+ subcc $len, 2, $len
+
+ movxtod %o0, %f8
+ movxtod %o1, %f10
+ movxtod %o2, %f12
+ fxor %f8, %f0, %f0 ! ^= inp
+ movxtod %o3, %f8
+ fxor %f10, %f2, %f2
+ fxor %f12, %f4, %f4
+ fxor %f8, %f6, %f6
+
+ stda %f0, [$out]0xe2 ! ASI_BLK_INIT, T4-specific
+ add $out, 8, $out
+ stda %f2, [$out]0xe2 ! ASI_BLK_INIT, T4-specific
+ add $out, 8, $out
+ stda %f4, [$out]0xe2 ! ASI_BLK_INIT, T4-specific
+ add $out, 8, $out
+ stda %f6, [$out]0xe2 ! ASI_BLK_INIT, T4-specific
+ bgu,pt $::size_t_cc, .L${bits}_ctr32_blk_loop2x
+ add $out, 8, $out
+
+ add $blk_init, $len, $len
+ andcc $len, 1, %g0 ! is number of blocks even?
+ membar #StoreLoad|#StoreStore
+ bnz,pt %icc, .L${bits}_ctr32_loop
+ srl $len, 0, $len
+ brnz,pn $len, .L${bits}_ctr32_loop2x
+ nop
+
+ ret
+ restore
+.type ${alg}${bits}_t4_ctr32_encrypt,#function
+.size ${alg}${bits}_t4_ctr32_encrypt,.-${alg}${bits}_t4_ctr32_encrypt
+___
+}
+
+sub alg_xts_implement {
+my ($alg,$bits,$dir) = @_;
+my ($inp,$out,$len,$key1,$key2,$ivec)=map("%i$_",(0..5));
+my $rem=$ivec;
+
+$::code.=<<___;
+.globl ${alg}${bits}_t4_xts_${dir}crypt
+.align 32
+${alg}${bits}_t4_xts_${dir}crypt:
+ save %sp, -$::frame-16, %sp
+
+ mov $ivec, %o0
+ add %fp, $::bias-16, %o1
+ call ${alg}_t4_encrypt
+ mov $key2, %o2
+
+ add %fp, $::bias-16, %l7
+ ldxa [%l7]0x88, %g2
+ add %fp, $::bias-8, %l7
+ ldxa [%l7]0x88, %g3 ! %g3:%g2 is tweak
+
+ sethi %hi(0x76543210), %l7
+ or %l7, %lo(0x76543210), %l7
+ bmask %l7, %g0, %g0 ! byte swap mask
+
+ prefetch [$inp], 20
+ prefetch [$inp + 63], 20
+ call _${alg}${bits}_load_${dir}ckey
+ and $len, 15, $rem
+ and $len, -16, $len
+___
+$code.=<<___ if ($dir eq "de");
+ mov 0, %l7
+ movrnz $rem, 16, %l7
+ sub $len, %l7, $len
+___
+$code.=<<___;
+
+ sub $inp, $out, $blk_init ! $inp!=$out
+ and $inp, 7, $ileft
+ andn $inp, 7, $inp
+ sll $ileft, 3, $ileft
+ mov 64, $iright
+ mov 0xff, $omask
+ sub $iright, $ileft, $iright
+ and $out, 7, $ooff
+ cmp $len, 255
+ movrnz $ooff, 0, $blk_init ! if ( $out&7 ||
+ movleu $::size_t_cc, 0, $blk_init ! $len<256 ||
+ brnz,pn $blk_init, .L${bits}_xts_${dir}blk ! $inp==$out)
+ srl $omask, $ooff, $omask
+
+ andcc $len, 16, %g0 ! is number of blocks even?
+___
+$code.=<<___ if ($dir eq "de");
+ brz,pn $len, .L${bits}_xts_${dir}steal
+___
+$code.=<<___;
+ alignaddrl $out, %g0, $out
+ bz %icc, .L${bits}_xts_${dir}loop2x
+ srlx $len, 4, $len
+.L${bits}_xts_${dir}loop:
+ ldx [$inp + 0], %o0
+ brz,pt $ileft, 4f
+ ldx [$inp + 8], %o1
+
+ ldx [$inp + 16], %o2
+ sllx %o0, $ileft, %o0
+ srlx %o1, $iright, %g1
+ sllx %o1, $ileft, %o1
+ or %g1, %o0, %o0
+ srlx %o2, $iright, %o2
+ or %o2, %o1, %o1
+4:
+ movxtod %g2, %f12
+ movxtod %g3, %f14
+ bshuffle %f12, %f12, %f12
+ bshuffle %f14, %f14, %f14
+
+ xor %g4, %o0, %o0 ! ^= rk[0]
+ xor %g5, %o1, %o1
+ movxtod %o0, %f0
+ movxtod %o1, %f2
+
+ fxor %f12, %f0, %f0 ! ^= tweak[0]
+ fxor %f14, %f2, %f2
+
+ prefetch [$out + 63], 22
+ prefetch [$inp + 16+63], 20
+ call _${alg}${bits}_${dir}crypt_1x
+ add $inp, 16, $inp
+
+ fxor %f12, %f0, %f0 ! ^= tweak[0]
+ fxor %f14, %f2, %f2
+
+ srax %g3, 63, %l7 ! next tweak value
+ addcc %g2, %g2, %g2
+ and %l7, 0x87, %l7
+ addxc %g3, %g3, %g3
+ xor %l7, %g2, %g2
+
+ brnz,pn $ooff, 2f
+ sub $len, 1, $len
+
+ std %f0, [$out + 0]
+ std %f2, [$out + 8]
+ brnz,pt $len, .L${bits}_xts_${dir}loop2x
+ add $out, 16, $out
+
+ brnz,pn $rem, .L${bits}_xts_${dir}steal
+ nop
+
+ ret
+ restore
+
+.align 16
+2: ldxa [$inp]0x82, %o0 ! avoid read-after-write hazard
+ ! and ~3x deterioration
+ ! in inp==out case
+ faligndata %f0, %f0, %f4 ! handle unaligned output
+ faligndata %f0, %f2, %f6
+ faligndata %f2, %f2, %f8
+ stda %f4, [$out + $omask]0xc0 ! partial store
+ std %f6, [$out + 8]
+ add $out, 16, $out
+ orn %g0, $omask, $omask
+ stda %f8, [$out + $omask]0xc0 ! partial store
+
+ brnz,pt $len, .L${bits}_xts_${dir}loop2x+4
+ orn %g0, $omask, $omask
+
+ brnz,pn $rem, .L${bits}_xts_${dir}steal
+ nop
+
+ ret
+ restore
+
+!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+.align 32
+.L${bits}_xts_${dir}loop2x:
+ ldx [$inp + 0], %o0
+ ldx [$inp + 8], %o1
+ ldx [$inp + 16], %o2
+ brz,pt $ileft, 4f
+ ldx [$inp + 24], %o3
+
+ ldx [$inp + 32], %o4
+ sllx %o0, $ileft, %o0
+ srlx %o1, $iright, %g1
+ or %g1, %o0, %o0
+ sllx %o1, $ileft, %o1
+ srlx %o2, $iright, %g1
+ or %g1, %o1, %o1
+ sllx %o2, $ileft, %o2
+ srlx %o3, $iright, %g1
+ or %g1, %o2, %o2
+ sllx %o3, $ileft, %o3
+ srlx %o4, $iright, %o4
+ or %o4, %o3, %o3
+4:
+ movxtod %g2, %f12
+ movxtod %g3, %f14
+ bshuffle %f12, %f12, %f12
+ bshuffle %f14, %f14, %f14
+
+ srax %g3, 63, %l7 ! next tweak value
+ addcc %g2, %g2, %g2
+ and %l7, 0x87, %l7
+ addxc %g3, %g3, %g3
+ xor %l7, %g2, %g2
+
+ movxtod %g2, %f8
+ movxtod %g3, %f10
+ bshuffle %f8, %f8, %f8
+ bshuffle %f10, %f10, %f10
+
+ xor %g4, %o0, %o0 ! ^= rk[0]
+ xor %g5, %o1, %o1
+ xor %g4, %o2, %o2 ! ^= rk[0]
+ xor %g5, %o3, %o3
+ movxtod %o0, %f0
+ movxtod %o1, %f2
+ movxtod %o2, %f4
+ movxtod %o3, %f6
+
+ fxor %f12, %f0, %f0 ! ^= tweak[0]
+ fxor %f14, %f2, %f2
+ fxor %f8, %f4, %f4 ! ^= tweak[0]
+ fxor %f10, %f6, %f6
+
+ prefetch [$out + 63], 22
+ prefetch [$inp + 32+63], 20
+ call _${alg}${bits}_${dir}crypt_2x
+ add $inp, 32, $inp
+
+ movxtod %g2, %f8
+ movxtod %g3, %f10
+
+ srax %g3, 63, %l7 ! next tweak value
+ addcc %g2, %g2, %g2
+ and %l7, 0x87, %l7
+ addxc %g3, %g3, %g3
+ xor %l7, %g2, %g2
+
+ bshuffle %f8, %f8, %f8
+ bshuffle %f10, %f10, %f10
+
+ fxor %f12, %f0, %f0 ! ^= tweak[0]
+ fxor %f14, %f2, %f2
+ fxor %f8, %f4, %f4
+ fxor %f10, %f6, %f6
+
+ brnz,pn $ooff, 2f
+ sub $len, 2, $len
+
+ std %f0, [$out + 0]
+ std %f2, [$out + 8]
+ std %f4, [$out + 16]
+ std %f6, [$out + 24]
+ brnz,pt $len, .L${bits}_xts_${dir}loop2x
+ add $out, 32, $out
+
+ fsrc2 %f4, %f0
+ fsrc2 %f6, %f2
+ brnz,pn $rem, .L${bits}_xts_${dir}steal
+ nop
+
+ ret
+ restore
+
+.align 16
+2: ldxa [$inp]0x82, %o0 ! avoid read-after-write hazard
+ ! and ~3x deterioration
+ ! in inp==out case
+ faligndata %f0, %f0, %f8 ! handle unaligned output
+ faligndata %f0, %f2, %f10
+ faligndata %f2, %f4, %f12
+ faligndata %f4, %f6, %f14
+ faligndata %f6, %f6, %f0
+
+ stda %f8, [$out + $omask]0xc0 ! partial store
+ std %f10, [$out + 8]
+ std %f12, [$out + 16]
+ std %f14, [$out + 24]
+ add $out, 32, $out
+ orn %g0, $omask, $omask
+ stda %f0, [$out + $omask]0xc0 ! partial store
+
+ brnz,pt $len, .L${bits}_xts_${dir}loop2x+4
+ orn %g0, $omask, $omask
+
+ fsrc2 %f4, %f0
+ fsrc2 %f6, %f2
+ brnz,pn $rem, .L${bits}_xts_${dir}steal
+ nop
+
+ ret
+ restore
+
+!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+.align 32
+.L${bits}_xts_${dir}blk:
+ add $out, $len, $blk_init
+ and $blk_init, 63, $blk_init ! tail
+ sub $len, $blk_init, $len
+ add $blk_init, 15, $blk_init ! round up to 16n
+ srlx $len, 4, $len
+ srl $blk_init, 4, $blk_init
+ sub $len, 1, $len
+ add $blk_init, 1, $blk_init
+
+.L${bits}_xts_${dir}blk2x:
+ ldx [$inp + 0], %o0
+ ldx [$inp + 8], %o1
+ ldx [$inp + 16], %o2
+ brz,pt $ileft, 5f
+ ldx [$inp + 24], %o3
+
+ ldx [$inp + 32], %o4
+ sllx %o0, $ileft, %o0
+ srlx %o1, $iright, %g1
+ or %g1, %o0, %o0
+ sllx %o1, $ileft, %o1
+ srlx %o2, $iright, %g1
+ or %g1, %o1, %o1
+ sllx %o2, $ileft, %o2
+ srlx %o3, $iright, %g1
+ or %g1, %o2, %o2
+ sllx %o3, $ileft, %o3
+ srlx %o4, $iright, %o4
+ or %o4, %o3, %o3
+5:
+ movxtod %g2, %f12
+ movxtod %g3, %f14
+ bshuffle %f12, %f12, %f12
+ bshuffle %f14, %f14, %f14
+
+ srax %g3, 63, %l7 ! next tweak value
+ addcc %g2, %g2, %g2
+ and %l7, 0x87, %l7
+ addxc %g3, %g3, %g3
+ xor %l7, %g2, %g2
+
+ movxtod %g2, %f8
+ movxtod %g3, %f10
+ bshuffle %f8, %f8, %f8
+ bshuffle %f10, %f10, %f10
+
+ xor %g4, %o0, %o0 ! ^= rk[0]
+ xor %g5, %o1, %o1
+ xor %g4, %o2, %o2 ! ^= rk[0]
+ xor %g5, %o3, %o3
+ movxtod %o0, %f0
+ movxtod %o1, %f2
+ movxtod %o2, %f4
+ movxtod %o3, %f6
+
+ fxor %f12, %f0, %f0 ! ^= tweak[0]
+ fxor %f14, %f2, %f2
+ fxor %f8, %f4, %f4 ! ^= tweak[0]
+ fxor %f10, %f6, %f6
+
+ prefetch [$inp + 32+63], 20
+ call _${alg}${bits}_${dir}crypt_2x
+ add $inp, 32, $inp
+
+ movxtod %g2, %f8
+ movxtod %g3, %f10
+
+ srax %g3, 63, %l7 ! next tweak value
+ addcc %g2, %g2, %g2
+ and %l7, 0x87, %l7
+ addxc %g3, %g3, %g3
+ xor %l7, %g2, %g2
+
+ bshuffle %f8, %f8, %f8
+ bshuffle %f10, %f10, %f10
+
+ fxor %f12, %f0, %f0 ! ^= tweak[0]
+ fxor %f14, %f2, %f2
+ fxor %f8, %f4, %f4
+ fxor %f10, %f6, %f6
+
+ subcc $len, 2, $len
+ stda %f0, [$out]0xe2 ! ASI_BLK_INIT, T4-specific
+ add $out, 8, $out
+ stda %f2, [$out]0xe2 ! ASI_BLK_INIT, T4-specific
+ add $out, 8, $out
+ stda %f4, [$out]0xe2 ! ASI_BLK_INIT, T4-specific
+ add $out, 8, $out
+ stda %f6, [$out]0xe2 ! ASI_BLK_INIT, T4-specific
+ bgu,pt $::size_t_cc, .L${bits}_xts_${dir}blk2x
+ add $out, 8, $out
+
+ add $blk_init, $len, $len
+ andcc $len, 1, %g0 ! is number of blocks even?
+ membar #StoreLoad|#StoreStore
+ bnz,pt %icc, .L${bits}_xts_${dir}loop
+ srl $len, 0, $len
+ brnz,pn $len, .L${bits}_xts_${dir}loop2x
+ nop
+
+ fsrc2 %f4, %f0
+ fsrc2 %f6, %f2
+ brnz,pn $rem, .L${bits}_xts_${dir}steal
+ nop
+
+ ret
+ restore
+!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
+___
+$code.=<<___ if ($dir eq "en");
+.align 32
+.L${bits}_xts_${dir}steal:
+ std %f0, [%fp + $::bias-16] ! copy of output
+ std %f2, [%fp + $::bias-8]
+
+ srl $ileft, 3, $ileft
+ add %fp, $::bias-16, %l7
+ add $inp, $ileft, $inp ! original $inp+$len&-15
+ add $out, $ooff, $out ! original $out+$len&-15
+ mov 0, $ileft
+ nop ! align
+
+.L${bits}_xts_${dir}stealing:
+ ldub [$inp + $ileft], %o0
+ ldub [%l7 + $ileft], %o1
+ dec $rem
+ stb %o0, [%l7 + $ileft]
+ stb %o1, [$out + $ileft]
+ brnz $rem, .L${bits}_xts_${dir}stealing
+ inc $ileft
+
+ mov %l7, $inp
+ sub $out, 16, $out
+ mov 0, $ileft
+ sub $out, $ooff, $out
+ ba .L${bits}_xts_${dir}loop ! one more time
+ mov 1, $len ! $rem is 0
+___
+$code.=<<___ if ($dir eq "de");
+.align 32
+.L${bits}_xts_${dir}steal:
+ ldx [$inp + 0], %o0
+ brz,pt $ileft, 8f
+ ldx [$inp + 8], %o1
+
+ ldx [$inp + 16], %o2
+ sllx %o0, $ileft, %o0
+ srlx %o1, $iright, %g1
+ sllx %o1, $ileft, %o1
+ or %g1, %o0, %o0
+ srlx %o2, $iright, %o2
+ or %o2, %o1, %o1
+8:
+ srax %g3, 63, %l7 ! next tweak value
+ addcc %g2, %g2, %o2
+ and %l7, 0x87, %l7
+ addxc %g3, %g3, %o3
+ xor %l7, %o2, %o2
+
+ movxtod %o2, %f12
+ movxtod %o3, %f14
+ bshuffle %f12, %f12, %f12
+ bshuffle %f14, %f14, %f14
+
+ xor %g4, %o0, %o0 ! ^= rk[0]
+ xor %g5, %o1, %o1
+ movxtod %o0, %f0
+ movxtod %o1, %f2
+
+ fxor %f12, %f0, %f0 ! ^= tweak[0]
+ fxor %f14, %f2, %f2
+
+ call _${alg}${bits}_${dir}crypt_1x
+ add $inp, 16, $inp
+
+ fxor %f12, %f0, %f0 ! ^= tweak[0]
+ fxor %f14, %f2, %f2
+
+ std %f0, [%fp + $::bias-16]
+ std %f2, [%fp + $::bias-8]
+
+ srl $ileft, 3, $ileft
+ add %fp, $::bias-16, %l7
+ add $inp, $ileft, $inp ! original $inp+$len&-15
+ add $out, $ooff, $out ! original $out+$len&-15
+ mov 0, $ileft
+ add $out, 16, $out
+ nop ! align
+
+.L${bits}_xts_${dir}stealing:
+ ldub [$inp + $ileft], %o0
+ ldub [%l7 + $ileft], %o1
+ dec $rem
+ stb %o0, [%l7 + $ileft]
+ stb %o1, [$out + $ileft]
+ brnz $rem, .L${bits}_xts_${dir}stealing
+ inc $ileft
+
+ mov %l7, $inp
+ sub $out, 16, $out
+ mov 0, $ileft
+ sub $out, $ooff, $out
+ ba .L${bits}_xts_${dir}loop ! one more time
+ mov 1, $len ! $rem is 0
+___
+$code.=<<___;
+ ret
+ restore
+.type ${alg}${bits}_t4_xts_${dir}crypt,#function
+.size ${alg}${bits}_t4_xts_${dir}crypt,.-${alg}${bits}_t4_xts_${dir}crypt
+___
+}
+
+# Purpose of these subroutines is to explicitly encode VIS instructions,
+# so that one can compile the module without having to specify VIS
+# extentions on compiler command line, e.g. -xarch=v9 vs. -xarch=v9a.
+# Idea is to reserve for option to produce "universal" binary and let
+# programmer detect if current CPU is VIS capable at run-time.
+sub unvis {
+my ($mnemonic,$rs1,$rs2,$rd)=@_;
+my ($ref,$opf);
+my %visopf = ( "faligndata" => 0x048,
+ "bshuffle" => 0x04c,
+ "fnot2" => 0x066,
+ "fxor" => 0x06c,
+ "fsrc2" => 0x078 );
+
+ $ref = "$mnemonic\t$rs1,$rs2,$rd";
+
+ if ($opf=$visopf{$mnemonic}) {
+ foreach ($rs1,$rs2,$rd) {
+ return $ref if (!/%f([0-9]{1,2})/);
+ $_=$1;
+ if ($1>=32) {
+ return $ref if ($1&1);
+ # re-encode for upper double register addressing
+ $_=($1|$1>>5)&31;
+ }
+ }
+
+ return sprintf ".word\t0x%08x !%s",
+ 0x81b00000|$rd<<25|$rs1<<14|$opf<<5|$rs2,
+ $ref;
+ } else {
+ return $ref;
+ }
+}
+
+sub unvis3 {
+my ($mnemonic,$rs1,$rs2,$rd)=@_;
+my %bias = ( "g" => 0, "o" => 8, "l" => 16, "i" => 24 );
+my ($ref,$opf);
+my %visopf = ( "addxc" => 0x011,
+ "addxccc" => 0x013,
+ "umulxhi" => 0x016,
+ "alignaddr" => 0x018,
+ "bmask" => 0x019,
+ "alignaddrl" => 0x01a );
+
+ $ref = "$mnemonic\t$rs1,$rs2,$rd";
+
+ if ($opf=$visopf{$mnemonic}) {
+ foreach ($rs1,$rs2,$rd) {
+ return $ref if (!/%([goli])([0-9])/);
+ $_=$bias{$1}+$2;
+ }
+
+ return sprintf ".word\t0x%08x !%s",
+ 0x81b00000|$rd<<25|$rs1<<14|$opf<<5|$rs2,
+ $ref;
+ } else {
+ return $ref;
+ }
+}
+
+sub unaes_round { # 4-argument instructions
+my ($mnemonic,$rs1,$rs2,$rs3,$rd)=@_;
+my ($ref,$opf);
+my %aesopf = ( "aes_eround01" => 0,
+ "aes_eround23" => 1,
+ "aes_dround01" => 2,
+ "aes_dround23" => 3,
+ "aes_eround01_l"=> 4,
+ "aes_eround23_l"=> 5,
+ "aes_dround01_l"=> 6,
+ "aes_dround23_l"=> 7,
+ "aes_kexpand1" => 8 );
+
+ $ref = "$mnemonic\t$rs1,$rs2,$rs3,$rd";
+
+ if (defined($opf=$aesopf{$mnemonic})) {
+ $rs3 = ($rs3 =~ /%f([0-6]*[02468])/) ? (($1|$1>>5)&31) : $rs3;
+ foreach ($rs1,$rs2,$rd) {
+ return $ref if (!/%f([0-9]{1,2})/);
+ $_=$1;
+ if ($1>=32) {
+ return $ref if ($1&1);
+ # re-encode for upper double register addressing
+ $_=($1|$1>>5)&31;
+ }
+ }
+
+ return sprintf ".word\t0x%08x !%s",
+ 2<<30|$rd<<25|0x19<<19|$rs1<<14|$rs3<<9|$opf<<5|$rs2,
+ $ref;
+ } else {
+ return $ref;
+ }
+}
+
+sub unaes_kexpand { # 3-argument instructions
+my ($mnemonic,$rs1,$rs2,$rd)=@_;
+my ($ref,$opf);
+my %aesopf = ( "aes_kexpand0" => 0x130,
+ "aes_kexpand2" => 0x131 );
+
+ $ref = "$mnemonic\t$rs1,$rs2,$rd";
+
+ if (defined($opf=$aesopf{$mnemonic})) {
+ foreach ($rs1,$rs2,$rd) {
+ return $ref if (!/%f([0-9]{1,2})/);
+ $_=$1;
+ if ($1>=32) {
+ return $ref if ($1&1);
+ # re-encode for upper double register addressing
+ $_=($1|$1>>5)&31;
+ }
+ }
+
+ return sprintf ".word\t0x%08x !%s",
+ 2<<30|$rd<<25|0x36<<19|$rs1<<14|$opf<<5|$rs2,
+ $ref;
+ } else {
+ return $ref;
+ }
+}
+
+sub uncamellia_f { # 4-argument instructions
+my ($mnemonic,$rs1,$rs2,$rs3,$rd)=@_;
+my ($ref,$opf);
+
+ $ref = "$mnemonic\t$rs1,$rs2,$rs3,$rd";
+
+ if (1) {
+ $rs3 = ($rs3 =~ /%f([0-6]*[02468])/) ? (($1|$1>>5)&31) : $rs3;
+ foreach ($rs1,$rs2,$rd) {
+ return $ref if (!/%f([0-9]{1,2})/);
+ $_=$1;
+ if ($1>=32) {
+ return $ref if ($1&1);
+ # re-encode for upper double register addressing
+ $_=($1|$1>>5)&31;
+ }
+ }
+
+ return sprintf ".word\t0x%08x !%s",
+ 2<<30|$rd<<25|0x19<<19|$rs1<<14|$rs3<<9|0xc<<5|$rs2,
+ $ref;
+ } else {
+ return $ref;
+ }
+}
+
+sub uncamellia3 { # 3-argument instructions
+my ($mnemonic,$rs1,$rs2,$rd)=@_;
+my ($ref,$opf);
+my %cmllopf = ( "camellia_fl" => 0x13c,
+ "camellia_fli" => 0x13d );
+
+ $ref = "$mnemonic\t$rs1,$rs2,$rd";
+
+ if (defined($opf=$cmllopf{$mnemonic})) {
+ foreach ($rs1,$rs2,$rd) {
+ return $ref if (!/%f([0-9]{1,2})/);
+ $_=$1;
+ if ($1>=32) {
+ return $ref if ($1&1);
+ # re-encode for upper double register addressing
+ $_=($1|$1>>5)&31;
+ }
+ }
+
+ return sprintf ".word\t0x%08x !%s",
+ 2<<30|$rd<<25|0x36<<19|$rs1<<14|$opf<<5|$rs2,
+ $ref;
+ } else {
+ return $ref;
+ }
+}
+
+sub unmovxtox { # 2-argument instructions
+my ($mnemonic,$rs,$rd)=@_;
+my %bias = ( "g" => 0, "o" => 8, "l" => 16, "i" => 24, "f" => 0 );
+my ($ref,$opf);
+my %movxopf = ( "movdtox" => 0x110,
+ "movstouw" => 0x111,
+ "movstosw" => 0x113,
+ "movxtod" => 0x118,
+ "movwtos" => 0x119 );
+
+ $ref = "$mnemonic\t$rs,$rd";
+
+ if (defined($opf=$movxopf{$mnemonic})) {
+ foreach ($rs,$rd) {
+ return $ref if (!/%([fgoli])([0-9]{1,2})/);
+ $_=$bias{$1}+$2;
+ if ($2>=32) {
+ return $ref if ($2&1);
+ # re-encode for upper double register addressing
+ $_=($2|$2>>5)&31;
+ }
+ }
+
+ return sprintf ".word\t0x%08x !%s",
+ 2<<30|$rd<<25|0x36<<19|$opf<<5|$rs,
+ $ref;
+ } else {
+ return $ref;
+ }
+}
+
+sub undes {
+my ($mnemonic)=shift;
+my @args=@_;
+my ($ref,$opf);
+my %desopf = ( "des_round" => 0b1001,
+ "des_ip" => 0b100110100,
+ "des_iip" => 0b100110101,
+ "des_kexpand" => 0b100110110 );
+
+ $ref = "$mnemonic\t".join(",",@_);
+
+ if (defined($opf=$desopf{$mnemonic})) { # 4-arg
+ if ($mnemonic eq "des_round") {
+ foreach (@args[0..3]) {
+ return $ref if (!/%f([0-9]{1,2})/);
+ $_=$1;
+ if ($1>=32) {
+ return $ref if ($1&1);
+ # re-encode for upper double register addressing
+ $_=($1|$1>>5)&31;
+ }
+ }
+ return sprintf ".word\t0x%08x !%s",
+ 2<<30|0b011001<<19|$opf<<5|$args[0]<<14|$args[1]|$args[2]<<9|$args[3]<<25,
+ $ref;
+ } elsif ($mnemonic eq "des_kexpand") { # 3-arg
+ foreach (@args[0..2]) {
+ return $ref if (!/(%f)?([0-9]{1,2})/);
+ $_=$2;
+ if ($2>=32) {
+ return $ref if ($2&1);
+ # re-encode for upper double register addressing
+ $_=($2|$2>>5)&31;
+ }
+ }
+ return sprintf ".word\t0x%08x !%s",
+ 2<<30|0b110110<<19|$opf<<5|$args[0]<<14|$args[1]|$args[2]<<25,
+ $ref;
+ } else { # 2-arg
+ foreach (@args[0..1]) {
+ return $ref if (!/%f([0-9]{1,2})/);
+ $_=$1;
+ if ($1>=32) {
+ return $ref if ($2&1);
+ # re-encode for upper double register addressing
+ $_=($1|$1>>5)&31;
+ }
+ }
+ return sprintf ".word\t0x%08x !%s",
+ 2<<30|0b110110<<19|$opf<<5|$args[0]<<14|$args[1]<<25,
+ $ref;
+ }
+ } else {
+ return $ref;
+ }
+}
+
+sub emit_assembler {
+ foreach (split("\n",$::code)) {
+ s/\`([^\`]*)\`/eval $1/ge;
+
+ s/\b(f[a-z]+2[sd]*)\s+(%f[0-9]{1,2}),\s*(%f[0-9]{1,2})\s*$/$1\t%f0,$2,$3/go;
+
+ s/\b(aes_[edk][^\s]*)\s+(%f[0-9]{1,2}),\s*(%f[0-9]{1,2}),\s*([%fx0-9]+),\s*(%f[0-9]{1,2})/
+ &unaes_round($1,$2,$3,$4,$5)
+ /geo or
+ s/\b(aes_kexpand[02])\s+(%f[0-9]{1,2}),\s*(%f[0-9]{1,2}),\s*(%f[0-9]{1,2})/
+ &unaes_kexpand($1,$2,$3,$4)
+ /geo or
+ s/\b(camellia_f)\s+(%f[0-9]{1,2}),\s*(%f[0-9]{1,2}),\s*([%fx0-9]+),\s*(%f[0-9]{1,2})/
+ &uncamellia_f($1,$2,$3,$4,$5)
+ /geo or
+ s/\b(camellia_[^s]+)\s+(%f[0-9]{1,2}),\s*(%f[0-9]{1,2}),\s*(%f[0-9]{1,2})/
+ &uncamellia3($1,$2,$3,$4)
+ /geo or
+ s/\b(des_\w+)\s+(%f[0-9]{1,2}),\s*([%fx0-9]+)(?:,\s*(%f[0-9]{1,2})(?:,\s*(%f[0-9]{1,2}))?)?/
+ &undes($1,$2,$3,$4,$5)
+ /geo or
+ s/\b(mov[ds]to\w+)\s+(%f[0-9]{1,2}),\s*(%[goli][0-7])/
+ &unmovxtox($1,$2,$3)
+ /geo or
+ s/\b(mov[xw]to[ds])\s+(%[goli][0-7]),\s*(%f[0-9]{1,2})/
+ &unmovxtox($1,$2,$3)
+ /geo or
+ s/\b([fb][^\s]*)\s+(%f[0-9]{1,2}),\s*(%f[0-9]{1,2}),\s*(%f[0-9]{1,2})/
+ &unvis($1,$2,$3,$4)
+ /geo or
+ s/\b(umulxhi|bmask|addxc[c]{0,2}|alignaddr[l]*)\s+(%[goli][0-7]),\s*(%[goli][0-7]),\s*(%[goli][0-7])/
+ &unvis3($1,$2,$3,$4)
+ /geo;
+
+ print $_,"\n";
+ }
+}
+
+1;
diff --git a/crypto/openssl/crypto/perlasm/x86_64-xlate.pl b/crypto/openssl/crypto/perlasm/x86_64-xlate.pl
index 56d9b64..9c70b8c 100755
--- a/crypto/openssl/crypto/perlasm/x86_64-xlate.pl
+++ b/crypto/openssl/crypto/perlasm/x86_64-xlate.pl
@@ -121,7 +121,7 @@ my %globals;
$self->{sz} = "";
} elsif ($self->{op} =~ /^v/) { # VEX
$self->{sz} = "";
- } elsif ($self->{op} =~ /movq/ && $line =~ /%xmm/) {
+ } elsif ($self->{op} =~ /mov[dq]/ && $line =~ /%xmm/) {
$self->{sz} = "";
} elsif ($self->{op} =~ /([a-z]{3,})([qlwb])$/) {
$self->{op} = $1;
@@ -250,8 +250,13 @@ my %globals;
# in $self->{label}, new gas requires sign extension...
use integer;
$self->{label} =~ s/(?<![\w\$\.])(0x?[0-9a-f]+)/oct($1)/egi;
- $self->{label} =~ s/([0-9]+\s*[\*\/\%]\s*[0-9]+)/eval($1)/eg;
- $self->{label} =~ s/([0-9]+)/$1<<32>>32/eg;
+ $self->{label} =~ s/\b([0-9]+\s*[\*\/\%]\s*[0-9]+)\b/eval($1)/eg;
+ $self->{label} =~ s/\b([0-9]+)\b/$1<<32>>32/eg;
+
+ if (!$self->{label} && $self->{index} && $self->{scale}==1 &&
+ $self->{base} =~ /(rbp|r13)/) {
+ $self->{base} = $self->{index}; $self->{index} = $1;
+ }
if ($gas) {
$self->{label} =~ s/^___imp_/__imp__/ if ($flavour eq "mingw64");
@@ -265,14 +270,20 @@ my %globals;
sprintf "%s%s(%%%s)", $self->{asterisk},$self->{label},$self->{base};
}
} else {
- %szmap = ( b=>"BYTE$PTR", w=>"WORD$PTR", l=>"DWORD$PTR",
- q=>"QWORD$PTR",o=>"OWORD$PTR",x=>"XMMWORD$PTR" );
+ %szmap = ( b=>"BYTE$PTR", w=>"WORD$PTR",
+ l=>"DWORD$PTR", d=>"DWORD$PTR",
+ q=>"QWORD$PTR", o=>"OWORD$PTR",
+ x=>"XMMWORD$PTR", y=>"YMMWORD$PTR", z=>"ZMMWORD$PTR" );
$self->{label} =~ s/\./\$/g;
$self->{label} =~ s/(?<![\w\$\.])0x([0-9a-f]+)/0$1h/ig;
$self->{label} = "($self->{label})" if ($self->{label} =~ /[\*\+\-\/]/);
- $sz="q" if ($self->{asterisk} || opcode->mnemonic() eq "movq");
- $sz="l" if (opcode->mnemonic() eq "movd");
+
+ ($self->{asterisk}) && ($sz="q") ||
+ (opcode->mnemonic() =~ /^v?mov([qd])$/) && ($sz=$1) ||
+ (opcode->mnemonic() =~ /^v?pinsr([qdwb])$/) && ($sz=$1) ||
+ (opcode->mnemonic() =~ /^vpbroadcast([qdwb])$/) && ($sz=$1) ||
+ (opcode->mnemonic() =~ /^vinsert[fi]128$/) && ($sz="x");
if (defined($self->{index})) {
sprintf "%s[%s%s*%d%s]",$szmap{$sz},
@@ -412,7 +423,7 @@ my %globals;
}
sub out {
my $self = shift;
- if ($nasm && opcode->mnemonic()=~m/^j/) {
+ if ($nasm && opcode->mnemonic()=~m/^j(?![re]cxz)/) {
"NEAR ".$self->{value};
} else {
$self->{value};
@@ -530,7 +541,7 @@ my %globals;
$v="$current_segment\tENDS\n" if ($current_segment);
$current_segment = ".text\$";
$v.="$current_segment\tSEGMENT ";
- $v.=$masm>=$masmref ? "ALIGN(64)" : "PAGE";
+ $v.=$masm>=$masmref ? "ALIGN(256)" : "PAGE";
$v.=" 'CODE'";
}
$self->{value} = $v;
@@ -772,10 +783,64 @@ my $rdrand = sub {
}
};
+my $rdseed = sub {
+ if (shift =~ /%[er](\w+)/) {
+ my @opcode=();
+ my $dst=$1;
+ if ($dst !~ /[0-9]+/) { $dst = $regrm{"%e$dst"}; }
+ rex(\@opcode,0,$1,8);
+ push @opcode,0x0f,0xc7,0xf8|($dst&7);
+ @opcode;
+ } else {
+ ();
+ }
+};
+
+sub rxb {
+ local *opcode=shift;
+ my ($dst,$src1,$src2,$rxb)=@_;
+
+ $rxb|=0x7<<5;
+ $rxb&=~(0x04<<5) if($dst>=8);
+ $rxb&=~(0x01<<5) if($src1>=8);
+ $rxb&=~(0x02<<5) if($src2>=8);
+ push @opcode,$rxb;
+}
+
+my $vprotd = sub {
+ if (shift =~ /\$([x0-9a-f]+),\s*%xmm([0-9]+),\s*%xmm([0-9]+)/) {
+ my @opcode=(0x8f);
+ rxb(\@opcode,$3,$2,-1,0x08);
+ push @opcode,0x78,0xc2;
+ push @opcode,0xc0|($2&7)|(($3&7)<<3); # ModR/M
+ my $c=$1;
+ push @opcode,$c=~/^0/?oct($c):$c;
+ @opcode;
+ } else {
+ ();
+ }
+};
+
+my $vprotq = sub {
+ if (shift =~ /\$([x0-9a-f]+),\s*%xmm([0-9]+),\s*%xmm([0-9]+)/) {
+ my @opcode=(0x8f);
+ rxb(\@opcode,$3,$2,-1,0x08);
+ push @opcode,0x78,0xc3;
+ push @opcode,0xc0|($2&7)|(($3&7)<<3); # ModR/M
+ my $c=$1;
+ push @opcode,$c=~/^0/?oct($c):$c;
+ @opcode;
+ } else {
+ ();
+ }
+};
+
if ($nasm) {
print <<___;
default rel
%define XMMWORD
+%define YMMWORD
+%define ZMMWORD
___
} elsif ($masm) {
print <<___;
@@ -789,6 +854,7 @@ while($line=<>) {
$line =~ s|[#!].*$||; # get rid of asm-style comments...
$line =~ s|/\*.*\*/||; # ... and C-style comments...
$line =~ s|^\s+||; # ... and skip white spaces in beginning
+ $line =~ s|\s+$||; # ... and at the end
undef $label;
undef $opcode;
@@ -837,6 +903,8 @@ while($line=<>) {
my $arg = $_->out();
# $insn.=$sz compensates for movq, pinsrw, ...
if ($arg =~ /^xmm[0-9]+$/) { $insn.=$sz; $sz="x" if(!$sz); last; }
+ if ($arg =~ /^ymm[0-9]+$/) { $insn.=$sz; $sz="y" if(!$sz); last; }
+ if ($arg =~ /^zmm[0-9]+$/) { $insn.=$sz; $sz="z" if(!$sz); last; }
if ($arg =~ /^mm[0-9]+$/) { $insn.=$sz; $sz="q" if(!$sz); last; }
}
@args = reverse(@args);
diff --git a/crypto/openssl/crypto/perlasm/x86asm.pl b/crypto/openssl/crypto/perlasm/x86asm.pl
index eb543db..cae156a 100644
--- a/crypto/openssl/crypto/perlasm/x86asm.pl
+++ b/crypto/openssl/crypto/perlasm/x86asm.pl
@@ -131,6 +131,40 @@ sub ::rdrand
{ &::generic("rdrand",@_); }
}
+sub ::rdseed
+{ my ($dst)=@_;
+ if ($dst =~ /(e[a-dsd][ixp])/)
+ { &::data_byte(0x0f,0xc7,0xf8|$regrm{$dst}); }
+ else
+ { &::generic("rdrand",@_); }
+}
+
+sub rxb {
+ local *opcode=shift;
+ my ($dst,$src1,$src2,$rxb)=@_;
+
+ $rxb|=0x7<<5;
+ $rxb&=~(0x04<<5) if($dst>=8);
+ $rxb&=~(0x01<<5) if($src1>=8);
+ $rxb&=~(0x02<<5) if($src2>=8);
+ push @opcode,$rxb;
+}
+
+sub ::vprotd
+{ my $args=join(',',@_);
+ if ($args =~ /xmm([0-7]),xmm([0-7]),([x0-9a-f]+)/)
+ { my @opcode=(0x8f);
+ rxb(\@opcode,$1,$2,-1,0x08);
+ push @opcode,0x78,0xc2;
+ push @opcode,0xc0|($2&7)|(($1&7)<<3); # ModR/M
+ my $c=$3;
+ push @opcode,$c=~/^0/?oct($c):$c;
+ &::data_byte(@opcode);
+ }
+ else
+ { &::generic("vprotd",@_); }
+}
+
# label management
$lbdecor="L"; # local label decoration, set by package
$label="000";
@@ -221,6 +255,8 @@ sub ::asm_init
$elf=$cpp=$coff=$aout=$macosx=$win32=$netware=$mwerks=$android=0;
if (($type eq "elf"))
{ $elf=1; require "x86gas.pl"; }
+ elsif (($type eq "elf-1"))
+ { $elf=-1; require "x86gas.pl"; }
elsif (($type eq "a\.out"))
{ $aout=1; require "x86gas.pl"; }
elsif (($type eq "coff" or $type eq "gaswin"))
@@ -257,4 +293,6 @@ EOF
&file($filename);
}
+sub ::hidden {}
+
1;
diff --git a/crypto/openssl/crypto/perlasm/x86gas.pl b/crypto/openssl/crypto/perlasm/x86gas.pl
index 682a3a3..63b2301 100755
--- a/crypto/openssl/crypto/perlasm/x86gas.pl
+++ b/crypto/openssl/crypto/perlasm/x86gas.pl
@@ -70,6 +70,8 @@ sub ::DWP
{ my($addr,$reg1,$reg2,$idx)=@_;
my $ret="";
+ if (!defined($idx) && 1*$reg2) { $idx=$reg2; $reg2=$reg1; undef $reg1; }
+
$addr =~ s/^\s+//;
# prepend global references with optional underscore
$addr =~ s/^([^\+\-0-9][^\+\-]*)/&::islabel($1) or "$nmdecor$1"/ige;
@@ -157,7 +159,7 @@ sub ::file_end
}
}
if (grep {/\b${nmdecor}OPENSSL_ia32cap_P\b/i} @out) {
- my $tmp=".comm\t${nmdecor}OPENSSL_ia32cap_P,8";
+ my $tmp=".comm\t${nmdecor}OPENSSL_ia32cap_P,16";
if ($::macosx) { push (@out,"$tmp,2\n"); }
elsif ($::elf) { push (@out,"$tmp,4\n"); }
else { push (@out,"$tmp\n"); }
@@ -170,10 +172,9 @@ sub ::data_short{ push(@out,".value\t".join(',',@_)."\n"); }
sub ::data_word { push(@out,".long\t".join(',',@_)."\n"); }
sub ::align
-{ my $val=$_[0],$p2,$i;
+{ my $val=$_[0];
if ($::aout)
- { for ($p2=0;$val!=0;$val>>=1) { $p2++; }
- $val=$p2-1;
+ { $val=int(log($val)/log(2));
$val.=",0x90";
}
push(@out,".align\t$val\n");
@@ -195,6 +196,8 @@ sub ::picmeup
&::mov($dst,&::DWP("$indirect-$reflabel",$base));
$non_lazy_ptr{"$nmdecor$sym"}=$indirect;
}
+ elsif ($sym eq "OPENSSL_ia32cap_P" && $::elf>0)
+ { &::lea($dst,&::DWP("$sym-$reflabel",$base)); }
else
{ &::lea($dst,&::DWP("_GLOBAL_OFFSET_TABLE_+[.-$reflabel]",
$base));
@@ -250,4 +253,6 @@ ___
sub ::dataseg
{ push(@out,".data\n"); }
+*::hidden = sub { push(@out,".hidden\t$nmdecor$_[0]\n"); } if ($::elf);
+
1;
diff --git a/crypto/openssl/crypto/perlasm/x86masm.pl b/crypto/openssl/crypto/perlasm/x86masm.pl
index f937d07..1741342 100755
--- a/crypto/openssl/crypto/perlasm/x86masm.pl
+++ b/crypto/openssl/crypto/perlasm/x86masm.pl
@@ -39,6 +39,8 @@ sub get_mem
{ my($size,$addr,$reg1,$reg2,$idx)=@_;
my($post,$ret);
+ if (!defined($idx) && 1*$reg2) { $idx=$reg2; $reg2=$reg1; undef $reg1; }
+
$ret .= "$size PTR " if ($size ne "");
$addr =~ s/^\s+//;
@@ -133,7 +135,7 @@ ___
if (grep {/\b${nmdecor}OPENSSL_ia32cap_P\b/i} @out)
{ my $comm=<<___;
.bss SEGMENT 'BSS'
-COMM ${nmdecor}OPENSSL_ia32cap_P:QWORD
+COMM ${nmdecor}OPENSSL_ia32cap_P:DWORD:4
.bss ENDS
___
# comment out OPENSSL_ia32cap_P declarations
diff --git a/crypto/openssl/crypto/perlasm/x86nasm.pl b/crypto/openssl/crypto/perlasm/x86nasm.pl
index ca2511c..5d92f60 100644
--- a/crypto/openssl/crypto/perlasm/x86nasm.pl
+++ b/crypto/openssl/crypto/perlasm/x86nasm.pl
@@ -36,6 +36,8 @@ sub get_mem
{ my($size,$addr,$reg1,$reg2,$idx)=@_;
my($post,$ret);
+ if (!defined($idx) && 1*$reg2) { $idx=$reg2; $reg2=$reg1; undef $reg1; }
+
if ($size ne "")
{ $ret .= "$size";
$ret .= " PTR" if ($::mwerks);
@@ -117,7 +119,7 @@ sub ::file_end
{ if (grep {/\b${nmdecor}OPENSSL_ia32cap_P\b/i} @out)
{ my $comm=<<___;
${drdecor}segment .bss
-${drdecor}common ${nmdecor}OPENSSL_ia32cap_P 8
+${drdecor}common ${nmdecor}OPENSSL_ia32cap_P 16
___
# comment out OPENSSL_ia32cap_P declarations
grep {s/(^extern\s+${nmdecor}OPENSSL_ia32cap_P)/\;$1/} @out;
diff --git a/crypto/openssl/crypto/pkcs12/p12_decr.c b/crypto/openssl/crypto/pkcs12/p12_decr.c
index d46eae3..b40ea10 100644
--- a/crypto/openssl/crypto/pkcs12/p12_decr.c
+++ b/crypto/openssl/crypto/pkcs12/p12_decr.c
@@ -171,28 +171,32 @@ ASN1_OCTET_STRING *PKCS12_item_i2d_encrypt(X509_ALGOR *algor,
const char *pass, int passlen,
void *obj, int zbuf)
{
- ASN1_OCTET_STRING *oct;
+ ASN1_OCTET_STRING *oct = NULL;
unsigned char *in = NULL;
int inlen;
if (!(oct = M_ASN1_OCTET_STRING_new())) {
PKCS12err(PKCS12_F_PKCS12_ITEM_I2D_ENCRYPT, ERR_R_MALLOC_FAILURE);
- return NULL;
+ goto err;
}
inlen = ASN1_item_i2d(obj, &in, it);
if (!in) {
PKCS12err(PKCS12_F_PKCS12_ITEM_I2D_ENCRYPT, PKCS12_R_ENCODE_ERROR);
- return NULL;
+ goto err;
}
if (!PKCS12_pbe_crypt(algor, pass, passlen, in, inlen, &oct->data,
&oct->length, 1)) {
PKCS12err(PKCS12_F_PKCS12_ITEM_I2D_ENCRYPT, PKCS12_R_ENCRYPT_ERROR);
OPENSSL_free(in);
- return NULL;
+ goto err;
}
if (zbuf)
OPENSSL_cleanse(in, inlen);
OPENSSL_free(in);
return oct;
+ err:
+ if (oct)
+ ASN1_OCTET_STRING_free(oct);
+ return NULL;
}
IMPLEMENT_PKCS12_STACK_OF(PKCS7)
diff --git a/crypto/openssl/crypto/pkcs12/p12_p8e.c b/crypto/openssl/crypto/pkcs12/p12_p8e.c
index d970f05..861a087 100644
--- a/crypto/openssl/crypto/pkcs12/p12_p8e.c
+++ b/crypto/openssl/crypto/pkcs12/p12_p8e.c
@@ -76,8 +76,12 @@ X509_SIG *PKCS8_encrypt(int pbe_nid, const EVP_CIPHER *cipher,
if (pbe_nid == -1)
pbe = PKCS5_pbe2_set(cipher, iter, salt, saltlen);
- else
+ else if (EVP_PBE_find(EVP_PBE_TYPE_PRF, pbe_nid, NULL, NULL, 0))
+ pbe = PKCS5_pbe2_set_iv(cipher, iter, salt, saltlen, NULL, pbe_nid);
+ else {
+ ERR_clear_error();
pbe = PKCS5_pbe_set(pbe_nid, iter, salt, saltlen);
+ }
if (!pbe) {
PKCS12err(PKCS12_F_PKCS8_ENCRYPT, ERR_R_ASN1_LIB);
goto err;
diff --git a/crypto/openssl/crypto/ppc_arch.h b/crypto/openssl/crypto/ppc_arch.h
new file mode 100644
index 0000000..b50ec99
--- /dev/null
+++ b/crypto/openssl/crypto/ppc_arch.h
@@ -0,0 +1,10 @@
+#ifndef __PPC_ARCH_H__
+# define __PPC_ARCH_H__
+
+extern unsigned int OPENSSL_ppccap_P;
+
+# define PPC_FPU64 (1<<0)
+# define PPC_ALTIVEC (1<<1)
+# define PPC_CRYPTO207 (1<<2)
+
+#endif
diff --git a/crypto/openssl/crypto/ppccap.c b/crypto/openssl/crypto/ppccap.c
index 5242294..2b7f704 100644
--- a/crypto/openssl/crypto/ppccap.c
+++ b/crypto/openssl/crypto/ppccap.c
@@ -4,13 +4,15 @@
#include <setjmp.h>
#include <signal.h>
#include <unistd.h>
+#if defined(__linux) || defined(_AIX)
+# include <sys/utsname.h>
+#endif
#include <crypto.h>
#include <openssl/bn.h>
-#define PPC_FPU64 (1<<0)
-#define PPC_ALTIVEC (1<<1)
+#include "ppc_arch.h"
-static int OPENSSL_ppccap_P = 0;
+unsigned int OPENSSL_ppccap_P = 0;
static sigset_t all_masked;
@@ -25,7 +27,7 @@ int bn_mul_mont(BN_ULONG *rp, const BN_ULONG *ap, const BN_ULONG *bp,
const BN_ULONG *np, const BN_ULONG *n0, int num);
if (sizeof(size_t) == 4) {
-# if (defined(__APPLE__) && defined(__MACH__))
+# if 1 || (defined(__APPLE__) && defined(__MACH__))
if (num >= 8 && (num & 3) == 0 && (OPENSSL_ppccap_P & PPC_FPU64))
return bn_mul_mont_fpu64(rp, ap, bp, np, n0, num);
# else
@@ -55,6 +57,22 @@ int bn_mul_mont(BN_ULONG *rp, const BN_ULONG *ap, const BN_ULONG *bp,
}
#endif
+void sha256_block_p8(void *ctx, const void *inp, size_t len);
+void sha256_block_ppc(void *ctx, const void *inp, size_t len);
+void sha256_block_data_order(void *ctx, const void *inp, size_t len)
+{
+ OPENSSL_ppccap_P & PPC_CRYPTO207 ? sha256_block_p8(ctx, inp, len) :
+ sha256_block_ppc(ctx, inp, len);
+}
+
+void sha512_block_p8(void *ctx, const void *inp, size_t len);
+void sha512_block_ppc(void *ctx, const void *inp, size_t len);
+void sha512_block_data_order(void *ctx, const void *inp, size_t len)
+{
+ OPENSSL_ppccap_P & PPC_CRYPTO207 ? sha512_block_p8(ctx, inp, len) :
+ sha512_block_ppc(ctx, inp, len);
+}
+
static sigjmp_buf ill_jmp;
static void ill_handler(int sig)
{
@@ -63,6 +81,7 @@ static void ill_handler(int sig)
void OPENSSL_ppc64_probe(void);
void OPENSSL_altivec_probe(void);
+void OPENSSL_crypto207_probe(void);
void OPENSSL_cpuid_setup(void)
{
@@ -93,12 +112,15 @@ void OPENSSL_cpuid_setup(void)
OPENSSL_ppccap_P = 0;
#if defined(_AIX)
- if (sizeof(size_t) == 4
+ if (sizeof(size_t) == 4) {
+ struct utsname uts;
# if defined(_SC_AIX_KERNEL_BITMODE)
- && sysconf(_SC_AIX_KERNEL_BITMODE) != 64
+ if (sysconf(_SC_AIX_KERNEL_BITMODE) != 64)
+ return;
# endif
- )
- return;
+ if (uname(&uts) != 0 || atoi(uts.version) < 6)
+ return;
+ }
#endif
memset(&ill_act, 0, sizeof(ill_act));
@@ -109,10 +131,14 @@ void OPENSSL_cpuid_setup(void)
sigaction(SIGILL, &ill_act, &ill_oact);
if (sizeof(size_t) == 4) {
- if (sigsetjmp(ill_jmp, 1) == 0) {
- OPENSSL_ppc64_probe();
- OPENSSL_ppccap_P |= PPC_FPU64;
- }
+#ifdef __linux
+ struct utsname uts;
+ if (uname(&uts) == 0 && strcmp(uts.machine, "ppc64") == 0)
+#endif
+ if (sigsetjmp(ill_jmp, 1) == 0) {
+ OPENSSL_ppc64_probe();
+ OPENSSL_ppccap_P |= PPC_FPU64;
+ }
} else {
/*
* Wanted code detecting POWER6 CPU and setting PPC_FPU64
@@ -122,6 +148,10 @@ void OPENSSL_cpuid_setup(void)
if (sigsetjmp(ill_jmp, 1) == 0) {
OPENSSL_altivec_probe();
OPENSSL_ppccap_P |= PPC_ALTIVEC;
+ if (sigsetjmp(ill_jmp, 1) == 0) {
+ OPENSSL_crypto207_probe();
+ OPENSSL_ppccap_P |= PPC_CRYPTO207;
+ }
}
sigaction(SIGILL, &ill_oact, NULL);
diff --git a/crypto/openssl/crypto/ppccpuid.pl b/crypto/openssl/crypto/ppccpuid.pl
index 4ba736a..8d800fe 100755
--- a/crypto/openssl/crypto/ppccpuid.pl
+++ b/crypto/openssl/crypto/ppccpuid.pl
@@ -31,6 +31,7 @@ $code=<<___;
blr
.long 0
.byte 0,12,0x14,0,0,0,0,0
+.size .OPENSSL_ppc64_probe,.-.OPENSSL_ppc64_probe
.globl .OPENSSL_altivec_probe
.align 4
@@ -39,6 +40,17 @@ $code=<<___;
blr
.long 0
.byte 0,12,0x14,0,0,0,0,0
+.size .OPENSSL_altivec_probe,.-..OPENSSL_altivec_probe
+
+.globl .OPENSSL_crypto207_probe
+.align 4
+.OPENSSL_crypto207_probe:
+ lvx_u v0,0,r1
+ vcipher v0,v0,v0
+ blr
+ .long 0
+ .byte 0,12,0x14,0,0,0,0,0
+.size .OPENSSL_crypto207_probe,.-.OPENSSL_crypto207_probe
.globl .OPENSSL_wipe_cpu
.align 4
@@ -71,6 +83,7 @@ $code=<<___;
blr
.long 0
.byte 0,12,0x14,0,0,0,0,0
+.size .OPENSSL_wipe_cpu,.-.OPENSSL_wipe_cpu
.globl .OPENSSL_atomic_add
.align 4
@@ -84,6 +97,7 @@ Ladd: lwarx r5,0,r3
.long 0
.byte 0,12,0x14,0,0,0,2,0
.long 0
+.size .OPENSSL_atomic_add,.-.OPENSSL_atomic_add
.globl .OPENSSL_rdtsc
.align 4
@@ -93,6 +107,7 @@ Ladd: lwarx r5,0,r3
blr
.long 0
.byte 0,12,0x14,0,0,0,0,0
+.size .OPENSSL_rdtsc,.-.OPENSSL_rdtsc
.globl .OPENSSL_cleanse
.align 4
@@ -125,6 +140,7 @@ Laligned:
.long 0
.byte 0,12,0x14,0,0,0,2,0
.long 0
+.size .OPENSSL_cleanse,.-.OPENSSL_cleanse
___
$code =~ s/\`([^\`]*)\`/eval $1/gem;
diff --git a/crypto/openssl/crypto/rc4/Makefile b/crypto/openssl/crypto/rc4/Makefile
index f3d6e0d..7434ff7 100644
--- a/crypto/openssl/crypto/rc4/Makefile
+++ b/crypto/openssl/crypto/rc4/Makefile
@@ -42,7 +42,7 @@ lib: $(LIBOBJ)
@touch lib
rc4-586.s: asm/rc4-586.pl ../perlasm/x86asm.pl
- $(PERL) asm/rc4-586.pl $(PERLASM_SCHEME) $(CFLAGS) > $@
+ $(PERL) asm/rc4-586.pl $(PERLASM_SCHEME) $(CFLAGS) $(PROCESSOR) > $@
rc4-x86_64.s: asm/rc4-x86_64.pl
$(PERL) asm/rc4-x86_64.pl $(PERLASM_SCHEME) > $@
@@ -66,7 +66,7 @@ rc4-ia64.s: rc4-ia64.S
rc4-%.s: asm/rc4-%.pl; $(PERL) $< $(PERLASM_SCHEME) $@
files:
- $(PERL) $(TOP)/util/files.pl Makefile >> $(TOP)/MINFO
+ $(PERL) $(TOP)/util/files.pl "RC4_ENC=$(RC4_ENC)" Makefile >> $(TOP)/MINFO
links:
@$(PERL) $(TOP)/util/mklink.pl ../../include/openssl $(EXHEADER)
diff --git a/crypto/openssl/crypto/rc4/asm/rc4-586.pl b/crypto/openssl/crypto/rc4/asm/rc4-586.pl
index 5c9ac6a..1d55d55 100644
--- a/crypto/openssl/crypto/rc4/asm/rc4-586.pl
+++ b/crypto/openssl/crypto/rc4/asm/rc4-586.pl
@@ -60,7 +60,7 @@ $0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1;
push(@INC,"${dir}","${dir}../../perlasm");
require "x86asm.pl";
-&asm_init($ARGV[0],"rc4-586.pl");
+&asm_init($ARGV[0],"rc4-586.pl",$x86only = $ARGV[$#ARGV] eq "386");
$xx="eax";
$yy="ebx";
@@ -184,8 +184,11 @@ if ($alt=0) {
&and ($ty,-4); # how many 4-byte chunks?
&jz (&label("loop1"));
- &test ($ty,-8);
&mov (&wparam(3),$out); # $out as accumulator in these loops
+ if ($x86only) {
+ &jmp (&label("go4loop4"));
+ } else {
+ &test ($ty,-8);
&jz (&label("go4loop4"));
&picmeup($out,"OPENSSL_ia32cap_P");
@@ -228,6 +231,7 @@ if ($alt=0) {
&cmp ($inp,&wparam(1)); # compare to input+len
&je (&label("done"));
&jmp (&label("loop1"));
+ }
&set_label("go4loop4",16);
&lea ($ty,&DWP(-4,$inp,$ty));
diff --git a/crypto/openssl/crypto/rc4/rc4_enc.c b/crypto/openssl/crypto/rc4/rc4_enc.c
index 6ebd54d..0f0a248 100644
--- a/crypto/openssl/crypto/rc4/rc4_enc.c
+++ b/crypto/openssl/crypto/rc4/rc4_enc.c
@@ -79,7 +79,7 @@ void RC4(RC4_KEY *key, size_t len, const unsigned char *indata,
y = key->y;
d = key->data;
-#if defined(RC4_CHUNK)
+#if defined(RC4_CHUNK) && !defined(PEDANTIC)
/*-
* The original reason for implementing this(*) was the fact that
* pre-21164a Alpha CPUs don't have byte load/store instructions
diff --git a/crypto/openssl/crypto/rc5/rc5_locl.h b/crypto/openssl/crypto/rc5/rc5_locl.h
index 1e83f19..ee757e6 100644
--- a/crypto/openssl/crypto/rc5/rc5_locl.h
+++ b/crypto/openssl/crypto/rc5/rc5_locl.h
@@ -146,9 +146,12 @@
*((c)++)=(unsigned char)(((l)>> 8L)&0xff), \
*((c)++)=(unsigned char)(((l) )&0xff))
-#if (defined(OPENSSL_SYS_WIN32) && defined(_MSC_VER)) || defined(__ICC)
+#if (defined(OPENSSL_SYS_WIN32) && defined(_MSC_VER))
# define ROTATE_l32(a,n) _lrotl(a,n)
# define ROTATE_r32(a,n) _lrotr(a,n)
+#elif defined(__ICC)
+# define ROTATE_l32(a,n) _rotl(a,n)
+# define ROTATE_r32(a,n) _rotr(a,n)
#elif defined(__GNUC__) && __GNUC__>=2 && !defined(__STRICT_ANSI__) && !defined(OPENSSL_NO_ASM) && !defined(OPENSSL_NO_INLINE_ASM) && !defined(PEDANTIC)
# if defined(__i386) || defined(__i386__) || defined(__x86_64) || defined(__x86_64__)
# define ROTATE_l32(a,n) ({ register unsigned int ret; \
diff --git a/crypto/openssl/crypto/rsa/Makefile b/crypto/openssl/crypto/rsa/Makefile
index 79c7c42..e292e84 100644
--- a/crypto/openssl/crypto/rsa/Makefile
+++ b/crypto/openssl/crypto/rsa/Makefile
@@ -228,19 +228,20 @@ rsa_pk1.o: ../cryptlib.h rsa_pk1.c
rsa_pmeth.o: ../../e_os.h ../../include/openssl/asn1.h
rsa_pmeth.o: ../../include/openssl/asn1t.h ../../include/openssl/bio.h
rsa_pmeth.o: ../../include/openssl/bn.h ../../include/openssl/buffer.h
-rsa_pmeth.o: ../../include/openssl/cms.h ../../include/openssl/crypto.h
-rsa_pmeth.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
-rsa_pmeth.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
-rsa_pmeth.o: ../../include/openssl/err.h ../../include/openssl/evp.h
-rsa_pmeth.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
-rsa_pmeth.o: ../../include/openssl/objects.h
+rsa_pmeth.o: ../../include/openssl/cms.h ../../include/openssl/conf.h
+rsa_pmeth.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
+rsa_pmeth.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
+rsa_pmeth.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
+rsa_pmeth.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h
+rsa_pmeth.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
rsa_pmeth.o: ../../include/openssl/opensslconf.h
rsa_pmeth.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
rsa_pmeth.o: ../../include/openssl/pkcs7.h ../../include/openssl/rsa.h
rsa_pmeth.o: ../../include/openssl/safestack.h ../../include/openssl/sha.h
rsa_pmeth.o: ../../include/openssl/stack.h ../../include/openssl/symhacks.h
rsa_pmeth.o: ../../include/openssl/x509.h ../../include/openssl/x509_vfy.h
-rsa_pmeth.o: ../cryptlib.h ../evp/evp_locl.h rsa_locl.h rsa_pmeth.c
+rsa_pmeth.o: ../../include/openssl/x509v3.h ../cryptlib.h ../evp/evp_locl.h
+rsa_pmeth.o: rsa_locl.h rsa_pmeth.c
rsa_prn.o: ../../e_os.h ../../include/openssl/asn1.h
rsa_prn.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h
rsa_prn.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
diff --git a/crypto/openssl/crypto/rsa/rsa.h b/crypto/openssl/crypto/rsa/rsa.h
index a8b59a9..d2ee374 100644
--- a/crypto/openssl/crypto/rsa/rsa.h
+++ b/crypto/openssl/crypto/rsa/rsa.h
@@ -262,13 +262,31 @@ struct rsa_st {
EVP_PKEY_CTRL_RSA_KEYGEN_PUBEXP, 0, pubexp)
# define EVP_PKEY_CTX_set_rsa_mgf1_md(ctx, md) \
- EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA, EVP_PKEY_OP_TYPE_SIG, \
+ EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA, \
+ EVP_PKEY_OP_TYPE_SIG | EVP_PKEY_OP_TYPE_CRYPT, \
EVP_PKEY_CTRL_RSA_MGF1_MD, 0, (void *)md)
+# define EVP_PKEY_CTX_set_rsa_oaep_md(ctx, md) \
+ EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA, EVP_PKEY_OP_TYPE_CRYPT, \
+ EVP_PKEY_CTRL_RSA_OAEP_MD, 0, (void *)md)
+
# define EVP_PKEY_CTX_get_rsa_mgf1_md(ctx, pmd) \
- EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA, EVP_PKEY_OP_TYPE_SIG, \
+ EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA, \
+ EVP_PKEY_OP_TYPE_SIG | EVP_PKEY_OP_TYPE_CRYPT, \
EVP_PKEY_CTRL_GET_RSA_MGF1_MD, 0, (void *)pmd)
+# define EVP_PKEY_CTX_get_rsa_oaep_md(ctx, pmd) \
+ EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA, EVP_PKEY_OP_TYPE_CRYPT, \
+ EVP_PKEY_CTRL_GET_RSA_OAEP_MD, 0, (void *)pmd)
+
+# define EVP_PKEY_CTX_set0_rsa_oaep_label(ctx, l, llen) \
+ EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA, EVP_PKEY_OP_TYPE_CRYPT, \
+ EVP_PKEY_CTRL_RSA_OAEP_LABEL, llen, (void *)l)
+
+# define EVP_PKEY_CTX_get0_rsa_oaep_label(ctx, l) \
+ EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_RSA, EVP_PKEY_OP_TYPE_CRYPT, \
+ EVP_PKEY_CTRL_GET_RSA_OAEP_LABEL, 0, (void *)l)
+
# define EVP_PKEY_CTRL_RSA_PADDING (EVP_PKEY_ALG_CTRL + 1)
# define EVP_PKEY_CTRL_RSA_PSS_SALTLEN (EVP_PKEY_ALG_CTRL + 2)
@@ -280,6 +298,12 @@ struct rsa_st {
# define EVP_PKEY_CTRL_GET_RSA_PSS_SALTLEN (EVP_PKEY_ALG_CTRL + 7)
# define EVP_PKEY_CTRL_GET_RSA_MGF1_MD (EVP_PKEY_ALG_CTRL + 8)
+# define EVP_PKEY_CTRL_RSA_OAEP_MD (EVP_PKEY_ALG_CTRL + 9)
+# define EVP_PKEY_CTRL_RSA_OAEP_LABEL (EVP_PKEY_ALG_CTRL + 10)
+
+# define EVP_PKEY_CTRL_GET_RSA_OAEP_MD (EVP_PKEY_ALG_CTRL + 11)
+# define EVP_PKEY_CTRL_GET_RSA_OAEP_LABEL (EVP_PKEY_ALG_CTRL + 12)
+
# define RSA_PKCS1_PADDING 1
# define RSA_SSLV23_PADDING 2
# define RSA_NO_PADDING 3
@@ -347,6 +371,14 @@ typedef struct rsa_pss_params_st {
DECLARE_ASN1_FUNCTIONS(RSA_PSS_PARAMS)
+typedef struct rsa_oaep_params_st {
+ X509_ALGOR *hashFunc;
+ X509_ALGOR *maskGenFunc;
+ X509_ALGOR *pSourceFunc;
+} RSA_OAEP_PARAMS;
+
+DECLARE_ASN1_FUNCTIONS(RSA_OAEP_PARAMS)
+
# ifndef OPENSSL_NO_FP_API
int RSA_print_fp(FILE *fp, const RSA *r, int offset);
# endif
@@ -414,6 +446,15 @@ int RSA_padding_add_PKCS1_OAEP(unsigned char *to, int tlen,
int RSA_padding_check_PKCS1_OAEP(unsigned char *to, int tlen,
const unsigned char *f, int fl, int rsa_len,
const unsigned char *p, int pl);
+int RSA_padding_add_PKCS1_OAEP_mgf1(unsigned char *to, int tlen,
+ const unsigned char *from, int flen,
+ const unsigned char *param, int plen,
+ const EVP_MD *md, const EVP_MD *mgf1md);
+int RSA_padding_check_PKCS1_OAEP_mgf1(unsigned char *to, int tlen,
+ const unsigned char *from, int flen,
+ int num, const unsigned char *param,
+ int plen, const EVP_MD *md,
+ const EVP_MD *mgf1md);
int RSA_padding_add_SSLv23(unsigned char *to, int tlen,
const unsigned char *f, int fl);
int RSA_padding_check_SSLv23(unsigned char *to, int tlen,
@@ -494,8 +535,10 @@ void ERR_load_RSA_strings(void);
# define RSA_F_PKEY_RSA_SIGN 142
# define RSA_F_PKEY_RSA_VERIFY 154
# define RSA_F_PKEY_RSA_VERIFYRECOVER 141
+# define RSA_F_RSA_ALGOR_TO_MD 157
# define RSA_F_RSA_BUILTIN_KEYGEN 129
# define RSA_F_RSA_CHECK_KEY 123
+# define RSA_F_RSA_CMS_DECRYPT 158
# define RSA_F_RSA_EAY_PRIVATE_DECRYPT 101
# define RSA_F_RSA_EAY_PRIVATE_ENCRYPT 102
# define RSA_F_RSA_EAY_PUBLIC_DECRYPT 103
@@ -504,6 +547,7 @@ void ERR_load_RSA_strings(void);
# define RSA_F_RSA_GENERATE_KEY_EX 155
# define RSA_F_RSA_ITEM_VERIFY 156
# define RSA_F_RSA_MEMORY_LOCK 130
+# define RSA_F_RSA_MGF1_TO_MD 159
# define RSA_F_RSA_NEW_METHOD 106
# define RSA_F_RSA_NULL 124
# define RSA_F_RSA_NULL_MOD_EXP 131
@@ -513,6 +557,7 @@ void ERR_load_RSA_strings(void);
# define RSA_F_RSA_NULL_PUBLIC_ENCRYPT 135
# define RSA_F_RSA_PADDING_ADD_NONE 107
# define RSA_F_RSA_PADDING_ADD_PKCS1_OAEP 121
+# define RSA_F_RSA_PADDING_ADD_PKCS1_OAEP_MGF1 160
# define RSA_F_RSA_PADDING_ADD_PKCS1_PSS 125
# define RSA_F_RSA_PADDING_ADD_PKCS1_PSS_MGF1 148
# define RSA_F_RSA_PADDING_ADD_PKCS1_TYPE_1 108
@@ -521,6 +566,7 @@ void ERR_load_RSA_strings(void);
# define RSA_F_RSA_PADDING_ADD_X931 127
# define RSA_F_RSA_PADDING_CHECK_NONE 111
# define RSA_F_RSA_PADDING_CHECK_PKCS1_OAEP 122
+# define RSA_F_RSA_PADDING_CHECK_PKCS1_OAEP_MGF1 161
# define RSA_F_RSA_PADDING_CHECK_PKCS1_TYPE_1 112
# define RSA_F_RSA_PADDING_CHECK_PKCS1_TYPE_2 113
# define RSA_F_RSA_PADDING_CHECK_SSLV23 114
@@ -531,6 +577,7 @@ void ERR_load_RSA_strings(void);
# define RSA_F_RSA_PRIVATE_ENCRYPT 151
# define RSA_F_RSA_PRIV_DECODE 137
# define RSA_F_RSA_PRIV_ENCODE 138
+# define RSA_F_RSA_PSS_TO_CTX 162
# define RSA_F_RSA_PUBLIC_DECRYPT 152
# define RSA_F_RSA_PUBLIC_ENCRYPT 153
# define RSA_F_RSA_PUB_DECODE 139
@@ -556,17 +603,21 @@ void ERR_load_RSA_strings(void);
# define RSA_R_DATA_TOO_LARGE_FOR_MODULUS 132
# define RSA_R_DATA_TOO_SMALL 111
# define RSA_R_DATA_TOO_SMALL_FOR_KEY_SIZE 122
+# define RSA_R_DIGEST_DOES_NOT_MATCH 166
# define RSA_R_DIGEST_TOO_BIG_FOR_RSA_KEY 112
# define RSA_R_DMP1_NOT_CONGRUENT_TO_D 124
# define RSA_R_DMQ1_NOT_CONGRUENT_TO_D 125
# define RSA_R_D_E_NOT_CONGRUENT_TO_1 123
# define RSA_R_FIRST_OCTET_INVALID 133
# define RSA_R_ILLEGAL_OR_UNSUPPORTED_PADDING_MODE 144
+# define RSA_R_INVALID_DIGEST 160
# define RSA_R_INVALID_DIGEST_LENGTH 143
# define RSA_R_INVALID_HEADER 137
# define RSA_R_INVALID_KEYBITS 145
+# define RSA_R_INVALID_LABEL 161
# define RSA_R_INVALID_MESSAGE_LENGTH 131
# define RSA_R_INVALID_MGF1_MD 156
+# define RSA_R_INVALID_OAEP_PARAMETERS 162
# define RSA_R_INVALID_PADDING 138
# define RSA_R_INVALID_PADDING_MODE 141
# define RSA_R_INVALID_PSS_PARAMETERS 149
@@ -595,9 +646,12 @@ void ERR_load_RSA_strings(void);
# define RSA_R_SSLV3_ROLLBACK_ATTACK 115
# define RSA_R_THE_ASN1_OBJECT_IDENTIFIER_IS_NOT_KNOWN_FOR_THIS_MD 116
# define RSA_R_UNKNOWN_ALGORITHM_TYPE 117
+# define RSA_R_UNKNOWN_DIGEST 163
# define RSA_R_UNKNOWN_MASK_DIGEST 151
# define RSA_R_UNKNOWN_PADDING_TYPE 118
# define RSA_R_UNKNOWN_PSS_DIGEST 152
+# define RSA_R_UNSUPPORTED_ENCRYPTION_TYPE 164
+# define RSA_R_UNSUPPORTED_LABEL_SOURCE 165
# define RSA_R_UNSUPPORTED_MASK_ALGORITHM 153
# define RSA_R_UNSUPPORTED_MASK_PARAMETER 154
# define RSA_R_UNSUPPORTED_SIGNATURE_TYPE 155
diff --git a/crypto/openssl/crypto/rsa/rsa_ameth.c b/crypto/openssl/crypto/rsa/rsa_ameth.c
index 93e071d..ca3922e 100644
--- a/crypto/openssl/crypto/rsa/rsa_ameth.c
+++ b/crypto/openssl/crypto/rsa/rsa_ameth.c
@@ -68,6 +68,11 @@
#endif
#include "asn1_locl.h"
+static int rsa_cms_sign(CMS_SignerInfo *si);
+static int rsa_cms_verify(CMS_SignerInfo *si);
+static int rsa_cms_decrypt(CMS_RecipientInfo *ri);
+static int rsa_cms_encrypt(CMS_RecipientInfo *ri);
+
static int rsa_pub_encode(X509_PUBKEY *pk, const EVP_PKEY *pkey)
{
unsigned char *penc = NULL;
@@ -258,6 +263,23 @@ static int rsa_priv_print(BIO *bp, const EVP_PKEY *pkey, int indent,
return do_rsa_print(bp, pkey->pkey.rsa, indent, 1);
}
+/* Given an MGF1 Algorithm ID decode to an Algorithm Identifier */
+static X509_ALGOR *rsa_mgf1_decode(X509_ALGOR *alg)
+{
+ const unsigned char *p;
+ int plen;
+ if (alg == NULL)
+ return NULL;
+ if (OBJ_obj2nid(alg->algorithm) != NID_mgf1)
+ return NULL;
+ if (alg->parameter->type != V_ASN1_SEQUENCE)
+ return NULL;
+
+ p = alg->parameter->value.sequence->data;
+ plen = alg->parameter->value.sequence->length;
+ return d2i_X509_ALGOR(NULL, &p, plen);
+}
+
static RSA_PSS_PARAMS *rsa_pss_decode(const X509_ALGOR *alg,
X509_ALGOR **pmaskHash)
{
@@ -276,15 +298,7 @@ static RSA_PSS_PARAMS *rsa_pss_decode(const X509_ALGOR *alg,
if (!pss)
return NULL;
- if (pss->maskGenAlgorithm) {
- ASN1_TYPE *param = pss->maskGenAlgorithm->parameter;
- if (OBJ_obj2nid(pss->maskGenAlgorithm->algorithm) == NID_mgf1
- && param->type == V_ASN1_SEQUENCE) {
- p = param->value.sequence->data;
- plen = param->value.sequence->length;
- *pmaskHash = d2i_X509_ALGOR(NULL, &p, plen);
- }
- }
+ *pmaskHash = rsa_mgf1_decode(pss->maskGenAlgorithm);
return pss;
}
@@ -401,17 +415,25 @@ static int rsa_pkey_ctrl(EVP_PKEY *pkey, int op, long arg1, void *arg2)
#ifndef OPENSSL_NO_CMS
case ASN1_PKEY_CTRL_CMS_SIGN:
if (arg1 == 0)
- CMS_SignerInfo_get0_algs(arg2, NULL, NULL, NULL, &alg);
+ return rsa_cms_sign(arg2);
+ else if (arg1 == 1)
+ return rsa_cms_verify(arg2);
break;
case ASN1_PKEY_CTRL_CMS_ENVELOPE:
if (arg1 == 0)
- CMS_RecipientInfo_ktri_get0_algs(arg2, NULL, NULL, &alg);
+ return rsa_cms_encrypt(arg2);
+ else if (arg1 == 1)
+ return rsa_cms_decrypt(arg2);
break;
+
+ case ASN1_PKEY_CTRL_CMS_RI_TYPE:
+ *(int *)arg2 = CMS_RECIPINFO_TRANS;
+ return 1;
#endif
case ASN1_PKEY_CTRL_DEFAULT_MD_NID:
- *(int *)arg2 = NID_sha1;
+ *(int *)arg2 = NID_sha256;
return 1;
default:
@@ -426,59 +448,166 @@ static int rsa_pkey_ctrl(EVP_PKEY *pkey, int op, long arg1, void *arg2)
}
+/* allocate and set algorithm ID from EVP_MD, default SHA1 */
+static int rsa_md_to_algor(X509_ALGOR **palg, const EVP_MD *md)
+{
+ if (EVP_MD_type(md) == NID_sha1)
+ return 1;
+ *palg = X509_ALGOR_new();
+ if (!*palg)
+ return 0;
+ X509_ALGOR_set_md(*palg, md);
+ return 1;
+}
+
+/* Allocate and set MGF1 algorithm ID from EVP_MD */
+static int rsa_md_to_mgf1(X509_ALGOR **palg, const EVP_MD *mgf1md)
+{
+ X509_ALGOR *algtmp = NULL;
+ ASN1_STRING *stmp = NULL;
+ *palg = NULL;
+ if (EVP_MD_type(mgf1md) == NID_sha1)
+ return 1;
+ /* need to embed algorithm ID inside another */
+ if (!rsa_md_to_algor(&algtmp, mgf1md))
+ goto err;
+ if (!ASN1_item_pack(algtmp, ASN1_ITEM_rptr(X509_ALGOR), &stmp))
+ goto err;
+ *palg = X509_ALGOR_new();
+ if (!*palg)
+ goto err;
+ X509_ALGOR_set0(*palg, OBJ_nid2obj(NID_mgf1), V_ASN1_SEQUENCE, stmp);
+ stmp = NULL;
+ err:
+ if (stmp)
+ ASN1_STRING_free(stmp);
+ if (algtmp)
+ X509_ALGOR_free(algtmp);
+ if (*palg)
+ return 1;
+ return 0;
+}
+
+/* convert algorithm ID to EVP_MD, default SHA1 */
+static const EVP_MD *rsa_algor_to_md(X509_ALGOR *alg)
+{
+ const EVP_MD *md;
+ if (!alg)
+ return EVP_sha1();
+ md = EVP_get_digestbyobj(alg->algorithm);
+ if (md == NULL)
+ RSAerr(RSA_F_RSA_ALGOR_TO_MD, RSA_R_UNKNOWN_DIGEST);
+ return md;
+}
+
+/* convert MGF1 algorithm ID to EVP_MD, default SHA1 */
+static const EVP_MD *rsa_mgf1_to_md(X509_ALGOR *alg, X509_ALGOR *maskHash)
+{
+ const EVP_MD *md;
+ if (!alg)
+ return EVP_sha1();
+ /* Check mask and lookup mask hash algorithm */
+ if (OBJ_obj2nid(alg->algorithm) != NID_mgf1) {
+ RSAerr(RSA_F_RSA_MGF1_TO_MD, RSA_R_UNSUPPORTED_MASK_ALGORITHM);
+ return NULL;
+ }
+ if (!maskHash) {
+ RSAerr(RSA_F_RSA_MGF1_TO_MD, RSA_R_UNSUPPORTED_MASK_PARAMETER);
+ return NULL;
+ }
+ md = EVP_get_digestbyobj(maskHash->algorithm);
+ if (md == NULL) {
+ RSAerr(RSA_F_RSA_MGF1_TO_MD, RSA_R_UNKNOWN_MASK_DIGEST);
+ return NULL;
+ }
+ return md;
+}
+
/*
- * Customised RSA item verification routine. This is called when a signature
- * is encountered requiring special handling. We currently only handle PSS.
+ * Convert EVP_PKEY_CTX is PSS mode into corresponding algorithm parameter,
+ * suitable for setting an AlgorithmIdentifier.
*/
-static int rsa_item_verify(EVP_MD_CTX *ctx, const ASN1_ITEM *it, void *asn,
- X509_ALGOR *sigalg, ASN1_BIT_STRING *sig,
- EVP_PKEY *pkey)
+static ASN1_STRING *rsa_ctx_to_pss(EVP_PKEY_CTX *pkctx)
+{
+ const EVP_MD *sigmd, *mgf1md;
+ RSA_PSS_PARAMS *pss = NULL;
+ ASN1_STRING *os = NULL;
+ EVP_PKEY *pk = EVP_PKEY_CTX_get0_pkey(pkctx);
+ int saltlen, rv = 0;
+ if (EVP_PKEY_CTX_get_signature_md(pkctx, &sigmd) <= 0)
+ goto err;
+ if (EVP_PKEY_CTX_get_rsa_mgf1_md(pkctx, &mgf1md) <= 0)
+ goto err;
+ if (!EVP_PKEY_CTX_get_rsa_pss_saltlen(pkctx, &saltlen))
+ goto err;
+ if (saltlen == -1)
+ saltlen = EVP_MD_size(sigmd);
+ else if (saltlen == -2) {
+ saltlen = EVP_PKEY_size(pk) - EVP_MD_size(sigmd) - 2;
+ if (((EVP_PKEY_bits(pk) - 1) & 0x7) == 0)
+ saltlen--;
+ }
+ pss = RSA_PSS_PARAMS_new();
+ if (!pss)
+ goto err;
+ if (saltlen != 20) {
+ pss->saltLength = ASN1_INTEGER_new();
+ if (!pss->saltLength)
+ goto err;
+ if (!ASN1_INTEGER_set(pss->saltLength, saltlen))
+ goto err;
+ }
+ if (!rsa_md_to_algor(&pss->hashAlgorithm, sigmd))
+ goto err;
+ if (!rsa_md_to_mgf1(&pss->maskGenAlgorithm, mgf1md))
+ goto err;
+ /* Finally create string with pss parameter encoding. */
+ if (!ASN1_item_pack(pss, ASN1_ITEM_rptr(RSA_PSS_PARAMS), &os))
+ goto err;
+ rv = 1;
+ err:
+ if (pss)
+ RSA_PSS_PARAMS_free(pss);
+ if (rv)
+ return os;
+ if (os)
+ ASN1_STRING_free(os);
+ return NULL;
+}
+
+/*
+ * From PSS AlgorithmIdentifier set public key parameters. If pkey isn't NULL
+ * then the EVP_MD_CTX is setup and initalised. If it is NULL parameters are
+ * passed to pkctx instead.
+ */
+
+static int rsa_pss_to_ctx(EVP_MD_CTX *ctx, EVP_PKEY_CTX *pkctx,
+ X509_ALGOR *sigalg, EVP_PKEY *pkey)
{
int rv = -1;
int saltlen;
const EVP_MD *mgf1md = NULL, *md = NULL;
RSA_PSS_PARAMS *pss;
X509_ALGOR *maskHash;
- EVP_PKEY_CTX *pkctx;
/* Sanity check: make sure it is PSS */
if (OBJ_obj2nid(sigalg->algorithm) != NID_rsassaPss) {
- RSAerr(RSA_F_RSA_ITEM_VERIFY, RSA_R_UNSUPPORTED_SIGNATURE_TYPE);
+ RSAerr(RSA_F_RSA_PSS_TO_CTX, RSA_R_UNSUPPORTED_SIGNATURE_TYPE);
return -1;
}
/* Decode PSS parameters */
pss = rsa_pss_decode(sigalg, &maskHash);
if (pss == NULL) {
- RSAerr(RSA_F_RSA_ITEM_VERIFY, RSA_R_INVALID_PSS_PARAMETERS);
+ RSAerr(RSA_F_RSA_PSS_TO_CTX, RSA_R_INVALID_PSS_PARAMETERS);
goto err;
}
- /* Check mask and lookup mask hash algorithm */
- if (pss->maskGenAlgorithm) {
- if (OBJ_obj2nid(pss->maskGenAlgorithm->algorithm) != NID_mgf1) {
- RSAerr(RSA_F_RSA_ITEM_VERIFY, RSA_R_UNSUPPORTED_MASK_ALGORITHM);
- goto err;
- }
- if (!maskHash) {
- RSAerr(RSA_F_RSA_ITEM_VERIFY, RSA_R_UNSUPPORTED_MASK_PARAMETER);
- goto err;
- }
- mgf1md = EVP_get_digestbyobj(maskHash->algorithm);
- if (mgf1md == NULL) {
- RSAerr(RSA_F_RSA_ITEM_VERIFY, RSA_R_UNKNOWN_MASK_DIGEST);
- goto err;
- }
- } else
- mgf1md = EVP_sha1();
-
- if (pss->hashAlgorithm) {
- md = EVP_get_digestbyobj(pss->hashAlgorithm->algorithm);
- if (md == NULL) {
- RSAerr(RSA_F_RSA_ITEM_VERIFY, RSA_R_UNKNOWN_PSS_DIGEST);
- goto err;
- }
- } else
- md = EVP_sha1();
+ mgf1md = rsa_mgf1_to_md(pss->maskGenAlgorithm, maskHash);
+ if (!mgf1md)
+ goto err;
+ md = rsa_algor_to_md(pss->hashAlgorithm);
+ if (!md)
+ goto err;
if (pss->saltLength) {
saltlen = ASN1_INTEGER_get(pss->saltLength);
@@ -488,7 +617,7 @@ static int rsa_item_verify(EVP_MD_CTX *ctx, const ASN1_ITEM *it, void *asn,
* routines will trap other invalid values anyway.
*/
if (saltlen < 0) {
- RSAerr(RSA_F_RSA_ITEM_VERIFY, RSA_R_INVALID_SALT_LENGTH);
+ RSAerr(RSA_F_RSA_PSS_TO_CTX, RSA_R_INVALID_SALT_LENGTH);
goto err;
}
} else
@@ -499,14 +628,24 @@ static int rsa_item_verify(EVP_MD_CTX *ctx, const ASN1_ITEM *it, void *asn,
* PKCS#1 says we should reject any other value anyway.
*/
if (pss->trailerField && ASN1_INTEGER_get(pss->trailerField) != 1) {
- RSAerr(RSA_F_RSA_ITEM_VERIFY, RSA_R_INVALID_TRAILER);
+ RSAerr(RSA_F_RSA_PSS_TO_CTX, RSA_R_INVALID_TRAILER);
goto err;
}
/* We have all parameters now set up context */
- if (!EVP_DigestVerifyInit(ctx, &pkctx, md, NULL, pkey))
- goto err;
+ if (pkey) {
+ if (!EVP_DigestVerifyInit(ctx, &pkctx, md, NULL, pkey))
+ goto err;
+ } else {
+ const EVP_MD *checkmd;
+ if (EVP_PKEY_CTX_get_signature_md(pkctx, &checkmd) <= 0)
+ goto err;
+ if (EVP_MD_type(md) != EVP_MD_type(checkmd)) {
+ RSAerr(RSA_F_RSA_PSS_TO_CTX, RSA_R_DIGEST_DOES_NOT_MATCH);
+ goto err;
+ }
+ }
if (EVP_PKEY_CTX_set_rsa_padding(pkctx, RSA_PKCS1_PSS_PADDING) <= 0)
goto err;
@@ -517,7 +656,7 @@ static int rsa_item_verify(EVP_MD_CTX *ctx, const ASN1_ITEM *it, void *asn,
if (EVP_PKEY_CTX_set_rsa_mgf1_md(pkctx, mgf1md) <= 0)
goto err;
/* Carry on */
- rv = 2;
+ rv = 1;
err:
RSA_PSS_PARAMS_free(pss);
@@ -526,6 +665,71 @@ static int rsa_item_verify(EVP_MD_CTX *ctx, const ASN1_ITEM *it, void *asn,
return rv;
}
+static int rsa_cms_verify(CMS_SignerInfo *si)
+{
+ int nid, nid2;
+ X509_ALGOR *alg;
+ EVP_PKEY_CTX *pkctx = CMS_SignerInfo_get0_pkey_ctx(si);
+ CMS_SignerInfo_get0_algs(si, NULL, NULL, NULL, &alg);
+ nid = OBJ_obj2nid(alg->algorithm);
+ if (nid == NID_rsaEncryption)
+ return 1;
+ if (nid == NID_rsassaPss)
+ return rsa_pss_to_ctx(NULL, pkctx, alg, NULL);
+ /* Workaround for some implementation that use a signature OID */
+ if (OBJ_find_sigid_algs(nid, NULL, &nid2)) {
+ if (nid2 == NID_rsaEncryption)
+ return 1;
+ }
+ return 0;
+}
+
+/*
+ * Customised RSA item verification routine. This is called when a signature
+ * is encountered requiring special handling. We currently only handle PSS.
+ */
+
+static int rsa_item_verify(EVP_MD_CTX *ctx, const ASN1_ITEM *it, void *asn,
+ X509_ALGOR *sigalg, ASN1_BIT_STRING *sig,
+ EVP_PKEY *pkey)
+{
+ /* Sanity check: make sure it is PSS */
+ if (OBJ_obj2nid(sigalg->algorithm) != NID_rsassaPss) {
+ RSAerr(RSA_F_RSA_ITEM_VERIFY, RSA_R_UNSUPPORTED_SIGNATURE_TYPE);
+ return -1;
+ }
+ if (rsa_pss_to_ctx(ctx, NULL, sigalg, pkey) > 0) {
+ /* Carry on */
+ return 2;
+ }
+ return -1;
+}
+
+static int rsa_cms_sign(CMS_SignerInfo *si)
+{
+ int pad_mode = RSA_PKCS1_PADDING;
+ X509_ALGOR *alg;
+ EVP_PKEY_CTX *pkctx = CMS_SignerInfo_get0_pkey_ctx(si);
+ ASN1_STRING *os = NULL;
+ CMS_SignerInfo_get0_algs(si, NULL, NULL, NULL, &alg);
+ if (pkctx) {
+ if (EVP_PKEY_CTX_get_rsa_padding(pkctx, &pad_mode) <= 0)
+ return 0;
+ }
+ if (pad_mode == RSA_PKCS1_PADDING) {
+ X509_ALGOR_set0(alg, OBJ_nid2obj(NID_rsaEncryption), V_ASN1_NULL, 0);
+ return 1;
+ }
+ /* We don't support it */
+ if (pad_mode != RSA_PKCS1_PSS_PADDING)
+ return 0;
+ os = rsa_ctx_to_pss(pkctx);
+ if (!os)
+ return 0;
+ X509_ALGOR_set0(alg, OBJ_nid2obj(NID_rsassaPss), V_ASN1_SEQUENCE, os);
+ return 1;
+}
+
static int rsa_item_sign(EVP_MD_CTX *ctx, const ASN1_ITEM *it, void *asn,
X509_ALGOR *alg1, X509_ALGOR *alg2,
ASN1_BIT_STRING *sig)
@@ -537,78 +741,184 @@ static int rsa_item_sign(EVP_MD_CTX *ctx, const ASN1_ITEM *it, void *asn,
if (pad_mode == RSA_PKCS1_PADDING)
return 2;
if (pad_mode == RSA_PKCS1_PSS_PADDING) {
- const EVP_MD *sigmd, *mgf1md;
- RSA_PSS_PARAMS *pss = NULL;
- X509_ALGOR *mgf1alg = NULL;
- ASN1_STRING *os1 = NULL, *os2 = NULL;
- EVP_PKEY *pk = EVP_PKEY_CTX_get0_pkey(pkctx);
- int saltlen, rv = 0;
- sigmd = EVP_MD_CTX_md(ctx);
- if (EVP_PKEY_CTX_get_rsa_mgf1_md(pkctx, &mgf1md) <= 0)
- goto err;
- if (!EVP_PKEY_CTX_get_rsa_pss_saltlen(pkctx, &saltlen))
- goto err;
- if (saltlen == -1)
- saltlen = EVP_MD_size(sigmd);
- else if (saltlen == -2) {
- saltlen = EVP_PKEY_size(pk) - EVP_MD_size(sigmd) - 2;
- if (((EVP_PKEY_bits(pk) - 1) & 0x7) == 0)
- saltlen--;
- }
- pss = RSA_PSS_PARAMS_new();
- if (!pss)
- goto err;
- if (saltlen != 20) {
- pss->saltLength = ASN1_INTEGER_new();
- if (!pss->saltLength)
- goto err;
- if (!ASN1_INTEGER_set(pss->saltLength, saltlen))
- goto err;
- }
- if (EVP_MD_type(sigmd) != NID_sha1) {
- pss->hashAlgorithm = X509_ALGOR_new();
- if (!pss->hashAlgorithm)
- goto err;
- X509_ALGOR_set_md(pss->hashAlgorithm, sigmd);
- }
- if (EVP_MD_type(mgf1md) != NID_sha1) {
- ASN1_STRING *stmp = NULL;
- /* need to embed algorithm ID inside another */
- mgf1alg = X509_ALGOR_new();
- X509_ALGOR_set_md(mgf1alg, mgf1md);
- if (!ASN1_item_pack(mgf1alg, ASN1_ITEM_rptr(X509_ALGOR), &stmp))
- goto err;
- pss->maskGenAlgorithm = X509_ALGOR_new();
- if (!pss->maskGenAlgorithm)
- goto err;
- X509_ALGOR_set0(pss->maskGenAlgorithm,
- OBJ_nid2obj(NID_mgf1), V_ASN1_SEQUENCE, stmp);
- }
- /* Finally create string with pss parameter encoding. */
- if (!ASN1_item_pack(pss, ASN1_ITEM_rptr(RSA_PSS_PARAMS), &os1))
- goto err;
+ ASN1_STRING *os1 = NULL;
+ os1 = rsa_ctx_to_pss(pkctx);
+ if (!os1)
+ return 0;
+ /* Duplicate parameters if we have to */
if (alg2) {
- os2 = ASN1_STRING_dup(os1);
- if (!os2)
- goto err;
+ ASN1_STRING *os2 = ASN1_STRING_dup(os1);
+ if (!os2) {
+ ASN1_STRING_free(os1);
+ return 0;
+ }
X509_ALGOR_set0(alg2, OBJ_nid2obj(NID_rsassaPss),
V_ASN1_SEQUENCE, os2);
}
X509_ALGOR_set0(alg1, OBJ_nid2obj(NID_rsassaPss),
V_ASN1_SEQUENCE, os1);
- os1 = os2 = NULL;
- rv = 3;
+ return 3;
+ }
+ return 2;
+}
+
+static RSA_OAEP_PARAMS *rsa_oaep_decode(const X509_ALGOR *alg,
+ X509_ALGOR **pmaskHash)
+{
+ const unsigned char *p;
+ int plen;
+ RSA_OAEP_PARAMS *pss;
+
+ *pmaskHash = NULL;
+
+ if (!alg->parameter || alg->parameter->type != V_ASN1_SEQUENCE)
+ return NULL;
+ p = alg->parameter->value.sequence->data;
+ plen = alg->parameter->value.sequence->length;
+ pss = d2i_RSA_OAEP_PARAMS(NULL, &p, plen);
+
+ if (!pss)
+ return NULL;
+
+ *pmaskHash = rsa_mgf1_decode(pss->maskGenFunc);
+
+ return pss;
+}
+
+static int rsa_cms_decrypt(CMS_RecipientInfo *ri)
+{
+ EVP_PKEY_CTX *pkctx;
+ X509_ALGOR *cmsalg;
+ int nid;
+ int rv = -1;
+ unsigned char *label = NULL;
+ int labellen = 0;
+ const EVP_MD *mgf1md = NULL, *md = NULL;
+ RSA_OAEP_PARAMS *oaep;
+ X509_ALGOR *maskHash;
+ pkctx = CMS_RecipientInfo_get0_pkey_ctx(ri);
+ if (!pkctx)
+ return 0;
+ if (!CMS_RecipientInfo_ktri_get0_algs(ri, NULL, NULL, &cmsalg))
+ return -1;
+ nid = OBJ_obj2nid(cmsalg->algorithm);
+ if (nid == NID_rsaEncryption)
+ return 1;
+ if (nid != NID_rsaesOaep) {
+ RSAerr(RSA_F_RSA_CMS_DECRYPT, RSA_R_UNSUPPORTED_ENCRYPTION_TYPE);
+ return -1;
+ }
+ /* Decode OAEP parameters */
+ oaep = rsa_oaep_decode(cmsalg, &maskHash);
+
+ if (oaep == NULL) {
+ RSAerr(RSA_F_RSA_CMS_DECRYPT, RSA_R_INVALID_OAEP_PARAMETERS);
+ goto err;
+ }
+
+ mgf1md = rsa_mgf1_to_md(oaep->maskGenFunc, maskHash);
+ if (!mgf1md)
+ goto err;
+ md = rsa_algor_to_md(oaep->hashFunc);
+ if (!md)
+ goto err;
+
+ if (oaep->pSourceFunc) {
+ X509_ALGOR *plab = oaep->pSourceFunc;
+ if (OBJ_obj2nid(plab->algorithm) != NID_pSpecified) {
+ RSAerr(RSA_F_RSA_CMS_DECRYPT, RSA_R_UNSUPPORTED_LABEL_SOURCE);
+ goto err;
+ }
+ if (plab->parameter->type != V_ASN1_OCTET_STRING) {
+ RSAerr(RSA_F_RSA_CMS_DECRYPT, RSA_R_INVALID_LABEL);
+ goto err;
+ }
+
+ label = plab->parameter->value.octet_string->data;
+ /* Stop label being freed when OAEP parameters are freed */
+ plab->parameter->value.octet_string->data = NULL;
+ labellen = plab->parameter->value.octet_string->length;
+ }
+
+ if (EVP_PKEY_CTX_set_rsa_padding(pkctx, RSA_PKCS1_OAEP_PADDING) <= 0)
+ goto err;
+ if (EVP_PKEY_CTX_set_rsa_oaep_md(pkctx, md) <= 0)
+ goto err;
+ if (EVP_PKEY_CTX_set_rsa_mgf1_md(pkctx, mgf1md) <= 0)
+ goto err;
+ if (EVP_PKEY_CTX_set0_rsa_oaep_label(pkctx, label, labellen) <= 0)
+ goto err;
+ /* Carry on */
+ rv = 1;
+
err:
- if (mgf1alg)
- X509_ALGOR_free(mgf1alg);
- if (pss)
- RSA_PSS_PARAMS_free(pss);
- if (os1)
- ASN1_STRING_free(os1);
- return rv;
+ RSA_OAEP_PARAMS_free(oaep);
+ if (maskHash)
+ X509_ALGOR_free(maskHash);
+ return rv;
+}
+static int rsa_cms_encrypt(CMS_RecipientInfo *ri)
+{
+ const EVP_MD *md, *mgf1md;
+ RSA_OAEP_PARAMS *oaep = NULL;
+ ASN1_STRING *os = NULL;
+ X509_ALGOR *alg;
+ EVP_PKEY_CTX *pkctx = CMS_RecipientInfo_get0_pkey_ctx(ri);
+ int pad_mode = RSA_PKCS1_PADDING, rv = 0, labellen;
+ unsigned char *label;
+ CMS_RecipientInfo_ktri_get0_algs(ri, NULL, NULL, &alg);
+ if (pkctx) {
+ if (EVP_PKEY_CTX_get_rsa_padding(pkctx, &pad_mode) <= 0)
+ return 0;
}
- return 2;
+ if (pad_mode == RSA_PKCS1_PADDING) {
+ X509_ALGOR_set0(alg, OBJ_nid2obj(NID_rsaEncryption), V_ASN1_NULL, 0);
+ return 1;
+ }
+ /* Not supported */
+ if (pad_mode != RSA_PKCS1_OAEP_PADDING)
+ return 0;
+ if (EVP_PKEY_CTX_get_rsa_oaep_md(pkctx, &md) <= 0)
+ goto err;
+ if (EVP_PKEY_CTX_get_rsa_mgf1_md(pkctx, &mgf1md) <= 0)
+ goto err;
+ labellen = EVP_PKEY_CTX_get0_rsa_oaep_label(pkctx, &label);
+ if (labellen < 0)
+ goto err;
+ oaep = RSA_OAEP_PARAMS_new();
+ if (!oaep)
+ goto err;
+ if (!rsa_md_to_algor(&oaep->hashFunc, md))
+ goto err;
+ if (!rsa_md_to_mgf1(&oaep->maskGenFunc, mgf1md))
+ goto err;
+ if (labellen > 0) {
+ ASN1_OCTET_STRING *los = ASN1_OCTET_STRING_new();
+ oaep->pSourceFunc = X509_ALGOR_new();
+ if (!oaep->pSourceFunc)
+ goto err;
+ if (!los)
+ goto err;
+ if (!ASN1_OCTET_STRING_set(los, label, labellen)) {
+ ASN1_OCTET_STRING_free(los);
+ goto err;
+ }
+ X509_ALGOR_set0(oaep->pSourceFunc, OBJ_nid2obj(NID_pSpecified),
+ V_ASN1_OCTET_STRING, los);
+ }
+ /* create string with pss parameter encoding. */
+ if (!ASN1_item_pack(oaep, ASN1_ITEM_rptr(RSA_OAEP_PARAMS), &os))
+ goto err;
+ X509_ALGOR_set0(alg, OBJ_nid2obj(NID_rsaesOaep), V_ASN1_SEQUENCE, os);
+ os = NULL;
+ rv = 1;
+ err:
+ if (oaep)
+ RSA_OAEP_PARAMS_free(oaep);
+ if (os)
+ ASN1_STRING_free(os);
+ return rv;
}
const EVP_PKEY_ASN1_METHOD rsa_asn1_meths[] = {
diff --git a/crypto/openssl/crypto/rsa/rsa_asn1.c b/crypto/openssl/crypto/rsa/rsa_asn1.c
index 3d82c1d..aff8b58 100644
--- a/crypto/openssl/crypto/rsa/rsa_asn1.c
+++ b/crypto/openssl/crypto/rsa/rsa_asn1.c
@@ -108,6 +108,14 @@ ASN1_SEQUENCE(RSA_PSS_PARAMS) = {
IMPLEMENT_ASN1_FUNCTIONS(RSA_PSS_PARAMS)
+ASN1_SEQUENCE(RSA_OAEP_PARAMS) = {
+ ASN1_EXP_OPT(RSA_OAEP_PARAMS, hashFunc, X509_ALGOR, 0),
+ ASN1_EXP_OPT(RSA_OAEP_PARAMS, maskGenFunc, X509_ALGOR, 1),
+ ASN1_EXP_OPT(RSA_OAEP_PARAMS, pSourceFunc, X509_ALGOR, 2),
+} ASN1_SEQUENCE_END(RSA_OAEP_PARAMS)
+
+IMPLEMENT_ASN1_FUNCTIONS(RSA_OAEP_PARAMS)
+
IMPLEMENT_ASN1_ENCODE_FUNCTIONS_const_fname(RSA, RSAPrivateKey, RSAPrivateKey)
IMPLEMENT_ASN1_ENCODE_FUNCTIONS_const_fname(RSA, RSAPublicKey, RSAPublicKey)
diff --git a/crypto/openssl/crypto/rsa/rsa_err.c b/crypto/openssl/crypto/rsa/rsa_err.c
index 25b3fa7..0bab05e 100644
--- a/crypto/openssl/crypto/rsa/rsa_err.c
+++ b/crypto/openssl/crypto/rsa/rsa_err.c
@@ -1,6 +1,6 @@
/* crypto/rsa/rsa_err.c */
/* ====================================================================
- * Copyright (c) 1999-2011 The OpenSSL Project. All rights reserved.
+ * Copyright (c) 1999-2014 The OpenSSL Project. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -80,8 +80,10 @@ static ERR_STRING_DATA RSA_str_functs[] = {
{ERR_FUNC(RSA_F_PKEY_RSA_SIGN), "PKEY_RSA_SIGN"},
{ERR_FUNC(RSA_F_PKEY_RSA_VERIFY), "PKEY_RSA_VERIFY"},
{ERR_FUNC(RSA_F_PKEY_RSA_VERIFYRECOVER), "PKEY_RSA_VERIFYRECOVER"},
+ {ERR_FUNC(RSA_F_RSA_ALGOR_TO_MD), "RSA_ALGOR_TO_MD"},
{ERR_FUNC(RSA_F_RSA_BUILTIN_KEYGEN), "RSA_BUILTIN_KEYGEN"},
{ERR_FUNC(RSA_F_RSA_CHECK_KEY), "RSA_check_key"},
+ {ERR_FUNC(RSA_F_RSA_CMS_DECRYPT), "RSA_CMS_DECRYPT"},
{ERR_FUNC(RSA_F_RSA_EAY_PRIVATE_DECRYPT), "RSA_EAY_PRIVATE_DECRYPT"},
{ERR_FUNC(RSA_F_RSA_EAY_PRIVATE_ENCRYPT), "RSA_EAY_PRIVATE_ENCRYPT"},
{ERR_FUNC(RSA_F_RSA_EAY_PUBLIC_DECRYPT), "RSA_EAY_PUBLIC_DECRYPT"},
@@ -90,6 +92,7 @@ static ERR_STRING_DATA RSA_str_functs[] = {
{ERR_FUNC(RSA_F_RSA_GENERATE_KEY_EX), "RSA_generate_key_ex"},
{ERR_FUNC(RSA_F_RSA_ITEM_VERIFY), "RSA_ITEM_VERIFY"},
{ERR_FUNC(RSA_F_RSA_MEMORY_LOCK), "RSA_memory_lock"},
+ {ERR_FUNC(RSA_F_RSA_MGF1_TO_MD), "RSA_MGF1_TO_MD"},
{ERR_FUNC(RSA_F_RSA_NEW_METHOD), "RSA_new_method"},
{ERR_FUNC(RSA_F_RSA_NULL), "RSA_NULL"},
{ERR_FUNC(RSA_F_RSA_NULL_MOD_EXP), "RSA_NULL_MOD_EXP"},
@@ -100,6 +103,8 @@ static ERR_STRING_DATA RSA_str_functs[] = {
{ERR_FUNC(RSA_F_RSA_PADDING_ADD_NONE), "RSA_padding_add_none"},
{ERR_FUNC(RSA_F_RSA_PADDING_ADD_PKCS1_OAEP),
"RSA_padding_add_PKCS1_OAEP"},
+ {ERR_FUNC(RSA_F_RSA_PADDING_ADD_PKCS1_OAEP_MGF1),
+ "RSA_padding_add_PKCS1_OAEP_mgf1"},
{ERR_FUNC(RSA_F_RSA_PADDING_ADD_PKCS1_PSS), "RSA_padding_add_PKCS1_PSS"},
{ERR_FUNC(RSA_F_RSA_PADDING_ADD_PKCS1_PSS_MGF1),
"RSA_padding_add_PKCS1_PSS_mgf1"},
@@ -112,6 +117,8 @@ static ERR_STRING_DATA RSA_str_functs[] = {
{ERR_FUNC(RSA_F_RSA_PADDING_CHECK_NONE), "RSA_padding_check_none"},
{ERR_FUNC(RSA_F_RSA_PADDING_CHECK_PKCS1_OAEP),
"RSA_padding_check_PKCS1_OAEP"},
+ {ERR_FUNC(RSA_F_RSA_PADDING_CHECK_PKCS1_OAEP_MGF1),
+ "RSA_padding_check_PKCS1_OAEP_mgf1"},
{ERR_FUNC(RSA_F_RSA_PADDING_CHECK_PKCS1_TYPE_1),
"RSA_padding_check_PKCS1_type_1"},
{ERR_FUNC(RSA_F_RSA_PADDING_CHECK_PKCS1_TYPE_2),
@@ -124,6 +131,7 @@ static ERR_STRING_DATA RSA_str_functs[] = {
{ERR_FUNC(RSA_F_RSA_PRIVATE_ENCRYPT), "RSA_private_encrypt"},
{ERR_FUNC(RSA_F_RSA_PRIV_DECODE), "RSA_PRIV_DECODE"},
{ERR_FUNC(RSA_F_RSA_PRIV_ENCODE), "RSA_PRIV_ENCODE"},
+ {ERR_FUNC(RSA_F_RSA_PSS_TO_CTX), "RSA_PSS_TO_CTX"},
{ERR_FUNC(RSA_F_RSA_PUBLIC_DECRYPT), "RSA_public_decrypt"},
{ERR_FUNC(RSA_F_RSA_PUBLIC_ENCRYPT), "RSA_public_encrypt"},
{ERR_FUNC(RSA_F_RSA_PUB_DECODE), "RSA_PUB_DECODE"},
@@ -157,6 +165,7 @@ static ERR_STRING_DATA RSA_str_reasons[] = {
{ERR_REASON(RSA_R_DATA_TOO_SMALL), "data too small"},
{ERR_REASON(RSA_R_DATA_TOO_SMALL_FOR_KEY_SIZE),
"data too small for key size"},
+ {ERR_REASON(RSA_R_DIGEST_DOES_NOT_MATCH), "digest does not match"},
{ERR_REASON(RSA_R_DIGEST_TOO_BIG_FOR_RSA_KEY),
"digest too big for rsa key"},
{ERR_REASON(RSA_R_DMP1_NOT_CONGRUENT_TO_D), "dmp1 not congruent to d"},
@@ -165,11 +174,14 @@ static ERR_STRING_DATA RSA_str_reasons[] = {
{ERR_REASON(RSA_R_FIRST_OCTET_INVALID), "first octet invalid"},
{ERR_REASON(RSA_R_ILLEGAL_OR_UNSUPPORTED_PADDING_MODE),
"illegal or unsupported padding mode"},
+ {ERR_REASON(RSA_R_INVALID_DIGEST), "invalid digest"},
{ERR_REASON(RSA_R_INVALID_DIGEST_LENGTH), "invalid digest length"},
{ERR_REASON(RSA_R_INVALID_HEADER), "invalid header"},
{ERR_REASON(RSA_R_INVALID_KEYBITS), "invalid keybits"},
+ {ERR_REASON(RSA_R_INVALID_LABEL), "invalid label"},
{ERR_REASON(RSA_R_INVALID_MESSAGE_LENGTH), "invalid message length"},
{ERR_REASON(RSA_R_INVALID_MGF1_MD), "invalid mgf1 md"},
+ {ERR_REASON(RSA_R_INVALID_OAEP_PARAMETERS), "invalid oaep parameters"},
{ERR_REASON(RSA_R_INVALID_PADDING), "invalid padding"},
{ERR_REASON(RSA_R_INVALID_PADDING_MODE), "invalid padding mode"},
{ERR_REASON(RSA_R_INVALID_PSS_PARAMETERS), "invalid pss parameters"},
@@ -203,9 +215,13 @@ static ERR_STRING_DATA RSA_str_reasons[] = {
{ERR_REASON(RSA_R_THE_ASN1_OBJECT_IDENTIFIER_IS_NOT_KNOWN_FOR_THIS_MD),
"the asn1 object identifier is not known for this md"},
{ERR_REASON(RSA_R_UNKNOWN_ALGORITHM_TYPE), "unknown algorithm type"},
+ {ERR_REASON(RSA_R_UNKNOWN_DIGEST), "unknown digest"},
{ERR_REASON(RSA_R_UNKNOWN_MASK_DIGEST), "unknown mask digest"},
{ERR_REASON(RSA_R_UNKNOWN_PADDING_TYPE), "unknown padding type"},
{ERR_REASON(RSA_R_UNKNOWN_PSS_DIGEST), "unknown pss digest"},
+ {ERR_REASON(RSA_R_UNSUPPORTED_ENCRYPTION_TYPE),
+ "unsupported encryption type"},
+ {ERR_REASON(RSA_R_UNSUPPORTED_LABEL_SOURCE), "unsupported label source"},
{ERR_REASON(RSA_R_UNSUPPORTED_MASK_ALGORITHM),
"unsupported mask algorithm"},
{ERR_REASON(RSA_R_UNSUPPORTED_MASK_PARAMETER),
diff --git a/crypto/openssl/crypto/rsa/rsa_oaep.c b/crypto/openssl/crypto/rsa/rsa_oaep.c
index 499835f..9c2a943 100644
--- a/crypto/openssl/crypto/rsa/rsa_oaep.c
+++ b/crypto/openssl/crypto/rsa/rsa_oaep.c
@@ -28,39 +28,53 @@
# include <openssl/rand.h>
# include <openssl/sha.h>
-static int MGF1(unsigned char *mask, long len,
- const unsigned char *seed, long seedlen);
-
int RSA_padding_add_PKCS1_OAEP(unsigned char *to, int tlen,
const unsigned char *from, int flen,
const unsigned char *param, int plen)
{
+ return RSA_padding_add_PKCS1_OAEP_mgf1(to, tlen, from, flen,
+ param, plen, NULL, NULL);
+}
+
+int RSA_padding_add_PKCS1_OAEP_mgf1(unsigned char *to, int tlen,
+ const unsigned char *from, int flen,
+ const unsigned char *param, int plen,
+ const EVP_MD *md, const EVP_MD *mgf1md)
+{
int i, emlen = tlen - 1;
unsigned char *db, *seed;
- unsigned char *dbmask, seedmask[SHA_DIGEST_LENGTH];
+ unsigned char *dbmask, seedmask[EVP_MAX_MD_SIZE];
+ int mdlen;
+
+ if (md == NULL)
+ md = EVP_sha1();
+ if (mgf1md == NULL)
+ mgf1md = md;
- if (flen > emlen - 2 * SHA_DIGEST_LENGTH - 1) {
- RSAerr(RSA_F_RSA_PADDING_ADD_PKCS1_OAEP,
+ mdlen = EVP_MD_size(md);
+
+ if (flen > emlen - 2 * mdlen - 1) {
+ RSAerr(RSA_F_RSA_PADDING_ADD_PKCS1_OAEP_MGF1,
RSA_R_DATA_TOO_LARGE_FOR_KEY_SIZE);
return 0;
}
- if (emlen < 2 * SHA_DIGEST_LENGTH + 1) {
- RSAerr(RSA_F_RSA_PADDING_ADD_PKCS1_OAEP, RSA_R_KEY_SIZE_TOO_SMALL);
+ if (emlen < 2 * mdlen + 1) {
+ RSAerr(RSA_F_RSA_PADDING_ADD_PKCS1_OAEP_MGF1,
+ RSA_R_KEY_SIZE_TOO_SMALL);
return 0;
}
to[0] = 0;
seed = to + 1;
- db = to + SHA_DIGEST_LENGTH + 1;
+ db = to + mdlen + 1;
- if (!EVP_Digest((void *)param, plen, db, NULL, EVP_sha1(), NULL))
+ if (!EVP_Digest((void *)param, plen, db, NULL, md, NULL))
return 0;
- memset(db + SHA_DIGEST_LENGTH, 0,
- emlen - flen - 2 * SHA_DIGEST_LENGTH - 1);
- db[emlen - flen - SHA_DIGEST_LENGTH - 1] = 0x01;
- memcpy(db + emlen - flen - SHA_DIGEST_LENGTH, from, (unsigned int)flen);
- if (RAND_bytes(seed, SHA_DIGEST_LENGTH) <= 0)
+ memset(db + mdlen, 0, emlen - flen - 2 * mdlen - 1);
+ db[emlen - flen - mdlen - 1] = 0x01;
+ memcpy(db + emlen - flen - mdlen, from, (unsigned int)flen);
+ if (RAND_bytes(seed, mdlen) <= 0)
return 0;
# ifdef PKCS_TESTVECT
memcpy(seed,
@@ -68,20 +82,20 @@ int RSA_padding_add_PKCS1_OAEP(unsigned char *to, int tlen,
20);
# endif
- dbmask = OPENSSL_malloc(emlen - SHA_DIGEST_LENGTH);
+ dbmask = OPENSSL_malloc(emlen - mdlen);
if (dbmask == NULL) {
- RSAerr(RSA_F_RSA_PADDING_ADD_PKCS1_OAEP, ERR_R_MALLOC_FAILURE);
+ RSAerr(RSA_F_RSA_PADDING_ADD_PKCS1_OAEP_MGF1, ERR_R_MALLOC_FAILURE);
return 0;
}
- if (MGF1(dbmask, emlen - SHA_DIGEST_LENGTH, seed, SHA_DIGEST_LENGTH) < 0)
+ if (PKCS1_MGF1(dbmask, emlen - mdlen, seed, mdlen, mgf1md) < 0)
return 0;
- for (i = 0; i < emlen - SHA_DIGEST_LENGTH; i++)
+ for (i = 0; i < emlen - mdlen; i++)
db[i] ^= dbmask[i];
- if (MGF1(seedmask, SHA_DIGEST_LENGTH, db, emlen - SHA_DIGEST_LENGTH) < 0)
+ if (PKCS1_MGF1(seedmask, mdlen, db, emlen - mdlen, mgf1md) < 0)
return 0;
- for (i = 0; i < SHA_DIGEST_LENGTH; i++)
+ for (i = 0; i < mdlen; i++)
seed[i] ^= seedmask[i];
OPENSSL_free(dbmask);
@@ -92,6 +106,16 @@ int RSA_padding_check_PKCS1_OAEP(unsigned char *to, int tlen,
const unsigned char *from, int flen, int num,
const unsigned char *param, int plen)
{
+ return RSA_padding_check_PKCS1_OAEP_mgf1(to, tlen, from, flen, num,
+ param, plen, NULL, NULL);
+}
+
+int RSA_padding_check_PKCS1_OAEP_mgf1(unsigned char *to, int tlen,
+ const unsigned char *from, int flen,
+ int num, const unsigned char *param,
+ int plen, const EVP_MD *md,
+ const EVP_MD *mgf1md)
+{
int i, dblen, mlen = -1, one_index = 0, msg_index;
unsigned int good, found_one_byte;
const unsigned char *maskedseed, *maskeddb;
@@ -101,26 +125,33 @@ int RSA_padding_check_PKCS1_OAEP(unsigned char *to, int tlen,
*/
unsigned char *db = NULL, *em = NULL, seed[EVP_MAX_MD_SIZE],
phash[EVP_MAX_MD_SIZE];
+ int mdlen;
+
+ if (md == NULL)
+ md = EVP_sha1();
+ if (mgf1md == NULL)
+ mgf1md = md;
+
+ mdlen = EVP_MD_size(md);
if (tlen <= 0 || flen <= 0)
return -1;
-
/*
* |num| is the length of the modulus; |flen| is the length of the
* encoded message. Therefore, for any |from| that was obtained by
* decrypting a ciphertext, we must have |flen| <= |num|. Similarly,
- * num < 2 * SHA_DIGEST_LENGTH + 2 must hold for the modulus
- * irrespective of the ciphertext, see PKCS #1 v2.2, section 7.1.2.
+ * num < 2 * mdlen + 2 must hold for the modulus irrespective of
+ * the ciphertext, see PKCS #1 v2.2, section 7.1.2.
* This does not leak any side-channel information.
*/
- if (num < flen || num < 2 * SHA_DIGEST_LENGTH + 2)
+ if (num < flen || num < 2 * mdlen + 2)
goto decoding_err;
- dblen = num - SHA_DIGEST_LENGTH - 1;
+ dblen = num - mdlen - 1;
db = OPENSSL_malloc(dblen);
em = OPENSSL_malloc(num);
if (db == NULL || em == NULL) {
- RSAerr(RSA_F_RSA_PADDING_CHECK_PKCS1_OAEP, ERR_R_MALLOC_FAILURE);
+ RSAerr(RSA_F_RSA_PADDING_CHECK_PKCS1_OAEP_MGF1, ERR_R_MALLOC_FAILURE);
goto cleanup;
}
@@ -143,26 +174,25 @@ int RSA_padding_check_PKCS1_OAEP(unsigned char *to, int tlen,
good = constant_time_is_zero(em[0]);
maskedseed = em + 1;
- maskeddb = em + 1 + SHA_DIGEST_LENGTH;
+ maskeddb = em + 1 + mdlen;
- if (MGF1(seed, SHA_DIGEST_LENGTH, maskeddb, dblen))
+ if (PKCS1_MGF1(seed, mdlen, maskeddb, dblen, mgf1md))
goto cleanup;
- for (i = 0; i < SHA_DIGEST_LENGTH; i++)
+ for (i = 0; i < mdlen; i++)
seed[i] ^= maskedseed[i];
- if (MGF1(db, dblen, seed, SHA_DIGEST_LENGTH))
+ if (PKCS1_MGF1(db, dblen, seed, mdlen, mgf1md))
goto cleanup;
for (i = 0; i < dblen; i++)
db[i] ^= maskeddb[i];
- if (!EVP_Digest((void *)param, plen, phash, NULL, EVP_sha1(), NULL))
+ if (!EVP_Digest((void *)param, plen, phash, NULL, md, NULL))
goto cleanup;
- good &=
- constant_time_is_zero(CRYPTO_memcmp(db, phash, SHA_DIGEST_LENGTH));
+ good &= constant_time_is_zero(CRYPTO_memcmp(db, phash, mdlen));
found_one_byte = 0;
- for (i = SHA_DIGEST_LENGTH; i < dblen; i++) {
+ for (i = mdlen; i < dblen; i++) {
/*
* Padding consists of a number of 0-bytes, followed by a 1.
*/
@@ -188,7 +218,7 @@ int RSA_padding_check_PKCS1_OAEP(unsigned char *to, int tlen,
mlen = dblen - msg_index;
if (tlen < mlen) {
- RSAerr(RSA_F_RSA_PADDING_CHECK_PKCS1_OAEP, RSA_R_DATA_TOO_LARGE);
+ RSAerr(RSA_F_RSA_PADDING_CHECK_PKCS1_OAEP_MGF1, RSA_R_DATA_TOO_LARGE);
mlen = -1;
} else {
memcpy(to, db + msg_index, mlen);
@@ -200,7 +230,8 @@ int RSA_padding_check_PKCS1_OAEP(unsigned char *to, int tlen,
* To avoid chosen ciphertext attacks, the error message should not
* reveal which kind of decoding error happened.
*/
- RSAerr(RSA_F_RSA_PADDING_CHECK_PKCS1_OAEP, RSA_R_OAEP_DECODING_ERROR);
+ RSAerr(RSA_F_RSA_PADDING_CHECK_PKCS1_OAEP_MGF1,
+ RSA_R_OAEP_DECODING_ERROR);
cleanup:
if (db != NULL)
OPENSSL_free(db);
@@ -249,9 +280,4 @@ int PKCS1_MGF1(unsigned char *mask, long len,
return rv;
}
-static int MGF1(unsigned char *mask, long len, const unsigned char *seed,
- long seedlen)
-{
- return PKCS1_MGF1(mask, len, seed, seedlen, EVP_sha1());
-}
#endif
diff --git a/crypto/openssl/crypto/rsa/rsa_pmeth.c b/crypto/openssl/crypto/rsa/rsa_pmeth.c
index 6a7c67c..2036355 100644
--- a/crypto/openssl/crypto/rsa/rsa_pmeth.c
+++ b/crypto/openssl/crypto/rsa/rsa_pmeth.c
@@ -64,6 +64,7 @@
#include <openssl/rsa.h>
#include <openssl/bn.h>
#include <openssl/evp.h>
+#include <openssl/x509v3.h>
#ifndef OPENSSL_NO_CMS
# include <openssl/cms.h>
#endif
@@ -87,10 +88,13 @@ typedef struct {
const EVP_MD *md;
/* message digest for MGF1 */
const EVP_MD *mgf1md;
- /* PSS/OAEP salt length */
+ /* PSS salt length */
int saltlen;
/* Temp buffer */
unsigned char *tbuf;
+ /* OAEP label */
+ unsigned char *oaep_label;
+ size_t oaep_labellen;
} RSA_PKEY_CTX;
static int pkey_rsa_init(EVP_PKEY_CTX *ctx)
@@ -108,6 +112,9 @@ static int pkey_rsa_init(EVP_PKEY_CTX *ctx)
rctx->saltlen = -2;
+ rctx->oaep_label = NULL;
+ rctx->oaep_labellen = 0;
+
ctx->data = rctx;
ctx->keygen_info = rctx->gentmp;
ctx->keygen_info_count = 2;
@@ -130,6 +137,15 @@ static int pkey_rsa_copy(EVP_PKEY_CTX *dst, EVP_PKEY_CTX *src)
}
dctx->pad_mode = sctx->pad_mode;
dctx->md = sctx->md;
+ dctx->mgf1md = sctx->mgf1md;
+ if (sctx->oaep_label) {
+ if (dctx->oaep_label)
+ OPENSSL_free(dctx->oaep_label);
+ dctx->oaep_label = BUF_memdup(sctx->oaep_label, sctx->oaep_labellen);
+ if (!dctx->oaep_label)
+ return 0;
+ dctx->oaep_labellen = sctx->oaep_labellen;
+ }
return 1;
}
@@ -151,6 +167,8 @@ static void pkey_rsa_cleanup(EVP_PKEY_CTX *ctx)
BN_free(rctx->pub_exp);
if (rctx->tbuf)
OPENSSL_free(rctx->tbuf);
+ if (rctx->oaep_label)
+ OPENSSL_free(rctx->oaep_label);
OPENSSL_free(rctx);
}
}
@@ -173,10 +191,18 @@ static int pkey_fips_check_ctx(EVP_PKEY_CTX *ctx)
rv = 0;
if (!(rsa->meth->flags & RSA_FLAG_FIPS_METHOD) && rv)
return -1;
- if (rctx->md && !(rctx->md->flags & EVP_MD_FLAG_FIPS))
- return rv;
- if (rctx->mgf1md && !(rctx->mgf1md->flags & EVP_MD_FLAG_FIPS))
- return rv;
+ if (rctx->md) {
+ const EVP_MD *fmd;
+ fmd = FIPS_get_digestbynid(EVP_MD_type(rctx->md));
+ if (!fmd || !(fmd->flags & EVP_MD_FLAG_FIPS))
+ return rv;
+ }
+ if (rctx->mgf1md && !(rctx->mgf1md->flags & EVP_MD_FLAG_FIPS)) {
+ const EVP_MD *fmd;
+ fmd = FIPS_get_digestbynid(EVP_MD_type(rctx->mgf1md));
+ if (!fmd || !(fmd->flags & EVP_MD_FLAG_FIPS))
+ return rv;
+ }
return 1;
}
#endif
@@ -388,8 +414,21 @@ static int pkey_rsa_encrypt(EVP_PKEY_CTX *ctx,
{
int ret;
RSA_PKEY_CTX *rctx = ctx->data;
- ret = RSA_public_encrypt(inlen, in, out, ctx->pkey->pkey.rsa,
- rctx->pad_mode);
+ if (rctx->pad_mode == RSA_PKCS1_OAEP_PADDING) {
+ int klen = RSA_size(ctx->pkey->pkey.rsa);
+ if (!setup_tbuf(rctx, ctx))
+ return -1;
+ if (!RSA_padding_add_PKCS1_OAEP_mgf1(rctx->tbuf, klen,
+ in, inlen,
+ rctx->oaep_label,
+ rctx->oaep_labellen,
+ rctx->md, rctx->mgf1md))
+ return -1;
+ ret = RSA_public_encrypt(klen, rctx->tbuf, out,
+ ctx->pkey->pkey.rsa, RSA_NO_PADDING);
+ } else
+ ret = RSA_public_encrypt(inlen, in, out, ctx->pkey->pkey.rsa,
+ rctx->pad_mode);
if (ret < 0)
return ret;
*outlen = ret;
@@ -402,8 +441,26 @@ static int pkey_rsa_decrypt(EVP_PKEY_CTX *ctx,
{
int ret;
RSA_PKEY_CTX *rctx = ctx->data;
- ret = RSA_private_decrypt(inlen, in, out, ctx->pkey->pkey.rsa,
- rctx->pad_mode);
+ if (rctx->pad_mode == RSA_PKCS1_OAEP_PADDING) {
+ int i;
+ if (!setup_tbuf(rctx, ctx))
+ return -1;
+ ret = RSA_private_decrypt(inlen, in, rctx->tbuf,
+ ctx->pkey->pkey.rsa, RSA_NO_PADDING);
+ if (ret <= 0)
+ return ret;
+ for (i = 0; i < ret; i++) {
+ if (rctx->tbuf[i])
+ break;
+ }
+ ret = RSA_padding_check_PKCS1_OAEP_mgf1(out, ret, rctx->tbuf + i,
+ ret - i, ret,
+ rctx->oaep_label,
+ rctx->oaep_labellen,
+ rctx->md, rctx->mgf1md);
+ } else
+ ret = RSA_private_decrypt(inlen, in, out, ctx->pkey->pkey.rsa,
+ rctx->pad_mode);
if (ret < 0)
return ret;
*outlen = ret;
@@ -490,18 +547,36 @@ static int pkey_rsa_ctrl(EVP_PKEY_CTX *ctx, int type, int p1, void *p2)
case EVP_PKEY_CTRL_RSA_KEYGEN_PUBEXP:
if (!p2)
return -2;
+ BN_free(rctx->pub_exp);
rctx->pub_exp = p2;
return 1;
+ case EVP_PKEY_CTRL_RSA_OAEP_MD:
+ case EVP_PKEY_CTRL_GET_RSA_OAEP_MD:
+ if (rctx->pad_mode != RSA_PKCS1_OAEP_PADDING) {
+ RSAerr(RSA_F_PKEY_RSA_CTRL, RSA_R_INVALID_PADDING_MODE);
+ return -2;
+ }
+ if (type == EVP_PKEY_CTRL_GET_RSA_OAEP_MD)
+ *(const EVP_MD **)p2 = rctx->md;
+ else
+ rctx->md = p2;
+ return 1;
+
case EVP_PKEY_CTRL_MD:
if (!check_padding_md(p2, rctx->pad_mode))
return 0;
rctx->md = p2;
return 1;
+ case EVP_PKEY_CTRL_GET_MD:
+ *(const EVP_MD **)p2 = rctx->md;
+ return 1;
+
case EVP_PKEY_CTRL_RSA_MGF1_MD:
case EVP_PKEY_CTRL_GET_RSA_MGF1_MD:
- if (rctx->pad_mode != RSA_PKCS1_PSS_PADDING) {
+ if (rctx->pad_mode != RSA_PKCS1_PSS_PADDING
+ && rctx->pad_mode != RSA_PKCS1_OAEP_PADDING) {
RSAerr(RSA_F_PKEY_RSA_CTRL, RSA_R_INVALID_MGF1_MD);
return -2;
}
@@ -514,6 +589,30 @@ static int pkey_rsa_ctrl(EVP_PKEY_CTX *ctx, int type, int p1, void *p2)
rctx->mgf1md = p2;
return 1;
+ case EVP_PKEY_CTRL_RSA_OAEP_LABEL:
+ if (rctx->pad_mode != RSA_PKCS1_OAEP_PADDING) {
+ RSAerr(RSA_F_PKEY_RSA_CTRL, RSA_R_INVALID_PADDING_MODE);
+ return -2;
+ }
+ if (rctx->oaep_label)
+ OPENSSL_free(rctx->oaep_label);
+ if (p2 && p1 > 0) {
+ rctx->oaep_label = p2;
+ rctx->oaep_labellen = p1;
+ } else {
+ rctx->oaep_label = NULL;
+ rctx->oaep_labellen = 0;
+ }
+ return 1;
+
+ case EVP_PKEY_CTRL_GET_RSA_OAEP_LABEL:
+ if (rctx->pad_mode != RSA_PKCS1_OAEP_PADDING) {
+ RSAerr(RSA_F_PKEY_RSA_CTRL, RSA_R_INVALID_PADDING_MODE);
+ return -2;
+ }
+ *(unsigned char **)p2 = rctx->oaep_label;
+ return rctx->oaep_labellen;
+
case EVP_PKEY_CTRL_DIGESTINIT:
case EVP_PKEY_CTRL_PKCS7_ENCRYPT:
case EVP_PKEY_CTRL_PKCS7_DECRYPT:
@@ -521,16 +620,6 @@ static int pkey_rsa_ctrl(EVP_PKEY_CTX *ctx, int type, int p1, void *p2)
return 1;
#ifndef OPENSSL_NO_CMS
case EVP_PKEY_CTRL_CMS_DECRYPT:
- {
- X509_ALGOR *alg = NULL;
- ASN1_OBJECT *encalg = NULL;
- if (p2)
- CMS_RecipientInfo_ktri_get0_algs(p2, NULL, NULL, &alg);
- if (alg)
- X509_ALGOR_get0(&encalg, NULL, NULL, alg);
- if (encalg && OBJ_obj2nid(encalg) == NID_rsaesOaep)
- rctx->pad_mode = RSA_PKCS1_OAEP_PADDING;
- }
case EVP_PKEY_CTRL_CMS_ENCRYPT:
case EVP_PKEY_CTRL_CMS_SIGN:
return 1;
@@ -599,6 +688,36 @@ static int pkey_rsa_ctrl_str(EVP_PKEY_CTX *ctx,
return ret;
}
+ if (!strcmp(type, "rsa_mgf1_md")) {
+ const EVP_MD *md;
+ if (!(md = EVP_get_digestbyname(value))) {
+ RSAerr(RSA_F_PKEY_RSA_CTRL_STR, RSA_R_INVALID_DIGEST);
+ return 0;
+ }
+ return EVP_PKEY_CTX_set_rsa_mgf1_md(ctx, md);
+ }
+
+ if (!strcmp(type, "rsa_oaep_md")) {
+ const EVP_MD *md;
+ if (!(md = EVP_get_digestbyname(value))) {
+ RSAerr(RSA_F_PKEY_RSA_CTRL_STR, RSA_R_INVALID_DIGEST);
+ return 0;
+ }
+ return EVP_PKEY_CTX_set_rsa_oaep_md(ctx, md);
+ }
+ if (!strcmp(type, "rsa_oaep_label")) {
+ unsigned char *lab;
+ long lablen;
+ int ret;
+ lab = string_to_hex(value, &lablen);
+ if (!lab)
+ return 0;
+ ret = EVP_PKEY_CTX_set0_rsa_oaep_label(ctx, lab, lablen);
+ if (ret <= 0)
+ OPENSSL_free(lab);
+ return ret;
+ }
+
return -2;
}
diff --git a/crypto/openssl/crypto/rsa/rsa_sign.c b/crypto/openssl/crypto/rsa/rsa_sign.c
index bc91da2..19461c6 100644
--- a/crypto/openssl/crypto/rsa/rsa_sign.c
+++ b/crypto/openssl/crypto/rsa/rsa_sign.c
@@ -261,19 +261,8 @@ int int_rsa_verify(int dtype, const unsigned char *m,
OBJ_nid2ln(dtype));
#endif
if (sigtype != dtype) {
- if (((dtype == NID_md5) &&
- (sigtype == NID_md5WithRSAEncryption)) ||
- ((dtype == NID_md2) &&
- (sigtype == NID_md2WithRSAEncryption))) {
- /* ok, we will let it through */
-#if !defined(OPENSSL_NO_STDIO) && !defined(OPENSSL_SYS_WIN16)
- fprintf(stderr,
- "signature has problems, re-make with post SSLeay045\n");
-#endif
- } else {
- RSAerr(RSA_F_INT_RSA_VERIFY, RSA_R_ALGORITHM_MISMATCH);
- goto err;
- }
+ RSAerr(RSA_F_INT_RSA_VERIFY, RSA_R_ALGORITHM_MISMATCH);
+ goto err;
}
if (rm) {
const EVP_MD *md;
diff --git a/crypto/openssl/crypto/sha/Makefile b/crypto/openssl/crypto/sha/Makefile
index ceb8094..de6cdde 100644
--- a/crypto/openssl/crypto/sha/Makefile
+++ b/crypto/openssl/crypto/sha/Makefile
@@ -60,21 +60,25 @@ sha256-armv4.S: asm/sha256-armv4.pl
$(PERL) $< $(PERLASM_SCHEME) $@
sha1-alpha.s: asm/sha1-alpha.pl
- (preproc=/tmp/$$$$.$@; trap "rm $$preproc" INT; \
+ (preproc=$$$$.$@.S; trap "rm $$preproc" INT; \
$(PERL) asm/sha1-alpha.pl > $$preproc && \
- $(CC) -E $$preproc > $@ && rm $$preproc)
+ $(CC) -E -P $$preproc > $@ && rm $$preproc)
# Solaris make has to be explicitly told
sha1-x86_64.s: asm/sha1-x86_64.pl; $(PERL) asm/sha1-x86_64.pl $(PERLASM_SCHEME) > $@
+sha1-mb-x86_64.s: asm/sha1-mb-x86_64.pl; $(PERL) asm/sha1-mb-x86_64.pl $(PERLASM_SCHEME) > $@
sha256-x86_64.s:asm/sha512-x86_64.pl; $(PERL) asm/sha512-x86_64.pl $(PERLASM_SCHEME) $@
+sha256-mb-x86_64.s: asm/sha256-mb-x86_64.pl; $(PERL) asm/sha256-mb-x86_64.pl $(PERLASM_SCHEME) > $@
sha512-x86_64.s:asm/sha512-x86_64.pl; $(PERL) asm/sha512-x86_64.pl $(PERLASM_SCHEME) $@
-sha1-sparcv9.s: asm/sha1-sparcv9.pl; $(PERL) asm/sha1-sparcv9.pl $@ $(CFLAGS)
-sha256-sparcv9.s:asm/sha512-sparcv9.pl; $(PERL) asm/sha512-sparcv9.pl $@ $(CFLAGS)
-sha512-sparcv9.s:asm/sha512-sparcv9.pl; $(PERL) asm/sha512-sparcv9.pl $@ $(CFLAGS)
+sha1-sparcv9.S: asm/sha1-sparcv9.pl; $(PERL) asm/sha1-sparcv9.pl $@ $(CFLAGS)
+sha256-sparcv9.S:asm/sha512-sparcv9.pl; $(PERL) asm/sha512-sparcv9.pl $@ $(CFLAGS)
+sha512-sparcv9.S:asm/sha512-sparcv9.pl; $(PERL) asm/sha512-sparcv9.pl $@ $(CFLAGS)
sha1-ppc.s: asm/sha1-ppc.pl; $(PERL) asm/sha1-ppc.pl $(PERLASM_SCHEME) $@
sha256-ppc.s: asm/sha512-ppc.pl; $(PERL) asm/sha512-ppc.pl $(PERLASM_SCHEME) $@
sha512-ppc.s: asm/sha512-ppc.pl; $(PERL) asm/sha512-ppc.pl $(PERLASM_SCHEME) $@
+sha256p8-ppc.s: asm/sha512p8-ppc.pl; $(PERL) asm/sha512p8-ppc.pl $(PERLASM_SCHEME) $@
+sha512p8-ppc.s: asm/sha512p8-ppc.pl; $(PERL) asm/sha512p8-ppc.pl $(PERLASM_SCHEME) $@
sha1-parisc.s: asm/sha1-parisc.pl; $(PERL) asm/sha1-parisc.pl $(PERLASM_SCHEME) $@
sha256-parisc.s:asm/sha512-parisc.pl; $(PERL) asm/sha512-parisc.pl $(PERLASM_SCHEME) $@
@@ -92,6 +96,9 @@ sha512-%.S: asm/sha512-%.pl; $(PERL) $< $(PERLASM_SCHEME) $@
sha1-armv4-large.o: sha1-armv4-large.S
sha256-armv4.o: sha256-armv4.S
sha512-armv4.o: sha512-armv4.S
+sha1-armv8.o: sha1-armv8.S
+sha256-armv8.o: sha256-armv8.S
+sha512-armv8.o: sha512-armv8.S
files:
$(PERL) $(TOP)/util/files.pl Makefile >> $(TOP)/MINFO
diff --git a/crypto/openssl/crypto/sha/asm/sha1-586.pl b/crypto/openssl/crypto/sha/asm/sha1-586.pl
index 1084d22..4895eb3 100644
--- a/crypto/openssl/crypto/sha/asm/sha1-586.pl
+++ b/crypto/openssl/crypto/sha/asm/sha1-586.pl
@@ -1,7 +1,7 @@
#!/usr/bin/env perl
# ====================================================================
-# [Re]written by Andy Polyakov <appro@fy.chalmers.se> for the OpenSSL
+# [Re]written by Andy Polyakov <appro@openssl.org> for the OpenSSL
# project. The module is, however, dual licensed under OpenSSL and
# CRYPTOGAMS licenses depending on where you obtain it. For further
# details see http://www.openssl.org/~appro/cryptogams/.
@@ -79,6 +79,10 @@
# strongly, it's probably more appropriate to discuss possibility of
# using vector rotate XOP on AMD...
+# March 2014.
+#
+# Add support for Intel SHA Extensions.
+
######################################################################
# Current performance is summarized in following table. Numbers are
# CPU clock cycles spent to process single byte (less is better).
@@ -88,13 +92,20 @@
# PIII 11.5 -
# P4 10.6 -
# AMD K8 7.1 -
-# Core2 7.3 6.1/+20% -
-# Atom 12.5 9.5(*)/+32% -
-# Westmere 7.3 5.6/+30% -
-# Sandy Bridge 8.8 6.2/+40% 5.1(**)/+70%
+# Core2 7.3 6.0/+22% -
+# Westmere 7.3 5.5/+33% -
+# Sandy Bridge 8.8 6.2/+40% 5.1(**)/+73%
+# Ivy Bridge 7.2 4.8/+51% 4.7(**)/+53%
+# Haswell 6.5 4.3/+51% 4.1(**)/+58%
+# Bulldozer 11.6 6.0/+92%
+# VIA Nano 10.6 7.5/+41%
+# Atom 12.5 9.3(*)/+35%
+# Silvermont 14.5 9.9(*)/+46%
#
# (*) Loop is 1056 instructions long and expected result is ~8.25.
-# It remains mystery [to me] why ILP is limited to 1.7.
+# The discrepancy is because of front-end limitations, so
+# called MS-ROM penalties, and on Silvermont even rotate's
+# limited parallelism.
#
# (**) As per above comment, the result is for AVX *plus* sh[rl]d.
@@ -116,6 +127,15 @@ $ymm=1 if ($xmm && !$ymm && $ARGV[0] eq "win32n" &&
`nasm -v 2>&1` =~ /NASM version ([2-9]\.[0-9]+)/ &&
$1>=2.03); # first version supporting AVX
+$ymm=1 if ($xmm && !$ymm && $ARGV[0] eq "win32" &&
+ `ml 2>&1` =~ /Version ([0-9]+)\./ &&
+ $1>=10); # first version supporting AVX
+
+$ymm=1 if ($xmm && !$ymm && `$ENV{CC} -v 2>&1` =~ /(^clang version|based on LLVM) ([3-9]\.[0-9]+)/ &&
+ $2>=3.0); # first version supporting AVX
+
+$shaext=$xmm; ### set to zero if compiling for 1.0.1
+
&external_label("OPENSSL_ia32cap_P") if ($xmm);
@@ -295,6 +315,7 @@ if ($alt) {
&function_begin("sha1_block_data_order");
if ($xmm) {
+ &static_label("shaext_shortcut") if ($shaext);
&static_label("ssse3_shortcut");
&static_label("avx_shortcut") if ($ymm);
&static_label("K_XX_XX");
@@ -309,8 +330,13 @@ if ($xmm) {
&mov ($D,&DWP(4,$T));
&test ($D,1<<9); # check SSSE3 bit
&jz (&label("x86"));
+ &mov ($C,&DWP(8,$T));
&test ($A,1<<24); # check FXSR bit
&jz (&label("x86"));
+ if ($shaext) {
+ &test ($C,1<<29); # check SHA bit
+ &jnz (&label("shaext_shortcut"));
+ }
if ($ymm) {
&and ($D,1<<28); # mask AVX bit
&and ($A,1<<30); # mask "Intel CPU" bit
@@ -389,6 +415,117 @@ if ($xmm) {
&function_end("sha1_block_data_order");
if ($xmm) {
+if ($shaext) {
+######################################################################
+# Intel SHA Extensions implementation of SHA1 update function.
+#
+my ($ctx,$inp,$num)=("edi","esi","ecx");
+my ($ABCD,$E,$E_,$BSWAP)=map("xmm$_",(0..3));
+my @MSG=map("xmm$_",(4..7));
+
+sub sha1rnds4 {
+ my ($dst,$src,$imm)=@_;
+ if ("$dst:$src" =~ /xmm([0-7]):xmm([0-7])/)
+ { &data_byte(0x0f,0x3a,0xcc,0xc0|($1<<3)|$2,$imm); }
+}
+sub sha1op38 {
+ my ($opcodelet,$dst,$src)=@_;
+ if ("$dst:$src" =~ /xmm([0-7]):xmm([0-7])/)
+ { &data_byte(0x0f,0x38,$opcodelet,0xc0|($1<<3)|$2); }
+}
+sub sha1nexte { sha1op38(0xc8,@_); }
+sub sha1msg1 { sha1op38(0xc9,@_); }
+sub sha1msg2 { sha1op38(0xca,@_); }
+
+&function_begin("_sha1_block_data_order_shaext");
+ &call (&label("pic_point")); # make it PIC!
+ &set_label("pic_point");
+ &blindpop($tmp1);
+ &lea ($tmp1,&DWP(&label("K_XX_XX")."-".&label("pic_point"),$tmp1));
+&set_label("shaext_shortcut");
+ &mov ($ctx,&wparam(0));
+ &mov ("ebx","esp");
+ &mov ($inp,&wparam(1));
+ &mov ($num,&wparam(2));
+ &sub ("esp",32);
+
+ &movdqu ($ABCD,&QWP(0,$ctx));
+ &movd ($E,&DWP(16,$ctx));
+ &and ("esp",-32);
+ &movdqa ($BSWAP,&QWP(0x50,$tmp1)); # byte-n-word swap
+
+ &movdqu (@MSG[0],&QWP(0,$inp));
+ &pshufd ($ABCD,$ABCD,0b00011011); # flip word order
+ &movdqu (@MSG[1],&QWP(0x10,$inp));
+ &pshufd ($E,$E,0b00011011); # flip word order
+ &movdqu (@MSG[2],&QWP(0x20,$inp));
+ &pshufb (@MSG[0],$BSWAP);
+ &movdqu (@MSG[3],&QWP(0x30,$inp));
+ &pshufb (@MSG[1],$BSWAP);
+ &pshufb (@MSG[2],$BSWAP);
+ &pshufb (@MSG[3],$BSWAP);
+ &jmp (&label("loop_shaext"));
+
+&set_label("loop_shaext",16);
+ &dec ($num);
+ &lea ("eax",&DWP(0x40,$inp));
+ &movdqa (&QWP(0,"esp"),$E); # offload $E
+ &paddd ($E,@MSG[0]);
+ &cmovne ($inp,"eax");
+ &movdqa (&QWP(16,"esp"),$ABCD); # offload $ABCD
+
+for($i=0;$i<20-4;$i+=2) {
+ &sha1msg1 (@MSG[0],@MSG[1]);
+ &movdqa ($E_,$ABCD);
+ &sha1rnds4 ($ABCD,$E,int($i/5)); # 0-3...
+ &sha1nexte ($E_,@MSG[1]);
+ &pxor (@MSG[0],@MSG[2]);
+ &sha1msg1 (@MSG[1],@MSG[2]);
+ &sha1msg2 (@MSG[0],@MSG[3]);
+
+ &movdqa ($E,$ABCD);
+ &sha1rnds4 ($ABCD,$E_,int(($i+1)/5));
+ &sha1nexte ($E,@MSG[2]);
+ &pxor (@MSG[1],@MSG[3]);
+ &sha1msg2 (@MSG[1],@MSG[0]);
+
+ push(@MSG,shift(@MSG)); push(@MSG,shift(@MSG));
+}
+ &movdqu (@MSG[0],&QWP(0,$inp));
+ &movdqa ($E_,$ABCD);
+ &sha1rnds4 ($ABCD,$E,3); # 64-67
+ &sha1nexte ($E_,@MSG[1]);
+ &movdqu (@MSG[1],&QWP(0x10,$inp));
+ &pshufb (@MSG[0],$BSWAP);
+
+ &movdqa ($E,$ABCD);
+ &sha1rnds4 ($ABCD,$E_,3); # 68-71
+ &sha1nexte ($E,@MSG[2]);
+ &movdqu (@MSG[2],&QWP(0x20,$inp));
+ &pshufb (@MSG[1],$BSWAP);
+
+ &movdqa ($E_,$ABCD);
+ &sha1rnds4 ($ABCD,$E,3); # 72-75
+ &sha1nexte ($E_,@MSG[3]);
+ &movdqu (@MSG[3],&QWP(0x30,$inp));
+ &pshufb (@MSG[2],$BSWAP);
+
+ &movdqa ($E,$ABCD);
+ &sha1rnds4 ($ABCD,$E_,3); # 76-79
+ &movdqa ($E_,&QWP(0,"esp"));
+ &pshufb (@MSG[3],$BSWAP);
+ &sha1nexte ($E,$E_);
+ &paddd ($ABCD,&QWP(16,"esp"));
+
+ &jnz (&label("loop_shaext"));
+
+ &pshufd ($ABCD,$ABCD,0b00011011);
+ &pshufd ($E,$E,0b00011011);
+ &movdqu (&QWP(0,$ctx),$ABCD)
+ &movd (&DWP(16,$ctx),$E);
+ &mov ("esp","ebx");
+&function_end("_sha1_block_data_order_shaext");
+}
######################################################################
# The SSSE3 implementation.
#
@@ -416,6 +553,7 @@ my $Xi=4; # 4xSIMD Xupdate round, start pre-seeded
my @X=map("xmm$_",(4..7,0..3)); # pre-seeded for $Xi=4
my @V=($A,$B,$C,$D,$E);
my $j=0; # hash round
+my $rx=0;
my @T=($T,$tmp1);
my $inp;
@@ -501,8 +639,11 @@ my $_ror=sub { &ror(@_) };
&movdqa (&QWP(0+16,"esp"),@X[-3&7]);
&psubd (@X[-3&7],@X[3]);
&movdqa (&QWP(0+32,"esp"),@X[-2&7]);
+ &mov (@T[1],$C);
&psubd (@X[-2&7],@X[3]);
- &movdqa (@X[0],@X[-3&7]);
+ &xor (@T[1],$D);
+ &pshufd (@X[0],@X[-4&7],0xee); # was &movdqa (@X[0],@X[-3&7]);
+ &and (@T[0],@T[1]);
&jmp (&label("loop"));
######################################################################
@@ -528,76 +669,77 @@ sub Xupdate_ssse3_16_31() # recall that $Xi starts wtih 4
my @insns = (&$body,&$body,&$body,&$body); # 40 instructions
my ($a,$b,$c,$d,$e);
+ eval(shift(@insns)); # ror
eval(shift(@insns));
eval(shift(@insns));
- &palignr(@X[0],@X[-4&7],8); # compose "X[-14]" in "X[0]"
+ &punpcklqdq(@X[0],@X[-3&7]); # compose "X[-14]" in "X[0]", was &palignr(@X[0],@X[-4&7],8);
&movdqa (@X[2],@X[-1&7]);
eval(shift(@insns));
eval(shift(@insns));
&paddd (@X[3],@X[-1&7]);
&movdqa (&QWP(64+16*(($Xi-4)%3),"esp"),@X[-4&7]);# save X[] to backtrace buffer
- eval(shift(@insns));
+ eval(shift(@insns)); # rol
eval(shift(@insns));
&psrldq (@X[2],4); # "X[-3]", 3 dwords
eval(shift(@insns));
eval(shift(@insns));
&pxor (@X[0],@X[-4&7]); # "X[0]"^="X[-16]"
eval(shift(@insns));
- eval(shift(@insns));
+ eval(shift(@insns)); # ror
&pxor (@X[2],@X[-2&7]); # "X[-3]"^"X[-8]"
eval(shift(@insns));
eval(shift(@insns));
eval(shift(@insns));
- eval(shift(@insns));
&pxor (@X[0],@X[2]); # "X[0]"^="X[-3]"^"X[-8]"
eval(shift(@insns));
- eval(shift(@insns));
+ eval(shift(@insns)); # rol
&movdqa (&QWP(0+16*(($Xi-1)&3),"esp"),@X[3]); # X[]+K xfer to IALU
eval(shift(@insns));
eval(shift(@insns));
&movdqa (@X[4],@X[0]);
- &movdqa (@X[2],@X[0]);
- eval(shift(@insns));
eval(shift(@insns));
eval(shift(@insns));
+ eval(shift(@insns)); # ror
+ &movdqa (@X[2],@X[0]);
eval(shift(@insns));
&pslldq (@X[4],12); # "X[0]"<<96, extract one dword
&paddd (@X[0],@X[0]);
eval(shift(@insns));
eval(shift(@insns));
- eval(shift(@insns));
- eval(shift(@insns));
&psrld (@X[2],31);
eval(shift(@insns));
- eval(shift(@insns));
+ eval(shift(@insns)); # rol
&movdqa (@X[3],@X[4]);
eval(shift(@insns));
eval(shift(@insns));
+ eval(shift(@insns));
&psrld (@X[4],30);
- &por (@X[0],@X[2]); # "X[0]"<<<=1
eval(shift(@insns));
+ eval(shift(@insns)); # ror
+ &por (@X[0],@X[2]); # "X[0]"<<<=1
eval(shift(@insns));
&movdqa (@X[2],&QWP(64+16*(($Xi-6)%3),"esp")) if ($Xi>5); # restore X[] from backtrace buffer
eval(shift(@insns));
eval(shift(@insns));
&pslld (@X[3],2);
- &pxor (@X[0],@X[4]);
- eval(shift(@insns));
eval(shift(@insns));
+ eval(shift(@insns)); # rol
+ &pxor (@X[0],@X[4]);
&movdqa (@X[4],&QWP(112-16+16*(($Xi)/5),"esp")); # K_XX_XX
eval(shift(@insns));
eval(shift(@insns));
&pxor (@X[0],@X[3]); # "X[0]"^=("X[0]"<<96)<<<2
- &movdqa (@X[1],@X[-2&7]) if ($Xi<7);
+ &pshufd (@X[1],@X[-3&7],0xee) if ($Xi<7); # was &movdqa (@X[1],@X[-2&7])
+ &pshufd (@X[3],@X[-1&7],0xee) if ($Xi==7);
eval(shift(@insns));
eval(shift(@insns));
@@ -609,13 +751,12 @@ sub Xupdate_ssse3_16_31() # recall that $Xi starts wtih 4
sub Xupdate_ssse3_32_79()
{ use integer;
my $body = shift;
- my @insns = (&$body,&$body,&$body,&$body); # 32 to 48 instructions
+ my @insns = (&$body,&$body,&$body,&$body); # 32 to 44 instructions
my ($a,$b,$c,$d,$e);
- &movdqa (@X[2],@X[-1&7]) if ($Xi==8);
eval(shift(@insns)); # body_20_39
&pxor (@X[0],@X[-4&7]); # "X[0]"="X[-32]"^"X[-16]"
- &palignr(@X[2],@X[-2&7],8); # compose "X[-6]"
+ &punpcklqdq(@X[2],@X[-1&7]); # compose "X[-6]", was &palignr(@X[2],@X[-2&7],8)
eval(shift(@insns));
eval(shift(@insns));
eval(shift(@insns)); # rol
@@ -624,13 +765,14 @@ sub Xupdate_ssse3_32_79()
&movdqa (&QWP(64+16*(($Xi-4)%3),"esp"),@X[-4&7]); # save X[] to backtrace buffer
eval(shift(@insns));
eval(shift(@insns));
+ eval(shift(@insns)) if (@insns[0] =~ /_rol/);
if ($Xi%5) {
&movdqa (@X[4],@X[3]); # "perpetuate" K_XX_XX...
} else { # ... or load next one
&movdqa (@X[4],&QWP(112-16+16*($Xi/5),"esp"));
}
- &paddd (@X[3],@X[-1&7]);
eval(shift(@insns)); # ror
+ &paddd (@X[3],@X[-1&7]);
eval(shift(@insns));
&pxor (@X[0],@X[2]); # "X[0]"^="X[-6]"
@@ -645,6 +787,7 @@ sub Xupdate_ssse3_32_79()
eval(shift(@insns));
eval(shift(@insns)); # ror
eval(shift(@insns));
+ eval(shift(@insns)) if (@insns[0] =~ /_rol/);
&pslld (@X[0],2);
eval(shift(@insns)); # body_20_39
@@ -656,6 +799,8 @@ sub Xupdate_ssse3_32_79()
eval(shift(@insns));
eval(shift(@insns)); # ror
eval(shift(@insns));
+ eval(shift(@insns)) if (@insns[1] =~ /_rol/);
+ eval(shift(@insns)) if (@insns[0] =~ /_rol/);
&por (@X[0],@X[2]); # "X[0]"<<<=2
eval(shift(@insns)); # body_20_39
@@ -666,7 +811,7 @@ sub Xupdate_ssse3_32_79()
eval(shift(@insns));
eval(shift(@insns));
eval(shift(@insns)); # ror
- &movdqa (@X[3],@X[0]) if ($Xi<19);
+ &pshufd (@X[3],@X[-1],0xee) if ($Xi<19); # was &movdqa (@X[3],@X[0])
eval(shift(@insns));
foreach (@insns) { eval; } # remaining instructions
@@ -681,6 +826,12 @@ sub Xuplast_ssse3_80()
my ($a,$b,$c,$d,$e);
eval(shift(@insns));
+ eval(shift(@insns));
+ eval(shift(@insns));
+ eval(shift(@insns));
+ eval(shift(@insns));
+ eval(shift(@insns));
+ eval(shift(@insns));
&paddd (@X[3],@X[-1&7]);
eval(shift(@insns));
eval(shift(@insns));
@@ -717,9 +868,16 @@ sub Xloop_ssse3()
eval(shift(@insns));
eval(shift(@insns));
+ eval(shift(@insns));
+ eval(shift(@insns));
+ eval(shift(@insns));
+ eval(shift(@insns));
+ eval(shift(@insns));
&pshufb (@X[($Xi-3)&7],@X[2]);
eval(shift(@insns));
eval(shift(@insns));
+ eval(shift(@insns));
+ eval(shift(@insns));
&paddd (@X[($Xi-4)&7],@X[3]);
eval(shift(@insns));
eval(shift(@insns));
@@ -728,6 +886,8 @@ sub Xloop_ssse3()
&movdqa (&QWP(0+16*$Xi,"esp"),@X[($Xi-4)&7]); # X[]+K xfer to IALU
eval(shift(@insns));
eval(shift(@insns));
+ eval(shift(@insns));
+ eval(shift(@insns));
&psubd (@X[($Xi-4)&7],@X[3]);
foreach (@insns) { eval; }
@@ -743,51 +903,124 @@ sub Xtail_ssse3()
foreach (@insns) { eval; }
}
-sub body_00_19 () {
+sub body_00_19 () { # ((c^d)&b)^d
+ # on start @T[0]=(c^d)&b
+ return &body_20_39() if ($rx==19); $rx++;
(
'($a,$b,$c,$d,$e)=@V;'.
- '&add ($e,&DWP(4*($j&15),"esp"));', # X[]+K xfer
- '&xor ($c,$d);',
+ '&$_ror ($b,$j?7:2);', # $b>>>2
+ '&xor (@T[0],$d);',
'&mov (@T[1],$a);', # $b in next round
+
+ '&add ($e,&DWP(4*($j&15),"esp"));', # X[]+K xfer
+ '&xor ($b,$c);', # $c^$d for next round
+
'&$_rol ($a,5);',
- '&and (@T[0],$c);', # ($b&($c^$d))
- '&xor ($c,$d);', # restore $c
- '&xor (@T[0],$d);',
- '&add ($e,$a);',
- '&$_ror ($b,$j?7:2);', # $b>>>2
- '&add ($e,@T[0]);' .'$j++; unshift(@V,pop(@V)); unshift(@T,pop(@T));'
+ '&add ($e,@T[0]);',
+ '&and (@T[1],$b);', # ($b&($c^$d)) for next round
+
+ '&xor ($b,$c);', # restore $b
+ '&add ($e,$a);' .'$j++; unshift(@V,pop(@V)); unshift(@T,pop(@T));'
);
}
-sub body_20_39 () {
+sub body_20_39 () { # b^d^c
+ # on entry @T[0]=b^d
+ return &body_40_59() if ($rx==39); $rx++;
(
'($a,$b,$c,$d,$e)=@V;'.
- '&add ($e,&DWP(4*($j++&15),"esp"));', # X[]+K xfer
- '&xor (@T[0],$d);', # ($b^$d)
+ '&add ($e,&DWP(4*($j&15),"esp"));', # X[]+K xfer
+ '&xor (@T[0],$d) if($j==19);'.
+ '&xor (@T[0],$c) if($j> 19);', # ($b^$d^$c)
'&mov (@T[1],$a);', # $b in next round
+
'&$_rol ($a,5);',
- '&xor (@T[0],$c);', # ($b^$d^$c)
- '&add ($e,$a);',
+ '&add ($e,@T[0]);',
+ '&xor (@T[1],$c) if ($j< 79);', # $b^$d for next round
+
'&$_ror ($b,7);', # $b>>>2
- '&add ($e,@T[0]);' .'unshift(@V,pop(@V)); unshift(@T,pop(@T));'
+ '&add ($e,$a);' .'$j++; unshift(@V,pop(@V)); unshift(@T,pop(@T));'
);
}
-sub body_40_59 () {
+sub body_40_59 () { # ((b^c)&(c^d))^c
+ # on entry @T[0]=(b^c), (c^=d)
+ $rx++;
(
'($a,$b,$c,$d,$e)=@V;'.
- '&mov (@T[1],$c);',
- '&xor ($c,$d);',
- '&add ($e,&DWP(4*($j++&15),"esp"));', # X[]+K xfer
- '&and (@T[1],$d);',
- '&and (@T[0],$c);', # ($b&($c^$d))
+ '&add ($e,&DWP(4*($j&15),"esp"));', # X[]+K xfer
+ '&and (@T[0],$c) if ($j>=40);', # (b^c)&(c^d)
+ '&xor ($c,$d) if ($j>=40);', # restore $c
+
'&$_ror ($b,7);', # $b>>>2
- '&add ($e,@T[1]);',
- '&mov (@T[1],$a);', # $b in next round
+ '&mov (@T[1],$a);', # $b for next round
+ '&xor (@T[0],$c);',
+
'&$_rol ($a,5);',
'&add ($e,@T[0]);',
- '&xor ($c,$d);', # restore $c
- '&add ($e,$a);' .'unshift(@V,pop(@V)); unshift(@T,pop(@T));'
+ '&xor (@T[1],$c) if ($j==59);'.
+ '&xor (@T[1],$b) if ($j< 59);', # b^c for next round
+
+ '&xor ($b,$c) if ($j< 59);', # c^d for next round
+ '&add ($e,$a);' .'$j++; unshift(@V,pop(@V)); unshift(@T,pop(@T));'
+ );
+}
+######
+sub bodyx_00_19 () { # ((c^d)&b)^d
+ # on start @T[0]=(b&c)^(~b&d), $e+=X[]+K
+ return &bodyx_20_39() if ($rx==19); $rx++;
+ (
+ '($a,$b,$c,$d,$e)=@V;'.
+
+ '&rorx ($b,$b,2) if ($j==0);'. # $b>>>2
+ '&rorx ($b,@T[1],7) if ($j!=0);', # $b>>>2
+ '&lea ($e,&DWP(0,$e,@T[0]));',
+ '&rorx (@T[0],$a,5);',
+
+ '&andn (@T[1],$a,$c);',
+ '&and ($a,$b)',
+ '&add ($d,&DWP(4*(($j+1)&15),"esp"));', # X[]+K xfer
+
+ '&xor (@T[1],$a)',
+ '&add ($e,@T[0]);' .'$j++; unshift(@V,pop(@V)); unshift(@T,pop(@T));'
+ );
+}
+
+sub bodyx_20_39 () { # b^d^c
+ # on start $b=b^c^d
+ return &bodyx_40_59() if ($rx==39); $rx++;
+ (
+ '($a,$b,$c,$d,$e)=@V;'.
+
+ '&add ($e,($j==19?@T[0]:$b))',
+ '&rorx ($b,@T[1],7);', # $b>>>2
+ '&rorx (@T[0],$a,5);',
+
+ '&xor ($a,$b) if ($j<79);',
+ '&add ($d,&DWP(4*(($j+1)&15),"esp")) if ($j<79);', # X[]+K xfer
+ '&xor ($a,$c) if ($j<79);',
+ '&add ($e,@T[0]);' .'$j++; unshift(@V,pop(@V)); unshift(@T,pop(@T));'
+ );
+}
+
+sub bodyx_40_59 () { # ((b^c)&(c^d))^c
+ # on start $b=((b^c)&(c^d))^c
+ return &bodyx_20_39() if ($rx==59); $rx++;
+ (
+ '($a,$b,$c,$d,$e)=@V;'.
+
+ '&rorx (@T[0],$a,5)',
+ '&lea ($e,&DWP(0,$e,$b))',
+ '&rorx ($b,@T[1],7)', # $b>>>2
+ '&add ($d,&DWP(4*(($j+1)&15),"esp"))', # X[]+K xfer
+
+ '&mov (@T[1],$c)',
+ '&xor ($a,$b)', # b^c for next round
+ '&xor (@T[1],$b)', # c^d for next round
+
+ '&and ($a,@T[1])',
+ '&add ($e,@T[0])',
+ '&xor ($a,$b)' .'$j++; unshift(@V,pop(@V)); unshift(@T,pop(@T));'
);
}
@@ -825,10 +1058,14 @@ sub body_40_59 () {
&mov (&DWP(4,@T[1]),@T[0]);
&add ($E,&DWP(16,@T[1]));
&mov (&DWP(8,@T[1]),$C);
- &mov ($B,@T[0]);
+ &mov ($B,$C);
&mov (&DWP(12,@T[1]),$D);
+ &xor ($B,$D);
&mov (&DWP(16,@T[1]),$E);
- &movdqa (@X[0],@X[-3&7]);
+ &mov (@T[1],@T[0]);
+ &pshufd (@X[0],@X[-4&7],0xee); # was &movdqa (@X[0],@X[-3&7]);
+ &and (@T[0],$B);
+ &mov ($B,$T[1]);
&jmp (&label("loop"));
@@ -853,6 +1090,8 @@ sub body_40_59 () {
&function_end("_sha1_block_data_order_ssse3");
+$rx=0; # reset
+
if ($ymm) {
my $Xi=4; # 4xSIMD Xupdate round, start pre-seeded
my @X=map("xmm$_",(4..7,0..3)); # pre-seeded for $Xi=4
@@ -940,8 +1179,11 @@ my $_ror=sub { &shrd(@_[0],@_) };
&vpaddd (@X[1],@X[-3&7],@X[3]);
&vpaddd (@X[2],@X[-2&7],@X[3]);
&vmovdqa(&QWP(0,"esp"),@X[0]); # X[]+K xfer to IALU
+ &mov (@T[1],$C);
&vmovdqa(&QWP(0+16,"esp"),@X[1]);
+ &xor (@T[1],$D);
&vmovdqa(&QWP(0+32,"esp"),@X[2]);
+ &and (@T[0],@T[1]);
&jmp (&label("loop"));
sub Xupdate_avx_16_31() # recall that $Xi starts wtih 4
@@ -1025,7 +1267,7 @@ sub Xupdate_avx_16_31() # recall that $Xi starts wtih 4
sub Xupdate_avx_32_79()
{ use integer;
my $body = shift;
- my @insns = (&$body,&$body,&$body,&$body); # 32 to 48 instructions
+ my @insns = (&$body,&$body,&$body,&$body); # 32 to 44 instructions
my ($a,$b,$c,$d,$e);
&vpalignr(@X[2],@X[-1&7],@X[-2&7],8); # compose "X[-6]"
@@ -1188,10 +1430,14 @@ sub Xtail_avx()
&add ($D,&DWP(12,@T[1]));
&mov (&DWP(4,@T[1]),@T[0]);
&add ($E,&DWP(16,@T[1]));
+ &mov ($B,$C);
&mov (&DWP(8,@T[1]),$C);
- &mov ($B,@T[0]);
+ &xor ($B,$D);
&mov (&DWP(12,@T[1]),$D);
&mov (&DWP(16,@T[1]),$E);
+ &mov (@T[1],@T[0]);
+ &and (@T[0],$B);
+ &mov ($B,@T[1]);
&jmp (&label("loop"));
@@ -1223,6 +1469,7 @@ sub Xtail_avx()
&data_word(0x8f1bbcdc,0x8f1bbcdc,0x8f1bbcdc,0x8f1bbcdc); # K_40_59
&data_word(0xca62c1d6,0xca62c1d6,0xca62c1d6,0xca62c1d6); # K_60_79
&data_word(0x00010203,0x04050607,0x08090a0b,0x0c0d0e0f); # pbswap mask
+&data_byte(0xf,0xe,0xd,0xc,0xb,0xa,0x9,0x8,0x7,0x6,0x5,0x4,0x3,0x2,0x1,0x0);
}
&asciz("SHA1 block transform for x86, CRYPTOGAMS by <appro\@openssl.org>");
diff --git a/crypto/openssl/crypto/sha/asm/sha1-armv4-large.pl b/crypto/openssl/crypto/sha/asm/sha1-armv4-large.pl
index 33da3e0..b2c3032 100755
--- a/crypto/openssl/crypto/sha/asm/sha1-armv4-large.pl
+++ b/crypto/openssl/crypto/sha/asm/sha1-armv4-large.pl
@@ -1,7 +1,7 @@
#!/usr/bin/env perl
# ====================================================================
-# Written by Andy Polyakov <appro@fy.chalmers.se> for the OpenSSL
+# Written by Andy Polyakov <appro@openssl.org> for the OpenSSL
# project. The module is, however, dual licensed under OpenSSL and
# CRYPTOGAMS licenses depending on where you obtain it. For further
# details see http://www.openssl.org/~appro/cryptogams/.
@@ -52,6 +52,20 @@
# Profiler-assisted and platform-specific optimization resulted in 10%
# improvement on Cortex A8 core and 12.2 cycles per byte.
+# September 2013.
+#
+# Add NEON implementation (see sha1-586.pl for background info). On
+# Cortex A8 it was measured to process one byte in 6.7 cycles or >80%
+# faster than integer-only code. Because [fully unrolled] NEON code
+# is ~2.5x larger and there are some redundant instructions executed
+# when processing last block, improvement is not as big for smallest
+# blocks, only ~30%. Snapdragon S4 is a tad faster, 6.4 cycles per
+# byte, which is also >80% faster than integer-only code.
+
+# May 2014.
+#
+# Add ARMv8 code path performing at 2.35 cpb on Apple A7.
+
while (($output=shift) && ($output!~/^\w[\w\-]*\.\w+$/)) {}
open STDOUT,">$output";
@@ -153,12 +167,22 @@ $code=<<___;
#include "arm_arch.h"
.text
+.code 32
.global sha1_block_data_order
.type sha1_block_data_order,%function
-.align 2
+.align 5
sha1_block_data_order:
+#if __ARM_MAX_ARCH__>=7
+ sub r3,pc,#8 @ sha1_block_data_order
+ ldr r12,.LOPENSSL_armcap
+ ldr r12,[r3,r12] @ OPENSSL_armcap_P
+ tst r12,#ARMV8_SHA1
+ bne .LARMv8
+ tst r12,#ARMV7_NEON
+ bne .LNEON
+#endif
stmdb sp!,{r4-r12,lr}
add $len,$inp,$len,lsl#6 @ $len to point at the end of $inp
ldmia $ctx,{$a,$b,$c,$d,$e}
@@ -233,16 +257,427 @@ $code.=<<___;
moveq pc,lr @ be binary compatible with V4, yet
bx lr @ interoperable with Thumb ISA:-)
#endif
-.align 2
+.size sha1_block_data_order,.-sha1_block_data_order
+
+.align 5
.LK_00_19: .word 0x5a827999
.LK_20_39: .word 0x6ed9eba1
.LK_40_59: .word 0x8f1bbcdc
.LK_60_79: .word 0xca62c1d6
-.size sha1_block_data_order,.-sha1_block_data_order
-.asciz "SHA1 block transform for ARMv4, CRYPTOGAMS by <appro\@openssl.org>"
-.align 2
+#if __ARM_MAX_ARCH__>=7
+.LOPENSSL_armcap:
+.word OPENSSL_armcap_P-sha1_block_data_order
+#endif
+.asciz "SHA1 block transform for ARMv4/NEON/ARMv8, CRYPTOGAMS by <appro\@openssl.org>"
+.align 5
+___
+#####################################################################
+# NEON stuff
+#
+{{{
+my @V=($a,$b,$c,$d,$e);
+my ($K_XX_XX,$Ki,$t0,$t1,$Xfer,$saved_sp)=map("r$_",(8..12,14));
+my $Xi=4;
+my @X=map("q$_",(8..11,0..3));
+my @Tx=("q12","q13");
+my ($K,$zero)=("q14","q15");
+my $j=0;
+
+sub AUTOLOAD() # thunk [simplified] x86-style perlasm
+{ my $opcode = $AUTOLOAD; $opcode =~ s/.*:://; $opcode =~ s/_/\./;
+ my $arg = pop;
+ $arg = "#$arg" if ($arg*1 eq $arg);
+ $code .= "\t$opcode\t".join(',',@_,$arg)."\n";
+}
+
+sub body_00_19 () {
+ (
+ '($a,$b,$c,$d,$e)=@V;'. # '$code.="@ $j\n";'.
+ '&bic ($t0,$d,$b)',
+ '&add ($e,$e,$Ki)', # e+=X[i]+K
+ '&and ($t1,$c,$b)',
+ '&ldr ($Ki,sprintf "[sp,#%d]",4*(($j+1)&15))',
+ '&add ($e,$e,$a,"ror#27")', # e+=ROR(A,27)
+ '&eor ($t1,$t1,$t0)', # F_00_19
+ '&mov ($b,$b,"ror#2")', # b=ROR(b,2)
+ '&add ($e,$e,$t1);'. # e+=F_00_19
+ '$j++; unshift(@V,pop(@V));'
+ )
+}
+sub body_20_39 () {
+ (
+ '($a,$b,$c,$d,$e)=@V;'. # '$code.="@ $j\n";'.
+ '&eor ($t0,$b,$d)',
+ '&add ($e,$e,$Ki)', # e+=X[i]+K
+ '&ldr ($Ki,sprintf "[sp,#%d]",4*(($j+1)&15)) if ($j<79)',
+ '&eor ($t1,$t0,$c)', # F_20_39
+ '&add ($e,$e,$a,"ror#27")', # e+=ROR(A,27)
+ '&mov ($b,$b,"ror#2")', # b=ROR(b,2)
+ '&add ($e,$e,$t1);'. # e+=F_20_39
+ '$j++; unshift(@V,pop(@V));'
+ )
+}
+sub body_40_59 () {
+ (
+ '($a,$b,$c,$d,$e)=@V;'. # '$code.="@ $j\n";'.
+ '&add ($e,$e,$Ki)', # e+=X[i]+K
+ '&and ($t0,$c,$d)',
+ '&ldr ($Ki,sprintf "[sp,#%d]",4*(($j+1)&15))',
+ '&add ($e,$e,$a,"ror#27")', # e+=ROR(A,27)
+ '&eor ($t1,$c,$d)',
+ '&add ($e,$e,$t0)',
+ '&and ($t1,$t1,$b)',
+ '&mov ($b,$b,"ror#2")', # b=ROR(b,2)
+ '&add ($e,$e,$t1);'. # e+=F_40_59
+ '$j++; unshift(@V,pop(@V));'
+ )
+}
+
+sub Xupdate_16_31 ()
+{ use integer;
+ my $body = shift;
+ my @insns = (&$body,&$body,&$body,&$body);
+ my ($a,$b,$c,$d,$e);
+
+ &vext_8 (@X[0],@X[-4&7],@X[-3&7],8); # compose "X[-14]" in "X[0]"
+ eval(shift(@insns));
+ eval(shift(@insns));
+ eval(shift(@insns));
+ &vadd_i32 (@Tx[1],@X[-1&7],$K);
+ eval(shift(@insns));
+ &vld1_32 ("{$K\[]}","[$K_XX_XX,:32]!") if ($Xi%5==0);
+ eval(shift(@insns));
+ &vext_8 (@Tx[0],@X[-1&7],$zero,4); # "X[-3]", 3 words
+ eval(shift(@insns));
+ eval(shift(@insns));
+ eval(shift(@insns));
+ &veor (@X[0],@X[0],@X[-4&7]); # "X[0]"^="X[-16]"
+ eval(shift(@insns));
+ eval(shift(@insns));
+ &veor (@Tx[0],@Tx[0],@X[-2&7]); # "X[-3]"^"X[-8]"
+ eval(shift(@insns));
+ eval(shift(@insns));
+ &veor (@Tx[0],@Tx[0],@X[0]); # "X[0]"^="X[-3]"^"X[-8]
+ eval(shift(@insns));
+ eval(shift(@insns));
+ &vst1_32 ("{@Tx[1]}","[$Xfer,:128]!"); # X[]+K xfer
+ &sub ($Xfer,$Xfer,64) if ($Xi%4==0);
+ eval(shift(@insns));
+ eval(shift(@insns));
+ &vext_8 (@Tx[1],$zero,@Tx[0],4); # "X[0]"<<96, extract one dword
+ eval(shift(@insns));
+ eval(shift(@insns));
+ &vadd_i32 (@X[0],@Tx[0],@Tx[0]);
+ eval(shift(@insns));
+ eval(shift(@insns));
+ &vsri_32 (@X[0],@Tx[0],31); # "X[0]"<<<=1
+ eval(shift(@insns));
+ eval(shift(@insns));
+ eval(shift(@insns));
+ &vshr_u32 (@Tx[0],@Tx[1],30);
+ eval(shift(@insns));
+ eval(shift(@insns));
+ &vshl_u32 (@Tx[1],@Tx[1],2);
+ eval(shift(@insns));
+ eval(shift(@insns));
+ &veor (@X[0],@X[0],@Tx[0]);
+ eval(shift(@insns));
+ eval(shift(@insns));
+ &veor (@X[0],@X[0],@Tx[1]); # "X[0]"^=("X[0]">>96)<<<2
+
+ foreach (@insns) { eval; } # remaining instructions [if any]
+
+ $Xi++; push(@X,shift(@X)); # "rotate" X[]
+}
+
+sub Xupdate_32_79 ()
+{ use integer;
+ my $body = shift;
+ my @insns = (&$body,&$body,&$body,&$body);
+ my ($a,$b,$c,$d,$e);
+
+ &vext_8 (@Tx[0],@X[-2&7],@X[-1&7],8); # compose "X[-6]"
+ eval(shift(@insns));
+ eval(shift(@insns));
+ eval(shift(@insns));
+ &veor (@X[0],@X[0],@X[-4&7]); # "X[0]"="X[-32]"^"X[-16]"
+ eval(shift(@insns));
+ eval(shift(@insns));
+ &veor (@X[0],@X[0],@X[-7&7]); # "X[0]"^="X[-28]"
+ eval(shift(@insns));
+ eval(shift(@insns));
+ &vadd_i32 (@Tx[1],@X[-1&7],$K);
+ eval(shift(@insns));
+ &vld1_32 ("{$K\[]}","[$K_XX_XX,:32]!") if ($Xi%5==0);
+ eval(shift(@insns));
+ &veor (@Tx[0],@Tx[0],@X[0]); # "X[-6]"^="X[0]"
+ eval(shift(@insns));
+ eval(shift(@insns));
+ &vshr_u32 (@X[0],@Tx[0],30);
+ eval(shift(@insns));
+ eval(shift(@insns));
+ &vst1_32 ("{@Tx[1]}","[$Xfer,:128]!"); # X[]+K xfer
+ &sub ($Xfer,$Xfer,64) if ($Xi%4==0);
+ eval(shift(@insns));
+ eval(shift(@insns));
+ &vsli_32 (@X[0],@Tx[0],2); # "X[0]"="X[-6]"<<<2
+
+ foreach (@insns) { eval; } # remaining instructions [if any]
+
+ $Xi++; push(@X,shift(@X)); # "rotate" X[]
+}
+
+sub Xuplast_80 ()
+{ use integer;
+ my $body = shift;
+ my @insns = (&$body,&$body,&$body,&$body);
+ my ($a,$b,$c,$d,$e);
+
+ &vadd_i32 (@Tx[1],@X[-1&7],$K);
+ eval(shift(@insns));
+ eval(shift(@insns));
+ &vst1_32 ("{@Tx[1]}","[$Xfer,:128]!");
+ &sub ($Xfer,$Xfer,64);
+
+ &teq ($inp,$len);
+ &sub ($K_XX_XX,$K_XX_XX,16); # rewind $K_XX_XX
+ &subeq ($inp,$inp,64); # reload last block to avoid SEGV
+ &vld1_8 ("{@X[-4&7]-@X[-3&7]}","[$inp]!");
+ eval(shift(@insns));
+ eval(shift(@insns));
+ &vld1_8 ("{@X[-2&7]-@X[-1&7]}","[$inp]!");
+ eval(shift(@insns));
+ eval(shift(@insns));
+ &vld1_32 ("{$K\[]}","[$K_XX_XX,:32]!"); # load K_00_19
+ eval(shift(@insns));
+ eval(shift(@insns));
+ &vrev32_8 (@X[-4&7],@X[-4&7]);
+
+ foreach (@insns) { eval; } # remaining instructions
+
+ $Xi=0;
+}
+
+sub Xloop()
+{ use integer;
+ my $body = shift;
+ my @insns = (&$body,&$body,&$body,&$body);
+ my ($a,$b,$c,$d,$e);
+
+ &vrev32_8 (@X[($Xi-3)&7],@X[($Xi-3)&7]);
+ eval(shift(@insns));
+ eval(shift(@insns));
+ &vadd_i32 (@X[$Xi&7],@X[($Xi-4)&7],$K);
+ eval(shift(@insns));
+ eval(shift(@insns));
+ &vst1_32 ("{@X[$Xi&7]}","[$Xfer,:128]!");# X[]+K xfer to IALU
+
+ foreach (@insns) { eval; }
+
+ $Xi++;
+}
+
+$code.=<<___;
+#if __ARM_MAX_ARCH__>=7
+.arch armv7-a
+.fpu neon
+
+.type sha1_block_data_order_neon,%function
+.align 4
+sha1_block_data_order_neon:
+.LNEON:
+ stmdb sp!,{r4-r12,lr}
+ add $len,$inp,$len,lsl#6 @ $len to point at the end of $inp
+ @ dmb @ errata #451034 on early Cortex A8
+ @ vstmdb sp!,{d8-d15} @ ABI specification says so
+ mov $saved_sp,sp
+ sub sp,sp,#64 @ alloca
+ adr $K_XX_XX,.LK_00_19
+ bic sp,sp,#15 @ align for 128-bit stores
+
+ ldmia $ctx,{$a,$b,$c,$d,$e} @ load context
+ mov $Xfer,sp
+
+ vld1.8 {@X[-4&7]-@X[-3&7]},[$inp]! @ handles unaligned
+ veor $zero,$zero,$zero
+ vld1.8 {@X[-2&7]-@X[-1&7]},[$inp]!
+ vld1.32 {${K}\[]},[$K_XX_XX,:32]! @ load K_00_19
+ vrev32.8 @X[-4&7],@X[-4&7] @ yes, even on
+ vrev32.8 @X[-3&7],@X[-3&7] @ big-endian...
+ vrev32.8 @X[-2&7],@X[-2&7]
+ vadd.i32 @X[0],@X[-4&7],$K
+ vrev32.8 @X[-1&7],@X[-1&7]
+ vadd.i32 @X[1],@X[-3&7],$K
+ vst1.32 {@X[0]},[$Xfer,:128]!
+ vadd.i32 @X[2],@X[-2&7],$K
+ vst1.32 {@X[1]},[$Xfer,:128]!
+ vst1.32 {@X[2]},[$Xfer,:128]!
+ ldr $Ki,[sp] @ big RAW stall
+
+.Loop_neon:
+___
+ &Xupdate_16_31(\&body_00_19);
+ &Xupdate_16_31(\&body_00_19);
+ &Xupdate_16_31(\&body_00_19);
+ &Xupdate_16_31(\&body_00_19);
+ &Xupdate_32_79(\&body_00_19);
+ &Xupdate_32_79(\&body_20_39);
+ &Xupdate_32_79(\&body_20_39);
+ &Xupdate_32_79(\&body_20_39);
+ &Xupdate_32_79(\&body_20_39);
+ &Xupdate_32_79(\&body_20_39);
+ &Xupdate_32_79(\&body_40_59);
+ &Xupdate_32_79(\&body_40_59);
+ &Xupdate_32_79(\&body_40_59);
+ &Xupdate_32_79(\&body_40_59);
+ &Xupdate_32_79(\&body_40_59);
+ &Xupdate_32_79(\&body_20_39);
+ &Xuplast_80(\&body_20_39);
+ &Xloop(\&body_20_39);
+ &Xloop(\&body_20_39);
+ &Xloop(\&body_20_39);
+$code.=<<___;
+ ldmia $ctx,{$Ki,$t0,$t1,$Xfer} @ accumulate context
+ add $a,$a,$Ki
+ ldr $Ki,[$ctx,#16]
+ add $b,$b,$t0
+ add $c,$c,$t1
+ add $d,$d,$Xfer
+ moveq sp,$saved_sp
+ add $e,$e,$Ki
+ ldrne $Ki,[sp]
+ stmia $ctx,{$a,$b,$c,$d,$e}
+ addne $Xfer,sp,#3*16
+ bne .Loop_neon
+
+ @ vldmia sp!,{d8-d15}
+ ldmia sp!,{r4-r12,pc}
+.size sha1_block_data_order_neon,.-sha1_block_data_order_neon
+#endif
+___
+}}}
+#####################################################################
+# ARMv8 stuff
+#
+{{{
+my ($ABCD,$E,$E0,$E1)=map("q$_",(0..3));
+my @MSG=map("q$_",(4..7));
+my @Kxx=map("q$_",(8..11));
+my ($W0,$W1,$ABCD_SAVE)=map("q$_",(12..14));
+
+$code.=<<___;
+#if __ARM_MAX_ARCH__>=7
+.type sha1_block_data_order_armv8,%function
+.align 5
+sha1_block_data_order_armv8:
+.LARMv8:
+ vstmdb sp!,{d8-d15} @ ABI specification says so
+
+ veor $E,$E,$E
+ adr r3,.LK_00_19
+ vld1.32 {$ABCD},[$ctx]!
+ vld1.32 {$E\[0]},[$ctx]
+ sub $ctx,$ctx,#16
+ vld1.32 {@Kxx[0]\[]},[r3,:32]!
+ vld1.32 {@Kxx[1]\[]},[r3,:32]!
+ vld1.32 {@Kxx[2]\[]},[r3,:32]!
+ vld1.32 {@Kxx[3]\[]},[r3,:32]
+
+.Loop_v8:
+ vld1.8 {@MSG[0]-@MSG[1]},[$inp]!
+ vld1.8 {@MSG[2]-@MSG[3]},[$inp]!
+ vrev32.8 @MSG[0],@MSG[0]
+ vrev32.8 @MSG[1],@MSG[1]
+
+ vadd.i32 $W0,@Kxx[0],@MSG[0]
+ vrev32.8 @MSG[2],@MSG[2]
+ vmov $ABCD_SAVE,$ABCD @ offload
+ subs $len,$len,#1
+
+ vadd.i32 $W1,@Kxx[0],@MSG[1]
+ vrev32.8 @MSG[3],@MSG[3]
+ sha1h $E1,$ABCD @ 0
+ sha1c $ABCD,$E,$W0
+ vadd.i32 $W0,@Kxx[$j],@MSG[2]
+ sha1su0 @MSG[0],@MSG[1],@MSG[2]
+___
+for ($j=0,$i=1;$i<20-3;$i++) {
+my $f=("c","p","m","p")[$i/5];
+$code.=<<___;
+ sha1h $E0,$ABCD @ $i
+ sha1$f $ABCD,$E1,$W1
+ vadd.i32 $W1,@Kxx[$j],@MSG[3]
+ sha1su1 @MSG[0],@MSG[3]
+___
+$code.=<<___ if ($i<20-4);
+ sha1su0 @MSG[1],@MSG[2],@MSG[3]
___
+ ($E0,$E1)=($E1,$E0); ($W0,$W1)=($W1,$W0);
+ push(@MSG,shift(@MSG)); $j++ if ((($i+3)%5)==0);
+}
+$code.=<<___;
+ sha1h $E0,$ABCD @ $i
+ sha1p $ABCD,$E1,$W1
+ vadd.i32 $W1,@Kxx[$j],@MSG[3]
+
+ sha1h $E1,$ABCD @ 18
+ sha1p $ABCD,$E0,$W0
+
+ sha1h $E0,$ABCD @ 19
+ sha1p $ABCD,$E1,$W1
+
+ vadd.i32 $E,$E,$E0
+ vadd.i32 $ABCD,$ABCD,$ABCD_SAVE
+ bne .Loop_v8
+
+ vst1.32 {$ABCD},[$ctx]!
+ vst1.32 {$E\[0]},[$ctx]
+
+ vldmia sp!,{d8-d15}
+ ret @ bx lr
+.size sha1_block_data_order_armv8,.-sha1_block_data_order_armv8
+#endif
+___
+}}}
+$code.=<<___;
+#if __ARM_MAX_ARCH__>=7
+.comm OPENSSL_armcap_P,4,4
+#endif
+___
+
+{ my %opcode = (
+ "sha1c" => 0xf2000c40, "sha1p" => 0xf2100c40,
+ "sha1m" => 0xf2200c40, "sha1su0" => 0xf2300c40,
+ "sha1h" => 0xf3b902c0, "sha1su1" => 0xf3ba0380 );
+
+ sub unsha1 {
+ my ($mnemonic,$arg)=@_;
+
+ if ($arg =~ m/q([0-9]+)(?:,\s*q([0-9]+))?,\s*q([0-9]+)/o) {
+ my $word = $opcode{$mnemonic}|(($1&7)<<13)|(($1&8)<<19)
+ |(($2&7)<<17)|(($2&8)<<4)
+ |(($3&7)<<1) |(($3&8)<<2);
+ # since ARMv7 instructions are always encoded little-endian.
+ # correct solution is to use .inst directive, but older
+ # assemblers don't implement it:-(
+ sprintf ".byte\t0x%02x,0x%02x,0x%02x,0x%02x\t@ %s %s",
+ $word&0xff,($word>>8)&0xff,
+ ($word>>16)&0xff,($word>>24)&0xff,
+ $mnemonic,$arg;
+ }
+ }
+}
+
+foreach (split($/,$code)) {
+ s/{q([0-9]+)\[\]}/sprintf "{d%d[],d%d[]}",2*$1,2*$1+1/eo or
+ s/{q([0-9]+)\[0\]}/sprintf "{d%d[0]}",2*$1/eo;
+
+ s/\b(sha1\w+)\s+(q.*)/unsha1($1,$2)/geo;
+
+ s/\bret\b/bx lr/o or
+ s/\bbx\s+lr\b/.word\t0xe12fff1e/o; # make it possible to compile with -march=armv4
+
+ print $_,$/;
+}
-$code =~ s/\bbx\s+lr\b/.word\t0xe12fff1e/gm; # make it possible to compile with -march=armv4
-print $code;
close STDOUT; # enforce flush
diff --git a/crypto/openssl/crypto/sha/asm/sha1-armv8.pl b/crypto/openssl/crypto/sha/asm/sha1-armv8.pl
new file mode 100755
index 0000000..c04432a
--- /dev/null
+++ b/crypto/openssl/crypto/sha/asm/sha1-armv8.pl
@@ -0,0 +1,338 @@
+#!/usr/bin/env perl
+#
+# ====================================================================
+# Written by Andy Polyakov <appro@openssl.org> for the OpenSSL
+# project. The module is, however, dual licensed under OpenSSL and
+# CRYPTOGAMS licenses depending on where you obtain it. For further
+# details see http://www.openssl.org/~appro/cryptogams/.
+# ====================================================================
+#
+# SHA1 for ARMv8.
+#
+# Performance in cycles per processed byte and improvement coefficient
+# over code generated with "default" compiler:
+#
+# hardware-assisted software(*)
+# Apple A7 2.31 4.13 (+14%)
+# Cortex-A53 2.24 8.03 (+97%)
+# Cortex-A57 2.35 7.88 (+74%)
+# Denver 2.13 3.97 (+0%)(**)
+# X-Gene 8.80 (+200%)
+#
+# (*) Software results are presented mostly for reference purposes.
+# (**) Keep in mind that Denver relies on binary translation, which
+# optimizes compiler output at run-time.
+
+$flavour = shift;
+open STDOUT,">".shift;
+
+($ctx,$inp,$num)=("x0","x1","x2");
+@Xw=map("w$_",(3..17,19));
+@Xx=map("x$_",(3..17,19));
+@V=($A,$B,$C,$D,$E)=map("w$_",(20..24));
+($t0,$t1,$t2,$K)=map("w$_",(25..28));
+
+
+sub BODY_00_19 {
+my ($i,$a,$b,$c,$d,$e)=@_;
+my $j=($i+2)&15;
+
+$code.=<<___ if ($i<15 && !($i&1));
+ lsr @Xx[$i+1],@Xx[$i],#32
+___
+$code.=<<___ if ($i<14 && !($i&1));
+ ldr @Xx[$i+2],[$inp,#`($i+2)*4-64`]
+___
+$code.=<<___ if ($i<14 && ($i&1));
+#ifdef __ARMEB__
+ ror @Xx[$i+1],@Xx[$i+1],#32
+#else
+ rev32 @Xx[$i+1],@Xx[$i+1]
+#endif
+___
+$code.=<<___ if ($i<14);
+ bic $t0,$d,$b
+ and $t1,$c,$b
+ ror $t2,$a,#27
+ add $d,$d,$K // future e+=K
+ orr $t0,$t0,$t1
+ add $e,$e,$t2 // e+=rot(a,5)
+ ror $b,$b,#2
+ add $d,$d,@Xw[($i+1)&15] // future e+=X[i]
+ add $e,$e,$t0 // e+=F(b,c,d)
+___
+$code.=<<___ if ($i==19);
+ movz $K,#0xeba1
+ movk $K,#0x6ed9,lsl#16
+___
+$code.=<<___ if ($i>=14);
+ eor @Xw[$j],@Xw[$j],@Xw[($j+2)&15]
+ bic $t0,$d,$b
+ and $t1,$c,$b
+ ror $t2,$a,#27
+ eor @Xw[$j],@Xw[$j],@Xw[($j+8)&15]
+ add $d,$d,$K // future e+=K
+ orr $t0,$t0,$t1
+ add $e,$e,$t2 // e+=rot(a,5)
+ eor @Xw[$j],@Xw[$j],@Xw[($j+13)&15]
+ ror $b,$b,#2
+ add $d,$d,@Xw[($i+1)&15] // future e+=X[i]
+ add $e,$e,$t0 // e+=F(b,c,d)
+ ror @Xw[$j],@Xw[$j],#31
+___
+}
+
+sub BODY_40_59 {
+my ($i,$a,$b,$c,$d,$e)=@_;
+my $j=($i+2)&15;
+
+$code.=<<___ if ($i==59);
+ movz $K,#0xc1d6
+ movk $K,#0xca62,lsl#16
+___
+$code.=<<___;
+ orr $t0,$b,$c
+ and $t1,$b,$c
+ eor @Xw[$j],@Xw[$j],@Xw[($j+2)&15]
+ ror $t2,$a,#27
+ and $t0,$t0,$d
+ add $d,$d,$K // future e+=K
+ eor @Xw[$j],@Xw[$j],@Xw[($j+8)&15]
+ add $e,$e,$t2 // e+=rot(a,5)
+ orr $t0,$t0,$t1
+ ror $b,$b,#2
+ eor @Xw[$j],@Xw[$j],@Xw[($j+13)&15]
+ add $d,$d,@Xw[($i+1)&15] // future e+=X[i]
+ add $e,$e,$t0 // e+=F(b,c,d)
+ ror @Xw[$j],@Xw[$j],#31
+___
+}
+
+sub BODY_20_39 {
+my ($i,$a,$b,$c,$d,$e)=@_;
+my $j=($i+2)&15;
+
+$code.=<<___ if ($i==39);
+ movz $K,#0xbcdc
+ movk $K,#0x8f1b,lsl#16
+___
+$code.=<<___ if ($i<78);
+ eor @Xw[$j],@Xw[$j],@Xw[($j+2)&15]
+ eor $t0,$d,$b
+ ror $t2,$a,#27
+ add $d,$d,$K // future e+=K
+ eor @Xw[$j],@Xw[$j],@Xw[($j+8)&15]
+ eor $t0,$t0,$c
+ add $e,$e,$t2 // e+=rot(a,5)
+ ror $b,$b,#2
+ eor @Xw[$j],@Xw[$j],@Xw[($j+13)&15]
+ add $d,$d,@Xw[($i+1)&15] // future e+=X[i]
+ add $e,$e,$t0 // e+=F(b,c,d)
+ ror @Xw[$j],@Xw[$j],#31
+___
+$code.=<<___ if ($i==78);
+ ldp @Xw[1],@Xw[2],[$ctx]
+ eor $t0,$d,$b
+ ror $t2,$a,#27
+ add $d,$d,$K // future e+=K
+ eor $t0,$t0,$c
+ add $e,$e,$t2 // e+=rot(a,5)
+ ror $b,$b,#2
+ add $d,$d,@Xw[($i+1)&15] // future e+=X[i]
+ add $e,$e,$t0 // e+=F(b,c,d)
+___
+$code.=<<___ if ($i==79);
+ ldp @Xw[3],@Xw[4],[$ctx,#8]
+ eor $t0,$d,$b
+ ror $t2,$a,#27
+ eor $t0,$t0,$c
+ add $e,$e,$t2 // e+=rot(a,5)
+ ror $b,$b,#2
+ ldr @Xw[5],[$ctx,#16]
+ add $e,$e,$t0 // e+=F(b,c,d)
+___
+}
+
+$code.=<<___;
+#include "arm_arch.h"
+
+.text
+
+.globl sha1_block_data_order
+.type sha1_block_data_order,%function
+.align 6
+sha1_block_data_order:
+ ldr x16,.LOPENSSL_armcap_P
+ adr x17,.LOPENSSL_armcap_P
+ add x16,x16,x17
+ ldr w16,[x16]
+ tst w16,#ARMV8_SHA1
+ b.ne .Lv8_entry
+
+ stp x29,x30,[sp,#-96]!
+ add x29,sp,#0
+ stp x19,x20,[sp,#16]
+ stp x21,x22,[sp,#32]
+ stp x23,x24,[sp,#48]
+ stp x25,x26,[sp,#64]
+ stp x27,x28,[sp,#80]
+
+ ldp $A,$B,[$ctx]
+ ldp $C,$D,[$ctx,#8]
+ ldr $E,[$ctx,#16]
+
+.Loop:
+ ldr @Xx[0],[$inp],#64
+ movz $K,#0x7999
+ sub $num,$num,#1
+ movk $K,#0x5a82,lsl#16
+#ifdef __ARMEB__
+ ror $Xx[0],@Xx[0],#32
+#else
+ rev32 @Xx[0],@Xx[0]
+#endif
+ add $E,$E,$K // warm it up
+ add $E,$E,@Xw[0]
+___
+for($i=0;$i<20;$i++) { &BODY_00_19($i,@V); unshift(@V,pop(@V)); }
+for(;$i<40;$i++) { &BODY_20_39($i,@V); unshift(@V,pop(@V)); }
+for(;$i<60;$i++) { &BODY_40_59($i,@V); unshift(@V,pop(@V)); }
+for(;$i<80;$i++) { &BODY_20_39($i,@V); unshift(@V,pop(@V)); }
+$code.=<<___;
+ add $B,$B,@Xw[2]
+ add $C,$C,@Xw[3]
+ add $A,$A,@Xw[1]
+ add $D,$D,@Xw[4]
+ add $E,$E,@Xw[5]
+ stp $A,$B,[$ctx]
+ stp $C,$D,[$ctx,#8]
+ str $E,[$ctx,#16]
+ cbnz $num,.Loop
+
+ ldp x19,x20,[sp,#16]
+ ldp x21,x22,[sp,#32]
+ ldp x23,x24,[sp,#48]
+ ldp x25,x26,[sp,#64]
+ ldp x27,x28,[sp,#80]
+ ldr x29,[sp],#96
+ ret
+.size sha1_block_data_order,.-sha1_block_data_order
+___
+{{{
+my ($ABCD,$E,$E0,$E1)=map("v$_.16b",(0..3));
+my @MSG=map("v$_.16b",(4..7));
+my @Kxx=map("v$_.4s",(16..19));
+my ($W0,$W1)=("v20.4s","v21.4s");
+my $ABCD_SAVE="v22.16b";
+
+$code.=<<___;
+.type sha1_block_armv8,%function
+.align 6
+sha1_block_armv8:
+.Lv8_entry:
+ stp x29,x30,[sp,#-16]!
+ add x29,sp,#0
+
+ adr x4,.Lconst
+ eor $E,$E,$E
+ ld1.32 {$ABCD},[$ctx],#16
+ ld1.32 {$E}[0],[$ctx]
+ sub $ctx,$ctx,#16
+ ld1.32 {@Kxx[0]-@Kxx[3]},[x4]
+
+.Loop_hw:
+ ld1 {@MSG[0]-@MSG[3]},[$inp],#64
+ sub $num,$num,#1
+ rev32 @MSG[0],@MSG[0]
+ rev32 @MSG[1],@MSG[1]
+
+ add.i32 $W0,@Kxx[0],@MSG[0]
+ rev32 @MSG[2],@MSG[2]
+ orr $ABCD_SAVE,$ABCD,$ABCD // offload
+
+ add.i32 $W1,@Kxx[0],@MSG[1]
+ rev32 @MSG[3],@MSG[3]
+ sha1h $E1,$ABCD
+ sha1c $ABCD,$E,$W0 // 0
+ add.i32 $W0,@Kxx[$j],@MSG[2]
+ sha1su0 @MSG[0],@MSG[1],@MSG[2]
+___
+for ($j=0,$i=1;$i<20-3;$i++) {
+my $f=("c","p","m","p")[$i/5];
+$code.=<<___;
+ sha1h $E0,$ABCD // $i
+ sha1$f $ABCD,$E1,$W1
+ add.i32 $W1,@Kxx[$j],@MSG[3]
+ sha1su1 @MSG[0],@MSG[3]
+___
+$code.=<<___ if ($i<20-4);
+ sha1su0 @MSG[1],@MSG[2],@MSG[3]
+___
+ ($E0,$E1)=($E1,$E0); ($W0,$W1)=($W1,$W0);
+ push(@MSG,shift(@MSG)); $j++ if ((($i+3)%5)==0);
+}
+$code.=<<___;
+ sha1h $E0,$ABCD // $i
+ sha1p $ABCD,$E1,$W1
+ add.i32 $W1,@Kxx[$j],@MSG[3]
+
+ sha1h $E1,$ABCD // 18
+ sha1p $ABCD,$E0,$W0
+
+ sha1h $E0,$ABCD // 19
+ sha1p $ABCD,$E1,$W1
+
+ add.i32 $E,$E,$E0
+ add.i32 $ABCD,$ABCD,$ABCD_SAVE
+
+ cbnz $num,.Loop_hw
+
+ st1.32 {$ABCD},[$ctx],#16
+ st1.32 {$E}[0],[$ctx]
+
+ ldr x29,[sp],#16
+ ret
+.size sha1_block_armv8,.-sha1_block_armv8
+.align 6
+.Lconst:
+.long 0x5a827999,0x5a827999,0x5a827999,0x5a827999 //K_00_19
+.long 0x6ed9eba1,0x6ed9eba1,0x6ed9eba1,0x6ed9eba1 //K_20_39
+.long 0x8f1bbcdc,0x8f1bbcdc,0x8f1bbcdc,0x8f1bbcdc //K_40_59
+.long 0xca62c1d6,0xca62c1d6,0xca62c1d6,0xca62c1d6 //K_60_79
+.LOPENSSL_armcap_P:
+.quad OPENSSL_armcap_P-.
+.asciz "SHA1 block transform for ARMv8, CRYPTOGAMS by <appro\@openssl.org>"
+.align 2
+.comm OPENSSL_armcap_P,4,4
+___
+}}}
+
+{ my %opcode = (
+ "sha1c" => 0x5e000000, "sha1p" => 0x5e001000,
+ "sha1m" => 0x5e002000, "sha1su0" => 0x5e003000,
+ "sha1h" => 0x5e280800, "sha1su1" => 0x5e281800 );
+
+ sub unsha1 {
+ my ($mnemonic,$arg)=@_;
+
+ $arg =~ m/[qv]([0-9]+)[^,]*,\s*[qv]([0-9]+)[^,]*(?:,\s*[qv]([0-9]+))?/o
+ &&
+ sprintf ".inst\t0x%08x\t//%s %s",
+ $opcode{$mnemonic}|$1|($2<<5)|($3<<16),
+ $mnemonic,$arg;
+ }
+}
+
+foreach(split("\n",$code)) {
+
+ s/\`([^\`]*)\`/eval($1)/geo;
+
+ s/\b(sha1\w+)\s+([qv].*)/unsha1($1,$2)/geo;
+
+ s/\.\w?32\b//o and s/\.16b/\.4s/go;
+ m/(ld|st)1[^\[]+\[0\]/o and s/\.4s/\.s/go;
+
+ print $_,"\n";
+}
+
+close STDOUT;
diff --git a/crypto/openssl/crypto/sha/asm/sha1-mb-x86_64.pl b/crypto/openssl/crypto/sha/asm/sha1-mb-x86_64.pl
new file mode 100755
index 0000000..a8ee075
--- /dev/null
+++ b/crypto/openssl/crypto/sha/asm/sha1-mb-x86_64.pl
@@ -0,0 +1,1574 @@
+#!/usr/bin/env perl
+
+# ====================================================================
+# Written by Andy Polyakov <appro@openssl.org> for the OpenSSL
+# project. The module is, however, dual licensed under OpenSSL and
+# CRYPTOGAMS licenses depending on where you obtain it. For further
+# details see http://www.openssl.org/~appro/cryptogams/.
+# ====================================================================
+
+# Multi-buffer SHA1 procedure processes n buffers in parallel by
+# placing buffer data to designated lane of SIMD register. n is
+# naturally limited to 4 on pre-AVX2 processors and to 8 on
+# AVX2-capable processors such as Haswell.
+#
+# this +aesni(i) sha1 aesni-sha1 gain(iv)
+# -------------------------------------------------------------------
+# Westmere(ii) 10.7/n +1.28=3.96(n=4) 5.30 6.66 +68%
+# Atom(ii) 18.1/n +3.93=8.46(n=4) 9.37 12.8 +51%
+# Sandy Bridge (8.16 +5.15=13.3)/n 4.99 5.98 +80%
+# Ivy Bridge (8.08 +5.14=13.2)/n 4.60 5.54 +68%
+# Haswell(iii) (8.96 +5.00=14.0)/n 3.57 4.55 +160%
+# Bulldozer (9.76 +5.76=15.5)/n 5.95 6.37 +64%
+#
+# (i) multi-block CBC encrypt with 128-bit key;
+# (ii) (HASH+AES)/n does not apply to Westmere for n>3 and Atom,
+# because of lower AES-NI instruction throughput;
+# (iii) "this" is for n=8, when we gather twice as much data, result
+# for n=4 is 8.00+4.44=12.4;
+# (iv) presented improvement coefficients are asymptotic limits and
+# in real-life application are somewhat lower, e.g. for 2KB
+# fragments they range from 30% to 100% (on Haswell);
+
+$flavour = shift;
+$output = shift;
+if ($flavour =~ /\./) { $output = $flavour; undef $flavour; }
+
+$win64=0; $win64=1 if ($flavour =~ /[nm]asm|mingw64/ || $output =~ /\.asm$/);
+
+$0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1;
+( $xlate="${dir}x86_64-xlate.pl" and -f $xlate ) or
+( $xlate="${dir}../../perlasm/x86_64-xlate.pl" and -f $xlate) or
+die "can't locate x86_64-xlate.pl";
+
+$avx=0;
+
+if (`$ENV{CC} -Wa,-v -c -o /dev/null -x assembler /dev/null 2>&1`
+ =~ /GNU assembler version ([2-9]\.[0-9]+)/) {
+ $avx = ($1>=2.19) + ($1>=2.22);
+}
+
+if (!$avx && $win64 && ($flavour =~ /nasm/ || $ENV{ASM} =~ /nasm/) &&
+ `nasm -v 2>&1` =~ /NASM version ([2-9]\.[0-9]+)/) {
+ $avx = ($1>=2.09) + ($1>=2.10);
+}
+
+if (!$avx && $win64 && ($flavour =~ /masm/ || $ENV{ASM} =~ /ml64/) &&
+ `ml64 2>&1` =~ /Version ([0-9]+)\./) {
+ $avx = ($1>=10) + ($1>=11);
+}
+
+if (!$avx && `$ENV{CC} -v 2>&1` =~ /(^clang version|based on LLVM) ([3-9]\.[0-9]+)/) {
+ $avx = ($2>=3.0) + ($2>3.0);
+}
+
+open OUT,"| \"$^X\" $xlate $flavour $output";
+*STDOUT=*OUT;
+
+# void sha1_multi_block (
+# struct { unsigned int A[8];
+# unsigned int B[8];
+# unsigned int C[8];
+# unsigned int D[8];
+# unsigned int E[8]; } *ctx,
+# struct { void *ptr; int blocks; } inp[8],
+# int num); /* 1 or 2 */
+#
+$ctx="%rdi"; # 1st arg
+$inp="%rsi"; # 2nd arg
+$num="%edx";
+@ptr=map("%r$_",(8..11));
+$Tbl="%rbp";
+
+@V=($A,$B,$C,$D,$E)=map("%xmm$_",(0..4));
+($t0,$t1,$t2,$t3,$tx)=map("%xmm$_",(5..9));
+@Xi=map("%xmm$_",(10..14));
+$K="%xmm15";
+
+if (1) {
+ # Atom-specific optimization aiming to eliminate pshufb with high
+ # registers [and thus get rid of 48 cycles accumulated penalty]
+ @Xi=map("%xmm$_",(0..4));
+ ($tx,$t0,$t1,$t2,$t3)=map("%xmm$_",(5..9));
+ @V=($A,$B,$C,$D,$E)=map("%xmm$_",(10..14));
+}
+
+$REG_SZ=16;
+
+sub Xi_off {
+my $off = shift;
+
+ $off %= 16; $off *= $REG_SZ;
+ $off<256 ? "$off-128(%rax)" : "$off-256-128(%rbx)";
+}
+
+sub BODY_00_19 {
+my ($i,$a,$b,$c,$d,$e)=@_;
+my $j=$i+1;
+my $k=$i+2;
+
+# Loads are performed 2+3/4 iterations in advance. 3/4 means that out
+# of 4 words you would expect to be loaded per given iteration one is
+# spilled to next iteration. In other words indices in four input
+# streams are distributed as following:
+#
+# $i==0: 0,0,0,0,1,1,1,1,2,2,2,
+# $i==1: 2,3,3,3,
+# $i==2: 3,4,4,4,
+# ...
+# $i==13: 14,15,15,15,
+# $i==14: 15
+#
+# Then at $i==15 Xupdate is applied one iteration in advance...
+$code.=<<___ if ($i==0);
+ movd (@ptr[0]),@Xi[0]
+ lea `16*4`(@ptr[0]),@ptr[0]
+ movd (@ptr[1]),@Xi[2] # borrow @Xi[2]
+ lea `16*4`(@ptr[1]),@ptr[1]
+ movd (@ptr[2]),@Xi[3] # borrow @Xi[3]
+ lea `16*4`(@ptr[2]),@ptr[2]
+ movd (@ptr[3]),@Xi[4] # borrow @Xi[4]
+ lea `16*4`(@ptr[3]),@ptr[3]
+ punpckldq @Xi[3],@Xi[0]
+ movd `4*$j-16*4`(@ptr[0]),@Xi[1]
+ punpckldq @Xi[4],@Xi[2]
+ movd `4*$j-16*4`(@ptr[1]),$t3
+ punpckldq @Xi[2],@Xi[0]
+ movd `4*$j-16*4`(@ptr[2]),$t2
+ pshufb $tx,@Xi[0]
+___
+$code.=<<___ if ($i<14); # just load input
+ movd `4*$j-16*4`(@ptr[3]),$t1
+ punpckldq $t2,@Xi[1]
+ movdqa $a,$t2
+ paddd $K,$e # e+=K_00_19
+ punpckldq $t1,$t3
+ movdqa $b,$t1
+ movdqa $b,$t0
+ pslld \$5,$t2
+ pandn $d,$t1
+ pand $c,$t0
+ punpckldq $t3,@Xi[1]
+ movdqa $a,$t3
+
+ movdqa @Xi[0],`&Xi_off($i)`
+ paddd @Xi[0],$e # e+=X[i]
+ movd `4*$k-16*4`(@ptr[0]),@Xi[2]
+ psrld \$27,$t3
+ pxor $t1,$t0 # Ch(b,c,d)
+ movdqa $b,$t1
+
+ por $t3,$t2 # rol(a,5)
+ movd `4*$k-16*4`(@ptr[1]),$t3
+ pslld \$30,$t1
+ paddd $t0,$e # e+=Ch(b,c,d)
+
+ psrld \$2,$b
+ paddd $t2,$e # e+=rol(a,5)
+ pshufb $tx,@Xi[1]
+ movd `4*$k-16*4`(@ptr[2]),$t2
+ por $t1,$b # b=rol(b,30)
+___
+$code.=<<___ if ($i==14); # just load input
+ movd `4*$j-16*4`(@ptr[3]),$t1
+ punpckldq $t2,@Xi[1]
+ movdqa $a,$t2
+ paddd $K,$e # e+=K_00_19
+ punpckldq $t1,$t3
+ movdqa $b,$t1
+ movdqa $b,$t0
+ pslld \$5,$t2
+ prefetcht0 63(@ptr[0])
+ pandn $d,$t1
+ pand $c,$t0
+ punpckldq $t3,@Xi[1]
+ movdqa $a,$t3
+
+ movdqa @Xi[0],`&Xi_off($i)`
+ paddd @Xi[0],$e # e+=X[i]
+ psrld \$27,$t3
+ pxor $t1,$t0 # Ch(b,c,d)
+ movdqa $b,$t1
+ prefetcht0 63(@ptr[1])
+
+ por $t3,$t2 # rol(a,5)
+ pslld \$30,$t1
+ paddd $t0,$e # e+=Ch(b,c,d)
+ prefetcht0 63(@ptr[2])
+
+ psrld \$2,$b
+ paddd $t2,$e # e+=rol(a,5)
+ pshufb $tx,@Xi[1]
+ prefetcht0 63(@ptr[3])
+ por $t1,$b # b=rol(b,30)
+___
+$code.=<<___ if ($i>=13 && $i<15);
+ movdqa `&Xi_off($j+2)`,@Xi[3] # preload "X[2]"
+___
+$code.=<<___ if ($i>=15); # apply Xupdate
+ pxor @Xi[-2],@Xi[1] # "X[13]"
+ movdqa `&Xi_off($j+2)`,@Xi[3] # "X[2]"
+
+ movdqa $a,$t2
+ pxor `&Xi_off($j+8)`,@Xi[1]
+ paddd $K,$e # e+=K_00_19
+ movdqa $b,$t1
+ pslld \$5,$t2
+ pxor @Xi[3],@Xi[1]
+ movdqa $b,$t0
+ pandn $d,$t1
+ movdqa @Xi[1],$tx
+ pand $c,$t0
+ movdqa $a,$t3
+ psrld \$31,$tx
+ paddd @Xi[1],@Xi[1]
+
+ movdqa @Xi[0],`&Xi_off($i)`
+ paddd @Xi[0],$e # e+=X[i]
+ psrld \$27,$t3
+ pxor $t1,$t0 # Ch(b,c,d)
+
+ movdqa $b,$t1
+ por $t3,$t2 # rol(a,5)
+ pslld \$30,$t1
+ paddd $t0,$e # e+=Ch(b,c,d)
+
+ psrld \$2,$b
+ paddd $t2,$e # e+=rol(a,5)
+ por $tx,@Xi[1] # rol \$1,@Xi[1]
+ por $t1,$b # b=rol(b,30)
+___
+push(@Xi,shift(@Xi));
+}
+
+sub BODY_20_39 {
+my ($i,$a,$b,$c,$d,$e)=@_;
+my $j=$i+1;
+
+$code.=<<___ if ($i<79);
+ pxor @Xi[-2],@Xi[1] # "X[13]"
+ movdqa `&Xi_off($j+2)`,@Xi[3] # "X[2]"
+
+ movdqa $a,$t2
+ movdqa $d,$t0
+ pxor `&Xi_off($j+8)`,@Xi[1]
+ paddd $K,$e # e+=K_20_39
+ pslld \$5,$t2
+ pxor $b,$t0
+
+ movdqa $a,$t3
+___
+$code.=<<___ if ($i<72);
+ movdqa @Xi[0],`&Xi_off($i)`
+___
+$code.=<<___ if ($i<79);
+ paddd @Xi[0],$e # e+=X[i]
+ pxor @Xi[3],@Xi[1]
+ psrld \$27,$t3
+ pxor $c,$t0 # Parity(b,c,d)
+ movdqa $b,$t1
+
+ pslld \$30,$t1
+ movdqa @Xi[1],$tx
+ por $t3,$t2 # rol(a,5)
+ psrld \$31,$tx
+ paddd $t0,$e # e+=Parity(b,c,d)
+ paddd @Xi[1],@Xi[1]
+
+ psrld \$2,$b
+ paddd $t2,$e # e+=rol(a,5)
+ por $tx,@Xi[1] # rol(@Xi[1],1)
+ por $t1,$b # b=rol(b,30)
+___
+$code.=<<___ if ($i==79);
+ movdqa $a,$t2
+ paddd $K,$e # e+=K_20_39
+ movdqa $d,$t0
+ pslld \$5,$t2
+ pxor $b,$t0
+
+ movdqa $a,$t3
+ paddd @Xi[0],$e # e+=X[i]
+ psrld \$27,$t3
+ movdqa $b,$t1
+ pxor $c,$t0 # Parity(b,c,d)
+
+ pslld \$30,$t1
+ por $t3,$t2 # rol(a,5)
+ paddd $t0,$e # e+=Parity(b,c,d)
+
+ psrld \$2,$b
+ paddd $t2,$e # e+=rol(a,5)
+ por $t1,$b # b=rol(b,30)
+___
+push(@Xi,shift(@Xi));
+}
+
+sub BODY_40_59 {
+my ($i,$a,$b,$c,$d,$e)=@_;
+my $j=$i+1;
+
+$code.=<<___;
+ pxor @Xi[-2],@Xi[1] # "X[13]"
+ movdqa `&Xi_off($j+2)`,@Xi[3] # "X[2]"
+
+ movdqa $a,$t2
+ movdqa $d,$t1
+ pxor `&Xi_off($j+8)`,@Xi[1]
+ pxor @Xi[3],@Xi[1]
+ paddd $K,$e # e+=K_40_59
+ pslld \$5,$t2
+ movdqa $a,$t3
+ pand $c,$t1
+
+ movdqa $d,$t0
+ movdqa @Xi[1],$tx
+ psrld \$27,$t3
+ paddd $t1,$e
+ pxor $c,$t0
+
+ movdqa @Xi[0],`&Xi_off($i)`
+ paddd @Xi[0],$e # e+=X[i]
+ por $t3,$t2 # rol(a,5)
+ psrld \$31,$tx
+ pand $b,$t0
+ movdqa $b,$t1
+
+ pslld \$30,$t1
+ paddd @Xi[1],@Xi[1]
+ paddd $t0,$e # e+=Maj(b,d,c)
+
+ psrld \$2,$b
+ paddd $t2,$e # e+=rol(a,5)
+ por $tx,@Xi[1] # rol(@X[1],1)
+ por $t1,$b # b=rol(b,30)
+___
+push(@Xi,shift(@Xi));
+}
+
+$code.=<<___;
+.text
+
+.extern OPENSSL_ia32cap_P
+
+.globl sha1_multi_block
+.type sha1_multi_block,\@function,3
+.align 32
+sha1_multi_block:
+ mov OPENSSL_ia32cap_P+4(%rip),%rcx
+ bt \$61,%rcx # check SHA bit
+ jc _shaext_shortcut
+___
+$code.=<<___ if ($avx);
+ test \$`1<<28`,%ecx
+ jnz _avx_shortcut
+___
+$code.=<<___;
+ mov %rsp,%rax
+ push %rbx
+ push %rbp
+___
+$code.=<<___ if ($win64);
+ lea -0xa8(%rsp),%rsp
+ movaps %xmm6,(%rsp)
+ movaps %xmm7,0x10(%rsp)
+ movaps %xmm8,0x20(%rsp)
+ movaps %xmm9,0x30(%rsp)
+ movaps %xmm10,-0x78(%rax)
+ movaps %xmm11,-0x68(%rax)
+ movaps %xmm12,-0x58(%rax)
+ movaps %xmm13,-0x48(%rax)
+ movaps %xmm14,-0x38(%rax)
+ movaps %xmm15,-0x28(%rax)
+___
+$code.=<<___;
+ sub \$`$REG_SZ*18`,%rsp
+ and \$-256,%rsp
+ mov %rax,`$REG_SZ*17`(%rsp) # original %rsp
+.Lbody:
+ lea K_XX_XX(%rip),$Tbl
+ lea `$REG_SZ*16`(%rsp),%rbx
+
+.Loop_grande:
+ mov $num,`$REG_SZ*17+8`(%rsp) # original $num
+ xor $num,$num
+___
+for($i=0;$i<4;$i++) {
+ $code.=<<___;
+ mov `16*$i+0`($inp),@ptr[$i] # input pointer
+ mov `16*$i+8`($inp),%ecx # number of blocks
+ cmp $num,%ecx
+ cmovg %ecx,$num # find maximum
+ test %ecx,%ecx
+ mov %ecx,`4*$i`(%rbx) # initialize counters
+ cmovle $Tbl,@ptr[$i] # cancel input
+___
+}
+$code.=<<___;
+ test $num,$num
+ jz .Ldone
+
+ movdqu 0x00($ctx),$A # load context
+ lea 128(%rsp),%rax
+ movdqu 0x20($ctx),$B
+ movdqu 0x40($ctx),$C
+ movdqu 0x60($ctx),$D
+ movdqu 0x80($ctx),$E
+ movdqa 0x60($Tbl),$tx # pbswap_mask
+ movdqa -0x20($Tbl),$K # K_00_19
+ jmp .Loop
+
+.align 32
+.Loop:
+___
+for($i=0;$i<20;$i++) { &BODY_00_19($i,@V); unshift(@V,pop(@V)); }
+$code.=" movdqa 0x00($Tbl),$K\n"; # K_20_39
+for(;$i<40;$i++) { &BODY_20_39($i,@V); unshift(@V,pop(@V)); }
+$code.=" movdqa 0x20($Tbl),$K\n"; # K_40_59
+for(;$i<60;$i++) { &BODY_40_59($i,@V); unshift(@V,pop(@V)); }
+$code.=" movdqa 0x40($Tbl),$K\n"; # K_60_79
+for(;$i<80;$i++) { &BODY_20_39($i,@V); unshift(@V,pop(@V)); }
+$code.=<<___;
+ movdqa (%rbx),@Xi[0] # pull counters
+ mov \$1,%ecx
+ cmp 4*0(%rbx),%ecx # examinte counters
+ pxor $t2,$t2
+ cmovge $Tbl,@ptr[0] # cancel input
+ cmp 4*1(%rbx),%ecx
+ movdqa @Xi[0],@Xi[1]
+ cmovge $Tbl,@ptr[1]
+ cmp 4*2(%rbx),%ecx
+ pcmpgtd $t2,@Xi[1] # mask value
+ cmovge $Tbl,@ptr[2]
+ cmp 4*3(%rbx),%ecx
+ paddd @Xi[1],@Xi[0] # counters--
+ cmovge $Tbl,@ptr[3]
+
+ movdqu 0x00($ctx),$t0
+ pand @Xi[1],$A
+ movdqu 0x20($ctx),$t1
+ pand @Xi[1],$B
+ paddd $t0,$A
+ movdqu 0x40($ctx),$t2
+ pand @Xi[1],$C
+ paddd $t1,$B
+ movdqu 0x60($ctx),$t3
+ pand @Xi[1],$D
+ paddd $t2,$C
+ movdqu 0x80($ctx),$tx
+ pand @Xi[1],$E
+ movdqu $A,0x00($ctx)
+ paddd $t3,$D
+ movdqu $B,0x20($ctx)
+ paddd $tx,$E
+ movdqu $C,0x40($ctx)
+ movdqu $D,0x60($ctx)
+ movdqu $E,0x80($ctx)
+
+ movdqa @Xi[0],(%rbx) # save counters
+ movdqa 0x60($Tbl),$tx # pbswap_mask
+ movdqa -0x20($Tbl),$K # K_00_19
+ dec $num
+ jnz .Loop
+
+ mov `$REG_SZ*17+8`(%rsp),$num
+ lea $REG_SZ($ctx),$ctx
+ lea `16*$REG_SZ/4`($inp),$inp
+ dec $num
+ jnz .Loop_grande
+
+.Ldone:
+ mov `$REG_SZ*17`(%rsp),%rax # orignal %rsp
+___
+$code.=<<___ if ($win64);
+ movaps -0xb8(%rax),%xmm6
+ movaps -0xa8(%rax),%xmm7
+ movaps -0x98(%rax),%xmm8
+ movaps -0x88(%rax),%xmm9
+ movaps -0x78(%rax),%xmm10
+ movaps -0x68(%rax),%xmm11
+ movaps -0x58(%rax),%xmm12
+ movaps -0x48(%rax),%xmm13
+ movaps -0x38(%rax),%xmm14
+ movaps -0x28(%rax),%xmm15
+___
+$code.=<<___;
+ mov -16(%rax),%rbp
+ mov -8(%rax),%rbx
+ lea (%rax),%rsp
+.Lepilogue:
+ ret
+.size sha1_multi_block,.-sha1_multi_block
+___
+ {{{
+my ($ABCD0,$E0,$E0_,$BSWAP,$ABCD1,$E1,$E1_)=map("%xmm$_",(0..3,8..10));
+my @MSG0=map("%xmm$_",(4..7));
+my @MSG1=map("%xmm$_",(11..14));
+
+$code.=<<___;
+.type sha1_multi_block_shaext,\@function,3
+.align 32
+sha1_multi_block_shaext:
+_shaext_shortcut:
+ mov %rsp,%rax
+ push %rbx
+ push %rbp
+___
+$code.=<<___ if ($win64);
+ lea -0xa8(%rsp),%rsp
+ movaps %xmm6,(%rsp)
+ movaps %xmm7,0x10(%rsp)
+ movaps %xmm8,0x20(%rsp)
+ movaps %xmm9,0x30(%rsp)
+ movaps %xmm10,-0x78(%rax)
+ movaps %xmm11,-0x68(%rax)
+ movaps %xmm12,-0x58(%rax)
+ movaps %xmm13,-0x48(%rax)
+ movaps %xmm14,-0x38(%rax)
+ movaps %xmm15,-0x28(%rax)
+___
+$code.=<<___;
+ sub \$`$REG_SZ*18`,%rsp
+ shl \$1,$num # we process pair at a time
+ and \$-256,%rsp
+ lea 0x40($ctx),$ctx # size optimization
+ mov %rax,`$REG_SZ*17`(%rsp) # original %rsp
+.Lbody_shaext:
+ lea `$REG_SZ*16`(%rsp),%rbx
+ movdqa K_XX_XX+0x80(%rip),$BSWAP # byte-n-word swap
+
+.Loop_grande_shaext:
+ mov $num,`$REG_SZ*17+8`(%rsp) # orignal $num
+ xor $num,$num
+___
+for($i=0;$i<2;$i++) {
+ $code.=<<___;
+ mov `16*$i+0`($inp),@ptr[$i] # input pointer
+ mov `16*$i+8`($inp),%ecx # number of blocks
+ cmp $num,%ecx
+ cmovg %ecx,$num # find maximum
+ test %ecx,%ecx
+ mov %ecx,`4*$i`(%rbx) # initialize counters
+ cmovle %rsp,@ptr[$i] # cancel input
+___
+}
+$code.=<<___;
+ test $num,$num
+ jz .Ldone_shaext
+
+ movq 0x00-0x40($ctx),$ABCD0 # a1.a0
+ movq 0x20-0x40($ctx),@MSG0[0]# b1.b0
+ movq 0x40-0x40($ctx),@MSG0[1]# c1.c0
+ movq 0x60-0x40($ctx),@MSG0[2]# d1.d0
+ movq 0x80-0x40($ctx),@MSG0[3]# e1.e0
+
+ punpckldq @MSG0[0],$ABCD0 # b1.a1.b0.a0
+ punpckldq @MSG0[2],@MSG0[1] # d1.c1.d0.c0
+
+ movdqa $ABCD0,$ABCD1
+ punpcklqdq @MSG0[1],$ABCD0 # d0.c0.b0.a0
+ punpckhqdq @MSG0[1],$ABCD1 # d1.c1.b1.a1
+
+ pshufd \$0b00111111,@MSG0[3],$E0
+ pshufd \$0b01111111,@MSG0[3],$E1
+ pshufd \$0b00011011,$ABCD0,$ABCD0
+ pshufd \$0b00011011,$ABCD1,$ABCD1
+ jmp .Loop_shaext
+
+.align 32
+.Loop_shaext:
+ movdqu 0x00(@ptr[0]),@MSG0[0]
+ movdqu 0x00(@ptr[1]),@MSG1[0]
+ movdqu 0x10(@ptr[0]),@MSG0[1]
+ movdqu 0x10(@ptr[1]),@MSG1[1]
+ movdqu 0x20(@ptr[0]),@MSG0[2]
+ pshufb $BSWAP,@MSG0[0]
+ movdqu 0x20(@ptr[1]),@MSG1[2]
+ pshufb $BSWAP,@MSG1[0]
+ movdqu 0x30(@ptr[0]),@MSG0[3]
+ lea 0x40(@ptr[0]),@ptr[0]
+ pshufb $BSWAP,@MSG0[1]
+ movdqu 0x30(@ptr[1]),@MSG1[3]
+ lea 0x40(@ptr[1]),@ptr[1]
+ pshufb $BSWAP,@MSG1[1]
+
+ movdqa $E0,0x50(%rsp) # offload
+ paddd @MSG0[0],$E0
+ movdqa $E1,0x70(%rsp)
+ paddd @MSG1[0],$E1
+ movdqa $ABCD0,0x40(%rsp) # offload
+ movdqa $ABCD0,$E0_
+ movdqa $ABCD1,0x60(%rsp)
+ movdqa $ABCD1,$E1_
+ sha1rnds4 \$0,$E0,$ABCD0 # 0-3
+ sha1nexte @MSG0[1],$E0_
+ sha1rnds4 \$0,$E1,$ABCD1 # 0-3
+ sha1nexte @MSG1[1],$E1_
+ pshufb $BSWAP,@MSG0[2]
+ prefetcht0 127(@ptr[0])
+ sha1msg1 @MSG0[1],@MSG0[0]
+ pshufb $BSWAP,@MSG1[2]
+ prefetcht0 127(@ptr[1])
+ sha1msg1 @MSG1[1],@MSG1[0]
+
+ pshufb $BSWAP,@MSG0[3]
+ movdqa $ABCD0,$E0
+ pshufb $BSWAP,@MSG1[3]
+ movdqa $ABCD1,$E1
+ sha1rnds4 \$0,$E0_,$ABCD0 # 4-7
+ sha1nexte @MSG0[2],$E0
+ sha1rnds4 \$0,$E1_,$ABCD1 # 4-7
+ sha1nexte @MSG1[2],$E1
+ pxor @MSG0[2],@MSG0[0]
+ sha1msg1 @MSG0[2],@MSG0[1]
+ pxor @MSG1[2],@MSG1[0]
+ sha1msg1 @MSG1[2],@MSG1[1]
+___
+for($i=2;$i<20-4;$i++) {
+$code.=<<___;
+ movdqa $ABCD0,$E0_
+ movdqa $ABCD1,$E1_
+ sha1rnds4 \$`int($i/5)`,$E0,$ABCD0 # 8-11
+ sha1nexte @MSG0[3],$E0_
+ sha1rnds4 \$`int($i/5)`,$E1,$ABCD1 # 8-11
+ sha1nexte @MSG1[3],$E1_
+ sha1msg2 @MSG0[3],@MSG0[0]
+ sha1msg2 @MSG1[3],@MSG1[0]
+ pxor @MSG0[3],@MSG0[1]
+ sha1msg1 @MSG0[3],@MSG0[2]
+ pxor @MSG1[3],@MSG1[1]
+ sha1msg1 @MSG1[3],@MSG1[2]
+___
+ ($E0,$E0_)=($E0_,$E0); ($E1,$E1_)=($E1_,$E1);
+ push(@MSG0,shift(@MSG0)); push(@MSG1,shift(@MSG1));
+}
+$code.=<<___;
+ movdqa $ABCD0,$E0_
+ movdqa $ABCD1,$E1_
+ sha1rnds4 \$3,$E0,$ABCD0 # 64-67
+ sha1nexte @MSG0[3],$E0_
+ sha1rnds4 \$3,$E1,$ABCD1 # 64-67
+ sha1nexte @MSG1[3],$E1_
+ sha1msg2 @MSG0[3],@MSG0[0]
+ sha1msg2 @MSG1[3],@MSG1[0]
+ pxor @MSG0[3],@MSG0[1]
+ pxor @MSG1[3],@MSG1[1]
+
+ mov \$1,%ecx
+ pxor @MSG0[2],@MSG0[2] # zero
+ cmp 4*0(%rbx),%ecx # examine counters
+ cmovge %rsp,@ptr[0] # cancel input
+
+ movdqa $ABCD0,$E0
+ movdqa $ABCD1,$E1
+ sha1rnds4 \$3,$E0_,$ABCD0 # 68-71
+ sha1nexte @MSG0[0],$E0
+ sha1rnds4 \$3,$E1_,$ABCD1 # 68-71
+ sha1nexte @MSG1[0],$E1
+ sha1msg2 @MSG0[0],@MSG0[1]
+ sha1msg2 @MSG1[0],@MSG1[1]
+
+ cmp 4*1(%rbx),%ecx
+ cmovge %rsp,@ptr[1]
+ movq (%rbx),@MSG0[0] # pull counters
+
+ movdqa $ABCD0,$E0_
+ movdqa $ABCD1,$E1_
+ sha1rnds4 \$3,$E0,$ABCD0 # 72-75
+ sha1nexte @MSG0[1],$E0_
+ sha1rnds4 \$3,$E1,$ABCD1 # 72-75
+ sha1nexte @MSG1[1],$E1_
+
+ pshufd \$0x00,@MSG0[0],@MSG1[2]
+ pshufd \$0x55,@MSG0[0],@MSG1[3]
+ movdqa @MSG0[0],@MSG0[1]
+ pcmpgtd @MSG0[2],@MSG1[2]
+ pcmpgtd @MSG0[2],@MSG1[3]
+
+ movdqa $ABCD0,$E0
+ movdqa $ABCD1,$E1
+ sha1rnds4 \$3,$E0_,$ABCD0 # 76-79
+ sha1nexte $MSG0[2],$E0
+ sha1rnds4 \$3,$E1_,$ABCD1 # 76-79
+ sha1nexte $MSG0[2],$E1
+
+ pcmpgtd @MSG0[2],@MSG0[1] # counter mask
+ pand @MSG1[2],$ABCD0
+ pand @MSG1[2],$E0
+ pand @MSG1[3],$ABCD1
+ pand @MSG1[3],$E1
+ paddd @MSG0[1],@MSG0[0] # counters--
+
+ paddd 0x40(%rsp),$ABCD0
+ paddd 0x50(%rsp),$E0
+ paddd 0x60(%rsp),$ABCD1
+ paddd 0x70(%rsp),$E1
+
+ movq @MSG0[0],(%rbx) # save counters
+ dec $num
+ jnz .Loop_shaext
+
+ mov `$REG_SZ*17+8`(%rsp),$num
+
+ pshufd \$0b00011011,$ABCD0,$ABCD0
+ pshufd \$0b00011011,$ABCD1,$ABCD1
+
+ movdqa $ABCD0,@MSG0[0]
+ punpckldq $ABCD1,$ABCD0 # b1.b0.a1.a0
+ punpckhdq $ABCD1,@MSG0[0] # d1.d0.c1.c0
+ punpckhdq $E1,$E0 # e1.e0.xx.xx
+ movq $ABCD0,0x00-0x40($ctx) # a1.a0
+ psrldq \$8,$ABCD0
+ movq @MSG0[0],0x40-0x40($ctx)# c1.c0
+ psrldq \$8,@MSG0[0]
+ movq $ABCD0,0x20-0x40($ctx) # b1.b0
+ psrldq \$8,$E0
+ movq @MSG0[0],0x60-0x40($ctx)# d1.d0
+ movq $E0,0x80-0x40($ctx) # e1.e0
+
+ lea `$REG_SZ/2`($ctx),$ctx
+ lea `16*2`($inp),$inp
+ dec $num
+ jnz .Loop_grande_shaext
+
+.Ldone_shaext:
+ #mov `$REG_SZ*17`(%rsp),%rax # original %rsp
+___
+$code.=<<___ if ($win64);
+ movaps -0xb8(%rax),%xmm6
+ movaps -0xa8(%rax),%xmm7
+ movaps -0x98(%rax),%xmm8
+ movaps -0x88(%rax),%xmm9
+ movaps -0x78(%rax),%xmm10
+ movaps -0x68(%rax),%xmm11
+ movaps -0x58(%rax),%xmm12
+ movaps -0x48(%rax),%xmm13
+ movaps -0x38(%rax),%xmm14
+ movaps -0x28(%rax),%xmm15
+___
+$code.=<<___;
+ mov -16(%rax),%rbp
+ mov -8(%rax),%rbx
+ lea (%rax),%rsp
+.Lepilogue_shaext:
+ ret
+.size sha1_multi_block_shaext,.-sha1_multi_block_shaext
+___
+ }}}
+
+ if ($avx) {{{
+sub BODY_00_19_avx {
+my ($i,$a,$b,$c,$d,$e)=@_;
+my $j=$i+1;
+my $k=$i+2;
+my $vpack = $REG_SZ==16 ? "vpunpckldq" : "vinserti128";
+my $ptr_n = $REG_SZ==16 ? @ptr[1] : @ptr[4];
+
+$code.=<<___ if ($i==0 && $REG_SZ==16);
+ vmovd (@ptr[0]),@Xi[0]
+ lea `16*4`(@ptr[0]),@ptr[0]
+ vmovd (@ptr[1]),@Xi[2] # borrow Xi[2]
+ lea `16*4`(@ptr[1]),@ptr[1]
+ vpinsrd \$1,(@ptr[2]),@Xi[0],@Xi[0]
+ lea `16*4`(@ptr[2]),@ptr[2]
+ vpinsrd \$1,(@ptr[3]),@Xi[2],@Xi[2]
+ lea `16*4`(@ptr[3]),@ptr[3]
+ vmovd `4*$j-16*4`(@ptr[0]),@Xi[1]
+ vpunpckldq @Xi[2],@Xi[0],@Xi[0]
+ vmovd `4*$j-16*4`($ptr_n),$t3
+ vpshufb $tx,@Xi[0],@Xi[0]
+___
+$code.=<<___ if ($i<15 && $REG_SZ==16); # just load input
+ vpinsrd \$1,`4*$j-16*4`(@ptr[2]),@Xi[1],@Xi[1]
+ vpinsrd \$1,`4*$j-16*4`(@ptr[3]),$t3,$t3
+___
+$code.=<<___ if ($i==0 && $REG_SZ==32);
+ vmovd (@ptr[0]),@Xi[0]
+ lea `16*4`(@ptr[0]),@ptr[0]
+ vmovd (@ptr[4]),@Xi[2] # borrow Xi[2]
+ lea `16*4`(@ptr[4]),@ptr[4]
+ vmovd (@ptr[1]),$t2
+ lea `16*4`(@ptr[1]),@ptr[1]
+ vmovd (@ptr[5]),$t1
+ lea `16*4`(@ptr[5]),@ptr[5]
+ vpinsrd \$1,(@ptr[2]),@Xi[0],@Xi[0]
+ lea `16*4`(@ptr[2]),@ptr[2]
+ vpinsrd \$1,(@ptr[6]),@Xi[2],@Xi[2]
+ lea `16*4`(@ptr[6]),@ptr[6]
+ vpinsrd \$1,(@ptr[3]),$t2,$t2
+ lea `16*4`(@ptr[3]),@ptr[3]
+ vpunpckldq $t2,@Xi[0],@Xi[0]
+ vpinsrd \$1,(@ptr[7]),$t1,$t1
+ lea `16*4`(@ptr[7]),@ptr[7]
+ vpunpckldq $t1,@Xi[2],@Xi[2]
+ vmovd `4*$j-16*4`(@ptr[0]),@Xi[1]
+ vinserti128 @Xi[2],@Xi[0],@Xi[0]
+ vmovd `4*$j-16*4`($ptr_n),$t3
+ vpshufb $tx,@Xi[0],@Xi[0]
+___
+$code.=<<___ if ($i<15 && $REG_SZ==32); # just load input
+ vmovd `4*$j-16*4`(@ptr[1]),$t2
+ vmovd `4*$j-16*4`(@ptr[5]),$t1
+ vpinsrd \$1,`4*$j-16*4`(@ptr[2]),@Xi[1],@Xi[1]
+ vpinsrd \$1,`4*$j-16*4`(@ptr[6]),$t3,$t3
+ vpinsrd \$1,`4*$j-16*4`(@ptr[3]),$t2,$t2
+ vpunpckldq $t2,@Xi[1],@Xi[1]
+ vpinsrd \$1,`4*$j-16*4`(@ptr[7]),$t1,$t1
+ vpunpckldq $t1,$t3,$t3
+___
+$code.=<<___ if ($i<14);
+ vpaddd $K,$e,$e # e+=K_00_19
+ vpslld \$5,$a,$t2
+ vpandn $d,$b,$t1
+ vpand $c,$b,$t0
+
+ vmovdqa @Xi[0],`&Xi_off($i)`
+ vpaddd @Xi[0],$e,$e # e+=X[i]
+ $vpack $t3,@Xi[1],@Xi[1]
+ vpsrld \$27,$a,$t3
+ vpxor $t1,$t0,$t0 # Ch(b,c,d)
+ vmovd `4*$k-16*4`(@ptr[0]),@Xi[2]
+
+ vpslld \$30,$b,$t1
+ vpor $t3,$t2,$t2 # rol(a,5)
+ vmovd `4*$k-16*4`($ptr_n),$t3
+ vpaddd $t0,$e,$e # e+=Ch(b,c,d)
+
+ vpsrld \$2,$b,$b
+ vpaddd $t2,$e,$e # e+=rol(a,5)
+ vpshufb $tx,@Xi[1],@Xi[1]
+ vpor $t1,$b,$b # b=rol(b,30)
+___
+$code.=<<___ if ($i==14);
+ vpaddd $K,$e,$e # e+=K_00_19
+ prefetcht0 63(@ptr[0])
+ vpslld \$5,$a,$t2
+ vpandn $d,$b,$t1
+ vpand $c,$b,$t0
+
+ vmovdqa @Xi[0],`&Xi_off($i)`
+ vpaddd @Xi[0],$e,$e # e+=X[i]
+ $vpack $t3,@Xi[1],@Xi[1]
+ vpsrld \$27,$a,$t3
+ prefetcht0 63(@ptr[1])
+ vpxor $t1,$t0,$t0 # Ch(b,c,d)
+
+ vpslld \$30,$b,$t1
+ vpor $t3,$t2,$t2 # rol(a,5)
+ prefetcht0 63(@ptr[2])
+ vpaddd $t0,$e,$e # e+=Ch(b,c,d)
+
+ vpsrld \$2,$b,$b
+ vpaddd $t2,$e,$e # e+=rol(a,5)
+ prefetcht0 63(@ptr[3])
+ vpshufb $tx,@Xi[1],@Xi[1]
+ vpor $t1,$b,$b # b=rol(b,30)
+___
+$code.=<<___ if ($i>=13 && $i<15);
+ vmovdqa `&Xi_off($j+2)`,@Xi[3] # preload "X[2]"
+___
+$code.=<<___ if ($i>=15); # apply Xupdate
+ vpxor @Xi[-2],@Xi[1],@Xi[1] # "X[13]"
+ vmovdqa `&Xi_off($j+2)`,@Xi[3] # "X[2]"
+
+ vpaddd $K,$e,$e # e+=K_00_19
+ vpslld \$5,$a,$t2
+ vpandn $d,$b,$t1
+ `"prefetcht0 63(@ptr[4])" if ($i==15 && $REG_SZ==32)`
+ vpand $c,$b,$t0
+
+ vmovdqa @Xi[0],`&Xi_off($i)`
+ vpaddd @Xi[0],$e,$e # e+=X[i]
+ vpxor `&Xi_off($j+8)`,@Xi[1],@Xi[1]
+ vpsrld \$27,$a,$t3
+ vpxor $t1,$t0,$t0 # Ch(b,c,d)
+ vpxor @Xi[3],@Xi[1],@Xi[1]
+ `"prefetcht0 63(@ptr[5])" if ($i==15 && $REG_SZ==32)`
+
+ vpslld \$30,$b,$t1
+ vpor $t3,$t2,$t2 # rol(a,5)
+ vpaddd $t0,$e,$e # e+=Ch(b,c,d)
+ `"prefetcht0 63(@ptr[6])" if ($i==15 && $REG_SZ==32)`
+ vpsrld \$31,@Xi[1],$tx
+ vpaddd @Xi[1],@Xi[1],@Xi[1]
+
+ vpsrld \$2,$b,$b
+ `"prefetcht0 63(@ptr[7])" if ($i==15 && $REG_SZ==32)`
+ vpaddd $t2,$e,$e # e+=rol(a,5)
+ vpor $tx,@Xi[1],@Xi[1] # rol \$1,@Xi[1]
+ vpor $t1,$b,$b # b=rol(b,30)
+___
+push(@Xi,shift(@Xi));
+}
+
+sub BODY_20_39_avx {
+my ($i,$a,$b,$c,$d,$e)=@_;
+my $j=$i+1;
+
+$code.=<<___ if ($i<79);
+ vpxor @Xi[-2],@Xi[1],@Xi[1] # "X[13]"
+ vmovdqa `&Xi_off($j+2)`,@Xi[3] # "X[2]"
+
+ vpslld \$5,$a,$t2
+ vpaddd $K,$e,$e # e+=K_20_39
+ vpxor $b,$d,$t0
+___
+$code.=<<___ if ($i<72);
+ vmovdqa @Xi[0],`&Xi_off($i)`
+___
+$code.=<<___ if ($i<79);
+ vpaddd @Xi[0],$e,$e # e+=X[i]
+ vpxor `&Xi_off($j+8)`,@Xi[1],@Xi[1]
+ vpsrld \$27,$a,$t3
+ vpxor $c,$t0,$t0 # Parity(b,c,d)
+ vpxor @Xi[3],@Xi[1],@Xi[1]
+
+ vpslld \$30,$b,$t1
+ vpor $t3,$t2,$t2 # rol(a,5)
+ vpaddd $t0,$e,$e # e+=Parity(b,c,d)
+ vpsrld \$31,@Xi[1],$tx
+ vpaddd @Xi[1],@Xi[1],@Xi[1]
+
+ vpsrld \$2,$b,$b
+ vpaddd $t2,$e,$e # e+=rol(a,5)
+ vpor $tx,@Xi[1],@Xi[1] # rol(@Xi[1],1)
+ vpor $t1,$b,$b # b=rol(b,30)
+___
+$code.=<<___ if ($i==79);
+ vpslld \$5,$a,$t2
+ vpaddd $K,$e,$e # e+=K_20_39
+ vpxor $b,$d,$t0
+
+ vpsrld \$27,$a,$t3
+ vpaddd @Xi[0],$e,$e # e+=X[i]
+ vpxor $c,$t0,$t0 # Parity(b,c,d)
+
+ vpslld \$30,$b,$t1
+ vpor $t3,$t2,$t2 # rol(a,5)
+ vpaddd $t0,$e,$e # e+=Parity(b,c,d)
+
+ vpsrld \$2,$b,$b
+ vpaddd $t2,$e,$e # e+=rol(a,5)
+ vpor $t1,$b,$b # b=rol(b,30)
+___
+push(@Xi,shift(@Xi));
+}
+
+sub BODY_40_59_avx {
+my ($i,$a,$b,$c,$d,$e)=@_;
+my $j=$i+1;
+
+$code.=<<___;
+ vpxor @Xi[-2],@Xi[1],@Xi[1] # "X[13]"
+ vmovdqa `&Xi_off($j+2)`,@Xi[3] # "X[2]"
+
+ vpaddd $K,$e,$e # e+=K_40_59
+ vpslld \$5,$a,$t2
+ vpand $c,$d,$t1
+ vpxor `&Xi_off($j+8)`,@Xi[1],@Xi[1]
+
+ vpaddd $t1,$e,$e
+ vpsrld \$27,$a,$t3
+ vpxor $c,$d,$t0
+ vpxor @Xi[3],@Xi[1],@Xi[1]
+
+ vmovdqu @Xi[0],`&Xi_off($i)`
+ vpaddd @Xi[0],$e,$e # e+=X[i]
+ vpor $t3,$t2,$t2 # rol(a,5)
+ vpsrld \$31,@Xi[1],$tx
+ vpand $b,$t0,$t0
+ vpaddd @Xi[1],@Xi[1],@Xi[1]
+
+ vpslld \$30,$b,$t1
+ vpaddd $t0,$e,$e # e+=Maj(b,d,c)
+
+ vpsrld \$2,$b,$b
+ vpaddd $t2,$e,$e # e+=rol(a,5)
+ vpor $tx,@Xi[1],@Xi[1] # rol(@X[1],1)
+ vpor $t1,$b,$b # b=rol(b,30)
+___
+push(@Xi,shift(@Xi));
+}
+
+$code.=<<___;
+.type sha1_multi_block_avx,\@function,3
+.align 32
+sha1_multi_block_avx:
+_avx_shortcut:
+___
+$code.=<<___ if ($avx>1);
+ shr \$32,%rcx
+ cmp \$2,$num
+ jb .Lavx
+ test \$`1<<5`,%ecx
+ jnz _avx2_shortcut
+ jmp .Lavx
+.align 32
+.Lavx:
+___
+$code.=<<___;
+ mov %rsp,%rax
+ push %rbx
+ push %rbp
+___
+$code.=<<___ if ($win64);
+ lea -0xa8(%rsp),%rsp
+ movaps %xmm6,(%rsp)
+ movaps %xmm7,0x10(%rsp)
+ movaps %xmm8,0x20(%rsp)
+ movaps %xmm9,0x30(%rsp)
+ movaps %xmm10,-0x78(%rax)
+ movaps %xmm11,-0x68(%rax)
+ movaps %xmm12,-0x58(%rax)
+ movaps %xmm13,-0x48(%rax)
+ movaps %xmm14,-0x38(%rax)
+ movaps %xmm15,-0x28(%rax)
+___
+$code.=<<___;
+ sub \$`$REG_SZ*18`, %rsp
+ and \$-256,%rsp
+ mov %rax,`$REG_SZ*17`(%rsp) # original %rsp
+.Lbody_avx:
+ lea K_XX_XX(%rip),$Tbl
+ lea `$REG_SZ*16`(%rsp),%rbx
+
+ vzeroupper
+.Loop_grande_avx:
+ mov $num,`$REG_SZ*17+8`(%rsp) # original $num
+ xor $num,$num
+___
+for($i=0;$i<4;$i++) {
+ $code.=<<___;
+ mov `16*$i+0`($inp),@ptr[$i] # input pointer
+ mov `16*$i+8`($inp),%ecx # number of blocks
+ cmp $num,%ecx
+ cmovg %ecx,$num # find maximum
+ test %ecx,%ecx
+ mov %ecx,`4*$i`(%rbx) # initialize counters
+ cmovle $Tbl,@ptr[$i] # cancel input
+___
+}
+$code.=<<___;
+ test $num,$num
+ jz .Ldone_avx
+
+ vmovdqu 0x00($ctx),$A # load context
+ lea 128(%rsp),%rax
+ vmovdqu 0x20($ctx),$B
+ vmovdqu 0x40($ctx),$C
+ vmovdqu 0x60($ctx),$D
+ vmovdqu 0x80($ctx),$E
+ vmovdqu 0x60($Tbl),$tx # pbswap_mask
+ jmp .Loop_avx
+
+.align 32
+.Loop_avx:
+___
+$code.=" vmovdqa -0x20($Tbl),$K\n"; # K_00_19
+for($i=0;$i<20;$i++) { &BODY_00_19_avx($i,@V); unshift(@V,pop(@V)); }
+$code.=" vmovdqa 0x00($Tbl),$K\n"; # K_20_39
+for(;$i<40;$i++) { &BODY_20_39_avx($i,@V); unshift(@V,pop(@V)); }
+$code.=" vmovdqa 0x20($Tbl),$K\n"; # K_40_59
+for(;$i<60;$i++) { &BODY_40_59_avx($i,@V); unshift(@V,pop(@V)); }
+$code.=" vmovdqa 0x40($Tbl),$K\n"; # K_60_79
+for(;$i<80;$i++) { &BODY_20_39_avx($i,@V); unshift(@V,pop(@V)); }
+$code.=<<___;
+ mov \$1,%ecx
+___
+for($i=0;$i<4;$i++) {
+ $code.=<<___;
+ cmp `4*$i`(%rbx),%ecx # examine counters
+ cmovge $Tbl,@ptr[$i] # cancel input
+___
+}
+$code.=<<___;
+ vmovdqu (%rbx),$t0 # pull counters
+ vpxor $t2,$t2,$t2
+ vmovdqa $t0,$t1
+ vpcmpgtd $t2,$t1,$t1 # mask value
+ vpaddd $t1,$t0,$t0 # counters--
+
+ vpand $t1,$A,$A
+ vpand $t1,$B,$B
+ vpaddd 0x00($ctx),$A,$A
+ vpand $t1,$C,$C
+ vpaddd 0x20($ctx),$B,$B
+ vpand $t1,$D,$D
+ vpaddd 0x40($ctx),$C,$C
+ vpand $t1,$E,$E
+ vpaddd 0x60($ctx),$D,$D
+ vpaddd 0x80($ctx),$E,$E
+ vmovdqu $A,0x00($ctx)
+ vmovdqu $B,0x20($ctx)
+ vmovdqu $C,0x40($ctx)
+ vmovdqu $D,0x60($ctx)
+ vmovdqu $E,0x80($ctx)
+
+ vmovdqu $t0,(%rbx) # save counters
+ vmovdqu 0x60($Tbl),$tx # pbswap_mask
+ dec $num
+ jnz .Loop_avx
+
+ mov `$REG_SZ*17+8`(%rsp),$num
+ lea $REG_SZ($ctx),$ctx
+ lea `16*$REG_SZ/4`($inp),$inp
+ dec $num
+ jnz .Loop_grande_avx
+
+.Ldone_avx:
+ mov `$REG_SZ*17`(%rsp),%rax # orignal %rsp
+ vzeroupper
+___
+$code.=<<___ if ($win64);
+ movaps -0xb8(%rax),%xmm6
+ movaps -0xa8(%rax),%xmm7
+ movaps -0x98(%rax),%xmm8
+ movaps -0x88(%rax),%xmm9
+ movaps -0x78(%rax),%xmm10
+ movaps -0x68(%rax),%xmm11
+ movaps -0x58(%rax),%xmm12
+ movaps -0x48(%rax),%xmm13
+ movaps -0x38(%rax),%xmm14
+ movaps -0x28(%rax),%xmm15
+___
+$code.=<<___;
+ mov -16(%rax),%rbp
+ mov -8(%rax),%rbx
+ lea (%rax),%rsp
+.Lepilogue_avx:
+ ret
+.size sha1_multi_block_avx,.-sha1_multi_block_avx
+___
+
+ if ($avx>1) {
+$code =~ s/\`([^\`]*)\`/eval $1/gem;
+
+$REG_SZ=32;
+
+@ptr=map("%r$_",(12..15,8..11));
+
+@V=($A,$B,$C,$D,$E)=map("%ymm$_",(0..4));
+($t0,$t1,$t2,$t3,$tx)=map("%ymm$_",(5..9));
+@Xi=map("%ymm$_",(10..14));
+$K="%ymm15";
+
+$code.=<<___;
+.type sha1_multi_block_avx2,\@function,3
+.align 32
+sha1_multi_block_avx2:
+_avx2_shortcut:
+ mov %rsp,%rax
+ push %rbx
+ push %rbp
+ push %r12
+ push %r13
+ push %r14
+ push %r15
+___
+$code.=<<___ if ($win64);
+ lea -0xa8(%rsp),%rsp
+ movaps %xmm6,(%rsp)
+ movaps %xmm7,0x10(%rsp)
+ movaps %xmm8,0x20(%rsp)
+ movaps %xmm9,0x30(%rsp)
+ movaps %xmm10,0x40(%rsp)
+ movaps %xmm11,0x50(%rsp)
+ movaps %xmm12,-0x78(%rax)
+ movaps %xmm13,-0x68(%rax)
+ movaps %xmm14,-0x58(%rax)
+ movaps %xmm15,-0x48(%rax)
+___
+$code.=<<___;
+ sub \$`$REG_SZ*18`, %rsp
+ and \$-256,%rsp
+ mov %rax,`$REG_SZ*17`(%rsp) # original %rsp
+.Lbody_avx2:
+ lea K_XX_XX(%rip),$Tbl
+ shr \$1,$num
+
+ vzeroupper
+.Loop_grande_avx2:
+ mov $num,`$REG_SZ*17+8`(%rsp) # original $num
+ xor $num,$num
+ lea `$REG_SZ*16`(%rsp),%rbx
+___
+for($i=0;$i<8;$i++) {
+ $code.=<<___;
+ mov `16*$i+0`($inp),@ptr[$i] # input pointer
+ mov `16*$i+8`($inp),%ecx # number of blocks
+ cmp $num,%ecx
+ cmovg %ecx,$num # find maximum
+ test %ecx,%ecx
+ mov %ecx,`4*$i`(%rbx) # initialize counters
+ cmovle $Tbl,@ptr[$i] # cancel input
+___
+}
+$code.=<<___;
+ vmovdqu 0x00($ctx),$A # load context
+ lea 128(%rsp),%rax
+ vmovdqu 0x20($ctx),$B
+ lea 256+128(%rsp),%rbx
+ vmovdqu 0x40($ctx),$C
+ vmovdqu 0x60($ctx),$D
+ vmovdqu 0x80($ctx),$E
+ vmovdqu 0x60($Tbl),$tx # pbswap_mask
+ jmp .Loop_avx2
+
+.align 32
+.Loop_avx2:
+___
+$code.=" vmovdqa -0x20($Tbl),$K\n"; # K_00_19
+for($i=0;$i<20;$i++) { &BODY_00_19_avx($i,@V); unshift(@V,pop(@V)); }
+$code.=" vmovdqa 0x00($Tbl),$K\n"; # K_20_39
+for(;$i<40;$i++) { &BODY_20_39_avx($i,@V); unshift(@V,pop(@V)); }
+$code.=" vmovdqa 0x20($Tbl),$K\n"; # K_40_59
+for(;$i<60;$i++) { &BODY_40_59_avx($i,@V); unshift(@V,pop(@V)); }
+$code.=" vmovdqa 0x40($Tbl),$K\n"; # K_60_79
+for(;$i<80;$i++) { &BODY_20_39_avx($i,@V); unshift(@V,pop(@V)); }
+$code.=<<___;
+ mov \$1,%ecx
+ lea `$REG_SZ*16`(%rsp),%rbx
+___
+for($i=0;$i<8;$i++) {
+ $code.=<<___;
+ cmp `4*$i`(%rbx),%ecx # examine counters
+ cmovge $Tbl,@ptr[$i] # cancel input
+___
+}
+$code.=<<___;
+ vmovdqu (%rbx),$t0 # pull counters
+ vpxor $t2,$t2,$t2
+ vmovdqa $t0,$t1
+ vpcmpgtd $t2,$t1,$t1 # mask value
+ vpaddd $t1,$t0,$t0 # counters--
+
+ vpand $t1,$A,$A
+ vpand $t1,$B,$B
+ vpaddd 0x00($ctx),$A,$A
+ vpand $t1,$C,$C
+ vpaddd 0x20($ctx),$B,$B
+ vpand $t1,$D,$D
+ vpaddd 0x40($ctx),$C,$C
+ vpand $t1,$E,$E
+ vpaddd 0x60($ctx),$D,$D
+ vpaddd 0x80($ctx),$E,$E
+ vmovdqu $A,0x00($ctx)
+ vmovdqu $B,0x20($ctx)
+ vmovdqu $C,0x40($ctx)
+ vmovdqu $D,0x60($ctx)
+ vmovdqu $E,0x80($ctx)
+
+ vmovdqu $t0,(%rbx) # save counters
+ lea 256+128(%rsp),%rbx
+ vmovdqu 0x60($Tbl),$tx # pbswap_mask
+ dec $num
+ jnz .Loop_avx2
+
+ #mov `$REG_SZ*17+8`(%rsp),$num
+ #lea $REG_SZ($ctx),$ctx
+ #lea `16*$REG_SZ/4`($inp),$inp
+ #dec $num
+ #jnz .Loop_grande_avx2
+
+.Ldone_avx2:
+ mov `$REG_SZ*17`(%rsp),%rax # orignal %rsp
+ vzeroupper
+___
+$code.=<<___ if ($win64);
+ movaps -0xd8(%rax),%xmm6
+ movaps -0xc8(%rax),%xmm7
+ movaps -0xb8(%rax),%xmm8
+ movaps -0xa8(%rax),%xmm9
+ movaps -0x98(%rax),%xmm10
+ movaps -0x88(%rax),%xmm11
+ movaps -0x78(%rax),%xmm12
+ movaps -0x68(%rax),%xmm13
+ movaps -0x58(%rax),%xmm14
+ movaps -0x48(%rax),%xmm15
+___
+$code.=<<___;
+ mov -48(%rax),%r15
+ mov -40(%rax),%r14
+ mov -32(%rax),%r13
+ mov -24(%rax),%r12
+ mov -16(%rax),%rbp
+ mov -8(%rax),%rbx
+ lea (%rax),%rsp
+.Lepilogue_avx2:
+ ret
+.size sha1_multi_block_avx2,.-sha1_multi_block_avx2
+___
+ } }}}
+$code.=<<___;
+
+.align 256
+ .long 0x5a827999,0x5a827999,0x5a827999,0x5a827999 # K_00_19
+ .long 0x5a827999,0x5a827999,0x5a827999,0x5a827999 # K_00_19
+K_XX_XX:
+ .long 0x6ed9eba1,0x6ed9eba1,0x6ed9eba1,0x6ed9eba1 # K_20_39
+ .long 0x6ed9eba1,0x6ed9eba1,0x6ed9eba1,0x6ed9eba1 # K_20_39
+ .long 0x8f1bbcdc,0x8f1bbcdc,0x8f1bbcdc,0x8f1bbcdc # K_40_59
+ .long 0x8f1bbcdc,0x8f1bbcdc,0x8f1bbcdc,0x8f1bbcdc # K_40_59
+ .long 0xca62c1d6,0xca62c1d6,0xca62c1d6,0xca62c1d6 # K_60_79
+ .long 0xca62c1d6,0xca62c1d6,0xca62c1d6,0xca62c1d6 # K_60_79
+ .long 0x00010203,0x04050607,0x08090a0b,0x0c0d0e0f # pbswap
+ .long 0x00010203,0x04050607,0x08090a0b,0x0c0d0e0f # pbswap
+ .byte 0xf,0xe,0xd,0xc,0xb,0xa,0x9,0x8,0x7,0x6,0x5,0x4,0x3,0x2,0x1,0x0
+ .asciz "SHA1 multi-block transform for x86_64, CRYPTOGAMS by <appro\@openssl.org>"
+___
+
+if ($win64) {
+# EXCEPTION_DISPOSITION handler (EXCEPTION_RECORD *rec,ULONG64 frame,
+# CONTEXT *context,DISPATCHER_CONTEXT *disp)
+$rec="%rcx";
+$frame="%rdx";
+$context="%r8";
+$disp="%r9";
+
+$code.=<<___;
+.extern __imp_RtlVirtualUnwind
+.type se_handler,\@abi-omnipotent
+.align 16
+se_handler:
+ push %rsi
+ push %rdi
+ push %rbx
+ push %rbp
+ push %r12
+ push %r13
+ push %r14
+ push %r15
+ pushfq
+ sub \$64,%rsp
+
+ mov 120($context),%rax # pull context->Rax
+ mov 248($context),%rbx # pull context->Rip
+
+ mov 8($disp),%rsi # disp->ImageBase
+ mov 56($disp),%r11 # disp->HandlerData
+
+ mov 0(%r11),%r10d # HandlerData[0]
+ lea (%rsi,%r10),%r10 # end of prologue label
+ cmp %r10,%rbx # context->Rip<.Lbody
+ jb .Lin_prologue
+
+ mov 152($context),%rax # pull context->Rsp
+
+ mov 4(%r11),%r10d # HandlerData[1]
+ lea (%rsi,%r10),%r10 # epilogue label
+ cmp %r10,%rbx # context->Rip>=.Lepilogue
+ jae .Lin_prologue
+
+ mov `16*17`(%rax),%rax # pull saved stack pointer
+
+ mov -8(%rax),%rbx
+ mov -16(%rax),%rbp
+ mov %rbx,144($context) # restore context->Rbx
+ mov %rbp,160($context) # restore context->Rbp
+
+ lea -24-10*16(%rax),%rsi
+ lea 512($context),%rdi # &context.Xmm6
+ mov \$20,%ecx
+ .long 0xa548f3fc # cld; rep movsq
+
+.Lin_prologue:
+ mov 8(%rax),%rdi
+ mov 16(%rax),%rsi
+ mov %rax,152($context) # restore context->Rsp
+ mov %rsi,168($context) # restore context->Rsi
+ mov %rdi,176($context) # restore context->Rdi
+
+ mov 40($disp),%rdi # disp->ContextRecord
+ mov $context,%rsi # context
+ mov \$154,%ecx # sizeof(CONTEXT)
+ .long 0xa548f3fc # cld; rep movsq
+
+ mov $disp,%rsi
+ xor %rcx,%rcx # arg1, UNW_FLAG_NHANDLER
+ mov 8(%rsi),%rdx # arg2, disp->ImageBase
+ mov 0(%rsi),%r8 # arg3, disp->ControlPc
+ mov 16(%rsi),%r9 # arg4, disp->FunctionEntry
+ mov 40(%rsi),%r10 # disp->ContextRecord
+ lea 56(%rsi),%r11 # &disp->HandlerData
+ lea 24(%rsi),%r12 # &disp->EstablisherFrame
+ mov %r10,32(%rsp) # arg5
+ mov %r11,40(%rsp) # arg6
+ mov %r12,48(%rsp) # arg7
+ mov %rcx,56(%rsp) # arg8, (NULL)
+ call *__imp_RtlVirtualUnwind(%rip)
+
+ mov \$1,%eax # ExceptionContinueSearch
+ add \$64,%rsp
+ popfq
+ pop %r15
+ pop %r14
+ pop %r13
+ pop %r12
+ pop %rbp
+ pop %rbx
+ pop %rdi
+ pop %rsi
+ ret
+.size se_handler,.-se_handler
+___
+$code.=<<___ if ($avx>1);
+.type avx2_handler,\@abi-omnipotent
+.align 16
+avx2_handler:
+ push %rsi
+ push %rdi
+ push %rbx
+ push %rbp
+ push %r12
+ push %r13
+ push %r14
+ push %r15
+ pushfq
+ sub \$64,%rsp
+
+ mov 120($context),%rax # pull context->Rax
+ mov 248($context),%rbx # pull context->Rip
+
+ mov 8($disp),%rsi # disp->ImageBase
+ mov 56($disp),%r11 # disp->HandlerData
+
+ mov 0(%r11),%r10d # HandlerData[0]
+ lea (%rsi,%r10),%r10 # end of prologue label
+ cmp %r10,%rbx # context->Rip<body label
+ jb .Lin_prologue
+
+ mov 152($context),%rax # pull context->Rsp
+
+ mov 4(%r11),%r10d # HandlerData[1]
+ lea (%rsi,%r10),%r10 # epilogue label
+ cmp %r10,%rbx # context->Rip>=epilogue label
+ jae .Lin_prologue
+
+ mov `32*17`($context),%rax # pull saved stack pointer
+
+ mov -8(%rax),%rbx
+ mov -16(%rax),%rbp
+ mov -24(%rax),%r12
+ mov -32(%rax),%r13
+ mov -40(%rax),%r14
+ mov -48(%rax),%r15
+ mov %rbx,144($context) # restore context->Rbx
+ mov %rbp,160($context) # restore context->Rbp
+ mov %r12,216($context) # restore cotnext->R12
+ mov %r13,224($context) # restore cotnext->R13
+ mov %r14,232($context) # restore cotnext->R14
+ mov %r15,240($context) # restore cotnext->R15
+
+ lea -56-10*16(%rax),%rsi
+ lea 512($context),%rdi # &context.Xmm6
+ mov \$20,%ecx
+ .long 0xa548f3fc # cld; rep movsq
+
+ jmp .Lin_prologue
+.size avx2_handler,.-avx2_handler
+___
+$code.=<<___;
+.section .pdata
+.align 4
+ .rva .LSEH_begin_sha1_multi_block
+ .rva .LSEH_end_sha1_multi_block
+ .rva .LSEH_info_sha1_multi_block
+ .rva .LSEH_begin_sha1_multi_block_shaext
+ .rva .LSEH_end_sha1_multi_block_shaext
+ .rva .LSEH_info_sha1_multi_block_shaext
+___
+$code.=<<___ if ($avx);
+ .rva .LSEH_begin_sha1_multi_block_avx
+ .rva .LSEH_end_sha1_multi_block_avx
+ .rva .LSEH_info_sha1_multi_block_avx
+___
+$code.=<<___ if ($avx>1);
+ .rva .LSEH_begin_sha1_multi_block_avx2
+ .rva .LSEH_end_sha1_multi_block_avx2
+ .rva .LSEH_info_sha1_multi_block_avx2
+___
+$code.=<<___;
+.section .xdata
+.align 8
+.LSEH_info_sha1_multi_block:
+ .byte 9,0,0,0
+ .rva se_handler
+ .rva .Lbody,.Lepilogue # HandlerData[]
+.LSEH_info_sha1_multi_block_shaext:
+ .byte 9,0,0,0
+ .rva se_handler
+ .rva .Lbody_shaext,.Lepilogue_shaext # HandlerData[]
+___
+$code.=<<___ if ($avx);
+.LSEH_info_sha1_multi_block_avx:
+ .byte 9,0,0,0
+ .rva se_handler
+ .rva .Lbody_avx,.Lepilogue_avx # HandlerData[]
+___
+$code.=<<___ if ($avx>1);
+.LSEH_info_sha1_multi_block_avx2:
+ .byte 9,0,0,0
+ .rva avx2_handler
+ .rva .Lbody_avx2,.Lepilogue_avx2 # HandlerData[]
+___
+}
+####################################################################
+
+sub rex {
+ local *opcode=shift;
+ my ($dst,$src)=@_;
+ my $rex=0;
+
+ $rex|=0x04 if ($dst>=8);
+ $rex|=0x01 if ($src>=8);
+ unshift @opcode,$rex|0x40 if ($rex);
+}
+
+sub sha1rnds4 {
+ if (@_[0] =~ /\$([x0-9a-f]+),\s*%xmm([0-9]+),\s*%xmm([0-9]+)/) {
+ my @opcode=(0x0f,0x3a,0xcc);
+ rex(\@opcode,$3,$2);
+ push @opcode,0xc0|($2&7)|(($3&7)<<3); # ModR/M
+ my $c=$1;
+ push @opcode,$c=~/^0/?oct($c):$c;
+ return ".byte\t".join(',',@opcode);
+ } else {
+ return "sha1rnds4\t".@_[0];
+ }
+}
+
+sub sha1op38 {
+ my $instr = shift;
+ my %opcodelet = (
+ "sha1nexte" => 0xc8,
+ "sha1msg1" => 0xc9,
+ "sha1msg2" => 0xca );
+
+ if (defined($opcodelet{$instr}) && @_[0] =~ /%xmm([0-9]+),\s*%xmm([0-9]+)/) {
+ my @opcode=(0x0f,0x38);
+ rex(\@opcode,$2,$1);
+ push @opcode,$opcodelet{$instr};
+ push @opcode,0xc0|($1&7)|(($2&7)<<3); # ModR/M
+ return ".byte\t".join(',',@opcode);
+ } else {
+ return $instr."\t".@_[0];
+ }
+}
+
+foreach (split("\n",$code)) {
+ s/\`([^\`]*)\`/eval($1)/ge;
+
+ s/\b(sha1rnds4)\s+(.*)/sha1rnds4($2)/geo or
+ s/\b(sha1[^\s]*)\s+(.*)/sha1op38($1,$2)/geo or
+
+ s/\b(vmov[dq])\b(.+)%ymm([0-9]+)/$1$2%xmm$3/go or
+ s/\b(vmovdqu)\b(.+)%x%ymm([0-9]+)/$1$2%xmm$3/go or
+ s/\b(vpinsr[qd])\b(.+)%ymm([0-9]+),%ymm([0-9]+)/$1$2%xmm$3,%xmm$4/go or
+ s/\b(vpextr[qd])\b(.+)%ymm([0-9]+)/$1$2%xmm$3/go or
+ s/\b(vinserti128)\b(\s+)%ymm/$1$2\$1,%xmm/go or
+ s/\b(vpbroadcast[qd]\s+)%ymm([0-9]+)/$1%xmm$2/go;
+
+ print $_,"\n";
+}
+
+close STDOUT;
diff --git a/crypto/openssl/crypto/sha/asm/sha1-mips.pl b/crypto/openssl/crypto/sha/asm/sha1-mips.pl
index 197bc6b..3408493 100755
--- a/crypto/openssl/crypto/sha/asm/sha1-mips.pl
+++ b/crypto/openssl/crypto/sha/asm/sha1-mips.pl
@@ -15,6 +15,10 @@
# compatible subroutine. There is room for minor optimization on
# little-endian platforms...
+# September 2012.
+#
+# Add MIPS32r2 code (>25% less instructions).
+
######################################################################
# There is a number of MIPS ABI in use, O32 and N32/64 are most
# widely used. Then there is a new contender: NUBI. It appears that if
@@ -42,7 +46,7 @@
# ($s0,$s1,$s2,$s3,$s4,$s5,$s6,$s7)=map("\$$_",(16..23));
# ($gp,$sp,$fp,$ra)=map("\$$_",(28..31));
#
-$flavour = shift; # supported flavours are o32,n32,64,nubi32,nubi64
+$flavour = shift || "o32"; # supported flavours are o32,n32,64,nubi32,nubi64
if ($flavour =~ /64|n32/i) {
$PTR_ADD="dadd"; # incidentally works even on n32
@@ -95,6 +99,10 @@ sub BODY_00_14 {
my ($i,$a,$b,$c,$d,$e)=@_;
my $j=$i+1;
$code.=<<___ if (!$big_endian);
+#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
+ wsbh @X[$i],@X[$i] # byte swap($i)
+ rotr @X[$i],@X[$i],16
+#else
srl $t0,@X[$i],24 # byte swap($i)
srl $t1,@X[$i],8
andi $t2,@X[$i],0xFF00
@@ -104,8 +112,22 @@ $code.=<<___ if (!$big_endian);
or @X[$i],$t0
or $t1,$t2
or @X[$i],$t1
+#endif
___
$code.=<<___;
+#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
+ addu $e,$K # $i
+ xor $t0,$c,$d
+ rotr $t1,$a,27
+ lwl @X[$j],$j*4+$MSB($inp)
+ and $t0,$b
+ addu $e,$t1
+ lwr @X[$j],$j*4+$LSB($inp)
+ xor $t0,$d
+ addu $e,@X[$i]
+ rotr $b,$b,2
+ addu $e,$t0
+#else
lwl @X[$j],$j*4+$MSB($inp)
sll $t0,$a,5 # $i
addu $e,$K
@@ -121,6 +143,7 @@ $code.=<<___;
addu $e,@X[$i]
or $b,$t2
addu $e,$t0
+#endif
___
}
@@ -129,6 +152,10 @@ my ($i,$a,$b,$c,$d,$e)=@_;
my $j=$i+1;
$code.=<<___ if (!$big_endian && $i==15);
+#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
+ wsbh @X[$i],@X[$i] # byte swap($i)
+ rotr @X[$i],@X[$i],16
+#else
srl $t0,@X[$i],24 # byte swap($i)
srl $t1,@X[$i],8
andi $t2,@X[$i],0xFF00
@@ -138,8 +165,24 @@ $code.=<<___ if (!$big_endian && $i==15);
or @X[$i],$t0
or @X[$i],$t1
or @X[$i],$t2
+#endif
___
$code.=<<___;
+#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
+ addu $e,$K # $i
+ xor @X[$j%16],@X[($j+2)%16]
+ xor $t0,$c,$d
+ rotr $t1,$a,27
+ xor @X[$j%16],@X[($j+8)%16]
+ and $t0,$b
+ addu $e,$t1
+ xor @X[$j%16],@X[($j+13)%16]
+ xor $t0,$d
+ addu $e,@X[$i%16]
+ rotr @X[$j%16],@X[$j%16],31
+ rotr $b,$b,2
+ addu $e,$t0
+#else
xor @X[$j%16],@X[($j+2)%16]
sll $t0,$a,5 # $i
addu $e,$K
@@ -159,6 +202,7 @@ $code.=<<___;
addu $e,@X[$i%16]
or $b,$t2
addu $e,$t0
+#endif
___
}
@@ -166,6 +210,20 @@ sub BODY_20_39 {
my ($i,$a,$b,$c,$d,$e)=@_;
my $j=$i+1;
$code.=<<___ if ($i<79);
+#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
+ xor @X[$j%16],@X[($j+2)%16]
+ addu $e,$K # $i
+ rotr $t1,$a,27
+ xor @X[$j%16],@X[($j+8)%16]
+ xor $t0,$c,$d
+ addu $e,$t1
+ xor @X[$j%16],@X[($j+13)%16]
+ xor $t0,$b
+ addu $e,@X[$i%16]
+ rotr @X[$j%16],@X[$j%16],31
+ rotr $b,$b,2
+ addu $e,$t0
+#else
xor @X[$j%16],@X[($j+2)%16]
sll $t0,$a,5 # $i
addu $e,$K
@@ -184,8 +242,24 @@ $code.=<<___ if ($i<79);
or @X[$j%16],$t1
or $b,$t2
addu $e,$t0
+#endif
___
$code.=<<___ if ($i==79);
+#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
+ lw @X[0],0($ctx)
+ addu $e,$K # $i
+ lw @X[1],4($ctx)
+ rotr $t1,$a,27
+ lw @X[2],8($ctx)
+ xor $t0,$c,$d
+ addu $e,$t1
+ lw @X[3],12($ctx)
+ xor $t0,$b
+ addu $e,@X[$i%16]
+ lw @X[4],16($ctx)
+ rotr $b,$b,2
+ addu $e,$t0
+#else
lw @X[0],0($ctx)
sll $t0,$a,5 # $i
addu $e,$K
@@ -203,6 +277,7 @@ $code.=<<___ if ($i==79);
addu $e,@X[$i%16]
or $b,$t2
addu $e,$t0
+#endif
___
}
@@ -210,6 +285,22 @@ sub BODY_40_59 {
my ($i,$a,$b,$c,$d,$e)=@_;
my $j=$i+1;
$code.=<<___ if ($i<79);
+#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
+ addu $e,$K # $i
+ and $t0,$c,$d
+ xor @X[$j%16],@X[($j+2)%16]
+ rotr $t1,$a,27
+ addu $e,$t0
+ xor @X[$j%16],@X[($j+8)%16]
+ xor $t0,$c,$d
+ addu $e,$t1
+ xor @X[$j%16],@X[($j+13)%16]
+ and $t0,$b
+ addu $e,@X[$i%16]
+ rotr @X[$j%16],@X[$j%16],31
+ rotr $b,$b,2
+ addu $e,$t0
+#else
xor @X[$j%16],@X[($j+2)%16]
sll $t0,$a,5 # $i
addu $e,$K
@@ -230,6 +321,7 @@ $code.=<<___ if ($i<79);
addu $e,@X[$i%16]
or $b,$t2
addu $e,$t0
+#endif
___
}
@@ -241,6 +333,10 @@ $code=<<___;
# include <openssl/fipssyms.h>
#endif
+#if defined(__mips_smartmips) && !defined(_MIPS_ARCH_MIPS32R2)
+#define _MIPS_ARCH_MIPS32R2
+#endif
+
.text
.set noat
diff --git a/crypto/openssl/crypto/sha/asm/sha1-ppc.pl b/crypto/openssl/crypto/sha/asm/sha1-ppc.pl
index 2140dd2..df59896 100755
--- a/crypto/openssl/crypto/sha/asm/sha1-ppc.pl
+++ b/crypto/openssl/crypto/sha/asm/sha1-ppc.pl
@@ -9,8 +9,7 @@
# I let hardware handle unaligned input(*), except on page boundaries
# (see below for details). Otherwise straightforward implementation
-# with X vector in register bank. The module is big-endian [which is
-# not big deal as there're no little-endian targets left around].
+# with X vector in register bank.
#
# (*) this means that this module is inappropriate for PPC403? Does
# anybody know if pre-POWER3 can sustain unaligned load?
@@ -38,6 +37,10 @@ if ($flavour =~ /64/) {
$PUSH ="stw";
} else { die "nonsense $flavour"; }
+# Define endianess based on flavour
+# i.e.: linux64le
+$LITTLE_ENDIAN = ($flavour=~/le$/) ? $SIZE_T : 0;
+
$0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1;
( $xlate="${dir}ppc-xlate.pl" and -f $xlate ) or
( $xlate="${dir}../../perlasm/ppc-xlate.pl" and -f $xlate) or
@@ -68,14 +71,28 @@ $T ="r12";
@X=("r16","r17","r18","r19","r20","r21","r22","r23",
"r24","r25","r26","r27","r28","r29","r30","r31");
+sub loadbe {
+my ($dst, $src, $temp_reg) = @_;
+$code.=<<___ if (!$LITTLE_ENDIAN);
+ lwz $dst,$src
+___
+$code.=<<___ if ($LITTLE_ENDIAN);
+ lwz $temp_reg,$src
+ rotlwi $dst,$temp_reg,8
+ rlwimi $dst,$temp_reg,24,0,7
+ rlwimi $dst,$temp_reg,24,16,23
+___
+}
+
sub BODY_00_19 {
my ($i,$a,$b,$c,$d,$e,$f)=@_;
my $j=$i+1;
-$code.=<<___ if ($i==0);
- lwz @X[$i],`$i*4`($inp)
-___
+
+ # Since the last value of $f is discarded, we can use
+ # it as a temp reg to swap byte-order when needed.
+ loadbe("@X[$i]","`$i*4`($inp)",$f) if ($i==0);
+ loadbe("@X[$j]","`$j*4`($inp)",$f) if ($i<15);
$code.=<<___ if ($i<15);
- lwz @X[$j],`$j*4`($inp)
add $f,$K,$e
rotlwi $e,$a,5
add $f,$f,@X[$i]
@@ -108,31 +125,31 @@ my ($i,$a,$b,$c,$d,$e,$f)=@_;
my $j=$i+1;
$code.=<<___ if ($i<79);
add $f,$K,$e
+ xor $t0,$b,$d
rotlwi $e,$a,5
xor @X[$j%16],@X[$j%16],@X[($j+2)%16]
add $f,$f,@X[$i%16]
- xor $t0,$b,$c
+ xor $t0,$t0,$c
xor @X[$j%16],@X[$j%16],@X[($j+8)%16]
- add $f,$f,$e
+ add $f,$f,$t0
rotlwi $b,$b,30
- xor $t0,$t0,$d
xor @X[$j%16],@X[$j%16],@X[($j+13)%16]
- add $f,$f,$t0
+ add $f,$f,$e
rotlwi @X[$j%16],@X[$j%16],1
___
$code.=<<___ if ($i==79);
add $f,$K,$e
+ xor $t0,$b,$d
rotlwi $e,$a,5
lwz r16,0($ctx)
add $f,$f,@X[$i%16]
- xor $t0,$b,$c
+ xor $t0,$t0,$c
lwz r17,4($ctx)
- add $f,$f,$e
+ add $f,$f,$t0
rotlwi $b,$b,30
lwz r18,8($ctx)
- xor $t0,$t0,$d
lwz r19,12($ctx)
- add $f,$f,$t0
+ add $f,$f,$e
lwz r20,16($ctx)
___
}
@@ -316,6 +333,7 @@ $code.=<<___;
blr
.long 0
.byte 0,12,0x14,0,0,0,0,0
+.size .sha1_block_data_order,.-.sha1_block_data_order
___
$code.=<<___;
.asciz "SHA1 block transform for PPC, CRYPTOGAMS by <appro\@fy.chalmers.se>"
diff --git a/crypto/openssl/crypto/sha/asm/sha1-sparcv9.pl b/crypto/openssl/crypto/sha/asm/sha1-sparcv9.pl
index 5c161ce..b5efcde 100755
--- a/crypto/openssl/crypto/sha/asm/sha1-sparcv9.pl
+++ b/crypto/openssl/crypto/sha/asm/sha1-sparcv9.pl
@@ -5,6 +5,8 @@
# project. The module is, however, dual licensed under OpenSSL and
# CRYPTOGAMS licenses depending on where you obtain it. For further
# details see http://www.openssl.org/~appro/cryptogams/.
+#
+# Hardware SPARC T4 support by David S. Miller <davem@davemloft.net>.
# ====================================================================
# Performance improvement is not really impressive on pre-T1 CPU: +8%
@@ -18,10 +20,10 @@
# ensure scalability on UltraSPARC T1, or rather to avoid decay when
# amount of active threads exceeds the number of physical cores.
-$bits=32;
-for (@ARGV) { $bits=64 if (/\-m64/ || /\-xarch\=v9/); }
-if ($bits==64) { $bias=2047; $frame=192; }
-else { $bias=0; $frame=112; }
+# SPARC T4 SHA1 hardware achieves 3.72 cycles per byte, which is 3.1x
+# faster than software. Multi-process benchmark saturates at 11x
+# single-process result on 8-core processor, or ~9GBps per 2.85GHz
+# socket.
$output=shift;
open STDOUT,">$output";
@@ -178,17 +180,102 @@ $code.=<<___;
___
}
-$code.=<<___ if ($bits==64);
+$code.=<<___;
+#include "sparc_arch.h"
+
+#ifdef __arch64__
.register %g2,#scratch
.register %g3,#scratch
-___
-$code.=<<___;
+#endif
+
.section ".text",#alloc,#execinstr
+#ifdef __PIC__
+SPARC_PIC_THUNK(%g1)
+#endif
+
.align 32
.globl sha1_block_data_order
sha1_block_data_order:
- save %sp,-$frame,%sp
+ SPARC_LOAD_ADDRESS_LEAF(OPENSSL_sparcv9cap_P,%g1,%g5)
+ ld [%g1+4],%g1 ! OPENSSL_sparcv9cap_P[1]
+
+ andcc %g1, CFR_SHA1, %g0
+ be .Lsoftware
+ nop
+
+ ld [%o0 + 0x00], %f0 ! load context
+ ld [%o0 + 0x04], %f1
+ ld [%o0 + 0x08], %f2
+ andcc %o1, 0x7, %g0
+ ld [%o0 + 0x0c], %f3
+ bne,pn %icc, .Lhwunaligned
+ ld [%o0 + 0x10], %f4
+
+.Lhw_loop:
+ ldd [%o1 + 0x00], %f8
+ ldd [%o1 + 0x08], %f10
+ ldd [%o1 + 0x10], %f12
+ ldd [%o1 + 0x18], %f14
+ ldd [%o1 + 0x20], %f16
+ ldd [%o1 + 0x28], %f18
+ ldd [%o1 + 0x30], %f20
+ subcc %o2, 1, %o2 ! done yet?
+ ldd [%o1 + 0x38], %f22
+ add %o1, 0x40, %o1
+ prefetch [%o1 + 63], 20
+
+ .word 0x81b02820 ! SHA1
+
+ bne,pt SIZE_T_CC, .Lhw_loop
+ nop
+
+.Lhwfinish:
+ st %f0, [%o0 + 0x00] ! store context
+ st %f1, [%o0 + 0x04]
+ st %f2, [%o0 + 0x08]
+ st %f3, [%o0 + 0x0c]
+ retl
+ st %f4, [%o0 + 0x10]
+
+.align 8
+.Lhwunaligned:
+ alignaddr %o1, %g0, %o1
+
+ ldd [%o1 + 0x00], %f10
+.Lhwunaligned_loop:
+ ldd [%o1 + 0x08], %f12
+ ldd [%o1 + 0x10], %f14
+ ldd [%o1 + 0x18], %f16
+ ldd [%o1 + 0x20], %f18
+ ldd [%o1 + 0x28], %f20
+ ldd [%o1 + 0x30], %f22
+ ldd [%o1 + 0x38], %f24
+ subcc %o2, 1, %o2 ! done yet?
+ ldd [%o1 + 0x40], %f26
+ add %o1, 0x40, %o1
+ prefetch [%o1 + 63], 20
+
+ faligndata %f10, %f12, %f8
+ faligndata %f12, %f14, %f10
+ faligndata %f14, %f16, %f12
+ faligndata %f16, %f18, %f14
+ faligndata %f18, %f20, %f16
+ faligndata %f20, %f22, %f18
+ faligndata %f22, %f24, %f20
+ faligndata %f24, %f26, %f22
+
+ .word 0x81b02820 ! SHA1
+
+ bne,pt SIZE_T_CC, .Lhwunaligned_loop
+ for %f26, %f26, %f10 ! %f10=%f26
+
+ ba .Lhwfinish
+ nop
+
+.align 16
+.Lsoftware:
+ save %sp,-STACK_FRAME,%sp
sllx $len,6,$len
add $inp,$len,$len
@@ -268,7 +355,7 @@ $code.=<<___;
add $E,@X[4],$E
st $E,[$ctx+16]
- bne `$bits==64?"%xcc":"%icc"`,.Lloop
+ bne SIZE_T_CC,.Lloop
andn $inp,7,$tmp0
ret
@@ -279,6 +366,62 @@ $code.=<<___;
.align 4
___
-$code =~ s/\`([^\`]*)\`/eval $1/gem;
-print $code;
+# Purpose of these subroutines is to explicitly encode VIS instructions,
+# so that one can compile the module without having to specify VIS
+# extentions on compiler command line, e.g. -xarch=v9 vs. -xarch=v9a.
+# Idea is to reserve for option to produce "universal" binary and let
+# programmer detect if current CPU is VIS capable at run-time.
+sub unvis {
+my ($mnemonic,$rs1,$rs2,$rd)=@_;
+my $ref,$opf;
+my %visopf = ( "faligndata" => 0x048,
+ "for" => 0x07c );
+
+ $ref = "$mnemonic\t$rs1,$rs2,$rd";
+
+ if ($opf=$visopf{$mnemonic}) {
+ foreach ($rs1,$rs2,$rd) {
+ return $ref if (!/%f([0-9]{1,2})/);
+ $_=$1;
+ if ($1>=32) {
+ return $ref if ($1&1);
+ # re-encode for upper double register addressing
+ $_=($1|$1>>5)&31;
+ }
+ }
+
+ return sprintf ".word\t0x%08x !%s",
+ 0x81b00000|$rd<<25|$rs1<<14|$opf<<5|$rs2,
+ $ref;
+ } else {
+ return $ref;
+ }
+}
+sub unalignaddr {
+my ($mnemonic,$rs1,$rs2,$rd)=@_;
+my %bias = ( "g" => 0, "o" => 8, "l" => 16, "i" => 24 );
+my $ref="$mnemonic\t$rs1,$rs2,$rd";
+
+ foreach ($rs1,$rs2,$rd) {
+ if (/%([goli])([0-7])/) { $_=$bias{$1}+$2; }
+ else { return $ref; }
+ }
+ return sprintf ".word\t0x%08x !%s",
+ 0x81b00300|$rd<<25|$rs1<<14|$rs2,
+ $ref;
+}
+
+foreach (split("\n",$code)) {
+ s/\`([^\`]*)\`/eval $1/ge;
+
+ s/\b(f[^\s]*)\s+(%f[0-9]{1,2}),\s*(%f[0-9]{1,2}),\s*(%f[0-9]{1,2})/
+ &unvis($1,$2,$3,$4)
+ /ge;
+ s/\b(alignaddr)\s+(%[goli][0-7]),\s*(%[goli][0-7]),\s*(%[goli][0-7])/
+ &unalignaddr($1,$2,$3,$4)
+ /ge;
+
+ print $_,"\n";
+}
+
close STDOUT;
diff --git a/crypto/openssl/crypto/sha/asm/sha1-x86_64.pl b/crypto/openssl/crypto/sha/asm/sha1-x86_64.pl
index f15c7ec..9bb6b49 100755
--- a/crypto/openssl/crypto/sha/asm/sha1-x86_64.pl
+++ b/crypto/openssl/crypto/sha/asm/sha1-x86_64.pl
@@ -1,7 +1,7 @@
#!/usr/bin/env perl
#
# ====================================================================
-# Written by Andy Polyakov <appro@fy.chalmers.se> for the OpenSSL
+# Written by Andy Polyakov <appro@openssl.org> for the OpenSSL
# project. The module is, however, dual licensed under OpenSSL and
# CRYPTOGAMS licenses depending on where you obtain it. For further
# details see http://www.openssl.org/~appro/cryptogams/.
@@ -49,17 +49,37 @@
#
# Add AVX code path. See sha1-586.pl for further information.
+# May 2013.
+#
+# Add AVX2+BMI code path. Initial attempt (utilizing BMI instructions
+# and loading pair of consecutive blocks to 256-bit %ymm registers)
+# did not provide impressive performance improvement till a crucial
+# hint regarding the number of Xupdate iterations to pre-compute in
+# advance was provided by Ilya Albrekht of Intel Corp.
+
+# March 2014.
+#
+# Add support for Intel SHA Extensions.
+
######################################################################
# Current performance is summarized in following table. Numbers are
# CPU clock cycles spent to process single byte (less is better).
#
-# x86_64 SSSE3 AVX
-# P4 9.8 -
-# Opteron 6.6 -
-# Core2 6.7 6.1/+10% -
-# Atom 11.0 9.7/+13% -
-# Westmere 7.1 5.6/+27% -
-# Sandy Bridge 7.9 6.3/+25% 5.2/+51%
+# x86_64 SSSE3 AVX[2]
+# P4 9.05 -
+# Opteron 6.26 -
+# Core2 6.55 6.05/+8% -
+# Westmere 6.73 5.30/+27% -
+# Sandy Bridge 7.70 6.10/+26% 4.99/+54%
+# Ivy Bridge 6.06 4.67/+30% 4.60/+32%
+# Haswell 5.45 4.15/+31% 3.57/+53%
+# Bulldozer 9.11 5.95/+53%
+# VIA Nano 9.32 7.15/+30%
+# Atom 10.3 9.17/+12%
+# Silvermont 13.1(*) 9.37/+40%
+#
+# (*) obviously suboptimal result, nothing was done about it,
+# because SSSE3 code is compiled unconditionally;
$flavour = shift;
$output = shift;
@@ -72,15 +92,27 @@ $0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1;
( $xlate="${dir}../../perlasm/x86_64-xlate.pl" and -f $xlate) or
die "can't locate x86_64-xlate.pl";
-$avx=1 if (`$ENV{CC} -Wa,-v -c -o /dev/null -x assembler /dev/null 2>&1`
- =~ /GNU assembler version ([2-9]\.[0-9]+)/ &&
- $1>=2.19);
-$avx=1 if (!$avx && $win64 && ($flavour =~ /nasm/ || $ENV{ASM} =~ /nasm/) &&
- `nasm -v 2>&1` =~ /NASM version ([2-9]\.[0-9]+)/ &&
- $1>=2.09);
-$avx=1 if (!$avx && $win64 && ($flavour =~ /masm/ || $ENV{ASM} =~ /ml64/) &&
- `ml64 2>&1` =~ /Version ([0-9]+)\./ &&
- $1>=10);
+if (`$ENV{CC} -Wa,-v -c -o /dev/null -x assembler /dev/null 2>&1`
+ =~ /GNU assembler version ([2-9]\.[0-9]+)/) {
+ $avx = ($1>=2.19) + ($1>=2.22);
+}
+
+if (!$avx && $win64 && ($flavour =~ /nasm/ || $ENV{ASM} =~ /nasm/) &&
+ `nasm -v 2>&1` =~ /NASM version ([2-9]\.[0-9]+)/) {
+ $avx = ($1>=2.09) + ($1>=2.10);
+}
+
+if (!$avx && $win64 && ($flavour =~ /masm/ || $ENV{ASM} =~ /ml64/) &&
+ `ml64 2>&1` =~ /Version ([0-9]+)\./) {
+ $avx = ($1>=10) + ($1>=11);
+}
+
+if (!$avx && `$ENV{CC} -v 2>&1` =~ /(^clang version|based on LLVM) ([2-9]\.[0-9]+)/) {
+ $avx = ($2>=3.0) + ($2>3.0);
+}
+
+$shaext=1; ### set to zero if compiling for 1.0.1
+$avx=1 if (!$shaext && $avx);
open OUT,"| \"$^X\" $xlate $flavour $output";
*STDOUT=*OUT;
@@ -97,7 +129,7 @@ $num="%r10";
$t0="%eax";
$t1="%ebx";
$t2="%ecx";
-@xi=("%edx","%ebp");
+@xi=("%edx","%ebp","%r14d");
$A="%esi";
$B="%edi";
$C="%r11d";
@@ -112,42 +144,40 @@ my $j=$i+1;
$code.=<<___ if ($i==0);
mov `4*$i`($inp),$xi[0]
bswap $xi[0]
- mov $xi[0],`4*$i`(%rsp)
___
$code.=<<___ if ($i<15);
- mov $c,$t0
mov `4*$j`($inp),$xi[1]
+ mov $d,$t0
+ mov $xi[0],`4*$i`(%rsp)
mov $a,$t2
- xor $d,$t0
bswap $xi[1]
+ xor $c,$t0
rol \$5,$t2
- lea 0x5a827999($xi[0],$e),$e
and $b,$t0
- mov $xi[1],`4*$j`(%rsp)
+ lea 0x5a827999($xi[0],$e),$e
add $t2,$e
xor $d,$t0
rol \$30,$b
add $t0,$e
___
$code.=<<___ if ($i>=15);
- mov `4*($j%16)`(%rsp),$xi[1]
- mov $c,$t0
+ xor `4*($j%16)`(%rsp),$xi[1]
+ mov $d,$t0
+ mov $xi[0],`4*($i%16)`(%rsp)
mov $a,$t2
xor `4*(($j+2)%16)`(%rsp),$xi[1]
- xor $d,$t0
+ xor $c,$t0
rol \$5,$t2
xor `4*(($j+8)%16)`(%rsp),$xi[1]
and $b,$t0
lea 0x5a827999($xi[0],$e),$e
- xor `4*(($j+13)%16)`(%rsp),$xi[1]
+ rol \$30,$b
xor $d,$t0
- rol \$1,$xi[1]
add $t2,$e
- rol \$30,$b
- mov $xi[1],`4*($j%16)`(%rsp)
+ rol \$1,$xi[1]
add $t0,$e
___
-unshift(@xi,pop(@xi));
+push(@xi,shift(@xi));
}
sub BODY_20_39 {
@@ -155,62 +185,58 @@ my ($i,$a,$b,$c,$d,$e)=@_;
my $j=$i+1;
my $K=($i<40)?0x6ed9eba1:0xca62c1d6;
$code.=<<___ if ($i<79);
- mov `4*($j%16)`(%rsp),$xi[1]
- mov $c,$t0
+ xor `4*($j%16)`(%rsp),$xi[1]
+ mov $b,$t0
+ `"mov $xi[0],".4*($i%16)."(%rsp)" if ($i<72)`
mov $a,$t2
xor `4*(($j+2)%16)`(%rsp),$xi[1]
- xor $b,$t0
+ xor $d,$t0
rol \$5,$t2
- lea $K($xi[0],$e),$e
xor `4*(($j+8)%16)`(%rsp),$xi[1]
- xor $d,$t0
+ lea $K($xi[0],$e),$e
+ xor $c,$t0
add $t2,$e
- xor `4*(($j+13)%16)`(%rsp),$xi[1]
rol \$30,$b
add $t0,$e
rol \$1,$xi[1]
___
-$code.=<<___ if ($i<76);
- mov $xi[1],`4*($j%16)`(%rsp)
-___
$code.=<<___ if ($i==79);
- mov $c,$t0
+ mov $b,$t0
mov $a,$t2
- xor $b,$t0
+ xor $d,$t0
lea $K($xi[0],$e),$e
rol \$5,$t2
- xor $d,$t0
+ xor $c,$t0
add $t2,$e
rol \$30,$b
add $t0,$e
___
-unshift(@xi,pop(@xi));
+push(@xi,shift(@xi));
}
sub BODY_40_59 {
my ($i,$a,$b,$c,$d,$e)=@_;
my $j=$i+1;
$code.=<<___;
- mov `4*($j%16)`(%rsp),$xi[1]
- mov $c,$t0
- mov $c,$t1
+ xor `4*($j%16)`(%rsp),$xi[1]
+ mov $d,$t0
+ mov $xi[0],`4*($i%16)`(%rsp)
+ mov $d,$t1
xor `4*(($j+2)%16)`(%rsp),$xi[1]
- and $d,$t0
+ and $c,$t0
mov $a,$t2
xor `4*(($j+8)%16)`(%rsp),$xi[1]
- xor $d,$t1
lea 0x8f1bbcdc($xi[0],$e),$e
+ xor $c,$t1
rol \$5,$t2
- xor `4*(($j+13)%16)`(%rsp),$xi[1]
add $t0,$e
- and $b,$t1
rol \$1,$xi[1]
- add $t1,$e
- rol \$30,$b
- mov $xi[1],`4*($j%16)`(%rsp)
+ and $b,$t1
add $t2,$e
+ rol \$30,$b
+ add $t1,$e
___
-unshift(@xi,pop(@xi));
+push(@xi,shift(@xi));
}
$code.=<<___;
@@ -223,9 +249,19 @@ $code.=<<___;
sha1_block_data_order:
mov OPENSSL_ia32cap_P+0(%rip),%r9d
mov OPENSSL_ia32cap_P+4(%rip),%r8d
+ mov OPENSSL_ia32cap_P+8(%rip),%r10d
test \$`1<<9`,%r8d # check SSSE3 bit
jz .Lialu
___
+$code.=<<___ if ($shaext);
+ test \$`1<<29`,%r10d # check SHA bit
+ jnz _shaext_shortcut
+___
+$code.=<<___ if ($avx>1);
+ and \$`1<<3|1<<5|1<<8`,%r10d # check AVX2+BMI1+BMI2
+ cmp \$`1<<3|1<<5|1<<8`,%r10d
+ je _avx2_shortcut
+___
$code.=<<___ if ($avx);
and \$`1<<28`,%r8d # mask AVX bit
and \$`1<<30`,%r9d # mask "Intel CPU" bit
@@ -238,17 +274,18 @@ $code.=<<___;
.align 16
.Lialu:
+ mov %rsp,%rax
push %rbx
push %rbp
push %r12
push %r13
- mov %rsp,%r11
+ push %r14
mov %rdi,$ctx # reassigned argument
sub \$`8+16*4`,%rsp
mov %rsi,$inp # reassigned argument
and \$-64,%rsp
mov %rdx,$num # reassigned argument
- mov %r11,`16*4`(%rsp)
+ mov %rax,`16*4`(%rsp)
.Lprologue:
mov 0($ctx),$A
@@ -282,53 +319,187 @@ $code.=<<___;
jnz .Lloop
mov `16*4`(%rsp),%rsi
- mov (%rsi),%r13
- mov 8(%rsi),%r12
- mov 16(%rsi),%rbp
- mov 24(%rsi),%rbx
- lea 32(%rsi),%rsp
+ mov -40(%rsi),%r14
+ mov -32(%rsi),%r13
+ mov -24(%rsi),%r12
+ mov -16(%rsi),%rbp
+ mov -8(%rsi),%rbx
+ lea (%rsi),%rsp
.Lepilogue:
ret
.size sha1_block_data_order,.-sha1_block_data_order
___
+if ($shaext) {{{
+######################################################################
+# Intel SHA Extensions implementation of SHA1 update function.
+#
+my ($ctx,$inp,$num)=("%rdi","%rsi","%rdx");
+my ($ABCD,$E,$E_,$BSWAP,$ABCD_SAVE,$E_SAVE)=map("%xmm$_",(0..3,8,9));
+my @MSG=map("%xmm$_",(4..7));
+
+$code.=<<___;
+.type sha1_block_data_order_shaext,\@function,3
+.align 32
+sha1_block_data_order_shaext:
+_shaext_shortcut:
+___
+$code.=<<___ if ($win64);
+ lea `-8-4*16`(%rsp),%rsp
+ movaps %xmm6,-8-4*16(%rax)
+ movaps %xmm7,-8-3*16(%rax)
+ movaps %xmm8,-8-2*16(%rax)
+ movaps %xmm9,-8-1*16(%rax)
+.Lprologue_shaext:
+___
+$code.=<<___;
+ movdqu ($ctx),$ABCD
+ movd 16($ctx),$E
+ movdqa K_XX_XX+0xa0(%rip),$BSWAP # byte-n-word swap
+
+ movdqu ($inp),@MSG[0]
+ pshufd \$0b00011011,$ABCD,$ABCD # flip word order
+ movdqu 0x10($inp),@MSG[1]
+ pshufd \$0b00011011,$E,$E # flip word order
+ movdqu 0x20($inp),@MSG[2]
+ pshufb $BSWAP,@MSG[0]
+ movdqu 0x30($inp),@MSG[3]
+ pshufb $BSWAP,@MSG[1]
+ pshufb $BSWAP,@MSG[2]
+ movdqa $E,$E_SAVE # offload $E
+ pshufb $BSWAP,@MSG[3]
+ jmp .Loop_shaext
+
+.align 16
+.Loop_shaext:
+ dec $num
+ lea 0x40($inp),%rax # next input block
+ paddd @MSG[0],$E
+ cmovne %rax,$inp
+ movdqa $ABCD,$ABCD_SAVE # offload $ABCD
+___
+for($i=0;$i<20-4;$i+=2) {
+$code.=<<___;
+ sha1msg1 @MSG[1],@MSG[0]
+ movdqa $ABCD,$E_
+ sha1rnds4 \$`int($i/5)`,$E,$ABCD # 0-3...
+ sha1nexte @MSG[1],$E_
+ pxor @MSG[2],@MSG[0]
+ sha1msg1 @MSG[2],@MSG[1]
+ sha1msg2 @MSG[3],@MSG[0]
+
+ movdqa $ABCD,$E
+ sha1rnds4 \$`int(($i+1)/5)`,$E_,$ABCD
+ sha1nexte @MSG[2],$E
+ pxor @MSG[3],@MSG[1]
+ sha1msg2 @MSG[0],@MSG[1]
+___
+ push(@MSG,shift(@MSG)); push(@MSG,shift(@MSG));
+}
+$code.=<<___;
+ movdqu ($inp),@MSG[0]
+ movdqa $ABCD,$E_
+ sha1rnds4 \$3,$E,$ABCD # 64-67
+ sha1nexte @MSG[1],$E_
+ movdqu 0x10($inp),@MSG[1]
+ pshufb $BSWAP,@MSG[0]
+
+ movdqa $ABCD,$E
+ sha1rnds4 \$3,$E_,$ABCD # 68-71
+ sha1nexte @MSG[2],$E
+ movdqu 0x20($inp),@MSG[2]
+ pshufb $BSWAP,@MSG[1]
+
+ movdqa $ABCD,$E_
+ sha1rnds4 \$3,$E,$ABCD # 72-75
+ sha1nexte @MSG[3],$E_
+ movdqu 0x30($inp),@MSG[3]
+ pshufb $BSWAP,@MSG[2]
+
+ movdqa $ABCD,$E
+ sha1rnds4 \$3,$E_,$ABCD # 76-79
+ sha1nexte $E_SAVE,$E
+ pshufb $BSWAP,@MSG[3]
+
+ paddd $ABCD_SAVE,$ABCD
+ movdqa $E,$E_SAVE # offload $E
+
+ jnz .Loop_shaext
+
+ pshufd \$0b00011011,$ABCD,$ABCD
+ pshufd \$0b00011011,$E,$E
+ movdqu $ABCD,($ctx)
+ movd $E,16($ctx)
+___
+$code.=<<___ if ($win64);
+ movaps -8-4*16(%rax),%xmm6
+ movaps -8-3*16(%rax),%xmm7
+ movaps -8-2*16(%rax),%xmm8
+ movaps -8-1*16(%rax),%xmm9
+ mov %rax,%rsp
+.Lepilogue_shaext:
+___
+$code.=<<___;
+ ret
+.size sha1_block_data_order_shaext,.-sha1_block_data_order_shaext
+___
+}}}
{{{
my $Xi=4;
my @X=map("%xmm$_",(4..7,0..3));
my @Tx=map("%xmm$_",(8..10));
+my $Kx="%xmm11";
my @V=($A,$B,$C,$D,$E)=("%eax","%ebx","%ecx","%edx","%ebp"); # size optimization
my @T=("%esi","%edi");
my $j=0;
+my $rx=0;
my $K_XX_XX="%r11";
my $_rol=sub { &rol(@_) };
my $_ror=sub { &ror(@_) };
+{ my $sn;
+sub align32() {
+ ++$sn;
+$code.=<<___;
+ jmp .Lalign32_$sn # see "Decoded ICache" in manual
+.align 32
+.Lalign32_$sn:
+___
+}
+}
+
$code.=<<___;
.type sha1_block_data_order_ssse3,\@function,3
.align 16
sha1_block_data_order_ssse3:
_ssse3_shortcut:
+ mov %rsp,%rax
push %rbx
push %rbp
push %r12
- lea `-64-($win64?5*16:0)`(%rsp),%rsp
+ push %r13 # redundant, done to share Win64 SE handler
+ push %r14
+ lea `-64-($win64?6*16:0)`(%rsp),%rsp
___
$code.=<<___ if ($win64);
- movaps %xmm6,64+0(%rsp)
- movaps %xmm7,64+16(%rsp)
- movaps %xmm8,64+32(%rsp)
- movaps %xmm9,64+48(%rsp)
- movaps %xmm10,64+64(%rsp)
+ movaps %xmm6,-40-6*16(%rax)
+ movaps %xmm7,-40-5*16(%rax)
+ movaps %xmm8,-40-4*16(%rax)
+ movaps %xmm9,-40-3*16(%rax)
+ movaps %xmm10,-40-2*16(%rax)
+ movaps %xmm11,-40-1*16(%rax)
.Lprologue_ssse3:
___
$code.=<<___;
+ mov %rax,%r14 # original %rsp
+ and \$-64,%rsp
mov %rdi,$ctx # reassigned argument
mov %rsi,$inp # reassigned argument
mov %rdx,$num # reassigned argument
shl \$6,$num
add $inp,$num
- lea K_XX_XX(%rip),$K_XX_XX
+ lea K_XX_XX+64(%rip),$K_XX_XX
mov 0($ctx),$A # load context
mov 4($ctx),$B
@@ -336,19 +507,22 @@ $code.=<<___;
mov 12($ctx),$D
mov $B,@T[0] # magic seed
mov 16($ctx),$E
+ mov $C,@T[1]
+ xor $D,@T[1]
+ and @T[1],@T[0]
movdqa 64($K_XX_XX),@X[2] # pbswap mask
- movdqa 0($K_XX_XX),@Tx[1] # K_00_19
+ movdqa -64($K_XX_XX),@Tx[1] # K_00_19
movdqu 0($inp),@X[-4&7] # load input to %xmm[0-3]
movdqu 16($inp),@X[-3&7]
movdqu 32($inp),@X[-2&7]
movdqu 48($inp),@X[-1&7]
pshufb @X[2],@X[-4&7] # byte swap
- add \$64,$inp
pshufb @X[2],@X[-3&7]
pshufb @X[2],@X[-2&7]
- pshufb @X[2],@X[-1&7]
+ add \$64,$inp
paddd @Tx[1],@X[-4&7] # add K_00_19
+ pshufb @X[2],@X[-1&7]
paddd @Tx[1],@X[-3&7]
paddd @Tx[1],@X[-2&7]
movdqa @X[-4&7],0(%rsp) # X[]+K xfer to IALU
@@ -373,61 +547,61 @@ sub Xupdate_ssse3_16_31() # recall that $Xi starts wtih 4
my @insns = (&$body,&$body,&$body,&$body); # 40 instructions
my ($a,$b,$c,$d,$e);
- &movdqa (@X[0],@X[-3&7]);
- eval(shift(@insns));
+ eval(shift(@insns)); # ror
+ &pshufd (@X[0],@X[-4&7],0xee); # was &movdqa (@X[0],@X[-3&7]);
eval(shift(@insns));
&movdqa (@Tx[0],@X[-1&7]);
- &palignr(@X[0],@X[-4&7],8); # compose "X[-14]" in "X[0]"
+ &paddd (@Tx[1],@X[-1&7]);
eval(shift(@insns));
eval(shift(@insns));
- &paddd (@Tx[1],@X[-1&7]);
+ &punpcklqdq(@X[0],@X[-3&7]); # compose "X[-14]" in "X[0]", was &palignr(@X[0],@X[-4&7],8);
eval(shift(@insns));
+ eval(shift(@insns)); # rol
eval(shift(@insns));
&psrldq (@Tx[0],4); # "X[-3]", 3 dwords
eval(shift(@insns));
eval(shift(@insns));
+
&pxor (@X[0],@X[-4&7]); # "X[0]"^="X[-16]"
eval(shift(@insns));
- eval(shift(@insns));
-
+ eval(shift(@insns)); # ror
&pxor (@Tx[0],@X[-2&7]); # "X[-3]"^"X[-8]"
eval(shift(@insns));
eval(shift(@insns));
eval(shift(@insns));
- eval(shift(@insns));
&pxor (@X[0],@Tx[0]); # "X[0]"^="X[-3]"^"X[-8]"
eval(shift(@insns));
- eval(shift(@insns));
+ eval(shift(@insns)); # rol
&movdqa (eval(16*(($Xi-1)&3))."(%rsp)",@Tx[1]); # X[]+K xfer to IALU
eval(shift(@insns));
eval(shift(@insns));
&movdqa (@Tx[2],@X[0]);
- &movdqa (@Tx[0],@X[0]);
- eval(shift(@insns));
eval(shift(@insns));
eval(shift(@insns));
+ eval(shift(@insns)); # ror
+ &movdqa (@Tx[0],@X[0]);
eval(shift(@insns));
&pslldq (@Tx[2],12); # "X[0]"<<96, extract one dword
&paddd (@X[0],@X[0]);
eval(shift(@insns));
eval(shift(@insns));
- eval(shift(@insns));
- eval(shift(@insns));
&psrld (@Tx[0],31);
eval(shift(@insns));
+ eval(shift(@insns)); # rol
eval(shift(@insns));
&movdqa (@Tx[1],@Tx[2]);
eval(shift(@insns));
eval(shift(@insns));
&psrld (@Tx[2],30);
- &por (@X[0],@Tx[0]); # "X[0]"<<<=1
eval(shift(@insns));
+ eval(shift(@insns)); # ror
+ &por (@X[0],@Tx[0]); # "X[0]"<<<=1
eval(shift(@insns));
eval(shift(@insns));
eval(shift(@insns));
@@ -435,12 +609,13 @@ sub Xupdate_ssse3_16_31() # recall that $Xi starts wtih 4
&pslld (@Tx[1],2);
&pxor (@X[0],@Tx[2]);
eval(shift(@insns));
- eval(shift(@insns));
- &movdqa (@Tx[2],eval(16*(($Xi)/5))."($K_XX_XX)"); # K_XX_XX
+ &movdqa (@Tx[2],eval(2*16*(($Xi)/5)-64)."($K_XX_XX)"); # K_XX_XX
+ eval(shift(@insns)); # rol
eval(shift(@insns));
eval(shift(@insns));
&pxor (@X[0],@Tx[1]); # "X[0]"^=("X[0]">>96)<<<2
+ &pshufd (@Tx[1],@X[-1&7],0xee) if ($Xi==7); # was &movdqa (@Tx[0],@X[-1&7]) in Xupdate_ssse3_32_79
foreach (@insns) { eval; } # remaining instructions [if any]
@@ -451,27 +626,30 @@ sub Xupdate_ssse3_16_31() # recall that $Xi starts wtih 4
sub Xupdate_ssse3_32_79()
{ use integer;
my $body = shift;
- my @insns = (&$body,&$body,&$body,&$body); # 32 to 48 instructions
+ my @insns = (&$body,&$body,&$body,&$body); # 32 to 44 instructions
my ($a,$b,$c,$d,$e);
- &movdqa (@Tx[0],@X[-1&7]) if ($Xi==8);
- eval(shift(@insns)); # body_20_39
+ eval(shift(@insns)) if ($Xi==8);
&pxor (@X[0],@X[-4&7]); # "X[0]"="X[-32]"^"X[-16]"
- &palignr(@Tx[0],@X[-2&7],8); # compose "X[-6]"
+ eval(shift(@insns)) if ($Xi==8);
+ eval(shift(@insns)); # body_20_39
eval(shift(@insns));
+ eval(shift(@insns)) if (@insns[1] =~ /_ror/);
+ eval(shift(@insns)) if (@insns[0] =~ /_ror/);
+ &punpcklqdq(@Tx[0],@X[-1&7]); # compose "X[-6]", was &palignr(@Tx[0],@X[-2&7],8);
eval(shift(@insns));
eval(shift(@insns)); # rol
&pxor (@X[0],@X[-7&7]); # "X[0]"^="X[-28]"
eval(shift(@insns));
- eval(shift(@insns)) if (@insns[0] !~ /&ro[rl]/);
+ eval(shift(@insns));
if ($Xi%5) {
&movdqa (@Tx[2],@Tx[1]);# "perpetuate" K_XX_XX...
} else { # ... or load next one
- &movdqa (@Tx[2],eval(16*($Xi/5))."($K_XX_XX)");
+ &movdqa (@Tx[2],eval(2*16*($Xi/5)-64)."($K_XX_XX)");
}
- &paddd (@Tx[1],@X[-1&7]);
eval(shift(@insns)); # ror
+ &paddd (@Tx[1],@X[-1&7]);
eval(shift(@insns));
&pxor (@X[0],@Tx[0]); # "X[0]"^="X[-6]"
@@ -479,29 +657,31 @@ sub Xupdate_ssse3_32_79()
eval(shift(@insns));
eval(shift(@insns));
eval(shift(@insns)); # rol
+ eval(shift(@insns)) if (@insns[0] =~ /_ror/);
&movdqa (@Tx[0],@X[0]);
- &movdqa (eval(16*(($Xi-1)&3))."(%rsp)",@Tx[1]); # X[]+K xfer to IALU
eval(shift(@insns));
eval(shift(@insns));
+ &movdqa (eval(16*(($Xi-1)&3))."(%rsp)",@Tx[1]); # X[]+K xfer to IALU
eval(shift(@insns)); # ror
eval(shift(@insns));
+ eval(shift(@insns)); # body_20_39
&pslld (@X[0],2);
- eval(shift(@insns)); # body_20_39
eval(shift(@insns));
- &psrld (@Tx[0],30);
eval(shift(@insns));
- eval(shift(@insns)); # rol
+ &psrld (@Tx[0],30);
+ eval(shift(@insns)) if (@insns[0] =~ /_rol/);# rol
eval(shift(@insns));
eval(shift(@insns));
eval(shift(@insns)); # ror
- eval(shift(@insns));
&por (@X[0],@Tx[0]); # "X[0]"<<<=2
- eval(shift(@insns)); # body_20_39
eval(shift(@insns));
- &movdqa (@Tx[1],@X[0]) if ($Xi<19);
+ eval(shift(@insns)); # body_20_39
+ eval(shift(@insns)) if (@insns[1] =~ /_rol/);
+ eval(shift(@insns)) if (@insns[0] =~ /_rol/);
+ &pshufd(@Tx[1],@X[-1&7],0xee) if ($Xi<19); # was &movdqa (@Tx[1],@X[0])
eval(shift(@insns));
eval(shift(@insns)); # rol
eval(shift(@insns));
@@ -522,10 +702,11 @@ sub Xuplast_ssse3_80()
my ($a,$b,$c,$d,$e);
eval(shift(@insns));
- &paddd (@Tx[1],@X[-1&7]);
eval(shift(@insns));
eval(shift(@insns));
eval(shift(@insns));
+ &paddd (@Tx[1],@X[-1&7]);
+ eval(shift(@insns));
eval(shift(@insns));
&movdqa (eval(16*(($Xi-1)&3))."(%rsp)",@Tx[1]); # X[]+K xfer IALU
@@ -538,7 +719,7 @@ sub Xuplast_ssse3_80()
unshift(@Tx,pop(@Tx));
&movdqa (@X[2],"64($K_XX_XX)"); # pbswap mask
- &movdqa (@Tx[1],"0($K_XX_XX)"); # K_00_19
+ &movdqa (@Tx[1],"-64($K_XX_XX)"); # K_00_19
&movdqu (@X[-4&7],"0($inp)"); # load input
&movdqu (@X[-3&7],"16($inp)");
&movdqu (@X[-2&7],"32($inp)");
@@ -557,9 +738,12 @@ sub Xloop_ssse3()
eval(shift(@insns));
eval(shift(@insns));
+ eval(shift(@insns));
&pshufb (@X[($Xi-3)&7],@X[2]);
eval(shift(@insns));
eval(shift(@insns));
+ eval(shift(@insns));
+ eval(shift(@insns));
&paddd (@X[($Xi-4)&7],@Tx[1]);
eval(shift(@insns));
eval(shift(@insns));
@@ -568,6 +752,8 @@ sub Xloop_ssse3()
&movdqa (eval(16*$Xi)."(%rsp)",@X[($Xi-4)&7]); # X[]+K xfer to IALU
eval(shift(@insns));
eval(shift(@insns));
+ eval(shift(@insns));
+ eval(shift(@insns));
&psubd (@X[($Xi-4)&7],@Tx[1]);
foreach (@insns) { eval; }
@@ -583,51 +769,66 @@ sub Xtail_ssse3()
foreach (@insns) { eval; }
}
-sub body_00_19 () {
+sub body_00_19 () { # ((c^d)&b)^d
+ # on start @T[0]=(c^d)&b
+ return &body_20_39() if ($rx==19); $rx++;
(
'($a,$b,$c,$d,$e)=@V;'.
- '&add ($e,eval(4*($j&15))."(%rsp)");', # X[]+K xfer
- '&xor ($c,$d);',
- '&mov (@T[1],$a);', # $b in next round
- '&$_rol ($a,5);',
- '&and (@T[0],$c);', # ($b&($c^$d))
- '&xor ($c,$d);', # restore $c
- '&xor (@T[0],$d);',
- '&add ($e,$a);',
- '&$_ror ($b,$j?7:2);', # $b>>>2
- '&add ($e,@T[0]);' .'$j++; unshift(@V,pop(@V)); unshift(@T,pop(@T));'
+ '&$_ror ($b,$j?7:2)', # $b>>>2
+ '&xor (@T[0],$d)',
+ '&mov (@T[1],$a)', # $b for next round
+
+ '&add ($e,eval(4*($j&15))."(%rsp)")', # X[]+K xfer
+ '&xor ($b,$c)', # $c^$d for next round
+
+ '&$_rol ($a,5)',
+ '&add ($e,@T[0])',
+ '&and (@T[1],$b)', # ($b&($c^$d)) for next round
+
+ '&xor ($b,$c)', # restore $b
+ '&add ($e,$a);' .'$j++; unshift(@V,pop(@V)); unshift(@T,pop(@T));'
);
}
-sub body_20_39 () {
+sub body_20_39 () { # b^d^c
+ # on entry @T[0]=b^d
+ return &body_40_59() if ($rx==39); $rx++;
(
'($a,$b,$c,$d,$e)=@V;'.
- '&add ($e,eval(4*($j++&15))."(%rsp)");', # X[]+K xfer
- '&xor (@T[0],$d);', # ($b^$d)
- '&mov (@T[1],$a);', # $b in next round
- '&$_rol ($a,5);',
- '&xor (@T[0],$c);', # ($b^$d^$c)
- '&add ($e,$a);',
- '&$_ror ($b,7);', # $b>>>2
- '&add ($e,@T[0]);' .'unshift(@V,pop(@V)); unshift(@T,pop(@T));'
+ '&add ($e,eval(4*($j&15))."(%rsp)")', # X[]+K xfer
+ '&xor (@T[0],$d) if($j==19);'.
+ '&xor (@T[0],$c) if($j> 19)', # ($b^$d^$c)
+ '&mov (@T[1],$a)', # $b for next round
+
+ '&$_rol ($a,5)',
+ '&add ($e,@T[0])',
+ '&xor (@T[1],$c) if ($j< 79)', # $b^$d for next round
+
+ '&$_ror ($b,7)', # $b>>>2
+ '&add ($e,$a);' .'$j++; unshift(@V,pop(@V)); unshift(@T,pop(@T));'
);
}
-sub body_40_59 () {
+sub body_40_59 () { # ((b^c)&(c^d))^c
+ # on entry @T[0]=(b^c), (c^=d)
+ $rx++;
(
'($a,$b,$c,$d,$e)=@V;'.
- '&mov (@T[1],$c);',
- '&xor ($c,$d);',
- '&add ($e,eval(4*($j++&15))."(%rsp)");', # X[]+K xfer
- '&and (@T[1],$d);',
- '&and (@T[0],$c);', # ($b&($c^$d))
- '&$_ror ($b,7);', # $b>>>2
- '&add ($e,@T[1]);',
- '&mov (@T[1],$a);', # $b in next round
- '&$_rol ($a,5);',
- '&add ($e,@T[0]);',
- '&xor ($c,$d);', # restore $c
- '&add ($e,$a);' .'unshift(@V,pop(@V)); unshift(@T,pop(@T));'
+ '&add ($e,eval(4*($j&15))."(%rsp)")', # X[]+K xfer
+ '&and (@T[0],$c) if ($j>=40)', # (b^c)&(c^d)
+ '&xor ($c,$d) if ($j>=40)', # restore $c
+
+ '&$_ror ($b,7)', # $b>>>2
+ '&mov (@T[1],$a)', # $b for next round
+ '&xor (@T[0],$c)',
+
+ '&$_rol ($a,5)',
+ '&add ($e,@T[0])',
+ '&xor (@T[1],$c) if ($j==59);'.
+ '&xor (@T[1],$b) if ($j< 59)', # b^c for next round
+
+ '&xor ($b,$c) if ($j< 59)', # c^d for next round
+ '&add ($e,$a);' .'$j++; unshift(@V,pop(@V)); unshift(@T,pop(@T));'
);
}
$code.=<<___;
@@ -668,8 +869,11 @@ $code.=<<___;
mov @T[0],4($ctx)
mov @T[0],$B # magic seed
mov $C,8($ctx)
+ mov $C,@T[1]
mov $D,12($ctx)
+ xor $D,@T[1]
mov $E,16($ctx)
+ and @T[1],@T[0]
jmp .Loop_ssse3
.align 16
@@ -694,31 +898,34 @@ $code.=<<___;
mov $E,16($ctx)
___
$code.=<<___ if ($win64);
- movaps 64+0(%rsp),%xmm6
- movaps 64+16(%rsp),%xmm7
- movaps 64+32(%rsp),%xmm8
- movaps 64+48(%rsp),%xmm9
- movaps 64+64(%rsp),%xmm10
+ movaps -40-6*16(%r14),%xmm6
+ movaps -40-5*16(%r14),%xmm7
+ movaps -40-4*16(%r14),%xmm8
+ movaps -40-3*16(%r14),%xmm9
+ movaps -40-2*16(%r14),%xmm10
+ movaps -40-1*16(%r14),%xmm11
___
$code.=<<___;
- lea `64+($win64?5*16:0)`(%rsp),%rsi
- mov 0(%rsi),%r12
- mov 8(%rsi),%rbp
- mov 16(%rsi),%rbx
- lea 24(%rsi),%rsp
+ lea (%r14),%rsi
+ mov -40(%rsi),%r14
+ mov -32(%rsi),%r13
+ mov -24(%rsi),%r12
+ mov -16(%rsi),%rbp
+ mov -8(%rsi),%rbx
+ lea (%rsi),%rsp
.Lepilogue_ssse3:
ret
.size sha1_block_data_order_ssse3,.-sha1_block_data_order_ssse3
___
if ($avx) {
-my $Xi=4;
-my @X=map("%xmm$_",(4..7,0..3));
-my @Tx=map("%xmm$_",(8..10));
-my @V=($A,$B,$C,$D,$E)=("%eax","%ebx","%ecx","%edx","%ebp"); # size optimization
-my @T=("%esi","%edi");
-my $j=0;
-my $K_XX_XX="%r11";
+$Xi=4; # reset variables
+@X=map("%xmm$_",(4..7,0..3));
+@Tx=map("%xmm$_",(8..10));
+$j=0;
+$rx=0;
+
+my $done_avx_label=".Ldone_avx";
my $_rol=sub { &shld(@_[0],@_) };
my $_ror=sub { &shrd(@_[0],@_) };
@@ -728,28 +935,34 @@ $code.=<<___;
.align 16
sha1_block_data_order_avx:
_avx_shortcut:
+ mov %rsp,%rax
push %rbx
push %rbp
push %r12
- lea `-64-($win64?5*16:0)`(%rsp),%rsp
+ push %r13 # redundant, done to share Win64 SE handler
+ push %r14
+ lea `-64-($win64?6*16:0)`(%rsp),%rsp
+ vzeroupper
___
$code.=<<___ if ($win64);
- movaps %xmm6,64+0(%rsp)
- movaps %xmm7,64+16(%rsp)
- movaps %xmm8,64+32(%rsp)
- movaps %xmm9,64+48(%rsp)
- movaps %xmm10,64+64(%rsp)
+ vmovaps %xmm6,-40-6*16(%rax)
+ vmovaps %xmm7,-40-5*16(%rax)
+ vmovaps %xmm8,-40-4*16(%rax)
+ vmovaps %xmm9,-40-3*16(%rax)
+ vmovaps %xmm10,-40-2*16(%rax)
+ vmovaps %xmm11,-40-1*16(%rax)
.Lprologue_avx:
___
$code.=<<___;
+ mov %rax,%r14 # original %rsp
+ and \$-64,%rsp
mov %rdi,$ctx # reassigned argument
mov %rsi,$inp # reassigned argument
mov %rdx,$num # reassigned argument
- vzeroupper
shl \$6,$num
add $inp,$num
- lea K_XX_XX(%rip),$K_XX_XX
+ lea K_XX_XX+64(%rip),$K_XX_XX
mov 0($ctx),$A # load context
mov 4($ctx),$B
@@ -757,9 +970,12 @@ $code.=<<___;
mov 12($ctx),$D
mov $B,@T[0] # magic seed
mov 16($ctx),$E
+ mov $C,@T[1]
+ xor $D,@T[1]
+ and @T[1],@T[0]
vmovdqa 64($K_XX_XX),@X[2] # pbswap mask
- vmovdqa 0($K_XX_XX),@Tx[1] # K_00_19
+ vmovdqa -64($K_XX_XX),$Kx # K_00_19
vmovdqu 0($inp),@X[-4&7] # load input to %xmm[0-3]
vmovdqu 16($inp),@X[-3&7]
vmovdqu 32($inp),@X[-2&7]
@@ -769,9 +985,9 @@ $code.=<<___;
vpshufb @X[2],@X[-3&7],@X[-3&7]
vpshufb @X[2],@X[-2&7],@X[-2&7]
vpshufb @X[2],@X[-1&7],@X[-1&7]
- vpaddd @Tx[1],@X[-4&7],@X[0] # add K_00_19
- vpaddd @Tx[1],@X[-3&7],@X[1]
- vpaddd @Tx[1],@X[-2&7],@X[2]
+ vpaddd $Kx,@X[-4&7],@X[0] # add K_00_19
+ vpaddd $Kx,@X[-3&7],@X[1]
+ vpaddd $Kx,@X[-2&7],@X[2]
vmovdqa @X[0],0(%rsp) # X[]+K xfer to IALU
vmovdqa @X[1],16(%rsp)
vmovdqa @X[2],32(%rsp)
@@ -790,10 +1006,10 @@ sub Xupdate_avx_16_31() # recall that $Xi starts wtih 4
eval(shift(@insns));
eval(shift(@insns));
- &vpaddd (@Tx[1],@Tx[1],@X[-1&7]);
+ &vpaddd (@Tx[1],$Kx,@X[-1&7]);
eval(shift(@insns));
eval(shift(@insns));
- &vpsrldq(@Tx[0],@X[-1&7],4); # "X[-3]", 3 dwords
+ &vpsrldq(@Tx[0],@X[-1&7],4); # "X[-3]", 3 dwords
eval(shift(@insns));
eval(shift(@insns));
&vpxor (@X[0],@X[0],@X[-4&7]); # "X[0]"^="X[-16]"
@@ -843,7 +1059,7 @@ sub Xupdate_avx_16_31() # recall that $Xi starts wtih 4
&vpxor (@X[0],@X[0],@Tx[2]); # "X[0]"^=("X[0]">>96)<<<2
eval(shift(@insns));
eval(shift(@insns));
- &vmovdqa (@Tx[2],eval(16*(($Xi)/5))."($K_XX_XX)"); # K_XX_XX
+ &vmovdqa ($Kx,eval(2*16*(($Xi)/5)-64)."($K_XX_XX)") if ($Xi%5==0); # K_XX_XX
eval(shift(@insns));
eval(shift(@insns));
@@ -851,13 +1067,12 @@ sub Xupdate_avx_16_31() # recall that $Xi starts wtih 4
foreach (@insns) { eval; } # remaining instructions [if any]
$Xi++; push(@X,shift(@X)); # "rotate" X[]
- push(@Tx,shift(@Tx));
}
sub Xupdate_avx_32_79()
{ use integer;
my $body = shift;
- my @insns = (&$body,&$body,&$body,&$body); # 32 to 48 instructions
+ my @insns = (&$body,&$body,&$body,&$body); # 32 to 44 instructions
my ($a,$b,$c,$d,$e);
&vpalignr(@Tx[0],@X[-1&7],@X[-2&7],8); # compose "X[-6]"
@@ -870,12 +1085,8 @@ sub Xupdate_avx_32_79()
&vpxor (@X[0],@X[0],@X[-7&7]); # "X[0]"^="X[-28]"
eval(shift(@insns));
eval(shift(@insns)) if (@insns[0] !~ /&ro[rl]/);
- if ($Xi%5) {
- &vmovdqa (@Tx[2],@Tx[1]);# "perpetuate" K_XX_XX...
- } else { # ... or load next one
- &vmovdqa (@Tx[2],eval(16*($Xi/5))."($K_XX_XX)");
- }
- &vpaddd (@Tx[1],@Tx[1],@X[-1&7]);
+ &vpaddd (@Tx[1],$Kx,@X[-1&7]);
+ &vmovdqa ($Kx,eval(2*16*($Xi/5)-64)."($K_XX_XX)") if ($Xi%5==0);
eval(shift(@insns)); # ror
eval(shift(@insns));
@@ -905,7 +1116,6 @@ sub Xupdate_avx_32_79()
&vpor (@X[0],@X[0],@Tx[0]); # "X[0]"<<<=2
eval(shift(@insns)); # body_20_39
eval(shift(@insns));
- &vmovdqa (@Tx[1],@X[0]) if ($Xi<19);
eval(shift(@insns));
eval(shift(@insns)); # rol
eval(shift(@insns));
@@ -916,7 +1126,6 @@ sub Xupdate_avx_32_79()
foreach (@insns) { eval; } # remaining instructions
$Xi++; push(@X,shift(@X)); # "rotate" X[]
- push(@Tx,shift(@Tx));
}
sub Xuplast_avx_80()
@@ -926,23 +1135,21 @@ sub Xuplast_avx_80()
my ($a,$b,$c,$d,$e);
eval(shift(@insns));
- &vpaddd (@Tx[1],@Tx[1],@X[-1&7]);
+ &vpaddd (@Tx[1],$Kx,@X[-1&7]);
eval(shift(@insns));
eval(shift(@insns));
eval(shift(@insns));
eval(shift(@insns));
- &movdqa (eval(16*(($Xi-1)&3))."(%rsp)",@Tx[1]); # X[]+K xfer IALU
+ &vmovdqa (eval(16*(($Xi-1)&3))."(%rsp)",@Tx[1]); # X[]+K xfer IALU
foreach (@insns) { eval; } # remaining instructions
&cmp ($inp,$num);
- &je (".Ldone_avx");
-
- unshift(@Tx,pop(@Tx));
+ &je ($done_avx_label);
&vmovdqa(@X[2],"64($K_XX_XX)"); # pbswap mask
- &vmovdqa(@Tx[1],"0($K_XX_XX)"); # K_00_19
+ &vmovdqa($Kx,"-64($K_XX_XX)"); # K_00_19
&vmovdqu(@X[-4&7],"0($inp)"); # load input
&vmovdqu(@X[-3&7],"16($inp)");
&vmovdqu(@X[-2&7],"32($inp)");
@@ -964,7 +1171,7 @@ sub Xloop_avx()
&vpshufb(@X[($Xi-3)&7],@X[($Xi-3)&7],@X[2]);
eval(shift(@insns));
eval(shift(@insns));
- &vpaddd (@X[$Xi&7],@X[($Xi-4)&7],@Tx[1]);
+ &vpaddd (@X[$Xi&7],@X[($Xi-4)&7],$Kx);
eval(shift(@insns));
eval(shift(@insns));
eval(shift(@insns));
@@ -1024,12 +1231,15 @@ $code.=<<___;
mov @T[0],4($ctx)
mov @T[0],$B # magic seed
mov $C,8($ctx)
+ mov $C,@T[1]
mov $D,12($ctx)
+ xor $D,@T[1]
mov $E,16($ctx)
+ and @T[1],@T[0]
jmp .Loop_avx
.align 16
-.Ldone_avx:
+$done_avx_label:
___
$j=$saved_j; @V=@saved_V;
@@ -1052,31 +1262,520 @@ $code.=<<___;
mov $E,16($ctx)
___
$code.=<<___ if ($win64);
- movaps 64+0(%rsp),%xmm6
- movaps 64+16(%rsp),%xmm7
- movaps 64+32(%rsp),%xmm8
- movaps 64+48(%rsp),%xmm9
- movaps 64+64(%rsp),%xmm10
+ movaps -40-6*16(%r14),%xmm6
+ movaps -40-5*16(%r14),%xmm7
+ movaps -40-4*16(%r14),%xmm8
+ movaps -40-3*16(%r14),%xmm9
+ movaps -40-2*16(%r14),%xmm10
+ movaps -40-1*16(%r14),%xmm11
___
$code.=<<___;
- lea `64+($win64?5*16:0)`(%rsp),%rsi
- mov 0(%rsi),%r12
- mov 8(%rsi),%rbp
- mov 16(%rsi),%rbx
- lea 24(%rsi),%rsp
+ lea (%r14),%rsi
+ mov -40(%rsi),%r14
+ mov -32(%rsi),%r13
+ mov -24(%rsi),%r12
+ mov -16(%rsi),%rbp
+ mov -8(%rsi),%rbx
+ lea (%rsi),%rsp
.Lepilogue_avx:
ret
.size sha1_block_data_order_avx,.-sha1_block_data_order_avx
___
+
+if ($avx>1) {
+use integer;
+$Xi=4; # reset variables
+@X=map("%ymm$_",(4..7,0..3));
+@Tx=map("%ymm$_",(8..10));
+$Kx="%ymm11";
+$j=0;
+
+my @ROTX=("%eax","%ebp","%ebx","%ecx","%edx","%esi");
+my ($a5,$t0)=("%r12d","%edi");
+
+my ($A,$F,$B,$C,$D,$E)=@ROTX;
+my $rx=0;
+my $frame="%r13";
+
+$code.=<<___;
+.type sha1_block_data_order_avx2,\@function,3
+.align 16
+sha1_block_data_order_avx2:
+_avx2_shortcut:
+ mov %rsp,%rax
+ push %rbx
+ push %rbp
+ push %r12
+ push %r13
+ push %r14
+ vzeroupper
+___
+$code.=<<___ if ($win64);
+ lea -6*16(%rsp),%rsp
+ vmovaps %xmm6,-40-6*16(%rax)
+ vmovaps %xmm7,-40-5*16(%rax)
+ vmovaps %xmm8,-40-4*16(%rax)
+ vmovaps %xmm9,-40-3*16(%rax)
+ vmovaps %xmm10,-40-2*16(%rax)
+ vmovaps %xmm11,-40-1*16(%rax)
+.Lprologue_avx2:
+___
+$code.=<<___;
+ mov %rax,%r14 # original %rsp
+ mov %rdi,$ctx # reassigned argument
+ mov %rsi,$inp # reassigned argument
+ mov %rdx,$num # reassigned argument
+
+ lea -640(%rsp),%rsp
+ shl \$6,$num
+ lea 64($inp),$frame
+ and \$-128,%rsp
+ add $inp,$num
+ lea K_XX_XX+64(%rip),$K_XX_XX
+
+ mov 0($ctx),$A # load context
+ cmp $num,$frame
+ cmovae $inp,$frame # next or same block
+ mov 4($ctx),$F
+ mov 8($ctx),$C
+ mov 12($ctx),$D
+ mov 16($ctx),$E
+ vmovdqu 64($K_XX_XX),@X[2] # pbswap mask
+
+ vmovdqu ($inp),%xmm0
+ vmovdqu 16($inp),%xmm1
+ vmovdqu 32($inp),%xmm2
+ vmovdqu 48($inp),%xmm3
+ lea 64($inp),$inp
+ vinserti128 \$1,($frame),@X[-4&7],@X[-4&7]
+ vinserti128 \$1,16($frame),@X[-3&7],@X[-3&7]
+ vpshufb @X[2],@X[-4&7],@X[-4&7]
+ vinserti128 \$1,32($frame),@X[-2&7],@X[-2&7]
+ vpshufb @X[2],@X[-3&7],@X[-3&7]
+ vinserti128 \$1,48($frame),@X[-1&7],@X[-1&7]
+ vpshufb @X[2],@X[-2&7],@X[-2&7]
+ vmovdqu -64($K_XX_XX),$Kx # K_00_19
+ vpshufb @X[2],@X[-1&7],@X[-1&7]
+
+ vpaddd $Kx,@X[-4&7],@X[0] # add K_00_19
+ vpaddd $Kx,@X[-3&7],@X[1]
+ vmovdqu @X[0],0(%rsp) # X[]+K xfer to IALU
+ vpaddd $Kx,@X[-2&7],@X[2]
+ vmovdqu @X[1],32(%rsp)
+ vpaddd $Kx,@X[-1&7],@X[3]
+ vmovdqu @X[2],64(%rsp)
+ vmovdqu @X[3],96(%rsp)
+___
+for (;$Xi<8;$Xi++) { # Xupdate_avx2_16_31
+ use integer;
+
+ &vpalignr(@X[0],@X[-3&7],@X[-4&7],8); # compose "X[-14]" in "X[0]"
+ &vpsrldq(@Tx[0],@X[-1&7],4); # "X[-3]", 3 dwords
+ &vpxor (@X[0],@X[0],@X[-4&7]); # "X[0]"^="X[-16]"
+ &vpxor (@Tx[0],@Tx[0],@X[-2&7]); # "X[-3]"^"X[-8]"
+ &vpxor (@X[0],@X[0],@Tx[0]); # "X[0]"^="X[-3]"^"X[-8]"
+ &vpsrld (@Tx[0],@X[0],31);
+ &vmovdqu($Kx,eval(2*16*(($Xi)/5)-64)."($K_XX_XX)") if ($Xi%5==0); # K_XX_XX
+ &vpslldq(@Tx[2],@X[0],12); # "X[0]"<<96, extract one dword
+ &vpaddd (@X[0],@X[0],@X[0]);
+ &vpsrld (@Tx[1],@Tx[2],30);
+ &vpor (@X[0],@X[0],@Tx[0]); # "X[0]"<<<=1
+ &vpslld (@Tx[2],@Tx[2],2);
+ &vpxor (@X[0],@X[0],@Tx[1]);
+ &vpxor (@X[0],@X[0],@Tx[2]); # "X[0]"^=("X[0]">>96)<<<2
+ &vpaddd (@Tx[1],@X[0],$Kx);
+ &vmovdqu("32*$Xi(%rsp)",@Tx[1]); # X[]+K xfer to IALU
+
+ push(@X,shift(@X)); # "rotate" X[]
+}
+$code.=<<___;
+ lea 128(%rsp),$frame
+ jmp .Loop_avx2
+.align 32
+.Loop_avx2:
+ rorx \$2,$F,$B
+ andn $D,$F,$t0
+ and $C,$F
+ xor $t0,$F
+___
+sub bodyx_00_19 () { # 8 instructions, 3 cycles critical path
+ # at start $f=(b&c)^(~b&d), $b>>>=2
+ return &bodyx_20_39() if ($rx==19); $rx++;
+ (
+ '($a,$f,$b,$c,$d,$e)=@ROTX;'.
+
+ '&add ($e,((32*($j/4)+4*($j%4))%256-128)."($frame)");'. # e+=X[i]+K
+ '&lea ($frame,"256($frame)") if ($j%32==31);',
+ '&andn ($t0,$a,$c)', # ~b&d for next round
+
+ '&add ($e,$f)', # e+=(b&c)^(~b&d)
+ '&rorx ($a5,$a,27)', # a<<<5
+ '&rorx ($f,$a,2)', # b>>>2 for next round
+ '&and ($a,$b)', # b&c for next round
+
+ '&add ($e,$a5)', # e+=a<<<5
+ '&xor ($a,$t0);'. # f=(b&c)^(~b&d) for next round
+
+ 'unshift(@ROTX,pop(@ROTX)); $j++;'
+ )
+}
+
+sub bodyx_20_39 () { # 7 instructions, 2 cycles critical path
+ # on entry $f=b^c^d, $b>>>=2
+ return &bodyx_40_59() if ($rx==39); $rx++;
+ (
+ '($a,$f,$b,$c,$d,$e)=@ROTX;'.
+
+ '&add ($e,((32*($j/4)+4*($j%4))%256-128)."($frame)");'. # e+=X[i]+K
+ '&lea ($frame,"256($frame)") if ($j%32==31);',
+
+ '&lea ($e,"($e,$f)")', # e+=b^c^d
+ '&rorx ($a5,$a,27)', # a<<<5
+ '&rorx ($f,$a,2) if ($j<79)', # b>>>2 in next round
+ '&xor ($a,$b) if ($j<79)', # b^c for next round
+
+ '&add ($e,$a5)', # e+=a<<<5
+ '&xor ($a,$c) if ($j<79);'. # f=b^c^d for next round
+
+ 'unshift(@ROTX,pop(@ROTX)); $j++;'
+ )
+}
+
+sub bodyx_40_59 () { # 10 instructions, 3 cycles critical path
+ # on entry $f=((b^c)&(c^d)), $b>>>=2
+ $rx++;
+ (
+ '($a,$f,$b,$c,$d,$e)=@ROTX;'.
+
+ '&add ($e,((32*($j/4)+4*($j%4))%256-128)."($frame)");'. # e+=X[i]+K
+ '&lea ($frame,"256($frame)") if ($j%32==31);',
+ '&xor ($f,$c) if ($j>39)', # (b^c)&(c^d)^c
+ '&mov ($t0,$b) if ($j<59)', # count on zero latency
+ '&xor ($t0,$c) if ($j<59)', # c^d for next round
+
+ '&lea ($e,"($e,$f)")', # e+=(b^c)&(c^d)^c
+ '&rorx ($a5,$a,27)', # a<<<5
+ '&rorx ($f,$a,2)', # b>>>2 in next round
+ '&xor ($a,$b)', # b^c for next round
+
+ '&add ($e,$a5)', # e+=a<<<5
+ '&and ($a,$t0) if ($j< 59);'. # f=(b^c)&(c^d) for next round
+ '&xor ($a,$c) if ($j==59);'. # f=b^c^d for next round
+
+ 'unshift(@ROTX,pop(@ROTX)); $j++;'
+ )
+}
+
+sub Xupdate_avx2_16_31() # recall that $Xi starts wtih 4
+{ use integer;
+ my $body = shift;
+ my @insns = (&$body,&$body,&$body,&$body,&$body); # 35 instructions
+ my ($a,$b,$c,$d,$e);
+
+ &vpalignr(@X[0],@X[-3&7],@X[-4&7],8); # compose "X[-14]" in "X[0]"
+ eval(shift(@insns));
+ eval(shift(@insns));
+ eval(shift(@insns));
+ eval(shift(@insns));
+
+ &vpsrldq(@Tx[0],@X[-1&7],4); # "X[-3]", 3 dwords
+ eval(shift(@insns));
+ eval(shift(@insns));
+ eval(shift(@insns));
+
+ &vpxor (@X[0],@X[0],@X[-4&7]); # "X[0]"^="X[-16]"
+ &vpxor (@Tx[0],@Tx[0],@X[-2&7]); # "X[-3]"^"X[-8]"
+ eval(shift(@insns));
+ eval(shift(@insns));
+
+ &vpxor (@X[0],@X[0],@Tx[0]); # "X[0]"^="X[-3]"^"X[-8]"
+ eval(shift(@insns));
+ eval(shift(@insns));
+ eval(shift(@insns));
+ eval(shift(@insns));
+
+ &vpsrld (@Tx[0],@X[0],31);
+ &vmovdqu($Kx,eval(2*16*(($Xi)/5)-64)."($K_XX_XX)") if ($Xi%5==0); # K_XX_XX
+ eval(shift(@insns));
+ eval(shift(@insns));
+ eval(shift(@insns));
+
+ &vpslldq(@Tx[2],@X[0],12); # "X[0]"<<96, extract one dword
+ &vpaddd (@X[0],@X[0],@X[0]);
+ eval(shift(@insns));
+ eval(shift(@insns));
+
+ &vpsrld (@Tx[1],@Tx[2],30);
+ &vpor (@X[0],@X[0],@Tx[0]); # "X[0]"<<<=1
+ eval(shift(@insns));
+ eval(shift(@insns));
+
+ &vpslld (@Tx[2],@Tx[2],2);
+ &vpxor (@X[0],@X[0],@Tx[1]);
+ eval(shift(@insns));
+ eval(shift(@insns));
+
+ &vpxor (@X[0],@X[0],@Tx[2]); # "X[0]"^=("X[0]">>96)<<<2
+ eval(shift(@insns));
+ eval(shift(@insns));
+ eval(shift(@insns));
+
+ &vpaddd (@Tx[1],@X[0],$Kx);
+ eval(shift(@insns));
+ eval(shift(@insns));
+ eval(shift(@insns));
+ &vmovdqu(eval(32*($Xi))."(%rsp)",@Tx[1]); # X[]+K xfer to IALU
+
+ foreach (@insns) { eval; } # remaining instructions [if any]
+
+ $Xi++;
+ push(@X,shift(@X)); # "rotate" X[]
+}
+
+sub Xupdate_avx2_32_79()
+{ use integer;
+ my $body = shift;
+ my @insns = (&$body,&$body,&$body,&$body,&$body); # 35 to 50 instructions
+ my ($a,$b,$c,$d,$e);
+
+ &vpalignr(@Tx[0],@X[-1&7],@X[-2&7],8); # compose "X[-6]"
+ &vpxor (@X[0],@X[0],@X[-4&7]); # "X[0]"="X[-32]"^"X[-16]"
+ eval(shift(@insns));
+ eval(shift(@insns));
+
+ &vpxor (@X[0],@X[0],@X[-7&7]); # "X[0]"^="X[-28]"
+ &vmovdqu($Kx,eval(2*16*($Xi/5)-64)."($K_XX_XX)") if ($Xi%5==0);
+ eval(shift(@insns));
+ eval(shift(@insns));
+ eval(shift(@insns));
+
+ &vpxor (@X[0],@X[0],@Tx[0]); # "X[0]"^="X[-6]"
+ eval(shift(@insns));
+ eval(shift(@insns));
+ eval(shift(@insns));
+
+ &vpsrld (@Tx[0],@X[0],30);
+ &vpslld (@X[0],@X[0],2);
+ eval(shift(@insns));
+ eval(shift(@insns));
+ eval(shift(@insns));
+
+ #&vpslld (@X[0],@X[0],2);
+ eval(shift(@insns));
+ eval(shift(@insns));
+ eval(shift(@insns));
+
+ &vpor (@X[0],@X[0],@Tx[0]); # "X[0]"<<<=2
+ eval(shift(@insns));
+ eval(shift(@insns));
+ eval(shift(@insns));
+ eval(shift(@insns));
+
+ &vpaddd (@Tx[1],@X[0],$Kx);
+ eval(shift(@insns));
+ eval(shift(@insns));
+ eval(shift(@insns));
+ eval(shift(@insns));
+
+ &vmovdqu("32*$Xi(%rsp)",@Tx[1]); # X[]+K xfer to IALU
+
+ foreach (@insns) { eval; } # remaining instructions
+
+ $Xi++;
+ push(@X,shift(@X)); # "rotate" X[]
+}
+
+sub Xloop_avx2()
+{ use integer;
+ my $body = shift;
+ my @insns = (&$body,&$body,&$body,&$body,&$body); # 32 instructions
+ my ($a,$b,$c,$d,$e);
+
+ foreach (@insns) { eval; }
+}
+
+ &align32();
+ &Xupdate_avx2_32_79(\&bodyx_00_19);
+ &Xupdate_avx2_32_79(\&bodyx_00_19);
+ &Xupdate_avx2_32_79(\&bodyx_00_19);
+ &Xupdate_avx2_32_79(\&bodyx_00_19);
+
+ &Xupdate_avx2_32_79(\&bodyx_20_39);
+ &Xupdate_avx2_32_79(\&bodyx_20_39);
+ &Xupdate_avx2_32_79(\&bodyx_20_39);
+ &Xupdate_avx2_32_79(\&bodyx_20_39);
+
+ &align32();
+ &Xupdate_avx2_32_79(\&bodyx_40_59);
+ &Xupdate_avx2_32_79(\&bodyx_40_59);
+ &Xupdate_avx2_32_79(\&bodyx_40_59);
+ &Xupdate_avx2_32_79(\&bodyx_40_59);
+
+ &Xloop_avx2(\&bodyx_20_39);
+ &Xloop_avx2(\&bodyx_20_39);
+ &Xloop_avx2(\&bodyx_20_39);
+ &Xloop_avx2(\&bodyx_20_39);
+
+$code.=<<___;
+ lea 128($inp),$frame
+ lea 128($inp),%rdi # borrow $t0
+ cmp $num,$frame
+ cmovae $inp,$frame # next or previous block
+
+ # output is d-e-[a]-f-b-c => A=d,F=e,C=f,D=b,E=c
+ add 0($ctx),@ROTX[0] # update context
+ add 4($ctx),@ROTX[1]
+ add 8($ctx),@ROTX[3]
+ mov @ROTX[0],0($ctx)
+ add 12($ctx),@ROTX[4]
+ mov @ROTX[1],4($ctx)
+ mov @ROTX[0],$A # A=d
+ add 16($ctx),@ROTX[5]
+ mov @ROTX[3],$a5
+ mov @ROTX[3],8($ctx)
+ mov @ROTX[4],$D # D=b
+ #xchg @ROTX[5],$F # F=c, C=f
+ mov @ROTX[4],12($ctx)
+ mov @ROTX[1],$F # F=e
+ mov @ROTX[5],16($ctx)
+ #mov $F,16($ctx)
+ mov @ROTX[5],$E # E=c
+ mov $a5,$C # C=f
+ #xchg $F,$E # E=c, F=e
+
+ cmp $num,$inp
+ je .Ldone_avx2
+___
+
+$Xi=4; # reset variables
+@X=map("%ymm$_",(4..7,0..3));
+
+$code.=<<___;
+ vmovdqu 64($K_XX_XX),@X[2] # pbswap mask
+ cmp $num,%rdi # borrowed $t0
+ ja .Last_avx2
+
+ vmovdqu -64(%rdi),%xmm0 # low part of @X[-4&7]
+ vmovdqu -48(%rdi),%xmm1
+ vmovdqu -32(%rdi),%xmm2
+ vmovdqu -16(%rdi),%xmm3
+ vinserti128 \$1,0($frame),@X[-4&7],@X[-4&7]
+ vinserti128 \$1,16($frame),@X[-3&7],@X[-3&7]
+ vinserti128 \$1,32($frame),@X[-2&7],@X[-2&7]
+ vinserti128 \$1,48($frame),@X[-1&7],@X[-1&7]
+ jmp .Last_avx2
+
+.align 32
+.Last_avx2:
+ lea 128+16(%rsp),$frame
+ rorx \$2,$F,$B
+ andn $D,$F,$t0
+ and $C,$F
+ xor $t0,$F
+ sub \$-128,$inp
+___
+ $rx=$j=0; @ROTX=($A,$F,$B,$C,$D,$E);
+
+ &Xloop_avx2 (\&bodyx_00_19);
+ &Xloop_avx2 (\&bodyx_00_19);
+ &Xloop_avx2 (\&bodyx_00_19);
+ &Xloop_avx2 (\&bodyx_00_19);
+
+ &Xloop_avx2 (\&bodyx_20_39);
+ &vmovdqu ($Kx,"-64($K_XX_XX)"); # K_00_19
+ &vpshufb (@X[-4&7],@X[-4&7],@X[2]); # byte swap
+ &Xloop_avx2 (\&bodyx_20_39);
+ &vpshufb (@X[-3&7],@X[-3&7],@X[2]);
+ &vpaddd (@Tx[0],@X[-4&7],$Kx); # add K_00_19
+ &Xloop_avx2 (\&bodyx_20_39);
+ &vmovdqu ("0(%rsp)",@Tx[0]);
+ &vpshufb (@X[-2&7],@X[-2&7],@X[2]);
+ &vpaddd (@Tx[1],@X[-3&7],$Kx);
+ &Xloop_avx2 (\&bodyx_20_39);
+ &vmovdqu ("32(%rsp)",@Tx[1]);
+ &vpshufb (@X[-1&7],@X[-1&7],@X[2]);
+ &vpaddd (@X[2],@X[-2&7],$Kx);
+
+ &Xloop_avx2 (\&bodyx_40_59);
+ &align32 ();
+ &vmovdqu ("64(%rsp)",@X[2]);
+ &vpaddd (@X[3],@X[-1&7],$Kx);
+ &Xloop_avx2 (\&bodyx_40_59);
+ &vmovdqu ("96(%rsp)",@X[3]);
+ &Xloop_avx2 (\&bodyx_40_59);
+ &Xupdate_avx2_16_31(\&bodyx_40_59);
+
+ &Xupdate_avx2_16_31(\&bodyx_20_39);
+ &Xupdate_avx2_16_31(\&bodyx_20_39);
+ &Xupdate_avx2_16_31(\&bodyx_20_39);
+ &Xloop_avx2 (\&bodyx_20_39);
+
+$code.=<<___;
+ lea 128(%rsp),$frame
+
+ # output is d-e-[a]-f-b-c => A=d,F=e,C=f,D=b,E=c
+ add 0($ctx),@ROTX[0] # update context
+ add 4($ctx),@ROTX[1]
+ add 8($ctx),@ROTX[3]
+ mov @ROTX[0],0($ctx)
+ add 12($ctx),@ROTX[4]
+ mov @ROTX[1],4($ctx)
+ mov @ROTX[0],$A # A=d
+ add 16($ctx),@ROTX[5]
+ mov @ROTX[3],$a5
+ mov @ROTX[3],8($ctx)
+ mov @ROTX[4],$D # D=b
+ #xchg @ROTX[5],$F # F=c, C=f
+ mov @ROTX[4],12($ctx)
+ mov @ROTX[1],$F # F=e
+ mov @ROTX[5],16($ctx)
+ #mov $F,16($ctx)
+ mov @ROTX[5],$E # E=c
+ mov $a5,$C # C=f
+ #xchg $F,$E # E=c, F=e
+
+ cmp $num,$inp
+ jbe .Loop_avx2
+
+.Ldone_avx2:
+ vzeroupper
+___
+$code.=<<___ if ($win64);
+ movaps -40-6*16(%r14),%xmm6
+ movaps -40-5*16(%r14),%xmm7
+ movaps -40-4*16(%r14),%xmm8
+ movaps -40-3*16(%r14),%xmm9
+ movaps -40-2*16(%r14),%xmm10
+ movaps -40-1*16(%r14),%xmm11
+___
+$code.=<<___;
+ lea (%r14),%rsi
+ mov -40(%rsi),%r14
+ mov -32(%rsi),%r13
+ mov -24(%rsi),%r12
+ mov -16(%rsi),%rbp
+ mov -8(%rsi),%rbx
+ lea (%rsi),%rsp
+.Lepilogue_avx2:
+ ret
+.size sha1_block_data_order_avx2,.-sha1_block_data_order_avx2
+___
+}
}
$code.=<<___;
.align 64
K_XX_XX:
.long 0x5a827999,0x5a827999,0x5a827999,0x5a827999 # K_00_19
+.long 0x5a827999,0x5a827999,0x5a827999,0x5a827999 # K_00_19
+.long 0x6ed9eba1,0x6ed9eba1,0x6ed9eba1,0x6ed9eba1 # K_20_39
.long 0x6ed9eba1,0x6ed9eba1,0x6ed9eba1,0x6ed9eba1 # K_20_39
.long 0x8f1bbcdc,0x8f1bbcdc,0x8f1bbcdc,0x8f1bbcdc # K_40_59
+.long 0x8f1bbcdc,0x8f1bbcdc,0x8f1bbcdc,0x8f1bbcdc # K_40_59
+.long 0xca62c1d6,0xca62c1d6,0xca62c1d6,0xca62c1d6 # K_60_79
.long 0xca62c1d6,0xca62c1d6,0xca62c1d6,0xca62c1d6 # K_60_79
.long 0x00010203,0x04050607,0x08090a0b,0x0c0d0e0f # pbswap mask
+.long 0x00010203,0x04050607,0x08090a0b,0x0c0d0e0f # pbswap mask
+.byte 0xf,0xe,0xd,0xc,0xb,0xa,0x9,0x8,0x7,0x6,0x5,0x4,0x3,0x2,0x1,0x0
___
}}}
$code.=<<___;
@@ -1122,20 +1821,58 @@ se_handler:
jae .Lcommon_seh_tail
mov `16*4`(%rax),%rax # pull saved stack pointer
- lea 32(%rax),%rax
mov -8(%rax),%rbx
mov -16(%rax),%rbp
mov -24(%rax),%r12
mov -32(%rax),%r13
+ mov -40(%rax),%r14
mov %rbx,144($context) # restore context->Rbx
mov %rbp,160($context) # restore context->Rbp
mov %r12,216($context) # restore context->R12
mov %r13,224($context) # restore context->R13
+ mov %r14,232($context) # restore context->R14
jmp .Lcommon_seh_tail
.size se_handler,.-se_handler
+___
+
+$code.=<<___ if ($shaext);
+.type shaext_handler,\@abi-omnipotent
+.align 16
+shaext_handler:
+ push %rsi
+ push %rdi
+ push %rbx
+ push %rbp
+ push %r12
+ push %r13
+ push %r14
+ push %r15
+ pushfq
+ sub \$64,%rsp
+
+ mov 120($context),%rax # pull context->Rax
+ mov 248($context),%rbx # pull context->Rip
+
+ lea .Lprologue_shaext(%rip),%r10
+ cmp %r10,%rbx # context->Rip<.Lprologue
+ jb .Lcommon_seh_tail
+
+ lea .Lepilogue_shaext(%rip),%r10
+ cmp %r10,%rbx # context->Rip>=.Lepilogue
+ jae .Lcommon_seh_tail
+
+ lea -8-4*16(%rax),%rsi
+ lea 512($context),%rdi # &context.Xmm6
+ mov \$8,%ecx
+ .long 0xa548f3fc # cld; rep movsq
+ jmp .Lcommon_seh_tail
+.size shaext_handler,.-shaext_handler
+___
+
+$code.=<<___;
.type ssse3_handler,\@abi-omnipotent
.align 16
ssse3_handler:
@@ -1168,18 +1905,23 @@ ssse3_handler:
cmp %r10,%rbx # context->Rip>=epilogue label
jae .Lcommon_seh_tail
- lea 64(%rax),%rsi
+ mov 232($context),%rax # pull context->R14
+
+ lea -40-6*16(%rax),%rsi
lea 512($context),%rdi # &context.Xmm6
- mov \$10,%ecx
+ mov \$12,%ecx
.long 0xa548f3fc # cld; rep movsq
- lea `24+64+5*16`(%rax),%rax # adjust stack pointer
mov -8(%rax),%rbx
mov -16(%rax),%rbp
mov -24(%rax),%r12
+ mov -32(%rax),%r13
+ mov -40(%rax),%r14
mov %rbx,144($context) # restore context->Rbx
mov %rbp,160($context) # restore context->Rbp
mov %r12,216($context) # restore cotnext->R12
+ mov %r13,224($context) # restore cotnext->R13
+ mov %r14,232($context) # restore cotnext->R14
.Lcommon_seh_tail:
mov 8(%rax),%rdi
@@ -1226,6 +1968,13 @@ ssse3_handler:
.rva .LSEH_begin_sha1_block_data_order
.rva .LSEH_end_sha1_block_data_order
.rva .LSEH_info_sha1_block_data_order
+___
+$code.=<<___ if ($shaext);
+ .rva .LSEH_begin_sha1_block_data_order_shaext
+ .rva .LSEH_end_sha1_block_data_order_shaext
+ .rva .LSEH_info_sha1_block_data_order_shaext
+___
+$code.=<<___;
.rva .LSEH_begin_sha1_block_data_order_ssse3
.rva .LSEH_end_sha1_block_data_order_ssse3
.rva .LSEH_info_sha1_block_data_order_ssse3
@@ -1235,12 +1984,24 @@ $code.=<<___ if ($avx);
.rva .LSEH_end_sha1_block_data_order_avx
.rva .LSEH_info_sha1_block_data_order_avx
___
+$code.=<<___ if ($avx>1);
+ .rva .LSEH_begin_sha1_block_data_order_avx2
+ .rva .LSEH_end_sha1_block_data_order_avx2
+ .rva .LSEH_info_sha1_block_data_order_avx2
+___
$code.=<<___;
.section .xdata
.align 8
.LSEH_info_sha1_block_data_order:
.byte 9,0,0,0
.rva se_handler
+___
+$code.=<<___ if ($shaext);
+.LSEH_info_sha1_block_data_order_shaext:
+ .byte 9,0,0,0
+ .rva shaext_handler
+___
+$code.=<<___;
.LSEH_info_sha1_block_data_order_ssse3:
.byte 9,0,0,0
.rva ssse3_handler
@@ -1252,10 +2013,55 @@ $code.=<<___ if ($avx);
.rva ssse3_handler
.rva .Lprologue_avx,.Lepilogue_avx # HandlerData[]
___
+$code.=<<___ if ($avx>1);
+.LSEH_info_sha1_block_data_order_avx2:
+ .byte 9,0,0,0
+ .rva ssse3_handler
+ .rva .Lprologue_avx2,.Lepilogue_avx2 # HandlerData[]
+___
}
####################################################################
-$code =~ s/\`([^\`]*)\`/eval $1/gem;
-print $code;
+sub sha1rnds4 {
+ if (@_[0] =~ /\$([x0-9a-f]+),\s*%xmm([0-7]),\s*%xmm([0-7])/) {
+ my @opcode=(0x0f,0x3a,0xcc);
+ push @opcode,0xc0|($2&7)|(($3&7)<<3); # ModR/M
+ my $c=$1;
+ push @opcode,$c=~/^0/?oct($c):$c;
+ return ".byte\t".join(',',@opcode);
+ } else {
+ return "sha1rnds4\t".@_[0];
+ }
+}
+
+sub sha1op38 {
+ my $instr = shift;
+ my %opcodelet = (
+ "sha1nexte" => 0xc8,
+ "sha1msg1" => 0xc9,
+ "sha1msg2" => 0xca );
+
+ if (defined($opcodelet{$instr}) && @_[0] =~ /%xmm([0-9]+),\s*%xmm([0-9]+)/) {
+ my @opcode=(0x0f,0x38);
+ my $rex=0;
+ $rex|=0x04 if ($2>=8);
+ $rex|=0x01 if ($1>=8);
+ unshift @opcode,0x40|$rex if ($rex);
+ push @opcode,$opcodelet{$instr};
+ push @opcode,0xc0|($1&7)|(($2&7)<<3); # ModR/M
+ return ".byte\t".join(',',@opcode);
+ } else {
+ return $instr."\t".@_[0];
+ }
+}
+
+foreach (split("\n",$code)) {
+ s/\`([^\`]*)\`/eval $1/geo;
+
+ s/\b(sha1rnds4)\s+(.*)/sha1rnds4($2)/geo or
+ s/\b(sha1[^\s]*)\s+(.*)/sha1op38($1,$2)/geo;
+
+ print $_,"\n";
+}
close STDOUT;
diff --git a/crypto/openssl/crypto/sha/asm/sha256-586.pl b/crypto/openssl/crypto/sha/asm/sha256-586.pl
index 928ec53..6462e45b 100755
--- a/crypto/openssl/crypto/sha/asm/sha256-586.pl
+++ b/crypto/openssl/crypto/sha/asm/sha256-586.pl
@@ -1,7 +1,7 @@
#!/usr/bin/env perl
#
# ====================================================================
-# Written by Andy Polyakov <appro@fy.chalmers.se> for the OpenSSL
+# Written by Andy Polyakov <appro@openssl.org> for the OpenSSL
# project. The module is, however, dual licensed under OpenSSL and
# CRYPTOGAMS licenses depending on where you obtain it. For further
# details see http://www.openssl.org/~appro/cryptogams/.
@@ -9,20 +9,55 @@
#
# SHA256 block transform for x86. September 2007.
#
-# Performance in clock cycles per processed byte (less is better):
+# Performance improvement over compiler generated code varies from
+# 10% to 40% [see below]. Not very impressive on some µ-archs, but
+# it's 5 times smaller and optimizies amount of writes.
#
-# Pentium PIII P4 AMD K8 Core2
-# gcc 46 36 41 27 26
-# icc 57 33 38 25 23
-# x86 asm 40 30 33 20 18
-# x86_64 asm(*) - - 21 16 16
+# May 2012.
#
-# (*) x86_64 assembler performance is presented for reference
-# purposes.
+# Optimization including two of Pavel Semjanov's ideas, alternative
+# Maj and full unroll, resulted in ~20-25% improvement on most CPUs,
+# ~7% on Pentium, ~40% on Atom. As fully unrolled loop body is almost
+# 15x larger, 8KB vs. 560B, it's fired only for longer inputs. But not
+# on P4, where it kills performance, nor Sandy Bridge, where folded
+# loop is approximately as fast...
#
-# Performance improvement over compiler generated code varies from
-# 10% to 40% [see above]. Not very impressive on some µ-archs, but
-# it's 5 times smaller and optimizies amount of writes.
+# June 2012.
+#
+# Add AMD XOP-specific code path, >30% improvement on Bulldozer over
+# May version, >60% over original. Add AVX+shrd code path, >25%
+# improvement on Sandy Bridge over May version, 60% over original.
+#
+# May 2013.
+#
+# Replace AMD XOP code path with SSSE3 to cover more processors.
+# (Biggest improvement coefficient is on upcoming Atom Silvermont,
+# not shown.) Add AVX+BMI code path.
+#
+# March 2014.
+#
+# Add support for Intel SHA Extensions.
+#
+# Performance in clock cycles per processed byte (less is better):
+#
+# gcc icc x86 asm(*) SIMD x86_64 asm(**)
+# Pentium 46 57 40/38 - -
+# PIII 36 33 27/24 - -
+# P4 41 38 28 - 17.3
+# AMD K8 27 25 19/15.5 - 14.9
+# Core2 26 23 18/15.6 14.3 13.8
+# Westmere 27 - 19/15.7 13.4 12.3
+# Sandy Bridge 25 - 15.9 12.4 11.6
+# Ivy Bridge 24 - 15.0 11.4 10.3
+# Haswell 22 - 13.9 9.46 7.80
+# Bulldozer 36 - 27/22 17.0 13.6
+# VIA Nano 36 - 25/22 16.8 16.5
+# Atom 50 - 30/25 21.9 18.9
+# Silvermont 40 - 34/31 22.9 20.6
+#
+# (*) numbers after slash are for unrolled loop, where applicable;
+# (**) x86_64 assembly performance is presented for reference
+# purposes, results are best-available;
$0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1;
push(@INC,"${dir}","${dir}../../perlasm");
@@ -30,72 +65,122 @@ require "x86asm.pl";
&asm_init($ARGV[0],"sha512-586.pl",$ARGV[$#ARGV] eq "386");
+$xmm=$avx=0;
+for (@ARGV) { $xmm=1 if (/-DOPENSSL_IA32_SSE2/); }
+
+if ($xmm && `$ENV{CC} -Wa,-v -c -o /dev/null -x assembler /dev/null 2>&1`
+ =~ /GNU assembler version ([2-9]\.[0-9]+)/) {
+ $avx = ($1>=2.19) + ($1>=2.22);
+}
+
+if ($xmm && !$avx && $ARGV[0] eq "win32n" &&
+ `nasm -v 2>&1` =~ /NASM version ([2-9]\.[0-9]+)/) {
+ $avx = ($1>=2.03) + ($1>=2.10);
+}
+
+if ($xmm && !$avx && $ARGV[0] eq "win32" &&
+ `ml 2>&1` =~ /Version ([0-9]+)\./) {
+ $avx = ($1>=10) + ($1>=11);
+}
+
+if ($xmm && !$avx && `$ENV{CC} -v 2>&1` =~ /(^clang version|based on LLVM) ([3-9]\.[0-9]+)/) {
+ $avx = ($2>=3.0) + ($2>3.0);
+}
+
+$shaext=$xmm; ### set to zero if compiling for 1.0.1
+
+$unroll_after = 64*4; # If pre-evicted from L1P cache first spin of
+ # fully unrolled loop was measured to run about
+ # 3-4x slower. If slowdown coefficient is N and
+ # unrolled loop is m times faster, then you break
+ # even at (N-1)/(m-1) blocks. Then it needs to be
+ # adjusted for probability of code being evicted,
+ # code size/cache size=1/4. Typical m is 1.15...
+
$A="eax";
$E="edx";
$T="ebx";
-$Aoff=&DWP(0,"esp");
-$Boff=&DWP(4,"esp");
-$Coff=&DWP(8,"esp");
-$Doff=&DWP(12,"esp");
-$Eoff=&DWP(16,"esp");
-$Foff=&DWP(20,"esp");
-$Goff=&DWP(24,"esp");
-$Hoff=&DWP(28,"esp");
-$Xoff=&DWP(32,"esp");
+$Aoff=&DWP(4,"esp");
+$Boff=&DWP(8,"esp");
+$Coff=&DWP(12,"esp");
+$Doff=&DWP(16,"esp");
+$Eoff=&DWP(20,"esp");
+$Foff=&DWP(24,"esp");
+$Goff=&DWP(28,"esp");
+$Hoff=&DWP(32,"esp");
+$Xoff=&DWP(36,"esp");
$K256="ebp";
+sub BODY_16_63() {
+ &mov ($T,"ecx"); # "ecx" is preloaded
+ &mov ("esi",&DWP(4*(9+15+16-14),"esp"));
+ &ror ("ecx",18-7);
+ &mov ("edi","esi");
+ &ror ("esi",19-17);
+ &xor ("ecx",$T);
+ &shr ($T,3);
+ &ror ("ecx",7);
+ &xor ("esi","edi");
+ &xor ($T,"ecx"); # T = sigma0(X[-15])
+ &ror ("esi",17);
+ &add ($T,&DWP(4*(9+15+16),"esp")); # T += X[-16]
+ &shr ("edi",10);
+ &add ($T,&DWP(4*(9+15+16-9),"esp")); # T += X[-7]
+ #&xor ("edi","esi") # sigma1(X[-2])
+ # &add ($T,"edi"); # T += sigma1(X[-2])
+ # &mov (&DWP(4*(9+15),"esp"),$T); # save X[0]
+
+ &BODY_00_15(1);
+}
sub BODY_00_15() {
my $in_16_63=shift;
&mov ("ecx",$E);
- &add ($T,"edi") if ($in_16_63); # T += sigma1(X[-2])
- &ror ("ecx",25-11);
+ &xor ("edi","esi") if ($in_16_63); # sigma1(X[-2])
&mov ("esi",$Foff);
+ &ror ("ecx",25-11);
+ &add ($T,"edi") if ($in_16_63); # T += sigma1(X[-2])
+ &mov ("edi",$Goff);
&xor ("ecx",$E);
+ &xor ("esi","edi");
+ &mov ($T,&DWP(4*(9+15),"esp")) if (!$in_16_63);
+ &mov (&DWP(4*(9+15),"esp"),$T) if ($in_16_63); # save X[0]
&ror ("ecx",11-6);
- &mov (&DWP(4*(8+15),"esp"),$T) if ($in_16_63); # save X[0]
- &xor ("ecx",$E);
- &ror ("ecx",6); # Sigma1(e)
- &mov ("edi",$Goff);
- &add ($T,"ecx"); # T += Sigma1(e)
-
- &xor ("esi","edi");
- &mov ($Eoff,$E); # modulo-scheduled
+ &and ("esi",$E);
+ &mov ($Eoff,$E); # modulo-scheduled
+ &xor ($E,"ecx");
+ &add ($T,$Hoff); # T += h
+ &xor ("esi","edi"); # Ch(e,f,g)
+ &ror ($E,6); # Sigma1(e)
&mov ("ecx",$A);
- &and ("esi",$E);
- &mov ($E,$Doff); # e becomes d, which is e in next iteration
- &xor ("esi","edi"); # Ch(e,f,g)
- &mov ("edi",$A);
- &add ($T,"esi"); # T += Ch(e,f,g)
+ &add ($T,"esi"); # T += Ch(e,f,g)
&ror ("ecx",22-13);
- &add ($T,$Hoff); # T += h
+ &add ($T,$E); # T += Sigma1(e)
+ &mov ("edi",$Boff);
&xor ("ecx",$A);
+ &mov ($Aoff,$A); # modulo-scheduled
+ &lea ("esp",&DWP(-4,"esp"));
&ror ("ecx",13-2);
- &mov ("esi",$Boff);
- &xor ("ecx",$A);
- &ror ("ecx",2); # Sigma0(a)
- &add ($E,$T); # d += T
- &mov ("edi",$Coff);
-
- &add ($T,"ecx"); # T += Sigma0(a)
- &mov ($Aoff,$A); # modulo-scheduled
-
- &mov ("ecx",$A);
- &sub ("esp",4);
- &or ($A,"esi"); # a becomes h, which is a in next iteration
- &and ("ecx","esi");
- &and ($A,"edi");
&mov ("esi",&DWP(0,$K256));
- &or ($A,"ecx"); # h=Maj(a,b,c)
+ &xor ("ecx",$A);
+ &mov ($E,$Eoff); # e in next iteration, d in this one
+ &xor ($A,"edi"); # a ^= b
+ &ror ("ecx",2); # Sigma0(a)
+ &add ($T,"esi"); # T+= K[i]
+ &mov (&DWP(0,"esp"),$A); # (b^c) in next round
+ &add ($E,$T); # d += T
+ &and ($A,&DWP(4,"esp")); # a &= (b^c)
+ &add ($T,"ecx"); # T += Sigma0(a)
+ &xor ($A,"edi"); # h = Maj(a,b,c) = Ch(a^b,c,b)
+ &mov ("ecx",&DWP(4*(9+15+16-1),"esp")) if ($in_16_63); # preload T
&add ($K256,4);
- &add ($A,$T); # h += T
- &mov ($T,&DWP(4*(8+15+16-1),"esp")) if ($in_16_63); # preload T
- &add ($E,"esi"); # d += K256[i]
- &add ($A,"esi"); # h += K256[i]
+ &add ($A,$T); # h += T
}
+&external_label("OPENSSL_ia32cap_P") if (!$i386);
+
&function_begin("sha256_block_data_order");
&mov ("esi",wparam(0)); # ctx
&mov ("edi",wparam(1)); # inp
@@ -116,26 +201,59 @@ sub BODY_00_15() {
&mov (&DWP(4,"esp"),"edi"); # inp
&mov (&DWP(8,"esp"),"eax"); # inp+num*128
&mov (&DWP(12,"esp"),"ebx"); # saved sp
+ if (!$i386 && $xmm) {
+ &picmeup("edx","OPENSSL_ia32cap_P",$K256,&label("K256"));
+ &mov ("ecx",&DWP(0,"edx"));
+ &mov ("ebx",&DWP(4,"edx"));
+ &test ("ecx",1<<20); # check for P4
+ &jnz (&label("loop"));
+ &mov ("edx",&DWP(8,"edx")) if ($xmm);
+ &test ("ecx",1<<24); # check for FXSR
+ &jz ($unroll_after?&label("no_xmm"):&label("loop"));
+ &and ("ecx",1<<30); # mask "Intel CPU" bit
+ &and ("ebx",1<<28|1<<9); # mask AVX and SSSE3 bits
+ &test ("edx",1<<29) if ($shaext); # check for SHA
+ &jnz (&label("shaext")) if ($shaext);
+ &or ("ecx","ebx");
+ &and ("ecx",1<<28|1<<30);
+ &cmp ("ecx",1<<28|1<<30);
+ if ($xmm) {
+ &je (&label("AVX")) if ($avx);
+ &test ("ebx",1<<9); # check for SSSE3
+ &jnz (&label("SSSE3"));
+ } else {
+ &je (&label("loop_shrd"));
+ }
+ if ($unroll_after) {
+&set_label("no_xmm");
+ &sub ("eax","edi");
+ &cmp ("eax",$unroll_after);
+ &jae (&label("unrolled"));
+ } }
+ &jmp (&label("loop"));
+
+sub COMPACT_LOOP() {
+my $suffix=shift;
-&set_label("loop",16);
+&set_label("loop$suffix",$suffix?32:16);
# copy input block to stack reversing byte and dword order
for($i=0;$i<4;$i++) {
&mov ("eax",&DWP($i*16+0,"edi"));
&mov ("ebx",&DWP($i*16+4,"edi"));
&mov ("ecx",&DWP($i*16+8,"edi"));
- &mov ("edx",&DWP($i*16+12,"edi"));
&bswap ("eax");
+ &mov ("edx",&DWP($i*16+12,"edi"));
&bswap ("ebx");
- &bswap ("ecx");
- &bswap ("edx");
&push ("eax");
+ &bswap ("ecx");
&push ("ebx");
+ &bswap ("edx");
&push ("ecx");
&push ("edx");
}
&add ("edi",64);
- &sub ("esp",4*8); # place for A,B,C,D,E,F,G,H
- &mov (&DWP(4*(8+16)+4,"esp"),"edi");
+ &lea ("esp",&DWP(-4*9,"esp"));# place for A,B,C,D,E,F,G,H
+ &mov (&DWP(4*(9+16)+4,"esp"),"edi");
# copy ctx->h[0-7] to A,B,C,D,E,F,G,H on stack
&mov ($A,&DWP(0,"esi"));
@@ -144,8 +262,10 @@ sub BODY_00_15() {
&mov ("edi",&DWP(12,"esi"));
# &mov ($Aoff,$A);
&mov ($Boff,"ebx");
+ &xor ("ebx","ecx");
&mov ($Coff,"ecx");
&mov ($Doff,"edi");
+ &mov (&DWP(0,"esp"),"ebx"); # magic
&mov ($E,&DWP(16,"esi"));
&mov ("ebx",&DWP(20,"esi"));
&mov ("ecx",&DWP(24,"esi"));
@@ -155,59 +275,41 @@ sub BODY_00_15() {
&mov ($Goff,"ecx");
&mov ($Hoff,"edi");
-&set_label("00_15",16);
- &mov ($T,&DWP(4*(8+15),"esp"));
+&set_label("00_15$suffix",16);
&BODY_00_15();
&cmp ("esi",0xc19bf174);
- &jne (&label("00_15"));
-
- &mov ($T,&DWP(4*(8+15+16-1),"esp")); # preloaded in BODY_00_15(1)
-&set_label("16_63",16);
- &mov ("esi",$T);
- &mov ("ecx",&DWP(4*(8+15+16-14),"esp"));
- &ror ("esi",18-7);
- &mov ("edi","ecx");
- &xor ("esi",$T);
- &ror ("esi",7);
- &shr ($T,3);
-
- &ror ("edi",19-17);
- &xor ($T,"esi"); # T = sigma0(X[-15])
- &xor ("edi","ecx");
- &ror ("edi",17);
- &shr ("ecx",10);
- &add ($T,&DWP(4*(8+15+16),"esp")); # T += X[-16]
- &xor ("edi","ecx"); # sigma1(X[-2])
-
- &add ($T,&DWP(4*(8+15+16-9),"esp")); # T += X[-7]
- # &add ($T,"edi"); # T += sigma1(X[-2])
- # &mov (&DWP(4*(8+15),"esp"),$T); # save X[0]
+ &jne (&label("00_15$suffix"));
- &BODY_00_15(1);
+ &mov ("ecx",&DWP(4*(9+15+16-1),"esp")); # preloaded in BODY_00_15(1)
+ &jmp (&label("16_63$suffix"));
+
+&set_label("16_63$suffix",16);
+
+ &BODY_16_63();
&cmp ("esi",0xc67178f2);
- &jne (&label("16_63"));
+ &jne (&label("16_63$suffix"));
- &mov ("esi",&DWP(4*(8+16+64)+0,"esp"));#ctx
+ &mov ("esi",&DWP(4*(9+16+64)+0,"esp"));#ctx
# &mov ($A,$Aoff);
&mov ("ebx",$Boff);
- &mov ("ecx",$Coff);
- &mov ("edi",$Doff);
+ # &mov ("edi",$Coff);
+ &mov ("ecx",$Doff);
&add ($A,&DWP(0,"esi"));
&add ("ebx",&DWP(4,"esi"));
- &add ("ecx",&DWP(8,"esi"));
- &add ("edi",&DWP(12,"esi"));
+ &add ("edi",&DWP(8,"esi"));
+ &add ("ecx",&DWP(12,"esi"));
&mov (&DWP(0,"esi"),$A);
&mov (&DWP(4,"esi"),"ebx");
- &mov (&DWP(8,"esi"),"ecx");
- &mov (&DWP(12,"esi"),"edi");
+ &mov (&DWP(8,"esi"),"edi");
+ &mov (&DWP(12,"esi"),"ecx");
# &mov ($E,$Eoff);
&mov ("eax",$Foff);
&mov ("ebx",$Goff);
&mov ("ecx",$Hoff);
- &mov ("edi",&DWP(4*(8+16+64)+4,"esp"));#inp
+ &mov ("edi",&DWP(4*(9+16+64)+4,"esp"));#inp
&add ($E,&DWP(16,"esi"));
&add ("eax",&DWP(20,"esi"));
&add ("ebx",&DWP(24,"esi"));
@@ -217,33 +319,963 @@ sub BODY_00_15() {
&mov (&DWP(24,"esi"),"ebx");
&mov (&DWP(28,"esi"),"ecx");
- &add ("esp",4*(8+16+64)); # destroy frame
+ &lea ("esp",&DWP(4*(9+16+64),"esp"));# destroy frame
&sub ($K256,4*64); # rewind K
&cmp ("edi",&DWP(8,"esp")); # are we done yet?
- &jb (&label("loop"));
-
+ &jb (&label("loop$suffix"));
+}
+ &COMPACT_LOOP();
+ &mov ("esp",&DWP(12,"esp")); # restore sp
+&function_end_A();
+ if (!$i386 && !$xmm) {
+ # ~20% improvement on Sandy Bridge
+ local *ror = sub { &shrd(@_[0],@_) };
+ &COMPACT_LOOP("_shrd");
&mov ("esp",&DWP(12,"esp")); # restore sp
&function_end_A();
+ }
&set_label("K256",64); # Yes! I keep it in the code segment!
- &data_word(0x428a2f98,0x71374491,0xb5c0fbcf,0xe9b5dba5);
- &data_word(0x3956c25b,0x59f111f1,0x923f82a4,0xab1c5ed5);
- &data_word(0xd807aa98,0x12835b01,0x243185be,0x550c7dc3);
- &data_word(0x72be5d74,0x80deb1fe,0x9bdc06a7,0xc19bf174);
- &data_word(0xe49b69c1,0xefbe4786,0x0fc19dc6,0x240ca1cc);
- &data_word(0x2de92c6f,0x4a7484aa,0x5cb0a9dc,0x76f988da);
- &data_word(0x983e5152,0xa831c66d,0xb00327c8,0xbf597fc7);
- &data_word(0xc6e00bf3,0xd5a79147,0x06ca6351,0x14292967);
- &data_word(0x27b70a85,0x2e1b2138,0x4d2c6dfc,0x53380d13);
- &data_word(0x650a7354,0x766a0abb,0x81c2c92e,0x92722c85);
- &data_word(0xa2bfe8a1,0xa81a664b,0xc24b8b70,0xc76c51a3);
- &data_word(0xd192e819,0xd6990624,0xf40e3585,0x106aa070);
- &data_word(0x19a4c116,0x1e376c08,0x2748774c,0x34b0bcb5);
- &data_word(0x391c0cb3,0x4ed8aa4a,0x5b9cca4f,0x682e6ff3);
- &data_word(0x748f82ee,0x78a5636f,0x84c87814,0x8cc70208);
- &data_word(0x90befffa,0xa4506ceb,0xbef9a3f7,0xc67178f2);
-&function_end_B("sha256_block_data_order");
+@K256=( 0x428a2f98,0x71374491,0xb5c0fbcf,0xe9b5dba5,
+ 0x3956c25b,0x59f111f1,0x923f82a4,0xab1c5ed5,
+ 0xd807aa98,0x12835b01,0x243185be,0x550c7dc3,
+ 0x72be5d74,0x80deb1fe,0x9bdc06a7,0xc19bf174,
+ 0xe49b69c1,0xefbe4786,0x0fc19dc6,0x240ca1cc,
+ 0x2de92c6f,0x4a7484aa,0x5cb0a9dc,0x76f988da,
+ 0x983e5152,0xa831c66d,0xb00327c8,0xbf597fc7,
+ 0xc6e00bf3,0xd5a79147,0x06ca6351,0x14292967,
+ 0x27b70a85,0x2e1b2138,0x4d2c6dfc,0x53380d13,
+ 0x650a7354,0x766a0abb,0x81c2c92e,0x92722c85,
+ 0xa2bfe8a1,0xa81a664b,0xc24b8b70,0xc76c51a3,
+ 0xd192e819,0xd6990624,0xf40e3585,0x106aa070,
+ 0x19a4c116,0x1e376c08,0x2748774c,0x34b0bcb5,
+ 0x391c0cb3,0x4ed8aa4a,0x5b9cca4f,0x682e6ff3,
+ 0x748f82ee,0x78a5636f,0x84c87814,0x8cc70208,
+ 0x90befffa,0xa4506ceb,0xbef9a3f7,0xc67178f2 );
+&data_word(@K256);
+&data_word(0x00010203,0x04050607,0x08090a0b,0x0c0d0e0f); # byte swap mask
&asciz("SHA256 block transform for x86, CRYPTOGAMS by <appro\@openssl.org>");
+($a,$b,$c,$d,$e,$f,$g,$h)=(0..7); # offsets
+sub off { &DWP(4*(((shift)-$i)&7),"esp"); }
+
+if (!$i386 && $unroll_after) {
+my @AH=($A,$K256);
+
+&set_label("unrolled",16);
+ &lea ("esp",&DWP(-96,"esp"));
+ # copy ctx->h[0-7] to A,B,C,D,E,F,G,H on stack
+ &mov ($AH[0],&DWP(0,"esi"));
+ &mov ($AH[1],&DWP(4,"esi"));
+ &mov ("ecx",&DWP(8,"esi"));
+ &mov ("ebx",&DWP(12,"esi"));
+ #&mov (&DWP(0,"esp"),$AH[0]);
+ &mov (&DWP(4,"esp"),$AH[1]);
+ &xor ($AH[1],"ecx"); # magic
+ &mov (&DWP(8,"esp"),"ecx");
+ &mov (&DWP(12,"esp"),"ebx");
+ &mov ($E,&DWP(16,"esi"));
+ &mov ("ebx",&DWP(20,"esi"));
+ &mov ("ecx",&DWP(24,"esi"));
+ &mov ("esi",&DWP(28,"esi"));
+ #&mov (&DWP(16,"esp"),$E);
+ &mov (&DWP(20,"esp"),"ebx");
+ &mov (&DWP(24,"esp"),"ecx");
+ &mov (&DWP(28,"esp"),"esi");
+ &jmp (&label("grand_loop"));
+
+&set_label("grand_loop",16);
+ # copy input block to stack reversing byte order
+ for($i=0;$i<5;$i++) {
+ &mov ("ebx",&DWP(12*$i+0,"edi"));
+ &mov ("ecx",&DWP(12*$i+4,"edi"));
+ &bswap ("ebx");
+ &mov ("esi",&DWP(12*$i+8,"edi"));
+ &bswap ("ecx");
+ &mov (&DWP(32+12*$i+0,"esp"),"ebx");
+ &bswap ("esi");
+ &mov (&DWP(32+12*$i+4,"esp"),"ecx");
+ &mov (&DWP(32+12*$i+8,"esp"),"esi");
+ }
+ &mov ("ebx",&DWP($i*12,"edi"));
+ &add ("edi",64);
+ &bswap ("ebx");
+ &mov (&DWP(96+4,"esp"),"edi");
+ &mov (&DWP(32+12*$i,"esp"),"ebx");
+
+ my ($t1,$t2) = ("ecx","esi");
+
+ for ($i=0;$i<64;$i++) {
+
+ if ($i>=16) {
+ &mov ($T,$t1); # $t1 is preloaded
+ # &mov ($t2,&DWP(32+4*(($i+14)&15),"esp"));
+ &ror ($t1,18-7);
+ &mov ("edi",$t2);
+ &ror ($t2,19-17);
+ &xor ($t1,$T);
+ &shr ($T,3);
+ &ror ($t1,7);
+ &xor ($t2,"edi");
+ &xor ($T,$t1); # T = sigma0(X[-15])
+ &ror ($t2,17);
+ &add ($T,&DWP(32+4*($i&15),"esp")); # T += X[-16]
+ &shr ("edi",10);
+ &add ($T,&DWP(32+4*(($i+9)&15),"esp")); # T += X[-7]
+ #&xor ("edi",$t2) # sigma1(X[-2])
+ # &add ($T,"edi"); # T += sigma1(X[-2])
+ # &mov (&DWP(4*(9+15),"esp"),$T); # save X[0]
+ }
+ &mov ($t1,$E);
+ &xor ("edi",$t2) if ($i>=16); # sigma1(X[-2])
+ &mov ($t2,&off($f));
+ &ror ($E,25-11);
+ &add ($T,"edi") if ($i>=16); # T += sigma1(X[-2])
+ &mov ("edi",&off($g));
+ &xor ($E,$t1);
+ &mov ($T,&DWP(32+4*($i&15),"esp")) if ($i<16); # X[i]
+ &mov (&DWP(32+4*($i&15),"esp"),$T) if ($i>=16 && $i<62); # save X[0]
+ &xor ($t2,"edi");
+ &ror ($E,11-6);
+ &and ($t2,$t1);
+ &mov (&off($e),$t1); # save $E, modulo-scheduled
+ &xor ($E,$t1);
+ &add ($T,&off($h)); # T += h
+ &xor ("edi",$t2); # Ch(e,f,g)
+ &ror ($E,6); # Sigma1(e)
+ &mov ($t1,$AH[0]);
+ &add ($T,"edi"); # T += Ch(e,f,g)
+
+ &ror ($t1,22-13);
+ &mov ($t2,$AH[0]);
+ &mov ("edi",&off($b));
+ &xor ($t1,$AH[0]);
+ &mov (&off($a),$AH[0]); # save $A, modulo-scheduled
+ &xor ($AH[0],"edi"); # a ^= b, (b^c) in next round
+ &ror ($t1,13-2);
+ &and ($AH[1],$AH[0]); # (b^c) &= (a^b)
+ &lea ($E,&DWP(@K256[$i],$T,$E)); # T += Sigma1(1)+K[i]
+ &xor ($t1,$t2);
+ &xor ($AH[1],"edi"); # h = Maj(a,b,c) = Ch(a^b,c,b)
+ &mov ($t2,&DWP(32+4*(($i+2)&15),"esp")) if ($i>=15 && $i<63);
+ &ror ($t1,2); # Sigma0(a)
+
+ &add ($AH[1],$E); # h += T
+ &add ($E,&off($d)); # d += T
+ &add ($AH[1],$t1); # h += Sigma0(a)
+ &mov ($t1,&DWP(32+4*(($i+15)&15),"esp")) if ($i>=15 && $i<63);
+
+ @AH = reverse(@AH); # rotate(a,h)
+ ($t1,$t2) = ($t2,$t1); # rotate(t1,t2)
+ }
+ &mov ("esi",&DWP(96,"esp")); #ctx
+ #&mov ($AH[0],&DWP(0,"esp"));
+ &xor ($AH[1],"edi"); #&mov ($AH[1],&DWP(4,"esp"));
+ #&mov ("edi", &DWP(8,"esp"));
+ &mov ("ecx",&DWP(12,"esp"));
+ &add ($AH[0],&DWP(0,"esi"));
+ &add ($AH[1],&DWP(4,"esi"));
+ &add ("edi",&DWP(8,"esi"));
+ &add ("ecx",&DWP(12,"esi"));
+ &mov (&DWP(0,"esi"),$AH[0]);
+ &mov (&DWP(4,"esi"),$AH[1]);
+ &mov (&DWP(8,"esi"),"edi");
+ &mov (&DWP(12,"esi"),"ecx");
+ #&mov (&DWP(0,"esp"),$AH[0]);
+ &mov (&DWP(4,"esp"),$AH[1]);
+ &xor ($AH[1],"edi"); # magic
+ &mov (&DWP(8,"esp"),"edi");
+ &mov (&DWP(12,"esp"),"ecx");
+ #&mov ($E,&DWP(16,"esp"));
+ &mov ("edi",&DWP(20,"esp"));
+ &mov ("ebx",&DWP(24,"esp"));
+ &mov ("ecx",&DWP(28,"esp"));
+ &add ($E,&DWP(16,"esi"));
+ &add ("edi",&DWP(20,"esi"));
+ &add ("ebx",&DWP(24,"esi"));
+ &add ("ecx",&DWP(28,"esi"));
+ &mov (&DWP(16,"esi"),$E);
+ &mov (&DWP(20,"esi"),"edi");
+ &mov (&DWP(24,"esi"),"ebx");
+ &mov (&DWP(28,"esi"),"ecx");
+ #&mov (&DWP(16,"esp"),$E);
+ &mov (&DWP(20,"esp"),"edi");
+ &mov ("edi",&DWP(96+4,"esp")); # inp
+ &mov (&DWP(24,"esp"),"ebx");
+ &mov (&DWP(28,"esp"),"ecx");
+
+ &cmp ("edi",&DWP(96+8,"esp")); # are we done yet?
+ &jb (&label("grand_loop"));
+
+ &mov ("esp",&DWP(96+12,"esp")); # restore sp
+&function_end_A();
+}
+ if (!$i386 && $xmm) {{{
+if ($shaext) {
+######################################################################
+# Intel SHA Extensions implementation of SHA256 update function.
+#
+my ($ctx,$inp,$end)=("esi","edi","eax");
+my ($Wi,$ABEF,$CDGH,$TMP)=map("xmm$_",(0..2,7));
+my @MSG=map("xmm$_",(3..6));
+
+sub sha256op38 {
+ my ($opcodelet,$dst,$src)=@_;
+ if ("$dst:$src" =~ /xmm([0-7]):xmm([0-7])/)
+ { &data_byte(0x0f,0x38,$opcodelet,0xc0|($1<<3)|$2); }
+}
+sub sha256rnds2 { sha256op38(0xcb,@_); }
+sub sha256msg1 { sha256op38(0xcc,@_); }
+sub sha256msg2 { sha256op38(0xcd,@_); }
+
+&set_label("shaext",32);
+ &sub ("esp",32);
+
+ &movdqu ($ABEF,&QWP(0,$ctx)); # DCBA
+ &lea ($K256,&DWP(0x80,$K256));
+ &movdqu ($CDGH,&QWP(16,$ctx)); # HGFE
+ &movdqa ($TMP,&QWP(0x100-0x80,$K256)); # byte swap mask
+
+ &pshufd ($Wi,$ABEF,0x1b); # ABCD
+ &pshufd ($ABEF,$ABEF,0xb1); # CDAB
+ &pshufd ($CDGH,$CDGH,0x1b); # EFGH
+ &palignr ($ABEF,$CDGH,8); # ABEF
+ &punpcklqdq ($CDGH,$Wi); # CDGH
+ &jmp (&label("loop_shaext"));
+
+&set_label("loop_shaext",16);
+ &movdqu (@MSG[0],&QWP(0,$inp));
+ &movdqu (@MSG[1],&QWP(0x10,$inp));
+ &movdqu (@MSG[2],&QWP(0x20,$inp));
+ &pshufb (@MSG[0],$TMP);
+ &movdqu (@MSG[3],&QWP(0x30,$inp));
+ &movdqa (&QWP(16,"esp"),$CDGH); # offload
+
+ &movdqa ($Wi,&QWP(0*16-0x80,$K256));
+ &paddd ($Wi,@MSG[0]);
+ &pshufb (@MSG[1],$TMP);
+ &sha256rnds2 ($CDGH,$ABEF); # 0-3
+ &pshufd ($Wi,$Wi,0x0e);
+ &nop ();
+ &movdqa (&QWP(0,"esp"),$ABEF); # offload
+ &sha256rnds2 ($ABEF,$CDGH);
+
+ &movdqa ($Wi,&QWP(1*16-0x80,$K256));
+ &paddd ($Wi,@MSG[1]);
+ &pshufb (@MSG[2],$TMP);
+ &sha256rnds2 ($CDGH,$ABEF); # 4-7
+ &pshufd ($Wi,$Wi,0x0e);
+ &lea ($inp,&DWP(0x40,$inp));
+ &sha256msg1 (@MSG[0],@MSG[1]);
+ &sha256rnds2 ($ABEF,$CDGH);
+
+ &movdqa ($Wi,&QWP(2*16-0x80,$K256));
+ &paddd ($Wi,@MSG[2]);
+ &pshufb (@MSG[3],$TMP);
+ &sha256rnds2 ($CDGH,$ABEF); # 8-11
+ &pshufd ($Wi,$Wi,0x0e);
+ &movdqa ($TMP,@MSG[3]);
+ &palignr ($TMP,@MSG[2],4);
+ &nop ();
+ &paddd (@MSG[0],$TMP);
+ &sha256msg1 (@MSG[1],@MSG[2]);
+ &sha256rnds2 ($ABEF,$CDGH);
+
+ &movdqa ($Wi,&QWP(3*16-0x80,$K256));
+ &paddd ($Wi,@MSG[3]);
+ &sha256msg2 (@MSG[0],@MSG[3]);
+ &sha256rnds2 ($CDGH,$ABEF); # 12-15
+ &pshufd ($Wi,$Wi,0x0e);
+ &movdqa ($TMP,@MSG[0]);
+ &palignr ($TMP,@MSG[3],4);
+ &nop ();
+ &paddd (@MSG[1],$TMP);
+ &sha256msg1 (@MSG[2],@MSG[3]);
+ &sha256rnds2 ($ABEF,$CDGH);
+
+for($i=4;$i<16-3;$i++) {
+ &movdqa ($Wi,&QWP($i*16-0x80,$K256));
+ &paddd ($Wi,@MSG[0]);
+ &sha256msg2 (@MSG[1],@MSG[0]);
+ &sha256rnds2 ($CDGH,$ABEF); # 16-19...
+ &pshufd ($Wi,$Wi,0x0e);
+ &movdqa ($TMP,@MSG[1]);
+ &palignr ($TMP,@MSG[0],4);
+ &nop ();
+ &paddd (@MSG[2],$TMP);
+ &sha256msg1 (@MSG[3],@MSG[0]);
+ &sha256rnds2 ($ABEF,$CDGH);
+
+ push(@MSG,shift(@MSG));
+}
+ &movdqa ($Wi,&QWP(13*16-0x80,$K256));
+ &paddd ($Wi,@MSG[0]);
+ &sha256msg2 (@MSG[1],@MSG[0]);
+ &sha256rnds2 ($CDGH,$ABEF); # 52-55
+ &pshufd ($Wi,$Wi,0x0e);
+ &movdqa ($TMP,@MSG[1])
+ &palignr ($TMP,@MSG[0],4);
+ &sha256rnds2 ($ABEF,$CDGH);
+ &paddd (@MSG[2],$TMP);
+
+ &movdqa ($Wi,&QWP(14*16-0x80,$K256));
+ &paddd ($Wi,@MSG[1]);
+ &sha256rnds2 ($CDGH,$ABEF); # 56-59
+ &pshufd ($Wi,$Wi,0x0e);
+ &sha256msg2 (@MSG[2],@MSG[1]);
+ &movdqa ($TMP,&QWP(0x100-0x80,$K256)); # byte swap mask
+ &sha256rnds2 ($ABEF,$CDGH);
+
+ &movdqa ($Wi,&QWP(15*16-0x80,$K256));
+ &paddd ($Wi,@MSG[2]);
+ &nop ();
+ &sha256rnds2 ($CDGH,$ABEF); # 60-63
+ &pshufd ($Wi,$Wi,0x0e);
+ &cmp ($end,$inp);
+ &nop ();
+ &sha256rnds2 ($ABEF,$CDGH);
+
+ &paddd ($CDGH,&QWP(16,"esp"));
+ &paddd ($ABEF,&QWP(0,"esp"));
+ &jnz (&label("loop_shaext"));
+
+ &pshufd ($CDGH,$CDGH,0xb1); # DCHG
+ &pshufd ($TMP,$ABEF,0x1b); # FEBA
+ &pshufd ($ABEF,$ABEF,0xb1); # BAFE
+ &punpckhqdq ($ABEF,$CDGH); # DCBA
+ &palignr ($CDGH,$TMP,8); # HGFE
+
+ &mov ("esp",&DWP(32+12,"esp"));
+ &movdqu (&QWP(0,$ctx),$ABEF);
+ &movdqu (&QWP(16,$ctx),$CDGH);
+&function_end_A();
+}
+
+my @X = map("xmm$_",(0..3));
+my ($t0,$t1,$t2,$t3) = map("xmm$_",(4..7));
+my @AH = ($A,$T);
+
+&set_label("SSSE3",32);
+ &lea ("esp",&DWP(-96,"esp"));
+ # copy ctx->h[0-7] to A,B,C,D,E,F,G,H on stack
+ &mov ($AH[0],&DWP(0,"esi"));
+ &mov ($AH[1],&DWP(4,"esi"));
+ &mov ("ecx",&DWP(8,"esi"));
+ &mov ("edi",&DWP(12,"esi"));
+ #&mov (&DWP(0,"esp"),$AH[0]);
+ &mov (&DWP(4,"esp"),$AH[1]);
+ &xor ($AH[1],"ecx"); # magic
+ &mov (&DWP(8,"esp"),"ecx");
+ &mov (&DWP(12,"esp"),"edi");
+ &mov ($E,&DWP(16,"esi"));
+ &mov ("edi",&DWP(20,"esi"));
+ &mov ("ecx",&DWP(24,"esi"));
+ &mov ("esi",&DWP(28,"esi"));
+ #&mov (&DWP(16,"esp"),$E);
+ &mov (&DWP(20,"esp"),"edi");
+ &mov ("edi",&DWP(96+4,"esp")); # inp
+ &mov (&DWP(24,"esp"),"ecx");
+ &mov (&DWP(28,"esp"),"esi");
+ &movdqa ($t3,&QWP(256,$K256));
+ &jmp (&label("grand_ssse3"));
+
+&set_label("grand_ssse3",16);
+ # load input, reverse byte order, add K256[0..15], save to stack
+ &movdqu (@X[0],&QWP(0,"edi"));
+ &movdqu (@X[1],&QWP(16,"edi"));
+ &movdqu (@X[2],&QWP(32,"edi"));
+ &movdqu (@X[3],&QWP(48,"edi"));
+ &add ("edi",64);
+ &pshufb (@X[0],$t3);
+ &mov (&DWP(96+4,"esp"),"edi");
+ &pshufb (@X[1],$t3);
+ &movdqa ($t0,&QWP(0,$K256));
+ &pshufb (@X[2],$t3);
+ &movdqa ($t1,&QWP(16,$K256));
+ &paddd ($t0,@X[0]);
+ &pshufb (@X[3],$t3);
+ &movdqa ($t2,&QWP(32,$K256));
+ &paddd ($t1,@X[1]);
+ &movdqa ($t3,&QWP(48,$K256));
+ &movdqa (&QWP(32+0,"esp"),$t0);
+ &paddd ($t2,@X[2]);
+ &movdqa (&QWP(32+16,"esp"),$t1);
+ &paddd ($t3,@X[3]);
+ &movdqa (&QWP(32+32,"esp"),$t2);
+ &movdqa (&QWP(32+48,"esp"),$t3);
+ &jmp (&label("ssse3_00_47"));
+
+&set_label("ssse3_00_47",16);
+ &add ($K256,64);
+
+sub SSSE3_00_47 () {
+my $j = shift;
+my $body = shift;
+my @X = @_;
+my @insns = (&$body,&$body,&$body,&$body); # 120 instructions
+
+ eval(shift(@insns));
+ &movdqa ($t0,@X[1]);
+ eval(shift(@insns)); # @
+ eval(shift(@insns));
+ &movdqa ($t3,@X[3]);
+ eval(shift(@insns));
+ eval(shift(@insns));
+ &palignr ($t0,@X[0],4); # X[1..4]
+ eval(shift(@insns));
+ eval(shift(@insns)); # @
+ eval(shift(@insns));
+ &palignr ($t3,@X[2],4); # X[9..12]
+ eval(shift(@insns));
+ eval(shift(@insns));
+ eval(shift(@insns));
+ &movdqa ($t1,$t0);
+ eval(shift(@insns)); # @
+ eval(shift(@insns));
+ &movdqa ($t2,$t0);
+ eval(shift(@insns));
+ eval(shift(@insns));
+ &psrld ($t0,3);
+ eval(shift(@insns));
+ eval(shift(@insns)); # @
+ &paddd (@X[0],$t3); # X[0..3] += X[9..12]
+ eval(shift(@insns));
+ eval(shift(@insns));
+ &psrld ($t2,7);
+ eval(shift(@insns));
+ eval(shift(@insns));
+ eval(shift(@insns)); # @
+ eval(shift(@insns));
+ &pshufd ($t3,@X[3],0b11111010); # X[14..15]
+ eval(shift(@insns));
+ eval(shift(@insns));
+ &pslld ($t1,32-18);
+ eval(shift(@insns));
+ eval(shift(@insns)); # @
+ &pxor ($t0,$t2);
+ eval(shift(@insns));
+ eval(shift(@insns));
+ &psrld ($t2,18-7);
+ eval(shift(@insns));
+ eval(shift(@insns));
+ eval(shift(@insns)); # @
+ &pxor ($t0,$t1);
+ eval(shift(@insns));
+ eval(shift(@insns));
+ &pslld ($t1,18-7);
+ eval(shift(@insns));
+ eval(shift(@insns));
+ eval(shift(@insns)); # @
+ &pxor ($t0,$t2);
+ eval(shift(@insns));
+ eval(shift(@insns));
+ &movdqa ($t2,$t3);
+ eval(shift(@insns));
+ eval(shift(@insns));
+ eval(shift(@insns)); # @
+ &pxor ($t0,$t1); # sigma0(X[1..4])
+ eval(shift(@insns));
+ eval(shift(@insns));
+ &psrld ($t3,10);
+ eval(shift(@insns));
+ eval(shift(@insns));
+ eval(shift(@insns)); # @
+ &paddd (@X[0],$t0); # X[0..3] += sigma0(X[1..4])
+ eval(shift(@insns));
+ eval(shift(@insns));
+ &psrlq ($t2,17);
+ eval(shift(@insns));
+ eval(shift(@insns));
+ eval(shift(@insns)); # @
+ &pxor ($t3,$t2);
+ eval(shift(@insns));
+ eval(shift(@insns));
+ &psrlq ($t2,19-17);
+ eval(shift(@insns));
+ eval(shift(@insns));
+ eval(shift(@insns)); # @
+ &pxor ($t3,$t2);
+ eval(shift(@insns));
+ eval(shift(@insns));
+ &pshufd ($t3,$t3,0b10000000);
+ eval(shift(@insns));
+ eval(shift(@insns));
+ eval(shift(@insns)); # @
+ eval(shift(@insns));
+ eval(shift(@insns));
+ eval(shift(@insns));
+ eval(shift(@insns));
+ eval(shift(@insns)); # @
+ eval(shift(@insns));
+ &psrldq ($t3,8);
+ eval(shift(@insns));
+ eval(shift(@insns));
+ eval(shift(@insns));
+ &paddd (@X[0],$t3); # X[0..1] += sigma1(X[14..15])
+ eval(shift(@insns)); # @
+ eval(shift(@insns));
+ eval(shift(@insns));
+ eval(shift(@insns));
+ eval(shift(@insns));
+ eval(shift(@insns)); # @
+ eval(shift(@insns));
+ &pshufd ($t3,@X[0],0b01010000); # X[16..17]
+ eval(shift(@insns));
+ eval(shift(@insns));
+ eval(shift(@insns));
+ &movdqa ($t2,$t3);
+ eval(shift(@insns)); # @
+ &psrld ($t3,10);
+ eval(shift(@insns));
+ &psrlq ($t2,17);
+ eval(shift(@insns));
+ eval(shift(@insns));
+ eval(shift(@insns));
+ eval(shift(@insns)); # @
+ &pxor ($t3,$t2);
+ eval(shift(@insns));
+ eval(shift(@insns));
+ &psrlq ($t2,19-17);
+ eval(shift(@insns));
+ eval(shift(@insns));
+ eval(shift(@insns)); # @
+ &pxor ($t3,$t2);
+ eval(shift(@insns));
+ eval(shift(@insns));
+ eval(shift(@insns));
+ &pshufd ($t3,$t3,0b00001000);
+ eval(shift(@insns));
+ eval(shift(@insns)); # @
+ &movdqa ($t2,&QWP(16*$j,$K256));
+ eval(shift(@insns));
+ eval(shift(@insns));
+ &pslldq ($t3,8);
+ eval(shift(@insns));
+ eval(shift(@insns));
+ eval(shift(@insns)); # @
+ eval(shift(@insns));
+ eval(shift(@insns));
+ eval(shift(@insns));
+ eval(shift(@insns));
+ eval(shift(@insns)); # @
+ &paddd (@X[0],$t3); # X[2..3] += sigma1(X[16..17])
+ eval(shift(@insns));
+ eval(shift(@insns));
+ eval(shift(@insns));
+ eval(shift(@insns));
+ &paddd ($t2,@X[0]);
+ eval(shift(@insns)); # @
+
+ foreach (@insns) { eval; } # remaining instructions
+
+ &movdqa (&QWP(32+16*$j,"esp"),$t2);
+}
+
+sub body_00_15 () {
+ (
+ '&mov ("ecx",$E);',
+ '&ror ($E,25-11);',
+ '&mov ("esi",&off($f));',
+ '&xor ($E,"ecx");',
+ '&mov ("edi",&off($g));',
+ '&xor ("esi","edi");',
+ '&ror ($E,11-6);',
+ '&and ("esi","ecx");',
+ '&mov (&off($e),"ecx");', # save $E, modulo-scheduled
+ '&xor ($E,"ecx");',
+ '&xor ("edi","esi");', # Ch(e,f,g)
+ '&ror ($E,6);', # T = Sigma1(e)
+ '&mov ("ecx",$AH[0]);',
+ '&add ($E,"edi");', # T += Ch(e,f,g)
+ '&mov ("edi",&off($b));',
+ '&mov ("esi",$AH[0]);',
+
+ '&ror ("ecx",22-13);',
+ '&mov (&off($a),$AH[0]);', # save $A, modulo-scheduled
+ '&xor ("ecx",$AH[0]);',
+ '&xor ($AH[0],"edi");', # a ^= b, (b^c) in next round
+ '&add ($E,&off($h));', # T += h
+ '&ror ("ecx",13-2);',
+ '&and ($AH[1],$AH[0]);', # (b^c) &= (a^b)
+ '&xor ("ecx","esi");',
+ '&add ($E,&DWP(32+4*($i&15),"esp"));', # T += K[i]+X[i]
+ '&xor ($AH[1],"edi");', # h = Maj(a,b,c) = Ch(a^b,c,b)
+ '&ror ("ecx",2);', # Sigma0(a)
+
+ '&add ($AH[1],$E);', # h += T
+ '&add ($E,&off($d));', # d += T
+ '&add ($AH[1],"ecx");'. # h += Sigma0(a)
+
+ '@AH = reverse(@AH); $i++;' # rotate(a,h)
+ );
+}
+
+ for ($i=0,$j=0; $j<4; $j++) {
+ &SSSE3_00_47($j,\&body_00_15,@X);
+ push(@X,shift(@X)); # rotate(@X)
+ }
+ &cmp (&DWP(16*$j,$K256),0x00010203);
+ &jne (&label("ssse3_00_47"));
+
+ for ($i=0; $i<16; ) {
+ foreach(body_00_15()) { eval; }
+ }
+
+ &mov ("esi",&DWP(96,"esp")); #ctx
+ #&mov ($AH[0],&DWP(0,"esp"));
+ &xor ($AH[1],"edi"); #&mov ($AH[1],&DWP(4,"esp"));
+ #&mov ("edi", &DWP(8,"esp"));
+ &mov ("ecx",&DWP(12,"esp"));
+ &add ($AH[0],&DWP(0,"esi"));
+ &add ($AH[1],&DWP(4,"esi"));
+ &add ("edi",&DWP(8,"esi"));
+ &add ("ecx",&DWP(12,"esi"));
+ &mov (&DWP(0,"esi"),$AH[0]);
+ &mov (&DWP(4,"esi"),$AH[1]);
+ &mov (&DWP(8,"esi"),"edi");
+ &mov (&DWP(12,"esi"),"ecx");
+ #&mov (&DWP(0,"esp"),$AH[0]);
+ &mov (&DWP(4,"esp"),$AH[1]);
+ &xor ($AH[1],"edi"); # magic
+ &mov (&DWP(8,"esp"),"edi");
+ &mov (&DWP(12,"esp"),"ecx");
+ #&mov ($E,&DWP(16,"esp"));
+ &mov ("edi",&DWP(20,"esp"));
+ &mov ("ecx",&DWP(24,"esp"));
+ &add ($E,&DWP(16,"esi"));
+ &add ("edi",&DWP(20,"esi"));
+ &add ("ecx",&DWP(24,"esi"));
+ &mov (&DWP(16,"esi"),$E);
+ &mov (&DWP(20,"esi"),"edi");
+ &mov (&DWP(20,"esp"),"edi");
+ &mov ("edi",&DWP(28,"esp"));
+ &mov (&DWP(24,"esi"),"ecx");
+ #&mov (&DWP(16,"esp"),$E);
+ &add ("edi",&DWP(28,"esi"));
+ &mov (&DWP(24,"esp"),"ecx");
+ &mov (&DWP(28,"esi"),"edi");
+ &mov (&DWP(28,"esp"),"edi");
+ &mov ("edi",&DWP(96+4,"esp")); # inp
+
+ &movdqa ($t3,&QWP(64,$K256));
+ &sub ($K256,3*64); # rewind K
+ &cmp ("edi",&DWP(96+8,"esp")); # are we done yet?
+ &jb (&label("grand_ssse3"));
+
+ &mov ("esp",&DWP(96+12,"esp")); # restore sp
+&function_end_A();
+ if ($avx) {
+&set_label("AVX",32);
+ if ($avx>1) {
+ &and ("edx",1<<8|1<<3); # check for BMI2+BMI1
+ &cmp ("edx",1<<8|1<<3);
+ &je (&label("AVX_BMI"));
+ }
+ &lea ("esp",&DWP(-96,"esp"));
+ &vzeroall ();
+ # copy ctx->h[0-7] to A,B,C,D,E,F,G,H on stack
+ &mov ($AH[0],&DWP(0,"esi"));
+ &mov ($AH[1],&DWP(4,"esi"));
+ &mov ("ecx",&DWP(8,"esi"));
+ &mov ("edi",&DWP(12,"esi"));
+ #&mov (&DWP(0,"esp"),$AH[0]);
+ &mov (&DWP(4,"esp"),$AH[1]);
+ &xor ($AH[1],"ecx"); # magic
+ &mov (&DWP(8,"esp"),"ecx");
+ &mov (&DWP(12,"esp"),"edi");
+ &mov ($E,&DWP(16,"esi"));
+ &mov ("edi",&DWP(20,"esi"));
+ &mov ("ecx",&DWP(24,"esi"));
+ &mov ("esi",&DWP(28,"esi"));
+ #&mov (&DWP(16,"esp"),$E);
+ &mov (&DWP(20,"esp"),"edi");
+ &mov ("edi",&DWP(96+4,"esp")); # inp
+ &mov (&DWP(24,"esp"),"ecx");
+ &mov (&DWP(28,"esp"),"esi");
+ &vmovdqa ($t3,&QWP(256,$K256));
+ &jmp (&label("grand_avx"));
+
+&set_label("grand_avx",32);
+ # load input, reverse byte order, add K256[0..15], save to stack
+ &vmovdqu (@X[0],&QWP(0,"edi"));
+ &vmovdqu (@X[1],&QWP(16,"edi"));
+ &vmovdqu (@X[2],&QWP(32,"edi"));
+ &vmovdqu (@X[3],&QWP(48,"edi"));
+ &add ("edi",64);
+ &vpshufb (@X[0],@X[0],$t3);
+ &mov (&DWP(96+4,"esp"),"edi");
+ &vpshufb (@X[1],@X[1],$t3);
+ &vpshufb (@X[2],@X[2],$t3);
+ &vpaddd ($t0,@X[0],&QWP(0,$K256));
+ &vpshufb (@X[3],@X[3],$t3);
+ &vpaddd ($t1,@X[1],&QWP(16,$K256));
+ &vpaddd ($t2,@X[2],&QWP(32,$K256));
+ &vpaddd ($t3,@X[3],&QWP(48,$K256));
+ &vmovdqa (&QWP(32+0,"esp"),$t0);
+ &vmovdqa (&QWP(32+16,"esp"),$t1);
+ &vmovdqa (&QWP(32+32,"esp"),$t2);
+ &vmovdqa (&QWP(32+48,"esp"),$t3);
+ &jmp (&label("avx_00_47"));
+
+&set_label("avx_00_47",16);
+ &add ($K256,64);
+
+sub Xupdate_AVX () {
+ (
+ '&vpalignr ($t0,@X[1],@X[0],4);', # X[1..4]
+ '&vpalignr ($t3,@X[3],@X[2],4);', # X[9..12]
+ '&vpsrld ($t2,$t0,7);',
+ '&vpaddd (@X[0],@X[0],$t3);', # X[0..3] += X[9..16]
+ '&vpsrld ($t3,$t0,3);',
+ '&vpslld ($t1,$t0,14);',
+ '&vpxor ($t0,$t3,$t2);',
+ '&vpshufd ($t3,@X[3],0b11111010)',# X[14..15]
+ '&vpsrld ($t2,$t2,18-7);',
+ '&vpxor ($t0,$t0,$t1);',
+ '&vpslld ($t1,$t1,25-14);',
+ '&vpxor ($t0,$t0,$t2);',
+ '&vpsrld ($t2,$t3,10);',
+ '&vpxor ($t0,$t0,$t1);', # sigma0(X[1..4])
+ '&vpsrlq ($t1,$t3,17);',
+ '&vpaddd (@X[0],@X[0],$t0);', # X[0..3] += sigma0(X[1..4])
+ '&vpxor ($t2,$t2,$t1);',
+ '&vpsrlq ($t3,$t3,19);',
+ '&vpxor ($t2,$t2,$t3);', # sigma1(X[14..15]
+ '&vpshufd ($t3,$t2,0b10000100);',
+ '&vpsrldq ($t3,$t3,8);',
+ '&vpaddd (@X[0],@X[0],$t3);', # X[0..1] += sigma1(X[14..15])
+ '&vpshufd ($t3,@X[0],0b01010000)',# X[16..17]
+ '&vpsrld ($t2,$t3,10);',
+ '&vpsrlq ($t1,$t3,17);',
+ '&vpxor ($t2,$t2,$t1);',
+ '&vpsrlq ($t3,$t3,19);',
+ '&vpxor ($t2,$t2,$t3);', # sigma1(X[16..17]
+ '&vpshufd ($t3,$t2,0b11101000);',
+ '&vpslldq ($t3,$t3,8);',
+ '&vpaddd (@X[0],@X[0],$t3);' # X[2..3] += sigma1(X[16..17])
+ );
+}
+
+local *ror = sub { &shrd(@_[0],@_) };
+sub AVX_00_47 () {
+my $j = shift;
+my $body = shift;
+my @X = @_;
+my @insns = (&$body,&$body,&$body,&$body); # 120 instructions
+my $insn;
+
+ foreach (Xupdate_AVX()) { # 31 instructions
+ eval;
+ eval(shift(@insns));
+ eval(shift(@insns));
+ eval($insn = shift(@insns));
+ eval(shift(@insns)) if ($insn =~ /rorx/ && @insns[0] =~ /rorx/);
+ }
+ &vpaddd ($t2,@X[0],&QWP(16*$j,$K256));
+ foreach (@insns) { eval; } # remaining instructions
+ &vmovdqa (&QWP(32+16*$j,"esp"),$t2);
+}
+
+ for ($i=0,$j=0; $j<4; $j++) {
+ &AVX_00_47($j,\&body_00_15,@X);
+ push(@X,shift(@X)); # rotate(@X)
+ }
+ &cmp (&DWP(16*$j,$K256),0x00010203);
+ &jne (&label("avx_00_47"));
+
+ for ($i=0; $i<16; ) {
+ foreach(body_00_15()) { eval; }
+ }
+
+ &mov ("esi",&DWP(96,"esp")); #ctx
+ #&mov ($AH[0],&DWP(0,"esp"));
+ &xor ($AH[1],"edi"); #&mov ($AH[1],&DWP(4,"esp"));
+ #&mov ("edi", &DWP(8,"esp"));
+ &mov ("ecx",&DWP(12,"esp"));
+ &add ($AH[0],&DWP(0,"esi"));
+ &add ($AH[1],&DWP(4,"esi"));
+ &add ("edi",&DWP(8,"esi"));
+ &add ("ecx",&DWP(12,"esi"));
+ &mov (&DWP(0,"esi"),$AH[0]);
+ &mov (&DWP(4,"esi"),$AH[1]);
+ &mov (&DWP(8,"esi"),"edi");
+ &mov (&DWP(12,"esi"),"ecx");
+ #&mov (&DWP(0,"esp"),$AH[0]);
+ &mov (&DWP(4,"esp"),$AH[1]);
+ &xor ($AH[1],"edi"); # magic
+ &mov (&DWP(8,"esp"),"edi");
+ &mov (&DWP(12,"esp"),"ecx");
+ #&mov ($E,&DWP(16,"esp"));
+ &mov ("edi",&DWP(20,"esp"));
+ &mov ("ecx",&DWP(24,"esp"));
+ &add ($E,&DWP(16,"esi"));
+ &add ("edi",&DWP(20,"esi"));
+ &add ("ecx",&DWP(24,"esi"));
+ &mov (&DWP(16,"esi"),$E);
+ &mov (&DWP(20,"esi"),"edi");
+ &mov (&DWP(20,"esp"),"edi");
+ &mov ("edi",&DWP(28,"esp"));
+ &mov (&DWP(24,"esi"),"ecx");
+ #&mov (&DWP(16,"esp"),$E);
+ &add ("edi",&DWP(28,"esi"));
+ &mov (&DWP(24,"esp"),"ecx");
+ &mov (&DWP(28,"esi"),"edi");
+ &mov (&DWP(28,"esp"),"edi");
+ &mov ("edi",&DWP(96+4,"esp")); # inp
+
+ &vmovdqa ($t3,&QWP(64,$K256));
+ &sub ($K256,3*64); # rewind K
+ &cmp ("edi",&DWP(96+8,"esp")); # are we done yet?
+ &jb (&label("grand_avx"));
+
+ &mov ("esp",&DWP(96+12,"esp")); # restore sp
+ &vzeroall ();
+&function_end_A();
+ if ($avx>1) {
+sub bodyx_00_15 () { # +10%
+ (
+ '&rorx ("ecx",$E,6)',
+ '&rorx ("esi",$E,11)',
+ '&mov (&off($e),$E)', # save $E, modulo-scheduled
+ '&rorx ("edi",$E,25)',
+ '&xor ("ecx","esi")',
+ '&andn ("esi",$E,&off($g))',
+ '&xor ("ecx","edi")', # Sigma1(e)
+ '&and ($E,&off($f))',
+ '&mov (&off($a),$AH[0]);', # save $A, modulo-scheduled
+ '&or ($E,"esi")', # T = Ch(e,f,g)
+
+ '&rorx ("edi",$AH[0],2)',
+ '&rorx ("esi",$AH[0],13)',
+ '&lea ($E,&DWP(0,$E,"ecx"))', # T += Sigma1(e)
+ '&rorx ("ecx",$AH[0],22)',
+ '&xor ("esi","edi")',
+ '&mov ("edi",&off($b))',
+ '&xor ("ecx","esi")', # Sigma0(a)
+
+ '&xor ($AH[0],"edi")', # a ^= b, (b^c) in next round
+ '&add ($E,&off($h))', # T += h
+ '&and ($AH[1],$AH[0])', # (b^c) &= (a^b)
+ '&add ($E,&DWP(32+4*($i&15),"esp"))', # T += K[i]+X[i]
+ '&xor ($AH[1],"edi")', # h = Maj(a,b,c) = Ch(a^b,c,b)
+
+ '&add ("ecx",$E)', # h += T
+ '&add ($E,&off($d))', # d += T
+ '&lea ($AH[1],&DWP(0,$AH[1],"ecx"));'. # h += Sigma0(a)
+
+ '@AH = reverse(@AH); $i++;' # rotate(a,h)
+ );
+}
+
+&set_label("AVX_BMI",32);
+ &lea ("esp",&DWP(-96,"esp"));
+ &vzeroall ();
+ # copy ctx->h[0-7] to A,B,C,D,E,F,G,H on stack
+ &mov ($AH[0],&DWP(0,"esi"));
+ &mov ($AH[1],&DWP(4,"esi"));
+ &mov ("ecx",&DWP(8,"esi"));
+ &mov ("edi",&DWP(12,"esi"));
+ #&mov (&DWP(0,"esp"),$AH[0]);
+ &mov (&DWP(4,"esp"),$AH[1]);
+ &xor ($AH[1],"ecx"); # magic
+ &mov (&DWP(8,"esp"),"ecx");
+ &mov (&DWP(12,"esp"),"edi");
+ &mov ($E,&DWP(16,"esi"));
+ &mov ("edi",&DWP(20,"esi"));
+ &mov ("ecx",&DWP(24,"esi"));
+ &mov ("esi",&DWP(28,"esi"));
+ #&mov (&DWP(16,"esp"),$E);
+ &mov (&DWP(20,"esp"),"edi");
+ &mov ("edi",&DWP(96+4,"esp")); # inp
+ &mov (&DWP(24,"esp"),"ecx");
+ &mov (&DWP(28,"esp"),"esi");
+ &vmovdqa ($t3,&QWP(256,$K256));
+ &jmp (&label("grand_avx_bmi"));
+
+&set_label("grand_avx_bmi",32);
+ # load input, reverse byte order, add K256[0..15], save to stack
+ &vmovdqu (@X[0],&QWP(0,"edi"));
+ &vmovdqu (@X[1],&QWP(16,"edi"));
+ &vmovdqu (@X[2],&QWP(32,"edi"));
+ &vmovdqu (@X[3],&QWP(48,"edi"));
+ &add ("edi",64);
+ &vpshufb (@X[0],@X[0],$t3);
+ &mov (&DWP(96+4,"esp"),"edi");
+ &vpshufb (@X[1],@X[1],$t3);
+ &vpshufb (@X[2],@X[2],$t3);
+ &vpaddd ($t0,@X[0],&QWP(0,$K256));
+ &vpshufb (@X[3],@X[3],$t3);
+ &vpaddd ($t1,@X[1],&QWP(16,$K256));
+ &vpaddd ($t2,@X[2],&QWP(32,$K256));
+ &vpaddd ($t3,@X[3],&QWP(48,$K256));
+ &vmovdqa (&QWP(32+0,"esp"),$t0);
+ &vmovdqa (&QWP(32+16,"esp"),$t1);
+ &vmovdqa (&QWP(32+32,"esp"),$t2);
+ &vmovdqa (&QWP(32+48,"esp"),$t3);
+ &jmp (&label("avx_bmi_00_47"));
+
+&set_label("avx_bmi_00_47",16);
+ &add ($K256,64);
+
+ for ($i=0,$j=0; $j<4; $j++) {
+ &AVX_00_47($j,\&bodyx_00_15,@X);
+ push(@X,shift(@X)); # rotate(@X)
+ }
+ &cmp (&DWP(16*$j,$K256),0x00010203);
+ &jne (&label("avx_bmi_00_47"));
+
+ for ($i=0; $i<16; ) {
+ foreach(bodyx_00_15()) { eval; }
+ }
+
+ &mov ("esi",&DWP(96,"esp")); #ctx
+ #&mov ($AH[0],&DWP(0,"esp"));
+ &xor ($AH[1],"edi"); #&mov ($AH[1],&DWP(4,"esp"));
+ #&mov ("edi", &DWP(8,"esp"));
+ &mov ("ecx",&DWP(12,"esp"));
+ &add ($AH[0],&DWP(0,"esi"));
+ &add ($AH[1],&DWP(4,"esi"));
+ &add ("edi",&DWP(8,"esi"));
+ &add ("ecx",&DWP(12,"esi"));
+ &mov (&DWP(0,"esi"),$AH[0]);
+ &mov (&DWP(4,"esi"),$AH[1]);
+ &mov (&DWP(8,"esi"),"edi");
+ &mov (&DWP(12,"esi"),"ecx");
+ #&mov (&DWP(0,"esp"),$AH[0]);
+ &mov (&DWP(4,"esp"),$AH[1]);
+ &xor ($AH[1],"edi"); # magic
+ &mov (&DWP(8,"esp"),"edi");
+ &mov (&DWP(12,"esp"),"ecx");
+ #&mov ($E,&DWP(16,"esp"));
+ &mov ("edi",&DWP(20,"esp"));
+ &mov ("ecx",&DWP(24,"esp"));
+ &add ($E,&DWP(16,"esi"));
+ &add ("edi",&DWP(20,"esi"));
+ &add ("ecx",&DWP(24,"esi"));
+ &mov (&DWP(16,"esi"),$E);
+ &mov (&DWP(20,"esi"),"edi");
+ &mov (&DWP(20,"esp"),"edi");
+ &mov ("edi",&DWP(28,"esp"));
+ &mov (&DWP(24,"esi"),"ecx");
+ #&mov (&DWP(16,"esp"),$E);
+ &add ("edi",&DWP(28,"esi"));
+ &mov (&DWP(24,"esp"),"ecx");
+ &mov (&DWP(28,"esi"),"edi");
+ &mov (&DWP(28,"esp"),"edi");
+ &mov ("edi",&DWP(96+4,"esp")); # inp
+
+ &vmovdqa ($t3,&QWP(64,$K256));
+ &sub ($K256,3*64); # rewind K
+ &cmp ("edi",&DWP(96+8,"esp")); # are we done yet?
+ &jb (&label("grand_avx_bmi"));
+
+ &mov ("esp",&DWP(96+12,"esp")); # restore sp
+ &vzeroall ();
+&function_end_A();
+ }
+ }
+ }}}
+&function_end_B("sha256_block_data_order");
+
&asm_finish();
diff --git a/crypto/openssl/crypto/sha/asm/sha256-armv4.pl b/crypto/openssl/crypto/sha/asm/sha256-armv4.pl
index 9c84e8d..4fee74d 100755
--- a/crypto/openssl/crypto/sha/asm/sha256-armv4.pl
+++ b/crypto/openssl/crypto/sha/asm/sha256-armv4.pl
@@ -1,10 +1,12 @@
#!/usr/bin/env perl
# ====================================================================
-# Written by Andy Polyakov <appro@fy.chalmers.se> for the OpenSSL
+# Written by Andy Polyakov <appro@openssl.org> for the OpenSSL
# project. The module is, however, dual licensed under OpenSSL and
# CRYPTOGAMS licenses depending on where you obtain it. For further
# details see http://www.openssl.org/~appro/cryptogams/.
+#
+# Permission to use under GPL terms is granted.
# ====================================================================
# SHA256 block procedure for ARMv4. May 2007.
@@ -21,15 +23,27 @@
# February 2011.
#
# Profiler-assisted and platform-specific optimization resulted in 16%
-# improvement on Cortex A8 core and ~17 cycles per processed byte.
+# improvement on Cortex A8 core and ~15.4 cycles per processed byte.
+
+# September 2013.
+#
+# Add NEON implementation. On Cortex A8 it was measured to process one
+# byte in 12.5 cycles or 23% faster than integer-only code. Snapdragon
+# S4 does it in 12.5 cycles too, but it's 50% faster than integer-only
+# code (meaning that latter performs sub-optimally, nothing was done
+# about it).
+
+# May 2014.
+#
+# Add ARMv8 code path performing at 2.0 cpb on Apple A7.
while (($output=shift) && ($output!~/^\w[\w\-]*\.\w+$/)) {}
open STDOUT,">$output";
$ctx="r0"; $t0="r0";
-$inp="r1"; $t3="r1";
+$inp="r1"; $t4="r1";
$len="r2"; $t1="r2";
-$T1="r3";
+$T1="r3"; $t3="r3";
$A="r4";
$B="r5";
$C="r6";
@@ -52,80 +66,111 @@ my ($i,$a,$b,$c,$d,$e,$f,$g,$h) = @_;
$code.=<<___ if ($i<16);
#if __ARM_ARCH__>=7
- ldr $T1,[$inp],#4
+ @ ldr $t1,[$inp],#4 @ $i
+# if $i==15
+ str $inp,[sp,#17*4] @ make room for $t4
+# endif
+ eor $t0,$e,$e,ror#`$Sigma1[1]-$Sigma1[0]`
+ add $a,$a,$t2 @ h+=Maj(a,b,c) from the past
+ eor $t0,$t0,$e,ror#`$Sigma1[2]-$Sigma1[0]` @ Sigma1(e)
+ rev $t1,$t1
#else
- ldrb $T1,[$inp,#3] @ $i
+ @ ldrb $t1,[$inp,#3] @ $i
+ add $a,$a,$t2 @ h+=Maj(a,b,c) from the past
ldrb $t2,[$inp,#2]
- ldrb $t1,[$inp,#1]
- ldrb $t0,[$inp],#4
- orr $T1,$T1,$t2,lsl#8
- orr $T1,$T1,$t1,lsl#16
- orr $T1,$T1,$t0,lsl#24
+ ldrb $t0,[$inp,#1]
+ orr $t1,$t1,$t2,lsl#8
+ ldrb $t2,[$inp],#4
+ orr $t1,$t1,$t0,lsl#16
+# if $i==15
+ str $inp,[sp,#17*4] @ make room for $t4
+# endif
+ eor $t0,$e,$e,ror#`$Sigma1[1]-$Sigma1[0]`
+ orr $t1,$t1,$t2,lsl#24
+ eor $t0,$t0,$e,ror#`$Sigma1[2]-$Sigma1[0]` @ Sigma1(e)
#endif
___
$code.=<<___;
- mov $t0,$e,ror#$Sigma1[0]
ldr $t2,[$Ktbl],#4 @ *K256++
- eor $t0,$t0,$e,ror#$Sigma1[1]
+ add $h,$h,$t1 @ h+=X[i]
+ str $t1,[sp,#`$i%16`*4]
eor $t1,$f,$g
-#if $i>=16
- add $T1,$T1,$t3 @ from BODY_16_xx
-#elif __ARM_ARCH__>=7 && defined(__ARMEL__)
- rev $T1,$T1
-#endif
-#if $i==15
- str $inp,[sp,#17*4] @ leave room for $t3
-#endif
- eor $t0,$t0,$e,ror#$Sigma1[2] @ Sigma1(e)
+ add $h,$h,$t0,ror#$Sigma1[0] @ h+=Sigma1(e)
and $t1,$t1,$e
- str $T1,[sp,#`$i%16`*4]
- add $T1,$T1,$t0
+ add $h,$h,$t2 @ h+=K256[i]
eor $t1,$t1,$g @ Ch(e,f,g)
- add $T1,$T1,$h
- mov $h,$a,ror#$Sigma0[0]
- add $T1,$T1,$t1
- eor $h,$h,$a,ror#$Sigma0[1]
- add $T1,$T1,$t2
- eor $h,$h,$a,ror#$Sigma0[2] @ Sigma0(a)
-#if $i>=15
- ldr $t3,[sp,#`($i+2)%16`*4] @ from BODY_16_xx
+ eor $t0,$a,$a,ror#`$Sigma0[1]-$Sigma0[0]`
+ add $h,$h,$t1 @ h+=Ch(e,f,g)
+#if $i==31
+ and $t2,$t2,#0xff
+ cmp $t2,#0xf2 @ done?
+#endif
+#if $i<15
+# if __ARM_ARCH__>=7
+ ldr $t1,[$inp],#4 @ prefetch
+# else
+ ldrb $t1,[$inp,#3]
+# endif
+ eor $t2,$a,$b @ a^b, b^c in next round
+#else
+ ldr $t1,[sp,#`($i+2)%16`*4] @ from future BODY_16_xx
+ eor $t2,$a,$b @ a^b, b^c in next round
+ ldr $t4,[sp,#`($i+15)%16`*4] @ from future BODY_16_xx
#endif
- orr $t0,$a,$b
- and $t1,$a,$b
- and $t0,$t0,$c
- add $h,$h,$T1
- orr $t0,$t0,$t1 @ Maj(a,b,c)
- add $d,$d,$T1
- add $h,$h,$t0
+ eor $t0,$t0,$a,ror#`$Sigma0[2]-$Sigma0[0]` @ Sigma0(a)
+ and $t3,$t3,$t2 @ (b^c)&=(a^b)
+ add $d,$d,$h @ d+=h
+ eor $t3,$t3,$b @ Maj(a,b,c)
+ add $h,$h,$t0,ror#$Sigma0[0] @ h+=Sigma0(a)
+ @ add $h,$h,$t3 @ h+=Maj(a,b,c)
___
+ ($t2,$t3)=($t3,$t2);
}
sub BODY_16_XX {
my ($i,$a,$b,$c,$d,$e,$f,$g,$h) = @_;
$code.=<<___;
- @ ldr $t3,[sp,#`($i+1)%16`*4] @ $i
- ldr $t2,[sp,#`($i+14)%16`*4]
- mov $t0,$t3,ror#$sigma0[0]
- ldr $T1,[sp,#`($i+0)%16`*4]
- eor $t0,$t0,$t3,ror#$sigma0[1]
- ldr $t1,[sp,#`($i+9)%16`*4]
- eor $t0,$t0,$t3,lsr#$sigma0[2] @ sigma0(X[i+1])
- mov $t3,$t2,ror#$sigma1[0]
- add $T1,$T1,$t0
- eor $t3,$t3,$t2,ror#$sigma1[1]
- add $T1,$T1,$t1
- eor $t3,$t3,$t2,lsr#$sigma1[2] @ sigma1(X[i+14])
- @ add $T1,$T1,$t3
+ @ ldr $t1,[sp,#`($i+1)%16`*4] @ $i
+ @ ldr $t4,[sp,#`($i+14)%16`*4]
+ mov $t0,$t1,ror#$sigma0[0]
+ add $a,$a,$t2 @ h+=Maj(a,b,c) from the past
+ mov $t2,$t4,ror#$sigma1[0]
+ eor $t0,$t0,$t1,ror#$sigma0[1]
+ eor $t2,$t2,$t4,ror#$sigma1[1]
+ eor $t0,$t0,$t1,lsr#$sigma0[2] @ sigma0(X[i+1])
+ ldr $t1,[sp,#`($i+0)%16`*4]
+ eor $t2,$t2,$t4,lsr#$sigma1[2] @ sigma1(X[i+14])
+ ldr $t4,[sp,#`($i+9)%16`*4]
+
+ add $t2,$t2,$t0
+ eor $t0,$e,$e,ror#`$Sigma1[1]-$Sigma1[0]` @ from BODY_00_15
+ add $t1,$t1,$t2
+ eor $t0,$t0,$e,ror#`$Sigma1[2]-$Sigma1[0]` @ Sigma1(e)
+ add $t1,$t1,$t4 @ X[i]
___
&BODY_00_15(@_);
}
$code=<<___;
-#include "arm_arch.h"
+#ifndef __KERNEL__
+# include "arm_arch.h"
+#else
+# define __ARM_ARCH__ __LINUX_ARM_ARCH__
+# define __ARM_MAX_ARCH__ 7
+#endif
.text
+#if __ARM_ARCH__<7
.code 32
+#else
+.syntax unified
+# ifdef __thumb2__
+.thumb
+# else
+.code 32
+# endif
+#endif
.type K256,%object
.align 5
@@ -147,46 +192,73 @@ K256:
.word 0x748f82ee,0x78a5636f,0x84c87814,0x8cc70208
.word 0x90befffa,0xa4506ceb,0xbef9a3f7,0xc67178f2
.size K256,.-K256
+.word 0 @ terminator
+#if __ARM_MAX_ARCH__>=7 && !defined(__KERNEL__)
+.LOPENSSL_armcap:
+.word OPENSSL_armcap_P-sha256_block_data_order
+#endif
+.align 5
.global sha256_block_data_order
.type sha256_block_data_order,%function
sha256_block_data_order:
+#if __ARM_ARCH__<7
sub r3,pc,#8 @ sha256_block_data_order
+#else
+ adr r3,sha256_block_data_order
+#endif
+#if __ARM_MAX_ARCH__>=7 && !defined(__KERNEL__)
+ ldr r12,.LOPENSSL_armcap
+ ldr r12,[r3,r12] @ OPENSSL_armcap_P
+ tst r12,#ARMV8_SHA256
+ bne .LARMv8
+ tst r12,#ARMV7_NEON
+ bne .LNEON
+#endif
add $len,$inp,$len,lsl#6 @ len to point at the end of inp
stmdb sp!,{$ctx,$inp,$len,r4-r11,lr}
ldmia $ctx,{$A,$B,$C,$D,$E,$F,$G,$H}
- sub $Ktbl,r3,#256 @ K256
+ sub $Ktbl,r3,#256+32 @ K256
sub sp,sp,#16*4 @ alloca(X[16])
.Loop:
+# if __ARM_ARCH__>=7
+ ldr $t1,[$inp],#4
+# else
+ ldrb $t1,[$inp,#3]
+# endif
+ eor $t3,$B,$C @ magic
+ eor $t2,$t2,$t2
___
for($i=0;$i<16;$i++) { &BODY_00_15($i,@V); unshift(@V,pop(@V)); }
$code.=".Lrounds_16_xx:\n";
for (;$i<32;$i++) { &BODY_16_XX($i,@V); unshift(@V,pop(@V)); }
$code.=<<___;
- and $t2,$t2,#0xff
- cmp $t2,#0xf2
+#if __ARM_ARCH__>=7
+ ite eq @ Thumb2 thing, sanity check in ARM
+#endif
+ ldreq $t3,[sp,#16*4] @ pull ctx
bne .Lrounds_16_xx
- ldr $T1,[sp,#16*4] @ pull ctx
- ldr $t0,[$T1,#0]
- ldr $t1,[$T1,#4]
- ldr $t2,[$T1,#8]
+ add $A,$A,$t2 @ h+=Maj(a,b,c) from the past
+ ldr $t0,[$t3,#0]
+ ldr $t1,[$t3,#4]
+ ldr $t2,[$t3,#8]
add $A,$A,$t0
- ldr $t0,[$T1,#12]
+ ldr $t0,[$t3,#12]
add $B,$B,$t1
- ldr $t1,[$T1,#16]
+ ldr $t1,[$t3,#16]
add $C,$C,$t2
- ldr $t2,[$T1,#20]
+ ldr $t2,[$t3,#20]
add $D,$D,$t0
- ldr $t0,[$T1,#24]
+ ldr $t0,[$t3,#24]
add $E,$E,$t1
- ldr $t1,[$T1,#28]
+ ldr $t1,[$t3,#28]
add $F,$F,$t2
ldr $inp,[sp,#17*4] @ pull inp
ldr $t2,[sp,#18*4] @ pull inp+len
add $G,$G,$t0
add $H,$H,$t1
- stmia $T1,{$A,$B,$C,$D,$E,$F,$G,$H}
+ stmia $t3,{$A,$B,$C,$D,$E,$F,$G,$H}
cmp $inp,$t2
sub $Ktbl,$Ktbl,#256 @ rewind Ktbl
bne .Loop
@@ -200,12 +272,442 @@ $code.=<<___;
moveq pc,lr @ be binary compatible with V4, yet
bx lr @ interoperable with Thumb ISA:-)
#endif
-.size sha256_block_data_order,.-sha256_block_data_order
-.asciz "SHA256 block transform for ARMv4, CRYPTOGAMS by <appro\@openssl.org>"
+.size sha256_block_data_order,.-sha256_block_data_order
+___
+######################################################################
+# NEON stuff
+#
+{{{
+my @X=map("q$_",(0..3));
+my ($T0,$T1,$T2,$T3,$T4,$T5)=("q8","q9","q10","q11","d24","d25");
+my $Xfer=$t4;
+my $j=0;
+
+sub Dlo() { shift=~m|q([1]?[0-9])|?"d".($1*2):""; }
+sub Dhi() { shift=~m|q([1]?[0-9])|?"d".($1*2+1):""; }
+
+sub AUTOLOAD() # thunk [simplified] x86-style perlasm
+{ my $opcode = $AUTOLOAD; $opcode =~ s/.*:://; $opcode =~ s/_/\./;
+ my $arg = pop;
+ $arg = "#$arg" if ($arg*1 eq $arg);
+ $code .= "\t$opcode\t".join(',',@_,$arg)."\n";
+}
+
+sub Xupdate()
+{ use integer;
+ my $body = shift;
+ my @insns = (&$body,&$body,&$body,&$body);
+ my ($a,$b,$c,$d,$e,$f,$g,$h);
+
+ &vext_8 ($T0,@X[0],@X[1],4); # X[1..4]
+ eval(shift(@insns));
+ eval(shift(@insns));
+ eval(shift(@insns));
+ &vext_8 ($T1,@X[2],@X[3],4); # X[9..12]
+ eval(shift(@insns));
+ eval(shift(@insns));
+ eval(shift(@insns));
+ &vshr_u32 ($T2,$T0,$sigma0[0]);
+ eval(shift(@insns));
+ eval(shift(@insns));
+ &vadd_i32 (@X[0],@X[0],$T1); # X[0..3] += X[9..12]
+ eval(shift(@insns));
+ eval(shift(@insns));
+ &vshr_u32 ($T1,$T0,$sigma0[2]);
+ eval(shift(@insns));
+ eval(shift(@insns));
+ &vsli_32 ($T2,$T0,32-$sigma0[0]);
+ eval(shift(@insns));
+ eval(shift(@insns));
+ &vshr_u32 ($T3,$T0,$sigma0[1]);
+ eval(shift(@insns));
+ eval(shift(@insns));
+ &veor ($T1,$T1,$T2);
+ eval(shift(@insns));
+ eval(shift(@insns));
+ &vsli_32 ($T3,$T0,32-$sigma0[1]);
+ eval(shift(@insns));
+ eval(shift(@insns));
+ &vshr_u32 ($T4,&Dhi(@X[3]),$sigma1[0]);
+ eval(shift(@insns));
+ eval(shift(@insns));
+ &veor ($T1,$T1,$T3); # sigma0(X[1..4])
+ eval(shift(@insns));
+ eval(shift(@insns));
+ &vsli_32 ($T4,&Dhi(@X[3]),32-$sigma1[0]);
+ eval(shift(@insns));
+ eval(shift(@insns));
+ &vshr_u32 ($T5,&Dhi(@X[3]),$sigma1[2]);
+ eval(shift(@insns));
+ eval(shift(@insns));
+ &vadd_i32 (@X[0],@X[0],$T1); # X[0..3] += sigma0(X[1..4])
+ eval(shift(@insns));
+ eval(shift(@insns));
+ &veor ($T5,$T5,$T4);
+ eval(shift(@insns));
+ eval(shift(@insns));
+ &vshr_u32 ($T4,&Dhi(@X[3]),$sigma1[1]);
+ eval(shift(@insns));
+ eval(shift(@insns));
+ &vsli_32 ($T4,&Dhi(@X[3]),32-$sigma1[1]);
+ eval(shift(@insns));
+ eval(shift(@insns));
+ &veor ($T5,$T5,$T4); # sigma1(X[14..15])
+ eval(shift(@insns));
+ eval(shift(@insns));
+ &vadd_i32 (&Dlo(@X[0]),&Dlo(@X[0]),$T5);# X[0..1] += sigma1(X[14..15])
+ eval(shift(@insns));
+ eval(shift(@insns));
+ &vshr_u32 ($T4,&Dlo(@X[0]),$sigma1[0]);
+ eval(shift(@insns));
+ eval(shift(@insns));
+ &vsli_32 ($T4,&Dlo(@X[0]),32-$sigma1[0]);
+ eval(shift(@insns));
+ eval(shift(@insns));
+ &vshr_u32 ($T5,&Dlo(@X[0]),$sigma1[2]);
+ eval(shift(@insns));
+ eval(shift(@insns));
+ &veor ($T5,$T5,$T4);
+ eval(shift(@insns));
+ eval(shift(@insns));
+ &vshr_u32 ($T4,&Dlo(@X[0]),$sigma1[1]);
+ eval(shift(@insns));
+ eval(shift(@insns));
+ &vld1_32 ("{$T0}","[$Ktbl,:128]!");
+ eval(shift(@insns));
+ eval(shift(@insns));
+ &vsli_32 ($T4,&Dlo(@X[0]),32-$sigma1[1]);
+ eval(shift(@insns));
+ eval(shift(@insns));
+ &veor ($T5,$T5,$T4); # sigma1(X[16..17])
+ eval(shift(@insns));
+ eval(shift(@insns));
+ &vadd_i32 (&Dhi(@X[0]),&Dhi(@X[0]),$T5);# X[2..3] += sigma1(X[16..17])
+ eval(shift(@insns));
+ eval(shift(@insns));
+ &vadd_i32 ($T0,$T0,@X[0]);
+ while($#insns>=2) { eval(shift(@insns)); }
+ &vst1_32 ("{$T0}","[$Xfer,:128]!");
+ eval(shift(@insns));
+ eval(shift(@insns));
+
+ push(@X,shift(@X)); # "rotate" X[]
+}
+
+sub Xpreload()
+{ use integer;
+ my $body = shift;
+ my @insns = (&$body,&$body,&$body,&$body);
+ my ($a,$b,$c,$d,$e,$f,$g,$h);
+
+ eval(shift(@insns));
+ eval(shift(@insns));
+ eval(shift(@insns));
+ eval(shift(@insns));
+ &vld1_32 ("{$T0}","[$Ktbl,:128]!");
+ eval(shift(@insns));
+ eval(shift(@insns));
+ eval(shift(@insns));
+ eval(shift(@insns));
+ &vrev32_8 (@X[0],@X[0]);
+ eval(shift(@insns));
+ eval(shift(@insns));
+ eval(shift(@insns));
+ eval(shift(@insns));
+ &vadd_i32 ($T0,$T0,@X[0]);
+ foreach (@insns) { eval; } # remaining instructions
+ &vst1_32 ("{$T0}","[$Xfer,:128]!");
+
+ push(@X,shift(@X)); # "rotate" X[]
+}
+
+sub body_00_15 () {
+ (
+ '($a,$b,$c,$d,$e,$f,$g,$h)=@V;'.
+ '&add ($h,$h,$t1)', # h+=X[i]+K[i]
+ '&eor ($t1,$f,$g)',
+ '&eor ($t0,$e,$e,"ror#".($Sigma1[1]-$Sigma1[0]))',
+ '&add ($a,$a,$t2)', # h+=Maj(a,b,c) from the past
+ '&and ($t1,$t1,$e)',
+ '&eor ($t2,$t0,$e,"ror#".($Sigma1[2]-$Sigma1[0]))', # Sigma1(e)
+ '&eor ($t0,$a,$a,"ror#".($Sigma0[1]-$Sigma0[0]))',
+ '&eor ($t1,$t1,$g)', # Ch(e,f,g)
+ '&add ($h,$h,$t2,"ror#$Sigma1[0]")', # h+=Sigma1(e)
+ '&eor ($t2,$a,$b)', # a^b, b^c in next round
+ '&eor ($t0,$t0,$a,"ror#".($Sigma0[2]-$Sigma0[0]))', # Sigma0(a)
+ '&add ($h,$h,$t1)', # h+=Ch(e,f,g)
+ '&ldr ($t1,sprintf "[sp,#%d]",4*(($j+1)&15)) if (($j&15)!=15);'.
+ '&ldr ($t1,"[$Ktbl]") if ($j==15);'.
+ '&ldr ($t1,"[sp,#64]") if ($j==31)',
+ '&and ($t3,$t3,$t2)', # (b^c)&=(a^b)
+ '&add ($d,$d,$h)', # d+=h
+ '&add ($h,$h,$t0,"ror#$Sigma0[0]");'. # h+=Sigma0(a)
+ '&eor ($t3,$t3,$b)', # Maj(a,b,c)
+ '$j++; unshift(@V,pop(@V)); ($t2,$t3)=($t3,$t2);'
+ )
+}
+
+$code.=<<___;
+#if __ARM_MAX_ARCH__>=7
+.arch armv7-a
+.fpu neon
+
+.global sha256_block_data_order_neon
+.type sha256_block_data_order_neon,%function
+.align 4
+sha256_block_data_order_neon:
+.LNEON:
+ stmdb sp!,{r4-r12,lr}
+
+ sub $H,sp,#16*4+16
+ adr $Ktbl,K256
+ bic $H,$H,#15 @ align for 128-bit stores
+ mov $t2,sp
+ mov sp,$H @ alloca
+ add $len,$inp,$len,lsl#6 @ len to point at the end of inp
+
+ vld1.8 {@X[0]},[$inp]!
+ vld1.8 {@X[1]},[$inp]!
+ vld1.8 {@X[2]},[$inp]!
+ vld1.8 {@X[3]},[$inp]!
+ vld1.32 {$T0},[$Ktbl,:128]!
+ vld1.32 {$T1},[$Ktbl,:128]!
+ vld1.32 {$T2},[$Ktbl,:128]!
+ vld1.32 {$T3},[$Ktbl,:128]!
+ vrev32.8 @X[0],@X[0] @ yes, even on
+ str $ctx,[sp,#64]
+ vrev32.8 @X[1],@X[1] @ big-endian
+ str $inp,[sp,#68]
+ mov $Xfer,sp
+ vrev32.8 @X[2],@X[2]
+ str $len,[sp,#72]
+ vrev32.8 @X[3],@X[3]
+ str $t2,[sp,#76] @ save original sp
+ vadd.i32 $T0,$T0,@X[0]
+ vadd.i32 $T1,$T1,@X[1]
+ vst1.32 {$T0},[$Xfer,:128]!
+ vadd.i32 $T2,$T2,@X[2]
+ vst1.32 {$T1},[$Xfer,:128]!
+ vadd.i32 $T3,$T3,@X[3]
+ vst1.32 {$T2},[$Xfer,:128]!
+ vst1.32 {$T3},[$Xfer,:128]!
+
+ ldmia $ctx,{$A-$H}
+ sub $Xfer,$Xfer,#64
+ ldr $t1,[sp,#0]
+ eor $t2,$t2,$t2
+ eor $t3,$B,$C
+ b .L_00_48
+
+.align 4
+.L_00_48:
+___
+ &Xupdate(\&body_00_15);
+ &Xupdate(\&body_00_15);
+ &Xupdate(\&body_00_15);
+ &Xupdate(\&body_00_15);
+$code.=<<___;
+ teq $t1,#0 @ check for K256 terminator
+ ldr $t1,[sp,#0]
+ sub $Xfer,$Xfer,#64
+ bne .L_00_48
+
+ ldr $inp,[sp,#68]
+ ldr $t0,[sp,#72]
+ sub $Ktbl,$Ktbl,#256 @ rewind $Ktbl
+ teq $inp,$t0
+ it eq
+ subeq $inp,$inp,#64 @ avoid SEGV
+ vld1.8 {@X[0]},[$inp]! @ load next input block
+ vld1.8 {@X[1]},[$inp]!
+ vld1.8 {@X[2]},[$inp]!
+ vld1.8 {@X[3]},[$inp]!
+ it ne
+ strne $inp,[sp,#68]
+ mov $Xfer,sp
+___
+ &Xpreload(\&body_00_15);
+ &Xpreload(\&body_00_15);
+ &Xpreload(\&body_00_15);
+ &Xpreload(\&body_00_15);
+$code.=<<___;
+ ldr $t0,[$t1,#0]
+ add $A,$A,$t2 @ h+=Maj(a,b,c) from the past
+ ldr $t2,[$t1,#4]
+ ldr $t3,[$t1,#8]
+ ldr $t4,[$t1,#12]
+ add $A,$A,$t0 @ accumulate
+ ldr $t0,[$t1,#16]
+ add $B,$B,$t2
+ ldr $t2,[$t1,#20]
+ add $C,$C,$t3
+ ldr $t3,[$t1,#24]
+ add $D,$D,$t4
+ ldr $t4,[$t1,#28]
+ add $E,$E,$t0
+ str $A,[$t1],#4
+ add $F,$F,$t2
+ str $B,[$t1],#4
+ add $G,$G,$t3
+ str $C,[$t1],#4
+ add $H,$H,$t4
+ str $D,[$t1],#4
+ stmia $t1,{$E-$H}
+
+ ittte ne
+ movne $Xfer,sp
+ ldrne $t1,[sp,#0]
+ eorne $t2,$t2,$t2
+ ldreq sp,[sp,#76] @ restore original sp
+ itt ne
+ eorne $t3,$B,$C
+ bne .L_00_48
+
+ ldmia sp!,{r4-r12,pc}
+.size sha256_block_data_order_neon,.-sha256_block_data_order_neon
+#endif
+___
+}}}
+######################################################################
+# ARMv8 stuff
+#
+{{{
+my ($ABCD,$EFGH,$abcd)=map("q$_",(0..2));
+my @MSG=map("q$_",(8..11));
+my ($W0,$W1,$ABCD_SAVE,$EFGH_SAVE)=map("q$_",(12..15));
+my $Ktbl="r3";
+
+$code.=<<___;
+#if __ARM_MAX_ARCH__>=7 && !defined(__KERNEL__)
+
+# ifdef __thumb2__
+# define INST(a,b,c,d) .byte c,d|0xc,a,b
+# else
+# define INST(a,b,c,d) .byte a,b,c,d
+# endif
+
+.type sha256_block_data_order_armv8,%function
+.align 5
+sha256_block_data_order_armv8:
+.LARMv8:
+ vld1.32 {$ABCD,$EFGH},[$ctx]
+# ifdef __thumb2__
+ adr $Ktbl,.LARMv8
+ sub $Ktbl,$Ktbl,#.LARMv8-K256
+# else
+ adrl $Ktbl,K256
+# endif
+ add $len,$inp,$len,lsl#6 @ len to point at the end of inp
+
+.Loop_v8:
+ vld1.8 {@MSG[0]-@MSG[1]},[$inp]!
+ vld1.8 {@MSG[2]-@MSG[3]},[$inp]!
+ vld1.32 {$W0},[$Ktbl]!
+ vrev32.8 @MSG[0],@MSG[0]
+ vrev32.8 @MSG[1],@MSG[1]
+ vrev32.8 @MSG[2],@MSG[2]
+ vrev32.8 @MSG[3],@MSG[3]
+ vmov $ABCD_SAVE,$ABCD @ offload
+ vmov $EFGH_SAVE,$EFGH
+ teq $inp,$len
+___
+for($i=0;$i<12;$i++) {
+$code.=<<___;
+ vld1.32 {$W1},[$Ktbl]!
+ vadd.i32 $W0,$W0,@MSG[0]
+ sha256su0 @MSG[0],@MSG[1]
+ vmov $abcd,$ABCD
+ sha256h $ABCD,$EFGH,$W0
+ sha256h2 $EFGH,$abcd,$W0
+ sha256su1 @MSG[0],@MSG[2],@MSG[3]
+___
+ ($W0,$W1)=($W1,$W0); push(@MSG,shift(@MSG));
+}
+$code.=<<___;
+ vld1.32 {$W1},[$Ktbl]!
+ vadd.i32 $W0,$W0,@MSG[0]
+ vmov $abcd,$ABCD
+ sha256h $ABCD,$EFGH,$W0
+ sha256h2 $EFGH,$abcd,$W0
+
+ vld1.32 {$W0},[$Ktbl]!
+ vadd.i32 $W1,$W1,@MSG[1]
+ vmov $abcd,$ABCD
+ sha256h $ABCD,$EFGH,$W1
+ sha256h2 $EFGH,$abcd,$W1
+
+ vld1.32 {$W1},[$Ktbl]
+ vadd.i32 $W0,$W0,@MSG[2]
+ sub $Ktbl,$Ktbl,#256-16 @ rewind
+ vmov $abcd,$ABCD
+ sha256h $ABCD,$EFGH,$W0
+ sha256h2 $EFGH,$abcd,$W0
+
+ vadd.i32 $W1,$W1,@MSG[3]
+ vmov $abcd,$ABCD
+ sha256h $ABCD,$EFGH,$W1
+ sha256h2 $EFGH,$abcd,$W1
+
+ vadd.i32 $ABCD,$ABCD,$ABCD_SAVE
+ vadd.i32 $EFGH,$EFGH,$EFGH_SAVE
+ it ne
+ bne .Loop_v8
+
+ vst1.32 {$ABCD,$EFGH},[$ctx]
+
+ ret @ bx lr
+.size sha256_block_data_order_armv8,.-sha256_block_data_order_armv8
+#endif
+___
+}}}
+$code.=<<___;
+.asciz "SHA256 block transform for ARMv4/NEON/ARMv8, CRYPTOGAMS by <appro\@openssl.org>"
.align 2
+#if __ARM_MAX_ARCH__>=7 && !defined(__KERNEL__)
+.comm OPENSSL_armcap_P,4,4
+#endif
___
-$code =~ s/\`([^\`]*)\`/eval $1/gem;
-$code =~ s/\bbx\s+lr\b/.word\t0xe12fff1e/gm; # make it possible to compile with -march=armv4
-print $code;
+open SELF,$0;
+while(<SELF>) {
+ next if (/^#!/);
+ last if (!s/^#/@/ and !/^$/);
+ print;
+}
+close SELF;
+
+{ my %opcode = (
+ "sha256h" => 0xf3000c40, "sha256h2" => 0xf3100c40,
+ "sha256su0" => 0xf3ba03c0, "sha256su1" => 0xf3200c40 );
+
+ sub unsha256 {
+ my ($mnemonic,$arg)=@_;
+
+ if ($arg =~ m/q([0-9]+)(?:,\s*q([0-9]+))?,\s*q([0-9]+)/o) {
+ my $word = $opcode{$mnemonic}|(($1&7)<<13)|(($1&8)<<19)
+ |(($2&7)<<17)|(($2&8)<<4)
+ |(($3&7)<<1) |(($3&8)<<2);
+ # since ARMv7 instructions are always encoded little-endian.
+ # correct solution is to use .inst directive, but older
+ # assemblers don't implement it:-(
+ sprintf "INST(0x%02x,0x%02x,0x%02x,0x%02x)\t@ %s %s",
+ $word&0xff,($word>>8)&0xff,
+ ($word>>16)&0xff,($word>>24)&0xff,
+ $mnemonic,$arg;
+ }
+ }
+}
+
+foreach (split($/,$code)) {
+
+ s/\`([^\`]*)\`/eval $1/geo;
+
+ s/\b(sha256\w+)\s+(q.*)/unsha256($1,$2)/geo;
+
+ s/\bret\b/bx lr/go or
+ s/\bbx\s+lr\b/.word\t0xe12fff1e/go; # make it possible to compile with -march=armv4
+
+ print $_,"\n";
+}
+
close STDOUT; # enforce flush
diff --git a/crypto/openssl/crypto/sha/asm/sha256-mb-x86_64.pl b/crypto/openssl/crypto/sha/asm/sha256-mb-x86_64.pl
new file mode 100755
index 0000000..adf2ddc
--- /dev/null
+++ b/crypto/openssl/crypto/sha/asm/sha256-mb-x86_64.pl
@@ -0,0 +1,1560 @@
+#!/usr/bin/env perl
+
+# ====================================================================
+# Written by Andy Polyakov <appro@openssl.org> for the OpenSSL
+# project. The module is, however, dual licensed under OpenSSL and
+# CRYPTOGAMS licenses depending on where you obtain it. For further
+# details see http://www.openssl.org/~appro/cryptogams/.
+# ====================================================================
+
+# Multi-buffer SHA256 procedure processes n buffers in parallel by
+# placing buffer data to designated lane of SIMD register. n is
+# naturally limited to 4 on pre-AVX2 processors and to 8 on
+# AVX2-capable processors such as Haswell.
+#
+# this +aesni(i) sha256 aesni-sha256 gain(iv)
+# -------------------------------------------------------------------
+# Westmere(ii) 23.3/n +1.28=7.11(n=4) 12.3 +3.75=16.1 +126%
+# Atom(ii) 38.7/n +3.93=13.6(n=4) 20.8 +5.69=26.5 +95%
+# Sandy Bridge (20.5 +5.15=25.7)/n 11.6 13.0 +103%
+# Ivy Bridge (20.4 +5.14=25.5)/n 10.3 11.6 +82%
+# Haswell(iii) (21.0 +5.00=26.0)/n 7.80 8.79 +170%
+# Bulldozer (21.6 +5.76=27.4)/n 13.6 13.7 +100%
+#
+# (i) multi-block CBC encrypt with 128-bit key;
+# (ii) (HASH+AES)/n does not apply to Westmere for n>3 and Atom,
+# because of lower AES-NI instruction throughput, nor is there
+# AES-NI-SHA256 stitch for these processors;
+# (iii) "this" is for n=8, when we gather twice as much data, result
+# for n=4 is 20.3+4.44=24.7;
+# (iv) presented improvement coefficients are asymptotic limits and
+# in real-life application are somewhat lower, e.g. for 2KB
+# fragments they range from 75% to 130% (on Haswell);
+
+$flavour = shift;
+$output = shift;
+if ($flavour =~ /\./) { $output = $flavour; undef $flavour; }
+
+$win64=0; $win64=1 if ($flavour =~ /[nm]asm|mingw64/ || $output =~ /\.asm$/);
+
+$0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1;
+( $xlate="${dir}x86_64-xlate.pl" and -f $xlate ) or
+( $xlate="${dir}../../perlasm/x86_64-xlate.pl" and -f $xlate) or
+die "can't locate x86_64-xlate.pl";
+
+$avx=0;
+
+if (`$ENV{CC} -Wa,-v -c -o /dev/null -x assembler /dev/null 2>&1`
+ =~ /GNU assembler version ([2-9]\.[0-9]+)/) {
+ $avx = ($1>=2.19) + ($1>=2.22);
+}
+
+if (!$avx && $win64 && ($flavour =~ /nasm/ || $ENV{ASM} =~ /nasm/) &&
+ `nasm -v 2>&1` =~ /NASM version ([2-9]\.[0-9]+)/) {
+ $avx = ($1>=2.09) + ($1>=2.10);
+}
+
+if (!$avx && $win64 && ($flavour =~ /masm/ || $ENV{ASM} =~ /ml64/) &&
+ `ml64 2>&1` =~ /Version ([0-9]+)\./) {
+ $avx = ($1>=10) + ($1>=11);
+}
+
+if (!$avx && `$ENV{CC} -v 2>&1` =~ /(^clang version|based on LLVM) ([3-9]\.[0-9]+)/) {
+ $avx = ($2>=3.0) + ($2>3.0);
+}
+
+open OUT,"| \"$^X\" $xlate $flavour $output";
+*STDOUT=*OUT;
+
+# void sha256_multi_block (
+# struct { unsigned int A[8];
+# unsigned int B[8];
+# unsigned int C[8];
+# unsigned int D[8];
+# unsigned int E[8];
+# unsigned int F[8];
+# unsigned int G[8];
+# unsigned int H[8]; } *ctx,
+# struct { void *ptr; int blocks; } inp[8],
+# int num); /* 1 or 2 */
+#
+$ctx="%rdi"; # 1st arg
+$inp="%rsi"; # 2nd arg
+$num="%edx"; # 3rd arg
+@ptr=map("%r$_",(8..11));
+$Tbl="%rbp";
+
+@V=($A,$B,$C,$D,$E,$F,$G,$H)=map("%xmm$_",(8..15));
+($t1,$t2,$t3,$axb,$bxc,$Xi,$Xn,$sigma)=map("%xmm$_",(0..7));
+
+$REG_SZ=16;
+
+sub Xi_off {
+my $off = shift;
+
+ $off %= 16; $off *= $REG_SZ;
+ $off<256 ? "$off-128(%rax)" : "$off-256-128(%rbx)";
+}
+
+sub ROUND_00_15 {
+my ($i,$a,$b,$c,$d,$e,$f,$g,$h)=@_;
+
+$code.=<<___ if ($i<15);
+ movd `4*$i`(@ptr[0]),$Xi
+ movd `4*$i`(@ptr[1]),$t1
+ movd `4*$i`(@ptr[2]),$t2
+ movd `4*$i`(@ptr[3]),$t3
+ punpckldq $t2,$Xi
+ punpckldq $t3,$t1
+ punpckldq $t1,$Xi
+___
+$code.=<<___ if ($i==15);
+ movd `4*$i`(@ptr[0]),$Xi
+ lea `16*4`(@ptr[0]),@ptr[0]
+ movd `4*$i`(@ptr[1]),$t1
+ lea `16*4`(@ptr[1]),@ptr[1]
+ movd `4*$i`(@ptr[2]),$t2
+ lea `16*4`(@ptr[2]),@ptr[2]
+ movd `4*$i`(@ptr[3]),$t3
+ lea `16*4`(@ptr[3]),@ptr[3]
+ punpckldq $t2,$Xi
+ punpckldq $t3,$t1
+ punpckldq $t1,$Xi
+___
+$code.=<<___;
+ movdqa $e,$sigma
+ `"pshufb $Xn,$Xi" if ($i<=15 && ($i&1)==0)`
+ movdqa $e,$t3
+ `"pshufb $Xn,$Xi" if ($i<=15 && ($i&1)==1)`
+ psrld \$6,$sigma
+ movdqa $e,$t2
+ pslld \$7,$t3
+ movdqa $Xi,`&Xi_off($i)`
+ paddd $h,$Xi # Xi+=h
+
+ psrld \$11,$t2
+ pxor $t3,$sigma
+ pslld \$21-7,$t3
+ paddd `32*($i%8)-128`($Tbl),$Xi # Xi+=K[round]
+ pxor $t2,$sigma
+
+ psrld \$25-11,$t2
+ movdqa $e,$t1
+ `"prefetcht0 63(@ptr[0])" if ($i==15)`
+ pxor $t3,$sigma
+ movdqa $e,$axb # borrow $axb
+ pslld \$26-21,$t3
+ pandn $g,$t1
+ pand $f,$axb
+ pxor $t2,$sigma
+
+ `"prefetcht0 63(@ptr[1])" if ($i==15)`
+ movdqa $a,$t2
+ pxor $t3,$sigma # Sigma1(e)
+ movdqa $a,$t3
+ psrld \$2,$t2
+ paddd $sigma,$Xi # Xi+=Sigma1(e)
+ pxor $axb,$t1 # Ch(e,f,g)
+ movdqa $b,$axb
+ movdqa $a,$sigma
+ pslld \$10,$t3
+ pxor $a,$axb # a^b, b^c in next round
+
+ `"prefetcht0 63(@ptr[2])" if ($i==15)`
+ psrld \$13,$sigma
+ pxor $t3,$t2
+ paddd $t1,$Xi # Xi+=Ch(e,f,g)
+ pslld \$19-10,$t3
+ pand $axb,$bxc
+ pxor $sigma,$t2
+
+ `"prefetcht0 63(@ptr[3])" if ($i==15)`
+ psrld \$22-13,$sigma
+ pxor $t3,$t2
+ movdqa $b,$h
+ pslld \$30-19,$t3
+ pxor $t2,$sigma
+ pxor $bxc,$h # h=Maj(a,b,c)=Ch(a^b,c,b)
+ paddd $Xi,$d # d+=Xi
+ pxor $t3,$sigma # Sigma0(a)
+
+ paddd $Xi,$h # h+=Xi
+ paddd $sigma,$h # h+=Sigma0(a)
+___
+$code.=<<___ if (($i%8)==7);
+ lea `32*8`($Tbl),$Tbl
+___
+ ($axb,$bxc)=($bxc,$axb);
+}
+
+sub ROUND_16_XX {
+my $i=shift;
+
+$code.=<<___;
+ movdqa `&Xi_off($i+1)`,$Xn
+ paddd `&Xi_off($i+9)`,$Xi # Xi+=X[i+9]
+
+ movdqa $Xn,$sigma
+ movdqa $Xn,$t2
+ psrld \$3,$sigma
+ movdqa $Xn,$t3
+
+ psrld \$7,$t2
+ movdqa `&Xi_off($i+14)`,$t1
+ pslld \$14,$t3
+ pxor $t2,$sigma
+ psrld \$18-7,$t2
+ movdqa $t1,$axb # borrow $axb
+ pxor $t3,$sigma
+ pslld \$25-14,$t3
+ pxor $t2,$sigma
+ psrld \$10,$t1
+ movdqa $axb,$t2
+
+ psrld \$17,$axb
+ pxor $t3,$sigma # sigma0(X[i+1])
+ pslld \$13,$t2
+ paddd $sigma,$Xi # Xi+=sigma0(e)
+ pxor $axb,$t1
+ psrld \$19-17,$axb
+ pxor $t2,$t1
+ pslld \$15-13,$t2
+ pxor $axb,$t1
+ pxor $t2,$t1 # sigma0(X[i+14])
+ paddd $t1,$Xi # Xi+=sigma1(X[i+14])
+___
+ &ROUND_00_15($i,@_);
+ ($Xi,$Xn)=($Xn,$Xi);
+}
+
+$code.=<<___;
+.text
+
+.extern OPENSSL_ia32cap_P
+
+.globl sha256_multi_block
+.type sha256_multi_block,\@function,3
+.align 32
+sha256_multi_block:
+ mov OPENSSL_ia32cap_P+4(%rip),%rcx
+ bt \$61,%rcx # check SHA bit
+ jc _shaext_shortcut
+___
+$code.=<<___ if ($avx);
+ test \$`1<<28`,%ecx
+ jnz _avx_shortcut
+___
+$code.=<<___;
+ mov %rsp,%rax
+ push %rbx
+ push %rbp
+___
+$code.=<<___ if ($win64);
+ lea -0xa8(%rsp),%rsp
+ movaps %xmm6,(%rsp)
+ movaps %xmm7,0x10(%rsp)
+ movaps %xmm8,0x20(%rsp)
+ movaps %xmm9,0x30(%rsp)
+ movaps %xmm10,-0x78(%rax)
+ movaps %xmm11,-0x68(%rax)
+ movaps %xmm12,-0x58(%rax)
+ movaps %xmm13,-0x48(%rax)
+ movaps %xmm14,-0x38(%rax)
+ movaps %xmm15,-0x28(%rax)
+___
+$code.=<<___;
+ sub \$`$REG_SZ*18`, %rsp
+ and \$-256,%rsp
+ mov %rax,`$REG_SZ*17`(%rsp) # original %rsp
+.Lbody:
+ lea K256+128(%rip),$Tbl
+ lea `$REG_SZ*16`(%rsp),%rbx
+ lea 0x80($ctx),$ctx # size optimization
+
+.Loop_grande:
+ mov $num,`$REG_SZ*17+8`(%rsp) # original $num
+ xor $num,$num
+___
+for($i=0;$i<4;$i++) {
+ $code.=<<___;
+ mov `16*$i+0`($inp),@ptr[$i] # input pointer
+ mov `16*$i+8`($inp),%ecx # number of blocks
+ cmp $num,%ecx
+ cmovg %ecx,$num # find maximum
+ test %ecx,%ecx
+ mov %ecx,`4*$i`(%rbx) # initialize counters
+ cmovle $Tbl,@ptr[$i] # cancel input
+___
+}
+$code.=<<___;
+ test $num,$num
+ jz .Ldone
+
+ movdqu 0x00-0x80($ctx),$A # load context
+ lea 128(%rsp),%rax
+ movdqu 0x20-0x80($ctx),$B
+ movdqu 0x40-0x80($ctx),$C
+ movdqu 0x60-0x80($ctx),$D
+ movdqu 0x80-0x80($ctx),$E
+ movdqu 0xa0-0x80($ctx),$F
+ movdqu 0xc0-0x80($ctx),$G
+ movdqu 0xe0-0x80($ctx),$H
+ movdqu .Lpbswap(%rip),$Xn
+ jmp .Loop
+
+.align 32
+.Loop:
+ movdqa $C,$bxc
+ pxor $B,$bxc # magic seed
+___
+for($i=0;$i<16;$i++) { &ROUND_00_15($i,@V); unshift(@V,pop(@V)); }
+$code.=<<___;
+ movdqu `&Xi_off($i)`,$Xi
+ mov \$3,%ecx
+ jmp .Loop_16_xx
+.align 32
+.Loop_16_xx:
+___
+for(;$i<32;$i++) { &ROUND_16_XX($i,@V); unshift(@V,pop(@V)); }
+$code.=<<___;
+ dec %ecx
+ jnz .Loop_16_xx
+
+ mov \$1,%ecx
+ lea K256+128(%rip),$Tbl
+
+ movdqa (%rbx),$sigma # pull counters
+ cmp 4*0(%rbx),%ecx # examine counters
+ pxor $t1,$t1
+ cmovge $Tbl,@ptr[0] # cancel input
+ cmp 4*1(%rbx),%ecx
+ movdqa $sigma,$Xn
+ cmovge $Tbl,@ptr[1]
+ cmp 4*2(%rbx),%ecx
+ pcmpgtd $t1,$Xn # mask value
+ cmovge $Tbl,@ptr[2]
+ cmp 4*3(%rbx),%ecx
+ paddd $Xn,$sigma # counters--
+ cmovge $Tbl,@ptr[3]
+
+ movdqu 0x00-0x80($ctx),$t1
+ pand $Xn,$A
+ movdqu 0x20-0x80($ctx),$t2
+ pand $Xn,$B
+ movdqu 0x40-0x80($ctx),$t3
+ pand $Xn,$C
+ movdqu 0x60-0x80($ctx),$Xi
+ pand $Xn,$D
+ paddd $t1,$A
+ movdqu 0x80-0x80($ctx),$t1
+ pand $Xn,$E
+ paddd $t2,$B
+ movdqu 0xa0-0x80($ctx),$t2
+ pand $Xn,$F
+ paddd $t3,$C
+ movdqu 0xc0-0x80($ctx),$t3
+ pand $Xn,$G
+ paddd $Xi,$D
+ movdqu 0xe0-0x80($ctx),$Xi
+ pand $Xn,$H
+ paddd $t1,$E
+ paddd $t2,$F
+ movdqu $A,0x00-0x80($ctx)
+ paddd $t3,$G
+ movdqu $B,0x20-0x80($ctx)
+ paddd $Xi,$H
+ movdqu $C,0x40-0x80($ctx)
+ movdqu $D,0x60-0x80($ctx)
+ movdqu $E,0x80-0x80($ctx)
+ movdqu $F,0xa0-0x80($ctx)
+ movdqu $G,0xc0-0x80($ctx)
+ movdqu $H,0xe0-0x80($ctx)
+
+ movdqa $sigma,(%rbx) # save counters
+ movdqa .Lpbswap(%rip),$Xn
+ dec $num
+ jnz .Loop
+
+ mov `$REG_SZ*17+8`(%rsp),$num
+ lea $REG_SZ($ctx),$ctx
+ lea `16*$REG_SZ/4`($inp),$inp
+ dec $num
+ jnz .Loop_grande
+
+.Ldone:
+ mov `$REG_SZ*17`(%rsp),%rax # orignal %rsp
+___
+$code.=<<___ if ($win64);
+ movaps -0xb8(%rax),%xmm6
+ movaps -0xa8(%rax),%xmm7
+ movaps -0x98(%rax),%xmm8
+ movaps -0x88(%rax),%xmm9
+ movaps -0x78(%rax),%xmm10
+ movaps -0x68(%rax),%xmm11
+ movaps -0x58(%rax),%xmm12
+ movaps -0x48(%rax),%xmm13
+ movaps -0x38(%rax),%xmm14
+ movaps -0x28(%rax),%xmm15
+___
+$code.=<<___;
+ mov -16(%rax),%rbp
+ mov -8(%rax),%rbx
+ lea (%rax),%rsp
+.Lepilogue:
+ ret
+.size sha256_multi_block,.-sha256_multi_block
+___
+ {{{
+my ($Wi,$TMP0,$TMP1,$TMPx,$ABEF0,$CDGH0,$ABEF1,$CDGH1)=map("%xmm$_",(0..3,12..15));
+my @MSG0=map("%xmm$_",(4..7));
+my @MSG1=map("%xmm$_",(8..11));
+
+$code.=<<___;
+.type sha256_multi_block_shaext,\@function,3
+.align 32
+sha256_multi_block_shaext:
+_shaext_shortcut:
+ mov %rsp,%rax
+ push %rbx
+ push %rbp
+___
+$code.=<<___ if ($win64);
+ lea -0xa8(%rsp),%rsp
+ movaps %xmm6,(%rsp)
+ movaps %xmm7,0x10(%rsp)
+ movaps %xmm8,0x20(%rsp)
+ movaps %xmm9,0x30(%rsp)
+ movaps %xmm10,-0x78(%rax)
+ movaps %xmm11,-0x68(%rax)
+ movaps %xmm12,-0x58(%rax)
+ movaps %xmm13,-0x48(%rax)
+ movaps %xmm14,-0x38(%rax)
+ movaps %xmm15,-0x28(%rax)
+___
+$code.=<<___;
+ sub \$`$REG_SZ*18`,%rsp
+ shl \$1,$num # we process pair at a time
+ and \$-256,%rsp
+ lea 0x80($ctx),$ctx # size optimization
+ mov %rax,`$REG_SZ*17`(%rsp) # original %rsp
+.Lbody_shaext:
+ lea `$REG_SZ*16`(%rsp),%rbx
+ lea K256_shaext+0x80(%rip),$Tbl
+
+.Loop_grande_shaext:
+ mov $num,`$REG_SZ*17+8`(%rsp) # orignal $num
+ xor $num,$num
+___
+for($i=0;$i<2;$i++) {
+ $code.=<<___;
+ mov `16*$i+0`($inp),@ptr[$i] # input pointer
+ mov `16*$i+8`($inp),%ecx # number of blocks
+ cmp $num,%ecx
+ cmovg %ecx,$num # find maximum
+ test %ecx,%ecx
+ mov %ecx,`4*$i`(%rbx) # initialize counters
+ cmovle %rsp,@ptr[$i] # cancel input
+___
+}
+$code.=<<___;
+ test $num,$num
+ jz .Ldone_shaext
+
+ movq 0x00-0x80($ctx),$ABEF0 # A1.A0
+ movq 0x20-0x80($ctx),@MSG0[0] # B1.B0
+ movq 0x40-0x80($ctx),$CDGH0 # C1.C0
+ movq 0x60-0x80($ctx),@MSG0[1] # D1.D0
+ movq 0x80-0x80($ctx),@MSG1[0] # E1.E0
+ movq 0xa0-0x80($ctx),@MSG1[1] # F1.F0
+ movq 0xc0-0x80($ctx),@MSG1[2] # G1.G0
+ movq 0xe0-0x80($ctx),@MSG1[3] # H1.H0
+
+ punpckldq @MSG0[0],$ABEF0 # B1.A1.B0.A0
+ punpckldq @MSG0[1],$CDGH0 # D1.C1.D0.C0
+ punpckldq @MSG1[1],@MSG1[0] # F1.E1.F0.E0
+ punpckldq @MSG1[3],@MSG1[2] # H1.G1.H0.G0
+ movdqa K256_shaext-0x10(%rip),$TMPx # byte swap
+
+ movdqa $ABEF0,$ABEF1
+ movdqa $CDGH0,$CDGH1
+ punpcklqdq @MSG1[0],$ABEF0 # F0.E0.B0.A0
+ punpcklqdq @MSG1[2],$CDGH0 # H0.G0.D0.C0
+ punpckhqdq @MSG1[0],$ABEF1 # F1.E1.B1.A1
+ punpckhqdq @MSG1[2],$CDGH1 # H1.G1.D1.C1
+
+ pshufd \$0b00011011,$ABEF0,$ABEF0
+ pshufd \$0b00011011,$CDGH0,$CDGH0
+ pshufd \$0b00011011,$ABEF1,$ABEF1
+ pshufd \$0b00011011,$CDGH1,$CDGH1
+ jmp .Loop_shaext
+
+.align 32
+.Loop_shaext:
+ movdqu 0x00(@ptr[0]),@MSG0[0]
+ movdqu 0x00(@ptr[1]),@MSG1[0]
+ movdqu 0x10(@ptr[0]),@MSG0[1]
+ movdqu 0x10(@ptr[1]),@MSG1[1]
+ movdqu 0x20(@ptr[0]),@MSG0[2]
+ pshufb $TMPx,@MSG0[0]
+ movdqu 0x20(@ptr[1]),@MSG1[2]
+ pshufb $TMPx,@MSG1[0]
+ movdqu 0x30(@ptr[0]),@MSG0[3]
+ lea 0x40(@ptr[0]),@ptr[0]
+ movdqu 0x30(@ptr[1]),@MSG1[3]
+ lea 0x40(@ptr[1]),@ptr[1]
+
+ movdqa 0*16-0x80($Tbl),$Wi
+ pshufb $TMPx,@MSG0[1]
+ paddd @MSG0[0],$Wi
+ pxor $ABEF0,@MSG0[0] # black magic
+ movdqa $Wi,$TMP0
+ movdqa 0*16-0x80($Tbl),$TMP1
+ pshufb $TMPx,@MSG1[1]
+ paddd @MSG1[0],$TMP1
+ movdqa $CDGH0,0x50(%rsp) # offload
+ sha256rnds2 $ABEF0,$CDGH0 # 0-3
+ pxor $ABEF1,@MSG1[0] # black magic
+ movdqa $TMP1,$Wi
+ movdqa $CDGH1,0x70(%rsp)
+ sha256rnds2 $ABEF1,$CDGH1 # 0-3
+ pshufd \$0x0e,$TMP0,$Wi
+ pxor $ABEF0,@MSG0[0] # black magic
+ movdqa $ABEF0,0x40(%rsp) # offload
+ sha256rnds2 $CDGH0,$ABEF0
+ pshufd \$0x0e,$TMP1,$Wi
+ pxor $ABEF1,@MSG1[0] # black magic
+ movdqa $ABEF1,0x60(%rsp)
+ movdqa 1*16-0x80($Tbl),$TMP0
+ paddd @MSG0[1],$TMP0
+ pshufb $TMPx,@MSG0[2]
+ sha256rnds2 $CDGH1,$ABEF1
+
+ movdqa $TMP0,$Wi
+ movdqa 1*16-0x80($Tbl),$TMP1
+ paddd @MSG1[1],$TMP1
+ sha256rnds2 $ABEF0,$CDGH0 # 4-7
+ movdqa $TMP1,$Wi
+ prefetcht0 127(@ptr[0])
+ pshufb $TMPx,@MSG0[3]
+ pshufb $TMPx,@MSG1[2]
+ prefetcht0 127(@ptr[1])
+ sha256rnds2 $ABEF1,$CDGH1 # 4-7
+ pshufd \$0x0e,$TMP0,$Wi
+ pshufb $TMPx,@MSG1[3]
+ sha256msg1 @MSG0[1],@MSG0[0]
+ sha256rnds2 $CDGH0,$ABEF0
+ pshufd \$0x0e,$TMP1,$Wi
+ movdqa 2*16-0x80($Tbl),$TMP0
+ paddd @MSG0[2],$TMP0
+ sha256rnds2 $CDGH1,$ABEF1
+
+ movdqa $TMP0,$Wi
+ movdqa 2*16-0x80($Tbl),$TMP1
+ paddd @MSG1[2],$TMP1
+ sha256rnds2 $ABEF0,$CDGH0 # 8-11
+ sha256msg1 @MSG1[1],@MSG1[0]
+ movdqa $TMP1,$Wi
+ movdqa @MSG0[3],$TMPx
+ sha256rnds2 $ABEF1,$CDGH1 # 8-11
+ pshufd \$0x0e,$TMP0,$Wi
+ palignr \$4,@MSG0[2],$TMPx
+ paddd $TMPx,@MSG0[0]
+ movdqa @MSG1[3],$TMPx
+ palignr \$4,@MSG1[2],$TMPx
+ sha256msg1 @MSG0[2],@MSG0[1]
+ sha256rnds2 $CDGH0,$ABEF0
+ pshufd \$0x0e,$TMP1,$Wi
+ movdqa 3*16-0x80($Tbl),$TMP0
+ paddd @MSG0[3],$TMP0
+ sha256rnds2 $CDGH1,$ABEF1
+ sha256msg1 @MSG1[2],@MSG1[1]
+
+ movdqa $TMP0,$Wi
+ movdqa 3*16-0x80($Tbl),$TMP1
+ paddd $TMPx,@MSG1[0]
+ paddd @MSG1[3],$TMP1
+ sha256msg2 @MSG0[3],@MSG0[0]
+ sha256rnds2 $ABEF0,$CDGH0 # 12-15
+ movdqa $TMP1,$Wi
+ movdqa @MSG0[0],$TMPx
+ palignr \$4,@MSG0[3],$TMPx
+ sha256rnds2 $ABEF1,$CDGH1 # 12-15
+ sha256msg2 @MSG1[3],@MSG1[0]
+ pshufd \$0x0e,$TMP0,$Wi
+ paddd $TMPx,@MSG0[1]
+ movdqa @MSG1[0],$TMPx
+ palignr \$4,@MSG1[3],$TMPx
+ sha256msg1 @MSG0[3],@MSG0[2]
+ sha256rnds2 $CDGH0,$ABEF0
+ pshufd \$0x0e,$TMP1,$Wi
+ movdqa 4*16-0x80($Tbl),$TMP0
+ paddd @MSG0[0],$TMP0
+ sha256rnds2 $CDGH1,$ABEF1
+ sha256msg1 @MSG1[3],@MSG1[2]
+___
+for($i=4;$i<16-3;$i++) {
+$code.=<<___;
+ movdqa $TMP0,$Wi
+ movdqa $i*16-0x80($Tbl),$TMP1
+ paddd $TMPx,@MSG1[1]
+ paddd @MSG1[0],$TMP1
+ sha256msg2 @MSG0[0],@MSG0[1]
+ sha256rnds2 $ABEF0,$CDGH0 # 16-19...
+ movdqa $TMP1,$Wi
+ movdqa @MSG0[1],$TMPx
+ palignr \$4,@MSG0[0],$TMPx
+ sha256rnds2 $ABEF1,$CDGH1 # 16-19...
+ sha256msg2 @MSG1[0],@MSG1[1]
+ pshufd \$0x0e,$TMP0,$Wi
+ paddd $TMPx,@MSG0[2]
+ movdqa @MSG1[1],$TMPx
+ palignr \$4,@MSG1[0],$TMPx
+ sha256msg1 @MSG0[0],@MSG0[3]
+ sha256rnds2 $CDGH0,$ABEF0
+ pshufd \$0x0e,$TMP1,$Wi
+ movdqa `($i+1)*16`-0x80($Tbl),$TMP0
+ paddd @MSG0[1],$TMP0
+ sha256rnds2 $CDGH1,$ABEF1
+ sha256msg1 @MSG1[0],@MSG1[3]
+___
+ push(@MSG0,shift(@MSG0)); push(@MSG1,shift(@MSG1));
+}
+$code.=<<___;
+ movdqa $TMP0,$Wi
+ movdqa 13*16-0x80($Tbl),$TMP1
+ paddd $TMPx,@MSG1[1]
+ paddd @MSG1[0],$TMP1
+ sha256msg2 @MSG0[0],@MSG0[1]
+ sha256rnds2 $ABEF0,$CDGH0 # 52-55
+ movdqa $TMP1,$Wi
+ movdqa @MSG0[1],$TMPx
+ palignr \$4,@MSG0[0],$TMPx
+ sha256rnds2 $ABEF1,$CDGH1 # 52-55
+ sha256msg2 @MSG1[0],@MSG1[1]
+ pshufd \$0x0e,$TMP0,$Wi
+ paddd $TMPx,@MSG0[2]
+ movdqa @MSG1[1],$TMPx
+ palignr \$4,@MSG1[0],$TMPx
+ nop
+ sha256rnds2 $CDGH0,$ABEF0
+ pshufd \$0x0e,$TMP1,$Wi
+ movdqa 14*16-0x80($Tbl),$TMP0
+ paddd @MSG0[1],$TMP0
+ sha256rnds2 $CDGH1,$ABEF1
+
+ movdqa $TMP0,$Wi
+ movdqa 14*16-0x80($Tbl),$TMP1
+ paddd $TMPx,@MSG1[2]
+ paddd @MSG1[1],$TMP1
+ sha256msg2 @MSG0[1],@MSG0[2]
+ nop
+ sha256rnds2 $ABEF0,$CDGH0 # 56-59
+ movdqa $TMP1,$Wi
+ mov \$1,%ecx
+ pxor @MSG0[1],@MSG0[1] # zero
+ sha256rnds2 $ABEF1,$CDGH1 # 56-59
+ sha256msg2 @MSG1[1],@MSG1[2]
+ pshufd \$0x0e,$TMP0,$Wi
+ movdqa 15*16-0x80($Tbl),$TMP0
+ paddd @MSG0[2],$TMP0
+ movq (%rbx),@MSG0[2] # pull counters
+ nop
+ sha256rnds2 $CDGH0,$ABEF0
+ pshufd \$0x0e,$TMP1,$Wi
+ movdqa 15*16-0x80($Tbl),$TMP1
+ paddd @MSG1[2],$TMP1
+ sha256rnds2 $CDGH1,$ABEF1
+
+ movdqa $TMP0,$Wi
+ cmp 4*0(%rbx),%ecx # examine counters
+ cmovge %rsp,@ptr[0] # cancel input
+ cmp 4*1(%rbx),%ecx
+ cmovge %rsp,@ptr[1]
+ pshufd \$0x00,@MSG0[2],@MSG1[0]
+ sha256rnds2 $ABEF0,$CDGH0 # 60-63
+ movdqa $TMP1,$Wi
+ pshufd \$0x55,@MSG0[2],@MSG1[1]
+ movdqa @MSG0[2],@MSG1[2]
+ sha256rnds2 $ABEF1,$CDGH1 # 60-63
+ pshufd \$0x0e,$TMP0,$Wi
+ pcmpgtd @MSG0[1],@MSG1[0]
+ pcmpgtd @MSG0[1],@MSG1[1]
+ sha256rnds2 $CDGH0,$ABEF0
+ pshufd \$0x0e,$TMP1,$Wi
+ pcmpgtd @MSG0[1],@MSG1[2] # counter mask
+ movdqa K256_shaext-0x10(%rip),$TMPx
+ sha256rnds2 $CDGH1,$ABEF1
+
+ pand @MSG1[0],$CDGH0
+ pand @MSG1[1],$CDGH1
+ pand @MSG1[0],$ABEF0
+ pand @MSG1[1],$ABEF1
+ paddd @MSG0[2],@MSG1[2] # counters--
+
+ paddd 0x50(%rsp),$CDGH0
+ paddd 0x70(%rsp),$CDGH1
+ paddd 0x40(%rsp),$ABEF0
+ paddd 0x60(%rsp),$ABEF1
+
+ movq @MSG1[2],(%rbx) # save counters
+ dec $num
+ jnz .Loop_shaext
+
+ mov `$REG_SZ*17+8`(%rsp),$num
+
+ pshufd \$0b00011011,$ABEF0,$ABEF0
+ pshufd \$0b00011011,$CDGH0,$CDGH0
+ pshufd \$0b00011011,$ABEF1,$ABEF1
+ pshufd \$0b00011011,$CDGH1,$CDGH1
+
+ movdqa $ABEF0,@MSG0[0]
+ movdqa $CDGH0,@MSG0[1]
+ punpckldq $ABEF1,$ABEF0 # B1.B0.A1.A0
+ punpckhdq $ABEF1,@MSG0[0] # F1.F0.E1.E0
+ punpckldq $CDGH1,$CDGH0 # D1.D0.C1.C0
+ punpckhdq $CDGH1,@MSG0[1] # H1.H0.G1.G0
+
+ movq $ABEF0,0x00-0x80($ctx) # A1.A0
+ psrldq \$8,$ABEF0
+ movq @MSG0[0],0x80-0x80($ctx) # E1.E0
+ psrldq \$8,@MSG0[0]
+ movq $ABEF0,0x20-0x80($ctx) # B1.B0
+ movq @MSG0[0],0xa0-0x80($ctx) # F1.F0
+
+ movq $CDGH0,0x40-0x80($ctx) # C1.C0
+ psrldq \$8,$CDGH0
+ movq @MSG0[1],0xc0-0x80($ctx) # G1.G0
+ psrldq \$8,@MSG0[1]
+ movq $CDGH0,0x60-0x80($ctx) # D1.D0
+ movq @MSG0[1],0xe0-0x80($ctx) # H1.H0
+
+ lea `$REG_SZ/2`($ctx),$ctx
+ lea `16*2`($inp),$inp
+ dec $num
+ jnz .Loop_grande_shaext
+
+.Ldone_shaext:
+ #mov `$REG_SZ*17`(%rsp),%rax # original %rsp
+___
+$code.=<<___ if ($win64);
+ movaps -0xb8(%rax),%xmm6
+ movaps -0xa8(%rax),%xmm7
+ movaps -0x98(%rax),%xmm8
+ movaps -0x88(%rax),%xmm9
+ movaps -0x78(%rax),%xmm10
+ movaps -0x68(%rax),%xmm11
+ movaps -0x58(%rax),%xmm12
+ movaps -0x48(%rax),%xmm13
+ movaps -0x38(%rax),%xmm14
+ movaps -0x28(%rax),%xmm15
+___
+$code.=<<___;
+ mov -16(%rax),%rbp
+ mov -8(%rax),%rbx
+ lea (%rax),%rsp
+.Lepilogue_shaext:
+ ret
+.size sha256_multi_block_shaext,.-sha256_multi_block_shaext
+___
+ }}}
+ if ($avx) {{{
+sub ROUND_00_15_avx {
+my ($i,$a,$b,$c,$d,$e,$f,$g,$h)=@_;
+
+$code.=<<___ if ($i<15 && $REG_SZ==16);
+ vmovd `4*$i`(@ptr[0]),$Xi
+ vmovd `4*$i`(@ptr[1]),$t1
+ vpinsrd \$1,`4*$i`(@ptr[2]),$Xi,$Xi
+ vpinsrd \$1,`4*$i`(@ptr[3]),$t1,$t1
+ vpunpckldq $t1,$Xi,$Xi
+ vpshufb $Xn,$Xi,$Xi
+___
+$code.=<<___ if ($i==15 && $REG_SZ==16);
+ vmovd `4*$i`(@ptr[0]),$Xi
+ lea `16*4`(@ptr[0]),@ptr[0]
+ vmovd `4*$i`(@ptr[1]),$t1
+ lea `16*4`(@ptr[1]),@ptr[1]
+ vpinsrd \$1,`4*$i`(@ptr[2]),$Xi,$Xi
+ lea `16*4`(@ptr[2]),@ptr[2]
+ vpinsrd \$1,`4*$i`(@ptr[3]),$t1,$t1
+ lea `16*4`(@ptr[3]),@ptr[3]
+ vpunpckldq $t1,$Xi,$Xi
+ vpshufb $Xn,$Xi,$Xi
+___
+$code.=<<___ if ($i<15 && $REG_SZ==32);
+ vmovd `4*$i`(@ptr[0]),$Xi
+ vmovd `4*$i`(@ptr[4]),$t1
+ vmovd `4*$i`(@ptr[1]),$t2
+ vmovd `4*$i`(@ptr[5]),$t3
+ vpinsrd \$1,`4*$i`(@ptr[2]),$Xi,$Xi
+ vpinsrd \$1,`4*$i`(@ptr[6]),$t1,$t1
+ vpinsrd \$1,`4*$i`(@ptr[3]),$t2,$t2
+ vpunpckldq $t2,$Xi,$Xi
+ vpinsrd \$1,`4*$i`(@ptr[7]),$t3,$t3
+ vpunpckldq $t3,$t1,$t1
+ vinserti128 $t1,$Xi,$Xi
+ vpshufb $Xn,$Xi,$Xi
+___
+$code.=<<___ if ($i==15 && $REG_SZ==32);
+ vmovd `4*$i`(@ptr[0]),$Xi
+ lea `16*4`(@ptr[0]),@ptr[0]
+ vmovd `4*$i`(@ptr[4]),$t1
+ lea `16*4`(@ptr[4]),@ptr[4]
+ vmovd `4*$i`(@ptr[1]),$t2
+ lea `16*4`(@ptr[1]),@ptr[1]
+ vmovd `4*$i`(@ptr[5]),$t3
+ lea `16*4`(@ptr[5]),@ptr[5]
+ vpinsrd \$1,`4*$i`(@ptr[2]),$Xi,$Xi
+ lea `16*4`(@ptr[2]),@ptr[2]
+ vpinsrd \$1,`4*$i`(@ptr[6]),$t1,$t1
+ lea `16*4`(@ptr[6]),@ptr[6]
+ vpinsrd \$1,`4*$i`(@ptr[3]),$t2,$t2
+ lea `16*4`(@ptr[3]),@ptr[3]
+ vpunpckldq $t2,$Xi,$Xi
+ vpinsrd \$1,`4*$i`(@ptr[7]),$t3,$t3
+ lea `16*4`(@ptr[7]),@ptr[7]
+ vpunpckldq $t3,$t1,$t1
+ vinserti128 $t1,$Xi,$Xi
+ vpshufb $Xn,$Xi,$Xi
+___
+$code.=<<___;
+ vpsrld \$6,$e,$sigma
+ vpslld \$26,$e,$t3
+ vmovdqu $Xi,`&Xi_off($i)`
+ vpaddd $h,$Xi,$Xi # Xi+=h
+
+ vpsrld \$11,$e,$t2
+ vpxor $t3,$sigma,$sigma
+ vpslld \$21,$e,$t3
+ vpaddd `32*($i%8)-128`($Tbl),$Xi,$Xi # Xi+=K[round]
+ vpxor $t2,$sigma,$sigma
+
+ vpsrld \$25,$e,$t2
+ vpxor $t3,$sigma,$sigma
+ `"prefetcht0 63(@ptr[0])" if ($i==15)`
+ vpslld \$7,$e,$t3
+ vpandn $g,$e,$t1
+ vpand $f,$e,$axb # borrow $axb
+ `"prefetcht0 63(@ptr[1])" if ($i==15)`
+ vpxor $t2,$sigma,$sigma
+
+ vpsrld \$2,$a,$h # borrow $h
+ vpxor $t3,$sigma,$sigma # Sigma1(e)
+ `"prefetcht0 63(@ptr[2])" if ($i==15)`
+ vpslld \$30,$a,$t2
+ vpxor $axb,$t1,$t1 # Ch(e,f,g)
+ vpxor $a,$b,$axb # a^b, b^c in next round
+ `"prefetcht0 63(@ptr[3])" if ($i==15)`
+ vpxor $t2,$h,$h
+ vpaddd $sigma,$Xi,$Xi # Xi+=Sigma1(e)
+
+ vpsrld \$13,$a,$t2
+ `"prefetcht0 63(@ptr[4])" if ($i==15 && $REG_SZ==32)`
+ vpslld \$19,$a,$t3
+ vpaddd $t1,$Xi,$Xi # Xi+=Ch(e,f,g)
+ vpand $axb,$bxc,$bxc
+ `"prefetcht0 63(@ptr[5])" if ($i==15 && $REG_SZ==32)`
+ vpxor $t2,$h,$sigma
+
+ vpsrld \$22,$a,$t2
+ vpxor $t3,$sigma,$sigma
+ `"prefetcht0 63(@ptr[6])" if ($i==15 && $REG_SZ==32)`
+ vpslld \$10,$a,$t3
+ vpxor $bxc,$b,$h # h=Maj(a,b,c)=Ch(a^b,c,b)
+ vpaddd $Xi,$d,$d # d+=Xi
+ `"prefetcht0 63(@ptr[7])" if ($i==15 && $REG_SZ==32)`
+ vpxor $t2,$sigma,$sigma
+ vpxor $t3,$sigma,$sigma # Sigma0(a)
+
+ vpaddd $Xi,$h,$h # h+=Xi
+ vpaddd $sigma,$h,$h # h+=Sigma0(a)
+___
+$code.=<<___ if (($i%8)==7);
+ add \$`32*8`,$Tbl
+___
+ ($axb,$bxc)=($bxc,$axb);
+}
+
+sub ROUND_16_XX_avx {
+my $i=shift;
+
+$code.=<<___;
+ vmovdqu `&Xi_off($i+1)`,$Xn
+ vpaddd `&Xi_off($i+9)`,$Xi,$Xi # Xi+=X[i+9]
+
+ vpsrld \$3,$Xn,$sigma
+ vpsrld \$7,$Xn,$t2
+ vpslld \$25,$Xn,$t3
+ vpxor $t2,$sigma,$sigma
+ vpsrld \$18,$Xn,$t2
+ vpxor $t3,$sigma,$sigma
+ vpslld \$14,$Xn,$t3
+ vmovdqu `&Xi_off($i+14)`,$t1
+ vpsrld \$10,$t1,$axb # borrow $axb
+
+ vpxor $t2,$sigma,$sigma
+ vpsrld \$17,$t1,$t2
+ vpxor $t3,$sigma,$sigma # sigma0(X[i+1])
+ vpslld \$15,$t1,$t3
+ vpaddd $sigma,$Xi,$Xi # Xi+=sigma0(e)
+ vpxor $t2,$axb,$sigma
+ vpsrld \$19,$t1,$t2
+ vpxor $t3,$sigma,$sigma
+ vpslld \$13,$t1,$t3
+ vpxor $t2,$sigma,$sigma
+ vpxor $t3,$sigma,$sigma # sigma0(X[i+14])
+ vpaddd $sigma,$Xi,$Xi # Xi+=sigma1(X[i+14])
+___
+ &ROUND_00_15_avx($i,@_);
+ ($Xi,$Xn)=($Xn,$Xi);
+}
+
+$code.=<<___;
+.type sha256_multi_block_avx,\@function,3
+.align 32
+sha256_multi_block_avx:
+_avx_shortcut:
+___
+$code.=<<___ if ($avx>1);
+ shr \$32,%rcx
+ cmp \$2,$num
+ jb .Lavx
+ test \$`1<<5`,%ecx
+ jnz _avx2_shortcut
+ jmp .Lavx
+.align 32
+.Lavx:
+___
+$code.=<<___;
+ mov %rsp,%rax
+ push %rbx
+ push %rbp
+___
+$code.=<<___ if ($win64);
+ lea -0xa8(%rsp),%rsp
+ movaps %xmm6,(%rsp)
+ movaps %xmm7,0x10(%rsp)
+ movaps %xmm8,0x20(%rsp)
+ movaps %xmm9,0x30(%rsp)
+ movaps %xmm10,-0x78(%rax)
+ movaps %xmm11,-0x68(%rax)
+ movaps %xmm12,-0x58(%rax)
+ movaps %xmm13,-0x48(%rax)
+ movaps %xmm14,-0x38(%rax)
+ movaps %xmm15,-0x28(%rax)
+___
+$code.=<<___;
+ sub \$`$REG_SZ*18`, %rsp
+ and \$-256,%rsp
+ mov %rax,`$REG_SZ*17`(%rsp) # original %rsp
+.Lbody_avx:
+ lea K256+128(%rip),$Tbl
+ lea `$REG_SZ*16`(%rsp),%rbx
+ lea 0x80($ctx),$ctx # size optimization
+
+.Loop_grande_avx:
+ mov $num,`$REG_SZ*17+8`(%rsp) # original $num
+ xor $num,$num
+___
+for($i=0;$i<4;$i++) {
+ $code.=<<___;
+ mov `16*$i+0`($inp),@ptr[$i] # input pointer
+ mov `16*$i+8`($inp),%ecx # number of blocks
+ cmp $num,%ecx
+ cmovg %ecx,$num # find maximum
+ test %ecx,%ecx
+ mov %ecx,`4*$i`(%rbx) # initialize counters
+ cmovle $Tbl,@ptr[$i] # cancel input
+___
+}
+$code.=<<___;
+ test $num,$num
+ jz .Ldone_avx
+
+ vmovdqu 0x00-0x80($ctx),$A # load context
+ lea 128(%rsp),%rax
+ vmovdqu 0x20-0x80($ctx),$B
+ vmovdqu 0x40-0x80($ctx),$C
+ vmovdqu 0x60-0x80($ctx),$D
+ vmovdqu 0x80-0x80($ctx),$E
+ vmovdqu 0xa0-0x80($ctx),$F
+ vmovdqu 0xc0-0x80($ctx),$G
+ vmovdqu 0xe0-0x80($ctx),$H
+ vmovdqu .Lpbswap(%rip),$Xn
+ jmp .Loop_avx
+
+.align 32
+.Loop_avx:
+ vpxor $B,$C,$bxc # magic seed
+___
+for($i=0;$i<16;$i++) { &ROUND_00_15_avx($i,@V); unshift(@V,pop(@V)); }
+$code.=<<___;
+ vmovdqu `&Xi_off($i)`,$Xi
+ mov \$3,%ecx
+ jmp .Loop_16_xx_avx
+.align 32
+.Loop_16_xx_avx:
+___
+for(;$i<32;$i++) { &ROUND_16_XX_avx($i,@V); unshift(@V,pop(@V)); }
+$code.=<<___;
+ dec %ecx
+ jnz .Loop_16_xx_avx
+
+ mov \$1,%ecx
+ lea K256+128(%rip),$Tbl
+___
+for($i=0;$i<4;$i++) {
+ $code.=<<___;
+ cmp `4*$i`(%rbx),%ecx # examine counters
+ cmovge $Tbl,@ptr[$i] # cancel input
+___
+}
+$code.=<<___;
+ vmovdqa (%rbx),$sigma # pull counters
+ vpxor $t1,$t1,$t1
+ vmovdqa $sigma,$Xn
+ vpcmpgtd $t1,$Xn,$Xn # mask value
+ vpaddd $Xn,$sigma,$sigma # counters--
+
+ vmovdqu 0x00-0x80($ctx),$t1
+ vpand $Xn,$A,$A
+ vmovdqu 0x20-0x80($ctx),$t2
+ vpand $Xn,$B,$B
+ vmovdqu 0x40-0x80($ctx),$t3
+ vpand $Xn,$C,$C
+ vmovdqu 0x60-0x80($ctx),$Xi
+ vpand $Xn,$D,$D
+ vpaddd $t1,$A,$A
+ vmovdqu 0x80-0x80($ctx),$t1
+ vpand $Xn,$E,$E
+ vpaddd $t2,$B,$B
+ vmovdqu 0xa0-0x80($ctx),$t2
+ vpand $Xn,$F,$F
+ vpaddd $t3,$C,$C
+ vmovdqu 0xc0-0x80($ctx),$t3
+ vpand $Xn,$G,$G
+ vpaddd $Xi,$D,$D
+ vmovdqu 0xe0-0x80($ctx),$Xi
+ vpand $Xn,$H,$H
+ vpaddd $t1,$E,$E
+ vpaddd $t2,$F,$F
+ vmovdqu $A,0x00-0x80($ctx)
+ vpaddd $t3,$G,$G
+ vmovdqu $B,0x20-0x80($ctx)
+ vpaddd $Xi,$H,$H
+ vmovdqu $C,0x40-0x80($ctx)
+ vmovdqu $D,0x60-0x80($ctx)
+ vmovdqu $E,0x80-0x80($ctx)
+ vmovdqu $F,0xa0-0x80($ctx)
+ vmovdqu $G,0xc0-0x80($ctx)
+ vmovdqu $H,0xe0-0x80($ctx)
+
+ vmovdqu $sigma,(%rbx) # save counters
+ vmovdqu .Lpbswap(%rip),$Xn
+ dec $num
+ jnz .Loop_avx
+
+ mov `$REG_SZ*17+8`(%rsp),$num
+ lea $REG_SZ($ctx),$ctx
+ lea `16*$REG_SZ/4`($inp),$inp
+ dec $num
+ jnz .Loop_grande_avx
+
+.Ldone_avx:
+ mov `$REG_SZ*17`(%rsp),%rax # orignal %rsp
+ vzeroupper
+___
+$code.=<<___ if ($win64);
+ movaps -0xb8(%rax),%xmm6
+ movaps -0xa8(%rax),%xmm7
+ movaps -0x98(%rax),%xmm8
+ movaps -0x88(%rax),%xmm9
+ movaps -0x78(%rax),%xmm10
+ movaps -0x68(%rax),%xmm11
+ movaps -0x58(%rax),%xmm12
+ movaps -0x48(%rax),%xmm13
+ movaps -0x38(%rax),%xmm14
+ movaps -0x28(%rax),%xmm15
+___
+$code.=<<___;
+ mov -16(%rax),%rbp
+ mov -8(%rax),%rbx
+ lea (%rax),%rsp
+.Lepilogue_avx:
+ ret
+.size sha256_multi_block_avx,.-sha256_multi_block_avx
+___
+ if ($avx>1) {
+$code =~ s/\`([^\`]*)\`/eval $1/gem;
+
+$REG_SZ=32;
+@ptr=map("%r$_",(12..15,8..11));
+
+@V=($A,$B,$C,$D,$E,$F,$G,$H)=map("%ymm$_",(8..15));
+($t1,$t2,$t3,$axb,$bxc,$Xi,$Xn,$sigma)=map("%ymm$_",(0..7));
+
+$code.=<<___;
+.type sha256_multi_block_avx2,\@function,3
+.align 32
+sha256_multi_block_avx2:
+_avx2_shortcut:
+ mov %rsp,%rax
+ push %rbx
+ push %rbp
+ push %r12
+ push %r13
+ push %r14
+ push %r15
+___
+$code.=<<___ if ($win64);
+ lea -0xa8(%rsp),%rsp
+ movaps %xmm6,(%rsp)
+ movaps %xmm7,0x10(%rsp)
+ movaps %xmm8,0x20(%rsp)
+ movaps %xmm9,0x30(%rsp)
+ movaps %xmm10,0x40(%rsp)
+ movaps %xmm11,0x50(%rsp)
+ movaps %xmm12,-0x78(%rax)
+ movaps %xmm13,-0x68(%rax)
+ movaps %xmm14,-0x58(%rax)
+ movaps %xmm15,-0x48(%rax)
+___
+$code.=<<___;
+ sub \$`$REG_SZ*18`, %rsp
+ and \$-256,%rsp
+ mov %rax,`$REG_SZ*17`(%rsp) # original %rsp
+.Lbody_avx2:
+ lea K256+128(%rip),$Tbl
+ lea 0x80($ctx),$ctx # size optimization
+
+.Loop_grande_avx2:
+ mov $num,`$REG_SZ*17+8`(%rsp) # original $num
+ xor $num,$num
+ lea `$REG_SZ*16`(%rsp),%rbx
+___
+for($i=0;$i<8;$i++) {
+ $code.=<<___;
+ mov `16*$i+0`($inp),@ptr[$i] # input pointer
+ mov `16*$i+8`($inp),%ecx # number of blocks
+ cmp $num,%ecx
+ cmovg %ecx,$num # find maximum
+ test %ecx,%ecx
+ mov %ecx,`4*$i`(%rbx) # initialize counters
+ cmovle $Tbl,@ptr[$i] # cancel input
+___
+}
+$code.=<<___;
+ vmovdqu 0x00-0x80($ctx),$A # load context
+ lea 128(%rsp),%rax
+ vmovdqu 0x20-0x80($ctx),$B
+ lea 256+128(%rsp),%rbx
+ vmovdqu 0x40-0x80($ctx),$C
+ vmovdqu 0x60-0x80($ctx),$D
+ vmovdqu 0x80-0x80($ctx),$E
+ vmovdqu 0xa0-0x80($ctx),$F
+ vmovdqu 0xc0-0x80($ctx),$G
+ vmovdqu 0xe0-0x80($ctx),$H
+ vmovdqu .Lpbswap(%rip),$Xn
+ jmp .Loop_avx2
+
+.align 32
+.Loop_avx2:
+ vpxor $B,$C,$bxc # magic seed
+___
+for($i=0;$i<16;$i++) { &ROUND_00_15_avx($i,@V); unshift(@V,pop(@V)); }
+$code.=<<___;
+ vmovdqu `&Xi_off($i)`,$Xi
+ mov \$3,%ecx
+ jmp .Loop_16_xx_avx2
+.align 32
+.Loop_16_xx_avx2:
+___
+for(;$i<32;$i++) { &ROUND_16_XX_avx($i,@V); unshift(@V,pop(@V)); }
+$code.=<<___;
+ dec %ecx
+ jnz .Loop_16_xx_avx2
+
+ mov \$1,%ecx
+ lea `$REG_SZ*16`(%rsp),%rbx
+ lea K256+128(%rip),$Tbl
+___
+for($i=0;$i<8;$i++) {
+ $code.=<<___;
+ cmp `4*$i`(%rbx),%ecx # examine counters
+ cmovge $Tbl,@ptr[$i] # cancel input
+___
+}
+$code.=<<___;
+ vmovdqa (%rbx),$sigma # pull counters
+ vpxor $t1,$t1,$t1
+ vmovdqa $sigma,$Xn
+ vpcmpgtd $t1,$Xn,$Xn # mask value
+ vpaddd $Xn,$sigma,$sigma # counters--
+
+ vmovdqu 0x00-0x80($ctx),$t1
+ vpand $Xn,$A,$A
+ vmovdqu 0x20-0x80($ctx),$t2
+ vpand $Xn,$B,$B
+ vmovdqu 0x40-0x80($ctx),$t3
+ vpand $Xn,$C,$C
+ vmovdqu 0x60-0x80($ctx),$Xi
+ vpand $Xn,$D,$D
+ vpaddd $t1,$A,$A
+ vmovdqu 0x80-0x80($ctx),$t1
+ vpand $Xn,$E,$E
+ vpaddd $t2,$B,$B
+ vmovdqu 0xa0-0x80($ctx),$t2
+ vpand $Xn,$F,$F
+ vpaddd $t3,$C,$C
+ vmovdqu 0xc0-0x80($ctx),$t3
+ vpand $Xn,$G,$G
+ vpaddd $Xi,$D,$D
+ vmovdqu 0xe0-0x80($ctx),$Xi
+ vpand $Xn,$H,$H
+ vpaddd $t1,$E,$E
+ vpaddd $t2,$F,$F
+ vmovdqu $A,0x00-0x80($ctx)
+ vpaddd $t3,$G,$G
+ vmovdqu $B,0x20-0x80($ctx)
+ vpaddd $Xi,$H,$H
+ vmovdqu $C,0x40-0x80($ctx)
+ vmovdqu $D,0x60-0x80($ctx)
+ vmovdqu $E,0x80-0x80($ctx)
+ vmovdqu $F,0xa0-0x80($ctx)
+ vmovdqu $G,0xc0-0x80($ctx)
+ vmovdqu $H,0xe0-0x80($ctx)
+
+ vmovdqu $sigma,(%rbx) # save counters
+ lea 256+128(%rsp),%rbx
+ vmovdqu .Lpbswap(%rip),$Xn
+ dec $num
+ jnz .Loop_avx2
+
+ #mov `$REG_SZ*17+8`(%rsp),$num
+ #lea $REG_SZ($ctx),$ctx
+ #lea `16*$REG_SZ/4`($inp),$inp
+ #dec $num
+ #jnz .Loop_grande_avx2
+
+.Ldone_avx2:
+ mov `$REG_SZ*17`(%rsp),%rax # orignal %rsp
+ vzeroupper
+___
+$code.=<<___ if ($win64);
+ movaps -0xd8(%rax),%xmm6
+ movaps -0xc8(%rax),%xmm7
+ movaps -0xb8(%rax),%xmm8
+ movaps -0xa8(%rax),%xmm9
+ movaps -0x98(%rax),%xmm10
+ movaps -0x88(%rax),%xmm11
+ movaps -0x78(%rax),%xmm12
+ movaps -0x68(%rax),%xmm13
+ movaps -0x58(%rax),%xmm14
+ movaps -0x48(%rax),%xmm15
+___
+$code.=<<___;
+ mov -48(%rax),%r15
+ mov -40(%rax),%r14
+ mov -32(%rax),%r13
+ mov -24(%rax),%r12
+ mov -16(%rax),%rbp
+ mov -8(%rax),%rbx
+ lea (%rax),%rsp
+.Lepilogue_avx2:
+ ret
+.size sha256_multi_block_avx2,.-sha256_multi_block_avx2
+___
+ } }}}
+$code.=<<___;
+.align 256
+K256:
+___
+sub TABLE {
+ foreach (@_) {
+ $code.=<<___;
+ .long $_,$_,$_,$_
+ .long $_,$_,$_,$_
+___
+ }
+}
+&TABLE( 0x428a2f98,0x71374491,0xb5c0fbcf,0xe9b5dba5,
+ 0x3956c25b,0x59f111f1,0x923f82a4,0xab1c5ed5,
+ 0xd807aa98,0x12835b01,0x243185be,0x550c7dc3,
+ 0x72be5d74,0x80deb1fe,0x9bdc06a7,0xc19bf174,
+ 0xe49b69c1,0xefbe4786,0x0fc19dc6,0x240ca1cc,
+ 0x2de92c6f,0x4a7484aa,0x5cb0a9dc,0x76f988da,
+ 0x983e5152,0xa831c66d,0xb00327c8,0xbf597fc7,
+ 0xc6e00bf3,0xd5a79147,0x06ca6351,0x14292967,
+ 0x27b70a85,0x2e1b2138,0x4d2c6dfc,0x53380d13,
+ 0x650a7354,0x766a0abb,0x81c2c92e,0x92722c85,
+ 0xa2bfe8a1,0xa81a664b,0xc24b8b70,0xc76c51a3,
+ 0xd192e819,0xd6990624,0xf40e3585,0x106aa070,
+ 0x19a4c116,0x1e376c08,0x2748774c,0x34b0bcb5,
+ 0x391c0cb3,0x4ed8aa4a,0x5b9cca4f,0x682e6ff3,
+ 0x748f82ee,0x78a5636f,0x84c87814,0x8cc70208,
+ 0x90befffa,0xa4506ceb,0xbef9a3f7,0xc67178f2 );
+$code.=<<___;
+.Lpbswap:
+ .long 0x00010203,0x04050607,0x08090a0b,0x0c0d0e0f # pbswap
+ .long 0x00010203,0x04050607,0x08090a0b,0x0c0d0e0f # pbswap
+K256_shaext:
+ .long 0x428a2f98,0x71374491,0xb5c0fbcf,0xe9b5dba5
+ .long 0x3956c25b,0x59f111f1,0x923f82a4,0xab1c5ed5
+ .long 0xd807aa98,0x12835b01,0x243185be,0x550c7dc3
+ .long 0x72be5d74,0x80deb1fe,0x9bdc06a7,0xc19bf174
+ .long 0xe49b69c1,0xefbe4786,0x0fc19dc6,0x240ca1cc
+ .long 0x2de92c6f,0x4a7484aa,0x5cb0a9dc,0x76f988da
+ .long 0x983e5152,0xa831c66d,0xb00327c8,0xbf597fc7
+ .long 0xc6e00bf3,0xd5a79147,0x06ca6351,0x14292967
+ .long 0x27b70a85,0x2e1b2138,0x4d2c6dfc,0x53380d13
+ .long 0x650a7354,0x766a0abb,0x81c2c92e,0x92722c85
+ .long 0xa2bfe8a1,0xa81a664b,0xc24b8b70,0xc76c51a3
+ .long 0xd192e819,0xd6990624,0xf40e3585,0x106aa070
+ .long 0x19a4c116,0x1e376c08,0x2748774c,0x34b0bcb5
+ .long 0x391c0cb3,0x4ed8aa4a,0x5b9cca4f,0x682e6ff3
+ .long 0x748f82ee,0x78a5636f,0x84c87814,0x8cc70208
+ .long 0x90befffa,0xa4506ceb,0xbef9a3f7,0xc67178f2
+ .asciz "SHA256 multi-block transform for x86_64, CRYPTOGAMS by <appro\@openssl.org>"
+___
+
+if ($win64) {
+# EXCEPTION_DISPOSITION handler (EXCEPTION_RECORD *rec,ULONG64 frame,
+# CONTEXT *context,DISPATCHER_CONTEXT *disp)
+$rec="%rcx";
+$frame="%rdx";
+$context="%r8";
+$disp="%r9";
+
+$code.=<<___;
+.extern __imp_RtlVirtualUnwind
+.type se_handler,\@abi-omnipotent
+.align 16
+se_handler:
+ push %rsi
+ push %rdi
+ push %rbx
+ push %rbp
+ push %r12
+ push %r13
+ push %r14
+ push %r15
+ pushfq
+ sub \$64,%rsp
+
+ mov 120($context),%rax # pull context->Rax
+ mov 248($context),%rbx # pull context->Rip
+
+ mov 8($disp),%rsi # disp->ImageBase
+ mov 56($disp),%r11 # disp->HandlerData
+
+ mov 0(%r11),%r10d # HandlerData[0]
+ lea (%rsi,%r10),%r10 # end of prologue label
+ cmp %r10,%rbx # context->Rip<.Lbody
+ jb .Lin_prologue
+
+ mov 152($context),%rax # pull context->Rsp
+
+ mov 4(%r11),%r10d # HandlerData[1]
+ lea (%rsi,%r10),%r10 # epilogue label
+ cmp %r10,%rbx # context->Rip>=.Lepilogue
+ jae .Lin_prologue
+
+ mov `16*17`(%rax),%rax # pull saved stack pointer
+
+ mov -8(%rax),%rbx
+ mov -16(%rax),%rbp
+ mov %rbx,144($context) # restore context->Rbx
+ mov %rbp,160($context) # restore context->Rbp
+
+ lea -24-10*16(%rax),%rsi
+ lea 512($context),%rdi # &context.Xmm6
+ mov \$20,%ecx
+ .long 0xa548f3fc # cld; rep movsq
+
+.Lin_prologue:
+ mov 8(%rax),%rdi
+ mov 16(%rax),%rsi
+ mov %rax,152($context) # restore context->Rsp
+ mov %rsi,168($context) # restore context->Rsi
+ mov %rdi,176($context) # restore context->Rdi
+
+ mov 40($disp),%rdi # disp->ContextRecord
+ mov $context,%rsi # context
+ mov \$154,%ecx # sizeof(CONTEXT)
+ .long 0xa548f3fc # cld; rep movsq
+
+ mov $disp,%rsi
+ xor %rcx,%rcx # arg1, UNW_FLAG_NHANDLER
+ mov 8(%rsi),%rdx # arg2, disp->ImageBase
+ mov 0(%rsi),%r8 # arg3, disp->ControlPc
+ mov 16(%rsi),%r9 # arg4, disp->FunctionEntry
+ mov 40(%rsi),%r10 # disp->ContextRecord
+ lea 56(%rsi),%r11 # &disp->HandlerData
+ lea 24(%rsi),%r12 # &disp->EstablisherFrame
+ mov %r10,32(%rsp) # arg5
+ mov %r11,40(%rsp) # arg6
+ mov %r12,48(%rsp) # arg7
+ mov %rcx,56(%rsp) # arg8, (NULL)
+ call *__imp_RtlVirtualUnwind(%rip)
+
+ mov \$1,%eax # ExceptionContinueSearch
+ add \$64,%rsp
+ popfq
+ pop %r15
+ pop %r14
+ pop %r13
+ pop %r12
+ pop %rbp
+ pop %rbx
+ pop %rdi
+ pop %rsi
+ ret
+.size se_handler,.-se_handler
+___
+$code.=<<___ if ($avx>1);
+.type avx2_handler,\@abi-omnipotent
+.align 16
+avx2_handler:
+ push %rsi
+ push %rdi
+ push %rbx
+ push %rbp
+ push %r12
+ push %r13
+ push %r14
+ push %r15
+ pushfq
+ sub \$64,%rsp
+
+ mov 120($context),%rax # pull context->Rax
+ mov 248($context),%rbx # pull context->Rip
+
+ mov 8($disp),%rsi # disp->ImageBase
+ mov 56($disp),%r11 # disp->HandlerData
+
+ mov 0(%r11),%r10d # HandlerData[0]
+ lea (%rsi,%r10),%r10 # end of prologue label
+ cmp %r10,%rbx # context->Rip<body label
+ jb .Lin_prologue
+
+ mov 152($context),%rax # pull context->Rsp
+
+ mov 4(%r11),%r10d # HandlerData[1]
+ lea (%rsi,%r10),%r10 # epilogue label
+ cmp %r10,%rbx # context->Rip>=epilogue label
+ jae .Lin_prologue
+
+ mov `32*17`($context),%rax # pull saved stack pointer
+
+ mov -8(%rax),%rbx
+ mov -16(%rax),%rbp
+ mov -24(%rax),%r12
+ mov -32(%rax),%r13
+ mov -40(%rax),%r14
+ mov -48(%rax),%r15
+ mov %rbx,144($context) # restore context->Rbx
+ mov %rbp,160($context) # restore context->Rbp
+ mov %r12,216($context) # restore cotnext->R12
+ mov %r13,224($context) # restore cotnext->R13
+ mov %r14,232($context) # restore cotnext->R14
+ mov %r15,240($context) # restore cotnext->R15
+
+ lea -56-10*16(%rax),%rsi
+ lea 512($context),%rdi # &context.Xmm6
+ mov \$20,%ecx
+ .long 0xa548f3fc # cld; rep movsq
+
+ jmp .Lin_prologue
+.size avx2_handler,.-avx2_handler
+___
+$code.=<<___;
+.section .pdata
+.align 4
+ .rva .LSEH_begin_sha256_multi_block
+ .rva .LSEH_end_sha256_multi_block
+ .rva .LSEH_info_sha256_multi_block
+ .rva .LSEH_begin_sha256_multi_block_shaext
+ .rva .LSEH_end_sha256_multi_block_shaext
+ .rva .LSEH_info_sha256_multi_block_shaext
+___
+$code.=<<___ if ($avx);
+ .rva .LSEH_begin_sha256_multi_block_avx
+ .rva .LSEH_end_sha256_multi_block_avx
+ .rva .LSEH_info_sha256_multi_block_avx
+___
+$code.=<<___ if ($avx>1);
+ .rva .LSEH_begin_sha256_multi_block_avx2
+ .rva .LSEH_end_sha256_multi_block_avx2
+ .rva .LSEH_info_sha256_multi_block_avx2
+___
+$code.=<<___;
+.section .xdata
+.align 8
+.LSEH_info_sha256_multi_block:
+ .byte 9,0,0,0
+ .rva se_handler
+ .rva .Lbody,.Lepilogue # HandlerData[]
+.LSEH_info_sha256_multi_block_shaext:
+ .byte 9,0,0,0
+ .rva se_handler
+ .rva .Lbody_shaext,.Lepilogue_shaext # HandlerData[]
+___
+$code.=<<___ if ($avx);
+.LSEH_info_sha256_multi_block_avx:
+ .byte 9,0,0,0
+ .rva se_handler
+ .rva .Lbody_avx,.Lepilogue_avx # HandlerData[]
+___
+$code.=<<___ if ($avx>1);
+.LSEH_info_sha256_multi_block_avx2:
+ .byte 9,0,0,0
+ .rva avx2_handler
+ .rva .Lbody_avx2,.Lepilogue_avx2 # HandlerData[]
+___
+}
+####################################################################
+
+sub rex {
+ local *opcode=shift;
+ my ($dst,$src)=@_;
+ my $rex=0;
+
+ $rex|=0x04 if ($dst>=8);
+ $rex|=0x01 if ($src>=8);
+ unshift @opcode,$rex|0x40 if ($rex);
+}
+
+sub sha256op38 {
+ my $instr = shift;
+ my %opcodelet = (
+ "sha256rnds2" => 0xcb,
+ "sha256msg1" => 0xcc,
+ "sha256msg2" => 0xcd );
+
+ if (defined($opcodelet{$instr}) && @_[0] =~ /%xmm([0-9]+),\s*%xmm([0-9]+)/) {
+ my @opcode=(0x0f,0x38);
+ rex(\@opcode,$2,$1);
+ push @opcode,$opcodelet{$instr};
+ push @opcode,0xc0|($1&7)|(($2&7)<<3); # ModR/M
+ return ".byte\t".join(',',@opcode);
+ } else {
+ return $instr."\t".@_[0];
+ }
+}
+
+foreach (split("\n",$code)) {
+ s/\`([^\`]*)\`/eval($1)/ge;
+
+ s/\b(sha256[^\s]*)\s+(.*)/sha256op38($1,$2)/geo or
+
+ s/\b(vmov[dq])\b(.+)%ymm([0-9]+)/$1$2%xmm$3/go or
+ s/\b(vmovdqu)\b(.+)%x%ymm([0-9]+)/$1$2%xmm$3/go or
+ s/\b(vpinsr[qd])\b(.+)%ymm([0-9]+),%ymm([0-9]+)/$1$2%xmm$3,%xmm$4/go or
+ s/\b(vpextr[qd])\b(.+)%ymm([0-9]+)/$1$2%xmm$3/go or
+ s/\b(vinserti128)\b(\s+)%ymm/$1$2\$1,%xmm/go or
+ s/\b(vpbroadcast[qd]\s+)%ymm([0-9]+)/$1%xmm$2/go;
+
+ print $_,"\n";
+}
+
+close STDOUT;
diff --git a/crypto/openssl/crypto/sha/asm/sha512-586.pl b/crypto/openssl/crypto/sha/asm/sha512-586.pl
index 7eab6a5..e96ec00 100755
--- a/crypto/openssl/crypto/sha/asm/sha512-586.pl
+++ b/crypto/openssl/crypto/sha/asm/sha512-586.pl
@@ -1,7 +1,7 @@
#!/usr/bin/env perl
#
# ====================================================================
-# Written by Andy Polyakov <appro@fy.chalmers.se> for the OpenSSL
+# Written by Andy Polyakov <appro@openssl.org> for the OpenSSL
# project. The module is, however, dual licensed under OpenSSL and
# CRYPTOGAMS licenses depending on where you obtain it. For further
# details see http://www.openssl.org/~appro/cryptogams/.
@@ -9,17 +9,31 @@
#
# SHA512 block transform for x86. September 2007.
#
+# May 2013.
+#
+# Add SSSE3 code path, 20-25% improvement [over original SSE2 code].
+#
# Performance in clock cycles per processed byte (less is better):
#
-# Pentium PIII P4 AMD K8 Core2
-# gcc 100 75 116 54 66
-# icc 97 77 95 55 57
-# x86 asm 61 56 82 36 40
-# SSE2 asm - - 38 24 20
-# x86_64 asm(*) - - 30 10.0 10.5
+# gcc icc x86 asm SIMD(*) x86_64(**)
+# Pentium 100 97 61 - -
+# PIII 75 77 56 - -
+# P4 116 95 82 34.6 30.8
+# AMD K8 54 55 36 20.7 9.57
+# Core2 66 57 40 15.9 9.97
+# Westmere 70 - 38 12.2 9.58
+# Sandy Bridge 58 - 35 11.9 11.2
+# Ivy Bridge 50 - 33 11.5 8.17
+# Haswell 46 - 29 11.3 7.66
+# Bulldozer 121 - 50 14.0 13.5
+# VIA Nano 91 - 52 33 14.7
+# Atom 126 - 68 48(***) 14.7
+# Silvermont 97 - 58 42(***) 17.5
#
-# (*) x86_64 assembler performance is presented for reference
-# purposes.
+# (*) whichever best applicable.
+# (**) x86_64 assembler performance is presented for reference
+# purposes, the results are for integer-only code.
+# (***) paddq is increadibly slow on Atom.
#
# IALU code-path is optimized for elder Pentiums. On vanilla Pentium
# performance improvement over compiler generated code reaches ~60%,
@@ -66,72 +80,77 @@ $Hsse2=&QWP(56,"esp");
$A="mm0"; # B-D and
$E="mm4"; # F-H are commonly loaded to respectively mm1-mm3 and
# mm5-mm7, but it's done on on-demand basis...
+$BxC="mm2"; # ... except for B^C
sub BODY_00_15_sse2 {
- my $prefetch=shift;
+ my $phase=shift;
- &movq ("mm5",$Fsse2); # load f
- &movq ("mm6",$Gsse2); # load g
- &movq ("mm7",$Hsse2); # load h
+ #&movq ("mm5",$Fsse2); # load f
+ #&movq ("mm6",$Gsse2); # load g
&movq ("mm1",$E); # %mm1 is sliding right
- &movq ("mm2",$E); # %mm2 is sliding left
+ &pxor ("mm5","mm6"); # f^=g
&psrlq ("mm1",14);
- &movq ($Esse2,$E); # modulo-scheduled save e
- &psllq ("mm2",23);
+ &movq ($Esse2,$E); # modulo-scheduled save e
+ &pand ("mm5",$E); # f&=e
+ &psllq ($E,23); # $E is sliding left
+ &movq ($A,"mm3") if ($phase<2);
+ &movq (&QWP(8*9,"esp"),"mm7") # save X[i]
&movq ("mm3","mm1"); # %mm3 is T1
- &psrlq ("mm1",4);
- &pxor ("mm3","mm2");
- &psllq ("mm2",23);
+ &psrlq ("mm1",4);
+ &pxor ("mm5","mm6"); # Ch(e,f,g)
+ &pxor ("mm3",$E);
+ &psllq ($E,23);
&pxor ("mm3","mm1");
- &psrlq ("mm1",23);
- &pxor ("mm3","mm2");
- &psllq ("mm2",4);
+ &movq ($Asse2,$A); # modulo-scheduled save a
+ &paddq ("mm7","mm5"); # X[i]+=Ch(e,f,g)
+ &pxor ("mm3",$E);
+ &psrlq ("mm1",23);
+ &paddq ("mm7",$Hsse2); # X[i]+=h
&pxor ("mm3","mm1");
- &paddq ("mm7",QWP(0,$K512)); # h+=K512[i]
- &pxor ("mm3","mm2"); # T1=Sigma1_512(e)
-
- &pxor ("mm5","mm6"); # f^=g
+ &psllq ($E,4);
+ &paddq ("mm7",QWP(0,$K512)); # X[i]+=K512[i]
+ &pxor ("mm3",$E); # T1=Sigma1_512(e)
+
+ &movq ($E,$Dsse2); # e = load d, e in next round
+ &paddq ("mm3","mm7"); # T1+=X[i]
+ &movq ("mm5",$A); # %mm5 is sliding right
+ &psrlq ("mm5",28);
+ &paddq ($E,"mm3"); # d += T1
+ &movq ("mm6",$A); # %mm6 is sliding left
+ &movq ("mm7","mm5");
+ &psllq ("mm6",25);
&movq ("mm1",$Bsse2); # load b
- &pand ("mm5",$E); # f&=e
- &movq ("mm2",$Csse2); # load c
- &pxor ("mm5","mm6"); # f^=g
- &movq ($E,$Dsse2); # e = load d
- &paddq ("mm3","mm5"); # T1+=Ch(e,f,g)
- &movq (&QWP(0,"esp"),$A); # modulo-scheduled save a
- &paddq ("mm3","mm7"); # T1+=h
-
- &movq ("mm5",$A); # %mm5 is sliding right
- &movq ("mm6",$A); # %mm6 is sliding left
- &paddq ("mm3",&QWP(8*9,"esp")); # T1+=X[0]
- &psrlq ("mm5",28);
- &paddq ($E,"mm3"); # e += T1
- &psllq ("mm6",25);
- &movq ("mm7","mm5"); # %mm7 is T2
- &psrlq ("mm5",6);
- &pxor ("mm7","mm6");
- &psllq ("mm6",5);
- &pxor ("mm7","mm5");
- &psrlq ("mm5",5);
- &pxor ("mm7","mm6");
- &psllq ("mm6",6);
- &pxor ("mm7","mm5");
+ &psrlq ("mm5",6);
+ &pxor ("mm7","mm6");
&sub ("esp",8);
- &pxor ("mm7","mm6"); # T2=Sigma0_512(a)
-
- &movq ("mm5",$A); # %mm5=a
- &por ($A,"mm2"); # a=a|c
- &movq ("mm6",&QWP(8*(9+16-14),"esp")) if ($prefetch);
- &pand ("mm5","mm2"); # %mm5=a&c
- &pand ($A,"mm1"); # a=(a|c)&b
- &movq ("mm2",&QWP(8*(9+16-1),"esp")) if ($prefetch);
- &por ("mm5",$A); # %mm5=(a&c)|((a|c)&b)
- &paddq ("mm7","mm5"); # T2+=Maj(a,b,c)
- &movq ($A,"mm3"); # a=T1
-
- &mov (&LB("edx"),&BP(0,$K512));
- &paddq ($A,"mm7"); # a+=T2
- &add ($K512,8);
+ &psllq ("mm6",5);
+ &pxor ("mm7","mm5");
+ &pxor ($A,"mm1"); # a^b, b^c in next round
+ &psrlq ("mm5",5);
+ &pxor ("mm7","mm6");
+ &pand ($BxC,$A); # (b^c)&(a^b)
+ &psllq ("mm6",6);
+ &pxor ("mm7","mm5");
+ &pxor ($BxC,"mm1"); # [h=]Maj(a,b,c)
+ &pxor ("mm6","mm7"); # Sigma0_512(a)
+ &movq ("mm7",&QWP(8*(9+16-1),"esp")) if ($phase!=0); # pre-fetch
+ &movq ("mm5",$Fsse2) if ($phase==0); # load f
+
+ if ($phase>1) {
+ &paddq ($BxC,"mm6"); # h+=Sigma0(a)
+ &add ($K512,8);
+ #&paddq ($BxC,"mm3"); # h+=T1
+
+ ($A,$BxC) = ($BxC,$A); # rotate registers
+ } else {
+ &paddq ("mm3",$BxC); # T1+=Maj(a,b,c)
+ &movq ($BxC,$A);
+ &add ($K512,8);
+ &paddq ("mm3","mm6"); # T1+=Sigma0(a)
+ &movq ("mm6",$Gsse2) if ($phase==0); # load g
+ #&movq ($A,"mm3"); # h=T1
+ }
}
sub BODY_00_15_x86 {
@@ -284,110 +303,357 @@ sub BODY_00_15_x86 {
if ($sse2) {
&picmeup("edx","OPENSSL_ia32cap_P",$K512,&label("K512"));
- &bt (&DWP(0,"edx"),26);
- &jnc (&label("loop_x86"));
+ &mov ("ecx",&DWP(0,"edx"));
+ &test ("ecx",1<<26);
+ &jz (&label("loop_x86"));
+
+ &mov ("edx",&DWP(4,"edx"));
# load ctx->h[0-7]
&movq ($A,&QWP(0,"esi"));
+ &and ("ecx",1<<24); # XMM registers availability
&movq ("mm1",&QWP(8,"esi"));
- &movq ("mm2",&QWP(16,"esi"));
+ &and ("edx",1<<9); # SSSE3 bit
+ &movq ($BxC,&QWP(16,"esi"));
+ &or ("ecx","edx");
&movq ("mm3",&QWP(24,"esi"));
&movq ($E,&QWP(32,"esi"));
&movq ("mm5",&QWP(40,"esi"));
&movq ("mm6",&QWP(48,"esi"));
&movq ("mm7",&QWP(56,"esi"));
+ &cmp ("ecx",1<<24|1<<9);
+ &je (&label("SSSE3"));
&sub ("esp",8*10);
+ &jmp (&label("loop_sse2"));
&set_label("loop_sse2",16);
- # &movq ($Asse2,$A);
+ #&movq ($Asse2,$A);
&movq ($Bsse2,"mm1");
- &movq ($Csse2,"mm2");
+ &movq ($Csse2,$BxC);
&movq ($Dsse2,"mm3");
- # &movq ($Esse2,$E);
+ #&movq ($Esse2,$E);
&movq ($Fsse2,"mm5");
&movq ($Gsse2,"mm6");
+ &pxor ($BxC,"mm1"); # magic
&movq ($Hsse2,"mm7");
+ &movq ("mm3",$A); # magic
- &mov ("ecx",&DWP(0,"edi"));
- &mov ("edx",&DWP(4,"edi"));
+ &mov ("eax",&DWP(0,"edi"));
+ &mov ("ebx",&DWP(4,"edi"));
&add ("edi",8);
- &bswap ("ecx");
- &bswap ("edx");
- &mov (&DWP(8*9+4,"esp"),"ecx");
- &mov (&DWP(8*9+0,"esp"),"edx");
+ &mov ("edx",15); # counter
+ &bswap ("eax");
+ &bswap ("ebx");
+ &jmp (&label("00_14_sse2"));
&set_label("00_14_sse2",16);
+ &movd ("mm1","eax");
&mov ("eax",&DWP(0,"edi"));
+ &movd ("mm7","ebx");
&mov ("ebx",&DWP(4,"edi"));
&add ("edi",8);
&bswap ("eax");
&bswap ("ebx");
- &mov (&DWP(8*8+4,"esp"),"eax");
- &mov (&DWP(8*8+0,"esp"),"ebx");
+ &punpckldq("mm7","mm1");
&BODY_00_15_sse2();
- &cmp (&LB("edx"),0x35);
- &jne (&label("00_14_sse2"));
+ &dec ("edx");
+ &jnz (&label("00_14_sse2"));
+
+ &movd ("mm1","eax");
+ &movd ("mm7","ebx");
+ &punpckldq("mm7","mm1");
&BODY_00_15_sse2(1);
+ &pxor ($A,$A); # A is in %mm3
+ &mov ("edx",32); # counter
+ &jmp (&label("16_79_sse2"));
+
&set_label("16_79_sse2",16);
- #&movq ("mm2",&QWP(8*(9+16-1),"esp")); #prefetched in BODY_00_15
- #&movq ("mm6",&QWP(8*(9+16-14),"esp"));
- &movq ("mm1","mm2");
+ for ($j=0;$j<2;$j++) { # 2x unroll
+ #&movq ("mm7",&QWP(8*(9+16-1),"esp")); # prefetched in BODY_00_15
+ &movq ("mm5",&QWP(8*(9+16-14),"esp"));
+ &movq ("mm1","mm7");
+ &psrlq ("mm7",1);
+ &movq ("mm6","mm5");
+ &psrlq ("mm5",6);
+ &psllq ("mm1",56);
+ &paddq ($A,"mm3"); # from BODY_00_15
+ &movq ("mm3","mm7");
+ &psrlq ("mm7",7-1);
+ &pxor ("mm3","mm1");
+ &psllq ("mm1",63-56);
+ &pxor ("mm3","mm7");
+ &psrlq ("mm7",8-7);
+ &pxor ("mm3","mm1");
+ &movq ("mm1","mm5");
+ &psrlq ("mm5",19-6);
+ &pxor ("mm7","mm3"); # sigma0
+
+ &psllq ("mm6",3);
+ &pxor ("mm1","mm5");
+ &paddq ("mm7",&QWP(8*(9+16),"esp"));
+ &pxor ("mm1","mm6");
+ &psrlq ("mm5",61-19);
+ &paddq ("mm7",&QWP(8*(9+16-9),"esp"));
+ &pxor ("mm1","mm5");
+ &psllq ("mm6",45-3);
+ &movq ("mm5",$Fsse2); # load f
+ &pxor ("mm1","mm6"); # sigma1
+ &movq ("mm6",$Gsse2); # load g
- &psrlq ("mm2",1);
- &movq ("mm7","mm6");
- &psrlq ("mm6",6);
- &movq ("mm3","mm2");
+ &paddq ("mm7","mm1"); # X[i]
+ #&movq (&QWP(8*9,"esp"),"mm7"); # moved to BODY_00_15
- &psrlq ("mm2",7-1);
- &movq ("mm5","mm6");
- &psrlq ("mm6",19-6);
- &pxor ("mm3","mm2");
+ &BODY_00_15_sse2(2);
+ }
+ &dec ("edx");
+ &jnz (&label("16_79_sse2"));
- &psrlq ("mm2",8-7);
- &pxor ("mm5","mm6");
- &psrlq ("mm6",61-19);
- &pxor ("mm3","mm2");
+ #&movq ($A,$Asse2);
+ &paddq ($A,"mm3"); # from BODY_00_15
+ &movq ("mm1",$Bsse2);
+ #&movq ($BxC,$Csse2);
+ &movq ("mm3",$Dsse2);
+ #&movq ($E,$Esse2);
+ &movq ("mm5",$Fsse2);
+ &movq ("mm6",$Gsse2);
+ &movq ("mm7",$Hsse2);
- &movq ("mm2",&QWP(8*(9+16),"esp"));
+ &pxor ($BxC,"mm1"); # de-magic
+ &paddq ($A,&QWP(0,"esi"));
+ &paddq ("mm1",&QWP(8,"esi"));
+ &paddq ($BxC,&QWP(16,"esi"));
+ &paddq ("mm3",&QWP(24,"esi"));
+ &paddq ($E,&QWP(32,"esi"));
+ &paddq ("mm5",&QWP(40,"esi"));
+ &paddq ("mm6",&QWP(48,"esi"));
+ &paddq ("mm7",&QWP(56,"esi"));
- &psllq ("mm1",56);
- &pxor ("mm5","mm6");
- &psllq ("mm7",3);
- &pxor ("mm3","mm1");
+ &mov ("eax",8*80);
+ &movq (&QWP(0,"esi"),$A);
+ &movq (&QWP(8,"esi"),"mm1");
+ &movq (&QWP(16,"esi"),$BxC);
+ &movq (&QWP(24,"esi"),"mm3");
+ &movq (&QWP(32,"esi"),$E);
+ &movq (&QWP(40,"esi"),"mm5");
+ &movq (&QWP(48,"esi"),"mm6");
+ &movq (&QWP(56,"esi"),"mm7");
- &paddq ("mm2",&QWP(8*(9+16-9),"esp"));
+ &lea ("esp",&DWP(0,"esp","eax")); # destroy frame
+ &sub ($K512,"eax"); # rewind K
- &psllq ("mm1",63-56);
- &pxor ("mm5","mm7");
- &psllq ("mm7",45-3);
- &pxor ("mm3","mm1");
- &pxor ("mm5","mm7");
+ &cmp ("edi",&DWP(8*10+8,"esp")); # are we done yet?
+ &jb (&label("loop_sse2"));
- &paddq ("mm3","mm5");
- &paddq ("mm3","mm2");
- &movq (&QWP(8*9,"esp"),"mm3");
+ &mov ("esp",&DWP(8*10+12,"esp")); # restore sp
+ &emms ();
+&function_end_A();
- &BODY_00_15_sse2(1);
+&set_label("SSSE3",32);
+{ my ($cnt,$frame)=("ecx","edx");
+ my @X=map("xmm$_",(0..7));
+ my $j;
+ my $i=0;
+
+ &lea ($frame,&DWP(-64,"esp"));
+ &sub ("esp",256);
+
+ # fixed stack frame layout
+ #
+ # +0 A B C D E F G H # backing store
+ # +64 X[0]+K[i] .. X[15]+K[i] # XMM->MM xfer area
+ # +192 # XMM off-load ring buffer
+ # +256 # saved parameters
+
+ &movdqa (@X[1],&QWP(80*8,$K512)); # byte swap mask
+ &movdqu (@X[0],&QWP(0,"edi"));
+ &pshufb (@X[0],@X[1]);
+ for ($j=0;$j<8;$j++) {
+ &movdqa (&QWP(16*(($j-1)%4),$frame),@X[3]) if ($j>4); # off-load
+ &movdqa (@X[3],&QWP(16*($j%8),$K512));
+ &movdqa (@X[2],@X[1]) if ($j<7); # perpetuate byte swap mask
+ &movdqu (@X[1],&QWP(16*($j+1),"edi")) if ($j<7); # next input
+ &movdqa (@X[1],&QWP(16*(($j+1)%4),$frame)) if ($j==7);# restore @X[0]
+ &paddq (@X[3],@X[0]);
+ &pshufb (@X[1],@X[2]) if ($j<7);
+ &movdqa (&QWP(16*($j%8)-128,$frame),@X[3]); # xfer X[i]+K[i]
+
+ push(@X,shift(@X)); # rotate(@X)
+ }
+ #&jmp (&label("loop_ssse3"));
+ &nop ();
- &cmp (&LB("edx"),0x17);
- &jne (&label("16_79_sse2"));
+&set_label("loop_ssse3",32);
+ &movdqa (@X[2],&QWP(16*(($j+1)%4),$frame)); # pre-restore @X[1]
+ &movdqa (&QWP(16*(($j-1)%4),$frame),@X[3]); # off-load @X[3]
+ &lea ($K512,&DWP(16*8,$K512));
+
+ #&movq ($Asse2,$A); # off-load A-H
+ &movq ($Bsse2,"mm1");
+ &mov ("ebx","edi");
+ &movq ($Csse2,$BxC);
+ &lea ("edi",&DWP(128,"edi")); # advance input
+ &movq ($Dsse2,"mm3");
+ &cmp ("edi","eax");
+ #&movq ($Esse2,$E);
+ &movq ($Fsse2,"mm5");
+ &cmovb ("ebx","edi");
+ &movq ($Gsse2,"mm6");
+ &mov ("ecx",4); # loop counter
+ &pxor ($BxC,"mm1"); # magic
+ &movq ($Hsse2,"mm7");
+ &pxor ("mm3","mm3"); # magic
+
+ &jmp (&label("00_47_ssse3"));
+
+sub BODY_00_15_ssse3 { # "phase-less" copy of BODY_00_15_sse2
+ (
+ '&movq ("mm1",$E)', # %mm1 is sliding right
+ '&movq ("mm7",&QWP(((-8*$i)%128)-128,$frame))',# X[i]+K[i]
+ '&pxor ("mm5","mm6")', # f^=g
+ '&psrlq ("mm1",14)',
+ '&movq (&QWP(8*($i+4)%64,"esp"),$E)', # modulo-scheduled save e
+ '&pand ("mm5",$E)', # f&=e
+ '&psllq ($E,23)', # $E is sliding left
+ '&paddq ($A,"mm3")', # [h+=Maj(a,b,c)]
+ '&movq ("mm3","mm1")', # %mm3 is T1
+ '&psrlq("mm1",4)',
+ '&pxor ("mm5","mm6")', # Ch(e,f,g)
+ '&pxor ("mm3",$E)',
+ '&psllq($E,23)',
+ '&pxor ("mm3","mm1")',
+ '&movq (&QWP(8*$i%64,"esp"),$A)', # modulo-scheduled save a
+ '&paddq("mm7","mm5")', # X[i]+=Ch(e,f,g)
+ '&pxor ("mm3",$E)',
+ '&psrlq("mm1",23)',
+ '&paddq("mm7",&QWP(8*($i+7)%64,"esp"))', # X[i]+=h
+ '&pxor ("mm3","mm1")',
+ '&psllq($E,4)',
+ '&pxor ("mm3",$E)', # T1=Sigma1_512(e)
+
+ '&movq ($E,&QWP(8*($i+3)%64,"esp"))', # e = load d, e in next round
+ '&paddq ("mm3","mm7")', # T1+=X[i]
+ '&movq ("mm5",$A)', # %mm5 is sliding right
+ '&psrlq("mm5",28)',
+ '&paddq ($E,"mm3")', # d += T1
+ '&movq ("mm6",$A)', # %mm6 is sliding left
+ '&movq ("mm7","mm5")',
+ '&psllq("mm6",25)',
+ '&movq ("mm1",&QWP(8*($i+1)%64,"esp"))', # load b
+ '&psrlq("mm5",6)',
+ '&pxor ("mm7","mm6")',
+ '&psllq("mm6",5)',
+ '&pxor ("mm7","mm5")',
+ '&pxor ($A,"mm1")', # a^b, b^c in next round
+ '&psrlq("mm5",5)',
+ '&pxor ("mm7","mm6")',
+ '&pand ($BxC,$A)', # (b^c)&(a^b)
+ '&psllq("mm6",6)',
+ '&pxor ("mm7","mm5")',
+ '&pxor ($BxC,"mm1")', # [h=]Maj(a,b,c)
+ '&pxor ("mm6","mm7")', # Sigma0_512(a)
+ '&movq ("mm5",&QWP(8*($i+5-1)%64,"esp"))', # pre-load f
+ '&paddq ($BxC,"mm6")', # h+=Sigma0(a)
+ '&movq ("mm6",&QWP(8*($i+6-1)%64,"esp"))', # pre-load g
+
+ '($A,$BxC) = ($BxC,$A); $i--;'
+ );
+}
- # &movq ($A,$Asse2);
+&set_label("00_47_ssse3",32);
+
+ for(;$j<16;$j++) {
+ my ($t0,$t2,$t1)=@X[2..4];
+ my @insns = (&BODY_00_15_ssse3(),&BODY_00_15_ssse3());
+
+ &movdqa ($t2,@X[5]);
+ &movdqa (@X[1],$t0); # restore @X[1]
+ &palignr ($t0,@X[0],8); # X[1..2]
+ &movdqa (&QWP(16*($j%4),$frame),@X[4]); # off-load @X[4]
+ &palignr ($t2,@X[4],8); # X[9..10]
+
+ &movdqa ($t1,$t0);
+ &psrlq ($t0,7);
+ &paddq (@X[0],$t2); # X[0..1] += X[9..10]
+ &movdqa ($t2,$t1);
+ &psrlq ($t1,1);
+ &psllq ($t2,64-8);
+ &pxor ($t0,$t1);
+ &psrlq ($t1,8-1);
+ &pxor ($t0,$t2);
+ &psllq ($t2,8-1);
+ &pxor ($t0,$t1);
+ &movdqa ($t1,@X[7]);
+ &pxor ($t0,$t2); # sigma0(X[1..2])
+ &movdqa ($t2,@X[7]);
+ &psrlq ($t1,6);
+ &paddq (@X[0],$t0); # X[0..1] += sigma0(X[1..2])
+
+ &movdqa ($t0,@X[7]);
+ &psrlq ($t2,19);
+ &psllq ($t0,64-61);
+ &pxor ($t1,$t2);
+ &psrlq ($t2,61-19);
+ &pxor ($t1,$t0);
+ &psllq ($t0,61-19);
+ &pxor ($t1,$t2);
+ &movdqa ($t2,&QWP(16*(($j+2)%4),$frame));# pre-restore @X[1]
+ &pxor ($t1,$t0); # sigma0(X[1..2])
+ &movdqa ($t0,&QWP(16*($j%8),$K512));
+ eval(shift(@insns));
+ &paddq (@X[0],$t1); # X[0..1] += sigma0(X[14..15])
+ eval(shift(@insns));
+ eval(shift(@insns));
+ eval(shift(@insns));
+ eval(shift(@insns));
+ &paddq ($t0,@X[0]);
+ foreach(@insns) { eval; }
+ &movdqa (&QWP(16*($j%8)-128,$frame),$t0);# xfer X[i]+K[i]
+
+ push(@X,shift(@X)); # rotate(@X)
+ }
+ &lea ($K512,&DWP(16*8,$K512));
+ &dec ("ecx");
+ &jnz (&label("00_47_ssse3"));
+
+ &movdqa (@X[1],&QWP(0,$K512)); # byte swap mask
+ &lea ($K512,&DWP(-80*8,$K512)); # rewind
+ &movdqu (@X[0],&QWP(0,"ebx"));
+ &pshufb (@X[0],@X[1]);
+
+ for ($j=0;$j<8;$j++) { # load next or same block
+ my @insns = (&BODY_00_15_ssse3(),&BODY_00_15_ssse3());
+
+ &movdqa (&QWP(16*(($j-1)%4),$frame),@X[3]) if ($j>4); # off-load
+ &movdqa (@X[3],&QWP(16*($j%8),$K512));
+ &movdqa (@X[2],@X[1]) if ($j<7); # perpetuate byte swap mask
+ &movdqu (@X[1],&QWP(16*($j+1),"ebx")) if ($j<7); # next input
+ &movdqa (@X[1],&QWP(16*(($j+1)%4),$frame)) if ($j==7);# restore @X[0]
+ &paddq (@X[3],@X[0]);
+ &pshufb (@X[1],@X[2]) if ($j<7);
+ foreach(@insns) { eval; }
+ &movdqa (&QWP(16*($j%8)-128,$frame),@X[3]);# xfer X[i]+K[i]
+
+ push(@X,shift(@X)); # rotate(@X)
+ }
+
+ #&movq ($A,$Asse2); # load A-H
&movq ("mm1",$Bsse2);
- &movq ("mm2",$Csse2);
+ &paddq ($A,"mm3"); # from BODY_00_15
+ #&movq ($BxC,$Csse2);
&movq ("mm3",$Dsse2);
- # &movq ($E,$Esse2);
- &movq ("mm5",$Fsse2);
- &movq ("mm6",$Gsse2);
+ #&movq ($E,$Esse2);
+ #&movq ("mm5",$Fsse2);
+ #&movq ("mm6",$Gsse2);
&movq ("mm7",$Hsse2);
+ &pxor ($BxC,"mm1"); # de-magic
&paddq ($A,&QWP(0,"esi"));
&paddq ("mm1",&QWP(8,"esi"));
- &paddq ("mm2",&QWP(16,"esi"));
+ &paddq ($BxC,&QWP(16,"esi"));
&paddq ("mm3",&QWP(24,"esi"));
&paddq ($E,&QWP(32,"esi"));
&paddq ("mm5",&QWP(40,"esi"));
@@ -396,21 +662,19 @@ if ($sse2) {
&movq (&QWP(0,"esi"),$A);
&movq (&QWP(8,"esi"),"mm1");
- &movq (&QWP(16,"esi"),"mm2");
+ &movq (&QWP(16,"esi"),$BxC);
&movq (&QWP(24,"esi"),"mm3");
&movq (&QWP(32,"esi"),$E);
&movq (&QWP(40,"esi"),"mm5");
&movq (&QWP(48,"esi"),"mm6");
&movq (&QWP(56,"esi"),"mm7");
- &add ("esp",8*80); # destroy frame
- &sub ($K512,8*80); # rewind K
-
- &cmp ("edi",&DWP(8*10+8,"esp")); # are we done yet?
- &jb (&label("loop_sse2"));
+ &cmp ("edi","eax") # are we done yet?
+ &jb (&label("loop_ssse3"));
+ &mov ("esp",&DWP(64+12,$frame)); # restore sp
&emms ();
- &mov ("esp",&DWP(8*10+12,"esp")); # restore sp
+}
&function_end_A();
}
&set_label("loop_x86",16);
@@ -638,6 +902,9 @@ if ($sse2) {
&data_word(0xfc657e2a,0x597f299c); # u64
&data_word(0x3ad6faec,0x5fcb6fab); # u64
&data_word(0x4a475817,0x6c44198c); # u64
+
+ &data_word(0x04050607,0x00010203); # byte swap
+ &data_word(0x0c0d0e0f,0x08090a0b); # mask
&function_end_B("sha512_block_data_order");
&asciz("SHA512 block transform for x86, CRYPTOGAMS by <appro\@openssl.org>");
diff --git a/crypto/openssl/crypto/sha/asm/sha512-armv4.pl b/crypto/openssl/crypto/sha/asm/sha512-armv4.pl
index 7faf37b..fb7dc50 100755
--- a/crypto/openssl/crypto/sha/asm/sha512-armv4.pl
+++ b/crypto/openssl/crypto/sha/asm/sha512-armv4.pl
@@ -1,7 +1,7 @@
#!/usr/bin/env perl
# ====================================================================
-# Written by Andy Polyakov <appro@fy.chalmers.se> for the OpenSSL
+# Written by Andy Polyakov <appro@openssl.org> for the OpenSSL
# project. The module is, however, dual licensed under OpenSSL and
# CRYPTOGAMS licenses depending on where you obtain it. For further
# details see http://www.openssl.org/~appro/cryptogams/.
@@ -26,7 +26,24 @@
# March 2011.
#
# Add NEON implementation. On Cortex A8 it was measured to process
-# one byte in 25.5 cycles or 47% faster than integer-only code.
+# one byte in 23.3 cycles or ~60% faster than integer-only code.
+
+# August 2012.
+#
+# Improve NEON performance by 12% on Snapdragon S4. In absolute
+# terms it's 22.6 cycles per byte, which is disappointing result.
+# Technical writers asserted that 3-way S4 pipeline can sustain
+# multiple NEON instructions per cycle, but dual NEON issue could
+# not be observed, and for NEON-only sequences IPC(*) was found to
+# be limited by 1:-( 0.33 and 0.66 were measured for sequences with
+# ILPs(*) of 1 and 2 respectively. This in turn means that you can
+# even find yourself striving, as I did here, for achieving IPC
+# adequate to one delivered by Cortex A8 [for reference, it's
+# 0.5 for ILP of 1, and 1 for higher ILPs].
+#
+# (*) ILP, instruction-level parallelism, how many instructions
+# *can* execute at the same time. IPC, instructions per cycle,
+# indicates how many instructions actually execute.
# Byte order [in]dependence. =========================================
#
@@ -220,16 +237,20 @@ WORD64(0x3c9ebe0a,0x15c9bebc, 0x431d67c4,0x9c100d4c)
WORD64(0x4cc5d4be,0xcb3e42b6, 0x597f299c,0xfc657e2a)
WORD64(0x5fcb6fab,0x3ad6faec, 0x6c44198c,0x4a475817)
.size K512,.-K512
+#if __ARM_MAX_ARCH__>=7
.LOPENSSL_armcap:
.word OPENSSL_armcap_P-sha512_block_data_order
.skip 32-4
+#else
+.skip 32
+#endif
.global sha512_block_data_order
.type sha512_block_data_order,%function
sha512_block_data_order:
sub r3,pc,#8 @ sha512_block_data_order
add $len,$inp,$len,lsl#7 @ len to point at the end of inp
-#if __ARM_ARCH__>=7
+#if __ARM_MAX_ARCH__>=7
ldr r12,.LOPENSSL_armcap
ldr r12,[r3,r12] @ OPENSSL_armcap_P
tst r12,#1
@@ -457,40 +478,40 @@ $code.=<<___ if ($i<16 || $i&1);
vld1.64 {@X[$i%16]},[$inp]! @ handles unaligned
#endif
vshr.u64 $t1,$e,#@Sigma1[1]
+#if $i>0
+ vadd.i64 $a,$Maj @ h+=Maj from the past
+#endif
vshr.u64 $t2,$e,#@Sigma1[2]
___
$code.=<<___;
vld1.64 {$K},[$Ktbl,:64]! @ K[i++]
vsli.64 $t0,$e,#`64-@Sigma1[0]`
vsli.64 $t1,$e,#`64-@Sigma1[1]`
+ vmov $Ch,$e
vsli.64 $t2,$e,#`64-@Sigma1[2]`
#if $i<16 && defined(__ARMEL__)
vrev64.8 @X[$i],@X[$i]
#endif
- vadd.i64 $T1,$K,$h
- veor $Ch,$f,$g
- veor $t0,$t1
- vand $Ch,$e
- veor $t0,$t2 @ Sigma1(e)
- veor $Ch,$g @ Ch(e,f,g)
- vadd.i64 $T1,$t0
+ veor $t1,$t0
+ vbsl $Ch,$f,$g @ Ch(e,f,g)
vshr.u64 $t0,$a,#@Sigma0[0]
- vadd.i64 $T1,$Ch
+ veor $t2,$t1 @ Sigma1(e)
+ vadd.i64 $T1,$Ch,$h
vshr.u64 $t1,$a,#@Sigma0[1]
- vshr.u64 $t2,$a,#@Sigma0[2]
vsli.64 $t0,$a,#`64-@Sigma0[0]`
+ vadd.i64 $T1,$t2
+ vshr.u64 $t2,$a,#@Sigma0[2]
+ vadd.i64 $K,@X[$i%16]
vsli.64 $t1,$a,#`64-@Sigma0[1]`
+ veor $Maj,$a,$b
vsli.64 $t2,$a,#`64-@Sigma0[2]`
- vadd.i64 $T1,@X[$i%16]
- vorr $Maj,$a,$c
- vand $Ch,$a,$c
veor $h,$t0,$t1
- vand $Maj,$b
+ vadd.i64 $T1,$K
+ vbsl $Maj,$c,$b @ Maj(a,b,c)
veor $h,$t2 @ Sigma0(a)
- vorr $Maj,$Ch @ Maj(a,b,c)
- vadd.i64 $h,$T1
vadd.i64 $d,$T1
- vadd.i64 $h,$Maj
+ vadd.i64 $Maj,$T1
+ @ vadd.i64 $h,$Maj
___
}
@@ -508,6 +529,7 @@ $i /= 2;
$code.=<<___;
vshr.u64 $t0,@X[($i+7)%8],#@sigma1[0]
vshr.u64 $t1,@X[($i+7)%8],#@sigma1[1]
+ vadd.i64 @_[0],d30 @ h+=Maj from the past
vshr.u64 $s1,@X[($i+7)%8],#@sigma1[2]
vsli.64 $t0,@X[($i+7)%8],#`64-@sigma1[0]`
vext.8 $s0,@X[$i%8],@X[($i+1)%8],#8 @ X[i+1]
@@ -533,7 +555,8 @@ ___
}
$code.=<<___;
-#if __ARM_ARCH__>=7
+#if __ARM_MAX_ARCH__>=7
+.arch armv7-a
.fpu neon
.align 4
@@ -554,6 +577,7 @@ for(;$i<32;$i++) { &NEON_16_79($i,@V); unshift(@V,pop(@V)); }
$code.=<<___;
bne .L16_79_neon
+ vadd.i64 $A,d30 @ h+=Maj from the past
vldmia $ctx,{d24-d31} @ load context to temp
vadd.i64 q8,q12 @ vectorized accumulate
vadd.i64 q9,q13
@@ -565,7 +589,7 @@ $code.=<<___;
bne .Loop_neon
vldmia sp!,{d8-d15} @ epilogue
- bx lr
+ ret @ bx lr
#endif
___
}
@@ -573,10 +597,13 @@ $code.=<<___;
.size sha512_block_data_order,.-sha512_block_data_order
.asciz "SHA512 block transform for ARMv4/NEON, CRYPTOGAMS by <appro\@openssl.org>"
.align 2
+#if __ARM_MAX_ARCH__>=7
.comm OPENSSL_armcap_P,4,4
+#endif
___
$code =~ s/\`([^\`]*)\`/eval $1/gem;
$code =~ s/\bbx\s+lr\b/.word\t0xe12fff1e/gm; # make it possible to compile with -march=armv4
+$code =~ s/\bret\b/bx lr/gm;
print $code;
close STDOUT; # enforce flush
diff --git a/crypto/openssl/crypto/sha/asm/sha512-armv8.pl b/crypto/openssl/crypto/sha/asm/sha512-armv8.pl
new file mode 100755
index 0000000..f7b36b9
--- /dev/null
+++ b/crypto/openssl/crypto/sha/asm/sha512-armv8.pl
@@ -0,0 +1,422 @@
+#!/usr/bin/env perl
+#
+# ====================================================================
+# Written by Andy Polyakov <appro@openssl.org> for the OpenSSL
+# project. The module is, however, dual licensed under OpenSSL and
+# CRYPTOGAMS licenses depending on where you obtain it. For further
+# details see http://www.openssl.org/~appro/cryptogams/.
+# ====================================================================
+#
+# SHA256/512 for ARMv8.
+#
+# Performance in cycles per processed byte and improvement coefficient
+# over code generated with "default" compiler:
+#
+# SHA256-hw SHA256(*) SHA512
+# Apple A7 1.97 10.5 (+33%) 6.73 (-1%(**))
+# Cortex-A53 2.38 15.5 (+115%) 10.0 (+150%(***))
+# Cortex-A57 2.31 11.6 (+86%) 7.51 (+260%(***))
+# Denver 2.01 10.5 (+26%) 6.70 (+8%)
+# X-Gene 20.0 (+100%) 12.8 (+300%(***))
+#
+# (*) Software SHA256 results are of lesser relevance, presented
+# mostly for informational purposes.
+# (**) The result is a trade-off: it's possible to improve it by
+# 10% (or by 1 cycle per round), but at the cost of 20% loss
+# on Cortex-A53 (or by 4 cycles per round).
+# (***) Super-impressive coefficients over gcc-generated code are
+# indication of some compiler "pathology", most notably code
+# generated with -mgeneral-regs-only is significanty faster
+# and the gap is only 40-90%.
+
+$flavour=shift;
+$output=shift;
+open STDOUT,">$output";
+
+if ($output =~ /512/) {
+ $BITS=512;
+ $SZ=8;
+ @Sigma0=(28,34,39);
+ @Sigma1=(14,18,41);
+ @sigma0=(1, 8, 7);
+ @sigma1=(19,61, 6);
+ $rounds=80;
+ $reg_t="x";
+} else {
+ $BITS=256;
+ $SZ=4;
+ @Sigma0=( 2,13,22);
+ @Sigma1=( 6,11,25);
+ @sigma0=( 7,18, 3);
+ @sigma1=(17,19,10);
+ $rounds=64;
+ $reg_t="w";
+}
+
+$func="sha${BITS}_block_data_order";
+
+($ctx,$inp,$num,$Ktbl)=map("x$_",(0..2,30));
+
+@X=map("$reg_t$_",(3..15,0..2));
+@V=($A,$B,$C,$D,$E,$F,$G,$H)=map("$reg_t$_",(20..27));
+($t0,$t1,$t2,$t3)=map("$reg_t$_",(16,17,19,28));
+
+sub BODY_00_xx {
+my ($i,$a,$b,$c,$d,$e,$f,$g,$h)=@_;
+my $j=($i+1)&15;
+my ($T0,$T1,$T2)=(@X[($i-8)&15],@X[($i-9)&15],@X[($i-10)&15]);
+ $T0=@X[$i+3] if ($i<11);
+
+$code.=<<___ if ($i<16);
+#ifndef __ARMEB__
+ rev @X[$i],@X[$i] // $i
+#endif
+___
+$code.=<<___ if ($i<13 && ($i&1));
+ ldp @X[$i+1],@X[$i+2],[$inp],#2*$SZ
+___
+$code.=<<___ if ($i==13);
+ ldp @X[14],@X[15],[$inp]
+___
+$code.=<<___ if ($i>=14);
+ ldr @X[($i-11)&15],[sp,#`$SZ*(($i-11)%4)`]
+___
+$code.=<<___ if ($i>0 && $i<16);
+ add $a,$a,$t1 // h+=Sigma0(a)
+___
+$code.=<<___ if ($i>=11);
+ str @X[($i-8)&15],[sp,#`$SZ*(($i-8)%4)`]
+___
+# While ARMv8 specifies merged rotate-n-logical operation such as
+# 'eor x,y,z,ror#n', it was found to negatively affect performance
+# on Apple A7. The reason seems to be that it requires even 'y' to
+# be available earlier. This means that such merged instruction is
+# not necessarily best choice on critical path... On the other hand
+# Cortex-A5x handles merged instructions much better than disjoint
+# rotate and logical... See (**) footnote above.
+$code.=<<___ if ($i<15);
+ ror $t0,$e,#$Sigma1[0]
+ add $h,$h,$t2 // h+=K[i]
+ eor $T0,$e,$e,ror#`$Sigma1[2]-$Sigma1[1]`
+ and $t1,$f,$e
+ bic $t2,$g,$e
+ add $h,$h,@X[$i&15] // h+=X[i]
+ orr $t1,$t1,$t2 // Ch(e,f,g)
+ eor $t2,$a,$b // a^b, b^c in next round
+ eor $t0,$t0,$T0,ror#$Sigma1[1] // Sigma1(e)
+ ror $T0,$a,#$Sigma0[0]
+ add $h,$h,$t1 // h+=Ch(e,f,g)
+ eor $t1,$a,$a,ror#`$Sigma0[2]-$Sigma0[1]`
+ add $h,$h,$t0 // h+=Sigma1(e)
+ and $t3,$t3,$t2 // (b^c)&=(a^b)
+ add $d,$d,$h // d+=h
+ eor $t3,$t3,$b // Maj(a,b,c)
+ eor $t1,$T0,$t1,ror#$Sigma0[1] // Sigma0(a)
+ add $h,$h,$t3 // h+=Maj(a,b,c)
+ ldr $t3,[$Ktbl],#$SZ // *K++, $t2 in next round
+ //add $h,$h,$t1 // h+=Sigma0(a)
+___
+$code.=<<___ if ($i>=15);
+ ror $t0,$e,#$Sigma1[0]
+ add $h,$h,$t2 // h+=K[i]
+ ror $T1,@X[($j+1)&15],#$sigma0[0]
+ and $t1,$f,$e
+ ror $T2,@X[($j+14)&15],#$sigma1[0]
+ bic $t2,$g,$e
+ ror $T0,$a,#$Sigma0[0]
+ add $h,$h,@X[$i&15] // h+=X[i]
+ eor $t0,$t0,$e,ror#$Sigma1[1]
+ eor $T1,$T1,@X[($j+1)&15],ror#$sigma0[1]
+ orr $t1,$t1,$t2 // Ch(e,f,g)
+ eor $t2,$a,$b // a^b, b^c in next round
+ eor $t0,$t0,$e,ror#$Sigma1[2] // Sigma1(e)
+ eor $T0,$T0,$a,ror#$Sigma0[1]
+ add $h,$h,$t1 // h+=Ch(e,f,g)
+ and $t3,$t3,$t2 // (b^c)&=(a^b)
+ eor $T2,$T2,@X[($j+14)&15],ror#$sigma1[1]
+ eor $T1,$T1,@X[($j+1)&15],lsr#$sigma0[2] // sigma0(X[i+1])
+ add $h,$h,$t0 // h+=Sigma1(e)
+ eor $t3,$t3,$b // Maj(a,b,c)
+ eor $t1,$T0,$a,ror#$Sigma0[2] // Sigma0(a)
+ eor $T2,$T2,@X[($j+14)&15],lsr#$sigma1[2] // sigma1(X[i+14])
+ add @X[$j],@X[$j],@X[($j+9)&15]
+ add $d,$d,$h // d+=h
+ add $h,$h,$t3 // h+=Maj(a,b,c)
+ ldr $t3,[$Ktbl],#$SZ // *K++, $t2 in next round
+ add @X[$j],@X[$j],$T1
+ add $h,$h,$t1 // h+=Sigma0(a)
+ add @X[$j],@X[$j],$T2
+___
+ ($t2,$t3)=($t3,$t2);
+}
+
+$code.=<<___;
+#include "arm_arch.h"
+
+.text
+
+.globl $func
+.type $func,%function
+.align 6
+$func:
+___
+$code.=<<___ if ($SZ==4);
+ ldr x16,.LOPENSSL_armcap_P
+ adr x17,.LOPENSSL_armcap_P
+ add x16,x16,x17
+ ldr w16,[x16]
+ tst w16,#ARMV8_SHA256
+ b.ne .Lv8_entry
+___
+$code.=<<___;
+ stp x29,x30,[sp,#-128]!
+ add x29,sp,#0
+
+ stp x19,x20,[sp,#16]
+ stp x21,x22,[sp,#32]
+ stp x23,x24,[sp,#48]
+ stp x25,x26,[sp,#64]
+ stp x27,x28,[sp,#80]
+ sub sp,sp,#4*$SZ
+
+ ldp $A,$B,[$ctx] // load context
+ ldp $C,$D,[$ctx,#2*$SZ]
+ ldp $E,$F,[$ctx,#4*$SZ]
+ add $num,$inp,$num,lsl#`log(16*$SZ)/log(2)` // end of input
+ ldp $G,$H,[$ctx,#6*$SZ]
+ adr $Ktbl,K$BITS
+ stp $ctx,$num,[x29,#96]
+
+.Loop:
+ ldp @X[0],@X[1],[$inp],#2*$SZ
+ ldr $t2,[$Ktbl],#$SZ // *K++
+ eor $t3,$B,$C // magic seed
+ str $inp,[x29,#112]
+___
+for ($i=0;$i<16;$i++) { &BODY_00_xx($i,@V); unshift(@V,pop(@V)); }
+$code.=".Loop_16_xx:\n";
+for (;$i<32;$i++) { &BODY_00_xx($i,@V); unshift(@V,pop(@V)); }
+$code.=<<___;
+ cbnz $t2,.Loop_16_xx
+
+ ldp $ctx,$num,[x29,#96]
+ ldr $inp,[x29,#112]
+ sub $Ktbl,$Ktbl,#`$SZ*($rounds+1)` // rewind
+
+ ldp @X[0],@X[1],[$ctx]
+ ldp @X[2],@X[3],[$ctx,#2*$SZ]
+ add $inp,$inp,#14*$SZ // advance input pointer
+ ldp @X[4],@X[5],[$ctx,#4*$SZ]
+ add $A,$A,@X[0]
+ ldp @X[6],@X[7],[$ctx,#6*$SZ]
+ add $B,$B,@X[1]
+ add $C,$C,@X[2]
+ add $D,$D,@X[3]
+ stp $A,$B,[$ctx]
+ add $E,$E,@X[4]
+ add $F,$F,@X[5]
+ stp $C,$D,[$ctx,#2*$SZ]
+ add $G,$G,@X[6]
+ add $H,$H,@X[7]
+ cmp $inp,$num
+ stp $E,$F,[$ctx,#4*$SZ]
+ stp $G,$H,[$ctx,#6*$SZ]
+ b.ne .Loop
+
+ ldp x19,x20,[x29,#16]
+ add sp,sp,#4*$SZ
+ ldp x21,x22,[x29,#32]
+ ldp x23,x24,[x29,#48]
+ ldp x25,x26,[x29,#64]
+ ldp x27,x28,[x29,#80]
+ ldp x29,x30,[sp],#128
+ ret
+.size $func,.-$func
+
+.align 6
+.type K$BITS,%object
+K$BITS:
+___
+$code.=<<___ if ($SZ==8);
+ .quad 0x428a2f98d728ae22,0x7137449123ef65cd
+ .quad 0xb5c0fbcfec4d3b2f,0xe9b5dba58189dbbc
+ .quad 0x3956c25bf348b538,0x59f111f1b605d019
+ .quad 0x923f82a4af194f9b,0xab1c5ed5da6d8118
+ .quad 0xd807aa98a3030242,0x12835b0145706fbe
+ .quad 0x243185be4ee4b28c,0x550c7dc3d5ffb4e2
+ .quad 0x72be5d74f27b896f,0x80deb1fe3b1696b1
+ .quad 0x9bdc06a725c71235,0xc19bf174cf692694
+ .quad 0xe49b69c19ef14ad2,0xefbe4786384f25e3
+ .quad 0x0fc19dc68b8cd5b5,0x240ca1cc77ac9c65
+ .quad 0x2de92c6f592b0275,0x4a7484aa6ea6e483
+ .quad 0x5cb0a9dcbd41fbd4,0x76f988da831153b5
+ .quad 0x983e5152ee66dfab,0xa831c66d2db43210
+ .quad 0xb00327c898fb213f,0xbf597fc7beef0ee4
+ .quad 0xc6e00bf33da88fc2,0xd5a79147930aa725
+ .quad 0x06ca6351e003826f,0x142929670a0e6e70
+ .quad 0x27b70a8546d22ffc,0x2e1b21385c26c926
+ .quad 0x4d2c6dfc5ac42aed,0x53380d139d95b3df
+ .quad 0x650a73548baf63de,0x766a0abb3c77b2a8
+ .quad 0x81c2c92e47edaee6,0x92722c851482353b
+ .quad 0xa2bfe8a14cf10364,0xa81a664bbc423001
+ .quad 0xc24b8b70d0f89791,0xc76c51a30654be30
+ .quad 0xd192e819d6ef5218,0xd69906245565a910
+ .quad 0xf40e35855771202a,0x106aa07032bbd1b8
+ .quad 0x19a4c116b8d2d0c8,0x1e376c085141ab53
+ .quad 0x2748774cdf8eeb99,0x34b0bcb5e19b48a8
+ .quad 0x391c0cb3c5c95a63,0x4ed8aa4ae3418acb
+ .quad 0x5b9cca4f7763e373,0x682e6ff3d6b2b8a3
+ .quad 0x748f82ee5defb2fc,0x78a5636f43172f60
+ .quad 0x84c87814a1f0ab72,0x8cc702081a6439ec
+ .quad 0x90befffa23631e28,0xa4506cebde82bde9
+ .quad 0xbef9a3f7b2c67915,0xc67178f2e372532b
+ .quad 0xca273eceea26619c,0xd186b8c721c0c207
+ .quad 0xeada7dd6cde0eb1e,0xf57d4f7fee6ed178
+ .quad 0x06f067aa72176fba,0x0a637dc5a2c898a6
+ .quad 0x113f9804bef90dae,0x1b710b35131c471b
+ .quad 0x28db77f523047d84,0x32caab7b40c72493
+ .quad 0x3c9ebe0a15c9bebc,0x431d67c49c100d4c
+ .quad 0x4cc5d4becb3e42b6,0x597f299cfc657e2a
+ .quad 0x5fcb6fab3ad6faec,0x6c44198c4a475817
+ .quad 0 // terminator
+___
+$code.=<<___ if ($SZ==4);
+ .long 0x428a2f98,0x71374491,0xb5c0fbcf,0xe9b5dba5
+ .long 0x3956c25b,0x59f111f1,0x923f82a4,0xab1c5ed5
+ .long 0xd807aa98,0x12835b01,0x243185be,0x550c7dc3
+ .long 0x72be5d74,0x80deb1fe,0x9bdc06a7,0xc19bf174
+ .long 0xe49b69c1,0xefbe4786,0x0fc19dc6,0x240ca1cc
+ .long 0x2de92c6f,0x4a7484aa,0x5cb0a9dc,0x76f988da
+ .long 0x983e5152,0xa831c66d,0xb00327c8,0xbf597fc7
+ .long 0xc6e00bf3,0xd5a79147,0x06ca6351,0x14292967
+ .long 0x27b70a85,0x2e1b2138,0x4d2c6dfc,0x53380d13
+ .long 0x650a7354,0x766a0abb,0x81c2c92e,0x92722c85
+ .long 0xa2bfe8a1,0xa81a664b,0xc24b8b70,0xc76c51a3
+ .long 0xd192e819,0xd6990624,0xf40e3585,0x106aa070
+ .long 0x19a4c116,0x1e376c08,0x2748774c,0x34b0bcb5
+ .long 0x391c0cb3,0x4ed8aa4a,0x5b9cca4f,0x682e6ff3
+ .long 0x748f82ee,0x78a5636f,0x84c87814,0x8cc70208
+ .long 0x90befffa,0xa4506ceb,0xbef9a3f7,0xc67178f2
+ .long 0 //terminator
+___
+$code.=<<___;
+.size K$BITS,.-K$BITS
+.align 3
+.LOPENSSL_armcap_P:
+ .quad OPENSSL_armcap_P-.
+.asciz "SHA$BITS block transform for ARMv8, CRYPTOGAMS by <appro\@openssl.org>"
+.align 2
+___
+
+if ($SZ==4) {
+my $Ktbl="x3";
+
+my ($ABCD,$EFGH,$abcd)=map("v$_.16b",(0..2));
+my @MSG=map("v$_.16b",(4..7));
+my ($W0,$W1)=("v16.4s","v17.4s");
+my ($ABCD_SAVE,$EFGH_SAVE)=("v18.16b","v19.16b");
+
+$code.=<<___;
+.type sha256_block_armv8,%function
+.align 6
+sha256_block_armv8:
+.Lv8_entry:
+ stp x29,x30,[sp,#-16]!
+ add x29,sp,#0
+
+ ld1.32 {$ABCD,$EFGH},[$ctx]
+ adr $Ktbl,K256
+
+.Loop_hw:
+ ld1 {@MSG[0]-@MSG[3]},[$inp],#64
+ sub $num,$num,#1
+ ld1.32 {$W0},[$Ktbl],#16
+ rev32 @MSG[0],@MSG[0]
+ rev32 @MSG[1],@MSG[1]
+ rev32 @MSG[2],@MSG[2]
+ rev32 @MSG[3],@MSG[3]
+ orr $ABCD_SAVE,$ABCD,$ABCD // offload
+ orr $EFGH_SAVE,$EFGH,$EFGH
+___
+for($i=0;$i<12;$i++) {
+$code.=<<___;
+ ld1.32 {$W1},[$Ktbl],#16
+ add.i32 $W0,$W0,@MSG[0]
+ sha256su0 @MSG[0],@MSG[1]
+ orr $abcd,$ABCD,$ABCD
+ sha256h $ABCD,$EFGH,$W0
+ sha256h2 $EFGH,$abcd,$W0
+ sha256su1 @MSG[0],@MSG[2],@MSG[3]
+___
+ ($W0,$W1)=($W1,$W0); push(@MSG,shift(@MSG));
+}
+$code.=<<___;
+ ld1.32 {$W1},[$Ktbl],#16
+ add.i32 $W0,$W0,@MSG[0]
+ orr $abcd,$ABCD,$ABCD
+ sha256h $ABCD,$EFGH,$W0
+ sha256h2 $EFGH,$abcd,$W0
+
+ ld1.32 {$W0},[$Ktbl],#16
+ add.i32 $W1,$W1,@MSG[1]
+ orr $abcd,$ABCD,$ABCD
+ sha256h $ABCD,$EFGH,$W1
+ sha256h2 $EFGH,$abcd,$W1
+
+ ld1.32 {$W1},[$Ktbl]
+ add.i32 $W0,$W0,@MSG[2]
+ sub $Ktbl,$Ktbl,#$rounds*$SZ-16 // rewind
+ orr $abcd,$ABCD,$ABCD
+ sha256h $ABCD,$EFGH,$W0
+ sha256h2 $EFGH,$abcd,$W0
+
+ add.i32 $W1,$W1,@MSG[3]
+ orr $abcd,$ABCD,$ABCD
+ sha256h $ABCD,$EFGH,$W1
+ sha256h2 $EFGH,$abcd,$W1
+
+ add.i32 $ABCD,$ABCD,$ABCD_SAVE
+ add.i32 $EFGH,$EFGH,$EFGH_SAVE
+
+ cbnz $num,.Loop_hw
+
+ st1.32 {$ABCD,$EFGH},[$ctx]
+
+ ldr x29,[sp],#16
+ ret
+.size sha256_block_armv8,.-sha256_block_armv8
+___
+}
+
+$code.=<<___;
+.comm OPENSSL_armcap_P,4,4
+___
+
+{ my %opcode = (
+ "sha256h" => 0x5e004000, "sha256h2" => 0x5e005000,
+ "sha256su0" => 0x5e282800, "sha256su1" => 0x5e006000 );
+
+ sub unsha256 {
+ my ($mnemonic,$arg)=@_;
+
+ $arg =~ m/[qv]([0-9]+)[^,]*,\s*[qv]([0-9]+)[^,]*(?:,\s*[qv]([0-9]+))?/o
+ &&
+ sprintf ".inst\t0x%08x\t//%s %s",
+ $opcode{$mnemonic}|$1|($2<<5)|($3<<16),
+ $mnemonic,$arg;
+ }
+}
+
+foreach(split("\n",$code)) {
+
+ s/\`([^\`]*)\`/eval($1)/geo;
+
+ s/\b(sha256\w+)\s+([qv].*)/unsha256($1,$2)/geo;
+
+ s/\.\w?32\b//o and s/\.16b/\.4s/go;
+ m/(ld|st)1[^\[]+\[0\]/o and s/\.4s/\.s/go;
+
+ print $_,"\n";
+}
+
+close STDOUT;
diff --git a/crypto/openssl/crypto/sha/asm/sha512-ia64.pl b/crypto/openssl/crypto/sha/asm/sha512-ia64.pl
index 1c6ce56..59f889a 100755
--- a/crypto/openssl/crypto/sha/asm/sha512-ia64.pl
+++ b/crypto/openssl/crypto/sha/asm/sha512-ia64.pl
@@ -1,7 +1,7 @@
#!/usr/bin/env perl
#
# ====================================================================
-# Written by Andy Polyakov <appro@fy.chalmers.se> for the OpenSSL
+# Written by Andy Polyakov <appro@openssl.org> for the OpenSSL
# project. The module is, however, dual licensed under OpenSSL and
# CRYPTOGAMS licenses depending on where you obtain it. For further
# details see http://www.openssl.org/~appro/cryptogams/.
@@ -48,16 +48,22 @@
# because on Itanium 1 stall on MM result is accompanied by
# pipeline flush, which takes 6 cycles:-(
#
-# Resulting performance numbers for 900MHz Itanium 2 system:
+# June 2012
#
-# The 'numbers' are in 1000s of bytes per second processed.
-# type 16 bytes 64 bytes 256 bytes 1024 bytes 8192 bytes
-# sha1(*) 6210.14k 20376.30k 52447.83k 85870.05k 105478.12k
-# sha256 7476.45k 20572.05k 41538.34k 56062.29k 62093.18k
-# sha512 4996.56k 20026.28k 47597.20k 85278.79k 111501.31k
+# Improve performance by 15-20%. Note about "rules of engagement"
+# above. Contemporary cores are equipped with additional shifter,
+# so that they should perform even better than below, presumably
+# by ~10%.
#
-# (*) SHA1 numbers are for HP-UX compiler and are presented purely
-# for reference purposes. I bet it can improved too...
+######################################################################
+# Current performance in cycles per processed byte for Itanium 2
+# pre-9000 series [little-endian] system:
+#
+# SHA1(*) 5.7
+# SHA256 12.6
+# SHA512 6.7
+#
+# (*) SHA1 result is presented purely for reference purposes.
#
# To generate code, pass the file name with either 256 or 512 in its
# name and compiler flags.
@@ -106,8 +112,8 @@ if (!defined($big_endian))
{ $big_endian=(unpack('L',pack('N',1))==1); }
$code=<<___;
-.ident \"$output, version 1.1\"
-.ident \"IA-64 ISA artwork by Andy Polyakov <appro\@fy.chalmers.se>\"
+.ident \"$output, version 2.0\"
+.ident \"IA-64 ISA artwork by Andy Polyakov <appro\@openssl.org>\"
.explicit
.text
@@ -115,26 +121,25 @@ pfssave=r2;
lcsave=r3;
prsave=r14;
K=r15;
-A=r16; B=r17; C=r18; D=r19;
-E=r20; F=r21; G=r22; H=r23;
+A_=r16; B_=r17; C_=r18; D_=r19;
+E_=r20; F_=r21; G_=r22; H_=r23;
T1=r24; T2=r25;
s0=r26; s1=r27; t0=r28; t1=r29;
Ktbl=r30;
ctx=r31; // 1st arg
-input=r48; // 2nd arg
-num=r49; // 3rd arg
-sgm0=r50; sgm1=r51; // small constants
-A_=r54; B_=r55; C_=r56; D_=r57;
-E_=r58; F_=r59; G_=r60; H_=r61;
+input=r56; // 2nd arg
+num=r57; // 3rd arg
+sgm0=r58; sgm1=r59; // small constants
// void $func (SHA_CTX *ctx, const void *in,size_t num[,int host])
.global $func#
.proc $func#
.align 32
+.skip 16
$func:
.prologue
.save ar.pfs,pfssave
-{ .mmi; alloc pfssave=ar.pfs,3,27,0,16
+{ .mmi; alloc pfssave=ar.pfs,3,25,0,24
$ADDP ctx=0,r32 // 1st arg
.save ar.lc,lcsave
mov lcsave=ar.lc }
@@ -145,11 +150,9 @@ $func:
.body
{ .mib; add r8=0*$SZ,ctx
- add r9=1*$SZ,ctx
- brp.loop.imp .L_first16,.L_first16_end-16 }
+ add r9=1*$SZ,ctx }
{ .mib; add r10=2*$SZ,ctx
- add r11=3*$SZ,ctx
- brp.loop.imp .L_rest,.L_rest_end-16 };;
+ add r11=3*$SZ,ctx };;
// load A-H
.Lpic_point:
@@ -164,7 +167,7 @@ $func:
add Ktbl=($TABLE#-.Lpic_point),Ktbl }
{ .mmi; $LDW G_=[r10]
$LDW H_=[r11]
- cmp.ne p0,p16=0,r0 };; // used in sha256_block
+ cmp.ne p0,p16=0,r0 };;
___
$code.=<<___ if ($BITS==64);
{ .mii; and r8=7,input
@@ -179,50 +182,26 @@ $code.=<<___ if ($BITS==64);
___
$code.=<<___;
.L_outer:
-.rotr X[16]
-{ .mmi; mov A=A_
- mov B=B_
+.rotr R[8],X[16]
+A=R[0]; B=R[1]; C=R[2]; D=R[3]; E=R[4]; F=R[5]; G=R[6]; H=R[7]
+{ .mmi; ld1 X[15]=[input],$SZ // eliminated in sha512
+ mov A=A_
mov ar.lc=14 }
-{ .mmi; mov C=C_
- mov D=D_
- mov E=E_ }
-{ .mmi; mov F=F_
- mov G=G_
- mov ar.ec=2 }
-{ .mmi; ld1 X[15]=[input],$SZ // eliminated in 64-bit
+{ .mmi; mov B=B_
+ mov C=C_
+ mov D=D_ }
+{ .mmi; mov E=E_
+ mov F=F_
+ mov ar.ec=2 };;
+{ .mmi; mov G=G_
mov H=H_
- mov sgm1=$sigma1[2] };;
-
-___
-$t0="t0", $t1="t1", $code.=<<___ if ($BITS==32);
-.align 32
-.L_first16:
-{ .mmi; add r9=1-$SZ,input
- add r10=2-$SZ,input
- add r11=3-$SZ,input };;
-{ .mmi; ld1 r9=[r9]
- ld1 r10=[r10]
- dep.z $t1=E,32,32 }
-{ .mmi; $LDW K=[Ktbl],$SZ
- ld1 r11=[r11]
- zxt4 E=E };;
-{ .mii; or $t1=$t1,E
- dep X[15]=X[15],r9,8,8
- dep r11=r10,r11,8,8 };;
-{ .mmi; and T1=F,E
- and T2=A,B
- dep X[15]=X[15],r11,16,16 }
-{ .mmi; andcm r8=G,E
- and r9=A,C
- mux2 $t0=A,0x44 };; // copy lower half to upper
-{ .mmi; (p16) ld1 X[15-1]=[input],$SZ // prefetch
- xor T1=T1,r8 // T1=((e & f) ^ (~e & g))
- _rotr r11=$t1,$Sigma1[0] } // ROTR(e,14)
-{ .mib; and r10=B,C
- xor T2=T2,r9 };;
+ mov sgm1=$sigma1[2] }
+{ .mib; mov r8=0
+ add r9=1-$SZ,input
+ brp.loop.imp .L_first16,.L_first16_end-16 };;
___
$t0="A", $t1="E", $code.=<<___ if ($BITS==64);
-// in 64-bit mode I load whole X[16] at once and take care of alignment...
+// in sha512 case I load whole X[16] at once and take care of alignment...
{ .mmi; add r8=1*$SZ,input
add r9=2*$SZ,input
add r10=3*$SZ,input };;
@@ -248,7 +227,9 @@ $t0="A", $t1="E", $code.=<<___ if ($BITS==64);
$LDW X[ 2]=[r8],4*$SZ
(p15) br.cond.dpnt.many .L7byte };;
{ .mmb; $LDW X[ 1]=[r9],4*$SZ
- $LDW X[ 0]=[r10],4*$SZ
+ $LDW X[ 0]=[r10],4*$SZ }
+{ .mib; mov r8=0
+ mux1 X[15]=X[15],\@rev // eliminated on big-endian
br.many .L_first16 };;
.L1byte:
{ .mmi; $LDW X[13]=[r9],4*$SZ
@@ -281,7 +262,9 @@ $t0="A", $t1="E", $code.=<<___ if ($BITS==64);
shrp X[ 3]=X[ 3],X[ 2],56 }
{ .mii; shrp X[ 2]=X[ 2],X[ 1],56
shrp X[ 1]=X[ 1],X[ 0],56 }
-{ .mib; shrp X[ 0]=X[ 0],T1,56
+{ .mib; shrp X[ 0]=X[ 0],T1,56 }
+{ .mib; mov r8=0
+ mux1 X[15]=X[15],\@rev // eliminated on big-endian
br.many .L_first16 };;
.L2byte:
{ .mmi; $LDW X[11]=[input],4*$SZ
@@ -313,7 +296,9 @@ $t0="A", $t1="E", $code.=<<___ if ($BITS==64);
shrp X[ 2]=X[ 2],X[ 1],48 }
{ .mii; shrp X[ 1]=X[ 1],X[ 0],48
shrp X[ 0]=X[ 0],T1,48 }
-{ .mfb; br.many .L_first16 };;
+{ .mib; mov r8=0
+ mux1 X[15]=X[15],\@rev // eliminated on big-endian
+ br.many .L_first16 };;
.L3byte:
{ .mmi; $LDW X[ 9]=[r9],4*$SZ
$LDW X[ 8]=[r10],4*$SZ
@@ -341,7 +326,9 @@ $t0="A", $t1="E", $code.=<<___ if ($BITS==64);
shrp X[ 3]=X[ 3],X[ 2],40 }
{ .mii; shrp X[ 2]=X[ 2],X[ 1],40
shrp X[ 1]=X[ 1],X[ 0],40 }
-{ .mib; shrp X[ 0]=X[ 0],T1,40
+{ .mib; shrp X[ 0]=X[ 0],T1,40 }
+{ .mib; mov r8=0
+ mux1 X[15]=X[15],\@rev // eliminated on big-endian
br.many .L_first16 };;
.L4byte:
{ .mmi; $LDW X[ 7]=[input],4*$SZ
@@ -369,7 +356,9 @@ $t0="A", $t1="E", $code.=<<___ if ($BITS==64);
shrp X[ 2]=X[ 2],X[ 1],32 }
{ .mii; shrp X[ 1]=X[ 1],X[ 0],32
shrp X[ 0]=X[ 0],T1,32 }
-{ .mfb; br.many .L_first16 };;
+{ .mib; mov r8=0
+ mux1 X[15]=X[15],\@rev // eliminated on big-endian
+ br.many .L_first16 };;
.L5byte:
{ .mmi; $LDW X[ 5]=[r9],4*$SZ
$LDW X[ 4]=[r10],4*$SZ
@@ -393,7 +382,9 @@ $t0="A", $t1="E", $code.=<<___ if ($BITS==64);
shrp X[ 3]=X[ 3],X[ 2],24 }
{ .mii; shrp X[ 2]=X[ 2],X[ 1],24
shrp X[ 1]=X[ 1],X[ 0],24 }
-{ .mib; shrp X[ 0]=X[ 0],T1,24
+{ .mib; shrp X[ 0]=X[ 0],T1,24 }
+{ .mib; mov r8=0
+ mux1 X[15]=X[15],\@rev // eliminated on big-endian
br.many .L_first16 };;
.L6byte:
{ .mmi; $LDW X[ 3]=[input],4*$SZ
@@ -417,7 +408,9 @@ $t0="A", $t1="E", $code.=<<___ if ($BITS==64);
shrp X[ 2]=X[ 2],X[ 1],16 }
{ .mii; shrp X[ 1]=X[ 1],X[ 0],16
shrp X[ 0]=X[ 0],T1,16 }
-{ .mfb; br.many .L_first16 };;
+{ .mib; mov r8=0
+ mux1 X[15]=X[15],\@rev // eliminated on big-endian
+ br.many .L_first16 };;
.L7byte:
{ .mmi; $LDW X[ 1]=[r9],4*$SZ
$LDW X[ 0]=[r10],4*$SZ
@@ -437,128 +430,146 @@ $t0="A", $t1="E", $code.=<<___ if ($BITS==64);
shrp X[ 3]=X[ 3],X[ 2],8 }
{ .mii; shrp X[ 2]=X[ 2],X[ 1],8
shrp X[ 1]=X[ 1],X[ 0],8 }
-{ .mib; shrp X[ 0]=X[ 0],T1,8
- br.many .L_first16 };;
+{ .mib; shrp X[ 0]=X[ 0],T1,8 }
+{ .mib; mov r8=0
+ mux1 X[15]=X[15],\@rev };; // eliminated on big-endian
.align 32
.L_first16:
{ .mmi; $LDW K=[Ktbl],$SZ
- and T1=F,E
- and T2=A,B }
-{ .mmi; //$LDW X[15]=[input],$SZ // X[i]=*input++
+ add A=A,r8 // H+=Sigma(0) from the past
+ _rotr r10=$t1,$Sigma1[0] } // ROTR(e,14)
+{ .mmi; and T1=F,E
andcm r8=G,E
- and r9=A,C };;
-{ .mmi; xor T1=T1,r8 //T1=((e & f) ^ (~e & g))
- and r10=B,C
- _rotr r11=$t1,$Sigma1[0] } // ROTR(e,14)
-{ .mmi; xor T2=T2,r9
- mux1 X[15]=X[15],\@rev };; // eliminated in big-endian
+ (p16) mux1 X[14]=X[14],\@rev };; // eliminated on big-endian
+{ .mmi; and T2=A,B
+ and r9=A,C
+ _rotr r11=$t1,$Sigma1[1] } // ROTR(e,41)
+{ .mmi; xor T1=T1,r8 // T1=((e & f) ^ (~e & g))
+ and r8=B,C };;
+___
+$t0="t0", $t1="t1", $code.=<<___ if ($BITS==32);
+.align 32
+.L_first16:
+{ .mmi; add A=A,r8 // H+=Sigma(0) from the past
+ add r10=2-$SZ,input
+ add r11=3-$SZ,input };;
+{ .mmi; ld1 r9=[r9]
+ ld1 r10=[r10]
+ dep.z $t1=E,32,32 }
+{ .mmi; ld1 r11=[r11]
+ $LDW K=[Ktbl],$SZ
+ zxt4 E=E };;
+{ .mii; or $t1=$t1,E
+ dep X[15]=X[15],r9,8,8
+ mux2 $t0=A,0x44 };; // copy lower half to upper
+{ .mmi; and T1=F,E
+ andcm r8=G,E
+ dep r11=r10,r11,8,8 };;
+{ .mmi; and T2=A,B
+ and r9=A,C
+ dep X[15]=X[15],r11,16,16 };;
+{ .mmi; (p16) ld1 X[15-1]=[input],$SZ // prefetch
+ xor T1=T1,r8 // T1=((e & f) ^ (~e & g))
+ _rotr r10=$t1,$Sigma1[0] } // ROTR(e,14)
+{ .mmi; and r8=B,C
+ _rotr r11=$t1,$Sigma1[1] };; // ROTR(e,18)
___
$code.=<<___;
-{ .mib; add T1=T1,H // T1=Ch(e,f,g)+h
- _rotr r8=$t1,$Sigma1[1] } // ROTR(e,18)
-{ .mib; xor T2=T2,r10 // T2=((a & b) ^ (a & c) ^ (b & c))
- mov H=G };;
-{ .mib; xor r11=r8,r11
- _rotr r9=$t1,$Sigma1[2] } // ROTR(e,41)
-{ .mib; mov G=F
- mov F=E };;
-{ .mib; xor r9=r9,r11 // r9=Sigma1(e)
- _rotr r10=$t0,$Sigma0[0] } // ROTR(a,28)
-{ .mib; add T1=T1,K // T1=Ch(e,f,g)+h+K512[i]
- mov E=D };;
-{ .mib; add T1=T1,r9 // T1+=Sigma1(e)
- _rotr r11=$t0,$Sigma0[1] } // ROTR(a,34)
-{ .mib; mov D=C
- mov C=B };;
-{ .mib; add T1=T1,X[15] // T1+=X[i]
- _rotr r8=$t0,$Sigma0[2] } // ROTR(a,39)
-{ .mib; xor r10=r10,r11
- mux2 X[15]=X[15],0x44 };; // eliminated in 64-bit
-{ .mmi; xor r10=r8,r10 // r10=Sigma0(a)
- mov B=A
- add A=T1,T2 };;
-{ .mib; add E=E,T1
- add A=A,r10 // T2=Maj(a,b,c)+Sigma0(a)
- br.ctop.sptk .L_first16 };;
+{ .mmi; add T1=T1,H // T1=Ch(e,f,g)+h
+ xor r10=r10,r11
+ _rotr r11=$t1,$Sigma1[2] } // ROTR(e,41)
+{ .mmi; xor T2=T2,r9
+ add K=K,X[15] };;
+{ .mmi; add T1=T1,K // T1+=K[i]+X[i]
+ xor T2=T2,r8 // T2=((a & b) ^ (a & c) ^ (b & c))
+ _rotr r8=$t0,$Sigma0[0] } // ROTR(a,28)
+{ .mmi; xor r11=r11,r10 // Sigma1(e)
+ _rotr r9=$t0,$Sigma0[1] };; // ROTR(a,34)
+{ .mmi; add T1=T1,r11 // T+=Sigma1(e)
+ xor r8=r8,r9
+ _rotr r9=$t0,$Sigma0[2] };; // ROTR(a,39)
+{ .mmi; xor r8=r8,r9 // Sigma0(a)
+ add D=D,T1
+ mux2 H=X[15],0x44 } // mov H=X[15] in sha512
+{ .mib; (p16) add r9=1-$SZ,input // not used in sha512
+ add X[15]=T1,T2 // H=T1+Maj(a,b,c)
+ br.ctop.sptk .L_first16 };;
.L_first16_end:
-{ .mii; mov ar.lc=$rounds-17
- mov ar.ec=1 };;
+{ .mib; mov ar.lc=$rounds-17
+ brp.loop.imp .L_rest,.L_rest_end-16 }
+{ .mib; mov ar.ec=1
+ br.many .L_rest };;
.align 32
.L_rest:
-.rotr X[16]
-{ .mib; $LDW K=[Ktbl],$SZ
+{ .mmi; $LDW K=[Ktbl],$SZ
+ add A=A,r8 // H+=Sigma0(a) from the past
_rotr r8=X[15-1],$sigma0[0] } // ROTR(s0,1)
-{ .mib; $ADD X[15]=X[15],X[15-9] // X[i&0xF]+=X[(i+9)&0xF]
- $SHRU s0=X[15-1],sgm0 };; // s0=X[(i+1)&0xF]>>7
+{ .mmi; add X[15]=X[15],X[15-9] // X[i&0xF]+=X[(i+9)&0xF]
+ $SHRU s0=X[15-1],sgm0 };; // s0=X[(i+1)&0xF]>>7
{ .mib; and T1=F,E
_rotr r9=X[15-1],$sigma0[1] } // ROTR(s0,8)
{ .mib; andcm r10=G,E
- $SHRU s1=X[15-14],sgm1 };; // s1=X[(i+14)&0xF]>>6
+ $SHRU s1=X[15-14],sgm1 };; // s1=X[(i+14)&0xF]>>6
+// Pair of mmi; splits on Itanium 1 and prevents pipeline flush
+// upon $SHRU output usage
{ .mmi; xor T1=T1,r10 // T1=((e & f) ^ (~e & g))
xor r9=r8,r9
- _rotr r10=X[15-14],$sigma1[0] };;// ROTR(s1,19)
-{ .mib; and T2=A,B
- _rotr r11=X[15-14],$sigma1[1] }// ROTR(s1,61)
-{ .mib; and r8=A,C };;
+ _rotr r10=X[15-14],$sigma1[0] }// ROTR(s1,19)
+{ .mmi; and T2=A,B
+ and r8=A,C
+ _rotr r11=X[15-14],$sigma1[1] };;// ROTR(s1,61)
___
$t0="t0", $t1="t1", $code.=<<___ if ($BITS==32);
-// I adhere to mmi; in order to hold Itanium 1 back and avoid 6 cycle
-// pipeline flush in last bundle. Note that even on Itanium2 the
-// latter stalls for one clock cycle...
-{ .mmi; xor s0=s0,r9 // s0=sigma0(X[(i+1)&0xF])
- dep.z $t1=E,32,32 }
-{ .mmi; xor r10=r11,r10
- zxt4 E=E };;
-{ .mmi; or $t1=$t1,E
- xor s1=s1,r10 // s1=sigma1(X[(i+14)&0xF])
- mux2 $t0=A,0x44 };; // copy lower half to upper
+{ .mib; xor s0=s0,r9 // s0=sigma0(X[(i+1)&0xF])
+ dep.z $t1=E,32,32 }
+{ .mib; xor r10=r11,r10
+ zxt4 E=E };;
+{ .mii; xor s1=s1,r10 // s1=sigma1(X[(i+14)&0xF])
+ shrp r9=E,$t1,32+$Sigma1[0] // ROTR(e,14)
+ mux2 $t0=A,0x44 };; // copy lower half to upper
+// Pair of mmi; splits on Itanium 1 and prevents pipeline flush
+// upon mux2 output usage
{ .mmi; xor T2=T2,r8
- _rotr r9=$t1,$Sigma1[0] } // ROTR(e,14)
+ shrp r8=E,$t1,32+$Sigma1[1]} // ROTR(e,18)
{ .mmi; and r10=B,C
add T1=T1,H // T1=Ch(e,f,g)+h
- $ADD X[15]=X[15],s0 };; // X[i&0xF]+=sigma0(X[(i+1)&0xF])
+ or $t1=$t1,E };;
___
$t0="A", $t1="E", $code.=<<___ if ($BITS==64);
{ .mib; xor s0=s0,r9 // s0=sigma0(X[(i+1)&0xF])
- _rotr r9=$t1,$Sigma1[0] } // ROTR(e,14)
+ _rotr r9=$t1,$Sigma1[0] } // ROTR(e,14)
{ .mib; xor r10=r11,r10
- xor T2=T2,r8 };;
+ xor T2=T2,r8 };;
{ .mib; xor s1=s1,r10 // s1=sigma1(X[(i+14)&0xF])
- add T1=T1,H }
+ _rotr r8=$t1,$Sigma1[1] } // ROTR(e,18)
{ .mib; and r10=B,C
- $ADD X[15]=X[15],s0 };; // X[i&0xF]+=sigma0(X[(i+1)&0xF])
+ add T1=T1,H };; // T1+=H
___
$code.=<<___;
-{ .mmi; xor T2=T2,r10 // T2=((a & b) ^ (a & c) ^ (b & c))
- mov H=G
- _rotr r8=$t1,$Sigma1[1] };; // ROTR(e,18)
-{ .mmi; xor r11=r8,r9
- $ADD X[15]=X[15],s1 // X[i&0xF]+=sigma1(X[(i+14)&0xF])
- _rotr r9=$t1,$Sigma1[2] } // ROTR(e,41)
-{ .mmi; mov G=F
- mov F=E };;
-{ .mib; xor r9=r9,r11 // r9=Sigma1(e)
- _rotr r10=$t0,$Sigma0[0] } // ROTR(a,28)
-{ .mib; add T1=T1,K // T1=Ch(e,f,g)+h+K512[i]
- mov E=D };;
-{ .mib; add T1=T1,r9 // T1+=Sigma1(e)
- _rotr r11=$t0,$Sigma0[1] } // ROTR(a,34)
-{ .mib; mov D=C
- mov C=B };;
-{ .mmi; add T1=T1,X[15] // T1+=X[i]
- xor r10=r10,r11
- _rotr r8=$t0,$Sigma0[2] };; // ROTR(a,39)
-{ .mmi; xor r10=r8,r10 // r10=Sigma0(a)
- mov B=A
- add A=T1,T2 };;
-{ .mib; add E=E,T1
- add A=A,r10 // T2=Maj(a,b,c)+Sigma0(a)
- br.ctop.sptk .L_rest };;
+{ .mib; xor r9=r9,r8
+ _rotr r8=$t1,$Sigma1[2] } // ROTR(e,41)
+{ .mib; xor T2=T2,r10 // T2=((a & b) ^ (a & c) ^ (b & c))
+ add X[15]=X[15],s0 };; // X[i]+=sigma0(X[i+1])
+{ .mmi; xor r9=r9,r8 // Sigma1(e)
+ add X[15]=X[15],s1 // X[i]+=sigma0(X[i+14])
+ _rotr r8=$t0,$Sigma0[0] };; // ROTR(a,28)
+{ .mmi; add K=K,X[15]
+ add T1=T1,r9 // T1+=Sigma1(e)
+ _rotr r9=$t0,$Sigma0[1] };; // ROTR(a,34)
+{ .mmi; add T1=T1,K // T1+=K[i]+X[i]
+ xor r8=r8,r9
+ _rotr r9=$t0,$Sigma0[2] };; // ROTR(a,39)
+{ .mib; add D=D,T1
+ mux2 H=X[15],0x44 } // mov H=X[15] in sha512
+{ .mib; xor r8=r8,r9 // Sigma0(a)
+ add X[15]=T1,T2 // H=T1+Maj(a,b,c)
+ br.ctop.sptk .L_rest };;
.L_rest_end:
+{ .mmi; add A=A,r8 };; // H+=Sigma0(a) from the past
{ .mmi; add A_=A_,A
add B_=B_,B
add C_=C_,C }
@@ -590,17 +601,19 @@ $code.=<<___;
.endp $func#
___
-$code =~ s/\`([^\`]*)\`/eval $1/gem;
-$code =~ s/_rotr(\s+)([^=]+)=([^,]+),([0-9]+)/shrp$1$2=$3,$3,$4/gm;
-if ($BITS==64) {
- $code =~ s/mux2(\s+)\S+/nop.i$1 0x0/gm;
- $code =~ s/mux1(\s+)\S+/nop.i$1 0x0/gm if ($big_endian);
- $code =~ s/(shrp\s+X\[[^=]+)=([^,]+),([^,]+),([1-9]+)/$1=$3,$2,64-$4/gm
+foreach(split($/,$code)) {
+ s/\`([^\`]*)\`/eval $1/gem;
+ s/_rotr(\s+)([^=]+)=([^,]+),([0-9]+)/shrp$1$2=$3,$3,$4/gm;
+ if ($BITS==64) {
+ s/mux2(\s+)([^=]+)=([^,]+),\S+/mov$1 $2=$3/gm;
+ s/mux1(\s+)\S+/nop.i$1 0x0/gm if ($big_endian);
+ s/(shrp\s+X\[[^=]+)=([^,]+),([^,]+),([1-9]+)/$1=$3,$2,64-$4/gm
if (!$big_endian);
- $code =~ s/ld1(\s+)X\[\S+/nop.m$1 0x0/gm;
-}
+ s/ld1(\s+)X\[\S+/nop.m$1 0x0/gm;
+ }
-print $code;
+ print $_,"\n";
+}
print<<___ if ($BITS==32);
.align 64
diff --git a/crypto/openssl/crypto/sha/asm/sha512-mips.pl b/crypto/openssl/crypto/sha/asm/sha512-mips.pl
index 6807a2c..b468cfb 100755
--- a/crypto/openssl/crypto/sha/asm/sha512-mips.pl
+++ b/crypto/openssl/crypto/sha/asm/sha512-mips.pl
@@ -1,7 +1,7 @@
#!/usr/bin/env perl
# ====================================================================
-# Written by Andy Polyakov <appro@fy.chalmers.se> for the OpenSSL
+# Written by Andy Polyakov <appro@openssl.org> for the OpenSSL
# project. The module is, however, dual licensed under OpenSSL and
# CRYPTOGAMS licenses depending on where you obtain it. For further
# details see http://www.openssl.org/~appro/cryptogams/.
@@ -17,6 +17,10 @@
# ~17%, but it comes for free, because it's same instruction sequence.
# Improvement coefficients are for aligned input.
+# September 2012.
+#
+# Add MIPS[32|64]R2 code (>25% less instructions).
+
######################################################################
# There is a number of MIPS ABI in use, O32 and N32/64 are most
# widely used. Then there is a new contender: NUBI. It appears that if
@@ -45,7 +49,7 @@
# ($s0,$s1,$s2,$s3,$s4,$s5,$s6,$s7)=map("\$$_",(16..23));
# ($gp,$sp,$fp,$ra)=map("\$$_",(28..31));
#
-$flavour = shift; # supported flavours are o32,n32,64,nubi32,nubi64
+$flavour = shift || "o32"; # supported flavours are o32,n32,64,nubi32,nubi64
if ($flavour =~ /64|n32/i) {
$PTR_ADD="dadd"; # incidentally works even on n32
@@ -83,6 +87,7 @@ if ($output =~ /512/) {
$SLL="dsll"; # shift left logical
$SRL="dsrl"; # shift right logical
$ADDU="daddu";
+ $ROTR="drotr";
@Sigma0=(28,34,39);
@Sigma1=(14,18,41);
@sigma0=( 7, 1, 8); # right shift first
@@ -97,6 +102,7 @@ if ($output =~ /512/) {
$SLL="sll"; # shift left logical
$SRL="srl"; # shift right logical
$ADDU="addu";
+ $ROTR="rotr";
@Sigma0=( 2,13,22);
@Sigma1=( 6,11,25);
@sigma0=( 3, 7,18); # right shift first
@@ -124,6 +130,10 @@ $code.=<<___ if ($i<15);
${LD}r @X[1],`($i+1)*$SZ+$LSB`($inp)
___
$code.=<<___ if (!$big_endian && $i<16 && $SZ==4);
+#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
+ wsbh @X[0],@X[0] # byte swap($i)
+ rotr @X[0],@X[0],16
+#else
srl $tmp0,@X[0],24 # byte swap($i)
srl $tmp1,@X[0],8
andi $tmp2,@X[0],0xFF00
@@ -133,8 +143,13 @@ $code.=<<___ if (!$big_endian && $i<16 && $SZ==4);
or @X[0],$tmp0
or $tmp1,$tmp2
or @X[0],$tmp1
+#endif
___
$code.=<<___ if (!$big_endian && $i<16 && $SZ==8);
+#if defined(_MIPS_ARCH_MIPS64R2)
+ dsbh @X[0],@X[0] # byte swap($i)
+ dshd @X[0],@X[0]
+#else
ori $tmp0,$zero,0xFF
dsll $tmp2,$tmp0,32
or $tmp0,$tmp2 # 0x000000FF000000FF
@@ -153,8 +168,31 @@ $code.=<<___ if (!$big_endian && $i<16 && $SZ==8);
dsrl $tmp1,@X[0],32
dsll @X[0],32
or @X[0],$tmp1
+#endif
___
$code.=<<___;
+#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
+ xor $tmp2,$f,$g # $i
+ $ROTR $tmp0,$e,@Sigma1[0]
+ $ADDU $T1,$X[0],$h
+ $ROTR $tmp1,$e,@Sigma1[1]
+ and $tmp2,$e
+ $ROTR $h,$e,@Sigma1[2]
+ xor $tmp0,$tmp1
+ $ROTR $tmp1,$a,@Sigma0[0]
+ xor $tmp2,$g # Ch(e,f,g)
+ xor $tmp0,$h # Sigma1(e)
+
+ $ROTR $h,$a,@Sigma0[1]
+ $ADDU $T1,$tmp2
+ $LD $tmp2,`$i*$SZ`($Ktbl) # K[$i]
+ xor $h,$tmp1
+ $ROTR $tmp1,$a,@Sigma0[2]
+ $ADDU $T1,$tmp0
+ and $tmp0,$b,$c
+ xor $h,$tmp1 # Sigma0(a)
+ xor $tmp1,$b,$c
+#else
$ADDU $T1,$X[0],$h # $i
$SRL $h,$e,@Sigma1[0]
xor $tmp2,$f,$g
@@ -184,16 +222,15 @@ $code.=<<___;
xor $h,$tmp1
$SLL $tmp1,$a,`$SZ*8-@Sigma0[0]`
xor $h,$tmp0
- $ST @X[0],`($i%16)*$SZ`($sp) # offload to ring buffer
+ and $tmp0,$b,$c
xor $h,$tmp1 # Sigma0(a)
-
- or $tmp0,$a,$b
- and $tmp1,$a,$b
- and $tmp0,$c
- or $tmp1,$tmp0 # Maj(a,b,c)
+ xor $tmp1,$b,$c
+#endif
+ $ST @X[0],`($i%16)*$SZ`($sp) # offload to ring buffer
+ $ADDU $h,$tmp0
+ and $tmp1,$a
$ADDU $T1,$tmp2 # +=K[$i]
- $ADDU $h,$tmp1
-
+ $ADDU $h,$tmp1 # +=Maj(a,b,c)
$ADDU $d,$T1
$ADDU $h,$T1
___
@@ -207,6 +244,20 @@ my $i=@_[0];
my ($tmp0,$tmp1,$tmp2,$tmp3)=(@X[4],@X[5],@X[6],@X[7]);
$code.=<<___;
+#if defined(_MIPS_ARCH_MIPS32R2) || defined(_MIPS_ARCH_MIPS64R2)
+ $SRL $tmp2,@X[1],@sigma0[0] # Xupdate($i)
+ $ROTR $tmp0,@X[1],@sigma0[1]
+ $ADDU @X[0],@X[9] # +=X[i+9]
+ xor $tmp2,$tmp0
+ $ROTR $tmp0,@X[1],@sigma0[2]
+
+ $SRL $tmp3,@X[14],@sigma1[0]
+ $ROTR $tmp1,@X[14],@sigma1[1]
+ xor $tmp2,$tmp0 # sigma0(X[i+1])
+ $ROTR $tmp0,@X[14],@sigma1[2]
+ xor $tmp3,$tmp1
+ $ADDU @X[0],$tmp2
+#else
$SRL $tmp2,@X[1],@sigma0[0] # Xupdate($i)
$ADDU @X[0],@X[9] # +=X[i+9]
$SLL $tmp1,@X[1],`$SZ*8-@sigma0[2]`
@@ -227,7 +278,7 @@ $code.=<<___;
xor $tmp3,$tmp0
$SRL $tmp0,@X[14],@sigma1[2]
xor $tmp3,$tmp1
-
+#endif
xor $tmp3,$tmp0 # sigma1(X[i+14])
$ADDU @X[0],$tmp3
___
@@ -242,9 +293,13 @@ $code.=<<___;
# include <openssl/fipssyms.h>
#endif
+#if defined(__mips_smartmips) && !defined(_MIPS_ARCH_MIPS32R2)
+#define _MIPS_ARCH_MIPS32R2
+#endif
+
.text
.set noat
-#if !defined(__vxworks) || defined(__pic__)
+#if !defined(__mips_eabi) && (!defined(__vxworks) || defined(__pic__))
.option pic2
#endif
diff --git a/crypto/openssl/crypto/sha/asm/sha512-ppc.pl b/crypto/openssl/crypto/sha/asm/sha512-ppc.pl
index 6b44a68..734f3c1 100755
--- a/crypto/openssl/crypto/sha/asm/sha512-ppc.pl
+++ b/crypto/openssl/crypto/sha/asm/sha512-ppc.pl
@@ -1,7 +1,7 @@
#!/usr/bin/env perl
# ====================================================================
-# Written by Andy Polyakov <appro@fy.chalmers.se> for the OpenSSL
+# Written by Andy Polyakov <appro@openssl.org> for the OpenSSL
# project. The module is, however, dual licensed under OpenSSL and
# CRYPTOGAMS licenses depending on where you obtain it. For further
# details see http://www.openssl.org/~appro/cryptogams/.
@@ -9,8 +9,7 @@
# I let hardware handle unaligned input, except on page boundaries
# (see below for details). Otherwise straightforward implementation
-# with X vector in register bank. The module is big-endian [which is
-# not big deal as there're no little-endian targets left around].
+# with X vector in register bank.
# sha256 | sha512
# -m64 -m32 | -m64 -m32
@@ -56,6 +55,8 @@ if ($flavour =~ /64/) {
$PUSH="stw";
} else { die "nonsense $flavour"; }
+$LITTLE_ENDIAN = ($flavour=~/le$/) ? $SIZE_T : 0;
+
$0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1;
( $xlate="${dir}ppc-xlate.pl" and -f $xlate ) or
( $xlate="${dir}../../perlasm/ppc-xlate.pl" and -f $xlate) or
@@ -64,7 +65,7 @@ die "can't locate ppc-xlate.pl";
open STDOUT,"| $^X $xlate $flavour $output" || die "can't call $xlate: $!";
if ($output =~ /512/) {
- $func="sha512_block_data_order";
+ $func="sha512_block_ppc";
$SZ=8;
@Sigma0=(28,34,39);
@Sigma1=(14,18,41);
@@ -76,7 +77,7 @@ if ($output =~ /512/) {
$ROR="rotrdi";
$SHR="srdi";
} else {
- $func="sha256_block_data_order";
+ $func="sha256_block_ppc";
$SZ=4;
@Sigma0=( 2,13,22);
@Sigma1=( 6,11,25);
@@ -110,7 +111,7 @@ $B ="r9";
$C ="r10";
$D ="r11";
$E ="r12";
-$F ="r13"; $F="r2" if ($SIZE_T==8);# reassigned to exempt TLS pointer
+$F =$t1; $t1 = "r0"; # stay away from "r13";
$G ="r14";
$H ="r15";
@@ -118,24 +119,23 @@ $H ="r15";
@X=("r16","r17","r18","r19","r20","r21","r22","r23",
"r24","r25","r26","r27","r28","r29","r30","r31");
-$inp="r31"; # reassigned $inp! aliases with @X[15]
+$inp="r31" if($SZ==4 || $SIZE_T==8); # reassigned $inp! aliases with @X[15]
sub ROUND_00_15 {
my ($i,$a,$b,$c,$d,$e,$f,$g,$h)=@_;
$code.=<<___;
- $LD $T,`$i*$SZ`($Tbl)
$ROR $a0,$e,$Sigma1[0]
$ROR $a1,$e,$Sigma1[1]
and $t0,$f,$e
- andc $t1,$g,$e
- add $T,$T,$h
xor $a0,$a0,$a1
+ add $h,$h,$t1
+ andc $t1,$g,$e
$ROR $a1,$a1,`$Sigma1[2]-$Sigma1[1]`
or $t0,$t0,$t1 ; Ch(e,f,g)
- add $T,$T,@X[$i]
+ add $h,$h,@X[$i%16]
xor $a0,$a0,$a1 ; Sigma1(e)
- add $T,$T,$t0
- add $T,$T,$a0
+ add $h,$h,$t0
+ add $h,$h,$a0
$ROR $a0,$a,$Sigma0[0]
$ROR $a1,$a,$Sigma0[1]
@@ -146,9 +146,14 @@ $code.=<<___;
xor $t0,$t0,$t1
and $t1,$b,$c
xor $a0,$a0,$a1 ; Sigma0(a)
- add $d,$d,$T
+ add $d,$d,$h
xor $t0,$t0,$t1 ; Maj(a,b,c)
- add $h,$T,$a0
+___
+$code.=<<___ if ($i<15);
+ $LD $t1,`($i+1)*$SZ`($Tbl)
+___
+$code.=<<___;
+ add $h,$h,$a0
add $h,$h,$t0
___
@@ -169,10 +174,11 @@ $code.=<<___;
add @X[$i],@X[$i],@X[($i+9)%16]
xor $a0,$a0,$a1 ; sigma0(X[(i+1)&0x0f])
xor $t0,$t0,$t1 ; sigma1(X[(i+14)&0x0f])
+ $LD $t1,`$i*$SZ`($Tbl)
add @X[$i],@X[$i],$a0
add @X[$i],@X[$i],$t0
___
-&ROUND_00_15($i,$a,$b,$c,$d,$e,$f,$g,$h);
+&ROUND_00_15($i+16,$a,$b,$c,$d,$e,$f,$g,$h);
}
$code=<<___;
@@ -188,8 +194,6 @@ $func:
$PUSH $ctx,`$FRAME-$SIZE_T*22`($sp)
- $PUSH $toc,`$FRAME-$SIZE_T*20`($sp)
- $PUSH r13,`$FRAME-$SIZE_T*19`($sp)
$PUSH r14,`$FRAME-$SIZE_T*18`($sp)
$PUSH r15,`$FRAME-$SIZE_T*17`($sp)
$PUSH r16,`$FRAME-$SIZE_T*16`($sp)
@@ -209,7 +213,10 @@ $func:
$PUSH r30,`$FRAME-$SIZE_T*2`($sp)
$PUSH r31,`$FRAME-$SIZE_T*1`($sp)
$PUSH r0,`$FRAME+$LRSAVE`($sp)
+___
+if ($SZ==4 || $SIZE_T==8) {
+$code.=<<___;
$LD $A,`0*$SZ`($ctx)
mr $inp,r4 ; incarnate $inp
$LD $B,`1*$SZ`($ctx)
@@ -219,7 +226,16 @@ $func:
$LD $F,`5*$SZ`($ctx)
$LD $G,`6*$SZ`($ctx)
$LD $H,`7*$SZ`($ctx)
+___
+} else {
+ for ($i=16;$i<32;$i++) {
+ $code.=<<___;
+ lwz r$i,`$LITTLE_ENDIAN^(4*($i-16))`($ctx)
+___
+ }
+}
+$code.=<<___;
bl LPICmeup
LPICedup:
andi. r0,$inp,3
@@ -255,6 +271,9 @@ Lunaligned:
Lcross_page:
li $t1,`16*$SZ/4`
mtctr $t1
+___
+if ($SZ==4 || $SIZE_T==8) {
+$code.=<<___;
addi r20,$sp,$LOCALS ; aligned spot below the frame
Lmemcpy:
lbz r16,0($inp)
@@ -268,7 +287,26 @@ Lmemcpy:
stb r19,3(r20)
addi r20,r20,4
bdnz Lmemcpy
+___
+} else {
+$code.=<<___;
+ addi r12,$sp,$LOCALS ; aligned spot below the frame
+Lmemcpy:
+ lbz r8,0($inp)
+ lbz r9,1($inp)
+ lbz r10,2($inp)
+ lbz r11,3($inp)
+ addi $inp,$inp,4
+ stb r8,0(r12)
+ stb r9,1(r12)
+ stb r10,2(r12)
+ stb r11,3(r12)
+ addi r12,r12,4
+ bdnz Lmemcpy
+___
+}
+$code.=<<___;
$PUSH $inp,`$FRAME-$SIZE_T*26`($sp) ; save real inp
addi $t1,$sp,`$LOCALS+16*$SZ` ; fictitious end pointer
addi $inp,$sp,$LOCALS ; fictitious inp pointer
@@ -283,8 +321,6 @@ Lmemcpy:
Ldone:
$POP r0,`$FRAME+$LRSAVE`($sp)
- $POP $toc,`$FRAME-$SIZE_T*20`($sp)
- $POP r13,`$FRAME-$SIZE_T*19`($sp)
$POP r14,`$FRAME-$SIZE_T*18`($sp)
$POP r15,`$FRAME-$SIZE_T*17`($sp)
$POP r16,`$FRAME-$SIZE_T*16`($sp)
@@ -309,27 +345,48 @@ Ldone:
.long 0
.byte 0,12,4,1,0x80,18,3,0
.long 0
+___
+if ($SZ==4 || $SIZE_T==8) {
+$code.=<<___;
.align 4
Lsha2_block_private:
+ $LD $t1,0($Tbl)
___
for($i=0;$i<16;$i++) {
-$code.=<<___ if ($SZ==4);
+$code.=<<___ if ($SZ==4 && !$LITTLE_ENDIAN);
lwz @X[$i],`$i*$SZ`($inp)
___
+$code.=<<___ if ($SZ==4 && $LITTLE_ENDIAN);
+ lwz $a0,`$i*$SZ`($inp)
+ rotlwi @X[$i],$a0,8
+ rlwimi @X[$i],$a0,24,0,7
+ rlwimi @X[$i],$a0,24,16,23
+___
# 64-bit loads are split to 2x32-bit ones, as CPU can't handle
# unaligned 64-bit loads, only 32-bit ones...
-$code.=<<___ if ($SZ==8);
+$code.=<<___ if ($SZ==8 && !$LITTLE_ENDIAN);
lwz $t0,`$i*$SZ`($inp)
lwz @X[$i],`$i*$SZ+4`($inp)
insrdi @X[$i],$t0,32,0
___
+$code.=<<___ if ($SZ==8 && $LITTLE_ENDIAN);
+ lwz $a0,`$i*$SZ`($inp)
+ lwz $a1,`$i*$SZ+4`($inp)
+ rotlwi $t0,$a0,8
+ rotlwi @X[$i],$a1,8
+ rlwimi $t0,$a0,24,0,7
+ rlwimi @X[$i],$a1,24,0,7
+ rlwimi $t0,$a0,24,16,23
+ rlwimi @X[$i],$a1,24,16,23
+ insrdi @X[$i],$t0,32,0
+___
&ROUND_00_15($i,@V);
unshift(@V,pop(@V));
}
$code.=<<___;
- li $T,`$rounds/16-1`
- mtctr $T
+ li $t0,`$rounds/16-1`
+ mtctr $t0
.align 4
Lrounds:
addi $Tbl,$Tbl,`16*$SZ`
@@ -377,7 +434,282 @@ $code.=<<___;
blr
.long 0
.byte 0,12,0x14,0,0,0,0,0
+.size $func,.-$func
+___
+} else {
+########################################################################
+# SHA512 for PPC32, X vector is off-loaded to stack...
+#
+# | sha512
+# | -m32
+# ----------------------+-----------------------
+# PPC74x0,gcc-4.0.1 | +48%
+# POWER6,gcc-4.4.6 | +124%(*)
+# POWER7,gcc-4.4.6 | +79%(*)
+# e300,gcc-4.1.0 | +167%
+#
+# (*) ~1/3 of -m64 result [and ~20% better than -m32 code generated
+# by xlc-12.1]
+
+my $XOFF=$LOCALS;
+
+my @V=map("r$_",(16..31)); # A..H
+
+my ($s0,$s1,$t0,$t1,$t2,$t3,$a0,$a1,$a2,$a3)=map("r$_",(0,5,6,8..12,14,15));
+my ($x0,$x1)=("r3","r4"); # zaps $ctx and $inp
+
+sub ROUND_00_15_ppc32 {
+my ($i, $ahi,$alo,$bhi,$blo,$chi,$clo,$dhi,$dlo,
+ $ehi,$elo,$fhi,$flo,$ghi,$glo,$hhi,$hlo)=@_;
+
+$code.=<<___;
+ lwz $t2,`$SZ*($i%16)+($LITTLE_ENDIAN^4)`($Tbl)
+ xor $a0,$flo,$glo
+ lwz $t3,`$SZ*($i%16)+($LITTLE_ENDIAN^0)`($Tbl)
+ xor $a1,$fhi,$ghi
+ addc $hlo,$hlo,$t0 ; h+=x[i]
+ stw $t0,`$XOFF+0+$SZ*($i%16)`($sp) ; save x[i]
+
+ srwi $s0,$elo,$Sigma1[0]
+ srwi $s1,$ehi,$Sigma1[0]
+ and $a0,$a0,$elo
+ adde $hhi,$hhi,$t1
+ and $a1,$a1,$ehi
+ stw $t1,`$XOFF+4+$SZ*($i%16)`($sp)
+ srwi $t0,$elo,$Sigma1[1]
+ srwi $t1,$ehi,$Sigma1[1]
+ addc $hlo,$hlo,$t2 ; h+=K512[i]
+ insrwi $s0,$ehi,$Sigma1[0],0
+ insrwi $s1,$elo,$Sigma1[0],0
+ xor $a0,$a0,$glo ; Ch(e,f,g)
+ adde $hhi,$hhi,$t3
+ xor $a1,$a1,$ghi
+ insrwi $t0,$ehi,$Sigma1[1],0
+ insrwi $t1,$elo,$Sigma1[1],0
+ addc $hlo,$hlo,$a0 ; h+=Ch(e,f,g)
+ srwi $t2,$ehi,$Sigma1[2]-32
+ srwi $t3,$elo,$Sigma1[2]-32
+ xor $s0,$s0,$t0
+ xor $s1,$s1,$t1
+ insrwi $t2,$elo,$Sigma1[2]-32,0
+ insrwi $t3,$ehi,$Sigma1[2]-32,0
+ xor $a0,$alo,$blo ; a^b, b^c in next round
+ adde $hhi,$hhi,$a1
+ xor $a1,$ahi,$bhi
+ xor $s0,$s0,$t2 ; Sigma1(e)
+ xor $s1,$s1,$t3
+
+ srwi $t0,$alo,$Sigma0[0]
+ and $a2,$a2,$a0
+ addc $hlo,$hlo,$s0 ; h+=Sigma1(e)
+ and $a3,$a3,$a1
+ srwi $t1,$ahi,$Sigma0[0]
+ srwi $s0,$ahi,$Sigma0[1]-32
+ adde $hhi,$hhi,$s1
+ srwi $s1,$alo,$Sigma0[1]-32
+ insrwi $t0,$ahi,$Sigma0[0],0
+ insrwi $t1,$alo,$Sigma0[0],0
+ xor $a2,$a2,$blo ; Maj(a,b,c)
+ addc $dlo,$dlo,$hlo ; d+=h
+ xor $a3,$a3,$bhi
+ insrwi $s0,$alo,$Sigma0[1]-32,0
+ insrwi $s1,$ahi,$Sigma0[1]-32,0
+ adde $dhi,$dhi,$hhi
+ srwi $t2,$ahi,$Sigma0[2]-32
+ srwi $t3,$alo,$Sigma0[2]-32
+ xor $s0,$s0,$t0
+ addc $hlo,$hlo,$a2 ; h+=Maj(a,b,c)
+ xor $s1,$s1,$t1
+ insrwi $t2,$alo,$Sigma0[2]-32,0
+ insrwi $t3,$ahi,$Sigma0[2]-32,0
+ adde $hhi,$hhi,$a3
+___
+$code.=<<___ if ($i>=15);
+ lwz $t0,`$XOFF+0+$SZ*(($i+2)%16)`($sp)
+ lwz $t1,`$XOFF+4+$SZ*(($i+2)%16)`($sp)
+___
+$code.=<<___ if ($i<15 && !$LITTLE_ENDIAN);
+ lwz $t1,`$SZ*($i+1)+0`($inp)
+ lwz $t0,`$SZ*($i+1)+4`($inp)
___
+$code.=<<___ if ($i<15 && $LITTLE_ENDIAN);
+ lwz $a2,`$SZ*($i+1)+0`($inp)
+ lwz $a3,`$SZ*($i+1)+4`($inp)
+ rotlwi $t1,$a2,8
+ rotlwi $t0,$a3,8
+ rlwimi $t1,$a2,24,0,7
+ rlwimi $t0,$a3,24,0,7
+ rlwimi $t1,$a2,24,16,23
+ rlwimi $t0,$a3,24,16,23
+___
+$code.=<<___;
+ xor $s0,$s0,$t2 ; Sigma0(a)
+ xor $s1,$s1,$t3
+ addc $hlo,$hlo,$s0 ; h+=Sigma0(a)
+ adde $hhi,$hhi,$s1
+___
+$code.=<<___ if ($i==15);
+ lwz $x0,`$XOFF+0+$SZ*(($i+1)%16)`($sp)
+ lwz $x1,`$XOFF+4+$SZ*(($i+1)%16)`($sp)
+___
+}
+sub ROUND_16_xx_ppc32 {
+my ($i, $ahi,$alo,$bhi,$blo,$chi,$clo,$dhi,$dlo,
+ $ehi,$elo,$fhi,$flo,$ghi,$glo,$hhi,$hlo)=@_;
+
+$code.=<<___;
+ srwi $s0,$t0,$sigma0[0]
+ srwi $s1,$t1,$sigma0[0]
+ srwi $t2,$t0,$sigma0[1]
+ srwi $t3,$t1,$sigma0[1]
+ insrwi $s0,$t1,$sigma0[0],0
+ insrwi $s1,$t0,$sigma0[0],0
+ srwi $a0,$t0,$sigma0[2]
+ insrwi $t2,$t1,$sigma0[1],0
+ insrwi $t3,$t0,$sigma0[1],0
+ insrwi $a0,$t1,$sigma0[2],0
+ xor $s0,$s0,$t2
+ lwz $t2,`$XOFF+0+$SZ*(($i+14)%16)`($sp)
+ srwi $a1,$t1,$sigma0[2]
+ xor $s1,$s1,$t3
+ lwz $t3,`$XOFF+4+$SZ*(($i+14)%16)`($sp)
+ xor $a0,$a0,$s0
+ srwi $s0,$t2,$sigma1[0]
+ xor $a1,$a1,$s1
+ srwi $s1,$t3,$sigma1[0]
+ addc $x0,$x0,$a0 ; x[i]+=sigma0(x[i+1])
+ srwi $a0,$t3,$sigma1[1]-32
+ insrwi $s0,$t3,$sigma1[0],0
+ insrwi $s1,$t2,$sigma1[0],0
+ adde $x1,$x1,$a1
+ srwi $a1,$t2,$sigma1[1]-32
+
+ insrwi $a0,$t2,$sigma1[1]-32,0
+ srwi $t2,$t2,$sigma1[2]
+ insrwi $a1,$t3,$sigma1[1]-32,0
+ insrwi $t2,$t3,$sigma1[2],0
+ xor $s0,$s0,$a0
+ lwz $a0,`$XOFF+0+$SZ*(($i+9)%16)`($sp)
+ srwi $t3,$t3,$sigma1[2]
+ xor $s1,$s1,$a1
+ lwz $a1,`$XOFF+4+$SZ*(($i+9)%16)`($sp)
+ xor $s0,$s0,$t2
+ addc $x0,$x0,$a0 ; x[i]+=x[i+9]
+ xor $s1,$s1,$t3
+ adde $x1,$x1,$a1
+ addc $x0,$x0,$s0 ; x[i]+=sigma1(x[i+14])
+ adde $x1,$x1,$s1
+___
+ ($t0,$t1,$x0,$x1) = ($x0,$x1,$t0,$t1);
+ &ROUND_00_15_ppc32(@_);
+}
+
+$code.=<<___;
+.align 4
+Lsha2_block_private:
+___
+$code.=<<___ if (!$LITTLE_ENDIAN);
+ lwz $t1,0($inp)
+ xor $a2,@V[3],@V[5] ; B^C, magic seed
+ lwz $t0,4($inp)
+ xor $a3,@V[2],@V[4]
+___
+$code.=<<___ if ($LITTLE_ENDIAN);
+ lwz $a1,0($inp)
+ xor $a2,@V[3],@V[5] ; B^C, magic seed
+ lwz $a0,4($inp)
+ xor $a3,@V[2],@V[4]
+ rotlwi $t1,$a1,8
+ rotlwi $t0,$a0,8
+ rlwimi $t1,$a1,24,0,7
+ rlwimi $t0,$a0,24,0,7
+ rlwimi $t1,$a1,24,16,23
+ rlwimi $t0,$a0,24,16,23
+___
+for($i=0;$i<16;$i++) {
+ &ROUND_00_15_ppc32($i,@V);
+ unshift(@V,pop(@V)); unshift(@V,pop(@V));
+ ($a0,$a1,$a2,$a3) = ($a2,$a3,$a0,$a1);
+}
+$code.=<<___;
+ li $a0,`$rounds/16-1`
+ mtctr $a0
+.align 4
+Lrounds:
+ addi $Tbl,$Tbl,`16*$SZ`
+___
+for(;$i<32;$i++) {
+ &ROUND_16_xx_ppc32($i,@V);
+ unshift(@V,pop(@V)); unshift(@V,pop(@V));
+ ($a0,$a1,$a2,$a3) = ($a2,$a3,$a0,$a1);
+}
+$code.=<<___;
+ bdnz- Lrounds
+
+ $POP $ctx,`$FRAME-$SIZE_T*22`($sp)
+ $POP $inp,`$FRAME-$SIZE_T*23`($sp) ; inp pointer
+ $POP $num,`$FRAME-$SIZE_T*24`($sp) ; end pointer
+ subi $Tbl,$Tbl,`($rounds-16)*$SZ` ; rewind Tbl
+
+ lwz $t0,`$LITTLE_ENDIAN^0`($ctx)
+ lwz $t1,`$LITTLE_ENDIAN^4`($ctx)
+ lwz $t2,`$LITTLE_ENDIAN^8`($ctx)
+ lwz $t3,`$LITTLE_ENDIAN^12`($ctx)
+ lwz $a0,`$LITTLE_ENDIAN^16`($ctx)
+ lwz $a1,`$LITTLE_ENDIAN^20`($ctx)
+ lwz $a2,`$LITTLE_ENDIAN^24`($ctx)
+ addc @V[1],@V[1],$t1
+ lwz $a3,`$LITTLE_ENDIAN^28`($ctx)
+ adde @V[0],@V[0],$t0
+ lwz $t0,`$LITTLE_ENDIAN^32`($ctx)
+ addc @V[3],@V[3],$t3
+ lwz $t1,`$LITTLE_ENDIAN^36`($ctx)
+ adde @V[2],@V[2],$t2
+ lwz $t2,`$LITTLE_ENDIAN^40`($ctx)
+ addc @V[5],@V[5],$a1
+ lwz $t3,`$LITTLE_ENDIAN^44`($ctx)
+ adde @V[4],@V[4],$a0
+ lwz $a0,`$LITTLE_ENDIAN^48`($ctx)
+ addc @V[7],@V[7],$a3
+ lwz $a1,`$LITTLE_ENDIAN^52`($ctx)
+ adde @V[6],@V[6],$a2
+ lwz $a2,`$LITTLE_ENDIAN^56`($ctx)
+ addc @V[9],@V[9],$t1
+ lwz $a3,`$LITTLE_ENDIAN^60`($ctx)
+ adde @V[8],@V[8],$t0
+ stw @V[0],`$LITTLE_ENDIAN^0`($ctx)
+ stw @V[1],`$LITTLE_ENDIAN^4`($ctx)
+ addc @V[11],@V[11],$t3
+ stw @V[2],`$LITTLE_ENDIAN^8`($ctx)
+ stw @V[3],`$LITTLE_ENDIAN^12`($ctx)
+ adde @V[10],@V[10],$t2
+ stw @V[4],`$LITTLE_ENDIAN^16`($ctx)
+ stw @V[5],`$LITTLE_ENDIAN^20`($ctx)
+ addc @V[13],@V[13],$a1
+ stw @V[6],`$LITTLE_ENDIAN^24`($ctx)
+ stw @V[7],`$LITTLE_ENDIAN^28`($ctx)
+ adde @V[12],@V[12],$a0
+ stw @V[8],`$LITTLE_ENDIAN^32`($ctx)
+ stw @V[9],`$LITTLE_ENDIAN^36`($ctx)
+ addc @V[15],@V[15],$a3
+ stw @V[10],`$LITTLE_ENDIAN^40`($ctx)
+ stw @V[11],`$LITTLE_ENDIAN^44`($ctx)
+ adde @V[14],@V[14],$a2
+ stw @V[12],`$LITTLE_ENDIAN^48`($ctx)
+ stw @V[13],`$LITTLE_ENDIAN^52`($ctx)
+ stw @V[14],`$LITTLE_ENDIAN^56`($ctx)
+ stw @V[15],`$LITTLE_ENDIAN^60`($ctx)
+
+ addi $inp,$inp,`16*$SZ` ; advance inp
+ $PUSH $inp,`$FRAME-$SIZE_T*23`($sp)
+ $UCMP $inp,$num
+ bne Lsha2_block_private
+ blr
+ .long 0
+ .byte 0,12,0x14,0,0,0,0,0
+.size $func,.-$func
+___
+}
# Ugly hack here, because PPC assembler syntax seem to vary too
# much from platforms to platform...
@@ -395,46 +727,46 @@ LPICmeup:
.space `64-9*4`
___
$code.=<<___ if ($SZ==8);
- .long 0x428a2f98,0xd728ae22,0x71374491,0x23ef65cd
- .long 0xb5c0fbcf,0xec4d3b2f,0xe9b5dba5,0x8189dbbc
- .long 0x3956c25b,0xf348b538,0x59f111f1,0xb605d019
- .long 0x923f82a4,0xaf194f9b,0xab1c5ed5,0xda6d8118
- .long 0xd807aa98,0xa3030242,0x12835b01,0x45706fbe
- .long 0x243185be,0x4ee4b28c,0x550c7dc3,0xd5ffb4e2
- .long 0x72be5d74,0xf27b896f,0x80deb1fe,0x3b1696b1
- .long 0x9bdc06a7,0x25c71235,0xc19bf174,0xcf692694
- .long 0xe49b69c1,0x9ef14ad2,0xefbe4786,0x384f25e3
- .long 0x0fc19dc6,0x8b8cd5b5,0x240ca1cc,0x77ac9c65
- .long 0x2de92c6f,0x592b0275,0x4a7484aa,0x6ea6e483
- .long 0x5cb0a9dc,0xbd41fbd4,0x76f988da,0x831153b5
- .long 0x983e5152,0xee66dfab,0xa831c66d,0x2db43210
- .long 0xb00327c8,0x98fb213f,0xbf597fc7,0xbeef0ee4
- .long 0xc6e00bf3,0x3da88fc2,0xd5a79147,0x930aa725
- .long 0x06ca6351,0xe003826f,0x14292967,0x0a0e6e70
- .long 0x27b70a85,0x46d22ffc,0x2e1b2138,0x5c26c926
- .long 0x4d2c6dfc,0x5ac42aed,0x53380d13,0x9d95b3df
- .long 0x650a7354,0x8baf63de,0x766a0abb,0x3c77b2a8
- .long 0x81c2c92e,0x47edaee6,0x92722c85,0x1482353b
- .long 0xa2bfe8a1,0x4cf10364,0xa81a664b,0xbc423001
- .long 0xc24b8b70,0xd0f89791,0xc76c51a3,0x0654be30
- .long 0xd192e819,0xd6ef5218,0xd6990624,0x5565a910
- .long 0xf40e3585,0x5771202a,0x106aa070,0x32bbd1b8
- .long 0x19a4c116,0xb8d2d0c8,0x1e376c08,0x5141ab53
- .long 0x2748774c,0xdf8eeb99,0x34b0bcb5,0xe19b48a8
- .long 0x391c0cb3,0xc5c95a63,0x4ed8aa4a,0xe3418acb
- .long 0x5b9cca4f,0x7763e373,0x682e6ff3,0xd6b2b8a3
- .long 0x748f82ee,0x5defb2fc,0x78a5636f,0x43172f60
- .long 0x84c87814,0xa1f0ab72,0x8cc70208,0x1a6439ec
- .long 0x90befffa,0x23631e28,0xa4506ceb,0xde82bde9
- .long 0xbef9a3f7,0xb2c67915,0xc67178f2,0xe372532b
- .long 0xca273ece,0xea26619c,0xd186b8c7,0x21c0c207
- .long 0xeada7dd6,0xcde0eb1e,0xf57d4f7f,0xee6ed178
- .long 0x06f067aa,0x72176fba,0x0a637dc5,0xa2c898a6
- .long 0x113f9804,0xbef90dae,0x1b710b35,0x131c471b
- .long 0x28db77f5,0x23047d84,0x32caab7b,0x40c72493
- .long 0x3c9ebe0a,0x15c9bebc,0x431d67c4,0x9c100d4c
- .long 0x4cc5d4be,0xcb3e42b6,0x597f299c,0xfc657e2a
- .long 0x5fcb6fab,0x3ad6faec,0x6c44198c,0x4a475817
+ .quad 0x428a2f98d728ae22,0x7137449123ef65cd
+ .quad 0xb5c0fbcfec4d3b2f,0xe9b5dba58189dbbc
+ .quad 0x3956c25bf348b538,0x59f111f1b605d019
+ .quad 0x923f82a4af194f9b,0xab1c5ed5da6d8118
+ .quad 0xd807aa98a3030242,0x12835b0145706fbe
+ .quad 0x243185be4ee4b28c,0x550c7dc3d5ffb4e2
+ .quad 0x72be5d74f27b896f,0x80deb1fe3b1696b1
+ .quad 0x9bdc06a725c71235,0xc19bf174cf692694
+ .quad 0xe49b69c19ef14ad2,0xefbe4786384f25e3
+ .quad 0x0fc19dc68b8cd5b5,0x240ca1cc77ac9c65
+ .quad 0x2de92c6f592b0275,0x4a7484aa6ea6e483
+ .quad 0x5cb0a9dcbd41fbd4,0x76f988da831153b5
+ .quad 0x983e5152ee66dfab,0xa831c66d2db43210
+ .quad 0xb00327c898fb213f,0xbf597fc7beef0ee4
+ .quad 0xc6e00bf33da88fc2,0xd5a79147930aa725
+ .quad 0x06ca6351e003826f,0x142929670a0e6e70
+ .quad 0x27b70a8546d22ffc,0x2e1b21385c26c926
+ .quad 0x4d2c6dfc5ac42aed,0x53380d139d95b3df
+ .quad 0x650a73548baf63de,0x766a0abb3c77b2a8
+ .quad 0x81c2c92e47edaee6,0x92722c851482353b
+ .quad 0xa2bfe8a14cf10364,0xa81a664bbc423001
+ .quad 0xc24b8b70d0f89791,0xc76c51a30654be30
+ .quad 0xd192e819d6ef5218,0xd69906245565a910
+ .quad 0xf40e35855771202a,0x106aa07032bbd1b8
+ .quad 0x19a4c116b8d2d0c8,0x1e376c085141ab53
+ .quad 0x2748774cdf8eeb99,0x34b0bcb5e19b48a8
+ .quad 0x391c0cb3c5c95a63,0x4ed8aa4ae3418acb
+ .quad 0x5b9cca4f7763e373,0x682e6ff3d6b2b8a3
+ .quad 0x748f82ee5defb2fc,0x78a5636f43172f60
+ .quad 0x84c87814a1f0ab72,0x8cc702081a6439ec
+ .quad 0x90befffa23631e28,0xa4506cebde82bde9
+ .quad 0xbef9a3f7b2c67915,0xc67178f2e372532b
+ .quad 0xca273eceea26619c,0xd186b8c721c0c207
+ .quad 0xeada7dd6cde0eb1e,0xf57d4f7fee6ed178
+ .quad 0x06f067aa72176fba,0x0a637dc5a2c898a6
+ .quad 0x113f9804bef90dae,0x1b710b35131c471b
+ .quad 0x28db77f523047d84,0x32caab7b40c72493
+ .quad 0x3c9ebe0a15c9bebc,0x431d67c49c100d4c
+ .quad 0x4cc5d4becb3e42b6,0x597f299cfc657e2a
+ .quad 0x5fcb6fab3ad6faec,0x6c44198c4a475817
___
$code.=<<___ if ($SZ==4);
.long 0x428a2f98,0x71374491,0xb5c0fbcf,0xe9b5dba5
diff --git a/crypto/openssl/crypto/sha/asm/sha512-sparcv9.pl b/crypto/openssl/crypto/sha/asm/sha512-sparcv9.pl
index 5857407..5a9c15d 100755
--- a/crypto/openssl/crypto/sha/asm/sha512-sparcv9.pl
+++ b/crypto/openssl/crypto/sha/asm/sha512-sparcv9.pl
@@ -5,6 +5,8 @@
# project. The module is, however, dual licensed under OpenSSL and
# CRYPTOGAMS licenses depending on where you obtain it. For further
# details see http://www.openssl.org/~appro/cryptogams/.
+#
+# Hardware SPARC T4 support by David S. Miller <davem@davemloft.net>.
# ====================================================================
# SHA256 performance improvement over compiler generated code varies
@@ -41,11 +43,11 @@
# loads are always slower than one 64-bit load. Once again this
# is unlike pre-T1 UltraSPARC, where, if scheduled appropriately,
# 2x32-bit loads can be as fast as 1x64-bit ones.
-
-$bits=32;
-for (@ARGV) { $bits=64 if (/\-m64/ || /\-xarch\=v9/); }
-if ($bits==64) { $bias=2047; $frame=192; }
-else { $bias=0; $frame=112; }
+#
+# SPARC T4 SHA256/512 hardware achieves 3.17/2.01 cycles per byte,
+# which is 9.3x/11.1x faster than software. Multi-process benchmark
+# saturates at 11.5x single-process result on 8-core processor, or
+# ~11/16GBps per 2.85GHz socket.
$output=shift;
open STDOUT,">$output";
@@ -170,6 +172,7 @@ $code.=<<___ if ($i==0);
ld [$inp+16],%l4
ld [$inp+20],%l5
ld [$inp+24],%l6
+ cmp $tmp31,0
ld [$inp+28],%l7
___
$code.=<<___ if ($i<15);
@@ -182,29 +185,29 @@ $code.=<<___ if ($i<15);
or @pair[1],$tmp2,$tmp2
`"ld [$inp+".eval(32+4+$i*8)."],@pair[1]" if ($i<12)`
add $h,$tmp2,$T1
- $ST $tmp2,[%sp+`$bias+$frame+$i*$SZ`]
+ $ST $tmp2,[%sp+STACK_BIAS+STACK_FRAME+`$i*$SZ`]
___
$code.=<<___ if ($i==12);
- brnz,a $tmp31,.+8
+ bnz,a,pn %icc,.+8
ld [$inp+128],%l0
___
$code.=<<___ if ($i==15);
- ld [%sp+`$bias+$frame+(($i+1+1)%16)*$SZ+0`],%l2
+ ld [%sp+STACK_BIAS+STACK_FRAME+`(($i+1+1)%16)*$SZ+0`],%l2
sllx @pair[1],$tmp31,$tmp2 ! Xload($i)
add $tmp31,32,$tmp0
- ld [%sp+`$bias+$frame+(($i+1+1)%16)*$SZ+4`],%l3
+ ld [%sp+STACK_BIAS+STACK_FRAME+`(($i+1+1)%16)*$SZ+4`],%l3
sllx @pair[0],$tmp0,$tmp1
- ld [%sp+`$bias+$frame+(($i+1+9)%16)*$SZ+0`],%l4
+ ld [%sp+STACK_BIAS+STACK_FRAME+`(($i+1+9)%16)*$SZ+0`],%l4
srlx @pair[2],$tmp32,@pair[1]
or $tmp1,$tmp2,$tmp2
- ld [%sp+`$bias+$frame+(($i+1+9)%16)*$SZ+4`],%l5
+ ld [%sp+STACK_BIAS+STACK_FRAME+`(($i+1+9)%16)*$SZ+4`],%l5
or @pair[1],$tmp2,$tmp2
- ld [%sp+`$bias+$frame+(($i+1+14)%16)*$SZ+0`],%l6
+ ld [%sp+STACK_BIAS+STACK_FRAME+`(($i+1+14)%16)*$SZ+0`],%l6
add $h,$tmp2,$T1
- $ST $tmp2,[%sp+`$bias+$frame+$i*$SZ`]
- ld [%sp+`$bias+$frame+(($i+1+14)%16)*$SZ+4`],%l7
- ld [%sp+`$bias+$frame+(($i+1+0)%16)*$SZ+0`],%l0
- ld [%sp+`$bias+$frame+(($i+1+0)%16)*$SZ+4`],%l1
+ $ST $tmp2,[%sp+STACK_BIAS+STACK_FRAME+`$i*$SZ`]
+ ld [%sp+STACK_BIAS+STACK_FRAME+`(($i+1+14)%16)*$SZ+4`],%l7
+ ld [%sp+STACK_BIAS+STACK_FRAME+`(($i+1+0)%16)*$SZ+0`],%l0
+ ld [%sp+STACK_BIAS+STACK_FRAME+`(($i+1+0)%16)*$SZ+4`],%l1
___
} if ($SZ==8);
@@ -340,9 +343,9 @@ $code.=<<___;
or %l3,$tmp0,$tmp0
srlx $tmp0,@sigma0[0],$T1
- ld [%sp+`$bias+$frame+(($i+1+1)%16)*$SZ+0`],%l2
+ ld [%sp+STACK_BIAS+STACK_FRAME+`(($i+1+1)%16)*$SZ+0`],%l2
sllx $tmp0,`64-@sigma0[2]`,$tmp1
- ld [%sp+`$bias+$frame+(($i+1+1)%16)*$SZ+4`],%l3
+ ld [%sp+STACK_BIAS+STACK_FRAME+`(($i+1+1)%16)*$SZ+4`],%l3
srlx $tmp0,@sigma0[1],$tmp0
xor $tmp1,$T1,$T1
sllx $tmp1,`@sigma0[2]-@sigma0[1]`,$tmp1
@@ -354,9 +357,9 @@ $code.=<<___;
or %l7,$tmp2,$tmp2
srlx $tmp2,@sigma1[0],$tmp1
- ld [%sp+`$bias+$frame+(($i+1+14)%16)*$SZ+0`],%l6
+ ld [%sp+STACK_BIAS+STACK_FRAME+`(($i+1+14)%16)*$SZ+0`],%l6
sllx $tmp2,`64-@sigma1[2]`,$tmp0
- ld [%sp+`$bias+$frame+(($i+1+14)%16)*$SZ+4`],%l7
+ ld [%sp+STACK_BIAS+STACK_FRAME+`(($i+1+14)%16)*$SZ+4`],%l7
srlx $tmp2,@sigma1[1],$tmp2
xor $tmp0,$tmp1,$tmp1
sllx $tmp0,`@sigma1[2]-@sigma1[1]`,$tmp0
@@ -365,27 +368,30 @@ $code.=<<___;
xor $tmp0,$tmp1,$tmp1
sllx %l4,32,$tmp0
xor $tmp2,$tmp1,$tmp1 ! sigma1(X[$i+14])
- ld [%sp+`$bias+$frame+(($i+1+9)%16)*$SZ+0`],%l4
+ ld [%sp+STACK_BIAS+STACK_FRAME+`(($i+1+9)%16)*$SZ+0`],%l4
or %l5,$tmp0,$tmp0
- ld [%sp+`$bias+$frame+(($i+1+9)%16)*$SZ+4`],%l5
+ ld [%sp+STACK_BIAS+STACK_FRAME+`(($i+1+9)%16)*$SZ+4`],%l5
sllx %l0,32,$tmp2
add $tmp1,$T1,$T1
- ld [%sp+`$bias+$frame+(($i+1+0)%16)*$SZ+0`],%l0
+ ld [%sp+STACK_BIAS+STACK_FRAME+`(($i+1+0)%16)*$SZ+0`],%l0
or %l1,$tmp2,$tmp2
add $tmp0,$T1,$T1 ! +=X[$i+9]
- ld [%sp+`$bias+$frame+(($i+1+0)%16)*$SZ+4`],%l1
+ ld [%sp+STACK_BIAS+STACK_FRAME+`(($i+1+0)%16)*$SZ+4`],%l1
add $tmp2,$T1,$T1 ! +=X[$i]
- $ST $T1,[%sp+`$bias+$frame+($i%16)*$SZ`]
+ $ST $T1,[%sp+STACK_BIAS+STACK_FRAME+`($i%16)*$SZ`]
___
&BODY_00_15(@_);
} if ($SZ==8);
-$code.=<<___ if ($bits==64);
+$code.=<<___;
+#include "sparc_arch.h"
+
+#ifdef __arch64__
.register %g2,#scratch
.register %g3,#scratch
-___
-$code.=<<___;
+#endif
+
.section ".text",#alloc,#execinstr
.align 64
@@ -457,9 +463,203 @@ ___
}
$code.=<<___;
.size K${label},.-K${label}
+
+#ifdef __PIC__
+SPARC_PIC_THUNK(%g1)
+#endif
+
.globl sha${label}_block_data_order
+.align 32
sha${label}_block_data_order:
- save %sp,`-$frame-$locals`,%sp
+ SPARC_LOAD_ADDRESS_LEAF(OPENSSL_sparcv9cap_P,%g1,%g5)
+ ld [%g1+4],%g1 ! OPENSSL_sparcv9cap_P[1]
+
+ andcc %g1, CFR_SHA${label}, %g0
+ be .Lsoftware
+ nop
+___
+$code.=<<___ if ($SZ==8); # SHA512
+ ldd [%o0 + 0x00], %f0 ! load context
+ ldd [%o0 + 0x08], %f2
+ ldd [%o0 + 0x10], %f4
+ ldd [%o0 + 0x18], %f6
+ ldd [%o0 + 0x20], %f8
+ ldd [%o0 + 0x28], %f10
+ andcc %o1, 0x7, %g0
+ ldd [%o0 + 0x30], %f12
+ bne,pn %icc, .Lhwunaligned
+ ldd [%o0 + 0x38], %f14
+
+.Lhwaligned_loop:
+ ldd [%o1 + 0x00], %f16
+ ldd [%o1 + 0x08], %f18
+ ldd [%o1 + 0x10], %f20
+ ldd [%o1 + 0x18], %f22
+ ldd [%o1 + 0x20], %f24
+ ldd [%o1 + 0x28], %f26
+ ldd [%o1 + 0x30], %f28
+ ldd [%o1 + 0x38], %f30
+ ldd [%o1 + 0x40], %f32
+ ldd [%o1 + 0x48], %f34
+ ldd [%o1 + 0x50], %f36
+ ldd [%o1 + 0x58], %f38
+ ldd [%o1 + 0x60], %f40
+ ldd [%o1 + 0x68], %f42
+ ldd [%o1 + 0x70], %f44
+ subcc %o2, 1, %o2 ! done yet?
+ ldd [%o1 + 0x78], %f46
+ add %o1, 0x80, %o1
+ prefetch [%o1 + 63], 20
+ prefetch [%o1 + 64+63], 20
+
+ .word 0x81b02860 ! SHA512
+
+ bne,pt SIZE_T_CC, .Lhwaligned_loop
+ nop
+
+.Lhwfinish:
+ std %f0, [%o0 + 0x00] ! store context
+ std %f2, [%o0 + 0x08]
+ std %f4, [%o0 + 0x10]
+ std %f6, [%o0 + 0x18]
+ std %f8, [%o0 + 0x20]
+ std %f10, [%o0 + 0x28]
+ std %f12, [%o0 + 0x30]
+ retl
+ std %f14, [%o0 + 0x38]
+
+.align 16
+.Lhwunaligned:
+ alignaddr %o1, %g0, %o1
+
+ ldd [%o1 + 0x00], %f18
+.Lhwunaligned_loop:
+ ldd [%o1 + 0x08], %f20
+ ldd [%o1 + 0x10], %f22
+ ldd [%o1 + 0x18], %f24
+ ldd [%o1 + 0x20], %f26
+ ldd [%o1 + 0x28], %f28
+ ldd [%o1 + 0x30], %f30
+ ldd [%o1 + 0x38], %f32
+ ldd [%o1 + 0x40], %f34
+ ldd [%o1 + 0x48], %f36
+ ldd [%o1 + 0x50], %f38
+ ldd [%o1 + 0x58], %f40
+ ldd [%o1 + 0x60], %f42
+ ldd [%o1 + 0x68], %f44
+ ldd [%o1 + 0x70], %f46
+ ldd [%o1 + 0x78], %f48
+ subcc %o2, 1, %o2 ! done yet?
+ ldd [%o1 + 0x80], %f50
+ add %o1, 0x80, %o1
+ prefetch [%o1 + 63], 20
+ prefetch [%o1 + 64+63], 20
+
+ faligndata %f18, %f20, %f16
+ faligndata %f20, %f22, %f18
+ faligndata %f22, %f24, %f20
+ faligndata %f24, %f26, %f22
+ faligndata %f26, %f28, %f24
+ faligndata %f28, %f30, %f26
+ faligndata %f30, %f32, %f28
+ faligndata %f32, %f34, %f30
+ faligndata %f34, %f36, %f32
+ faligndata %f36, %f38, %f34
+ faligndata %f38, %f40, %f36
+ faligndata %f40, %f42, %f38
+ faligndata %f42, %f44, %f40
+ faligndata %f44, %f46, %f42
+ faligndata %f46, %f48, %f44
+ faligndata %f48, %f50, %f46
+
+ .word 0x81b02860 ! SHA512
+
+ bne,pt SIZE_T_CC, .Lhwunaligned_loop
+ for %f50, %f50, %f18 ! %f18=%f50
+
+ ba .Lhwfinish
+ nop
+___
+$code.=<<___ if ($SZ==4); # SHA256
+ ld [%o0 + 0x00], %f0
+ ld [%o0 + 0x04], %f1
+ ld [%o0 + 0x08], %f2
+ ld [%o0 + 0x0c], %f3
+ ld [%o0 + 0x10], %f4
+ ld [%o0 + 0x14], %f5
+ andcc %o1, 0x7, %g0
+ ld [%o0 + 0x18], %f6
+ bne,pn %icc, .Lhwunaligned
+ ld [%o0 + 0x1c], %f7
+
+.Lhwloop:
+ ldd [%o1 + 0x00], %f8
+ ldd [%o1 + 0x08], %f10
+ ldd [%o1 + 0x10], %f12
+ ldd [%o1 + 0x18], %f14
+ ldd [%o1 + 0x20], %f16
+ ldd [%o1 + 0x28], %f18
+ ldd [%o1 + 0x30], %f20
+ subcc %o2, 1, %o2 ! done yet?
+ ldd [%o1 + 0x38], %f22
+ add %o1, 0x40, %o1
+ prefetch [%o1 + 63], 20
+
+ .word 0x81b02840 ! SHA256
+
+ bne,pt SIZE_T_CC, .Lhwloop
+ nop
+
+.Lhwfinish:
+ st %f0, [%o0 + 0x00] ! store context
+ st %f1, [%o0 + 0x04]
+ st %f2, [%o0 + 0x08]
+ st %f3, [%o0 + 0x0c]
+ st %f4, [%o0 + 0x10]
+ st %f5, [%o0 + 0x14]
+ st %f6, [%o0 + 0x18]
+ retl
+ st %f7, [%o0 + 0x1c]
+
+.align 8
+.Lhwunaligned:
+ alignaddr %o1, %g0, %o1
+
+ ldd [%o1 + 0x00], %f10
+.Lhwunaligned_loop:
+ ldd [%o1 + 0x08], %f12
+ ldd [%o1 + 0x10], %f14
+ ldd [%o1 + 0x18], %f16
+ ldd [%o1 + 0x20], %f18
+ ldd [%o1 + 0x28], %f20
+ ldd [%o1 + 0x30], %f22
+ ldd [%o1 + 0x38], %f24
+ subcc %o2, 1, %o2 ! done yet?
+ ldd [%o1 + 0x40], %f26
+ add %o1, 0x40, %o1
+ prefetch [%o1 + 63], 20
+
+ faligndata %f10, %f12, %f8
+ faligndata %f12, %f14, %f10
+ faligndata %f14, %f16, %f12
+ faligndata %f16, %f18, %f14
+ faligndata %f18, %f20, %f16
+ faligndata %f20, %f22, %f18
+ faligndata %f22, %f24, %f20
+ faligndata %f24, %f26, %f22
+
+ .word 0x81b02840 ! SHA256
+
+ bne,pt SIZE_T_CC, .Lhwunaligned_loop
+ for %f26, %f26, %f10 ! %f10=%f26
+
+ ba .Lhwfinish
+ nop
+___
+$code.=<<___;
+.align 16
+.Lsoftware:
+ save %sp,-STACK_FRAME-$locals,%sp
and $inp,`$align-1`,$tmp31
sllx $len,`log(16*$SZ)/log(2)`,$len
andn $inp,`$align-1`,$inp
@@ -578,7 +778,7 @@ ___
$code.=<<___;
add $inp,`16*$SZ`,$inp ! advance inp
cmp $inp,$len
- bne `$bits==64?"%xcc":"%icc"`,.Lloop
+ bne SIZE_T_CC,.Lloop
sub $Ktbl,`($rounds-16)*$SZ`,$Ktbl ! rewind Ktbl
ret
@@ -589,6 +789,62 @@ $code.=<<___;
.align 4
___
-$code =~ s/\`([^\`]*)\`/eval $1/gem;
-print $code;
+# Purpose of these subroutines is to explicitly encode VIS instructions,
+# so that one can compile the module without having to specify VIS
+# extentions on compiler command line, e.g. -xarch=v9 vs. -xarch=v9a.
+# Idea is to reserve for option to produce "universal" binary and let
+# programmer detect if current CPU is VIS capable at run-time.
+sub unvis {
+my ($mnemonic,$rs1,$rs2,$rd)=@_;
+my $ref,$opf;
+my %visopf = ( "faligndata" => 0x048,
+ "for" => 0x07c );
+
+ $ref = "$mnemonic\t$rs1,$rs2,$rd";
+
+ if ($opf=$visopf{$mnemonic}) {
+ foreach ($rs1,$rs2,$rd) {
+ return $ref if (!/%f([0-9]{1,2})/);
+ $_=$1;
+ if ($1>=32) {
+ return $ref if ($1&1);
+ # re-encode for upper double register addressing
+ $_=($1|$1>>5)&31;
+ }
+ }
+
+ return sprintf ".word\t0x%08x !%s",
+ 0x81b00000|$rd<<25|$rs1<<14|$opf<<5|$rs2,
+ $ref;
+ } else {
+ return $ref;
+ }
+}
+sub unalignaddr {
+my ($mnemonic,$rs1,$rs2,$rd)=@_;
+my %bias = ( "g" => 0, "o" => 8, "l" => 16, "i" => 24 );
+my $ref="$mnemonic\t$rs1,$rs2,$rd";
+
+ foreach ($rs1,$rs2,$rd) {
+ if (/%([goli])([0-7])/) { $_=$bias{$1}+$2; }
+ else { return $ref; }
+ }
+ return sprintf ".word\t0x%08x !%s",
+ 0x81b00300|$rd<<25|$rs1<<14|$rs2,
+ $ref;
+}
+
+foreach (split("\n",$code)) {
+ s/\`([^\`]*)\`/eval $1/ge;
+
+ s/\b(f[^\s]*)\s+(%f[0-9]{1,2}),\s*(%f[0-9]{1,2}),\s*(%f[0-9]{1,2})/
+ &unvis($1,$2,$3,$4)
+ /ge;
+ s/\b(alignaddr)\s+(%[goli][0-7]),\s*(%[goli][0-7]),\s*(%[goli][0-7])/
+ &unalignaddr($1,$2,$3,$4)
+ /ge;
+
+ print $_,"\n";
+}
+
close STDOUT;
diff --git a/crypto/openssl/crypto/sha/asm/sha512-x86_64.pl b/crypto/openssl/crypto/sha/asm/sha512-x86_64.pl
index 8d51678..b7b44b4 100755
--- a/crypto/openssl/crypto/sha/asm/sha512-x86_64.pl
+++ b/crypto/openssl/crypto/sha/asm/sha512-x86_64.pl
@@ -1,7 +1,7 @@
#!/usr/bin/env perl
#
# ====================================================================
-# Written by Andy Polyakov <appro@fy.chalmers.se> for the OpenSSL
+# Written by Andy Polyakov <appro@openssl.org> for the OpenSSL
# project. Rights for redistribution and usage in source and binary
# forms are granted according to the OpenSSL license.
# ====================================================================
@@ -39,6 +39,64 @@
# contrary, 64-bit version, sha512_block, is ~30% *slower* than 32-bit
# sha256_block:-( This is presumably because 64-bit shifts/rotates
# apparently are not atomic instructions, but implemented in microcode.
+#
+# May 2012.
+#
+# Optimization including one of Pavel Semjanov's ideas, alternative
+# Maj, resulted in >=5% improvement on most CPUs, +20% SHA256 and
+# unfortunately -2% SHA512 on P4 [which nobody should care about
+# that much].
+#
+# June 2012.
+#
+# Add SIMD code paths, see below for improvement coefficients. SSSE3
+# code path was not attempted for SHA512, because improvement is not
+# estimated to be high enough, noticeably less than 9%, to justify
+# the effort, not on pre-AVX processors. [Obviously with exclusion
+# for VIA Nano, but it has SHA512 instruction that is faster and
+# should be used instead.] For reference, corresponding estimated
+# upper limit for improvement for SSSE3 SHA256 is 28%. The fact that
+# higher coefficients are observed on VIA Nano and Bulldozer has more
+# to do with specifics of their architecture [which is topic for
+# separate discussion].
+#
+# November 2012.
+#
+# Add AVX2 code path. Two consecutive input blocks are loaded to
+# 256-bit %ymm registers, with data from first block to least
+# significant 128-bit halves and data from second to most significant.
+# The data is then processed with same SIMD instruction sequence as
+# for AVX, but with %ymm as operands. Side effect is increased stack
+# frame, 448 additional bytes in SHA256 and 1152 in SHA512, and 1.2KB
+# code size increase.
+#
+# March 2014.
+#
+# Add support for Intel SHA Extensions.
+
+######################################################################
+# Current performance in cycles per processed byte (less is better):
+#
+# SHA256 SSSE3 AVX/XOP(*) SHA512 AVX/XOP(*)
+#
+# AMD K8 14.9 - - 9.57 -
+# P4 17.3 - - 30.8 -
+# Core 2 15.6 13.8(+13%) - 9.97 -
+# Westmere 14.8 12.3(+19%) - 9.58 -
+# Sandy Bridge 17.4 14.2(+23%) 11.6(+50%(**)) 11.2 8.10(+38%(**))
+# Ivy Bridge 12.6 10.5(+20%) 10.3(+22%) 8.17 7.22(+13%)
+# Haswell 12.2 9.28(+31%) 7.80(+56%) 7.66 5.40(+42%)
+# Bulldozer 21.1 13.6(+54%) 13.6(+54%(***)) 13.5 8.58(+57%)
+# VIA Nano 23.0 16.5(+39%) - 14.7 -
+# Atom 23.0 18.9(+22%) - 14.7 -
+# Silvermont 27.4 20.6(+33%) - 17.5 -
+#
+# (*) whichever best applicable;
+# (**) switch from ror to shrd stands for fair share of improvement;
+# (***) execution time is fully determined by remaining integer-only
+# part, body_00_15; reducing the amount of SIMD instructions
+# below certain limit makes no difference/sense; to conserve
+# space SHA256 XOP code path is therefore omitted;
$flavour = shift;
$output = shift;
@@ -51,6 +109,28 @@ $0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1;
( $xlate="${dir}../../perlasm/x86_64-xlate.pl" and -f $xlate) or
die "can't locate x86_64-xlate.pl";
+if (`$ENV{CC} -Wa,-v -c -o /dev/null -x assembler /dev/null 2>&1`
+ =~ /GNU assembler version ([2-9]\.[0-9]+)/) {
+ $avx = ($1>=2.19) + ($1>=2.22);
+}
+
+if (!$avx && $win64 && ($flavour =~ /nasm/ || $ENV{ASM} =~ /nasm/) &&
+ `nasm -v 2>&1` =~ /NASM version ([2-9]\.[0-9]+)/) {
+ $avx = ($1>=2.09) + ($1>=2.10);
+}
+
+if (!$avx && $win64 && ($flavour =~ /masm/ || $ENV{ASM} =~ /ml64/) &&
+ `ml64 2>&1` =~ /Version ([0-9]+)\./) {
+ $avx = ($1>=10) + ($1>=11);
+}
+
+if (!$avx && `$ENV{CC} -v 2>&1` =~ /(^clang version|based on LLVM) ([3-9]\.[0-9]+)/) {
+ $avx = ($2>=3.0) + ($2>3.0);
+}
+
+$shaext=1; ### set to zero if compiling for 1.0.1
+$avx=1 if (!$shaext && $avx);
+
open OUT,"| \"$^X\" $xlate $flavour $output";
*STDOUT=*OUT;
@@ -60,7 +140,7 @@ if ($output =~ /512/) {
$SZ=8;
@ROT=($A,$B,$C,$D,$E,$F,$G,$H)=("%rax","%rbx","%rcx","%rdx",
"%r8", "%r9", "%r10","%r11");
- ($T1,$a0,$a1,$a2)=("%r12","%r13","%r14","%r15");
+ ($T1,$a0,$a1,$a2,$a3)=("%r12","%r13","%r14","%r15","%rdi");
@Sigma0=(28,34,39);
@Sigma1=(14,18,41);
@sigma0=(1, 8, 7);
@@ -72,7 +152,7 @@ if ($output =~ /512/) {
$SZ=4;
@ROT=($A,$B,$C,$D,$E,$F,$G,$H)=("%eax","%ebx","%ecx","%edx",
"%r8d","%r9d","%r10d","%r11d");
- ($T1,$a0,$a1,$a2)=("%r12d","%r13d","%r14d","%r15d");
+ ($T1,$a0,$a1,$a2,$a3)=("%r12d","%r13d","%r14d","%r15d","%edi");
@Sigma0=( 2,13,22);
@Sigma1=( 6,11,25);
@sigma0=( 7,18, 3);
@@ -80,8 +160,7 @@ if ($output =~ /512/) {
$rounds=64;
}
-$ctx="%rdi"; # 1st arg
-$round="%rdi"; # zaps $ctx
+$ctx="%rdi"; # 1st arg, zapped by $a3
$inp="%rsi"; # 2nd arg
$Tbl="%rbp";
@@ -94,47 +173,51 @@ $framesz="16*$SZ+4*8";
sub ROUND_00_15()
{ my ($i,$a,$b,$c,$d,$e,$f,$g,$h) = @_;
+ my $STRIDE=$SZ;
+ $STRIDE += 16 if ($i%(16/$SZ)==(16/$SZ-1));
$code.=<<___;
ror \$`$Sigma1[2]-$Sigma1[1]`,$a0
mov $f,$a2
- mov $T1,`$SZ*($i&0xf)`(%rsp)
- ror \$`$Sigma0[2]-$Sigma0[1]`,$a1
xor $e,$a0
+ ror \$`$Sigma0[2]-$Sigma0[1]`,$a1
xor $g,$a2 # f^g
- ror \$`$Sigma1[1]-$Sigma1[0]`,$a0
- add $h,$T1 # T1+=h
+ mov $T1,`$SZ*($i&0xf)`(%rsp)
xor $a,$a1
-
- add ($Tbl,$round,$SZ),$T1 # T1+=K[round]
and $e,$a2 # (f^g)&e
- mov $b,$h
+
+ ror \$`$Sigma1[1]-$Sigma1[0]`,$a0
+ add $h,$T1 # T1+=h
+ xor $g,$a2 # Ch(e,f,g)=((f^g)&e)^g
ror \$`$Sigma0[1]-$Sigma0[0]`,$a1
xor $e,$a0
- xor $g,$a2 # Ch(e,f,g)=((f^g)&e)^g
+ add $a2,$T1 # T1+=Ch(e,f,g)
- xor $c,$h # b^c
+ mov $a,$a2
+ add ($Tbl),$T1 # T1+=K[round]
xor $a,$a1
- add $a2,$T1 # T1+=Ch(e,f,g)
- mov $b,$a2
+ xor $b,$a2 # a^b, b^c in next round
ror \$$Sigma1[0],$a0 # Sigma1(e)
- and $a,$h # h=(b^c)&a
- and $c,$a2 # b&c
+ mov $b,$h
+ and $a2,$a3
ror \$$Sigma0[0],$a1 # Sigma0(a)
add $a0,$T1 # T1+=Sigma1(e)
- add $a2,$h # h+=b&c (completes +=Maj(a,b,c)
+ xor $a3,$h # h=Maj(a,b,c)=Ch(a^b,c,b)
add $T1,$d # d+=T1
add $T1,$h # h+=T1
- lea 1($round),$round # round++
- add $a1,$h # h+=Sigma0(a)
+ lea $STRIDE($Tbl),$Tbl # round++
+___
+$code.=<<___ if ($i<15);
+ add $a1,$h # h+=Sigma0(a)
___
+ ($a2,$a3) = ($a3,$a2);
}
sub ROUND_16_XX()
@@ -142,29 +225,28 @@ sub ROUND_16_XX()
$code.=<<___;
mov `$SZ*(($i+1)&0xf)`(%rsp),$a0
- mov `$SZ*(($i+14)&0xf)`(%rsp),$a1
- mov $a0,$T1
- mov $a1,$a2
-
- ror \$`$sigma0[1]-$sigma0[0]`,$T1
- xor $a0,$T1
- shr \$$sigma0[2],$a0
-
- ror \$$sigma0[0],$T1
- xor $T1,$a0 # sigma0(X[(i+1)&0xf])
- mov `$SZ*(($i+9)&0xf)`(%rsp),$T1
+ mov `$SZ*(($i+14)&0xf)`(%rsp),$a2
+ mov $a0,$T1
+ ror \$`$sigma0[1]-$sigma0[0]`,$a0
+ add $a1,$a # modulo-scheduled h+=Sigma0(a)
+ mov $a2,$a1
ror \$`$sigma1[1]-$sigma1[0]`,$a2
+
+ xor $T1,$a0
+ shr \$$sigma0[2],$T1
+ ror \$$sigma0[0],$a0
xor $a1,$a2
shr \$$sigma1[2],$a1
ror \$$sigma1[0],$a2
- add $a0,$T1
- xor $a2,$a1 # sigma1(X[(i+14)&0xf])
+ xor $a0,$T1 # sigma0(X[(i+1)&0xf])
+ xor $a1,$a2 # sigma1(X[(i+14)&0xf])
+ add `$SZ*(($i+9)&0xf)`(%rsp),$T1
add `$SZ*($i&0xf)`(%rsp),$T1
mov $e,$a0
- add $a1,$T1
+ add $a2,$T1
mov $a,$a1
___
&ROUND_00_15(@_);
@@ -173,10 +255,43 @@ ___
$code=<<___;
.text
+.extern OPENSSL_ia32cap_P
.globl $func
-.type $func,\@function,4
+.type $func,\@function,3
.align 16
$func:
+___
+$code.=<<___ if ($SZ==4 || $avx);
+ lea OPENSSL_ia32cap_P(%rip),%r11
+ mov 0(%r11),%r9d
+ mov 4(%r11),%r10d
+ mov 8(%r11),%r11d
+___
+$code.=<<___ if ($SZ==4 && $shaext);
+ test \$`1<<29`,%r11d # check for SHA
+ jnz _shaext_shortcut
+___
+$code.=<<___ if ($avx && $SZ==8);
+ test \$`1<<11`,%r10d # check for XOP
+ jnz .Lxop_shortcut
+___
+$code.=<<___ if ($avx>1);
+ and \$`1<<8|1<<5|1<<3`,%r11d # check for BMI2+AVX2+BMI1
+ cmp \$`1<<8|1<<5|1<<3`,%r11d
+ je .Lavx2_shortcut
+___
+$code.=<<___ if ($avx);
+ and \$`1<<30`,%r9d # mask "Intel CPU" bit
+ and \$`1<<28|1<<9`,%r10d # mask AVX and SSSE3 bits
+ or %r9d,%r10d
+ cmp \$`1<<28|1<<9|1<<30`,%r10d
+ je .Lavx_shortcut
+___
+$code.=<<___ if ($SZ==4);
+ test \$`1<<9`,%r10d
+ jnz .Lssse3_shortcut
+___
+$code.=<<___;
push %rbx
push %rbp
push %r12
@@ -194,8 +309,6 @@ $func:
mov %r11,$_rsp # save copy of %rsp
.Lprologue:
- lea $TABLE(%rip),$Tbl
-
mov $SZ*0($ctx),$A
mov $SZ*1($ctx),$B
mov $SZ*2($ctx),$C
@@ -208,7 +321,9 @@ $func:
.align 16
.Lloop:
- xor $round,$round
+ mov $B,$a3
+ lea $TABLE(%rip),$Tbl
+ xor $C,$a3 # magic
___
for($i=0;$i<16;$i++) {
$code.=" mov $SZ*$i($inp),$T1\n";
@@ -229,10 +344,11 @@ ___
}
$code.=<<___;
- cmp \$$rounds,$round
- jb .Lrounds_16_xx
+ cmpb \$0,`$SZ-1`($Tbl)
+ jnz .Lrounds_16_xx
mov $_ctx,$ctx
+ add $a1,$A # modulo-scheduled h+=Sigma0(a)
lea 16*$SZ($inp),$inp
add $SZ*0($ctx),$A
@@ -275,21 +391,45 @@ $code.=<<___;
.type $TABLE,\@object
$TABLE:
.long 0x428a2f98,0x71374491,0xb5c0fbcf,0xe9b5dba5
+ .long 0x428a2f98,0x71374491,0xb5c0fbcf,0xe9b5dba5
+ .long 0x3956c25b,0x59f111f1,0x923f82a4,0xab1c5ed5
.long 0x3956c25b,0x59f111f1,0x923f82a4,0xab1c5ed5
.long 0xd807aa98,0x12835b01,0x243185be,0x550c7dc3
+ .long 0xd807aa98,0x12835b01,0x243185be,0x550c7dc3
+ .long 0x72be5d74,0x80deb1fe,0x9bdc06a7,0xc19bf174
.long 0x72be5d74,0x80deb1fe,0x9bdc06a7,0xc19bf174
.long 0xe49b69c1,0xefbe4786,0x0fc19dc6,0x240ca1cc
+ .long 0xe49b69c1,0xefbe4786,0x0fc19dc6,0x240ca1cc
+ .long 0x2de92c6f,0x4a7484aa,0x5cb0a9dc,0x76f988da
.long 0x2de92c6f,0x4a7484aa,0x5cb0a9dc,0x76f988da
.long 0x983e5152,0xa831c66d,0xb00327c8,0xbf597fc7
+ .long 0x983e5152,0xa831c66d,0xb00327c8,0xbf597fc7
.long 0xc6e00bf3,0xd5a79147,0x06ca6351,0x14292967
+ .long 0xc6e00bf3,0xd5a79147,0x06ca6351,0x14292967
+ .long 0x27b70a85,0x2e1b2138,0x4d2c6dfc,0x53380d13
.long 0x27b70a85,0x2e1b2138,0x4d2c6dfc,0x53380d13
.long 0x650a7354,0x766a0abb,0x81c2c92e,0x92722c85
+ .long 0x650a7354,0x766a0abb,0x81c2c92e,0x92722c85
+ .long 0xa2bfe8a1,0xa81a664b,0xc24b8b70,0xc76c51a3
.long 0xa2bfe8a1,0xa81a664b,0xc24b8b70,0xc76c51a3
.long 0xd192e819,0xd6990624,0xf40e3585,0x106aa070
+ .long 0xd192e819,0xd6990624,0xf40e3585,0x106aa070
.long 0x19a4c116,0x1e376c08,0x2748774c,0x34b0bcb5
+ .long 0x19a4c116,0x1e376c08,0x2748774c,0x34b0bcb5
+ .long 0x391c0cb3,0x4ed8aa4a,0x5b9cca4f,0x682e6ff3
.long 0x391c0cb3,0x4ed8aa4a,0x5b9cca4f,0x682e6ff3
.long 0x748f82ee,0x78a5636f,0x84c87814,0x8cc70208
+ .long 0x748f82ee,0x78a5636f,0x84c87814,0x8cc70208
+ .long 0x90befffa,0xa4506ceb,0xbef9a3f7,0xc67178f2
.long 0x90befffa,0xa4506ceb,0xbef9a3f7,0xc67178f2
+
+ .long 0x00010203,0x04050607,0x08090a0b,0x0c0d0e0f
+ .long 0x00010203,0x04050607,0x08090a0b,0x0c0d0e0f
+ .long 0x03020100,0x0b0a0908,0xffffffff,0xffffffff
+ .long 0x03020100,0x0b0a0908,0xffffffff,0xffffffff
+ .long 0xffffffff,0xffffffff,0x03020100,0x0b0a0908
+ .long 0xffffffff,0xffffffff,0x03020100,0x0b0a0908
+ .asciz "SHA256 block transform for x86_64, CRYPTOGAMS by <appro\@openssl.org>"
___
} else {
$code.=<<___;
@@ -297,47 +437,1714 @@ $code.=<<___;
.type $TABLE,\@object
$TABLE:
.quad 0x428a2f98d728ae22,0x7137449123ef65cd
+ .quad 0x428a2f98d728ae22,0x7137449123ef65cd
+ .quad 0xb5c0fbcfec4d3b2f,0xe9b5dba58189dbbc
.quad 0xb5c0fbcfec4d3b2f,0xe9b5dba58189dbbc
.quad 0x3956c25bf348b538,0x59f111f1b605d019
+ .quad 0x3956c25bf348b538,0x59f111f1b605d019
+ .quad 0x923f82a4af194f9b,0xab1c5ed5da6d8118
.quad 0x923f82a4af194f9b,0xab1c5ed5da6d8118
.quad 0xd807aa98a3030242,0x12835b0145706fbe
+ .quad 0xd807aa98a3030242,0x12835b0145706fbe
+ .quad 0x243185be4ee4b28c,0x550c7dc3d5ffb4e2
.quad 0x243185be4ee4b28c,0x550c7dc3d5ffb4e2
.quad 0x72be5d74f27b896f,0x80deb1fe3b1696b1
+ .quad 0x72be5d74f27b896f,0x80deb1fe3b1696b1
+ .quad 0x9bdc06a725c71235,0xc19bf174cf692694
.quad 0x9bdc06a725c71235,0xc19bf174cf692694
.quad 0xe49b69c19ef14ad2,0xefbe4786384f25e3
+ .quad 0xe49b69c19ef14ad2,0xefbe4786384f25e3
.quad 0x0fc19dc68b8cd5b5,0x240ca1cc77ac9c65
+ .quad 0x0fc19dc68b8cd5b5,0x240ca1cc77ac9c65
+ .quad 0x2de92c6f592b0275,0x4a7484aa6ea6e483
.quad 0x2de92c6f592b0275,0x4a7484aa6ea6e483
.quad 0x5cb0a9dcbd41fbd4,0x76f988da831153b5
+ .quad 0x5cb0a9dcbd41fbd4,0x76f988da831153b5
+ .quad 0x983e5152ee66dfab,0xa831c66d2db43210
.quad 0x983e5152ee66dfab,0xa831c66d2db43210
.quad 0xb00327c898fb213f,0xbf597fc7beef0ee4
+ .quad 0xb00327c898fb213f,0xbf597fc7beef0ee4
.quad 0xc6e00bf33da88fc2,0xd5a79147930aa725
+ .quad 0xc6e00bf33da88fc2,0xd5a79147930aa725
+ .quad 0x06ca6351e003826f,0x142929670a0e6e70
.quad 0x06ca6351e003826f,0x142929670a0e6e70
.quad 0x27b70a8546d22ffc,0x2e1b21385c26c926
+ .quad 0x27b70a8546d22ffc,0x2e1b21385c26c926
+ .quad 0x4d2c6dfc5ac42aed,0x53380d139d95b3df
.quad 0x4d2c6dfc5ac42aed,0x53380d139d95b3df
.quad 0x650a73548baf63de,0x766a0abb3c77b2a8
+ .quad 0x650a73548baf63de,0x766a0abb3c77b2a8
.quad 0x81c2c92e47edaee6,0x92722c851482353b
+ .quad 0x81c2c92e47edaee6,0x92722c851482353b
+ .quad 0xa2bfe8a14cf10364,0xa81a664bbc423001
.quad 0xa2bfe8a14cf10364,0xa81a664bbc423001
.quad 0xc24b8b70d0f89791,0xc76c51a30654be30
+ .quad 0xc24b8b70d0f89791,0xc76c51a30654be30
+ .quad 0xd192e819d6ef5218,0xd69906245565a910
.quad 0xd192e819d6ef5218,0xd69906245565a910
.quad 0xf40e35855771202a,0x106aa07032bbd1b8
+ .quad 0xf40e35855771202a,0x106aa07032bbd1b8
.quad 0x19a4c116b8d2d0c8,0x1e376c085141ab53
+ .quad 0x19a4c116b8d2d0c8,0x1e376c085141ab53
+ .quad 0x2748774cdf8eeb99,0x34b0bcb5e19b48a8
.quad 0x2748774cdf8eeb99,0x34b0bcb5e19b48a8
.quad 0x391c0cb3c5c95a63,0x4ed8aa4ae3418acb
+ .quad 0x391c0cb3c5c95a63,0x4ed8aa4ae3418acb
+ .quad 0x5b9cca4f7763e373,0x682e6ff3d6b2b8a3
.quad 0x5b9cca4f7763e373,0x682e6ff3d6b2b8a3
.quad 0x748f82ee5defb2fc,0x78a5636f43172f60
+ .quad 0x748f82ee5defb2fc,0x78a5636f43172f60
.quad 0x84c87814a1f0ab72,0x8cc702081a6439ec
+ .quad 0x84c87814a1f0ab72,0x8cc702081a6439ec
+ .quad 0x90befffa23631e28,0xa4506cebde82bde9
.quad 0x90befffa23631e28,0xa4506cebde82bde9
.quad 0xbef9a3f7b2c67915,0xc67178f2e372532b
+ .quad 0xbef9a3f7b2c67915,0xc67178f2e372532b
+ .quad 0xca273eceea26619c,0xd186b8c721c0c207
.quad 0xca273eceea26619c,0xd186b8c721c0c207
.quad 0xeada7dd6cde0eb1e,0xf57d4f7fee6ed178
+ .quad 0xeada7dd6cde0eb1e,0xf57d4f7fee6ed178
.quad 0x06f067aa72176fba,0x0a637dc5a2c898a6
+ .quad 0x06f067aa72176fba,0x0a637dc5a2c898a6
+ .quad 0x113f9804bef90dae,0x1b710b35131c471b
.quad 0x113f9804bef90dae,0x1b710b35131c471b
.quad 0x28db77f523047d84,0x32caab7b40c72493
+ .quad 0x28db77f523047d84,0x32caab7b40c72493
+ .quad 0x3c9ebe0a15c9bebc,0x431d67c49c100d4c
.quad 0x3c9ebe0a15c9bebc,0x431d67c49c100d4c
.quad 0x4cc5d4becb3e42b6,0x597f299cfc657e2a
+ .quad 0x4cc5d4becb3e42b6,0x597f299cfc657e2a
.quad 0x5fcb6fab3ad6faec,0x6c44198c4a475817
+ .quad 0x5fcb6fab3ad6faec,0x6c44198c4a475817
+
+ .quad 0x0001020304050607,0x08090a0b0c0d0e0f
+ .quad 0x0001020304050607,0x08090a0b0c0d0e0f
+ .asciz "SHA512 block transform for x86_64, CRYPTOGAMS by <appro\@openssl.org>"
+___
+}
+
+######################################################################
+# SIMD code paths
+#
+if ($SZ==4 && $shaext) {{{
+######################################################################
+# Intel SHA Extensions implementation of SHA256 update function.
+#
+my ($ctx,$inp,$num,$Tbl)=("%rdi","%rsi","%rdx","%rcx");
+
+my ($Wi,$ABEF,$CDGH,$TMP,$BSWAP,$ABEF_SAVE,$CDGH_SAVE)=map("%xmm$_",(0..2,7..10));
+my @MSG=map("%xmm$_",(3..6));
+
+$code.=<<___;
+.type sha256_block_data_order_shaext,\@function,3
+.align 64
+sha256_block_data_order_shaext:
+_shaext_shortcut:
+___
+$code.=<<___ if ($win64);
+ lea `-8-5*16`(%rsp),%rsp
+ movaps %xmm6,-8-5*16(%rax)
+ movaps %xmm7,-8-4*16(%rax)
+ movaps %xmm8,-8-3*16(%rax)
+ movaps %xmm9,-8-2*16(%rax)
+ movaps %xmm10,-8-1*16(%rax)
+.Lprologue_shaext:
+___
+$code.=<<___;
+ lea K256+0x80(%rip),$Tbl
+ movdqu ($ctx),$ABEF # DCBA
+ movdqu 16($ctx),$CDGH # HGFE
+ movdqa 0x200-0x80($Tbl),$TMP # byte swap mask
+
+ pshufd \$0x1b,$ABEF,$Wi # ABCD
+ pshufd \$0xb1,$ABEF,$ABEF # CDAB
+ pshufd \$0x1b,$CDGH,$CDGH # EFGH
+ movdqa $TMP,$BSWAP # offload
+ palignr \$8,$CDGH,$ABEF # ABEF
+ punpcklqdq $Wi,$CDGH # CDGH
+ jmp .Loop_shaext
+
+.align 16
+.Loop_shaext:
+ movdqu ($inp),@MSG[0]
+ movdqu 0x10($inp),@MSG[1]
+ movdqu 0x20($inp),@MSG[2]
+ pshufb $TMP,@MSG[0]
+ movdqu 0x30($inp),@MSG[3]
+
+ movdqa 0*32-0x80($Tbl),$Wi
+ paddd @MSG[0],$Wi
+ pshufb $TMP,@MSG[1]
+ movdqa $CDGH,$CDGH_SAVE # offload
+ sha256rnds2 $ABEF,$CDGH # 0-3
+ pshufd \$0x0e,$Wi,$Wi
+ nop
+ movdqa $ABEF,$ABEF_SAVE # offload
+ sha256rnds2 $CDGH,$ABEF
+
+ movdqa 1*32-0x80($Tbl),$Wi
+ paddd @MSG[1],$Wi
+ pshufb $TMP,@MSG[2]
+ sha256rnds2 $ABEF,$CDGH # 4-7
+ pshufd \$0x0e,$Wi,$Wi
+ lea 0x40($inp),$inp
+ sha256msg1 @MSG[1],@MSG[0]
+ sha256rnds2 $CDGH,$ABEF
+
+ movdqa 2*32-0x80($Tbl),$Wi
+ paddd @MSG[2],$Wi
+ pshufb $TMP,@MSG[3]
+ sha256rnds2 $ABEF,$CDGH # 8-11
+ pshufd \$0x0e,$Wi,$Wi
+ movdqa @MSG[3],$TMP
+ palignr \$4,@MSG[2],$TMP
+ nop
+ paddd $TMP,@MSG[0]
+ sha256msg1 @MSG[2],@MSG[1]
+ sha256rnds2 $CDGH,$ABEF
+
+ movdqa 3*32-0x80($Tbl),$Wi
+ paddd @MSG[3],$Wi
+ sha256msg2 @MSG[3],@MSG[0]
+ sha256rnds2 $ABEF,$CDGH # 12-15
+ pshufd \$0x0e,$Wi,$Wi
+ movdqa @MSG[0],$TMP
+ palignr \$4,@MSG[3],$TMP
+ nop
+ paddd $TMP,@MSG[1]
+ sha256msg1 @MSG[3],@MSG[2]
+ sha256rnds2 $CDGH,$ABEF
+___
+for($i=4;$i<16-3;$i++) {
+$code.=<<___;
+ movdqa $i*32-0x80($Tbl),$Wi
+ paddd @MSG[0],$Wi
+ sha256msg2 @MSG[0],@MSG[1]
+ sha256rnds2 $ABEF,$CDGH # 16-19...
+ pshufd \$0x0e,$Wi,$Wi
+ movdqa @MSG[1],$TMP
+ palignr \$4,@MSG[0],$TMP
+ nop
+ paddd $TMP,@MSG[2]
+ sha256msg1 @MSG[0],@MSG[3]
+ sha256rnds2 $CDGH,$ABEF
+___
+ push(@MSG,shift(@MSG));
+}
+$code.=<<___;
+ movdqa 13*32-0x80($Tbl),$Wi
+ paddd @MSG[0],$Wi
+ sha256msg2 @MSG[0],@MSG[1]
+ sha256rnds2 $ABEF,$CDGH # 52-55
+ pshufd \$0x0e,$Wi,$Wi
+ movdqa @MSG[1],$TMP
+ palignr \$4,@MSG[0],$TMP
+ sha256rnds2 $CDGH,$ABEF
+ paddd $TMP,@MSG[2]
+
+ movdqa 14*32-0x80($Tbl),$Wi
+ paddd @MSG[1],$Wi
+ sha256rnds2 $ABEF,$CDGH # 56-59
+ pshufd \$0x0e,$Wi,$Wi
+ sha256msg2 @MSG[1],@MSG[2]
+ movdqa $BSWAP,$TMP
+ sha256rnds2 $CDGH,$ABEF
+
+ movdqa 15*32-0x80($Tbl),$Wi
+ paddd @MSG[2],$Wi
+ nop
+ sha256rnds2 $ABEF,$CDGH # 60-63
+ pshufd \$0x0e,$Wi,$Wi
+ dec $num
+ nop
+ sha256rnds2 $CDGH,$ABEF
+
+ paddd $CDGH_SAVE,$CDGH
+ paddd $ABEF_SAVE,$ABEF
+ jnz .Loop_shaext
+
+ pshufd \$0xb1,$CDGH,$CDGH # DCHG
+ pshufd \$0x1b,$ABEF,$TMP # FEBA
+ pshufd \$0xb1,$ABEF,$ABEF # BAFE
+ punpckhqdq $CDGH,$ABEF # DCBA
+ palignr \$8,$TMP,$CDGH # HGFE
+
+ movdqu $ABEF,($ctx)
+ movdqu $CDGH,16($ctx)
+___
+$code.=<<___ if ($win64);
+ movaps -8-5*16(%rax),%xmm6
+ movaps -8-4*16(%rax),%xmm7
+ movaps -8-3*16(%rax),%xmm8
+ movaps -8-2*16(%rax),%xmm9
+ movaps -8-1*16(%rax),%xmm10
+ mov %rax,%rsp
+.Lepilogue_shaext:
+___
+$code.=<<___;
+ ret
+.size sha256_block_data_order_shaext,.-sha256_block_data_order_shaext
+___
+}}}
+{{{
+
+my $a4=$T1;
+my ($a,$b,$c,$d,$e,$f,$g,$h);
+
+sub AUTOLOAD() # thunk [simplified] 32-bit style perlasm
+{ my $opcode = $AUTOLOAD; $opcode =~ s/.*:://;
+ my $arg = pop;
+ $arg = "\$$arg" if ($arg*1 eq $arg);
+ $code .= "\t$opcode\t".join(',',$arg,reverse @_)."\n";
+}
+
+sub body_00_15 () {
+ (
+ '($a,$b,$c,$d,$e,$f,$g,$h)=@ROT;'.
+
+ '&ror ($a0,$Sigma1[2]-$Sigma1[1])',
+ '&mov ($a,$a1)',
+ '&mov ($a4,$f)',
+
+ '&ror ($a1,$Sigma0[2]-$Sigma0[1])',
+ '&xor ($a0,$e)',
+ '&xor ($a4,$g)', # f^g
+
+ '&ror ($a0,$Sigma1[1]-$Sigma1[0])',
+ '&xor ($a1,$a)',
+ '&and ($a4,$e)', # (f^g)&e
+
+ '&xor ($a0,$e)',
+ '&add ($h,$SZ*($i&15)."(%rsp)")', # h+=X[i]+K[i]
+ '&mov ($a2,$a)',
+
+ '&xor ($a4,$g)', # Ch(e,f,g)=((f^g)&e)^g
+ '&ror ($a1,$Sigma0[1]-$Sigma0[0])',
+ '&xor ($a2,$b)', # a^b, b^c in next round
+
+ '&add ($h,$a4)', # h+=Ch(e,f,g)
+ '&ror ($a0,$Sigma1[0])', # Sigma1(e)
+ '&and ($a3,$a2)', # (b^c)&(a^b)
+
+ '&xor ($a1,$a)',
+ '&add ($h,$a0)', # h+=Sigma1(e)
+ '&xor ($a3,$b)', # Maj(a,b,c)=Ch(a^b,c,b)
+
+ '&ror ($a1,$Sigma0[0])', # Sigma0(a)
+ '&add ($d,$h)', # d+=h
+ '&add ($h,$a3)', # h+=Maj(a,b,c)
+
+ '&mov ($a0,$d)',
+ '&add ($a1,$h);'. # h+=Sigma0(a)
+ '($a2,$a3) = ($a3,$a2); unshift(@ROT,pop(@ROT)); $i++;'
+ );
+}
+
+######################################################################
+# SSSE3 code path
+#
+if ($SZ==4) { # SHA256 only
+my @X = map("%xmm$_",(0..3));
+my ($t0,$t1,$t2,$t3, $t4,$t5) = map("%xmm$_",(4..9));
+
+$code.=<<___;
+.type ${func}_ssse3,\@function,3
+.align 64
+${func}_ssse3:
+.Lssse3_shortcut:
+ push %rbx
+ push %rbp
+ push %r12
+ push %r13
+ push %r14
+ push %r15
+ mov %rsp,%r11 # copy %rsp
+ shl \$4,%rdx # num*16
+ sub \$`$framesz+$win64*16*4`,%rsp
+ lea ($inp,%rdx,$SZ),%rdx # inp+num*16*$SZ
+ and \$-64,%rsp # align stack frame
+ mov $ctx,$_ctx # save ctx, 1st arg
+ mov $inp,$_inp # save inp, 2nd arh
+ mov %rdx,$_end # save end pointer, "3rd" arg
+ mov %r11,$_rsp # save copy of %rsp
+___
+$code.=<<___ if ($win64);
+ movaps %xmm6,16*$SZ+32(%rsp)
+ movaps %xmm7,16*$SZ+48(%rsp)
+ movaps %xmm8,16*$SZ+64(%rsp)
+ movaps %xmm9,16*$SZ+80(%rsp)
+___
+$code.=<<___;
+.Lprologue_ssse3:
+
+ mov $SZ*0($ctx),$A
+ mov $SZ*1($ctx),$B
+ mov $SZ*2($ctx),$C
+ mov $SZ*3($ctx),$D
+ mov $SZ*4($ctx),$E
+ mov $SZ*5($ctx),$F
+ mov $SZ*6($ctx),$G
+ mov $SZ*7($ctx),$H
+___
+
+$code.=<<___;
+ #movdqa $TABLE+`$SZ*2*$rounds`+32(%rip),$t4
+ #movdqa $TABLE+`$SZ*2*$rounds`+64(%rip),$t5
+ jmp .Lloop_ssse3
+.align 16
+.Lloop_ssse3:
+ movdqa $TABLE+`$SZ*2*$rounds`(%rip),$t3
+ movdqu 0x00($inp),@X[0]
+ movdqu 0x10($inp),@X[1]
+ movdqu 0x20($inp),@X[2]
+ pshufb $t3,@X[0]
+ movdqu 0x30($inp),@X[3]
+ lea $TABLE(%rip),$Tbl
+ pshufb $t3,@X[1]
+ movdqa 0x00($Tbl),$t0
+ movdqa 0x20($Tbl),$t1
+ pshufb $t3,@X[2]
+ paddd @X[0],$t0
+ movdqa 0x40($Tbl),$t2
+ pshufb $t3,@X[3]
+ movdqa 0x60($Tbl),$t3
+ paddd @X[1],$t1
+ paddd @X[2],$t2
+ paddd @X[3],$t3
+ movdqa $t0,0x00(%rsp)
+ mov $A,$a1
+ movdqa $t1,0x10(%rsp)
+ mov $B,$a3
+ movdqa $t2,0x20(%rsp)
+ xor $C,$a3 # magic
+ movdqa $t3,0x30(%rsp)
+ mov $E,$a0
+ jmp .Lssse3_00_47
+
+.align 16
+.Lssse3_00_47:
+ sub \$`-16*2*$SZ`,$Tbl # size optimization
+___
+sub Xupdate_256_SSSE3 () {
+ (
+ '&movdqa ($t0,@X[1]);',
+ '&movdqa ($t3,@X[3])',
+ '&palignr ($t0,@X[0],$SZ)', # X[1..4]
+ '&palignr ($t3,@X[2],$SZ);', # X[9..12]
+ '&movdqa ($t1,$t0)',
+ '&movdqa ($t2,$t0);',
+ '&psrld ($t0,$sigma0[2])',
+ '&paddd (@X[0],$t3);', # X[0..3] += X[9..12]
+ '&psrld ($t2,$sigma0[0])',
+ '&pshufd ($t3,@X[3],0b11111010)',# X[14..15]
+ '&pslld ($t1,8*$SZ-$sigma0[1]);'.
+ '&pxor ($t0,$t2)',
+ '&psrld ($t2,$sigma0[1]-$sigma0[0]);'.
+ '&pxor ($t0,$t1)',
+ '&pslld ($t1,$sigma0[1]-$sigma0[0]);'.
+ '&pxor ($t0,$t2);',
+ '&movdqa ($t2,$t3)',
+ '&pxor ($t0,$t1);', # sigma0(X[1..4])
+ '&psrld ($t3,$sigma1[2])',
+ '&paddd (@X[0],$t0);', # X[0..3] += sigma0(X[1..4])
+ '&psrlq ($t2,$sigma1[0])',
+ '&pxor ($t3,$t2);',
+ '&psrlq ($t2,$sigma1[1]-$sigma1[0])',
+ '&pxor ($t3,$t2)',
+ '&pshufb ($t3,$t4)', # sigma1(X[14..15])
+ '&paddd (@X[0],$t3)', # X[0..1] += sigma1(X[14..15])
+ '&pshufd ($t3,@X[0],0b01010000)',# X[16..17]
+ '&movdqa ($t2,$t3);',
+ '&psrld ($t3,$sigma1[2])',
+ '&psrlq ($t2,$sigma1[0])',
+ '&pxor ($t3,$t2);',
+ '&psrlq ($t2,$sigma1[1]-$sigma1[0])',
+ '&pxor ($t3,$t2);',
+ '&movdqa ($t2,16*2*$j."($Tbl)")',
+ '&pshufb ($t3,$t5)',
+ '&paddd (@X[0],$t3)' # X[2..3] += sigma1(X[16..17])
+ );
+}
+
+sub SSSE3_256_00_47 () {
+my $j = shift;
+my $body = shift;
+my @X = @_;
+my @insns = (&$body,&$body,&$body,&$body); # 104 instructions
+
+ if (0) {
+ foreach (Xupdate_256_SSSE3()) { # 36 instructions
+ eval;
+ eval(shift(@insns));
+ eval(shift(@insns));
+ eval(shift(@insns));
+ }
+ } else { # squeeze extra 4% on Westmere and 19% on Atom
+ eval(shift(@insns)); #@
+ &movdqa ($t0,@X[1]);
+ eval(shift(@insns));
+ eval(shift(@insns));
+ &movdqa ($t3,@X[3]);
+ eval(shift(@insns)); #@
+ eval(shift(@insns));
+ eval(shift(@insns));
+ eval(shift(@insns)); #@
+ eval(shift(@insns));
+ &palignr ($t0,@X[0],$SZ); # X[1..4]
+ eval(shift(@insns));
+ eval(shift(@insns));
+ &palignr ($t3,@X[2],$SZ); # X[9..12]
+ eval(shift(@insns));
+ eval(shift(@insns));
+ eval(shift(@insns));
+ eval(shift(@insns)); #@
+ &movdqa ($t1,$t0);
+ eval(shift(@insns));
+ eval(shift(@insns));
+ &movdqa ($t2,$t0);
+ eval(shift(@insns)); #@
+ eval(shift(@insns));
+ &psrld ($t0,$sigma0[2]);
+ eval(shift(@insns));
+ eval(shift(@insns));
+ eval(shift(@insns));
+ &paddd (@X[0],$t3); # X[0..3] += X[9..12]
+ eval(shift(@insns)); #@
+ eval(shift(@insns));
+ &psrld ($t2,$sigma0[0]);
+ eval(shift(@insns));
+ eval(shift(@insns));
+ &pshufd ($t3,@X[3],0b11111010); # X[4..15]
+ eval(shift(@insns));
+ eval(shift(@insns)); #@
+ &pslld ($t1,8*$SZ-$sigma0[1]);
+ eval(shift(@insns));
+ eval(shift(@insns));
+ &pxor ($t0,$t2);
+ eval(shift(@insns)); #@
+ eval(shift(@insns));
+ eval(shift(@insns));
+ eval(shift(@insns)); #@
+ &psrld ($t2,$sigma0[1]-$sigma0[0]);
+ eval(shift(@insns));
+ &pxor ($t0,$t1);
+ eval(shift(@insns));
+ eval(shift(@insns));
+ &pslld ($t1,$sigma0[1]-$sigma0[0]);
+ eval(shift(@insns));
+ eval(shift(@insns));
+ &pxor ($t0,$t2);
+ eval(shift(@insns));
+ eval(shift(@insns)); #@
+ &movdqa ($t2,$t3);
+ eval(shift(@insns));
+ eval(shift(@insns));
+ &pxor ($t0,$t1); # sigma0(X[1..4])
+ eval(shift(@insns)); #@
+ eval(shift(@insns));
+ eval(shift(@insns));
+ &psrld ($t3,$sigma1[2]);
+ eval(shift(@insns));
+ eval(shift(@insns));
+ &paddd (@X[0],$t0); # X[0..3] += sigma0(X[1..4])
+ eval(shift(@insns)); #@
+ eval(shift(@insns));
+ &psrlq ($t2,$sigma1[0]);
+ eval(shift(@insns));
+ eval(shift(@insns));
+ eval(shift(@insns));
+ &pxor ($t3,$t2);
+ eval(shift(@insns)); #@
+ eval(shift(@insns));
+ eval(shift(@insns));
+ eval(shift(@insns)); #@
+ &psrlq ($t2,$sigma1[1]-$sigma1[0]);
+ eval(shift(@insns));
+ eval(shift(@insns));
+ &pxor ($t3,$t2);
+ eval(shift(@insns)); #@
+ eval(shift(@insns));
+ eval(shift(@insns));
+ #&pshufb ($t3,$t4); # sigma1(X[14..15])
+ &pshufd ($t3,$t3,0b10000000);
+ eval(shift(@insns));
+ eval(shift(@insns));
+ eval(shift(@insns));
+ &psrldq ($t3,8);
+ eval(shift(@insns));
+ eval(shift(@insns)); #@
+ eval(shift(@insns));
+ eval(shift(@insns));
+ eval(shift(@insns)); #@
+ &paddd (@X[0],$t3); # X[0..1] += sigma1(X[14..15])
+ eval(shift(@insns));
+ eval(shift(@insns));
+ eval(shift(@insns));
+ &pshufd ($t3,@X[0],0b01010000); # X[16..17]
+ eval(shift(@insns));
+ eval(shift(@insns)); #@
+ eval(shift(@insns));
+ &movdqa ($t2,$t3);
+ eval(shift(@insns));
+ eval(shift(@insns));
+ &psrld ($t3,$sigma1[2]);
+ eval(shift(@insns));
+ eval(shift(@insns)); #@
+ &psrlq ($t2,$sigma1[0]);
+ eval(shift(@insns));
+ eval(shift(@insns));
+ &pxor ($t3,$t2);
+ eval(shift(@insns)); #@
+ eval(shift(@insns));
+ eval(shift(@insns));
+ eval(shift(@insns)); #@
+ eval(shift(@insns));
+ &psrlq ($t2,$sigma1[1]-$sigma1[0]);
+ eval(shift(@insns));
+ eval(shift(@insns));
+ eval(shift(@insns));
+ &pxor ($t3,$t2);
+ eval(shift(@insns));
+ eval(shift(@insns));
+ eval(shift(@insns)); #@
+ #&pshufb ($t3,$t5);
+ &pshufd ($t3,$t3,0b00001000);
+ eval(shift(@insns));
+ eval(shift(@insns));
+ &movdqa ($t2,16*2*$j."($Tbl)");
+ eval(shift(@insns)); #@
+ eval(shift(@insns));
+ &pslldq ($t3,8);
+ eval(shift(@insns));
+ eval(shift(@insns));
+ eval(shift(@insns));
+ &paddd (@X[0],$t3); # X[2..3] += sigma1(X[16..17])
+ eval(shift(@insns)); #@
+ eval(shift(@insns));
+ eval(shift(@insns));
+ }
+ &paddd ($t2,@X[0]);
+ foreach (@insns) { eval; } # remaining instructions
+ &movdqa (16*$j."(%rsp)",$t2);
+}
+
+ for ($i=0,$j=0; $j<4; $j++) {
+ &SSSE3_256_00_47($j,\&body_00_15,@X);
+ push(@X,shift(@X)); # rotate(@X)
+ }
+ &cmpb ($SZ-1+16*2*$SZ."($Tbl)",0);
+ &jne (".Lssse3_00_47");
+
+ for ($i=0; $i<16; ) {
+ foreach(body_00_15()) { eval; }
+ }
+$code.=<<___;
+ mov $_ctx,$ctx
+ mov $a1,$A
+
+ add $SZ*0($ctx),$A
+ lea 16*$SZ($inp),$inp
+ add $SZ*1($ctx),$B
+ add $SZ*2($ctx),$C
+ add $SZ*3($ctx),$D
+ add $SZ*4($ctx),$E
+ add $SZ*5($ctx),$F
+ add $SZ*6($ctx),$G
+ add $SZ*7($ctx),$H
+
+ cmp $_end,$inp
+
+ mov $A,$SZ*0($ctx)
+ mov $B,$SZ*1($ctx)
+ mov $C,$SZ*2($ctx)
+ mov $D,$SZ*3($ctx)
+ mov $E,$SZ*4($ctx)
+ mov $F,$SZ*5($ctx)
+ mov $G,$SZ*6($ctx)
+ mov $H,$SZ*7($ctx)
+ jb .Lloop_ssse3
+
+ mov $_rsp,%rsi
+___
+$code.=<<___ if ($win64);
+ movaps 16*$SZ+32(%rsp),%xmm6
+ movaps 16*$SZ+48(%rsp),%xmm7
+ movaps 16*$SZ+64(%rsp),%xmm8
+ movaps 16*$SZ+80(%rsp),%xmm9
+___
+$code.=<<___;
+ mov (%rsi),%r15
+ mov 8(%rsi),%r14
+ mov 16(%rsi),%r13
+ mov 24(%rsi),%r12
+ mov 32(%rsi),%rbp
+ mov 40(%rsi),%rbx
+ lea 48(%rsi),%rsp
+.Lepilogue_ssse3:
+ ret
+.size ${func}_ssse3,.-${func}_ssse3
+___
+}
+
+if ($avx) {{
+######################################################################
+# XOP code path
+#
+if ($SZ==8) { # SHA512 only
+$code.=<<___;
+.type ${func}_xop,\@function,3
+.align 64
+${func}_xop:
+.Lxop_shortcut:
+ push %rbx
+ push %rbp
+ push %r12
+ push %r13
+ push %r14
+ push %r15
+ mov %rsp,%r11 # copy %rsp
+ shl \$4,%rdx # num*16
+ sub \$`$framesz+$win64*16*($SZ==4?4:6)`,%rsp
+ lea ($inp,%rdx,$SZ),%rdx # inp+num*16*$SZ
+ and \$-64,%rsp # align stack frame
+ mov $ctx,$_ctx # save ctx, 1st arg
+ mov $inp,$_inp # save inp, 2nd arh
+ mov %rdx,$_end # save end pointer, "3rd" arg
+ mov %r11,$_rsp # save copy of %rsp
+___
+$code.=<<___ if ($win64);
+ movaps %xmm6,16*$SZ+32(%rsp)
+ movaps %xmm7,16*$SZ+48(%rsp)
+ movaps %xmm8,16*$SZ+64(%rsp)
+ movaps %xmm9,16*$SZ+80(%rsp)
+___
+$code.=<<___ if ($win64 && $SZ>4);
+ movaps %xmm10,16*$SZ+96(%rsp)
+ movaps %xmm11,16*$SZ+112(%rsp)
+___
+$code.=<<___;
+.Lprologue_xop:
+
+ vzeroupper
+ mov $SZ*0($ctx),$A
+ mov $SZ*1($ctx),$B
+ mov $SZ*2($ctx),$C
+ mov $SZ*3($ctx),$D
+ mov $SZ*4($ctx),$E
+ mov $SZ*5($ctx),$F
+ mov $SZ*6($ctx),$G
+ mov $SZ*7($ctx),$H
+ jmp .Lloop_xop
+___
+ if ($SZ==4) { # SHA256
+ my @X = map("%xmm$_",(0..3));
+ my ($t0,$t1,$t2,$t3) = map("%xmm$_",(4..7));
+
+$code.=<<___;
+.align 16
+.Lloop_xop:
+ vmovdqa $TABLE+`$SZ*2*$rounds`(%rip),$t3
+ vmovdqu 0x00($inp),@X[0]
+ vmovdqu 0x10($inp),@X[1]
+ vmovdqu 0x20($inp),@X[2]
+ vmovdqu 0x30($inp),@X[3]
+ vpshufb $t3,@X[0],@X[0]
+ lea $TABLE(%rip),$Tbl
+ vpshufb $t3,@X[1],@X[1]
+ vpshufb $t3,@X[2],@X[2]
+ vpaddd 0x00($Tbl),@X[0],$t0
+ vpshufb $t3,@X[3],@X[3]
+ vpaddd 0x20($Tbl),@X[1],$t1
+ vpaddd 0x40($Tbl),@X[2],$t2
+ vpaddd 0x60($Tbl),@X[3],$t3
+ vmovdqa $t0,0x00(%rsp)
+ mov $A,$a1
+ vmovdqa $t1,0x10(%rsp)
+ mov $B,$a3
+ vmovdqa $t2,0x20(%rsp)
+ xor $C,$a3 # magic
+ vmovdqa $t3,0x30(%rsp)
+ mov $E,$a0
+ jmp .Lxop_00_47
+
+.align 16
+.Lxop_00_47:
+ sub \$`-16*2*$SZ`,$Tbl # size optimization
+___
+sub XOP_256_00_47 () {
+my $j = shift;
+my $body = shift;
+my @X = @_;
+my @insns = (&$body,&$body,&$body,&$body); # 104 instructions
+
+ &vpalignr ($t0,@X[1],@X[0],$SZ); # X[1..4]
+ eval(shift(@insns));
+ eval(shift(@insns));
+ &vpalignr ($t3,@X[3],@X[2],$SZ); # X[9..12]
+ eval(shift(@insns));
+ eval(shift(@insns));
+ &vprotd ($t1,$t0,8*$SZ-$sigma0[1]);
+ eval(shift(@insns));
+ eval(shift(@insns));
+ &vpsrld ($t0,$t0,$sigma0[2]);
+ eval(shift(@insns));
+ eval(shift(@insns));
+ &vpaddd (@X[0],@X[0],$t3); # X[0..3] += X[9..12]
+ eval(shift(@insns));
+ eval(shift(@insns));
+ eval(shift(@insns));
+ eval(shift(@insns));
+ &vprotd ($t2,$t1,$sigma0[1]-$sigma0[0]);
+ eval(shift(@insns));
+ eval(shift(@insns));
+ &vpxor ($t0,$t0,$t1);
+ eval(shift(@insns));
+ eval(shift(@insns));
+ eval(shift(@insns));
+ eval(shift(@insns));
+ &vprotd ($t3,@X[3],8*$SZ-$sigma1[1]);
+ eval(shift(@insns));
+ eval(shift(@insns));
+ &vpxor ($t0,$t0,$t2); # sigma0(X[1..4])
+ eval(shift(@insns));
+ eval(shift(@insns));
+ &vpsrld ($t2,@X[3],$sigma1[2]);
+ eval(shift(@insns));
+ eval(shift(@insns));
+ &vpaddd (@X[0],@X[0],$t0); # X[0..3] += sigma0(X[1..4])
+ eval(shift(@insns));
+ eval(shift(@insns));
+ &vprotd ($t1,$t3,$sigma1[1]-$sigma1[0]);
+ eval(shift(@insns));
+ eval(shift(@insns));
+ &vpxor ($t3,$t3,$t2);
+ eval(shift(@insns));
+ eval(shift(@insns));
+ eval(shift(@insns));
+ eval(shift(@insns));
+ &vpxor ($t3,$t3,$t1); # sigma1(X[14..15])
+ eval(shift(@insns));
+ eval(shift(@insns));
+ eval(shift(@insns));
+ eval(shift(@insns));
+ &vpsrldq ($t3,$t3,8);
+ eval(shift(@insns));
+ eval(shift(@insns));
+ eval(shift(@insns));
+ eval(shift(@insns));
+ &vpaddd (@X[0],@X[0],$t3); # X[0..1] += sigma1(X[14..15])
+ eval(shift(@insns));
+ eval(shift(@insns));
+ eval(shift(@insns));
+ eval(shift(@insns));
+ &vprotd ($t3,@X[0],8*$SZ-$sigma1[1]);
+ eval(shift(@insns));
+ eval(shift(@insns));
+ &vpsrld ($t2,@X[0],$sigma1[2]);
+ eval(shift(@insns));
+ eval(shift(@insns));
+ &vprotd ($t1,$t3,$sigma1[1]-$sigma1[0]);
+ eval(shift(@insns));
+ eval(shift(@insns));
+ &vpxor ($t3,$t3,$t2);
+ eval(shift(@insns));
+ eval(shift(@insns));
+ eval(shift(@insns));
+ eval(shift(@insns));
+ &vpxor ($t3,$t3,$t1); # sigma1(X[16..17])
+ eval(shift(@insns));
+ eval(shift(@insns));
+ eval(shift(@insns));
+ eval(shift(@insns));
+ &vpslldq ($t3,$t3,8); # 22 instructions
+ eval(shift(@insns));
+ eval(shift(@insns));
+ eval(shift(@insns));
+ eval(shift(@insns));
+ &vpaddd (@X[0],@X[0],$t3); # X[2..3] += sigma1(X[16..17])
+ eval(shift(@insns));
+ eval(shift(@insns));
+ eval(shift(@insns));
+ eval(shift(@insns));
+ &vpaddd ($t2,@X[0],16*2*$j."($Tbl)");
+ foreach (@insns) { eval; } # remaining instructions
+ &vmovdqa (16*$j."(%rsp)",$t2);
+}
+
+ for ($i=0,$j=0; $j<4; $j++) {
+ &XOP_256_00_47($j,\&body_00_15,@X);
+ push(@X,shift(@X)); # rotate(@X)
+ }
+ &cmpb ($SZ-1+16*2*$SZ."($Tbl)",0);
+ &jne (".Lxop_00_47");
+
+ for ($i=0; $i<16; ) {
+ foreach(body_00_15()) { eval; }
+ }
+
+ } else { # SHA512
+ my @X = map("%xmm$_",(0..7));
+ my ($t0,$t1,$t2,$t3) = map("%xmm$_",(8..11));
+
+$code.=<<___;
+.align 16
+.Lloop_xop:
+ vmovdqa $TABLE+`$SZ*2*$rounds`(%rip),$t3
+ vmovdqu 0x00($inp),@X[0]
+ lea $TABLE+0x80(%rip),$Tbl # size optimization
+ vmovdqu 0x10($inp),@X[1]
+ vmovdqu 0x20($inp),@X[2]
+ vpshufb $t3,@X[0],@X[0]
+ vmovdqu 0x30($inp),@X[3]
+ vpshufb $t3,@X[1],@X[1]
+ vmovdqu 0x40($inp),@X[4]
+ vpshufb $t3,@X[2],@X[2]
+ vmovdqu 0x50($inp),@X[5]
+ vpshufb $t3,@X[3],@X[3]
+ vmovdqu 0x60($inp),@X[6]
+ vpshufb $t3,@X[4],@X[4]
+ vmovdqu 0x70($inp),@X[7]
+ vpshufb $t3,@X[5],@X[5]
+ vpaddq -0x80($Tbl),@X[0],$t0
+ vpshufb $t3,@X[6],@X[6]
+ vpaddq -0x60($Tbl),@X[1],$t1
+ vpshufb $t3,@X[7],@X[7]
+ vpaddq -0x40($Tbl),@X[2],$t2
+ vpaddq -0x20($Tbl),@X[3],$t3
+ vmovdqa $t0,0x00(%rsp)
+ vpaddq 0x00($Tbl),@X[4],$t0
+ vmovdqa $t1,0x10(%rsp)
+ vpaddq 0x20($Tbl),@X[5],$t1
+ vmovdqa $t2,0x20(%rsp)
+ vpaddq 0x40($Tbl),@X[6],$t2
+ vmovdqa $t3,0x30(%rsp)
+ vpaddq 0x60($Tbl),@X[7],$t3
+ vmovdqa $t0,0x40(%rsp)
+ mov $A,$a1
+ vmovdqa $t1,0x50(%rsp)
+ mov $B,$a3
+ vmovdqa $t2,0x60(%rsp)
+ xor $C,$a3 # magic
+ vmovdqa $t3,0x70(%rsp)
+ mov $E,$a0
+ jmp .Lxop_00_47
+
+.align 16
+.Lxop_00_47:
+ add \$`16*2*$SZ`,$Tbl
+___
+sub XOP_512_00_47 () {
+my $j = shift;
+my $body = shift;
+my @X = @_;
+my @insns = (&$body,&$body); # 52 instructions
+
+ &vpalignr ($t0,@X[1],@X[0],$SZ); # X[1..2]
+ eval(shift(@insns));
+ eval(shift(@insns));
+ &vpalignr ($t3,@X[5],@X[4],$SZ); # X[9..10]
+ eval(shift(@insns));
+ eval(shift(@insns));
+ &vprotq ($t1,$t0,8*$SZ-$sigma0[1]);
+ eval(shift(@insns));
+ eval(shift(@insns));
+ &vpsrlq ($t0,$t0,$sigma0[2]);
+ eval(shift(@insns));
+ eval(shift(@insns));
+ &vpaddq (@X[0],@X[0],$t3); # X[0..1] += X[9..10]
+ eval(shift(@insns));
+ eval(shift(@insns));
+ eval(shift(@insns));
+ eval(shift(@insns));
+ &vprotq ($t2,$t1,$sigma0[1]-$sigma0[0]);
+ eval(shift(@insns));
+ eval(shift(@insns));
+ &vpxor ($t0,$t0,$t1);
+ eval(shift(@insns));
+ eval(shift(@insns));
+ eval(shift(@insns));
+ eval(shift(@insns));
+ &vprotq ($t3,@X[7],8*$SZ-$sigma1[1]);
+ eval(shift(@insns));
+ eval(shift(@insns));
+ &vpxor ($t0,$t0,$t2); # sigma0(X[1..2])
+ eval(shift(@insns));
+ eval(shift(@insns));
+ &vpsrlq ($t2,@X[7],$sigma1[2]);
+ eval(shift(@insns));
+ eval(shift(@insns));
+ &vpaddq (@X[0],@X[0],$t0); # X[0..1] += sigma0(X[1..2])
+ eval(shift(@insns));
+ eval(shift(@insns));
+ &vprotq ($t1,$t3,$sigma1[1]-$sigma1[0]);
+ eval(shift(@insns));
+ eval(shift(@insns));
+ &vpxor ($t3,$t3,$t2);
+ eval(shift(@insns));
+ eval(shift(@insns));
+ eval(shift(@insns));
+ eval(shift(@insns));
+ &vpxor ($t3,$t3,$t1); # sigma1(X[14..15])
+ eval(shift(@insns));
+ eval(shift(@insns));
+ eval(shift(@insns));
+ eval(shift(@insns));
+ &vpaddq (@X[0],@X[0],$t3); # X[0..1] += sigma1(X[14..15])
+ eval(shift(@insns));
+ eval(shift(@insns));
+ eval(shift(@insns));
+ eval(shift(@insns));
+ &vpaddq ($t2,@X[0],16*2*$j-0x80."($Tbl)");
+ foreach (@insns) { eval; } # remaining instructions
+ &vmovdqa (16*$j."(%rsp)",$t2);
+}
+
+ for ($i=0,$j=0; $j<8; $j++) {
+ &XOP_512_00_47($j,\&body_00_15,@X);
+ push(@X,shift(@X)); # rotate(@X)
+ }
+ &cmpb ($SZ-1+16*2*$SZ-0x80."($Tbl)",0);
+ &jne (".Lxop_00_47");
+
+ for ($i=0; $i<16; ) {
+ foreach(body_00_15()) { eval; }
+ }
+}
+$code.=<<___;
+ mov $_ctx,$ctx
+ mov $a1,$A
+
+ add $SZ*0($ctx),$A
+ lea 16*$SZ($inp),$inp
+ add $SZ*1($ctx),$B
+ add $SZ*2($ctx),$C
+ add $SZ*3($ctx),$D
+ add $SZ*4($ctx),$E
+ add $SZ*5($ctx),$F
+ add $SZ*6($ctx),$G
+ add $SZ*7($ctx),$H
+
+ cmp $_end,$inp
+
+ mov $A,$SZ*0($ctx)
+ mov $B,$SZ*1($ctx)
+ mov $C,$SZ*2($ctx)
+ mov $D,$SZ*3($ctx)
+ mov $E,$SZ*4($ctx)
+ mov $F,$SZ*5($ctx)
+ mov $G,$SZ*6($ctx)
+ mov $H,$SZ*7($ctx)
+ jb .Lloop_xop
+
+ mov $_rsp,%rsi
+ vzeroupper
+___
+$code.=<<___ if ($win64);
+ movaps 16*$SZ+32(%rsp),%xmm6
+ movaps 16*$SZ+48(%rsp),%xmm7
+ movaps 16*$SZ+64(%rsp),%xmm8
+ movaps 16*$SZ+80(%rsp),%xmm9
+___
+$code.=<<___ if ($win64 && $SZ>4);
+ movaps 16*$SZ+96(%rsp),%xmm10
+ movaps 16*$SZ+112(%rsp),%xmm11
+___
+$code.=<<___;
+ mov (%rsi),%r15
+ mov 8(%rsi),%r14
+ mov 16(%rsi),%r13
+ mov 24(%rsi),%r12
+ mov 32(%rsi),%rbp
+ mov 40(%rsi),%rbx
+ lea 48(%rsi),%rsp
+.Lepilogue_xop:
+ ret
+.size ${func}_xop,.-${func}_xop
+___
+}
+######################################################################
+# AVX+shrd code path
+#
+local *ror = sub { &shrd(@_[0],@_) };
+
+$code.=<<___;
+.type ${func}_avx,\@function,3
+.align 64
+${func}_avx:
+.Lavx_shortcut:
+ push %rbx
+ push %rbp
+ push %r12
+ push %r13
+ push %r14
+ push %r15
+ mov %rsp,%r11 # copy %rsp
+ shl \$4,%rdx # num*16
+ sub \$`$framesz+$win64*16*($SZ==4?4:6)`,%rsp
+ lea ($inp,%rdx,$SZ),%rdx # inp+num*16*$SZ
+ and \$-64,%rsp # align stack frame
+ mov $ctx,$_ctx # save ctx, 1st arg
+ mov $inp,$_inp # save inp, 2nd arh
+ mov %rdx,$_end # save end pointer, "3rd" arg
+ mov %r11,$_rsp # save copy of %rsp
+___
+$code.=<<___ if ($win64);
+ movaps %xmm6,16*$SZ+32(%rsp)
+ movaps %xmm7,16*$SZ+48(%rsp)
+ movaps %xmm8,16*$SZ+64(%rsp)
+ movaps %xmm9,16*$SZ+80(%rsp)
+___
+$code.=<<___ if ($win64 && $SZ>4);
+ movaps %xmm10,16*$SZ+96(%rsp)
+ movaps %xmm11,16*$SZ+112(%rsp)
+___
+$code.=<<___;
+.Lprologue_avx:
+
+ vzeroupper
+ mov $SZ*0($ctx),$A
+ mov $SZ*1($ctx),$B
+ mov $SZ*2($ctx),$C
+ mov $SZ*3($ctx),$D
+ mov $SZ*4($ctx),$E
+ mov $SZ*5($ctx),$F
+ mov $SZ*6($ctx),$G
+ mov $SZ*7($ctx),$H
+___
+ if ($SZ==4) { # SHA256
+ my @X = map("%xmm$_",(0..3));
+ my ($t0,$t1,$t2,$t3, $t4,$t5) = map("%xmm$_",(4..9));
+
+$code.=<<___;
+ vmovdqa $TABLE+`$SZ*2*$rounds`+32(%rip),$t4
+ vmovdqa $TABLE+`$SZ*2*$rounds`+64(%rip),$t5
+ jmp .Lloop_avx
+.align 16
+.Lloop_avx:
+ vmovdqa $TABLE+`$SZ*2*$rounds`(%rip),$t3
+ vmovdqu 0x00($inp),@X[0]
+ vmovdqu 0x10($inp),@X[1]
+ vmovdqu 0x20($inp),@X[2]
+ vmovdqu 0x30($inp),@X[3]
+ vpshufb $t3,@X[0],@X[0]
+ lea $TABLE(%rip),$Tbl
+ vpshufb $t3,@X[1],@X[1]
+ vpshufb $t3,@X[2],@X[2]
+ vpaddd 0x00($Tbl),@X[0],$t0
+ vpshufb $t3,@X[3],@X[3]
+ vpaddd 0x20($Tbl),@X[1],$t1
+ vpaddd 0x40($Tbl),@X[2],$t2
+ vpaddd 0x60($Tbl),@X[3],$t3
+ vmovdqa $t0,0x00(%rsp)
+ mov $A,$a1
+ vmovdqa $t1,0x10(%rsp)
+ mov $B,$a3
+ vmovdqa $t2,0x20(%rsp)
+ xor $C,$a3 # magic
+ vmovdqa $t3,0x30(%rsp)
+ mov $E,$a0
+ jmp .Lavx_00_47
+
+.align 16
+.Lavx_00_47:
+ sub \$`-16*2*$SZ`,$Tbl # size optimization
+___
+sub Xupdate_256_AVX () {
+ (
+ '&vpalignr ($t0,@X[1],@X[0],$SZ)', # X[1..4]
+ '&vpalignr ($t3,@X[3],@X[2],$SZ)', # X[9..12]
+ '&vpsrld ($t2,$t0,$sigma0[0]);',
+ '&vpaddd (@X[0],@X[0],$t3)', # X[0..3] += X[9..12]
+ '&vpsrld ($t3,$t0,$sigma0[2])',
+ '&vpslld ($t1,$t0,8*$SZ-$sigma0[1]);',
+ '&vpxor ($t0,$t3,$t2)',
+ '&vpshufd ($t3,@X[3],0b11111010)',# X[14..15]
+ '&vpsrld ($t2,$t2,$sigma0[1]-$sigma0[0]);',
+ '&vpxor ($t0,$t0,$t1)',
+ '&vpslld ($t1,$t1,$sigma0[1]-$sigma0[0]);',
+ '&vpxor ($t0,$t0,$t2)',
+ '&vpsrld ($t2,$t3,$sigma1[2]);',
+ '&vpxor ($t0,$t0,$t1)', # sigma0(X[1..4])
+ '&vpsrlq ($t3,$t3,$sigma1[0]);',
+ '&vpaddd (@X[0],@X[0],$t0)', # X[0..3] += sigma0(X[1..4])
+ '&vpxor ($t2,$t2,$t3);',
+ '&vpsrlq ($t3,$t3,$sigma1[1]-$sigma1[0])',
+ '&vpxor ($t2,$t2,$t3)',
+ '&vpshufb ($t2,$t2,$t4)', # sigma1(X[14..15])
+ '&vpaddd (@X[0],@X[0],$t2)', # X[0..1] += sigma1(X[14..15])
+ '&vpshufd ($t3,@X[0],0b01010000)',# X[16..17]
+ '&vpsrld ($t2,$t3,$sigma1[2])',
+ '&vpsrlq ($t3,$t3,$sigma1[0])',
+ '&vpxor ($t2,$t2,$t3);',
+ '&vpsrlq ($t3,$t3,$sigma1[1]-$sigma1[0])',
+ '&vpxor ($t2,$t2,$t3)',
+ '&vpshufb ($t2,$t2,$t5)',
+ '&vpaddd (@X[0],@X[0],$t2)' # X[2..3] += sigma1(X[16..17])
+ );
+}
+
+sub AVX_256_00_47 () {
+my $j = shift;
+my $body = shift;
+my @X = @_;
+my @insns = (&$body,&$body,&$body,&$body); # 104 instructions
+
+ foreach (Xupdate_256_AVX()) { # 29 instructions
+ eval;
+ eval(shift(@insns));
+ eval(shift(@insns));
+ eval(shift(@insns));
+ }
+ &vpaddd ($t2,@X[0],16*2*$j."($Tbl)");
+ foreach (@insns) { eval; } # remaining instructions
+ &vmovdqa (16*$j."(%rsp)",$t2);
+}
+
+ for ($i=0,$j=0; $j<4; $j++) {
+ &AVX_256_00_47($j,\&body_00_15,@X);
+ push(@X,shift(@X)); # rotate(@X)
+ }
+ &cmpb ($SZ-1+16*2*$SZ."($Tbl)",0);
+ &jne (".Lavx_00_47");
+
+ for ($i=0; $i<16; ) {
+ foreach(body_00_15()) { eval; }
+ }
+
+ } else { # SHA512
+ my @X = map("%xmm$_",(0..7));
+ my ($t0,$t1,$t2,$t3) = map("%xmm$_",(8..11));
+
+$code.=<<___;
+ jmp .Lloop_avx
+.align 16
+.Lloop_avx:
+ vmovdqa $TABLE+`$SZ*2*$rounds`(%rip),$t3
+ vmovdqu 0x00($inp),@X[0]
+ lea $TABLE+0x80(%rip),$Tbl # size optimization
+ vmovdqu 0x10($inp),@X[1]
+ vmovdqu 0x20($inp),@X[2]
+ vpshufb $t3,@X[0],@X[0]
+ vmovdqu 0x30($inp),@X[3]
+ vpshufb $t3,@X[1],@X[1]
+ vmovdqu 0x40($inp),@X[4]
+ vpshufb $t3,@X[2],@X[2]
+ vmovdqu 0x50($inp),@X[5]
+ vpshufb $t3,@X[3],@X[3]
+ vmovdqu 0x60($inp),@X[6]
+ vpshufb $t3,@X[4],@X[4]
+ vmovdqu 0x70($inp),@X[7]
+ vpshufb $t3,@X[5],@X[5]
+ vpaddq -0x80($Tbl),@X[0],$t0
+ vpshufb $t3,@X[6],@X[6]
+ vpaddq -0x60($Tbl),@X[1],$t1
+ vpshufb $t3,@X[7],@X[7]
+ vpaddq -0x40($Tbl),@X[2],$t2
+ vpaddq -0x20($Tbl),@X[3],$t3
+ vmovdqa $t0,0x00(%rsp)
+ vpaddq 0x00($Tbl),@X[4],$t0
+ vmovdqa $t1,0x10(%rsp)
+ vpaddq 0x20($Tbl),@X[5],$t1
+ vmovdqa $t2,0x20(%rsp)
+ vpaddq 0x40($Tbl),@X[6],$t2
+ vmovdqa $t3,0x30(%rsp)
+ vpaddq 0x60($Tbl),@X[7],$t3
+ vmovdqa $t0,0x40(%rsp)
+ mov $A,$a1
+ vmovdqa $t1,0x50(%rsp)
+ mov $B,$a3
+ vmovdqa $t2,0x60(%rsp)
+ xor $C,$a3 # magic
+ vmovdqa $t3,0x70(%rsp)
+ mov $E,$a0
+ jmp .Lavx_00_47
+
+.align 16
+.Lavx_00_47:
+ add \$`16*2*$SZ`,$Tbl
+___
+sub Xupdate_512_AVX () {
+ (
+ '&vpalignr ($t0,@X[1],@X[0],$SZ)', # X[1..2]
+ '&vpalignr ($t3,@X[5],@X[4],$SZ)', # X[9..10]
+ '&vpsrlq ($t2,$t0,$sigma0[0])',
+ '&vpaddq (@X[0],@X[0],$t3);', # X[0..1] += X[9..10]
+ '&vpsrlq ($t3,$t0,$sigma0[2])',
+ '&vpsllq ($t1,$t0,8*$SZ-$sigma0[1]);',
+ '&vpxor ($t0,$t3,$t2)',
+ '&vpsrlq ($t2,$t2,$sigma0[1]-$sigma0[0]);',
+ '&vpxor ($t0,$t0,$t1)',
+ '&vpsllq ($t1,$t1,$sigma0[1]-$sigma0[0]);',
+ '&vpxor ($t0,$t0,$t2)',
+ '&vpsrlq ($t3,@X[7],$sigma1[2]);',
+ '&vpxor ($t0,$t0,$t1)', # sigma0(X[1..2])
+ '&vpsllq ($t2,@X[7],8*$SZ-$sigma1[1]);',
+ '&vpaddq (@X[0],@X[0],$t0)', # X[0..1] += sigma0(X[1..2])
+ '&vpsrlq ($t1,@X[7],$sigma1[0]);',
+ '&vpxor ($t3,$t3,$t2)',
+ '&vpsllq ($t2,$t2,$sigma1[1]-$sigma1[0]);',
+ '&vpxor ($t3,$t3,$t1)',
+ '&vpsrlq ($t1,$t1,$sigma1[1]-$sigma1[0]);',
+ '&vpxor ($t3,$t3,$t2)',
+ '&vpxor ($t3,$t3,$t1)', # sigma1(X[14..15])
+ '&vpaddq (@X[0],@X[0],$t3)', # X[0..1] += sigma1(X[14..15])
+ );
+}
+
+sub AVX_512_00_47 () {
+my $j = shift;
+my $body = shift;
+my @X = @_;
+my @insns = (&$body,&$body); # 52 instructions
+
+ foreach (Xupdate_512_AVX()) { # 23 instructions
+ eval;
+ eval(shift(@insns));
+ eval(shift(@insns));
+ }
+ &vpaddq ($t2,@X[0],16*2*$j-0x80."($Tbl)");
+ foreach (@insns) { eval; } # remaining instructions
+ &vmovdqa (16*$j."(%rsp)",$t2);
+}
+
+ for ($i=0,$j=0; $j<8; $j++) {
+ &AVX_512_00_47($j,\&body_00_15,@X);
+ push(@X,shift(@X)); # rotate(@X)
+ }
+ &cmpb ($SZ-1+16*2*$SZ-0x80."($Tbl)",0);
+ &jne (".Lavx_00_47");
+
+ for ($i=0; $i<16; ) {
+ foreach(body_00_15()) { eval; }
+ }
+}
+$code.=<<___;
+ mov $_ctx,$ctx
+ mov $a1,$A
+
+ add $SZ*0($ctx),$A
+ lea 16*$SZ($inp),$inp
+ add $SZ*1($ctx),$B
+ add $SZ*2($ctx),$C
+ add $SZ*3($ctx),$D
+ add $SZ*4($ctx),$E
+ add $SZ*5($ctx),$F
+ add $SZ*6($ctx),$G
+ add $SZ*7($ctx),$H
+
+ cmp $_end,$inp
+
+ mov $A,$SZ*0($ctx)
+ mov $B,$SZ*1($ctx)
+ mov $C,$SZ*2($ctx)
+ mov $D,$SZ*3($ctx)
+ mov $E,$SZ*4($ctx)
+ mov $F,$SZ*5($ctx)
+ mov $G,$SZ*6($ctx)
+ mov $H,$SZ*7($ctx)
+ jb .Lloop_avx
+
+ mov $_rsp,%rsi
+ vzeroupper
+___
+$code.=<<___ if ($win64);
+ movaps 16*$SZ+32(%rsp),%xmm6
+ movaps 16*$SZ+48(%rsp),%xmm7
+ movaps 16*$SZ+64(%rsp),%xmm8
+ movaps 16*$SZ+80(%rsp),%xmm9
+___
+$code.=<<___ if ($win64 && $SZ>4);
+ movaps 16*$SZ+96(%rsp),%xmm10
+ movaps 16*$SZ+112(%rsp),%xmm11
+___
+$code.=<<___;
+ mov (%rsi),%r15
+ mov 8(%rsi),%r14
+ mov 16(%rsi),%r13
+ mov 24(%rsi),%r12
+ mov 32(%rsi),%rbp
+ mov 40(%rsi),%rbx
+ lea 48(%rsi),%rsp
+.Lepilogue_avx:
+ ret
+.size ${func}_avx,.-${func}_avx
+___
+
+if ($avx>1) {{
+######################################################################
+# AVX2+BMI code path
+#
+my $a5=$SZ==4?"%esi":"%rsi"; # zap $inp
+my $PUSH8=8*2*$SZ;
+use integer;
+
+sub bodyx_00_15 () {
+ # at start $a1 should be zero, $a3 - $b^$c and $a4 copy of $f
+ (
+ '($a,$b,$c,$d,$e,$f,$g,$h)=@ROT;'.
+
+ '&add ($h,(32*($i/(16/$SZ))+$SZ*($i%(16/$SZ)))%$PUSH8.$base)', # h+=X[i]+K[i]
+ '&and ($a4,$e)', # f&e
+ '&rorx ($a0,$e,$Sigma1[2])',
+ '&rorx ($a2,$e,$Sigma1[1])',
+
+ '&lea ($a,"($a,$a1)")', # h+=Sigma0(a) from the past
+ '&lea ($h,"($h,$a4)")',
+ '&andn ($a4,$e,$g)', # ~e&g
+ '&xor ($a0,$a2)',
+
+ '&rorx ($a1,$e,$Sigma1[0])',
+ '&lea ($h,"($h,$a4)")', # h+=Ch(e,f,g)=(e&f)+(~e&g)
+ '&xor ($a0,$a1)', # Sigma1(e)
+ '&mov ($a2,$a)',
+
+ '&rorx ($a4,$a,$Sigma0[2])',
+ '&lea ($h,"($h,$a0)")', # h+=Sigma1(e)
+ '&xor ($a2,$b)', # a^b, b^c in next round
+ '&rorx ($a1,$a,$Sigma0[1])',
+
+ '&rorx ($a0,$a,$Sigma0[0])',
+ '&lea ($d,"($d,$h)")', # d+=h
+ '&and ($a3,$a2)', # (b^c)&(a^b)
+ '&xor ($a1,$a4)',
+
+ '&xor ($a3,$b)', # Maj(a,b,c)=Ch(a^b,c,b)
+ '&xor ($a1,$a0)', # Sigma0(a)
+ '&lea ($h,"($h,$a3)");'. # h+=Maj(a,b,c)
+ '&mov ($a4,$e)', # copy of f in future
+
+ '($a2,$a3) = ($a3,$a2); unshift(@ROT,pop(@ROT)); $i++;'
+ );
+ # and at the finish one has to $a+=$a1
+}
+
+$code.=<<___;
+.type ${func}_avx2,\@function,3
+.align 64
+${func}_avx2:
+.Lavx2_shortcut:
+ push %rbx
+ push %rbp
+ push %r12
+ push %r13
+ push %r14
+ push %r15
+ mov %rsp,%r11 # copy %rsp
+ sub \$`2*$SZ*$rounds+4*8+$win64*16*($SZ==4?4:6)`,%rsp
+ shl \$4,%rdx # num*16
+ and \$-256*$SZ,%rsp # align stack frame
+ lea ($inp,%rdx,$SZ),%rdx # inp+num*16*$SZ
+ add \$`2*$SZ*($rounds-8)`,%rsp
+ mov $ctx,$_ctx # save ctx, 1st arg
+ mov $inp,$_inp # save inp, 2nd arh
+ mov %rdx,$_end # save end pointer, "3rd" arg
+ mov %r11,$_rsp # save copy of %rsp
+___
+$code.=<<___ if ($win64);
+ movaps %xmm6,16*$SZ+32(%rsp)
+ movaps %xmm7,16*$SZ+48(%rsp)
+ movaps %xmm8,16*$SZ+64(%rsp)
+ movaps %xmm9,16*$SZ+80(%rsp)
+___
+$code.=<<___ if ($win64 && $SZ>4);
+ movaps %xmm10,16*$SZ+96(%rsp)
+ movaps %xmm11,16*$SZ+112(%rsp)
+___
+$code.=<<___;
+.Lprologue_avx2:
+
+ vzeroupper
+ sub \$-16*$SZ,$inp # inp++, size optimization
+ mov $SZ*0($ctx),$A
+ mov $inp,%r12 # borrow $T1
+ mov $SZ*1($ctx),$B
+ cmp %rdx,$inp # $_end
+ mov $SZ*2($ctx),$C
+ cmove %rsp,%r12 # next block or random data
+ mov $SZ*3($ctx),$D
+ mov $SZ*4($ctx),$E
+ mov $SZ*5($ctx),$F
+ mov $SZ*6($ctx),$G
+ mov $SZ*7($ctx),$H
+___
+ if ($SZ==4) { # SHA256
+ my @X = map("%ymm$_",(0..3));
+ my ($t0,$t1,$t2,$t3, $t4,$t5) = map("%ymm$_",(4..9));
+
+$code.=<<___;
+ vmovdqa $TABLE+`$SZ*2*$rounds`+32(%rip),$t4
+ vmovdqa $TABLE+`$SZ*2*$rounds`+64(%rip),$t5
+ jmp .Loop_avx2
+.align 16
+.Loop_avx2:
+ vmovdqa $TABLE+`$SZ*2*$rounds`(%rip),$t3
+ vmovdqu -16*$SZ+0($inp),%xmm0
+ vmovdqu -16*$SZ+16($inp),%xmm1
+ vmovdqu -16*$SZ+32($inp),%xmm2
+ vmovdqu -16*$SZ+48($inp),%xmm3
+ #mov $inp,$_inp # offload $inp
+ vinserti128 \$1,(%r12),@X[0],@X[0]
+ vinserti128 \$1,16(%r12),@X[1],@X[1]
+ vpshufb $t3,@X[0],@X[0]
+ vinserti128 \$1,32(%r12),@X[2],@X[2]
+ vpshufb $t3,@X[1],@X[1]
+ vinserti128 \$1,48(%r12),@X[3],@X[3]
+
+ lea $TABLE(%rip),$Tbl
+ vpshufb $t3,@X[2],@X[2]
+ vpaddd 0x00($Tbl),@X[0],$t0
+ vpshufb $t3,@X[3],@X[3]
+ vpaddd 0x20($Tbl),@X[1],$t1
+ vpaddd 0x40($Tbl),@X[2],$t2
+ vpaddd 0x60($Tbl),@X[3],$t3
+ vmovdqa $t0,0x00(%rsp)
+ xor $a1,$a1
+ vmovdqa $t1,0x20(%rsp)
+ lea -$PUSH8(%rsp),%rsp
+ mov $B,$a3
+ vmovdqa $t2,0x00(%rsp)
+ xor $C,$a3 # magic
+ vmovdqa $t3,0x20(%rsp)
+ mov $F,$a4
+ sub \$-16*2*$SZ,$Tbl # size optimization
+ jmp .Lavx2_00_47
+
+.align 16
+.Lavx2_00_47:
+___
+
+sub AVX2_256_00_47 () {
+my $j = shift;
+my $body = shift;
+my @X = @_;
+my @insns = (&$body,&$body,&$body,&$body); # 96 instructions
+my $base = "+2*$PUSH8(%rsp)";
+
+ &lea ("%rsp","-$PUSH8(%rsp)") if (($j%2)==0);
+ foreach (Xupdate_256_AVX()) { # 29 instructions
+ eval;
+ eval(shift(@insns));
+ eval(shift(@insns));
+ eval(shift(@insns));
+ }
+ &vpaddd ($t2,@X[0],16*2*$j."($Tbl)");
+ foreach (@insns) { eval; } # remaining instructions
+ &vmovdqa ((32*$j)%$PUSH8."(%rsp)",$t2);
+}
+
+ for ($i=0,$j=0; $j<4; $j++) {
+ &AVX2_256_00_47($j,\&bodyx_00_15,@X);
+ push(@X,shift(@X)); # rotate(@X)
+ }
+ &lea ($Tbl,16*2*$SZ."($Tbl)");
+ &cmpb (($SZ-1)."($Tbl)",0);
+ &jne (".Lavx2_00_47");
+
+ for ($i=0; $i<16; ) {
+ my $base=$i<8?"+$PUSH8(%rsp)":"(%rsp)";
+ foreach(bodyx_00_15()) { eval; }
+ }
+ } else { # SHA512
+ my @X = map("%ymm$_",(0..7));
+ my ($t0,$t1,$t2,$t3) = map("%ymm$_",(8..11));
+
+$code.=<<___;
+ jmp .Loop_avx2
+.align 16
+.Loop_avx2:
+ vmovdqu -16*$SZ($inp),%xmm0
+ vmovdqu -16*$SZ+16($inp),%xmm1
+ vmovdqu -16*$SZ+32($inp),%xmm2
+ lea $TABLE+0x80(%rip),$Tbl # size optimization
+ vmovdqu -16*$SZ+48($inp),%xmm3
+ vmovdqu -16*$SZ+64($inp),%xmm4
+ vmovdqu -16*$SZ+80($inp),%xmm5
+ vmovdqu -16*$SZ+96($inp),%xmm6
+ vmovdqu -16*$SZ+112($inp),%xmm7
+ #mov $inp,$_inp # offload $inp
+ vmovdqa `$SZ*2*$rounds-0x80`($Tbl),$t2
+ vinserti128 \$1,(%r12),@X[0],@X[0]
+ vinserti128 \$1,16(%r12),@X[1],@X[1]
+ vpshufb $t2,@X[0],@X[0]
+ vinserti128 \$1,32(%r12),@X[2],@X[2]
+ vpshufb $t2,@X[1],@X[1]
+ vinserti128 \$1,48(%r12),@X[3],@X[3]
+ vpshufb $t2,@X[2],@X[2]
+ vinserti128 \$1,64(%r12),@X[4],@X[4]
+ vpshufb $t2,@X[3],@X[3]
+ vinserti128 \$1,80(%r12),@X[5],@X[5]
+ vpshufb $t2,@X[4],@X[4]
+ vinserti128 \$1,96(%r12),@X[6],@X[6]
+ vpshufb $t2,@X[5],@X[5]
+ vinserti128 \$1,112(%r12),@X[7],@X[7]
+
+ vpaddq -0x80($Tbl),@X[0],$t0
+ vpshufb $t2,@X[6],@X[6]
+ vpaddq -0x60($Tbl),@X[1],$t1
+ vpshufb $t2,@X[7],@X[7]
+ vpaddq -0x40($Tbl),@X[2],$t2
+ vpaddq -0x20($Tbl),@X[3],$t3
+ vmovdqa $t0,0x00(%rsp)
+ vpaddq 0x00($Tbl),@X[4],$t0
+ vmovdqa $t1,0x20(%rsp)
+ vpaddq 0x20($Tbl),@X[5],$t1
+ vmovdqa $t2,0x40(%rsp)
+ vpaddq 0x40($Tbl),@X[6],$t2
+ vmovdqa $t3,0x60(%rsp)
+ lea -$PUSH8(%rsp),%rsp
+ vpaddq 0x60($Tbl),@X[7],$t3
+ vmovdqa $t0,0x00(%rsp)
+ xor $a1,$a1
+ vmovdqa $t1,0x20(%rsp)
+ mov $B,$a3
+ vmovdqa $t2,0x40(%rsp)
+ xor $C,$a3 # magic
+ vmovdqa $t3,0x60(%rsp)
+ mov $F,$a4
+ add \$16*2*$SZ,$Tbl
+ jmp .Lavx2_00_47
+
+.align 16
+.Lavx2_00_47:
___
+
+sub AVX2_512_00_47 () {
+my $j = shift;
+my $body = shift;
+my @X = @_;
+my @insns = (&$body,&$body); # 48 instructions
+my $base = "+2*$PUSH8(%rsp)";
+
+ &lea ("%rsp","-$PUSH8(%rsp)") if (($j%4)==0);
+ foreach (Xupdate_512_AVX()) { # 23 instructions
+ eval;
+ if ($_ !~ /\;$/) {
+ eval(shift(@insns));
+ eval(shift(@insns));
+ eval(shift(@insns));
+ }
+ }
+ &vpaddq ($t2,@X[0],16*2*$j-0x80."($Tbl)");
+ foreach (@insns) { eval; } # remaining instructions
+ &vmovdqa ((32*$j)%$PUSH8."(%rsp)",$t2);
+}
+
+ for ($i=0,$j=0; $j<8; $j++) {
+ &AVX2_512_00_47($j,\&bodyx_00_15,@X);
+ push(@X,shift(@X)); # rotate(@X)
+ }
+ &lea ($Tbl,16*2*$SZ."($Tbl)");
+ &cmpb (($SZ-1-0x80)."($Tbl)",0);
+ &jne (".Lavx2_00_47");
+
+ for ($i=0; $i<16; ) {
+ my $base=$i<8?"+$PUSH8(%rsp)":"(%rsp)";
+ foreach(bodyx_00_15()) { eval; }
+ }
}
+$code.=<<___;
+ mov `2*$SZ*$rounds`(%rsp),$ctx # $_ctx
+ add $a1,$A
+ #mov `2*$SZ*$rounds+8`(%rsp),$inp # $_inp
+ lea `2*$SZ*($rounds-8)`(%rsp),$Tbl
+
+ add $SZ*0($ctx),$A
+ add $SZ*1($ctx),$B
+ add $SZ*2($ctx),$C
+ add $SZ*3($ctx),$D
+ add $SZ*4($ctx),$E
+ add $SZ*5($ctx),$F
+ add $SZ*6($ctx),$G
+ add $SZ*7($ctx),$H
+
+ mov $A,$SZ*0($ctx)
+ mov $B,$SZ*1($ctx)
+ mov $C,$SZ*2($ctx)
+ mov $D,$SZ*3($ctx)
+ mov $E,$SZ*4($ctx)
+ mov $F,$SZ*5($ctx)
+ mov $G,$SZ*6($ctx)
+ mov $H,$SZ*7($ctx)
+
+ cmp `$PUSH8+2*8`($Tbl),$inp # $_end
+ je .Ldone_avx2
+
+ xor $a1,$a1
+ mov $B,$a3
+ xor $C,$a3 # magic
+ mov $F,$a4
+ jmp .Lower_avx2
+.align 16
+.Lower_avx2:
+___
+ for ($i=0; $i<8; ) {
+ my $base="+16($Tbl)";
+ foreach(bodyx_00_15()) { eval; }
+ }
+$code.=<<___;
+ lea -$PUSH8($Tbl),$Tbl
+ cmp %rsp,$Tbl
+ jae .Lower_avx2
+
+ mov `2*$SZ*$rounds`(%rsp),$ctx # $_ctx
+ add $a1,$A
+ #mov `2*$SZ*$rounds+8`(%rsp),$inp # $_inp
+ lea `2*$SZ*($rounds-8)`(%rsp),%rsp
+
+ add $SZ*0($ctx),$A
+ add $SZ*1($ctx),$B
+ add $SZ*2($ctx),$C
+ add $SZ*3($ctx),$D
+ add $SZ*4($ctx),$E
+ add $SZ*5($ctx),$F
+ lea `2*16*$SZ`($inp),$inp # inp+=2
+ add $SZ*6($ctx),$G
+ mov $inp,%r12
+ add $SZ*7($ctx),$H
+ cmp $_end,$inp
+
+ mov $A,$SZ*0($ctx)
+ cmove %rsp,%r12 # next block or stale data
+ mov $B,$SZ*1($ctx)
+ mov $C,$SZ*2($ctx)
+ mov $D,$SZ*3($ctx)
+ mov $E,$SZ*4($ctx)
+ mov $F,$SZ*5($ctx)
+ mov $G,$SZ*6($ctx)
+ mov $H,$SZ*7($ctx)
+
+ jbe .Loop_avx2
+ lea (%rsp),$Tbl
+
+.Ldone_avx2:
+ lea ($Tbl),%rsp
+ mov $_rsp,%rsi
+ vzeroupper
+___
+$code.=<<___ if ($win64);
+ movaps 16*$SZ+32(%rsp),%xmm6
+ movaps 16*$SZ+48(%rsp),%xmm7
+ movaps 16*$SZ+64(%rsp),%xmm8
+ movaps 16*$SZ+80(%rsp),%xmm9
+___
+$code.=<<___ if ($win64 && $SZ>4);
+ movaps 16*$SZ+96(%rsp),%xmm10
+ movaps 16*$SZ+112(%rsp),%xmm11
+___
+$code.=<<___;
+ mov (%rsi),%r15
+ mov 8(%rsi),%r14
+ mov 16(%rsi),%r13
+ mov 24(%rsi),%r12
+ mov 32(%rsi),%rbp
+ mov 40(%rsi),%rbx
+ lea 48(%rsi),%rsp
+.Lepilogue_avx2:
+ ret
+.size ${func}_avx2,.-${func}_avx2
+___
+}}
+}}}}}
# EXCEPTION_DISPOSITION handler (EXCEPTION_RECORD *rec,ULONG64 frame,
# CONTEXT *context,DISPATCHER_CONTEXT *disp)
@@ -366,16 +2173,32 @@ se_handler:
mov 120($context),%rax # pull context->Rax
mov 248($context),%rbx # pull context->Rip
- lea .Lprologue(%rip),%r10
- cmp %r10,%rbx # context->Rip<.Lprologue
+ mov 8($disp),%rsi # disp->ImageBase
+ mov 56($disp),%r11 # disp->HanderlData
+
+ mov 0(%r11),%r10d # HandlerData[0]
+ lea (%rsi,%r10),%r10 # prologue label
+ cmp %r10,%rbx # context->Rip<prologue label
jb .Lin_prologue
mov 152($context),%rax # pull context->Rsp
- lea .Lepilogue(%rip),%r10
- cmp %r10,%rbx # context->Rip>=.Lepilogue
+ mov 4(%r11),%r10d # HandlerData[1]
+ lea (%rsi,%r10),%r10 # epilogue label
+ cmp %r10,%rbx # context->Rip>=epilogue label
jae .Lin_prologue
+___
+$code.=<<___ if ($avx>1);
+ lea .Lavx2_shortcut(%rip),%r10
+ cmp %r10,%rbx # context->Rip<avx2_shortcut
+ jb .Lnot_in_avx2
+ and \$-256*$SZ,%rax
+ add \$`2*$SZ*($rounds-8)`,%rax
+.Lnot_in_avx2:
+___
+$code.=<<___;
+ mov %rax,%rsi # put aside Rsp
mov 16*$SZ+3*8(%rax),%rax # pull $_rsp
lea 48(%rax),%rax
@@ -392,6 +2215,15 @@ se_handler:
mov %r14,232($context) # restore context->R14
mov %r15,240($context) # restore context->R15
+ lea .Lepilogue(%rip),%r10
+ cmp %r10,%rbx
+ jb .Lin_prologue # non-AVX code
+
+ lea 16*$SZ+4*8(%rsi),%rsi # Xmm6- save area
+ lea 512($context),%rdi # &context.Xmm6
+ mov \$`$SZ==4?8:12`,%ecx
+ .long 0xa548f3fc # cld; rep movsq
+
.Lin_prologue:
mov 8(%rax),%rdi
mov 16(%rax),%rsi
@@ -431,21 +2263,136 @@ se_handler:
pop %rsi
ret
.size se_handler,.-se_handler
+___
+
+$code.=<<___ if ($SZ==4 && $shaext);
+.type shaext_handler,\@abi-omnipotent
+.align 16
+shaext_handler:
+ push %rsi
+ push %rdi
+ push %rbx
+ push %rbp
+ push %r12
+ push %r13
+ push %r14
+ push %r15
+ pushfq
+ sub \$64,%rsp
+
+ mov 120($context),%rax # pull context->Rax
+ mov 248($context),%rbx # pull context->Rip
+ lea .Lprologue_shaext(%rip),%r10
+ cmp %r10,%rbx # context->Rip<.Lprologue
+ jb .Lin_prologue
+
+ lea .Lepilogue_shaext(%rip),%r10
+ cmp %r10,%rbx # context->Rip>=.Lepilogue
+ jae .Lin_prologue
+
+ lea -8-5*16(%rax),%rsi
+ lea 512($context),%rdi # &context.Xmm6
+ mov \$10,%ecx
+ .long 0xa548f3fc # cld; rep movsq
+
+ jmp .Lin_prologue
+.size shaext_handler,.-shaext_handler
+___
+
+$code.=<<___;
.section .pdata
.align 4
.rva .LSEH_begin_$func
.rva .LSEH_end_$func
.rva .LSEH_info_$func
-
+___
+$code.=<<___ if ($SZ==4 && $shaext);
+ .rva .LSEH_begin_${func}_shaext
+ .rva .LSEH_end_${func}_shaext
+ .rva .LSEH_info_${func}_shaext
+___
+$code.=<<___ if ($SZ==4);
+ .rva .LSEH_begin_${func}_ssse3
+ .rva .LSEH_end_${func}_ssse3
+ .rva .LSEH_info_${func}_ssse3
+___
+$code.=<<___ if ($avx && $SZ==8);
+ .rva .LSEH_begin_${func}_xop
+ .rva .LSEH_end_${func}_xop
+ .rva .LSEH_info_${func}_xop
+___
+$code.=<<___ if ($avx);
+ .rva .LSEH_begin_${func}_avx
+ .rva .LSEH_end_${func}_avx
+ .rva .LSEH_info_${func}_avx
+___
+$code.=<<___ if ($avx>1);
+ .rva .LSEH_begin_${func}_avx2
+ .rva .LSEH_end_${func}_avx2
+ .rva .LSEH_info_${func}_avx2
+___
+$code.=<<___;
.section .xdata
.align 8
.LSEH_info_$func:
.byte 9,0,0,0
.rva se_handler
+ .rva .Lprologue,.Lepilogue # HandlerData[]
+___
+$code.=<<___ if ($SZ==4 && $shaext);
+.LSEH_info_${func}_shaext:
+ .byte 9,0,0,0
+ .rva shaext_handler
+___
+$code.=<<___ if ($SZ==4);
+.LSEH_info_${func}_ssse3:
+ .byte 9,0,0,0
+ .rva se_handler
+ .rva .Lprologue_ssse3,.Lepilogue_ssse3 # HandlerData[]
+___
+$code.=<<___ if ($avx && $SZ==8);
+.LSEH_info_${func}_xop:
+ .byte 9,0,0,0
+ .rva se_handler
+ .rva .Lprologue_xop,.Lepilogue_xop # HandlerData[]
+___
+$code.=<<___ if ($avx);
+.LSEH_info_${func}_avx:
+ .byte 9,0,0,0
+ .rva se_handler
+ .rva .Lprologue_avx,.Lepilogue_avx # HandlerData[]
+___
+$code.=<<___ if ($avx>1);
+.LSEH_info_${func}_avx2:
+ .byte 9,0,0,0
+ .rva se_handler
+ .rva .Lprologue_avx2,.Lepilogue_avx2 # HandlerData[]
___
}
-$code =~ s/\`([^\`]*)\`/eval $1/gem;
-print $code;
+sub sha256op38 {
+ my $instr = shift;
+ my %opcodelet = (
+ "sha256rnds2" => 0xcb,
+ "sha256msg1" => 0xcc,
+ "sha256msg2" => 0xcd );
+
+ if (defined($opcodelet{$instr}) && @_[0] =~ /%xmm([0-7]),\s*%xmm([0-7])/) {
+ my @opcode=(0x0f,0x38);
+ push @opcode,$opcodelet{$instr};
+ push @opcode,0xc0|($1&7)|(($2&7)<<3); # ModR/M
+ return ".byte\t".join(',',@opcode);
+ } else {
+ return $instr."\t".@_[0];
+ }
+}
+
+foreach (split("\n",$code)) {
+ s/\`([^\`]*)\`/eval $1/geo;
+
+ s/\b(sha256[^\s]*)\s+(.*)/sha256op38($1,$2)/geo;
+
+ print $_,"\n";
+}
close STDOUT;
diff --git a/crypto/openssl/crypto/sha/asm/sha512p8-ppc.pl b/crypto/openssl/crypto/sha/asm/sha512p8-ppc.pl
new file mode 100755
index 0000000..4718950
--- /dev/null
+++ b/crypto/openssl/crypto/sha/asm/sha512p8-ppc.pl
@@ -0,0 +1,424 @@
+#!/usr/bin/env perl
+
+# ====================================================================
+# Written by Andy Polyakov <appro@openssl.org> for the OpenSSL
+# project. The module is, however, dual licensed under OpenSSL and
+# CRYPTOGAMS licenses depending on where you obtain it. For further
+# details see http://www.openssl.org/~appro/cryptogams/.
+# ====================================================================
+
+# SHA256/512 for PowerISA v2.07.
+#
+# Accurate performance measurements are problematic, because it's
+# always virtualized setup with possibly throttled processor.
+# Relative comparison is therefore more informative. This module is
+# ~60% faster than integer-only sha512-ppc.pl. To anchor to something
+# else, SHA256 is 24% slower than sha1-ppc.pl and 2.5x slower than
+# hardware-assisted aes-128-cbc encrypt. SHA512 is 20% faster than
+# sha1-ppc.pl and 1.6x slower than aes-128-cbc. Another interesting
+# result is degree of computational resources' utilization. POWER8 is
+# "massively multi-threaded chip" and difference between single- and
+# maximum multi-process benchmark results tells that utlization is
+# whooping 94%. For sha512-ppc.pl we get [not unimpressive] 84% and
+# for sha1-ppc.pl - 73%. 100% means that multi-process result equals
+# to single-process one, given that all threads end up on the same
+# physical core.
+
+$flavour=shift;
+$output =shift;
+
+if ($flavour =~ /64/) {
+ $SIZE_T=8;
+ $LRSAVE=2*$SIZE_T;
+ $STU="stdu";
+ $POP="ld";
+ $PUSH="std";
+} elsif ($flavour =~ /32/) {
+ $SIZE_T=4;
+ $LRSAVE=$SIZE_T;
+ $STU="stwu";
+ $POP="lwz";
+ $PUSH="stw";
+} else { die "nonsense $flavour"; }
+
+$LENDIAN=($flavour=~/le/);
+
+$0 =~ m/(.*[\/\\])[^\/\\]+$/; $dir=$1;
+( $xlate="${dir}ppc-xlate.pl" and -f $xlate ) or
+( $xlate="${dir}../../perlasm/ppc-xlate.pl" and -f $xlate) or
+die "can't locate ppc-xlate.pl";
+
+open STDOUT,"| $^X $xlate $flavour $output" || die "can't call $xlate: $!";
+
+if ($output =~ /512/) {
+ $bits=512;
+ $SZ=8;
+ $sz="d";
+ $rounds=80;
+} else {
+ $bits=256;
+ $SZ=4;
+ $sz="w";
+ $rounds=64;
+}
+
+$func="sha${bits}_block_p8";
+$FRAME=8*$SIZE_T;
+
+$sp ="r1";
+$toc="r2";
+$ctx="r3";
+$inp="r4";
+$num="r5";
+$Tbl="r6";
+$idx="r7";
+$lrsave="r8";
+$offload="r11";
+$vrsave="r12";
+($x00,$x10,$x20,$x30,$x40,$x50,$x60,$x70)=map("r$_",(0,10,26..31));
+ $x00=0 if ($flavour =~ /osx/);
+
+@V=($A,$B,$C,$D,$E,$F,$G,$H)=map("v$_",(0..7));
+@X=map("v$_",(8..23));
+($Ki,$Func,$S0,$S1,$s0,$s1,$lemask)=map("v$_",(24..31));
+
+sub ROUND {
+my ($i,$a,$b,$c,$d,$e,$f,$g,$h)=@_;
+my $j=($i+1)%16;
+
+$code.=<<___ if ($i<15 && ($i%(16/$SZ))==(16/$SZ-1));
+ lvx_u @X[$i+1],0,$inp ; load X[i] in advance
+ addi $inp,$inp,16
+___
+$code.=<<___ if ($i<16 && ($i%(16/$SZ)));
+ vsldoi @X[$i],@X[$i-1],@X[$i-1],$SZ
+___
+$code.=<<___ if ($LENDIAN && $i<16 && ($i%(16/$SZ))==0);
+ vperm @X[$i],@X[$i],@X[$i],$lemask
+___
+$code.=<<___;
+ `"vshasigma${sz} $s0,@X[($j+1)%16],0,0" if ($i>=15)`
+ vsel $Func,$g,$f,$e ; Ch(e,f,g)
+ vshasigma${sz} $S1,$e,1,15 ; Sigma1(e)
+ vaddu${sz}m $h,$h,@X[$i%16] ; h+=X[i]
+ vshasigma${sz} $S0,$a,1,0 ; Sigma0(a)
+ `"vshasigma${sz} $s1,@X[($j+14)%16],0,15" if ($i>=15)`
+ vaddu${sz}m $h,$h,$Func ; h+=Ch(e,f,g)
+ vxor $Func,$a,$b
+ `"vaddu${sz}m @X[$j],@X[$j],@X[($j+9)%16]" if ($i>=15)`
+ vaddu${sz}m $h,$h,$S1 ; h+=Sigma1(e)
+ vsel $Func,$b,$c,$Func ; Maj(a,b,c)
+ vaddu${sz}m $g,$g,$Ki ; future h+=K[i]
+ vaddu${sz}m $d,$d,$h ; d+=h
+ vaddu${sz}m $S0,$S0,$Func ; Sigma0(a)+Maj(a,b,c)
+ `"vaddu${sz}m @X[$j],@X[$j],$s0" if ($i>=15)`
+ lvx $Ki,$idx,$Tbl ; load next K[i]
+ addi $idx,$idx,16
+ vaddu${sz}m $h,$h,$S0 ; h+=Sigma0(a)+Maj(a,b,c)
+ `"vaddu${sz}m @X[$j],@X[$j],$s1" if ($i>=15)`
+___
+}
+
+$code=<<___;
+.machine "any"
+.text
+
+.globl $func
+.align 6
+$func:
+ $STU $sp,-`($FRAME+21*16+6*$SIZE_T)`($sp)
+ mflr $lrsave
+ li r10,`$FRAME+8*16+15`
+ li r11,`$FRAME+8*16+31`
+ stvx v20,r10,$sp # ABI says so
+ addi r10,r10,32
+ mfspr $vrsave,256
+ stvx v21,r11,$sp
+ addi r11,r11,32
+ stvx v22,r10,$sp
+ addi r10,r10,32
+ stvx v23,r11,$sp
+ addi r11,r11,32
+ stvx v24,r10,$sp
+ addi r10,r10,32
+ stvx v25,r11,$sp
+ addi r11,r11,32
+ stvx v26,r10,$sp
+ addi r10,r10,32
+ stvx v27,r11,$sp
+ addi r11,r11,32
+ stvx v28,r10,$sp
+ addi r10,r10,32
+ stvx v29,r11,$sp
+ addi r11,r11,32
+ stvx v30,r10,$sp
+ stvx v31,r11,$sp
+ li r11,-1
+ stw $vrsave,`$FRAME+21*16-4`($sp) # save vrsave
+ li $x10,0x10
+ $PUSH r26,`$FRAME+21*16+0*$SIZE_T`($sp)
+ li $x20,0x20
+ $PUSH r27,`$FRAME+21*16+1*$SIZE_T`($sp)
+ li $x30,0x30
+ $PUSH r28,`$FRAME+21*16+2*$SIZE_T`($sp)
+ li $x40,0x40
+ $PUSH r29,`$FRAME+21*16+3*$SIZE_T`($sp)
+ li $x50,0x50
+ $PUSH r30,`$FRAME+21*16+4*$SIZE_T`($sp)
+ li $x60,0x60
+ $PUSH r31,`$FRAME+21*16+5*$SIZE_T`($sp)
+ li $x70,0x70
+ $PUSH $lrsave,`$FRAME+21*16+6*$SIZE_T+$LRSAVE`($sp)
+ mtspr 256,r11
+
+ bl LPICmeup
+ addi $offload,$sp,$FRAME+15
+___
+$code.=<<___ if ($LENDIAN);
+ li $idx,8
+ lvsl $lemask,0,$idx
+ vspltisb $Ki,0x0f
+ vxor $lemask,$lemask,$Ki
+___
+$code.=<<___ if ($SZ==4);
+ lvx_4w $A,$x00,$ctx
+ lvx_4w $E,$x10,$ctx
+ vsldoi $B,$A,$A,4 # unpack
+ vsldoi $C,$A,$A,8
+ vsldoi $D,$A,$A,12
+ vsldoi $F,$E,$E,4
+ vsldoi $G,$E,$E,8
+ vsldoi $H,$E,$E,12
+___
+$code.=<<___ if ($SZ==8);
+ lvx_u $A,$x00,$ctx
+ lvx_u $C,$x10,$ctx
+ lvx_u $E,$x20,$ctx
+ vsldoi $B,$A,$A,8 # unpack
+ lvx_u $G,$x30,$ctx
+ vsldoi $D,$C,$C,8
+ vsldoi $F,$E,$E,8
+ vsldoi $H,$G,$G,8
+___
+$code.=<<___;
+ li r0,`($rounds-16)/16` # inner loop counter
+ b Loop
+.align 5
+Loop:
+ lvx $Ki,$x00,$Tbl
+ li $idx,16
+ lvx_u @X[0],0,$inp
+ addi $inp,$inp,16
+ stvx $A,$x00,$offload # offload $A-$H
+ stvx $B,$x10,$offload
+ stvx $C,$x20,$offload
+ stvx $D,$x30,$offload
+ stvx $E,$x40,$offload
+ stvx $F,$x50,$offload
+ stvx $G,$x60,$offload
+ stvx $H,$x70,$offload
+ vaddu${sz}m $H,$H,$Ki # h+K[i]
+ lvx $Ki,$idx,$Tbl
+ addi $idx,$idx,16
+___
+for ($i=0;$i<16;$i++) { &ROUND($i,@V); unshift(@V,pop(@V)); }
+$code.=<<___;
+ mtctr r0
+ b L16_xx
+.align 5
+L16_xx:
+___
+for (;$i<32;$i++) { &ROUND($i,@V); unshift(@V,pop(@V)); }
+$code.=<<___;
+ bdnz L16_xx
+
+ lvx @X[2],$x00,$offload
+ subic. $num,$num,1
+ lvx @X[3],$x10,$offload
+ vaddu${sz}m $A,$A,@X[2]
+ lvx @X[4],$x20,$offload
+ vaddu${sz}m $B,$B,@X[3]
+ lvx @X[5],$x30,$offload
+ vaddu${sz}m $C,$C,@X[4]
+ lvx @X[6],$x40,$offload
+ vaddu${sz}m $D,$D,@X[5]
+ lvx @X[7],$x50,$offload
+ vaddu${sz}m $E,$E,@X[6]
+ lvx @X[8],$x60,$offload
+ vaddu${sz}m $F,$F,@X[7]
+ lvx @X[9],$x70,$offload
+ vaddu${sz}m $G,$G,@X[8]
+ vaddu${sz}m $H,$H,@X[9]
+ bne Loop
+___
+$code.=<<___ if ($SZ==4);
+ lvx @X[0],$idx,$Tbl
+ addi $idx,$idx,16
+ vperm $A,$A,$B,$Ki # pack the answer
+ lvx @X[1],$idx,$Tbl
+ vperm $E,$E,$F,$Ki
+ vperm $A,$A,$C,@X[0]
+ vperm $E,$E,$G,@X[0]
+ vperm $A,$A,$D,@X[1]
+ vperm $E,$E,$H,@X[1]
+ stvx_4w $A,$x00,$ctx
+ stvx_4w $E,$x10,$ctx
+___
+$code.=<<___ if ($SZ==8);
+ vperm $A,$A,$B,$Ki # pack the answer
+ vperm $C,$C,$D,$Ki
+ vperm $E,$E,$F,$Ki
+ vperm $G,$G,$H,$Ki
+ stvx_u $A,$x00,$ctx
+ stvx_u $C,$x10,$ctx
+ stvx_u $E,$x20,$ctx
+ stvx_u $G,$x30,$ctx
+___
+$code.=<<___;
+ li r10,`$FRAME+8*16+15`
+ mtlr $lrsave
+ li r11,`$FRAME+8*16+31`
+ mtspr 256,$vrsave
+ lvx v20,r10,$sp # ABI says so
+ addi r10,r10,32
+ lvx v21,r11,$sp
+ addi r11,r11,32
+ lvx v22,r10,$sp
+ addi r10,r10,32
+ lvx v23,r11,$sp
+ addi r11,r11,32
+ lvx v24,r10,$sp
+ addi r10,r10,32
+ lvx v25,r11,$sp
+ addi r11,r11,32
+ lvx v26,r10,$sp
+ addi r10,r10,32
+ lvx v27,r11,$sp
+ addi r11,r11,32
+ lvx v28,r10,$sp
+ addi r10,r10,32
+ lvx v29,r11,$sp
+ addi r11,r11,32
+ lvx v30,r10,$sp
+ lvx v31,r11,$sp
+ $POP r26,`$FRAME+21*16+0*$SIZE_T`($sp)
+ $POP r27,`$FRAME+21*16+1*$SIZE_T`($sp)
+ $POP r28,`$FRAME+21*16+2*$SIZE_T`($sp)
+ $POP r29,`$FRAME+21*16+3*$SIZE_T`($sp)
+ $POP r30,`$FRAME+21*16+4*$SIZE_T`($sp)
+ $POP r31,`$FRAME+21*16+5*$SIZE_T`($sp)
+ addi $sp,$sp,`$FRAME+21*16+6*$SIZE_T`
+ blr
+ .long 0
+ .byte 0,12,4,1,0x80,6,3,0
+ .long 0
+.size $func,.-$func
+___
+
+# Ugly hack here, because PPC assembler syntax seem to vary too
+# much from platforms to platform...
+$code.=<<___;
+.align 6
+LPICmeup:
+ mflr r0
+ bcl 20,31,\$+4
+ mflr $Tbl ; vvvvvv "distance" between . and 1st data entry
+ addi $Tbl,$Tbl,`64-8`
+ mtlr r0
+ blr
+ .long 0
+ .byte 0,12,0x14,0,0,0,0,0
+ .space `64-9*4`
+___
+
+if ($SZ==8) {
+ local *table = sub {
+ foreach(@_) { $code.=".quad $_,$_\n"; }
+ };
+ table(
+ "0x428a2f98d728ae22","0x7137449123ef65cd",
+ "0xb5c0fbcfec4d3b2f","0xe9b5dba58189dbbc",
+ "0x3956c25bf348b538","0x59f111f1b605d019",
+ "0x923f82a4af194f9b","0xab1c5ed5da6d8118",
+ "0xd807aa98a3030242","0x12835b0145706fbe",
+ "0x243185be4ee4b28c","0x550c7dc3d5ffb4e2",
+ "0x72be5d74f27b896f","0x80deb1fe3b1696b1",
+ "0x9bdc06a725c71235","0xc19bf174cf692694",
+ "0xe49b69c19ef14ad2","0xefbe4786384f25e3",
+ "0x0fc19dc68b8cd5b5","0x240ca1cc77ac9c65",
+ "0x2de92c6f592b0275","0x4a7484aa6ea6e483",
+ "0x5cb0a9dcbd41fbd4","0x76f988da831153b5",
+ "0x983e5152ee66dfab","0xa831c66d2db43210",
+ "0xb00327c898fb213f","0xbf597fc7beef0ee4",
+ "0xc6e00bf33da88fc2","0xd5a79147930aa725",
+ "0x06ca6351e003826f","0x142929670a0e6e70",
+ "0x27b70a8546d22ffc","0x2e1b21385c26c926",
+ "0x4d2c6dfc5ac42aed","0x53380d139d95b3df",
+ "0x650a73548baf63de","0x766a0abb3c77b2a8",
+ "0x81c2c92e47edaee6","0x92722c851482353b",
+ "0xa2bfe8a14cf10364","0xa81a664bbc423001",
+ "0xc24b8b70d0f89791","0xc76c51a30654be30",
+ "0xd192e819d6ef5218","0xd69906245565a910",
+ "0xf40e35855771202a","0x106aa07032bbd1b8",
+ "0x19a4c116b8d2d0c8","0x1e376c085141ab53",
+ "0x2748774cdf8eeb99","0x34b0bcb5e19b48a8",
+ "0x391c0cb3c5c95a63","0x4ed8aa4ae3418acb",
+ "0x5b9cca4f7763e373","0x682e6ff3d6b2b8a3",
+ "0x748f82ee5defb2fc","0x78a5636f43172f60",
+ "0x84c87814a1f0ab72","0x8cc702081a6439ec",
+ "0x90befffa23631e28","0xa4506cebde82bde9",
+ "0xbef9a3f7b2c67915","0xc67178f2e372532b",
+ "0xca273eceea26619c","0xd186b8c721c0c207",
+ "0xeada7dd6cde0eb1e","0xf57d4f7fee6ed178",
+ "0x06f067aa72176fba","0x0a637dc5a2c898a6",
+ "0x113f9804bef90dae","0x1b710b35131c471b",
+ "0x28db77f523047d84","0x32caab7b40c72493",
+ "0x3c9ebe0a15c9bebc","0x431d67c49c100d4c",
+ "0x4cc5d4becb3e42b6","0x597f299cfc657e2a",
+ "0x5fcb6fab3ad6faec","0x6c44198c4a475817","0");
+$code.=<<___ if (!$LENDIAN);
+.quad 0x0001020304050607,0x1011121314151617
+___
+$code.=<<___ if ($LENDIAN); # quad-swapped
+.quad 0x1011121314151617,0x0001020304050607
+___
+} else {
+ local *table = sub {
+ foreach(@_) { $code.=".long $_,$_,$_,$_\n"; }
+ };
+ table(
+ "0x428a2f98","0x71374491","0xb5c0fbcf","0xe9b5dba5",
+ "0x3956c25b","0x59f111f1","0x923f82a4","0xab1c5ed5",
+ "0xd807aa98","0x12835b01","0x243185be","0x550c7dc3",
+ "0x72be5d74","0x80deb1fe","0x9bdc06a7","0xc19bf174",
+ "0xe49b69c1","0xefbe4786","0x0fc19dc6","0x240ca1cc",
+ "0x2de92c6f","0x4a7484aa","0x5cb0a9dc","0x76f988da",
+ "0x983e5152","0xa831c66d","0xb00327c8","0xbf597fc7",
+ "0xc6e00bf3","0xd5a79147","0x06ca6351","0x14292967",
+ "0x27b70a85","0x2e1b2138","0x4d2c6dfc","0x53380d13",
+ "0x650a7354","0x766a0abb","0x81c2c92e","0x92722c85",
+ "0xa2bfe8a1","0xa81a664b","0xc24b8b70","0xc76c51a3",
+ "0xd192e819","0xd6990624","0xf40e3585","0x106aa070",
+ "0x19a4c116","0x1e376c08","0x2748774c","0x34b0bcb5",
+ "0x391c0cb3","0x4ed8aa4a","0x5b9cca4f","0x682e6ff3",
+ "0x748f82ee","0x78a5636f","0x84c87814","0x8cc70208",
+ "0x90befffa","0xa4506ceb","0xbef9a3f7","0xc67178f2","0");
+$code.=<<___ if (!$LENDIAN);
+.long 0x00010203,0x10111213,0x10111213,0x10111213
+.long 0x00010203,0x04050607,0x10111213,0x10111213
+.long 0x00010203,0x04050607,0x08090a0b,0x10111213
+___
+$code.=<<___ if ($LENDIAN); # word-swapped
+.long 0x10111213,0x10111213,0x10111213,0x00010203
+.long 0x10111213,0x10111213,0x04050607,0x00010203
+.long 0x10111213,0x08090a0b,0x04050607,0x00010203
+___
+}
+$code.=<<___;
+.asciz "SHA${bits} for PowerISA 2.07, CRYPTOGAMS by <appro\@openssl.org>"
+.align 2
+___
+
+$code =~ s/\`([^\`]*)\`/eval $1/gem;
+print $code;
+close STDOUT;
diff --git a/crypto/openssl/crypto/sha/sha512.c b/crypto/openssl/crypto/sha/sha512.c
index de0aad8..3bf66ae 100644
--- a/crypto/openssl/crypto/sha/sha512.c
+++ b/crypto/openssl/crypto/sha/sha512.c
@@ -55,6 +55,7 @@ const char SHA512_version[] = "SHA-512" OPENSSL_VERSION_PTEXT;
# if defined(__i386) || defined(__i386__) || defined(_M_IX86) || \
defined(__x86_64) || defined(_M_AMD64) || defined(_M_X64) || \
defined(__s390__) || defined(__s390x__) || \
+ defined(__aarch64__) || \
defined(SHA512_ASM)
# define SHA512_BLOCK_CAN_MANAGE_UNALIGNED_DATA
# endif
@@ -353,6 +354,18 @@ static const SHA_LONG64 K512[80] = {
asm ("rotrdi %0,%1,%2" \
: "=r"(ret) \
: "r"(a),"K"(n)); ret; })
+# elif defined(__aarch64__)
+# define ROTR(a,n) ({ SHA_LONG64 ret; \
+ asm ("ror %0,%1,%2" \
+ : "=r"(ret) \
+ : "r"(a),"I"(n)); ret; })
+# if defined(__BYTE_ORDER__) && defined(__ORDER_LITTLE_ENDIAN__) && \
+ __BYTE_ORDER__==__ORDER_LITTLE_ENDIAN__
+# define PULL64(x) ({ SHA_LONG64 ret; \
+ asm ("rev %0,%1" \
+ : "=r"(ret) \
+ : "r"(*((const SHA_LONG64 *)(&(x))))); ret; })
+# endif
# endif
# elif defined(_MSC_VER)
# if defined(_WIN64) /* applies to both IA-64 and AMD64 */
diff --git a/crypto/openssl/crypto/sparc_arch.h b/crypto/openssl/crypto/sparc_arch.h
new file mode 100644
index 0000000..e30d322
--- /dev/null
+++ b/crypto/openssl/crypto/sparc_arch.h
@@ -0,0 +1,101 @@
+#ifndef __SPARC_ARCH_H__
+# define __SPARC_ARCH_H__
+
+# define SPARCV9_TICK_PRIVILEGED (1<<0)
+# define SPARCV9_PREFER_FPU (1<<1)
+# define SPARCV9_VIS1 (1<<2)
+# define SPARCV9_VIS2 (1<<3)/* reserved */
+# define SPARCV9_FMADD (1<<4)/* reserved for SPARC64 V */
+# define SPARCV9_BLK (1<<5)/* VIS1 block copy */
+# define SPARCV9_VIS3 (1<<6)
+# define SPARCV9_RANDOM (1<<7)
+# define SPARCV9_64BIT_STACK (1<<8)
+
+/*
+ * OPENSSL_sparcv9cap_P[1] is copy of Compatibility Feature Register,
+ * %asr26, SPARC-T4 and later. There is no SPARCV9_CFR bit in
+ * OPENSSL_sparcv9cap_P[0], as %cfr copy is sufficient...
+ */
+# define CFR_AES 0x00000001/* Supports AES opcodes */
+# define CFR_DES 0x00000002/* Supports DES opcodes */
+# define CFR_KASUMI 0x00000004/* Supports KASUMI opcodes */
+# define CFR_CAMELLIA 0x00000008/* Supports CAMELLIA opcodes */
+# define CFR_MD5 0x00000010/* Supports MD5 opcodes */
+# define CFR_SHA1 0x00000020/* Supports SHA1 opcodes */
+# define CFR_SHA256 0x00000040/* Supports SHA256 opcodes */
+# define CFR_SHA512 0x00000080/* Supports SHA512 opcodes */
+# define CFR_MPMUL 0x00000100/* Supports MPMUL opcodes */
+# define CFR_MONTMUL 0x00000200/* Supports MONTMUL opcodes */
+# define CFR_MONTSQR 0x00000400/* Supports MONTSQR opcodes */
+# define CFR_CRC32C 0x00000800/* Supports CRC32C opcodes */
+
+# if defined(OPENSSL_PIC) && !defined(__PIC__)
+# define __PIC__
+# endif
+
+# if defined(__SUNPRO_C) && defined(__sparcv9) && !defined(__arch64__)
+# define __arch64__
+# endif
+
+# define SPARC_PIC_THUNK(reg) \
+ .align 32; \
+.Lpic_thunk: \
+ jmp %o7 + 8; \
+ add %o7, reg, reg;
+
+# define SPARC_PIC_THUNK_CALL(reg) \
+ sethi %hi(_GLOBAL_OFFSET_TABLE_-4), reg; \
+ call .Lpic_thunk; \
+ or reg, %lo(_GLOBAL_OFFSET_TABLE_+4), reg;
+
+# if 1
+# define SPARC_SETUP_GOT_REG(reg) SPARC_PIC_THUNK_CALL(reg)
+# else
+# define SPARC_SETUP_GOT_REG(reg) \
+ sethi %hi(_GLOBAL_OFFSET_TABLE_-4), reg; \
+ call .+8; \
+ or reg,%lo(_GLOBAL_OFFSET_TABLE_+4), reg; \
+ add %o7, reg, reg
+# endif
+
+# if defined(__arch64__)
+
+# define SPARC_LOAD_ADDRESS(SYM, reg) \
+ setx SYM, %o7, reg;
+# define LDPTR ldx
+# define SIZE_T_CC %xcc
+# define STACK_FRAME 192
+# define STACK_BIAS 2047
+# define STACK_7thARG (STACK_BIAS+176)
+
+# else
+
+# define SPARC_LOAD_ADDRESS(SYM, reg) \
+ set SYM, reg;
+# define LDPTR ld
+# define SIZE_T_CC %icc
+# define STACK_FRAME 112
+# define STACK_BIAS 0
+# define STACK_7thARG 92
+# define SPARC_LOAD_ADDRESS_LEAF(SYM,reg,tmp) SPARC_LOAD_ADDRESS(SYM,reg)
+
+# endif
+
+# ifdef __PIC__
+# undef SPARC_LOAD_ADDRESS
+# undef SPARC_LOAD_ADDRESS_LEAF
+# define SPARC_LOAD_ADDRESS(SYM, reg) \
+ SPARC_SETUP_GOT_REG(reg); \
+ sethi %hi(SYM), %o7; \
+ or %o7, %lo(SYM), %o7; \
+ LDPTR [reg + %o7], reg;
+# endif
+
+# ifndef SPARC_LOAD_ADDRESS_LEAF
+# define SPARC_LOAD_ADDRESS_LEAF(SYM, reg, tmp) \
+ mov %o7, tmp; \
+ SPARC_LOAD_ADDRESS(SYM, reg) \
+ mov tmp, %o7;
+# endif
+
+#endif /* __SPARC_ARCH_H__ */
diff --git a/crypto/openssl/crypto/sparccpuid.S b/crypto/openssl/crypto/sparccpuid.S
index 0cc247e..eea2006f 100644
--- a/crypto/openssl/crypto/sparccpuid.S
+++ b/crypto/openssl/crypto/sparccpuid.S
@@ -251,6 +251,11 @@ _sparcv9_vis1_probe:
! UltraSPARC IIe 7
! UltraSPARC III 7
! UltraSPARC T1 24
+! SPARC T4 65(*)
+!
+! (*) result has lesser to do with VIS instruction latencies, rdtick
+! appears that slow, but it does the trick in sense that FP and
+! VIS code paths are still slower than integer-only ones.
!
! Numbers for T2 and SPARC64 V-VII are more than welcomed.
!
@@ -260,6 +265,8 @@ _sparcv9_vis1_probe:
.global _sparcv9_vis1_instrument
.align 8
_sparcv9_vis1_instrument:
+ .word 0x81b00d80 !fxor %f0,%f0,%f0
+ .word 0x85b08d82 !fxor %f2,%f2,%f2
.word 0x91410000 !rd %tick,%o0
.word 0x81b00d80 !fxor %f0,%f0,%f0
.word 0x85b08d82 !fxor %f2,%f2,%f2
@@ -314,6 +321,30 @@ _sparcv9_fmadd_probe:
.type _sparcv9_fmadd_probe,#function
.size _sparcv9_fmadd_probe,.-_sparcv9_fmadd_probe
+.global _sparcv9_rdcfr
+.align 8
+_sparcv9_rdcfr:
+ retl
+ .word 0x91468000 !rd %asr26,%o0
+.type _sparcv9_rdcfr,#function
+.size _sparcv9_rdcfr,.-_sparcv9_rdcfr
+
+.global _sparcv9_vis3_probe
+.align 8
+_sparcv9_vis3_probe:
+ retl
+ .word 0x81b022a0 !xmulx %g0,%g0,%g0
+.type _sparcv9_vis3_probe,#function
+.size _sparcv9_vis3_probe,.-_sparcv9_vis3_probe
+
+.global _sparcv9_random
+.align 8
+_sparcv9_random:
+ retl
+ .word 0x91b002a0 !random %o0
+.type _sparcv9_random,#function
+.size _sparcv9_random,.-_sparcv9_vis3_probe
+
.global OPENSSL_cleanse
.align 32
OPENSSL_cleanse:
@@ -397,6 +428,102 @@ OPENSSL_cleanse:
.type OPENSSL_cleanse,#function
.size OPENSSL_cleanse,.-OPENSSL_cleanse
+.global _sparcv9_vis1_instrument_bus
+.align 8
+_sparcv9_vis1_instrument_bus:
+ mov %o1,%o3 ! save cnt
+ .word 0x99410000 !rd %tick,%o4 ! tick
+ mov %o4,%o5 ! lasttick = tick
+ set 0,%g4 ! diff
+
+ andn %o0,63,%g1
+ .word 0xc1985e00 !ldda [%g1]0xf0,%f0 ! block load
+ .word 0x8143e040 !membar #Sync
+ .word 0xc1b85c00 !stda %f0,[%g1]0xe0 ! block store and commit
+ .word 0x8143e040 !membar #Sync
+ ld [%o0],%o4
+ add %o4,%g4,%g4
+ .word 0xc9e2100c !cas [%o0],%o4,%g4
+
+.Loop: .word 0x99410000 !rd %tick,%o4
+ sub %o4,%o5,%g4 ! diff=tick-lasttick
+ mov %o4,%o5 ! lasttick=tick
+
+ andn %o0,63,%g1
+ .word 0xc1985e00 !ldda [%g1]0xf0,%f0 ! block load
+ .word 0x8143e040 !membar #Sync
+ .word 0xc1b85c00 !stda %f0,[%g1]0xe0 ! block store and commit
+ .word 0x8143e040 !membar #Sync
+ ld [%o0],%o4
+ add %o4,%g4,%g4
+ .word 0xc9e2100c !cas [%o0],%o4,%g4
+ subcc %o1,1,%o1 ! --$cnt
+ bnz .Loop
+ add %o0,4,%o0 ! ++$out
+
+ retl
+ mov %o3,%o0
+.type _sparcv9_vis1_instrument_bus,#function
+.size _sparcv9_vis1_instrument_bus,.-_sparcv9_vis1_instrument_bus
+
+.global _sparcv9_vis1_instrument_bus2
+.align 8
+_sparcv9_vis1_instrument_bus2:
+ mov %o1,%o3 ! save cnt
+ sll %o1,2,%o1 ! cnt*=4
+
+ .word 0x99410000 !rd %tick,%o4 ! tick
+ mov %o4,%o5 ! lasttick = tick
+ set 0,%g4 ! diff
+
+ andn %o0,63,%g1
+ .word 0xc1985e00 !ldda [%g1]0xf0,%f0 ! block load
+ .word 0x8143e040 !membar #Sync
+ .word 0xc1b85c00 !stda %f0,[%g1]0xe0 ! block store and commit
+ .word 0x8143e040 !membar #Sync
+ ld [%o0],%o4
+ add %o4,%g4,%g4
+ .word 0xc9e2100c !cas [%o0],%o4,%g4
+
+ .word 0x99410000 !rd %tick,%o4 ! tick
+ sub %o4,%o5,%g4 ! diff=tick-lasttick
+ mov %o4,%o5 ! lasttick=tick
+ mov %g4,%g5 ! lastdiff=diff
+.Loop2:
+ andn %o0,63,%g1
+ .word 0xc1985e00 !ldda [%g1]0xf0,%f0 ! block load
+ .word 0x8143e040 !membar #Sync
+ .word 0xc1b85c00 !stda %f0,[%g1]0xe0 ! block store and commit
+ .word 0x8143e040 !membar #Sync
+ ld [%o0],%o4
+ add %o4,%g4,%g4
+ .word 0xc9e2100c !cas [%o0],%o4,%g4
+
+ subcc %o2,1,%o2 ! --max
+ bz .Ldone2
+ nop
+
+ .word 0x99410000 !rd %tick,%o4 ! tick
+ sub %o4,%o5,%g4 ! diff=tick-lasttick
+ mov %o4,%o5 ! lasttick=tick
+ cmp %g4,%g5
+ mov %g4,%g5 ! lastdiff=diff
+
+ .word 0x83408000 !rd %ccr,%g1
+ and %g1,4,%g1 ! isolate zero flag
+ xor %g1,4,%g1 ! flip zero flag
+
+ subcc %o1,%g1,%o1 ! conditional --$cnt
+ bnz .Loop2
+ add %o0,%g1,%o0 ! conditional ++$out
+
+.Ldone2:
+ srl %o1,2,%o1
+ retl
+ sub %o3,%o1,%o0
+.type _sparcv9_vis1_instrument_bus2,#function
+.size _sparcv9_vis1_instrument_bus2,.-_sparcv9_vis1_instrument_bus2
+
.section ".init",#alloc,#execinstr
call OPENSSL_cpuid_setup
nop
diff --git a/crypto/openssl/crypto/sparcv9cap.c b/crypto/openssl/crypto/sparcv9cap.c
index d9f986f..8bf2846 100644
--- a/crypto/openssl/crypto/sparcv9cap.c
+++ b/crypto/openssl/crypto/sparcv9cap.c
@@ -4,30 +4,68 @@
#include <setjmp.h>
#include <signal.h>
#include <sys/time.h>
+#include <unistd.h>
#include <openssl/bn.h>
-#define SPARCV9_TICK_PRIVILEGED (1<<0)
-#define SPARCV9_PREFER_FPU (1<<1)
-#define SPARCV9_VIS1 (1<<2)
-#define SPARCV9_VIS2 (1<<3) /* reserved */
-#define SPARCV9_FMADD (1<<4) /* reserved for SPARC64 V */
+#include "sparc_arch.h"
-static int OPENSSL_sparcv9cap_P = SPARCV9_TICK_PRIVILEGED;
+#if defined(__GNUC__) && defined(__linux)
+__attribute__ ((visibility("hidden")))
+#endif
+unsigned int OPENSSL_sparcv9cap_P[2] = { SPARCV9_TICK_PRIVILEGED, 0 };
int bn_mul_mont(BN_ULONG *rp, const BN_ULONG *ap, const BN_ULONG *bp,
const BN_ULONG *np, const BN_ULONG *n0, int num)
{
+ int bn_mul_mont_vis3(BN_ULONG *rp, const BN_ULONG *ap, const BN_ULONG *bp,
+ const BN_ULONG *np, const BN_ULONG *n0, int num);
int bn_mul_mont_fpu(BN_ULONG *rp, const BN_ULONG *ap, const BN_ULONG *bp,
const BN_ULONG *np, const BN_ULONG *n0, int num);
int bn_mul_mont_int(BN_ULONG *rp, const BN_ULONG *ap, const BN_ULONG *bp,
const BN_ULONG *np, const BN_ULONG *n0, int num);
- if (num >= 8 && !(num & 1) &&
- (OPENSSL_sparcv9cap_P & (SPARCV9_PREFER_FPU | SPARCV9_VIS1)) ==
- (SPARCV9_PREFER_FPU | SPARCV9_VIS1))
- return bn_mul_mont_fpu(rp, ap, bp, np, n0, num);
- else
- return bn_mul_mont_int(rp, ap, bp, np, n0, num);
+ if (!(num & 1) && num >= 6) {
+ if ((num & 15) == 0 && num <= 64 &&
+ (OPENSSL_sparcv9cap_P[1] & (CFR_MONTMUL | CFR_MONTSQR)) ==
+ (CFR_MONTMUL | CFR_MONTSQR)) {
+ typedef int (*bn_mul_mont_f) (BN_ULONG *rp, const BN_ULONG *ap,
+ const BN_ULONG *bp,
+ const BN_ULONG *np,
+ const BN_ULONG *n0);
+ int bn_mul_mont_t4_8(BN_ULONG *rp, const BN_ULONG *ap,
+ const BN_ULONG *bp, const BN_ULONG *np,
+ const BN_ULONG *n0);
+ int bn_mul_mont_t4_16(BN_ULONG *rp, const BN_ULONG *ap,
+ const BN_ULONG *bp, const BN_ULONG *np,
+ const BN_ULONG *n0);
+ int bn_mul_mont_t4_24(BN_ULONG *rp, const BN_ULONG *ap,
+ const BN_ULONG *bp, const BN_ULONG *np,
+ const BN_ULONG *n0);
+ int bn_mul_mont_t4_32(BN_ULONG *rp, const BN_ULONG *ap,
+ const BN_ULONG *bp, const BN_ULONG *np,
+ const BN_ULONG *n0);
+ static const bn_mul_mont_f funcs[4] = {
+ bn_mul_mont_t4_8, bn_mul_mont_t4_16,
+ bn_mul_mont_t4_24, bn_mul_mont_t4_32
+ };
+ bn_mul_mont_f worker = funcs[num / 16 - 1];
+
+ if ((*worker) (rp, ap, bp, np, n0))
+ return 1;
+ /* retry once and fall back */
+ if ((*worker) (rp, ap, bp, np, n0))
+ return 1;
+ return bn_mul_mont_vis3(rp, ap, bp, np, n0, num);
+ }
+ if ((OPENSSL_sparcv9cap_P[0] & SPARCV9_VIS3))
+ return bn_mul_mont_vis3(rp, ap, bp, np, n0, num);
+ else if (num >= 8 &&
+ (OPENSSL_sparcv9cap_P[0] &
+ (SPARCV9_PREFER_FPU | SPARCV9_VIS1)) ==
+ (SPARCV9_PREFER_FPU | SPARCV9_VIS1))
+ return bn_mul_mont_fpu(rp, ap, bp, np, n0, num);
+ }
+ return bn_mul_mont_int(rp, ap, bp, np, n0, num);
}
unsigned long _sparcv9_rdtick(void);
@@ -35,10 +73,15 @@ void _sparcv9_vis1_probe(void);
unsigned long _sparcv9_vis1_instrument(void);
void _sparcv9_vis2_probe(void);
void _sparcv9_fmadd_probe(void);
+unsigned long _sparcv9_rdcfr(void);
+void _sparcv9_vis3_probe(void);
+unsigned long _sparcv9_random(void);
+size_t _sparcv9_vis1_instrument_bus(unsigned int *, size_t);
+size_t _sparcv9_vis1_instrument_bus2(unsigned int *, size_t, size_t);
unsigned long OPENSSL_rdtsc(void)
{
- if (OPENSSL_sparcv9cap_P & SPARCV9_TICK_PRIVILEGED)
+ if (OPENSSL_sparcv9cap_P[0] & SPARCV9_TICK_PRIVILEGED)
#if defined(__sun) && defined(__SVR4)
return gethrtime();
#else
@@ -48,6 +91,24 @@ unsigned long OPENSSL_rdtsc(void)
return _sparcv9_rdtick();
}
+size_t OPENSSL_instrument_bus(unsigned int *out, size_t cnt)
+{
+ if ((OPENSSL_sparcv9cap_P[0] & (SPARCV9_TICK_PRIVILEGED | SPARCV9_BLK)) ==
+ SPARCV9_BLK)
+ return _sparcv9_vis1_instrument_bus(out, cnt);
+ else
+ return 0;
+}
+
+size_t OPENSSL_instrument_bus2(unsigned int *out, size_t cnt, size_t max)
+{
+ if ((OPENSSL_sparcv9cap_P[0] & (SPARCV9_TICK_PRIVILEGED | SPARCV9_BLK)) ==
+ SPARCV9_BLK)
+ return _sparcv9_vis1_instrument_bus2(out, cnt, max);
+ else
+ return 0;
+}
+
#if 0 && defined(__sun) && defined(__SVR4)
/*
* This code path is disabled, because of incompatibility of libdevinfo.so.1
@@ -74,17 +135,17 @@ static int walk_nodename(di_node_t node, di_node_name_t di_node_name)
if (!strcmp(name, "SUNW,UltraSPARC") ||
/* covers II,III,IV */
!strncmp(name, "SUNW,UltraSPARC-I", 17)) {
- OPENSSL_sparcv9cap_P |= SPARCV9_PREFER_FPU | SPARCV9_VIS1;
+ OPENSSL_sparcv9cap_P[0] |= SPARCV9_PREFER_FPU | SPARCV9_VIS1;
/* %tick is privileged only on UltraSPARC-I/II, but not IIe */
if (name[14] != '\0' && name[17] != '\0' && name[18] != '\0')
- OPENSSL_sparcv9cap_P &= ~SPARCV9_TICK_PRIVILEGED;
+ OPENSSL_sparcv9cap_P[0] &= ~SPARCV9_TICK_PRIVILEGED;
return DI_WALK_TERMINATE;
}
/* This is expected to catch remaining UltraSPARCs, such as T1 */
else if (!strncmp(name, "SUNW,UltraSPARC", 15)) {
- OPENSSL_sparcv9cap_P &= ~SPARCV9_TICK_PRIVILEGED;
+ OPENSSL_sparcv9cap_P[0] &= ~SPARCV9_TICK_PRIVILEGED;
return DI_WALK_TERMINATE;
}
@@ -103,22 +164,22 @@ void OPENSSL_cpuid_setup(void)
trigger = 1;
if ((e = getenv("OPENSSL_sparcv9cap"))) {
- OPENSSL_sparcv9cap_P = strtoul(e, NULL, 0);
+ OPENSSL_sparcv9cap_P[0] = strtoul(e, NULL, 0);
return;
}
if (sysinfo(SI_MACHINE, si, sizeof(si)) > 0) {
if (strcmp(si, "sun4v"))
/* FPU is preferred for all CPUs, but US-T1/2 */
- OPENSSL_sparcv9cap_P |= SPARCV9_PREFER_FPU;
+ OPENSSL_sparcv9cap_P[0] |= SPARCV9_PREFER_FPU;
}
if (sysinfo(SI_ISALIST, si, sizeof(si)) > 0) {
if (strstr(si, "+vis"))
- OPENSSL_sparcv9cap_P |= SPARCV9_VIS1;
+ OPENSSL_sparcv9cap_P[0] |= SPARCV9_VIS1 | SPARCV9_BLK;
if (strstr(si, "+vis2")) {
- OPENSSL_sparcv9cap_P |= SPARCV9_VIS2;
- OPENSSL_sparcv9cap_P &= ~SPARCV9_TICK_PRIVILEGED;
+ OPENSSL_sparcv9cap_P[0] |= SPARCV9_VIS2;
+ OPENSSL_sparcv9cap_P[0] &= ~SPARCV9_TICK_PRIVILEGED;
return;
}
}
@@ -188,12 +249,14 @@ void OPENSSL_cpuid_setup(void)
trigger = 1;
if ((e = getenv("OPENSSL_sparcv9cap"))) {
- OPENSSL_sparcv9cap_P = strtoul(e, NULL, 0);
+ OPENSSL_sparcv9cap_P[0] = strtoul(e, NULL, 0);
+ if ((e = strchr(e, ':')))
+ OPENSSL_sparcv9cap_P[1] = strtoul(e + 1, NULL, 0);
return;
}
/* Initial value, fits UltraSPARC-I&II... */
- OPENSSL_sparcv9cap_P = SPARCV9_PREFER_FPU | SPARCV9_TICK_PRIVILEGED;
+ OPENSSL_sparcv9cap_P[0] = SPARCV9_PREFER_FPU | SPARCV9_TICK_PRIVILEGED;
sigfillset(&all_masked);
sigdelset(&all_masked, SIGILL);
@@ -216,30 +279,68 @@ void OPENSSL_cpuid_setup(void)
if (sigsetjmp(common_jmp, 1) == 0) {
_sparcv9_rdtick();
- OPENSSL_sparcv9cap_P &= ~SPARCV9_TICK_PRIVILEGED;
+ OPENSSL_sparcv9cap_P[0] &= ~SPARCV9_TICK_PRIVILEGED;
}
if (sigsetjmp(common_jmp, 1) == 0) {
_sparcv9_vis1_probe();
- OPENSSL_sparcv9cap_P |= SPARCV9_VIS1;
+ OPENSSL_sparcv9cap_P[0] |= SPARCV9_VIS1 | SPARCV9_BLK;
/* detect UltraSPARC-Tx, see sparccpud.S for details... */
if (_sparcv9_vis1_instrument() >= 12)
- OPENSSL_sparcv9cap_P &= ~(SPARCV9_VIS1 | SPARCV9_PREFER_FPU);
+ OPENSSL_sparcv9cap_P[0] &= ~(SPARCV9_VIS1 | SPARCV9_PREFER_FPU);
else {
_sparcv9_vis2_probe();
- OPENSSL_sparcv9cap_P |= SPARCV9_VIS2;
+ OPENSSL_sparcv9cap_P[0] |= SPARCV9_VIS2;
}
}
if (sigsetjmp(common_jmp, 1) == 0) {
_sparcv9_fmadd_probe();
- OPENSSL_sparcv9cap_P |= SPARCV9_FMADD;
+ OPENSSL_sparcv9cap_P[0] |= SPARCV9_FMADD;
+ }
+
+ /*
+ * VIS3 flag is tested independently from VIS1, unlike VIS2 that is,
+ * because VIS3 defines even integer instructions.
+ */
+ if (sigsetjmp(common_jmp, 1) == 0) {
+ _sparcv9_vis3_probe();
+ OPENSSL_sparcv9cap_P[0] |= SPARCV9_VIS3;
+ }
+# if 0 /* was planned at some point but never
+ * implemented in hardware */
+ if (sigsetjmp(common_jmp, 1) == 0) {
+ (void)_sparcv9_random();
+ OPENSSL_sparcv9cap_P[0] |= SPARCV9_RANDOM;
+ }
+# endif
+
+ /*
+ * In wait for better solution _sparcv9_rdcfr is masked by
+ * VIS3 flag, because it goes to uninterruptable endless
+ * loop on UltraSPARC II running Solaris. Things might be
+ * different on Linux...
+ */
+ if ((OPENSSL_sparcv9cap_P[0] & SPARCV9_VIS3) &&
+ sigsetjmp(common_jmp, 1) == 0) {
+ OPENSSL_sparcv9cap_P[1] = (unsigned int)_sparcv9_rdcfr();
}
sigaction(SIGBUS, &bus_oact, NULL);
sigaction(SIGILL, &ill_oact, NULL);
sigprocmask(SIG_SETMASK, &oset, NULL);
+
+ if (sizeof(size_t) == 8)
+ OPENSSL_sparcv9cap_P[0] |= SPARCV9_64BIT_STACK;
+# ifdef __linux
+ else {
+ int ret = syscall(340);
+
+ if (ret >= 0 && ret & 1)
+ OPENSSL_sparcv9cap_P[0] |= SPARCV9_64BIT_STACK;
+ }
+# endif
}
#endif
diff --git a/crypto/openssl/crypto/srp/Makefile b/crypto/openssl/crypto/srp/Makefile
index 7639533..414af7b 100644
--- a/crypto/openssl/crypto/srp/Makefile
+++ b/crypto/openssl/crypto/srp/Makefile
@@ -37,6 +37,9 @@ lib: $(LIBOBJ)
$(RANLIB) $(LIB) || echo Never mind.
@touch lib
+files:
+ $(PERL) $(TOP)/util/files.pl Makefile >> $(TOP)/MINFO
+
links:
@$(PERL) $(TOP)/util/mklink.pl ../../include/openssl $(EXHEADER)
@$(PERL) $(TOP)/util/mklink.pl ../../test $(TEST)
diff --git a/crypto/openssl/crypto/srp/srptest.c b/crypto/openssl/crypto/srp/srptest.c
index 451c70e..00e001b 100644
--- a/crypto/openssl/crypto/srp/srptest.c
+++ b/crypto/openssl/crypto/srp/srptest.c
@@ -148,6 +148,7 @@ int main(int argc, char **argv)
ERR_remove_thread_state(NULL);
ERR_free_strings();
CRYPTO_mem_leaks(bio_err);
+ BIO_free(bio_err);
return 0;
}
diff --git a/crypto/openssl/crypto/stack/safestack.h b/crypto/openssl/crypto/stack/safestack.h
index 519649b..1d4f87e 100644
--- a/crypto/openssl/crypto/stack/safestack.h
+++ b/crypto/openssl/crypto/stack/safestack.h
@@ -75,12 +75,12 @@ extern "C" {
# define CHECKED_STACK_OF(type, p) \
((_STACK*) (1 ? p : (STACK_OF(type)*)0))
+# define CHECKED_SK_COPY_FUNC(type, p) \
+ ((void *(*)(void *)) ((1 ? p : (type *(*)(const type *))0)))
+
# define CHECKED_SK_FREE_FUNC(type, p) \
((void (*)(void *)) ((1 ? p : (void (*)(type *))0)))
-# define CHECKED_SK_FREE_FUNC2(type, p) \
- ((void (*)(void *)) ((1 ? p : (void (*)(type))0)))
-
# define CHECKED_SK_CMP_FUNC(type, p) \
((int (*)(const void *, const void *)) \
((1 ? p : (int (*)(const type * const *, const type * const *))0)))
@@ -177,6 +177,8 @@ DECLARE_SPECIAL_STACK_OF(OPENSSL_BLOCK, void)
(STACK_OF(type) *)sk_dup(CHECKED_STACK_OF(type, st))
# define SKM_sk_pop_free(type, st, free_func) \
sk_pop_free(CHECKED_STACK_OF(type, st), CHECKED_SK_FREE_FUNC(type, free_func))
+# define SKM_sk_deep_copy(type, st, copy_func, free_func) \
+ (STACK_OF(type) *)sk_deep_copy(CHECKED_STACK_OF(type, st), CHECKED_SK_COPY_FUNC(type, copy_func), CHECKED_SK_FREE_FUNC(type, free_func))
# define SKM_sk_shift(type, st) \
(type *)sk_shift(CHECKED_STACK_OF(type, st))
# define SKM_sk_pop(type, st) \
@@ -226,6 +228,7 @@ DECLARE_SPECIAL_STACK_OF(OPENSSL_BLOCK, void)
# define sk_ACCESS_DESCRIPTION_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(ACCESS_DESCRIPTION, (st), (cmp))
# define sk_ACCESS_DESCRIPTION_dup(st) SKM_sk_dup(ACCESS_DESCRIPTION, st)
# define sk_ACCESS_DESCRIPTION_pop_free(st, free_func) SKM_sk_pop_free(ACCESS_DESCRIPTION, (st), (free_func))
+# define sk_ACCESS_DESCRIPTION_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(ACCESS_DESCRIPTION, (st), (copy_func), (free_func))
# define sk_ACCESS_DESCRIPTION_shift(st) SKM_sk_shift(ACCESS_DESCRIPTION, (st))
# define sk_ACCESS_DESCRIPTION_pop(st) SKM_sk_pop(ACCESS_DESCRIPTION, (st))
# define sk_ACCESS_DESCRIPTION_sort(st) SKM_sk_sort(ACCESS_DESCRIPTION, (st))
@@ -247,6 +250,7 @@ DECLARE_SPECIAL_STACK_OF(OPENSSL_BLOCK, void)
# define sk_ASIdOrRange_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(ASIdOrRange, (st), (cmp))
# define sk_ASIdOrRange_dup(st) SKM_sk_dup(ASIdOrRange, st)
# define sk_ASIdOrRange_pop_free(st, free_func) SKM_sk_pop_free(ASIdOrRange, (st), (free_func))
+# define sk_ASIdOrRange_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(ASIdOrRange, (st), (copy_func), (free_func))
# define sk_ASIdOrRange_shift(st) SKM_sk_shift(ASIdOrRange, (st))
# define sk_ASIdOrRange_pop(st) SKM_sk_pop(ASIdOrRange, (st))
# define sk_ASIdOrRange_sort(st) SKM_sk_sort(ASIdOrRange, (st))
@@ -268,6 +272,7 @@ DECLARE_SPECIAL_STACK_OF(OPENSSL_BLOCK, void)
# define sk_ASN1_GENERALSTRING_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(ASN1_GENERALSTRING, (st), (cmp))
# define sk_ASN1_GENERALSTRING_dup(st) SKM_sk_dup(ASN1_GENERALSTRING, st)
# define sk_ASN1_GENERALSTRING_pop_free(st, free_func) SKM_sk_pop_free(ASN1_GENERALSTRING, (st), (free_func))
+# define sk_ASN1_GENERALSTRING_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(ASN1_GENERALSTRING, (st), (copy_func), (free_func))
# define sk_ASN1_GENERALSTRING_shift(st) SKM_sk_shift(ASN1_GENERALSTRING, (st))
# define sk_ASN1_GENERALSTRING_pop(st) SKM_sk_pop(ASN1_GENERALSTRING, (st))
# define sk_ASN1_GENERALSTRING_sort(st) SKM_sk_sort(ASN1_GENERALSTRING, (st))
@@ -289,6 +294,7 @@ DECLARE_SPECIAL_STACK_OF(OPENSSL_BLOCK, void)
# define sk_ASN1_INTEGER_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(ASN1_INTEGER, (st), (cmp))
# define sk_ASN1_INTEGER_dup(st) SKM_sk_dup(ASN1_INTEGER, st)
# define sk_ASN1_INTEGER_pop_free(st, free_func) SKM_sk_pop_free(ASN1_INTEGER, (st), (free_func))
+# define sk_ASN1_INTEGER_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(ASN1_INTEGER, (st), (copy_func), (free_func))
# define sk_ASN1_INTEGER_shift(st) SKM_sk_shift(ASN1_INTEGER, (st))
# define sk_ASN1_INTEGER_pop(st) SKM_sk_pop(ASN1_INTEGER, (st))
# define sk_ASN1_INTEGER_sort(st) SKM_sk_sort(ASN1_INTEGER, (st))
@@ -310,6 +316,7 @@ DECLARE_SPECIAL_STACK_OF(OPENSSL_BLOCK, void)
# define sk_ASN1_OBJECT_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(ASN1_OBJECT, (st), (cmp))
# define sk_ASN1_OBJECT_dup(st) SKM_sk_dup(ASN1_OBJECT, st)
# define sk_ASN1_OBJECT_pop_free(st, free_func) SKM_sk_pop_free(ASN1_OBJECT, (st), (free_func))
+# define sk_ASN1_OBJECT_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(ASN1_OBJECT, (st), (copy_func), (free_func))
# define sk_ASN1_OBJECT_shift(st) SKM_sk_shift(ASN1_OBJECT, (st))
# define sk_ASN1_OBJECT_pop(st) SKM_sk_pop(ASN1_OBJECT, (st))
# define sk_ASN1_OBJECT_sort(st) SKM_sk_sort(ASN1_OBJECT, (st))
@@ -331,6 +338,7 @@ DECLARE_SPECIAL_STACK_OF(OPENSSL_BLOCK, void)
# define sk_ASN1_STRING_TABLE_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(ASN1_STRING_TABLE, (st), (cmp))
# define sk_ASN1_STRING_TABLE_dup(st) SKM_sk_dup(ASN1_STRING_TABLE, st)
# define sk_ASN1_STRING_TABLE_pop_free(st, free_func) SKM_sk_pop_free(ASN1_STRING_TABLE, (st), (free_func))
+# define sk_ASN1_STRING_TABLE_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(ASN1_STRING_TABLE, (st), (copy_func), (free_func))
# define sk_ASN1_STRING_TABLE_shift(st) SKM_sk_shift(ASN1_STRING_TABLE, (st))
# define sk_ASN1_STRING_TABLE_pop(st) SKM_sk_pop(ASN1_STRING_TABLE, (st))
# define sk_ASN1_STRING_TABLE_sort(st) SKM_sk_sort(ASN1_STRING_TABLE, (st))
@@ -352,6 +360,7 @@ DECLARE_SPECIAL_STACK_OF(OPENSSL_BLOCK, void)
# define sk_ASN1_TYPE_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(ASN1_TYPE, (st), (cmp))
# define sk_ASN1_TYPE_dup(st) SKM_sk_dup(ASN1_TYPE, st)
# define sk_ASN1_TYPE_pop_free(st, free_func) SKM_sk_pop_free(ASN1_TYPE, (st), (free_func))
+# define sk_ASN1_TYPE_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(ASN1_TYPE, (st), (copy_func), (free_func))
# define sk_ASN1_TYPE_shift(st) SKM_sk_shift(ASN1_TYPE, (st))
# define sk_ASN1_TYPE_pop(st) SKM_sk_pop(ASN1_TYPE, (st))
# define sk_ASN1_TYPE_sort(st) SKM_sk_sort(ASN1_TYPE, (st))
@@ -373,6 +382,7 @@ DECLARE_SPECIAL_STACK_OF(OPENSSL_BLOCK, void)
# define sk_ASN1_UTF8STRING_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(ASN1_UTF8STRING, (st), (cmp))
# define sk_ASN1_UTF8STRING_dup(st) SKM_sk_dup(ASN1_UTF8STRING, st)
# define sk_ASN1_UTF8STRING_pop_free(st, free_func) SKM_sk_pop_free(ASN1_UTF8STRING, (st), (free_func))
+# define sk_ASN1_UTF8STRING_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(ASN1_UTF8STRING, (st), (copy_func), (free_func))
# define sk_ASN1_UTF8STRING_shift(st) SKM_sk_shift(ASN1_UTF8STRING, (st))
# define sk_ASN1_UTF8STRING_pop(st) SKM_sk_pop(ASN1_UTF8STRING, (st))
# define sk_ASN1_UTF8STRING_sort(st) SKM_sk_sort(ASN1_UTF8STRING, (st))
@@ -394,6 +404,7 @@ DECLARE_SPECIAL_STACK_OF(OPENSSL_BLOCK, void)
# define sk_ASN1_VALUE_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(ASN1_VALUE, (st), (cmp))
# define sk_ASN1_VALUE_dup(st) SKM_sk_dup(ASN1_VALUE, st)
# define sk_ASN1_VALUE_pop_free(st, free_func) SKM_sk_pop_free(ASN1_VALUE, (st), (free_func))
+# define sk_ASN1_VALUE_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(ASN1_VALUE, (st), (copy_func), (free_func))
# define sk_ASN1_VALUE_shift(st) SKM_sk_shift(ASN1_VALUE, (st))
# define sk_ASN1_VALUE_pop(st) SKM_sk_pop(ASN1_VALUE, (st))
# define sk_ASN1_VALUE_sort(st) SKM_sk_sort(ASN1_VALUE, (st))
@@ -415,6 +426,7 @@ DECLARE_SPECIAL_STACK_OF(OPENSSL_BLOCK, void)
# define sk_BIO_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(BIO, (st), (cmp))
# define sk_BIO_dup(st) SKM_sk_dup(BIO, st)
# define sk_BIO_pop_free(st, free_func) SKM_sk_pop_free(BIO, (st), (free_func))
+# define sk_BIO_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(BIO, (st), (copy_func), (free_func))
# define sk_BIO_shift(st) SKM_sk_shift(BIO, (st))
# define sk_BIO_pop(st) SKM_sk_pop(BIO, (st))
# define sk_BIO_sort(st) SKM_sk_sort(BIO, (st))
@@ -436,6 +448,7 @@ DECLARE_SPECIAL_STACK_OF(OPENSSL_BLOCK, void)
# define sk_BY_DIR_ENTRY_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(BY_DIR_ENTRY, (st), (cmp))
# define sk_BY_DIR_ENTRY_dup(st) SKM_sk_dup(BY_DIR_ENTRY, st)
# define sk_BY_DIR_ENTRY_pop_free(st, free_func) SKM_sk_pop_free(BY_DIR_ENTRY, (st), (free_func))
+# define sk_BY_DIR_ENTRY_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(BY_DIR_ENTRY, (st), (copy_func), (free_func))
# define sk_BY_DIR_ENTRY_shift(st) SKM_sk_shift(BY_DIR_ENTRY, (st))
# define sk_BY_DIR_ENTRY_pop(st) SKM_sk_pop(BY_DIR_ENTRY, (st))
# define sk_BY_DIR_ENTRY_sort(st) SKM_sk_sort(BY_DIR_ENTRY, (st))
@@ -457,6 +470,7 @@ DECLARE_SPECIAL_STACK_OF(OPENSSL_BLOCK, void)
# define sk_BY_DIR_HASH_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(BY_DIR_HASH, (st), (cmp))
# define sk_BY_DIR_HASH_dup(st) SKM_sk_dup(BY_DIR_HASH, st)
# define sk_BY_DIR_HASH_pop_free(st, free_func) SKM_sk_pop_free(BY_DIR_HASH, (st), (free_func))
+# define sk_BY_DIR_HASH_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(BY_DIR_HASH, (st), (copy_func), (free_func))
# define sk_BY_DIR_HASH_shift(st) SKM_sk_shift(BY_DIR_HASH, (st))
# define sk_BY_DIR_HASH_pop(st) SKM_sk_pop(BY_DIR_HASH, (st))
# define sk_BY_DIR_HASH_sort(st) SKM_sk_sort(BY_DIR_HASH, (st))
@@ -478,10 +492,33 @@ DECLARE_SPECIAL_STACK_OF(OPENSSL_BLOCK, void)
# define sk_CMS_CertificateChoices_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(CMS_CertificateChoices, (st), (cmp))
# define sk_CMS_CertificateChoices_dup(st) SKM_sk_dup(CMS_CertificateChoices, st)
# define sk_CMS_CertificateChoices_pop_free(st, free_func) SKM_sk_pop_free(CMS_CertificateChoices, (st), (free_func))
+# define sk_CMS_CertificateChoices_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(CMS_CertificateChoices, (st), (copy_func), (free_func))
# define sk_CMS_CertificateChoices_shift(st) SKM_sk_shift(CMS_CertificateChoices, (st))
# define sk_CMS_CertificateChoices_pop(st) SKM_sk_pop(CMS_CertificateChoices, (st))
# define sk_CMS_CertificateChoices_sort(st) SKM_sk_sort(CMS_CertificateChoices, (st))
# define sk_CMS_CertificateChoices_is_sorted(st) SKM_sk_is_sorted(CMS_CertificateChoices, (st))
+# define sk_CMS_RecipientEncryptedKey_new(cmp) SKM_sk_new(CMS_RecipientEncryptedKey, (cmp))
+# define sk_CMS_RecipientEncryptedKey_new_null() SKM_sk_new_null(CMS_RecipientEncryptedKey)
+# define sk_CMS_RecipientEncryptedKey_free(st) SKM_sk_free(CMS_RecipientEncryptedKey, (st))
+# define sk_CMS_RecipientEncryptedKey_num(st) SKM_sk_num(CMS_RecipientEncryptedKey, (st))
+# define sk_CMS_RecipientEncryptedKey_value(st, i) SKM_sk_value(CMS_RecipientEncryptedKey, (st), (i))
+# define sk_CMS_RecipientEncryptedKey_set(st, i, val) SKM_sk_set(CMS_RecipientEncryptedKey, (st), (i), (val))
+# define sk_CMS_RecipientEncryptedKey_zero(st) SKM_sk_zero(CMS_RecipientEncryptedKey, (st))
+# define sk_CMS_RecipientEncryptedKey_push(st, val) SKM_sk_push(CMS_RecipientEncryptedKey, (st), (val))
+# define sk_CMS_RecipientEncryptedKey_unshift(st, val) SKM_sk_unshift(CMS_RecipientEncryptedKey, (st), (val))
+# define sk_CMS_RecipientEncryptedKey_find(st, val) SKM_sk_find(CMS_RecipientEncryptedKey, (st), (val))
+# define sk_CMS_RecipientEncryptedKey_find_ex(st, val) SKM_sk_find_ex(CMS_RecipientEncryptedKey, (st), (val))
+# define sk_CMS_RecipientEncryptedKey_delete(st, i) SKM_sk_delete(CMS_RecipientEncryptedKey, (st), (i))
+# define sk_CMS_RecipientEncryptedKey_delete_ptr(st, ptr) SKM_sk_delete_ptr(CMS_RecipientEncryptedKey, (st), (ptr))
+# define sk_CMS_RecipientEncryptedKey_insert(st, val, i) SKM_sk_insert(CMS_RecipientEncryptedKey, (st), (val), (i))
+# define sk_CMS_RecipientEncryptedKey_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(CMS_RecipientEncryptedKey, (st), (cmp))
+# define sk_CMS_RecipientEncryptedKey_dup(st) SKM_sk_dup(CMS_RecipientEncryptedKey, st)
+# define sk_CMS_RecipientEncryptedKey_pop_free(st, free_func) SKM_sk_pop_free(CMS_RecipientEncryptedKey, (st), (free_func))
+# define sk_CMS_RecipientEncryptedKey_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(CMS_RecipientEncryptedKey, (st), (copy_func), (free_func))
+# define sk_CMS_RecipientEncryptedKey_shift(st) SKM_sk_shift(CMS_RecipientEncryptedKey, (st))
+# define sk_CMS_RecipientEncryptedKey_pop(st) SKM_sk_pop(CMS_RecipientEncryptedKey, (st))
+# define sk_CMS_RecipientEncryptedKey_sort(st) SKM_sk_sort(CMS_RecipientEncryptedKey, (st))
+# define sk_CMS_RecipientEncryptedKey_is_sorted(st) SKM_sk_is_sorted(CMS_RecipientEncryptedKey, (st))
# define sk_CMS_RecipientInfo_new(cmp) SKM_sk_new(CMS_RecipientInfo, (cmp))
# define sk_CMS_RecipientInfo_new_null() SKM_sk_new_null(CMS_RecipientInfo)
# define sk_CMS_RecipientInfo_free(st) SKM_sk_free(CMS_RecipientInfo, (st))
@@ -499,6 +536,7 @@ DECLARE_SPECIAL_STACK_OF(OPENSSL_BLOCK, void)
# define sk_CMS_RecipientInfo_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(CMS_RecipientInfo, (st), (cmp))
# define sk_CMS_RecipientInfo_dup(st) SKM_sk_dup(CMS_RecipientInfo, st)
# define sk_CMS_RecipientInfo_pop_free(st, free_func) SKM_sk_pop_free(CMS_RecipientInfo, (st), (free_func))
+# define sk_CMS_RecipientInfo_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(CMS_RecipientInfo, (st), (copy_func), (free_func))
# define sk_CMS_RecipientInfo_shift(st) SKM_sk_shift(CMS_RecipientInfo, (st))
# define sk_CMS_RecipientInfo_pop(st) SKM_sk_pop(CMS_RecipientInfo, (st))
# define sk_CMS_RecipientInfo_sort(st) SKM_sk_sort(CMS_RecipientInfo, (st))
@@ -520,6 +558,7 @@ DECLARE_SPECIAL_STACK_OF(OPENSSL_BLOCK, void)
# define sk_CMS_RevocationInfoChoice_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(CMS_RevocationInfoChoice, (st), (cmp))
# define sk_CMS_RevocationInfoChoice_dup(st) SKM_sk_dup(CMS_RevocationInfoChoice, st)
# define sk_CMS_RevocationInfoChoice_pop_free(st, free_func) SKM_sk_pop_free(CMS_RevocationInfoChoice, (st), (free_func))
+# define sk_CMS_RevocationInfoChoice_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(CMS_RevocationInfoChoice, (st), (copy_func), (free_func))
# define sk_CMS_RevocationInfoChoice_shift(st) SKM_sk_shift(CMS_RevocationInfoChoice, (st))
# define sk_CMS_RevocationInfoChoice_pop(st) SKM_sk_pop(CMS_RevocationInfoChoice, (st))
# define sk_CMS_RevocationInfoChoice_sort(st) SKM_sk_sort(CMS_RevocationInfoChoice, (st))
@@ -541,6 +580,7 @@ DECLARE_SPECIAL_STACK_OF(OPENSSL_BLOCK, void)
# define sk_CMS_SignerInfo_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(CMS_SignerInfo, (st), (cmp))
# define sk_CMS_SignerInfo_dup(st) SKM_sk_dup(CMS_SignerInfo, st)
# define sk_CMS_SignerInfo_pop_free(st, free_func) SKM_sk_pop_free(CMS_SignerInfo, (st), (free_func))
+# define sk_CMS_SignerInfo_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(CMS_SignerInfo, (st), (copy_func), (free_func))
# define sk_CMS_SignerInfo_shift(st) SKM_sk_shift(CMS_SignerInfo, (st))
# define sk_CMS_SignerInfo_pop(st) SKM_sk_pop(CMS_SignerInfo, (st))
# define sk_CMS_SignerInfo_sort(st) SKM_sk_sort(CMS_SignerInfo, (st))
@@ -562,6 +602,7 @@ DECLARE_SPECIAL_STACK_OF(OPENSSL_BLOCK, void)
# define sk_CONF_IMODULE_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(CONF_IMODULE, (st), (cmp))
# define sk_CONF_IMODULE_dup(st) SKM_sk_dup(CONF_IMODULE, st)
# define sk_CONF_IMODULE_pop_free(st, free_func) SKM_sk_pop_free(CONF_IMODULE, (st), (free_func))
+# define sk_CONF_IMODULE_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(CONF_IMODULE, (st), (copy_func), (free_func))
# define sk_CONF_IMODULE_shift(st) SKM_sk_shift(CONF_IMODULE, (st))
# define sk_CONF_IMODULE_pop(st) SKM_sk_pop(CONF_IMODULE, (st))
# define sk_CONF_IMODULE_sort(st) SKM_sk_sort(CONF_IMODULE, (st))
@@ -583,6 +624,7 @@ DECLARE_SPECIAL_STACK_OF(OPENSSL_BLOCK, void)
# define sk_CONF_MODULE_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(CONF_MODULE, (st), (cmp))
# define sk_CONF_MODULE_dup(st) SKM_sk_dup(CONF_MODULE, st)
# define sk_CONF_MODULE_pop_free(st, free_func) SKM_sk_pop_free(CONF_MODULE, (st), (free_func))
+# define sk_CONF_MODULE_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(CONF_MODULE, (st), (copy_func), (free_func))
# define sk_CONF_MODULE_shift(st) SKM_sk_shift(CONF_MODULE, (st))
# define sk_CONF_MODULE_pop(st) SKM_sk_pop(CONF_MODULE, (st))
# define sk_CONF_MODULE_sort(st) SKM_sk_sort(CONF_MODULE, (st))
@@ -604,6 +646,7 @@ DECLARE_SPECIAL_STACK_OF(OPENSSL_BLOCK, void)
# define sk_CONF_VALUE_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(CONF_VALUE, (st), (cmp))
# define sk_CONF_VALUE_dup(st) SKM_sk_dup(CONF_VALUE, st)
# define sk_CONF_VALUE_pop_free(st, free_func) SKM_sk_pop_free(CONF_VALUE, (st), (free_func))
+# define sk_CONF_VALUE_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(CONF_VALUE, (st), (copy_func), (free_func))
# define sk_CONF_VALUE_shift(st) SKM_sk_shift(CONF_VALUE, (st))
# define sk_CONF_VALUE_pop(st) SKM_sk_pop(CONF_VALUE, (st))
# define sk_CONF_VALUE_sort(st) SKM_sk_sort(CONF_VALUE, (st))
@@ -625,6 +668,7 @@ DECLARE_SPECIAL_STACK_OF(OPENSSL_BLOCK, void)
# define sk_CRYPTO_EX_DATA_FUNCS_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(CRYPTO_EX_DATA_FUNCS, (st), (cmp))
# define sk_CRYPTO_EX_DATA_FUNCS_dup(st) SKM_sk_dup(CRYPTO_EX_DATA_FUNCS, st)
# define sk_CRYPTO_EX_DATA_FUNCS_pop_free(st, free_func) SKM_sk_pop_free(CRYPTO_EX_DATA_FUNCS, (st), (free_func))
+# define sk_CRYPTO_EX_DATA_FUNCS_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(CRYPTO_EX_DATA_FUNCS, (st), (copy_func), (free_func))
# define sk_CRYPTO_EX_DATA_FUNCS_shift(st) SKM_sk_shift(CRYPTO_EX_DATA_FUNCS, (st))
# define sk_CRYPTO_EX_DATA_FUNCS_pop(st) SKM_sk_pop(CRYPTO_EX_DATA_FUNCS, (st))
# define sk_CRYPTO_EX_DATA_FUNCS_sort(st) SKM_sk_sort(CRYPTO_EX_DATA_FUNCS, (st))
@@ -646,6 +690,7 @@ DECLARE_SPECIAL_STACK_OF(OPENSSL_BLOCK, void)
# define sk_CRYPTO_dynlock_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(CRYPTO_dynlock, (st), (cmp))
# define sk_CRYPTO_dynlock_dup(st) SKM_sk_dup(CRYPTO_dynlock, st)
# define sk_CRYPTO_dynlock_pop_free(st, free_func) SKM_sk_pop_free(CRYPTO_dynlock, (st), (free_func))
+# define sk_CRYPTO_dynlock_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(CRYPTO_dynlock, (st), (copy_func), (free_func))
# define sk_CRYPTO_dynlock_shift(st) SKM_sk_shift(CRYPTO_dynlock, (st))
# define sk_CRYPTO_dynlock_pop(st) SKM_sk_pop(CRYPTO_dynlock, (st))
# define sk_CRYPTO_dynlock_sort(st) SKM_sk_sort(CRYPTO_dynlock, (st))
@@ -667,6 +712,7 @@ DECLARE_SPECIAL_STACK_OF(OPENSSL_BLOCK, void)
# define sk_DIST_POINT_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(DIST_POINT, (st), (cmp))
# define sk_DIST_POINT_dup(st) SKM_sk_dup(DIST_POINT, st)
# define sk_DIST_POINT_pop_free(st, free_func) SKM_sk_pop_free(DIST_POINT, (st), (free_func))
+# define sk_DIST_POINT_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(DIST_POINT, (st), (copy_func), (free_func))
# define sk_DIST_POINT_shift(st) SKM_sk_shift(DIST_POINT, (st))
# define sk_DIST_POINT_pop(st) SKM_sk_pop(DIST_POINT, (st))
# define sk_DIST_POINT_sort(st) SKM_sk_sort(DIST_POINT, (st))
@@ -688,6 +734,7 @@ DECLARE_SPECIAL_STACK_OF(OPENSSL_BLOCK, void)
# define sk_ENGINE_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(ENGINE, (st), (cmp))
# define sk_ENGINE_dup(st) SKM_sk_dup(ENGINE, st)
# define sk_ENGINE_pop_free(st, free_func) SKM_sk_pop_free(ENGINE, (st), (free_func))
+# define sk_ENGINE_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(ENGINE, (st), (copy_func), (free_func))
# define sk_ENGINE_shift(st) SKM_sk_shift(ENGINE, (st))
# define sk_ENGINE_pop(st) SKM_sk_pop(ENGINE, (st))
# define sk_ENGINE_sort(st) SKM_sk_sort(ENGINE, (st))
@@ -709,6 +756,7 @@ DECLARE_SPECIAL_STACK_OF(OPENSSL_BLOCK, void)
# define sk_ENGINE_CLEANUP_ITEM_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(ENGINE_CLEANUP_ITEM, (st), (cmp))
# define sk_ENGINE_CLEANUP_ITEM_dup(st) SKM_sk_dup(ENGINE_CLEANUP_ITEM, st)
# define sk_ENGINE_CLEANUP_ITEM_pop_free(st, free_func) SKM_sk_pop_free(ENGINE_CLEANUP_ITEM, (st), (free_func))
+# define sk_ENGINE_CLEANUP_ITEM_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(ENGINE_CLEANUP_ITEM, (st), (copy_func), (free_func))
# define sk_ENGINE_CLEANUP_ITEM_shift(st) SKM_sk_shift(ENGINE_CLEANUP_ITEM, (st))
# define sk_ENGINE_CLEANUP_ITEM_pop(st) SKM_sk_pop(ENGINE_CLEANUP_ITEM, (st))
# define sk_ENGINE_CLEANUP_ITEM_sort(st) SKM_sk_sort(ENGINE_CLEANUP_ITEM, (st))
@@ -730,6 +778,7 @@ DECLARE_SPECIAL_STACK_OF(OPENSSL_BLOCK, void)
# define sk_ESS_CERT_ID_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(ESS_CERT_ID, (st), (cmp))
# define sk_ESS_CERT_ID_dup(st) SKM_sk_dup(ESS_CERT_ID, st)
# define sk_ESS_CERT_ID_pop_free(st, free_func) SKM_sk_pop_free(ESS_CERT_ID, (st), (free_func))
+# define sk_ESS_CERT_ID_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(ESS_CERT_ID, (st), (copy_func), (free_func))
# define sk_ESS_CERT_ID_shift(st) SKM_sk_shift(ESS_CERT_ID, (st))
# define sk_ESS_CERT_ID_pop(st) SKM_sk_pop(ESS_CERT_ID, (st))
# define sk_ESS_CERT_ID_sort(st) SKM_sk_sort(ESS_CERT_ID, (st))
@@ -751,6 +800,7 @@ DECLARE_SPECIAL_STACK_OF(OPENSSL_BLOCK, void)
# define sk_EVP_MD_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(EVP_MD, (st), (cmp))
# define sk_EVP_MD_dup(st) SKM_sk_dup(EVP_MD, st)
# define sk_EVP_MD_pop_free(st, free_func) SKM_sk_pop_free(EVP_MD, (st), (free_func))
+# define sk_EVP_MD_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(EVP_MD, (st), (copy_func), (free_func))
# define sk_EVP_MD_shift(st) SKM_sk_shift(EVP_MD, (st))
# define sk_EVP_MD_pop(st) SKM_sk_pop(EVP_MD, (st))
# define sk_EVP_MD_sort(st) SKM_sk_sort(EVP_MD, (st))
@@ -772,6 +822,7 @@ DECLARE_SPECIAL_STACK_OF(OPENSSL_BLOCK, void)
# define sk_EVP_PBE_CTL_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(EVP_PBE_CTL, (st), (cmp))
# define sk_EVP_PBE_CTL_dup(st) SKM_sk_dup(EVP_PBE_CTL, st)
# define sk_EVP_PBE_CTL_pop_free(st, free_func) SKM_sk_pop_free(EVP_PBE_CTL, (st), (free_func))
+# define sk_EVP_PBE_CTL_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(EVP_PBE_CTL, (st), (copy_func), (free_func))
# define sk_EVP_PBE_CTL_shift(st) SKM_sk_shift(EVP_PBE_CTL, (st))
# define sk_EVP_PBE_CTL_pop(st) SKM_sk_pop(EVP_PBE_CTL, (st))
# define sk_EVP_PBE_CTL_sort(st) SKM_sk_sort(EVP_PBE_CTL, (st))
@@ -793,6 +844,7 @@ DECLARE_SPECIAL_STACK_OF(OPENSSL_BLOCK, void)
# define sk_EVP_PKEY_ASN1_METHOD_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(EVP_PKEY_ASN1_METHOD, (st), (cmp))
# define sk_EVP_PKEY_ASN1_METHOD_dup(st) SKM_sk_dup(EVP_PKEY_ASN1_METHOD, st)
# define sk_EVP_PKEY_ASN1_METHOD_pop_free(st, free_func) SKM_sk_pop_free(EVP_PKEY_ASN1_METHOD, (st), (free_func))
+# define sk_EVP_PKEY_ASN1_METHOD_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(EVP_PKEY_ASN1_METHOD, (st), (copy_func), (free_func))
# define sk_EVP_PKEY_ASN1_METHOD_shift(st) SKM_sk_shift(EVP_PKEY_ASN1_METHOD, (st))
# define sk_EVP_PKEY_ASN1_METHOD_pop(st) SKM_sk_pop(EVP_PKEY_ASN1_METHOD, (st))
# define sk_EVP_PKEY_ASN1_METHOD_sort(st) SKM_sk_sort(EVP_PKEY_ASN1_METHOD, (st))
@@ -814,6 +866,7 @@ DECLARE_SPECIAL_STACK_OF(OPENSSL_BLOCK, void)
# define sk_EVP_PKEY_METHOD_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(EVP_PKEY_METHOD, (st), (cmp))
# define sk_EVP_PKEY_METHOD_dup(st) SKM_sk_dup(EVP_PKEY_METHOD, st)
# define sk_EVP_PKEY_METHOD_pop_free(st, free_func) SKM_sk_pop_free(EVP_PKEY_METHOD, (st), (free_func))
+# define sk_EVP_PKEY_METHOD_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(EVP_PKEY_METHOD, (st), (copy_func), (free_func))
# define sk_EVP_PKEY_METHOD_shift(st) SKM_sk_shift(EVP_PKEY_METHOD, (st))
# define sk_EVP_PKEY_METHOD_pop(st) SKM_sk_pop(EVP_PKEY_METHOD, (st))
# define sk_EVP_PKEY_METHOD_sort(st) SKM_sk_sort(EVP_PKEY_METHOD, (st))
@@ -835,6 +888,7 @@ DECLARE_SPECIAL_STACK_OF(OPENSSL_BLOCK, void)
# define sk_GENERAL_NAME_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(GENERAL_NAME, (st), (cmp))
# define sk_GENERAL_NAME_dup(st) SKM_sk_dup(GENERAL_NAME, st)
# define sk_GENERAL_NAME_pop_free(st, free_func) SKM_sk_pop_free(GENERAL_NAME, (st), (free_func))
+# define sk_GENERAL_NAME_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(GENERAL_NAME, (st), (copy_func), (free_func))
# define sk_GENERAL_NAME_shift(st) SKM_sk_shift(GENERAL_NAME, (st))
# define sk_GENERAL_NAME_pop(st) SKM_sk_pop(GENERAL_NAME, (st))
# define sk_GENERAL_NAME_sort(st) SKM_sk_sort(GENERAL_NAME, (st))
@@ -856,6 +910,7 @@ DECLARE_SPECIAL_STACK_OF(OPENSSL_BLOCK, void)
# define sk_GENERAL_NAMES_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(GENERAL_NAMES, (st), (cmp))
# define sk_GENERAL_NAMES_dup(st) SKM_sk_dup(GENERAL_NAMES, st)
# define sk_GENERAL_NAMES_pop_free(st, free_func) SKM_sk_pop_free(GENERAL_NAMES, (st), (free_func))
+# define sk_GENERAL_NAMES_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(GENERAL_NAMES, (st), (copy_func), (free_func))
# define sk_GENERAL_NAMES_shift(st) SKM_sk_shift(GENERAL_NAMES, (st))
# define sk_GENERAL_NAMES_pop(st) SKM_sk_pop(GENERAL_NAMES, (st))
# define sk_GENERAL_NAMES_sort(st) SKM_sk_sort(GENERAL_NAMES, (st))
@@ -877,6 +932,7 @@ DECLARE_SPECIAL_STACK_OF(OPENSSL_BLOCK, void)
# define sk_GENERAL_SUBTREE_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(GENERAL_SUBTREE, (st), (cmp))
# define sk_GENERAL_SUBTREE_dup(st) SKM_sk_dup(GENERAL_SUBTREE, st)
# define sk_GENERAL_SUBTREE_pop_free(st, free_func) SKM_sk_pop_free(GENERAL_SUBTREE, (st), (free_func))
+# define sk_GENERAL_SUBTREE_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(GENERAL_SUBTREE, (st), (copy_func), (free_func))
# define sk_GENERAL_SUBTREE_shift(st) SKM_sk_shift(GENERAL_SUBTREE, (st))
# define sk_GENERAL_SUBTREE_pop(st) SKM_sk_pop(GENERAL_SUBTREE, (st))
# define sk_GENERAL_SUBTREE_sort(st) SKM_sk_sort(GENERAL_SUBTREE, (st))
@@ -898,6 +954,7 @@ DECLARE_SPECIAL_STACK_OF(OPENSSL_BLOCK, void)
# define sk_IPAddressFamily_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(IPAddressFamily, (st), (cmp))
# define sk_IPAddressFamily_dup(st) SKM_sk_dup(IPAddressFamily, st)
# define sk_IPAddressFamily_pop_free(st, free_func) SKM_sk_pop_free(IPAddressFamily, (st), (free_func))
+# define sk_IPAddressFamily_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(IPAddressFamily, (st), (copy_func), (free_func))
# define sk_IPAddressFamily_shift(st) SKM_sk_shift(IPAddressFamily, (st))
# define sk_IPAddressFamily_pop(st) SKM_sk_pop(IPAddressFamily, (st))
# define sk_IPAddressFamily_sort(st) SKM_sk_sort(IPAddressFamily, (st))
@@ -919,6 +976,7 @@ DECLARE_SPECIAL_STACK_OF(OPENSSL_BLOCK, void)
# define sk_IPAddressOrRange_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(IPAddressOrRange, (st), (cmp))
# define sk_IPAddressOrRange_dup(st) SKM_sk_dup(IPAddressOrRange, st)
# define sk_IPAddressOrRange_pop_free(st, free_func) SKM_sk_pop_free(IPAddressOrRange, (st), (free_func))
+# define sk_IPAddressOrRange_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(IPAddressOrRange, (st), (copy_func), (free_func))
# define sk_IPAddressOrRange_shift(st) SKM_sk_shift(IPAddressOrRange, (st))
# define sk_IPAddressOrRange_pop(st) SKM_sk_pop(IPAddressOrRange, (st))
# define sk_IPAddressOrRange_sort(st) SKM_sk_sort(IPAddressOrRange, (st))
@@ -940,6 +998,7 @@ DECLARE_SPECIAL_STACK_OF(OPENSSL_BLOCK, void)
# define sk_KRB5_APREQBODY_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(KRB5_APREQBODY, (st), (cmp))
# define sk_KRB5_APREQBODY_dup(st) SKM_sk_dup(KRB5_APREQBODY, st)
# define sk_KRB5_APREQBODY_pop_free(st, free_func) SKM_sk_pop_free(KRB5_APREQBODY, (st), (free_func))
+# define sk_KRB5_APREQBODY_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(KRB5_APREQBODY, (st), (copy_func), (free_func))
# define sk_KRB5_APREQBODY_shift(st) SKM_sk_shift(KRB5_APREQBODY, (st))
# define sk_KRB5_APREQBODY_pop(st) SKM_sk_pop(KRB5_APREQBODY, (st))
# define sk_KRB5_APREQBODY_sort(st) SKM_sk_sort(KRB5_APREQBODY, (st))
@@ -961,6 +1020,7 @@ DECLARE_SPECIAL_STACK_OF(OPENSSL_BLOCK, void)
# define sk_KRB5_AUTHDATA_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(KRB5_AUTHDATA, (st), (cmp))
# define sk_KRB5_AUTHDATA_dup(st) SKM_sk_dup(KRB5_AUTHDATA, st)
# define sk_KRB5_AUTHDATA_pop_free(st, free_func) SKM_sk_pop_free(KRB5_AUTHDATA, (st), (free_func))
+# define sk_KRB5_AUTHDATA_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(KRB5_AUTHDATA, (st), (copy_func), (free_func))
# define sk_KRB5_AUTHDATA_shift(st) SKM_sk_shift(KRB5_AUTHDATA, (st))
# define sk_KRB5_AUTHDATA_pop(st) SKM_sk_pop(KRB5_AUTHDATA, (st))
# define sk_KRB5_AUTHDATA_sort(st) SKM_sk_sort(KRB5_AUTHDATA, (st))
@@ -982,6 +1042,7 @@ DECLARE_SPECIAL_STACK_OF(OPENSSL_BLOCK, void)
# define sk_KRB5_AUTHENTBODY_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(KRB5_AUTHENTBODY, (st), (cmp))
# define sk_KRB5_AUTHENTBODY_dup(st) SKM_sk_dup(KRB5_AUTHENTBODY, st)
# define sk_KRB5_AUTHENTBODY_pop_free(st, free_func) SKM_sk_pop_free(KRB5_AUTHENTBODY, (st), (free_func))
+# define sk_KRB5_AUTHENTBODY_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(KRB5_AUTHENTBODY, (st), (copy_func), (free_func))
# define sk_KRB5_AUTHENTBODY_shift(st) SKM_sk_shift(KRB5_AUTHENTBODY, (st))
# define sk_KRB5_AUTHENTBODY_pop(st) SKM_sk_pop(KRB5_AUTHENTBODY, (st))
# define sk_KRB5_AUTHENTBODY_sort(st) SKM_sk_sort(KRB5_AUTHENTBODY, (st))
@@ -1003,6 +1064,7 @@ DECLARE_SPECIAL_STACK_OF(OPENSSL_BLOCK, void)
# define sk_KRB5_CHECKSUM_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(KRB5_CHECKSUM, (st), (cmp))
# define sk_KRB5_CHECKSUM_dup(st) SKM_sk_dup(KRB5_CHECKSUM, st)
# define sk_KRB5_CHECKSUM_pop_free(st, free_func) SKM_sk_pop_free(KRB5_CHECKSUM, (st), (free_func))
+# define sk_KRB5_CHECKSUM_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(KRB5_CHECKSUM, (st), (copy_func), (free_func))
# define sk_KRB5_CHECKSUM_shift(st) SKM_sk_shift(KRB5_CHECKSUM, (st))
# define sk_KRB5_CHECKSUM_pop(st) SKM_sk_pop(KRB5_CHECKSUM, (st))
# define sk_KRB5_CHECKSUM_sort(st) SKM_sk_sort(KRB5_CHECKSUM, (st))
@@ -1024,6 +1086,7 @@ DECLARE_SPECIAL_STACK_OF(OPENSSL_BLOCK, void)
# define sk_KRB5_ENCDATA_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(KRB5_ENCDATA, (st), (cmp))
# define sk_KRB5_ENCDATA_dup(st) SKM_sk_dup(KRB5_ENCDATA, st)
# define sk_KRB5_ENCDATA_pop_free(st, free_func) SKM_sk_pop_free(KRB5_ENCDATA, (st), (free_func))
+# define sk_KRB5_ENCDATA_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(KRB5_ENCDATA, (st), (copy_func), (free_func))
# define sk_KRB5_ENCDATA_shift(st) SKM_sk_shift(KRB5_ENCDATA, (st))
# define sk_KRB5_ENCDATA_pop(st) SKM_sk_pop(KRB5_ENCDATA, (st))
# define sk_KRB5_ENCDATA_sort(st) SKM_sk_sort(KRB5_ENCDATA, (st))
@@ -1045,6 +1108,7 @@ DECLARE_SPECIAL_STACK_OF(OPENSSL_BLOCK, void)
# define sk_KRB5_ENCKEY_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(KRB5_ENCKEY, (st), (cmp))
# define sk_KRB5_ENCKEY_dup(st) SKM_sk_dup(KRB5_ENCKEY, st)
# define sk_KRB5_ENCKEY_pop_free(st, free_func) SKM_sk_pop_free(KRB5_ENCKEY, (st), (free_func))
+# define sk_KRB5_ENCKEY_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(KRB5_ENCKEY, (st), (copy_func), (free_func))
# define sk_KRB5_ENCKEY_shift(st) SKM_sk_shift(KRB5_ENCKEY, (st))
# define sk_KRB5_ENCKEY_pop(st) SKM_sk_pop(KRB5_ENCKEY, (st))
# define sk_KRB5_ENCKEY_sort(st) SKM_sk_sort(KRB5_ENCKEY, (st))
@@ -1066,6 +1130,7 @@ DECLARE_SPECIAL_STACK_OF(OPENSSL_BLOCK, void)
# define sk_KRB5_PRINCNAME_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(KRB5_PRINCNAME, (st), (cmp))
# define sk_KRB5_PRINCNAME_dup(st) SKM_sk_dup(KRB5_PRINCNAME, st)
# define sk_KRB5_PRINCNAME_pop_free(st, free_func) SKM_sk_pop_free(KRB5_PRINCNAME, (st), (free_func))
+# define sk_KRB5_PRINCNAME_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(KRB5_PRINCNAME, (st), (copy_func), (free_func))
# define sk_KRB5_PRINCNAME_shift(st) SKM_sk_shift(KRB5_PRINCNAME, (st))
# define sk_KRB5_PRINCNAME_pop(st) SKM_sk_pop(KRB5_PRINCNAME, (st))
# define sk_KRB5_PRINCNAME_sort(st) SKM_sk_sort(KRB5_PRINCNAME, (st))
@@ -1087,6 +1152,7 @@ DECLARE_SPECIAL_STACK_OF(OPENSSL_BLOCK, void)
# define sk_KRB5_TKTBODY_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(KRB5_TKTBODY, (st), (cmp))
# define sk_KRB5_TKTBODY_dup(st) SKM_sk_dup(KRB5_TKTBODY, st)
# define sk_KRB5_TKTBODY_pop_free(st, free_func) SKM_sk_pop_free(KRB5_TKTBODY, (st), (free_func))
+# define sk_KRB5_TKTBODY_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(KRB5_TKTBODY, (st), (copy_func), (free_func))
# define sk_KRB5_TKTBODY_shift(st) SKM_sk_shift(KRB5_TKTBODY, (st))
# define sk_KRB5_TKTBODY_pop(st) SKM_sk_pop(KRB5_TKTBODY, (st))
# define sk_KRB5_TKTBODY_sort(st) SKM_sk_sort(KRB5_TKTBODY, (st))
@@ -1108,6 +1174,7 @@ DECLARE_SPECIAL_STACK_OF(OPENSSL_BLOCK, void)
# define sk_MEM_OBJECT_DATA_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(MEM_OBJECT_DATA, (st), (cmp))
# define sk_MEM_OBJECT_DATA_dup(st) SKM_sk_dup(MEM_OBJECT_DATA, st)
# define sk_MEM_OBJECT_DATA_pop_free(st, free_func) SKM_sk_pop_free(MEM_OBJECT_DATA, (st), (free_func))
+# define sk_MEM_OBJECT_DATA_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(MEM_OBJECT_DATA, (st), (copy_func), (free_func))
# define sk_MEM_OBJECT_DATA_shift(st) SKM_sk_shift(MEM_OBJECT_DATA, (st))
# define sk_MEM_OBJECT_DATA_pop(st) SKM_sk_pop(MEM_OBJECT_DATA, (st))
# define sk_MEM_OBJECT_DATA_sort(st) SKM_sk_sort(MEM_OBJECT_DATA, (st))
@@ -1129,6 +1196,7 @@ DECLARE_SPECIAL_STACK_OF(OPENSSL_BLOCK, void)
# define sk_MIME_HEADER_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(MIME_HEADER, (st), (cmp))
# define sk_MIME_HEADER_dup(st) SKM_sk_dup(MIME_HEADER, st)
# define sk_MIME_HEADER_pop_free(st, free_func) SKM_sk_pop_free(MIME_HEADER, (st), (free_func))
+# define sk_MIME_HEADER_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(MIME_HEADER, (st), (copy_func), (free_func))
# define sk_MIME_HEADER_shift(st) SKM_sk_shift(MIME_HEADER, (st))
# define sk_MIME_HEADER_pop(st) SKM_sk_pop(MIME_HEADER, (st))
# define sk_MIME_HEADER_sort(st) SKM_sk_sort(MIME_HEADER, (st))
@@ -1150,6 +1218,7 @@ DECLARE_SPECIAL_STACK_OF(OPENSSL_BLOCK, void)
# define sk_MIME_PARAM_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(MIME_PARAM, (st), (cmp))
# define sk_MIME_PARAM_dup(st) SKM_sk_dup(MIME_PARAM, st)
# define sk_MIME_PARAM_pop_free(st, free_func) SKM_sk_pop_free(MIME_PARAM, (st), (free_func))
+# define sk_MIME_PARAM_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(MIME_PARAM, (st), (copy_func), (free_func))
# define sk_MIME_PARAM_shift(st) SKM_sk_shift(MIME_PARAM, (st))
# define sk_MIME_PARAM_pop(st) SKM_sk_pop(MIME_PARAM, (st))
# define sk_MIME_PARAM_sort(st) SKM_sk_sort(MIME_PARAM, (st))
@@ -1171,6 +1240,7 @@ DECLARE_SPECIAL_STACK_OF(OPENSSL_BLOCK, void)
# define sk_NAME_FUNCS_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(NAME_FUNCS, (st), (cmp))
# define sk_NAME_FUNCS_dup(st) SKM_sk_dup(NAME_FUNCS, st)
# define sk_NAME_FUNCS_pop_free(st, free_func) SKM_sk_pop_free(NAME_FUNCS, (st), (free_func))
+# define sk_NAME_FUNCS_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(NAME_FUNCS, (st), (copy_func), (free_func))
# define sk_NAME_FUNCS_shift(st) SKM_sk_shift(NAME_FUNCS, (st))
# define sk_NAME_FUNCS_pop(st) SKM_sk_pop(NAME_FUNCS, (st))
# define sk_NAME_FUNCS_sort(st) SKM_sk_sort(NAME_FUNCS, (st))
@@ -1192,6 +1262,7 @@ DECLARE_SPECIAL_STACK_OF(OPENSSL_BLOCK, void)
# define sk_OCSP_CERTID_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(OCSP_CERTID, (st), (cmp))
# define sk_OCSP_CERTID_dup(st) SKM_sk_dup(OCSP_CERTID, st)
# define sk_OCSP_CERTID_pop_free(st, free_func) SKM_sk_pop_free(OCSP_CERTID, (st), (free_func))
+# define sk_OCSP_CERTID_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(OCSP_CERTID, (st), (copy_func), (free_func))
# define sk_OCSP_CERTID_shift(st) SKM_sk_shift(OCSP_CERTID, (st))
# define sk_OCSP_CERTID_pop(st) SKM_sk_pop(OCSP_CERTID, (st))
# define sk_OCSP_CERTID_sort(st) SKM_sk_sort(OCSP_CERTID, (st))
@@ -1213,6 +1284,7 @@ DECLARE_SPECIAL_STACK_OF(OPENSSL_BLOCK, void)
# define sk_OCSP_ONEREQ_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(OCSP_ONEREQ, (st), (cmp))
# define sk_OCSP_ONEREQ_dup(st) SKM_sk_dup(OCSP_ONEREQ, st)
# define sk_OCSP_ONEREQ_pop_free(st, free_func) SKM_sk_pop_free(OCSP_ONEREQ, (st), (free_func))
+# define sk_OCSP_ONEREQ_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(OCSP_ONEREQ, (st), (copy_func), (free_func))
# define sk_OCSP_ONEREQ_shift(st) SKM_sk_shift(OCSP_ONEREQ, (st))
# define sk_OCSP_ONEREQ_pop(st) SKM_sk_pop(OCSP_ONEREQ, (st))
# define sk_OCSP_ONEREQ_sort(st) SKM_sk_sort(OCSP_ONEREQ, (st))
@@ -1234,6 +1306,7 @@ DECLARE_SPECIAL_STACK_OF(OPENSSL_BLOCK, void)
# define sk_OCSP_RESPID_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(OCSP_RESPID, (st), (cmp))
# define sk_OCSP_RESPID_dup(st) SKM_sk_dup(OCSP_RESPID, st)
# define sk_OCSP_RESPID_pop_free(st, free_func) SKM_sk_pop_free(OCSP_RESPID, (st), (free_func))
+# define sk_OCSP_RESPID_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(OCSP_RESPID, (st), (copy_func), (free_func))
# define sk_OCSP_RESPID_shift(st) SKM_sk_shift(OCSP_RESPID, (st))
# define sk_OCSP_RESPID_pop(st) SKM_sk_pop(OCSP_RESPID, (st))
# define sk_OCSP_RESPID_sort(st) SKM_sk_sort(OCSP_RESPID, (st))
@@ -1255,6 +1328,7 @@ DECLARE_SPECIAL_STACK_OF(OPENSSL_BLOCK, void)
# define sk_OCSP_SINGLERESP_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(OCSP_SINGLERESP, (st), (cmp))
# define sk_OCSP_SINGLERESP_dup(st) SKM_sk_dup(OCSP_SINGLERESP, st)
# define sk_OCSP_SINGLERESP_pop_free(st, free_func) SKM_sk_pop_free(OCSP_SINGLERESP, (st), (free_func))
+# define sk_OCSP_SINGLERESP_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(OCSP_SINGLERESP, (st), (copy_func), (free_func))
# define sk_OCSP_SINGLERESP_shift(st) SKM_sk_shift(OCSP_SINGLERESP, (st))
# define sk_OCSP_SINGLERESP_pop(st) SKM_sk_pop(OCSP_SINGLERESP, (st))
# define sk_OCSP_SINGLERESP_sort(st) SKM_sk_sort(OCSP_SINGLERESP, (st))
@@ -1276,6 +1350,7 @@ DECLARE_SPECIAL_STACK_OF(OPENSSL_BLOCK, void)
# define sk_PKCS12_SAFEBAG_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(PKCS12_SAFEBAG, (st), (cmp))
# define sk_PKCS12_SAFEBAG_dup(st) SKM_sk_dup(PKCS12_SAFEBAG, st)
# define sk_PKCS12_SAFEBAG_pop_free(st, free_func) SKM_sk_pop_free(PKCS12_SAFEBAG, (st), (free_func))
+# define sk_PKCS12_SAFEBAG_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(PKCS12_SAFEBAG, (st), (copy_func), (free_func))
# define sk_PKCS12_SAFEBAG_shift(st) SKM_sk_shift(PKCS12_SAFEBAG, (st))
# define sk_PKCS12_SAFEBAG_pop(st) SKM_sk_pop(PKCS12_SAFEBAG, (st))
# define sk_PKCS12_SAFEBAG_sort(st) SKM_sk_sort(PKCS12_SAFEBAG, (st))
@@ -1297,6 +1372,7 @@ DECLARE_SPECIAL_STACK_OF(OPENSSL_BLOCK, void)
# define sk_PKCS7_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(PKCS7, (st), (cmp))
# define sk_PKCS7_dup(st) SKM_sk_dup(PKCS7, st)
# define sk_PKCS7_pop_free(st, free_func) SKM_sk_pop_free(PKCS7, (st), (free_func))
+# define sk_PKCS7_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(PKCS7, (st), (copy_func), (free_func))
# define sk_PKCS7_shift(st) SKM_sk_shift(PKCS7, (st))
# define sk_PKCS7_pop(st) SKM_sk_pop(PKCS7, (st))
# define sk_PKCS7_sort(st) SKM_sk_sort(PKCS7, (st))
@@ -1318,6 +1394,7 @@ DECLARE_SPECIAL_STACK_OF(OPENSSL_BLOCK, void)
# define sk_PKCS7_RECIP_INFO_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(PKCS7_RECIP_INFO, (st), (cmp))
# define sk_PKCS7_RECIP_INFO_dup(st) SKM_sk_dup(PKCS7_RECIP_INFO, st)
# define sk_PKCS7_RECIP_INFO_pop_free(st, free_func) SKM_sk_pop_free(PKCS7_RECIP_INFO, (st), (free_func))
+# define sk_PKCS7_RECIP_INFO_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(PKCS7_RECIP_INFO, (st), (copy_func), (free_func))
# define sk_PKCS7_RECIP_INFO_shift(st) SKM_sk_shift(PKCS7_RECIP_INFO, (st))
# define sk_PKCS7_RECIP_INFO_pop(st) SKM_sk_pop(PKCS7_RECIP_INFO, (st))
# define sk_PKCS7_RECIP_INFO_sort(st) SKM_sk_sort(PKCS7_RECIP_INFO, (st))
@@ -1339,6 +1416,7 @@ DECLARE_SPECIAL_STACK_OF(OPENSSL_BLOCK, void)
# define sk_PKCS7_SIGNER_INFO_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(PKCS7_SIGNER_INFO, (st), (cmp))
# define sk_PKCS7_SIGNER_INFO_dup(st) SKM_sk_dup(PKCS7_SIGNER_INFO, st)
# define sk_PKCS7_SIGNER_INFO_pop_free(st, free_func) SKM_sk_pop_free(PKCS7_SIGNER_INFO, (st), (free_func))
+# define sk_PKCS7_SIGNER_INFO_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(PKCS7_SIGNER_INFO, (st), (copy_func), (free_func))
# define sk_PKCS7_SIGNER_INFO_shift(st) SKM_sk_shift(PKCS7_SIGNER_INFO, (st))
# define sk_PKCS7_SIGNER_INFO_pop(st) SKM_sk_pop(PKCS7_SIGNER_INFO, (st))
# define sk_PKCS7_SIGNER_INFO_sort(st) SKM_sk_sort(PKCS7_SIGNER_INFO, (st))
@@ -1360,6 +1438,7 @@ DECLARE_SPECIAL_STACK_OF(OPENSSL_BLOCK, void)
# define sk_POLICYINFO_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(POLICYINFO, (st), (cmp))
# define sk_POLICYINFO_dup(st) SKM_sk_dup(POLICYINFO, st)
# define sk_POLICYINFO_pop_free(st, free_func) SKM_sk_pop_free(POLICYINFO, (st), (free_func))
+# define sk_POLICYINFO_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(POLICYINFO, (st), (copy_func), (free_func))
# define sk_POLICYINFO_shift(st) SKM_sk_shift(POLICYINFO, (st))
# define sk_POLICYINFO_pop(st) SKM_sk_pop(POLICYINFO, (st))
# define sk_POLICYINFO_sort(st) SKM_sk_sort(POLICYINFO, (st))
@@ -1381,6 +1460,7 @@ DECLARE_SPECIAL_STACK_OF(OPENSSL_BLOCK, void)
# define sk_POLICYQUALINFO_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(POLICYQUALINFO, (st), (cmp))
# define sk_POLICYQUALINFO_dup(st) SKM_sk_dup(POLICYQUALINFO, st)
# define sk_POLICYQUALINFO_pop_free(st, free_func) SKM_sk_pop_free(POLICYQUALINFO, (st), (free_func))
+# define sk_POLICYQUALINFO_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(POLICYQUALINFO, (st), (copy_func), (free_func))
# define sk_POLICYQUALINFO_shift(st) SKM_sk_shift(POLICYQUALINFO, (st))
# define sk_POLICYQUALINFO_pop(st) SKM_sk_pop(POLICYQUALINFO, (st))
# define sk_POLICYQUALINFO_sort(st) SKM_sk_sort(POLICYQUALINFO, (st))
@@ -1402,10 +1482,33 @@ DECLARE_SPECIAL_STACK_OF(OPENSSL_BLOCK, void)
# define sk_POLICY_MAPPING_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(POLICY_MAPPING, (st), (cmp))
# define sk_POLICY_MAPPING_dup(st) SKM_sk_dup(POLICY_MAPPING, st)
# define sk_POLICY_MAPPING_pop_free(st, free_func) SKM_sk_pop_free(POLICY_MAPPING, (st), (free_func))
+# define sk_POLICY_MAPPING_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(POLICY_MAPPING, (st), (copy_func), (free_func))
# define sk_POLICY_MAPPING_shift(st) SKM_sk_shift(POLICY_MAPPING, (st))
# define sk_POLICY_MAPPING_pop(st) SKM_sk_pop(POLICY_MAPPING, (st))
# define sk_POLICY_MAPPING_sort(st) SKM_sk_sort(POLICY_MAPPING, (st))
# define sk_POLICY_MAPPING_is_sorted(st) SKM_sk_is_sorted(POLICY_MAPPING, (st))
+# define sk_SCT_new(cmp) SKM_sk_new(SCT, (cmp))
+# define sk_SCT_new_null() SKM_sk_new_null(SCT)
+# define sk_SCT_free(st) SKM_sk_free(SCT, (st))
+# define sk_SCT_num(st) SKM_sk_num(SCT, (st))
+# define sk_SCT_value(st, i) SKM_sk_value(SCT, (st), (i))
+# define sk_SCT_set(st, i, val) SKM_sk_set(SCT, (st), (i), (val))
+# define sk_SCT_zero(st) SKM_sk_zero(SCT, (st))
+# define sk_SCT_push(st, val) SKM_sk_push(SCT, (st), (val))
+# define sk_SCT_unshift(st, val) SKM_sk_unshift(SCT, (st), (val))
+# define sk_SCT_find(st, val) SKM_sk_find(SCT, (st), (val))
+# define sk_SCT_find_ex(st, val) SKM_sk_find_ex(SCT, (st), (val))
+# define sk_SCT_delete(st, i) SKM_sk_delete(SCT, (st), (i))
+# define sk_SCT_delete_ptr(st, ptr) SKM_sk_delete_ptr(SCT, (st), (ptr))
+# define sk_SCT_insert(st, val, i) SKM_sk_insert(SCT, (st), (val), (i))
+# define sk_SCT_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(SCT, (st), (cmp))
+# define sk_SCT_dup(st) SKM_sk_dup(SCT, st)
+# define sk_SCT_pop_free(st, free_func) SKM_sk_pop_free(SCT, (st), (free_func))
+# define sk_SCT_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(SCT, (st), (copy_func), (free_func))
+# define sk_SCT_shift(st) SKM_sk_shift(SCT, (st))
+# define sk_SCT_pop(st) SKM_sk_pop(SCT, (st))
+# define sk_SCT_sort(st) SKM_sk_sort(SCT, (st))
+# define sk_SCT_is_sorted(st) SKM_sk_is_sorted(SCT, (st))
# define sk_SRP_gN_new(cmp) SKM_sk_new(SRP_gN, (cmp))
# define sk_SRP_gN_new_null() SKM_sk_new_null(SRP_gN)
# define sk_SRP_gN_free(st) SKM_sk_free(SRP_gN, (st))
@@ -1423,6 +1526,7 @@ DECLARE_SPECIAL_STACK_OF(OPENSSL_BLOCK, void)
# define sk_SRP_gN_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(SRP_gN, (st), (cmp))
# define sk_SRP_gN_dup(st) SKM_sk_dup(SRP_gN, st)
# define sk_SRP_gN_pop_free(st, free_func) SKM_sk_pop_free(SRP_gN, (st), (free_func))
+# define sk_SRP_gN_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(SRP_gN, (st), (copy_func), (free_func))
# define sk_SRP_gN_shift(st) SKM_sk_shift(SRP_gN, (st))
# define sk_SRP_gN_pop(st) SKM_sk_pop(SRP_gN, (st))
# define sk_SRP_gN_sort(st) SKM_sk_sort(SRP_gN, (st))
@@ -1444,6 +1548,7 @@ DECLARE_SPECIAL_STACK_OF(OPENSSL_BLOCK, void)
# define sk_SRP_gN_cache_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(SRP_gN_cache, (st), (cmp))
# define sk_SRP_gN_cache_dup(st) SKM_sk_dup(SRP_gN_cache, st)
# define sk_SRP_gN_cache_pop_free(st, free_func) SKM_sk_pop_free(SRP_gN_cache, (st), (free_func))
+# define sk_SRP_gN_cache_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(SRP_gN_cache, (st), (copy_func), (free_func))
# define sk_SRP_gN_cache_shift(st) SKM_sk_shift(SRP_gN_cache, (st))
# define sk_SRP_gN_cache_pop(st) SKM_sk_pop(SRP_gN_cache, (st))
# define sk_SRP_gN_cache_sort(st) SKM_sk_sort(SRP_gN_cache, (st))
@@ -1465,6 +1570,7 @@ DECLARE_SPECIAL_STACK_OF(OPENSSL_BLOCK, void)
# define sk_SRP_user_pwd_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(SRP_user_pwd, (st), (cmp))
# define sk_SRP_user_pwd_dup(st) SKM_sk_dup(SRP_user_pwd, st)
# define sk_SRP_user_pwd_pop_free(st, free_func) SKM_sk_pop_free(SRP_user_pwd, (st), (free_func))
+# define sk_SRP_user_pwd_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(SRP_user_pwd, (st), (copy_func), (free_func))
# define sk_SRP_user_pwd_shift(st) SKM_sk_shift(SRP_user_pwd, (st))
# define sk_SRP_user_pwd_pop(st) SKM_sk_pop(SRP_user_pwd, (st))
# define sk_SRP_user_pwd_sort(st) SKM_sk_sort(SRP_user_pwd, (st))
@@ -1486,6 +1592,7 @@ DECLARE_SPECIAL_STACK_OF(OPENSSL_BLOCK, void)
# define sk_SRTP_PROTECTION_PROFILE_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(SRTP_PROTECTION_PROFILE, (st), (cmp))
# define sk_SRTP_PROTECTION_PROFILE_dup(st) SKM_sk_dup(SRTP_PROTECTION_PROFILE, st)
# define sk_SRTP_PROTECTION_PROFILE_pop_free(st, free_func) SKM_sk_pop_free(SRTP_PROTECTION_PROFILE, (st), (free_func))
+# define sk_SRTP_PROTECTION_PROFILE_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(SRTP_PROTECTION_PROFILE, (st), (copy_func), (free_func))
# define sk_SRTP_PROTECTION_PROFILE_shift(st) SKM_sk_shift(SRTP_PROTECTION_PROFILE, (st))
# define sk_SRTP_PROTECTION_PROFILE_pop(st) SKM_sk_pop(SRTP_PROTECTION_PROFILE, (st))
# define sk_SRTP_PROTECTION_PROFILE_sort(st) SKM_sk_sort(SRTP_PROTECTION_PROFILE, (st))
@@ -1507,6 +1614,7 @@ DECLARE_SPECIAL_STACK_OF(OPENSSL_BLOCK, void)
# define sk_SSL_CIPHER_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(SSL_CIPHER, (st), (cmp))
# define sk_SSL_CIPHER_dup(st) SKM_sk_dup(SSL_CIPHER, st)
# define sk_SSL_CIPHER_pop_free(st, free_func) SKM_sk_pop_free(SSL_CIPHER, (st), (free_func))
+# define sk_SSL_CIPHER_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(SSL_CIPHER, (st), (copy_func), (free_func))
# define sk_SSL_CIPHER_shift(st) SKM_sk_shift(SSL_CIPHER, (st))
# define sk_SSL_CIPHER_pop(st) SKM_sk_pop(SSL_CIPHER, (st))
# define sk_SSL_CIPHER_sort(st) SKM_sk_sort(SSL_CIPHER, (st))
@@ -1528,6 +1636,7 @@ DECLARE_SPECIAL_STACK_OF(OPENSSL_BLOCK, void)
# define sk_SSL_COMP_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(SSL_COMP, (st), (cmp))
# define sk_SSL_COMP_dup(st) SKM_sk_dup(SSL_COMP, st)
# define sk_SSL_COMP_pop_free(st, free_func) SKM_sk_pop_free(SSL_COMP, (st), (free_func))
+# define sk_SSL_COMP_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(SSL_COMP, (st), (copy_func), (free_func))
# define sk_SSL_COMP_shift(st) SKM_sk_shift(SSL_COMP, (st))
# define sk_SSL_COMP_pop(st) SKM_sk_pop(SSL_COMP, (st))
# define sk_SSL_COMP_sort(st) SKM_sk_sort(SSL_COMP, (st))
@@ -1549,6 +1658,7 @@ DECLARE_SPECIAL_STACK_OF(OPENSSL_BLOCK, void)
# define sk_STACK_OF_X509_NAME_ENTRY_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(STACK_OF_X509_NAME_ENTRY, (st), (cmp))
# define sk_STACK_OF_X509_NAME_ENTRY_dup(st) SKM_sk_dup(STACK_OF_X509_NAME_ENTRY, st)
# define sk_STACK_OF_X509_NAME_ENTRY_pop_free(st, free_func) SKM_sk_pop_free(STACK_OF_X509_NAME_ENTRY, (st), (free_func))
+# define sk_STACK_OF_X509_NAME_ENTRY_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(STACK_OF_X509_NAME_ENTRY, (st), (copy_func), (free_func))
# define sk_STACK_OF_X509_NAME_ENTRY_shift(st) SKM_sk_shift(STACK_OF_X509_NAME_ENTRY, (st))
# define sk_STACK_OF_X509_NAME_ENTRY_pop(st) SKM_sk_pop(STACK_OF_X509_NAME_ENTRY, (st))
# define sk_STACK_OF_X509_NAME_ENTRY_sort(st) SKM_sk_sort(STACK_OF_X509_NAME_ENTRY, (st))
@@ -1570,6 +1680,7 @@ DECLARE_SPECIAL_STACK_OF(OPENSSL_BLOCK, void)
# define sk_STORE_ATTR_INFO_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(STORE_ATTR_INFO, (st), (cmp))
# define sk_STORE_ATTR_INFO_dup(st) SKM_sk_dup(STORE_ATTR_INFO, st)
# define sk_STORE_ATTR_INFO_pop_free(st, free_func) SKM_sk_pop_free(STORE_ATTR_INFO, (st), (free_func))
+# define sk_STORE_ATTR_INFO_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(STORE_ATTR_INFO, (st), (copy_func), (free_func))
# define sk_STORE_ATTR_INFO_shift(st) SKM_sk_shift(STORE_ATTR_INFO, (st))
# define sk_STORE_ATTR_INFO_pop(st) SKM_sk_pop(STORE_ATTR_INFO, (st))
# define sk_STORE_ATTR_INFO_sort(st) SKM_sk_sort(STORE_ATTR_INFO, (st))
@@ -1591,6 +1702,7 @@ DECLARE_SPECIAL_STACK_OF(OPENSSL_BLOCK, void)
# define sk_STORE_OBJECT_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(STORE_OBJECT, (st), (cmp))
# define sk_STORE_OBJECT_dup(st) SKM_sk_dup(STORE_OBJECT, st)
# define sk_STORE_OBJECT_pop_free(st, free_func) SKM_sk_pop_free(STORE_OBJECT, (st), (free_func))
+# define sk_STORE_OBJECT_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(STORE_OBJECT, (st), (copy_func), (free_func))
# define sk_STORE_OBJECT_shift(st) SKM_sk_shift(STORE_OBJECT, (st))
# define sk_STORE_OBJECT_pop(st) SKM_sk_pop(STORE_OBJECT, (st))
# define sk_STORE_OBJECT_sort(st) SKM_sk_sort(STORE_OBJECT, (st))
@@ -1612,6 +1724,7 @@ DECLARE_SPECIAL_STACK_OF(OPENSSL_BLOCK, void)
# define sk_SXNETID_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(SXNETID, (st), (cmp))
# define sk_SXNETID_dup(st) SKM_sk_dup(SXNETID, st)
# define sk_SXNETID_pop_free(st, free_func) SKM_sk_pop_free(SXNETID, (st), (free_func))
+# define sk_SXNETID_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(SXNETID, (st), (copy_func), (free_func))
# define sk_SXNETID_shift(st) SKM_sk_shift(SXNETID, (st))
# define sk_SXNETID_pop(st) SKM_sk_pop(SXNETID, (st))
# define sk_SXNETID_sort(st) SKM_sk_sort(SXNETID, (st))
@@ -1633,6 +1746,7 @@ DECLARE_SPECIAL_STACK_OF(OPENSSL_BLOCK, void)
# define sk_UI_STRING_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(UI_STRING, (st), (cmp))
# define sk_UI_STRING_dup(st) SKM_sk_dup(UI_STRING, st)
# define sk_UI_STRING_pop_free(st, free_func) SKM_sk_pop_free(UI_STRING, (st), (free_func))
+# define sk_UI_STRING_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(UI_STRING, (st), (copy_func), (free_func))
# define sk_UI_STRING_shift(st) SKM_sk_shift(UI_STRING, (st))
# define sk_UI_STRING_pop(st) SKM_sk_pop(UI_STRING, (st))
# define sk_UI_STRING_sort(st) SKM_sk_sort(UI_STRING, (st))
@@ -1654,6 +1768,7 @@ DECLARE_SPECIAL_STACK_OF(OPENSSL_BLOCK, void)
# define sk_X509_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(X509, (st), (cmp))
# define sk_X509_dup(st) SKM_sk_dup(X509, st)
# define sk_X509_pop_free(st, free_func) SKM_sk_pop_free(X509, (st), (free_func))
+# define sk_X509_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(X509, (st), (copy_func), (free_func))
# define sk_X509_shift(st) SKM_sk_shift(X509, (st))
# define sk_X509_pop(st) SKM_sk_pop(X509, (st))
# define sk_X509_sort(st) SKM_sk_sort(X509, (st))
@@ -1675,6 +1790,7 @@ DECLARE_SPECIAL_STACK_OF(OPENSSL_BLOCK, void)
# define sk_X509V3_EXT_METHOD_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(X509V3_EXT_METHOD, (st), (cmp))
# define sk_X509V3_EXT_METHOD_dup(st) SKM_sk_dup(X509V3_EXT_METHOD, st)
# define sk_X509V3_EXT_METHOD_pop_free(st, free_func) SKM_sk_pop_free(X509V3_EXT_METHOD, (st), (free_func))
+# define sk_X509V3_EXT_METHOD_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(X509V3_EXT_METHOD, (st), (copy_func), (free_func))
# define sk_X509V3_EXT_METHOD_shift(st) SKM_sk_shift(X509V3_EXT_METHOD, (st))
# define sk_X509V3_EXT_METHOD_pop(st) SKM_sk_pop(X509V3_EXT_METHOD, (st))
# define sk_X509V3_EXT_METHOD_sort(st) SKM_sk_sort(X509V3_EXT_METHOD, (st))
@@ -1696,6 +1812,7 @@ DECLARE_SPECIAL_STACK_OF(OPENSSL_BLOCK, void)
# define sk_X509_ALGOR_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(X509_ALGOR, (st), (cmp))
# define sk_X509_ALGOR_dup(st) SKM_sk_dup(X509_ALGOR, st)
# define sk_X509_ALGOR_pop_free(st, free_func) SKM_sk_pop_free(X509_ALGOR, (st), (free_func))
+# define sk_X509_ALGOR_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(X509_ALGOR, (st), (copy_func), (free_func))
# define sk_X509_ALGOR_shift(st) SKM_sk_shift(X509_ALGOR, (st))
# define sk_X509_ALGOR_pop(st) SKM_sk_pop(X509_ALGOR, (st))
# define sk_X509_ALGOR_sort(st) SKM_sk_sort(X509_ALGOR, (st))
@@ -1717,6 +1834,7 @@ DECLARE_SPECIAL_STACK_OF(OPENSSL_BLOCK, void)
# define sk_X509_ATTRIBUTE_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(X509_ATTRIBUTE, (st), (cmp))
# define sk_X509_ATTRIBUTE_dup(st) SKM_sk_dup(X509_ATTRIBUTE, st)
# define sk_X509_ATTRIBUTE_pop_free(st, free_func) SKM_sk_pop_free(X509_ATTRIBUTE, (st), (free_func))
+# define sk_X509_ATTRIBUTE_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(X509_ATTRIBUTE, (st), (copy_func), (free_func))
# define sk_X509_ATTRIBUTE_shift(st) SKM_sk_shift(X509_ATTRIBUTE, (st))
# define sk_X509_ATTRIBUTE_pop(st) SKM_sk_pop(X509_ATTRIBUTE, (st))
# define sk_X509_ATTRIBUTE_sort(st) SKM_sk_sort(X509_ATTRIBUTE, (st))
@@ -1738,6 +1856,7 @@ DECLARE_SPECIAL_STACK_OF(OPENSSL_BLOCK, void)
# define sk_X509_CRL_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(X509_CRL, (st), (cmp))
# define sk_X509_CRL_dup(st) SKM_sk_dup(X509_CRL, st)
# define sk_X509_CRL_pop_free(st, free_func) SKM_sk_pop_free(X509_CRL, (st), (free_func))
+# define sk_X509_CRL_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(X509_CRL, (st), (copy_func), (free_func))
# define sk_X509_CRL_shift(st) SKM_sk_shift(X509_CRL, (st))
# define sk_X509_CRL_pop(st) SKM_sk_pop(X509_CRL, (st))
# define sk_X509_CRL_sort(st) SKM_sk_sort(X509_CRL, (st))
@@ -1759,6 +1878,7 @@ DECLARE_SPECIAL_STACK_OF(OPENSSL_BLOCK, void)
# define sk_X509_EXTENSION_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(X509_EXTENSION, (st), (cmp))
# define sk_X509_EXTENSION_dup(st) SKM_sk_dup(X509_EXTENSION, st)
# define sk_X509_EXTENSION_pop_free(st, free_func) SKM_sk_pop_free(X509_EXTENSION, (st), (free_func))
+# define sk_X509_EXTENSION_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(X509_EXTENSION, (st), (copy_func), (free_func))
# define sk_X509_EXTENSION_shift(st) SKM_sk_shift(X509_EXTENSION, (st))
# define sk_X509_EXTENSION_pop(st) SKM_sk_pop(X509_EXTENSION, (st))
# define sk_X509_EXTENSION_sort(st) SKM_sk_sort(X509_EXTENSION, (st))
@@ -1780,6 +1900,7 @@ DECLARE_SPECIAL_STACK_OF(OPENSSL_BLOCK, void)
# define sk_X509_INFO_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(X509_INFO, (st), (cmp))
# define sk_X509_INFO_dup(st) SKM_sk_dup(X509_INFO, st)
# define sk_X509_INFO_pop_free(st, free_func) SKM_sk_pop_free(X509_INFO, (st), (free_func))
+# define sk_X509_INFO_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(X509_INFO, (st), (copy_func), (free_func))
# define sk_X509_INFO_shift(st) SKM_sk_shift(X509_INFO, (st))
# define sk_X509_INFO_pop(st) SKM_sk_pop(X509_INFO, (st))
# define sk_X509_INFO_sort(st) SKM_sk_sort(X509_INFO, (st))
@@ -1801,6 +1922,7 @@ DECLARE_SPECIAL_STACK_OF(OPENSSL_BLOCK, void)
# define sk_X509_LOOKUP_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(X509_LOOKUP, (st), (cmp))
# define sk_X509_LOOKUP_dup(st) SKM_sk_dup(X509_LOOKUP, st)
# define sk_X509_LOOKUP_pop_free(st, free_func) SKM_sk_pop_free(X509_LOOKUP, (st), (free_func))
+# define sk_X509_LOOKUP_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(X509_LOOKUP, (st), (copy_func), (free_func))
# define sk_X509_LOOKUP_shift(st) SKM_sk_shift(X509_LOOKUP, (st))
# define sk_X509_LOOKUP_pop(st) SKM_sk_pop(X509_LOOKUP, (st))
# define sk_X509_LOOKUP_sort(st) SKM_sk_sort(X509_LOOKUP, (st))
@@ -1822,6 +1944,7 @@ DECLARE_SPECIAL_STACK_OF(OPENSSL_BLOCK, void)
# define sk_X509_NAME_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(X509_NAME, (st), (cmp))
# define sk_X509_NAME_dup(st) SKM_sk_dup(X509_NAME, st)
# define sk_X509_NAME_pop_free(st, free_func) SKM_sk_pop_free(X509_NAME, (st), (free_func))
+# define sk_X509_NAME_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(X509_NAME, (st), (copy_func), (free_func))
# define sk_X509_NAME_shift(st) SKM_sk_shift(X509_NAME, (st))
# define sk_X509_NAME_pop(st) SKM_sk_pop(X509_NAME, (st))
# define sk_X509_NAME_sort(st) SKM_sk_sort(X509_NAME, (st))
@@ -1843,6 +1966,7 @@ DECLARE_SPECIAL_STACK_OF(OPENSSL_BLOCK, void)
# define sk_X509_NAME_ENTRY_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(X509_NAME_ENTRY, (st), (cmp))
# define sk_X509_NAME_ENTRY_dup(st) SKM_sk_dup(X509_NAME_ENTRY, st)
# define sk_X509_NAME_ENTRY_pop_free(st, free_func) SKM_sk_pop_free(X509_NAME_ENTRY, (st), (free_func))
+# define sk_X509_NAME_ENTRY_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(X509_NAME_ENTRY, (st), (copy_func), (free_func))
# define sk_X509_NAME_ENTRY_shift(st) SKM_sk_shift(X509_NAME_ENTRY, (st))
# define sk_X509_NAME_ENTRY_pop(st) SKM_sk_pop(X509_NAME_ENTRY, (st))
# define sk_X509_NAME_ENTRY_sort(st) SKM_sk_sort(X509_NAME_ENTRY, (st))
@@ -1864,6 +1988,7 @@ DECLARE_SPECIAL_STACK_OF(OPENSSL_BLOCK, void)
# define sk_X509_OBJECT_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(X509_OBJECT, (st), (cmp))
# define sk_X509_OBJECT_dup(st) SKM_sk_dup(X509_OBJECT, st)
# define sk_X509_OBJECT_pop_free(st, free_func) SKM_sk_pop_free(X509_OBJECT, (st), (free_func))
+# define sk_X509_OBJECT_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(X509_OBJECT, (st), (copy_func), (free_func))
# define sk_X509_OBJECT_shift(st) SKM_sk_shift(X509_OBJECT, (st))
# define sk_X509_OBJECT_pop(st) SKM_sk_pop(X509_OBJECT, (st))
# define sk_X509_OBJECT_sort(st) SKM_sk_sort(X509_OBJECT, (st))
@@ -1885,6 +2010,7 @@ DECLARE_SPECIAL_STACK_OF(OPENSSL_BLOCK, void)
# define sk_X509_POLICY_DATA_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(X509_POLICY_DATA, (st), (cmp))
# define sk_X509_POLICY_DATA_dup(st) SKM_sk_dup(X509_POLICY_DATA, st)
# define sk_X509_POLICY_DATA_pop_free(st, free_func) SKM_sk_pop_free(X509_POLICY_DATA, (st), (free_func))
+# define sk_X509_POLICY_DATA_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(X509_POLICY_DATA, (st), (copy_func), (free_func))
# define sk_X509_POLICY_DATA_shift(st) SKM_sk_shift(X509_POLICY_DATA, (st))
# define sk_X509_POLICY_DATA_pop(st) SKM_sk_pop(X509_POLICY_DATA, (st))
# define sk_X509_POLICY_DATA_sort(st) SKM_sk_sort(X509_POLICY_DATA, (st))
@@ -1906,6 +2032,7 @@ DECLARE_SPECIAL_STACK_OF(OPENSSL_BLOCK, void)
# define sk_X509_POLICY_NODE_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(X509_POLICY_NODE, (st), (cmp))
# define sk_X509_POLICY_NODE_dup(st) SKM_sk_dup(X509_POLICY_NODE, st)
# define sk_X509_POLICY_NODE_pop_free(st, free_func) SKM_sk_pop_free(X509_POLICY_NODE, (st), (free_func))
+# define sk_X509_POLICY_NODE_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(X509_POLICY_NODE, (st), (copy_func), (free_func))
# define sk_X509_POLICY_NODE_shift(st) SKM_sk_shift(X509_POLICY_NODE, (st))
# define sk_X509_POLICY_NODE_pop(st) SKM_sk_pop(X509_POLICY_NODE, (st))
# define sk_X509_POLICY_NODE_sort(st) SKM_sk_sort(X509_POLICY_NODE, (st))
@@ -1927,6 +2054,7 @@ DECLARE_SPECIAL_STACK_OF(OPENSSL_BLOCK, void)
# define sk_X509_PURPOSE_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(X509_PURPOSE, (st), (cmp))
# define sk_X509_PURPOSE_dup(st) SKM_sk_dup(X509_PURPOSE, st)
# define sk_X509_PURPOSE_pop_free(st, free_func) SKM_sk_pop_free(X509_PURPOSE, (st), (free_func))
+# define sk_X509_PURPOSE_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(X509_PURPOSE, (st), (copy_func), (free_func))
# define sk_X509_PURPOSE_shift(st) SKM_sk_shift(X509_PURPOSE, (st))
# define sk_X509_PURPOSE_pop(st) SKM_sk_pop(X509_PURPOSE, (st))
# define sk_X509_PURPOSE_sort(st) SKM_sk_sort(X509_PURPOSE, (st))
@@ -1948,6 +2076,7 @@ DECLARE_SPECIAL_STACK_OF(OPENSSL_BLOCK, void)
# define sk_X509_REVOKED_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(X509_REVOKED, (st), (cmp))
# define sk_X509_REVOKED_dup(st) SKM_sk_dup(X509_REVOKED, st)
# define sk_X509_REVOKED_pop_free(st, free_func) SKM_sk_pop_free(X509_REVOKED, (st), (free_func))
+# define sk_X509_REVOKED_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(X509_REVOKED, (st), (copy_func), (free_func))
# define sk_X509_REVOKED_shift(st) SKM_sk_shift(X509_REVOKED, (st))
# define sk_X509_REVOKED_pop(st) SKM_sk_pop(X509_REVOKED, (st))
# define sk_X509_REVOKED_sort(st) SKM_sk_sort(X509_REVOKED, (st))
@@ -1969,6 +2098,7 @@ DECLARE_SPECIAL_STACK_OF(OPENSSL_BLOCK, void)
# define sk_X509_TRUST_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(X509_TRUST, (st), (cmp))
# define sk_X509_TRUST_dup(st) SKM_sk_dup(X509_TRUST, st)
# define sk_X509_TRUST_pop_free(st, free_func) SKM_sk_pop_free(X509_TRUST, (st), (free_func))
+# define sk_X509_TRUST_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(X509_TRUST, (st), (copy_func), (free_func))
# define sk_X509_TRUST_shift(st) SKM_sk_shift(X509_TRUST, (st))
# define sk_X509_TRUST_pop(st) SKM_sk_pop(X509_TRUST, (st))
# define sk_X509_TRUST_sort(st) SKM_sk_sort(X509_TRUST, (st))
@@ -1990,6 +2120,7 @@ DECLARE_SPECIAL_STACK_OF(OPENSSL_BLOCK, void)
# define sk_X509_VERIFY_PARAM_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(X509_VERIFY_PARAM, (st), (cmp))
# define sk_X509_VERIFY_PARAM_dup(st) SKM_sk_dup(X509_VERIFY_PARAM, st)
# define sk_X509_VERIFY_PARAM_pop_free(st, free_func) SKM_sk_pop_free(X509_VERIFY_PARAM, (st), (free_func))
+# define sk_X509_VERIFY_PARAM_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(X509_VERIFY_PARAM, (st), (copy_func), (free_func))
# define sk_X509_VERIFY_PARAM_shift(st) SKM_sk_shift(X509_VERIFY_PARAM, (st))
# define sk_X509_VERIFY_PARAM_pop(st) SKM_sk_pop(X509_VERIFY_PARAM, (st))
# define sk_X509_VERIFY_PARAM_sort(st) SKM_sk_sort(X509_VERIFY_PARAM, (st))
@@ -2011,6 +2142,7 @@ DECLARE_SPECIAL_STACK_OF(OPENSSL_BLOCK, void)
# define sk_nid_triple_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(nid_triple, (st), (cmp))
# define sk_nid_triple_dup(st) SKM_sk_dup(nid_triple, st)
# define sk_nid_triple_pop_free(st, free_func) SKM_sk_pop_free(nid_triple, (st), (free_func))
+# define sk_nid_triple_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(nid_triple, (st), (copy_func), (free_func))
# define sk_nid_triple_shift(st) SKM_sk_shift(nid_triple, (st))
# define sk_nid_triple_pop(st) SKM_sk_pop(nid_triple, (st))
# define sk_nid_triple_sort(st) SKM_sk_sort(nid_triple, (st))
@@ -2032,6 +2164,7 @@ DECLARE_SPECIAL_STACK_OF(OPENSSL_BLOCK, void)
# define sk_void_set_cmp_func(st, cmp) SKM_sk_set_cmp_func(void, (st), (cmp))
# define sk_void_dup(st) SKM_sk_dup(void, st)
# define sk_void_pop_free(st, free_func) SKM_sk_pop_free(void, (st), (free_func))
+# define sk_void_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy(void, (st), (copy_func), (free_func))
# define sk_void_shift(st) SKM_sk_shift(void, (st))
# define sk_void_pop(st) SKM_sk_pop(void, (st))
# define sk_void_sort(st) SKM_sk_sort(void, (st))
@@ -2042,7 +2175,8 @@ DECLARE_SPECIAL_STACK_OF(OPENSSL_BLOCK, void)
# define sk_OPENSSL_STRING_find(st, val) sk_find(CHECKED_STACK_OF(OPENSSL_STRING, st), CHECKED_PTR_OF(char, val))
# define sk_OPENSSL_STRING_value(st, i) ((OPENSSL_STRING)sk_value(CHECKED_STACK_OF(OPENSSL_STRING, st), i))
# define sk_OPENSSL_STRING_num(st) SKM_sk_num(OPENSSL_STRING, st)
-# define sk_OPENSSL_STRING_pop_free(st, free_func) sk_pop_free(CHECKED_STACK_OF(OPENSSL_STRING, st), CHECKED_SK_FREE_FUNC2(OPENSSL_STRING, free_func))
+# define sk_OPENSSL_STRING_pop_free(st, free_func) sk_pop_free(CHECKED_STACK_OF(OPENSSL_STRING, st), CHECKED_SK_FREE_FUNC(char, free_func))
+# define sk_OPENSSL_STRING_deep_copy(st, copy_func, free_func) ((STACK_OF(OPENSSL_STRING) *)sk_deep_copy(CHECKED_STACK_OF(OPENSSL_STRING, st), CHECKED_SK_COPY_FUNC(char, copy_func), CHECKED_SK_FREE_FUNC(char, free_func)))
# define sk_OPENSSL_STRING_insert(st, val, i) sk_insert(CHECKED_STACK_OF(OPENSSL_STRING, st), CHECKED_PTR_OF(char, val), i)
# define sk_OPENSSL_STRING_free(st) SKM_sk_free(OPENSSL_STRING, st)
# define sk_OPENSSL_STRING_set(st, i, val) sk_set(CHECKED_STACK_OF(OPENSSL_STRING, st), i, CHECKED_PTR_OF(char, val))
@@ -2065,7 +2199,8 @@ DECLARE_SPECIAL_STACK_OF(OPENSSL_BLOCK, void)
# define sk_OPENSSL_BLOCK_find(st, val) sk_find(CHECKED_STACK_OF(OPENSSL_BLOCK, st), CHECKED_PTR_OF(void, val))
# define sk_OPENSSL_BLOCK_value(st, i) ((OPENSSL_BLOCK)sk_value(CHECKED_STACK_OF(OPENSSL_BLOCK, st), i))
# define sk_OPENSSL_BLOCK_num(st) SKM_sk_num(OPENSSL_BLOCK, st)
-# define sk_OPENSSL_BLOCK_pop_free(st, free_func) sk_pop_free(CHECKED_STACK_OF(OPENSSL_BLOCK, st), CHECKED_SK_FREE_FUNC2(OPENSSL_BLOCK, free_func))
+# define sk_OPENSSL_BLOCK_pop_free(st, free_func) sk_pop_free(CHECKED_STACK_OF(OPENSSL_BLOCK, st), CHECKED_SK_FREE_FUNC(void, free_func))
+# define sk_OPENSSL_BLOCK_deep_copy(st, copy_func, free_func) ((STACK_OF(OPENSSL_BLOCK) *)sk_deep_copy(CHECKED_STACK_OF(OPENSSL_BLOCK, st), CHECKED_SK_COPY_FUNC(void, copy_func), CHECKED_SK_FREE_FUNC(void, free_func)))
# define sk_OPENSSL_BLOCK_insert(st, val, i) sk_insert(CHECKED_STACK_OF(OPENSSL_BLOCK, st), CHECKED_PTR_OF(void, val), i)
# define sk_OPENSSL_BLOCK_free(st) SKM_sk_free(OPENSSL_BLOCK, st)
# define sk_OPENSSL_BLOCK_set(st, i, val) sk_set(CHECKED_STACK_OF(OPENSSL_BLOCK, st), i, CHECKED_PTR_OF(void, val))
@@ -2088,7 +2223,8 @@ DECLARE_SPECIAL_STACK_OF(OPENSSL_BLOCK, void)
# define sk_OPENSSL_PSTRING_find(st, val) sk_find(CHECKED_STACK_OF(OPENSSL_PSTRING, st), CHECKED_PTR_OF(OPENSSL_STRING, val))
# define sk_OPENSSL_PSTRING_value(st, i) ((OPENSSL_PSTRING)sk_value(CHECKED_STACK_OF(OPENSSL_PSTRING, st), i))
# define sk_OPENSSL_PSTRING_num(st) SKM_sk_num(OPENSSL_PSTRING, st)
-# define sk_OPENSSL_PSTRING_pop_free(st, free_func) sk_pop_free(CHECKED_STACK_OF(OPENSSL_PSTRING, st), CHECKED_SK_FREE_FUNC2(OPENSSL_PSTRING, free_func))
+# define sk_OPENSSL_PSTRING_pop_free(st, free_func) sk_pop_free(CHECKED_STACK_OF(OPENSSL_PSTRING, st), CHECKED_SK_FREE_FUNC(OPENSSL_STRING, free_func))
+# define sk_OPENSSL_PSTRING_deep_copy(st, copy_func, free_func) ((STACK_OF(OPENSSL_PSTRING) *)sk_deep_copy(CHECKED_STACK_OF(OPENSSL_PSTRING, st), CHECKED_SK_COPY_FUNC(OPENSSL_STRING, copy_func), CHECKED_SK_FREE_FUNC(OPENSSL_STRING, free_func)))
# define sk_OPENSSL_PSTRING_insert(st, val, i) sk_insert(CHECKED_STACK_OF(OPENSSL_PSTRING, st), CHECKED_PTR_OF(OPENSSL_STRING, val), i)
# define sk_OPENSSL_PSTRING_free(st) SKM_sk_free(OPENSSL_PSTRING, st)
# define sk_OPENSSL_PSTRING_set(st, i, val) sk_set(CHECKED_STACK_OF(OPENSSL_PSTRING, st), i, CHECKED_PTR_OF(OPENSSL_STRING, val))
diff --git a/crypto/openssl/crypto/stack/stack.c b/crypto/openssl/crypto/stack/stack.c
index 331f907..de437ac 100644
--- a/crypto/openssl/crypto/stack/stack.c
+++ b/crypto/openssl/crypto/stack/stack.c
@@ -115,6 +115,40 @@ _STACK *sk_dup(_STACK *sk)
return (NULL);
}
+_STACK *sk_deep_copy(_STACK *sk, void *(*copy_func) (void *),
+ void (*free_func) (void *))
+{
+ _STACK *ret;
+ int i;
+
+ if ((ret = OPENSSL_malloc(sizeof(_STACK))) == NULL)
+ return ret;
+ ret->comp = sk->comp;
+ ret->sorted = sk->sorted;
+ ret->num = sk->num;
+ ret->num_alloc = sk->num > MIN_NODES ? sk->num : MIN_NODES;
+ ret->data = OPENSSL_malloc(sizeof(char *) * ret->num_alloc);
+ if (ret->data == NULL) {
+ OPENSSL_free(ret);
+ return NULL;
+ }
+ for (i = 0; i < ret->num_alloc; i++)
+ ret->data[i] = NULL;
+
+ for (i = 0; i < ret->num; ++i) {
+ if (sk->data[i] == NULL)
+ continue;
+ if ((ret->data[i] = copy_func(sk->data[i])) == NULL) {
+ while (--i >= 0)
+ if (ret->data[i] != NULL)
+ free_func(ret->data[i]);
+ sk_free(ret);
+ return NULL;
+ }
+ }
+ return ret;
+}
+
_STACK *sk_new_null(void)
{
return sk_new((int (*)(const void *, const void *))0);
diff --git a/crypto/openssl/crypto/stack/stack.h b/crypto/openssl/crypto/stack/stack.h
index 8d6e939..eb07216 100644
--- a/crypto/openssl/crypto/stack/stack.h
+++ b/crypto/openssl/crypto/stack/stack.h
@@ -83,6 +83,7 @@ _STACK *sk_new(int (*cmp) (const void *, const void *));
_STACK *sk_new_null(void);
void sk_free(_STACK *);
void sk_pop_free(_STACK *st, void (*func) (void *));
+_STACK *sk_deep_copy(_STACK *, void *(*)(void *), void (*)(void *));
int sk_insert(_STACK *sk, void *data, int where);
void *sk_delete(_STACK *st, int loc);
void *sk_delete_ptr(_STACK *st, void *p);
diff --git a/crypto/openssl/crypto/symhacks.h b/crypto/openssl/crypto/symhacks.h
index 2eadf7f..239fa4f 100644
--- a/crypto/openssl/crypto/symhacks.h
+++ b/crypto/openssl/crypto/symhacks.h
@@ -166,7 +166,7 @@
# undef CRYPTO_get_locked_mem_ex_functions
# define CRYPTO_get_locked_mem_ex_functions CRYPTO_get_locked_mem_ex_funcs
-/* Hack some long SSL names */
+/* Hack some long SSL/TLS names */
# undef SSL_CTX_set_default_verify_paths
# define SSL_CTX_set_default_verify_paths SSL_CTX_set_def_verify_paths
# undef SSL_get_ex_data_X509_STORE_CTX_idx
@@ -183,6 +183,10 @@
# define SSL_CTX_set_default_passwd_cb_userdata SSL_CTX_set_def_passwd_cb_ud
# undef SSL_COMP_get_compression_methods
# define SSL_COMP_get_compression_methods SSL_COMP_get_compress_methods
+# undef SSL_COMP_set0_compression_methods
+# define SSL_COMP_set0_compression_methods SSL_COMP_set0_compress_methods
+# undef SSL_COMP_free_compression_methods
+# define SSL_COMP_free_compression_methods SSL_COMP_free_compress_methods
# undef ssl_add_clienthello_renegotiate_ext
# define ssl_add_clienthello_renegotiate_ext ssl_add_clienthello_reneg_ext
# undef ssl_add_serverhello_renegotiate_ext
@@ -211,6 +215,16 @@
# define SSL_CTX_set_next_protos_advertised_cb SSL_CTX_set_next_protos_adv_cb
# undef SSL_CTX_set_next_proto_select_cb
# define SSL_CTX_set_next_proto_select_cb SSL_CTX_set_next_proto_sel_cb
+
+# undef tls1_send_server_supplemental_data
+# define tls1_send_server_supplemental_data tls1_send_server_suppl_data
+# undef tls1_send_client_supplemental_data
+# define tls1_send_client_supplemental_data tls1_send_client_suppl_data
+# undef tls1_get_server_supplemental_data
+# define tls1_get_server_supplemental_data tls1_get_server_suppl_data
+# undef tls1_get_client_supplemental_data
+# define tls1_get_client_supplemental_data tls1_get_client_suppl_data
+
# undef ssl3_cbc_record_digest_supported
# define ssl3_cbc_record_digest_supported ssl3_cbc_record_digest_support
# undef ssl_check_clienthello_tlsext_late
@@ -218,7 +232,11 @@
# undef ssl_check_clienthello_tlsext_early
# define ssl_check_clienthello_tlsext_early ssl_check_clihello_tlsext_early
-/* Hack some long ENGINE names */
+/* Hack some RSA long names */
+# undef RSA_padding_check_PKCS1_OAEP_mgf1
+# define RSA_padding_check_PKCS1_OAEP_mgf1 RSA_pad_check_PKCS1_OAEP_mgf1
+
+/* Hack some ENGINE long names */
# undef ENGINE_get_default_BN_mod_exp_crt
# define ENGINE_get_default_BN_mod_exp_crt ENGINE_get_def_BN_mod_exp_crt
# undef ENGINE_set_default_BN_mod_exp_crt
@@ -427,6 +445,18 @@
# define CMS_OriginatorIdentifierOrKey_it CMS_OriginatorIdOrKey_it
# undef cms_SignerIdentifier_get0_signer_id
# define cms_SignerIdentifier_get0_signer_id cms_SignerId_get0_signer_id
+# undef CMS_RecipientInfo_kari_get0_orig_id
+# define CMS_RecipientInfo_kari_get0_orig_id CMS_RecipInfo_kari_get0_orig_id
+# undef CMS_RecipientInfo_kari_get0_reks
+# define CMS_RecipientInfo_kari_get0_reks CMS_RecipInfo_kari_get0_reks
+# undef CMS_RecipientEncryptedKey_cert_cmp
+# define CMS_RecipientEncryptedKey_cert_cmp CMS_RecipEncryptedKey_cert_cmp
+# undef CMS_RecipientInfo_kari_set0_pkey
+# define CMS_RecipientInfo_kari_set0_pkey CMS_RecipInfo_kari_set0_pkey
+# undef CMS_RecipientEncryptedKey_get0_id
+# define CMS_RecipientEncryptedKey_get0_id CMS_RecipEncryptedKey_get0_id
+# undef CMS_RecipientInfo_kari_orig_id_cmp
+# define CMS_RecipientInfo_kari_orig_id_cmp CMS_RecipInfo_kari_orig_id_cmp
/* Hack some long DTLS1 names */
# undef dtls1_retransmit_buffered_messages
diff --git a/crypto/openssl/crypto/ts/ts_rsp_sign.c b/crypto/openssl/crypto/ts/ts_rsp_sign.c
index 031d872..db6ce32 100644
--- a/crypto/openssl/crypto/ts/ts_rsp_sign.c
+++ b/crypto/openssl/crypto/ts/ts_rsp_sign.c
@@ -238,7 +238,6 @@ int TS_RESP_CTX_set_def_policy(TS_RESP_CTX *ctx, ASN1_OBJECT *def_policy)
int TS_RESP_CTX_set_certs(TS_RESP_CTX *ctx, STACK_OF(X509) *certs)
{
- int i;
if (ctx->certs) {
sk_X509_pop_free(ctx->certs, X509_free);
@@ -246,14 +245,10 @@ int TS_RESP_CTX_set_certs(TS_RESP_CTX *ctx, STACK_OF(X509) *certs)
}
if (!certs)
return 1;
- if (!(ctx->certs = sk_X509_dup(certs))) {
+ if (!(ctx->certs = X509_chain_up_ref(certs))) {
TSerr(TS_F_TS_RESP_CTX_SET_CERTS, ERR_R_MALLOC_FAILURE);
return 0;
}
- for (i = 0; i < sk_X509_num(ctx->certs); ++i) {
- X509 *cert = sk_X509_value(ctx->certs, i);
- CRYPTO_add(&cert->references, +1, CRYPTO_LOCK_X509);
- }
return 1;
}
diff --git a/crypto/openssl/crypto/ts/ts_rsp_verify.c b/crypto/openssl/crypto/ts/ts_rsp_verify.c
index 32b4d99..3ce765d 100644
--- a/crypto/openssl/crypto/ts/ts_rsp_verify.c
+++ b/crypto/openssl/crypto/ts/ts_rsp_verify.c
@@ -637,7 +637,7 @@ static int TS_compute_imprint(BIO *data, TS_TST_INFO *tst_info,
X509_ALGOR_free(*md_alg);
OPENSSL_free(*imprint);
*imprint_len = 0;
- *imprint = NULL;
+ *imprint = 0;
return 0;
}
diff --git a/crypto/openssl/crypto/ui/ui_openssl.c b/crypto/openssl/crypto/ui/ui_openssl.c
index 829ea86..5d66276 100644
--- a/crypto/openssl/crypto/ui/ui_openssl.c
+++ b/crypto/openssl/crypto/ui/ui_openssl.c
@@ -208,7 +208,7 @@
# elif !defined(OPENSSL_SYS_VMS) \
&& !defined(OPENSSL_SYS_MSDOS) \
&& !defined(OPENSSL_SYS_MACINTOSH_CLASSIC) \
- && !defined(MAC_OS_GUSI_SOURCE) \
+ && !defined(MAC_OS_GUSI_SOURCE) \
&& !defined(OPENSSL_SYS_VXWORKS) \
&& !defined(OPENSSL_SYS_NETWARE)
# define TERMIOS
diff --git a/crypto/openssl/crypto/whrlpool/asm/wp-mmx.pl b/crypto/openssl/crypto/whrlpool/asm/wp-mmx.pl
index cb2381c..c584e5b 100755
--- a/crypto/openssl/crypto/whrlpool/asm/wp-mmx.pl
+++ b/crypto/openssl/crypto/whrlpool/asm/wp-mmx.pl
@@ -118,34 +118,36 @@ $tbl="ebp";
&movq (@mm[0],&QWP(2048*$SCALE,$tbl,"esi",8)); # rc[r]
&mov ("eax",&DWP(0,"esp"));
&mov ("ebx",&DWP(4,"esp"));
+ &movz ("ecx",&LB("eax"));
+ &movz ("edx",&HB("eax"));
for($i=0;$i<8;$i++) {
my $func = ($i==0)? \&movq : \&pxor;
- &movb (&LB("ecx"),&LB("eax"));
- &movb (&LB("edx"),&HB("eax"));
+ &shr ("eax",16);
&scale ("esi","ecx");
+ &movz ("ecx",&LB("eax"));
&scale ("edi","edx");
- &shr ("eax",16);
+ &movz ("edx",&HB("eax"));
&pxor (@mm[0],&QWP(&row(0),$tbl,"esi",8));
&$func (@mm[1],&QWP(&row(1),$tbl,"edi",8));
- &movb (&LB("ecx"),&LB("eax"));
- &movb (&LB("edx"),&HB("eax"));
&mov ("eax",&DWP(($i+1)*8,"esp"));
&scale ("esi","ecx");
+ &movz ("ecx",&LB("ebx"));
&scale ("edi","edx");
+ &movz ("edx",&HB("ebx"));
&$func (@mm[2],&QWP(&row(2),$tbl,"esi",8));
&$func (@mm[3],&QWP(&row(3),$tbl,"edi",8));
- &movb (&LB("ecx"),&LB("ebx"));
- &movb (&LB("edx"),&HB("ebx"));
+ &shr ("ebx",16);
&scale ("esi","ecx");
+ &movz ("ecx",&LB("ebx"));
&scale ("edi","edx");
- &shr ("ebx",16);
+ &movz ("edx",&HB("ebx"));
&$func (@mm[4],&QWP(&row(4),$tbl,"esi",8));
&$func (@mm[5],&QWP(&row(5),$tbl,"edi",8));
- &movb (&LB("ecx"),&LB("ebx"));
- &movb (&LB("edx"),&HB("ebx"));
&mov ("ebx",&DWP(($i+1)*8+4,"esp"));
&scale ("esi","ecx");
+ &movz ("ecx",&LB("eax"));
&scale ("edi","edx");
+ &movz ("edx",&HB("eax"));
&$func (@mm[6],&QWP(&row(6),$tbl,"esi",8));
&$func (@mm[7],&QWP(&row(7),$tbl,"edi",8));
push(@mm,shift(@mm));
@@ -154,32 +156,32 @@ for($i=0;$i<8;$i++) {
for($i=0;$i<8;$i++) { &movq(&QWP($i*8,"esp"),@mm[$i]); } # K=L
for($i=0;$i<8;$i++) {
- &movb (&LB("ecx"),&LB("eax"));
- &movb (&LB("edx"),&HB("eax"));
+ &shr ("eax",16);
&scale ("esi","ecx");
+ &movz ("ecx",&LB("eax"));
&scale ("edi","edx");
- &shr ("eax",16);
+ &movz ("edx",&HB("eax"));
&pxor (@mm[0],&QWP(&row(0),$tbl,"esi",8));
&pxor (@mm[1],&QWP(&row(1),$tbl,"edi",8));
- &movb (&LB("ecx"),&LB("eax"));
- &movb (&LB("edx"),&HB("eax"));
&mov ("eax",&DWP(64+($i+1)*8,"esp")) if ($i<7);
&scale ("esi","ecx");
+ &movz ("ecx",&LB("ebx"));
&scale ("edi","edx");
+ &movz ("edx",&HB("ebx"));
&pxor (@mm[2],&QWP(&row(2),$tbl,"esi",8));
&pxor (@mm[3],&QWP(&row(3),$tbl,"edi",8));
- &movb (&LB("ecx"),&LB("ebx"));
- &movb (&LB("edx"),&HB("ebx"));
+ &shr ("ebx",16);
&scale ("esi","ecx");
+ &movz ("ecx",&LB("ebx"));
&scale ("edi","edx");
- &shr ("ebx",16);
+ &movz ("edx",&HB("ebx"));
&pxor (@mm[4],&QWP(&row(4),$tbl,"esi",8));
&pxor (@mm[5],&QWP(&row(5),$tbl,"edi",8));
- &movb (&LB("ecx"),&LB("ebx"));
- &movb (&LB("edx"),&HB("ebx"));
&mov ("ebx",&DWP(64+($i+1)*8+4,"esp")) if ($i<7);
&scale ("esi","ecx");
+ &movz ("ecx",&LB("eax"));
&scale ("edi","edx");
+ &movz ("edx",&HB("eax"));
&pxor (@mm[6],&QWP(&row(6),$tbl,"esi",8));
&pxor (@mm[7],&QWP(&row(7),$tbl,"edi",8));
push(@mm,shift(@mm));
diff --git a/crypto/openssl/crypto/whrlpool/asm/wp-x86_64.pl b/crypto/openssl/crypto/whrlpool/asm/wp-x86_64.pl
index 24b2ff6..5a3bdbc 100755
--- a/crypto/openssl/crypto/whrlpool/asm/wp-x86_64.pl
+++ b/crypto/openssl/crypto/whrlpool/asm/wp-x86_64.pl
@@ -91,41 +91,44 @@ for($i=0;$i<8;$i++) { $code.="mov @mm[$i],64+$i*8(%rsp)\n"; } # S=L
$code.=<<___;
xor %rsi,%rsi
mov %rsi,24(%rbx) # zero round counter
+ jmp .Lround
.align 16
.Lround:
mov 4096(%rbp,%rsi,8),@mm[0] # rc[r]
mov 0(%rsp),%eax
mov 4(%rsp),%ebx
+ movz %al,%ecx
+ movz %ah,%edx
___
for($i=0;$i<8;$i++) {
my $func = ($i==0)? "mov" : "xor";
$code.=<<___;
- mov %al,%cl
- mov %ah,%dl
+ shr \$16,%eax
lea (%rcx,%rcx),%rsi
+ movz %al,%ecx
lea (%rdx,%rdx),%rdi
- shr \$16,%eax
+ movz %ah,%edx
xor 0(%rbp,%rsi,8),@mm[0]
$func 7(%rbp,%rdi,8),@mm[1]
- mov %al,%cl
- mov %ah,%dl
mov $i*8+8(%rsp),%eax # ($i+1)*8
lea (%rcx,%rcx),%rsi
+ movz %bl,%ecx
lea (%rdx,%rdx),%rdi
+ movz %bh,%edx
$func 6(%rbp,%rsi,8),@mm[2]
$func 5(%rbp,%rdi,8),@mm[3]
- mov %bl,%cl
- mov %bh,%dl
+ shr \$16,%ebx
lea (%rcx,%rcx),%rsi
+ movz %bl,%ecx
lea (%rdx,%rdx),%rdi
- shr \$16,%ebx
+ movz %bh,%edx
$func 4(%rbp,%rsi,8),@mm[4]
$func 3(%rbp,%rdi,8),@mm[5]
- mov %bl,%cl
- mov %bh,%dl
mov $i*8+8+4(%rsp),%ebx # ($i+1)*8+4
lea (%rcx,%rcx),%rsi
+ movz %al,%ecx
lea (%rdx,%rdx),%rdi
+ movz %ah,%edx
$func 2(%rbp,%rsi,8),@mm[6]
$func 1(%rbp,%rdi,8),@mm[7]
___
@@ -134,32 +137,32 @@ ___
for($i=0;$i<8;$i++) { $code.="mov @mm[$i],$i*8(%rsp)\n"; } # K=L
for($i=0;$i<8;$i++) {
$code.=<<___;
- mov %al,%cl
- mov %ah,%dl
+ shr \$16,%eax
lea (%rcx,%rcx),%rsi
+ movz %al,%ecx
lea (%rdx,%rdx),%rdi
- shr \$16,%eax
+ movz %ah,%edx
xor 0(%rbp,%rsi,8),@mm[0]
xor 7(%rbp,%rdi,8),@mm[1]
- mov %al,%cl
- mov %ah,%dl
`"mov 64+$i*8+8(%rsp),%eax" if($i<7);` # 64+($i+1)*8
lea (%rcx,%rcx),%rsi
+ movz %bl,%ecx
lea (%rdx,%rdx),%rdi
+ movz %bh,%edx
xor 6(%rbp,%rsi,8),@mm[2]
xor 5(%rbp,%rdi,8),@mm[3]
- mov %bl,%cl
- mov %bh,%dl
+ shr \$16,%ebx
lea (%rcx,%rcx),%rsi
+ movz %bl,%ecx
lea (%rdx,%rdx),%rdi
- shr \$16,%ebx
+ movz %bh,%edx
xor 4(%rbp,%rsi,8),@mm[4]
xor 3(%rbp,%rdi,8),@mm[5]
- mov %bl,%cl
- mov %bh,%dl
`"mov 64+$i*8+8+4(%rsp),%ebx" if($i<7);` # 64+($i+1)*8+4
lea (%rcx,%rcx),%rsi
+ movz %al,%ecx
lea (%rdx,%rdx),%rdi
+ movz %ah,%edx
xor 2(%rbp,%rsi,8),@mm[6]
xor 1(%rbp,%rdi,8),@mm[7]
___
diff --git a/crypto/openssl/crypto/x509/Makefile b/crypto/openssl/crypto/x509/Makefile
index aac3ece..bf197a1 100644
--- a/crypto/openssl/crypto/x509/Makefile
+++ b/crypto/openssl/crypto/x509/Makefile
@@ -33,7 +33,7 @@ LIBOBJ= x509_def.o x509_d2.o x509_r2x.o x509_cmp.o \
SRC= $(LIBSRC)
EXHEADER= x509.h x509_vfy.h
-HEADER= $(EXHEADER)
+HEADER= $(EXHEADER) vpm_int.h
ALL= $(GENERAL) $(SRC) $(HEADER)
@@ -314,7 +314,7 @@ x509_vfy.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
x509_vfy.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
x509_vfy.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h
x509_vfy.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h
-x509_vfy.o: ../cryptlib.h x509_vfy.c
+x509_vfy.o: ../cryptlib.h vpm_int.h x509_vfy.c
x509_vpm.o: ../../e_os.h ../../include/openssl/asn1.h
x509_vpm.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h
x509_vpm.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h
@@ -328,7 +328,7 @@ x509_vpm.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
x509_vpm.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
x509_vpm.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h
x509_vpm.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h
-x509_vpm.o: ../cryptlib.h x509_vpm.c
+x509_vpm.o: ../cryptlib.h vpm_int.h x509_vpm.c
x509cset.o: ../../e_os.h ../../include/openssl/asn1.h
x509cset.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h
x509cset.o: ../../include/openssl/crypto.h ../../include/openssl/e_os2.h
@@ -395,15 +395,17 @@ x509type.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
x509type.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h
x509type.o: ../../include/openssl/x509_vfy.h ../cryptlib.h x509type.c
x_all.o: ../../e_os.h ../../include/openssl/asn1.h ../../include/openssl/bio.h
-x_all.o: ../../include/openssl/buffer.h ../../include/openssl/crypto.h
-x_all.o: ../../include/openssl/dsa.h ../../include/openssl/e_os2.h
-x_all.o: ../../include/openssl/ec.h ../../include/openssl/ecdh.h
-x_all.o: ../../include/openssl/ecdsa.h ../../include/openssl/err.h
-x_all.o: ../../include/openssl/evp.h ../../include/openssl/lhash.h
-x_all.o: ../../include/openssl/obj_mac.h ../../include/openssl/objects.h
+x_all.o: ../../include/openssl/buffer.h ../../include/openssl/conf.h
+x_all.o: ../../include/openssl/crypto.h ../../include/openssl/dsa.h
+x_all.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
+x_all.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
+x_all.o: ../../include/openssl/err.h ../../include/openssl/evp.h
+x_all.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
+x_all.o: ../../include/openssl/objects.h ../../include/openssl/ocsp.h
x_all.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
x_all.o: ../../include/openssl/ossl_typ.h ../../include/openssl/pkcs7.h
x_all.o: ../../include/openssl/rsa.h ../../include/openssl/safestack.h
x_all.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
x_all.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h
-x_all.o: ../../include/openssl/x509_vfy.h ../cryptlib.h x_all.c
+x_all.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h
+x_all.o: ../cryptlib.h x_all.c
diff --git a/crypto/openssl/crypto/x509/verify_extra_test.c b/crypto/openssl/crypto/x509/verify_extra_test.c
index a1e41f2..08509f0 100644
--- a/crypto/openssl/crypto/x509/verify_extra_test.c
+++ b/crypto/openssl/crypto/x509/verify_extra_test.c
@@ -168,8 +168,7 @@ static int test_alt_chains_cert_forgery(void)
i = X509_verify_cert(sctx);
- if(i == 0 && X509_STORE_CTX_get_error(sctx)
- == X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT) {
+ if(i == 0 && X509_STORE_CTX_get_error(sctx) == X509_V_ERR_INVALID_CA) {
/* This is the result we were expecting: Test passed */
ret = 1;
}
diff --git a/crypto/openssl/crypto/x509/vpm_int.h b/crypto/openssl/crypto/x509/vpm_int.h
new file mode 100644
index 0000000..9c55def
--- /dev/null
+++ b/crypto/openssl/crypto/x509/vpm_int.h
@@ -0,0 +1,70 @@
+/* vpm_int.h */
+/*
+ * Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL project
+ * 2013.
+ */
+/* ====================================================================
+ * Copyright (c) 2013 The OpenSSL Project. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * 3. All advertising materials mentioning features or use of this
+ * software must display the following acknowledgment:
+ * "This product includes software developed by the OpenSSL Project
+ * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)"
+ *
+ * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
+ * endorse or promote products derived from this software without
+ * prior written permission. For written permission, please contact
+ * licensing@OpenSSL.org.
+ *
+ * 5. Products derived from this software may not be called "OpenSSL"
+ * nor may "OpenSSL" appear in their names without prior written
+ * permission of the OpenSSL Project.
+ *
+ * 6. Redistributions of any form whatsoever must retain the following
+ * acknowledgment:
+ * "This product includes software developed by the OpenSSL Project
+ * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)"
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
+ * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
+ * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+ * OF THE POSSIBILITY OF SUCH DAMAGE.
+ * ====================================================================
+ *
+ * This product includes cryptographic software written by Eric Young
+ * (eay@cryptsoft.com). This product includes software written by Tim
+ * Hudson (tjh@cryptsoft.com).
+ *
+ */
+
+/* internal only structure to hold additional X509_VERIFY_PARAM data */
+
+struct X509_VERIFY_PARAM_ID_st {
+ STACK_OF(OPENSSL_STRING) *hosts; /* Set of acceptable names */
+ unsigned int hostflags; /* Flags to control matching features */
+ char *peername; /* Matching hostname in peer certificate */
+ char *email; /* If not NULL email address to match */
+ size_t emaillen;
+ unsigned char *ip; /* If not NULL IP address to match */
+ size_t iplen; /* Length of IP address */
+};
diff --git a/crypto/openssl/crypto/x509/x509.h b/crypto/openssl/crypto/x509/x509.h
index a491174..99337b8 100644
--- a/crypto/openssl/crypto/x509/x509.h
+++ b/crypto/openssl/crypto/x509/x509.h
@@ -361,6 +361,7 @@ typedef struct x509_cert_pair_st {
# define X509_FLAG_NO_SIGDUMP (1L << 9)
# define X509_FLAG_NO_AUX (1L << 10)
# define X509_FLAG_NO_ATTRIBUTES (1L << 11)
+# define X509_FLAG_NO_IDS (1L << 12)
/* Flags specific to X509_NAME_print_ex() */
@@ -645,10 +646,12 @@ int X509_signature_print(BIO *bp, X509_ALGOR *alg, ASN1_STRING *sig);
int X509_sign(X509 *x, EVP_PKEY *pkey, const EVP_MD *md);
int X509_sign_ctx(X509 *x, EVP_MD_CTX *ctx);
+int X509_http_nbio(OCSP_REQ_CTX *rctx, X509 **pcert);
int X509_REQ_sign(X509_REQ *x, EVP_PKEY *pkey, const EVP_MD *md);
int X509_REQ_sign_ctx(X509_REQ *x, EVP_MD_CTX *ctx);
int X509_CRL_sign(X509_CRL *x, EVP_PKEY *pkey, const EVP_MD *md);
int X509_CRL_sign_ctx(X509_CRL *x, EVP_MD_CTX *ctx);
+int X509_CRL_http_nbio(OCSP_REQ_CTX *rctx, X509_CRL **pcrl);
int NETSCAPE_SPKI_sign(NETSCAPE_SPKI *x, EVP_PKEY *pkey, const EVP_MD *md);
int X509_pubkey_digest(const X509 *data, const EVP_MD *type,
@@ -745,6 +748,7 @@ X509 *X509_dup(X509 *x509);
X509_ATTRIBUTE *X509_ATTRIBUTE_dup(X509_ATTRIBUTE *xa);
X509_EXTENSION *X509_EXTENSION_dup(X509_EXTENSION *ex);
X509_CRL *X509_CRL_dup(X509_CRL *crl);
+X509_REVOKED *X509_REVOKED_dup(X509_REVOKED *rev);
X509_REQ *X509_REQ_dup(X509_REQ *req);
X509_ALGOR *X509_ALGOR_dup(X509_ALGOR *xn);
int X509_ALGOR_set0(X509_ALGOR *alg, ASN1_OBJECT *aobj, int ptype,
@@ -828,6 +832,12 @@ void *X509_get_ex_data(X509 *r, int idx);
int i2d_X509_AUX(X509 *a, unsigned char **pp);
X509 *d2i_X509_AUX(X509 **a, const unsigned char **pp, long length);
+int i2d_re_X509_tbs(X509 *x, unsigned char **pp);
+
+void X509_get0_signature(ASN1_BIT_STRING **psig, X509_ALGOR **palg,
+ const X509 *x);
+int X509_get_signature_nid(const X509 *x);
+
int X509_alias_set1(X509 *x, unsigned char *name, int len);
int X509_keyid_set1(X509 *x, unsigned char *id, int len);
unsigned char *X509_alias_get0(X509 *x, int *len);
@@ -939,9 +949,17 @@ int X509_CRL_sort(X509_CRL *crl);
int X509_REVOKED_set_serialNumber(X509_REVOKED *x, ASN1_INTEGER *serial);
int X509_REVOKED_set_revocationDate(X509_REVOKED *r, ASN1_TIME *tm);
+X509_CRL *X509_CRL_diff(X509_CRL *base, X509_CRL *newer,
+ EVP_PKEY *skey, const EVP_MD *md, unsigned int flags);
+
int X509_REQ_check_private_key(X509_REQ *x509, EVP_PKEY *pkey);
int X509_check_private_key(X509 *x509, EVP_PKEY *pkey);
+int X509_chain_check_suiteb(int *perror_depth,
+ X509 *x, STACK_OF(X509) *chain,
+ unsigned long flags);
+int X509_CRL_check_suiteb(X509_CRL *crl, EVP_PKEY *pk, unsigned long flags);
+STACK_OF(X509) *X509_chain_up_ref(STACK_OF(X509) *chain);
int X509_issuer_and_serial_cmp(const X509 *a, const X509 *b);
unsigned long X509_issuer_and_serial_hash(X509 *a);
@@ -1236,6 +1254,7 @@ void ERR_load_X509_strings(void);
# define X509_F_X509_ATTRIBUTE_GET0_DATA 139
# define X509_F_X509_ATTRIBUTE_SET1_DATA 138
# define X509_F_X509_CHECK_PRIVATE_KEY 128
+# define X509_F_X509_CRL_DIFF 105
# define X509_F_X509_CRL_PRINT_FP 147
# define X509_F_X509_EXTENSION_CREATE_BY_NID 108
# define X509_F_X509_EXTENSION_CREATE_BY_OBJ 109
@@ -1268,20 +1287,27 @@ void ERR_load_X509_strings(void);
# define X509_F_X509_VERIFY_CERT 127
/* Reason codes. */
+# define X509_R_AKID_MISMATCH 110
# define X509_R_BAD_X509_FILETYPE 100
# define X509_R_BASE64_DECODE_ERROR 118
# define X509_R_CANT_CHECK_DH_KEY 114
# define X509_R_CERT_ALREADY_IN_HASH_TABLE 101
+# define X509_R_CRL_ALREADY_DELTA 127
+# define X509_R_CRL_VERIFY_FAILURE 131
# define X509_R_ERR_ASN1_LIB 102
+# define X509_R_IDP_MISMATCH 128
# define X509_R_INVALID_DIRECTORY 113
# define X509_R_INVALID_FIELD_NAME 119
# define X509_R_INVALID_TRUST 123
+# define X509_R_ISSUER_MISMATCH 129
# define X509_R_KEY_TYPE_MISMATCH 115
# define X509_R_KEY_VALUES_MISMATCH 116
# define X509_R_LOADING_CERT_DIR 103
# define X509_R_LOADING_DEFAULTS 104
# define X509_R_METHOD_NOT_SUPPORTED 124
+# define X509_R_NEWER_CRL_NOT_NEWER 132
# define X509_R_NO_CERT_SET_FOR_US_TO_VERIFY 105
+# define X509_R_NO_CRL_NUMBER 130
# define X509_R_PUBLIC_KEY_DECODE_ERROR 125
# define X509_R_PUBLIC_KEY_ENCODE_ERROR 126
# define X509_R_SHOULD_RETRY 106
diff --git a/crypto/openssl/crypto/x509/x509_cmp.c b/crypto/openssl/crypto/x509/x509_cmp.c
index 3c5b717..49c71b9 100644
--- a/crypto/openssl/crypto/x509/x509_cmp.c
+++ b/crypto/openssl/crypto/x509/x509_cmp.c
@@ -179,11 +179,23 @@ unsigned long X509_subject_name_hash_old(X509 *x)
*/
int X509_cmp(const X509 *a, const X509 *b)
{
+ int rv;
/* ensure hash is valid */
X509_check_purpose((X509 *)a, -1, 0);
X509_check_purpose((X509 *)b, -1, 0);
- return memcmp(a->sha1_hash, b->sha1_hash, SHA_DIGEST_LENGTH);
+ rv = memcmp(a->sha1_hash, b->sha1_hash, SHA_DIGEST_LENGTH);
+ if (rv)
+ return rv;
+ /* Check for match against stored encoding too */
+ if (!a->cert_info->enc.modified && !b->cert_info->enc.modified) {
+ rv = (int)(a->cert_info->enc.len - b->cert_info->enc.len);
+ if (rv)
+ return rv;
+ return memcmp(a->cert_info->enc.enc, b->cert_info->enc.enc,
+ a->cert_info->enc.len);
+ }
+ return rv;
}
#endif
@@ -339,3 +351,148 @@ int X509_check_private_key(X509 *x, EVP_PKEY *k)
return 1;
return 0;
}
+
+/*
+ * Check a suite B algorithm is permitted: pass in a public key and the NID
+ * of its signature (or 0 if no signature). The pflags is a pointer to a
+ * flags field which must contain the suite B verification flags.
+ */
+
+#ifndef OPENSSL_NO_EC
+
+static int check_suite_b(EVP_PKEY *pkey, int sign_nid, unsigned long *pflags)
+{
+ const EC_GROUP *grp = NULL;
+ int curve_nid;
+ if (pkey && pkey->type == EVP_PKEY_EC)
+ grp = EC_KEY_get0_group(pkey->pkey.ec);
+ if (!grp)
+ return X509_V_ERR_SUITE_B_INVALID_ALGORITHM;
+ curve_nid = EC_GROUP_get_curve_name(grp);
+ /* Check curve is consistent with LOS */
+ if (curve_nid == NID_secp384r1) { /* P-384 */
+ /*
+ * Check signature algorithm is consistent with curve.
+ */
+ if (sign_nid != -1 && sign_nid != NID_ecdsa_with_SHA384)
+ return X509_V_ERR_SUITE_B_INVALID_SIGNATURE_ALGORITHM;
+ if (!(*pflags & X509_V_FLAG_SUITEB_192_LOS))
+ return X509_V_ERR_SUITE_B_LOS_NOT_ALLOWED;
+ /* If we encounter P-384 we cannot use P-256 later */
+ *pflags &= ~X509_V_FLAG_SUITEB_128_LOS_ONLY;
+ } else if (curve_nid == NID_X9_62_prime256v1) { /* P-256 */
+ if (sign_nid != -1 && sign_nid != NID_ecdsa_with_SHA256)
+ return X509_V_ERR_SUITE_B_INVALID_SIGNATURE_ALGORITHM;
+ if (!(*pflags & X509_V_FLAG_SUITEB_128_LOS_ONLY))
+ return X509_V_ERR_SUITE_B_LOS_NOT_ALLOWED;
+ } else
+ return X509_V_ERR_SUITE_B_INVALID_CURVE;
+
+ return X509_V_OK;
+}
+
+int X509_chain_check_suiteb(int *perror_depth, X509 *x, STACK_OF(X509) *chain,
+ unsigned long flags)
+{
+ int rv, i, sign_nid;
+ EVP_PKEY *pk = NULL;
+ unsigned long tflags;
+ if (!(flags & X509_V_FLAG_SUITEB_128_LOS))
+ return X509_V_OK;
+ tflags = flags;
+ /* If no EE certificate passed in must be first in chain */
+ if (x == NULL) {
+ x = sk_X509_value(chain, 0);
+ i = 1;
+ } else
+ i = 0;
+
+ if (X509_get_version(x) != 2) {
+ rv = X509_V_ERR_SUITE_B_INVALID_VERSION;
+ /* Correct error depth */
+ i = 0;
+ goto end;
+ }
+
+ pk = X509_get_pubkey(x);
+ /* Check EE key only */
+ rv = check_suite_b(pk, -1, &tflags);
+ if (rv != X509_V_OK) {
+ /* Correct error depth */
+ i = 0;
+ goto end;
+ }
+ for (; i < sk_X509_num(chain); i++) {
+ sign_nid = X509_get_signature_nid(x);
+ x = sk_X509_value(chain, i);
+ if (X509_get_version(x) != 2) {
+ rv = X509_V_ERR_SUITE_B_INVALID_VERSION;
+ goto end;
+ }
+ EVP_PKEY_free(pk);
+ pk = X509_get_pubkey(x);
+ rv = check_suite_b(pk, sign_nid, &tflags);
+ if (rv != X509_V_OK)
+ goto end;
+ }
+
+ /* Final check: root CA signature */
+ rv = check_suite_b(pk, X509_get_signature_nid(x), &tflags);
+ end:
+ if (pk)
+ EVP_PKEY_free(pk);
+ if (rv != X509_V_OK) {
+ /* Invalid signature or LOS errors are for previous cert */
+ if ((rv == X509_V_ERR_SUITE_B_INVALID_SIGNATURE_ALGORITHM
+ || rv == X509_V_ERR_SUITE_B_LOS_NOT_ALLOWED) && i)
+ i--;
+ /*
+ * If we have LOS error and flags changed then we are signing P-384
+ * with P-256. Use more meaninggul error.
+ */
+ if (rv == X509_V_ERR_SUITE_B_LOS_NOT_ALLOWED && flags != tflags)
+ rv = X509_V_ERR_SUITE_B_CANNOT_SIGN_P_384_WITH_P_256;
+ if (perror_depth)
+ *perror_depth = i;
+ }
+ return rv;
+}
+
+int X509_CRL_check_suiteb(X509_CRL *crl, EVP_PKEY *pk, unsigned long flags)
+{
+ int sign_nid;
+ if (!(flags & X509_V_FLAG_SUITEB_128_LOS))
+ return X509_V_OK;
+ sign_nid = OBJ_obj2nid(crl->crl->sig_alg->algorithm);
+ return check_suite_b(pk, sign_nid, &flags);
+}
+
+#else
+int X509_chain_check_suiteb(int *perror_depth, X509 *x, STACK_OF(X509) *chain,
+ unsigned long flags)
+{
+ return 0;
+}
+
+int X509_CRL_check_suiteb(X509_CRL *crl, EVP_PKEY *pk, unsigned long flags)
+{
+ return 0;
+}
+
+#endif
+/*
+ * Not strictly speaking an "up_ref" as a STACK doesn't have a reference
+ * count but it has the same effect by duping the STACK and upping the ref of
+ * each X509 structure.
+ */
+STACK_OF(X509) *X509_chain_up_ref(STACK_OF(X509) *chain)
+{
+ STACK_OF(X509) *ret;
+ int i;
+ ret = sk_X509_dup(chain);
+ for (i = 0; i < sk_X509_num(ret); i++) {
+ X509 *x = sk_X509_value(ret, i);
+ CRYPTO_add(&x->references, 1, CRYPTO_LOCK_X509);
+ }
+ return ret;
+}
diff --git a/crypto/openssl/crypto/x509/x509_err.c b/crypto/openssl/crypto/x509/x509_err.c
index 61a19f7..43cde18 100644
--- a/crypto/openssl/crypto/x509/x509_err.c
+++ b/crypto/openssl/crypto/x509/x509_err.c
@@ -1,6 +1,6 @@
/* crypto/x509/x509_err.c */
/* ====================================================================
- * Copyright (c) 1999-2006 The OpenSSL Project. All rights reserved.
+ * Copyright (c) 1999-2012 The OpenSSL Project. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -88,6 +88,7 @@ static ERR_STRING_DATA X509_str_functs[] = {
{ERR_FUNC(X509_F_X509_ATTRIBUTE_GET0_DATA), "X509_ATTRIBUTE_get0_data"},
{ERR_FUNC(X509_F_X509_ATTRIBUTE_SET1_DATA), "X509_ATTRIBUTE_set1_data"},
{ERR_FUNC(X509_F_X509_CHECK_PRIVATE_KEY), "X509_check_private_key"},
+ {ERR_FUNC(X509_F_X509_CRL_DIFF), "X509_CRL_diff"},
{ERR_FUNC(X509_F_X509_CRL_PRINT_FP), "X509_CRL_print_fp"},
{ERR_FUNC(X509_F_X509_EXTENSION_CREATE_BY_NID),
"X509_EXTENSION_create_by_NID"},
@@ -131,22 +132,29 @@ static ERR_STRING_DATA X509_str_functs[] = {
};
static ERR_STRING_DATA X509_str_reasons[] = {
+ {ERR_REASON(X509_R_AKID_MISMATCH), "akid mismatch"},
{ERR_REASON(X509_R_BAD_X509_FILETYPE), "bad x509 filetype"},
{ERR_REASON(X509_R_BASE64_DECODE_ERROR), "base64 decode error"},
{ERR_REASON(X509_R_CANT_CHECK_DH_KEY), "cant check dh key"},
{ERR_REASON(X509_R_CERT_ALREADY_IN_HASH_TABLE),
"cert already in hash table"},
+ {ERR_REASON(X509_R_CRL_ALREADY_DELTA), "crl already delta"},
+ {ERR_REASON(X509_R_CRL_VERIFY_FAILURE), "crl verify failure"},
{ERR_REASON(X509_R_ERR_ASN1_LIB), "err asn1 lib"},
+ {ERR_REASON(X509_R_IDP_MISMATCH), "idp mismatch"},
{ERR_REASON(X509_R_INVALID_DIRECTORY), "invalid directory"},
{ERR_REASON(X509_R_INVALID_FIELD_NAME), "invalid field name"},
{ERR_REASON(X509_R_INVALID_TRUST), "invalid trust"},
+ {ERR_REASON(X509_R_ISSUER_MISMATCH), "issuer mismatch"},
{ERR_REASON(X509_R_KEY_TYPE_MISMATCH), "key type mismatch"},
{ERR_REASON(X509_R_KEY_VALUES_MISMATCH), "key values mismatch"},
{ERR_REASON(X509_R_LOADING_CERT_DIR), "loading cert dir"},
{ERR_REASON(X509_R_LOADING_DEFAULTS), "loading defaults"},
{ERR_REASON(X509_R_METHOD_NOT_SUPPORTED), "method not supported"},
+ {ERR_REASON(X509_R_NEWER_CRL_NOT_NEWER), "newer crl not newer"},
{ERR_REASON(X509_R_NO_CERT_SET_FOR_US_TO_VERIFY),
"no cert set for us to verify"},
+ {ERR_REASON(X509_R_NO_CRL_NUMBER), "no crl number"},
{ERR_REASON(X509_R_PUBLIC_KEY_DECODE_ERROR), "public key decode error"},
{ERR_REASON(X509_R_PUBLIC_KEY_ENCODE_ERROR), "public key encode error"},
{ERR_REASON(X509_R_SHOULD_RETRY), "should retry"},
diff --git a/crypto/openssl/crypto/x509/x509_lu.c b/crypto/openssl/crypto/x509/x509_lu.c
index 8415d1d..b0d6539 100644
--- a/crypto/openssl/crypto/x509/x509_lu.c
+++ b/crypto/openssl/crypto/x509/x509_lu.c
@@ -238,6 +238,19 @@ void X509_STORE_free(X509_STORE *vfy)
if (vfy == NULL)
return;
+ i = CRYPTO_add(&vfy->references, -1, CRYPTO_LOCK_X509_STORE);
+#ifdef REF_PRINT
+ REF_PRINT("X509_STORE", vfy);
+#endif
+ if (i > 0)
+ return;
+#ifdef REF_CHECK
+ if (i < 0) {
+ fprintf(stderr, "X509_STORE_free, bad reference count\n");
+ abort(); /* ok */
+ }
+#endif
+
sk = vfy->get_cert_methods;
for (i = 0; i < sk_X509_LOOKUP_num(sk); i++) {
lu = sk_X509_LOOKUP_value(sk, i);
@@ -681,6 +694,19 @@ void X509_STORE_set_verify_cb(X509_STORE *ctx,
ctx->verify_cb = verify_cb;
}
+void X509_STORE_set_lookup_crls_cb(X509_STORE *ctx,
+ STACK_OF(X509_CRL) *(*cb) (X509_STORE_CTX
+ *ctx,
+ X509_NAME *nm))
+{
+ ctx->lookup_crls = cb;
+}
+
+X509_STORE *X509_STORE_CTX_get0_store(X509_STORE_CTX *ctx)
+{
+ return ctx->ctx;
+}
+
IMPLEMENT_STACK_OF(X509_LOOKUP)
IMPLEMENT_STACK_OF(X509_OBJECT)
diff --git a/crypto/openssl/crypto/x509/x509_set.c b/crypto/openssl/crypto/x509/x509_set.c
index 4645777..5b802bd 100644
--- a/crypto/openssl/crypto/x509/x509_set.c
+++ b/crypto/openssl/crypto/x509/x509_set.c
@@ -67,6 +67,11 @@ int X509_set_version(X509 *x, long version)
{
if (x == NULL)
return (0);
+ if (version == 0) {
+ M_ASN1_INTEGER_free(x->cert_info->version);
+ x->cert_info->version = NULL;
+ return (1);
+ }
if (x->cert_info->version == NULL) {
if ((x->cert_info->version = M_ASN1_INTEGER_new()) == NULL)
return (0);
diff --git a/crypto/openssl/crypto/x509/x509_trs.c b/crypto/openssl/crypto/x509/x509_trs.c
index 7e44479..11e0763 100644
--- a/crypto/openssl/crypto/x509/x509_trs.c
+++ b/crypto/openssl/crypto/x509/x509_trs.c
@@ -119,6 +119,14 @@ int X509_check_trust(X509 *x, int id, int flags)
int idx;
if (id == -1)
return 1;
+ /* We get this as a default value */
+ if (id == 0) {
+ int rv;
+ rv = obj_trust(NID_anyExtendedKeyUsage, x, 0);
+ if (rv != X509_TRUST_UNTRUSTED)
+ return rv;
+ return trust_compat(NULL, x, 0);
+ }
idx = X509_TRUST_get_by_id(id);
if (idx == -1)
return default_trust(id, x, flags);
diff --git a/crypto/openssl/crypto/x509/x509_txt.c b/crypto/openssl/crypto/x509/x509_txt.c
index d834180..3d46d3f 100644
--- a/crypto/openssl/crypto/x509/x509_txt.c
+++ b/crypto/openssl/crypto/x509/x509_txt.c
@@ -184,6 +184,26 @@ const char *X509_verify_cert_error_string(long n)
case X509_V_ERR_CRL_PATH_VALIDATION_ERROR:
return ("CRL path validation error");
+ case X509_V_ERR_SUITE_B_INVALID_VERSION:
+ return ("Suite B: certificate version invalid");
+ case X509_V_ERR_SUITE_B_INVALID_ALGORITHM:
+ return ("Suite B: invalid public key algorithm");
+ case X509_V_ERR_SUITE_B_INVALID_CURVE:
+ return ("Suite B: invalid ECC curve");
+ case X509_V_ERR_SUITE_B_INVALID_SIGNATURE_ALGORITHM:
+ return ("Suite B: invalid signature algorithm");
+ case X509_V_ERR_SUITE_B_LOS_NOT_ALLOWED:
+ return ("Suite B: curve not allowed for this LOS");
+ case X509_V_ERR_SUITE_B_CANNOT_SIGN_P_384_WITH_P_256:
+ return ("Suite B: cannot sign P-384 with P-256");
+
+ case X509_V_ERR_HOSTNAME_MISMATCH:
+ return ("Hostname mismatch");
+ case X509_V_ERR_EMAIL_MISMATCH:
+ return ("Email address mismatch");
+ case X509_V_ERR_IP_ADDRESS_MISMATCH:
+ return ("IP address mismatch");
+
default:
BIO_snprintf(buf, sizeof buf, "error number %ld", n);
return (buf);
diff --git a/crypto/openssl/crypto/x509/x509_vfy.c b/crypto/openssl/crypto/x509/x509_vfy.c
index 7009ae6..a2f1dbe 100644
--- a/crypto/openssl/crypto/x509/x509_vfy.c
+++ b/crypto/openssl/crypto/x509/x509_vfy.c
@@ -69,6 +69,7 @@
#include <openssl/x509.h>
#include <openssl/x509v3.h>
#include <openssl/objects.h>
+#include "vpm_int.h"
/* CRL score values */
@@ -113,6 +114,7 @@ static int check_issued(X509_STORE_CTX *ctx, X509 *x, X509 *issuer);
static X509 *find_issuer(X509_STORE_CTX *ctx, STACK_OF(X509) *sk, X509 *x);
static int check_chain_extensions(X509_STORE_CTX *ctx);
static int check_name_constraints(X509_STORE_CTX *ctx);
+static int check_id(X509_STORE_CTX *ctx);
static int check_trust(X509_STORE_CTX *ctx);
static int check_revocation(X509_STORE_CTX *ctx);
static int check_cert(X509_STORE_CTX *ctx);
@@ -148,6 +150,40 @@ static int x509_subject_cmp(X509 **a, X509 **b)
return X509_subject_name_cmp(*a, *b);
}
#endif
+/* Return 1 is a certificate is self signed */
+static int cert_self_signed(X509 *x)
+{
+ X509_check_purpose(x, -1, 0);
+ if (x->ex_flags & EXFLAG_SS)
+ return 1;
+ else
+ return 0;
+}
+
+/* Given a certificate try and find an exact match in the store */
+
+static X509 *lookup_cert_match(X509_STORE_CTX *ctx, X509 *x)
+{
+ STACK_OF(X509) *certs;
+ X509 *xtmp = NULL;
+ int i;
+ /* Lookup all certs with matching subject name */
+ certs = ctx->lookup_certs(ctx, X509_get_subject_name(x));
+ if (certs == NULL)
+ return NULL;
+ /* Look for exact match */
+ for (i = 0; i < sk_X509_num(certs); i++) {
+ xtmp = sk_X509_value(certs, i);
+ if (!X509_cmp(xtmp, x))
+ break;
+ }
+ if (i < sk_X509_num(certs))
+ CRYPTO_add(&xtmp->references, 1, CRYPTO_LOCK_X509);
+ else
+ xtmp = NULL;
+ sk_X509_pop_free(certs, X509_free);
+ return xtmp;
+}
int X509_verify_cert(X509_STORE_CTX *ctx)
{
@@ -205,8 +241,24 @@ int X509_verify_cert(X509_STORE_CTX *ctx)
* later. */
/* If we are self signed, we break */
- if (ctx->check_issued(ctx, x, x))
+ if (cert_self_signed(x))
break;
+ /*
+ * If asked see if we can find issuer in trusted store first
+ */
+ if (ctx->param->flags & X509_V_FLAG_TRUSTED_FIRST) {
+ ok = ctx->get_issuer(&xtmp, ctx, x);
+ if (ok < 0)
+ return ok;
+ /*
+ * If successful for now free up cert so it will be picked up
+ * again later.
+ */
+ if (ok > 0) {
+ X509_free(xtmp);
+ break;
+ }
+ }
/* If we were passed a cert chain, use it first */
if (ctx->untrusted != NULL) {
@@ -244,7 +296,7 @@ int X509_verify_cert(X509_STORE_CTX *ctx)
*/
i = sk_X509_num(ctx->chain);
x = sk_X509_value(ctx->chain, i - 1);
- if (ctx->check_issued(ctx, x, x)) {
+ if (cert_self_signed(x)) {
/* we have a self signed certificate */
if (sk_X509_num(ctx->chain) == 1) {
/*
@@ -290,9 +342,10 @@ int X509_verify_cert(X509_STORE_CTX *ctx)
if (depth < num)
break;
/* If we are self signed, we break */
- if (ctx->check_issued(ctx, x, x))
+ if (cert_self_signed(x))
break;
ok = ctx->get_issuer(&xtmp, ctx, x);
+
if (ok < 0)
return ok;
if (ok == 0)
@@ -306,14 +359,22 @@ int X509_verify_cert(X509_STORE_CTX *ctx)
num++;
}
+ /* we now have our chain, lets check it... */
+ i = check_trust(ctx);
+
+ /* If explicitly rejected error */
+ if (i == X509_TRUST_REJECTED)
+ goto end;
/*
- * If we haven't got a least one certificate from our store then check
- * if there is an alternative chain that could be used. We only do this
- * if the user hasn't switched off alternate chain checking
+ * If it's not explicitly trusted then check if there is an alternative
+ * chain that could be used. We only do this if we haven't already
+ * checked via TRUSTED_FIRST and the user hasn't switched off alternate
+ * chain checking
*/
retry = 0;
- if (num == ctx->last_untrusted &&
- !(ctx->param->flags & X509_V_FLAG_NO_ALT_CHAINS)) {
+ if (i != X509_TRUST_TRUSTED
+ && !(ctx->param->flags & X509_V_FLAG_TRUSTED_FIRST)
+ && !(ctx->param->flags & X509_V_FLAG_NO_ALT_CHAINS)) {
while (j-- > 1) {
xtmp2 = sk_X509_value(ctx->chain, j - 1);
ok = ctx->get_issuer(&xtmp, ctx, xtmp2);
@@ -343,8 +404,12 @@ int X509_verify_cert(X509_STORE_CTX *ctx)
}
} while (retry);
- /* Is last certificate looked up self signed? */
- if (!ctx->check_issued(ctx, x, x)) {
+ /*
+ * If not explicitly trusted then indicate error unless it's a single
+ * self signed certificate in which case we've indicated an error already
+ * and set bad_chain == 1
+ */
+ if (i != X509_TRUST_TRUSTED && !bad_chain) {
if ((chain_ss == NULL) || !ctx->check_issued(ctx, x, chain_ss)) {
if (ctx->last_untrusted >= num)
ctx->error = X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT_LOCALLY;
@@ -381,10 +446,7 @@ int X509_verify_cert(X509_STORE_CTX *ctx)
if (!ok)
goto end;
- /* The chain extensions are OK: check trust */
-
- if (param->trust > 0)
- ok = check_trust(ctx);
+ ok = check_id(ctx);
if (!ok)
goto end;
@@ -401,6 +463,16 @@ int X509_verify_cert(X509_STORE_CTX *ctx)
if (!ok)
goto end;
+ i = X509_chain_check_suiteb(&ctx->error_depth, NULL, ctx->chain,
+ ctx->param->flags);
+ if (i != X509_V_OK) {
+ ctx->error = i;
+ ctx->current_cert = sk_X509_value(ctx->chain, ctx->error_depth);
+ ok = cb(0, ctx);
+ if (!ok)
+ goto end;
+ }
+
/* At this point, we have a chain and need to verify it */
if (ctx->verify != NULL)
ok = ctx->verify(ctx);
@@ -467,7 +539,6 @@ static int check_issued(X509_STORE_CTX *ctx, X509 *x, X509 *issuer)
ctx->current_cert = x;
ctx->current_issuer = issuer;
return ctx->verify_cb(0, ctx);
- return 0;
}
/* Alternative lookup method: look from a STACK stored in other_ctx */
@@ -667,30 +738,97 @@ static int check_name_constraints(X509_STORE_CTX *ctx)
return 1;
}
-static int check_trust(X509_STORE_CTX *ctx)
+static int check_id_error(X509_STORE_CTX *ctx, int errcode)
{
-#ifdef OPENSSL_NO_CHAIN_VERIFY
+ ctx->error = errcode;
+ ctx->current_cert = ctx->cert;
+ ctx->error_depth = 0;
+ return ctx->verify_cb(0, ctx);
+}
+
+static int check_hosts(X509 *x, X509_VERIFY_PARAM_ID *id)
+{
+ int i;
+ int n = sk_OPENSSL_STRING_num(id->hosts);
+ char *name;
+
+ for (i = 0; i < n; ++i) {
+ name = sk_OPENSSL_STRING_value(id->hosts, i);
+ if (X509_check_host(x, name, 0, id->hostflags, &id->peername) > 0)
+ return 1;
+ }
+ return n == 0;
+}
+
+static int check_id(X509_STORE_CTX *ctx)
+{
+ X509_VERIFY_PARAM *vpm = ctx->param;
+ X509_VERIFY_PARAM_ID *id = vpm->id;
+ X509 *x = ctx->cert;
+ if (id->hosts && check_hosts(x, id) <= 0) {
+ if (!check_id_error(ctx, X509_V_ERR_HOSTNAME_MISMATCH))
+ return 0;
+ }
+ if (id->email && X509_check_email(x, id->email, id->emaillen, 0) <= 0) {
+ if (!check_id_error(ctx, X509_V_ERR_EMAIL_MISMATCH))
+ return 0;
+ }
+ if (id->ip && X509_check_ip(x, id->ip, id->iplen, 0) <= 0) {
+ if (!check_id_error(ctx, X509_V_ERR_IP_ADDRESS_MISMATCH))
+ return 0;
+ }
return 1;
-#else
+}
+
+static int check_trust(X509_STORE_CTX *ctx)
+{
int i, ok;
- X509 *x;
+ X509 *x = NULL;
int (*cb) (int xok, X509_STORE_CTX *xctx);
cb = ctx->verify_cb;
-/* For now just check the last certificate in the chain */
- i = sk_X509_num(ctx->chain) - 1;
- x = sk_X509_value(ctx->chain, i);
- ok = X509_check_trust(x, ctx->param->trust, 0);
- if (ok == X509_TRUST_TRUSTED)
- return 1;
- ctx->error_depth = i;
- ctx->current_cert = x;
- if (ok == X509_TRUST_REJECTED)
- ctx->error = X509_V_ERR_CERT_REJECTED;
- else
- ctx->error = X509_V_ERR_CERT_UNTRUSTED;
- ok = cb(0, ctx);
- return ok;
-#endif
+ /* Check all trusted certificates in chain */
+ for (i = ctx->last_untrusted; i < sk_X509_num(ctx->chain); i++) {
+ x = sk_X509_value(ctx->chain, i);
+ ok = X509_check_trust(x, ctx->param->trust, 0);
+ /* If explicitly trusted return trusted */
+ if (ok == X509_TRUST_TRUSTED)
+ return X509_TRUST_TRUSTED;
+ /*
+ * If explicitly rejected notify callback and reject if not
+ * overridden.
+ */
+ if (ok == X509_TRUST_REJECTED) {
+ ctx->error_depth = i;
+ ctx->current_cert = x;
+ ctx->error = X509_V_ERR_CERT_REJECTED;
+ ok = cb(0, ctx);
+ if (!ok)
+ return X509_TRUST_REJECTED;
+ }
+ }
+ /*
+ * If we accept partial chains and have at least one trusted certificate
+ * return success.
+ */
+ if (ctx->param->flags & X509_V_FLAG_PARTIAL_CHAIN) {
+ X509 *mx;
+ if (ctx->last_untrusted < sk_X509_num(ctx->chain))
+ return X509_TRUST_TRUSTED;
+ x = sk_X509_value(ctx->chain, 0);
+ mx = lookup_cert_match(ctx, x);
+ if (mx) {
+ (void)sk_X509_set(ctx->chain, 0, mx);
+ X509_free(x);
+ ctx->last_untrusted = 0;
+ return X509_TRUST_TRUSTED;
+ }
+ }
+
+ /*
+ * If no trusted certs in chain at all return untrusted and allow
+ * standard (no issuer cert) etc errors to be indicated.
+ */
+ return X509_TRUST_UNTRUSTED;
}
static int check_revocation(X509_STORE_CTX *ctx)
@@ -1409,6 +1547,14 @@ static int check_crl(X509_STORE_CTX *ctx, X509_CRL *crl)
if (!ok)
goto err;
} else {
+ int rv;
+ rv = X509_CRL_check_suiteb(crl, ikey, ctx->param->flags);
+ if (rv != X509_V_OK) {
+ ctx->error = rv;
+ ok = ctx->verify_cb(0, ctx);
+ if (!ok)
+ goto err;
+ }
/* Verify CRL signature */
if (X509_CRL_verify(crl, ikey) <= 0) {
ctx->error = X509_V_ERR_CRL_SIGNATURE_FAILURE;
@@ -1565,6 +1711,10 @@ static int internal_verify(X509_STORE_CTX *ctx)
if (ctx->check_issued(ctx, xi, xi))
xs = xi;
else {
+ if (ctx->param->flags & X509_V_FLAG_PARTIAL_CHAIN) {
+ xs = xi;
+ goto check_cert;
+ }
if (n <= 0) {
ctx->error = X509_V_ERR_UNABLE_TO_VERIFY_LEAF_SIGNATURE;
ctx->current_cert = xi;
@@ -1610,6 +1760,7 @@ static int internal_verify(X509_STORE_CTX *ctx)
xs->valid = 1;
+ check_cert:
ok = check_cert_time(ctx, xs);
if (!ok)
goto end;
@@ -1824,6 +1975,114 @@ int X509_get_pubkey_parameters(EVP_PKEY *pkey, STACK_OF(X509) *chain)
return 1;
}
+/* Make a delta CRL as the diff between two full CRLs */
+
+X509_CRL *X509_CRL_diff(X509_CRL *base, X509_CRL *newer,
+ EVP_PKEY *skey, const EVP_MD *md, unsigned int flags)
+{
+ X509_CRL *crl = NULL;
+ int i;
+ STACK_OF(X509_REVOKED) *revs = NULL;
+ /* CRLs can't be delta already */
+ if (base->base_crl_number || newer->base_crl_number) {
+ X509err(X509_F_X509_CRL_DIFF, X509_R_CRL_ALREADY_DELTA);
+ return NULL;
+ }
+ /* Base and new CRL must have a CRL number */
+ if (!base->crl_number || !newer->crl_number) {
+ X509err(X509_F_X509_CRL_DIFF, X509_R_NO_CRL_NUMBER);
+ return NULL;
+ }
+ /* Issuer names must match */
+ if (X509_NAME_cmp(X509_CRL_get_issuer(base), X509_CRL_get_issuer(newer))) {
+ X509err(X509_F_X509_CRL_DIFF, X509_R_ISSUER_MISMATCH);
+ return NULL;
+ }
+ /* AKID and IDP must match */
+ if (!crl_extension_match(base, newer, NID_authority_key_identifier)) {
+ X509err(X509_F_X509_CRL_DIFF, X509_R_AKID_MISMATCH);
+ return NULL;
+ }
+ if (!crl_extension_match(base, newer, NID_issuing_distribution_point)) {
+ X509err(X509_F_X509_CRL_DIFF, X509_R_IDP_MISMATCH);
+ return NULL;
+ }
+ /* Newer CRL number must exceed full CRL number */
+ if (ASN1_INTEGER_cmp(newer->crl_number, base->crl_number) <= 0) {
+ X509err(X509_F_X509_CRL_DIFF, X509_R_NEWER_CRL_NOT_NEWER);
+ return NULL;
+ }
+ /* CRLs must verify */
+ if (skey && (X509_CRL_verify(base, skey) <= 0 ||
+ X509_CRL_verify(newer, skey) <= 0)) {
+ X509err(X509_F_X509_CRL_DIFF, X509_R_CRL_VERIFY_FAILURE);
+ return NULL;
+ }
+ /* Create new CRL */
+ crl = X509_CRL_new();
+ if (!crl || !X509_CRL_set_version(crl, 1))
+ goto memerr;
+ /* Set issuer name */
+ if (!X509_CRL_set_issuer_name(crl, X509_CRL_get_issuer(newer)))
+ goto memerr;
+
+ if (!X509_CRL_set_lastUpdate(crl, X509_CRL_get_lastUpdate(newer)))
+ goto memerr;
+ if (!X509_CRL_set_nextUpdate(crl, X509_CRL_get_nextUpdate(newer)))
+ goto memerr;
+
+ /* Set base CRL number: must be critical */
+
+ if (!X509_CRL_add1_ext_i2d(crl, NID_delta_crl, base->crl_number, 1, 0))
+ goto memerr;
+
+ /*
+ * Copy extensions across from newest CRL to delta: this will set CRL
+ * number to correct value too.
+ */
+
+ for (i = 0; i < X509_CRL_get_ext_count(newer); i++) {
+ X509_EXTENSION *ext;
+ ext = X509_CRL_get_ext(newer, i);
+ if (!X509_CRL_add_ext(crl, ext, -1))
+ goto memerr;
+ }
+
+ /* Go through revoked entries, copying as needed */
+
+ revs = X509_CRL_get_REVOKED(newer);
+
+ for (i = 0; i < sk_X509_REVOKED_num(revs); i++) {
+ X509_REVOKED *rvn, *rvtmp;
+ rvn = sk_X509_REVOKED_value(revs, i);
+ /*
+ * Add only if not also in base. TODO: need something cleverer here
+ * for some more complex CRLs covering multiple CAs.
+ */
+ if (!X509_CRL_get0_by_serial(base, &rvtmp, rvn->serialNumber)) {
+ rvtmp = X509_REVOKED_dup(rvn);
+ if (!rvtmp)
+ goto memerr;
+ if (!X509_CRL_add0_revoked(crl, rvtmp)) {
+ X509_REVOKED_free(rvtmp);
+ goto memerr;
+ }
+ }
+ }
+ /* TODO: optionally prune deleted entries */
+
+ if (skey && md && !X509_CRL_sign(crl, skey, md))
+ goto memerr;
+
+ return crl;
+
+ memerr:
+ X509err(X509_F_X509_CRL_DIFF, ERR_R_MALLOC_FAILURE);
+ if (crl)
+ X509_CRL_free(crl);
+ return NULL;
+}
+
int X509_STORE_CTX_get_ex_new_index(long argl, void *argp,
CRYPTO_EX_new *new_func,
CRYPTO_EX_dup *dup_func,
@@ -1874,16 +2133,9 @@ STACK_OF(X509) *X509_STORE_CTX_get_chain(X509_STORE_CTX *ctx)
STACK_OF(X509) *X509_STORE_CTX_get1_chain(X509_STORE_CTX *ctx)
{
- int i;
- X509 *x;
- STACK_OF(X509) *chain;
- if (!ctx->chain || !(chain = sk_X509_dup(ctx->chain)))
+ if (!ctx->chain)
return NULL;
- for (i = 0; i < sk_X509_num(chain); i++) {
- x = sk_X509_value(chain, i);
- CRYPTO_add(&x->references, 1, CRYPTO_LOCK_X509);
- }
- return chain;
+ return X509_chain_up_ref(ctx->chain);
}
X509 *X509_STORE_CTX_get0_current_issuer(X509_STORE_CTX *ctx)
diff --git a/crypto/openssl/crypto/x509/x509_vfy.h b/crypto/openssl/crypto/x509/x509_vfy.h
index aacdf55..bd8613c 100644
--- a/crypto/openssl/crypto/x509/x509_vfy.h
+++ b/crypto/openssl/crypto/x509/x509_vfy.h
@@ -156,6 +156,8 @@ typedef struct x509_lookup_method_st {
X509_OBJECT *ret);
} X509_LOOKUP_METHOD;
+typedef struct X509_VERIFY_PARAM_ID_st X509_VERIFY_PARAM_ID;
+
/*
* This structure hold all parameters associated with a verify operation by
* including an X509_VERIFY_PARAM structure in related structures the
@@ -171,6 +173,7 @@ typedef struct X509_VERIFY_PARAM_st {
int trust; /* trust setting to check */
int depth; /* Verify depth */
STACK_OF(ASN1_OBJECT) *policies; /* Permissible policies */
+ X509_VERIFY_PARAM_ID *id; /* opaque ID data */
} X509_VERIFY_PARAM;
DECLARE_STACK_OF(X509_VERIFY_PARAM)
@@ -370,6 +373,19 @@ void X509_STORE_CTX_set_depth(X509_STORE_CTX *ctx, int depth);
# define X509_V_ERR_UNSUPPORTED_NAME_SYNTAX 53
# define X509_V_ERR_CRL_PATH_VALIDATION_ERROR 54
+/* Suite B mode algorithm violation */
+# define X509_V_ERR_SUITE_B_INVALID_VERSION 56
+# define X509_V_ERR_SUITE_B_INVALID_ALGORITHM 57
+# define X509_V_ERR_SUITE_B_INVALID_CURVE 58
+# define X509_V_ERR_SUITE_B_INVALID_SIGNATURE_ALGORITHM 59
+# define X509_V_ERR_SUITE_B_LOS_NOT_ALLOWED 60
+# define X509_V_ERR_SUITE_B_CANNOT_SIGN_P_384_WITH_P_256 61
+
+/* Host, email and IP check errors */
+# define X509_V_ERR_HOSTNAME_MISMATCH 62
+# define X509_V_ERR_EMAIL_MISMATCH 63
+# define X509_V_ERR_IP_ADDRESS_MISMATCH 64
+
/* The application is not happy */
# define X509_V_ERR_APPLICATION_VERIFICATION 50
@@ -405,10 +421,21 @@ void X509_STORE_CTX_set_depth(X509_STORE_CTX *ctx, int depth);
# define X509_V_FLAG_USE_DELTAS 0x2000
/* Check selfsigned CA signature */
# define X509_V_FLAG_CHECK_SS_SIGNATURE 0x4000
+/* Use trusted store first */
+# define X509_V_FLAG_TRUSTED_FIRST 0x8000
+/* Suite B 128 bit only mode: not normally used */
+# define X509_V_FLAG_SUITEB_128_LOS_ONLY 0x10000
+/* Suite B 192 bit only mode */
+# define X509_V_FLAG_SUITEB_192_LOS 0x20000
+/* Suite B 128 bit mode allowing 192 bit algorithms */
+# define X509_V_FLAG_SUITEB_128_LOS 0x30000
+
+/* Allow partial chains if at least one certificate is in trusted store */
+# define X509_V_FLAG_PARTIAL_CHAIN 0x80000
/*
* If the initial chain is not trusted, do not attempt to build an alternative
- * chain. Alternate chain checking was introduced in 1.0.1n/1.0.2b. Setting
- * this flag will force the behaviour to match that of previous versions.
+ * chain. Alternate chain checking was introduced in 1.0.2b. Setting this flag
+ * will force the behaviour to match that of previous versions.
*/
# define X509_V_FLAG_NO_ALT_CHAINS 0x100000
@@ -445,6 +472,11 @@ int X509_STORE_set1_param(X509_STORE *ctx, X509_VERIFY_PARAM *pm);
void X509_STORE_set_verify_cb(X509_STORE *ctx,
int (*verify_cb) (int, X509_STORE_CTX *));
+void X509_STORE_set_lookup_crls_cb(X509_STORE *ctx,
+ STACK_OF(X509_CRL) *(*cb) (X509_STORE_CTX
+ *ctx,
+ X509_NAME *nm));
+
X509_STORE_CTX *X509_STORE_CTX_new(void);
int X509_STORE_CTX_get1_issuer(X509 **issuer, X509_STORE_CTX *ctx, X509 *x);
@@ -455,6 +487,8 @@ int X509_STORE_CTX_init(X509_STORE_CTX *ctx, X509_STORE *store,
void X509_STORE_CTX_trusted_stack(X509_STORE_CTX *ctx, STACK_OF(X509) *sk);
void X509_STORE_CTX_cleanup(X509_STORE_CTX *ctx);
+X509_STORE *X509_STORE_CTX_get0_store(X509_STORE_CTX *ctx);
+
X509_LOOKUP *X509_STORE_add_lookup(X509_STORE *v, X509_LOOKUP_METHOD *m);
X509_LOOKUP_METHOD *X509_LOOKUP_hash_dir(void);
@@ -552,9 +586,27 @@ int X509_VERIFY_PARAM_add0_policy(X509_VERIFY_PARAM *param,
ASN1_OBJECT *policy);
int X509_VERIFY_PARAM_set1_policies(X509_VERIFY_PARAM *param,
STACK_OF(ASN1_OBJECT) *policies);
+
+int X509_VERIFY_PARAM_set1_host(X509_VERIFY_PARAM *param,
+ const char *name, size_t namelen);
+int X509_VERIFY_PARAM_add1_host(X509_VERIFY_PARAM *param,
+ const char *name, size_t namelen);
+void X509_VERIFY_PARAM_set_hostflags(X509_VERIFY_PARAM *param,
+ unsigned int flags);
+char *X509_VERIFY_PARAM_get0_peername(X509_VERIFY_PARAM *);
+int X509_VERIFY_PARAM_set1_email(X509_VERIFY_PARAM *param,
+ const char *email, size_t emaillen);
+int X509_VERIFY_PARAM_set1_ip(X509_VERIFY_PARAM *param,
+ const unsigned char *ip, size_t iplen);
+int X509_VERIFY_PARAM_set1_ip_asc(X509_VERIFY_PARAM *param,
+ const char *ipasc);
+
int X509_VERIFY_PARAM_get_depth(const X509_VERIFY_PARAM *param);
+const char *X509_VERIFY_PARAM_get0_name(const X509_VERIFY_PARAM *param);
int X509_VERIFY_PARAM_add0_table(X509_VERIFY_PARAM *param);
+int X509_VERIFY_PARAM_get_count(void);
+const X509_VERIFY_PARAM *X509_VERIFY_PARAM_get0(int id);
const X509_VERIFY_PARAM *X509_VERIFY_PARAM_lookup(const char *name);
void X509_VERIFY_PARAM_table_cleanup(void);
diff --git a/crypto/openssl/crypto/x509/x509_vpm.c b/crypto/openssl/crypto/x509/x509_vpm.c
index 6b0bf8a..1ea0c69 100644
--- a/crypto/openssl/crypto/x509/x509_vpm.c
+++ b/crypto/openssl/crypto/x509/x509_vpm.c
@@ -66,10 +66,73 @@
#include <openssl/x509.h>
#include <openssl/x509v3.h>
+#include "vpm_int.h"
+
/* X509_VERIFY_PARAM functions */
+#define SET_HOST 0
+#define ADD_HOST 1
+
+static char *str_copy(const char *s)
+{
+ return OPENSSL_strdup(s);
+}
+
+static void str_free(char *s)
+{
+ OPENSSL_free(s);
+}
+
+#define string_stack_free(sk) sk_OPENSSL_STRING_pop_free(sk, str_free)
+
+static int int_x509_param_set_hosts(X509_VERIFY_PARAM_ID *id, int mode,
+ const char *name, size_t namelen)
+{
+ char *copy;
+
+ /*
+ * Refuse names with embedded NUL bytes, except perhaps as final byte.
+ * XXX: Do we need to push an error onto the error stack?
+ */
+ if (namelen == 0)
+ namelen = name ? strlen(name) : 0;
+ else if (name && memchr(name, '\0', namelen > 1 ? namelen - 1 : namelen))
+ return 0;
+ if (name && name[namelen - 1] == '\0')
+ --namelen;
+
+ if (mode == SET_HOST && id->hosts) {
+ string_stack_free(id->hosts);
+ id->hosts = NULL;
+ }
+ if (name == NULL || namelen == 0)
+ return 1;
+
+ copy = BUF_strndup(name, namelen);
+ if (copy == NULL)
+ return 0;
+
+ if (id->hosts == NULL &&
+ (id->hosts = sk_OPENSSL_STRING_new_null()) == NULL) {
+ OPENSSL_free(copy);
+ return 0;
+ }
+
+ if (!sk_OPENSSL_STRING_push(id->hosts, copy)) {
+ OPENSSL_free(copy);
+ if (sk_OPENSSL_STRING_num(id->hosts) == 0) {
+ sk_OPENSSL_STRING_free(id->hosts);
+ id->hosts = NULL;
+ }
+ return 0;
+ }
+
+ return 1;
+}
+
static void x509_verify_param_zero(X509_VERIFY_PARAM *param)
{
+ X509_VERIFY_PARAM_ID *paramid;
if (!param)
return;
param->name = NULL;
@@ -85,15 +148,42 @@ static void x509_verify_param_zero(X509_VERIFY_PARAM *param)
sk_ASN1_OBJECT_pop_free(param->policies, ASN1_OBJECT_free);
param->policies = NULL;
}
+ paramid = param->id;
+ if (paramid->hosts) {
+ string_stack_free(paramid->hosts);
+ paramid->hosts = NULL;
+ }
+ if (paramid->peername)
+ OPENSSL_free(paramid->peername);
+ if (paramid->email) {
+ OPENSSL_free(paramid->email);
+ paramid->email = NULL;
+ paramid->emaillen = 0;
+ }
+ if (paramid->ip) {
+ OPENSSL_free(paramid->ip);
+ paramid->ip = NULL;
+ paramid->iplen = 0;
+ }
+
}
X509_VERIFY_PARAM *X509_VERIFY_PARAM_new(void)
{
X509_VERIFY_PARAM *param;
- param = OPENSSL_malloc(sizeof(X509_VERIFY_PARAM));
+ X509_VERIFY_PARAM_ID *paramid;
+
+ param = OPENSSL_malloc(sizeof *param);
if (!param)
return NULL;
- memset(param, 0, sizeof(X509_VERIFY_PARAM));
+ paramid = OPENSSL_malloc(sizeof *paramid);
+ if (!paramid) {
+ OPENSSL_free(param);
+ return NULL;
+ }
+ memset(param, 0, sizeof *param);
+ memset(paramid, 0, sizeof *paramid);
+ param->id = paramid;
x509_verify_param_zero(param);
return param;
}
@@ -103,6 +193,7 @@ void X509_VERIFY_PARAM_free(X509_VERIFY_PARAM *param)
if (param == NULL)
return;
x509_verify_param_zero(param);
+ OPENSSL_free(param->id);
OPENSSL_free(param);
}
@@ -144,6 +235,11 @@ void X509_VERIFY_PARAM_free(X509_VERIFY_PARAM *param)
(to_overwrite || \
((src->field != def) && (to_default || (dest->field == def))))
+/* As above but for ID fields */
+
+#define test_x509_verify_param_copy_id(idf, def) \
+ test_x509_verify_param_copy(id->idf, def)
+
/* Macro to test and copy a field if necessary */
#define x509_verify_param_copy(field, def) \
@@ -155,8 +251,10 @@ int X509_VERIFY_PARAM_inherit(X509_VERIFY_PARAM *dest,
{
unsigned long inh_flags;
int to_default, to_overwrite;
+ X509_VERIFY_PARAM_ID *id;
if (!src)
return 1;
+ id = src->id;
inh_flags = dest->inh_flags | src->inh_flags;
if (inh_flags & X509_VP_FLAG_ONCE)
@@ -197,6 +295,31 @@ int X509_VERIFY_PARAM_inherit(X509_VERIFY_PARAM *dest,
return 0;
}
+ /* Copy the host flags if and only if we're copying the host list */
+ if (test_x509_verify_param_copy_id(hosts, NULL)) {
+ if (dest->id->hosts) {
+ string_stack_free(dest->id->hosts);
+ dest->id->hosts = NULL;
+ }
+ if (id->hosts) {
+ dest->id->hosts =
+ sk_OPENSSL_STRING_deep_copy(id->hosts, str_copy, str_free);
+ if (dest->id->hosts == NULL)
+ return 0;
+ dest->id->hostflags = id->hostflags;
+ }
+ }
+
+ if (test_x509_verify_param_copy_id(email, NULL)) {
+ if (!X509_VERIFY_PARAM_set1_email(dest, id->email, id->emaillen))
+ return 0;
+ }
+
+ if (test_x509_verify_param_copy_id(ip, NULL)) {
+ if (!X509_VERIFY_PARAM_set1_ip(dest, id->ip, id->iplen))
+ return 0;
+ }
+
return 1;
}
@@ -211,6 +334,30 @@ int X509_VERIFY_PARAM_set1(X509_VERIFY_PARAM *to,
return ret;
}
+static int int_x509_param_set1(char **pdest, size_t *pdestlen,
+ const char *src, size_t srclen)
+{
+ void *tmp;
+ if (src) {
+ if (srclen == 0) {
+ tmp = BUF_strdup(src);
+ srclen = strlen(src);
+ } else
+ tmp = BUF_memdup(src, srclen);
+ if (!tmp)
+ return 0;
+ } else {
+ tmp = NULL;
+ srclen = 0;
+ }
+ if (*pdest)
+ OPENSSL_free(*pdest);
+ *pdest = tmp;
+ if (pdestlen)
+ *pdestlen = srclen;
+ return 1;
+}
+
int X509_VERIFY_PARAM_set1_name(X509_VERIFY_PARAM *param, const char *name)
{
if (param->name)
@@ -308,11 +455,70 @@ int X509_VERIFY_PARAM_set1_policies(X509_VERIFY_PARAM *param,
return 1;
}
+int X509_VERIFY_PARAM_set1_host(X509_VERIFY_PARAM *param,
+ const char *name, size_t namelen)
+{
+ return int_x509_param_set_hosts(param->id, SET_HOST, name, namelen);
+}
+
+int X509_VERIFY_PARAM_add1_host(X509_VERIFY_PARAM *param,
+ const char *name, size_t namelen)
+{
+ return int_x509_param_set_hosts(param->id, ADD_HOST, name, namelen);
+}
+
+void X509_VERIFY_PARAM_set_hostflags(X509_VERIFY_PARAM *param,
+ unsigned int flags)
+{
+ param->id->hostflags = flags;
+}
+
+char *X509_VERIFY_PARAM_get0_peername(X509_VERIFY_PARAM *param)
+{
+ return param->id->peername;
+}
+
+int X509_VERIFY_PARAM_set1_email(X509_VERIFY_PARAM *param,
+ const char *email, size_t emaillen)
+{
+ return int_x509_param_set1(&param->id->email, &param->id->emaillen,
+ email, emaillen);
+}
+
+int X509_VERIFY_PARAM_set1_ip(X509_VERIFY_PARAM *param,
+ const unsigned char *ip, size_t iplen)
+{
+ if (iplen != 0 && iplen != 4 && iplen != 16)
+ return 0;
+ return int_x509_param_set1((char **)&param->id->ip, &param->id->iplen,
+ (char *)ip, iplen);
+}
+
+int X509_VERIFY_PARAM_set1_ip_asc(X509_VERIFY_PARAM *param, const char *ipasc)
+{
+ unsigned char ipout[16];
+ size_t iplen;
+
+ iplen = (size_t)a2i_ipadd(ipout, ipasc);
+ if (iplen == 0)
+ return 0;
+ return X509_VERIFY_PARAM_set1_ip(param, ipout, iplen);
+}
+
int X509_VERIFY_PARAM_get_depth(const X509_VERIFY_PARAM *param)
{
return param->depth;
}
+const char *X509_VERIFY_PARAM_get0_name(const X509_VERIFY_PARAM *param)
+{
+ return param->name;
+}
+
+static X509_VERIFY_PARAM_ID _empty_id = { NULL, 0U, NULL, NULL, 0, NULL, 0 };
+
+#define vpm_empty_id (X509_VERIFY_PARAM_ID *)&_empty_id
+
/*
* Default verify parameters: these are used for various applications and can
* be overridden by the user specified table. NB: the 'name' field *must* be
@@ -328,8 +534,8 @@ static const X509_VERIFY_PARAM default_table[] = {
0, /* purpose */
0, /* trust */
100, /* depth */
- NULL /* policies */
- },
+ NULL, /* policies */
+ vpm_empty_id},
{
"pkcs7", /* S/MIME sign parameters */
0, /* Check time */
@@ -338,8 +544,8 @@ static const X509_VERIFY_PARAM default_table[] = {
X509_PURPOSE_SMIME_SIGN, /* purpose */
X509_TRUST_EMAIL, /* trust */
-1, /* depth */
- NULL /* policies */
- },
+ NULL, /* policies */
+ vpm_empty_id},
{
"smime_sign", /* S/MIME sign parameters */
0, /* Check time */
@@ -348,8 +554,8 @@ static const X509_VERIFY_PARAM default_table[] = {
X509_PURPOSE_SMIME_SIGN, /* purpose */
X509_TRUST_EMAIL, /* trust */
-1, /* depth */
- NULL /* policies */
- },
+ NULL, /* policies */
+ vpm_empty_id},
{
"ssl_client", /* SSL/TLS client parameters */
0, /* Check time */
@@ -358,8 +564,8 @@ static const X509_VERIFY_PARAM default_table[] = {
X509_PURPOSE_SSL_CLIENT, /* purpose */
X509_TRUST_SSL_CLIENT, /* trust */
-1, /* depth */
- NULL /* policies */
- },
+ NULL, /* policies */
+ vpm_empty_id},
{
"ssl_server", /* SSL/TLS server parameters */
0, /* Check time */
@@ -368,8 +574,8 @@ static const X509_VERIFY_PARAM default_table[] = {
X509_PURPOSE_SSL_SERVER, /* purpose */
X509_TRUST_SSL_SERVER, /* trust */
-1, /* depth */
- NULL /* policies */
- }
+ NULL, /* policies */
+ vpm_empty_id}
};
static STACK_OF(X509_VERIFY_PARAM) *param_table = NULL;
@@ -409,6 +615,22 @@ int X509_VERIFY_PARAM_add0_table(X509_VERIFY_PARAM *param)
return 1;
}
+int X509_VERIFY_PARAM_get_count(void)
+{
+ int num = sizeof(default_table) / sizeof(X509_VERIFY_PARAM);
+ if (param_table)
+ num += sk_X509_VERIFY_PARAM_num(param_table);
+ return num;
+}
+
+const X509_VERIFY_PARAM *X509_VERIFY_PARAM_get0(int id)
+{
+ int num = sizeof(default_table) / sizeof(X509_VERIFY_PARAM);
+ if (id < num)
+ return default_table + id;
+ return sk_X509_VERIFY_PARAM_value(param_table, id - num);
+}
+
const X509_VERIFY_PARAM *X509_VERIFY_PARAM_lookup(const char *name)
{
int idx;
diff --git a/crypto/openssl/crypto/x509/x_all.c b/crypto/openssl/crypto/x509/x_all.c
index 43152e9..0f26c54 100644
--- a/crypto/openssl/crypto/x509/x_all.c
+++ b/crypto/openssl/crypto/x509/x_all.c
@@ -63,6 +63,7 @@
#include <openssl/asn1.h>
#include <openssl/evp.h>
#include <openssl/x509.h>
+#include <openssl/ocsp.h>
#ifndef OPENSSL_NO_RSA
# include <openssl/rsa.h>
#endif
@@ -105,6 +106,12 @@ int X509_sign_ctx(X509 *x, EVP_MD_CTX *ctx)
x->sig_alg, x->signature, x->cert_info, ctx);
}
+int X509_http_nbio(OCSP_REQ_CTX *rctx, X509 **pcert)
+{
+ return OCSP_REQ_CTX_nbio_d2i(rctx,
+ (ASN1_VALUE **)pcert, ASN1_ITEM_rptr(X509));
+}
+
int X509_REQ_sign(X509_REQ *x, EVP_PKEY *pkey, const EVP_MD *md)
{
return (ASN1_item_sign(ASN1_ITEM_rptr(X509_REQ_INFO), x->sig_alg, NULL,
@@ -133,6 +140,13 @@ int X509_CRL_sign_ctx(X509_CRL *x, EVP_MD_CTX *ctx)
x->crl, ctx);
}
+int X509_CRL_http_nbio(OCSP_REQ_CTX *rctx, X509_CRL **pcrl)
+{
+ return OCSP_REQ_CTX_nbio_d2i(rctx,
+ (ASN1_VALUE **)pcrl,
+ ASN1_ITEM_rptr(X509_CRL));
+}
+
int NETSCAPE_SPKI_sign(NETSCAPE_SPKI *x, EVP_PKEY *pkey, const EVP_MD *md)
{
return (ASN1_item_sign(ASN1_ITEM_rptr(NETSCAPE_SPKAC), x->sig_algor, NULL,
diff --git a/crypto/openssl/crypto/x509v3/Makefile b/crypto/openssl/crypto/x509v3/Makefile
index 05125ab..9791b77 100644
--- a/crypto/openssl/crypto/x509v3/Makefile
+++ b/crypto/openssl/crypto/x509v3/Makefile
@@ -13,7 +13,7 @@ AR= ar r
CFLAGS= $(INCLUDES) $(CFLAG)
GENERAL=Makefile README
-TEST=
+TEST=v3nametest.c
APPS=
LIB=$(TOP)/libcrypto.a
@@ -22,13 +22,13 @@ v3_prn.c v3_utl.c v3err.c v3_genn.c v3_alt.c v3_skey.c v3_akey.c v3_pku.c \
v3_int.c v3_enum.c v3_sxnet.c v3_cpols.c v3_crld.c v3_purp.c v3_info.c \
v3_ocsp.c v3_akeya.c v3_pmaps.c v3_pcons.c v3_ncons.c v3_pcia.c v3_pci.c \
pcy_cache.c pcy_node.c pcy_data.c pcy_map.c pcy_tree.c pcy_lib.c \
-v3_asid.c v3_addr.c
+v3_asid.c v3_addr.c v3_scts.c
LIBOBJ= v3_bcons.o v3_bitst.o v3_conf.o v3_extku.o v3_ia5.o v3_lib.o \
v3_prn.o v3_utl.o v3err.o v3_genn.o v3_alt.o v3_skey.o v3_akey.o v3_pku.o \
v3_int.o v3_enum.o v3_sxnet.o v3_cpols.o v3_crld.o v3_purp.o v3_info.o \
v3_ocsp.o v3_akeya.o v3_pmaps.o v3_pcons.o v3_ncons.o v3_pcia.o v3_pci.o \
pcy_cache.o pcy_node.o pcy_data.o pcy_map.o pcy_tree.o pcy_lib.o \
-v3_asid.o v3_addr.o
+v3_asid.o v3_addr.o v3_scts.o
SRC= $(LIBSRC)
@@ -535,6 +535,20 @@ v3_purp.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
v3_purp.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h
v3_purp.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h
v3_purp.o: ../cryptlib.h v3_purp.c
+v3_scts.o: ../../e_os.h ../../include/openssl/asn1.h
+v3_scts.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h
+v3_scts.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h
+v3_scts.o: ../../include/openssl/e_os2.h ../../include/openssl/ec.h
+v3_scts.o: ../../include/openssl/ecdh.h ../../include/openssl/ecdsa.h
+v3_scts.o: ../../include/openssl/err.h ../../include/openssl/evp.h
+v3_scts.o: ../../include/openssl/lhash.h ../../include/openssl/obj_mac.h
+v3_scts.o: ../../include/openssl/objects.h ../../include/openssl/opensslconf.h
+v3_scts.o: ../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
+v3_scts.o: ../../include/openssl/pkcs7.h ../../include/openssl/safestack.h
+v3_scts.o: ../../include/openssl/sha.h ../../include/openssl/stack.h
+v3_scts.o: ../../include/openssl/symhacks.h ../../include/openssl/x509.h
+v3_scts.o: ../../include/openssl/x509_vfy.h ../../include/openssl/x509v3.h
+v3_scts.o: ../cryptlib.h v3_scts.c
v3_skey.o: ../../e_os.h ../../include/openssl/asn1.h
v3_skey.o: ../../include/openssl/bio.h ../../include/openssl/buffer.h
v3_skey.o: ../../include/openssl/conf.h ../../include/openssl/crypto.h
diff --git a/crypto/openssl/crypto/x509v3/ext_dat.h b/crypto/openssl/crypto/x509v3/ext_dat.h
index 136b1f8..c3a6fce 100644
--- a/crypto/openssl/crypto/x509v3/ext_dat.h
+++ b/crypto/openssl/crypto/x509v3/ext_dat.h
@@ -69,6 +69,7 @@ extern X509V3_EXT_METHOD v3_crl_hold, v3_pci;
extern X509V3_EXT_METHOD v3_policy_mappings, v3_policy_constraints;
extern X509V3_EXT_METHOD v3_name_constraints, v3_inhibit_anyp, v3_idp;
extern X509V3_EXT_METHOD v3_addr, v3_asid;
+extern X509V3_EXT_METHOD v3_ct_scts[];
/*
* This table will be searched using OBJ_bsearch so it *must* kept in order
@@ -126,6 +127,8 @@ static const X509V3_EXT_METHOD *standard_exts[] = {
&v3_idp,
&v3_alt[2],
&v3_freshest_crl,
+ &v3_ct_scts[0],
+ &v3_ct_scts[1],
};
/* Number of standard extensions */
diff --git a/crypto/openssl/crypto/x509v3/v3_lib.c b/crypto/openssl/crypto/x509v3/v3_lib.c
index b5598c9..8350429 100644
--- a/crypto/openssl/crypto/x509v3/v3_lib.c
+++ b/crypto/openssl/crypto/x509v3/v3_lib.c
@@ -122,6 +122,28 @@ const X509V3_EXT_METHOD *X509V3_EXT_get(X509_EXTENSION *ext)
return X509V3_EXT_get_nid(nid);
}
+int X509V3_EXT_free(int nid, void *ext_data)
+{
+ const X509V3_EXT_METHOD *ext_method = X509V3_EXT_get_nid(nid);
+ if (ext_method == NULL) {
+ X509V3err(X509V3_F_X509V3_EXT_FREE,
+ X509V3_R_CANNOT_FIND_FREE_FUNCTION);
+ return 0;
+ }
+
+ if (ext_method->it != NULL)
+ ASN1_item_free(ext_data, ASN1_ITEM_ptr(ext_method->it));
+ else if (ext_method->ext_free != NULL)
+ ext_method->ext_free(ext_data);
+ else {
+ X509V3err(X509V3_F_X509V3_EXT_FREE,
+ X509V3_R_CANNOT_FIND_FREE_FUNCTION);
+ return 0;
+ }
+
+ return 1;
+}
+
int X509V3_EXT_add_list(X509V3_EXT_METHOD *extlist)
{
for (; extlist->ext_nid != -1; extlist++)
diff --git a/crypto/openssl/crypto/x509v3/v3_purp.c b/crypto/openssl/crypto/x509v3/v3_purp.c
index 0d9bc58..36b0d87 100644
--- a/crypto/openssl/crypto/x509v3/v3_purp.c
+++ b/crypto/openssl/crypto/x509v3/v3_purp.c
@@ -395,9 +395,6 @@ static void x509v3_cache_extensions(X509 *x)
#ifndef OPENSSL_NO_SHA
X509_digest(x, EVP_sha1(), x->sha1_hash, NULL);
#endif
- /* Does subject name match issuer ? */
- if (!X509_NAME_cmp(X509_get_subject_name(x), X509_get_issuer_name(x)))
- x->ex_flags |= EXFLAG_SI;
/* V1 should mean no extensions ... */
if (!X509_get_version(x))
x->ex_flags |= EXFLAG_V1;
@@ -479,6 +476,10 @@ static void x509v3_cache_extensions(X509 *x)
case NID_dvcs:
x->ex_xkusage |= XKU_DVCS;
break;
+
+ case NID_anyExtendedKeyUsage:
+ x->ex_xkusage |= XKU_ANYEKU;
+ break;
}
}
sk_ASN1_OBJECT_pop_free(extusage, ASN1_OBJECT_free);
@@ -494,6 +495,13 @@ static void x509v3_cache_extensions(X509 *x)
}
x->skid = X509_get_ext_d2i(x, NID_subject_key_identifier, NULL, NULL);
x->akid = X509_get_ext_d2i(x, NID_authority_key_identifier, NULL, NULL);
+ /* Does subject name match issuer ? */
+ if (!X509_NAME_cmp(X509_get_subject_name(x), X509_get_issuer_name(x))) {
+ x->ex_flags |= EXFLAG_SI;
+ /* If SKID matches AKID also indicate self signed */
+ if (X509_check_akid(x, x->akid) == X509_V_OK)
+ x->ex_flags |= EXFLAG_SS;
+ }
x->altname = X509_get_ext_d2i(x, NID_subject_alt_name, NULL, NULL);
x->nc = X509_get_ext_d2i(x, NID_name_constraints, &i, NULL);
if (!x->nc && (i != -1))
@@ -598,8 +606,8 @@ static int check_purpose_ssl_client(const X509_PURPOSE *xp, const X509 *x,
return 0;
if (ca)
return check_ssl_ca(x);
- /* We need to do digital signatures with it */
- if (ku_reject(x, KU_DIGITAL_SIGNATURE))
+ /* We need to do digital signatures or key agreement */
+ if (ku_reject(x, KU_DIGITAL_SIGNATURE | KU_KEY_AGREEMENT))
return 0;
/* nsCertType if present should allow SSL client use */
if (ns_reject(x, NS_SSL_CLIENT))
@@ -607,6 +615,14 @@ static int check_purpose_ssl_client(const X509_PURPOSE *xp, const X509 *x,
return 1;
}
+/*
+ * Key usage needed for TLS/SSL server: digital signature, encipherment or
+ * key agreement. The ssl code can check this more thoroughly for individual
+ * key types.
+ */
+#define KU_TLS \
+ KU_DIGITAL_SIGNATURE|KU_KEY_ENCIPHERMENT|KU_KEY_AGREEMENT
+
static int check_purpose_ssl_server(const X509_PURPOSE *xp, const X509 *x,
int ca)
{
@@ -617,8 +633,7 @@ static int check_purpose_ssl_server(const X509_PURPOSE *xp, const X509 *x,
if (ns_reject(x, NS_SSL_SERVER))
return 0;
- /* Now as for keyUsage: we'll at least need to sign OR encipher */
- if (ku_reject(x, KU_DIGITAL_SIGNATURE | KU_KEY_ENCIPHERMENT))
+ if (ku_reject(x, KU_TLS))
return 0;
return 1;
diff --git a/crypto/openssl/crypto/x509v3/v3_scts.c b/crypto/openssl/crypto/x509v3/v3_scts.c
new file mode 100644
index 0000000..6e0b8d6
--- /dev/null
+++ b/crypto/openssl/crypto/x509v3/v3_scts.c
@@ -0,0 +1,332 @@
+/* v3_scts.c */
+/*
+ * Written by Rob Stradling (rob@comodo.com) for the OpenSSL project 2014.
+ */
+/* ====================================================================
+ * Copyright (c) 2014 The OpenSSL Project. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * 3. All advertising materials mentioning features or use of this
+ * software must display the following acknowledgment:
+ * "This product includes software developed by the OpenSSL Project
+ * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)"
+ *
+ * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
+ * endorse or promote products derived from this software without
+ * prior written permission. For written permission, please contact
+ * licensing@OpenSSL.org.
+ *
+ * 5. Products derived from this software may not be called "OpenSSL"
+ * nor may "OpenSSL" appear in their names without prior written
+ * permission of the OpenSSL Project.
+ *
+ * 6. Redistributions of any form whatsoever must retain the following
+ * acknowledgment:
+ * "This product includes software developed by the OpenSSL Project
+ * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)"
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
+ * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
+ * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+ * OF THE POSSIBILITY OF SUCH DAMAGE.
+ * ====================================================================
+ *
+ * This product includes cryptographic software written by Eric Young
+ * (eay@cryptsoft.com). This product includes software written by Tim
+ * Hudson (tjh@cryptsoft.com).
+ *
+ */
+
+#include <stdio.h>
+#include "cryptlib.h"
+#include <openssl/asn1.h>
+#include <openssl/x509v3.h>
+
+/* Signature and hash algorithms from RFC 5246 */
+#define TLSEXT_hash_sha256 4
+
+#define TLSEXT_signature_rsa 1
+#define TLSEXT_signature_ecdsa 3
+
+
+#define n2s(c,s) ((s=(((unsigned int)(c[0]))<< 8)| \
+ (((unsigned int)(c[1])) )),c+=2)
+
+#if (defined(_WIN32) || defined(_WIN64)) && !defined(__MINGW32__)
+# define SCT_TIMESTAMP unsigned __int64
+#elif defined(__arch64__)
+# define SCT_TIMESTAMP unsigned long
+#else
+# define SCT_TIMESTAMP unsigned long long
+#endif
+
+#define n2l8(c,l) (l =((SCT_TIMESTAMP)(*((c)++)))<<56, \
+ l|=((SCT_TIMESTAMP)(*((c)++)))<<48, \
+ l|=((SCT_TIMESTAMP)(*((c)++)))<<40, \
+ l|=((SCT_TIMESTAMP)(*((c)++)))<<32, \
+ l|=((SCT_TIMESTAMP)(*((c)++)))<<24, \
+ l|=((SCT_TIMESTAMP)(*((c)++)))<<16, \
+ l|=((SCT_TIMESTAMP)(*((c)++)))<< 8, \
+ l|=((SCT_TIMESTAMP)(*((c)++))))
+
+typedef struct SCT_st {
+ /* The encoded SCT */
+ unsigned char *sct;
+ unsigned short sctlen;
+ /*
+ * Components of the SCT. "logid", "ext" and "sig" point to addresses
+ * inside "sct".
+ */
+ unsigned char version;
+ unsigned char *logid;
+ unsigned short logidlen;
+ SCT_TIMESTAMP timestamp;
+ unsigned char *ext;
+ unsigned short extlen;
+ unsigned char hash_alg;
+ unsigned char sig_alg;
+ unsigned char *sig;
+ unsigned short siglen;
+} SCT;
+
+DECLARE_STACK_OF(SCT)
+
+static void SCT_LIST_free(STACK_OF(SCT) *a);
+static STACK_OF(SCT) *d2i_SCT_LIST(STACK_OF(SCT) **a,
+ const unsigned char **pp, long length);
+static int i2r_SCT_LIST(X509V3_EXT_METHOD *method, STACK_OF(SCT) *sct_list,
+ BIO *out, int indent);
+
+const X509V3_EXT_METHOD v3_ct_scts[] = {
+ {NID_ct_precert_scts, 0, NULL,
+ 0, (X509V3_EXT_FREE)SCT_LIST_free,
+ (X509V3_EXT_D2I)d2i_SCT_LIST, 0,
+ 0, 0, 0, 0,
+ (X509V3_EXT_I2R)i2r_SCT_LIST, 0,
+ NULL},
+
+ {NID_ct_cert_scts, 0, NULL,
+ 0, (X509V3_EXT_FREE)SCT_LIST_free,
+ (X509V3_EXT_D2I)d2i_SCT_LIST, 0,
+ 0, 0, 0, 0,
+ (X509V3_EXT_I2R)i2r_SCT_LIST, 0,
+ NULL},
+};
+
+static void tls12_signature_print(BIO *out, const unsigned char hash_alg,
+ const unsigned char sig_alg)
+{
+ int nid = NID_undef;
+ /* RFC6962 only permits two signature algorithms */
+ if (hash_alg == TLSEXT_hash_sha256) {
+ if (sig_alg == TLSEXT_signature_rsa)
+ nid = NID_sha256WithRSAEncryption;
+ else if (sig_alg == TLSEXT_signature_ecdsa)
+ nid = NID_ecdsa_with_SHA256;
+ }
+ if (nid == NID_undef)
+ BIO_printf(out, "%02X%02X", hash_alg, sig_alg);
+ else
+ BIO_printf(out, "%s", OBJ_nid2ln(nid));
+}
+
+static void timestamp_print(BIO *out, SCT_TIMESTAMP timestamp)
+{
+ ASN1_GENERALIZEDTIME *gen;
+ char genstr[20];
+ gen = ASN1_GENERALIZEDTIME_new();
+ ASN1_GENERALIZEDTIME_adj(gen, (time_t)0,
+ (int)(timestamp / 86400000),
+ (timestamp % 86400000) / 1000);
+ /*
+ * Note GeneralizedTime from ASN1_GENERALIZETIME_adj is always 15
+ * characters long with a final Z. Update it with fractional seconds.
+ */
+ BIO_snprintf(genstr, sizeof(genstr), "%.14s.%03dZ",
+ ASN1_STRING_data(gen), (unsigned int)(timestamp % 1000));
+ ASN1_GENERALIZEDTIME_set_string(gen, genstr);
+ ASN1_GENERALIZEDTIME_print(out, gen);
+ ASN1_GENERALIZEDTIME_free(gen);
+}
+
+static void SCT_free(SCT *sct)
+{
+ if (sct) {
+ if (sct->sct)
+ OPENSSL_free(sct->sct);
+ OPENSSL_free(sct);
+ }
+}
+
+static void SCT_LIST_free(STACK_OF(SCT) *a)
+{
+ sk_SCT_pop_free(a, SCT_free);
+}
+
+static STACK_OF(SCT) *d2i_SCT_LIST(STACK_OF(SCT) **a,
+ const unsigned char **pp, long length)
+{
+ ASN1_OCTET_STRING *oct = NULL;
+ STACK_OF(SCT) *sk = NULL;
+ SCT *sct;
+ unsigned char *p, *p2;
+ unsigned short listlen, sctlen = 0, fieldlen;
+
+ if (d2i_ASN1_OCTET_STRING(&oct, pp, length) == NULL)
+ return NULL;
+ if (oct->length < 2)
+ goto done;
+ p = oct->data;
+ n2s(p, listlen);
+ if (listlen != oct->length - 2)
+ goto done;
+
+ if ((sk = sk_SCT_new_null()) == NULL)
+ goto done;
+
+ while (listlen > 0) {
+ if (listlen < 2)
+ goto err;
+ n2s(p, sctlen);
+ listlen -= 2;
+
+ if ((sctlen < 1) || (sctlen > listlen))
+ goto err;
+ listlen -= sctlen;
+
+ sct = OPENSSL_malloc(sizeof(SCT));
+ if (!sct)
+ goto err;
+ if (!sk_SCT_push(sk, sct)) {
+ OPENSSL_free(sct);
+ goto err;
+ }
+
+ sct->sct = OPENSSL_malloc(sctlen);
+ if (!sct->sct)
+ goto err;
+ memcpy(sct->sct, p, sctlen);
+ sct->sctlen = sctlen;
+ p += sctlen;
+ p2 = sct->sct;
+
+ sct->version = *p2++;
+ if (sct->version == 0) { /* SCT v1 */
+ /*-
+ * Fixed-length header:
+ * struct {
+ * (1 byte) Version sct_version;
+ * (32 bytes) LogID id;
+ * (8 bytes) uint64 timestamp;
+ * (2 bytes + ?) CtExtensions extensions;
+ */
+ if (sctlen < 43)
+ goto err;
+ sctlen -= 43;
+
+ sct->logid = p2;
+ sct->logidlen = 32;
+ p2 += 32;
+
+ n2l8(p2, sct->timestamp);
+
+ n2s(p2, fieldlen);
+ if (sctlen < fieldlen)
+ goto err;
+ sct->ext = p2;
+ sct->extlen = fieldlen;
+ p2 += fieldlen;
+ sctlen -= fieldlen;
+
+ /*-
+ * digitally-signed struct header:
+ * (1 byte) Hash algorithm
+ * (1 byte) Signature algorithm
+ * (2 bytes + ?) Signature
+ */
+ if (sctlen < 4)
+ goto err;
+ sctlen -= 4;
+
+ sct->hash_alg = *p2++;
+ sct->sig_alg = *p2++;
+ n2s(p2, fieldlen);
+ if (sctlen != fieldlen)
+ goto err;
+ sct->sig = p2;
+ sct->siglen = fieldlen;
+ }
+ }
+
+ done:
+ ASN1_OCTET_STRING_free(oct);
+ return sk;
+
+ err:
+ SCT_LIST_free(sk);
+ sk = NULL;
+ goto done;
+}
+
+static int i2r_SCT_LIST(X509V3_EXT_METHOD *method, STACK_OF(SCT) *sct_list,
+ BIO *out, int indent)
+{
+ SCT *sct;
+ int i;
+
+ for (i = 0; i < sk_SCT_num(sct_list);) {
+ sct = sk_SCT_value(sct_list, i);
+
+ BIO_printf(out, "%*sSigned Certificate Timestamp:", indent, "");
+ BIO_printf(out, "\n%*sVersion : ", indent + 4, "");
+
+ if (sct->version == 0) { /* SCT v1 */
+ BIO_printf(out, "v1(0)");
+
+ BIO_printf(out, "\n%*sLog ID : ", indent + 4, "");
+ BIO_hex_string(out, indent + 16, 16, sct->logid, sct->logidlen);
+
+ BIO_printf(out, "\n%*sTimestamp : ", indent + 4, "");
+ timestamp_print(out, sct->timestamp);
+
+ BIO_printf(out, "\n%*sExtensions: ", indent + 4, "");
+ if (sct->extlen == 0)
+ BIO_printf(out, "none");
+ else
+ BIO_hex_string(out, indent + 16, 16, sct->ext, sct->extlen);
+
+ BIO_printf(out, "\n%*sSignature : ", indent + 4, "");
+ tls12_signature_print(out, sct->hash_alg, sct->sig_alg);
+ BIO_printf(out, "\n%*s ", indent + 4, "");
+ BIO_hex_string(out, indent + 16, 16, sct->sig, sct->siglen);
+ } else { /* Unknown version */
+
+ BIO_printf(out, "unknown\n%*s", indent + 16, "");
+ BIO_hex_string(out, indent + 16, 16, sct->sct, sct->sctlen);
+ }
+
+ if (++i < sk_SCT_num(sct_list))
+ BIO_printf(out, "\n");
+ }
+
+ return 1;
+}
diff --git a/crypto/openssl/crypto/x509v3/v3_utl.c b/crypto/openssl/crypto/x509v3/v3_utl.c
index 94aaebb..bdd7b95 100644
--- a/crypto/openssl/crypto/x509v3/v3_utl.c
+++ b/crypto/openssl/crypto/x509v3/v3_utl.c
@@ -632,6 +632,433 @@ void X509_email_free(STACK_OF(OPENSSL_STRING) *sk)
sk_OPENSSL_STRING_pop_free(sk, str_free);
}
+typedef int (*equal_fn) (const unsigned char *pattern, size_t pattern_len,
+ const unsigned char *subject, size_t subject_len,
+ unsigned int flags);
+
+/* Skip pattern prefix to match "wildcard" subject */
+static void skip_prefix(const unsigned char **p, size_t *plen,
+ const unsigned char *subject, size_t subject_len,
+ unsigned int flags)
+{
+ const unsigned char *pattern = *p;
+ size_t pattern_len = *plen;
+
+ /*
+ * If subject starts with a leading '.' followed by more octets, and
+ * pattern is longer, compare just an equal-length suffix with the
+ * full subject (starting at the '.'), provided the prefix contains
+ * no NULs.
+ */
+ if ((flags & _X509_CHECK_FLAG_DOT_SUBDOMAINS) == 0)
+ return;
+
+ while (pattern_len > subject_len && *pattern) {
+ if ((flags & X509_CHECK_FLAG_SINGLE_LABEL_SUBDOMAINS) &&
+ *pattern == '.')
+ break;
+ ++pattern;
+ --pattern_len;
+ }
+
+ /* Skip if entire prefix acceptable */
+ if (pattern_len == subject_len) {
+ *p = pattern;
+ *plen = pattern_len;
+ }
+}
+
+/* Compare while ASCII ignoring case. */
+static int equal_nocase(const unsigned char *pattern, size_t pattern_len,
+ const unsigned char *subject, size_t subject_len,
+ unsigned int flags)
+{
+ skip_prefix(&pattern, &pattern_len, subject, subject_len, flags);
+ if (pattern_len != subject_len)
+ return 0;
+ while (pattern_len) {
+ unsigned char l = *pattern;
+ unsigned char r = *subject;
+ /* The pattern must not contain NUL characters. */
+ if (l == 0)
+ return 0;
+ if (l != r) {
+ if ('A' <= l && l <= 'Z')
+ l = (l - 'A') + 'a';
+ if ('A' <= r && r <= 'Z')
+ r = (r - 'A') + 'a';
+ if (l != r)
+ return 0;
+ }
+ ++pattern;
+ ++subject;
+ --pattern_len;
+ }
+ return 1;
+}
+
+/* Compare using memcmp. */
+static int equal_case(const unsigned char *pattern, size_t pattern_len,
+ const unsigned char *subject, size_t subject_len,
+ unsigned int flags)
+{
+ skip_prefix(&pattern, &pattern_len, subject, subject_len, flags);
+ if (pattern_len != subject_len)
+ return 0;
+ return !memcmp(pattern, subject, pattern_len);
+}
+
+/*
+ * RFC 5280, section 7.5, requires that only the domain is compared in a
+ * case-insensitive manner.
+ */
+static int equal_email(const unsigned char *a, size_t a_len,
+ const unsigned char *b, size_t b_len,
+ unsigned int unused_flags)
+{
+ size_t i = a_len;
+ if (a_len != b_len)
+ return 0;
+ /*
+ * We search backwards for the '@' character, so that we do not have to
+ * deal with quoted local-parts. The domain part is compared in a
+ * case-insensitive manner.
+ */
+ while (i > 0) {
+ --i;
+ if (a[i] == '@' || b[i] == '@') {
+ if (!equal_nocase(a + i, a_len - i, b + i, a_len - i, 0))
+ return 0;
+ break;
+ }
+ }
+ if (i == 0)
+ i = a_len;
+ return equal_case(a, i, b, i, 0);
+}
+
+/*
+ * Compare the prefix and suffix with the subject, and check that the
+ * characters in-between are valid.
+ */
+static int wildcard_match(const unsigned char *prefix, size_t prefix_len,
+ const unsigned char *suffix, size_t suffix_len,
+ const unsigned char *subject, size_t subject_len,
+ unsigned int flags)
+{
+ const unsigned char *wildcard_start;
+ const unsigned char *wildcard_end;
+ const unsigned char *p;
+ int allow_multi = 0;
+ int allow_idna = 0;
+
+ if (subject_len < prefix_len + suffix_len)
+ return 0;
+ if (!equal_nocase(prefix, prefix_len, subject, prefix_len, flags))
+ return 0;
+ wildcard_start = subject + prefix_len;
+ wildcard_end = subject + (subject_len - suffix_len);
+ if (!equal_nocase(wildcard_end, suffix_len, suffix, suffix_len, flags))
+ return 0;
+ /*
+ * If the wildcard makes up the entire first label, it must match at
+ * least one character.
+ */
+ if (prefix_len == 0 && *suffix == '.') {
+ if (wildcard_start == wildcard_end)
+ return 0;
+ allow_idna = 1;
+ if (flags & X509_CHECK_FLAG_MULTI_LABEL_WILDCARDS)
+ allow_multi = 1;
+ }
+ /* IDNA labels cannot match partial wildcards */
+ if (!allow_idna &&
+ subject_len >= 4 && strncasecmp((char *)subject, "xn--", 4) == 0)
+ return 0;
+ /* The wildcard may match a literal '*' */
+ if (wildcard_end == wildcard_start + 1 && *wildcard_start == '*')
+ return 1;
+ /*
+ * Check that the part matched by the wildcard contains only
+ * permitted characters and only matches a single label unless
+ * allow_multi is set.
+ */
+ for (p = wildcard_start; p != wildcard_end; ++p)
+ if (!(('0' <= *p && *p <= '9') ||
+ ('A' <= *p && *p <= 'Z') ||
+ ('a' <= *p && *p <= 'z') ||
+ *p == '-' || (allow_multi && *p == '.')))
+ return 0;
+ return 1;
+}
+
+#define LABEL_START (1 << 0)
+#define LABEL_END (1 << 1)
+#define LABEL_HYPHEN (1 << 2)
+#define LABEL_IDNA (1 << 3)
+
+static const unsigned char *valid_star(const unsigned char *p, size_t len,
+ unsigned int flags)
+{
+ const unsigned char *star = 0;
+ size_t i;
+ int state = LABEL_START;
+ int dots = 0;
+ for (i = 0; i < len; ++i) {
+ /*
+ * Locate first and only legal wildcard, either at the start
+ * or end of a non-IDNA first and not final label.
+ */
+ if (p[i] == '*') {
+ int atstart = (state & LABEL_START);
+ int atend = (i == len - 1 || p[i + 1] == '.');
+ /*-
+ * At most one wildcard per pattern.
+ * No wildcards in IDNA labels.
+ * No wildcards after the first label.
+ */
+ if (star != NULL || (state & LABEL_IDNA) != 0 || dots)
+ return NULL;
+ /* Only full-label '*.example.com' wildcards? */
+ if ((flags & X509_CHECK_FLAG_NO_PARTIAL_WILDCARDS)
+ && (!atstart || !atend))
+ return NULL;
+ /* No 'foo*bar' wildcards */
+ if (!atstart && !atend)
+ return NULL;
+ star = &p[i];
+ state &= ~LABEL_START;
+ } else if (('a' <= p[i] && p[i] <= 'z')
+ || ('A' <= p[i] && p[i] <= 'Z')
+ || ('0' <= p[i] && p[i] <= '9')) {
+ if ((state & LABEL_START) != 0
+ && len - i >= 4 && strncasecmp((char *)&p[i], "xn--", 4) == 0)
+ state |= LABEL_IDNA;
+ state &= ~(LABEL_HYPHEN | LABEL_START);
+ } else if (p[i] == '.') {
+ if ((state & (LABEL_HYPHEN | LABEL_START)) != 0)
+ return NULL;
+ state = LABEL_START;
+ ++dots;
+ } else if (p[i] == '-') {
+ if ((state & LABEL_HYPHEN) != 0)
+ return NULL;
+ state |= LABEL_HYPHEN;
+ } else
+ return NULL;
+ }
+
+ /*
+ * The final label must not end in a hyphen or ".", and
+ * there must be at least two dots after the star.
+ */
+ if ((state & (LABEL_START | LABEL_HYPHEN)) != 0 || dots < 2)
+ return NULL;
+ return star;
+}
+
+/* Compare using wildcards. */
+static int equal_wildcard(const unsigned char *pattern, size_t pattern_len,
+ const unsigned char *subject, size_t subject_len,
+ unsigned int flags)
+{
+ const unsigned char *star = NULL;
+
+ /*
+ * Subject names starting with '.' can only match a wildcard pattern
+ * via a subject sub-domain pattern suffix match.
+ */
+ if (!(subject_len > 1 && subject[0] == '.'))
+ star = valid_star(pattern, pattern_len, flags);
+ if (star == NULL)
+ return equal_nocase(pattern, pattern_len,
+ subject, subject_len, flags);
+ return wildcard_match(pattern, star - pattern,
+ star + 1, (pattern + pattern_len) - star - 1,
+ subject, subject_len, flags);
+}
+
+/*
+ * Compare an ASN1_STRING to a supplied string. If they match return 1. If
+ * cmp_type > 0 only compare if string matches the type, otherwise convert it
+ * to UTF8.
+ */
+
+static int do_check_string(ASN1_STRING *a, int cmp_type, equal_fn equal,
+ unsigned int flags, const char *b, size_t blen,
+ char **peername)
+{
+ int rv = 0;
+
+ if (!a->data || !a->length)
+ return 0;
+ if (cmp_type > 0) {
+ if (cmp_type != a->type)
+ return 0;
+ if (cmp_type == V_ASN1_IA5STRING)
+ rv = equal(a->data, a->length, (unsigned char *)b, blen, flags);
+ else if (a->length == (int)blen && !memcmp(a->data, b, blen))
+ rv = 1;
+ if (rv > 0 && peername)
+ *peername = BUF_strndup((char *)a->data, a->length);
+ } else {
+ int astrlen;
+ unsigned char *astr;
+ astrlen = ASN1_STRING_to_UTF8(&astr, a);
+ if (astrlen < 0) {
+ /*
+ * -1 could be an internal malloc failure or a decoding error from
+ * malformed input; we can't distinguish.
+ */
+ return -1;
+ }
+ rv = equal(astr, astrlen, (unsigned char *)b, blen, flags);
+ if (rv > 0 && peername)
+ *peername = BUF_strndup((char *)astr, astrlen);
+ OPENSSL_free(astr);
+ }
+ return rv;
+}
+
+static int do_x509_check(X509 *x, const char *chk, size_t chklen,
+ unsigned int flags, int check_type, char **peername)
+{
+ GENERAL_NAMES *gens = NULL;
+ X509_NAME *name = NULL;
+ int i;
+ int cnid;
+ int alt_type;
+ int san_present = 0;
+ int rv = 0;
+ equal_fn equal;
+
+ /* See below, this flag is internal-only */
+ flags &= ~_X509_CHECK_FLAG_DOT_SUBDOMAINS;
+ if (check_type == GEN_EMAIL) {
+ cnid = NID_pkcs9_emailAddress;
+ alt_type = V_ASN1_IA5STRING;
+ equal = equal_email;
+ } else if (check_type == GEN_DNS) {
+ cnid = NID_commonName;
+ /* Implicit client-side DNS sub-domain pattern */
+ if (chklen > 1 && chk[0] == '.')
+ flags |= _X509_CHECK_FLAG_DOT_SUBDOMAINS;
+ alt_type = V_ASN1_IA5STRING;
+ if (flags & X509_CHECK_FLAG_NO_WILDCARDS)
+ equal = equal_nocase;
+ else
+ equal = equal_wildcard;
+ } else {
+ cnid = 0;
+ alt_type = V_ASN1_OCTET_STRING;
+ equal = equal_case;
+ }
+
+ if (chklen == 0)
+ chklen = strlen(chk);
+
+ gens = X509_get_ext_d2i(x, NID_subject_alt_name, NULL, NULL);
+ if (gens) {
+ for (i = 0; i < sk_GENERAL_NAME_num(gens); i++) {
+ GENERAL_NAME *gen;
+ ASN1_STRING *cstr;
+ gen = sk_GENERAL_NAME_value(gens, i);
+ if (gen->type != check_type)
+ continue;
+ san_present = 1;
+ if (check_type == GEN_EMAIL)
+ cstr = gen->d.rfc822Name;
+ else if (check_type == GEN_DNS)
+ cstr = gen->d.dNSName;
+ else
+ cstr = gen->d.iPAddress;
+ /* Positive on success, negative on error! */
+ if ((rv = do_check_string(cstr, alt_type, equal, flags,
+ chk, chklen, peername)) != 0)
+ break;
+ }
+ GENERAL_NAMES_free(gens);
+ if (rv != 0)
+ return rv;
+ if (!cnid
+ || (san_present
+ && !(flags & X509_CHECK_FLAG_ALWAYS_CHECK_SUBJECT)))
+ return 0;
+ }
+ i = -1;
+ name = X509_get_subject_name(x);
+ while ((i = X509_NAME_get_index_by_NID(name, cnid, i)) >= 0) {
+ X509_NAME_ENTRY *ne;
+ ASN1_STRING *str;
+ ne = X509_NAME_get_entry(name, i);
+ str = X509_NAME_ENTRY_get_data(ne);
+ /* Positive on success, negative on error! */
+ if ((rv = do_check_string(str, -1, equal, flags,
+ chk, chklen, peername)) != 0)
+ return rv;
+ }
+ return 0;
+}
+
+int X509_check_host(X509 *x, const char *chk, size_t chklen,
+ unsigned int flags, char **peername)
+{
+ if (chk == NULL)
+ return -2;
+ /*
+ * Embedded NULs are disallowed, except as the last character of a
+ * string of length 2 or more (tolerate caller including terminating
+ * NUL in string length).
+ */
+ if (chklen == 0)
+ chklen = strlen(chk);
+ else if (memchr(chk, '\0', chklen > 1 ? chklen - 1 : chklen))
+ return -2;
+ if (chklen > 1 && chk[chklen - 1] == '\0')
+ --chklen;
+ return do_x509_check(x, chk, chklen, flags, GEN_DNS, peername);
+}
+
+int X509_check_email(X509 *x, const char *chk, size_t chklen,
+ unsigned int flags)
+{
+ if (chk == NULL)
+ return -2;
+ /*
+ * Embedded NULs are disallowed, except as the last character of a
+ * string of length 2 or more (tolerate caller including terminating
+ * NUL in string length).
+ */
+ if (chklen == 0)
+ chklen = strlen((char *)chk);
+ else if (memchr(chk, '\0', chklen > 1 ? chklen - 1 : chklen))
+ return -2;
+ if (chklen > 1 && chk[chklen - 1] == '\0')
+ --chklen;
+ return do_x509_check(x, chk, chklen, flags, GEN_EMAIL, NULL);
+}
+
+int X509_check_ip(X509 *x, const unsigned char *chk, size_t chklen,
+ unsigned int flags)
+{
+ if (chk == NULL)
+ return -2;
+ return do_x509_check(x, (char *)chk, chklen, flags, GEN_IPADD, NULL);
+}
+
+int X509_check_ip_asc(X509 *x, const char *ipasc, unsigned int flags)
+{
+ unsigned char ipout[16];
+ size_t iplen;
+
+ if (ipasc == NULL)
+ return -2;
+ iplen = (size_t)a2i_ipadd(ipout, ipasc);
+ if (iplen == 0)
+ return -2;
+ return do_x509_check(x, (char *)ipout, iplen, flags, GEN_IPADD, NULL);
+}
+
/*
* Convert IP addresses both IPv4 and IPv6 into an OCTET STRING compatible
* with RFC3280.
diff --git a/crypto/openssl/crypto/x509v3/v3err.c b/crypto/openssl/crypto/x509v3/v3err.c
index 0138f7a..bcc1be7 100644
--- a/crypto/openssl/crypto/x509v3/v3err.c
+++ b/crypto/openssl/crypto/x509v3/v3err.c
@@ -1,6 +1,6 @@
/* crypto/x509v3/v3err.c */
/* ====================================================================
- * Copyright (c) 1999-2007 The OpenSSL Project. All rights reserved.
+ * Copyright (c) 1999-2014 The OpenSSL Project. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -70,7 +70,7 @@
# define ERR_REASON(reason) ERR_PACK(ERR_LIB_X509V3,0,reason)
static ERR_STRING_DATA X509V3_str_functs[] = {
- {ERR_FUNC(X509V3_F_A2I_GENERAL_NAME), "A2I_GENERAL_NAME"},
+ {ERR_FUNC(X509V3_F_A2I_GENERAL_NAME), "a2i_GENERAL_NAME"},
{ERR_FUNC(X509V3_F_ASIDENTIFIERCHOICE_CANONIZE),
"ASIDENTIFIERCHOICE_CANONIZE"},
{ERR_FUNC(X509V3_F_ASIDENTIFIERCHOICE_IS_CANONICAL),
@@ -132,6 +132,7 @@ static ERR_STRING_DATA X509V3_str_functs[] = {
{ERR_FUNC(X509V3_F_X509V3_EXT_ADD), "X509V3_EXT_add"},
{ERR_FUNC(X509V3_F_X509V3_EXT_ADD_ALIAS), "X509V3_EXT_add_alias"},
{ERR_FUNC(X509V3_F_X509V3_EXT_CONF), "X509V3_EXT_conf"},
+ {ERR_FUNC(X509V3_F_X509V3_EXT_FREE), "X509V3_EXT_free"},
{ERR_FUNC(X509V3_F_X509V3_EXT_I2D), "X509V3_EXT_i2d"},
{ERR_FUNC(X509V3_F_X509V3_EXT_NCONF), "X509V3_EXT_nconf"},
{ERR_FUNC(X509V3_F_X509V3_GET_SECTION), "X509V3_get_section"},
@@ -149,6 +150,8 @@ static ERR_STRING_DATA X509V3_str_reasons[] = {
{ERR_REASON(X509V3_R_BN_DEC2BN_ERROR), "bn dec2bn error"},
{ERR_REASON(X509V3_R_BN_TO_ASN1_INTEGER_ERROR),
"bn to asn1 integer error"},
+ {ERR_REASON(X509V3_R_CANNOT_FIND_FREE_FUNCTION),
+ "cannot find free function"},
{ERR_REASON(X509V3_R_DIRNAME_ERROR), "dirname error"},
{ERR_REASON(X509V3_R_DISTPOINT_ALREADY_SET), "distpoint already set"},
{ERR_REASON(X509V3_R_DUPLICATE_ZONE_ID), "duplicate zone id"},
@@ -167,7 +170,6 @@ static ERR_STRING_DATA X509V3_str_reasons[] = {
{ERR_REASON(X509V3_R_ILLEGAL_HEX_DIGIT), "illegal hex digit"},
{ERR_REASON(X509V3_R_INCORRECT_POLICY_SYNTAX_TAG),
"incorrect policy syntax tag"},
- {ERR_REASON(X509V3_R_INVALID_MULTIPLE_RDNS), "invalid multiple rdns"},
{ERR_REASON(X509V3_R_INVALID_ASNUMBER), "invalid asnumber"},
{ERR_REASON(X509V3_R_INVALID_ASRANGE), "invalid asrange"},
{ERR_REASON(X509V3_R_INVALID_BOOLEAN_STRING), "invalid boolean string"},
@@ -175,6 +177,7 @@ static ERR_STRING_DATA X509V3_str_reasons[] = {
"invalid extension string"},
{ERR_REASON(X509V3_R_INVALID_INHERITANCE), "invalid inheritance"},
{ERR_REASON(X509V3_R_INVALID_IPADDRESS), "invalid ipaddress"},
+ {ERR_REASON(X509V3_R_INVALID_MULTIPLE_RDNS), "invalid multiple rdns"},
{ERR_REASON(X509V3_R_INVALID_NAME), "invalid name"},
{ERR_REASON(X509V3_R_INVALID_NULL_ARGUMENT), "invalid null argument"},
{ERR_REASON(X509V3_R_INVALID_NULL_NAME), "invalid null name"},
diff --git a/crypto/openssl/crypto/x509v3/v3nametest.c b/crypto/openssl/crypto/x509v3/v3nametest.c
new file mode 100644
index 0000000..7b5c1c8
--- /dev/null
+++ b/crypto/openssl/crypto/x509v3/v3nametest.c
@@ -0,0 +1,336 @@
+#include <openssl/x509.h>
+#include <openssl/x509v3.h>
+#include "../e_os.h"
+#include <string.h>
+
+static const char *const names[] = {
+ "a", "b", ".", "*", "@",
+ ".a", "a.", ".b", "b.", ".*", "*.", "*@", "@*", "a@", "@a", "b@", "..",
+ "@@", "**", "*.com", "*com", "*.*.com", "*com", "com*", "*example.com",
+ "*@example.com", "test@*.example.com", "example.com", "www.example.com",
+ "test.www.example.com", "*.example.com", "*.www.example.com",
+ "test.*.example.com", "www.*.com",
+ ".www.example.com", "*www.example.com",
+ "example.net", "xn--rger-koa.example.com",
+ "a.example.com", "b.example.com",
+ "postmaster@example.com", "Postmaster@example.com",
+ "postmaster@EXAMPLE.COM",
+ NULL
+};
+
+static const char *const exceptions[] = {
+ "set CN: host: [*.example.com] matches [a.example.com]",
+ "set CN: host: [*.example.com] matches [b.example.com]",
+ "set CN: host: [*.example.com] matches [www.example.com]",
+ "set CN: host: [*.example.com] matches [xn--rger-koa.example.com]",
+ "set CN: host: [*.www.example.com] matches [test.www.example.com]",
+ "set CN: host: [*.www.example.com] matches [.www.example.com]",
+ "set CN: host: [*www.example.com] matches [www.example.com]",
+ "set CN: host: [test.www.example.com] matches [.www.example.com]",
+ "set CN: host-no-wildcards: [*.www.example.com] matches [.www.example.com]",
+ "set CN: host-no-wildcards: [test.www.example.com] matches [.www.example.com]",
+ "set emailAddress: email: [postmaster@example.com] does not match [Postmaster@example.com]",
+ "set emailAddress: email: [postmaster@EXAMPLE.COM] does not match [Postmaster@example.com]",
+ "set emailAddress: email: [Postmaster@example.com] does not match [postmaster@example.com]",
+ "set emailAddress: email: [Postmaster@example.com] does not match [postmaster@EXAMPLE.COM]",
+ "set dnsName: host: [*.example.com] matches [www.example.com]",
+ "set dnsName: host: [*.example.com] matches [a.example.com]",
+ "set dnsName: host: [*.example.com] matches [b.example.com]",
+ "set dnsName: host: [*.example.com] matches [xn--rger-koa.example.com]",
+ "set dnsName: host: [*.www.example.com] matches [test.www.example.com]",
+ "set dnsName: host-no-wildcards: [*.www.example.com] matches [.www.example.com]",
+ "set dnsName: host-no-wildcards: [test.www.example.com] matches [.www.example.com]",
+ "set dnsName: host: [*.www.example.com] matches [.www.example.com]",
+ "set dnsName: host: [*www.example.com] matches [www.example.com]",
+ "set dnsName: host: [test.www.example.com] matches [.www.example.com]",
+ "set rfc822Name: email: [postmaster@example.com] does not match [Postmaster@example.com]",
+ "set rfc822Name: email: [Postmaster@example.com] does not match [postmaster@example.com]",
+ "set rfc822Name: email: [Postmaster@example.com] does not match [postmaster@EXAMPLE.COM]",
+ "set rfc822Name: email: [postmaster@EXAMPLE.COM] does not match [Postmaster@example.com]",
+ NULL
+};
+
+static int is_exception(const char *msg)
+{
+ const char *const *p;
+ for (p = exceptions; *p; ++p)
+ if (strcmp(msg, *p) == 0)
+ return 1;
+ return 0;
+}
+
+static int set_cn(X509 *crt, ...)
+{
+ int ret = 0;
+ X509_NAME *n = NULL;
+ va_list ap;
+ va_start(ap, crt);
+ n = X509_NAME_new();
+ if (n == NULL)
+ goto out;
+ while (1) {
+ int nid;
+ const char *name;
+ nid = va_arg(ap, int);
+ if (nid == 0)
+ break;
+ name = va_arg(ap, const char *);
+ if (!X509_NAME_add_entry_by_NID(n, nid, MBSTRING_ASC,
+ (unsigned char *)name, -1, -1, 1))
+ goto out;
+ }
+ if (!X509_set_subject_name(crt, n))
+ goto out;
+ ret = 1;
+ out:
+ X509_NAME_free(n);
+ va_end(ap);
+ return ret;
+}
+
+/*-
+int X509_add_ext(X509 *x, X509_EXTENSION *ex, int loc);
+X509_EXTENSION *X509_EXTENSION_create_by_NID(X509_EXTENSION **ex,
+ int nid, int crit, ASN1_OCTET_STRING *data);
+int X509_add_ext(X509 *x, X509_EXTENSION *ex, int loc);
+*/
+
+static int set_altname(X509 *crt, ...)
+{
+ int ret = 0;
+ GENERAL_NAMES *gens = NULL;
+ GENERAL_NAME *gen = NULL;
+ ASN1_IA5STRING *ia5 = NULL;
+ va_list ap;
+ va_start(ap, crt);
+ gens = sk_GENERAL_NAME_new_null();
+ if (gens == NULL)
+ goto out;
+ while (1) {
+ int type;
+ const char *name;
+ type = va_arg(ap, int);
+ if (type == 0)
+ break;
+ name = va_arg(ap, const char *);
+
+ gen = GENERAL_NAME_new();
+ if (gen == NULL)
+ goto out;
+ ia5 = ASN1_IA5STRING_new();
+ if (ia5 == NULL)
+ goto out;
+ if (!ASN1_STRING_set(ia5, name, -1))
+ goto out;
+ switch (type) {
+ case GEN_EMAIL:
+ case GEN_DNS:
+ GENERAL_NAME_set0_value(gen, type, ia5);
+ ia5 = NULL;
+ break;
+ default:
+ abort();
+ }
+ sk_GENERAL_NAME_push(gens, gen);
+ gen = NULL;
+ }
+ if (!X509_add1_ext_i2d(crt, NID_subject_alt_name, gens, 0, 0))
+ goto out;
+ ret = 1;
+ out:
+ ASN1_IA5STRING_free(ia5);
+ GENERAL_NAME_free(gen);
+ GENERAL_NAMES_free(gens);
+ va_end(ap);
+ return ret;
+}
+
+static int set_cn1(X509 *crt, const char *name)
+{
+ return set_cn(crt, NID_commonName, name, 0);
+}
+
+static int set_cn_and_email(X509 *crt, const char *name)
+{
+ return set_cn(crt, NID_commonName, name,
+ NID_pkcs9_emailAddress, "dummy@example.com", 0);
+}
+
+static int set_cn2(X509 *crt, const char *name)
+{
+ return set_cn(crt, NID_commonName, "dummy value",
+ NID_commonName, name, 0);
+}
+
+static int set_cn3(X509 *crt, const char *name)
+{
+ return set_cn(crt, NID_commonName, name,
+ NID_commonName, "dummy value", 0);
+}
+
+static int set_email1(X509 *crt, const char *name)
+{
+ return set_cn(crt, NID_pkcs9_emailAddress, name, 0);
+}
+
+static int set_email2(X509 *crt, const char *name)
+{
+ return set_cn(crt, NID_pkcs9_emailAddress, "dummy@example.com",
+ NID_pkcs9_emailAddress, name, 0);
+}
+
+static int set_email3(X509 *crt, const char *name)
+{
+ return set_cn(crt, NID_pkcs9_emailAddress, name,
+ NID_pkcs9_emailAddress, "dummy@example.com", 0);
+}
+
+static int set_email_and_cn(X509 *crt, const char *name)
+{
+ return set_cn(crt, NID_pkcs9_emailAddress, name,
+ NID_commonName, "www.example.org", 0);
+}
+
+static int set_altname_dns(X509 *crt, const char *name)
+{
+ return set_altname(crt, GEN_DNS, name, 0);
+}
+
+static int set_altname_email(X509 *crt, const char *name)
+{
+ return set_altname(crt, GEN_EMAIL, name, 0);
+}
+
+struct set_name_fn {
+ int (*fn) (X509 *, const char *);
+ const char *name;
+ int host;
+ int email;
+};
+
+static const struct set_name_fn name_fns[] = {
+ {set_cn1, "set CN", 1, 0},
+ {set_cn2, "set CN", 1, 0},
+ {set_cn3, "set CN", 1, 0},
+ {set_cn_and_email, "set CN", 1, 0},
+ {set_email1, "set emailAddress", 0, 1},
+ {set_email2, "set emailAddress", 0, 1},
+ {set_email3, "set emailAddress", 0, 1},
+ {set_email_and_cn, "set emailAddress", 0, 1},
+ {set_altname_dns, "set dnsName", 1, 0},
+ {set_altname_email, "set rfc822Name", 0, 1},
+ {NULL, NULL, 0}
+};
+
+static X509 *make_cert()
+{
+ X509 *ret = NULL;
+ X509 *crt = NULL;
+ X509_NAME *issuer = NULL;
+ crt = X509_new();
+ if (crt == NULL)
+ goto out;
+ if (!X509_set_version(crt, 3))
+ goto out;
+ ret = crt;
+ crt = NULL;
+ out:
+ X509_NAME_free(issuer);
+ return ret;
+}
+
+static int errors;
+
+static void check_message(const struct set_name_fn *fn, const char *op,
+ const char *nameincert, int match, const char *name)
+{
+ char msg[1024];
+ if (match < 0)
+ return;
+ BIO_snprintf(msg, sizeof(msg), "%s: %s: [%s] %s [%s]",
+ fn->name, op, nameincert,
+ match ? "matches" : "does not match", name);
+ if (is_exception(msg))
+ return;
+ puts(msg);
+ ++errors;
+}
+
+static void run_cert(X509 *crt, const char *nameincert,
+ const struct set_name_fn *fn)
+{
+ const char *const *pname = names;
+ while (*pname) {
+ int samename = strcasecmp(nameincert, *pname) == 0;
+ size_t namelen = strlen(*pname);
+ char *name = malloc(namelen);
+ int match, ret;
+ memcpy(name, *pname, namelen);
+
+ ret = X509_check_host(crt, name, namelen, 0, NULL);
+ match = -1;
+ if (ret < 0) {
+ fprintf(stderr, "internal error in X509_check_host");
+ ++errors;
+ } else if (fn->host) {
+ if (ret == 1 && !samename)
+ match = 1;
+ if (ret == 0 && samename)
+ match = 0;
+ } else if (ret == 1)
+ match = 1;
+ check_message(fn, "host", nameincert, match, *pname);
+
+ ret = X509_check_host(crt, name, namelen,
+ X509_CHECK_FLAG_NO_WILDCARDS, NULL);
+ match = -1;
+ if (ret < 0) {
+ fprintf(stderr, "internal error in X509_check_host");
+ ++errors;
+ } else if (fn->host) {
+ if (ret == 1 && !samename)
+ match = 1;
+ if (ret == 0 && samename)
+ match = 0;
+ } else if (ret == 1)
+ match = 1;
+ check_message(fn, "host-no-wildcards", nameincert, match, *pname);
+
+ ret = X509_check_email(crt, name, namelen, 0);
+ match = -1;
+ if (fn->email) {
+ if (ret && !samename)
+ match = 1;
+ if (!ret && samename && strchr(nameincert, '@') != NULL)
+ match = 0;
+ } else if (ret)
+ match = 1;
+ check_message(fn, "email", nameincert, match, *pname);
+ ++pname;
+ free(name);
+ }
+}
+
+int main(void)
+{
+ const struct set_name_fn *pfn = name_fns;
+ while (pfn->name) {
+ const char *const *pname = names;
+ while (*pname) {
+ X509 *crt = make_cert();
+ if (crt == NULL) {
+ fprintf(stderr, "make_cert failed\n");
+ return 1;
+ }
+ if (!pfn->fn(crt, *pname)) {
+ fprintf(stderr, "X509 name setting failed\n");
+ return 1;
+ }
+ run_cert(crt, *pname, pfn);
+ X509_free(crt);
+ ++pname;
+ }
+ ++pfn;
+ }
+ return errors > 0 ? 1 : 0;
+}
diff --git a/crypto/openssl/crypto/x509v3/x509v3.h b/crypto/openssl/crypto/x509v3/x509v3.h
index db9c3e8..f5c6156 100644
--- a/crypto/openssl/crypto/x509v3/x509v3.h
+++ b/crypto/openssl/crypto/x509v3/x509v3.h
@@ -67,6 +67,13 @@
extern "C" {
#endif
+# ifdef OPENSSL_SYS_WIN32
+/* Under Win32 these are defined in wincrypt.h */
+# undef X509_NAME
+# undef X509_CERT_PAIR
+# undef X509_EXTENSIONS
+# endif
+
/* Forward reference */
struct v3_ext_method;
struct v3_ext_ctx;
@@ -405,7 +412,6 @@ struct ISSUING_DIST_POINT_st {
# define EXFLAG_CA 0x10
/* Really self issued not necessarily self signed */
# define EXFLAG_SI 0x20
-# define EXFLAG_SS 0x20
# define EXFLAG_V1 0x40
# define EXFLAG_INVALID 0x80
# define EXFLAG_SET 0x100
@@ -414,6 +420,8 @@ struct ISSUING_DIST_POINT_st {
# define EXFLAG_INVALID_POLICY 0x800
# define EXFLAG_FRESHEST 0x1000
+/* Self signed */
+# define EXFLAG_SS 0x2000
# define KU_DIGITAL_SIGNATURE 0x0080
# define KU_NON_REPUDIATION 0x0040
@@ -442,6 +450,7 @@ struct ISSUING_DIST_POINT_st {
# define XKU_OCSP_SIGN 0x20
# define XKU_TIMESTAMP 0x40
# define XKU_DVCS 0x80
+# define XKU_ANYEKU 0x100
# define X509_PURPOSE_DYNAMIC 0x1
# define X509_PURPOSE_DYNAMIC_NAME 0x2
@@ -665,6 +674,7 @@ STACK_OF(CONF_VALUE) *X509V3_parse_list(const char *line);
void *X509V3_EXT_d2i(X509_EXTENSION *ext);
void *X509V3_get_d2i(STACK_OF(X509_EXTENSION) *x, int nid, int *crit,
int *idx);
+int X509V3_EXT_free(int nid, void *ext_data);
X509_EXTENSION *X509V3_EXT_i2d(int ext_nid, int crit, void *ext_struc);
int X509V3_add1_i2d(STACK_OF(X509_EXTENSION) **x, int nid, void *value,
@@ -707,6 +717,34 @@ STACK_OF(OPENSSL_STRING) *X509_get1_email(X509 *x);
STACK_OF(OPENSSL_STRING) *X509_REQ_get1_email(X509_REQ *x);
void X509_email_free(STACK_OF(OPENSSL_STRING) *sk);
STACK_OF(OPENSSL_STRING) *X509_get1_ocsp(X509 *x);
+/* Flags for X509_check_* functions */
+
+/*
+ * Always check subject name for host match even if subject alt names present
+ */
+# define X509_CHECK_FLAG_ALWAYS_CHECK_SUBJECT 0x1
+/* Disable wildcard matching for dnsName fields and common name. */
+# define X509_CHECK_FLAG_NO_WILDCARDS 0x2
+/* Wildcards must not match a partial label. */
+# define X509_CHECK_FLAG_NO_PARTIAL_WILDCARDS 0x4
+/* Allow (non-partial) wildcards to match multiple labels. */
+# define X509_CHECK_FLAG_MULTI_LABEL_WILDCARDS 0x8
+/* Constraint verifier subdomain patterns to match a single labels. */
+# define X509_CHECK_FLAG_SINGLE_LABEL_SUBDOMAINS 0x10
+/*
+ * Match reference identifiers starting with "." to any sub-domain.
+ * This is a non-public flag, turned on implicitly when the subject
+ * reference identity is a DNS name.
+ */
+# define _X509_CHECK_FLAG_DOT_SUBDOMAINS 0x8000
+
+int X509_check_host(X509 *x, const char *chk, size_t chklen,
+ unsigned int flags, char **peername);
+int X509_check_email(X509 *x, const char *chk, size_t chklen,
+ unsigned int flags);
+int X509_check_ip(X509 *x, const unsigned char *chk, size_t chklen,
+ unsigned int flags);
+int X509_check_ip_asc(X509 *x, const char *ipasc, unsigned int flags);
ASN1_OCTET_STRING *a2i_IPADDRESS(const char *ipasc);
ASN1_OCTET_STRING *a2i_IPADDRESS_NC(const char *ipasc);
@@ -930,6 +968,7 @@ void ERR_load_X509V3_strings(void);
# define X509V3_F_X509V3_EXT_ADD 104
# define X509V3_F_X509V3_EXT_ADD_ALIAS 106
# define X509V3_F_X509V3_EXT_CONF 107
+# define X509V3_F_X509V3_EXT_FREE 165
# define X509V3_F_X509V3_EXT_I2D 136
# define X509V3_F_X509V3_EXT_NCONF 152
# define X509V3_F_X509V3_GET_SECTION 142
@@ -944,6 +983,7 @@ void ERR_load_X509V3_strings(void);
# define X509V3_R_BAD_OBJECT 119
# define X509V3_R_BN_DEC2BN_ERROR 100
# define X509V3_R_BN_TO_ASN1_INTEGER_ERROR 101
+# define X509V3_R_CANNOT_FIND_FREE_FUNCTION 168
# define X509V3_R_DIRNAME_ERROR 149
# define X509V3_R_DISTPOINT_ALREADY_SET 160
# define X509V3_R_DUPLICATE_ZONE_ID 133
@@ -959,13 +999,13 @@ void ERR_load_X509V3_strings(void);
# define X509V3_R_ILLEGAL_EMPTY_EXTENSION 151
# define X509V3_R_ILLEGAL_HEX_DIGIT 113
# define X509V3_R_INCORRECT_POLICY_SYNTAX_TAG 152
-# define X509V3_R_INVALID_MULTIPLE_RDNS 161
# define X509V3_R_INVALID_ASNUMBER 162
# define X509V3_R_INVALID_ASRANGE 163
# define X509V3_R_INVALID_BOOLEAN_STRING 104
# define X509V3_R_INVALID_EXTENSION_STRING 105
# define X509V3_R_INVALID_INHERITANCE 165
# define X509V3_R_INVALID_IPADDRESS 166
+# define X509V3_R_INVALID_MULTIPLE_RDNS 161
# define X509V3_R_INVALID_NAME 106
# define X509V3_R_INVALID_NULL_ARGUMENT 107
# define X509V3_R_INVALID_NULL_NAME 108
diff --git a/crypto/openssl/crypto/x86_64cpuid.pl b/crypto/openssl/crypto/x86_64cpuid.pl
index 6ebfd01..d208d02 100644
--- a/crypto/openssl/crypto/x86_64cpuid.pl
+++ b/crypto/openssl/crypto/x86_64cpuid.pl
@@ -24,7 +24,7 @@ print<<___;
call OPENSSL_cpuid_setup
.hidden OPENSSL_ia32cap_P
-.comm OPENSSL_ia32cap_P,8,4
+.comm OPENSSL_ia32cap_P,16,4
.text
@@ -53,12 +53,13 @@ OPENSSL_rdtsc:
.size OPENSSL_rdtsc,.-OPENSSL_rdtsc
.globl OPENSSL_ia32_cpuid
-.type OPENSSL_ia32_cpuid,\@abi-omnipotent
+.type OPENSSL_ia32_cpuid,\@function,1
.align 16
OPENSSL_ia32_cpuid:
mov %rbx,%r8 # save %rbx
xor %eax,%eax
+ mov %eax,8(%rdi) # clear 3rd word
cpuid
mov %eax,%r11d # max value for standard query level
@@ -126,6 +127,14 @@ OPENSSL_ia32_cpuid:
shr \$14,%r10d
and \$0xfff,%r10d # number of cores -1 per L1D
+ cmp \$7,%r11d
+ jb .Lnocacheinfo
+
+ mov \$7,%eax
+ xor %ecx,%ecx
+ cpuid
+ mov %ebx,8(%rdi)
+
.Lnocacheinfo:
mov \$1,%eax
cpuid
@@ -165,6 +174,7 @@ OPENSSL_ia32_cpuid:
.Lclear_avx:
mov \$0xefffe7ff,%eax # ~(1<<28|1<<12|1<<11)
and %eax,%r9d # clear AVX, FMA and AMD XOP bits
+ andl \$0xffffffdf,8(%rdi) # cleax AVX2, ~(1<<5)
.Ldone:
shl \$32,%r9
mov %r10d,%eax
@@ -279,6 +289,21 @@ OPENSSL_ia32_rdrand:
cmove %rcx,%rax
ret
.size OPENSSL_ia32_rdrand,.-OPENSSL_ia32_rdrand
+
+.globl OPENSSL_ia32_rdseed
+.type OPENSSL_ia32_rdseed,\@abi-omnipotent
+.align 16
+OPENSSL_ia32_rdseed:
+ mov \$8,%ecx
+.Loop_rdseed:
+ rdseed %rax
+ jc .Lbreak_rdseed
+ loop .Loop_rdseed
+.Lbreak_rdseed:
+ cmp \$0,%rax
+ cmove %rcx,%rax
+ ret
+.size OPENSSL_ia32_rdseed,.-OPENSSL_ia32_rdseed
___
close STDOUT; # flush
diff --git a/crypto/openssl/crypto/x86cpuid.pl b/crypto/openssl/crypto/x86cpuid.pl
index b270b44..e95f627 100644
--- a/crypto/openssl/crypto/x86cpuid.pl
+++ b/crypto/openssl/crypto/x86cpuid.pl
@@ -22,6 +22,8 @@ for (@ARGV) { $sse2=1 if (/-DOPENSSL_IA32_SSE2/); }
&xor ("eax","eax");
&bt ("ecx",21);
&jnc (&label("nocpuid"));
+ &mov ("esi",&wparam(0));
+ &mov (&DWP(8,"esi"),"eax"); # clear 3rd word
&cpuid ();
&mov ("edi","eax"); # max value for standard query level
@@ -79,6 +81,16 @@ for (@ARGV) { $sse2=1 if (/-DOPENSSL_IA32_SSE2/); }
&jmp (&label("generic"));
&set_label("intel");
+ &cmp ("edi",7);
+ &jb (&label("cacheinfo"));
+
+ &mov ("esi",&wparam(0));
+ &mov ("eax",7);
+ &xor ("ecx","ecx");
+ &cpuid ();
+ &mov (&DWP(8,"esi"),"ebx");
+
+&set_label("cacheinfo");
&cmp ("edi",4);
&mov ("edi",-1);
&jb (&label("nocacheinfo"));
@@ -135,6 +147,8 @@ for (@ARGV) { $sse2=1 if (/-DOPENSSL_IA32_SSE2/); }
&and ("esi",0xfeffffff); # clear FXSR
&set_label("clear_avx");
&and ("ebp",0xefffe7ff); # clear AVX, FMA and AMD XOP bits
+ &mov ("edi",&wparam(0));
+ &and (&DWP(8,"edi"),0xffffffdf); # clear AVX2
&set_label("done");
&mov ("eax","esi");
&mov ("edx","ebp");
@@ -198,7 +212,7 @@ for (@ARGV) { $sse2=1 if (/-DOPENSSL_IA32_SSE2/); }
&function_begin_B("OPENSSL_far_spin");
&pushf ();
- &pop ("eax")
+ &pop ("eax");
&bt ("eax",9);
&jnc (&label("nospin")); # interrupts are disabled
@@ -353,6 +367,21 @@ for (@ARGV) { $sse2=1 if (/-DOPENSSL_IA32_SSE2/); }
&ret ();
&function_end_B("OPENSSL_ia32_rdrand");
+&function_begin_B("OPENSSL_ia32_rdseed");
+ &mov ("ecx",8);
+&set_label("loop");
+ &rdseed ("eax");
+ &jc (&label("break"));
+ &loop (&label("loop"));
+&set_label("break");
+ &cmp ("eax",0);
+ &cmove ("eax","ecx");
+ &ret ();
+&function_end_B("OPENSSL_ia32_rdseed");
+
&initseg("OPENSSL_cpuid_setup");
+&hidden("OPENSSL_cpuid_setup");
+&hidden("OPENSSL_ia32cap_P");
+
&asm_finish();
diff --git a/crypto/openssl/doc/apps/c_rehash.pod b/crypto/openssl/doc/apps/c_rehash.pod
index c564e86..ccce29e 100644
--- a/crypto/openssl/doc/apps/c_rehash.pod
+++ b/crypto/openssl/doc/apps/c_rehash.pod
@@ -10,13 +10,19 @@ c_rehash - Create symbolic links to files named by the hash values
=head1 SYNOPSIS
B<c_rehash>
+B<[-old]>
+B<[-h]>
+B<[-n]>
+B<[-v]>
[ I<directory>...]
=head1 DESCRIPTION
-B<c_rehash> scans directories and calculates a hash value of each C<.pem>
+B<c_rehash> scans directories and calculates a hash value of each
+C<.pem>, C<.crt>, C<.cer>, or C<.crl>
file in the specified directory list and creates symbolic links
for each file, where the name of the link is the hash value.
+(If the platform does not support symbolic links, a copy is made.)
This utility is useful as many programs that use OpenSSL require
directories to be set up like this in order to find certificates.
@@ -34,6 +40,7 @@ is a hexadecimal character and B<D> is a single decimal digit.
When processing a directory, B<c_rehash> will first remove all links
that have a name in that syntax. If you have links in that format
used for other purposes, they will be removed.
+To skip the removal step, use the B<-n> flag.
Hashes for CRL's look similar except the letter B<r> appears after
the period, like this: C<HHHHHHHH.rD>.
@@ -42,7 +49,7 @@ incrementing the B<D> value. Duplicates are found by comparing the
full SHA-1 fingerprint. A warning will be displayed if a duplicate
is found.
-A warning will also be displayed if there are B<.pem> files that
+A warning will also be displayed if there are files that
cannot be parsed as either a certificate or a CRL.
The program uses the B<openssl> program to compute the hashes and
@@ -51,13 +58,39 @@ B<OPENSSL> environment variable to the full pathname.
Any program can be used, it will be invoked as follows for either
a certificate or CRL:
- $OPENSSL x509 -hash -fingerprint -noout -in FFFFFF
- $OPENSSL crl -hash -fingerprint -noout -in FFFFFF
+ $OPENSSL x509 -hash -fingerprint -noout -in FILENAME
+ $OPENSSL crl -hash -fingerprint -noout -in FILENAME
-where B<FFFFFF> is the filename. It must output the hash of the
+where B<FILENAME> is the filename. It must output the hash of the
file on the first line, and the fingerprint on the second,
optionally prefixed with some text and an equals sign.
+=head1 OPTIONS
+
+=over 4
+
+=item B<-old>
+
+Use old-style hashing (MD5, as opposed to SHA-1) for generating
+links for releases before 1.0.0. Note that current versions will
+not use the old style.
+
+=item B<-h>
+
+Display a brief usage message.
+
+=item B<-n>
+
+Do not remove existing links.
+This is needed when keeping new and old-style links in the same directory.
+
+=item B<-v>
+
+Print messages about old links removed and new links created.
+By default, B<c_rehash> only lists each directory as it is processed.
+
+=back
+
=head1 ENVIRONMENT
=over
diff --git a/crypto/openssl/doc/apps/ciphers.pod b/crypto/openssl/doc/apps/ciphers.pod
index 0aa1bad..1c26e3b 100644
--- a/crypto/openssl/doc/apps/ciphers.pod
+++ b/crypto/openssl/doc/apps/ciphers.pod
@@ -175,14 +175,14 @@ cipher suites using RSA key exchange.
=item B<kDHr>, B<kDHd>, B<kDH>
cipher suites using DH key agreement and DH certificates signed by CAs with RSA
-and DSS keys or either respectively. Not implemented.
+and DSS keys or either respectively.
-=item B<kEDH>
+=item B<kDHE>, B<kEDH>
cipher suites using ephemeral DH key agreement, including anonymous cipher
suites.
-=item B<EDH>
+=item B<DHE>, B<EDH>
cipher suites using authenticated ephemeral DH key agreement.
@@ -200,12 +200,12 @@ cipher suites using DH, including anonymous DH, ephemeral DH and fixed DH.
cipher suites using fixed ECDH key agreement signed by CAs with RSA and ECDSA
keys or either respectively.
-=item B<kEECDH>
+=item B<kECDHE>, B<kEECDH>
cipher suites using ephemeral ECDH key agreement, including anonymous
cipher suites.
-=item B<EECDHE>
+=item B<ECDHE>, B<EECDH>
cipher suites using authenticated ephemeral ECDH key agreement.
@@ -229,7 +229,7 @@ cipher suites using DSS authentication, i.e. the certificates carry DSS keys.
=item B<aDH>
cipher suites effectively using DH authentication, i.e. the certificates carry
-DH keys. Not implemented.
+DH keys.
=item B<aECDH>
@@ -331,6 +331,18 @@ cipher suites using GOST 28147-89 MAC B<instead of> HMAC.
cipher suites using pre-shared keys (PSK).
+=item B<SUITEB128>, B<SUITEB128ONLY>, B<SUITEB192>
+
+enables suite B mode operation using 128 (permitting 192 bit mode by peer)
+128 bit (not permitting 192 bit by peer) or 192 bit level of security
+respectively. If used these cipherstrings should appear first in the cipher
+list and anything after them is ignored. Setting Suite B mode has additional
+consequences required to comply with RFC6460. In particular the supported
+signature algorithms is reduced to support only ECDSA and SHA256 or SHA384,
+only the elliptic curves P-256 and P-384 can be used and only the two suite B
+compliant ciphersuites (ECDHE-ECDSA-AES128-GCM-SHA256 and
+ECDHE-ECDSA-AES256-GCM-SHA384) are permissible.
+
=back
=head1 CIPHER SUITE NAMES
@@ -353,12 +365,10 @@ e.g. DES-CBC3-SHA. In these cases, RSA authentication is used.
SSL_RSA_WITH_DES_CBC_SHA DES-CBC-SHA
SSL_RSA_WITH_3DES_EDE_CBC_SHA DES-CBC3-SHA
- SSL_DH_DSS_EXPORT_WITH_DES40_CBC_SHA Not implemented.
- SSL_DH_DSS_WITH_DES_CBC_SHA Not implemented.
- SSL_DH_DSS_WITH_3DES_EDE_CBC_SHA Not implemented.
- SSL_DH_RSA_EXPORT_WITH_DES40_CBC_SHA Not implemented.
- SSL_DH_RSA_WITH_DES_CBC_SHA Not implemented.
- SSL_DH_RSA_WITH_3DES_EDE_CBC_SHA Not implemented.
+ SSL_DH_DSS_WITH_DES_CBC_SHA DH-DSS-DES-CBC-SHA
+ SSL_DH_DSS_WITH_3DES_EDE_CBC_SHA DH-DSS-DES-CBC3-SHA
+ SSL_DH_RSA_WITH_DES_CBC_SHA DH-RSA-DES-CBC-SHA
+ SSL_DH_RSA_WITH_3DES_EDE_CBC_SHA DH-RSA-DES-CBC3-SHA
SSL_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA EXP-EDH-DSS-DES-CBC-SHA
SSL_DHE_DSS_WITH_DES_CBC_SHA EDH-DSS-CBC-SHA
SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA EDH-DSS-DES-CBC3-SHA
@@ -413,10 +423,10 @@ e.g. DES-CBC3-SHA. In these cases, RSA authentication is used.
TLS_RSA_WITH_AES_128_CBC_SHA AES128-SHA
TLS_RSA_WITH_AES_256_CBC_SHA AES256-SHA
- TLS_DH_DSS_WITH_AES_128_CBC_SHA Not implemented.
- TLS_DH_DSS_WITH_AES_256_CBC_SHA Not implemented.
- TLS_DH_RSA_WITH_AES_128_CBC_SHA Not implemented.
- TLS_DH_RSA_WITH_AES_256_CBC_SHA Not implemented.
+ TLS_DH_DSS_WITH_AES_128_CBC_SHA DH-DSS-AES128-SHA
+ TLS_DH_DSS_WITH_AES_256_CBC_SHA DH-DSS-AES256-SHA
+ TLS_DH_RSA_WITH_AES_128_CBC_SHA DH-RSA-AES128-SHA
+ TLS_DH_RSA_WITH_AES_256_CBC_SHA DH-RSA-AES256-SHA
TLS_DHE_DSS_WITH_AES_128_CBC_SHA DHE-DSS-AES128-SHA
TLS_DHE_DSS_WITH_AES_256_CBC_SHA DHE-DSS-AES256-SHA
@@ -431,10 +441,10 @@ e.g. DES-CBC3-SHA. In these cases, RSA authentication is used.
TLS_RSA_WITH_CAMELLIA_128_CBC_SHA CAMELLIA128-SHA
TLS_RSA_WITH_CAMELLIA_256_CBC_SHA CAMELLIA256-SHA
- TLS_DH_DSS_WITH_CAMELLIA_128_CBC_SHA Not implemented.
- TLS_DH_DSS_WITH_CAMELLIA_256_CBC_SHA Not implemented.
- TLS_DH_RSA_WITH_CAMELLIA_128_CBC_SHA Not implemented.
- TLS_DH_RSA_WITH_CAMELLIA_256_CBC_SHA Not implemented.
+ TLS_DH_DSS_WITH_CAMELLIA_128_CBC_SHA DH-DSS-CAMELLIA128-SHA
+ TLS_DH_DSS_WITH_CAMELLIA_256_CBC_SHA DH-DSS-CAMELLIA256-SHA
+ TLS_DH_RSA_WITH_CAMELLIA_128_CBC_SHA DH-RSA-CAMELLIA128-SHA
+ TLS_DH_RSA_WITH_CAMELLIA_256_CBC_SHA DH-RSA-CAMELLIA256-SHA
TLS_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA DHE-DSS-CAMELLIA128-SHA
TLS_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA DHE-DSS-CAMELLIA256-SHA
@@ -448,8 +458,8 @@ e.g. DES-CBC3-SHA. In these cases, RSA authentication is used.
TLS_RSA_WITH_SEED_CBC_SHA SEED-SHA
- TLS_DH_DSS_WITH_SEED_CBC_SHA Not implemented.
- TLS_DH_RSA_WITH_SEED_CBC_SHA Not implemented.
+ TLS_DH_DSS_WITH_SEED_CBC_SHA DH-DSS-SEED-SHA
+ TLS_DH_RSA_WITH_SEED_CBC_SHA DH-RSA-SEED-SHA
TLS_DHE_DSS_WITH_SEED_CBC_SHA DHE-DSS-SEED-SHA
TLS_DHE_RSA_WITH_SEED_CBC_SHA DHE-RSA-SEED-SHA
@@ -517,15 +527,15 @@ Note: these ciphers can also be used in SSL v3.
TLS_RSA_WITH_AES_128_GCM_SHA256 AES128-GCM-SHA256
TLS_RSA_WITH_AES_256_GCM_SHA384 AES256-GCM-SHA384
- TLS_DH_RSA_WITH_AES_128_CBC_SHA256 Not implemented.
- TLS_DH_RSA_WITH_AES_256_CBC_SHA256 Not implemented.
- TLS_DH_RSA_WITH_AES_128_GCM_SHA256 Not implemented.
- TLS_DH_RSA_WITH_AES_256_GCM_SHA384 Not implemented.
+ TLS_DH_RSA_WITH_AES_128_CBC_SHA256 DH-RSA-AES128-SHA256
+ TLS_DH_RSA_WITH_AES_256_CBC_SHA256 DH-RSA-AES256-SHA256
+ TLS_DH_RSA_WITH_AES_128_GCM_SHA256 DH-RSA-AES128-GCM-SHA256
+ TLS_DH_RSA_WITH_AES_256_GCM_SHA384 DH-RSA-AES256-GCM-SHA384
- TLS_DH_DSS_WITH_AES_128_CBC_SHA256 Not implemented.
- TLS_DH_DSS_WITH_AES_256_CBC_SHA256 Not implemented.
- TLS_DH_DSS_WITH_AES_128_GCM_SHA256 Not implemented.
- TLS_DH_DSS_WITH_AES_256_GCM_SHA384 Not implemented.
+ TLS_DH_DSS_WITH_AES_128_CBC_SHA256 DH-DSS-AES128-SHA256
+ TLS_DH_DSS_WITH_AES_256_CBC_SHA256 DH-DSS-AES256-SHA256
+ TLS_DH_DSS_WITH_AES_128_GCM_SHA256 DH-DSS-AES128-GCM-SHA256
+ TLS_DH_DSS_WITH_AES_256_GCM_SHA384 DH-DSS-AES256-GCM-SHA384
TLS_DHE_RSA_WITH_AES_128_CBC_SHA256 DHE-RSA-AES128-SHA256
TLS_DHE_RSA_WITH_AES_256_CBC_SHA256 DHE-RSA-AES256-SHA256
@@ -581,9 +591,6 @@ Note: these ciphers can also be used in SSL v3.
=head1 NOTES
-The non-ephemeral DH modes are currently unimplemented in OpenSSL
-because there is no support for DH certificates.
-
Some compiled versions of OpenSSL may not include all the ciphers
listed here because some ciphers were excluded at compile time.
diff --git a/crypto/openssl/doc/apps/cms.pod b/crypto/openssl/doc/apps/cms.pod
index 9a24082..4eaedbc 100644
--- a/crypto/openssl/doc/apps/cms.pod
+++ b/crypto/openssl/doc/apps/cms.pod
@@ -58,6 +58,7 @@ B<openssl> B<cms>
[B<-secretkeyid id>]
[B<-econtent_type type>]
[B<-inkey file>]
+[B<-keyopt name:parameter>]
[B<-passin arg>]
[B<-rand file(s)>]
[B<cert.pem...>]
@@ -322,8 +323,13 @@ verification was successful.
=item B<-recip file>
-the recipients certificate when decrypting a message. This certificate
-must match one of the recipients of the message or an error occurs.
+when decrypting a message this specifies the recipients certificate. The
+certificate must match one of the recipients of the message or an error
+occurs.
+
+When encrypting a message this option may be used multiple times to specify
+each recipient. This form B<must> be used if customised parameters are
+required (for example to specify RSA-OAEP).
=item B<-keyid>
@@ -382,6 +388,13 @@ private key must be included in the certificate file specified with
the B<-recip> or B<-signer> file. When signing this option can be used
multiple times to specify successive keys.
+=item B<-keyopt name:opt>
+
+for signing and encryption this option can be used multiple times to
+set customised parameters for the preceding key or certificate. It can
+currently be used to set RSA-PSS for signing, RSA-OAEP for encryption
+or to modify default parameters for ECDH.
+
=item B<-passin arg>
the private key password source. For more information about the format of B<arg>
@@ -509,6 +522,10 @@ The B<-compress> option.
The B<-secretkey> option when used with B<-encrypt>.
+The use of PSS with B<-sign>.
+
+The use of OAEP or non-RSA keys with B<-encrypt>.
+
Additionally the B<-EncryptedData_create> and B<-data_create> type cannot
be processed by the older B<smime> command.
@@ -589,6 +606,21 @@ Add a signer to an existing message:
openssl cms -resign -in mail.msg -signer newsign.pem -out mail2.msg
+Sign mail using RSA-PSS:
+
+ openssl cms -sign -in message.txt -text -out mail.msg \
+ -signer mycert.pem -keyopt rsa_padding_mode:pss
+
+Create encrypted mail using RSA-OAEP:
+
+ openssl cms -encrypt -in plain.txt -out mail.msg \
+ -recip cert.pem -keyopt rsa_padding_mode:oaep
+
+Use SHA256 KDF with an ECDH certificate:
+
+ openssl cms -encrypt -in plain.txt -out mail.msg \
+ -recip ecdhcert.pem -keyopt ecdh_kdf_md:sha256
+
=head1 BUGS
The MIME parser isn't very clever: it seems to handle most messages that I've
@@ -614,7 +646,16 @@ No revocation checking is done on the signer's certificate.
The use of multiple B<-signer> options and the B<-resign> command were first
added in OpenSSL 1.0.0
+The B<keyopt> option was first added in OpenSSL 1.1.0
+
+The use of B<-recip> to specify the recipient when encrypting mail was first
+added to OpenSSL 1.1.0
+
+Support for RSA-OAEP and RSA-PSS was first added to OpenSSL 1.1.0.
+
+The use of non-RSA keys with B<-encrypt> and B<-decrypt> was first added
+to OpenSSL 1.1.0.
-The -no_alt_chains options was first added to OpenSSL 1.0.1n and 1.0.2b.
+The -no_alt_chains options was first added to OpenSSL 1.0.2b.
=cut
diff --git a/crypto/openssl/doc/apps/genpkey.pod b/crypto/openssl/doc/apps/genpkey.pod
index c74d097..929edcd 100644
--- a/crypto/openssl/doc/apps/genpkey.pod
+++ b/crypto/openssl/doc/apps/genpkey.pod
@@ -128,6 +128,15 @@ The number of bits in the prime parameter B<p>.
The value to use for the generator B<g>.
+=item B<dh_rfc5114:num>
+
+If this option is set then the appropriate RFC5114 parameters are used
+instead of generating new parameters. The value B<num> can take the
+values 1, 2 or 3 corresponding to RFC5114 DH parameters consisting of
+1024 bit group with 160 bit subgroup, 2048 bit group with 224 bit subgroup
+and 2048 bit group with 256 bit subgroup as mentioned in RFC5114 sections
+2.1, 2.2 and 2.3 respectively.
+
=back
=head1 EC PARAMETER GENERATION OPTIONS
@@ -206,6 +215,10 @@ Generate 1024 bit DH parameters:
openssl genpkey -genparam -algorithm DH -out dhp.pem \
-pkeyopt dh_paramgen_prime_len:1024
+Output RFC5114 2048 bit DH parameters with 224 bit subgroup:
+
+ openssl genpkey -genparam -algorithm DH -out dhp.pem -pkeyopt dh_rfc5114:2
+
Generate DH key from parameters:
openssl genpkey -paramfile dhp.pem -out dhkey.pem
diff --git a/crypto/openssl/doc/apps/ocsp.pod b/crypto/openssl/doc/apps/ocsp.pod
index fdb900c..4639502 100644
--- a/crypto/openssl/doc/apps/ocsp.pod
+++ b/crypto/openssl/doc/apps/ocsp.pod
@@ -387,6 +387,6 @@ second file.
=head1 HISTORY
-The -no_alt_chains options was first added to OpenSSL 1.0.1n and 1.0.2b.
+The -no_alt_chains options was first added to OpenSSL 1.0.2b.
=cut
diff --git a/crypto/openssl/doc/apps/pkcs8.pod b/crypto/openssl/doc/apps/pkcs8.pod
index 84abee7..6901f1f 100644
--- a/crypto/openssl/doc/apps/pkcs8.pod
+++ b/crypto/openssl/doc/apps/pkcs8.pod
@@ -20,6 +20,7 @@ B<openssl> B<pkcs8>
[B<-embed>]
[B<-nsdb>]
[B<-v2 alg>]
+[B<-v2prf alg>]
[B<-v1 alg>]
[B<-engine id>]
@@ -118,6 +119,12 @@ private keys with OpenSSL then this doesn't matter.
The B<alg> argument is the encryption algorithm to use, valid values include
B<des>, B<des3> and B<rc2>. It is recommended that B<des3> is used.
+=item B<-v2prf alg>
+
+This option sets the PRF algorithm to use with PKCS#5 v2.0. A typical value
+values would be B<hmacWithSHA256>. If this option isn't set then the default
+for the cipher is used or B<hmacWithSHA1> if there is no default.
+
=item B<-v1 alg>
This option specifies a PKCS#5 v1.5 or PKCS#12 algorithm to use. A complete
@@ -195,6 +202,11 @@ DES:
openssl pkcs8 -in key.pem -topk8 -v2 des3 -out enckey.pem
+Convert a private from traditional to PKCS#5 v2.0 format using AES with
+256 bits in CBC mode and B<hmacWithSHA256> PRF:
+
+ openssl pkcs8 -in key.pem -topk8 -v2 aes-256-cbc -v2prf hmacWithSHA256 -out enckey.pem
+
Convert a private key to PKCS#8 using a PKCS#5 1.5 compatible algorithm
(DES):
diff --git a/crypto/openssl/doc/apps/req.pod b/crypto/openssl/doc/apps/req.pod
index 0730d11..df68cb0 100644
--- a/crypto/openssl/doc/apps/req.pod
+++ b/crypto/openssl/doc/apps/req.pod
@@ -235,8 +235,8 @@ this option outputs a self signed certificate instead of a certificate
request. This is typically used to generate a test certificate or
a self signed root CA. The extensions added to the certificate
(if any) are specified in the configuration file. Unless specified
-using the B<set_serial> option B<0> will be used for the serial
-number.
+using the B<set_serial> option, a large random number will be used for
+the serial number.
=item B<-days n>
diff --git a/crypto/openssl/doc/apps/s_client.pod b/crypto/openssl/doc/apps/s_client.pod
index d92ec93..84d0527 100644
--- a/crypto/openssl/doc/apps/s_client.pod
+++ b/crypto/openssl/doc/apps/s_client.pod
@@ -38,6 +38,9 @@ B<openssl> B<s_client>
[B<-no_ssl2>]
[B<-no_ssl3>]
[B<-no_tls1>]
+[B<-no_tls1_1>]
+[B<-no_tls1_2>]
+[B<-fallback_scsv>]
[B<-bugs>]
[B<-cipher cipherlist>]
[B<-serverpref>]
@@ -48,6 +51,7 @@ B<openssl> B<s_client>
[B<-sess_out filename>]
[B<-sess_in filename>]
[B<-rand file(s)>]
+[B<-serverinfo types>]
[B<-status>]
[B<-nextprotoneg protocols>]
@@ -197,16 +201,19 @@ Use the PSK key B<key> when using a PSK cipher suite. The key is
given as a hexadecimal number without leading 0x, for example -psk
1a2b3c4d.
-=item B<-ssl2>, B<-ssl3>, B<-tls1>, B<-no_ssl2>, B<-no_ssl3>, B<-no_tls1>
+=item B<-ssl2>, B<-ssl3>, B<-tls1>, B<-no_ssl2>, B<-no_ssl3>, B<-no_tls1>, B<-no_tls1_1>, B<-no_tls1_2>
these options disable the use of certain SSL or TLS protocols. By default
the initial handshake uses a method which should be compatible with all
servers and permit them to use SSL v3, SSL v2 or TLS as appropriate.
-Unfortunately there are a lot of ancient and broken servers in use which
+Unfortunately there are still ancient and broken servers in use which
cannot handle this technique and will fail to connect. Some servers only
-work if TLS is turned off with the B<-no_tls> option others will only
-support SSL v2 and may need the B<-ssl2> option.
+work if TLS is turned off.
+
+=item B<-fallback_scsv>
+
+Send TLS_FALLBACK_SCSV in the ClientHello.
=item B<-bugs>
@@ -262,6 +269,13 @@ Multiple files can be specified separated by a OS-dependent character.
The separator is B<;> for MS-Windows, B<,> for OpenVMS, and B<:> for
all others.
+=item B<-serverinfo types>
+
+a list of comma-separated TLS Extension Types (numbers between 0 and
+65535). Each type will be sent as an empty ClientHello TLS Extension.
+The server's response (if any) will be encoded and displayed as a PEM
+file.
+
=item B<-status>
sends a certificate status request to the server (OCSP stapling). The server
@@ -350,6 +364,6 @@ L<sess_id(1)|sess_id(1)>, L<s_server(1)|s_server(1)>, L<ciphers(1)|ciphers(1)>
=head1 HISTORY
-The -no_alt_chains options was first added to OpenSSL 1.0.1n and 1.0.2b.
+The -no_alt_chains options was first added to OpenSSL 1.0.2b.
=cut
diff --git a/crypto/openssl/doc/apps/s_server.pod b/crypto/openssl/doc/apps/s_server.pod
index 491038e..baca779 100644
--- a/crypto/openssl/doc/apps/s_server.pod
+++ b/crypto/openssl/doc/apps/s_server.pod
@@ -46,7 +46,6 @@ B<openssl> B<s_server>
[B<-no_ssl3>]
[B<-no_tls1>]
[B<-no_dhe>]
-[B<-no_ecdhe>]
[B<-bugs>]
[B<-hack>]
[B<-www>]
@@ -57,6 +56,8 @@ B<openssl> B<s_server>
[B<-no_ticket>]
[B<-id_prefix arg>]
[B<-rand file(s)>]
+[B<-serverinfo file>]
+[B<-no_resumption_on_reneg>]
[B<-status>]
[B<-status_verbose>]
[B<-status_timeout nsec>]
@@ -139,11 +140,6 @@ a static set of parameters hard coded into the s_server program will be used.
if this option is set then no DH parameters will be loaded effectively
disabling the ephemeral DH cipher suites.
-=item B<-no_ecdhe>
-
-if this option is set then no ECDH parameters will be loaded effectively
-disabling the ephemeral ECDH cipher suites.
-
=item B<-no_tmp_rsa>
certain export cipher suites sometimes use a temporary RSA key, this option
@@ -300,6 +296,18 @@ Multiple files can be specified separated by a OS-dependent character.
The separator is B<;> for MS-Windows, B<,> for OpenVMS, and B<:> for
all others.
+=item B<-serverinfo file>
+
+a file containing one or more blocks of PEM data. Each PEM block
+must encode a TLS ServerHello extension (2 bytes type, 2 bytes length,
+followed by "length" bytes of extension data). If the client sends
+an empty TLS ClientHello extension matching the type, the corresponding
+ServerHello extension will be returned.
+
+=item B<-no_resumption_on_reneg>
+
+set SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION flag.
+
=item B<-status>
enables certificate status request support (aka OCSP stapling).
@@ -405,6 +413,6 @@ L<sess_id(1)|sess_id(1)>, L<s_client(1)|s_client(1)>, L<ciphers(1)|ciphers(1)>
=head1 HISTORY
-The -no_alt_chains options was first added to OpenSSL 1.0.1n and 1.0.2b.
+The -no_alt_chains options was first added to OpenSSL 1.0.2b.
=cut
diff --git a/crypto/openssl/doc/apps/smime.pod b/crypto/openssl/doc/apps/smime.pod
index 94a8823..d5618c8 100644
--- a/crypto/openssl/doc/apps/smime.pod
+++ b/crypto/openssl/doc/apps/smime.pod
@@ -442,6 +442,6 @@ structures may cause parsing errors.
The use of multiple B<-signer> options and the B<-resign> command were first
added in OpenSSL 1.0.0
-The -no_alt_chains options was first added to OpenSSL 1.0.1n and 1.0.2b.
+The -no_alt_chains options was first added to OpenSSL 1.0.2b.
=cut
diff --git a/crypto/openssl/doc/apps/verify.pod b/crypto/openssl/doc/apps/verify.pod
index 18eeee0..bffa6c0 100644
--- a/crypto/openssl/doc/apps/verify.pod
+++ b/crypto/openssl/doc/apps/verify.pod
@@ -12,6 +12,10 @@ B<openssl> B<verify>
[B<-purpose purpose>]
[B<-policy arg>]
[B<-ignore_critical>]
+[B<-attime timestamp>]
+[B<-check_ss_sig>]
+[B<-crlfile file>]
+[B<-crl_download>]
[B<-crl_check>]
[B<-crl_check_all>]
[B<-policy_check>]
@@ -26,7 +30,7 @@ B<openssl> B<verify>
[B<-untrusted file>]
[B<-help>]
[B<-issuer_checks>]
-[B<-attime timestamp>]
+[B<-trusted file>]
[B<-verbose>]
[B<->]
[certificates]
@@ -52,6 +56,30 @@ create symbolic links to a directory of certificates.
A file of trusted certificates. The file should contain multiple certificates
in PEM format concatenated together.
+=item B<-attime timestamp>
+
+Perform validation checks using time specified by B<timestamp> and not
+current system time. B<timestamp> is the number of seconds since
+01.01.1970 (UNIX time).
+
+=item B<-check_ss_sig>
+
+Verify the signature on the self-signed root CA. This is disabled by default
+because it doesn't add any security.
+
+=item B<-crlfile file>
+
+File containing one or more CRL's (in PEM format) to load.
+
+=item B<-crl_download>
+
+Attempt to download CRL information for this certificate.
+
+=item B<-crl_check>
+
+Checks end entity certificate validity by attempting to look up a valid CRL.
+If a valid CRL cannot be found an error occurs.
+
=item B<-untrusted file>
A file of untrusted certificates. The file should contain multiple certificates
@@ -81,12 +109,6 @@ rejected. The presence of rejection messages does not itself imply that
anything is wrong; during the normal verification process, several
rejections may take place.
-=item B<-attime timestamp>
-
-Perform validation checks using time specified by B<timestamp> and not
-current system time. B<timestamp> is the number of seconds since
-01.01.1970 (UNIX time).
-
=item B<-policy arg>
Enable policy processing and add B<arg> to the user-initial-policy-set (see
@@ -117,6 +139,11 @@ be found that is trusted. With this option that behaviour is suppressed so that
only the first chain found is ever used. Using this option will force the
behaviour to match that of previous OpenSSL versions.
+=item B<-trusted file>
+
+A file of additional trusted certificates. The file should contain multiple
+certificates in PEM format concatenated together.
+
=item B<-policy_print>
Print out diagnostics related to policy processing.
@@ -420,6 +447,6 @@ L<x509(1)|x509(1)>
=head1 HISTORY
-The -no_alt_chains options was first added to OpenSSL 1.0.1n and 1.0.2b.
+The -no_alt_chains options was first added to OpenSSL 1.0.2b.
=cut
diff --git a/crypto/openssl/doc/apps/x509.pod b/crypto/openssl/doc/apps/x509.pod
index 878a7c3..c83c0f6 100644
--- a/crypto/openssl/doc/apps/x509.pod
+++ b/crypto/openssl/doc/apps/x509.pod
@@ -51,6 +51,7 @@ B<openssl> B<x509>
[B<-CAkey filename>]
[B<-CAcreateserial>]
[B<-CAserial filename>]
+[B<-force_pubkey key>]
[B<-text>]
[B<-certopt option>]
[B<-C>]
@@ -418,6 +419,15 @@ specified then the extensions should either be contained in the unnamed
L<x509v3_config(5)|x509v3_config(5)> manual page for details of the
extension section format.
+=item B<-force_pubkey key>
+
+when a certificate is created set its public key to B<key> instead of the
+key in the certificate or certificate request. This option is useful for
+creating certificates where the algorithm can't normally sign requests, for
+example DH.
+
+The format or B<key> can be specified using the B<-keyform> option.
+
=back
=head2 NAME OPTIONS
diff --git a/crypto/openssl/doc/crypto/ASN1_STRING_length.pod b/crypto/openssl/doc/crypto/ASN1_STRING_length.pod
index a08e9a0..f651e4f 100644
--- a/crypto/openssl/doc/crypto/ASN1_STRING_length.pod
+++ b/crypto/openssl/doc/crypto/ASN1_STRING_length.pod
@@ -3,7 +3,7 @@
=head1 NAME
ASN1_STRING_dup, ASN1_STRING_cmp, ASN1_STRING_set, ASN1_STRING_length,
-ASN1_STRING_length_set, ASN1_STRING_type, ASN1_STRING_data -
+ASN1_STRING_length_set, ASN1_STRING_type, ASN1_STRING_data, ASN1_STRING_to_UTF8 -
ASN1_STRING utility functions
=head1 SYNOPSIS
diff --git a/crypto/openssl/doc/crypto/ASN1_STRING_print_ex.pod b/crypto/openssl/doc/crypto/ASN1_STRING_print_ex.pod
index 3891b88..19c82ff 100644
--- a/crypto/openssl/doc/crypto/ASN1_STRING_print_ex.pod
+++ b/crypto/openssl/doc/crypto/ASN1_STRING_print_ex.pod
@@ -2,7 +2,7 @@
=head1 NAME
-ASN1_STRING_print_ex, ASN1_STRING_print_ex_fp - ASN1_STRING output routines.
+ASN1_STRING_print_ex, ASN1_STRING_print_ex_fp, ASN1_STRING_print - ASN1_STRING output routines.
=head1 SYNOPSIS
diff --git a/crypto/openssl/doc/crypto/ASN1_TIME_set.pod b/crypto/openssl/doc/crypto/ASN1_TIME_set.pod
new file mode 100644
index 0000000..ae2b53d
--- /dev/null
+++ b/crypto/openssl/doc/crypto/ASN1_TIME_set.pod
@@ -0,0 +1,129 @@
+=pod
+
+=head1 NAME
+
+ASN1_TIME_set, ASN1_TIME_adj, ASN1_TIME_check, ASN1_TIME_set_string,
+ASN1_TIME_print, ASN1_TIME_diff - ASN.1 Time functions.
+
+=head1 SYNOPSIS
+
+ ASN1_TIME *ASN1_TIME_set(ASN1_TIME *s, time_t t);
+ ASN1_TIME *ASN1_TIME_adj(ASN1_TIME *s, time_t t,
+ int offset_day, long offset_sec);
+ int ASN1_TIME_set_string(ASN1_TIME *s, const char *str);
+ int ASN1_TIME_check(const ASN1_TIME *t);
+ int ASN1_TIME_print(BIO *b, const ASN1_TIME *s);
+
+ int ASN1_TIME_diff(int *pday, int *psec,
+ const ASN1_TIME *from, const ASN1_TIME *to);
+
+=head1 DESCRIPTION
+
+The function ASN1_TIME_set() sets the ASN1_TIME structure B<s> to the
+time represented by the time_t value B<t>. If B<s> is NULL a new ASN1_TIME
+structure is allocated and returned.
+
+ASN1_TIME_adj() sets the ASN1_TIME structure B<s> to the time represented
+by the time B<offset_day> and B<offset_sec> after the time_t value B<t>.
+The values of B<offset_day> or B<offset_sec> can be negative to set a
+time before B<t>. The B<offset_sec> value can also exceed the number of
+seconds in a day. If B<s> is NULL a new ASN1_TIME structure is allocated
+and returned.
+
+ASN1_TIME_set_string() sets ASN1_TIME structure B<s> to the time
+represented by string B<str> which must be in appropriate ASN.1 time
+format (for example YYMMDDHHMMSSZ or YYYYMMDDHHMMSSZ).
+
+ASN1_TIME_check() checks the syntax of ASN1_TIME structure B<s>.
+
+ASN1_TIME_print() prints out the time B<s> to BIO B<b> in human readable
+format. It will be of the format MMM DD HH:MM:SS YYYY [GMT], for example
+"Feb 3 00:55:52 2015 GMT" it does not include a newline. If the time
+structure has invalid format it prints out "Bad time value" and returns
+an error.
+
+ASN1_TIME_diff() sets B<*pday> and B<*psec> to the time difference between
+B<from> and B<to>. If B<to> represents a time later than B<from> then
+one or both (depending on the time difference) of B<*pday> and B<*psec>
+will be positive. If B<to> represents a time earlier than B<from> then
+one or both of B<*pday> and B<*psec> will be negative. If B<to> and B<from>
+represent the same time then B<*pday> and B<*psec> will both be zero.
+If both B<*pday> and B<*psec> are non-zero they will always have the same
+sign. The value of B<*psec> will always be less than the number of seconds
+in a day. If B<from> or B<to> is NULL the current time is used.
+
+=head1 NOTES
+
+The ASN1_TIME structure corresponds to the ASN.1 structure B<Time>
+defined in RFC5280 et al. The time setting functions obey the rules outlined
+in RFC5280: if the date can be represented by UTCTime it is used, else
+GeneralizedTime is used.
+
+The ASN1_TIME structure is represented as an ASN1_STRING internally and can
+be freed up using ASN1_STRING_free().
+
+The ASN1_TIME structure can represent years from 0000 to 9999 but no attempt
+is made to correct ancient calendar changes (for example from Julian to
+Gregorian calendars).
+
+Some applications add offset times directly to a time_t value and pass the
+results to ASN1_TIME_set() (or equivalent). This can cause problems as the
+time_t value can overflow on some systems resulting in unexpected results.
+New applications should use ASN1_TIME_adj() instead and pass the offset value
+in the B<offset_sec> and B<offset_day> parameters instead of directly
+manipulating a time_t value.
+
+=head1 BUGS
+
+ASN1_TIME_print() currently does not print out the time zone: it either prints
+out "GMT" or nothing. But all certificates complying with RFC5280 et al use GMT
+anyway.
+
+=head1 EXAMPLES
+
+Set a time structure to one hour after the current time and print it out:
+
+ #include <time.h>
+ #include <openssl/asn1.h>
+ ASN1_TIME *tm;
+ time_t t;
+ BIO *b;
+ t = time(NULL);
+ tm = ASN1_TIME_adj(NULL, t, 0, 60 * 60);
+ b = BIO_new_fp(stdout, BIO_NOCLOSE);
+ ASN1_TIME_print(b, tm);
+ ASN1_STRING_free(tm);
+ BIO_free(b);
+
+Determine if one time is later or sooner than the current time:
+
+ int day, sec;
+
+ if (!ASN1_TIME_diff(&day, &sec, NULL, to))
+ /* Invalid time format */
+
+ if (day > 0 || sec > 0)
+ printf("Later\n");
+ else if (day < 0 || sec < 0)
+ printf("Sooner\n");
+ else
+ printf("Same\n");
+
+=head1 RETURN VALUES
+
+ASN1_TIME_set() and ASN1_TIME_adj() return a pointer to an ASN1_TIME structure
+or NULL if an error occurred.
+
+ASN1_TIME_set_string() returns 1 if the time value is successfully set and
+0 otherwise.
+
+ASN1_TIME_check() returns 1 if the structure is syntactically correct and 0
+otherwise.
+
+ASN1_TIME_print() returns 1 if the time is successfully printed out and 0 if
+an error occurred (I/O error or invalid time format).
+
+ASN1_TIME_diff() returns 1 for sucess and 0 for failure. It can fail if the
+pass ASN1_TIME structure has invalid syntax for example.
+
+=cut
diff --git a/crypto/openssl/doc/crypto/BIO_f_ssl.pod b/crypto/openssl/doc/crypto/BIO_f_ssl.pod
index bc5861a..a9f23f1 100644
--- a/crypto/openssl/doc/crypto/BIO_f_ssl.pod
+++ b/crypto/openssl/doc/crypto/BIO_f_ssl.pod
@@ -108,7 +108,7 @@ SSL BIOs are exceptional in that if the underlying transport
is non blocking they can still request a retry in exceptional
circumstances. Specifically this will happen if a session
renegotiation takes place during a BIO_read() operation, one
-case where this happens is when SGC or step up occurs.
+case where this happens is when step up occurs.
In OpenSSL 0.9.6 and later the SSL flag SSL_AUTO_RETRY can be
set to disable this behaviour. That is when this flag is set
diff --git a/crypto/openssl/doc/crypto/BIO_find_type.pod b/crypto/openssl/doc/crypto/BIO_find_type.pod
index bd3b256..2595200 100644
--- a/crypto/openssl/doc/crypto/BIO_find_type.pod
+++ b/crypto/openssl/doc/crypto/BIO_find_type.pod
@@ -2,7 +2,7 @@
=head1 NAME
-BIO_find_type, BIO_next - BIO chain traversal
+BIO_find_type, BIO_next, BIO_method_type - BIO chain traversal
=head1 SYNOPSIS
diff --git a/crypto/openssl/doc/crypto/BIO_s_accept.pod b/crypto/openssl/doc/crypto/BIO_s_accept.pod
index b80b6ae..560c112 100644
--- a/crypto/openssl/doc/crypto/BIO_s_accept.pod
+++ b/crypto/openssl/doc/crypto/BIO_s_accept.pod
@@ -2,7 +2,7 @@
=head1 NAME
-BIO_s_accept, BIO_set_accept_port, BIO_get_accept_port,
+BIO_s_accept, BIO_set_accept_port, BIO_get_accept_port, BIO_new_accept,
BIO_set_nbio_accept, BIO_set_accept_bios, BIO_set_bind_mode,
BIO_get_bind_mode, BIO_do_accept - accept BIO
diff --git a/crypto/openssl/doc/crypto/BIO_s_connect.pod b/crypto/openssl/doc/crypto/BIO_s_connect.pod
index bcf7d8d..18ece4c 100644
--- a/crypto/openssl/doc/crypto/BIO_s_connect.pod
+++ b/crypto/openssl/doc/crypto/BIO_s_connect.pod
@@ -2,7 +2,7 @@
=head1 NAME
-BIO_s_connect, BIO_set_conn_hostname, BIO_set_conn_port,
+BIO_s_connect, BIO_new_connect, BIO_set_conn_hostname, BIO_set_conn_port,
BIO_set_conn_ip, BIO_set_conn_int_port, BIO_get_conn_hostname,
BIO_get_conn_port, BIO_get_conn_ip, BIO_get_conn_int_port,
BIO_set_nbio, BIO_do_connect - connect BIO
diff --git a/crypto/openssl/doc/crypto/BN_BLINDING_new.pod b/crypto/openssl/doc/crypto/BN_BLINDING_new.pod
index da06e44..06d7ea2 100644
--- a/crypto/openssl/doc/crypto/BN_BLINDING_new.pod
+++ b/crypto/openssl/doc/crypto/BN_BLINDING_new.pod
@@ -4,7 +4,7 @@
BN_BLINDING_new, BN_BLINDING_free, BN_BLINDING_update, BN_BLINDING_convert,
BN_BLINDING_invert, BN_BLINDING_convert_ex, BN_BLINDING_invert_ex,
-BN_BLINDING_get_thread_id, BN_BLINDING_set_thread_id, BN_BLINDING_get_flags,
+BN_BLINDING_get_thread_id, BN_BLINDING_set_thread_id, BN_BLINDING_thread_id, BN_BLINDING_get_flags,
BN_BLINDING_set_flags, BN_BLINDING_create_param - blinding related BIGNUM
functions.
@@ -84,7 +84,7 @@ or NULL in case of an error.
BN_BLINDING_update(), BN_BLINDING_convert(), BN_BLINDING_invert(),
BN_BLINDING_convert_ex() and BN_BLINDING_invert_ex() return 1 on
-success and 0 if an error occured.
+success and 0 if an error occurred.
BN_BLINDING_thread_id() returns a pointer to the thread id object
within a B<BN_BLINDING> object.
diff --git a/crypto/openssl/doc/crypto/BN_CTX_new.pod b/crypto/openssl/doc/crypto/BN_CTX_new.pod
index ad8d07d..bbedbb1 100644
--- a/crypto/openssl/doc/crypto/BN_CTX_new.pod
+++ b/crypto/openssl/doc/crypto/BN_CTX_new.pod
@@ -10,9 +10,12 @@ BN_CTX_new, BN_CTX_init, BN_CTX_free - allocate and free BN_CTX structures
BN_CTX *BN_CTX_new(void);
+ void BN_CTX_free(BN_CTX *c);
+
+Deprecated:
+
void BN_CTX_init(BN_CTX *c);
- void BN_CTX_free(BN_CTX *c);
=head1 DESCRIPTION
@@ -22,8 +25,7 @@ is rather expensive when used in conjunction with repeated subroutine
calls, the B<BN_CTX> structure is used.
BN_CTX_new() allocates and initializes a B<BN_CTX>
-structure. BN_CTX_init() initializes an existing uninitialized
-B<BN_CTX>.
+structure.
BN_CTX_free() frees the components of the B<BN_CTX>, and if it was
created by BN_CTX_new(), also the structure itself.
@@ -31,6 +33,8 @@ If L<BN_CTX_start(3)|BN_CTX_start(3)> has been used on the B<BN_CTX>,
L<BN_CTX_end(3)|BN_CTX_end(3)> must be called before the B<BN_CTX>
may be freed by BN_CTX_free().
+BN_CTX_init() (deprecated) initializes an existing uninitialized B<BN_CTX>.
+This should not be used for new programs. Use BN_CTX_new() instead.
=head1 RETURN VALUES
diff --git a/crypto/openssl/doc/crypto/BN_generate_prime.pod b/crypto/openssl/doc/crypto/BN_generate_prime.pod
index 7dccacb..bf1b530 100644
--- a/crypto/openssl/doc/crypto/BN_generate_prime.pod
+++ b/crypto/openssl/doc/crypto/BN_generate_prime.pod
@@ -2,12 +2,31 @@
=head1 NAME
-BN_generate_prime, BN_is_prime, BN_is_prime_fasttest - generate primes and test for primality
+BN_generate_prime_ex, BN_is_prime_ex, BN_is_prime_fasttest_ex, BN_GENCB_call,
+BN_GENCB_set_old, BN_GENCB_set, BN_generate_prime, BN_is_prime,
+BN_is_prime_fasttest - generate primes and test for primality
=head1 SYNOPSIS
#include <openssl/bn.h>
+ int BN_generate_prime_ex(BIGNUM *ret,int bits,int safe, const BIGNUM *add,
+ const BIGNUM *rem, BN_GENCB *cb);
+
+ int BN_is_prime_ex(const BIGNUM *p,int nchecks, BN_CTX *ctx, BN_GENCB *cb);
+
+ int BN_is_prime_fasttest_ex(const BIGNUM *p,int nchecks, BN_CTX *ctx,
+ int do_trial_division, BN_GENCB *cb);
+
+ int BN_GENCB_call(BN_GENCB *cb, int a, int b);
+
+ #define BN_GENCB_set_old(gencb, callback, cb_arg) ...
+
+ #define BN_GENCB_set(gencb, callback, cb_arg) ...
+
+
+Deprecated:
+
BIGNUM *BN_generate_prime(BIGNUM *ret, int num, int safe, BIGNUM *add,
BIGNUM *rem, void (*callback)(int, int, void *), void *cb_arg);
@@ -20,27 +39,27 @@ BN_generate_prime, BN_is_prime, BN_is_prime_fasttest - generate primes and test
=head1 DESCRIPTION
-BN_generate_prime() generates a pseudo-random prime number of B<num>
-bits.
+BN_generate_prime_ex() generates a pseudo-random prime number of
+bit length B<bits>.
If B<ret> is not B<NULL>, it will be used to store the number.
-If B<callback> is not B<NULL>, it is called as follows:
+If B<cb> is not B<NULL>, it is used as follows:
=over 4
=item *
-B<callback(0, i, cb_arg)> is called after generating the i-th
+B<BN_GENCB_call(cb, 0, i)> is called after generating the i-th
potential prime number.
=item *
-While the number is being tested for primality, B<callback(1, j,
-cb_arg)> is called as described below.
+While the number is being tested for primality,
+B<BN_GENCB_call(cb, 1, j)> is called as described below.
=item *
-When a prime has been found, B<callback(2, i, cb_arg)> is called.
+When a prime has been found, B<BN_GENCB_call(cb, 2, i)> is called.
=back
@@ -54,38 +73,67 @@ generator.
If B<safe> is true, it will be a safe prime (i.e. a prime p so
that (p-1)/2 is also prime).
-The PRNG must be seeded prior to calling BN_generate_prime().
+The PRNG must be seeded prior to calling BN_generate_prime_ex().
The prime number generation has a negligible error probability.
-BN_is_prime() and BN_is_prime_fasttest() test if the number B<a> is
+BN_is_prime_ex() and BN_is_prime_fasttest_ex() test if the number B<p> is
prime. The following tests are performed until one of them shows that
-B<a> is composite; if B<a> passes all these tests, it is considered
+B<p> is composite; if B<p> passes all these tests, it is considered
prime.
-BN_is_prime_fasttest(), when called with B<do_trial_division == 1>,
+BN_is_prime_fasttest_ex(), when called with B<do_trial_division == 1>,
first attempts trial division by a number of small primes;
-if no divisors are found by this test and B<callback> is not B<NULL>,
-B<callback(1, -1, cb_arg)> is called.
+if no divisors are found by this test and B<cb> is not B<NULL>,
+B<BN_GENCB_call(cb, 1, -1)> is called.
If B<do_trial_division == 0>, this test is skipped.
-Both BN_is_prime() and BN_is_prime_fasttest() perform a Miller-Rabin
-probabilistic primality test with B<checks> iterations. If
-B<checks == BN_prime_checks>, a number of iterations is used that
+Both BN_is_prime_ex() and BN_is_prime_fasttest_ex() perform a Miller-Rabin
+probabilistic primality test with B<nchecks> iterations. If
+B<nchecks == BN_prime_checks>, a number of iterations is used that
yields a false positive rate of at most 2^-80 for random input.
-If B<callback> is not B<NULL>, B<callback(1, j, cb_arg)> is called
+If B<cb> is not B<NULL>, B<BN_GENCB_call(cb, 1, j)> is called
after the j-th iteration (j = 0, 1, ...). B<ctx> is a
pre-allocated B<BN_CTX> (to save the overhead of allocating and
freeing the structure in a loop), or B<NULL>.
+BN_GENCB_call calls the callback function held in the B<BN_GENCB> structure
+and passes the ints B<a> and B<b> as arguments. There are two types of
+B<BN_GENCB> structure that are supported: "new" style and "old" style. New
+programs should prefer the "new" style, whilst the "old" style is provided
+for backwards compatibility purposes.
+
+For "new" style callbacks a BN_GENCB structure should be initialised with a
+call to BN_GENCB_set, where B<gencb> is a B<BN_GENCB *>, B<callback> is of
+type B<int (*callback)(int, int, BN_GENCB *)> and B<cb_arg> is a B<void *>.
+"Old" style callbacks are the same except they are initialised with a call
+to BN_GENCB_set_old and B<callback> is of type
+B<void (*callback)(int, int, void *)>.
+
+A callback is invoked through a call to B<BN_GENCB_call>. This will check
+the type of the callback and will invoke B<callback(a, b, gencb)> for new
+style callbacks or B<callback(a, b, cb_arg)> for old style.
+
+BN_generate_prime (deprecated) works in the same way as
+BN_generate_prime_ex but expects an old style callback function
+directly in the B<callback> parameter, and an argument to pass to it in
+the B<cb_arg>. Similarly BN_is_prime and BN_is_prime_fasttest are
+deprecated and can be compared to BN_is_prime_ex and
+BN_is_prime_fasttest_ex respectively.
+
=head1 RETURN VALUES
-BN_generate_prime() returns the prime number on success, B<NULL> otherwise.
+BN_generate_prime_ex() return 1 on success or 0 on error.
-BN_is_prime() returns 0 if the number is composite, 1 if it is
-prime with an error probability of less than 0.25^B<checks>, and
+BN_is_prime_ex(), BN_is_prime_fasttest_ex(), BN_is_prime() and
+BN_is_prime_fasttest() return 0 if the number is composite, 1 if it is
+prime with an error probability of less than 0.25^B<nchecks>, and
-1 on error.
+BN_generate_prime() returns the prime number on success, B<NULL> otherwise.
+
+Callback functions should return 1 on success or 0 on error.
+
The error codes can be obtained by L<ERR_get_error(3)|ERR_get_error(3)>.
=head1 SEE ALSO
diff --git a/crypto/openssl/doc/crypto/BN_rand.pod b/crypto/openssl/doc/crypto/BN_rand.pod
index 3b2796c..bd6bc86 100644
--- a/crypto/openssl/doc/crypto/BN_rand.pod
+++ b/crypto/openssl/doc/crypto/BN_rand.pod
@@ -2,7 +2,7 @@
=head1 NAME
-BN_rand, BN_pseudo_rand - generate pseudo-random number
+BN_rand, BN_pseudo_rand, BN_rand_range, BN_pseudo_rand_range - generate pseudo-random number
=head1 SYNOPSIS
diff --git a/crypto/openssl/doc/crypto/CMS_add0_cert.pod b/crypto/openssl/doc/crypto/CMS_add0_cert.pod
index 9c13f48..8678ca1 100644
--- a/crypto/openssl/doc/crypto/CMS_add0_cert.pod
+++ b/crypto/openssl/doc/crypto/CMS_add0_cert.pod
@@ -2,7 +2,7 @@
=head1 NAME
- CMS_add0_cert, CMS_add1_cert, CMS_get1_certs, CMS_add0_crl, CMS_get1_crls, - CMS certificate and CRL utility functions
+CMS_add0_cert, CMS_add1_cert, CMS_get1_certs, CMS_add0_crl, CMS_add1_crl, CMS_get1_crls, - CMS certificate and CRL utility functions
=head1 SYNOPSIS
diff --git a/crypto/openssl/doc/crypto/CMS_get0_RecipientInfos.pod b/crypto/openssl/doc/crypto/CMS_get0_RecipientInfos.pod
index e035542..fe49772 100644
--- a/crypto/openssl/doc/crypto/CMS_get0_RecipientInfos.pod
+++ b/crypto/openssl/doc/crypto/CMS_get0_RecipientInfos.pod
@@ -2,7 +2,7 @@
=head1 NAME
- CMS_get0_RecipientInfos, CMS_RecipientInfo_type, CMS_RecipientInfo_ktri_get0_signer_id,CMS_RecipientInfo_ktri_cert_cmp, CMS_RecipientInfo_set0_pkey, CMS_RecipientInfo_kekri_get0_id, CMS_RecipientInfo_kekri_id_cmp, CMS_RecipientInfo_set0_key, CMS_RecipientInfo_decrypt - CMS envelopedData RecipientInfo routines
+CMS_get0_RecipientInfos, CMS_RecipientInfo_type, CMS_RecipientInfo_ktri_get0_signer_id,CMS_RecipientInfo_ktri_cert_cmp, CMS_RecipientInfo_set0_pkey, CMS_RecipientInfo_kekri_get0_id, CMS_RecipientInfo_kekri_id_cmp, CMS_RecipientInfo_set0_key, CMS_RecipientInfo_decrypt, CMS_RecipientInfo_encrypt - CMS envelopedData RecipientInfo routines
=head1 SYNOPSIS
@@ -20,6 +20,7 @@
int CMS_RecipientInfo_set0_key(CMS_RecipientInfo *ri, unsigned char *key, size_t keylen);
int CMS_RecipientInfo_decrypt(CMS_ContentInfo *cms, CMS_RecipientInfo *ri);
+ int CMS_RecipientInfo_encrypt(CMS_ContentInfo *cms, CMS_RecipientInfo *ri);
=head1 DESCRIPTION
@@ -66,6 +67,11 @@ CMS_RecipientInfo_decrypt() attempts to decrypt CMS_RecipientInfo structure
B<ri> in structure B<cms>. A key must have been associated with the structure
first.
+CMS_RecipientInfo_encrypt() attempts to encrypt CMS_RecipientInfo structure
+B<ri> in structure B<cms>. A key must have been associated with the structure
+first and the content encryption key must be available: for example by a
+previous call to CMS_RecipientInfo_decrypt().
+
=head1 NOTES
The main purpose of these functions is to enable an application to lookup
@@ -81,6 +87,13 @@ any appropriate means it can then associated with the structure and
CMS_RecpientInfo_decrypt() called. If successful CMS_decrypt() can be called
with a NULL key to decrypt the enveloped content.
+The CMS_RecipientInfo_encrypt() can be used to add a new recipient to an
+existing enveloped data structure. Typically an application will first decrypt
+an appropriate CMS_RecipientInfo structure to make the content encrypt key
+available, it will then add a new recipient using a function such as
+CMS_add1_recipient_cert() and finally encrypt the content encryption key
+using CMS_RecipientInfo_encrypt().
+
=head1 RETURN VALUES
CMS_get0_RecipientInfos() returns all CMS_RecipientInfo structures, or NULL if
@@ -89,6 +102,7 @@ an error occurs.
CMS_RecipientInfo_ktri_get0_signer_id(), CMS_RecipientInfo_set0_pkey(),
CMS_RecipientInfo_kekri_get0_id(), CMS_RecipientInfo_set0_key() and
CMS_RecipientInfo_decrypt() return 1 for success or 0 if an error occurs.
+CMS_RecipientInfo_encrypt() return 1 for success or 0 if an error occurs.
CMS_RecipientInfo_ktri_cert_cmp() and CMS_RecipientInfo_kekri_cmp() return 0
for a successful comparison and non zero otherwise.
diff --git a/crypto/openssl/doc/crypto/CMS_get0_SignerInfos.pod b/crypto/openssl/doc/crypto/CMS_get0_SignerInfos.pod
index 47f6d2a..b46c0e07 100644
--- a/crypto/openssl/doc/crypto/CMS_get0_SignerInfos.pod
+++ b/crypto/openssl/doc/crypto/CMS_get0_SignerInfos.pod
@@ -2,7 +2,7 @@
=head1 NAME
- CMS_get0_SignerInfos, CMS_SignerInfo_get0_signer_id, CMS_SignerInfo_cert_cmp, CMS_set1_signer_certs - CMS signedData signer functions.
+CMS_get0_SignerInfos, CMS_SignerInfo_get0_signer_id, CMS_SignerInfo_get0_signature, CMS_SignerInfo_cert_cmp, CMS_set1_signer_cert - CMS signedData signer functions.
=head1 SYNOPSIS
@@ -11,6 +11,7 @@
STACK_OF(CMS_SignerInfo) *CMS_get0_SignerInfos(CMS_ContentInfo *cms);
int CMS_SignerInfo_get0_signer_id(CMS_SignerInfo *si, ASN1_OCTET_STRING **keyid, X509_NAME **issuer, ASN1_INTEGER **sno);
+ ASN1_OCTET_STRING *CMS_SignerInfo_get0_signature(CMS_SignerInfo *si);
int CMS_SignerInfo_cert_cmp(CMS_SignerInfo *si, X509 *cert);
void CMS_SignerInfo_set1_signer_cert(CMS_SignerInfo *si, X509 *signer);
@@ -24,6 +25,11 @@ associated with a specific CMS_SignerInfo structure B<si>. Either the
keyidentifier will be set in B<keyid> or B<both> issuer name and serial number
in B<issuer> and B<sno>.
+CMS_SignerInfo_get0_signature() retrieves the signature associated with
+B<si> in a pointer to an ASN1_OCTET_STRING structure. This pointer returned
+corresponds to the internal signature value if B<si> so it may be read or
+modified.
+
CMS_SignerInfo_cert_cmp() compares the certificate B<cert> against the signer
identifier B<si>. It returns zero if the comparison is successful and non zero
if not.
diff --git a/crypto/openssl/doc/crypto/CMS_verify.pod b/crypto/openssl/doc/crypto/CMS_verify.pod
index 8f26fda..7a2c1ee 100644
--- a/crypto/openssl/doc/crypto/CMS_verify.pod
+++ b/crypto/openssl/doc/crypto/CMS_verify.pod
@@ -2,7 +2,7 @@
=head1 NAME
- CMS_verify - verify a CMS SignedData structure
+CMS_verify, CMS_get0_signers - verify a CMS SignedData structure
=head1 SYNOPSIS
diff --git a/crypto/openssl/doc/crypto/DH_generate_parameters.pod b/crypto/openssl/doc/crypto/DH_generate_parameters.pod
index 9081e9e..7f81a04 100644
--- a/crypto/openssl/doc/crypto/DH_generate_parameters.pod
+++ b/crypto/openssl/doc/crypto/DH_generate_parameters.pod
@@ -2,32 +2,39 @@
=head1 NAME
-DH_generate_parameters, DH_check - generate and check Diffie-Hellman parameters
+
+DH_generate_parameters_ex, DH_generate_parameters,
+DH_check - generate and check Diffie-Hellman parameters
=head1 SYNOPSIS
#include <openssl/dh.h>
- DH *DH_generate_parameters(int prime_len, int generator,
- void (*callback)(int, int, void *), void *cb_arg);
+ int DH_generate_parameters_ex(DH *dh, int prime_len,int generator, BN_GENCB *cb);
int DH_check(DH *dh, int *codes);
+Deprecated:
+
+ DH *DH_generate_parameters(int prime_len, int generator,
+ void (*callback)(int, int, void *), void *cb_arg);
+
=head1 DESCRIPTION
-DH_generate_parameters() generates Diffie-Hellman parameters that can
-be shared among a group of users, and returns them in a newly
-allocated B<DH> structure. The pseudo-random number generator must be
+DH_generate_parameters_ex() generates Diffie-Hellman parameters that can
+be shared among a group of users, and stores them in the provided B<DH>
+structure. The pseudo-random number generator must be
seeded prior to calling DH_generate_parameters().
B<prime_len> is the length in bits of the safe prime to be generated.
B<generator> is a small number E<gt> 1, typically 2 or 5.
A callback function may be used to provide feedback about the progress
-of the key generation. If B<callback> is not B<NULL>, it will be
+of the key generation. If B<cb> is not B<NULL>, it will be
called as described in L<BN_generate_prime(3)|BN_generate_prime(3)> while a random prime
-number is generated, and when a prime has been found, B<callback(3,
-0, cb_arg)> is called.
+number is generated, and when a prime has been found, B<BN_GENCB_call(cb, 3, 0)>
+is called. See L<BN_generate_prime(3)|BN_generate_prime(3)> for information on
+the BN_GENCB_call() function.
DH_check() validates Diffie-Hellman parameters. It checks that B<p> is
a safe prime, and that B<g> is a suitable generator. In the case of an
@@ -38,19 +45,21 @@ checked, i.e. it does not equal 2 or 5.
=head1 RETURN VALUES
-DH_generate_parameters() returns a pointer to the DH structure, or
-NULL if the parameter generation fails. The error codes can be
-obtained by L<ERR_get_error(3)|ERR_get_error(3)>.
+DH_generate_parameters_ex() and DH_check() return 1 if the check could be
+performed, 0 otherwise.
+
+DH_generate_parameters() (deprecated) returns a pointer to the DH structure, or
+NULL if the parameter generation fails.
-DH_check() returns 1 if the check could be performed, 0 otherwise.
+The error codes can be obtained by L<ERR_get_error(3)|ERR_get_error(3)>.
=head1 NOTES
-DH_generate_parameters() may run for several hours before finding a
-suitable prime.
+DH_generate_parameters_ex() and DH_generate_parameters() may run for several
+hours before finding a suitable prime.
-The parameters generated by DH_generate_parameters() are not to be
-used in signature schemes.
+The parameters generated by DH_generate_parameters_ex() and DH_generate_parameters()
+are not to be used in signature schemes.
=head1 BUGS
diff --git a/crypto/openssl/doc/crypto/DSA_generate_parameters.pod b/crypto/openssl/doc/crypto/DSA_generate_parameters.pod
index be7c924..16a67f2 100644
--- a/crypto/openssl/doc/crypto/DSA_generate_parameters.pod
+++ b/crypto/openssl/doc/crypto/DSA_generate_parameters.pod
@@ -2,20 +2,26 @@
=head1 NAME
-DSA_generate_parameters - generate DSA parameters
+DSA_generate_parameters_ex, DSA_generate_parameters - generate DSA parameters
=head1 SYNOPSIS
#include <openssl/dsa.h>
+ int DSA_generate_parameters_ex(DSA *dsa, int bits,
+ const unsigned char *seed,int seed_len,
+ int *counter_ret, unsigned long *h_ret, BN_GENCB *cb);
+
+Deprecated:
+
DSA *DSA_generate_parameters(int bits, unsigned char *seed,
int seed_len, int *counter_ret, unsigned long *h_ret,
void (*callback)(int, int, void *), void *cb_arg);
=head1 DESCRIPTION
-DSA_generate_parameters() generates primes p and q and a generator g
-for use in the DSA.
+DSA_generate_parameters_ex() generates primes p and q and a generator g
+for use in the DSA and stores the result in B<dsa>.
B<bits> is the length of the prime to be generated; the DSS allows a
maximum of 1024 bits.
@@ -25,64 +31,74 @@ generated at random. Otherwise, the seed is used to generate
them. If the given seed does not yield a prime q, a new random
seed is chosen and placed at B<seed>.
-DSA_generate_parameters() places the iteration count in
+DSA_generate_parameters_ex() places the iteration count in
*B<counter_ret> and a counter used for finding a generator in
*B<h_ret>, unless these are B<NULL>.
A callback function may be used to provide feedback about the progress
-of the key generation. If B<callback> is not B<NULL>, it will be
-called as follows:
+of the key generation. If B<cb> is not B<NULL>, it will be
+called as shown below. For information on the BN_GENCB structure and the
+BN_GENCB_call function discussed below, refer to
+L<BN_generate_prime(3)|BN_generate_prime(3)>.
=over 4
=item *
-When a candidate for q is generated, B<callback(0, m++, cb_arg)> is called
+When a candidate for q is generated, B<BN_GENCB_call(cb, 0, m++)> is called
(m is 0 for the first candidate).
=item *
When a candidate for q has passed a test by trial division,
-B<callback(1, -1, cb_arg)> is called.
+B<BN_GENCB_call(cb, 1, -1)> is called.
While a candidate for q is tested by Miller-Rabin primality tests,
-B<callback(1, i, cb_arg)> is called in the outer loop
+B<BN_GENCB_call(cb, 1, i)> is called in the outer loop
(once for each witness that confirms that the candidate may be prime);
i is the loop counter (starting at 0).
=item *
-When a prime q has been found, B<callback(2, 0, cb_arg)> and
-B<callback(3, 0, cb_arg)> are called.
+When a prime q has been found, B<BN_GENCB_call(cb, 2, 0)> and
+B<BN_GENCB_call(cb, 3, 0)> are called.
=item *
Before a candidate for p (other than the first) is generated and tested,
-B<callback(0, counter, cb_arg)> is called.
+B<BN_GENCB_call(cb, 0, counter)> is called.
=item *
When a candidate for p has passed the test by trial division,
-B<callback(1, -1, cb_arg)> is called.
+B<BN_GENCB_call(cb, 1, -1)> is called.
While it is tested by the Miller-Rabin primality test,
-B<callback(1, i, cb_arg)> is called in the outer loop
+B<BN_GENCB_call(cb, 1, i)> is called in the outer loop
(once for each witness that confirms that the candidate may be prime).
i is the loop counter (starting at 0).
=item *
-When p has been found, B<callback(2, 1, cb_arg)> is called.
+When p has been found, B<BN_GENCB_call(cb, 2, 1)> is called.
=item *
-When the generator has been found, B<callback(3, 1, cb_arg)> is called.
+When the generator has been found, B<BN_GENCB_call(cb, 3, 1)> is called.
=back
+DSA_generate_parameters() (deprecated) works in much the same way as for DSA_generate_parameters_ex, except that no B<dsa> parameter is passed and
+instead a newly allocated B<DSA> structure is returned. Additionally "old
+style" callbacks are used instead of the newer BN_GENCB based approach.
+Refer to L<BN_generate_prime(3)|BN_generate_prime(3)> for further information.
+
=head1 RETURN VALUE
+DSA_generate_parameters_ex() returns a 1 on success, or 0 otherwise.
+
DSA_generate_parameters() returns a pointer to the DSA structure, or
-B<NULL> if the parameter generation fails. The error codes can be
-obtained by L<ERR_get_error(3)|ERR_get_error(3)>.
+B<NULL> if the parameter generation fails.
+
+The error codes can be obtained by L<ERR_get_error(3)|ERR_get_error(3)>.
=head1 BUGS
@@ -91,7 +107,7 @@ Seed lengths E<gt> 20 are not supported.
=head1 SEE ALSO
L<dsa(3)|dsa(3)>, L<ERR_get_error(3)|ERR_get_error(3)>, L<rand(3)|rand(3)>,
-L<DSA_free(3)|DSA_free(3)>
+L<DSA_free(3)|DSA_free(3)>, L<BN_generate_prime(3)|BN_generate_prime(3)>
=head1 HISTORY
diff --git a/crypto/openssl/doc/crypto/EC_GFp_simple_method.pod b/crypto/openssl/doc/crypto/EC_GFp_simple_method.pod
new file mode 100644
index 0000000..aff20ac
--- /dev/null
+++ b/crypto/openssl/doc/crypto/EC_GFp_simple_method.pod
@@ -0,0 +1,60 @@
+=pod
+
+=head1 NAME
+
+EC_GFp_simple_method, EC_GFp_mont_method, EC_GFp_nist_method, EC_GFp_nistp224_method, EC_GFp_nistp256_method, EC_GFp_nistp521_method, EC_GF2m_simple_method, EC_METHOD_get_field_type - Functions for obtaining B<EC_METHOD> objects.
+
+=head1 SYNOPSIS
+
+ #include <openssl/ec.h>
+
+ const EC_METHOD *EC_GFp_simple_method(void);
+ const EC_METHOD *EC_GFp_mont_method(void);
+ const EC_METHOD *EC_GFp_nist_method(void);
+ const EC_METHOD *EC_GFp_nistp224_method(void);
+ const EC_METHOD *EC_GFp_nistp256_method(void);
+ const EC_METHOD *EC_GFp_nistp521_method(void);
+
+ const EC_METHOD *EC_GF2m_simple_method(void);
+
+ int EC_METHOD_get_field_type(const EC_METHOD *meth);
+
+=head1 DESCRIPTION
+
+The Elliptic Curve library provides a number of different implementations through a single common interface.
+When constructing a curve using EC_GROUP_new (see L<EC_GROUP_new(3)|EC_GROUP_new(3)>) an
+implementation method must be provided. The functions described here all return a const pointer to an
+B<EC_METHOD> structure that can be passed to EC_GROUP_NEW. It is important that the correct implementation
+type for the form of curve selected is used.
+
+For F2^m curves there is only one implementation choice, i.e. EC_GF2_simple_method.
+
+For Fp curves the lowest common denominator implementation is the EC_GFp_simple_method implementation. All
+other implementations are based on this one. EC_GFp_mont_method builds on EC_GFp_simple_method but adds the
+use of montgomery multiplication (see L<BN_mod_mul_montgomery(3)|BN_mod_mul_montgomery(3)>). EC_GFp_nist_method
+offers an implementation optimised for use with NIST recommended curves (NIST curves are available through
+EC_GROUP_new_by_curve_name as described in L<EC_GROUP_new(3)|EC_GROUP_new(3)>).
+
+The functions EC_GFp_nistp224_method, EC_GFp_nistp256_method and EC_GFp_nistp521_method offer 64 bit
+optimised implementations for the NIST P224, P256 and P521 curves respectively. Note, however, that these
+implementations are not available on all platforms.
+
+EC_METHOD_get_field_type identifies what type of field the EC_METHOD structure supports, which will be either
+F2^m or Fp. If the field type is Fp then the value B<NID_X9_62_prime_field> is returned. If the field type is
+F2^m then the value B<NID_X9_62_characteristic_two_field> is returned. These values are defined in the
+obj_mac.h header file.
+
+=head1 RETURN VALUES
+
+All EC_GFp* functions and EC_GF2m_simple_method always return a const pointer to an EC_METHOD structure.
+
+EC_METHOD_get_field_type returns an integer that identifies the type of field the EC_METHOD structure supports.
+
+=head1 SEE ALSO
+
+L<crypto(3)|crypto(3)>, L<ec(3)|ec(3)>, L<EC_GROUP_new(3)|EC_GROUP_new(3)>, L<EC_GROUP_copy(3)|EC_GROUP_copy(3)>,
+L<EC_POINT_new(3)|EC_POINT_new(3)>, L<EC_POINT_add(3)|EC_POINT_add(3)>, L<EC_KEY_new(3)|EC_KEY_new(3)>,
+L<d2i_ECPKParameters(3)|d2i_ECPKParameters(3)>,
+L<BN_mod_mul_montgomery(3)|BN_mod_mul_montgomery(3)>
+
+=cut
diff --git a/crypto/openssl/doc/crypto/EC_GROUP_copy.pod b/crypto/openssl/doc/crypto/EC_GROUP_copy.pod
new file mode 100644
index 0000000..49dc01c
--- /dev/null
+++ b/crypto/openssl/doc/crypto/EC_GROUP_copy.pod
@@ -0,0 +1,174 @@
+=pod
+
+=head1 NAME
+
+EC_GROUP_copy, EC_GROUP_dup, EC_GROUP_method_of, EC_GROUP_set_generator, EC_GROUP_get0_generator, EC_GROUP_get_order, EC_GROUP_get_cofactor, EC_GROUP_set_curve_name, EC_GROUP_get_curve_name, EC_GROUP_set_asn1_flag, EC_GROUP_get_asn1_flag, EC_GROUP_set_point_conversion_form, EC_GROUP_get_point_conversion_form, EC_GROUP_get0_seed, EC_GROUP_get_seed_len, EC_GROUP_set_seed, EC_GROUP_get_degree, EC_GROUP_check, EC_GROUP_check_discriminant, EC_GROUP_cmp, EC_GROUP_get_basis_type, EC_GROUP_get_trinomial_basis, EC_GROUP_get_pentanomial_basis - Functions for manipulating B<EC_GROUP> objects.
+
+=head1 SYNOPSIS
+
+ #include <openssl/ec.h>
+ #include <openssl/bn.h>
+
+ int EC_GROUP_copy(EC_GROUP *dst, const EC_GROUP *src);
+ EC_GROUP *EC_GROUP_dup(const EC_GROUP *src);
+
+ const EC_METHOD *EC_GROUP_method_of(const EC_GROUP *group);
+
+ int EC_GROUP_set_generator(EC_GROUP *group, const EC_POINT *generator, const BIGNUM *order, const BIGNUM *cofactor);
+ const EC_POINT *EC_GROUP_get0_generator(const EC_GROUP *group);
+
+ int EC_GROUP_get_order(const EC_GROUP *group, BIGNUM *order, BN_CTX *ctx);
+ int EC_GROUP_get_cofactor(const EC_GROUP *group, BIGNUM *cofactor, BN_CTX *ctx);
+
+ void EC_GROUP_set_curve_name(EC_GROUP *group, int nid);
+ int EC_GROUP_get_curve_name(const EC_GROUP *group);
+
+ void EC_GROUP_set_asn1_flag(EC_GROUP *group, int flag);
+ int EC_GROUP_get_asn1_flag(const EC_GROUP *group);
+
+ void EC_GROUP_set_point_conversion_form(EC_GROUP *group, point_conversion_form_t form);
+ point_conversion_form_t EC_GROUP_get_point_conversion_form(const EC_GROUP *);
+
+ unsigned char *EC_GROUP_get0_seed(const EC_GROUP *x);
+ size_t EC_GROUP_get_seed_len(const EC_GROUP *);
+ size_t EC_GROUP_set_seed(EC_GROUP *, const unsigned char *, size_t len);
+
+ int EC_GROUP_get_degree(const EC_GROUP *group);
+
+ int EC_GROUP_check(const EC_GROUP *group, BN_CTX *ctx);
+
+ int EC_GROUP_check_discriminant(const EC_GROUP *group, BN_CTX *ctx);
+
+ int EC_GROUP_cmp(const EC_GROUP *a, const EC_GROUP *b, BN_CTX *ctx);
+
+ int EC_GROUP_get_basis_type(const EC_GROUP *);
+ int EC_GROUP_get_trinomial_basis(const EC_GROUP *, unsigned int *k);
+ int EC_GROUP_get_pentanomial_basis(const EC_GROUP *, unsigned int *k1,
+ unsigned int *k2, unsigned int *k3);
+
+=head1 DESCRIPTION
+
+EC_GROUP_copy copies the curve B<src> into B<dst>. Both B<src> and B<dst> must use the same EC_METHOD.
+
+EC_GROUP_dup creates a new EC_GROUP object and copies the content from B<src> to the newly created
+EC_GROUP object.
+
+EC_GROUP_method_of obtains the EC_METHOD of B<group>.
+
+EC_GROUP_set_generator sets curve paramaters that must be agreed by all participants using the curve. These
+paramaters include the B<generator>, the B<order> and the B<cofactor>. The B<generator> is a well defined point on the
+curve chosen for cryptographic operations. Integers used for point multiplications will be between 0 and
+n-1 where n is the B<order>. The B<order> multipied by the B<cofactor> gives the number of points on the curve.
+
+EC_GROUP_get0_generator returns the generator for the identified B<group>.
+
+The functions EC_GROUP_get_order and EC_GROUP_get_cofactor populate the provided B<order> and B<cofactor> parameters
+with the respective order and cofactors for the B<group>.
+
+The functions EC_GROUP_set_curve_name and EC_GROUP_get_curve_name, set and get the NID for the curve respectively
+(see L<EC_GROUP_new(3)|EC_GROUP_new(3)>). If a curve does not have a NID associated with it, then EC_GROUP_get_curve_name
+will return 0.
+
+The asn1_flag value on a curve is used to determine whether there is a specific ASN1 OID to describe the curve or not.
+If the asn1_flag is 1 then this is a named curve with an associated ASN1 OID. If not then asn1_flag is 0. The functions
+EC_GROUP_get_asn1_flag and EC_GROUP_set_asn1_flag get and set the status of the asn1_flag for the curve. If set then
+the curve_name must also be set.
+
+The point_coversion_form for a curve controls how EC_POINT data is encoded as ASN1 as defined in X9.62 (ECDSA).
+point_conversion_form_t is an enum defined as follows:
+
+ typedef enum {
+ /** the point is encoded as z||x, where the octet z specifies
+ * which solution of the quadratic equation y is */
+ POINT_CONVERSION_COMPRESSED = 2,
+ /** the point is encoded as z||x||y, where z is the octet 0x02 */
+ POINT_CONVERSION_UNCOMPRESSED = 4,
+ /** the point is encoded as z||x||y, where the octet z specifies
+ * which solution of the quadratic equation y is */
+ POINT_CONVERSION_HYBRID = 6
+ } point_conversion_form_t;
+
+
+For POINT_CONVERSION_UNCOMPRESSED the point is encoded as an octet signifying the UNCOMPRESSED form has been used followed by
+the octets for x, followed by the octets for y.
+
+For any given x co-ordinate for a point on a curve it is possible to derive two possible y values. For
+POINT_CONVERSION_COMPRESSED the point is encoded as an octet signifying that the COMPRESSED form has been used AND which of
+the two possible solutions for y has been used, followed by the octets for x.
+
+For POINT_CONVERSION_HYBRID the point is encoded as an octet signifying the HYBRID form has been used AND which of the two
+possible solutions for y has been used, followed by the octets for x, followed by the octets for y.
+
+The functions EC_GROUP_set_point_conversion_form and EC_GROUP_get_point_conversion_form set and get the point_conversion_form
+for the curve respectively.
+
+ANSI X9.62 (ECDSA standard) defines a method of generating the curve parameter b from a random number. This provides advantages
+in that a parameter obtained in this way is highly unlikely to be susceptible to special purpose attacks, or have any trapdoors in it.
+If the seed is present for a curve then the b parameter was generated in a verifiable fashion using that seed. The OpenSSL EC library
+does not use this seed value but does enable you to inspect it using EC_GROUP_get0_seed. This returns a pointer to a memory block
+containing the seed that was used. The length of the memory block can be obtained using EC_GROUP_get_seed_len. A number of the
+builtin curves within the library provide seed values that can be obtained. It is also possible to set a custom seed using
+EC_GROUP_set_seed and passing a pointer to a memory block, along with the length of the seed. Again, the EC library will not use
+this seed value, although it will be preserved in any ASN1 based communications.
+
+EC_GROUP_get_degree gets the degree of the field. For Fp fields this will be the number of bits in p. For F2^m fields this will be
+the value m.
+
+The function EC_GROUP_check_discriminant calculates the discriminant for the curve and verifies that it is valid.
+For a curve defined over Fp the discriminant is given by the formula 4*a^3 + 27*b^2 whilst for F2^m curves the discriminant is
+simply b. In either case for the curve to be valid the discriminant must be non zero.
+
+The function EC_GROUP_check performs a number of checks on a curve to verify that it is valid. Checks performed include
+verifying that the discriminant is non zero; that a generator has been defined; that the generator is on the curve and has
+the correct order.
+
+EC_GROUP_cmp compares B<a> and B<b> to determine whether they represent the same curve or not.
+
+The functions EC_GROUP_get_basis_type, EC_GROUP_get_trinomial_basis and EC_GROUP_get_pentanomial_basis should only be called for curves
+defined over an F2^m field. Addition and multiplication operations within an F2^m field are performed using an irreducible polynomial
+function f(x). This function is either a trinomial of the form:
+
+f(x) = x^m + x^k + 1 with m > k >= 1
+
+or a pentanomial of the form:
+
+f(x) = x^m + x^k3 + x^k2 + x^k1 + 1 with m > k3 > k2 > k1 >= 1
+
+The function EC_GROUP_get_basis_type returns a NID identifying whether a trinomial or pentanomial is in use for the field. The
+function EC_GROUP_get_trinomial_basis must only be called where f(x) is of the trinomial form, and returns the value of B<k>. Similary
+the function EC_GROUP_get_pentanomial_basis must only be called where f(x) is of the pentanomial form, and returns the values of B<k1>,
+B<k2> and B<k3> respectively.
+
+=head1 RETURN VALUES
+
+The following functions return 1 on success or 0 on error: EC_GROUP_copy, EC_GROUP_set_generator, EC_GROUP_check,
+EC_GROUP_check_discriminant, EC_GROUP_get_trinomial_basis and EC_GROUP_get_pentanomial_basis.
+
+EC_GROUP_dup returns a pointer to the duplicated curve, or NULL on error.
+
+EC_GROUP_method_of returns the EC_METHOD implementation in use for the given curve or NULL on error.
+
+EC_GROUP_get0_generator returns the generator for the given curve or NULL on error.
+
+EC_GROUP_get_order, EC_GROUP_get_cofactor, EC_GROUP_get_curve_name, EC_GROUP_get_asn1_flag, EC_GROUP_get_point_conversion_form
+and EC_GROUP_get_degree return the order, cofactor, curve name (NID), ASN1 flag, point_conversion_form and degree for the
+specified curve respectively. If there is no curve name associated with a curve then EC_GROUP_get_curve_name will return 0.
+
+EC_GROUP_get0_seed returns a pointer to the seed that was used to generate the parameter b, or NULL if the seed is not
+specified. EC_GROUP_get_seed_len returns the length of the seed or 0 if the seed is not specified.
+
+EC_GROUP_set_seed returns the length of the seed that has been set. If the supplied seed is NULL, or the supplied seed length is
+0, the return value will be 1. On error 0 is returned.
+
+EC_GROUP_cmp returns 0 if the curves are equal, 1 if they are not equal, or -1 on error.
+
+EC_GROUP_get_basis_type returns the values NID_X9_62_tpBasis or NID_X9_62_ppBasis (as defined in <openssl/obj_mac.h>) for a
+trinomial or pentanomial respectively. Alternatively in the event of an error a 0 is returned.
+
+=head1 SEE ALSO
+
+L<crypto(3)|crypto(3)>, L<ec(3)|ec(3)>, L<EC_GROUP_new(3)|EC_GROUP_new(3)>,
+L<EC_POINT_new(3)|EC_POINT_new(3)>, L<EC_POINT_add(3)|EC_POINT_add(3)>, L<EC_KEY_new(3)|EC_KEY_new(3)>,
+L<EC_GFp_simple_method(3)|EC_GFp_simple_method(3)>, L<d2i_ECPKParameters(3)|d2i_ECPKParameters(3)>
+
+=cut
diff --git a/crypto/openssl/doc/crypto/EC_GROUP_new.pod b/crypto/openssl/doc/crypto/EC_GROUP_new.pod
new file mode 100644
index 0000000..ff55bf3
--- /dev/null
+++ b/crypto/openssl/doc/crypto/EC_GROUP_new.pod
@@ -0,0 +1,95 @@
+=pod
+
+=head1 NAME
+
+EC_GROUP_new, EC_GROUP_free, EC_GROUP_clear_free, EC_GROUP_new_curve_GFp, EC_GROUP_new_curve_GF2m, EC_GROUP_new_by_curve_name, EC_GROUP_set_curve_GFp, EC_GROUP_get_curve_GFp, EC_GROUP_set_curve_GF2m, EC_GROUP_get_curve_GF2m, EC_get_builtin_curves - Functions for creating and destroying B<EC_GROUP> objects.
+
+=head1 SYNOPSIS
+
+ #include <openssl/ec.h>
+ #include <openssl/bn.h>
+
+ EC_GROUP *EC_GROUP_new(const EC_METHOD *meth);
+ void EC_GROUP_free(EC_GROUP *group);
+ void EC_GROUP_clear_free(EC_GROUP *group);
+
+ EC_GROUP *EC_GROUP_new_curve_GFp(const BIGNUM *p, const BIGNUM *a, const BIGNUM *b, BN_CTX *ctx);
+ EC_GROUP *EC_GROUP_new_curve_GF2m(const BIGNUM *p, const BIGNUM *a, const BIGNUM *b, BN_CTX *ctx);
+ EC_GROUP *EC_GROUP_new_by_curve_name(int nid);
+
+ int EC_GROUP_set_curve_GFp(EC_GROUP *group, const BIGNUM *p, const BIGNUM *a, const BIGNUM *b, BN_CTX *ctx);
+ int EC_GROUP_get_curve_GFp(const EC_GROUP *group, BIGNUM *p, BIGNUM *a, BIGNUM *b, BN_CTX *ctx);
+ int EC_GROUP_set_curve_GF2m(EC_GROUP *group, const BIGNUM *p, const BIGNUM *a, const BIGNUM *b, BN_CTX *ctx);
+ int EC_GROUP_get_curve_GF2m(const EC_GROUP *group, BIGNUM *p, BIGNUM *a, BIGNUM *b, BN_CTX *ctx);
+
+ size_t EC_get_builtin_curves(EC_builtin_curve *r, size_t nitems);
+
+=head1 DESCRIPTION
+
+Within the library there are two forms of elliptic curve that are of interest. The first form is those defined over the
+prime field Fp. The elements of Fp are the integers 0 to p-1, where p is a prime number. This gives us a revised
+elliptic curve equation as follows:
+
+y^2 mod p = x^3 +ax + b mod p
+
+The second form is those defined over a binary field F2^m where the elements of the field are integers of length at
+most m bits. For this form the elliptic curve equation is modified to:
+
+y^2 + xy = x^3 + ax^2 + b (where b != 0)
+
+Operations in a binary field are performed relative to an B<irreducible polynomial>. All such curves with OpenSSL
+use a trinomial or a pentanomial for this parameter.
+
+A new curve can be constructed by calling EC_GROUP_new, using the implementation provided by B<meth> (see
+L<EC_GFp_simple_method(3)|EC_GFp_simple_method(3)>). It is then necessary to call either EC_GROUP_set_curve_GFp or
+EC_GROUP_set_curve_GF2m as appropriate to create a curve defined over Fp or over F2^m respectively.
+
+EC_GROUP_set_curve_GFp sets the curve parameters B<p>, B<a> and B<b> for a curve over Fp stored in B<group>.
+EC_group_get_curve_GFp obtains the previously set curve parameters.
+
+EC_GROUP_set_curve_GF2m sets the equivalent curve parameters for a curve over F2^m. In this case B<p> represents
+the irreducible polybnomial - each bit represents a term in the polynomial. Therefore there will either be three
+or five bits set dependant on whether the polynomial is a trinomial or a pentanomial.
+EC_group_get_curve_GF2m obtains the previously set curve parameters.
+
+The functions EC_GROUP_new_curve_GFp and EC_GROUP_new_curve_GF2m are shortcuts for calling EC_GROUP_new and the
+appropriate EC_group_set_curve function. An appropriate default implementation method will be used.
+
+Whilst the library can be used to create any curve using the functions described above, there are also a number of
+predefined curves that are available. In order to obtain a list of all of the predefined curves, call the function
+EC_get_builtin_curves. The parameter B<r> should be an array of EC_builtin_curve structures of size B<nitems>. The function
+will populate the B<r> array with information about the builtin curves. If B<nitems> is less than the total number of
+curves available, then the first B<nitems> curves will be returned. Otherwise the total number of curves will be
+provided. The return value is the total number of curves available (whether that number has been populated in B<r> or
+not). Passing a NULL B<r>, or setting B<nitems> to 0 will do nothing other than return the total number of curves available.
+The EC_builtin_curve structure is defined as follows:
+
+ typedef struct {
+ int nid;
+ const char *comment;
+ } EC_builtin_curve;
+
+Each EC_builtin_curve item has a unique integer id (B<nid>), and a human readable comment string describing the curve.
+
+In order to construct a builtin curve use the function EC_GROUP_new_by_curve_name and provide the B<nid> of the curve to
+be constructed.
+
+EC_GROUP_free frees the memory associated with the EC_GROUP.
+
+EC_GROUP_clear_free destroys any sensitive data held within the EC_GROUP and then frees its memory.
+
+=head1 RETURN VALUES
+
+All EC_GROUP_new* functions return a pointer to the newly constructed group, or NULL on error.
+
+EC_get_builtin_curves returns the number of builtin curves that are available.
+
+EC_GROUP_set_curve_GFp, EC_GROUP_get_curve_GFp, EC_GROUP_set_curve_GF2m, EC_GROUP_get_curve_GF2m return 1 on success or 0 on error.
+
+=head1 SEE ALSO
+
+L<crypto(3)|crypto(3)>, L<ec(3)|ec(3)>, L<EC_GROUP_copy(3)|EC_GROUP_copy(3)>,
+L<EC_POINT_new(3)|EC_POINT_new(3)>, L<EC_POINT_add(3)|EC_POINT_add(3)>, L<EC_KEY_new(3)|EC_KEY_new(3)>,
+L<EC_GFp_simple_method(3)|EC_GFp_simple_method(3)>, L<d2i_ECPKParameters(3)|d2i_ECPKParameters(3)>
+
+=cut
diff --git a/crypto/openssl/doc/crypto/EC_KEY_new.pod b/crypto/openssl/doc/crypto/EC_KEY_new.pod
new file mode 100644
index 0000000..e859689
--- /dev/null
+++ b/crypto/openssl/doc/crypto/EC_KEY_new.pod
@@ -0,0 +1,108 @@
+=pod
+
+=head1 NAME
+
+EC_KEY_new, EC_KEY_get_flags, EC_KEY_set_flags, EC_KEY_clear_flags, EC_KEY_new_by_curve_name, EC_KEY_free, EC_KEY_copy, EC_KEY_dup, EC_KEY_up_ref, EC_KEY_get0_group, EC_KEY_set_group, EC_KEY_get0_private_key, EC_KEY_set_private_key, EC_KEY_get0_public_key, EC_KEY_set_public_key, EC_KEY_get_enc_flags, EC_KEY_set_enc_flags, EC_KEY_get_conv_form, EC_KEY_set_conv_form, EC_KEY_get_key_method_data, EC_KEY_insert_key_method_data, EC_KEY_set_asn1_flag, EC_KEY_precompute_mult, EC_KEY_generate_key, EC_KEY_check_key, EC_KEY_set_public_key_affine_coordinates - Functions for creating, destroying and manipulating B<EC_KEY> objects.
+
+=head1 SYNOPSIS
+
+ #include <openssl/ec.h>
+ #include <openssl/bn.h>
+
+ EC_KEY *EC_KEY_new(void);
+ int EC_KEY_get_flags(const EC_KEY *key);
+ void EC_KEY_set_flags(EC_KEY *key, int flags);
+ void EC_KEY_clear_flags(EC_KEY *key, int flags);
+ EC_KEY *EC_KEY_new_by_curve_name(int nid);
+ void EC_KEY_free(EC_KEY *key);
+ EC_KEY *EC_KEY_copy(EC_KEY *dst, const EC_KEY *src);
+ EC_KEY *EC_KEY_dup(const EC_KEY *src);
+ int EC_KEY_up_ref(EC_KEY *key);
+ const EC_GROUP *EC_KEY_get0_group(const EC_KEY *key);
+ int EC_KEY_set_group(EC_KEY *key, const EC_GROUP *group);
+ const BIGNUM *EC_KEY_get0_private_key(const EC_KEY *key);
+ int EC_KEY_set_private_key(EC_KEY *key, const BIGNUM *prv);
+ const EC_POINT *EC_KEY_get0_public_key(const EC_KEY *key);
+ int EC_KEY_set_public_key(EC_KEY *key, const EC_POINT *pub);
+ point_conversion_form_t EC_KEY_get_conv_form(const EC_KEY *key);
+ void EC_KEY_set_conv_form(EC_KEY *eckey, point_conversion_form_t cform);
+ void *EC_KEY_get_key_method_data(EC_KEY *key,
+ void *(*dup_func)(void *), void (*free_func)(void *), void (*clear_free_func)(void *));
+ void EC_KEY_insert_key_method_data(EC_KEY *key, void *data,
+ void *(*dup_func)(void *), void (*free_func)(void *), void (*clear_free_func)(void *));
+ void EC_KEY_set_asn1_flag(EC_KEY *eckey, int asn1_flag);
+ int EC_KEY_precompute_mult(EC_KEY *key, BN_CTX *ctx);
+ int EC_KEY_generate_key(EC_KEY *key);
+ int EC_KEY_check_key(const EC_KEY *key);
+ int EC_KEY_set_public_key_affine_coordinates(EC_KEY *key, BIGNUM *x, BIGNUM *y);
+
+=head1 DESCRIPTION
+
+An EC_KEY represents a public key and (optionaly) an associated private key. A new EC_KEY (with no associated curve) can be constructed by calling EC_KEY_new.
+The reference count for the newly created EC_KEY is initially set to 1. A curve can be associated with the EC_KEY by calling
+EC_KEY_set_group.
+
+Alternatively a new EC_KEY can be constructed by calling EC_KEY_new_by_curve_name and supplying the nid of the associated curve. Refer to L<EC_GROUP_new(3)|EC_GROUP_new(3)> for a description of curve names. This function simply wraps calls to EC_KEY_new and
+EC_GROUP_new_by_curve_name.
+
+Calling EC_KEY_free decrements the reference count for the EC_KEY object, and if it has dropped to zero then frees the memory associated
+with it.
+
+EC_KEY_copy copies the contents of the EC_KEY in B<src> into B<dest>.
+
+EC_KEY_dup creates a new EC_KEY object and copies B<ec_key> into it.
+
+EC_KEY_up_ref increments the reference count associated with the EC_KEY object.
+
+EC_KEY_generate_key generates a new public and private key for the supplied B<eckey> object. B<eckey> must have an EC_GROUP object
+associated with it before calling this function. The private key is a random integer (0 < priv_key < order, where order is the order
+of the EC_GROUP object). The public key is an EC_POINT on the curve calculated by multiplying the generator for the curve by the
+private key.
+
+EC_KEY_check_key performs various sanity checks on the EC_KEY object to confirm that it is valid.
+
+EC_KEY_set_public_key_affine_coordinates sets the public key for B<key> based on its affine co-ordinates, i.e. it constructs an EC_POINT
+object based on the supplied B<x> and B<y> values and sets the public key to be this EC_POINT. It will also performs certain sanity checks
+on the key to confirm that it is valid.
+
+The functions EC_KEY_get0_group, EC_KEY_set_group, EC_KEY_get0_private_key, EC_KEY_set_private_key, EC_KEY_get0_public_key, and EC_KEY_set_public_key get and set the EC_GROUP object, the private key and the EC_POINT public key for the B<key> respectively.
+
+The functions EC_KEY_get_conv_form and EC_KEY_set_conv_form get and set the point_conversion_form for the B<key>. For a description
+of point_conversion_forms please refer to L<EC_POINT_new(3)|EC_POINT_new(3)>.
+
+EC_KEY_insert_key_method_data and EC_KEY_get_key_method_data enable the caller to associate arbitary additional data specific to the
+elliptic curve scheme being used with the EC_KEY object. This data is treated as a "black box" by the ec library. The data to be stored by EC_KEY_insert_key_method_data is provided in the B<data> parameter, which must have have associated functions for duplicating, freeing and "clear_freeing" the data item. If a subsequent EC_KEY_get_key_method_data call is issued, the functions for duplicating, freeing and "clear_freeing" the data item must be provided again, and they must be the same as they were when the data item was inserted.
+
+EC_KEY_set_flags sets the flags in the B<flags> parameter on the EC_KEY object. Any flags that are already set are left set. The currently defined standard flags are EC_FLAG_NON_FIPS_ALLOW and EC_FLAG_FIPS_CHECKED. In addition there is the flag EC_FLAG_COFACTOR_ECDH which is specific to ECDH and is defined in ecdh.h. EC_KEY_get_flags returns the current flags that are set for this EC_KEY. EC_KEY_clear_flags clears the flags indicated by the B<flags> parameter. All other flags are left in their existing state.
+
+EC_KEY_set_asn1_flag sets the asn1_flag on the underlying EC_GROUP object (if set). Refer to L<EC_GROUP_copy(3)|EC_GROUP_copy(3)> for further information on the asn1_flag.
+
+EC_KEY_precompute_mult stores multiples of the underlying EC_GROUP generator for faster point multiplication. See also L<EC_POINT_add(3)|EC_POINT_add(3)>.
+
+
+=head1 RETURN VALUES
+
+EC_KEY_new, EC_KEY_new_by_curve_name and EC_KEY_dup return a pointer to the newly created EC_KEY object, or NULL on error.
+
+EC_KEY_get_flags returns the flags associated with the EC_KEY object as an integer.
+
+EC_KEY_copy returns a pointer to the destination key, or NULL on error.
+
+EC_KEY_up_ref, EC_KEY_set_group, EC_KEY_set_private_key, EC_KEY_set_public_key, EC_KEY_precompute_mult, EC_KEY_generate_key, EC_KEY_check_key and EC_KEY_set_public_key_affine_coordinates return 1 on success or 0 on error.
+
+EC_KEY_get0_group returns the EC_GROUP associated with the EC_KEY.
+
+EC_KEY_get0_private_key returns the private key associated with the EC_KEY.
+
+EC_KEY_get_conv_form return the point_conversion_form for the EC_KEY.
+
+
+=head1 SEE ALSO
+
+L<crypto(3)|crypto(3)>, L<ec(3)|ec(3)>, L<EC_GROUP_new(3)|EC_GROUP_new(3)>,
+L<EC_GROUP_copy(3)|EC_GROUP_copy(3)>, L<EC_POINT_new(3)|EC_POINT_new(3)>,
+L<EC_POINT_add(3)|EC_POINT_add(3)>,
+L<EC_GFp_simple_method(3)|EC_GFp_simple_method(3)>,
+L<d2i_ECPKParameters(3)|d2i_ECPKParameters(3)>
+
+=cut
diff --git a/crypto/openssl/doc/crypto/EC_POINT_add.pod b/crypto/openssl/doc/crypto/EC_POINT_add.pod
new file mode 100644
index 0000000..ae92640
--- /dev/null
+++ b/crypto/openssl/doc/crypto/EC_POINT_add.pod
@@ -0,0 +1,72 @@
+=pod
+
+=head1 NAME
+
+EC_POINT_add, EC_POINT_dbl, EC_POINT_invert, EC_POINT_is_at_infinity, EC_POINT_is_on_curve, EC_POINT_cmp, EC_POINT_make_affine, EC_POINTs_make_affine, EC_POINTs_mul, EC_POINT_mul, EC_GROUP_precompute_mult, EC_GROUP_have_precompute_mult - Functions for performing mathematical operations and tests on B<EC_POINT> objects.
+
+=head1 SYNOPSIS
+
+ #include <openssl/ec.h>
+ #include <openssl/bn.h>
+
+ int EC_POINT_add(const EC_GROUP *group, EC_POINT *r, const EC_POINT *a, const EC_POINT *b, BN_CTX *ctx);
+ int EC_POINT_dbl(const EC_GROUP *group, EC_POINT *r, const EC_POINT *a, BN_CTX *ctx);
+ int EC_POINT_invert(const EC_GROUP *group, EC_POINT *a, BN_CTX *ctx);
+ int EC_POINT_is_at_infinity(const EC_GROUP *group, const EC_POINT *p);
+ int EC_POINT_is_on_curve(const EC_GROUP *group, const EC_POINT *point, BN_CTX *ctx);
+ int EC_POINT_cmp(const EC_GROUP *group, const EC_POINT *a, const EC_POINT *b, BN_CTX *ctx);
+ int EC_POINT_make_affine(const EC_GROUP *group, EC_POINT *point, BN_CTX *ctx);
+ int EC_POINTs_make_affine(const EC_GROUP *group, size_t num, EC_POINT *points[], BN_CTX *ctx);
+ int EC_POINTs_mul(const EC_GROUP *group, EC_POINT *r, const BIGNUM *n, size_t num, const EC_POINT *p[], const BIGNUM *m[], BN_CTX *ctx);
+ int EC_POINT_mul(const EC_GROUP *group, EC_POINT *r, const BIGNUM *n, const EC_POINT *q, const BIGNUM *m, BN_CTX *ctx);
+ int EC_GROUP_precompute_mult(EC_GROUP *group, BN_CTX *ctx);
+ int EC_GROUP_have_precompute_mult(const EC_GROUP *group);
+
+
+=head1 DESCRIPTION
+
+EC_POINT_add adds the two points B<a> and B<b> and places the result in B<r>. Similarly EC_POINT_dbl doubles the point B<a> and places the
+result in B<r>. In both cases it is valid for B<r> to be one of B<a> or B<b>.
+
+EC_POINT_invert calculates the inverse of the supplied point B<a>. The result is placed back in B<a>.
+
+The function EC_POINT_is_at_infinity tests whether the supplied point is at infinity or not.
+
+EC_POINT_is_on_curve tests whether the supplied point is on the curve or not.
+
+EC_POINT_cmp compares the two supplied points and tests whether or not they are equal.
+
+The functions EC_POINT_make_affine and EC_POINTs_make_affine force the internal representation of the EC_POINT(s) into the affine
+co-ordinate system. In the case of EC_POINTs_make_affine the value B<num> provides the number of points in the array B<points> to be
+forced.
+
+EC_POINT_mul calculates the value generator * B<n> + B<q> * B<m> and stores the result in B<r>. The value B<n> may be NULL in which case the result is just B<q> * B<m>.
+
+EC_POINTs_mul calculates the value generator * B<n> + B<q[0]> * B<m[0]> + ... + B<q[num-1]> * B<m[num-1]>. As for EC_POINT_mul the value
+B<n> may be NULL.
+
+The function EC_GROUP_precompute_mult stores multiples of the generator for faster point multiplication, whilst
+EC_GROUP_have_precompute_mult tests whether precomputation has already been done. See L<EC_GROUP_copy(3)|EC_GROUP_copy(3)> for information
+about the generator.
+
+
+=head1 RETURN VALUES
+
+The following functions return 1 on success or 0 on error: EC_POINT_add, EC_POINT_dbl, EC_POINT_invert, EC_POINT_make_affine,
+EC_POINTs_make_affine, EC_POINTs_make_affine, EC_POINT_mul, EC_POINTs_mul and EC_GROUP_precompute_mult.
+
+EC_POINT_is_at_infinity returns 1 if the point is at infinity, or 0 otherwise.
+
+EC_POINT_is_on_curve returns 1 if the point is on the curve, 0 if not, or -1 on error.
+
+EC_POINT_cmp returns 1 if the points are not equal, 0 if they are, or -1 on error.
+
+EC_GROUP_have_precompute_mult return 1 if a precomputation has been done, or 0 if not.
+
+=head1 SEE ALSO
+
+L<crypto(3)|crypto(3)>, L<ec(3)|ec(3)>, L<EC_GROUP_new(3)|EC_GROUP_new(3)>, L<EC_GROUP_copy(3)|EC_GROUP_copy(3)>,
+L<EC_POINT_new(3)|EC_POINT_new(3)>, L<EC_KEY_new(3)|EC_KEY_new(3)>,
+L<EC_GFp_simple_method(3)|EC_GFp_simple_method(3)>, L<d2i_ECPKParameters(3)|d2i_ECPKParameters(3)>
+
+=cut
diff --git a/crypto/openssl/doc/crypto/EC_POINT_new.pod b/crypto/openssl/doc/crypto/EC_POINT_new.pod
new file mode 100644
index 0000000..858baf4
--- /dev/null
+++ b/crypto/openssl/doc/crypto/EC_POINT_new.pod
@@ -0,0 +1,128 @@
+=pod
+
+=head1 NAME
+
+EC_POINT_new, EC_POINT_free, EC_POINT_clear_free, EC_POINT_copy, EC_POINT_dup, EC_POINT_method_of, EC_POINT_set_to_infinity, EC_POINT_set_Jprojective_coordinates, EC_POINT_get_Jprojective_coordinates_GFp, EC_POINT_set_affine_coordinates_GFp, EC_POINT_get_affine_coordinates_GFp, EC_POINT_set_compressed_coordinates_GFp, EC_POINT_set_affine_coordinates_GF2m, EC_POINT_get_affine_coordinates_GF2m, EC_POINT_set_compressed_coordinates_GF2m, EC_POINT_point2oct, EC_POINT_oct2point, EC_POINT_point2bn, EC_POINT_bn2point, EC_POINT_point2hex, EC_POINT_hex2point - Functions for creating, destroying and manipulating B<EC_POINT> objects.
+
+=head1 SYNOPSIS
+
+ #include <openssl/ec.h>
+ #include <openssl/bn.h>
+
+ EC_POINT *EC_POINT_new(const EC_GROUP *group);
+ void EC_POINT_free(EC_POINT *point);
+ void EC_POINT_clear_free(EC_POINT *point);
+ int EC_POINT_copy(EC_POINT *dst, const EC_POINT *src);
+ EC_POINT *EC_POINT_dup(const EC_POINT *src, const EC_GROUP *group);
+ const EC_METHOD *EC_POINT_method_of(const EC_POINT *point);
+ int EC_POINT_set_to_infinity(const EC_GROUP *group, EC_POINT *point);
+ int EC_POINT_set_Jprojective_coordinates_GFp(const EC_GROUP *group, EC_POINT *p,
+ const BIGNUM *x, const BIGNUM *y, const BIGNUM *z, BN_CTX *ctx);
+ int EC_POINT_get_Jprojective_coordinates_GFp(const EC_GROUP *group,
+ const EC_POINT *p, BIGNUM *x, BIGNUM *y, BIGNUM *z, BN_CTX *ctx);
+ int EC_POINT_set_affine_coordinates_GFp(const EC_GROUP *group, EC_POINT *p,
+ const BIGNUM *x, const BIGNUM *y, BN_CTX *ctx);
+ int EC_POINT_get_affine_coordinates_GFp(const EC_GROUP *group,
+ const EC_POINT *p, BIGNUM *x, BIGNUM *y, BN_CTX *ctx);
+ int EC_POINT_set_compressed_coordinates_GFp(const EC_GROUP *group, EC_POINT *p,
+ const BIGNUM *x, int y_bit, BN_CTX *ctx);
+ int EC_POINT_set_affine_coordinates_GF2m(const EC_GROUP *group, EC_POINT *p,
+ const BIGNUM *x, const BIGNUM *y, BN_CTX *ctx);
+ int EC_POINT_get_affine_coordinates_GF2m(const EC_GROUP *group,
+ const EC_POINT *p, BIGNUM *x, BIGNUM *y, BN_CTX *ctx);
+ int EC_POINT_set_compressed_coordinates_GF2m(const EC_GROUP *group, EC_POINT *p,
+ const BIGNUM *x, int y_bit, BN_CTX *ctx);
+ size_t EC_POINT_point2oct(const EC_GROUP *group, const EC_POINT *p,
+ point_conversion_form_t form,
+ unsigned char *buf, size_t len, BN_CTX *ctx);
+ int EC_POINT_oct2point(const EC_GROUP *group, EC_POINT *p,
+ const unsigned char *buf, size_t len, BN_CTX *ctx);
+ BIGNUM *EC_POINT_point2bn(const EC_GROUP *, const EC_POINT *,
+ point_conversion_form_t form, BIGNUM *, BN_CTX *);
+ EC_POINT *EC_POINT_bn2point(const EC_GROUP *, const BIGNUM *,
+ EC_POINT *, BN_CTX *);
+ char *EC_POINT_point2hex(const EC_GROUP *, const EC_POINT *,
+ point_conversion_form_t form, BN_CTX *);
+ EC_POINT *EC_POINT_hex2point(const EC_GROUP *, const char *,
+ EC_POINT *, BN_CTX *);
+
+
+=head1 DESCRIPTION
+
+An EC_POINT represents a point on a curve. A new point is constructed by calling the function EC_POINT_new and providing the B<group>
+object that the point relates to.
+
+EC_POINT_free frees the memory associated with the EC_POINT.
+
+EC_POINT_clear_free destroys any sensitive data held within the EC_POINT and then frees its memory.
+
+EC_POINT_copy copies the point B<src> into B<dst>. Both B<src> and B<dst> must use the same EC_METHOD.
+
+EC_POINT_dup creates a new EC_POINT object and copies the content from B<src> to the newly created
+EC_POINT object.
+
+EC_POINT_method_of obtains the EC_METHOD associated with B<point>.
+
+A valid point on a curve is the special point at infinity. A point is set to be at infinity by calling EC_POINT_set_to_infinity.
+
+The affine co-ordinates for a point describe a point in terms of its x and y position. The functions
+EC_POINT_set_affine_coordinates_GFp and EC_POINT_set_affine_coordinates_GF2m set the B<x> and B<y> co-ordinates for the point
+B<p> defined over the curve given in B<group>.
+
+As well as the affine co-ordinates, a point can alternatively be described in terms of its Jacobian
+projective co-ordinates (for Fp curves only). Jacobian projective co-ordinates are expressed as three values x, y and z. Working in
+this co-ordinate system provides more efficient point multiplication operations.
+A mapping exists between Jacobian projective co-ordinates and affine co-ordinates. A Jacobian projective co-ordinate (x, y, z) can be written as an affine co-ordinate as (x/(z^2), y/(z^3)). Conversion to Jacobian projective to affine co-ordinates is simple. The co-ordinate (x, y) is
+mapped to (x, y, 1). To set or get the projective co-ordinates use EC_POINT_set_Jprojective_coordinates_GFp and
+EC_POINT_get_Jprojective_coordinates_GFp respectively.
+
+Points can also be described in terms of their compressed co-ordinates. For a point (x, y), for any given value for x such that the point is
+on the curve there will only ever be two possible values for y. Therefore a point can be set using the EC_POINT_set_compressed_coordinates_GFp
+and EC_POINT_set_compressed_coordinates_GF2m functions where B<x> is the x co-ordinate and B<y_bit> is a value 0 or 1 to identify which of
+the two possible values for y should be used.
+
+In addition EC_POINTs can be converted to and from various external
+representations. Supported representations are octet strings, BIGNUMs and
+hexadecimal. Octet strings are stored in a buffer along with an associated
+buffer length. A point held in a BIGNUM is calculated by converting the point to
+an octet string and then converting that octet string into a BIGNUM integer.
+Points in hexadecimal format are stored in a NULL terminated character string
+where each character is one of the printable values 0-9 or A-F (or a-f).
+
+The functions EC_POINT_point2oct, EC_POINT_oct2point, EC_POINT_point2bn, EC_POINT_bn2point, EC_POINT_point2hex and EC_POINT_hex2point convert
+from and to EC_POINTs for the formats: octet string, BIGNUM and hexadecimal respectively.
+
+The function EC_POINT_point2oct must be supplied with a buffer long enough to store the octet string. The return value provides the number of
+octets stored. Calling the function with a NULL buffer will not perform the conversion but will still return the required buffer length.
+
+The function EC_POINT_point2hex will allocate sufficient memory to store the hexadecimal string. It is the caller's responsibility to free
+this memory with a subsequent call to OPENSSL_free().
+
+=head1 RETURN VALUES
+
+EC_POINT_new and EC_POINT_dup return the newly allocated EC_POINT or NULL on error.
+
+The following functions return 1 on success or 0 on error: EC_POINT_copy, EC_POINT_set_to_infinity, EC_POINT_set_Jprojective_coordinates_GFp,
+EC_POINT_get_Jprojective_coordinates_GFp, EC_POINT_set_affine_coordinates_GFp, EC_POINT_get_affine_coordinates_GFp,
+EC_POINT_set_compressed_coordinates_GFp, EC_POINT_set_affine_coordinates_GF2m, EC_POINT_get_affine_coordinates_GF2m,
+EC_POINT_set_compressed_coordinates_GF2m and EC_POINT_oct2point.
+
+EC_POINT_method_of returns the EC_METHOD associated with the supplied EC_POINT.
+
+EC_POINT_point2oct returns the length of the required buffer, or 0 on error.
+
+EC_POINT_point2bn returns the pointer to the BIGNUM supplied, or NULL on error.
+
+EC_POINT_bn2point returns the pointer to the EC_POINT supplied, or NULL on error.
+
+EC_POINT_point2hex returns a pointer to the hex string, or NULL on error.
+
+EC_POINT_hex2point returns the pointer to the EC_POINT supplied, or NULL on error.
+
+=head1 SEE ALSO
+
+L<crypto(3)|crypto(3)>, L<ec(3)|ec(3)>, L<EC_GROUP_new(3)|EC_GROUP_new(3)>, L<EC_GROUP_copy(3)|EC_GROUP_copy(3)>,
+L<EC_POINT_add(3)|EC_POINT_add(3)>, L<EC_KEY_new(3)|EC_KEY_new(3)>,
+L<EC_GFp_simple_method(3)|EC_GFp_simple_method(3)>, L<d2i_ECPKParameters(3)|d2i_ECPKParameters(3)>
+
+=cut
diff --git a/crypto/openssl/doc/crypto/ERR_remove_state.pod b/crypto/openssl/doc/crypto/ERR_remove_state.pod
index 72925fb..a4d38c1 100644
--- a/crypto/openssl/doc/crypto/ERR_remove_state.pod
+++ b/crypto/openssl/doc/crypto/ERR_remove_state.pod
@@ -2,26 +2,35 @@
=head1 NAME
-ERR_remove_state - free a thread's error queue
+ERR_remove_thread_state, ERR_remove_state - free a thread's error queue
=head1 SYNOPSIS
#include <openssl/err.h>
+ void ERR_remove_thread_state(const CRYPTO_THREADID *tid);
+
+Deprecated:
+
void ERR_remove_state(unsigned long pid);
=head1 DESCRIPTION
-ERR_remove_state() frees the error queue associated with thread B<pid>.
-If B<pid> == 0, the current thread will have its error queue removed.
+ERR_remove_thread_state() frees the error queue associated with thread B<tid>.
+If B<tid> == B<NULL>, the current thread will have its error queue removed.
Since error queue data structures are allocated automatically for new
threads, they must be freed when threads are terminated in order to
avoid memory leaks.
+ERR_remove_state is deprecated and has been replaced by
+ERR_remove_thread_state. Since threads in OpenSSL are no longer identified
+by unsigned long values any argument to this function is ignored. Calling
+ERR_remove_state is equivalent to B<ERR_remove_thread_state(NULL)>.
+
=head1 RETURN VALUE
-ERR_remove_state() returns no value.
+ERR_remove_thread_state and ERR_remove_state() return no value.
=head1 SEE ALSO
@@ -29,6 +38,8 @@ L<err(3)|err(3)>
=head1 HISTORY
-ERR_remove_state() is available in all versions of SSLeay and OpenSSL.
+ERR_remove_state() is available in all versions of SSLeay and OpenSSL. It
+was deprecated in OpenSSL 1.0.0 when ERR_remove_thread_state was introduced
+and thread IDs were introduced to identify threads instead of 'unsigned long'.
=cut
diff --git a/crypto/openssl/doc/crypto/EVP_BytesToKey.pod b/crypto/openssl/doc/crypto/EVP_BytesToKey.pod
index 0ea7d55..a9b6bb0 100644
--- a/crypto/openssl/doc/crypto/EVP_BytesToKey.pod
+++ b/crypto/openssl/doc/crypto/EVP_BytesToKey.pod
@@ -36,8 +36,8 @@ If the total key and IV length is less than the digest length and
B<MD5> is used then the derivation algorithm is compatible with PKCS#5 v1.5
otherwise a non standard extension is used to derive the extra data.
-Newer applications should use more standard algorithms such as PKCS#5
-v2.0 for key derivation.
+Newer applications should use a more modern algorithm such as PBKDF2 as
+defined in PKCS#5v2.1 and provided by PKCS5_PBKDF2_HMAC.
=head1 KEY DERIVATION ALGORITHM
@@ -55,7 +55,10 @@ the IV.
=head1 RETURN VALUES
-EVP_BytesToKey() returns the size of the derived key in bytes.
+If B<data> is NULL, then EVP_BytesToKey() returns the number of bytes
+needed to store the derived key.
+Otherwise, EVP_BytesToKey() returns the size of the derived key in bytes,
+or 0 on error.
=head1 SEE ALSO
diff --git a/crypto/openssl/doc/crypto/EVP_DigestInit.pod b/crypto/openssl/doc/crypto/EVP_DigestInit.pod
index ac526bb..0895e8c 100644
--- a/crypto/openssl/doc/crypto/EVP_DigestInit.pod
+++ b/crypto/openssl/doc/crypto/EVP_DigestInit.pod
@@ -4,10 +4,10 @@
EVP_MD_CTX_init, EVP_MD_CTX_create, EVP_DigestInit_ex, EVP_DigestUpdate,
EVP_DigestFinal_ex, EVP_MD_CTX_cleanup, EVP_MD_CTX_destroy, EVP_MAX_MD_SIZE,
-EVP_MD_CTX_copy_ex, EVP_MD_CTX_copy, EVP_MD_type, EVP_MD_pkey_type, EVP_MD_size,
-EVP_MD_block_size, EVP_MD_CTX_md, EVP_MD_CTX_size, EVP_MD_CTX_block_size, EVP_MD_CTX_type,
-EVP_md_null, EVP_md2, EVP_md5, EVP_sha, EVP_sha1, EVP_sha224, EVP_sha256,
-EVP_sha384, EVP_sha512, EVP_dss, EVP_dss1, EVP_mdc2,
+EVP_MD_CTX_copy_ex, EVP_DigestInit, EVP_DigestFinal, EVP_MD_CTX_copy, EVP_MD_type,
+EVP_MD_pkey_type, EVP_MD_size, EVP_MD_block_size, EVP_MD_CTX_md, EVP_MD_CTX_size,
+EVP_MD_CTX_block_size, EVP_MD_CTX_type, EVP_md_null, EVP_md2, EVP_md5, EVP_sha, EVP_sha1,
+EVP_sha224, EVP_sha256, EVP_sha384, EVP_sha512, EVP_dss, EVP_dss1, EVP_mdc2,
EVP_ripemd160, EVP_get_digestbyname, EVP_get_digestbynid, EVP_get_digestbyobj -
EVP digest routines
@@ -270,7 +270,7 @@ and EVP_DigestFinal_ex() were added in OpenSSL 0.9.7.
EVP_md_null(), EVP_md2(), EVP_md5(), EVP_sha(), EVP_sha1(),
EVP_dss(), EVP_dss1(), EVP_mdc2() and EVP_ripemd160() were
-changed to return truely const EVP_MD * in OpenSSL 0.9.7.
+changed to return truly const EVP_MD * in OpenSSL 0.9.7.
The link between digests and signing algorithms was fixed in OpenSSL 1.0 and
later, so now EVP_sha1() can be used with RSA and DSA; there is no need to
diff --git a/crypto/openssl/doc/crypto/EVP_DigestVerifyInit.pod b/crypto/openssl/doc/crypto/EVP_DigestVerifyInit.pod
index cfeccd9..e0217e4 100644
--- a/crypto/openssl/doc/crypto/EVP_DigestVerifyInit.pod
+++ b/crypto/openssl/doc/crypto/EVP_DigestVerifyInit.pod
@@ -11,7 +11,7 @@ EVP_DigestVerifyInit, EVP_DigestVerifyUpdate, EVP_DigestVerifyFinal - EVP signat
int EVP_DigestVerifyInit(EVP_MD_CTX *ctx, EVP_PKEY_CTX **pctx,
const EVP_MD *type, ENGINE *e, EVP_PKEY *pkey);
int EVP_DigestVerifyUpdate(EVP_MD_CTX *ctx, const void *d, unsigned int cnt);
- int EVP_DigestVerifyFinal(EVP_MD_CTX *ctx, unsigned char *sig, size_t siglen);
+ int EVP_DigestVerifyFinal(EVP_MD_CTX *ctx, const unsigned char *sig, size_t siglen);
=head1 DESCRIPTION
diff --git a/crypto/openssl/doc/crypto/EVP_EncryptInit.pod b/crypto/openssl/doc/crypto/EVP_EncryptInit.pod
index ed027b3..fb6036f 100644
--- a/crypto/openssl/doc/crypto/EVP_EncryptInit.pod
+++ b/crypto/openssl/doc/crypto/EVP_EncryptInit.pod
@@ -16,7 +16,17 @@ EVP_CIPHER_CTX_nid, EVP_CIPHER_CTX_block_size, EVP_CIPHER_CTX_key_length,
EVP_CIPHER_CTX_iv_length, EVP_CIPHER_CTX_get_app_data,
EVP_CIPHER_CTX_set_app_data, EVP_CIPHER_CTX_type, EVP_CIPHER_CTX_flags,
EVP_CIPHER_CTX_mode, EVP_CIPHER_param_to_asn1, EVP_CIPHER_asn1_to_param,
-EVP_CIPHER_CTX_set_padding - EVP cipher routines
+EVP_CIPHER_CTX_set_padding, EVP_enc_null, EVP_des_cbc, EVP_des_ecb,
+EVP_des_cfb, EVP_des_ofb, EVP_des_ede_cbc, EVP_des_ede, EVP_des_ede_ofb,
+EVP_des_ede_cfb, EVP_des_ede3_cbc, EVP_des_ede3, EVP_des_ede3_ofb,
+EVP_des_ede3_cfb, EVP_desx_cbc, EVP_rc4, EVP_rc4_40, EVP_idea_cbc,
+EVP_idea_ecb, EVP_idea_cfb, EVP_idea_ofb, EVP_idea_cbc, EVP_rc2_cbc,
+EVP_rc2_ecb, EVP_rc2_cfb, EVP_rc2_ofb, EVP_rc2_40_cbc, EVP_rc2_64_cbc,
+EVP_bf_cbc, EVP_bf_ecb, EVP_bf_cfb, EVP_bf_ofb, EVP_cast5_cbc,
+EVP_cast5_ecb, EVP_cast5_cfb, EVP_cast5_ofb, EVP_rc5_32_12_16_cbc,
+EVP_rc5_32_12_16_ecb, EVP_rc5_32_12_16_cfb, EVP_rc5_32_12_16_ofb,
+EVP_aes_128_gcm, EVP_aes_192_gcm, EVP_aes_256_gcm, EVP_aes_128_ccm,
+EVP_aes_192_ccm, EVP_aes_256_ccm - EVP cipher routines
=head1 SYNOPSIS
@@ -231,8 +241,7 @@ or the parameters cannot be set (for example the RC2 effective key length
is not supported.
EVP_CIPHER_CTX_ctrl() allows various cipher specific parameters to be determined
-and set. Currently only the RC2 effective key length and the number of rounds of
-RC5 can be set.
+and set.
=head1 RETURN VALUES
@@ -338,8 +347,88 @@ RC5 encryption algorithm in CBC, ECB, CFB and OFB modes respectively. This is a
cipher with an additional "number of rounds" parameter. By default the key length is set to 128
bits and 12 rounds.
+=item EVP_aes_128_gcm(void), EVP_aes_192_gcm(void), EVP_aes_256_gcm(void)
+
+AES Galois Counter Mode (GCM) for 128, 192 and 256 bit keys respectively.
+These ciphers require additional control operations to function correctly: see
+L<GCM mode> section below for details.
+
+=item EVP_aes_128_ccm(void), EVP_aes_192_ccm(void), EVP_aes_256_ccm(void)
+
+AES Counter with CBC-MAC Mode (CCM) for 128, 192 and 256 bit keys respectively.
+These ciphers require additional control operations to function correctly: see
+CCM mode section below for details.
+
=back
+=head1 GCM Mode
+
+For GCM mode ciphers the behaviour of the EVP interface is subtly altered and
+several GCM specific ctrl operations are supported.
+
+To specify any additional authenticated data (AAD) a call to EVP_CipherUpdate(),
+EVP_EncryptUpdate() or EVP_DecryptUpdate() should be made with the output
+parameter B<out> set to B<NULL>.
+
+When decrypting the return value of EVP_DecryptFinal() or EVP_CipherFinal()
+indicates if the operation was successful. If it does not indicate success
+the authentication operation has failed and any output data B<MUST NOT>
+be used as it is corrupted.
+
+The following ctrls are supported in GCM mode:
+
+ EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_GCM_SET_IVLEN, ivlen, NULL);
+
+Sets the GCM IV length: this call can only be made before specifying an IV. If
+not called a default IV length is used (96 bits for AES).
+
+ EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_GCM_GET_TAG, taglen, tag);
+
+Writes B<taglen> bytes of the tag value to the buffer indicated by B<tag>.
+This call can only be made when encrypting data and B<after> all data has been
+processed (e.g. after an EVP_EncryptFinal() call).
+
+ EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_GCM_SET_TAG, taglen, tag);
+
+Sets the expected tag to B<taglen> bytes from B<tag>. This call is only legal
+when decrypting data and must be made B<before> any data is processed (e.g.
+before any EVP_DecryptUpdate() call).
+
+See L<EXAMPLES> below for an example of the use of GCM mode.
+
+=head1 CCM Mode
+
+The behaviour of CCM mode ciphers is similar to CCM mode but with a few
+additional requirements and different ctrl values.
+
+Like GCM mode any additional authenticated data (AAD) is passed by calling
+EVP_CipherUpdate(), EVP_EncryptUpdate() or EVP_DecryptUpdate() with the output
+parameter B<out> set to B<NULL>. Additionally the total plaintext or ciphertext
+length B<MUST> be passed to EVP_CipherUpdate(), EVP_EncryptUpdate() or
+EVP_DecryptUpdate() with the output and input parameters (B<in> and B<out>)
+set to B<NULL> and the length passed in the B<inl> parameter.
+
+The following ctrls are supported in CCM mode:
+
+ EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_CCM_SET_TAG, taglen, tag);
+
+This call is made to set the expected B<CCM> tag value when decrypting or
+the length of the tag (with the B<tag> parameter set to NULL) when encrypting.
+The tag length is often referred to as B<M>. If not set a default value is
+used (12 for AES).
+
+ EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_CCM_SET_L, ivlen, NULL);
+
+Sets the CCM B<L> value. If not set a default is used (8 for AES).
+
+ EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_CCM_SET_IVLEN, ivlen, NULL);
+
+Sets the CCM nonce (IV) length: this call can only be made before specifying
+an nonce value. The nonce length is given by B<15 - L> so it is 7 by default
+for AES.
+
+
+
=head1 NOTES
Where possible the B<EVP> interface to symmetric ciphers should be used in
diff --git a/crypto/openssl/doc/crypto/EVP_PKEY_CTX_ctrl.pod b/crypto/openssl/doc/crypto/EVP_PKEY_CTX_ctrl.pod
index 13b91f1..44b5fdb 100644
--- a/crypto/openssl/doc/crypto/EVP_PKEY_CTX_ctrl.pod
+++ b/crypto/openssl/doc/crypto/EVP_PKEY_CTX_ctrl.pod
@@ -2,7 +2,13 @@
=head1 NAME
-EVP_PKEY_ctrl, EVP_PKEY_ctrl_str - algorithm specific control operations
+EVP_PKEY_CTX_ctrl, EVP_PKEY_CTX_ctrl_str, EVP_PKEY_get_default_digest_nid,
+EVP_PKEY_CTX_set_signature_md, EVP_PKEY_CTX_set_rsa_padding,
+EVP_PKEY_CTX_set_rsa_pss_saltlen, EVP_PKEY_CTX_set_rsa_rsa_keygen_bits,
+EVP_PKEY_CTX_set_rsa_keygen_pubexp, EVP_PKEY_CTX_set_dsa_paramgen_bits,
+EVP_PKEY_CTX_set_dh_paramgen_prime_len,
+EVP_PKEY_CTX_set_dh_paramgen_generator,
+EVP_PKEY_CTX_set_ec_paramgen_curve_nid - algorithm specific control operations
=head1 SYNOPSIS
@@ -45,7 +51,7 @@ B<p1> and B<p2>.
Applications will not normally call EVP_PKEY_CTX_ctrl() directly but will
instead call one of the algorithm specific macros below.
-The function EVP_PKEY_ctrl_str() allows an application to send an algorithm
+The function EVP_PKEY_CTX_ctrl_str() allows an application to send an algorithm
specific control operation to a context B<ctx> in string form. This is
intended to be used for options specified on the command line or in text
files. The commands supported are documented in the openssl utility
diff --git a/crypto/openssl/doc/crypto/EVP_PKEY_cmp.pod b/crypto/openssl/doc/crypto/EVP_PKEY_cmp.pod
index 4f8185e..0ff027c 100644
--- a/crypto/openssl/doc/crypto/EVP_PKEY_cmp.pod
+++ b/crypto/openssl/doc/crypto/EVP_PKEY_cmp.pod
@@ -23,10 +23,10 @@ doesn't use parameters.
The function EVP_PKEY_copy_parameters() copies the parameters from key
B<from> to key B<to>.
-The funcion EVP_PKEY_cmp_parameters() compares the parameters of keys
+The function EVP_PKEY_cmp_parameters() compares the parameters of keys
B<a> and B<b>.
-The funcion EVP_PKEY_cmp() compares the public key components and paramters
+The function EVP_PKEY_cmp() compares the public key components and paramters
(if present) of keys B<a> and B<b>.
=head1 NOTES
diff --git a/crypto/openssl/doc/crypto/OPENSSL_VERSION_NUMBER.pod b/crypto/openssl/doc/crypto/OPENSSL_VERSION_NUMBER.pod
index c39ac35..f7ca7cb 100644
--- a/crypto/openssl/doc/crypto/OPENSSL_VERSION_NUMBER.pod
+++ b/crypto/openssl/doc/crypto/OPENSSL_VERSION_NUMBER.pod
@@ -17,7 +17,7 @@ OPENSSL_VERSION_NUMBER, SSLeay, SSLeay_version - get OpenSSL version number
OPENSSL_VERSION_NUMBER is a numeric release version identifier:
- MMNNFFPPS: major minor fix patch status
+ MNNFFPPS: major minor fix patch status
The status nibble has one of the values 0 for development, 1 to e for betas
1 to 14, and f for release.
diff --git a/crypto/openssl/doc/crypto/OPENSSL_config.pod b/crypto/openssl/doc/crypto/OPENSSL_config.pod
index 5096fac..2d25b26 100644
--- a/crypto/openssl/doc/crypto/OPENSSL_config.pod
+++ b/crypto/openssl/doc/crypto/OPENSSL_config.pod
@@ -48,17 +48,6 @@ configuration file.
Applications should free up configuration at application closedown by calling
CONF_modules_free().
-=head1 RESTRICTIONS
-
-The OPENSSL_config() function is designed to be a very simple "call it and
-forget it" function. As a result its behaviour is somewhat limited. It ignores
-all errors silently and it can only load from the standard configuration file
-location for example.
-
-It is however B<much> better than nothing. Applications which need finer
-control over their configuration functionality should use the configuration
-functions such as CONF_load_modules() directly.
-
=head1 RETURN VALUES
Neither OPENSSL_config() nor OPENSSL_no_config() return a value.
diff --git a/crypto/openssl/doc/crypto/OPENSSL_ia32cap.pod b/crypto/openssl/doc/crypto/OPENSSL_ia32cap.pod
index 2e659d3..90156d2 100644
--- a/crypto/openssl/doc/crypto/OPENSSL_ia32cap.pod
+++ b/crypto/openssl/doc/crypto/OPENSSL_ia32cap.pod
@@ -2,42 +2,95 @@
=head1 NAME
-OPENSSL_ia32cap - finding the IA-32 processor capabilities
+OPENSSL_ia32cap, OPENSSL_ia32cap_loc - the IA-32 processor capabilities vector
=head1 SYNOPSIS
- unsigned long *OPENSSL_ia32cap_loc(void);
- #define OPENSSL_ia32cap (*(OPENSSL_ia32cap_loc()))
+ unsigned int *OPENSSL_ia32cap_loc(void);
+ #define OPENSSL_ia32cap ((OPENSSL_ia32cap_loc())[0])
=head1 DESCRIPTION
Value returned by OPENSSL_ia32cap_loc() is address of a variable
-containing IA-32 processor capabilities bit vector as it appears in EDX
-register after executing CPUID instruction with EAX=1 input value (see
-Intel Application Note #241618). Naturally it's meaningful on IA-32[E]
-platforms only. The variable is normally set up automatically upon
-toolkit initialization, but can be manipulated afterwards to modify
-crypto library behaviour. For the moment of this writing six bits are
-significant, namely:
-
-1. bit #28 denoting Hyperthreading, which is used to distiguish
- cores with shared cache;
-2. bit #26 denoting SSE2 support;
-3. bit #25 denoting SSE support;
-4. bit #23 denoting MMX support;
-5. bit #20, reserved by Intel, is used to choose between RC4 code
- pathes;
-6. bit #4 denoting presence of Time-Stamp Counter.
+containing IA-32 processor capabilities bit vector as it appears in
+EDX:ECX register pair after executing CPUID instruction with EAX=1
+input value (see Intel Application Note #241618). Naturally it's
+meaningful on x86 and x86_64 platforms only. The variable is normally
+set up automatically upon toolkit initialization, but can be
+manipulated afterwards to modify crypto library behaviour. For the
+moment of this writing following bits are significant:
+
+=over
+
+=item bit #4 denoting presence of Time-Stamp Counter.
+
+=item bit #19 denoting availability of CLFLUSH instruction;
+
+=item bit #20, reserved by Intel, is used to choose among RC4 code paths;
+
+=item bit #23 denoting MMX support;
+
+=item bit #24, FXSR bit, denoting availability of XMM registers;
+
+=item bit #25 denoting SSE support;
+
+=item bit #26 denoting SSE2 support;
+
+=item bit #28 denoting Hyperthreading, which is used to distinguish
+cores with shared cache;
+
+=item bit #30, reserved by Intel, denotes specifically Intel CPUs;
+
+=item bit #33 denoting availability of PCLMULQDQ instruction;
+
+=item bit #41 denoting SSSE3, Supplemental SSE3, support;
+
+=item bit #43 denoting AMD XOP support (forced to zero on non-AMD CPUs);
+
+=item bit #57 denoting AES-NI instruction set extension;
+
+=item bit #59, OSXSAVE bit, denoting availability of YMM registers;
+
+=item bit #60 denoting AVX extension;
+
+=item bit #62 denoting availability of RDRAND instruction;
+
+=back
For example, clearing bit #26 at run-time disables high-performance
-SSE2 code present in the crypto library. You might have to do this if
-target OpenSSL application is executed on SSE2 capable CPU, but under
-control of OS which does not support SSE2 extentions. Even though you
-can manipulate the value programmatically, you most likely will find it
-more appropriate to set up an environment variable with the same name
-prior starting target application, e.g. on Intel P4 processor 'env
-OPENSSL_ia32cap=0x12900010 apps/openssl', to achieve same effect
-without modifying the application source code. Alternatively you can
-reconfigure the toolkit with no-sse2 option and recompile.
-
-=cut
+SSE2 code present in the crypto library, while clearing bit #24
+disables SSE2 code operating on 128-bit XMM register bank. You might
+have to do the latter if target OpenSSL application is executed on SSE2
+capable CPU, but under control of OS that does not enable XMM
+registers. Even though you can manipulate the value programmatically,
+you most likely will find it more appropriate to set up an environment
+variable with the same name prior starting target application, e.g. on
+Intel P4 processor 'env OPENSSL_ia32cap=0x16980010 apps/openssl', or
+better yet 'env OPENSSL_ia32cap=~0x1000000 apps/openssl' to achieve same
+effect without modifying the application source code. Alternatively you
+can reconfigure the toolkit with no-sse2 option and recompile.
+
+Less intuitive is clearing bit #28. The truth is that it's not copied
+from CPUID output verbatim, but is adjusted to reflect whether or not
+the data cache is actually shared between logical cores. This in turn
+affects the decision on whether or not expensive countermeasures
+against cache-timing attacks are applied, most notably in AES assembler
+module.
+
+The vector is further extended with EBX value returned by CPUID with
+EAX=7 and ECX=0 as input. Following bits are significant:
+
+=over
+
+=item bit #64+3 denoting availability of BMI1 instructions, e.g. ANDN;
+
+=item bit #64+5 denoting availability of AVX2 instructions;
+
+=item bit #64+8 denoting availability of BMI2 instructions, e.g. MUXL
+and RORX;
+
+=item bit #64+18 denoting availability of RDSEED instruction;
+
+=item bit #64+19 denoting availability of ADCX and ADOX instructions;
+
+=back
diff --git a/crypto/openssl/doc/crypto/OPENSSL_instrument_bus.pod b/crypto/openssl/doc/crypto/OPENSSL_instrument_bus.pod
new file mode 100644
index 0000000..4ed83e4
--- /dev/null
+++ b/crypto/openssl/doc/crypto/OPENSSL_instrument_bus.pod
@@ -0,0 +1,42 @@
+=pod
+
+=head1 NAME
+
+OPENSSL_instrument_bus, OPENSSL_instrument_bus2 - instrument references to memory bus
+
+=head1 SYNOPSIS
+
+ #ifdef OPENSSL_CPUID_OBJ
+ size_t OPENSSL_instrument_bus (int *vector,size_t num);
+ size_t OPENSSL_instrument_bus2(int *vector,size_t num,size_t max);
+ #endif
+
+=head1 DESCRIPTION
+
+It was empirically found that timings of references to primary memory
+are subject to irregular, apparently non-deterministic variations. The
+subroutines in question instrument these references for purposes of
+gathering entropy for random number generator. In order to make it
+bus-bound a 'flush cache line' instruction is used between probes. In
+addition probes are added to B<vector> elements in atomic or
+interlocked manner, which should contribute additional noise on
+multi-processor systems. This also means that B<vector[num]> should be
+zeroed upon invocation (if you want to retrieve actual probe values).
+
+OPENSSL_instrument_bus performs B<num> probes and records the number of
+oscillator cycles every probe took.
+
+OPENSSL_instrument_bus2 on the other hand B<accumulates> consecutive
+probes with the same value, i.e. in a way it records duration of
+periods when probe values appeared deterministic. The subroutine
+performs at most B<max> probes in attempt to fill the B<vector[num]>,
+with B<max> value of 0 meaning "as many as it takes."
+
+=head1 RETURN VALUE
+
+Return value of 0 indicates that CPU is not capable of performing the
+benchmark, either because oscillator counter or 'flush cache line' is
+not available on current platform. For reference, on x86 'flush cache
+line' was introduced with the SSE2 extensions.
+
+Otherwise number of recorded values is returned.
diff --git a/crypto/openssl/doc/crypto/OPENSSL_load_builtin_modules.pod b/crypto/openssl/doc/crypto/OPENSSL_load_builtin_modules.pod
index f14dfaf..de62912 100644
--- a/crypto/openssl/doc/crypto/OPENSSL_load_builtin_modules.pod
+++ b/crypto/openssl/doc/crypto/OPENSSL_load_builtin_modules.pod
@@ -2,7 +2,7 @@
=head1 NAME
-OPENSSL_load_builtin_modules - add standard configuration modules
+OPENSSL_load_builtin_modules, ASN1_add_oid_module, ENGINE_add_conf_module - add standard configuration modules
=head1 SYNOPSIS
diff --git a/crypto/openssl/doc/crypto/OpenSSL_add_all_algorithms.pod b/crypto/openssl/doc/crypto/OpenSSL_add_all_algorithms.pod
index e63411b..bcb79e5 100644
--- a/crypto/openssl/doc/crypto/OpenSSL_add_all_algorithms.pod
+++ b/crypto/openssl/doc/crypto/OpenSSL_add_all_algorithms.pod
@@ -2,7 +2,7 @@
=head1 NAME
-OpenSSL_add_all_algorithms, OpenSSL_add_all_ciphers, OpenSSL_add_all_digests -
+OpenSSL_add_all_algorithms, OpenSSL_add_all_ciphers, OpenSSL_add_all_digests, EVP_cleanup -
add algorithms to internal table
=head1 SYNOPSIS
diff --git a/crypto/openssl/doc/crypto/PKCS7_verify.pod b/crypto/openssl/doc/crypto/PKCS7_verify.pod
index 7c10a4c..f083306 100644
--- a/crypto/openssl/doc/crypto/PKCS7_verify.pod
+++ b/crypto/openssl/doc/crypto/PKCS7_verify.pod
@@ -2,7 +2,7 @@
=head1 NAME
-PKCS7_verify - verify a PKCS#7 signedData structure
+PKCS7_verify, PKCS7_get0_signers - verify a PKCS#7 signedData structure
=head1 SYNOPSIS
@@ -91,8 +91,8 @@ timestamp).
=head1 RETURN VALUES
-PKCS7_verify() returns 1 for a successful verification and zero or a negative
-value if an error occurs.
+PKCS7_verify() returns one for a successful verification and zero
+if an error occurs.
PKCS7_get0_signers() returns all signers or B<NULL> if an error occurred.
diff --git a/crypto/openssl/doc/crypto/RAND_egd.pod b/crypto/openssl/doc/crypto/RAND_egd.pod
index 8b8c61d..80fa734 100644
--- a/crypto/openssl/doc/crypto/RAND_egd.pod
+++ b/crypto/openssl/doc/crypto/RAND_egd.pod
@@ -2,7 +2,7 @@
=head1 NAME
-RAND_egd - query entropy gathering daemon
+RAND_egd, RAND_egd_bytes, RAND_query_egd_bytes - query entropy gathering daemon
=head1 SYNOPSIS
diff --git a/crypto/openssl/doc/crypto/RSA_generate_key.pod b/crypto/openssl/doc/crypto/RSA_generate_key.pod
index 52dbb14..881391a 100644
--- a/crypto/openssl/doc/crypto/RSA_generate_key.pod
+++ b/crypto/openssl/doc/crypto/RSA_generate_key.pod
@@ -2,28 +2,33 @@
=head1 NAME
-RSA_generate_key - generate RSA key pair
+RSA_generate_key_ex, RSA_generate_key - generate RSA key pair
=head1 SYNOPSIS
#include <openssl/rsa.h>
+ int RSA_generate_key_ex(RSA *rsa, int bits, BIGNUM *e, BN_GENCB *cb);
+
+Deprecated:
+
RSA *RSA_generate_key(int num, unsigned long e,
void (*callback)(int,int,void *), void *cb_arg);
=head1 DESCRIPTION
-RSA_generate_key() generates a key pair and returns it in a newly
-allocated B<RSA> structure. The pseudo-random number generator must
-be seeded prior to calling RSA_generate_key().
+RSA_generate_key_ex() generates a key pair and stores it in the B<RSA>
+structure provided in B<rsa>. The pseudo-random number generator must
+be seeded prior to calling RSA_generate_key_ex().
-The modulus size will be B<num> bits, and the public exponent will be
+The modulus size will be of length B<bits>, and the public exponent will be
B<e>. Key sizes with B<num> E<lt> 1024 should be considered insecure.
The exponent is an odd number, typically 3, 17 or 65537.
A callback function may be used to provide feedback about the
-progress of the key generation. If B<callback> is not B<NULL>, it
-will be called as follows:
+progress of the key generation. If B<cb> is not B<NULL>, it
+will be called as follows using the BN_GENCB_call() function
+described on the L<BN_generate_prime(3)|BN_generate_prime(3)> page.
=over 4
@@ -35,32 +40,38 @@ described in L<BN_generate_prime(3)|BN_generate_prime(3)>.
=item *
When the n-th randomly generated prime is rejected as not
-suitable for the key, B<callback(2, n, cb_arg)> is called.
+suitable for the key, B<BN_GENCB_call(cb, 2, n)> is called.
=item *
When a random p has been found with p-1 relatively prime to B<e>,
-it is called as B<callback(3, 0, cb_arg)>.
+it is called as B<BN_GENCB_call(cb, 3, 0)>.
=back
-The process is then repeated for prime q with B<callback(3, 1, cb_arg)>.
+The process is then repeated for prime q with B<BN_GENCB_call(cb, 3, 1)>.
+
+RSA_generate_key is deprecated (new applications should use
+RSA_generate_key_ex instead). RSA_generate_key works in the same was as
+RSA_generate_key_ex except it uses "old style" call backs. See
+L<BN_generate_prime(3)|BN_generate_prime(3)> for further details.
=head1 RETURN VALUE
-If key generation fails, RSA_generate_key() returns B<NULL>; the
-error codes can be obtained by L<ERR_get_error(3)|ERR_get_error(3)>.
+If key generation fails, RSA_generate_key() returns B<NULL>.
+
+The error codes can be obtained by L<ERR_get_error(3)|ERR_get_error(3)>.
=head1 BUGS
-B<callback(2, x, cb_arg)> is used with two different meanings.
+B<BN_GENCB_call(cb, 2, x)> is used with two different meanings.
RSA_generate_key() goes into an infinite loop for illegal input values.
=head1 SEE ALSO
L<ERR_get_error(3)|ERR_get_error(3)>, L<rand(3)|rand(3)>, L<rsa(3)|rsa(3)>,
-L<RSA_free(3)|RSA_free(3)>
+L<RSA_free(3)|RSA_free(3)>, L<BN_generate_prime(3)|BN_generate_prime(3)>
=head1 HISTORY
diff --git a/crypto/openssl/doc/crypto/SSLeay_version.pod b/crypto/openssl/doc/crypto/SSLeay_version.pod
new file mode 100644
index 0000000..1500c2a
--- /dev/null
+++ b/crypto/openssl/doc/crypto/SSLeay_version.pod
@@ -0,0 +1,74 @@
+=pod
+
+=head1 NAME
+
+SSLeay_version - retrieve version/build information about OpenSSL library
+
+=head1 SYNOPSIS
+
+ #include <openssl/crypto.h>
+
+ const char *SSLeay_version(int type);
+
+=head1 DESCRIPTION
+
+SSLeay_version() returns a pointer to a constant string describing the
+version of the OpenSSL library or giving information about the library
+build.
+
+The following B<type> values are supported:
+
+=over 4
+
+=item SSLEAY_VERSION
+
+The version of the OpenSSL library including the release date.
+
+=item SSLEAY_CFLAGS
+
+The compiler flags set for the compilation process in the form
+"compiler: ..." if available or "compiler: information not available"
+otherwise.
+
+=item SSLEAY_BUILT_ON
+
+The date of the build process in the form "built on: ..." if available
+or "built on: date not available" otherwise.
+
+=item SSLEAY_PLATFORM
+
+The "Configure" target of the library build in the form "platform: ..."
+if available or "platform: information not available" otherwise.
+
+=item SSLEAY_DIR
+
+The "OPENSSLDIR" setting of the library build in the form "OPENSSLDIR: "...""
+if available or "OPENSSLDIR: N/A" otherwise.
+
+=back
+
+=head1 RETURN VALUES
+
+The following return values can occur:
+
+=over 4
+
+=item "not available"
+
+An invalid value for B<type> was given.
+
+=item Pointer to constant string
+
+Textual description.
+
+=back
+
+=head1 SEE ALSO
+
+L<crypto(3)|crypto(3)>
+
+=head1 HISTORY
+
+B<SSLEAY_DIR> was added in OpenSSL 0.9.7.
+
+=cut
diff --git a/crypto/openssl/doc/crypto/X509_NAME_add_entry_by_txt.pod b/crypto/openssl/doc/crypto/X509_NAME_add_entry_by_txt.pod
index 043766c..3bdc07f 100644
--- a/crypto/openssl/doc/crypto/X509_NAME_add_entry_by_txt.pod
+++ b/crypto/openssl/doc/crypto/X509_NAME_add_entry_by_txt.pod
@@ -44,7 +44,7 @@ B<loc>. The deleted entry is returned and must be freed up.
=head1 NOTES
The use of string types such as B<MBSTRING_ASC> or B<MBSTRING_UTF8>
-is strongly recommened for the B<type> parameter. This allows the
+is strongly recommended for the B<type> parameter. This allows the
internal code to correctly determine the type of the field and to
apply length checks according to the relevant standards. This is
done using ASN1_STRING_set_by_NID().
diff --git a/crypto/openssl/doc/crypto/X509_STORE_CTX_get_error.pod b/crypto/openssl/doc/crypto/X509_STORE_CTX_get_error.pod
index 60e8332..be00ff1 100644
--- a/crypto/openssl/doc/crypto/X509_STORE_CTX_get_error.pod
+++ b/crypto/openssl/doc/crypto/X509_STORE_CTX_get_error.pod
@@ -32,7 +32,7 @@ checks.
X509_STORE_CTX_get_error_depth() returns the B<depth> of the error. This is a
non-negative integer representing where in the certificate chain the error
-occurred. If it is zero it occured in the end entity certificate, one if
+occurred. If it is zero it occurred in the end entity certificate, one if
it is the certificate which signed the end entity certificate and so on.
X509_STORE_CTX_get_current_cert() returns the certificate in B<ctx> which
@@ -246,11 +246,11 @@ Some feature of a certificate extension is not supported. Unused.
=item B<X509_V_ERR_PERMITTED_VIOLATION: permitted subtree violation>
-A name constraint violation occured in the permitted subtrees.
+A name constraint violation occurred in the permitted subtrees.
=item B<X509_V_ERR_EXCLUDED_VIOLATION: excluded subtree violation>
-A name constraint violation occured in the excluded subtrees.
+A name constraint violation occurred in the excluded subtrees.
=item B<X509_V_ERR_SUBTREE_MINMAX: name constraints minimum and maximum not supported>
@@ -270,7 +270,7 @@ a garbage extension or some new feature not currently supported.
=item B<X509_V_ERR_CRL_PATH_VALIDATION_ERROR: CRL path validation error>
-An error occured when attempting to verify the CRL path. This error can only
+An error occurred when attempting to verify the CRL path. This error can only
happen if extended CRL checking is enabled.
=item B<X509_V_ERR_APPLICATION_VERIFICATION: application verification failure>
diff --git a/crypto/openssl/doc/crypto/X509_VERIFY_PARAM_set_flags.pod b/crypto/openssl/doc/crypto/X509_VERIFY_PARAM_set_flags.pod
index 9d86d46..44792f9 100644
--- a/crypto/openssl/doc/crypto/X509_VERIFY_PARAM_set_flags.pod
+++ b/crypto/openssl/doc/crypto/X509_VERIFY_PARAM_set_flags.pod
@@ -2,7 +2,7 @@
=head1 NAME
-X509_VERIFY_PARAM_set_flags, X509_VERIFY_PARAM_clear_flags, X509_VERIFY_PARAM_get_flags, X509_VERIFY_PARAM_set_purpose, X509_VERIFY_PARAM_set_trust, X509_VERIFY_PARAM_set_depth, X509_VERIFY_PARAM_get_depth, X509_VERIFY_PARAM_set_time, X509_VERIFY_PARAM_add0_policy, X509_VERIFY_PARAM_set1_policies - X509 verification parameters
+X509_VERIFY_PARAM_set_flags, X509_VERIFY_PARAM_clear_flags, X509_VERIFY_PARAM_get_flags, X509_VERIFY_PARAM_set_purpose, X509_VERIFY_PARAM_set_trust, X509_VERIFY_PARAM_set_depth, X509_VERIFY_PARAM_get_depth, X509_VERIFY_PARAM_set_time, X509_VERIFY_PARAM_add0_policy, X509_VERIFY_PARAM_set1_policies, X509_VERIFY_PARAM_set1_host, X509_VERIFY_PARAM_add1_host, X509_VERIFY_PARAM_set_hostflags, X509_VERIFY_PARAM_get0_peername, X509_VERIFY_PARAM_set1_email, X509_VERIFY_PARAM_set1_ip, X509_VERIFY_PARAM_set1_ip_asc - X509 verification parameters
=head1 SYNOPSIS
@@ -26,6 +26,19 @@ X509_VERIFY_PARAM_set_flags, X509_VERIFY_PARAM_clear_flags, X509_VERIFY_PARAM_ge
void X509_VERIFY_PARAM_set_depth(X509_VERIFY_PARAM *param, int depth);
int X509_VERIFY_PARAM_get_depth(const X509_VERIFY_PARAM *param);
+ int X509_VERIFY_PARAM_set1_host(X509_VERIFY_PARAM *param,
+ const char *name, size_t namelen);
+ int X509_VERIFY_PARAM_add1_host(X509_VERIFY_PARAM *param,
+ const char *name, size_t namelen);
+ void X509_VERIFY_PARAM_set_hostflags(X509_VERIFY_PARAM *param,
+ unsigned int flags);
+ char *X509_VERIFY_PARAM_get0_peername(X509_VERIFY_PARAM *param);
+ int X509_VERIFY_PARAM_set1_email(X509_VERIFY_PARAM *param,
+ const char *email, size_t emaillen);
+ int X509_VERIFY_PARAM_set1_ip(X509_VERIFY_PARAM *param,
+ const unsigned char *ip, size_t iplen);
+ int X509_VERIFY_PARAM_set1_ip_asc(X509_VERIFY_PARAM *param, const char *ipasc);
+
=head1 DESCRIPTION
These functions manipulate the B<X509_VERIFY_PARAM> structure associated with
@@ -61,12 +74,63 @@ X509_VERIFY_PARAM_set_depth() sets the maximum verification depth to B<depth>.
That is the maximum number of untrusted CA certificates that can appear in a
chain.
+X509_VERIFY_PARAM_set1_host() sets the expected DNS hostname to
+B<name> clearing any previously specified host name or names. If
+B<name> is NULL, or empty the list of hostnames is cleared, and
+name checks are not performed on the peer certificate. If B<name>
+is NUL-terminated, B<namelen> may be zero, otherwise B<namelen>
+must be set to the length of B<name>. When a hostname is specified,
+certificate verification automatically invokes L<X509_check_host(3)>
+with flags equal to the B<flags> argument given to
+B<X509_VERIFY_PARAM_set_hostflags()> (default zero). Applications
+are strongly advised to use this interface in preference to explicitly
+calling L<X509_check_host(3)>, hostname checks are out of scope
+with the DANE-EE(3) certificate usage, and the internal check will
+be suppressed as appropriate when DANE support is added to OpenSSL.
+
+X509_VERIFY_PARAM_add1_host() adds B<name> as an additional reference
+identifer that can match the peer's certificate. Any previous names
+set via X509_VERIFY_PARAM_set1_host() or X509_VERIFY_PARAM_add1_host()
+are retained, no change is made if B<name> is NULL or empty. When
+multiple names are configured, the peer is considered verified when
+any name matches.
+
+X509_VERIFY_PARAM_get0_peername() returns the DNS hostname or subject
+CommonName from the peer certificate that matched one of the reference
+identifiers. When wildcard matching is not disabled, or when a
+reference identifier specifies a parent domain (starts with ".")
+rather than a hostname, the peer name may be a wildcard name or a
+sub-domain of the reference identifier respectively. The return
+string is allocated by the library and is no longer valid once the
+associated B<param> argument is freed. Applications must not free
+the return value.
+
+X509_VERIFY_PARAM_set1_email() sets the expected RFC822 email address to
+B<email>. If B<email> is NUL-terminated, B<emaillen> may be zero, otherwise
+B<emaillen> must be set to the length of B<email>. When an email address
+is specified, certificate verification automatically invokes
+L<X509_check_email(3)>.
+
+X509_VERIFY_PARAM_set1_ip() sets the expected IP address to B<ip>.
+The B<ip> argument is in binary format, in network byte-order and
+B<iplen> must be set to 4 for IPv4 and 16 for IPv6. When an IP
+address is specified, certificate verification automatically invokes
+L<X509_check_ip(3)>.
+
+X509_VERIFY_PARAM_set1_ip_asc() sets the expected IP address to
+B<ipasc>. The B<ipasc> argument is a NUL-terminal ASCII string:
+dotted decimal quad for IPv4 and colon-separated hexadecimal for
+IPv6. The condensed "::" notation is supported for IPv6 addresses.
+
=head1 RETURN VALUES
-X509_VERIFY_PARAM_set_flags(), X509_VERIFY_PARAM_clear_flags(),
+X509_VERIFY_PARAM_set_flags(), X509_VERIFY_PARAM_clear_flags(),
X509_VERIFY_PARAM_set_purpose(), X509_VERIFY_PARAM_set_trust(),
-X509_VERIFY_PARAM_add0_policy() and X509_VERIFY_PARAM_set1_policies() return 1
-for success and 0 for failure.
+X509_VERIFY_PARAM_add0_policy() X509_VERIFY_PARAM_set1_policies(),
+X509_VERIFY_PARAM_set1_host(), X509_VERIFY_PARAM_set_hostflags(),
+X509_VERIFY_PARAM_set1_email(), X509_VERIFY_PARAM_set1_ip() and
+X509_VERIFY_PARAM_set1_ip_asc() return 1 for success and 0 for
+failure.
X509_VERIFY_PARAM_get_flags() returns the current verification flags.
@@ -137,7 +201,7 @@ The B<X509_V_FLAG_NO_ALT_CHAINS> flag suppresses checking for alternative
chains. By default, when building a certificate chain, if the first certificate
chain found is not trusted, then OpenSSL will continue to check to see if an
alternative chain can be found that is trusted. With this flag set the behaviour
-will match that of OpenSSL versions prior to 1.0.1n and 1.0.2b.
+will match that of OpenSSL versions prior to 1.0.2b.
=head1 NOTES
@@ -168,10 +232,13 @@ connections associated with an B<SSL_CTX> structure B<ctx>:
=head1 SEE ALSO
-L<X509_verify_cert(3)|X509_verify_cert(3)>
+L<X509_verify_cert(3)|X509_verify_cert(3)>,
+L<X509_check_host(3)|X509_check_host(3)>,
+L<X509_check_email(3)|X509_check_email(3)>,
+L<X509_check_ip(3)|X509_check_ip(3)>
=head1 HISTORY
-The B<X509_V_FLAG_NO_ALT_CHAINS> flag was added in OpenSSL 1.0.1n and 1.0.2b
+The B<X509_V_FLAG_NO_ALT_CHAINS> flag was added in OpenSSL 1.0.2b
=cut
diff --git a/crypto/openssl/doc/crypto/X509_check_host.pod b/crypto/openssl/doc/crypto/X509_check_host.pod
new file mode 100644
index 0000000..0def17a
--- /dev/null
+++ b/crypto/openssl/doc/crypto/X509_check_host.pod
@@ -0,0 +1,140 @@
+=pod
+
+=head1 NAME
+
+X509_check_host, X509_check_email, X509_check_ip, X509_check_ip_asc - X.509 certificate matching
+
+=head1 SYNOPSIS
+
+ #include <openssl/x509.h>
+
+ int X509_check_host(X509 *, const char *name, size_t namelen,
+ unsigned int flags, char **peername);
+ int X509_check_email(X509 *, const char *address, size_t addresslen,
+ unsigned int flags);
+ int X509_check_ip(X509 *, const unsigned char *address, size_t addresslen,
+ unsigned int flags);
+ int X509_check_ip_asc(X509 *, const char *address, unsigned int flags);
+
+=head1 DESCRIPTION
+
+The certificate matching functions are used to check whether a
+certificate matches a given host name, email address, or IP address.
+The validity of the certificate and its trust level has to be checked by
+other means.
+
+X509_check_host() checks if the certificate Subject Alternative
+Name (SAN) or Subject CommonName (CN) matches the specified host
+name, which must be encoded in the preferred name syntax described
+in section 3.5 of RFC 1034. By default, wildcards are supported
+and they match only in the left-most label; but they may match
+part of that label with an explicit prefix or suffix. For example,
+by default, the host B<name> "www.example.com" would match a
+certificate with a SAN or CN value of "*.example.com", "w*.example.com"
+or "*w.example.com".
+
+Per section 6.4.2 of RFC 6125, B<name> values representing international
+domain names must be given in A-label form. The B<namelen> argument
+must be the number of characters in the name string or zero in which
+case the length is calculated with strlen(B<name>). When B<name> starts
+with a dot (e.g ".example.com"), it will be matched by a certificate
+valid for any sub-domain of B<name>, (see also
+B<X509_CHECK_FLAG_SINGLE_LABEL_SUBDOMAINS> below).
+
+When the certificate is matched, and B<peername> is not NULL, a
+pointer to a copy of the matching SAN or CN from the peer certificate
+is stored at the address passed in B<peername>. The application
+is responsible for freeing the peername via OPENSSL_free() when it
+is no longer needed.
+
+X509_check_email() checks if the certificate matches the specified
+email B<address>. Only the mailbox syntax of RFC 822 is supported,
+comments are not allowed, and no attempt is made to normalize quoted
+characters. The B<addresslen> argument must be the number of
+characters in the address string or zero in which case the length
+is calculated with strlen(B<address>).
+
+X509_check_ip() checks if the certificate matches a specified IPv4 or
+IPv6 address. The B<address> array is in binary format, in network
+byte order. The length is either 4 (IPv4) or 16 (IPv6). Only
+explicitly marked addresses in the certificates are considered; IP
+addresses stored in DNS names and Common Names are ignored.
+
+X509_check_ip_asc() is similar, except that the NUL-terminated
+string B<address> is first converted to the internal representation.
+
+The B<flags> argument is usually 0. It can be the bitwise OR of the
+flags:
+
+=over 4
+
+=item B<X509_CHECK_FLAG_ALWAYS_CHECK_SUBJECT>,
+
+=item B<X509_CHECK_FLAG_NO_WILDCARDS>,
+
+=item B<X509_CHECK_FLAG_NO_PARTIAL_WILDCARDS>,
+
+=item B<X509_CHECK_FLAG_MULTI_LABEL_WILDCARDS>.
+
+=item B<X509_CHECK_FLAG_SINGLE_LABEL_SUBDOMAINS>.
+
+=back
+
+The B<X509_CHECK_FLAG_ALWAYS_CHECK_SUBJECT> flag causes the function
+to consider the subject DN even if the certificate contains at least
+one subject alternative name of the right type (DNS name or email
+address as appropriate); the default is to ignore the subject DN
+when at least one corresponding subject alternative names is present.
+
+If set, B<X509_CHECK_FLAG_NO_WILDCARDS> disables wildcard
+expansion; this only applies to B<X509_check_host>.
+
+If set, B<X509_CHECK_FLAG_NO_PARTIAL_WILDCARDS> suppresses support
+for "*" as wildcard pattern in labels that have a prefix or suffix,
+such as: "www*" or "*www"; this only aplies to B<X509_check_host>.
+
+If set, B<X509_CHECK_FLAG_MULTI_LABEL_WILDCARDS> allows a "*" that
+constitutes the complete label of a DNS name (e.g. "*.example.com")
+to match more than one label in B<name>; this flag only applies
+to B<X509_check_host>.
+
+If set, B<X509_CHECK_FLAG_SINGLE_LABEL_SUBDOMAINS> restricts B<name>
+values which start with ".", that would otherwise match any sub-domain
+in the peer certificate, to only match direct child sub-domains.
+Thus, for instance, with this flag set a B<name> of ".example.com"
+would match a peer certificate with a DNS name of "www.example.com",
+but would not match a peer certificate with a DNS name of
+"www.sub.example.com"; this flag only applies to B<X509_check_host>.
+
+=head1 RETURN VALUES
+
+The functions return 1 for a successful match, 0 for a failed match
+and -1 for an internal error: typically a memory allocation failure
+or an ASN.1 decoding error.
+
+All functions can also return -2 if the input is malformed. For example,
+X509_check_host() returns -2 if the provided B<name> contains embedded
+NULs.
+
+=head1 NOTES
+
+Applications are encouraged to use X509_VERIFY_PARAM_set1_host()
+rather than explicitly calling L<X509_check_host(3)>. Host name
+checks are out of scope with the DANE-EE(3) certificate usage,
+and the internal checks will be suppressed as appropriate when
+DANE support is added to OpenSSL.
+
+=head1 SEE ALSO
+
+L<SSL_get_verify_result(3)|SSL_get_verify_result(3)>,
+L<X509_VERIFY_PARAM_set1_host(3)|X509_VERIFY_PARAM_set1_host(3)>,
+L<X509_VERIFY_PARAM_add1_host(3)|X509_VERIFY_PARAM_add1_host(3)>,
+L<X509_VERIFY_PARAM_set1_email(3)|X509_VERIFY_PARAM_set1_email(3)>,
+L<X509_VERIFY_PARAM_set1_ip(3)|X509_VERIFY_PARAM_set1_ip(3)>,
+L<X509_VERIFY_PARAM_set1_ipasc(3)|X509_VERIFY_PARAM_set1_ipasc(3)>
+
+=head1 HISTORY
+
+These functions were added in OpenSSL 1.1.0.
+
+=cut
diff --git a/crypto/openssl/doc/crypto/crypto.pod b/crypto/openssl/doc/crypto/crypto.pod
index 7a52799..f18edfe 100644
--- a/crypto/openssl/doc/crypto/crypto.pod
+++ b/crypto/openssl/doc/crypto/crypto.pod
@@ -56,7 +56,7 @@ L<pkcs7(3)|pkcs7(3)>, L<pkcs12(3)|pkcs12(3)>
=item INTERNAL FUNCTIONS
-L<bn(3)|bn(3)>, L<buffer(3)|buffer(3)>, L<lhash(3)|lhash(3)>,
+L<bn(3)|bn(3)>, L<buffer(3)|buffer(3)>, L<ec(3)|ec(3)>, L<lhash(3)|lhash(3)>,
L<objects(3)|objects(3)>, L<stack(3)|stack(3)>,
L<txt_db(3)|txt_db(3)>
diff --git a/crypto/openssl/doc/crypto/d2i_DSAPublicKey.pod b/crypto/openssl/doc/crypto/d2i_DSAPublicKey.pod
index 22c1b50..e999376 100644
--- a/crypto/openssl/doc/crypto/d2i_DSAPublicKey.pod
+++ b/crypto/openssl/doc/crypto/d2i_DSAPublicKey.pod
@@ -3,7 +3,7 @@
=head1 NAME
d2i_DSAPublicKey, i2d_DSAPublicKey, d2i_DSAPrivateKey, i2d_DSAPrivateKey,
-d2i_DSA_PUBKEY, i2d_DSA_PUBKEY, d2i_DSA_SIG, i2d_DSA_SIG - DSA key encoding
+d2i_DSA_PUBKEY, i2d_DSA_PUBKEY, d2i_DSAparams, i2d_DSAparams, d2i_DSA_SIG, i2d_DSA_SIG - DSA key encoding
and parsing functions.
=head1 SYNOPSIS
diff --git a/crypto/openssl/doc/crypto/d2i_ECPKParameters.pod b/crypto/openssl/doc/crypto/d2i_ECPKParameters.pod
new file mode 100644
index 0000000..704b4ab
--- /dev/null
+++ b/crypto/openssl/doc/crypto/d2i_ECPKParameters.pod
@@ -0,0 +1,84 @@
+=pod
+
+=head1 NAME
+
+d2i_ECPKParameters, i2d_ECPKParameters, d2i_ECPKParameters_bio, i2d_ECPKParameters_bio, d2i_ECPKParameters_fp, i2d_ECPKParameters_fp, ECPKParameters_print, ECPKParameters_print_fp - Functions for decoding and encoding ASN1 representations of elliptic curve entities
+
+=head1 SYNOPSIS
+
+ #include <openssl/ec.h>
+
+ EC_GROUP *d2i_ECPKParameters(EC_GROUP **px, const unsigned char **in, long len);
+ int i2d_ECPKParameters(const EC_GROUP *x, unsigned char **out);
+ #define d2i_ECPKParameters_bio(bp,x) ASN1_d2i_bio_of(EC_GROUP,NULL,d2i_ECPKParameters,bp,x)
+ #define i2d_ECPKParameters_bio(bp,x) ASN1_i2d_bio_of_const(EC_GROUP,i2d_ECPKParameters,bp,x)
+ #define d2i_ECPKParameters_fp(fp,x) (EC_GROUP *)ASN1_d2i_fp(NULL, \
+ (char *(*)())d2i_ECPKParameters,(fp),(unsigned char **)(x))
+ #define i2d_ECPKParameters_fp(fp,x) ASN1_i2d_fp(i2d_ECPKParameters,(fp), \
+ (unsigned char *)(x))
+ int ECPKParameters_print(BIO *bp, const EC_GROUP *x, int off);
+ int ECPKParameters_print_fp(FILE *fp, const EC_GROUP *x, int off);
+
+
+=head1 DESCRIPTION
+
+The ECPKParameters encode and decode routines encode and parse the public parameters for an
+B<EC_GROUP> structure, which represents a curve.
+
+d2i_ECPKParameters() attempts to decode B<len> bytes at B<*in>. If
+successful a pointer to the B<EC_GROUP> structure is returned. If an error
+occurred then B<NULL> is returned. If B<px> is not B<NULL> then the
+returned structure is written to B<*px>. If B<*px> is not B<NULL>
+then it is assumed that B<*px> contains a valid B<EC_GROUP>
+structure and an attempt is made to reuse it. If the call is
+successful B<*in> is incremented to the byte following the
+parsed data.
+
+i2d_ECPKParameters() encodes the structure pointed to by B<x> into DER format.
+If B<out> is not B<NULL> is writes the DER encoded data to the buffer
+at B<*out>, and increments it to point after the data just written.
+If the return value is negative an error occurred, otherwise it
+returns the length of the encoded data.
+
+If B<*out> is B<NULL> memory will be allocated for a buffer and the encoded
+data written to it. In this case B<*out> is not incremented and it points to
+the start of the data just written.
+
+d2i_ECPKParameters_bio() is similar to d2i_ECPKParameters() except it attempts
+to parse data from BIO B<bp>.
+
+d2i_ECPKParameters_fp() is similar to d2i_ECPKParameters() except it attempts
+to parse data from FILE pointer B<fp>.
+
+i2d_ECPKParameters_bio() is similar to i2d_ECPKParameters() except it writes
+the encoding of the structure B<x> to BIO B<bp> and it
+returns 1 for success and 0 for failure.
+
+i2d_ECPKParameters_fp() is similar to i2d_ECPKParameters() except it writes
+the encoding of the structure B<x> to BIO B<bp> and it
+returns 1 for success and 0 for failure.
+
+These functions are very similar to the X509 functions described in L<d2i_X509(3)|d2i_X509(3)>,
+where further notes and examples are available.
+
+The ECPKParameters_print and ECPKParameters_print_fp functions print a human-readable output
+of the public parameters of the EC_GROUP to B<bp> or B<fp>. The output lines are indented by B<off> spaces.
+
+=head1 RETURN VALUES
+
+d2i_ECPKParameters(), d2i_ECPKParameters_bio() and d2i_ECPKParameters_fp() return a valid B<EC_GROUP> structure
+or B<NULL> if an error occurs.
+
+i2d_ECPKParameters() returns the number of bytes successfully encoded or a negative
+value if an error occurs.
+
+i2d_ECPKParameters_bio(), i2d_ECPKParameters_fp(), ECPKParameters_print and ECPKParameters_print_fp
+return 1 for success and 0 if an error occurs.
+
+=head1 SEE ALSO
+
+L<crypto(3)|crypto(3)>, L<ec(3)|ec(3)>, L<EC_GROUP_new(3)|EC_GROUP_new(3)>, L<EC_GROUP_copy(3)|EC_GROUP_copy(3)>,
+L<EC_POINT_new(3)|EC_POINT_new(3)>, L<EC_POINT_add(3)|EC_POINT_add(3)>, L<EC_KEY_new(3)|EC_KEY_new(3)>,
+L<EC_GFp_simple_method(3)|EC_GFp_simple_method(3)>, L<d2i_X509(3)|d2i_X509(3)>
+
+=cut
diff --git a/crypto/openssl/doc/crypto/d2i_X509.pod b/crypto/openssl/doc/crypto/d2i_X509.pod
index e3dc238..5b7c16f 100644
--- a/crypto/openssl/doc/crypto/d2i_X509.pod
+++ b/crypto/openssl/doc/crypto/d2i_X509.pod
@@ -18,6 +18,8 @@ i2d_X509_fp - X509 encode and decode functions
int i2d_X509_bio(BIO *bp, X509 *x);
int i2d_X509_fp(FILE *fp, X509 *x);
+ int i2d_re_X509_tbs(X509 *x, unsigned char **out);
+
=head1 DESCRIPTION
The X509 encode and decode routines encode and parse an
@@ -60,11 +62,17 @@ i2d_X509_fp() is similar to i2d_X509() except it writes
the encoding of the structure B<x> to BIO B<bp> and it
returns 1 for success and 0 for failure.
+i2d_re_X509_tbs() is similar to i2d_X509() except it encodes
+only the TBSCertificate portion of the certificate.
+
=head1 NOTES
The letters B<i> and B<d> in for example B<i2d_X509> stand for
-"internal" (that is an internal C structure) and "DER". So that
-B<i2d_X509> converts from internal to DER.
+"internal" (that is an internal C structure) and "DER". So
+B<i2d_X509> converts from internal to DER. The "re" in
+B<i2d_re_X509_tbs> stands for "re-encode", and ensures that a fresh
+encoding is generated in case the object has been modified after
+creation (see the BUGS section).
The functions can also understand B<BER> forms.
@@ -209,6 +217,21 @@ fields entirely and will not be parsed by d2i_X509(). This may be
fixed in future so code should not assume that i2d_X509() will
always succeed.
+The encoding of the TBSCertificate portion of a certificate is cached
+in the B<X509> structure internally to improve encoding performance
+and to ensure certificate signatures are verified correctly in some
+certificates with broken (non-DER) encodings.
+
+Any function which encodes an X509 structure such as i2d_X509(),
+i2d_X509_fp() or i2d_X509_bio() may return a stale encoding if the
+B<X509> structure has been modified after deserialization or previous
+serialization.
+
+If, after modification, the B<X509> object is re-signed with X509_sign(),
+the encoding is automatically renewed. Otherwise, the encoding of the
+TBSCertificate portion of the B<X509> can be manually renewed by calling
+i2d_re_X509_tbs().
+
=head1 RETURN VALUES
d2i_X509(), d2i_X509_bio() and d2i_X509_fp() return a valid B<X509> structure
diff --git a/crypto/openssl/doc/crypto/d2i_X509_CRL.pod b/crypto/openssl/doc/crypto/d2i_X509_CRL.pod
index 224f9e0..675d38b 100644
--- a/crypto/openssl/doc/crypto/d2i_X509_CRL.pod
+++ b/crypto/openssl/doc/crypto/d2i_X509_CRL.pod
@@ -2,7 +2,7 @@
=head1 NAME
-d2i_X509_CRL, i2d_X509_CRL, d2i_X509_CRL_bio, d2i_509_CRL_fp,
+d2i_X509_CRL, i2d_X509_CRL, d2i_X509_CRL_bio, d2i_X509_CRL_fp,
i2d_X509_CRL_bio, i2d_X509_CRL_fp - PKCS#10 certificate request functions.
=head1 SYNOPSIS
diff --git a/crypto/openssl/doc/crypto/ec.pod b/crypto/openssl/doc/crypto/ec.pod
new file mode 100644
index 0000000..7d57ba8
--- /dev/null
+++ b/crypto/openssl/doc/crypto/ec.pod
@@ -0,0 +1,201 @@
+=pod
+
+=head1 NAME
+
+ec - Elliptic Curve functions
+
+=head1 SYNOPSIS
+
+ #include <openssl/ec.h>
+ #include <openssl/bn.h>
+
+ const EC_METHOD *EC_GFp_simple_method(void);
+ const EC_METHOD *EC_GFp_mont_method(void);
+ const EC_METHOD *EC_GFp_nist_method(void);
+ const EC_METHOD *EC_GFp_nistp224_method(void);
+ const EC_METHOD *EC_GFp_nistp256_method(void);
+ const EC_METHOD *EC_GFp_nistp521_method(void);
+
+ const EC_METHOD *EC_GF2m_simple_method(void);
+
+ EC_GROUP *EC_GROUP_new(const EC_METHOD *meth);
+ void EC_GROUP_free(EC_GROUP *group);
+ void EC_GROUP_clear_free(EC_GROUP *group);
+ int EC_GROUP_copy(EC_GROUP *dst, const EC_GROUP *src);
+ EC_GROUP *EC_GROUP_dup(const EC_GROUP *src);
+ const EC_METHOD *EC_GROUP_method_of(const EC_GROUP *group);
+ int EC_METHOD_get_field_type(const EC_METHOD *meth);
+ int EC_GROUP_set_generator(EC_GROUP *group, const EC_POINT *generator, const BIGNUM *order, const BIGNUM *cofactor);
+ const EC_POINT *EC_GROUP_get0_generator(const EC_GROUP *group);
+ int EC_GROUP_get_order(const EC_GROUP *group, BIGNUM *order, BN_CTX *ctx);
+ int EC_GROUP_get_cofactor(const EC_GROUP *group, BIGNUM *cofactor, BN_CTX *ctx);
+ void EC_GROUP_set_curve_name(EC_GROUP *group, int nid);
+ int EC_GROUP_get_curve_name(const EC_GROUP *group);
+ void EC_GROUP_set_asn1_flag(EC_GROUP *group, int flag);
+ int EC_GROUP_get_asn1_flag(const EC_GROUP *group);
+ void EC_GROUP_set_point_conversion_form(EC_GROUP *group, point_conversion_form_t form);
+ point_conversion_form_t EC_GROUP_get_point_conversion_form(const EC_GROUP *);
+ unsigned char *EC_GROUP_get0_seed(const EC_GROUP *x);
+ size_t EC_GROUP_get_seed_len(const EC_GROUP *);
+ size_t EC_GROUP_set_seed(EC_GROUP *, const unsigned char *, size_t len);
+ int EC_GROUP_set_curve_GFp(EC_GROUP *group, const BIGNUM *p, const BIGNUM *a, const BIGNUM *b, BN_CTX *ctx);
+ int EC_GROUP_get_curve_GFp(const EC_GROUP *group, BIGNUM *p, BIGNUM *a, BIGNUM *b, BN_CTX *ctx);
+ int EC_GROUP_set_curve_GF2m(EC_GROUP *group, const BIGNUM *p, const BIGNUM *a, const BIGNUM *b, BN_CTX *ctx);
+ int EC_GROUP_get_curve_GF2m(const EC_GROUP *group, BIGNUM *p, BIGNUM *a, BIGNUM *b, BN_CTX *ctx);
+ int EC_GROUP_get_degree(const EC_GROUP *group);
+ int EC_GROUP_check(const EC_GROUP *group, BN_CTX *ctx);
+ int EC_GROUP_check_discriminant(const EC_GROUP *group, BN_CTX *ctx);
+ int EC_GROUP_cmp(const EC_GROUP *a, const EC_GROUP *b, BN_CTX *ctx);
+ EC_GROUP *EC_GROUP_new_curve_GFp(const BIGNUM *p, const BIGNUM *a, const BIGNUM *b, BN_CTX *ctx);
+ EC_GROUP *EC_GROUP_new_curve_GF2m(const BIGNUM *p, const BIGNUM *a, const BIGNUM *b, BN_CTX *ctx);
+ EC_GROUP *EC_GROUP_new_by_curve_name(int nid);
+
+ size_t EC_get_builtin_curves(EC_builtin_curve *r, size_t nitems);
+
+ EC_POINT *EC_POINT_new(const EC_GROUP *group);
+ void EC_POINT_free(EC_POINT *point);
+ void EC_POINT_clear_free(EC_POINT *point);
+ int EC_POINT_copy(EC_POINT *dst, const EC_POINT *src);
+ EC_POINT *EC_POINT_dup(const EC_POINT *src, const EC_GROUP *group);
+ const EC_METHOD *EC_POINT_method_of(const EC_POINT *point);
+ int EC_POINT_set_to_infinity(const EC_GROUP *group, EC_POINT *point);
+ int EC_POINT_set_Jprojective_coordinates_GFp(const EC_GROUP *group, EC_POINT *p,
+ const BIGNUM *x, const BIGNUM *y, const BIGNUM *z, BN_CTX *ctx);
+ int EC_POINT_get_Jprojective_coordinates_GFp(const EC_GROUP *group,
+ const EC_POINT *p, BIGNUM *x, BIGNUM *y, BIGNUM *z, BN_CTX *ctx);
+ int EC_POINT_set_affine_coordinates_GFp(const EC_GROUP *group, EC_POINT *p,
+ const BIGNUM *x, const BIGNUM *y, BN_CTX *ctx);
+ int EC_POINT_get_affine_coordinates_GFp(const EC_GROUP *group,
+ const EC_POINT *p, BIGNUM *x, BIGNUM *y, BN_CTX *ctx);
+ int EC_POINT_set_compressed_coordinates_GFp(const EC_GROUP *group, EC_POINT *p,
+ const BIGNUM *x, int y_bit, BN_CTX *ctx);
+ int EC_POINT_set_affine_coordinates_GF2m(const EC_GROUP *group, EC_POINT *p,
+ const BIGNUM *x, const BIGNUM *y, BN_CTX *ctx);
+ int EC_POINT_get_affine_coordinates_GF2m(const EC_GROUP *group,
+ const EC_POINT *p, BIGNUM *x, BIGNUM *y, BN_CTX *ctx);
+ int EC_POINT_set_compressed_coordinates_GF2m(const EC_GROUP *group, EC_POINT *p,
+ const BIGNUM *x, int y_bit, BN_CTX *ctx);
+ size_t EC_POINT_point2oct(const EC_GROUP *group, const EC_POINT *p,
+ point_conversion_form_t form,
+ unsigned char *buf, size_t len, BN_CTX *ctx);
+ int EC_POINT_oct2point(const EC_GROUP *group, EC_POINT *p,
+ const unsigned char *buf, size_t len, BN_CTX *ctx);
+ BIGNUM *EC_POINT_point2bn(const EC_GROUP *, const EC_POINT *,
+ point_conversion_form_t form, BIGNUM *, BN_CTX *);
+ EC_POINT *EC_POINT_bn2point(const EC_GROUP *, const BIGNUM *,
+ EC_POINT *, BN_CTX *);
+ char *EC_POINT_point2hex(const EC_GROUP *, const EC_POINT *,
+ point_conversion_form_t form, BN_CTX *);
+ EC_POINT *EC_POINT_hex2point(const EC_GROUP *, const char *,
+ EC_POINT *, BN_CTX *);
+
+ int EC_POINT_add(const EC_GROUP *group, EC_POINT *r, const EC_POINT *a, const EC_POINT *b, BN_CTX *ctx);
+ int EC_POINT_dbl(const EC_GROUP *group, EC_POINT *r, const EC_POINT *a, BN_CTX *ctx);
+ int EC_POINT_invert(const EC_GROUP *group, EC_POINT *a, BN_CTX *ctx);
+ int EC_POINT_is_at_infinity(const EC_GROUP *group, const EC_POINT *p);
+ int EC_POINT_is_on_curve(const EC_GROUP *group, const EC_POINT *point, BN_CTX *ctx);
+ int EC_POINT_cmp(const EC_GROUP *group, const EC_POINT *a, const EC_POINT *b, BN_CTX *ctx);
+ int EC_POINT_make_affine(const EC_GROUP *group, EC_POINT *point, BN_CTX *ctx);
+ int EC_POINTs_make_affine(const EC_GROUP *group, size_t num, EC_POINT *points[], BN_CTX *ctx);
+ int EC_POINTs_mul(const EC_GROUP *group, EC_POINT *r, const BIGNUM *n, size_t num, const EC_POINT *p[], const BIGNUM *m[], BN_CTX *ctx);
+ int EC_POINT_mul(const EC_GROUP *group, EC_POINT *r, const BIGNUM *n, const EC_POINT *q, const BIGNUM *m, BN_CTX *ctx);
+ int EC_GROUP_precompute_mult(EC_GROUP *group, BN_CTX *ctx);
+ int EC_GROUP_have_precompute_mult(const EC_GROUP *group);
+
+ int EC_GROUP_get_basis_type(const EC_GROUP *);
+ int EC_GROUP_get_trinomial_basis(const EC_GROUP *, unsigned int *k);
+ int EC_GROUP_get_pentanomial_basis(const EC_GROUP *, unsigned int *k1,
+ unsigned int *k2, unsigned int *k3);
+ EC_GROUP *d2i_ECPKParameters(EC_GROUP **, const unsigned char **in, long len);
+ int i2d_ECPKParameters(const EC_GROUP *, unsigned char **out);
+ #define d2i_ECPKParameters_bio(bp,x) ASN1_d2i_bio_of(EC_GROUP,NULL,d2i_ECPKParameters,bp,x)
+ #define i2d_ECPKParameters_bio(bp,x) ASN1_i2d_bio_of_const(EC_GROUP,i2d_ECPKParameters,bp,x)
+ #define d2i_ECPKParameters_fp(fp,x) (EC_GROUP *)ASN1_d2i_fp(NULL, \
+ (char *(*)())d2i_ECPKParameters,(fp),(unsigned char **)(x))
+ #define i2d_ECPKParameters_fp(fp,x) ASN1_i2d_fp(i2d_ECPKParameters,(fp), \
+ (unsigned char *)(x))
+ int ECPKParameters_print(BIO *bp, const EC_GROUP *x, int off);
+ int ECPKParameters_print_fp(FILE *fp, const EC_GROUP *x, int off);
+
+ EC_KEY *EC_KEY_new(void);
+ int EC_KEY_get_flags(const EC_KEY *key);
+ void EC_KEY_set_flags(EC_KEY *key, int flags);
+ void EC_KEY_clear_flags(EC_KEY *key, int flags);
+ EC_KEY *EC_KEY_new_by_curve_name(int nid);
+ void EC_KEY_free(EC_KEY *key);
+ EC_KEY *EC_KEY_copy(EC_KEY *dst, const EC_KEY *src);
+ EC_KEY *EC_KEY_dup(const EC_KEY *src);
+ int EC_KEY_up_ref(EC_KEY *key);
+ const EC_GROUP *EC_KEY_get0_group(const EC_KEY *key);
+ int EC_KEY_set_group(EC_KEY *key, const EC_GROUP *group);
+ const BIGNUM *EC_KEY_get0_private_key(const EC_KEY *key);
+ int EC_KEY_set_private_key(EC_KEY *key, const BIGNUM *prv);
+ const EC_POINT *EC_KEY_get0_public_key(const EC_KEY *key);
+ int EC_KEY_set_public_key(EC_KEY *key, const EC_POINT *pub);
+ unsigned EC_KEY_get_enc_flags(const EC_KEY *key);
+ void EC_KEY_set_enc_flags(EC_KEY *eckey, unsigned int flags);
+ point_conversion_form_t EC_KEY_get_conv_form(const EC_KEY *key);
+ void EC_KEY_set_conv_form(EC_KEY *eckey, point_conversion_form_t cform);
+ void *EC_KEY_get_key_method_data(EC_KEY *key,
+ void *(*dup_func)(void *), void (*free_func)(void *), void (*clear_free_func)(void *));
+ void EC_KEY_insert_key_method_data(EC_KEY *key, void *data,
+ void *(*dup_func)(void *), void (*free_func)(void *), void (*clear_free_func)(void *));
+ void EC_KEY_set_asn1_flag(EC_KEY *eckey, int asn1_flag);
+ int EC_KEY_precompute_mult(EC_KEY *key, BN_CTX *ctx);
+ int EC_KEY_generate_key(EC_KEY *key);
+ int EC_KEY_check_key(const EC_KEY *key);
+ int EC_KEY_set_public_key_affine_coordinates(EC_KEY *key, BIGNUM *x, BIGNUM *y);
+
+ EC_KEY *d2i_ECPrivateKey(EC_KEY **key, const unsigned char **in, long len);
+ int i2d_ECPrivateKey(EC_KEY *key, unsigned char **out);
+
+ EC_KEY *d2i_ECParameters(EC_KEY **key, const unsigned char **in, long len);
+ int i2d_ECParameters(EC_KEY *key, unsigned char **out);
+
+ EC_KEY *o2i_ECPublicKey(EC_KEY **key, const unsigned char **in, long len);
+ int i2o_ECPublicKey(EC_KEY *key, unsigned char **out);
+ int ECParameters_print(BIO *bp, const EC_KEY *key);
+ int EC_KEY_print(BIO *bp, const EC_KEY *key, int off);
+ int ECParameters_print_fp(FILE *fp, const EC_KEY *key);
+ int EC_KEY_print_fp(FILE *fp, const EC_KEY *key, int off);
+ #define ECParameters_dup(x) ASN1_dup_of(EC_KEY,i2d_ECParameters,d2i_ECParameters,x)
+ #define EVP_PKEY_CTX_set_ec_paramgen_curve_nid(ctx, nid) \
+ EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, EVP_PKEY_OP_PARAMGEN, \
+ EVP_PKEY_CTRL_EC_PARAMGEN_CURVE_NID, nid, NULL)
+
+
+=head1 DESCRIPTION
+
+This library provides an extensive set of functions for performing operations on elliptic curves over finite fields.
+In general an elliptic curve is one with an equation of the form:
+
+y^2 = x^3 + ax + b
+
+An B<EC_GROUP> structure is used to represent the definition of an elliptic curve. Points on a curve are stored using an
+B<EC_POINT> structure. An B<EC_KEY> is used to hold a private/public key pair, where a private key is simply a BIGNUM and a
+public key is a point on a curve (represented by an B<EC_POINT>).
+
+The library contains a number of alternative implementations of the different functions. Each implementation is optimised
+for different scenarios. No matter which implementation is being used, the interface remains the same. The library
+handles calling the correct implementation when an interface function is invoked. An implementation is represented by
+an B<EC_METHOD> structure.
+
+The creation and destruction of B<EC_GROUP> objects is described in L<EC_GROUP_new(3)|EC_GROUP_new(3)>. Functions for
+manipulating B<EC_GROUP> objects are described in L<EC_GROUP_copy(3)|EC_GROUP_copy(3)>.
+
+Functions for creating, destroying and manipulating B<EC_POINT> objects are explained in L<EC_POINT_new(3)|EC_POINT_new(3)>,
+whilst functions for performing mathematical operations and tests on B<EC_POINTs> are coverd in L<EC_POINT_add(3)|EC_POINT_add(3)>.
+
+For working with private and public keys refer to L<EC_KEY_new(3)|EC_KEY_new(3)>. Implementations are covered in
+L<EC_GFp_simple_method(3)|EC_GFp_simple_method(3)>.
+
+For information on encoding and decoding curve parameters to and from ASN1 see L<d2i_ECPKParameters(3)|d2i_ECPKParameters(3)>.
+
+=head1 SEE ALSO
+
+L<crypto(3)|crypto(3)>, L<EC_GROUP_new(3)|EC_GROUP_new(3)>, L<EC_GROUP_copy(3)|EC_GROUP_copy(3)>,
+L<EC_POINT_new(3)|EC_POINT_new(3)>, L<EC_POINT_add(3)|EC_POINT_add(3)>, L<EC_KEY_new(3)|EC_KEY_new(3)>,
+L<EC_GFp_simple_method(3)|EC_GFp_simple_method(3)>, L<d2i_ECPKParameters(3)|d2i_ECPKParameters(3)>
+
+
+=cut
diff --git a/crypto/openssl/doc/crypto/ecdsa.pod b/crypto/openssl/doc/crypto/ecdsa.pod
index 59a5916..46c071b 100644
--- a/crypto/openssl/doc/crypto/ecdsa.pod
+++ b/crypto/openssl/doc/crypto/ecdsa.pod
@@ -2,7 +2,7 @@
=head1 NAME
-ecdsa - Elliptic Curve Digital Signature Algorithm
+ECDSA_SIG_new, ECDSA_SIG_free, i2d_ECDSA_SIG, d2i_ECDSA_SIG, ECDSA_size, ECDSA_sign_setup, ECDSA_sign, ECDSA_sign_ex, ECDSA_verify, ECDSA_do_sign, ECDSA_do_sign_ex, ECDSA_do_verify - Elliptic Curve Digital Signature Algorithm
=head1 SYNOPSIS
diff --git a/crypto/openssl/doc/crypto/evp.pod b/crypto/openssl/doc/crypto/evp.pod
index 9faa349..29fab9f 100644
--- a/crypto/openssl/doc/crypto/evp.pod
+++ b/crypto/openssl/doc/crypto/evp.pod
@@ -13,22 +13,58 @@ evp - high-level cryptographic functions
The EVP library provides a high-level interface to cryptographic
functions.
-B<EVP_Seal>I<...> and B<EVP_Open>I<...> provide public key encryption
-and decryption to implement digital "envelopes".
+L<B<EVP_Seal>I<...>|EVP_SealInit(3)> and L<B<EVP_Open>I<...>|EVP_OpenInit(3)>
+provide public key encryption and decryption to implement digital "envelopes".
-The B<EVP_Sign>I<...> and B<EVP_Verify>I<...> functions implement
-digital signatures.
+The L<B<EVP_DigestSign>I<...>|EVP_DigestSignInit(3)> and
+L<B<EVP_DigestVerify>I<...>|EVP_DigestVerifyInit(3)> functions implement
+digital signatures and Message Authentication Codes (MACs). Also see the older
+L<B<EVP_Sign>I<...>|EVP_SignInit(3)> and L<B<EVP_Verify>I<...>|EVP_VerifyInit(3)>
+functions.
-Symmetric encryption is available with the B<EVP_Encrypt>I<...>
-functions. The B<EVP_Digest>I<...> functions provide message digests.
+Symmetric encryption is available with the L<B<EVP_Encrypt>I<...>|EVP_EncryptInit(3)>
+functions. The L<B<EVP_Digest>I<...>|EVP_DigestInit(3)> functions provide message digests.
The B<EVP_PKEY>I<...> functions provide a high level interface to
-asymmetric algorithms.
+asymmetric algorithms. To create a new EVP_PKEY see
+L<EVP_PKEY_new(3)|EVP_PKEY_new(3)>. EVP_PKEYs can be associated
+with a private key of a particular algorithm by using the functions
+described on the L<EVP_PKEY_set1_RSA(3)|EVP_PKEY_set1_RSA(3)> page, or
+new keys can be generated using L<EVP_PKEY_keygen(3)|EVP_PKEY_keygen(3)>.
+EVP_PKEYs can be compared using L<EVP_PKEY_cmp(3)|EVP_PKEY_cmp(3)>, or printed using
+L<EVP_PKEY_print_private(3)|EVP_PKEY_print_private(3)>.
+
+The EVP_PKEY functions support the full range of asymmetric algorithm operations:
+
+=over
+
+=item For key agreement see L<EVP_PKEY_derive(3)|EVP_PKEY_derive(3)>
+
+=item For signing and verifying see L<EVP_PKEY_sign(3)|EVP_PKEY_sign(3)>,
+L<EVP_PKEY_verify(3)|EVP_PKEY_verify(3)> and L<EVP_PKEY_verify_recover(3)|EVP_PKEY_verify_recover(3)>.
+However, note that
+these functions do not perform a digest of the data to be signed. Therefore
+normally you would use the L<B<EVP_DigestSign>I<...>|EVP_DigestSignInit(3)>
+functions for this purpose.
+
+=item For encryption and decryption see L<EVP_PKEY_encrypt(3)|EVP_PKEY_encrypt(3)>
+and L<EVP_PKEY_decrypt(3)|EVP_PKEY_decrypt(3)> respectively. However, note that
+these functions perform encryption and decryption only. As public key
+encryption is an expensive operation, normally you would wrap
+an encrypted message in a "digital envelope" using the L<B<EVP_Seal>I<...>|EVP_SealInit(3)> and
+L<B<EVP_Open>I<...>|EVP_OpenInit(3)> functions.
+
+=back
+
+The L<EVP_BytesToKey(3)|EVP_BytesToKey(3)> function provides some limited support for password
+based encryption. Careful selection of the parameters will provide a PKCS#5 PBKDF1 compatible
+implementation. However, new applications should not typically use this (preferring, for example,
+PBKDF2 from PCKS#5).
-Algorithms are loaded with OpenSSL_add_all_algorithms(3).
+Algorithms are loaded with L<OpenSSL_add_all_algorithms(3)|OpenSSL_add_all_algorithms(3)>.
All the symmetric algorithms (ciphers), digests and asymmetric algorithms
-(public key algorithms) can be replaced by ENGINE modules providing alternative
+(public key algorithms) can be replaced by L<ENGINE|engine(3)> modules providing alternative
implementations. If ENGINE implementations of ciphers or digests are registered
as defaults, then the various EVP functions will automatically use those
implementations automatically in preference to built in software
@@ -47,8 +83,20 @@ L<EVP_DigestInit(3)|EVP_DigestInit(3)>,
L<EVP_EncryptInit(3)|EVP_EncryptInit(3)>,
L<EVP_OpenInit(3)|EVP_OpenInit(3)>,
L<EVP_SealInit(3)|EVP_SealInit(3)>,
+L<EVP_DigestSignInit(3)|EVP_DigestSignInit(3)>,
L<EVP_SignInit(3)|EVP_SignInit(3)>,
L<EVP_VerifyInit(3)|EVP_VerifyInit(3)>,
+L<EVP_PKEY_new(3)|EVP_PKEY_new(3)>,
+L<EVP_PKEY_set1_RSA(3)|EVP_PKEY_set1_RSA(3)>,
+L<EVP_PKEY_keygen(3)|EVP_PKEY_keygen(3)>,
+L<EVP_PKEY_print_private(3)|EVP_PKEY_print_private(3)>,
+L<EVP_PKEY_decrypt(3)|EVP_PKEY_decrypt(3)>,
+L<EVP_PKEY_encrypt(3)|EVP_PKEY_encrypt(3)>,
+L<EVP_PKEY_sign(3)|EVP_PKEY_sign(3)>,
+L<EVP_PKEY_verify(3)|EVP_PKEY_verify(3)>,
+L<EVP_PKEY_verify_recover(3)|EVP_PKEY_verify_recover(3)>,
+L<EVP_PKEY_derive(3)|EVP_PKEY_derive(3)>,
+L<EVP_BytesToKey(3)|EVP_BytesToKey(3)>,
L<OpenSSL_add_all_algorithms(3)|OpenSSL_add_all_algorithms(3)>,
L<engine(3)|engine(3)>
diff --git a/crypto/openssl/doc/crypto/hmac.pod b/crypto/openssl/doc/crypto/hmac.pod
index d92138d..58a57f4 100644
--- a/crypto/openssl/doc/crypto/hmac.pod
+++ b/crypto/openssl/doc/crypto/hmac.pod
@@ -2,8 +2,8 @@
=head1 NAME
-HMAC, HMAC_Init, HMAC_Update, HMAC_Final, HMAC_cleanup - HMAC message
-authentication code
+HMAC, HMAC_CTX_init, HMAC_Init, HMAC_Init_ex, HMAC_Update, HMAC_Final, HMAC_CTX_cleanup,
+HMAC_cleanup - HMAC message authentication code
=head1 SYNOPSIS
diff --git a/crypto/openssl/doc/crypto/i2d_PKCS7_bio_stream.pod b/crypto/openssl/doc/crypto/i2d_PKCS7_bio_stream.pod
index dc4d884..a37231e 100644
--- a/crypto/openssl/doc/crypto/i2d_PKCS7_bio_stream.pod
+++ b/crypto/openssl/doc/crypto/i2d_PKCS7_bio_stream.pod
@@ -23,7 +23,7 @@ streaming.
=head1 BUGS
-The prefix "d2i" is arguably wrong because the function outputs BER format.
+The prefix "i2d" is arguably wrong because the function outputs BER format.
=head1 RETURN VALUES
diff --git a/crypto/openssl/doc/crypto/rand.pod b/crypto/openssl/doc/crypto/rand.pod
index 1c068c8..d102df2 100644
--- a/crypto/openssl/doc/crypto/rand.pod
+++ b/crypto/openssl/doc/crypto/rand.pod
@@ -39,7 +39,7 @@ Since the introduction of the ENGINE API, the recommended way of controlling
default implementations is by using the ENGINE API functions. The default
B<RAND_METHOD>, as set by RAND_set_rand_method() and returned by
RAND_get_rand_method(), is only used if no ENGINE has been set as the default
-"rand" implementation. Hence, these two functions are no longer the recommened
+"rand" implementation. Hence, these two functions are no longer the recommended
way to control defaults.
If an alternative B<RAND_METHOD> implementation is being used (either set
diff --git a/crypto/openssl/doc/crypto/sha.pod b/crypto/openssl/doc/crypto/sha.pod
index 94ab7bc..0c9dbf2 100644
--- a/crypto/openssl/doc/crypto/sha.pod
+++ b/crypto/openssl/doc/crypto/sha.pod
@@ -2,29 +2,58 @@
=head1 NAME
-SHA1, SHA1_Init, SHA1_Update, SHA1_Final - Secure Hash Algorithm
+SHA1, SHA1_Init, SHA1_Update, SHA1_Final, SHA224, SHA224_Init, SHA224_Update,
+SHA224_Final, SHA256, SHA256_Init, SHA256_Update, SHA256_Final, SHA384,
+SHA384_Init, SHA384_Update, SHA384_Final, SHA512, SHA512_Init, SHA512_Update,
+SHA512_Final - Secure Hash Algorithm
=head1 SYNOPSIS
#include <openssl/sha.h>
- unsigned char *SHA1(const unsigned char *d, unsigned long n,
- unsigned char *md);
-
int SHA1_Init(SHA_CTX *c);
- int SHA1_Update(SHA_CTX *c, const void *data,
- unsigned long len);
+ int SHA1_Update(SHA_CTX *c, const void *data, size_t len);
int SHA1_Final(unsigned char *md, SHA_CTX *c);
+ unsigned char *SHA1(const unsigned char *d, size_t n,
+ unsigned char *md);
+
+ int SHA224_Init(SHA256_CTX *c);
+ int SHA224_Update(SHA256_CTX *c, const void *data, size_t len);
+ int SHA224_Final(unsigned char *md, SHA256_CTX *c);
+ unsigned char *SHA224(const unsigned char *d, size_t n,
+ unsigned char *md);
+
+ int SHA256_Init(SHA256_CTX *c);
+ int SHA256_Update(SHA256_CTX *c, const void *data, size_t len);
+ int SHA256_Final(unsigned char *md, SHA256_CTX *c);
+ unsigned char *SHA256(const unsigned char *d, size_t n,
+ unsigned char *md);
+
+ int SHA384_Init(SHA512_CTX *c);
+ int SHA384_Update(SHA512_CTX *c, const void *data, size_t len);
+ int SHA384_Final(unsigned char *md, SHA512_CTX *c);
+ unsigned char *SHA384(const unsigned char *d, size_t n,
+ unsigned char *md);
+
+ int SHA512_Init(SHA512_CTX *c);
+ int SHA512_Update(SHA512_CTX *c, const void *data, size_t len);
+ int SHA512_Final(unsigned char *md, SHA512_CTX *c);
+ unsigned char *SHA512(const unsigned char *d, size_t n,
+ unsigned char *md);
=head1 DESCRIPTION
+Applications should use the higher level functions
+L<EVP_DigestInit(3)|EVP_DigestInit(3)> etc. instead of calling the hash
+functions directly.
+
SHA-1 (Secure Hash Algorithm) is a cryptographic hash function with a
160 bit output.
SHA1() computes the SHA-1 message digest of the B<n>
bytes at B<d> and places it in B<md> (which must have space for
SHA_DIGEST_LENGTH == 20 bytes of output). If B<md> is NULL, the digest
-is placed in a static array.
+is placed in a static array. Note: setting B<md> to NULL is B<not thread safe>.
The following functions may be used if the message is not completely
stored in memory:
@@ -37,24 +66,29 @@ be hashed (B<len> bytes at B<data>).
SHA1_Final() places the message digest in B<md>, which must have space
for SHA_DIGEST_LENGTH == 20 bytes of output, and erases the B<SHA_CTX>.
-Applications should use the higher level functions
-L<EVP_DigestInit(3)|EVP_DigestInit(3)>
-etc. instead of calling the hash functions directly.
+The SHA224, SHA256, SHA384 and SHA512 families of functions operate in the
+same way as for the SHA1 functions. Note that SHA224 and SHA256 use a
+B<SHA256_CTX> object instead of B<SHA_CTX>. SHA384 and SHA512 use B<SHA512_CTX>.
+The buffer B<md> must have space for the output from the SHA variant being used
+(defined by SHA224_DIGEST_LENGTH, SHA256_DIGEST_LENGTH, SHA384_DIGEST_LENGTH and
+SHA512_DIGEST_LENGTH). Also note that, as for the SHA1() function above, the
+SHA224(), SHA256(), SHA384() and SHA512() functions are not thread safe if
+B<md> is NULL.
The predecessor of SHA-1, SHA, is also implemented, but it should be
used only when backward compatibility is required.
=head1 RETURN VALUES
-SHA1() returns a pointer to the hash value.
+SHA1(), SHA224(), SHA256(), SHA384() and SHA512() return a pointer to the hash
+value.
-SHA1_Init(), SHA1_Update() and SHA1_Final() return 1 for success, 0 otherwise.
+SHA1_Init(), SHA1_Update() and SHA1_Final() and equivalent SHA224, SHA256,
+SHA384 and SHA512 functions return 1 for success, 0 otherwise.
=head1 CONFORMING TO
-SHA: US Federal Information Processing Standard FIPS PUB 180 (Secure Hash
-Standard),
-SHA-1: US Federal Information Processing Standard FIPS PUB 180-1 (Secure Hash
+US Federal Information Processing Standard FIPS PUB 180-4 (Secure Hash
Standard),
ANSI X9.30
diff --git a/crypto/openssl/doc/ssl/SSL_CIPHER_get_name.pod b/crypto/openssl/doc/ssl/SSL_CIPHER_get_name.pod
index 2e113be..c598f4d 100644
--- a/crypto/openssl/doc/ssl/SSL_CIPHER_get_name.pod
+++ b/crypto/openssl/doc/ssl/SSL_CIPHER_get_name.pod
@@ -109,6 +109,16 @@ If SSL_CIPHER_description() cannot handle a built-in cipher, the according
description of the cipher property is B<unknown>. This case should not
occur.
+The standard terminology for ephemeral Diffie-Hellman schemes is DHE
+(finite field) or ECDHE (elliptic curve). This version of OpenSSL
+idiosyncratically reports these schemes as EDH and EECDH, even though
+it also accepts the standard terminology.
+
+It is recommended to use the standard terminology (DHE and ECDHE)
+during configuration (e.g. via SSL_CTX_set_cipher_list) for clarity of
+configuration. OpenSSL versions after 1.0.2 will report the standard
+terms via SSL_CIPHER_get_name and SSL_CIPHER_description.
+
=head1 RETURN VALUES
See DESCRIPTION
@@ -116,6 +126,7 @@ See DESCRIPTION
=head1 SEE ALSO
L<ssl(3)|ssl(3)>, L<SSL_get_current_cipher(3)|SSL_get_current_cipher(3)>,
-L<SSL_get_ciphers(3)|SSL_get_ciphers(3)>, L<ciphers(1)|ciphers(1)>
+L<SSL_get_ciphers(3)|SSL_get_ciphers(3)>, L<ciphers(1)|ciphers(1)>,
+L<SSL_CTX_set_cipher_list(3)|SSL_CTX_set_cipher_list(3)>
=cut
diff --git a/crypto/openssl/doc/ssl/SSL_COMP_add_compression_method.pod b/crypto/openssl/doc/ssl/SSL_COMP_add_compression_method.pod
index f4d191c..2bb4403 100644
--- a/crypto/openssl/doc/ssl/SSL_COMP_add_compression_method.pod
+++ b/crypto/openssl/doc/ssl/SSL_COMP_add_compression_method.pod
@@ -2,7 +2,7 @@
=head1 NAME
-SSL_COMP_add_compression_method - handle SSL/TLS integrated compression methods
+SSL_COMP_add_compression_method, SSL_COMP_free_compression_methods - handle SSL/TLS integrated compression methods
=head1 SYNOPSIS
@@ -10,6 +10,8 @@ SSL_COMP_add_compression_method - handle SSL/TLS integrated compression methods
int SSL_COMP_add_compression_method(int id, COMP_METHOD *cm);
+ +void SSL_COMP_free_compression_methods(void);
+
=head1 DESCRIPTION
SSL_COMP_add_compression_method() adds the compression method B<cm> with
@@ -17,6 +19,10 @@ the identifier B<id> to the list of available compression methods. This
list is globally maintained for all SSL operations within this application.
It cannot be set for specific SSL_CTX or SSL objects.
+SSL_COMP_free_compression_methods() frees the internal table of
+compression methods that were built internally, and possibly
+augmented by adding SSL_COMP_add_compression_method().
+
=head1 NOTES
The TLS standard (or SSLv3) allows the integration of compression methods
@@ -38,8 +44,8 @@ its own compression methods and will unconditionally activate compression
when a matching identifier is found. There is no way to restrict the list
of compression methods supported on a per connection basis.
-The OpenSSL library has the compression methods B<COMP_rle()> and (when
-especially enabled during compilation) B<COMP_zlib()> available.
+If enabled during compilation, the OpenSSL library will have the
+COMP_zlib() compression method available.
=head1 WARNINGS
diff --git a/crypto/openssl/doc/ssl/SSL_CONF_CTX_new.pod b/crypto/openssl/doc/ssl/SSL_CONF_CTX_new.pod
new file mode 100644
index 0000000..a9ccb04
--- /dev/null
+++ b/crypto/openssl/doc/ssl/SSL_CONF_CTX_new.pod
@@ -0,0 +1,40 @@
+=pod
+
+=head1 NAME
+
+SSL_CONF_CTX_new, SSL_CONF_CTX_free - SSL configuration allocation functions
+
+=head1 SYNOPSIS
+
+ #include <openssl/ssl.h>
+
+ SSL_CONF_CTX *SSL_CONF_CTX_new(void);
+ void SSL_CONF_CTX_free(SSL_CONF_CTX *cctx);
+
+=head1 DESCRIPTION
+
+The function SSL_CONF_CTX_new() allocates and initialises an B<SSL_CONF_CTX>
+structure for use with the SSL_CONF functions.
+
+The function SSL_CONF_CTX_free() frees up the context B<cctx>.
+
+=head1 RETURN VALUES
+
+SSL_CONF_CTX_new() returns either the newly allocated B<SSL_CONF_CTX> structure
+or B<NULL> if an error occurs.
+
+SSL_CONF_CTX_free() does not return a value.
+
+=head1 SEE ALSO
+
+L<SSL_CONF_CTX_set_flags(3)|SSL_CONF_CTX_set_flags(3)>,
+L<SSL_CONF_CTX_set_ssl_ctx(3)|SSL_CONF_CTX_set_ssl_ctx(3)>,
+L<SSL_CONF_CTX_set1_prefix(3)|SSL_CONF_CTX_set1_prefix(3)>,
+L<SSL_CONF_cmd(3)|SSL_CONF_cmd(3)>,
+L<SSL_CONF_cmd_argv(3)|SSL_CONF_cmd_argv(3)>
+
+=head1 HISTORY
+
+These functions were first added to OpenSSL 1.0.2
+
+=cut
diff --git a/crypto/openssl/doc/ssl/SSL_CONF_CTX_set1_prefix.pod b/crypto/openssl/doc/ssl/SSL_CONF_CTX_set1_prefix.pod
new file mode 100644
index 0000000..7699018
--- /dev/null
+++ b/crypto/openssl/doc/ssl/SSL_CONF_CTX_set1_prefix.pod
@@ -0,0 +1,49 @@
+=pod
+
+=head1 NAME
+
+SSL_CONF_CTX_set1_prefix - Set configuration context command prefix
+
+=head1 SYNOPSIS
+
+ #include <openssl/ssl.h>
+
+ unsigned int SSL_CONF_CTX_set1_prefix(SSL_CONF_CTX *cctx, const char *prefix);
+
+=head1 DESCRIPTION
+
+The function SSL_CONF_CTX_set1_prefix() sets the command prefix of B<cctx>
+to B<prefix>. If B<prefix> is B<NULL> it is restored to the default value.
+
+=head1 NOTES
+
+Command prefixes alter the commands recognised by subsequent SSL_CTX_cmd()
+calls. For example for files, if the prefix "SSL" is set then command names
+such as "SSLProtocol", "SSLOptions" etc. are recognised instead of "Protocol"
+and "Options". Similarly for command lines if the prefix is "--ssl-" then
+"--ssl-no_tls1_2" is recognised instead of "-no_tls1_2".
+
+If the B<SSL_CONF_FLAG_CMDLINE> flag is set then prefix checks are case
+sensitive and "-" is the default. In the unlikely even an application
+explicitly wants to set no prefix it must be explicitly set to "".
+
+If the B<SSL_CONF_FLAG_FILE> flag is set then prefix checks are case
+insensitive and no prefix is the default.
+
+=head1 RETURN VALUES
+
+SSL_CONF_CTX_set1_prefix() returns 1 for success and 0 for failure.
+
+=head1 SEE ALSO
+
+L<SSL_CONF_CTX_new(3)|SSL_CONF_CTX_new(3)>,
+L<SSL_CONF_CTX_set_flags(3)|SSL_CONF_CTX_set_flags(3)>,
+L<SSL_CONF_CTX_set_ssl_ctx(3)|SSL_CONF_CTX_set_ssl_ctx(3)>,
+L<SSL_CONF_cmd(3)|SSL_CONF_cmd(3)>,
+L<SSL_CONF_cmd_argv(3)|SSL_CONF_cmd_argv(3)>
+
+=head1 HISTORY
+
+These functions were first added to OpenSSL 1.0.2
+
+=cut
diff --git a/crypto/openssl/doc/ssl/SSL_CONF_CTX_set_flags.pod b/crypto/openssl/doc/ssl/SSL_CONF_CTX_set_flags.pod
new file mode 100644
index 0000000..4e34280
--- /dev/null
+++ b/crypto/openssl/doc/ssl/SSL_CONF_CTX_set_flags.pod
@@ -0,0 +1,68 @@
+=pod
+
+=head1 NAME
+
+SSL_CONF_CTX_set_flags, SSL_CONF_CTX_clear_flags - Set of clear SSL configuration context flags
+
+=head1 SYNOPSIS
+
+ #include <openssl/ssl.h>
+
+ unsigned int SSL_CONF_CTX_set_flags(SSL_CONF_CTX *cctx, unsigned int flags);
+ unsigned int SSL_CONF_CTX_clear_flags(SSL_CONF_CTX *cctx, unsigned int flags);
+
+=head1 DESCRIPTION
+
+The function SSL_CONF_CTX_set_flags() sets B<flags> in the context B<cctx>.
+
+The function SSL_CONF_CTX_clear_flags() clears B<flags> in the context B<cctx>.
+
+=head1 NOTES
+
+The flags set affect how subsequent calls to SSL_CONF_cmd() or
+SSL_CONF_argv() behave.
+
+Currently the following B<flags> values are recognised:
+
+=over 4
+
+=item SSL_CONF_FLAG_CMDLINE, SSL_CONF_FLAG_FILE
+
+recognise options intended for command line or configuration file use. At
+least one of these flags must be set.
+
+=item SSL_CONF_FLAG_CLIENT, SSL_CONF_FLAG_SERVER
+
+recognise options intended for use in SSL/TLS clients or servers. One or
+both of these flags must be set.
+
+=item SSL_CONF_FLAG_CERTIFICATE
+
+recognise certificate and private key options.
+
+=item SSL_CONF_FLAG_SHOW_ERRORS
+
+indicate errors relating to unrecognised options or missing arguments in
+the error queue. If this option isn't set such errors are only reflected
+in the return values of SSL_CONF_set_cmd() or SSL_CONF_set_argv()
+
+=back
+
+=head1 RETURN VALUES
+
+SSL_CONF_CTX_set_flags() and SSL_CONF_CTX_clear_flags() returns the new flags
+value after setting or clearing flags.
+
+=head1 SEE ALSO
+
+L<SSL_CONF_CTX_new(3)|SSL_CONF_CTX_new(3)>,
+L<SSL_CONF_CTX_set_ssl_ctx(3)|SSL_CONF_CTX_set_ssl_ctx(3)>,
+L<SSL_CONF_CTX_set1_prefix(3)|SSL_CONF_CTX_set1_prefix(3)>,
+L<SSL_CONF_cmd(3)|SSL_CONF_cmd(3)>,
+L<SSL_CONF_cmd_argv(3)|SSL_CONF_cmd_argv(3)>
+
+=head1 HISTORY
+
+These functions were first added to OpenSSL 1.0.2
+
+=cut
diff --git a/crypto/openssl/doc/ssl/SSL_CONF_CTX_set_ssl_ctx.pod b/crypto/openssl/doc/ssl/SSL_CONF_CTX_set_ssl_ctx.pod
new file mode 100644
index 0000000..2049a53
--- /dev/null
+++ b/crypto/openssl/doc/ssl/SSL_CONF_CTX_set_ssl_ctx.pod
@@ -0,0 +1,47 @@
+=pod
+
+=head1 NAME
+
+SSL_CONF_CTX_set_ssl_ctx, SSL_CONF_CTX_set_ssl - set context to configure
+
+=head1 SYNOPSIS
+
+ #include <openssl/ssl.h>
+
+ void SSL_CONF_CTX_set_ssl_ctx(SSL_CONF_CTX *cctx, SSL_CTX *ctx);
+ void SSL_CONF_CTX_set_ssl(SSL_CONF_CTX *cctx, SSL *ssl);
+
+=head1 DESCRIPTION
+
+SSL_CONF_CTX_set_ssl_ctx() sets the context associated with B<cctx> to the
+B<SSL_CTX> structure B<ctx>. Any previous B<SSL> or B<SSL_CTX> associated with
+B<cctx> is cleared. Subsequent calls to SSL_CONF_cmd() will be sent to
+B<ctx>.
+
+SSL_CONF_CTX_set_ssl() sets the context associated with B<cctx> to the
+B<SSL> structure B<ssl>. Any previous B<SSL> or B<SSL_CTX> associated with
+B<cctx> is cleared. Subsequent calls to SSL_CONF_cmd() will be sent to
+B<ssl>.
+
+=head1 NOTES
+
+The context need not be set or it can be set to B<NULL> in which case only
+syntax checking of commands is performed, where possible.
+
+=head1 RETURN VALUES
+
+SSL_CONF_CTX_set_ssl_ctx() and SSL_CTX_set_ssl() do not return a value.
+
+=head1 SEE ALSO
+
+L<SSL_CONF_CTX_new(3)|SSL_CONF_CTX_new(3)>,
+L<SSL_CONF_CTX_set_flags(3)|SSL_CONF_CTX_set_flags(3)>,
+L<SSL_CONF_CTX_set1_prefix(3)|SSL_CONF_CTX_set1_prefix(3)>,
+L<SSL_CONF_cmd(3)|SSL_CONF_cmd(3)>,
+L<SSL_CONF_cmd_argv(3)|SSL_CONF_cmd_argv(3)>
+
+=head1 HISTORY
+
+These functions were first added to OpenSSL 1.0.2
+
+=cut
diff --git a/crypto/openssl/doc/ssl/SSL_CONF_cmd.pod b/crypto/openssl/doc/ssl/SSL_CONF_cmd.pod
new file mode 100644
index 0000000..2bf1a60
--- /dev/null
+++ b/crypto/openssl/doc/ssl/SSL_CONF_cmd.pod
@@ -0,0 +1,438 @@
+=pod
+
+=head1 NAME
+
+SSL_CONF_cmd - send configuration command
+
+=head1 SYNOPSIS
+
+ #include <openssl/ssl.h>
+
+ int SSL_CONF_cmd(SSL_CONF_CTX *cctx, const char *cmd, const char *value);
+ int SSL_CONF_cmd_value_type(SSL_CONF_CTX *cctx, const char *cmd);
+ int SSL_CONF_finish(SSL_CONF_CTX *cctx);
+
+=head1 DESCRIPTION
+
+The function SSL_CONF_cmd() performs configuration operation B<cmd> with
+optional parameter B<value> on B<ctx>. Its purpose is to simplify application
+configuration of B<SSL_CTX> or B<SSL> structures by providing a common
+framework for command line options or configuration files.
+
+SSL_CONF_cmd_value_type() returns the type of value that B<cmd> refers to.
+
+The function SSL_CONF_finish() must be called after all configuration
+operations have been completed. It is used to finalise any operations
+or to process defaults.
+
+=head1 SUPPORTED COMMAND LINE COMMANDS
+
+Currently supported B<cmd> names for command lines (i.e. when the
+flag B<SSL_CONF_CMDLINE> is set) are listed below. Note: all B<cmd> names
+are case sensitive. Unless otherwise stated commands can be used by
+both clients and servers and the B<value> parameter is not used. The default
+prefix for command line commands is B<-> and that is reflected below.
+
+=over 4
+
+=item B<-sigalgs>
+
+This sets the supported signature algorithms for TLS v1.2. For clients this
+value is used directly for the supported signature algorithms extension. For
+servers it is used to determine which signature algorithms to support.
+
+The B<value> argument should be a colon separated list of signature algorithms
+in order of decreasing preference of the form B<algorithm+hash>. B<algorithm>
+is one of B<RSA>, B<DSA> or B<ECDSA> and B<hash> is a supported algorithm
+OID short name such as B<SHA1>, B<SHA224>, B<SHA256>, B<SHA384> of B<SHA512>.
+Note: algorithm and hash names are case sensitive.
+
+If this option is not set then all signature algorithms supported by the
+OpenSSL library are permissible.
+
+=item B<-client_sigalgs>
+
+This sets the supported signature algorithms associated with client
+authentication for TLS v1.2. For servers the value is used in the supported
+signature algorithms field of a certificate request. For clients it is
+used to determine which signature algorithm to with the client certificate.
+If a server does not request a certificate this option has no effect.
+
+The syntax of B<value> is identical to B<-sigalgs>. If not set then
+the value set for B<-sigalgs> will be used instead.
+
+=item B<-curves>
+
+This sets the supported elliptic curves. For clients the curves are
+sent using the supported curves extension. For servers it is used
+to determine which curve to use. This setting affects curves used for both
+signatures and key exchange, if applicable.
+
+The B<value> argument is a colon separated list of curves. The curve can be
+either the B<NIST> name (e.g. B<P-256>) or an OpenSSL OID name (e.g
+B<prime256v1>). Curve names are case sensitive.
+
+=item B<-named_curve>
+
+This sets the temporary curve used for ephemeral ECDH modes. Only used by
+servers
+
+The B<value> argument is a curve name or the special value B<auto> which
+picks an appropriate curve based on client and server preferences. The curve
+can be either the B<NIST> name (e.g. B<P-256>) or an OpenSSL OID name
+(e.g B<prime256v1>). Curve names are case sensitive.
+
+=item B<-cipher>
+
+Sets the cipher suite list to B<value>. Note: syntax checking of B<value> is
+currently not performed unless a B<SSL> or B<SSL_CTX> structure is
+associated with B<cctx>.
+
+=item B<-cert>
+
+Attempts to use the file B<value> as the certificate for the appropriate
+context. It currently uses SSL_CTX_use_certificate_chain_file() if an B<SSL_CTX>
+structure is set or SSL_use_certificate_file() with filetype PEM if an B<SSL>
+structure is set. This option is only supported if certificate operations
+are permitted.
+
+=item B<-key>
+
+Attempts to use the file B<value> as the private key for the appropriate
+context. This option is only supported if certificate operations
+are permitted. Note: if no B<-key> option is set then a private key is
+not loaded: it does not currently use the B<-cert> file.
+
+=item B<-dhparam>
+
+Attempts to use the file B<value> as the set of temporary DH parameters for
+the appropriate context. This option is only supported if certificate
+operations are permitted.
+
+=item B<-no_ssl2>, B<-no_ssl3>, B<-no_tls1>, B<-no_tls1_1>, B<-no_tls1_2>
+
+Disables protocol support for SSLv2, SSLv3, TLS 1.0, TLS 1.1 or TLS 1.2
+by setting the corresponding options B<SSL_OP_NO_SSL2>, B<SSL_OP_NO_SSL3>,
+B<SSL_OP_NO_TLS1>, B<SSL_OP_NO_TLS1_1> and B<SSL_OP_NO_TLS1_2> respectively.
+
+=item B<-bugs>
+
+Various bug workarounds are set, same as setting B<SSL_OP_ALL>.
+
+=item B<-no_comp>
+
+Disables support for SSL/TLS compression, same as setting B<SSL_OP_NO_COMPRESS>.
+
+=item B<-no_ticket>
+
+Disables support for session tickets, same as setting B<SSL_OP_NO_TICKET>.
+
+=item B<-serverpref>
+
+Use server and not client preference order when determining which cipher suite,
+signature algorithm or elliptic curve to use for an incoming connection.
+Equivalent to B<SSL_OP_CIPHER_SERVER_PREFERENCE>. Only used by servers.
+
+=item B<-no_resumption_on_reneg>
+
+set SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION flag. Only used by servers.
+
+=item B<-legacyrenegotiation>
+
+permits the use of unsafe legacy renegotiation. Equivalent to setting
+B<SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION>.
+
+=item B<-legacy_server_connect>, B<-no_legacy_server_connect>
+
+permits or prohibits the use of unsafe legacy renegotiation for OpenSSL
+clients only. Equivalent to setting or clearing B<SSL_OP_LEGACY_SERVER_CONNECT>.
+Set by default.
+
+=item B<-strict>
+
+enables strict mode protocol handling. Equivalent to setting
+B<SSL_CERT_FLAG_TLS_STRICT>.
+
+=item B<-debug_broken_protocol>
+
+disables various checks and permits several kinds of broken protocol behaviour
+for testing purposes: it should B<NEVER> be used in anything other than a test
+environment. Only supported if OpenSSL is configured with
+B<-DOPENSSL_SSL_DEBUG_BROKEN_PROTOCOL>.
+
+=back
+
+=head1 SUPPORTED CONFIGURATION FILE COMMANDS
+
+Currently supported B<cmd> names for configuration files (i.e. when the
+flag B<SSL_CONF_FLAG_FILE> is set) are listed below. All configuration file
+B<cmd> names and are case insensitive so B<signaturealgorithms> is recognised
+as well as B<SignatureAlgorithms>. Unless otherwise stated the B<value> names
+are also case insensitive.
+
+Note: the command prefix (if set) alters the recognised B<cmd> values.
+
+=over 4
+
+=item B<CipherString>
+
+Sets the cipher suite list to B<value>. Note: syntax checking of B<value> is
+currently not performed unless an B<SSL> or B<SSL_CTX> structure is
+associated with B<cctx>.
+
+=item B<Certificate>
+
+Attempts to use the file B<value> as the certificate for the appropriate
+context. It currently uses SSL_CTX_use_certificate_chain_file() if an B<SSL_CTX>
+structure is set or SSL_use_certificate_file() with filetype PEM if an B<SSL>
+structure is set. This option is only supported if certificate operations
+are permitted.
+
+=item B<PrivateKey>
+
+Attempts to use the file B<value> as the private key for the appropriate
+context. This option is only supported if certificate operations
+are permitted. Note: if no B<-key> option is set then a private key is
+not loaded: it does not currently use the B<Certificate> file.
+
+=item B<ServerInfoFile>
+
+Attempts to use the file B<value> in the "serverinfo" extension using the
+function SSL_CTX_use_serverinfo_file.
+
+=item B<DHParameters>
+
+Attempts to use the file B<value> as the set of temporary DH parameters for
+the appropriate context. This option is only supported if certificate
+operations are permitted.
+
+=item B<SignatureAlgorithms>
+
+This sets the supported signature algorithms for TLS v1.2. For clients this
+value is used directly for the supported signature algorithms extension. For
+servers it is used to determine which signature algorithms to support.
+
+The B<value> argument should be a colon separated list of signature algorithms
+in order of decreasing preference of the form B<algorithm+hash>. B<algorithm>
+is one of B<RSA>, B<DSA> or B<ECDSA> and B<hash> is a supported algorithm
+OID short name such as B<SHA1>, B<SHA224>, B<SHA256>, B<SHA384> of B<SHA512>.
+Note: algorithm and hash names are case sensitive.
+
+If this option is not set then all signature algorithms supported by the
+OpenSSL library are permissible.
+
+=item B<ClientSignatureAlgorithms>
+
+This sets the supported signature algorithms associated with client
+authentication for TLS v1.2. For servers the value is used in the supported
+signature algorithms field of a certificate request. For clients it is
+used to determine which signature algorithm to with the client certificate.
+
+The syntax of B<value> is identical to B<SignatureAlgorithms>. If not set then
+the value set for B<SignatureAlgorithms> will be used instead.
+
+=item B<Curves>
+
+This sets the supported elliptic curves. For clients the curves are
+sent using the supported curves extension. For servers it is used
+to determine which curve to use. This setting affects curves used for both
+signatures and key exchange, if applicable.
+
+The B<value> argument is a colon separated list of curves. The curve can be
+either the B<NIST> name (e.g. B<P-256>) or an OpenSSL OID name (e.g
+B<prime256v1>). Curve names are case sensitive.
+
+=item B<ECDHParameters>
+
+This sets the temporary curve used for ephemeral ECDH modes. Only used by
+servers
+
+The B<value> argument is a curve name or the special value B<Automatic> which
+picks an appropriate curve based on client and server preferences. The curve
+can be either the B<NIST> name (e.g. B<P-256>) or an OpenSSL OID name
+(e.g B<prime256v1>). Curve names are case sensitive.
+
+=item B<Protocol>
+
+The supported versions of the SSL or TLS protocol.
+
+The B<value> argument is a comma separated list of supported protocols to
+enable or disable. If an protocol is preceded by B<-> that version is disabled.
+All versions are enabled by default, though applications may choose to
+explicitly disable some. Currently supported protocol values are B<SSLv2>,
+B<SSLv3>, B<TLSv1>, B<TLSv1.1> and B<TLSv1.2>. The special value B<ALL> refers
+to all supported versions.
+
+=item B<Options>
+
+The B<value> argument is a comma separated list of various flags to set.
+If a flag string is preceded B<-> it is disabled. See the
+B<SSL_CTX_set_options> function for more details of individual options.
+
+Each option is listed below. Where an operation is enabled by default
+the B<-flag> syntax is needed to disable it.
+
+B<SessionTicket>: session ticket support, enabled by default. Inverse of
+B<SSL_OP_NO_TICKET>: that is B<-SessionTicket> is the same as setting
+B<SSL_OP_NO_TICKET>.
+
+B<Compression>: SSL/TLS compression support, enabled by default. Inverse
+of B<SSL_OP_NO_COMPRESSION>.
+
+B<EmptyFragments>: use empty fragments as a countermeasure against a
+SSL 3.0/TLS 1.0 protocol vulnerability affecting CBC ciphers. It
+is set by default. Inverse of B<SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS>.
+
+B<Bugs>: enable various bug workarounds. Same as B<SSL_OP_ALL>.
+
+B<DHSingle>: enable single use DH keys, set by default. Inverse of
+B<SSL_OP_DH_SINGLE>. Only used by servers.
+
+B<ECDHSingle> enable single use ECDH keys, set by default. Inverse of
+B<SSL_OP_ECDH_SINGLE>. Only used by servers.
+
+B<ServerPreference> use server and not client preference order when
+determining which cipher suite, signature algorithm or elliptic curve
+to use for an incoming connection. Equivalent to
+B<SSL_OP_CIPHER_SERVER_PREFERENCE>. Only used by servers.
+
+B<NoResumptionOnRenegotiation> set
+B<SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION> flag. Only used by servers.
+
+B<UnsafeLegacyRenegotiation> permits the use of unsafe legacy renegotiation.
+Equivalent to B<SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION>.
+
+B<UnsafeLegacyServerConnect> permits the use of unsafe legacy renegotiation
+for OpenSSL clients only. Equivalent to B<SSL_OP_LEGACY_SERVER_CONNECT>.
+Set by default.
+
+=back
+
+=head1 SUPPORTED COMMAND TYPES
+
+The function SSL_CONF_cmd_value_type() currently returns one of the following
+types:
+
+=over 4
+
+=item B<SSL_CONF_TYPE_UNKNOWN>
+
+The B<cmd> string is unrecognised, this return value can be use to flag
+syntax errors.
+
+=item B<SSL_CONF_TYPE_STRING>
+
+The value is a string without any specific structure.
+
+=item B<SSL_CONF_TYPE_FILE>
+
+The value is a file name.
+
+=item B<SSL_CONF_TYPE_DIR>
+
+The value is a directory name.
+
+=back
+
+=head1 NOTES
+
+The order of operations is significant. This can be used to set either defaults
+or values which cannot be overridden. For example if an application calls:
+
+ SSL_CONF_cmd(ctx, "Protocol", "-SSLv2");
+ SSL_CONF_cmd(ctx, userparam, uservalue);
+
+it will disable SSLv2 support by default but the user can override it. If
+however the call sequence is:
+
+ SSL_CONF_cmd(ctx, userparam, uservalue);
+ SSL_CONF_cmd(ctx, "Protocol", "-SSLv2");
+
+SSLv2 is B<always> disabled and attempt to override this by the user are
+ignored.
+
+By checking the return code of SSL_CTX_cmd() it is possible to query if a
+given B<cmd> is recognised, this is useful is SSL_CTX_cmd() values are
+mixed with additional application specific operations.
+
+For example an application might call SSL_CTX_cmd() and if it returns
+-2 (unrecognised command) continue with processing of application specific
+commands.
+
+Applications can also use SSL_CTX_cmd() to process command lines though the
+utility function SSL_CTX_cmd_argv() is normally used instead. One way
+to do this is to set the prefix to an appropriate value using
+SSL_CONF_CTX_set1_prefix(), pass the current argument to B<cmd> and the
+following argument to B<value> (which may be NULL).
+
+In this case if the return value is positive then it is used to skip that
+number of arguments as they have been processed by SSL_CTX_cmd(). If -2 is
+returned then B<cmd> is not recognised and application specific arguments
+can be checked instead. If -3 is returned a required argument is missing
+and an error is indicated. If 0 is returned some other error occurred and
+this can be reported back to the user.
+
+The function SSL_CONF_cmd_value_type() can be used by applications to
+check for the existence of a command or to perform additional syntax
+checking or translation of the command value. For example if the return
+value is B<SSL_CONF_TYPE_FILE> an application could translate a relative
+pathname to an absolute pathname.
+
+=head1 EXAMPLES
+
+Set supported signature algorithms:
+
+ SSL_CONF_cmd(ctx, "SignatureAlgorithms", "ECDSA+SHA256:RSA+SHA256:DSA+SHA256");
+
+Enable all protocols except SSLv3 and SSLv2:
+
+ SSL_CONF_cmd(ctx, "Protocol", "ALL,-SSLv3,-SSLv2");
+
+Only enable TLSv1.2:
+
+ SSL_CONF_cmd(ctx, "Protocol", "-ALL,TLSv1.2");
+
+Disable TLS session tickets:
+
+ SSL_CONF_cmd(ctx, "Options", "-SessionTicket");
+
+Set supported curves to P-256, P-384:
+
+ SSL_CONF_cmd(ctx, "Curves", "P-256:P-384");
+
+Set automatic support for any elliptic curve for key exchange:
+
+ SSL_CONF_cmd(ctx, "ECDHParameters", "Automatic");
+
+=head1 RETURN VALUES
+
+SSL_CONF_cmd() returns 1 if the value of B<cmd> is recognised and B<value> is
+B<NOT> used and 2 if both B<cmd> and B<value> are used. In other words it
+returns the number of arguments processed. This is useful when processing
+command lines.
+
+A return value of -2 means B<cmd> is not recognised.
+
+A return value of -3 means B<cmd> is recognised and the command requires a
+value but B<value> is NULL.
+
+A return code of 0 indicates that both B<cmd> and B<value> are valid but an
+error occurred attempting to perform the operation: for example due to an
+error in the syntax of B<value> in this case the error queue may provide
+additional information.
+
+SSL_CONF_finish() returns 1 for success and 0 for failure.
+
+=head1 SEE ALSO
+
+L<SSL_CONF_CTX_new(3)|SSL_CONF_CTX_new(3)>,
+L<SSL_CONF_CTX_set_flags(3)|SSL_CONF_CTX_set_flags(3)>,
+L<SSL_CONF_CTX_set1_prefix(3)|SSL_CONF_CTX_set1_prefix(3)>,
+L<SSL_CONF_CTX_set_ssl_ctx(3)|SSL_CONF_CTX_set_ssl_ctx(3)>,
+L<SSL_CONF_cmd_argv(3)|SSL_CONF_cmd_argv(3)>
+
+=head1 HISTORY
+
+SSL_CONF_cmd() was first added to OpenSSL 1.0.2
+
+=cut
diff --git a/crypto/openssl/doc/ssl/SSL_CONF_cmd_argv.pod b/crypto/openssl/doc/ssl/SSL_CONF_cmd_argv.pod
new file mode 100644
index 0000000..6e66441
--- /dev/null
+++ b/crypto/openssl/doc/ssl/SSL_CONF_cmd_argv.pod
@@ -0,0 +1,42 @@
+=pod
+
+=head1 NAME
+
+SSL_CONF_cmd_argv - SSL configuration command line processing.
+
+=head1 SYNOPSIS
+
+ #include <openssl/ssl.h>
+
+ int SSL_CONF_cmd_argv(SSL_CONF_CTX *cctx, int *pargc, char ***pargv);
+
+=head1 DESCRIPTION
+
+The function SSL_CONF_cmd_argv() processes at most two command line
+arguments from B<pargv> and B<pargc>. The values of B<pargv> and B<pargc>
+are updated to reflect the number of command options processed. The B<pargc>
+argument can be set to B<NULL> is it is not used.
+
+=head1 RETURN VALUES
+
+SSL_CONF_cmd_argv() returns the number of command arguments processed: 0, 1, 2
+or a negative error code.
+
+If -2 is returned then an argument for a command is missing.
+
+If -1 is returned the command is recognised but couldn't be processed due
+to an error: for example a syntax error in the argument.
+
+=head1 SEE ALSO
+
+L<SSL_CONF_CTX_new(3)|SSL_CONF_CTX_new(3)>,
+L<SSL_CONF_CTX_set_flags(3)|SSL_CONF_CTX_set_flags(3)>,
+L<SSL_CONF_CTX_set1_prefix(3)|SSL_CONF_CTX_set1_prefix(3)>,
+L<SSL_CONF_CTX_set_ssl_ctx(3)|SSL_CONF_CTX_set_ssl_ctx(3)>,
+L<SSL_CONF_cmd(3)|SSL_CONF_cmd(3)>
+
+=head1 HISTORY
+
+These functions were first added to OpenSSL 1.0.2
+
+=cut
diff --git a/crypto/openssl/doc/ssl/SSL_CTX_add1_chain_cert.pod b/crypto/openssl/doc/ssl/SSL_CTX_add1_chain_cert.pod
new file mode 100644
index 0000000..b999f09
--- /dev/null
+++ b/crypto/openssl/doc/ssl/SSL_CTX_add1_chain_cert.pod
@@ -0,0 +1,150 @@
+=pod
+
+=head1 NAME
+
+SSL_CTX_set0_chain, SSL_CTX_set1_chain, SSL_CTX_add0_chain_cert,
+SSL_CTX_add1_chain_cert, SSL_CTX_get0_chain_certs, SSL_CTX_clear_chain_certs,
+SSL_set0_chain, SSL_set1_chain, SSL_add0_chain_cert, SSL_add1_chain_cert,
+SSL_get0_chain_certs, SSL_clear_chain_certs, SSL_CTX_build_cert_chain,
+SSL_build_cert_chain, SSL_CTX_select_current_cert,
+SSL_select_current_cert, SSL_CTX_set_current_cert, SSL_set_current_cert - extra
+chain certificate processing
+
+=head1 SYNOPSIS
+
+ #include <openssl/ssl.h>
+
+ int SSL_CTX_set0_chain(SSL_CTX *ctx, STACK_OF(X509) *sk);
+ int SSL_CTX_set1_chain(SSL_CTX *ctx, STACK_OF(X509) *sk);
+ int SSL_CTX_add0_chain_cert(SSL_CTX *ctx, X509 *x509);
+ int SSL_CTX_add1_chain_cert(SSL_CTX *ctx, X509 *x509);
+ int SSL_CTX_get0_chain_certs(SSL_CTX *ctx, STACK_OF(X509) **sk);
+ int SSL_CTX_clear_chain_certs(SSL_CTX *ctx);
+
+ int SSL_set0_chain(SSL *ssl, STACK_OF(X509) *sk);
+ int SSL_set1_chain(SSL *ssl, STACK_OF(X509) *sk);
+ int SSL_add0_chain_cert(SSL *ssl, X509 *x509);
+ int SSL_add1_chain_cert(SSL *ssl, X509 *x509);
+ int SSL_get0_chain_certs(SSL *ssl, STACK_OF(X509) **sk);
+ int SSL_clear_chain_certs(SSL *ssl);
+
+ int SSL_CTX_build_cert_chain(SSL_CTX *ctx, flags);
+ int SSL_build_cert_chain(SSL *ssl, flags);
+
+ int SSL_CTX_select_current_cert(SSL_CTX *ctx, X509 *x509);
+ int SSL_select_current_cert(SSL *ssl, X509 *x509);
+ int SSL_CTX_set_current_cert(SSL_CTX *ctx, long op);
+ int SSL_set_current_cert(SSL *ssl, long op);
+
+=head1 DESCRIPTION
+
+SSL_CTX_set0_chain() and SSL_CTX_set1_chain() set the certificate chain
+associated with the current certificate of B<ctx> to B<sk>.
+
+SSL_CTX_add0_chain_cert() and SSL_CTX_add1_chain_cert() append the single
+certificate B<x509> to the chain associated with the current certificate of
+B<ctx>.
+
+SSL_CTX_get0_chain_certs() retrieves the chain associated with the current
+certificate of B<ctx>.
+
+SSL_CTX_clear_chain_certs() clears any existing chain associated with the
+current certificate of B<ctx>. (This is implemented by calling
+SSL_CTX_set0_chain() with B<sk> set to B<NULL>).
+
+SSL_CTX_build_cert_chain() builds the certificate chain for B<ctx> normally
+this uses the chain store or the verify store if the chain store is not set.
+If the function is successful the built chain will replace any existing chain.
+The B<flags> parameter can be set to B<SSL_BUILD_CHAIN_FLAG_UNTRUSTED> to use
+existing chain certificates as untrusted CAs, B<SSL_BUILD_CHAIN_FLAG_NO_ROOT>
+to omit the root CA from the built chain, B<SSL_BUILD_CHAIN_FLAG_CHECK> to
+use all existing chain certificates only to build the chain (effectively
+sanity checking and rearranging them if necessary), the flag
+B<SSL_BUILD_CHAIN_FLAG_IGNORE_ERROR> ignores any errors during verification:
+if flag B<SSL_BUILD_CHAIN_FLAG_CLEAR_ERROR> is also set verification errors
+are cleared from the error queue.
+
+Each of these functions operates on the I<current> end entity
+(i.e. server or client) certificate. This is the last certificate loaded or
+selected on the corresponding B<ctx> structure.
+
+SSL_CTX_select_current_cert() selects B<x509> as the current end entity
+certificate, but only if B<x509> has already been loaded into B<ctx> using a
+function such as SSL_CTX_use_certificate().
+
+SSL_set0_chain(), SSL_set1_chain(), SSL_add0_chain_cert(),
+SSL_add1_chain_cert(), SSL_get0_chain_certs(), SSL_clear_chain_certs(),
+SSL_build_cert_chain(), SSL_select_current_cert() and SSL_set_current_cert()
+are similar except they apply to SSL structure B<ssl>.
+
+SSL_CTX_set_current_cert() changes the current certificate to a value based
+on the B<op> argument. Currently B<op> can be B<SSL_CERT_SET_FIRST> to use
+the first valid certificate or B<SSL_CERT_SET_NEXT> to set the next valid
+certificate after the current certificate. These two operations can be
+used to iterate over all certificates in an B<SSL_CTX> structure.
+
+SSL_set_current_cert() also supports the option B<SSL_CERT_SET_SERVER>.
+If B<ssl> is a server and has sent a certificate to a connected client
+this option sets that certificate to the current certificate and returns 1.
+If the negotiated ciphersuite is anonymous (and thus no certificate will
+be sent) 2 is returned and the current certificate is unchanged. If B<ssl>
+is not a server or a certificate has not been sent 0 is returned and
+the current certificate is unchanged.
+
+All these functions are implemented as macros. Those containing a B<1>
+increment the reference count of the supplied certificate or chain so it must
+be freed at some point after the operation. Those containing a B<0> do
+not increment reference counts and the supplied certificate or chain
+B<MUST NOT> be freed after the operation.
+
+=head1 NOTES
+
+The chains associate with an SSL_CTX structure are copied to any SSL
+structures when SSL_new() is called. SSL structures will not be affected
+by any chains subsequently changed in the parent SSL_CTX.
+
+One chain can be set for each key type supported by a server. So, for example,
+an RSA and a DSA certificate can (and often will) have different chains.
+
+The functions SSL_CTX_build_cert_chain() and SSL_build_cert_chain() can
+be used to check application configuration and to ensure any necessary
+subordinate CAs are sent in the correct order. Misconfigured applications
+sending incorrect certificate chains often cause problems with peers.
+
+For example an application can add any set of certificates using
+SSL_CTX_use_certificate_chain_file() then call SSL_CTX_build_cert_chain()
+with the option B<SSL_BUILD_CHAIN_FLAG_CHECK> to check and reorder them.
+
+Applications can issue non fatal warnings when checking chains by setting
+the flag B<SSL_BUILD_CHAIN_FLAG_IGNORE_ERRORS> and checking the return
+value.
+
+Calling SSL_CTX_build_cert_chain() or SSL_build_cert_chain() is more
+efficient than the automatic chain building as it is only performed once.
+Automatic chain building is performed on each new session.
+
+If any certificates are added using these functions no certificates added
+using SSL_CTX_add_extra_chain_cert() will be used.
+
+=head1 RETURN VALUES
+
+SSL_set_current_cert() with B<SSL_CERT_SET_SERVER> return 1 for success, 2 if
+no server certificate is used because the ciphersuites is anonymous and 0
+for failure.
+
+SSL_CTX_build_cert_chain() and SSL_build_cert_chain() return 1 for success
+and 0 for failure. If the flag B<SSL_BUILD_CHAIN_FLAG_IGNORE_ERROR> and
+a verification error occurs then 2 is returned.
+
+All other functions return 1 for success and 0 for failure.
+
+
+=head1 SEE ALSO
+
+L<SSL_CTX_add_extra_chain_cert(3)|SSL_CTX_add_extra_chain_cert(3)>
+
+=head1 HISTORY
+
+These functions were first added to OpenSSL 1.0.2.
+
+=cut
diff --git a/crypto/openssl/doc/ssl/SSL_CTX_add_extra_chain_cert.pod b/crypto/openssl/doc/ssl/SSL_CTX_add_extra_chain_cert.pod
index 5955ee1..8e832a5 100644
--- a/crypto/openssl/doc/ssl/SSL_CTX_add_extra_chain_cert.pod
+++ b/crypto/openssl/doc/ssl/SSL_CTX_add_extra_chain_cert.pod
@@ -32,7 +32,8 @@ Only one set of extra chain certificates can be specified per SSL_CTX
structure. Different chains for different certificates (for example if both
RSA and DSA certificates are specified by the same server) or different SSL
structures with the same parent SSL_CTX cannot be specified using this
-function.
+function. For more flexibility functions such as SSL_add1_chain_cert() should
+be used instead.
=head1 RETURN VALUES
@@ -45,5 +46,15 @@ L<ssl(3)|ssl(3)>,
L<SSL_CTX_use_certificate(3)|SSL_CTX_use_certificate(3)>,
L<SSL_CTX_set_client_cert_cb(3)|SSL_CTX_set_client_cert_cb(3)>,
L<SSL_CTX_load_verify_locations(3)|SSL_CTX_load_verify_locations(3)>
+L<SSL_CTX_set0_chain(3)|SSL_CTX_set0_chain(3)>
+L<SSL_CTX_set1_chain(3)|SSL_CTX_set1_chain(3)>
+L<SSL_CTX_add0_chain_cert(3)|SSL_CTX_add0_chain_cert(3)>
+L<SSL_CTX_add1_chain_cert(3)|SSL_CTX_add1_chain_cert(3)>
+L<SSL_set0_chain(3)|SSL_set0_chain(3)>
+L<SSL_set1_chain(3)|SSL_set1_chain(3)>
+L<SSL_add0_chain_cert(3)|SSL_add0_chain_cert(3)>
+L<SSL_add1_chain_cert(3)|SSL_add1_chain_cert(3)>
+L<SSL_CTX_build_cert_chain(3)|SSL_CTX_build_cert_chain(3)>
+L<SSL_build_cert_chain(3)|SSL_build_cert_chain(3)>
=cut
diff --git a/crypto/openssl/doc/ssl/SSL_CTX_get0_param.pod b/crypto/openssl/doc/ssl/SSL_CTX_get0_param.pod
new file mode 100644
index 0000000..332f181
--- /dev/null
+++ b/crypto/openssl/doc/ssl/SSL_CTX_get0_param.pod
@@ -0,0 +1,55 @@
+=pod
+
+=head1 NAME
+
+SSL_CTX_get0_param, SSL_get0_param, SSL_CTX_set1_param, SSL_set1_param -
+get and set verification parameters
+
+=head1 SYNOPSIS
+
+ #include <openssl/ssl.h>
+
+ X509_VERIFY_PARAM *SSL_CTX_get0_param(SSL_CTX *ctx)
+ X509_VERIFY_PARAM *SSL_get0_param(SSL *ssl)
+ int SSL_CTX_set1_param(SSL_CTX *ctx, X509_VERIFY_PARAM *vpm)
+ int SSL_set1_param(SSL *ssl, X509_VERIFY_PARAM *vpm)
+
+=head1 DESCRIPTION
+
+SSL_CTX_get0_param() and SSL_get0_param() retrieve an internal pointer to
+the verification parameters for B<ctx> or B<ssl> respectively. The returned
+pointer must not be freed by the calling application.
+
+SSL_CTX_set1_param() and SSL_set1_param() set the verification parameters
+to B<vpm> for B<ctx> or B<ssl>.
+
+=head1 NOTES
+
+Typically parameters are retrieved from an B<SSL_CTX> or B<SSL> structure
+using SSL_CTX_get0_param() or SSL_get0_param() and an application modifies
+them to suit its needs: for example to add a hostname check.
+
+=head1 EXAMPLE
+
+Check hostname matches "www.foo.com" in peer certificate:
+
+ X509_VERIFY_PARAM *vpm = SSL_get0_param(ssl);
+ X509_VERIFY_PARAM_set1_host(vpm, "www.foo.com");
+
+=head1 RETURN VALUES
+
+SSL_CTX_get0_param() and SSL_get0_param() return a pointer to an
+B<X509_VERIFY_PARAM> structure.
+
+SSL_CTX_set1_param() and SSL_set1_param() return 1 for success and 0
+for failure.
+
+=head1 SEE ALSO
+
+L<X509_VERIFY_PARAM_set_flags(3)|X509_VERIFY_PARAM_set_flags(3)>
+
+=head1 HISTORY
+
+These functions were first added to OpenSSL 1.0.2.
+
+=cut
diff --git a/crypto/openssl/doc/ssl/SSL_CTX_sess_set_cache_size.pod b/crypto/openssl/doc/ssl/SSL_CTX_sess_set_cache_size.pod
index c8b99f4..4aeda09 100644
--- a/crypto/openssl/doc/ssl/SSL_CTX_sess_set_cache_size.pod
+++ b/crypto/openssl/doc/ssl/SSL_CTX_sess_set_cache_size.pod
@@ -15,6 +15,7 @@ SSL_CTX_sess_set_cache_size, SSL_CTX_sess_get_cache_size - manipulate session ca
SSL_CTX_sess_set_cache_size() sets the size of the internal session cache
of context B<ctx> to B<t>.
+This value is a hint and not an absolute; see the notes below.
SSL_CTX_sess_get_cache_size() returns the currently valid session cache size.
@@ -25,8 +26,9 @@ currently 1024*20, so that up to 20000 sessions can be held. This size
can be modified using the SSL_CTX_sess_set_cache_size() call. A special
case is the size 0, which is used for unlimited size.
-When the maximum number of sessions is reached, no more new sessions are
-added to the cache. New space may be added by calling
+If adding the session makes the cache exceed its size, then unused
+sessions are dropped from the end of the cache.
+Cache space may also be reclaimed by calling
L<SSL_CTX_flush_sessions(3)|SSL_CTX_flush_sessions(3)> to remove
expired sessions.
diff --git a/crypto/openssl/doc/ssl/SSL_CTX_set1_curves.pod b/crypto/openssl/doc/ssl/SSL_CTX_set1_curves.pod
new file mode 100644
index 0000000..18d0c9a
--- /dev/null
+++ b/crypto/openssl/doc/ssl/SSL_CTX_set1_curves.pod
@@ -0,0 +1,103 @@
+=pod
+
+=head1 NAME
+
+SSL_CTX_set1_curves, SSL_CTX_set1_curves_list, SSL_set1_curves,
+SSL_set1_curves_list, SSL_get1_curves, SSL_get_shared_curve,
+SSL_CTX_set_ecdh_auto, SSL_set_ecdh_auto - EC supported curve functions
+
+=head1 SYNOPSIS
+
+ #include <openssl/ssl.h>
+
+ int SSL_CTX_set1_curves(SSL_CTX *ctx, int *clist, int clistlen);
+ int SSL_CTX_set1_curves_list(SSL_CTX *ctx, char *list);
+
+ int SSL_set1_curves(SSL *ssl, int *clist, int clistlen);
+ int SSL_set1_curves_list(SSL *ssl, char *list);
+
+ int SSL_get1_curves(SSL *ssl, int *curves);
+ int SSL_get_shared_curve(SSL *s, int n);
+
+ int SSL_CTX_set_ecdh_auto(SSL_CTX *ctx, int onoff);
+ int SSL_set_ecdh_auto(SSL *s, int onoff);
+
+=head1 DESCRIPTION
+
+SSL_CTX_set1_curves() sets the supported curves for B<ctx> to B<clistlen>
+curves in the array B<clist>. The array consist of all NIDs of curves in
+preference order. For a TLS client the curves are used directly in the
+supported curves extension. For a TLS server the curves are used to
+determine the set of shared curves.
+
+SSL_CTX_set1_curves_list() sets the supported curves for B<ctx> to
+string B<list>. The string is a colon separated list of curve NIDs or
+names, for example "P-521:P-384:P-256".
+
+SSL_set1_curves() and SSL_set1_curves_list() are similar except they set
+supported curves for the SSL structure B<ssl>.
+
+SSL_get1_curves() returns the set of supported curves sent by a client
+in the supported curves extension. It returns the total number of
+supported curves. The B<curves> parameter can be B<NULL> to simply
+return the number of curves for memory allocation purposes. The
+B<curves> array is in the form of a set of curve NIDs in preference
+order. It can return zero if the client did not send a supported curves
+extension.
+
+SSL_get_shared_curve() returns shared curve B<n> for a server-side
+SSL B<ssl>. If B<n> is -1 then the total number of shared curves is
+returned, which may be zero. Other than for diagnostic purposes,
+most applications will only be interested in the first shared curve
+so B<n> is normally set to zero. If the value B<n> is out of range,
+NID_undef is returned.
+
+SSL_CTX_set_ecdh_auto() and SSL_set_ecdh_auto() set automatic curve
+selection for server B<ctx> or B<ssl> to B<onoff>. If B<onoff> is 1 then
+the highest preference curve is automatically used for ECDH temporary
+keys used during key exchange.
+
+All these functions are implemented as macros.
+
+=head1 NOTES
+
+If an application wishes to make use of several of these functions for
+configuration purposes either on a command line or in a file it should
+consider using the SSL_CONF interface instead of manually parsing options.
+
+The functions SSL_CTX_set_ecdh_auto() and SSL_set_ecdh_auto() can be used to
+make a server always choose the most appropriate curve for a client. If set
+it will override any temporary ECDH parameters set by a server. Previous
+versions of OpenSSL could effectively only use a single ECDH curve set
+using a function such as SSL_CTX_set_ecdh_tmp(). Newer applications should
+just call:
+
+ SSL_CTX_set_ecdh_auto(ctx, 1);
+
+and they will automatically support ECDH using the most appropriate shared
+curve.
+
+=head1 RETURN VALUES
+
+SSL_CTX_set1_curves(), SSL_CTX_set1_curves_list(), SSL_set1_curves(),
+SSL_set1_curves_list(), SSL_CTX_set_ecdh_auto() and SSL_set_ecdh_auto()
+return 1 for success and 0 for failure.
+
+SSL_get1_curves() returns the number of curves, which may be zero.
+
+SSL_get_shared_curve() returns the NID of shared curve B<n> or NID_undef if there
+is no shared curve B<n>; or the total number of shared curves if B<n>
+is -1.
+
+When called on a client B<ssl>, SSL_get_shared_curve() has no meaning and
+returns -1.
+
+=head1 SEE ALSO
+
+L<SSL_CTX_add_extra_chain_cert(3)|SSL_CTX_add_extra_chain_cert(3)>
+
+=head1 HISTORY
+
+These functions were first added to OpenSSL 1.0.2.
+
+=cut
diff --git a/crypto/openssl/doc/ssl/SSL_CTX_set1_verify_cert_store.pod b/crypto/openssl/doc/ssl/SSL_CTX_set1_verify_cert_store.pod
new file mode 100644
index 0000000..493cca4
--- /dev/null
+++ b/crypto/openssl/doc/ssl/SSL_CTX_set1_verify_cert_store.pod
@@ -0,0 +1,91 @@
+=pod
+
+=head1 NAME
+
+SSL_CTX_set0_verify_cert_store, SSL_CTX_set1_verify_cert_store,
+SSL_CTX_set0_chain_cert_store, SSL_CTX_set1_chain_cert_store,
+SSL_set0_verify_cert_store, SSL_set1_verify_cert_store,
+SSL_set0_chain_cert_store, SSL_set1_chain_cert_store - set certificate
+verification or chain store
+
+=head1 SYNOPSIS
+
+ #include <openssl/ssl.h>
+
+ int SSL_CTX_set0_verify_cert_store(SSL_CTX *ctx, X509_STORE *st);
+ int SSL_CTX_set1_verify_cert_store(SSL_CTX *ctx, X509_STORE *st);
+ int SSL_CTX_set0_chain_cert_store(SSL_CTX *ctx, X509_STORE *st);
+ int SSL_CTX_set1_chain_cert_store(SSL_CTX *ctx, X509_STORE *st);
+
+ int SSL_set0_verify_cert_store(SSL_CTX *ctx, X509_STORE *st);
+ int SSL_set1_verify_cert_store(SSL_CTX *ctx, X509_STORE *st);
+ int SSL_set0_chain_cert_store(SSL_CTX *ctx, X509_STORE *st);
+ int SSL_set1_chain_cert_store(SSL_CTX *ctx, X509_STORE *st);
+
+=head1 DESCRIPTION
+
+SSL_CTX_set0_verify_cert_store() and SSL_CTX_set1_verify_cert_store()
+set the certificate store used for certificate verification to B<st>.
+
+SSL_CTX_set0_chain_cert_store() and SSL_CTX_set1_chain_cert_store()
+set the certificate store used for certificate chain building to B<st>.
+
+SSL_set0_verify_cert_store(), SSL_set1_verify_cert_store(),
+SSL_set0_chain_cert_store() and SSL_set1_chain_cert_store() are similar
+except they apply to SSL structure B<ssl>.
+
+All these functions are implemented as macros. Those containing a B<1>
+increment the reference count of the supplied store so it must
+be freed at some point after the operation. Those containing a B<0> do
+not increment reference counts and the supplied store B<MUST NOT> be freed
+after the operation.
+
+=head1 NOTES
+
+The stores pointers associated with an SSL_CTX structure are copied to any SSL
+structures when SSL_new() is called. As a result SSL structures will not be
+affected if the parent SSL_CTX store pointer is set to a new value.
+
+The verification store is used to verify the certificate chain sent by the
+peer: that is an SSL/TLS client will use the verification store to verify
+the server's certificate chain and a SSL/TLS server will use it to verify
+any client certificate chain.
+
+The chain store is used to build the certificate chain.
+
+If the mode B<SSL_MODE_NO_AUTO_CHAIN> is set or a certificate chain is
+configured already (for example using the functions such as
+L<SSL_CTX_add1_chain_cert(3)|SSL_CTX_add1_chain_cert(3)> or
+L<SSL_CTX_add_extra_chain_cert(3)|SSL_CTX_add_extra_chain_cert(3)>) then
+automatic chain building is disabled.
+
+If the mode B<SSL_MODE_NO_AUTO_CHAIN> is set then automatic chain building
+is disabled.
+
+If the chain or the verification store is not set then the store associated
+with the parent SSL_CTX is used instead to retain compatibility with previous
+versions of OpenSSL.
+
+=head1 RETURN VALUES
+
+All these functions return 1 for success and 0 for failure.
+
+=head1 SEE ALSO
+
+L<SSL_CTX_add_extra_chain_cert(3)|SSL_CTX_add_extra_chain_cert(3)>
+L<SSL_CTX_set0_chain(3)|SSL_CTX_set0_chain(3)>
+L<SSL_CTX_set1_chain(3)|SSL_CTX_set1_chain(3)>
+L<SSL_CTX_add0_chain_cert(3)|SSL_CTX_add0_chain_cert(3)>
+L<SSL_CTX_add1_chain_cert(3)|SSL_CTX_add1_chain_cert(3)>
+L<SSL_set0_chain(3)|SSL_set0_chain(3)>
+L<SSL_set1_chain(3)|SSL_set1_chain(3)>
+L<SSL_add0_chain_cert(3)|SSL_add0_chain_cert(3)>
+L<SSL_add1_chain_cert(3)|SSL_add1_chain_cert(3)>
+L<SSL_CTX_build_cert_chain(3)|SSL_CTX_build_cert_chain(3)>
+L<SSL_build_cert_chain(3)|SSL_build_cert_chain(3)>
+
+=head1 HISTORY
+
+These functions were first added to OpenSSL 1.0.2.
+
+=cut
diff --git a/crypto/openssl/doc/ssl/SSL_CTX_set_cert_cb.pod b/crypto/openssl/doc/ssl/SSL_CTX_set_cert_cb.pod
new file mode 100644
index 0000000..141d828
--- /dev/null
+++ b/crypto/openssl/doc/ssl/SSL_CTX_set_cert_cb.pod
@@ -0,0 +1,68 @@
+=pod
+
+=head1 NAME
+
+SSL_CTX_set_cert_cb, SSL_set_cert_cb - handle certificate callback function
+
+=head1 SYNOPSIS
+
+ #include <openssl/ssl.h>
+
+ void SSL_CTX_set_cert_cb(SSL_CTX *c, int (*cert_cb)(SSL *ssl, void *arg), void *arg);
+ void SSL_set_cert_cb(SSL *s, int (*cert_cb)(SSL *ssl, void *arg), void *arg);
+
+ int (*cert_cb)(SSL *ssl, void *arg);
+
+=head1 DESCRIPTION
+
+SSL_CTX_set_cert_cb() and SSL_set_cert_cb() sets the B<cert_cb()> callback,
+B<arg> value is pointer which is passed to the application callback.
+
+When B<cert_cb()> is NULL, no callback function is used.
+
+cert_cb() is the application defined callback. It is called before a
+certificate will be used by a client or server. The callback can then inspect
+the passed B<ssl> structure and set or clear any appropriate certificates. If
+the callback is successful it B<MUST> return 1 even if no certificates have
+been set. A zero is returned on error which will abort the handshake with a
+fatal internal error alert. A negative return value will suspend the handshake
+and the handshake function will return immediately.
+L<SSL_get_error(3)|SSL_get_error(3)> will return SSL_ERROR_WANT_X509_LOOKUP to
+indicate, that the handshake was suspended. The next call to the handshake
+function will again lead to the call of cert_cb(). It is the job of the
+cert_cb() to store information about the state of the last call,
+if required to continue.
+
+=head1 NOTES
+
+An application will typically call SSL_use_certificate() and
+SSL_use_PrivateKey() to set the end entity certificate and private key.
+It can add intermediate and optionally the root CA certificates using
+SSL_add1_chain_cert().
+
+It might also call SSL_certs_clear() to delete any certificates associated
+with the B<SSL> object.
+
+The certificate callback functionality supercedes the (largely broken)
+functionality provided by the old client certificate callback interface.
+It is B<always> called even is a certificate is already set so the callback
+can modify or delete the existing certificate.
+
+A more advanced callback might examine the handshake parameters and set
+whatever chain is appropriate. For example a legacy client supporting only
+TLS v1.0 might receive a certificate chain signed using SHA1 whereas a
+TLS v1.2 client which advertises support for SHA256 could receive a chain
+using SHA256.
+
+Normal server sanity checks are performed on any certificates set
+by the callback. So if an EC chain is set for a curve the client does not
+support it will B<not> be used.
+
+=head1 SEE ALSO
+
+L<ssl(3)|ssl(3)>, L<SSL_use_certificate(3)|SSL_use_certificate(3)>,
+L<SSL_add1_chain_cert(3)|SSL_add1_chain_cert(3)>,
+L<SSL_get_client_CA_list(3)|SSL_get_client_CA_list(3)>,
+L<SSL_clear(3)|SSL_clear(3)>, L<SSL_free(3)|SSL_free(3)>
+
+=cut
diff --git a/crypto/openssl/doc/ssl/SSL_CTX_set_cert_store.pod b/crypto/openssl/doc/ssl/SSL_CTX_set_cert_store.pod
index 6acf0d9..846416e 100644
--- a/crypto/openssl/doc/ssl/SSL_CTX_set_cert_store.pod
+++ b/crypto/openssl/doc/ssl/SSL_CTX_set_cert_store.pod
@@ -42,6 +42,13 @@ L<SSL_CTX_set_verify(3)|SSL_CTX_set_verify(3)> family of functions.
This document must therefore be updated when documentation about the
X509_STORE object and its handling becomes available.
+=head1 RESTRICTIONS
+
+The X509_STORE structure used by an SSL_CTX is used for verifying peer
+certificates and building certificate chains, it is also shared by
+every child SSL structure. Applications wanting finer control can use
+functions such as SSL_CTX_set1_verify_cert_store() instead.
+
=head1 RETURN VALUES
SSL_CTX_set_cert_store() does not return diagnostic output.
diff --git a/crypto/openssl/doc/ssl/SSL_CTX_set_cipher_list.pod b/crypto/openssl/doc/ssl/SSL_CTX_set_cipher_list.pod
index bd4df4a..c84a831 100644
--- a/crypto/openssl/doc/ssl/SSL_CTX_set_cipher_list.pod
+++ b/crypto/openssl/doc/ssl/SSL_CTX_set_cipher_list.pod
@@ -41,7 +41,7 @@ RSA export ciphers with a keylength of 512 bits for the RSA key require
a temporary 512 bit RSA key, as typically the supplied key has a length
of 1024 bit (see
L<SSL_CTX_set_tmp_rsa_callback(3)|SSL_CTX_set_tmp_rsa_callback(3)>).
-RSA ciphers using EDH need a certificate and key and additional DH-parameters
+RSA ciphers using DHE need a certificate and key and additional DH-parameters
(see L<SSL_CTX_set_tmp_dh_callback(3)|SSL_CTX_set_tmp_dh_callback(3)>).
A DSA cipher can only be chosen, when a DSA certificate is available.
diff --git a/crypto/openssl/doc/ssl/SSL_CTX_set_custom_cli_ext.pod b/crypto/openssl/doc/ssl/SSL_CTX_set_custom_cli_ext.pod
new file mode 100644
index 0000000..3fceef9
--- /dev/null
+++ b/crypto/openssl/doc/ssl/SSL_CTX_set_custom_cli_ext.pod
@@ -0,0 +1,133 @@
+=pod
+
+=head1 NAME
+
+SSL_CTX_add_client_custom_ext, SSL_CTX_add_server_custom_ext - custom TLS extension handling
+
+=head1 SYNOPSIS
+
+ #include <openssl/ssl.h>
+
+ int SSL_CTX_add_client_custom_ext(SSL_CTX *ctx, unsigned int ext_type,
+ custom_ext_add_cb add_cb,
+ custom_ext_free_cb free_cb, void *add_arg,
+ custom_ext_parse_cb parse_cb,
+ void *parse_arg);
+
+ int SSL_CTX_add_server_custom_ext(SSL_CTX *ctx, unsigned int ext_type,
+ custom_ext_add_cb add_cb,
+ custom_ext_free_cb free_cb, void *add_arg,
+ custom_ext_parse_cb parse_cb,
+ void *parse_arg);
+
+ int SSL_extension_supported(unsigned int ext_type);
+
+ typedef int (*custom_ext_add_cb)(SSL *s, unsigned int ext_type,
+ const unsigned char **out,
+ size_t *outlen, int *al,
+ void *add_arg);
+
+ typedef void (*custom_ext_free_cb)(SSL *s, unsigned int ext_type,
+ const unsigned char *out,
+ void *add_arg);
+
+ typedef int (*custom_ext_parse_cb)(SSL *s, unsigned int ext_type,
+ const unsigned char *in,
+ size_t inlen, int *al,
+ void *parse_arg);
+
+
+=head1 DESCRIPTION
+
+SSL_CTX_add_client_custom_ext() adds a custom extension for a TLS client
+with extension type B<ext_type> and callbacks B<add_cb>, B<free_cb> and
+B<parse_cb>.
+
+SSL_CTX_add_server_custom_ext() adds a custom extension for a TLS server
+with extension type B<ext_type> and callbacks B<add_cb>, B<free_cb> and
+B<parse_cb>.
+
+In both cases the extension type must not be handled by OpenSSL internally
+or an error occurs.
+
+SSL_extension_supported() returns 1 if the extension B<ext_type> is handled
+internally by OpenSSL and 0 otherwise.
+
+=head1 EXTENSION CALLBACKS
+
+The callback B<add_cb> is called to send custom extension data to be
+included in ClientHello for TLS clients or ServerHello for servers. The
+B<ext_type> parameter is set to the extension type which will be added and
+B<add_arg> to the value set when the extension handler was added.
+
+If the application wishes to include the extension B<ext_type> it should
+set B<*out> to the extension data, set B<*outlen> to the length of the
+extension data and return 1.
+
+If the B<add_cb> does not wish to include the extension it must return 0.
+
+If B<add_cb> returns -1 a fatal handshake error occurs using the TLS
+alert value specified in B<*al>.
+
+For clients (but not servers) if B<add_cb> is set to NULL a zero length
+extension is added for B<ext_type>.
+
+For clients every registered B<add_cb> is always called to see if the
+application wishes to add an extension to ClientHello.
+
+For servers every registered B<add_cb> is called once if and only if the
+corresponding extension was received in ClientHello to see if the application
+wishes to add the extension to ServerHello. That is, if no corresponding extension
+was received in ClientHello then B<add_cb> will not be called.
+
+If an extension is added (that is B<add_cb> returns 1) B<free_cb> is called
+(if it is set) with the value of B<out> set by the add callback. It can be
+used to free up any dynamic extension data set by B<add_cb>. Since B<out> is
+constant (to permit use of constant data in B<add_cb>) applications may need to
+cast away const to free the data.
+
+The callback B<parse_cb> receives data for TLS extensions. For TLS clients
+the extension data will come from ServerHello and for TLS servers it will
+come from ClientHello.
+
+The extension data consists of B<inlen> bytes in the buffer B<in> for the
+extension B<extension_type>.
+
+If the B<parse_cb> considers the extension data acceptable it must return
+1. If it returns 0 or a negative value a fatal handshake error occurs
+using the TLS alert value specified in B<*al>.
+
+The buffer B<in> is a temporary internal buffer which will not be valid after
+the callback returns.
+
+=head1 NOTES
+
+The B<add_arg> and B<parse_arg> parameters can be set to arbitrary values
+which will be passed to the corresponding callbacks. They can, for example,
+be used to store the extension data received in a convenient structure or
+pass the extension data to be added or freed when adding extensions.
+
+The B<ext_type> parameter corresponds to the B<extension_type> field of
+RFC5246 et al. It is B<not> a NID.
+
+If the same custom extension type is received multiple times a fatal
+B<decode_error> alert is sent and the handshake aborts. If a custom extension
+is received in ServerHello which was not sent in ClientHello a fatal
+B<unsupported_extension> alert is sent and the handshake is aborted. The
+ServerHello B<add_cb> callback is only called if the corresponding extension
+was received in ClientHello. This is compliant with the TLS specifications.
+This behaviour ensures that each callback is called at most once and that
+an application can never send unsolicited extensions.
+
+=head1 RETURN VALUES
+
+SSL_CTX_add_client_custom_ext() and SSL_CTX_add_server_custom_ext() return 1 for
+success and 0 for failure. A failure can occur if an attempt is made to
+add the same B<ext_type> more than once, if an attempt is made to use an
+extension type handled internally by OpenSSL or if an internal error occurs
+(for example a memory allocation failure).
+
+SSL_extension_supported() returns 1 if the extension B<ext_type> is handled
+internally by OpenSSL and 0 otherwise.
+
+=cut
diff --git a/crypto/openssl/doc/ssl/SSL_CTX_set_tmp_rsa_callback.pod b/crypto/openssl/doc/ssl/SSL_CTX_set_tmp_rsa_callback.pod
index 8794eb7..94c55b8 100644
--- a/crypto/openssl/doc/ssl/SSL_CTX_set_tmp_rsa_callback.pod
+++ b/crypto/openssl/doc/ssl/SSL_CTX_set_tmp_rsa_callback.pod
@@ -70,7 +70,7 @@ the TLS standard, when the RSA key can be used for signing only, that is
for export ciphers. Using ephemeral RSA key exchange for other purposes
violates the standard and can break interoperability with clients.
It is therefore strongly recommended to not use ephemeral RSA key
-exchange and use EDH (Ephemeral Diffie-Hellman) key exchange instead
+exchange and use DHE (Ephemeral Diffie-Hellman) key exchange instead
in order to achieve forward secrecy (see
L<SSL_CTX_set_tmp_dh_callback(3)|SSL_CTX_set_tmp_dh_callback(3)>).
diff --git a/crypto/openssl/doc/ssl/SSL_CTX_use_certificate.pod b/crypto/openssl/doc/ssl/SSL_CTX_use_certificate.pod
index 10be95f..80321b8 100644
--- a/crypto/openssl/doc/ssl/SSL_CTX_use_certificate.pod
+++ b/crypto/openssl/doc/ssl/SSL_CTX_use_certificate.pod
@@ -109,10 +109,9 @@ this B<ssl>, the last item added into B<ctx> will be checked.
=head1 NOTES
-The internal certificate store of OpenSSL can hold two private key/certificate
-pairs at a time: one key/certificate of type RSA and one key/certificate
-of type DSA. The certificate used depends on the cipher select, see
-also L<SSL_CTX_set_cipher_list(3)|SSL_CTX_set_cipher_list(3)>.
+The internal certificate store of OpenSSL can hold several private
+key/certificate pairs at a time. The certificate used depends on the
+cipher selected, see also L<SSL_CTX_set_cipher_list(3)|SSL_CTX_set_cipher_list(3)>.
When reading certificates and private keys from file, files of type
SSL_FILETYPE_ASN1 (also known as B<DER>, binary encoding) can only contain
@@ -122,16 +121,13 @@ Files of type SSL_FILETYPE_PEM can contain more than one item.
SSL_CTX_use_certificate_chain_file() adds the first certificate found
in the file to the certificate store. The other certificates are added
-to the store of chain certificates using
-L<SSL_CTX_add_extra_chain_cert(3)|SSL_CTX_add_extra_chain_cert(3)>.
-There exists only one extra chain store, so that the same chain is appended
-to both types of certificates, RSA and DSA! If it is not intended to use
-both type of certificate at the same time, it is recommended to use the
-SSL_CTX_use_certificate_chain_file() instead of the
-SSL_CTX_use_certificate_file() function in order to allow the use of
-complete certificate chains even when no trusted CA storage is used or
-when the CA issuing the certificate shall not be added to the trusted
-CA storage.
+to the store of chain certificates using L<SSL_CTX_add1_chain_cert(3)|SSL_CTX_add1_chain_cert(3)>. Note: versions of OpenSSL before 1.0.2 only had a single
+certificate chain store for all certificate types, OpenSSL 1.0.2 and later
+have a separate chain store for each type. SSL_CTX_use_certificate_chain_file()
+should be used instead of the SSL_CTX_use_certificate_file() function in order
+to allow the use of complete certificate chains even when no trusted CA
+storage is used or when the CA issuing the certificate shall not be added to
+the trusted CA storage.
If additional certificates are needed to complete the chain during the
TLS negotiation, CA certificates are additionally looked up in the
diff --git a/crypto/openssl/doc/ssl/SSL_CTX_use_psk_identity_hint.pod b/crypto/openssl/doc/ssl/SSL_CTX_use_psk_identity_hint.pod
index 9da7201..12db0da 100644
--- a/crypto/openssl/doc/ssl/SSL_CTX_use_psk_identity_hint.pod
+++ b/crypto/openssl/doc/ssl/SSL_CTX_use_psk_identity_hint.pod
@@ -83,7 +83,12 @@ Return values from the server callback are interpreted as follows:
=over 4
-=item > 0
+=item Z<>0
+
+PSK identity was not found. An "unknown_psk_identity" alert message
+will be sent and the connection setup fails.
+
+=item E<gt>0
PSK identity was found and the server callback has provided the PSK
successfully in parameter B<psk>. Return value is the length of
@@ -96,11 +101,6 @@ data to B<psk> and return the length of the random data, so the
connection will fail with decryption_error before it will be finished
completely.
-=item Z<>0
-
-PSK identity was not found. An "unknown_psk_identity" alert message
-will be sent and the connection setup fails.
-
=back
=cut
diff --git a/crypto/openssl/doc/ssl/SSL_CTX_use_serverinfo.pod b/crypto/openssl/doc/ssl/SSL_CTX_use_serverinfo.pod
new file mode 100644
index 0000000..318e052
--- /dev/null
+++ b/crypto/openssl/doc/ssl/SSL_CTX_use_serverinfo.pod
@@ -0,0 +1,46 @@
+=pod
+
+=head1 NAME
+
+SSL_CTX_use_serverinfo, SSL_CTX_use_serverinfo_file - use serverinfo extension
+
+=head1 SYNOPSIS
+
+ #include <openssl/ssl.h>
+
+ int SSL_CTX_use_serverinfo(SSL_CTX *ctx, const unsigned char *serverinfo,
+ size_t serverinfo_length);
+
+ int SSL_CTX_use_serverinfo_file(SSL_CTX *ctx, const char *file);
+
+=head1 DESCRIPTION
+
+These functions load "serverinfo" TLS ServerHello Extensions into the SSL_CTX.
+A "serverinfo" extension is returned in response to an empty ClientHello
+Extension.
+
+SSL_CTX_use_serverinfo() loads one or more serverinfo extensions from
+a byte array into B<ctx>. The extensions must be concatenated into a
+sequence of bytes. Each extension must consist of a 2-byte Extension Type,
+a 2-byte length, and then length bytes of extension_data.
+
+SSL_CTX_use_serverinfo_file() loads one or more serverinfo extensions from
+B<file> into B<ctx>. The extensions must be in PEM format. Each extension
+must consist of a 2-byte Extension Type, a 2-byte length, and then length
+bytes of extension_data. Each PEM extension name must begin with the phrase
+"BEGIN SERVERINFO FOR ".
+
+=head1 NOTES
+
+=head1 RETURN VALUES
+
+On success, the functions return 1.
+On failure, the functions return 0. Check out the error stack to find out
+the reason.
+
+=head1 SEE ALSO
+
+=head1 HISTORY
+
+
+=cut
diff --git a/crypto/openssl/doc/ssl/SSL_accept.pod b/crypto/openssl/doc/ssl/SSL_accept.pod
index 2239444..89ad6bd 100644
--- a/crypto/openssl/doc/ssl/SSL_accept.pod
+++ b/crypto/openssl/doc/ssl/SSL_accept.pod
@@ -21,10 +21,7 @@ B<ssl> by setting an underlying B<BIO>.
The behaviour of SSL_accept() depends on the underlying BIO.
If the underlying BIO is B<blocking>, SSL_accept() will only return once the
-handshake has been finished or an error occurred, except for SGC (Server
-Gated Cryptography). For SGC, SSL_accept() may return with -1, but
-SSL_get_error() will yield B<SSL_ERROR_WANT_READ/WRITE> and SSL_accept()
-should be called again.
+handshake has been finished or an error occurred.
If the underlying BIO is B<non-blocking>, SSL_accept() will also return
when the underlying BIO could not satisfy the needs of SSL_accept()
diff --git a/crypto/openssl/doc/ssl/SSL_do_handshake.pod b/crypto/openssl/doc/ssl/SSL_do_handshake.pod
index b35ddf5..8b590c9 100644
--- a/crypto/openssl/doc/ssl/SSL_do_handshake.pod
+++ b/crypto/openssl/doc/ssl/SSL_do_handshake.pod
@@ -23,10 +23,7 @@ L<SSL_set_accept_state(3)|SSL_set_accept_state(3)>.
The behaviour of SSL_do_handshake() depends on the underlying BIO.
If the underlying BIO is B<blocking>, SSL_do_handshake() will only return
-once the handshake has been finished or an error occurred, except for SGC
-(Server Gated Cryptography). For SGC, SSL_do_handshake() may return with -1,
-but SSL_get_error() will yield B<SSL_ERROR_WANT_READ/WRITE> and
-SSL_do_handshake() should be called again.
+once the handshake has been finished or an error occurred.
If the underlying BIO is B<non-blocking>, SSL_do_handshake() will also return
when the underlying BIO could not satisfy the needs of SSL_do_handshake()
diff --git a/crypto/openssl/doc/ssl/SSL_shutdown.pod b/crypto/openssl/doc/ssl/SSL_shutdown.pod
index 85d4a64..efbff5a 100644
--- a/crypto/openssl/doc/ssl/SSL_shutdown.pod
+++ b/crypto/openssl/doc/ssl/SSL_shutdown.pod
@@ -104,7 +104,7 @@ erroneous SSL_ERROR_SYSCALL may be flagged even though no error occurred.
The shutdown was successfully completed. The "close notify" alert was sent
and the peer's "close notify" alert was received.
-=item -1
+=item E<lt>0
The shutdown was not successful because a fatal error occurred either
at the protocol level or a connection failure occurred. It can also occur if
diff --git a/crypto/openssl/doc/ssl/ssl.pod b/crypto/openssl/doc/ssl/ssl.pod
index 660489a..242087e 100644
--- a/crypto/openssl/doc/ssl/ssl.pod
+++ b/crypto/openssl/doc/ssl/ssl.pod
@@ -380,6 +380,10 @@ session instead of a context.
=item int B<SSL_CTX_use_certificate_file>(SSL_CTX *ctx, char *file, int type);
+=item X509 *B<SSL_CTX_get0_certificate>(const SSL_CTX *ctx);
+
+=item EVP_PKEY *B<SSL_CTX_get0_privatekey>(const SSL_CTX *ctx);
+
=item void B<SSL_CTX_set_psk_client_callback>(SSL_CTX *ctx, unsigned int (*callback)(SSL *ssl, const char *hint, char *identity, unsigned int max_identity_len, unsigned char *psk, unsigned int max_psk_len));
=item int B<SSL_CTX_use_psk_identity_hint>(SSL_CTX *ctx, const char *hint);
@@ -513,7 +517,7 @@ connection defined in the B<SSL> structure.
=item X509 *B<SSL_get_peer_certificate>(const SSL *ssl);
-=item EVP_PKEY *B<SSL_get_privatekey>(SSL *ssl);
+=item EVP_PKEY *B<SSL_get_privatekey>(const SSL *ssl);
=item int B<SSL_get_quiet_shutdown>(const SSL *ssl);
diff --git a/crypto/openssl/doc/ssleay.txt b/crypto/openssl/doc/ssleay.txt
index 4d2e714..c9b29bd 100644
--- a/crypto/openssl/doc/ssleay.txt
+++ b/crypto/openssl/doc/ssleay.txt
@@ -6026,7 +6026,7 @@ one at a time, or use 'aliases' to specify the preference and order for
the ciphers.
There are a large number of aliases, but the most importaint are
-kRSA, kDHr, kDHd and kEDH for key exchange types.
+kRSA, kDHr, kDHd and kDHE for key exchange types.
aRSA, aDSS, aNULL and aDH for authentication
DES, 3DES, RC4, RC2, IDEA and eNULL for ciphers
diff --git a/crypto/openssl/e_os.h b/crypto/openssl/e_os.h
index 7584485..45fef69 100644
--- a/crypto/openssl/e_os.h
+++ b/crypto/openssl/e_os.h
@@ -277,7 +277,7 @@ extern "C" {
*/
# define _WIN32_WINNT 0x0400
# endif
-# if !defined(OPENSSL_NO_SOCK) && defined(_WIN32_WINNT)
+# if !defined(OPENSSL_NO_SOCK) && (defined(_WIN32_WINNT) || defined(_WIN32_WCE))
/*
* Just like defining _WIN32_WINNT including winsock2.h implies
* certain "discipline" for maintaining [broad] binary compatibility.
@@ -293,6 +293,9 @@ extern "C" {
# include <stdio.h>
# include <stddef.h>
# include <errno.h>
+# if defined(_WIN32_WCE) && !defined(EACCES)
+# define EACCES 13
+# endif
# include <string.h>
# ifdef _WIN64
# define strlen(s) _strlen31(s)
@@ -314,8 +317,8 @@ static __inline unsigned int _strlen31(const char *str)
# undef isupper
# undef isxdigit
# endif
-# if defined(_MSC_VER) && !defined(_DLL) && defined(stdin)
-# if _MSC_VER>=1300
+# if defined(_MSC_VER) && !defined(_WIN32_WCE) && !defined(_DLL) && defined(stdin)
+# if _MSC_VER>=1300 && _MSC_VER<1600
# undef stdin
# undef stdout
# undef stderr
@@ -323,7 +326,7 @@ FILE *__iob_func();
# define stdin (&__iob_func()[0])
# define stdout (&__iob_func()[1])
# define stderr (&__iob_func()[2])
-# elif defined(I_CAN_LIVE_WITH_LNK4049)
+# elif _MSC_VER<1300 && defined(I_CAN_LIVE_WITH_LNK4049)
# undef stdin
# undef stdout
# undef stderr
@@ -498,6 +501,10 @@ typedef unsigned long clock_t;
/*************/
+# if defined(OPENSSL_NO_SOCK) && !defined(OPENSSL_NO_DGRAM)
+# define OPENSSL_NO_DGRAM
+# endif
+
# ifdef USE_SOCKETS
# if defined(WINDOWS) || defined(MSDOS)
/* windows world */
diff --git a/crypto/openssl/e_os2.h b/crypto/openssl/e_os2.h
index 2b1b78f..7be9989 100644
--- a/crypto/openssl/e_os2.h
+++ b/crypto/openssl/e_os2.h
@@ -101,7 +101,7 @@ extern "C" {
# undef OPENSSL_SYS_UNIX
# define OPENSSL_SYS_WIN32_UWIN
# else
-# if defined(__CYGWIN32__) || defined(OPENSSL_SYSNAME_CYGWIN32)
+# if defined(__CYGWIN__) || defined(OPENSSL_SYSNAME_CYGWIN)
# undef OPENSSL_SYS_UNIX
# define OPENSSL_SYS_WIN32_CYGWIN
# else
diff --git a/crypto/openssl/engines/Makefile b/crypto/openssl/engines/Makefile
index 23bd2f3..2058ff4 100644
--- a/crypto/openssl/engines/Makefile
+++ b/crypto/openssl/engines/Makefile
@@ -111,7 +111,10 @@ install:
for l in $(LIBNAMES); do \
( echo installing $$l; \
pfx=lib; \
- if [ "$(PLATFORM)" != "Cygwin" ]; then \
+ if expr "$(PLATFORM)" : "Cygwin" >/dev/null; then \
+ sfx=".so"; \
+ cp cyg$$l.dll $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/engines/$$pfx$$l$$sfx.new; \
+ else \
case "$(CFLAGS)" in \
*DSO_BEOS*) sfx=".so";; \
*DSO_DLFCN*) sfx=`expr "$(SHLIB_EXT)" : '.*\(\.[a-z][a-z]*\)' \| ".so"`;; \
@@ -120,9 +123,6 @@ install:
*) sfx=".bad";; \
esac; \
cp $$pfx$$l$$sfx $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/engines/$$pfx$$l$$sfx.new; \
- else \
- sfx=".so"; \
- cp cyg$$l.dll $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/engines/$$pfx$$l$$sfx.new; \
fi; \
chmod 555 $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/engines/$$pfx$$l$$sfx.new; \
mv -f $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/engines/$$pfx$$l$$sfx.new $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/engines/$$pfx$$l$$sfx ); \
@@ -216,17 +216,17 @@ e_atalla.o: ../include/openssl/symhacks.h ../include/openssl/x509.h
e_atalla.o: ../include/openssl/x509_vfy.h e_atalla.c e_atalla_err.c
e_atalla.o: e_atalla_err.h vendor_defns/atalla.h
e_capi.o: ../include/openssl/asn1.h ../include/openssl/bio.h
-e_capi.o: ../include/openssl/bn.h ../include/openssl/buffer.h
-e_capi.o: ../include/openssl/crypto.h ../include/openssl/e_os2.h
-e_capi.o: ../include/openssl/ec.h ../include/openssl/ecdh.h
-e_capi.o: ../include/openssl/ecdsa.h ../include/openssl/engine.h
-e_capi.o: ../include/openssl/evp.h ../include/openssl/lhash.h
-e_capi.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h
-e_capi.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h
-e_capi.o: ../include/openssl/ossl_typ.h ../include/openssl/pkcs7.h
-e_capi.o: ../include/openssl/safestack.h ../include/openssl/sha.h
-e_capi.o: ../include/openssl/stack.h ../include/openssl/symhacks.h
-e_capi.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h e_capi.c
+e_capi.o: ../include/openssl/buffer.h ../include/openssl/crypto.h
+e_capi.o: ../include/openssl/e_os2.h ../include/openssl/ec.h
+e_capi.o: ../include/openssl/ecdh.h ../include/openssl/ecdsa.h
+e_capi.o: ../include/openssl/engine.h ../include/openssl/evp.h
+e_capi.o: ../include/openssl/lhash.h ../include/openssl/obj_mac.h
+e_capi.o: ../include/openssl/objects.h ../include/openssl/opensslconf.h
+e_capi.o: ../include/openssl/opensslv.h ../include/openssl/ossl_typ.h
+e_capi.o: ../include/openssl/pkcs7.h ../include/openssl/safestack.h
+e_capi.o: ../include/openssl/sha.h ../include/openssl/stack.h
+e_capi.o: ../include/openssl/symhacks.h ../include/openssl/x509.h
+e_capi.o: ../include/openssl/x509_vfy.h e_capi.c
e_chil.o: ../include/openssl/asn1.h ../include/openssl/bio.h
e_chil.o: ../include/openssl/bn.h ../include/openssl/buffer.h
e_chil.o: ../include/openssl/crypto.h ../include/openssl/dh.h
diff --git a/crypto/openssl/engines/ccgost/Makefile b/crypto/openssl/engines/ccgost/Makefile
index 4e183a4..17e1efb 100644
--- a/crypto/openssl/engines/ccgost/Makefile
+++ b/crypto/openssl/engines/ccgost/Makefile
@@ -45,7 +45,10 @@ install:
set -e; \
echo installing $(LIBNAME); \
pfx=lib; \
- if [ "$(PLATFORM)" != "Cygwin" ]; then \
+ if expr "$(PLATFORM)" : "Cygwin" >/dev/null; then \
+ sfx=".so"; \
+ cp cyg$(LIBNAME).dll $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/engines/$${pfx}$(LIBNAME)$$sfx.new; \
+ else \
case "$(CFLAGS)" in \
*DSO_BEOS*) sfx=".so";; \
*DSO_DLFCN*) sfx=`expr "$(SHLIB_EXT)" : '.*\(\.[a-z][a-z]*\)' \| ".so"`;; \
@@ -54,9 +57,6 @@ install:
*) sfx=".bad";; \
esac; \
cp $${pfx}$(LIBNAME)$$sfx $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/engines/$${pfx}$(LIBNAME)$$sfx.new; \
- else \
- sfx=".so"; \
- cp cyg$(LIBNAME).dll $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/engines/$${pfx}$(LIBNAME)$$sfx.new; \
fi; \
chmod 555 $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/engines/$${pfx}$(LIBNAME)$$sfx.new; \
mv -f $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/engines/$${pfx}$(LIBNAME)$$sfx.new $(INSTALL_PREFIX)$(INSTALLTOP)/$(LIBDIR)/engines/$${pfx}$(LIBNAME)$$sfx; \
@@ -75,8 +75,7 @@ local_depend:
@[ -z "$(THIS)" ] || $(MAKEDEPEND) -- $(CFLAG) $(INCLUDES) $(DEPFLAG) -- $(PROGS) $(LIBSRC)
files:
-
-
+ $(PERL) $(TOP)/util/files.pl Makefile >> $(TOP)/MINFO
lint:
lint -DLINT $(INCLUDES) $(SRC)>fluff
diff --git a/crypto/openssl/engines/ccgost/gost89.c b/crypto/openssl/engines/ccgost/gost89.c
index 945509d..4ff4ddd 100644
--- a/crypto/openssl/engines/ccgost/gost89.c
+++ b/crypto/openssl/engines/ccgost/gost89.c
@@ -221,7 +221,7 @@ static void kboxinit(gost_ctx * c, const gost_subst_block * b)
int i;
for (i = 0; i < 256; i++) {
- c->k87[i] = (b->k8[i >> 4] << 4 | b->k7[i & 15]) << 24;
+ c->k87[i] = (word32) (b->k8[i >> 4] << 4 | b->k7[i & 15]) << 24;
c->k65[i] = (b->k6[i >> 4] << 4 | b->k5[i & 15]) << 16;
c->k43[i] = (b->k4[i >> 4] << 4 | b->k3[i & 15]) << 8;
c->k21[i] = b->k2[i >> 4] << 4 | b->k1[i & 15];
@@ -242,8 +242,8 @@ static word32 f(gost_ctx * c, word32 x)
void gostcrypt(gost_ctx * c, const byte * in, byte * out)
{
register word32 n1, n2; /* As named in the GOST */
- n1 = in[0] | (in[1] << 8) | (in[2] << 16) | (in[3] << 24);
- n2 = in[4] | (in[5] << 8) | (in[6] << 16) | (in[7] << 24);
+ n1 = in[0] | (in[1] << 8) | (in[2] << 16) | ((word32) in[3] << 24);
+ n2 = in[4] | (in[5] << 8) | (in[6] << 16) | ((word32) in[7] << 24);
/* Instead of swapping halves, swap names each round */
n2 ^= f(c, n1 + c->k[0]);
@@ -296,8 +296,8 @@ void gostcrypt(gost_ctx * c, const byte * in, byte * out)
void gostdecrypt(gost_ctx * c, const byte * in, byte * out)
{
register word32 n1, n2; /* As named in the GOST */
- n1 = in[0] | (in[1] << 8) | (in[2] << 16) | (in[3] << 24);
- n2 = in[4] | (in[5] << 8) | (in[6] << 16) | (in[7] << 24);
+ n1 = in[0] | (in[1] << 8) | (in[2] << 16) | ((word32) in[3] << 24);
+ n2 = in[4] | (in[5] << 8) | (in[6] << 16) | ((word32) in[7] << 24);
n2 ^= f(c, n1 + c->k[0]);
n1 ^= f(c, n2 + c->k[1]);
@@ -417,7 +417,8 @@ void gost_key(gost_ctx * c, const byte * k)
int i, j;
for (i = 0, j = 0; i < 8; i++, j += 4) {
c->k[i] =
- k[j] | (k[j + 1] << 8) | (k[j + 2] << 16) | (k[j + 3] << 24);
+ k[j] | (k[j + 1] << 8) | (k[j + 2] << 16) | ((word32) k[j + 3] <<
+ 24);
}
}
@@ -462,8 +463,10 @@ void mac_block(gost_ctx * c, byte * buffer, const byte * block)
for (i = 0; i < 8; i++) {
buffer[i] ^= block[i];
}
- n1 = buffer[0] | (buffer[1] << 8) | (buffer[2] << 16) | (buffer[3] << 24);
- n2 = buffer[4] | (buffer[5] << 8) | (buffer[6] << 16) | (buffer[7] << 24);
+ n1 = buffer[0] | (buffer[1] << 8) | (buffer[2] << 16) | ((word32)
+ buffer[3] << 24);
+ n2 = buffer[4] | (buffer[5] << 8) | (buffer[6] << 16) | ((word32)
+ buffer[7] << 24);
/* Instead of swapping halves, swap names each round */
n2 ^= f(c, n1 + c->k[0]);
diff --git a/crypto/openssl/engines/ccgost/gost_crypt.c b/crypto/openssl/engines/ccgost/gost_crypt.c
index aae941e..2bbdc6c 100644
--- a/crypto/openssl/engines/ccgost/gost_crypt.c
+++ b/crypto/openssl/engines/ccgost/gost_crypt.c
@@ -251,13 +251,13 @@ static void gost_cnt_next(void *ctx, unsigned char *iv, unsigned char *buf)
} else {
memcpy(buf1, iv, 8);
}
- g = buf1[0] | (buf1[1] << 8) | (buf1[2] << 16) | (buf1[3] << 24);
+ g = buf1[0] | (buf1[1] << 8) | (buf1[2] << 16) | ((word32) buf1[3] << 24);
g += 0x01010101;
buf1[0] = (unsigned char)(g & 0xff);
buf1[1] = (unsigned char)((g >> 8) & 0xff);
buf1[2] = (unsigned char)((g >> 16) & 0xff);
buf1[3] = (unsigned char)((g >> 24) & 0xff);
- g = buf1[4] | (buf1[5] << 8) | (buf1[6] << 16) | (buf1[7] << 24);
+ g = buf1[4] | (buf1[5] << 8) | (buf1[6] << 16) | ((word32) buf1[7] << 24);
go = g;
g += 0x01010104;
if (go > g) /* overflow */
diff --git a/crypto/openssl/engines/ccgost/gost_pmeth.c b/crypto/openssl/engines/ccgost/gost_pmeth.c
index b6275b2..4a79a85 100644
--- a/crypto/openssl/engines/ccgost/gost_pmeth.c
+++ b/crypto/openssl/engines/ccgost/gost_pmeth.c
@@ -87,6 +87,10 @@ static int pkey_gost_ctrl(EVP_PKEY_CTX *ctx, int type, int p1, void *p2)
}
break;
+ case EVP_PKEY_CTRL_GET_MD:
+ *(const EVP_MD **)p2 = pctx->md;
+ return 1;
+
case EVP_PKEY_CTRL_PKCS7_ENCRYPT:
case EVP_PKEY_CTRL_PKCS7_DECRYPT:
case EVP_PKEY_CTRL_PKCS7_SIGN:
@@ -447,6 +451,10 @@ static int pkey_gost_mac_ctrl(EVP_PKEY_CTX *ctx, int type, int p1, void *p2)
}
break;
+ case EVP_PKEY_CTRL_GET_MD:
+ *(const EVP_MD **)p2 = data->md;
+ return 1;
+
case EVP_PKEY_CTRL_PKCS7_ENCRYPT:
case EVP_PKEY_CTRL_PKCS7_DECRYPT:
case EVP_PKEY_CTRL_PKCS7_SIGN:
diff --git a/crypto/openssl/engines/e_capi.c b/crypto/openssl/engines/e_capi.c
index 43dd310..f4cd2ff 100644
--- a/crypto/openssl/engines/e_capi.c
+++ b/crypto/openssl/engines/e_capi.c
@@ -54,22 +54,27 @@
#include <stdio.h>
#include <string.h>
+#include <stdlib.h>
+
#include <openssl/crypto.h>
-#include <openssl/buffer.h>
-#include <openssl/bn.h>
#ifdef OPENSSL_SYS_WIN32
# ifndef OPENSSL_NO_CAPIENG
+# include <openssl/buffer.h>
+# include <openssl/bn.h>
# include <openssl/rsa.h>
-# include <windows.h>
-
# ifndef _WIN32_WINNT
# define _WIN32_WINNT 0x0400
# endif
+# include <windows.h>
# include <wincrypt.h>
+# include <malloc.h>
+# ifndef alloca
+# define alloca _alloca
+# endif
/*
* This module uses several "new" interfaces, among which is
@@ -832,7 +837,7 @@ int capi_rsa_sign(int dtype, const unsigned char *m, unsigned int m_len,
/* Finally sign it */
slen = RSA_size(rsa);
- if (!CryptSignHashA(hash, capi_key->keyspec, NULL, 0, sigret, &slen)) {
+ if (!CryptSignHash(hash, capi_key->keyspec, NULL, 0, sigret, &slen)) {
CAPIerr(CAPI_F_CAPI_RSA_SIGN, CAPI_R_ERROR_SIGNING_HASH);
capi_addlasterror();
goto err;
@@ -956,7 +961,7 @@ static DSA_SIG *capi_dsa_do_sign(const unsigned char *digest, int dlen,
/* Finally sign it */
slen = sizeof(csigbuf);
- if (!CryptSignHashA(hash, capi_key->keyspec, NULL, 0, csigbuf, &slen)) {
+ if (!CryptSignHash(hash, capi_key->keyspec, NULL, 0, csigbuf, &slen)) {
CAPIerr(CAPI_F_CAPI_DSA_DO_SIGN, CAPI_R_ERROR_SIGNING_HASH);
capi_addlasterror();
goto err;
@@ -1025,7 +1030,7 @@ static void capi_adderror(DWORD err)
ERR_add_error_data(2, "Error code= 0x", errstr);
}
-static char *wide_to_asc(LPWSTR wstr)
+static char *wide_to_asc(LPCWSTR wstr)
{
char *str;
int len_0, sz;
@@ -1054,10 +1059,10 @@ static char *wide_to_asc(LPWSTR wstr)
static int capi_get_provname(CAPI_CTX * ctx, LPSTR * pname, DWORD * ptype,
DWORD idx)
{
- LPSTR name;
DWORD len, err;
+ LPTSTR name;
CAPI_trace(ctx, "capi_get_provname, index=%d\n", idx);
- if (!CryptEnumProvidersA(idx, NULL, 0, ptype, NULL, &len)) {
+ if (!CryptEnumProviders(idx, NULL, 0, ptype, NULL, &len)) {
err = GetLastError();
if (err == ERROR_NO_MORE_ITEMS)
return 2;
@@ -1065,8 +1070,11 @@ static int capi_get_provname(CAPI_CTX * ctx, LPSTR * pname, DWORD * ptype,
capi_adderror(err);
return 0;
}
- name = OPENSSL_malloc(len);
- if (!CryptEnumProvidersA(idx, NULL, 0, ptype, name, &len)) {
+ if (sizeof(TCHAR) != sizeof(char))
+ name = alloca(len);
+ else
+ name = OPENSSL_malloc(len);
+ if (!CryptEnumProviders(idx, NULL, 0, ptype, name, &len)) {
err = GetLastError();
if (err == ERROR_NO_MORE_ITEMS)
return 2;
@@ -1074,8 +1082,11 @@ static int capi_get_provname(CAPI_CTX * ctx, LPSTR * pname, DWORD * ptype,
capi_adderror(err);
return 0;
}
- *pname = name;
- CAPI_trace(ctx, "capi_get_provname, returned name=%s, type=%d\n", name,
+ if (sizeof(TCHAR) != sizeof(char))
+ *pname = wide_to_asc((WCHAR *)name);
+ else
+ *pname = (char *)name;
+ CAPI_trace(ctx, "capi_get_provname, returned name=%s, type=%d\n", *pname,
*ptype);
return 1;
@@ -1106,10 +1117,26 @@ static int capi_list_containers(CAPI_CTX * ctx, BIO *out)
HCRYPTPROV hprov;
DWORD err, idx, flags, buflen = 0, clen;
LPSTR cname;
+ LPTSTR cspname = NULL;
+
CAPI_trace(ctx, "Listing containers CSP=%s, type = %d\n", ctx->cspname,
ctx->csptype);
- if (!CryptAcquireContextA
- (&hprov, NULL, ctx->cspname, ctx->csptype, CRYPT_VERIFYCONTEXT)) {
+ if (ctx->cspname && sizeof(TCHAR) != sizeof(char)) {
+ if ((clen =
+ MultiByteToWideChar(CP_ACP, 0, ctx->cspname, -1, NULL, 0))) {
+ cspname = alloca(clen * sizeof(WCHAR));
+ MultiByteToWideChar(CP_ACP, 0, ctx->cspname, -1, (WCHAR *)cspname,
+ clen);
+ }
+ if (!cspname) {
+ CAPIerr(CAPI_F_CAPI_LIST_CONTAINERS, ERR_R_MALLOC_FAILURE);
+ capi_addlasterror();
+ return 0;
+ }
+ } else
+ cspname = (TCHAR *)ctx->cspname;
+ if (!CryptAcquireContext
+ (&hprov, NULL, cspname, ctx->csptype, CRYPT_VERIFYCONTEXT)) {
CAPIerr(CAPI_F_CAPI_LIST_CONTAINERS,
CAPI_R_CRYPTACQUIRECONTEXT_ERROR);
capi_addlasterror();
@@ -1139,7 +1166,8 @@ static int capi_list_containers(CAPI_CTX * ctx, BIO *out)
flags = CRYPT_FIRST;
else
flags = 0;
- if (!CryptGetProvParam(hprov, PP_ENUMCONTAINERS, cname, &clen, flags)) {
+ if (!CryptGetProvParam
+ (hprov, PP_ENUMCONTAINERS, (BYTE *) cname, &clen, flags)) {
err = GetLastError();
if (err == ERROR_NO_MORE_ITEMS)
goto done;
@@ -1326,7 +1354,6 @@ int capi_list_certs(CAPI_CTX * ctx, BIO *out, char *id)
CertFreeCertificateContext(cert);
} else {
for (idx = 0;; idx++) {
- LPWSTR fname = NULL;
cert = CertEnumCertificatesInStore(hstore, cert);
if (!cert)
break;
@@ -1371,18 +1398,30 @@ static PCCERT_CONTEXT capi_find_cert(CAPI_CTX * ctx, const char *id,
}
}
-static CAPI_KEY *capi_get_key(CAPI_CTX * ctx, const char *contname,
- char *provname, DWORD ptype, DWORD keyspec)
+static CAPI_KEY *capi_get_key(CAPI_CTX * ctx, const TCHAR *contname,
+ TCHAR *provname, DWORD ptype, DWORD keyspec)
{
CAPI_KEY *key;
DWORD dwFlags = 0;
key = OPENSSL_malloc(sizeof(CAPI_KEY));
- CAPI_trace(ctx, "capi_get_key, contname=%s, provname=%s, type=%d\n",
- contname, provname, ptype);
+ if (sizeof(TCHAR) == sizeof(char))
+ CAPI_trace(ctx, "capi_get_key, contname=%s, provname=%s, type=%d\n",
+ contname, provname, ptype);
+ else if (ctx && ctx->debug_level >= CAPI_DBG_TRACE && ctx->debug_file) {
+ /* above 'if' is optimization to minimize malloc-ations */
+ char *_contname = wide_to_asc((WCHAR *)contname);
+ char *_provname = wide_to_asc((WCHAR *)provname);
+
+ CAPI_trace(ctx, "capi_get_key, contname=%s, provname=%s, type=%d\n",
+ _contname, _provname, ptype);
+ if (_provname)
+ OPENSSL_free(_provname);
+ if (_contname)
+ OPENSSL_free(_contname);
+ }
if (ctx->store_flags & CERT_SYSTEM_STORE_LOCAL_MACHINE)
dwFlags = CRYPT_MACHINE_KEYSET;
- if (!CryptAcquireContextA
- (&key->hprov, contname, provname, ptype, dwFlags)) {
+ if (!CryptAcquireContext(&key->hprov, contname, provname, ptype, dwFlags)) {
CAPIerr(CAPI_F_CAPI_GET_KEY, CAPI_R_CRYPTACQUIRECONTEXT_ERROR);
capi_addlasterror();
goto err;
@@ -1410,12 +1449,18 @@ static CAPI_KEY *capi_get_cert_key(CAPI_CTX * ctx, PCCERT_CONTEXT cert)
pinfo = capi_get_prov_info(ctx, cert);
if (!pinfo)
goto err;
- provname = wide_to_asc(pinfo->pwszProvName);
- contname = wide_to_asc(pinfo->pwszContainerName);
- if (!provname || !contname)
- goto err;
- key = capi_get_key(ctx, contname, provname,
- pinfo->dwProvType, pinfo->dwKeySpec);
+ if (sizeof(TCHAR) != sizeof(char))
+ key = capi_get_key(ctx, (TCHAR *)pinfo->pwszContainerName,
+ (TCHAR *)pinfo->pwszProvName,
+ pinfo->dwProvType, pinfo->dwKeySpec);
+ else {
+ provname = wide_to_asc(pinfo->pwszProvName);
+ contname = wide_to_asc(pinfo->pwszContainerName);
+ if (!provname || !contname)
+ goto err;
+ key = capi_get_key(ctx, (TCHAR *)contname, (TCHAR *)provname,
+ pinfo->dwProvType, pinfo->dwKeySpec);
+ }
err:
if (pinfo)
@@ -1447,7 +1492,29 @@ CAPI_KEY *capi_find_key(CAPI_CTX * ctx, const char *id)
break;
case CAPI_LU_CONTNAME:
- key = capi_get_key(ctx, id, ctx->cspname, ctx->csptype, ctx->keytype);
+ if (sizeof(TCHAR) != sizeof(char)) {
+ WCHAR *contname, *provname;
+ DWORD len;
+
+ if ((len = MultiByteToWideChar(CP_ACP, 0, id, -1, NULL, 0)) &&
+ (contname = alloca(len * sizeof(WCHAR)),
+ MultiByteToWideChar(CP_ACP, 0, id, -1, contname, len)) &&
+ (len =
+ MultiByteToWideChar(CP_ACP, 0, ctx->cspname, -1, NULL, 0))
+ && (provname =
+ alloca(len * sizeof(WCHAR)), MultiByteToWideChar(CP_ACP,
+ 0,
+ ctx->cspname,
+ -1,
+ provname,
+ len)))
+ key =
+ capi_get_key(ctx, (TCHAR *)contname, (TCHAR *)provname,
+ ctx->csptype, ctx->keytype);
+ } else
+ key = capi_get_key(ctx, (TCHAR *)id,
+ (TCHAR *)ctx->cspname,
+ ctx->csptype, ctx->keytype);
break;
}
@@ -1512,8 +1579,19 @@ static int capi_ctx_set_provname(CAPI_CTX * ctx, LPSTR pname, DWORD type,
CAPI_trace(ctx, "capi_ctx_set_provname, name=%s, type=%d\n", pname, type);
if (check) {
HCRYPTPROV hprov;
- if (!CryptAcquireContextA(&hprov, NULL, pname, type,
- CRYPT_VERIFYCONTEXT)) {
+ LPTSTR name = NULL;
+
+ if (sizeof(TCHAR) != sizeof(char)) {
+ DWORD len;
+ if ((len = MultiByteToWideChar(CP_ACP, 0, pname, -1, NULL, 0))) {
+ name = alloca(len * sizeof(WCHAR));
+ MultiByteToWideChar(CP_ACP, 0, pname, -1, (WCHAR *)name, len);
+ }
+ } else
+ name = (TCHAR *)pname;
+
+ if (!name || !CryptAcquireContext(&hprov, NULL, name, type,
+ CRYPT_VERIFYCONTEXT)) {
CAPIerr(CAPI_F_CAPI_CTX_SET_PROVNAME,
CAPI_R_CRYPTACQUIRECONTEXT_ERROR);
capi_addlasterror();
diff --git a/crypto/openssl/engines/vendor_defns/hwcryptohook.h b/crypto/openssl/engines/vendor_defns/hwcryptohook.h
index 9fc7b89..fa06396 100644
--- a/crypto/openssl/engines/vendor_defns/hwcryptohook.h
+++ b/crypto/openssl/engines/vendor_defns/hwcryptohook.h
@@ -214,12 +214,12 @@ typedef struct {
int (*mutex_acquire) (HWCryptoHook_Mutex *);
void (*mutex_release) (HWCryptoHook_Mutex *);
void (*mutex_destroy) (HWCryptoHook_Mutex *);
- /*-
- * For greater efficiency, can use condition vars internally for
- * synchronisation. In this case maxsimultaneous is ignored, but
- * the other mutex stuff must be available. In singlethreaded
- * programs, set everything to 0.
- */
+ /*-
+ * For greater efficiency, can use condition vars internally for
+ * synchronisation. In this case maxsimultaneous is ignored, but
+ * the other mutex stuff must be available. In singlethreaded
+ * programs, set everything to 0.
+ */
size_t condvarsize;
int (*condvar_init) (HWCryptoHook_CondVar *,
HWCryptoHook_CallerContext * cactx);
@@ -227,103 +227,103 @@ typedef struct {
void (*condvar_signal) (HWCryptoHook_CondVar *);
void (*condvar_broadcast) (HWCryptoHook_CondVar *);
void (*condvar_destroy) (HWCryptoHook_CondVar *);
- /*-
- * The semantics of acquiring and releasing mutexes and broadcasting
- * and waiting on condition variables are expected to be those from
- * POSIX threads (pthreads). The mutexes may be (in pthread-speak)
- * fast mutexes, recursive mutexes, or nonrecursive ones.
- *
- * The _release/_signal/_broadcast and _destroy functions must
- * always succeed when given a valid argument; if they are given an
- * invalid argument then the program (crypto plugin + application)
- * has an internal error, and they should abort the program.
- */
+ /*-
+ * The semantics of acquiring and releasing mutexes and broadcasting
+ * and waiting on condition variables are expected to be those from
+ * POSIX threads (pthreads). The mutexes may be (in pthread-speak)
+ * fast mutexes, recursive mutexes, or nonrecursive ones.
+ *
+ * The _release/_signal/_broadcast and _destroy functions must
+ * always succeed when given a valid argument; if they are given an
+ * invalid argument then the program (crypto plugin + application)
+ * has an internal error, and they should abort the program.
+ */
int (*getpassphrase) (const char *prompt_info,
int *len_io, char *buf,
HWCryptoHook_PassphraseContext * ppctx,
HWCryptoHook_CallerContext * cactx);
- /*-
- * Passphrases and the prompt_info, if they contain high-bit-set
- * characters, are UTF-8. The prompt_info may be a null pointer if
- * no prompt information is available (it should not be an empty
- * string). It will not contain text like `enter passphrase';
- * instead it might say something like `Operator Card for John
- * Smith' or `SmartCard in nFast Module #1, Slot #1'.
- *
- * buf points to a buffer in which to return the passphrase; on
- * entry *len_io is the length of the buffer. It should be updated
- * by the callback. The returned passphrase should not be
- * null-terminated by the callback.
- */
+ /*-
+ * Passphrases and the prompt_info, if they contain high-bit-set
+ * characters, are UTF-8. The prompt_info may be a null pointer if
+ * no prompt information is available (it should not be an empty
+ * string). It will not contain text like `enter passphrase';
+ * instead it might say something like `Operator Card for John
+ * Smith' or `SmartCard in nFast Module #1, Slot #1'.
+ *
+ * buf points to a buffer in which to return the passphrase; on
+ * entry *len_io is the length of the buffer. It should be updated
+ * by the callback. The returned passphrase should not be
+ * null-terminated by the callback.
+ */
int (*getphystoken) (const char *prompt_info,
const char *wrong_info,
HWCryptoHook_PassphraseContext * ppctx,
HWCryptoHook_CallerContext * cactx);
- /*-
- * Requests that the human user physically insert a different
- * smartcard, DataKey, etc. The plugin should check whether the
- * currently inserted token(s) are appropriate, and if they are it
- * should not make this call.
- *
- * prompt_info is as before. wrong_info is a description of the
- * currently inserted token(s) so that the user is told what
- * something is. wrong_info, like prompt_info, may be null, but
- * should not be an empty string. Its contents should be
- * syntactically similar to that of prompt_info.
- */
- /*-
- * Note that a single LoadKey operation might cause several calls to
- * getpassphrase and/or requestphystoken. If requestphystoken is
- * not provided (ie, a null pointer is passed) then the plugin may
- * not support loading keys for which authorisation by several cards
- * is required. If getpassphrase is not provided then cards with
- * passphrases may not be supported.
- *
- * getpassphrase and getphystoken do not need to check that the
- * passphrase has been entered correctly or the correct token
- * inserted; the crypto plugin will do that. If this is not the
- * case then the crypto plugin is responsible for calling these
- * routines again as appropriate until the correct token(s) and
- * passphrase(s) are supplied as required, or until any retry limits
- * implemented by the crypto plugin are reached.
- *
- * In either case, the application must allow the user to say `no'
- * or `cancel' to indicate that they do not know the passphrase or
- * have the appropriate token; this should cause the callback to
- * return nonzero indicating error.
- */
+ /*-
+ * Requests that the human user physically insert a different
+ * smartcard, DataKey, etc. The plugin should check whether the
+ * currently inserted token(s) are appropriate, and if they are it
+ * should not make this call.
+ *
+ * prompt_info is as before. wrong_info is a description of the
+ * currently inserted token(s) so that the user is told what
+ * something is. wrong_info, like prompt_info, may be null, but
+ * should not be an empty string. Its contents should be
+ * syntactically similar to that of prompt_info.
+ */
+ /*-
+ * Note that a single LoadKey operation might cause several calls to
+ * getpassphrase and/or requestphystoken. If requestphystoken is
+ * not provided (ie, a null pointer is passed) then the plugin may
+ * not support loading keys for which authorisation by several cards
+ * is required. If getpassphrase is not provided then cards with
+ * passphrases may not be supported.
+ *
+ * getpassphrase and getphystoken do not need to check that the
+ * passphrase has been entered correctly or the correct token
+ * inserted; the crypto plugin will do that. If this is not the
+ * case then the crypto plugin is responsible for calling these
+ * routines again as appropriate until the correct token(s) and
+ * passphrase(s) are supplied as required, or until any retry limits
+ * implemented by the crypto plugin are reached.
+ *
+ * In either case, the application must allow the user to say `no'
+ * or `cancel' to indicate that they do not know the passphrase or
+ * have the appropriate token; this should cause the callback to
+ * return nonzero indicating error.
+ */
void (*logmessage) (void *logstream, const char *message);
- /*-
- * A log message will be generated at least every time something goes
- * wrong and an ErrMsgBuf is filled in (or would be if one was
- * provided). Other diagnostic information may be written there too,
- * including more detailed reasons for errors which are reported in an
- * ErrMsgBuf.
- *
- * When a log message is generated, this callback is called. It
- * should write a message to the relevant logging arrangements.
- *
- * The message string passed will be null-terminated and may be of arbitrary
- * length. It will not be prefixed by the time and date, nor by the
- * name of the library that is generating it - if this is required,
- * the logmessage callback must do it. The message will not have a
- * trailing newline (though it may contain internal newlines).
- *
- * If a null pointer is passed for logmessage a default function is
- * used. The default function treats logstream as a FILE* which has
- * been converted to a void*. If logstream is 0 it does nothing.
- * Otherwise it prepends the date and time and library name and
- * writes the message to logstream. Each line will be prefixed by a
- * descriptive string containing the date, time and identity of the
- * crypto plugin. Errors on the logstream are not reported
- * anywhere, and the default function doesn't flush the stream, so
- * the application must set the buffering how it wants it.
- *
- * The crypto plugin may also provide a facility to have copies of
- * log messages sent elsewhere, and or for adjusting the verbosity
- * of the log messages; any such facilities will be configured by
- * external means.
- */
+ /*-
+ * A log message will be generated at least every time something goes
+ * wrong and an ErrMsgBuf is filled in (or would be if one was
+ * provided). Other diagnostic information may be written there too,
+ * including more detailed reasons for errors which are reported in an
+ * ErrMsgBuf.
+ *
+ * When a log message is generated, this callback is called. It
+ * should write a message to the relevant logging arrangements.
+ *
+ * The message string passed will be null-terminated and may be of arbitrary
+ * length. It will not be prefixed by the time and date, nor by the
+ * name of the library that is generating it - if this is required,
+ * the logmessage callback must do it. The message will not have a
+ * trailing newline (though it may contain internal newlines).
+ *
+ * If a null pointer is passed for logmessage a default function is
+ * used. The default function treats logstream as a FILE* which has
+ * been converted to a void*. If logstream is 0 it does nothing.
+ * Otherwise it prepends the date and time and library name and
+ * writes the message to logstream. Each line will be prefixed by a
+ * descriptive string containing the date, time and identity of the
+ * crypto plugin. Errors on the logstream are not reported
+ * anywhere, and the default function doesn't flush the stream, so
+ * the application must set the buffering how it wants it.
+ *
+ * The crypto plugin may also provide a facility to have copies of
+ * log messages sent elsewhere, and or for adjusting the verbosity
+ * of the log messages; any such facilities will be configured by
+ * external means.
+ */
} HWCryptoHook_InitInfo;
typedef
diff --git a/crypto/openssl/ssl/Makefile b/crypto/openssl/ssl/Makefile
index 29d9e45..42f1af5 100644
--- a/crypto/openssl/ssl/Makefile
+++ b/crypto/openssl/ssl/Makefile
@@ -24,24 +24,24 @@ LIBSRC= \
s2_meth.c s2_srvr.c s2_clnt.c s2_lib.c s2_enc.c s2_pkt.c \
s3_meth.c s3_srvr.c s3_clnt.c s3_lib.c s3_enc.c s3_pkt.c s3_both.c s3_cbc.c \
s23_meth.c s23_srvr.c s23_clnt.c s23_lib.c s23_pkt.c \
- t1_meth.c t1_srvr.c t1_clnt.c t1_lib.c t1_enc.c \
+ t1_meth.c t1_srvr.c t1_clnt.c t1_lib.c t1_enc.c t1_ext.c \
d1_meth.c d1_srvr.c d1_clnt.c d1_lib.c d1_pkt.c \
- d1_both.c d1_enc.c d1_srtp.c \
+ d1_both.c d1_srtp.c \
ssl_lib.c ssl_err2.c ssl_cert.c ssl_sess.c \
ssl_ciph.c ssl_stat.c ssl_rsa.c \
- ssl_asn1.c ssl_txt.c ssl_algs.c \
- bio_ssl.c ssl_err.c kssl.c tls_srp.c t1_reneg.c ssl_utst.c
+ ssl_asn1.c ssl_txt.c ssl_algs.c ssl_conf.c \
+ bio_ssl.c ssl_err.c kssl.c t1_reneg.c tls_srp.c t1_trce.c ssl_utst.c
LIBOBJ= \
s2_meth.o s2_srvr.o s2_clnt.o s2_lib.o s2_enc.o s2_pkt.o \
s3_meth.o s3_srvr.o s3_clnt.o s3_lib.o s3_enc.o s3_pkt.o s3_both.o s3_cbc.o \
s23_meth.o s23_srvr.o s23_clnt.o s23_lib.o s23_pkt.o \
- t1_meth.o t1_srvr.o t1_clnt.o t1_lib.o t1_enc.o \
+ t1_meth.o t1_srvr.o t1_clnt.o t1_lib.o t1_enc.o t1_ext.o \
d1_meth.o d1_srvr.o d1_clnt.o d1_lib.o d1_pkt.o \
- d1_both.o d1_enc.o d1_srtp.o\
+ d1_both.o d1_srtp.o\
ssl_lib.o ssl_err2.o ssl_cert.o ssl_sess.o \
ssl_ciph.o ssl_stat.o ssl_rsa.o \
- ssl_asn1.o ssl_txt.o ssl_algs.o \
- bio_ssl.o ssl_err.o kssl.o tls_srp.o t1_reneg.o ssl_utst.o
+ ssl_asn1.o ssl_txt.o ssl_algs.o ssl_conf.o \
+ bio_ssl.o ssl_err.o kssl.o t1_reneg.o tls_srp.o t1_trce.o ssl_utst.o
SRC= $(LIBSRC)
@@ -166,27 +166,6 @@ d1_clnt.o: ../include/openssl/ssl3.h ../include/openssl/stack.h
d1_clnt.o: ../include/openssl/symhacks.h ../include/openssl/tls1.h
d1_clnt.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h d1_clnt.c
d1_clnt.o: kssl_lcl.h ssl_locl.h
-d1_enc.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h
-d1_enc.o: ../include/openssl/buffer.h ../include/openssl/comp.h
-d1_enc.o: ../include/openssl/crypto.h ../include/openssl/dsa.h
-d1_enc.o: ../include/openssl/dtls1.h ../include/openssl/e_os2.h
-d1_enc.o: ../include/openssl/ec.h ../include/openssl/ecdh.h
-d1_enc.o: ../include/openssl/ecdsa.h ../include/openssl/err.h
-d1_enc.o: ../include/openssl/evp.h ../include/openssl/hmac.h
-d1_enc.o: ../include/openssl/kssl.h ../include/openssl/lhash.h
-d1_enc.o: ../include/openssl/md5.h ../include/openssl/obj_mac.h
-d1_enc.o: ../include/openssl/objects.h ../include/openssl/opensslconf.h
-d1_enc.o: ../include/openssl/opensslv.h ../include/openssl/ossl_typ.h
-d1_enc.o: ../include/openssl/pem.h ../include/openssl/pem2.h
-d1_enc.o: ../include/openssl/pkcs7.h ../include/openssl/pqueue.h
-d1_enc.o: ../include/openssl/rand.h ../include/openssl/rsa.h
-d1_enc.o: ../include/openssl/safestack.h ../include/openssl/sha.h
-d1_enc.o: ../include/openssl/srtp.h ../include/openssl/ssl.h
-d1_enc.o: ../include/openssl/ssl2.h ../include/openssl/ssl23.h
-d1_enc.o: ../include/openssl/ssl3.h ../include/openssl/stack.h
-d1_enc.o: ../include/openssl/symhacks.h ../include/openssl/tls1.h
-d1_enc.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h d1_enc.c
-d1_enc.o: ssl_locl.h
d1_lib.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h
d1_lib.o: ../include/openssl/buffer.h ../include/openssl/comp.h
d1_lib.o: ../include/openssl/crypto.h ../include/openssl/dsa.h
@@ -612,8 +591,7 @@ s3_enc.o: ../include/openssl/ssl23.h ../include/openssl/ssl3.h
s3_enc.o: ../include/openssl/stack.h ../include/openssl/symhacks.h
s3_enc.o: ../include/openssl/tls1.h ../include/openssl/x509.h
s3_enc.o: ../include/openssl/x509_vfy.h s3_enc.c ssl_locl.h
-s3_lib.o: ../crypto/ec/ec_lcl.h ../e_os.h ../include/openssl/asn1.h
-s3_lib.o: ../include/openssl/bio.h ../include/openssl/bn.h
+s3_lib.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h
s3_lib.o: ../include/openssl/buffer.h ../include/openssl/comp.h
s3_lib.o: ../include/openssl/crypto.h ../include/openssl/dh.h
s3_lib.o: ../include/openssl/dsa.h ../include/openssl/dtls1.h
@@ -779,6 +757,27 @@ ssl_ciph.o: ../include/openssl/ssl23.h ../include/openssl/ssl3.h
ssl_ciph.o: ../include/openssl/stack.h ../include/openssl/symhacks.h
ssl_ciph.o: ../include/openssl/tls1.h ../include/openssl/x509.h
ssl_ciph.o: ../include/openssl/x509_vfy.h ssl_ciph.c ssl_locl.h
+ssl_conf.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h
+ssl_conf.o: ../include/openssl/buffer.h ../include/openssl/comp.h
+ssl_conf.o: ../include/openssl/conf.h ../include/openssl/crypto.h
+ssl_conf.o: ../include/openssl/dh.h ../include/openssl/dsa.h
+ssl_conf.o: ../include/openssl/dtls1.h ../include/openssl/e_os2.h
+ssl_conf.o: ../include/openssl/ec.h ../include/openssl/ecdh.h
+ssl_conf.o: ../include/openssl/ecdsa.h ../include/openssl/err.h
+ssl_conf.o: ../include/openssl/evp.h ../include/openssl/hmac.h
+ssl_conf.o: ../include/openssl/kssl.h ../include/openssl/lhash.h
+ssl_conf.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h
+ssl_conf.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h
+ssl_conf.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h
+ssl_conf.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h
+ssl_conf.o: ../include/openssl/pqueue.h ../include/openssl/rsa.h
+ssl_conf.o: ../include/openssl/safestack.h ../include/openssl/sha.h
+ssl_conf.o: ../include/openssl/srtp.h ../include/openssl/ssl.h
+ssl_conf.o: ../include/openssl/ssl2.h ../include/openssl/ssl23.h
+ssl_conf.o: ../include/openssl/ssl3.h ../include/openssl/stack.h
+ssl_conf.o: ../include/openssl/symhacks.h ../include/openssl/tls1.h
+ssl_conf.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h ssl_conf.c
+ssl_conf.o: ssl_locl.h
ssl_err.o: ../include/openssl/asn1.h ../include/openssl/bio.h
ssl_err.o: ../include/openssl/buffer.h ../include/openssl/comp.h
ssl_err.o: ../include/openssl/crypto.h ../include/openssl/dtls1.h
@@ -980,6 +979,26 @@ t1_enc.o: ../include/openssl/ssl3.h ../include/openssl/stack.h
t1_enc.o: ../include/openssl/symhacks.h ../include/openssl/tls1.h
t1_enc.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h ssl_locl.h
t1_enc.o: t1_enc.c
+t1_ext.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h
+t1_ext.o: ../include/openssl/buffer.h ../include/openssl/comp.h
+t1_ext.o: ../include/openssl/crypto.h ../include/openssl/dsa.h
+t1_ext.o: ../include/openssl/dtls1.h ../include/openssl/e_os2.h
+t1_ext.o: ../include/openssl/ec.h ../include/openssl/ecdh.h
+t1_ext.o: ../include/openssl/ecdsa.h ../include/openssl/err.h
+t1_ext.o: ../include/openssl/evp.h ../include/openssl/hmac.h
+t1_ext.o: ../include/openssl/kssl.h ../include/openssl/lhash.h
+t1_ext.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h
+t1_ext.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h
+t1_ext.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h
+t1_ext.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h
+t1_ext.o: ../include/openssl/pqueue.h ../include/openssl/rsa.h
+t1_ext.o: ../include/openssl/safestack.h ../include/openssl/sha.h
+t1_ext.o: ../include/openssl/srtp.h ../include/openssl/ssl.h
+t1_ext.o: ../include/openssl/ssl2.h ../include/openssl/ssl23.h
+t1_ext.o: ../include/openssl/ssl3.h ../include/openssl/stack.h
+t1_ext.o: ../include/openssl/symhacks.h ../include/openssl/tls1.h
+t1_ext.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h ssl_locl.h
+t1_ext.o: t1_ext.c
t1_lib.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h
t1_lib.o: ../include/openssl/buffer.h ../include/openssl/comp.h
t1_lib.o: ../include/openssl/conf.h ../include/openssl/crypto.h
@@ -1062,6 +1081,26 @@ t1_srvr.o: ../include/openssl/ssl23.h ../include/openssl/ssl3.h
t1_srvr.o: ../include/openssl/stack.h ../include/openssl/symhacks.h
t1_srvr.o: ../include/openssl/tls1.h ../include/openssl/x509.h
t1_srvr.o: ../include/openssl/x509_vfy.h ssl_locl.h t1_srvr.c
+t1_trce.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h
+t1_trce.o: ../include/openssl/buffer.h ../include/openssl/comp.h
+t1_trce.o: ../include/openssl/crypto.h ../include/openssl/dsa.h
+t1_trce.o: ../include/openssl/dtls1.h ../include/openssl/e_os2.h
+t1_trce.o: ../include/openssl/ec.h ../include/openssl/ecdh.h
+t1_trce.o: ../include/openssl/ecdsa.h ../include/openssl/err.h
+t1_trce.o: ../include/openssl/evp.h ../include/openssl/hmac.h
+t1_trce.o: ../include/openssl/kssl.h ../include/openssl/lhash.h
+t1_trce.o: ../include/openssl/obj_mac.h ../include/openssl/objects.h
+t1_trce.o: ../include/openssl/opensslconf.h ../include/openssl/opensslv.h
+t1_trce.o: ../include/openssl/ossl_typ.h ../include/openssl/pem.h
+t1_trce.o: ../include/openssl/pem2.h ../include/openssl/pkcs7.h
+t1_trce.o: ../include/openssl/pqueue.h ../include/openssl/rsa.h
+t1_trce.o: ../include/openssl/safestack.h ../include/openssl/sha.h
+t1_trce.o: ../include/openssl/srtp.h ../include/openssl/ssl.h
+t1_trce.o: ../include/openssl/ssl2.h ../include/openssl/ssl23.h
+t1_trce.o: ../include/openssl/ssl3.h ../include/openssl/stack.h
+t1_trce.o: ../include/openssl/symhacks.h ../include/openssl/tls1.h
+t1_trce.o: ../include/openssl/x509.h ../include/openssl/x509_vfy.h ssl_locl.h
+t1_trce.o: t1_trce.c
tls_srp.o: ../e_os.h ../include/openssl/asn1.h ../include/openssl/bio.h
tls_srp.o: ../include/openssl/bn.h ../include/openssl/buffer.h
tls_srp.o: ../include/openssl/comp.h ../include/openssl/crypto.h
diff --git a/crypto/openssl/ssl/d1_both.c b/crypto/openssl/ssl/d1_both.c
index 8dd8ea3..b4ee7ab 100644
--- a/crypto/openssl/ssl/d1_both.c
+++ b/crypto/openssl/ssl/d1_both.c
@@ -279,13 +279,17 @@ int dtls1_do_write(SSL *s, int type)
(int)s->d1->w_msg_hdr.msg_len +
DTLS1_HM_HEADER_LENGTH);
- if (s->write_hash)
- mac_size = EVP_MD_CTX_size(s->write_hash);
- else
+ if (s->write_hash) {
+ if (s->enc_write_ctx
+ && EVP_CIPHER_CTX_mode(s->enc_write_ctx) == EVP_CIPH_GCM_MODE)
+ mac_size = 0;
+ else
+ mac_size = EVP_MD_CTX_size(s->write_hash);
+ } else
mac_size = 0;
if (s->enc_write_ctx &&
- (EVP_CIPHER_mode(s->enc_write_ctx->cipher) & EVP_CIPH_CBC_MODE))
+ (EVP_CIPHER_CTX_mode(s->enc_write_ctx) == EVP_CIPH_CBC_MODE))
blocksize = 2 * EVP_CIPHER_block_size(s->enc_write_ctx->cipher);
else
blocksize = 0;
@@ -978,59 +982,6 @@ dtls1_get_message_fragment(SSL *s, int st1, int stn, long max, int *ok)
return (-1);
}
-int dtls1_send_finished(SSL *s, int a, int b, const char *sender, int slen)
-{
- unsigned char *p, *d;
- int i;
- unsigned long l;
-
- if (s->state == a) {
- d = (unsigned char *)s->init_buf->data;
- p = &(d[DTLS1_HM_HEADER_LENGTH]);
-
- i = s->method->ssl3_enc->final_finish_mac(s,
- sender, slen,
- s->s3->tmp.finish_md);
- s->s3->tmp.finish_md_len = i;
- memcpy(p, s->s3->tmp.finish_md, i);
- p += i;
- l = i;
-
- /*
- * Copy the finished so we can use it for renegotiation checks
- */
- if (s->type == SSL_ST_CONNECT) {
- OPENSSL_assert(i <= EVP_MAX_MD_SIZE);
- memcpy(s->s3->previous_client_finished, s->s3->tmp.finish_md, i);
- s->s3->previous_client_finished_len = i;
- } else {
- OPENSSL_assert(i <= EVP_MAX_MD_SIZE);
- memcpy(s->s3->previous_server_finished, s->s3->tmp.finish_md, i);
- s->s3->previous_server_finished_len = i;
- }
-
-#ifdef OPENSSL_SYS_WIN16
- /*
- * MSVC 1.5 does not clear the top bytes of the word unless I do
- * this.
- */
- l &= 0xffff;
-#endif
-
- d = dtls1_set_message_header(s, d, SSL3_MT_FINISHED, l, 0, l);
- s->init_num = (int)l + DTLS1_HM_HEADER_LENGTH;
- s->init_off = 0;
-
- /* buffer the message to handle re-xmits */
- dtls1_buffer_message(s, 0);
-
- s->state = b;
- }
-
- /* SSL3_ST_SEND_xxxxxx_HELLO_B */
- return (dtls1_do_write(s, SSL3_RT_HANDSHAKE));
-}
-
/*-
* for these 2 messages, we need to
* ssl->enc_read_ctx re-init
@@ -1071,77 +1022,6 @@ int dtls1_send_change_cipher_spec(SSL *s, int a, int b)
return (dtls1_do_write(s, SSL3_RT_CHANGE_CIPHER_SPEC));
}
-static int dtls1_add_cert_to_buf(BUF_MEM *buf, unsigned long *l, X509 *x)
-{
- int n;
- unsigned char *p;
-
- n = i2d_X509(x, NULL);
- if (!BUF_MEM_grow_clean(buf, (int)(n + (*l) + 3))) {
- SSLerr(SSL_F_DTLS1_ADD_CERT_TO_BUF, ERR_R_BUF_LIB);
- return 0;
- }
- p = (unsigned char *)&(buf->data[*l]);
- l2n3(n, p);
- i2d_X509(x, &p);
- *l += n + 3;
-
- return 1;
-}
-
-unsigned long dtls1_output_cert_chain(SSL *s, X509 *x)
-{
- unsigned char *p;
- int i;
- unsigned long l = 3 + DTLS1_HM_HEADER_LENGTH;
- BUF_MEM *buf;
-
- /* TLSv1 sends a chain with nothing in it, instead of an alert */
- buf = s->init_buf;
- if (!BUF_MEM_grow_clean(buf, 10)) {
- SSLerr(SSL_F_DTLS1_OUTPUT_CERT_CHAIN, ERR_R_BUF_LIB);
- return (0);
- }
- if (x != NULL) {
- X509_STORE_CTX xs_ctx;
-
- if (!X509_STORE_CTX_init(&xs_ctx, s->ctx->cert_store, x, NULL)) {
- SSLerr(SSL_F_DTLS1_OUTPUT_CERT_CHAIN, ERR_R_X509_LIB);
- return (0);
- }
-
- X509_verify_cert(&xs_ctx);
- /* Don't leave errors in the queue */
- ERR_clear_error();
- for (i = 0; i < sk_X509_num(xs_ctx.chain); i++) {
- x = sk_X509_value(xs_ctx.chain, i);
-
- if (!dtls1_add_cert_to_buf(buf, &l, x)) {
- X509_STORE_CTX_cleanup(&xs_ctx);
- return 0;
- }
- }
- X509_STORE_CTX_cleanup(&xs_ctx);
- }
- /* Thawte special :-) */
- for (i = 0; i < sk_X509_num(s->ctx->extra_certs); i++) {
- x = sk_X509_value(s->ctx->extra_certs, i);
- if (!dtls1_add_cert_to_buf(buf, &l, x))
- return 0;
- }
-
- l -= (3 + DTLS1_HM_HEADER_LENGTH);
-
- p = (unsigned char *)&(buf->data[DTLS1_HM_HEADER_LENGTH]);
- l2n3(l, p);
- l += 3;
- p = (unsigned char *)&(buf->data[0]);
- p = dtls1_set_message_header(s, p, SSL3_MT_CERTIFICATE, l, 0, l);
-
- l += DTLS1_HM_HEADER_LENGTH;
- return (l);
-}
-
int dtls1_read_failed(SSL *s, int code)
{
if (code > 0) {
@@ -1244,10 +1124,10 @@ int dtls1_buffer_message(SSL *s, int is_ccs)
memcpy(frag->fragment, s->init_buf->data, s->init_num);
if (is_ccs) {
+ /* For DTLS1_BAD_VER the header length is non-standard */
OPENSSL_assert(s->d1->w_msg_hdr.msg_len +
- ((s->version ==
- DTLS1_VERSION) ? DTLS1_CCS_HEADER_LENGTH : 3) ==
- (unsigned int)s->init_num);
+ ((s->version==DTLS1_BAD_VER)?3:DTLS1_CCS_HEADER_LENGTH)
+ == (unsigned int)s->init_num);
} else {
OPENSSL_assert(s->d1->w_msg_hdr.msg_len +
DTLS1_HM_HEADER_LENGTH == (unsigned int)s->init_num);
diff --git a/crypto/openssl/ssl/d1_clnt.c b/crypto/openssl/ssl/d1_clnt.c
index 377c1e6..4c2ccbf 100644
--- a/crypto/openssl/ssl/d1_clnt.c
+++ b/crypto/openssl/ssl/d1_clnt.c
@@ -135,13 +135,29 @@ static const SSL_METHOD *dtls1_get_client_method(int ver)
{
if (ver == DTLS1_VERSION || ver == DTLS1_BAD_VER)
return (DTLSv1_client_method());
+ else if (ver == DTLS1_2_VERSION)
+ return (DTLSv1_2_client_method());
else
return (NULL);
}
-IMPLEMENT_dtls1_meth_func(DTLSv1_client_method,
+IMPLEMENT_dtls1_meth_func(DTLS1_VERSION,
+ DTLSv1_client_method,
ssl_undefined_function,
- dtls1_connect, dtls1_get_client_method)
+ dtls1_connect,
+ dtls1_get_client_method, DTLSv1_enc_data)
+
+ IMPLEMENT_dtls1_meth_func(DTLS1_2_VERSION,
+ DTLSv1_2_client_method,
+ ssl_undefined_function,
+ dtls1_connect,
+ dtls1_get_client_method, DTLSv1_2_enc_data)
+
+ IMPLEMENT_dtls1_meth_func(DTLS_ANY_VERSION,
+ DTLS_client_method,
+ ssl_undefined_function,
+ dtls1_connect,
+ dtls1_get_client_method, DTLSv1_2_enc_data)
int dtls1_connect(SSL *s)
{
@@ -307,7 +323,7 @@ int dtls1_connect(SSL *s)
ssl3_init_finished_mac(s);
dtls1_start_timer(s);
- ret = dtls1_client_hello(s);
+ ret = ssl3_client_hello(s);
if (ret <= 0)
goto end;
@@ -462,7 +478,7 @@ int dtls1_connect(SSL *s)
case SSL3_ST_CW_CERT_C:
case SSL3_ST_CW_CERT_D:
dtls1_start_timer(s);
- ret = dtls1_send_client_certificate(s);
+ ret = ssl3_send_client_certificate(s);
if (ret <= 0)
goto end;
s->state = SSL3_ST_CW_KEY_EXCH_A;
@@ -472,7 +488,7 @@ int dtls1_connect(SSL *s)
case SSL3_ST_CW_KEY_EXCH_A:
case SSL3_ST_CW_KEY_EXCH_B:
dtls1_start_timer(s);
- ret = dtls1_send_client_key_exchange(s);
+ ret = ssl3_send_client_key_exchange(s);
if (ret <= 0)
goto end;
@@ -517,7 +533,7 @@ int dtls1_connect(SSL *s)
case SSL3_ST_CW_CERT_VRFY_A:
case SSL3_ST_CW_CERT_VRFY_B:
dtls1_start_timer(s);
- ret = dtls1_send_client_verify(s);
+ ret = ssl3_send_client_verify(s);
if (ret <= 0)
goto end;
#ifndef OPENSSL_NO_SCTP
@@ -583,13 +599,13 @@ int dtls1_connect(SSL *s)
case SSL3_ST_CW_FINISHED_B:
if (!s->hit)
dtls1_start_timer(s);
- ret = dtls1_send_finished(s,
- SSL3_ST_CW_FINISHED_A,
- SSL3_ST_CW_FINISHED_B,
- s->method->
- ssl3_enc->client_finished_label,
- s->method->
- ssl3_enc->client_finished_label_len);
+ ret = ssl3_send_finished(s,
+ SSL3_ST_CW_FINISHED_A,
+ SSL3_ST_CW_FINISHED_B,
+ s->method->
+ ssl3_enc->client_finished_label,
+ s->method->
+ ssl3_enc->client_finished_label_len);
if (ret <= 0)
goto end;
s->state = SSL3_ST_CW_FLUSH;
@@ -786,140 +802,18 @@ int dtls1_connect(SSL *s)
return (ret);
}
-int dtls1_client_hello(SSL *s)
-{
- unsigned char *buf;
- unsigned char *p, *d;
- unsigned int i, j;
- unsigned long l;
- SSL_COMP *comp;
-
- buf = (unsigned char *)s->init_buf->data;
- if (s->state == SSL3_ST_CW_CLNT_HELLO_A) {
- SSL_SESSION *sess = s->session;
- if ((s->session == NULL) || (s->session->ssl_version != s->version) ||
-#ifdef OPENSSL_NO_TLSEXT
- !sess->session_id_length ||
-#else
- (!sess->session_id_length && !sess->tlsext_tick) ||
-#endif
- (s->session->not_resumable)) {
- if (!ssl_get_new_session(s, 0))
- goto err;
- }
- /* else use the pre-loaded session */
-
- p = s->s3->client_random;
-
- /*
- * if client_random is initialized, reuse it, we are required to use
- * same upon reply to HelloVerify
- */
- for (i = 0; p[i] == '\0' && i < sizeof(s->s3->client_random); i++) ;
- if (i == sizeof(s->s3->client_random))
- ssl_fill_hello_random(s, 0, p, sizeof(s->s3->client_random));
-
- /* Do the message type and length last */
- d = p = &(buf[DTLS1_HM_HEADER_LENGTH]);
-
- *(p++) = s->version >> 8;
- *(p++) = s->version & 0xff;
- s->client_version = s->version;
-
- /* Random stuff */
- memcpy(p, s->s3->client_random, SSL3_RANDOM_SIZE);
- p += SSL3_RANDOM_SIZE;
-
- /* Session ID */
- if (s->new_session)
- i = 0;
- else
- i = s->session->session_id_length;
- *(p++) = i;
- if (i != 0) {
- if (i > sizeof s->session->session_id) {
- SSLerr(SSL_F_DTLS1_CLIENT_HELLO, ERR_R_INTERNAL_ERROR);
- goto err;
- }
- memcpy(p, s->session->session_id, i);
- p += i;
- }
-
- /* cookie stuff */
- if (s->d1->cookie_len > sizeof(s->d1->cookie)) {
- SSLerr(SSL_F_DTLS1_CLIENT_HELLO, ERR_R_INTERNAL_ERROR);
- goto err;
- }
- *(p++) = s->d1->cookie_len;
- memcpy(p, s->d1->cookie, s->d1->cookie_len);
- p += s->d1->cookie_len;
-
- /* Ciphers supported */
- i = ssl_cipher_list_to_bytes(s, SSL_get_ciphers(s), &(p[2]), 0);
- if (i == 0) {
- SSLerr(SSL_F_DTLS1_CLIENT_HELLO, SSL_R_NO_CIPHERS_AVAILABLE);
- goto err;
- }
- s2n(i, p);
- p += i;
-
- /* COMPRESSION */
- if (s->ctx->comp_methods == NULL)
- j = 0;
- else
- j = sk_SSL_COMP_num(s->ctx->comp_methods);
- *(p++) = 1 + j;
- for (i = 0; i < j; i++) {
- comp = sk_SSL_COMP_value(s->ctx->comp_methods, i);
- *(p++) = comp->id;
- }
- *(p++) = 0; /* Add the NULL method */
-
-#ifndef OPENSSL_NO_TLSEXT
- /* TLS extensions */
- if (ssl_prepare_clienthello_tlsext(s) <= 0) {
- SSLerr(SSL_F_DTLS1_CLIENT_HELLO, SSL_R_CLIENTHELLO_TLSEXT);
- goto err;
- }
- if ((p =
- ssl_add_clienthello_tlsext(s, p,
- buf + SSL3_RT_MAX_PLAIN_LENGTH)) ==
- NULL) {
- SSLerr(SSL_F_DTLS1_CLIENT_HELLO, ERR_R_INTERNAL_ERROR);
- goto err;
- }
-#endif
-
- l = (p - d);
- d = buf;
-
- d = dtls1_set_message_header(s, d, SSL3_MT_CLIENT_HELLO, l, 0, l);
-
- s->state = SSL3_ST_CW_CLNT_HELLO_B;
- /* number of bytes to write */
- s->init_num = p - buf;
- s->init_off = 0;
-
- /* buffer the message to handle re-xmits */
- dtls1_buffer_message(s, 0);
- }
-
- /* SSL3_ST_CW_CLNT_HELLO_B */
- return (dtls1_do_write(s, SSL3_RT_HANDSHAKE));
- err:
- return (-1);
-}
-
static int dtls1_get_hello_verify(SSL *s)
{
int n, al, ok = 0;
unsigned char *data;
unsigned int cookie_len;
+ s->first_packet = 1;
n = s->method->ssl_get_message(s,
DTLS1_ST_CR_HELLO_VERIFY_REQUEST_A,
DTLS1_ST_CR_HELLO_VERIFY_REQUEST_B,
-1, s->max_cert_list, &ok);
+ s->first_packet = 0;
if (!ok)
return ((int)n);
@@ -931,13 +825,16 @@ static int dtls1_get_hello_verify(SSL *s)
}
data = (unsigned char *)s->init_msg;
-
- if ((data[0] != (s->version >> 8)) || (data[1] != (s->version & 0xff))) {
+#if 0
+ if (s->method->version != DTLS_ANY_VERSION &&
+ ((data[0] != (s->version >> 8)) || (data[1] != (s->version & 0xff))))
+ {
SSLerr(SSL_F_DTLS1_GET_HELLO_VERIFY, SSL_R_WRONG_SSL_VERSION);
s->version = (s->version & 0xff00) | data[1];
al = SSL_AD_PROTOCOL_VERSION;
goto f_err;
}
+#endif
data += 2;
cookie_len = *(data++);
@@ -957,746 +854,3 @@ static int dtls1_get_hello_verify(SSL *s)
s->state = SSL_ST_ERR;
return -1;
}
-
-int dtls1_send_client_key_exchange(SSL *s)
-{
- unsigned char *p, *d;
- int n;
- unsigned long alg_k;
-#ifndef OPENSSL_NO_RSA
- unsigned char *q;
- EVP_PKEY *pkey = NULL;
-#endif
-#ifndef OPENSSL_NO_KRB5
- KSSL_ERR kssl_err;
-#endif /* OPENSSL_NO_KRB5 */
-#ifndef OPENSSL_NO_ECDH
- EC_KEY *clnt_ecdh = NULL;
- const EC_POINT *srvr_ecpoint = NULL;
- EVP_PKEY *srvr_pub_pkey = NULL;
- unsigned char *encodedPoint = NULL;
- int encoded_pt_len = 0;
- BN_CTX *bn_ctx = NULL;
-#endif
-
- if (s->state == SSL3_ST_CW_KEY_EXCH_A) {
- d = (unsigned char *)s->init_buf->data;
- p = &(d[DTLS1_HM_HEADER_LENGTH]);
-
- alg_k = s->s3->tmp.new_cipher->algorithm_mkey;
-
- /* Fool emacs indentation */
- if (0) {
- }
-#ifndef OPENSSL_NO_RSA
- else if (alg_k & SSL_kRSA) {
- RSA *rsa;
- unsigned char tmp_buf[SSL_MAX_MASTER_KEY_LENGTH];
-
- if (s->session->sess_cert == NULL) {
- /*
- * We should always have a server certificate with SSL_kRSA.
- */
- SSLerr(SSL_F_DTLS1_SEND_CLIENT_KEY_EXCHANGE,
- ERR_R_INTERNAL_ERROR);
- goto err;
- }
-
- if (s->session->sess_cert->peer_rsa_tmp != NULL)
- rsa = s->session->sess_cert->peer_rsa_tmp;
- else {
- pkey =
- X509_get_pubkey(s->session->
- sess_cert->peer_pkeys[SSL_PKEY_RSA_ENC].
- x509);
- if ((pkey == NULL) || (pkey->type != EVP_PKEY_RSA)
- || (pkey->pkey.rsa == NULL)) {
- SSLerr(SSL_F_DTLS1_SEND_CLIENT_KEY_EXCHANGE,
- ERR_R_INTERNAL_ERROR);
- goto err;
- }
- rsa = pkey->pkey.rsa;
- EVP_PKEY_free(pkey);
- }
-
- tmp_buf[0] = s->client_version >> 8;
- tmp_buf[1] = s->client_version & 0xff;
- if (RAND_bytes(&(tmp_buf[2]), sizeof tmp_buf - 2) <= 0)
- goto err;
-
- s->session->master_key_length = sizeof tmp_buf;
-
- q = p;
- /* Fix buf for TLS and [incidentally] DTLS */
- if (s->version > SSL3_VERSION)
- p += 2;
- n = RSA_public_encrypt(sizeof tmp_buf,
- tmp_buf, p, rsa, RSA_PKCS1_PADDING);
-# ifdef PKCS1_CHECK
- if (s->options & SSL_OP_PKCS1_CHECK_1)
- p[1]++;
- if (s->options & SSL_OP_PKCS1_CHECK_2)
- tmp_buf[0] = 0x70;
-# endif
- if (n <= 0) {
- SSLerr(SSL_F_DTLS1_SEND_CLIENT_KEY_EXCHANGE,
- SSL_R_BAD_RSA_ENCRYPT);
- goto err;
- }
-
- /* Fix buf for TLS and [incidentally] DTLS */
- if (s->version > SSL3_VERSION) {
- s2n(n, q);
- n += 2;
- }
-
- s->session->master_key_length =
- s->method->ssl3_enc->generate_master_secret(s,
- s->
- session->master_key,
- tmp_buf,
- sizeof tmp_buf);
- OPENSSL_cleanse(tmp_buf, sizeof tmp_buf);
- }
-#endif
-#ifndef OPENSSL_NO_KRB5
- else if (alg_k & SSL_kKRB5) {
- krb5_error_code krb5rc;
- KSSL_CTX *kssl_ctx = s->kssl_ctx;
- /* krb5_data krb5_ap_req; */
- krb5_data *enc_ticket;
- krb5_data authenticator, *authp = NULL;
- EVP_CIPHER_CTX ciph_ctx;
- const EVP_CIPHER *enc = NULL;
- unsigned char iv[EVP_MAX_IV_LENGTH];
- unsigned char tmp_buf[SSL_MAX_MASTER_KEY_LENGTH];
- unsigned char epms[SSL_MAX_MASTER_KEY_LENGTH + EVP_MAX_IV_LENGTH];
- int padl, outl = sizeof(epms);
-
- EVP_CIPHER_CTX_init(&ciph_ctx);
-
-# ifdef KSSL_DEBUG
- printf("ssl3_send_client_key_exchange(%lx & %lx)\n",
- alg_k, SSL_kKRB5);
-# endif /* KSSL_DEBUG */
-
- authp = NULL;
-# ifdef KRB5SENDAUTH
- if (KRB5SENDAUTH)
- authp = &authenticator;
-# endif /* KRB5SENDAUTH */
-
- krb5rc = kssl_cget_tkt(kssl_ctx, &enc_ticket, authp, &kssl_err);
- enc = kssl_map_enc(kssl_ctx->enctype);
- if (enc == NULL)
- goto err;
-# ifdef KSSL_DEBUG
- {
- printf("kssl_cget_tkt rtn %d\n", krb5rc);
- if (krb5rc && kssl_err.text)
- printf("kssl_cget_tkt kssl_err=%s\n", kssl_err.text);
- }
-# endif /* KSSL_DEBUG */
-
- if (krb5rc) {
- ssl3_send_alert(s, SSL3_AL_FATAL, SSL_AD_HANDSHAKE_FAILURE);
- SSLerr(SSL_F_DTLS1_SEND_CLIENT_KEY_EXCHANGE, kssl_err.reason);
- goto err;
- }
-
- /*-
- * 20010406 VRS - Earlier versions used KRB5 AP_REQ
- ** in place of RFC 2712 KerberosWrapper, as in:
- **
- ** Send ticket (copy to *p, set n = length)
- ** n = krb5_ap_req.length;
- ** memcpy(p, krb5_ap_req.data, krb5_ap_req.length);
- ** if (krb5_ap_req.data)
- ** kssl_krb5_free_data_contents(NULL,&krb5_ap_req);
- **
- ** Now using real RFC 2712 KerberosWrapper
- ** (Thanks to Simon Wilkinson <sxw@sxw.org.uk>)
- ** Note: 2712 "opaque" types are here replaced
- ** with a 2-byte length followed by the value.
- ** Example:
- ** KerberosWrapper= xx xx asn1ticket 0 0 xx xx encpms
- ** Where "xx xx" = length bytes. Shown here with
- ** optional authenticator omitted.
- */
-
- /* KerberosWrapper.Ticket */
- s2n(enc_ticket->length, p);
- memcpy(p, enc_ticket->data, enc_ticket->length);
- p += enc_ticket->length;
- n = enc_ticket->length + 2;
-
- /* KerberosWrapper.Authenticator */
- if (authp && authp->length) {
- s2n(authp->length, p);
- memcpy(p, authp->data, authp->length);
- p += authp->length;
- n += authp->length + 2;
-
- free(authp->data);
- authp->data = NULL;
- authp->length = 0;
- } else {
- s2n(0, p); /* null authenticator length */
- n += 2;
- }
-
- if (RAND_bytes(tmp_buf, sizeof tmp_buf) <= 0)
- goto err;
-
- /*-
- * 20010420 VRS. Tried it this way; failed.
- * EVP_EncryptInit_ex(&ciph_ctx,enc, NULL,NULL);
- * EVP_CIPHER_CTX_set_key_length(&ciph_ctx,
- * kssl_ctx->length);
- * EVP_EncryptInit_ex(&ciph_ctx,NULL, key,iv);
- */
-
- memset(iv, 0, sizeof iv); /* per RFC 1510 */
- EVP_EncryptInit_ex(&ciph_ctx, enc, NULL, kssl_ctx->key, iv);
- EVP_EncryptUpdate(&ciph_ctx, epms, &outl, tmp_buf,
- sizeof tmp_buf);
- EVP_EncryptFinal_ex(&ciph_ctx, &(epms[outl]), &padl);
- outl += padl;
- if (outl > (int)sizeof epms) {
- SSLerr(SSL_F_DTLS1_SEND_CLIENT_KEY_EXCHANGE,
- ERR_R_INTERNAL_ERROR);
- goto err;
- }
- EVP_CIPHER_CTX_cleanup(&ciph_ctx);
-
- /* KerberosWrapper.EncryptedPreMasterSecret */
- s2n(outl, p);
- memcpy(p, epms, outl);
- p += outl;
- n += outl + 2;
-
- s->session->master_key_length =
- s->method->ssl3_enc->generate_master_secret(s,
- s->
- session->master_key,
- tmp_buf,
- sizeof tmp_buf);
-
- OPENSSL_cleanse(tmp_buf, sizeof tmp_buf);
- OPENSSL_cleanse(epms, outl);
- }
-#endif
-#ifndef OPENSSL_NO_DH
- else if (alg_k & (SSL_kEDH | SSL_kDHr | SSL_kDHd)) {
- DH *dh_srvr, *dh_clnt;
-
- if (s->session->sess_cert == NULL) {
- ssl3_send_alert(s, SSL3_AL_FATAL, SSL_AD_UNEXPECTED_MESSAGE);
- SSLerr(SSL_F_DTLS1_SEND_CLIENT_KEY_EXCHANGE,
- SSL_R_UNEXPECTED_MESSAGE);
- goto err;
- }
-
- if (s->session->sess_cert->peer_dh_tmp != NULL)
- dh_srvr = s->session->sess_cert->peer_dh_tmp;
- else {
- /* we get them from the cert */
- ssl3_send_alert(s, SSL3_AL_FATAL, SSL_AD_HANDSHAKE_FAILURE);
- SSLerr(SSL_F_DTLS1_SEND_CLIENT_KEY_EXCHANGE,
- SSL_R_UNABLE_TO_FIND_DH_PARAMETERS);
- goto err;
- }
-
- /* generate a new random key */
- if ((dh_clnt = DHparams_dup(dh_srvr)) == NULL) {
- SSLerr(SSL_F_DTLS1_SEND_CLIENT_KEY_EXCHANGE, ERR_R_DH_LIB);
- goto err;
- }
- if (!DH_generate_key(dh_clnt)) {
- SSLerr(SSL_F_DTLS1_SEND_CLIENT_KEY_EXCHANGE, ERR_R_DH_LIB);
- goto err;
- }
-
- /*
- * use the 'p' output buffer for the DH key, but make sure to
- * clear it out afterwards
- */
-
- n = DH_compute_key(p, dh_srvr->pub_key, dh_clnt);
-
- if (n <= 0) {
- SSLerr(SSL_F_DTLS1_SEND_CLIENT_KEY_EXCHANGE, ERR_R_DH_LIB);
- goto err;
- }
-
- /* generate master key from the result */
- s->session->master_key_length =
- s->method->ssl3_enc->generate_master_secret(s,
- s->
- session->master_key,
- p, n);
- /* clean up */
- memset(p, 0, n);
-
- /* send off the data */
- n = BN_num_bytes(dh_clnt->pub_key);
- s2n(n, p);
- BN_bn2bin(dh_clnt->pub_key, p);
- n += 2;
-
- DH_free(dh_clnt);
-
- /* perhaps clean things up a bit EAY EAY EAY EAY */
- }
-#endif
-#ifndef OPENSSL_NO_ECDH
- else if (alg_k & (SSL_kEECDH | SSL_kECDHr | SSL_kECDHe)) {
- const EC_GROUP *srvr_group = NULL;
- EC_KEY *tkey;
- int ecdh_clnt_cert = 0;
- int field_size = 0;
-
- if (s->session->sess_cert == NULL) {
- ssl3_send_alert(s, SSL3_AL_FATAL, SSL_AD_UNEXPECTED_MESSAGE);
- SSLerr(SSL_F_DTLS1_SEND_CLIENT_KEY_EXCHANGE,
- SSL_R_UNEXPECTED_MESSAGE);
- goto err;
- }
-
- /*
- * Did we send out the client's ECDH share for use in premaster
- * computation as part of client certificate? If so, set
- * ecdh_clnt_cert to 1.
- */
- if ((alg_k & (SSL_kECDHr | SSL_kECDHe)) && (s->cert != NULL)) {
- /*
- * XXX: For now, we do not support client authentication
- * using ECDH certificates. To add such support, one needs to
- * add code that checks for appropriate conditions and sets
- * ecdh_clnt_cert to 1. For example, the cert have an ECC key
- * on the same curve as the server's and the key should be
- * authorized for key agreement. One also needs to add code
- * in ssl3_connect to skip sending the certificate verify
- * message. if ((s->cert->key->privatekey != NULL) &&
- * (s->cert->key->privatekey->type == EVP_PKEY_EC) && ...)
- * ecdh_clnt_cert = 1;
- */
- }
-
- if (s->session->sess_cert->peer_ecdh_tmp != NULL) {
- tkey = s->session->sess_cert->peer_ecdh_tmp;
- } else {
- /* Get the Server Public Key from Cert */
- srvr_pub_pkey =
- X509_get_pubkey(s->session->
- sess_cert->peer_pkeys[SSL_PKEY_ECC].x509);
- if ((srvr_pub_pkey == NULL)
- || (srvr_pub_pkey->type != EVP_PKEY_EC)
- || (srvr_pub_pkey->pkey.ec == NULL)) {
- SSLerr(SSL_F_DTLS1_SEND_CLIENT_KEY_EXCHANGE,
- ERR_R_INTERNAL_ERROR);
- goto err;
- }
-
- tkey = srvr_pub_pkey->pkey.ec;
- }
-
- srvr_group = EC_KEY_get0_group(tkey);
- srvr_ecpoint = EC_KEY_get0_public_key(tkey);
-
- if ((srvr_group == NULL) || (srvr_ecpoint == NULL)) {
- SSLerr(SSL_F_DTLS1_SEND_CLIENT_KEY_EXCHANGE,
- ERR_R_INTERNAL_ERROR);
- goto err;
- }
-
- if ((clnt_ecdh = EC_KEY_new()) == NULL) {
- SSLerr(SSL_F_DTLS1_SEND_CLIENT_KEY_EXCHANGE,
- ERR_R_MALLOC_FAILURE);
- goto err;
- }
-
- if (!EC_KEY_set_group(clnt_ecdh, srvr_group)) {
- SSLerr(SSL_F_DTLS1_SEND_CLIENT_KEY_EXCHANGE, ERR_R_EC_LIB);
- goto err;
- }
- if (ecdh_clnt_cert) {
- /*
- * Reuse key info from our certificate We only need our
- * private key to perform the ECDH computation.
- */
- const BIGNUM *priv_key;
- tkey = s->cert->key->privatekey->pkey.ec;
- priv_key = EC_KEY_get0_private_key(tkey);
- if (priv_key == NULL) {
- SSLerr(SSL_F_DTLS1_SEND_CLIENT_KEY_EXCHANGE,
- ERR_R_MALLOC_FAILURE);
- goto err;
- }
- if (!EC_KEY_set_private_key(clnt_ecdh, priv_key)) {
- SSLerr(SSL_F_DTLS1_SEND_CLIENT_KEY_EXCHANGE,
- ERR_R_EC_LIB);
- goto err;
- }
- } else {
- /* Generate a new ECDH key pair */
- if (!(EC_KEY_generate_key(clnt_ecdh))) {
- SSLerr(SSL_F_DTLS1_SEND_CLIENT_KEY_EXCHANGE,
- ERR_R_ECDH_LIB);
- goto err;
- }
- }
-
- /*
- * use the 'p' output buffer for the ECDH key, but make sure to
- * clear it out afterwards
- */
-
- field_size = EC_GROUP_get_degree(srvr_group);
- if (field_size <= 0) {
- SSLerr(SSL_F_DTLS1_SEND_CLIENT_KEY_EXCHANGE, ERR_R_ECDH_LIB);
- goto err;
- }
- n = ECDH_compute_key(p, (field_size + 7) / 8, srvr_ecpoint,
- clnt_ecdh, NULL);
- if (n <= 0) {
- SSLerr(SSL_F_DTLS1_SEND_CLIENT_KEY_EXCHANGE, ERR_R_ECDH_LIB);
- goto err;
- }
-
- /* generate master key from the result */
- s->session->master_key_length =
- s->method->ssl3_enc->generate_master_secret(s,
- s->
- session->master_key,
- p, n);
-
- memset(p, 0, n); /* clean up */
-
- if (ecdh_clnt_cert) {
- /* Send empty client key exch message */
- n = 0;
- } else {
- /*
- * First check the size of encoding and allocate memory
- * accordingly.
- */
- encoded_pt_len =
- EC_POINT_point2oct(srvr_group,
- EC_KEY_get0_public_key(clnt_ecdh),
- POINT_CONVERSION_UNCOMPRESSED,
- NULL, 0, NULL);
-
- encodedPoint = (unsigned char *)
- OPENSSL_malloc(encoded_pt_len * sizeof(unsigned char));
- bn_ctx = BN_CTX_new();
- if ((encodedPoint == NULL) || (bn_ctx == NULL)) {
- SSLerr(SSL_F_DTLS1_SEND_CLIENT_KEY_EXCHANGE,
- ERR_R_MALLOC_FAILURE);
- goto err;
- }
-
- /* Encode the public key */
- n = EC_POINT_point2oct(srvr_group,
- EC_KEY_get0_public_key(clnt_ecdh),
- POINT_CONVERSION_UNCOMPRESSED,
- encodedPoint, encoded_pt_len, bn_ctx);
-
- *p = n; /* length of encoded point */
- /* Encoded point will be copied here */
- p += 1;
- /* copy the point */
- memcpy((unsigned char *)p, encodedPoint, n);
- /* increment n to account for length field */
- n += 1;
- }
-
- /* Free allocated memory */
- BN_CTX_free(bn_ctx);
- if (encodedPoint != NULL)
- OPENSSL_free(encodedPoint);
- if (clnt_ecdh != NULL)
- EC_KEY_free(clnt_ecdh);
- EVP_PKEY_free(srvr_pub_pkey);
- }
-#endif /* !OPENSSL_NO_ECDH */
-
-#ifndef OPENSSL_NO_PSK
- else if (alg_k & SSL_kPSK) {
- char identity[PSK_MAX_IDENTITY_LEN];
- unsigned char *t = NULL;
- unsigned char psk_or_pre_ms[PSK_MAX_PSK_LEN * 2 + 4];
- unsigned int pre_ms_len = 0, psk_len = 0;
- int psk_err = 1;
-
- n = 0;
- if (s->psk_client_callback == NULL) {
- SSLerr(SSL_F_DTLS1_SEND_CLIENT_KEY_EXCHANGE,
- SSL_R_PSK_NO_CLIENT_CB);
- goto err;
- }
-
- psk_len = s->psk_client_callback(s, s->ctx->psk_identity_hint,
- identity, PSK_MAX_IDENTITY_LEN,
- psk_or_pre_ms,
- sizeof(psk_or_pre_ms));
- if (psk_len > PSK_MAX_PSK_LEN) {
- SSLerr(SSL_F_DTLS1_SEND_CLIENT_KEY_EXCHANGE,
- ERR_R_INTERNAL_ERROR);
- goto psk_err;
- } else if (psk_len == 0) {
- SSLerr(SSL_F_DTLS1_SEND_CLIENT_KEY_EXCHANGE,
- SSL_R_PSK_IDENTITY_NOT_FOUND);
- goto psk_err;
- }
-
- /* create PSK pre_master_secret */
- pre_ms_len = 2 + psk_len + 2 + psk_len;
- t = psk_or_pre_ms;
- memmove(psk_or_pre_ms + psk_len + 4, psk_or_pre_ms, psk_len);
- s2n(psk_len, t);
- memset(t, 0, psk_len);
- t += psk_len;
- s2n(psk_len, t);
-
- if (s->session->psk_identity_hint != NULL)
- OPENSSL_free(s->session->psk_identity_hint);
- s->session->psk_identity_hint =
- BUF_strdup(s->ctx->psk_identity_hint);
- if (s->ctx->psk_identity_hint != NULL
- && s->session->psk_identity_hint == NULL) {
- SSLerr(SSL_F_DTLS1_SEND_CLIENT_KEY_EXCHANGE,
- ERR_R_MALLOC_FAILURE);
- goto psk_err;
- }
-
- if (s->session->psk_identity != NULL)
- OPENSSL_free(s->session->psk_identity);
- s->session->psk_identity = BUF_strdup(identity);
- if (s->session->psk_identity == NULL) {
- SSLerr(SSL_F_DTLS1_SEND_CLIENT_KEY_EXCHANGE,
- ERR_R_MALLOC_FAILURE);
- goto psk_err;
- }
-
- s->session->master_key_length =
- s->method->ssl3_enc->generate_master_secret(s,
- s->
- session->master_key,
- psk_or_pre_ms,
- pre_ms_len);
- n = strlen(identity);
- s2n(n, p);
- memcpy(p, identity, n);
- n += 2;
- psk_err = 0;
- psk_err:
- OPENSSL_cleanse(identity, PSK_MAX_IDENTITY_LEN);
- OPENSSL_cleanse(psk_or_pre_ms, sizeof(psk_or_pre_ms));
- if (psk_err != 0) {
- ssl3_send_alert(s, SSL3_AL_FATAL, SSL_AD_HANDSHAKE_FAILURE);
- goto err;
- }
- }
-#endif
- else {
- ssl3_send_alert(s, SSL3_AL_FATAL, SSL_AD_HANDSHAKE_FAILURE);
- SSLerr(SSL_F_DTLS1_SEND_CLIENT_KEY_EXCHANGE,
- ERR_R_INTERNAL_ERROR);
- goto err;
- }
-
- d = dtls1_set_message_header(s, d,
- SSL3_MT_CLIENT_KEY_EXCHANGE, n, 0, n);
- /*-
- *(d++)=SSL3_MT_CLIENT_KEY_EXCHANGE;
- l2n3(n,d);
- l2n(s->d1->handshake_write_seq,d);
- s->d1->handshake_write_seq++;
- */
-
- s->state = SSL3_ST_CW_KEY_EXCH_B;
- /* number of bytes to write */
- s->init_num = n + DTLS1_HM_HEADER_LENGTH;
- s->init_off = 0;
-
- /* buffer the message to handle re-xmits */
- dtls1_buffer_message(s, 0);
- }
-
- /* SSL3_ST_CW_KEY_EXCH_B */
- return (dtls1_do_write(s, SSL3_RT_HANDSHAKE));
- err:
-#ifndef OPENSSL_NO_ECDH
- BN_CTX_free(bn_ctx);
- if (encodedPoint != NULL)
- OPENSSL_free(encodedPoint);
- if (clnt_ecdh != NULL)
- EC_KEY_free(clnt_ecdh);
- EVP_PKEY_free(srvr_pub_pkey);
-#endif
- return (-1);
-}
-
-int dtls1_send_client_verify(SSL *s)
-{
- unsigned char *p, *d;
- unsigned char data[MD5_DIGEST_LENGTH + SHA_DIGEST_LENGTH];
- EVP_PKEY *pkey;
-#ifndef OPENSSL_NO_RSA
- unsigned u = 0;
-#endif
- unsigned long n;
-#if !defined(OPENSSL_NO_DSA) || !defined(OPENSSL_NO_ECDSA)
- int j;
-#endif
-
- if (s->state == SSL3_ST_CW_CERT_VRFY_A) {
- d = (unsigned char *)s->init_buf->data;
- p = &(d[DTLS1_HM_HEADER_LENGTH]);
- pkey = s->cert->key->privatekey;
-
- s->method->ssl3_enc->cert_verify_mac(s,
- NID_sha1,
- &(data[MD5_DIGEST_LENGTH]));
-
-#ifndef OPENSSL_NO_RSA
- if (pkey->type == EVP_PKEY_RSA) {
- s->method->ssl3_enc->cert_verify_mac(s, NID_md5, &(data[0]));
- if (RSA_sign(NID_md5_sha1, data,
- MD5_DIGEST_LENGTH + SHA_DIGEST_LENGTH,
- &(p[2]), &u, pkey->pkey.rsa) <= 0) {
- SSLerr(SSL_F_DTLS1_SEND_CLIENT_VERIFY, ERR_R_RSA_LIB);
- goto err;
- }
- s2n(u, p);
- n = u + 2;
- } else
-#endif
-#ifndef OPENSSL_NO_DSA
- if (pkey->type == EVP_PKEY_DSA) {
- if (!DSA_sign(pkey->save_type,
- &(data[MD5_DIGEST_LENGTH]),
- SHA_DIGEST_LENGTH, &(p[2]),
- (unsigned int *)&j, pkey->pkey.dsa)) {
- SSLerr(SSL_F_DTLS1_SEND_CLIENT_VERIFY, ERR_R_DSA_LIB);
- goto err;
- }
- s2n(j, p);
- n = j + 2;
- } else
-#endif
-#ifndef OPENSSL_NO_ECDSA
- if (pkey->type == EVP_PKEY_EC) {
- if (!ECDSA_sign(pkey->save_type,
- &(data[MD5_DIGEST_LENGTH]),
- SHA_DIGEST_LENGTH, &(p[2]),
- (unsigned int *)&j, pkey->pkey.ec)) {
- SSLerr(SSL_F_DTLS1_SEND_CLIENT_VERIFY, ERR_R_ECDSA_LIB);
- goto err;
- }
- s2n(j, p);
- n = j + 2;
- } else
-#endif
- {
- SSLerr(SSL_F_DTLS1_SEND_CLIENT_VERIFY, ERR_R_INTERNAL_ERROR);
- goto err;
- }
-
- d = dtls1_set_message_header(s, d,
- SSL3_MT_CERTIFICATE_VERIFY, n, 0, n);
-
- s->init_num = (int)n + DTLS1_HM_HEADER_LENGTH;
- s->init_off = 0;
-
- /* buffer the message to handle re-xmits */
- dtls1_buffer_message(s, 0);
-
- s->state = SSL3_ST_CW_CERT_VRFY_B;
- }
-
- /* s->state = SSL3_ST_CW_CERT_VRFY_B */
- return (dtls1_do_write(s, SSL3_RT_HANDSHAKE));
- err:
- return (-1);
-}
-
-int dtls1_send_client_certificate(SSL *s)
-{
- X509 *x509 = NULL;
- EVP_PKEY *pkey = NULL;
- int i;
- unsigned long l;
-
- if (s->state == SSL3_ST_CW_CERT_A) {
- if ((s->cert == NULL) ||
- (s->cert->key->x509 == NULL) ||
- (s->cert->key->privatekey == NULL))
- s->state = SSL3_ST_CW_CERT_B;
- else
- s->state = SSL3_ST_CW_CERT_C;
- }
-
- /* We need to get a client cert */
- if (s->state == SSL3_ST_CW_CERT_B) {
- /*
- * If we get an error, we need to ssl->rwstate=SSL_X509_LOOKUP;
- * return(-1); We then get retied later
- */
- i = 0;
- i = ssl_do_client_cert_cb(s, &x509, &pkey);
- if (i < 0) {
- s->rwstate = SSL_X509_LOOKUP;
- return (-1);
- }
- s->rwstate = SSL_NOTHING;
- if ((i == 1) && (pkey != NULL) && (x509 != NULL)) {
- s->state = SSL3_ST_CW_CERT_B;
- if (!SSL_use_certificate(s, x509) || !SSL_use_PrivateKey(s, pkey))
- i = 0;
- } else if (i == 1) {
- i = 0;
- SSLerr(SSL_F_DTLS1_SEND_CLIENT_CERTIFICATE,
- SSL_R_BAD_DATA_RETURNED_BY_CALLBACK);
- }
-
- if (x509 != NULL)
- X509_free(x509);
- if (pkey != NULL)
- EVP_PKEY_free(pkey);
- if (i == 0) {
- if (s->version == SSL3_VERSION) {
- s->s3->tmp.cert_req = 0;
- ssl3_send_alert(s, SSL3_AL_WARNING, SSL_AD_NO_CERTIFICATE);
- return (1);
- } else {
- s->s3->tmp.cert_req = 2;
- }
- }
-
- /* Ok, we have a cert */
- s->state = SSL3_ST_CW_CERT_C;
- }
-
- if (s->state == SSL3_ST_CW_CERT_C) {
- s->state = SSL3_ST_CW_CERT_D;
- l = dtls1_output_cert_chain(s,
- (s->s3->tmp.cert_req ==
- 2) ? NULL : s->cert->key->x509);
- if (!l) {
- SSLerr(SSL_F_DTLS1_SEND_CLIENT_CERTIFICATE, ERR_R_INTERNAL_ERROR);
- ssl3_send_alert(s, SSL3_AL_FATAL, SSL_AD_INTERNAL_ERROR);
- return 0;
- }
- s->init_num = (int)l;
- s->init_off = 0;
-
- /* set header called by dtls1_output_cert_chain() */
-
- /* buffer the message to handle re-xmits */
- dtls1_buffer_message(s, 0);
- }
- /* SSL3_ST_CW_CERT_D */
- return (dtls1_do_write(s, SSL3_RT_HANDSHAKE));
-}
diff --git a/crypto/openssl/ssl/d1_enc.c b/crypto/openssl/ssl/d1_enc.c
deleted file mode 100644
index e876364..0000000
--- a/crypto/openssl/ssl/d1_enc.c
+++ /dev/null
@@ -1,251 +0,0 @@
-/* ssl/d1_enc.c */
-/*
- * DTLS implementation written by Nagendra Modadugu
- * (nagendra@cs.stanford.edu) for the OpenSSL project 2005.
- */
-/* ====================================================================
- * Copyright (c) 1998-2005 The OpenSSL Project. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in
- * the documentation and/or other materials provided with the
- * distribution.
- *
- * 3. All advertising materials mentioning features or use of this
- * software must display the following acknowledgment:
- * "This product includes software developed by the OpenSSL Project
- * for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
- *
- * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
- * endorse or promote products derived from this software without
- * prior written permission. For written permission, please contact
- * openssl-core@openssl.org.
- *
- * 5. Products derived from this software may not be called "OpenSSL"
- * nor may "OpenSSL" appear in their names without prior written
- * permission of the OpenSSL Project.
- *
- * 6. Redistributions of any form whatsoever must retain the following
- * acknowledgment:
- * "This product includes software developed by the OpenSSL Project
- * for use in the OpenSSL Toolkit (http://www.openssl.org/)"
- *
- * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
- * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
- * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
- * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
- * OF THE POSSIBILITY OF SUCH DAMAGE.
- * ====================================================================
- *
- * This product includes cryptographic software written by Eric Young
- * (eay@cryptsoft.com). This product includes software written by Tim
- * Hudson (tjh@cryptsoft.com).
- *
- */
-/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
- * All rights reserved.
- *
- * This package is an SSL implementation written
- * by Eric Young (eay@cryptsoft.com).
- * The implementation was written so as to conform with Netscapes SSL.
- *
- * This library is free for commercial and non-commercial use as long as
- * the following conditions are aheared to. The following conditions
- * apply to all code found in this distribution, be it the RC4, RSA,
- * lhash, DES, etc., code; not just the SSL code. The SSL documentation
- * included with this distribution is covered by the same copyright terms
- * except that the holder is Tim Hudson (tjh@cryptsoft.com).
- *
- * Copyright remains Eric Young's, and as such any Copyright notices in
- * the code are not to be removed.
- * If this package is used in a product, Eric Young should be given attribution
- * as the author of the parts of the library used.
- * This can be in the form of a textual message at program startup or
- * in documentation (online or textual) provided with the package.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * "This product includes cryptographic software written by
- * Eric Young (eay@cryptsoft.com)"
- * The word 'cryptographic' can be left out if the rouines from the library
- * being used are not cryptographic related :-).
- * 4. If you include any Windows specific code (or a derivative thereof) from
- * the apps directory (application code) you must include an acknowledgement:
- * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)"
- *
- * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * The licence and distribution terms for any publically available version or
- * derivative of this code cannot be changed. i.e. this code cannot simply be
- * copied and put under another distribution licence
- * [including the GNU Public Licence.]
- */
-
-#include <stdio.h>
-#include "ssl_locl.h"
-#ifndef OPENSSL_NO_COMP
-# include <openssl/comp.h>
-#endif
-#include <openssl/evp.h>
-#include <openssl/hmac.h>
-#include <openssl/md5.h>
-#include <openssl/rand.h>
-#ifdef KSSL_DEBUG
-# include <openssl/des.h>
-#endif
-
-/*-
- * dtls1_enc encrypts/decrypts the record in |s->wrec| / |s->rrec|, respectively.
- *
- * Returns:
- * 0: (in non-constant time) if the record is publically invalid (i.e. too
- * short etc).
- * 1: if the record's padding is valid / the encryption was successful.
- * -1: if the record's padding/AEAD-authenticator is invalid or, if sending,
- * an internal error occured.
- */
-int dtls1_enc(SSL *s, int send)
-{
- SSL3_RECORD *rec;
- EVP_CIPHER_CTX *ds;
- unsigned long l;
- int bs, i, j, k, mac_size = 0;
- const EVP_CIPHER *enc;
-
- if (send) {
- if (EVP_MD_CTX_md(s->write_hash)) {
- mac_size = EVP_MD_CTX_size(s->write_hash);
- if (mac_size < 0)
- return -1;
- }
- ds = s->enc_write_ctx;
- rec = &(s->s3->wrec);
- if (s->enc_write_ctx == NULL)
- enc = NULL;
- else {
- enc = EVP_CIPHER_CTX_cipher(s->enc_write_ctx);
- if (rec->data != rec->input)
- /* we can't write into the input stream */
- fprintf(stderr, "%s:%d: rec->data != rec->input\n",
- __FILE__, __LINE__);
- else if (EVP_CIPHER_block_size(ds->cipher) > 1) {
- if (RAND_bytes(rec->input, EVP_CIPHER_block_size(ds->cipher))
- <= 0)
- return -1;
- }
- }
- } else {
- if (EVP_MD_CTX_md(s->read_hash)) {
- mac_size = EVP_MD_CTX_size(s->read_hash);
- OPENSSL_assert(mac_size >= 0);
- }
- ds = s->enc_read_ctx;
- rec = &(s->s3->rrec);
- if (s->enc_read_ctx == NULL)
- enc = NULL;
- else
- enc = EVP_CIPHER_CTX_cipher(s->enc_read_ctx);
- }
-
-#ifdef KSSL_DEBUG
- printf("dtls1_enc(%d)\n", send);
-#endif /* KSSL_DEBUG */
-
- if ((s->session == NULL) || (ds == NULL) || (enc == NULL)) {
- memmove(rec->data, rec->input, rec->length);
- rec->input = rec->data;
- } else {
- l = rec->length;
- bs = EVP_CIPHER_block_size(ds->cipher);
-
- if ((bs != 1) && send) {
- i = bs - ((int)l % bs);
-
- /* Add weird padding of upto 256 bytes */
-
- /* we need to add 'i' padding bytes of value j */
- j = i - 1;
- if (s->options & SSL_OP_TLS_BLOCK_PADDING_BUG) {
- if (s->s3->flags & TLS1_FLAGS_TLS_PADDING_BUG)
- j++;
- }
- for (k = (int)l; k < (int)(l + i); k++)
- rec->input[k] = j;
- l += i;
- rec->length += i;
- }
-#ifdef KSSL_DEBUG
- {
- unsigned long ui;
- printf("EVP_Cipher(ds=%p,rec->data=%p,rec->input=%p,l=%ld) ==>\n",
- ds, rec->data, rec->input, l);
- printf
- ("\tEVP_CIPHER_CTX: %d buf_len, %d key_len [%d %d], %d iv_len\n",
- ds->buf_len, ds->cipher->key_len, DES_KEY_SZ,
- DES_SCHEDULE_SZ, ds->cipher->iv_len);
- printf("\t\tIV: ");
- for (i = 0; i < ds->cipher->iv_len; i++)
- printf("%02X", ds->iv[i]);
- printf("\n");
- printf("\trec->input=");
- for (ui = 0; ui < l; ui++)
- printf(" %02x", rec->input[ui]);
- printf("\n");
- }
-#endif /* KSSL_DEBUG */
-
- if (!send) {
- if (l == 0 || l % bs != 0)
- return 0;
- }
-
- if (EVP_Cipher(ds, rec->data, rec->input, l) < 1)
- return -1;
-
-#ifdef KSSL_DEBUG
- {
- unsigned long i;
- printf("\trec->data=");
- for (i = 0; i < l; i++)
- printf(" %02x", rec->data[i]);
- printf("\n");
- }
-#endif /* KSSL_DEBUG */
-
- if ((bs != 1) && !send)
- return tls1_cbc_remove_padding(s, rec, bs, mac_size);
- }
- return (1);
-}
diff --git a/crypto/openssl/ssl/d1_lib.c b/crypto/openssl/ssl/d1_lib.c
index 011d7b7..ee78921 100644
--- a/crypto/openssl/ssl/d1_lib.c
+++ b/crypto/openssl/ssl/d1_lib.c
@@ -62,16 +62,18 @@
#include <openssl/objects.h>
#include "ssl_locl.h"
-#if defined(OPENSSL_SYS_WIN32) || defined(OPENSSL_SYS_VMS)
+#if defined(OPENSSL_SYS_VMS)
# include <sys/timeb.h>
#endif
static void get_current_time(struct timeval *t);
+static void dtls1_set_handshake_header(SSL *s, int type, unsigned long len);
+static int dtls1_handshake_write(SSL *s);
const char dtls1_version_str[] = "DTLSv1" OPENSSL_VERSION_PTEXT;
int dtls1_listen(SSL *s, struct sockaddr *client);
SSL3_ENC_METHOD DTLSv1_enc_data = {
- dtls1_enc,
+ tls1_enc,
tls1_mac,
tls1_setup_key_block,
tls1_generate_master_secret,
@@ -83,6 +85,30 @@ SSL3_ENC_METHOD DTLSv1_enc_data = {
TLS_MD_SERVER_FINISH_CONST, TLS_MD_SERVER_FINISH_CONST_SIZE,
tls1_alert_code,
tls1_export_keying_material,
+ SSL_ENC_FLAG_DTLS | SSL_ENC_FLAG_EXPLICIT_IV,
+ DTLS1_HM_HEADER_LENGTH,
+ dtls1_set_handshake_header,
+ dtls1_handshake_write
+};
+
+SSL3_ENC_METHOD DTLSv1_2_enc_data = {
+ tls1_enc,
+ tls1_mac,
+ tls1_setup_key_block,
+ tls1_generate_master_secret,
+ tls1_change_cipher_state,
+ tls1_final_finish_mac,
+ TLS1_FINISH_MAC_LENGTH,
+ tls1_cert_verify_mac,
+ TLS_MD_CLIENT_FINISH_CONST, TLS_MD_CLIENT_FINISH_CONST_SIZE,
+ TLS_MD_SERVER_FINISH_CONST, TLS_MD_SERVER_FINISH_CONST_SIZE,
+ tls1_alert_code,
+ tls1_export_keying_material,
+ SSL_ENC_FLAG_DTLS | SSL_ENC_FLAG_EXPLICIT_IV | SSL_ENC_FLAG_SIGALGS
+ | SSL_ENC_FLAG_SHA256_PRF | SSL_ENC_FLAG_TLS1_2_CIPHERS,
+ DTLS1_HM_HEADER_LENGTH,
+ dtls1_set_handshake_header,
+ dtls1_handshake_write
};
long dtls1_default_timeout(void)
@@ -244,9 +270,11 @@ void dtls1_clear(SSL *s)
ssl3_clear(s);
if (s->options & SSL_OP_CISCO_ANYCONNECT)
- s->version = DTLS1_BAD_VER;
+ s->client_version = s->version = DTLS1_BAD_VER;
+ else if (s->method->version == DTLS_ANY_VERSION)
+ s->version = DTLS1_2_VERSION;
else
- s->version = DTLS1_VERSION;
+ s->version = s->method->version;
}
long dtls1_ctrl(SSL *s, int cmd, long larg, void *parg)
@@ -271,14 +299,22 @@ long dtls1_ctrl(SSL *s, int cmd, long larg, void *parg)
* highest enabled version (according to s->ctx->method, as version
* negotiation may have changed s->method).
*/
-#if DTLS_MAX_VERSION != DTLS1_VERSION
-# error Code needs update for DTLS_method() support beyond DTLS1_VERSION.
-#endif
+ if (s->version == s->ctx->method->version)
+ return 1;
/*
- * Just one protocol version is supported so far; fail closed if the
- * version is not as expected.
+ * Apparently we're using a version-flexible SSL_METHOD (not at its
+ * highest protocol version).
*/
- return s->version == DTLS_MAX_VERSION;
+ if (s->ctx->method->version == DTLS_method()->version) {
+#if DTLS_MAX_VERSION != DTLS1_2_VERSION
+# error Code needs update for DTLS_method() support beyond DTLS1_2_VERSION.
+#endif
+ if (!(s->options & SSL_OP_NO_DTLSv1_2))
+ return s->version == DTLS1_2_VERSION;
+ if (!(s->options & SSL_OP_NO_DTLSv1))
+ return s->version == DTLS1_VERSION;
+ }
+ return 0; /* Unexpected state; fail closed. */
case DTLS_CTRL_SET_LINK_MTU:
if (larg < (long)dtls1_link_min_mtu())
return 0;
@@ -477,11 +513,22 @@ int dtls1_handle_timeout(SSL *s)
static void get_current_time(struct timeval *t)
{
-#ifdef OPENSSL_SYS_WIN32
- struct _timeb tb;
- _ftime(&tb);
- t->tv_sec = (long)tb.time;
- t->tv_usec = (long)tb.millitm * 1000;
+#if defined(_WIN32)
+ SYSTEMTIME st;
+ union {
+ unsigned __int64 ul;
+ FILETIME ft;
+ } now;
+
+ GetSystemTime(&st);
+ SystemTimeToFileTime(&st, &now.ft);
+# ifdef __MINGW32__
+ now.ul -= 116444736000000000ULL;
+# else
+ now.ul -= 116444736000000000UI64; /* re-bias to 1/1/1970 */
+# endif
+ t->tv_sec = (long)(now.ul / 10000000);
+ t->tv_usec = ((int)(now.ul % 10000000)) / 10;
#elif defined(OPENSSL_SYS_VMS)
struct timeb tb;
ftime(&tb);
@@ -509,3 +556,18 @@ int dtls1_listen(SSL *s, struct sockaddr *client)
(void)BIO_dgram_get_peer(SSL_get_rbio(s), client);
return 1;
}
+
+static void dtls1_set_handshake_header(SSL *s, int htype, unsigned long len)
+{
+ unsigned char *p = (unsigned char *)s->init_buf->data;
+ dtls1_set_message_header(s, p, htype, len, 0, len);
+ s->init_num = (int)len + DTLS1_HM_HEADER_LENGTH;
+ s->init_off = 0;
+ /* Buffer the message to handle re-xmits */
+ dtls1_buffer_message(s, 0);
+}
+
+static int dtls1_handshake_write(SSL *s)
+{
+ return dtls1_do_write(s, SSL3_RT_HANDSHAKE);
+}
diff --git a/crypto/openssl/ssl/d1_meth.c b/crypto/openssl/ssl/d1_meth.c
index aaa718c..7340774 100644
--- a/crypto/openssl/ssl/d1_meth.c
+++ b/crypto/openssl/ssl/d1_meth.c
@@ -66,9 +66,23 @@ static const SSL_METHOD *dtls1_get_method(int ver)
{
if (ver == DTLS1_VERSION)
return (DTLSv1_method());
+ else if (ver == DTLS1_2_VERSION)
+ return (DTLSv1_2_method());
else
return (NULL);
}
-IMPLEMENT_dtls1_meth_func(DTLSv1_method,
- dtls1_accept, dtls1_connect, dtls1_get_method)
+IMPLEMENT_dtls1_meth_func(DTLS1_VERSION,
+ DTLSv1_method,
+ dtls1_accept,
+ dtls1_connect, dtls1_get_method, DTLSv1_enc_data)
+
+ IMPLEMENT_dtls1_meth_func(DTLS1_2_VERSION,
+ DTLSv1_2_method,
+ dtls1_accept,
+ dtls1_connect, dtls1_get_method, DTLSv1_2_enc_data)
+
+ IMPLEMENT_dtls1_meth_func(DTLS_ANY_VERSION,
+ DTLS_method,
+ dtls1_accept,
+ dtls1_connect, dtls1_get_method, DTLSv1_2_enc_data)
diff --git a/crypto/openssl/ssl/d1_pkt.c b/crypto/openssl/ssl/d1_pkt.c
index d659ed4..fe30ec7 100644
--- a/crypto/openssl/ssl/d1_pkt.c
+++ b/crypto/openssl/ssl/d1_pkt.c
@@ -612,6 +612,10 @@ int dtls1_get_record(SSL *s)
p = s->packet;
+ if (s->msg_callback)
+ s->msg_callback(0, 0, SSL3_RT_HEADER, p, DTLS1_RT_HEADER_LENGTH,
+ s, s->msg_callback_arg);
+
/* Pull apart the header into the DTLS1_RECORD */
rr->type = *(p++);
ssl_major = *(p++);
@@ -1488,10 +1492,10 @@ int do_dtls1_write(SSL *s, int type, const unsigned char *buf,
unsigned char *p, *pseq;
int i, mac_size, clear = 0;
int prefix_len = 0;
+ int eivlen;
SSL3_RECORD *wr;
SSL3_BUFFER *wb;
SSL_SESSION *sess;
- int bs;
/*
* first check if there is a SSL3_BUFFER still being written out. This
@@ -1570,27 +1574,41 @@ int do_dtls1_write(SSL *s, int type, const unsigned char *buf,
*(p++) = type & 0xff;
wr->type = type;
-
- *(p++) = (s->version >> 8);
- *(p++) = s->version & 0xff;
+ /*
+ * Special case: for hello verify request, client version 1.0 and we
+ * haven't decided which version to use yet send back using version 1.0
+ * header: otherwise some clients will ignore it.
+ */
+ if (s->method->version == DTLS_ANY_VERSION) {
+ *(p++) = DTLS1_VERSION >> 8;
+ *(p++) = DTLS1_VERSION & 0xff;
+ } else {
+ *(p++) = s->version >> 8;
+ *(p++) = s->version & 0xff;
+ }
/* field where we are to write out packet epoch, seq num and len */
pseq = p;
p += 10;
- /* lets setup the record stuff. */
-
- /*
- * Make space for the explicit IV in case of CBC. (this is a bit of a
- * boundary violation, but what the heck).
- */
- if (s->enc_write_ctx &&
- (EVP_CIPHER_mode(s->enc_write_ctx->cipher) & EVP_CIPH_CBC_MODE))
- bs = EVP_CIPHER_block_size(s->enc_write_ctx->cipher);
- else
- bs = 0;
+ /* Explicit IV length, block ciphers appropriate version flag */
+ if (s->enc_write_ctx) {
+ int mode = EVP_CIPHER_CTX_mode(s->enc_write_ctx);
+ if (mode == EVP_CIPH_CBC_MODE) {
+ eivlen = EVP_CIPHER_CTX_iv_length(s->enc_write_ctx);
+ if (eivlen <= 1)
+ eivlen = 0;
+ }
+ /* Need explicit part of IV for GCM mode */
+ else if (mode == EVP_CIPH_GCM_MODE)
+ eivlen = EVP_GCM_TLS_EXPLICIT_IV_LEN;
+ else
+ eivlen = 0;
+ } else
+ eivlen = 0;
- wr->data = p + bs; /* make room for IV in case of CBC */
+ /* lets setup the record stuff. */
+ wr->data = p + eivlen; /* make room for IV in case of CBC */
wr->length = (int)len;
wr->input = (unsigned char *)buf;
@@ -1616,7 +1634,7 @@ int do_dtls1_write(SSL *s, int type, const unsigned char *buf,
*/
if (mac_size != 0) {
- if (s->method->ssl3_enc->mac(s, &(p[wr->length + bs]), 1) < 0)
+ if (s->method->ssl3_enc->mac(s, &(p[wr->length + eivlen]), 1) < 0)
goto err;
wr->length += mac_size;
}
@@ -1625,14 +1643,8 @@ int do_dtls1_write(SSL *s, int type, const unsigned char *buf,
wr->input = p;
wr->data = p;
- /* ssl3_enc can only have an error on read */
- if (bs) { /* bs != 0 in case of CBC */
- RAND_pseudo_bytes(p, bs);
- /*
- * master IV and last CBC residue stand for the rest of randomness
- */
- wr->length += bs;
- }
+ if (eivlen)
+ wr->length += eivlen;
if (s->method->ssl3_enc->enc(s, 1) < 1)
goto err;
@@ -1656,6 +1668,10 @@ int do_dtls1_write(SSL *s, int type, const unsigned char *buf,
pseq += 6;
s2n(wr->length, pseq);
+ if (s->msg_callback)
+ s->msg_callback(1, 0, SSL3_RT_HEADER, pseq - DTLS1_RT_HEADER_LENGTH,
+ DTLS1_RT_HEADER_LENGTH, s, s->msg_callback_arg);
+
/*
* we should now have wr->data pointing to the encrypted data, which is
* wr->length long
diff --git a/crypto/openssl/ssl/d1_srtp.c b/crypto/openssl/ssl/d1_srtp.c
index 6c6e07c..64d0634 100644
--- a/crypto/openssl/ssl/d1_srtp.c
+++ b/crypto/openssl/ssl/d1_srtp.c
@@ -117,11 +117,10 @@
#include <stdio.h>
#include <openssl/objects.h>
#include "ssl_locl.h"
+#include "srtp.h"
#ifndef OPENSSL_NO_SRTP
-# include "srtp.h"
-
static SRTP_PROTECTION_PROFILE srtp_known_profiles[] = {
{
"SRTP_AES128_CM_SHA1_80",
diff --git a/crypto/openssl/ssl/d1_srvr.c b/crypto/openssl/ssl/d1_srvr.c
index 41c7dc5..655333a 100644
--- a/crypto/openssl/ssl/d1_srvr.c
+++ b/crypto/openssl/ssl/d1_srvr.c
@@ -133,13 +133,29 @@ static const SSL_METHOD *dtls1_get_server_method(int ver)
{
if (ver == DTLS1_VERSION)
return (DTLSv1_server_method());
+ else if (ver == DTLS1_2_VERSION)
+ return (DTLSv1_2_server_method());
else
return (NULL);
}
-IMPLEMENT_dtls1_meth_func(DTLSv1_server_method,
+IMPLEMENT_dtls1_meth_func(DTLS1_VERSION,
+ DTLSv1_server_method,
dtls1_accept,
- ssl_undefined_function, dtls1_get_server_method)
+ ssl_undefined_function,
+ dtls1_get_server_method, DTLSv1_enc_data)
+
+ IMPLEMENT_dtls1_meth_func(DTLS1_2_VERSION,
+ DTLSv1_2_server_method,
+ dtls1_accept,
+ ssl_undefined_function,
+ dtls1_get_server_method, DTLSv1_2_enc_data)
+
+ IMPLEMENT_dtls1_meth_func(DTLS_ANY_VERSION,
+ DTLS_server_method,
+ dtls1_accept,
+ ssl_undefined_function,
+ dtls1_get_server_method, DTLSv1_2_enc_data)
int dtls1_accept(SSL *s)
{
@@ -284,7 +300,7 @@ int dtls1_accept(SSL *s)
s->shutdown = 0;
dtls1_clear_record_buffer(s);
dtls1_start_timer(s);
- ret = dtls1_send_hello_request(s);
+ ret = ssl3_send_hello_request(s);
if (ret <= 0)
goto end;
s->s3->tmp.next_state = SSL3_ST_SR_CLNT_HELLO_A;
@@ -392,7 +408,7 @@ int dtls1_accept(SSL *s)
case SSL3_ST_SW_SRVR_HELLO_B:
s->renegotiate = 2;
dtls1_start_timer(s);
- ret = dtls1_send_server_hello(s);
+ ret = ssl3_send_server_hello(s);
if (ret <= 0)
goto end;
@@ -431,7 +447,7 @@ int dtls1_accept(SSL *s)
if (!(s->s3->tmp.new_cipher->algorithm_auth & SSL_aNULL)
&& !(s->s3->tmp.new_cipher->algorithm_mkey & SSL_kPSK)) {
dtls1_start_timer(s);
- ret = dtls1_send_server_certificate(s);
+ ret = ssl3_send_server_certificate(s);
if (ret <= 0)
goto end;
#ifndef OPENSSL_NO_TLSEXT
@@ -474,7 +490,7 @@ int dtls1_accept(SSL *s)
#ifndef OPENSSL_NO_PSK
|| ((alg_k & SSL_kPSK) && s->ctx->psk_identity_hint)
#endif
- || (alg_k & SSL_kEDH)
+ || (alg_k & SSL_kDHE)
|| (alg_k & SSL_kEECDH)
|| ((alg_k & SSL_kRSA)
&& (s->cert->pkeys[SSL_PKEY_RSA_ENC].privatekey == NULL
@@ -487,7 +503,7 @@ int dtls1_accept(SSL *s)
)
) {
dtls1_start_timer(s);
- ret = dtls1_send_server_key_exchange(s);
+ ret = ssl3_send_server_key_exchange(s);
if (ret <= 0)
goto end;
} else
@@ -541,7 +557,7 @@ int dtls1_accept(SSL *s)
} else {
s->s3->tmp.cert_request = 1;
dtls1_start_timer(s);
- ret = dtls1_send_certificate_request(s);
+ ret = ssl3_send_certificate_request(s);
if (ret <= 0)
goto end;
#ifndef NETSCAPE_HANG_BUG
@@ -569,7 +585,7 @@ int dtls1_accept(SSL *s)
case SSL3_ST_SW_SRVR_DONE_A:
case SSL3_ST_SW_SRVR_DONE_B:
dtls1_start_timer(s);
- ret = dtls1_send_server_done(s);
+ ret = ssl3_send_server_done(s);
if (ret <= 0)
goto end;
s->s3->tmp.next_state = SSL3_ST_SR_CERT_A;
@@ -597,22 +613,13 @@ int dtls1_accept(SSL *s)
case SSL3_ST_SR_CERT_A:
case SSL3_ST_SR_CERT_B:
- /* Check for second client hello (MS SGC) */
- ret = ssl3_check_client_hello(s);
- if (ret <= 0)
- goto end;
- if (ret == 2) {
- dtls1_stop_timer(s);
- s->state = SSL3_ST_SR_CLNT_HELLO_C;
- } else {
- if (s->s3->tmp.cert_request) {
- ret = ssl3_get_client_certificate(s);
- if (ret <= 0)
- goto end;
- }
- s->init_num = 0;
- s->state = SSL3_ST_SR_KEY_EXCH_A;
+ if (s->s3->tmp.cert_request) {
+ ret = ssl3_get_client_certificate(s);
+ if (ret <= 0)
+ goto end;
}
+ s->init_num = 0;
+ s->state = SSL3_ST_SR_KEY_EXCH_A;
break;
case SSL3_ST_SR_KEY_EXCH_A:
@@ -647,6 +654,25 @@ int dtls1_accept(SSL *s)
*/
s->state = SSL3_ST_SR_FINISHED_A;
s->init_num = 0;
+ } else if (SSL_USE_SIGALGS(s)) {
+ s->state = SSL3_ST_SR_CERT_VRFY_A;
+ s->init_num = 0;
+ if (!s->session->peer)
+ break;
+ /*
+ * For sigalgs freeze the handshake buffer at this point and
+ * digest cached records.
+ */
+ if (!s->s3->handshake_buffer) {
+ SSLerr(SSL_F_DTLS1_ACCEPT, ERR_R_INTERNAL_ERROR);
+ s->state = SSL_ST_ERR;
+ return -1;
+ }
+ s->s3->flags |= TLS1_FLAGS_KEEP_HANDSHAKE;
+ if (!ssl3_digest_cached_records(s)) {
+ s->state = SSL_ST_ERR;
+ return -1;
+ }
} else {
s->state = SSL3_ST_SR_CERT_VRFY_A;
s->init_num = 0;
@@ -714,7 +740,7 @@ int dtls1_accept(SSL *s)
#ifndef OPENSSL_NO_TLSEXT
case SSL3_ST_SW_SESSION_TICKET_A:
case SSL3_ST_SW_SESSION_TICKET_B:
- ret = dtls1_send_newsession_ticket(s);
+ ret = ssl3_send_newsession_ticket(s);
if (ret <= 0)
goto end;
s->state = SSL3_ST_SW_CHANGE_A;
@@ -776,13 +802,13 @@ int dtls1_accept(SSL *s)
case SSL3_ST_SW_FINISHED_A:
case SSL3_ST_SW_FINISHED_B:
- ret = dtls1_send_finished(s,
- SSL3_ST_SW_FINISHED_A,
- SSL3_ST_SW_FINISHED_B,
- s->method->
- ssl3_enc->server_finished_label,
- s->method->
- ssl3_enc->server_finished_label_len);
+ ret = ssl3_send_finished(s,
+ SSL3_ST_SW_FINISHED_A,
+ SSL3_ST_SW_FINISHED_B,
+ s->method->
+ ssl3_enc->server_finished_label,
+ s->method->
+ ssl3_enc->server_finished_label_len);
if (ret <= 0)
goto end;
s->state = SSL3_ST_SW_FLUSH;
@@ -889,29 +915,6 @@ int dtls1_accept(SSL *s)
return (ret);
}
-int dtls1_send_hello_request(SSL *s)
-{
- unsigned char *p;
-
- if (s->state == SSL3_ST_SW_HELLO_REQ_A) {
- p = (unsigned char *)s->init_buf->data;
- p = dtls1_set_message_header(s, p, SSL3_MT_HELLO_REQUEST, 0, 0, 0);
-
- s->state = SSL3_ST_SW_HELLO_REQ_B;
- /* number of bytes to write */
- s->init_num = DTLS1_HM_HEADER_LENGTH;
- s->init_off = 0;
-
- /*
- * no need to buffer this message, since there are no retransmit
- * requests for it
- */
- }
-
- /* SSL3_ST_SW_HELLO_REQ_B */
- return (dtls1_do_write(s, SSL3_RT_HANDSHAKE));
-}
-
int dtls1_send_hello_verify_request(SSL *s)
{
unsigned int msg_len;
@@ -921,8 +924,9 @@ int dtls1_send_hello_verify_request(SSL *s)
buf = (unsigned char *)s->init_buf->data;
msg = p = &(buf[DTLS1_HM_HEADER_LENGTH]);
- *(p++) = s->version >> 8;
- *(p++) = s->version & 0xFF;
+ /* Always use DTLS 1.0 version: see RFC 6347 */
+ *(p++) = DTLS1_VERSION >> 8;
+ *(p++) = DTLS1_VERSION & 0xFF;
if (s->ctx->app_gen_cookie_cb == NULL ||
s->ctx->app_gen_cookie_cb(s, s->d1->cookie,
@@ -951,788 +955,3 @@ int dtls1_send_hello_verify_request(SSL *s)
/* s->state = DTLS1_ST_SW_HELLO_VERIFY_REQUEST_B */
return (dtls1_do_write(s, SSL3_RT_HANDSHAKE));
}
-
-int dtls1_send_server_hello(SSL *s)
-{
- unsigned char *buf;
- unsigned char *p, *d;
- int i;
- unsigned int sl;
- unsigned long l;
-
- if (s->state == SSL3_ST_SW_SRVR_HELLO_A) {
- buf = (unsigned char *)s->init_buf->data;
- p = s->s3->server_random;
- ssl_fill_hello_random(s, 1, p, SSL3_RANDOM_SIZE);
- /* Do the message type and length last */
- d = p = &(buf[DTLS1_HM_HEADER_LENGTH]);
-
- *(p++) = s->version >> 8;
- *(p++) = s->version & 0xff;
-
- /* Random stuff */
- memcpy(p, s->s3->server_random, SSL3_RANDOM_SIZE);
- p += SSL3_RANDOM_SIZE;
-
- /*
- * now in theory we have 3 options to sending back the session id.
- * If it is a re-use, we send back the old session-id, if it is a new
- * session, we send back the new session-id or we send back a 0
- * length session-id if we want it to be single use. Currently I will
- * not implement the '0' length session-id 12-Jan-98 - I'll now
- * support the '0' length stuff.
- */
- if (!(s->ctx->session_cache_mode & SSL_SESS_CACHE_SERVER))
- s->session->session_id_length = 0;
-
- sl = s->session->session_id_length;
- if (sl > sizeof s->session->session_id) {
- SSLerr(SSL_F_DTLS1_SEND_SERVER_HELLO, ERR_R_INTERNAL_ERROR);
- return -1;
- }
- *(p++) = sl;
- memcpy(p, s->session->session_id, sl);
- p += sl;
-
- /* put the cipher */
- if (s->s3->tmp.new_cipher == NULL)
- return -1;
- i = ssl3_put_cipher_by_char(s->s3->tmp.new_cipher, p);
- p += i;
-
- /* put the compression method */
-#ifdef OPENSSL_NO_COMP
- *(p++) = 0;
-#else
- if (s->s3->tmp.new_compression == NULL)
- *(p++) = 0;
- else
- *(p++) = s->s3->tmp.new_compression->id;
-#endif
-
-#ifndef OPENSSL_NO_TLSEXT
- if (ssl_prepare_serverhello_tlsext(s) <= 0) {
- SSLerr(SSL_F_DTLS1_SEND_SERVER_HELLO, SSL_R_SERVERHELLO_TLSEXT);
- return -1;
- }
- if ((p =
- ssl_add_serverhello_tlsext(s, p,
- buf + SSL3_RT_MAX_PLAIN_LENGTH)) ==
- NULL) {
- SSLerr(SSL_F_DTLS1_SEND_SERVER_HELLO, ERR_R_INTERNAL_ERROR);
- return -1;
- }
-#endif
-
- /* do the header */
- l = (p - d);
- d = buf;
-
- d = dtls1_set_message_header(s, d, SSL3_MT_SERVER_HELLO, l, 0, l);
-
- s->state = SSL3_ST_SW_SRVR_HELLO_B;
- /* number of bytes to write */
- s->init_num = p - buf;
- s->init_off = 0;
-
- /* buffer the message to handle re-xmits */
- dtls1_buffer_message(s, 0);
- }
-
- /* SSL3_ST_SW_SRVR_HELLO_B */
- return (dtls1_do_write(s, SSL3_RT_HANDSHAKE));
-}
-
-int dtls1_send_server_done(SSL *s)
-{
- unsigned char *p;
-
- if (s->state == SSL3_ST_SW_SRVR_DONE_A) {
- p = (unsigned char *)s->init_buf->data;
-
- /* do the header */
- p = dtls1_set_message_header(s, p, SSL3_MT_SERVER_DONE, 0, 0, 0);
-
- s->state = SSL3_ST_SW_SRVR_DONE_B;
- /* number of bytes to write */
- s->init_num = DTLS1_HM_HEADER_LENGTH;
- s->init_off = 0;
-
- /* buffer the message to handle re-xmits */
- dtls1_buffer_message(s, 0);
- }
-
- /* SSL3_ST_SW_SRVR_DONE_B */
- return (dtls1_do_write(s, SSL3_RT_HANDSHAKE));
-}
-
-int dtls1_send_server_key_exchange(SSL *s)
-{
-#ifndef OPENSSL_NO_RSA
- unsigned char *q;
- int j, num;
- RSA *rsa;
- unsigned char md_buf[MD5_DIGEST_LENGTH + SHA_DIGEST_LENGTH];
- unsigned int u;
-#endif
-#ifndef OPENSSL_NO_DH
- DH *dh = NULL, *dhp;
-#endif
-#ifndef OPENSSL_NO_ECDH
- EC_KEY *ecdh = NULL, *ecdhp;
- unsigned char *encodedPoint = NULL;
- int encodedlen = 0;
- int curve_id = 0;
- BN_CTX *bn_ctx = NULL;
-#endif
- EVP_PKEY *pkey;
- unsigned char *p, *d;
- int al, i;
- unsigned long type;
- int n;
- CERT *cert;
- BIGNUM *r[4];
- int nr[4], kn;
- BUF_MEM *buf;
- EVP_MD_CTX md_ctx;
-
- EVP_MD_CTX_init(&md_ctx);
- if (s->state == SSL3_ST_SW_KEY_EXCH_A) {
- type = s->s3->tmp.new_cipher->algorithm_mkey;
- cert = s->cert;
-
- buf = s->init_buf;
-
- r[0] = r[1] = r[2] = r[3] = NULL;
- n = 0;
-#ifndef OPENSSL_NO_RSA
- if (type & SSL_kRSA) {
- rsa = cert->rsa_tmp;
- if ((rsa == NULL) && (s->cert->rsa_tmp_cb != NULL)) {
- rsa = s->cert->rsa_tmp_cb(s,
- SSL_C_IS_EXPORT(s->s3->
- tmp.new_cipher),
- SSL_C_EXPORT_PKEYLENGTH(s->s3->
- tmp.new_cipher));
- if (rsa == NULL) {
- al = SSL_AD_HANDSHAKE_FAILURE;
- SSLerr(SSL_F_DTLS1_SEND_SERVER_KEY_EXCHANGE,
- SSL_R_ERROR_GENERATING_TMP_RSA_KEY);
- goto f_err;
- }
- RSA_up_ref(rsa);
- cert->rsa_tmp = rsa;
- }
- if (rsa == NULL) {
- al = SSL_AD_HANDSHAKE_FAILURE;
- SSLerr(SSL_F_DTLS1_SEND_SERVER_KEY_EXCHANGE,
- SSL_R_MISSING_TMP_RSA_KEY);
- goto f_err;
- }
- r[0] = rsa->n;
- r[1] = rsa->e;
- s->s3->tmp.use_rsa_tmp = 1;
- } else
-#endif
-#ifndef OPENSSL_NO_DH
- if (type & SSL_kEDH) {
- dhp = cert->dh_tmp;
- if ((dhp == NULL) && (s->cert->dh_tmp_cb != NULL))
- dhp = s->cert->dh_tmp_cb(s,
- SSL_C_IS_EXPORT(s->s3->
- tmp.new_cipher),
- SSL_C_EXPORT_PKEYLENGTH(s->s3->
- tmp.new_cipher));
- if (dhp == NULL) {
- al = SSL_AD_HANDSHAKE_FAILURE;
- SSLerr(SSL_F_DTLS1_SEND_SERVER_KEY_EXCHANGE,
- SSL_R_MISSING_TMP_DH_KEY);
- goto f_err;
- }
-
- if (s->s3->tmp.dh != NULL) {
- DH_free(dh);
- SSLerr(SSL_F_DTLS1_SEND_SERVER_KEY_EXCHANGE,
- ERR_R_INTERNAL_ERROR);
- goto err;
- }
-
- if ((dh = DHparams_dup(dhp)) == NULL) {
- SSLerr(SSL_F_DTLS1_SEND_SERVER_KEY_EXCHANGE, ERR_R_DH_LIB);
- goto err;
- }
-
- s->s3->tmp.dh = dh;
- if ((dhp->pub_key == NULL ||
- dhp->priv_key == NULL ||
- (s->options & SSL_OP_SINGLE_DH_USE))) {
- if (!DH_generate_key(dh)) {
- SSLerr(SSL_F_DTLS1_SEND_SERVER_KEY_EXCHANGE,
- ERR_R_DH_LIB);
- goto err;
- }
- } else {
- dh->pub_key = BN_dup(dhp->pub_key);
- dh->priv_key = BN_dup(dhp->priv_key);
- if ((dh->pub_key == NULL) || (dh->priv_key == NULL)) {
- SSLerr(SSL_F_DTLS1_SEND_SERVER_KEY_EXCHANGE,
- ERR_R_DH_LIB);
- goto err;
- }
- }
- r[0] = dh->p;
- r[1] = dh->g;
- r[2] = dh->pub_key;
- } else
-#endif
-#ifndef OPENSSL_NO_ECDH
- if (type & SSL_kEECDH) {
- const EC_GROUP *group;
-
- ecdhp = cert->ecdh_tmp;
- if ((ecdhp == NULL) && (s->cert->ecdh_tmp_cb != NULL)) {
- ecdhp = s->cert->ecdh_tmp_cb(s,
- SSL_C_IS_EXPORT(s->s3->
- tmp.new_cipher),
- SSL_C_EXPORT_PKEYLENGTH(s->
- s3->tmp.new_cipher));
- }
- if (ecdhp == NULL) {
- al = SSL_AD_HANDSHAKE_FAILURE;
- SSLerr(SSL_F_DTLS1_SEND_SERVER_KEY_EXCHANGE,
- SSL_R_MISSING_TMP_ECDH_KEY);
- goto f_err;
- }
-
- if (s->s3->tmp.ecdh != NULL) {
- EC_KEY_free(s->s3->tmp.ecdh);
- SSLerr(SSL_F_DTLS1_SEND_SERVER_KEY_EXCHANGE,
- ERR_R_INTERNAL_ERROR);
- goto err;
- }
-
- /* Duplicate the ECDH structure. */
- if (ecdhp == NULL) {
- SSLerr(SSL_F_DTLS1_SEND_SERVER_KEY_EXCHANGE, ERR_R_ECDH_LIB);
- goto err;
- }
- if ((ecdh = EC_KEY_dup(ecdhp)) == NULL) {
- SSLerr(SSL_F_DTLS1_SEND_SERVER_KEY_EXCHANGE, ERR_R_ECDH_LIB);
- goto err;
- }
-
- s->s3->tmp.ecdh = ecdh;
- if ((EC_KEY_get0_public_key(ecdh) == NULL) ||
- (EC_KEY_get0_private_key(ecdh) == NULL) ||
- (s->options & SSL_OP_SINGLE_ECDH_USE)) {
- if (!EC_KEY_generate_key(ecdh)) {
- SSLerr(SSL_F_DTLS1_SEND_SERVER_KEY_EXCHANGE,
- ERR_R_ECDH_LIB);
- goto err;
- }
- }
-
- if (((group = EC_KEY_get0_group(ecdh)) == NULL) ||
- (EC_KEY_get0_public_key(ecdh) == NULL) ||
- (EC_KEY_get0_private_key(ecdh) == NULL)) {
- SSLerr(SSL_F_DTLS1_SEND_SERVER_KEY_EXCHANGE, ERR_R_ECDH_LIB);
- goto err;
- }
-
- if (SSL_C_IS_EXPORT(s->s3->tmp.new_cipher) &&
- (EC_GROUP_get_degree(group) > 163)) {
- SSLerr(SSL_F_DTLS1_SEND_SERVER_KEY_EXCHANGE,
- SSL_R_ECGROUP_TOO_LARGE_FOR_CIPHER);
- goto err;
- }
-
- /*
- * XXX: For now, we only support ephemeral ECDH keys over named
- * (not generic) curves. For supported named curves, curve_id is
- * non-zero.
- */
- if ((curve_id =
- tls1_ec_nid2curve_id(EC_GROUP_get_curve_name(group)))
- == 0) {
- SSLerr(SSL_F_DTLS1_SEND_SERVER_KEY_EXCHANGE,
- SSL_R_UNSUPPORTED_ELLIPTIC_CURVE);
- goto err;
- }
-
- /*
- * Encode the public key. First check the size of encoding and
- * allocate memory accordingly.
- */
- encodedlen = EC_POINT_point2oct(group,
- EC_KEY_get0_public_key(ecdh),
- POINT_CONVERSION_UNCOMPRESSED,
- NULL, 0, NULL);
-
- encodedPoint = (unsigned char *)
- OPENSSL_malloc(encodedlen * sizeof(unsigned char));
- bn_ctx = BN_CTX_new();
- if ((encodedPoint == NULL) || (bn_ctx == NULL)) {
- SSLerr(SSL_F_DTLS1_SEND_SERVER_KEY_EXCHANGE,
- ERR_R_MALLOC_FAILURE);
- goto err;
- }
-
- encodedlen = EC_POINT_point2oct(group,
- EC_KEY_get0_public_key(ecdh),
- POINT_CONVERSION_UNCOMPRESSED,
- encodedPoint, encodedlen, bn_ctx);
-
- if (encodedlen == 0) {
- SSLerr(SSL_F_DTLS1_SEND_SERVER_KEY_EXCHANGE, ERR_R_ECDH_LIB);
- goto err;
- }
-
- BN_CTX_free(bn_ctx);
- bn_ctx = NULL;
-
- /*
- * XXX: For now, we only support named (not generic) curves in
- * ECDH ephemeral key exchanges. In this situation, we need four
- * additional bytes to encode the entire ServerECDHParams
- * structure.
- */
- n = 4 + encodedlen;
-
- /*
- * We'll generate the serverKeyExchange message explicitly so we
- * can set these to NULLs
- */
- r[0] = NULL;
- r[1] = NULL;
- r[2] = NULL;
- r[3] = NULL;
- } else
-#endif /* !OPENSSL_NO_ECDH */
-#ifndef OPENSSL_NO_PSK
- if (type & SSL_kPSK) {
- /*
- * reserve size for record length and PSK identity hint
- */
- n += 2 + strlen(s->ctx->psk_identity_hint);
- } else
-#endif /* !OPENSSL_NO_PSK */
- {
- al = SSL_AD_HANDSHAKE_FAILURE;
- SSLerr(SSL_F_DTLS1_SEND_SERVER_KEY_EXCHANGE,
- SSL_R_UNKNOWN_KEY_EXCHANGE_TYPE);
- goto f_err;
- }
- for (i = 0; r[i] != NULL; i++) {
- nr[i] = BN_num_bytes(r[i]);
- n += 2 + nr[i];
- }
-
- if (!(s->s3->tmp.new_cipher->algorithm_auth & SSL_aNULL)
- && !(s->s3->tmp.new_cipher->algorithm_mkey & SSL_kPSK)) {
- if ((pkey = ssl_get_sign_pkey(s, s->s3->tmp.new_cipher, NULL))
- == NULL) {
- al = SSL_AD_DECODE_ERROR;
- goto f_err;
- }
- kn = EVP_PKEY_size(pkey);
- } else {
- pkey = NULL;
- kn = 0;
- }
-
- if (!BUF_MEM_grow_clean(buf, n + DTLS1_HM_HEADER_LENGTH + kn)) {
- SSLerr(SSL_F_DTLS1_SEND_SERVER_KEY_EXCHANGE, ERR_LIB_BUF);
- goto err;
- }
- d = (unsigned char *)s->init_buf->data;
- p = &(d[DTLS1_HM_HEADER_LENGTH]);
-
- for (i = 0; r[i] != NULL; i++) {
- s2n(nr[i], p);
- BN_bn2bin(r[i], p);
- p += nr[i];
- }
-
-#ifndef OPENSSL_NO_ECDH
- if (type & SSL_kEECDH) {
- /*
- * XXX: For now, we only support named (not generic) curves. In
- * this situation, the serverKeyExchange message has: [1 byte
- * CurveType], [2 byte CurveName] [1 byte length of encoded
- * point], followed by the actual encoded point itself
- */
- *p = NAMED_CURVE_TYPE;
- p += 1;
- *p = 0;
- p += 1;
- *p = curve_id;
- p += 1;
- *p = encodedlen;
- p += 1;
- memcpy((unsigned char *)p,
- (unsigned char *)encodedPoint, encodedlen);
- OPENSSL_free(encodedPoint);
- encodedPoint = NULL;
- p += encodedlen;
- }
-#endif
-
-#ifndef OPENSSL_NO_PSK
- if (type & SSL_kPSK) {
- /* copy PSK identity hint */
- s2n(strlen(s->ctx->psk_identity_hint), p);
- strncpy((char *)p, s->ctx->psk_identity_hint,
- strlen(s->ctx->psk_identity_hint));
- p += strlen(s->ctx->psk_identity_hint);
- }
-#endif
-
- /* not anonymous */
- if (pkey != NULL) {
- /*
- * n is the length of the params, they start at
- * &(d[DTLS1_HM_HEADER_LENGTH]) and p points to the space at the
- * end.
- */
-#ifndef OPENSSL_NO_RSA
- if (pkey->type == EVP_PKEY_RSA) {
- q = md_buf;
- j = 0;
- for (num = 2; num > 0; num--) {
- EVP_DigestInit_ex(&md_ctx, (num == 2)
- ? s->ctx->md5 : s->ctx->sha1, NULL);
- EVP_DigestUpdate(&md_ctx, &(s->s3->client_random[0]),
- SSL3_RANDOM_SIZE);
- EVP_DigestUpdate(&md_ctx, &(s->s3->server_random[0]),
- SSL3_RANDOM_SIZE);
- EVP_DigestUpdate(&md_ctx, &(d[DTLS1_HM_HEADER_LENGTH]),
- n);
- EVP_DigestFinal_ex(&md_ctx, q, (unsigned int *)&i);
- q += i;
- j += i;
- }
- if (RSA_sign(NID_md5_sha1, md_buf, j,
- &(p[2]), &u, pkey->pkey.rsa) <= 0) {
- SSLerr(SSL_F_DTLS1_SEND_SERVER_KEY_EXCHANGE, ERR_LIB_RSA);
- goto err;
- }
- s2n(u, p);
- n += u + 2;
- } else
-#endif
-#if !defined(OPENSSL_NO_DSA)
- if (pkey->type == EVP_PKEY_DSA) {
- /* lets do DSS */
- EVP_SignInit_ex(&md_ctx, EVP_dss1(), NULL);
- EVP_SignUpdate(&md_ctx, &(s->s3->client_random[0]),
- SSL3_RANDOM_SIZE);
- EVP_SignUpdate(&md_ctx, &(s->s3->server_random[0]),
- SSL3_RANDOM_SIZE);
- EVP_SignUpdate(&md_ctx, &(d[DTLS1_HM_HEADER_LENGTH]), n);
- if (!EVP_SignFinal(&md_ctx, &(p[2]),
- (unsigned int *)&i, pkey)) {
- SSLerr(SSL_F_DTLS1_SEND_SERVER_KEY_EXCHANGE, ERR_LIB_DSA);
- goto err;
- }
- s2n(i, p);
- n += i + 2;
- } else
-#endif
-#if !defined(OPENSSL_NO_ECDSA)
- if (pkey->type == EVP_PKEY_EC) {
- /* let's do ECDSA */
- EVP_SignInit_ex(&md_ctx, EVP_ecdsa(), NULL);
- EVP_SignUpdate(&md_ctx, &(s->s3->client_random[0]),
- SSL3_RANDOM_SIZE);
- EVP_SignUpdate(&md_ctx, &(s->s3->server_random[0]),
- SSL3_RANDOM_SIZE);
- EVP_SignUpdate(&md_ctx, &(d[DTLS1_HM_HEADER_LENGTH]), n);
- if (!EVP_SignFinal(&md_ctx, &(p[2]),
- (unsigned int *)&i, pkey)) {
- SSLerr(SSL_F_DTLS1_SEND_SERVER_KEY_EXCHANGE,
- ERR_LIB_ECDSA);
- goto err;
- }
- s2n(i, p);
- n += i + 2;
- } else
-#endif
- {
- /* Is this error check actually needed? */
- al = SSL_AD_HANDSHAKE_FAILURE;
- SSLerr(SSL_F_DTLS1_SEND_SERVER_KEY_EXCHANGE,
- SSL_R_UNKNOWN_PKEY_TYPE);
- goto f_err;
- }
- }
-
- d = dtls1_set_message_header(s, d,
- SSL3_MT_SERVER_KEY_EXCHANGE, n, 0, n);
-
- /*
- * we should now have things packed up, so lets send it off
- */
- s->init_num = n + DTLS1_HM_HEADER_LENGTH;
- s->init_off = 0;
-
- /* buffer the message to handle re-xmits */
- dtls1_buffer_message(s, 0);
- }
-
- s->state = SSL3_ST_SW_KEY_EXCH_B;
- EVP_MD_CTX_cleanup(&md_ctx);
- return (dtls1_do_write(s, SSL3_RT_HANDSHAKE));
- f_err:
- ssl3_send_alert(s, SSL3_AL_FATAL, al);
- err:
-#ifndef OPENSSL_NO_ECDH
- if (encodedPoint != NULL)
- OPENSSL_free(encodedPoint);
- BN_CTX_free(bn_ctx);
-#endif
- EVP_MD_CTX_cleanup(&md_ctx);
- return (-1);
-}
-
-int dtls1_send_certificate_request(SSL *s)
-{
- unsigned char *p, *d;
- int i, j, nl, off, n;
- STACK_OF(X509_NAME) *sk = NULL;
- X509_NAME *name;
- BUF_MEM *buf;
- unsigned int msg_len;
-
- if (s->state == SSL3_ST_SW_CERT_REQ_A) {
- buf = s->init_buf;
-
- d = p = (unsigned char *)&(buf->data[DTLS1_HM_HEADER_LENGTH]);
-
- /* get the list of acceptable cert types */
- p++;
- n = ssl3_get_req_cert_type(s, p);
- d[0] = n;
- p += n;
- n++;
-
- off = n;
- p += 2;
- n += 2;
-
- sk = SSL_get_client_CA_list(s);
- nl = 0;
- if (sk != NULL) {
- for (i = 0; i < sk_X509_NAME_num(sk); i++) {
- name = sk_X509_NAME_value(sk, i);
- j = i2d_X509_NAME(name, NULL);
- if (!BUF_MEM_grow_clean
- (buf, DTLS1_HM_HEADER_LENGTH + n + j + 2)) {
- SSLerr(SSL_F_DTLS1_SEND_CERTIFICATE_REQUEST,
- ERR_R_BUF_LIB);
- goto err;
- }
- p = (unsigned char *)&(buf->data[DTLS1_HM_HEADER_LENGTH + n]);
- if (!(s->options & SSL_OP_NETSCAPE_CA_DN_BUG)) {
- s2n(j, p);
- i2d_X509_NAME(name, &p);
- n += 2 + j;
- nl += 2 + j;
- } else {
- d = p;
- i2d_X509_NAME(name, &p);
- j -= 2;
- s2n(j, d);
- j += 2;
- n += j;
- nl += j;
- }
- }
- }
- /* else no CA names */
- p = (unsigned char *)&(buf->data[DTLS1_HM_HEADER_LENGTH + off]);
- s2n(nl, p);
-
- d = (unsigned char *)buf->data;
- *(d++) = SSL3_MT_CERTIFICATE_REQUEST;
- l2n3(n, d);
- s2n(s->d1->handshake_write_seq, d);
- s->d1->handshake_write_seq++;
-
- /*
- * we should now have things packed up, so lets send it off
- */
-
- s->init_num = n + DTLS1_HM_HEADER_LENGTH;
- s->init_off = 0;
-#ifdef NETSCAPE_HANG_BUG
-/* XXX: what to do about this? */
- p = (unsigned char *)s->init_buf->data + s->init_num;
-
- /* do the header */
- *(p++) = SSL3_MT_SERVER_DONE;
- *(p++) = 0;
- *(p++) = 0;
- *(p++) = 0;
- s->init_num += 4;
-#endif
-
- /* XDTLS: set message header ? */
- msg_len = s->init_num - DTLS1_HM_HEADER_LENGTH;
- dtls1_set_message_header(s, (void *)s->init_buf->data,
- SSL3_MT_CERTIFICATE_REQUEST, msg_len, 0,
- msg_len);
-
- /* buffer the message to handle re-xmits */
- dtls1_buffer_message(s, 0);
-
- s->state = SSL3_ST_SW_CERT_REQ_B;
- }
-
- /* SSL3_ST_SW_CERT_REQ_B */
- return (dtls1_do_write(s, SSL3_RT_HANDSHAKE));
- err:
- return (-1);
-}
-
-int dtls1_send_server_certificate(SSL *s)
-{
- unsigned long l;
- X509 *x;
-
- if (s->state == SSL3_ST_SW_CERT_A) {
- x = ssl_get_server_send_cert(s);
- if (x == NULL) {
- /* VRS: allow null cert if auth == KRB5 */
- if ((s->s3->tmp.new_cipher->algorithm_mkey != SSL_kKRB5) ||
- (s->s3->tmp.new_cipher->algorithm_auth != SSL_aKRB5)) {
- SSLerr(SSL_F_DTLS1_SEND_SERVER_CERTIFICATE,
- ERR_R_INTERNAL_ERROR);
- return (0);
- }
- }
-
- l = dtls1_output_cert_chain(s, x);
- if (!l) {
- SSLerr(SSL_F_DTLS1_SEND_SERVER_CERTIFICATE, ERR_R_INTERNAL_ERROR);
- return (0);
- }
- s->state = SSL3_ST_SW_CERT_B;
- s->init_num = (int)l;
- s->init_off = 0;
-
- /* buffer the message to handle re-xmits */
- dtls1_buffer_message(s, 0);
- }
-
- /* SSL3_ST_SW_CERT_B */
- return (dtls1_do_write(s, SSL3_RT_HANDSHAKE));
-}
-
-#ifndef OPENSSL_NO_TLSEXT
-int dtls1_send_newsession_ticket(SSL *s)
-{
- if (s->state == SSL3_ST_SW_SESSION_TICKET_A) {
- unsigned char *p, *senc, *macstart;
- int len, slen;
- unsigned int hlen, msg_len;
- EVP_CIPHER_CTX ctx;
- HMAC_CTX hctx;
- SSL_CTX *tctx = s->initial_ctx;
- unsigned char iv[EVP_MAX_IV_LENGTH];
- unsigned char key_name[16];
-
- /* get session encoding length */
- slen = i2d_SSL_SESSION(s->session, NULL);
- /*
- * Some length values are 16 bits, so forget it if session is too
- * long
- */
- if (slen > 0xFF00)
- return -1;
- /*
- * Grow buffer if need be: the length calculation is as follows 12
- * (DTLS handshake message header) + 4 (ticket lifetime hint) + 2
- * (ticket length) + 16 (key name) + max_iv_len (iv length) +
- * session_length + max_enc_block_size (max encrypted session length)
- * + max_md_size (HMAC).
- */
- if (!BUF_MEM_grow(s->init_buf,
- DTLS1_HM_HEADER_LENGTH + 22 + EVP_MAX_IV_LENGTH +
- EVP_MAX_BLOCK_LENGTH + EVP_MAX_MD_SIZE + slen))
- return -1;
- senc = OPENSSL_malloc(slen);
- if (!senc)
- return -1;
- p = senc;
- i2d_SSL_SESSION(s->session, &p);
-
- p = (unsigned char *)&(s->init_buf->data[DTLS1_HM_HEADER_LENGTH]);
- EVP_CIPHER_CTX_init(&ctx);
- HMAC_CTX_init(&hctx);
- /*
- * Initialize HMAC and cipher contexts. If callback present it does
- * all the work otherwise use generated values from parent ctx.
- */
- if (tctx->tlsext_ticket_key_cb) {
- if (tctx->tlsext_ticket_key_cb(s, key_name, iv, &ctx,
- &hctx, 1) < 0) {
- OPENSSL_free(senc);
- return -1;
- }
- } else {
- RAND_pseudo_bytes(iv, 16);
- EVP_EncryptInit_ex(&ctx, EVP_aes_128_cbc(), NULL,
- tctx->tlsext_tick_aes_key, iv);
- HMAC_Init_ex(&hctx, tctx->tlsext_tick_hmac_key, 16,
- tlsext_tick_md(), NULL);
- memcpy(key_name, tctx->tlsext_tick_key_name, 16);
- }
- l2n(s->session->tlsext_tick_lifetime_hint, p);
- /* Skip ticket length for now */
- p += 2;
- /* Output key name */
- macstart = p;
- memcpy(p, key_name, 16);
- p += 16;
- /* output IV */
- memcpy(p, iv, EVP_CIPHER_CTX_iv_length(&ctx));
- p += EVP_CIPHER_CTX_iv_length(&ctx);
- /* Encrypt session data */
- EVP_EncryptUpdate(&ctx, p, &len, senc, slen);
- p += len;
- EVP_EncryptFinal(&ctx, p, &len);
- p += len;
- EVP_CIPHER_CTX_cleanup(&ctx);
-
- HMAC_Update(&hctx, macstart, p - macstart);
- HMAC_Final(&hctx, p, &hlen);
- HMAC_CTX_cleanup(&hctx);
-
- p += hlen;
- /* Now write out lengths: p points to end of data written */
- /* Total length */
- len = p - (unsigned char *)(s->init_buf->data);
- /* Ticket length */
- p = (unsigned char *)&(s->init_buf->data[DTLS1_HM_HEADER_LENGTH]) + 4;
- s2n(len - DTLS1_HM_HEADER_LENGTH - 6, p);
-
- /* number of bytes to write */
- s->init_num = len;
- s->state = SSL3_ST_SW_SESSION_TICKET_B;
- s->init_off = 0;
- OPENSSL_free(senc);
-
- /* XDTLS: set message header ? */
- msg_len = s->init_num - DTLS1_HM_HEADER_LENGTH;
- dtls1_set_message_header(s, (void *)s->init_buf->data,
- SSL3_MT_NEWSESSION_TICKET, msg_len, 0,
- msg_len);
-
- /* buffer the message to handle re-xmits */
- dtls1_buffer_message(s, 0);
- }
-
- /* SSL3_ST_SW_SESSION_TICKET_B */
- return (dtls1_do_write(s, SSL3_RT_HANDSHAKE));
-}
-#endif
diff --git a/crypto/openssl/ssl/dtls1.h b/crypto/openssl/ssl/dtls1.h
index 8deb299..30bbcf2 100644
--- a/crypto/openssl/ssl/dtls1.h
+++ b/crypto/openssl/ssl/dtls1.h
@@ -84,11 +84,15 @@ extern "C" {
#endif
# define DTLS1_VERSION 0xFEFF
-# define DTLS_MAX_VERSION DTLS1_VERSION
+# define DTLS1_2_VERSION 0xFEFD
+# define DTLS_MAX_VERSION DTLS1_2_VERSION
# define DTLS1_VERSION_MAJOR 0xFE
# define DTLS1_BAD_VER 0x0100
+/* Special value for method supporting multiple versions */
+# define DTLS_ANY_VERSION 0x1FFFF
+
# if 0
/* this alert description is not specified anywhere... */
# define DTLS1_AD_MISSING_HANDSHAKE_MESSAGE 110
diff --git a/crypto/openssl/ssl/heartbeat_test.c b/crypto/openssl/ssl/heartbeat_test.c
index 3cec8b1..7623c36 100644
--- a/crypto/openssl/ssl/heartbeat_test.c
+++ b/crypto/openssl/ssl/heartbeat_test.c
@@ -272,8 +272,8 @@ static int test_dtls1_not_bleeding()
{
SETUP_HEARTBEAT_TEST_FIXTURE(dtls);
/* Three-byte pad at the beginning for type and payload length */
- unsigned char payload_buf[] = " Not bleeding, sixteen spaces of padding"
- " ";
+ unsigned char payload_buf[MAX_PRINTABLE_CHARACTERS + 4] =
+ " Not bleeding, sixteen spaces of padding" " ";
const int payload_buf_len = honest_payload_size(payload_buf);
fixture.payload = &payload_buf[0];
@@ -294,9 +294,9 @@ static int test_dtls1_not_bleeding_empty_payload()
* Three-byte pad at the beginning for type and payload length, plus a
* NUL at the end
*/
- unsigned char payload_buf[4 + MIN_PADDING_SIZE];
- memset(payload_buf, ' ', sizeof(payload_buf));
- payload_buf[sizeof(payload_buf) - 1] = '\0';
+ unsigned char payload_buf[4 + MAX_PRINTABLE_CHARACTERS];
+ memset(payload_buf, ' ', MIN_PADDING_SIZE + 3);
+ payload_buf[MIN_PADDING_SIZE + 3] = '\0';
payload_buf_len = honest_payload_size(payload_buf);
fixture.payload = &payload_buf[0];
@@ -311,7 +311,8 @@ static int test_dtls1_heartbleed()
{
SETUP_HEARTBEAT_TEST_FIXTURE(dtls);
/* Three-byte pad at the beginning for type and payload length */
- unsigned char payload_buf[] = " HEARTBLEED ";
+ unsigned char payload_buf[4 + MAX_PRINTABLE_CHARACTERS] =
+ " HEARTBLEED ";
fixture.payload = &payload_buf[0];
fixture.sent_payload_len = MAX_PRINTABLE_CHARACTERS;
@@ -328,9 +329,9 @@ static int test_dtls1_heartbleed_empty_payload()
* Excluding the NUL at the end, one byte short of type + payload length
* + minimum padding
*/
- unsigned char payload_buf[MIN_PADDING_SIZE + 3];
- memset(payload_buf, ' ', sizeof(payload_buf));
- payload_buf[sizeof(payload_buf) - 1] = '\0';
+ unsigned char payload_buf[MAX_PRINTABLE_CHARACTERS + 4];
+ memset(payload_buf, ' ', MIN_PADDING_SIZE + 2);
+ payload_buf[MIN_PADDING_SIZE + 2] = '\0';
fixture.payload = &payload_buf[0];
fixture.sent_payload_len = MAX_PRINTABLE_CHARACTERS;
@@ -363,8 +364,8 @@ static int test_tls1_not_bleeding()
{
SETUP_HEARTBEAT_TEST_FIXTURE(tls);
/* Three-byte pad at the beginning for type and payload length */
- unsigned char payload_buf[] = " Not bleeding, sixteen spaces of padding"
- " ";
+ unsigned char payload_buf[MAX_PRINTABLE_CHARACTERS + 4] =
+ " Not bleeding, sixteen spaces of padding" " ";
const int payload_buf_len = honest_payload_size(payload_buf);
fixture.payload = &payload_buf[0];
@@ -385,9 +386,9 @@ static int test_tls1_not_bleeding_empty_payload()
* Three-byte pad at the beginning for type and payload length, plus a
* NUL at the end
*/
- unsigned char payload_buf[4 + MIN_PADDING_SIZE];
- memset(payload_buf, ' ', sizeof(payload_buf));
- payload_buf[sizeof(payload_buf) - 1] = '\0';
+ unsigned char payload_buf[4 + MAX_PRINTABLE_CHARACTERS];
+ memset(payload_buf, ' ', MIN_PADDING_SIZE + 3);
+ payload_buf[MIN_PADDING_SIZE + 3] = '\0';
payload_buf_len = honest_payload_size(payload_buf);
fixture.payload = &payload_buf[0];
@@ -402,7 +403,8 @@ static int test_tls1_heartbleed()
{
SETUP_HEARTBEAT_TEST_FIXTURE(tls);
/* Three-byte pad at the beginning for type and payload length */
- unsigned char payload_buf[] = " HEARTBLEED ";
+ unsigned char payload_buf[MAX_PRINTABLE_CHARACTERS + 4] =
+ " HEARTBLEED ";
fixture.payload = &payload_buf[0];
fixture.sent_payload_len = MAX_PRINTABLE_CHARACTERS;
@@ -419,9 +421,9 @@ static int test_tls1_heartbleed_empty_payload()
* Excluding the NUL at the end, one byte short of type + payload length
* + minimum padding
*/
- unsigned char payload_buf[MIN_PADDING_SIZE + 3];
- memset(payload_buf, ' ', sizeof(payload_buf));
- payload_buf[sizeof(payload_buf) - 1] = '\0';
+ unsigned char payload_buf[MAX_PRINTABLE_CHARACTERS + 4];
+ memset(payload_buf, ' ', MIN_PADDING_SIZE + 2);
+ payload_buf[MIN_PADDING_SIZE + 2] = '\0';
fixture.payload = &payload_buf[0];
fixture.sent_payload_len = MAX_PRINTABLE_CHARACTERS;
diff --git a/crypto/openssl/ssl/s23_clnt.c b/crypto/openssl/ssl/s23_clnt.c
index 3766567..e4e707c 100644
--- a/crypto/openssl/ssl/s23_clnt.c
+++ b/crypto/openssl/ssl/s23_clnt.c
@@ -279,7 +279,6 @@ static int ssl23_no_ssl2_ciphers(SSL *s)
int ssl_fill_hello_random(SSL *s, int server, unsigned char *result, int len)
{
int send_time = 0;
-
if (len < 4)
return 0;
if (server)
@@ -303,6 +302,7 @@ static int ssl23_client_hello(SSL *s)
unsigned long l;
int ssl2_compat;
int version = 0, version_major, version_minor;
+ int al = 0;
#ifndef OPENSSL_NO_COMP
int j;
SSL_COMP *comp;
@@ -368,6 +368,8 @@ static int ssl23_client_hello(SSL *s)
|| s->tlsext_opaque_prf_input != NULL)
ssl2_compat = 0;
# endif
+ if (s->cert->cli_ext.meths_count != 0)
+ ssl2_compat = 0;
}
#endif
@@ -387,6 +389,10 @@ static int ssl23_client_hello(SSL *s)
if (version == TLS1_2_VERSION) {
version_major = TLS1_2_VERSION_MAJOR;
version_minor = TLS1_2_VERSION_MINOR;
+ } else if (tls1_suiteb(s)) {
+ SSLerr(SSL_F_SSL23_CLIENT_HELLO,
+ SSL_R_ONLY_TLS_1_2_ALLOWED_IN_SUITEB_MODE);
+ return -1;
} else if (version == TLS1_1_VERSION) {
version_major = TLS1_1_VERSION_MAJOR;
version_minor = TLS1_1_VERSION_MINOR;
@@ -542,9 +548,9 @@ static int ssl23_client_hello(SSL *s)
}
if ((p =
ssl_add_clienthello_tlsext(s, p,
- buf +
- SSL3_RT_MAX_PLAIN_LENGTH)) ==
- NULL) {
+ buf + SSL3_RT_MAX_PLAIN_LENGTH,
+ &al)) == NULL) {
+ ssl3_send_alert(s, SSL3_AL_FATAL, al);
SSLerr(SSL_F_SSL23_CLIENT_HELLO, ERR_R_INTERNAL_ERROR);
return -1;
}
@@ -598,10 +604,13 @@ static int ssl23_client_hello(SSL *s)
if (ssl2_compat)
s->msg_callback(1, SSL2_VERSION, 0, s->init_buf->data + 2,
ret - 2, s, s->msg_callback_arg);
- else
+ else {
+ s->msg_callback(1, version, SSL3_RT_HEADER, s->init_buf->data, 5,
+ s, s->msg_callback_arg);
s->msg_callback(1, version, SSL3_RT_HANDSHAKE,
s->init_buf->data + 5, ret - 5, s,
s->msg_callback_arg);
+ }
}
return ret;
@@ -749,9 +758,12 @@ static int ssl23_get_server_hello(SSL *s)
cb(s, SSL_CB_READ_ALERT, j);
}
- if (s->msg_callback)
+ if (s->msg_callback) {
+ s->msg_callback(0, s->version, SSL3_RT_HEADER, p, 5, s,
+ s->msg_callback_arg);
s->msg_callback(0, s->version, SSL3_RT_ALERT, p + 5, 2, s,
s->msg_callback_arg);
+ }
s->rwstate = SSL_NOTHING;
SSLerr(SSL_F_SSL23_GET_SERVER_HELLO, SSL_AD_REASON_OFFSET + p[6]);
diff --git a/crypto/openssl/ssl/s23_srvr.c b/crypto/openssl/ssl/s23_srvr.c
index 50f98dc..470bd3d 100644
--- a/crypto/openssl/ssl/s23_srvr.c
+++ b/crypto/openssl/ssl/s23_srvr.c
@@ -402,6 +402,11 @@ int ssl23_get_client_hello(SSL *s)
/* ensure that TLS_MAX_VERSION is up-to-date */
OPENSSL_assert(s->version <= TLS_MAX_VERSION);
+ if (s->version < TLS1_2_VERSION && tls1_suiteb(s)) {
+ SSLerr(SSL_F_SSL23_GET_CLIENT_HELLO,
+ SSL_R_ONLY_TLS_1_2_ALLOWED_IN_SUITEB_MODE);
+ goto err;
+ }
#ifdef OPENSSL_FIPS
if (FIPS_mode() && (s->version < TLS1_VERSION)) {
SSLerr(SSL_F_SSL23_GET_CLIENT_HELLO,
diff --git a/crypto/openssl/ssl/s2_clnt.c b/crypto/openssl/ssl/s2_clnt.c
index b23b083..69da6b1 100644
--- a/crypto/openssl/ssl/s2_clnt.c
+++ b/crypto/openssl/ssl/s2_clnt.c
@@ -418,19 +418,19 @@ static int get_server_hello(SSL *s)
return (-1);
}
} else {
-# ifdef undef
+# if 0
/* very bad */
memset(s->session->session_id, 0,
SSL_MAX_SSL_SESSION_ID_LENGTH_IN_BYTES);
s->session->session_id_length = 0;
- */
# endif
- /*
- * we need to do this in case we were trying to reuse a client
- * session but others are already reusing it. If this was a new
- * 'blank' session ID, the session-id length will still be 0
- */
- if (s->session->session_id_length > 0) {
+
+ /*
+ * we need to do this in case we were trying to reuse a client
+ * session but others are already reusing it. If this was a new
+ * 'blank' session ID, the session-id length will still be 0
+ */
+ if (s->session->session_id_length > 0) {
if (!ssl_get_new_session(s, 0)) {
ssl2_return_error(s, SSL2_PE_UNDEFINED_ERROR);
return (-1);
diff --git a/crypto/openssl/ssl/s2_lib.c b/crypto/openssl/ssl/s2_lib.c
index 7e3674a..d55b93f 100644
--- a/crypto/openssl/ssl/s2_lib.c
+++ b/crypto/openssl/ssl/s2_lib.c
@@ -435,10 +435,7 @@ const SSL_CIPHER *ssl2_get_cipher_by_char(const unsigned char *p)
((unsigned long)p[1] << 8L) | (unsigned long)p[2];
c.id = id;
cp = OBJ_bsearch_ssl_cipher_id(&c, ssl2_ciphers, SSL2_NUM_CIPHERS);
- if ((cp == NULL) || (cp->valid == 0))
- return NULL;
- else
- return cp;
+ return cp;
}
int ssl2_put_cipher_by_char(const SSL_CIPHER *c, unsigned char *p)
diff --git a/crypto/openssl/ssl/s3_both.c b/crypto/openssl/ssl/s3_both.c
index 107b460..019e21c 100644
--- a/crypto/openssl/ssl/s3_both.c
+++ b/crypto/openssl/ssl/s3_both.c
@@ -158,13 +158,12 @@ int ssl3_do_write(SSL *s, int type)
int ssl3_send_finished(SSL *s, int a, int b, const char *sender, int slen)
{
- unsigned char *p, *d;
+ unsigned char *p;
int i;
unsigned long l;
if (s->state == a) {
- d = (unsigned char *)s->init_buf->data;
- p = &(d[4]);
+ p = ssl_handshake_start(s);
i = s->method->ssl3_enc->final_finish_mac(s,
sender, slen,
@@ -173,7 +172,6 @@ int ssl3_send_finished(SSL *s, int a, int b, const char *sender, int slen)
return 0;
s->s3->tmp.finish_md_len = i;
memcpy(p, s->s3->tmp.finish_md, i);
- p += i;
l = i;
/*
@@ -196,17 +194,12 @@ int ssl3_send_finished(SSL *s, int a, int b, const char *sender, int slen)
*/
l &= 0xffff;
#endif
-
- *(d++) = SSL3_MT_FINISHED;
- l2n3(l, d);
- s->init_num = (int)l + 4;
- s->init_off = 0;
-
+ ssl_set_handshake_header(s, SSL3_MT_FINISHED, l);
s->state = b;
}
/* SSL3_ST_SEND_xxxxxx_HELLO_B */
- return (ssl3_do_write(s, SSL3_RT_HANDSHAKE));
+ return ssl_do_write(s);
}
#ifndef OPENSSL_NO_NEXTPROTONEG
@@ -248,7 +241,7 @@ int ssl3_get_finished(SSL *s, int a, int b)
#ifdef OPENSSL_NO_NEXTPROTONEG
/*
* the mac has already been generated when we received the change cipher
- * spec message and is in s->s3->tmp.peer_finish_md.
+ * spec message and is in s->s3->tmp.peer_finish_md
*/
#endif
@@ -326,84 +319,20 @@ int ssl3_send_change_cipher_spec(SSL *s, int a, int b)
return (ssl3_do_write(s, SSL3_RT_CHANGE_CIPHER_SPEC));
}
-static int ssl3_add_cert_to_buf(BUF_MEM *buf, unsigned long *l, X509 *x)
-{
- int n;
- unsigned char *p;
-
- n = i2d_X509(x, NULL);
- if (!BUF_MEM_grow_clean(buf, (int)(n + (*l) + 3))) {
- SSLerr(SSL_F_SSL3_ADD_CERT_TO_BUF, ERR_R_BUF_LIB);
- return (-1);
- }
- p = (unsigned char *)&(buf->data[*l]);
- l2n3(n, p);
- i2d_X509(x, &p);
- *l += n + 3;
-
- return (0);
-}
-
-unsigned long ssl3_output_cert_chain(SSL *s, X509 *x)
+unsigned long ssl3_output_cert_chain(SSL *s, CERT_PKEY *cpk)
{
unsigned char *p;
- int i;
- unsigned long l = 7;
- BUF_MEM *buf;
- int no_chain;
-
- if ((s->mode & SSL_MODE_NO_AUTO_CHAIN) || s->ctx->extra_certs)
- no_chain = 1;
- else
- no_chain = 0;
+ unsigned long l = 3 + SSL_HM_HEADER_LENGTH(s);
- /* TLSv1 sends a chain with nothing in it, instead of an alert */
- buf = s->init_buf;
- if (!BUF_MEM_grow_clean(buf, 10)) {
- SSLerr(SSL_F_SSL3_OUTPUT_CERT_CHAIN, ERR_R_BUF_LIB);
- return (0);
- }
- if (x != NULL) {
- if (no_chain) {
- if (ssl3_add_cert_to_buf(buf, &l, x))
- return (0);
- } else {
- X509_STORE_CTX xs_ctx;
-
- if (!X509_STORE_CTX_init(&xs_ctx, s->ctx->cert_store, x, NULL)) {
- SSLerr(SSL_F_SSL3_OUTPUT_CERT_CHAIN, ERR_R_X509_LIB);
- return (0);
- }
- X509_verify_cert(&xs_ctx);
- /* Don't leave errors in the queue */
- ERR_clear_error();
- for (i = 0; i < sk_X509_num(xs_ctx.chain); i++) {
- x = sk_X509_value(xs_ctx.chain, i);
-
- if (ssl3_add_cert_to_buf(buf, &l, x)) {
- X509_STORE_CTX_cleanup(&xs_ctx);
- return 0;
- }
- }
- X509_STORE_CTX_cleanup(&xs_ctx);
- }
- }
- /* Thawte special :-) */
- for (i = 0; i < sk_X509_num(s->ctx->extra_certs); i++) {
- x = sk_X509_value(s->ctx->extra_certs, i);
- if (ssl3_add_cert_to_buf(buf, &l, x))
- return (0);
- }
+ if (!ssl_add_cert_chain(s, cpk, &l))
+ return 0;
- l -= 7;
- p = (unsigned char *)&(buf->data[4]);
+ l -= 3 + SSL_HM_HEADER_LENGTH(s);
+ p = ssl_handshake_start(s);
l2n3(l, p);
l += 3;
- p = (unsigned char *)&(buf->data[0]);
- *(p++) = SSL3_MT_CERTIFICATE;
- l2n3(l, p);
- l += 4;
- return (l);
+ ssl_set_handshake_header(s, SSL3_MT_CERTIFICATE, l);
+ return l + SSL_HM_HEADER_LENGTH(s);
}
/*
@@ -477,17 +406,6 @@ long ssl3_get_message(SSL *s, int st1, int stn, int mt, long max, int *ok)
SSLerr(SSL_F_SSL3_GET_MESSAGE, SSL_R_UNEXPECTED_MESSAGE);
goto f_err;
}
- if ((mt < 0) && (*p == SSL3_MT_CLIENT_HELLO) &&
- (st1 == SSL3_ST_SR_CERT_A) && (stn == SSL3_ST_SR_CERT_B)) {
- /*
- * At this point we have got an MS SGC second client hello (maybe
- * we should always allow the client to start a new handshake?).
- * We need to restart the mac. Don't increment
- * {num,total}_renegotiations because we have not completed the
- * handshake.
- */
- ssl3_init_finished_mac(s);
- }
s->s3->tmp.message_type = *(p++);
@@ -578,7 +496,18 @@ int ssl_cert_type(X509 *x, EVP_PKEY *pkey)
ret = SSL_PKEY_GOST94;
} else if (i == NID_id_GostR3410_2001 || i == NID_id_GostR3410_2001_cc) {
ret = SSL_PKEY_GOST01;
+ } else if (x && (i == EVP_PKEY_DH || i == EVP_PKEY_DHX)) {
+ /*
+ * For DH two cases: DH certificate signed with RSA and DH
+ * certificate signed with DSA.
+ */
+ i = X509_certificate_type(x, pk);
+ if (i & EVP_PKS_RSA)
+ ret = SSL_PKEY_DH_RSA;
+ else if (i & EVP_PKS_DSA)
+ ret = SSL_PKEY_DH_DSA;
}
+
err:
if (!pkey)
EVP_PKEY_free(pk);
diff --git a/crypto/openssl/ssl/s3_cbc.c b/crypto/openssl/ssl/s3_cbc.c
index 2fb71f2..a0edcef 100644
--- a/crypto/openssl/ssl/s3_cbc.c
+++ b/crypto/openssl/ssl/s3_cbc.c
@@ -125,7 +125,7 @@ int tls1_cbc_remove_padding(const SSL *s,
unsigned padding_length, good, to_check, i;
const unsigned overhead = 1 /* padding length byte */ + mac_size;
/* Check if version requires explicit IV */
- if (s->version >= TLS1_1_VERSION || s->version == DTLS1_BAD_VER) {
+ if (SSL_USE_EXPLICIT_IV(s)) {
/*
* These lengths are all public so we can test them in non-constant
* time.
diff --git a/crypto/openssl/ssl/s3_clnt.c b/crypto/openssl/ssl/s3_clnt.c
index 35ad121..6af145a 100644
--- a/crypto/openssl/ssl/s3_clnt.c
+++ b/crypto/openssl/ssl/s3_clnt.c
@@ -317,11 +317,11 @@ int ssl3_connect(SSL *s)
s->state = SSL3_ST_CR_SESSION_TICKET_A;
}
#endif
- } else
+ } else {
s->state = SSL3_ST_CR_CERT_A;
+ }
s->init_num = 0;
break;
-
case SSL3_ST_CR_CERT_A:
case SSL3_ST_CR_CERT_B:
#ifndef OPENSSL_NO_TLSEXT
@@ -675,6 +675,7 @@ int ssl3_client_hello(SSL *s)
unsigned char *p, *d;
int i;
unsigned long l;
+ int al = 0;
#ifndef OPENSSL_NO_COMP
int j;
SSL_COMP *comp;
@@ -697,15 +698,64 @@ int ssl3_client_hello(SSL *s)
if (!ssl_get_new_session(s, 0))
goto err;
}
+ if (s->method->version == DTLS_ANY_VERSION) {
+ /* Determine which DTLS version to use */
+ int options = s->options;
+ /* If DTLS 1.2 disabled correct the version number */
+ if (options & SSL_OP_NO_DTLSv1_2) {
+ if (tls1_suiteb(s)) {
+ SSLerr(SSL_F_SSL3_CLIENT_HELLO,
+ SSL_R_ONLY_DTLS_1_2_ALLOWED_IN_SUITEB_MODE);
+ goto err;
+ }
+ /*
+ * Disabling all versions is silly: return an error.
+ */
+ if (options & SSL_OP_NO_DTLSv1) {
+ SSLerr(SSL_F_SSL3_CLIENT_HELLO, SSL_R_WRONG_SSL_VERSION);
+ goto err;
+ }
+ /*
+ * Update method so we don't use any DTLS 1.2 features.
+ */
+ s->method = DTLSv1_client_method();
+ s->version = DTLS1_VERSION;
+ } else {
+ /*
+ * We only support one version: update method
+ */
+ if (options & SSL_OP_NO_DTLSv1)
+ s->method = DTLSv1_2_client_method();
+ s->version = DTLS1_2_VERSION;
+ }
+ s->client_version = s->version;
+ }
/* else use the pre-loaded session */
p = s->s3->client_random;
- if (ssl_fill_hello_random(s, 0, p, SSL3_RANDOM_SIZE) <= 0)
+ /*
+ * for DTLS if client_random is initialized, reuse it, we are
+ * required to use same upon reply to HelloVerify
+ */
+ if (SSL_IS_DTLS(s)) {
+ size_t idx;
+ i = 1;
+ for (idx = 0; idx < sizeof(s->s3->client_random); idx++) {
+ if (p[idx]) {
+ i = 0;
+ break;
+ }
+ }
+ } else
+ i = 1;
+
+ if (i && ssl_fill_hello_random(s, 0, p,
+ sizeof(s->s3->client_random)) <= 0)
goto err;
/* Do the message type and length last */
- d = p = &(buf[4]);
+ d = p = ssl_handshake_start(s);
/*-
* version indicates the negotiated version: for example from
@@ -765,6 +815,17 @@ int ssl3_client_hello(SSL *s)
p += i;
}
+ /* cookie stuff for DTLS */
+ if (SSL_IS_DTLS(s)) {
+ if (s->d1->cookie_len > sizeof(s->d1->cookie)) {
+ SSLerr(SSL_F_SSL3_CLIENT_HELLO, ERR_R_INTERNAL_ERROR);
+ goto err;
+ }
+ *(p++) = s->d1->cookie_len;
+ memcpy(p, s->d1->cookie, s->d1->cookie_len);
+ p += s->d1->cookie_len;
+ }
+
/* Ciphers supported */
i = ssl_cipher_list_to_bytes(s, SSL_get_ciphers(s), &(p[2]), 0);
if (i == 0) {
@@ -809,27 +870,21 @@ int ssl3_client_hello(SSL *s)
goto err;
}
if ((p =
- ssl_add_clienthello_tlsext(s, p,
- buf + SSL3_RT_MAX_PLAIN_LENGTH)) ==
- NULL) {
+ ssl_add_clienthello_tlsext(s, p, buf + SSL3_RT_MAX_PLAIN_LENGTH,
+ &al)) == NULL) {
+ ssl3_send_alert(s, SSL3_AL_FATAL, al);
SSLerr(SSL_F_SSL3_CLIENT_HELLO, ERR_R_INTERNAL_ERROR);
goto err;
}
#endif
- l = (p - d);
- d = buf;
- *(d++) = SSL3_MT_CLIENT_HELLO;
- l2n3(l, d);
-
+ l = p - d;
+ ssl_set_handshake_header(s, SSL3_MT_CLIENT_HELLO, l);
s->state = SSL3_ST_CW_CLNT_HELLO_B;
- /* number of bytes to write */
- s->init_num = p - buf;
- s->init_off = 0;
}
/* SSL3_ST_CW_CLNT_HELLO_B */
- return (ssl3_do_write(s, SSL3_RT_HANDSHAKE));
+ return ssl_do_write(s);
err:
s->state = SSL_ST_ERR;
return (-1);
@@ -839,13 +894,20 @@ int ssl3_get_server_hello(SSL *s)
{
STACK_OF(SSL_CIPHER) *sk;
const SSL_CIPHER *c;
+ CERT *ct = s->cert;
unsigned char *p, *d;
- int i, al, ok;
+ int i, al = SSL_AD_INTERNAL_ERROR, ok;
unsigned int j;
long n;
#ifndef OPENSSL_NO_COMP
SSL_COMP *comp;
#endif
+ /*
+ * Hello verify request and/or server hello version may not match so set
+ * first packet if we're negotiating version.
+ */
+ if (SSL_IS_DTLS(s))
+ s->first_packet = 1;
n = s->method->ssl_get_message(s,
SSL3_ST_CR_SRVR_HELLO_A,
@@ -854,7 +916,8 @@ int ssl3_get_server_hello(SSL *s)
if (!ok)
return ((int)n);
- if (SSL_version(s) == DTLS1_VERSION || SSL_version(s) == DTLS1_BAD_VER) {
+ if (SSL_IS_DTLS(s)) {
+ s->first_packet = 0;
if (s->s3->tmp.message_type == DTLS1_MT_HELLO_VERIFY_REQUEST) {
if (s->d1->send_cookie == 0) {
s->s3->tmp.reuse_message = 1;
@@ -875,6 +938,28 @@ int ssl3_get_server_hello(SSL *s)
}
d = p = (unsigned char *)s->init_msg;
+ if (s->method->version == DTLS_ANY_VERSION) {
+ /* Work out correct protocol version to use */
+ int hversion = (p[0] << 8) | p[1];
+ int options = s->options;
+ if (hversion == DTLS1_2_VERSION && !(options & SSL_OP_NO_DTLSv1_2))
+ s->method = DTLSv1_2_client_method();
+ else if (tls1_suiteb(s)) {
+ SSLerr(SSL_F_SSL3_GET_SERVER_HELLO,
+ SSL_R_ONLY_DTLS_1_2_ALLOWED_IN_SUITEB_MODE);
+ s->version = hversion;
+ al = SSL_AD_PROTOCOL_VERSION;
+ goto f_err;
+ } else if (hversion == DTLS1_VERSION && !(options & SSL_OP_NO_DTLSv1))
+ s->method = DTLSv1_client_method();
+ else {
+ SSLerr(SSL_F_SSL3_GET_SERVER_HELLO, SSL_R_WRONG_SSL_VERSION);
+ s->version = hversion;
+ al = SSL_AD_PROTOCOL_VERSION;
+ goto f_err;
+ }
+ s->session->ssl_version = s->version = s->method->version;
+ }
if ((p[0] != (s->version >> 8)) || (p[1] != (s->version & 0xff))) {
SSLerr(SSL_F_SSL3_GET_SERVER_HELLO, SSL_R_WRONG_SSL_VERSION);
@@ -951,7 +1036,6 @@ int ssl3_get_server_hello(SSL *s)
*/
if (s->session->session_id_length > 0) {
if (!ssl_get_new_session(s, 0)) {
- al = SSL_AD_INTERNAL_ERROR;
goto f_err;
}
}
@@ -966,21 +1050,16 @@ int ssl3_get_server_hello(SSL *s)
SSLerr(SSL_F_SSL3_GET_SERVER_HELLO, SSL_R_UNKNOWN_CIPHER_RETURNED);
goto f_err;
}
- /* TLS v1.2 only ciphersuites require v1.2 or later */
- if ((c->algorithm_ssl & SSL_TLSV1_2) &&
- (TLS1_get_version(s) < TLS1_2_VERSION)) {
- al = SSL_AD_ILLEGAL_PARAMETER;
- SSLerr(SSL_F_SSL3_GET_SERVER_HELLO, SSL_R_WRONG_CIPHER_RETURNED);
- goto f_err;
- }
-#ifndef OPENSSL_NO_SRP
- if (((c->algorithm_mkey & SSL_kSRP) || (c->algorithm_auth & SSL_aSRP)) &&
- !(s->srp_ctx.srp_Mask & SSL_kSRP)) {
+ /*
+ * If it is a disabled cipher we didn't send it in client hello, so
+ * return an error.
+ */
+ if (c->algorithm_ssl & ct->mask_ssl ||
+ c->algorithm_mkey & ct->mask_k || c->algorithm_auth & ct->mask_a) {
al = SSL_AD_ILLEGAL_PARAMETER;
SSLerr(SSL_F_SSL3_GET_SERVER_HELLO, SSL_R_WRONG_CIPHER_RETURNED);
goto f_err;
}
-#endif /* OPENSSL_NO_SRP */
p += ssl_put_cipher_by_char(s, NULL, NULL);
sk = ssl_get_ciphers_by_id(s);
@@ -1013,14 +1092,11 @@ int ssl3_get_server_hello(SSL *s)
}
s->s3->tmp.new_cipher = c;
/*
- * Don't digest cached records if TLS v1.2: we may need them for client
+ * Don't digest cached records if no sigalgs: we may need them for client
* authentication.
*/
- if (TLS1_get_version(s) < TLS1_2_VERSION
- && !ssl3_digest_cached_records(s)) {
- al = SSL_AD_INTERNAL_ERROR;
+ if (!SSL_USE_SIGALGS(s) && !ssl3_digest_cached_records(s))
goto f_err;
- }
/* lets get the compression algorithm */
/* COMPRESSION */
#ifdef OPENSSL_NO_COMP
@@ -1035,7 +1111,6 @@ int ssl3_get_server_hello(SSL *s)
* using compression.
*/
if (s->session->compress_meth != 0) {
- al = SSL_AD_INTERNAL_ERROR;
SSLerr(SSL_F_SSL3_GET_SERVER_HELLO, SSL_R_INCONSISTENT_COMPRESSION);
goto f_err;
}
@@ -1068,16 +1143,9 @@ int ssl3_get_server_hello(SSL *s)
#ifndef OPENSSL_NO_TLSEXT
/* TLS extensions */
- if (s->version >= SSL3_VERSION) {
- if (!ssl_parse_serverhello_tlsext(s, &p, d, n, &al)) {
- /* 'al' set by ssl_parse_serverhello_tlsext */
- SSLerr(SSL_F_SSL3_GET_SERVER_HELLO, SSL_R_PARSE_TLSEXT);
- goto f_err;
- }
- if (ssl_check_serverhello_tlsext(s) <= 0) {
- SSLerr(SSL_F_SSL3_GET_SERVER_HELLO, SSL_R_SERVERHELLO_TLSEXT);
- goto err;
- }
+ if (!ssl_parse_serverhello_tlsext(s, &p, d, n)) {
+ SSLerr(SSL_F_SSL3_GET_SERVER_HELLO, SSL_R_PARSE_TLSEXT);
+ goto err;
}
#endif
@@ -1240,6 +1308,14 @@ int ssl3_get_server_certificate(SSL *s)
}
if (need_cert) {
+ int exp_idx = ssl_cipher_get_cert_index(s->s3->tmp.new_cipher);
+ if (exp_idx >= 0 && i != exp_idx) {
+ x = NULL;
+ al = SSL_AD_ILLEGAL_PARAMETER;
+ SSLerr(SSL_F_SSL3_GET_SERVER_CERTIFICATE,
+ SSL_R_WRONG_CERTIFICATE_TYPE);
+ goto f_err;
+ }
sc->peer_cert_type = i;
CRYPTO_add(&x->references, 1, CRYPTO_LOCK_X509);
/*
@@ -1267,7 +1343,6 @@ int ssl3_get_server_certificate(SSL *s)
x = NULL;
ret = 1;
-
if (0) {
f_err:
ssl3_send_alert(s, SSL3_AL_FATAL, al);
@@ -1326,7 +1401,7 @@ int ssl3_get_key_exchange(SSL *s)
* Can't skip server key exchange if this is an ephemeral
* ciphersuite.
*/
- if (alg_k & (SSL_kEDH | SSL_kEECDH)) {
+ if (alg_k & (SSL_kDHE | SSL_kECDHE)) {
SSLerr(SSL_F_SSL3_GET_KEY_EXCHANGE, SSL_R_UNEXPECTED_MESSAGE);
al = SSL_AD_UNEXPECTED_MESSAGE;
goto f_err;
@@ -1718,9 +1793,16 @@ int ssl3_get_key_exchange(SSL *s)
SSLerr(SSL_F_SSL3_GET_KEY_EXCHANGE, SSL_R_LENGTH_TOO_SHORT);
goto f_err;
}
+ /*
+ * Check curve is one of our preferences, if not server has sent an
+ * invalid curve. ECParameters is 3 bytes.
+ */
+ if (!tls1_check_curve(s, p, 3)) {
+ SSLerr(SSL_F_SSL3_GET_KEY_EXCHANGE, SSL_R_WRONG_CURVE);
+ goto f_err;
+ }
- if ((*p != NAMED_CURVE_TYPE) ||
- ((curve_nid = tls1_ec_curve_id2nid(*(p + 2))) == 0)) {
+ if ((curve_nid = tls1_ec_curve_id2nid(*(p + 2))) == 0) {
al = SSL_AD_INTERNAL_ERROR;
SSLerr(SSL_F_SSL3_GET_KEY_EXCHANGE,
SSL_R_UNABLE_TO_FIND_ECDH_PARAMETERS);
@@ -1808,29 +1890,16 @@ int ssl3_get_key_exchange(SSL *s)
/* if it was signed, check the signature */
if (pkey != NULL) {
- if (TLS1_get_version(s) >= TLS1_2_VERSION) {
- int sigalg;
+ if (SSL_USE_SIGALGS(s)) {
+ int rv;
if (2 > n) {
SSLerr(SSL_F_SSL3_GET_KEY_EXCHANGE, SSL_R_LENGTH_TOO_SHORT);
goto f_err;
}
-
- sigalg = tls12_get_sigid(pkey);
- /* Should never happen */
- if (sigalg == -1) {
- SSLerr(SSL_F_SSL3_GET_KEY_EXCHANGE, ERR_R_INTERNAL_ERROR);
+ rv = tls12_check_peer_sigalg(&md, s, p, pkey);
+ if (rv == -1)
goto err;
- }
- /* Check key type is consistent with signature */
- if (sigalg != (int)p[1]) {
- SSLerr(SSL_F_SSL3_GET_KEY_EXCHANGE,
- SSL_R_WRONG_SIGNATURE_TYPE);
- al = SSL_AD_DECODE_ERROR;
- goto f_err;
- }
- md = tls12_get_hash(p[0]);
- if (md == NULL) {
- SSLerr(SSL_F_SSL3_GET_KEY_EXCHANGE, SSL_R_UNKNOWN_DIGEST);
+ else if (rv == 0) {
goto f_err;
}
#ifdef SSL_DEBUG
@@ -1858,8 +1927,7 @@ int ssl3_get_key_exchange(SSL *s)
goto f_err;
}
#ifndef OPENSSL_NO_RSA
- if (pkey->type == EVP_PKEY_RSA
- && TLS1_get_version(s) < TLS1_2_VERSION) {
+ if (pkey->type == EVP_PKEY_RSA && !SSL_USE_SIGALGS(s)) {
int num;
unsigned int size;
@@ -1909,7 +1977,10 @@ int ssl3_get_key_exchange(SSL *s)
} else {
/* aNULL, aSRP or kPSK do not need public keys */
if (!(alg_a & (SSL_aNULL | SSL_aSRP)) && !(alg_k & SSL_kPSK)) {
- SSLerr(SSL_F_SSL3_GET_KEY_EXCHANGE, ERR_R_INTERNAL_ERROR);
+ /* Might be wrong key type, check it */
+ if (ssl3_check_cert_and_algorithm(s))
+ /* Otherwise this shouldn't happen */
+ SSLerr(SSL_F_SSL3_GET_KEY_EXCHANGE, ERR_R_INTERNAL_ERROR);
goto err;
}
/* still data left over */
@@ -2002,12 +2073,21 @@ int ssl3_get_certificate_request(SSL *s)
/* get the certificate types */
ctype_num = *(p++);
- if (ctype_num > SSL3_CT_NUMBER)
+ if (s->cert->ctypes) {
+ OPENSSL_free(s->cert->ctypes);
+ s->cert->ctypes = NULL;
+ }
+ if (ctype_num > SSL3_CT_NUMBER) {
+ /* If we exceed static buffer copy all to cert structure */
+ s->cert->ctypes = OPENSSL_malloc(ctype_num);
+ memcpy(s->cert->ctypes, p, ctype_num);
+ s->cert->ctype_num = (size_t)ctype_num;
ctype_num = SSL3_CT_NUMBER;
+ }
for (i = 0; i < ctype_num; i++)
s->s3->tmp.ctype[i] = p[i];
- p += ctype_num;
- if (TLS1_get_version(s) >= TLS1_2_VERSION) {
+ p += p[-1];
+ if (SSL_USE_SIGALGS(s)) {
n2s(p, llen);
/*
* Check we have enough room for signature algorithms and following
@@ -2019,12 +2099,22 @@ int ssl3_get_certificate_request(SSL *s)
SSL_R_DATA_LENGTH_TOO_LONG);
goto err;
}
- if ((llen & 1) || !tls1_process_sigalgs(s, p, llen)) {
+ /* Clear certificate digests and validity flags */
+ for (i = 0; i < SSL_PKEY_NUM; i++) {
+ s->cert->pkeys[i].digest = NULL;
+ s->cert->pkeys[i].valid_flags = 0;
+ }
+ if ((llen & 1) || !tls1_save_sigalgs(s, p, llen)) {
ssl3_send_alert(s, SSL3_AL_FATAL, SSL_AD_DECODE_ERROR);
SSLerr(SSL_F_SSL3_GET_CERTIFICATE_REQUEST,
SSL_R_SIGNATURE_ALGORITHMS_ERROR);
goto err;
}
+ if (!tls1_process_sigalgs(s)) {
+ ssl3_send_alert(s, SSL3_AL_FATAL, SSL_AD_INTERNAL_ERROR);
+ SSLerr(SSL_F_SSL3_GET_CERTIFICATE_REQUEST, ERR_R_MALLOC_FAILURE);
+ goto err;
+ }
p += llen;
}
@@ -2299,9 +2389,28 @@ int ssl3_get_server_done(SSL *s)
return (ret);
}
+#ifndef OPENSSL_NO_DH
+static DH *get_server_static_dh_key(SESS_CERT *scert)
+{
+ DH *dh_srvr = NULL;
+ EVP_PKEY *spkey = NULL;
+ int idx = scert->peer_cert_type;
+
+ if (idx >= 0)
+ spkey = X509_get_pubkey(scert->peer_pkeys[idx].x509);
+ if (spkey) {
+ dh_srvr = EVP_PKEY_get1_DH(spkey);
+ EVP_PKEY_free(spkey);
+ }
+ if (dh_srvr == NULL)
+ SSLerr(SSL_F_GET_SERVER_STATIC_DH_KEY, ERR_R_INTERNAL_ERROR);
+ return dh_srvr;
+}
+#endif
+
int ssl3_send_client_key_exchange(SSL *s)
{
- unsigned char *p, *d;
+ unsigned char *p;
int n;
unsigned long alg_k;
#ifndef OPENSSL_NO_RSA
@@ -2321,8 +2430,7 @@ int ssl3_send_client_key_exchange(SSL *s)
#endif
if (s->state == SSL3_ST_CW_KEY_EXCH_A) {
- d = (unsigned char *)s->init_buf->data;
- p = &(d[4]);
+ p = ssl_handshake_start(s);
alg_k = s->s3->tmp.new_cipher->algorithm_mkey;
@@ -2533,33 +2641,45 @@ int ssl3_send_client_key_exchange(SSL *s)
#ifndef OPENSSL_NO_DH
else if (alg_k & (SSL_kEDH | SSL_kDHr | SSL_kDHd)) {
DH *dh_srvr, *dh_clnt;
+ SESS_CERT *scert = s->session->sess_cert;
- if (s->session->sess_cert == NULL) {
+ if (scert == NULL) {
ssl3_send_alert(s, SSL3_AL_FATAL, SSL_AD_UNEXPECTED_MESSAGE);
SSLerr(SSL_F_SSL3_SEND_CLIENT_KEY_EXCHANGE,
SSL_R_UNEXPECTED_MESSAGE);
goto err;
}
- if (s->session->sess_cert->peer_dh_tmp != NULL)
- dh_srvr = s->session->sess_cert->peer_dh_tmp;
- else {
- /* we get them from the cert */
- ssl3_send_alert(s, SSL3_AL_FATAL, SSL_AD_HANDSHAKE_FAILURE);
- SSLerr(SSL_F_SSL3_SEND_CLIENT_KEY_EXCHANGE,
- SSL_R_UNABLE_TO_FIND_DH_PARAMETERS);
- goto err;
+ if (scert->peer_dh_tmp != NULL) {
+ dh_srvr = scert->peer_dh_tmp;
+ } else {
+ dh_srvr = get_server_static_dh_key(scert);
+ if (dh_srvr == NULL)
+ goto err;
}
- /* generate a new random key */
- if ((dh_clnt = DHparams_dup(dh_srvr)) == NULL) {
- SSLerr(SSL_F_SSL3_SEND_CLIENT_KEY_EXCHANGE, ERR_R_DH_LIB);
- goto err;
- }
- if (!DH_generate_key(dh_clnt)) {
- SSLerr(SSL_F_SSL3_SEND_CLIENT_KEY_EXCHANGE, ERR_R_DH_LIB);
- DH_free(dh_clnt);
- goto err;
+ if (s->s3->flags & TLS1_FLAGS_SKIP_CERT_VERIFY) {
+ /* Use client certificate key */
+ EVP_PKEY *clkey = s->cert->key->privatekey;
+ dh_clnt = NULL;
+ if (clkey)
+ dh_clnt = EVP_PKEY_get1_DH(clkey);
+ if (dh_clnt == NULL) {
+ SSLerr(SSL_F_SSL3_SEND_CLIENT_KEY_EXCHANGE,
+ ERR_R_INTERNAL_ERROR);
+ goto err;
+ }
+ } else {
+ /* generate a new random key */
+ if ((dh_clnt = DHparams_dup(dh_srvr)) == NULL) {
+ SSLerr(SSL_F_SSL3_SEND_CLIENT_KEY_EXCHANGE, ERR_R_DH_LIB);
+ goto err;
+ }
+ if (!DH_generate_key(dh_clnt)) {
+ SSLerr(SSL_F_SSL3_SEND_CLIENT_KEY_EXCHANGE, ERR_R_DH_LIB);
+ DH_free(dh_clnt);
+ goto err;
+ }
}
/*
@@ -2568,6 +2688,8 @@ int ssl3_send_client_key_exchange(SSL *s)
*/
n = DH_compute_key(p, dh_srvr->pub_key, dh_clnt);
+ if (scert->peer_dh_tmp == NULL)
+ DH_free(dh_srvr);
if (n <= 0) {
SSLerr(SSL_F_SSL3_SEND_CLIENT_KEY_EXCHANGE, ERR_R_DH_LIB);
@@ -2584,11 +2706,15 @@ int ssl3_send_client_key_exchange(SSL *s)
/* clean up */
memset(p, 0, n);
- /* send off the data */
- n = BN_num_bytes(dh_clnt->pub_key);
- s2n(n, p);
- BN_bn2bin(dh_clnt->pub_key, p);
- n += 2;
+ if (s->s3->flags & TLS1_FLAGS_SKIP_CERT_VERIFY)
+ n = 0;
+ else {
+ /* send off the data */
+ n = BN_num_bytes(dh_clnt->pub_key);
+ s2n(n, p);
+ BN_bn2bin(dh_clnt->pub_key, p);
+ n += 2;
+ }
DH_free(dh_clnt);
}
@@ -3014,17 +3140,12 @@ int ssl3_send_client_key_exchange(SSL *s)
goto err;
}
- *(d++) = SSL3_MT_CLIENT_KEY_EXCHANGE;
- l2n3(n, d);
-
+ ssl_set_handshake_header(s, SSL3_MT_CLIENT_KEY_EXCHANGE, n);
s->state = SSL3_ST_CW_KEY_EXCH_B;
- /* number of bytes to write */
- s->init_num = n + 4;
- s->init_off = 0;
}
/* SSL3_ST_CW_KEY_EXCH_B */
- return (ssl3_do_write(s, SSL3_RT_HANDSHAKE));
+ return ssl_do_write(s);
err:
#ifndef OPENSSL_NO_ECDH
BN_CTX_free(bn_ctx);
@@ -3040,7 +3161,7 @@ int ssl3_send_client_key_exchange(SSL *s)
int ssl3_send_client_verify(SSL *s)
{
- unsigned char *p, *d;
+ unsigned char *p;
unsigned char data[MD5_DIGEST_LENGTH + SHA_DIGEST_LENGTH];
EVP_PKEY *pkey;
EVP_PKEY_CTX *pctx = NULL;
@@ -3052,14 +3173,13 @@ int ssl3_send_client_verify(SSL *s)
EVP_MD_CTX_init(&mctx);
if (s->state == SSL3_ST_CW_CERT_VRFY_A) {
- d = (unsigned char *)s->init_buf->data;
- p = &(d[4]);
+ p = ssl_handshake_start(s);
pkey = s->cert->key->privatekey;
/* Create context from key and test if sha1 is allowed as digest */
pctx = EVP_PKEY_CTX_new(pkey, NULL);
EVP_PKEY_sign_init(pctx);
if (EVP_PKEY_CTX_set_signature_md(pctx, EVP_sha1()) > 0) {
- if (TLS1_get_version(s) < TLS1_2_VERSION)
+ if (!SSL_USE_SIGALGS(s))
s->method->ssl3_enc->cert_verify_mac(s,
NID_sha1,
&(data
@@ -3071,7 +3191,7 @@ int ssl3_send_client_verify(SSL *s)
* For TLS v1.2 send signature algorithm and signature using agreed
* digest and cached handshake records.
*/
- if (TLS1_get_version(s) >= TLS1_2_VERSION) {
+ if (SSL_USE_SIGALGS(s)) {
long hdatalen = 0;
void *hdata;
const EVP_MD *md = s->cert->key->digest;
@@ -3155,16 +3275,12 @@ int ssl3_send_client_verify(SSL *s)
SSLerr(SSL_F_SSL3_SEND_CLIENT_VERIFY, ERR_R_INTERNAL_ERROR);
goto err;
}
- *(d++) = SSL3_MT_CERTIFICATE_VERIFY;
- l2n3(n, d);
-
+ ssl_set_handshake_header(s, SSL3_MT_CERTIFICATE_VERIFY, n);
s->state = SSL3_ST_CW_CERT_VRFY_B;
- s->init_num = (int)n + 4;
- s->init_off = 0;
}
EVP_MD_CTX_cleanup(&mctx);
EVP_PKEY_CTX_free(pctx);
- return (ssl3_do_write(s, SSL3_RT_HANDSHAKE));
+ return ssl_do_write(s);
err:
EVP_MD_CTX_cleanup(&mctx);
EVP_PKEY_CTX_free(pctx);
@@ -3172,20 +3288,75 @@ int ssl3_send_client_verify(SSL *s)
return (-1);
}
+/*
+ * Check a certificate can be used for client authentication. Currently check
+ * cert exists, if we have a suitable digest for TLS 1.2 if static DH client
+ * certificates can be used and optionally checks suitability for Suite B.
+ */
+static int ssl3_check_client_certificate(SSL *s)
+{
+ unsigned long alg_k;
+ if (!s->cert || !s->cert->key->x509 || !s->cert->key->privatekey)
+ return 0;
+ /* If no suitable signature algorithm can't use certificate */
+ if (SSL_USE_SIGALGS(s) && !s->cert->key->digest)
+ return 0;
+ /*
+ * If strict mode check suitability of chain before using it. This also
+ * adjusts suite B digest if necessary.
+ */
+ if (s->cert->cert_flags & SSL_CERT_FLAGS_CHECK_TLS_STRICT &&
+ !tls1_check_chain(s, NULL, NULL, NULL, -2))
+ return 0;
+ alg_k = s->s3->tmp.new_cipher->algorithm_mkey;
+ /* See if we can use client certificate for fixed DH */
+ if (alg_k & (SSL_kDHr | SSL_kDHd)) {
+ SESS_CERT *scert = s->session->sess_cert;
+ int i = scert->peer_cert_type;
+ EVP_PKEY *clkey = NULL, *spkey = NULL;
+ clkey = s->cert->key->privatekey;
+ /* If client key not DH assume it can be used */
+ if (EVP_PKEY_id(clkey) != EVP_PKEY_DH)
+ return 1;
+ if (i >= 0)
+ spkey = X509_get_pubkey(scert->peer_pkeys[i].x509);
+ if (spkey) {
+ /* Compare server and client parameters */
+ i = EVP_PKEY_cmp_parameters(clkey, spkey);
+ EVP_PKEY_free(spkey);
+ if (i != 1)
+ return 0;
+ }
+ s->s3->flags |= TLS1_FLAGS_SKIP_CERT_VERIFY;
+ }
+ return 1;
+}
+
int ssl3_send_client_certificate(SSL *s)
{
X509 *x509 = NULL;
EVP_PKEY *pkey = NULL;
int i;
- unsigned long l;
if (s->state == SSL3_ST_CW_CERT_A) {
- if ((s->cert == NULL) ||
- (s->cert->key->x509 == NULL) ||
- (s->cert->key->privatekey == NULL))
- s->state = SSL3_ST_CW_CERT_B;
- else
+ /* Let cert callback update client certificates if required */
+ if (s->cert->cert_cb) {
+ i = s->cert->cert_cb(s, s->cert->cert_cb_arg);
+ if (i < 0) {
+ s->rwstate = SSL_X509_LOOKUP;
+ return -1;
+ }
+ if (i == 0) {
+ ssl3_send_alert(s, SSL3_AL_FATAL, SSL_AD_INTERNAL_ERROR);
+ s->state = SSL_ST_ERR;
+ return 0;
+ }
+ s->rwstate = SSL_NOTHING;
+ }
+ if (ssl3_check_client_certificate(s))
s->state = SSL3_ST_CW_CERT_C;
+ else
+ s->state = SSL3_ST_CW_CERT_B;
}
/* We need to get a client cert */
@@ -3215,6 +3386,8 @@ int ssl3_send_client_certificate(SSL *s)
X509_free(x509);
if (pkey != NULL)
EVP_PKEY_free(pkey);
+ if (i && !ssl3_check_client_certificate(s))
+ i = 0;
if (i == 0) {
if (s->version == SSL3_VERSION) {
s->s3->tmp.cert_req = 0;
@@ -3231,20 +3404,17 @@ int ssl3_send_client_certificate(SSL *s)
if (s->state == SSL3_ST_CW_CERT_C) {
s->state = SSL3_ST_CW_CERT_D;
- l = ssl3_output_cert_chain(s,
- (s->s3->tmp.cert_req ==
- 2) ? NULL : s->cert->key->x509);
- if (!l) {
+ if (!ssl3_output_cert_chain(s,
+ (s->s3->tmp.cert_req ==
+ 2) ? NULL : s->cert->key)) {
SSLerr(SSL_F_SSL3_SEND_CLIENT_CERTIFICATE, ERR_R_INTERNAL_ERROR);
ssl3_send_alert(s, SSL3_AL_FATAL, SSL_AD_INTERNAL_ERROR);
s->state = SSL_ST_ERR;
return 0;
}
- s->init_num = (int)l;
- s->init_off = 0;
}
/* SSL3_ST_CW_CERT_D */
- return (ssl3_do_write(s, SSL3_RT_HANDSHAKE));
+ return ssl_do_write(s);
}
#define has_bits(i,m) (((i)&(m)) == (m))
@@ -3268,7 +3438,7 @@ int ssl3_check_cert_and_algorithm(SSL *s)
alg_a = s->s3->tmp.new_cipher->algorithm_auth;
/* we don't have a certificate */
- if ((alg_a & (SSL_aDH | SSL_aNULL | SSL_aKRB5)) || (alg_k & SSL_kPSK))
+ if ((alg_a & (SSL_aNULL | SSL_aKRB5)) || (alg_k & SSL_kPSK))
return (1);
sc = s->session->sess_cert;
@@ -3295,6 +3465,13 @@ int ssl3_check_cert_and_algorithm(SSL *s)
} else {
return 1;
}
+ } else if (alg_a & SSL_aECDSA) {
+ SSLerr(SSL_F_SSL3_CHECK_CERT_AND_ALGORITHM,
+ SSL_R_MISSING_ECDSA_SIGNING_CERT);
+ goto f_err;
+ } else if (alg_k & (SSL_kECDHr | SSL_kECDHe)) {
+ SSLerr(SSL_F_SSL3_CHECK_CERT_AND_ALGORITHM, SSL_R_MISSING_ECDH_CERT);
+ goto f_err;
}
#endif
pkey = X509_get_pubkey(sc->peer_pkeys[idx].x509);
@@ -3345,22 +3522,33 @@ int ssl3_check_cert_and_algorithm(SSL *s)
SSLerr(SSL_F_SSL3_CHECK_CERT_AND_ALGORITHM, ERR_R_INTERNAL_ERROR);
goto f_err;
}
- if ((alg_k & SSL_kDHr) && !has_bits(i, EVP_PK_DH | EVP_PKS_RSA)) {
+ if ((alg_k & SSL_kDHr) && !SSL_USE_SIGALGS(s) &&
+ !has_bits(i, EVP_PK_DH | EVP_PKS_RSA)) {
SSLerr(SSL_F_SSL3_CHECK_CERT_AND_ALGORITHM,
SSL_R_MISSING_DH_RSA_CERT);
goto f_err;
}
# ifndef OPENSSL_NO_DSA
- if ((alg_k & SSL_kDHd) && !has_bits(i, EVP_PK_DH | EVP_PKS_DSA)) {
+ if ((alg_k & SSL_kDHd) && !SSL_USE_SIGALGS(s) &&
+ !has_bits(i, EVP_PK_DH | EVP_PKS_DSA)) {
SSLerr(SSL_F_SSL3_CHECK_CERT_AND_ALGORITHM,
SSL_R_MISSING_DH_DSA_CERT);
goto f_err;
}
# endif
- /* Check DHE only: static DH not implemented. */
- if (alg_k & SSL_kEDH) {
- int dh_size = BN_num_bits(dh->p);
+ if (alg_k & (SSL_kDHE | SSL_kDHr | SSL_kDHd)) {
+ int dh_size;
+ if (alg_k & SSL_kDHE) {
+ dh_size = BN_num_bits(dh->p);
+ } else {
+ DH *dh_srvr = get_server_static_dh_key(sc);
+ if (dh_srvr == NULL)
+ goto f_err;
+ dh_size = BN_num_bits(dh_srvr->p);
+ DH_free(dh_srvr);
+ }
+
if ((!SSL_C_IS_EXPORT(s->s3->tmp.new_cipher) && dh_size < 768)
|| (SSL_C_IS_EXPORT(s->s3->tmp.new_cipher) && dh_size < 512)) {
SSLerr(SSL_F_SSL3_CHECK_CERT_AND_ALGORITHM, SSL_R_DH_KEY_TOO_SMALL);
@@ -3388,7 +3576,7 @@ int ssl3_check_cert_and_algorithm(SSL *s)
} else
#endif
#ifndef OPENSSL_NO_DH
- if (alg_k & SSL_kEDH) {
+ if (alg_k & SSL_kDHE) {
if (BN_num_bits(dh->p) >
SSL_C_EXPORT_PKEYLENGTH(s->s3->tmp.new_cipher)) {
/* We have a temporary DH key but it's too large. */
diff --git a/crypto/openssl/ssl/s3_enc.c b/crypto/openssl/ssl/s3_enc.c
index 152f40d..cda2d8c 100644
--- a/crypto/openssl/ssl/s3_enc.c
+++ b/crypto/openssl/ssl/s3_enc.c
@@ -374,6 +374,23 @@ int ssl3_change_cipher_state(SSL *s, int which)
EVP_CipherInit_ex(dd, c, NULL, key, iv, (which & SSL3_CC_WRITE));
+#ifdef OPENSSL_SSL_TRACE_CRYPTO
+ if (s->msg_callback) {
+
+ int wh = which & SSL3_CC_WRITE ?
+ TLS1_RT_CRYPTO_WRITE : TLS1_RT_CRYPTO_READ;
+ s->msg_callback(2, s->version, wh | TLS1_RT_CRYPTO_MAC,
+ mac_secret, EVP_MD_size(m), s, s->msg_callback_arg);
+ if (c->key_len)
+ s->msg_callback(2, s->version, wh | TLS1_RT_CRYPTO_KEY,
+ key, c->key_len, s, s->msg_callback_arg);
+ if (k) {
+ s->msg_callback(2, s->version, wh | TLS1_RT_CRYPTO_IV,
+ iv, k, s, s->msg_callback_arg);
+ }
+ }
+#endif
+
OPENSSL_cleanse(&(exp_key[0]), sizeof(exp_key));
OPENSSL_cleanse(&(exp_iv[0]), sizeof(exp_iv));
EVP_MD_CTX_cleanup(&md);
@@ -823,6 +840,9 @@ int ssl3_generate_master_secret(SSL *s, unsigned char *out, unsigned char *p,
EVP_MD_CTX ctx;
int i, ret = 0;
unsigned int n;
+#ifdef OPENSSL_SSL_TRACE_CRYPTO
+ unsigned char *tmpout = out;
+#endif
EVP_MD_CTX_init(&ctx);
for (i = 0; i < 3; i++) {
@@ -841,6 +861,22 @@ int ssl3_generate_master_secret(SSL *s, unsigned char *out, unsigned char *p,
ret += n;
}
EVP_MD_CTX_cleanup(&ctx);
+
+#ifdef OPENSSL_SSL_TRACE_CRYPTO
+ if (s->msg_callback) {
+ s->msg_callback(2, s->version, TLS1_RT_CRYPTO_PREMASTER,
+ p, len, s, s->msg_callback_arg);
+ s->msg_callback(2, s->version, TLS1_RT_CRYPTO_CLIENT_RANDOM,
+ s->s3->client_random, SSL3_RANDOM_SIZE,
+ s, s->msg_callback_arg);
+ s->msg_callback(2, s->version, TLS1_RT_CRYPTO_SERVER_RANDOM,
+ s->s3->server_random, SSL3_RANDOM_SIZE,
+ s, s->msg_callback_arg);
+ s->msg_callback(2, s->version, TLS1_RT_CRYPTO_MASTER,
+ tmpout, SSL3_MASTER_SECRET_SIZE,
+ s, s->msg_callback_arg);
+ }
+#endif
OPENSSL_cleanse(buf, sizeof buf);
return (ret);
}
diff --git a/crypto/openssl/ssl/s3_lib.c b/crypto/openssl/ssl/s3_lib.c
index de917d3..ad9eeb6 100644
--- a/crypto/openssl/ssl/s3_lib.c
+++ b/crypto/openssl/ssl/s3_lib.c
@@ -152,11 +152,6 @@
#include <openssl/objects.h>
#include "ssl_locl.h"
#include "kssl_lcl.h"
-#ifndef OPENSSL_NO_TLSEXT
-# ifndef OPENSSL_NO_EC
-# include "../crypto/ec/ec_lcl.h"
-# endif /* OPENSSL_NO_EC */
-#endif /* OPENSSL_NO_TLSEXT */
#include <openssl/md5.h>
#ifndef OPENSSL_NO_DH
# include <openssl/dh.h>
@@ -351,7 +346,7 @@ OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[] = {
/* Cipher 0C */
{
- 0, /* not implemented (non-ephemeral DH) */
+ 1,
SSL3_TXT_DH_DSS_DES_64_CBC_SHA,
SSL3_CK_DH_DSS_DES_64_CBC_SHA,
SSL_kDHd,
@@ -367,7 +362,7 @@ OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[] = {
/* Cipher 0D */
{
- 0, /* not implemented (non-ephemeral DH) */
+ 1,
SSL3_TXT_DH_DSS_DES_192_CBC3_SHA,
SSL3_CK_DH_DSS_DES_192_CBC3_SHA,
SSL_kDHd,
@@ -383,7 +378,7 @@ OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[] = {
/* Cipher 0E */
{
- 0, /* not implemented (non-ephemeral DH) */
+ 0,
SSL3_TXT_DH_RSA_DES_40_CBC_SHA,
SSL3_CK_DH_RSA_DES_40_CBC_SHA,
SSL_kDHr,
@@ -399,7 +394,7 @@ OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[] = {
/* Cipher 0F */
{
- 0, /* not implemented (non-ephemeral DH) */
+ 1,
SSL3_TXT_DH_RSA_DES_64_CBC_SHA,
SSL3_CK_DH_RSA_DES_64_CBC_SHA,
SSL_kDHr,
@@ -415,7 +410,7 @@ OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[] = {
/* Cipher 10 */
{
- 0, /* not implemented (non-ephemeral DH) */
+ 1,
SSL3_TXT_DH_RSA_DES_192_CBC3_SHA,
SSL3_CK_DH_RSA_DES_192_CBC3_SHA,
SSL_kDHr,
@@ -902,7 +897,7 @@ OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[] = {
},
/* Cipher 30 */
{
- 0,
+ 1,
TLS1_TXT_DH_DSS_WITH_AES_128_SHA,
TLS1_CK_DH_DSS_WITH_AES_128_SHA,
SSL_kDHd,
@@ -917,7 +912,7 @@ OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[] = {
},
/* Cipher 31 */
{
- 0,
+ 1,
TLS1_TXT_DH_RSA_WITH_AES_128_SHA,
TLS1_CK_DH_RSA_WITH_AES_128_SHA,
SSL_kDHr,
@@ -993,7 +988,7 @@ OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[] = {
},
/* Cipher 36 */
{
- 0,
+ 1,
TLS1_TXT_DH_DSS_WITH_AES_256_SHA,
TLS1_CK_DH_DSS_WITH_AES_256_SHA,
SSL_kDHd,
@@ -1009,7 +1004,7 @@ OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[] = {
/* Cipher 37 */
{
- 0, /* not implemented (non-ephemeral DH) */
+ 1,
TLS1_TXT_DH_RSA_WITH_AES_256_SHA,
TLS1_CK_DH_RSA_WITH_AES_256_SHA,
SSL_kDHr,
@@ -1122,7 +1117,7 @@ OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[] = {
/* Cipher 3E */
{
- 0, /* not implemented (non-ephemeral DH) */
+ 1,
TLS1_TXT_DH_DSS_WITH_AES_128_SHA256,
TLS1_CK_DH_DSS_WITH_AES_128_SHA256,
SSL_kDHd,
@@ -1138,7 +1133,7 @@ OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[] = {
/* Cipher 3F */
{
- 0, /* not implemented (non-ephemeral DH) */
+ 1,
TLS1_TXT_DH_RSA_WITH_AES_128_SHA256,
TLS1_CK_DH_RSA_WITH_AES_128_SHA256,
SSL_kDHr,
@@ -1189,7 +1184,7 @@ OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[] = {
/* Cipher 42 */
{
- 0, /* not implemented (non-ephemeral DH) */
+ 1,
TLS1_TXT_DH_DSS_WITH_CAMELLIA_128_CBC_SHA,
TLS1_CK_DH_DSS_WITH_CAMELLIA_128_CBC_SHA,
SSL_kDHd,
@@ -1205,7 +1200,7 @@ OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[] = {
/* Cipher 43 */
{
- 0, /* not implemented (non-ephemeral DH) */
+ 1,
TLS1_TXT_DH_RSA_WITH_CAMELLIA_128_CBC_SHA,
TLS1_CK_DH_RSA_WITH_CAMELLIA_128_CBC_SHA,
SSL_kDHr,
@@ -1404,7 +1399,7 @@ OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[] = {
/* Cipher 68 */
{
- 0, /* not implemented (non-ephemeral DH) */
+ 1,
TLS1_TXT_DH_DSS_WITH_AES_256_SHA256,
TLS1_CK_DH_DSS_WITH_AES_256_SHA256,
SSL_kDHd,
@@ -1420,7 +1415,7 @@ OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[] = {
/* Cipher 69 */
{
- 0, /* not implemented (non-ephemeral DH) */
+ 1,
TLS1_TXT_DH_RSA_WITH_AES_256_SHA256,
TLS1_CK_DH_RSA_WITH_AES_256_SHA256,
SSL_kDHr,
@@ -1573,7 +1568,7 @@ OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[] = {
},
/* Cipher 85 */
{
- 0, /* not implemented (non-ephemeral DH) */
+ 1,
TLS1_TXT_DH_DSS_WITH_CAMELLIA_256_CBC_SHA,
TLS1_CK_DH_DSS_WITH_CAMELLIA_256_CBC_SHA,
SSL_kDHd,
@@ -1589,7 +1584,7 @@ OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[] = {
/* Cipher 86 */
{
- 0, /* not implemented (non-ephemeral DH) */
+ 1,
TLS1_TXT_DH_RSA_WITH_CAMELLIA_256_CBC_SHA,
TLS1_CK_DH_RSA_WITH_CAMELLIA_256_CBC_SHA,
SSL_kDHr,
@@ -1739,7 +1734,7 @@ OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[] = {
/* Cipher 97 */
{
- 0, /* not implemented (non-ephemeral DH) */
+ 1,
TLS1_TXT_DH_DSS_WITH_SEED_SHA,
TLS1_CK_DH_DSS_WITH_SEED_SHA,
SSL_kDHd,
@@ -1755,7 +1750,7 @@ OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[] = {
/* Cipher 98 */
{
- 0, /* not implemented (non-ephemeral DH) */
+ 1,
TLS1_TXT_DH_RSA_WITH_SEED_SHA,
TLS1_CK_DH_RSA_WITH_SEED_SHA,
SSL_kDHr,
@@ -1887,7 +1882,7 @@ OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[] = {
/* Cipher A0 */
{
- 0,
+ 1,
TLS1_TXT_DH_RSA_WITH_AES_128_GCM_SHA256,
TLS1_CK_DH_RSA_WITH_AES_128_GCM_SHA256,
SSL_kDHr,
@@ -1903,7 +1898,7 @@ OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[] = {
/* Cipher A1 */
{
- 0,
+ 1,
TLS1_TXT_DH_RSA_WITH_AES_256_GCM_SHA384,
TLS1_CK_DH_RSA_WITH_AES_256_GCM_SHA384,
SSL_kDHr,
@@ -1951,7 +1946,7 @@ OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[] = {
/* Cipher A4 */
{
- 0,
+ 1,
TLS1_TXT_DH_DSS_WITH_AES_128_GCM_SHA256,
TLS1_CK_DH_DSS_WITH_AES_128_GCM_SHA256,
SSL_kDHd,
@@ -1967,7 +1962,7 @@ OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[] = {
/* Cipher A5 */
{
- 0,
+ 1,
TLS1_TXT_DH_DSS_WITH_AES_256_GCM_SHA384,
TLS1_CK_DH_DSS_WITH_AES_256_GCM_SHA384,
SSL_kDHd,
@@ -2012,6 +2007,21 @@ OPENSSL_GLOBAL SSL_CIPHER ssl3_ciphers[] = {
256,
256,
},
+#ifdef OPENSSL_SSL_DEBUG_BROKEN_PROTOCOL
+ {
+ 1,
+ "SCSV",
+ SSL3_CK_SCSV,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0},
+#endif
#ifndef OPENSSL_NO_ECDH
/* Cipher C001 */
@@ -2899,6 +2909,10 @@ SSL3_ENC_METHOD SSLv3_enc_data = {
(int (*)(SSL *, unsigned char *, size_t, const char *,
size_t, const unsigned char *, size_t,
int use_context))ssl_undefined_function,
+ 0,
+ SSL3_HM_HEADER_LENGTH,
+ ssl3_set_handshake_header,
+ ssl3_handshake_write
};
long ssl3_default_timeout(void)
@@ -2932,6 +2946,20 @@ int ssl3_pending(const SSL *s)
SSL3_RT_APPLICATION_DATA) ? s->s3->rrec.length : 0;
}
+void ssl3_set_handshake_header(SSL *s, int htype, unsigned long len)
+{
+ unsigned char *p = (unsigned char *)s->init_buf->data;
+ *(p++) = htype;
+ l2n3(len, p);
+ s->init_num = (int)len + SSL3_HM_HEADER_LENGTH;
+ s->init_off = 0;
+}
+
+int ssl3_handshake_write(SSL *s)
+{
+ return ssl3_do_write(s, SSL3_RT_HANDSHAKE);
+}
+
int ssl3_new(SSL *s)
{
SSL3_STATE *s3;
@@ -2988,6 +3016,11 @@ void ssl3_free(SSL *s)
}
if (s->s3->handshake_dgst)
ssl3_free_digest_list(s);
+#ifndef OPENSSL_NO_TLSEXT
+ if (s->s3->alpn_selected)
+ OPENSSL_free(s->s3->alpn_selected);
+#endif
+
#ifndef OPENSSL_NO_SRP
SSL_SRP_CTX_free(s);
#endif
@@ -3049,6 +3082,12 @@ void ssl3_clear(SSL *s)
if (s->s3->handshake_dgst) {
ssl3_free_digest_list(s);
}
+#if !defined(OPENSSL_NO_TLSEXT)
+ if (s->s3->alpn_selected) {
+ OPENSSL_free(s->s3->alpn_selected);
+ s->s3->alpn_selected = NULL;
+ }
+#endif
memset(s->s3, 0, sizeof *s->s3);
s->s3->rbuf.buf = rp;
s->s3->wbuf.buf = wp;
@@ -3081,6 +3120,9 @@ static char *MS_CALLBACK srp_password_from_info_cb(SSL *s, void *arg)
}
#endif
+static int ssl3_set_req_cert_type(CERT *c, const unsigned char *p,
+ size_t len);
+
long ssl3_ctrl(SSL *s, int cmd, long larg, void *parg)
{
int ret = 0;
@@ -3309,8 +3351,7 @@ long ssl3_ctrl(SSL *s, int cmd, long larg, void *parg)
# ifndef OPENSSL_NO_HEARTBEATS
case SSL_CTRL_TLS_EXT_SEND_HEARTBEAT:
- if (SSL_version(s) == DTLS1_VERSION
- || SSL_version(s) == DTLS1_BAD_VER)
+ if (SSL_IS_DTLS(s))
ret = dtls1_heartbeat(s);
else
ret = tls1_heartbeat(s);
@@ -3331,6 +3372,196 @@ long ssl3_ctrl(SSL *s, int cmd, long larg, void *parg)
#endif /* !OPENSSL_NO_TLSEXT */
+ case SSL_CTRL_CHAIN:
+ if (larg)
+ return ssl_cert_set1_chain(s->cert, (STACK_OF(X509) *)parg);
+ else
+ return ssl_cert_set0_chain(s->cert, (STACK_OF(X509) *)parg);
+
+ case SSL_CTRL_CHAIN_CERT:
+ if (larg)
+ return ssl_cert_add1_chain_cert(s->cert, (X509 *)parg);
+ else
+ return ssl_cert_add0_chain_cert(s->cert, (X509 *)parg);
+
+ case SSL_CTRL_GET_CHAIN_CERTS:
+ *(STACK_OF(X509) **)parg = s->cert->key->chain;
+ break;
+
+ case SSL_CTRL_SELECT_CURRENT_CERT:
+ return ssl_cert_select_current(s->cert, (X509 *)parg);
+
+ case SSL_CTRL_SET_CURRENT_CERT:
+ if (larg == SSL_CERT_SET_SERVER) {
+ CERT_PKEY *cpk;
+ const SSL_CIPHER *cipher;
+ if (!s->server)
+ return 0;
+ cipher = s->s3->tmp.new_cipher;
+ if (!cipher)
+ return 0;
+ /*
+ * No certificate for unauthenticated ciphersuites or using SRP
+ * authentication
+ */
+ if (cipher->algorithm_auth & (SSL_aNULL | SSL_aSRP))
+ return 2;
+ cpk = ssl_get_server_send_pkey(s);
+ if (!cpk)
+ return 0;
+ s->cert->key = cpk;
+ return 1;
+ }
+ return ssl_cert_set_current(s->cert, larg);
+
+#ifndef OPENSSL_NO_EC
+ case SSL_CTRL_GET_CURVES:
+ {
+ unsigned char *clist;
+ size_t clistlen;
+ if (!s->session)
+ return 0;
+ clist = s->session->tlsext_ellipticcurvelist;
+ clistlen = s->session->tlsext_ellipticcurvelist_length / 2;
+ if (parg) {
+ size_t i;
+ int *cptr = parg;
+ unsigned int cid, nid;
+ for (i = 0; i < clistlen; i++) {
+ n2s(clist, cid);
+ nid = tls1_ec_curve_id2nid(cid);
+ if (nid != 0)
+ cptr[i] = nid;
+ else
+ cptr[i] = TLSEXT_nid_unknown | cid;
+ }
+ }
+ return (int)clistlen;
+ }
+
+ case SSL_CTRL_SET_CURVES:
+ return tls1_set_curves(&s->tlsext_ellipticcurvelist,
+ &s->tlsext_ellipticcurvelist_length,
+ parg, larg);
+
+ case SSL_CTRL_SET_CURVES_LIST:
+ return tls1_set_curves_list(&s->tlsext_ellipticcurvelist,
+ &s->tlsext_ellipticcurvelist_length,
+ parg);
+
+ case SSL_CTRL_GET_SHARED_CURVE:
+ return tls1_shared_curve(s, larg);
+
+# ifndef OPENSSL_NO_ECDH
+ case SSL_CTRL_SET_ECDH_AUTO:
+ s->cert->ecdh_tmp_auto = larg;
+ return 1;
+# endif
+#endif
+ case SSL_CTRL_SET_SIGALGS:
+ return tls1_set_sigalgs(s->cert, parg, larg, 0);
+
+ case SSL_CTRL_SET_SIGALGS_LIST:
+ return tls1_set_sigalgs_list(s->cert, parg, 0);
+
+ case SSL_CTRL_SET_CLIENT_SIGALGS:
+ return tls1_set_sigalgs(s->cert, parg, larg, 1);
+
+ case SSL_CTRL_SET_CLIENT_SIGALGS_LIST:
+ return tls1_set_sigalgs_list(s->cert, parg, 1);
+
+ case SSL_CTRL_GET_CLIENT_CERT_TYPES:
+ {
+ const unsigned char **pctype = parg;
+ if (s->server || !s->s3->tmp.cert_req)
+ return 0;
+ if (s->cert->ctypes) {
+ if (pctype)
+ *pctype = s->cert->ctypes;
+ return (int)s->cert->ctype_num;
+ }
+ if (pctype)
+ *pctype = (unsigned char *)s->s3->tmp.ctype;
+ return s->s3->tmp.ctype_num;
+ }
+
+ case SSL_CTRL_SET_CLIENT_CERT_TYPES:
+ if (!s->server)
+ return 0;
+ return ssl3_set_req_cert_type(s->cert, parg, larg);
+
+ case SSL_CTRL_BUILD_CERT_CHAIN:
+ return ssl_build_cert_chain(s->cert, s->ctx->cert_store, larg);
+
+ case SSL_CTRL_SET_VERIFY_CERT_STORE:
+ return ssl_cert_set_cert_store(s->cert, parg, 0, larg);
+
+ case SSL_CTRL_SET_CHAIN_CERT_STORE:
+ return ssl_cert_set_cert_store(s->cert, parg, 1, larg);
+
+ case SSL_CTRL_GET_PEER_SIGNATURE_NID:
+ if (SSL_USE_SIGALGS(s)) {
+ if (s->session && s->session->sess_cert) {
+ const EVP_MD *sig;
+ sig = s->session->sess_cert->peer_key->digest;
+ if (sig) {
+ *(int *)parg = EVP_MD_type(sig);
+ return 1;
+ }
+ }
+ return 0;
+ }
+ /* Might want to do something here for other versions */
+ else
+ return 0;
+
+ case SSL_CTRL_GET_SERVER_TMP_KEY:
+ if (s->server || !s->session || !s->session->sess_cert)
+ return 0;
+ else {
+ SESS_CERT *sc;
+ EVP_PKEY *ptmp;
+ int rv = 0;
+ sc = s->session->sess_cert;
+#if !defined(OPENSSL_NO_RSA) && !defined(OPENSSL_NO_DH) && !defined(OPENSSL_NO_EC) && !defined(OPENSSL_NO_ECDH)
+ if (!sc->peer_rsa_tmp && !sc->peer_dh_tmp && !sc->peer_ecdh_tmp)
+ return 0;
+#endif
+ ptmp = EVP_PKEY_new();
+ if (!ptmp)
+ return 0;
+ if (0) ;
+#ifndef OPENSSL_NO_RSA
+ else if (sc->peer_rsa_tmp)
+ rv = EVP_PKEY_set1_RSA(ptmp, sc->peer_rsa_tmp);
+#endif
+#ifndef OPENSSL_NO_DH
+ else if (sc->peer_dh_tmp)
+ rv = EVP_PKEY_set1_DH(ptmp, sc->peer_dh_tmp);
+#endif
+#ifndef OPENSSL_NO_ECDH
+ else if (sc->peer_ecdh_tmp)
+ rv = EVP_PKEY_set1_EC_KEY(ptmp, sc->peer_ecdh_tmp);
+#endif
+ if (rv) {
+ *(EVP_PKEY **)parg = ptmp;
+ return 1;
+ }
+ EVP_PKEY_free(ptmp);
+ return 0;
+ }
+#ifndef OPENSSL_NO_EC
+ case SSL_CTRL_GET_EC_POINT_FORMATS:
+ {
+ SSL_SESSION *sess = s->session;
+ const unsigned char **pformat = parg;
+ if (!sess || !sess->tlsext_ecpointformatlist)
+ return 0;
+ *pformat = sess->tlsext_ecpointformatlist;
+ return (int)sess->tlsext_ecpointformatlist_length;
+ }
+#endif
+
case SSL_CTRL_CHECK_PROTO_VERSION:
/*
* For library-internal use; checks that the current protocol is the
@@ -3606,6 +3837,47 @@ long ssl3_ctx_ctrl(SSL_CTX *ctx, int cmd, long larg, void *parg)
ctx->srp_ctx.strength = larg;
break;
# endif
+
+# ifndef OPENSSL_NO_EC
+ case SSL_CTRL_SET_CURVES:
+ return tls1_set_curves(&ctx->tlsext_ellipticcurvelist,
+ &ctx->tlsext_ellipticcurvelist_length,
+ parg, larg);
+
+ case SSL_CTRL_SET_CURVES_LIST:
+ return tls1_set_curves_list(&ctx->tlsext_ellipticcurvelist,
+ &ctx->tlsext_ellipticcurvelist_length,
+ parg);
+# ifndef OPENSSL_NO_ECDH
+ case SSL_CTRL_SET_ECDH_AUTO:
+ ctx->cert->ecdh_tmp_auto = larg;
+ return 1;
+# endif
+# endif
+ case SSL_CTRL_SET_SIGALGS:
+ return tls1_set_sigalgs(ctx->cert, parg, larg, 0);
+
+ case SSL_CTRL_SET_SIGALGS_LIST:
+ return tls1_set_sigalgs_list(ctx->cert, parg, 0);
+
+ case SSL_CTRL_SET_CLIENT_SIGALGS:
+ return tls1_set_sigalgs(ctx->cert, parg, larg, 1);
+
+ case SSL_CTRL_SET_CLIENT_SIGALGS_LIST:
+ return tls1_set_sigalgs_list(ctx->cert, parg, 1);
+
+ case SSL_CTRL_SET_CLIENT_CERT_TYPES:
+ return ssl3_set_req_cert_type(ctx->cert, parg, larg);
+
+ case SSL_CTRL_BUILD_CERT_CHAIN:
+ return ssl_build_cert_chain(ctx->cert, ctx->cert_store, larg);
+
+ case SSL_CTRL_SET_VERIFY_CERT_STORE:
+ return ssl_cert_set_cert_store(ctx->cert, parg, 0, larg);
+
+ case SSL_CTRL_SET_CHAIN_CERT_STORE:
+ return ssl_cert_set_cert_store(ctx->cert, parg, 1, larg);
+
#endif /* !OPENSSL_NO_TLSEXT */
/* A Thawte special :-) */
@@ -3618,7 +3890,10 @@ long ssl3_ctx_ctrl(SSL_CTX *ctx, int cmd, long larg, void *parg)
break;
case SSL_CTRL_GET_EXTRA_CHAIN_CERTS:
- *(STACK_OF(X509) **)parg = ctx->extra_certs;
+ if (ctx->extra_certs == NULL && larg == 0)
+ *(STACK_OF(X509) **)parg = ctx->cert->key->chain;
+ else
+ *(STACK_OF(X509) **)parg = ctx->extra_certs;
break;
case SSL_CTRL_CLEAR_EXTRA_CHAIN_CERTS:
@@ -3628,6 +3903,28 @@ long ssl3_ctx_ctrl(SSL_CTX *ctx, int cmd, long larg, void *parg)
}
break;
+ case SSL_CTRL_CHAIN:
+ if (larg)
+ return ssl_cert_set1_chain(ctx->cert, (STACK_OF(X509) *)parg);
+ else
+ return ssl_cert_set0_chain(ctx->cert, (STACK_OF(X509) *)parg);
+
+ case SSL_CTRL_CHAIN_CERT:
+ if (larg)
+ return ssl_cert_add1_chain_cert(ctx->cert, (X509 *)parg);
+ else
+ return ssl_cert_add0_chain_cert(ctx->cert, (X509 *)parg);
+
+ case SSL_CTRL_GET_CHAIN_CERTS:
+ *(STACK_OF(X509) **)parg = ctx->cert->key->chain;
+ break;
+
+ case SSL_CTRL_SELECT_CURRENT_CERT:
+ return ssl_cert_select_current(ctx->cert, (X509 *)parg);
+
+ case SSL_CTRL_SET_CURRENT_CERT:
+ return ssl_cert_set_current(ctx->cert, larg);
+
default:
return (0);
}
@@ -3702,7 +3999,6 @@ long ssl3_ctx_callback_ctrl(SSL_CTX *ctx, int cmd, void (*fp) (void))
break;
# endif
#endif
-
default:
return (0);
}
@@ -3726,10 +4022,7 @@ const SSL_CIPHER *ssl3_get_cipher_by_char(const unsigned char *p)
if (cp == NULL)
fprintf(stderr, "Unknown cipher ID %x\n", (p[0] << 8) | p[1]);
#endif
- if (cp == NULL || cp->valid == 0)
- return NULL;
- else
- return cp;
+ return cp;
}
int ssl3_put_cipher_by_char(const SSL_CIPHER *c, unsigned char *p)
@@ -3752,11 +4045,6 @@ SSL_CIPHER *ssl3_choose_cipher(SSL *s, STACK_OF(SSL_CIPHER) *clnt,
SSL_CIPHER *c, *ret = NULL;
STACK_OF(SSL_CIPHER) *prio, *allow;
int i, ii, ok;
-#if !defined(OPENSSL_NO_TLSEXT) && !defined(OPENSSL_NO_EC)
- unsigned int j;
- int ec_ok, ec_nid;
- unsigned char ec_search1 = 0, ec_search2 = 0;
-#endif
CERT *cert;
unsigned long alg_k, alg_a, mask_k, mask_a, emask_k, emask_a;
@@ -3789,7 +4077,7 @@ SSL_CIPHER *ssl3_choose_cipher(SSL *s, STACK_OF(SSL_CIPHER) *clnt,
}
#endif
- if (s->options & SSL_OP_CIPHER_SERVER_PREFERENCE) {
+ if (s->options & SSL_OP_CIPHER_SERVER_PREFERENCE || tls1_suiteb(s)) {
prio = srvr;
allow = clnt;
} else {
@@ -3797,12 +4085,13 @@ SSL_CIPHER *ssl3_choose_cipher(SSL *s, STACK_OF(SSL_CIPHER) *clnt,
allow = srvr;
}
+ tls1_set_cert_validity(s);
+
for (i = 0; i < sk_SSL_CIPHER_num(prio); i++) {
c = sk_SSL_CIPHER_value(prio, i);
- /* Skip TLS v1.2 only ciphersuites if lower than v1.2 */
- if ((c->algorithm_ssl & SSL_TLSV1_2) &&
- (TLS1_get_version(s) < TLS1_2_VERSION))
+ /* Skip TLS v1.2 only ciphersuites if not supported */
+ if ((c->algorithm_ssl & SSL_TLSV1_2) && !SSL_USE_TLS1_2_CIPHERS(s))
continue;
ssl_set_cert_masks(cert, c);
@@ -3857,194 +4146,13 @@ SSL_CIPHER *ssl3_choose_cipher(SSL *s, STACK_OF(SSL_CIPHER) *clnt,
#ifndef OPENSSL_NO_TLSEXT
# ifndef OPENSSL_NO_EC
- if (
- /*
- * if we are considering an ECC cipher suite that uses our
- * certificate
- */
- (alg_a & SSL_aECDSA || alg_a & SSL_aECDH)
- /* and we have an ECC certificate */
- && (s->cert->pkeys[SSL_PKEY_ECC].x509 != NULL)
- /*
- * and the client specified a Supported Point Formats
- * extension
- */
- && ((s->session->tlsext_ecpointformatlist_length > 0)
- && (s->session->tlsext_ecpointformatlist != NULL))
- /* and our certificate's point is compressed */
- && ((s->cert->pkeys[SSL_PKEY_ECC].x509->cert_info != NULL)
- && (s->cert->pkeys[SSL_PKEY_ECC].x509->cert_info->key !=
- NULL)
- && (s->cert->pkeys[SSL_PKEY_ECC].x509->cert_info->
- key->public_key != NULL)
- && (s->cert->pkeys[SSL_PKEY_ECC].x509->cert_info->
- key->public_key->data != NULL)
- &&
- ((*
- (s->cert->pkeys[SSL_PKEY_ECC].x509->cert_info->
- key->public_key->data) == POINT_CONVERSION_COMPRESSED)
- ||
- (*
- (s->cert->pkeys[SSL_PKEY_ECC].x509->cert_info->
- key->public_key->data) ==
- POINT_CONVERSION_COMPRESSED + 1)
- )
- )
- ) {
- ec_ok = 0;
- /*
- * if our certificate's curve is over a field type that the
- * client does not support then do not allow this cipher suite to
- * be negotiated
- */
- if ((s->cert->pkeys[SSL_PKEY_ECC].privatekey->pkey.ec != NULL)
- && (s->cert->pkeys[SSL_PKEY_ECC].privatekey->pkey.ec->group !=
- NULL)
- && (s->cert->pkeys[SSL_PKEY_ECC].privatekey->pkey.ec->
- group->meth != NULL)
- &&
- (EC_METHOD_get_field_type
- (s->cert->pkeys[SSL_PKEY_ECC].privatekey->pkey.ec->
- group->meth) == NID_X9_62_prime_field)
- ) {
- for (j = 0; j < s->session->tlsext_ecpointformatlist_length;
- j++) {
- if (s->session->tlsext_ecpointformatlist[j] ==
- TLSEXT_ECPOINTFORMAT_ansiX962_compressed_prime) {
- ec_ok = 1;
- break;
- }
- }
- } else
- if (EC_METHOD_get_field_type
- (s->cert->pkeys[SSL_PKEY_ECC].privatekey->pkey.ec->
- group->meth) == NID_X9_62_characteristic_two_field) {
- for (j = 0; j < s->session->tlsext_ecpointformatlist_length;
- j++) {
- if (s->session->tlsext_ecpointformatlist[j] ==
- TLSEXT_ECPOINTFORMAT_ansiX962_compressed_char2) {
- ec_ok = 1;
- break;
- }
- }
- }
- ok = ok && ec_ok;
- }
- if (
- /*
- * if we are considering an ECC cipher suite that uses our
- * certificate
- */
- (alg_a & SSL_aECDSA || alg_a & SSL_aECDH)
- /* and we have an ECC certificate */
- && (s->cert->pkeys[SSL_PKEY_ECC].x509 != NULL)
- /*
- * and the client specified an EllipticCurves extension
- */
- && ((s->session->tlsext_ellipticcurvelist_length > 0)
- && (s->session->tlsext_ellipticcurvelist != NULL))
- ) {
- ec_ok = 0;
- if ((s->cert->pkeys[SSL_PKEY_ECC].privatekey->pkey.ec != NULL)
- && (s->cert->pkeys[SSL_PKEY_ECC].privatekey->pkey.ec->group !=
- NULL)
- ) {
- ec_nid =
- EC_GROUP_get_curve_name(s->cert->
- pkeys[SSL_PKEY_ECC].privatekey->
- pkey.ec->group);
- if ((ec_nid == 0)
- && (s->cert->pkeys[SSL_PKEY_ECC].privatekey->pkey.
- ec->group->meth != NULL)
- ) {
- if (EC_METHOD_get_field_type
- (s->cert->pkeys[SSL_PKEY_ECC].privatekey->pkey.
- ec->group->meth) == NID_X9_62_prime_field) {
- ec_search1 = 0xFF;
- ec_search2 = 0x01;
- } else
- if (EC_METHOD_get_field_type
- (s->cert->pkeys[SSL_PKEY_ECC].privatekey->
- pkey.ec->group->meth) ==
- NID_X9_62_characteristic_two_field) {
- ec_search1 = 0xFF;
- ec_search2 = 0x02;
- }
- } else {
- ec_search1 = 0x00;
- ec_search2 = tls1_ec_nid2curve_id(ec_nid);
- }
- if ((ec_search1 != 0) || (ec_search2 != 0)) {
- for (j = 0;
- j < s->session->tlsext_ellipticcurvelist_length / 2;
- j++) {
- if ((s->session->tlsext_ellipticcurvelist[2 * j] ==
- ec_search1)
- && (s->session->tlsext_ellipticcurvelist[2 * j +
- 1] ==
- ec_search2)) {
- ec_ok = 1;
- break;
- }
- }
- }
- }
- ok = ok && ec_ok;
- }
# ifndef OPENSSL_NO_ECDH
- if (
- /*
- * if we are considering an ECC cipher suite that uses an
- * ephemeral EC key
- */
- (alg_k & SSL_kEECDH)
- /* and we have an ephemeral EC key */
- && (s->cert->ecdh_tmp != NULL)
- /*
- * and the client specified an EllipticCurves extension
- */
- && ((s->session->tlsext_ellipticcurvelist_length > 0)
- && (s->session->tlsext_ellipticcurvelist != NULL))
- ) {
- ec_ok = 0;
- if (s->cert->ecdh_tmp->group != NULL) {
- ec_nid = EC_GROUP_get_curve_name(s->cert->ecdh_tmp->group);
- if ((ec_nid == 0)
- && (s->cert->ecdh_tmp->group->meth != NULL)
- ) {
- if (EC_METHOD_get_field_type
- (s->cert->ecdh_tmp->group->meth) ==
- NID_X9_62_prime_field) {
- ec_search1 = 0xFF;
- ec_search2 = 0x01;
- } else
- if (EC_METHOD_get_field_type
- (s->cert->ecdh_tmp->group->meth) ==
- NID_X9_62_characteristic_two_field) {
- ec_search1 = 0xFF;
- ec_search2 = 0x02;
- }
- } else {
- ec_search1 = 0x00;
- ec_search2 = tls1_ec_nid2curve_id(ec_nid);
- }
- if ((ec_search1 != 0) || (ec_search2 != 0)) {
- for (j = 0;
- j < s->session->tlsext_ellipticcurvelist_length / 2;
- j++) {
- if ((s->session->tlsext_ellipticcurvelist[2 * j] ==
- ec_search1)
- && (s->session->tlsext_ellipticcurvelist[2 * j +
- 1] ==
- ec_search2)) {
- ec_ok = 1;
- break;
- }
- }
- }
- }
- ok = ok && ec_ok;
- }
+ /*
+ * if we are considering an ECC cipher suite that uses an ephemeral
+ * EC key check it
+ */
+ if (alg_k & SSL_kEECDH)
+ ok = ok && tls1_check_ec_tmp_key(s, c->id);
# endif /* OPENSSL_NO_ECDH */
# endif /* OPENSSL_NO_EC */
#endif /* OPENSSL_NO_TLSEXT */
@@ -4071,8 +4179,41 @@ SSL_CIPHER *ssl3_choose_cipher(SSL *s, STACK_OF(SSL_CIPHER) *clnt,
int ssl3_get_req_cert_type(SSL *s, unsigned char *p)
{
int ret = 0;
+ const unsigned char *sig;
+ size_t i, siglen;
+ int have_rsa_sign = 0, have_dsa_sign = 0;
+#ifndef OPENSSL_NO_ECDSA
+ int have_ecdsa_sign = 0;
+#endif
+ int nostrict = 1;
unsigned long alg_k;
+ /* If we have custom certificate types set, use them */
+ if (s->cert->ctypes) {
+ memcpy(p, s->cert->ctypes, s->cert->ctype_num);
+ return (int)s->cert->ctype_num;
+ }
+ /* get configured sigalgs */
+ siglen = tls12_get_psigalgs(s, &sig);
+ if (s->cert->cert_flags & SSL_CERT_FLAGS_CHECK_TLS_STRICT)
+ nostrict = 0;
+ for (i = 0; i < siglen; i += 2, sig += 2) {
+ switch (sig[1]) {
+ case TLSEXT_signature_rsa:
+ have_rsa_sign = 1;
+ break;
+
+ case TLSEXT_signature_dsa:
+ have_dsa_sign = 1;
+ break;
+#ifndef OPENSSL_NO_ECDSA
+ case TLSEXT_signature_ecdsa:
+ have_ecdsa_sign = 1;
+ break;
+#endif
+ }
+ }
+
alg_k = s->s3->tmp.new_cipher->algorithm_mkey;
#ifndef OPENSSL_NO_GOST
@@ -4088,10 +4229,16 @@ int ssl3_get_req_cert_type(SSL *s, unsigned char *p)
#ifndef OPENSSL_NO_DH
if (alg_k & (SSL_kDHr | SSL_kEDH)) {
# ifndef OPENSSL_NO_RSA
- p[ret++] = SSL3_CT_RSA_FIXED_DH;
+ /*
+ * Since this refers to a certificate signed with an RSA algorithm,
+ * only check for rsa signing in strict mode.
+ */
+ if (nostrict || have_rsa_sign)
+ p[ret++] = SSL3_CT_RSA_FIXED_DH;
# endif
# ifndef OPENSSL_NO_DSA
- p[ret++] = SSL3_CT_DSS_FIXED_DH;
+ if (nostrict || have_dsa_sign)
+ p[ret++] = SSL3_CT_DSS_FIXED_DH;
# endif
}
if ((s->version == SSL3_VERSION) &&
@@ -4105,15 +4252,19 @@ int ssl3_get_req_cert_type(SSL *s, unsigned char *p)
}
#endif /* !OPENSSL_NO_DH */
#ifndef OPENSSL_NO_RSA
- p[ret++] = SSL3_CT_RSA_SIGN;
+ if (have_rsa_sign)
+ p[ret++] = SSL3_CT_RSA_SIGN;
#endif
#ifndef OPENSSL_NO_DSA
- p[ret++] = SSL3_CT_DSS_SIGN;
+ if (have_dsa_sign)
+ p[ret++] = SSL3_CT_DSS_SIGN;
#endif
#ifndef OPENSSL_NO_ECDH
if ((alg_k & (SSL_kECDHr | SSL_kECDHe)) && (s->version >= TLS1_VERSION)) {
- p[ret++] = TLS_CT_RSA_FIXED_ECDH;
- p[ret++] = TLS_CT_ECDSA_FIXED_ECDH;
+ if (nostrict || have_rsa_sign)
+ p[ret++] = TLS_CT_RSA_FIXED_ECDH;
+ if (nostrict || have_ecdsa_sign)
+ p[ret++] = TLS_CT_ECDSA_FIXED_ECDH;
}
#endif
@@ -4123,12 +4274,31 @@ int ssl3_get_req_cert_type(SSL *s, unsigned char *p)
* need to check for SSL_kECDH or SSL_kEECDH
*/
if (s->version >= TLS1_VERSION) {
- p[ret++] = TLS_CT_ECDSA_SIGN;
+ if (have_ecdsa_sign)
+ p[ret++] = TLS_CT_ECDSA_SIGN;
}
#endif
return (ret);
}
+static int ssl3_set_req_cert_type(CERT *c, const unsigned char *p, size_t len)
+{
+ if (c->ctypes) {
+ OPENSSL_free(c->ctypes);
+ c->ctypes = NULL;
+ }
+ if (!p || !len)
+ return 1;
+ if (len > 0xff)
+ return 0;
+ c->ctypes = OPENSSL_malloc(len);
+ if (!c->ctypes)
+ return 0;
+ memcpy(c->ctypes, p, len);
+ c->ctype_num = len;
+ return 1;
+}
+
int ssl3_shutdown(SSL *s)
{
int ret;
@@ -4310,14 +4480,14 @@ int ssl3_renegotiate_check(SSL *s)
}
/*
- * If we are using TLS v1.2 or later and default SHA1+MD5 algorithms switch
- * to new SHA256 PRF and handshake macs
+ * If we are using default SHA1+MD5 algorithms switch to new SHA256 PRF and
+ * handshake macs if required.
*/
long ssl_get_algorithm2(SSL *s)
{
long alg2 = s->s3->tmp.new_cipher->algorithm2;
- if (s->method->version == TLS1_2_VERSION &&
- alg2 == (SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF))
+ if (s->method->ssl3_enc->enc_flags & SSL_ENC_FLAG_SHA256_PRF
+ && alg2 == (SSL_HANDSHAKE_MAC_DEFAULT | TLS1_PRF))
return SSL_HANDSHAKE_MAC_SHA256 | TLS1_PRF_SHA256;
return alg2;
}
diff --git a/crypto/openssl/ssl/s3_pkt.c b/crypto/openssl/ssl/s3_pkt.c
index 25cf929..603c285 100644
--- a/crypto/openssl/ssl/s3_pkt.c
+++ b/crypto/openssl/ssl/s3_pkt.c
@@ -118,6 +118,20 @@
#include <openssl/buffer.h>
#include <openssl/rand.h>
+#ifndef EVP_CIPH_FLAG_TLS1_1_MULTIBLOCK
+# define EVP_CIPH_FLAG_TLS1_1_MULTIBLOCK 0
+#endif
+
+#if defined(OPENSSL_SMALL_FOOTPRINT) || \
+ !( defined(AES_ASM) && ( \
+ defined(__x86_64) || defined(__x86_64__) || \
+ defined(_M_AMD64) || defined(_M_X64) || \
+ defined(__INTEL__) ) \
+ )
+# undef EVP_CIPH_FLAG_TLS1_1_MULTIBLOCK
+# define EVP_CIPH_FLAG_TLS1_1_MULTIBLOCK 0
+#endif
+
static int do_ssl3_write(SSL *s, int type, const unsigned char *buf,
unsigned int len, int create_empty_fragment);
static int ssl3_get_record(SSL *s);
@@ -183,7 +197,7 @@ int ssl3_read_n(SSL *s, int n, int max, int extend)
* operation returns the whole packet at once (as long as it fits into
* the buffer).
*/
- if (SSL_version(s) == DTLS1_VERSION || SSL_version(s) == DTLS1_BAD_VER) {
+ if (SSL_IS_DTLS(s)) {
if (left == 0 && extend)
return 0;
if (left > 0 && n > left)
@@ -246,9 +260,7 @@ int ssl3_read_n(SSL *s, int n, int max, int extend)
if (i <= 0) {
rb->left = left;
- if (s->mode & SSL_MODE_RELEASE_BUFFERS &&
- SSL_version(s) != DTLS1_VERSION
- && SSL_version(s) != DTLS1_BAD_VER)
+ if (s->mode & SSL_MODE_RELEASE_BUFFERS && !SSL_IS_DTLS(s))
if (len + left == 0)
ssl3_release_read_buffer(s);
return (i);
@@ -259,8 +271,7 @@ int ssl3_read_n(SSL *s, int n, int max, int extend)
* underlying transport protocol is message oriented as opposed to
* byte oriented as in the TLS case.
*/
- if (SSL_version(s) == DTLS1_VERSION
- || SSL_version(s) == DTLS1_BAD_VER) {
+ if (SSL_IS_DTLS(s)) {
if (n > left)
n = left; /* makes the while condition false */
}
@@ -331,6 +342,9 @@ static int ssl3_get_record(SSL *s)
s->rstate = SSL_ST_READ_BODY;
p = s->packet;
+ if (s->msg_callback)
+ s->msg_callback(0, 0, SSL3_RT_HEADER, p, 5, s,
+ s->msg_callback_arg);
/* Pull apart the header into the SSL3_RECORD */
rr->type = *(p++);
@@ -621,8 +635,13 @@ int ssl3_do_compress(SSL *ssl)
int ssl3_write_bytes(SSL *s, int type, const void *buf_, int len)
{
const unsigned char *buf = buf_;
+ int tot;
unsigned int n, nw;
- int i, tot;
+#if !defined(OPENSSL_NO_MULTIBLOCK) && EVP_CIPH_FLAG_TLS1_1_MULTIBLOCK
+ unsigned int max_send_fragment;
+#endif
+ SSL3_BUFFER *wb = &(s->s3->wbuf);
+ int i;
s->rwstate = SSL_NOTHING;
OPENSSL_assert(s->s3->wnum <= INT_MAX);
@@ -653,6 +672,154 @@ int ssl3_write_bytes(SSL *s, int type, const void *buf_, int len)
return (-1);
}
+ /*
+ * first check if there is a SSL3_BUFFER still being written out. This
+ * will happen with non blocking IO
+ */
+ if (wb->left != 0) {
+ i = ssl3_write_pending(s, type, &buf[tot], s->s3->wpend_tot);
+ if (i <= 0) {
+ /* XXX should we ssl3_release_write_buffer if i<0? */
+ s->s3->wnum = tot;
+ return i;
+ }
+ tot += i; /* this might be last fragment */
+ }
+#if !defined(OPENSSL_NO_MULTIBLOCK) && EVP_CIPH_FLAG_TLS1_1_MULTIBLOCK
+ /*
+ * Depending on platform multi-block can deliver several *times*
+ * better performance. Downside is that it has to allocate
+ * jumbo buffer to accomodate up to 8 records, but the
+ * compromise is considered worthy.
+ */
+ if (type == SSL3_RT_APPLICATION_DATA &&
+ len >= 4 * (int)(max_send_fragment = s->max_send_fragment) &&
+ s->compress == NULL && s->msg_callback == NULL &&
+ SSL_USE_EXPLICIT_IV(s) &&
+ EVP_CIPHER_flags(s->enc_write_ctx->cipher) &
+ EVP_CIPH_FLAG_TLS1_1_MULTIBLOCK) {
+ unsigned char aad[13];
+ EVP_CTRL_TLS1_1_MULTIBLOCK_PARAM mb_param;
+ int packlen;
+
+ /* minimize address aliasing conflicts */
+ if ((max_send_fragment & 0xfff) == 0)
+ max_send_fragment -= 512;
+
+ if (tot == 0 || wb->buf == NULL) { /* allocate jumbo buffer */
+ ssl3_release_write_buffer(s);
+
+ packlen = EVP_CIPHER_CTX_ctrl(s->enc_write_ctx,
+ EVP_CTRL_TLS1_1_MULTIBLOCK_MAX_BUFSIZE,
+ max_send_fragment, NULL);
+
+ if (len >= 8 * (int)max_send_fragment)
+ packlen *= 8;
+ else
+ packlen *= 4;
+
+ wb->buf = OPENSSL_malloc(packlen);
+ if (!wb->buf) {
+ SSLerr(SSL_F_SSL3_WRITE_BYTES, ERR_R_MALLOC_FAILURE);
+ return -1;
+ }
+ wb->len = packlen;
+ } else if (tot == len) { /* done? */
+ OPENSSL_free(wb->buf); /* free jumbo buffer */
+ wb->buf = NULL;
+ return tot;
+ }
+
+ n = (len - tot);
+ for (;;) {
+ if (n < 4 * max_send_fragment) {
+ OPENSSL_free(wb->buf); /* free jumbo buffer */
+ wb->buf = NULL;
+ break;
+ }
+
+ if (s->s3->alert_dispatch) {
+ i = s->method->ssl_dispatch_alert(s);
+ if (i <= 0) {
+ s->s3->wnum = tot;
+ return i;
+ }
+ }
+
+ if (n >= 8 * max_send_fragment)
+ nw = max_send_fragment * (mb_param.interleave = 8);
+ else
+ nw = max_send_fragment * (mb_param.interleave = 4);
+
+ memcpy(aad, s->s3->write_sequence, 8);
+ aad[8] = type;
+ aad[9] = (unsigned char)(s->version >> 8);
+ aad[10] = (unsigned char)(s->version);
+ aad[11] = 0;
+ aad[12] = 0;
+ mb_param.out = NULL;
+ mb_param.inp = aad;
+ mb_param.len = nw;
+
+ packlen = EVP_CIPHER_CTX_ctrl(s->enc_write_ctx,
+ EVP_CTRL_TLS1_1_MULTIBLOCK_AAD,
+ sizeof(mb_param), &mb_param);
+
+ if (packlen <= 0 || packlen > (int)wb->len) { /* never happens */
+ OPENSSL_free(wb->buf); /* free jumbo buffer */
+ wb->buf = NULL;
+ break;
+ }
+
+ mb_param.out = wb->buf;
+ mb_param.inp = &buf[tot];
+ mb_param.len = nw;
+
+ if (EVP_CIPHER_CTX_ctrl(s->enc_write_ctx,
+ EVP_CTRL_TLS1_1_MULTIBLOCK_ENCRYPT,
+ sizeof(mb_param), &mb_param) <= 0)
+ return -1;
+
+ s->s3->write_sequence[7] += mb_param.interleave;
+ if (s->s3->write_sequence[7] < mb_param.interleave) {
+ int j = 6;
+ while (j >= 0 && (++s->s3->write_sequence[j--]) == 0) ;
+ }
+
+ wb->offset = 0;
+ wb->left = packlen;
+
+ s->s3->wpend_tot = nw;
+ s->s3->wpend_buf = &buf[tot];
+ s->s3->wpend_type = type;
+ s->s3->wpend_ret = nw;
+
+ i = ssl3_write_pending(s, type, &buf[tot], nw);
+ if (i <= 0) {
+ if (i < 0 && (!s->wbio || !BIO_should_retry(s->wbio))) {
+ OPENSSL_free(wb->buf);
+ wb->buf = NULL;
+ }
+ s->s3->wnum = tot;
+ return i;
+ }
+ if (i == (int)n) {
+ OPENSSL_free(wb->buf); /* free jumbo buffer */
+ wb->buf = NULL;
+ return tot + i;
+ }
+ n -= i;
+ tot += i;
+ }
+ } else
+#endif
+ if (tot == len) { /* done? */
+ if (s->mode & SSL_MODE_RELEASE_BUFFERS && !SSL_IS_DTLS(s))
+ ssl3_release_write_buffer(s);
+
+ return tot;
+ }
+
n = (len - tot);
for (;;) {
if (n > s->max_send_fragment)
@@ -662,6 +829,7 @@ int ssl3_write_bytes(SSL *s, int type, const void *buf_, int len)
i = do_ssl3_write(s, type, &(buf[tot]), nw, 0);
if (i <= 0) {
+ /* XXX should we ssl3_release_write_buffer if i<0? */
s->s3->wnum = tot;
return i;
}
@@ -675,6 +843,10 @@ int ssl3_write_bytes(SSL *s, int type, const void *buf_, int len)
*/
s->s3->empty_fragment_done = 0;
+ if ((i == (int)n) && s->mode & SSL_MODE_RELEASE_BUFFERS &&
+ !SSL_IS_DTLS(s))
+ ssl3_release_write_buffer(s);
+
return tot + i;
}
@@ -809,8 +981,8 @@ static int do_ssl3_write(SSL *s, int type, const unsigned char *buf,
/* field where we are to write out packet length */
plen = p;
p += 2;
- /* Explicit IV length, block ciphers and TLS version 1.1 or later */
- if (s->enc_write_ctx && s->version >= TLS1_1_VERSION) {
+ /* Explicit IV length, block ciphers appropriate version flag */
+ if (s->enc_write_ctx && SSL_USE_EXPLICIT_IV(s)) {
int mode = EVP_CIPHER_CTX_mode(s->enc_write_ctx);
if (mode == EVP_CIPH_CBC_MODE) {
eivlen = EVP_CIPHER_CTX_iv_length(s->enc_write_ctx);
@@ -873,6 +1045,10 @@ static int do_ssl3_write(SSL *s, int type, const unsigned char *buf,
/* record length after mac and block padding */
s2n(wr->length, plen);
+ if (s->msg_callback)
+ s->msg_callback(1, 0, SSL3_RT_HEADER, plen - 5, 5, s,
+ s->msg_callback_arg);
+
/*
* we should now have wr->data pointing to the encrypted data, which is
* wr->length long
@@ -936,10 +1112,6 @@ int ssl3_write_pending(SSL *s, int type, const unsigned char *buf,
if (i == wb->left) {
wb->left = 0;
wb->offset += i;
- if (s->mode & SSL_MODE_RELEASE_BUFFERS &&
- SSL_version(s) != DTLS1_VERSION
- && SSL_version(s) != DTLS1_BAD_VER)
- ssl3_release_write_buffer(s);
s->rwstate = SSL_NOTHING;
return (s->s3->wpend_ret);
} else if (i <= 0) {
diff --git a/crypto/openssl/ssl/s3_srvr.c b/crypto/openssl/ssl/s3_srvr.c
index 3a5f71d..acd3b9e 100644
--- a/crypto/openssl/ssl/s3_srvr.c
+++ b/crypto/openssl/ssl/s3_srvr.c
@@ -293,7 +293,7 @@ int ssl3_accept(SSL *s)
}
s->init_num = 0;
- s->s3->flags &= ~SSL3_FLAGS_SGC_RESTART_DONE;
+ s->s3->flags &= ~TLS1_FLAGS_SKIP_CERT_VERIFY;
s->s3->flags &= ~SSL3_FLAGS_CCS_OK;
/*
* Should have been reset by ssl3_get_finished, too.
@@ -360,12 +360,12 @@ int ssl3_accept(SSL *s)
case SSL3_ST_SR_CLNT_HELLO_C:
s->shutdown = 0;
- if (s->rwstate != SSL_X509_LOOKUP) {
- ret = ssl3_get_client_hello(s);
- if (ret <= 0)
- goto end;
- }
+ ret = ssl3_get_client_hello(s);
+ if (ret <= 0)
+ goto end;
#ifndef OPENSSL_NO_SRP
+ s->state = SSL3_ST_SR_CLNT_HELLO_D;
+ case SSL3_ST_SR_CLNT_HELLO_D:
{
int al;
if ((ret = ssl_check_srp_ext_ClientHello(s, &al)) < 0) {
@@ -477,7 +477,7 @@ int ssl3_accept(SSL *s)
/* SRP: send ServerKeyExchange */
|| (alg_k & SSL_kSRP)
#endif
- || (alg_k & (SSL_kDHr | SSL_kDHd | SSL_kEDH))
+ || (alg_k & SSL_kEDH)
|| (alg_k & SSL_kEECDH)
|| ((alg_k & SSL_kRSA)
&& (s->cert->pkeys[SSL_PKEY_RSA_ENC].privatekey == NULL
@@ -590,21 +590,13 @@ int ssl3_accept(SSL *s)
case SSL3_ST_SR_CERT_A:
case SSL3_ST_SR_CERT_B:
- /* Check for second client hello (MS SGC) */
- ret = ssl3_check_client_hello(s);
- if (ret <= 0)
- goto end;
- if (ret == 2)
- s->state = SSL3_ST_SR_CLNT_HELLO_C;
- else {
- if (s->s3->tmp.cert_request) {
- ret = ssl3_get_client_certificate(s);
- if (ret <= 0)
- goto end;
- }
- s->init_num = 0;
- s->state = SSL3_ST_SR_KEY_EXCH_A;
+ if (s->s3->tmp.cert_request) {
+ ret = ssl3_get_client_certificate(s);
+ if (ret <= 0)
+ goto end;
}
+ s->init_num = 0;
+ s->state = SSL3_ST_SR_KEY_EXCH_A;
break;
case SSL3_ST_SR_KEY_EXCH_A:
@@ -628,13 +620,13 @@ int ssl3_accept(SSL *s)
s->state = SSL3_ST_SR_FINISHED_A;
#endif
s->init_num = 0;
- } else if (TLS1_get_version(s) >= TLS1_2_VERSION) {
+ } else if (SSL_USE_SIGALGS(s)) {
s->state = SSL3_ST_SR_CERT_VRFY_A;
s->init_num = 0;
if (!s->session->peer)
break;
/*
- * For TLS v1.2 freeze the handshake buffer at this point and
+ * For sigalgs freeze the handshake buffer at this point and
* digest cached records.
*/
if (!s->s3->handshake_buffer) {
@@ -898,86 +890,33 @@ int ssl3_accept(SSL *s)
int ssl3_send_hello_request(SSL *s)
{
- unsigned char *p;
if (s->state == SSL3_ST_SW_HELLO_REQ_A) {
- p = (unsigned char *)s->init_buf->data;
- *(p++) = SSL3_MT_HELLO_REQUEST;
- *(p++) = 0;
- *(p++) = 0;
- *(p++) = 0;
-
+ ssl_set_handshake_header(s, SSL3_MT_HELLO_REQUEST, 0);
s->state = SSL3_ST_SW_HELLO_REQ_B;
- /* number of bytes to write */
- s->init_num = 4;
- s->init_off = 0;
}
/* SSL3_ST_SW_HELLO_REQ_B */
- return (ssl3_do_write(s, SSL3_RT_HANDSHAKE));
-}
-
-int ssl3_check_client_hello(SSL *s)
-{
- int ok;
- long n;
-
- /*
- * this function is called when we really expect a Certificate message,
- * so permit appropriate message length
- */
- n = s->method->ssl_get_message(s,
- SSL3_ST_SR_CERT_A,
- SSL3_ST_SR_CERT_B,
- -1, s->max_cert_list, &ok);
- if (!ok)
- return ((int)n);
- s->s3->tmp.reuse_message = 1;
- if (s->s3->tmp.message_type == SSL3_MT_CLIENT_HELLO) {
- /*
- * We only allow the client to restart the handshake once per
- * negotiation.
- */
- if (s->s3->flags & SSL3_FLAGS_SGC_RESTART_DONE) {
- SSLerr(SSL_F_SSL3_CHECK_CLIENT_HELLO,
- SSL_R_MULTIPLE_SGC_RESTARTS);
- return -1;
- }
- /*
- * Throw away what we have done so far in the current handshake,
- * which will now be aborted. (A full SSL_clear would be too much.)
- */
-#ifndef OPENSSL_NO_DH
- if (s->s3->tmp.dh != NULL) {
- DH_free(s->s3->tmp.dh);
- s->s3->tmp.dh = NULL;
- }
-#endif
-#ifndef OPENSSL_NO_ECDH
- if (s->s3->tmp.ecdh != NULL) {
- EC_KEY_free(s->s3->tmp.ecdh);
- s->s3->tmp.ecdh = NULL;
- }
-#endif
- s->s3->flags |= SSL3_FLAGS_SGC_RESTART_DONE;
- return 2;
- }
- return 1;
+ return ssl_do_write(s);
}
int ssl3_get_client_hello(SSL *s)
{
- int i, j, ok, al, ret = -1;
+ int i, j, ok, al = SSL_AD_INTERNAL_ERROR, ret = -1;
unsigned int cookie_len;
long n;
unsigned long id;
- unsigned char *p, *d, *q;
+ unsigned char *p, *d;
SSL_CIPHER *c;
#ifndef OPENSSL_NO_COMP
+ unsigned char *q;
SSL_COMP *comp = NULL;
#endif
STACK_OF(SSL_CIPHER) *ciphers = NULL;
+ if (s->state == SSL3_ST_SR_CLNT_HELLO_C && !s->first_packet)
+ goto retry_cert;
+
/*
* We do this so that we will respond with our native type. If we are
* TLSv1 and we get SSLv3, we will respond with TLSv1, This down
@@ -1016,8 +955,9 @@ int ssl3_get_client_hello(SSL *s)
s->client_version = (((int)p[0]) << 8) | (int)p[1];
p += 2;
- if ((s->version == DTLS1_VERSION && s->client_version > s->version) ||
- (s->version != DTLS1_VERSION && s->client_version < s->version)) {
+ if (SSL_IS_DTLS(s) ? (s->client_version > s->version &&
+ s->method->version != DTLS_ANY_VERSION)
+ : (s->client_version < s->version)) {
SSLerr(SSL_F_SSL3_GET_CLIENT_HELLO, SSL_R_WRONG_VERSION_NUMBER);
if ((s->client_version >> 8) == SSL3_VERSION_MAJOR &&
!s->enc_write_ctx && !s->write_hash) {
@@ -1107,7 +1047,7 @@ int ssl3_get_client_hello(SSL *s)
p += j;
- if (s->version == DTLS1_VERSION || s->version == DTLS1_BAD_VER) {
+ if (SSL_IS_DTLS(s)) {
/* cookie stuff */
if (p + 1 > d + n) {
al = SSL_AD_DECODE_ERROR;
@@ -1155,11 +1095,36 @@ int ssl3_get_client_hello(SSL *s)
SSLerr(SSL_F_SSL3_GET_CLIENT_HELLO, SSL_R_COOKIE_MISMATCH);
goto f_err;
}
-
- ret = 2;
+ /* Set to -2 so if successful we return 2 */
+ ret = -2;
}
p += cookie_len;
+ if (s->method->version == DTLS_ANY_VERSION) {
+ /* Select version to use */
+ if (s->client_version <= DTLS1_2_VERSION &&
+ !(s->options & SSL_OP_NO_DTLSv1_2)) {
+ s->version = DTLS1_2_VERSION;
+ s->method = DTLSv1_2_server_method();
+ } else if (tls1_suiteb(s)) {
+ SSLerr(SSL_F_SSL3_GET_CLIENT_HELLO,
+ SSL_R_ONLY_DTLS_1_2_ALLOWED_IN_SUITEB_MODE);
+ s->version = s->client_version;
+ al = SSL_AD_PROTOCOL_VERSION;
+ goto f_err;
+ } else if (s->client_version <= DTLS1_VERSION &&
+ !(s->options & SSL_OP_NO_DTLSv1)) {
+ s->version = DTLS1_VERSION;
+ s->method = DTLSv1_server_method();
+ } else {
+ SSLerr(SSL_F_SSL3_GET_CLIENT_HELLO,
+ SSL_R_WRONG_VERSION_NUMBER);
+ s->version = s->client_version;
+ al = SSL_AD_PROTOCOL_VERSION;
+ goto f_err;
+ }
+ s->session->ssl_version = s->version;
+ }
}
if (p + 2 > d + n) {
@@ -1248,7 +1213,9 @@ int ssl3_get_client_hello(SSL *s)
SSLerr(SSL_F_SSL3_GET_CLIENT_HELLO, SSL_R_LENGTH_MISMATCH);
goto f_err;
}
+#ifndef OPENSSL_NO_COMP
q = p;
+#endif
for (j = 0; j < i; j++) {
if (p[j] == 0)
break;
@@ -1264,16 +1231,11 @@ int ssl3_get_client_hello(SSL *s)
#ifndef OPENSSL_NO_TLSEXT
/* TLS extensions */
if (s->version >= SSL3_VERSION) {
- if (!ssl_parse_clienthello_tlsext(s, &p, d, n, &al)) {
- /* 'al' set by ssl_parse_clienthello_tlsext */
+ if (!ssl_parse_clienthello_tlsext(s, &p, d, n)) {
SSLerr(SSL_F_SSL3_GET_CLIENT_HELLO, SSL_R_PARSE_TLSEXT);
- goto f_err;
+ goto err;
}
}
- if (ssl_check_clienthello_tlsext_early(s) <= 0) {
- SSLerr(SSL_F_SSL3_GET_CLIENT_HELLO, SSL_R_CLIENTHELLO_TLSEXT);
- goto err;
- }
/*
* Check if we want to use external pre-shared secret for this handshake
@@ -1285,7 +1247,6 @@ int ssl3_get_client_hello(SSL *s)
unsigned char *pos;
pos = s->s3->server_random;
if (ssl_fill_hello_random(s, 1, pos, SSL3_RANDOM_SIZE) <= 0) {
- al = SSL_AD_INTERNAL_ERROR;
goto f_err;
}
}
@@ -1344,7 +1305,6 @@ int ssl3_get_client_hello(SSL *s)
/* Perform sanity checks on resumed compression algorithm */
/* Can't disable compression */
if (s->options & SSL_OP_NO_COMPRESSION) {
- al = SSL_AD_INTERNAL_ERROR;
SSLerr(SSL_F_SSL3_GET_CLIENT_HELLO,
SSL_R_INCONSISTENT_COMPRESSION);
goto f_err;
@@ -1358,7 +1318,6 @@ int ssl3_get_client_hello(SSL *s)
}
}
if (s->s3->tmp.new_compression == NULL) {
- al = SSL_AD_INTERNAL_ERROR;
SSLerr(SSL_F_SSL3_GET_CLIENT_HELLO,
SSL_R_INVALID_COMPRESSION_ALGORITHM);
goto f_err;
@@ -1404,7 +1363,6 @@ int ssl3_get_client_hello(SSL *s)
* using compression.
*/
if (s->session->compress_meth != 0) {
- al = SSL_AD_INTERNAL_ERROR;
SSLerr(SSL_F_SSL3_GET_CLIENT_HELLO, SSL_R_INCONSISTENT_COMPRESSION);
goto f_err;
}
@@ -1429,6 +1387,25 @@ int ssl3_get_client_hello(SSL *s)
goto f_err;
}
ciphers = NULL;
+ if (!tls1_set_server_sigalgs(s)) {
+ SSLerr(SSL_F_SSL3_GET_CLIENT_HELLO, SSL_R_CLIENTHELLO_TLSEXT);
+ goto err;
+ }
+ /* Let cert callback update server certificates if required */
+ retry_cert:
+ if (s->cert->cert_cb) {
+ int rv = s->cert->cert_cb(s, s->cert->cert_cb_arg);
+ if (rv == 0) {
+ al = SSL_AD_INTERNAL_ERROR;
+ SSLerr(SSL_F_SSL3_GET_CLIENT_HELLO, SSL_R_CERT_CB_ERROR);
+ goto f_err;
+ }
+ if (rv < 0) {
+ s->rwstate = SSL_X509_LOOKUP;
+ return -1;
+ }
+ s->rwstate = SSL_NOTHING;
+ }
c = ssl3_choose_cipher(s, s->session->ciphers, SSL_get_ciphers(s));
if (c == NULL) {
@@ -1464,16 +1441,13 @@ int ssl3_get_client_hello(SSL *s)
s->s3->tmp.new_cipher = s->session->cipher;
}
- if (TLS1_get_version(s) < TLS1_2_VERSION
- || !(s->verify_mode & SSL_VERIFY_PEER)) {
- if (!ssl3_digest_cached_records(s)) {
- al = SSL_AD_INTERNAL_ERROR;
+ if (!SSL_USE_SIGALGS(s) || !(s->verify_mode & SSL_VERIFY_PEER)) {
+ if (!ssl3_digest_cached_records(s))
goto f_err;
- }
}
/*-
- * we now have the following setup.
+ * we now have the following setup.
* client_random
* cipher_list - our prefered list of ciphers
* ciphers - the clients prefered list of ciphers
@@ -1493,7 +1467,7 @@ int ssl3_get_client_hello(SSL *s)
}
if (ret < 0)
- ret = 1;
+ ret = -ret;
if (0) {
f_err:
ssl3_send_alert(s, SSL3_AL_FATAL, al);
@@ -1503,7 +1477,7 @@ int ssl3_get_client_hello(SSL *s)
if (ciphers != NULL)
sk_SSL_CIPHER_free(ciphers);
- return (ret);
+ return ret < 0 ? -1 : ret;
}
int ssl3_send_server_hello(SSL *s)
@@ -1511,6 +1485,7 @@ int ssl3_send_server_hello(SSL *s)
unsigned char *buf;
unsigned char *p, *d;
int i, sl;
+ int al = 0;
unsigned long l;
if (s->state == SSL3_ST_SW_SRVR_HELLO_A) {
@@ -1523,7 +1498,7 @@ int ssl3_send_server_hello(SSL *s)
}
#endif
/* Do the message type and length last */
- d = p = &(buf[4]);
+ d = p = ssl_handshake_start(s);
*(p++) = s->version >> 8;
*(p++) = s->version & 0xff;
@@ -1582,9 +1557,9 @@ int ssl3_send_server_hello(SSL *s)
return -1;
}
if ((p =
- ssl_add_serverhello_tlsext(s, p,
- buf + SSL3_RT_MAX_PLAIN_LENGTH)) ==
- NULL) {
+ ssl_add_serverhello_tlsext(s, p, buf + SSL3_RT_MAX_PLAIN_LENGTH,
+ &al)) == NULL) {
+ ssl3_send_alert(s, SSL3_AL_FATAL, al);
SSLerr(SSL_F_SSL3_SEND_SERVER_HELLO, ERR_R_INTERNAL_ERROR);
s->state = SSL_ST_ERR;
return -1;
@@ -1592,41 +1567,24 @@ int ssl3_send_server_hello(SSL *s)
#endif
/* do the header */
l = (p - d);
- d = buf;
- *(d++) = SSL3_MT_SERVER_HELLO;
- l2n3(l, d);
-
+ ssl_set_handshake_header(s, SSL3_MT_SERVER_HELLO, l);
s->state = SSL3_ST_SW_SRVR_HELLO_B;
- /* number of bytes to write */
- s->init_num = p - buf;
- s->init_off = 0;
}
/* SSL3_ST_SW_SRVR_HELLO_B */
- return (ssl3_do_write(s, SSL3_RT_HANDSHAKE));
+ return ssl_do_write(s);
}
int ssl3_send_server_done(SSL *s)
{
- unsigned char *p;
if (s->state == SSL3_ST_SW_SRVR_DONE_A) {
- p = (unsigned char *)s->init_buf->data;
-
- /* do the header */
- *(p++) = SSL3_MT_SERVER_DONE;
- *(p++) = 0;
- *(p++) = 0;
- *(p++) = 0;
-
+ ssl_set_handshake_header(s, SSL3_MT_SERVER_DONE, 0);
s->state = SSL3_ST_SW_SRVR_DONE_B;
- /* number of bytes to write */
- s->init_num = 4;
- s->init_off = 0;
}
/* SSL3_ST_SW_SRVR_DONE_B */
- return (ssl3_do_write(s, SSL3_RT_HANDSHAKE));
+ return ssl_do_write(s);
}
int ssl3_send_server_key_exchange(SSL *s)
@@ -1751,7 +1709,12 @@ int ssl3_send_server_key_exchange(SSL *s)
const EC_GROUP *group;
ecdhp = cert->ecdh_tmp;
- if ((ecdhp == NULL) && (s->cert->ecdh_tmp_cb != NULL)) {
+ if (s->cert->ecdh_tmp_auto) {
+ /* Get NID of appropriate shared curve */
+ int nid = tls1_shared_curve(s, -2);
+ if (nid != NID_undef)
+ ecdhp = EC_KEY_new_by_curve_name(nid);
+ } else if ((ecdhp == NULL) && s->cert->ecdh_tmp_cb) {
ecdhp = s->cert->ecdh_tmp_cb(s,
SSL_C_IS_EXPORT(s->s3->
tmp.new_cipher),
@@ -1776,7 +1739,9 @@ int ssl3_send_server_key_exchange(SSL *s)
SSLerr(SSL_F_SSL3_SEND_SERVER_KEY_EXCHANGE, ERR_R_ECDH_LIB);
goto err;
}
- if ((ecdh = EC_KEY_dup(ecdhp)) == NULL) {
+ if (s->cert->ecdh_tmp_auto)
+ ecdh = ecdhp;
+ else if ((ecdh = EC_KEY_dup(ecdhp)) == NULL) {
SSLerr(SSL_F_SSL3_SEND_SERVER_KEY_EXCHANGE, ERR_R_ECDH_LIB);
goto err;
}
@@ -1920,12 +1885,11 @@ int ssl3_send_server_key_exchange(SSL *s)
kn = 0;
}
- if (!BUF_MEM_grow_clean(buf, n + 4 + kn)) {
+ if (!BUF_MEM_grow_clean(buf, n + SSL_HM_HEADER_LENGTH(s) + kn)) {
SSLerr(SSL_F_SSL3_SEND_SERVER_KEY_EXCHANGE, ERR_LIB_BUF);
goto err;
}
- d = (unsigned char *)s->init_buf->data;
- p = &(d[4]);
+ d = p = ssl_handshake_start(s);
for (i = 0; i < 4 && r[i] != NULL; i++) {
#ifndef OPENSSL_NO_SRP
@@ -1980,8 +1944,7 @@ int ssl3_send_server_key_exchange(SSL *s)
* points to the space at the end.
*/
#ifndef OPENSSL_NO_RSA
- if (pkey->type == EVP_PKEY_RSA
- && TLS1_get_version(s) < TLS1_2_VERSION) {
+ if (pkey->type == EVP_PKEY_RSA && !SSL_USE_SIGALGS(s)) {
q = md_buf;
j = 0;
for (num = 2; num > 0; num--) {
@@ -1993,7 +1956,7 @@ int ssl3_send_server_key_exchange(SSL *s)
SSL3_RANDOM_SIZE);
EVP_DigestUpdate(&md_ctx, &(s->s3->server_random[0]),
SSL3_RANDOM_SIZE);
- EVP_DigestUpdate(&md_ctx, &(d[4]), n);
+ EVP_DigestUpdate(&md_ctx, d, n);
EVP_DigestFinal_ex(&md_ctx, q, (unsigned int *)&i);
q += i;
j += i;
@@ -2008,10 +1971,8 @@ int ssl3_send_server_key_exchange(SSL *s)
} else
#endif
if (md) {
- /*
- * For TLS1.2 and later send signature algorithm
- */
- if (TLS1_get_version(s) >= TLS1_2_VERSION) {
+ /* send signature algorithm */
+ if (SSL_USE_SIGALGS(s)) {
if (!tls12_get_sigandhash(p, pkey, md)) {
/* Should never happen */
al = SSL_AD_INTERNAL_ERROR;
@@ -2029,7 +1990,7 @@ int ssl3_send_server_key_exchange(SSL *s)
SSL3_RANDOM_SIZE);
EVP_SignUpdate(&md_ctx, &(s->s3->server_random[0]),
SSL3_RANDOM_SIZE);
- EVP_SignUpdate(&md_ctx, &(d[4]), n);
+ EVP_SignUpdate(&md_ctx, d, n);
if (!EVP_SignFinal(&md_ctx, &(p[2]),
(unsigned int *)&i, pkey)) {
SSLerr(SSL_F_SSL3_SEND_SERVER_KEY_EXCHANGE, ERR_LIB_EVP);
@@ -2037,7 +1998,7 @@ int ssl3_send_server_key_exchange(SSL *s)
}
s2n(i, p);
n += i + 2;
- if (TLS1_get_version(s) >= TLS1_2_VERSION)
+ if (SSL_USE_SIGALGS(s))
n += 2;
} else {
/* Is this error check actually needed? */
@@ -2048,19 +2009,12 @@ int ssl3_send_server_key_exchange(SSL *s)
}
}
- *(d++) = SSL3_MT_SERVER_KEY_EXCHANGE;
- l2n3(n, d);
-
- /*
- * we should now have things packed up, so lets send it off
- */
- s->init_num = n + 4;
- s->init_off = 0;
+ ssl_set_handshake_header(s, SSL3_MT_SERVER_KEY_EXCHANGE, n);
}
s->state = SSL3_ST_SW_KEY_EXCH_B;
EVP_MD_CTX_cleanup(&md_ctx);
- return (ssl3_do_write(s, SSL3_RT_HANDSHAKE));
+ return ssl_do_write(s);
f_err:
ssl3_send_alert(s, SSL3_AL_FATAL, al);
err:
@@ -2085,7 +2039,7 @@ int ssl3_send_certificate_request(SSL *s)
if (s->state == SSL3_ST_SW_CERT_REQ_A) {
buf = s->init_buf;
- d = p = (unsigned char *)&(buf->data[4]);
+ d = p = ssl_handshake_start(s);
/* get the list of acceptable cert types */
p++;
@@ -2094,10 +2048,12 @@ int ssl3_send_certificate_request(SSL *s)
p += n;
n++;
- if (TLS1_get_version(s) >= TLS1_2_VERSION) {
- nl = tls12_get_req_sig_algs(s, p + 2);
+ if (SSL_USE_SIGALGS(s)) {
+ const unsigned char *psigs;
+ nl = tls12_get_psigalgs(s, &psigs);
s2n(nl, p);
- p += nl + 2;
+ memcpy(p, psigs, nl);
+ p += nl;
n += nl + 2;
}
@@ -2111,12 +2067,13 @@ int ssl3_send_certificate_request(SSL *s)
for (i = 0; i < sk_X509_NAME_num(sk); i++) {
name = sk_X509_NAME_value(sk, i);
j = i2d_X509_NAME(name, NULL);
- if (!BUF_MEM_grow_clean(buf, 4 + n + j + 2)) {
+ if (!BUF_MEM_grow_clean
+ (buf, SSL_HM_HEADER_LENGTH(s) + n + j + 2)) {
SSLerr(SSL_F_SSL3_SEND_CERTIFICATE_REQUEST,
ERR_R_BUF_LIB);
goto err;
}
- p = (unsigned char *)&(buf->data[4 + n]);
+ p = ssl_handshake_start(s) + n;
if (!(s->options & SSL_OP_NETSCAPE_CA_DN_BUG)) {
s2n(j, p);
i2d_X509_NAME(name, &p);
@@ -2134,39 +2091,32 @@ int ssl3_send_certificate_request(SSL *s)
}
}
/* else no CA names */
- p = (unsigned char *)&(buf->data[4 + off]);
+ p = ssl_handshake_start(s) + off;
s2n(nl, p);
- d = (unsigned char *)buf->data;
- *(d++) = SSL3_MT_CERTIFICATE_REQUEST;
- l2n3(n, d);
+ ssl_set_handshake_header(s, SSL3_MT_CERTIFICATE_REQUEST, n);
- /*
- * we should now have things packed up, so lets send it off
- */
-
- s->init_num = n + 4;
- s->init_off = 0;
#ifdef NETSCAPE_HANG_BUG
- if (!BUF_MEM_grow_clean(buf, s->init_num + 4)) {
- SSLerr(SSL_F_SSL3_SEND_CERTIFICATE_REQUEST, ERR_R_BUF_LIB);
- goto err;
+ if (!SSL_IS_DTLS(s)) {
+ if (!BUF_MEM_grow_clean(buf, s->init_num + 4)) {
+ SSLerr(SSL_F_SSL3_SEND_CERTIFICATE_REQUEST, ERR_R_BUF_LIB);
+ goto err;
+ }
+ p = (unsigned char *)s->init_buf->data + s->init_num;
+ /* do the header */
+ *(p++) = SSL3_MT_SERVER_DONE;
+ *(p++) = 0;
+ *(p++) = 0;
+ *(p++) = 0;
+ s->init_num += 4;
}
- p = (unsigned char *)s->init_buf->data + s->init_num;
-
- /* do the header */
- *(p++) = SSL3_MT_SERVER_DONE;
- *(p++) = 0;
- *(p++) = 0;
- *(p++) = 0;
- s->init_num += 4;
#endif
s->state = SSL3_ST_SW_CERT_REQ_B;
}
/* SSL3_ST_SW_CERT_REQ_B */
- return (ssl3_do_write(s, SSL3_RT_HANDSHAKE));
+ return ssl_do_write(s);
err:
s->state = SSL_ST_ERR;
return (-1);
@@ -2184,7 +2134,7 @@ int ssl3_get_client_key_exchange(SSL *s)
#endif
#ifndef OPENSSL_NO_DH
BIGNUM *pub = NULL;
- DH *dh_srvr;
+ DH *dh_srvr, *dh_clnt = NULL;
#endif
#ifndef OPENSSL_NO_KRB5
KSSL_ERR kssl_err;
@@ -2355,8 +2305,20 @@ int ssl3_get_client_key_exchange(SSL *s)
#endif
#ifndef OPENSSL_NO_DH
if (alg_k & (SSL_kEDH | SSL_kDHr | SSL_kDHd)) {
- n2s(p, i);
- if (n != i + 2) {
+ int idx = -1;
+ EVP_PKEY *skey = NULL;
+ if (n > 1) {
+ n2s(p, i);
+ } else {
+ if (alg_k & SSL_kDHE) {
+ al = SSL_AD_HANDSHAKE_FAILURE;
+ SSLerr(SSL_F_SSL3_GET_CLIENT_KEY_EXCHANGE,
+ SSL_R_DH_PUBLIC_VALUE_LENGTH_IS_WRONG);
+ goto f_err;
+ }
+ i = 0;
+ }
+ if (n && n != i + 2) {
if (!(s->options & SSL_OP_SSLEAY_080_CLIENT_DH_BUG)) {
SSLerr(SSL_F_SSL3_GET_CLIENT_KEY_EXCHANGE,
SSL_R_DH_PUBLIC_VALUE_LENGTH_IS_WRONG);
@@ -2366,23 +2328,45 @@ int ssl3_get_client_key_exchange(SSL *s)
i = (int)n;
}
}
-
- if (n == 0L) { /* the parameters are in the cert */
+ if (alg_k & SSL_kDHr)
+ idx = SSL_PKEY_DH_RSA;
+ else if (alg_k & SSL_kDHd)
+ idx = SSL_PKEY_DH_DSA;
+ if (idx >= 0) {
+ skey = s->cert->pkeys[idx].privatekey;
+ if ((skey == NULL) ||
+ (skey->type != EVP_PKEY_DH) || (skey->pkey.dh == NULL)) {
+ al = SSL_AD_HANDSHAKE_FAILURE;
+ SSLerr(SSL_F_SSL3_GET_CLIENT_KEY_EXCHANGE,
+ SSL_R_MISSING_RSA_CERTIFICATE);
+ goto f_err;
+ }
+ dh_srvr = skey->pkey.dh;
+ } else if (s->s3->tmp.dh == NULL) {
al = SSL_AD_HANDSHAKE_FAILURE;
SSLerr(SSL_F_SSL3_GET_CLIENT_KEY_EXCHANGE,
- SSL_R_UNABLE_TO_DECODE_DH_CERTS);
+ SSL_R_MISSING_TMP_DH_KEY);
goto f_err;
- } else {
- if (s->s3->tmp.dh == NULL) {
+ } else
+ dh_srvr = s->s3->tmp.dh;
+
+ if (n == 0L) {
+ /* Get pubkey from cert */
+ EVP_PKEY *clkey = X509_get_pubkey(s->session->peer);
+ if (clkey) {
+ if (EVP_PKEY_cmp_parameters(clkey, skey) == 1)
+ dh_clnt = EVP_PKEY_get1_DH(clkey);
+ }
+ if (dh_clnt == NULL) {
al = SSL_AD_HANDSHAKE_FAILURE;
SSLerr(SSL_F_SSL3_GET_CLIENT_KEY_EXCHANGE,
SSL_R_MISSING_TMP_DH_KEY);
goto f_err;
- } else
- dh_srvr = s->s3->tmp.dh;
- }
-
- pub = BN_bin2bn(p, i, NULL);
+ }
+ EVP_PKEY_free(clkey);
+ pub = dh_clnt->pub_key;
+ } else
+ pub = BN_bin2bn(p, i, NULL);
if (pub == NULL) {
SSLerr(SSL_F_SSL3_GET_CLIENT_KEY_EXCHANGE, SSL_R_BN_LIB);
goto err;
@@ -2398,8 +2382,10 @@ int ssl3_get_client_key_exchange(SSL *s)
DH_free(s->s3->tmp.dh);
s->s3->tmp.dh = NULL;
-
- BN_clear_free(pub);
+ if (dh_clnt)
+ DH_free(dh_clnt);
+ else
+ BN_clear_free(pub);
pub = NULL;
s->session->master_key_length =
s->method->ssl3_enc->generate_master_secret(s,
@@ -2407,6 +2393,8 @@ int ssl3_get_client_key_exchange(SSL *s)
session->master_key,
p, i);
OPENSSL_cleanse(p, i);
+ if (dh_clnt)
+ return 2;
} else
#endif
#ifndef OPENSSL_NO_KRB5
@@ -3007,24 +2995,12 @@ int ssl3_get_cert_verify(SSL *s)
pkey->type == NID_id_GostR3410_2001)) {
i = 64;
} else {
- if (TLS1_get_version(s) >= TLS1_2_VERSION) {
- int sigalg = tls12_get_sigid(pkey);
- /* Should never happen */
- if (sigalg == -1) {
- SSLerr(SSL_F_SSL3_GET_CERT_VERIFY, ERR_R_INTERNAL_ERROR);
+ if (SSL_USE_SIGALGS(s)) {
+ int rv = tls12_check_peer_sigalg(&md, s, p, pkey);
+ if (rv == -1) {
al = SSL_AD_INTERNAL_ERROR;
goto f_err;
- }
- /* Check key type is consistent with signature */
- if (sigalg != (int)p[1]) {
- SSLerr(SSL_F_SSL3_GET_CERT_VERIFY,
- SSL_R_WRONG_SIGNATURE_TYPE);
- al = SSL_AD_DECODE_ERROR;
- goto f_err;
- }
- md = tls12_get_hash(p[0]);
- if (md == NULL) {
- SSLerr(SSL_F_SSL3_GET_CERT_VERIFY, SSL_R_UNKNOWN_DIGEST);
+ } else if (rv == 0) {
al = SSL_AD_DECODE_ERROR;
goto f_err;
}
@@ -3049,7 +3025,7 @@ int ssl3_get_cert_verify(SSL *s)
goto f_err;
}
- if (TLS1_get_version(s) >= TLS1_2_VERSION) {
+ if (SSL_USE_SIGALGS(s)) {
long hdatalen = 0;
void *hdata;
hdatalen = BIO_get_mem_data(s->s3->handshake_buffer, &hdata);
@@ -3272,7 +3248,7 @@ int ssl3_get_client_certificate(SSL *s)
if (i <= 0) {
al = ssl_verify_alarm_type(s->verify_result);
SSLerr(SSL_F_SSL3_GET_CLIENT_CERTIFICATE,
- SSL_R_NO_CERTIFICATE_RETURNED);
+ SSL_R_CERTIFICATE_VERIFY_FAILED);
goto f_err;
}
}
@@ -3320,12 +3296,11 @@ int ssl3_get_client_certificate(SSL *s)
int ssl3_send_server_certificate(SSL *s)
{
- unsigned long l;
- X509 *x;
+ CERT_PKEY *cpk;
if (s->state == SSL3_ST_SW_CERT_A) {
- x = ssl_get_server_send_cert(s);
- if (x == NULL) {
+ cpk = ssl_get_server_send_pkey(s);
+ if (cpk == NULL) {
/* VRS: allow null cert if auth == KRB5 */
if ((s->s3->tmp.new_cipher->algorithm_auth != SSL_aKRB5) ||
(s->s3->tmp.new_cipher->algorithm_mkey & SSL_kKRB5)) {
@@ -3336,19 +3311,16 @@ int ssl3_send_server_certificate(SSL *s)
}
}
- l = ssl3_output_cert_chain(s, x);
- if (!l) {
+ if (!ssl3_output_cert_chain(s, cpk)) {
SSLerr(SSL_F_SSL3_SEND_SERVER_CERTIFICATE, ERR_R_INTERNAL_ERROR);
s->state = SSL_ST_ERR;
return (0);
}
s->state = SSL3_ST_SW_CERT_B;
- s->init_num = (int)l;
- s->init_off = 0;
}
/* SSL3_ST_SW_CERT_B */
- return (ssl3_do_write(s, SSL3_RT_HANDSHAKE));
+ return ssl_do_write(s);
}
#ifndef OPENSSL_NO_TLSEXT
@@ -3415,22 +3387,18 @@ int ssl3_send_newsession_ticket(SSL *s)
/*-
* Grow buffer if need be: the length calculation is as
- * follows 1 (size of message name) + 3 (message length
- * bytes) + 4 (ticket lifetime hint) + 2 (ticket length) +
+ * follows handshake_header_length +
+ * 4 (ticket lifetime hint) + 2 (ticket length) +
* 16 (key name) + max_iv_len (iv length) +
* session_length + max_enc_block_size (max encrypted session
* length) + max_md_size (HMAC).
*/
if (!BUF_MEM_grow(s->init_buf,
- 26 + EVP_MAX_IV_LENGTH + EVP_MAX_BLOCK_LENGTH +
- EVP_MAX_MD_SIZE + slen))
+ SSL_HM_HEADER_LENGTH(s) + 22 + EVP_MAX_IV_LENGTH +
+ EVP_MAX_BLOCK_LENGTH + EVP_MAX_MD_SIZE + slen))
goto err;
- p = (unsigned char *)s->init_buf->data;
- /* do the header */
- *(p++) = SSL3_MT_NEWSESSION_TICKET;
- /* Skip message length for now */
- p += 3;
+ p = ssl_handshake_start(s);
/*
* Initialize HMAC and cipher contexts. If callback present it does
* all the work otherwise use generated values from parent ctx.
@@ -3486,21 +3454,17 @@ int ssl3_send_newsession_ticket(SSL *s)
p += hlen;
/* Now write out lengths: p points to end of data written */
/* Total length */
- len = p - (unsigned char *)s->init_buf->data;
- p = (unsigned char *)s->init_buf->data + 1;
- l2n3(len - 4, p); /* Message length */
- p += 4;
- s2n(len - 10, p); /* Ticket length */
-
- /* number of bytes to write */
- s->init_num = len;
+ len = p - ssl_handshake_start(s);
+ /* Skip ticket lifetime hint */
+ p = ssl_handshake_start(s) + 4;
+ s2n(len - 6, p);
+ ssl_set_handshake_header(s, SSL3_MT_NEWSESSION_TICKET, len);
s->state = SSL3_ST_SW_SESSION_TICKET_B;
- s->init_off = 0;
OPENSSL_free(senc);
}
/* SSL3_ST_SW_SESSION_TICKET_B */
- return (ssl3_do_write(s, SSL3_RT_HANDSHAKE));
+ return ssl_do_write(s);
err:
if (senc)
OPENSSL_free(senc);
@@ -3627,4 +3591,5 @@ int ssl3_get_next_proto(SSL *s)
return 1;
}
# endif
+
#endif
diff --git a/crypto/openssl/ssl/srtp.h b/crypto/openssl/ssl/srtp.h
index 0c72841..512edab 100644
--- a/crypto/openssl/ssl/srtp.h
+++ b/crypto/openssl/ssl/srtp.h
@@ -134,7 +134,6 @@ extern "C" {
int SSL_CTX_set_tlsext_use_srtp(SSL_CTX *ctx, const char *profiles);
int SSL_set_tlsext_use_srtp(SSL *ctx, const char *profiles);
-SRTP_PROTECTION_PROFILE *SSL_get_selected_srtp_profile(SSL *s);
STACK_OF(SRTP_PROTECTION_PROFILE) *SSL_get_srtp_profiles(SSL *ssl);
diff --git a/crypto/openssl/ssl/ssl.h b/crypto/openssl/ssl/ssl.h
index d2ab0c0..6fe1a24 100644
--- a/crypto/openssl/ssl/ssl.h
+++ b/crypto/openssl/ssl/ssl.h
@@ -242,22 +242,24 @@ extern "C" {
# define SSL_TXT_NULL "NULL"
# define SSL_TXT_kRSA "kRSA"
-# define SSL_TXT_kDHr "kDHr"/* no such ciphersuites supported! */
-# define SSL_TXT_kDHd "kDHd"/* no such ciphersuites supported! */
-# define SSL_TXT_kDH "kDH"/* no such ciphersuites supported! */
+# define SSL_TXT_kDHr "kDHr"
+# define SSL_TXT_kDHd "kDHd"
+# define SSL_TXT_kDH "kDH"
# define SSL_TXT_kEDH "kEDH"
+# define SSL_TXT_kDHE "kDHE"/* alias for kEDH */
# define SSL_TXT_kKRB5 "kKRB5"
# define SSL_TXT_kECDHr "kECDHr"
# define SSL_TXT_kECDHe "kECDHe"
# define SSL_TXT_kECDH "kECDH"
# define SSL_TXT_kEECDH "kEECDH"
+# define SSL_TXT_kECDHE "kECDHE"/* alias for kEECDH */
# define SSL_TXT_kPSK "kPSK"
# define SSL_TXT_kGOST "kGOST"
# define SSL_TXT_kSRP "kSRP"
# define SSL_TXT_aRSA "aRSA"
# define SSL_TXT_aDSS "aDSS"
-# define SSL_TXT_aDH "aDH"/* no such ciphersuites supported! */
+# define SSL_TXT_aDH "aDH"
# define SSL_TXT_aECDH "aECDH"
# define SSL_TXT_aKRB5 "aKRB5"
# define SSL_TXT_aECDSA "aECDSA"
@@ -270,10 +272,12 @@ extern "C" {
# define SSL_TXT_DSS "DSS"
# define SSL_TXT_DH "DH"
# define SSL_TXT_EDH "EDH"/* same as "kEDH:-ADH" */
+# define SSL_TXT_DHE "DHE"/* alias for EDH */
# define SSL_TXT_ADH "ADH"
# define SSL_TXT_RSA "RSA"
# define SSL_TXT_ECDH "ECDH"
# define SSL_TXT_EECDH "EECDH"/* same as "kEECDH:-AECDH" */
+# define SSL_TXT_ECDHE "ECDHE"/* alias for ECDHE" */
# define SSL_TXT_AECDH "AECDH"
# define SSL_TXT_ECDSA "ECDSA"
# define SSL_TXT_KRB5 "KRB5"
@@ -370,6 +374,8 @@ typedef struct tls_session_ticket_ext_st TLS_SESSION_TICKET_EXT;
typedef struct ssl_method_st SSL_METHOD;
typedef struct ssl_cipher_st SSL_CIPHER;
typedef struct ssl_session_st SSL_SESSION;
+typedef struct tls_sigalgs_st TLS_SIGALGS;
+typedef struct ssl_conf_ctx_st SSL_CONF_CTX;
DECLARE_STACK_OF(SSL_CIPHER)
@@ -389,6 +395,23 @@ typedef int (*tls_session_secret_cb_fn) (SSL *s, void *secret,
STACK_OF(SSL_CIPHER) *peer_ciphers,
SSL_CIPHER **cipher, void *arg);
+# ifndef OPENSSL_NO_TLSEXT
+
+/* Typedefs for handling custom extensions */
+
+typedef int (*custom_ext_add_cb) (SSL *s, unsigned int ext_type,
+ const unsigned char **out,
+ size_t *outlen, int *al, void *add_arg);
+
+typedef void (*custom_ext_free_cb) (SSL *s, unsigned int ext_type,
+ const unsigned char *out, void *add_arg);
+
+typedef int (*custom_ext_parse_cb) (SSL *s, unsigned int ext_type,
+ const unsigned char *in,
+ size_t inlen, int *al, void *parse_arg);
+
+# endif
+
# ifndef OPENSSL_NO_SSL_INTERN
/* used to hold info on the particular ciphers used */
@@ -624,6 +647,12 @@ struct ssl_session_st {
# define SSL_OP_NO_TLSv1_2 0x08000000L
# define SSL_OP_NO_TLSv1_1 0x10000000L
+# define SSL_OP_NO_DTLSv1 0x04000000L
+# define SSL_OP_NO_DTLSv1_2 0x08000000L
+
+# define SSL_OP_NO_SSL_MASK (SSL_OP_NO_SSLv2|SSL_OP_NO_SSLv3|\
+ SSL_OP_NO_TLSv1|SSL_OP_NO_TLSv1_1|SSL_OP_NO_TLSv1_2)
+
/*
* These next two were never actually used for anything since SSLeay zap so
* we have some more flags.
@@ -685,6 +714,69 @@ struct ssl_session_st {
*/
# define SSL_MODE_SEND_FALLBACK_SCSV 0x00000080L
+/* Cert related flags */
+/*
+ * Many implementations ignore some aspects of the TLS standards such as
+ * enforcing certifcate chain algorithms. When this is set we enforce them.
+ */
+# define SSL_CERT_FLAG_TLS_STRICT 0x00000001L
+
+/* Suite B modes, takes same values as certificate verify flags */
+# define SSL_CERT_FLAG_SUITEB_128_LOS_ONLY 0x10000
+/* Suite B 192 bit only mode */
+# define SSL_CERT_FLAG_SUITEB_192_LOS 0x20000
+/* Suite B 128 bit mode allowing 192 bit algorithms */
+# define SSL_CERT_FLAG_SUITEB_128_LOS 0x30000
+
+/* Perform all sorts of protocol violations for testing purposes */
+# define SSL_CERT_FLAG_BROKEN_PROTOCOL 0x10000000
+
+/* Flags for building certificate chains */
+/* Treat any existing certificates as untrusted CAs */
+# define SSL_BUILD_CHAIN_FLAG_UNTRUSTED 0x1
+/* Don't include root CA in chain */
+# define SSL_BUILD_CHAIN_FLAG_NO_ROOT 0x2
+/* Just check certificates already there */
+# define SSL_BUILD_CHAIN_FLAG_CHECK 0x4
+/* Ignore verification errors */
+# define SSL_BUILD_CHAIN_FLAG_IGNORE_ERROR 0x8
+/* Clear verification errors from queue */
+# define SSL_BUILD_CHAIN_FLAG_CLEAR_ERROR 0x10
+
+/* Flags returned by SSL_check_chain */
+/* Certificate can be used with this session */
+# define CERT_PKEY_VALID 0x1
+/* Certificate can also be used for signing */
+# define CERT_PKEY_SIGN 0x2
+/* EE certificate signing algorithm OK */
+# define CERT_PKEY_EE_SIGNATURE 0x10
+/* CA signature algorithms OK */
+# define CERT_PKEY_CA_SIGNATURE 0x20
+/* EE certificate parameters OK */
+# define CERT_PKEY_EE_PARAM 0x40
+/* CA certificate parameters OK */
+# define CERT_PKEY_CA_PARAM 0x80
+/* Signing explicitly allowed as opposed to SHA1 fallback */
+# define CERT_PKEY_EXPLICIT_SIGN 0x100
+/* Client CA issuer names match (always set for server cert) */
+# define CERT_PKEY_ISSUER_NAME 0x200
+/* Cert type matches client types (always set for server cert) */
+# define CERT_PKEY_CERT_TYPE 0x400
+/* Cert chain suitable to Suite B */
+# define CERT_PKEY_SUITEB 0x800
+
+# define SSL_CONF_FLAG_CMDLINE 0x1
+# define SSL_CONF_FLAG_FILE 0x2
+# define SSL_CONF_FLAG_CLIENT 0x4
+# define SSL_CONF_FLAG_SERVER 0x8
+# define SSL_CONF_FLAG_SHOW_ERRORS 0x10
+# define SSL_CONF_FLAG_CERTIFICATE 0x20
+/* Configuration value types */
+# define SSL_CONF_TYPE_UNKNOWN 0x0
+# define SSL_CONF_TYPE_STRING 0x1
+# define SSL_CONF_TYPE_FILE 0x2
+# define SSL_CONF_TYPE_DIR 0x3
+
/*
* Note: SSL[_CTX]_set_{options,mode} use |= op on the previous value, they
* cannot be used to clear bits.
@@ -730,6 +822,15 @@ struct ssl_session_st {
SSL_ctrl((ssl),SSL_CTRL_TLS_EXT_SEND_HEARTBEAT,0,NULL)
# endif
+# define SSL_CTX_set_cert_flags(ctx,op) \
+ SSL_CTX_ctrl((ctx),SSL_CTRL_CERT_FLAGS,(op),NULL)
+# define SSL_set_cert_flags(s,op) \
+ SSL_ctrl((s),SSL_CTRL_CERT_FLAGS,(op),NULL)
+# define SSL_CTX_clear_cert_flags(ctx,op) \
+ SSL_CTX_ctrl((ctx),SSL_CTRL_CLEAR_CERT_FLAGS,(op),NULL)
+# define SSL_clear_cert_flags(s,op) \
+ SSL_ctrl((s),SSL_CTRL_CLEAR_CERT_FLAGS,(op),NULL)
+
void SSL_CTX_set_msg_callback(SSL_CTX *ctx,
void (*cb) (int write_p, int version,
int content_type, const void *buf,
@@ -1042,6 +1143,43 @@ struct ssl_ctx_st {
# endif
/* SRTP profiles we are willing to do from RFC 5764 */
STACK_OF(SRTP_PROTECTION_PROFILE) *srtp_profiles;
+
+ /*
+ * ALPN information (we are in the process of transitioning from NPN to
+ * ALPN.)
+ */
+
+ /*-
+ * For a server, this contains a callback function that allows the
+ * server to select the protocol for the connection.
+ * out: on successful return, this must point to the raw protocol
+ * name (without the length prefix).
+ * outlen: on successful return, this contains the length of |*out|.
+ * in: points to the client's list of supported protocols in
+ * wire-format.
+ * inlen: the length of |in|.
+ */
+ int (*alpn_select_cb) (SSL *s,
+ const unsigned char **out,
+ unsigned char *outlen,
+ const unsigned char *in,
+ unsigned int inlen, void *arg);
+ void *alpn_select_cb_arg;
+
+ /*
+ * For a client, this contains the list of supported protocols in wire
+ * format.
+ */
+ unsigned char *alpn_client_proto_list;
+ unsigned alpn_client_proto_list_len;
+
+# ifndef OPENSSL_NO_EC
+ /* EC extension values inherited by SSL structure */
+ size_t tlsext_ecpointformatlist_length;
+ unsigned char *tlsext_ecpointformatlist;
+ size_t tlsext_ellipticcurvelist_length;
+ unsigned char *tlsext_ellipticcurvelist;
+# endif /* OPENSSL_NO_EC */
# endif
};
@@ -1144,19 +1282,35 @@ void SSL_CTX_set_next_proto_select_cb(SSL_CTX *s,
const unsigned char *in,
unsigned int inlen,
void *arg), void *arg);
+void SSL_get0_next_proto_negotiated(const SSL *s, const unsigned char **data,
+ unsigned *len);
+# endif
+# ifndef OPENSSL_NO_TLSEXT
int SSL_select_next_proto(unsigned char **out, unsigned char *outlen,
const unsigned char *in, unsigned int inlen,
const unsigned char *client,
unsigned int client_len);
-void SSL_get0_next_proto_negotiated(const SSL *s, const unsigned char **data,
- unsigned *len);
-
-# define OPENSSL_NPN_UNSUPPORTED 0
-# define OPENSSL_NPN_NEGOTIATED 1
-# define OPENSSL_NPN_NO_OVERLAP 2
# endif
+# define OPENSSL_NPN_UNSUPPORTED 0
+# define OPENSSL_NPN_NEGOTIATED 1
+# define OPENSSL_NPN_NO_OVERLAP 2
+
+int SSL_CTX_set_alpn_protos(SSL_CTX *ctx, const unsigned char *protos,
+ unsigned protos_len);
+int SSL_set_alpn_protos(SSL *ssl, const unsigned char *protos,
+ unsigned protos_len);
+void SSL_CTX_set_alpn_select_cb(SSL_CTX *ctx,
+ int (*cb) (SSL *ssl,
+ const unsigned char **out,
+ unsigned char *outlen,
+ const unsigned char *in,
+ unsigned int inlen,
+ void *arg), void *arg);
+void SSL_get0_alpn_selected(const SSL *ssl, const unsigned char **data,
+ unsigned *len);
+
# ifndef OPENSSL_NO_PSK
/*
* the maximum length of the buffer given to callbacks containing the
@@ -1228,6 +1382,27 @@ const char *SSL_get_psk_identity_hint(const SSL *s);
const char *SSL_get_psk_identity(const SSL *s);
# endif
+# ifndef OPENSSL_NO_TLSEXT
+/* Register callbacks to handle custom TLS Extensions for client or server. */
+
+int SSL_CTX_add_client_custom_ext(SSL_CTX *ctx, unsigned int ext_type,
+ custom_ext_add_cb add_cb,
+ custom_ext_free_cb free_cb,
+ void *add_arg,
+ custom_ext_parse_cb parse_cb,
+ void *parse_arg);
+
+int SSL_CTX_add_server_custom_ext(SSL_CTX *ctx, unsigned int ext_type,
+ custom_ext_add_cb add_cb,
+ custom_ext_free_cb free_cb,
+ void *add_arg,
+ custom_ext_parse_cb parse_cb,
+ void *parse_arg);
+
+int SSL_extension_supported(unsigned int ext_type);
+
+# endif
+
# define SSL_NOTHING 1
# define SSL_WRITING 2
# define SSL_READING 3
@@ -1502,6 +1677,14 @@ struct ssl_st {
/* ctx for SRP authentication */
SRP_CTX srp_ctx;
# endif
+# ifndef OPENSSL_NO_TLSEXT
+ /*
+ * For a client, this contains the list of supported protocols in wire
+ * format.
+ */
+ unsigned char *alpn_client_proto_list;
+ unsigned alpn_client_proto_list_len;
+# endif /* OPENSSL_NO_TLSEXT */
};
# endif
@@ -1758,7 +1941,7 @@ DECLARE_PEM_rw(SSL_SESSION, SSL_SESSION)
# define SSL_CTRL_GET_TLS_EXT_HEARTBEAT_PENDING 86
# define SSL_CTRL_SET_TLS_EXT_HEARTBEAT_NO_REQUESTS 87
# endif
-# endif
+# endif /* OPENSSL_NO_TLSEXT */
# define DTLS_CTRL_GET_TIMEOUT 73
# define DTLS_CTRL_HANDLE_TIMEOUT 74
# define DTLS_CTRL_LISTEN 75
@@ -1767,9 +1950,37 @@ DECLARE_PEM_rw(SSL_SESSION, SSL_SESSION)
# define SSL_CTRL_CLEAR_MODE 78
# define SSL_CTRL_GET_EXTRA_CHAIN_CERTS 82
# define SSL_CTRL_CLEAR_EXTRA_CHAIN_CERTS 83
+# define SSL_CTRL_CHAIN 88
+# define SSL_CTRL_CHAIN_CERT 89
+# define SSL_CTRL_GET_CURVES 90
+# define SSL_CTRL_SET_CURVES 91
+# define SSL_CTRL_SET_CURVES_LIST 92
+# define SSL_CTRL_GET_SHARED_CURVE 93
+# define SSL_CTRL_SET_ECDH_AUTO 94
+# define SSL_CTRL_SET_SIGALGS 97
+# define SSL_CTRL_SET_SIGALGS_LIST 98
+# define SSL_CTRL_CERT_FLAGS 99
+# define SSL_CTRL_CLEAR_CERT_FLAGS 100
+# define SSL_CTRL_SET_CLIENT_SIGALGS 101
+# define SSL_CTRL_SET_CLIENT_SIGALGS_LIST 102
+# define SSL_CTRL_GET_CLIENT_CERT_TYPES 103
+# define SSL_CTRL_SET_CLIENT_CERT_TYPES 104
+# define SSL_CTRL_BUILD_CERT_CHAIN 105
+# define SSL_CTRL_SET_VERIFY_CERT_STORE 106
+# define SSL_CTRL_SET_CHAIN_CERT_STORE 107
+# define SSL_CTRL_GET_PEER_SIGNATURE_NID 108
+# define SSL_CTRL_GET_SERVER_TMP_KEY 109
+# define SSL_CTRL_GET_RAW_CIPHERLIST 110
+# define SSL_CTRL_GET_EC_POINT_FORMATS 111
+# define SSL_CTRL_GET_CHAIN_CERTS 115
+# define SSL_CTRL_SELECT_CURRENT_CERT 116
+# define SSL_CTRL_SET_CURRENT_CERT 117
# define SSL_CTRL_CHECK_PROTO_VERSION 119
# define DTLS_CTRL_SET_LINK_MTU 120
# define DTLS_CTRL_GET_LINK_MIN_MTU 121
+# define SSL_CERT_SET_FIRST 1
+# define SSL_CERT_SET_NEXT 2
+# define SSL_CERT_SET_SERVER 3
# define DTLSv1_get_timeout(ssl, arg) \
SSL_ctrl(ssl,DTLS_CTRL_GET_TIMEOUT,0, (void *)arg)
# define DTLSv1_handle_timeout(ssl) \
@@ -1804,8 +2015,108 @@ DECLARE_PEM_rw(SSL_SESSION, SSL_SESSION)
SSL_CTX_ctrl(ctx,SSL_CTRL_EXTRA_CHAIN_CERT,0,(char *)x509)
# define SSL_CTX_get_extra_chain_certs(ctx,px509) \
SSL_CTX_ctrl(ctx,SSL_CTRL_GET_EXTRA_CHAIN_CERTS,0,px509)
+# define SSL_CTX_get_extra_chain_certs_only(ctx,px509) \
+ SSL_CTX_ctrl(ctx,SSL_CTRL_GET_EXTRA_CHAIN_CERTS,1,px509)
# define SSL_CTX_clear_extra_chain_certs(ctx) \
SSL_CTX_ctrl(ctx,SSL_CTRL_CLEAR_EXTRA_CHAIN_CERTS,0,NULL)
+# define SSL_CTX_set0_chain(ctx,sk) \
+ SSL_CTX_ctrl(ctx,SSL_CTRL_CHAIN,0,(char *)sk)
+# define SSL_CTX_set1_chain(ctx,sk) \
+ SSL_CTX_ctrl(ctx,SSL_CTRL_CHAIN,1,(char *)sk)
+# define SSL_CTX_add0_chain_cert(ctx,x509) \
+ SSL_CTX_ctrl(ctx,SSL_CTRL_CHAIN_CERT,0,(char *)x509)
+# define SSL_CTX_add1_chain_cert(ctx,x509) \
+ SSL_CTX_ctrl(ctx,SSL_CTRL_CHAIN_CERT,1,(char *)x509)
+# define SSL_CTX_get0_chain_certs(ctx,px509) \
+ SSL_CTX_ctrl(ctx,SSL_CTRL_GET_CHAIN_CERTS,0,px509)
+# define SSL_CTX_clear_chain_certs(ctx) \
+ SSL_CTX_set0_chain(ctx,NULL)
+# define SSL_CTX_build_cert_chain(ctx, flags) \
+ SSL_CTX_ctrl(ctx,SSL_CTRL_BUILD_CERT_CHAIN, flags, NULL)
+# define SSL_CTX_select_current_cert(ctx,x509) \
+ SSL_CTX_ctrl(ctx,SSL_CTRL_SELECT_CURRENT_CERT,0,(char *)x509)
+# define SSL_CTX_set_current_cert(ctx, op) \
+ SSL_CTX_ctrl(ctx,SSL_CTRL_SET_CURRENT_CERT, op, NULL)
+# define SSL_CTX_set0_verify_cert_store(ctx,st) \
+ SSL_CTX_ctrl(ctx,SSL_CTRL_SET_VERIFY_CERT_STORE,0,(char *)st)
+# define SSL_CTX_set1_verify_cert_store(ctx,st) \
+ SSL_CTX_ctrl(ctx,SSL_CTRL_SET_VERIFY_CERT_STORE,1,(char *)st)
+# define SSL_CTX_set0_chain_cert_store(ctx,st) \
+ SSL_CTX_ctrl(ctx,SSL_CTRL_SET_CHAIN_CERT_STORE,0,(char *)st)
+# define SSL_CTX_set1_chain_cert_store(ctx,st) \
+ SSL_CTX_ctrl(ctx,SSL_CTRL_SET_CHAIN_CERT_STORE,1,(char *)st)
+# define SSL_set0_chain(ctx,sk) \
+ SSL_ctrl(ctx,SSL_CTRL_CHAIN,0,(char *)sk)
+# define SSL_set1_chain(ctx,sk) \
+ SSL_ctrl(ctx,SSL_CTRL_CHAIN,1,(char *)sk)
+# define SSL_add0_chain_cert(ctx,x509) \
+ SSL_ctrl(ctx,SSL_CTRL_CHAIN_CERT,0,(char *)x509)
+# define SSL_add1_chain_cert(ctx,x509) \
+ SSL_ctrl(ctx,SSL_CTRL_CHAIN_CERT,1,(char *)x509)
+# define SSL_get0_chain_certs(ctx,px509) \
+ SSL_ctrl(ctx,SSL_CTRL_GET_CHAIN_CERTS,0,px509)
+# define SSL_clear_chain_certs(ctx) \
+ SSL_set0_chain(ctx,NULL)
+# define SSL_build_cert_chain(s, flags) \
+ SSL_ctrl(s,SSL_CTRL_BUILD_CERT_CHAIN, flags, NULL)
+# define SSL_select_current_cert(ctx,x509) \
+ SSL_ctrl(ctx,SSL_CTRL_SELECT_CURRENT_CERT,0,(char *)x509)
+# define SSL_set_current_cert(ctx,op) \
+ SSL_ctrl(ctx,SSL_CTRL_SET_CURRENT_CERT, op, NULL)
+# define SSL_set0_verify_cert_store(s,st) \
+ SSL_ctrl(s,SSL_CTRL_SET_VERIFY_CERT_STORE,0,(char *)st)
+# define SSL_set1_verify_cert_store(s,st) \
+ SSL_ctrl(s,SSL_CTRL_SET_VERIFY_CERT_STORE,1,(char *)st)
+# define SSL_set0_chain_cert_store(s,st) \
+ SSL_ctrl(s,SSL_CTRL_SET_CHAIN_CERT_STORE,0,(char *)st)
+# define SSL_set1_chain_cert_store(s,st) \
+ SSL_ctrl(s,SSL_CTRL_SET_CHAIN_CERT_STORE,1,(char *)st)
+# define SSL_get1_curves(ctx, s) \
+ SSL_ctrl(ctx,SSL_CTRL_GET_CURVES,0,(char *)s)
+# define SSL_CTX_set1_curves(ctx, clist, clistlen) \
+ SSL_CTX_ctrl(ctx,SSL_CTRL_SET_CURVES,clistlen,(char *)clist)
+# define SSL_CTX_set1_curves_list(ctx, s) \
+ SSL_CTX_ctrl(ctx,SSL_CTRL_SET_CURVES_LIST,0,(char *)s)
+# define SSL_set1_curves(ctx, clist, clistlen) \
+ SSL_ctrl(ctx,SSL_CTRL_SET_CURVES,clistlen,(char *)clist)
+# define SSL_set1_curves_list(ctx, s) \
+ SSL_ctrl(ctx,SSL_CTRL_SET_CURVES_LIST,0,(char *)s)
+# define SSL_get_shared_curve(s, n) \
+ SSL_ctrl(s,SSL_CTRL_GET_SHARED_CURVE,n,NULL)
+# define SSL_CTX_set_ecdh_auto(ctx, onoff) \
+ SSL_CTX_ctrl(ctx,SSL_CTRL_SET_ECDH_AUTO,onoff,NULL)
+# define SSL_set_ecdh_auto(s, onoff) \
+ SSL_ctrl(s,SSL_CTRL_SET_ECDH_AUTO,onoff,NULL)
+# define SSL_CTX_set1_sigalgs(ctx, slist, slistlen) \
+ SSL_CTX_ctrl(ctx,SSL_CTRL_SET_SIGALGS,slistlen,(int *)slist)
+# define SSL_CTX_set1_sigalgs_list(ctx, s) \
+ SSL_CTX_ctrl(ctx,SSL_CTRL_SET_SIGALGS_LIST,0,(char *)s)
+# define SSL_set1_sigalgs(ctx, slist, slistlen) \
+ SSL_ctrl(ctx,SSL_CTRL_SET_SIGALGS,clistlen,(int *)slist)
+# define SSL_set1_sigalgs_list(ctx, s) \
+ SSL_ctrl(ctx,SSL_CTRL_SET_SIGALGS_LIST,0,(char *)s)
+# define SSL_CTX_set1_client_sigalgs(ctx, slist, slistlen) \
+ SSL_CTX_ctrl(ctx,SSL_CTRL_SET_CLIENT_SIGALGS,slistlen,(int *)slist)
+# define SSL_CTX_set1_client_sigalgs_list(ctx, s) \
+ SSL_CTX_ctrl(ctx,SSL_CTRL_SET_CLIENT_SIGALGS_LIST,0,(char *)s)
+# define SSL_set1_client_sigalgs(ctx, slist, slistlen) \
+ SSL_ctrl(ctx,SSL_CTRL_SET_CLIENT_SIGALGS,clistlen,(int *)slist)
+# define SSL_set1_client_sigalgs_list(ctx, s) \
+ SSL_ctrl(ctx,SSL_CTRL_SET_CLIENT_SIGALGS_LIST,0,(char *)s)
+# define SSL_get0_certificate_types(s, clist) \
+ SSL_ctrl(s, SSL_CTRL_GET_CLIENT_CERT_TYPES, 0, (char *)clist)
+# define SSL_CTX_set1_client_certificate_types(ctx, clist, clistlen) \
+ SSL_CTX_ctrl(ctx,SSL_CTRL_SET_CLIENT_CERT_TYPES,clistlen,(char *)clist)
+# define SSL_set1_client_certificate_types(s, clist, clistlen) \
+ SSL_ctrl(s,SSL_CTRL_SET_CLIENT_CERT_TYPES,clistlen,(char *)clist)
+# define SSL_get_peer_signature_nid(s, pn) \
+ SSL_ctrl(s,SSL_CTRL_GET_PEER_SIGNATURE_NID,0,pn)
+# define SSL_get_server_tmp_key(s, pk) \
+ SSL_ctrl(s,SSL_CTRL_GET_SERVER_TMP_KEY,0,pk)
+# define SSL_get0_raw_cipherlist(s, plst) \
+ SSL_ctrl(s,SSL_CTRL_GET_RAW_CIPHERLIST,0,(char *)plst)
+# define SSL_get0_ec_point_formats(s, plst) \
+ SSL_ctrl(s,SSL_CTRL_GET_EC_POINT_FORMATS,0,(char *)plst)
# ifndef OPENSSL_NO_BIO
BIO_METHOD *BIO_f_ssl(void);
BIO *BIO_new_ssl(SSL_CTX *ctx, int client);
@@ -1859,6 +2170,7 @@ int (*SSL_get_verify_callback(const SSL *s)) (int, X509_STORE_CTX *);
void SSL_set_verify(SSL *s, int mode,
int (*callback) (int ok, X509_STORE_CTX *ctx));
void SSL_set_verify_depth(SSL *s, int depth);
+void SSL_set_cert_cb(SSL *s, int (*cb) (SSL *ssl, void *arg), void *arg);
# ifndef OPENSSL_NO_RSA
int SSL_use_RSAPrivateKey(SSL *ssl, RSA *rsa);
# endif
@@ -1869,6 +2181,16 @@ int SSL_use_PrivateKey_ASN1(int pk, SSL *ssl, const unsigned char *d,
int SSL_use_certificate(SSL *ssl, X509 *x);
int SSL_use_certificate_ASN1(SSL *ssl, const unsigned char *d, int len);
+# ifndef OPENSSL_NO_TLSEXT
+/* Set serverinfo data for the current active cert. */
+int SSL_CTX_use_serverinfo(SSL_CTX *ctx, const unsigned char *serverinfo,
+ size_t serverinfo_length);
+# ifndef OPENSSL_NO_STDIO
+int SSL_CTX_use_serverinfo_file(SSL_CTX *ctx, const char *file);
+# endif /* NO_STDIO */
+
+# endif
+
# ifndef OPENSSL_NO_STDIO
int SSL_use_RSAPrivateKey_file(SSL *ssl, const char *file, int type);
int SSL_use_PrivateKey_file(SSL *ssl, const char *file, int type);
@@ -1943,6 +2265,8 @@ void SSL_CTX_set_verify_depth(SSL_CTX *ctx, int depth);
void SSL_CTX_set_cert_verify_callback(SSL_CTX *ctx,
int (*cb) (X509_STORE_CTX *, void *),
void *arg);
+void SSL_CTX_set_cert_cb(SSL_CTX *c, int (*cb) (SSL *ssl, void *arg),
+ void *arg);
# ifndef OPENSSL_NO_RSA
int SSL_CTX_use_RSAPrivateKey(SSL_CTX *ctx, RSA *rsa);
# endif
@@ -1976,6 +2300,9 @@ int SSL_set_trust(SSL *s, int trust);
int SSL_CTX_set1_param(SSL_CTX *ctx, X509_VERIFY_PARAM *vpm);
int SSL_set1_param(SSL *ssl, X509_VERIFY_PARAM *vpm);
+X509_VERIFY_PARAM *SSL_CTX_get0_param(SSL_CTX *ctx);
+X509_VERIFY_PARAM *SSL_get0_param(SSL *ssl);
+
# ifndef OPENSSL_NO_SRP
int SSL_CTX_set_srp_username(SSL_CTX *ctx, char *name);
int SSL_CTX_set_srp_password(SSL_CTX *ctx, char *password);
@@ -2000,6 +2327,7 @@ char *SSL_get_srp_username(SSL *s);
char *SSL_get_srp_userinfo(SSL *s);
# endif
+void SSL_certs_clear(SSL *s);
void SSL_free(SSL *ssl);
int SSL_accept(SSL *ssl);
int SSL_connect(SSL *ssl);
@@ -2052,6 +2380,14 @@ const SSL_METHOD *DTLSv1_method(void); /* DTLSv1.0 */
const SSL_METHOD *DTLSv1_server_method(void); /* DTLSv1.0 */
const SSL_METHOD *DTLSv1_client_method(void); /* DTLSv1.0 */
+const SSL_METHOD *DTLSv1_2_method(void); /* DTLSv1.2 */
+const SSL_METHOD *DTLSv1_2_server_method(void); /* DTLSv1.2 */
+const SSL_METHOD *DTLSv1_2_client_method(void); /* DTLSv1.2 */
+
+const SSL_METHOD *DTLS_method(void); /* DTLS 1.0 and 1.2 */
+const SSL_METHOD *DTLS_server_method(void); /* DTLS 1.0 and 1.2 */
+const SSL_METHOD *DTLS_client_method(void); /* DTLS 1.0 and 1.2 */
+
STACK_OF(SSL_CIPHER) *SSL_get_ciphers(const SSL *s);
int SSL_do_handshake(SSL *s);
@@ -2060,6 +2396,7 @@ int SSL_renegotiate_abbreviated(SSL *s);
int SSL_renegotiate_pending(SSL *s);
int SSL_shutdown(SSL *s);
+const SSL_METHOD *SSL_CTX_get_ssl_method(SSL_CTX *ctx);
const SSL_METHOD *SSL_get_ssl_method(SSL *s);
int SSL_set_ssl_method(SSL *s, const SSL_METHOD *method);
const char *SSL_alert_type_string_long(int value);
@@ -2089,7 +2426,10 @@ SSL *SSL_dup(SSL *ssl);
X509 *SSL_get_certificate(const SSL *ssl);
/*
* EVP_PKEY
- */ struct evp_pkey_st *SSL_get_privatekey(SSL *ssl);
+ */ struct evp_pkey_st *SSL_get_privatekey(const SSL *ssl);
+
+X509 *SSL_CTX_get0_certificate(const SSL_CTX *ctx);
+EVP_PKEY *SSL_CTX_get0_privatekey(const SSL_CTX *ctx);
void SSL_CTX_set_quiet_shutdown(SSL_CTX *ctx, int mode);
int SSL_CTX_get_quiet_shutdown(const SSL_CTX *ctx);
@@ -2197,6 +2537,9 @@ const COMP_METHOD *SSL_get_current_compression(SSL *s);
const COMP_METHOD *SSL_get_current_expansion(SSL *s);
const char *SSL_COMP_get_name(const COMP_METHOD *comp);
STACK_OF(SSL_COMP) *SSL_COMP_get_compression_methods(void);
+STACK_OF(SSL_COMP) *SSL_COMP_set0_compression_methods(STACK_OF(SSL_COMP)
+ *meths);
+void SSL_COMP_free_compression_methods(void);
int SSL_COMP_add_compression_method(int id, COMP_METHOD *cm);
# else
const void *SSL_get_current_compression(SSL *s);
@@ -2206,6 +2549,8 @@ void *SSL_COMP_get_compression_methods(void);
int SSL_COMP_add_compression_method(int id, void *cm);
# endif
+const SSL_CIPHER *SSL_CIPHER_find(SSL *ssl, const unsigned char *ptr);
+
/* TLS extensions functions */
int SSL_set_session_ticket_ext(SSL *s, void *ext_data, int ext_len);
@@ -2219,6 +2564,27 @@ int SSL_set_session_secret_cb(SSL *s,
void SSL_set_debug(SSL *s, int debug);
int SSL_cache_hit(SSL *s);
+int SSL_is_server(SSL *s);
+
+SSL_CONF_CTX *SSL_CONF_CTX_new(void);
+int SSL_CONF_CTX_finish(SSL_CONF_CTX *cctx);
+void SSL_CONF_CTX_free(SSL_CONF_CTX *cctx);
+unsigned int SSL_CONF_CTX_set_flags(SSL_CONF_CTX *cctx, unsigned int flags);
+unsigned int SSL_CONF_CTX_clear_flags(SSL_CONF_CTX *cctx, unsigned int flags);
+int SSL_CONF_CTX_set1_prefix(SSL_CONF_CTX *cctx, const char *pre);
+
+void SSL_CONF_CTX_set_ssl(SSL_CONF_CTX *cctx, SSL *ssl);
+void SSL_CONF_CTX_set_ssl_ctx(SSL_CONF_CTX *cctx, SSL_CTX *ctx);
+
+int SSL_CONF_cmd(SSL_CONF_CTX *cctx, const char *cmd, const char *value);
+int SSL_CONF_cmd_argv(SSL_CONF_CTX *cctx, int *pargc, char ***pargv);
+int SSL_CONF_cmd_value_type(SSL_CONF_CTX *cctx, const char *cmd);
+
+# ifndef OPENSSL_NO_SSL_TRACE
+void SSL_trace(int write_p, int version, int content_type,
+ const void *buf, size_t len, SSL *ssl, void *arg);
+const char *SSL_CIPHER_standard_name(const SSL_CIPHER *c);
+# endif
# ifndef OPENSSL_NO_UNIT_TEST
const struct openssl_ssl_test_functions *SSL_test_functions(void);
@@ -2234,6 +2600,7 @@ void ERR_load_SSL_strings(void);
/* Error codes for the SSL functions. */
/* Function codes. */
+# define SSL_F_CHECK_SUITEB_CIPHER_LIST 331
# define SSL_F_CLIENT_CERTIFICATE 100
# define SSL_F_CLIENT_FINISHED 167
# define SSL_F_CLIENT_HELLO 101
@@ -2274,6 +2641,7 @@ void ERR_load_SSL_strings(void);
# define SSL_F_GET_CLIENT_MASTER_KEY 107
# define SSL_F_GET_SERVER_FINISHED 108
# define SSL_F_GET_SERVER_HELLO 109
+# define SSL_F_GET_SERVER_STATIC_DH_KEY 340
# define SSL_F_GET_SERVER_VERIFY 110
# define SSL_F_I2D_SSL_SESSION 111
# define SSL_F_READ_N 112
@@ -2346,6 +2714,8 @@ void ERR_load_SSL_strings(void);
# define SSL_F_SSL3_SETUP_WRITE_BUFFER 291
# define SSL_F_SSL3_WRITE_BYTES 158
# define SSL_F_SSL3_WRITE_PENDING 159
+# define SSL_F_SSL_ADD_CERT_CHAIN 318
+# define SSL_F_SSL_ADD_CERT_TO_BUF 319
# define SSL_F_SSL_ADD_CLIENTHELLO_RENEGOTIATE_EXT 298
# define SSL_F_SSL_ADD_CLIENTHELLO_TLSEXT 277
# define SSL_F_SSL_ADD_CLIENTHELLO_USE_SRTP_EXT 307
@@ -2355,6 +2725,7 @@ void ERR_load_SSL_strings(void);
# define SSL_F_SSL_ADD_SERVERHELLO_TLSEXT 278
# define SSL_F_SSL_ADD_SERVERHELLO_USE_SRTP_EXT 308
# define SSL_F_SSL_BAD_METHOD 160
+# define SSL_F_SSL_BUILD_CERT_CHAIN 332
# define SSL_F_SSL_BYTES_TO_CIPHER_LIST 161
# define SSL_F_SSL_CERT_DUP 221
# define SSL_F_SSL_CERT_INST 222
@@ -2367,6 +2738,7 @@ void ERR_load_SSL_strings(void);
# define SSL_F_SSL_CIPHER_STRENGTH_SORT 231
# define SSL_F_SSL_CLEAR 164
# define SSL_F_SSL_COMP_ADD_COMPRESSION_METHOD 165
+# define SSL_F_SSL_CONF_CMD 334
# define SSL_F_SSL_CREATE_CIPHER_LIST 166
# define SSL_F_SSL_CTRL 232
# define SSL_F_SSL_CTX_CHECK_PRIVATE_KEY 168
@@ -2389,9 +2761,12 @@ void ERR_load_SSL_strings(void);
# define SSL_F_SSL_CTX_USE_RSAPRIVATEKEY 177
# define SSL_F_SSL_CTX_USE_RSAPRIVATEKEY_ASN1 178
# define SSL_F_SSL_CTX_USE_RSAPRIVATEKEY_FILE 179
+# define SSL_F_SSL_CTX_USE_SERVERINFO 336
+# define SSL_F_SSL_CTX_USE_SERVERINFO_FILE 337
# define SSL_F_SSL_DO_HANDSHAKE 180
# define SSL_F_SSL_GET_NEW_SESSION 181
# define SSL_F_SSL_GET_PREV_SESSION 217
+# define SSL_F_SSL_GET_SERVER_CERT_INDEX 322
# define SSL_F_SSL_GET_SERVER_SEND_CERT 182
# define SSL_F_SSL_GET_SERVER_SEND_PKEY 317
# define SSL_F_SSL_GET_SIGN_PKEY 183
@@ -2410,6 +2785,8 @@ void ERR_load_SSL_strings(void);
# define SSL_F_SSL_READ 223
# define SSL_F_SSL_RSA_PRIVATE_DECRYPT 187
# define SSL_F_SSL_RSA_PUBLIC_ENCRYPT 188
+# define SSL_F_SSL_SCAN_CLIENTHELLO_TLSEXT 320
+# define SSL_F_SSL_SCAN_SERVERHELLO_TLSEXT 321
# define SSL_F_SSL_SESSION_DUP 348
# define SSL_F_SSL_SESSION_NEW 189
# define SSL_F_SSL_SESSION_PRINT_FP 190
@@ -2443,16 +2820,19 @@ void ERR_load_SSL_strings(void);
# define SSL_F_SSL_USE_RSAPRIVATEKEY_FILE 206
# define SSL_F_SSL_VERIFY_CERT_CHAIN 207
# define SSL_F_SSL_WRITE 208
+# define SSL_F_TLS12_CHECK_PEER_SIGALG 333
# define SSL_F_TLS1_CERT_VERIFY_MAC 286
# define SSL_F_TLS1_CHANGE_CIPHER_STATE 209
# define SSL_F_TLS1_CHECK_SERVERHELLO_TLSEXT 274
# define SSL_F_TLS1_ENC 210
# define SSL_F_TLS1_EXPORT_KEYING_MATERIAL 314
+# define SSL_F_TLS1_GET_CURVELIST 338
# define SSL_F_TLS1_HEARTBEAT 315
# define SSL_F_TLS1_PREPARE_CLIENTHELLO_TLSEXT 275
# define SSL_F_TLS1_PREPARE_SERVERHELLO_TLSEXT 276
# define SSL_F_TLS1_PRF 284
# define SSL_F_TLS1_SETUP_KEY_BLOCK 211
+# define SSL_F_TLS1_SET_SERVER_SIGALGS 335
# define SSL_F_WRITE_PENDING 212
/* Reason codes. */
@@ -2462,6 +2842,7 @@ void ERR_load_SSL_strings(void);
# define SSL_R_BAD_AUTHENTICATION_TYPE 102
# define SSL_R_BAD_CHANGE_CIPHER_SPEC 103
# define SSL_R_BAD_CHECKSUM 104
+# define SSL_R_BAD_DATA 390
# define SSL_R_BAD_DATA_RETURNED_BY_CALLBACK 106
# define SSL_R_BAD_DECOMPRESSION 107
# define SSL_R_BAD_DH_G_LENGTH 108
@@ -2499,6 +2880,7 @@ void ERR_load_SSL_strings(void);
# define SSL_R_BAD_SSL_FILETYPE 124
# define SSL_R_BAD_SSL_SESSION_ID_LENGTH 125
# define SSL_R_BAD_STATE 126
+# define SSL_R_BAD_VALUE 384
# define SSL_R_BAD_WRITE_RETRY 127
# define SSL_R_BIO_NOT_SET 128
# define SSL_R_BLOCK_CIPHER_PAD_IS_WRONG 129
@@ -2507,6 +2889,7 @@ void ERR_load_SSL_strings(void);
# define SSL_R_CA_DN_TOO_LONG 132
# define SSL_R_CCS_RECEIVED_EARLY 133
# define SSL_R_CERTIFICATE_VERIFY_FAILED 134
+# define SSL_R_CERT_CB_ERROR 377
# define SSL_R_CERT_LENGTH_MISMATCH 135
# define SSL_R_CHALLENGE_IS_DIFFERENT 136
# define SSL_R_CIPHER_CODE_WRONG_LENGTH 137
@@ -2534,6 +2917,7 @@ void ERR_load_SSL_strings(void);
# define SSL_R_ECC_CERT_NOT_FOR_SIGNING 318
# define SSL_R_ECC_CERT_SHOULD_HAVE_RSA_SIGNATURE 322
# define SSL_R_ECC_CERT_SHOULD_HAVE_SHA1_SIGNATURE 323
+# define SSL_R_ECDH_REQUIRED_FOR_SUITEB_MODE 374
# define SSL_R_ECGROUP_TOO_LARGE_FOR_CIPHER 310
# define SSL_R_EMPTY_SRTP_PROTECTION_PROFILE_LIST 354
# define SSL_R_ENCRYPTED_LENGTH_TOO_LONG 150
@@ -2547,12 +2931,15 @@ void ERR_load_SSL_strings(void);
# define SSL_R_HTTPS_PROXY_REQUEST 155
# define SSL_R_HTTP_REQUEST 156
# define SSL_R_ILLEGAL_PADDING 283
+# define SSL_R_ILLEGAL_SUITEB_DIGEST 380
# define SSL_R_INAPPROPRIATE_FALLBACK 373
# define SSL_R_INCONSISTENT_COMPRESSION 340
# define SSL_R_INVALID_CHALLENGE_LENGTH 158
# define SSL_R_INVALID_COMMAND 280
# define SSL_R_INVALID_COMPRESSION_ALGORITHM 341
+# define SSL_R_INVALID_NULL_CMD_NAME 385
# define SSL_R_INVALID_PURPOSE 278
+# define SSL_R_INVALID_SERVERINFO_DATA 388
# define SSL_R_INVALID_SRP_USERNAME 357
# define SSL_R_INVALID_STATUS_RESPONSE 328
# define SSL_R_INVALID_TICKET_KEYS_LENGTH 325
@@ -2578,6 +2965,8 @@ void ERR_load_SSL_strings(void);
# define SSL_R_MISSING_DH_KEY 163
# define SSL_R_MISSING_DH_RSA_CERT 164
# define SSL_R_MISSING_DSA_SIGNING_CERT 165
+# define SSL_R_MISSING_ECDH_CERT 382
+# define SSL_R_MISSING_ECDSA_SIGNING_CERT 381
# define SSL_R_MISSING_EXPORT_TMP_DH_KEY 166
# define SSL_R_MISSING_EXPORT_TMP_RSA_KEY 167
# define SSL_R_MISSING_RSA_CERTIFICATE 168
@@ -2606,6 +2995,7 @@ void ERR_load_SSL_strings(void);
# define SSL_R_NO_COMPRESSION_SPECIFIED 187
# define SSL_R_NO_GOST_CERTIFICATE_SENT_BY_PEER 330
# define SSL_R_NO_METHOD_SPECIFIED 188
+# define SSL_R_NO_PEM_EXTENSIONS 389
# define SSL_R_NO_PRIVATEKEY 189
# define SSL_R_NO_PRIVATE_KEY_ASSIGNED 190
# define SSL_R_NO_PROTOCOLS_AVAILABLE 191
@@ -2613,12 +3003,15 @@ void ERR_load_SSL_strings(void);
# define SSL_R_NO_RENEGOTIATION 339
# define SSL_R_NO_REQUIRED_DIGEST 324
# define SSL_R_NO_SHARED_CIPHER 193
+# define SSL_R_NO_SHARED_SIGATURE_ALGORITHMS 376
# define SSL_R_NO_SRTP_PROFILES 359
# define SSL_R_NO_VERIFY_CALLBACK 194
# define SSL_R_NULL_SSL_CTX 195
# define SSL_R_NULL_SSL_METHOD_PASSED 196
# define SSL_R_OLD_SESSION_CIPHER_NOT_RETURNED 197
# define SSL_R_OLD_SESSION_COMPRESSION_ALGORITHM_NOT_RETURNED 344
+# define SSL_R_ONLY_DTLS_1_2_ALLOWED_IN_SUITEB_MODE 387
+# define SSL_R_ONLY_TLS_1_2_ALLOWED_IN_SUITEB_MODE 379
# define SSL_R_ONLY_TLS_ALLOWED_IN_FIPS_MODE 297
# define SSL_R_OPAQUE_PRF_INPUT_TOO_LONG 327
# define SSL_R_PACKET_LENGTH_TOO_LONG 198
@@ -2630,6 +3023,8 @@ void ERR_load_SSL_strings(void);
# define SSL_R_PEER_ERROR_NO_CERTIFICATE 202
# define SSL_R_PEER_ERROR_NO_CIPHER 203
# define SSL_R_PEER_ERROR_UNSUPPORTED_CERTIFICATE_TYPE 204
+# define SSL_R_PEM_NAME_BAD_PREFIX 391
+# define SSL_R_PEM_NAME_TOO_SHORT 392
# define SSL_R_PRE_MAC_LENGTH_TOO_LONG 205
# define SSL_R_PROBLEMS_MAPPING_CIPHER_FUNCTIONS 206
# define SSL_R_PROTOCOL_IS_SHUTDOWN 207
@@ -2732,6 +3127,7 @@ void ERR_load_SSL_strings(void);
# define SSL_R_UNKNOWN_CERTIFICATE_TYPE 247
# define SSL_R_UNKNOWN_CIPHER_RETURNED 248
# define SSL_R_UNKNOWN_CIPHER_TYPE 249
+# define SSL_R_UNKNOWN_CMD_NAME 386
# define SSL_R_UNKNOWN_DIGEST 368
# define SSL_R_UNKNOWN_KEY_EXCHANGE_TYPE 250
# define SSL_R_UNKNOWN_PKEY_TYPE 251
@@ -2749,7 +3145,9 @@ void ERR_load_SSL_strings(void);
# define SSL_R_UNSUPPORTED_STATUS_TYPE 329
# define SSL_R_USE_SRTP_NOT_NEGOTIATED 369
# define SSL_R_WRITE_BIO_NOT_SET 260
+# define SSL_R_WRONG_CERTIFICATE_TYPE 383
# define SSL_R_WRONG_CIPHER_RETURNED 261
+# define SSL_R_WRONG_CURVE 378
# define SSL_R_WRONG_MESSAGE_TYPE 262
# define SSL_R_WRONG_NUMBER_OF_KEY_BITS 263
# define SSL_R_WRONG_SIGNATURE_LENGTH 264
diff --git a/crypto/openssl/ssl/ssl3.h b/crypto/openssl/ssl/ssl3.h
index 2dd5462..e681d50 100644
--- a/crypto/openssl/ssl/ssl3.h
+++ b/crypto/openssl/ssl/ssl3.h
@@ -159,11 +159,17 @@ extern "C" {
# define SSL3_CK_DH_RSA_DES_192_CBC3_SHA 0x03000010
# define SSL3_CK_EDH_DSS_DES_40_CBC_SHA 0x03000011
+# define SSL3_CK_DHE_DSS_DES_40_CBC_SHA SSL3_CK_EDH_DSS_DES_40_CBC_SHA
# define SSL3_CK_EDH_DSS_DES_64_CBC_SHA 0x03000012
+# define SSL3_CK_DHE_DSS_DES_64_CBC_SHA SSL3_CK_EDH_DSS_DES_64_CBC_SHA
# define SSL3_CK_EDH_DSS_DES_192_CBC3_SHA 0x03000013
+# define SSL3_CK_DHE_DSS_DES_192_CBC3_SHA SSL3_CK_EDH_DSS_DES_192_CBC3_SHA
# define SSL3_CK_EDH_RSA_DES_40_CBC_SHA 0x03000014
+# define SSL3_CK_DHE_RSA_DES_40_CBC_SHA SSL3_CK_EDH_RSA_DES_40_CBC_SHA
# define SSL3_CK_EDH_RSA_DES_64_CBC_SHA 0x03000015
+# define SSL3_CK_DHE_RSA_DES_64_CBC_SHA SSL3_CK_EDH_RSA_DES_64_CBC_SHA
# define SSL3_CK_EDH_RSA_DES_192_CBC3_SHA 0x03000016
+# define SSL3_CK_DHE_RSA_DES_192_CBC3_SHA SSL3_CK_EDH_RSA_DES_192_CBC3_SHA
# define SSL3_CK_ADH_RC4_40_MD5 0x03000017
# define SSL3_CK_ADH_RC4_128_MD5 0x03000018
@@ -220,6 +226,18 @@ extern "C" {
# define SSL3_TXT_DH_RSA_DES_64_CBC_SHA "DH-RSA-DES-CBC-SHA"
# define SSL3_TXT_DH_RSA_DES_192_CBC3_SHA "DH-RSA-DES-CBC3-SHA"
+# define SSL3_TXT_DHE_DSS_DES_40_CBC_SHA "EXP-DHE-DSS-DES-CBC-SHA"
+# define SSL3_TXT_DHE_DSS_DES_64_CBC_SHA "DHE-DSS-DES-CBC-SHA"
+# define SSL3_TXT_DHE_DSS_DES_192_CBC3_SHA "DHE-DSS-DES-CBC3-SHA"
+# define SSL3_TXT_DHE_RSA_DES_40_CBC_SHA "EXP-DHE-RSA-DES-CBC-SHA"
+# define SSL3_TXT_DHE_RSA_DES_64_CBC_SHA "DHE-RSA-DES-CBC-SHA"
+# define SSL3_TXT_DHE_RSA_DES_192_CBC3_SHA "DHE-RSA-DES-CBC3-SHA"
+
+/*
+ * This next block of six "EDH" labels is for backward compatibility with
+ * older versions of OpenSSL. New code should use the six "DHE" labels above
+ * instead:
+ */
# define SSL3_TXT_EDH_DSS_DES_40_CBC_SHA "EXP-EDH-DSS-DES-CBC-SHA"
# define SSL3_TXT_EDH_DSS_DES_64_CBC_SHA "EDH-DSS-DES-CBC-SHA"
# define SSL3_TXT_EDH_DSS_DES_192_CBC3_SHA "EDH-DSS-DES-CBC3-SHA"
@@ -263,6 +281,8 @@ extern "C" {
# define SSL3_SESSION_ID_SIZE 32
# define SSL3_RT_HEADER_LENGTH 5
+# define SSL3_HM_HEADER_LENGTH 4
+
# ifndef SSL3_ALIGN_PAYLOAD
/*
* Some will argue that this increases memory footprint, but it's not
@@ -342,6 +362,23 @@ extern "C" {
# define SSL3_RT_APPLICATION_DATA 23
# define TLS1_RT_HEARTBEAT 24
+/* Pseudo content types to indicate additional parameters */
+# define TLS1_RT_CRYPTO 0x1000
+# define TLS1_RT_CRYPTO_PREMASTER (TLS1_RT_CRYPTO | 0x1)
+# define TLS1_RT_CRYPTO_CLIENT_RANDOM (TLS1_RT_CRYPTO | 0x2)
+# define TLS1_RT_CRYPTO_SERVER_RANDOM (TLS1_RT_CRYPTO | 0x3)
+# define TLS1_RT_CRYPTO_MASTER (TLS1_RT_CRYPTO | 0x4)
+
+# define TLS1_RT_CRYPTO_READ 0x0000
+# define TLS1_RT_CRYPTO_WRITE 0x0100
+# define TLS1_RT_CRYPTO_MAC (TLS1_RT_CRYPTO | 0x5)
+# define TLS1_RT_CRYPTO_KEY (TLS1_RT_CRYPTO | 0x6)
+# define TLS1_RT_CRYPTO_IV (TLS1_RT_CRYPTO | 0x7)
+# define TLS1_RT_CRYPTO_FIXED_IV (TLS1_RT_CRYPTO | 0x8)
+
+/* Pseudo content type for SSL/TLS header info */
+# define SSL3_RT_HEADER 0x100
+
# define SSL3_AL_WARNING 1
# define SSL3_AL_FATAL 2
@@ -436,14 +473,7 @@ typedef struct ssl3_buffer_st {
*/
# define SSL3_FLAGS_CCS_OK 0x0080
-/*
- * SSL3_FLAGS_SGC_RESTART_DONE is set when we restart a handshake because of
- * MS SGC and so prevents us from restarting the handshake in a loop. It's
- * reset on a renegotiation, so effectively limits the client to one restart
- * per negotiation. This limits the possibility of a DDoS attack where the
- * client handshakes in a loop using SGC to restart. Servers which permit
- * renegotiation can still be effected, but we can't prevent that.
- */
+/* SSL3_FLAGS_SGC_RESTART_DONE is no longer used */
# define SSL3_FLAGS_SGC_RESTART_DONE 0x0040
# ifndef OPENSSL_NO_SSL_INTERN
@@ -584,7 +614,20 @@ typedef struct ssl3_state_st {
*/
char is_probably_safari;
# endif /* !OPENSSL_NO_EC */
-# endif /* !OPENSSL_NO_TLSEXT */
+
+ /*
+ * ALPN information (we are in the process of transitioning from NPN to
+ * ALPN.)
+ */
+
+ /*
+ * In a server these point to the selected ALPN protocol after the
+ * ClientHello has been processed. In a client these contain the protocol
+ * that the server selected once the ServerHello has been processed.
+ */
+ unsigned char *alpn_selected;
+ unsigned alpn_selected_len;
+# endif /* OPENSSL_NO_TLSEXT */
} SSL3_STATE;
# endif
@@ -654,6 +697,7 @@ typedef struct ssl3_state_st {
# define SSL3_ST_SR_CLNT_HELLO_A (0x110|SSL_ST_ACCEPT)
# define SSL3_ST_SR_CLNT_HELLO_B (0x111|SSL_ST_ACCEPT)
# define SSL3_ST_SR_CLNT_HELLO_C (0x112|SSL_ST_ACCEPT)
+# define SSL3_ST_SR_CLNT_HELLO_D (0x115|SSL_ST_ACCEPT)
/* write to client */
# define DTLS1_ST_SW_HELLO_VERIFY_REQUEST_A (0x113|SSL_ST_ACCEPT)
# define DTLS1_ST_SW_HELLO_VERIFY_REQUEST_B (0x114|SSL_ST_ACCEPT)
diff --git a/crypto/openssl/ssl/ssl_algs.c b/crypto/openssl/ssl/ssl_algs.c
index 151422a..e6f515f 100644
--- a/crypto/openssl/ssl/ssl_algs.c
+++ b/crypto/openssl/ssl/ssl_algs.c
@@ -95,6 +95,10 @@ int SSL_library_init(void)
EVP_add_cipher(EVP_aes_128_cbc_hmac_sha1());
EVP_add_cipher(EVP_aes_256_cbc_hmac_sha1());
# endif
+# if !defined(OPENSSL_NO_SHA) && !defined(OPENSSL_NO_SHA256)
+ EVP_add_cipher(EVP_aes_128_cbc_hmac_sha256());
+ EVP_add_cipher(EVP_aes_256_cbc_hmac_sha256());
+# endif
#endif
#ifndef OPENSSL_NO_CAMELLIA
diff --git a/crypto/openssl/ssl/ssl_cert.c b/crypto/openssl/ssl/ssl_cert.c
index 5df2413..93a1eb9 100644
--- a/crypto/openssl/ssl/ssl_cert.c
+++ b/crypto/openssl/ssl/ssl_cert.c
@@ -139,29 +139,50 @@ int SSL_get_ex_data_X509_STORE_CTX_idx(void)
static volatile int ssl_x509_store_ctx_idx = -1;
int got_write_lock = 0;
- CRYPTO_r_lock(CRYPTO_LOCK_SSL_CTX);
+ if (((size_t)&ssl_x509_store_ctx_idx &
+ (sizeof(ssl_x509_store_ctx_idx) - 1))
+ == 0) { /* check alignment, practically always true */
+ int ret;
+
+ if ((ret = ssl_x509_store_ctx_idx) < 0) {
+ CRYPTO_w_lock(CRYPTO_LOCK_SSL_CTX);
+ if ((ret = ssl_x509_store_ctx_idx) < 0) {
+ ret = ssl_x509_store_ctx_idx =
+ X509_STORE_CTX_get_ex_new_index(0,
+ "SSL for verify callback",
+ NULL, NULL, NULL);
+ }
+ CRYPTO_w_unlock(CRYPTO_LOCK_SSL_CTX);
+ }
+
+ return ret;
+ } else { /* commonly eliminated */
- if (ssl_x509_store_ctx_idx < 0) {
- CRYPTO_r_unlock(CRYPTO_LOCK_SSL_CTX);
- CRYPTO_w_lock(CRYPTO_LOCK_SSL_CTX);
- got_write_lock = 1;
+ CRYPTO_r_lock(CRYPTO_LOCK_SSL_CTX);
if (ssl_x509_store_ctx_idx < 0) {
- ssl_x509_store_ctx_idx =
- X509_STORE_CTX_get_ex_new_index(0, "SSL for verify callback",
- NULL, NULL, NULL);
+ CRYPTO_r_unlock(CRYPTO_LOCK_SSL_CTX);
+ CRYPTO_w_lock(CRYPTO_LOCK_SSL_CTX);
+ got_write_lock = 1;
+
+ if (ssl_x509_store_ctx_idx < 0) {
+ ssl_x509_store_ctx_idx =
+ X509_STORE_CTX_get_ex_new_index(0,
+ "SSL for verify callback",
+ NULL, NULL, NULL);
+ }
}
- }
- if (got_write_lock)
- CRYPTO_w_unlock(CRYPTO_LOCK_SSL_CTX);
- else
- CRYPTO_r_unlock(CRYPTO_LOCK_SSL_CTX);
+ if (got_write_lock)
+ CRYPTO_w_unlock(CRYPTO_LOCK_SSL_CTX);
+ else
+ CRYPTO_r_unlock(CRYPTO_LOCK_SSL_CTX);
- return ssl_x509_store_ctx_idx;
+ return ssl_x509_store_ctx_idx;
+ }
}
-static void ssl_cert_set_default_md(CERT *cert)
+void ssl_cert_set_default_md(CERT *cert)
{
/* Set digest values to defaults */
#ifndef OPENSSL_NO_DSA
@@ -262,25 +283,47 @@ CERT *ssl_cert_dup(CERT *cert)
}
}
ret->ecdh_tmp_cb = cert->ecdh_tmp_cb;
+ ret->ecdh_tmp_auto = cert->ecdh_tmp_auto;
#endif
for (i = 0; i < SSL_PKEY_NUM; i++) {
- if (cert->pkeys[i].x509 != NULL) {
- ret->pkeys[i].x509 = cert->pkeys[i].x509;
- CRYPTO_add(&ret->pkeys[i].x509->references, 1, CRYPTO_LOCK_X509);
+ CERT_PKEY *cpk = cert->pkeys + i;
+ CERT_PKEY *rpk = ret->pkeys + i;
+ if (cpk->x509 != NULL) {
+ rpk->x509 = cpk->x509;
+ CRYPTO_add(&rpk->x509->references, 1, CRYPTO_LOCK_X509);
}
- if (cert->pkeys[i].privatekey != NULL) {
- ret->pkeys[i].privatekey = cert->pkeys[i].privatekey;
- CRYPTO_add(&ret->pkeys[i].privatekey->references, 1,
- CRYPTO_LOCK_EVP_PKEY);
+ if (cpk->privatekey != NULL) {
+ rpk->privatekey = cpk->privatekey;
+ CRYPTO_add(&cpk->privatekey->references, 1, CRYPTO_LOCK_EVP_PKEY);
}
- }
- /*
- * ret->extra_certs *should* exist, but currently the own certificate
- * chain is held inside SSL_CTX
- */
+ if (cpk->chain) {
+ rpk->chain = X509_chain_up_ref(cpk->chain);
+ if (!rpk->chain) {
+ SSLerr(SSL_F_SSL_CERT_DUP, ERR_R_MALLOC_FAILURE);
+ goto err;
+ }
+ }
+ rpk->valid_flags = 0;
+#ifndef OPENSSL_NO_TLSEXT
+ if (cert->pkeys[i].serverinfo != NULL) {
+ /* Just copy everything. */
+ ret->pkeys[i].serverinfo =
+ OPENSSL_malloc(cert->pkeys[i].serverinfo_length);
+ if (ret->pkeys[i].serverinfo == NULL) {
+ SSLerr(SSL_F_SSL_CERT_DUP, ERR_R_MALLOC_FAILURE);
+ return NULL;
+ }
+ ret->pkeys[i].serverinfo_length =
+ cert->pkeys[i].serverinfo_length;
+ memcpy(ret->pkeys[i].serverinfo,
+ cert->pkeys[i].serverinfo,
+ cert->pkeys[i].serverinfo_length);
+ }
+#endif
+ }
ret->references = 1;
/*
@@ -288,6 +331,64 @@ CERT *ssl_cert_dup(CERT *cert)
* will be set during handshake.
*/
ssl_cert_set_default_md(ret);
+ /* Peer sigalgs set to NULL as we get these from handshake too */
+ ret->peer_sigalgs = NULL;
+ ret->peer_sigalgslen = 0;
+ /* Configured sigalgs however we copy across */
+
+ if (cert->conf_sigalgs) {
+ ret->conf_sigalgs = OPENSSL_malloc(cert->conf_sigalgslen);
+ if (!ret->conf_sigalgs)
+ goto err;
+ memcpy(ret->conf_sigalgs, cert->conf_sigalgs, cert->conf_sigalgslen);
+ ret->conf_sigalgslen = cert->conf_sigalgslen;
+ } else
+ ret->conf_sigalgs = NULL;
+
+ if (cert->client_sigalgs) {
+ ret->client_sigalgs = OPENSSL_malloc(cert->client_sigalgslen);
+ if (!ret->client_sigalgs)
+ goto err;
+ memcpy(ret->client_sigalgs, cert->client_sigalgs,
+ cert->client_sigalgslen);
+ ret->client_sigalgslen = cert->client_sigalgslen;
+ } else
+ ret->client_sigalgs = NULL;
+ /* Shared sigalgs also NULL */
+ ret->shared_sigalgs = NULL;
+ /* Copy any custom client certificate types */
+ if (cert->ctypes) {
+ ret->ctypes = OPENSSL_malloc(cert->ctype_num);
+ if (!ret->ctypes)
+ goto err;
+ memcpy(ret->ctypes, cert->ctypes, cert->ctype_num);
+ ret->ctype_num = cert->ctype_num;
+ }
+
+ ret->cert_flags = cert->cert_flags;
+
+ ret->cert_cb = cert->cert_cb;
+ ret->cert_cb_arg = cert->cert_cb_arg;
+
+ if (cert->verify_store) {
+ CRYPTO_add(&cert->verify_store->references, 1,
+ CRYPTO_LOCK_X509_STORE);
+ ret->verify_store = cert->verify_store;
+ }
+
+ if (cert->chain_store) {
+ CRYPTO_add(&cert->chain_store->references, 1, CRYPTO_LOCK_X509_STORE);
+ ret->chain_store = cert->chain_store;
+ }
+
+ ret->ciphers_raw = NULL;
+
+#ifndef OPENSSL_NO_TLSEXT
+ if (!custom_exts_copy(&ret->cli_ext, &cert->cli_ext))
+ goto err;
+ if (!custom_exts_copy(&ret->srv_ext, &cert->srv_ext))
+ goto err;
+#endif
return (ret);
@@ -307,16 +408,49 @@ CERT *ssl_cert_dup(CERT *cert)
EC_KEY_free(ret->ecdh_tmp);
#endif
- for (i = 0; i < SSL_PKEY_NUM; i++) {
- if (ret->pkeys[i].x509 != NULL)
- X509_free(ret->pkeys[i].x509);
- if (ret->pkeys[i].privatekey != NULL)
- EVP_PKEY_free(ret->pkeys[i].privatekey);
- }
+#ifndef OPENSSL_NO_TLSEXT
+ custom_exts_free(&ret->cli_ext);
+ custom_exts_free(&ret->srv_ext);
+#endif
+
+ ssl_cert_clear_certs(ret);
return NULL;
}
+/* Free up and clear all certificates and chains */
+
+void ssl_cert_clear_certs(CERT *c)
+{
+ int i;
+ if (c == NULL)
+ return;
+ for (i = 0; i < SSL_PKEY_NUM; i++) {
+ CERT_PKEY *cpk = c->pkeys + i;
+ if (cpk->x509) {
+ X509_free(cpk->x509);
+ cpk->x509 = NULL;
+ }
+ if (cpk->privatekey) {
+ EVP_PKEY_free(cpk->privatekey);
+ cpk->privatekey = NULL;
+ }
+ if (cpk->chain) {
+ sk_X509_pop_free(cpk->chain, X509_free);
+ cpk->chain = NULL;
+ }
+#ifndef OPENSSL_NO_TLSEXT
+ if (cpk->serverinfo) {
+ OPENSSL_free(cpk->serverinfo);
+ cpk->serverinfo = NULL;
+ cpk->serverinfo_length = 0;
+ }
+#endif
+ /* Clear all flags apart from explicit sign */
+ cpk->valid_flags &= CERT_PKEY_EXPLICIT_SIGN;
+ }
+}
+
void ssl_cert_free(CERT *c)
{
int i;
@@ -350,16 +484,27 @@ void ssl_cert_free(CERT *c)
EC_KEY_free(c->ecdh_tmp);
#endif
- for (i = 0; i < SSL_PKEY_NUM; i++) {
- if (c->pkeys[i].x509 != NULL)
- X509_free(c->pkeys[i].x509);
- if (c->pkeys[i].privatekey != NULL)
- EVP_PKEY_free(c->pkeys[i].privatekey);
-#if 0
- if (c->pkeys[i].publickey != NULL)
- EVP_PKEY_free(c->pkeys[i].publickey);
+ ssl_cert_clear_certs(c);
+ if (c->peer_sigalgs)
+ OPENSSL_free(c->peer_sigalgs);
+ if (c->conf_sigalgs)
+ OPENSSL_free(c->conf_sigalgs);
+ if (c->client_sigalgs)
+ OPENSSL_free(c->client_sigalgs);
+ if (c->shared_sigalgs)
+ OPENSSL_free(c->shared_sigalgs);
+ if (c->ctypes)
+ OPENSSL_free(c->ctypes);
+ if (c->verify_store)
+ X509_STORE_free(c->verify_store);
+ if (c->chain_store)
+ X509_STORE_free(c->chain_store);
+ if (c->ciphers_raw)
+ OPENSSL_free(c->ciphers_raw);
+#ifndef OPENSSL_NO_TLSEXT
+ custom_exts_free(&c->cli_ext);
+ custom_exts_free(&c->srv_ext);
#endif
- }
OPENSSL_free(c);
}
@@ -388,6 +533,104 @@ int ssl_cert_inst(CERT **o)
return (1);
}
+int ssl_cert_set0_chain(CERT *c, STACK_OF(X509) *chain)
+{
+ CERT_PKEY *cpk = c->key;
+ if (!cpk)
+ return 0;
+ if (cpk->chain)
+ sk_X509_pop_free(cpk->chain, X509_free);
+ cpk->chain = chain;
+ return 1;
+}
+
+int ssl_cert_set1_chain(CERT *c, STACK_OF(X509) *chain)
+{
+ STACK_OF(X509) *dchain;
+ if (!chain)
+ return ssl_cert_set0_chain(c, NULL);
+ dchain = X509_chain_up_ref(chain);
+ if (!dchain)
+ return 0;
+ if (!ssl_cert_set0_chain(c, dchain)) {
+ sk_X509_pop_free(dchain, X509_free);
+ return 0;
+ }
+ return 1;
+}
+
+int ssl_cert_add0_chain_cert(CERT *c, X509 *x)
+{
+ CERT_PKEY *cpk = c->key;
+ if (!cpk)
+ return 0;
+ if (!cpk->chain)
+ cpk->chain = sk_X509_new_null();
+ if (!cpk->chain || !sk_X509_push(cpk->chain, x))
+ return 0;
+ return 1;
+}
+
+int ssl_cert_add1_chain_cert(CERT *c, X509 *x)
+{
+ if (!ssl_cert_add0_chain_cert(c, x))
+ return 0;
+ CRYPTO_add(&x->references, 1, CRYPTO_LOCK_X509);
+ return 1;
+}
+
+int ssl_cert_select_current(CERT *c, X509 *x)
+{
+ int i;
+ if (x == NULL)
+ return 0;
+ for (i = 0; i < SSL_PKEY_NUM; i++) {
+ CERT_PKEY *cpk = c->pkeys + i;
+ if (cpk->x509 == x && cpk->privatekey) {
+ c->key = cpk;
+ return 1;
+ }
+ }
+
+ for (i = 0; i < SSL_PKEY_NUM; i++) {
+ CERT_PKEY *cpk = c->pkeys + i;
+ if (cpk->privatekey && cpk->x509 && !X509_cmp(cpk->x509, x)) {
+ c->key = cpk;
+ return 1;
+ }
+ }
+ return 0;
+}
+
+int ssl_cert_set_current(CERT *c, long op)
+{
+ int i, idx;
+ if (!c)
+ return 0;
+ if (op == SSL_CERT_SET_FIRST)
+ idx = 0;
+ else if (op == SSL_CERT_SET_NEXT) {
+ idx = (int)(c->key - c->pkeys + 1);
+ if (idx >= SSL_PKEY_NUM)
+ return 0;
+ } else
+ return 0;
+ for (i = idx; i < SSL_PKEY_NUM; i++) {
+ CERT_PKEY *cpk = c->pkeys + i;
+ if (cpk->x509 && cpk->privatekey) {
+ c->key = cpk;
+ return 1;
+ }
+ }
+ return 0;
+}
+
+void ssl_cert_set_cert_cb(CERT *c, int (*cb) (SSL *ssl, void *arg), void *arg)
+{
+ c->cert_cb = cb;
+ c->cert_cb_arg = arg;
+}
+
SESS_CERT *ssl_sess_cert_new(void)
{
SESS_CERT *ret;
@@ -466,16 +709,24 @@ int ssl_verify_cert_chain(SSL *s, STACK_OF(X509) *sk)
{
X509 *x;
int i;
+ X509_STORE *verify_store;
X509_STORE_CTX ctx;
+ if (s->cert->verify_store)
+ verify_store = s->cert->verify_store;
+ else
+ verify_store = s->ctx->cert_store;
+
if ((sk == NULL) || (sk_X509_num(sk) == 0))
return (0);
x = sk_X509_value(sk, 0);
- if (!X509_STORE_CTX_init(&ctx, s->ctx->cert_store, x, sk)) {
+ if (!X509_STORE_CTX_init(&ctx, verify_store, x, sk)) {
SSLerr(SSL_F_SSL_VERIFY_CERT_CHAIN, ERR_R_X509_LIB);
return (0);
}
+ /* Set suite B flags if needed */
+ X509_STORE_CTX_set_flags(&ctx, tls1_suiteb(s));
#if 0
if (SSL_get_verify_depth(s) >= 0)
X509_STORE_CTX_set_depth(&ctx, SSL_get_verify_depth(s));
@@ -797,3 +1048,210 @@ int SSL_add_dir_cert_subjects_to_stack(STACK_OF(X509_NAME) *stack,
CRYPTO_w_unlock(CRYPTO_LOCK_READDIR);
return ret;
}
+
+/* Add a certificate to a BUF_MEM structure */
+
+static int ssl_add_cert_to_buf(BUF_MEM *buf, unsigned long *l, X509 *x)
+{
+ int n;
+ unsigned char *p;
+
+ n = i2d_X509(x, NULL);
+ if (!BUF_MEM_grow_clean(buf, (int)(n + (*l) + 3))) {
+ SSLerr(SSL_F_SSL_ADD_CERT_TO_BUF, ERR_R_BUF_LIB);
+ return 0;
+ }
+ p = (unsigned char *)&(buf->data[*l]);
+ l2n3(n, p);
+ i2d_X509(x, &p);
+ *l += n + 3;
+
+ return 1;
+}
+
+/* Add certificate chain to internal SSL BUF_MEM strcuture */
+int ssl_add_cert_chain(SSL *s, CERT_PKEY *cpk, unsigned long *l)
+{
+ BUF_MEM *buf = s->init_buf;
+ int no_chain;
+ int i;
+
+ X509 *x;
+ STACK_OF(X509) *extra_certs;
+ X509_STORE *chain_store;
+
+ if (cpk)
+ x = cpk->x509;
+ else
+ x = NULL;
+
+ if (s->cert->chain_store)
+ chain_store = s->cert->chain_store;
+ else
+ chain_store = s->ctx->cert_store;
+
+ /*
+ * If we have a certificate specific chain use it, else use parent ctx.
+ */
+ if (cpk && cpk->chain)
+ extra_certs = cpk->chain;
+ else
+ extra_certs = s->ctx->extra_certs;
+
+ if ((s->mode & SSL_MODE_NO_AUTO_CHAIN) || extra_certs)
+ no_chain = 1;
+ else
+ no_chain = 0;
+
+ /* TLSv1 sends a chain with nothing in it, instead of an alert */
+ if (!BUF_MEM_grow_clean(buf, 10)) {
+ SSLerr(SSL_F_SSL_ADD_CERT_CHAIN, ERR_R_BUF_LIB);
+ return 0;
+ }
+ if (x != NULL) {
+ if (no_chain) {
+ if (!ssl_add_cert_to_buf(buf, l, x))
+ return 0;
+ } else {
+ X509_STORE_CTX xs_ctx;
+
+ if (!X509_STORE_CTX_init(&xs_ctx, chain_store, x, NULL)) {
+ SSLerr(SSL_F_SSL_ADD_CERT_CHAIN, ERR_R_X509_LIB);
+ return (0);
+ }
+ X509_verify_cert(&xs_ctx);
+ /* Don't leave errors in the queue */
+ ERR_clear_error();
+ for (i = 0; i < sk_X509_num(xs_ctx.chain); i++) {
+ x = sk_X509_value(xs_ctx.chain, i);
+
+ if (!ssl_add_cert_to_buf(buf, l, x)) {
+ X509_STORE_CTX_cleanup(&xs_ctx);
+ return 0;
+ }
+ }
+ X509_STORE_CTX_cleanup(&xs_ctx);
+ }
+ }
+ for (i = 0; i < sk_X509_num(extra_certs); i++) {
+ x = sk_X509_value(extra_certs, i);
+ if (!ssl_add_cert_to_buf(buf, l, x))
+ return 0;
+ }
+
+ return 1;
+}
+
+/* Build a certificate chain for current certificate */
+int ssl_build_cert_chain(CERT *c, X509_STORE *chain_store, int flags)
+{
+ CERT_PKEY *cpk = c->key;
+ X509_STORE_CTX xs_ctx;
+ STACK_OF(X509) *chain = NULL, *untrusted = NULL;
+ X509 *x;
+ int i, rv = 0;
+ unsigned long error;
+
+ if (!cpk->x509) {
+ SSLerr(SSL_F_SSL_BUILD_CERT_CHAIN, SSL_R_NO_CERTIFICATE_SET);
+ goto err;
+ }
+ /* Rearranging and check the chain: add everything to a store */
+ if (flags & SSL_BUILD_CHAIN_FLAG_CHECK) {
+ chain_store = X509_STORE_new();
+ if (!chain_store)
+ goto err;
+ for (i = 0; i < sk_X509_num(cpk->chain); i++) {
+ x = sk_X509_value(cpk->chain, i);
+ if (!X509_STORE_add_cert(chain_store, x)) {
+ error = ERR_peek_last_error();
+ if (ERR_GET_LIB(error) != ERR_LIB_X509 ||
+ ERR_GET_REASON(error) !=
+ X509_R_CERT_ALREADY_IN_HASH_TABLE)
+ goto err;
+ ERR_clear_error();
+ }
+ }
+ /* Add EE cert too: it might be self signed */
+ if (!X509_STORE_add_cert(chain_store, cpk->x509)) {
+ error = ERR_peek_last_error();
+ if (ERR_GET_LIB(error) != ERR_LIB_X509 ||
+ ERR_GET_REASON(error) != X509_R_CERT_ALREADY_IN_HASH_TABLE)
+ goto err;
+ ERR_clear_error();
+ }
+ } else {
+ if (c->chain_store)
+ chain_store = c->chain_store;
+
+ if (flags & SSL_BUILD_CHAIN_FLAG_UNTRUSTED)
+ untrusted = cpk->chain;
+ }
+
+ if (!X509_STORE_CTX_init(&xs_ctx, chain_store, cpk->x509, untrusted)) {
+ SSLerr(SSL_F_SSL_BUILD_CERT_CHAIN, ERR_R_X509_LIB);
+ goto err;
+ }
+ /* Set suite B flags if needed */
+ X509_STORE_CTX_set_flags(&xs_ctx,
+ c->cert_flags & SSL_CERT_FLAG_SUITEB_128_LOS);
+
+ i = X509_verify_cert(&xs_ctx);
+ if (i <= 0 && flags & SSL_BUILD_CHAIN_FLAG_IGNORE_ERROR) {
+ if (flags & SSL_BUILD_CHAIN_FLAG_CLEAR_ERROR)
+ ERR_clear_error();
+ i = 1;
+ rv = 2;
+ }
+ if (i > 0)
+ chain = X509_STORE_CTX_get1_chain(&xs_ctx);
+ if (i <= 0) {
+ SSLerr(SSL_F_SSL_BUILD_CERT_CHAIN, SSL_R_CERTIFICATE_VERIFY_FAILED);
+ i = X509_STORE_CTX_get_error(&xs_ctx);
+ ERR_add_error_data(2, "Verify error:",
+ X509_verify_cert_error_string(i));
+
+ X509_STORE_CTX_cleanup(&xs_ctx);
+ goto err;
+ }
+ X509_STORE_CTX_cleanup(&xs_ctx);
+ if (cpk->chain)
+ sk_X509_pop_free(cpk->chain, X509_free);
+ /* Remove EE certificate from chain */
+ x = sk_X509_shift(chain);
+ X509_free(x);
+ if (flags & SSL_BUILD_CHAIN_FLAG_NO_ROOT) {
+ if (sk_X509_num(chain) > 0) {
+ /* See if last cert is self signed */
+ x = sk_X509_value(chain, sk_X509_num(chain) - 1);
+ X509_check_purpose(x, -1, 0);
+ if (x->ex_flags & EXFLAG_SS) {
+ x = sk_X509_pop(chain);
+ X509_free(x);
+ }
+ }
+ }
+ cpk->chain = chain;
+ if (rv == 0)
+ rv = 1;
+ err:
+ if (flags & SSL_BUILD_CHAIN_FLAG_CHECK)
+ X509_STORE_free(chain_store);
+
+ return rv;
+}
+
+int ssl_cert_set_cert_store(CERT *c, X509_STORE *store, int chain, int ref)
+{
+ X509_STORE **pstore;
+ if (chain)
+ pstore = &c->chain_store;
+ else
+ pstore = &c->verify_store;
+ if (*pstore)
+ X509_STORE_free(*pstore);
+ *pstore = store;
+ if (ref && store)
+ CRYPTO_add(&store->references, 1, CRYPTO_LOCK_X509_STORE);
+ return 1;
+}
diff --git a/crypto/openssl/ssl/ssl_ciph.c b/crypto/openssl/ssl/ssl_ciph.c
index cac525e..2cc9a4a 100644
--- a/crypto/openssl/ssl/ssl_ciph.c
+++ b/crypto/openssl/ssl/ssl_ciph.c
@@ -245,13 +245,11 @@ static const SSL_CIPHER cipher_aliases[] = {
*/
{0, SSL_TXT_kRSA, 0, SSL_kRSA, 0, 0, 0, 0, 0, 0, 0, 0},
- /* no such ciphersuites supported! */
{0, SSL_TXT_kDHr, 0, SSL_kDHr, 0, 0, 0, 0, 0, 0, 0, 0},
- /* no such ciphersuites supported! */
{0, SSL_TXT_kDHd, 0, SSL_kDHd, 0, 0, 0, 0, 0, 0, 0, 0},
- /* no such ciphersuites supported! */
{0, SSL_TXT_kDH, 0, SSL_kDHr | SSL_kDHd, 0, 0, 0, 0, 0, 0, 0, 0},
- {0, SSL_TXT_kEDH, 0, SSL_kEDH, 0, 0, 0, 0, 0, 0, 0, 0},
+ {0, SSL_TXT_kEDH, 0, SSL_kEDH, 0, 0, 0, 0, 0, 0, 0, 0},
+ {0, SSL_TXT_kDHE, 0, SSL_kEDH, 0, 0, 0, 0, 0, 0, 0, 0},
{0, SSL_TXT_DH, 0, SSL_kDHr | SSL_kDHd | SSL_kEDH, 0, 0, 0, 0, 0, 0, 0,
0},
@@ -261,6 +259,7 @@ static const SSL_CIPHER cipher_aliases[] = {
{0, SSL_TXT_kECDHe, 0, SSL_kECDHe, 0, 0, 0, 0, 0, 0, 0, 0},
{0, SSL_TXT_kECDH, 0, SSL_kECDHr | SSL_kECDHe, 0, 0, 0, 0, 0, 0, 0, 0},
{0, SSL_TXT_kEECDH, 0, SSL_kEECDH, 0, 0, 0, 0, 0, 0, 0, 0},
+ {0, SSL_TXT_kECDHE, 0, SSL_kEECDH, 0, 0, 0, 0, 0, 0, 0, 0},
{0, SSL_TXT_ECDH, 0, SSL_kECDHr | SSL_kECDHe | SSL_kEECDH, 0, 0, 0, 0, 0,
0, 0, 0},
@@ -287,7 +286,9 @@ static const SSL_CIPHER cipher_aliases[] = {
/* aliases combining key exchange and server authentication */
{0, SSL_TXT_EDH, 0, SSL_kEDH, ~SSL_aNULL, 0, 0, 0, 0, 0, 0, 0},
+ {0, SSL_TXT_DHE, 0, SSL_kEDH, ~SSL_aNULL, 0, 0, 0, 0, 0, 0, 0},
{0, SSL_TXT_EECDH, 0, SSL_kEECDH, ~SSL_aNULL, 0, 0, 0, 0, 0, 0, 0},
+ {0, SSL_TXT_ECDHE, 0, SSL_kEECDH, ~SSL_aNULL, 0, 0, 0, 0, 0, 0, 0},
{0, SSL_TXT_NULL, 0, 0, 0, SSL_eNULL, 0, 0, 0, 0, 0, 0},
{0, SSL_TXT_KRB5, 0, SSL_kKRB5, SSL_aKRB5, 0, 0, 0, 0, 0, 0, 0},
{0, SSL_TXT_RSA, 0, SSL_kRSA, SSL_aRSA, 0, 0, 0, 0, 0, 0, 0},
@@ -343,6 +344,25 @@ static const SSL_CIPHER cipher_aliases[] = {
{0, SSL_TXT_HIGH, 0, 0, 0, 0, 0, 0, SSL_HIGH, 0, 0, 0},
/* FIPS 140-2 approved ciphersuite */
{0, SSL_TXT_FIPS, 0, 0, 0, ~SSL_eNULL, 0, 0, SSL_FIPS, 0, 0, 0},
+ /* "DHE-" aliases to "EDH-" labels (for forward compatibility) */
+ {0, SSL3_TXT_DHE_DSS_DES_40_CBC_SHA, 0,
+ SSL_kDHE, SSL_aDSS, SSL_DES, SSL_SHA1, SSL_SSLV3, SSL_EXPORT | SSL_EXP40,
+ 0, 0, 0,},
+ {0, SSL3_TXT_DHE_DSS_DES_64_CBC_SHA, 0,
+ SSL_kDHE, SSL_aDSS, SSL_DES, SSL_SHA1, SSL_SSLV3, SSL_NOT_EXP | SSL_LOW,
+ 0, 0, 0,},
+ {0, SSL3_TXT_DHE_DSS_DES_192_CBC3_SHA, 0,
+ SSL_kDHE, SSL_aDSS, SSL_3DES, SSL_SHA1, SSL_SSLV3,
+ SSL_NOT_EXP | SSL_HIGH | SSL_FIPS, 0, 0, 0,},
+ {0, SSL3_TXT_DHE_RSA_DES_40_CBC_SHA, 0,
+ SSL_kDHE, SSL_aRSA, SSL_DES, SSL_SHA1, SSL_SSLV3, SSL_EXPORT | SSL_EXP40,
+ 0, 0, 0,},
+ {0, SSL3_TXT_DHE_RSA_DES_64_CBC_SHA, 0,
+ SSL_kDHE, SSL_aRSA, SSL_DES, SSL_SHA1, SSL_SSLV3, SSL_NOT_EXP | SSL_LOW,
+ 0, 0, 0,},
+ {0, SSL3_TXT_DHE_RSA_DES_192_CBC3_SHA, 0,
+ SSL_kDHE, SSL_aRSA, SSL_3DES, SSL_SHA1, SSL_SSLV3,
+ SSL_NOT_EXP | SSL_HIGH | SSL_FIPS, 0, 0, 0,},
};
/*
@@ -638,6 +658,14 @@ int ssl_cipher_get_evp(const SSL_SESSION *s, const EVP_CIPHER **enc,
c->algorithm_mac == SSL_SHA1 &&
(evp = EVP_get_cipherbyname("AES-256-CBC-HMAC-SHA1")))
*enc = evp, *md = NULL;
+ else if (c->algorithm_enc == SSL_AES128 &&
+ c->algorithm_mac == SSL_SHA256 &&
+ (evp = EVP_get_cipherbyname("AES-128-CBC-HMAC-SHA256")))
+ *enc = evp, *md = NULL;
+ else if (c->algorithm_enc == SSL_AES256 &&
+ c->algorithm_mac == SSL_SHA256 &&
+ (evp = EVP_get_cipherbyname("AES-256-CBC-HMAC-SHA256")))
+ *enc = evp, *md = NULL;
return (1);
} else
return (0);
@@ -710,8 +738,6 @@ static void ssl_cipher_get_disabled(unsigned long *mkey, unsigned long *auth,
#ifdef OPENSSL_NO_DSA
*auth |= SSL_aDSS;
#endif
- *mkey |= SSL_kDHr | SSL_kDHd; /* no such ciphersuites supported! */
- *auth |= SSL_aDH;
#ifdef OPENSSL_NO_DH
*mkey |= SSL_kDHr | SSL_kDHd | SSL_kEDH;
*auth |= SSL_aDH;
@@ -997,6 +1023,10 @@ static void ssl_cipher_apply_rule(unsigned long cipher_id,
cp->algorithm_enc, cp->algorithm_mac, cp->algorithm_ssl,
cp->algo_strength);
#endif
+#ifdef OPENSSL_SSL_DEBUG_BROKEN_PROTOCOL
+ if (cipher_id && cipher_id != cp->id)
+ continue;
+#endif
if (algo_strength == SSL_EXP_MASK && SSL_C_IS_EXPORT(cp))
goto ok;
if (alg_ssl == ~SSL_SSLV2 && cp->algorithm_ssl == SSL_SSLV2)
@@ -1369,10 +1399,71 @@ static int ssl_cipher_process_rulestr(const char *rule_str,
return (retval);
}
+#ifndef OPENSSL_NO_EC
+static int check_suiteb_cipher_list(const SSL_METHOD *meth, CERT *c,
+ const char **prule_str)
+{
+ unsigned int suiteb_flags = 0, suiteb_comb2 = 0;
+ if (!strcmp(*prule_str, "SUITEB128"))
+ suiteb_flags = SSL_CERT_FLAG_SUITEB_128_LOS;
+ else if (!strcmp(*prule_str, "SUITEB128ONLY"))
+ suiteb_flags = SSL_CERT_FLAG_SUITEB_128_LOS_ONLY;
+ else if (!strcmp(*prule_str, "SUITEB128C2")) {
+ suiteb_comb2 = 1;
+ suiteb_flags = SSL_CERT_FLAG_SUITEB_128_LOS;
+ } else if (!strcmp(*prule_str, "SUITEB192"))
+ suiteb_flags = SSL_CERT_FLAG_SUITEB_192_LOS;
+
+ if (suiteb_flags) {
+ c->cert_flags &= ~SSL_CERT_FLAG_SUITEB_128_LOS;
+ c->cert_flags |= suiteb_flags;
+ } else
+ suiteb_flags = c->cert_flags & SSL_CERT_FLAG_SUITEB_128_LOS;
+
+ if (!suiteb_flags)
+ return 1;
+ /* Check version: if TLS 1.2 ciphers allowed we can use Suite B */
+
+ if (!(meth->ssl3_enc->enc_flags & SSL_ENC_FLAG_TLS1_2_CIPHERS)) {
+ if (meth->ssl3_enc->enc_flags & SSL_ENC_FLAG_DTLS)
+ SSLerr(SSL_F_CHECK_SUITEB_CIPHER_LIST,
+ SSL_R_ONLY_DTLS_1_2_ALLOWED_IN_SUITEB_MODE);
+ else
+ SSLerr(SSL_F_CHECK_SUITEB_CIPHER_LIST,
+ SSL_R_ONLY_TLS_1_2_ALLOWED_IN_SUITEB_MODE);
+ return 0;
+ }
+# ifndef OPENSSL_NO_ECDH
+ switch (suiteb_flags) {
+ case SSL_CERT_FLAG_SUITEB_128_LOS:
+ if (suiteb_comb2)
+ *prule_str = "ECDHE-ECDSA-AES256-GCM-SHA384";
+ else
+ *prule_str =
+ "ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384";
+ break;
+ case SSL_CERT_FLAG_SUITEB_128_LOS_ONLY:
+ *prule_str = "ECDHE-ECDSA-AES128-GCM-SHA256";
+ break;
+ case SSL_CERT_FLAG_SUITEB_192_LOS:
+ *prule_str = "ECDHE-ECDSA-AES256-GCM-SHA384";
+ break;
+ }
+ /* Set auto ECDH parameter determination */
+ c->ecdh_tmp_auto = 1;
+ return 1;
+# else
+ SSLerr(SSL_F_CHECK_SUITEB_CIPHER_LIST,
+ SSL_R_ECDH_REQUIRED_FOR_SUITEB_MODE);
+ return 0;
+# endif
+}
+#endif
+
STACK_OF(SSL_CIPHER) *ssl_create_cipher_list(const SSL_METHOD *ssl_method, STACK_OF(SSL_CIPHER)
**cipher_list, STACK_OF(SSL_CIPHER)
**cipher_list_by_id,
- const char *rule_str)
+ const char *rule_str, CERT *c)
{
int ok, num_of_ciphers, num_of_alias_max, num_of_group_aliases;
unsigned long disabled_mkey, disabled_auth, disabled_enc, disabled_mac,
@@ -1387,6 +1478,10 @@ STACK_OF(SSL_CIPHER) *ssl_create_cipher_list(const SSL_METHOD *ssl_method, STACK
*/
if (rule_str == NULL || cipher_list == NULL || cipher_list_by_id == NULL)
return NULL;
+#ifndef OPENSSL_NO_EC
+ if (!check_suiteb_cipher_list(ssl_method, c, &rule_str))
+ return NULL;
+#endif
/*
* To reduce the work to do we only want to process the compiled
@@ -1854,6 +1949,26 @@ STACK_OF(SSL_COMP) *SSL_COMP_get_compression_methods(void)
return (ssl_comp_methods);
}
+STACK_OF(SSL_COMP) *SSL_COMP_set0_compression_methods(STACK_OF(SSL_COMP)
+ *meths)
+{
+ STACK_OF(SSL_COMP) *old_meths = ssl_comp_methods;
+ ssl_comp_methods = meths;
+ return old_meths;
+}
+
+static void cmeth_free(SSL_COMP *cm)
+{
+ OPENSSL_free(cm);
+}
+
+void SSL_COMP_free_compression_methods(void)
+{
+ STACK_OF(SSL_COMP) *old_meths = ssl_comp_methods;
+ ssl_comp_methods = NULL;
+ sk_SSL_COMP_pop_free(old_meths, cmeth_free);
+}
+
int SSL_COMP_add_compression_method(int id, COMP_METHOD *cm)
{
SSL_COMP *comp;
@@ -1904,5 +2019,55 @@ const char *SSL_COMP_get_name(const COMP_METHOD *comp)
return comp->name;
return NULL;
}
-
#endif
+/* For a cipher return the index corresponding to the certificate type */
+int ssl_cipher_get_cert_index(const SSL_CIPHER *c)
+{
+ unsigned long alg_k, alg_a;
+
+ alg_k = c->algorithm_mkey;
+ alg_a = c->algorithm_auth;
+
+ if (alg_k & (SSL_kECDHr | SSL_kECDHe)) {
+ /*
+ * we don't need to look at SSL_kEECDH since no certificate is needed
+ * for anon ECDH and for authenticated EECDH, the check for the auth
+ * algorithm will set i correctly NOTE: For ECDH-RSA, we need an ECC
+ * not an RSA cert but for EECDH-RSA we need an RSA cert. Placing the
+ * checks for SSL_kECDH before RSA checks ensures the correct cert is
+ * chosen.
+ */
+ return SSL_PKEY_ECC;
+ } else if (alg_a & SSL_aECDSA)
+ return SSL_PKEY_ECC;
+ else if (alg_k & SSL_kDHr)
+ return SSL_PKEY_DH_RSA;
+ else if (alg_k & SSL_kDHd)
+ return SSL_PKEY_DH_DSA;
+ else if (alg_a & SSL_aDSS)
+ return SSL_PKEY_DSA_SIGN;
+ else if (alg_a & SSL_aRSA)
+ return SSL_PKEY_RSA_ENC;
+ else if (alg_a & SSL_aKRB5)
+ /* VRS something else here? */
+ return -1;
+ else if (alg_a & SSL_aGOST94)
+ return SSL_PKEY_GOST94;
+ else if (alg_a & SSL_aGOST01)
+ return SSL_PKEY_GOST01;
+ return -1;
+}
+
+const SSL_CIPHER *ssl_get_cipher_by_char(SSL *ssl, const unsigned char *ptr)
+{
+ const SSL_CIPHER *c;
+ c = ssl->method->get_cipher_by_char(ptr);
+ if (c == NULL || c->valid == 0)
+ return NULL;
+ return c;
+}
+
+const SSL_CIPHER *SSL_CIPHER_find(SSL *ssl, const unsigned char *ptr)
+{
+ return ssl->method->get_cipher_by_char(ptr);
+}
diff --git a/crypto/openssl/ssl/ssl_conf.c b/crypto/openssl/ssl/ssl_conf.c
new file mode 100644
index 0000000..5478840
--- /dev/null
+++ b/crypto/openssl/ssl/ssl_conf.c
@@ -0,0 +1,683 @@
+/*
+ * ! \file ssl/ssl_conf.c \brief SSL configuration functions
+ */
+/* ====================================================================
+ * Copyright (c) 2012 The OpenSSL Project. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * 3. All advertising materials mentioning features or use of this
+ * software must display the following acknowledgment:
+ * "This product includes software developed by the OpenSSL Project
+ * for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
+ *
+ * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
+ * endorse or promote products derived from this software without
+ * prior written permission. For written permission, please contact
+ * openssl-core@openssl.org.
+ *
+ * 5. Products derived from this software may not be called "OpenSSL"
+ * nor may "OpenSSL" appear in their names without prior written
+ * permission of the OpenSSL Project.
+ *
+ * 6. Redistributions of any form whatsoever must retain the following
+ * acknowledgment:
+ * "This product includes software developed by the OpenSSL Project
+ * for use in the OpenSSL Toolkit (http://www.openssl.org/)"
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
+ * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
+ * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+ * OF THE POSSIBILITY OF SUCH DAMAGE.
+ * ====================================================================
+ *
+ * This product includes cryptographic software written by Eric Young
+ * (eay@cryptsoft.com). This product includes software written by Tim
+ * Hudson (tjh@cryptsoft.com).
+ *
+ */
+
+#ifdef REF_CHECK
+# include <assert.h>
+#endif
+#include <stdio.h>
+#include "ssl_locl.h"
+#include <openssl/conf.h>
+#include <openssl/objects.h>
+#ifndef OPENSSL_NO_DH
+# include <openssl/dh.h>
+#endif
+
+/*
+ * structure holding name tables. This is used for pemitted elements in lists
+ * such as TLSv1 and single command line switches such as no_tls1
+ */
+
+typedef struct {
+ const char *name;
+ int namelen;
+ unsigned int name_flags;
+ unsigned long option_value;
+} ssl_flag_tbl;
+
+/* Sense of name is inverted e.g. "TLSv1" will clear SSL_OP_NO_TLSv1 */
+#define SSL_TFLAG_INV 0x1
+/* Flags refers to cert_flags not options */
+#define SSL_TFLAG_CERT 0x2
+/* Option can only be used for clients */
+#define SSL_TFLAG_CLIENT SSL_CONF_FLAG_CLIENT
+/* Option can only be used for servers */
+#define SSL_TFLAG_SERVER SSL_CONF_FLAG_SERVER
+#define SSL_TFLAG_BOTH (SSL_TFLAG_CLIENT|SSL_TFLAG_SERVER)
+
+#define SSL_FLAG_TBL(str, flag) \
+ {str, (int)(sizeof(str) - 1), SSL_TFLAG_BOTH, flag}
+#define SSL_FLAG_TBL_SRV(str, flag) \
+ {str, (int)(sizeof(str) - 1), SSL_TFLAG_SERVER, flag}
+#define SSL_FLAG_TBL_CLI(str, flag) \
+ {str, (int)(sizeof(str) - 1), SSL_TFLAG_CLIENT, flag}
+#define SSL_FLAG_TBL_INV(str, flag) \
+ {str, (int)(sizeof(str) - 1), SSL_TFLAG_INV|SSL_TFLAG_BOTH, flag}
+#define SSL_FLAG_TBL_SRV_INV(str, flag) \
+ {str, (int)(sizeof(str) - 1), SSL_TFLAG_INV|SSL_TFLAG_SERVER, flag}
+#define SSL_FLAG_TBL_CERT(str, flag) \
+ {str, (int)(sizeof(str) - 1), SSL_TFLAG_CERT|SSL_TFLAG_BOTH, flag}
+
+/*
+ * Opaque structure containing SSL configuration context.
+ */
+
+struct ssl_conf_ctx_st {
+ /*
+ * Various flags indicating (among other things) which options we will
+ * recognise.
+ */
+ unsigned int flags;
+ /* Prefix and length of commands */
+ char *prefix;
+ size_t prefixlen;
+ /* SSL_CTX or SSL structure to perform operations on */
+ SSL_CTX *ctx;
+ SSL *ssl;
+ /* Pointer to SSL or SSL_CTX options field or NULL if none */
+ unsigned long *poptions;
+ /* Pointer to SSL or SSL_CTX cert_flags or NULL if none */
+ unsigned int *pcert_flags;
+ /* Current flag table being worked on */
+ const ssl_flag_tbl *tbl;
+ /* Size of table */
+ size_t ntbl;
+};
+
+static int ssl_match_option(SSL_CONF_CTX *cctx, const ssl_flag_tbl *tbl,
+ const char *name, int namelen, int onoff)
+{
+ /* If name not relevant for context skip */
+ if (!(cctx->flags & tbl->name_flags & SSL_TFLAG_BOTH))
+ return 0;
+ if (namelen == -1) {
+ if (strcmp(tbl->name, name))
+ return 0;
+ } else if (tbl->namelen != namelen
+ || strncasecmp(tbl->name, name, namelen))
+ return 0;
+ if (cctx->poptions) {
+ if (tbl->name_flags & SSL_TFLAG_INV)
+ onoff ^= 1;
+ if (tbl->name_flags & SSL_TFLAG_CERT) {
+ if (onoff)
+ *cctx->pcert_flags |= tbl->option_value;
+ else
+ *cctx->pcert_flags &= ~tbl->option_value;
+ } else {
+ if (onoff)
+ *cctx->poptions |= tbl->option_value;
+ else
+ *cctx->poptions &= ~tbl->option_value;
+ }
+ }
+ return 1;
+}
+
+static int ssl_set_option_list(const char *elem, int len, void *usr)
+{
+ SSL_CONF_CTX *cctx = usr;
+ size_t i;
+ const ssl_flag_tbl *tbl;
+ int onoff = 1;
+ /*
+ * len == -1 indicates not being called in list context, just for single
+ * command line switches, so don't allow +, -.
+ */
+ if (elem == NULL)
+ return 0;
+ if (len != -1) {
+ if (*elem == '+') {
+ elem++;
+ len--;
+ onoff = 1;
+ } else if (*elem == '-') {
+ elem++;
+ len--;
+ onoff = 0;
+ }
+ }
+ for (i = 0, tbl = cctx->tbl; i < cctx->ntbl; i++, tbl++) {
+ if (ssl_match_option(cctx, tbl, elem, len, onoff))
+ return 1;
+ }
+ return 0;
+}
+
+/* Single command line switches with no argument e.g. -no_ssl3 */
+static int ctrl_str_option(SSL_CONF_CTX *cctx, const char *cmd)
+{
+ static const ssl_flag_tbl ssl_option_single[] = {
+ SSL_FLAG_TBL("no_ssl2", SSL_OP_NO_SSLv2),
+ SSL_FLAG_TBL("no_ssl3", SSL_OP_NO_SSLv3),
+ SSL_FLAG_TBL("no_tls1", SSL_OP_NO_TLSv1),
+ SSL_FLAG_TBL("no_tls1_1", SSL_OP_NO_TLSv1_1),
+ SSL_FLAG_TBL("no_tls1_2", SSL_OP_NO_TLSv1_2),
+ SSL_FLAG_TBL("bugs", SSL_OP_ALL),
+ SSL_FLAG_TBL("no_comp", SSL_OP_NO_COMPRESSION),
+ SSL_FLAG_TBL_SRV("ecdh_single", SSL_OP_SINGLE_ECDH_USE),
+#ifndef OPENSSL_NO_TLSEXT
+ SSL_FLAG_TBL("no_ticket", SSL_OP_NO_TICKET),
+#endif
+ SSL_FLAG_TBL_SRV("serverpref", SSL_OP_CIPHER_SERVER_PREFERENCE),
+ SSL_FLAG_TBL("legacy_renegotiation",
+ SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION),
+ SSL_FLAG_TBL_SRV("legacy_server_connect",
+ SSL_OP_LEGACY_SERVER_CONNECT),
+ SSL_FLAG_TBL_SRV("no_resumption_on_reneg",
+ SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION),
+ SSL_FLAG_TBL_SRV_INV("no_legacy_server_connect",
+ SSL_OP_LEGACY_SERVER_CONNECT),
+ SSL_FLAG_TBL_CERT("strict", SSL_CERT_FLAG_TLS_STRICT),
+#ifdef OPENSSL_SSL_DEBUG_BROKEN_PROTOCOL
+ SSL_FLAG_TBL_CERT("debug_broken_protocol",
+ SSL_CERT_FLAG_BROKEN_PROTOCOL),
+#endif
+ };
+ cctx->tbl = ssl_option_single;
+ cctx->ntbl = sizeof(ssl_option_single) / sizeof(ssl_flag_tbl);
+ return ssl_set_option_list(cmd, -1, cctx);
+}
+
+/* Set supported signature algorithms */
+static int cmd_SignatureAlgorithms(SSL_CONF_CTX *cctx, const char *value)
+{
+ int rv;
+ if (cctx->ssl)
+ rv = SSL_set1_sigalgs_list(cctx->ssl, value);
+ /* NB: ctx == NULL performs syntax checking only */
+ else
+ rv = SSL_CTX_set1_sigalgs_list(cctx->ctx, value);
+ return rv > 0;
+}
+
+/* Set supported client signature algorithms */
+static int cmd_ClientSignatureAlgorithms(SSL_CONF_CTX *cctx,
+ const char *value)
+{
+ int rv;
+ if (cctx->ssl)
+ rv = SSL_set1_client_sigalgs_list(cctx->ssl, value);
+ /* NB: ctx == NULL performs syntax checking only */
+ else
+ rv = SSL_CTX_set1_client_sigalgs_list(cctx->ctx, value);
+ return rv > 0;
+}
+
+static int cmd_Curves(SSL_CONF_CTX *cctx, const char *value)
+{
+ int rv;
+ if (cctx->ssl)
+ rv = SSL_set1_curves_list(cctx->ssl, value);
+ /* NB: ctx == NULL performs syntax checking only */
+ else
+ rv = SSL_CTX_set1_curves_list(cctx->ctx, value);
+ return rv > 0;
+}
+
+#ifndef OPENSSL_NO_ECDH
+/* ECDH temporary parameters */
+static int cmd_ECDHParameters(SSL_CONF_CTX *cctx, const char *value)
+{
+ int onoff = -1, rv = 1;
+ if (!(cctx->flags & SSL_CONF_FLAG_SERVER))
+ return -2;
+ if (cctx->flags & SSL_CONF_FLAG_FILE) {
+ if (*value == '+') {
+ onoff = 1;
+ value++;
+ }
+ if (*value == '-') {
+ onoff = 0;
+ value++;
+ }
+ if (!strcasecmp(value, "automatic")) {
+ if (onoff == -1)
+ onoff = 1;
+ } else if (onoff != -1)
+ return 0;
+ } else if (cctx->flags & SSL_CONF_FLAG_CMDLINE) {
+ if (!strcmp(value, "auto"))
+ onoff = 1;
+ }
+
+ if (onoff != -1) {
+ if (cctx->ctx)
+ rv = SSL_CTX_set_ecdh_auto(cctx->ctx, onoff);
+ else if (cctx->ssl)
+ rv = SSL_set_ecdh_auto(cctx->ssl, onoff);
+ } else {
+ EC_KEY *ecdh;
+ int nid;
+ nid = EC_curve_nist2nid(value);
+ if (nid == NID_undef)
+ nid = OBJ_sn2nid(value);
+ if (nid == 0)
+ return 0;
+ ecdh = EC_KEY_new_by_curve_name(nid);
+ if (!ecdh)
+ return 0;
+ if (cctx->ctx)
+ rv = SSL_CTX_set_tmp_ecdh(cctx->ctx, ecdh);
+ else if (cctx->ssl)
+ rv = SSL_set_tmp_ecdh(cctx->ssl, ecdh);
+ EC_KEY_free(ecdh);
+ }
+
+ return rv > 0;
+}
+#endif
+static int cmd_CipherString(SSL_CONF_CTX *cctx, const char *value)
+{
+ int rv = 1;
+ if (cctx->ctx)
+ rv = SSL_CTX_set_cipher_list(cctx->ctx, value);
+ if (cctx->ssl)
+ rv = SSL_set_cipher_list(cctx->ssl, value);
+ return rv > 0;
+}
+
+static int cmd_Protocol(SSL_CONF_CTX *cctx, const char *value)
+{
+ static const ssl_flag_tbl ssl_protocol_list[] = {
+ SSL_FLAG_TBL_INV("ALL", SSL_OP_NO_SSL_MASK),
+ SSL_FLAG_TBL_INV("SSLv2", SSL_OP_NO_SSLv2),
+ SSL_FLAG_TBL_INV("SSLv3", SSL_OP_NO_SSLv3),
+ SSL_FLAG_TBL_INV("TLSv1", SSL_OP_NO_TLSv1),
+ SSL_FLAG_TBL_INV("TLSv1.1", SSL_OP_NO_TLSv1_1),
+ SSL_FLAG_TBL_INV("TLSv1.2", SSL_OP_NO_TLSv1_2)
+ };
+ if (!(cctx->flags & SSL_CONF_FLAG_FILE))
+ return -2;
+ cctx->tbl = ssl_protocol_list;
+ cctx->ntbl = sizeof(ssl_protocol_list) / sizeof(ssl_flag_tbl);
+ return CONF_parse_list(value, ',', 1, ssl_set_option_list, cctx);
+}
+
+static int cmd_Options(SSL_CONF_CTX *cctx, const char *value)
+{
+ static const ssl_flag_tbl ssl_option_list[] = {
+ SSL_FLAG_TBL_INV("SessionTicket", SSL_OP_NO_TICKET),
+ SSL_FLAG_TBL_INV("EmptyFragments",
+ SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS),
+ SSL_FLAG_TBL("Bugs", SSL_OP_ALL),
+ SSL_FLAG_TBL_INV("Compression", SSL_OP_NO_COMPRESSION),
+ SSL_FLAG_TBL_SRV("ServerPreference", SSL_OP_CIPHER_SERVER_PREFERENCE),
+ SSL_FLAG_TBL_SRV("NoResumptionOnRenegotiation",
+ SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION),
+ SSL_FLAG_TBL_SRV("DHSingle", SSL_OP_SINGLE_DH_USE),
+ SSL_FLAG_TBL_SRV("ECDHSingle", SSL_OP_SINGLE_ECDH_USE),
+ SSL_FLAG_TBL("UnsafeLegacyRenegotiation",
+ SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION),
+ };
+ if (!(cctx->flags & SSL_CONF_FLAG_FILE))
+ return -2;
+ if (value == NULL)
+ return -3;
+ cctx->tbl = ssl_option_list;
+ cctx->ntbl = sizeof(ssl_option_list) / sizeof(ssl_flag_tbl);
+ return CONF_parse_list(value, ',', 1, ssl_set_option_list, cctx);
+}
+
+static int cmd_Certificate(SSL_CONF_CTX *cctx, const char *value)
+{
+ int rv = 1;
+ if (!(cctx->flags & SSL_CONF_FLAG_CERTIFICATE))
+ return -2;
+ if (cctx->ctx)
+ rv = SSL_CTX_use_certificate_chain_file(cctx->ctx, value);
+ if (cctx->ssl)
+ rv = SSL_use_certificate_file(cctx->ssl, value, SSL_FILETYPE_PEM);
+ return rv > 0;
+}
+
+static int cmd_PrivateKey(SSL_CONF_CTX *cctx, const char *value)
+{
+ int rv = 1;
+ if (!(cctx->flags & SSL_CONF_FLAG_CERTIFICATE))
+ return -2;
+ if (cctx->ctx)
+ rv = SSL_CTX_use_PrivateKey_file(cctx->ctx, value, SSL_FILETYPE_PEM);
+ if (cctx->ssl)
+ rv = SSL_use_PrivateKey_file(cctx->ssl, value, SSL_FILETYPE_PEM);
+ return rv > 0;
+}
+
+static int cmd_ServerInfoFile(SSL_CONF_CTX *cctx, const char *value)
+{
+ int rv = 1;
+ if (!(cctx->flags & SSL_CONF_FLAG_CERTIFICATE))
+ return -2;
+ if (!(cctx->flags & SSL_CONF_FLAG_SERVER))
+ return -2;
+ if (cctx->ctx)
+ rv = SSL_CTX_use_serverinfo_file(cctx->ctx, value);
+ return rv > 0;
+}
+
+#ifndef OPENSSL_NO_DH
+static int cmd_DHParameters(SSL_CONF_CTX *cctx, const char *value)
+{
+ int rv = 0;
+ DH *dh = NULL;
+ BIO *in = NULL;
+ if (!(cctx->flags & SSL_CONF_FLAG_CERTIFICATE))
+ return -2;
+ if (cctx->ctx || cctx->ssl) {
+ in = BIO_new(BIO_s_file_internal());
+ if (!in)
+ goto end;
+ if (BIO_read_filename(in, value) <= 0)
+ goto end;
+ dh = PEM_read_bio_DHparams(in, NULL, NULL, NULL);
+ if (!dh)
+ goto end;
+ } else
+ return 1;
+ if (cctx->ctx)
+ rv = SSL_CTX_set_tmp_dh(cctx->ctx, dh);
+ if (cctx->ssl)
+ rv = SSL_set_tmp_dh(cctx->ssl, dh);
+ end:
+ if (dh)
+ DH_free(dh);
+ if (in)
+ BIO_free(in);
+ return rv > 0;
+}
+#endif
+typedef struct {
+ int (*cmd) (SSL_CONF_CTX *cctx, const char *value);
+ const char *str_file;
+ const char *str_cmdline;
+ unsigned int value_type;
+} ssl_conf_cmd_tbl;
+
+/* Table of supported parameters */
+
+#define SSL_CONF_CMD(name, cmdopt, type) \
+ {cmd_##name, #name, cmdopt, type}
+
+#define SSL_CONF_CMD_STRING(name, cmdopt) \
+ SSL_CONF_CMD(name, cmdopt, SSL_CONF_TYPE_STRING)
+
+static const ssl_conf_cmd_tbl ssl_conf_cmds[] = {
+ SSL_CONF_CMD_STRING(SignatureAlgorithms, "sigalgs"),
+ SSL_CONF_CMD_STRING(ClientSignatureAlgorithms, "client_sigalgs"),
+ SSL_CONF_CMD_STRING(Curves, "curves"),
+#ifndef OPENSSL_NO_ECDH
+ SSL_CONF_CMD_STRING(ECDHParameters, "named_curve"),
+#endif
+ SSL_CONF_CMD_STRING(CipherString, "cipher"),
+ SSL_CONF_CMD_STRING(Protocol, NULL),
+ SSL_CONF_CMD_STRING(Options, NULL),
+ SSL_CONF_CMD(Certificate, "cert", SSL_CONF_TYPE_FILE),
+ SSL_CONF_CMD(PrivateKey, "key", SSL_CONF_TYPE_FILE),
+ SSL_CONF_CMD(ServerInfoFile, NULL, SSL_CONF_TYPE_FILE),
+#ifndef OPENSSL_NO_DH
+ SSL_CONF_CMD(DHParameters, "dhparam", SSL_CONF_TYPE_FILE)
+#endif
+};
+
+static int ssl_conf_cmd_skip_prefix(SSL_CONF_CTX *cctx, const char **pcmd)
+{
+ if (!pcmd || !*pcmd)
+ return 0;
+ /* If a prefix is set, check and skip */
+ if (cctx->prefix) {
+ if (strlen(*pcmd) <= cctx->prefixlen)
+ return 0;
+ if (cctx->flags & SSL_CONF_FLAG_CMDLINE &&
+ strncmp(*pcmd, cctx->prefix, cctx->prefixlen))
+ return 0;
+ if (cctx->flags & SSL_CONF_FLAG_FILE &&
+ strncasecmp(*pcmd, cctx->prefix, cctx->prefixlen))
+ return 0;
+ *pcmd += cctx->prefixlen;
+ } else if (cctx->flags & SSL_CONF_FLAG_CMDLINE) {
+ if (**pcmd != '-' || !(*pcmd)[1])
+ return 0;
+ *pcmd += 1;
+ }
+ return 1;
+}
+
+static const ssl_conf_cmd_tbl *ssl_conf_cmd_lookup(SSL_CONF_CTX *cctx,
+ const char *cmd)
+{
+ const ssl_conf_cmd_tbl *t;
+ size_t i;
+ if (cmd == NULL)
+ return NULL;
+
+ /* Look for matching parameter name in table */
+ for (i = 0, t = ssl_conf_cmds;
+ i < sizeof(ssl_conf_cmds) / sizeof(ssl_conf_cmd_tbl); i++, t++) {
+ if (cctx->flags & SSL_CONF_FLAG_CMDLINE) {
+ if (t->str_cmdline && !strcmp(t->str_cmdline, cmd))
+ return t;
+ }
+ if (cctx->flags & SSL_CONF_FLAG_FILE) {
+ if (t->str_file && !strcasecmp(t->str_file, cmd))
+ return t;
+ }
+ }
+ return NULL;
+}
+
+int SSL_CONF_cmd(SSL_CONF_CTX *cctx, const char *cmd, const char *value)
+{
+ const ssl_conf_cmd_tbl *runcmd;
+ if (cmd == NULL) {
+ SSLerr(SSL_F_SSL_CONF_CMD, SSL_R_INVALID_NULL_CMD_NAME);
+ return 0;
+ }
+
+ if (!ssl_conf_cmd_skip_prefix(cctx, &cmd))
+ return -2;
+
+ runcmd = ssl_conf_cmd_lookup(cctx, cmd);
+
+ if (runcmd) {
+ int rv;
+ if (value == NULL)
+ return -3;
+ rv = runcmd->cmd(cctx, value);
+ if (rv > 0)
+ return 2;
+ if (rv == -2)
+ return -2;
+ if (cctx->flags & SSL_CONF_FLAG_SHOW_ERRORS) {
+ SSLerr(SSL_F_SSL_CONF_CMD, SSL_R_BAD_VALUE);
+ ERR_add_error_data(4, "cmd=", cmd, ", value=", value);
+ }
+ return 0;
+ }
+
+ if (cctx->flags & SSL_CONF_FLAG_CMDLINE) {
+ if (ctrl_str_option(cctx, cmd))
+ return 1;
+ }
+
+ if (cctx->flags & SSL_CONF_FLAG_SHOW_ERRORS) {
+ SSLerr(SSL_F_SSL_CONF_CMD, SSL_R_UNKNOWN_CMD_NAME);
+ ERR_add_error_data(2, "cmd=", cmd);
+ }
+
+ return -2;
+}
+
+int SSL_CONF_cmd_argv(SSL_CONF_CTX *cctx, int *pargc, char ***pargv)
+{
+ int rv;
+ const char *arg = NULL, *argn;
+ if (pargc && *pargc == 0)
+ return 0;
+ if (!pargc || *pargc > 0)
+ arg = **pargv;
+ if (arg == NULL)
+ return 0;
+ if (!pargc || *pargc > 1)
+ argn = (*pargv)[1];
+ else
+ argn = NULL;
+ cctx->flags &= ~SSL_CONF_FLAG_FILE;
+ cctx->flags |= SSL_CONF_FLAG_CMDLINE;
+ rv = SSL_CONF_cmd(cctx, arg, argn);
+ if (rv > 0) {
+ /* Success: update pargc, pargv */
+ (*pargv) += rv;
+ if (pargc)
+ (*pargc) -= rv;
+ return rv;
+ }
+ /* Unknown switch: indicate no arguments processed */
+ if (rv == -2)
+ return 0;
+ /* Some error occurred processing command, return fatal error */
+ if (rv == 0)
+ return -1;
+ return rv;
+}
+
+int SSL_CONF_cmd_value_type(SSL_CONF_CTX *cctx, const char *cmd)
+{
+ if (ssl_conf_cmd_skip_prefix(cctx, &cmd)) {
+ const ssl_conf_cmd_tbl *runcmd;
+ runcmd = ssl_conf_cmd_lookup(cctx, cmd);
+ if (runcmd)
+ return runcmd->value_type;
+ }
+ return SSL_CONF_TYPE_UNKNOWN;
+}
+
+SSL_CONF_CTX *SSL_CONF_CTX_new(void)
+{
+ SSL_CONF_CTX *ret;
+ ret = OPENSSL_malloc(sizeof(SSL_CONF_CTX));
+ if (ret) {
+ ret->flags = 0;
+ ret->prefix = NULL;
+ ret->prefixlen = 0;
+ ret->ssl = NULL;
+ ret->ctx = NULL;
+ ret->poptions = NULL;
+ ret->pcert_flags = NULL;
+ ret->tbl = NULL;
+ ret->ntbl = 0;
+ }
+ return ret;
+}
+
+int SSL_CONF_CTX_finish(SSL_CONF_CTX *cctx)
+{
+ return 1;
+}
+
+void SSL_CONF_CTX_free(SSL_CONF_CTX *cctx)
+{
+ if (cctx) {
+ if (cctx->prefix)
+ OPENSSL_free(cctx->prefix);
+ OPENSSL_free(cctx);
+ }
+}
+
+unsigned int SSL_CONF_CTX_set_flags(SSL_CONF_CTX *cctx, unsigned int flags)
+{
+ cctx->flags |= flags;
+ return cctx->flags;
+}
+
+unsigned int SSL_CONF_CTX_clear_flags(SSL_CONF_CTX *cctx, unsigned int flags)
+{
+ cctx->flags &= ~flags;
+ return cctx->flags;
+}
+
+int SSL_CONF_CTX_set1_prefix(SSL_CONF_CTX *cctx, const char *pre)
+{
+ char *tmp = NULL;
+ if (pre) {
+ tmp = BUF_strdup(pre);
+ if (tmp == NULL)
+ return 0;
+ }
+ if (cctx->prefix)
+ OPENSSL_free(cctx->prefix);
+ cctx->prefix = tmp;
+ if (tmp)
+ cctx->prefixlen = strlen(tmp);
+ else
+ cctx->prefixlen = 0;
+ return 1;
+}
+
+void SSL_CONF_CTX_set_ssl(SSL_CONF_CTX *cctx, SSL *ssl)
+{
+ cctx->ssl = ssl;
+ cctx->ctx = NULL;
+ if (ssl) {
+ cctx->poptions = &ssl->options;
+ cctx->pcert_flags = &ssl->cert->cert_flags;
+ } else {
+ cctx->poptions = NULL;
+ cctx->pcert_flags = NULL;
+ }
+}
+
+void SSL_CONF_CTX_set_ssl_ctx(SSL_CONF_CTX *cctx, SSL_CTX *ctx)
+{
+ cctx->ctx = ctx;
+ cctx->ssl = NULL;
+ if (ctx) {
+ cctx->poptions = &ctx->options;
+ cctx->pcert_flags = &ctx->cert->cert_flags;
+ } else {
+ cctx->poptions = NULL;
+ cctx->pcert_flags = NULL;
+ }
+}
diff --git a/crypto/openssl/ssl/ssl_err.c b/crypto/openssl/ssl/ssl_err.c
index 88621b7..1a6030e 100644
--- a/crypto/openssl/ssl/ssl_err.c
+++ b/crypto/openssl/ssl/ssl_err.c
@@ -1,6 +1,6 @@
/* ssl/ssl_err.c */
/* ====================================================================
- * Copyright (c) 1999-2011 The OpenSSL Project. All rights reserved.
+ * Copyright (c) 1999-2015 The OpenSSL Project. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -70,55 +70,56 @@
# define ERR_REASON(reason) ERR_PACK(ERR_LIB_SSL,0,reason)
static ERR_STRING_DATA SSL_str_functs[] = {
+ {ERR_FUNC(SSL_F_CHECK_SUITEB_CIPHER_LIST), "CHECK_SUITEB_CIPHER_LIST"},
{ERR_FUNC(SSL_F_CLIENT_CERTIFICATE), "CLIENT_CERTIFICATE"},
{ERR_FUNC(SSL_F_CLIENT_FINISHED), "CLIENT_FINISHED"},
{ERR_FUNC(SSL_F_CLIENT_HELLO), "CLIENT_HELLO"},
{ERR_FUNC(SSL_F_CLIENT_MASTER_KEY), "CLIENT_MASTER_KEY"},
{ERR_FUNC(SSL_F_D2I_SSL_SESSION), "d2i_SSL_SESSION"},
- {ERR_FUNC(SSL_F_DO_DTLS1_WRITE), "DO_DTLS1_WRITE"},
+ {ERR_FUNC(SSL_F_DO_DTLS1_WRITE), "do_dtls1_write"},
{ERR_FUNC(SSL_F_DO_SSL3_WRITE), "DO_SSL3_WRITE"},
- {ERR_FUNC(SSL_F_DTLS1_ACCEPT), "DTLS1_ACCEPT"},
+ {ERR_FUNC(SSL_F_DTLS1_ACCEPT), "dtls1_accept"},
{ERR_FUNC(SSL_F_DTLS1_ADD_CERT_TO_BUF), "DTLS1_ADD_CERT_TO_BUF"},
{ERR_FUNC(SSL_F_DTLS1_BUFFER_RECORD), "DTLS1_BUFFER_RECORD"},
- {ERR_FUNC(SSL_F_DTLS1_CHECK_TIMEOUT_NUM), "DTLS1_CHECK_TIMEOUT_NUM"},
- {ERR_FUNC(SSL_F_DTLS1_CLIENT_HELLO), "DTLS1_CLIENT_HELLO"},
- {ERR_FUNC(SSL_F_DTLS1_CONNECT), "DTLS1_CONNECT"},
- {ERR_FUNC(SSL_F_DTLS1_ENC), "DTLS1_ENC"},
+ {ERR_FUNC(SSL_F_DTLS1_CHECK_TIMEOUT_NUM), "dtls1_check_timeout_num"},
+ {ERR_FUNC(SSL_F_DTLS1_CLIENT_HELLO), "dtls1_client_hello"},
+ {ERR_FUNC(SSL_F_DTLS1_CONNECT), "dtls1_connect"},
{ERR_FUNC(SSL_F_DTLS1_GET_HELLO_VERIFY), "DTLS1_GET_HELLO_VERIFY"},
- {ERR_FUNC(SSL_F_DTLS1_GET_MESSAGE), "DTLS1_GET_MESSAGE"},
+ {ERR_FUNC(SSL_F_DTLS1_GET_MESSAGE), "dtls1_get_message"},
{ERR_FUNC(SSL_F_DTLS1_GET_MESSAGE_FRAGMENT),
"DTLS1_GET_MESSAGE_FRAGMENT"},
- {ERR_FUNC(SSL_F_DTLS1_GET_RECORD), "DTLS1_GET_RECORD"},
- {ERR_FUNC(SSL_F_DTLS1_HANDLE_TIMEOUT), "DTLS1_HANDLE_TIMEOUT"},
- {ERR_FUNC(SSL_F_DTLS1_HEARTBEAT), "DTLS1_HEARTBEAT"},
- {ERR_FUNC(SSL_F_DTLS1_OUTPUT_CERT_CHAIN), "DTLS1_OUTPUT_CERT_CHAIN"},
+ {ERR_FUNC(SSL_F_DTLS1_GET_RECORD), "dtls1_get_record"},
+ {ERR_FUNC(SSL_F_DTLS1_HANDLE_TIMEOUT), "dtls1_handle_timeout"},
+ {ERR_FUNC(SSL_F_DTLS1_HEARTBEAT), "dtls1_heartbeat"},
+ {ERR_FUNC(SSL_F_DTLS1_OUTPUT_CERT_CHAIN), "dtls1_output_cert_chain"},
{ERR_FUNC(SSL_F_DTLS1_PREPROCESS_FRAGMENT), "DTLS1_PREPROCESS_FRAGMENT"},
{ERR_FUNC(SSL_F_DTLS1_PROCESS_OUT_OF_SEQ_MESSAGE),
"DTLS1_PROCESS_OUT_OF_SEQ_MESSAGE"},
{ERR_FUNC(SSL_F_DTLS1_PROCESS_RECORD), "DTLS1_PROCESS_RECORD"},
- {ERR_FUNC(SSL_F_DTLS1_READ_BYTES), "DTLS1_READ_BYTES"},
- {ERR_FUNC(SSL_F_DTLS1_READ_FAILED), "DTLS1_READ_FAILED"},
+ {ERR_FUNC(SSL_F_DTLS1_READ_BYTES), "dtls1_read_bytes"},
+ {ERR_FUNC(SSL_F_DTLS1_READ_FAILED), "dtls1_read_failed"},
{ERR_FUNC(SSL_F_DTLS1_SEND_CERTIFICATE_REQUEST),
- "DTLS1_SEND_CERTIFICATE_REQUEST"},
+ "dtls1_send_certificate_request"},
{ERR_FUNC(SSL_F_DTLS1_SEND_CLIENT_CERTIFICATE),
- "DTLS1_SEND_CLIENT_CERTIFICATE"},
+ "dtls1_send_client_certificate"},
{ERR_FUNC(SSL_F_DTLS1_SEND_CLIENT_KEY_EXCHANGE),
- "DTLS1_SEND_CLIENT_KEY_EXCHANGE"},
- {ERR_FUNC(SSL_F_DTLS1_SEND_CLIENT_VERIFY), "DTLS1_SEND_CLIENT_VERIFY"},
+ "dtls1_send_client_key_exchange"},
+ {ERR_FUNC(SSL_F_DTLS1_SEND_CLIENT_VERIFY), "dtls1_send_client_verify"},
{ERR_FUNC(SSL_F_DTLS1_SEND_HELLO_VERIFY_REQUEST),
"DTLS1_SEND_HELLO_VERIFY_REQUEST"},
{ERR_FUNC(SSL_F_DTLS1_SEND_SERVER_CERTIFICATE),
- "DTLS1_SEND_SERVER_CERTIFICATE"},
- {ERR_FUNC(SSL_F_DTLS1_SEND_SERVER_HELLO), "DTLS1_SEND_SERVER_HELLO"},
+ "dtls1_send_server_certificate"},
+ {ERR_FUNC(SSL_F_DTLS1_SEND_SERVER_HELLO), "dtls1_send_server_hello"},
{ERR_FUNC(SSL_F_DTLS1_SEND_SERVER_KEY_EXCHANGE),
- "DTLS1_SEND_SERVER_KEY_EXCHANGE"},
+ "dtls1_send_server_key_exchange"},
{ERR_FUNC(SSL_F_DTLS1_WRITE_APP_DATA_BYTES),
- "DTLS1_WRITE_APP_DATA_BYTES"},
+ "dtls1_write_app_data_bytes"},
{ERR_FUNC(SSL_F_GET_CLIENT_FINISHED), "GET_CLIENT_FINISHED"},
{ERR_FUNC(SSL_F_GET_CLIENT_HELLO), "GET_CLIENT_HELLO"},
{ERR_FUNC(SSL_F_GET_CLIENT_MASTER_KEY), "GET_CLIENT_MASTER_KEY"},
{ERR_FUNC(SSL_F_GET_SERVER_FINISHED), "GET_SERVER_FINISHED"},
{ERR_FUNC(SSL_F_GET_SERVER_HELLO), "GET_SERVER_HELLO"},
+ {ERR_FUNC(SSL_F_GET_SERVER_STATIC_DH_KEY), "GET_SERVER_STATIC_DH_KEY"},
{ERR_FUNC(SSL_F_GET_SERVER_VERIFY), "GET_SERVER_VERIFY"},
{ERR_FUNC(SSL_F_I2D_SSL_SESSION), "i2d_SSL_SESSION"},
{ERR_FUNC(SSL_F_READ_N), "READ_N"},
@@ -126,119 +127,123 @@ static ERR_STRING_DATA SSL_str_functs[] = {
{ERR_FUNC(SSL_F_SERVER_FINISH), "SERVER_FINISH"},
{ERR_FUNC(SSL_F_SERVER_HELLO), "SERVER_HELLO"},
{ERR_FUNC(SSL_F_SERVER_VERIFY), "SERVER_VERIFY"},
- {ERR_FUNC(SSL_F_SSL23_ACCEPT), "SSL23_ACCEPT"},
+ {ERR_FUNC(SSL_F_SSL23_ACCEPT), "ssl23_accept"},
{ERR_FUNC(SSL_F_SSL23_CLIENT_HELLO), "SSL23_CLIENT_HELLO"},
- {ERR_FUNC(SSL_F_SSL23_CONNECT), "SSL23_CONNECT"},
+ {ERR_FUNC(SSL_F_SSL23_CONNECT), "ssl23_connect"},
{ERR_FUNC(SSL_F_SSL23_GET_CLIENT_HELLO), "SSL23_GET_CLIENT_HELLO"},
{ERR_FUNC(SSL_F_SSL23_GET_SERVER_HELLO), "SSL23_GET_SERVER_HELLO"},
- {ERR_FUNC(SSL_F_SSL23_PEEK), "SSL23_PEEK"},
- {ERR_FUNC(SSL_F_SSL23_READ), "SSL23_READ"},
- {ERR_FUNC(SSL_F_SSL23_WRITE), "SSL23_WRITE"},
- {ERR_FUNC(SSL_F_SSL2_ACCEPT), "SSL2_ACCEPT"},
- {ERR_FUNC(SSL_F_SSL2_CONNECT), "SSL2_CONNECT"},
- {ERR_FUNC(SSL_F_SSL2_ENC_INIT), "SSL2_ENC_INIT"},
+ {ERR_FUNC(SSL_F_SSL23_PEEK), "ssl23_peek"},
+ {ERR_FUNC(SSL_F_SSL23_READ), "ssl23_read"},
+ {ERR_FUNC(SSL_F_SSL23_WRITE), "ssl23_write"},
+ {ERR_FUNC(SSL_F_SSL2_ACCEPT), "ssl2_accept"},
+ {ERR_FUNC(SSL_F_SSL2_CONNECT), "ssl2_connect"},
+ {ERR_FUNC(SSL_F_SSL2_ENC_INIT), "ssl2_enc_init"},
{ERR_FUNC(SSL_F_SSL2_GENERATE_KEY_MATERIAL),
- "SSL2_GENERATE_KEY_MATERIAL"},
- {ERR_FUNC(SSL_F_SSL2_PEEK), "SSL2_PEEK"},
- {ERR_FUNC(SSL_F_SSL2_READ), "SSL2_READ"},
+ "ssl2_generate_key_material"},
+ {ERR_FUNC(SSL_F_SSL2_PEEK), "ssl2_peek"},
+ {ERR_FUNC(SSL_F_SSL2_READ), "ssl2_read"},
{ERR_FUNC(SSL_F_SSL2_READ_INTERNAL), "SSL2_READ_INTERNAL"},
- {ERR_FUNC(SSL_F_SSL2_SET_CERTIFICATE), "SSL2_SET_CERTIFICATE"},
- {ERR_FUNC(SSL_F_SSL2_WRITE), "SSL2_WRITE"},
- {ERR_FUNC(SSL_F_SSL3_ACCEPT), "SSL3_ACCEPT"},
+ {ERR_FUNC(SSL_F_SSL2_SET_CERTIFICATE), "ssl2_set_certificate"},
+ {ERR_FUNC(SSL_F_SSL2_WRITE), "ssl2_write"},
+ {ERR_FUNC(SSL_F_SSL3_ACCEPT), "ssl3_accept"},
{ERR_FUNC(SSL_F_SSL3_ADD_CERT_TO_BUF), "SSL3_ADD_CERT_TO_BUF"},
- {ERR_FUNC(SSL_F_SSL3_CALLBACK_CTRL), "SSL3_CALLBACK_CTRL"},
- {ERR_FUNC(SSL_F_SSL3_CHANGE_CIPHER_STATE), "SSL3_CHANGE_CIPHER_STATE"},
+ {ERR_FUNC(SSL_F_SSL3_CALLBACK_CTRL), "ssl3_callback_ctrl"},
+ {ERR_FUNC(SSL_F_SSL3_CHANGE_CIPHER_STATE), "ssl3_change_cipher_state"},
{ERR_FUNC(SSL_F_SSL3_CHECK_CERT_AND_ALGORITHM),
- "SSL3_CHECK_CERT_AND_ALGORITHM"},
- {ERR_FUNC(SSL_F_SSL3_CHECK_CLIENT_HELLO), "SSL3_CHECK_CLIENT_HELLO"},
- {ERR_FUNC(SSL_F_SSL3_CLIENT_HELLO), "SSL3_CLIENT_HELLO"},
- {ERR_FUNC(SSL_F_SSL3_CONNECT), "SSL3_CONNECT"},
- {ERR_FUNC(SSL_F_SSL3_CTRL), "SSL3_CTRL"},
- {ERR_FUNC(SSL_F_SSL3_CTX_CTRL), "SSL3_CTX_CTRL"},
+ "ssl3_check_cert_and_algorithm"},
+ {ERR_FUNC(SSL_F_SSL3_CHECK_CLIENT_HELLO), "ssl3_check_client_hello"},
+ {ERR_FUNC(SSL_F_SSL3_CHECK_FINISHED), "SSL3_CHECK_FINISHED"},
+ {ERR_FUNC(SSL_F_SSL3_CLIENT_HELLO), "ssl3_client_hello"},
+ {ERR_FUNC(SSL_F_SSL3_CONNECT), "ssl3_connect"},
+ {ERR_FUNC(SSL_F_SSL3_CTRL), "ssl3_ctrl"},
+ {ERR_FUNC(SSL_F_SSL3_CTX_CTRL), "ssl3_ctx_ctrl"},
{ERR_FUNC(SSL_F_SSL3_DIGEST_CACHED_RECORDS),
- "SSL3_DIGEST_CACHED_RECORDS"},
+ "ssl3_digest_cached_records"},
{ERR_FUNC(SSL_F_SSL3_DO_CHANGE_CIPHER_SPEC),
- "SSL3_DO_CHANGE_CIPHER_SPEC"},
- {ERR_FUNC(SSL_F_SSL3_ENC), "SSL3_ENC"},
- {ERR_FUNC(SSL_F_SSL3_CHECK_FINISHED), "SSL3_CHECK_FINISHED"},
+ "ssl3_do_change_cipher_spec"},
+ {ERR_FUNC(SSL_F_SSL3_ENC), "ssl3_enc"},
{ERR_FUNC(SSL_F_SSL3_GENERATE_KEY_BLOCK), "SSL3_GENERATE_KEY_BLOCK"},
{ERR_FUNC(SSL_F_SSL3_GET_CERTIFICATE_REQUEST),
- "SSL3_GET_CERTIFICATE_REQUEST"},
- {ERR_FUNC(SSL_F_SSL3_GET_CERT_STATUS), "SSL3_GET_CERT_STATUS"},
- {ERR_FUNC(SSL_F_SSL3_GET_CERT_VERIFY), "SSL3_GET_CERT_VERIFY"},
+ "ssl3_get_certificate_request"},
+ {ERR_FUNC(SSL_F_SSL3_GET_CERT_STATUS), "ssl3_get_cert_status"},
+ {ERR_FUNC(SSL_F_SSL3_GET_CERT_VERIFY), "ssl3_get_cert_verify"},
{ERR_FUNC(SSL_F_SSL3_GET_CLIENT_CERTIFICATE),
- "SSL3_GET_CLIENT_CERTIFICATE"},
- {ERR_FUNC(SSL_F_SSL3_GET_CLIENT_HELLO), "SSL3_GET_CLIENT_HELLO"},
+ "ssl3_get_client_certificate"},
+ {ERR_FUNC(SSL_F_SSL3_GET_CLIENT_HELLO), "ssl3_get_client_hello"},
{ERR_FUNC(SSL_F_SSL3_GET_CLIENT_KEY_EXCHANGE),
- "SSL3_GET_CLIENT_KEY_EXCHANGE"},
- {ERR_FUNC(SSL_F_SSL3_GET_FINISHED), "SSL3_GET_FINISHED"},
- {ERR_FUNC(SSL_F_SSL3_GET_KEY_EXCHANGE), "SSL3_GET_KEY_EXCHANGE"},
- {ERR_FUNC(SSL_F_SSL3_GET_MESSAGE), "SSL3_GET_MESSAGE"},
+ "ssl3_get_client_key_exchange"},
+ {ERR_FUNC(SSL_F_SSL3_GET_FINISHED), "ssl3_get_finished"},
+ {ERR_FUNC(SSL_F_SSL3_GET_KEY_EXCHANGE), "ssl3_get_key_exchange"},
+ {ERR_FUNC(SSL_F_SSL3_GET_MESSAGE), "ssl3_get_message"},
{ERR_FUNC(SSL_F_SSL3_GET_NEW_SESSION_TICKET),
- "SSL3_GET_NEW_SESSION_TICKET"},
- {ERR_FUNC(SSL_F_SSL3_GET_NEXT_PROTO), "SSL3_GET_NEXT_PROTO"},
+ "ssl3_get_new_session_ticket"},
+ {ERR_FUNC(SSL_F_SSL3_GET_NEXT_PROTO), "ssl3_get_next_proto"},
{ERR_FUNC(SSL_F_SSL3_GET_RECORD), "SSL3_GET_RECORD"},
{ERR_FUNC(SSL_F_SSL3_GET_SERVER_CERTIFICATE),
- "SSL3_GET_SERVER_CERTIFICATE"},
- {ERR_FUNC(SSL_F_SSL3_GET_SERVER_DONE), "SSL3_GET_SERVER_DONE"},
- {ERR_FUNC(SSL_F_SSL3_GET_SERVER_HELLO), "SSL3_GET_SERVER_HELLO"},
+ "ssl3_get_server_certificate"},
+ {ERR_FUNC(SSL_F_SSL3_GET_SERVER_DONE), "ssl3_get_server_done"},
+ {ERR_FUNC(SSL_F_SSL3_GET_SERVER_HELLO), "ssl3_get_server_hello"},
{ERR_FUNC(SSL_F_SSL3_HANDSHAKE_MAC), "ssl3_handshake_mac"},
{ERR_FUNC(SSL_F_SSL3_NEW_SESSION_TICKET), "SSL3_NEW_SESSION_TICKET"},
- {ERR_FUNC(SSL_F_SSL3_OUTPUT_CERT_CHAIN), "SSL3_OUTPUT_CERT_CHAIN"},
- {ERR_FUNC(SSL_F_SSL3_PEEK), "SSL3_PEEK"},
- {ERR_FUNC(SSL_F_SSL3_READ_BYTES), "SSL3_READ_BYTES"},
- {ERR_FUNC(SSL_F_SSL3_READ_N), "SSL3_READ_N"},
+ {ERR_FUNC(SSL_F_SSL3_OUTPUT_CERT_CHAIN), "ssl3_output_cert_chain"},
+ {ERR_FUNC(SSL_F_SSL3_PEEK), "ssl3_peek"},
+ {ERR_FUNC(SSL_F_SSL3_READ_BYTES), "ssl3_read_bytes"},
+ {ERR_FUNC(SSL_F_SSL3_READ_N), "ssl3_read_n"},
{ERR_FUNC(SSL_F_SSL3_SEND_CERTIFICATE_REQUEST),
- "SSL3_SEND_CERTIFICATE_REQUEST"},
+ "ssl3_send_certificate_request"},
{ERR_FUNC(SSL_F_SSL3_SEND_CLIENT_CERTIFICATE),
- "SSL3_SEND_CLIENT_CERTIFICATE"},
+ "ssl3_send_client_certificate"},
{ERR_FUNC(SSL_F_SSL3_SEND_CLIENT_KEY_EXCHANGE),
- "SSL3_SEND_CLIENT_KEY_EXCHANGE"},
- {ERR_FUNC(SSL_F_SSL3_SEND_CLIENT_VERIFY), "SSL3_SEND_CLIENT_VERIFY"},
+ "ssl3_send_client_key_exchange"},
+ {ERR_FUNC(SSL_F_SSL3_SEND_CLIENT_VERIFY), "ssl3_send_client_verify"},
{ERR_FUNC(SSL_F_SSL3_SEND_SERVER_CERTIFICATE),
- "SSL3_SEND_SERVER_CERTIFICATE"},
- {ERR_FUNC(SSL_F_SSL3_SEND_SERVER_HELLO), "SSL3_SEND_SERVER_HELLO"},
+ "ssl3_send_server_certificate"},
+ {ERR_FUNC(SSL_F_SSL3_SEND_SERVER_HELLO), "ssl3_send_server_hello"},
{ERR_FUNC(SSL_F_SSL3_SEND_SERVER_KEY_EXCHANGE),
- "SSL3_SEND_SERVER_KEY_EXCHANGE"},
- {ERR_FUNC(SSL_F_SSL3_SETUP_KEY_BLOCK), "SSL3_SETUP_KEY_BLOCK"},
- {ERR_FUNC(SSL_F_SSL3_SETUP_READ_BUFFER), "SSL3_SETUP_READ_BUFFER"},
- {ERR_FUNC(SSL_F_SSL3_SETUP_WRITE_BUFFER), "SSL3_SETUP_WRITE_BUFFER"},
- {ERR_FUNC(SSL_F_SSL3_WRITE_BYTES), "SSL3_WRITE_BYTES"},
- {ERR_FUNC(SSL_F_SSL3_WRITE_PENDING), "SSL3_WRITE_PENDING"},
+ "ssl3_send_server_key_exchange"},
+ {ERR_FUNC(SSL_F_SSL3_SETUP_KEY_BLOCK), "ssl3_setup_key_block"},
+ {ERR_FUNC(SSL_F_SSL3_SETUP_READ_BUFFER), "ssl3_setup_read_buffer"},
+ {ERR_FUNC(SSL_F_SSL3_SETUP_WRITE_BUFFER), "ssl3_setup_write_buffer"},
+ {ERR_FUNC(SSL_F_SSL3_WRITE_BYTES), "ssl3_write_bytes"},
+ {ERR_FUNC(SSL_F_SSL3_WRITE_PENDING), "ssl3_write_pending"},
+ {ERR_FUNC(SSL_F_SSL_ADD_CERT_CHAIN), "ssl_add_cert_chain"},
+ {ERR_FUNC(SSL_F_SSL_ADD_CERT_TO_BUF), "SSL_ADD_CERT_TO_BUF"},
{ERR_FUNC(SSL_F_SSL_ADD_CLIENTHELLO_RENEGOTIATE_EXT),
- "SSL_ADD_CLIENTHELLO_RENEGOTIATE_EXT"},
+ "ssl_add_clienthello_renegotiate_ext"},
{ERR_FUNC(SSL_F_SSL_ADD_CLIENTHELLO_TLSEXT),
- "SSL_ADD_CLIENTHELLO_TLSEXT"},
+ "ssl_add_clienthello_tlsext"},
{ERR_FUNC(SSL_F_SSL_ADD_CLIENTHELLO_USE_SRTP_EXT),
- "SSL_ADD_CLIENTHELLO_USE_SRTP_EXT"},
+ "ssl_add_clienthello_use_srtp_ext"},
{ERR_FUNC(SSL_F_SSL_ADD_DIR_CERT_SUBJECTS_TO_STACK),
"SSL_add_dir_cert_subjects_to_stack"},
{ERR_FUNC(SSL_F_SSL_ADD_FILE_CERT_SUBJECTS_TO_STACK),
"SSL_add_file_cert_subjects_to_stack"},
{ERR_FUNC(SSL_F_SSL_ADD_SERVERHELLO_RENEGOTIATE_EXT),
- "SSL_ADD_SERVERHELLO_RENEGOTIATE_EXT"},
+ "ssl_add_serverhello_renegotiate_ext"},
{ERR_FUNC(SSL_F_SSL_ADD_SERVERHELLO_TLSEXT),
- "SSL_ADD_SERVERHELLO_TLSEXT"},
+ "ssl_add_serverhello_tlsext"},
{ERR_FUNC(SSL_F_SSL_ADD_SERVERHELLO_USE_SRTP_EXT),
- "SSL_ADD_SERVERHELLO_USE_SRTP_EXT"},
- {ERR_FUNC(SSL_F_SSL_BAD_METHOD), "SSL_BAD_METHOD"},
- {ERR_FUNC(SSL_F_SSL_BYTES_TO_CIPHER_LIST), "SSL_BYTES_TO_CIPHER_LIST"},
- {ERR_FUNC(SSL_F_SSL_CERT_DUP), "SSL_CERT_DUP"},
- {ERR_FUNC(SSL_F_SSL_CERT_INST), "SSL_CERT_INST"},
+ "ssl_add_serverhello_use_srtp_ext"},
+ {ERR_FUNC(SSL_F_SSL_BAD_METHOD), "ssl_bad_method"},
+ {ERR_FUNC(SSL_F_SSL_BUILD_CERT_CHAIN), "ssl_build_cert_chain"},
+ {ERR_FUNC(SSL_F_SSL_BYTES_TO_CIPHER_LIST), "ssl_bytes_to_cipher_list"},
+ {ERR_FUNC(SSL_F_SSL_CERT_DUP), "ssl_cert_dup"},
+ {ERR_FUNC(SSL_F_SSL_CERT_INST), "ssl_cert_inst"},
{ERR_FUNC(SSL_F_SSL_CERT_INSTANTIATE), "SSL_CERT_INSTANTIATE"},
- {ERR_FUNC(SSL_F_SSL_CERT_NEW), "SSL_CERT_NEW"},
+ {ERR_FUNC(SSL_F_SSL_CERT_NEW), "ssl_cert_new"},
{ERR_FUNC(SSL_F_SSL_CHECK_PRIVATE_KEY), "SSL_check_private_key"},
{ERR_FUNC(SSL_F_SSL_CHECK_SERVERHELLO_TLSEXT),
"SSL_CHECK_SERVERHELLO_TLSEXT"},
{ERR_FUNC(SSL_F_SSL_CHECK_SRVR_ECC_CERT_AND_ALG),
- "SSL_CHECK_SRVR_ECC_CERT_AND_ALG"},
+ "ssl_check_srvr_ecc_cert_and_alg"},
{ERR_FUNC(SSL_F_SSL_CIPHER_PROCESS_RULESTR),
"SSL_CIPHER_PROCESS_RULESTR"},
{ERR_FUNC(SSL_F_SSL_CIPHER_STRENGTH_SORT), "SSL_CIPHER_STRENGTH_SORT"},
{ERR_FUNC(SSL_F_SSL_CLEAR), "SSL_clear"},
{ERR_FUNC(SSL_F_SSL_COMP_ADD_COMPRESSION_METHOD),
"SSL_COMP_add_compression_method"},
- {ERR_FUNC(SSL_F_SSL_CREATE_CIPHER_LIST), "SSL_CREATE_CIPHER_LIST"},
+ {ERR_FUNC(SSL_F_SSL_CONF_CMD), "SSL_CONF_cmd"},
+ {ERR_FUNC(SSL_F_SSL_CREATE_CIPHER_LIST), "ssl_create_cipher_list"},
{ERR_FUNC(SSL_F_SSL_CTRL), "SSL_ctrl"},
{ERR_FUNC(SSL_F_SSL_CTX_CHECK_PRIVATE_KEY), "SSL_CTX_check_private_key"},
{ERR_FUNC(SSL_F_SSL_CTX_MAKE_PROFILES), "SSL_CTX_MAKE_PROFILES"},
@@ -270,41 +275,49 @@ static ERR_STRING_DATA SSL_str_functs[] = {
"SSL_CTX_use_RSAPrivateKey_ASN1"},
{ERR_FUNC(SSL_F_SSL_CTX_USE_RSAPRIVATEKEY_FILE),
"SSL_CTX_use_RSAPrivateKey_file"},
+ {ERR_FUNC(SSL_F_SSL_CTX_USE_SERVERINFO), "SSL_CTX_use_serverinfo"},
+ {ERR_FUNC(SSL_F_SSL_CTX_USE_SERVERINFO_FILE),
+ "SSL_CTX_use_serverinfo_file"},
{ERR_FUNC(SSL_F_SSL_DO_HANDSHAKE), "SSL_do_handshake"},
- {ERR_FUNC(SSL_F_SSL_GET_NEW_SESSION), "SSL_GET_NEW_SESSION"},
- {ERR_FUNC(SSL_F_SSL_GET_PREV_SESSION), "SSL_GET_PREV_SESSION"},
+ {ERR_FUNC(SSL_F_SSL_GET_NEW_SESSION), "ssl_get_new_session"},
+ {ERR_FUNC(SSL_F_SSL_GET_PREV_SESSION), "ssl_get_prev_session"},
+ {ERR_FUNC(SSL_F_SSL_GET_SERVER_CERT_INDEX), "SSL_GET_SERVER_CERT_INDEX"},
{ERR_FUNC(SSL_F_SSL_GET_SERVER_SEND_CERT), "SSL_GET_SERVER_SEND_CERT"},
- {ERR_FUNC(SSL_F_SSL_GET_SERVER_SEND_PKEY), "SSL_GET_SERVER_SEND_PKEY"},
- {ERR_FUNC(SSL_F_SSL_GET_SIGN_PKEY), "SSL_GET_SIGN_PKEY"},
- {ERR_FUNC(SSL_F_SSL_INIT_WBIO_BUFFER), "SSL_INIT_WBIO_BUFFER"},
+ {ERR_FUNC(SSL_F_SSL_GET_SERVER_SEND_PKEY), "ssl_get_server_send_pkey"},
+ {ERR_FUNC(SSL_F_SSL_GET_SIGN_PKEY), "ssl_get_sign_pkey"},
+ {ERR_FUNC(SSL_F_SSL_INIT_WBIO_BUFFER), "ssl_init_wbio_buffer"},
{ERR_FUNC(SSL_F_SSL_LOAD_CLIENT_CA_FILE), "SSL_load_client_CA_file"},
{ERR_FUNC(SSL_F_SSL_NEW), "SSL_new"},
{ERR_FUNC(SSL_F_SSL_PARSE_CLIENTHELLO_RENEGOTIATE_EXT),
- "SSL_PARSE_CLIENTHELLO_RENEGOTIATE_EXT"},
+ "ssl_parse_clienthello_renegotiate_ext"},
{ERR_FUNC(SSL_F_SSL_PARSE_CLIENTHELLO_TLSEXT),
- "SSL_PARSE_CLIENTHELLO_TLSEXT"},
+ "ssl_parse_clienthello_tlsext"},
{ERR_FUNC(SSL_F_SSL_PARSE_CLIENTHELLO_USE_SRTP_EXT),
- "SSL_PARSE_CLIENTHELLO_USE_SRTP_EXT"},
+ "ssl_parse_clienthello_use_srtp_ext"},
{ERR_FUNC(SSL_F_SSL_PARSE_SERVERHELLO_RENEGOTIATE_EXT),
- "SSL_PARSE_SERVERHELLO_RENEGOTIATE_EXT"},
+ "ssl_parse_serverhello_renegotiate_ext"},
{ERR_FUNC(SSL_F_SSL_PARSE_SERVERHELLO_TLSEXT),
- "SSL_PARSE_SERVERHELLO_TLSEXT"},
+ "ssl_parse_serverhello_tlsext"},
{ERR_FUNC(SSL_F_SSL_PARSE_SERVERHELLO_USE_SRTP_EXT),
- "SSL_PARSE_SERVERHELLO_USE_SRTP_EXT"},
+ "ssl_parse_serverhello_use_srtp_ext"},
{ERR_FUNC(SSL_F_SSL_PEEK), "SSL_peek"},
{ERR_FUNC(SSL_F_SSL_PREPARE_CLIENTHELLO_TLSEXT),
- "SSL_PREPARE_CLIENTHELLO_TLSEXT"},
+ "ssl_prepare_clienthello_tlsext"},
{ERR_FUNC(SSL_F_SSL_PREPARE_SERVERHELLO_TLSEXT),
- "SSL_PREPARE_SERVERHELLO_TLSEXT"},
+ "ssl_prepare_serverhello_tlsext"},
{ERR_FUNC(SSL_F_SSL_READ), "SSL_read"},
{ERR_FUNC(SSL_F_SSL_RSA_PRIVATE_DECRYPT), "SSL_RSA_PRIVATE_DECRYPT"},
{ERR_FUNC(SSL_F_SSL_RSA_PUBLIC_ENCRYPT), "SSL_RSA_PUBLIC_ENCRYPT"},
+ {ERR_FUNC(SSL_F_SSL_SCAN_CLIENTHELLO_TLSEXT),
+ "SSL_SCAN_CLIENTHELLO_TLSEXT"},
+ {ERR_FUNC(SSL_F_SSL_SCAN_SERVERHELLO_TLSEXT),
+ "SSL_SCAN_SERVERHELLO_TLSEXT"},
{ERR_FUNC(SSL_F_SSL_SESSION_DUP), "ssl_session_dup"},
{ERR_FUNC(SSL_F_SSL_SESSION_NEW), "SSL_SESSION_new"},
{ERR_FUNC(SSL_F_SSL_SESSION_PRINT_FP), "SSL_SESSION_print_fp"},
{ERR_FUNC(SSL_F_SSL_SESSION_SET1_ID_CONTEXT),
"SSL_SESSION_set1_id_context"},
- {ERR_FUNC(SSL_F_SSL_SESS_CERT_NEW), "SSL_SESS_CERT_NEW"},
+ {ERR_FUNC(SSL_F_SSL_SESS_CERT_NEW), "ssl_sess_cert_new"},
{ERR_FUNC(SSL_F_SSL_SET_CERT), "SSL_SET_CERT"},
{ERR_FUNC(SSL_F_SSL_SET_CIPHER_LIST), "SSL_set_cipher_list"},
{ERR_FUNC(SSL_F_SSL_SET_FD), "SSL_set_fd"},
@@ -321,10 +334,10 @@ static ERR_STRING_DATA SSL_str_functs[] = {
{ERR_FUNC(SSL_F_SSL_SHUTDOWN), "SSL_shutdown"},
{ERR_FUNC(SSL_F_SSL_SRP_CTX_INIT), "SSL_SRP_CTX_init"},
{ERR_FUNC(SSL_F_SSL_UNDEFINED_CONST_FUNCTION),
- "SSL_UNDEFINED_CONST_FUNCTION"},
- {ERR_FUNC(SSL_F_SSL_UNDEFINED_FUNCTION), "SSL_UNDEFINED_FUNCTION"},
+ "ssl_undefined_const_function"},
+ {ERR_FUNC(SSL_F_SSL_UNDEFINED_FUNCTION), "ssl_undefined_function"},
{ERR_FUNC(SSL_F_SSL_UNDEFINED_VOID_FUNCTION),
- "SSL_UNDEFINED_VOID_FUNCTION"},
+ "ssl_undefined_void_function"},
{ERR_FUNC(SSL_F_SSL_USE_CERTIFICATE), "SSL_use_certificate"},
{ERR_FUNC(SSL_F_SSL_USE_CERTIFICATE_ASN1), "SSL_use_certificate_ASN1"},
{ERR_FUNC(SSL_F_SSL_USE_CERTIFICATE_FILE), "SSL_use_certificate_file"},
@@ -337,22 +350,25 @@ static ERR_STRING_DATA SSL_str_functs[] = {
"SSL_use_RSAPrivateKey_ASN1"},
{ERR_FUNC(SSL_F_SSL_USE_RSAPRIVATEKEY_FILE),
"SSL_use_RSAPrivateKey_file"},
- {ERR_FUNC(SSL_F_SSL_VERIFY_CERT_CHAIN), "SSL_VERIFY_CERT_CHAIN"},
+ {ERR_FUNC(SSL_F_SSL_VERIFY_CERT_CHAIN), "ssl_verify_cert_chain"},
{ERR_FUNC(SSL_F_SSL_WRITE), "SSL_write"},
+ {ERR_FUNC(SSL_F_TLS12_CHECK_PEER_SIGALG), "tls12_check_peer_sigalg"},
{ERR_FUNC(SSL_F_TLS1_CERT_VERIFY_MAC), "tls1_cert_verify_mac"},
- {ERR_FUNC(SSL_F_TLS1_CHANGE_CIPHER_STATE), "TLS1_CHANGE_CIPHER_STATE"},
+ {ERR_FUNC(SSL_F_TLS1_CHANGE_CIPHER_STATE), "tls1_change_cipher_state"},
{ERR_FUNC(SSL_F_TLS1_CHECK_SERVERHELLO_TLSEXT),
"TLS1_CHECK_SERVERHELLO_TLSEXT"},
- {ERR_FUNC(SSL_F_TLS1_ENC), "TLS1_ENC"},
+ {ERR_FUNC(SSL_F_TLS1_ENC), "tls1_enc"},
{ERR_FUNC(SSL_F_TLS1_EXPORT_KEYING_MATERIAL),
- "TLS1_EXPORT_KEYING_MATERIAL"},
- {ERR_FUNC(SSL_F_TLS1_HEARTBEAT), "SSL_F_TLS1_HEARTBEAT"},
+ "tls1_export_keying_material"},
+ {ERR_FUNC(SSL_F_TLS1_GET_CURVELIST), "TLS1_GET_CURVELIST"},
+ {ERR_FUNC(SSL_F_TLS1_HEARTBEAT), "tls1_heartbeat"},
{ERR_FUNC(SSL_F_TLS1_PREPARE_CLIENTHELLO_TLSEXT),
"TLS1_PREPARE_CLIENTHELLO_TLSEXT"},
{ERR_FUNC(SSL_F_TLS1_PREPARE_SERVERHELLO_TLSEXT),
"TLS1_PREPARE_SERVERHELLO_TLSEXT"},
{ERR_FUNC(SSL_F_TLS1_PRF), "tls1_prf"},
- {ERR_FUNC(SSL_F_TLS1_SETUP_KEY_BLOCK), "TLS1_SETUP_KEY_BLOCK"},
+ {ERR_FUNC(SSL_F_TLS1_SETUP_KEY_BLOCK), "tls1_setup_key_block"},
+ {ERR_FUNC(SSL_F_TLS1_SET_SERVER_SIGALGS), "tls1_set_server_sigalgs"},
{ERR_FUNC(SSL_F_WRITE_PENDING), "WRITE_PENDING"},
{0, NULL}
};
@@ -365,6 +381,7 @@ static ERR_STRING_DATA SSL_str_reasons[] = {
{ERR_REASON(SSL_R_BAD_AUTHENTICATION_TYPE), "bad authentication type"},
{ERR_REASON(SSL_R_BAD_CHANGE_CIPHER_SPEC), "bad change cipher spec"},
{ERR_REASON(SSL_R_BAD_CHECKSUM), "bad checksum"},
+ {ERR_REASON(SSL_R_BAD_DATA), "bad data"},
{ERR_REASON(SSL_R_BAD_DATA_RETURNED_BY_CALLBACK),
"bad data returned by callback"},
{ERR_REASON(SSL_R_BAD_DECOMPRESSION), "bad decompression"},
@@ -407,6 +424,7 @@ static ERR_STRING_DATA SSL_str_reasons[] = {
{ERR_REASON(SSL_R_BAD_SSL_SESSION_ID_LENGTH),
"bad ssl session id length"},
{ERR_REASON(SSL_R_BAD_STATE), "bad state"},
+ {ERR_REASON(SSL_R_BAD_VALUE), "bad value"},
{ERR_REASON(SSL_R_BAD_WRITE_RETRY), "bad write retry"},
{ERR_REASON(SSL_R_BIO_NOT_SET), "bio not set"},
{ERR_REASON(SSL_R_BLOCK_CIPHER_PAD_IS_WRONG),
@@ -417,6 +435,7 @@ static ERR_STRING_DATA SSL_str_reasons[] = {
{ERR_REASON(SSL_R_CCS_RECEIVED_EARLY), "ccs received early"},
{ERR_REASON(SSL_R_CERTIFICATE_VERIFY_FAILED),
"certificate verify failed"},
+ {ERR_REASON(SSL_R_CERT_CB_ERROR), "cert cb error"},
{ERR_REASON(SSL_R_CERT_LENGTH_MISMATCH), "cert length mismatch"},
{ERR_REASON(SSL_R_CHALLENGE_IS_DIFFERENT), "challenge is different"},
{ERR_REASON(SSL_R_CIPHER_CODE_WRONG_LENGTH), "cipher code wrong length"},
@@ -455,6 +474,8 @@ static ERR_STRING_DATA SSL_str_reasons[] = {
"ecc cert should have rsa signature"},
{ERR_REASON(SSL_R_ECC_CERT_SHOULD_HAVE_SHA1_SIGNATURE),
"ecc cert should have sha1 signature"},
+ {ERR_REASON(SSL_R_ECDH_REQUIRED_FOR_SUITEB_MODE),
+ "ecdh required for suiteb mode"},
{ERR_REASON(SSL_R_ECGROUP_TOO_LARGE_FOR_CIPHER),
"ecgroup too large for cipher"},
{ERR_REASON(SSL_R_EMPTY_SRTP_PROTECTION_PROFILE_LIST),
@@ -475,13 +496,16 @@ static ERR_STRING_DATA SSL_str_reasons[] = {
{ERR_REASON(SSL_R_HTTPS_PROXY_REQUEST), "https proxy request"},
{ERR_REASON(SSL_R_HTTP_REQUEST), "http request"},
{ERR_REASON(SSL_R_ILLEGAL_PADDING), "illegal padding"},
+ {ERR_REASON(SSL_R_ILLEGAL_SUITEB_DIGEST), "illegal Suite B digest"},
{ERR_REASON(SSL_R_INAPPROPRIATE_FALLBACK), "inappropriate fallback"},
{ERR_REASON(SSL_R_INCONSISTENT_COMPRESSION), "inconsistent compression"},
{ERR_REASON(SSL_R_INVALID_CHALLENGE_LENGTH), "invalid challenge length"},
{ERR_REASON(SSL_R_INVALID_COMMAND), "invalid command"},
{ERR_REASON(SSL_R_INVALID_COMPRESSION_ALGORITHM),
"invalid compression algorithm"},
+ {ERR_REASON(SSL_R_INVALID_NULL_CMD_NAME), "invalid null cmd name"},
{ERR_REASON(SSL_R_INVALID_PURPOSE), "invalid purpose"},
+ {ERR_REASON(SSL_R_INVALID_SERVERINFO_DATA), "invalid serverinfo data"},
{ERR_REASON(SSL_R_INVALID_SRP_USERNAME), "invalid srp username"},
{ERR_REASON(SSL_R_INVALID_STATUS_RESPONSE), "invalid status response"},
{ERR_REASON(SSL_R_INVALID_TICKET_KEYS_LENGTH),
@@ -508,6 +532,9 @@ static ERR_STRING_DATA SSL_str_reasons[] = {
{ERR_REASON(SSL_R_MISSING_DH_KEY), "missing dh key"},
{ERR_REASON(SSL_R_MISSING_DH_RSA_CERT), "missing dh rsa cert"},
{ERR_REASON(SSL_R_MISSING_DSA_SIGNING_CERT), "missing dsa signing cert"},
+ {ERR_REASON(SSL_R_MISSING_ECDH_CERT), "missing ecdh cert"},
+ {ERR_REASON(SSL_R_MISSING_ECDSA_SIGNING_CERT),
+ "missing ecdsa signing cert"},
{ERR_REASON(SSL_R_MISSING_EXPORT_TMP_DH_KEY),
"missing export tmp dh key"},
{ERR_REASON(SSL_R_MISSING_EXPORT_TMP_RSA_KEY),
@@ -540,6 +567,7 @@ static ERR_STRING_DATA SSL_str_reasons[] = {
{ERR_REASON(SSL_R_NO_GOST_CERTIFICATE_SENT_BY_PEER),
"Peer haven't sent GOST certificate, required for selected ciphersuite"},
{ERR_REASON(SSL_R_NO_METHOD_SPECIFIED), "no method specified"},
+ {ERR_REASON(SSL_R_NO_PEM_EXTENSIONS), "no pem extensions"},
{ERR_REASON(SSL_R_NO_PRIVATEKEY), "no privatekey"},
{ERR_REASON(SSL_R_NO_PRIVATE_KEY_ASSIGNED), "no private key assigned"},
{ERR_REASON(SSL_R_NO_PROTOCOLS_AVAILABLE), "no protocols available"},
@@ -548,6 +576,8 @@ static ERR_STRING_DATA SSL_str_reasons[] = {
{ERR_REASON(SSL_R_NO_REQUIRED_DIGEST),
"digest requred for handshake isn't computed"},
{ERR_REASON(SSL_R_NO_SHARED_CIPHER), "no shared cipher"},
+ {ERR_REASON(SSL_R_NO_SHARED_SIGATURE_ALGORITHMS),
+ "no shared sigature algorithms"},
{ERR_REASON(SSL_R_NO_SRTP_PROFILES), "no srtp profiles"},
{ERR_REASON(SSL_R_NO_VERIFY_CALLBACK), "no verify callback"},
{ERR_REASON(SSL_R_NULL_SSL_CTX), "null ssl ctx"},
@@ -556,6 +586,10 @@ static ERR_STRING_DATA SSL_str_reasons[] = {
"old session cipher not returned"},
{ERR_REASON(SSL_R_OLD_SESSION_COMPRESSION_ALGORITHM_NOT_RETURNED),
"old session compression algorithm not returned"},
+ {ERR_REASON(SSL_R_ONLY_DTLS_1_2_ALLOWED_IN_SUITEB_MODE),
+ "only DTLS 1.2 allowed in Suite B mode"},
+ {ERR_REASON(SSL_R_ONLY_TLS_1_2_ALLOWED_IN_SUITEB_MODE),
+ "only TLS 1.2 allowed in Suite B mode"},
{ERR_REASON(SSL_R_ONLY_TLS_ALLOWED_IN_FIPS_MODE),
"only tls allowed in fips mode"},
{ERR_REASON(SSL_R_OPAQUE_PRF_INPUT_TOO_LONG),
@@ -572,6 +606,8 @@ static ERR_STRING_DATA SSL_str_reasons[] = {
{ERR_REASON(SSL_R_PEER_ERROR_NO_CIPHER), "peer error no cipher"},
{ERR_REASON(SSL_R_PEER_ERROR_UNSUPPORTED_CERTIFICATE_TYPE),
"peer error unsupported certificate type"},
+ {ERR_REASON(SSL_R_PEM_NAME_BAD_PREFIX), "pem name bad prefix"},
+ {ERR_REASON(SSL_R_PEM_NAME_TOO_SHORT), "pem name too short"},
{ERR_REASON(SSL_R_PRE_MAC_LENGTH_TOO_LONG), "pre mac length too long"},
{ERR_REASON(SSL_R_PROBLEMS_MAPPING_CIPHER_FUNCTIONS),
"problems mapping cipher functions"},
@@ -742,6 +778,7 @@ static ERR_STRING_DATA SSL_str_reasons[] = {
{ERR_REASON(SSL_R_UNKNOWN_CERTIFICATE_TYPE), "unknown certificate type"},
{ERR_REASON(SSL_R_UNKNOWN_CIPHER_RETURNED), "unknown cipher returned"},
{ERR_REASON(SSL_R_UNKNOWN_CIPHER_TYPE), "unknown cipher type"},
+ {ERR_REASON(SSL_R_UNKNOWN_CMD_NAME), "unknown cmd name"},
{ERR_REASON(SSL_R_UNKNOWN_DIGEST), "unknown digest"},
{ERR_REASON(SSL_R_UNKNOWN_KEY_EXCHANGE_TYPE),
"unknown key exchange type"},
@@ -764,7 +801,9 @@ static ERR_STRING_DATA SSL_str_reasons[] = {
{ERR_REASON(SSL_R_UNSUPPORTED_STATUS_TYPE), "unsupported status type"},
{ERR_REASON(SSL_R_USE_SRTP_NOT_NEGOTIATED), "use srtp not negotiated"},
{ERR_REASON(SSL_R_WRITE_BIO_NOT_SET), "write bio not set"},
+ {ERR_REASON(SSL_R_WRONG_CERTIFICATE_TYPE), "wrong certificate type"},
{ERR_REASON(SSL_R_WRONG_CIPHER_RETURNED), "wrong cipher returned"},
+ {ERR_REASON(SSL_R_WRONG_CURVE), "wrong curve"},
{ERR_REASON(SSL_R_WRONG_MESSAGE_TYPE), "wrong message type"},
{ERR_REASON(SSL_R_WRONG_NUMBER_OF_KEY_BITS), "wrong number of key bits"},
{ERR_REASON(SSL_R_WRONG_SIGNATURE_LENGTH), "wrong signature length"},
diff --git a/crypto/openssl/ssl/ssl_lib.c b/crypto/openssl/ssl/ssl_lib.c
index e11746a..c0931e7 100644
--- a/crypto/openssl/ssl/ssl_lib.c
+++ b/crypto/openssl/ssl/ssl_lib.c
@@ -273,7 +273,7 @@ int SSL_CTX_set_ssl_version(SSL_CTX *ctx, const SSL_METHOD *meth)
&(ctx->cipher_list_by_id),
meth->version ==
SSL2_VERSION ? "SSLv2" :
- SSL_DEFAULT_CIPHER_LIST);
+ SSL_DEFAULT_CIPHER_LIST, ctx->cert);
if ((sk == NULL) || (sk_SSL_CIPHER_num(sk) <= 0)) {
SSLerr(SSL_F_SSL_CTX_SET_SSL_VERSION,
SSL_R_SSL_LIBRARY_HAS_NO_CIPHERS);
@@ -363,9 +363,39 @@ SSL *SSL_new(SSL_CTX *ctx)
s->tlsext_ocsp_resplen = -1;
CRYPTO_add(&ctx->references, 1, CRYPTO_LOCK_SSL_CTX);
s->initial_ctx = ctx;
+# ifndef OPENSSL_NO_EC
+ if (ctx->tlsext_ecpointformatlist) {
+ s->tlsext_ecpointformatlist =
+ BUF_memdup(ctx->tlsext_ecpointformatlist,
+ ctx->tlsext_ecpointformatlist_length);
+ if (!s->tlsext_ecpointformatlist)
+ goto err;
+ s->tlsext_ecpointformatlist_length =
+ ctx->tlsext_ecpointformatlist_length;
+ }
+ if (ctx->tlsext_ellipticcurvelist) {
+ s->tlsext_ellipticcurvelist =
+ BUF_memdup(ctx->tlsext_ellipticcurvelist,
+ ctx->tlsext_ellipticcurvelist_length);
+ if (!s->tlsext_ellipticcurvelist)
+ goto err;
+ s->tlsext_ellipticcurvelist_length =
+ ctx->tlsext_ellipticcurvelist_length;
+ }
+# endif
# ifndef OPENSSL_NO_NEXTPROTONEG
s->next_proto_negotiated = NULL;
# endif
+
+ if (s->ctx->alpn_client_proto_list) {
+ s->alpn_client_proto_list =
+ OPENSSL_malloc(s->ctx->alpn_client_proto_list_len);
+ if (s->alpn_client_proto_list == NULL)
+ goto err;
+ memcpy(s->alpn_client_proto_list, s->ctx->alpn_client_proto_list,
+ s->ctx->alpn_client_proto_list_len);
+ s->alpn_client_proto_list_len = s->ctx->alpn_client_proto_list_len;
+ }
#endif
s->verify_result = X509_V_OK;
@@ -505,6 +535,21 @@ int SSL_set1_param(SSL *ssl, X509_VERIFY_PARAM *vpm)
return X509_VERIFY_PARAM_set1(ssl->param, vpm);
}
+X509_VERIFY_PARAM *SSL_CTX_get0_param(SSL_CTX *ctx)
+{
+ return ctx->param;
+}
+
+X509_VERIFY_PARAM *SSL_get0_param(SSL *ssl)
+{
+ return ssl->param;
+}
+
+void SSL_certs_clear(SSL *s)
+{
+ ssl_cert_clear_certs(s->cert);
+}
+
void SSL_free(SSL *s)
{
int i;
@@ -585,6 +630,8 @@ void SSL_free(SSL *s)
sk_OCSP_RESPID_pop_free(s->tlsext_ocsp_ids, OCSP_RESPID_free);
if (s->tlsext_ocsp_resp)
OPENSSL_free(s->tlsext_ocsp_resp);
+ if (s->alpn_client_proto_list)
+ OPENSSL_free(s->alpn_client_proto_list);
#endif
if (s->client_CA != NULL)
@@ -1088,6 +1135,19 @@ long SSL_ctrl(SSL *s, int cmd, long larg, void *parg)
return s->s3->send_connection_binding;
else
return 0;
+ case SSL_CTRL_CERT_FLAGS:
+ return (s->cert->cert_flags |= larg);
+ case SSL_CTRL_CLEAR_CERT_FLAGS:
+ return (s->cert->cert_flags &= ~larg);
+
+ case SSL_CTRL_GET_RAW_CIPHERLIST:
+ if (parg) {
+ if (s->cert->ciphers_raw == NULL)
+ return 0;
+ *(unsigned char **)parg = s->cert->ciphers_raw;
+ return (int)s->cert->ciphers_rawlen;
+ } else
+ return ssl_put_cipher_by_char(s, NULL, NULL);
default:
return (s->method->ssl_ctrl(s, cmd, larg, parg));
}
@@ -1116,6 +1176,20 @@ LHASH_OF(SSL_SESSION) *SSL_CTX_sessions(SSL_CTX *ctx)
long SSL_CTX_ctrl(SSL_CTX *ctx, int cmd, long larg, void *parg)
{
long l;
+ /* For some cases with ctx == NULL perform syntax checks */
+ if (ctx == NULL) {
+ switch (cmd) {
+#ifndef OPENSSL_NO_EC
+ case SSL_CTRL_SET_CURVES_LIST:
+ return tls1_set_curves_list(NULL, NULL, parg);
+#endif
+ case SSL_CTRL_SET_SIGALGS_LIST:
+ case SSL_CTRL_SET_CLIENT_SIGALGS_LIST:
+ return tls1_set_sigalgs_list(NULL, parg, 0);
+ default:
+ return 0;
+ }
+ }
switch (cmd) {
case SSL_CTRL_GET_READ_AHEAD:
@@ -1186,6 +1260,10 @@ long SSL_CTX_ctrl(SSL_CTX *ctx, int cmd, long larg, void *parg)
return 0;
ctx->max_send_fragment = larg;
return 1;
+ case SSL_CTRL_CERT_FLAGS:
+ return (ctx->cert->cert_flags |= larg);
+ case SSL_CTRL_CLEAR_CERT_FLAGS:
+ return (ctx->cert->cert_flags &= ~larg);
default:
return (ctx->method->ssl_ctx_ctrl(ctx, cmd, larg, parg));
}
@@ -1280,7 +1358,7 @@ int SSL_CTX_set_cipher_list(SSL_CTX *ctx, const char *str)
STACK_OF(SSL_CIPHER) *sk;
sk = ssl_create_cipher_list(ctx->method, &ctx->cipher_list,
- &ctx->cipher_list_by_id, str);
+ &ctx->cipher_list_by_id, str, ctx->cert);
/*
* ssl_create_cipher_list may return an empty stack if it was unable to
* find a cipher matching the given rule string (for example if the rule
@@ -1303,7 +1381,7 @@ int SSL_set_cipher_list(SSL *s, const char *str)
STACK_OF(SSL_CIPHER) *sk;
sk = ssl_create_cipher_list(s->ctx->method, &s->cipher_list,
- &s->cipher_list_by_id, str);
+ &s->cipher_list_by_id, str, s->cert);
/* see comment in SSL_CTX_set_cipher_list */
if (sk == NULL)
return 0;
@@ -1358,10 +1436,11 @@ int ssl_cipher_list_to_bytes(SSL *s, STACK_OF(SSL_CIPHER) *sk,
{
int i, j = 0;
SSL_CIPHER *c;
+ CERT *ct = s->cert;
unsigned char *q;
-#ifndef OPENSSL_NO_KRB5
- int nokrb5 = !kssl_tgt_is_available(s->kssl_ctx);
-#endif /* OPENSSL_NO_KRB5 */
+ int empty_reneg_info_scsv = !s->renegotiate;
+ /* Set disabled masks for this session */
+ ssl_set_client_disabled(s);
if (sk == NULL)
return (0);
@@ -1371,26 +1450,18 @@ int ssl_cipher_list_to_bytes(SSL *s, STACK_OF(SSL_CIPHER) *sk,
for (i = 0; i < sk_SSL_CIPHER_num(sk); i++) {
c = sk_SSL_CIPHER_value(sk, i);
- /* Skip TLS v1.2 only ciphersuites if lower than v1.2 */
- if ((c->algorithm_ssl & SSL_TLSV1_2) &&
- (TLS1_get_client_version(s) < TLS1_2_VERSION))
- continue;
-#ifndef OPENSSL_NO_KRB5
- if (((c->algorithm_mkey & SSL_kKRB5)
- || (c->algorithm_auth & SSL_aKRB5)) && nokrb5)
+ /* Skip disabled ciphers */
+ if (c->algorithm_ssl & ct->mask_ssl ||
+ c->algorithm_mkey & ct->mask_k || c->algorithm_auth & ct->mask_a)
continue;
-#endif /* OPENSSL_NO_KRB5 */
-#ifndef OPENSSL_NO_PSK
- /* with PSK there must be client callback set */
- if (((c->algorithm_mkey & SSL_kPSK) || (c->algorithm_auth & SSL_aPSK))
- && s->psk_client_callback == NULL)
- continue;
-#endif /* OPENSSL_NO_PSK */
-#ifndef OPENSSL_NO_SRP
- if (((c->algorithm_mkey & SSL_kSRP) || (c->algorithm_auth & SSL_aSRP))
- && !(s->srp_ctx.srp_Mask & SSL_kSRP))
- continue;
-#endif /* OPENSSL_NO_SRP */
+#ifdef OPENSSL_SSL_DEBUG_BROKEN_PROTOCOL
+ if (c->id == SSL3_CK_SCSV) {
+ if (!empty_reneg_info_scsv)
+ continue;
+ else
+ empty_reneg_info_scsv = 0;
+ }
+#endif
j = put_cb(c, p);
p += j;
}
@@ -1399,7 +1470,7 @@ int ssl_cipher_list_to_bytes(SSL *s, STACK_OF(SSL_CIPHER) *sk,
* applicable SCSVs.
*/
if (p != q) {
- if (!s->renegotiate) {
+ if (empty_reneg_info_scsv) {
static SSL_CIPHER scsv = {
0, NULL, SSL3_CK_SCSV, 0, 0, 0, 0, 0, 0, 0, 0, 0
};
@@ -1410,7 +1481,6 @@ int ssl_cipher_list_to_bytes(SSL *s, STACK_OF(SSL_CIPHER) *sk,
"TLS_EMPTY_RENEGOTIATION_INFO_SCSV sent by client\n");
#endif
}
-
if (s->mode & SSL_MODE_SEND_FALLBACK_SCSV) {
static SSL_CIPHER scsv = {
0, NULL, SSL3_CK_FALLBACK_SCSV, 0, 0, 0, 0, 0, 0, 0, 0, 0
@@ -1451,6 +1521,15 @@ STACK_OF(SSL_CIPHER) *ssl_bytes_to_cipher_list(SSL *s, unsigned char *p,
sk_SSL_CIPHER_zero(sk);
}
+ if (s->cert->ciphers_raw)
+ OPENSSL_free(s->cert->ciphers_raw);
+ s->cert->ciphers_raw = BUF_memdup(p, num);
+ if (s->cert->ciphers_raw == NULL) {
+ SSLerr(SSL_F_SSL_BYTES_TO_CIPHER_LIST, ERR_R_MALLOC_FAILURE);
+ goto err;
+ }
+ s->cert->ciphers_rawlen = (size_t)num;
+
for (i = 0; i < num; i += n) {
/* Check for TLS_EMPTY_RENEGOTIATION_INFO_SCSV */
if (s->s3 && (n != 3 || !p[0]) &&
@@ -1534,7 +1613,6 @@ int SSL_get_servername_type(const SSL *s)
return -1;
}
-# ifndef OPENSSL_NO_NEXTPROTONEG
/*
* SSL_select_next_proto implements the standard protocol selection. It is
* expected that this function is called from the callback set by
@@ -1594,6 +1672,7 @@ int SSL_select_next_proto(unsigned char **out, unsigned char *outlen,
return status;
}
+# ifndef OPENSSL_NO_NEXTPROTONEG
/*
* SSL_get0_next_proto_negotiated sets *data and *len to point to the
* client's requested protocol for this connection and returns 0. If the
@@ -1655,7 +1734,83 @@ void SSL_CTX_set_next_proto_select_cb(SSL_CTX *ctx,
ctx->next_proto_select_cb_arg = arg;
}
# endif
-#endif
+
+/*
+ * SSL_CTX_set_alpn_protos sets the ALPN protocol list on |ctx| to |protos|.
+ * |protos| must be in wire-format (i.e. a series of non-empty, 8-bit
+ * length-prefixed strings). Returns 0 on success.
+ */
+int SSL_CTX_set_alpn_protos(SSL_CTX *ctx, const unsigned char *protos,
+ unsigned protos_len)
+{
+ if (ctx->alpn_client_proto_list)
+ OPENSSL_free(ctx->alpn_client_proto_list);
+
+ ctx->alpn_client_proto_list = OPENSSL_malloc(protos_len);
+ if (!ctx->alpn_client_proto_list)
+ return 1;
+ memcpy(ctx->alpn_client_proto_list, protos, protos_len);
+ ctx->alpn_client_proto_list_len = protos_len;
+
+ return 0;
+}
+
+/*
+ * SSL_set_alpn_protos sets the ALPN protocol list on |ssl| to |protos|.
+ * |protos| must be in wire-format (i.e. a series of non-empty, 8-bit
+ * length-prefixed strings). Returns 0 on success.
+ */
+int SSL_set_alpn_protos(SSL *ssl, const unsigned char *protos,
+ unsigned protos_len)
+{
+ if (ssl->alpn_client_proto_list)
+ OPENSSL_free(ssl->alpn_client_proto_list);
+
+ ssl->alpn_client_proto_list = OPENSSL_malloc(protos_len);
+ if (!ssl->alpn_client_proto_list)
+ return 1;
+ memcpy(ssl->alpn_client_proto_list, protos, protos_len);
+ ssl->alpn_client_proto_list_len = protos_len;
+
+ return 0;
+}
+
+/*
+ * SSL_CTX_set_alpn_select_cb sets a callback function on |ctx| that is
+ * called during ClientHello processing in order to select an ALPN protocol
+ * from the client's list of offered protocols.
+ */
+void SSL_CTX_set_alpn_select_cb(SSL_CTX *ctx,
+ int (*cb) (SSL *ssl,
+ const unsigned char **out,
+ unsigned char *outlen,
+ const unsigned char *in,
+ unsigned int inlen,
+ void *arg), void *arg)
+{
+ ctx->alpn_select_cb = cb;
+ ctx->alpn_select_cb_arg = arg;
+}
+
+/*
+ * SSL_get0_alpn_selected gets the selected ALPN protocol (if any) from
+ * |ssl|. On return it sets |*data| to point to |*len| bytes of protocol name
+ * (not including the leading length-prefix byte). If the server didn't
+ * respond with a negotiated protocol then |*len| will be zero.
+ */
+void SSL_get0_alpn_selected(const SSL *ssl, const unsigned char **data,
+ unsigned *len)
+{
+ *data = NULL;
+ if (ssl->s3)
+ *data = ssl->s3->alpn_selected;
+ if (*data == NULL)
+ *len = 0;
+ else
+ *len = ssl->s3->alpn_selected_len;
+}
+
+#endif /* !OPENSSL_NO_TLSEXT */
int SSL_export_keying_material(SSL *s, unsigned char *out, size_t olen,
const char *label, size_t llen,
@@ -1794,7 +1949,8 @@ SSL_CTX *SSL_CTX_new(const SSL_METHOD *meth)
ssl_create_cipher_list(ret->method,
&ret->cipher_list, &ret->cipher_list_by_id,
meth->version ==
- SSL2_VERSION ? "SSLv2" : SSL_DEFAULT_CIPHER_LIST);
+ SSL2_VERSION ? "SSLv2" : SSL_DEFAULT_CIPHER_LIST,
+ ret->cert);
if (ret->cipher_list == NULL || sk_SSL_CIPHER_num(ret->cipher_list) <= 0) {
SSLerr(SSL_F_SSL_CTX_NEW, SSL_R_LIBRARY_HAS_NO_CIPHERS);
goto err2;
@@ -2007,6 +2163,16 @@ void SSL_CTX_free(SSL_CTX *a)
if (a->rbuf_freelist)
ssl_buf_freelist_free(a->rbuf_freelist);
#endif
+#ifndef OPENSSL_NO_TLSEXT
+# ifndef OPENSSL_NO_EC
+ if (a->tlsext_ecpointformatlist)
+ OPENSSL_free(a->tlsext_ecpointformatlist);
+ if (a->tlsext_ellipticcurvelist)
+ OPENSSL_free(a->tlsext_ellipticcurvelist);
+# endif /* OPENSSL_NO_EC */
+ if (a->alpn_client_proto_list != NULL)
+ OPENSSL_free(a->alpn_client_proto_list);
+#endif
OPENSSL_free(a);
}
@@ -2041,6 +2207,17 @@ void SSL_CTX_set_verify_depth(SSL_CTX *ctx, int depth)
X509_VERIFY_PARAM_set_depth(ctx->param, depth);
}
+void SSL_CTX_set_cert_cb(SSL_CTX *c, int (*cb) (SSL *ssl, void *arg),
+ void *arg)
+{
+ ssl_cert_set_cert_cb(c->cert, cb, arg);
+}
+
+void SSL_set_cert_cb(SSL *s, int (*cb) (SSL *ssl, void *arg), void *arg)
+{
+ ssl_cert_set_cert_cb(s->cert, cb, arg);
+}
+
void ssl_set_cert_masks(CERT *c, const SSL_CIPHER *cipher)
{
CERT_PKEY *cpk;
@@ -2080,25 +2257,25 @@ void ssl_set_cert_masks(CERT *c, const SSL_CIPHER *cipher)
#endif
#ifndef OPENSSL_NO_ECDH
- have_ecdh_tmp = (c->ecdh_tmp != NULL || c->ecdh_tmp_cb != NULL);
+ have_ecdh_tmp = (c->ecdh_tmp || c->ecdh_tmp_cb || c->ecdh_tmp_auto);
#endif
cpk = &(c->pkeys[SSL_PKEY_RSA_ENC]);
- rsa_enc = (cpk->x509 != NULL && cpk->privatekey != NULL);
+ rsa_enc = cpk->valid_flags & CERT_PKEY_VALID;
rsa_enc_export = (rsa_enc && EVP_PKEY_size(cpk->privatekey) * 8 <= kl);
cpk = &(c->pkeys[SSL_PKEY_RSA_SIGN]);
- rsa_sign = (cpk->x509 != NULL && cpk->privatekey != NULL);
+ rsa_sign = cpk->valid_flags & CERT_PKEY_SIGN;
cpk = &(c->pkeys[SSL_PKEY_DSA_SIGN]);
- dsa_sign = (cpk->x509 != NULL && cpk->privatekey != NULL);
+ dsa_sign = cpk->valid_flags & CERT_PKEY_SIGN;
cpk = &(c->pkeys[SSL_PKEY_DH_RSA]);
- dh_rsa = (cpk->x509 != NULL && cpk->privatekey != NULL);
+ dh_rsa = cpk->valid_flags & CERT_PKEY_VALID;
dh_rsa_export = (dh_rsa && EVP_PKEY_size(cpk->privatekey) * 8 <= kl);
cpk = &(c->pkeys[SSL_PKEY_DH_DSA]);
/* FIX THIS EAY EAY EAY */
- dh_dsa = (cpk->x509 != NULL && cpk->privatekey != NULL);
+ dh_dsa = cpk->valid_flags & CERT_PKEY_VALID;
dh_dsa_export = (dh_dsa && EVP_PKEY_size(cpk->privatekey) * 8 <= kl);
cpk = &(c->pkeys[SSL_PKEY_ECC]);
#ifndef OPENSSL_NO_EC
- have_ecc_cert = (cpk->x509 != NULL && cpk->privatekey != NULL);
+ have_ecc_cert = cpk->valid_flags & CERT_PKEY_VALID;
#endif
mask_k = 0;
mask_a = 0;
@@ -2153,6 +2330,9 @@ void ssl_set_cert_masks(CERT *c, const SSL_CIPHER *cipher)
if (dh_dsa_export)
emask_k |= SSL_kDHd;
+ if (mask_k & (SSL_kDHr | SSL_kDHd))
+ mask_a |= SSL_aDH;
+
if (rsa_enc || rsa_sign) {
mask_a |= SSL_aRSA;
emask_a |= SSL_aRSA;
@@ -2179,13 +2359,18 @@ void ssl_set_cert_masks(CERT *c, const SSL_CIPHER *cipher)
*/
#ifndef OPENSSL_NO_EC
if (have_ecc_cert) {
+ cpk = &c->pkeys[SSL_PKEY_ECC];
+ x = cpk->x509;
/* This call populates extension flags (ex_flags) */
- x = (c->pkeys[SSL_PKEY_ECC]).x509;
X509_check_purpose(x, -1, 0);
+# ifndef OPENSSL_NO_ECDH
ecdh_ok = (x->ex_flags & EXFLAG_KUSAGE) ?
(x->ex_kusage & X509v3_KU_KEY_AGREEMENT) : 1;
+# endif
ecdsa_ok = (x->ex_flags & EXFLAG_KUSAGE) ?
(x->ex_kusage & X509v3_KU_DIGITAL_SIGNATURE) : 1;
+ if (!(cpk->valid_flags & CERT_PKEY_SIGN))
+ ecdsa_ok = 0;
ecc_pkey = X509_get_pubkey(x);
ecc_pkey_size = (ecc_pkey != NULL) ? EVP_PKEY_bits(ecc_pkey) : 0;
EVP_PKEY_free(ecc_pkey);
@@ -2193,7 +2378,7 @@ void ssl_set_cert_masks(CERT *c, const SSL_CIPHER *cipher)
signature_nid = OBJ_obj2nid(x->sig_alg->algorithm);
OBJ_find_sigid_algs(signature_nid, &md_nid, &pk_nid);
}
-#ifndef OPENSSL_NO_ECDH
+# ifndef OPENSSL_NO_ECDH
if (ecdh_ok) {
if (pk_nid == NID_rsaEncryption || pk_nid == NID_rsa) {
@@ -2214,15 +2399,16 @@ void ssl_set_cert_masks(CERT *c, const SSL_CIPHER *cipher)
}
}
}
-#endif
-#ifndef OPENSSL_NO_ECDSA
+# endif
+# ifndef OPENSSL_NO_ECDSA
if (ecdsa_ok) {
mask_a |= SSL_aECDSA;
emask_a |= SSL_aECDSA;
}
-#endif
+# endif
}
#endif
+
#ifndef OPENSSL_NO_ECDH
if (have_ecdh_tmp) {
mask_k |= SSL_kEECDH;
@@ -2317,65 +2503,44 @@ int ssl_check_srvr_ecc_cert_and_alg(X509 *x, SSL *s)
#endif
-/* THIS NEEDS CLEANING UP */
+static int ssl_get_server_cert_index(const SSL *s)
+{
+ int idx;
+ idx = ssl_cipher_get_cert_index(s->s3->tmp.new_cipher);
+ if (idx == SSL_PKEY_RSA_ENC && !s->cert->pkeys[SSL_PKEY_RSA_ENC].x509)
+ idx = SSL_PKEY_RSA_SIGN;
+ if (idx == -1)
+ SSLerr(SSL_F_SSL_GET_SERVER_CERT_INDEX, ERR_R_INTERNAL_ERROR);
+ return idx;
+}
+
CERT_PKEY *ssl_get_server_send_pkey(const SSL *s)
{
- unsigned long alg_k, alg_a;
CERT *c;
int i;
c = s->cert;
+ if (!s->s3 || !s->s3->tmp.new_cipher)
+ return NULL;
ssl_set_cert_masks(c, s->s3->tmp.new_cipher);
- alg_k = s->s3->tmp.new_cipher->algorithm_mkey;
- alg_a = s->s3->tmp.new_cipher->algorithm_auth;
-
- if (alg_k & (SSL_kECDHr | SSL_kECDHe)) {
- /*
- * we don't need to look at SSL_kEECDH since no certificate is needed
- * for anon ECDH and for authenticated EECDH, the check for the auth
- * algorithm will set i correctly NOTE: For ECDH-RSA, we need an ECC
- * not an RSA cert but for EECDH-RSA we need an RSA cert. Placing the
- * checks for SSL_kECDH before RSA checks ensures the correct cert is
- * chosen.
- */
- i = SSL_PKEY_ECC;
- } else if (alg_a & SSL_aECDSA) {
- i = SSL_PKEY_ECC;
- } else if (alg_k & SSL_kDHr)
- i = SSL_PKEY_DH_RSA;
- else if (alg_k & SSL_kDHd)
- i = SSL_PKEY_DH_DSA;
- else if (alg_a & SSL_aDSS)
- i = SSL_PKEY_DSA_SIGN;
- else if (alg_a & SSL_aRSA) {
- if (c->pkeys[SSL_PKEY_RSA_ENC].x509 == NULL)
- i = SSL_PKEY_RSA_SIGN;
- else
- i = SSL_PKEY_RSA_ENC;
- } else if (alg_a & SSL_aKRB5) {
- /* VRS something else here? */
- return (NULL);
- } else if (alg_a & SSL_aGOST94)
- i = SSL_PKEY_GOST94;
- else if (alg_a & SSL_aGOST01)
- i = SSL_PKEY_GOST01;
- else { /* if (alg_a & SSL_aNULL) */
-
- SSLerr(SSL_F_SSL_GET_SERVER_SEND_PKEY, ERR_R_INTERNAL_ERROR);
- return (NULL);
- }
+#ifdef OPENSSL_SSL_DEBUG_BROKEN_PROTOCOL
+ /*
+ * Broken protocol test: return last used certificate: which may mismatch
+ * the one expected.
+ */
+ if (c->cert_flags & SSL_CERT_FLAG_BROKEN_PROTOCOL)
+ return c->key;
+#endif
- return c->pkeys + i;
-}
+ i = ssl_get_server_cert_index(s);
-X509 *ssl_get_server_send_cert(const SSL *s)
-{
- CERT_PKEY *cpk;
- cpk = ssl_get_server_send_pkey(s);
- if (!cpk)
+ /* This may or may not be an error. */
+ if (i < 0)
return NULL;
- return cpk->x509;
+
+ /* May be NULL. */
+ return &c->pkeys[i];
}
EVP_PKEY *ssl_get_sign_pkey(SSL *s, const SSL_CIPHER *cipher,
@@ -2388,8 +2553,18 @@ EVP_PKEY *ssl_get_sign_pkey(SSL *s, const SSL_CIPHER *cipher,
alg_a = cipher->algorithm_auth;
c = s->cert;
+#ifdef OPENSSL_SSL_DEBUG_BROKEN_PROTOCOL
+ /*
+ * Broken protocol test: use last key: which may mismatch the one
+ * expected.
+ */
+ if (c->cert_flags & SSL_CERT_FLAG_BROKEN_PROTOCOL)
+ idx = c->key - c->pkeys;
+ else
+#endif
+
if ((alg_a & SSL_aDSS) &&
- (c->pkeys[SSL_PKEY_DSA_SIGN].privatekey != NULL))
+ (c->pkeys[SSL_PKEY_DSA_SIGN].privatekey != NULL))
idx = SSL_PKEY_DSA_SIGN;
else if (alg_a & SSL_aRSA) {
if (c->pkeys[SSL_PKEY_RSA_SIGN].privatekey != NULL)
@@ -2408,6 +2583,28 @@ EVP_PKEY *ssl_get_sign_pkey(SSL *s, const SSL_CIPHER *cipher,
return c->pkeys[idx].privatekey;
}
+#ifndef OPENSSL_NO_TLSEXT
+int ssl_get_server_cert_serverinfo(SSL *s, const unsigned char **serverinfo,
+ size_t *serverinfo_length)
+{
+ CERT *c = NULL;
+ int i = 0;
+ *serverinfo_length = 0;
+
+ c = s->cert;
+ i = ssl_get_server_cert_index(s);
+
+ if (i == -1)
+ return 0;
+ if (c->pkeys[i].serverinfo == NULL)
+ return 0;
+
+ *serverinfo = c->pkeys[i].serverinfo;
+ *serverinfo_length = c->pkeys[i].serverinfo_length;
+ return 1;
+}
+#endif
+
void ssl_update_cache(SSL *s, int mode)
{
int i;
@@ -2439,6 +2636,11 @@ void ssl_update_cache(SSL *s, int mode)
}
}
+const SSL_METHOD *SSL_CTX_get_ssl_method(SSL_CTX *ctx)
+{
+ return ctx->method;
+}
+
const SSL_METHOD *SSL_get_ssl_method(SSL *s)
{
return (s->method);
@@ -2634,6 +2836,12 @@ const char *SSL_get_version(const SSL *s)
return ("SSLv3");
else if (s->version == SSL2_VERSION)
return ("SSLv2");
+ else if (s->version == DTLS1_BAD_VER)
+ return ("DTLSv0.9");
+ else if (s->version == DTLS1_VERSION)
+ return ("DTLSv1");
+ else if (s->version == DTLS1_2_VERSION)
+ return ("DTLSv1.2");
else
return ("unknown");
}
@@ -2784,7 +2992,6 @@ void ssl_clear_cipher_ctx(SSL *s)
#endif
}
-/* Fix this function so that it takes an optional type parameter */
X509 *SSL_get_certificate(const SSL *s)
{
if (s->cert != NULL)
@@ -2793,8 +3000,7 @@ X509 *SSL_get_certificate(const SSL *s)
return (NULL);
}
-/* Fix this function so that it takes an optional type parameter */
-EVP_PKEY *SSL_get_privatekey(SSL *s)
+EVP_PKEY *SSL_get_privatekey(const SSL *s)
{
if (s->cert != NULL)
return (s->cert->key->privatekey);
@@ -2802,6 +3008,22 @@ EVP_PKEY *SSL_get_privatekey(SSL *s)
return (NULL);
}
+X509 *SSL_CTX_get0_certificate(const SSL_CTX *ctx)
+{
+ if (ctx->cert != NULL)
+ return ctx->cert->key->x509;
+ else
+ return NULL;
+}
+
+EVP_PKEY *SSL_CTX_get0_privatekey(const SSL_CTX *ctx)
+{
+ if (ctx->cert != NULL)
+ return ctx->cert->key->privatekey;
+ else
+ return NULL;
+}
+
const SSL_CIPHER *SSL_get_current_cipher(const SSL *s)
{
if ((s->session != NULL) && (s->session->cipher != NULL))
@@ -2933,13 +3155,15 @@ SSL_CTX *SSL_set_SSL_CTX(SSL *ssl, SSL_CTX *ctx)
ctx = ssl->initial_ctx;
#endif
ssl->cert = ssl_cert_dup(ctx->cert);
- if (ocert != NULL) {
- int i;
- /* Copy negotiated digests from original */
- for (i = 0; i < SSL_PKEY_NUM; i++) {
- CERT_PKEY *cpk = ocert->pkeys + i;
- CERT_PKEY *rpk = ssl->cert->pkeys + i;
- rpk->digest = cpk->digest;
+ if (ocert) {
+ /* Preserve any already negotiated parameters */
+ if (ssl->server) {
+ ssl->cert->peer_sigalgs = ocert->peer_sigalgs;
+ ssl->cert->peer_sigalgslen = ocert->peer_sigalgslen;
+ ocert->peer_sigalgs = NULL;
+ ssl->cert->ciphers_raw = ocert->ciphers_raw;
+ ssl->cert->ciphers_rawlen = ocert->ciphers_rawlen;
+ ocert->ciphers_raw = NULL;
}
ssl_cert_free(ocert);
}
@@ -3306,6 +3530,11 @@ int SSL_cache_hit(SSL *s)
return s->hit;
}
+int SSL_is_server(SSL *s)
+{
+ return s->server;
+}
+
#if defined(_WINDLL) && defined(OPENSSL_SYS_WIN16)
# include "../crypto/bio/bss_file.c"
#endif
diff --git a/crypto/openssl/ssl/ssl_locl.h b/crypto/openssl/ssl/ssl_locl.h
index a7f3f8d..6c2c551 100644
--- a/crypto/openssl/ssl/ssl_locl.h
+++ b/crypto/openssl/ssl/ssl_locl.h
@@ -291,13 +291,13 @@
/* RSA key exchange */
# define SSL_kRSA 0x00000001L
/* DH cert, RSA CA cert */
-/* no such ciphersuites supported! */
# define SSL_kDHr 0x00000002L
/* DH cert, DSA CA cert */
-/* no such ciphersuite supported! */
# define SSL_kDHd 0x00000004L
/* tmp DH key no DH cert */
# define SSL_kEDH 0x00000008L
+/* forward-compatible synonym */
+# define SSL_kDHE SSL_kEDH
/* Kerberos5 key exchange */
# define SSL_kKRB5 0x00000010L
/* ECDH cert, RSA CA cert */
@@ -306,6 +306,8 @@
# define SSL_kECDHe 0x00000040L
/* ephemeral ECDH */
# define SSL_kEECDH 0x00000080L
+/* forward-compatible synonym */
+# define SSL_kECDHE SSL_kEECDH
/* PSK */
# define SSL_kPSK 0x00000100L
/* GOST key exchange */
@@ -321,7 +323,6 @@
/* no auth (i.e. use ADH or AECDH) */
# define SSL_aNULL 0x00000004L
/* Fixed DH auth (kDHd or kDHr) */
-/* no such ciphersuites supported! */
# define SSL_aDH 0x00000008L
/* Fixed ECDH auth (kECDHe or kECDHr) */
# define SSL_aECDH 0x00000010L
@@ -465,6 +466,31 @@
(c)->algo_strength)
# define SSL_C_EXPORT_PKEYLENGTH(c) SSL_EXPORT_PKEYLENGTH((c)->algo_strength)
+/* Check if an SSL structure is using DTLS */
+# define SSL_IS_DTLS(s) (s->method->ssl3_enc->enc_flags & SSL_ENC_FLAG_DTLS)
+/* See if we need explicit IV */
+# define SSL_USE_EXPLICIT_IV(s) \
+ (s->method->ssl3_enc->enc_flags & SSL_ENC_FLAG_EXPLICIT_IV)
+/*
+ * See if we use signature algorithms extension and signature algorithm
+ * before signatures.
+ */
+# define SSL_USE_SIGALGS(s) \
+ (s->method->ssl3_enc->enc_flags & SSL_ENC_FLAG_SIGALGS)
+/*
+ * Allow TLS 1.2 ciphersuites: applies to DTLS 1.2 as well as TLS 1.2: may
+ * apply to others in future.
+ */
+# define SSL_USE_TLS1_2_CIPHERS(s) \
+ (s->method->ssl3_enc->enc_flags & SSL_ENC_FLAG_TLS1_2_CIPHERS)
+/*
+ * Determine if a client can use TLS 1.2 ciphersuites: can't rely on method
+ * flags because it may not be set to correct version yet.
+ */
+# define SSL_CLIENT_USE_TLS1_2_CIPHERS(s) \
+ ((SSL_IS_DTLS(s) && s->client_version <= DTLS1_2_VERSION) || \
+ (!SSL_IS_DTLS(s) && s->client_version >= TLS1_2_VERSION))
+
/* Mostly for SSLv3 */
# define SSL_PKEY_RSA_ENC 0
# define SSL_PKEY_RSA_SIGN 1
@@ -505,7 +531,63 @@ typedef struct cert_pkey_st {
EVP_PKEY *privatekey;
/* Digest to use when signing */
const EVP_MD *digest;
+ /* Chain for this certificate */
+ STACK_OF(X509) *chain;
+# ifndef OPENSSL_NO_TLSEXT
+ /*-
+ * serverinfo data for this certificate. The data is in TLS Extension
+ * wire format, specifically it's a series of records like:
+ * uint16_t extension_type; // (RFC 5246, 7.4.1.4, Extension)
+ * uint16_t length;
+ * uint8_t data[length];
+ */
+ unsigned char *serverinfo;
+ size_t serverinfo_length;
+# endif
+ /*
+ * Set if CERT_PKEY can be used with current SSL session: e.g.
+ * appropriate curve, signature algorithms etc. If zero it can't be used
+ * at all.
+ */
+ int valid_flags;
} CERT_PKEY;
+/* Retrieve Suite B flags */
+# define tls1_suiteb(s) (s->cert->cert_flags & SSL_CERT_FLAG_SUITEB_128_LOS)
+/* Uses to check strict mode: suite B modes are always strict */
+# define SSL_CERT_FLAGS_CHECK_TLS_STRICT \
+ (SSL_CERT_FLAG_SUITEB_128_LOS|SSL_CERT_FLAG_TLS_STRICT)
+
+typedef struct {
+ unsigned short ext_type;
+ /*
+ * Per-connection flags relating to this extension type: not used if
+ * part of an SSL_CTX structure.
+ */
+ unsigned short ext_flags;
+ custom_ext_add_cb add_cb;
+ custom_ext_free_cb free_cb;
+ void *add_arg;
+ custom_ext_parse_cb parse_cb;
+ void *parse_arg;
+} custom_ext_method;
+
+/* ext_flags values */
+
+/*
+ * Indicates an extension has been received. Used to check for unsolicited or
+ * duplicate extensions.
+ */
+# define SSL_EXT_FLAG_RECEIVED 0x1
+/*
+ * Indicates an extension has been sent: used to enable sending of
+ * corresponding ServerHello extension.
+ */
+# define SSL_EXT_FLAG_SENT 0x2
+
+typedef struct {
+ custom_ext_method *meths;
+ size_t meths_count;
+} custom_ext_methods;
typedef struct cert_st {
/* Current active set */
@@ -516,14 +598,17 @@ typedef struct cert_st {
*/
CERT_PKEY *key;
/*
- * The following masks are for the key and auth algorithms that are
- * supported by the certs below
+ * For servers the following masks are for the key and auth algorithms
+ * that are supported by the certs below. For clients they are masks of
+ * *disabled* algorithms based on the current session.
*/
int valid;
unsigned long mask_k;
unsigned long mask_a;
unsigned long export_mask_k;
unsigned long export_mask_a;
+ /* Client only */
+ unsigned long mask_ssl;
# ifndef OPENSSL_NO_RSA
RSA *rsa_tmp;
RSA *(*rsa_tmp_cb) (SSL *ssl, int is_export, int keysize);
@@ -536,8 +621,71 @@ typedef struct cert_st {
EC_KEY *ecdh_tmp;
/* Callback for generating ephemeral ECDH keys */
EC_KEY *(*ecdh_tmp_cb) (SSL *ssl, int is_export, int keysize);
+ /* Select ECDH parameters automatically */
+ int ecdh_tmp_auto;
# endif
+ /* Flags related to certificates */
+ unsigned int cert_flags;
CERT_PKEY pkeys[SSL_PKEY_NUM];
+ /*
+ * Certificate types (received or sent) in certificate request message.
+ * On receive this is only set if number of certificate types exceeds
+ * SSL3_CT_NUMBER.
+ */
+ unsigned char *ctypes;
+ size_t ctype_num;
+ /*
+ * signature algorithms peer reports: e.g. supported signature algorithms
+ * extension for server or as part of a certificate request for client.
+ */
+ unsigned char *peer_sigalgs;
+ /* Size of above array */
+ size_t peer_sigalgslen;
+ /*
+ * suppported signature algorithms. When set on a client this is sent in
+ * the client hello as the supported signature algorithms extension. For
+ * servers it represents the signature algorithms we are willing to use.
+ */
+ unsigned char *conf_sigalgs;
+ /* Size of above array */
+ size_t conf_sigalgslen;
+ /*
+ * Client authentication signature algorithms, if not set then uses
+ * conf_sigalgs. On servers these will be the signature algorithms sent
+ * to the client in a cerificate request for TLS 1.2. On a client this
+ * represents the signature algortithms we are willing to use for client
+ * authentication.
+ */
+ unsigned char *client_sigalgs;
+ /* Size of above array */
+ size_t client_sigalgslen;
+ /*
+ * Signature algorithms shared by client and server: cached because these
+ * are used most often.
+ */
+ TLS_SIGALGS *shared_sigalgs;
+ size_t shared_sigalgslen;
+ /*
+ * Certificate setup callback: if set is called whenever a certificate
+ * may be required (client or server). the callback can then examine any
+ * appropriate parameters and setup any certificates required. This
+ * allows advanced applications to select certificates on the fly: for
+ * example based on supported signature algorithms or curves.
+ */
+ int (*cert_cb) (SSL *ssl, void *arg);
+ void *cert_cb_arg;
+ /*
+ * Optional X509_STORE for chain building or certificate validation If
+ * NULL the parent SSL_CTX store is used instead.
+ */
+ X509_STORE *chain_store;
+ X509_STORE *verify_store;
+ /* Raw values of the cipher list from a client */
+ unsigned char *ciphers_raw;
+ size_t ciphers_rawlen;
+ /* Custom extension methods for server and client */
+ custom_ext_methods cli_ext;
+ custom_ext_methods srv_ext;
int references; /* >1 only if SSL_copy_session_id is used */
} CERT;
@@ -563,6 +711,18 @@ typedef struct sess_cert_st {
# endif
int references; /* actually always 1 at the moment */
} SESS_CERT;
+/* Structure containing decoded values of signature algorithms extension */
+struct tls_sigalgs_st {
+ /* NID of hash algorithm */
+ int hash_nid;
+ /* NID of signature algorithm */
+ int sign_nid;
+ /* Combined hash and signature NID */
+ int signandhash_nid;
+ /* Raw values used in extension */
+ unsigned char rsign;
+ unsigned char rhash;
+};
/*
* #define MAC_DEBUG
@@ -596,8 +756,6 @@ typedef struct sess_cert_st {
# define FP_ICC (int (*)(const void *,const void *))
# define ssl_put_cipher_by_char(ssl,ciph,ptr) \
((ssl)->method->put_cipher_by_char((ciph),(ptr)))
-# define ssl_get_cipher_by_char(ssl,ptr) \
- ((ssl)->method->get_cipher_by_char(ptr))
/*
* This is for the SSLv3/TLSv1.0 differences in crypto/hash stuff It is a bit
@@ -622,8 +780,39 @@ typedef struct ssl3_enc_method {
const char *, size_t,
const unsigned char *, size_t,
int use_context);
+ /* Various flags indicating protocol version requirements */
+ unsigned int enc_flags;
+ /* Handshake header length */
+ unsigned int hhlen;
+ /* Set the handshake header */
+ void (*set_handshake_header) (SSL *s, int type, unsigned long len);
+ /* Write out handshake message */
+ int (*do_write) (SSL *s);
} SSL3_ENC_METHOD;
+# define SSL_HM_HEADER_LENGTH(s) s->method->ssl3_enc->hhlen
+# define ssl_handshake_start(s) \
+ (((unsigned char *)s->init_buf->data) + s->method->ssl3_enc->hhlen)
+# define ssl_set_handshake_header(s, htype, len) \
+ s->method->ssl3_enc->set_handshake_header(s, htype, len)
+# define ssl_do_write(s) s->method->ssl3_enc->do_write(s)
+
+/* Values for enc_flags */
+
+/* Uses explicit IV for CBC mode */
+# define SSL_ENC_FLAG_EXPLICIT_IV 0x1
+/* Uses signature algorithms extension */
+# define SSL_ENC_FLAG_SIGALGS 0x2
+/* Uses SHA256 default PRF */
+# define SSL_ENC_FLAG_SHA256_PRF 0x4
+/* Is DTLS */
+# define SSL_ENC_FLAG_DTLS 0x8
+/*
+ * Allow TLS 1.2 ciphersuites: applies to DTLS 1.2 as well as TLS 1.2: may
+ * apply to others in future.
+ */
+# define SSL_ENC_FLAG_TLS1_2_CIPHERS 0x10
+
# ifndef OPENSSL_NO_COMP
/* Used for holding the relevant compression methods loaded into SSL_CTX */
typedef struct ssl3_comp_st {
@@ -653,13 +842,14 @@ OPENSSL_EXTERN SSL_CIPHER ssl3_ciphers[];
SSL_METHOD *ssl_bad_method(int ver);
extern SSL3_ENC_METHOD TLSv1_enc_data;
+extern SSL3_ENC_METHOD TLSv1_1_enc_data;
+extern SSL3_ENC_METHOD TLSv1_2_enc_data;
extern SSL3_ENC_METHOD SSLv3_enc_data;
extern SSL3_ENC_METHOD DTLSv1_enc_data;
-
-# define SSL_IS_DTLS(s) (s->method->version == DTLS1_VERSION)
+extern SSL3_ENC_METHOD DTLSv1_2_enc_data;
# define IMPLEMENT_tls_meth_func(version, func_name, s_accept, s_connect, \
- s_get_meth) \
+ s_get_meth, enc_data) \
const SSL_METHOD *func_name(void) \
{ \
static const SSL_METHOD func_name##_data= { \
@@ -688,7 +878,7 @@ const SSL_METHOD *func_name(void) \
ssl3_get_cipher, \
s_get_meth, \
tls1_default_timeout, \
- &TLSv1_enc_data, \
+ &enc_data, \
ssl_undefined_void_function, \
ssl3_callback_ctrl, \
ssl3_ctx_callback_ctrl, \
@@ -762,7 +952,7 @@ const SSL_METHOD *func_name(void) \
ssl23_get_cipher, \
s_get_meth, \
ssl23_default_timeout, \
- &ssl3_undef_enc_method, \
+ &TLSv1_2_enc_data, \
ssl_undefined_void_function, \
ssl3_callback_ctrl, \
ssl3_ctx_callback_ctrl, \
@@ -807,11 +997,12 @@ const SSL_METHOD *func_name(void) \
return &func_name##_data; \
}
-# define IMPLEMENT_dtls1_meth_func(func_name, s_accept, s_connect, s_get_meth) \
+# define IMPLEMENT_dtls1_meth_func(version, func_name, s_accept, s_connect, \
+ s_get_meth, enc_data) \
const SSL_METHOD *func_name(void) \
{ \
static const SSL_METHOD func_name##_data= { \
- DTLS1_VERSION, \
+ version, \
dtls1_new, \
dtls1_clear, \
dtls1_free, \
@@ -836,7 +1027,7 @@ const SSL_METHOD *func_name(void) \
dtls1_get_cipher, \
s_get_meth, \
dtls1_default_timeout, \
- &DTLSv1_enc_data, \
+ &enc_data, \
ssl_undefined_void_function, \
ssl3_callback_ctrl, \
ssl3_ctx_callback_ctrl, \
@@ -857,7 +1048,9 @@ void ssl_clear_cipher_ctx(SSL *s);
int ssl_clear_bad_session(SSL *s);
CERT *ssl_cert_new(void);
CERT *ssl_cert_dup(CERT *cert);
+void ssl_cert_set_default_md(CERT *cert);
int ssl_cert_inst(CERT **o);
+void ssl_cert_clear_certs(CERT *c);
void ssl_cert_free(CERT *c);
SESS_CERT *ssl_sess_cert_new(void);
void ssl_sess_cert_free(SESS_CERT *sc);
@@ -880,18 +1073,36 @@ int ssl_cipher_list_to_bytes(SSL *s, STACK_OF(SSL_CIPHER) *sk,
STACK_OF(SSL_CIPHER) *ssl_create_cipher_list(const SSL_METHOD *meth,
STACK_OF(SSL_CIPHER) **pref,
STACK_OF(SSL_CIPHER) **sorted,
- const char *rule_str);
+ const char *rule_str, CERT *c);
void ssl_update_cache(SSL *s, int mode);
int ssl_cipher_get_evp(const SSL_SESSION *s, const EVP_CIPHER **enc,
const EVP_MD **md, int *mac_pkey_type,
int *mac_secret_size, SSL_COMP **comp);
int ssl_get_handshake_digest(int i, long *mask, const EVP_MD **md);
+int ssl_cipher_get_cert_index(const SSL_CIPHER *c);
+const SSL_CIPHER *ssl_get_cipher_by_char(SSL *ssl, const unsigned char *ptr);
+int ssl_cert_set0_chain(CERT *c, STACK_OF(X509) *chain);
+int ssl_cert_set1_chain(CERT *c, STACK_OF(X509) *chain);
+int ssl_cert_add0_chain_cert(CERT *c, X509 *x);
+int ssl_cert_add1_chain_cert(CERT *c, X509 *x);
+int ssl_cert_select_current(CERT *c, X509 *x);
+int ssl_cert_set_current(CERT *c, long arg);
+X509 *ssl_cert_get0_next_certificate(CERT *c, int first);
+void ssl_cert_set_cert_cb(CERT *c, int (*cb) (SSL *ssl, void *arg),
+ void *arg);
+
int ssl_verify_cert_chain(SSL *s, STACK_OF(X509) *sk);
+int ssl_add_cert_chain(SSL *s, CERT_PKEY *cpk, unsigned long *l);
+int ssl_build_cert_chain(CERT *c, X509_STORE *chain_store, int flags);
+int ssl_cert_set_cert_store(CERT *c, X509_STORE *store, int chain, int ref);
int ssl_undefined_function(SSL *s);
int ssl_undefined_void_function(void);
int ssl_undefined_const_function(const SSL *s);
CERT_PKEY *ssl_get_server_send_pkey(const SSL *s);
-X509 *ssl_get_server_send_cert(const SSL *);
+# ifndef OPENSSL_NO_TLSEXT
+int ssl_get_server_cert_serverinfo(SSL *s, const unsigned char **serverinfo,
+ size_t *serverinfo_length);
+# endif
EVP_PKEY *ssl_get_sign_pkey(SSL *s, const SSL_CIPHER *c, const EVP_MD **pmd);
int ssl_cert_type(X509 *x, EVP_PKEY *pkey);
void ssl_set_cert_masks(CERT *c, const SSL_CIPHER *cipher);
@@ -962,7 +1173,7 @@ void ssl3_finish_mac(SSL *s, const unsigned char *buf, int len);
int ssl3_enc(SSL *s, int send_data);
int n_ssl3_mac(SSL *ssl, unsigned char *md, int send_data);
void ssl3_free_digest_list(SSL *s);
-unsigned long ssl3_output_cert_chain(SSL *s, X509 *x);
+unsigned long ssl3_output_cert_chain(SSL *s, CERT_PKEY *cpk);
SSL_CIPHER *ssl3_choose_cipher(SSL *ssl, STACK_OF(SSL_CIPHER) *clnt,
STACK_OF(SSL_CIPHER) *srvr);
int ssl3_setup_buffers(SSL *s);
@@ -990,6 +1201,9 @@ void ssl3_record_sequence_update(unsigned char *seq);
int ssl3_do_change_cipher_spec(SSL *ssl);
long ssl3_default_timeout(void);
+void ssl3_set_handshake_header(SSL *s, int htype, unsigned long len);
+int ssl3_handshake_write(SSL *s);
+
int ssl23_num_ciphers(void);
const SSL_CIPHER *ssl23_get_cipher(unsigned int u);
int ssl23_read(SSL *s, void *buf, int len);
@@ -1017,8 +1231,6 @@ int dtls1_write_app_data_bytes(SSL *s, int type, const void *buf, int len);
int dtls1_write_bytes(SSL *s, int type, const void *buf, int len);
int dtls1_send_change_cipher_spec(SSL *s, int a, int b);
-int dtls1_send_finished(SSL *s, int a, int b, const char *sender, int slen);
-unsigned long dtls1_output_cert_chain(SSL *s, X509 *x);
int dtls1_read_failed(SSL *s, int code);
int dtls1_buffer_message(SSL *s, int ccs);
int dtls1_retransmit_message(SSL *s, unsigned short seq,
@@ -1065,9 +1277,6 @@ int ssl3_send_next_proto(SSL *s);
# endif
int dtls1_client_hello(SSL *s);
-int dtls1_send_client_certificate(SSL *s);
-int dtls1_send_client_key_exchange(SSL *s);
-int dtls1_send_client_verify(SSL *s);
/* some server-only functions */
int ssl3_get_client_hello(SSL *s);
@@ -1076,7 +1285,6 @@ int ssl3_send_hello_request(SSL *s);
int ssl3_send_server_key_exchange(SSL *s);
int ssl3_send_certificate_request(SSL *s);
int ssl3_send_server_done(SSL *s);
-int ssl3_check_client_hello(SSL *s);
int ssl3_get_client_certificate(SSL *s);
int ssl3_get_client_key_exchange(SSL *s);
int ssl3_get_cert_verify(SSL *s);
@@ -1084,13 +1292,6 @@ int ssl3_get_cert_verify(SSL *s);
int ssl3_get_next_proto(SSL *s);
# endif
-int dtls1_send_hello_request(SSL *s);
-int dtls1_send_server_hello(SSL *s);
-int dtls1_send_server_certificate(SSL *s);
-int dtls1_send_server_key_exchange(SSL *s);
-int dtls1_send_certificate_request(SSL *s);
-int dtls1_send_server_done(SSL *s);
-
int ssl23_accept(SSL *s);
int ssl23_connect(SSL *s);
int ssl23_read_bytes(SSL *s, int n);
@@ -1115,7 +1316,6 @@ int dtls1_get_record(SSL *s);
int do_dtls1_write(SSL *s, int type, const unsigned char *buf,
unsigned int len, int create_empty_fragement);
int dtls1_dispatch_alert(SSL *s);
-int dtls1_enc(SSL *s, int snd);
int ssl_init_wbio_buffer(SSL *s, int push);
void ssl_free_wbio_buffer(SSL *s);
@@ -1146,22 +1346,33 @@ SSL_COMP *ssl3_comp_find(STACK_OF(SSL_COMP) *sk, int n);
# ifndef OPENSSL_NO_EC
int tls1_ec_curve_id2nid(int curve_id);
int tls1_ec_nid2curve_id(int nid);
+int tls1_check_curve(SSL *s, const unsigned char *p, size_t len);
+int tls1_shared_curve(SSL *s, int nmatch);
+int tls1_set_curves(unsigned char **pext, size_t *pextlen,
+ int *curves, size_t ncurves);
+int tls1_set_curves_list(unsigned char **pext, size_t *pextlen,
+ const char *str);
+# ifndef OPENSSL_NO_ECDH
+int tls1_check_ec_tmp_key(SSL *s, unsigned long id);
+# endif /* OPENSSL_NO_ECDH */
# endif /* OPENSSL_NO_EC */
# ifndef OPENSSL_NO_TLSEXT
+int tls1_shared_list(SSL *s,
+ const unsigned char *l1, size_t l1len,
+ const unsigned char *l2, size_t l2len, int nmatch);
unsigned char *ssl_add_clienthello_tlsext(SSL *s, unsigned char *buf,
- unsigned char *limit);
+ unsigned char *limit, int *al);
unsigned char *ssl_add_serverhello_tlsext(SSL *s, unsigned char *buf,
- unsigned char *limit);
+ unsigned char *limit, int *al);
int ssl_parse_clienthello_tlsext(SSL *s, unsigned char **data,
- unsigned char *d, int n, int *al);
+ unsigned char *d, int n);
+int tls1_set_server_sigalgs(SSL *s);
+int ssl_check_clienthello_tlsext_late(SSL *s);
int ssl_parse_serverhello_tlsext(SSL *s, unsigned char **data,
- unsigned char *d, int n, int *al);
+ unsigned char *d, int n);
int ssl_prepare_clienthello_tlsext(SSL *s);
int ssl_prepare_serverhello_tlsext(SSL *s);
-int ssl_check_clienthello_tlsext_early(SSL *s);
-int ssl_check_clienthello_tlsext_late(SSL *s);
-int ssl_check_serverhello_tlsext(SSL *s);
# ifndef OPENSSL_NO_HEARTBEATS
int tls1_heartbeat(SSL *s);
@@ -1183,6 +1394,12 @@ int tls12_get_sigandhash(unsigned char *p, const EVP_PKEY *pk,
int tls12_get_sigid(const EVP_PKEY *pk);
const EVP_MD *tls12_get_hash(unsigned char hash_alg);
+int tls1_set_sigalgs_list(CERT *c, const char *str, int client);
+int tls1_set_sigalgs(CERT *c, const int *salg, size_t salglen, int client);
+int tls1_check_chain(SSL *s, X509 *x, EVP_PKEY *pk, STACK_OF(X509) *chain,
+ int idx);
+void tls1_set_cert_validity(SSL *s);
+
# endif
EVP_MD_CTX *ssl_replace_hash(EVP_MD_CTX **hash, const EVP_MD *md);
void ssl_clear_hash_ctx(EVP_MD_CTX **hash);
@@ -1195,8 +1412,12 @@ int ssl_add_clienthello_renegotiate_ext(SSL *s, unsigned char *p, int *len,
int ssl_parse_clienthello_renegotiate_ext(SSL *s, unsigned char *d, int len,
int *al);
long ssl_get_algorithm2(SSL *s);
-int tls1_process_sigalgs(SSL *s, const unsigned char *data, int dsize);
-int tls12_get_req_sig_algs(SSL *s, unsigned char *p);
+int tls1_save_sigalgs(SSL *s, const unsigned char *data, int dsize);
+int tls1_process_sigalgs(SSL *s);
+size_t tls12_get_psigalgs(SSL *s, const unsigned char **psigs);
+int tls12_check_peer_sigalg(const EVP_MD **pmd, SSL *s,
+ const unsigned char *sig, EVP_PKEY *pkey);
+void ssl_set_client_disabled(SSL *s);
int ssl_add_clienthello_use_srtp_ext(SSL *s, unsigned char *p, int *len,
int maxlen);
@@ -1234,6 +1455,19 @@ void tls_fips_digest_extra(const EVP_CIPHER_CTX *cipher_ctx,
int srp_verify_server_param(SSL *s, int *al);
+/* t1_ext.c */
+
+void custom_ext_init(custom_ext_methods *meths);
+
+int custom_ext_parse(SSL *s, int server,
+ unsigned int ext_type,
+ const unsigned char *ext_data, size_t ext_size, int *al);
+int custom_ext_add(SSL *s, int server,
+ unsigned char **pret, unsigned char *limit, int *al);
+
+int custom_exts_copy(custom_ext_methods *dst, const custom_ext_methods *src);
+void custom_exts_free(custom_ext_methods *exts);
+
# else
# define ssl_init_wbio_buffer SSL_test_functions()->p_ssl_init_wbio_buffer
diff --git a/crypto/openssl/ssl/ssl_rsa.c b/crypto/openssl/ssl/ssl_rsa.c
index daf15dd..b1b2318 100644
--- a/crypto/openssl/ssl/ssl_rsa.c
+++ b/crypto/openssl/ssl/ssl_rsa.c
@@ -171,8 +171,22 @@ int SSL_use_RSAPrivateKey(SSL *ssl, RSA *rsa)
static int ssl_set_pkey(CERT *c, EVP_PKEY *pkey)
{
int i;
-
- i = ssl_cert_type(NULL, pkey);
+ /*
+ * Special case for DH: check two DH certificate types for a match. This
+ * means for DH certificates we must set the certificate first.
+ */
+ if (pkey->type == EVP_PKEY_DH) {
+ X509 *x;
+ i = -1;
+ x = c->pkeys[SSL_PKEY_DH_RSA].x509;
+ if (x && X509_check_private_key(x, pkey))
+ i = SSL_PKEY_DH_RSA;
+ x = c->pkeys[SSL_PKEY_DH_DSA].x509;
+ if (i == -1 && x && X509_check_private_key(x, pkey))
+ i = SSL_PKEY_DH_DSA;
+ ERR_clear_error();
+ } else
+ i = ssl_cert_type(NULL, pkey);
if (i < 0) {
SSLerr(SSL_F_SSL_SET_PKEY, SSL_R_UNKNOWN_CERTIFICATE_TYPE);
return (0);
@@ -690,16 +704,13 @@ int SSL_CTX_use_certificate_chain_file(SSL_CTX *ctx, const char *file)
int r;
unsigned long err;
- if (ctx->extra_certs != NULL) {
- sk_X509_pop_free(ctx->extra_certs, X509_free);
- ctx->extra_certs = NULL;
- }
+ SSL_CTX_clear_chain_certs(ctx);
while ((ca = PEM_read_bio_X509(in, NULL,
ctx->default_passwd_callback,
ctx->default_passwd_callback_userdata))
!= NULL) {
- r = SSL_CTX_add_extra_chain_cert(ctx, ca);
+ r = SSL_CTX_add0_chain_cert(ctx, ca);
if (!r) {
X509_free(ca);
ret = 0;
@@ -728,3 +739,270 @@ int SSL_CTX_use_certificate_chain_file(SSL_CTX *ctx, const char *file)
return (ret);
}
#endif
+
+#ifndef OPENSSL_NO_TLSEXT
+static int serverinfo_find_extension(const unsigned char *serverinfo,
+ size_t serverinfo_length,
+ unsigned int extension_type,
+ const unsigned char **extension_data,
+ size_t *extension_length)
+{
+ *extension_data = NULL;
+ *extension_length = 0;
+ if (serverinfo == NULL || serverinfo_length == 0)
+ return 0;
+ for (;;) {
+ unsigned int type = 0;
+ size_t len = 0;
+
+ /* end of serverinfo */
+ if (serverinfo_length == 0)
+ return -1; /* Extension not found */
+
+ /* read 2-byte type field */
+ if (serverinfo_length < 2)
+ return 0; /* Error */
+ type = (serverinfo[0] << 8) + serverinfo[1];
+ serverinfo += 2;
+ serverinfo_length -= 2;
+
+ /* read 2-byte len field */
+ if (serverinfo_length < 2)
+ return 0; /* Error */
+ len = (serverinfo[0] << 8) + serverinfo[1];
+ serverinfo += 2;
+ serverinfo_length -= 2;
+
+ if (len > serverinfo_length)
+ return 0; /* Error */
+
+ if (type == extension_type) {
+ *extension_data = serverinfo;
+ *extension_length = len;
+ return 1; /* Success */
+ }
+
+ serverinfo += len;
+ serverinfo_length -= len;
+ }
+ return 0; /* Error */
+}
+
+static int serverinfo_srv_parse_cb(SSL *s, unsigned int ext_type,
+ const unsigned char *in,
+ size_t inlen, int *al, void *arg)
+{
+
+ if (inlen != 0) {
+ *al = SSL_AD_DECODE_ERROR;
+ return 0;
+ }
+
+ return 1;
+}
+
+static int serverinfo_srv_add_cb(SSL *s, unsigned int ext_type,
+ const unsigned char **out, size_t *outlen,
+ int *al, void *arg)
+{
+ const unsigned char *serverinfo = NULL;
+ size_t serverinfo_length = 0;
+
+ /* Is there serverinfo data for the chosen server cert? */
+ if ((ssl_get_server_cert_serverinfo(s, &serverinfo,
+ &serverinfo_length)) != 0) {
+ /* Find the relevant extension from the serverinfo */
+ int retval = serverinfo_find_extension(serverinfo, serverinfo_length,
+ ext_type, out, outlen);
+ if (retval == 0)
+ return 0; /* Error */
+ if (retval == -1)
+ return -1; /* No extension found, don't send extension */
+ return 1; /* Send extension */
+ }
+ return -1; /* No serverinfo data found, don't send
+ * extension */
+}
+
+/*
+ * With a NULL context, this function just checks that the serverinfo data
+ * parses correctly. With a non-NULL context, it registers callbacks for
+ * the included extensions.
+ */
+static int serverinfo_process_buffer(const unsigned char *serverinfo,
+ size_t serverinfo_length, SSL_CTX *ctx)
+{
+ if (serverinfo == NULL || serverinfo_length == 0)
+ return 0;
+ for (;;) {
+ unsigned int ext_type = 0;
+ size_t len = 0;
+
+ /* end of serverinfo */
+ if (serverinfo_length == 0)
+ return 1;
+
+ /* read 2-byte type field */
+ if (serverinfo_length < 2)
+ return 0;
+ /* FIXME: check for types we understand explicitly? */
+
+ /* Register callbacks for extensions */
+ ext_type = (serverinfo[0] << 8) + serverinfo[1];
+ if (ctx && !SSL_CTX_add_server_custom_ext(ctx, ext_type,
+ serverinfo_srv_add_cb,
+ NULL, NULL,
+ serverinfo_srv_parse_cb,
+ NULL))
+ return 0;
+
+ serverinfo += 2;
+ serverinfo_length -= 2;
+
+ /* read 2-byte len field */
+ if (serverinfo_length < 2)
+ return 0;
+ len = (serverinfo[0] << 8) + serverinfo[1];
+ serverinfo += 2;
+ serverinfo_length -= 2;
+
+ if (len > serverinfo_length)
+ return 0;
+
+ serverinfo += len;
+ serverinfo_length -= len;
+ }
+}
+
+int SSL_CTX_use_serverinfo(SSL_CTX *ctx, const unsigned char *serverinfo,
+ size_t serverinfo_length)
+{
+ if (ctx == NULL || serverinfo == NULL || serverinfo_length == 0) {
+ SSLerr(SSL_F_SSL_CTX_USE_SERVERINFO, ERR_R_PASSED_NULL_PARAMETER);
+ return 0;
+ }
+ if (!serverinfo_process_buffer(serverinfo, serverinfo_length, NULL)) {
+ SSLerr(SSL_F_SSL_CTX_USE_SERVERINFO, SSL_R_INVALID_SERVERINFO_DATA);
+ return 0;
+ }
+ if (!ssl_cert_inst(&ctx->cert)) {
+ SSLerr(SSL_F_SSL_CTX_USE_SERVERINFO, ERR_R_MALLOC_FAILURE);
+ return 0;
+ }
+ if (ctx->cert->key == NULL) {
+ SSLerr(SSL_F_SSL_CTX_USE_SERVERINFO, ERR_R_INTERNAL_ERROR);
+ return 0;
+ }
+ ctx->cert->key->serverinfo = OPENSSL_realloc(ctx->cert->key->serverinfo,
+ serverinfo_length);
+ if (ctx->cert->key->serverinfo == NULL) {
+ SSLerr(SSL_F_SSL_CTX_USE_SERVERINFO, ERR_R_MALLOC_FAILURE);
+ return 0;
+ }
+ memcpy(ctx->cert->key->serverinfo, serverinfo, serverinfo_length);
+ ctx->cert->key->serverinfo_length = serverinfo_length;
+
+ /*
+ * Now that the serverinfo is validated and stored, go ahead and
+ * register callbacks.
+ */
+ if (!serverinfo_process_buffer(serverinfo, serverinfo_length, ctx)) {
+ SSLerr(SSL_F_SSL_CTX_USE_SERVERINFO, SSL_R_INVALID_SERVERINFO_DATA);
+ return 0;
+ }
+ return 1;
+}
+
+# ifndef OPENSSL_NO_STDIO
+int SSL_CTX_use_serverinfo_file(SSL_CTX *ctx, const char *file)
+{
+ unsigned char *serverinfo = NULL;
+ size_t serverinfo_length = 0;
+ unsigned char *extension = 0;
+ long extension_length = 0;
+ char *name = NULL;
+ char *header = NULL;
+ char namePrefix[] = "SERVERINFO FOR ";
+ int ret = 0;
+ BIO *bin = NULL;
+ size_t num_extensions = 0;
+
+ if (ctx == NULL || file == NULL) {
+ SSLerr(SSL_F_SSL_CTX_USE_SERVERINFO_FILE,
+ ERR_R_PASSED_NULL_PARAMETER);
+ goto end;
+ }
+
+ bin = BIO_new(BIO_s_file_internal());
+ if (bin == NULL) {
+ SSLerr(SSL_F_SSL_CTX_USE_SERVERINFO_FILE, ERR_R_BUF_LIB);
+ goto end;
+ }
+ if (BIO_read_filename(bin, file) <= 0) {
+ SSLerr(SSL_F_SSL_CTX_USE_SERVERINFO_FILE, ERR_R_SYS_LIB);
+ goto end;
+ }
+
+ for (num_extensions = 0;; num_extensions++) {
+ if (PEM_read_bio(bin, &name, &header, &extension, &extension_length)
+ == 0) {
+ /*
+ * There must be at least one extension in this file
+ */
+ if (num_extensions == 0) {
+ SSLerr(SSL_F_SSL_CTX_USE_SERVERINFO_FILE,
+ SSL_R_NO_PEM_EXTENSIONS);
+ goto end;
+ } else /* End of file, we're done */
+ break;
+ }
+ /* Check that PEM name starts with "BEGIN SERVERINFO FOR " */
+ if (strlen(name) < strlen(namePrefix)) {
+ SSLerr(SSL_F_SSL_CTX_USE_SERVERINFO_FILE,
+ SSL_R_PEM_NAME_TOO_SHORT);
+ goto end;
+ }
+ if (strncmp(name, namePrefix, strlen(namePrefix)) != 0) {
+ SSLerr(SSL_F_SSL_CTX_USE_SERVERINFO_FILE,
+ SSL_R_PEM_NAME_BAD_PREFIX);
+ goto end;
+ }
+ /*
+ * Check that the decoded PEM data is plausible (valid length field)
+ */
+ if (extension_length < 4
+ || (extension[2] << 8) + extension[3] != extension_length - 4) {
+ SSLerr(SSL_F_SSL_CTX_USE_SERVERINFO_FILE, SSL_R_BAD_DATA);
+ goto end;
+ }
+ /* Append the decoded extension to the serverinfo buffer */
+ serverinfo =
+ OPENSSL_realloc(serverinfo, serverinfo_length + extension_length);
+ if (serverinfo == NULL) {
+ SSLerr(SSL_F_SSL_CTX_USE_SERVERINFO_FILE, ERR_R_MALLOC_FAILURE);
+ goto end;
+ }
+ memcpy(serverinfo + serverinfo_length, extension, extension_length);
+ serverinfo_length += extension_length;
+
+ OPENSSL_free(name);
+ name = NULL;
+ OPENSSL_free(header);
+ header = NULL;
+ OPENSSL_free(extension);
+ extension = NULL;
+ }
+
+ ret = SSL_CTX_use_serverinfo(ctx, serverinfo, serverinfo_length);
+ end:
+ /* SSL_CTX_use_serverinfo makes a local copy of the serverinfo. */
+ OPENSSL_free(name);
+ OPENSSL_free(header);
+ OPENSSL_free(extension);
+ OPENSSL_free(serverinfo);
+ if (bin != NULL)
+ BIO_free(bin);
+ return ret;
+}
+# endif /* OPENSSL_NO_STDIO */
+#endif /* OPENSSL_NO_TLSEXT */
diff --git a/crypto/openssl/ssl/ssl_sess.c b/crypto/openssl/ssl/ssl_sess.c
index 1ad9dc7..07e7379 100644
--- a/crypto/openssl/ssl/ssl_sess.c
+++ b/crypto/openssl/ssl/ssl_sess.c
@@ -444,6 +444,9 @@ int ssl_get_new_session(SSL *s, int session)
} else if (s->version == DTLS1_VERSION) {
ss->ssl_version = DTLS1_VERSION;
ss->session_id_length = SSL3_SSL_SESSION_ID_LENGTH;
+ } else if (s->version == DTLS1_2_VERSION) {
+ ss->ssl_version = DTLS1_2_VERSION;
+ ss->session_id_length = SSL3_SSL_SESSION_ID_LENGTH;
} else {
SSLerr(SSL_F_SSL_GET_NEW_SESSION, SSL_R_UNSUPPORTED_SSL_VERSION);
SSL_SESSION_free(ss);
@@ -519,38 +522,6 @@ int ssl_get_new_session(SSL *s, int session)
return 0;
}
}
-# ifndef OPENSSL_NO_EC
- if (s->tlsext_ecpointformatlist) {
- if (ss->tlsext_ecpointformatlist != NULL)
- OPENSSL_free(ss->tlsext_ecpointformatlist);
- if ((ss->tlsext_ecpointformatlist =
- OPENSSL_malloc(s->tlsext_ecpointformatlist_length)) ==
- NULL) {
- SSLerr(SSL_F_SSL_GET_NEW_SESSION, ERR_R_MALLOC_FAILURE);
- SSL_SESSION_free(ss);
- return 0;
- }
- ss->tlsext_ecpointformatlist_length =
- s->tlsext_ecpointformatlist_length;
- memcpy(ss->tlsext_ecpointformatlist, s->tlsext_ecpointformatlist,
- s->tlsext_ecpointformatlist_length);
- }
- if (s->tlsext_ellipticcurvelist) {
- if (ss->tlsext_ellipticcurvelist != NULL)
- OPENSSL_free(ss->tlsext_ellipticcurvelist);
- if ((ss->tlsext_ellipticcurvelist =
- OPENSSL_malloc(s->tlsext_ellipticcurvelist_length)) ==
- NULL) {
- SSLerr(SSL_F_SSL_GET_NEW_SESSION, ERR_R_MALLOC_FAILURE);
- SSL_SESSION_free(ss);
- return 0;
- }
- ss->tlsext_ellipticcurvelist_length =
- s->tlsext_ellipticcurvelist_length;
- memcpy(ss->tlsext_ellipticcurvelist, s->tlsext_ellipticcurvelist,
- s->tlsext_ellipticcurvelist_length);
- }
-# endif
#endif
} else {
ss->session_id_length = 0;
diff --git a/crypto/openssl/ssl/ssl_txt.c b/crypto/openssl/ssl/ssl_txt.c
index bd67dc7..45308d8 100644
--- a/crypto/openssl/ssl/ssl_txt.c
+++ b/crypto/openssl/ssl/ssl_txt.c
@@ -124,6 +124,8 @@ int SSL_SESSION_print(BIO *bp, const SSL_SESSION *x)
s = "TLSv1";
else if (x->ssl_version == DTLS1_VERSION)
s = "DTLSv1";
+ else if (x->ssl_version == DTLS1_2_VERSION)
+ s = "DTLSv1.2";
else if (x->ssl_version == DTLS1_BAD_VER)
s = "DTLSv1-bad";
else
diff --git a/crypto/openssl/ssl/ssltest.c b/crypto/openssl/ssl/ssltest.c
index 6a0c293..6737adf 100644
--- a/crypto/openssl/ssl/ssltest.c
+++ b/crypto/openssl/ssl/ssltest.c
@@ -298,6 +298,362 @@ static int MS_CALLBACK ssl_srp_server_param_cb(SSL *s, int *ad, void *arg)
static BIO *bio_err = NULL;
static BIO *bio_stdout = NULL;
+static const char *alpn_client;
+static const char *alpn_server;
+static const char *alpn_expected;
+static unsigned char *alpn_selected;
+
+/*-
+ * next_protos_parse parses a comma separated list of strings into a string
+ * in a format suitable for passing to SSL_CTX_set_next_protos_advertised.
+ * outlen: (output) set to the length of the resulting buffer on success.
+ * err: (maybe NULL) on failure, an error message line is written to this BIO.
+ * in: a NUL terminated string like "abc,def,ghi"
+ *
+ * returns: a malloced buffer or NULL on failure.
+ */
+static unsigned char *next_protos_parse(unsigned short *outlen,
+ const char *in)
+{
+ size_t len;
+ unsigned char *out;
+ size_t i, start = 0;
+
+ len = strlen(in);
+ if (len >= 65535)
+ return NULL;
+
+ out = OPENSSL_malloc(strlen(in) + 1);
+ if (!out)
+ return NULL;
+
+ for (i = 0; i <= len; ++i) {
+ if (i == len || in[i] == ',') {
+ if (i - start > 255) {
+ OPENSSL_free(out);
+ return NULL;
+ }
+ out[start] = i - start;
+ start = i + 1;
+ } else
+ out[i + 1] = in[i];
+ }
+
+ *outlen = len + 1;
+ return out;
+}
+
+static int cb_server_alpn(SSL *s, const unsigned char **out,
+ unsigned char *outlen, const unsigned char *in,
+ unsigned int inlen, void *arg)
+{
+ unsigned char *protos;
+ unsigned short protos_len;
+
+ protos = next_protos_parse(&protos_len, alpn_server);
+ if (protos == NULL) {
+ fprintf(stderr, "failed to parser ALPN server protocol string: %s\n",
+ alpn_server);
+ abort();
+ }
+
+ if (SSL_select_next_proto
+ ((unsigned char **)out, outlen, protos, protos_len, in,
+ inlen) != OPENSSL_NPN_NEGOTIATED) {
+ OPENSSL_free(protos);
+ return SSL_TLSEXT_ERR_NOACK;
+ }
+
+ /*
+ * Make a copy of the selected protocol which will be freed in
+ * verify_alpn.
+ */
+ alpn_selected = OPENSSL_malloc(*outlen);
+ memcpy(alpn_selected, *out, *outlen);
+ *out = alpn_selected;
+
+ OPENSSL_free(protos);
+ return SSL_TLSEXT_ERR_OK;
+}
+
+static int verify_alpn(SSL *client, SSL *server)
+{
+ const unsigned char *client_proto, *server_proto;
+ unsigned int client_proto_len = 0, server_proto_len = 0;
+ SSL_get0_alpn_selected(client, &client_proto, &client_proto_len);
+ SSL_get0_alpn_selected(server, &server_proto, &server_proto_len);
+
+ if (alpn_selected != NULL) {
+ OPENSSL_free(alpn_selected);
+ alpn_selected = NULL;
+ }
+
+ if (client_proto_len != server_proto_len ||
+ memcmp(client_proto, server_proto, client_proto_len) != 0) {
+ BIO_printf(bio_stdout, "ALPN selected protocols differ!\n");
+ goto err;
+ }
+
+ if (client_proto_len > 0 && alpn_expected == NULL) {
+ BIO_printf(bio_stdout, "ALPN unexpectedly negotiated\n");
+ goto err;
+ }
+
+ if (alpn_expected != NULL &&
+ (client_proto_len != strlen(alpn_expected) ||
+ memcmp(client_proto, alpn_expected, client_proto_len) != 0)) {
+ BIO_printf(bio_stdout,
+ "ALPN selected protocols not equal to expected protocol: %s\n",
+ alpn_expected);
+ goto err;
+ }
+
+ return 0;
+
+ err:
+ BIO_printf(bio_stdout, "ALPN results: client: '");
+ BIO_write(bio_stdout, client_proto, client_proto_len);
+ BIO_printf(bio_stdout, "', server: '");
+ BIO_write(bio_stdout, server_proto, server_proto_len);
+ BIO_printf(bio_stdout, "'\n");
+ BIO_printf(bio_stdout, "ALPN configured: client: '%s', server: '%s'\n",
+ alpn_client, alpn_server);
+ return -1;
+}
+
+#define SCT_EXT_TYPE 18
+
+/*
+ * WARNING : below extension types are *NOT* IETF assigned, and could
+ * conflict if these types are reassigned and handled specially by OpenSSL
+ * in the future
+ */
+#define TACK_EXT_TYPE 62208
+#define CUSTOM_EXT_TYPE_0 1000
+#define CUSTOM_EXT_TYPE_1 1001
+#define CUSTOM_EXT_TYPE_2 1002
+#define CUSTOM_EXT_TYPE_3 1003
+
+const char custom_ext_cli_string[] = "abc";
+const char custom_ext_srv_string[] = "defg";
+
+/* These set from cmdline */
+char *serverinfo_file = NULL;
+int serverinfo_sct = 0;
+int serverinfo_tack = 0;
+
+/* These set based on extension callbacks */
+int serverinfo_sct_seen = 0;
+int serverinfo_tack_seen = 0;
+int serverinfo_other_seen = 0;
+
+/* This set from cmdline */
+int custom_ext = 0;
+
+/* This set based on extension callbacks */
+int custom_ext_error = 0;
+
+static int serverinfo_cli_parse_cb(SSL *s, unsigned int ext_type,
+ const unsigned char *in, size_t inlen,
+ int *al, void *arg)
+{
+ if (ext_type == SCT_EXT_TYPE)
+ serverinfo_sct_seen++;
+ else if (ext_type == TACK_EXT_TYPE)
+ serverinfo_tack_seen++;
+ else
+ serverinfo_other_seen++;
+ return 1;
+}
+
+static int verify_serverinfo()
+{
+ if (serverinfo_sct != serverinfo_sct_seen)
+ return -1;
+ if (serverinfo_tack != serverinfo_tack_seen)
+ return -1;
+ if (serverinfo_other_seen)
+ return -1;
+ return 0;
+}
+
+/*-
+ * Four test cases for custom extensions:
+ * 0 - no ClientHello extension or ServerHello response
+ * 1 - ClientHello with "abc", no response
+ * 2 - ClientHello with "abc", empty response
+ * 3 - ClientHello with "abc", "defg" response
+ */
+
+static int custom_ext_0_cli_add_cb(SSL *s, unsigned int ext_type,
+ const unsigned char **out,
+ size_t *outlen, int *al, void *arg)
+{
+ if (ext_type != CUSTOM_EXT_TYPE_0)
+ custom_ext_error = 1;
+ return 0; /* Don't send an extension */
+}
+
+static int custom_ext_0_cli_parse_cb(SSL *s, unsigned int ext_type,
+ const unsigned char *in,
+ size_t inlen, int *al, void *arg)
+{
+ return 1;
+}
+
+static int custom_ext_1_cli_add_cb(SSL *s, unsigned int ext_type,
+ const unsigned char **out,
+ size_t *outlen, int *al, void *arg)
+{
+ if (ext_type != CUSTOM_EXT_TYPE_1)
+ custom_ext_error = 1;
+ *out = (const unsigned char *)custom_ext_cli_string;
+ *outlen = strlen(custom_ext_cli_string);
+ return 1; /* Send "abc" */
+}
+
+static int custom_ext_1_cli_parse_cb(SSL *s, unsigned int ext_type,
+ const unsigned char *in,
+ size_t inlen, int *al, void *arg)
+{
+ return 1;
+}
+
+static int custom_ext_2_cli_add_cb(SSL *s, unsigned int ext_type,
+ const unsigned char **out,
+ size_t *outlen, int *al, void *arg)
+{
+ if (ext_type != CUSTOM_EXT_TYPE_2)
+ custom_ext_error = 1;
+ *out = (const unsigned char *)custom_ext_cli_string;
+ *outlen = strlen(custom_ext_cli_string);
+ return 1; /* Send "abc" */
+}
+
+static int custom_ext_2_cli_parse_cb(SSL *s, unsigned int ext_type,
+ const unsigned char *in,
+ size_t inlen, int *al, void *arg)
+{
+ if (ext_type != CUSTOM_EXT_TYPE_2)
+ custom_ext_error = 1;
+ if (inlen != 0)
+ custom_ext_error = 1; /* Should be empty response */
+ return 1;
+}
+
+static int custom_ext_3_cli_add_cb(SSL *s, unsigned int ext_type,
+ const unsigned char **out,
+ size_t *outlen, int *al, void *arg)
+{
+ if (ext_type != CUSTOM_EXT_TYPE_3)
+ custom_ext_error = 1;
+ *out = (const unsigned char *)custom_ext_cli_string;
+ *outlen = strlen(custom_ext_cli_string);
+ return 1; /* Send "abc" */
+}
+
+static int custom_ext_3_cli_parse_cb(SSL *s, unsigned int ext_type,
+ const unsigned char *in,
+ size_t inlen, int *al, void *arg)
+{
+ if (ext_type != CUSTOM_EXT_TYPE_3)
+ custom_ext_error = 1;
+ if (inlen != strlen(custom_ext_srv_string))
+ custom_ext_error = 1;
+ if (memcmp(custom_ext_srv_string, in, inlen) != 0)
+ custom_ext_error = 1; /* Check for "defg" */
+ return 1;
+}
+
+/*
+ * custom_ext_0_cli_add_cb returns 0 - the server won't receive a callback
+ * for this extension
+ */
+static int custom_ext_0_srv_parse_cb(SSL *s, unsigned int ext_type,
+ const unsigned char *in,
+ size_t inlen, int *al, void *arg)
+{
+ custom_ext_error = 1;
+ return 1;
+}
+
+/* 'add' callbacks are only called if the 'parse' callback is called */
+static int custom_ext_0_srv_add_cb(SSL *s, unsigned int ext_type,
+ const unsigned char **out,
+ size_t *outlen, int *al, void *arg)
+{
+ /* Error: should not have been called */
+ custom_ext_error = 1;
+ return 0; /* Don't send an extension */
+}
+
+static int custom_ext_1_srv_parse_cb(SSL *s, unsigned int ext_type,
+ const unsigned char *in,
+ size_t inlen, int *al, void *arg)
+{
+ if (ext_type != CUSTOM_EXT_TYPE_1)
+ custom_ext_error = 1;
+ /* Check for "abc" */
+ if (inlen != strlen(custom_ext_cli_string))
+ custom_ext_error = 1;
+ if (memcmp(in, custom_ext_cli_string, inlen) != 0)
+ custom_ext_error = 1;
+ return 1;
+}
+
+static int custom_ext_1_srv_add_cb(SSL *s, unsigned int ext_type,
+ const unsigned char **out,
+ size_t *outlen, int *al, void *arg)
+{
+ return 0; /* Don't send an extension */
+}
+
+static int custom_ext_2_srv_parse_cb(SSL *s, unsigned int ext_type,
+ const unsigned char *in,
+ size_t inlen, int *al, void *arg)
+{
+ if (ext_type != CUSTOM_EXT_TYPE_2)
+ custom_ext_error = 1;
+ /* Check for "abc" */
+ if (inlen != strlen(custom_ext_cli_string))
+ custom_ext_error = 1;
+ if (memcmp(in, custom_ext_cli_string, inlen) != 0)
+ custom_ext_error = 1;
+ return 1;
+}
+
+static int custom_ext_2_srv_add_cb(SSL *s, unsigned int ext_type,
+ const unsigned char **out,
+ size_t *outlen, int *al, void *arg)
+{
+ *out = NULL;
+ *outlen = 0;
+ return 1; /* Send empty extension */
+}
+
+static int custom_ext_3_srv_parse_cb(SSL *s, unsigned int ext_type,
+ const unsigned char *in,
+ size_t inlen, int *al, void *arg)
+{
+ if (ext_type != CUSTOM_EXT_TYPE_3)
+ custom_ext_error = 1;
+ /* Check for "abc" */
+ if (inlen != strlen(custom_ext_cli_string))
+ custom_ext_error = 1;
+ if (memcmp(in, custom_ext_cli_string, inlen) != 0)
+ custom_ext_error = 1;
+ return 1;
+}
+
+static int custom_ext_3_srv_add_cb(SSL *s, unsigned int ext_type,
+ const unsigned char **out,
+ size_t *outlen, int *al, void *arg)
+{
+ *out = (const unsigned char *)custom_ext_srv_string;
+ *outlen = strlen(custom_ext_srv_string);
+ return 1; /* Send "defg" */
+}
+
static char *cipher = NULL;
static int verbose = 0;
static int debug = 0;
@@ -327,7 +683,7 @@ static void sv_usage(void)
fprintf(stderr, " -proxy - allow proxy certificates\n");
fprintf(stderr, " -proxy_auth <val> - set proxy policy rights\n");
fprintf(stderr,
- " -proxy_cond <val> - experssion to test proxy policy rights\n");
+ " -proxy_cond <val> - expression to test proxy policy rights\n");
fprintf(stderr, " -v - more output\n");
fprintf(stderr, " -d - debug output\n");
fprintf(stderr, " -reuse - use session-id reuse\n");
@@ -362,6 +718,10 @@ static void sv_usage(void)
#ifndef OPENSSL_NO_TLS1
fprintf(stderr, " -tls1 - use TLSv1\n");
#endif
+#ifndef OPENSSL_NO_DTLS
+ fprintf(stderr, " -dtls1 - use DTLSv1\n");
+ fprintf(stderr, " -dtls12 - use DTLSv1.2\n");
+#endif
fprintf(stderr, " -CApath arg - PEM format directory of CA's\n");
fprintf(stderr, " -CAfile arg - PEM format file of CA's\n");
fprintf(stderr, " -cert arg - Server certificate file\n");
@@ -387,6 +747,16 @@ static void sv_usage(void)
" -test_cipherlist - Verifies the order of the ssl cipher lists.\n"
" When this option is requested, the cipherlist\n"
" tests are run instead of handshake tests.\n");
+ fprintf(stderr, " -serverinfo_file file - have server use this file\n");
+ fprintf(stderr, " -serverinfo_sct - have client offer and expect SCT\n");
+ fprintf(stderr,
+ " -serverinfo_tack - have client offer and expect TACK\n");
+ fprintf(stderr,
+ " -custom_ext - try various custom extension callbacks\n");
+ fprintf(stderr, " -alpn_client <string> - have client side offer ALPN\n");
+ fprintf(stderr, " -alpn_server <string> - have server side offer ALPN\n");
+ fprintf(stderr,
+ " -alpn_expected <string> - the ALPN protocol that should be negotiated\n");
}
static void print_details(SSL *c_ssl, const char *prefix)
@@ -513,7 +883,7 @@ int main(int argc, char *argv[])
int badop = 0;
int bio_pair = 0;
int force = 0;
- int tls1 = 0, ssl2 = 0, ssl3 = 0, ret = 1;
+ int dtls1 = 0, dtls12 = 0, tls1 = 0, ssl2 = 0, ssl3 = 0, ret = 1;
int client_auth = 0;
int server_auth = 0, i;
struct app_verify_arg app_verify_arg =
@@ -549,8 +919,8 @@ int main(int argc, char *argv[])
int no_psk = 0;
int print_time = 0;
clock_t s_time = 0, c_time = 0;
- int comp = 0;
#ifndef OPENSSL_NO_COMP
+ int comp = 0;
COMP_METHOD *cm = NULL;
STACK_OF(SSL_COMP) *ssl_comp_methods = NULL;
#endif
@@ -592,7 +962,7 @@ int main(int argc, char *argv[])
fips_mode = 1;
#else
fprintf(stderr,
- "not compiled with FIPS support, so exitting without running.\n");
+ "not compiled with FIPS support, so exiting without running.\n");
EXIT(0);
#endif
} else if (strcmp(*argv, "-server_auth") == 0)
@@ -673,6 +1043,16 @@ int main(int argc, char *argv[])
no_protocol = 1;
#endif
ssl3 = 1;
+ } else if (strcmp(*argv, "-dtls1") == 0) {
+#ifdef OPENSSL_NO_DTLS
+ no_protocol = 1;
+#endif
+ dtls1 = 1;
+ } else if (strcmp(*argv, "-dtls12") == 0) {
+#ifdef OPENSSL_NO_DTLS
+ no_protocol = 1;
+#endif
+ dtls12 = 1;
} else if (strncmp(*argv, "-num", 4) == 0) {
if (--argc < 1)
goto bad;
@@ -732,11 +1112,15 @@ int main(int argc, char *argv[])
force = 1;
} else if (strcmp(*argv, "-time") == 0) {
print_time = 1;
- } else if (strcmp(*argv, "-zlib") == 0) {
+ }
+#ifndef OPENSSL_NO_COMP
+ else if (strcmp(*argv, "-zlib") == 0) {
comp = COMP_ZLIB;
} else if (strcmp(*argv, "-rle") == 0) {
comp = COMP_RLE;
- } else if (strcmp(*argv, "-named_curve") == 0) {
+ }
+#endif
+ else if (strcmp(*argv, "-named_curve") == 0) {
if (--argc < 1)
goto bad;
#ifndef OPENSSL_NO_ECDH
@@ -752,6 +1136,28 @@ int main(int argc, char *argv[])
app_verify_arg.allow_proxy_certs = 1;
} else if (strcmp(*argv, "-test_cipherlist") == 0) {
test_cipherlist = 1;
+ } else if (strcmp(*argv, "-serverinfo_sct") == 0) {
+ serverinfo_sct = 1;
+ } else if (strcmp(*argv, "-serverinfo_tack") == 0) {
+ serverinfo_tack = 1;
+ } else if (strcmp(*argv, "-serverinfo_file") == 0) {
+ if (--argc < 1)
+ goto bad;
+ serverinfo_file = *(++argv);
+ } else if (strcmp(*argv, "-custom_ext") == 0) {
+ custom_ext = 1;
+ } else if (strcmp(*argv, "-alpn_client") == 0) {
+ if (--argc < 1)
+ goto bad;
+ alpn_client = *(++argv);
+ } else if (strcmp(*argv, "-alpn_server") == 0) {
+ if (--argc < 1)
+ goto bad;
+ alpn_server = *(++argv);
+ } else if (strcmp(*argv, "-alpn_expected") == 0) {
+ if (--argc < 1)
+ goto bad;
+ alpn_expected = *(++argv);
} else {
fprintf(stderr, "unknown option %s\n", *argv);
badop = 1;
@@ -782,8 +1188,8 @@ int main(int argc, char *argv[])
goto end;
}
- if (ssl2 + ssl3 + tls1 > 1) {
- fprintf(stderr, "At most one of -ssl2, -ssl3, or -tls1 should "
+ if (ssl2 + ssl3 + tls1 + dtls1 + dtls12 > 1) {
+ fprintf(stderr, "At most one of -ssl2, -ssl3, -tls1, -dtls1 or -dtls12 should "
"be requested.\n");
EXIT(1);
}
@@ -800,10 +1206,10 @@ int main(int argc, char *argv[])
goto end;
}
- if (!ssl2 && !ssl3 && !tls1 && number > 1 && !reuse && !force) {
+ if (!ssl2 && !ssl3 && !tls1 && !dtls1 && !dtls12 && number > 1 && !reuse && !force) {
fprintf(stderr, "This case cannot work. Use -f to perform "
"the test anyway (and\n-d to see what happens), "
- "or add one of -ssl2, -ssl3, -tls1, -reuse\n"
+ "or add one of ssl2, -ssl3, -tls1, -dtls1, -dtls12, -reuse\n"
"to avoid protocol mismatch.\n");
EXIT(1);
}
@@ -881,6 +1287,13 @@ int main(int argc, char *argv[])
meth = SSLv3_method();
else
#endif
+#ifndef OPENSSL_NO_DTLS
+ if (dtls1)
+ meth = DTLSv1_method();
+ else if (dtls12)
+ meth = DTLSv1_2_method();
+ else
+#endif
#ifndef OPENSSL_NO_TLS1
if (tls1)
meth = TLSv1_method();
@@ -928,12 +1341,9 @@ int main(int argc, char *argv[])
BIO_printf(bio_err, "unknown curve name (%s)\n", named_curve);
goto end;
}
- } else
-# ifdef OPENSSL_NO_EC2M
+ } else {
nid = NID_X9_62_prime256v1;
-# else
- nid = NID_sect163r2;
-# endif
+ }
ecdh = EC_KEY_new_by_curve_name(nid);
if (ecdh == NULL) {
@@ -1055,6 +1465,72 @@ int main(int argc, char *argv[])
}
#endif
+ if (serverinfo_sct)
+ SSL_CTX_add_client_custom_ext(c_ctx, SCT_EXT_TYPE,
+ NULL, NULL, NULL,
+ serverinfo_cli_parse_cb, NULL);
+ if (serverinfo_tack)
+ SSL_CTX_add_client_custom_ext(c_ctx, TACK_EXT_TYPE,
+ NULL, NULL, NULL,
+ serverinfo_cli_parse_cb, NULL);
+
+ if (serverinfo_file)
+ if (!SSL_CTX_use_serverinfo_file(s_ctx, serverinfo_file)) {
+ BIO_printf(bio_err, "missing serverinfo file\n");
+ goto end;
+ }
+
+ if (custom_ext) {
+ SSL_CTX_add_client_custom_ext(c_ctx, CUSTOM_EXT_TYPE_0,
+ custom_ext_0_cli_add_cb,
+ NULL, NULL,
+ custom_ext_0_cli_parse_cb, NULL);
+ SSL_CTX_add_client_custom_ext(c_ctx, CUSTOM_EXT_TYPE_1,
+ custom_ext_1_cli_add_cb,
+ NULL, NULL,
+ custom_ext_1_cli_parse_cb, NULL);
+ SSL_CTX_add_client_custom_ext(c_ctx, CUSTOM_EXT_TYPE_2,
+ custom_ext_2_cli_add_cb,
+ NULL, NULL,
+ custom_ext_2_cli_parse_cb, NULL);
+ SSL_CTX_add_client_custom_ext(c_ctx, CUSTOM_EXT_TYPE_3,
+ custom_ext_3_cli_add_cb,
+ NULL, NULL,
+ custom_ext_3_cli_parse_cb, NULL);
+
+ SSL_CTX_add_server_custom_ext(s_ctx, CUSTOM_EXT_TYPE_0,
+ custom_ext_0_srv_add_cb,
+ NULL, NULL,
+ custom_ext_0_srv_parse_cb, NULL);
+ SSL_CTX_add_server_custom_ext(s_ctx, CUSTOM_EXT_TYPE_1,
+ custom_ext_1_srv_add_cb,
+ NULL, NULL,
+ custom_ext_1_srv_parse_cb, NULL);
+ SSL_CTX_add_server_custom_ext(s_ctx, CUSTOM_EXT_TYPE_2,
+ custom_ext_2_srv_add_cb,
+ NULL, NULL,
+ custom_ext_2_srv_parse_cb, NULL);
+ SSL_CTX_add_server_custom_ext(s_ctx, CUSTOM_EXT_TYPE_3,
+ custom_ext_3_srv_add_cb,
+ NULL, NULL,
+ custom_ext_3_srv_parse_cb, NULL);
+ }
+
+ if (alpn_server)
+ SSL_CTX_set_alpn_select_cb(s_ctx, cb_server_alpn, NULL);
+
+ if (alpn_client) {
+ unsigned short alpn_len;
+ unsigned char *alpn = next_protos_parse(&alpn_len, alpn_client);
+
+ if (alpn == NULL) {
+ BIO_printf(bio_err, "Error parsing -alpn_client argument\n");
+ goto end;
+ }
+ SSL_CTX_set_alpn_protos(c_ctx, alpn, alpn_len);
+ OPENSSL_free(alpn);
+ }
+
c_ssl = SSL_new(c_ctx);
s_ssl = SSL_new(s_ctx);
@@ -1479,6 +1955,21 @@ int doit_biopair(SSL *s_ssl, SSL *c_ssl, long count,
if (verbose)
print_details(c_ssl, "DONE via BIO pair: ");
+
+ if (verify_serverinfo() < 0) {
+ ret = 1;
+ goto err;
+ }
+ if (verify_alpn(c_ssl, s_ssl) < 0) {
+ ret = 1;
+ goto err;
+ }
+
+ if (custom_ext_error) {
+ ret = 1;
+ goto err;
+ }
+
end:
ret = 0;
@@ -1508,7 +1999,8 @@ int doit_biopair(SSL *s_ssl, SSL *c_ssl, long count,
int doit(SSL *s_ssl, SSL *c_ssl, long count)
{
- MS_STATIC char cbuf[1024 * 8], sbuf[1024 * 8];
+ char *cbuf = NULL, *sbuf = NULL;
+ long bufsiz;
long cw_num = count, cr_num = count;
long sw_num = count, sr_num = count;
int ret = 1;
@@ -1521,9 +2013,17 @@ int doit(SSL *s_ssl, SSL *c_ssl, long count)
int done = 0;
int c_write, s_write;
int do_server = 0, do_client = 0;
+ int max_frag = 5 * 1024;
- memset(cbuf, 0, sizeof(cbuf));
- memset(sbuf, 0, sizeof(sbuf));
+ bufsiz = count > 40 * 1024 ? 40 * 1024 : count;
+
+ if ((cbuf = OPENSSL_malloc(bufsiz)) == NULL)
+ goto err;
+ if ((sbuf = OPENSSL_malloc(bufsiz)) == NULL)
+ goto err;
+
+ memset(cbuf, 0, bufsiz);
+ memset(sbuf, 0, bufsiz);
c_to_s = BIO_new(BIO_s_mem());
s_to_c = BIO_new(BIO_s_mem());
@@ -1541,10 +2041,12 @@ int doit(SSL *s_ssl, SSL *c_ssl, long count)
SSL_set_connect_state(c_ssl);
SSL_set_bio(c_ssl, s_to_c, c_to_s);
+ SSL_set_max_send_fragment(c_ssl, max_frag);
BIO_set_ssl(c_bio, c_ssl, BIO_NOCLOSE);
SSL_set_accept_state(s_ssl);
SSL_set_bio(s_ssl, c_to_s, s_to_c);
+ SSL_set_max_send_fragment(s_ssl, max_frag);
BIO_set_ssl(s_bio, s_ssl, BIO_NOCLOSE);
c_r = 0;
@@ -1595,8 +2097,7 @@ int doit(SSL *s_ssl, SSL *c_ssl, long count)
}
if (do_client && !(done & C_DONE)) {
if (c_write) {
- j = (cw_num > (long)sizeof(cbuf)) ?
- (int)sizeof(cbuf) : (int)cw_num;
+ j = (cw_num > bufsiz) ? (int)bufsiz : (int)cw_num;
i = BIO_write(c_bio, cbuf, j);
if (i < 0) {
c_r = 0;
@@ -1621,9 +2122,11 @@ int doit(SSL *s_ssl, SSL *c_ssl, long count)
s_r = 1;
c_write = 0;
cw_num -= i;
+ if (max_frag > 1029)
+ SSL_set_max_send_fragment(c_ssl, max_frag -= 5);
}
} else {
- i = BIO_read(c_bio, cbuf, sizeof(cbuf));
+ i = BIO_read(c_bio, cbuf, bufsiz);
if (i < 0) {
c_r = 0;
c_w = 0;
@@ -1659,7 +2162,7 @@ int doit(SSL *s_ssl, SSL *c_ssl, long count)
if (do_server && !(done & S_DONE)) {
if (!s_write) {
- i = BIO_read(s_bio, sbuf, sizeof(cbuf));
+ i = BIO_read(s_bio, sbuf, bufsiz);
if (i < 0) {
s_r = 0;
s_w = 0;
@@ -1693,8 +2196,7 @@ int doit(SSL *s_ssl, SSL *c_ssl, long count)
}
}
} else {
- j = (sw_num > (long)sizeof(sbuf)) ?
- (int)sizeof(sbuf) : (int)sw_num;
+ j = (sw_num > bufsiz) ? (int)bufsiz : (int)sw_num;
i = BIO_write(s_bio, sbuf, j);
if (i < 0) {
s_r = 0;
@@ -1722,6 +2224,8 @@ int doit(SSL *s_ssl, SSL *c_ssl, long count)
c_r = 1;
if (sw_num <= 0)
done |= S_DONE;
+ if (max_frag > 1029)
+ SSL_set_max_send_fragment(s_ssl, max_frag -= 5);
}
}
}
@@ -1732,6 +2236,14 @@ int doit(SSL *s_ssl, SSL *c_ssl, long count)
if (verbose)
print_details(c_ssl, "DONE: ");
+ if (verify_serverinfo() < 0) {
+ ret = 1;
+ goto err;
+ }
+ if (custom_ext_error) {
+ ret = 1;
+ goto err;
+ }
ret = 0;
err:
/*
@@ -1759,6 +2271,12 @@ int doit(SSL *s_ssl, SSL *c_ssl, long count)
BIO_free_all(c_bio);
if (s_bio != NULL)
BIO_free_all(s_bio);
+
+ if (cbuf)
+ OPENSSL_free(cbuf);
+ if (sbuf)
+ OPENSSL_free(sbuf);
+
return (ret);
}
diff --git a/crypto/openssl/ssl/t1_clnt.c b/crypto/openssl/ssl/t1_clnt.c
index 05c7f20..746b4e6 100644
--- a/crypto/openssl/ssl/t1_clnt.c
+++ b/crypto/openssl/ssl/t1_clnt.c
@@ -77,12 +77,14 @@ static const SSL_METHOD *tls1_get_client_method(int ver)
IMPLEMENT_tls_meth_func(TLS1_2_VERSION, TLSv1_2_client_method,
ssl_undefined_function,
- ssl3_connect, tls1_get_client_method)
+ ssl3_connect,
+ tls1_get_client_method, TLSv1_2_enc_data)
IMPLEMENT_tls_meth_func(TLS1_1_VERSION, TLSv1_1_client_method,
ssl_undefined_function,
- ssl3_connect, tls1_get_client_method)
+ ssl3_connect,
+ tls1_get_client_method, TLSv1_1_enc_data)
IMPLEMENT_tls_meth_func(TLS1_VERSION, TLSv1_client_method,
ssl_undefined_function,
- ssl3_connect, tls1_get_client_method)
+ ssl3_connect, tls1_get_client_method, TLSv1_enc_data)
diff --git a/crypto/openssl/ssl/t1_enc.c b/crypto/openssl/ssl/t1_enc.c
index 8f45294..e2a8f86 100644
--- a/crypto/openssl/ssl/t1_enc.c
+++ b/crypto/openssl/ssl/t1_enc.c
@@ -160,7 +160,7 @@ static int tls1_P_hash(const EVP_MD *md, const unsigned char *sec,
{
int chunk;
size_t j;
- EVP_MD_CTX ctx, ctx_tmp;
+ EVP_MD_CTX ctx, ctx_tmp, ctx_init;
EVP_PKEY *mac_key;
unsigned char A1[EVP_MAX_MD_SIZE];
size_t A1_len;
@@ -171,14 +171,14 @@ static int tls1_P_hash(const EVP_MD *md, const unsigned char *sec,
EVP_MD_CTX_init(&ctx);
EVP_MD_CTX_init(&ctx_tmp);
- EVP_MD_CTX_set_flags(&ctx, EVP_MD_CTX_FLAG_NON_FIPS_ALLOW);
- EVP_MD_CTX_set_flags(&ctx_tmp, EVP_MD_CTX_FLAG_NON_FIPS_ALLOW);
+ EVP_MD_CTX_init(&ctx_init);
+ EVP_MD_CTX_set_flags(&ctx_init, EVP_MD_CTX_FLAG_NON_FIPS_ALLOW);
mac_key = EVP_PKEY_new_mac_key(EVP_PKEY_HMAC, NULL, sec, sec_len);
if (!mac_key)
goto err;
- if (!EVP_DigestSignInit(&ctx, NULL, md, NULL, mac_key))
+ if (!EVP_DigestSignInit(&ctx_init, NULL, md, NULL, mac_key))
goto err;
- if (!EVP_DigestSignInit(&ctx_tmp, NULL, md, NULL, mac_key))
+ if (!EVP_MD_CTX_copy_ex(&ctx, &ctx_init))
goto err;
if (seed1 && !EVP_DigestSignUpdate(&ctx, seed1, seed1_len))
goto err;
@@ -195,13 +195,11 @@ static int tls1_P_hash(const EVP_MD *md, const unsigned char *sec,
for (;;) {
/* Reinit mac contexts */
- if (!EVP_DigestSignInit(&ctx, NULL, md, NULL, mac_key))
- goto err;
- if (!EVP_DigestSignInit(&ctx_tmp, NULL, md, NULL, mac_key))
+ if (!EVP_MD_CTX_copy_ex(&ctx, &ctx_init))
goto err;
if (!EVP_DigestSignUpdate(&ctx, A1, A1_len))
goto err;
- if (!EVP_DigestSignUpdate(&ctx_tmp, A1, A1_len))
+ if (olen > chunk && !EVP_MD_CTX_copy_ex(&ctx_tmp, &ctx))
goto err;
if (seed1 && !EVP_DigestSignUpdate(&ctx, seed1, seed1_len))
goto err;
@@ -235,6 +233,7 @@ static int tls1_P_hash(const EVP_MD *md, const unsigned char *sec,
EVP_PKEY_free(mac_key);
EVP_MD_CTX_cleanup(&ctx);
EVP_MD_CTX_cleanup(&ctx_tmp);
+ EVP_MD_CTX_cleanup(&ctx_init);
OPENSSL_cleanse(A1, sizeof(A1));
return ret;
}
@@ -405,9 +404,9 @@ int tls1_change_cipher_state(SSL *s, int which)
}
#endif
/*
- * this is done by dtls1_reset_seq_numbers for DTLS1_VERSION
+ * this is done by dtls1_reset_seq_numbers for DTLS
*/
- if (s->version != DTLS1_VERSION)
+ if (!SSL_IS_DTLS(s))
memset(&(s->s3->read_sequence[0]), 0, 8);
mac_secret = &(s->s3->read_mac_secret[0]);
mac_secret_size = &(s->s3->read_mac_secret_size);
@@ -443,9 +442,9 @@ int tls1_change_cipher_state(SSL *s, int which)
}
#endif
/*
- * this is done by dtls1_reset_seq_numbers for DTLS1_VERSION
+ * this is done by dtls1_reset_seq_numbers for DTLS
*/
- if (s->version != DTLS1_VERSION)
+ if (!SSL_IS_DTLS(s))
memset(&(s->s3->write_sequence[0]), 0, 8);
mac_secret = &(s->s3->write_mac_secret[0]);
mac_secret_size = &(s->s3->write_mac_secret_size);
@@ -574,6 +573,25 @@ int tls1_change_cipher_state(SSL *s, int which)
SSLerr(SSL_F_TLS1_CHANGE_CIPHER_STATE, ERR_R_INTERNAL_ERROR);
goto err2;
}
+#ifdef OPENSSL_SSL_TRACE_CRYPTO
+ if (s->msg_callback) {
+ int wh = which & SSL3_CC_WRITE ? TLS1_RT_CRYPTO_WRITE : 0;
+ if (*mac_secret_size)
+ s->msg_callback(2, s->version, wh | TLS1_RT_CRYPTO_MAC,
+ mac_secret, *mac_secret_size,
+ s, s->msg_callback_arg);
+ if (c->key_len)
+ s->msg_callback(2, s->version, wh | TLS1_RT_CRYPTO_KEY,
+ key, c->key_len, s, s->msg_callback_arg);
+ if (k) {
+ if (EVP_CIPHER_mode(c) == EVP_CIPH_GCM_MODE)
+ wh |= TLS1_RT_CRYPTO_FIXED_IV;
+ else
+ wh |= TLS1_RT_CRYPTO_IV;
+ s->msg_callback(2, s->version, wh, iv, k, s, s->msg_callback_arg);
+ }
+ }
+#endif
#ifdef TLS_DEBUG
printf("which = %04X\nkey=", which);
@@ -741,7 +759,7 @@ int tls1_enc(SSL *s, int send)
int ivlen;
enc = EVP_CIPHER_CTX_cipher(s->enc_write_ctx);
/* For TLSv1.1 and later explicit IV */
- if (s->version >= TLS1_1_VERSION
+ if (SSL_USE_EXPLICIT_IV(s)
&& EVP_CIPHER_mode(enc) == EVP_CIPH_CBC_MODE)
ivlen = EVP_CIPHER_iv_length(enc);
else
@@ -789,7 +807,7 @@ int tls1_enc(SSL *s, int send)
seq = send ? s->s3->write_sequence : s->s3->read_sequence;
- if (s->version == DTLS1_VERSION || s->version == DTLS1_BAD_VER) {
+ if (SSL_IS_DTLS(s)) {
unsigned char dtlsseq[9], *p = dtlsseq;
s2n(send ? s->d1->w_epoch : s->d1->r_epoch, p);
@@ -1010,7 +1028,7 @@ int tls1_mac(SSL *ssl, unsigned char *md, int send)
mac_ctx = &hmac;
}
- if (ssl->version == DTLS1_VERSION || ssl->version == DTLS1_BAD_VER) {
+ if (SSL_IS_DTLS(ssl)) {
unsigned char dtlsseq[8], *p = dtlsseq;
s2n(send ? ssl->d1->w_epoch : ssl->d1->r_epoch, p);
@@ -1078,7 +1096,7 @@ int tls1_mac(SSL *ssl, unsigned char *md, int send)
}
#endif
- if (ssl->version != DTLS1_VERSION && ssl->version != DTLS1_BAD_VER) {
+ if (!SSL_IS_DTLS(ssl)) {
for (i = 7; i >= 0; i--) {
++seq[i];
if (seq[i] != 0)
@@ -1144,6 +1162,22 @@ int tls1_generate_master_secret(SSL *s, unsigned char *out, unsigned char *p,
SSL3_MASTER_SECRET_SIZE);
#endif
+#ifdef OPENSSL_SSL_TRACE_CRYPTO
+ if (s->msg_callback) {
+ s->msg_callback(2, s->version, TLS1_RT_CRYPTO_PREMASTER,
+ p, len, s, s->msg_callback_arg);
+ s->msg_callback(2, s->version, TLS1_RT_CRYPTO_CLIENT_RANDOM,
+ s->s3->client_random, SSL3_RANDOM_SIZE,
+ s, s->msg_callback_arg);
+ s->msg_callback(2, s->version, TLS1_RT_CRYPTO_SERVER_RANDOM,
+ s->s3->server_random, SSL3_RANDOM_SIZE,
+ s, s->msg_callback_arg);
+ s->msg_callback(2, s->version, TLS1_RT_CRYPTO_MASTER,
+ s->session->master_key,
+ SSL3_MASTER_SECRET_SIZE, s, s->msg_callback_arg);
+ }
+#endif
+
#ifdef KSSL_DEBUG
fprintf(stderr, "tls1_generate_master_secret() complete\n");
#endif /* KSSL_DEBUG */
diff --git a/crypto/openssl/ssl/t1_ext.c b/crypto/openssl/ssl/t1_ext.c
new file mode 100644
index 0000000..724ddf7
--- /dev/null
+++ b/crypto/openssl/ssl/t1_ext.c
@@ -0,0 +1,298 @@
+/* ssl/t1_ext.c */
+/* ====================================================================
+ * Copyright (c) 2014 The OpenSSL Project. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * 3. All advertising materials mentioning features or use of this
+ * software must display the following acknowledgment:
+ * "This product includes software developed by the OpenSSL Project
+ * for use in the OpenSSL Toolkit. (http://www.openssl.org/)"
+ *
+ * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
+ * endorse or promote products derived from this software without
+ * prior written permission. For written permission, please contact
+ * openssl-core@openssl.org.
+ *
+ * 5. Products derived from this software may not be called "OpenSSL"
+ * nor may "OpenSSL" appear in their names without prior written
+ * permission of the OpenSSL Project.
+ *
+ * 6. Redistributions of any form whatsoever must retain the following
+ * acknowledgment:
+ * "This product includes software developed by the OpenSSL Project
+ * for use in the OpenSSL Toolkit (http://www.openssl.org/)"
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
+ * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
+ * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+ * OF THE POSSIBILITY OF SUCH DAMAGE.
+ * ====================================================================
+ *
+ * This product includes cryptographic software written by Eric Young
+ * (eay@cryptsoft.com). This product includes software written by Tim
+ * Hudson (tjh@cryptsoft.com).
+ *
+ */
+
+/* Custom extension utility functions */
+
+#include "ssl_locl.h"
+
+#ifndef OPENSSL_NO_TLSEXT
+
+/* Find a custom extension from the list. */
+static custom_ext_method *custom_ext_find(custom_ext_methods *exts,
+ unsigned int ext_type)
+{
+ size_t i;
+ custom_ext_method *meth = exts->meths;
+ for (i = 0; i < exts->meths_count; i++, meth++) {
+ if (ext_type == meth->ext_type)
+ return meth;
+ }
+ return NULL;
+}
+
+/*
+ * Initialise custom extensions flags to indicate neither sent nor received.
+ */
+void custom_ext_init(custom_ext_methods *exts)
+{
+ size_t i;
+ custom_ext_method *meth = exts->meths;
+ for (i = 0; i < exts->meths_count; i++, meth++)
+ meth->ext_flags = 0;
+}
+
+/* Pass received custom extension data to the application for parsing. */
+int custom_ext_parse(SSL *s, int server,
+ unsigned int ext_type,
+ const unsigned char *ext_data, size_t ext_size, int *al)
+{
+ custom_ext_methods *exts = server ? &s->cert->srv_ext : &s->cert->cli_ext;
+ custom_ext_method *meth;
+ meth = custom_ext_find(exts, ext_type);
+ /* If not found return success */
+ if (!meth)
+ return 1;
+ if (!server) {
+ /*
+ * If it's ServerHello we can't have any extensions not sent in
+ * ClientHello.
+ */
+ if (!(meth->ext_flags & SSL_EXT_FLAG_SENT)) {
+ *al = TLS1_AD_UNSUPPORTED_EXTENSION;
+ return 0;
+ }
+ }
+ /* If already present it's a duplicate */
+ if (meth->ext_flags & SSL_EXT_FLAG_RECEIVED) {
+ *al = TLS1_AD_DECODE_ERROR;
+ return 0;
+ }
+ meth->ext_flags |= SSL_EXT_FLAG_RECEIVED;
+ /* If no parse function set return success */
+ if (!meth->parse_cb)
+ return 1;
+
+ return meth->parse_cb(s, ext_type, ext_data, ext_size, al,
+ meth->parse_arg);
+}
+
+/*
+ * Request custom extension data from the application and add to the return
+ * buffer.
+ */
+int custom_ext_add(SSL *s, int server,
+ unsigned char **pret, unsigned char *limit, int *al)
+{
+ custom_ext_methods *exts = server ? &s->cert->srv_ext : &s->cert->cli_ext;
+ custom_ext_method *meth;
+ unsigned char *ret = *pret;
+ size_t i;
+
+ for (i = 0; i < exts->meths_count; i++) {
+ const unsigned char *out = NULL;
+ size_t outlen = 0;
+ meth = exts->meths + i;
+
+ if (server) {
+ /*
+ * For ServerHello only send extensions present in ClientHello.
+ */
+ if (!(meth->ext_flags & SSL_EXT_FLAG_RECEIVED))
+ continue;
+ /* If callback absent for server skip it */
+ if (!meth->add_cb)
+ continue;
+ }
+ if (meth->add_cb) {
+ int cb_retval = 0;
+ cb_retval = meth->add_cb(s, meth->ext_type,
+ &out, &outlen, al, meth->add_arg);
+ if (cb_retval < 0)
+ return 0; /* error */
+ if (cb_retval == 0)
+ continue; /* skip this extension */
+ }
+ if (4 > limit - ret || outlen > (size_t)(limit - ret - 4))
+ return 0;
+ s2n(meth->ext_type, ret);
+ s2n(outlen, ret);
+ if (outlen) {
+ memcpy(ret, out, outlen);
+ ret += outlen;
+ }
+ /*
+ * We can't send duplicates: code logic should prevent this.
+ */
+ OPENSSL_assert(!(meth->ext_flags & SSL_EXT_FLAG_SENT));
+ /*
+ * Indicate extension has been sent: this is both a sanity check to
+ * ensure we don't send duplicate extensions and indicates that it is
+ * not an error if the extension is present in ServerHello.
+ */
+ meth->ext_flags |= SSL_EXT_FLAG_SENT;
+ if (meth->free_cb)
+ meth->free_cb(s, meth->ext_type, out, meth->add_arg);
+ }
+ *pret = ret;
+ return 1;
+}
+
+/* Copy table of custom extensions */
+int custom_exts_copy(custom_ext_methods *dst, const custom_ext_methods *src)
+{
+ if (src->meths_count) {
+ dst->meths =
+ BUF_memdup(src->meths,
+ sizeof(custom_ext_method) * src->meths_count);
+ if (dst->meths == NULL)
+ return 0;
+ dst->meths_count = src->meths_count;
+ }
+ return 1;
+}
+
+void custom_exts_free(custom_ext_methods *exts)
+{
+ if (exts->meths)
+ OPENSSL_free(exts->meths);
+}
+
+/* Set callbacks for a custom extension. */
+static int custom_ext_meth_add(custom_ext_methods *exts,
+ unsigned int ext_type,
+ custom_ext_add_cb add_cb,
+ custom_ext_free_cb free_cb,
+ void *add_arg,
+ custom_ext_parse_cb parse_cb, void *parse_arg)
+{
+ custom_ext_method *meth;
+ /*
+ * Check application error: if add_cb is not set free_cb will never be
+ * called.
+ */
+ if (!add_cb && free_cb)
+ return 0;
+ /* Don't add if extension supported internally. */
+ if (SSL_extension_supported(ext_type))
+ return 0;
+ /* Extension type must fit in 16 bits */
+ if (ext_type > 0xffff)
+ return 0;
+ /* Search for duplicate */
+ if (custom_ext_find(exts, ext_type))
+ return 0;
+ exts->meths = OPENSSL_realloc(exts->meths,
+ (exts->meths_count +
+ 1) * sizeof(custom_ext_method));
+
+ if (!exts->meths) {
+ exts->meths_count = 0;
+ return 0;
+ }
+
+ meth = exts->meths + exts->meths_count;
+ memset(meth, 0, sizeof(custom_ext_method));
+ meth->parse_cb = parse_cb;
+ meth->add_cb = add_cb;
+ meth->free_cb = free_cb;
+ meth->ext_type = ext_type;
+ meth->add_arg = add_arg;
+ meth->parse_arg = parse_arg;
+ exts->meths_count++;
+ return 1;
+}
+
+/* Application level functions to add custom extension callbacks */
+int SSL_CTX_add_client_custom_ext(SSL_CTX *ctx, unsigned int ext_type,
+ custom_ext_add_cb add_cb,
+ custom_ext_free_cb free_cb,
+ void *add_arg,
+ custom_ext_parse_cb parse_cb,
+ void *parse_arg)
+{
+ return custom_ext_meth_add(&ctx->cert->cli_ext, ext_type,
+ add_cb, free_cb, add_arg, parse_cb, parse_arg);
+}
+
+int SSL_CTX_add_server_custom_ext(SSL_CTX *ctx, unsigned int ext_type,
+ custom_ext_add_cb add_cb,
+ custom_ext_free_cb free_cb,
+ void *add_arg,
+ custom_ext_parse_cb parse_cb,
+ void *parse_arg)
+{
+ return custom_ext_meth_add(&ctx->cert->srv_ext, ext_type,
+ add_cb, free_cb, add_arg, parse_cb, parse_arg);
+}
+
+int SSL_extension_supported(unsigned int ext_type)
+{
+ switch (ext_type) {
+ /* Internally supported extensions. */
+ case TLSEXT_TYPE_application_layer_protocol_negotiation:
+ case TLSEXT_TYPE_ec_point_formats:
+ case TLSEXT_TYPE_elliptic_curves:
+ case TLSEXT_TYPE_heartbeat:
+ case TLSEXT_TYPE_next_proto_neg:
+ case TLSEXT_TYPE_padding:
+ case TLSEXT_TYPE_renegotiate:
+ case TLSEXT_TYPE_server_name:
+ case TLSEXT_TYPE_session_ticket:
+ case TLSEXT_TYPE_signature_algorithms:
+ case TLSEXT_TYPE_srp:
+ case TLSEXT_TYPE_status_request:
+ case TLSEXT_TYPE_use_srtp:
+# ifdef TLSEXT_TYPE_opaque_prf_input
+ case TLSEXT_TYPE_opaque_prf_input:
+# endif
+# ifdef TLSEXT_TYPE_encrypt_then_mac
+ case TLSEXT_TYPE_encrypt_then_mac:
+# endif
+ return 1;
+ default:
+ return 0;
+ }
+}
+#endif
diff --git a/crypto/openssl/ssl/t1_lib.c b/crypto/openssl/ssl/t1_lib.c
index d70b93f..210a5e8 100644
--- a/crypto/openssl/ssl/t1_lib.c
+++ b/crypto/openssl/ssl/t1_lib.c
@@ -113,6 +113,11 @@
#include <openssl/objects.h>
#include <openssl/evp.h>
#include <openssl/hmac.h>
+#ifndef OPENSSL_NO_EC
+#ifdef OPENSSL_NO_EC2M
+# include <openssl/ec.h>
+#endif
+#endif
#include <openssl/ocsp.h>
#include <openssl/rand.h>
#include "ssl_locl.h"
@@ -123,6 +128,8 @@ const char tls1_version_str[] = "TLSv1" OPENSSL_VERSION_PTEXT;
static int tls_decrypt_ticket(SSL *s, const unsigned char *tick, int ticklen,
const unsigned char *sess_id, int sesslen,
SSL_SESSION **psess);
+static int ssl_check_clienthello_tlsext_early(SSL *s);
+int ssl_check_serverhello_tlsext(SSL *s);
#endif
SSL3_ENC_METHOD TLSv1_enc_data = {
@@ -138,6 +145,49 @@ SSL3_ENC_METHOD TLSv1_enc_data = {
TLS_MD_SERVER_FINISH_CONST, TLS_MD_SERVER_FINISH_CONST_SIZE,
tls1_alert_code,
tls1_export_keying_material,
+ 0,
+ SSL3_HM_HEADER_LENGTH,
+ ssl3_set_handshake_header,
+ ssl3_handshake_write
+};
+
+SSL3_ENC_METHOD TLSv1_1_enc_data = {
+ tls1_enc,
+ tls1_mac,
+ tls1_setup_key_block,
+ tls1_generate_master_secret,
+ tls1_change_cipher_state,
+ tls1_final_finish_mac,
+ TLS1_FINISH_MAC_LENGTH,
+ tls1_cert_verify_mac,
+ TLS_MD_CLIENT_FINISH_CONST, TLS_MD_CLIENT_FINISH_CONST_SIZE,
+ TLS_MD_SERVER_FINISH_CONST, TLS_MD_SERVER_FINISH_CONST_SIZE,
+ tls1_alert_code,
+ tls1_export_keying_material,
+ SSL_ENC_FLAG_EXPLICIT_IV,
+ SSL3_HM_HEADER_LENGTH,
+ ssl3_set_handshake_header,
+ ssl3_handshake_write
+};
+
+SSL3_ENC_METHOD TLSv1_2_enc_data = {
+ tls1_enc,
+ tls1_mac,
+ tls1_setup_key_block,
+ tls1_generate_master_secret,
+ tls1_change_cipher_state,
+ tls1_final_finish_mac,
+ TLS1_FINISH_MAC_LENGTH,
+ tls1_cert_verify_mac,
+ TLS_MD_CLIENT_FINISH_CONST, TLS_MD_CLIENT_FINISH_CONST_SIZE,
+ TLS_MD_SERVER_FINISH_CONST, TLS_MD_SERVER_FINISH_CONST_SIZE,
+ tls1_alert_code,
+ tls1_export_keying_material,
+ SSL_ENC_FLAG_EXPLICIT_IV | SSL_ENC_FLAG_SIGALGS | SSL_ENC_FLAG_SHA256_PRF
+ | SSL_ENC_FLAG_TLS1_2_CIPHERS,
+ SSL3_HM_HEADER_LENGTH,
+ ssl3_set_handshake_header,
+ ssl3_handshake_write
};
long tls1_default_timeout(void)
@@ -200,52 +250,133 @@ static int nid_list[] = {
NID_secp256k1, /* secp256k1 (22) */
NID_X9_62_prime256v1, /* secp256r1 (23) */
NID_secp384r1, /* secp384r1 (24) */
- NID_secp521r1 /* secp521r1 (25) */
+ NID_secp521r1, /* secp521r1 (25) */
+ NID_brainpoolP256r1, /* brainpoolP256r1 (26) */
+ NID_brainpoolP384r1, /* brainpoolP384r1 (27) */
+ NID_brainpoolP512r1 /* brainpool512r1 (28) */
};
-static int pref_list[] = {
-# ifndef OPENSSL_NO_EC2M
- NID_sect571r1, /* sect571r1 (14) */
- NID_sect571k1, /* sect571k1 (13) */
-# endif
- NID_secp521r1, /* secp521r1 (25) */
-# ifndef OPENSSL_NO_EC2M
- NID_sect409k1, /* sect409k1 (11) */
- NID_sect409r1, /* sect409r1 (12) */
-# endif
- NID_secp384r1, /* secp384r1 (24) */
-# ifndef OPENSSL_NO_EC2M
- NID_sect283k1, /* sect283k1 (9) */
- NID_sect283r1, /* sect283r1 (10) */
-# endif
- NID_secp256k1, /* secp256k1 (22) */
- NID_X9_62_prime256v1, /* secp256r1 (23) */
+static const unsigned char ecformats_default[] = {
+ TLSEXT_ECPOINTFORMAT_uncompressed,
+ TLSEXT_ECPOINTFORMAT_ansiX962_compressed_prime,
+ TLSEXT_ECPOINTFORMAT_ansiX962_compressed_char2
+};
+
+/* The client's default curves / the server's 'auto' curves. */
+static const unsigned char eccurves_auto[] = {
+ /* Prefer P-256 which has the fastest and most secure implementations. */
+ 0, 23, /* secp256r1 (23) */
+ /* Other >= 256-bit prime curves. */
+ 0, 25, /* secp521r1 (25) */
+ 0, 28, /* brainpool512r1 (28) */
+ 0, 27, /* brainpoolP384r1 (27) */
+ 0, 24, /* secp384r1 (24) */
+ 0, 26, /* brainpoolP256r1 (26) */
+ 0, 22, /* secp256k1 (22) */
# ifndef OPENSSL_NO_EC2M
- NID_sect239k1, /* sect239k1 (8) */
- NID_sect233k1, /* sect233k1 (6) */
- NID_sect233r1, /* sect233r1 (7) */
+ /* >= 256-bit binary curves. */
+ 0, 14, /* sect571r1 (14) */
+ 0, 13, /* sect571k1 (13) */
+ 0, 11, /* sect409k1 (11) */
+ 0, 12, /* sect409r1 (12) */
+ 0, 9, /* sect283k1 (9) */
+ 0, 10, /* sect283r1 (10) */
# endif
- NID_secp224k1, /* secp224k1 (20) */
- NID_secp224r1, /* secp224r1 (21) */
+};
+
+static const unsigned char eccurves_all[] = {
+ /* Prefer P-256 which has the fastest and most secure implementations. */
+ 0, 23, /* secp256r1 (23) */
+ /* Other >= 256-bit prime curves. */
+ 0, 25, /* secp521r1 (25) */
+ 0, 28, /* brainpool512r1 (28) */
+ 0, 27, /* brainpoolP384r1 (27) */
+ 0, 24, /* secp384r1 (24) */
+ 0, 26, /* brainpoolP256r1 (26) */
+ 0, 22, /* secp256k1 (22) */
# ifndef OPENSSL_NO_EC2M
- NID_sect193r1, /* sect193r1 (4) */
- NID_sect193r2, /* sect193r2 (5) */
+ /* >= 256-bit binary curves. */
+ 0, 14, /* sect571r1 (14) */
+ 0, 13, /* sect571k1 (13) */
+ 0, 11, /* sect409k1 (11) */
+ 0, 12, /* sect409r1 (12) */
+ 0, 9, /* sect283k1 (9) */
+ 0, 10, /* sect283r1 (10) */
# endif
- NID_secp192k1, /* secp192k1 (18) */
- NID_X9_62_prime192v1, /* secp192r1 (19) */
+ /*
+ * Remaining curves disabled by default but still permitted if set
+ * via an explicit callback or parameters.
+ */
+ 0, 20, /* secp224k1 (20) */
+ 0, 21, /* secp224r1 (21) */
+ 0, 18, /* secp192k1 (18) */
+ 0, 19, /* secp192r1 (19) */
+ 0, 15, /* secp160k1 (15) */
+ 0, 16, /* secp160r1 (16) */
+ 0, 17, /* secp160r2 (17) */
# ifndef OPENSSL_NO_EC2M
- NID_sect163k1, /* sect163k1 (1) */
- NID_sect163r1, /* sect163r1 (2) */
- NID_sect163r2, /* sect163r2 (3) */
+ 0, 8, /* sect239k1 (8) */
+ 0, 6, /* sect233k1 (6) */
+ 0, 7, /* sect233r1 (7) */
+ 0, 4, /* sect193r1 (4) */
+ 0, 5, /* sect193r2 (5) */
+ 0, 1, /* sect163k1 (1) */
+ 0, 2, /* sect163r1 (2) */
+ 0, 3, /* sect163r2 (3) */
# endif
- NID_secp160k1, /* secp160k1 (15) */
- NID_secp160r1, /* secp160r1 (16) */
- NID_secp160r2, /* secp160r2 (17) */
};
+static const unsigned char suiteb_curves[] = {
+ 0, TLSEXT_curve_P_256,
+ 0, TLSEXT_curve_P_384
+};
+
+# ifdef OPENSSL_FIPS
+/* Brainpool not allowed in FIPS mode */
+static const unsigned char fips_curves_default[] = {
+# ifndef OPENSSL_NO_EC2M
+ 0, 14, /* sect571r1 (14) */
+ 0, 13, /* sect571k1 (13) */
+# endif
+ 0, 25, /* secp521r1 (25) */
+# ifndef OPENSSL_NO_EC2M
+ 0, 11, /* sect409k1 (11) */
+ 0, 12, /* sect409r1 (12) */
+# endif
+ 0, 24, /* secp384r1 (24) */
+# ifndef OPENSSL_NO_EC2M
+ 0, 9, /* sect283k1 (9) */
+ 0, 10, /* sect283r1 (10) */
+# endif
+ 0, 22, /* secp256k1 (22) */
+ 0, 23, /* secp256r1 (23) */
+# ifndef OPENSSL_NO_EC2M
+ 0, 8, /* sect239k1 (8) */
+ 0, 6, /* sect233k1 (6) */
+ 0, 7, /* sect233r1 (7) */
+# endif
+ 0, 20, /* secp224k1 (20) */
+ 0, 21, /* secp224r1 (21) */
+# ifndef OPENSSL_NO_EC2M
+ 0, 4, /* sect193r1 (4) */
+ 0, 5, /* sect193r2 (5) */
+# endif
+ 0, 18, /* secp192k1 (18) */
+ 0, 19, /* secp192r1 (19) */
+# ifndef OPENSSL_NO_EC2M
+ 0, 1, /* sect163k1 (1) */
+ 0, 2, /* sect163r1 (2) */
+ 0, 3, /* sect163r2 (3) */
+# endif
+ 0, 15, /* secp160k1 (15) */
+ 0, 16, /* secp160r1 (16) */
+ 0, 17, /* secp160r2 (17) */
+};
+# endif
+
int tls1_ec_curve_id2nid(int curve_id)
{
- /* ECC curves from RFC 4492 */
+ /* ECC curves from RFC 4492 and RFC 7027 */
if ((curve_id < 1) || ((unsigned int)curve_id >
sizeof(nid_list) / sizeof(nid_list[0])))
return 0;
@@ -254,7 +385,7 @@ int tls1_ec_curve_id2nid(int curve_id)
int tls1_ec_nid2curve_id(int nid)
{
- /* ECC curves from RFC 4492 */
+ /* ECC curves from RFC 4492 and RFC 7027 */
switch (nid) {
case NID_sect163k1: /* sect163k1 (1) */
return 1;
@@ -306,10 +437,548 @@ int tls1_ec_nid2curve_id(int nid)
return 24;
case NID_secp521r1: /* secp521r1 (25) */
return 25;
+ case NID_brainpoolP256r1: /* brainpoolP256r1 (26) */
+ return 26;
+ case NID_brainpoolP384r1: /* brainpoolP384r1 (27) */
+ return 27;
+ case NID_brainpoolP512r1: /* brainpool512r1 (28) */
+ return 28;
default:
return 0;
}
}
+
+/*
+ * Get curves list, if "sess" is set return client curves otherwise
+ * preferred list.
+ * Sets |num_curves| to the number of curves in the list, i.e.,
+ * the length of |pcurves| is 2 * num_curves.
+ * Returns 1 on success and 0 if the client curves list has invalid format.
+ * The latter indicates an internal error: we should not be accepting such
+ * lists in the first place.
+ * TODO(emilia): we should really be storing the curves list in explicitly
+ * parsed form instead. (However, this would affect binary compatibility
+ * so cannot happen in the 1.0.x series.)
+ */
+static int tls1_get_curvelist(SSL *s, int sess,
+ const unsigned char **pcurves,
+ size_t *num_curves)
+{
+ size_t pcurveslen = 0;
+ if (sess) {
+ *pcurves = s->session->tlsext_ellipticcurvelist;
+ pcurveslen = s->session->tlsext_ellipticcurvelist_length;
+ } else {
+ /* For Suite B mode only include P-256, P-384 */
+ switch (tls1_suiteb(s)) {
+ case SSL_CERT_FLAG_SUITEB_128_LOS:
+ *pcurves = suiteb_curves;
+ pcurveslen = sizeof(suiteb_curves);
+ break;
+
+ case SSL_CERT_FLAG_SUITEB_128_LOS_ONLY:
+ *pcurves = suiteb_curves;
+ pcurveslen = 2;
+ break;
+
+ case SSL_CERT_FLAG_SUITEB_192_LOS:
+ *pcurves = suiteb_curves + 2;
+ pcurveslen = 2;
+ break;
+ default:
+ *pcurves = s->tlsext_ellipticcurvelist;
+ pcurveslen = s->tlsext_ellipticcurvelist_length;
+ }
+ if (!*pcurves) {
+# ifdef OPENSSL_FIPS
+ if (FIPS_mode()) {
+ *pcurves = fips_curves_default;
+ pcurveslen = sizeof(fips_curves_default);
+ } else
+# endif
+ {
+ if (!s->server || (s->cert && s->cert->ecdh_tmp_auto)) {
+ *pcurves = eccurves_auto;
+ pcurveslen = sizeof(eccurves_auto);
+ } else {
+ *pcurves = eccurves_all;
+ pcurveslen = sizeof(eccurves_all);
+ }
+ }
+ }
+ }
+ /* We do not allow odd length arrays to enter the system. */
+ if (pcurveslen & 1) {
+ SSLerr(SSL_F_TLS1_GET_CURVELIST, ERR_R_INTERNAL_ERROR);
+ *num_curves = 0;
+ return 0;
+ } else {
+ *num_curves = pcurveslen / 2;
+ return 1;
+ }
+}
+
+/* Check a curve is one of our preferences */
+int tls1_check_curve(SSL *s, const unsigned char *p, size_t len)
+{
+ const unsigned char *curves;
+ size_t num_curves, i;
+ unsigned int suiteb_flags = tls1_suiteb(s);
+ if (len != 3 || p[0] != NAMED_CURVE_TYPE)
+ return 0;
+ /* Check curve matches Suite B preferences */
+ if (suiteb_flags) {
+ unsigned long cid = s->s3->tmp.new_cipher->id;
+ if (p[1])
+ return 0;
+ if (cid == TLS1_CK_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256) {
+ if (p[2] != TLSEXT_curve_P_256)
+ return 0;
+ } else if (cid == TLS1_CK_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384) {
+ if (p[2] != TLSEXT_curve_P_384)
+ return 0;
+ } else /* Should never happen */
+ return 0;
+ }
+ if (!tls1_get_curvelist(s, 0, &curves, &num_curves))
+ return 0;
+ for (i = 0; i < num_curves; i++, curves += 2) {
+ if (p[1] == curves[0] && p[2] == curves[1])
+ return 1;
+ }
+ return 0;
+}
+
+/*-
+ * Return |nmatch|th shared curve or NID_undef if there is no match.
+ * For nmatch == -1, return number of matches
+ * For nmatch == -2, return the NID of the curve to use for
+ * an EC tmp key, or NID_undef if there is no match.
+ */
+int tls1_shared_curve(SSL *s, int nmatch)
+{
+ const unsigned char *pref, *supp;
+ size_t num_pref, num_supp, i, j;
+ int k;
+ /* Can't do anything on client side */
+ if (s->server == 0)
+ return -1;
+ if (nmatch == -2) {
+ if (tls1_suiteb(s)) {
+ /*
+ * For Suite B ciphersuite determines curve: we already know
+ * these are acceptable due to previous checks.
+ */
+ unsigned long cid = s->s3->tmp.new_cipher->id;
+ if (cid == TLS1_CK_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256)
+ return NID_X9_62_prime256v1; /* P-256 */
+ if (cid == TLS1_CK_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384)
+ return NID_secp384r1; /* P-384 */
+ /* Should never happen */
+ return NID_undef;
+ }
+ /* If not Suite B just return first preference shared curve */
+ nmatch = 0;
+ }
+ /*
+ * Avoid truncation. tls1_get_curvelist takes an int
+ * but s->options is a long...
+ */
+ if (!tls1_get_curvelist
+ (s, (s->options & SSL_OP_CIPHER_SERVER_PREFERENCE) != 0, &supp,
+ &num_supp))
+ /* In practice, NID_undef == 0 but let's be precise. */
+ return nmatch == -1 ? 0 : NID_undef;
+ if (!tls1_get_curvelist
+ (s, !(s->options & SSL_OP_CIPHER_SERVER_PREFERENCE), &pref,
+ &num_pref))
+ return nmatch == -1 ? 0 : NID_undef;
+
+ /*
+ * If the client didn't send the elliptic_curves extension all of them
+ * are allowed.
+ */
+ if (num_supp == 0 && (s->options & SSL_OP_CIPHER_SERVER_PREFERENCE) != 0) {
+ supp = eccurves_all;
+ num_supp = sizeof(eccurves_all) / 2;
+ } else if (num_pref == 0 &&
+ (s->options & SSL_OP_CIPHER_SERVER_PREFERENCE) == 0) {
+ pref = eccurves_all;
+ num_pref = sizeof(eccurves_all) / 2;
+ }
+
+ k = 0;
+ for (i = 0; i < num_pref; i++, pref += 2) {
+ const unsigned char *tsupp = supp;
+ for (j = 0; j < num_supp; j++, tsupp += 2) {
+ if (pref[0] == tsupp[0] && pref[1] == tsupp[1]) {
+ if (nmatch == k) {
+ int id = (pref[0] << 8) | pref[1];
+ return tls1_ec_curve_id2nid(id);
+ }
+ k++;
+ }
+ }
+ }
+ if (nmatch == -1)
+ return k;
+ /* Out of range (nmatch > k). */
+ return NID_undef;
+}
+
+int tls1_set_curves(unsigned char **pext, size_t *pextlen,
+ int *curves, size_t ncurves)
+{
+ unsigned char *clist, *p;
+ size_t i;
+ /*
+ * Bitmap of curves included to detect duplicates: only works while curve
+ * ids < 32
+ */
+ unsigned long dup_list = 0;
+# ifdef OPENSSL_NO_EC2M
+ EC_GROUP *curve;
+# endif
+
+ clist = OPENSSL_malloc(ncurves * 2);
+ if (!clist)
+ return 0;
+ for (i = 0, p = clist; i < ncurves; i++) {
+ unsigned long idmask;
+ int id;
+ id = tls1_ec_nid2curve_id(curves[i]);
+# ifdef OPENSSL_FIPS
+ /* NB: 25 is last curve ID supported by FIPS module */
+ if (FIPS_mode() && id > 25) {
+ OPENSSL_free(clist);
+ return 0;
+ }
+# endif
+# ifdef OPENSSL_NO_EC2M
+ curve = EC_GROUP_new_by_curve_name(curves[i]);
+ if (!curve || EC_METHOD_get_field_type(EC_GROUP_method_of(curve))
+ == NID_X9_62_characteristic_two_field) {
+ if (curve)
+ EC_GROUP_free(curve);
+ OPENSSL_free(clist);
+ return 0;
+ } else
+ EC_GROUP_free(curve);
+# endif
+ idmask = 1L << id;
+ if (!id || (dup_list & idmask)) {
+ OPENSSL_free(clist);
+ return 0;
+ }
+ dup_list |= idmask;
+ s2n(id, p);
+ }
+ if (*pext)
+ OPENSSL_free(*pext);
+ *pext = clist;
+ *pextlen = ncurves * 2;
+ return 1;
+}
+
+# define MAX_CURVELIST 28
+
+typedef struct {
+ size_t nidcnt;
+ int nid_arr[MAX_CURVELIST];
+} nid_cb_st;
+
+static int nid_cb(const char *elem, int len, void *arg)
+{
+ nid_cb_st *narg = arg;
+ size_t i;
+ int nid;
+ char etmp[20];
+ if (elem == NULL)
+ return 0;
+ if (narg->nidcnt == MAX_CURVELIST)
+ return 0;
+ if (len > (int)(sizeof(etmp) - 1))
+ return 0;
+ memcpy(etmp, elem, len);
+ etmp[len] = 0;
+ nid = EC_curve_nist2nid(etmp);
+ if (nid == NID_undef)
+ nid = OBJ_sn2nid(etmp);
+ if (nid == NID_undef)
+ nid = OBJ_ln2nid(etmp);
+ if (nid == NID_undef)
+ return 0;
+ for (i = 0; i < narg->nidcnt; i++)
+ if (narg->nid_arr[i] == nid)
+ return 0;
+ narg->nid_arr[narg->nidcnt++] = nid;
+ return 1;
+}
+
+/* Set curves based on a colon separate list */
+int tls1_set_curves_list(unsigned char **pext, size_t *pextlen,
+ const char *str)
+{
+ nid_cb_st ncb;
+ ncb.nidcnt = 0;
+ if (!CONF_parse_list(str, ':', 1, nid_cb, &ncb))
+ return 0;
+ if (pext == NULL)
+ return 1;
+ return tls1_set_curves(pext, pextlen, ncb.nid_arr, ncb.nidcnt);
+}
+
+/* For an EC key set TLS id and required compression based on parameters */
+static int tls1_set_ec_id(unsigned char *curve_id, unsigned char *comp_id,
+ EC_KEY *ec)
+{
+ int is_prime, id;
+ const EC_GROUP *grp;
+ const EC_METHOD *meth;
+ if (!ec)
+ return 0;
+ /* Determine if it is a prime field */
+ grp = EC_KEY_get0_group(ec);
+ if (!grp)
+ return 0;
+ meth = EC_GROUP_method_of(grp);
+ if (!meth)
+ return 0;
+ if (EC_METHOD_get_field_type(meth) == NID_X9_62_prime_field)
+ is_prime = 1;
+ else
+ is_prime = 0;
+ /* Determine curve ID */
+ id = EC_GROUP_get_curve_name(grp);
+ id = tls1_ec_nid2curve_id(id);
+ /* If we have an ID set it, otherwise set arbitrary explicit curve */
+ if (id) {
+ curve_id[0] = 0;
+ curve_id[1] = (unsigned char)id;
+ } else {
+ curve_id[0] = 0xff;
+ if (is_prime)
+ curve_id[1] = 0x01;
+ else
+ curve_id[1] = 0x02;
+ }
+ if (comp_id) {
+ if (EC_KEY_get0_public_key(ec) == NULL)
+ return 0;
+ if (EC_KEY_get_conv_form(ec) == POINT_CONVERSION_COMPRESSED) {
+ if (is_prime)
+ *comp_id = TLSEXT_ECPOINTFORMAT_ansiX962_compressed_prime;
+ else
+ *comp_id = TLSEXT_ECPOINTFORMAT_ansiX962_compressed_char2;
+ } else
+ *comp_id = TLSEXT_ECPOINTFORMAT_uncompressed;
+ }
+ return 1;
+}
+
+/* Check an EC key is compatible with extensions */
+static int tls1_check_ec_key(SSL *s,
+ unsigned char *curve_id, unsigned char *comp_id)
+{
+ const unsigned char *pformats, *pcurves;
+ size_t num_formats, num_curves, i;
+ int j;
+ /*
+ * If point formats extension present check it, otherwise everything is
+ * supported (see RFC4492).
+ */
+ if (comp_id && s->session->tlsext_ecpointformatlist) {
+ pformats = s->session->tlsext_ecpointformatlist;
+ num_formats = s->session->tlsext_ecpointformatlist_length;
+ for (i = 0; i < num_formats; i++, pformats++) {
+ if (*comp_id == *pformats)
+ break;
+ }
+ if (i == num_formats)
+ return 0;
+ }
+ if (!curve_id)
+ return 1;
+ /* Check curve is consistent with client and server preferences */
+ for (j = 0; j <= 1; j++) {
+ if (!tls1_get_curvelist(s, j, &pcurves, &num_curves))
+ return 0;
+ if (j == 1 && num_curves == 0) {
+ /*
+ * If we've not received any curves then skip this check.
+ * RFC 4492 does not require the supported elliptic curves extension
+ * so if it is not sent we can just choose any curve.
+ * It is invalid to send an empty list in the elliptic curves
+ * extension, so num_curves == 0 always means no extension.
+ */
+ break;
+ }
+ for (i = 0; i < num_curves; i++, pcurves += 2) {
+ if (pcurves[0] == curve_id[0] && pcurves[1] == curve_id[1])
+ break;
+ }
+ if (i == num_curves)
+ return 0;
+ /* For clients can only check sent curve list */
+ if (!s->server)
+ return 1;
+ }
+ return 1;
+}
+
+static void tls1_get_formatlist(SSL *s, const unsigned char **pformats,
+ size_t *num_formats)
+{
+ /*
+ * If we have a custom point format list use it otherwise use default
+ */
+ if (s->tlsext_ecpointformatlist) {
+ *pformats = s->tlsext_ecpointformatlist;
+ *num_formats = s->tlsext_ecpointformatlist_length;
+ } else {
+ *pformats = ecformats_default;
+ /* For Suite B we don't support char2 fields */
+ if (tls1_suiteb(s))
+ *num_formats = sizeof(ecformats_default) - 1;
+ else
+ *num_formats = sizeof(ecformats_default);
+ }
+}
+
+/*
+ * Check cert parameters compatible with extensions: currently just checks EC
+ * certificates have compatible curves and compression.
+ */
+static int tls1_check_cert_param(SSL *s, X509 *x, int set_ee_md)
+{
+ unsigned char comp_id, curve_id[2];
+ EVP_PKEY *pkey;
+ int rv;
+ pkey = X509_get_pubkey(x);
+ if (!pkey)
+ return 0;
+ /* If not EC nothing to do */
+ if (pkey->type != EVP_PKEY_EC) {
+ EVP_PKEY_free(pkey);
+ return 1;
+ }
+ rv = tls1_set_ec_id(curve_id, &comp_id, pkey->pkey.ec);
+ EVP_PKEY_free(pkey);
+ if (!rv)
+ return 0;
+ /*
+ * Can't check curve_id for client certs as we don't have a supported
+ * curves extension.
+ */
+ rv = tls1_check_ec_key(s, s->server ? curve_id : NULL, &comp_id);
+ if (!rv)
+ return 0;
+ /*
+ * Special case for suite B. We *MUST* sign using SHA256+P-256 or
+ * SHA384+P-384, adjust digest if necessary.
+ */
+ if (set_ee_md && tls1_suiteb(s)) {
+ int check_md;
+ size_t i;
+ CERT *c = s->cert;
+ if (curve_id[0])
+ return 0;
+ /* Check to see we have necessary signing algorithm */
+ if (curve_id[1] == TLSEXT_curve_P_256)
+ check_md = NID_ecdsa_with_SHA256;
+ else if (curve_id[1] == TLSEXT_curve_P_384)
+ check_md = NID_ecdsa_with_SHA384;
+ else
+ return 0; /* Should never happen */
+ for (i = 0; i < c->shared_sigalgslen; i++)
+ if (check_md == c->shared_sigalgs[i].signandhash_nid)
+ break;
+ if (i == c->shared_sigalgslen)
+ return 0;
+ if (set_ee_md == 2) {
+ if (check_md == NID_ecdsa_with_SHA256)
+ c->pkeys[SSL_PKEY_ECC].digest = EVP_sha256();
+ else
+ c->pkeys[SSL_PKEY_ECC].digest = EVP_sha384();
+ }
+ }
+ return rv;
+}
+
+# ifndef OPENSSL_NO_ECDH
+/* Check EC temporary key is compatible with client extensions */
+int tls1_check_ec_tmp_key(SSL *s, unsigned long cid)
+{
+ unsigned char curve_id[2];
+ EC_KEY *ec = s->cert->ecdh_tmp;
+# ifdef OPENSSL_SSL_DEBUG_BROKEN_PROTOCOL
+ /* Allow any curve: not just those peer supports */
+ if (s->cert->cert_flags & SSL_CERT_FLAG_BROKEN_PROTOCOL)
+ return 1;
+# endif
+ /*
+ * If Suite B, AES128 MUST use P-256 and AES256 MUST use P-384, no other
+ * curves permitted.
+ */
+ if (tls1_suiteb(s)) {
+ /* Curve to check determined by ciphersuite */
+ if (cid == TLS1_CK_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256)
+ curve_id[1] = TLSEXT_curve_P_256;
+ else if (cid == TLS1_CK_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384)
+ curve_id[1] = TLSEXT_curve_P_384;
+ else
+ return 0;
+ curve_id[0] = 0;
+ /* Check this curve is acceptable */
+ if (!tls1_check_ec_key(s, curve_id, NULL))
+ return 0;
+ /* If auto or setting curve from callback assume OK */
+ if (s->cert->ecdh_tmp_auto || s->cert->ecdh_tmp_cb)
+ return 1;
+ /* Otherwise check curve is acceptable */
+ else {
+ unsigned char curve_tmp[2];
+ if (!ec)
+ return 0;
+ if (!tls1_set_ec_id(curve_tmp, NULL, ec))
+ return 0;
+ if (!curve_tmp[0] || curve_tmp[1] == curve_id[1])
+ return 1;
+ return 0;
+ }
+
+ }
+ if (s->cert->ecdh_tmp_auto) {
+ /* Need a shared curve */
+ if (tls1_shared_curve(s, 0))
+ return 1;
+ else
+ return 0;
+ }
+ if (!ec) {
+ if (s->cert->ecdh_tmp_cb)
+ return 1;
+ else
+ return 0;
+ }
+ if (!tls1_set_ec_id(curve_id, NULL, ec))
+ return 0;
+/* Set this to allow use of invalid curves for testing */
+# if 0
+ return 1;
+# else
+ return tls1_check_ec_key(s, curve_id, NULL);
+# endif
+}
+# endif /* OPENSSL_NO_ECDH */
+
+#else
+
+static int tls1_check_cert_param(SSL *s, X509 *x, int set_ee_md)
+{
+ return 1;
+}
+
#endif /* OPENSSL_NO_EC */
#ifndef OPENSSL_NO_TLSEXT
@@ -357,20 +1026,231 @@ static unsigned char tls12_sigalgs[] = {
# endif
};
-int tls12_get_req_sig_algs(SSL *s, unsigned char *p)
+# ifndef OPENSSL_NO_ECDSA
+static unsigned char suiteb_sigalgs[] = {
+ tlsext_sigalg_ecdsa(TLSEXT_hash_sha256)
+ tlsext_sigalg_ecdsa(TLSEXT_hash_sha384)
+};
+# endif
+size_t tls12_get_psigalgs(SSL *s, const unsigned char **psigs)
{
- size_t slen = sizeof(tls12_sigalgs);
- if (p)
- memcpy(p, tls12_sigalgs, slen);
- return (int)slen;
+ /*
+ * If Suite B mode use Suite B sigalgs only, ignore any other
+ * preferences.
+ */
+# ifndef OPENSSL_NO_EC
+ switch (tls1_suiteb(s)) {
+ case SSL_CERT_FLAG_SUITEB_128_LOS:
+ *psigs = suiteb_sigalgs;
+ return sizeof(suiteb_sigalgs);
+
+ case SSL_CERT_FLAG_SUITEB_128_LOS_ONLY:
+ *psigs = suiteb_sigalgs;
+ return 2;
+
+ case SSL_CERT_FLAG_SUITEB_192_LOS:
+ *psigs = suiteb_sigalgs + 2;
+ return 2;
+ }
+# endif
+ /* If server use client authentication sigalgs if not NULL */
+ if (s->server && s->cert->client_sigalgs) {
+ *psigs = s->cert->client_sigalgs;
+ return s->cert->client_sigalgslen;
+ } else if (s->cert->conf_sigalgs) {
+ *psigs = s->cert->conf_sigalgs;
+ return s->cert->conf_sigalgslen;
+ } else {
+ *psigs = tls12_sigalgs;
+ return sizeof(tls12_sigalgs);
+ }
+}
+
+/*
+ * Check signature algorithm is consistent with sent supported signature
+ * algorithms and if so return relevant digest.
+ */
+int tls12_check_peer_sigalg(const EVP_MD **pmd, SSL *s,
+ const unsigned char *sig, EVP_PKEY *pkey)
+{
+ const unsigned char *sent_sigs;
+ size_t sent_sigslen, i;
+ int sigalg = tls12_get_sigid(pkey);
+ /* Should never happen */
+ if (sigalg == -1)
+ return -1;
+ /* Check key type is consistent with signature */
+ if (sigalg != (int)sig[1]) {
+ SSLerr(SSL_F_TLS12_CHECK_PEER_SIGALG, SSL_R_WRONG_SIGNATURE_TYPE);
+ return 0;
+ }
+# ifndef OPENSSL_NO_EC
+ if (pkey->type == EVP_PKEY_EC) {
+ unsigned char curve_id[2], comp_id;
+ /* Check compression and curve matches extensions */
+ if (!tls1_set_ec_id(curve_id, &comp_id, pkey->pkey.ec))
+ return 0;
+ if (!s->server && !tls1_check_ec_key(s, curve_id, &comp_id)) {
+ SSLerr(SSL_F_TLS12_CHECK_PEER_SIGALG, SSL_R_WRONG_CURVE);
+ return 0;
+ }
+ /* If Suite B only P-384+SHA384 or P-256+SHA-256 allowed */
+ if (tls1_suiteb(s)) {
+ if (curve_id[0])
+ return 0;
+ if (curve_id[1] == TLSEXT_curve_P_256) {
+ if (sig[0] != TLSEXT_hash_sha256) {
+ SSLerr(SSL_F_TLS12_CHECK_PEER_SIGALG,
+ SSL_R_ILLEGAL_SUITEB_DIGEST);
+ return 0;
+ }
+ } else if (curve_id[1] == TLSEXT_curve_P_384) {
+ if (sig[0] != TLSEXT_hash_sha384) {
+ SSLerr(SSL_F_TLS12_CHECK_PEER_SIGALG,
+ SSL_R_ILLEGAL_SUITEB_DIGEST);
+ return 0;
+ }
+ } else
+ return 0;
+ }
+ } else if (tls1_suiteb(s))
+ return 0;
+# endif
+
+ /* Check signature matches a type we sent */
+ sent_sigslen = tls12_get_psigalgs(s, &sent_sigs);
+ for (i = 0; i < sent_sigslen; i += 2, sent_sigs += 2) {
+ if (sig[0] == sent_sigs[0] && sig[1] == sent_sigs[1])
+ break;
+ }
+ /* Allow fallback to SHA1 if not strict mode */
+ if (i == sent_sigslen
+ && (sig[0] != TLSEXT_hash_sha1
+ || s->cert->cert_flags & SSL_CERT_FLAGS_CHECK_TLS_STRICT)) {
+ SSLerr(SSL_F_TLS12_CHECK_PEER_SIGALG, SSL_R_WRONG_SIGNATURE_TYPE);
+ return 0;
+ }
+ *pmd = tls12_get_hash(sig[0]);
+ if (*pmd == NULL) {
+ SSLerr(SSL_F_TLS12_CHECK_PEER_SIGALG, SSL_R_UNKNOWN_DIGEST);
+ return 0;
+ }
+ /*
+ * Store the digest used so applications can retrieve it if they wish.
+ */
+ if (s->session && s->session->sess_cert)
+ s->session->sess_cert->peer_key->digest = *pmd;
+ return 1;
+}
+
+/*
+ * Get a mask of disabled algorithms: an algorithm is disabled if it isn't
+ * supported or doesn't appear in supported signature algorithms. Unlike
+ * ssl_cipher_get_disabled this applies to a specific session and not global
+ * settings.
+ */
+void ssl_set_client_disabled(SSL *s)
+{
+ CERT *c = s->cert;
+ const unsigned char *sigalgs;
+ size_t i, sigalgslen;
+ int have_rsa = 0, have_dsa = 0, have_ecdsa = 0;
+ c->mask_a = 0;
+ c->mask_k = 0;
+ /* Don't allow TLS 1.2 only ciphers if we don't suppport them */
+ if (!SSL_CLIENT_USE_TLS1_2_CIPHERS(s))
+ c->mask_ssl = SSL_TLSV1_2;
+ else
+ c->mask_ssl = 0;
+ /*
+ * Now go through all signature algorithms seeing if we support any for
+ * RSA, DSA, ECDSA. Do this for all versions not just TLS 1.2.
+ */
+ sigalgslen = tls12_get_psigalgs(s, &sigalgs);
+ for (i = 0; i < sigalgslen; i += 2, sigalgs += 2) {
+ switch (sigalgs[1]) {
+# ifndef OPENSSL_NO_RSA
+ case TLSEXT_signature_rsa:
+ have_rsa = 1;
+ break;
+# endif
+# ifndef OPENSSL_NO_DSA
+ case TLSEXT_signature_dsa:
+ have_dsa = 1;
+ break;
+# endif
+# ifndef OPENSSL_NO_ECDSA
+ case TLSEXT_signature_ecdsa:
+ have_ecdsa = 1;
+ break;
+# endif
+ }
+ }
+ /*
+ * Disable auth and static DH if we don't include any appropriate
+ * signature algorithms.
+ */
+ if (!have_rsa) {
+ c->mask_a |= SSL_aRSA;
+ c->mask_k |= SSL_kDHr | SSL_kECDHr;
+ }
+ if (!have_dsa) {
+ c->mask_a |= SSL_aDSS;
+ c->mask_k |= SSL_kDHd;
+ }
+ if (!have_ecdsa) {
+ c->mask_a |= SSL_aECDSA;
+ c->mask_k |= SSL_kECDHe;
+ }
+# ifndef OPENSSL_NO_KRB5
+ if (!kssl_tgt_is_available(s->kssl_ctx)) {
+ c->mask_a |= SSL_aKRB5;
+ c->mask_k |= SSL_kKRB5;
+ }
+# endif
+# ifndef OPENSSL_NO_PSK
+ /* with PSK there must be client callback set */
+ if (!s->psk_client_callback) {
+ c->mask_a |= SSL_aPSK;
+ c->mask_k |= SSL_kPSK;
+ }
+# endif /* OPENSSL_NO_PSK */
+# ifndef OPENSSL_NO_SRP
+ if (!(s->srp_ctx.srp_Mask & SSL_kSRP)) {
+ c->mask_a |= SSL_aSRP;
+ c->mask_k |= SSL_kSRP;
+ }
+# endif
+ c->valid = 1;
}
unsigned char *ssl_add_clienthello_tlsext(SSL *s, unsigned char *buf,
- unsigned char *limit)
+ unsigned char *limit, int *al)
{
int extdatalen = 0;
unsigned char *orig = buf;
unsigned char *ret = buf;
+# ifndef OPENSSL_NO_EC
+ /* See if we support any ECC ciphersuites */
+ int using_ecc = 0;
+ if (s->version >= TLS1_VERSION || SSL_IS_DTLS(s)) {
+ int i;
+ unsigned long alg_k, alg_a;
+ STACK_OF(SSL_CIPHER) *cipher_stack = SSL_get_ciphers(s);
+
+ for (i = 0; i < sk_SSL_CIPHER_num(cipher_stack); i++) {
+ SSL_CIPHER *c = sk_SSL_CIPHER_value(cipher_stack, i);
+
+ alg_k = c->algorithm_mkey;
+ alg_a = c->algorithm_auth;
+ if ((alg_k & (SSL_kEECDH | SSL_kECDHr | SSL_kECDHe)
+ || (alg_a & SSL_aECDSA))) {
+ using_ecc = 1;
+ break;
+ }
+ }
+ }
+# endif
/* don't add extensions for SSLv3 unless doing secure renegotiation */
if (s->client_version == SSL3_VERSION && !s->s3->send_connection_binding)
@@ -466,50 +1346,53 @@ unsigned char *ssl_add_clienthello_tlsext(SSL *s, unsigned char *buf,
# endif
# ifndef OPENSSL_NO_EC
- if (s->tlsext_ecpointformatlist != NULL) {
+ if (using_ecc) {
/*
* Add TLS extension ECPointFormats to the ClientHello message
*/
long lenmax;
+ const unsigned char *pcurves, *pformats;
+ size_t num_curves, num_formats, curves_list_len;
+
+ tls1_get_formatlist(s, &pformats, &num_formats);
if ((lenmax = limit - ret - 5) < 0)
return NULL;
- if (s->tlsext_ecpointformatlist_length > (unsigned long)lenmax)
+ if (num_formats > (size_t)lenmax)
return NULL;
- if (s->tlsext_ecpointformatlist_length > 255) {
+ if (num_formats > 255) {
SSLerr(SSL_F_SSL_ADD_CLIENTHELLO_TLSEXT, ERR_R_INTERNAL_ERROR);
return NULL;
}
s2n(TLSEXT_TYPE_ec_point_formats, ret);
- s2n(s->tlsext_ecpointformatlist_length + 1, ret);
- *(ret++) = (unsigned char)s->tlsext_ecpointformatlist_length;
- memcpy(ret, s->tlsext_ecpointformatlist,
- s->tlsext_ecpointformatlist_length);
- ret += s->tlsext_ecpointformatlist_length;
- }
- if (s->tlsext_ellipticcurvelist != NULL) {
+ /* The point format list has 1-byte length. */
+ s2n(num_formats + 1, ret);
+ *(ret++) = (unsigned char)num_formats;
+ memcpy(ret, pformats, num_formats);
+ ret += num_formats;
+
/*
* Add TLS extension EllipticCurves to the ClientHello message
*/
- long lenmax;
+ pcurves = s->tlsext_ellipticcurvelist;
+ if (!tls1_get_curvelist(s, 0, &pcurves, &num_curves))
+ return NULL;
if ((lenmax = limit - ret - 6) < 0)
return NULL;
- if (s->tlsext_ellipticcurvelist_length > (unsigned long)lenmax)
+ if (num_curves > (size_t)lenmax / 2)
return NULL;
- if (s->tlsext_ellipticcurvelist_length > 65532) {
+ if (num_curves > 65532 / 2) {
SSLerr(SSL_F_SSL_ADD_CLIENTHELLO_TLSEXT, ERR_R_INTERNAL_ERROR);
return NULL;
}
-
+ curves_list_len = 2 * num_curves;
s2n(TLSEXT_TYPE_elliptic_curves, ret);
- s2n(s->tlsext_ellipticcurvelist_length + 2, ret);
-
- s2n(s->tlsext_ellipticcurvelist_length, ret);
- memcpy(ret, s->tlsext_ellipticcurvelist,
- s->tlsext_ellipticcurvelist_length);
- ret += s->tlsext_ellipticcurvelist_length;
+ s2n(curves_list_len + 2, ret);
+ s2n(curves_list_len, ret);
+ memcpy(ret, pcurves, curves_list_len);
+ ret += curves_list_len;
}
# endif /* OPENSSL_NO_EC */
@@ -546,17 +1429,20 @@ unsigned char *ssl_add_clienthello_tlsext(SSL *s, unsigned char *buf,
}
skip_ext:
- if (TLS1_get_client_version(s) >= TLS1_2_VERSION) {
- if ((size_t)(limit - ret) < sizeof(tls12_sigalgs) + 6)
+ if (SSL_USE_SIGALGS(s)) {
+ size_t salglen;
+ const unsigned char *salg;
+ salglen = tls12_get_psigalgs(s, &salg);
+ if ((size_t)(limit - ret) < salglen + 6)
return NULL;
s2n(TLSEXT_TYPE_signature_algorithms, ret);
- s2n(sizeof(tls12_sigalgs) + 2, ret);
- s2n(sizeof(tls12_sigalgs), ret);
- memcpy(ret, tls12_sigalgs, sizeof(tls12_sigalgs));
- ret += sizeof(tls12_sigalgs);
+ s2n(salglen + 2, ret);
+ s2n(salglen, ret);
+ memcpy(ret, salg, salglen);
+ ret += salglen;
}
# ifdef TLSEXT_TYPE_opaque_prf_input
- if (s->s3->client_opaque_prf_input != NULL && s->version != DTLS1_VERSION) {
+ if (s->s3->client_opaque_prf_input != NULL) {
size_t col = s->s3->client_opaque_prf_input_len;
if ((long)(limit - ret - 6 - col < 0))
@@ -572,8 +1458,7 @@ unsigned char *ssl_add_clienthello_tlsext(SSL *s, unsigned char *buf,
}
# endif
- if (s->tlsext_status_type == TLSEXT_STATUSTYPE_ocsp &&
- s->version != DTLS1_VERSION) {
+ if (s->tlsext_status_type == TLSEXT_STATUSTYPE_ocsp) {
int i;
long extlen, idlen, itmp;
OCSP_RESPID *id;
@@ -646,6 +1531,15 @@ unsigned char *ssl_add_clienthello_tlsext(SSL *s, unsigned char *buf,
}
# endif
+ if (s->alpn_client_proto_list && !s->s3->tmp.finish_md_len) {
+ if ((size_t)(limit - ret) < 6 + s->alpn_client_proto_list_len)
+ return NULL;
+ s2n(TLSEXT_TYPE_application_layer_protocol_negotiation, ret);
+ s2n(2 + s->alpn_client_proto_list_len, ret);
+ s2n(s->alpn_client_proto_list_len, ret);
+ memcpy(ret, s->alpn_client_proto_list, s->alpn_client_proto_list_len);
+ ret += s->alpn_client_proto_list_len;
+ }
# ifndef OPENSSL_NO_SRTP
if (SSL_IS_DTLS(s) && SSL_get_srtp_profiles(s)) {
int el;
@@ -665,6 +1559,11 @@ unsigned char *ssl_add_clienthello_tlsext(SSL *s, unsigned char *buf,
ret += el;
}
# endif
+ custom_ext_init(&s->cert->cli_ext);
+ /* Add custom TLS Extensions to ClientHello */
+ if (!custom_ext_add(s, 0, &ret, limit, al))
+ return NULL;
+
/*
* Add padding to workaround bugs in F5 terminators. See
* https://tools.ietf.org/html/draft-agl-tls-padding-03 NB: because this
@@ -702,7 +1601,7 @@ unsigned char *ssl_add_clienthello_tlsext(SSL *s, unsigned char *buf,
}
unsigned char *ssl_add_serverhello_tlsext(SSL *s, unsigned char *buf,
- unsigned char *limit)
+ unsigned char *limit, int *al)
{
int extdatalen = 0;
unsigned char *orig = buf;
@@ -710,7 +1609,13 @@ unsigned char *ssl_add_serverhello_tlsext(SSL *s, unsigned char *buf,
# ifndef OPENSSL_NO_NEXTPROTONEG
int next_proto_neg_seen;
# endif
-
+# ifndef OPENSSL_NO_EC
+ unsigned long alg_k = s->s3->tmp.new_cipher->algorithm_mkey;
+ unsigned long alg_a = s->s3->tmp.new_cipher->algorithm_auth;
+ int using_ecc = (alg_k & (SSL_kEECDH | SSL_kECDHr | SSL_kECDHe))
+ || (alg_a & SSL_aECDSA);
+ using_ecc = using_ecc && (s->session->tlsext_ecpointformatlist != NULL);
+# endif
/*
* don't add extensions for SSLv3, unless doing secure renegotiation
*/
@@ -752,27 +1657,30 @@ unsigned char *ssl_add_serverhello_tlsext(SSL *s, unsigned char *buf,
ret += el;
}
# ifndef OPENSSL_NO_EC
- if (s->tlsext_ecpointformatlist != NULL) {
+ if (using_ecc) {
+ const unsigned char *plist;
+ size_t plistlen;
/*
* Add TLS extension ECPointFormats to the ServerHello message
*/
long lenmax;
+ tls1_get_formatlist(s, &plist, &plistlen);
+
if ((lenmax = limit - ret - 5) < 0)
return NULL;
- if (s->tlsext_ecpointformatlist_length > (unsigned long)lenmax)
+ if (plistlen > (size_t)lenmax)
return NULL;
- if (s->tlsext_ecpointformatlist_length > 255) {
+ if (plistlen > 255) {
SSLerr(SSL_F_SSL_ADD_SERVERHELLO_TLSEXT, ERR_R_INTERNAL_ERROR);
return NULL;
}
s2n(TLSEXT_TYPE_ec_point_formats, ret);
- s2n(s->tlsext_ecpointformatlist_length + 1, ret);
- *(ret++) = (unsigned char)s->tlsext_ecpointformatlist_length;
- memcpy(ret, s->tlsext_ecpointformatlist,
- s->tlsext_ecpointformatlist_length);
- ret += s->tlsext_ecpointformatlist_length;
+ s2n(plistlen + 1, ret);
+ *(ret++) = (unsigned char)plistlen;
+ memcpy(ret, plist, plistlen);
+ ret += plistlen;
}
/*
@@ -795,7 +1703,7 @@ unsigned char *ssl_add_serverhello_tlsext(SSL *s, unsigned char *buf,
s2n(0, ret);
}
# ifdef TLSEXT_TYPE_opaque_prf_input
- if (s->s3->server_opaque_prf_input != NULL && s->version != DTLS1_VERSION) {
+ if (s->s3->server_opaque_prf_input != NULL) {
size_t sol = s->s3->server_opaque_prf_input_len;
if ((long)(limit - ret - 6 - sol) < 0)
@@ -890,6 +1798,22 @@ unsigned char *ssl_add_serverhello_tlsext(SSL *s, unsigned char *buf,
}
}
# endif
+ if (!custom_ext_add(s, 1, &ret, limit, al))
+ return NULL;
+
+ if (s->s3->alpn_selected) {
+ const unsigned char *selected = s->s3->alpn_selected;
+ unsigned len = s->s3->alpn_selected_len;
+
+ if ((long)(limit - ret - 4 - 2 - 1 - len) < 0)
+ return NULL;
+ s2n(TLSEXT_TYPE_application_layer_protocol_negotiation, ret);
+ s2n(3 + len, ret);
+ s2n(1 + len, ret);
+ *ret++ = len;
+ memcpy(ret, selected, len);
+ ret += len;
+ }
if ((extdatalen = ret - orig - 2) == 0)
return orig;
@@ -981,15 +1905,82 @@ static void ssl_check_for_safari(SSL *s, const unsigned char *data,
}
# endif /* !OPENSSL_NO_EC */
-int ssl_parse_clienthello_tlsext(SSL *s, unsigned char **p, unsigned char *d,
- int n, int *al)
+/*
+ * tls1_alpn_handle_client_hello is called to process the ALPN extension in a
+ * ClientHello. data: the contents of the extension, not including the type
+ * and length. data_len: the number of bytes in |data| al: a pointer to the
+ * alert value to send in the event of a non-zero return. returns: 0 on
+ * success.
+ */
+static int tls1_alpn_handle_client_hello(SSL *s, const unsigned char *data,
+ unsigned data_len, int *al)
+{
+ unsigned i;
+ unsigned proto_len;
+ const unsigned char *selected;
+ unsigned char selected_len;
+ int r;
+
+ if (s->ctx->alpn_select_cb == NULL)
+ return 0;
+
+ if (data_len < 2)
+ goto parse_error;
+
+ /*
+ * data should contain a uint16 length followed by a series of 8-bit,
+ * length-prefixed strings.
+ */
+ i = ((unsigned)data[0]) << 8 | ((unsigned)data[1]);
+ data_len -= 2;
+ data += 2;
+ if (data_len != i)
+ goto parse_error;
+
+ if (data_len < 2)
+ goto parse_error;
+
+ for (i = 0; i < data_len;) {
+ proto_len = data[i];
+ i++;
+
+ if (proto_len == 0)
+ goto parse_error;
+
+ if (i + proto_len < i || i + proto_len > data_len)
+ goto parse_error;
+
+ i += proto_len;
+ }
+
+ r = s->ctx->alpn_select_cb(s, &selected, &selected_len, data, data_len,
+ s->ctx->alpn_select_cb_arg);
+ if (r == SSL_TLSEXT_ERR_OK) {
+ if (s->s3->alpn_selected)
+ OPENSSL_free(s->s3->alpn_selected);
+ s->s3->alpn_selected = OPENSSL_malloc(selected_len);
+ if (!s->s3->alpn_selected) {
+ *al = SSL_AD_INTERNAL_ERROR;
+ return -1;
+ }
+ memcpy(s->s3->alpn_selected, selected, selected_len);
+ s->s3->alpn_selected_len = selected_len;
+ }
+ return 0;
+
+ parse_error:
+ *al = SSL_AD_DECODE_ERROR;
+ return -1;
+}
+
+static int ssl_scan_clienthello_tlsext(SSL *s, unsigned char **p,
+ unsigned char *d, int n, int *al)
{
unsigned short type;
unsigned short size;
unsigned short len;
unsigned char *data = *p;
int renegotiate_seen = 0;
- int sigalg_seen = 0;
s->servername_done = 0;
s->tlsext_status_type = -1;
@@ -997,6 +1988,10 @@ int ssl_parse_clienthello_tlsext(SSL *s, unsigned char **p, unsigned char *d,
s->s3->next_proto_neg_seen = 0;
# endif
+ if (s->s3->alpn_selected) {
+ OPENSSL_free(s->s3->alpn_selected);
+ s->s3->alpn_selected = NULL;
+ }
# ifndef OPENSSL_NO_HEARTBEATS
s->tlsext_heartbeat &= ~(SSL_TLSEXT_HB_ENABLED |
SSL_TLSEXT_HB_DONT_SEND_REQUESTS);
@@ -1007,6 +2002,11 @@ int ssl_parse_clienthello_tlsext(SSL *s, unsigned char **p, unsigned char *d,
ssl_check_for_safari(s, data, d, n);
# endif /* !OPENSSL_NO_EC */
+ /* Clear any signature algorithms extension received */
+ if (s->cert->peer_sigalgs) {
+ OPENSSL_free(s->cert->peer_sigalgs);
+ s->cert->peer_sigalgs = NULL;
+ }
# ifndef OPENSSL_NO_SRP
if (s->srp_ctx.login != NULL) {
OPENSSL_free(s->srp_ctx.login);
@@ -1149,7 +2149,8 @@ int ssl_parse_clienthello_tlsext(SSL *s, unsigned char **p, unsigned char *d,
unsigned char *sdata = data;
int ecpointformatlist_length = *(sdata++);
- if (ecpointformatlist_length != size - 1)
+ if (ecpointformatlist_length != size - 1 ||
+ ecpointformatlist_length < 1)
goto err;
if (!s->hit) {
if (s->session->tlsext_ecpointformatlist) {
@@ -1214,8 +2215,7 @@ int ssl_parse_clienthello_tlsext(SSL *s, unsigned char **p, unsigned char *d,
}
# endif /* OPENSSL_NO_EC */
# ifdef TLSEXT_TYPE_opaque_prf_input
- else if (type == TLSEXT_TYPE_opaque_prf_input &&
- s->version != DTLS1_VERSION) {
+ else if (type == TLSEXT_TYPE_opaque_prf_input) {
unsigned char *sdata = data;
if (size < 2) {
@@ -1259,17 +2259,15 @@ int ssl_parse_clienthello_tlsext(SSL *s, unsigned char **p, unsigned char *d,
renegotiate_seen = 1;
} else if (type == TLSEXT_TYPE_signature_algorithms) {
int dsize;
- if (sigalg_seen || size < 2)
+ if (s->cert->peer_sigalgs || size < 2)
goto err;
- sigalg_seen = 1;
n2s(data, dsize);
size -= 2;
- if (dsize != size || dsize & 1)
+ if (dsize != size || dsize & 1 || !dsize)
goto err;
- if (!tls1_process_sigalgs(s, data, dsize))
+ if (!tls1_save_sigalgs(s, data, dsize))
goto err;
- } else if (type == TLSEXT_TYPE_status_request &&
- s->version != DTLS1_VERSION) {
+ } else if (type == TLSEXT_TYPE_status_request) {
if (size < 5)
goto err;
@@ -1361,7 +2359,8 @@ int ssl_parse_clienthello_tlsext(SSL *s, unsigned char **p, unsigned char *d,
# endif
# ifndef OPENSSL_NO_NEXTPROTONEG
else if (type == TLSEXT_TYPE_next_proto_neg &&
- s->s3->tmp.finish_md_len == 0) {
+ s->s3->tmp.finish_md_len == 0 &&
+ s->s3->alpn_selected == NULL) {
/*-
* We shouldn't accept this extension on a
* renegotiation.
@@ -1383,6 +2382,16 @@ int ssl_parse_clienthello_tlsext(SSL *s, unsigned char **p, unsigned char *d,
}
# endif
+ else if (type == TLSEXT_TYPE_application_layer_protocol_negotiation &&
+ s->ctx->alpn_select_cb && s->s3->tmp.finish_md_len == 0) {
+ if (tls1_alpn_handle_client_hello(s, data, size, al) != 0)
+ return 0;
+# ifndef OPENSSL_NO_NEXTPROTONEG
+ /* ALPN takes precedence over NPN. */
+ s->s3->next_proto_neg_seen = 0;
+# endif
+ }
+
/* session ticket processed earlier */
# ifndef OPENSSL_NO_SRTP
else if (SSL_IS_DTLS(s) && SSL_get_srtp_profiles(s)
@@ -1408,7 +2417,7 @@ int ssl_parse_clienthello_tlsext(SSL *s, unsigned char **p, unsigned char *d,
if (!renegotiate_seen && s->renegotiate &&
!(s->options & SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION)) {
*al = SSL_AD_HANDSHAKE_FAILURE;
- SSLerr(SSL_F_SSL_PARSE_CLIENTHELLO_TLSEXT,
+ SSLerr(SSL_F_SSL_SCAN_CLIENTHELLO_TLSEXT,
SSL_R_UNSAFE_LEGACY_RENEGOTIATION_DISABLED);
return 0;
}
@@ -1419,6 +2428,73 @@ err:
return 0;
}
+/*
+ * Parse any custom extensions found. "data" is the start of the extension data
+ * and "limit" is the end of the record. TODO: add strict syntax checking.
+ */
+
+static int ssl_scan_clienthello_custom_tlsext(SSL *s,
+ const unsigned char *data,
+ const unsigned char *limit,
+ int *al)
+{
+ unsigned short type, size, len;
+ /* If resumed session or no custom extensions nothing to do */
+ if (s->hit || s->cert->srv_ext.meths_count == 0)
+ return 1;
+
+ if (data >= limit - 2)
+ return 1;
+ n2s(data, len);
+
+ if (data > limit - len)
+ return 1;
+
+ while (data <= limit - 4) {
+ n2s(data, type);
+ n2s(data, size);
+
+ if (data + size > limit)
+ return 1;
+ if (custom_ext_parse(s, 1 /* server */ , type, data, size, al) <= 0)
+ return 0;
+
+ data += size;
+ }
+
+ return 1;
+}
+
+int ssl_parse_clienthello_tlsext(SSL *s, unsigned char **p, unsigned char *d,
+ int n)
+{
+ int al = -1;
+ unsigned char *ptmp = *p;
+ /*
+ * Internally supported extensions are parsed first so SNI can be handled
+ * before custom extensions. An application processing SNI will typically
+ * switch the parent context using SSL_set_SSL_CTX and custom extensions
+ * need to be handled by the new SSL_CTX structure.
+ */
+ if (ssl_scan_clienthello_tlsext(s, p, d, n, &al) <= 0) {
+ ssl3_send_alert(s, SSL3_AL_FATAL, al);
+ return 0;
+ }
+
+ if (ssl_check_clienthello_tlsext_early(s) <= 0) {
+ SSLerr(SSL_F_SSL_PARSE_CLIENTHELLO_TLSEXT, SSL_R_CLIENTHELLO_TLSEXT);
+ return 0;
+ }
+
+ custom_ext_init(&s->cert->srv_ext);
+ if (ssl_scan_clienthello_custom_tlsext(s, ptmp, d + n, &al) <= 0) {
+ ssl3_send_alert(s, SSL3_AL_FATAL, al);
+ return 0;
+ }
+
+ return 1;
+}
+
# ifndef OPENSSL_NO_NEXTPROTONEG
/*
* ssl_next_proto_validate validates a Next Protocol Negotiation block. No
@@ -1440,8 +2516,8 @@ static char ssl_next_proto_validate(unsigned char *d, unsigned len)
}
# endif
-int ssl_parse_serverhello_tlsext(SSL *s, unsigned char **p, unsigned char *d,
- int n, int *al)
+static int ssl_scan_serverhello_tlsext(SSL *s, unsigned char **p,
+ unsigned char *d, int n, int *al)
{
unsigned short length;
unsigned short type;
@@ -1455,6 +2531,10 @@ int ssl_parse_serverhello_tlsext(SSL *s, unsigned char **p, unsigned char *d,
# endif
s->tlsext_ticket_expected = 0;
+ if (s->s3->alpn_selected) {
+ OPENSSL_free(s->s3->alpn_selected);
+ s->s3->alpn_selected = NULL;
+ }
# ifndef OPENSSL_NO_HEARTBEATS
s->tlsext_heartbeat &= ~(SSL_TLSEXT_HB_ENABLED |
SSL_TLSEXT_HB_DONT_SEND_REQUESTS);
@@ -1491,8 +2571,7 @@ int ssl_parse_serverhello_tlsext(SSL *s, unsigned char **p, unsigned char *d,
unsigned char *sdata = data;
int ecpointformatlist_length = *(sdata++);
- if (ecpointformatlist_length != size - 1 ||
- ecpointformatlist_length < 1) {
+ if (ecpointformatlist_length != size - 1) {
*al = TLS1_AD_DECODE_ERROR;
return 0;
}
@@ -1537,8 +2616,7 @@ int ssl_parse_serverhello_tlsext(SSL *s, unsigned char **p, unsigned char *d,
s->tlsext_ticket_expected = 1;
}
# ifdef TLSEXT_TYPE_opaque_prf_input
- else if (type == TLSEXT_TYPE_opaque_prf_input &&
- s->version != DTLS1_VERSION) {
+ else if (type == TLSEXT_TYPE_opaque_prf_input) {
unsigned char *sdata = data;
if (size < 2) {
@@ -1569,8 +2647,7 @@ int ssl_parse_serverhello_tlsext(SSL *s, unsigned char **p, unsigned char *d,
}
}
# endif
- else if (type == TLSEXT_TYPE_status_request &&
- s->version != DTLS1_VERSION) {
+ else if (type == TLSEXT_TYPE_status_request) {
/*
* MUST be empty and only sent if we've requested a status
* request message.
@@ -1616,6 +2693,48 @@ int ssl_parse_serverhello_tlsext(SSL *s, unsigned char **p, unsigned char *d,
s->s3->next_proto_neg_seen = 1;
}
# endif
+
+ else if (type == TLSEXT_TYPE_application_layer_protocol_negotiation) {
+ unsigned len;
+
+ /* We must have requested it. */
+ if (s->alpn_client_proto_list == NULL) {
+ *al = TLS1_AD_UNSUPPORTED_EXTENSION;
+ return 0;
+ }
+ if (size < 4) {
+ *al = TLS1_AD_DECODE_ERROR;
+ return 0;
+ }
+ /*-
+ * The extension data consists of:
+ * uint16 list_length
+ * uint8 proto_length;
+ * uint8 proto[proto_length];
+ */
+ len = data[0];
+ len <<= 8;
+ len |= data[1];
+ if (len != (unsigned)size - 2) {
+ *al = TLS1_AD_DECODE_ERROR;
+ return 0;
+ }
+ len = data[2];
+ if (len != (unsigned)size - 3) {
+ *al = TLS1_AD_DECODE_ERROR;
+ return 0;
+ }
+ if (s->s3->alpn_selected)
+ OPENSSL_free(s->s3->alpn_selected);
+ s->s3->alpn_selected = OPENSSL_malloc(len);
+ if (!s->s3->alpn_selected) {
+ *al = TLS1_AD_INTERNAL_ERROR;
+ return 0;
+ }
+ memcpy(s->s3->alpn_selected, data + 3, len);
+ s->s3->alpn_selected_len = len;
+ }
+
else if (type == TLSEXT_TYPE_renegotiate) {
if (!ssl_parse_serverhello_renegotiate_ext(s, data, size, al))
return 0;
@@ -1643,6 +2762,12 @@ int ssl_parse_serverhello_tlsext(SSL *s, unsigned char **p, unsigned char *d,
return 0;
}
# endif
+ /*
+ * If this extension type was not otherwise handled, but matches a
+ * custom_cli_ext_record, then send it to the c callback
+ */
+ else if (custom_ext_parse(s, 0, type, data, size, al) <= 0)
+ return 0;
data += size;
}
@@ -1682,7 +2807,7 @@ int ssl_parse_serverhello_tlsext(SSL *s, unsigned char **p, unsigned char *d,
if (!renegotiate_seen && !(s->options & SSL_OP_LEGACY_SERVER_CONNECT)
&& !(s->options & SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION)) {
*al = SSL_AD_HANDSHAKE_FAILURE;
- SSLerr(SSL_F_SSL_PARSE_SERVERHELLO_TLSEXT,
+ SSLerr(SSL_F_SSL_SCAN_SERVERHELLO_TLSEXT,
SSL_R_UNSAFE_LEGACY_RENEGOTIATION_DISABLED);
return 0;
}
@@ -1692,63 +2817,6 @@ int ssl_parse_serverhello_tlsext(SSL *s, unsigned char **p, unsigned char *d,
int ssl_prepare_clienthello_tlsext(SSL *s)
{
-# ifndef OPENSSL_NO_EC
- /*
- * If we are client and using an elliptic curve cryptography cipher
- * suite, send the point formats and elliptic curves we support.
- */
- int using_ecc = 0;
- int i;
- unsigned char *j;
- unsigned long alg_k, alg_a;
- STACK_OF(SSL_CIPHER) *cipher_stack = SSL_get_ciphers(s);
-
- for (i = 0; i < sk_SSL_CIPHER_num(cipher_stack); i++) {
- SSL_CIPHER *c = sk_SSL_CIPHER_value(cipher_stack, i);
-
- alg_k = c->algorithm_mkey;
- alg_a = c->algorithm_auth;
- if ((alg_k & (SSL_kEECDH | SSL_kECDHr | SSL_kECDHe)
- || (alg_a & SSL_aECDSA))) {
- using_ecc = 1;
- break;
- }
- }
- using_ecc = using_ecc && (s->version >= TLS1_VERSION);
- if (using_ecc) {
- if (s->tlsext_ecpointformatlist != NULL)
- OPENSSL_free(s->tlsext_ecpointformatlist);
- if ((s->tlsext_ecpointformatlist = OPENSSL_malloc(3)) == NULL) {
- SSLerr(SSL_F_SSL_PREPARE_CLIENTHELLO_TLSEXT,
- ERR_R_MALLOC_FAILURE);
- return -1;
- }
- s->tlsext_ecpointformatlist_length = 3;
- s->tlsext_ecpointformatlist[0] = TLSEXT_ECPOINTFORMAT_uncompressed;
- s->tlsext_ecpointformatlist[1] =
- TLSEXT_ECPOINTFORMAT_ansiX962_compressed_prime;
- s->tlsext_ecpointformatlist[2] =
- TLSEXT_ECPOINTFORMAT_ansiX962_compressed_char2;
-
- /* we support all named elliptic curves in RFC 4492 */
- if (s->tlsext_ellipticcurvelist != NULL)
- OPENSSL_free(s->tlsext_ellipticcurvelist);
- s->tlsext_ellipticcurvelist_length =
- sizeof(pref_list) / sizeof(pref_list[0]) * 2;
- if ((s->tlsext_ellipticcurvelist =
- OPENSSL_malloc(s->tlsext_ellipticcurvelist_length)) == NULL) {
- s->tlsext_ellipticcurvelist_length = 0;
- SSLerr(SSL_F_SSL_PREPARE_CLIENTHELLO_TLSEXT,
- ERR_R_MALLOC_FAILURE);
- return -1;
- }
- for (i = 0, j = s->tlsext_ellipticcurvelist; (unsigned int)i <
- sizeof(pref_list) / sizeof(pref_list[0]); i++) {
- int id = tls1_ec_nid2curve_id(pref_list[i]);
- s2n(id, j);
- }
- }
-# endif /* OPENSSL_NO_EC */
# ifdef TLSEXT_TYPE_opaque_prf_input
{
@@ -1800,40 +2868,10 @@ int ssl_prepare_clienthello_tlsext(SSL *s)
int ssl_prepare_serverhello_tlsext(SSL *s)
{
-# ifndef OPENSSL_NO_EC
- /*
- * If we are server and using an ECC cipher suite, send the point formats
- * we support if the client sent us an ECPointsFormat extension. Note
- * that the server is not supposed to send an EllipticCurves extension.
- */
-
- unsigned long alg_k = s->s3->tmp.new_cipher->algorithm_mkey;
- unsigned long alg_a = s->s3->tmp.new_cipher->algorithm_auth;
- int using_ecc = (alg_k & (SSL_kEECDH | SSL_kECDHr | SSL_kECDHe))
- || (alg_a & SSL_aECDSA);
- using_ecc = using_ecc && (s->session->tlsext_ecpointformatlist != NULL);
-
- if (using_ecc) {
- if (s->tlsext_ecpointformatlist != NULL)
- OPENSSL_free(s->tlsext_ecpointformatlist);
- if ((s->tlsext_ecpointformatlist = OPENSSL_malloc(3)) == NULL) {
- SSLerr(SSL_F_SSL_PREPARE_SERVERHELLO_TLSEXT,
- ERR_R_MALLOC_FAILURE);
- return -1;
- }
- s->tlsext_ecpointformatlist_length = 3;
- s->tlsext_ecpointformatlist[0] = TLSEXT_ECPOINTFORMAT_uncompressed;
- s->tlsext_ecpointformatlist[1] =
- TLSEXT_ECPOINTFORMAT_ansiX962_compressed_prime;
- s->tlsext_ecpointformatlist[2] =
- TLSEXT_ECPOINTFORMAT_ansiX962_compressed_char2;
- }
-# endif /* OPENSSL_NO_EC */
-
return 1;
}
-int ssl_check_clienthello_tlsext_early(SSL *s)
+static int ssl_check_clienthello_tlsext_early(SSL *s)
{
int ret = SSL_TLSEXT_ERR_NOACK;
int al = SSL_AD_UNRECOGNIZED_NAME;
@@ -1943,6 +2981,44 @@ int ssl_check_clienthello_tlsext_early(SSL *s)
}
}
+int tls1_set_server_sigalgs(SSL *s)
+{
+ int al;
+ size_t i;
+ /* Clear any shared sigtnature algorithms */
+ if (s->cert->shared_sigalgs) {
+ OPENSSL_free(s->cert->shared_sigalgs);
+ s->cert->shared_sigalgs = NULL;
+ s->cert->shared_sigalgslen = 0;
+ }
+ /* Clear certificate digests and validity flags */
+ for (i = 0; i < SSL_PKEY_NUM; i++) {
+ s->cert->pkeys[i].digest = NULL;
+ s->cert->pkeys[i].valid_flags = 0;
+ }
+
+ /* If sigalgs received process it. */
+ if (s->cert->peer_sigalgs) {
+ if (!tls1_process_sigalgs(s)) {
+ SSLerr(SSL_F_TLS1_SET_SERVER_SIGALGS, ERR_R_MALLOC_FAILURE);
+ al = SSL_AD_INTERNAL_ERROR;
+ goto err;
+ }
+ /* Fatal error is no shared signature algorithms */
+ if (!s->cert->shared_sigalgs) {
+ SSLerr(SSL_F_TLS1_SET_SERVER_SIGALGS,
+ SSL_R_NO_SHARED_SIGATURE_ALGORITHMS);
+ al = SSL_AD_ILLEGAL_PARAMETER;
+ goto err;
+ }
+ } else
+ ssl_cert_set_default_md(s->cert);
+ return 1;
+ err:
+ ssl3_send_alert(s, SSL3_AL_FATAL, al);
+ return 0;
+}
+
int ssl_check_clienthello_tlsext_late(SSL *s)
{
int ret = SSL_TLSEXT_ERR_OK;
@@ -1950,9 +3026,9 @@ int ssl_check_clienthello_tlsext_late(SSL *s)
/*
* If status request then ask callback what to do. Note: this must be
- * called after servername callbacks in case the certificate has
- * changed, and must be called after the cipher has been chosen because
- * this may influence which certificate is sent
+ * called after servername callbacks in case the certificate has changed,
+ * and must be called after the cipher has been chosen because this may
+ * influence which certificate is sent
*/
if ((s->tlsext_status_type != -1) && s->ctx && s->ctx->tlsext_status_cb) {
int r;
@@ -2124,6 +3200,24 @@ int ssl_check_serverhello_tlsext(SSL *s)
}
}
+int ssl_parse_serverhello_tlsext(SSL *s, unsigned char **p, unsigned char *d,
+ int n)
+{
+ int al = -1;
+ if (s->version < SSL3_VERSION)
+ return 1;
+ if (ssl_scan_serverhello_tlsext(s, p, d, n, &al) <= 0) {
+ ssl3_send_alert(s, SSL3_AL_FATAL, al);
+ return 0;
+ }
+
+ if (ssl_check_serverhello_tlsext(s) <= 0) {
+ SSLerr(SSL_F_SSL_PARSE_SERVERHELLO_TLSEXT, SSL_R_SERVERHELLO_TLSEXT);
+ return 0;
+ }
+ return 1;
+}
+
/*-
* Since the server cache lookup is done early on in the processing of the
* ClientHello, and other operations depend on the result, we need to handle
@@ -2179,7 +3273,7 @@ int tls1_process_ticket(SSL *s, unsigned char *session_id, int len,
if (p >= limit)
return -1;
/* Skip past DTLS cookie */
- if (s->version == DTLS1_VERSION || s->version == DTLS1_BAD_VER) {
+ if (SSL_IS_DTLS(s)) {
i = *(p++);
p += i;
if (p >= limit)
@@ -2366,32 +3460,18 @@ typedef struct {
} tls12_lookup;
static tls12_lookup tls12_md[] = {
-# ifndef OPENSSL_NO_MD5
{NID_md5, TLSEXT_hash_md5},
-# endif
-# ifndef OPENSSL_NO_SHA
{NID_sha1, TLSEXT_hash_sha1},
-# endif
-# ifndef OPENSSL_NO_SHA256
{NID_sha224, TLSEXT_hash_sha224},
{NID_sha256, TLSEXT_hash_sha256},
-# endif
-# ifndef OPENSSL_NO_SHA512
{NID_sha384, TLSEXT_hash_sha384},
{NID_sha512, TLSEXT_hash_sha512}
-# endif
};
static tls12_lookup tls12_sig[] = {
-# ifndef OPENSSL_NO_RSA
{EVP_PKEY_RSA, TLSEXT_signature_rsa},
-# endif
-# ifndef OPENSSL_NO_DSA
{EVP_PKEY_DSA, TLSEXT_signature_dsa},
-# endif
-# ifndef OPENSSL_NO_ECDSA
{EVP_PKEY_EC, TLSEXT_signature_ecdsa}
-# endif
};
static int tls12_find_id(int nid, tls12_lookup *table, size_t tlen)
@@ -2404,17 +3484,15 @@ static int tls12_find_id(int nid, tls12_lookup *table, size_t tlen)
return -1;
}
-# if 0
static int tls12_find_nid(int id, tls12_lookup *table, size_t tlen)
{
size_t i;
for (i = 0; i < tlen; i++) {
- if (table[i].id == id)
+ if ((table[i].id) == id)
return table[i].nid;
}
- return -1;
+ return NID_undef;
}
-# endif
int tls12_get_sigandhash(unsigned char *p, const EVP_PKEY *pk,
const EVP_MD *md)
@@ -2443,6 +3521,14 @@ int tls12_get_sigid(const EVP_PKEY *pk)
const EVP_MD *tls12_get_hash(unsigned char hash_alg)
{
switch (hash_alg) {
+# ifndef OPENSSL_NO_MD5
+ case TLSEXT_hash_md5:
+# ifdef OPENSSL_FIPS
+ if (FIPS_mode())
+ return NULL;
+# endif
+ return EVP_md5();
+# endif
# ifndef OPENSSL_NO_SHA
case TLSEXT_hash_sha1:
return EVP_sha1();
@@ -2467,83 +3553,274 @@ const EVP_MD *tls12_get_hash(unsigned char hash_alg)
}
}
+static int tls12_get_pkey_idx(unsigned char sig_alg)
+{
+ switch (sig_alg) {
+# ifndef OPENSSL_NO_RSA
+ case TLSEXT_signature_rsa:
+ return SSL_PKEY_RSA_SIGN;
+# endif
+# ifndef OPENSSL_NO_DSA
+ case TLSEXT_signature_dsa:
+ return SSL_PKEY_DSA_SIGN;
+# endif
+# ifndef OPENSSL_NO_ECDSA
+ case TLSEXT_signature_ecdsa:
+ return SSL_PKEY_ECC;
+# endif
+ }
+ return -1;
+}
+
+/* Convert TLS 1.2 signature algorithm extension values into NIDs */
+static void tls1_lookup_sigalg(int *phash_nid, int *psign_nid,
+ int *psignhash_nid, const unsigned char *data)
+{
+ int sign_nid = 0, hash_nid = 0;
+ if (!phash_nid && !psign_nid && !psignhash_nid)
+ return;
+ if (phash_nid || psignhash_nid) {
+ hash_nid = tls12_find_nid(data[0], tls12_md,
+ sizeof(tls12_md) / sizeof(tls12_lookup));
+ if (phash_nid)
+ *phash_nid = hash_nid;
+ }
+ if (psign_nid || psignhash_nid) {
+ sign_nid = tls12_find_nid(data[1], tls12_sig,
+ sizeof(tls12_sig) / sizeof(tls12_lookup));
+ if (psign_nid)
+ *psign_nid = sign_nid;
+ }
+ if (psignhash_nid) {
+ if (sign_nid && hash_nid)
+ OBJ_find_sigid_by_algs(psignhash_nid, hash_nid, sign_nid);
+ else
+ *psignhash_nid = NID_undef;
+ }
+}
+
+/* Given preference and allowed sigalgs set shared sigalgs */
+static int tls12_do_shared_sigalgs(TLS_SIGALGS *shsig,
+ const unsigned char *pref, size_t preflen,
+ const unsigned char *allow,
+ size_t allowlen)
+{
+ const unsigned char *ptmp, *atmp;
+ size_t i, j, nmatch = 0;
+ for (i = 0, ptmp = pref; i < preflen; i += 2, ptmp += 2) {
+ /* Skip disabled hashes or signature algorithms */
+ if (tls12_get_hash(ptmp[0]) == NULL)
+ continue;
+ if (tls12_get_pkey_idx(ptmp[1]) == -1)
+ continue;
+ for (j = 0, atmp = allow; j < allowlen; j += 2, atmp += 2) {
+ if (ptmp[0] == atmp[0] && ptmp[1] == atmp[1]) {
+ nmatch++;
+ if (shsig) {
+ shsig->rhash = ptmp[0];
+ shsig->rsign = ptmp[1];
+ tls1_lookup_sigalg(&shsig->hash_nid,
+ &shsig->sign_nid,
+ &shsig->signandhash_nid, ptmp);
+ shsig++;
+ }
+ break;
+ }
+ }
+ }
+ return nmatch;
+}
+
+/* Set shared signature algorithms for SSL structures */
+static int tls1_set_shared_sigalgs(SSL *s)
+{
+ const unsigned char *pref, *allow, *conf;
+ size_t preflen, allowlen, conflen;
+ size_t nmatch;
+ TLS_SIGALGS *salgs = NULL;
+ CERT *c = s->cert;
+ unsigned int is_suiteb = tls1_suiteb(s);
+ if (c->shared_sigalgs) {
+ OPENSSL_free(c->shared_sigalgs);
+ c->shared_sigalgs = NULL;
+ c->shared_sigalgslen = 0;
+ }
+ /* If client use client signature algorithms if not NULL */
+ if (!s->server && c->client_sigalgs && !is_suiteb) {
+ conf = c->client_sigalgs;
+ conflen = c->client_sigalgslen;
+ } else if (c->conf_sigalgs && !is_suiteb) {
+ conf = c->conf_sigalgs;
+ conflen = c->conf_sigalgslen;
+ } else
+ conflen = tls12_get_psigalgs(s, &conf);
+ if (s->options & SSL_OP_CIPHER_SERVER_PREFERENCE || is_suiteb) {
+ pref = conf;
+ preflen = conflen;
+ allow = c->peer_sigalgs;
+ allowlen = c->peer_sigalgslen;
+ } else {
+ allow = conf;
+ allowlen = conflen;
+ pref = c->peer_sigalgs;
+ preflen = c->peer_sigalgslen;
+ }
+ nmatch = tls12_do_shared_sigalgs(NULL, pref, preflen, allow, allowlen);
+ if (nmatch) {
+ salgs = OPENSSL_malloc(nmatch * sizeof(TLS_SIGALGS));
+ if (!salgs)
+ return 0;
+ nmatch = tls12_do_shared_sigalgs(salgs, pref, preflen, allow, allowlen);
+ } else {
+ salgs = NULL;
+ }
+ c->shared_sigalgs = salgs;
+ c->shared_sigalgslen = nmatch;
+ return 1;
+}
+
/* Set preferred digest for each key type */
-int tls1_process_sigalgs(SSL *s, const unsigned char *data, int dsize)
+int tls1_save_sigalgs(SSL *s, const unsigned char *data, int dsize)
{
- int i, idx;
- const EVP_MD *md;
CERT *c = s->cert;
- /* Extension ignored for TLS versions below 1.2 */
- if (TLS1_get_version(s) < TLS1_2_VERSION)
+ /* Extension ignored for inappropriate versions */
+ if (!SSL_USE_SIGALGS(s))
return 1;
/* Should never happen */
if (!c)
return 0;
- c->pkeys[SSL_PKEY_DSA_SIGN].digest = NULL;
- c->pkeys[SSL_PKEY_RSA_SIGN].digest = NULL;
- c->pkeys[SSL_PKEY_RSA_ENC].digest = NULL;
- c->pkeys[SSL_PKEY_ECC].digest = NULL;
+ if (c->peer_sigalgs)
+ OPENSSL_free(c->peer_sigalgs);
+ c->peer_sigalgs = OPENSSL_malloc(dsize);
+ if (!c->peer_sigalgs)
+ return 0;
+ c->peer_sigalgslen = dsize;
+ memcpy(c->peer_sigalgs, data, dsize);
+ return 1;
+}
- for (i = 0; i < dsize; i += 2) {
- unsigned char hash_alg = data[i], sig_alg = data[i + 1];
+int tls1_process_sigalgs(SSL *s)
+{
+ int idx;
+ size_t i;
+ const EVP_MD *md;
+ CERT *c = s->cert;
+ TLS_SIGALGS *sigptr;
+ if (!tls1_set_shared_sigalgs(s))
+ return 0;
- switch (sig_alg) {
-# ifndef OPENSSL_NO_RSA
- case TLSEXT_signature_rsa:
- idx = SSL_PKEY_RSA_SIGN;
- break;
-# endif
-# ifndef OPENSSL_NO_DSA
- case TLSEXT_signature_dsa:
- idx = SSL_PKEY_DSA_SIGN;
- break;
-# endif
-# ifndef OPENSSL_NO_ECDSA
- case TLSEXT_signature_ecdsa:
- idx = SSL_PKEY_ECC;
- break;
-# endif
- default:
- continue;
+# ifdef OPENSSL_SSL_DEBUG_BROKEN_PROTOCOL
+ if (s->cert->cert_flags & SSL_CERT_FLAG_BROKEN_PROTOCOL) {
+ /*
+ * Use first set signature preference to force message digest,
+ * ignoring any peer preferences.
+ */
+ const unsigned char *sigs = NULL;
+ if (s->server)
+ sigs = c->conf_sigalgs;
+ else
+ sigs = c->client_sigalgs;
+ if (sigs) {
+ idx = tls12_get_pkey_idx(sigs[1]);
+ md = tls12_get_hash(sigs[0]);
+ c->pkeys[idx].digest = md;
+ c->pkeys[idx].valid_flags = CERT_PKEY_EXPLICIT_SIGN;
+ if (idx == SSL_PKEY_RSA_SIGN) {
+ c->pkeys[SSL_PKEY_RSA_ENC].valid_flags =
+ CERT_PKEY_EXPLICIT_SIGN;
+ c->pkeys[SSL_PKEY_RSA_ENC].digest = md;
+ }
}
+ }
+# endif
- if (c->pkeys[idx].digest == NULL) {
- md = tls12_get_hash(hash_alg);
- if (md) {
- c->pkeys[idx].digest = md;
- if (idx == SSL_PKEY_RSA_SIGN)
- c->pkeys[SSL_PKEY_RSA_ENC].digest = md;
+ for (i = 0, sigptr = c->shared_sigalgs;
+ i < c->shared_sigalgslen; i++, sigptr++) {
+ idx = tls12_get_pkey_idx(sigptr->rsign);
+ if (idx > 0 && c->pkeys[idx].digest == NULL) {
+ md = tls12_get_hash(sigptr->rhash);
+ c->pkeys[idx].digest = md;
+ c->pkeys[idx].valid_flags = CERT_PKEY_EXPLICIT_SIGN;
+ if (idx == SSL_PKEY_RSA_SIGN) {
+ c->pkeys[SSL_PKEY_RSA_ENC].valid_flags =
+ CERT_PKEY_EXPLICIT_SIGN;
+ c->pkeys[SSL_PKEY_RSA_ENC].digest = md;
}
}
}
-
/*
- * Set any remaining keys to default values. NOTE: if alg is not
- * supported it stays as NULL.
+ * In strict mode leave unset digests as NULL to indicate we can't use
+ * the certificate for signing.
*/
+ if (!(s->cert->cert_flags & SSL_CERT_FLAGS_CHECK_TLS_STRICT)) {
+ /*
+ * Set any remaining keys to default values. NOTE: if alg is not
+ * supported it stays as NULL.
+ */
# ifndef OPENSSL_NO_DSA
- if (!c->pkeys[SSL_PKEY_DSA_SIGN].digest)
- c->pkeys[SSL_PKEY_DSA_SIGN].digest = EVP_sha1();
+ if (!c->pkeys[SSL_PKEY_DSA_SIGN].digest)
+ c->pkeys[SSL_PKEY_DSA_SIGN].digest = EVP_sha1();
# endif
# ifndef OPENSSL_NO_RSA
- if (!c->pkeys[SSL_PKEY_RSA_SIGN].digest) {
- c->pkeys[SSL_PKEY_RSA_SIGN].digest = EVP_sha1();
- c->pkeys[SSL_PKEY_RSA_ENC].digest = EVP_sha1();
- }
+ if (!c->pkeys[SSL_PKEY_RSA_SIGN].digest) {
+ c->pkeys[SSL_PKEY_RSA_SIGN].digest = EVP_sha1();
+ c->pkeys[SSL_PKEY_RSA_ENC].digest = EVP_sha1();
+ }
# endif
# ifndef OPENSSL_NO_ECDSA
- if (!c->pkeys[SSL_PKEY_ECC].digest)
- c->pkeys[SSL_PKEY_ECC].digest = EVP_sha1();
+ if (!c->pkeys[SSL_PKEY_ECC].digest)
+ c->pkeys[SSL_PKEY_ECC].digest = EVP_sha1();
# endif
+ }
return 1;
}
-#endif
+int SSL_get_sigalgs(SSL *s, int idx,
+ int *psign, int *phash, int *psignhash,
+ unsigned char *rsig, unsigned char *rhash)
+{
+ const unsigned char *psig = s->cert->peer_sigalgs;
+ if (psig == NULL)
+ return 0;
+ if (idx >= 0) {
+ idx <<= 1;
+ if (idx >= (int)s->cert->peer_sigalgslen)
+ return 0;
+ psig += idx;
+ if (rhash)
+ *rhash = psig[0];
+ if (rsig)
+ *rsig = psig[1];
+ tls1_lookup_sigalg(phash, psign, psignhash, psig);
+ }
+ return s->cert->peer_sigalgslen / 2;
+}
-#ifndef OPENSSL_NO_HEARTBEATS
+int SSL_get_shared_sigalgs(SSL *s, int idx,
+ int *psign, int *phash, int *psignhash,
+ unsigned char *rsig, unsigned char *rhash)
+{
+ TLS_SIGALGS *shsigalgs = s->cert->shared_sigalgs;
+ if (!shsigalgs || idx >= (int)s->cert->shared_sigalgslen)
+ return 0;
+ shsigalgs += idx;
+ if (phash)
+ *phash = shsigalgs->hash_nid;
+ if (psign)
+ *psign = shsigalgs->sign_nid;
+ if (psignhash)
+ *psignhash = shsigalgs->signandhash_nid;
+ if (rsig)
+ *rsig = shsigalgs->rsign;
+ if (rhash)
+ *rhash = shsigalgs->rhash;
+ return s->cert->shared_sigalgslen;
+}
+
+# ifndef OPENSSL_NO_HEARTBEATS
int tls1_process_heartbeat(SSL *s)
{
unsigned char *p = &s->s3->rrec.data[0], *pl;
@@ -2694,4 +3971,426 @@ err:
return ret;
}
+# endif
+
+# define MAX_SIGALGLEN (TLSEXT_hash_num * TLSEXT_signature_num * 2)
+
+typedef struct {
+ size_t sigalgcnt;
+ int sigalgs[MAX_SIGALGLEN];
+} sig_cb_st;
+
+static int sig_cb(const char *elem, int len, void *arg)
+{
+ sig_cb_st *sarg = arg;
+ size_t i;
+ char etmp[20], *p;
+ int sig_alg, hash_alg;
+ if (elem == NULL)
+ return 0;
+ if (sarg->sigalgcnt == MAX_SIGALGLEN)
+ return 0;
+ if (len > (int)(sizeof(etmp) - 1))
+ return 0;
+ memcpy(etmp, elem, len);
+ etmp[len] = 0;
+ p = strchr(etmp, '+');
+ if (!p)
+ return 0;
+ *p = 0;
+ p++;
+ if (!*p)
+ return 0;
+
+ if (!strcmp(etmp, "RSA"))
+ sig_alg = EVP_PKEY_RSA;
+ else if (!strcmp(etmp, "DSA"))
+ sig_alg = EVP_PKEY_DSA;
+ else if (!strcmp(etmp, "ECDSA"))
+ sig_alg = EVP_PKEY_EC;
+ else
+ return 0;
+
+ hash_alg = OBJ_sn2nid(p);
+ if (hash_alg == NID_undef)
+ hash_alg = OBJ_ln2nid(p);
+ if (hash_alg == NID_undef)
+ return 0;
+
+ for (i = 0; i < sarg->sigalgcnt; i += 2) {
+ if (sarg->sigalgs[i] == sig_alg && sarg->sigalgs[i + 1] == hash_alg)
+ return 0;
+ }
+ sarg->sigalgs[sarg->sigalgcnt++] = hash_alg;
+ sarg->sigalgs[sarg->sigalgcnt++] = sig_alg;
+ return 1;
+}
+
+/*
+ * Set suppored signature algorithms based on a colon separated list of the
+ * form sig+hash e.g. RSA+SHA512:DSA+SHA512
+ */
+int tls1_set_sigalgs_list(CERT *c, const char *str, int client)
+{
+ sig_cb_st sig;
+ sig.sigalgcnt = 0;
+ if (!CONF_parse_list(str, ':', 1, sig_cb, &sig))
+ return 0;
+ if (c == NULL)
+ return 1;
+ return tls1_set_sigalgs(c, sig.sigalgs, sig.sigalgcnt, client);
+}
+
+int tls1_set_sigalgs(CERT *c, const int *psig_nids, size_t salglen,
+ int client)
+{
+ unsigned char *sigalgs, *sptr;
+ int rhash, rsign;
+ size_t i;
+ if (salglen & 1)
+ return 0;
+ sigalgs = OPENSSL_malloc(salglen);
+ if (sigalgs == NULL)
+ return 0;
+ for (i = 0, sptr = sigalgs; i < salglen; i += 2) {
+ rhash = tls12_find_id(*psig_nids++, tls12_md,
+ sizeof(tls12_md) / sizeof(tls12_lookup));
+ rsign = tls12_find_id(*psig_nids++, tls12_sig,
+ sizeof(tls12_sig) / sizeof(tls12_lookup));
+
+ if (rhash == -1 || rsign == -1)
+ goto err;
+ *sptr++ = rhash;
+ *sptr++ = rsign;
+ }
+
+ if (client) {
+ if (c->client_sigalgs)
+ OPENSSL_free(c->client_sigalgs);
+ c->client_sigalgs = sigalgs;
+ c->client_sigalgslen = salglen;
+ } else {
+ if (c->conf_sigalgs)
+ OPENSSL_free(c->conf_sigalgs);
+ c->conf_sigalgs = sigalgs;
+ c->conf_sigalgslen = salglen;
+ }
+
+ return 1;
+
+ err:
+ OPENSSL_free(sigalgs);
+ return 0;
+}
+
+static int tls1_check_sig_alg(CERT *c, X509 *x, int default_nid)
+{
+ int sig_nid;
+ size_t i;
+ if (default_nid == -1)
+ return 1;
+ sig_nid = X509_get_signature_nid(x);
+ if (default_nid)
+ return sig_nid == default_nid ? 1 : 0;
+ for (i = 0; i < c->shared_sigalgslen; i++)
+ if (sig_nid == c->shared_sigalgs[i].signandhash_nid)
+ return 1;
+ return 0;
+}
+
+/* Check to see if a certificate issuer name matches list of CA names */
+static int ssl_check_ca_name(STACK_OF(X509_NAME) *names, X509 *x)
+{
+ X509_NAME *nm;
+ int i;
+ nm = X509_get_issuer_name(x);
+ for (i = 0; i < sk_X509_NAME_num(names); i++) {
+ if (!X509_NAME_cmp(nm, sk_X509_NAME_value(names, i)))
+ return 1;
+ }
+ return 0;
+}
+
+/*
+ * Check certificate chain is consistent with TLS extensions and is usable by
+ * server. This servers two purposes: it allows users to check chains before
+ * passing them to the server and it allows the server to check chains before
+ * attempting to use them.
+ */
+
+/* Flags which need to be set for a certificate when stict mode not set */
+
+# define CERT_PKEY_VALID_FLAGS \
+ (CERT_PKEY_EE_SIGNATURE|CERT_PKEY_EE_PARAM)
+/* Strict mode flags */
+# define CERT_PKEY_STRICT_FLAGS \
+ (CERT_PKEY_VALID_FLAGS|CERT_PKEY_CA_SIGNATURE|CERT_PKEY_CA_PARAM \
+ | CERT_PKEY_ISSUER_NAME|CERT_PKEY_CERT_TYPE)
+
+int tls1_check_chain(SSL *s, X509 *x, EVP_PKEY *pk, STACK_OF(X509) *chain,
+ int idx)
+{
+ int i;
+ int rv = 0;
+ int check_flags = 0, strict_mode;
+ CERT_PKEY *cpk = NULL;
+ CERT *c = s->cert;
+ unsigned int suiteb_flags = tls1_suiteb(s);
+ /* idx == -1 means checking server chains */
+ if (idx != -1) {
+ /* idx == -2 means checking client certificate chains */
+ if (idx == -2) {
+ cpk = c->key;
+ idx = cpk - c->pkeys;
+ } else
+ cpk = c->pkeys + idx;
+ x = cpk->x509;
+ pk = cpk->privatekey;
+ chain = cpk->chain;
+ strict_mode = c->cert_flags & SSL_CERT_FLAGS_CHECK_TLS_STRICT;
+ /* If no cert or key, forget it */
+ if (!x || !pk)
+ goto end;
+# ifdef OPENSSL_SSL_DEBUG_BROKEN_PROTOCOL
+ /* Allow any certificate to pass test */
+ if (s->cert->cert_flags & SSL_CERT_FLAG_BROKEN_PROTOCOL) {
+ rv = CERT_PKEY_STRICT_FLAGS | CERT_PKEY_EXPLICIT_SIGN |
+ CERT_PKEY_VALID | CERT_PKEY_SIGN;
+ cpk->valid_flags = rv;
+ return rv;
+ }
+# endif
+ } else {
+ if (!x || !pk)
+ return 0;
+ idx = ssl_cert_type(x, pk);
+ if (idx == -1)
+ return 0;
+ cpk = c->pkeys + idx;
+ if (c->cert_flags & SSL_CERT_FLAGS_CHECK_TLS_STRICT)
+ check_flags = CERT_PKEY_STRICT_FLAGS;
+ else
+ check_flags = CERT_PKEY_VALID_FLAGS;
+ strict_mode = 1;
+ }
+
+ if (suiteb_flags) {
+ int ok;
+ if (check_flags)
+ check_flags |= CERT_PKEY_SUITEB;
+ ok = X509_chain_check_suiteb(NULL, x, chain, suiteb_flags);
+ if (ok == X509_V_OK)
+ rv |= CERT_PKEY_SUITEB;
+ else if (!check_flags)
+ goto end;
+ }
+
+ /*
+ * Check all signature algorithms are consistent with signature
+ * algorithms extension if TLS 1.2 or later and strict mode.
+ */
+ if (TLS1_get_version(s) >= TLS1_2_VERSION && strict_mode) {
+ int default_nid;
+ unsigned char rsign = 0;
+ if (c->peer_sigalgs)
+ default_nid = 0;
+ /* If no sigalgs extension use defaults from RFC5246 */
+ else {
+ switch (idx) {
+ case SSL_PKEY_RSA_ENC:
+ case SSL_PKEY_RSA_SIGN:
+ case SSL_PKEY_DH_RSA:
+ rsign = TLSEXT_signature_rsa;
+ default_nid = NID_sha1WithRSAEncryption;
+ break;
+
+ case SSL_PKEY_DSA_SIGN:
+ case SSL_PKEY_DH_DSA:
+ rsign = TLSEXT_signature_dsa;
+ default_nid = NID_dsaWithSHA1;
+ break;
+
+ case SSL_PKEY_ECC:
+ rsign = TLSEXT_signature_ecdsa;
+ default_nid = NID_ecdsa_with_SHA1;
+ break;
+
+ default:
+ default_nid = -1;
+ break;
+ }
+ }
+ /*
+ * If peer sent no signature algorithms extension and we have set
+ * preferred signature algorithms check we support sha1.
+ */
+ if (default_nid > 0 && c->conf_sigalgs) {
+ size_t j;
+ const unsigned char *p = c->conf_sigalgs;
+ for (j = 0; j < c->conf_sigalgslen; j += 2, p += 2) {
+ if (p[0] == TLSEXT_hash_sha1 && p[1] == rsign)
+ break;
+ }
+ if (j == c->conf_sigalgslen) {
+ if (check_flags)
+ goto skip_sigs;
+ else
+ goto end;
+ }
+ }
+ /* Check signature algorithm of each cert in chain */
+ if (!tls1_check_sig_alg(c, x, default_nid)) {
+ if (!check_flags)
+ goto end;
+ } else
+ rv |= CERT_PKEY_EE_SIGNATURE;
+ rv |= CERT_PKEY_CA_SIGNATURE;
+ for (i = 0; i < sk_X509_num(chain); i++) {
+ if (!tls1_check_sig_alg(c, sk_X509_value(chain, i), default_nid)) {
+ if (check_flags) {
+ rv &= ~CERT_PKEY_CA_SIGNATURE;
+ break;
+ } else
+ goto end;
+ }
+ }
+ }
+ /* Else not TLS 1.2, so mark EE and CA signing algorithms OK */
+ else if (check_flags)
+ rv |= CERT_PKEY_EE_SIGNATURE | CERT_PKEY_CA_SIGNATURE;
+ skip_sigs:
+ /* Check cert parameters are consistent */
+ if (tls1_check_cert_param(s, x, check_flags ? 1 : 2))
+ rv |= CERT_PKEY_EE_PARAM;
+ else if (!check_flags)
+ goto end;
+ if (!s->server)
+ rv |= CERT_PKEY_CA_PARAM;
+ /* In strict mode check rest of chain too */
+ else if (strict_mode) {
+ rv |= CERT_PKEY_CA_PARAM;
+ for (i = 0; i < sk_X509_num(chain); i++) {
+ X509 *ca = sk_X509_value(chain, i);
+ if (!tls1_check_cert_param(s, ca, 0)) {
+ if (check_flags) {
+ rv &= ~CERT_PKEY_CA_PARAM;
+ break;
+ } else
+ goto end;
+ }
+ }
+ }
+ if (!s->server && strict_mode) {
+ STACK_OF(X509_NAME) *ca_dn;
+ int check_type = 0;
+ switch (pk->type) {
+ case EVP_PKEY_RSA:
+ check_type = TLS_CT_RSA_SIGN;
+ break;
+ case EVP_PKEY_DSA:
+ check_type = TLS_CT_DSS_SIGN;
+ break;
+ case EVP_PKEY_EC:
+ check_type = TLS_CT_ECDSA_SIGN;
+ break;
+ case EVP_PKEY_DH:
+ case EVP_PKEY_DHX:
+ {
+ int cert_type = X509_certificate_type(x, pk);
+ if (cert_type & EVP_PKS_RSA)
+ check_type = TLS_CT_RSA_FIXED_DH;
+ if (cert_type & EVP_PKS_DSA)
+ check_type = TLS_CT_DSS_FIXED_DH;
+ }
+ }
+ if (check_type) {
+ const unsigned char *ctypes;
+ int ctypelen;
+ if (c->ctypes) {
+ ctypes = c->ctypes;
+ ctypelen = (int)c->ctype_num;
+ } else {
+ ctypes = (unsigned char *)s->s3->tmp.ctype;
+ ctypelen = s->s3->tmp.ctype_num;
+ }
+ for (i = 0; i < ctypelen; i++) {
+ if (ctypes[i] == check_type) {
+ rv |= CERT_PKEY_CERT_TYPE;
+ break;
+ }
+ }
+ if (!(rv & CERT_PKEY_CERT_TYPE) && !check_flags)
+ goto end;
+ } else
+ rv |= CERT_PKEY_CERT_TYPE;
+
+ ca_dn = s->s3->tmp.ca_names;
+
+ if (!sk_X509_NAME_num(ca_dn))
+ rv |= CERT_PKEY_ISSUER_NAME;
+
+ if (!(rv & CERT_PKEY_ISSUER_NAME)) {
+ if (ssl_check_ca_name(ca_dn, x))
+ rv |= CERT_PKEY_ISSUER_NAME;
+ }
+ if (!(rv & CERT_PKEY_ISSUER_NAME)) {
+ for (i = 0; i < sk_X509_num(chain); i++) {
+ X509 *xtmp = sk_X509_value(chain, i);
+ if (ssl_check_ca_name(ca_dn, xtmp)) {
+ rv |= CERT_PKEY_ISSUER_NAME;
+ break;
+ }
+ }
+ }
+ if (!check_flags && !(rv & CERT_PKEY_ISSUER_NAME))
+ goto end;
+ } else
+ rv |= CERT_PKEY_ISSUER_NAME | CERT_PKEY_CERT_TYPE;
+
+ if (!check_flags || (rv & check_flags) == check_flags)
+ rv |= CERT_PKEY_VALID;
+
+ end:
+
+ if (TLS1_get_version(s) >= TLS1_2_VERSION) {
+ if (cpk->valid_flags & CERT_PKEY_EXPLICIT_SIGN)
+ rv |= CERT_PKEY_EXPLICIT_SIGN | CERT_PKEY_SIGN;
+ else if (cpk->digest)
+ rv |= CERT_PKEY_SIGN;
+ } else
+ rv |= CERT_PKEY_SIGN | CERT_PKEY_EXPLICIT_SIGN;
+
+ /*
+ * When checking a CERT_PKEY structure all flags are irrelevant if the
+ * chain is invalid.
+ */
+ if (!check_flags) {
+ if (rv & CERT_PKEY_VALID)
+ cpk->valid_flags = rv;
+ else {
+ /* Preserve explicit sign flag, clear rest */
+ cpk->valid_flags &= CERT_PKEY_EXPLICIT_SIGN;
+ return 0;
+ }
+ }
+ return rv;
+}
+
+/* Set validity of certificates in an SSL structure */
+void tls1_set_cert_validity(SSL *s)
+{
+ tls1_check_chain(s, NULL, NULL, NULL, SSL_PKEY_RSA_ENC);
+ tls1_check_chain(s, NULL, NULL, NULL, SSL_PKEY_RSA_SIGN);
+ tls1_check_chain(s, NULL, NULL, NULL, SSL_PKEY_DSA_SIGN);
+ tls1_check_chain(s, NULL, NULL, NULL, SSL_PKEY_DH_RSA);
+ tls1_check_chain(s, NULL, NULL, NULL, SSL_PKEY_DH_DSA);
+ tls1_check_chain(s, NULL, NULL, NULL, SSL_PKEY_ECC);
+}
+
+/* User level utiity function to check a chain is suitable */
+int SSL_check_chain(SSL *s, X509 *x, EVP_PKEY *pk, STACK_OF(X509) *chain)
+{
+ return tls1_check_chain(s, x, pk, chain, -1);
+}
+
#endif
diff --git a/crypto/openssl/ssl/t1_meth.c b/crypto/openssl/ssl/t1_meth.c
index 4a1b052..335d57b 100644
--- a/crypto/openssl/ssl/t1_meth.c
+++ b/crypto/openssl/ssl/t1_meth.c
@@ -72,10 +72,13 @@ static const SSL_METHOD *tls1_get_method(int ver)
}
IMPLEMENT_tls_meth_func(TLS1_2_VERSION, TLSv1_2_method,
- ssl3_accept, ssl3_connect, tls1_get_method)
+ ssl3_accept,
+ ssl3_connect, tls1_get_method, TLSv1_2_enc_data)
IMPLEMENT_tls_meth_func(TLS1_1_VERSION, TLSv1_1_method,
- ssl3_accept, ssl3_connect, tls1_get_method)
+ ssl3_accept,
+ ssl3_connect, tls1_get_method, TLSv1_1_enc_data)
IMPLEMENT_tls_meth_func(TLS1_VERSION, TLSv1_method,
- ssl3_accept, ssl3_connect, tls1_get_method)
+ ssl3_accept,
+ ssl3_connect, tls1_get_method, TLSv1_enc_data)
diff --git a/crypto/openssl/ssl/t1_srvr.c b/crypto/openssl/ssl/t1_srvr.c
index 076ec86..8c6b3df 100644
--- a/crypto/openssl/ssl/t1_srvr.c
+++ b/crypto/openssl/ssl/t1_srvr.c
@@ -78,12 +78,15 @@ static const SSL_METHOD *tls1_get_server_method(int ver)
IMPLEMENT_tls_meth_func(TLS1_2_VERSION, TLSv1_2_server_method,
ssl3_accept,
- ssl_undefined_function, tls1_get_server_method)
+ ssl_undefined_function,
+ tls1_get_server_method, TLSv1_2_enc_data)
IMPLEMENT_tls_meth_func(TLS1_1_VERSION, TLSv1_1_server_method,
ssl3_accept,
- ssl_undefined_function, tls1_get_server_method)
+ ssl_undefined_function,
+ tls1_get_server_method, TLSv1_1_enc_data)
IMPLEMENT_tls_meth_func(TLS1_VERSION, TLSv1_server_method,
ssl3_accept,
- ssl_undefined_function, tls1_get_server_method)
+ ssl_undefined_function,
+ tls1_get_server_method, TLSv1_enc_data)
diff --git a/crypto/openssl/ssl/t1_trce.c b/crypto/openssl/ssl/t1_trce.c
new file mode 100644
index 0000000..c5e21df
--- /dev/null
+++ b/crypto/openssl/ssl/t1_trce.c
@@ -0,0 +1,1266 @@
+/* ssl/t1_trce.c */
+/*
+ * Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL
+ * project.
+ */
+/* ====================================================================
+ * Copyright (c) 2012 The OpenSSL Project. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * 3. All advertising materials mentioning features or use of this
+ * software must display the following acknowledgment:
+ * "This product includes software developed by the OpenSSL Project
+ * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)"
+ *
+ * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
+ * endorse or promote products derived from this software without
+ * prior written permission. For written permission, please contact
+ * licensing@OpenSSL.org.
+ *
+ * 5. Products derived from this software may not be called "OpenSSL"
+ * nor may "OpenSSL" appear in their names without prior written
+ * permission of the OpenSSL Project.
+ *
+ * 6. Redistributions of any form whatsoever must retain the following
+ * acknowledgment:
+ * "This product includes software developed by the OpenSSL Project
+ * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)"
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
+ * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
+ * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
+ * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
+ * OF THE POSSIBILITY OF SUCH DAMAGE.
+ * ====================================================================
+ *
+ */
+
+#include "ssl_locl.h"
+
+#ifndef OPENSSL_NO_SSL_TRACE
+
+/* Packet trace support for OpenSSL */
+
+typedef struct {
+ int num;
+ const char *name;
+} ssl_trace_tbl;
+
+# define ssl_trace_str(val, tbl) \
+ do_ssl_trace_str(val, tbl, sizeof(tbl)/sizeof(ssl_trace_tbl))
+
+# define ssl_trace_list(bio, indent, msg, msglen, value, table) \
+ do_ssl_trace_list(bio, indent, msg, msglen, value, \
+ table, sizeof(table)/sizeof(ssl_trace_tbl))
+
+static const char *do_ssl_trace_str(int val, ssl_trace_tbl *tbl, size_t ntbl)
+{
+ size_t i;
+ for (i = 0; i < ntbl; i++, tbl++) {
+ if (tbl->num == val)
+ return tbl->name;
+ }
+ return "UNKNOWN";
+}
+
+static int do_ssl_trace_list(BIO *bio, int indent,
+ const unsigned char *msg, size_t msglen,
+ size_t vlen, ssl_trace_tbl *tbl, size_t ntbl)
+{
+ int val;
+ if (msglen % vlen)
+ return 0;
+ while (msglen) {
+ val = msg[0];
+ if (vlen == 2)
+ val = (val << 8) | msg[1];
+ BIO_indent(bio, indent, 80);
+ BIO_printf(bio, "%s (%d)\n", do_ssl_trace_str(val, tbl, ntbl), val);
+ msg += vlen;
+ msglen -= vlen;
+ }
+ return 1;
+}
+
+/* Version number */
+
+static ssl_trace_tbl ssl_version_tbl[] = {
+ {SSL2_VERSION, "SSL 2.0"},
+ {SSL3_VERSION, "SSL 3.0"},
+ {TLS1_VERSION, "TLS 1.0"},
+ {TLS1_1_VERSION, "TLS 1.1"},
+ {TLS1_2_VERSION, "TLS 1.2"},
+ {DTLS1_VERSION, "DTLS 1.0"},
+ {DTLS1_2_VERSION, "DTLS 1.2"},
+ {DTLS1_BAD_VER, "DTLS 1.0 (bad)"}
+};
+
+static ssl_trace_tbl ssl_content_tbl[] = {
+ {SSL3_RT_CHANGE_CIPHER_SPEC, "ChangeCipherSpec"},
+ {SSL3_RT_ALERT, "Alert"},
+ {SSL3_RT_HANDSHAKE, "Handshake"},
+ {SSL3_RT_APPLICATION_DATA, "ApplicationData"},
+ {TLS1_RT_HEARTBEAT, "HeartBeat"}
+};
+
+/* Handshake types */
+static ssl_trace_tbl ssl_handshake_tbl[] = {
+ {SSL3_MT_HELLO_REQUEST, "HelloRequest"},
+ {SSL3_MT_CLIENT_HELLO, "ClientHello"},
+ {SSL3_MT_SERVER_HELLO, "ServerHello"},
+ {DTLS1_MT_HELLO_VERIFY_REQUEST, "HelloVerifyRequest"},
+ {SSL3_MT_NEWSESSION_TICKET, "NewSessionTicket"},
+ {SSL3_MT_CERTIFICATE, "Certificate"},
+ {SSL3_MT_SERVER_KEY_EXCHANGE, "ServerKeyExchange"},
+ {SSL3_MT_CERTIFICATE_REQUEST, "CertificateRequest"},
+ {SSL3_MT_CLIENT_KEY_EXCHANGE, "ClientKeyExchange"},
+ {SSL3_MT_CERTIFICATE_STATUS, "CertificateStatus"},
+ {SSL3_MT_SERVER_DONE, "ServerHelloDone"},
+ {SSL3_MT_CERTIFICATE_VERIFY, "CertificateVerify"},
+ {SSL3_MT_CLIENT_KEY_EXCHANGE, "ClientKeyExchange"},
+ {SSL3_MT_FINISHED, "Finished"},
+ {SSL3_MT_CERTIFICATE_STATUS, "CertificateStatus"}
+};
+
+/* Cipher suites */
+static ssl_trace_tbl ssl_ciphers_tbl[] = {
+ {0x0000, "SSL_NULL_WITH_NULL_NULL"},
+ {0x0001, "SSL_RSA_WITH_NULL_MD5"},
+ {0x0002, "SSL_RSA_WITH_NULL_SHA"},
+ {0x0003, "SSL_RSA_EXPORT_WITH_RC4_40_MD5"},
+ {0x0004, "SSL_RSA_WITH_RC4_128_MD5"},
+ {0x0005, "SSL_RSA_WITH_RC4_128_SHA"},
+ {0x0006, "SSL_RSA_EXPORT_WITH_RC2_CBC_40_MD5"},
+ {0x0007, "SSL_RSA_WITH_IDEA_CBC_SHA"},
+ {0x0008, "SSL_RSA_EXPORT_WITH_DES40_CBC_SHA"},
+ {0x0009, "SSL_RSA_WITH_DES_CBC_SHA"},
+ {0x000A, "SSL_RSA_WITH_3DES_EDE_CBC_SHA"},
+ {0x000B, "SSL_DH_DSS_EXPORT_WITH_DES40_CBC_SHA"},
+ {0x000C, "SSL_DH_DSS_WITH_DES_CBC_SHA"},
+ {0x000D, "SSL_DH_DSS_WITH_3DES_EDE_CBC_SHA"},
+ {0x000E, "SSL_DH_RSA_EXPORT_WITH_DES40_CBC_SHA"},
+ {0x000F, "SSL_DH_RSA_WITH_DES_CBC_SHA"},
+ {0x0010, "SSL_DH_RSA_WITH_3DES_EDE_CBC_SHA"},
+ {0x0011, "SSL_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA"},
+ {0x0012, "SSL_DHE_DSS_WITH_DES_CBC_SHA"},
+ {0x0013, "SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA"},
+ {0x0014, "SSL_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA"},
+ {0x0015, "SSL_DHE_RSA_WITH_DES_CBC_SHA"},
+ {0x0016, "SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA"},
+ {0x0017, "SSL_DH_anon_EXPORT_WITH_RC4_40_MD5"},
+ {0x0018, "SSL_DH_anon_WITH_RC4_128_MD5"},
+ {0x0019, "SSL_DH_anon_EXPORT_WITH_DES40_CBC_SHA"},
+ {0x001A, "SSL_DH_anon_WITH_DES_CBC_SHA"},
+ {0x001B, "SSL_DH_anon_WITH_3DES_EDE_CBC_SHA"},
+ {0x001D, "SSL_FORTEZZA_KEA_WITH_FORTEZZA_CBC_SHA"},
+ {0x001E, "SSL_FORTEZZA_KEA_WITH_RC4_128_SHA"},
+ {0x001F, "TLS_KRB5_WITH_3DES_EDE_CBC_SHA"},
+ {0x0020, "TLS_KRB5_WITH_RC4_128_SHA"},
+ {0x0021, "TLS_KRB5_WITH_IDEA_CBC_SHA"},
+ {0x0022, "TLS_KRB5_WITH_DES_CBC_MD5"},
+ {0x0023, "TLS_KRB5_WITH_3DES_EDE_CBC_MD5"},
+ {0x0024, "TLS_KRB5_WITH_RC4_128_MD5"},
+ {0x0025, "TLS_KRB5_WITH_IDEA_CBC_MD5"},
+ {0x0026, "TLS_KRB5_EXPORT_WITH_DES_CBC_40_SHA"},
+ {0x0027, "TLS_KRB5_EXPORT_WITH_RC2_CBC_40_SHA"},
+ {0x0028, "TLS_KRB5_EXPORT_WITH_RC4_40_SHA"},
+ {0x0029, "TLS_KRB5_EXPORT_WITH_DES_CBC_40_MD5"},
+ {0x002A, "TLS_KRB5_EXPORT_WITH_RC2_CBC_40_MD5"},
+ {0x002B, "TLS_KRB5_EXPORT_WITH_RC4_40_MD5"},
+ {0x002F, "TLS_RSA_WITH_AES_128_CBC_SHA"},
+ {0x0030, "TLS_DH_DSS_WITH_AES_128_CBC_SHA"},
+ {0x0031, "TLS_DH_RSA_WITH_AES_128_CBC_SHA"},
+ {0x0032, "TLS_DHE_DSS_WITH_AES_128_CBC_SHA"},
+ {0x0033, "TLS_DHE_RSA_WITH_AES_128_CBC_SHA"},
+ {0x0034, "TLS_DH_anon_WITH_AES_128_CBC_SHA"},
+ {0x0035, "TLS_RSA_WITH_AES_256_CBC_SHA"},
+ {0x0036, "TLS_DH_DSS_WITH_AES_256_CBC_SHA"},
+ {0x0037, "TLS_DH_RSA_WITH_AES_256_CBC_SHA"},
+ {0x0038, "TLS_DHE_DSS_WITH_AES_256_CBC_SHA"},
+ {0x0039, "TLS_DHE_RSA_WITH_AES_256_CBC_SHA"},
+ {0x003A, "TLS_DH_anon_WITH_AES_256_CBC_SHA"},
+ {0x003B, "TLS_RSA_WITH_NULL_SHA256"},
+ {0x003C, "TLS_RSA_WITH_AES_128_CBC_SHA256"},
+ {0x003D, "TLS_RSA_WITH_AES_256_CBC_SHA256"},
+ {0x003E, "TLS_DH_DSS_WITH_AES_128_CBC_SHA256"},
+ {0x003F, "TLS_DH_RSA_WITH_AES_128_CBC_SHA256"},
+ {0x0040, "TLS_DHE_DSS_WITH_AES_128_CBC_SHA256"},
+ {0x0041, "TLS_RSA_WITH_CAMELLIA_128_CBC_SHA"},
+ {0x0042, "TLS_DH_DSS_WITH_CAMELLIA_128_CBC_SHA"},
+ {0x0043, "TLS_DH_RSA_WITH_CAMELLIA_128_CBC_SHA"},
+ {0x0044, "TLS_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA"},
+ {0x0045, "TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA"},
+ {0x0046, "TLS_DH_anon_WITH_CAMELLIA_128_CBC_SHA"},
+ {0x0067, "TLS_DHE_RSA_WITH_AES_128_CBC_SHA256"},
+ {0x0068, "TLS_DH_DSS_WITH_AES_256_CBC_SHA256"},
+ {0x0069, "TLS_DH_RSA_WITH_AES_256_CBC_SHA256"},
+ {0x006A, "TLS_DHE_DSS_WITH_AES_256_CBC_SHA256"},
+ {0x006B, "TLS_DHE_RSA_WITH_AES_256_CBC_SHA256"},
+ {0x006C, "TLS_DH_anon_WITH_AES_128_CBC_SHA256"},
+ {0x006D, "TLS_DH_anon_WITH_AES_256_CBC_SHA256"},
+ {0x0084, "TLS_RSA_WITH_CAMELLIA_256_CBC_SHA"},
+ {0x0085, "TLS_DH_DSS_WITH_CAMELLIA_256_CBC_SHA"},
+ {0x0086, "TLS_DH_RSA_WITH_CAMELLIA_256_CBC_SHA"},
+ {0x0087, "TLS_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA"},
+ {0x0088, "TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA"},
+ {0x0089, "TLS_DH_anon_WITH_CAMELLIA_256_CBC_SHA"},
+ {0x008A, "TLS_PSK_WITH_RC4_128_SHA"},
+ {0x008B, "TLS_PSK_WITH_3DES_EDE_CBC_SHA"},
+ {0x008C, "TLS_PSK_WITH_AES_128_CBC_SHA"},
+ {0x008D, "TLS_PSK_WITH_AES_256_CBC_SHA"},
+ {0x008E, "TLS_DHE_PSK_WITH_RC4_128_SHA"},
+ {0x008F, "TLS_DHE_PSK_WITH_3DES_EDE_CBC_SHA"},
+ {0x0090, "TLS_DHE_PSK_WITH_AES_128_CBC_SHA"},
+ {0x0091, "TLS_DHE_PSK_WITH_AES_256_CBC_SHA"},
+ {0x0092, "TLS_RSA_PSK_WITH_RC4_128_SHA"},
+ {0x0093, "TLS_RSA_PSK_WITH_3DES_EDE_CBC_SHA"},
+ {0x0094, "TLS_RSA_PSK_WITH_AES_128_CBC_SHA"},
+ {0x0095, "TLS_RSA_PSK_WITH_AES_256_CBC_SHA"},
+ {0x0096, "TLS_RSA_WITH_SEED_CBC_SHA"},
+ {0x0097, "TLS_DH_DSS_WITH_SEED_CBC_SHA"},
+ {0x0098, "TLS_DH_RSA_WITH_SEED_CBC_SHA"},
+ {0x0099, "TLS_DHE_DSS_WITH_SEED_CBC_SHA"},
+ {0x009A, "TLS_DHE_RSA_WITH_SEED_CBC_SHA"},
+ {0x009B, "TLS_DH_anon_WITH_SEED_CBC_SHA"},
+ {0x009C, "TLS_RSA_WITH_AES_128_GCM_SHA256"},
+ {0x009D, "TLS_RSA_WITH_AES_256_GCM_SHA384"},
+ {0x009E, "TLS_DHE_RSA_WITH_AES_128_GCM_SHA256"},
+ {0x009F, "TLS_DHE_RSA_WITH_AES_256_GCM_SHA384"},
+ {0x00A0, "TLS_DH_RSA_WITH_AES_128_GCM_SHA256"},
+ {0x00A1, "TLS_DH_RSA_WITH_AES_256_GCM_SHA384"},
+ {0x00A2, "TLS_DHE_DSS_WITH_AES_128_GCM_SHA256"},
+ {0x00A3, "TLS_DHE_DSS_WITH_AES_256_GCM_SHA384"},
+ {0x00A4, "TLS_DH_DSS_WITH_AES_128_GCM_SHA256"},
+ {0x00A5, "TLS_DH_DSS_WITH_AES_256_GCM_SHA384"},
+ {0x00A6, "TLS_DH_anon_WITH_AES_128_GCM_SHA256"},
+ {0x00A7, "TLS_DH_anon_WITH_AES_256_GCM_SHA384"},
+ {0x00A8, "TLS_PSK_WITH_AES_128_GCM_SHA256"},
+ {0x00A9, "TLS_PSK_WITH_AES_256_GCM_SHA384"},
+ {0x00AA, "TLS_DHE_PSK_WITH_AES_128_GCM_SHA256"},
+ {0x00AB, "TLS_DHE_PSK_WITH_AES_256_GCM_SHA384"},
+ {0x00AC, "TLS_RSA_PSK_WITH_AES_128_GCM_SHA256"},
+ {0x00AD, "TLS_RSA_PSK_WITH_AES_256_GCM_SHA384"},
+ {0x00AE, "TLS_PSK_WITH_AES_128_CBC_SHA256"},
+ {0x00AF, "TLS_PSK_WITH_AES_256_CBC_SHA384"},
+ {0x00B0, "TLS_PSK_WITH_NULL_SHA256"},
+ {0x00B1, "TLS_PSK_WITH_NULL_SHA384"},
+ {0x00B2, "TLS_DHE_PSK_WITH_AES_128_CBC_SHA256"},
+ {0x00B3, "TLS_DHE_PSK_WITH_AES_256_CBC_SHA384"},
+ {0x00B4, "TLS_DHE_PSK_WITH_NULL_SHA256"},
+ {0x00B5, "TLS_DHE_PSK_WITH_NULL_SHA384"},
+ {0x00B6, "TLS_RSA_PSK_WITH_AES_128_CBC_SHA256"},
+ {0x00B7, "TLS_RSA_PSK_WITH_AES_256_CBC_SHA384"},
+ {0x00B8, "TLS_RSA_PSK_WITH_NULL_SHA256"},
+ {0x00B9, "TLS_RSA_PSK_WITH_NULL_SHA384"},
+ {0x00BA, "TLS_RSA_WITH_CAMELLIA_128_CBC_SHA256"},
+ {0x00BB, "TLS_DH_DSS_WITH_CAMELLIA_128_CBC_SHA256"},
+ {0x00BC, "TLS_DH_RSA_WITH_CAMELLIA_128_CBC_SHA256"},
+ {0x00BD, "TLS_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA256"},
+ {0x00BE, "TLS_DHE_RSA_WITH_CAMELLIA_128_CBC_SHA256"},
+ {0x00BF, "TLS_DH_anon_WITH_CAMELLIA_128_CBC_SHA256"},
+ {0x00C0, "TLS_RSA_WITH_CAMELLIA_256_CBC_SHA256"},
+ {0x00C1, "TLS_DH_DSS_WITH_CAMELLIA_256_CBC_SHA256"},
+ {0x00C2, "TLS_DH_RSA_WITH_CAMELLIA_256_CBC_SHA256"},
+ {0x00C3, "TLS_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA256"},
+ {0x00C4, "TLS_DHE_RSA_WITH_CAMELLIA_256_CBC_SHA256"},
+ {0x00C5, "TLS_DH_anon_WITH_CAMELLIA_256_CBC_SHA256"},
+ {0x00FF, "TLS_EMPTY_RENEGOTIATION_INFO_SCSV"},
+ {0xC001, "TLS_ECDH_ECDSA_WITH_NULL_SHA"},
+ {0xC002, "TLS_ECDH_ECDSA_WITH_RC4_128_SHA"},
+ {0xC003, "TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA"},
+ {0xC004, "TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA"},
+ {0xC005, "TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA"},
+ {0xC006, "TLS_ECDHE_ECDSA_WITH_NULL_SHA"},
+ {0xC007, "TLS_ECDHE_ECDSA_WITH_RC4_128_SHA"},
+ {0xC008, "TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA"},
+ {0xC009, "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA"},
+ {0xC00A, "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA"},
+ {0xC00B, "TLS_ECDH_RSA_WITH_NULL_SHA"},
+ {0xC00C, "TLS_ECDH_RSA_WITH_RC4_128_SHA"},
+ {0xC00D, "TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA"},
+ {0xC00E, "TLS_ECDH_RSA_WITH_AES_128_CBC_SHA"},
+ {0xC00F, "TLS_ECDH_RSA_WITH_AES_256_CBC_SHA"},
+ {0xC010, "TLS_ECDHE_RSA_WITH_NULL_SHA"},
+ {0xC011, "TLS_ECDHE_RSA_WITH_RC4_128_SHA"},
+ {0xC012, "TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA"},
+ {0xC013, "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA"},
+ {0xC014, "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA"},
+ {0xC015, "TLS_ECDH_anon_WITH_NULL_SHA"},
+ {0xC016, "TLS_ECDH_anon_WITH_RC4_128_SHA"},
+ {0xC017, "TLS_ECDH_anon_WITH_3DES_EDE_CBC_SHA"},
+ {0xC018, "TLS_ECDH_anon_WITH_AES_128_CBC_SHA"},
+ {0xC019, "TLS_ECDH_anon_WITH_AES_256_CBC_SHA"},
+ {0xC01A, "TLS_SRP_SHA_WITH_3DES_EDE_CBC_SHA"},
+ {0xC01B, "TLS_SRP_SHA_RSA_WITH_3DES_EDE_CBC_SHA"},
+ {0xC01C, "TLS_SRP_SHA_DSS_WITH_3DES_EDE_CBC_SHA"},
+ {0xC01D, "TLS_SRP_SHA_WITH_AES_128_CBC_SHA"},
+ {0xC01E, "TLS_SRP_SHA_RSA_WITH_AES_128_CBC_SHA"},
+ {0xC01F, "TLS_SRP_SHA_DSS_WITH_AES_128_CBC_SHA"},
+ {0xC020, "TLS_SRP_SHA_WITH_AES_256_CBC_SHA"},
+ {0xC021, "TLS_SRP_SHA_RSA_WITH_AES_256_CBC_SHA"},
+ {0xC022, "TLS_SRP_SHA_DSS_WITH_AES_256_CBC_SHA"},
+ {0xC023, "TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256"},
+ {0xC024, "TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384"},
+ {0xC025, "TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA256"},
+ {0xC026, "TLS_ECDH_ECDSA_WITH_AES_256_CBC_SHA384"},
+ {0xC027, "TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256"},
+ {0xC028, "TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384"},
+ {0xC029, "TLS_ECDH_RSA_WITH_AES_128_CBC_SHA256"},
+ {0xC02A, "TLS_ECDH_RSA_WITH_AES_256_CBC_SHA384"},
+ {0xC02B, "TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256"},
+ {0xC02C, "TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384"},
+ {0xC02D, "TLS_ECDH_ECDSA_WITH_AES_128_GCM_SHA256"},
+ {0xC02E, "TLS_ECDH_ECDSA_WITH_AES_256_GCM_SHA384"},
+ {0xC02F, "TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256"},
+ {0xC030, "TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384"},
+ {0xC031, "TLS_ECDH_RSA_WITH_AES_128_GCM_SHA256"},
+ {0xC032, "TLS_ECDH_RSA_WITH_AES_256_GCM_SHA384"},
+ {0xFEFE, "SSL_RSA_FIPS_WITH_DES_CBC_SHA"},
+ {0xFEFF, "SSL_RSA_FIPS_WITH_3DES_EDE_CBC_SHA"},
+};
+
+/* Compression methods */
+static ssl_trace_tbl ssl_comp_tbl[] = {
+ {0x0000, "No Compression"},
+ {0x0001, "Zlib Compression"}
+};
+
+/* Extensions */
+static ssl_trace_tbl ssl_exts_tbl[] = {
+ {TLSEXT_TYPE_server_name, "server_name"},
+ {TLSEXT_TYPE_max_fragment_length, "max_fragment_length"},
+ {TLSEXT_TYPE_client_certificate_url, "client_certificate_url"},
+ {TLSEXT_TYPE_trusted_ca_keys, "trusted_ca_keys"},
+ {TLSEXT_TYPE_truncated_hmac, "truncated_hmac"},
+ {TLSEXT_TYPE_status_request, "status_request"},
+ {TLSEXT_TYPE_user_mapping, "user_mapping"},
+ {TLSEXT_TYPE_client_authz, "client_authz"},
+ {TLSEXT_TYPE_server_authz, "server_authz"},
+ {TLSEXT_TYPE_cert_type, "cert_type"},
+ {TLSEXT_TYPE_elliptic_curves, "elliptic_curves"},
+ {TLSEXT_TYPE_ec_point_formats, "ec_point_formats"},
+ {TLSEXT_TYPE_srp, "srp"},
+ {TLSEXT_TYPE_signature_algorithms, "signature_algorithms"},
+ {TLSEXT_TYPE_use_srtp, "use_srtp"},
+ {TLSEXT_TYPE_heartbeat, "heartbeat"},
+ {TLSEXT_TYPE_session_ticket, "session_ticket"},
+# ifdef TLSEXT_TYPE_opaque_prf_input
+ {TLSEXT_TYPE_opaque_prf_input, "opaque_prf_input"},
+# endif
+ {TLSEXT_TYPE_renegotiate, "renegotiate"},
+ {TLSEXT_TYPE_next_proto_neg, "next_proto_neg"},
+ {TLSEXT_TYPE_padding, "padding"}
+};
+
+static ssl_trace_tbl ssl_curve_tbl[] = {
+ {1, "sect163k1 (K-163)"},
+ {2, "sect163r1"},
+ {3, "sect163r2 (B-163)"},
+ {4, "sect193r1"},
+ {5, "sect193r2"},
+ {6, "sect233k1 (K-233)"},
+ {7, "sect233r1 (B-233)"},
+ {8, "sect239k1"},
+ {9, "sect283k1 (K-283)"},
+ {10, "sect283r1 (B-283)"},
+ {11, "sect409k1 (K-409)"},
+ {12, "sect409r1 (B-409)"},
+ {13, "sect571k1 (K-571)"},
+ {14, "sect571r1 (B-571)"},
+ {15, "secp160k1"},
+ {16, "secp160r1"},
+ {17, "secp160r2"},
+ {18, "secp192k1"},
+ {19, "secp192r1 (P-192)"},
+ {20, "secp224k1"},
+ {21, "secp224r1 (P-224)"},
+ {22, "secp256k1"},
+ {23, "secp256r1 (P-256)"},
+ {24, "secp384r1 (P-384)"},
+ {25, "secp521r1 (P-521)"},
+ {26, "brainpoolP256r1"},
+ {27, "brainpoolP384r1"},
+ {28, "brainpoolP512r1"},
+ {0xFF01, "arbitrary_explicit_prime_curves"},
+ {0xFF02, "arbitrary_explicit_char2_curves"}
+};
+
+static ssl_trace_tbl ssl_point_tbl[] = {
+ {0, "uncompressed"},
+ {1, "ansiX962_compressed_prime"},
+ {2, "ansiX962_compressed_char2"}
+};
+
+static ssl_trace_tbl ssl_md_tbl[] = {
+ {0, "none"},
+ {1, "md5"},
+ {2, "sha1"},
+ {3, "sha224"},
+ {4, "sha256"},
+ {5, "sha384"},
+ {6, "sha512"}
+};
+
+static ssl_trace_tbl ssl_sig_tbl[] = {
+ {0, "anonymous"},
+ {1, "rsa"},
+ {2, "dsa"},
+ {3, "ecdsa"}
+};
+
+static ssl_trace_tbl ssl_hb_tbl[] = {
+ {1, "peer_allowed_to_send"},
+ {2, "peer_not_allowed_to_send"}
+};
+
+static ssl_trace_tbl ssl_hb_type_tbl[] = {
+ {1, "heartbeat_request"},
+ {2, "heartbeat_response"}
+};
+
+static ssl_trace_tbl ssl_ctype_tbl[] = {
+ {1, "rsa_sign"},
+ {2, "dss_sign"},
+ {3, "rsa_fixed_dh"},
+ {4, "dss_fixed_dh"},
+ {5, "rsa_ephemeral_dh"},
+ {6, "dss_ephemeral_dh"},
+ {20, "fortezza_dms"},
+ {64, "ecdsa_sign"},
+ {65, "rsa_fixed_ecdh"},
+ {66, "ecdsa_fixed_ecdh"}
+};
+
+static ssl_trace_tbl ssl_crypto_tbl[] = {
+ {TLS1_RT_CRYPTO_PREMASTER, "Premaster Secret"},
+ {TLS1_RT_CRYPTO_CLIENT_RANDOM, "Client Random"},
+ {TLS1_RT_CRYPTO_SERVER_RANDOM, "Server Random"},
+ {TLS1_RT_CRYPTO_MASTER, "Master Secret"},
+ {TLS1_RT_CRYPTO_MAC | TLS1_RT_CRYPTO_WRITE, "Write Mac Secret"},
+ {TLS1_RT_CRYPTO_MAC | TLS1_RT_CRYPTO_READ, "Read Mac Secret"},
+ {TLS1_RT_CRYPTO_KEY | TLS1_RT_CRYPTO_WRITE, "Write Key"},
+ {TLS1_RT_CRYPTO_KEY | TLS1_RT_CRYPTO_READ, "Read Key"},
+ {TLS1_RT_CRYPTO_IV | TLS1_RT_CRYPTO_WRITE, "Write IV"},
+ {TLS1_RT_CRYPTO_IV | TLS1_RT_CRYPTO_READ, "Read IV"},
+ {TLS1_RT_CRYPTO_FIXED_IV | TLS1_RT_CRYPTO_WRITE, "Write IV (fixed part)"},
+ {TLS1_RT_CRYPTO_FIXED_IV | TLS1_RT_CRYPTO_READ, "Read IV (fixed part)"}
+};
+
+static void ssl_print_hex(BIO *bio, int indent, const char *name,
+ const unsigned char *msg, size_t msglen)
+{
+ size_t i;
+ BIO_indent(bio, indent, 80);
+ BIO_printf(bio, "%s (len=%d): ", name, (int)msglen);
+ for (i = 0; i < msglen; i++)
+ BIO_printf(bio, "%02X", msg[i]);
+ BIO_puts(bio, "\n");
+}
+
+static int ssl_print_hexbuf(BIO *bio, int indent,
+ const char *name, size_t nlen,
+ const unsigned char **pmsg, size_t *pmsglen)
+{
+ size_t blen;
+ const unsigned char *p = *pmsg;
+ if (*pmsglen < nlen)
+ return 0;
+ blen = p[0];
+ if (nlen > 1)
+ blen = (blen << 8) | p[1];
+ if (*pmsglen < nlen + blen)
+ return 0;
+ p += nlen;
+ ssl_print_hex(bio, indent, name, p, blen);
+ *pmsg += blen + nlen;
+ *pmsglen -= blen + nlen;
+ return 1;
+}
+
+static int ssl_print_version(BIO *bio, int indent, const char *name,
+ const unsigned char **pmsg, size_t *pmsglen)
+{
+ int vers;
+ if (*pmsglen < 2)
+ return 0;
+ vers = ((*pmsg)[0] << 8) | (*pmsg)[1];
+ BIO_indent(bio, indent, 80);
+ BIO_printf(bio, "%s=0x%x (%s)\n",
+ name, vers, ssl_trace_str(vers, ssl_version_tbl));
+ *pmsg += 2;
+ *pmsglen -= 2;
+ return 1;
+}
+
+static int ssl_print_random(BIO *bio, int indent,
+ const unsigned char **pmsg, size_t *pmsglen)
+{
+ unsigned int tm;
+ const unsigned char *p = *pmsg;
+ if (*pmsglen < 32)
+ return 0;
+ tm = (p[0] << 24) | (p[1] << 16) | (p[2] << 8) | p[3];
+ p += 4;
+ BIO_indent(bio, indent, 80);
+ BIO_puts(bio, "Random:\n");
+ BIO_indent(bio, indent + 2, 80);
+ BIO_printf(bio, "gmt_unix_time=0x%08X\n", tm);
+ ssl_print_hex(bio, indent + 2, "random_bytes", p, 28);
+ *pmsg += 32;
+ *pmsglen -= 32;
+ return 1;
+}
+
+static int ssl_print_signature(BIO *bio, int indent, SSL *s,
+ const unsigned char **pmsg, size_t *pmsglen)
+{
+ if (*pmsglen < 2)
+ return 0;
+ if (SSL_USE_SIGALGS(s)) {
+ const unsigned char *p = *pmsg;
+ BIO_indent(bio, indent, 80);
+ BIO_printf(bio, "Signature Algorithm %s+%s (%d+%d)\n",
+ ssl_trace_str(p[0], ssl_md_tbl),
+ ssl_trace_str(p[1], ssl_sig_tbl), p[0], p[1]);
+ *pmsg += 2;
+ *pmsglen -= 2;
+ }
+ return ssl_print_hexbuf(bio, indent, "Signature", 2, pmsg, pmsglen);
+}
+
+static int ssl_print_extension(BIO *bio, int indent, int server, int extype,
+ const unsigned char *ext, size_t extlen)
+{
+ size_t xlen;
+ BIO_indent(bio, indent, 80);
+ BIO_printf(bio, "extension_type=%s(%d), length=%d\n",
+ ssl_trace_str(extype, ssl_exts_tbl), extype, (int)extlen);
+ switch (extype) {
+ case TLSEXT_TYPE_ec_point_formats:
+ if (extlen < 1)
+ return 0;
+ xlen = ext[0];
+ if (extlen != xlen + 1)
+ return 0;
+ return ssl_trace_list(bio, indent + 2,
+ ext + 1, xlen, 1, ssl_point_tbl);
+
+ case TLSEXT_TYPE_elliptic_curves:
+ if (extlen < 2)
+ return 0;
+ xlen = (ext[0] << 8) | ext[1];
+ if (extlen != xlen + 2)
+ return 0;
+ return ssl_trace_list(bio, indent + 2,
+ ext + 2, xlen, 2, ssl_curve_tbl);
+
+ case TLSEXT_TYPE_signature_algorithms:
+
+ if (extlen < 2)
+ return 0;
+ xlen = (ext[0] << 8) | ext[1];
+ if (extlen != xlen + 2)
+ return 0;
+ if (xlen & 1)
+ return 0;
+ ext += 2;
+ while (xlen > 0) {
+ BIO_indent(bio, indent + 2, 80);
+ BIO_printf(bio, "%s+%s (%d+%d)\n",
+ ssl_trace_str(ext[0], ssl_md_tbl),
+ ssl_trace_str(ext[1], ssl_sig_tbl), ext[0], ext[1]);
+ xlen -= 2;
+ ext += 2;
+ }
+ break;
+
+ case TLSEXT_TYPE_renegotiate:
+ if (extlen < 1)
+ return 0;
+ xlen = ext[0];
+ if (xlen + 1 != extlen)
+ return 0;
+ ext++;
+ if (xlen) {
+ if (server) {
+ if (xlen & 1)
+ return 0;
+ xlen >>= 1;
+ }
+ ssl_print_hex(bio, indent + 4, "client_verify_data", ext, xlen);
+ if (server) {
+ ext += xlen;
+ ssl_print_hex(bio, indent + 4,
+ "server_verify_data", ext, xlen);
+ }
+ } else {
+ BIO_indent(bio, indent + 4, 80);
+ BIO_puts(bio, "<EMPTY>\n");
+ }
+ break;
+
+ case TLSEXT_TYPE_heartbeat:
+ if (extlen != 1)
+ return 0;
+ BIO_indent(bio, indent + 2, 80);
+ BIO_printf(bio, "HeartbeatMode: %s\n",
+ ssl_trace_str(ext[0], ssl_hb_tbl));
+ break;
+
+ case TLSEXT_TYPE_session_ticket:
+ if (extlen != 0)
+ ssl_print_hex(bio, indent + 4, "ticket", ext, extlen);
+ break;
+
+ default:
+ BIO_dump_indent(bio, (char *)ext, extlen, indent + 2);
+ }
+ return 1;
+}
+
+static int ssl_print_extensions(BIO *bio, int indent, int server,
+ const unsigned char *msg, size_t msglen)
+{
+ size_t extslen;
+ BIO_indent(bio, indent, 80);
+ if (msglen == 0) {
+ BIO_puts(bio, "No Extensions\n");
+ return 1;
+ }
+ extslen = (msg[0] << 8) | msg[1];
+ if (extslen != msglen - 2)
+ return 0;
+ msg += 2;
+ msglen = extslen;
+ BIO_printf(bio, "extensions, length = %d\n", (int)msglen);
+ while (msglen > 0) {
+ int extype;
+ size_t extlen;
+ if (msglen < 4)
+ return 0;
+ extype = (msg[0] << 8) | msg[1];
+ extlen = (msg[2] << 8) | msg[3];
+ if (msglen < extlen + 4)
+ return 0;
+ msg += 4;
+ if (!ssl_print_extension(bio, indent + 2, server,
+ extype, msg, extlen))
+ return 0;
+ msg += extlen;
+ msglen -= extlen + 4;
+ }
+ return 1;
+}
+
+static int ssl_print_client_hello(BIO *bio, SSL *ssl, int indent,
+ const unsigned char *msg, size_t msglen)
+{
+ size_t len;
+ unsigned int cs;
+ if (!ssl_print_version(bio, indent, "client_version", &msg, &msglen))
+ return 0;
+ if (!ssl_print_random(bio, indent, &msg, &msglen))
+ return 0;
+ if (!ssl_print_hexbuf(bio, indent, "session_id", 1, &msg, &msglen))
+ return 0;
+ if (SSL_IS_DTLS(ssl)) {
+ if (!ssl_print_hexbuf(bio, indent, "cookie", 1, &msg, &msglen))
+ return 0;
+ }
+ if (msglen < 2)
+ return 0;
+ len = (msg[0] << 8) | msg[1];
+ msg += 2;
+ msglen -= 2;
+ BIO_indent(bio, indent, 80);
+ BIO_printf(bio, "cipher_suites (len=%d)\n", (int)len);
+ if (msglen < len || len & 1)
+ return 0;
+ while (len > 0) {
+ cs = (msg[0] << 8) | msg[1];
+ BIO_indent(bio, indent + 2, 80);
+ BIO_printf(bio, "{0x%02X, 0x%02X} %s\n",
+ msg[0], msg[1], ssl_trace_str(cs, ssl_ciphers_tbl));
+ msg += 2;
+ msglen -= 2;
+ len -= 2;
+ }
+ if (msglen < 1)
+ return 0;
+ len = msg[0];
+ msg++;
+ msglen--;
+ if (msglen < len)
+ return 0;
+ BIO_indent(bio, indent, 80);
+ BIO_printf(bio, "compression_methods (len=%d)\n", (int)len);
+ while (len > 0) {
+ BIO_indent(bio, indent + 2, 80);
+ BIO_printf(bio, "%s (0x%02X)\n",
+ ssl_trace_str(msg[0], ssl_comp_tbl), msg[0]);
+ msg++;
+ msglen--;
+ len--;
+ }
+ if (!ssl_print_extensions(bio, indent, 0, msg, msglen))
+ return 0;
+ return 1;
+}
+
+static int dtls_print_hello_vfyrequest(BIO *bio, int indent,
+ const unsigned char *msg,
+ size_t msglen)
+{
+ if (!ssl_print_version(bio, indent, "server_version", &msg, &msglen))
+ return 0;
+ if (!ssl_print_hexbuf(bio, indent, "cookie", 1, &msg, &msglen))
+ return 0;
+ return 1;
+}
+
+static int ssl_print_server_hello(BIO *bio, int indent,
+ const unsigned char *msg, size_t msglen)
+{
+ unsigned int cs;
+ if (!ssl_print_version(bio, indent, "server_version", &msg, &msglen))
+ return 0;
+ if (!ssl_print_random(bio, indent, &msg, &msglen))
+ return 0;
+ if (!ssl_print_hexbuf(bio, indent, "session_id", 1, &msg, &msglen))
+ return 0;
+ if (msglen < 2)
+ return 0;
+ cs = (msg[0] << 8) | msg[1];
+ BIO_indent(bio, indent, 80);
+ BIO_printf(bio, "cipher_suite {0x%02X, 0x%02X} %s\n",
+ msg[0], msg[1], ssl_trace_str(cs, ssl_ciphers_tbl));
+ msg += 2;
+ msglen -= 2;
+ if (msglen < 1)
+ return 0;
+ BIO_indent(bio, indent, 80);
+ BIO_printf(bio, "compression_method: %s (0x%02X)\n",
+ ssl_trace_str(msg[0], ssl_comp_tbl), msg[0]);
+ msg++;
+ msglen--;
+ if (!ssl_print_extensions(bio, indent, 1, msg, msglen))
+ return 0;
+ return 1;
+}
+
+static int ssl_get_keyex(const char **pname, SSL *ssl)
+{
+ unsigned long alg_k = ssl->s3->tmp.new_cipher->algorithm_mkey;
+ if (alg_k & SSL_kRSA) {
+ *pname = "rsa";
+ return SSL_kRSA;
+ }
+ if (alg_k & SSL_kDHr) {
+ *pname = "dh_rsa";
+ return SSL_kDHr;
+ }
+ if (alg_k & SSL_kDHd) {
+ *pname = "dh_dss";
+ return SSL_kDHd;
+ }
+ if (alg_k & SSL_kKRB5) {
+ *pname = "krb5";
+ return SSL_kKRB5;
+ }
+ if (alg_k & SSL_kEDH) {
+ *pname = "edh";
+ return SSL_kEDH;
+ }
+ if (alg_k & SSL_kEECDH) {
+ *pname = "EECDH";
+ return SSL_kEECDH;
+ }
+ if (alg_k & SSL_kECDHr) {
+ *pname = "ECDH RSA";
+ return SSL_kECDHr;
+ }
+ if (alg_k & SSL_kECDHe) {
+ *pname = "ECDH ECDSA";
+ return SSL_kECDHe;
+ }
+ if (alg_k & SSL_kPSK) {
+ *pname = "PSK";
+ return SSL_kPSK;
+ }
+ if (alg_k & SSL_kSRP) {
+ *pname = "SRP";
+ return SSL_kSRP;
+ }
+ if (alg_k & SSL_kGOST) {
+ *pname = "GOST";
+ return SSL_kGOST;
+ }
+ *pname = "UNKNOWN";
+ return 0;
+}
+
+static int ssl_print_client_keyex(BIO *bio, int indent, SSL *ssl,
+ const unsigned char *msg, size_t msglen)
+{
+ const char *algname;
+ int id;
+ id = ssl_get_keyex(&algname, ssl);
+ BIO_indent(bio, indent, 80);
+ BIO_printf(bio, "KeyExchangeAlgorithm=%s\n", algname);
+ switch (id) {
+
+ case SSL_kRSA:
+ if (TLS1_get_version(ssl) == SSL3_VERSION) {
+ ssl_print_hex(bio, indent + 2,
+ "EncyptedPreMasterSecret", msg, msglen);
+ } else {
+ if (!ssl_print_hexbuf(bio, indent + 2,
+ "EncyptedPreMasterSecret", 2,
+ &msg, &msglen))
+ return 0;
+ }
+ break;
+
+ /* Implicit parameters only allowed for static DH */
+ case SSL_kDHd:
+ case SSL_kDHr:
+ if (msglen == 0) {
+ BIO_indent(bio, indent + 2, 80);
+ BIO_puts(bio, "implicit\n");
+ break;
+ }
+ case SSL_kEDH:
+ if (!ssl_print_hexbuf(bio, indent + 2, "dh_Yc", 2, &msg, &msglen))
+ return 0;
+ break;
+
+ case SSL_kECDHr:
+ case SSL_kECDHe:
+ if (msglen == 0) {
+ BIO_indent(bio, indent + 2, 80);
+ BIO_puts(bio, "implicit\n");
+ break;
+ }
+ case SSL_kEECDH:
+ if (!ssl_print_hexbuf(bio, indent + 2, "ecdh_Yc", 1, &msg, &msglen))
+ return 0;
+ break;
+ }
+
+ return 1;
+}
+
+static int ssl_print_server_keyex(BIO *bio, int indent, SSL *ssl,
+ const unsigned char *msg, size_t msglen)
+{
+ const char *algname;
+ int id;
+ id = ssl_get_keyex(&algname, ssl);
+ BIO_indent(bio, indent, 80);
+ BIO_printf(bio, "KeyExchangeAlgorithm=%s\n", algname);
+ switch (id) {
+ /* Should never happen */
+ case SSL_kDHd:
+ case SSL_kDHr:
+ case SSL_kECDHr:
+ case SSL_kECDHe:
+ BIO_indent(bio, indent + 2, 80);
+ BIO_printf(bio, "Unexpected Message\n");
+ break;
+
+ case SSL_kRSA:
+
+ if (!ssl_print_hexbuf(bio, indent + 2, "rsa_modulus", 2,
+ &msg, &msglen))
+ return 0;
+ if (!ssl_print_hexbuf(bio, indent + 2, "rsa_exponent", 2,
+ &msg, &msglen))
+ return 0;
+ break;
+
+ case SSL_kEDH:
+ if (!ssl_print_hexbuf(bio, indent + 2, "dh_p", 2, &msg, &msglen))
+ return 0;
+ if (!ssl_print_hexbuf(bio, indent + 2, "dh_g", 2, &msg, &msglen))
+ return 0;
+ if (!ssl_print_hexbuf(bio, indent + 2, "dh_Ys", 2, &msg, &msglen))
+ return 0;
+ break;
+
+ case SSL_kEECDH:
+ if (msglen < 1)
+ return 0;
+ BIO_indent(bio, indent + 2, 80);
+ if (msg[0] == EXPLICIT_PRIME_CURVE_TYPE)
+ BIO_puts(bio, "explicit_prime\n");
+ else if (msg[0] == EXPLICIT_CHAR2_CURVE_TYPE)
+ BIO_puts(bio, "explicit_char2\n");
+ else if (msg[0] == NAMED_CURVE_TYPE) {
+ int curve;
+ if (msglen < 3)
+ return 0;
+ curve = (msg[1] << 8) | msg[2];
+ BIO_printf(bio, "named_curve: %s (%d)\n",
+ ssl_trace_str(curve, ssl_curve_tbl), curve);
+ msg += 3;
+ msglen -= 3;
+ if (!ssl_print_hexbuf(bio, indent + 2, "point", 1, &msg, &msglen))
+ return 0;
+ }
+ break;
+ }
+ return ssl_print_signature(bio, indent, ssl, &msg, &msglen);
+}
+
+static int ssl_print_certificate(BIO *bio, int indent,
+ const unsigned char **pmsg, size_t *pmsglen)
+{
+ size_t msglen = *pmsglen;
+ size_t clen;
+ X509 *x;
+ const unsigned char *p = *pmsg, *q;
+ if (msglen < 3)
+ return 0;
+ clen = (p[0] << 16) | (p[1] << 8) | p[2];
+ if (msglen < clen + 3)
+ return 0;
+ q = p + 3;
+ BIO_indent(bio, indent, 80);
+ BIO_printf(bio, "ASN.1Cert, length=%d", (int)clen);
+ x = d2i_X509(NULL, &q, clen);
+ if (!x)
+ BIO_puts(bio, "<UNPARSEABLE CERTIFICATE>\n");
+ else {
+ BIO_puts(bio, "\n------details-----\n");
+ X509_print_ex(bio, x, XN_FLAG_ONELINE, 0);
+ PEM_write_bio_X509(bio, x);
+ /* Print certificate stuff */
+ BIO_puts(bio, "------------------\n");
+ X509_free(x);
+ }
+ if (q != p + 3 + clen) {
+ BIO_puts(bio, "<TRAILING GARBAGE AFTER CERTIFICATE>\n");
+ }
+ *pmsg += clen + 3;
+ *pmsglen -= clen + 3;
+ return 1;
+}
+
+static int ssl_print_certificates(BIO *bio, int indent,
+ const unsigned char *msg, size_t msglen)
+{
+ size_t clen;
+ if (msglen < 3)
+ return 0;
+ clen = (msg[0] << 16) | (msg[1] << 8) | msg[2];
+ if (msglen != clen + 3)
+ return 0;
+ msg += 3;
+ BIO_indent(bio, indent, 80);
+ BIO_printf(bio, "certificate_list, length=%d\n", (int)clen);
+ while (clen > 0) {
+ if (!ssl_print_certificate(bio, indent + 2, &msg, &clen))
+ return 0;
+ }
+ return 1;
+}
+
+static int ssl_print_cert_request(BIO *bio, int indent, SSL *s,
+ const unsigned char *msg, size_t msglen)
+{
+ size_t xlen;
+ if (msglen < 1)
+ return 0;
+ xlen = msg[0];
+ if (msglen < xlen + 1)
+ return 0;
+ msg++;
+ BIO_indent(bio, indent, 80);
+ BIO_printf(bio, "certificate_types (len=%d)\n", (int)xlen);
+ if (!ssl_trace_list(bio, indent + 2, msg, xlen, 1, ssl_ctype_tbl))
+ return 0;
+ msg += xlen;
+ msglen -= xlen + 1;
+ if (!SSL_USE_SIGALGS(s))
+ goto skip_sig;
+ if (msglen < 2)
+ return 0;
+ xlen = (msg[0] << 8) | msg[1];
+ if (msglen < xlen + 2 || (xlen & 1))
+ return 0;
+ msg += 2;
+ BIO_indent(bio, indent, 80);
+ BIO_printf(bio, "signature_algorithms (len=%d)\n", (int)xlen);
+ while (xlen > 0) {
+ BIO_indent(bio, indent + 2, 80);
+ BIO_printf(bio, "%s+%s (%d+%d)\n",
+ ssl_trace_str(msg[0], ssl_md_tbl),
+ ssl_trace_str(msg[1], ssl_sig_tbl), msg[0], msg[1]);
+ xlen -= 2;
+ msg += 2;
+ }
+ msg += xlen;
+ msglen -= xlen + 2;
+
+ skip_sig:
+ xlen = (msg[0] << 8) | msg[1];
+ BIO_indent(bio, indent, 80);
+ if (msglen < xlen + 2)
+ return 0;
+ msg += 2;
+ msglen -= 2;
+ BIO_printf(bio, "certificate_authorities (len=%d)\n", (int)xlen);
+ while (xlen > 0) {
+ size_t dlen;
+ X509_NAME *nm;
+ const unsigned char *p;
+ if (xlen < 2)
+ return 0;
+ dlen = (msg[0] << 8) | msg[1];
+ if (xlen < dlen + 2)
+ return 0;
+ msg += 2;
+ BIO_indent(bio, indent + 2, 80);
+ BIO_printf(bio, "DistinguishedName (len=%d): ", (int)dlen);
+ p = msg;
+ nm = d2i_X509_NAME(NULL, &p, dlen);
+ if (!nm) {
+ BIO_puts(bio, "<UNPARSEABLE DN>\n");
+ } else {
+ X509_NAME_print_ex(bio, nm, 0, XN_FLAG_ONELINE);
+ BIO_puts(bio, "\n");
+ X509_NAME_free(nm);
+ }
+ xlen -= dlen + 2;
+ msg += dlen;
+ }
+ return 1;
+}
+
+static int ssl_print_ticket(BIO *bio, int indent,
+ const unsigned char *msg, size_t msglen)
+{
+ unsigned int tick_life;
+ if (msglen == 0) {
+ BIO_indent(bio, indent + 2, 80);
+ BIO_puts(bio, "No Ticket\n");
+ return 1;
+ }
+ if (msglen < 4)
+ return 0;
+ tick_life = (msg[0] << 24) | (msg[1] << 16) | (msg[2] << 8) | msg[3];
+ msglen -= 4;
+ msg += 4;
+ BIO_indent(bio, indent + 2, 80);
+ BIO_printf(bio, "ticket_lifetime_hint=%u\n", tick_life);
+ if (!ssl_print_hexbuf(bio, indent + 2, "ticket", 2, &msg, &msglen))
+ return 0;
+ if (msglen)
+ return 0;
+ return 1;
+}
+
+static int ssl_print_handshake(BIO *bio, SSL *ssl,
+ const unsigned char *msg, size_t msglen,
+ int indent)
+{
+ size_t hlen;
+ unsigned char htype;
+ if (msglen < 4)
+ return 0;
+ htype = msg[0];
+ hlen = (msg[1] << 16) | (msg[2] << 8) | msg[3];
+ BIO_indent(bio, indent, 80);
+ BIO_printf(bio, "%s, Length=%d\n",
+ ssl_trace_str(htype, ssl_handshake_tbl), (int)hlen);
+ msg += 4;
+ msglen -= 4;
+ if (SSL_IS_DTLS(ssl)) {
+ if (msglen < 8)
+ return 0;
+ BIO_indent(bio, indent, 80);
+ BIO_printf(bio, "message_seq=%d, fragment_offset=%d, "
+ "fragment_length=%d\n",
+ (msg[0] << 8) | msg[1],
+ (msg[2] << 16) | (msg[3] << 8) | msg[4],
+ (msg[5] << 16) | (msg[6] << 8) | msg[7]);
+ msg += 8;
+ msglen -= 8;
+ }
+ if (msglen < hlen)
+ return 0;
+ switch (htype) {
+ case SSL3_MT_CLIENT_HELLO:
+ if (!ssl_print_client_hello(bio, ssl, indent + 2, msg, msglen))
+ return 0;
+ break;
+
+ case DTLS1_MT_HELLO_VERIFY_REQUEST:
+ if (!dtls_print_hello_vfyrequest(bio, indent + 2, msg, msglen))
+ return 0;
+ break;
+
+ case SSL3_MT_SERVER_HELLO:
+ if (!ssl_print_server_hello(bio, indent + 2, msg, msglen))
+ return 0;
+ break;
+
+ case SSL3_MT_SERVER_KEY_EXCHANGE:
+ if (!ssl_print_server_keyex(bio, indent + 2, ssl, msg, msglen))
+ return 0;
+ break;
+
+ case SSL3_MT_CLIENT_KEY_EXCHANGE:
+ if (!ssl_print_client_keyex(bio, indent + 2, ssl, msg, msglen))
+ return 0;
+ break;
+
+ case SSL3_MT_CERTIFICATE:
+ if (!ssl_print_certificates(bio, indent + 2, msg, msglen))
+ return 0;
+ break;
+
+ case SSL3_MT_CERTIFICATE_VERIFY:
+ if (!ssl_print_signature(bio, indent + 2, ssl, &msg, &msglen))
+ return 0;
+ break;
+
+ case SSL3_MT_CERTIFICATE_REQUEST:
+ if (!ssl_print_cert_request(bio, indent + 2, ssl, msg, msglen))
+ return 0;
+ break;
+
+ case SSL3_MT_FINISHED:
+ ssl_print_hex(bio, indent + 2, "verify_data", msg, msglen);
+ break;
+
+ case SSL3_MT_SERVER_DONE:
+ if (msglen != 0)
+ ssl_print_hex(bio, indent + 2, "unexpected value", msg, msglen);
+ break;
+
+ case SSL3_MT_NEWSESSION_TICKET:
+ if (!ssl_print_ticket(bio, indent + 2, msg, msglen))
+ return 0;
+ break;
+
+ default:
+ BIO_indent(bio, indent + 2, 80);
+ BIO_puts(bio, "Unsupported, hex dump follows:\n");
+ BIO_dump_indent(bio, (char *)msg, msglen, indent + 4);
+ }
+ return 1;
+}
+
+static int ssl_print_heartbeat(BIO *bio, int indent,
+ const unsigned char *msg, size_t msglen)
+{
+ if (msglen < 3)
+ return 0;
+ BIO_indent(bio, indent, 80);
+ BIO_printf(bio, "HeartBeatMessageType: %s\n",
+ ssl_trace_str(msg[0], ssl_hb_type_tbl));
+ msg++;
+ msglen--;
+ if (!ssl_print_hexbuf(bio, indent, "payload", 2, &msg, &msglen))
+ return 0;
+ ssl_print_hex(bio, indent, "padding", msg, msglen);
+ return 1;
+}
+
+const char *SSL_CIPHER_standard_name(const SSL_CIPHER *c)
+{
+ if (c->algorithm_ssl & SSL_SSLV2)
+ return NULL;
+ return ssl_trace_str(c->id & 0xFFFF, ssl_ciphers_tbl);
+}
+
+void SSL_trace(int write_p, int version, int content_type,
+ const void *buf, size_t msglen, SSL *ssl, void *arg)
+{
+ const unsigned char *msg = buf;
+ BIO *bio = arg;
+
+ if (write_p == 2) {
+ BIO_puts(bio, "Session ");
+ ssl_print_hex(bio, 0,
+ ssl_trace_str(content_type, ssl_crypto_tbl),
+ msg, msglen);
+ return;
+ }
+ switch (content_type) {
+ case SSL3_RT_HEADER:
+ {
+ int hvers = msg[1] << 8 | msg[2];
+ BIO_puts(bio, write_p ? "Sent" : "Received");
+ BIO_printf(bio, " Record\nHeader:\n Version = %s (0x%x)\n",
+ ssl_trace_str(hvers, ssl_version_tbl), hvers);
+ if (SSL_IS_DTLS(ssl)) {
+ BIO_printf(bio,
+ " epoch=%d, sequence_number=%04x%04x%04x\n",
+ (msg[3] << 8 | msg[4]),
+ (msg[5] << 8 | msg[6]),
+ (msg[7] << 8 | msg[8]), (msg[9] << 8 | msg[10]));
+# if 0
+ /*
+ * Just print handshake type so we can see what is going on
+ * during fragmentation.
+ */
+ BIO_printf(bio, "(%s)\n",
+ ssl_trace_str(msg[msglen], ssl_handshake_tbl));
+# endif
+ }
+
+ BIO_printf(bio, " Content Type = %s (%d)\n Length = %d",
+ ssl_trace_str(msg[0], ssl_content_tbl), msg[0],
+ msg[msglen - 2] << 8 | msg[msglen - 1]);
+ }
+ break;
+ case SSL3_RT_HANDSHAKE:
+ if (!ssl_print_handshake(bio, ssl, msg, msglen, 4))
+ BIO_printf(bio, "Message length parse error!\n");
+ break;
+
+ case SSL3_RT_CHANGE_CIPHER_SPEC:
+ if (msglen == 1 && msg[0] == 1)
+ BIO_puts(bio, " change_cipher_spec (1)\n");
+ else
+ ssl_print_hex(bio, 4, "unknown value", msg, msglen);
+ break;
+
+ case SSL3_RT_ALERT:
+ if (msglen != 2)
+ BIO_puts(bio, " Illegal Alert Length\n");
+ else {
+ BIO_printf(bio, " Level=%s(%d), description=%s(%d)\n",
+ SSL_alert_type_string_long(msg[0] << 8),
+ msg[0], SSL_alert_desc_string_long(msg[1]), msg[1]);
+ }
+ case TLS1_RT_HEARTBEAT:
+ ssl_print_heartbeat(bio, 4, msg, msglen);
+ break;
+
+ }
+
+ BIO_puts(bio, "\n");
+}
+
+#endif
diff --git a/crypto/openssl/ssl/tls1.h b/crypto/openssl/ssl/tls1.h
index 69d8186..5929607 100644
--- a/crypto/openssl/ssl/tls1.h
+++ b/crypto/openssl/ssl/tls1.h
@@ -209,11 +209,9 @@ extern "C" {
# define TLSEXT_TYPE_status_request 5
/* ExtensionType values from RFC4681 */
# define TLSEXT_TYPE_user_mapping 6
-
/* ExtensionType values from RFC5878 */
# define TLSEXT_TYPE_client_authz 7
# define TLSEXT_TYPE_server_authz 8
-
/* ExtensionType values from RFC6091 */
# define TLSEXT_TYPE_cert_type 9
@@ -233,6 +231,9 @@ extern "C" {
/* ExtensionType value from RFC5620 */
# define TLSEXT_TYPE_heartbeat 15
+/* ExtensionType value from draft-ietf-tls-applayerprotoneg-00 */
+# define TLSEXT_TYPE_application_layer_protocol_negotiation 16
+
/*
* ExtensionType value for TLS padding extension.
* http://www.iana.org/assignments/tls-extensiontype-values/tls-extensiontype-values.xhtml
@@ -250,7 +251,7 @@ extern "C" {
* i.e. build with -DTLSEXT_TYPE_opaque_prf_input=38183
* using whatever extension number you'd like to try
*/
-# define TLSEXT_TYPE_opaque_prf_input ?? */
+# define TLSEXT_TYPE_opaque_prf_input ??
# endif
/* Temporary extension type */
@@ -280,6 +281,9 @@ extern "C" {
# define TLSEXT_signature_dsa 2
# define TLSEXT_signature_ecdsa 3
+/* Total number of different signature algorithms */
+# define TLSEXT_signature_num 4
+
# define TLSEXT_hash_none 0
# define TLSEXT_hash_md5 1
# define TLSEXT_hash_sha1 2
@@ -288,6 +292,18 @@ extern "C" {
# define TLSEXT_hash_sha384 5
# define TLSEXT_hash_sha512 6
+/* Total number of different digest algorithms */
+
+# define TLSEXT_hash_num 7
+
+/* Flag set for unrecognised algorithms */
+# define TLSEXT_nid_unknown 0x1000000
+
+/* ECC curves */
+
+# define TLSEXT_curve_P_256 23
+# define TLSEXT_curve_P_384 24
+
# ifndef OPENSSL_NO_TLSEXT
# define TLSEXT_MAXLEN_host_name 255
@@ -306,6 +322,16 @@ int SSL_export_keying_material(SSL *s, unsigned char *out, size_t olen,
const unsigned char *p, size_t plen,
int use_context);
+int SSL_get_sigalgs(SSL *s, int idx,
+ int *psign, int *phash, int *psignandhash,
+ unsigned char *rsig, unsigned char *rhash);
+
+int SSL_get_shared_sigalgs(SSL *s, int idx,
+ int *psign, int *phash, int *psignandhash,
+ unsigned char *rsig, unsigned char *rhash);
+
+int SSL_check_chain(SSL *s, X509 *x, EVP_PKEY *pk, STACK_OF(X509) *chain);
+
# define SSL_set_tlsext_host_name(s,name) \
SSL_ctrl(s,SSL_CTRL_SET_TLSEXT_HOSTNAME,TLSEXT_NAMETYPE_host_name,(char *)name)
@@ -541,11 +567,10 @@ SSL_CTX_callback_ctrl(ssl,SSL_CTRL_SET_TLSEXT_TICKET_KEY_CB,(void (*)(void))cb)
# define TLS1_CK_ECDH_RSA_WITH_AES_256_GCM_SHA384 0x0300C032
/*
- * XXX Inconsistency alert: The OpenSSL names of ciphers with ephemeral DH
- * here include the string "DHE", while elsewhere it has always been "EDH".
- * (The alias for the list of all such ciphers also is "EDH".) The
- * specifications speak of "EDH"; maybe we should allow both forms for
- * everything.
+ * XXX * Backward compatibility alert: + * Older versions of OpenSSL gave
+ * some DHE ciphers names with "EDH" + * instead of "DHE". Going forward, we
+ * should be using DHE + * everywhere, though we may indefinitely maintain
+ * aliases for users + * or configurations that used "EDH" +
*/
# define TLS1_TXT_RSA_EXPORT1024_WITH_RC4_56_MD5 "EXP1024-RC4-MD5"
# define TLS1_TXT_RSA_EXPORT1024_WITH_RC2_CBC_56_MD5 "EXP1024-RC2-CBC-MD5"
diff --git a/crypto/openssl/util/copy-if-different.pl b/crypto/openssl/util/copy-if-different.pl
new file mode 100755
index 0000000..ec99e08
--- /dev/null
+++ b/crypto/openssl/util/copy-if-different.pl
@@ -0,0 +1,78 @@
+#!/usr/local/bin/perl
+
+use strict;
+
+use Fcntl;
+
+# copy-if-different.pl
+
+# Copy to the destination if the source is not the same as it.
+
+my @filelist;
+
+foreach my $arg (@ARGV) {
+ $arg =~ s|\\|/|g; # compensate for bug/feature in cygwin glob...
+ foreach (glob $arg)
+ {
+ push @filelist, $_;
+ }
+}
+
+my $fnum = @filelist;
+
+if ($fnum <= 1)
+ {
+ die "Need at least two filenames";
+ }
+
+my $dest = pop @filelist;
+
+if ($fnum > 2 && ! -d $dest)
+ {
+ die "Destination must be a directory";
+ }
+
+foreach (@filelist)
+ {
+ my $dfile;
+ if (-d $dest)
+ {
+ $dfile = $_;
+ $dfile =~ s|^.*[/\\]([^/\\]*)$|$1|;
+ $dfile = "$dest/$dfile";
+ }
+ else
+ {
+ $dfile = $dest;
+ }
+
+ my $buf;
+ if (-f $dfile)
+ {
+ sysopen(IN, $_, O_RDONLY|O_BINARY) || die "Can't Open $_";
+ sysopen(OUT, $dfile, O_RDONLY|O_BINARY)
+ || die "Can't Open $dfile";
+ while (sysread IN, $buf, 10240)
+ {
+ my $b2;
+ goto copy if !sysread(OUT, $b2, 10240) || $buf ne $b2;
+ }
+ goto copy if sysread(OUT, $buf, 1);
+ close(IN);
+ close(OUT);
+ print "NOT copying: $_ to $dfile\n";
+ next;
+ }
+ copy:
+ sysopen(IN, $_, O_RDONLY|O_BINARY) || die "Can't Open $_";
+ sysopen(OUT, $dfile, O_WRONLY|O_CREAT|O_TRUNC|O_BINARY)
+ || die "Can't Open $dfile";
+ while (sysread IN, $buf, 10240)
+ {
+ syswrite(OUT, $buf, length($buf));
+ }
+ close(IN);
+ close(OUT);
+ print "Copying: $_ to $dfile\n";
+ }
+
diff --git a/crypto/openssl/util/files.pl b/crypto/openssl/util/files.pl
index 41f033e..b15407f 100755
--- a/crypto/openssl/util/files.pl
+++ b/crypto/openssl/util/files.pl
@@ -4,6 +4,12 @@
# It is basically a list of all variables from the passed makefile
#
+while ($ARGV[0] =~ /^(\S+)\s*=(.*)$/)
+ {
+ $sym{$1} = $2;
+ shift;
+ }
+
$s="";
while (<>)
{
@@ -33,7 +39,7 @@ while (<>)
$o =~ s/\s+/ /g;
$o =~ s/\$[({]([^)}]+)[)}]/$sym{$1}/g;
- $sym{$s}=$o;
+ $sym{$s}=$o if !exists $sym{$s};
}
}
diff --git a/crypto/openssl/util/libeay.num b/crypto/openssl/util/libeay.num
index b594caf..7f7487d 100644
--- a/crypto/openssl/util/libeay.num
+++ b/crypto/openssl/util/libeay.num
@@ -4282,7 +4282,7 @@ CRYPTO_ccm128_decrypt 4648 EXIST::FUNCTION:
CRYPTO_ccm128_aad 4649 EXIST::FUNCTION:
CRYPTO_gcm128_init 4650 EXIST::FUNCTION:
CRYPTO_gcm128_decrypt 4651 EXIST::FUNCTION:
-ENGINE_load_rsax 4652 EXIST::FUNCTION:ENGINE
+ENGINE_load_rsax 4652 NOEXIST::FUNCTION:
CRYPTO_gcm128_decrypt_ctr32 4653 EXIST::FUNCTION:
CRYPTO_gcm128_encrypt_ctr32 4654 EXIST::FUNCTION:
CRYPTO_gcm128_finish 4655 EXIST::FUNCTION:
@@ -4314,3 +4314,103 @@ BIO_dgram_sctp_wait_for_dry 4679 EXIST::FUNCTION:SCTP
BIO_s_datagram_sctp 4680 EXIST::FUNCTION:DGRAM,SCTP
BIO_dgram_is_sctp 4681 EXIST::FUNCTION:SCTP
BIO_dgram_sctp_notification_cb 4682 EXIST::FUNCTION:SCTP
+i2d_DHxparams 4683 EXIST::FUNCTION:DH
+EC_curve_nist2nid 4684 EXIST::FUNCTION:EC
+DH_get_1024_160 4685 EXIST::FUNCTION:DH
+PEM_write_DHxparams 4686 EXIST:!WIN16:FUNCTION:DH
+d2i_DHxparams 4687 EXIST::FUNCTION:DH
+EC_curve_nid2nist 4688 EXIST::FUNCTION:EC
+DH_get_2048_256 4689 EXIST::FUNCTION:DH
+PEM_write_bio_DHxparams 4690 EXIST::FUNCTION:DH
+DH_get_2048_224 4691 EXIST::FUNCTION:DH
+X509_chain_check_suiteb 4692 EXIST::FUNCTION:
+X509_chain_up_ref 4693 EXIST::FUNCTION:
+X509_VERIFY_PARAM_set1_ip_asc 4694 EXIST::FUNCTION:
+X509_CRL_check_suiteb 4695 EXIST::FUNCTION:
+X509_VERIFY_PARAM_set1_email 4696 EXIST::FUNCTION:
+X509_check_email 4697 EXIST::FUNCTION:
+X509_check_host 4698 EXIST::FUNCTION:
+X509_check_ip_asc 4699 EXIST::FUNCTION:
+X509_get0_signature 4700 EXIST::FUNCTION:
+X509_get_signature_nid 4701 EXIST::FUNCTION:
+X509_VERIFY_PARAM_set1_host 4702 EXIST::FUNCTION:
+X509_VERIFY_PARAM_set1_ip 4703 EXIST::FUNCTION:
+X509_check_ip 4704 EXIST::FUNCTION:
+X509_STORE_set_lookup_crls_cb 4705 EXIST::FUNCTION:
+X509_CRL_diff 4706 EXIST::FUNCTION:
+X509_CRL_http_nbio 4707 EXIST::FUNCTION:EVP
+OCSP_REQ_CTX_i2d 4708 EXIST::FUNCTION:
+OCSP_REQ_CTX_get0_mem_bio 4709 EXIST::FUNCTION:
+X509_STORE_CTX_get0_store 4710 EXIST::FUNCTION:
+X509_REVOKED_dup 4711 EXIST::FUNCTION:
+CMS_RecipientInfo_encrypt 4712 EXIST::FUNCTION:CMS
+OCSP_REQ_CTX_http 4713 EXIST::FUNCTION:
+OCSP_REQ_CTX_nbio 4714 EXIST::FUNCTION:
+X509_http_nbio 4715 EXIST::FUNCTION:EVP
+OCSP_set_max_response_length 4716 EXIST::FUNCTION:
+OCSP_REQ_CTX_new 4717 EXIST::FUNCTION:
+OCSP_REQ_CTX_nbio_d2i 4718 EXIST::FUNCTION:
+EVP_aes_256_wrap 4719 EXIST::FUNCTION:AES
+CRYPTO_128_wrap 4720 EXIST::FUNCTION:
+RSA_OAEP_PARAMS_new 4721 EXIST::FUNCTION:RSA
+CRYPTO_128_unwrap 4722 EXIST::FUNCTION:
+ECDSA_METHOD_set_name 4723 EXIST::FUNCTION:ECDSA
+CMS_RecipientInfo_kari_decrypt 4724 EXIST::FUNCTION:CMS
+CMS_SignerInfo_get0_pkey_ctx 4725 EXIST::FUNCTION:CMS
+ECDSA_METHOD_set_flags 4726 EXIST::FUNCTION:ECDSA
+ECDSA_METHOD_set_sign_setup 4727 EXIST::FUNCTION:ECDSA
+CMS_RecipientInfo_kari_orig_id_cmp 4728 EXIST:!VMS:FUNCTION:CMS
+CMS_RecipInfo_kari_orig_id_cmp 4728 EXIST:VMS:FUNCTION:CMS
+CMS_RecipientInfo_kari_get0_alg 4729 EXIST::FUNCTION:CMS
+EVP_aes_192_wrap 4730 EXIST::FUNCTION:AES
+EVP_aes_128_cbc_hmac_sha256 4731 EXIST::FUNCTION:AES,SHA256
+DH_compute_key_padded 4732 EXIST::FUNCTION:DH
+ECDSA_METHOD_set_sign 4733 EXIST::FUNCTION:ECDSA
+CMS_RecipientEncryptedKey_cert_cmp 4734 EXIST:!VMS:FUNCTION:CMS
+CMS_RecipEncryptedKey_cert_cmp 4734 EXIST:VMS:FUNCTION:CMS
+DH_KDF_X9_42 4735 EXIST::FUNCTION:DH
+RSA_OAEP_PARAMS_free 4736 EXIST::FUNCTION:RSA
+EVP_des_ede3_wrap 4737 EXIST::FUNCTION:DES
+RSA_OAEP_PARAMS_it 4738 EXIST:!EXPORT_VAR_AS_FUNCTION:VARIABLE:RSA
+RSA_OAEP_PARAMS_it 4738 EXIST:EXPORT_VAR_AS_FUNCTION:FUNCTION:RSA
+ASN1_TIME_diff 4739 EXIST::FUNCTION:
+EVP_aes_256_cbc_hmac_sha256 4740 EXIST::FUNCTION:AES,SHA256
+CMS_SignerInfo_get0_signature 4741 EXIST::FUNCTION:CMS
+CMS_RecipientInfo_kari_get0_reks 4742 EXIST:!VMS:FUNCTION:CMS
+CMS_RecipInfo_kari_get0_reks 4742 EXIST:VMS:FUNCTION:CMS
+EVP_aes_128_wrap 4743 EXIST::FUNCTION:AES
+CMS_SignerInfo_get0_md_ctx 4744 EXIST::FUNCTION:CMS
+OPENSSL_gmtime_diff 4745 EXIST::FUNCTION:
+CMS_RecipientInfo_kari_set0_pkey 4746 EXIST:!VMS:FUNCTION:CMS
+CMS_RecipInfo_kari_set0_pkey 4746 EXIST:VMS:FUNCTION:CMS
+i2d_RSA_OAEP_PARAMS 4747 EXIST::FUNCTION:RSA
+d2i_RSA_OAEP_PARAMS 4748 EXIST::FUNCTION:RSA
+ECDH_KDF_X9_62 4749 EXIST::FUNCTION:ECDH
+CMS_RecipientInfo_kari_get0_ctx 4750 EXIST::FUNCTION:CMS
+ECDSA_METHOD_new 4751 EXIST::FUNCTION:ECDSA
+CMS_RecipientInfo_get0_pkey_ctx 4752 EXIST::FUNCTION:CMS
+CMS_RecipientEncryptedKey_get0_id 4753 EXIST:!VMS:FUNCTION:CMS
+CMS_RecipEncryptedKey_get0_id 4753 EXIST:VMS:FUNCTION:CMS
+RSA_padding_check_PKCS1_OAEP_mgf1 4754 EXIST:!VMS:FUNCTION:RSA
+RSA_pad_check_PKCS1_OAEP_mgf1 4754 EXIST:VMS:FUNCTION:RSA
+ECDSA_METHOD_set_verify 4755 EXIST::FUNCTION:ECDSA
+CMS_SharedInfo_encode 4756 EXIST::FUNCTION:CMS
+RSA_padding_add_PKCS1_OAEP_mgf1 4757 EXIST::FUNCTION:RSA
+CMS_RecipientInfo_kari_get0_orig_id 4758 EXIST:!VMS:FUNCTION:CMS
+CMS_RecipInfo_kari_get0_orig_id 4758 EXIST:VMS:FUNCTION:CMS
+ECDSA_METHOD_free 4759 EXIST::FUNCTION:ECDSA
+X509_VERIFY_PARAM_get_count 4760 EXIST::FUNCTION:
+X509_VERIFY_PARAM_get0_name 4761 EXIST::FUNCTION:
+X509_VERIFY_PARAM_get0 4762 EXIST::FUNCTION:
+X509V3_EXT_free 4763 EXIST::FUNCTION:
+BIO_hex_string 4764 EXIST::FUNCTION:
+X509_VERIFY_PARAM_set_hostflags 4765 EXIST::FUNCTION:
+BUF_strnlen 4766 EXIST::FUNCTION:
+X509_VERIFY_PARAM_get0_peername 4767 EXIST::FUNCTION:
+ECDSA_METHOD_set_app_data 4768 EXIST::FUNCTION:ECDSA
+sk_deep_copy 4769 EXIST::FUNCTION:
+ECDSA_METHOD_get_app_data 4770 EXIST::FUNCTION:ECDSA
+X509_VERIFY_PARAM_add1_host 4771 EXIST::FUNCTION:
+EC_GROUP_get_mont_data 4772 EXIST::FUNCTION:EC
+i2d_re_X509_tbs 4773 EXIST::FUNCTION:
+EVP_PKEY_asn1_set_item 4774 EXIST::FUNCTION:
diff --git a/crypto/openssl/util/mk1mf.pl b/crypto/openssl/util/mk1mf.pl
index 1eee7aa..9b8abc0 100755
--- a/crypto/openssl/util/mk1mf.pl
+++ b/crypto/openssl/util/mk1mf.pl
@@ -2,8 +2,12 @@
# A bit of an evil hack but it post processes the file ../MINFO which
# is generated by `make files` in the top directory.
# This script outputs one mega makefile that has no shell stuff or any
-# funny stuff
-#
+# funny stuff (if the target is not "copy").
+# If the target is "copy", then it tries to create a makefile that can be
+# safely used with the -j flag and that is compatible with the top-level
+# Makefile, in the sense that it uses the same options and assembler files etc.
+
+use Cwd;
$INSTALLTOP="/usr/local/ssl";
$OPENSSLDIR="/usr/local/ssl";
@@ -28,6 +32,7 @@ my %mf_import = (
INSTALLTOP => \$INSTALLTOP,
OPENSSLDIR => \$OPENSSLDIR,
PLATFORM => \$mf_platform,
+ CC => \$mf_cc,
CFLAG => \$mf_cflag,
DEPFLAG => \$mf_depflag,
CPUID_OBJ => \$mf_cpuid_asm,
@@ -43,16 +48,18 @@ my %mf_import = (
RMD160_ASM_OBJ => \$mf_rmd_asm,
WP_ASM_OBJ => \$mf_wp_asm,
CMLL_ENC => \$mf_cm_asm,
+ MODES_ASM_OBJ => \$mf_modes_asm,
+ ENGINES_ASM_OBJ=> \$mf_engines_asm,
BASEADDR => \$baseaddr,
FIPSDIR => \$fipsdir,
+ EC_ASM => \$mf_ec_asm,
);
-
open(IN,"<Makefile") || die "unable to open Makefile!\n";
while(<IN>) {
my ($mf_opt, $mf_ref);
while (($mf_opt, $mf_ref) = each %mf_import) {
- if (/^$mf_opt\s*=\s*(.*)$/) {
+ if (/^$mf_opt\s*=\s*(.*)$/ && !defined($$mfref)) {
$$mf_ref = $1;
}
}
@@ -83,7 +90,8 @@ $infile="MINFO";
"netware-libc", "CodeWarrior for NetWare - LibC - with WinSock Sockets",
"netware-libc-bsdsock", "CodeWarrior for NetWare - LibC - with BSD Sockets",
"default","cc under unix",
- "auto", "auto detect from top level Makefile"
+ "auto", "auto detect from top level Makefile",
+ "copy", "copy from top level Makefile"
);
$platform="";
@@ -162,7 +170,7 @@ $mkdir="-mkdir" unless defined $mkdir;
$ranlib="echo ranlib";
$cc=(defined($VARS{'CC'}))?$VARS{'CC'}:'cc';
-$src_dir=(defined($VARS{'SRC'}))?$VARS{'SRC'}:'.';
+$src_dir=(defined($VARS{'SRC'}))?$VARS{'SRC'}: $platform eq 'copy' ? getcwd() : '.';
$bin_dir=(defined($VARS{'BIN'}))?$VARS{'BIN'}:'';
# $bin_dir.=$o causes a core dump on my sparc :-(
@@ -172,7 +180,8 @@ $NT=0;
push(@INC,"util/pl","pl");
-if ($platform eq "auto") {
+if ($platform eq "auto" || $platform eq 'copy') {
+ $orig_platform = $platform;
$platform = $mf_platform;
print STDERR "Imported platform $mf_platform\n";
}
@@ -300,6 +309,11 @@ else
##else
{ $cflags="$c_flags$cflags" if ($c_flags ne ""); }
+if ($orig_platform eq 'copy') {
+ $cflags = $mf_cflag;
+ $cc = $mf_cc;
+}
+
$ex_libs="$l_flags$ex_libs" if ($l_flags ne "");
@@ -391,6 +405,14 @@ for (;;)
}
close(IN);
+if ($orig_platform eq 'copy')
+ {
+ # Remove opensslconf.h so it doesn't get updated if we configure a
+ # different branch.
+ $exheader =~ s/[^ ]+\/opensslconf.h//;
+ $header =~ s/[^ ]+\/opensslconf.h//;
+ }
+
if ($shlib)
{
$extra_install= <<"EOF";
@@ -422,6 +444,7 @@ EOF
}
$defs= <<"EOF";
+# N.B. You MUST use -j on FreeBSD.
# This makefile has been automatically generated from the OpenSSL distribution.
# This single makefile will build the complete OpenSSL distribution and
# by default leave the 'intertesting' output files in .${o}out and the stuff
@@ -463,7 +486,7 @@ LINK=$link
LFLAGS=$lflags
RSC=$rsc
-# The output directory for everything intersting
+# The output directory for everything interesting
OUT_D=$out_dir
# The output directory for all the temporary muck
TMP_D=$tmp_dir
@@ -482,13 +505,14 @@ ASM=$bin_dir$asm
# FIPS validated module and support file locations
+E_PREMAIN_DSO=fips_premain_dso
+
FIPSDIR=$fipsdir
BASEADDR=$baseaddr
FIPSLIB_D=\$(FIPSDIR)${o}lib
FIPS_PREMAIN_SRC=\$(FIPSLIB_D)${o}fips_premain.c
O_FIPSCANISTER=\$(FIPSLIB_D)${o}fipscanister.lib
FIPS_SHA1_EXE=\$(FIPSDIR)${o}bin${o}fips_standalone_sha1${exep}
-E_PREMAIN_DSO=fips_premain_dso
PREMAIN_DSO_EXE=\$(BIN_D)${o}fips_premain_dso$exep
FIPSLINK=\$(PERL) \$(FIPSDIR)${o}bin${o}fipslink.pl
@@ -563,8 +587,12 @@ $banner
\$(INC_D):
\$(MKDIR) \"\$(INC_D)\"
+# This needs to be invoked once, when the makefile is first constructed, or
+# after cleaning.
+init: \$(TMP_D) \$(LIB_D) \$(INC_D) \$(INCO_D) \$(BIN_D) \$(TEST_D) headers
+ \$(PERL) \$(SRC_D)/util/copy-if-different.pl "\$(SRC_D)/crypto/opensslconf.h" "\$(INCO_D)/opensslconf.h"
+
headers: \$(HEADER) \$(EXHEADER)
- @
lib: \$(LIBS_DEP) \$(E_SHLIB)
@@ -582,11 +610,6 @@ install: all
\$(CP) apps${o}openssl.cnf \"\$(OPENSSLDIR)\"
$extra_install
-
-test: \$(T_EXE)
- cd \$(BIN_D)
- ..${o}ms${o}test
-
clean:
\$(RM) \$(TMP_D)$o*.*
@@ -594,8 +617,25 @@ vclean:
\$(RM) \$(TMP_D)$o*.*
\$(RM) \$(OUT_D)$o*.*
+reallyclean:
+ \$(RM) -rf \$(TMP_D)
+ \$(RM) -rf \$(BIN_D)
+ \$(RM) -rf \$(TEST_D)
+ \$(RM) -rf \$(LIB_D)
+ \$(RM) -rf \$(INC_D)
+
+EOF
+
+if ($orig_platform ne 'copy')
+ {
+ $rules .= <<"EOF";
+test: \$(T_EXE)
+ cd \$(BIN_D)
+ ..${o}ms${o}test
+
EOF
-
+ }
+
my $platform_cpp_symbol = "MK1MF_PLATFORM_$platform";
$platform_cpp_symbol =~ s/-/_/g;
if (open(IN,"crypto/buildinf.h"))
@@ -632,7 +672,7 @@ printf OUT " #define DATE \"%s\"\n", scalar gmtime();
printf OUT "#endif\n";
close(OUT);
-# Strip of trailing ' '
+# Strip off trailing ' '
foreach (keys %lib_obj) { $lib_obj{$_}=&clean_up_ws($lib_obj{$_}); }
$test=&clean_up_ws($test);
$e_exe=&clean_up_ws($e_exe);
@@ -662,10 +702,38 @@ if ($fips)
{
$rules.=&cc_compile_target("\$(OBJ_D)${o}\$(E_PREMAIN_DSO)$obj",
"\$(FIPS_PREMAIN_SRC)",
- "-DFINGERPRINT_PREMAIN_DSO_LOAD \$(SHLIB_CFLAGS)", "");
+ "-DFINGERPRINT_PREMAIN_DSO_LOAD \$(APP_CFLAGS)", "");
$rules.=&do_link_rule("\$(PREMAIN_DSO_EXE)","\$(OBJ_D)${o}\$(E_PREMAIN_DSO)$obj \$(CRYPTOOBJ) \$(O_FIPSCANISTER)","","\$(EX_LIBS)", 1);
}
+sub fix_asm
+ {
+ my($asm, $dir) = @_;
+
+ return '' if $asm eq '';
+
+ $asm = " $asm";
+ $asm =~ s/\s+/ $dir\//g;
+ $asm =~ s/\.o//g;
+ $asm =~ s/^ //;
+
+ return $asm . ' ';
+ }
+
+if ($orig_platform eq 'copy') {
+ $lib_obj{CRYPTO} .= fix_asm($mf_md5_asm, 'crypto/md5');
+ $lib_obj{CRYPTO} .= fix_asm($mf_bn_asm, 'crypto/bn');
+ # cpuid is included by the crypto dir
+ #$lib_obj{CRYPTO} .= fix_asm($mf_cpuid_asm, 'crypto');
+ # AES asm files DON'T end up included by the aes dir itself
+ $lib_obj{CRYPTO} .= fix_asm($mf_aes_asm, 'crypto/aes');
+ $lib_obj{CRYPTO} .= fix_asm($mf_sha_asm, 'crypto/sha');
+ $lib_obj{CRYPTO} .= fix_asm($mf_engines_asm, 'engines');
+ $lib_obj{CRYPTO} .= fix_asm($mf_rc4_asm, 'crypto/rc4');
+ $lib_obj{CRYPTO} .= fix_asm($mf_modes_asm, 'crypto/modes');
+ $lib_obj{CRYPTO} .= fix_asm($mf_ec_asm, 'crypto/ec');
+}
+
foreach (values %lib_nam)
{
$lib_obj=$lib_obj{$_};
@@ -741,6 +809,8 @@ foreach (split(" ",$otherlibs))
$rules.=&do_link_rule("\$(BIN_D)$o\$(E_EXE)$exep","\$(E_OBJ)","\$(LIBS_DEP)","\$(L_LIBS) \$(EX_LIBS)", ($fips && !$shlib) ? 2 : 0);
+$rules .= get_tests('test/Makefile') if $orig_platform eq 'copy';
+
print $defs;
if ($platform eq "linux-elf") {
@@ -958,6 +1028,11 @@ sub do_compile_rule
{
$ret.=&Sasm_compile_target("$to${o}$n$obj",$s,$n);
}
+ elsif (defined &special_compile_target and
+ ($s=special_compile_target($_)))
+ {
+ $ret.=$s;
+ }
else { die "no rule for $_"; }
}
return($ret);
@@ -968,6 +1043,10 @@ sub do_compile_rule
sub perlasm_compile_target
{
my($target,$source,$bname)=@_;
+
+ return platform_perlasm_compile_target($target, $source, $bname)
+ if defined &platform_perlasm_compile_target;
+
my($ret);
$bname =~ s/(.*)\.[^\.]$/$1/;
@@ -999,9 +1078,13 @@ sub cc_compile_target
$ex_flags.=" -DMK1MF_BUILD -D$platform_cpp_symbol" if ($source =~ /cversion/);
$target =~ s/\//$o/g if $o ne "/";
$source =~ s/\//$o/g if $o ne "/";
- $srcd = "\$(SRC_D)$o" unless defined $srcd;
+ $srcd = "\$(SRC_D)$o" unless defined $srcd && $platform ne 'copy';
$ret ="$target: $srcd$source\n\t";
- $ret.="\$(CC) ${ofile}$target $ex_flags -c $srcd$source\n\n";
+ $ret.="\$(CC)";
+ $ret.= " -MMD" if $orig_platform eq "copy";
+ $ret.= " ${ofile}$target $ex_flags -c $srcd$source\n\n";
+ $target =~ s/\.o$/.d/;
+ $ret.=".sinclude \"$target\"\n\n" if $orig_platform eq "copy";
return($ret);
}
@@ -1066,7 +1149,7 @@ sub do_copy_rule
if ($n =~ /bss_file/)
{ $pp=".c"; }
else { $pp=$p; }
- $ret.="$to${o}$n$pp: \$(SRC_D)$o$_$pp\n\t\$(CP) \"\$(SRC_D)$o$_$pp\" \"$to${o}$n$pp\"\n\n";
+ $ret.="$to${o}$n$pp: \$(SRC_D)$o$_$pp\n\t\$(PERL) \$(SRC_D)${o}util${o}copy-if-different.pl \"\$(SRC_D)$o$_$pp\" \"$to${o}$n$pp\"\n\n";
}
return($ret);
}
@@ -1119,8 +1202,8 @@ sub read_options
"no-tlsext" => \$no_tlsext,
"no-srp" => \$no_srp,
"no-cms" => \$no_cms,
- "no-ec2m" => \$no_ec2m,
"no-jpake" => \$no_jpake,
+ "no-ec2m" => \$no_ec2m,
"no-ec_nistp_64_gcc_128" => 0,
"no-err" => \$no_err,
"no-sock" => \$no_sock,
@@ -1151,9 +1234,12 @@ sub read_options
"no-montasm" => 0,
"no-shared" => 0,
"no-store" => 0,
- "no-unit-test" => 0,
"no-zlib" => 0,
"no-zlib-dynamic" => 0,
+ "no-ssl-trace" => 0,
+ "no-unit-test" => 0,
+ "no-libunbound" => 0,
+ "no-multiblock" => 0,
"fips" => \$fips
);
diff --git a/crypto/openssl/util/mkdef.pl b/crypto/openssl/util/mkdef.pl
index 894f052..c57c7f7 100755
--- a/crypto/openssl/util/mkdef.pl
+++ b/crypto/openssl/util/mkdef.pl
@@ -121,8 +121,10 @@ my @known_algorithms = ( "RC2", "RC4", "RC5", "IDEA", "DES", "BF",
"SCTP",
# SRTP
"SRTP",
+ # SSL TRACE
+ "SSL_TRACE",
# Unit testing
- "UNIT_TEST");
+ "UNIT_TEST");
my $options="";
open(IN,"<Makefile") || die "unable to open Makefile!\n";
@@ -142,7 +144,7 @@ my $no_ec; my $no_ecdsa; my $no_ecdh; my $no_engine; my $no_hw;
my $no_fp_api; my $no_static_engine=1; my $no_gmp; my $no_deprecated;
my $no_rfc3779; my $no_psk; my $no_tlsext; my $no_cms; my $no_capieng;
my $no_jpake; my $no_srp; my $no_ssl2; my $no_ec2m; my $no_nistp_gcc;
-my $no_nextprotoneg; my $no_sctp; my $no_srtp;
+my $no_nextprotoneg; my $no_sctp; my $no_srtp; my $no_ssl_trace;
my $no_unit_test; my $no_ssl3_method;
my $fips;
@@ -239,6 +241,7 @@ foreach (@ARGV, split(/ /, $options))
elsif (/^no-nextprotoneg$/) { $no_nextprotoneg=1; }
elsif (/^no-ssl2$/) { $no_ssl2=1; }
elsif (/^no-ssl3-method$/) { $no_ssl3_method=1; }
+ elsif (/^no-ssl-trace$/) { $no_ssl_trace=1; }
elsif (/^no-capieng$/) { $no_capieng=1; }
elsif (/^no-jpake$/) { $no_jpake=1; }
elsif (/^no-srp$/) { $no_srp=1; }
@@ -842,6 +845,7 @@ sub do_defs
$def .= "int PEM_write_bio_$1(void);";
next;
} elsif (/^DECLARE_PEM_write\s*\(\s*(\w*)\s*,/ ||
+ /^DECLARE_PEM_write_const\s*\(\s*(\w*)\s*,/ ||
/^DECLARE_PEM_write_cb\s*\(\s*(\w*)\s*,/ ) {
# Things not in Win16
$def .=
@@ -1212,6 +1216,7 @@ sub is_valid
{ return 0; }
if ($keyword eq "SSL2" && $no_ssl2) { return 0; }
if ($keyword eq "SSL3_METHOD" && $no_ssl3_method) { return 0; }
+ if ($keyword eq "SSL_TRACE" && $no_ssl_trace) { return 0; }
if ($keyword eq "CAPIENG" && $no_capieng) { return 0; }
if ($keyword eq "JPAKE" && $no_jpake) { return 0; }
if ($keyword eq "SRP" && $no_srp) { return 0; }
diff --git a/crypto/openssl/util/mkerr.pl b/crypto/openssl/util/mkerr.pl
index d87c4fd..09ebebe 100644
--- a/crypto/openssl/util/mkerr.pl
+++ b/crypto/openssl/util/mkerr.pl
@@ -14,6 +14,7 @@ my $pack_errcode;
my $load_errcode;
my $errcount;
+my $year = (localtime)[5] + 1900;
while (@ARGV) {
my $arg = $ARGV[0];
@@ -391,7 +392,7 @@ foreach $lib (keys %csrc)
} else {
push @out,
"/* ====================================================================\n",
-" * Copyright (c) 2001-2011 The OpenSSL Project. All rights reserved.\n",
+" * Copyright (c) 2001-$year The OpenSSL Project. All rights reserved.\n",
" *\n",
" * Redistribution and use in source and binary forms, with or without\n",
" * modification, are permitted provided that the following conditions\n",
@@ -584,7 +585,7 @@ EOF
print OUT <<"EOF";
/* $cfile */
/* ====================================================================
- * Copyright (c) 1999-2011 The OpenSSL Project. All rights reserved.
+ * Copyright (c) 1999-$year The OpenSSL Project. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
diff --git a/crypto/openssl/util/mkstack.pl b/crypto/openssl/util/mkstack.pl
index f708610..2bd96cd 100755
--- a/crypto/openssl/util/mkstack.pl
+++ b/crypto/openssl/util/mkstack.pl
@@ -90,6 +90,7 @@ while(<IN>) {
#define sk_${type_thing}_set_cmp_func(st, cmp) SKM_sk_set_cmp_func($type_thing, (st), (cmp))
#define sk_${type_thing}_dup(st) SKM_sk_dup($type_thing, st)
#define sk_${type_thing}_pop_free(st, free_func) SKM_sk_pop_free($type_thing, (st), (free_func))
+#define sk_${type_thing}_deep_copy(st, copy_func, free_func) SKM_sk_deep_copy($type_thing, (st), (copy_func), (free_func))
#define sk_${type_thing}_shift(st) SKM_sk_shift($type_thing, (st))
#define sk_${type_thing}_pop(st) SKM_sk_pop($type_thing, (st))
#define sk_${type_thing}_sort(st) SKM_sk_sort($type_thing, (st))
@@ -108,7 +109,8 @@ EOF
#define sk_${t1}_find(st, val) sk_find(CHECKED_STACK_OF($t1, st), CHECKED_PTR_OF($t2, val))
#define sk_${t1}_value(st, i) (($t1)sk_value(CHECKED_STACK_OF($t1, st), i))
#define sk_${t1}_num(st) SKM_sk_num($t1, st)
-#define sk_${t1}_pop_free(st, free_func) sk_pop_free(CHECKED_STACK_OF($t1, st), CHECKED_SK_FREE_FUNC2($t1, free_func))
+#define sk_${t1}_pop_free(st, free_func) sk_pop_free(CHECKED_STACK_OF($t1, st), CHECKED_SK_FREE_FUNC($t2, free_func))
+#define sk_${t1}_deep_copy(st, copy_func, free_func) ((STACK_OF($t1) *)sk_deep_copy(CHECKED_STACK_OF($t1, st), CHECKED_SK_COPY_FUNC($t2, copy_func), CHECKED_SK_FREE_FUNC($t2, free_func)))
#define sk_${t1}_insert(st, val, i) sk_insert(CHECKED_STACK_OF($t1, st), CHECKED_PTR_OF($t2, val), i)
#define sk_${t1}_free(st) SKM_sk_free(${t1}, st)
#define sk_${t1}_set(st, i, val) sk_set(CHECKED_STACK_OF($t1, st), i, CHECKED_PTR_OF($t2, val))
diff --git a/crypto/openssl/util/pl/BC-32.pl b/crypto/openssl/util/pl/BC-32.pl
index 6d03664..f7161d7 100644
--- a/crypto/openssl/util/pl/BC-32.pl
+++ b/crypto/openssl/util/pl/BC-32.pl
@@ -18,7 +18,7 @@ $out_def="out32";
$tmp_def="tmp32";
$inc_def="inc32";
#enable max error messages, disable most common warnings
-$cflags="-DWIN32_LEAN_AND_MEAN -q -w-ccc -w-rch -w-pia -w-aus -w-par -w-inl -c -tWC -tWM -DOPENSSL_SYSNAME_WIN32 -DL_ENDIAN -DDSO_WIN32 -D_stricmp=stricmp -D_strnicmp=strnicmp -D_timeb=timeb -D_ftime=ftime ";
+$cflags="-DWIN32_LEAN_AND_MEAN -q -w-ccc -w-rch -w-pia -w-aus -w-par -w-inl -c -tWC -tWM -DOPENSSL_SYSNAME_WIN32 -DL_ENDIAN -DDSO_WIN32 -D_stricmp=stricmp -D_strnicmp=strnicmp ";
if ($debug)
{
$cflags.="-Od -y -v -vi- -D_DEBUG";
diff --git a/crypto/openssl/util/pl/VC-32.pl b/crypto/openssl/util/pl/VC-32.pl
index b597998..da05e9d 100644
--- a/crypto/openssl/util/pl/VC-32.pl
+++ b/crypto/openssl/util/pl/VC-32.pl
@@ -46,7 +46,6 @@ if ($FLAVOR =~ /WIN64/)
#
$base_cflags= " $mf_cflag";
my $f = $shlib || $fips ?' /MD':' /MT';
- $lib_cflag='/Zl' if (!$shlib); # remove /DEFAULTLIBs from static lib
$opt_cflags=$f.' /Ox';
$dbg_cflags=$f.'d /Od -DDEBUG -D_DEBUG';
$lflags="/nologo /subsystem:console /opt:ref";
@@ -89,7 +88,7 @@ elsif ($FLAVOR =~ /CE/)
$wcetgt = $ENV{'TARGETCPU'}; # just shorter name...
SWITCH: for($wcetgt) {
/^X86/ && do { $wcecdefs.=" -Dx86 -D_X86_ -D_i386_ -Di_386_";
- $wcelflag.=" /machine:IX86"; last; };
+ $wcelflag.=" /machine:X86"; last; };
/^ARMV4[IT]/ && do { $wcecdefs.=" -DARM -D_ARM_ -D$wcetgt";
$wcecdefs.=" -DTHUMB -D_THUMB_" if($wcetgt=~/T$/);
$wcecdefs.=" -QRarch4T -QRinterwork-return";
@@ -114,25 +113,30 @@ elsif ($FLAVOR =~ /CE/)
$wcelflag.=" /machine:$wcetgt"; last; };
}
- $cc='$(CC)';
+ $cc=($ENV{CC} or "cl");
$base_cflags=' /W3 /WX /GF /Gy /nologo -DUNICODE -D_UNICODE -DOPENSSL_SYSNAME_WINCE -DWIN32_LEAN_AND_MEAN -DL_ENDIAN -DDSO_WIN32 -DNO_CHMOD -DOPENSSL_SMALL_FOOTPRINT';
$base_cflags.=" $wcecdefs";
$base_cflags.=' -I$(WCECOMPAT)/include' if (defined($ENV{'WCECOMPAT'}));
$base_cflags.=' -I$(PORTSDK_LIBPATH)/../../include' if (defined($ENV{'PORTSDK_LIBPATH'}));
- $opt_cflags=' /MC /O1i'; # optimize for space, but with intrinsics...
- $dbg_cflags=' /MC /Od -DDEBUG -D_DEBUG';
+ if (`$cc 2>&1` =~ /Version ([0-9]+)\./ && $1>=14) {
+ $base_cflags.=$shlib?' /MD':' /MT';
+ } else {
+ $base_cflags.=' /MC';
+ }
+ $opt_cflags=' /O1i'; # optimize for space, but with intrinsics...
+ $dbg_cflags=' /Od -DDEBUG -D_DEBUG';
$lflags="/nologo /opt:ref $wcelflag";
}
else # Win32
{
$base_cflags= " $mf_cflag";
my $f = $shlib || $fips ?' /MD':' /MT';
- $lib_cflag='/Zl' if (!$shlib); # remove /DEFAULTLIBs from static lib
$ff = "/fixed";
$opt_cflags=$f.' /Ox /O2 /Ob2';
$dbg_cflags=$f.'d /Od -DDEBUG -D_DEBUG';
$lflags="/nologo /subsystem:console /opt:ref";
}
+$lib_cflag='/Zl' if (!$shlib); # remove /DEFAULTLIBs from static lib
$mlflags='';
$out_def ="out32"; $out_def.="dll" if ($shlib);
@@ -165,14 +169,26 @@ $rsc="rc";
$efile="/out:";
$exep='.exe';
if ($no_sock) { $ex_libs=''; }
-elsif ($FLAVOR =~ /CE/) { $ex_libs='winsock.lib'; }
+elsif ($FLAVOR =~ /CE/) { $ex_libs='ws2.lib'; }
else { $ex_libs='ws2_32.lib'; }
if ($FLAVOR =~ /CE/)
{
- $ex_libs.=' $(WCECOMPAT)/lib/wcecompatex.lib' if (defined($ENV{'WCECOMPAT'}));
+ $ex_libs.=' crypt32.lib'; # for e_capi.c
+ if (defined($ENV{WCECOMPAT}))
+ {
+ $ex_libs.= ' $(WCECOMPAT)/lib';
+ if (-f "$ENV{WCECOMPAT}/lib/$ENV{TARGETCPU}/wcecompatex.lib")
+ {
+ $ex_libs.='/$(TARGETCPU)/wcecompatex.lib';
+ }
+ else
+ {
+ $ex_libs.='/wcecompatex.lib';
+ }
+ }
$ex_libs.=' $(PORTSDK_LIBPATH)/portlib.lib' if (defined($ENV{'PORTSDK_LIBPATH'}));
- $ex_libs.=' /nodefaultlib:oldnames.lib coredll.lib corelibc.lib' if ($ENV{'TARGETCPU'} eq "X86");
+ $ex_libs.=' /nodefaultlib coredll.lib corelibc.lib' if ($ENV{'TARGETCPU'} eq "X86");
}
else
{
diff --git a/crypto/openssl/util/pl/unix.pl b/crypto/openssl/util/pl/unix.pl
index 146611a..1d4e9dc 100644
--- a/crypto/openssl/util/pl/unix.pl
+++ b/crypto/openssl/util/pl/unix.pl
@@ -26,11 +26,12 @@ else
{ $cflags="-O"; }
}
$obj='.o';
+$asm_suffix='.s';
$ofile='-o ';
# EXE linking stuff
$link='${CC}';
-$lflags='${CFLAGS}';
+$lflags='${CFLAG}';
$efile='-o ';
$exep='';
$ex_libs="";
@@ -53,6 +54,93 @@ $des_enc_src="";
$bf_enc_obj="";
$bf_enc_src="";
+%perl1 = (
+ 'md5-x86_64' => 'crypto/md5',
+ 'x86_64-mont' => 'crypto/bn',
+ 'x86_64-mont5' => 'crypto/bn',
+ 'x86_64-gf2m' => 'crypto/bn',
+ 'aes-x86_64' => 'crypto/aes',
+ 'vpaes-x86_64' => 'crypto/aes',
+ 'bsaes-x86_64' => 'crypto/aes',
+ 'aesni-x86_64' => 'crypto/aes',
+ 'aesni-sha1-x86_64' => 'crypto/aes',
+ 'sha1-x86_64' => 'crypto/sha',
+ 'e_padlock-x86_64' => 'engines',
+ 'rc4-x86_64' => 'crypto/rc4',
+ 'rc4-md5-x86_64' => 'crypto/rc4',
+ 'ghash-x86_64' => 'crypto/modes',
+ 'aesni-gcm-x86_64' => 'crypto/modes',
+ 'aesni-sha256-x86_64' => 'crypto/aes',
+ 'rsaz-x86_64' => 'crypto/bn',
+ 'rsaz-avx2' => 'crypto/bn',
+ 'aesni-mb-x86_64' => 'crypto/aes',
+ 'sha1-mb-x86_64' => 'crypto/sha',
+ 'sha256-mb-x86_64' => 'crypto/sha',
+ 'ecp_nistz256-x86_64' => 'crypto/ec',
+ );
+
+# If I were feeling more clever, these could probably be extracted
+# from makefiles.
+sub platform_perlasm_compile_target
+ {
+ local($target, $source, $bname) = @_;
+
+ for $p (keys %perl1)
+ {
+ if ($target eq "\$(OBJ_D)/$p.o")
+ {
+ return << "EOF";
+\$(TMP_D)/$p.s: $perl1{$p}/asm/$p.pl
+ \$(PERL) $perl1{$p}/asm/$p.pl \$(PERLASM_SCHEME) > \$@
+EOF
+ }
+ }
+ if ($target eq '$(OBJ_D)/x86_64cpuid.o')
+ {
+ return << 'EOF';
+$(TMP_D)/x86_64cpuid.s: crypto/x86_64cpuid.pl
+ $(PERL) crypto/x86_64cpuid.pl $(PERLASM_SCHEME) > $@
+EOF
+ }
+ elsif ($target eq '$(OBJ_D)/sha256-x86_64.o')
+ {
+ return << 'EOF';
+$(TMP_D)/sha256-x86_64.s: crypto/sha/asm/sha512-x86_64.pl
+ $(PERL) crypto/sha/asm/sha512-x86_64.pl $(PERLASM_SCHEME) $@
+EOF
+ }
+ elsif ($target eq '$(OBJ_D)/sha512-x86_64.o')
+ {
+ return << 'EOF';
+$(TMP_D)/sha512-x86_64.s: crypto/sha/asm/sha512-x86_64.pl
+ $(PERL) crypto/sha/asm/sha512-x86_64.pl $(PERLASM_SCHEME) $@
+EOF
+ }
+ elsif ($target eq '$(OBJ_D)/sha512-x86_64.o')
+ {
+ return << 'EOF';
+$(TMP_D)/sha512-x86_64.s: crypto/sha/asm/sha512-x86_64.pl
+ $(PERL) crypto/sha/asm/sha512-x86_64.pl $(PERLASM_SCHEME) $@
+EOF
+ }
+
+ die $target;
+ }
+
+sub special_compile_target
+ {
+ local($target) = @_;
+
+ if ($target eq 'crypto/bn/x86_64-gcc')
+ {
+ return << "EOF";
+\$(TMP_D)/x86_64-gcc.o: crypto/bn/asm/x86_64-gcc.c
+ \$(CC) \$(CFLAGS) -c -o \$@ crypto/bn/asm/x86_64-gcc.c
+EOF
+ }
+ return undef;
+ }
+
sub do_lib_rule
{
local($obj,$target,$name,$shlib)=@_;
@@ -72,7 +160,7 @@ sub do_link_rule
{
local($target,$files,$dep_libs,$libs)=@_;
local($ret,$_);
-
+
$file =~ s/\//$o/g if $o ne '/';
$n=&bname($target);
$ret.="$target: $files $dep_libs\n";
@@ -93,4 +181,262 @@ sub which
}
}
+sub fixtests
+ {
+ my ($str, $tests) = @_;
+
+ foreach my $t (keys %$tests)
+ {
+ $str =~ s/(\.\/)?\$\($t\)/\$(TEST_D)\/$tests->{$t}/g;
+ }
+
+ return $str;
+ }
+
+sub fixdeps
+ {
+ my ($str, $fakes) = @_;
+
+ my @t = split(/\s+/, $str);
+ $str = '';
+ foreach my $t (@t)
+ {
+ $str .= ' ' if $str ne '';
+ if (exists($fakes->{$t}))
+ {
+ $str .= $fakes->{$t};
+ next;
+ }
+ if ($t =~ /^[^\/]+$/)
+ {
+ $str .= '$(TEST_D)/' . $t;
+ }
+ else
+ {
+ $str .= $t;
+ }
+ }
+
+ return $str;
+ }
+
+sub fixrules
+ {
+ my ($str) = @_;
+
+ # Compatible with -j...
+ $str =~ s/^(\s+@?)/$1cd \$(TEST_D) && /;
+ return $str;
+
+ # Compatible with not -j.
+ my @t = split("\n", $str);
+ $str = '';
+ my $prev;
+ foreach my $t (@t)
+ {
+ $t =~ s/^\s+//;
+ if (!$prev)
+ {
+ if ($t =~ /^@/)
+ {
+ $t =~ s/^@/\@cd \$(TEST_D) && /;
+ }
+ elsif ($t !~ /^\s*#/)
+ {
+ $t = 'cd $(TEST_D) && ' . $t;
+ }
+ }
+ $str .= "\t$t\n";
+ $prev = $t =~/\\$/;
+ }
+ return $str;
+}
+
+sub copy_scripts
+ {
+ my ($sed, $src, @targets) = @_;
+
+ my $s = '';
+ foreach my $t (@targets)
+ {
+ # Copy first so we get file modes...
+ $s .= "\$(TEST_D)/$t: \$(SRC_D)/$src/$t\n\tcp \$(SRC_D)/$src/$t \$(TEST_D)/$t\n";
+ $s .= "\tsed -e 's/\\.\\.\\/apps/..\\/\$(OUT_D)/' -e 's/\\.\\.\\/util/..\\/\$(TEST_D)/' < \$(SRC_D)/$src/$t > \$(TEST_D)/$t\n" if $sed;
+ $s .= "\n";
+ }
+ return $s;
+ }
+
+sub get_tests
+ {
+ my ($makefile) = @_;
+
+ open(M, $makefile) || die "Can't open $makefile: $!";
+ my %targets;
+ my %deps;
+ my %tests;
+ my %alltests;
+ my %fakes;
+ while (my $line = <M>)
+ {
+ chomp $line;
+ while ($line =~ /^(.*)\\$/)
+ {
+ $line = $1 . <M>;
+ }
+
+ if ($line =~ /^alltests:(.*)$/)
+ {
+ my @t = split(/\s+/, $1);
+ foreach my $t (@t)
+ {
+ $targets{$t} = '';
+ $alltests{$t} = undef;
+ }
+ }
+
+ if (($line =~ /^(?<t>\S+):(?<d>.*)$/ && exists $targets{$1})
+ || $line =~ /^(?<t>test_(ss|gen) .*):(?<d>.*)/)
+ {
+ my $t = $+{t};
+ my $d = $+{d};
+ # If there are multiple targets stupid FreeBSD make runs the
+ # rules once for each dependency that matches one of the
+ # targets. Running the same rule twice concurrently causes
+ # breakage, so replace with a fake target.
+ if ($t =~ /\s/)
+ {
+ ++$fake;
+ my @targets = split /\s+/, $t;
+ $t = "_fake$fake";
+ foreach my $f (@targets)
+ {
+ $fakes{$f} = $t;
+ }
+ }
+ $deps{$t} = $d;
+ $deps{$t} =~ s/#.*$//;
+ for (;;)
+ {
+ $line = <M>;
+ chomp $line;
+ last if $line eq '';
+ $targets{$t} .= "$line\n";
+ }
+ next;
+ }
+
+ if ($line =~ /^(\S+TEST)=\s*(\S+)$/)
+ {
+ $tests{$1} = $2;
+ next;
+ }
+ }
+
+ delete $alltests{test_jpake} if $no_jpake;
+ delete $targets{test_ige} if $no_ige;
+ delete $alltests{test_md2} if $no_md2;
+ delete $alltests{test_rc5} if $no_rc5;
+
+ my $tests;
+ foreach my $t (keys %tests)
+ {
+ $tests .= "$t = $tests{$t}\n";
+ }
+
+ my $each;
+ foreach my $t (keys %targets)
+ {
+ next if $t eq '';
+
+ my $d = $deps{$t};
+ $d =~ s/\.\.\/apps/\$(BIN_D)/g;
+ $d =~ s/\.\.\/util/\$(TEST_D)/g;
+ $d = fixtests($d, \%tests);
+ $d = fixdeps($d, \%fakes);
+
+ my $r = $targets{$t};
+ $r =~ s/\.\.\/apps/..\/\$(BIN_D)/g;
+ $r =~ s/\.\.\/util/..\/\$(TEST_D)/g;
+ $r =~ s/\.\.\/(\S+)/\$(SRC_D)\/$1/g;
+ $r = fixrules($r);
+
+ next if $r eq '';
+
+ $t =~ s/\s+/ \$(TEST_D)\//g;
+
+ $each .= "$t: test_scripts $d\n\t\@echo '$t test started'\n$r\t\@echo '$t test done'\n\n";
+ }
+
+ # FIXME: Might be a clever way to figure out what needs copying
+ my @copies = ( 'bctest',
+ 'testgen',
+ 'cms-test.pl',
+ 'tx509',
+ 'test.cnf',
+ 'testenc',
+ 'tocsp',
+ 'testca',
+ 'CAss.cnf',
+ 'testtsa',
+ 'CAtsa.cnf',
+ 'Uss.cnf',
+ 'P1ss.cnf',
+ 'P2ss.cnf',
+ 'tcrl',
+ 'tsid',
+ 'treq',
+ 'tpkcs7',
+ 'tpkcs7d',
+ 'testcrl.pem',
+ 'testx509.pem',
+ 'v3-cert1.pem',
+ 'v3-cert2.pem',
+ 'testreq2.pem',
+ 'testp7.pem',
+ 'pkcs7-1.pem',
+ 'trsa',
+ 'testrsa.pem',
+ 'testsid.pem',
+ 'testss',
+ 'testssl',
+ 'testsslproxy',
+ 'serverinfo.pem',
+ );
+ my $copies = copy_scripts(1, 'test', @copies);
+ $copies .= copy_scripts(0, 'test', ('smcont.txt'));
+
+ my @utils = ( 'shlib_wrap.sh',
+ 'opensslwrap.sh',
+ );
+ $copies .= copy_scripts(1, 'util', @utils);
+
+ my @apps = ( 'CA.sh',
+ 'openssl.cnf',
+ 'server2.pem',
+ );
+ $copies .= copy_scripts(1, 'apps', @apps);
+
+ $copies .= copy_scripts(1, 'crypto/evp', ('evptests.txt'));
+
+ $scripts = "test_scripts: \$(TEST_D)/CA.sh \$(TEST_D)/opensslwrap.sh \$(TEST_D)/openssl.cnf \$(TEST_D)/shlib_wrap.sh ocsp smime\n";
+ $scripts .= "\nocsp:\n\tcp -R test/ocsp-tests \$(TEST_D)\n";
+ $scripts .= "\smime:\n\tcp -R test/smime-certs \$(TEST_D)\n";
+
+ my $all = 'test:';
+ foreach my $t (keys %alltests)
+ {
+ if (exists($fakes{$t}))
+ {
+ $all .= " $fakes{$t}";
+ }
+ else
+ {
+ $all .= " $t";
+ }
+ }
+
+ return "$scripts\n$copies\n$tests\n$all\n\n$each";
+ }
+
1;
diff --git a/crypto/openssl/util/ssleay.num b/crypto/openssl/util/ssleay.num
index dd1c5e8..5a89913 100644
--- a/crypto/openssl/util/ssleay.num
+++ b/crypto/openssl/util/ssleay.num
@@ -316,8 +316,55 @@ SSL_CTX_set_next_protos_adv_cb 355 EXIST:VMS:FUNCTION:NEXTPROTONEG
SSL_get0_next_proto_negotiated 356 EXIST::FUNCTION:NEXTPROTONEG
SSL_get_selected_srtp_profile 357 EXIST::FUNCTION:SRTP
SSL_CTX_set_tlsext_use_srtp 358 EXIST::FUNCTION:SRTP
-SSL_select_next_proto 359 EXIST::FUNCTION:NEXTPROTONEG
+SSL_select_next_proto 359 EXIST::FUNCTION:TLSEXT
SSL_get_srtp_profiles 360 EXIST::FUNCTION:SRTP
SSL_CTX_set_next_proto_select_cb 361 EXIST:!VMS:FUNCTION:NEXTPROTONEG
SSL_CTX_set_next_proto_sel_cb 361 EXIST:VMS:FUNCTION:NEXTPROTONEG
SSL_SESSION_get_compress_id 362 EXIST::FUNCTION:
+SSL_get0_param 363 EXIST::FUNCTION:
+SSL_CTX_get0_privatekey 364 EXIST::FUNCTION:
+SSL_get_shared_sigalgs 365 EXIST::FUNCTION:TLSEXT
+SSL_CONF_CTX_finish 366 EXIST::FUNCTION:
+DTLS_method 367 EXIST::FUNCTION:
+DTLS_client_method 368 EXIST::FUNCTION:
+SSL_CIPHER_standard_name 369 EXIST::FUNCTION:SSL_TRACE
+SSL_set_alpn_protos 370 EXIST::FUNCTION:
+SSL_CTX_set_srv_supp_data 371 NOEXIST::FUNCTION:
+SSL_CONF_cmd_argv 372 EXIST::FUNCTION:
+DTLSv1_2_server_method 373 EXIST::FUNCTION:
+SSL_COMP_set0_compression_methods 374 EXIST:!VMS:FUNCTION:COMP
+SSL_COMP_set0_compress_methods 374 EXIST:VMS:FUNCTION:COMP
+SSL_CTX_set_cert_cb 375 EXIST::FUNCTION:
+SSL_CTX_add_client_custom_ext 376 EXIST::FUNCTION:TLSEXT
+SSL_is_server 377 EXIST::FUNCTION:
+SSL_CTX_get0_param 378 EXIST::FUNCTION:
+SSL_CONF_cmd 379 EXIST::FUNCTION:
+SSL_CTX_get_ssl_method 380 EXIST::FUNCTION:
+SSL_CONF_CTX_set_ssl_ctx 381 EXIST::FUNCTION:
+SSL_CIPHER_find 382 EXIST::FUNCTION:
+SSL_CTX_use_serverinfo 383 EXIST::FUNCTION:TLSEXT
+DTLSv1_2_client_method 384 EXIST::FUNCTION:
+SSL_get0_alpn_selected 385 EXIST::FUNCTION:
+SSL_CONF_CTX_clear_flags 386 EXIST::FUNCTION:
+SSL_CTX_set_alpn_protos 387 EXIST::FUNCTION:
+SSL_CTX_add_server_custom_ext 389 EXIST::FUNCTION:TLSEXT
+SSL_CTX_get0_certificate 390 EXIST::FUNCTION:
+SSL_CTX_set_alpn_select_cb 391 EXIST::FUNCTION:
+SSL_CONF_cmd_value_type 392 EXIST::FUNCTION:
+SSL_set_cert_cb 393 EXIST::FUNCTION:
+SSL_get_sigalgs 394 EXIST::FUNCTION:TLSEXT
+SSL_CONF_CTX_set1_prefix 395 EXIST::FUNCTION:
+SSL_CONF_CTX_new 396 EXIST::FUNCTION:
+SSL_CONF_CTX_set_flags 397 EXIST::FUNCTION:
+SSL_CONF_CTX_set_ssl 398 EXIST::FUNCTION:
+SSL_check_chain 399 EXIST::FUNCTION:TLSEXT
+SSL_certs_clear 400 EXIST::FUNCTION:
+SSL_CONF_CTX_free 401 EXIST::FUNCTION:
+SSL_trace 402 EXIST::FUNCTION:SSL_TRACE
+SSL_CTX_set_cli_supp_data 403 NOEXIST::FUNCTION:
+DTLSv1_2_method 404 EXIST::FUNCTION:
+DTLS_server_method 405 EXIST::FUNCTION:
+SSL_CTX_use_serverinfo_file 406 EXIST::FUNCTION:STDIO,TLSEXT
+SSL_COMP_free_compression_methods 407 EXIST:!VMS:FUNCTION:COMP
+SSL_COMP_free_compress_methods 407 EXIST:VMS:FUNCTION:COMP
+SSL_extension_supported 409 EXIST::FUNCTION:TLSEXT
diff --git a/etc/Makefile b/etc/Makefile
index 24c83d1..5f8d9ab 100644
--- a/etc/Makefile
+++ b/etc/Makefile
@@ -151,6 +151,9 @@ BIN1+= regdomain.xml
BIN2= netstart pccard_ether rc.suspend rc.resume
MTREE= BSD.debug.dist BSD.include.dist BSD.root.dist BSD.usr.dist BSD.var.dist
+.if ${MK_LIB32} != "no"
+MTREE+= BSD.lib32.dist
+.endif
.if ${MK_TESTS} != "no"
MTREE+= BSD.tests.dist
.endif
@@ -344,6 +347,10 @@ MTREES= mtree/BSD.root.dist / \
.if ${MK_GROFF} != "no"
MTREES+= mtree/BSD.groff.dist /usr
.endif
+.if ${MK_LIB32} != "no"
+MTREES+= mtree/BSD.lib32.dist /usr
+MTREES+= mtree/BSD.lib32.dist /usr/lib/debug/usr
+.endif
.if ${MK_TESTS} != "no"
MTREES+= mtree/BSD.tests.dist ${TESTSBASE}
MTREES+= mtree/BSD.tests.dist /usr/lib/debug/${TESTSBASE}
@@ -387,26 +394,26 @@ distrib-dirs: ${MTREES:N/*}
.endif
${INSTALL_SYMLINK} usr/src/sys ${DESTDIR}/sys
.if ${MK_MAN} != "no"
- cd ${DESTDIR}/usr/share/man; \
+ cd ${DESTDIR}${SHAREDIR}/man; \
for mandir in man*; do \
${INSTALL_SYMLINK} ../$$mandir \
- ${DESTDIR}/usr/share/man/en.ISO8859-1/; \
+ ${DESTDIR}${SHAREDIR}/man/en.ISO8859-1/; \
${INSTALL_SYMLINK} ../$$mandir \
- ${DESTDIR}/usr/share/man/en.UTF-8/; \
+ ${DESTDIR}${SHAREDIR}/man/en.UTF-8/; \
done
.if ${MK_OPENSSL} != "no"
- cd ${DESTDIR}/usr/share/openssl/man; \
+ cd ${DESTDIR}${SHAREDIR}/openssl/man; \
for mandir in man*; do \
${INSTALL_SYMLINK} ../$$mandir \
- ${DESTDIR}/usr/share/openssl/man/en.ISO8859-1/; \
+ ${DESTDIR}${SHAREDIR}/openssl/man/en.ISO8859-1/; \
done
.endif
set - `grep "^[a-zA-Z]" ${.CURDIR}/man.alias`; \
while [ $$# -gt 0 ] ; do \
- ${INSTALL_SYMLINK} "$$2" "${DESTDIR}/usr/share/man/$$1"; \
+ ${INSTALL_SYMLINK} "$$2" "${DESTDIR}${SHAREDIR}/man/$$1"; \
if [ "${MK_OPENSSL}" != "no" ]; then \
${INSTALL_SYMLINK} "$$2" \
- "${DESTDIR}/usr/share/openssl/man/$$1"; \
+ "${DESTDIR}${SHAREDIR}/openssl/man/$$1"; \
fi; \
shift; shift; \
done
@@ -414,7 +421,7 @@ distrib-dirs: ${MTREES:N/*}
.if ${MK_NLS} != "no"
set - `grep "^[a-zA-Z]" ${.CURDIR}/nls.alias`; \
while [ $$# -gt 0 ] ; do \
- ${INSTALL_SYMLINK} "$$2" "${DESTDIR}/usr/share/nls/$$1"; \
+ ${INSTALL_SYMLINK} "$$2" "${DESTDIR}${SHAREDIR}/nls/$$1"; \
shift; shift; \
done
.endif
@@ -422,8 +429,8 @@ distrib-dirs: ${MTREES:N/*}
etc-examples:
cd ${.CURDIR}; ${INSTALL} -o ${BINOWN} -g ${BINGRP} -m 444 \
${BIN1} ${BIN2} nsmb.conf opieaccess \
- ${DESTDIR}/usr/share/examples/etc
+ ${DESTDIR}${SHAREDIR}/examples/etc
${_+_}cd ${.CURDIR}/defaults; ${MAKE} install \
- DESTDIR=${DESTDIR}/usr/share/examples
+ DESTDIR=${DESTDIR}${SHAREDIR}/examples
.include <bsd.prog.mk>
diff --git a/etc/defaults/rc.conf b/etc/defaults/rc.conf
index fbe18db..4c0e899 100644
--- a/etc/defaults/rc.conf
+++ b/etc/defaults/rc.conf
@@ -84,6 +84,7 @@ geli_autodetach="YES" # Automatically detach on last close.
#geli_mirror_home_flags="-k /etc/geli/home.keys"
root_rw_mount="YES" # Set to NO to inhibit remounting root read-write.
+root_hold_delay="30" # Time to wait for root mount hold release.
fsck_y_enable="NO" # Set to YES to do fsck -y if the initial preen fails.
fsck_y_flags="" # Additional flags for fsck -y
background_fsck="YES" # Attempt to run fsck in the background where possible.
diff --git a/etc/etc.amd64/ttys b/etc/etc.amd64/ttys
index 8268df3..15eb30d 100644
--- a/etc/etc.amd64/ttys
+++ b/etc/etc.amd64/ttys
@@ -42,8 +42,8 @@ ttyv8 "/usr/local/bin/xdm -nodaemon" xterm off secure
# Serial terminals
# The 'dialup' keyword identifies dialin lines to login, fingerd etc.
ttyu0 "/usr/libexec/getty 3wire" vt100 onifconsole secure
-ttyu1 "/usr/libexec/getty std.9600" dialup off secure
-ttyu2 "/usr/libexec/getty std.9600" dialup off secure
-ttyu3 "/usr/libexec/getty std.9600" dialup off secure
+ttyu1 "/usr/libexec/getty 3wire" vt100 onifconsole secure
+ttyu2 "/usr/libexec/getty 3wire" vt100 onifconsole secure
+ttyu3 "/usr/libexec/getty 3wire" vt100 onifconsole secure
# Dumb console
dcons "/usr/libexec/getty std.9600" vt100 off secure
diff --git a/etc/etc.i386/ttys b/etc/etc.i386/ttys
index 8268df3..15eb30d 100644
--- a/etc/etc.i386/ttys
+++ b/etc/etc.i386/ttys
@@ -42,8 +42,8 @@ ttyv8 "/usr/local/bin/xdm -nodaemon" xterm off secure
# Serial terminals
# The 'dialup' keyword identifies dialin lines to login, fingerd etc.
ttyu0 "/usr/libexec/getty 3wire" vt100 onifconsole secure
-ttyu1 "/usr/libexec/getty std.9600" dialup off secure
-ttyu2 "/usr/libexec/getty std.9600" dialup off secure
-ttyu3 "/usr/libexec/getty std.9600" dialup off secure
+ttyu1 "/usr/libexec/getty 3wire" vt100 onifconsole secure
+ttyu2 "/usr/libexec/getty 3wire" vt100 onifconsole secure
+ttyu3 "/usr/libexec/getty 3wire" vt100 onifconsole secure
# Dumb console
dcons "/usr/libexec/getty std.9600" vt100 off secure
diff --git a/etc/etc.mips/ttys b/etc/etc.mips/ttys
index a07cbc2..21bb932 100644
--- a/etc/etc.mips/ttys
+++ b/etc/etc.mips/ttys
@@ -30,7 +30,7 @@
console none unknown off secure
# Serial terminals
# The 'dialup' keyword identifies dialin lines to login, fingerd etc.
-ttyu0 "/usr/libexec/getty 3wire" vt100 on secure
-ttyu1 "/usr/libexec/getty std.115200" dialup off secure
-ttyu2 "/usr/libexec/getty std.115200" dialup off secure
-ttyu3 "/usr/libexec/getty std.115200" dialup off secure
+ttyu0 "/usr/libexec/getty 3wire" vt100 onifconsole secure
+ttyu1 "/usr/libexec/getty 3wire" vt100 onifconsole secure
+ttyu2 "/usr/libexec/getty 3wire" vt100 onifconsole secure
+ttyu3 "/usr/libexec/getty 3wire" vt100 onifconsole secure
diff --git a/etc/etc.pc98/ttys b/etc/etc.pc98/ttys
index ad20aca..d75cf05 100644
--- a/etc/etc.pc98/ttys
+++ b/etc/etc.pc98/ttys
@@ -41,9 +41,9 @@ ttyv7 "/usr/libexec/getty Pc" cons25w on secure
ttyv8 "/usr/local/bin/xdm -nodaemon" xterm off secure
# Serial terminals
# The 'dialup' keyword identifies dialin lines to login, fingerd etc.
-ttyu0 "/usr/libexec/getty std.9600" dialup off secure
-ttyu1 "/usr/libexec/getty std.9600" dialup off secure
-ttyu2 "/usr/libexec/getty std.9600" dialup off secure
-ttyu3 "/usr/libexec/getty std.9600" dialup off secure
+ttyu0 "/usr/libexec/getty 3wire" vt100 onifconsole secure
+ttyu1 "/usr/libexec/getty 3wire" vt100 onifconsole secure
+ttyu2 "/usr/libexec/getty 3wire" vt100 onifconsole secure
+ttyu3 "/usr/libexec/getty 3wire" vt100 onifconsole secure
# Dumb console
dcons "/usr/libexec/getty std.9600" vt100 off secure
diff --git a/etc/etc.powerpc/ttys b/etc/etc.powerpc/ttys
index 793a155..606e963 100644
--- a/etc/etc.powerpc/ttys
+++ b/etc/etc.powerpc/ttys
@@ -41,9 +41,9 @@ ttyv7 "/usr/libexec/getty Pc" xterm on secure
#ttyv8 "/usr/local/bin/xdm -nodaemon" xterm off secure
# Serial terminals
# The 'dialup' keyword identifies dialin lines to login, fingerd etc.
-ttyu0 "/usr/libexec/getty 3wire" vt100 on secure
-ttyu1 "/usr/libexec/getty std.9600" dialup off secure
-ttyu2 "/usr/libexec/getty std.9600" dialup off secure
-ttyu3 "/usr/libexec/getty std.9600" dialup off secure
+ttyu0 "/usr/libexec/getty 3wire" vt100 onifconsole secure
+ttyu1 "/usr/libexec/getty 3wire" vt100 onifconsole secure
+ttyu2 "/usr/libexec/getty 3wire" vt100 onifconsole secure
+ttyu3 "/usr/libexec/getty 3wire" vt100 onifconsole secure
# Dumb console
dcons "/usr/libexec/getty std.9600" vt100 off secure
diff --git a/etc/etc.sparc64/ttys b/etc/etc.sparc64/ttys
index c3fa95f..afca321 100644
--- a/etc/etc.sparc64/ttys
+++ b/etc/etc.sparc64/ttys
@@ -46,9 +46,9 @@ ttyv8 "/usr/local/bin/xdm -nodaemon" xterm off secure
# Serial terminals
# The 'dialup' keyword identifies dialin lines to login, fingerd etc.
# uart(4)
-ttyu0 "/usr/libexec/getty 3wire" vt100 on secure
-ttyu1 "/usr/libexec/getty 3wire" vt100 on secure
-ttyu2 "/usr/libexec/getty 3wire" vt100 on secure
-ttyu3 "/usr/libexec/getty std.9600" vt100 off secure
+ttyu0 "/usr/libexec/getty 3wire" vt100 onifconsole secure
+ttyu1 "/usr/libexec/getty 3wire" vt100 onifconsole secure
+ttyu2 "/usr/libexec/getty 3wire" vt100 onifconsole secure
+ttyu3 "/usr/libexec/getty 3wire" vt100 onifconsole secure
# Dumb console
dcons "/usr/libexec/getty std.9600" vt100 off secure
diff --git a/etc/mtree/BSD.debug.dist b/etc/mtree/BSD.debug.dist
index 8df0a72..e760e01 100644
--- a/etc/mtree/BSD.debug.dist
+++ b/etc/mtree/BSD.debug.dist
@@ -41,12 +41,6 @@
private
..
..
- lib32
- i18n
- ..
- private
- ..
- ..
libexec
bsdinstall
..
diff --git a/etc/mtree/BSD.lib32.dist b/etc/mtree/BSD.lib32.dist
new file mode 100644
index 0000000..a82368f
--- /dev/null
+++ b/etc/mtree/BSD.lib32.dist
@@ -0,0 +1,14 @@
+# $FreeBSD$
+#
+# Please see the file src/etc/mtree/README before making changes to this file.
+#
+
+/set type=dir uname=root gname=wheel mode=0755
+.
+ lib32
+ dtrace
+ ..
+ i18n
+ ..
+ ..
+..
diff --git a/etc/mtree/BSD.tests.dist b/etc/mtree/BSD.tests.dist
index 8d29323..8cdc2fc 100644
--- a/etc/mtree/BSD.tests.dist
+++ b/etc/mtree/BSD.tests.dist
@@ -275,6 +275,8 @@
data
..
..
+ rpc
+ ..
ssp
..
stdio
@@ -596,6 +598,8 @@
..
fstyp
..
+ makefs
+ ..
newsyslog
..
nmtree
diff --git a/etc/mtree/BSD.usr.dist b/etc/mtree/BSD.usr.dist
index 12ee777..0dd1ea4 100644
--- a/etc/mtree/BSD.usr.dist
+++ b/etc/mtree/BSD.usr.dist
@@ -43,12 +43,6 @@
..
..
..
- lib32
- dtrace
- ..
- i18n
- ..
- ..
libdata
gcc
..
diff --git a/etc/mtree/Makefile b/etc/mtree/Makefile
index afed370..1a941e4 100644
--- a/etc/mtree/Makefile
+++ b/etc/mtree/Makefile
@@ -5,6 +5,7 @@
FILES= ${_BSD.debug.dist} \
BSD.include.dist \
BSD.root.dist \
+ ${_BSD.lib32.dist} \
${_BSD.sendmail.dist} \
${_BSD.tests.dist} \
BSD.usr.dist \
@@ -16,6 +17,9 @@ _BSD.debug.dist= BSD.debug.dist
.if ${MK_GROFF} != "no"
_BSD.groff.dist= BSD.groff.dist
.endif
+.if ${MK_LIB32} != "no"
+_BSD.lib32.dist= BSD.lib32.dist
+.endif
.if ${MK_SENDMAIL} != "no"
_BSD.sendmail.dist= BSD.sendmail.dist
.endif
diff --git a/etc/netstart b/etc/netstart
index 4adcae2..e499596 100755
--- a/etc/netstart
+++ b/etc/netstart
@@ -34,9 +34,6 @@
# the network by hand, this script will do it for you).
#
-. /etc/rc.subr
-
-load_rc_config 'XXX'
_start=quietstart
/etc/rc.d/devd ${_start}
diff --git a/etc/rc.d/jail b/etc/rc.d/jail
index 3c55edf..70d865b 100755
--- a/etc/rc.d/jail
+++ b/etc/rc.d/jail
@@ -243,6 +243,8 @@ parse_options()
extract_var $_j set_hostname_allow allow.set_hostname YN NO
extract_var $_j sysvipc_allow allow.sysvipc YN NO
+ extract_var $_j osreldate osreldate
+ extract_var $_j osrelease osrelease
for _p in $_parameters; do
echo " ${_p%\;};"
done
diff --git a/etc/rc.d/local_unbound b/etc/rc.d/local_unbound
index ce3256d..4bb1a0c 100755
--- a/etc/rc.d/local_unbound
+++ b/etc/rc.d/local_unbound
@@ -17,6 +17,7 @@ rcvar="local_unbound_enable"
command="/usr/sbin/unbound"
extra_commands="anchor configtest reload setup"
start_precmd="local_unbound_prestart"
+start_postcmd="local_unbound_poststart"
reload_precmd="local_unbound_configtest"
anchor_cmd="local_unbound_anchor"
configtest_cmd="local_unbound_configtest"
@@ -90,5 +91,25 @@ local_unbound_prestart()
fi
}
+#
+# After starting, wait for Unbound to report that it is ready to avoid
+# race conditions with services which require functioning DNS.
+#
+local_unbound_poststart()
+{
+ local retry=5
+
+ echo -n "Waiting for nameserver to start..."
+ until "${command}-control" status | grep -q "is running" ; do
+ if [ $((retry -= 1)) -eq 0 ] ; then
+ echo " giving up"
+ return 1
+ fi
+ echo -n "."
+ sleep 1
+ done
+ echo " good"
+}
+
load_rc_config $name
run_rc_command "$1"
diff --git a/etc/rc.d/mdconfig b/etc/rc.d/mdconfig
index 627da87..fecdef6 100755
--- a/etc/rc.d/mdconfig
+++ b/etc/rc.d/mdconfig
@@ -186,6 +186,8 @@ if [ -z "${_mdconfig_list}" ]; then
sort_lite -nk1.12`
do
_mdconfig_unit=${_mdconfig_config#mdconfig_md}
+ [ "${_mdconfig_unit#*[!0-9]}" = "$_mdconfig_unit" ] ||
+ continue
_mdconfig_list="$_mdconfig_list md$_mdconfig_unit"
done
_mdconfig_list="${_mdconfig_list# }"
diff --git a/etc/rc.d/mdconfig2 b/etc/rc.d/mdconfig2
index 85fd07f..234459f 100755
--- a/etc/rc.d/mdconfig2
+++ b/etc/rc.d/mdconfig2
@@ -216,6 +216,8 @@ if [ -z "${_mdconfig2_list}" ]; then
sort_lite -nk1.12`
do
_mdconfig2_unit=${_mdconfig2_config#mdconfig_md}
+ [ "${_mdconfig2_unit#*[!0-9]}" = "$_mdconfig2_unit" ] ||
+ continue
_mdconfig2_list="$_mdconfig2_list md$_mdconfig2_unit"
done
_mdconfig2_list="${_mdconfig2_list# }"
diff --git a/etc/rc.d/mountcritlocal b/etc/rc.d/mountcritlocal
index 06bf464..1513ec7 100755
--- a/etc/rc.d/mountcritlocal
+++ b/etc/rc.d/mountcritlocal
@@ -15,7 +15,7 @@ stop_cmd=sync
mountcritlocal_start()
{
- local err
+ local err holders waited
# Set up the list of network filesystem types for which mounting
# should be delayed until after network initialization.
@@ -35,8 +35,42 @@ mountcritlocal_start()
mount_excludes="${mount_excludes}${fstype},"
done
mount_excludes=${mount_excludes%,}
+
+ # Originally, root mount hold had to be released before mounting the root
+ # filesystem. This delayed the boot, so it was changed to only wait if
+ # the root device isn't readily available. This can result in this script
+ # executing before all the devices - such as graid(8) - are available.
+ # Thus, should the mount fail, we will wait for the root mount hold release
+ # and retry.
mount -a -t ${mount_excludes}
err=$?
+ if [ $? -ne 0 ]; then
+ echo
+ echo 'Mounting /etc/fstab filesystems failed,' \
+ 'will retry after root mount hold release'
+
+ waited=0
+ while [ ${waited} -lt ${root_hold_delay} ]; do
+ holders="$(sysctl -n vfs.root_mount_hold)"
+ if [ -z "${holders}" ]; then
+ break;
+ fi
+ if [ ${waited} -eq 0 ]; then
+ echo -n "Waiting ${root_hold_delay}s" \
+ "for the root mount holders: ${holders}"
+ else
+ echo -n .
+ fi
+ if [ ${waited} -eq ${root_hold_delay} ]; then
+ break 2
+ fi
+ sleep 1
+ waited=$(($waited + 1))
+ done
+ mount -a -t ${mount_excludes}
+ err=$?
+ fi
+
check_startmsgs && echo '.'
case ${err} in
@@ -44,7 +78,7 @@ mountcritlocal_start()
;;
*)
echo 'Mounting /etc/fstab filesystems failed,' \
- ' startup aborted'
+ 'startup aborted'
stop_boot true
;;
esac
diff --git a/etc/rc.d/othermta b/etc/rc.d/othermta
index 7ab3e63..36292ae 100755
--- a/etc/rc.d/othermta
+++ b/etc/rc.d/othermta
@@ -10,7 +10,7 @@
#
. /etc/rc.subr
-load_rc_config 'XXX'
+load_rc_config
if [ -n "${mta_start_script}" ]; then
[ "${mta_start_script}" != "/etc/rc.sendmail" ] && \
diff --git a/etc/rc.shutdown b/etc/rc.shutdown
index a0dd698..15779c7 100644
--- a/etc/rc.shutdown
+++ b/etc/rc.shutdown
@@ -45,7 +45,7 @@ export HOME PATH
. /etc/rc.subr
-load_rc_config 'XXX'
+load_rc_config
# reverse_list list
# print the list in reverse order
diff --git a/etc/rc.subr b/etc/rc.subr
index cd933c6..904a5bd 100644
--- a/etc/rc.subr
+++ b/etc/rc.subr
@@ -1316,8 +1316,10 @@ run_rc_script()
}
#
-# load_rc_config name
-# Source in the configuration file for a given name.
+# load_rc_config [service]
+# Source in the configuration file(s) for a given service.
+# If no service is specified, only the global configuration
+# file(s) will be loaded.
#
load_rc_config()
{
diff --git a/gnu/usr.bin/gdb/kgdb/trgt_arm.c b/gnu/usr.bin/gdb/kgdb/trgt_arm.c
index cb23aa6..d457bd3 100644
--- a/gnu/usr.bin/gdb/kgdb/trgt_arm.c
+++ b/gnu/usr.bin/gdb/kgdb/trgt_arm.c
@@ -63,7 +63,7 @@ kgdb_trgt_fetch_registers(int regno __unused)
#ifndef CROSS_DEBUGGER
struct kthr *kt;
struct pcb pcb;
- int i, reg;
+ int i;
kt = kgdb_thr_lookup_tid(ptid_get_pid(inferior_ptid));
if (kt == NULL)
@@ -76,12 +76,8 @@ kgdb_trgt_fetch_registers(int regno __unused)
supply_register(i, (char *)&pcb.pcb_regs.sf_r4 +
(i - (ARM_A1_REGNUM + 4 )) * 4);
}
- if (pcb.pcb_regs.sf_sp != 0) {
- if (kvm_read(kvm, pcb.pcb_regs.sf_sp + 4 * 4, &reg, 4) != 4)
- warnx("kvm_read :%s", kvm_geterr(kvm));
- else
- supply_register(ARM_PC_REGNUM, (char *)&reg);
- }
+ supply_register(ARM_PC_REGNUM, (char *)&pcb.pcb_regs.sf_pc);
+ supply_register(ARM_LR_REGNUM, (char *)&pcb.pcb_regs.sf_lr);
#endif
}
diff --git a/gnu/usr.bin/groff/src/devices/xditview/Makefile b/gnu/usr.bin/groff/src/devices/xditview/Makefile
deleted file mode 100644
index 91bfcf3..0000000
--- a/gnu/usr.bin/groff/src/devices/xditview/Makefile
+++ /dev/null
@@ -1,34 +0,0 @@
-# $FreeBSD$
-
-PROG= gxditview
-SRCS= device.c draw.c Dvi.c font.c lex.c page.c parse.c xditview.c
-DPADD= ${LIBM}
-LDADD= -lm
-CLEANFILES= ${MAN}
-
-GENHDRS= GXditview-ad.h
-SRCS+= ${GENHDRS}
-CFLAGS+= -I.
-CLEANFILES+= ${GENHDRS}
-
-GXditview-ad.h: GXditview.ad
- ${SHELL} ${DIST_DIR}/ad2c ${.ALLSRC} >${.TARGET}
-
-# libxutil
-SRCS+= DviChar.c XFontName.c xmalloc.c
-
-# X11 glue
-CFLAGS+= -I${X11BASE}/include
-LDFLAGS= -L${X11BASE}/lib
-DPADD+= ${X11BASE}/lib/libXaw.a
-LDADD+= -lXaw
-
-BINDIR= ${X11BASE}/bin
-MANDIR= ${X11BASE}/man/man
-FILESDIR= ${X11BASE}/lib/X11/app-defaults
-FILES= GXditview.ad
-FILESNAME= GXditview
-
-.include <bsd.prog.mk>
-
-.PATH: ${GROFF_DIST}/src/libs/libxutil
diff --git a/include/stdio.h b/include/stdio.h
index 5a5b82b..f55aaf7 100644
--- a/include/stdio.h
+++ b/include/stdio.h
@@ -144,6 +144,7 @@ struct __sFILE {
int _fl_count; /* recursive lock count */
int _orientation; /* orientation for fwide() */
__mbstate_t _mbstate; /* multibyte conversion state */
+ int _flags2; /* additional flags */
};
#ifndef _STDFILE_DECLARED
#define _STDFILE_DECLARED
@@ -176,6 +177,8 @@ __END_DECLS
#define __SALC 0x4000 /* allocate string space dynamically */
#define __SIGN 0x8000 /* ignore this file in _fwalk */
+#define __S2OAP 0x0001 /* O_APPEND mode is set */
+
/*
* The following three definitions are for ANSI C, which took them
* from System V, which brilliantly took internal interface macros and
diff --git a/lib/libc/gen/getgrent.c b/lib/libc/gen/getgrent.c
index 31d2af1..2179fb2 100644
--- a/lib/libc/gen/getgrent.c
+++ b/lib/libc/gen/getgrent.c
@@ -660,14 +660,13 @@ __getgroupmembership(const char *uname, gid_t agroup, gid_t *groups,
NS_FALLBACK_CB(getgroupmembership_fallback)
{ NULL, NULL, NULL }
};
- int rv;
assert(uname != NULL);
/* groups may be NULL if just sizing when invoked with maxgrp = 0 */
assert(grpcnt != NULL);
*grpcnt = 0;
- rv = _nsdispatch(NULL, dtab, NSDB_GROUP, "getgroupmembership",
+ (void)_nsdispatch(NULL, dtab, NSDB_GROUP, "getgroupmembership",
defaultsrc, uname, agroup, groups, maxgrp, grpcnt);
/* too many groups found? */
@@ -1239,14 +1238,13 @@ compat_setgrent(void *retval, void *mdata, va_list ap)
int rv, stayopen;
#define set_setent(x, y) do { \
- unsigned int i; \
- \
- for (i = 0; i < (sizeof(x)/sizeof(x[0])) - 1; i++) \
+ int i; \
+ for (i = 0; i < (int)(nitems(x) - 1); i++) \
x[i].mdata = (void *)y; \
} while (0)
rv = compat_getstate(&st);
- if (rv != 0)
+ if (rv != 0)
return (NS_UNAVAIL);
switch ((enum constants)mdata) {
case SETGRENT:
@@ -1309,9 +1307,8 @@ compat_group(void *retval, void *mdata, va_list ap)
int rv, stayopen, *errnop;
#define set_lookup_type(x, y) do { \
- unsigned int i; \
- \
- for (i = 0; i < (sizeof(x)/sizeof(x[0])) - 1; i++) \
+ int i; \
+ for (i = 0; i < (int)(nitems(x) - 1); i++) \
x[i].mdata = (void *)y; \
} while (0)
diff --git a/lib/libc/gen/getpwent.c b/lib/libc/gen/getpwent.c
index 6546f587..8617ecc 100644
--- a/lib/libc/gen/getpwent.c
+++ b/lib/libc/gen/getpwent.c
@@ -1607,10 +1607,9 @@ compat_redispatch(struct compat_state *st, enum nss_lookup_type how,
{ NULL, NULL, NULL }
};
void *discard;
- int rv, e;
- unsigned int i;
+ int e, i, rv;
- for (i = 0; i < sizeof(dtab)/sizeof(dtab[0]) - 1; i++)
+ for (i = 0; i < (int)(nitems(dtab) - 1); i++)
dtab[i].mdata = (void *)lookup_how;
more:
pwd_init(pwd);
@@ -1703,9 +1702,8 @@ compat_setpwent(void *retval, void *mdata, va_list ap)
int rv, stayopen;
#define set_setent(x, y) do { \
- unsigned int i; \
- \
- for (i = 0; i < (sizeof(x)/sizeof(x[0])) - 1; i++) \
+ int i; \
+ for (i = 0; i < (int)(nitems(x) - 1); i++) \
x[i].mdata = (void *)y; \
} while (0)
diff --git a/lib/libc/iconv/bsd_iconv.c b/lib/libc/iconv/bsd_iconv.c
index e032a5b..e9ff688 100644
--- a/lib/libc/iconv/bsd_iconv.c
+++ b/lib/libc/iconv/bsd_iconv.c
@@ -207,43 +207,51 @@ __bsd_iconvlist(int (*do_one) (unsigned int, const char * const *,
const char * const *np;
char *curitem, *curkey, *slashpos;
size_t sz;
- unsigned int i, j;
+ unsigned int i, j, n;
i = 0;
+ names = NULL;
- if (__bsd___iconv_get_list(&list, &sz, true))
+ if (__bsd___iconv_get_list(&list, &sz, true)) {
list = NULL;
+ goto out;
+ }
qsort((void *)list, sz, sizeof(char *), qsort_helper);
while (i < sz) {
j = 0;
slashpos = strchr(list[i], '/');
- curkey = (char *)malloc(slashpos - list[i] + 2);
- names = (char **)malloc(sz * sizeof(char *));
- if ((curkey == NULL) || (names == NULL)) {
- __bsd___iconv_free_list(list, sz);
- return;
- }
- strlcpy(curkey, list[i], slashpos - list[i] + 1);
+ names = malloc(sz * sizeof(char *));
+ if (names == NULL)
+ goto out;
+ curkey = strndup(list[i], slashpos - list[i]);
+ if (curkey == NULL)
+ goto out;
names[j++] = curkey;
for (; (i < sz) && (memcmp(curkey, list[i], strlen(curkey)) == 0); i++) {
slashpos = strchr(list[i], '/');
- curitem = (char *)malloc(strlen(slashpos) + 1);
- if (curitem == NULL) {
- __bsd___iconv_free_list(list, sz);
- return;
- }
- strlcpy(curitem, &slashpos[1], strlen(slashpos) + 1);
- if (strcmp(curkey, curitem) == 0) {
+ if (strcmp(curkey, &slashpos[1]) == 0)
continue;
- }
+ curitem = strdup(&slashpos[1]);
+ if (curitem == NULL)
+ goto out;
names[j++] = curitem;
}
np = (const char * const *)names;
do_one(j, np, data);
+ for (n = 0; n < j; n++)
+ free(names[n]);
free(names);
+ names = NULL;
}
- __bsd___iconv_free_list(list, sz);
+out:
+ if (names != NULL) {
+ for (n = 0; n < j; n++)
+ free(names[n]);
+ free(names);
+ }
+ if (list != NULL)
+ __bsd___iconv_free_list(list, sz);
}
__inline const char *
diff --git a/lib/libc/iconv/citrus_esdb.c b/lib/libc/iconv/citrus_esdb.c
index 578cbc1..ed404a6 100644
--- a/lib/libc/iconv/citrus_esdb.c
+++ b/lib/libc/iconv/citrus_esdb.c
@@ -328,7 +328,7 @@ _citrus_esdb_get_list(char ***rlist, size_t *rnum, bool sorted)
(int)_region_size(&data),
(const char *)_region_head(&data));
if ((p = strchr(buf1, '/')) != NULL)
- memcpy(buf1, p + 1, strlen(p) - 1);
+ memmove(buf1, p + 1, strlen(p) - 1);
if ((p = strstr(buf1, ".esdb")) != NULL)
*p = '\0';
snprintf(buf, sizeof(buf), "%s/%.*s", buf1,
diff --git a/lib/libc/resolv/res_data.c b/lib/libc/resolv/res_data.c
index f020838..e2f905f 100644
--- a/lib/libc/resolv/res_data.c
+++ b/lib/libc/resolv/res_data.c
@@ -77,9 +77,10 @@ const char *_res_sectioncodes[] = {
int res_ourserver_p(const res_state, const struct sockaddr_in *);
-int
+__noinline int
res_init(void) {
extern int __res_vinit(res_state, int);
+ res_state statp = &_res;
/*
* These three fields used to be statically initialized. This made
@@ -100,14 +101,14 @@ res_init(void) {
* set in RES_DEFAULT). Our solution is to declare such applications
* "broken". They could fool us by setting RES_INIT but none do (yet).
*/
- if (!_res.retrans)
- _res.retrans = RES_TIMEOUT;
- if (!_res.retry)
- _res.retry = RES_DFLRETRY;
- if (!(_res.options & RES_INIT))
- _res.options = RES_DEFAULT;
-
- return (__res_vinit(&_res, 1));
+ if (!statp->retrans)
+ statp->retrans = RES_TIMEOUT;
+ if (!statp->retry)
+ statp->retry = RES_DFLRETRY;
+ if (!(statp->options & RES_INIT))
+ statp->options = RES_DEFAULT;
+
+ return (__res_vinit(statp, 1));
}
void
@@ -122,10 +123,11 @@ fp_query(const u_char *msg, FILE *file) {
void
fp_nquery(const u_char *msg, int len, FILE *file) {
- if ((_res.options & RES_INIT) == 0U && res_init() == -1)
+ res_state statp = &_res;
+ if ((statp->options & RES_INIT) == 0U && res_init() == -1)
return;
- res_pquery(&_res, msg, len, file);
+ res_pquery(statp, msg, len, file);
}
int
@@ -138,23 +140,25 @@ res_mkquery(int op, /*!< opcode of query */
u_char *buf, /*!< buffer to put query */
int buflen) /*!< size of buffer */
{
- if ((_res.options & RES_INIT) == 0U && res_init() == -1) {
- RES_SET_H_ERRNO(&_res, NETDB_INTERNAL);
+ res_state statp = &_res;
+ if ((statp->options & RES_INIT) == 0U && res_init() == -1) {
+ RES_SET_H_ERRNO(statp, NETDB_INTERNAL);
return (-1);
}
- return (res_nmkquery(&_res, op, dname, class, type,
+ return (res_nmkquery(statp, op, dname, class, type,
data, datalen,
newrr_in, buf, buflen));
}
int
res_mkupdate(ns_updrec *rrecp_in, u_char *buf, int buflen) {
- if ((_res.options & RES_INIT) == 0U && res_init() == -1) {
- RES_SET_H_ERRNO(&_res, NETDB_INTERNAL);
+ res_state statp = &_res;
+ if ((statp->options & RES_INIT) == 0U && res_init() == -1) {
+ RES_SET_H_ERRNO(statp, NETDB_INTERNAL);
return (-1);
}
- return (res_nmkupdate(&_res, rrecp_in, buf, buflen));
+ return (res_nmkupdate(statp, rrecp_in, buf, buflen));
}
int
@@ -163,11 +167,12 @@ res_query(const char *name, /*!< domain name */
u_char *answer, /*!< buffer to put answer */
int anslen) /*!< size of answer buffer */
{
- if ((_res.options & RES_INIT) == 0U && res_init() == -1) {
- RES_SET_H_ERRNO(&_res, NETDB_INTERNAL);
+ res_state statp = &_res;
+ if ((statp->options & RES_INIT) == 0U && res_init() == -1) {
+ RES_SET_H_ERRNO(statp, NETDB_INTERNAL);
return (-1);
}
- return (res_nquery(&_res, name, class, type, answer, anslen));
+ return (res_nquery(statp, name, class, type, answer, anslen));
}
#ifndef _LIBC
@@ -189,12 +194,13 @@ res_isourserver(const struct sockaddr_in *inp) {
int
res_send(const u_char *buf, int buflen, u_char *ans, int anssiz) {
- if ((_res.options & RES_INIT) == 0U && res_init() == -1) {
+ res_state statp = &_res;
+ if ((statp->options & RES_INIT) == 0U && res_init() == -1) {
/* errno should have been set by res_init() in this case. */
return (-1);
}
- return (res_nsend(&_res, buf, buflen, ans, anssiz));
+ return (res_nsend(statp, buf, buflen, ans, anssiz));
}
#ifndef _LIBC
@@ -202,12 +208,13 @@ int
res_sendsigned(const u_char *buf, int buflen, ns_tsig_key *key,
u_char *ans, int anssiz)
{
- if ((_res.options & RES_INIT) == 0U && res_init() == -1) {
+ res_state statp = &_res;
+ if ((statp->options & RES_INIT) == 0U && res_init() == -1) {
/* errno should have been set by res_init() in this case. */
return (-1);
}
- return (res_nsendsigned(&_res, buf, buflen, key, ans, anssiz));
+ return (res_nsendsigned(statp, buf, buflen, key, ans, anssiz));
}
#endif
@@ -218,12 +225,13 @@ res_close(void) {
int
res_update(ns_updrec *rrecp_in) {
- if ((_res.options & RES_INIT) == 0U && res_init() == -1) {
- RES_SET_H_ERRNO(&_res, NETDB_INTERNAL);
+ res_state statp = &_res;
+ if ((statp->options & RES_INIT) == 0U && res_init() == -1) {
+ RES_SET_H_ERRNO(statp, NETDB_INTERNAL);
return (-1);
}
- return (res_nupdate(&_res, rrecp_in, NULL));
+ return (res_nupdate(statp, rrecp_in, NULL));
}
int
@@ -232,12 +240,13 @@ res_search(const char *name, /*!< domain name */
u_char *answer, /*!< buffer to put answer */
int anslen) /*!< size of answer */
{
- if ((_res.options & RES_INIT) == 0U && res_init() == -1) {
- RES_SET_H_ERRNO(&_res, NETDB_INTERNAL);
+ res_state statp = &_res;
+ if ((statp->options & RES_INIT) == 0U && res_init() == -1) {
+ RES_SET_H_ERRNO(statp, NETDB_INTERNAL);
return (-1);
}
- return (res_nsearch(&_res, name, class, type, answer, anslen));
+ return (res_nsearch(statp, name, class, type, answer, anslen));
}
int
@@ -247,24 +256,26 @@ res_querydomain(const char *name,
u_char *answer, /*!< buffer to put answer */
int anslen) /*!< size of answer */
{
- if ((_res.options & RES_INIT) == 0U && res_init() == -1) {
- RES_SET_H_ERRNO(&_res, NETDB_INTERNAL);
+ res_state statp = &_res;
+ if ((statp->options & RES_INIT) == 0U && res_init() == -1) {
+ RES_SET_H_ERRNO(statp, NETDB_INTERNAL);
return (-1);
}
- return (res_nquerydomain(&_res, name, domain,
+ return (res_nquerydomain(statp, name, domain,
class, type,
answer, anslen));
}
u_int
res_randomid(void) {
- if ((_res.options & RES_INIT) == 0U && res_init() == -1) {
- RES_SET_H_ERRNO(&_res, NETDB_INTERNAL);
+ res_state statp = &_res;
+ if ((statp->options & RES_INIT) == 0U && res_init() == -1) {
+ RES_SET_H_ERRNO(statp, NETDB_INTERNAL);
return (-1);
}
- return (res_nrandomid(&_res));
+ return (res_nrandomid(statp));
}
int
@@ -284,13 +295,15 @@ hostalias(const char *name) {
int
local_hostname_length(const char *hostname) {
int len_host, len_domain;
+ res_state statp;
- if (!*_res.defdname)
+ statp = &_res;
+ if (!*statp->defdname)
res_init();
len_host = strlen(hostname);
- len_domain = strlen(_res.defdname);
+ len_domain = strlen(statp->defdname);
if (len_host > len_domain &&
- !strcasecmp(hostname + len_host - len_domain, _res.defdname) &&
+ !strcasecmp(hostname + len_host - len_domain, statp->defdname) &&
hostname[len_host - len_domain - 1] == '.')
return (len_host - len_domain - 1);
return (0);
diff --git a/lib/libc/stdio/fdopen.c b/lib/libc/stdio/fdopen.c
index b936998..fbe37e8 100644
--- a/lib/libc/stdio/fdopen.c
+++ b/lib/libc/stdio/fdopen.c
@@ -91,7 +91,9 @@ fdopen(int fd, const char *mode)
* O_APPEND bit set, assert __SAPP so that __swrite() caller
* will _sseek() to the end before write.
*/
- if ((oflags & O_APPEND) && !(fdflags & O_APPEND))
+ if (fdflags & O_APPEND)
+ fp->_flags2 |= __S2OAP;
+ else if (oflags & O_APPEND)
fp->_flags |= __SAPP;
fp->_file = fd;
fp->_cookie = fp;
diff --git a/lib/libc/stdio/findfp.c b/lib/libc/stdio/findfp.c
index 0eabe82..b8bb5af 100644
--- a/lib/libc/stdio/findfp.c
+++ b/lib/libc/stdio/findfp.c
@@ -155,6 +155,7 @@ found:
/* fp->_fl_mutex = NULL; */ /* once set always set (reused) */
fp->_orientation = 0;
memset(&fp->_mbstate, 0, sizeof(mbstate_t));
+ fp->_flags2 = 0;
return (fp);
}
diff --git a/lib/libc/stdio/fmemopen.c b/lib/libc/stdio/fmemopen.c
index ebd3596..bcf187d 100644
--- a/lib/libc/stdio/fmemopen.c
+++ b/lib/libc/stdio/fmemopen.c
@@ -149,6 +149,9 @@ fmemopen(void * __restrict buf, size_t size, const char * __restrict mode)
return (NULL);
}
+ if (mode[0] == 'a')
+ f->_flags |= __SAPP;
+
/*
* Turn off buffering, so a write past the end of the buffer
* correctly returns a short object count.
diff --git a/lib/libc/stdio/fopen.c b/lib/libc/stdio/fopen.c
index b08e336..9ab61ba 100644
--- a/lib/libc/stdio/fopen.c
+++ b/lib/libc/stdio/fopen.c
@@ -91,7 +91,9 @@ fopen(const char * __restrict file, const char * __restrict mode)
* we can do about this. (We could set __SAPP and check in
* fseek and ftell.)
*/
- if (oflags & O_APPEND)
+ if (oflags & O_APPEND) {
+ fp->_flags2 |= __S2OAP;
(void)_sseek(fp, (fpos_t)0, SEEK_END);
+ }
return (fp);
}
diff --git a/lib/libc/stdio/freopen.c b/lib/libc/stdio/freopen.c
index 4dcd50f..e0104c8 100644
--- a/lib/libc/stdio/freopen.c
+++ b/lib/libc/stdio/freopen.c
@@ -187,6 +187,7 @@ finish:
fp->_lb._size = 0;
fp->_orientation = 0;
memset(&fp->_mbstate, 0, sizeof(mbstate_t));
+ fp->_flags2 = 0;
if (f < 0) { /* did not get it after all */
if (isopen)
@@ -240,8 +241,10 @@ finish:
* we can do about this. (We could set __SAPP and check in
* fseek and ftell.)
*/
- if (oflags & O_APPEND)
+ if (oflags & O_APPEND) {
+ fp->_flags2 |= __S2OAP;
(void) _sseek(fp, (fpos_t)0, SEEK_END);
+ }
FUNLOCKFILE(fp);
return (fp);
}
diff --git a/lib/libc/stdio/ftell.c b/lib/libc/stdio/ftell.c
index 745d500..152617f 100644
--- a/lib/libc/stdio/ftell.c
+++ b/lib/libc/stdio/ftell.c
@@ -88,7 +88,6 @@ _ftello(FILE *fp, fpos_t *offset)
{
fpos_t pos;
size_t n;
- int dflags;
if (fp->_seek == NULL) {
errno = ESPIPE; /* historic practice */
@@ -119,29 +118,33 @@ _ftello(FILE *fp, fpos_t *offset)
}
if (HASUB(fp))
pos -= fp->_r; /* Can be negative at this point. */
- } else if ((fp->_flags & __SWR) && fp->_p != NULL) {
- dflags = 0;
- if (fp->_flags & __SAPP)
- dflags = O_APPEND;
- else if (fp->_file != -1 &&
- (dflags = _fcntl(fp->_file, F_GETFL)) < 0)
- return (1);
- if ((dflags & O_APPEND) &&
- (pos = _sseek(fp, (fpos_t)0, SEEK_END)) == -1) {
- if ((fp->_flags & __SOPT) || __sflush(fp) ||
- (pos = _sseek(fp, (fpos_t)0, SEEK_CUR)) == -1)
- return (1);
- else {
- *offset = pos;
- return (0);
- }
- }
+ } else if ((fp->_flags & __SWR) && fp->_p != NULL &&
+ (n = fp->_p - fp->_bf._base) > 0) {
/*
* Writing. Any buffered characters cause the
* position to be greater than that in the
* underlying object.
*/
- n = fp->_p - fp->_bf._base;
+ if ((fp->_flags & __SAPP) || (fp->_flags2 & __S2OAP)) {
+ int serrno = errno;
+
+ errno = 0;
+ if ((pos = _sseek(fp, (fpos_t)0, SEEK_END)) == -1) {
+ if (errno == ESPIPE ||
+ (fp->_flags & __SOPT) || __sflush(fp) ||
+ (pos =
+ _sseek(fp, (fpos_t)0, SEEK_CUR)) == -1)
+ return (1);
+ else {
+ errno = serrno;
+ *offset = pos;
+ return (0);
+ }
+ }
+ errno = serrno;
+ /* fp->_p can be changed in _sseek(), recalculate. */
+ n = fp->_p - fp->_bf._base;
+ }
if (pos > OFF_MAX - n) {
errno = EOVERFLOW;
return (1);
diff --git a/lib/libc/stdio/stdio.c b/lib/libc/stdio/stdio.c
index 44ee0ab..5d6fb9a 100644
--- a/lib/libc/stdio/stdio.c
+++ b/lib/libc/stdio/stdio.c
@@ -117,7 +117,7 @@ _swrite(FILE *fp, char const *buf, int n)
ret = (*fp->_write)(fp->_cookie, buf, n);
/* __SOFF removed even on success in case O_APPEND mode is set. */
if (ret >= 0) {
- if ((fp->_flags & (__SAPP|__SOFF)) == (__SAPP|__SOFF) &&
+ if ((fp->_flags & __SOFF) && !(fp->_flags2 & __S2OAP) &&
fp->_offset <= OFF_MAX - ret)
fp->_offset += ret;
else
diff --git a/lib/libc/sys/cpuset.2 b/lib/libc/sys/cpuset.2
index 8349566..d16b3ff 100644
--- a/lib/libc/sys/cpuset.2
+++ b/lib/libc/sys/cpuset.2
@@ -25,7 +25,7 @@
.\"
.\" $FreeBSD$
.\"
-.Dd January 8, 2015
+.Dd October 20, 2015
.Dt CPUSET 2
.Os
.Sh NAME
@@ -219,7 +219,8 @@ for allocation.
.Xr cpuset_getaffinity 2 ,
.Xr cpuset_setaffinity 2 ,
.Xr pthread_affinity_np 3 ,
-.Xr pthread_attr_affinity_np 3
+.Xr pthread_attr_affinity_np 3 ,
+.Xr cpuset 9
.Sh HISTORY
The
.Nm
diff --git a/lib/libc/sys/cpuset_getaffinity.2 b/lib/libc/sys/cpuset_getaffinity.2
index 810a03c..7032d2e 100644
--- a/lib/libc/sys/cpuset_getaffinity.2
+++ b/lib/libc/sys/cpuset_getaffinity.2
@@ -25,7 +25,7 @@
.\"
.\" $FreeBSD$
.\"
-.Dd September 10, 2010
+.Dd October 20, 2015
.Dt CPUSET_GETAFFINITY 2
.Os
.Sh NAME
@@ -153,7 +153,8 @@ operation.
.Xr cpuset_getid 2 ,
.Xr cpuset_setid 2 ,
.Xr pthread_affinity_np 3 ,
-.Xr pthread_attr_affinity_np 3
+.Xr pthread_attr_affinity_np 3 ,
+.Xr cpuset 9
.Sh HISTORY
The
.Nm
diff --git a/lib/libc/sys/ptrace.2 b/lib/libc/sys/ptrace.2
index 5c93438..a94e314 100644
--- a/lib/libc/sys/ptrace.2
+++ b/lib/libc/sys/ptrace.2
@@ -2,7 +2,7 @@
.\" $NetBSD: ptrace.2,v 1.2 1995/02/27 12:35:37 cgd Exp $
.\"
.\" This file is in the public domain.
-.Dd October 6, 2015
+.Dd October 20, 2015
.Dt PTRACE 2
.Os
.Sh NAME
@@ -306,7 +306,7 @@ struct ptrace_lwpinfo {
sigset_t pl_siglist;
siginfo_t pl_siginfo;
char pl_tdname[MAXCOMLEN + 1];
- int pl_child_pid;
+ pid_t pl_child_pid;
u_int pl_syscall_code;
u_int pl_syscall_narg;
};
diff --git a/lib/libc/tests/Makefile b/lib/libc/tests/Makefile
index 2e97151..e6ddc15 100644
--- a/lib/libc/tests/Makefile
+++ b/lib/libc/tests/Makefile
@@ -11,6 +11,7 @@ TESTS_SUBDIRS+= hash
TESTS_SUBDIRS+= inet
TESTS_SUBDIRS+= net
TESTS_SUBDIRS+= regex
+TESTS_SUBDIRS+= rpc
TESTS_SUBDIRS+= stdio
TESTS_SUBDIRS+= stdlib
TESTS_SUBDIRS+= string
diff --git a/lib/libc/tests/ssp/Makefile b/lib/libc/tests/ssp/Makefile
index ec7a82a..dff1578 100644
--- a/lib/libc/tests/ssp/Makefile
+++ b/lib/libc/tests/ssp/Makefile
@@ -26,9 +26,19 @@ PROGS+= h_memmove
PROGS+= h_memset
# This testcase doesn't run properly when not compiled with -fsantize=bounds
# with clang, which is currently contingent on a compiler_rt update
-.if ${COMPILER_TYPE} == "clang" && ${COMPILER_VERSION} < 30500
+#
+# XXX: the h_raw/h_read testcases don't cause a SIGABRT with in-tree gcc right
+# now on amd64 when it trips the stack bounds specified in t_ssp.sh . This
+# probably needs to be fixed as it's currently hardcoded.
+#
+# sanitizer is not tested or supported for ARM right now. sbruno
+.if ${MACHINE_CPUARCH} == "i386" || ${MACHINE_CPUARCH} == "amd64"
+.if ${COMPILER_TYPE} == "clang"
+.if ${COMPILER_VERSION} < 30500 || 30700 <= ${COMPILER_VERSION}
PROGS+= h_raw
.endif
+.endif
+.endif
PROGS+= h_read
PROGS+= h_readlink
PROGS+= h_snprintf
diff --git a/lib/libdpv/dpv.3 b/lib/libdpv/dpv.3
index d16e649..8581279 100644
--- a/lib/libdpv/dpv.3
+++ b/lib/libdpv/dpv.3
@@ -1,4 +1,4 @@
-.\" Copyright (c) 2013-2014 Devin Teske
+.\" Copyright (c) 2013-2015 Devin Teske
.\" All rights reserved.
.\"
.\" Redistribution and use in source and binary forms, with or without
@@ -24,7 +24,7 @@
.\"
.\" $FreeBSD$
.\"
-.Dd Oct 24, 2014
+.Dd Oct 22, 2015
.Dt DPV 3
.Os
.Sh NAME
@@ -441,7 +441,7 @@ or desired values.
The
.Nm
library first appeared in
-.Fx 11.0 .
+.Fx 10.2 .
.Sh AUTHORS
.An Devin Teske Aq dteske@FreeBSD.org
.Sh BUGS
diff --git a/lib/libedit/vi.c b/lib/libedit/vi.c
index dfd17e3..0a426fd 100644
--- a/lib/libedit/vi.c
+++ b/lib/libedit/vi.c
@@ -1,4 +1,4 @@
-/* $NetBSD: vi.c,v 1.45 2014/06/18 18:12:28 christos Exp $ */
+/* $NetBSD: vi.c,v 1.47 2015/10/21 21:45:30 christos Exp $ */
/*-
* Copyright (c) 1992, 1993
@@ -42,7 +42,7 @@
#if 0
static char sccsid[] = "@(#)vi.c 8.1 (Berkeley) 6/4/93";
#else
-__RCSID("$NetBSD: vi.c,v 1.45 2014/06/18 18:12:28 christos Exp $");
+__RCSID("$NetBSD: vi.c,v 1.47 2015/10/21 21:45:30 christos Exp $");
#endif
#endif /* not lint && not SCCSID */
#include <sys/cdefs.h>
@@ -1040,12 +1040,12 @@ vi_histedit(EditLine *el, Int c __attribute__((__unused__)))
while (waitpid(pid, &status, 0) != pid)
continue;
lseek(fd, (off_t)0, SEEK_SET);
- st = read(fd, cp, TMP_BUFSIZ);
+ st = read(fd, cp, TMP_BUFSIZ - 1);
if (st > 0) {
- len = (size_t)(el->el_line.lastchar -
- el->el_line.buffer);
+ cp[st] = '\0';
+ len = (size_t)(el->el_line.limit - el->el_line.buffer);
len = ct_mbstowcs(el->el_line.buffer, cp, len);
- if (len > 0 && el->el_line.buffer[len -1] == '\n')
+ if (len > 0 && el->el_line.buffer[len - 1] == '\n')
--len;
}
else
diff --git a/lib/libfigpar/figpar.3 b/lib/libfigpar/figpar.3
index 549808e..8fd49d3 100644
--- a/lib/libfigpar/figpar.3
+++ b/lib/libfigpar/figpar.3
@@ -1,4 +1,4 @@
-.\" Copyright (c) 2013-2014 Devin Teske <dteske@FreeBSD.org>
+.\" Copyright (c) 2013-2015 Devin Teske <dteske@FreeBSD.org>
.\" All rights reserved.
.\"
.\" Redistribution and use in source and binary forms, with or without
@@ -24,7 +24,7 @@
.\"
.\" $FreeBSD$
.\"
-.Dd Oct 24, 2014
+.Dd Oct 22, 2015
.Dt FIGPAR 3
.Os
.Sh NAME
@@ -243,7 +243,7 @@ Convert a string to lower case.
The
.Nm
library first appeared in
-.Fx 11.0 .
+.Fx 10.2 .
.Sh AUTHORS
.An Devin Teske Aq dteske@FreeBSD.org
.Sh BUGS
diff --git a/lib/libgpib/Makefile b/lib/libgpib/Makefile
deleted file mode 100644
index 80e890bd..0000000
--- a/lib/libgpib/Makefile
+++ /dev/null
@@ -1,28 +0,0 @@
-# $FreeBSD$
-
-LIB= gpib
-SHLIB_MAJOR= 3
-INCS= gpib.h
-INCSDIR= ${INCLUDEDIR}/gpib
-SRCS= ibfoo.c
-
-MAN= gpib.3
-
-# MLINKS are only provided for functions that are actually
-# implemented; update this if missing pieces have been filled in.
-MLINKS+= gpib.3 ibclr.3
-MLINKS+= gpib.3 ibdev.3
-MLINKS+= gpib.3 ibdma.3
-MLINKS+= gpib.3 ibeos.3
-MLINKS+= gpib.3 ibeot.3
-MLINKS+= gpib.3 ibloc.3
-MLINKS+= gpib.3 ibonl.3
-MLINKS+= gpib.3 ibpad.3
-MLINKS+= gpib.3 ibrd.3
-MLINKS+= gpib.3 ibsad.3
-MLINKS+= gpib.3 ibsic.3
-MLINKS+= gpib.3 ibtmo.3
-MLINKS+= gpib.3 ibtrg.3
-MLINKS+= gpib.3 ibwrt.3
-
-.include <bsd.lib.mk>
diff --git a/lib/libgpib/gpib.3 b/lib/libgpib/gpib.3
deleted file mode 100644
index 01f778b..0000000
--- a/lib/libgpib/gpib.3
+++ /dev/null
@@ -1,741 +0,0 @@
-.\" Copyright (c) 2010, Joerg Wunsch
-.\" All rights reserved.
-.\"
-.\" Redistribution and use in source and binary forms, with or without
-.\" modification, are permitted provided that the following conditions
-.\" are met:
-.\" 1. Redistributions of source code must retain the above copyright
-.\" notice, this list of conditions and the following disclaimer.
-.\" 2. Redistributions in binary form must reproduce the above copyright
-.\" notice, this list of conditions and the following disclaimer in the
-.\" documentation and/or other materials provided with the distribution.
-.\"
-.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
-.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
-.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
-.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-.\" SUCH DAMAGE.
-.\"
-.\" $FreeBSD$
-.\"
-.Dd February 1, 2010
-.Dt GPIB 3
-.Os
-.Sh NAME
-.\" .Nm ibask ,
-.\" .Nm ibbna ,
-.\" .Nm ibcac ,
-.Nm ibclr ,
-.\" .Nm ibcmd ,
-.\" .Nm ibcmda ,
-.\" .Nm ibconfig ,
-.Nm ibdev ,
-.\" .Nm ibdiag ,
-.Nm ibdma ,
-.Nm ibeos ,
-.Nm ibeot ,
-.\" .Nm ibevent ,
-.\" .Nm ibfind ,
-.\" .Nm ibgts ,
-.\" .Nm ibist ,
-.\" .Nm iblines ,
-.\" .Nm ibllo ,
-.\" .Nm ibln ,
-.Nm ibloc ,
-.Nm ibonl ,
-.Nm ibpad ,
-.\" .Nm ibpct ,
-.\" .Nm ibpoke ,
-.\" .Nm ibppc ,
-.Nm ibrd ,
-.\" .Nm ibrda ,
-.\" .Nm ibrdf ,
-.\" .Nm ibrdkey ,
-.\" .Nm ibrpp ,
-.\" .Nm ibrsc ,
-.\" .Nm ibrsp ,
-.\" .Nm ibrsv ,
-.Nm ibsad ,
-.\" .Nm ibsgnl ,
-.Nm ibsic ,
-.\" .Nm ibsre ,
-.\" .Nm ibsrq ,
-.\" .Nm ibstop ,
-.Nm ibtmo ,
-.\" .Nm ibtrap ,
-.Nm ibtrg ,
-.\" .Nm ibwait ,
-.Nm ibwrt
-.\" .Nm ibwrta ,
-.\" .Nm ibwrtf ,
-.\" .Nm ibwrtkey ,
-.\" .Nm ibxtrc
-.Nd "GPIB library"
-.Sh LIBRARY
-.Lb libgpib
-.Sh SYNOPSIS
-.In gpib.h
-.Pp
-.Dv extern int ibcnt ,
-.Dv iberr ,
-.Dv ibsta ;
-.Pp
-.Ft int
-.Fn ibask "int handle" "int option" "int *retval"
-.Ft int
-.Fn ibbna "int handle" "char *bdname"
-.Ft int
-.Fn ibcac "int handle" "int v"
-.Ft int
-.Fn ibclr "int handle"
-.Ft int
-.Fn ibcmd "int handle" "void *buffer" "long cnt"
-.Ft int
-.Fn ibcmda "int handle" "void *buffer" "long cnt"
-.Ft int
-.Fn ibconfig "int handle" "int option" "int value"
-.Ft int
-.Fn ibdev "int boardID" "int pad" "int sad" "int tmo" "int eot" "int eos"
-.Ft int
-.Fn ibdiag "int handle" "void *buffer" "long cnt"
-.Ft int
-.Fn ibdma "int handle" "int v"
-.Ft int
-.Fn ibeos "int handle" "int eos"
-.Ft int
-.Fn ibeot "int handle" "int eot"
-.Ft int
-.Fn ibevent "int handle" "short *event"
-.Ft int
-.Fn ibfind "char *bdname"
-.Ft int
-.Fn ibgts "int handle" "int v"
-.Ft int
-.Fn ibist "int handle" "int v"
-.Ft int
-.Fn iblines "int handle" "short *lines"
-.Ft int
-.Fn ibllo "int handle"
-.Ft int
-.Fn ibln "int handle" "int padval" "int sadval" "short *listenflag"
-.Ft int
-.Fn ibloc "int handle"
-.Ft int
-.Fn ibonl "int handle" "int v"
-.Ft int
-.Fn ibpad "int handle" "int pad"
-.Ft int
-.Fn ibpct "int handle"
-.Ft int
-.Fn ibpoke "int handle" "int option" "int value"
-.Ft int
-.Fn ibppc "int handle" "int v"
-.Ft int
-.Fn ibrd "int handle" "void *buffer" "long cnt"
-.Ft int
-.Fn ibrda "int handle" "void *buffer" "long cnt"
-.Ft int
-.Fn ibrdf "int handle" "char *flname"
-.Ft int
-.Fn ibrdkey "int handle" "void *buffer" "int cnt"
-.Ft int
-.Fn ibrpp "int handle" "char *ppr"
-.Ft int
-.Fn ibrsc "int handle" "int v"
-.Ft int
-.Fn ibrsp "int handle" "char *spr"
-.Ft int
-.Fn ibrsv "int handle" "int v"
-.Ft int
-.Fn ibsad "int handle" "int sad"
-.Ft int
-.Fn ibsgnl "int handle" "int v"
-.Ft int
-.Fn ibsic "int handle"
-.Ft int
-.Fn ibsre "int handle" "int v"
-.Ft int
-.Fn ibsrq "(*func) void)"
-.Ft int
-.Fn ibstop "int handle"
-.Ft int
-.Fn ibtmo "int handle" "int tmo"
-.Ft int
-.Fn ibtrap "int mask" "int mode"
-.Ft int
-.Fn ibtrg "int handle"
-.Ft int
-.Fn ibwait "int handle" "int mask"
-.Ft int
-.Fn ibwrt "int handle" "const void *buffer" "long cnt"
-.Ft int
-.Fn ibwrta "int handle" "const void *buffer" "long cnt"
-.Ft int
-.Fn ibwrtf "int handle" "const char *flname"
-.Ft int
-.Fn ibwrtkey "int handle" "const void *buffer" "int cnt"
-.Ft int
-.Fn ibxtrc "int handle" "void *buffer" "long cnt"
-.Sh DESCRIPTION
-The
-.Nm
-library provides access to the
-.Xr gpib 4
-kernel devices.
-.Ss Variable Description
-The variable
-.Dv ibcnt
-contains the number of bytes transferred in the most recent call to
-.Fn ibcmd ,
-.Fn ibrd ,
-or
-.Fn ibwrt .
-.Pp
-The name
-.Dv ibcntl
-is an alias for
-.Dv ibcnt ,
-provided for backwards compatibility.
-.Pp
-The variable
-.Dv iberr
-provides an error code for the most recent library call.
-The possible error codes are:
-.Pp
-.Bl -tag -width 6n -offset indent -compact
-.It EDVR
-System error
-.It ECIC
-Not Active Controller
-.It ENOL
-Nobody listening
-.It EADR
-Controller not addressed
-.It EARG
-Invalid argument
-.It ESAC
-Not System Controller
-.It EABO
-I/O Aborted/Time out
-.It ENEB
-No such controller
-.It EOIP
-Async I/O in progress
-.It ECAP
-No such capability
-.It EFSO
-File system error
-.It EBUS
-Command byte xfer error
-.It ESTB
-Serial poll status byte lost
-.It ESRQ
-SRQ line stuck
-.It ETAB
-Table problem
-.El
-.Pp
-The variable
-.Dv ibsta
-contains the controller status.
-This is an ORed status value, with the following individual bit names:
-.Pp
-.Bl -tag -width 6n -offset indent -compact
-.It ERR
-Error
-.It TIMO
-Timeout
-.It END
-EOI/EOS
-.It SRQI
-SRQ
-.It RQS
-Device requests service
-.It SPOLL
-Serial Poll
-.It EVENT
-Event occurred
-.It CMPL
-I/O complete
-.It LOK
-Lockout
-.It REM
-Remote
-.It CIC
-CIC
-.It ATN
-ATN
-.It TACS
-Talker
-.It LACS
-Listener
-.It DTAS
-Device trigger status
-.It DCAS
-Device clear state
-.El
-.Ss Function Description
-The function
-.Fn ibdev
-is used to open the GPIB device, and establish the parameters to
-communicate with a particular bus device. The device is selected
-by its primary address
-.Fa pad ,
-a numerical value between 0 and 30, possibly additionally by its
-secondary address
-.Fa sad ,
-a numerical value between 96 and 126, or 0 to not use secondary
-addressing.
-The
-.Fa tmo
-value specifies the timeout to use when communicating with the device.
-This can be any of the constants
-.Dv TNONE ,
-.Dv T10us ,
-.Dv T30us ,
-.Dv T100us ,
-.Dv T300us ,
-.Dv T1ms ,
-.Dv T3ms ,
-.Dv T10ms ,
-.Dv T30ms ,
-.Dv T100ms ,
-.Dv T300ms ,
-.Dv T1s ,
-.Dv T3s ,
-.Dv T10s ,
-.Dv T30s ,
-.Dv T100s ,
-.Dv T300s ,
-or
-.Dv T1000s .
-The boolean parameter
-.Fa eot
-specifies whether the bus signal
-.Li EOI
-(end-or-identify) should be asserted when sending the last byte of a
-message to the device.
-Finally, the
-.Fa eos
-parameter determines whether any special character should be used to
-identify the end of a device message when transferring messages on the
-bus.
-The lower 8 bits of
-.Fa eos
-are interpreted as an end-of-string character,
-.Li EOS .
-This character can be ORed with the following values:
-.Pp
-.Bl -tag -width 6n -compact -offset indent
-.It Dv REOS
-When receiving a message byte on the bus that matches the
-.Li EOS
-character, treat it as if the
-.Li EOI
-signal were asserted, and stop receiving.
-.It Dv XEOS
-When transmitting a message byte on the bus that matches the
-.Li EOS
-character, assert the
-.Li EOI
-bus signal by the same time, and stop sending.
-.It Dv BIN
-If set, include all 8 bits of the
-.Li EOS
-character in the comparison; if unset, compare only 7 bit ASCII
-values.
-.El
-.Pp
-Passing 0 as
-.Fa eos
-will turn off any special character treatment, allowing for a fully
-8-bit transparent communications channel to the device.
-.Pp
-The function
-.Fn ibfind
-is meant to find the
-.Em board index
-of a board identified by the name
-.Fa bdname .
-.Em This function is currently not implemented.
-.Pp
-All remaining functions take the handle returned by calling
-.Fn ibdev
-as their first argument
-.Fa handle .
-.Pp
-The function
-.Fn ibask
-is used to query configuration values that have been set with
-.Fn ibconfig .
-.Em This function is currently not implemented.
-.Pp
-The function
-.Fn ibbna
-is meant to change the access board for the given device to
-a new one, named
-.Fa bdname .
-.Em This function is currently not implemented.
-.Pp
-The function
-.Fn ibcac
-is used to become the active controller on the bus, by asserting the
-.Li ATN
-signal line.
-.Em This function is currently not implemented.
-.Pp
-The function
-.Fn ibclr
-is used to transmit a
-.Em Selected Device Clear
-command to the device.
-.Pp
-The function
-.Fn ibcmd
-is used to directly write
-.Fa cnt
-GPIB command bytes from a buffer starting at
-.Fa buffer
-to the device.
-.Em This function is currently not implemented.
-.Pp
-The function
-.Fn ibcmda
-does the same as
-.Fn ibcmd
-except it operates asynchronously, so it returns to the caller
-immediately.
-.Em This function is currently not implemented.
-.Pp
-The function
-.Fn ibconfig
-is used to set certain configuration parameters.
-.Em This function is currently not implemented.
-.Pp
-The function
-.Fn ibdiag
-is obsolete, and not implemented.
-.Pp
-The function
-.Fn ibdma
-is used to enable or disable DMA transfers.
-Parameter
-.Fa v
-is a boolean parameter indicating DMA transfers are to be used.
-Depending on the hardware and operating system configuration, DMA
-transfers might not be available for a particular access board.
-.Pp
-The function
-.Fn ibeos
-configures the end-of-string character.
-See
-.Fn ibdev
-for an explanation.
-.Pp
-The function
-.Fn ibeot
-configures the assertion of the
-.Li EOI
-signal line when transmitting the last byte of a message; see
-.Fn ibdev
-for an explanation.
-.Pp
-The function
-.Fn ibevent
-is used to obtain an event from the board's event queue.
-.Em This function is currently not implemented.
-.Pp
-The function
-.Fn ibgts
-makes the current controller the standby controller, by deasserting
-the
-.Li ATN
-signal line.
-.Em This function is currently not implemented.
-.Pp
-The function
-.Fn ibist
-sets the individual status bits of the controller to the value
-.Fa v .
-.Em This function is currently not implemented.
-.Pp
-The function
-.Fn iblines
-returns the status of the control and handshake bus lines into the
-area pointed to by
-.Fa lines .
-.Em This function is currently not implemented.
-.Pp
-The function
-.Fn ibllo
-is obsolete, and not implemented.
-.Pp
-The function
-.Fn ibln
-checks for a listener at the primary address
-.Fa padval
-and the optional secondary address
-.Fa sadval .
-If a listener was found, the value pointed to by
-.Fa listenflag
-will be set to a non-zero value.
-.Em This function is currently not implemented.
-.Pp
-The function
-.Fn ibloc
-turns the device into local mode.
-.Pp
-The function
-.Fn ibonl
-is used to close or reinitialize a device handle.
-If parameter
-.Fa v
-is passed as zero, the handle will be closed, and cannot be used
-again.
-If it is passed as a non-zero value, all parameters of the handle
-will be returned to their defaults;
-.Em this functionality is currently unsupported.
-.Pp
-The function
-.Fn ibpad
-is used to change the primary address of the device being communicated
-with to
-.Fa pad .
-See
-.Fn ibdev
-for an explanation.
-.Pp
-The function
-.Fn ibpct
-is used to make the device associated with the handle the
-controller-in-charge.
-.Em This function is currently not implemented.
-.Pp
-The function
-.Fn ibpoke
-is obsolete, and not implemented.
-.Pp
-The function
-.Fn ibppc
-is used to configure the parallel poll response to
-.Fa v .
-.Em This function is currently not implemented.
-.Pp
-The function
-.Fn ibrd
-is used to receive
-.Fa cnt
-bytes from the device, and store it to the address passed as
-.Fa buffer .
-.Pp
-The function
-.Fn ibrda
-behaves similar to
-.Fn ibrd
-except it operates asynchronously, and returns immediately to the
-caller.
-.Em This function is currently not implemented.
-.Pp
-The function
-.Fn ibrdf
-read data from the device, and appends it to the file with the name
-.Fa flname .
-.Em This function is currently not implemented.
-.Pp
-The function
-.Fn ibrdkey
-is obsolete, and not implemented.
-.Pp
-The function
-.Fn ibrpp
-performs a parallel poll, and stores the result at the location
-pointed to by
-.Fa ppr .
-.Em This function is currently not implemented.
-.Pp
-The function
-.Fn ibrsc
-makes the board specified by the handle the
-.Em system controller
-if the argument
-.Fa v
-is non-zero.
-.Em This function is currently not implemented.
-.Pp
-The function
-.Fn ibrsp
-conducts a serial poll, and stores the result in the byte pointed
-to by
-.Fa spr .
-.Em This function is currently not implemented.
-.Pp
-The function
-.Fn ibrsv
-sets the serial poll response of the board to
-.Fa v ,
-possibly requesting service from the controller if the SRQ bit (0x40)
-is set.
-.Em This function is currently not implemented.
-.Pp
-The function
-.Fn ibsad
-changes the secondary address of the device being communicated with to
-.Fa sad .
-See
-.Fn ibdev
-for an explanation.
-.Pp
-The function
-.Fn ibsgnl
-is obsolete, and not implemented.
-.Pp
-The function
-.Fn ibsic
-asserts the
-.Em Interface Clear (IFC)
-signal line on the bus for at least 100 microseconds.
-This will make all devices attached to the bus to unlisten and untalk.
-This function should only be executed on the system controller.
-.Pp
-The function
-.Fn ibsre
-asserts the
-.Em Remote Enable (REN)
-signal line on the bus if argument
-.Fa v
-is non-zero, or deasserts it otherwise.
-.Em This function is currently not implemented.
-.Pp
-The function
-.Fn ibsrq
-is obsolete, and not implemented.
-.Pp
-The function
-.Fn ibstop
-stops or aborts any asynchronous I/O operation.
-.Em This function is currently not implemented.
-.Pp
-The function
-.Fn ibtmo
-reconfigures the communication timeout.
-See
-.Fn ibdev
-for an explanation.
-.Pp
-The function
-.Fn ibtrap
-is obsolete, and not implemented.
-.Pp
-The function
-.Fn ibtrg
-sends a
-.Em Group Execute Trigger (GET)
-command to the device.
-.Pp
-The function
-.Fn ibwait
-waits for a status condition as specified by
-.Fa mask .
-If
-.Fa mask
-is given as zero, it returns immediately.
-.Em This function is currently not implemented.
-.Pp
-The function
-.Fn ibwrt
-is used to send
-.Fa cnt
-bytes to the device, starting at the address pointed to by
-.Fa buffer .
-.Pp
-The function
-.Fn ibwrta
-performs the same operation as
-.Fn ibwrt
-in an asynchronous way, returning immediately to the caller.
-.Em This function is currently not implemented.
-.Pp
-The function
-.Fn ibwrtf
-opens the file named by
-.Fa flname ,
-and sends its contents to the device.
-.Em This function is currently not implemented.
-.Pp
-The function
-.Fn ibwrtkey
-is obsolete, and not implemented.
-.Pp
-The function
-.Fn ibxtrc
-is obsolete, and not implemented.
-.Sh RETURN VALUES
-The function
-.Fn ibdev
-returns a handle to be used for the remaining functions.
-Upon failure, -1 is returned.
-.Pp
-All other functions return the value of the variable
-.Dv ibsta .
-.Sh DIAGNOSTICS
-None.
-.Sh COMPATIBILITY
-The
-.Nm
-library tries to be compatible with the Linux GPIB library,
-which in turn appears to be compatible with the GPIB library
-shipped by National Instruments.
-.Sh ERRORS
-Errors in the functions above might set
-.Dv errno
-to one of these values:
-.Bl -tag -width Er
-.It Bq Er ENOENT
-No such file or directory.
-.It Bq Er EIO
-Input/output error.
-.It Bq Er ENXIO
-Device not configured.
-.It Bq Er E2BIG
-Argument list too long.
-.It Bq Er ENOMEM
-Cannot allocate memory.
-.It Bq Er EACCES
-Permission denied.
-.It Bq Er EFAULT
-Bad address.
-.It Bq Er EBUSY
-Device busy.
-.It Bq Er EINVAL
-Invalid argument.
-.It Bq Er ENFILE
-Too many open files in system.
-.It Bq Er EMFILE
-Too many open files.
-.It Bq Er EOPNOTSUPP
-Operation not supported.
-.El
-.Sh SEE ALSO
-.Xr gpib 4
-.Sh HISTORY
-The
-.Nm
-library was written by
-.An Poul-Henning Kamp
-and first appeared in
-.Fx 5.4 .
-.Sh AUTHORS
-This manual page was written by
-.An J\(:org Wunsch .
-.Sh BUGS
-Currently, the library can only handle a single
-.Xr gpib 4
-device with instance number 0.
-.Pp
-Many functions are currently not implemented, see above for details.
diff --git a/lib/libgpib/ibfoo.c b/lib/libgpib/ibfoo.c
deleted file mode 100644
index e88563a..0000000
--- a/lib/libgpib/ibfoo.c
+++ /dev/null
@@ -1,647 +0,0 @@
-/*-
- * Copyright (c) 2005 Poul-Henning Kamp
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * This file merely redirects to the file in <dev/ieee488/ugpib.h>
- *
- * $FreeBSD$
- */
-
-#include <stdio.h>
-#include <errno.h>
-#include <err.h>
-#include <sys/types.h>
-#include <fcntl.h>
-
-#include <dev/ieee488/ugpib.h>
-#include <dev/ieee488/ibfoo_int.h>
-
-int ibcnt, iberr, ibsta;
-
-static int fd = -1;
-
-static int
-__ibsubmit(struct ibarg *ap)
-{
- int i;
-
- if (fd < 0)
- fd = open("/dev/gpib0ib", O_RDWR);
- if (fd < 0)
- err(1, "Could not open /dev/gpib0ib");
- i = ioctl(fd, GPIB_IBFOO, ap);
- if (i)
- err(1, "GPIB_IBFOO(%d, 0x%x) failed", ap->__ident, ap->__field);
- ibcnt = ap->__ibcnt;
- iberr = ap->__iberr;
- ibsta = ap->__ibsta;
- return (ap->__retval);
-}
-
-int
-ibask (int handle, int option, int * retval)
-{
- struct ibarg io;
-
- io.__ident = __ID_IBASK;
- io.handle = handle;
- io.option = option;
- io.retval = retval;
- io.__field = __F_HANDLE | __F_OPTION | __F_RETVAL;
- return (__ibsubmit(&io));
-}
-
-int
-ibbna (int handle, char * bdname)
-{
- struct ibarg io;
-
- io.__ident = __ID_IBBNA;
- io.handle = handle;
- io.bdname = bdname;
- io.__field = __F_HANDLE | __F_BDNAME;
- return (__ibsubmit(&io));
-}
-
-int
-ibcac (int handle, int v)
-{
- struct ibarg io;
-
- io.__ident = __ID_IBCAC;
- io.handle = handle;
- io.v = v;
- io.__field = __F_HANDLE | __F_V;
- return (__ibsubmit(&io));
-}
-
-int
-ibclr (int handle)
-{
- struct ibarg io;
-
- io.__ident = __ID_IBCLR;
- io.handle = handle;
- io.__field = __F_HANDLE;
- return (__ibsubmit(&io));
-}
-
-int
-ibcmd (int handle, void * buffer, long cnt)
-{
- struct ibarg io;
-
- io.__ident = __ID_IBCMD;
- io.handle = handle;
- io.buffer = buffer;
- io.cnt = cnt;
- io.__field = __F_HANDLE | __F_BUFFER | __F_CNT;
- return (__ibsubmit(&io));
-}
-
-int
-ibcmda (int handle, void * buffer, long cnt)
-{
- struct ibarg io;
-
- io.__ident = __ID_IBCMDA;
- io.handle = handle;
- io.buffer = buffer;
- io.cnt = cnt;
- io.__field = __F_HANDLE | __F_BUFFER | __F_CNT;
- return (__ibsubmit(&io));
-}
-
-int
-ibconfig (int handle, int option, int value)
-{
- struct ibarg io;
-
- io.__ident = __ID_IBCONFIG;
- io.handle = handle;
- io.option = option;
- io.value = value;
- io.__field = __F_HANDLE | __F_OPTION | __F_VALUE;
- return (__ibsubmit(&io));
-}
-
-int
-ibdev (int boardID, int pad, int sad, int tmo, int eot, int eos)
-{
- struct ibarg io;
-
- io.__ident = __ID_IBDEV;
- io.boardID = boardID;
- io.pad = pad;
- io.sad = sad;
- io.tmo = tmo;
- io.eot = eot;
- io.eos = eos;
- io.__field = __F_BOARDID | __F_PAD | __F_SAD | __F_TMO | __F_EOT | __F_EOS;
- return (__ibsubmit(&io));
-}
-
-int
-ibdiag (int handle, void * buffer, long cnt)
-{
- struct ibarg io;
-
- io.__ident = __ID_IBDIAG;
- io.handle = handle;
- io.buffer = buffer;
- io.cnt = cnt;
- io.__field = __F_HANDLE | __F_BUFFER | __F_CNT;
- return (__ibsubmit(&io));
-}
-
-int
-ibdma (int handle, int v)
-{
- struct ibarg io;
-
- io.__ident = __ID_IBDMA;
- io.handle = handle;
- io.v = v;
- io.__field = __F_HANDLE | __F_V;
- return (__ibsubmit(&io));
-}
-
-int
-ibeos (int handle, int eos)
-{
- struct ibarg io;
-
- io.__ident = __ID_IBEOS;
- io.handle = handle;
- io.eos = eos;
- io.__field = __F_HANDLE | __F_EOS;
- return (__ibsubmit(&io));
-}
-
-int
-ibeot (int handle, int eot)
-{
- struct ibarg io;
-
- io.__ident = __ID_IBEOT;
- io.handle = handle;
- io.eot = eot;
- io.__field = __F_HANDLE | __F_EOT;
- return (__ibsubmit(&io));
-}
-
-int
-ibevent (int handle, short * event)
-{
- struct ibarg io;
-
- io.__ident = __ID_IBEVENT;
- io.handle = handle;
- io.event = event;
- io.__field = __F_HANDLE | __F_EVENT;
- return (__ibsubmit(&io));
-}
-
-int
-ibfind (char * bdname)
-{
- struct ibarg io;
-
- io.__ident = __ID_IBFIND;
- io.bdname = bdname;
- io.__field = __F_BDNAME;
- return (__ibsubmit(&io));
-}
-
-int
-ibgts (int handle, int v)
-{
- struct ibarg io;
-
- io.__ident = __ID_IBGTS;
- io.handle = handle;
- io.v = v;
- io.__field = __F_HANDLE | __F_V;
- return (__ibsubmit(&io));
-}
-
-int
-ibist (int handle, int v)
-{
- struct ibarg io;
-
- io.__ident = __ID_IBIST;
- io.handle = handle;
- io.v = v;
- io.__field = __F_HANDLE | __F_V;
- return (__ibsubmit(&io));
-}
-
-int
-iblines (int handle, short * lines)
-{
- struct ibarg io;
-
- io.__ident = __ID_IBLINES;
- io.handle = handle;
- io.lines = lines;
- io.__field = __F_HANDLE | __F_LINES;
- return (__ibsubmit(&io));
-}
-
-int
-ibllo (int handle)
-{
- struct ibarg io;
-
- io.__ident = __ID_IBLLO;
- io.handle = handle;
- io.__field = __F_HANDLE;
- return (__ibsubmit(&io));
-}
-
-int
-ibln (int handle, int padval, int sadval, short * listenflag)
-{
- struct ibarg io;
-
- io.__ident = __ID_IBLN;
- io.handle = handle;
- io.padval = padval;
- io.sadval = sadval;
- io.listenflag = listenflag;
- io.__field = __F_HANDLE | __F_PADVAL | __F_SADVAL | __F_LISTENFLAG;
- return (__ibsubmit(&io));
-}
-
-int
-ibloc (int handle)
-{
- struct ibarg io;
-
- io.__ident = __ID_IBLOC;
- io.handle = handle;
- io.__field = __F_HANDLE;
- return (__ibsubmit(&io));
-}
-
-int
-ibonl (int handle, int v)
-{
- struct ibarg io;
-
- io.__ident = __ID_IBONL;
- io.handle = handle;
- io.v = v;
- io.__field = __F_HANDLE | __F_V;
- return (__ibsubmit(&io));
-}
-
-int
-ibpad (int handle, int v)
-{
- struct ibarg io;
-
- io.__ident = __ID_IBPAD;
- io.handle = handle;
- io.v = v;
- io.__field = __F_HANDLE | __F_V;
- return (__ibsubmit(&io));
-}
-
-int
-ibpct (int handle)
-{
- struct ibarg io;
-
- io.__ident = __ID_IBPCT;
- io.handle = handle;
- io.__field = __F_HANDLE;
- return (__ibsubmit(&io));
-}
-
-int
-ibpoke (int handle, int option, int value)
-{
- struct ibarg io;
-
- io.__ident = __ID_IBPOKE;
- io.handle = handle;
- io.option = option;
- io.value = value;
- io.__field = __F_HANDLE | __F_OPTION | __F_VALUE;
- return (__ibsubmit(&io));
-}
-
-int
-ibppc (int handle, int v)
-{
- struct ibarg io;
-
- io.__ident = __ID_IBPPC;
- io.handle = handle;
- io.v = v;
- io.__field = __F_HANDLE | __F_V;
- return (__ibsubmit(&io));
-}
-
-int
-ibrd (int handle, void * buffer, long cnt)
-{
- struct ibarg io;
-
- io.__ident = __ID_IBRD;
- io.handle = handle;
- io.buffer = buffer;
- io.cnt = cnt;
- io.__field = __F_HANDLE | __F_BUFFER | __F_CNT;
- return (__ibsubmit(&io));
-}
-
-int
-ibrda (int handle, void * buffer, long cnt)
-{
- struct ibarg io;
-
- io.__ident = __ID_IBRDA;
- io.handle = handle;
- io.buffer = buffer;
- io.cnt = cnt;
- io.__field = __F_HANDLE | __F_BUFFER | __F_CNT;
- return (__ibsubmit(&io));
-}
-
-int
-ibrdf (int handle, char * flname)
-{
- struct ibarg io;
-
- io.__ident = __ID_IBRDF;
- io.handle = handle;
- io.flname = flname;
- io.__field = __F_HANDLE | __F_FLNAME;
- return (__ibsubmit(&io));
-}
-
-int
-ibrdkey (int handle, void * buffer, int cnt)
-{
- struct ibarg io;
-
- io.__ident = __ID_IBRDKEY;
- io.handle = handle;
- io.buffer = buffer;
- io.cnt = cnt;
- io.__field = __F_HANDLE | __F_BUFFER | __F_CNT;
- return (__ibsubmit(&io));
-}
-
-int
-ibrpp (int handle, char * ppr)
-{
- struct ibarg io;
-
- io.__ident = __ID_IBRPP;
- io.handle = handle;
- io.ppr = ppr;
- io.__field = __F_HANDLE | __F_PPR;
- return (__ibsubmit(&io));
-}
-
-int
-ibrsc (int handle, int v)
-{
- struct ibarg io;
-
- io.__ident = __ID_IBRSC;
- io.handle = handle;
- io.v = v;
- io.__field = __F_HANDLE | __F_V;
- return (__ibsubmit(&io));
-}
-
-int
-ibrsp (int handle, char * spr)
-{
- struct ibarg io;
-
- io.__ident = __ID_IBRSP;
- io.handle = handle;
- io.spr = spr;
- io.__field = __F_HANDLE | __F_SPR;
- return (__ibsubmit(&io));
-}
-
-int
-ibrsv (int handle, int v)
-{
- struct ibarg io;
-
- io.__ident = __ID_IBRSV;
- io.handle = handle;
- io.v = v;
- io.__field = __F_HANDLE | __F_V;
- return (__ibsubmit(&io));
-}
-
-int
-ibsad (int handle, int sad)
-{
- struct ibarg io;
-
- io.__ident = __ID_IBSAD;
- io.handle = handle;
- io.sad = sad;
- io.__field = __F_HANDLE | __F_SAD;
- return (__ibsubmit(&io));
-}
-
-int
-ibsgnl (int handle, int v)
-{
- struct ibarg io;
-
- io.__ident = __ID_IBSGNL;
- io.handle = handle;
- io.v = v;
- io.__field = __F_HANDLE | __F_V;
- return (__ibsubmit(&io));
-}
-
-int
-ibsic (int handle)
-{
- struct ibarg io;
-
- io.__ident = __ID_IBSIC;
- io.handle = handle;
- io.__field = __F_HANDLE;
- return (__ibsubmit(&io));
-}
-
-int
-ibsre (int handle, int v)
-{
- struct ibarg io;
-
- io.__ident = __ID_IBSRE;
- io.handle = handle;
- io.v = v;
- io.__field = __F_HANDLE | __F_V;
- return (__ibsubmit(&io));
-}
-
-int
-ibsrq (ibsrq_t * func)
-{
- struct ibarg io;
-
- io.__ident = __ID_IBSRQ;
- io.func = func;
- io.__field = __F_FUNC;
- return (__ibsubmit(&io));
-}
-
-int
-ibstop (int handle)
-{
- struct ibarg io;
-
- io.__ident = __ID_IBSTOP;
- io.handle = handle;
- io.__field = __F_HANDLE;
- return (__ibsubmit(&io));
-}
-
-int
-ibtmo (int handle, int tmo)
-{
- struct ibarg io;
-
- io.__ident = __ID_IBTMO;
- io.handle = handle;
- io.tmo = tmo;
- io.__field = __F_HANDLE | __F_TMO;
- return (__ibsubmit(&io));
-}
-
-int
-ibtrap (int mask, int mode)
-{
- struct ibarg io;
-
- io.__ident = __ID_IBTRAP;
- io.mask = mask;
- io.mode = mode;
- io.__field = __F_MASK | __F_MODE;
- return (__ibsubmit(&io));
-}
-
-int
-ibtrg (int handle)
-{
- struct ibarg io;
-
- io.__ident = __ID_IBTRG;
- io.handle = handle;
- io.__field = __F_HANDLE;
- return (__ibsubmit(&io));
-}
-
-int
-ibwait (int handle, int mask)
-{
- struct ibarg io;
-
- io.__ident = __ID_IBWAIT;
- io.handle = handle;
- io.mask = mask;
- io.__field = __F_HANDLE | __F_MASK;
- return (__ibsubmit(&io));
-}
-
-int
-ibwrt (int handle, const void *buffer, long cnt)
-{
- struct ibarg io;
-
- io.__ident = __ID_IBWRT;
- io.handle = handle;
- io.buffer = __DECONST(void *, buffer);
- io.cnt = cnt;
- io.__field = __F_HANDLE | __F_BUFFER | __F_CNT;
- return (__ibsubmit(&io));
-}
-
-int
-ibwrta (int handle, const void * buffer, long cnt)
-{
- struct ibarg io;
-
- io.__ident = __ID_IBWRTA;
- io.handle = handle;
- io.buffer = __DECONST(void *, buffer);
- io.cnt = cnt;
- io.__field = __F_HANDLE | __F_BUFFER | __F_CNT;
- return (__ibsubmit(&io));
-}
-
-int
-ibwrtf (int handle, const char *flname)
-{
- struct ibarg io;
-
- io.__ident = __ID_IBWRTF;
- io.handle = handle;
- io.flname = __DECONST(void *, flname);
- io.__field = __F_HANDLE | __F_FLNAME;
- return (__ibsubmit(&io));
-}
-
-int
-ibwrtkey (int handle, const void *buffer, int cnt)
-{
- struct ibarg io;
-
- io.__ident = __ID_IBWRTKEY;
- io.handle = handle;
- io.buffer = __DECONST(void *, buffer);
- io.cnt = cnt;
- io.__field = __F_HANDLE | __F_BUFFER | __F_CNT;
- return (__ibsubmit(&io));
-}
-
-int
-ibxtrc (int handle, void * buffer, long cnt)
-{
- struct ibarg io;
-
- io.__ident = __ID_IBXTRC;
- io.handle = handle;
- io.buffer = buffer;
- io.cnt = cnt;
- io.__field = __F_HANDLE | __F_BUFFER | __F_CNT;
- return (__ibsubmit(&io));
-}
-
diff --git a/lib/libucl/Makefile b/lib/libucl/Makefile
index 310e8b7..09a0bf2 100644
--- a/lib/libucl/Makefile
+++ b/lib/libucl/Makefile
@@ -9,8 +9,10 @@ SRCS= ucl_emitter_streamline.c \
ucl_emitter_utils.c \
ucl_emitter.c \
ucl_hash.c \
+ ucl_msgpack.c \
ucl_parser.c \
ucl_schema.c \
+ ucl_sexp.c \
ucl_util.c \
xxhash.c
diff --git a/lib/msun/tests/Makefile b/lib/msun/tests/Makefile
index 7888c3c..61fd83e 100644
--- a/lib/msun/tests/Makefile
+++ b/lib/msun/tests/Makefile
@@ -7,7 +7,9 @@ CFLAGS+= -DHAVE_FENV_H
# Not sure why this isn't defined for all architectures, since most
# have long double.
-.if ${MACHINE_CPUARCH} == "amd64" || ${MACHINE_CPUARCH} == "i386"
+.if ${MACHINE_CPUARCH} == "aarch64" || \
+ ${MACHINE_CPUARCH} == "amd64" || \
+ ${MACHINE_CPUARCH} == "i386"
CFLAGS+= -D__HAVE_LONG_DOUBLE
.endif
diff --git a/libexec/dma/dma-mbox-create/Makefile.depend b/libexec/dma/dma-mbox-create/Makefile.depend
new file mode 100644
index 0000000..b3f22d1
--- /dev/null
+++ b/libexec/dma/dma-mbox-create/Makefile.depend
@@ -0,0 +1,21 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+ gnu/lib/csu \
+ gnu/lib/libgcc \
+ include \
+ include/arpa \
+ include/xlocale \
+ lib/${CSU_DIR} \
+ lib/libc \
+ lib/libcompiler_rt \
+ secure/lib/libcrypto \
+ secure/lib/libssl \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+.endif
diff --git a/libexec/dma/dmagent/Makefile.depend b/libexec/dma/dmagent/Makefile.depend
new file mode 100644
index 0000000..da1261f
--- /dev/null
+++ b/libexec/dma/dmagent/Makefile.depend
@@ -0,0 +1,29 @@
+# $FreeBSD$
+# Autogenerated - do NOT edit!
+
+DIRDEPS = \
+ gnu/lib/csu \
+ gnu/lib/libgcc \
+ include \
+ include/arpa \
+ include/xlocale \
+ lib/${CSU_DIR} \
+ lib/libc \
+ lib/libcompiler_rt \
+ secure/lib/libcrypto \
+ secure/lib/libssl \
+
+
+.include <dirdeps.mk>
+
+.if ${DEP_RELDIR} == ${_DEP_RELDIR}
+# local dependencies - needed for -jN in clean tree
+aliases_parse.o: aliases_parse.c
+aliases_parse.o: aliases_parse.h
+aliases_parse.po: aliases_parse.c
+aliases_parse.po: aliases_parse.h
+aliases_scan.o: aliases_parse.h
+aliases_scan.o: aliases_scan.c
+aliases_scan.po: aliases_parse.h
+aliases_scan.po: aliases_scan.c
+.endif
diff --git a/libexec/rtld-elf/libmap.c b/libexec/rtld-elf/libmap.c
index 691ad52..240f907 100644
--- a/libexec/rtld-elf/libmap.c
+++ b/libexec/rtld-elf/libmap.c
@@ -16,15 +16,7 @@
#include "debug.h"
#include "rtld.h"
#include "libmap.h"
-
-#ifndef _PATH_LIBMAP_CONF
-#define _PATH_LIBMAP_CONF "/etc/libmap.conf"
-#endif
-
-#ifdef COMPAT_32BIT
-#undef _PATH_LIBMAP_CONF
-#define _PATH_LIBMAP_CONF "/etc/libmap32.conf"
-#endif
+#include "paths.h"
TAILQ_HEAD(lm_list, lm);
struct lm {
@@ -76,7 +68,7 @@ lm_init(char *libmap_override)
dbg("lm_init(\"%s\")", libmap_override);
TAILQ_INIT(&lmp_head);
- lmc_parse_file(_PATH_LIBMAP_CONF);
+ lmc_parse_file(ld_path_libmap_conf);
if (libmap_override) {
/*
diff --git a/libexec/rtld-elf/malloc.c b/libexec/rtld-elf/malloc.c
index 9f7dbe0..f134049 100644
--- a/libexec/rtld-elf/malloc.c
+++ b/libexec/rtld-elf/malloc.c
@@ -45,7 +45,6 @@ static char *rcsid = "$FreeBSD$";
#include <sys/types.h>
#include <sys/sysctl.h>
-#include <paths.h>
#include <stdarg.h>
#include <stddef.h>
#include <stdio.h>
diff --git a/sys/arm/samsung/s3c2xx0/uart_cpu_s3c2410.c b/libexec/rtld-elf/paths.h
index 4be4b39..709e4d3 100644
--- a/sys/arm/samsung/s3c2xx0/uart_cpu_s3c2410.c
+++ b/libexec/rtld-elf/paths.h
@@ -1,12 +1,13 @@
-/*
- * Copyright (c) 2003 Marcel Moolenaar
- * Copyright (c) 2007 Andrew Turner
+/*-
+ * Copyright 1996, 1997, 1998, 1999, 2000 John D. Polstra.
+ * Copyright 2003 Alexander Kabaev <kan@FreeBSD.ORG>.
+ * Copyright 2009-2012 Konstantin Belousov <kib@FreeBSD.ORG>.
+ * Copyright 2012 John Marino <draco@marino.st>.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
- *
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
@@ -23,54 +24,47 @@
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * $FreeBSD$
*/
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
+#ifndef PATHS_H
+#define PATHS_H
-#include <sys/param.h>
-#include <sys/systm.h>
-#include <sys/bus.h>
-#include <sys/cons.h>
-#include <machine/bus.h>
+#undef _PATH_ELF_HINTS
-#include <dev/uart/uart.h>
-#include <dev/uart/uart_cpu.h>
+#ifdef COMPAT_32BIT
+#define _PATH_ELF_HINTS "/var/run/ld-elf32.so.hints"
+#define _PATH_LIBMAP_CONF "/etc/libmap32.conf"
+#define _PATH_RTLD "/libexec/ld-elf32.so.1"
+#define STANDARD_LIBRARY_PATH "/lib32:/usr/lib32"
+#define LD_ "LD_32_"
+#endif
-#include <arm/samsung/s3c2xx0/s3c2xx0var.h>
+#ifndef _PATH_ELF_HINTS
+#define _PATH_ELF_HINTS "/var/run/ld-elf.so.hints"
+#endif
-extern struct uart_class uart_s3c2410_class;
+#ifndef _PATH_LIBMAP_CONF
+#define _PATH_LIBMAP_CONF "/etc/libmap.conf"
+#endif
-bus_space_tag_t uart_bus_space_io;
-bus_space_tag_t uart_bus_space_mem;
+#ifndef _PATH_RTLD
+#define _PATH_RTLD "/libexec/ld-elf.so.1"
+#endif
-vm_offset_t s3c2410_uart_vaddr;
-unsigned int s3c2410_pclk;
+#ifndef STANDARD_LIBRARY_PATH
+#define STANDARD_LIBRARY_PATH "/lib:/usr/lib"
+#endif
-int
-uart_cpu_eqres(struct uart_bas *b1, struct uart_bas *b2)
-{
- return ((b1->bsh == b2->bsh && b1->bst == b2->bst) ? 1 : 0);
-}
+#ifndef LD_
+#define LD_ "LD_"
+#endif
-int
-uart_cpu_getdev(int devtype, struct uart_devinfo *di)
-{
- if (devtype != UART_DEV_CONSOLE)
- return (ENXIO);
+extern char *ld_path_elf_hints;
+extern char *ld_path_libmap_conf;
+extern char *ld_path_rtld;
+extern char *ld_standard_library_path;
+extern char *ld_env_prefix;
- di->ops = uart_getops(&uart_s3c2410_class);
- di->bas.chan = 0;
- di->bas.bst = s3c2xx0_bs_tag;
- di->bas.bsh = s3c2410_uart_vaddr;
- di->bas.regshft = 0;
- di->bas.rclk = s3c2410_pclk;
- di->baudrate = 115200;
- di->databits = 8;
- di->stopbits = 1;
- di->parity = UART_PARITY_NONE;
- uart_bus_space_io = s3c2xx0_bs_tag;
- uart_bus_space_mem = NULL;
-
- return (0);
-}
+#endif /* PATHS_H */
diff --git a/libexec/rtld-elf/rtld.c b/libexec/rtld-elf/rtld.c
index eecfb0f..7ba1e06 100644
--- a/libexec/rtld-elf/rtld.c
+++ b/libexec/rtld-elf/rtld.c
@@ -56,16 +56,11 @@
#include "debug.h"
#include "rtld.h"
#include "libmap.h"
+#include "paths.h"
#include "rtld_tls.h"
#include "rtld_printf.h"
#include "notes.h"
-#ifndef COMPAT_32BIT
-#define PATH_RTLD "/libexec/ld-elf.so.1"
-#else
-#define PATH_RTLD "/libexec/ld-elf32.so.1"
-#endif
-
/* Types. */
typedef void (*func_ptr_type)();
typedef void * (*path_enum_proc) (const char *path, size_t len, void *arg);
@@ -260,6 +255,15 @@ int tls_max_index = 1; /* Largest module index allocated */
bool ld_library_path_rpath = false;
/*
+ * Globals for path names, and such
+ */
+char *ld_path_elf_hints = _PATH_ELF_HINTS;
+char *ld_path_libmap_conf = _PATH_LIBMAP_CONF;
+char *ld_path_rtld = _PATH_RTLD;
+char *ld_standard_library_path = STANDARD_LIBRARY_PATH;
+char *ld_env_prefix = LD_;
+
+/*
* Fill in a DoneList with an allocation large enough to hold all of
* the currently-loaded objects. Keep this as a macro since it calls
* alloca and we want that to occur within the scope of the caller.
@@ -454,7 +458,7 @@ _rtld(Elf_Addr *sp, func_ptr_type *exit_proc, Obj_Entry **objp)
ld_utrace = getenv(LD_ "UTRACE");
if ((ld_elf_hints_path == NULL) || strlen(ld_elf_hints_path) == 0)
- ld_elf_hints_path = _PATH_ELF_HINTS;
+ ld_elf_hints_path = ld_path_elf_hints;
if (ld_debug != NULL && *ld_debug != '\0')
debug = 1;
@@ -1511,7 +1515,7 @@ find_library(const char *xname, const Obj_Entry *refobj, int *fdp)
(pathname = search_library_path(name, refobj->rpath)) != NULL) ||
(pathname = search_library_pathfds(name, ld_library_dirs, fdp)) != NULL ||
(pathname = search_library_path(name, gethints(false))) != NULL ||
- (pathname = search_library_path(name, STANDARD_LIBRARY_PATH)) != NULL)
+ (pathname = search_library_path(name, ld_standard_library_path)) != NULL)
return (pathname);
} else {
nodeflib = objgiven ? refobj->z_nodeflib : false;
@@ -1525,7 +1529,7 @@ find_library(const char *xname, const Obj_Entry *refobj, int *fdp)
(pathname = search_library_pathfds(name, ld_library_dirs, fdp)) != NULL ||
(pathname = search_library_path(name, gethints(nodeflib))) != NULL ||
(objgiven && !nodeflib &&
- (pathname = search_library_path(name, STANDARD_LIBRARY_PATH)) != NULL))
+ (pathname = search_library_path(name, ld_standard_library_path)) != NULL))
return (pathname);
}
@@ -1695,7 +1699,7 @@ gethints(bool nostdlib)
hargs.request = RTLD_DI_SERINFOSIZE;
hargs.serinfo = &hmeta;
- path_enumerate(STANDARD_LIBRARY_PATH, fill_search_info, &sargs);
+ path_enumerate(ld_standard_library_path, fill_search_info, &sargs);
path_enumerate(p, fill_search_info, &hargs);
SLPinfo = xmalloc(smeta.dls_size);
@@ -1714,7 +1718,7 @@ gethints(bool nostdlib)
hargs.serpath = &hintinfo->dls_serpath[0];
hargs.strspace = (char *)&hintinfo->dls_serpath[hmeta.dls_cnt];
- path_enumerate(STANDARD_LIBRARY_PATH, fill_search_info, &sargs);
+ path_enumerate(ld_standard_library_path, fill_search_info, &sargs);
path_enumerate(p, fill_search_info, &hargs);
/*
@@ -1892,7 +1896,7 @@ init_rtld(caddr_t mapbase, Elf_Auxinfo **aux_info)
digest_dynamic2(&obj_rtld, dyn_rpath, dyn_soname, dyn_runpath);
/* Replace the path with a dynamically allocated copy. */
- obj_rtld.path = xstrdup(PATH_RTLD);
+ obj_rtld.path = xstrdup(ld_path_rtld);
r_debug.r_brk = r_debug_state;
r_debug.r_state = RT_CONSISTENT;
@@ -3506,7 +3510,7 @@ do_search_info(const Obj_Entry *obj, int request, struct dl_serinfo *info)
path_enumerate(obj->runpath, fill_search_info, &args);
path_enumerate(gethints(obj->z_nodeflib), fill_search_info, &args);
if (!obj->z_nodeflib)
- path_enumerate(STANDARD_LIBRARY_PATH, fill_search_info, &args);
+ path_enumerate(ld_standard_library_path, fill_search_info, &args);
if (request == RTLD_DI_SERINFOSIZE) {
@@ -3544,7 +3548,7 @@ do_search_info(const Obj_Entry *obj, int request, struct dl_serinfo *info)
args.flags = LA_SER_DEFAULT;
if (!obj->z_nodeflib &&
- path_enumerate(STANDARD_LIBRARY_PATH, fill_search_info, &args) != NULL)
+ path_enumerate(ld_standard_library_path, fill_search_info, &args) != NULL)
return (-1);
return (0);
}
diff --git a/libexec/rtld-elf/rtld.h b/libexec/rtld-elf/rtld.h
index d75d0ab..c7c5888 100644
--- a/libexec/rtld-elf/rtld.h
+++ b/libexec/rtld-elf/rtld.h
@@ -41,22 +41,6 @@
#include "rtld_lock.h"
#include "rtld_machdep.h"
-#ifdef COMPAT_32BIT
-#undef STANDARD_LIBRARY_PATH
-#undef _PATH_ELF_HINTS
-#define _PATH_ELF_HINTS "/var/run/ld-elf32.so.hints"
-/* For running 32 bit binaries */
-#define STANDARD_LIBRARY_PATH "/lib32:/usr/lib32"
-#define LD_ "LD_32_"
-#endif
-
-#ifndef STANDARD_LIBRARY_PATH
-#define STANDARD_LIBRARY_PATH "/lib:/usr/lib"
-#endif
-#ifndef LD_
-#define LD_ "LD_"
-#endif
-
#define NEW(type) ((type *) xmalloc(sizeof(type)))
#define CNEW(type) ((type *) xcalloc(1, sizeof(type)))
diff --git a/sbin/atm/atmconfig/Makefile b/sbin/atm/atmconfig/Makefile
index 1e48f04..a77eb25 100644
--- a/sbin/atm/atmconfig/Makefile
+++ b/sbin/atm/atmconfig/Makefile
@@ -10,7 +10,7 @@
PROG= atmconfig
SRCS= main.c diag.c natm.c
MAN= atmconfig.8
-# CFLAGS+= -DPATH_HELP='".:/usr/share/doc/atm:/usr/local/share/doc/atm"'
+# CFLAGS+= -DPATH_HELP='".:${SHAREDIR}/doc/atm:/usr/local/share/doc/atm"'
CFLAGS+= -I${.OBJDIR}
@@ -31,7 +31,7 @@ WARNS?= 3
.endif
FILES= atmconfig.help atmconfig_device.help
-FILESDIR= /usr/share/doc/atm
+FILESDIR= ${SHAREDIR}/doc/atm
SNMP_ATM_DEF= ${.CURDIR}/../../../contrib/ngatm/snmp_atm/atm_tree.def \
${.CURDIR}/../../../usr.sbin/bsnmpd/modules/snmp_atm/atm_freebsd.def
diff --git a/sbin/camcontrol/modeedit.c b/sbin/camcontrol/modeedit.c
index 00ab974..8262c3c 100644
--- a/sbin/camcontrol/modeedit.c
+++ b/sbin/camcontrol/modeedit.c
@@ -246,7 +246,7 @@ editentry_set(char *name, char *newvalue, int editonly)
* currently workaround it (even for int64's), so we have to kludge it.
*/
#define RESOLUTION_MAX(size) ((resolution * (size) == 32)? \
- (int)0xffffffff: (1 << (resolution * (size))) - 1)
+ INT_MAX: (1 << (resolution * (size))) - 1)
assert(newvalue != NULL);
if (*newvalue == '\0')
diff --git a/sbin/devd/devd.cc b/sbin/devd/devd.cc
index c770204..5580f6c 100644
--- a/sbin/devd/devd.cc
+++ b/sbin/devd/devd.cc
@@ -850,7 +850,7 @@ create_socket(const char *name, int socktype)
return (fd);
}
-unsigned int max_clients = 10; /* Default, can be overriden on cmdline. */
+unsigned int max_clients = 10; /* Default, can be overridden on cmdline. */
unsigned int num_clients;
list<client_t> clients;
diff --git a/sbin/fsck_ffs/fsck.h b/sbin/fsck_ffs/fsck.h
index c0ec651..57e0773 100644
--- a/sbin/fsck_ffs/fsck.h
+++ b/sbin/fsck_ffs/fsck.h
@@ -301,7 +301,7 @@ extern char snapname[BUFSIZ]; /* when doing snapshots, the name of the file */
extern char *cdevname; /* name of device being checked */
extern long dev_bsize; /* computed value of DEV_BSIZE */
extern long secsize; /* actual disk sector size */
-extern u_int real_dev_bsize; /* actual disk sector size, not overriden */
+extern u_int real_dev_bsize; /* actual disk sector size, not overridden */
extern char nflag; /* assume a no response */
extern char yflag; /* assume a yes response */
extern int bkgrdflag; /* use a snapshot to run on an active system */
diff --git a/sbin/fsck_ffs/globs.c b/sbin/fsck_ffs/globs.c
index c5b1e1b..e910bc9 100644
--- a/sbin/fsck_ffs/globs.c
+++ b/sbin/fsck_ffs/globs.c
@@ -73,7 +73,7 @@ char snapname[BUFSIZ]; /* when doing snapshots, the name of the file */
char *cdevname; /* name of device being checked */
long dev_bsize; /* computed value of DEV_BSIZE */
long secsize; /* actual disk sector size */
-u_int real_dev_bsize; /* actual disk sector size, not overriden */
+u_int real_dev_bsize; /* actual disk sector size, not overridden */
char nflag; /* assume a no response */
char yflag; /* assume a yes response */
int bkgrdflag; /* use a snapshot to run on an active system */
diff --git a/sbin/ipfw/tables.c b/sbin/ipfw/tables.c
index 506d771..7eff340 100644
--- a/sbin/ipfw/tables.c
+++ b/sbin/ipfw/tables.c
@@ -450,7 +450,7 @@ table_create(ipfw_obj_header *oh, int ac, char *av[])
}
}
- /* Set some defaults to preserve compability */
+ /* Set some defaults to preserve compatibility. */
if (xi.algoname[0] == '\0' && xi.type == 0)
xi.type = IPFW_TABLE_ADDR;
if (xi.vmask == 0)
@@ -918,7 +918,7 @@ table_modify_record(ipfw_obj_header *oh, int ac, char *av[], int add,
tentry_fill_key(oh, ptent, *av, add, &type, &vmask, &xi);
/*
- * compability layer: auto-create table if not exists
+ * Compatibility layer: auto-create table if not exists.
*/
if (xi.tablename[0] == '\0') {
xi.type = type;
@@ -1387,8 +1387,8 @@ tentry_fill_key(ipfw_obj_header *oh, ipfw_obj_tentry *tent, char *key,
vmask = xi->vmask;
} else {
/*
- * we're running `ipfw -n`
- * Compability layer: try to guess key type
+ * We're running `ipfw -n`
+ * Compatibility layer: try to guess key type
* before failing.
*/
if (guess_key_type(key, &type) != 0) {
@@ -1407,7 +1407,7 @@ tentry_fill_key(ipfw_obj_header *oh, ipfw_obj_tentry *tent, char *key,
oh->ntlv.name);
/*
* Table does not exist
- * Compability layer: try to guess key type before failing.
+ * Compatibility layer: try to guess key type before failing.
*/
if (guess_key_type(key, &type) != 0) {
/* Inknown key */
diff --git a/sbin/natd/natd.c b/sbin/natd/natd.c
index 4d9061d..894e824 100644
--- a/sbin/natd/natd.c
+++ b/sbin/natd/natd.c
@@ -223,7 +223,7 @@ int main (int argc, char** argv)
/*
* Create divert sockets. Use only one socket if -p was specified
* on command line. Otherwise, create separate sockets for
- * outgoing and incoming connnections.
+ * outgoing and incoming connections.
*/
if (mip->inOutPort) {
diff --git a/sbin/newfs_msdos/mkfs_msdos.h b/sbin/newfs_msdos/mkfs_msdos.h
index e9529ce..d9f9960 100644
--- a/sbin/newfs_msdos/mkfs_msdos.h
+++ b/sbin/newfs_msdos/mkfs_msdos.h
@@ -1,9 +1,12 @@
+/* $FreeBSD$ */
+/* $NetBSD: mkfs_msdos.h,v 1.2 2013/01/23 15:29:15 christos Exp $ */
+
/*-
- * Copyright (c) 2015 The FreeBSD Foundation
+ * Copyright (c) 2013 The NetBSD Foundation, Inc.
* All rights reserved.
*
- * This software was developed by Ed Maste under sponsorship from
- * the FreeBSD Foundation.
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Christos Zoulas.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -14,48 +17,53 @@
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
- * THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * $FreeBSD$
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
*/
+#include <sys/types.h>
+#include <stdbool.h>
+#define ALLOPTS \
+AOPT('@', off_t, offset, 0, "Offset in device") \
+AOPT('B', const char *, bootstrap, -1, "Bootstrap file") \
+AOPT('C', off_t, create_size, 0, "Create file") \
+AOPT('F', uint8_t, fat_type, 12, "FAT type (12, 16, or 32)") \
+AOPT('I', uint32_t, volume_id, 0, "Volume ID") \
+AOPT('L', const char *, volume_label, -1, "Volume Label") \
+AOPT('N', bool, no_create, -2, "Don't create filesystem, print params only") \
+AOPT('O', const char *, OEM_string, -1, "OEM string") \
+AOPT('S', uint16_t, bytes_per_sector, 1, "Bytes per sector") \
+AOPT('a', uint32_t, sectors_per_fat, 1, "Sectors per FAT") \
+AOPT('b', uint32_t, block_size, 1, "Block size") \
+AOPT('c', uint8_t, sectors_per_cluster, 1, "Sectors per cluster") \
+AOPT('e', uint16_t, directory_entries, 1, "Directory entries") \
+AOPT('f', const char *, floppy, -1, "Standard format floppies (160,180,320,360,640,720,1200,1232,1440,2880)") \
+AOPT('h', uint16_t, drive_heads, 1, "Drive heads") \
+AOPT('i', uint16_t, info_sector, 1, "Info sector") \
+AOPT('k', uint16_t, backup_sector, 1, "Backup sector") \
+AOPT('m', uint8_t, media_descriptor, 0, "Media descriptor") \
+AOPT('n', uint8_t, num_FAT, 1, "Number of FATs") \
+AOPT('o', uint32_t, hidden_sectors, 0, "Hidden sectors") \
+AOPT('r', uint16_t, reserved_sectors, 1, "Reserved sectors") \
+AOPT('s', uint32_t, size, 1, "File System size") \
+AOPT('u', uint16_t, sectors_per_track, 1, "Sectors per track")
+
struct msdos_options {
- const char *bootstrap;
- const char *volume_label;
- const char *OEM_string;
- const char *floppy;
- u_int fat_type;
- u_int volume_id;
- u_int bytes_per_sector;
- u_int sectors_per_fat;
- u_int block_size;
- u_int sectors_per_cluster;
- u_int directory_entries;
- u_int drive_heads;
- u_int info_sector;
- u_int backup_sector;
- u_int media_descriptor;
- u_int num_FAT;
- u_int hidden_sectors;
- u_int reserved_sectors;
- u_int size;
- u_int sectors_per_track;
- int no_create;
- off_t create_size;
- off_t offset;
- int volume_id_set;
- int media_descriptor_set;
- int hidden_sectors_set;
+#define AOPT(_opt, _type, _name, _min, _desc) _type _name;
+ALLOPTS
+#undef AOPT
+ uint32_t volume_id_set:1;
+ uint32_t media_descriptor_set:1;
+ uint32_t hidden_sectors_set:1;
};
int mkfs_msdos(const char *, const char *, const struct msdos_options *);
diff --git a/sbin/newfs_nandfs/newfs_nandfs.c b/sbin/newfs_nandfs/newfs_nandfs.c
index 3990dbb..9500805 100644
--- a/sbin/newfs_nandfs/newfs_nandfs.c
+++ b/sbin/newfs_nandfs/newfs_nandfs.c
@@ -1088,7 +1088,7 @@ static void
print_summary(void)
{
- printf("filesystem created succesfully\n");
+ printf("filesystem was created successfully\n");
printf("total segments: %#jx valid segments: %#jx\n", nsegments,
nsegments - bad_segments_count);
printf("total space: %ju MB free: %ju MB\n",
diff --git a/sbin/pfctl/pfctl.c b/sbin/pfctl/pfctl.c
index ea0064b..43d9dc5 100644
--- a/sbin/pfctl/pfctl.c
+++ b/sbin/pfctl/pfctl.c
@@ -1840,6 +1840,7 @@ pfctl_set_debug(struct pfctl *pf, char *d)
}
pf->debug_set = 1;
+ level = pf->debug;
if ((pf->opts & PF_OPT_NOACTION) == 0)
if (ioctl(dev, DIOCSETDEBUG, &level))
diff --git a/sbin/rcorder/rcorder.c b/sbin/rcorder/rcorder.c
index 8c46b4f..1d10a40 100644
--- a/sbin/rcorder/rcorder.c
+++ b/sbin/rcorder/rcorder.c
@@ -220,7 +220,7 @@ strnode_add(strnodelist **listp, char *s, filenode *fnode)
/*
* below are the functions that deal with creating the lists
- * from the filename's given and the dependancies and provisions
+ * from the filename's given dependencies and provisions
* in each of these files. no ordering or checking is done here.
*/
@@ -696,7 +696,7 @@ keep_ok(filenode *fnode)
*
* NOTE: do_file() is called recursively from several places and cannot
* safely free() anything related to items that may be recursed on.
- * Circular dependancies will cause problems if we do.
+ * Circular dependencies will cause problems if we do.
*/
static void
do_file(filenode *fnode)
diff --git a/sbin/savecore/savecore.c b/sbin/savecore/savecore.c
index 705261f..b87b95b 100644
--- a/sbin/savecore/savecore.c
+++ b/sbin/savecore/savecore.c
@@ -606,7 +606,8 @@ DoFile(const char *savedir, const char *device)
}
if (kdhl.panicstring[0])
- syslog(LOG_ALERT, "reboot after panic: %s", kdhl.panicstring);
+ syslog(LOG_ALERT, "reboot after panic: %*s",
+ (int)sizeof(kdhl.panicstring), kdhl.panicstring);
else
syslog(LOG_ALERT, "reboot");
@@ -657,7 +658,7 @@ DoFile(const char *savedir, const char *device)
if (info == NULL) {
syslog(LOG_ERR, "fdopen failed: %m");
nerr++;
- goto closefd;
+ goto closeall;
}
xostyle = xo_get_style(NULL);
@@ -665,7 +666,7 @@ DoFile(const char *savedir, const char *device)
if (xoinfo == NULL) {
syslog(LOG_ERR, "%s: %m", infoname);
nerr++;
- goto closefd;
+ goto closeall;
}
xo_open_container_h(xoinfo, "crashdump");
@@ -726,9 +727,8 @@ nuke:
if (verbose)
printf("clearing dump header\n");
memcpy(kdhl.magic, KERNELDUMPMAGIC_CLEARED, sizeof kdhl.magic);
- lseek(fd, lasthd, SEEK_SET);
- error = write(fd, &kdhl, sizeof kdhl);
- if (error != sizeof kdhl)
+ if (lseek(fd, lasthd, SEEK_SET) != lasthd ||
+ write(fd, &kdhl, sizeof(kdhl)) != sizeof(kdhl))
syslog(LOG_ERR,
"error while clearing the dump header: %m");
}
diff --git a/sbin/sysctl/sysctl.c b/sbin/sysctl/sysctl.c
index 62f12b5..c89315f 100644
--- a/sbin/sysctl/sysctl.c
+++ b/sbin/sysctl/sysctl.c
@@ -90,6 +90,8 @@ static int ctl_sign[CTLTYPE+1] = {
};
static int ctl_size[CTLTYPE+1] = {
+ [CTLTYPE_U8] = sizeof(uint8_t),
+ [CTLTYPE_U16] = sizeof(uint16_t),
[CTLTYPE_INT] = sizeof(int),
[CTLTYPE_UINT] = sizeof(u_int),
[CTLTYPE_LONG] = sizeof(long),
@@ -99,6 +101,8 @@ static int ctl_size[CTLTYPE+1] = {
};
static const char *ctl_typename[CTLTYPE+1] = {
+ [CTLTYPE_U8] = "uint8_t",
+ [CTLTYPE_U16] = "uint16_t",
[CTLTYPE_INT] = "integer",
[CTLTYPE_UINT] = "unsigned integer",
[CTLTYPE_LONG] = "long integer",
@@ -221,6 +225,8 @@ parse(const char *string, int lineno)
int len, i, j;
const void *newval;
const char *newvalstr = NULL;
+ uint8_t u8val;
+ uint16_t u16val;
int intval;
unsigned int uintval;
long longval;
@@ -322,6 +328,8 @@ parse(const char *string, int lineno)
}
switch (kind & CTLTYPE) {
+ case CTLTYPE_U8:
+ case CTLTYPE_U16:
case CTLTYPE_INT:
case CTLTYPE_UINT:
case CTLTYPE_LONG:
@@ -345,6 +353,17 @@ parse(const char *string, int lineno)
errno = 0;
switch (kind & CTLTYPE) {
+ case CTLTYPE_U8:
+ u8val = (uint8_t)strtoul(newvalstr, &endptr, 0);
+ newval = &u8val;
+ newsize = sizeof(u8val);
+ break;
+ case CTLTYPE_U16:
+ u16val = (uint16_t)strtoul(newvalstr, &endptr,
+ 0);
+ newval = &u16val;
+ newsize = sizeof(u16val);
+ break;
case CTLTYPE_INT:
if (strncmp(fmt, "IK", 2) == 0)
intval = strIKtoi(newvalstr, &endptr, fmt);
@@ -890,6 +909,8 @@ show_var(int *oid, int nlen)
free(oval);
return (0);
+ case CTLTYPE_U8:
+ case CTLTYPE_U16:
case CTLTYPE_INT:
case CTLTYPE_UINT:
case CTLTYPE_LONG:
@@ -902,6 +923,14 @@ show_var(int *oid, int nlen)
sep1 = "";
while (len >= intlen) {
switch (kind & CTLTYPE) {
+ case CTLTYPE_U8:
+ umv = *(uint8_t *)p;
+ mv = *(int8_t *)p;
+ break;
+ case CTLTYPE_U16:
+ umv = *(uint16_t *)p;
+ mv = *(int16_t *)p;
+ break;
case CTLTYPE_INT:
case CTLTYPE_UINT:
umv = *(u_int *)p;
diff --git a/secure/lib/libcrypto/Makefile b/secure/lib/libcrypto/Makefile
index 4c396a0..43122d7 100644
--- a/secure/lib/libcrypto/Makefile
+++ b/secure/lib/libcrypto/Makefile
@@ -6,7 +6,7 @@ SUBDIR= engines
.include <bsd.own.mk>
LIB= crypto
-SHLIB_MAJOR= 7
+SHLIB_MAJOR= 8
ALLOW_SHARED_TEXTREL=
NO_LINT=
@@ -35,8 +35,8 @@ INCS+= crypto.h ebcdic.h opensslv.h ossl_typ.h symhacks.h ../e_os2.h
# aes
SRCS+= aes_cfb.c aes_ctr.c aes_ecb.c aes_ige.c aes_misc.c aes_ofb.c aes_wrap.c
.if ${MACHINE_CPUARCH} == "amd64"
-SRCS+= aes-x86_64.S aesni-sha1-x86_64.S aesni-x86_64.S bsaes-x86_64.S \
- vpaes-x86_64.S
+SRCS+= aes-x86_64.S aesni-mb-x86_64.S aesni-sha1-x86_64.S \
+ aesni-sha256-x86_64.S aesni-x86_64.S bsaes-x86_64.S vpaes-x86_64.S
.elif ${MACHINE_CPUARCH} == "i386"
SRCS+= aes-586.s aesni-x86.s vpaes-x86.s
.else
@@ -84,8 +84,8 @@ SRCS+= bn_add.c bn_blind.c bn_const.c bn_ctx.c bn_depr.c bn_div.c bn_err.c \
bn_mont.c bn_mpi.c bn_mul.c bn_nist.c bn_prime.c bn_print.c bn_rand.c \
bn_recp.c bn_shift.c bn_sqr.c bn_sqrt.c bn_word.c bn_x931p.c
.if ${MACHINE_CPUARCH} == "amd64"
-SRCS+= modexp512-x86_64.S x86_64-gcc.c x86_64-gf2m.S x86_64-mont.S \
- x86_64-mont5.S
+SRCS+= rsaz-avx2.S rsaz-x86_64.S rsaz_exp.c x86_64-gcc.c x86_64-gf2m.S \
+ x86_64-mont.S x86_64-mont5.S
.elif ${MACHINE_CPUARCH} == "i386"
SRCS+= bn-586.s co-586.s x86-gf2m.s x86-mont.s
.else
@@ -118,7 +118,8 @@ INCS+= cmac.h
# cms
SRCS+= cms_asn1.c cms_att.c cms_dd.c cms_enc.c cms_env.c cms_err.c \
- cms_ess.c cms_io.c cms_lib.c cms_pwri.c cms_sd.c cms_smime.c
+ cms_ess.c cms_io.c cms_kari.c cms_lib.c cms_pwri.c cms_sd.c \
+ cms_smime.c
INCS+= cms.h
# comp
@@ -143,8 +144,8 @@ SRCS+= des_enc.c fcrypt_b.c
INCS+= des.h des_old.h
# dh
-SRCS+= dh_ameth.c dh_asn1.c dh_check.c dh_depr.c dh_err.c dh_gen.c dh_key.c \
- dh_lib.c dh_pmeth.c dh_prn.c
+SRCS+= dh_ameth.c dh_asn1.c dh_check.c dh_depr.c dh_err.c dh_gen.c dh_kdf.c \
+ dh_key.c dh_lib.c dh_pmeth.c dh_prn.c dh_rfc5114.c
INCS+= dh.h
# dsa
@@ -161,10 +162,13 @@ SRCS+= ec2_mult.c ec2_oct.c ec2_smpl.c ec_ameth.c ec_asn1.c ec_check.c \
ec_curve.c ec_cvt.c ec_err.c ec_key.c ec_lib.c ec_mult.c ec_oct.c \
ec_pmeth.c ec_print.c eck_prn.c ecp_mont.c ecp_nist.c ecp_oct.c \
ecp_smpl.c
+.if ${MACHINE_CPUARCH} == "amd64"
+SRCS+= ecp_nistz256.c ecp_nistz256-x86_64.S
+.endif
INCS+= ec.h
# ecdh
-SRCS+= ech_err.c ech_key.c ech_lib.c ech_ossl.c
+SRCS+= ech_err.c ech_kdf.c ech_key.c ech_lib.c ech_ossl.c
INCS+= ecdh.h
# ecdsa
@@ -174,9 +178,8 @@ INCS+= ecdsa.h
# engine
SRCS+= eng_all.c eng_cnf.c eng_cryptodev.c eng_ctrl.c eng_dyn.c eng_err.c \
eng_fat.c eng_init.c eng_lib.c eng_list.c eng_openssl.c eng_pkey.c \
- eng_rdrand.c eng_rsax.c eng_table.c tb_asnmth.c tb_cipher.c tb_dh.c \
- tb_digest.c tb_dsa.c tb_ecdh.c tb_ecdsa.c tb_pkmeth.c tb_rand.c \
- tb_rsa.c tb_store.c
+ eng_rdrand.c eng_table.c tb_asnmth.c tb_cipher.c tb_dh.c tb_digest.c \
+ tb_dsa.c tb_ecdh.c tb_ecdsa.c tb_pkmeth.c tb_rand.c tb_rsa.c tb_store.c
INCS+= engine.h
# err
@@ -185,14 +188,14 @@ INCS+= err.h
# evp
SRCS+= bio_b64.c bio_enc.c bio_md.c bio_ok.c c_all.c c_allc.c c_alld.c \
- digest.c e_aes.c e_aes_cbc_hmac_sha1.c e_bf.c e_camellia.c e_cast.c \
- e_des.c e_des3.c e_idea.c e_null.c e_old.c e_rc2.c e_rc4.c \
- e_rc4_hmac_md5.c e_rc5.c e_seed.c e_xcbc_d.c encode.c evp_acnf.c \
- evp_cnf.c evp_enc.c evp_err.c evp_key.c evp_lib.c evp_pbe.c \
- evp_pkey.c m_dss.c m_dss1.c m_ecdsa.c m_md4.c m_md5.c m_mdc2.c \
- m_null.c m_ripemd.c m_sha.c m_sha1.c m_sigver.c m_wp.c names.c \
- p5_crpt.c p5_crpt2.c p_dec.c p_enc.c p_lib.c p_open.c p_seal.c \
- p_sign.c p_verify.c pmeth_fn.c pmeth_gn.c pmeth_lib.c
+ digest.c e_aes.c e_aes_cbc_hmac_sha1.c e_aes_cbc_hmac_sha256.c e_bf.c \
+ e_camellia.c e_cast.c e_des.c e_des3.c e_idea.c e_null.c e_old.c \
+ e_rc2.c e_rc4.c e_rc4_hmac_md5.c e_rc5.c e_seed.c e_xcbc_d.c encode.c \
+ evp_acnf.c evp_cnf.c evp_enc.c evp_err.c evp_key.c evp_lib.c \
+ evp_pbe.c evp_pkey.c m_dss.c m_dss1.c m_ecdsa.c m_md4.c m_md5.c \
+ m_mdc2.c m_null.c m_ripemd.c m_sha.c m_sha1.c m_sigver.c m_wp.c \
+ names.c p5_crpt.c p5_crpt2.c p_dec.c p_enc.c p_lib.c p_open.c \
+ p_seal.c p_sign.c p_verify.c pmeth_fn.c pmeth_gn.c pmeth_lib.c
INCS+= evp.h
# hmac
@@ -228,9 +231,10 @@ SRCS+= mdc2_one.c mdc2dgst.c
INCS+= mdc2.h
# modes
-SRCS+= cbc128.c ccm128.c cfb128.c ctr128.c cts128.c gcm128.c ofb128.c xts128.c
+SRCS+= cbc128.c ccm128.c cfb128.c ctr128.c cts128.c gcm128.c ofb128.c \
+ wrap128.c xts128.c
.if ${MACHINE_CPUARCH} == "amd64"
-SRCS+= ghash-x86_64.S
+SRCS+= aesni-gcm-x86_64.S ghash-x86_64.S
.elif ${MACHINE_CPUARCH} == "i386"
SRCS+= ghash-x86.s
.endif
@@ -314,7 +318,8 @@ INCS+= seed.h
# sha
SRCS+= sha1_one.c sha1dgst.c sha256.c sha512.c sha_dgst.c sha_one.c
.if ${MACHINE_CPUARCH} == "amd64"
-SRCS+= sha1-x86_64.S sha256-x86_64.S sha512-x86_64.S
+SRCS+= sha1-mb-x86_64.S sha1-x86_64.S sha256-mb-x86_64.S sha256-x86_64.S \
+ sha512-x86_64.S
.elif ${MACHINE_CPUARCH} == "i386"
SRCS+= sha1-586.s sha256-586.s sha512-586.s
.endif
@@ -366,7 +371,7 @@ SRCS+= pcy_cache.c pcy_data.c pcy_lib.c pcy_map.c pcy_node.c pcy_tree.c \
v3_bitst.c v3_conf.c v3_cpols.c v3_crld.c v3_enum.c v3_extku.c \
v3_genn.c v3_ia5.c v3_info.c v3_int.c v3_lib.c v3_ncons.c v3_ocsp.c \
v3_pci.c v3_pcia.c v3_pcons.c v3_pku.c v3_pmaps.c v3_prn.c v3_purp.c \
- v3_skey.c v3_sxnet.c v3_utl.c v3err.c
+ v3_scts.c v3_skey.c v3_sxnet.c v3_utl.c v3err.c
INCS+= x509v3.h
SRCS+= buildinf.h
diff --git a/secure/lib/libcrypto/Makefile.asm b/secure/lib/libcrypto/Makefile.asm
index eb62c7c..6f06348 100644
--- a/secure/lib/libcrypto/Makefile.asm
+++ b/secure/lib/libcrypto/Makefile.asm
@@ -12,34 +12,39 @@
${LCRYPTO_SRC}/crypto/aes/asm \
${LCRYPTO_SRC}/crypto/bn/asm \
${LCRYPTO_SRC}/crypto/camellia/asm \
+ ${LCRYPTO_SRC}/crypto/ec/asm \
${LCRYPTO_SRC}/crypto/md5/asm \
${LCRYPTO_SRC}/crypto/modes/asm \
${LCRYPTO_SRC}/crypto/rc4/asm \
- ${LCRYPTO_SRC}/crypto/rc5/asm \
${LCRYPTO_SRC}/crypto/sha/asm \
${LCRYPTO_SRC}/crypto/whrlpool/asm
# aes
-SRCS= aes-x86_64.pl aesni-sha1-x86_64.pl aesni-x86_64.pl bsaes-x86_64.pl \
+SRCS= aes-x86_64.pl aesni-mb-x86_64.pl aesni-sha1-x86_64.pl \
+ aesni-sha256-x86_64.pl aesni-x86_64.pl bsaes-x86_64.pl \
vpaes-x86_64.pl
# bn
-SRCS+= modexp512-x86_64.pl x86_64-gf2m.pl x86_64-mont.pl x86_64-mont5.pl
+SRCS+= rsaz-avx2.pl rsaz-x86_64.pl x86_64-gf2m.pl x86_64-mont.pl \
+ x86_64-mont5.pl
# camellia
SRCS+= cmll-x86_64.pl
+# ec
+SRCS+= ecp_nistz256-x86_64.pl
+
# md5
SRCS+= md5-x86_64.pl
# modes
-SRCS+= ghash-x86_64.pl
+SRCS+= aesni-gcm-x86_64.pl ghash-x86_64.pl
# rc4
SRCS+= rc4-md5-x86_64.pl rc4-x86_64.pl
# sha
-SRCS+= sha1-x86_64.pl sha512-x86_64.pl
+SRCS+= sha1-mb-x86_64.pl sha1-x86_64.pl sha256-mb-x86_64.pl sha512-x86_64.pl
# whrlpool
SRCS+= wp-x86_64.pl
@@ -72,7 +77,6 @@ x86_64cpuid.cmt: x86_64cpuid.pl
${LCRYPTO_SRC}/crypto/bf/asm \
${LCRYPTO_SRC}/crypto/bn/asm \
${LCRYPTO_SRC}/crypto/camellia/asm \
- ${LCRYPTO_SRC}/crypto/cast/asm \
${LCRYPTO_SRC}/crypto/des/asm \
${LCRYPTO_SRC}/crypto/md5/asm \
${LCRYPTO_SRC}/crypto/modes/asm \
@@ -96,9 +100,6 @@ SRCS+= bn-586.pl co-586.pl x86-gf2m.pl x86-mont.pl
# camellia
SRCS+= cmll-x86.pl
-# cast
-SRCS+= cast-586.pl
-
# des
SRCS+= crypt586.pl des-586.pl
diff --git a/secure/lib/libcrypto/Makefile.inc b/secure/lib/libcrypto/Makefile.inc
index 8b47ad2..a9387c0 100644
--- a/secure/lib/libcrypto/Makefile.inc
+++ b/secure/lib/libcrypto/Makefile.inc
@@ -3,7 +3,7 @@
.include <bsd.own.mk>
# OpenSSL version used for manual page generation
-OPENSSL_VER= 1.0.1p
+OPENSSL_VER= 1.0.2d
OPENSSL_DATE= 2015-07-09
LCRYPTO_SRC= ${.CURDIR}/../../../crypto/openssl
@@ -13,16 +13,25 @@ CFLAGS+= -DTERMIOS -DANSI_SOURCE
CFLAGS+= -I${LCRYPTO_SRC} -I${LCRYPTO_SRC}/crypto -I${.OBJDIR}
CFLAGS+= -DOPENSSL_THREADS -DDSO_DLFCN -DHAVE_DLFCN_H
+.include <bsd.endian.mk>
+
+.if ${TARGET_ENDIANNESS} == 1234
+CFLAGS+=-DL_ENDIAN
+.elif ${TARGET_ENDIANNESS} == 4321
+CFLAGS+=-DB_ENDIAN
+.endif
+
.if ${MACHINE_CPUARCH} == "amd64"
-CFLAGS+=-DL_ENDIAN -DOPENSSL_IA32_SSE2
+CFLAGS+=-DOPENSSL_IA32_SSE2
CFLAGS+=-DAES_ASM -DBSAES_ASM -DVPAES_ASM
+CFLAGS+=-DECP_NISTZ256_ASM
CFLAGS+=-DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m
CFLAGS+=-DMD5_ASM
CFLAGS+=-DGHASH_ASM
CFLAGS+=-DSHA1_ASM -DSHA256_ASM -DSHA512_ASM
CFLAGS+=-DWHIRLPOOL_ASM
.elif ${MACHINE_CPUARCH} == "i386"
-CFLAGS+=-DL_ENDIAN -DOPENSSL_IA32_SSE2
+CFLAGS+=-DOPENSSL_IA32_SSE2
CFLAGS+=-DAES_ASM -DVPAES_ASM
CFLAGS+=-DOPENSSL_BN_ASM_PART_WORDS -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_GF2m
CFLAGS+=-DMD5_ASM
diff --git a/secure/lib/libcrypto/Makefile.man b/secure/lib/libcrypto/Makefile.man
index 11c2cc9..239d1e1 100644
--- a/secure/lib/libcrypto/Makefile.man
+++ b/secure/lib/libcrypto/Makefile.man
@@ -4,6 +4,7 @@ MAN+= ASN1_OBJECT_new.3
MAN+= ASN1_STRING_length.3
MAN+= ASN1_STRING_new.3
MAN+= ASN1_STRING_print_ex.3
+MAN+= ASN1_TIME_set.3
MAN+= ASN1_generate_nconf.3
MAN+= BIO_ctrl.3
MAN+= BIO_f_base64.3
@@ -80,6 +81,12 @@ MAN+= DSA_new.3
MAN+= DSA_set_method.3
MAN+= DSA_sign.3
MAN+= DSA_size.3
+MAN+= EC_GFp_simple_method.3
+MAN+= EC_GROUP_copy.3
+MAN+= EC_GROUP_new.3
+MAN+= EC_KEY_new.3
+MAN+= EC_POINT_add.3
+MAN+= EC_POINT_new.3
MAN+= ERR_GET_LIB.3
MAN+= ERR_clear_error.3
MAN+= ERR_error_string.3
@@ -118,6 +125,7 @@ MAN+= OPENSSL_Applink.3
MAN+= OPENSSL_VERSION_NUMBER.3
MAN+= OPENSSL_config.3
MAN+= OPENSSL_ia32cap.3
+MAN+= OPENSSL_instrument_bus.3
MAN+= OPENSSL_load_builtin_modules.3
MAN+= OpenSSL_add_all_algorithms.3
MAN+= PEM_write_bio_CMS_stream.3
@@ -152,6 +160,7 @@ MAN+= SMIME_read_CMS.3
MAN+= SMIME_read_PKCS7.3
MAN+= SMIME_write_CMS.3
MAN+= SMIME_write_PKCS7.3
+MAN+= SSLeay_version.3
MAN+= X509_NAME_ENTRY_get_object.3
MAN+= X509_NAME_add_entry_by_txt.3
MAN+= X509_NAME_get_index_by_NID.3
@@ -162,6 +171,7 @@ MAN+= X509_STORE_CTX_new.3
MAN+= X509_STORE_CTX_set_verify_cb.3
MAN+= X509_STORE_set_verify_cb_func.3
MAN+= X509_VERIFY_PARAM_set_flags.3
+MAN+= X509_check_host.3
MAN+= X509_new.3
MAN+= X509_verify_cert.3
MAN+= bio.3
@@ -174,6 +184,7 @@ MAN+= d2i_ASN1_OBJECT.3
MAN+= d2i_CMS_ContentInfo.3
MAN+= d2i_DHparams.3
MAN+= d2i_DSAPublicKey.3
+MAN+= d2i_ECPKParameters.3
MAN+= d2i_ECPrivateKey.3
MAN+= d2i_PKCS8PrivateKey.3
MAN+= d2i_RSAPublicKey.3
@@ -186,6 +197,7 @@ MAN+= d2i_X509_SIG.3
MAN+= des.3
MAN+= dh.3
MAN+= dsa.3
+MAN+= ec.3
MAN+= ecdsa.3
MAN+= engine.3
MAN+= err.3
@@ -214,9 +226,16 @@ MLINKS+= ASN1_STRING_length.3 ASN1_STRING_set.3
MLINKS+= ASN1_STRING_length.3 ASN1_STRING_length_set.3
MLINKS+= ASN1_STRING_length.3 ASN1_STRING_type.3
MLINKS+= ASN1_STRING_length.3 ASN1_STRING_data.3
+MLINKS+= ASN1_STRING_length.3 ASN1_STRING_to_UTF8.3
MLINKS+= ASN1_STRING_new.3 ASN1_STRING_type_new.3
MLINKS+= ASN1_STRING_new.3 ASN1_STRING_free.3
MLINKS+= ASN1_STRING_print_ex.3 ASN1_STRING_print_ex_fp.3
+MLINKS+= ASN1_STRING_print_ex.3 ASN1_STRING_print.3
+MLINKS+= ASN1_TIME_set.3 ASN1_TIME_adj.3
+MLINKS+= ASN1_TIME_set.3 ASN1_TIME_check.3
+MLINKS+= ASN1_TIME_set.3 ASN1_TIME_set_string.3
+MLINKS+= ASN1_TIME_set.3 ASN1_TIME_print.3
+MLINKS+= ASN1_TIME_set.3 ASN1_TIME_diff.3
MLINKS+= ASN1_generate_nconf.3 ASN1_generate_v3.3
MLINKS+= BIO_ctrl.3 BIO_callback_ctrl.3
MLINKS+= BIO_ctrl.3 BIO_ptr_ctrl.3
@@ -252,6 +271,7 @@ MLINKS+= BIO_f_ssl.3 BIO_new_buffer_ssl_connect.3
MLINKS+= BIO_f_ssl.3 BIO_ssl_copy_session_id.3
MLINKS+= BIO_f_ssl.3 BIO_ssl_shutdown.3
MLINKS+= BIO_find_type.3 BIO_next.3
+MLINKS+= BIO_find_type.3 BIO_method_type.3
MLINKS+= BIO_new.3 BIO_set.3
MLINKS+= BIO_new.3 BIO_free.3
MLINKS+= BIO_new.3 BIO_vfree.3
@@ -262,6 +282,7 @@ MLINKS+= BIO_read.3 BIO_gets.3
MLINKS+= BIO_read.3 BIO_puts.3
MLINKS+= BIO_s_accept.3 BIO_set_accept_port.3
MLINKS+= BIO_s_accept.3 BIO_get_accept_port.3
+MLINKS+= BIO_s_accept.3 BIO_new_accept.3
MLINKS+= BIO_s_accept.3 BIO_set_nbio_accept.3
MLINKS+= BIO_s_accept.3 BIO_set_accept_bios.3
MLINKS+= BIO_s_accept.3 BIO_set_bind_mode.3
@@ -278,6 +299,7 @@ MLINKS+= BIO_s_bio.3 BIO_ctrl_get_write_guarantee.3
MLINKS+= BIO_s_bio.3 BIO_get_read_request.3
MLINKS+= BIO_s_bio.3 BIO_ctrl_get_read_request.3
MLINKS+= BIO_s_bio.3 BIO_ctrl_reset_read_request.3
+MLINKS+= BIO_s_connect.3 BIO_new_connect.3
MLINKS+= BIO_s_connect.3 BIO_set_conn_hostname.3
MLINKS+= BIO_s_connect.3 BIO_set_conn_port.3
MLINKS+= BIO_s_connect.3 BIO_set_conn_ip.3
@@ -323,6 +345,7 @@ MLINKS+= BN_BLINDING_new.3 BN_BLINDING_convert_ex.3
MLINKS+= BN_BLINDING_new.3 BN_BLINDING_invert_ex.3
MLINKS+= BN_BLINDING_new.3 BN_BLINDING_get_thread_id.3
MLINKS+= BN_BLINDING_new.3 BN_BLINDING_set_thread_id.3
+MLINKS+= BN_BLINDING_new.3 BN_BLINDING_thread_id.3
MLINKS+= BN_BLINDING_new.3 BN_BLINDING_get_flags.3
MLINKS+= BN_BLINDING_new.3 BN_BLINDING_set_flags.3
MLINKS+= BN_BLINDING_new.3 BN_BLINDING_create_param.3
@@ -362,6 +385,12 @@ MLINKS+= BN_cmp.3 BN_is_one.3
MLINKS+= BN_cmp.3 BN_is_word.3
MLINKS+= BN_cmp.3 BN_is_odd.3
MLINKS+= BN_copy.3 BN_dup.3
+MLINKS+= BN_generate_prime.3 BN_generate_prime_ex.3
+MLINKS+= BN_generate_prime.3 BN_is_prime_ex.3
+MLINKS+= BN_generate_prime.3 BN_is_prime_fasttest_ex.3
+MLINKS+= BN_generate_prime.3 BN_GENCB_call.3
+MLINKS+= BN_generate_prime.3 BN_GENCB_set_old.3
+MLINKS+= BN_generate_prime.3 BN_GENCB_set.3
MLINKS+= BN_generate_prime.3 BN_is_prime.3
MLINKS+= BN_generate_prime.3 BN_is_prime_fasttest.3
MLINKS+= BN_mod_mul_montgomery.3 BN_MONT_CTX_new.3
@@ -383,6 +412,8 @@ MLINKS+= BN_new.3 BN_clear_free.3
MLINKS+= BN_num_bytes.3 BN_num_bits.3
MLINKS+= BN_num_bytes.3 BN_num_bits_word.3
MLINKS+= BN_rand.3 BN_pseudo_rand.3
+MLINKS+= BN_rand.3 BN_rand_range.3
+MLINKS+= BN_rand.3 BN_pseudo_rand_range.3
MLINKS+= BN_set_bit.3 BN_clear_bit.3
MLINKS+= BN_set_bit.3 BN_is_bit_set.3
MLINKS+= BN_set_bit.3 BN_mask_bits.3
@@ -397,6 +428,7 @@ MLINKS+= BN_zero.3 BN_get_word.3
MLINKS+= CMS_add0_cert.3 CMS_add1_cert.3
MLINKS+= CMS_add0_cert.3 CMS_get1_certs.3
MLINKS+= CMS_add0_cert.3 CMS_add0_crl.3
+MLINKS+= CMS_add0_cert.3 CMS_add1_crl.3
MLINKS+= CMS_add0_cert.3 CMS_get1_crls.3
MLINKS+= CMS_add1_recipient_cert.3 CMS_add0_recipient_key.3
MLINKS+= CMS_add1_signer.3 CMS_SignerInfo_sign.3
@@ -408,20 +440,24 @@ MLINKS+= CMS_get0_RecipientInfos.3 CMS_RecipientInfo_kekri_get0_id.3
MLINKS+= CMS_get0_RecipientInfos.3 CMS_RecipientInfo_kekri_id_cmp.3
MLINKS+= CMS_get0_RecipientInfos.3 CMS_RecipientInfo_set0_key.3
MLINKS+= CMS_get0_RecipientInfos.3 CMS_RecipientInfo_decrypt.3
+MLINKS+= CMS_get0_RecipientInfos.3 CMS_RecipientInfo_encrypt.3
MLINKS+= CMS_get0_SignerInfos.3 CMS_SignerInfo_get0_signer_id.3
+MLINKS+= CMS_get0_SignerInfos.3 CMS_SignerInfo_get0_signature.3
MLINKS+= CMS_get0_SignerInfos.3 CMS_SignerInfo_cert_cmp.3
-MLINKS+= CMS_get0_SignerInfos.3 CMS_set1_signer_certs.3
+MLINKS+= CMS_get0_SignerInfos.3 CMS_set1_signer_cert.3
MLINKS+= CMS_get0_type.3 CMS_set1_eContentType.3
MLINKS+= CMS_get0_type.3 CMS_get0_eContentType.3
MLINKS+= CMS_get0_type.3 CMS_get0_content.3
MLINKS+= CMS_get1_ReceiptRequest.3 CMS_ReceiptRequest_create0.3
MLINKS+= CMS_get1_ReceiptRequest.3 CMS_add1_ReceiptRequest.3
MLINKS+= CMS_get1_ReceiptRequest.3 CMS_ReceiptRequest_get0_values.3
+MLINKS+= CMS_verify.3 CMS_get0_signers.3
MLINKS+= CONF_modules_free.3 CONF_modules_finish.3
MLINKS+= CONF_modules_free.3 CONF_modules_unload.3
MLINKS+= CONF_modules_load_file.3 CONF_modules_load.3
MLINKS+= CRYPTO_set_ex_data.3 CRYPTO_get_ex_data.3
MLINKS+= DH_generate_key.3 DH_compute_key.3
+MLINKS+= DH_generate_parameters.3 DH_generate_parameters_ex.3
MLINKS+= DH_generate_parameters.3 DH_check.3
MLINKS+= DH_get_ex_new_index.3 DH_set_ex_data.3
MLINKS+= DH_get_ex_new_index.3 DH_get_ex_data.3
@@ -432,6 +468,7 @@ MLINKS+= DH_set_method.3 DH_new_method.3
MLINKS+= DH_set_method.3 DH_OpenSSL.3
MLINKS+= DSA_SIG_new.3 DSA_SIG_free.3
MLINKS+= DSA_do_sign.3 DSA_do_verify.3
+MLINKS+= DSA_generate_parameters.3 DSA_generate_parameters_ex.3
MLINKS+= DSA_get_ex_new_index.3 DSA_set_ex_data.3
MLINKS+= DSA_get_ex_new_index.3 DSA_get_ex_data.3
MLINKS+= DSA_new.3 DSA_free.3
@@ -441,6 +478,101 @@ MLINKS+= DSA_set_method.3 DSA_new_method.3
MLINKS+= DSA_set_method.3 DSA_OpenSSL.3
MLINKS+= DSA_sign.3 DSA_sign_setup.3
MLINKS+= DSA_sign.3 DSA_verify.3
+MLINKS+= EC_GFp_simple_method.3 EC_GFp_mont_method.3
+MLINKS+= EC_GFp_simple_method.3 EC_GFp_nist_method.3
+MLINKS+= EC_GFp_simple_method.3 EC_GFp_nistp224_method.3
+MLINKS+= EC_GFp_simple_method.3 EC_GFp_nistp256_method.3
+MLINKS+= EC_GFp_simple_method.3 EC_GFp_nistp521_method.3
+MLINKS+= EC_GFp_simple_method.3 EC_GF2m_simple_method.3
+MLINKS+= EC_GFp_simple_method.3 EC_METHOD_get_field_type.3
+MLINKS+= EC_GROUP_copy.3 EC_GROUP_dup.3
+MLINKS+= EC_GROUP_copy.3 EC_GROUP_method_of.3
+MLINKS+= EC_GROUP_copy.3 EC_GROUP_set_generator.3
+MLINKS+= EC_GROUP_copy.3 EC_GROUP_get0_generator.3
+MLINKS+= EC_GROUP_copy.3 EC_GROUP_get_order.3
+MLINKS+= EC_GROUP_copy.3 EC_GROUP_get_cofactor.3
+MLINKS+= EC_GROUP_copy.3 EC_GROUP_set_curve_name.3
+MLINKS+= EC_GROUP_copy.3 EC_GROUP_get_curve_name.3
+MLINKS+= EC_GROUP_copy.3 EC_GROUP_set_asn1_flag.3
+MLINKS+= EC_GROUP_copy.3 EC_GROUP_get_asn1_flag.3
+MLINKS+= EC_GROUP_copy.3 EC_GROUP_set_point_conversion_form.3
+MLINKS+= EC_GROUP_copy.3 EC_GROUP_get_point_conversion_form.3
+MLINKS+= EC_GROUP_copy.3 EC_GROUP_get0_seed.3
+MLINKS+= EC_GROUP_copy.3 EC_GROUP_get_seed_len.3
+MLINKS+= EC_GROUP_copy.3 EC_GROUP_set_seed.3
+MLINKS+= EC_GROUP_copy.3 EC_GROUP_get_degree.3
+MLINKS+= EC_GROUP_copy.3 EC_GROUP_check.3
+MLINKS+= EC_GROUP_copy.3 EC_GROUP_check_discriminant.3
+MLINKS+= EC_GROUP_copy.3 EC_GROUP_cmp.3
+MLINKS+= EC_GROUP_copy.3 EC_GROUP_get_basis_type.3
+MLINKS+= EC_GROUP_copy.3 EC_GROUP_get_trinomial_basis.3
+MLINKS+= EC_GROUP_copy.3 EC_GROUP_get_pentanomial_basis.3
+MLINKS+= EC_GROUP_new.3 EC_GROUP_free.3
+MLINKS+= EC_GROUP_new.3 EC_GROUP_clear_free.3
+MLINKS+= EC_GROUP_new.3 EC_GROUP_new_curve_GFp.3
+MLINKS+= EC_GROUP_new.3 EC_GROUP_new_curve_GF2m.3
+MLINKS+= EC_GROUP_new.3 EC_GROUP_new_by_curve_name.3
+MLINKS+= EC_GROUP_new.3 EC_GROUP_set_curve_GFp.3
+MLINKS+= EC_GROUP_new.3 EC_GROUP_get_curve_GFp.3
+MLINKS+= EC_GROUP_new.3 EC_GROUP_set_curve_GF2m.3
+MLINKS+= EC_GROUP_new.3 EC_GROUP_get_curve_GF2m.3
+MLINKS+= EC_GROUP_new.3 EC_get_builtin_curves.3
+MLINKS+= EC_KEY_new.3 EC_KEY_get_flags.3
+MLINKS+= EC_KEY_new.3 EC_KEY_set_flags.3
+MLINKS+= EC_KEY_new.3 EC_KEY_clear_flags.3
+MLINKS+= EC_KEY_new.3 EC_KEY_new_by_curve_name.3
+MLINKS+= EC_KEY_new.3 EC_KEY_free.3
+MLINKS+= EC_KEY_new.3 EC_KEY_copy.3
+MLINKS+= EC_KEY_new.3 EC_KEY_dup.3
+MLINKS+= EC_KEY_new.3 EC_KEY_up_ref.3
+MLINKS+= EC_KEY_new.3 EC_KEY_get0_group.3
+MLINKS+= EC_KEY_new.3 EC_KEY_set_group.3
+MLINKS+= EC_KEY_new.3 EC_KEY_get0_private_key.3
+MLINKS+= EC_KEY_new.3 EC_KEY_set_private_key.3
+MLINKS+= EC_KEY_new.3 EC_KEY_get0_public_key.3
+MLINKS+= EC_KEY_new.3 EC_KEY_set_public_key.3
+MLINKS+= EC_KEY_new.3 EC_KEY_get_enc_flags.3
+MLINKS+= EC_KEY_new.3 EC_KEY_set_enc_flags.3
+MLINKS+= EC_KEY_new.3 EC_KEY_get_conv_form.3
+MLINKS+= EC_KEY_new.3 EC_KEY_set_conv_form.3
+MLINKS+= EC_KEY_new.3 EC_KEY_get_key_method_data.3
+MLINKS+= EC_KEY_new.3 EC_KEY_insert_key_method_data.3
+MLINKS+= EC_KEY_new.3 EC_KEY_set_asn1_flag.3
+MLINKS+= EC_KEY_new.3 EC_KEY_precompute_mult.3
+MLINKS+= EC_KEY_new.3 EC_KEY_generate_key.3
+MLINKS+= EC_KEY_new.3 EC_KEY_check_key.3
+MLINKS+= EC_KEY_new.3 EC_KEY_set_public_key_affine_coordinates.3
+MLINKS+= EC_POINT_add.3 EC_POINT_dbl.3
+MLINKS+= EC_POINT_add.3 EC_POINT_invert.3
+MLINKS+= EC_POINT_add.3 EC_POINT_is_at_infinity.3
+MLINKS+= EC_POINT_add.3 EC_POINT_is_on_curve.3
+MLINKS+= EC_POINT_add.3 EC_POINT_cmp.3
+MLINKS+= EC_POINT_add.3 EC_POINT_make_affine.3
+MLINKS+= EC_POINT_add.3 EC_POINTs_make_affine.3
+MLINKS+= EC_POINT_add.3 EC_POINTs_mul.3
+MLINKS+= EC_POINT_add.3 EC_POINT_mul.3
+MLINKS+= EC_POINT_add.3 EC_GROUP_precompute_mult.3
+MLINKS+= EC_POINT_add.3 EC_GROUP_have_precompute_mult.3
+MLINKS+= EC_POINT_new.3 EC_POINT_free.3
+MLINKS+= EC_POINT_new.3 EC_POINT_clear_free.3
+MLINKS+= EC_POINT_new.3 EC_POINT_copy.3
+MLINKS+= EC_POINT_new.3 EC_POINT_dup.3
+MLINKS+= EC_POINT_new.3 EC_POINT_method_of.3
+MLINKS+= EC_POINT_new.3 EC_POINT_set_to_infinity.3
+MLINKS+= EC_POINT_new.3 EC_POINT_set_Jprojective_coordinates.3
+MLINKS+= EC_POINT_new.3 EC_POINT_get_Jprojective_coordinates_GFp.3
+MLINKS+= EC_POINT_new.3 EC_POINT_set_affine_coordinates_GFp.3
+MLINKS+= EC_POINT_new.3 EC_POINT_get_affine_coordinates_GFp.3
+MLINKS+= EC_POINT_new.3 EC_POINT_set_compressed_coordinates_GFp.3
+MLINKS+= EC_POINT_new.3 EC_POINT_set_affine_coordinates_GF2m.3
+MLINKS+= EC_POINT_new.3 EC_POINT_get_affine_coordinates_GF2m.3
+MLINKS+= EC_POINT_new.3 EC_POINT_set_compressed_coordinates_GF2m.3
+MLINKS+= EC_POINT_new.3 EC_POINT_point2oct.3
+MLINKS+= EC_POINT_new.3 EC_POINT_oct2point.3
+MLINKS+= EC_POINT_new.3 EC_POINT_point2bn.3
+MLINKS+= EC_POINT_new.3 EC_POINT_bn2point.3
+MLINKS+= EC_POINT_new.3 EC_POINT_point2hex.3
+MLINKS+= EC_POINT_new.3 EC_POINT_hex2point.3
MLINKS+= ERR_GET_LIB.3 ERR_GET_FUNC.3
MLINKS+= ERR_GET_LIB.3 ERR_GET_REASON.3
MLINKS+= ERR_error_string.3 ERR_error_string_n.3
@@ -461,6 +593,7 @@ MLINKS+= ERR_load_strings.3 ERR_PACK.3
MLINKS+= ERR_load_strings.3 ERR_get_next_error_library.3
MLINKS+= ERR_print_errors.3 ERR_print_errors_fp.3
MLINKS+= ERR_put_error.3 ERR_add_error_data.3
+MLINKS+= ERR_remove_state.3 ERR_remove_thread_state.3
MLINKS+= ERR_set_mark.3 ERR_pop_to_mark.3
MLINKS+= EVP_DigestInit.3 EVP_MD_CTX_init.3
MLINKS+= EVP_DigestInit.3 EVP_MD_CTX_create.3
@@ -471,6 +604,7 @@ MLINKS+= EVP_DigestInit.3 EVP_MD_CTX_cleanup.3
MLINKS+= EVP_DigestInit.3 EVP_MD_CTX_destroy.3
MLINKS+= EVP_DigestInit.3 EVP_MAX_MD_SIZE.3
MLINKS+= EVP_DigestInit.3 EVP_MD_CTX_copy_ex.3
+MLINKS+= EVP_DigestInit.3 EVP_DigestFinal.3
MLINKS+= EVP_DigestInit.3 EVP_MD_CTX_copy.3
MLINKS+= EVP_DigestInit.3 EVP_MD_type.3
MLINKS+= EVP_DigestInit.3 EVP_MD_pkey_type.3
@@ -541,10 +675,64 @@ MLINKS+= EVP_EncryptInit.3 EVP_CIPHER_CTX_mode.3
MLINKS+= EVP_EncryptInit.3 EVP_CIPHER_param_to_asn1.3
MLINKS+= EVP_EncryptInit.3 EVP_CIPHER_asn1_to_param.3
MLINKS+= EVP_EncryptInit.3 EVP_CIPHER_CTX_set_padding.3
+MLINKS+= EVP_EncryptInit.3 EVP_enc_null.3
+MLINKS+= EVP_EncryptInit.3 EVP_des_cbc.3
+MLINKS+= EVP_EncryptInit.3 EVP_des_ecb.3
+MLINKS+= EVP_EncryptInit.3 EVP_des_cfb.3
+MLINKS+= EVP_EncryptInit.3 EVP_des_ofb.3
+MLINKS+= EVP_EncryptInit.3 EVP_des_ede_cbc.3
+MLINKS+= EVP_EncryptInit.3 EVP_des_ede.3
+MLINKS+= EVP_EncryptInit.3 EVP_des_ede_ofb.3
+MLINKS+= EVP_EncryptInit.3 EVP_des_ede_cfb.3
+MLINKS+= EVP_EncryptInit.3 EVP_des_ede3_cbc.3
+MLINKS+= EVP_EncryptInit.3 EVP_des_ede3.3
+MLINKS+= EVP_EncryptInit.3 EVP_des_ede3_ofb.3
+MLINKS+= EVP_EncryptInit.3 EVP_des_ede3_cfb.3
+MLINKS+= EVP_EncryptInit.3 EVP_desx_cbc.3
+MLINKS+= EVP_EncryptInit.3 EVP_rc4.3
+MLINKS+= EVP_EncryptInit.3 EVP_rc4_40.3
+MLINKS+= EVP_EncryptInit.3 EVP_idea_cbc.3
+MLINKS+= EVP_EncryptInit.3 EVP_idea_ecb.3
+MLINKS+= EVP_EncryptInit.3 EVP_idea_cfb.3
+MLINKS+= EVP_EncryptInit.3 EVP_idea_ofb.3
+MLINKS+= EVP_EncryptInit.3 EVP_idea_cbc.3
+MLINKS+= EVP_EncryptInit.3 EVP_rc2_cbc.3
+MLINKS+= EVP_EncryptInit.3 EVP_rc2_ecb.3
+MLINKS+= EVP_EncryptInit.3 EVP_rc2_cfb.3
+MLINKS+= EVP_EncryptInit.3 EVP_rc2_ofb.3
+MLINKS+= EVP_EncryptInit.3 EVP_rc2_40_cbc.3
+MLINKS+= EVP_EncryptInit.3 EVP_rc2_64_cbc.3
+MLINKS+= EVP_EncryptInit.3 EVP_bf_cbc.3
+MLINKS+= EVP_EncryptInit.3 EVP_bf_ecb.3
+MLINKS+= EVP_EncryptInit.3 EVP_bf_cfb.3
+MLINKS+= EVP_EncryptInit.3 EVP_bf_ofb.3
+MLINKS+= EVP_EncryptInit.3 EVP_cast5_cbc.3
+MLINKS+= EVP_EncryptInit.3 EVP_cast5_ecb.3
+MLINKS+= EVP_EncryptInit.3 EVP_cast5_cfb.3
+MLINKS+= EVP_EncryptInit.3 EVP_cast5_ofb.3
+MLINKS+= EVP_EncryptInit.3 EVP_rc5_32_12_16_cbc.3
+MLINKS+= EVP_EncryptInit.3 EVP_rc5_32_12_16_ecb.3
+MLINKS+= EVP_EncryptInit.3 EVP_rc5_32_12_16_cfb.3
+MLINKS+= EVP_EncryptInit.3 EVP_rc5_32_12_16_ofb.3
+MLINKS+= EVP_EncryptInit.3 EVP_aes_128_gcm.3
+MLINKS+= EVP_EncryptInit.3 EVP_aes_192_gcm.3
+MLINKS+= EVP_EncryptInit.3 EVP_aes_256_gcm.3
+MLINKS+= EVP_EncryptInit.3 EVP_aes_128_ccm.3
+MLINKS+= EVP_EncryptInit.3 EVP_aes_192_ccm.3
+MLINKS+= EVP_EncryptInit.3 EVP_aes_256_ccm.3
MLINKS+= EVP_OpenInit.3 EVP_OpenUpdate.3
MLINKS+= EVP_OpenInit.3 EVP_OpenFinal.3
-MLINKS+= EVP_PKEY_CTX_ctrl.3 EVP_PKEY_ctrl.3
-MLINKS+= EVP_PKEY_CTX_ctrl.3 EVP_PKEY_ctrl_str.3
+MLINKS+= EVP_PKEY_CTX_ctrl.3 EVP_PKEY_CTX_ctrl_str.3
+MLINKS+= EVP_PKEY_CTX_ctrl.3 EVP_PKEY_get_default_digest_nid.3
+MLINKS+= EVP_PKEY_CTX_ctrl.3 EVP_PKEY_CTX_set_signature_md.3
+MLINKS+= EVP_PKEY_CTX_ctrl.3 EVP_PKEY_CTX_set_rsa_padding.3
+MLINKS+= EVP_PKEY_CTX_ctrl.3 EVP_PKEY_CTX_set_rsa_pss_saltlen.3
+MLINKS+= EVP_PKEY_CTX_ctrl.3 EVP_PKEY_CTX_set_rsa_rsa_keygen_bits.3
+MLINKS+= EVP_PKEY_CTX_ctrl.3 EVP_PKEY_CTX_set_rsa_keygen_pubexp.3
+MLINKS+= EVP_PKEY_CTX_ctrl.3 EVP_PKEY_CTX_set_dsa_paramgen_bits.3
+MLINKS+= EVP_PKEY_CTX_ctrl.3 EVP_PKEY_CTX_set_dh_paramgen_prime_len.3
+MLINKS+= EVP_PKEY_CTX_ctrl.3 EVP_PKEY_CTX_set_dh_paramgen_generator.3
+MLINKS+= EVP_PKEY_CTX_ctrl.3 EVP_PKEY_CTX_set_ec_paramgen_curve_nid.3
MLINKS+= EVP_PKEY_CTX_new.3 EVP_PKEY_CTX_new_id.3
MLINKS+= EVP_PKEY_CTX_new.3 EVP_PKEY_CTX_dup.3
MLINKS+= EVP_PKEY_CTX_new.3 EVP_PKEY_CTX_free.3
@@ -603,18 +791,27 @@ MLINKS+= OBJ_nid2obj.3 OBJ_cleanup.3
MLINKS+= OPENSSL_VERSION_NUMBER.3 SSLeay.3
MLINKS+= OPENSSL_VERSION_NUMBER.3 SSLeay_version.3
MLINKS+= OPENSSL_config.3 OPENSSL_no_config.3
+MLINKS+= OPENSSL_ia32cap.3 OPENSSL_ia32cap_loc.3
+MLINKS+= OPENSSL_instrument_bus.3 OPENSSL_instrument_bus2.3
+MLINKS+= OPENSSL_load_builtin_modules.3 ASN1_add_oid_module.3
+MLINKS+= OPENSSL_load_builtin_modules.3 ENGINE_add_conf_module.3
MLINKS+= OpenSSL_add_all_algorithms.3 OpenSSL_add_all_ciphers.3
MLINKS+= OpenSSL_add_all_algorithms.3 OpenSSL_add_all_digests.3
+MLINKS+= OpenSSL_add_all_algorithms.3 EVP_cleanup.3
+MLINKS+= PKCS7_verify.3 PKCS7_get0_signers.3
MLINKS+= RAND_add.3 RAND_seed.3
MLINKS+= RAND_add.3 RAND_status.3
MLINKS+= RAND_add.3 RAND_event.3
MLINKS+= RAND_add.3 RAND_screen.3
MLINKS+= RAND_bytes.3 RAND_pseudo_bytes.3
+MLINKS+= RAND_egd.3 RAND_egd_bytes.3
+MLINKS+= RAND_egd.3 RAND_query_egd_bytes.3
MLINKS+= RAND_load_file.3 RAND_write_file.3
MLINKS+= RAND_load_file.3 RAND_file_name.3
MLINKS+= RAND_set_rand_method.3 RAND_get_rand_method.3
MLINKS+= RAND_set_rand_method.3 RAND_SSLeay.3
MLINKS+= RSA_blinding_on.3 RSA_blinding_off.3
+MLINKS+= RSA_generate_key.3 RSA_generate_key_ex.3
MLINKS+= RSA_get_ex_new_index.3 RSA_set_ex_data.3
MLINKS+= RSA_get_ex_new_index.3 RSA_get_ex_data.3
MLINKS+= RSA_new.3 RSA_free.3
@@ -690,6 +887,16 @@ MLINKS+= X509_VERIFY_PARAM_set_flags.3 X509_VERIFY_PARAM_get_depth.3
MLINKS+= X509_VERIFY_PARAM_set_flags.3 X509_VERIFY_PARAM_set_time.3
MLINKS+= X509_VERIFY_PARAM_set_flags.3 X509_VERIFY_PARAM_add0_policy.3
MLINKS+= X509_VERIFY_PARAM_set_flags.3 X509_VERIFY_PARAM_set1_policies.3
+MLINKS+= X509_VERIFY_PARAM_set_flags.3 X509_VERIFY_PARAM_set1_host.3
+MLINKS+= X509_VERIFY_PARAM_set_flags.3 X509_VERIFY_PARAM_add1_host.3
+MLINKS+= X509_VERIFY_PARAM_set_flags.3 X509_VERIFY_PARAM_set_hostflags.3
+MLINKS+= X509_VERIFY_PARAM_set_flags.3 X509_VERIFY_PARAM_get0_peername.3
+MLINKS+= X509_VERIFY_PARAM_set_flags.3 X509_VERIFY_PARAM_set1_email.3
+MLINKS+= X509_VERIFY_PARAM_set_flags.3 X509_VERIFY_PARAM_set1_ip.3
+MLINKS+= X509_VERIFY_PARAM_set_flags.3 X509_VERIFY_PARAM_set1_ip_asc.3
+MLINKS+= X509_check_host.3 X509_check_email.3
+MLINKS+= X509_check_host.3 X509_check_ip.3
+MLINKS+= X509_check_host.3 X509_check_ip_asc.3
MLINKS+= X509_new.3 X509_free.3
MLINKS+= blowfish.3 BF_set_key.3
MLINKS+= blowfish.3 BF_encrypt.3
@@ -740,8 +947,17 @@ MLINKS+= d2i_DSAPublicKey.3 d2i_DSAPrivateKey.3
MLINKS+= d2i_DSAPublicKey.3 i2d_DSAPrivateKey.3
MLINKS+= d2i_DSAPublicKey.3 d2i_DSA_PUBKEY.3
MLINKS+= d2i_DSAPublicKey.3 i2d_DSA_PUBKEY.3
+MLINKS+= d2i_DSAPublicKey.3 d2i_DSAparams.3
+MLINKS+= d2i_DSAPublicKey.3 i2d_DSAparams.3
MLINKS+= d2i_DSAPublicKey.3 d2i_DSA_SIG.3
MLINKS+= d2i_DSAPublicKey.3 i2d_DSA_SIG.3
+MLINKS+= d2i_ECPKParameters.3 i2d_ECPKParameters.3
+MLINKS+= d2i_ECPKParameters.3 d2i_ECPKParameters_bio.3
+MLINKS+= d2i_ECPKParameters.3 i2d_ECPKParameters_bio.3
+MLINKS+= d2i_ECPKParameters.3 d2i_ECPKParameters_fp.3
+MLINKS+= d2i_ECPKParameters.3 i2d_ECPKParameters_fp.3
+MLINKS+= d2i_ECPKParameters.3 ECPKParameters_print.3
+MLINKS+= d2i_ECPKParameters.3 ECPKParameters_print_fp.3
MLINKS+= d2i_ECPrivateKey.3 i2d_ECPrivateKey.3
MLINKS+= d2i_ECPrivateKey.3 d2i_ECPrivate_key.3
MLINKS+= d2i_PKCS8PrivateKey.3 d2i_PKCS8PrivateKey_bio.3
@@ -765,7 +981,7 @@ MLINKS+= d2i_X509.3 i2d_X509_fp.3
MLINKS+= d2i_X509_ALGOR.3 i2d_X509_ALGOR.3
MLINKS+= d2i_X509_CRL.3 i2d_X509_CRL.3
MLINKS+= d2i_X509_CRL.3 d2i_X509_CRL_bio.3
-MLINKS+= d2i_X509_CRL.3 d2i_509_CRL_fp.3
+MLINKS+= d2i_X509_CRL.3 d2i_X509_CRL_fp.3
MLINKS+= d2i_X509_CRL.3 i2d_X509_CRL_bio.3
MLINKS+= d2i_X509_CRL.3 i2d_X509_CRL_fp.3
MLINKS+= d2i_X509_NAME.3 i2d_X509_NAME.3
@@ -807,10 +1023,25 @@ MLINKS+= des.3 DES_fcrypt.3
MLINKS+= des.3 DES_crypt.3
MLINKS+= des.3 DES_enc_read.3
MLINKS+= des.3 DES_enc_write.3
+MLINKS+= ecdsa.3 ECDSA_SIG_new.3
+MLINKS+= ecdsa.3 ECDSA_SIG_free.3
+MLINKS+= ecdsa.3 i2d_ECDSA_SIG.3
+MLINKS+= ecdsa.3 d2i_ECDSA_SIG.3
+MLINKS+= ecdsa.3 ECDSA_size.3
+MLINKS+= ecdsa.3 ECDSA_sign_setup.3
+MLINKS+= ecdsa.3 ECDSA_sign.3
+MLINKS+= ecdsa.3 ECDSA_sign_ex.3
+MLINKS+= ecdsa.3 ECDSA_verify.3
+MLINKS+= ecdsa.3 ECDSA_do_sign.3
+MLINKS+= ecdsa.3 ECDSA_do_sign_ex.3
+MLINKS+= ecdsa.3 ECDSA_do_verify.3
MLINKS+= hmac.3 HMAC.3
+MLINKS+= hmac.3 HMAC_CTX_init.3
MLINKS+= hmac.3 HMAC_Init.3
+MLINKS+= hmac.3 HMAC_Init_ex.3
MLINKS+= hmac.3 HMAC_Update.3
MLINKS+= hmac.3 HMAC_Final.3
+MLINKS+= hmac.3 HMAC_CTX_cleanup.3
MLINKS+= hmac.3 HMAC_cleanup.3
MLINKS+= lh_stats.3 lh_node_stats.3
MLINKS+= lh_stats.3 lh_node_usage_stats.3
@@ -918,6 +1149,22 @@ MLINKS+= sha.3 SHA1.3
MLINKS+= sha.3 SHA1_Init.3
MLINKS+= sha.3 SHA1_Update.3
MLINKS+= sha.3 SHA1_Final.3
+MLINKS+= sha.3 SHA224.3
+MLINKS+= sha.3 SHA224_Init.3
+MLINKS+= sha.3 SHA224_Update.3
+MLINKS+= sha.3 SHA224_Final.3
+MLINKS+= sha.3 SHA256.3
+MLINKS+= sha.3 SHA256_Init.3
+MLINKS+= sha.3 SHA256_Update.3
+MLINKS+= sha.3 SHA256_Final.3
+MLINKS+= sha.3 SHA384.3
+MLINKS+= sha.3 SHA384_Init.3
+MLINKS+= sha.3 SHA384_Update.3
+MLINKS+= sha.3 SHA384_Final.3
+MLINKS+= sha.3 SHA512.3
+MLINKS+= sha.3 SHA512_Init.3
+MLINKS+= sha.3 SHA512_Update.3
+MLINKS+= sha.3 SHA512_Final.3
MLINKS+= threads.3 CRYPTO_THREADID_set_callback.3
MLINKS+= threads.3 CRYPTO_THREADID_get_callback.3
MLINKS+= threads.3 CRYPTO_THREADID_current.3
diff --git a/secure/lib/libcrypto/amd64/aes-x86_64.S b/secure/lib/libcrypto/amd64/aes-x86_64.S
index c800d5e..3243d6d 100644
--- a/secure/lib/libcrypto/amd64/aes-x86_64.S
+++ b/secure/lib/libcrypto/amd64/aes-x86_64.S
@@ -151,7 +151,7 @@ _x86_64_AES_encrypt:
xorl %r11d,%ebx
xorl %r12d,%ecx
xorl %r8d,%edx
-.byte 0xf3,0xc3
+.byte 0xf3,0xc3
.size _x86_64_AES_encrypt,.-_x86_64_AES_encrypt
.type _x86_64_AES_encrypt_compact,@function
.align 16
@@ -176,80 +176,78 @@ _x86_64_AES_encrypt_compact:
movzbl %al,%r10d
movzbl %bl,%r11d
movzbl %cl,%r12d
- movzbl (%r14,%r10,1),%r10d
- movzbl (%r14,%r11,1),%r11d
- movzbl (%r14,%r12,1),%r12d
-
movzbl %dl,%r8d
movzbl %bh,%esi
movzbl %ch,%edi
+ shrl $16,%ecx
+ movzbl %dh,%ebp
+ movzbl (%r14,%r10,1),%r10d
+ movzbl (%r14,%r11,1),%r11d
+ movzbl (%r14,%r12,1),%r12d
movzbl (%r14,%r8,1),%r8d
- movzbl (%r14,%rsi,1),%r9d
- movzbl (%r14,%rdi,1),%r13d
- movzbl %dh,%ebp
+ movzbl (%r14,%rsi,1),%r9d
movzbl %ah,%esi
- shrl $16,%ecx
+ movzbl (%r14,%rdi,1),%r13d
+ movzbl %cl,%edi
movzbl (%r14,%rbp,1),%ebp
movzbl (%r14,%rsi,1),%esi
- shrl $16,%edx
- movzbl %cl,%edi
shll $8,%r9d
+ shrl $16,%edx
shll $8,%r13d
- movzbl (%r14,%rdi,1),%edi
xorl %r9d,%r10d
- xorl %r13d,%r11d
-
- movzbl %dl,%r9d
shrl $16,%eax
+ movzbl %dl,%r9d
shrl $16,%ebx
- movzbl %al,%r13d
+ xorl %r13d,%r11d
shll $8,%ebp
- shll $8,%esi
- movzbl (%r14,%r9,1),%r9d
- movzbl (%r14,%r13,1),%r13d
+ movzbl %al,%r13d
+ movzbl (%r14,%rdi,1),%edi
xorl %ebp,%r12d
- xorl %esi,%r8d
+ shll $8,%esi
movzbl %bl,%ebp
- movzbl %dh,%esi
shll $16,%edi
- movzbl (%r14,%rbp,1),%ebp
- movzbl (%r14,%rsi,1),%esi
+ xorl %esi,%r8d
+ movzbl (%r14,%r9,1),%r9d
+ movzbl %dh,%esi
+ movzbl (%r14,%r13,1),%r13d
xorl %edi,%r10d
- movzbl %ah,%edi
shrl $8,%ecx
+ movzbl %ah,%edi
+ shll $16,%r9d
shrl $8,%ebx
+ shll $16,%r13d
+ xorl %r9d,%r11d
+ movzbl (%r14,%rbp,1),%ebp
+ movzbl (%r14,%rsi,1),%esi
movzbl (%r14,%rdi,1),%edi
movzbl (%r14,%rcx,1),%edx
movzbl (%r14,%rbx,1),%ecx
- shll $16,%r9d
- shll $16,%r13d
+
shll $16,%ebp
- xorl %r9d,%r11d
xorl %r13d,%r12d
- xorl %ebp,%r8d
-
shll $24,%esi
+ xorl %ebp,%r8d
shll $24,%edi
- shll $24,%edx
xorl %esi,%r10d
- shll $24,%ecx
+ shll $24,%edx
xorl %edi,%r11d
+ shll $24,%ecx
movl %r10d,%eax
movl %r11d,%ebx
xorl %r12d,%ecx
xorl %r8d,%edx
cmpq 16(%rsp),%r15
je .Lenc_compact_done
- movl %eax,%esi
- movl %ebx,%edi
- andl $2155905152,%esi
- andl $2155905152,%edi
- movl %esi,%r10d
- movl %edi,%r11d
+ movl $2155905152,%r10d
+ movl $2155905152,%r11d
+ andl %eax,%r10d
+ andl %ebx,%r11d
+ movl %r10d,%esi
+ movl %r11d,%edi
shrl $7,%r10d
leal (%rax,%rax,1),%r8d
shrl $7,%r11d
@@ -267,25 +265,25 @@ _x86_64_AES_encrypt_compact:
xorl %r8d,%eax
xorl %r9d,%ebx
- movl %ecx,%esi
- movl %edx,%edi
+ movl $2155905152,%r12d
roll $24,%eax
+ movl $2155905152,%ebp
roll $24,%ebx
- andl $2155905152,%esi
- andl $2155905152,%edi
+ andl %ecx,%r12d
+ andl %edx,%ebp
xorl %r8d,%eax
xorl %r9d,%ebx
- movl %esi,%r12d
- movl %edi,%ebp
+ movl %r12d,%esi
rorl $16,%r10d
+ movl %ebp,%edi
rorl $16,%r11d
- shrl $7,%r12d
leal (%rcx,%rcx,1),%r8d
+ shrl $7,%r12d
xorl %r10d,%eax
- xorl %r11d,%ebx
shrl $7,%ebp
- leal (%rdx,%rdx,1),%r9d
+ xorl %r11d,%ebx
rorl $8,%r10d
+ leal (%rdx,%rdx,1),%r9d
rorl $8,%r11d
subl %r12d,%esi
subl %ebp,%edi
@@ -301,23 +299,23 @@ _x86_64_AES_encrypt_compact:
xorl %esi,%r8d
xorl %edi,%r9d
+ rorl $16,%r12d
xorl %r8d,%ecx
+ rorl $16,%ebp
xorl %r9d,%edx
roll $24,%ecx
+ movl 0(%r14),%esi
roll $24,%edx
xorl %r8d,%ecx
- xorl %r9d,%edx
- movl 0(%r14),%esi
- rorl $16,%r12d
- rorl $16,%ebp
movl 64(%r14),%edi
- xorl %r12d,%ecx
- xorl %ebp,%edx
+ xorl %r9d,%edx
movl 128(%r14),%r8d
+ xorl %r12d,%ecx
rorl $8,%r12d
+ xorl %ebp,%edx
rorl $8,%ebp
- movl 192(%r14),%r9d
xorl %r12d,%ecx
+ movl 192(%r14),%r9d
xorl %ebp,%edx
jmp .Lenc_loop_compact
.align 16
@@ -326,7 +324,7 @@ _x86_64_AES_encrypt_compact:
xorl 4(%r15),%ebx
xorl 8(%r15),%ecx
xorl 12(%r15),%edx
-.byte 0xf3,0xc3
+.byte 0xf3,0xc3
.size _x86_64_AES_encrypt_compact,.-_x86_64_AES_encrypt_compact
.globl AES_encrypt
.type AES_encrypt,@function
@@ -548,7 +546,7 @@ _x86_64_AES_decrypt:
xorl %r11d,%ebx
xorl %r12d,%ecx
xorl %r8d,%edx
-.byte 0xf3,0xc3
+.byte 0xf3,0xc3
.size _x86_64_AES_decrypt,.-_x86_64_AES_decrypt
.type _x86_64_AES_decrypt_compact,@function
.align 16
@@ -574,70 +572,69 @@ _x86_64_AES_decrypt_compact:
movzbl %al,%r10d
movzbl %bl,%r11d
movzbl %cl,%r12d
- movzbl (%r14,%r10,1),%r10d
- movzbl (%r14,%r11,1),%r11d
- movzbl (%r14,%r12,1),%r12d
-
movzbl %dl,%r8d
movzbl %dh,%esi
movzbl %ah,%edi
+ shrl $16,%edx
+ movzbl %bh,%ebp
+ movzbl (%r14,%r10,1),%r10d
+ movzbl (%r14,%r11,1),%r11d
+ movzbl (%r14,%r12,1),%r12d
movzbl (%r14,%r8,1),%r8d
- movzbl (%r14,%rsi,1),%r9d
- movzbl (%r14,%rdi,1),%r13d
- movzbl %bh,%ebp
+ movzbl (%r14,%rsi,1),%r9d
movzbl %ch,%esi
- shrl $16,%ecx
+ movzbl (%r14,%rdi,1),%r13d
movzbl (%r14,%rbp,1),%ebp
movzbl (%r14,%rsi,1),%esi
- shrl $16,%edx
- movzbl %cl,%edi
- shll $8,%r9d
+ shrl $16,%ecx
shll $8,%r13d
- movzbl (%r14,%rdi,1),%edi
- xorl %r9d,%r10d
- xorl %r13d,%r11d
-
- movzbl %dl,%r9d
+ shll $8,%r9d
+ movzbl %cl,%edi
shrl $16,%eax
+ xorl %r9d,%r10d
shrl $16,%ebx
- movzbl %al,%r13d
+ movzbl %dl,%r9d
+
shll $8,%ebp
+ xorl %r13d,%r11d
shll $8,%esi
- movzbl (%r14,%r9,1),%r9d
- movzbl (%r14,%r13,1),%r13d
+ movzbl %al,%r13d
+ movzbl (%r14,%rdi,1),%edi
xorl %ebp,%r12d
- xorl %esi,%r8d
-
movzbl %bl,%ebp
- movzbl %bh,%esi
+
shll $16,%edi
+ xorl %esi,%r8d
+ movzbl (%r14,%r9,1),%r9d
+ movzbl %bh,%esi
movzbl (%r14,%rbp,1),%ebp
- movzbl (%r14,%rsi,1),%esi
xorl %edi,%r10d
-
+ movzbl (%r14,%r13,1),%r13d
movzbl %ch,%edi
+
+ shll $16,%ebp
shll $16,%r9d
shll $16,%r13d
- movzbl (%r14,%rdi,1),%ebx
+ xorl %ebp,%r8d
+ movzbl %dh,%ebp
xorl %r9d,%r11d
+ shrl $8,%eax
xorl %r13d,%r12d
- movzbl %dh,%edi
- shrl $8,%eax
- shll $16,%ebp
- movzbl (%r14,%rdi,1),%ecx
+ movzbl (%r14,%rsi,1),%esi
+ movzbl (%r14,%rdi,1),%ebx
+ movzbl (%r14,%rbp,1),%ecx
movzbl (%r14,%rax,1),%edx
- xorl %ebp,%r8d
+ movl %r10d,%eax
shll $24,%esi
shll $24,%ebx
shll $24,%ecx
- xorl %esi,%r10d
+ xorl %esi,%eax
shll $24,%edx
xorl %r11d,%ebx
- movl %r10d,%eax
xorl %r12d,%ecx
xorl %r8d,%edx
cmpq 16(%rsp),%r15
@@ -650,12 +647,12 @@ _x86_64_AES_decrypt_compact:
orq %rbx,%rax
orq %rdx,%rcx
movq 256+16(%r14),%rbp
- movq %rax,%rbx
- movq %rcx,%rdx
- andq %rsi,%rbx
- andq %rsi,%rdx
- movq %rbx,%r9
- movq %rdx,%r12
+ movq %rsi,%r9
+ movq %rsi,%r12
+ andq %rax,%r9
+ andq %rcx,%r12
+ movq %r9,%rbx
+ movq %r12,%rdx
shrq $7,%r9
leaq (%rax,%rax,1),%r8
shrq $7,%r12
@@ -666,15 +663,15 @@ _x86_64_AES_decrypt_compact:
andq %rdi,%r11
andq %rbp,%rbx
andq %rbp,%rdx
- xorq %r8,%rbx
- xorq %r11,%rdx
- movq %rbx,%r8
- movq %rdx,%r11
-
- andq %rsi,%rbx
- andq %rsi,%rdx
- movq %rbx,%r10
- movq %rdx,%r13
+ xorq %rbx,%r8
+ xorq %rdx,%r11
+ movq %rsi,%r10
+ movq %rsi,%r13
+
+ andq %r8,%r10
+ andq %r11,%r13
+ movq %r10,%rbx
+ movq %r13,%rdx
shrq $7,%r10
leaq (%r8,%r8,1),%r9
shrq $7,%r13
@@ -685,15 +682,15 @@ _x86_64_AES_decrypt_compact:
andq %rdi,%r12
andq %rbp,%rbx
andq %rbp,%rdx
- xorq %r9,%rbx
- xorq %r12,%rdx
- movq %rbx,%r9
- movq %rdx,%r12
-
- andq %rsi,%rbx
- andq %rsi,%rdx
- movq %rbx,%r10
- movq %rdx,%r13
+ xorq %rbx,%r9
+ xorq %rdx,%r12
+ movq %rsi,%r10
+ movq %rsi,%r13
+
+ andq %r9,%r10
+ andq %r12,%r13
+ movq %r10,%rbx
+ movq %r13,%rdx
shrq $7,%r10
xorq %rax,%r8
shrq $7,%r13
@@ -718,51 +715,51 @@ _x86_64_AES_decrypt_compact:
movq %rax,%rbx
movq %rcx,%rdx
xorq %r10,%r9
- xorq %r13,%r12
shrq $32,%rbx
+ xorq %r13,%r12
shrq $32,%rdx
xorq %r8,%r10
- xorq %r11,%r13
roll $8,%eax
+ xorq %r11,%r13
roll $8,%ecx
xorq %r9,%r10
+ roll $8,%ebx
xorq %r12,%r13
- roll $8,%ebx
roll $8,%edx
xorl %r10d,%eax
- xorl %r13d,%ecx
shrq $32,%r10
+ xorl %r13d,%ecx
shrq $32,%r13
xorl %r10d,%ebx
xorl %r13d,%edx
movq %r8,%r10
- movq %r11,%r13
- shrq $32,%r10
- shrq $32,%r13
roll $24,%r8d
+ movq %r11,%r13
roll $24,%r11d
- roll $24,%r10d
- roll $24,%r13d
+ shrq $32,%r10
xorl %r8d,%eax
+ shrq $32,%r13
xorl %r11d,%ecx
+ roll $24,%r10d
movq %r9,%r8
+ roll $24,%r13d
movq %r12,%r11
+ shrq $32,%r8
xorl %r10d,%ebx
+ shrq $32,%r11
xorl %r13d,%edx
movq 0(%r14),%rsi
- shrq $32,%r8
- shrq $32,%r11
- movq 64(%r14),%rdi
roll $16,%r9d
+ movq 64(%r14),%rdi
roll $16,%r12d
movq 128(%r14),%rbp
roll $16,%r8d
- roll $16,%r11d
movq 192(%r14),%r10
xorl %r9d,%eax
+ roll $16,%r11d
xorl %r12d,%ecx
movq 256(%r14),%r13
xorl %r8d,%ebx
@@ -774,7 +771,7 @@ _x86_64_AES_decrypt_compact:
xorl 4(%r15),%ebx
xorl 8(%r15),%ecx
xorl 12(%r15),%edx
-.byte 0xf3,0xc3
+.byte 0xf3,0xc3
.size _x86_64_AES_decrypt_compact,.-_x86_64_AES_decrypt_compact
.globl AES_decrypt
.type AES_decrypt,@function
@@ -860,10 +857,6 @@ private_AES_set_encrypt_key:
call _x86_64_AES_set_encrypt_key
- movq 8(%rsp),%r15
- movq 16(%rsp),%r14
- movq 24(%rsp),%r13
- movq 32(%rsp),%r12
movq 40(%rsp),%rbp
movq 48(%rsp),%rbx
addq $56,%rsp
@@ -1108,7 +1101,7 @@ _x86_64_AES_set_encrypt_key:
.Lbadpointer:
movq $-1,%rax
.Lexit:
-.byte 0xf3,0xc3
+.byte 0xf3,0xc3
.size _x86_64_AES_set_encrypt_key,.-_x86_64_AES_set_encrypt_key
.globl private_AES_set_decrypt_key
.type private_AES_set_decrypt_key,@function
@@ -1161,12 +1154,12 @@ private_AES_set_decrypt_key:
leaq 16(%r15),%r15
movq 0(%r15),%rax
movq 8(%r15),%rcx
- movq %rax,%rbx
- movq %rcx,%rdx
- andq %rsi,%rbx
- andq %rsi,%rdx
- movq %rbx,%r9
- movq %rdx,%r12
+ movq %rsi,%r9
+ movq %rsi,%r12
+ andq %rax,%r9
+ andq %rcx,%r12
+ movq %r9,%rbx
+ movq %r12,%rdx
shrq $7,%r9
leaq (%rax,%rax,1),%r8
shrq $7,%r12
@@ -1177,15 +1170,15 @@ private_AES_set_decrypt_key:
andq %rdi,%r11
andq %rbp,%rbx
andq %rbp,%rdx
- xorq %r8,%rbx
- xorq %r11,%rdx
- movq %rbx,%r8
- movq %rdx,%r11
-
- andq %rsi,%rbx
- andq %rsi,%rdx
- movq %rbx,%r10
- movq %rdx,%r13
+ xorq %rbx,%r8
+ xorq %rdx,%r11
+ movq %rsi,%r10
+ movq %rsi,%r13
+
+ andq %r8,%r10
+ andq %r11,%r13
+ movq %r10,%rbx
+ movq %r13,%rdx
shrq $7,%r10
leaq (%r8,%r8,1),%r9
shrq $7,%r13
@@ -1196,15 +1189,15 @@ private_AES_set_decrypt_key:
andq %rdi,%r12
andq %rbp,%rbx
andq %rbp,%rdx
- xorq %r9,%rbx
- xorq %r12,%rdx
- movq %rbx,%r9
- movq %rdx,%r12
-
- andq %rsi,%rbx
- andq %rsi,%rdx
- movq %rbx,%r10
- movq %rdx,%r13
+ xorq %rbx,%r9
+ xorq %rdx,%r12
+ movq %rsi,%r10
+ movq %rsi,%r13
+
+ andq %r9,%r10
+ andq %r12,%r13
+ movq %r10,%rbx
+ movq %r13,%rdx
shrq $7,%r10
xorq %rax,%r8
shrq $7,%r13
@@ -1229,51 +1222,51 @@ private_AES_set_decrypt_key:
movq %rax,%rbx
movq %rcx,%rdx
xorq %r10,%r9
- xorq %r13,%r12
shrq $32,%rbx
+ xorq %r13,%r12
shrq $32,%rdx
xorq %r8,%r10
- xorq %r11,%r13
roll $8,%eax
+ xorq %r11,%r13
roll $8,%ecx
xorq %r9,%r10
+ roll $8,%ebx
xorq %r12,%r13
- roll $8,%ebx
roll $8,%edx
xorl %r10d,%eax
- xorl %r13d,%ecx
shrq $32,%r10
+ xorl %r13d,%ecx
shrq $32,%r13
xorl %r10d,%ebx
xorl %r13d,%edx
movq %r8,%r10
- movq %r11,%r13
- shrq $32,%r10
- shrq $32,%r13
roll $24,%r8d
+ movq %r11,%r13
roll $24,%r11d
- roll $24,%r10d
- roll $24,%r13d
+ shrq $32,%r10
xorl %r8d,%eax
+ shrq $32,%r13
xorl %r11d,%ecx
+ roll $24,%r10d
movq %r9,%r8
+ roll $24,%r13d
movq %r12,%r11
+ shrq $32,%r8
xorl %r10d,%ebx
+ shrq $32,%r11
xorl %r13d,%edx
- shrq $32,%r8
- shrq $32,%r11
-
roll $16,%r9d
+
roll $16,%r12d
roll $16,%r8d
- roll $16,%r11d
xorl %r9d,%eax
+ roll $16,%r11d
xorl %r12d,%ecx
xorl %r8d,%ebx
@@ -1389,7 +1382,7 @@ AES_cbc_encrypt:
leaq 80(%rsp),%rdi
leaq 80(%rsp),%r15
movl $30,%ecx
-.long 0x90A548F3
+.long 0x90A548F3
movl %eax,(%rdi)
.Lcbc_skip_ecopy:
movq %r15,0(%rsp)
@@ -1551,7 +1544,7 @@ AES_cbc_encrypt:
je .Lcbc_exit
movl $30,%ecx
xorq %rax,%rax
-.long 0x90AB48F3
+.long 0x90AB48F3
jmp .Lcbc_exit
@@ -1606,7 +1599,7 @@ AES_cbc_encrypt:
movl 4(%rbp),%ebx
movl 8(%rbp),%ecx
movl 12(%rbp),%edx
- jz .Lcbc_slow_enc_tail
+ jz .Lcbc_slow_enc_tail
.align 4
.Lcbc_slow_enc_loop:
@@ -1651,16 +1644,16 @@ AES_cbc_encrypt:
movq %r10,%rcx
movq %r8,%rsi
movq %r9,%rdi
-.long 0x9066A4F3
+.long 0x9066A4F3
movq $16,%rcx
subq %r10,%rcx
xorq %rax,%rax
-.long 0x9066AAF3
+.long 0x9066AAF3
movq %r9,%r8
movq $16,%r10
movq %r11,%rax
movq %r12,%rcx
- jmp .Lcbc_slow_enc_loop
+ jmp .Lcbc_slow_enc_loop
.align 16
.LSLOW_DECRYPT:
@@ -1736,7 +1729,7 @@ AES_cbc_encrypt:
movq %r9,%rdi
leaq 64(%rsp),%rsi
leaq 16(%r10),%rcx
-.long 0x9066A4F3
+.long 0x9066A4F3
jmp .Lcbc_exit
.align 16
diff --git a/secure/lib/libcrypto/amd64/aesni-gcm-x86_64.S b/secure/lib/libcrypto/amd64/aesni-gcm-x86_64.S
new file mode 100644
index 0000000..9e99e71
--- /dev/null
+++ b/secure/lib/libcrypto/amd64/aesni-gcm-x86_64.S
@@ -0,0 +1,16 @@
+ # $FreeBSD$
+.text
+
+.globl aesni_gcm_encrypt
+.type aesni_gcm_encrypt,@function
+aesni_gcm_encrypt:
+ xorl %eax,%eax
+ .byte 0xf3,0xc3
+.size aesni_gcm_encrypt,.-aesni_gcm_encrypt
+
+.globl aesni_gcm_decrypt
+.type aesni_gcm_decrypt,@function
+aesni_gcm_decrypt:
+ xorl %eax,%eax
+ .byte 0xf3,0xc3
+.size aesni_gcm_decrypt,.-aesni_gcm_decrypt
diff --git a/secure/lib/libcrypto/amd64/aesni-mb-x86_64.S b/secure/lib/libcrypto/amd64/aesni-mb-x86_64.S
new file mode 100644
index 0000000..7043ec3
--- /dev/null
+++ b/secure/lib/libcrypto/amd64/aesni-mb-x86_64.S
@@ -0,0 +1,507 @@
+ # $FreeBSD$
+.text
+
+
+
+.globl aesni_multi_cbc_encrypt
+.type aesni_multi_cbc_encrypt,@function
+.align 32
+aesni_multi_cbc_encrypt:
+ movq %rsp,%rax
+ pushq %rbx
+ pushq %rbp
+ pushq %r12
+ pushq %r13
+ pushq %r14
+ pushq %r15
+
+
+
+
+
+
+ subq $48,%rsp
+ andq $-64,%rsp
+ movq %rax,16(%rsp)
+
+.Lenc4x_body:
+ movdqu (%rsi),%xmm12
+ leaq 120(%rsi),%rsi
+ leaq 80(%rdi),%rdi
+
+.Lenc4x_loop_grande:
+ movl %edx,24(%rsp)
+ xorl %edx,%edx
+ movl -64(%rdi),%ecx
+ movq -80(%rdi),%r8
+ cmpl %edx,%ecx
+ movq -72(%rdi),%r12
+ cmovgl %ecx,%edx
+ testl %ecx,%ecx
+ movdqu -56(%rdi),%xmm2
+ movl %ecx,32(%rsp)
+ cmovleq %rsp,%r8
+ movl -24(%rdi),%ecx
+ movq -40(%rdi),%r9
+ cmpl %edx,%ecx
+ movq -32(%rdi),%r13
+ cmovgl %ecx,%edx
+ testl %ecx,%ecx
+ movdqu -16(%rdi),%xmm3
+ movl %ecx,36(%rsp)
+ cmovleq %rsp,%r9
+ movl 16(%rdi),%ecx
+ movq 0(%rdi),%r10
+ cmpl %edx,%ecx
+ movq 8(%rdi),%r14
+ cmovgl %ecx,%edx
+ testl %ecx,%ecx
+ movdqu 24(%rdi),%xmm4
+ movl %ecx,40(%rsp)
+ cmovleq %rsp,%r10
+ movl 56(%rdi),%ecx
+ movq 40(%rdi),%r11
+ cmpl %edx,%ecx
+ movq 48(%rdi),%r15
+ cmovgl %ecx,%edx
+ testl %ecx,%ecx
+ movdqu 64(%rdi),%xmm5
+ movl %ecx,44(%rsp)
+ cmovleq %rsp,%r11
+ testl %edx,%edx
+ jz .Lenc4x_done
+
+ movups 16-120(%rsi),%xmm1
+ pxor %xmm12,%xmm2
+ movups 32-120(%rsi),%xmm0
+ pxor %xmm12,%xmm3
+ movl 240-120(%rsi),%eax
+ pxor %xmm12,%xmm4
+ movdqu (%r8),%xmm6
+ pxor %xmm12,%xmm5
+ movdqu (%r9),%xmm7
+ pxor %xmm6,%xmm2
+ movdqu (%r10),%xmm8
+ pxor %xmm7,%xmm3
+ movdqu (%r11),%xmm9
+ pxor %xmm8,%xmm4
+ pxor %xmm9,%xmm5
+ movdqa 32(%rsp),%xmm10
+ xorq %rbx,%rbx
+ jmp .Loop_enc4x
+
+.align 32
+.Loop_enc4x:
+ addq $16,%rbx
+ leaq 16(%rsp),%rbp
+ movl $1,%ecx
+ subq %rbx,%rbp
+
+.byte 102,15,56,220,209
+ prefetcht0 31(%r8,%rbx,1)
+ prefetcht0 31(%r9,%rbx,1)
+.byte 102,15,56,220,217
+ prefetcht0 31(%r10,%rbx,1)
+ prefetcht0 31(%r10,%rbx,1)
+.byte 102,15,56,220,225
+.byte 102,15,56,220,233
+ movups 48-120(%rsi),%xmm1
+ cmpl 32(%rsp),%ecx
+.byte 102,15,56,220,208
+.byte 102,15,56,220,216
+.byte 102,15,56,220,224
+ cmovgeq %rbp,%r8
+ cmovgq %rbp,%r12
+.byte 102,15,56,220,232
+ movups -56(%rsi),%xmm0
+ cmpl 36(%rsp),%ecx
+.byte 102,15,56,220,209
+.byte 102,15,56,220,217
+.byte 102,15,56,220,225
+ cmovgeq %rbp,%r9
+ cmovgq %rbp,%r13
+.byte 102,15,56,220,233
+ movups -40(%rsi),%xmm1
+ cmpl 40(%rsp),%ecx
+.byte 102,15,56,220,208
+.byte 102,15,56,220,216
+.byte 102,15,56,220,224
+ cmovgeq %rbp,%r10
+ cmovgq %rbp,%r14
+.byte 102,15,56,220,232
+ movups -24(%rsi),%xmm0
+ cmpl 44(%rsp),%ecx
+.byte 102,15,56,220,209
+.byte 102,15,56,220,217
+.byte 102,15,56,220,225
+ cmovgeq %rbp,%r11
+ cmovgq %rbp,%r15
+.byte 102,15,56,220,233
+ movups -8(%rsi),%xmm1
+ movdqa %xmm10,%xmm11
+.byte 102,15,56,220,208
+ prefetcht0 15(%r12,%rbx,1)
+ prefetcht0 15(%r13,%rbx,1)
+.byte 102,15,56,220,216
+ prefetcht0 15(%r14,%rbx,1)
+ prefetcht0 15(%r15,%rbx,1)
+.byte 102,15,56,220,224
+.byte 102,15,56,220,232
+ movups 128-120(%rsi),%xmm0
+ pxor %xmm12,%xmm12
+
+.byte 102,15,56,220,209
+ pcmpgtd %xmm12,%xmm11
+ movdqu -120(%rsi),%xmm12
+.byte 102,15,56,220,217
+ paddd %xmm11,%xmm10
+ movdqa %xmm10,32(%rsp)
+.byte 102,15,56,220,225
+.byte 102,15,56,220,233
+ movups 144-120(%rsi),%xmm1
+
+ cmpl $11,%eax
+
+.byte 102,15,56,220,208
+.byte 102,15,56,220,216
+.byte 102,15,56,220,224
+.byte 102,15,56,220,232
+ movups 160-120(%rsi),%xmm0
+
+ jb .Lenc4x_tail
+
+.byte 102,15,56,220,209
+.byte 102,15,56,220,217
+.byte 102,15,56,220,225
+.byte 102,15,56,220,233
+ movups 176-120(%rsi),%xmm1
+
+.byte 102,15,56,220,208
+.byte 102,15,56,220,216
+.byte 102,15,56,220,224
+.byte 102,15,56,220,232
+ movups 192-120(%rsi),%xmm0
+
+ je .Lenc4x_tail
+
+.byte 102,15,56,220,209
+.byte 102,15,56,220,217
+.byte 102,15,56,220,225
+.byte 102,15,56,220,233
+ movups 208-120(%rsi),%xmm1
+
+.byte 102,15,56,220,208
+.byte 102,15,56,220,216
+.byte 102,15,56,220,224
+.byte 102,15,56,220,232
+ movups 224-120(%rsi),%xmm0
+ jmp .Lenc4x_tail
+
+.align 32
+.Lenc4x_tail:
+.byte 102,15,56,220,209
+.byte 102,15,56,220,217
+.byte 102,15,56,220,225
+.byte 102,15,56,220,233
+ movdqu (%r8,%rbx,1),%xmm6
+ movdqu 16-120(%rsi),%xmm1
+
+.byte 102,15,56,221,208
+ movdqu (%r9,%rbx,1),%xmm7
+ pxor %xmm12,%xmm6
+.byte 102,15,56,221,216
+ movdqu (%r10,%rbx,1),%xmm8
+ pxor %xmm12,%xmm7
+.byte 102,15,56,221,224
+ movdqu (%r11,%rbx,1),%xmm9
+ pxor %xmm12,%xmm8
+.byte 102,15,56,221,232
+ movdqu 32-120(%rsi),%xmm0
+ pxor %xmm12,%xmm9
+
+ movups %xmm2,-16(%r12,%rbx,1)
+ pxor %xmm6,%xmm2
+ movups %xmm3,-16(%r13,%rbx,1)
+ pxor %xmm7,%xmm3
+ movups %xmm4,-16(%r14,%rbx,1)
+ pxor %xmm8,%xmm4
+ movups %xmm5,-16(%r15,%rbx,1)
+ pxor %xmm9,%xmm5
+
+ decl %edx
+ jnz .Loop_enc4x
+
+ movq 16(%rsp),%rax
+ movl 24(%rsp),%edx
+
+
+
+
+
+
+
+
+
+
+ leaq 160(%rdi),%rdi
+ decl %edx
+ jnz .Lenc4x_loop_grande
+
+.Lenc4x_done:
+ movq -48(%rax),%r15
+ movq -40(%rax),%r14
+ movq -32(%rax),%r13
+ movq -24(%rax),%r12
+ movq -16(%rax),%rbp
+ movq -8(%rax),%rbx
+ leaq (%rax),%rsp
+.Lenc4x_epilogue:
+ .byte 0xf3,0xc3
+.size aesni_multi_cbc_encrypt,.-aesni_multi_cbc_encrypt
+
+.globl aesni_multi_cbc_decrypt
+.type aesni_multi_cbc_decrypt,@function
+.align 32
+aesni_multi_cbc_decrypt:
+ movq %rsp,%rax
+ pushq %rbx
+ pushq %rbp
+ pushq %r12
+ pushq %r13
+ pushq %r14
+ pushq %r15
+
+
+
+
+
+
+ subq $48,%rsp
+ andq $-64,%rsp
+ movq %rax,16(%rsp)
+
+.Ldec4x_body:
+ movdqu (%rsi),%xmm12
+ leaq 120(%rsi),%rsi
+ leaq 80(%rdi),%rdi
+
+.Ldec4x_loop_grande:
+ movl %edx,24(%rsp)
+ xorl %edx,%edx
+ movl -64(%rdi),%ecx
+ movq -80(%rdi),%r8
+ cmpl %edx,%ecx
+ movq -72(%rdi),%r12
+ cmovgl %ecx,%edx
+ testl %ecx,%ecx
+ movdqu -56(%rdi),%xmm6
+ movl %ecx,32(%rsp)
+ cmovleq %rsp,%r8
+ movl -24(%rdi),%ecx
+ movq -40(%rdi),%r9
+ cmpl %edx,%ecx
+ movq -32(%rdi),%r13
+ cmovgl %ecx,%edx
+ testl %ecx,%ecx
+ movdqu -16(%rdi),%xmm7
+ movl %ecx,36(%rsp)
+ cmovleq %rsp,%r9
+ movl 16(%rdi),%ecx
+ movq 0(%rdi),%r10
+ cmpl %edx,%ecx
+ movq 8(%rdi),%r14
+ cmovgl %ecx,%edx
+ testl %ecx,%ecx
+ movdqu 24(%rdi),%xmm8
+ movl %ecx,40(%rsp)
+ cmovleq %rsp,%r10
+ movl 56(%rdi),%ecx
+ movq 40(%rdi),%r11
+ cmpl %edx,%ecx
+ movq 48(%rdi),%r15
+ cmovgl %ecx,%edx
+ testl %ecx,%ecx
+ movdqu 64(%rdi),%xmm9
+ movl %ecx,44(%rsp)
+ cmovleq %rsp,%r11
+ testl %edx,%edx
+ jz .Ldec4x_done
+
+ movups 16-120(%rsi),%xmm1
+ movups 32-120(%rsi),%xmm0
+ movl 240-120(%rsi),%eax
+ movdqu (%r8),%xmm2
+ movdqu (%r9),%xmm3
+ pxor %xmm12,%xmm2
+ movdqu (%r10),%xmm4
+ pxor %xmm12,%xmm3
+ movdqu (%r11),%xmm5
+ pxor %xmm12,%xmm4
+ pxor %xmm12,%xmm5
+ movdqa 32(%rsp),%xmm10
+ xorq %rbx,%rbx
+ jmp .Loop_dec4x
+
+.align 32
+.Loop_dec4x:
+ addq $16,%rbx
+ leaq 16(%rsp),%rbp
+ movl $1,%ecx
+ subq %rbx,%rbp
+
+.byte 102,15,56,222,209
+ prefetcht0 31(%r8,%rbx,1)
+ prefetcht0 31(%r9,%rbx,1)
+.byte 102,15,56,222,217
+ prefetcht0 31(%r10,%rbx,1)
+ prefetcht0 31(%r11,%rbx,1)
+.byte 102,15,56,222,225
+.byte 102,15,56,222,233
+ movups 48-120(%rsi),%xmm1
+ cmpl 32(%rsp),%ecx
+.byte 102,15,56,222,208
+.byte 102,15,56,222,216
+.byte 102,15,56,222,224
+ cmovgeq %rbp,%r8
+ cmovgq %rbp,%r12
+.byte 102,15,56,222,232
+ movups -56(%rsi),%xmm0
+ cmpl 36(%rsp),%ecx
+.byte 102,15,56,222,209
+.byte 102,15,56,222,217
+.byte 102,15,56,222,225
+ cmovgeq %rbp,%r9
+ cmovgq %rbp,%r13
+.byte 102,15,56,222,233
+ movups -40(%rsi),%xmm1
+ cmpl 40(%rsp),%ecx
+.byte 102,15,56,222,208
+.byte 102,15,56,222,216
+.byte 102,15,56,222,224
+ cmovgeq %rbp,%r10
+ cmovgq %rbp,%r14
+.byte 102,15,56,222,232
+ movups -24(%rsi),%xmm0
+ cmpl 44(%rsp),%ecx
+.byte 102,15,56,222,209
+.byte 102,15,56,222,217
+.byte 102,15,56,222,225
+ cmovgeq %rbp,%r11
+ cmovgq %rbp,%r15
+.byte 102,15,56,222,233
+ movups -8(%rsi),%xmm1
+ movdqa %xmm10,%xmm11
+.byte 102,15,56,222,208
+ prefetcht0 15(%r12,%rbx,1)
+ prefetcht0 15(%r13,%rbx,1)
+.byte 102,15,56,222,216
+ prefetcht0 15(%r14,%rbx,1)
+ prefetcht0 15(%r15,%rbx,1)
+.byte 102,15,56,222,224
+.byte 102,15,56,222,232
+ movups 128-120(%rsi),%xmm0
+ pxor %xmm12,%xmm12
+
+.byte 102,15,56,222,209
+ pcmpgtd %xmm12,%xmm11
+ movdqu -120(%rsi),%xmm12
+.byte 102,15,56,222,217
+ paddd %xmm11,%xmm10
+ movdqa %xmm10,32(%rsp)
+.byte 102,15,56,222,225
+.byte 102,15,56,222,233
+ movups 144-120(%rsi),%xmm1
+
+ cmpl $11,%eax
+
+.byte 102,15,56,222,208
+.byte 102,15,56,222,216
+.byte 102,15,56,222,224
+.byte 102,15,56,222,232
+ movups 160-120(%rsi),%xmm0
+
+ jb .Ldec4x_tail
+
+.byte 102,15,56,222,209
+.byte 102,15,56,222,217
+.byte 102,15,56,222,225
+.byte 102,15,56,222,233
+ movups 176-120(%rsi),%xmm1
+
+.byte 102,15,56,222,208
+.byte 102,15,56,222,216
+.byte 102,15,56,222,224
+.byte 102,15,56,222,232
+ movups 192-120(%rsi),%xmm0
+
+ je .Ldec4x_tail
+
+.byte 102,15,56,222,209
+.byte 102,15,56,222,217
+.byte 102,15,56,222,225
+.byte 102,15,56,222,233
+ movups 208-120(%rsi),%xmm1
+
+.byte 102,15,56,222,208
+.byte 102,15,56,222,216
+.byte 102,15,56,222,224
+.byte 102,15,56,222,232
+ movups 224-120(%rsi),%xmm0
+ jmp .Ldec4x_tail
+
+.align 32
+.Ldec4x_tail:
+.byte 102,15,56,222,209
+.byte 102,15,56,222,217
+.byte 102,15,56,222,225
+ pxor %xmm0,%xmm6
+ pxor %xmm0,%xmm7
+.byte 102,15,56,222,233
+ movdqu 16-120(%rsi),%xmm1
+ pxor %xmm0,%xmm8
+ pxor %xmm0,%xmm9
+ movdqu 32-120(%rsi),%xmm0
+
+.byte 102,15,56,223,214
+.byte 102,15,56,223,223
+ movdqu -16(%r8,%rbx,1),%xmm6
+ movdqu -16(%r9,%rbx,1),%xmm7
+.byte 102,65,15,56,223,224
+.byte 102,65,15,56,223,233
+ movdqu -16(%r10,%rbx,1),%xmm8
+ movdqu -16(%r11,%rbx,1),%xmm9
+
+ movups %xmm2,-16(%r12,%rbx,1)
+ movdqu (%r8,%rbx,1),%xmm2
+ movups %xmm3,-16(%r13,%rbx,1)
+ movdqu (%r9,%rbx,1),%xmm3
+ pxor %xmm12,%xmm2
+ movups %xmm4,-16(%r14,%rbx,1)
+ movdqu (%r10,%rbx,1),%xmm4
+ pxor %xmm12,%xmm3
+ movups %xmm5,-16(%r15,%rbx,1)
+ movdqu (%r11,%rbx,1),%xmm5
+ pxor %xmm12,%xmm4
+ pxor %xmm12,%xmm5
+
+ decl %edx
+ jnz .Loop_dec4x
+
+ movq 16(%rsp),%rax
+ movl 24(%rsp),%edx
+
+ leaq 160(%rdi),%rdi
+ decl %edx
+ jnz .Ldec4x_loop_grande
+
+.Ldec4x_done:
+ movq -48(%rax),%r15
+ movq -40(%rax),%r14
+ movq -32(%rax),%r13
+ movq -24(%rax),%r12
+ movq -16(%rax),%rbp
+ movq -8(%rax),%rbx
+ leaq (%rax),%rsp
+.Ldec4x_epilogue:
+ .byte 0xf3,0xc3
+.size aesni_multi_cbc_decrypt,.-aesni_multi_cbc_decrypt
diff --git a/secure/lib/libcrypto/amd64/aesni-sha1-x86_64.S b/secure/lib/libcrypto/amd64/aesni-sha1-x86_64.S
index e9a2053..fa16434 100644
--- a/secure/lib/libcrypto/amd64/aesni-sha1-x86_64.S
+++ b/secure/lib/libcrypto/amd64/aesni-sha1-x86_64.S
@@ -4,16 +4,18 @@
.globl aesni_cbc_sha1_enc
.type aesni_cbc_sha1_enc,@function
-.align 16
+.align 32
aesni_cbc_sha1_enc:
movl OPENSSL_ia32cap_P+0(%rip),%r10d
- movl OPENSSL_ia32cap_P+4(%rip),%r11d
+ movq OPENSSL_ia32cap_P+4(%rip),%r11
+ btq $61,%r11
+ jc aesni_cbc_sha1_enc_shaext
jmp aesni_cbc_sha1_enc_ssse3
.byte 0xf3,0xc3
.size aesni_cbc_sha1_enc,.-aesni_cbc_sha1_enc
.type aesni_cbc_sha1_enc_ssse3,@function
-.align 16
+.align 32
aesni_cbc_sha1_enc_ssse3:
movq 8(%rsp),%r10
@@ -30,12 +32,12 @@ aesni_cbc_sha1_enc_ssse3:
movq %rdi,%r12
movq %rsi,%r13
movq %rdx,%r14
- movq %rcx,%r15
- movdqu (%r8),%xmm11
+ leaq 112(%rcx),%r15
+ movdqu (%r8),%xmm2
movq %r8,88(%rsp)
shlq $6,%r14
subq %r12,%r13
- movl 240(%r15),%r8d
+ movl 240-112(%r15),%r8d
addq %r10,%r14
leaq K_XX_XX(%rip),%r11
@@ -45,1188 +47,1168 @@ aesni_cbc_sha1_enc_ssse3:
movl 12(%r9),%edx
movl %ebx,%esi
movl 16(%r9),%ebp
+ movl %ecx,%edi
+ xorl %edx,%edi
+ andl %edi,%esi
- movdqa 64(%r11),%xmm6
- movdqa 0(%r11),%xmm9
- movdqu 0(%r10),%xmm0
- movdqu 16(%r10),%xmm1
- movdqu 32(%r10),%xmm2
- movdqu 48(%r10),%xmm3
-.byte 102,15,56,0,198
+ movdqa 64(%r11),%xmm3
+ movdqa 0(%r11),%xmm13
+ movdqu 0(%r10),%xmm4
+ movdqu 16(%r10),%xmm5
+ movdqu 32(%r10),%xmm6
+ movdqu 48(%r10),%xmm7
+.byte 102,15,56,0,227
+.byte 102,15,56,0,235
+.byte 102,15,56,0,243
addq $64,%r10
-.byte 102,15,56,0,206
-.byte 102,15,56,0,214
-.byte 102,15,56,0,222
- paddd %xmm9,%xmm0
- paddd %xmm9,%xmm1
- paddd %xmm9,%xmm2
- movdqa %xmm0,0(%rsp)
- psubd %xmm9,%xmm0
- movdqa %xmm1,16(%rsp)
- psubd %xmm9,%xmm1
- movdqa %xmm2,32(%rsp)
- psubd %xmm9,%xmm2
- movups (%r15),%xmm13
- movups 16(%r15),%xmm14
+ paddd %xmm13,%xmm4
+.byte 102,15,56,0,251
+ paddd %xmm13,%xmm5
+ paddd %xmm13,%xmm6
+ movdqa %xmm4,0(%rsp)
+ psubd %xmm13,%xmm4
+ movdqa %xmm5,16(%rsp)
+ psubd %xmm13,%xmm5
+ movdqa %xmm6,32(%rsp)
+ psubd %xmm13,%xmm6
+ movups -112(%r15),%xmm15
+ movups 16-112(%r15),%xmm0
jmp .Loop_ssse3
-.align 16
+.align 32
.Loop_ssse3:
- movdqa %xmm1,%xmm4
- addl 0(%rsp),%ebp
- movups 0(%r12),%xmm12
- xorps %xmm13,%xmm12
- xorps %xmm12,%xmm11
-.byte 102,69,15,56,220,222
- movups 32(%r15),%xmm15
- xorl %edx,%ecx
- movdqa %xmm3,%xmm8
-.byte 102,15,58,15,224,8
+ rorl $2,%ebx
+ movups 0(%r12),%xmm14
+ xorps %xmm15,%xmm14
+ xorps %xmm14,%xmm2
+ movups -80(%r15),%xmm1
+.byte 102,15,56,220,208
+ pshufd $238,%xmm4,%xmm8
+ xorl %edx,%esi
+ movdqa %xmm7,%xmm12
+ paddd %xmm7,%xmm13
movl %eax,%edi
+ addl 0(%rsp),%ebp
+ punpcklqdq %xmm5,%xmm8
+ xorl %ecx,%ebx
roll $5,%eax
- paddd %xmm3,%xmm9
- andl %ecx,%esi
- xorl %edx,%ecx
- psrldq $4,%xmm8
- xorl %edx,%esi
- addl %eax,%ebp
- pxor %xmm0,%xmm4
- rorl $2,%ebx
addl %esi,%ebp
- pxor %xmm2,%xmm8
- addl 4(%rsp),%edx
- xorl %ecx,%ebx
- movl %ebp,%esi
- roll $5,%ebp
- pxor %xmm8,%xmm4
+ psrldq $4,%xmm12
andl %ebx,%edi
xorl %ecx,%ebx
- movdqa %xmm9,48(%rsp)
- xorl %ecx,%edi
-.byte 102,69,15,56,220,223
- movups 48(%r15),%xmm14
- addl %ebp,%edx
- movdqa %xmm4,%xmm10
- movdqa %xmm4,%xmm8
+ pxor %xmm4,%xmm8
+ addl %eax,%ebp
rorl $7,%eax
- addl %edi,%edx
- addl 8(%rsp),%ecx
+ pxor %xmm6,%xmm12
+ xorl %ecx,%edi
+ movl %ebp,%esi
+ addl 4(%rsp),%edx
+ pxor %xmm12,%xmm8
xorl %ebx,%eax
- pslldq $12,%xmm10
- paddd %xmm4,%xmm4
- movl %edx,%edi
- roll $5,%edx
+ roll $5,%ebp
+ movdqa %xmm13,48(%rsp)
+ addl %edi,%edx
+ movups -64(%r15),%xmm0
+.byte 102,15,56,220,209
andl %eax,%esi
+ movdqa %xmm8,%xmm3
xorl %ebx,%eax
- psrld $31,%xmm8
- xorl %ebx,%esi
- addl %edx,%ecx
- movdqa %xmm10,%xmm9
+ addl %ebp,%edx
rorl $7,%ebp
- addl %esi,%ecx
- psrld $30,%xmm10
- por %xmm8,%xmm4
- addl 12(%rsp),%ebx
+ movdqa %xmm8,%xmm12
+ xorl %ebx,%esi
+ pslldq $12,%xmm3
+ paddd %xmm8,%xmm8
+ movl %edx,%edi
+ addl 8(%rsp),%ecx
+ psrld $31,%xmm12
xorl %eax,%ebp
- movl %ecx,%esi
- roll $5,%ecx
-.byte 102,69,15,56,220,222
- movups 64(%r15),%xmm15
- pslld $2,%xmm9
- pxor %xmm10,%xmm4
+ roll $5,%edx
+ addl %esi,%ecx
+ movdqa %xmm3,%xmm13
andl %ebp,%edi
xorl %eax,%ebp
- movdqa 0(%r11),%xmm10
- xorl %eax,%edi
- addl %ecx,%ebx
- pxor %xmm9,%xmm4
+ psrld $30,%xmm3
+ addl %edx,%ecx
rorl $7,%edx
- addl %edi,%ebx
- movdqa %xmm2,%xmm5
- addl 16(%rsp),%eax
+ por %xmm12,%xmm8
+ xorl %eax,%edi
+ movl %ecx,%esi
+ addl 12(%rsp),%ebx
+ movups -48(%r15),%xmm1
+.byte 102,15,56,220,208
+ pslld $2,%xmm13
+ pxor %xmm3,%xmm8
xorl %ebp,%edx
- movdqa %xmm4,%xmm9
-.byte 102,15,58,15,233,8
- movl %ebx,%edi
- roll $5,%ebx
- paddd %xmm4,%xmm10
+ movdqa 0(%r11),%xmm3
+ roll $5,%ecx
+ addl %edi,%ebx
andl %edx,%esi
+ pxor %xmm13,%xmm8
xorl %ebp,%edx
- psrldq $4,%xmm9
- xorl %ebp,%esi
- addl %ebx,%eax
- pxor %xmm1,%xmm5
+ addl %ecx,%ebx
rorl $7,%ecx
- addl %esi,%eax
- pxor %xmm3,%xmm9
- addl 20(%rsp),%ebp
-.byte 102,69,15,56,220,223
- movups 80(%r15),%xmm14
+ pshufd $238,%xmm5,%xmm9
+ xorl %ebp,%esi
+ movdqa %xmm8,%xmm13
+ paddd %xmm8,%xmm3
+ movl %ebx,%edi
+ addl 16(%rsp),%eax
+ punpcklqdq %xmm6,%xmm9
xorl %edx,%ecx
- movl %eax,%esi
- roll $5,%eax
- pxor %xmm9,%xmm5
+ roll $5,%ebx
+ addl %esi,%eax
+ psrldq $4,%xmm13
andl %ecx,%edi
xorl %edx,%ecx
- movdqa %xmm10,0(%rsp)
- xorl %edx,%edi
- addl %eax,%ebp
- movdqa %xmm5,%xmm8
- movdqa %xmm5,%xmm9
+ pxor %xmm5,%xmm9
+ addl %ebx,%eax
rorl $7,%ebx
- addl %edi,%ebp
- addl 24(%rsp),%edx
+ movups -32(%r15),%xmm0
+.byte 102,15,56,220,209
+ pxor %xmm7,%xmm13
+ xorl %edx,%edi
+ movl %eax,%esi
+ addl 20(%rsp),%ebp
+ pxor %xmm13,%xmm9
xorl %ecx,%ebx
- pslldq $12,%xmm8
- paddd %xmm5,%xmm5
- movl %ebp,%edi
- roll $5,%ebp
+ roll $5,%eax
+ movdqa %xmm3,0(%rsp)
+ addl %edi,%ebp
andl %ebx,%esi
+ movdqa %xmm9,%xmm12
xorl %ecx,%ebx
- psrld $31,%xmm9
- xorl %ecx,%esi
-.byte 102,69,15,56,220,222
- movups 96(%r15),%xmm15
- addl %ebp,%edx
- movdqa %xmm8,%xmm10
+ addl %eax,%ebp
rorl $7,%eax
- addl %esi,%edx
- psrld $30,%xmm8
- por %xmm9,%xmm5
- addl 28(%rsp),%ecx
+ movdqa %xmm9,%xmm13
+ xorl %ecx,%esi
+ pslldq $12,%xmm12
+ paddd %xmm9,%xmm9
+ movl %ebp,%edi
+ addl 24(%rsp),%edx
+ psrld $31,%xmm13
xorl %ebx,%eax
- movl %edx,%esi
- roll $5,%edx
- pslld $2,%xmm10
- pxor %xmm8,%xmm5
+ roll $5,%ebp
+ addl %esi,%edx
+ movups -16(%r15),%xmm1
+.byte 102,15,56,220,208
+ movdqa %xmm12,%xmm3
andl %eax,%edi
xorl %ebx,%eax
- movdqa 16(%r11),%xmm8
- xorl %ebx,%edi
- addl %edx,%ecx
- pxor %xmm10,%xmm5
+ psrld $30,%xmm12
+ addl %ebp,%edx
rorl $7,%ebp
- addl %edi,%ecx
- movdqa %xmm3,%xmm6
- addl 32(%rsp),%ebx
+ por %xmm13,%xmm9
+ xorl %ebx,%edi
+ movl %edx,%esi
+ addl 28(%rsp),%ecx
+ pslld $2,%xmm3
+ pxor %xmm12,%xmm9
xorl %eax,%ebp
- movdqa %xmm5,%xmm10
-.byte 102,15,58,15,242,8
- movl %ecx,%edi
- roll $5,%ecx
-.byte 102,69,15,56,220,223
- movups 112(%r15),%xmm14
- paddd %xmm5,%xmm8
+ movdqa 16(%r11),%xmm12
+ roll $5,%edx
+ addl %edi,%ecx
andl %ebp,%esi
+ pxor %xmm3,%xmm9
xorl %eax,%ebp
- psrldq $4,%xmm10
- xorl %eax,%esi
- addl %ecx,%ebx
- pxor %xmm2,%xmm6
+ addl %edx,%ecx
rorl $7,%edx
- addl %esi,%ebx
- pxor %xmm4,%xmm10
- addl 36(%rsp),%eax
+ pshufd $238,%xmm6,%xmm10
+ xorl %eax,%esi
+ movdqa %xmm9,%xmm3
+ paddd %xmm9,%xmm12
+ movl %ecx,%edi
+ addl 32(%rsp),%ebx
+ movups 0(%r15),%xmm0
+.byte 102,15,56,220,209
+ punpcklqdq %xmm7,%xmm10
xorl %ebp,%edx
- movl %ebx,%esi
- roll $5,%ebx
- pxor %xmm10,%xmm6
+ roll $5,%ecx
+ addl %esi,%ebx
+ psrldq $4,%xmm3
andl %edx,%edi
xorl %ebp,%edx
- movdqa %xmm8,16(%rsp)
- xorl %ebp,%edi
- addl %ebx,%eax
- movdqa %xmm6,%xmm9
- movdqa %xmm6,%xmm10
+ pxor %xmm6,%xmm10
+ addl %ecx,%ebx
rorl $7,%ecx
- addl %edi,%eax
- addl 40(%rsp),%ebp
-.byte 102,69,15,56,220,222
- movups 128(%r15),%xmm15
+ pxor %xmm8,%xmm3
+ xorl %ebp,%edi
+ movl %ebx,%esi
+ addl 36(%rsp),%eax
+ pxor %xmm3,%xmm10
xorl %edx,%ecx
- pslldq $12,%xmm9
- paddd %xmm6,%xmm6
- movl %eax,%edi
- roll $5,%eax
+ roll $5,%ebx
+ movdqa %xmm12,16(%rsp)
+ addl %edi,%eax
andl %ecx,%esi
+ movdqa %xmm10,%xmm13
xorl %edx,%ecx
- psrld $31,%xmm10
- xorl %edx,%esi
- addl %eax,%ebp
- movdqa %xmm9,%xmm8
+ addl %ebx,%eax
rorl $7,%ebx
- addl %esi,%ebp
- psrld $30,%xmm9
- por %xmm10,%xmm6
- addl 44(%rsp),%edx
+ movups 16(%r15),%xmm1
+.byte 102,15,56,220,208
+ movdqa %xmm10,%xmm3
+ xorl %edx,%esi
+ pslldq $12,%xmm13
+ paddd %xmm10,%xmm10
+ movl %eax,%edi
+ addl 40(%rsp),%ebp
+ psrld $31,%xmm3
xorl %ecx,%ebx
- movl %ebp,%esi
- roll $5,%ebp
- pslld $2,%xmm8
- pxor %xmm9,%xmm6
+ roll $5,%eax
+ addl %esi,%ebp
+ movdqa %xmm13,%xmm12
andl %ebx,%edi
xorl %ecx,%ebx
- movdqa 16(%r11),%xmm9
- xorl %ecx,%edi
-.byte 102,69,15,56,220,223
- movups 144(%r15),%xmm14
- addl %ebp,%edx
- pxor %xmm8,%xmm6
+ psrld $30,%xmm13
+ addl %eax,%ebp
rorl $7,%eax
- addl %edi,%edx
- movdqa %xmm4,%xmm7
- addl 48(%rsp),%ecx
+ por %xmm3,%xmm10
+ xorl %ecx,%edi
+ movl %ebp,%esi
+ addl 44(%rsp),%edx
+ pslld $2,%xmm12
+ pxor %xmm13,%xmm10
xorl %ebx,%eax
- movdqa %xmm6,%xmm8
-.byte 102,15,58,15,251,8
- movl %edx,%edi
- roll $5,%edx
- paddd %xmm6,%xmm9
+ movdqa 16(%r11),%xmm13
+ roll $5,%ebp
+ addl %edi,%edx
+ movups 32(%r15),%xmm0
+.byte 102,15,56,220,209
andl %eax,%esi
+ pxor %xmm12,%xmm10
xorl %ebx,%eax
- psrldq $4,%xmm8
- xorl %ebx,%esi
- addl %edx,%ecx
- pxor %xmm3,%xmm7
+ addl %ebp,%edx
rorl $7,%ebp
- addl %esi,%ecx
- pxor %xmm5,%xmm8
- addl 52(%rsp),%ebx
+ pshufd $238,%xmm7,%xmm11
+ xorl %ebx,%esi
+ movdqa %xmm10,%xmm12
+ paddd %xmm10,%xmm13
+ movl %edx,%edi
+ addl 48(%rsp),%ecx
+ punpcklqdq %xmm8,%xmm11
xorl %eax,%ebp
- movl %ecx,%esi
- roll $5,%ecx
-.byte 102,69,15,56,220,222
- movups 160(%r15),%xmm15
- pxor %xmm8,%xmm7
+ roll $5,%edx
+ addl %esi,%ecx
+ psrldq $4,%xmm12
andl %ebp,%edi
xorl %eax,%ebp
- movdqa %xmm9,32(%rsp)
- xorl %eax,%edi
- addl %ecx,%ebx
- movdqa %xmm7,%xmm10
- movdqa %xmm7,%xmm8
+ pxor %xmm7,%xmm11
+ addl %edx,%ecx
rorl $7,%edx
- addl %edi,%ebx
- addl 56(%rsp),%eax
+ pxor %xmm9,%xmm12
+ xorl %eax,%edi
+ movl %ecx,%esi
+ addl 52(%rsp),%ebx
+ movups 48(%r15),%xmm1
+.byte 102,15,56,220,208
+ pxor %xmm12,%xmm11
xorl %ebp,%edx
- pslldq $12,%xmm10
- paddd %xmm7,%xmm7
- movl %ebx,%edi
- roll $5,%ebx
+ roll $5,%ecx
+ movdqa %xmm13,32(%rsp)
+ addl %edi,%ebx
andl %edx,%esi
+ movdqa %xmm11,%xmm3
xorl %ebp,%edx
- psrld $31,%xmm8
- xorl %ebp,%esi
- addl %ebx,%eax
- movdqa %xmm10,%xmm9
+ addl %ecx,%ebx
rorl $7,%ecx
+ movdqa %xmm11,%xmm12
+ xorl %ebp,%esi
+ pslldq $12,%xmm3
+ paddd %xmm11,%xmm11
+ movl %ebx,%edi
+ addl 56(%rsp),%eax
+ psrld $31,%xmm12
+ xorl %edx,%ecx
+ roll $5,%ebx
addl %esi,%eax
- psrld $30,%xmm10
- por %xmm8,%xmm7
- addl 60(%rsp),%ebp
+ movdqa %xmm3,%xmm13
+ andl %ecx,%edi
+ xorl %edx,%ecx
+ psrld $30,%xmm3
+ addl %ebx,%eax
+ rorl $7,%ebx
cmpl $11,%r8d
jb .Laesenclast1
- movups 176(%r15),%xmm14
-.byte 102,69,15,56,220,223
- movups 192(%r15),%xmm15
-.byte 102,69,15,56,220,222
+ movups 64(%r15),%xmm0
+.byte 102,15,56,220,209
+ movups 80(%r15),%xmm1
+.byte 102,15,56,220,208
je .Laesenclast1
- movups 208(%r15),%xmm14
-.byte 102,69,15,56,220,223
- movups 224(%r15),%xmm15
-.byte 102,69,15,56,220,222
+ movups 96(%r15),%xmm0
+.byte 102,15,56,220,209
+ movups 112(%r15),%xmm1
+.byte 102,15,56,220,208
.Laesenclast1:
-.byte 102,69,15,56,221,223
- movups 16(%r15),%xmm14
- xorl %edx,%ecx
+.byte 102,15,56,221,209
+ movups 16-112(%r15),%xmm0
+ por %xmm12,%xmm11
+ xorl %edx,%edi
movl %eax,%esi
+ addl 60(%rsp),%ebp
+ pslld $2,%xmm13
+ pxor %xmm3,%xmm11
+ xorl %ecx,%ebx
+ movdqa 16(%r11),%xmm3
roll $5,%eax
- pslld $2,%xmm9
- pxor %xmm10,%xmm7
- andl %ecx,%edi
- xorl %edx,%ecx
- movdqa 16(%r11),%xmm10
- xorl %edx,%edi
- addl %eax,%ebp
- pxor %xmm9,%xmm7
- rorl $7,%ebx
addl %edi,%ebp
- movdqa %xmm7,%xmm9
- addl 0(%rsp),%edx
- pxor %xmm4,%xmm0
-.byte 102,68,15,58,15,206,8
- xorl %ecx,%ebx
- movl %ebp,%edi
- roll $5,%ebp
- pxor %xmm1,%xmm0
andl %ebx,%esi
+ pxor %xmm13,%xmm11
+ pshufd $238,%xmm10,%xmm13
xorl %ecx,%ebx
- movdqa %xmm10,%xmm8
- paddd %xmm7,%xmm10
- xorl %ecx,%esi
- movups 16(%r12),%xmm12
- xorps %xmm13,%xmm12
- movups %xmm11,0(%r13,%r12,1)
- xorps %xmm12,%xmm11
-.byte 102,69,15,56,220,222
- movups 32(%r15),%xmm15
- addl %ebp,%edx
- pxor %xmm9,%xmm0
+ addl %eax,%ebp
rorl $7,%eax
- addl %esi,%edx
- addl 4(%rsp),%ecx
+ pxor %xmm8,%xmm4
+ xorl %ecx,%esi
+ movl %ebp,%edi
+ addl 0(%rsp),%edx
+ punpcklqdq %xmm11,%xmm13
xorl %ebx,%eax
- movdqa %xmm0,%xmm9
- movdqa %xmm10,48(%rsp)
- movl %edx,%esi
- roll $5,%edx
+ roll $5,%ebp
+ pxor %xmm5,%xmm4
+ addl %esi,%edx
+ movups 16(%r12),%xmm14
+ xorps %xmm15,%xmm14
+ movups %xmm2,0(%r12,%r13,1)
+ xorps %xmm14,%xmm2
+ movups -80(%r15),%xmm1
+.byte 102,15,56,220,208
andl %eax,%edi
+ movdqa %xmm3,%xmm12
xorl %ebx,%eax
- pslld $2,%xmm0
- xorl %ebx,%edi
- addl %edx,%ecx
- psrld $30,%xmm9
+ paddd %xmm11,%xmm3
+ addl %ebp,%edx
+ pxor %xmm13,%xmm4
rorl $7,%ebp
- addl %edi,%ecx
- addl 8(%rsp),%ebx
+ xorl %ebx,%edi
+ movl %edx,%esi
+ addl 4(%rsp),%ecx
+ movdqa %xmm4,%xmm13
xorl %eax,%ebp
- movl %ecx,%edi
- roll $5,%ecx
-.byte 102,69,15,56,220,223
- movups 48(%r15),%xmm14
- por %xmm9,%xmm0
+ roll $5,%edx
+ movdqa %xmm3,48(%rsp)
+ addl %edi,%ecx
andl %ebp,%esi
xorl %eax,%ebp
- movdqa %xmm0,%xmm10
- xorl %eax,%esi
- addl %ecx,%ebx
+ pslld $2,%xmm4
+ addl %edx,%ecx
rorl $7,%edx
- addl %esi,%ebx
- addl 12(%rsp),%eax
+ psrld $30,%xmm13
+ xorl %eax,%esi
+ movl %ecx,%edi
+ addl 8(%rsp),%ebx
+ movups -64(%r15),%xmm0
+.byte 102,15,56,220,209
+ por %xmm13,%xmm4
xorl %ebp,%edx
- movl %ebx,%esi
- roll $5,%ebx
+ roll $5,%ecx
+ pshufd $238,%xmm11,%xmm3
+ addl %esi,%ebx
andl %edx,%edi
xorl %ebp,%edx
+ addl %ecx,%ebx
+ addl 12(%rsp),%eax
xorl %ebp,%edi
- addl %ebx,%eax
- rorl $7,%ecx
+ movl %ebx,%esi
+ roll $5,%ebx
addl %edi,%eax
- addl 16(%rsp),%ebp
-.byte 102,69,15,56,220,222
- movups 64(%r15),%xmm15
- pxor %xmm5,%xmm1
-.byte 102,68,15,58,15,215,8
xorl %edx,%esi
+ rorl $7,%ecx
+ addl %ebx,%eax
+ pxor %xmm9,%xmm5
+ addl 16(%rsp),%ebp
+ movups -48(%r15),%xmm1
+.byte 102,15,56,220,208
+ xorl %ecx,%esi
+ punpcklqdq %xmm4,%xmm3
movl %eax,%edi
roll $5,%eax
- pxor %xmm2,%xmm1
- xorl %ecx,%esi
- addl %eax,%ebp
- movdqa %xmm8,%xmm9
- paddd %xmm0,%xmm8
- rorl $7,%ebx
+ pxor %xmm6,%xmm5
addl %esi,%ebp
- pxor %xmm10,%xmm1
- addl 20(%rsp),%edx
xorl %ecx,%edi
+ movdqa %xmm12,%xmm13
+ rorl $7,%ebx
+ paddd %xmm4,%xmm12
+ addl %eax,%ebp
+ pxor %xmm3,%xmm5
+ addl 20(%rsp),%edx
+ xorl %ebx,%edi
movl %ebp,%esi
roll $5,%ebp
- movdqa %xmm1,%xmm10
- movdqa %xmm8,0(%rsp)
- xorl %ebx,%edi
- addl %ebp,%edx
- rorl $7,%eax
+ movdqa %xmm5,%xmm3
addl %edi,%edx
- pslld $2,%xmm1
- addl 24(%rsp),%ecx
xorl %ebx,%esi
- psrld $30,%xmm10
+ movdqa %xmm12,0(%rsp)
+ rorl $7,%eax
+ addl %ebp,%edx
+ addl 24(%rsp),%ecx
+ pslld $2,%xmm5
+ xorl %eax,%esi
movl %edx,%edi
+ psrld $30,%xmm3
roll $5,%edx
- xorl %eax,%esi
-.byte 102,69,15,56,220,223
- movups 80(%r15),%xmm14
- addl %edx,%ecx
- rorl $7,%ebp
addl %esi,%ecx
- por %xmm10,%xmm1
- addl 28(%rsp),%ebx
+ movups -32(%r15),%xmm0
+.byte 102,15,56,220,209
xorl %eax,%edi
- movdqa %xmm1,%xmm8
+ rorl $7,%ebp
+ por %xmm3,%xmm5
+ addl %edx,%ecx
+ addl 28(%rsp),%ebx
+ pshufd $238,%xmm4,%xmm12
+ xorl %ebp,%edi
movl %ecx,%esi
roll $5,%ecx
- xorl %ebp,%edi
- addl %ecx,%ebx
- rorl $7,%edx
addl %edi,%ebx
- addl 32(%rsp),%eax
- pxor %xmm6,%xmm2
-.byte 102,68,15,58,15,192,8
xorl %ebp,%esi
+ rorl $7,%edx
+ addl %ecx,%ebx
+ pxor %xmm10,%xmm6
+ addl 32(%rsp),%eax
+ xorl %edx,%esi
+ punpcklqdq %xmm5,%xmm12
movl %ebx,%edi
roll $5,%ebx
- pxor %xmm3,%xmm2
- xorl %edx,%esi
- addl %ebx,%eax
- movdqa 32(%r11),%xmm10
- paddd %xmm1,%xmm9
- rorl $7,%ecx
+ pxor %xmm7,%xmm6
addl %esi,%eax
- pxor %xmm8,%xmm2
- addl 36(%rsp),%ebp
-.byte 102,69,15,56,220,222
- movups 96(%r15),%xmm15
xorl %edx,%edi
+ movdqa 32(%r11),%xmm3
+ rorl $7,%ecx
+ paddd %xmm5,%xmm13
+ addl %ebx,%eax
+ pxor %xmm12,%xmm6
+ addl 36(%rsp),%ebp
+ movups -16(%r15),%xmm1
+.byte 102,15,56,220,208
+ xorl %ecx,%edi
movl %eax,%esi
roll $5,%eax
- movdqa %xmm2,%xmm8
- movdqa %xmm9,16(%rsp)
- xorl %ecx,%edi
- addl %eax,%ebp
- rorl $7,%ebx
+ movdqa %xmm6,%xmm12
addl %edi,%ebp
- pslld $2,%xmm2
- addl 40(%rsp),%edx
xorl %ecx,%esi
- psrld $30,%xmm8
+ movdqa %xmm13,16(%rsp)
+ rorl $7,%ebx
+ addl %eax,%ebp
+ addl 40(%rsp),%edx
+ pslld $2,%xmm6
+ xorl %ebx,%esi
movl %ebp,%edi
+ psrld $30,%xmm12
roll $5,%ebp
- xorl %ebx,%esi
- addl %ebp,%edx
- rorl $7,%eax
addl %esi,%edx
- por %xmm8,%xmm2
- addl 44(%rsp),%ecx
xorl %ebx,%edi
- movdqa %xmm2,%xmm9
+ rorl $7,%eax
+ por %xmm12,%xmm6
+ addl %ebp,%edx
+ addl 44(%rsp),%ecx
+ pshufd $238,%xmm5,%xmm13
+ xorl %eax,%edi
movl %edx,%esi
roll $5,%edx
- xorl %eax,%edi
-.byte 102,69,15,56,220,223
- movups 112(%r15),%xmm14
- addl %edx,%ecx
- rorl $7,%ebp
addl %edi,%ecx
- addl 48(%rsp),%ebx
- pxor %xmm7,%xmm3
-.byte 102,68,15,58,15,201,8
+ movups 0(%r15),%xmm0
+.byte 102,15,56,220,209
xorl %eax,%esi
+ rorl $7,%ebp
+ addl %edx,%ecx
+ pxor %xmm11,%xmm7
+ addl 48(%rsp),%ebx
+ xorl %ebp,%esi
+ punpcklqdq %xmm6,%xmm13
movl %ecx,%edi
roll $5,%ecx
- pxor %xmm4,%xmm3
- xorl %ebp,%esi
- addl %ecx,%ebx
- movdqa %xmm10,%xmm8
- paddd %xmm2,%xmm10
- rorl $7,%edx
+ pxor %xmm8,%xmm7
addl %esi,%ebx
- pxor %xmm9,%xmm3
- addl 52(%rsp),%eax
xorl %ebp,%edi
+ movdqa %xmm3,%xmm12
+ rorl $7,%edx
+ paddd %xmm6,%xmm3
+ addl %ecx,%ebx
+ pxor %xmm13,%xmm7
+ addl 52(%rsp),%eax
+ xorl %edx,%edi
movl %ebx,%esi
roll $5,%ebx
- movdqa %xmm3,%xmm9
- movdqa %xmm10,32(%rsp)
- xorl %edx,%edi
- addl %ebx,%eax
- rorl $7,%ecx
+ movdqa %xmm7,%xmm13
addl %edi,%eax
- pslld $2,%xmm3
- addl 56(%rsp),%ebp
-.byte 102,69,15,56,220,222
- movups 128(%r15),%xmm15
xorl %edx,%esi
- psrld $30,%xmm9
+ movdqa %xmm3,32(%rsp)
+ rorl $7,%ecx
+ addl %ebx,%eax
+ addl 56(%rsp),%ebp
+ movups 16(%r15),%xmm1
+.byte 102,15,56,220,208
+ pslld $2,%xmm7
+ xorl %ecx,%esi
movl %eax,%edi
+ psrld $30,%xmm13
roll $5,%eax
- xorl %ecx,%esi
- addl %eax,%ebp
- rorl $7,%ebx
addl %esi,%ebp
- por %xmm9,%xmm3
- addl 60(%rsp),%edx
xorl %ecx,%edi
- movdqa %xmm3,%xmm10
+ rorl $7,%ebx
+ por %xmm13,%xmm7
+ addl %eax,%ebp
+ addl 60(%rsp),%edx
+ pshufd $238,%xmm6,%xmm3
+ xorl %ebx,%edi
movl %ebp,%esi
roll $5,%ebp
- xorl %ebx,%edi
- addl %ebp,%edx
- rorl $7,%eax
addl %edi,%edx
- addl 0(%rsp),%ecx
- pxor %xmm0,%xmm4
-.byte 102,68,15,58,15,210,8
xorl %ebx,%esi
+ rorl $7,%eax
+ addl %ebp,%edx
+ pxor %xmm4,%xmm8
+ addl 0(%rsp),%ecx
+ xorl %eax,%esi
+ punpcklqdq %xmm7,%xmm3
movl %edx,%edi
roll $5,%edx
- pxor %xmm5,%xmm4
- xorl %eax,%esi
-.byte 102,69,15,56,220,223
- movups 144(%r15),%xmm14
- addl %edx,%ecx
- movdqa %xmm8,%xmm9
- paddd %xmm3,%xmm8
- rorl $7,%ebp
+ pxor %xmm9,%xmm8
addl %esi,%ecx
- pxor %xmm10,%xmm4
- addl 4(%rsp),%ebx
+ movups 32(%r15),%xmm0
+.byte 102,15,56,220,209
xorl %eax,%edi
+ movdqa %xmm12,%xmm13
+ rorl $7,%ebp
+ paddd %xmm7,%xmm12
+ addl %edx,%ecx
+ pxor %xmm3,%xmm8
+ addl 4(%rsp),%ebx
+ xorl %ebp,%edi
movl %ecx,%esi
roll $5,%ecx
- movdqa %xmm4,%xmm10
- movdqa %xmm8,48(%rsp)
- xorl %ebp,%edi
- addl %ecx,%ebx
- rorl $7,%edx
+ movdqa %xmm8,%xmm3
addl %edi,%ebx
- pslld $2,%xmm4
- addl 8(%rsp),%eax
xorl %ebp,%esi
- psrld $30,%xmm10
+ movdqa %xmm12,48(%rsp)
+ rorl $7,%edx
+ addl %ecx,%ebx
+ addl 8(%rsp),%eax
+ pslld $2,%xmm8
+ xorl %edx,%esi
movl %ebx,%edi
+ psrld $30,%xmm3
roll $5,%ebx
- xorl %edx,%esi
- addl %ebx,%eax
- rorl $7,%ecx
addl %esi,%eax
- por %xmm10,%xmm4
- addl 12(%rsp),%ebp
-.byte 102,69,15,56,220,222
- movups 160(%r15),%xmm15
xorl %edx,%edi
- movdqa %xmm4,%xmm8
+ rorl $7,%ecx
+ por %xmm3,%xmm8
+ addl %ebx,%eax
+ addl 12(%rsp),%ebp
+ movups 48(%r15),%xmm1
+.byte 102,15,56,220,208
+ pshufd $238,%xmm7,%xmm12
+ xorl %ecx,%edi
movl %eax,%esi
roll $5,%eax
- xorl %ecx,%edi
- addl %eax,%ebp
- rorl $7,%ebx
addl %edi,%ebp
- addl 16(%rsp),%edx
- pxor %xmm1,%xmm5
-.byte 102,68,15,58,15,195,8
xorl %ecx,%esi
+ rorl $7,%ebx
+ addl %eax,%ebp
+ pxor %xmm5,%xmm9
+ addl 16(%rsp),%edx
+ xorl %ebx,%esi
+ punpcklqdq %xmm8,%xmm12
movl %ebp,%edi
roll $5,%ebp
- pxor %xmm6,%xmm5
- xorl %ebx,%esi
- addl %ebp,%edx
- movdqa %xmm9,%xmm10
- paddd %xmm4,%xmm9
- rorl $7,%eax
+ pxor %xmm10,%xmm9
addl %esi,%edx
- pxor %xmm8,%xmm5
- addl 20(%rsp),%ecx
xorl %ebx,%edi
+ movdqa %xmm13,%xmm3
+ rorl $7,%eax
+ paddd %xmm8,%xmm13
+ addl %ebp,%edx
+ pxor %xmm12,%xmm9
+ addl 20(%rsp),%ecx
+ xorl %eax,%edi
movl %edx,%esi
roll $5,%edx
- movdqa %xmm5,%xmm8
- movdqa %xmm9,0(%rsp)
- xorl %eax,%edi
+ movdqa %xmm9,%xmm12
+ addl %edi,%ecx
cmpl $11,%r8d
jb .Laesenclast2
- movups 176(%r15),%xmm14
-.byte 102,69,15,56,220,223
- movups 192(%r15),%xmm15
-.byte 102,69,15,56,220,222
+ movups 64(%r15),%xmm0
+.byte 102,15,56,220,209
+ movups 80(%r15),%xmm1
+.byte 102,15,56,220,208
je .Laesenclast2
- movups 208(%r15),%xmm14
-.byte 102,69,15,56,220,223
- movups 224(%r15),%xmm15
-.byte 102,69,15,56,220,222
+ movups 96(%r15),%xmm0
+.byte 102,15,56,220,209
+ movups 112(%r15),%xmm1
+.byte 102,15,56,220,208
.Laesenclast2:
-.byte 102,69,15,56,221,223
- movups 16(%r15),%xmm14
- addl %edx,%ecx
+.byte 102,15,56,221,209
+ movups 16-112(%r15),%xmm0
+ xorl %eax,%esi
+ movdqa %xmm13,0(%rsp)
rorl $7,%ebp
- addl %edi,%ecx
- pslld $2,%xmm5
+ addl %edx,%ecx
addl 24(%rsp),%ebx
- xorl %eax,%esi
- psrld $30,%xmm8
+ pslld $2,%xmm9
+ xorl %ebp,%esi
movl %ecx,%edi
+ psrld $30,%xmm12
roll $5,%ecx
- xorl %ebp,%esi
- addl %ecx,%ebx
- rorl $7,%edx
addl %esi,%ebx
- por %xmm8,%xmm5
- addl 28(%rsp),%eax
xorl %ebp,%edi
- movdqa %xmm5,%xmm9
+ rorl $7,%edx
+ por %xmm12,%xmm9
+ addl %ecx,%ebx
+ addl 28(%rsp),%eax
+ pshufd $238,%xmm8,%xmm13
+ rorl $7,%ecx
movl %ebx,%esi
- roll $5,%ebx
xorl %edx,%edi
- addl %ebx,%eax
- rorl $7,%ecx
+ roll $5,%ebx
addl %edi,%eax
- movl %ecx,%edi
- movups 32(%r12),%xmm12
- xorps %xmm13,%xmm12
- movups %xmm11,16(%r13,%r12,1)
- xorps %xmm12,%xmm11
-.byte 102,69,15,56,220,222
- movups 32(%r15),%xmm15
- pxor %xmm2,%xmm6
-.byte 102,68,15,58,15,204,8
+ xorl %ecx,%esi
xorl %edx,%ecx
+ addl %ebx,%eax
+ pxor %xmm6,%xmm10
addl 32(%rsp),%ebp
- andl %edx,%edi
- pxor %xmm7,%xmm6
+ movups 32(%r12),%xmm14
+ xorps %xmm15,%xmm14
+ movups %xmm2,16(%r13,%r12,1)
+ xorps %xmm14,%xmm2
+ movups -80(%r15),%xmm1
+.byte 102,15,56,220,208
andl %ecx,%esi
+ xorl %edx,%ecx
rorl $7,%ebx
- movdqa %xmm10,%xmm8
- paddd %xmm5,%xmm10
- addl %edi,%ebp
+ punpcklqdq %xmm9,%xmm13
movl %eax,%edi
- pxor %xmm9,%xmm6
+ xorl %ecx,%esi
+ pxor %xmm11,%xmm10
roll $5,%eax
addl %esi,%ebp
- xorl %edx,%ecx
- addl %eax,%ebp
- movdqa %xmm6,%xmm9
- movdqa %xmm10,16(%rsp)
- movl %ebx,%esi
+ movdqa %xmm3,%xmm12
+ xorl %ebx,%edi
+ paddd %xmm9,%xmm3
xorl %ecx,%ebx
+ pxor %xmm13,%xmm10
+ addl %eax,%ebp
addl 36(%rsp),%edx
- andl %ecx,%esi
- pslld $2,%xmm6
andl %ebx,%edi
+ xorl %ecx,%ebx
rorl $7,%eax
- psrld $30,%xmm9
- addl %esi,%edx
+ movdqa %xmm10,%xmm13
movl %ebp,%esi
+ xorl %ebx,%edi
+ movdqa %xmm3,16(%rsp)
roll $5,%ebp
-.byte 102,69,15,56,220,223
- movups 48(%r15),%xmm14
addl %edi,%edx
- xorl %ecx,%ebx
- addl %ebp,%edx
- por %xmm9,%xmm6
- movl %eax,%edi
+ movups -64(%r15),%xmm0
+.byte 102,15,56,220,209
+ xorl %eax,%esi
+ pslld $2,%xmm10
xorl %ebx,%eax
- movdqa %xmm6,%xmm10
+ addl %ebp,%edx
+ psrld $30,%xmm13
addl 40(%rsp),%ecx
- andl %ebx,%edi
andl %eax,%esi
+ xorl %ebx,%eax
+ por %xmm13,%xmm10
rorl $7,%ebp
- addl %edi,%ecx
movl %edx,%edi
+ xorl %eax,%esi
roll $5,%edx
+ pshufd $238,%xmm9,%xmm3
addl %esi,%ecx
- xorl %ebx,%eax
- addl %edx,%ecx
- movl %ebp,%esi
+ xorl %ebp,%edi
xorl %eax,%ebp
+ addl %edx,%ecx
addl 44(%rsp),%ebx
- andl %eax,%esi
andl %ebp,%edi
-.byte 102,69,15,56,220,222
- movups 64(%r15),%xmm15
+ xorl %eax,%ebp
rorl $7,%edx
- addl %esi,%ebx
+ movups -48(%r15),%xmm1
+.byte 102,15,56,220,208
movl %ecx,%esi
+ xorl %ebp,%edi
roll $5,%ecx
addl %edi,%ebx
- xorl %eax,%ebp
- addl %ecx,%ebx
- movl %edx,%edi
- pxor %xmm3,%xmm7
-.byte 102,68,15,58,15,213,8
+ xorl %edx,%esi
xorl %ebp,%edx
+ addl %ecx,%ebx
+ pxor %xmm7,%xmm11
addl 48(%rsp),%eax
- andl %ebp,%edi
- pxor %xmm0,%xmm7
andl %edx,%esi
+ xorl %ebp,%edx
rorl $7,%ecx
- movdqa 48(%r11),%xmm9
- paddd %xmm6,%xmm8
- addl %edi,%eax
+ punpcklqdq %xmm10,%xmm3
movl %ebx,%edi
- pxor %xmm10,%xmm7
+ xorl %edx,%esi
+ pxor %xmm4,%xmm11
roll $5,%ebx
addl %esi,%eax
- xorl %ebp,%edx
- addl %ebx,%eax
- movdqa %xmm7,%xmm10
- movdqa %xmm8,32(%rsp)
- movl %ecx,%esi
-.byte 102,69,15,56,220,223
- movups 80(%r15),%xmm14
+ movdqa 48(%r11),%xmm13
+ xorl %ecx,%edi
+ paddd %xmm10,%xmm12
xorl %edx,%ecx
+ pxor %xmm3,%xmm11
+ addl %ebx,%eax
addl 52(%rsp),%ebp
- andl %edx,%esi
- pslld $2,%xmm7
+ movups -32(%r15),%xmm0
+.byte 102,15,56,220,209
andl %ecx,%edi
+ xorl %edx,%ecx
rorl $7,%ebx
- psrld $30,%xmm10
- addl %esi,%ebp
+ movdqa %xmm11,%xmm3
movl %eax,%esi
+ xorl %ecx,%edi
+ movdqa %xmm12,32(%rsp)
roll $5,%eax
addl %edi,%ebp
- xorl %edx,%ecx
- addl %eax,%ebp
- por %xmm10,%xmm7
- movl %ebx,%edi
+ xorl %ebx,%esi
+ pslld $2,%xmm11
xorl %ecx,%ebx
- movdqa %xmm7,%xmm8
+ addl %eax,%ebp
+ psrld $30,%xmm3
addl 56(%rsp),%edx
- andl %ecx,%edi
andl %ebx,%esi
+ xorl %ecx,%ebx
+ por %xmm3,%xmm11
rorl $7,%eax
- addl %edi,%edx
movl %ebp,%edi
+ xorl %ebx,%esi
roll $5,%ebp
-.byte 102,69,15,56,220,222
- movups 96(%r15),%xmm15
+ pshufd $238,%xmm10,%xmm12
addl %esi,%edx
- xorl %ecx,%ebx
- addl %ebp,%edx
- movl %eax,%esi
+ movups -16(%r15),%xmm1
+.byte 102,15,56,220,208
+ xorl %eax,%edi
xorl %ebx,%eax
+ addl %ebp,%edx
addl 60(%rsp),%ecx
- andl %ebx,%esi
andl %eax,%edi
+ xorl %ebx,%eax
rorl $7,%ebp
- addl %esi,%ecx
movl %edx,%esi
+ xorl %eax,%edi
roll $5,%edx
addl %edi,%ecx
- xorl %ebx,%eax
- addl %edx,%ecx
- movl %ebp,%edi
- pxor %xmm4,%xmm0
-.byte 102,68,15,58,15,198,8
+ xorl %ebp,%esi
xorl %eax,%ebp
+ addl %edx,%ecx
+ pxor %xmm8,%xmm4
addl 0(%rsp),%ebx
- andl %eax,%edi
- pxor %xmm1,%xmm0
andl %ebp,%esi
-.byte 102,69,15,56,220,223
- movups 112(%r15),%xmm14
+ xorl %eax,%ebp
rorl $7,%edx
- movdqa %xmm9,%xmm10
- paddd %xmm7,%xmm9
- addl %edi,%ebx
+ movups 0(%r15),%xmm0
+.byte 102,15,56,220,209
+ punpcklqdq %xmm11,%xmm12
movl %ecx,%edi
- pxor %xmm8,%xmm0
+ xorl %ebp,%esi
+ pxor %xmm5,%xmm4
roll $5,%ecx
addl %esi,%ebx
- xorl %eax,%ebp
- addl %ecx,%ebx
- movdqa %xmm0,%xmm8
- movdqa %xmm9,48(%rsp)
- movl %edx,%esi
+ movdqa %xmm13,%xmm3
+ xorl %edx,%edi
+ paddd %xmm11,%xmm13
xorl %ebp,%edx
+ pxor %xmm12,%xmm4
+ addl %ecx,%ebx
addl 4(%rsp),%eax
- andl %ebp,%esi
- pslld $2,%xmm0
andl %edx,%edi
+ xorl %ebp,%edx
rorl $7,%ecx
- psrld $30,%xmm8
- addl %esi,%eax
+ movdqa %xmm4,%xmm12
movl %ebx,%esi
+ xorl %edx,%edi
+ movdqa %xmm13,48(%rsp)
roll $5,%ebx
addl %edi,%eax
- xorl %ebp,%edx
- addl %ebx,%eax
- por %xmm8,%xmm0
- movl %ecx,%edi
-.byte 102,69,15,56,220,222
- movups 128(%r15),%xmm15
+ xorl %ecx,%esi
+ pslld $2,%xmm4
xorl %edx,%ecx
- movdqa %xmm0,%xmm9
+ addl %ebx,%eax
+ psrld $30,%xmm12
addl 8(%rsp),%ebp
- andl %edx,%edi
+ movups 16(%r15),%xmm1
+.byte 102,15,56,220,208
andl %ecx,%esi
+ xorl %edx,%ecx
+ por %xmm12,%xmm4
rorl $7,%ebx
- addl %edi,%ebp
movl %eax,%edi
+ xorl %ecx,%esi
roll $5,%eax
+ pshufd $238,%xmm11,%xmm13
addl %esi,%ebp
- xorl %edx,%ecx
- addl %eax,%ebp
- movl %ebx,%esi
+ xorl %ebx,%edi
xorl %ecx,%ebx
+ addl %eax,%ebp
addl 12(%rsp),%edx
- andl %ecx,%esi
andl %ebx,%edi
+ xorl %ecx,%ebx
rorl $7,%eax
- addl %esi,%edx
movl %ebp,%esi
+ xorl %ebx,%edi
roll $5,%ebp
-.byte 102,69,15,56,220,223
- movups 144(%r15),%xmm14
addl %edi,%edx
- xorl %ecx,%ebx
- addl %ebp,%edx
- movl %eax,%edi
- pxor %xmm5,%xmm1
-.byte 102,68,15,58,15,207,8
+ movups 32(%r15),%xmm0
+.byte 102,15,56,220,209
+ xorl %eax,%esi
xorl %ebx,%eax
+ addl %ebp,%edx
+ pxor %xmm9,%xmm5
addl 16(%rsp),%ecx
- andl %ebx,%edi
- pxor %xmm2,%xmm1
andl %eax,%esi
+ xorl %ebx,%eax
rorl $7,%ebp
- movdqa %xmm10,%xmm8
- paddd %xmm0,%xmm10
- addl %edi,%ecx
+ punpcklqdq %xmm4,%xmm13
movl %edx,%edi
- pxor %xmm9,%xmm1
+ xorl %eax,%esi
+ pxor %xmm6,%xmm5
roll $5,%edx
addl %esi,%ecx
- xorl %ebx,%eax
- addl %edx,%ecx
- movdqa %xmm1,%xmm9
- movdqa %xmm10,0(%rsp)
- movl %ebp,%esi
+ movdqa %xmm3,%xmm12
+ xorl %ebp,%edi
+ paddd %xmm4,%xmm3
xorl %eax,%ebp
+ pxor %xmm13,%xmm5
+ addl %edx,%ecx
addl 20(%rsp),%ebx
- andl %eax,%esi
- pslld $2,%xmm1
andl %ebp,%edi
-.byte 102,69,15,56,220,222
- movups 160(%r15),%xmm15
+ xorl %eax,%ebp
rorl $7,%edx
- psrld $30,%xmm9
- addl %esi,%ebx
+ movups 48(%r15),%xmm1
+.byte 102,15,56,220,208
+ movdqa %xmm5,%xmm13
movl %ecx,%esi
+ xorl %ebp,%edi
+ movdqa %xmm3,0(%rsp)
roll $5,%ecx
addl %edi,%ebx
- xorl %eax,%ebp
- addl %ecx,%ebx
- por %xmm9,%xmm1
- movl %edx,%edi
+ xorl %edx,%esi
+ pslld $2,%xmm5
xorl %ebp,%edx
- movdqa %xmm1,%xmm10
+ addl %ecx,%ebx
+ psrld $30,%xmm13
addl 24(%rsp),%eax
- andl %ebp,%edi
andl %edx,%esi
+ xorl %ebp,%edx
+ por %xmm13,%xmm5
rorl $7,%ecx
- addl %edi,%eax
movl %ebx,%edi
+ xorl %edx,%esi
roll $5,%ebx
+ pshufd $238,%xmm4,%xmm3
addl %esi,%eax
- xorl %ebp,%edx
+ xorl %ecx,%edi
+ xorl %edx,%ecx
addl %ebx,%eax
- movl %ecx,%esi
+ addl 28(%rsp),%ebp
cmpl $11,%r8d
jb .Laesenclast3
- movups 176(%r15),%xmm14
-.byte 102,69,15,56,220,223
- movups 192(%r15),%xmm15
-.byte 102,69,15,56,220,222
+ movups 64(%r15),%xmm0
+.byte 102,15,56,220,209
+ movups 80(%r15),%xmm1
+.byte 102,15,56,220,208
je .Laesenclast3
- movups 208(%r15),%xmm14
-.byte 102,69,15,56,220,223
- movups 224(%r15),%xmm15
-.byte 102,69,15,56,220,222
+ movups 96(%r15),%xmm0
+.byte 102,15,56,220,209
+ movups 112(%r15),%xmm1
+.byte 102,15,56,220,208
.Laesenclast3:
-.byte 102,69,15,56,221,223
- movups 16(%r15),%xmm14
- xorl %edx,%ecx
- addl 28(%rsp),%ebp
- andl %edx,%esi
+.byte 102,15,56,221,209
+ movups 16-112(%r15),%xmm0
andl %ecx,%edi
+ xorl %edx,%ecx
rorl $7,%ebx
- addl %esi,%ebp
movl %eax,%esi
+ xorl %ecx,%edi
roll $5,%eax
addl %edi,%ebp
- xorl %edx,%ecx
- addl %eax,%ebp
- movl %ebx,%edi
- pxor %xmm6,%xmm2
-.byte 102,68,15,58,15,208,8
+ xorl %ebx,%esi
xorl %ecx,%ebx
+ addl %eax,%ebp
+ pxor %xmm10,%xmm6
addl 32(%rsp),%edx
- andl %ecx,%edi
- pxor %xmm3,%xmm2
andl %ebx,%esi
+ xorl %ecx,%ebx
rorl $7,%eax
- movdqa %xmm8,%xmm9
- paddd %xmm1,%xmm8
- addl %edi,%edx
+ punpcklqdq %xmm5,%xmm3
movl %ebp,%edi
- pxor %xmm10,%xmm2
+ xorl %ebx,%esi
+ pxor %xmm7,%xmm6
roll $5,%ebp
- movups 48(%r12),%xmm12
- xorps %xmm13,%xmm12
- movups %xmm11,32(%r13,%r12,1)
- xorps %xmm12,%xmm11
-.byte 102,69,15,56,220,222
- movups 32(%r15),%xmm15
addl %esi,%edx
- xorl %ecx,%ebx
- addl %ebp,%edx
- movdqa %xmm2,%xmm10
- movdqa %xmm8,16(%rsp)
- movl %eax,%esi
+ movups 48(%r12),%xmm14
+ xorps %xmm15,%xmm14
+ movups %xmm2,32(%r13,%r12,1)
+ xorps %xmm14,%xmm2
+ movups -80(%r15),%xmm1
+.byte 102,15,56,220,208
+ movdqa %xmm12,%xmm13
+ xorl %eax,%edi
+ paddd %xmm5,%xmm12
xorl %ebx,%eax
+ pxor %xmm3,%xmm6
+ addl %ebp,%edx
addl 36(%rsp),%ecx
- andl %ebx,%esi
- pslld $2,%xmm2
andl %eax,%edi
+ xorl %ebx,%eax
rorl $7,%ebp
- psrld $30,%xmm10
- addl %esi,%ecx
+ movdqa %xmm6,%xmm3
movl %edx,%esi
+ xorl %eax,%edi
+ movdqa %xmm12,16(%rsp)
roll $5,%edx
addl %edi,%ecx
- xorl %ebx,%eax
- addl %edx,%ecx
- por %xmm10,%xmm2
- movl %ebp,%edi
+ xorl %ebp,%esi
+ pslld $2,%xmm6
xorl %eax,%ebp
- movdqa %xmm2,%xmm8
+ addl %edx,%ecx
+ psrld $30,%xmm3
addl 40(%rsp),%ebx
- andl %eax,%edi
andl %ebp,%esi
-.byte 102,69,15,56,220,223
- movups 48(%r15),%xmm14
+ xorl %eax,%ebp
+ por %xmm3,%xmm6
rorl $7,%edx
- addl %edi,%ebx
+ movups -64(%r15),%xmm0
+.byte 102,15,56,220,209
movl %ecx,%edi
+ xorl %ebp,%esi
roll $5,%ecx
+ pshufd $238,%xmm5,%xmm12
addl %esi,%ebx
- xorl %eax,%ebp
- addl %ecx,%ebx
- movl %edx,%esi
+ xorl %edx,%edi
xorl %ebp,%edx
+ addl %ecx,%ebx
addl 44(%rsp),%eax
- andl %ebp,%esi
andl %edx,%edi
+ xorl %ebp,%edx
rorl $7,%ecx
- addl %esi,%eax
movl %ebx,%esi
+ xorl %edx,%edi
roll $5,%ebx
addl %edi,%eax
- xorl %ebp,%edx
+ xorl %edx,%esi
addl %ebx,%eax
+ pxor %xmm11,%xmm7
addl 48(%rsp),%ebp
-.byte 102,69,15,56,220,222
- movups 64(%r15),%xmm15
- pxor %xmm7,%xmm3
-.byte 102,68,15,58,15,193,8
- xorl %edx,%esi
+ movups -48(%r15),%xmm1
+.byte 102,15,56,220,208
+ xorl %ecx,%esi
+ punpcklqdq %xmm6,%xmm12
movl %eax,%edi
roll $5,%eax
- pxor %xmm4,%xmm3
- xorl %ecx,%esi
- addl %eax,%ebp
- movdqa %xmm9,%xmm10
- paddd %xmm2,%xmm9
- rorl $7,%ebx
+ pxor %xmm8,%xmm7
addl %esi,%ebp
- pxor %xmm8,%xmm3
- addl 52(%rsp),%edx
xorl %ecx,%edi
+ movdqa %xmm13,%xmm3
+ rorl $7,%ebx
+ paddd %xmm6,%xmm13
+ addl %eax,%ebp
+ pxor %xmm12,%xmm7
+ addl 52(%rsp),%edx
+ xorl %ebx,%edi
movl %ebp,%esi
roll $5,%ebp
- movdqa %xmm3,%xmm8
- movdqa %xmm9,32(%rsp)
- xorl %ebx,%edi
- addl %ebp,%edx
- rorl $7,%eax
+ movdqa %xmm7,%xmm12
addl %edi,%edx
- pslld $2,%xmm3
- addl 56(%rsp),%ecx
xorl %ebx,%esi
- psrld $30,%xmm8
+ movdqa %xmm13,32(%rsp)
+ rorl $7,%eax
+ addl %ebp,%edx
+ addl 56(%rsp),%ecx
+ pslld $2,%xmm7
+ xorl %eax,%esi
movl %edx,%edi
+ psrld $30,%xmm12
roll $5,%edx
- xorl %eax,%esi
-.byte 102,69,15,56,220,223
- movups 80(%r15),%xmm14
- addl %edx,%ecx
- rorl $7,%ebp
addl %esi,%ecx
- por %xmm8,%xmm3
- addl 60(%rsp),%ebx
+ movups -32(%r15),%xmm0
+.byte 102,15,56,220,209
xorl %eax,%edi
+ rorl $7,%ebp
+ por %xmm12,%xmm7
+ addl %edx,%ecx
+ addl 60(%rsp),%ebx
+ xorl %ebp,%edi
movl %ecx,%esi
roll $5,%ecx
- xorl %ebp,%edi
- addl %ecx,%ebx
- rorl $7,%edx
addl %edi,%ebx
- addl 0(%rsp),%eax
- paddd %xmm3,%xmm10
xorl %ebp,%esi
+ rorl $7,%edx
+ addl %ecx,%ebx
+ addl 0(%rsp),%eax
+ xorl %edx,%esi
movl %ebx,%edi
roll $5,%ebx
- xorl %edx,%esi
- movdqa %xmm10,48(%rsp)
- addl %ebx,%eax
- rorl $7,%ecx
+ paddd %xmm7,%xmm3
addl %esi,%eax
- addl 4(%rsp),%ebp
-.byte 102,69,15,56,220,222
- movups 96(%r15),%xmm15
xorl %edx,%edi
+ movdqa %xmm3,48(%rsp)
+ rorl $7,%ecx
+ addl %ebx,%eax
+ addl 4(%rsp),%ebp
+ movups -16(%r15),%xmm1
+.byte 102,15,56,220,208
+ xorl %ecx,%edi
movl %eax,%esi
roll $5,%eax
- xorl %ecx,%edi
- addl %eax,%ebp
- rorl $7,%ebx
addl %edi,%ebp
- addl 8(%rsp),%edx
xorl %ecx,%esi
+ rorl $7,%ebx
+ addl %eax,%ebp
+ addl 8(%rsp),%edx
+ xorl %ebx,%esi
movl %ebp,%edi
roll $5,%ebp
- xorl %ebx,%esi
- addl %ebp,%edx
- rorl $7,%eax
addl %esi,%edx
- addl 12(%rsp),%ecx
xorl %ebx,%edi
+ rorl $7,%eax
+ addl %ebp,%edx
+ addl 12(%rsp),%ecx
+ xorl %eax,%edi
movl %edx,%esi
roll $5,%edx
- xorl %eax,%edi
-.byte 102,69,15,56,220,223
- movups 112(%r15),%xmm14
- addl %edx,%ecx
- rorl $7,%ebp
addl %edi,%ecx
+ movups 0(%r15),%xmm0
+.byte 102,15,56,220,209
+ xorl %eax,%esi
+ rorl $7,%ebp
+ addl %edx,%ecx
cmpq %r14,%r10
je .Ldone_ssse3
- movdqa 64(%r11),%xmm6
- movdqa 0(%r11),%xmm9
- movdqu 0(%r10),%xmm0
- movdqu 16(%r10),%xmm1
- movdqu 32(%r10),%xmm2
- movdqu 48(%r10),%xmm3
-.byte 102,15,56,0,198
+ movdqa 64(%r11),%xmm3
+ movdqa 0(%r11),%xmm13
+ movdqu 0(%r10),%xmm4
+ movdqu 16(%r10),%xmm5
+ movdqu 32(%r10),%xmm6
+ movdqu 48(%r10),%xmm7
+.byte 102,15,56,0,227
addq $64,%r10
addl 16(%rsp),%ebx
- xorl %eax,%esi
-.byte 102,15,56,0,206
+ xorl %ebp,%esi
movl %ecx,%edi
+.byte 102,15,56,0,235
roll $5,%ecx
- paddd %xmm9,%xmm0
- xorl %ebp,%esi
- addl %ecx,%ebx
- rorl $7,%edx
addl %esi,%ebx
- movdqa %xmm0,0(%rsp)
- addl 20(%rsp),%eax
xorl %ebp,%edi
- psubd %xmm9,%xmm0
+ rorl $7,%edx
+ paddd %xmm13,%xmm4
+ addl %ecx,%ebx
+ addl 20(%rsp),%eax
+ xorl %edx,%edi
movl %ebx,%esi
+ movdqa %xmm4,0(%rsp)
roll $5,%ebx
- xorl %edx,%edi
- addl %ebx,%eax
- rorl $7,%ecx
addl %edi,%eax
- addl 24(%rsp),%ebp
-.byte 102,69,15,56,220,222
- movups 128(%r15),%xmm15
xorl %edx,%esi
+ rorl $7,%ecx
+ psubd %xmm13,%xmm4
+ addl %ebx,%eax
+ addl 24(%rsp),%ebp
+ movups 16(%r15),%xmm1
+.byte 102,15,56,220,208
+ xorl %ecx,%esi
movl %eax,%edi
roll $5,%eax
- xorl %ecx,%esi
- addl %eax,%ebp
- rorl $7,%ebx
addl %esi,%ebp
- addl 28(%rsp),%edx
xorl %ecx,%edi
+ rorl $7,%ebx
+ addl %eax,%ebp
+ addl 28(%rsp),%edx
+ xorl %ebx,%edi
movl %ebp,%esi
roll $5,%ebp
- xorl %ebx,%edi
- addl %ebp,%edx
- rorl $7,%eax
addl %edi,%edx
- addl 32(%rsp),%ecx
xorl %ebx,%esi
-.byte 102,15,56,0,214
+ rorl $7,%eax
+ addl %ebp,%edx
+ addl 32(%rsp),%ecx
+ xorl %eax,%esi
movl %edx,%edi
+.byte 102,15,56,0,243
roll $5,%edx
- paddd %xmm9,%xmm1
- xorl %eax,%esi
-.byte 102,69,15,56,220,223
- movups 144(%r15),%xmm14
- addl %edx,%ecx
- rorl $7,%ebp
addl %esi,%ecx
- movdqa %xmm1,16(%rsp)
- addl 36(%rsp),%ebx
+ movups 32(%r15),%xmm0
+.byte 102,15,56,220,209
xorl %eax,%edi
- psubd %xmm9,%xmm1
+ rorl $7,%ebp
+ paddd %xmm13,%xmm5
+ addl %edx,%ecx
+ addl 36(%rsp),%ebx
+ xorl %ebp,%edi
movl %ecx,%esi
+ movdqa %xmm5,16(%rsp)
roll $5,%ecx
- xorl %ebp,%edi
- addl %ecx,%ebx
- rorl $7,%edx
addl %edi,%ebx
- addl 40(%rsp),%eax
xorl %ebp,%esi
+ rorl $7,%edx
+ psubd %xmm13,%xmm5
+ addl %ecx,%ebx
+ addl 40(%rsp),%eax
+ xorl %edx,%esi
movl %ebx,%edi
roll $5,%ebx
- xorl %edx,%esi
- addl %ebx,%eax
- rorl $7,%ecx
addl %esi,%eax
- addl 44(%rsp),%ebp
-.byte 102,69,15,56,220,222
- movups 160(%r15),%xmm15
xorl %edx,%edi
+ rorl $7,%ecx
+ addl %ebx,%eax
+ addl 44(%rsp),%ebp
+ movups 48(%r15),%xmm1
+.byte 102,15,56,220,208
+ xorl %ecx,%edi
movl %eax,%esi
roll $5,%eax
- xorl %ecx,%edi
- addl %eax,%ebp
- rorl $7,%ebx
addl %edi,%ebp
- addl 48(%rsp),%edx
xorl %ecx,%esi
-.byte 102,15,56,0,222
+ rorl $7,%ebx
+ addl %eax,%ebp
+ addl 48(%rsp),%edx
+ xorl %ebx,%esi
movl %ebp,%edi
+.byte 102,15,56,0,251
roll $5,%ebp
- paddd %xmm9,%xmm2
- xorl %ebx,%esi
- addl %ebp,%edx
- rorl $7,%eax
addl %esi,%edx
- movdqa %xmm2,32(%rsp)
- addl 52(%rsp),%ecx
xorl %ebx,%edi
- psubd %xmm9,%xmm2
+ rorl $7,%eax
+ paddd %xmm13,%xmm6
+ addl %ebp,%edx
+ addl 52(%rsp),%ecx
+ xorl %eax,%edi
movl %edx,%esi
+ movdqa %xmm6,32(%rsp)
roll $5,%edx
- xorl %eax,%edi
+ addl %edi,%ecx
cmpl $11,%r8d
jb .Laesenclast4
- movups 176(%r15),%xmm14
-.byte 102,69,15,56,220,223
- movups 192(%r15),%xmm15
-.byte 102,69,15,56,220,222
+ movups 64(%r15),%xmm0
+.byte 102,15,56,220,209
+ movups 80(%r15),%xmm1
+.byte 102,15,56,220,208
je .Laesenclast4
- movups 208(%r15),%xmm14
-.byte 102,69,15,56,220,223
- movups 224(%r15),%xmm15
-.byte 102,69,15,56,220,222
+ movups 96(%r15),%xmm0
+.byte 102,15,56,220,209
+ movups 112(%r15),%xmm1
+.byte 102,15,56,220,208
.Laesenclast4:
-.byte 102,69,15,56,221,223
- movups 16(%r15),%xmm14
- addl %edx,%ecx
+.byte 102,15,56,221,209
+ movups 16-112(%r15),%xmm0
+ xorl %eax,%esi
rorl $7,%ebp
- addl %edi,%ecx
+ psubd %xmm13,%xmm6
+ addl %edx,%ecx
addl 56(%rsp),%ebx
- xorl %eax,%esi
+ xorl %ebp,%esi
movl %ecx,%edi
roll $5,%ecx
- xorl %ebp,%esi
- addl %ecx,%ebx
- rorl $7,%edx
addl %esi,%ebx
- addl 60(%rsp),%eax
xorl %ebp,%edi
+ rorl $7,%edx
+ addl %ecx,%ebx
+ addl 60(%rsp),%eax
+ xorl %edx,%edi
movl %ebx,%esi
roll $5,%ebx
- xorl %edx,%edi
- addl %ebx,%eax
- rorl $7,%ecx
addl %edi,%eax
- movups %xmm11,48(%r13,%r12,1)
+ rorl $7,%ecx
+ addl %ebx,%eax
+ movups %xmm2,48(%r13,%r12,1)
leaq 64(%r12),%r12
addl 0(%r9),%eax
@@ -1238,129 +1220,130 @@ aesni_cbc_sha1_enc_ssse3:
movl %esi,4(%r9)
movl %esi,%ebx
movl %ecx,8(%r9)
+ movl %ecx,%edi
movl %edx,12(%r9)
+ xorl %edx,%edi
movl %ebp,16(%r9)
+ andl %edi,%esi
jmp .Loop_ssse3
-.align 16
.Ldone_ssse3:
addl 16(%rsp),%ebx
- xorl %eax,%esi
+ xorl %ebp,%esi
movl %ecx,%edi
roll $5,%ecx
- xorl %ebp,%esi
- addl %ecx,%ebx
- rorl $7,%edx
addl %esi,%ebx
- addl 20(%rsp),%eax
xorl %ebp,%edi
+ rorl $7,%edx
+ addl %ecx,%ebx
+ addl 20(%rsp),%eax
+ xorl %edx,%edi
movl %ebx,%esi
roll $5,%ebx
- xorl %edx,%edi
- addl %ebx,%eax
- rorl $7,%ecx
addl %edi,%eax
- addl 24(%rsp),%ebp
-.byte 102,69,15,56,220,222
- movups 128(%r15),%xmm15
xorl %edx,%esi
+ rorl $7,%ecx
+ addl %ebx,%eax
+ addl 24(%rsp),%ebp
+ movups 16(%r15),%xmm1
+.byte 102,15,56,220,208
+ xorl %ecx,%esi
movl %eax,%edi
roll $5,%eax
- xorl %ecx,%esi
- addl %eax,%ebp
- rorl $7,%ebx
addl %esi,%ebp
- addl 28(%rsp),%edx
xorl %ecx,%edi
+ rorl $7,%ebx
+ addl %eax,%ebp
+ addl 28(%rsp),%edx
+ xorl %ebx,%edi
movl %ebp,%esi
roll $5,%ebp
- xorl %ebx,%edi
- addl %ebp,%edx
- rorl $7,%eax
addl %edi,%edx
- addl 32(%rsp),%ecx
xorl %ebx,%esi
+ rorl $7,%eax
+ addl %ebp,%edx
+ addl 32(%rsp),%ecx
+ xorl %eax,%esi
movl %edx,%edi
roll $5,%edx
- xorl %eax,%esi
-.byte 102,69,15,56,220,223
- movups 144(%r15),%xmm14
- addl %edx,%ecx
- rorl $7,%ebp
addl %esi,%ecx
- addl 36(%rsp),%ebx
+ movups 32(%r15),%xmm0
+.byte 102,15,56,220,209
xorl %eax,%edi
+ rorl $7,%ebp
+ addl %edx,%ecx
+ addl 36(%rsp),%ebx
+ xorl %ebp,%edi
movl %ecx,%esi
roll $5,%ecx
- xorl %ebp,%edi
- addl %ecx,%ebx
- rorl $7,%edx
addl %edi,%ebx
- addl 40(%rsp),%eax
xorl %ebp,%esi
+ rorl $7,%edx
+ addl %ecx,%ebx
+ addl 40(%rsp),%eax
+ xorl %edx,%esi
movl %ebx,%edi
roll $5,%ebx
- xorl %edx,%esi
- addl %ebx,%eax
- rorl $7,%ecx
addl %esi,%eax
- addl 44(%rsp),%ebp
-.byte 102,69,15,56,220,222
- movups 160(%r15),%xmm15
xorl %edx,%edi
+ rorl $7,%ecx
+ addl %ebx,%eax
+ addl 44(%rsp),%ebp
+ movups 48(%r15),%xmm1
+.byte 102,15,56,220,208
+ xorl %ecx,%edi
movl %eax,%esi
roll $5,%eax
- xorl %ecx,%edi
- addl %eax,%ebp
- rorl $7,%ebx
addl %edi,%ebp
- addl 48(%rsp),%edx
xorl %ecx,%esi
+ rorl $7,%ebx
+ addl %eax,%ebp
+ addl 48(%rsp),%edx
+ xorl %ebx,%esi
movl %ebp,%edi
roll $5,%ebp
- xorl %ebx,%esi
- addl %ebp,%edx
- rorl $7,%eax
addl %esi,%edx
- addl 52(%rsp),%ecx
xorl %ebx,%edi
+ rorl $7,%eax
+ addl %ebp,%edx
+ addl 52(%rsp),%ecx
+ xorl %eax,%edi
movl %edx,%esi
roll $5,%edx
- xorl %eax,%edi
+ addl %edi,%ecx
cmpl $11,%r8d
jb .Laesenclast5
- movups 176(%r15),%xmm14
-.byte 102,69,15,56,220,223
- movups 192(%r15),%xmm15
-.byte 102,69,15,56,220,222
+ movups 64(%r15),%xmm0
+.byte 102,15,56,220,209
+ movups 80(%r15),%xmm1
+.byte 102,15,56,220,208
je .Laesenclast5
- movups 208(%r15),%xmm14
-.byte 102,69,15,56,220,223
- movups 224(%r15),%xmm15
-.byte 102,69,15,56,220,222
+ movups 96(%r15),%xmm0
+.byte 102,15,56,220,209
+ movups 112(%r15),%xmm1
+.byte 102,15,56,220,208
.Laesenclast5:
-.byte 102,69,15,56,221,223
- movups 16(%r15),%xmm14
- addl %edx,%ecx
+.byte 102,15,56,221,209
+ movups 16-112(%r15),%xmm0
+ xorl %eax,%esi
rorl $7,%ebp
- addl %edi,%ecx
+ addl %edx,%ecx
addl 56(%rsp),%ebx
- xorl %eax,%esi
+ xorl %ebp,%esi
movl %ecx,%edi
roll $5,%ecx
- xorl %ebp,%esi
- addl %ecx,%ebx
- rorl $7,%edx
addl %esi,%ebx
- addl 60(%rsp),%eax
xorl %ebp,%edi
+ rorl $7,%edx
+ addl %ecx,%ebx
+ addl 60(%rsp),%eax
+ xorl %edx,%edi
movl %ebx,%esi
roll $5,%ebx
- xorl %edx,%edi
- addl %ebx,%eax
- rorl $7,%ecx
addl %edi,%eax
- movups %xmm11,48(%r13,%r12,1)
+ rorl $7,%ecx
+ addl %ebx,%eax
+ movups %xmm2,48(%r13,%r12,1)
movq 88(%rsp),%r8
addl 0(%r9),%eax
@@ -1373,7 +1356,7 @@ aesni_cbc_sha1_enc_ssse3:
movl %ecx,8(%r9)
movl %edx,12(%r9)
movl %ebp,16(%r9)
- movups %xmm11,(%r8)
+ movups %xmm2,(%r8)
leaq 104(%rsp),%rsi
movq 0(%rsi),%r15
movq 8(%rsi),%r14
@@ -1387,11 +1370,313 @@ aesni_cbc_sha1_enc_ssse3:
.size aesni_cbc_sha1_enc_ssse3,.-aesni_cbc_sha1_enc_ssse3
.align 64
K_XX_XX:
-.long 0x5a827999,0x5a827999,0x5a827999,0x5a827999
-.long 0x6ed9eba1,0x6ed9eba1,0x6ed9eba1,0x6ed9eba1
-.long 0x8f1bbcdc,0x8f1bbcdc,0x8f1bbcdc,0x8f1bbcdc
-.long 0xca62c1d6,0xca62c1d6,0xca62c1d6,0xca62c1d6
-.long 0x00010203,0x04050607,0x08090a0b,0x0c0d0e0f
+.long 0x5a827999,0x5a827999,0x5a827999,0x5a827999
+.long 0x6ed9eba1,0x6ed9eba1,0x6ed9eba1,0x6ed9eba1
+.long 0x8f1bbcdc,0x8f1bbcdc,0x8f1bbcdc,0x8f1bbcdc
+.long 0xca62c1d6,0xca62c1d6,0xca62c1d6,0xca62c1d6
+.long 0x00010203,0x04050607,0x08090a0b,0x0c0d0e0f
+.byte 0xf,0xe,0xd,0xc,0xb,0xa,0x9,0x8,0x7,0x6,0x5,0x4,0x3,0x2,0x1,0x0
.byte 65,69,83,78,73,45,67,66,67,43,83,72,65,49,32,115,116,105,116,99,104,32,102,111,114,32,120,56,54,95,54,52,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0
.align 64
+.type aesni_cbc_sha1_enc_shaext,@function
+.align 32
+aesni_cbc_sha1_enc_shaext:
+ movq 8(%rsp),%r10
+ movdqu (%r9),%xmm8
+ movd 16(%r9),%xmm9
+ movdqa K_XX_XX+80(%rip),%xmm7
+
+ movl 240(%rcx),%r11d
+ subq %rdi,%rsi
+ movups (%rcx),%xmm15
+ movups 16(%rcx),%xmm0
+ leaq 112(%rcx),%rcx
+
+ pshufd $27,%xmm8,%xmm8
+ pshufd $27,%xmm9,%xmm9
+ jmp .Loop_shaext
+
+.align 16
+.Loop_shaext:
+ movups 0(%rdi),%xmm14
+ xorps %xmm15,%xmm14
+ xorps %xmm14,%xmm2
+ movups -80(%rcx),%xmm1
+.byte 102,15,56,220,208
+ movdqu (%r10),%xmm3
+ movdqa %xmm9,%xmm12
+.byte 102,15,56,0,223
+ movdqu 16(%r10),%xmm4
+ movdqa %xmm8,%xmm11
+ movups -64(%rcx),%xmm0
+.byte 102,15,56,220,209
+.byte 102,15,56,0,231
+
+ paddd %xmm3,%xmm9
+ movdqu 32(%r10),%xmm5
+ leaq 64(%r10),%r10
+ pxor %xmm12,%xmm3
+ movups -48(%rcx),%xmm1
+.byte 102,15,56,220,208
+ pxor %xmm12,%xmm3
+ movdqa %xmm8,%xmm10
+.byte 102,15,56,0,239
+.byte 69,15,58,204,193,0
+.byte 68,15,56,200,212
+ movups -32(%rcx),%xmm0
+.byte 102,15,56,220,209
+.byte 15,56,201,220
+ movdqu -16(%r10),%xmm6
+ movdqa %xmm8,%xmm9
+.byte 102,15,56,0,247
+ movups -16(%rcx),%xmm1
+.byte 102,15,56,220,208
+.byte 69,15,58,204,194,0
+.byte 68,15,56,200,205
+ pxor %xmm5,%xmm3
+.byte 15,56,201,229
+ movups 0(%rcx),%xmm0
+.byte 102,15,56,220,209
+ movdqa %xmm8,%xmm10
+.byte 69,15,58,204,193,0
+.byte 68,15,56,200,214
+ movups 16(%rcx),%xmm1
+.byte 102,15,56,220,208
+.byte 15,56,202,222
+ pxor %xmm6,%xmm4
+.byte 15,56,201,238
+ movups 32(%rcx),%xmm0
+.byte 102,15,56,220,209
+ movdqa %xmm8,%xmm9
+.byte 69,15,58,204,194,0
+.byte 68,15,56,200,203
+ movups 48(%rcx),%xmm1
+.byte 102,15,56,220,208
+.byte 15,56,202,227
+ pxor %xmm3,%xmm5
+.byte 15,56,201,243
+ cmpl $11,%r11d
+ jb .Laesenclast6
+ movups 64(%rcx),%xmm0
+.byte 102,15,56,220,209
+ movups 80(%rcx),%xmm1
+.byte 102,15,56,220,208
+ je .Laesenclast6
+ movups 96(%rcx),%xmm0
+.byte 102,15,56,220,209
+ movups 112(%rcx),%xmm1
+.byte 102,15,56,220,208
+.Laesenclast6:
+.byte 102,15,56,221,209
+ movups 16-112(%rcx),%xmm0
+ movdqa %xmm8,%xmm10
+.byte 69,15,58,204,193,0
+.byte 68,15,56,200,212
+ movups 16(%rdi),%xmm14
+ xorps %xmm15,%xmm14
+ movups %xmm2,0(%rsi,%rdi,1)
+ xorps %xmm14,%xmm2
+ movups -80(%rcx),%xmm1
+.byte 102,15,56,220,208
+.byte 15,56,202,236
+ pxor %xmm4,%xmm6
+.byte 15,56,201,220
+ movups -64(%rcx),%xmm0
+.byte 102,15,56,220,209
+ movdqa %xmm8,%xmm9
+.byte 69,15,58,204,194,1
+.byte 68,15,56,200,205
+ movups -48(%rcx),%xmm1
+.byte 102,15,56,220,208
+.byte 15,56,202,245
+ pxor %xmm5,%xmm3
+.byte 15,56,201,229
+ movups -32(%rcx),%xmm0
+.byte 102,15,56,220,209
+ movdqa %xmm8,%xmm10
+.byte 69,15,58,204,193,1
+.byte 68,15,56,200,214
+ movups -16(%rcx),%xmm1
+.byte 102,15,56,220,208
+.byte 15,56,202,222
+ pxor %xmm6,%xmm4
+.byte 15,56,201,238
+ movups 0(%rcx),%xmm0
+.byte 102,15,56,220,209
+ movdqa %xmm8,%xmm9
+.byte 69,15,58,204,194,1
+.byte 68,15,56,200,203
+ movups 16(%rcx),%xmm1
+.byte 102,15,56,220,208
+.byte 15,56,202,227
+ pxor %xmm3,%xmm5
+.byte 15,56,201,243
+ movups 32(%rcx),%xmm0
+.byte 102,15,56,220,209
+ movdqa %xmm8,%xmm10
+.byte 69,15,58,204,193,1
+.byte 68,15,56,200,212
+ movups 48(%rcx),%xmm1
+.byte 102,15,56,220,208
+.byte 15,56,202,236
+ pxor %xmm4,%xmm6
+.byte 15,56,201,220
+ cmpl $11,%r11d
+ jb .Laesenclast7
+ movups 64(%rcx),%xmm0
+.byte 102,15,56,220,209
+ movups 80(%rcx),%xmm1
+.byte 102,15,56,220,208
+ je .Laesenclast7
+ movups 96(%rcx),%xmm0
+.byte 102,15,56,220,209
+ movups 112(%rcx),%xmm1
+.byte 102,15,56,220,208
+.Laesenclast7:
+.byte 102,15,56,221,209
+ movups 16-112(%rcx),%xmm0
+ movdqa %xmm8,%xmm9
+.byte 69,15,58,204,194,1
+.byte 68,15,56,200,205
+ movups 32(%rdi),%xmm14
+ xorps %xmm15,%xmm14
+ movups %xmm2,16(%rsi,%rdi,1)
+ xorps %xmm14,%xmm2
+ movups -80(%rcx),%xmm1
+.byte 102,15,56,220,208
+.byte 15,56,202,245
+ pxor %xmm5,%xmm3
+.byte 15,56,201,229
+ movups -64(%rcx),%xmm0
+.byte 102,15,56,220,209
+ movdqa %xmm8,%xmm10
+.byte 69,15,58,204,193,2
+.byte 68,15,56,200,214
+ movups -48(%rcx),%xmm1
+.byte 102,15,56,220,208
+.byte 15,56,202,222
+ pxor %xmm6,%xmm4
+.byte 15,56,201,238
+ movups -32(%rcx),%xmm0
+.byte 102,15,56,220,209
+ movdqa %xmm8,%xmm9
+.byte 69,15,58,204,194,2
+.byte 68,15,56,200,203
+ movups -16(%rcx),%xmm1
+.byte 102,15,56,220,208
+.byte 15,56,202,227
+ pxor %xmm3,%xmm5
+.byte 15,56,201,243
+ movups 0(%rcx),%xmm0
+.byte 102,15,56,220,209
+ movdqa %xmm8,%xmm10
+.byte 69,15,58,204,193,2
+.byte 68,15,56,200,212
+ movups 16(%rcx),%xmm1
+.byte 102,15,56,220,208
+.byte 15,56,202,236
+ pxor %xmm4,%xmm6
+.byte 15,56,201,220
+ movups 32(%rcx),%xmm0
+.byte 102,15,56,220,209
+ movdqa %xmm8,%xmm9
+.byte 69,15,58,204,194,2
+.byte 68,15,56,200,205
+ movups 48(%rcx),%xmm1
+.byte 102,15,56,220,208
+.byte 15,56,202,245
+ pxor %xmm5,%xmm3
+.byte 15,56,201,229
+ cmpl $11,%r11d
+ jb .Laesenclast8
+ movups 64(%rcx),%xmm0
+.byte 102,15,56,220,209
+ movups 80(%rcx),%xmm1
+.byte 102,15,56,220,208
+ je .Laesenclast8
+ movups 96(%rcx),%xmm0
+.byte 102,15,56,220,209
+ movups 112(%rcx),%xmm1
+.byte 102,15,56,220,208
+.Laesenclast8:
+.byte 102,15,56,221,209
+ movups 16-112(%rcx),%xmm0
+ movdqa %xmm8,%xmm10
+.byte 69,15,58,204,193,2
+.byte 68,15,56,200,214
+ movups 48(%rdi),%xmm14
+ xorps %xmm15,%xmm14
+ movups %xmm2,32(%rsi,%rdi,1)
+ xorps %xmm14,%xmm2
+ movups -80(%rcx),%xmm1
+.byte 102,15,56,220,208
+.byte 15,56,202,222
+ pxor %xmm6,%xmm4
+.byte 15,56,201,238
+ movups -64(%rcx),%xmm0
+.byte 102,15,56,220,209
+ movdqa %xmm8,%xmm9
+.byte 69,15,58,204,194,3
+.byte 68,15,56,200,203
+ movups -48(%rcx),%xmm1
+.byte 102,15,56,220,208
+.byte 15,56,202,227
+ pxor %xmm3,%xmm5
+.byte 15,56,201,243
+ movups -32(%rcx),%xmm0
+.byte 102,15,56,220,209
+ movdqa %xmm8,%xmm10
+.byte 69,15,58,204,193,3
+.byte 68,15,56,200,212
+.byte 15,56,202,236
+ pxor %xmm4,%xmm6
+ movups -16(%rcx),%xmm1
+.byte 102,15,56,220,208
+ movdqa %xmm8,%xmm9
+.byte 69,15,58,204,194,3
+.byte 68,15,56,200,205
+.byte 15,56,202,245
+ movups 0(%rcx),%xmm0
+.byte 102,15,56,220,209
+ movdqa %xmm12,%xmm5
+ movdqa %xmm8,%xmm10
+.byte 69,15,58,204,193,3
+.byte 68,15,56,200,214
+ movups 16(%rcx),%xmm1
+.byte 102,15,56,220,208
+ movdqa %xmm8,%xmm9
+.byte 69,15,58,204,194,3
+.byte 68,15,56,200,205
+ movups 32(%rcx),%xmm0
+.byte 102,15,56,220,209
+ movups 48(%rcx),%xmm1
+.byte 102,15,56,220,208
+ cmpl $11,%r11d
+ jb .Laesenclast9
+ movups 64(%rcx),%xmm0
+.byte 102,15,56,220,209
+ movups 80(%rcx),%xmm1
+.byte 102,15,56,220,208
+ je .Laesenclast9
+ movups 96(%rcx),%xmm0
+.byte 102,15,56,220,209
+ movups 112(%rcx),%xmm1
+.byte 102,15,56,220,208
+.Laesenclast9:
+.byte 102,15,56,221,209
+ movups 16-112(%rcx),%xmm0
+ decq %rdx
+
+ paddd %xmm11,%xmm8
+ movups %xmm2,48(%rsi,%rdi,1)
+ leaq 64(%rdi),%rdi
+ jnz .Loop_shaext
+
+ pshufd $27,%xmm8,%xmm8
+ pshufd $27,%xmm9,%xmm9
+ movups %xmm2,(%r8)
+ movdqu %xmm8,(%r9)
+ movd %xmm9,16(%r9)
+ .byte 0xf3,0xc3
+.size aesni_cbc_sha1_enc_shaext,.-aesni_cbc_sha1_enc_shaext
diff --git a/secure/lib/libcrypto/amd64/aesni-sha256-x86_64.S b/secure/lib/libcrypto/amd64/aesni-sha256-x86_64.S
new file mode 100644
index 0000000..a940892
--- /dev/null
+++ b/secure/lib/libcrypto/amd64/aesni-sha256-x86_64.S
@@ -0,0 +1,58 @@
+ # $FreeBSD$
+.text
+
+
+.globl aesni_cbc_sha256_enc
+.type aesni_cbc_sha256_enc,@function
+.align 16
+aesni_cbc_sha256_enc:
+ xorl %eax,%eax
+ cmpq $0,%rdi
+ je .Lprobe
+ ud2
+.Lprobe:
+ .byte 0xf3,0xc3
+.size aesni_cbc_sha256_enc,.-aesni_cbc_sha256_enc
+
+.align 64
+.type K256,@object
+K256:
+.long 0x428a2f98,0x71374491,0xb5c0fbcf,0xe9b5dba5
+.long 0x428a2f98,0x71374491,0xb5c0fbcf,0xe9b5dba5
+.long 0x3956c25b,0x59f111f1,0x923f82a4,0xab1c5ed5
+.long 0x3956c25b,0x59f111f1,0x923f82a4,0xab1c5ed5
+.long 0xd807aa98,0x12835b01,0x243185be,0x550c7dc3
+.long 0xd807aa98,0x12835b01,0x243185be,0x550c7dc3
+.long 0x72be5d74,0x80deb1fe,0x9bdc06a7,0xc19bf174
+.long 0x72be5d74,0x80deb1fe,0x9bdc06a7,0xc19bf174
+.long 0xe49b69c1,0xefbe4786,0x0fc19dc6,0x240ca1cc
+.long 0xe49b69c1,0xefbe4786,0x0fc19dc6,0x240ca1cc
+.long 0x2de92c6f,0x4a7484aa,0x5cb0a9dc,0x76f988da
+.long 0x2de92c6f,0x4a7484aa,0x5cb0a9dc,0x76f988da
+.long 0x983e5152,0xa831c66d,0xb00327c8,0xbf597fc7
+.long 0x983e5152,0xa831c66d,0xb00327c8,0xbf597fc7
+.long 0xc6e00bf3,0xd5a79147,0x06ca6351,0x14292967
+.long 0xc6e00bf3,0xd5a79147,0x06ca6351,0x14292967
+.long 0x27b70a85,0x2e1b2138,0x4d2c6dfc,0x53380d13
+.long 0x27b70a85,0x2e1b2138,0x4d2c6dfc,0x53380d13
+.long 0x650a7354,0x766a0abb,0x81c2c92e,0x92722c85
+.long 0x650a7354,0x766a0abb,0x81c2c92e,0x92722c85
+.long 0xa2bfe8a1,0xa81a664b,0xc24b8b70,0xc76c51a3
+.long 0xa2bfe8a1,0xa81a664b,0xc24b8b70,0xc76c51a3
+.long 0xd192e819,0xd6990624,0xf40e3585,0x106aa070
+.long 0xd192e819,0xd6990624,0xf40e3585,0x106aa070
+.long 0x19a4c116,0x1e376c08,0x2748774c,0x34b0bcb5
+.long 0x19a4c116,0x1e376c08,0x2748774c,0x34b0bcb5
+.long 0x391c0cb3,0x4ed8aa4a,0x5b9cca4f,0x682e6ff3
+.long 0x391c0cb3,0x4ed8aa4a,0x5b9cca4f,0x682e6ff3
+.long 0x748f82ee,0x78a5636f,0x84c87814,0x8cc70208
+.long 0x748f82ee,0x78a5636f,0x84c87814,0x8cc70208
+.long 0x90befffa,0xa4506ceb,0xbef9a3f7,0xc67178f2
+.long 0x90befffa,0xa4506ceb,0xbef9a3f7,0xc67178f2
+
+.long 0x00010203,0x04050607,0x08090a0b,0x0c0d0e0f
+.long 0x00010203,0x04050607,0x08090a0b,0x0c0d0e0f
+.long 0,0,0,0, 0,0,0,0, -1,-1,-1,-1
+.long 0,0,0,0, 0,0,0,0
+.byte 65,69,83,78,73,45,67,66,67,43,83,72,65,50,53,54,32,115,116,105,116,99,104,32,102,111,114,32,120,56,54,95,54,52,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0
+.align 64
diff --git a/secure/lib/libcrypto/amd64/aesni-x86_64.S b/secure/lib/libcrypto/amd64/aesni-x86_64.S
index df677a7..082a306 100644
--- a/secure/lib/libcrypto/amd64/aesni-x86_64.S
+++ b/secure/lib/libcrypto/amd64/aesni-x86_64.S
@@ -1,5 +1,6 @@
# $FreeBSD$
.text
+
.globl aesni_encrypt
.type aesni_encrypt,@function
.align 16
@@ -15,9 +16,12 @@ aesni_encrypt:
decl %eax
movups (%rdx),%xmm1
leaq 16(%rdx),%rdx
- jnz .Loop_enc1_1
+ jnz .Loop_enc1_1
.byte 102,15,56,221,209
+ pxor %xmm0,%xmm0
+ pxor %xmm1,%xmm1
movups %xmm2,(%rsi)
+ pxor %xmm2,%xmm2
.byte 0xf3,0xc3
.size aesni_encrypt,.-aesni_encrypt
@@ -36,34 +40,96 @@ aesni_decrypt:
decl %eax
movups (%rdx),%xmm1
leaq 16(%rdx),%rdx
- jnz .Loop_dec1_2
+ jnz .Loop_dec1_2
.byte 102,15,56,223,209
+ pxor %xmm0,%xmm0
+ pxor %xmm1,%xmm1
movups %xmm2,(%rsi)
+ pxor %xmm2,%xmm2
.byte 0xf3,0xc3
.size aesni_decrypt, .-aesni_decrypt
+.type _aesni_encrypt2,@function
+.align 16
+_aesni_encrypt2:
+ movups (%rcx),%xmm0
+ shll $4,%eax
+ movups 16(%rcx),%xmm1
+ xorps %xmm0,%xmm2
+ xorps %xmm0,%xmm3
+ movups 32(%rcx),%xmm0
+ leaq 32(%rcx,%rax,1),%rcx
+ negq %rax
+ addq $16,%rax
+
+.Lenc_loop2:
+.byte 102,15,56,220,209
+.byte 102,15,56,220,217
+ movups (%rcx,%rax,1),%xmm1
+ addq $32,%rax
+.byte 102,15,56,220,208
+.byte 102,15,56,220,216
+ movups -16(%rcx,%rax,1),%xmm0
+ jnz .Lenc_loop2
+
+.byte 102,15,56,220,209
+.byte 102,15,56,220,217
+.byte 102,15,56,221,208
+.byte 102,15,56,221,216
+ .byte 0xf3,0xc3
+.size _aesni_encrypt2,.-_aesni_encrypt2
+.type _aesni_decrypt2,@function
+.align 16
+_aesni_decrypt2:
+ movups (%rcx),%xmm0
+ shll $4,%eax
+ movups 16(%rcx),%xmm1
+ xorps %xmm0,%xmm2
+ xorps %xmm0,%xmm3
+ movups 32(%rcx),%xmm0
+ leaq 32(%rcx,%rax,1),%rcx
+ negq %rax
+ addq $16,%rax
+
+.Ldec_loop2:
+.byte 102,15,56,222,209
+.byte 102,15,56,222,217
+ movups (%rcx,%rax,1),%xmm1
+ addq $32,%rax
+.byte 102,15,56,222,208
+.byte 102,15,56,222,216
+ movups -16(%rcx,%rax,1),%xmm0
+ jnz .Ldec_loop2
+
+.byte 102,15,56,222,209
+.byte 102,15,56,222,217
+.byte 102,15,56,223,208
+.byte 102,15,56,223,216
+ .byte 0xf3,0xc3
+.size _aesni_decrypt2,.-_aesni_decrypt2
.type _aesni_encrypt3,@function
.align 16
_aesni_encrypt3:
movups (%rcx),%xmm0
- shrl $1,%eax
+ shll $4,%eax
movups 16(%rcx),%xmm1
- leaq 32(%rcx),%rcx
xorps %xmm0,%xmm2
xorps %xmm0,%xmm3
xorps %xmm0,%xmm4
- movups (%rcx),%xmm0
+ movups 32(%rcx),%xmm0
+ leaq 32(%rcx,%rax,1),%rcx
+ negq %rax
+ addq $16,%rax
.Lenc_loop3:
.byte 102,15,56,220,209
.byte 102,15,56,220,217
- decl %eax
.byte 102,15,56,220,225
- movups 16(%rcx),%xmm1
+ movups (%rcx,%rax,1),%xmm1
+ addq $32,%rax
.byte 102,15,56,220,208
.byte 102,15,56,220,216
- leaq 32(%rcx),%rcx
.byte 102,15,56,220,224
- movups (%rcx),%xmm0
+ movups -16(%rcx,%rax,1),%xmm0
jnz .Lenc_loop3
.byte 102,15,56,220,209
@@ -78,25 +144,26 @@ _aesni_encrypt3:
.align 16
_aesni_decrypt3:
movups (%rcx),%xmm0
- shrl $1,%eax
+ shll $4,%eax
movups 16(%rcx),%xmm1
- leaq 32(%rcx),%rcx
xorps %xmm0,%xmm2
xorps %xmm0,%xmm3
xorps %xmm0,%xmm4
- movups (%rcx),%xmm0
+ movups 32(%rcx),%xmm0
+ leaq 32(%rcx,%rax,1),%rcx
+ negq %rax
+ addq $16,%rax
.Ldec_loop3:
.byte 102,15,56,222,209
.byte 102,15,56,222,217
- decl %eax
.byte 102,15,56,222,225
- movups 16(%rcx),%xmm1
+ movups (%rcx,%rax,1),%xmm1
+ addq $32,%rax
.byte 102,15,56,222,208
.byte 102,15,56,222,216
- leaq 32(%rcx),%rcx
.byte 102,15,56,222,224
- movups (%rcx),%xmm0
+ movups -16(%rcx,%rax,1),%xmm0
jnz .Ldec_loop3
.byte 102,15,56,222,209
@@ -111,28 +178,30 @@ _aesni_decrypt3:
.align 16
_aesni_encrypt4:
movups (%rcx),%xmm0
- shrl $1,%eax
+ shll $4,%eax
movups 16(%rcx),%xmm1
- leaq 32(%rcx),%rcx
xorps %xmm0,%xmm2
xorps %xmm0,%xmm3
xorps %xmm0,%xmm4
xorps %xmm0,%xmm5
- movups (%rcx),%xmm0
+ movups 32(%rcx),%xmm0
+ leaq 32(%rcx,%rax,1),%rcx
+ negq %rax
+.byte 0x0f,0x1f,0x00
+ addq $16,%rax
.Lenc_loop4:
.byte 102,15,56,220,209
.byte 102,15,56,220,217
- decl %eax
.byte 102,15,56,220,225
.byte 102,15,56,220,233
- movups 16(%rcx),%xmm1
+ movups (%rcx,%rax,1),%xmm1
+ addq $32,%rax
.byte 102,15,56,220,208
.byte 102,15,56,220,216
- leaq 32(%rcx),%rcx
.byte 102,15,56,220,224
.byte 102,15,56,220,232
- movups (%rcx),%xmm0
+ movups -16(%rcx,%rax,1),%xmm0
jnz .Lenc_loop4
.byte 102,15,56,220,209
@@ -149,28 +218,30 @@ _aesni_encrypt4:
.align 16
_aesni_decrypt4:
movups (%rcx),%xmm0
- shrl $1,%eax
+ shll $4,%eax
movups 16(%rcx),%xmm1
- leaq 32(%rcx),%rcx
xorps %xmm0,%xmm2
xorps %xmm0,%xmm3
xorps %xmm0,%xmm4
xorps %xmm0,%xmm5
- movups (%rcx),%xmm0
+ movups 32(%rcx),%xmm0
+ leaq 32(%rcx,%rax,1),%rcx
+ negq %rax
+.byte 0x0f,0x1f,0x00
+ addq $16,%rax
.Ldec_loop4:
.byte 102,15,56,222,209
.byte 102,15,56,222,217
- decl %eax
.byte 102,15,56,222,225
.byte 102,15,56,222,233
- movups 16(%rcx),%xmm1
+ movups (%rcx,%rax,1),%xmm1
+ addq $32,%rax
.byte 102,15,56,222,208
.byte 102,15,56,222,216
- leaq 32(%rcx),%rcx
.byte 102,15,56,222,224
.byte 102,15,56,222,232
- movups (%rcx),%xmm0
+ movups -16(%rcx,%rax,1),%xmm0
jnz .Ldec_loop4
.byte 102,15,56,222,209
@@ -187,43 +258,40 @@ _aesni_decrypt4:
.align 16
_aesni_encrypt6:
movups (%rcx),%xmm0
- shrl $1,%eax
+ shll $4,%eax
movups 16(%rcx),%xmm1
- leaq 32(%rcx),%rcx
xorps %xmm0,%xmm2
pxor %xmm0,%xmm3
-.byte 102,15,56,220,209
pxor %xmm0,%xmm4
+.byte 102,15,56,220,209
+ leaq 32(%rcx,%rax,1),%rcx
+ negq %rax
.byte 102,15,56,220,217
pxor %xmm0,%xmm5
-.byte 102,15,56,220,225
pxor %xmm0,%xmm6
-.byte 102,15,56,220,233
+.byte 102,15,56,220,225
pxor %xmm0,%xmm7
- decl %eax
-.byte 102,15,56,220,241
- movups (%rcx),%xmm0
-.byte 102,15,56,220,249
+ movups (%rcx,%rax,1),%xmm0
+ addq $16,%rax
jmp .Lenc_loop6_enter
.align 16
.Lenc_loop6:
.byte 102,15,56,220,209
.byte 102,15,56,220,217
- decl %eax
.byte 102,15,56,220,225
+.Lenc_loop6_enter:
.byte 102,15,56,220,233
.byte 102,15,56,220,241
.byte 102,15,56,220,249
-.Lenc_loop6_enter:
- movups 16(%rcx),%xmm1
+ movups (%rcx,%rax,1),%xmm1
+ addq $32,%rax
.byte 102,15,56,220,208
.byte 102,15,56,220,216
- leaq 32(%rcx),%rcx
.byte 102,15,56,220,224
.byte 102,15,56,220,232
.byte 102,15,56,220,240
.byte 102,15,56,220,248
- movups (%rcx),%xmm0
+ movups -16(%rcx,%rax,1),%xmm0
jnz .Lenc_loop6
.byte 102,15,56,220,209
@@ -244,43 +312,40 @@ _aesni_encrypt6:
.align 16
_aesni_decrypt6:
movups (%rcx),%xmm0
- shrl $1,%eax
+ shll $4,%eax
movups 16(%rcx),%xmm1
- leaq 32(%rcx),%rcx
xorps %xmm0,%xmm2
pxor %xmm0,%xmm3
-.byte 102,15,56,222,209
pxor %xmm0,%xmm4
+.byte 102,15,56,222,209
+ leaq 32(%rcx,%rax,1),%rcx
+ negq %rax
.byte 102,15,56,222,217
pxor %xmm0,%xmm5
-.byte 102,15,56,222,225
pxor %xmm0,%xmm6
-.byte 102,15,56,222,233
+.byte 102,15,56,222,225
pxor %xmm0,%xmm7
- decl %eax
-.byte 102,15,56,222,241
- movups (%rcx),%xmm0
-.byte 102,15,56,222,249
+ movups (%rcx,%rax,1),%xmm0
+ addq $16,%rax
jmp .Ldec_loop6_enter
.align 16
.Ldec_loop6:
.byte 102,15,56,222,209
.byte 102,15,56,222,217
- decl %eax
.byte 102,15,56,222,225
+.Ldec_loop6_enter:
.byte 102,15,56,222,233
.byte 102,15,56,222,241
.byte 102,15,56,222,249
-.Ldec_loop6_enter:
- movups 16(%rcx),%xmm1
+ movups (%rcx,%rax,1),%xmm1
+ addq $32,%rax
.byte 102,15,56,222,208
.byte 102,15,56,222,216
- leaq 32(%rcx),%rcx
.byte 102,15,56,222,224
.byte 102,15,56,222,232
.byte 102,15,56,222,240
.byte 102,15,56,222,248
- movups (%rcx),%xmm0
+ movups -16(%rcx,%rax,1),%xmm0
jnz .Ldec_loop6
.byte 102,15,56,222,209
@@ -301,52 +366,46 @@ _aesni_decrypt6:
.align 16
_aesni_encrypt8:
movups (%rcx),%xmm0
- shrl $1,%eax
+ shll $4,%eax
movups 16(%rcx),%xmm1
- leaq 32(%rcx),%rcx
xorps %xmm0,%xmm2
xorps %xmm0,%xmm3
-.byte 102,15,56,220,209
pxor %xmm0,%xmm4
-.byte 102,15,56,220,217
pxor %xmm0,%xmm5
-.byte 102,15,56,220,225
pxor %xmm0,%xmm6
-.byte 102,15,56,220,233
+ leaq 32(%rcx,%rax,1),%rcx
+ negq %rax
+.byte 102,15,56,220,209
pxor %xmm0,%xmm7
- decl %eax
-.byte 102,15,56,220,241
pxor %xmm0,%xmm8
-.byte 102,15,56,220,249
+.byte 102,15,56,220,217
pxor %xmm0,%xmm9
- movups (%rcx),%xmm0
-.byte 102,68,15,56,220,193
-.byte 102,68,15,56,220,201
- movups 16(%rcx),%xmm1
- jmp .Lenc_loop8_enter
+ movups (%rcx,%rax,1),%xmm0
+ addq $16,%rax
+ jmp .Lenc_loop8_inner
.align 16
.Lenc_loop8:
.byte 102,15,56,220,209
.byte 102,15,56,220,217
- decl %eax
+.Lenc_loop8_inner:
.byte 102,15,56,220,225
.byte 102,15,56,220,233
.byte 102,15,56,220,241
.byte 102,15,56,220,249
.byte 102,68,15,56,220,193
.byte 102,68,15,56,220,201
- movups 16(%rcx),%xmm1
.Lenc_loop8_enter:
+ movups (%rcx,%rax,1),%xmm1
+ addq $32,%rax
.byte 102,15,56,220,208
.byte 102,15,56,220,216
- leaq 32(%rcx),%rcx
.byte 102,15,56,220,224
.byte 102,15,56,220,232
.byte 102,15,56,220,240
.byte 102,15,56,220,248
.byte 102,68,15,56,220,192
.byte 102,68,15,56,220,200
- movups (%rcx),%xmm0
+ movups -16(%rcx,%rax,1),%xmm0
jnz .Lenc_loop8
.byte 102,15,56,220,209
@@ -371,52 +430,46 @@ _aesni_encrypt8:
.align 16
_aesni_decrypt8:
movups (%rcx),%xmm0
- shrl $1,%eax
+ shll $4,%eax
movups 16(%rcx),%xmm1
- leaq 32(%rcx),%rcx
xorps %xmm0,%xmm2
xorps %xmm0,%xmm3
-.byte 102,15,56,222,209
pxor %xmm0,%xmm4
-.byte 102,15,56,222,217
pxor %xmm0,%xmm5
-.byte 102,15,56,222,225
pxor %xmm0,%xmm6
-.byte 102,15,56,222,233
+ leaq 32(%rcx,%rax,1),%rcx
+ negq %rax
+.byte 102,15,56,222,209
pxor %xmm0,%xmm7
- decl %eax
-.byte 102,15,56,222,241
pxor %xmm0,%xmm8
-.byte 102,15,56,222,249
+.byte 102,15,56,222,217
pxor %xmm0,%xmm9
- movups (%rcx),%xmm0
-.byte 102,68,15,56,222,193
-.byte 102,68,15,56,222,201
- movups 16(%rcx),%xmm1
- jmp .Ldec_loop8_enter
+ movups (%rcx,%rax,1),%xmm0
+ addq $16,%rax
+ jmp .Ldec_loop8_inner
.align 16
.Ldec_loop8:
.byte 102,15,56,222,209
.byte 102,15,56,222,217
- decl %eax
+.Ldec_loop8_inner:
.byte 102,15,56,222,225
.byte 102,15,56,222,233
.byte 102,15,56,222,241
.byte 102,15,56,222,249
.byte 102,68,15,56,222,193
.byte 102,68,15,56,222,201
- movups 16(%rcx),%xmm1
.Ldec_loop8_enter:
+ movups (%rcx,%rax,1),%xmm1
+ addq $32,%rax
.byte 102,15,56,222,208
.byte 102,15,56,222,216
- leaq 32(%rcx),%rcx
.byte 102,15,56,222,224
.byte 102,15,56,222,232
.byte 102,15,56,222,240
.byte 102,15,56,222,248
.byte 102,68,15,56,222,192
.byte 102,68,15,56,222,200
- movups (%rcx),%xmm0
+ movups -16(%rcx,%rax,1),%xmm0
jnz .Ldec_loop8
.byte 102,15,56,222,209
@@ -525,6 +578,7 @@ aesni_ecb_encrypt:
movups 80(%rdi),%xmm7
je .Lecb_enc_six
movdqu 96(%rdi),%xmm8
+ xorps %xmm9,%xmm9
call _aesni_encrypt8
movups %xmm2,(%rsi)
movups %xmm3,16(%rsi)
@@ -545,14 +599,13 @@ aesni_ecb_encrypt:
decl %eax
movups (%rcx),%xmm1
leaq 16(%rcx),%rcx
- jnz .Loop_enc1_3
+ jnz .Loop_enc1_3
.byte 102,15,56,221,209
movups %xmm2,(%rsi)
jmp .Lecb_ret
.align 16
.Lecb_enc_two:
- xorps %xmm4,%xmm4
- call _aesni_encrypt3
+ call _aesni_encrypt2
movups %xmm2,(%rsi)
movups %xmm3,16(%rsi)
jmp .Lecb_ret
@@ -639,15 +692,23 @@ aesni_ecb_encrypt:
jnc .Lecb_dec_loop8
movups %xmm2,(%rsi)
+ pxor %xmm2,%xmm2
movq %r11,%rcx
movups %xmm3,16(%rsi)
+ pxor %xmm3,%xmm3
movl %r10d,%eax
movups %xmm4,32(%rsi)
+ pxor %xmm4,%xmm4
movups %xmm5,48(%rsi)
+ pxor %xmm5,%xmm5
movups %xmm6,64(%rsi)
+ pxor %xmm6,%xmm6
movups %xmm7,80(%rsi)
+ pxor %xmm7,%xmm7
movups %xmm8,96(%rsi)
+ pxor %xmm8,%xmm8
movups %xmm9,112(%rsi)
+ pxor %xmm9,%xmm9
leaq 128(%rsi),%rsi
addq $128,%rdx
jz .Lecb_ret
@@ -670,14 +731,23 @@ aesni_ecb_encrypt:
je .Lecb_dec_six
movups 96(%rdi),%xmm8
movups (%rcx),%xmm0
+ xorps %xmm9,%xmm9
call _aesni_decrypt8
movups %xmm2,(%rsi)
+ pxor %xmm2,%xmm2
movups %xmm3,16(%rsi)
+ pxor %xmm3,%xmm3
movups %xmm4,32(%rsi)
+ pxor %xmm4,%xmm4
movups %xmm5,48(%rsi)
+ pxor %xmm5,%xmm5
movups %xmm6,64(%rsi)
+ pxor %xmm6,%xmm6
movups %xmm7,80(%rsi)
+ pxor %xmm7,%xmm7
movups %xmm8,96(%rsi)
+ pxor %xmm8,%xmm8
+ pxor %xmm9,%xmm9
jmp .Lecb_ret
.align 16
.Lecb_dec_one:
@@ -690,53 +760,76 @@ aesni_ecb_encrypt:
decl %eax
movups (%rcx),%xmm1
leaq 16(%rcx),%rcx
- jnz .Loop_dec1_4
+ jnz .Loop_dec1_4
.byte 102,15,56,223,209
movups %xmm2,(%rsi)
+ pxor %xmm2,%xmm2
jmp .Lecb_ret
.align 16
.Lecb_dec_two:
- xorps %xmm4,%xmm4
- call _aesni_decrypt3
+ call _aesni_decrypt2
movups %xmm2,(%rsi)
+ pxor %xmm2,%xmm2
movups %xmm3,16(%rsi)
+ pxor %xmm3,%xmm3
jmp .Lecb_ret
.align 16
.Lecb_dec_three:
call _aesni_decrypt3
movups %xmm2,(%rsi)
+ pxor %xmm2,%xmm2
movups %xmm3,16(%rsi)
+ pxor %xmm3,%xmm3
movups %xmm4,32(%rsi)
+ pxor %xmm4,%xmm4
jmp .Lecb_ret
.align 16
.Lecb_dec_four:
call _aesni_decrypt4
movups %xmm2,(%rsi)
+ pxor %xmm2,%xmm2
movups %xmm3,16(%rsi)
+ pxor %xmm3,%xmm3
movups %xmm4,32(%rsi)
+ pxor %xmm4,%xmm4
movups %xmm5,48(%rsi)
+ pxor %xmm5,%xmm5
jmp .Lecb_ret
.align 16
.Lecb_dec_five:
xorps %xmm7,%xmm7
call _aesni_decrypt6
movups %xmm2,(%rsi)
+ pxor %xmm2,%xmm2
movups %xmm3,16(%rsi)
+ pxor %xmm3,%xmm3
movups %xmm4,32(%rsi)
+ pxor %xmm4,%xmm4
movups %xmm5,48(%rsi)
+ pxor %xmm5,%xmm5
movups %xmm6,64(%rsi)
+ pxor %xmm6,%xmm6
+ pxor %xmm7,%xmm7
jmp .Lecb_ret
.align 16
.Lecb_dec_six:
call _aesni_decrypt6
movups %xmm2,(%rsi)
+ pxor %xmm2,%xmm2
movups %xmm3,16(%rsi)
+ pxor %xmm3,%xmm3
movups %xmm4,32(%rsi)
+ pxor %xmm4,%xmm4
movups %xmm5,48(%rsi)
+ pxor %xmm5,%xmm5
movups %xmm6,64(%rsi)
+ pxor %xmm6,%xmm6
movups %xmm7,80(%rsi)
+ pxor %xmm7,%xmm7
.Lecb_ret:
+ xorps %xmm0,%xmm0
+ pxor %xmm1,%xmm1
.byte 0xf3,0xc3
.size aesni_ecb_encrypt,.-aesni_ecb_encrypt
.globl aesni_ccm64_encrypt_blocks
@@ -744,56 +837,62 @@ aesni_ecb_encrypt:
.align 16
aesni_ccm64_encrypt_blocks:
movl 240(%rcx),%eax
- movdqu (%r8),%xmm9
- movdqa .Lincrement64(%rip),%xmm6
+ movdqu (%r8),%xmm6
+ movdqa .Lincrement64(%rip),%xmm9
movdqa .Lbswap_mask(%rip),%xmm7
- shrl $1,%eax
+ shll $4,%eax
+ movl $16,%r10d
leaq 0(%rcx),%r11
movdqu (%r9),%xmm3
- movdqa %xmm9,%xmm2
- movl %eax,%r10d
-.byte 102,68,15,56,0,207
+ movdqa %xmm6,%xmm2
+ leaq 32(%rcx,%rax,1),%rcx
+.byte 102,15,56,0,247
+ subq %rax,%r10
jmp .Lccm64_enc_outer
.align 16
.Lccm64_enc_outer:
movups (%r11),%xmm0
- movl %r10d,%eax
+ movq %r10,%rax
movups (%rdi),%xmm8
xorps %xmm0,%xmm2
movups 16(%r11),%xmm1
xorps %xmm8,%xmm0
- leaq 32(%r11),%rcx
xorps %xmm0,%xmm3
- movups (%rcx),%xmm0
+ movups 32(%r11),%xmm0
.Lccm64_enc2_loop:
.byte 102,15,56,220,209
- decl %eax
.byte 102,15,56,220,217
- movups 16(%rcx),%xmm1
+ movups (%rcx,%rax,1),%xmm1
+ addq $32,%rax
.byte 102,15,56,220,208
- leaq 32(%rcx),%rcx
.byte 102,15,56,220,216
- movups 0(%rcx),%xmm0
+ movups -16(%rcx,%rax,1),%xmm0
jnz .Lccm64_enc2_loop
.byte 102,15,56,220,209
.byte 102,15,56,220,217
- paddq %xmm6,%xmm9
+ paddq %xmm9,%xmm6
+ decq %rdx
.byte 102,15,56,221,208
.byte 102,15,56,221,216
- decq %rdx
leaq 16(%rdi),%rdi
xorps %xmm2,%xmm8
- movdqa %xmm9,%xmm2
+ movdqa %xmm6,%xmm2
movups %xmm8,(%rsi)
- leaq 16(%rsi),%rsi
.byte 102,15,56,0,215
+ leaq 16(%rsi),%rsi
jnz .Lccm64_enc_outer
+ pxor %xmm0,%xmm0
+ pxor %xmm1,%xmm1
+ pxor %xmm2,%xmm2
movups %xmm3,(%r9)
+ pxor %xmm3,%xmm3
+ pxor %xmm8,%xmm8
+ pxor %xmm6,%xmm6
.byte 0xf3,0xc3
.size aesni_ccm64_encrypt_blocks,.-aesni_ccm64_encrypt_blocks
.globl aesni_ccm64_decrypt_blocks
@@ -801,15 +900,15 @@ aesni_ccm64_encrypt_blocks:
.align 16
aesni_ccm64_decrypt_blocks:
movl 240(%rcx),%eax
- movups (%r8),%xmm9
+ movups (%r8),%xmm6
movdqu (%r9),%xmm3
- movdqa .Lincrement64(%rip),%xmm6
+ movdqa .Lincrement64(%rip),%xmm9
movdqa .Lbswap_mask(%rip),%xmm7
- movaps %xmm9,%xmm2
+ movaps %xmm6,%xmm2
movl %eax,%r10d
movq %rcx,%r11
-.byte 102,68,15,56,0,207
+.byte 102,15,56,0,247
movups (%rcx),%xmm0
movups 16(%rcx),%xmm1
leaq 32(%rcx),%rcx
@@ -819,17 +918,21 @@ aesni_ccm64_decrypt_blocks:
decl %eax
movups (%rcx),%xmm1
leaq 16(%rcx),%rcx
- jnz .Loop_enc1_5
+ jnz .Loop_enc1_5
.byte 102,15,56,221,209
+ shll $4,%r10d
+ movl $16,%eax
movups (%rdi),%xmm8
- paddq %xmm6,%xmm9
+ paddq %xmm9,%xmm6
leaq 16(%rdi),%rdi
+ subq %r10,%rax
+ leaq 32(%r11,%r10,1),%rcx
+ movq %rax,%r10
jmp .Lccm64_dec_outer
.align 16
.Lccm64_dec_outer:
xorps %xmm2,%xmm8
- movdqa %xmm9,%xmm2
- movl %r10d,%eax
+ movdqa %xmm6,%xmm2
movups %xmm8,(%rsi)
leaq 16(%rsi),%rsi
.byte 102,15,56,0,215
@@ -838,36 +941,36 @@ aesni_ccm64_decrypt_blocks:
jz .Lccm64_dec_break
movups (%r11),%xmm0
- shrl $1,%eax
+ movq %r10,%rax
movups 16(%r11),%xmm1
xorps %xmm0,%xmm8
- leaq 32(%r11),%rcx
xorps %xmm0,%xmm2
xorps %xmm8,%xmm3
- movups (%rcx),%xmm0
-
+ movups 32(%r11),%xmm0
+ jmp .Lccm64_dec2_loop
+.align 16
.Lccm64_dec2_loop:
.byte 102,15,56,220,209
- decl %eax
.byte 102,15,56,220,217
- movups 16(%rcx),%xmm1
+ movups (%rcx,%rax,1),%xmm1
+ addq $32,%rax
.byte 102,15,56,220,208
- leaq 32(%rcx),%rcx
.byte 102,15,56,220,216
- movups 0(%rcx),%xmm0
+ movups -16(%rcx,%rax,1),%xmm0
jnz .Lccm64_dec2_loop
movups (%rdi),%xmm8
- paddq %xmm6,%xmm9
+ paddq %xmm9,%xmm6
.byte 102,15,56,220,209
.byte 102,15,56,220,217
- leaq 16(%rdi),%rdi
.byte 102,15,56,221,208
.byte 102,15,56,221,216
+ leaq 16(%rdi),%rdi
jmp .Lccm64_dec_outer
.align 16
.Lccm64_dec_break:
+ movl 240(%r11),%eax
movups (%r11),%xmm0
movups 16(%r11),%xmm1
xorps %xmm0,%xmm8
@@ -878,9 +981,15 @@ aesni_ccm64_decrypt_blocks:
decl %eax
movups (%r11),%xmm1
leaq 16(%r11),%r11
- jnz .Loop_enc1_6
+ jnz .Loop_enc1_6
.byte 102,15,56,221,217
+ pxor %xmm0,%xmm0
+ pxor %xmm1,%xmm1
+ pxor %xmm2,%xmm2
movups %xmm3,(%r9)
+ pxor %xmm3,%xmm3
+ pxor %xmm8,%xmm8
+ pxor %xmm6,%xmm6
.byte 0xf3,0xc3
.size aesni_ccm64_decrypt_blocks,.-aesni_ccm64_decrypt_blocks
.globl aesni_ctr32_encrypt_blocks
@@ -888,490 +997,859 @@ aesni_ccm64_decrypt_blocks:
.align 16
aesni_ctr32_encrypt_blocks:
cmpq $1,%rdx
- je .Lctr32_one_shortcut
+ jne .Lctr32_bulk
- movdqu (%r8),%xmm14
- movdqa .Lbswap_mask(%rip),%xmm15
- xorl %eax,%eax
-.byte 102,69,15,58,22,242,3
-.byte 102,68,15,58,34,240,3
+
+ movups (%r8),%xmm2
+ movups (%rdi),%xmm3
+ movl 240(%rcx),%edx
+ movups (%rcx),%xmm0
+ movups 16(%rcx),%xmm1
+ leaq 32(%rcx),%rcx
+ xorps %xmm0,%xmm2
+.Loop_enc1_7:
+.byte 102,15,56,220,209
+ decl %edx
+ movups (%rcx),%xmm1
+ leaq 16(%rcx),%rcx
+ jnz .Loop_enc1_7
+.byte 102,15,56,221,209
+ pxor %xmm0,%xmm0
+ pxor %xmm1,%xmm1
+ xorps %xmm3,%xmm2
+ pxor %xmm3,%xmm3
+ movups %xmm2,(%rsi)
+ xorps %xmm2,%xmm2
+ jmp .Lctr32_epilogue
+
+.align 16
+.Lctr32_bulk:
+ leaq (%rsp),%rax
+ pushq %rbp
+ subq $128,%rsp
+ andq $-16,%rsp
+ leaq -8(%rax),%rbp
+
+
+
+
+ movdqu (%r8),%xmm2
+ movdqu (%rcx),%xmm0
+ movl 12(%r8),%r8d
+ pxor %xmm0,%xmm2
+ movl 12(%rcx),%r11d
+ movdqa %xmm2,0(%rsp)
+ bswapl %r8d
+ movdqa %xmm2,%xmm3
+ movdqa %xmm2,%xmm4
+ movdqa %xmm2,%xmm5
+ movdqa %xmm2,64(%rsp)
+ movdqa %xmm2,80(%rsp)
+ movdqa %xmm2,96(%rsp)
+ movq %rdx,%r10
+ movdqa %xmm2,112(%rsp)
+
+ leaq 1(%r8),%rax
+ leaq 2(%r8),%rdx
+ bswapl %eax
+ bswapl %edx
+ xorl %r11d,%eax
+ xorl %r11d,%edx
+.byte 102,15,58,34,216,3
+ leaq 3(%r8),%rax
+ movdqa %xmm3,16(%rsp)
+.byte 102,15,58,34,226,3
+ bswapl %eax
+ movq %r10,%rdx
+ leaq 4(%r8),%r10
+ movdqa %xmm4,32(%rsp)
+ xorl %r11d,%eax
+ bswapl %r10d
+.byte 102,15,58,34,232,3
+ xorl %r11d,%r10d
+ movdqa %xmm5,48(%rsp)
+ leaq 5(%r8),%r9
+ movl %r10d,64+12(%rsp)
+ bswapl %r9d
+ leaq 6(%r8),%r10
movl 240(%rcx),%eax
+ xorl %r11d,%r9d
bswapl %r10d
- pxor %xmm12,%xmm12
- pxor %xmm13,%xmm13
-.byte 102,69,15,58,34,226,0
- leaq 3(%r10),%r11
-.byte 102,69,15,58,34,235,0
- incl %r10d
-.byte 102,69,15,58,34,226,1
- incq %r11
-.byte 102,69,15,58,34,235,1
- incl %r10d
-.byte 102,69,15,58,34,226,2
- incq %r11
-.byte 102,69,15,58,34,235,2
- movdqa %xmm12,-40(%rsp)
-.byte 102,69,15,56,0,231
- movdqa %xmm13,-24(%rsp)
-.byte 102,69,15,56,0,239
-
- pshufd $192,%xmm12,%xmm2
- pshufd $128,%xmm12,%xmm3
- pshufd $64,%xmm12,%xmm4
- cmpq $6,%rdx
+ movl %r9d,80+12(%rsp)
+ xorl %r11d,%r10d
+ leaq 7(%r8),%r9
+ movl %r10d,96+12(%rsp)
+ bswapl %r9d
+ movl OPENSSL_ia32cap_P+4(%rip),%r10d
+ xorl %r11d,%r9d
+ andl $71303168,%r10d
+ movl %r9d,112+12(%rsp)
+
+ movups 16(%rcx),%xmm1
+
+ movdqa 64(%rsp),%xmm6
+ movdqa 80(%rsp),%xmm7
+
+ cmpq $8,%rdx
jb .Lctr32_tail
- shrl $1,%eax
- movq %rcx,%r11
- movl %eax,%r10d
+
subq $6,%rdx
+ cmpl $4194304,%r10d
+ je .Lctr32_6x
+
+ leaq 128(%rcx),%rcx
+ subq $2,%rdx
+ jmp .Lctr32_loop8
+
+.align 16
+.Lctr32_6x:
+ shll $4,%eax
+ movl $48,%r10d
+ bswapl %r11d
+ leaq 32(%rcx,%rax,1),%rcx
+ subq %rax,%r10
jmp .Lctr32_loop6
.align 16
.Lctr32_loop6:
- pshufd $192,%xmm13,%xmm5
- por %xmm14,%xmm2
- movups (%r11),%xmm0
- pshufd $128,%xmm13,%xmm6
- por %xmm14,%xmm3
- movups 16(%r11),%xmm1
- pshufd $64,%xmm13,%xmm7
- por %xmm14,%xmm4
- por %xmm14,%xmm5
- xorps %xmm0,%xmm2
- por %xmm14,%xmm6
- por %xmm14,%xmm7
+ addl $6,%r8d
+ movups -48(%rcx,%r10,1),%xmm0
+.byte 102,15,56,220,209
+ movl %r8d,%eax
+ xorl %r11d,%eax
+.byte 102,15,56,220,217
+.byte 0x0f,0x38,0xf1,0x44,0x24,12
+ leal 1(%r8),%eax
+.byte 102,15,56,220,225
+ xorl %r11d,%eax
+.byte 0x0f,0x38,0xf1,0x44,0x24,28
+.byte 102,15,56,220,233
+ leal 2(%r8),%eax
+ xorl %r11d,%eax
+.byte 102,15,56,220,241
+.byte 0x0f,0x38,0xf1,0x44,0x24,44
+ leal 3(%r8),%eax
+.byte 102,15,56,220,249
+ movups -32(%rcx,%r10,1),%xmm1
+ xorl %r11d,%eax
+.byte 102,15,56,220,208
+.byte 0x0f,0x38,0xf1,0x44,0x24,60
+ leal 4(%r8),%eax
+.byte 102,15,56,220,216
+ xorl %r11d,%eax
+.byte 0x0f,0x38,0xf1,0x44,0x24,76
+.byte 102,15,56,220,224
+ leal 5(%r8),%eax
+ xorl %r11d,%eax
+.byte 102,15,56,220,232
+.byte 0x0f,0x38,0xf1,0x44,0x24,92
+ movq %r10,%rax
+.byte 102,15,56,220,240
+.byte 102,15,56,220,248
+ movups -16(%rcx,%r10,1),%xmm0
+ call .Lenc_loop6
+ movdqu (%rdi),%xmm8
+ movdqu 16(%rdi),%xmm9
+ movdqu 32(%rdi),%xmm10
+ movdqu 48(%rdi),%xmm11
+ movdqu 64(%rdi),%xmm12
+ movdqu 80(%rdi),%xmm13
+ leaq 96(%rdi),%rdi
+ movups -64(%rcx,%r10,1),%xmm1
+ pxor %xmm2,%xmm8
+ movaps 0(%rsp),%xmm2
+ pxor %xmm3,%xmm9
+ movaps 16(%rsp),%xmm3
+ pxor %xmm4,%xmm10
+ movaps 32(%rsp),%xmm4
+ pxor %xmm5,%xmm11
+ movaps 48(%rsp),%xmm5
+ pxor %xmm6,%xmm12
+ movaps 64(%rsp),%xmm6
+ pxor %xmm7,%xmm13
+ movaps 80(%rsp),%xmm7
+ movdqu %xmm8,(%rsi)
+ movdqu %xmm9,16(%rsi)
+ movdqu %xmm10,32(%rsi)
+ movdqu %xmm11,48(%rsi)
+ movdqu %xmm12,64(%rsi)
+ movdqu %xmm13,80(%rsi)
+ leaq 96(%rsi),%rsi
- pxor %xmm0,%xmm3
+ subq $6,%rdx
+ jnc .Lctr32_loop6
+
+ addq $6,%rdx
+ jz .Lctr32_done
+
+ leal -48(%r10),%eax
+ leaq -80(%rcx,%r10,1),%rcx
+ negl %eax
+ shrl $4,%eax
+ jmp .Lctr32_tail
+
+.align 32
+.Lctr32_loop8:
+ addl $8,%r8d
+ movdqa 96(%rsp),%xmm8
.byte 102,15,56,220,209
- leaq 32(%r11),%rcx
- pxor %xmm0,%xmm4
+ movl %r8d,%r9d
+ movdqa 112(%rsp),%xmm9
.byte 102,15,56,220,217
- movdqa .Lincrement32(%rip),%xmm13
- pxor %xmm0,%xmm5
+ bswapl %r9d
+ movups 32-128(%rcx),%xmm0
.byte 102,15,56,220,225
- movdqa -40(%rsp),%xmm12
- pxor %xmm0,%xmm6
+ xorl %r11d,%r9d
+ nop
.byte 102,15,56,220,233
- pxor %xmm0,%xmm7
- movups (%rcx),%xmm0
- decl %eax
+ movl %r9d,0+12(%rsp)
+ leaq 1(%r8),%r9
.byte 102,15,56,220,241
.byte 102,15,56,220,249
- jmp .Lctr32_enc_loop6_enter
-.align 16
-.Lctr32_enc_loop6:
+.byte 102,68,15,56,220,193
+.byte 102,68,15,56,220,201
+ movups 48-128(%rcx),%xmm1
+ bswapl %r9d
+.byte 102,15,56,220,208
+.byte 102,15,56,220,216
+ xorl %r11d,%r9d
+.byte 0x66,0x90
+.byte 102,15,56,220,224
+.byte 102,15,56,220,232
+ movl %r9d,16+12(%rsp)
+ leaq 2(%r8),%r9
+.byte 102,15,56,220,240
+.byte 102,15,56,220,248
+.byte 102,68,15,56,220,192
+.byte 102,68,15,56,220,200
+ movups 64-128(%rcx),%xmm0
+ bswapl %r9d
.byte 102,15,56,220,209
.byte 102,15,56,220,217
- decl %eax
+ xorl %r11d,%r9d
+.byte 0x66,0x90
.byte 102,15,56,220,225
.byte 102,15,56,220,233
+ movl %r9d,32+12(%rsp)
+ leaq 3(%r8),%r9
.byte 102,15,56,220,241
.byte 102,15,56,220,249
-.Lctr32_enc_loop6_enter:
- movups 16(%rcx),%xmm1
+.byte 102,68,15,56,220,193
+.byte 102,68,15,56,220,201
+ movups 80-128(%rcx),%xmm1
+ bswapl %r9d
.byte 102,15,56,220,208
.byte 102,15,56,220,216
- leaq 32(%rcx),%rcx
+ xorl %r11d,%r9d
+.byte 0x66,0x90
.byte 102,15,56,220,224
.byte 102,15,56,220,232
+ movl %r9d,48+12(%rsp)
+ leaq 4(%r8),%r9
.byte 102,15,56,220,240
.byte 102,15,56,220,248
- movups (%rcx),%xmm0
- jnz .Lctr32_enc_loop6
+.byte 102,68,15,56,220,192
+.byte 102,68,15,56,220,200
+ movups 96-128(%rcx),%xmm0
+ bswapl %r9d
+.byte 102,15,56,220,209
+.byte 102,15,56,220,217
+ xorl %r11d,%r9d
+.byte 0x66,0x90
+.byte 102,15,56,220,225
+.byte 102,15,56,220,233
+ movl %r9d,64+12(%rsp)
+ leaq 5(%r8),%r9
+.byte 102,15,56,220,241
+.byte 102,15,56,220,249
+.byte 102,68,15,56,220,193
+.byte 102,68,15,56,220,201
+ movups 112-128(%rcx),%xmm1
+ bswapl %r9d
+.byte 102,15,56,220,208
+.byte 102,15,56,220,216
+ xorl %r11d,%r9d
+.byte 0x66,0x90
+.byte 102,15,56,220,224
+.byte 102,15,56,220,232
+ movl %r9d,80+12(%rsp)
+ leaq 6(%r8),%r9
+.byte 102,15,56,220,240
+.byte 102,15,56,220,248
+.byte 102,68,15,56,220,192
+.byte 102,68,15,56,220,200
+ movups 128-128(%rcx),%xmm0
+ bswapl %r9d
+.byte 102,15,56,220,209
+.byte 102,15,56,220,217
+ xorl %r11d,%r9d
+.byte 0x66,0x90
+.byte 102,15,56,220,225
+.byte 102,15,56,220,233
+ movl %r9d,96+12(%rsp)
+ leaq 7(%r8),%r9
+.byte 102,15,56,220,241
+.byte 102,15,56,220,249
+.byte 102,68,15,56,220,193
+.byte 102,68,15,56,220,201
+ movups 144-128(%rcx),%xmm1
+ bswapl %r9d
+.byte 102,15,56,220,208
+.byte 102,15,56,220,216
+.byte 102,15,56,220,224
+ xorl %r11d,%r9d
+ movdqu 0(%rdi),%xmm10
+.byte 102,15,56,220,232
+ movl %r9d,112+12(%rsp)
+ cmpl $11,%eax
+.byte 102,15,56,220,240
+.byte 102,15,56,220,248
+.byte 102,68,15,56,220,192
+.byte 102,68,15,56,220,200
+ movups 160-128(%rcx),%xmm0
+
+ jb .Lctr32_enc_done
.byte 102,15,56,220,209
- paddd %xmm13,%xmm12
.byte 102,15,56,220,217
- paddd -24(%rsp),%xmm13
.byte 102,15,56,220,225
- movdqa %xmm12,-40(%rsp)
.byte 102,15,56,220,233
- movdqa %xmm13,-24(%rsp)
.byte 102,15,56,220,241
-.byte 102,69,15,56,0,231
.byte 102,15,56,220,249
-.byte 102,69,15,56,0,239
+.byte 102,68,15,56,220,193
+.byte 102,68,15,56,220,201
+ movups 176-128(%rcx),%xmm1
-.byte 102,15,56,221,208
- movups (%rdi),%xmm8
-.byte 102,15,56,221,216
- movups 16(%rdi),%xmm9
-.byte 102,15,56,221,224
- movups 32(%rdi),%xmm10
-.byte 102,15,56,221,232
- movups 48(%rdi),%xmm11
-.byte 102,15,56,221,240
- movups 64(%rdi),%xmm1
-.byte 102,15,56,221,248
- movups 80(%rdi),%xmm0
- leaq 96(%rdi),%rdi
+.byte 102,15,56,220,208
+.byte 102,15,56,220,216
+.byte 102,15,56,220,224
+.byte 102,15,56,220,232
+.byte 102,15,56,220,240
+.byte 102,15,56,220,248
+.byte 102,68,15,56,220,192
+.byte 102,68,15,56,220,200
+ movups 192-128(%rcx),%xmm0
+ je .Lctr32_enc_done
- xorps %xmm2,%xmm8
- pshufd $192,%xmm12,%xmm2
- xorps %xmm3,%xmm9
- pshufd $128,%xmm12,%xmm3
- movups %xmm8,(%rsi)
- xorps %xmm4,%xmm10
- pshufd $64,%xmm12,%xmm4
- movups %xmm9,16(%rsi)
- xorps %xmm5,%xmm11
- movups %xmm10,32(%rsi)
- xorps %xmm6,%xmm1
- movups %xmm11,48(%rsi)
- xorps %xmm7,%xmm0
- movups %xmm1,64(%rsi)
- movups %xmm0,80(%rsi)
- leaq 96(%rsi),%rsi
- movl %r10d,%eax
- subq $6,%rdx
- jnc .Lctr32_loop6
+.byte 102,15,56,220,209
+.byte 102,15,56,220,217
+.byte 102,15,56,220,225
+.byte 102,15,56,220,233
+.byte 102,15,56,220,241
+.byte 102,15,56,220,249
+.byte 102,68,15,56,220,193
+.byte 102,68,15,56,220,201
+ movups 208-128(%rcx),%xmm1
- addq $6,%rdx
+.byte 102,15,56,220,208
+.byte 102,15,56,220,216
+.byte 102,15,56,220,224
+.byte 102,15,56,220,232
+.byte 102,15,56,220,240
+.byte 102,15,56,220,248
+.byte 102,68,15,56,220,192
+.byte 102,68,15,56,220,200
+ movups 224-128(%rcx),%xmm0
+ jmp .Lctr32_enc_done
+
+.align 16
+.Lctr32_enc_done:
+ movdqu 16(%rdi),%xmm11
+ pxor %xmm0,%xmm10
+ movdqu 32(%rdi),%xmm12
+ pxor %xmm0,%xmm11
+ movdqu 48(%rdi),%xmm13
+ pxor %xmm0,%xmm12
+ movdqu 64(%rdi),%xmm14
+ pxor %xmm0,%xmm13
+ movdqu 80(%rdi),%xmm15
+ pxor %xmm0,%xmm14
+ pxor %xmm0,%xmm15
+.byte 102,15,56,220,209
+.byte 102,15,56,220,217
+.byte 102,15,56,220,225
+.byte 102,15,56,220,233
+.byte 102,15,56,220,241
+.byte 102,15,56,220,249
+.byte 102,68,15,56,220,193
+.byte 102,68,15,56,220,201
+ movdqu 96(%rdi),%xmm1
+ leaq 128(%rdi),%rdi
+
+.byte 102,65,15,56,221,210
+ pxor %xmm0,%xmm1
+ movdqu 112-128(%rdi),%xmm10
+.byte 102,65,15,56,221,219
+ pxor %xmm0,%xmm10
+ movdqa 0(%rsp),%xmm11
+.byte 102,65,15,56,221,228
+.byte 102,65,15,56,221,237
+ movdqa 16(%rsp),%xmm12
+ movdqa 32(%rsp),%xmm13
+.byte 102,65,15,56,221,246
+.byte 102,65,15,56,221,255
+ movdqa 48(%rsp),%xmm14
+ movdqa 64(%rsp),%xmm15
+.byte 102,68,15,56,221,193
+ movdqa 80(%rsp),%xmm0
+ movups 16-128(%rcx),%xmm1
+.byte 102,69,15,56,221,202
+
+ movups %xmm2,(%rsi)
+ movdqa %xmm11,%xmm2
+ movups %xmm3,16(%rsi)
+ movdqa %xmm12,%xmm3
+ movups %xmm4,32(%rsi)
+ movdqa %xmm13,%xmm4
+ movups %xmm5,48(%rsi)
+ movdqa %xmm14,%xmm5
+ movups %xmm6,64(%rsi)
+ movdqa %xmm15,%xmm6
+ movups %xmm7,80(%rsi)
+ movdqa %xmm0,%xmm7
+ movups %xmm8,96(%rsi)
+ movups %xmm9,112(%rsi)
+ leaq 128(%rsi),%rsi
+
+ subq $8,%rdx
+ jnc .Lctr32_loop8
+
+ addq $8,%rdx
jz .Lctr32_done
- movq %r11,%rcx
- leal 1(%rax,%rax,1),%eax
+ leaq -128(%rcx),%rcx
.Lctr32_tail:
- por %xmm14,%xmm2
- movups (%rdi),%xmm8
- cmpq $2,%rdx
- jb .Lctr32_one
- por %xmm14,%xmm3
- movups 16(%rdi),%xmm9
- je .Lctr32_two
- pshufd $192,%xmm13,%xmm5
- por %xmm14,%xmm4
- movups 32(%rdi),%xmm10
+ leaq 16(%rcx),%rcx
cmpq $4,%rdx
- jb .Lctr32_three
+ jb .Lctr32_loop3
+ je .Lctr32_loop4
- pshufd $128,%xmm13,%xmm6
- por %xmm14,%xmm5
- movups 48(%rdi),%xmm11
- je .Lctr32_four
- por %xmm14,%xmm6
- xorps %xmm7,%xmm7
+ shll $4,%eax
+ movdqa 96(%rsp),%xmm8
+ pxor %xmm9,%xmm9
- call _aesni_encrypt6
+ movups 16(%rcx),%xmm0
+.byte 102,15,56,220,209
+.byte 102,15,56,220,217
+ leaq 32-16(%rcx,%rax,1),%rcx
+ negq %rax
+.byte 102,15,56,220,225
+ addq $16,%rax
+ movups (%rdi),%xmm10
+.byte 102,15,56,220,233
+.byte 102,15,56,220,241
+ movups 16(%rdi),%xmm11
+ movups 32(%rdi),%xmm12
+.byte 102,15,56,220,249
+.byte 102,68,15,56,220,193
- movups 64(%rdi),%xmm1
- xorps %xmm2,%xmm8
- xorps %xmm3,%xmm9
- movups %xmm8,(%rsi)
- xorps %xmm4,%xmm10
- movups %xmm9,16(%rsi)
- xorps %xmm5,%xmm11
- movups %xmm10,32(%rsi)
- xorps %xmm6,%xmm1
- movups %xmm11,48(%rsi)
- movups %xmm1,64(%rsi)
+ call .Lenc_loop8_enter
+
+ movdqu 48(%rdi),%xmm13
+ pxor %xmm10,%xmm2
+ movdqu 64(%rdi),%xmm10
+ pxor %xmm11,%xmm3
+ movdqu %xmm2,(%rsi)
+ pxor %xmm12,%xmm4
+ movdqu %xmm3,16(%rsi)
+ pxor %xmm13,%xmm5
+ movdqu %xmm4,32(%rsi)
+ pxor %xmm10,%xmm6
+ movdqu %xmm5,48(%rsi)
+ movdqu %xmm6,64(%rsi)
+ cmpq $6,%rdx
+ jb .Lctr32_done
+
+ movups 80(%rdi),%xmm11
+ xorps %xmm11,%xmm7
+ movups %xmm7,80(%rsi)
+ je .Lctr32_done
+
+ movups 96(%rdi),%xmm12
+ xorps %xmm12,%xmm8
+ movups %xmm8,96(%rsi)
jmp .Lctr32_done
-.align 16
-.Lctr32_one_shortcut:
- movups (%r8),%xmm2
- movups (%rdi),%xmm8
- movl 240(%rcx),%eax
-.Lctr32_one:
- movups (%rcx),%xmm0
- movups 16(%rcx),%xmm1
- leaq 32(%rcx),%rcx
- xorps %xmm0,%xmm2
-.Loop_enc1_7:
+.align 32
+.Lctr32_loop4:
.byte 102,15,56,220,209
+ leaq 16(%rcx),%rcx
decl %eax
+.byte 102,15,56,220,217
+.byte 102,15,56,220,225
+.byte 102,15,56,220,233
movups (%rcx),%xmm1
- leaq 16(%rcx),%rcx
- jnz .Loop_enc1_7
+ jnz .Lctr32_loop4
.byte 102,15,56,221,209
- xorps %xmm2,%xmm8
- movups %xmm8,(%rsi)
- jmp .Lctr32_done
+.byte 102,15,56,221,217
+ movups (%rdi),%xmm10
+ movups 16(%rdi),%xmm11
+.byte 102,15,56,221,225
+.byte 102,15,56,221,233
+ movups 32(%rdi),%xmm12
+ movups 48(%rdi),%xmm13
-.align 16
-.Lctr32_two:
- xorps %xmm4,%xmm4
- call _aesni_encrypt3
- xorps %xmm2,%xmm8
- xorps %xmm3,%xmm9
- movups %xmm8,(%rsi)
- movups %xmm9,16(%rsi)
+ xorps %xmm10,%xmm2
+ movups %xmm2,(%rsi)
+ xorps %xmm11,%xmm3
+ movups %xmm3,16(%rsi)
+ pxor %xmm12,%xmm4
+ movdqu %xmm4,32(%rsi)
+ pxor %xmm13,%xmm5
+ movdqu %xmm5,48(%rsi)
jmp .Lctr32_done
-.align 16
-.Lctr32_three:
- call _aesni_encrypt3
- xorps %xmm2,%xmm8
- xorps %xmm3,%xmm9
- movups %xmm8,(%rsi)
- xorps %xmm4,%xmm10
- movups %xmm9,16(%rsi)
- movups %xmm10,32(%rsi)
- jmp .Lctr32_done
+.align 32
+.Lctr32_loop3:
+.byte 102,15,56,220,209
+ leaq 16(%rcx),%rcx
+ decl %eax
+.byte 102,15,56,220,217
+.byte 102,15,56,220,225
+ movups (%rcx),%xmm1
+ jnz .Lctr32_loop3
+.byte 102,15,56,221,209
+.byte 102,15,56,221,217
+.byte 102,15,56,221,225
-.align 16
-.Lctr32_four:
- call _aesni_encrypt4
- xorps %xmm2,%xmm8
- xorps %xmm3,%xmm9
- movups %xmm8,(%rsi)
- xorps %xmm4,%xmm10
- movups %xmm9,16(%rsi)
- xorps %xmm5,%xmm11
- movups %xmm10,32(%rsi)
- movups %xmm11,48(%rsi)
+ movups (%rdi),%xmm10
+ xorps %xmm10,%xmm2
+ movups %xmm2,(%rsi)
+ cmpq $2,%rdx
+ jb .Lctr32_done
+
+ movups 16(%rdi),%xmm11
+ xorps %xmm11,%xmm3
+ movups %xmm3,16(%rsi)
+ je .Lctr32_done
+
+ movups 32(%rdi),%xmm12
+ xorps %xmm12,%xmm4
+ movups %xmm4,32(%rsi)
.Lctr32_done:
+ xorps %xmm0,%xmm0
+ xorl %r11d,%r11d
+ pxor %xmm1,%xmm1
+ pxor %xmm2,%xmm2
+ pxor %xmm3,%xmm3
+ pxor %xmm4,%xmm4
+ pxor %xmm5,%xmm5
+ pxor %xmm6,%xmm6
+ pxor %xmm7,%xmm7
+ movaps %xmm0,0(%rsp)
+ pxor %xmm8,%xmm8
+ movaps %xmm0,16(%rsp)
+ pxor %xmm9,%xmm9
+ movaps %xmm0,32(%rsp)
+ pxor %xmm10,%xmm10
+ movaps %xmm0,48(%rsp)
+ pxor %xmm11,%xmm11
+ movaps %xmm0,64(%rsp)
+ pxor %xmm12,%xmm12
+ movaps %xmm0,80(%rsp)
+ pxor %xmm13,%xmm13
+ movaps %xmm0,96(%rsp)
+ pxor %xmm14,%xmm14
+ movaps %xmm0,112(%rsp)
+ pxor %xmm15,%xmm15
+ leaq (%rbp),%rsp
+ popq %rbp
+.Lctr32_epilogue:
.byte 0xf3,0xc3
.size aesni_ctr32_encrypt_blocks,.-aesni_ctr32_encrypt_blocks
.globl aesni_xts_encrypt
.type aesni_xts_encrypt,@function
.align 16
aesni_xts_encrypt:
- leaq -104(%rsp),%rsp
- movups (%r9),%xmm15
+ leaq (%rsp),%rax
+ pushq %rbp
+ subq $112,%rsp
+ andq $-16,%rsp
+ leaq -8(%rax),%rbp
+ movups (%r9),%xmm2
movl 240(%r8),%eax
movl 240(%rcx),%r10d
movups (%r8),%xmm0
movups 16(%r8),%xmm1
leaq 32(%r8),%r8
- xorps %xmm0,%xmm15
+ xorps %xmm0,%xmm2
.Loop_enc1_8:
-.byte 102,68,15,56,220,249
+.byte 102,15,56,220,209
decl %eax
movups (%r8),%xmm1
leaq 16(%r8),%r8
- jnz .Loop_enc1_8
-.byte 102,68,15,56,221,249
+ jnz .Loop_enc1_8
+.byte 102,15,56,221,209
+ movups (%rcx),%xmm0
movq %rcx,%r11
movl %r10d,%eax
+ shll $4,%r10d
movq %rdx,%r9
andq $-16,%rdx
+ movups 16(%rcx,%r10,1),%xmm1
+
movdqa .Lxts_magic(%rip),%xmm8
- pxor %xmm14,%xmm14
- pcmpgtd %xmm15,%xmm14
- pshufd $19,%xmm14,%xmm9
- pxor %xmm14,%xmm14
+ movdqa %xmm2,%xmm15
+ pshufd $95,%xmm2,%xmm9
+ pxor %xmm0,%xmm1
+ movdqa %xmm9,%xmm14
+ paddd %xmm9,%xmm9
movdqa %xmm15,%xmm10
+ psrad $31,%xmm14
paddq %xmm15,%xmm15
- pand %xmm8,%xmm9
- pcmpgtd %xmm15,%xmm14
- pxor %xmm9,%xmm15
- pshufd $19,%xmm14,%xmm9
- pxor %xmm14,%xmm14
+ pand %xmm8,%xmm14
+ pxor %xmm0,%xmm10
+ pxor %xmm14,%xmm15
+ movdqa %xmm9,%xmm14
+ paddd %xmm9,%xmm9
movdqa %xmm15,%xmm11
+ psrad $31,%xmm14
paddq %xmm15,%xmm15
- pand %xmm8,%xmm9
- pcmpgtd %xmm15,%xmm14
- pxor %xmm9,%xmm15
- pshufd $19,%xmm14,%xmm9
- pxor %xmm14,%xmm14
+ pand %xmm8,%xmm14
+ pxor %xmm0,%xmm11
+ pxor %xmm14,%xmm15
+ movdqa %xmm9,%xmm14
+ paddd %xmm9,%xmm9
movdqa %xmm15,%xmm12
+ psrad $31,%xmm14
paddq %xmm15,%xmm15
- pand %xmm8,%xmm9
- pcmpgtd %xmm15,%xmm14
- pxor %xmm9,%xmm15
- pshufd $19,%xmm14,%xmm9
- pxor %xmm14,%xmm14
+ pand %xmm8,%xmm14
+ pxor %xmm0,%xmm12
+ pxor %xmm14,%xmm15
+ movdqa %xmm9,%xmm14
+ paddd %xmm9,%xmm9
movdqa %xmm15,%xmm13
+ psrad $31,%xmm14
+ paddq %xmm15,%xmm15
+ pand %xmm8,%xmm14
+ pxor %xmm0,%xmm13
+ pxor %xmm14,%xmm15
+ movdqa %xmm15,%xmm14
+ psrad $31,%xmm9
paddq %xmm15,%xmm15
pand %xmm8,%xmm9
- pcmpgtd %xmm15,%xmm14
+ pxor %xmm0,%xmm14
pxor %xmm9,%xmm15
+ movaps %xmm1,96(%rsp)
+
subq $96,%rdx
jc .Lxts_enc_short
- shrl $1,%eax
- subl $1,%eax
- movl %eax,%r10d
+ movl $16+96,%eax
+ leaq 32(%r11,%r10,1),%rcx
+ subq %r10,%rax
+ movups 16(%r11),%xmm1
+ movq %rax,%r10
+ leaq .Lxts_magic(%rip),%r8
jmp .Lxts_enc_grandloop
-.align 16
+.align 32
.Lxts_enc_grandloop:
- pshufd $19,%xmm14,%xmm9
- movdqa %xmm15,%xmm14
- paddq %xmm15,%xmm15
movdqu 0(%rdi),%xmm2
- pand %xmm8,%xmm9
+ movdqa %xmm0,%xmm8
movdqu 16(%rdi),%xmm3
- pxor %xmm9,%xmm15
-
- movdqu 32(%rdi),%xmm4
pxor %xmm10,%xmm2
- movdqu 48(%rdi),%xmm5
+ movdqu 32(%rdi),%xmm4
pxor %xmm11,%xmm3
- movdqu 64(%rdi),%xmm6
+.byte 102,15,56,220,209
+ movdqu 48(%rdi),%xmm5
pxor %xmm12,%xmm4
- movdqu 80(%rdi),%xmm7
- leaq 96(%rdi),%rdi
+.byte 102,15,56,220,217
+ movdqu 64(%rdi),%xmm6
pxor %xmm13,%xmm5
- movups (%r11),%xmm0
+.byte 102,15,56,220,225
+ movdqu 80(%rdi),%xmm7
+ pxor %xmm15,%xmm8
+ movdqa 96(%rsp),%xmm9
pxor %xmm14,%xmm6
- pxor %xmm15,%xmm7
-
-
+.byte 102,15,56,220,233
+ movups 32(%r11),%xmm0
+ leaq 96(%rdi),%rdi
+ pxor %xmm8,%xmm7
- movups 16(%r11),%xmm1
- pxor %xmm0,%xmm2
- pxor %xmm0,%xmm3
+ pxor %xmm9,%xmm10
+.byte 102,15,56,220,241
+ pxor %xmm9,%xmm11
movdqa %xmm10,0(%rsp)
-.byte 102,15,56,220,209
- leaq 32(%r11),%rcx
- pxor %xmm0,%xmm4
+.byte 102,15,56,220,249
+ movups 48(%r11),%xmm1
+ pxor %xmm9,%xmm12
+
+.byte 102,15,56,220,208
+ pxor %xmm9,%xmm13
movdqa %xmm11,16(%rsp)
-.byte 102,15,56,220,217
- pxor %xmm0,%xmm5
+.byte 102,15,56,220,216
+ pxor %xmm9,%xmm14
movdqa %xmm12,32(%rsp)
-.byte 102,15,56,220,225
- pxor %xmm0,%xmm6
- movdqa %xmm13,48(%rsp)
-.byte 102,15,56,220,233
- pxor %xmm0,%xmm7
- movups (%rcx),%xmm0
- decl %eax
+.byte 102,15,56,220,224
+.byte 102,15,56,220,232
+ pxor %xmm9,%xmm8
movdqa %xmm14,64(%rsp)
-.byte 102,15,56,220,241
- movdqa %xmm15,80(%rsp)
-.byte 102,15,56,220,249
- pxor %xmm14,%xmm14
- pcmpgtd %xmm15,%xmm14
- jmp .Lxts_enc_loop6_enter
-
-.align 16
+.byte 102,15,56,220,240
+.byte 102,15,56,220,248
+ movups 64(%r11),%xmm0
+ movdqa %xmm8,80(%rsp)
+ pshufd $95,%xmm15,%xmm9
+ jmp .Lxts_enc_loop6
+.align 32
.Lxts_enc_loop6:
.byte 102,15,56,220,209
.byte 102,15,56,220,217
- decl %eax
.byte 102,15,56,220,225
.byte 102,15,56,220,233
.byte 102,15,56,220,241
.byte 102,15,56,220,249
-.Lxts_enc_loop6_enter:
- movups 16(%rcx),%xmm1
+ movups -64(%rcx,%rax,1),%xmm1
+ addq $32,%rax
+
.byte 102,15,56,220,208
.byte 102,15,56,220,216
- leaq 32(%rcx),%rcx
.byte 102,15,56,220,224
.byte 102,15,56,220,232
.byte 102,15,56,220,240
.byte 102,15,56,220,248
- movups (%rcx),%xmm0
+ movups -80(%rcx,%rax,1),%xmm0
jnz .Lxts_enc_loop6
- pshufd $19,%xmm14,%xmm9
- pxor %xmm14,%xmm14
- paddq %xmm15,%xmm15
+ movdqa (%r8),%xmm8
+ movdqa %xmm9,%xmm14
+ paddd %xmm9,%xmm9
.byte 102,15,56,220,209
- pand %xmm8,%xmm9
+ paddq %xmm15,%xmm15
+ psrad $31,%xmm14
.byte 102,15,56,220,217
- pcmpgtd %xmm15,%xmm14
+ pand %xmm8,%xmm14
+ movups (%r11),%xmm10
.byte 102,15,56,220,225
- pxor %xmm9,%xmm15
.byte 102,15,56,220,233
.byte 102,15,56,220,241
+ pxor %xmm14,%xmm15
+ movaps %xmm10,%xmm11
.byte 102,15,56,220,249
- movups 16(%rcx),%xmm1
+ movups -64(%rcx),%xmm1
- pshufd $19,%xmm14,%xmm9
- pxor %xmm14,%xmm14
- movdqa %xmm15,%xmm10
- paddq %xmm15,%xmm15
+ movdqa %xmm9,%xmm14
.byte 102,15,56,220,208
- pand %xmm8,%xmm9
+ paddd %xmm9,%xmm9
+ pxor %xmm15,%xmm10
.byte 102,15,56,220,216
- pcmpgtd %xmm15,%xmm14
+ psrad $31,%xmm14
+ paddq %xmm15,%xmm15
.byte 102,15,56,220,224
- pxor %xmm9,%xmm15
.byte 102,15,56,220,232
+ pand %xmm8,%xmm14
+ movaps %xmm11,%xmm12
.byte 102,15,56,220,240
+ pxor %xmm14,%xmm15
+ movdqa %xmm9,%xmm14
.byte 102,15,56,220,248
- movups 32(%rcx),%xmm0
+ movups -48(%rcx),%xmm0
- pshufd $19,%xmm14,%xmm9
- pxor %xmm14,%xmm14
- movdqa %xmm15,%xmm11
- paddq %xmm15,%xmm15
+ paddd %xmm9,%xmm9
.byte 102,15,56,220,209
- pand %xmm8,%xmm9
+ pxor %xmm15,%xmm11
+ psrad $31,%xmm14
.byte 102,15,56,220,217
- pcmpgtd %xmm15,%xmm14
+ paddq %xmm15,%xmm15
+ pand %xmm8,%xmm14
.byte 102,15,56,220,225
- pxor %xmm9,%xmm15
.byte 102,15,56,220,233
+ movdqa %xmm13,48(%rsp)
+ pxor %xmm14,%xmm15
.byte 102,15,56,220,241
+ movaps %xmm12,%xmm13
+ movdqa %xmm9,%xmm14
.byte 102,15,56,220,249
+ movups -32(%rcx),%xmm1
- pshufd $19,%xmm14,%xmm9
- pxor %xmm14,%xmm14
- movdqa %xmm15,%xmm12
+ paddd %xmm9,%xmm9
+.byte 102,15,56,220,208
+ pxor %xmm15,%xmm12
+ psrad $31,%xmm14
+.byte 102,15,56,220,216
paddq %xmm15,%xmm15
-.byte 102,15,56,221,208
- pand %xmm8,%xmm9
-.byte 102,15,56,221,216
- pcmpgtd %xmm15,%xmm14
-.byte 102,15,56,221,224
- pxor %xmm9,%xmm15
-.byte 102,15,56,221,232
-.byte 102,15,56,221,240
-.byte 102,15,56,221,248
+ pand %xmm8,%xmm14
+.byte 102,15,56,220,224
+.byte 102,15,56,220,232
+.byte 102,15,56,220,240
+ pxor %xmm14,%xmm15
+ movaps %xmm13,%xmm14
+.byte 102,15,56,220,248
- pshufd $19,%xmm14,%xmm9
- pxor %xmm14,%xmm14
- movdqa %xmm15,%xmm13
+ movdqa %xmm9,%xmm0
+ paddd %xmm9,%xmm9
+.byte 102,15,56,220,209
+ pxor %xmm15,%xmm13
+ psrad $31,%xmm0
+.byte 102,15,56,220,217
+ paddq %xmm15,%xmm15
+ pand %xmm8,%xmm0
+.byte 102,15,56,220,225
+.byte 102,15,56,220,233
+ pxor %xmm0,%xmm15
+ movups (%r11),%xmm0
+.byte 102,15,56,220,241
+.byte 102,15,56,220,249
+ movups 16(%r11),%xmm1
+
+ pxor %xmm15,%xmm14
+.byte 102,15,56,221,84,36,0
+ psrad $31,%xmm9
paddq %xmm15,%xmm15
- xorps 0(%rsp),%xmm2
+.byte 102,15,56,221,92,36,16
+.byte 102,15,56,221,100,36,32
pand %xmm8,%xmm9
- xorps 16(%rsp),%xmm3
- pcmpgtd %xmm15,%xmm14
+ movq %r10,%rax
+.byte 102,15,56,221,108,36,48
+.byte 102,15,56,221,116,36,64
+.byte 102,15,56,221,124,36,80
pxor %xmm9,%xmm15
- xorps 32(%rsp),%xmm4
- movups %xmm2,0(%rsi)
- xorps 48(%rsp),%xmm5
- movups %xmm3,16(%rsi)
- xorps 64(%rsp),%xmm6
- movups %xmm4,32(%rsi)
- xorps 80(%rsp),%xmm7
- movups %xmm5,48(%rsi)
- movl %r10d,%eax
- movups %xmm6,64(%rsi)
- movups %xmm7,80(%rsi)
leaq 96(%rsi),%rsi
+ movups %xmm2,-96(%rsi)
+ movups %xmm3,-80(%rsi)
+ movups %xmm4,-64(%rsi)
+ movups %xmm5,-48(%rsi)
+ movups %xmm6,-32(%rsi)
+ movups %xmm7,-16(%rsi)
subq $96,%rdx
jnc .Lxts_enc_grandloop
- leal 3(%rax,%rax,1),%eax
+ movl $16+96,%eax
+ subl %r10d,%eax
movq %r11,%rcx
- movl %eax,%r10d
+ shrl $4,%eax
.Lxts_enc_short:
+
+ movl %eax,%r10d
+ pxor %xmm0,%xmm10
addq $96,%rdx
jz .Lxts_enc_done
+ pxor %xmm0,%xmm11
cmpq $32,%rdx
jb .Lxts_enc_one
+ pxor %xmm0,%xmm12
je .Lxts_enc_two
+ pxor %xmm0,%xmm13
cmpq $64,%rdx
jb .Lxts_enc_three
+ pxor %xmm0,%xmm14
je .Lxts_enc_four
- pshufd $19,%xmm14,%xmm9
- movdqa %xmm15,%xmm14
- paddq %xmm15,%xmm15
movdqu (%rdi),%xmm2
- pand %xmm8,%xmm9
movdqu 16(%rdi),%xmm3
- pxor %xmm9,%xmm15
-
movdqu 32(%rdi),%xmm4
pxor %xmm10,%xmm2
movdqu 48(%rdi),%xmm5
@@ -1381,6 +1859,7 @@ aesni_xts_encrypt:
pxor %xmm12,%xmm4
pxor %xmm13,%xmm5
pxor %xmm14,%xmm6
+ pxor %xmm7,%xmm7
call _aesni_encrypt6
@@ -1412,7 +1891,7 @@ aesni_xts_encrypt:
decl %eax
movups (%rcx),%xmm1
leaq 16(%rcx),%rcx
- jnz .Loop_enc1_9
+ jnz .Loop_enc1_9
.byte 102,15,56,221,209
xorps %xmm10,%xmm2
movdqa %xmm11,%xmm10
@@ -1428,7 +1907,7 @@ aesni_xts_encrypt:
xorps %xmm10,%xmm2
xorps %xmm11,%xmm3
- call _aesni_encrypt3
+ call _aesni_encrypt2
xorps %xmm10,%xmm2
movdqa %xmm12,%xmm10
@@ -1474,15 +1953,15 @@ aesni_xts_encrypt:
call _aesni_encrypt4
- xorps %xmm10,%xmm2
- movdqa %xmm15,%xmm10
- xorps %xmm11,%xmm3
- xorps %xmm12,%xmm4
- movups %xmm2,(%rsi)
- xorps %xmm13,%xmm5
- movups %xmm3,16(%rsi)
- movups %xmm4,32(%rsi)
- movups %xmm5,48(%rsi)
+ pxor %xmm10,%xmm2
+ movdqa %xmm14,%xmm10
+ pxor %xmm11,%xmm3
+ pxor %xmm12,%xmm4
+ movdqu %xmm2,(%rsi)
+ pxor %xmm13,%xmm5
+ movdqu %xmm3,16(%rsi)
+ movdqu %xmm4,32(%rsi)
+ movdqu %xmm5,48(%rsi)
leaq 64(%rsi),%rsi
jmp .Lxts_enc_done
@@ -1517,13 +1996,37 @@ aesni_xts_encrypt:
decl %eax
movups (%rcx),%xmm1
leaq 16(%rcx),%rcx
- jnz .Loop_enc1_10
+ jnz .Loop_enc1_10
.byte 102,15,56,221,209
xorps %xmm10,%xmm2
movups %xmm2,-16(%rsi)
.Lxts_enc_ret:
- leaq 104(%rsp),%rsp
+ xorps %xmm0,%xmm0
+ pxor %xmm1,%xmm1
+ pxor %xmm2,%xmm2
+ pxor %xmm3,%xmm3
+ pxor %xmm4,%xmm4
+ pxor %xmm5,%xmm5
+ pxor %xmm6,%xmm6
+ pxor %xmm7,%xmm7
+ movaps %xmm0,0(%rsp)
+ pxor %xmm8,%xmm8
+ movaps %xmm0,16(%rsp)
+ pxor %xmm9,%xmm9
+ movaps %xmm0,32(%rsp)
+ pxor %xmm10,%xmm10
+ movaps %xmm0,48(%rsp)
+ pxor %xmm11,%xmm11
+ movaps %xmm0,64(%rsp)
+ pxor %xmm12,%xmm12
+ movaps %xmm0,80(%rsp)
+ pxor %xmm13,%xmm13
+ movaps %xmm0,96(%rsp)
+ pxor %xmm14,%xmm14
+ pxor %xmm15,%xmm15
+ leaq (%rbp),%rsp
+ popq %rbp
.Lxts_enc_epilogue:
.byte 0xf3,0xc3
.size aesni_xts_encrypt,.-aesni_xts_encrypt
@@ -1531,249 +2034,293 @@ aesni_xts_encrypt:
.type aesni_xts_decrypt,@function
.align 16
aesni_xts_decrypt:
- leaq -104(%rsp),%rsp
- movups (%r9),%xmm15
+ leaq (%rsp),%rax
+ pushq %rbp
+ subq $112,%rsp
+ andq $-16,%rsp
+ leaq -8(%rax),%rbp
+ movups (%r9),%xmm2
movl 240(%r8),%eax
movl 240(%rcx),%r10d
movups (%r8),%xmm0
movups 16(%r8),%xmm1
leaq 32(%r8),%r8
- xorps %xmm0,%xmm15
+ xorps %xmm0,%xmm2
.Loop_enc1_11:
-.byte 102,68,15,56,220,249
+.byte 102,15,56,220,209
decl %eax
movups (%r8),%xmm1
leaq 16(%r8),%r8
- jnz .Loop_enc1_11
-.byte 102,68,15,56,221,249
+ jnz .Loop_enc1_11
+.byte 102,15,56,221,209
xorl %eax,%eax
testq $15,%rdx
setnz %al
shlq $4,%rax
subq %rax,%rdx
+ movups (%rcx),%xmm0
movq %rcx,%r11
movl %r10d,%eax
+ shll $4,%r10d
movq %rdx,%r9
andq $-16,%rdx
+ movups 16(%rcx,%r10,1),%xmm1
+
movdqa .Lxts_magic(%rip),%xmm8
- pxor %xmm14,%xmm14
- pcmpgtd %xmm15,%xmm14
- pshufd $19,%xmm14,%xmm9
- pxor %xmm14,%xmm14
+ movdqa %xmm2,%xmm15
+ pshufd $95,%xmm2,%xmm9
+ pxor %xmm0,%xmm1
+ movdqa %xmm9,%xmm14
+ paddd %xmm9,%xmm9
movdqa %xmm15,%xmm10
+ psrad $31,%xmm14
paddq %xmm15,%xmm15
- pand %xmm8,%xmm9
- pcmpgtd %xmm15,%xmm14
- pxor %xmm9,%xmm15
- pshufd $19,%xmm14,%xmm9
- pxor %xmm14,%xmm14
+ pand %xmm8,%xmm14
+ pxor %xmm0,%xmm10
+ pxor %xmm14,%xmm15
+ movdqa %xmm9,%xmm14
+ paddd %xmm9,%xmm9
movdqa %xmm15,%xmm11
+ psrad $31,%xmm14
paddq %xmm15,%xmm15
- pand %xmm8,%xmm9
- pcmpgtd %xmm15,%xmm14
- pxor %xmm9,%xmm15
- pshufd $19,%xmm14,%xmm9
- pxor %xmm14,%xmm14
+ pand %xmm8,%xmm14
+ pxor %xmm0,%xmm11
+ pxor %xmm14,%xmm15
+ movdqa %xmm9,%xmm14
+ paddd %xmm9,%xmm9
movdqa %xmm15,%xmm12
+ psrad $31,%xmm14
paddq %xmm15,%xmm15
- pand %xmm8,%xmm9
- pcmpgtd %xmm15,%xmm14
- pxor %xmm9,%xmm15
- pshufd $19,%xmm14,%xmm9
- pxor %xmm14,%xmm14
+ pand %xmm8,%xmm14
+ pxor %xmm0,%xmm12
+ pxor %xmm14,%xmm15
+ movdqa %xmm9,%xmm14
+ paddd %xmm9,%xmm9
movdqa %xmm15,%xmm13
+ psrad $31,%xmm14
+ paddq %xmm15,%xmm15
+ pand %xmm8,%xmm14
+ pxor %xmm0,%xmm13
+ pxor %xmm14,%xmm15
+ movdqa %xmm15,%xmm14
+ psrad $31,%xmm9
paddq %xmm15,%xmm15
pand %xmm8,%xmm9
- pcmpgtd %xmm15,%xmm14
+ pxor %xmm0,%xmm14
pxor %xmm9,%xmm15
+ movaps %xmm1,96(%rsp)
+
subq $96,%rdx
jc .Lxts_dec_short
- shrl $1,%eax
- subl $1,%eax
- movl %eax,%r10d
+ movl $16+96,%eax
+ leaq 32(%r11,%r10,1),%rcx
+ subq %r10,%rax
+ movups 16(%r11),%xmm1
+ movq %rax,%r10
+ leaq .Lxts_magic(%rip),%r8
jmp .Lxts_dec_grandloop
-.align 16
+.align 32
.Lxts_dec_grandloop:
- pshufd $19,%xmm14,%xmm9
- movdqa %xmm15,%xmm14
- paddq %xmm15,%xmm15
movdqu 0(%rdi),%xmm2
- pand %xmm8,%xmm9
+ movdqa %xmm0,%xmm8
movdqu 16(%rdi),%xmm3
- pxor %xmm9,%xmm15
-
- movdqu 32(%rdi),%xmm4
pxor %xmm10,%xmm2
- movdqu 48(%rdi),%xmm5
+ movdqu 32(%rdi),%xmm4
pxor %xmm11,%xmm3
- movdqu 64(%rdi),%xmm6
+.byte 102,15,56,222,209
+ movdqu 48(%rdi),%xmm5
pxor %xmm12,%xmm4
- movdqu 80(%rdi),%xmm7
- leaq 96(%rdi),%rdi
+.byte 102,15,56,222,217
+ movdqu 64(%rdi),%xmm6
pxor %xmm13,%xmm5
- movups (%r11),%xmm0
+.byte 102,15,56,222,225
+ movdqu 80(%rdi),%xmm7
+ pxor %xmm15,%xmm8
+ movdqa 96(%rsp),%xmm9
pxor %xmm14,%xmm6
- pxor %xmm15,%xmm7
-
-
+.byte 102,15,56,222,233
+ movups 32(%r11),%xmm0
+ leaq 96(%rdi),%rdi
+ pxor %xmm8,%xmm7
- movups 16(%r11),%xmm1
- pxor %xmm0,%xmm2
- pxor %xmm0,%xmm3
+ pxor %xmm9,%xmm10
+.byte 102,15,56,222,241
+ pxor %xmm9,%xmm11
movdqa %xmm10,0(%rsp)
-.byte 102,15,56,222,209
- leaq 32(%r11),%rcx
- pxor %xmm0,%xmm4
+.byte 102,15,56,222,249
+ movups 48(%r11),%xmm1
+ pxor %xmm9,%xmm12
+
+.byte 102,15,56,222,208
+ pxor %xmm9,%xmm13
movdqa %xmm11,16(%rsp)
-.byte 102,15,56,222,217
- pxor %xmm0,%xmm5
+.byte 102,15,56,222,216
+ pxor %xmm9,%xmm14
movdqa %xmm12,32(%rsp)
-.byte 102,15,56,222,225
- pxor %xmm0,%xmm6
- movdqa %xmm13,48(%rsp)
-.byte 102,15,56,222,233
- pxor %xmm0,%xmm7
- movups (%rcx),%xmm0
- decl %eax
+.byte 102,15,56,222,224
+.byte 102,15,56,222,232
+ pxor %xmm9,%xmm8
movdqa %xmm14,64(%rsp)
-.byte 102,15,56,222,241
- movdqa %xmm15,80(%rsp)
-.byte 102,15,56,222,249
- pxor %xmm14,%xmm14
- pcmpgtd %xmm15,%xmm14
- jmp .Lxts_dec_loop6_enter
-
-.align 16
+.byte 102,15,56,222,240
+.byte 102,15,56,222,248
+ movups 64(%r11),%xmm0
+ movdqa %xmm8,80(%rsp)
+ pshufd $95,%xmm15,%xmm9
+ jmp .Lxts_dec_loop6
+.align 32
.Lxts_dec_loop6:
.byte 102,15,56,222,209
.byte 102,15,56,222,217
- decl %eax
.byte 102,15,56,222,225
.byte 102,15,56,222,233
.byte 102,15,56,222,241
.byte 102,15,56,222,249
-.Lxts_dec_loop6_enter:
- movups 16(%rcx),%xmm1
+ movups -64(%rcx,%rax,1),%xmm1
+ addq $32,%rax
+
.byte 102,15,56,222,208
.byte 102,15,56,222,216
- leaq 32(%rcx),%rcx
.byte 102,15,56,222,224
.byte 102,15,56,222,232
.byte 102,15,56,222,240
.byte 102,15,56,222,248
- movups (%rcx),%xmm0
+ movups -80(%rcx,%rax,1),%xmm0
jnz .Lxts_dec_loop6
- pshufd $19,%xmm14,%xmm9
- pxor %xmm14,%xmm14
- paddq %xmm15,%xmm15
+ movdqa (%r8),%xmm8
+ movdqa %xmm9,%xmm14
+ paddd %xmm9,%xmm9
.byte 102,15,56,222,209
- pand %xmm8,%xmm9
+ paddq %xmm15,%xmm15
+ psrad $31,%xmm14
.byte 102,15,56,222,217
- pcmpgtd %xmm15,%xmm14
+ pand %xmm8,%xmm14
+ movups (%r11),%xmm10
.byte 102,15,56,222,225
- pxor %xmm9,%xmm15
.byte 102,15,56,222,233
.byte 102,15,56,222,241
+ pxor %xmm14,%xmm15
+ movaps %xmm10,%xmm11
.byte 102,15,56,222,249
- movups 16(%rcx),%xmm1
+ movups -64(%rcx),%xmm1
- pshufd $19,%xmm14,%xmm9
- pxor %xmm14,%xmm14
- movdqa %xmm15,%xmm10
- paddq %xmm15,%xmm15
+ movdqa %xmm9,%xmm14
.byte 102,15,56,222,208
- pand %xmm8,%xmm9
+ paddd %xmm9,%xmm9
+ pxor %xmm15,%xmm10
.byte 102,15,56,222,216
- pcmpgtd %xmm15,%xmm14
+ psrad $31,%xmm14
+ paddq %xmm15,%xmm15
.byte 102,15,56,222,224
- pxor %xmm9,%xmm15
.byte 102,15,56,222,232
+ pand %xmm8,%xmm14
+ movaps %xmm11,%xmm12
.byte 102,15,56,222,240
+ pxor %xmm14,%xmm15
+ movdqa %xmm9,%xmm14
.byte 102,15,56,222,248
- movups 32(%rcx),%xmm0
+ movups -48(%rcx),%xmm0
- pshufd $19,%xmm14,%xmm9
- pxor %xmm14,%xmm14
- movdqa %xmm15,%xmm11
- paddq %xmm15,%xmm15
+ paddd %xmm9,%xmm9
.byte 102,15,56,222,209
- pand %xmm8,%xmm9
+ pxor %xmm15,%xmm11
+ psrad $31,%xmm14
.byte 102,15,56,222,217
- pcmpgtd %xmm15,%xmm14
+ paddq %xmm15,%xmm15
+ pand %xmm8,%xmm14
.byte 102,15,56,222,225
- pxor %xmm9,%xmm15
.byte 102,15,56,222,233
+ movdqa %xmm13,48(%rsp)
+ pxor %xmm14,%xmm15
.byte 102,15,56,222,241
+ movaps %xmm12,%xmm13
+ movdqa %xmm9,%xmm14
.byte 102,15,56,222,249
+ movups -32(%rcx),%xmm1
- pshufd $19,%xmm14,%xmm9
- pxor %xmm14,%xmm14
- movdqa %xmm15,%xmm12
+ paddd %xmm9,%xmm9
+.byte 102,15,56,222,208
+ pxor %xmm15,%xmm12
+ psrad $31,%xmm14
+.byte 102,15,56,222,216
paddq %xmm15,%xmm15
-.byte 102,15,56,223,208
- pand %xmm8,%xmm9
-.byte 102,15,56,223,216
- pcmpgtd %xmm15,%xmm14
-.byte 102,15,56,223,224
- pxor %xmm9,%xmm15
-.byte 102,15,56,223,232
-.byte 102,15,56,223,240
-.byte 102,15,56,223,248
+ pand %xmm8,%xmm14
+.byte 102,15,56,222,224
+.byte 102,15,56,222,232
+.byte 102,15,56,222,240
+ pxor %xmm14,%xmm15
+ movaps %xmm13,%xmm14
+.byte 102,15,56,222,248
- pshufd $19,%xmm14,%xmm9
- pxor %xmm14,%xmm14
- movdqa %xmm15,%xmm13
+ movdqa %xmm9,%xmm0
+ paddd %xmm9,%xmm9
+.byte 102,15,56,222,209
+ pxor %xmm15,%xmm13
+ psrad $31,%xmm0
+.byte 102,15,56,222,217
+ paddq %xmm15,%xmm15
+ pand %xmm8,%xmm0
+.byte 102,15,56,222,225
+.byte 102,15,56,222,233
+ pxor %xmm0,%xmm15
+ movups (%r11),%xmm0
+.byte 102,15,56,222,241
+.byte 102,15,56,222,249
+ movups 16(%r11),%xmm1
+
+ pxor %xmm15,%xmm14
+.byte 102,15,56,223,84,36,0
+ psrad $31,%xmm9
paddq %xmm15,%xmm15
- xorps 0(%rsp),%xmm2
+.byte 102,15,56,223,92,36,16
+.byte 102,15,56,223,100,36,32
pand %xmm8,%xmm9
- xorps 16(%rsp),%xmm3
- pcmpgtd %xmm15,%xmm14
+ movq %r10,%rax
+.byte 102,15,56,223,108,36,48
+.byte 102,15,56,223,116,36,64
+.byte 102,15,56,223,124,36,80
pxor %xmm9,%xmm15
- xorps 32(%rsp),%xmm4
- movups %xmm2,0(%rsi)
- xorps 48(%rsp),%xmm5
- movups %xmm3,16(%rsi)
- xorps 64(%rsp),%xmm6
- movups %xmm4,32(%rsi)
- xorps 80(%rsp),%xmm7
- movups %xmm5,48(%rsi)
- movl %r10d,%eax
- movups %xmm6,64(%rsi)
- movups %xmm7,80(%rsi)
leaq 96(%rsi),%rsi
+ movups %xmm2,-96(%rsi)
+ movups %xmm3,-80(%rsi)
+ movups %xmm4,-64(%rsi)
+ movups %xmm5,-48(%rsi)
+ movups %xmm6,-32(%rsi)
+ movups %xmm7,-16(%rsi)
subq $96,%rdx
jnc .Lxts_dec_grandloop
- leal 3(%rax,%rax,1),%eax
+ movl $16+96,%eax
+ subl %r10d,%eax
movq %r11,%rcx
- movl %eax,%r10d
+ shrl $4,%eax
.Lxts_dec_short:
+
+ movl %eax,%r10d
+ pxor %xmm0,%xmm10
+ pxor %xmm0,%xmm11
addq $96,%rdx
jz .Lxts_dec_done
+ pxor %xmm0,%xmm12
cmpq $32,%rdx
jb .Lxts_dec_one
+ pxor %xmm0,%xmm13
je .Lxts_dec_two
+ pxor %xmm0,%xmm14
cmpq $64,%rdx
jb .Lxts_dec_three
je .Lxts_dec_four
- pshufd $19,%xmm14,%xmm9
- movdqa %xmm15,%xmm14
- paddq %xmm15,%xmm15
movdqu (%rdi),%xmm2
- pand %xmm8,%xmm9
movdqu 16(%rdi),%xmm3
- pxor %xmm9,%xmm15
-
movdqu 32(%rdi),%xmm4
pxor %xmm10,%xmm2
movdqu 48(%rdi),%xmm5
@@ -1823,7 +2370,7 @@ aesni_xts_decrypt:
decl %eax
movups (%rcx),%xmm1
leaq 16(%rcx),%rcx
- jnz .Loop_dec1_12
+ jnz .Loop_dec1_12
.byte 102,15,56,223,209
xorps %xmm10,%xmm2
movdqa %xmm11,%xmm10
@@ -1840,7 +2387,7 @@ aesni_xts_decrypt:
xorps %xmm10,%xmm2
xorps %xmm11,%xmm3
- call _aesni_decrypt3
+ call _aesni_decrypt2
xorps %xmm10,%xmm2
movdqa %xmm12,%xmm10
@@ -1866,7 +2413,7 @@ aesni_xts_decrypt:
xorps %xmm10,%xmm2
movdqa %xmm13,%xmm10
xorps %xmm11,%xmm3
- movdqa %xmm15,%xmm11
+ movdqa %xmm14,%xmm11
xorps %xmm12,%xmm4
movups %xmm2,(%rsi)
movups %xmm3,16(%rsi)
@@ -1876,14 +2423,8 @@ aesni_xts_decrypt:
.align 16
.Lxts_dec_four:
- pshufd $19,%xmm14,%xmm9
- movdqa %xmm15,%xmm14
- paddq %xmm15,%xmm15
movups (%rdi),%xmm2
- pand %xmm8,%xmm9
movups 16(%rdi),%xmm3
- pxor %xmm9,%xmm15
-
movups 32(%rdi),%xmm4
xorps %xmm10,%xmm2
movups 48(%rdi),%xmm5
@@ -1894,16 +2435,16 @@ aesni_xts_decrypt:
call _aesni_decrypt4
- xorps %xmm10,%xmm2
+ pxor %xmm10,%xmm2
movdqa %xmm14,%xmm10
- xorps %xmm11,%xmm3
+ pxor %xmm11,%xmm3
movdqa %xmm15,%xmm11
- xorps %xmm12,%xmm4
- movups %xmm2,(%rsi)
- xorps %xmm13,%xmm5
- movups %xmm3,16(%rsi)
- movups %xmm4,32(%rsi)
- movups %xmm5,48(%rsi)
+ pxor %xmm12,%xmm4
+ movdqu %xmm2,(%rsi)
+ pxor %xmm13,%xmm5
+ movdqu %xmm3,16(%rsi)
+ movdqu %xmm4,32(%rsi)
+ movdqu %xmm5,48(%rsi)
leaq 64(%rsi),%rsi
jmp .Lxts_dec_done
@@ -1927,7 +2468,7 @@ aesni_xts_decrypt:
decl %eax
movups (%rcx),%xmm1
leaq 16(%rcx),%rcx
- jnz .Loop_dec1_13
+ jnz .Loop_dec1_13
.byte 102,15,56,223,209
xorps %xmm11,%xmm2
movups %xmm2,(%rsi)
@@ -1957,13 +2498,37 @@ aesni_xts_decrypt:
decl %eax
movups (%rcx),%xmm1
leaq 16(%rcx),%rcx
- jnz .Loop_dec1_14
+ jnz .Loop_dec1_14
.byte 102,15,56,223,209
xorps %xmm10,%xmm2
movups %xmm2,(%rsi)
.Lxts_dec_ret:
- leaq 104(%rsp),%rsp
+ xorps %xmm0,%xmm0
+ pxor %xmm1,%xmm1
+ pxor %xmm2,%xmm2
+ pxor %xmm3,%xmm3
+ pxor %xmm4,%xmm4
+ pxor %xmm5,%xmm5
+ pxor %xmm6,%xmm6
+ pxor %xmm7,%xmm7
+ movaps %xmm0,0(%rsp)
+ pxor %xmm8,%xmm8
+ movaps %xmm0,16(%rsp)
+ pxor %xmm9,%xmm9
+ movaps %xmm0,32(%rsp)
+ pxor %xmm10,%xmm10
+ movaps %xmm0,48(%rsp)
+ pxor %xmm11,%xmm11
+ movaps %xmm0,64(%rsp)
+ pxor %xmm12,%xmm12
+ movaps %xmm0,80(%rsp)
+ pxor %xmm13,%xmm13
+ movaps %xmm0,96(%rsp)
+ pxor %xmm14,%xmm14
+ pxor %xmm15,%xmm15
+ leaq (%rbp),%rsp
+ popq %rbp
.Lxts_dec_epilogue:
.byte 0xf3,0xc3
.size aesni_xts_decrypt,.-aesni_xts_decrypt
@@ -2000,7 +2565,7 @@ aesni_cbc_encrypt:
decl %eax
movups (%rcx),%xmm1
leaq 16(%rcx),%rcx
- jnz .Loop_enc1_15
+ jnz .Loop_enc1_15
.byte 102,15,56,221,209
movl %r10d,%eax
movq %r11,%rcx
@@ -2010,285 +2575,545 @@ aesni_cbc_encrypt:
jnc .Lcbc_enc_loop
addq $16,%rdx
jnz .Lcbc_enc_tail
+ pxor %xmm0,%xmm0
+ pxor %xmm1,%xmm1
movups %xmm2,(%r8)
+ pxor %xmm2,%xmm2
+ pxor %xmm3,%xmm3
jmp .Lcbc_ret
.Lcbc_enc_tail:
movq %rdx,%rcx
xchgq %rdi,%rsi
-.long 0x9066A4F3
+.long 0x9066A4F3
movl $16,%ecx
subq %rdx,%rcx
xorl %eax,%eax
-.long 0x9066AAF3
+.long 0x9066AAF3
leaq -16(%rdi),%rdi
movl %r10d,%eax
movq %rdi,%rsi
movq %r11,%rcx
xorq %rdx,%rdx
- jmp .Lcbc_enc_loop
+ jmp .Lcbc_enc_loop
.align 16
.Lcbc_decrypt:
- movups (%r8),%xmm9
+ cmpq $16,%rdx
+ jne .Lcbc_decrypt_bulk
+
+
+
+ movdqu (%rdi),%xmm2
+ movdqu (%r8),%xmm3
+ movdqa %xmm2,%xmm4
+ movups (%rcx),%xmm0
+ movups 16(%rcx),%xmm1
+ leaq 32(%rcx),%rcx
+ xorps %xmm0,%xmm2
+.Loop_dec1_16:
+.byte 102,15,56,222,209
+ decl %r10d
+ movups (%rcx),%xmm1
+ leaq 16(%rcx),%rcx
+ jnz .Loop_dec1_16
+.byte 102,15,56,223,209
+ pxor %xmm0,%xmm0
+ pxor %xmm1,%xmm1
+ movdqu %xmm4,(%r8)
+ xorps %xmm3,%xmm2
+ pxor %xmm3,%xmm3
+ movups %xmm2,(%rsi)
+ pxor %xmm2,%xmm2
+ jmp .Lcbc_ret
+.align 16
+.Lcbc_decrypt_bulk:
+ leaq (%rsp),%rax
+ pushq %rbp
+ subq $16,%rsp
+ andq $-16,%rsp
+ leaq -8(%rax),%rbp
+ movups (%r8),%xmm10
movl %r10d,%eax
- cmpq $112,%rdx
+ cmpq $80,%rdx
jbe .Lcbc_dec_tail
- shrl $1,%r10d
- subq $112,%rdx
- movl %r10d,%eax
- movaps %xmm9,-24(%rsp)
+
+ movups (%rcx),%xmm0
+ movdqu 0(%rdi),%xmm2
+ movdqu 16(%rdi),%xmm3
+ movdqa %xmm2,%xmm11
+ movdqu 32(%rdi),%xmm4
+ movdqa %xmm3,%xmm12
+ movdqu 48(%rdi),%xmm5
+ movdqa %xmm4,%xmm13
+ movdqu 64(%rdi),%xmm6
+ movdqa %xmm5,%xmm14
+ movdqu 80(%rdi),%xmm7
+ movdqa %xmm6,%xmm15
+ movl OPENSSL_ia32cap_P+4(%rip),%r9d
+ cmpq $112,%rdx
+ jbe .Lcbc_dec_six_or_seven
+
+ andl $71303168,%r9d
+ subq $80,%rdx
+ cmpl $4194304,%r9d
+ je .Lcbc_dec_loop6_enter
+ subq $32,%rdx
+ leaq 112(%rcx),%rcx
jmp .Lcbc_dec_loop8_enter
.align 16
.Lcbc_dec_loop8:
- movaps %xmm0,-24(%rsp)
movups %xmm9,(%rsi)
leaq 16(%rsi),%rsi
.Lcbc_dec_loop8_enter:
- movups (%rcx),%xmm0
- movups (%rdi),%xmm2
- movups 16(%rdi),%xmm3
- movups 16(%rcx),%xmm1
+ movdqu 96(%rdi),%xmm8
+ pxor %xmm0,%xmm2
+ movdqu 112(%rdi),%xmm9
+ pxor %xmm0,%xmm3
+ movups 16-112(%rcx),%xmm1
+ pxor %xmm0,%xmm4
+ xorq %r11,%r11
+ cmpq $112,%rdx
+ pxor %xmm0,%xmm5
+ pxor %xmm0,%xmm6
+ pxor %xmm0,%xmm7
+ pxor %xmm0,%xmm8
- leaq 32(%rcx),%rcx
- movdqu 32(%rdi),%xmm4
- xorps %xmm0,%xmm2
- movdqu 48(%rdi),%xmm5
- xorps %xmm0,%xmm3
- movdqu 64(%rdi),%xmm6
.byte 102,15,56,222,209
- pxor %xmm0,%xmm4
- movdqu 80(%rdi),%xmm7
+ pxor %xmm0,%xmm9
+ movups 32-112(%rcx),%xmm0
.byte 102,15,56,222,217
- pxor %xmm0,%xmm5
- movdqu 96(%rdi),%xmm8
.byte 102,15,56,222,225
- pxor %xmm0,%xmm6
- movdqu 112(%rdi),%xmm9
.byte 102,15,56,222,233
- pxor %xmm0,%xmm7
- decl %eax
.byte 102,15,56,222,241
- pxor %xmm0,%xmm8
.byte 102,15,56,222,249
- pxor %xmm0,%xmm9
- movups (%rcx),%xmm0
.byte 102,68,15,56,222,193
+ setnc %r11b
+ shlq $7,%r11
.byte 102,68,15,56,222,201
- movups 16(%rcx),%xmm1
-
- call .Ldec_loop8_enter
+ addq %rdi,%r11
+ movups 48-112(%rcx),%xmm1
+.byte 102,15,56,222,208
+.byte 102,15,56,222,216
+.byte 102,15,56,222,224
+.byte 102,15,56,222,232
+.byte 102,15,56,222,240
+.byte 102,15,56,222,248
+.byte 102,68,15,56,222,192
+.byte 102,68,15,56,222,200
+ movups 64-112(%rcx),%xmm0
+ nop
+.byte 102,15,56,222,209
+.byte 102,15,56,222,217
+.byte 102,15,56,222,225
+.byte 102,15,56,222,233
+.byte 102,15,56,222,241
+.byte 102,15,56,222,249
+.byte 102,68,15,56,222,193
+.byte 102,68,15,56,222,201
+ movups 80-112(%rcx),%xmm1
+ nop
+.byte 102,15,56,222,208
+.byte 102,15,56,222,216
+.byte 102,15,56,222,224
+.byte 102,15,56,222,232
+.byte 102,15,56,222,240
+.byte 102,15,56,222,248
+.byte 102,68,15,56,222,192
+.byte 102,68,15,56,222,200
+ movups 96-112(%rcx),%xmm0
+ nop
+.byte 102,15,56,222,209
+.byte 102,15,56,222,217
+.byte 102,15,56,222,225
+.byte 102,15,56,222,233
+.byte 102,15,56,222,241
+.byte 102,15,56,222,249
+.byte 102,68,15,56,222,193
+.byte 102,68,15,56,222,201
+ movups 112-112(%rcx),%xmm1
+ nop
+.byte 102,15,56,222,208
+.byte 102,15,56,222,216
+.byte 102,15,56,222,224
+.byte 102,15,56,222,232
+.byte 102,15,56,222,240
+.byte 102,15,56,222,248
+.byte 102,68,15,56,222,192
+.byte 102,68,15,56,222,200
+ movups 128-112(%rcx),%xmm0
+ nop
+.byte 102,15,56,222,209
+.byte 102,15,56,222,217
+.byte 102,15,56,222,225
+.byte 102,15,56,222,233
+.byte 102,15,56,222,241
+.byte 102,15,56,222,249
+.byte 102,68,15,56,222,193
+.byte 102,68,15,56,222,201
+ movups 144-112(%rcx),%xmm1
+ cmpl $11,%eax
+.byte 102,15,56,222,208
+.byte 102,15,56,222,216
+.byte 102,15,56,222,224
+.byte 102,15,56,222,232
+.byte 102,15,56,222,240
+.byte 102,15,56,222,248
+.byte 102,68,15,56,222,192
+.byte 102,68,15,56,222,200
+ movups 160-112(%rcx),%xmm0
+ jb .Lcbc_dec_done
+.byte 102,15,56,222,209
+.byte 102,15,56,222,217
+.byte 102,15,56,222,225
+.byte 102,15,56,222,233
+.byte 102,15,56,222,241
+.byte 102,15,56,222,249
+.byte 102,68,15,56,222,193
+.byte 102,68,15,56,222,201
+ movups 176-112(%rcx),%xmm1
+ nop
+.byte 102,15,56,222,208
+.byte 102,15,56,222,216
+.byte 102,15,56,222,224
+.byte 102,15,56,222,232
+.byte 102,15,56,222,240
+.byte 102,15,56,222,248
+.byte 102,68,15,56,222,192
+.byte 102,68,15,56,222,200
+ movups 192-112(%rcx),%xmm0
+ je .Lcbc_dec_done
+.byte 102,15,56,222,209
+.byte 102,15,56,222,217
+.byte 102,15,56,222,225
+.byte 102,15,56,222,233
+.byte 102,15,56,222,241
+.byte 102,15,56,222,249
+.byte 102,68,15,56,222,193
+.byte 102,68,15,56,222,201
+ movups 208-112(%rcx),%xmm1
+ nop
+.byte 102,15,56,222,208
+.byte 102,15,56,222,216
+.byte 102,15,56,222,224
+.byte 102,15,56,222,232
+.byte 102,15,56,222,240
+.byte 102,15,56,222,248
+.byte 102,68,15,56,222,192
+.byte 102,68,15,56,222,200
+ movups 224-112(%rcx),%xmm0
+ jmp .Lcbc_dec_done
+.align 16
+.Lcbc_dec_done:
+.byte 102,15,56,222,209
+.byte 102,15,56,222,217
+ pxor %xmm0,%xmm10
+ pxor %xmm0,%xmm11
+.byte 102,15,56,222,225
+.byte 102,15,56,222,233
+ pxor %xmm0,%xmm12
+ pxor %xmm0,%xmm13
+.byte 102,15,56,222,241
+.byte 102,15,56,222,249
+ pxor %xmm0,%xmm14
+ pxor %xmm0,%xmm15
+.byte 102,68,15,56,222,193
+.byte 102,68,15,56,222,201
+ movdqu 80(%rdi),%xmm1
+
+.byte 102,65,15,56,223,210
+ movdqu 96(%rdi),%xmm10
+ pxor %xmm0,%xmm1
+.byte 102,65,15,56,223,219
+ pxor %xmm0,%xmm10
+ movdqu 112(%rdi),%xmm0
+.byte 102,65,15,56,223,228
+ leaq 128(%rdi),%rdi
+ movdqu 0(%r11),%xmm11
+.byte 102,65,15,56,223,237
+.byte 102,65,15,56,223,246
+ movdqu 16(%r11),%xmm12
+ movdqu 32(%r11),%xmm13
+.byte 102,65,15,56,223,255
+.byte 102,68,15,56,223,193
+ movdqu 48(%r11),%xmm14
+ movdqu 64(%r11),%xmm15
+.byte 102,69,15,56,223,202
+ movdqa %xmm0,%xmm10
+ movdqu 80(%r11),%xmm1
+ movups -112(%rcx),%xmm0
- movups (%rdi),%xmm1
- movups 16(%rdi),%xmm0
- xorps -24(%rsp),%xmm2
- xorps %xmm1,%xmm3
- movups 32(%rdi),%xmm1
- xorps %xmm0,%xmm4
- movups 48(%rdi),%xmm0
- xorps %xmm1,%xmm5
- movups 64(%rdi),%xmm1
- xorps %xmm0,%xmm6
- movups 80(%rdi),%xmm0
- xorps %xmm1,%xmm7
- movups 96(%rdi),%xmm1
- xorps %xmm0,%xmm8
- movups 112(%rdi),%xmm0
- xorps %xmm1,%xmm9
movups %xmm2,(%rsi)
+ movdqa %xmm11,%xmm2
movups %xmm3,16(%rsi)
+ movdqa %xmm12,%xmm3
movups %xmm4,32(%rsi)
+ movdqa %xmm13,%xmm4
movups %xmm5,48(%rsi)
- movl %r10d,%eax
+ movdqa %xmm14,%xmm5
movups %xmm6,64(%rsi)
- movq %r11,%rcx
+ movdqa %xmm15,%xmm6
movups %xmm7,80(%rsi)
- leaq 128(%rdi),%rdi
+ movdqa %xmm1,%xmm7
movups %xmm8,96(%rsi)
leaq 112(%rsi),%rsi
+
subq $128,%rdx
ja .Lcbc_dec_loop8
movaps %xmm9,%xmm2
- movaps %xmm0,%xmm9
+ leaq -112(%rcx),%rcx
addq $112,%rdx
- jle .Lcbc_dec_tail_collected
- movups %xmm2,(%rsi)
- leal 1(%r10,%r10,1),%eax
+ jle .Lcbc_dec_clear_tail_collected
+ movups %xmm9,(%rsi)
leaq 16(%rsi),%rsi
+ cmpq $80,%rdx
+ jbe .Lcbc_dec_tail
+
+ movaps %xmm11,%xmm2
+.Lcbc_dec_six_or_seven:
+ cmpq $96,%rdx
+ ja .Lcbc_dec_seven
+
+ movaps %xmm7,%xmm8
+ call _aesni_decrypt6
+ pxor %xmm10,%xmm2
+ movaps %xmm8,%xmm10
+ pxor %xmm11,%xmm3
+ movdqu %xmm2,(%rsi)
+ pxor %xmm12,%xmm4
+ movdqu %xmm3,16(%rsi)
+ pxor %xmm3,%xmm3
+ pxor %xmm13,%xmm5
+ movdqu %xmm4,32(%rsi)
+ pxor %xmm4,%xmm4
+ pxor %xmm14,%xmm6
+ movdqu %xmm5,48(%rsi)
+ pxor %xmm5,%xmm5
+ pxor %xmm15,%xmm7
+ movdqu %xmm6,64(%rsi)
+ pxor %xmm6,%xmm6
+ leaq 80(%rsi),%rsi
+ movdqa %xmm7,%xmm2
+ pxor %xmm7,%xmm7
+ jmp .Lcbc_dec_tail_collected
+
+.align 16
+.Lcbc_dec_seven:
+ movups 96(%rdi),%xmm8
+ xorps %xmm9,%xmm9
+ call _aesni_decrypt8
+ movups 80(%rdi),%xmm9
+ pxor %xmm10,%xmm2
+ movups 96(%rdi),%xmm10
+ pxor %xmm11,%xmm3
+ movdqu %xmm2,(%rsi)
+ pxor %xmm12,%xmm4
+ movdqu %xmm3,16(%rsi)
+ pxor %xmm3,%xmm3
+ pxor %xmm13,%xmm5
+ movdqu %xmm4,32(%rsi)
+ pxor %xmm4,%xmm4
+ pxor %xmm14,%xmm6
+ movdqu %xmm5,48(%rsi)
+ pxor %xmm5,%xmm5
+ pxor %xmm15,%xmm7
+ movdqu %xmm6,64(%rsi)
+ pxor %xmm6,%xmm6
+ pxor %xmm9,%xmm8
+ movdqu %xmm7,80(%rsi)
+ pxor %xmm7,%xmm7
+ leaq 96(%rsi),%rsi
+ movdqa %xmm8,%xmm2
+ pxor %xmm8,%xmm8
+ pxor %xmm9,%xmm9
+ jmp .Lcbc_dec_tail_collected
+
+.align 16
+.Lcbc_dec_loop6:
+ movups %xmm7,(%rsi)
+ leaq 16(%rsi),%rsi
+ movdqu 0(%rdi),%xmm2
+ movdqu 16(%rdi),%xmm3
+ movdqa %xmm2,%xmm11
+ movdqu 32(%rdi),%xmm4
+ movdqa %xmm3,%xmm12
+ movdqu 48(%rdi),%xmm5
+ movdqa %xmm4,%xmm13
+ movdqu 64(%rdi),%xmm6
+ movdqa %xmm5,%xmm14
+ movdqu 80(%rdi),%xmm7
+ movdqa %xmm6,%xmm15
+.Lcbc_dec_loop6_enter:
+ leaq 96(%rdi),%rdi
+ movdqa %xmm7,%xmm8
+
+ call _aesni_decrypt6
+
+ pxor %xmm10,%xmm2
+ movdqa %xmm8,%xmm10
+ pxor %xmm11,%xmm3
+ movdqu %xmm2,(%rsi)
+ pxor %xmm12,%xmm4
+ movdqu %xmm3,16(%rsi)
+ pxor %xmm13,%xmm5
+ movdqu %xmm4,32(%rsi)
+ pxor %xmm14,%xmm6
+ movq %r11,%rcx
+ movdqu %xmm5,48(%rsi)
+ pxor %xmm15,%xmm7
+ movl %r10d,%eax
+ movdqu %xmm6,64(%rsi)
+ leaq 80(%rsi),%rsi
+ subq $96,%rdx
+ ja .Lcbc_dec_loop6
+
+ movdqa %xmm7,%xmm2
+ addq $80,%rdx
+ jle .Lcbc_dec_clear_tail_collected
+ movups %xmm7,(%rsi)
+ leaq 16(%rsi),%rsi
+
.Lcbc_dec_tail:
movups (%rdi),%xmm2
- movaps %xmm2,%xmm8
- cmpq $16,%rdx
+ subq $16,%rdx
jbe .Lcbc_dec_one
movups 16(%rdi),%xmm3
- movaps %xmm3,%xmm7
- cmpq $32,%rdx
+ movaps %xmm2,%xmm11
+ subq $16,%rdx
jbe .Lcbc_dec_two
movups 32(%rdi),%xmm4
- movaps %xmm4,%xmm6
- cmpq $48,%rdx
+ movaps %xmm3,%xmm12
+ subq $16,%rdx
jbe .Lcbc_dec_three
movups 48(%rdi),%xmm5
- cmpq $64,%rdx
+ movaps %xmm4,%xmm13
+ subq $16,%rdx
jbe .Lcbc_dec_four
movups 64(%rdi),%xmm6
- cmpq $80,%rdx
- jbe .Lcbc_dec_five
-
- movups 80(%rdi),%xmm7
- cmpq $96,%rdx
- jbe .Lcbc_dec_six
-
- movups 96(%rdi),%xmm8
- movaps %xmm9,-24(%rsp)
- call _aesni_decrypt8
- movups (%rdi),%xmm1
- movups 16(%rdi),%xmm0
- xorps -24(%rsp),%xmm2
- xorps %xmm1,%xmm3
- movups 32(%rdi),%xmm1
- xorps %xmm0,%xmm4
- movups 48(%rdi),%xmm0
- xorps %xmm1,%xmm5
- movups 64(%rdi),%xmm1
- xorps %xmm0,%xmm6
- movups 80(%rdi),%xmm0
- xorps %xmm1,%xmm7
- movups 96(%rdi),%xmm9
- xorps %xmm0,%xmm8
- movups %xmm2,(%rsi)
- movups %xmm3,16(%rsi)
- movups %xmm4,32(%rsi)
- movups %xmm5,48(%rsi)
- movups %xmm6,64(%rsi)
- movups %xmm7,80(%rsi)
- leaq 96(%rsi),%rsi
- movaps %xmm8,%xmm2
- subq $112,%rdx
+ movaps %xmm5,%xmm14
+ movaps %xmm6,%xmm15
+ xorps %xmm7,%xmm7
+ call _aesni_decrypt6
+ pxor %xmm10,%xmm2
+ movaps %xmm15,%xmm10
+ pxor %xmm11,%xmm3
+ movdqu %xmm2,(%rsi)
+ pxor %xmm12,%xmm4
+ movdqu %xmm3,16(%rsi)
+ pxor %xmm3,%xmm3
+ pxor %xmm13,%xmm5
+ movdqu %xmm4,32(%rsi)
+ pxor %xmm4,%xmm4
+ pxor %xmm14,%xmm6
+ movdqu %xmm5,48(%rsi)
+ pxor %xmm5,%xmm5
+ leaq 64(%rsi),%rsi
+ movdqa %xmm6,%xmm2
+ pxor %xmm6,%xmm6
+ pxor %xmm7,%xmm7
+ subq $16,%rdx
jmp .Lcbc_dec_tail_collected
+
.align 16
.Lcbc_dec_one:
+ movaps %xmm2,%xmm11
movups (%rcx),%xmm0
movups 16(%rcx),%xmm1
leaq 32(%rcx),%rcx
xorps %xmm0,%xmm2
-.Loop_dec1_16:
+.Loop_dec1_17:
.byte 102,15,56,222,209
decl %eax
movups (%rcx),%xmm1
leaq 16(%rcx),%rcx
- jnz .Loop_dec1_16
+ jnz .Loop_dec1_17
.byte 102,15,56,223,209
- xorps %xmm9,%xmm2
- movaps %xmm8,%xmm9
- subq $16,%rdx
+ xorps %xmm10,%xmm2
+ movaps %xmm11,%xmm10
jmp .Lcbc_dec_tail_collected
.align 16
.Lcbc_dec_two:
- xorps %xmm4,%xmm4
- call _aesni_decrypt3
- xorps %xmm9,%xmm2
- xorps %xmm8,%xmm3
- movups %xmm2,(%rsi)
- movaps %xmm7,%xmm9
- movaps %xmm3,%xmm2
+ movaps %xmm3,%xmm12
+ call _aesni_decrypt2
+ pxor %xmm10,%xmm2
+ movaps %xmm12,%xmm10
+ pxor %xmm11,%xmm3
+ movdqu %xmm2,(%rsi)
+ movdqa %xmm3,%xmm2
+ pxor %xmm3,%xmm3
leaq 16(%rsi),%rsi
- subq $32,%rdx
jmp .Lcbc_dec_tail_collected
.align 16
.Lcbc_dec_three:
+ movaps %xmm4,%xmm13
call _aesni_decrypt3
- xorps %xmm9,%xmm2
- xorps %xmm8,%xmm3
- movups %xmm2,(%rsi)
- xorps %xmm7,%xmm4
- movups %xmm3,16(%rsi)
- movaps %xmm6,%xmm9
- movaps %xmm4,%xmm2
+ pxor %xmm10,%xmm2
+ movaps %xmm13,%xmm10
+ pxor %xmm11,%xmm3
+ movdqu %xmm2,(%rsi)
+ pxor %xmm12,%xmm4
+ movdqu %xmm3,16(%rsi)
+ pxor %xmm3,%xmm3
+ movdqa %xmm4,%xmm2
+ pxor %xmm4,%xmm4
leaq 32(%rsi),%rsi
- subq $48,%rdx
jmp .Lcbc_dec_tail_collected
.align 16
.Lcbc_dec_four:
+ movaps %xmm5,%xmm14
call _aesni_decrypt4
- xorps %xmm9,%xmm2
- movups 48(%rdi),%xmm9
- xorps %xmm8,%xmm3
- movups %xmm2,(%rsi)
- xorps %xmm7,%xmm4
- movups %xmm3,16(%rsi)
- xorps %xmm6,%xmm5
- movups %xmm4,32(%rsi)
- movaps %xmm5,%xmm2
+ pxor %xmm10,%xmm2
+ movaps %xmm14,%xmm10
+ pxor %xmm11,%xmm3
+ movdqu %xmm2,(%rsi)
+ pxor %xmm12,%xmm4
+ movdqu %xmm3,16(%rsi)
+ pxor %xmm3,%xmm3
+ pxor %xmm13,%xmm5
+ movdqu %xmm4,32(%rsi)
+ pxor %xmm4,%xmm4
+ movdqa %xmm5,%xmm2
+ pxor %xmm5,%xmm5
leaq 48(%rsi),%rsi
- subq $64,%rdx
- jmp .Lcbc_dec_tail_collected
-.align 16
-.Lcbc_dec_five:
- xorps %xmm7,%xmm7
- call _aesni_decrypt6
- movups 16(%rdi),%xmm1
- movups 32(%rdi),%xmm0
- xorps %xmm9,%xmm2
- xorps %xmm8,%xmm3
- xorps %xmm1,%xmm4
- movups 48(%rdi),%xmm1
- xorps %xmm0,%xmm5
- movups 64(%rdi),%xmm9
- xorps %xmm1,%xmm6
- movups %xmm2,(%rsi)
- movups %xmm3,16(%rsi)
- movups %xmm4,32(%rsi)
- movups %xmm5,48(%rsi)
- leaq 64(%rsi),%rsi
- movaps %xmm6,%xmm2
- subq $80,%rdx
- jmp .Lcbc_dec_tail_collected
-.align 16
-.Lcbc_dec_six:
- call _aesni_decrypt6
- movups 16(%rdi),%xmm1
- movups 32(%rdi),%xmm0
- xorps %xmm9,%xmm2
- xorps %xmm8,%xmm3
- xorps %xmm1,%xmm4
- movups 48(%rdi),%xmm1
- xorps %xmm0,%xmm5
- movups 64(%rdi),%xmm0
- xorps %xmm1,%xmm6
- movups 80(%rdi),%xmm9
- xorps %xmm0,%xmm7
- movups %xmm2,(%rsi)
- movups %xmm3,16(%rsi)
- movups %xmm4,32(%rsi)
- movups %xmm5,48(%rsi)
- movups %xmm6,64(%rsi)
- leaq 80(%rsi),%rsi
- movaps %xmm7,%xmm2
- subq $96,%rdx
jmp .Lcbc_dec_tail_collected
+
.align 16
+.Lcbc_dec_clear_tail_collected:
+ pxor %xmm3,%xmm3
+ pxor %xmm4,%xmm4
+ pxor %xmm5,%xmm5
+ pxor %xmm6,%xmm6
+ pxor %xmm7,%xmm7
+ pxor %xmm8,%xmm8
+ pxor %xmm9,%xmm9
.Lcbc_dec_tail_collected:
+ movups %xmm10,(%r8)
andq $15,%rdx
- movups %xmm9,(%r8)
jnz .Lcbc_dec_tail_partial
movups %xmm2,(%rsi)
+ pxor %xmm2,%xmm2
jmp .Lcbc_dec_ret
.align 16
.Lcbc_dec_tail_partial:
- movaps %xmm2,-24(%rsp)
+ movaps %xmm2,(%rsp)
+ pxor %xmm2,%xmm2
movq $16,%rcx
movq %rsi,%rdi
subq %rdx,%rcx
- leaq -24(%rsp),%rsi
-.long 0x9066A4F3
+ leaq (%rsp),%rsi
+.long 0x9066A4F3
+ movdqa %xmm2,(%rsp)
.Lcbc_dec_ret:
+ xorps %xmm0,%xmm0
+ pxor %xmm1,%xmm1
+ leaq (%rbp),%rsp
+ popq %rbp
.Lcbc_ret:
.byte 0xf3,0xc3
.size aesni_cbc_encrypt,.-aesni_cbc_encrypt
@@ -2296,7 +3121,7 @@ aesni_cbc_encrypt:
.type aesni_set_decrypt_key,@function
.align 16
aesni_set_decrypt_key:
-.byte 0x48,0x83,0xEC,0x08
+.byte 0x48,0x83,0xEC,0x08
call __aesni_set_encrypt_key
shll $4,%esi
testl %eax,%eax
@@ -2324,7 +3149,9 @@ aesni_set_decrypt_key:
movups (%rdx),%xmm0
.byte 102,15,56,219,192
+ pxor %xmm1,%xmm1
movups %xmm0,(%rdi)
+ pxor %xmm0,%xmm0
.Ldec_key_ret:
addq $8,%rsp
.byte 0xf3,0xc3
@@ -2335,15 +3162,17 @@ aesni_set_decrypt_key:
.align 16
aesni_set_encrypt_key:
__aesni_set_encrypt_key:
-.byte 0x48,0x83,0xEC,0x08
+.byte 0x48,0x83,0xEC,0x08
movq $-1,%rax
testq %rdi,%rdi
jz .Lenc_key_ret
testq %rdx,%rdx
jz .Lenc_key_ret
+ movl $268437504,%r10d
movups (%rdi),%xmm0
xorps %xmm4,%xmm4
+ andl OPENSSL_ia32cap_P+4(%rip),%r10d
leaq 16(%rdx),%rax
cmpl $256,%esi
je .L14rounds
@@ -2354,6 +3183,9 @@ __aesni_set_encrypt_key:
.L10rounds:
movl $9,%esi
+ cmpl $268435456,%r10d
+ je .L10rounds_alt
+
movups %xmm0,(%rdx)
.byte 102,15,58,223,200,1
call .Lkey_expansion_128_cold
@@ -2381,9 +3213,79 @@ __aesni_set_encrypt_key:
jmp .Lenc_key_ret
.align 16
+.L10rounds_alt:
+ movdqa .Lkey_rotate(%rip),%xmm5
+ movl $8,%r10d
+ movdqa .Lkey_rcon1(%rip),%xmm4
+ movdqa %xmm0,%xmm2
+ movdqu %xmm0,(%rdx)
+ jmp .Loop_key128
+
+.align 16
+.Loop_key128:
+.byte 102,15,56,0,197
+.byte 102,15,56,221,196
+ pslld $1,%xmm4
+ leaq 16(%rax),%rax
+
+ movdqa %xmm2,%xmm3
+ pslldq $4,%xmm2
+ pxor %xmm2,%xmm3
+ pslldq $4,%xmm2
+ pxor %xmm2,%xmm3
+ pslldq $4,%xmm2
+ pxor %xmm3,%xmm2
+
+ pxor %xmm2,%xmm0
+ movdqu %xmm0,-16(%rax)
+ movdqa %xmm0,%xmm2
+
+ decl %r10d
+ jnz .Loop_key128
+
+ movdqa .Lkey_rcon1b(%rip),%xmm4
+
+.byte 102,15,56,0,197
+.byte 102,15,56,221,196
+ pslld $1,%xmm4
+
+ movdqa %xmm2,%xmm3
+ pslldq $4,%xmm2
+ pxor %xmm2,%xmm3
+ pslldq $4,%xmm2
+ pxor %xmm2,%xmm3
+ pslldq $4,%xmm2
+ pxor %xmm3,%xmm2
+
+ pxor %xmm2,%xmm0
+ movdqu %xmm0,(%rax)
+
+ movdqa %xmm0,%xmm2
+.byte 102,15,56,0,197
+.byte 102,15,56,221,196
+
+ movdqa %xmm2,%xmm3
+ pslldq $4,%xmm2
+ pxor %xmm2,%xmm3
+ pslldq $4,%xmm2
+ pxor %xmm2,%xmm3
+ pslldq $4,%xmm2
+ pxor %xmm3,%xmm2
+
+ pxor %xmm2,%xmm0
+ movdqu %xmm0,16(%rax)
+
+ movl %esi,96(%rax)
+ xorl %eax,%eax
+ jmp .Lenc_key_ret
+
+.align 16
.L12rounds:
movq 16(%rdi),%xmm2
movl $11,%esi
+ cmpl $268435456,%r10d
+ je .L12rounds_alt
+
movups %xmm0,(%rdx)
.byte 102,15,58,223,202,1
call .Lkey_expansion_192a_cold
@@ -2407,10 +3309,54 @@ __aesni_set_encrypt_key:
jmp .Lenc_key_ret
.align 16
+.L12rounds_alt:
+ movdqa .Lkey_rotate192(%rip),%xmm5
+ movdqa .Lkey_rcon1(%rip),%xmm4
+ movl $8,%r10d
+ movdqu %xmm0,(%rdx)
+ jmp .Loop_key192
+
+.align 16
+.Loop_key192:
+ movq %xmm2,0(%rax)
+ movdqa %xmm2,%xmm1
+.byte 102,15,56,0,213
+.byte 102,15,56,221,212
+ pslld $1,%xmm4
+ leaq 24(%rax),%rax
+
+ movdqa %xmm0,%xmm3
+ pslldq $4,%xmm0
+ pxor %xmm0,%xmm3
+ pslldq $4,%xmm0
+ pxor %xmm0,%xmm3
+ pslldq $4,%xmm0
+ pxor %xmm3,%xmm0
+
+ pshufd $255,%xmm0,%xmm3
+ pxor %xmm1,%xmm3
+ pslldq $4,%xmm1
+ pxor %xmm1,%xmm3
+
+ pxor %xmm2,%xmm0
+ pxor %xmm3,%xmm2
+ movdqu %xmm0,-16(%rax)
+
+ decl %r10d
+ jnz .Loop_key192
+
+ movl %esi,32(%rax)
+ xorl %eax,%eax
+ jmp .Lenc_key_ret
+
+.align 16
.L14rounds:
movups 16(%rdi),%xmm2
movl $13,%esi
leaq 16(%rax),%rax
+ cmpl $268435456,%r10d
+ je .L14rounds_alt
+
movups %xmm0,(%rdx)
movups %xmm2,16(%rdx)
.byte 102,15,58,223,202,1
@@ -2445,9 +3391,69 @@ __aesni_set_encrypt_key:
jmp .Lenc_key_ret
.align 16
+.L14rounds_alt:
+ movdqa .Lkey_rotate(%rip),%xmm5
+ movdqa .Lkey_rcon1(%rip),%xmm4
+ movl $7,%r10d
+ movdqu %xmm0,0(%rdx)
+ movdqa %xmm2,%xmm1
+ movdqu %xmm2,16(%rdx)
+ jmp .Loop_key256
+
+.align 16
+.Loop_key256:
+.byte 102,15,56,0,213
+.byte 102,15,56,221,212
+
+ movdqa %xmm0,%xmm3
+ pslldq $4,%xmm0
+ pxor %xmm0,%xmm3
+ pslldq $4,%xmm0
+ pxor %xmm0,%xmm3
+ pslldq $4,%xmm0
+ pxor %xmm3,%xmm0
+ pslld $1,%xmm4
+
+ pxor %xmm2,%xmm0
+ movdqu %xmm0,(%rax)
+
+ decl %r10d
+ jz .Ldone_key256
+
+ pshufd $255,%xmm0,%xmm2
+ pxor %xmm3,%xmm3
+.byte 102,15,56,221,211
+
+ movdqa %xmm1,%xmm3
+ pslldq $4,%xmm1
+ pxor %xmm1,%xmm3
+ pslldq $4,%xmm1
+ pxor %xmm1,%xmm3
+ pslldq $4,%xmm1
+ pxor %xmm3,%xmm1
+
+ pxor %xmm1,%xmm2
+ movdqu %xmm2,16(%rax)
+ leaq 32(%rax),%rax
+ movdqa %xmm2,%xmm1
+
+ jmp .Loop_key256
+
+.Ldone_key256:
+ movl %esi,16(%rax)
+ xorl %eax,%eax
+ jmp .Lenc_key_ret
+
+.align 16
.Lbad_keybits:
movq $-2,%rax
.Lenc_key_ret:
+ pxor %xmm0,%xmm0
+ pxor %xmm1,%xmm1
+ pxor %xmm2,%xmm2
+ pxor %xmm3,%xmm3
+ pxor %xmm4,%xmm4
+ pxor %xmm5,%xmm5
addq $8,%rsp
.byte 0xf3,0xc3
.LSEH_end_set_encrypt_key:
@@ -2531,6 +3537,16 @@ __aesni_set_encrypt_key:
.long 1,0,0,0
.Lxts_magic:
.long 0x87,0,1,0
+.Lincrement1:
+.byte 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1
+.Lkey_rotate:
+.long 0x0c0f0e0d,0x0c0f0e0d,0x0c0f0e0d,0x0c0f0e0d
+.Lkey_rotate192:
+.long 0x04070605,0x04070605,0x04070605,0x04070605
+.Lkey_rcon1:
+.long 1,1,1,1
+.Lkey_rcon1b:
+.long 0x1b,0x1b,0x1b,0x1b
.byte 65,69,83,32,102,111,114,32,73,110,116,101,108,32,65,69,83,45,78,73,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0
.align 64
diff --git a/secure/lib/libcrypto/amd64/bsaes-x86_64.S b/secure/lib/libcrypto/amd64/bsaes-x86_64.S
index 5588ef5..be410de 100644
--- a/secure/lib/libcrypto/amd64/bsaes-x86_64.S
+++ b/secure/lib/libcrypto/amd64/bsaes-x86_64.S
@@ -14,18 +14,18 @@ _bsaes_encrypt8:
movdqa 80(%r11),%xmm7
pxor %xmm8,%xmm15
pxor %xmm8,%xmm0
-.byte 102,68,15,56,0,255
pxor %xmm8,%xmm1
-.byte 102,15,56,0,199
pxor %xmm8,%xmm2
-.byte 102,15,56,0,207
+.byte 102,68,15,56,0,255
+.byte 102,15,56,0,199
pxor %xmm8,%xmm3
-.byte 102,15,56,0,215
pxor %xmm8,%xmm4
-.byte 102,15,56,0,223
+.byte 102,15,56,0,207
+.byte 102,15,56,0,215
pxor %xmm8,%xmm5
-.byte 102,15,56,0,231
pxor %xmm8,%xmm6
+.byte 102,15,56,0,223
+.byte 102,15,56,0,231
.byte 102,15,56,0,239
.byte 102,15,56,0,247
_bsaes_encrypt8_bitslice:
@@ -122,21 +122,21 @@ _bsaes_encrypt8_bitslice:
.Lenc_loop:
pxor 0(%rax),%xmm15
pxor 16(%rax),%xmm0
-.byte 102,68,15,56,0,255
pxor 32(%rax),%xmm1
-.byte 102,15,56,0,199
pxor 48(%rax),%xmm2
-.byte 102,15,56,0,207
+.byte 102,68,15,56,0,255
+.byte 102,15,56,0,199
pxor 64(%rax),%xmm3
-.byte 102,15,56,0,215
pxor 80(%rax),%xmm4
-.byte 102,15,56,0,223
+.byte 102,15,56,0,207
+.byte 102,15,56,0,215
pxor 96(%rax),%xmm5
-.byte 102,15,56,0,231
pxor 112(%rax),%xmm6
+.byte 102,15,56,0,223
+.byte 102,15,56,0,231
.byte 102,15,56,0,239
- leaq 128(%rax),%rax
.byte 102,15,56,0,247
+ leaq 128(%rax),%rax
.Lenc_sbox:
pxor %xmm5,%xmm4
pxor %xmm0,%xmm1
@@ -486,18 +486,18 @@ _bsaes_decrypt8:
movdqa -48(%r11),%xmm7
pxor %xmm8,%xmm15
pxor %xmm8,%xmm0
-.byte 102,68,15,56,0,255
pxor %xmm8,%xmm1
-.byte 102,15,56,0,199
pxor %xmm8,%xmm2
-.byte 102,15,56,0,207
+.byte 102,68,15,56,0,255
+.byte 102,15,56,0,199
pxor %xmm8,%xmm3
-.byte 102,15,56,0,215
pxor %xmm8,%xmm4
-.byte 102,15,56,0,223
+.byte 102,15,56,0,207
+.byte 102,15,56,0,215
pxor %xmm8,%xmm5
-.byte 102,15,56,0,231
pxor %xmm8,%xmm6
+.byte 102,15,56,0,223
+.byte 102,15,56,0,231
.byte 102,15,56,0,239
.byte 102,15,56,0,247
movdqa 0(%r11),%xmm7
@@ -593,21 +593,21 @@ _bsaes_decrypt8:
.Ldec_loop:
pxor 0(%rax),%xmm15
pxor 16(%rax),%xmm0
-.byte 102,68,15,56,0,255
pxor 32(%rax),%xmm1
-.byte 102,15,56,0,199
pxor 48(%rax),%xmm2
-.byte 102,15,56,0,207
+.byte 102,68,15,56,0,255
+.byte 102,15,56,0,199
pxor 64(%rax),%xmm3
-.byte 102,15,56,0,215
pxor 80(%rax),%xmm4
-.byte 102,15,56,0,223
+.byte 102,15,56,0,207
+.byte 102,15,56,0,215
pxor 96(%rax),%xmm5
-.byte 102,15,56,0,231
pxor 112(%rax),%xmm6
+.byte 102,15,56,0,223
+.byte 102,15,56,0,231
.byte 102,15,56,0,239
- leaq 128(%rax),%rax
.byte 102,15,56,0,247
+ leaq 128(%rax),%rax
.Ldec_sbox:
pxor %xmm3,%xmm2
@@ -1285,7 +1285,7 @@ bsaes_cbc_encrypt:
leaq (%r12),%rdi
leaq 32(%rbp),%rsi
leaq (%r15),%rdx
- call asm_AES_decrypt
+ call asm_AES_decrypt
pxor 32(%rbp),%xmm14
movdqu %xmm14,(%r13)
movdqa %xmm15,%xmm14
@@ -1383,21 +1383,21 @@ bsaes_ctr32_encrypt_blocks:
movdqa -16(%r11),%xmm7
pxor %xmm8,%xmm15
pxor %xmm8,%xmm0
-.byte 102,68,15,56,0,255
pxor %xmm8,%xmm1
-.byte 102,15,56,0,199
pxor %xmm8,%xmm2
-.byte 102,15,56,0,207
+.byte 102,68,15,56,0,255
+.byte 102,15,56,0,199
pxor %xmm8,%xmm3
-.byte 102,15,56,0,215
pxor %xmm8,%xmm4
-.byte 102,15,56,0,223
+.byte 102,15,56,0,207
+.byte 102,15,56,0,215
pxor %xmm8,%xmm5
-.byte 102,15,56,0,231
pxor %xmm8,%xmm6
+.byte 102,15,56,0,223
+.byte 102,15,56,0,231
.byte 102,15,56,0,239
- leaq .LBS0(%rip),%r11
.byte 102,15,56,0,247
+ leaq .LBS0(%rip),%r11
movl %ebx,%r10d
call _bsaes_encrypt8_bitslice
@@ -1535,7 +1535,7 @@ bsaes_xts_encrypt:
leaq (%r9),%rdi
leaq 32(%rbp),%rsi
leaq (%r8),%rdx
- call asm_AES_encrypt
+ call asm_AES_encrypt
movl 240(%r15),%eax
movq %r14,%rbx
@@ -1905,7 +1905,7 @@ bsaes_xts_encrypt:
leaq 32(%rbp),%rdi
leaq 32(%rbp),%rsi
leaq (%r15),%rdx
- call asm_AES_encrypt
+ call asm_AES_encrypt
pxor 32(%rbp),%xmm15
@@ -1938,7 +1938,7 @@ bsaes_xts_encrypt:
leaq 32(%rbp),%rsi
movdqa %xmm15,32(%rbp)
leaq (%r15),%rdx
- call asm_AES_encrypt
+ call asm_AES_encrypt
pxor 32(%rbp),%xmm6
movdqu %xmm6,-16(%r13)
@@ -1987,7 +1987,7 @@ bsaes_xts_decrypt:
leaq (%r9),%rdi
leaq 32(%rbp),%rsi
leaq (%r8),%rdx
- call asm_AES_encrypt
+ call asm_AES_encrypt
movl 240(%r15),%eax
movq %r14,%rbx
@@ -2364,7 +2364,7 @@ bsaes_xts_decrypt:
leaq 32(%rbp),%rdi
leaq 32(%rbp),%rsi
leaq (%r15),%rdx
- call asm_AES_decrypt
+ call asm_AES_decrypt
pxor 32(%rbp),%xmm15
@@ -2395,7 +2395,7 @@ bsaes_xts_decrypt:
leaq 32(%rbp),%rsi
movdqa %xmm15,32(%rbp)
leaq (%r15),%rdx
- call asm_AES_decrypt
+ call asm_AES_decrypt
pxor 32(%rbp),%xmm6
movq %r13,%rdx
movdqu %xmm6,(%r13)
@@ -2416,7 +2416,7 @@ bsaes_xts_decrypt:
leaq 32(%rbp),%rsi
movdqa %xmm15,32(%rbp)
leaq (%r15),%rdx
- call asm_AES_decrypt
+ call asm_AES_decrypt
pxor 32(%rbp),%xmm5
movdqu %xmm5,(%r13)
diff --git a/secure/lib/libcrypto/amd64/cmll-x86_64.S b/secure/lib/libcrypto/amd64/cmll-x86_64.S
index f42203c..ecd33f1 100644
--- a/secure/lib/libcrypto/amd64/cmll-x86_64.S
+++ b/secure/lib/libcrypto/amd64/cmll-x86_64.S
@@ -267,7 +267,7 @@ _x86_64_Camellia_encrypt:
movl %ecx,%r10d
movl %edx,%r11d
-.byte 0xf3,0xc3
+.byte 0xf3,0xc3
.size _x86_64_Camellia_encrypt,.-_x86_64_Camellia_encrypt
@@ -537,7 +537,7 @@ _x86_64_Camellia_decrypt:
movl %eax,%r10d
movl %ebx,%r11d
-.byte 0xf3,0xc3
+.byte 0xf3,0xc3
.size _x86_64_Camellia_decrypt,.-_x86_64_Camellia_decrypt
.globl Camellia_Ekeygen
.type Camellia_Ekeygen,@function
@@ -550,7 +550,7 @@ Camellia_Ekeygen:
pushq %r15
.Lkey_prologue:
- movq %rdi,%r15
+ movl %edi,%r15d
movq %rdx,%r13
movl 0(%rsi),%r8d
@@ -1724,14 +1724,14 @@ Camellia_cbc_encrypt:
cld
movq %r12,%rsi
leaq 8+24(%rsp),%rdi
-.long 0x9066A4F3
+.long 0x9066A4F3
popfq
.Lcbc_enc_popf:
leaq 24(%rsp),%r12
leaq 16+24(%rsp),%rax
movq %rax,8(%rsp)
- jmp .Lcbc_eloop
+ jmp .Lcbc_eloop
.align 16
.LCBC_DECRYPT:
@@ -1814,7 +1814,7 @@ Camellia_cbc_encrypt:
cld
leaq 8+24(%rsp),%rsi
leaq (%r13),%rdi
-.long 0x9066A4F3
+.long 0x9066A4F3
popfq
.Lcbc_dec_popf:
diff --git a/secure/lib/libcrypto/amd64/ecp_nistz256-x86_64.S b/secure/lib/libcrypto/amd64/ecp_nistz256-x86_64.S
new file mode 100644
index 0000000..c5875d7
--- /dev/null
+++ b/secure/lib/libcrypto/amd64/ecp_nistz256-x86_64.S
@@ -0,0 +1,2005 @@
+ # $FreeBSD$
+.text
+
+
+
+.align 64
+.Lpoly:
+.quad 0xffffffffffffffff, 0x00000000ffffffff, 0x0000000000000000, 0xffffffff00000001
+
+
+.LRR:
+.quad 0x0000000000000003, 0xfffffffbffffffff, 0xfffffffffffffffe, 0x00000004fffffffd
+
+.LOne:
+.long 1,1,1,1,1,1,1,1
+.LTwo:
+.long 2,2,2,2,2,2,2,2
+.LThree:
+.long 3,3,3,3,3,3,3,3
+.LONE_mont:
+.quad 0x0000000000000001, 0xffffffff00000000, 0xffffffffffffffff, 0x00000000fffffffe
+
+.globl ecp_nistz256_mul_by_2
+.type ecp_nistz256_mul_by_2,@function
+.align 64
+ecp_nistz256_mul_by_2:
+ pushq %r12
+ pushq %r13
+
+ movq 0(%rsi),%r8
+ movq 8(%rsi),%r9
+ addq %r8,%r8
+ movq 16(%rsi),%r10
+ adcq %r9,%r9
+ movq 24(%rsi),%r11
+ leaq .Lpoly(%rip),%rsi
+ movq %r8,%rax
+ adcq %r10,%r10
+ adcq %r11,%r11
+ movq %r9,%rdx
+ sbbq %r13,%r13
+
+ subq 0(%rsi),%r8
+ movq %r10,%rcx
+ sbbq 8(%rsi),%r9
+ sbbq 16(%rsi),%r10
+ movq %r11,%r12
+ sbbq 24(%rsi),%r11
+ testq %r13,%r13
+
+ cmovzq %rax,%r8
+ cmovzq %rdx,%r9
+ movq %r8,0(%rdi)
+ cmovzq %rcx,%r10
+ movq %r9,8(%rdi)
+ cmovzq %r12,%r11
+ movq %r10,16(%rdi)
+ movq %r11,24(%rdi)
+
+ popq %r13
+ popq %r12
+ .byte 0xf3,0xc3
+.size ecp_nistz256_mul_by_2,.-ecp_nistz256_mul_by_2
+
+
+
+.globl ecp_nistz256_div_by_2
+.type ecp_nistz256_div_by_2,@function
+.align 32
+ecp_nistz256_div_by_2:
+ pushq %r12
+ pushq %r13
+
+ movq 0(%rsi),%r8
+ movq 8(%rsi),%r9
+ movq 16(%rsi),%r10
+ movq %r8,%rax
+ movq 24(%rsi),%r11
+ leaq .Lpoly(%rip),%rsi
+
+ movq %r9,%rdx
+ xorq %r13,%r13
+ addq 0(%rsi),%r8
+ movq %r10,%rcx
+ adcq 8(%rsi),%r9
+ adcq 16(%rsi),%r10
+ movq %r11,%r12
+ adcq 24(%rsi),%r11
+ adcq $0,%r13
+ xorq %rsi,%rsi
+ testq $1,%rax
+
+ cmovzq %rax,%r8
+ cmovzq %rdx,%r9
+ cmovzq %rcx,%r10
+ cmovzq %r12,%r11
+ cmovzq %rsi,%r13
+
+ movq %r9,%rax
+ shrq $1,%r8
+ shlq $63,%rax
+ movq %r10,%rdx
+ shrq $1,%r9
+ orq %rax,%r8
+ shlq $63,%rdx
+ movq %r11,%rcx
+ shrq $1,%r10
+ orq %rdx,%r9
+ shlq $63,%rcx
+ shrq $1,%r11
+ shlq $63,%r13
+ orq %rcx,%r10
+ orq %r13,%r11
+
+ movq %r8,0(%rdi)
+ movq %r9,8(%rdi)
+ movq %r10,16(%rdi)
+ movq %r11,24(%rdi)
+
+ popq %r13
+ popq %r12
+ .byte 0xf3,0xc3
+.size ecp_nistz256_div_by_2,.-ecp_nistz256_div_by_2
+
+
+
+.globl ecp_nistz256_mul_by_3
+.type ecp_nistz256_mul_by_3,@function
+.align 32
+ecp_nistz256_mul_by_3:
+ pushq %r12
+ pushq %r13
+
+ movq 0(%rsi),%r8
+ xorq %r13,%r13
+ movq 8(%rsi),%r9
+ addq %r8,%r8
+ movq 16(%rsi),%r10
+ adcq %r9,%r9
+ movq 24(%rsi),%r11
+ movq %r8,%rax
+ adcq %r10,%r10
+ adcq %r11,%r11
+ movq %r9,%rdx
+ adcq $0,%r13
+
+ subq $-1,%r8
+ movq %r10,%rcx
+ sbbq .Lpoly+8(%rip),%r9
+ sbbq $0,%r10
+ movq %r11,%r12
+ sbbq .Lpoly+24(%rip),%r11
+ testq %r13,%r13
+
+ cmovzq %rax,%r8
+ cmovzq %rdx,%r9
+ cmovzq %rcx,%r10
+ cmovzq %r12,%r11
+
+ xorq %r13,%r13
+ addq 0(%rsi),%r8
+ adcq 8(%rsi),%r9
+ movq %r8,%rax
+ adcq 16(%rsi),%r10
+ adcq 24(%rsi),%r11
+ movq %r9,%rdx
+ adcq $0,%r13
+
+ subq $-1,%r8
+ movq %r10,%rcx
+ sbbq .Lpoly+8(%rip),%r9
+ sbbq $0,%r10
+ movq %r11,%r12
+ sbbq .Lpoly+24(%rip),%r11
+ testq %r13,%r13
+
+ cmovzq %rax,%r8
+ cmovzq %rdx,%r9
+ movq %r8,0(%rdi)
+ cmovzq %rcx,%r10
+ movq %r9,8(%rdi)
+ cmovzq %r12,%r11
+ movq %r10,16(%rdi)
+ movq %r11,24(%rdi)
+
+ popq %r13
+ popq %r12
+ .byte 0xf3,0xc3
+.size ecp_nistz256_mul_by_3,.-ecp_nistz256_mul_by_3
+
+
+
+.globl ecp_nistz256_add
+.type ecp_nistz256_add,@function
+.align 32
+ecp_nistz256_add:
+ pushq %r12
+ pushq %r13
+
+ movq 0(%rsi),%r8
+ xorq %r13,%r13
+ movq 8(%rsi),%r9
+ movq 16(%rsi),%r10
+ movq 24(%rsi),%r11
+ leaq .Lpoly(%rip),%rsi
+
+ addq 0(%rdx),%r8
+ adcq 8(%rdx),%r9
+ movq %r8,%rax
+ adcq 16(%rdx),%r10
+ adcq 24(%rdx),%r11
+ movq %r9,%rdx
+ adcq $0,%r13
+
+ subq 0(%rsi),%r8
+ movq %r10,%rcx
+ sbbq 8(%rsi),%r9
+ sbbq 16(%rsi),%r10
+ movq %r11,%r12
+ sbbq 24(%rsi),%r11
+ testq %r13,%r13
+
+ cmovzq %rax,%r8
+ cmovzq %rdx,%r9
+ movq %r8,0(%rdi)
+ cmovzq %rcx,%r10
+ movq %r9,8(%rdi)
+ cmovzq %r12,%r11
+ movq %r10,16(%rdi)
+ movq %r11,24(%rdi)
+
+ popq %r13
+ popq %r12
+ .byte 0xf3,0xc3
+.size ecp_nistz256_add,.-ecp_nistz256_add
+
+
+
+.globl ecp_nistz256_sub
+.type ecp_nistz256_sub,@function
+.align 32
+ecp_nistz256_sub:
+ pushq %r12
+ pushq %r13
+
+ movq 0(%rsi),%r8
+ xorq %r13,%r13
+ movq 8(%rsi),%r9
+ movq 16(%rsi),%r10
+ movq 24(%rsi),%r11
+ leaq .Lpoly(%rip),%rsi
+
+ subq 0(%rdx),%r8
+ sbbq 8(%rdx),%r9
+ movq %r8,%rax
+ sbbq 16(%rdx),%r10
+ sbbq 24(%rdx),%r11
+ movq %r9,%rdx
+ sbbq $0,%r13
+
+ addq 0(%rsi),%r8
+ movq %r10,%rcx
+ adcq 8(%rsi),%r9
+ adcq 16(%rsi),%r10
+ movq %r11,%r12
+ adcq 24(%rsi),%r11
+ testq %r13,%r13
+
+ cmovzq %rax,%r8
+ cmovzq %rdx,%r9
+ movq %r8,0(%rdi)
+ cmovzq %rcx,%r10
+ movq %r9,8(%rdi)
+ cmovzq %r12,%r11
+ movq %r10,16(%rdi)
+ movq %r11,24(%rdi)
+
+ popq %r13
+ popq %r12
+ .byte 0xf3,0xc3
+.size ecp_nistz256_sub,.-ecp_nistz256_sub
+
+
+
+.globl ecp_nistz256_neg
+.type ecp_nistz256_neg,@function
+.align 32
+ecp_nistz256_neg:
+ pushq %r12
+ pushq %r13
+
+ xorq %r8,%r8
+ xorq %r9,%r9
+ xorq %r10,%r10
+ xorq %r11,%r11
+ xorq %r13,%r13
+
+ subq 0(%rsi),%r8
+ sbbq 8(%rsi),%r9
+ sbbq 16(%rsi),%r10
+ movq %r8,%rax
+ sbbq 24(%rsi),%r11
+ leaq .Lpoly(%rip),%rsi
+ movq %r9,%rdx
+ sbbq $0,%r13
+
+ addq 0(%rsi),%r8
+ movq %r10,%rcx
+ adcq 8(%rsi),%r9
+ adcq 16(%rsi),%r10
+ movq %r11,%r12
+ adcq 24(%rsi),%r11
+ testq %r13,%r13
+
+ cmovzq %rax,%r8
+ cmovzq %rdx,%r9
+ movq %r8,0(%rdi)
+ cmovzq %rcx,%r10
+ movq %r9,8(%rdi)
+ cmovzq %r12,%r11
+ movq %r10,16(%rdi)
+ movq %r11,24(%rdi)
+
+ popq %r13
+ popq %r12
+ .byte 0xf3,0xc3
+.size ecp_nistz256_neg,.-ecp_nistz256_neg
+
+
+
+
+.globl ecp_nistz256_to_mont
+.type ecp_nistz256_to_mont,@function
+.align 32
+ecp_nistz256_to_mont:
+ leaq .LRR(%rip),%rdx
+ jmp .Lmul_mont
+.size ecp_nistz256_to_mont,.-ecp_nistz256_to_mont
+
+
+
+
+
+
+
+.globl ecp_nistz256_mul_mont
+.type ecp_nistz256_mul_mont,@function
+.align 32
+ecp_nistz256_mul_mont:
+.Lmul_mont:
+ pushq %rbp
+ pushq %rbx
+ pushq %r12
+ pushq %r13
+ pushq %r14
+ pushq %r15
+ movq %rdx,%rbx
+ movq 0(%rdx),%rax
+ movq 0(%rsi),%r9
+ movq 8(%rsi),%r10
+ movq 16(%rsi),%r11
+ movq 24(%rsi),%r12
+
+ call __ecp_nistz256_mul_montq
+.Lmul_mont_done:
+ popq %r15
+ popq %r14
+ popq %r13
+ popq %r12
+ popq %rbx
+ popq %rbp
+ .byte 0xf3,0xc3
+.size ecp_nistz256_mul_mont,.-ecp_nistz256_mul_mont
+
+.type __ecp_nistz256_mul_montq,@function
+.align 32
+__ecp_nistz256_mul_montq:
+
+
+ movq %rax,%rbp
+ mulq %r9
+ movq .Lpoly+8(%rip),%r14
+ movq %rax,%r8
+ movq %rbp,%rax
+ movq %rdx,%r9
+
+ mulq %r10
+ movq .Lpoly+24(%rip),%r15
+ addq %rax,%r9
+ movq %rbp,%rax
+ adcq $0,%rdx
+ movq %rdx,%r10
+
+ mulq %r11
+ addq %rax,%r10
+ movq %rbp,%rax
+ adcq $0,%rdx
+ movq %rdx,%r11
+
+ mulq %r12
+ addq %rax,%r11
+ movq %r8,%rax
+ adcq $0,%rdx
+ xorq %r13,%r13
+ movq %rdx,%r12
+
+
+
+
+
+
+
+
+
+
+ movq %r8,%rbp
+ shlq $32,%r8
+ mulq %r15
+ shrq $32,%rbp
+ addq %r8,%r9
+ adcq %rbp,%r10
+ adcq %rax,%r11
+ movq 8(%rbx),%rax
+ adcq %rdx,%r12
+ adcq $0,%r13
+ xorq %r8,%r8
+
+
+
+ movq %rax,%rbp
+ mulq 0(%rsi)
+ addq %rax,%r9
+ movq %rbp,%rax
+ adcq $0,%rdx
+ movq %rdx,%rcx
+
+ mulq 8(%rsi)
+ addq %rcx,%r10
+ adcq $0,%rdx
+ addq %rax,%r10
+ movq %rbp,%rax
+ adcq $0,%rdx
+ movq %rdx,%rcx
+
+ mulq 16(%rsi)
+ addq %rcx,%r11
+ adcq $0,%rdx
+ addq %rax,%r11
+ movq %rbp,%rax
+ adcq $0,%rdx
+ movq %rdx,%rcx
+
+ mulq 24(%rsi)
+ addq %rcx,%r12
+ adcq $0,%rdx
+ addq %rax,%r12
+ movq %r9,%rax
+ adcq %rdx,%r13
+ adcq $0,%r8
+
+
+
+ movq %r9,%rbp
+ shlq $32,%r9
+ mulq %r15
+ shrq $32,%rbp
+ addq %r9,%r10
+ adcq %rbp,%r11
+ adcq %rax,%r12
+ movq 16(%rbx),%rax
+ adcq %rdx,%r13
+ adcq $0,%r8
+ xorq %r9,%r9
+
+
+
+ movq %rax,%rbp
+ mulq 0(%rsi)
+ addq %rax,%r10
+ movq %rbp,%rax
+ adcq $0,%rdx
+ movq %rdx,%rcx
+
+ mulq 8(%rsi)
+ addq %rcx,%r11
+ adcq $0,%rdx
+ addq %rax,%r11
+ movq %rbp,%rax
+ adcq $0,%rdx
+ movq %rdx,%rcx
+
+ mulq 16(%rsi)
+ addq %rcx,%r12
+ adcq $0,%rdx
+ addq %rax,%r12
+ movq %rbp,%rax
+ adcq $0,%rdx
+ movq %rdx,%rcx
+
+ mulq 24(%rsi)
+ addq %rcx,%r13
+ adcq $0,%rdx
+ addq %rax,%r13
+ movq %r10,%rax
+ adcq %rdx,%r8
+ adcq $0,%r9
+
+
+
+ movq %r10,%rbp
+ shlq $32,%r10
+ mulq %r15
+ shrq $32,%rbp
+ addq %r10,%r11
+ adcq %rbp,%r12
+ adcq %rax,%r13
+ movq 24(%rbx),%rax
+ adcq %rdx,%r8
+ adcq $0,%r9
+ xorq %r10,%r10
+
+
+
+ movq %rax,%rbp
+ mulq 0(%rsi)
+ addq %rax,%r11
+ movq %rbp,%rax
+ adcq $0,%rdx
+ movq %rdx,%rcx
+
+ mulq 8(%rsi)
+ addq %rcx,%r12
+ adcq $0,%rdx
+ addq %rax,%r12
+ movq %rbp,%rax
+ adcq $0,%rdx
+ movq %rdx,%rcx
+
+ mulq 16(%rsi)
+ addq %rcx,%r13
+ adcq $0,%rdx
+ addq %rax,%r13
+ movq %rbp,%rax
+ adcq $0,%rdx
+ movq %rdx,%rcx
+
+ mulq 24(%rsi)
+ addq %rcx,%r8
+ adcq $0,%rdx
+ addq %rax,%r8
+ movq %r11,%rax
+ adcq %rdx,%r9
+ adcq $0,%r10
+
+
+
+ movq %r11,%rbp
+ shlq $32,%r11
+ mulq %r15
+ shrq $32,%rbp
+ addq %r11,%r12
+ adcq %rbp,%r13
+ movq %r12,%rcx
+ adcq %rax,%r8
+ adcq %rdx,%r9
+ movq %r13,%rbp
+ adcq $0,%r10
+
+
+
+ subq $-1,%r12
+ movq %r8,%rbx
+ sbbq %r14,%r13
+ sbbq $0,%r8
+ movq %r9,%rdx
+ sbbq %r15,%r9
+ sbbq $0,%r10
+
+ cmovcq %rcx,%r12
+ cmovcq %rbp,%r13
+ movq %r12,0(%rdi)
+ cmovcq %rbx,%r8
+ movq %r13,8(%rdi)
+ cmovcq %rdx,%r9
+ movq %r8,16(%rdi)
+ movq %r9,24(%rdi)
+
+ .byte 0xf3,0xc3
+.size __ecp_nistz256_mul_montq,.-__ecp_nistz256_mul_montq
+
+
+
+
+
+
+
+
+.globl ecp_nistz256_sqr_mont
+.type ecp_nistz256_sqr_mont,@function
+.align 32
+ecp_nistz256_sqr_mont:
+ pushq %rbp
+ pushq %rbx
+ pushq %r12
+ pushq %r13
+ pushq %r14
+ pushq %r15
+ movq 0(%rsi),%rax
+ movq 8(%rsi),%r14
+ movq 16(%rsi),%r15
+ movq 24(%rsi),%r8
+
+ call __ecp_nistz256_sqr_montq
+.Lsqr_mont_done:
+ popq %r15
+ popq %r14
+ popq %r13
+ popq %r12
+ popq %rbx
+ popq %rbp
+ .byte 0xf3,0xc3
+.size ecp_nistz256_sqr_mont,.-ecp_nistz256_sqr_mont
+
+.type __ecp_nistz256_sqr_montq,@function
+.align 32
+__ecp_nistz256_sqr_montq:
+ movq %rax,%r13
+ mulq %r14
+ movq %rax,%r9
+ movq %r15,%rax
+ movq %rdx,%r10
+
+ mulq %r13
+ addq %rax,%r10
+ movq %r8,%rax
+ adcq $0,%rdx
+ movq %rdx,%r11
+
+ mulq %r13
+ addq %rax,%r11
+ movq %r15,%rax
+ adcq $0,%rdx
+ movq %rdx,%r12
+
+
+ mulq %r14
+ addq %rax,%r11
+ movq %r8,%rax
+ adcq $0,%rdx
+ movq %rdx,%rbp
+
+ mulq %r14
+ addq %rax,%r12
+ movq %r8,%rax
+ adcq $0,%rdx
+ addq %rbp,%r12
+ movq %rdx,%r13
+ adcq $0,%r13
+
+
+ mulq %r15
+ xorq %r15,%r15
+ addq %rax,%r13
+ movq 0(%rsi),%rax
+ movq %rdx,%r14
+ adcq $0,%r14
+
+ addq %r9,%r9
+ adcq %r10,%r10
+ adcq %r11,%r11
+ adcq %r12,%r12
+ adcq %r13,%r13
+ adcq %r14,%r14
+ adcq $0,%r15
+
+ mulq %rax
+ movq %rax,%r8
+ movq 8(%rsi),%rax
+ movq %rdx,%rcx
+
+ mulq %rax
+ addq %rcx,%r9
+ adcq %rax,%r10
+ movq 16(%rsi),%rax
+ adcq $0,%rdx
+ movq %rdx,%rcx
+
+ mulq %rax
+ addq %rcx,%r11
+ adcq %rax,%r12
+ movq 24(%rsi),%rax
+ adcq $0,%rdx
+ movq %rdx,%rcx
+
+ mulq %rax
+ addq %rcx,%r13
+ adcq %rax,%r14
+ movq %r8,%rax
+ adcq %rdx,%r15
+
+ movq .Lpoly+8(%rip),%rsi
+ movq .Lpoly+24(%rip),%rbp
+
+
+
+
+ movq %r8,%rcx
+ shlq $32,%r8
+ mulq %rbp
+ shrq $32,%rcx
+ addq %r8,%r9
+ adcq %rcx,%r10
+ adcq %rax,%r11
+ movq %r9,%rax
+ adcq $0,%rdx
+
+
+
+ movq %r9,%rcx
+ shlq $32,%r9
+ movq %rdx,%r8
+ mulq %rbp
+ shrq $32,%rcx
+ addq %r9,%r10
+ adcq %rcx,%r11
+ adcq %rax,%r8
+ movq %r10,%rax
+ adcq $0,%rdx
+
+
+
+ movq %r10,%rcx
+ shlq $32,%r10
+ movq %rdx,%r9
+ mulq %rbp
+ shrq $32,%rcx
+ addq %r10,%r11
+ adcq %rcx,%r8
+ adcq %rax,%r9
+ movq %r11,%rax
+ adcq $0,%rdx
+
+
+
+ movq %r11,%rcx
+ shlq $32,%r11
+ movq %rdx,%r10
+ mulq %rbp
+ shrq $32,%rcx
+ addq %r11,%r8
+ adcq %rcx,%r9
+ adcq %rax,%r10
+ adcq $0,%rdx
+ xorq %r11,%r11
+
+
+
+ addq %r8,%r12
+ adcq %r9,%r13
+ movq %r12,%r8
+ adcq %r10,%r14
+ adcq %rdx,%r15
+ movq %r13,%r9
+ adcq $0,%r11
+
+ subq $-1,%r12
+ movq %r14,%r10
+ sbbq %rsi,%r13
+ sbbq $0,%r14
+ movq %r15,%rcx
+ sbbq %rbp,%r15
+ sbbq $0,%r11
+
+ cmovcq %r8,%r12
+ cmovcq %r9,%r13
+ movq %r12,0(%rdi)
+ cmovcq %r10,%r14
+ movq %r13,8(%rdi)
+ cmovcq %rcx,%r15
+ movq %r14,16(%rdi)
+ movq %r15,24(%rdi)
+
+ .byte 0xf3,0xc3
+.size __ecp_nistz256_sqr_montq,.-__ecp_nistz256_sqr_montq
+
+
+
+
+
+
+.globl ecp_nistz256_from_mont
+.type ecp_nistz256_from_mont,@function
+.align 32
+ecp_nistz256_from_mont:
+ pushq %r12
+ pushq %r13
+
+ movq 0(%rsi),%rax
+ movq .Lpoly+24(%rip),%r13
+ movq 8(%rsi),%r9
+ movq 16(%rsi),%r10
+ movq 24(%rsi),%r11
+ movq %rax,%r8
+ movq .Lpoly+8(%rip),%r12
+
+
+
+ movq %rax,%rcx
+ shlq $32,%r8
+ mulq %r13
+ shrq $32,%rcx
+ addq %r8,%r9
+ adcq %rcx,%r10
+ adcq %rax,%r11
+ movq %r9,%rax
+ adcq $0,%rdx
+
+
+
+ movq %r9,%rcx
+ shlq $32,%r9
+ movq %rdx,%r8
+ mulq %r13
+ shrq $32,%rcx
+ addq %r9,%r10
+ adcq %rcx,%r11
+ adcq %rax,%r8
+ movq %r10,%rax
+ adcq $0,%rdx
+
+
+
+ movq %r10,%rcx
+ shlq $32,%r10
+ movq %rdx,%r9
+ mulq %r13
+ shrq $32,%rcx
+ addq %r10,%r11
+ adcq %rcx,%r8
+ adcq %rax,%r9
+ movq %r11,%rax
+ adcq $0,%rdx
+
+
+
+ movq %r11,%rcx
+ shlq $32,%r11
+ movq %rdx,%r10
+ mulq %r13
+ shrq $32,%rcx
+ addq %r11,%r8
+ adcq %rcx,%r9
+ movq %r8,%rcx
+ adcq %rax,%r10
+ movq %r9,%rsi
+ adcq $0,%rdx
+
+
+
+ subq $-1,%r8
+ movq %r10,%rax
+ sbbq %r12,%r9
+ sbbq $0,%r10
+ movq %rdx,%r11
+ sbbq %r13,%rdx
+ sbbq %r13,%r13
+
+ cmovnzq %rcx,%r8
+ cmovnzq %rsi,%r9
+ movq %r8,0(%rdi)
+ cmovnzq %rax,%r10
+ movq %r9,8(%rdi)
+ cmovzq %rdx,%r11
+ movq %r10,16(%rdi)
+ movq %r11,24(%rdi)
+
+ popq %r13
+ popq %r12
+ .byte 0xf3,0xc3
+.size ecp_nistz256_from_mont,.-ecp_nistz256_from_mont
+
+
+.globl ecp_nistz256_select_w5
+.type ecp_nistz256_select_w5,@function
+.align 32
+ecp_nistz256_select_w5:
+ movdqa .LOne(%rip),%xmm0
+ movd %edx,%xmm1
+
+ pxor %xmm2,%xmm2
+ pxor %xmm3,%xmm3
+ pxor %xmm4,%xmm4
+ pxor %xmm5,%xmm5
+ pxor %xmm6,%xmm6
+ pxor %xmm7,%xmm7
+
+ movdqa %xmm0,%xmm8
+ pshufd $0,%xmm1,%xmm1
+
+ movq $16,%rax
+.Lselect_loop_sse_w5:
+
+ movdqa %xmm8,%xmm15
+ paddd %xmm0,%xmm8
+ pcmpeqd %xmm1,%xmm15
+
+ movdqa 0(%rsi),%xmm9
+ movdqa 16(%rsi),%xmm10
+ movdqa 32(%rsi),%xmm11
+ movdqa 48(%rsi),%xmm12
+ movdqa 64(%rsi),%xmm13
+ movdqa 80(%rsi),%xmm14
+ leaq 96(%rsi),%rsi
+
+ pand %xmm15,%xmm9
+ pand %xmm15,%xmm10
+ por %xmm9,%xmm2
+ pand %xmm15,%xmm11
+ por %xmm10,%xmm3
+ pand %xmm15,%xmm12
+ por %xmm11,%xmm4
+ pand %xmm15,%xmm13
+ por %xmm12,%xmm5
+ pand %xmm15,%xmm14
+ por %xmm13,%xmm6
+ por %xmm14,%xmm7
+
+ decq %rax
+ jnz .Lselect_loop_sse_w5
+
+ movdqu %xmm2,0(%rdi)
+ movdqu %xmm3,16(%rdi)
+ movdqu %xmm4,32(%rdi)
+ movdqu %xmm5,48(%rdi)
+ movdqu %xmm6,64(%rdi)
+ movdqu %xmm7,80(%rdi)
+ .byte 0xf3,0xc3
+.size ecp_nistz256_select_w5,.-ecp_nistz256_select_w5
+
+
+
+.globl ecp_nistz256_select_w7
+.type ecp_nistz256_select_w7,@function
+.align 32
+ecp_nistz256_select_w7:
+ movdqa .LOne(%rip),%xmm8
+ movd %edx,%xmm1
+
+ pxor %xmm2,%xmm2
+ pxor %xmm3,%xmm3
+ pxor %xmm4,%xmm4
+ pxor %xmm5,%xmm5
+
+ movdqa %xmm8,%xmm0
+ pshufd $0,%xmm1,%xmm1
+ movq $64,%rax
+
+.Lselect_loop_sse_w7:
+ movdqa %xmm8,%xmm15
+ paddd %xmm0,%xmm8
+ movdqa 0(%rsi),%xmm9
+ movdqa 16(%rsi),%xmm10
+ pcmpeqd %xmm1,%xmm15
+ movdqa 32(%rsi),%xmm11
+ movdqa 48(%rsi),%xmm12
+ leaq 64(%rsi),%rsi
+
+ pand %xmm15,%xmm9
+ pand %xmm15,%xmm10
+ por %xmm9,%xmm2
+ pand %xmm15,%xmm11
+ por %xmm10,%xmm3
+ pand %xmm15,%xmm12
+ por %xmm11,%xmm4
+ prefetcht0 255(%rsi)
+ por %xmm12,%xmm5
+
+ decq %rax
+ jnz .Lselect_loop_sse_w7
+
+ movdqu %xmm2,0(%rdi)
+ movdqu %xmm3,16(%rdi)
+ movdqu %xmm4,32(%rdi)
+ movdqu %xmm5,48(%rdi)
+ .byte 0xf3,0xc3
+.size ecp_nistz256_select_w7,.-ecp_nistz256_select_w7
+.globl ecp_nistz256_avx2_select_w7
+.type ecp_nistz256_avx2_select_w7,@function
+.align 32
+ecp_nistz256_avx2_select_w7:
+.byte 0x0f,0x0b
+ .byte 0xf3,0xc3
+.size ecp_nistz256_avx2_select_w7,.-ecp_nistz256_avx2_select_w7
+.type __ecp_nistz256_add_toq,@function
+.align 32
+__ecp_nistz256_add_toq:
+ addq 0(%rbx),%r12
+ adcq 8(%rbx),%r13
+ movq %r12,%rax
+ adcq 16(%rbx),%r8
+ adcq 24(%rbx),%r9
+ movq %r13,%rbp
+ sbbq %r11,%r11
+
+ subq $-1,%r12
+ movq %r8,%rcx
+ sbbq %r14,%r13
+ sbbq $0,%r8
+ movq %r9,%r10
+ sbbq %r15,%r9
+ testq %r11,%r11
+
+ cmovzq %rax,%r12
+ cmovzq %rbp,%r13
+ movq %r12,0(%rdi)
+ cmovzq %rcx,%r8
+ movq %r13,8(%rdi)
+ cmovzq %r10,%r9
+ movq %r8,16(%rdi)
+ movq %r9,24(%rdi)
+
+ .byte 0xf3,0xc3
+.size __ecp_nistz256_add_toq,.-__ecp_nistz256_add_toq
+
+.type __ecp_nistz256_sub_fromq,@function
+.align 32
+__ecp_nistz256_sub_fromq:
+ subq 0(%rbx),%r12
+ sbbq 8(%rbx),%r13
+ movq %r12,%rax
+ sbbq 16(%rbx),%r8
+ sbbq 24(%rbx),%r9
+ movq %r13,%rbp
+ sbbq %r11,%r11
+
+ addq $-1,%r12
+ movq %r8,%rcx
+ adcq %r14,%r13
+ adcq $0,%r8
+ movq %r9,%r10
+ adcq %r15,%r9
+ testq %r11,%r11
+
+ cmovzq %rax,%r12
+ cmovzq %rbp,%r13
+ movq %r12,0(%rdi)
+ cmovzq %rcx,%r8
+ movq %r13,8(%rdi)
+ cmovzq %r10,%r9
+ movq %r8,16(%rdi)
+ movq %r9,24(%rdi)
+
+ .byte 0xf3,0xc3
+.size __ecp_nistz256_sub_fromq,.-__ecp_nistz256_sub_fromq
+
+.type __ecp_nistz256_subq,@function
+.align 32
+__ecp_nistz256_subq:
+ subq %r12,%rax
+ sbbq %r13,%rbp
+ movq %rax,%r12
+ sbbq %r8,%rcx
+ sbbq %r9,%r10
+ movq %rbp,%r13
+ sbbq %r11,%r11
+
+ addq $-1,%rax
+ movq %rcx,%r8
+ adcq %r14,%rbp
+ adcq $0,%rcx
+ movq %r10,%r9
+ adcq %r15,%r10
+ testq %r11,%r11
+
+ cmovnzq %rax,%r12
+ cmovnzq %rbp,%r13
+ cmovnzq %rcx,%r8
+ cmovnzq %r10,%r9
+
+ .byte 0xf3,0xc3
+.size __ecp_nistz256_subq,.-__ecp_nistz256_subq
+
+.type __ecp_nistz256_mul_by_2q,@function
+.align 32
+__ecp_nistz256_mul_by_2q:
+ addq %r12,%r12
+ adcq %r13,%r13
+ movq %r12,%rax
+ adcq %r8,%r8
+ adcq %r9,%r9
+ movq %r13,%rbp
+ sbbq %r11,%r11
+
+ subq $-1,%r12
+ movq %r8,%rcx
+ sbbq %r14,%r13
+ sbbq $0,%r8
+ movq %r9,%r10
+ sbbq %r15,%r9
+ testq %r11,%r11
+
+ cmovzq %rax,%r12
+ cmovzq %rbp,%r13
+ movq %r12,0(%rdi)
+ cmovzq %rcx,%r8
+ movq %r13,8(%rdi)
+ cmovzq %r10,%r9
+ movq %r8,16(%rdi)
+ movq %r9,24(%rdi)
+
+ .byte 0xf3,0xc3
+.size __ecp_nistz256_mul_by_2q,.-__ecp_nistz256_mul_by_2q
+.globl ecp_nistz256_point_double
+.type ecp_nistz256_point_double,@function
+.align 32
+ecp_nistz256_point_double:
+ pushq %rbp
+ pushq %rbx
+ pushq %r12
+ pushq %r13
+ pushq %r14
+ pushq %r15
+ subq $160+8,%rsp
+
+ movdqu 0(%rsi),%xmm0
+ movq %rsi,%rbx
+ movdqu 16(%rsi),%xmm1
+ movq 32+0(%rsi),%r12
+ movq 32+8(%rsi),%r13
+ movq 32+16(%rsi),%r8
+ movq 32+24(%rsi),%r9
+ movq .Lpoly+8(%rip),%r14
+ movq .Lpoly+24(%rip),%r15
+ movdqa %xmm0,96(%rsp)
+ movdqa %xmm1,96+16(%rsp)
+ leaq 32(%rdi),%r10
+ leaq 64(%rdi),%r11
+.byte 102,72,15,110,199
+.byte 102,73,15,110,202
+.byte 102,73,15,110,211
+
+ leaq 0(%rsp),%rdi
+ call __ecp_nistz256_mul_by_2q
+
+ movq 64+0(%rsi),%rax
+ movq 64+8(%rsi),%r14
+ movq 64+16(%rsi),%r15
+ movq 64+24(%rsi),%r8
+ leaq 64-0(%rsi),%rsi
+ leaq 64(%rsp),%rdi
+ call __ecp_nistz256_sqr_montq
+
+ movq 0+0(%rsp),%rax
+ movq 8+0(%rsp),%r14
+ leaq 0+0(%rsp),%rsi
+ movq 16+0(%rsp),%r15
+ movq 24+0(%rsp),%r8
+ leaq 0(%rsp),%rdi
+ call __ecp_nistz256_sqr_montq
+
+ movq 32(%rbx),%rax
+ movq 64+0(%rbx),%r9
+ movq 64+8(%rbx),%r10
+ movq 64+16(%rbx),%r11
+ movq 64+24(%rbx),%r12
+ leaq 64-0(%rbx),%rsi
+ leaq 32(%rbx),%rbx
+.byte 102,72,15,126,215
+ call __ecp_nistz256_mul_montq
+ call __ecp_nistz256_mul_by_2q
+
+ movq 96+0(%rsp),%r12
+ movq 96+8(%rsp),%r13
+ leaq 64(%rsp),%rbx
+ movq 96+16(%rsp),%r8
+ movq 96+24(%rsp),%r9
+ leaq 32(%rsp),%rdi
+ call __ecp_nistz256_add_toq
+
+ movq 96+0(%rsp),%r12
+ movq 96+8(%rsp),%r13
+ leaq 64(%rsp),%rbx
+ movq 96+16(%rsp),%r8
+ movq 96+24(%rsp),%r9
+ leaq 64(%rsp),%rdi
+ call __ecp_nistz256_sub_fromq
+
+ movq 0+0(%rsp),%rax
+ movq 8+0(%rsp),%r14
+ leaq 0+0(%rsp),%rsi
+ movq 16+0(%rsp),%r15
+ movq 24+0(%rsp),%r8
+.byte 102,72,15,126,207
+ call __ecp_nistz256_sqr_montq
+ xorq %r9,%r9
+ movq %r12,%rax
+ addq $-1,%r12
+ movq %r13,%r10
+ adcq %rsi,%r13
+ movq %r14,%rcx
+ adcq $0,%r14
+ movq %r15,%r8
+ adcq %rbp,%r15
+ adcq $0,%r9
+ xorq %rsi,%rsi
+ testq $1,%rax
+
+ cmovzq %rax,%r12
+ cmovzq %r10,%r13
+ cmovzq %rcx,%r14
+ cmovzq %r8,%r15
+ cmovzq %rsi,%r9
+
+ movq %r13,%rax
+ shrq $1,%r12
+ shlq $63,%rax
+ movq %r14,%r10
+ shrq $1,%r13
+ orq %rax,%r12
+ shlq $63,%r10
+ movq %r15,%rcx
+ shrq $1,%r14
+ orq %r10,%r13
+ shlq $63,%rcx
+ movq %r12,0(%rdi)
+ shrq $1,%r15
+ movq %r13,8(%rdi)
+ shlq $63,%r9
+ orq %rcx,%r14
+ orq %r9,%r15
+ movq %r14,16(%rdi)
+ movq %r15,24(%rdi)
+ movq 64(%rsp),%rax
+ leaq 64(%rsp),%rbx
+ movq 0+32(%rsp),%r9
+ movq 8+32(%rsp),%r10
+ leaq 0+32(%rsp),%rsi
+ movq 16+32(%rsp),%r11
+ movq 24+32(%rsp),%r12
+ leaq 32(%rsp),%rdi
+ call __ecp_nistz256_mul_montq
+
+ leaq 128(%rsp),%rdi
+ call __ecp_nistz256_mul_by_2q
+
+ leaq 32(%rsp),%rbx
+ leaq 32(%rsp),%rdi
+ call __ecp_nistz256_add_toq
+
+ movq 96(%rsp),%rax
+ leaq 96(%rsp),%rbx
+ movq 0+0(%rsp),%r9
+ movq 8+0(%rsp),%r10
+ leaq 0+0(%rsp),%rsi
+ movq 16+0(%rsp),%r11
+ movq 24+0(%rsp),%r12
+ leaq 0(%rsp),%rdi
+ call __ecp_nistz256_mul_montq
+
+ leaq 128(%rsp),%rdi
+ call __ecp_nistz256_mul_by_2q
+
+ movq 0+32(%rsp),%rax
+ movq 8+32(%rsp),%r14
+ leaq 0+32(%rsp),%rsi
+ movq 16+32(%rsp),%r15
+ movq 24+32(%rsp),%r8
+.byte 102,72,15,126,199
+ call __ecp_nistz256_sqr_montq
+
+ leaq 128(%rsp),%rbx
+ movq %r14,%r8
+ movq %r15,%r9
+ movq %rsi,%r14
+ movq %rbp,%r15
+ call __ecp_nistz256_sub_fromq
+
+ movq 0+0(%rsp),%rax
+ movq 0+8(%rsp),%rbp
+ movq 0+16(%rsp),%rcx
+ movq 0+24(%rsp),%r10
+ leaq 0(%rsp),%rdi
+ call __ecp_nistz256_subq
+
+ movq 32(%rsp),%rax
+ leaq 32(%rsp),%rbx
+ movq %r12,%r14
+ xorl %ecx,%ecx
+ movq %r12,0+0(%rsp)
+ movq %r13,%r10
+ movq %r13,0+8(%rsp)
+ cmovzq %r8,%r11
+ movq %r8,0+16(%rsp)
+ leaq 0-0(%rsp),%rsi
+ cmovzq %r9,%r12
+ movq %r9,0+24(%rsp)
+ movq %r14,%r9
+ leaq 0(%rsp),%rdi
+ call __ecp_nistz256_mul_montq
+
+.byte 102,72,15,126,203
+.byte 102,72,15,126,207
+ call __ecp_nistz256_sub_fromq
+
+ addq $160+8,%rsp
+ popq %r15
+ popq %r14
+ popq %r13
+ popq %r12
+ popq %rbx
+ popq %rbp
+ .byte 0xf3,0xc3
+.size ecp_nistz256_point_double,.-ecp_nistz256_point_double
+.globl ecp_nistz256_point_add
+.type ecp_nistz256_point_add,@function
+.align 32
+ecp_nistz256_point_add:
+ pushq %rbp
+ pushq %rbx
+ pushq %r12
+ pushq %r13
+ pushq %r14
+ pushq %r15
+ subq $576+8,%rsp
+
+ movdqu 0(%rsi),%xmm0
+ movdqu 16(%rsi),%xmm1
+ movdqu 32(%rsi),%xmm2
+ movdqu 48(%rsi),%xmm3
+ movdqu 64(%rsi),%xmm4
+ movdqu 80(%rsi),%xmm5
+ movq %rsi,%rbx
+ movq %rdx,%rsi
+ movdqa %xmm0,384(%rsp)
+ movdqa %xmm1,384+16(%rsp)
+ por %xmm0,%xmm1
+ movdqa %xmm2,416(%rsp)
+ movdqa %xmm3,416+16(%rsp)
+ por %xmm2,%xmm3
+ movdqa %xmm4,448(%rsp)
+ movdqa %xmm5,448+16(%rsp)
+ por %xmm1,%xmm3
+
+ movdqu 0(%rsi),%xmm0
+ pshufd $177,%xmm3,%xmm5
+ movdqu 16(%rsi),%xmm1
+ movdqu 32(%rsi),%xmm2
+ por %xmm3,%xmm5
+ movdqu 48(%rsi),%xmm3
+ movq 64+0(%rsi),%rax
+ movq 64+8(%rsi),%r14
+ movq 64+16(%rsi),%r15
+ movq 64+24(%rsi),%r8
+ movdqa %xmm0,480(%rsp)
+ pshufd $30,%xmm5,%xmm4
+ movdqa %xmm1,480+16(%rsp)
+ por %xmm0,%xmm1
+.byte 102,72,15,110,199
+ movdqa %xmm2,512(%rsp)
+ movdqa %xmm3,512+16(%rsp)
+ por %xmm2,%xmm3
+ por %xmm4,%xmm5
+ pxor %xmm4,%xmm4
+ por %xmm1,%xmm3
+
+ leaq 64-0(%rsi),%rsi
+ movq %rax,544+0(%rsp)
+ movq %r14,544+8(%rsp)
+ movq %r15,544+16(%rsp)
+ movq %r8,544+24(%rsp)
+ leaq 96(%rsp),%rdi
+ call __ecp_nistz256_sqr_montq
+
+ pcmpeqd %xmm4,%xmm5
+ pshufd $177,%xmm3,%xmm4
+ por %xmm3,%xmm4
+ pshufd $0,%xmm5,%xmm5
+ pshufd $30,%xmm4,%xmm3
+ por %xmm3,%xmm4
+ pxor %xmm3,%xmm3
+ pcmpeqd %xmm3,%xmm4
+ pshufd $0,%xmm4,%xmm4
+ movq 64+0(%rbx),%rax
+ movq 64+8(%rbx),%r14
+ movq 64+16(%rbx),%r15
+ movq 64+24(%rbx),%r8
+
+ leaq 64-0(%rbx),%rsi
+ leaq 32(%rsp),%rdi
+ call __ecp_nistz256_sqr_montq
+
+ movq 544(%rsp),%rax
+ leaq 544(%rsp),%rbx
+ movq 0+96(%rsp),%r9
+ movq 8+96(%rsp),%r10
+ leaq 0+96(%rsp),%rsi
+ movq 16+96(%rsp),%r11
+ movq 24+96(%rsp),%r12
+ leaq 224(%rsp),%rdi
+ call __ecp_nistz256_mul_montq
+
+ movq 448(%rsp),%rax
+ leaq 448(%rsp),%rbx
+ movq 0+32(%rsp),%r9
+ movq 8+32(%rsp),%r10
+ leaq 0+32(%rsp),%rsi
+ movq 16+32(%rsp),%r11
+ movq 24+32(%rsp),%r12
+ leaq 256(%rsp),%rdi
+ call __ecp_nistz256_mul_montq
+
+ movq 416(%rsp),%rax
+ leaq 416(%rsp),%rbx
+ movq 0+224(%rsp),%r9
+ movq 8+224(%rsp),%r10
+ leaq 0+224(%rsp),%rsi
+ movq 16+224(%rsp),%r11
+ movq 24+224(%rsp),%r12
+ leaq 224(%rsp),%rdi
+ call __ecp_nistz256_mul_montq
+
+ movq 512(%rsp),%rax
+ leaq 512(%rsp),%rbx
+ movq 0+256(%rsp),%r9
+ movq 8+256(%rsp),%r10
+ leaq 0+256(%rsp),%rsi
+ movq 16+256(%rsp),%r11
+ movq 24+256(%rsp),%r12
+ leaq 256(%rsp),%rdi
+ call __ecp_nistz256_mul_montq
+
+ leaq 224(%rsp),%rbx
+ leaq 64(%rsp),%rdi
+ call __ecp_nistz256_sub_fromq
+
+ orq %r13,%r12
+ movdqa %xmm4,%xmm2
+ orq %r8,%r12
+ orq %r9,%r12
+ por %xmm5,%xmm2
+.byte 102,73,15,110,220
+
+ movq 384(%rsp),%rax
+ leaq 384(%rsp),%rbx
+ movq 0+96(%rsp),%r9
+ movq 8+96(%rsp),%r10
+ leaq 0+96(%rsp),%rsi
+ movq 16+96(%rsp),%r11
+ movq 24+96(%rsp),%r12
+ leaq 160(%rsp),%rdi
+ call __ecp_nistz256_mul_montq
+
+ movq 480(%rsp),%rax
+ leaq 480(%rsp),%rbx
+ movq 0+32(%rsp),%r9
+ movq 8+32(%rsp),%r10
+ leaq 0+32(%rsp),%rsi
+ movq 16+32(%rsp),%r11
+ movq 24+32(%rsp),%r12
+ leaq 192(%rsp),%rdi
+ call __ecp_nistz256_mul_montq
+
+ leaq 160(%rsp),%rbx
+ leaq 0(%rsp),%rdi
+ call __ecp_nistz256_sub_fromq
+
+ orq %r13,%r12
+ orq %r8,%r12
+ orq %r9,%r12
+
+.byte 0x3e
+ jnz .Ladd_proceedq
+.byte 102,73,15,126,208
+.byte 102,73,15,126,217
+ testq %r8,%r8
+ jnz .Ladd_proceedq
+ testq %r9,%r9
+ jz .Ladd_proceedq
+
+.byte 102,72,15,126,199
+ pxor %xmm0,%xmm0
+ movdqu %xmm0,0(%rdi)
+ movdqu %xmm0,16(%rdi)
+ movdqu %xmm0,32(%rdi)
+ movdqu %xmm0,48(%rdi)
+ movdqu %xmm0,64(%rdi)
+ movdqu %xmm0,80(%rdi)
+ jmp .Ladd_doneq
+
+.align 32
+.Ladd_proceedq:
+ movq 0+64(%rsp),%rax
+ movq 8+64(%rsp),%r14
+ leaq 0+64(%rsp),%rsi
+ movq 16+64(%rsp),%r15
+ movq 24+64(%rsp),%r8
+ leaq 96(%rsp),%rdi
+ call __ecp_nistz256_sqr_montq
+
+ movq 448(%rsp),%rax
+ leaq 448(%rsp),%rbx
+ movq 0+0(%rsp),%r9
+ movq 8+0(%rsp),%r10
+ leaq 0+0(%rsp),%rsi
+ movq 16+0(%rsp),%r11
+ movq 24+0(%rsp),%r12
+ leaq 352(%rsp),%rdi
+ call __ecp_nistz256_mul_montq
+
+ movq 0+0(%rsp),%rax
+ movq 8+0(%rsp),%r14
+ leaq 0+0(%rsp),%rsi
+ movq 16+0(%rsp),%r15
+ movq 24+0(%rsp),%r8
+ leaq 32(%rsp),%rdi
+ call __ecp_nistz256_sqr_montq
+
+ movq 544(%rsp),%rax
+ leaq 544(%rsp),%rbx
+ movq 0+352(%rsp),%r9
+ movq 8+352(%rsp),%r10
+ leaq 0+352(%rsp),%rsi
+ movq 16+352(%rsp),%r11
+ movq 24+352(%rsp),%r12
+ leaq 352(%rsp),%rdi
+ call __ecp_nistz256_mul_montq
+
+ movq 0(%rsp),%rax
+ leaq 0(%rsp),%rbx
+ movq 0+32(%rsp),%r9
+ movq 8+32(%rsp),%r10
+ leaq 0+32(%rsp),%rsi
+ movq 16+32(%rsp),%r11
+ movq 24+32(%rsp),%r12
+ leaq 128(%rsp),%rdi
+ call __ecp_nistz256_mul_montq
+
+ movq 160(%rsp),%rax
+ leaq 160(%rsp),%rbx
+ movq 0+32(%rsp),%r9
+ movq 8+32(%rsp),%r10
+ leaq 0+32(%rsp),%rsi
+ movq 16+32(%rsp),%r11
+ movq 24+32(%rsp),%r12
+ leaq 192(%rsp),%rdi
+ call __ecp_nistz256_mul_montq
+
+
+
+
+ addq %r12,%r12
+ leaq 96(%rsp),%rsi
+ adcq %r13,%r13
+ movq %r12,%rax
+ adcq %r8,%r8
+ adcq %r9,%r9
+ movq %r13,%rbp
+ sbbq %r11,%r11
+
+ subq $-1,%r12
+ movq %r8,%rcx
+ sbbq %r14,%r13
+ sbbq $0,%r8
+ movq %r9,%r10
+ sbbq %r15,%r9
+ testq %r11,%r11
+
+ cmovzq %rax,%r12
+ movq 0(%rsi),%rax
+ cmovzq %rbp,%r13
+ movq 8(%rsi),%rbp
+ cmovzq %rcx,%r8
+ movq 16(%rsi),%rcx
+ cmovzq %r10,%r9
+ movq 24(%rsi),%r10
+
+ call __ecp_nistz256_subq
+
+ leaq 128(%rsp),%rbx
+ leaq 288(%rsp),%rdi
+ call __ecp_nistz256_sub_fromq
+
+ movq 192+0(%rsp),%rax
+ movq 192+8(%rsp),%rbp
+ movq 192+16(%rsp),%rcx
+ movq 192+24(%rsp),%r10
+ leaq 320(%rsp),%rdi
+
+ call __ecp_nistz256_subq
+
+ movq %r12,0(%rdi)
+ movq %r13,8(%rdi)
+ movq %r8,16(%rdi)
+ movq %r9,24(%rdi)
+ movq 128(%rsp),%rax
+ leaq 128(%rsp),%rbx
+ movq 0+224(%rsp),%r9
+ movq 8+224(%rsp),%r10
+ leaq 0+224(%rsp),%rsi
+ movq 16+224(%rsp),%r11
+ movq 24+224(%rsp),%r12
+ leaq 256(%rsp),%rdi
+ call __ecp_nistz256_mul_montq
+
+ movq 320(%rsp),%rax
+ leaq 320(%rsp),%rbx
+ movq 0+64(%rsp),%r9
+ movq 8+64(%rsp),%r10
+ leaq 0+64(%rsp),%rsi
+ movq 16+64(%rsp),%r11
+ movq 24+64(%rsp),%r12
+ leaq 320(%rsp),%rdi
+ call __ecp_nistz256_mul_montq
+
+ leaq 256(%rsp),%rbx
+ leaq 320(%rsp),%rdi
+ call __ecp_nistz256_sub_fromq
+
+.byte 102,72,15,126,199
+
+ movdqa %xmm5,%xmm0
+ movdqa %xmm5,%xmm1
+ pandn 352(%rsp),%xmm0
+ movdqa %xmm5,%xmm2
+ pandn 352+16(%rsp),%xmm1
+ movdqa %xmm5,%xmm3
+ pand 544(%rsp),%xmm2
+ pand 544+16(%rsp),%xmm3
+ por %xmm0,%xmm2
+ por %xmm1,%xmm3
+
+ movdqa %xmm4,%xmm0
+ movdqa %xmm4,%xmm1
+ pandn %xmm2,%xmm0
+ movdqa %xmm4,%xmm2
+ pandn %xmm3,%xmm1
+ movdqa %xmm4,%xmm3
+ pand 448(%rsp),%xmm2
+ pand 448+16(%rsp),%xmm3
+ por %xmm0,%xmm2
+ por %xmm1,%xmm3
+ movdqu %xmm2,64(%rdi)
+ movdqu %xmm3,80(%rdi)
+
+ movdqa %xmm5,%xmm0
+ movdqa %xmm5,%xmm1
+ pandn 288(%rsp),%xmm0
+ movdqa %xmm5,%xmm2
+ pandn 288+16(%rsp),%xmm1
+ movdqa %xmm5,%xmm3
+ pand 480(%rsp),%xmm2
+ pand 480+16(%rsp),%xmm3
+ por %xmm0,%xmm2
+ por %xmm1,%xmm3
+
+ movdqa %xmm4,%xmm0
+ movdqa %xmm4,%xmm1
+ pandn %xmm2,%xmm0
+ movdqa %xmm4,%xmm2
+ pandn %xmm3,%xmm1
+ movdqa %xmm4,%xmm3
+ pand 384(%rsp),%xmm2
+ pand 384+16(%rsp),%xmm3
+ por %xmm0,%xmm2
+ por %xmm1,%xmm3
+ movdqu %xmm2,0(%rdi)
+ movdqu %xmm3,16(%rdi)
+
+ movdqa %xmm5,%xmm0
+ movdqa %xmm5,%xmm1
+ pandn 320(%rsp),%xmm0
+ movdqa %xmm5,%xmm2
+ pandn 320+16(%rsp),%xmm1
+ movdqa %xmm5,%xmm3
+ pand 512(%rsp),%xmm2
+ pand 512+16(%rsp),%xmm3
+ por %xmm0,%xmm2
+ por %xmm1,%xmm3
+
+ movdqa %xmm4,%xmm0
+ movdqa %xmm4,%xmm1
+ pandn %xmm2,%xmm0
+ movdqa %xmm4,%xmm2
+ pandn %xmm3,%xmm1
+ movdqa %xmm4,%xmm3
+ pand 416(%rsp),%xmm2
+ pand 416+16(%rsp),%xmm3
+ por %xmm0,%xmm2
+ por %xmm1,%xmm3
+ movdqu %xmm2,32(%rdi)
+ movdqu %xmm3,48(%rdi)
+
+.Ladd_doneq:
+ addq $576+8,%rsp
+ popq %r15
+ popq %r14
+ popq %r13
+ popq %r12
+ popq %rbx
+ popq %rbp
+ .byte 0xf3,0xc3
+.size ecp_nistz256_point_add,.-ecp_nistz256_point_add
+.globl ecp_nistz256_point_add_affine
+.type ecp_nistz256_point_add_affine,@function
+.align 32
+ecp_nistz256_point_add_affine:
+ pushq %rbp
+ pushq %rbx
+ pushq %r12
+ pushq %r13
+ pushq %r14
+ pushq %r15
+ subq $480+8,%rsp
+
+ movdqu 0(%rsi),%xmm0
+ movq %rdx,%rbx
+ movdqu 16(%rsi),%xmm1
+ movdqu 32(%rsi),%xmm2
+ movdqu 48(%rsi),%xmm3
+ movdqu 64(%rsi),%xmm4
+ movdqu 80(%rsi),%xmm5
+ movq 64+0(%rsi),%rax
+ movq 64+8(%rsi),%r14
+ movq 64+16(%rsi),%r15
+ movq 64+24(%rsi),%r8
+ movdqa %xmm0,320(%rsp)
+ movdqa %xmm1,320+16(%rsp)
+ por %xmm0,%xmm1
+ movdqa %xmm2,352(%rsp)
+ movdqa %xmm3,352+16(%rsp)
+ por %xmm2,%xmm3
+ movdqa %xmm4,384(%rsp)
+ movdqa %xmm5,384+16(%rsp)
+ por %xmm1,%xmm3
+
+ movdqu 0(%rbx),%xmm0
+ pshufd $177,%xmm3,%xmm5
+ movdqu 16(%rbx),%xmm1
+ movdqu 32(%rbx),%xmm2
+ por %xmm3,%xmm5
+ movdqu 48(%rbx),%xmm3
+ movdqa %xmm0,416(%rsp)
+ pshufd $30,%xmm5,%xmm4
+ movdqa %xmm1,416+16(%rsp)
+ por %xmm0,%xmm1
+.byte 102,72,15,110,199
+ movdqa %xmm2,448(%rsp)
+ movdqa %xmm3,448+16(%rsp)
+ por %xmm2,%xmm3
+ por %xmm4,%xmm5
+ pxor %xmm4,%xmm4
+ por %xmm1,%xmm3
+
+ leaq 64-0(%rsi),%rsi
+ leaq 32(%rsp),%rdi
+ call __ecp_nistz256_sqr_montq
+
+ pcmpeqd %xmm4,%xmm5
+ pshufd $177,%xmm3,%xmm4
+ movq 0(%rbx),%rax
+
+ movq %r12,%r9
+ por %xmm3,%xmm4
+ pshufd $0,%xmm5,%xmm5
+ pshufd $30,%xmm4,%xmm3
+ movq %r13,%r10
+ por %xmm3,%xmm4
+ pxor %xmm3,%xmm3
+ movq %r14,%r11
+ pcmpeqd %xmm3,%xmm4
+ pshufd $0,%xmm4,%xmm4
+
+ leaq 32-0(%rsp),%rsi
+ movq %r15,%r12
+ leaq 0(%rsp),%rdi
+ call __ecp_nistz256_mul_montq
+
+ leaq 320(%rsp),%rbx
+ leaq 64(%rsp),%rdi
+ call __ecp_nistz256_sub_fromq
+
+ movq 384(%rsp),%rax
+ leaq 384(%rsp),%rbx
+ movq 0+32(%rsp),%r9
+ movq 8+32(%rsp),%r10
+ leaq 0+32(%rsp),%rsi
+ movq 16+32(%rsp),%r11
+ movq 24+32(%rsp),%r12
+ leaq 32(%rsp),%rdi
+ call __ecp_nistz256_mul_montq
+
+ movq 384(%rsp),%rax
+ leaq 384(%rsp),%rbx
+ movq 0+64(%rsp),%r9
+ movq 8+64(%rsp),%r10
+ leaq 0+64(%rsp),%rsi
+ movq 16+64(%rsp),%r11
+ movq 24+64(%rsp),%r12
+ leaq 288(%rsp),%rdi
+ call __ecp_nistz256_mul_montq
+
+ movq 448(%rsp),%rax
+ leaq 448(%rsp),%rbx
+ movq 0+32(%rsp),%r9
+ movq 8+32(%rsp),%r10
+ leaq 0+32(%rsp),%rsi
+ movq 16+32(%rsp),%r11
+ movq 24+32(%rsp),%r12
+ leaq 32(%rsp),%rdi
+ call __ecp_nistz256_mul_montq
+
+ leaq 352(%rsp),%rbx
+ leaq 96(%rsp),%rdi
+ call __ecp_nistz256_sub_fromq
+
+ movq 0+64(%rsp),%rax
+ movq 8+64(%rsp),%r14
+ leaq 0+64(%rsp),%rsi
+ movq 16+64(%rsp),%r15
+ movq 24+64(%rsp),%r8
+ leaq 128(%rsp),%rdi
+ call __ecp_nistz256_sqr_montq
+
+ movq 0+96(%rsp),%rax
+ movq 8+96(%rsp),%r14
+ leaq 0+96(%rsp),%rsi
+ movq 16+96(%rsp),%r15
+ movq 24+96(%rsp),%r8
+ leaq 192(%rsp),%rdi
+ call __ecp_nistz256_sqr_montq
+
+ movq 128(%rsp),%rax
+ leaq 128(%rsp),%rbx
+ movq 0+64(%rsp),%r9
+ movq 8+64(%rsp),%r10
+ leaq 0+64(%rsp),%rsi
+ movq 16+64(%rsp),%r11
+ movq 24+64(%rsp),%r12
+ leaq 160(%rsp),%rdi
+ call __ecp_nistz256_mul_montq
+
+ movq 320(%rsp),%rax
+ leaq 320(%rsp),%rbx
+ movq 0+128(%rsp),%r9
+ movq 8+128(%rsp),%r10
+ leaq 0+128(%rsp),%rsi
+ movq 16+128(%rsp),%r11
+ movq 24+128(%rsp),%r12
+ leaq 0(%rsp),%rdi
+ call __ecp_nistz256_mul_montq
+
+
+
+
+ addq %r12,%r12
+ leaq 192(%rsp),%rsi
+ adcq %r13,%r13
+ movq %r12,%rax
+ adcq %r8,%r8
+ adcq %r9,%r9
+ movq %r13,%rbp
+ sbbq %r11,%r11
+
+ subq $-1,%r12
+ movq %r8,%rcx
+ sbbq %r14,%r13
+ sbbq $0,%r8
+ movq %r9,%r10
+ sbbq %r15,%r9
+ testq %r11,%r11
+
+ cmovzq %rax,%r12
+ movq 0(%rsi),%rax
+ cmovzq %rbp,%r13
+ movq 8(%rsi),%rbp
+ cmovzq %rcx,%r8
+ movq 16(%rsi),%rcx
+ cmovzq %r10,%r9
+ movq 24(%rsi),%r10
+
+ call __ecp_nistz256_subq
+
+ leaq 160(%rsp),%rbx
+ leaq 224(%rsp),%rdi
+ call __ecp_nistz256_sub_fromq
+
+ movq 0+0(%rsp),%rax
+ movq 0+8(%rsp),%rbp
+ movq 0+16(%rsp),%rcx
+ movq 0+24(%rsp),%r10
+ leaq 64(%rsp),%rdi
+
+ call __ecp_nistz256_subq
+
+ movq %r12,0(%rdi)
+ movq %r13,8(%rdi)
+ movq %r8,16(%rdi)
+ movq %r9,24(%rdi)
+ movq 352(%rsp),%rax
+ leaq 352(%rsp),%rbx
+ movq 0+160(%rsp),%r9
+ movq 8+160(%rsp),%r10
+ leaq 0+160(%rsp),%rsi
+ movq 16+160(%rsp),%r11
+ movq 24+160(%rsp),%r12
+ leaq 32(%rsp),%rdi
+ call __ecp_nistz256_mul_montq
+
+ movq 96(%rsp),%rax
+ leaq 96(%rsp),%rbx
+ movq 0+64(%rsp),%r9
+ movq 8+64(%rsp),%r10
+ leaq 0+64(%rsp),%rsi
+ movq 16+64(%rsp),%r11
+ movq 24+64(%rsp),%r12
+ leaq 64(%rsp),%rdi
+ call __ecp_nistz256_mul_montq
+
+ leaq 32(%rsp),%rbx
+ leaq 256(%rsp),%rdi
+ call __ecp_nistz256_sub_fromq
+
+.byte 102,72,15,126,199
+
+ movdqa %xmm5,%xmm0
+ movdqa %xmm5,%xmm1
+ pandn 288(%rsp),%xmm0
+ movdqa %xmm5,%xmm2
+ pandn 288+16(%rsp),%xmm1
+ movdqa %xmm5,%xmm3
+ pand .LONE_mont(%rip),%xmm2
+ pand .LONE_mont+16(%rip),%xmm3
+ por %xmm0,%xmm2
+ por %xmm1,%xmm3
+
+ movdqa %xmm4,%xmm0
+ movdqa %xmm4,%xmm1
+ pandn %xmm2,%xmm0
+ movdqa %xmm4,%xmm2
+ pandn %xmm3,%xmm1
+ movdqa %xmm4,%xmm3
+ pand 384(%rsp),%xmm2
+ pand 384+16(%rsp),%xmm3
+ por %xmm0,%xmm2
+ por %xmm1,%xmm3
+ movdqu %xmm2,64(%rdi)
+ movdqu %xmm3,80(%rdi)
+
+ movdqa %xmm5,%xmm0
+ movdqa %xmm5,%xmm1
+ pandn 224(%rsp),%xmm0
+ movdqa %xmm5,%xmm2
+ pandn 224+16(%rsp),%xmm1
+ movdqa %xmm5,%xmm3
+ pand 416(%rsp),%xmm2
+ pand 416+16(%rsp),%xmm3
+ por %xmm0,%xmm2
+ por %xmm1,%xmm3
+
+ movdqa %xmm4,%xmm0
+ movdqa %xmm4,%xmm1
+ pandn %xmm2,%xmm0
+ movdqa %xmm4,%xmm2
+ pandn %xmm3,%xmm1
+ movdqa %xmm4,%xmm3
+ pand 320(%rsp),%xmm2
+ pand 320+16(%rsp),%xmm3
+ por %xmm0,%xmm2
+ por %xmm1,%xmm3
+ movdqu %xmm2,0(%rdi)
+ movdqu %xmm3,16(%rdi)
+
+ movdqa %xmm5,%xmm0
+ movdqa %xmm5,%xmm1
+ pandn 256(%rsp),%xmm0
+ movdqa %xmm5,%xmm2
+ pandn 256+16(%rsp),%xmm1
+ movdqa %xmm5,%xmm3
+ pand 448(%rsp),%xmm2
+ pand 448+16(%rsp),%xmm3
+ por %xmm0,%xmm2
+ por %xmm1,%xmm3
+
+ movdqa %xmm4,%xmm0
+ movdqa %xmm4,%xmm1
+ pandn %xmm2,%xmm0
+ movdqa %xmm4,%xmm2
+ pandn %xmm3,%xmm1
+ movdqa %xmm4,%xmm3
+ pand 352(%rsp),%xmm2
+ pand 352+16(%rsp),%xmm3
+ por %xmm0,%xmm2
+ por %xmm1,%xmm3
+ movdqu %xmm2,32(%rdi)
+ movdqu %xmm3,48(%rdi)
+
+ addq $480+8,%rsp
+ popq %r15
+ popq %r14
+ popq %r13
+ popq %r12
+ popq %rbx
+ popq %rbp
+ .byte 0xf3,0xc3
+.size ecp_nistz256_point_add_affine,.-ecp_nistz256_point_add_affine
diff --git a/secure/lib/libcrypto/amd64/ghash-x86_64.S b/secure/lib/libcrypto/amd64/ghash-x86_64.S
index d7ea764..aa93c80 100644
--- a/secure/lib/libcrypto/amd64/ghash-x86_64.S
+++ b/secure/lib/libcrypto/amd64/ghash-x86_64.S
@@ -1,6 +1,7 @@
# $FreeBSD$
.text
+
.globl gcm_gmult_4bit
.type gcm_gmult_4bit,@function
.align 16
@@ -659,6 +660,7 @@ gcm_ghash_4bit:
.type gcm_init_clmul,@function
.align 16
gcm_init_clmul:
+.L_init_clmul:
movdqu (%rsi),%xmm2
pshufd $78,%xmm2,%xmm2
@@ -677,15 +679,15 @@ gcm_init_clmul:
pxor %xmm5,%xmm2
+ pshufd $78,%xmm2,%xmm6
movdqa %xmm2,%xmm0
+ pxor %xmm2,%xmm6
movdqa %xmm0,%xmm1
pshufd $78,%xmm0,%xmm3
- pshufd $78,%xmm2,%xmm4
pxor %xmm0,%xmm3
- pxor %xmm2,%xmm4
.byte 102,15,58,68,194,0
.byte 102,15,58,68,202,17
-.byte 102,15,58,68,220,0
+.byte 102,15,58,68,222,0
pxor %xmm0,%xmm3
pxor %xmm1,%xmm3
@@ -695,44 +697,134 @@ gcm_init_clmul:
pxor %xmm3,%xmm1
pxor %xmm4,%xmm0
+ movdqa %xmm0,%xmm4
movdqa %xmm0,%xmm3
+ psllq $5,%xmm0
+ pxor %xmm0,%xmm3
psllq $1,%xmm0
pxor %xmm3,%xmm0
+ psllq $57,%xmm0
+ movdqa %xmm0,%xmm3
+ pslldq $8,%xmm0
+ psrldq $8,%xmm3
+ pxor %xmm4,%xmm0
+ pxor %xmm3,%xmm1
+
+
+ movdqa %xmm0,%xmm4
+ psrlq $1,%xmm0
+ pxor %xmm4,%xmm1
+ pxor %xmm0,%xmm4
+ psrlq $5,%xmm0
+ pxor %xmm4,%xmm0
+ psrlq $1,%xmm0
+ pxor %xmm1,%xmm0
+ pshufd $78,%xmm2,%xmm3
+ pshufd $78,%xmm0,%xmm4
+ pxor %xmm2,%xmm3
+ movdqu %xmm2,0(%rdi)
+ pxor %xmm0,%xmm4
+ movdqu %xmm0,16(%rdi)
+.byte 102,15,58,15,227,8
+ movdqu %xmm4,32(%rdi)
+ movdqa %xmm0,%xmm1
+ pshufd $78,%xmm0,%xmm3
+ pxor %xmm0,%xmm3
+.byte 102,15,58,68,194,0
+.byte 102,15,58,68,202,17
+.byte 102,15,58,68,222,0
+ pxor %xmm0,%xmm3
+ pxor %xmm1,%xmm3
+
+ movdqa %xmm3,%xmm4
+ psrldq $8,%xmm3
+ pslldq $8,%xmm4
+ pxor %xmm3,%xmm1
+ pxor %xmm4,%xmm0
+
+ movdqa %xmm0,%xmm4
+ movdqa %xmm0,%xmm3
psllq $5,%xmm0
+ pxor %xmm0,%xmm3
+ psllq $1,%xmm0
pxor %xmm3,%xmm0
psllq $57,%xmm0
- movdqa %xmm0,%xmm4
+ movdqa %xmm0,%xmm3
pslldq $8,%xmm0
- psrldq $8,%xmm4
- pxor %xmm3,%xmm0
- pxor %xmm4,%xmm1
+ psrldq $8,%xmm3
+ pxor %xmm4,%xmm0
+ pxor %xmm3,%xmm1
movdqa %xmm0,%xmm4
+ psrlq $1,%xmm0
+ pxor %xmm4,%xmm1
+ pxor %xmm0,%xmm4
psrlq $5,%xmm0
pxor %xmm4,%xmm0
psrlq $1,%xmm0
+ pxor %xmm1,%xmm0
+ movdqa %xmm0,%xmm5
+ movdqa %xmm0,%xmm1
+ pshufd $78,%xmm0,%xmm3
+ pxor %xmm0,%xmm3
+.byte 102,15,58,68,194,0
+.byte 102,15,58,68,202,17
+.byte 102,15,58,68,222,0
+ pxor %xmm0,%xmm3
+ pxor %xmm1,%xmm3
+
+ movdqa %xmm3,%xmm4
+ psrldq $8,%xmm3
+ pslldq $8,%xmm4
+ pxor %xmm3,%xmm1
pxor %xmm4,%xmm0
- pxor %xmm1,%xmm4
+
+ movdqa %xmm0,%xmm4
+ movdqa %xmm0,%xmm3
+ psllq $5,%xmm0
+ pxor %xmm0,%xmm3
+ psllq $1,%xmm0
+ pxor %xmm3,%xmm0
+ psllq $57,%xmm0
+ movdqa %xmm0,%xmm3
+ pslldq $8,%xmm0
+ psrldq $8,%xmm3
+ pxor %xmm4,%xmm0
+ pxor %xmm3,%xmm1
+
+
+ movdqa %xmm0,%xmm4
psrlq $1,%xmm0
+ pxor %xmm4,%xmm1
+ pxor %xmm0,%xmm4
+ psrlq $5,%xmm0
pxor %xmm4,%xmm0
- movdqu %xmm2,(%rdi)
- movdqu %xmm0,16(%rdi)
+ psrlq $1,%xmm0
+ pxor %xmm1,%xmm0
+ pshufd $78,%xmm5,%xmm3
+ pshufd $78,%xmm0,%xmm4
+ pxor %xmm5,%xmm3
+ movdqu %xmm5,48(%rdi)
+ pxor %xmm0,%xmm4
+ movdqu %xmm0,64(%rdi)
+.byte 102,15,58,15,227,8
+ movdqu %xmm4,80(%rdi)
.byte 0xf3,0xc3
.size gcm_init_clmul,.-gcm_init_clmul
.globl gcm_gmult_clmul
.type gcm_gmult_clmul,@function
.align 16
gcm_gmult_clmul:
+.L_gmult_clmul:
movdqu (%rdi),%xmm0
movdqa .Lbswap_mask(%rip),%xmm5
movdqu (%rsi),%xmm2
+ movdqu 32(%rsi),%xmm4
.byte 102,15,56,0,197
movdqa %xmm0,%xmm1
pshufd $78,%xmm0,%xmm3
- pshufd $78,%xmm2,%xmm4
pxor %xmm0,%xmm3
- pxor %xmm2,%xmm4
.byte 102,15,58,68,194,0
.byte 102,15,58,68,202,17
.byte 102,15,58,68,220,0
@@ -745,201 +837,379 @@ gcm_gmult_clmul:
pxor %xmm3,%xmm1
pxor %xmm4,%xmm0
+ movdqa %xmm0,%xmm4
movdqa %xmm0,%xmm3
- psllq $1,%xmm0
- pxor %xmm3,%xmm0
psllq $5,%xmm0
+ pxor %xmm0,%xmm3
+ psllq $1,%xmm0
pxor %xmm3,%xmm0
psllq $57,%xmm0
- movdqa %xmm0,%xmm4
+ movdqa %xmm0,%xmm3
pslldq $8,%xmm0
- psrldq $8,%xmm4
- pxor %xmm3,%xmm0
- pxor %xmm4,%xmm1
+ psrldq $8,%xmm3
+ pxor %xmm4,%xmm0
+ pxor %xmm3,%xmm1
movdqa %xmm0,%xmm4
- psrlq $5,%xmm0
- pxor %xmm4,%xmm0
psrlq $1,%xmm0
+ pxor %xmm4,%xmm1
+ pxor %xmm0,%xmm4
+ psrlq $5,%xmm0
pxor %xmm4,%xmm0
- pxor %xmm1,%xmm4
psrlq $1,%xmm0
- pxor %xmm4,%xmm0
+ pxor %xmm1,%xmm0
.byte 102,15,56,0,197
movdqu %xmm0,(%rdi)
.byte 0xf3,0xc3
.size gcm_gmult_clmul,.-gcm_gmult_clmul
.globl gcm_ghash_clmul
.type gcm_ghash_clmul,@function
-.align 16
+.align 32
gcm_ghash_clmul:
- movdqa .Lbswap_mask(%rip),%xmm5
+.L_ghash_clmul:
+ movdqa .Lbswap_mask(%rip),%xmm10
movdqu (%rdi),%xmm0
movdqu (%rsi),%xmm2
-.byte 102,15,56,0,197
+ movdqu 32(%rsi),%xmm7
+.byte 102,65,15,56,0,194
subq $16,%rcx
jz .Lodd_tail
- movdqu 16(%rsi),%xmm8
+ movdqu 16(%rsi),%xmm6
+ movl OPENSSL_ia32cap_P+4(%rip),%eax
+ cmpq $48,%rcx
+ jb .Lskip4x
+ andl $71303168,%eax
+ cmpl $4194304,%eax
+ je .Lskip4x
+ subq $48,%rcx
+ movq $11547335547999543296,%rax
+ movdqu 48(%rsi),%xmm14
+ movdqu 64(%rsi),%xmm15
- movdqu (%rdx),%xmm3
- movdqu 16(%rdx),%xmm6
-.byte 102,15,56,0,221
-.byte 102,15,56,0,245
- pxor %xmm3,%xmm0
- movdqa %xmm6,%xmm7
- pshufd $78,%xmm6,%xmm3
- pshufd $78,%xmm2,%xmm4
- pxor %xmm6,%xmm3
- pxor %xmm2,%xmm4
-.byte 102,15,58,68,242,0
-.byte 102,15,58,68,250,17
-.byte 102,15,58,68,220,0
- pxor %xmm6,%xmm3
- pxor %xmm7,%xmm3
- movdqa %xmm3,%xmm4
- psrldq $8,%xmm3
- pslldq $8,%xmm4
- pxor %xmm3,%xmm7
- pxor %xmm4,%xmm6
+ movdqu 48(%rdx),%xmm3
+ movdqu 32(%rdx),%xmm11
+.byte 102,65,15,56,0,218
+.byte 102,69,15,56,0,218
+ movdqa %xmm3,%xmm5
+ pshufd $78,%xmm3,%xmm4
+ pxor %xmm3,%xmm4
+.byte 102,15,58,68,218,0
+.byte 102,15,58,68,234,17
+.byte 102,15,58,68,231,0
+
+ movdqa %xmm11,%xmm13
+ pshufd $78,%xmm11,%xmm12
+ pxor %xmm11,%xmm12
+.byte 102,68,15,58,68,222,0
+.byte 102,68,15,58,68,238,17
+.byte 102,68,15,58,68,231,16
+ xorps %xmm11,%xmm3
+ xorps %xmm13,%xmm5
+ movups 80(%rsi),%xmm7
+ xorps %xmm12,%xmm4
+
+ movdqu 16(%rdx),%xmm11
+ movdqu 0(%rdx),%xmm8
+.byte 102,69,15,56,0,218
+.byte 102,69,15,56,0,194
+ movdqa %xmm11,%xmm13
+ pshufd $78,%xmm11,%xmm12
+ pxor %xmm8,%xmm0
+ pxor %xmm11,%xmm12
+.byte 102,69,15,58,68,222,0
movdqa %xmm0,%xmm1
- pshufd $78,%xmm0,%xmm3
- pshufd $78,%xmm8,%xmm4
- pxor %xmm0,%xmm3
- pxor %xmm8,%xmm4
+ pshufd $78,%xmm0,%xmm8
+ pxor %xmm0,%xmm8
+.byte 102,69,15,58,68,238,17
+.byte 102,68,15,58,68,231,0
+ xorps %xmm11,%xmm3
+ xorps %xmm13,%xmm5
- leaq 32(%rdx),%rdx
- subq $32,%rcx
- jbe .Leven_tail
+ leaq 64(%rdx),%rdx
+ subq $64,%rcx
+ jc .Ltail4x
-.Lmod_loop:
-.byte 102,65,15,58,68,192,0
-.byte 102,65,15,58,68,200,17
-.byte 102,15,58,68,220,0
- pxor %xmm0,%xmm3
- pxor %xmm1,%xmm3
+ jmp .Lmod4_loop
+.align 32
+.Lmod4_loop:
+.byte 102,65,15,58,68,199,0
+ xorps %xmm12,%xmm4
+ movdqu 48(%rdx),%xmm11
+.byte 102,69,15,56,0,218
+.byte 102,65,15,58,68,207,17
+ xorps %xmm3,%xmm0
+ movdqu 32(%rdx),%xmm3
+ movdqa %xmm11,%xmm13
+.byte 102,68,15,58,68,199,16
+ pshufd $78,%xmm11,%xmm12
+ xorps %xmm5,%xmm1
+ pxor %xmm11,%xmm12
+.byte 102,65,15,56,0,218
+ movups 32(%rsi),%xmm7
+ xorps %xmm4,%xmm8
+.byte 102,68,15,58,68,218,0
+ pshufd $78,%xmm3,%xmm4
- movdqa %xmm3,%xmm4
- psrldq $8,%xmm3
- pslldq $8,%xmm4
- pxor %xmm3,%xmm1
- pxor %xmm4,%xmm0
- movdqu (%rdx),%xmm3
- pxor %xmm6,%xmm0
- pxor %xmm7,%xmm1
-
- movdqu 16(%rdx),%xmm6
-.byte 102,15,56,0,221
-.byte 102,15,56,0,245
-
- movdqa %xmm6,%xmm7
- pshufd $78,%xmm6,%xmm9
- pshufd $78,%xmm2,%xmm10
- pxor %xmm6,%xmm9
- pxor %xmm2,%xmm10
- pxor %xmm3,%xmm1
+ pxor %xmm0,%xmm8
+ movdqa %xmm3,%xmm5
+ pxor %xmm1,%xmm8
+ pxor %xmm3,%xmm4
+ movdqa %xmm8,%xmm9
+.byte 102,68,15,58,68,234,17
+ pslldq $8,%xmm8
+ psrldq $8,%xmm9
+ pxor %xmm8,%xmm0
+ movdqa .L7_mask(%rip),%xmm8
+ pxor %xmm9,%xmm1
+.byte 102,76,15,110,200
+
+ pand %xmm0,%xmm8
+.byte 102,69,15,56,0,200
+ pxor %xmm0,%xmm9
+.byte 102,68,15,58,68,231,0
+ psllq $57,%xmm9
+ movdqa %xmm9,%xmm8
+ pslldq $8,%xmm9
+.byte 102,15,58,68,222,0
+ psrldq $8,%xmm8
+ pxor %xmm9,%xmm0
+ pxor %xmm8,%xmm1
+ movdqu 0(%rdx),%xmm8
+
+ movdqa %xmm0,%xmm9
+ psrlq $1,%xmm0
+.byte 102,15,58,68,238,17
+ xorps %xmm11,%xmm3
+ movdqu 16(%rdx),%xmm11
+.byte 102,69,15,56,0,218
+.byte 102,15,58,68,231,16
+ xorps %xmm13,%xmm5
+ movups 80(%rsi),%xmm7
+.byte 102,69,15,56,0,194
+ pxor %xmm9,%xmm1
+ pxor %xmm0,%xmm9
+ psrlq $5,%xmm0
+
+ movdqa %xmm11,%xmm13
+ pxor %xmm12,%xmm4
+ pshufd $78,%xmm11,%xmm12
+ pxor %xmm9,%xmm0
+ pxor %xmm8,%xmm1
+ pxor %xmm11,%xmm12
+.byte 102,69,15,58,68,222,0
+ psrlq $1,%xmm0
+ pxor %xmm1,%xmm0
+ movdqa %xmm0,%xmm1
+.byte 102,69,15,58,68,238,17
+ xorps %xmm11,%xmm3
+ pshufd $78,%xmm0,%xmm8
+ pxor %xmm0,%xmm8
+
+.byte 102,68,15,58,68,231,0
+ xorps %xmm13,%xmm5
+ leaq 64(%rdx),%rdx
+ subq $64,%rcx
+ jnc .Lmod4_loop
+
+.Ltail4x:
+.byte 102,65,15,58,68,199,0
+.byte 102,65,15,58,68,207,17
+.byte 102,68,15,58,68,199,16
+ xorps %xmm12,%xmm4
+ xorps %xmm3,%xmm0
+ xorps %xmm5,%xmm1
+ pxor %xmm0,%xmm1
+ pxor %xmm4,%xmm8
+
+ pxor %xmm1,%xmm8
+ pxor %xmm0,%xmm1
+
+ movdqa %xmm8,%xmm9
+ psrldq $8,%xmm8
+ pslldq $8,%xmm9
+ pxor %xmm8,%xmm1
+ pxor %xmm9,%xmm0
+
+ movdqa %xmm0,%xmm4
movdqa %xmm0,%xmm3
- psllq $1,%xmm0
- pxor %xmm3,%xmm0
psllq $5,%xmm0
+ pxor %xmm0,%xmm3
+ psllq $1,%xmm0
pxor %xmm3,%xmm0
-.byte 102,15,58,68,242,0
psllq $57,%xmm0
- movdqa %xmm0,%xmm4
+ movdqa %xmm0,%xmm3
pslldq $8,%xmm0
- psrldq $8,%xmm4
- pxor %xmm3,%xmm0
- pxor %xmm4,%xmm1
+ psrldq $8,%xmm3
+ pxor %xmm4,%xmm0
+ pxor %xmm3,%xmm1
+
-.byte 102,15,58,68,250,17
movdqa %xmm0,%xmm4
- psrlq $5,%xmm0
- pxor %xmm4,%xmm0
psrlq $1,%xmm0
+ pxor %xmm4,%xmm1
+ pxor %xmm0,%xmm4
+ psrlq $5,%xmm0
pxor %xmm4,%xmm0
- pxor %xmm1,%xmm4
psrlq $1,%xmm0
- pxor %xmm4,%xmm0
+ pxor %xmm1,%xmm0
+ addq $64,%rcx
+ jz .Ldone
+ movdqu 32(%rsi),%xmm7
+ subq $16,%rcx
+ jz .Lodd_tail
+.Lskip4x:
+
+
+
+
+
+ movdqu (%rdx),%xmm8
+ movdqu 16(%rdx),%xmm3
+.byte 102,69,15,56,0,194
+.byte 102,65,15,56,0,218
+ pxor %xmm8,%xmm0
-.byte 102,69,15,58,68,202,0
+ movdqa %xmm3,%xmm5
+ pshufd $78,%xmm3,%xmm4
+ pxor %xmm3,%xmm4
+.byte 102,15,58,68,218,0
+.byte 102,15,58,68,234,17
+.byte 102,15,58,68,231,0
+
+ leaq 32(%rdx),%rdx
+ nop
+ subq $32,%rcx
+ jbe .Leven_tail
+ nop
+ jmp .Lmod_loop
+
+.align 32
+.Lmod_loop:
movdqa %xmm0,%xmm1
- pshufd $78,%xmm0,%xmm3
- pshufd $78,%xmm8,%xmm4
- pxor %xmm0,%xmm3
+ movdqa %xmm4,%xmm8
+ pshufd $78,%xmm0,%xmm4
+ pxor %xmm0,%xmm4
+
+.byte 102,15,58,68,198,0
+.byte 102,15,58,68,206,17
+.byte 102,15,58,68,231,16
+
+ pxor %xmm3,%xmm0
+ pxor %xmm5,%xmm1
+ movdqu (%rdx),%xmm9
+ pxor %xmm0,%xmm8
+.byte 102,69,15,56,0,202
+ movdqu 16(%rdx),%xmm3
+
+ pxor %xmm1,%xmm8
+ pxor %xmm9,%xmm1
pxor %xmm8,%xmm4
+.byte 102,65,15,56,0,218
+ movdqa %xmm4,%xmm8
+ psrldq $8,%xmm8
+ pslldq $8,%xmm4
+ pxor %xmm8,%xmm1
+ pxor %xmm4,%xmm0
- pxor %xmm6,%xmm9
- pxor %xmm7,%xmm9
- movdqa %xmm9,%xmm10
- psrldq $8,%xmm9
- pslldq $8,%xmm10
- pxor %xmm9,%xmm7
- pxor %xmm10,%xmm6
+ movdqa %xmm3,%xmm5
+
+ movdqa %xmm0,%xmm9
+ movdqa %xmm0,%xmm8
+ psllq $5,%xmm0
+ pxor %xmm0,%xmm8
+.byte 102,15,58,68,218,0
+ psllq $1,%xmm0
+ pxor %xmm8,%xmm0
+ psllq $57,%xmm0
+ movdqa %xmm0,%xmm8
+ pslldq $8,%xmm0
+ psrldq $8,%xmm8
+ pxor %xmm9,%xmm0
+ pshufd $78,%xmm5,%xmm4
+ pxor %xmm8,%xmm1
+ pxor %xmm5,%xmm4
+ movdqa %xmm0,%xmm9
+ psrlq $1,%xmm0
+.byte 102,15,58,68,234,17
+ pxor %xmm9,%xmm1
+ pxor %xmm0,%xmm9
+ psrlq $5,%xmm0
+ pxor %xmm9,%xmm0
leaq 32(%rdx),%rdx
+ psrlq $1,%xmm0
+.byte 102,15,58,68,231,0
+ pxor %xmm1,%xmm0
+
subq $32,%rcx
ja .Lmod_loop
.Leven_tail:
-.byte 102,65,15,58,68,192,0
-.byte 102,65,15,58,68,200,17
-.byte 102,15,58,68,220,0
- pxor %xmm0,%xmm3
- pxor %xmm1,%xmm3
+ movdqa %xmm0,%xmm1
+ movdqa %xmm4,%xmm8
+ pshufd $78,%xmm0,%xmm4
+ pxor %xmm0,%xmm4
- movdqa %xmm3,%xmm4
- psrldq $8,%xmm3
+.byte 102,15,58,68,198,0
+.byte 102,15,58,68,206,17
+.byte 102,15,58,68,231,16
+
+ pxor %xmm3,%xmm0
+ pxor %xmm5,%xmm1
+ pxor %xmm0,%xmm8
+ pxor %xmm1,%xmm8
+ pxor %xmm8,%xmm4
+ movdqa %xmm4,%xmm8
+ psrldq $8,%xmm8
pslldq $8,%xmm4
- pxor %xmm3,%xmm1
+ pxor %xmm8,%xmm1
pxor %xmm4,%xmm0
- pxor %xmm6,%xmm0
- pxor %xmm7,%xmm1
+ movdqa %xmm0,%xmm4
movdqa %xmm0,%xmm3
- psllq $1,%xmm0
- pxor %xmm3,%xmm0
psllq $5,%xmm0
+ pxor %xmm0,%xmm3
+ psllq $1,%xmm0
pxor %xmm3,%xmm0
psllq $57,%xmm0
- movdqa %xmm0,%xmm4
+ movdqa %xmm0,%xmm3
pslldq $8,%xmm0
- psrldq $8,%xmm4
- pxor %xmm3,%xmm0
- pxor %xmm4,%xmm1
+ psrldq $8,%xmm3
+ pxor %xmm4,%xmm0
+ pxor %xmm3,%xmm1
movdqa %xmm0,%xmm4
- psrlq $5,%xmm0
- pxor %xmm4,%xmm0
psrlq $1,%xmm0
+ pxor %xmm4,%xmm1
+ pxor %xmm0,%xmm4
+ psrlq $5,%xmm0
pxor %xmm4,%xmm0
- pxor %xmm1,%xmm4
psrlq $1,%xmm0
- pxor %xmm4,%xmm0
+ pxor %xmm1,%xmm0
testq %rcx,%rcx
jnz .Ldone
.Lodd_tail:
- movdqu (%rdx),%xmm3
-.byte 102,15,56,0,221
- pxor %xmm3,%xmm0
+ movdqu (%rdx),%xmm8
+.byte 102,69,15,56,0,194
+ pxor %xmm8,%xmm0
movdqa %xmm0,%xmm1
pshufd $78,%xmm0,%xmm3
- pshufd $78,%xmm2,%xmm4
pxor %xmm0,%xmm3
- pxor %xmm2,%xmm4
.byte 102,15,58,68,194,0
.byte 102,15,58,68,202,17
-.byte 102,15,58,68,220,0
+.byte 102,15,58,68,223,0
pxor %xmm0,%xmm3
pxor %xmm1,%xmm3
@@ -949,38 +1219,60 @@ gcm_ghash_clmul:
pxor %xmm3,%xmm1
pxor %xmm4,%xmm0
+ movdqa %xmm0,%xmm4
movdqa %xmm0,%xmm3
- psllq $1,%xmm0
- pxor %xmm3,%xmm0
psllq $5,%xmm0
+ pxor %xmm0,%xmm3
+ psllq $1,%xmm0
pxor %xmm3,%xmm0
psllq $57,%xmm0
- movdqa %xmm0,%xmm4
+ movdqa %xmm0,%xmm3
pslldq $8,%xmm0
- psrldq $8,%xmm4
- pxor %xmm3,%xmm0
- pxor %xmm4,%xmm1
+ psrldq $8,%xmm3
+ pxor %xmm4,%xmm0
+ pxor %xmm3,%xmm1
movdqa %xmm0,%xmm4
- psrlq $5,%xmm0
- pxor %xmm4,%xmm0
psrlq $1,%xmm0
+ pxor %xmm4,%xmm1
+ pxor %xmm0,%xmm4
+ psrlq $5,%xmm0
pxor %xmm4,%xmm0
- pxor %xmm1,%xmm4
psrlq $1,%xmm0
- pxor %xmm4,%xmm0
+ pxor %xmm1,%xmm0
.Ldone:
-.byte 102,15,56,0,197
+.byte 102,65,15,56,0,194
movdqu %xmm0,(%rdi)
.byte 0xf3,0xc3
-.LSEH_end_gcm_ghash_clmul:
.size gcm_ghash_clmul,.-gcm_ghash_clmul
+.globl gcm_init_avx
+.type gcm_init_avx,@function
+.align 32
+gcm_init_avx:
+ jmp .L_init_clmul
+.size gcm_init_avx,.-gcm_init_avx
+.globl gcm_gmult_avx
+.type gcm_gmult_avx,@function
+.align 32
+gcm_gmult_avx:
+ jmp .L_gmult_clmul
+.size gcm_gmult_avx,.-gcm_gmult_avx
+.globl gcm_ghash_avx
+.type gcm_ghash_avx,@function
+.align 32
+gcm_ghash_avx:
+ jmp .L_ghash_clmul
+.size gcm_ghash_avx,.-gcm_ghash_avx
.align 64
.Lbswap_mask:
.byte 15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0
.L0x1c2_polynomial:
.byte 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0xc2
+.L7_mask:
+.long 7,0,7,0
+.L7_mask_poly:
+.long 7,0,450,0
.align 64
.type .Lrem_4bit,@object
.Lrem_4bit:
diff --git a/secure/lib/libcrypto/amd64/md5-x86_64.S b/secure/lib/libcrypto/amd64/md5-x86_64.S
index c592dcc..94fb761 100644
--- a/secure/lib/libcrypto/amd64/md5-x86_64.S
+++ b/secure/lib/libcrypto/amd64/md5-x86_64.S
@@ -30,7 +30,7 @@ md5_block_asm_data_order:
cmpq %rdi,%rsi
- je .Lend
+ je .Lend
.Lloop:
@@ -649,7 +649,7 @@ md5_block_asm_data_order:
addq $64,%rsi
cmpq %rdi,%rsi
- jb .Lloop
+ jb .Lloop
.Lend:
diff --git a/secure/lib/libcrypto/amd64/modexp512-x86_64.S b/secure/lib/libcrypto/amd64/modexp512-x86_64.S
deleted file mode 100644
index 71072ad..0000000
--- a/secure/lib/libcrypto/amd64/modexp512-x86_64.S
+++ /dev/null
@@ -1,1774 +0,0 @@
- # $FreeBSD$
-.text
-
-.type MULADD_128x512,@function
-.align 16
-MULADD_128x512:
- movq 0(%rsi),%rax
- mulq %rbp
- addq %rax,%r8
- adcq $0,%rdx
- movq %r8,0(%rcx)
- movq %rdx,%rbx
-
- movq 8(%rsi),%rax
- mulq %rbp
- addq %rax,%r9
- adcq $0,%rdx
- addq %rbx,%r9
- adcq $0,%rdx
- movq %rdx,%rbx
-
- movq 16(%rsi),%rax
- mulq %rbp
- addq %rax,%r10
- adcq $0,%rdx
- addq %rbx,%r10
- adcq $0,%rdx
- movq %rdx,%rbx
-
- movq 24(%rsi),%rax
- mulq %rbp
- addq %rax,%r11
- adcq $0,%rdx
- addq %rbx,%r11
- adcq $0,%rdx
- movq %rdx,%rbx
-
- movq 32(%rsi),%rax
- mulq %rbp
- addq %rax,%r12
- adcq $0,%rdx
- addq %rbx,%r12
- adcq $0,%rdx
- movq %rdx,%rbx
-
- movq 40(%rsi),%rax
- mulq %rbp
- addq %rax,%r13
- adcq $0,%rdx
- addq %rbx,%r13
- adcq $0,%rdx
- movq %rdx,%rbx
-
- movq 48(%rsi),%rax
- mulq %rbp
- addq %rax,%r14
- adcq $0,%rdx
- addq %rbx,%r14
- adcq $0,%rdx
- movq %rdx,%rbx
-
- movq 56(%rsi),%rax
- mulq %rbp
- addq %rax,%r15
- adcq $0,%rdx
- addq %rbx,%r15
- adcq $0,%rdx
- movq %rdx,%r8
- movq 8(%rdi),%rbp
- movq 0(%rsi),%rax
- mulq %rbp
- addq %rax,%r9
- adcq $0,%rdx
- movq %r9,8(%rcx)
- movq %rdx,%rbx
-
- movq 8(%rsi),%rax
- mulq %rbp
- addq %rax,%r10
- adcq $0,%rdx
- addq %rbx,%r10
- adcq $0,%rdx
- movq %rdx,%rbx
-
- movq 16(%rsi),%rax
- mulq %rbp
- addq %rax,%r11
- adcq $0,%rdx
- addq %rbx,%r11
- adcq $0,%rdx
- movq %rdx,%rbx
-
- movq 24(%rsi),%rax
- mulq %rbp
- addq %rax,%r12
- adcq $0,%rdx
- addq %rbx,%r12
- adcq $0,%rdx
- movq %rdx,%rbx
-
- movq 32(%rsi),%rax
- mulq %rbp
- addq %rax,%r13
- adcq $0,%rdx
- addq %rbx,%r13
- adcq $0,%rdx
- movq %rdx,%rbx
-
- movq 40(%rsi),%rax
- mulq %rbp
- addq %rax,%r14
- adcq $0,%rdx
- addq %rbx,%r14
- adcq $0,%rdx
- movq %rdx,%rbx
-
- movq 48(%rsi),%rax
- mulq %rbp
- addq %rax,%r15
- adcq $0,%rdx
- addq %rbx,%r15
- adcq $0,%rdx
- movq %rdx,%rbx
-
- movq 56(%rsi),%rax
- mulq %rbp
- addq %rax,%r8
- adcq $0,%rdx
- addq %rbx,%r8
- adcq $0,%rdx
- movq %rdx,%r9
- .byte 0xf3,0xc3
-.size MULADD_128x512,.-MULADD_128x512
-.type mont_reduce,@function
-.align 16
-mont_reduce:
- leaq 192(%rsp),%rdi
- movq 32(%rsp),%rsi
- addq $576,%rsi
- leaq 520(%rsp),%rcx
-
- movq 96(%rcx),%rbp
- movq 0(%rsi),%rax
- mulq %rbp
- movq (%rcx),%r8
- addq %rax,%r8
- adcq $0,%rdx
- movq %r8,0(%rdi)
- movq %rdx,%rbx
-
- movq 8(%rsi),%rax
- mulq %rbp
- movq 8(%rcx),%r9
- addq %rax,%r9
- adcq $0,%rdx
- addq %rbx,%r9
- adcq $0,%rdx
- movq %rdx,%rbx
-
- movq 16(%rsi),%rax
- mulq %rbp
- movq 16(%rcx),%r10
- addq %rax,%r10
- adcq $0,%rdx
- addq %rbx,%r10
- adcq $0,%rdx
- movq %rdx,%rbx
-
- movq 24(%rsi),%rax
- mulq %rbp
- movq 24(%rcx),%r11
- addq %rax,%r11
- adcq $0,%rdx
- addq %rbx,%r11
- adcq $0,%rdx
- movq %rdx,%rbx
-
- movq 32(%rsi),%rax
- mulq %rbp
- movq 32(%rcx),%r12
- addq %rax,%r12
- adcq $0,%rdx
- addq %rbx,%r12
- adcq $0,%rdx
- movq %rdx,%rbx
-
- movq 40(%rsi),%rax
- mulq %rbp
- movq 40(%rcx),%r13
- addq %rax,%r13
- adcq $0,%rdx
- addq %rbx,%r13
- adcq $0,%rdx
- movq %rdx,%rbx
-
- movq 48(%rsi),%rax
- mulq %rbp
- movq 48(%rcx),%r14
- addq %rax,%r14
- adcq $0,%rdx
- addq %rbx,%r14
- adcq $0,%rdx
- movq %rdx,%rbx
-
- movq 56(%rsi),%rax
- mulq %rbp
- movq 56(%rcx),%r15
- addq %rax,%r15
- adcq $0,%rdx
- addq %rbx,%r15
- adcq $0,%rdx
- movq %rdx,%r8
- movq 104(%rcx),%rbp
- movq 0(%rsi),%rax
- mulq %rbp
- addq %rax,%r9
- adcq $0,%rdx
- movq %r9,8(%rdi)
- movq %rdx,%rbx
-
- movq 8(%rsi),%rax
- mulq %rbp
- addq %rax,%r10
- adcq $0,%rdx
- addq %rbx,%r10
- adcq $0,%rdx
- movq %rdx,%rbx
-
- movq 16(%rsi),%rax
- mulq %rbp
- addq %rax,%r11
- adcq $0,%rdx
- addq %rbx,%r11
- adcq $0,%rdx
- movq %rdx,%rbx
-
- movq 24(%rsi),%rax
- mulq %rbp
- addq %rax,%r12
- adcq $0,%rdx
- addq %rbx,%r12
- adcq $0,%rdx
- movq %rdx,%rbx
-
- movq 32(%rsi),%rax
- mulq %rbp
- addq %rax,%r13
- adcq $0,%rdx
- addq %rbx,%r13
- adcq $0,%rdx
- movq %rdx,%rbx
-
- movq 40(%rsi),%rax
- mulq %rbp
- addq %rax,%r14
- adcq $0,%rdx
- addq %rbx,%r14
- adcq $0,%rdx
- movq %rdx,%rbx
-
- movq 48(%rsi),%rax
- mulq %rbp
- addq %rax,%r15
- adcq $0,%rdx
- addq %rbx,%r15
- adcq $0,%rdx
- movq %rdx,%rbx
-
- movq 56(%rsi),%rax
- mulq %rbp
- addq %rax,%r8
- adcq $0,%rdx
- addq %rbx,%r8
- adcq $0,%rdx
- movq %rdx,%r9
- movq 112(%rcx),%rbp
- movq 0(%rsi),%rax
- mulq %rbp
- addq %rax,%r10
- adcq $0,%rdx
- movq %r10,16(%rdi)
- movq %rdx,%rbx
-
- movq 8(%rsi),%rax
- mulq %rbp
- addq %rax,%r11
- adcq $0,%rdx
- addq %rbx,%r11
- adcq $0,%rdx
- movq %rdx,%rbx
-
- movq 16(%rsi),%rax
- mulq %rbp
- addq %rax,%r12
- adcq $0,%rdx
- addq %rbx,%r12
- adcq $0,%rdx
- movq %rdx,%rbx
-
- movq 24(%rsi),%rax
- mulq %rbp
- addq %rax,%r13
- adcq $0,%rdx
- addq %rbx,%r13
- adcq $0,%rdx
- movq %rdx,%rbx
-
- movq 32(%rsi),%rax
- mulq %rbp
- addq %rax,%r14
- adcq $0,%rdx
- addq %rbx,%r14
- adcq $0,%rdx
- movq %rdx,%rbx
-
- movq 40(%rsi),%rax
- mulq %rbp
- addq %rax,%r15
- adcq $0,%rdx
- addq %rbx,%r15
- adcq $0,%rdx
- movq %rdx,%rbx
-
- movq 48(%rsi),%rax
- mulq %rbp
- addq %rax,%r8
- adcq $0,%rdx
- addq %rbx,%r8
- adcq $0,%rdx
- movq %rdx,%rbx
-
- movq 56(%rsi),%rax
- mulq %rbp
- addq %rax,%r9
- adcq $0,%rdx
- addq %rbx,%r9
- adcq $0,%rdx
- movq %rdx,%r10
- movq 120(%rcx),%rbp
- movq 0(%rsi),%rax
- mulq %rbp
- addq %rax,%r11
- adcq $0,%rdx
- movq %r11,24(%rdi)
- movq %rdx,%rbx
-
- movq 8(%rsi),%rax
- mulq %rbp
- addq %rax,%r12
- adcq $0,%rdx
- addq %rbx,%r12
- adcq $0,%rdx
- movq %rdx,%rbx
-
- movq 16(%rsi),%rax
- mulq %rbp
- addq %rax,%r13
- adcq $0,%rdx
- addq %rbx,%r13
- adcq $0,%rdx
- movq %rdx,%rbx
-
- movq 24(%rsi),%rax
- mulq %rbp
- addq %rax,%r14
- adcq $0,%rdx
- addq %rbx,%r14
- adcq $0,%rdx
- movq %rdx,%rbx
-
- movq 32(%rsi),%rax
- mulq %rbp
- addq %rax,%r15
- adcq $0,%rdx
- addq %rbx,%r15
- adcq $0,%rdx
- movq %rdx,%rbx
-
- movq 40(%rsi),%rax
- mulq %rbp
- addq %rax,%r8
- adcq $0,%rdx
- addq %rbx,%r8
- adcq $0,%rdx
- movq %rdx,%rbx
-
- movq 48(%rsi),%rax
- mulq %rbp
- addq %rax,%r9
- adcq $0,%rdx
- addq %rbx,%r9
- adcq $0,%rdx
- movq %rdx,%rbx
-
- movq 56(%rsi),%rax
- mulq %rbp
- addq %rax,%r10
- adcq $0,%rdx
- addq %rbx,%r10
- adcq $0,%rdx
- movq %rdx,%r11
- xorq %rax,%rax
-
- addq 64(%rcx),%r8
- adcq 72(%rcx),%r9
- adcq 80(%rcx),%r10
- adcq 88(%rcx),%r11
- adcq $0,%rax
-
-
-
-
- movq %r8,64(%rdi)
- movq %r9,72(%rdi)
- movq %r10,%rbp
- movq %r11,88(%rdi)
-
- movq %rax,384(%rsp)
-
- movq 0(%rdi),%r8
- movq 8(%rdi),%r9
- movq 16(%rdi),%r10
- movq 24(%rdi),%r11
-
-
-
-
-
-
-
-
- addq $80,%rdi
-
- addq $64,%rsi
- leaq 296(%rsp),%rcx
-
- call MULADD_128x512
-
- movq 384(%rsp),%rax
-
-
- addq -16(%rdi),%r8
- adcq -8(%rdi),%r9
- movq %r8,64(%rcx)
- movq %r9,72(%rcx)
-
- adcq %rax,%rax
- movq %rax,384(%rsp)
-
- leaq 192(%rsp),%rdi
- addq $64,%rsi
-
-
-
-
-
- movq (%rsi),%r8
- movq 8(%rsi),%rbx
-
- movq (%rcx),%rax
- mulq %r8
- movq %rax,%rbp
- movq %rdx,%r9
-
- movq 8(%rcx),%rax
- mulq %r8
- addq %rax,%r9
-
- movq (%rcx),%rax
- mulq %rbx
- addq %rax,%r9
-
- movq %r9,8(%rdi)
-
-
- subq $192,%rsi
-
- movq (%rcx),%r8
- movq 8(%rcx),%r9
-
- call MULADD_128x512
-
-
-
-
- movq 0(%rsi),%rax
- movq 8(%rsi),%rbx
- movq 16(%rsi),%rdi
- movq 24(%rsi),%rdx
-
-
- movq 384(%rsp),%rbp
-
- addq 64(%rcx),%r8
- adcq 72(%rcx),%r9
-
-
- adcq %rbp,%rbp
-
-
-
- shlq $3,%rbp
- movq 32(%rsp),%rcx
- addq %rcx,%rbp
-
-
- xorq %rsi,%rsi
-
- addq 0(%rbp),%r10
- adcq 64(%rbp),%r11
- adcq 128(%rbp),%r12
- adcq 192(%rbp),%r13
- adcq 256(%rbp),%r14
- adcq 320(%rbp),%r15
- adcq 384(%rbp),%r8
- adcq 448(%rbp),%r9
-
-
-
- sbbq $0,%rsi
-
-
- andq %rsi,%rax
- andq %rsi,%rbx
- andq %rsi,%rdi
- andq %rsi,%rdx
-
- movq $1,%rbp
- subq %rax,%r10
- sbbq %rbx,%r11
- sbbq %rdi,%r12
- sbbq %rdx,%r13
-
-
-
-
- sbbq $0,%rbp
-
-
-
- addq $512,%rcx
- movq 32(%rcx),%rax
- movq 40(%rcx),%rbx
- movq 48(%rcx),%rdi
- movq 56(%rcx),%rdx
-
-
-
- andq %rsi,%rax
- andq %rsi,%rbx
- andq %rsi,%rdi
- andq %rsi,%rdx
-
-
-
- subq $1,%rbp
-
- sbbq %rax,%r14
- sbbq %rbx,%r15
- sbbq %rdi,%r8
- sbbq %rdx,%r9
-
-
-
- movq 144(%rsp),%rsi
- movq %r10,0(%rsi)
- movq %r11,8(%rsi)
- movq %r12,16(%rsi)
- movq %r13,24(%rsi)
- movq %r14,32(%rsi)
- movq %r15,40(%rsi)
- movq %r8,48(%rsi)
- movq %r9,56(%rsi)
-
- .byte 0xf3,0xc3
-.size mont_reduce,.-mont_reduce
-.type mont_mul_a3b,@function
-.align 16
-mont_mul_a3b:
-
-
-
-
- movq 0(%rdi),%rbp
-
- movq %r10,%rax
- mulq %rbp
- movq %rax,520(%rsp)
- movq %rdx,%r10
- movq %r11,%rax
- mulq %rbp
- addq %rax,%r10
- adcq $0,%rdx
- movq %rdx,%r11
- movq %r12,%rax
- mulq %rbp
- addq %rax,%r11
- adcq $0,%rdx
- movq %rdx,%r12
- movq %r13,%rax
- mulq %rbp
- addq %rax,%r12
- adcq $0,%rdx
- movq %rdx,%r13
- movq %r14,%rax
- mulq %rbp
- addq %rax,%r13
- adcq $0,%rdx
- movq %rdx,%r14
- movq %r15,%rax
- mulq %rbp
- addq %rax,%r14
- adcq $0,%rdx
- movq %rdx,%r15
- movq %r8,%rax
- mulq %rbp
- addq %rax,%r15
- adcq $0,%rdx
- movq %rdx,%r8
- movq %r9,%rax
- mulq %rbp
- addq %rax,%r8
- adcq $0,%rdx
- movq %rdx,%r9
- movq 8(%rdi),%rbp
- movq 0(%rsi),%rax
- mulq %rbp
- addq %rax,%r10
- adcq $0,%rdx
- movq %r10,528(%rsp)
- movq %rdx,%rbx
-
- movq 8(%rsi),%rax
- mulq %rbp
- addq %rax,%r11
- adcq $0,%rdx
- addq %rbx,%r11
- adcq $0,%rdx
- movq %rdx,%rbx
-
- movq 16(%rsi),%rax
- mulq %rbp
- addq %rax,%r12
- adcq $0,%rdx
- addq %rbx,%r12
- adcq $0,%rdx
- movq %rdx,%rbx
-
- movq 24(%rsi),%rax
- mulq %rbp
- addq %rax,%r13
- adcq $0,%rdx
- addq %rbx,%r13
- adcq $0,%rdx
- movq %rdx,%rbx
-
- movq 32(%rsi),%rax
- mulq %rbp
- addq %rax,%r14
- adcq $0,%rdx
- addq %rbx,%r14
- adcq $0,%rdx
- movq %rdx,%rbx
-
- movq 40(%rsi),%rax
- mulq %rbp
- addq %rax,%r15
- adcq $0,%rdx
- addq %rbx,%r15
- adcq $0,%rdx
- movq %rdx,%rbx
-
- movq 48(%rsi),%rax
- mulq %rbp
- addq %rax,%r8
- adcq $0,%rdx
- addq %rbx,%r8
- adcq $0,%rdx
- movq %rdx,%rbx
-
- movq 56(%rsi),%rax
- mulq %rbp
- addq %rax,%r9
- adcq $0,%rdx
- addq %rbx,%r9
- adcq $0,%rdx
- movq %rdx,%r10
- movq 16(%rdi),%rbp
- movq 0(%rsi),%rax
- mulq %rbp
- addq %rax,%r11
- adcq $0,%rdx
- movq %r11,536(%rsp)
- movq %rdx,%rbx
-
- movq 8(%rsi),%rax
- mulq %rbp
- addq %rax,%r12
- adcq $0,%rdx
- addq %rbx,%r12
- adcq $0,%rdx
- movq %rdx,%rbx
-
- movq 16(%rsi),%rax
- mulq %rbp
- addq %rax,%r13
- adcq $0,%rdx
- addq %rbx,%r13
- adcq $0,%rdx
- movq %rdx,%rbx
-
- movq 24(%rsi),%rax
- mulq %rbp
- addq %rax,%r14
- adcq $0,%rdx
- addq %rbx,%r14
- adcq $0,%rdx
- movq %rdx,%rbx
-
- movq 32(%rsi),%rax
- mulq %rbp
- addq %rax,%r15
- adcq $0,%rdx
- addq %rbx,%r15
- adcq $0,%rdx
- movq %rdx,%rbx
-
- movq 40(%rsi),%rax
- mulq %rbp
- addq %rax,%r8
- adcq $0,%rdx
- addq %rbx,%r8
- adcq $0,%rdx
- movq %rdx,%rbx
-
- movq 48(%rsi),%rax
- mulq %rbp
- addq %rax,%r9
- adcq $0,%rdx
- addq %rbx,%r9
- adcq $0,%rdx
- movq %rdx,%rbx
-
- movq 56(%rsi),%rax
- mulq %rbp
- addq %rax,%r10
- adcq $0,%rdx
- addq %rbx,%r10
- adcq $0,%rdx
- movq %rdx,%r11
- movq 24(%rdi),%rbp
- movq 0(%rsi),%rax
- mulq %rbp
- addq %rax,%r12
- adcq $0,%rdx
- movq %r12,544(%rsp)
- movq %rdx,%rbx
-
- movq 8(%rsi),%rax
- mulq %rbp
- addq %rax,%r13
- adcq $0,%rdx
- addq %rbx,%r13
- adcq $0,%rdx
- movq %rdx,%rbx
-
- movq 16(%rsi),%rax
- mulq %rbp
- addq %rax,%r14
- adcq $0,%rdx
- addq %rbx,%r14
- adcq $0,%rdx
- movq %rdx,%rbx
-
- movq 24(%rsi),%rax
- mulq %rbp
- addq %rax,%r15
- adcq $0,%rdx
- addq %rbx,%r15
- adcq $0,%rdx
- movq %rdx,%rbx
-
- movq 32(%rsi),%rax
- mulq %rbp
- addq %rax,%r8
- adcq $0,%rdx
- addq %rbx,%r8
- adcq $0,%rdx
- movq %rdx,%rbx
-
- movq 40(%rsi),%rax
- mulq %rbp
- addq %rax,%r9
- adcq $0,%rdx
- addq %rbx,%r9
- adcq $0,%rdx
- movq %rdx,%rbx
-
- movq 48(%rsi),%rax
- mulq %rbp
- addq %rax,%r10
- adcq $0,%rdx
- addq %rbx,%r10
- adcq $0,%rdx
- movq %rdx,%rbx
-
- movq 56(%rsi),%rax
- mulq %rbp
- addq %rax,%r11
- adcq $0,%rdx
- addq %rbx,%r11
- adcq $0,%rdx
- movq %rdx,%r12
- movq 32(%rdi),%rbp
- movq 0(%rsi),%rax
- mulq %rbp
- addq %rax,%r13
- adcq $0,%rdx
- movq %r13,552(%rsp)
- movq %rdx,%rbx
-
- movq 8(%rsi),%rax
- mulq %rbp
- addq %rax,%r14
- adcq $0,%rdx
- addq %rbx,%r14
- adcq $0,%rdx
- movq %rdx,%rbx
-
- movq 16(%rsi),%rax
- mulq %rbp
- addq %rax,%r15
- adcq $0,%rdx
- addq %rbx,%r15
- adcq $0,%rdx
- movq %rdx,%rbx
-
- movq 24(%rsi),%rax
- mulq %rbp
- addq %rax,%r8
- adcq $0,%rdx
- addq %rbx,%r8
- adcq $0,%rdx
- movq %rdx,%rbx
-
- movq 32(%rsi),%rax
- mulq %rbp
- addq %rax,%r9
- adcq $0,%rdx
- addq %rbx,%r9
- adcq $0,%rdx
- movq %rdx,%rbx
-
- movq 40(%rsi),%rax
- mulq %rbp
- addq %rax,%r10
- adcq $0,%rdx
- addq %rbx,%r10
- adcq $0,%rdx
- movq %rdx,%rbx
-
- movq 48(%rsi),%rax
- mulq %rbp
- addq %rax,%r11
- adcq $0,%rdx
- addq %rbx,%r11
- adcq $0,%rdx
- movq %rdx,%rbx
-
- movq 56(%rsi),%rax
- mulq %rbp
- addq %rax,%r12
- adcq $0,%rdx
- addq %rbx,%r12
- adcq $0,%rdx
- movq %rdx,%r13
- movq 40(%rdi),%rbp
- movq 0(%rsi),%rax
- mulq %rbp
- addq %rax,%r14
- adcq $0,%rdx
- movq %r14,560(%rsp)
- movq %rdx,%rbx
-
- movq 8(%rsi),%rax
- mulq %rbp
- addq %rax,%r15
- adcq $0,%rdx
- addq %rbx,%r15
- adcq $0,%rdx
- movq %rdx,%rbx
-
- movq 16(%rsi),%rax
- mulq %rbp
- addq %rax,%r8
- adcq $0,%rdx
- addq %rbx,%r8
- adcq $0,%rdx
- movq %rdx,%rbx
-
- movq 24(%rsi),%rax
- mulq %rbp
- addq %rax,%r9
- adcq $0,%rdx
- addq %rbx,%r9
- adcq $0,%rdx
- movq %rdx,%rbx
-
- movq 32(%rsi),%rax
- mulq %rbp
- addq %rax,%r10
- adcq $0,%rdx
- addq %rbx,%r10
- adcq $0,%rdx
- movq %rdx,%rbx
-
- movq 40(%rsi),%rax
- mulq %rbp
- addq %rax,%r11
- adcq $0,%rdx
- addq %rbx,%r11
- adcq $0,%rdx
- movq %rdx,%rbx
-
- movq 48(%rsi),%rax
- mulq %rbp
- addq %rax,%r12
- adcq $0,%rdx
- addq %rbx,%r12
- adcq $0,%rdx
- movq %rdx,%rbx
-
- movq 56(%rsi),%rax
- mulq %rbp
- addq %rax,%r13
- adcq $0,%rdx
- addq %rbx,%r13
- adcq $0,%rdx
- movq %rdx,%r14
- movq 48(%rdi),%rbp
- movq 0(%rsi),%rax
- mulq %rbp
- addq %rax,%r15
- adcq $0,%rdx
- movq %r15,568(%rsp)
- movq %rdx,%rbx
-
- movq 8(%rsi),%rax
- mulq %rbp
- addq %rax,%r8
- adcq $0,%rdx
- addq %rbx,%r8
- adcq $0,%rdx
- movq %rdx,%rbx
-
- movq 16(%rsi),%rax
- mulq %rbp
- addq %rax,%r9
- adcq $0,%rdx
- addq %rbx,%r9
- adcq $0,%rdx
- movq %rdx,%rbx
-
- movq 24(%rsi),%rax
- mulq %rbp
- addq %rax,%r10
- adcq $0,%rdx
- addq %rbx,%r10
- adcq $0,%rdx
- movq %rdx,%rbx
-
- movq 32(%rsi),%rax
- mulq %rbp
- addq %rax,%r11
- adcq $0,%rdx
- addq %rbx,%r11
- adcq $0,%rdx
- movq %rdx,%rbx
-
- movq 40(%rsi),%rax
- mulq %rbp
- addq %rax,%r12
- adcq $0,%rdx
- addq %rbx,%r12
- adcq $0,%rdx
- movq %rdx,%rbx
-
- movq 48(%rsi),%rax
- mulq %rbp
- addq %rax,%r13
- adcq $0,%rdx
- addq %rbx,%r13
- adcq $0,%rdx
- movq %rdx,%rbx
-
- movq 56(%rsi),%rax
- mulq %rbp
- addq %rax,%r14
- adcq $0,%rdx
- addq %rbx,%r14
- adcq $0,%rdx
- movq %rdx,%r15
- movq 56(%rdi),%rbp
- movq 0(%rsi),%rax
- mulq %rbp
- addq %rax,%r8
- adcq $0,%rdx
- movq %r8,576(%rsp)
- movq %rdx,%rbx
-
- movq 8(%rsi),%rax
- mulq %rbp
- addq %rax,%r9
- adcq $0,%rdx
- addq %rbx,%r9
- adcq $0,%rdx
- movq %rdx,%rbx
-
- movq 16(%rsi),%rax
- mulq %rbp
- addq %rax,%r10
- adcq $0,%rdx
- addq %rbx,%r10
- adcq $0,%rdx
- movq %rdx,%rbx
-
- movq 24(%rsi),%rax
- mulq %rbp
- addq %rax,%r11
- adcq $0,%rdx
- addq %rbx,%r11
- adcq $0,%rdx
- movq %rdx,%rbx
-
- movq 32(%rsi),%rax
- mulq %rbp
- addq %rax,%r12
- adcq $0,%rdx
- addq %rbx,%r12
- adcq $0,%rdx
- movq %rdx,%rbx
-
- movq 40(%rsi),%rax
- mulq %rbp
- addq %rax,%r13
- adcq $0,%rdx
- addq %rbx,%r13
- adcq $0,%rdx
- movq %rdx,%rbx
-
- movq 48(%rsi),%rax
- mulq %rbp
- addq %rax,%r14
- adcq $0,%rdx
- addq %rbx,%r14
- adcq $0,%rdx
- movq %rdx,%rbx
-
- movq 56(%rsi),%rax
- mulq %rbp
- addq %rax,%r15
- adcq $0,%rdx
- addq %rbx,%r15
- adcq $0,%rdx
- movq %rdx,%r8
- movq %r9,584(%rsp)
- movq %r10,592(%rsp)
- movq %r11,600(%rsp)
- movq %r12,608(%rsp)
- movq %r13,616(%rsp)
- movq %r14,624(%rsp)
- movq %r15,632(%rsp)
- movq %r8,640(%rsp)
-
-
-
-
-
- jmp mont_reduce
-
-
-.size mont_mul_a3b,.-mont_mul_a3b
-.type sqr_reduce,@function
-.align 16
-sqr_reduce:
- movq 16(%rsp),%rcx
-
-
-
- movq %r10,%rbx
-
- movq %r11,%rax
- mulq %rbx
- movq %rax,528(%rsp)
- movq %rdx,%r10
- movq %r12,%rax
- mulq %rbx
- addq %rax,%r10
- adcq $0,%rdx
- movq %rdx,%r11
- movq %r13,%rax
- mulq %rbx
- addq %rax,%r11
- adcq $0,%rdx
- movq %rdx,%r12
- movq %r14,%rax
- mulq %rbx
- addq %rax,%r12
- adcq $0,%rdx
- movq %rdx,%r13
- movq %r15,%rax
- mulq %rbx
- addq %rax,%r13
- adcq $0,%rdx
- movq %rdx,%r14
- movq %r8,%rax
- mulq %rbx
- addq %rax,%r14
- adcq $0,%rdx
- movq %rdx,%r15
- movq %r9,%rax
- mulq %rbx
- addq %rax,%r15
- adcq $0,%rdx
- movq %rdx,%rsi
-
- movq %r10,536(%rsp)
-
-
-
-
-
- movq 8(%rcx),%rbx
-
- movq 16(%rcx),%rax
- mulq %rbx
- addq %rax,%r11
- adcq $0,%rdx
- movq %r11,544(%rsp)
-
- movq %rdx,%r10
- movq 24(%rcx),%rax
- mulq %rbx
- addq %rax,%r12
- adcq $0,%rdx
- addq %r10,%r12
- adcq $0,%rdx
- movq %r12,552(%rsp)
-
- movq %rdx,%r10
- movq 32(%rcx),%rax
- mulq %rbx
- addq %rax,%r13
- adcq $0,%rdx
- addq %r10,%r13
- adcq $0,%rdx
-
- movq %rdx,%r10
- movq 40(%rcx),%rax
- mulq %rbx
- addq %rax,%r14
- adcq $0,%rdx
- addq %r10,%r14
- adcq $0,%rdx
-
- movq %rdx,%r10
- movq %r8,%rax
- mulq %rbx
- addq %rax,%r15
- adcq $0,%rdx
- addq %r10,%r15
- adcq $0,%rdx
-
- movq %rdx,%r10
- movq %r9,%rax
- mulq %rbx
- addq %rax,%rsi
- adcq $0,%rdx
- addq %r10,%rsi
- adcq $0,%rdx
-
- movq %rdx,%r11
-
-
-
-
- movq 16(%rcx),%rbx
-
- movq 24(%rcx),%rax
- mulq %rbx
- addq %rax,%r13
- adcq $0,%rdx
- movq %r13,560(%rsp)
-
- movq %rdx,%r10
- movq 32(%rcx),%rax
- mulq %rbx
- addq %rax,%r14
- adcq $0,%rdx
- addq %r10,%r14
- adcq $0,%rdx
- movq %r14,568(%rsp)
-
- movq %rdx,%r10
- movq 40(%rcx),%rax
- mulq %rbx
- addq %rax,%r15
- adcq $0,%rdx
- addq %r10,%r15
- adcq $0,%rdx
-
- movq %rdx,%r10
- movq %r8,%rax
- mulq %rbx
- addq %rax,%rsi
- adcq $0,%rdx
- addq %r10,%rsi
- adcq $0,%rdx
-
- movq %rdx,%r10
- movq %r9,%rax
- mulq %rbx
- addq %rax,%r11
- adcq $0,%rdx
- addq %r10,%r11
- adcq $0,%rdx
-
- movq %rdx,%r12
-
-
-
-
-
- movq 24(%rcx),%rbx
-
- movq 32(%rcx),%rax
- mulq %rbx
- addq %rax,%r15
- adcq $0,%rdx
- movq %r15,576(%rsp)
-
- movq %rdx,%r10
- movq 40(%rcx),%rax
- mulq %rbx
- addq %rax,%rsi
- adcq $0,%rdx
- addq %r10,%rsi
- adcq $0,%rdx
- movq %rsi,584(%rsp)
-
- movq %rdx,%r10
- movq %r8,%rax
- mulq %rbx
- addq %rax,%r11
- adcq $0,%rdx
- addq %r10,%r11
- adcq $0,%rdx
-
- movq %rdx,%r10
- movq %r9,%rax
- mulq %rbx
- addq %rax,%r12
- adcq $0,%rdx
- addq %r10,%r12
- adcq $0,%rdx
-
- movq %rdx,%r15
-
-
-
-
- movq 32(%rcx),%rbx
-
- movq 40(%rcx),%rax
- mulq %rbx
- addq %rax,%r11
- adcq $0,%rdx
- movq %r11,592(%rsp)
-
- movq %rdx,%r10
- movq %r8,%rax
- mulq %rbx
- addq %rax,%r12
- adcq $0,%rdx
- addq %r10,%r12
- adcq $0,%rdx
- movq %r12,600(%rsp)
-
- movq %rdx,%r10
- movq %r9,%rax
- mulq %rbx
- addq %rax,%r15
- adcq $0,%rdx
- addq %r10,%r15
- adcq $0,%rdx
-
- movq %rdx,%r11
-
-
-
-
- movq 40(%rcx),%rbx
-
- movq %r8,%rax
- mulq %rbx
- addq %rax,%r15
- adcq $0,%rdx
- movq %r15,608(%rsp)
-
- movq %rdx,%r10
- movq %r9,%rax
- mulq %rbx
- addq %rax,%r11
- adcq $0,%rdx
- addq %r10,%r11
- adcq $0,%rdx
- movq %r11,616(%rsp)
-
- movq %rdx,%r12
-
-
-
-
- movq %r8,%rbx
-
- movq %r9,%rax
- mulq %rbx
- addq %rax,%r12
- adcq $0,%rdx
- movq %r12,624(%rsp)
-
- movq %rdx,632(%rsp)
-
-
- movq 528(%rsp),%r10
- movq 536(%rsp),%r11
- movq 544(%rsp),%r12
- movq 552(%rsp),%r13
- movq 560(%rsp),%r14
- movq 568(%rsp),%r15
-
- movq 24(%rcx),%rax
- mulq %rax
- movq %rax,%rdi
- movq %rdx,%r8
-
- addq %r10,%r10
- adcq %r11,%r11
- adcq %r12,%r12
- adcq %r13,%r13
- adcq %r14,%r14
- adcq %r15,%r15
- adcq $0,%r8
-
- movq 0(%rcx),%rax
- mulq %rax
- movq %rax,520(%rsp)
- movq %rdx,%rbx
-
- movq 8(%rcx),%rax
- mulq %rax
-
- addq %rbx,%r10
- adcq %rax,%r11
- adcq $0,%rdx
-
- movq %rdx,%rbx
- movq %r10,528(%rsp)
- movq %r11,536(%rsp)
-
- movq 16(%rcx),%rax
- mulq %rax
-
- addq %rbx,%r12
- adcq %rax,%r13
- adcq $0,%rdx
-
- movq %rdx,%rbx
-
- movq %r12,544(%rsp)
- movq %r13,552(%rsp)
-
- xorq %rbp,%rbp
- addq %rbx,%r14
- adcq %rdi,%r15
- adcq $0,%rbp
-
- movq %r14,560(%rsp)
- movq %r15,568(%rsp)
-
-
-
-
- movq 576(%rsp),%r10
- movq 584(%rsp),%r11
- movq 592(%rsp),%r12
- movq 600(%rsp),%r13
- movq 608(%rsp),%r14
- movq 616(%rsp),%r15
- movq 624(%rsp),%rdi
- movq 632(%rsp),%rsi
-
- movq %r9,%rax
- mulq %rax
- movq %rax,%r9
- movq %rdx,%rbx
-
- addq %r10,%r10
- adcq %r11,%r11
- adcq %r12,%r12
- adcq %r13,%r13
- adcq %r14,%r14
- adcq %r15,%r15
- adcq %rdi,%rdi
- adcq %rsi,%rsi
- adcq $0,%rbx
-
- addq %rbp,%r10
-
- movq 32(%rcx),%rax
- mulq %rax
-
- addq %r8,%r10
- adcq %rax,%r11
- adcq $0,%rdx
-
- movq %rdx,%rbp
-
- movq %r10,576(%rsp)
- movq %r11,584(%rsp)
-
- movq 40(%rcx),%rax
- mulq %rax
-
- addq %rbp,%r12
- adcq %rax,%r13
- adcq $0,%rdx
-
- movq %rdx,%rbp
-
- movq %r12,592(%rsp)
- movq %r13,600(%rsp)
-
- movq 48(%rcx),%rax
- mulq %rax
-
- addq %rbp,%r14
- adcq %rax,%r15
- adcq $0,%rdx
-
- movq %r14,608(%rsp)
- movq %r15,616(%rsp)
-
- addq %rdx,%rdi
- adcq %r9,%rsi
- adcq $0,%rbx
-
- movq %rdi,624(%rsp)
- movq %rsi,632(%rsp)
- movq %rbx,640(%rsp)
-
- jmp mont_reduce
-
-
-.size sqr_reduce,.-sqr_reduce
-.globl mod_exp_512
-.type mod_exp_512,@function
-mod_exp_512:
- pushq %rbp
- pushq %rbx
- pushq %r12
- pushq %r13
- pushq %r14
- pushq %r15
-
-
- movq %rsp,%r8
- subq $2688,%rsp
- andq $-64,%rsp
-
-
- movq %r8,0(%rsp)
- movq %rdi,8(%rsp)
- movq %rsi,16(%rsp)
- movq %rcx,24(%rsp)
-.Lbody:
-
-
-
- pxor %xmm4,%xmm4
- movdqu 0(%rsi),%xmm0
- movdqu 16(%rsi),%xmm1
- movdqu 32(%rsi),%xmm2
- movdqu 48(%rsi),%xmm3
- movdqa %xmm4,512(%rsp)
- movdqa %xmm4,528(%rsp)
- movdqa %xmm4,608(%rsp)
- movdqa %xmm4,624(%rsp)
- movdqa %xmm0,544(%rsp)
- movdqa %xmm1,560(%rsp)
- movdqa %xmm2,576(%rsp)
- movdqa %xmm3,592(%rsp)
-
-
- movdqu 0(%rdx),%xmm0
- movdqu 16(%rdx),%xmm1
- movdqu 32(%rdx),%xmm2
- movdqu 48(%rdx),%xmm3
-
- leaq 384(%rsp),%rbx
- movq %rbx,136(%rsp)
- call mont_reduce
-
-
- leaq 448(%rsp),%rcx
- xorq %rax,%rax
- movq %rax,0(%rcx)
- movq %rax,8(%rcx)
- movq %rax,24(%rcx)
- movq %rax,32(%rcx)
- movq %rax,40(%rcx)
- movq %rax,48(%rcx)
- movq %rax,56(%rcx)
- movq %rax,128(%rsp)
- movq $1,16(%rcx)
-
- leaq 640(%rsp),%rbp
- movq %rcx,%rsi
- movq %rbp,%rdi
- movq $8,%rax
-loop_0:
- movq (%rcx),%rbx
- movw %bx,(%rdi)
- shrq $16,%rbx
- movw %bx,64(%rdi)
- shrq $16,%rbx
- movw %bx,128(%rdi)
- shrq $16,%rbx
- movw %bx,192(%rdi)
- leaq 8(%rcx),%rcx
- leaq 256(%rdi),%rdi
- decq %rax
- jnz loop_0
- movq $31,%rax
- movq %rax,32(%rsp)
- movq %rbp,40(%rsp)
-
- movq %rsi,136(%rsp)
- movq 0(%rsi),%r10
- movq 8(%rsi),%r11
- movq 16(%rsi),%r12
- movq 24(%rsi),%r13
- movq 32(%rsi),%r14
- movq 40(%rsi),%r15
- movq 48(%rsi),%r8
- movq 56(%rsi),%r9
-init_loop:
- leaq 384(%rsp),%rdi
- call mont_mul_a3b
- leaq 448(%rsp),%rsi
- movq 40(%rsp),%rbp
- addq $2,%rbp
- movq %rbp,40(%rsp)
- movq %rsi,%rcx
- movq $8,%rax
-loop_1:
- movq (%rcx),%rbx
- movw %bx,(%rbp)
- shrq $16,%rbx
- movw %bx,64(%rbp)
- shrq $16,%rbx
- movw %bx,128(%rbp)
- shrq $16,%rbx
- movw %bx,192(%rbp)
- leaq 8(%rcx),%rcx
- leaq 256(%rbp),%rbp
- decq %rax
- jnz loop_1
- movq 32(%rsp),%rax
- subq $1,%rax
- movq %rax,32(%rsp)
- jne init_loop
-
-
-
- movdqa %xmm0,64(%rsp)
- movdqa %xmm1,80(%rsp)
- movdqa %xmm2,96(%rsp)
- movdqa %xmm3,112(%rsp)
-
-
-
-
-
- movl 126(%rsp),%eax
- movq %rax,%rdx
- shrq $11,%rax
- andl $2047,%edx
- movl %edx,126(%rsp)
- leaq 640(%rsp,%rax,2),%rsi
- movq 8(%rsp),%rdx
- movq $4,%rbp
-loop_2:
- movzwq 192(%rsi),%rbx
- movzwq 448(%rsi),%rax
- shlq $16,%rbx
- shlq $16,%rax
- movw 128(%rsi),%bx
- movw 384(%rsi),%ax
- shlq $16,%rbx
- shlq $16,%rax
- movw 64(%rsi),%bx
- movw 320(%rsi),%ax
- shlq $16,%rbx
- shlq $16,%rax
- movw 0(%rsi),%bx
- movw 256(%rsi),%ax
- movq %rbx,0(%rdx)
- movq %rax,8(%rdx)
- leaq 512(%rsi),%rsi
- leaq 16(%rdx),%rdx
- subq $1,%rbp
- jnz loop_2
- movq $505,48(%rsp)
-
- movq 8(%rsp),%rcx
- movq %rcx,136(%rsp)
- movq 0(%rcx),%r10
- movq 8(%rcx),%r11
- movq 16(%rcx),%r12
- movq 24(%rcx),%r13
- movq 32(%rcx),%r14
- movq 40(%rcx),%r15
- movq 48(%rcx),%r8
- movq 56(%rcx),%r9
- jmp sqr_2
-
-main_loop_a3b:
- call sqr_reduce
- call sqr_reduce
- call sqr_reduce
-sqr_2:
- call sqr_reduce
- call sqr_reduce
-
-
-
- movq 48(%rsp),%rcx
- movq %rcx,%rax
- shrq $4,%rax
- movl 64(%rsp,%rax,2),%edx
- andq $15,%rcx
- shrq %cl,%rdx
- andq $31,%rdx
-
- leaq 640(%rsp,%rdx,2),%rsi
- leaq 448(%rsp),%rdx
- movq %rdx,%rdi
- movq $4,%rbp
-loop_3:
- movzwq 192(%rsi),%rbx
- movzwq 448(%rsi),%rax
- shlq $16,%rbx
- shlq $16,%rax
- movw 128(%rsi),%bx
- movw 384(%rsi),%ax
- shlq $16,%rbx
- shlq $16,%rax
- movw 64(%rsi),%bx
- movw 320(%rsi),%ax
- shlq $16,%rbx
- shlq $16,%rax
- movw 0(%rsi),%bx
- movw 256(%rsi),%ax
- movq %rbx,0(%rdx)
- movq %rax,8(%rdx)
- leaq 512(%rsi),%rsi
- leaq 16(%rdx),%rdx
- subq $1,%rbp
- jnz loop_3
- movq 8(%rsp),%rsi
- call mont_mul_a3b
-
-
-
- movq 48(%rsp),%rcx
- subq $5,%rcx
- movq %rcx,48(%rsp)
- jge main_loop_a3b
-
-
-
-end_main_loop_a3b:
-
-
- movq 8(%rsp),%rdx
- pxor %xmm4,%xmm4
- movdqu 0(%rdx),%xmm0
- movdqu 16(%rdx),%xmm1
- movdqu 32(%rdx),%xmm2
- movdqu 48(%rdx),%xmm3
- movdqa %xmm4,576(%rsp)
- movdqa %xmm4,592(%rsp)
- movdqa %xmm4,608(%rsp)
- movdqa %xmm4,624(%rsp)
- movdqa %xmm0,512(%rsp)
- movdqa %xmm1,528(%rsp)
- movdqa %xmm2,544(%rsp)
- movdqa %xmm3,560(%rsp)
- call mont_reduce
-
-
-
- movq 8(%rsp),%rax
- movq 0(%rax),%r8
- movq 8(%rax),%r9
- movq 16(%rax),%r10
- movq 24(%rax),%r11
- movq 32(%rax),%r12
- movq 40(%rax),%r13
- movq 48(%rax),%r14
- movq 56(%rax),%r15
-
-
- movq 24(%rsp),%rbx
- addq $512,%rbx
-
- subq 0(%rbx),%r8
- sbbq 8(%rbx),%r9
- sbbq 16(%rbx),%r10
- sbbq 24(%rbx),%r11
- sbbq 32(%rbx),%r12
- sbbq 40(%rbx),%r13
- sbbq 48(%rbx),%r14
- sbbq 56(%rbx),%r15
-
-
- movq 0(%rax),%rsi
- movq 8(%rax),%rdi
- movq 16(%rax),%rcx
- movq 24(%rax),%rdx
- cmovncq %r8,%rsi
- cmovncq %r9,%rdi
- cmovncq %r10,%rcx
- cmovncq %r11,%rdx
- movq %rsi,0(%rax)
- movq %rdi,8(%rax)
- movq %rcx,16(%rax)
- movq %rdx,24(%rax)
-
- movq 32(%rax),%rsi
- movq 40(%rax),%rdi
- movq 48(%rax),%rcx
- movq 56(%rax),%rdx
- cmovncq %r12,%rsi
- cmovncq %r13,%rdi
- cmovncq %r14,%rcx
- cmovncq %r15,%rdx
- movq %rsi,32(%rax)
- movq %rdi,40(%rax)
- movq %rcx,48(%rax)
- movq %rdx,56(%rax)
-
- movq 0(%rsp),%rsi
- movq 0(%rsi),%r15
- movq 8(%rsi),%r14
- movq 16(%rsi),%r13
- movq 24(%rsi),%r12
- movq 32(%rsi),%rbx
- movq 40(%rsi),%rbp
- leaq 48(%rsi),%rsp
-.Lepilogue:
- .byte 0xf3,0xc3
-.size mod_exp_512, . - mod_exp_512
diff --git a/secure/lib/libcrypto/amd64/rc4-x86_64.S b/secure/lib/libcrypto/amd64/rc4-x86_64.S
index c561af7..c51ca89 100644
--- a/secure/lib/libcrypto/amd64/rc4-x86_64.S
+++ b/secure/lib/libcrypto/amd64/rc4-x86_64.S
@@ -48,7 +48,7 @@ RC4: orq %rsi,%rsi
movl (%rdi,%rax,4),%edx
movl (%rdi,%r10,4),%eax
xorb (%r12),%dl
- movb %dl,(%r13,%r12,1)
+ movb %dl,(%r12,%r13,1)
leaq 1(%r12),%r12
decq %rbx
jnz .Loop8_warmup
@@ -127,7 +127,7 @@ RC4: orq %rsi,%rsi
subq $8,%r11
xorq (%r12),%r8
- movq %r8,(%r13,%r12,1)
+ movq %r8,(%r12,%r13,1)
leaq 8(%r12),%r12
testq $-8,%r11
@@ -153,7 +153,7 @@ RC4: orq %rsi,%rsi
movl (%rdi,%rax,4),%edx
movl (%rdi,%r10,4),%eax
xorb (%r12),%dl
- movb %dl,(%r13,%r12,1)
+ movb %dl,(%r12,%r13,1)
leaq 1(%r12),%r12
decq %rbx
jnz .Loop16_warmup
@@ -190,7 +190,7 @@ RC4: orq %rsi,%rsi
pxor %xmm1,%xmm2
addb %bl,%cl
pinsrw $0,(%rdi,%rax,4),%xmm0
- movdqu %xmm2,(%r13,%r12,1)
+ movdqu %xmm2,(%r12,%r13,1)
leaq 16(%r12),%r12
.Loop16_enter:
movl (%rdi,%rcx,4),%edx
@@ -326,7 +326,7 @@ RC4: orq %rsi,%rsi
psllq $8,%xmm1
pxor %xmm0,%xmm2
pxor %xmm1,%xmm2
- movdqu %xmm2,(%r13,%r12,1)
+ movdqu %xmm2,(%r12,%r13,1)
leaq 16(%r12),%r12
cmpq $0,%r11
@@ -344,7 +344,7 @@ RC4: orq %rsi,%rsi
movl (%rdi,%rax,4),%edx
movl (%rdi,%r10,4),%eax
xorb (%r12),%dl
- movb %dl,(%r13,%r12,1)
+ movb %dl,(%r12,%r13,1)
leaq 1(%r12),%r12
decq %r11
jnz .Lloop1
@@ -369,7 +369,7 @@ RC4: orq %rsi,%rsi
movb %al,(%rdi,%rcx,1)
cmpq %rsi,%rcx
movb %dl,(%rdi,%r10,1)
- jne .Lcmov0
+ jne .Lcmov0
movq %rax,%rbx
.Lcmov0:
addb %al,%dl
@@ -383,7 +383,7 @@ RC4: orq %rsi,%rsi
movb %bl,(%rdi,%rcx,1)
cmpq %r10,%rcx
movb %dl,(%rdi,%rsi,1)
- jne .Lcmov1
+ jne .Lcmov1
movq %rbx,%rax
.Lcmov1:
addb %bl,%dl
@@ -397,7 +397,7 @@ RC4: orq %rsi,%rsi
movb %al,(%rdi,%rcx,1)
cmpq %rsi,%rcx
movb %dl,(%rdi,%r10,1)
- jne .Lcmov2
+ jne .Lcmov2
movq %rax,%rbx
.Lcmov2:
addb %al,%dl
@@ -411,7 +411,7 @@ RC4: orq %rsi,%rsi
movb %bl,(%rdi,%rcx,1)
cmpq %r10,%rcx
movb %dl,(%rdi,%rsi,1)
- jne .Lcmov3
+ jne .Lcmov3
movq %rbx,%rax
.Lcmov3:
addb %bl,%dl
@@ -425,7 +425,7 @@ RC4: orq %rsi,%rsi
movb %al,(%rdi,%rcx,1)
cmpq %rsi,%rcx
movb %dl,(%rdi,%r10,1)
- jne .Lcmov4
+ jne .Lcmov4
movq %rax,%rbx
.Lcmov4:
addb %al,%dl
@@ -439,7 +439,7 @@ RC4: orq %rsi,%rsi
movb %bl,(%rdi,%rcx,1)
cmpq %r10,%rcx
movb %dl,(%rdi,%rsi,1)
- jne .Lcmov5
+ jne .Lcmov5
movq %rbx,%rax
.Lcmov5:
addb %bl,%dl
@@ -453,7 +453,7 @@ RC4: orq %rsi,%rsi
movb %al,(%rdi,%rcx,1)
cmpq %rsi,%rcx
movb %dl,(%rdi,%r10,1)
- jne .Lcmov6
+ jne .Lcmov6
movq %rax,%rbx
.Lcmov6:
addb %al,%dl
@@ -467,7 +467,7 @@ RC4: orq %rsi,%rsi
movb %bl,(%rdi,%rcx,1)
cmpq %r10,%rcx
movb %dl,(%rdi,%rsi,1)
- jne .Lcmov7
+ jne .Lcmov7
movq %rbx,%rax
.Lcmov7:
addb %bl,%dl
diff --git a/secure/lib/libcrypto/amd64/rsaz-avx2.S b/secure/lib/libcrypto/amd64/rsaz-avx2.S
new file mode 100644
index 0000000..ba13765
--- /dev/null
+++ b/secure/lib/libcrypto/amd64/rsaz-avx2.S
@@ -0,0 +1,26 @@
+ # $FreeBSD$
+.text
+
+.globl rsaz_avx2_eligible
+.type rsaz_avx2_eligible,@function
+rsaz_avx2_eligible:
+ xorl %eax,%eax
+ .byte 0xf3,0xc3
+.size rsaz_avx2_eligible,.-rsaz_avx2_eligible
+
+.globl rsaz_1024_sqr_avx2
+.globl rsaz_1024_mul_avx2
+.globl rsaz_1024_norm2red_avx2
+.globl rsaz_1024_red2norm_avx2
+.globl rsaz_1024_scatter5_avx2
+.globl rsaz_1024_gather5_avx2
+.type rsaz_1024_sqr_avx2,@function
+rsaz_1024_sqr_avx2:
+rsaz_1024_mul_avx2:
+rsaz_1024_norm2red_avx2:
+rsaz_1024_red2norm_avx2:
+rsaz_1024_scatter5_avx2:
+rsaz_1024_gather5_avx2:
+.byte 0x0f,0x0b
+ .byte 0xf3,0xc3
+.size rsaz_1024_sqr_avx2,.-rsaz_1024_sqr_avx2
diff --git a/secure/lib/libcrypto/amd64/rsaz-x86_64.S b/secure/lib/libcrypto/amd64/rsaz-x86_64.S
new file mode 100644
index 0000000..efd229a
--- /dev/null
+++ b/secure/lib/libcrypto/amd64/rsaz-x86_64.S
@@ -0,0 +1,1118 @@
+ # $FreeBSD$
+.text
+
+
+
+.globl rsaz_512_sqr
+.type rsaz_512_sqr,@function
+.align 32
+rsaz_512_sqr:
+ pushq %rbx
+ pushq %rbp
+ pushq %r12
+ pushq %r13
+ pushq %r14
+ pushq %r15
+
+ subq $128+24,%rsp
+.Lsqr_body:
+ movq %rdx,%rbp
+ movq (%rsi),%rdx
+ movq 8(%rsi),%rax
+ movq %rcx,128(%rsp)
+ jmp .Loop_sqr
+
+.align 32
+.Loop_sqr:
+ movl %r8d,128+8(%rsp)
+
+ movq %rdx,%rbx
+ mulq %rdx
+ movq %rax,%r8
+ movq 16(%rsi),%rax
+ movq %rdx,%r9
+
+ mulq %rbx
+ addq %rax,%r9
+ movq 24(%rsi),%rax
+ movq %rdx,%r10
+ adcq $0,%r10
+
+ mulq %rbx
+ addq %rax,%r10
+ movq 32(%rsi),%rax
+ movq %rdx,%r11
+ adcq $0,%r11
+
+ mulq %rbx
+ addq %rax,%r11
+ movq 40(%rsi),%rax
+ movq %rdx,%r12
+ adcq $0,%r12
+
+ mulq %rbx
+ addq %rax,%r12
+ movq 48(%rsi),%rax
+ movq %rdx,%r13
+ adcq $0,%r13
+
+ mulq %rbx
+ addq %rax,%r13
+ movq 56(%rsi),%rax
+ movq %rdx,%r14
+ adcq $0,%r14
+
+ mulq %rbx
+ addq %rax,%r14
+ movq %rbx,%rax
+ movq %rdx,%r15
+ adcq $0,%r15
+
+ addq %r8,%r8
+ movq %r9,%rcx
+ adcq %r9,%r9
+
+ mulq %rax
+ movq %rax,(%rsp)
+ addq %rdx,%r8
+ adcq $0,%r9
+
+ movq %r8,8(%rsp)
+ shrq $63,%rcx
+
+
+ movq 8(%rsi),%r8
+ movq 16(%rsi),%rax
+ mulq %r8
+ addq %rax,%r10
+ movq 24(%rsi),%rax
+ movq %rdx,%rbx
+ adcq $0,%rbx
+
+ mulq %r8
+ addq %rax,%r11
+ movq 32(%rsi),%rax
+ adcq $0,%rdx
+ addq %rbx,%r11
+ movq %rdx,%rbx
+ adcq $0,%rbx
+
+ mulq %r8
+ addq %rax,%r12
+ movq 40(%rsi),%rax
+ adcq $0,%rdx
+ addq %rbx,%r12
+ movq %rdx,%rbx
+ adcq $0,%rbx
+
+ mulq %r8
+ addq %rax,%r13
+ movq 48(%rsi),%rax
+ adcq $0,%rdx
+ addq %rbx,%r13
+ movq %rdx,%rbx
+ adcq $0,%rbx
+
+ mulq %r8
+ addq %rax,%r14
+ movq 56(%rsi),%rax
+ adcq $0,%rdx
+ addq %rbx,%r14
+ movq %rdx,%rbx
+ adcq $0,%rbx
+
+ mulq %r8
+ addq %rax,%r15
+ movq %r8,%rax
+ adcq $0,%rdx
+ addq %rbx,%r15
+ movq %rdx,%r8
+ movq %r10,%rdx
+ adcq $0,%r8
+
+ addq %rdx,%rdx
+ leaq (%rcx,%r10,2),%r10
+ movq %r11,%rbx
+ adcq %r11,%r11
+
+ mulq %rax
+ addq %rax,%r9
+ adcq %rdx,%r10
+ adcq $0,%r11
+
+ movq %r9,16(%rsp)
+ movq %r10,24(%rsp)
+ shrq $63,%rbx
+
+
+ movq 16(%rsi),%r9
+ movq 24(%rsi),%rax
+ mulq %r9
+ addq %rax,%r12
+ movq 32(%rsi),%rax
+ movq %rdx,%rcx
+ adcq $0,%rcx
+
+ mulq %r9
+ addq %rax,%r13
+ movq 40(%rsi),%rax
+ adcq $0,%rdx
+ addq %rcx,%r13
+ movq %rdx,%rcx
+ adcq $0,%rcx
+
+ mulq %r9
+ addq %rax,%r14
+ movq 48(%rsi),%rax
+ adcq $0,%rdx
+ addq %rcx,%r14
+ movq %rdx,%rcx
+ adcq $0,%rcx
+
+ mulq %r9
+ movq %r12,%r10
+ leaq (%rbx,%r12,2),%r12
+ addq %rax,%r15
+ movq 56(%rsi),%rax
+ adcq $0,%rdx
+ addq %rcx,%r15
+ movq %rdx,%rcx
+ adcq $0,%rcx
+
+ mulq %r9
+ shrq $63,%r10
+ addq %rax,%r8
+ movq %r9,%rax
+ adcq $0,%rdx
+ addq %rcx,%r8
+ movq %rdx,%r9
+ adcq $0,%r9
+
+ movq %r13,%rcx
+ leaq (%r10,%r13,2),%r13
+
+ mulq %rax
+ addq %rax,%r11
+ adcq %rdx,%r12
+ adcq $0,%r13
+
+ movq %r11,32(%rsp)
+ movq %r12,40(%rsp)
+ shrq $63,%rcx
+
+
+ movq 24(%rsi),%r10
+ movq 32(%rsi),%rax
+ mulq %r10
+ addq %rax,%r14
+ movq 40(%rsi),%rax
+ movq %rdx,%rbx
+ adcq $0,%rbx
+
+ mulq %r10
+ addq %rax,%r15
+ movq 48(%rsi),%rax
+ adcq $0,%rdx
+ addq %rbx,%r15
+ movq %rdx,%rbx
+ adcq $0,%rbx
+
+ mulq %r10
+ movq %r14,%r12
+ leaq (%rcx,%r14,2),%r14
+ addq %rax,%r8
+ movq 56(%rsi),%rax
+ adcq $0,%rdx
+ addq %rbx,%r8
+ movq %rdx,%rbx
+ adcq $0,%rbx
+
+ mulq %r10
+ shrq $63,%r12
+ addq %rax,%r9
+ movq %r10,%rax
+ adcq $0,%rdx
+ addq %rbx,%r9
+ movq %rdx,%r10
+ adcq $0,%r10
+
+ movq %r15,%rbx
+ leaq (%r12,%r15,2),%r15
+
+ mulq %rax
+ addq %rax,%r13
+ adcq %rdx,%r14
+ adcq $0,%r15
+
+ movq %r13,48(%rsp)
+ movq %r14,56(%rsp)
+ shrq $63,%rbx
+
+
+ movq 32(%rsi),%r11
+ movq 40(%rsi),%rax
+ mulq %r11
+ addq %rax,%r8
+ movq 48(%rsi),%rax
+ movq %rdx,%rcx
+ adcq $0,%rcx
+
+ mulq %r11
+ addq %rax,%r9
+ movq 56(%rsi),%rax
+ adcq $0,%rdx
+ movq %r8,%r12
+ leaq (%rbx,%r8,2),%r8
+ addq %rcx,%r9
+ movq %rdx,%rcx
+ adcq $0,%rcx
+
+ mulq %r11
+ shrq $63,%r12
+ addq %rax,%r10
+ movq %r11,%rax
+ adcq $0,%rdx
+ addq %rcx,%r10
+ movq %rdx,%r11
+ adcq $0,%r11
+
+ movq %r9,%rcx
+ leaq (%r12,%r9,2),%r9
+
+ mulq %rax
+ addq %rax,%r15
+ adcq %rdx,%r8
+ adcq $0,%r9
+
+ movq %r15,64(%rsp)
+ movq %r8,72(%rsp)
+ shrq $63,%rcx
+
+
+ movq 40(%rsi),%r12
+ movq 48(%rsi),%rax
+ mulq %r12
+ addq %rax,%r10
+ movq 56(%rsi),%rax
+ movq %rdx,%rbx
+ adcq $0,%rbx
+
+ mulq %r12
+ addq %rax,%r11
+ movq %r12,%rax
+ movq %r10,%r15
+ leaq (%rcx,%r10,2),%r10
+ adcq $0,%rdx
+ shrq $63,%r15
+ addq %rbx,%r11
+ movq %rdx,%r12
+ adcq $0,%r12
+
+ movq %r11,%rbx
+ leaq (%r15,%r11,2),%r11
+
+ mulq %rax
+ addq %rax,%r9
+ adcq %rdx,%r10
+ adcq $0,%r11
+
+ movq %r9,80(%rsp)
+ movq %r10,88(%rsp)
+
+
+ movq 48(%rsi),%r13
+ movq 56(%rsi),%rax
+ mulq %r13
+ addq %rax,%r12
+ movq %r13,%rax
+ movq %rdx,%r13
+ adcq $0,%r13
+
+ xorq %r14,%r14
+ shlq $1,%rbx
+ adcq %r12,%r12
+ adcq %r13,%r13
+ adcq %r14,%r14
+
+ mulq %rax
+ addq %rax,%r11
+ adcq %rdx,%r12
+ adcq $0,%r13
+
+ movq %r11,96(%rsp)
+ movq %r12,104(%rsp)
+
+
+ movq 56(%rsi),%rax
+ mulq %rax
+ addq %rax,%r13
+ adcq $0,%rdx
+
+ addq %rdx,%r14
+
+ movq %r13,112(%rsp)
+ movq %r14,120(%rsp)
+
+ movq (%rsp),%r8
+ movq 8(%rsp),%r9
+ movq 16(%rsp),%r10
+ movq 24(%rsp),%r11
+ movq 32(%rsp),%r12
+ movq 40(%rsp),%r13
+ movq 48(%rsp),%r14
+ movq 56(%rsp),%r15
+
+ call __rsaz_512_reduce
+
+ addq 64(%rsp),%r8
+ adcq 72(%rsp),%r9
+ adcq 80(%rsp),%r10
+ adcq 88(%rsp),%r11
+ adcq 96(%rsp),%r12
+ adcq 104(%rsp),%r13
+ adcq 112(%rsp),%r14
+ adcq 120(%rsp),%r15
+ sbbq %rcx,%rcx
+
+ call __rsaz_512_subtract
+
+ movq %r8,%rdx
+ movq %r9,%rax
+ movl 128+8(%rsp),%r8d
+ movq %rdi,%rsi
+
+ decl %r8d
+ jnz .Loop_sqr
+
+ leaq 128+24+48(%rsp),%rax
+ movq -48(%rax),%r15
+ movq -40(%rax),%r14
+ movq -32(%rax),%r13
+ movq -24(%rax),%r12
+ movq -16(%rax),%rbp
+ movq -8(%rax),%rbx
+ leaq (%rax),%rsp
+.Lsqr_epilogue:
+ .byte 0xf3,0xc3
+.size rsaz_512_sqr,.-rsaz_512_sqr
+.globl rsaz_512_mul
+.type rsaz_512_mul,@function
+.align 32
+rsaz_512_mul:
+ pushq %rbx
+ pushq %rbp
+ pushq %r12
+ pushq %r13
+ pushq %r14
+ pushq %r15
+
+ subq $128+24,%rsp
+.Lmul_body:
+.byte 102,72,15,110,199
+.byte 102,72,15,110,201
+ movq %r8,128(%rsp)
+ movq (%rdx),%rbx
+ movq %rdx,%rbp
+ call __rsaz_512_mul
+
+.byte 102,72,15,126,199
+.byte 102,72,15,126,205
+
+ movq (%rsp),%r8
+ movq 8(%rsp),%r9
+ movq 16(%rsp),%r10
+ movq 24(%rsp),%r11
+ movq 32(%rsp),%r12
+ movq 40(%rsp),%r13
+ movq 48(%rsp),%r14
+ movq 56(%rsp),%r15
+
+ call __rsaz_512_reduce
+ addq 64(%rsp),%r8
+ adcq 72(%rsp),%r9
+ adcq 80(%rsp),%r10
+ adcq 88(%rsp),%r11
+ adcq 96(%rsp),%r12
+ adcq 104(%rsp),%r13
+ adcq 112(%rsp),%r14
+ adcq 120(%rsp),%r15
+ sbbq %rcx,%rcx
+
+ call __rsaz_512_subtract
+
+ leaq 128+24+48(%rsp),%rax
+ movq -48(%rax),%r15
+ movq -40(%rax),%r14
+ movq -32(%rax),%r13
+ movq -24(%rax),%r12
+ movq -16(%rax),%rbp
+ movq -8(%rax),%rbx
+ leaq (%rax),%rsp
+.Lmul_epilogue:
+ .byte 0xf3,0xc3
+.size rsaz_512_mul,.-rsaz_512_mul
+.globl rsaz_512_mul_gather4
+.type rsaz_512_mul_gather4,@function
+.align 32
+rsaz_512_mul_gather4:
+ pushq %rbx
+ pushq %rbp
+ pushq %r12
+ pushq %r13
+ pushq %r14
+ pushq %r15
+
+ movl %r9d,%r9d
+ subq $128+24,%rsp
+.Lmul_gather4_body:
+ movl 64(%rdx,%r9,4),%eax
+.byte 102,72,15,110,199
+ movl (%rdx,%r9,4),%ebx
+.byte 102,72,15,110,201
+ movq %r8,128(%rsp)
+
+ shlq $32,%rax
+ orq %rax,%rbx
+ movq (%rsi),%rax
+ movq 8(%rsi),%rcx
+ leaq 128(%rdx,%r9,4),%rbp
+ mulq %rbx
+ movq %rax,(%rsp)
+ movq %rcx,%rax
+ movq %rdx,%r8
+
+ mulq %rbx
+ movd (%rbp),%xmm4
+ addq %rax,%r8
+ movq 16(%rsi),%rax
+ movq %rdx,%r9
+ adcq $0,%r9
+
+ mulq %rbx
+ movd 64(%rbp),%xmm5
+ addq %rax,%r9
+ movq 24(%rsi),%rax
+ movq %rdx,%r10
+ adcq $0,%r10
+
+ mulq %rbx
+ pslldq $4,%xmm5
+ addq %rax,%r10
+ movq 32(%rsi),%rax
+ movq %rdx,%r11
+ adcq $0,%r11
+
+ mulq %rbx
+ por %xmm5,%xmm4
+ addq %rax,%r11
+ movq 40(%rsi),%rax
+ movq %rdx,%r12
+ adcq $0,%r12
+
+ mulq %rbx
+ addq %rax,%r12
+ movq 48(%rsi),%rax
+ movq %rdx,%r13
+ adcq $0,%r13
+
+ mulq %rbx
+ leaq 128(%rbp),%rbp
+ addq %rax,%r13
+ movq 56(%rsi),%rax
+ movq %rdx,%r14
+ adcq $0,%r14
+
+ mulq %rbx
+.byte 102,72,15,126,227
+ addq %rax,%r14
+ movq (%rsi),%rax
+ movq %rdx,%r15
+ adcq $0,%r15
+
+ leaq 8(%rsp),%rdi
+ movl $7,%ecx
+ jmp .Loop_mul_gather
+
+.align 32
+.Loop_mul_gather:
+ mulq %rbx
+ addq %rax,%r8
+ movq 8(%rsi),%rax
+ movq %r8,(%rdi)
+ movq %rdx,%r8
+ adcq $0,%r8
+
+ mulq %rbx
+ movd (%rbp),%xmm4
+ addq %rax,%r9
+ movq 16(%rsi),%rax
+ adcq $0,%rdx
+ addq %r9,%r8
+ movq %rdx,%r9
+ adcq $0,%r9
+
+ mulq %rbx
+ movd 64(%rbp),%xmm5
+ addq %rax,%r10
+ movq 24(%rsi),%rax
+ adcq $0,%rdx
+ addq %r10,%r9
+ movq %rdx,%r10
+ adcq $0,%r10
+
+ mulq %rbx
+ pslldq $4,%xmm5
+ addq %rax,%r11
+ movq 32(%rsi),%rax
+ adcq $0,%rdx
+ addq %r11,%r10
+ movq %rdx,%r11
+ adcq $0,%r11
+
+ mulq %rbx
+ por %xmm5,%xmm4
+ addq %rax,%r12
+ movq 40(%rsi),%rax
+ adcq $0,%rdx
+ addq %r12,%r11
+ movq %rdx,%r12
+ adcq $0,%r12
+
+ mulq %rbx
+ addq %rax,%r13
+ movq 48(%rsi),%rax
+ adcq $0,%rdx
+ addq %r13,%r12
+ movq %rdx,%r13
+ adcq $0,%r13
+
+ mulq %rbx
+ addq %rax,%r14
+ movq 56(%rsi),%rax
+ adcq $0,%rdx
+ addq %r14,%r13
+ movq %rdx,%r14
+ adcq $0,%r14
+
+ mulq %rbx
+.byte 102,72,15,126,227
+ addq %rax,%r15
+ movq (%rsi),%rax
+ adcq $0,%rdx
+ addq %r15,%r14
+ movq %rdx,%r15
+ adcq $0,%r15
+
+ leaq 128(%rbp),%rbp
+ leaq 8(%rdi),%rdi
+
+ decl %ecx
+ jnz .Loop_mul_gather
+
+ movq %r8,(%rdi)
+ movq %r9,8(%rdi)
+ movq %r10,16(%rdi)
+ movq %r11,24(%rdi)
+ movq %r12,32(%rdi)
+ movq %r13,40(%rdi)
+ movq %r14,48(%rdi)
+ movq %r15,56(%rdi)
+
+.byte 102,72,15,126,199
+.byte 102,72,15,126,205
+
+ movq (%rsp),%r8
+ movq 8(%rsp),%r9
+ movq 16(%rsp),%r10
+ movq 24(%rsp),%r11
+ movq 32(%rsp),%r12
+ movq 40(%rsp),%r13
+ movq 48(%rsp),%r14
+ movq 56(%rsp),%r15
+
+ call __rsaz_512_reduce
+ addq 64(%rsp),%r8
+ adcq 72(%rsp),%r9
+ adcq 80(%rsp),%r10
+ adcq 88(%rsp),%r11
+ adcq 96(%rsp),%r12
+ adcq 104(%rsp),%r13
+ adcq 112(%rsp),%r14
+ adcq 120(%rsp),%r15
+ sbbq %rcx,%rcx
+
+ call __rsaz_512_subtract
+
+ leaq 128+24+48(%rsp),%rax
+ movq -48(%rax),%r15
+ movq -40(%rax),%r14
+ movq -32(%rax),%r13
+ movq -24(%rax),%r12
+ movq -16(%rax),%rbp
+ movq -8(%rax),%rbx
+ leaq (%rax),%rsp
+.Lmul_gather4_epilogue:
+ .byte 0xf3,0xc3
+.size rsaz_512_mul_gather4,.-rsaz_512_mul_gather4
+.globl rsaz_512_mul_scatter4
+.type rsaz_512_mul_scatter4,@function
+.align 32
+rsaz_512_mul_scatter4:
+ pushq %rbx
+ pushq %rbp
+ pushq %r12
+ pushq %r13
+ pushq %r14
+ pushq %r15
+
+ movl %r9d,%r9d
+ subq $128+24,%rsp
+.Lmul_scatter4_body:
+ leaq (%r8,%r9,4),%r8
+.byte 102,72,15,110,199
+.byte 102,72,15,110,202
+.byte 102,73,15,110,208
+ movq %rcx,128(%rsp)
+
+ movq %rdi,%rbp
+ movq (%rdi),%rbx
+ call __rsaz_512_mul
+
+.byte 102,72,15,126,199
+.byte 102,72,15,126,205
+
+ movq (%rsp),%r8
+ movq 8(%rsp),%r9
+ movq 16(%rsp),%r10
+ movq 24(%rsp),%r11
+ movq 32(%rsp),%r12
+ movq 40(%rsp),%r13
+ movq 48(%rsp),%r14
+ movq 56(%rsp),%r15
+
+ call __rsaz_512_reduce
+ addq 64(%rsp),%r8
+ adcq 72(%rsp),%r9
+ adcq 80(%rsp),%r10
+ adcq 88(%rsp),%r11
+ adcq 96(%rsp),%r12
+ adcq 104(%rsp),%r13
+ adcq 112(%rsp),%r14
+ adcq 120(%rsp),%r15
+.byte 102,72,15,126,214
+ sbbq %rcx,%rcx
+
+ call __rsaz_512_subtract
+
+ movl %r8d,0(%rsi)
+ shrq $32,%r8
+ movl %r9d,128(%rsi)
+ shrq $32,%r9
+ movl %r10d,256(%rsi)
+ shrq $32,%r10
+ movl %r11d,384(%rsi)
+ shrq $32,%r11
+ movl %r12d,512(%rsi)
+ shrq $32,%r12
+ movl %r13d,640(%rsi)
+ shrq $32,%r13
+ movl %r14d,768(%rsi)
+ shrq $32,%r14
+ movl %r15d,896(%rsi)
+ shrq $32,%r15
+ movl %r8d,64(%rsi)
+ movl %r9d,192(%rsi)
+ movl %r10d,320(%rsi)
+ movl %r11d,448(%rsi)
+ movl %r12d,576(%rsi)
+ movl %r13d,704(%rsi)
+ movl %r14d,832(%rsi)
+ movl %r15d,960(%rsi)
+
+ leaq 128+24+48(%rsp),%rax
+ movq -48(%rax),%r15
+ movq -40(%rax),%r14
+ movq -32(%rax),%r13
+ movq -24(%rax),%r12
+ movq -16(%rax),%rbp
+ movq -8(%rax),%rbx
+ leaq (%rax),%rsp
+.Lmul_scatter4_epilogue:
+ .byte 0xf3,0xc3
+.size rsaz_512_mul_scatter4,.-rsaz_512_mul_scatter4
+.globl rsaz_512_mul_by_one
+.type rsaz_512_mul_by_one,@function
+.align 32
+rsaz_512_mul_by_one:
+ pushq %rbx
+ pushq %rbp
+ pushq %r12
+ pushq %r13
+ pushq %r14
+ pushq %r15
+
+ subq $128+24,%rsp
+.Lmul_by_one_body:
+ movq %rdx,%rbp
+ movq %rcx,128(%rsp)
+
+ movq (%rsi),%r8
+ pxor %xmm0,%xmm0
+ movq 8(%rsi),%r9
+ movq 16(%rsi),%r10
+ movq 24(%rsi),%r11
+ movq 32(%rsi),%r12
+ movq 40(%rsi),%r13
+ movq 48(%rsi),%r14
+ movq 56(%rsi),%r15
+
+ movdqa %xmm0,(%rsp)
+ movdqa %xmm0,16(%rsp)
+ movdqa %xmm0,32(%rsp)
+ movdqa %xmm0,48(%rsp)
+ movdqa %xmm0,64(%rsp)
+ movdqa %xmm0,80(%rsp)
+ movdqa %xmm0,96(%rsp)
+ call __rsaz_512_reduce
+ movq %r8,(%rdi)
+ movq %r9,8(%rdi)
+ movq %r10,16(%rdi)
+ movq %r11,24(%rdi)
+ movq %r12,32(%rdi)
+ movq %r13,40(%rdi)
+ movq %r14,48(%rdi)
+ movq %r15,56(%rdi)
+
+ leaq 128+24+48(%rsp),%rax
+ movq -48(%rax),%r15
+ movq -40(%rax),%r14
+ movq -32(%rax),%r13
+ movq -24(%rax),%r12
+ movq -16(%rax),%rbp
+ movq -8(%rax),%rbx
+ leaq (%rax),%rsp
+.Lmul_by_one_epilogue:
+ .byte 0xf3,0xc3
+.size rsaz_512_mul_by_one,.-rsaz_512_mul_by_one
+.type __rsaz_512_reduce,@function
+.align 32
+__rsaz_512_reduce:
+ movq %r8,%rbx
+ imulq 128+8(%rsp),%rbx
+ movq 0(%rbp),%rax
+ movl $8,%ecx
+ jmp .Lreduction_loop
+
+.align 32
+.Lreduction_loop:
+ mulq %rbx
+ movq 8(%rbp),%rax
+ negq %r8
+ movq %rdx,%r8
+ adcq $0,%r8
+
+ mulq %rbx
+ addq %rax,%r9
+ movq 16(%rbp),%rax
+ adcq $0,%rdx
+ addq %r9,%r8
+ movq %rdx,%r9
+ adcq $0,%r9
+
+ mulq %rbx
+ addq %rax,%r10
+ movq 24(%rbp),%rax
+ adcq $0,%rdx
+ addq %r10,%r9
+ movq %rdx,%r10
+ adcq $0,%r10
+
+ mulq %rbx
+ addq %rax,%r11
+ movq 32(%rbp),%rax
+ adcq $0,%rdx
+ addq %r11,%r10
+ movq 128+8(%rsp),%rsi
+
+
+ adcq $0,%rdx
+ movq %rdx,%r11
+
+ mulq %rbx
+ addq %rax,%r12
+ movq 40(%rbp),%rax
+ adcq $0,%rdx
+ imulq %r8,%rsi
+ addq %r12,%r11
+ movq %rdx,%r12
+ adcq $0,%r12
+
+ mulq %rbx
+ addq %rax,%r13
+ movq 48(%rbp),%rax
+ adcq $0,%rdx
+ addq %r13,%r12
+ movq %rdx,%r13
+ adcq $0,%r13
+
+ mulq %rbx
+ addq %rax,%r14
+ movq 56(%rbp),%rax
+ adcq $0,%rdx
+ addq %r14,%r13
+ movq %rdx,%r14
+ adcq $0,%r14
+
+ mulq %rbx
+ movq %rsi,%rbx
+ addq %rax,%r15
+ movq 0(%rbp),%rax
+ adcq $0,%rdx
+ addq %r15,%r14
+ movq %rdx,%r15
+ adcq $0,%r15
+
+ decl %ecx
+ jne .Lreduction_loop
+
+ .byte 0xf3,0xc3
+.size __rsaz_512_reduce,.-__rsaz_512_reduce
+.type __rsaz_512_subtract,@function
+.align 32
+__rsaz_512_subtract:
+ movq %r8,(%rdi)
+ movq %r9,8(%rdi)
+ movq %r10,16(%rdi)
+ movq %r11,24(%rdi)
+ movq %r12,32(%rdi)
+ movq %r13,40(%rdi)
+ movq %r14,48(%rdi)
+ movq %r15,56(%rdi)
+
+ movq 0(%rbp),%r8
+ movq 8(%rbp),%r9
+ negq %r8
+ notq %r9
+ andq %rcx,%r8
+ movq 16(%rbp),%r10
+ andq %rcx,%r9
+ notq %r10
+ movq 24(%rbp),%r11
+ andq %rcx,%r10
+ notq %r11
+ movq 32(%rbp),%r12
+ andq %rcx,%r11
+ notq %r12
+ movq 40(%rbp),%r13
+ andq %rcx,%r12
+ notq %r13
+ movq 48(%rbp),%r14
+ andq %rcx,%r13
+ notq %r14
+ movq 56(%rbp),%r15
+ andq %rcx,%r14
+ notq %r15
+ andq %rcx,%r15
+
+ addq (%rdi),%r8
+ adcq 8(%rdi),%r9
+ adcq 16(%rdi),%r10
+ adcq 24(%rdi),%r11
+ adcq 32(%rdi),%r12
+ adcq 40(%rdi),%r13
+ adcq 48(%rdi),%r14
+ adcq 56(%rdi),%r15
+
+ movq %r8,(%rdi)
+ movq %r9,8(%rdi)
+ movq %r10,16(%rdi)
+ movq %r11,24(%rdi)
+ movq %r12,32(%rdi)
+ movq %r13,40(%rdi)
+ movq %r14,48(%rdi)
+ movq %r15,56(%rdi)
+
+ .byte 0xf3,0xc3
+.size __rsaz_512_subtract,.-__rsaz_512_subtract
+.type __rsaz_512_mul,@function
+.align 32
+__rsaz_512_mul:
+ leaq 8(%rsp),%rdi
+
+ movq (%rsi),%rax
+ mulq %rbx
+ movq %rax,(%rdi)
+ movq 8(%rsi),%rax
+ movq %rdx,%r8
+
+ mulq %rbx
+ addq %rax,%r8
+ movq 16(%rsi),%rax
+ movq %rdx,%r9
+ adcq $0,%r9
+
+ mulq %rbx
+ addq %rax,%r9
+ movq 24(%rsi),%rax
+ movq %rdx,%r10
+ adcq $0,%r10
+
+ mulq %rbx
+ addq %rax,%r10
+ movq 32(%rsi),%rax
+ movq %rdx,%r11
+ adcq $0,%r11
+
+ mulq %rbx
+ addq %rax,%r11
+ movq 40(%rsi),%rax
+ movq %rdx,%r12
+ adcq $0,%r12
+
+ mulq %rbx
+ addq %rax,%r12
+ movq 48(%rsi),%rax
+ movq %rdx,%r13
+ adcq $0,%r13
+
+ mulq %rbx
+ addq %rax,%r13
+ movq 56(%rsi),%rax
+ movq %rdx,%r14
+ adcq $0,%r14
+
+ mulq %rbx
+ addq %rax,%r14
+ movq (%rsi),%rax
+ movq %rdx,%r15
+ adcq $0,%r15
+
+ leaq 8(%rbp),%rbp
+ leaq 8(%rdi),%rdi
+
+ movl $7,%ecx
+ jmp .Loop_mul
+
+.align 32
+.Loop_mul:
+ movq (%rbp),%rbx
+ mulq %rbx
+ addq %rax,%r8
+ movq 8(%rsi),%rax
+ movq %r8,(%rdi)
+ movq %rdx,%r8
+ adcq $0,%r8
+
+ mulq %rbx
+ addq %rax,%r9
+ movq 16(%rsi),%rax
+ adcq $0,%rdx
+ addq %r9,%r8
+ movq %rdx,%r9
+ adcq $0,%r9
+
+ mulq %rbx
+ addq %rax,%r10
+ movq 24(%rsi),%rax
+ adcq $0,%rdx
+ addq %r10,%r9
+ movq %rdx,%r10
+ adcq $0,%r10
+
+ mulq %rbx
+ addq %rax,%r11
+ movq 32(%rsi),%rax
+ adcq $0,%rdx
+ addq %r11,%r10
+ movq %rdx,%r11
+ adcq $0,%r11
+
+ mulq %rbx
+ addq %rax,%r12
+ movq 40(%rsi),%rax
+ adcq $0,%rdx
+ addq %r12,%r11
+ movq %rdx,%r12
+ adcq $0,%r12
+
+ mulq %rbx
+ addq %rax,%r13
+ movq 48(%rsi),%rax
+ adcq $0,%rdx
+ addq %r13,%r12
+ movq %rdx,%r13
+ adcq $0,%r13
+
+ mulq %rbx
+ addq %rax,%r14
+ movq 56(%rsi),%rax
+ adcq $0,%rdx
+ addq %r14,%r13
+ movq %rdx,%r14
+ leaq 8(%rbp),%rbp
+ adcq $0,%r14
+
+ mulq %rbx
+ addq %rax,%r15
+ movq (%rsi),%rax
+ adcq $0,%rdx
+ addq %r15,%r14
+ movq %rdx,%r15
+ adcq $0,%r15
+
+ leaq 8(%rdi),%rdi
+
+ decl %ecx
+ jnz .Loop_mul
+
+ movq %r8,(%rdi)
+ movq %r9,8(%rdi)
+ movq %r10,16(%rdi)
+ movq %r11,24(%rdi)
+ movq %r12,32(%rdi)
+ movq %r13,40(%rdi)
+ movq %r14,48(%rdi)
+ movq %r15,56(%rdi)
+
+ .byte 0xf3,0xc3
+.size __rsaz_512_mul,.-__rsaz_512_mul
+.globl rsaz_512_scatter4
+.type rsaz_512_scatter4,@function
+.align 16
+rsaz_512_scatter4:
+ leaq (%rdi,%rdx,4),%rdi
+ movl $8,%r9d
+ jmp .Loop_scatter
+.align 16
+.Loop_scatter:
+ movq (%rsi),%rax
+ leaq 8(%rsi),%rsi
+ movl %eax,(%rdi)
+ shrq $32,%rax
+ movl %eax,64(%rdi)
+ leaq 128(%rdi),%rdi
+ decl %r9d
+ jnz .Loop_scatter
+ .byte 0xf3,0xc3
+.size rsaz_512_scatter4,.-rsaz_512_scatter4
+
+.globl rsaz_512_gather4
+.type rsaz_512_gather4,@function
+.align 16
+rsaz_512_gather4:
+ leaq (%rsi,%rdx,4),%rsi
+ movl $8,%r9d
+ jmp .Loop_gather
+.align 16
+.Loop_gather:
+ movl (%rsi),%eax
+ movl 64(%rsi),%r8d
+ leaq 128(%rsi),%rsi
+ shlq $32,%r8
+ orq %r8,%rax
+ movq %rax,(%rdi)
+ leaq 8(%rdi),%rdi
+ decl %r9d
+ jnz .Loop_gather
+ .byte 0xf3,0xc3
+.size rsaz_512_gather4,.-rsaz_512_gather4
diff --git a/secure/lib/libcrypto/amd64/sha1-mb-x86_64.S b/secure/lib/libcrypto/amd64/sha1-mb-x86_64.S
new file mode 100644
index 0000000..6c7cd2f
--- /dev/null
+++ b/secure/lib/libcrypto/amd64/sha1-mb-x86_64.S
@@ -0,0 +1,2935 @@
+ # $FreeBSD$
+.text
+
+
+
+.globl sha1_multi_block
+.type sha1_multi_block,@function
+.align 32
+sha1_multi_block:
+ movq OPENSSL_ia32cap_P+4(%rip),%rcx
+ btq $61,%rcx
+ jc _shaext_shortcut
+ movq %rsp,%rax
+ pushq %rbx
+ pushq %rbp
+ subq $288,%rsp
+ andq $-256,%rsp
+ movq %rax,272(%rsp)
+.Lbody:
+ leaq K_XX_XX(%rip),%rbp
+ leaq 256(%rsp),%rbx
+
+.Loop_grande:
+ movl %edx,280(%rsp)
+ xorl %edx,%edx
+ movq 0(%rsi),%r8
+ movl 8(%rsi),%ecx
+ cmpl %edx,%ecx
+ cmovgl %ecx,%edx
+ testl %ecx,%ecx
+ movl %ecx,0(%rbx)
+ cmovleq %rbp,%r8
+ movq 16(%rsi),%r9
+ movl 24(%rsi),%ecx
+ cmpl %edx,%ecx
+ cmovgl %ecx,%edx
+ testl %ecx,%ecx
+ movl %ecx,4(%rbx)
+ cmovleq %rbp,%r9
+ movq 32(%rsi),%r10
+ movl 40(%rsi),%ecx
+ cmpl %edx,%ecx
+ cmovgl %ecx,%edx
+ testl %ecx,%ecx
+ movl %ecx,8(%rbx)
+ cmovleq %rbp,%r10
+ movq 48(%rsi),%r11
+ movl 56(%rsi),%ecx
+ cmpl %edx,%ecx
+ cmovgl %ecx,%edx
+ testl %ecx,%ecx
+ movl %ecx,12(%rbx)
+ cmovleq %rbp,%r11
+ testl %edx,%edx
+ jz .Ldone
+
+ movdqu 0(%rdi),%xmm10
+ leaq 128(%rsp),%rax
+ movdqu 32(%rdi),%xmm11
+ movdqu 64(%rdi),%xmm12
+ movdqu 96(%rdi),%xmm13
+ movdqu 128(%rdi),%xmm14
+ movdqa 96(%rbp),%xmm5
+ movdqa -32(%rbp),%xmm15
+ jmp .Loop
+
+.align 32
+.Loop:
+ movd (%r8),%xmm0
+ leaq 64(%r8),%r8
+ movd (%r9),%xmm2
+ leaq 64(%r9),%r9
+ movd (%r10),%xmm3
+ leaq 64(%r10),%r10
+ movd (%r11),%xmm4
+ leaq 64(%r11),%r11
+ punpckldq %xmm3,%xmm0
+ movd -60(%r8),%xmm1
+ punpckldq %xmm4,%xmm2
+ movd -60(%r9),%xmm9
+ punpckldq %xmm2,%xmm0
+ movd -60(%r10),%xmm8
+.byte 102,15,56,0,197
+ movd -60(%r11),%xmm7
+ punpckldq %xmm8,%xmm1
+ movdqa %xmm10,%xmm8
+ paddd %xmm15,%xmm14
+ punpckldq %xmm7,%xmm9
+ movdqa %xmm11,%xmm7
+ movdqa %xmm11,%xmm6
+ pslld $5,%xmm8
+ pandn %xmm13,%xmm7
+ pand %xmm12,%xmm6
+ punpckldq %xmm9,%xmm1
+ movdqa %xmm10,%xmm9
+
+ movdqa %xmm0,0-128(%rax)
+ paddd %xmm0,%xmm14
+ movd -56(%r8),%xmm2
+ psrld $27,%xmm9
+ pxor %xmm7,%xmm6
+ movdqa %xmm11,%xmm7
+
+ por %xmm9,%xmm8
+ movd -56(%r9),%xmm9
+ pslld $30,%xmm7
+ paddd %xmm6,%xmm14
+
+ psrld $2,%xmm11
+ paddd %xmm8,%xmm14
+.byte 102,15,56,0,205
+ movd -56(%r10),%xmm8
+ por %xmm7,%xmm11
+ movd -56(%r11),%xmm7
+ punpckldq %xmm8,%xmm2
+ movdqa %xmm14,%xmm8
+ paddd %xmm15,%xmm13
+ punpckldq %xmm7,%xmm9
+ movdqa %xmm10,%xmm7
+ movdqa %xmm10,%xmm6
+ pslld $5,%xmm8
+ pandn %xmm12,%xmm7
+ pand %xmm11,%xmm6
+ punpckldq %xmm9,%xmm2
+ movdqa %xmm14,%xmm9
+
+ movdqa %xmm1,16-128(%rax)
+ paddd %xmm1,%xmm13
+ movd -52(%r8),%xmm3
+ psrld $27,%xmm9
+ pxor %xmm7,%xmm6
+ movdqa %xmm10,%xmm7
+
+ por %xmm9,%xmm8
+ movd -52(%r9),%xmm9
+ pslld $30,%xmm7
+ paddd %xmm6,%xmm13
+
+ psrld $2,%xmm10
+ paddd %xmm8,%xmm13
+.byte 102,15,56,0,213
+ movd -52(%r10),%xmm8
+ por %xmm7,%xmm10
+ movd -52(%r11),%xmm7
+ punpckldq %xmm8,%xmm3
+ movdqa %xmm13,%xmm8
+ paddd %xmm15,%xmm12
+ punpckldq %xmm7,%xmm9
+ movdqa %xmm14,%xmm7
+ movdqa %xmm14,%xmm6
+ pslld $5,%xmm8
+ pandn %xmm11,%xmm7
+ pand %xmm10,%xmm6
+ punpckldq %xmm9,%xmm3
+ movdqa %xmm13,%xmm9
+
+ movdqa %xmm2,32-128(%rax)
+ paddd %xmm2,%xmm12
+ movd -48(%r8),%xmm4
+ psrld $27,%xmm9
+ pxor %xmm7,%xmm6
+ movdqa %xmm14,%xmm7
+
+ por %xmm9,%xmm8
+ movd -48(%r9),%xmm9
+ pslld $30,%xmm7
+ paddd %xmm6,%xmm12
+
+ psrld $2,%xmm14
+ paddd %xmm8,%xmm12
+.byte 102,15,56,0,221
+ movd -48(%r10),%xmm8
+ por %xmm7,%xmm14
+ movd -48(%r11),%xmm7
+ punpckldq %xmm8,%xmm4
+ movdqa %xmm12,%xmm8
+ paddd %xmm15,%xmm11
+ punpckldq %xmm7,%xmm9
+ movdqa %xmm13,%xmm7
+ movdqa %xmm13,%xmm6
+ pslld $5,%xmm8
+ pandn %xmm10,%xmm7
+ pand %xmm14,%xmm6
+ punpckldq %xmm9,%xmm4
+ movdqa %xmm12,%xmm9
+
+ movdqa %xmm3,48-128(%rax)
+ paddd %xmm3,%xmm11
+ movd -44(%r8),%xmm0
+ psrld $27,%xmm9
+ pxor %xmm7,%xmm6
+ movdqa %xmm13,%xmm7
+
+ por %xmm9,%xmm8
+ movd -44(%r9),%xmm9
+ pslld $30,%xmm7
+ paddd %xmm6,%xmm11
+
+ psrld $2,%xmm13
+ paddd %xmm8,%xmm11
+.byte 102,15,56,0,229
+ movd -44(%r10),%xmm8
+ por %xmm7,%xmm13
+ movd -44(%r11),%xmm7
+ punpckldq %xmm8,%xmm0
+ movdqa %xmm11,%xmm8
+ paddd %xmm15,%xmm10
+ punpckldq %xmm7,%xmm9
+ movdqa %xmm12,%xmm7
+ movdqa %xmm12,%xmm6
+ pslld $5,%xmm8
+ pandn %xmm14,%xmm7
+ pand %xmm13,%xmm6
+ punpckldq %xmm9,%xmm0
+ movdqa %xmm11,%xmm9
+
+ movdqa %xmm4,64-128(%rax)
+ paddd %xmm4,%xmm10
+ movd -40(%r8),%xmm1
+ psrld $27,%xmm9
+ pxor %xmm7,%xmm6
+ movdqa %xmm12,%xmm7
+
+ por %xmm9,%xmm8
+ movd -40(%r9),%xmm9
+ pslld $30,%xmm7
+ paddd %xmm6,%xmm10
+
+ psrld $2,%xmm12
+ paddd %xmm8,%xmm10
+.byte 102,15,56,0,197
+ movd -40(%r10),%xmm8
+ por %xmm7,%xmm12
+ movd -40(%r11),%xmm7
+ punpckldq %xmm8,%xmm1
+ movdqa %xmm10,%xmm8
+ paddd %xmm15,%xmm14
+ punpckldq %xmm7,%xmm9
+ movdqa %xmm11,%xmm7
+ movdqa %xmm11,%xmm6
+ pslld $5,%xmm8
+ pandn %xmm13,%xmm7
+ pand %xmm12,%xmm6
+ punpckldq %xmm9,%xmm1
+ movdqa %xmm10,%xmm9
+
+ movdqa %xmm0,80-128(%rax)
+ paddd %xmm0,%xmm14
+ movd -36(%r8),%xmm2
+ psrld $27,%xmm9
+ pxor %xmm7,%xmm6
+ movdqa %xmm11,%xmm7
+
+ por %xmm9,%xmm8
+ movd -36(%r9),%xmm9
+ pslld $30,%xmm7
+ paddd %xmm6,%xmm14
+
+ psrld $2,%xmm11
+ paddd %xmm8,%xmm14
+.byte 102,15,56,0,205
+ movd -36(%r10),%xmm8
+ por %xmm7,%xmm11
+ movd -36(%r11),%xmm7
+ punpckldq %xmm8,%xmm2
+ movdqa %xmm14,%xmm8
+ paddd %xmm15,%xmm13
+ punpckldq %xmm7,%xmm9
+ movdqa %xmm10,%xmm7
+ movdqa %xmm10,%xmm6
+ pslld $5,%xmm8
+ pandn %xmm12,%xmm7
+ pand %xmm11,%xmm6
+ punpckldq %xmm9,%xmm2
+ movdqa %xmm14,%xmm9
+
+ movdqa %xmm1,96-128(%rax)
+ paddd %xmm1,%xmm13
+ movd -32(%r8),%xmm3
+ psrld $27,%xmm9
+ pxor %xmm7,%xmm6
+ movdqa %xmm10,%xmm7
+
+ por %xmm9,%xmm8
+ movd -32(%r9),%xmm9
+ pslld $30,%xmm7
+ paddd %xmm6,%xmm13
+
+ psrld $2,%xmm10
+ paddd %xmm8,%xmm13
+.byte 102,15,56,0,213
+ movd -32(%r10),%xmm8
+ por %xmm7,%xmm10
+ movd -32(%r11),%xmm7
+ punpckldq %xmm8,%xmm3
+ movdqa %xmm13,%xmm8
+ paddd %xmm15,%xmm12
+ punpckldq %xmm7,%xmm9
+ movdqa %xmm14,%xmm7
+ movdqa %xmm14,%xmm6
+ pslld $5,%xmm8
+ pandn %xmm11,%xmm7
+ pand %xmm10,%xmm6
+ punpckldq %xmm9,%xmm3
+ movdqa %xmm13,%xmm9
+
+ movdqa %xmm2,112-128(%rax)
+ paddd %xmm2,%xmm12
+ movd -28(%r8),%xmm4
+ psrld $27,%xmm9
+ pxor %xmm7,%xmm6
+ movdqa %xmm14,%xmm7
+
+ por %xmm9,%xmm8
+ movd -28(%r9),%xmm9
+ pslld $30,%xmm7
+ paddd %xmm6,%xmm12
+
+ psrld $2,%xmm14
+ paddd %xmm8,%xmm12
+.byte 102,15,56,0,221
+ movd -28(%r10),%xmm8
+ por %xmm7,%xmm14
+ movd -28(%r11),%xmm7
+ punpckldq %xmm8,%xmm4
+ movdqa %xmm12,%xmm8
+ paddd %xmm15,%xmm11
+ punpckldq %xmm7,%xmm9
+ movdqa %xmm13,%xmm7
+ movdqa %xmm13,%xmm6
+ pslld $5,%xmm8
+ pandn %xmm10,%xmm7
+ pand %xmm14,%xmm6
+ punpckldq %xmm9,%xmm4
+ movdqa %xmm12,%xmm9
+
+ movdqa %xmm3,128-128(%rax)
+ paddd %xmm3,%xmm11
+ movd -24(%r8),%xmm0
+ psrld $27,%xmm9
+ pxor %xmm7,%xmm6
+ movdqa %xmm13,%xmm7
+
+ por %xmm9,%xmm8
+ movd -24(%r9),%xmm9
+ pslld $30,%xmm7
+ paddd %xmm6,%xmm11
+
+ psrld $2,%xmm13
+ paddd %xmm8,%xmm11
+.byte 102,15,56,0,229
+ movd -24(%r10),%xmm8
+ por %xmm7,%xmm13
+ movd -24(%r11),%xmm7
+ punpckldq %xmm8,%xmm0
+ movdqa %xmm11,%xmm8
+ paddd %xmm15,%xmm10
+ punpckldq %xmm7,%xmm9
+ movdqa %xmm12,%xmm7
+ movdqa %xmm12,%xmm6
+ pslld $5,%xmm8
+ pandn %xmm14,%xmm7
+ pand %xmm13,%xmm6
+ punpckldq %xmm9,%xmm0
+ movdqa %xmm11,%xmm9
+
+ movdqa %xmm4,144-128(%rax)
+ paddd %xmm4,%xmm10
+ movd -20(%r8),%xmm1
+ psrld $27,%xmm9
+ pxor %xmm7,%xmm6
+ movdqa %xmm12,%xmm7
+
+ por %xmm9,%xmm8
+ movd -20(%r9),%xmm9
+ pslld $30,%xmm7
+ paddd %xmm6,%xmm10
+
+ psrld $2,%xmm12
+ paddd %xmm8,%xmm10
+.byte 102,15,56,0,197
+ movd -20(%r10),%xmm8
+ por %xmm7,%xmm12
+ movd -20(%r11),%xmm7
+ punpckldq %xmm8,%xmm1
+ movdqa %xmm10,%xmm8
+ paddd %xmm15,%xmm14
+ punpckldq %xmm7,%xmm9
+ movdqa %xmm11,%xmm7
+ movdqa %xmm11,%xmm6
+ pslld $5,%xmm8
+ pandn %xmm13,%xmm7
+ pand %xmm12,%xmm6
+ punpckldq %xmm9,%xmm1
+ movdqa %xmm10,%xmm9
+
+ movdqa %xmm0,160-128(%rax)
+ paddd %xmm0,%xmm14
+ movd -16(%r8),%xmm2
+ psrld $27,%xmm9
+ pxor %xmm7,%xmm6
+ movdqa %xmm11,%xmm7
+
+ por %xmm9,%xmm8
+ movd -16(%r9),%xmm9
+ pslld $30,%xmm7
+ paddd %xmm6,%xmm14
+
+ psrld $2,%xmm11
+ paddd %xmm8,%xmm14
+.byte 102,15,56,0,205
+ movd -16(%r10),%xmm8
+ por %xmm7,%xmm11
+ movd -16(%r11),%xmm7
+ punpckldq %xmm8,%xmm2
+ movdqa %xmm14,%xmm8
+ paddd %xmm15,%xmm13
+ punpckldq %xmm7,%xmm9
+ movdqa %xmm10,%xmm7
+ movdqa %xmm10,%xmm6
+ pslld $5,%xmm8
+ pandn %xmm12,%xmm7
+ pand %xmm11,%xmm6
+ punpckldq %xmm9,%xmm2
+ movdqa %xmm14,%xmm9
+
+ movdqa %xmm1,176-128(%rax)
+ paddd %xmm1,%xmm13
+ movd -12(%r8),%xmm3
+ psrld $27,%xmm9
+ pxor %xmm7,%xmm6
+ movdqa %xmm10,%xmm7
+
+ por %xmm9,%xmm8
+ movd -12(%r9),%xmm9
+ pslld $30,%xmm7
+ paddd %xmm6,%xmm13
+
+ psrld $2,%xmm10
+ paddd %xmm8,%xmm13
+.byte 102,15,56,0,213
+ movd -12(%r10),%xmm8
+ por %xmm7,%xmm10
+ movd -12(%r11),%xmm7
+ punpckldq %xmm8,%xmm3
+ movdqa %xmm13,%xmm8
+ paddd %xmm15,%xmm12
+ punpckldq %xmm7,%xmm9
+ movdqa %xmm14,%xmm7
+ movdqa %xmm14,%xmm6
+ pslld $5,%xmm8
+ pandn %xmm11,%xmm7
+ pand %xmm10,%xmm6
+ punpckldq %xmm9,%xmm3
+ movdqa %xmm13,%xmm9
+
+ movdqa %xmm2,192-128(%rax)
+ paddd %xmm2,%xmm12
+ movd -8(%r8),%xmm4
+ psrld $27,%xmm9
+ pxor %xmm7,%xmm6
+ movdqa %xmm14,%xmm7
+
+ por %xmm9,%xmm8
+ movd -8(%r9),%xmm9
+ pslld $30,%xmm7
+ paddd %xmm6,%xmm12
+
+ psrld $2,%xmm14
+ paddd %xmm8,%xmm12
+.byte 102,15,56,0,221
+ movd -8(%r10),%xmm8
+ por %xmm7,%xmm14
+ movd -8(%r11),%xmm7
+ punpckldq %xmm8,%xmm4
+ movdqa %xmm12,%xmm8
+ paddd %xmm15,%xmm11
+ punpckldq %xmm7,%xmm9
+ movdqa %xmm13,%xmm7
+ movdqa %xmm13,%xmm6
+ pslld $5,%xmm8
+ pandn %xmm10,%xmm7
+ pand %xmm14,%xmm6
+ punpckldq %xmm9,%xmm4
+ movdqa %xmm12,%xmm9
+
+ movdqa %xmm3,208-128(%rax)
+ paddd %xmm3,%xmm11
+ movd -4(%r8),%xmm0
+ psrld $27,%xmm9
+ pxor %xmm7,%xmm6
+ movdqa %xmm13,%xmm7
+
+ por %xmm9,%xmm8
+ movd -4(%r9),%xmm9
+ pslld $30,%xmm7
+ paddd %xmm6,%xmm11
+
+ psrld $2,%xmm13
+ paddd %xmm8,%xmm11
+.byte 102,15,56,0,229
+ movd -4(%r10),%xmm8
+ por %xmm7,%xmm13
+ movdqa 0-128(%rax),%xmm1
+ movd -4(%r11),%xmm7
+ punpckldq %xmm8,%xmm0
+ movdqa %xmm11,%xmm8
+ paddd %xmm15,%xmm10
+ punpckldq %xmm7,%xmm9
+ movdqa %xmm12,%xmm7
+ movdqa %xmm12,%xmm6
+ pslld $5,%xmm8
+ prefetcht0 63(%r8)
+ pandn %xmm14,%xmm7
+ pand %xmm13,%xmm6
+ punpckldq %xmm9,%xmm0
+ movdqa %xmm11,%xmm9
+
+ movdqa %xmm4,224-128(%rax)
+ paddd %xmm4,%xmm10
+ psrld $27,%xmm9
+ pxor %xmm7,%xmm6
+ movdqa %xmm12,%xmm7
+ prefetcht0 63(%r9)
+
+ por %xmm9,%xmm8
+ pslld $30,%xmm7
+ paddd %xmm6,%xmm10
+ prefetcht0 63(%r10)
+
+ psrld $2,%xmm12
+ paddd %xmm8,%xmm10
+.byte 102,15,56,0,197
+ prefetcht0 63(%r11)
+ por %xmm7,%xmm12
+ movdqa 16-128(%rax),%xmm2
+ pxor %xmm3,%xmm1
+ movdqa 32-128(%rax),%xmm3
+
+ movdqa %xmm10,%xmm8
+ pxor 128-128(%rax),%xmm1
+ paddd %xmm15,%xmm14
+ movdqa %xmm11,%xmm7
+ pslld $5,%xmm8
+ pxor %xmm3,%xmm1
+ movdqa %xmm11,%xmm6
+ pandn %xmm13,%xmm7
+ movdqa %xmm1,%xmm5
+ pand %xmm12,%xmm6
+ movdqa %xmm10,%xmm9
+ psrld $31,%xmm5
+ paddd %xmm1,%xmm1
+
+ movdqa %xmm0,240-128(%rax)
+ paddd %xmm0,%xmm14
+ psrld $27,%xmm9
+ pxor %xmm7,%xmm6
+
+ movdqa %xmm11,%xmm7
+ por %xmm9,%xmm8
+ pslld $30,%xmm7
+ paddd %xmm6,%xmm14
+
+ psrld $2,%xmm11
+ paddd %xmm8,%xmm14
+ por %xmm5,%xmm1
+ por %xmm7,%xmm11
+ pxor %xmm4,%xmm2
+ movdqa 48-128(%rax),%xmm4
+
+ movdqa %xmm14,%xmm8
+ pxor 144-128(%rax),%xmm2
+ paddd %xmm15,%xmm13
+ movdqa %xmm10,%xmm7
+ pslld $5,%xmm8
+ pxor %xmm4,%xmm2
+ movdqa %xmm10,%xmm6
+ pandn %xmm12,%xmm7
+ movdqa %xmm2,%xmm5
+ pand %xmm11,%xmm6
+ movdqa %xmm14,%xmm9
+ psrld $31,%xmm5
+ paddd %xmm2,%xmm2
+
+ movdqa %xmm1,0-128(%rax)
+ paddd %xmm1,%xmm13
+ psrld $27,%xmm9
+ pxor %xmm7,%xmm6
+
+ movdqa %xmm10,%xmm7
+ por %xmm9,%xmm8
+ pslld $30,%xmm7
+ paddd %xmm6,%xmm13
+
+ psrld $2,%xmm10
+ paddd %xmm8,%xmm13
+ por %xmm5,%xmm2
+ por %xmm7,%xmm10
+ pxor %xmm0,%xmm3
+ movdqa 64-128(%rax),%xmm0
+
+ movdqa %xmm13,%xmm8
+ pxor 160-128(%rax),%xmm3
+ paddd %xmm15,%xmm12
+ movdqa %xmm14,%xmm7
+ pslld $5,%xmm8
+ pxor %xmm0,%xmm3
+ movdqa %xmm14,%xmm6
+ pandn %xmm11,%xmm7
+ movdqa %xmm3,%xmm5
+ pand %xmm10,%xmm6
+ movdqa %xmm13,%xmm9
+ psrld $31,%xmm5
+ paddd %xmm3,%xmm3
+
+ movdqa %xmm2,16-128(%rax)
+ paddd %xmm2,%xmm12
+ psrld $27,%xmm9
+ pxor %xmm7,%xmm6
+
+ movdqa %xmm14,%xmm7
+ por %xmm9,%xmm8
+ pslld $30,%xmm7
+ paddd %xmm6,%xmm12
+
+ psrld $2,%xmm14
+ paddd %xmm8,%xmm12
+ por %xmm5,%xmm3
+ por %xmm7,%xmm14
+ pxor %xmm1,%xmm4
+ movdqa 80-128(%rax),%xmm1
+
+ movdqa %xmm12,%xmm8
+ pxor 176-128(%rax),%xmm4
+ paddd %xmm15,%xmm11
+ movdqa %xmm13,%xmm7
+ pslld $5,%xmm8
+ pxor %xmm1,%xmm4
+ movdqa %xmm13,%xmm6
+ pandn %xmm10,%xmm7
+ movdqa %xmm4,%xmm5
+ pand %xmm14,%xmm6
+ movdqa %xmm12,%xmm9
+ psrld $31,%xmm5
+ paddd %xmm4,%xmm4
+
+ movdqa %xmm3,32-128(%rax)
+ paddd %xmm3,%xmm11
+ psrld $27,%xmm9
+ pxor %xmm7,%xmm6
+
+ movdqa %xmm13,%xmm7
+ por %xmm9,%xmm8
+ pslld $30,%xmm7
+ paddd %xmm6,%xmm11
+
+ psrld $2,%xmm13
+ paddd %xmm8,%xmm11
+ por %xmm5,%xmm4
+ por %xmm7,%xmm13
+ pxor %xmm2,%xmm0
+ movdqa 96-128(%rax),%xmm2
+
+ movdqa %xmm11,%xmm8
+ pxor 192-128(%rax),%xmm0
+ paddd %xmm15,%xmm10
+ movdqa %xmm12,%xmm7
+ pslld $5,%xmm8
+ pxor %xmm2,%xmm0
+ movdqa %xmm12,%xmm6
+ pandn %xmm14,%xmm7
+ movdqa %xmm0,%xmm5
+ pand %xmm13,%xmm6
+ movdqa %xmm11,%xmm9
+ psrld $31,%xmm5
+ paddd %xmm0,%xmm0
+
+ movdqa %xmm4,48-128(%rax)
+ paddd %xmm4,%xmm10
+ psrld $27,%xmm9
+ pxor %xmm7,%xmm6
+
+ movdqa %xmm12,%xmm7
+ por %xmm9,%xmm8
+ pslld $30,%xmm7
+ paddd %xmm6,%xmm10
+
+ psrld $2,%xmm12
+ paddd %xmm8,%xmm10
+ por %xmm5,%xmm0
+ por %xmm7,%xmm12
+ movdqa 0(%rbp),%xmm15
+ pxor %xmm3,%xmm1
+ movdqa 112-128(%rax),%xmm3
+
+ movdqa %xmm10,%xmm8
+ movdqa %xmm13,%xmm6
+ pxor 208-128(%rax),%xmm1
+ paddd %xmm15,%xmm14
+ pslld $5,%xmm8
+ pxor %xmm11,%xmm6
+
+ movdqa %xmm10,%xmm9
+ movdqa %xmm0,64-128(%rax)
+ paddd %xmm0,%xmm14
+ pxor %xmm3,%xmm1
+ psrld $27,%xmm9
+ pxor %xmm12,%xmm6
+ movdqa %xmm11,%xmm7
+
+ pslld $30,%xmm7
+ movdqa %xmm1,%xmm5
+ por %xmm9,%xmm8
+ psrld $31,%xmm5
+ paddd %xmm6,%xmm14
+ paddd %xmm1,%xmm1
+
+ psrld $2,%xmm11
+ paddd %xmm8,%xmm14
+ por %xmm5,%xmm1
+ por %xmm7,%xmm11
+ pxor %xmm4,%xmm2
+ movdqa 128-128(%rax),%xmm4
+
+ movdqa %xmm14,%xmm8
+ movdqa %xmm12,%xmm6
+ pxor 224-128(%rax),%xmm2
+ paddd %xmm15,%xmm13
+ pslld $5,%xmm8
+ pxor %xmm10,%xmm6
+
+ movdqa %xmm14,%xmm9
+ movdqa %xmm1,80-128(%rax)
+ paddd %xmm1,%xmm13
+ pxor %xmm4,%xmm2
+ psrld $27,%xmm9
+ pxor %xmm11,%xmm6
+ movdqa %xmm10,%xmm7
+
+ pslld $30,%xmm7
+ movdqa %xmm2,%xmm5
+ por %xmm9,%xmm8
+ psrld $31,%xmm5
+ paddd %xmm6,%xmm13
+ paddd %xmm2,%xmm2
+
+ psrld $2,%xmm10
+ paddd %xmm8,%xmm13
+ por %xmm5,%xmm2
+ por %xmm7,%xmm10
+ pxor %xmm0,%xmm3
+ movdqa 144-128(%rax),%xmm0
+
+ movdqa %xmm13,%xmm8
+ movdqa %xmm11,%xmm6
+ pxor 240-128(%rax),%xmm3
+ paddd %xmm15,%xmm12
+ pslld $5,%xmm8
+ pxor %xmm14,%xmm6
+
+ movdqa %xmm13,%xmm9
+ movdqa %xmm2,96-128(%rax)
+ paddd %xmm2,%xmm12
+ pxor %xmm0,%xmm3
+ psrld $27,%xmm9
+ pxor %xmm10,%xmm6
+ movdqa %xmm14,%xmm7
+
+ pslld $30,%xmm7
+ movdqa %xmm3,%xmm5
+ por %xmm9,%xmm8
+ psrld $31,%xmm5
+ paddd %xmm6,%xmm12
+ paddd %xmm3,%xmm3
+
+ psrld $2,%xmm14
+ paddd %xmm8,%xmm12
+ por %xmm5,%xmm3
+ por %xmm7,%xmm14
+ pxor %xmm1,%xmm4
+ movdqa 160-128(%rax),%xmm1
+
+ movdqa %xmm12,%xmm8
+ movdqa %xmm10,%xmm6
+ pxor 0-128(%rax),%xmm4
+ paddd %xmm15,%xmm11
+ pslld $5,%xmm8
+ pxor %xmm13,%xmm6
+
+ movdqa %xmm12,%xmm9
+ movdqa %xmm3,112-128(%rax)
+ paddd %xmm3,%xmm11
+ pxor %xmm1,%xmm4
+ psrld $27,%xmm9
+ pxor %xmm14,%xmm6
+ movdqa %xmm13,%xmm7
+
+ pslld $30,%xmm7
+ movdqa %xmm4,%xmm5
+ por %xmm9,%xmm8
+ psrld $31,%xmm5
+ paddd %xmm6,%xmm11
+ paddd %xmm4,%xmm4
+
+ psrld $2,%xmm13
+ paddd %xmm8,%xmm11
+ por %xmm5,%xmm4
+ por %xmm7,%xmm13
+ pxor %xmm2,%xmm0
+ movdqa 176-128(%rax),%xmm2
+
+ movdqa %xmm11,%xmm8
+ movdqa %xmm14,%xmm6
+ pxor 16-128(%rax),%xmm0
+ paddd %xmm15,%xmm10
+ pslld $5,%xmm8
+ pxor %xmm12,%xmm6
+
+ movdqa %xmm11,%xmm9
+ movdqa %xmm4,128-128(%rax)
+ paddd %xmm4,%xmm10
+ pxor %xmm2,%xmm0
+ psrld $27,%xmm9
+ pxor %xmm13,%xmm6
+ movdqa %xmm12,%xmm7
+
+ pslld $30,%xmm7
+ movdqa %xmm0,%xmm5
+ por %xmm9,%xmm8
+ psrld $31,%xmm5
+ paddd %xmm6,%xmm10
+ paddd %xmm0,%xmm0
+
+ psrld $2,%xmm12
+ paddd %xmm8,%xmm10
+ por %xmm5,%xmm0
+ por %xmm7,%xmm12
+ pxor %xmm3,%xmm1
+ movdqa 192-128(%rax),%xmm3
+
+ movdqa %xmm10,%xmm8
+ movdqa %xmm13,%xmm6
+ pxor 32-128(%rax),%xmm1
+ paddd %xmm15,%xmm14
+ pslld $5,%xmm8
+ pxor %xmm11,%xmm6
+
+ movdqa %xmm10,%xmm9
+ movdqa %xmm0,144-128(%rax)
+ paddd %xmm0,%xmm14
+ pxor %xmm3,%xmm1
+ psrld $27,%xmm9
+ pxor %xmm12,%xmm6
+ movdqa %xmm11,%xmm7
+
+ pslld $30,%xmm7
+ movdqa %xmm1,%xmm5
+ por %xmm9,%xmm8
+ psrld $31,%xmm5
+ paddd %xmm6,%xmm14
+ paddd %xmm1,%xmm1
+
+ psrld $2,%xmm11
+ paddd %xmm8,%xmm14
+ por %xmm5,%xmm1
+ por %xmm7,%xmm11
+ pxor %xmm4,%xmm2
+ movdqa 208-128(%rax),%xmm4
+
+ movdqa %xmm14,%xmm8
+ movdqa %xmm12,%xmm6
+ pxor 48-128(%rax),%xmm2
+ paddd %xmm15,%xmm13
+ pslld $5,%xmm8
+ pxor %xmm10,%xmm6
+
+ movdqa %xmm14,%xmm9
+ movdqa %xmm1,160-128(%rax)
+ paddd %xmm1,%xmm13
+ pxor %xmm4,%xmm2
+ psrld $27,%xmm9
+ pxor %xmm11,%xmm6
+ movdqa %xmm10,%xmm7
+
+ pslld $30,%xmm7
+ movdqa %xmm2,%xmm5
+ por %xmm9,%xmm8
+ psrld $31,%xmm5
+ paddd %xmm6,%xmm13
+ paddd %xmm2,%xmm2
+
+ psrld $2,%xmm10
+ paddd %xmm8,%xmm13
+ por %xmm5,%xmm2
+ por %xmm7,%xmm10
+ pxor %xmm0,%xmm3
+ movdqa 224-128(%rax),%xmm0
+
+ movdqa %xmm13,%xmm8
+ movdqa %xmm11,%xmm6
+ pxor 64-128(%rax),%xmm3
+ paddd %xmm15,%xmm12
+ pslld $5,%xmm8
+ pxor %xmm14,%xmm6
+
+ movdqa %xmm13,%xmm9
+ movdqa %xmm2,176-128(%rax)
+ paddd %xmm2,%xmm12
+ pxor %xmm0,%xmm3
+ psrld $27,%xmm9
+ pxor %xmm10,%xmm6
+ movdqa %xmm14,%xmm7
+
+ pslld $30,%xmm7
+ movdqa %xmm3,%xmm5
+ por %xmm9,%xmm8
+ psrld $31,%xmm5
+ paddd %xmm6,%xmm12
+ paddd %xmm3,%xmm3
+
+ psrld $2,%xmm14
+ paddd %xmm8,%xmm12
+ por %xmm5,%xmm3
+ por %xmm7,%xmm14
+ pxor %xmm1,%xmm4
+ movdqa 240-128(%rax),%xmm1
+
+ movdqa %xmm12,%xmm8
+ movdqa %xmm10,%xmm6
+ pxor 80-128(%rax),%xmm4
+ paddd %xmm15,%xmm11
+ pslld $5,%xmm8
+ pxor %xmm13,%xmm6
+
+ movdqa %xmm12,%xmm9
+ movdqa %xmm3,192-128(%rax)
+ paddd %xmm3,%xmm11
+ pxor %xmm1,%xmm4
+ psrld $27,%xmm9
+ pxor %xmm14,%xmm6
+ movdqa %xmm13,%xmm7
+
+ pslld $30,%xmm7
+ movdqa %xmm4,%xmm5
+ por %xmm9,%xmm8
+ psrld $31,%xmm5
+ paddd %xmm6,%xmm11
+ paddd %xmm4,%xmm4
+
+ psrld $2,%xmm13
+ paddd %xmm8,%xmm11
+ por %xmm5,%xmm4
+ por %xmm7,%xmm13
+ pxor %xmm2,%xmm0
+ movdqa 0-128(%rax),%xmm2
+
+ movdqa %xmm11,%xmm8
+ movdqa %xmm14,%xmm6
+ pxor 96-128(%rax),%xmm0
+ paddd %xmm15,%xmm10
+ pslld $5,%xmm8
+ pxor %xmm12,%xmm6
+
+ movdqa %xmm11,%xmm9
+ movdqa %xmm4,208-128(%rax)
+ paddd %xmm4,%xmm10
+ pxor %xmm2,%xmm0
+ psrld $27,%xmm9
+ pxor %xmm13,%xmm6
+ movdqa %xmm12,%xmm7
+
+ pslld $30,%xmm7
+ movdqa %xmm0,%xmm5
+ por %xmm9,%xmm8
+ psrld $31,%xmm5
+ paddd %xmm6,%xmm10
+ paddd %xmm0,%xmm0
+
+ psrld $2,%xmm12
+ paddd %xmm8,%xmm10
+ por %xmm5,%xmm0
+ por %xmm7,%xmm12
+ pxor %xmm3,%xmm1
+ movdqa 16-128(%rax),%xmm3
+
+ movdqa %xmm10,%xmm8
+ movdqa %xmm13,%xmm6
+ pxor 112-128(%rax),%xmm1
+ paddd %xmm15,%xmm14
+ pslld $5,%xmm8
+ pxor %xmm11,%xmm6
+
+ movdqa %xmm10,%xmm9
+ movdqa %xmm0,224-128(%rax)
+ paddd %xmm0,%xmm14
+ pxor %xmm3,%xmm1
+ psrld $27,%xmm9
+ pxor %xmm12,%xmm6
+ movdqa %xmm11,%xmm7
+
+ pslld $30,%xmm7
+ movdqa %xmm1,%xmm5
+ por %xmm9,%xmm8
+ psrld $31,%xmm5
+ paddd %xmm6,%xmm14
+ paddd %xmm1,%xmm1
+
+ psrld $2,%xmm11
+ paddd %xmm8,%xmm14
+ por %xmm5,%xmm1
+ por %xmm7,%xmm11
+ pxor %xmm4,%xmm2
+ movdqa 32-128(%rax),%xmm4
+
+ movdqa %xmm14,%xmm8
+ movdqa %xmm12,%xmm6
+ pxor 128-128(%rax),%xmm2
+ paddd %xmm15,%xmm13
+ pslld $5,%xmm8
+ pxor %xmm10,%xmm6
+
+ movdqa %xmm14,%xmm9
+ movdqa %xmm1,240-128(%rax)
+ paddd %xmm1,%xmm13
+ pxor %xmm4,%xmm2
+ psrld $27,%xmm9
+ pxor %xmm11,%xmm6
+ movdqa %xmm10,%xmm7
+
+ pslld $30,%xmm7
+ movdqa %xmm2,%xmm5
+ por %xmm9,%xmm8
+ psrld $31,%xmm5
+ paddd %xmm6,%xmm13
+ paddd %xmm2,%xmm2
+
+ psrld $2,%xmm10
+ paddd %xmm8,%xmm13
+ por %xmm5,%xmm2
+ por %xmm7,%xmm10
+ pxor %xmm0,%xmm3
+ movdqa 48-128(%rax),%xmm0
+
+ movdqa %xmm13,%xmm8
+ movdqa %xmm11,%xmm6
+ pxor 144-128(%rax),%xmm3
+ paddd %xmm15,%xmm12
+ pslld $5,%xmm8
+ pxor %xmm14,%xmm6
+
+ movdqa %xmm13,%xmm9
+ movdqa %xmm2,0-128(%rax)
+ paddd %xmm2,%xmm12
+ pxor %xmm0,%xmm3
+ psrld $27,%xmm9
+ pxor %xmm10,%xmm6
+ movdqa %xmm14,%xmm7
+
+ pslld $30,%xmm7
+ movdqa %xmm3,%xmm5
+ por %xmm9,%xmm8
+ psrld $31,%xmm5
+ paddd %xmm6,%xmm12
+ paddd %xmm3,%xmm3
+
+ psrld $2,%xmm14
+ paddd %xmm8,%xmm12
+ por %xmm5,%xmm3
+ por %xmm7,%xmm14
+ pxor %xmm1,%xmm4
+ movdqa 64-128(%rax),%xmm1
+
+ movdqa %xmm12,%xmm8
+ movdqa %xmm10,%xmm6
+ pxor 160-128(%rax),%xmm4
+ paddd %xmm15,%xmm11
+ pslld $5,%xmm8
+ pxor %xmm13,%xmm6
+
+ movdqa %xmm12,%xmm9
+ movdqa %xmm3,16-128(%rax)
+ paddd %xmm3,%xmm11
+ pxor %xmm1,%xmm4
+ psrld $27,%xmm9
+ pxor %xmm14,%xmm6
+ movdqa %xmm13,%xmm7
+
+ pslld $30,%xmm7
+ movdqa %xmm4,%xmm5
+ por %xmm9,%xmm8
+ psrld $31,%xmm5
+ paddd %xmm6,%xmm11
+ paddd %xmm4,%xmm4
+
+ psrld $2,%xmm13
+ paddd %xmm8,%xmm11
+ por %xmm5,%xmm4
+ por %xmm7,%xmm13
+ pxor %xmm2,%xmm0
+ movdqa 80-128(%rax),%xmm2
+
+ movdqa %xmm11,%xmm8
+ movdqa %xmm14,%xmm6
+ pxor 176-128(%rax),%xmm0
+ paddd %xmm15,%xmm10
+ pslld $5,%xmm8
+ pxor %xmm12,%xmm6
+
+ movdqa %xmm11,%xmm9
+ movdqa %xmm4,32-128(%rax)
+ paddd %xmm4,%xmm10
+ pxor %xmm2,%xmm0
+ psrld $27,%xmm9
+ pxor %xmm13,%xmm6
+ movdqa %xmm12,%xmm7
+
+ pslld $30,%xmm7
+ movdqa %xmm0,%xmm5
+ por %xmm9,%xmm8
+ psrld $31,%xmm5
+ paddd %xmm6,%xmm10
+ paddd %xmm0,%xmm0
+
+ psrld $2,%xmm12
+ paddd %xmm8,%xmm10
+ por %xmm5,%xmm0
+ por %xmm7,%xmm12
+ pxor %xmm3,%xmm1
+ movdqa 96-128(%rax),%xmm3
+
+ movdqa %xmm10,%xmm8
+ movdqa %xmm13,%xmm6
+ pxor 192-128(%rax),%xmm1
+ paddd %xmm15,%xmm14
+ pslld $5,%xmm8
+ pxor %xmm11,%xmm6
+
+ movdqa %xmm10,%xmm9
+ movdqa %xmm0,48-128(%rax)
+ paddd %xmm0,%xmm14
+ pxor %xmm3,%xmm1
+ psrld $27,%xmm9
+ pxor %xmm12,%xmm6
+ movdqa %xmm11,%xmm7
+
+ pslld $30,%xmm7
+ movdqa %xmm1,%xmm5
+ por %xmm9,%xmm8
+ psrld $31,%xmm5
+ paddd %xmm6,%xmm14
+ paddd %xmm1,%xmm1
+
+ psrld $2,%xmm11
+ paddd %xmm8,%xmm14
+ por %xmm5,%xmm1
+ por %xmm7,%xmm11
+ pxor %xmm4,%xmm2
+ movdqa 112-128(%rax),%xmm4
+
+ movdqa %xmm14,%xmm8
+ movdqa %xmm12,%xmm6
+ pxor 208-128(%rax),%xmm2
+ paddd %xmm15,%xmm13
+ pslld $5,%xmm8
+ pxor %xmm10,%xmm6
+
+ movdqa %xmm14,%xmm9
+ movdqa %xmm1,64-128(%rax)
+ paddd %xmm1,%xmm13
+ pxor %xmm4,%xmm2
+ psrld $27,%xmm9
+ pxor %xmm11,%xmm6
+ movdqa %xmm10,%xmm7
+
+ pslld $30,%xmm7
+ movdqa %xmm2,%xmm5
+ por %xmm9,%xmm8
+ psrld $31,%xmm5
+ paddd %xmm6,%xmm13
+ paddd %xmm2,%xmm2
+
+ psrld $2,%xmm10
+ paddd %xmm8,%xmm13
+ por %xmm5,%xmm2
+ por %xmm7,%xmm10
+ pxor %xmm0,%xmm3
+ movdqa 128-128(%rax),%xmm0
+
+ movdqa %xmm13,%xmm8
+ movdqa %xmm11,%xmm6
+ pxor 224-128(%rax),%xmm3
+ paddd %xmm15,%xmm12
+ pslld $5,%xmm8
+ pxor %xmm14,%xmm6
+
+ movdqa %xmm13,%xmm9
+ movdqa %xmm2,80-128(%rax)
+ paddd %xmm2,%xmm12
+ pxor %xmm0,%xmm3
+ psrld $27,%xmm9
+ pxor %xmm10,%xmm6
+ movdqa %xmm14,%xmm7
+
+ pslld $30,%xmm7
+ movdqa %xmm3,%xmm5
+ por %xmm9,%xmm8
+ psrld $31,%xmm5
+ paddd %xmm6,%xmm12
+ paddd %xmm3,%xmm3
+
+ psrld $2,%xmm14
+ paddd %xmm8,%xmm12
+ por %xmm5,%xmm3
+ por %xmm7,%xmm14
+ pxor %xmm1,%xmm4
+ movdqa 144-128(%rax),%xmm1
+
+ movdqa %xmm12,%xmm8
+ movdqa %xmm10,%xmm6
+ pxor 240-128(%rax),%xmm4
+ paddd %xmm15,%xmm11
+ pslld $5,%xmm8
+ pxor %xmm13,%xmm6
+
+ movdqa %xmm12,%xmm9
+ movdqa %xmm3,96-128(%rax)
+ paddd %xmm3,%xmm11
+ pxor %xmm1,%xmm4
+ psrld $27,%xmm9
+ pxor %xmm14,%xmm6
+ movdqa %xmm13,%xmm7
+
+ pslld $30,%xmm7
+ movdqa %xmm4,%xmm5
+ por %xmm9,%xmm8
+ psrld $31,%xmm5
+ paddd %xmm6,%xmm11
+ paddd %xmm4,%xmm4
+
+ psrld $2,%xmm13
+ paddd %xmm8,%xmm11
+ por %xmm5,%xmm4
+ por %xmm7,%xmm13
+ pxor %xmm2,%xmm0
+ movdqa 160-128(%rax),%xmm2
+
+ movdqa %xmm11,%xmm8
+ movdqa %xmm14,%xmm6
+ pxor 0-128(%rax),%xmm0
+ paddd %xmm15,%xmm10
+ pslld $5,%xmm8
+ pxor %xmm12,%xmm6
+
+ movdqa %xmm11,%xmm9
+ movdqa %xmm4,112-128(%rax)
+ paddd %xmm4,%xmm10
+ pxor %xmm2,%xmm0
+ psrld $27,%xmm9
+ pxor %xmm13,%xmm6
+ movdqa %xmm12,%xmm7
+
+ pslld $30,%xmm7
+ movdqa %xmm0,%xmm5
+ por %xmm9,%xmm8
+ psrld $31,%xmm5
+ paddd %xmm6,%xmm10
+ paddd %xmm0,%xmm0
+
+ psrld $2,%xmm12
+ paddd %xmm8,%xmm10
+ por %xmm5,%xmm0
+ por %xmm7,%xmm12
+ movdqa 32(%rbp),%xmm15
+ pxor %xmm3,%xmm1
+ movdqa 176-128(%rax),%xmm3
+
+ movdqa %xmm10,%xmm8
+ movdqa %xmm13,%xmm7
+ pxor 16-128(%rax),%xmm1
+ pxor %xmm3,%xmm1
+ paddd %xmm15,%xmm14
+ pslld $5,%xmm8
+ movdqa %xmm10,%xmm9
+ pand %xmm12,%xmm7
+
+ movdqa %xmm13,%xmm6
+ movdqa %xmm1,%xmm5
+ psrld $27,%xmm9
+ paddd %xmm7,%xmm14
+ pxor %xmm12,%xmm6
+
+ movdqa %xmm0,128-128(%rax)
+ paddd %xmm0,%xmm14
+ por %xmm9,%xmm8
+ psrld $31,%xmm5
+ pand %xmm11,%xmm6
+ movdqa %xmm11,%xmm7
+
+ pslld $30,%xmm7
+ paddd %xmm1,%xmm1
+ paddd %xmm6,%xmm14
+
+ psrld $2,%xmm11
+ paddd %xmm8,%xmm14
+ por %xmm5,%xmm1
+ por %xmm7,%xmm11
+ pxor %xmm4,%xmm2
+ movdqa 192-128(%rax),%xmm4
+
+ movdqa %xmm14,%xmm8
+ movdqa %xmm12,%xmm7
+ pxor 32-128(%rax),%xmm2
+ pxor %xmm4,%xmm2
+ paddd %xmm15,%xmm13
+ pslld $5,%xmm8
+ movdqa %xmm14,%xmm9
+ pand %xmm11,%xmm7
+
+ movdqa %xmm12,%xmm6
+ movdqa %xmm2,%xmm5
+ psrld $27,%xmm9
+ paddd %xmm7,%xmm13
+ pxor %xmm11,%xmm6
+
+ movdqa %xmm1,144-128(%rax)
+ paddd %xmm1,%xmm13
+ por %xmm9,%xmm8
+ psrld $31,%xmm5
+ pand %xmm10,%xmm6
+ movdqa %xmm10,%xmm7
+
+ pslld $30,%xmm7
+ paddd %xmm2,%xmm2
+ paddd %xmm6,%xmm13
+
+ psrld $2,%xmm10
+ paddd %xmm8,%xmm13
+ por %xmm5,%xmm2
+ por %xmm7,%xmm10
+ pxor %xmm0,%xmm3
+ movdqa 208-128(%rax),%xmm0
+
+ movdqa %xmm13,%xmm8
+ movdqa %xmm11,%xmm7
+ pxor 48-128(%rax),%xmm3
+ pxor %xmm0,%xmm3
+ paddd %xmm15,%xmm12
+ pslld $5,%xmm8
+ movdqa %xmm13,%xmm9
+ pand %xmm10,%xmm7
+
+ movdqa %xmm11,%xmm6
+ movdqa %xmm3,%xmm5
+ psrld $27,%xmm9
+ paddd %xmm7,%xmm12
+ pxor %xmm10,%xmm6
+
+ movdqa %xmm2,160-128(%rax)
+ paddd %xmm2,%xmm12
+ por %xmm9,%xmm8
+ psrld $31,%xmm5
+ pand %xmm14,%xmm6
+ movdqa %xmm14,%xmm7
+
+ pslld $30,%xmm7
+ paddd %xmm3,%xmm3
+ paddd %xmm6,%xmm12
+
+ psrld $2,%xmm14
+ paddd %xmm8,%xmm12
+ por %xmm5,%xmm3
+ por %xmm7,%xmm14
+ pxor %xmm1,%xmm4
+ movdqa 224-128(%rax),%xmm1
+
+ movdqa %xmm12,%xmm8
+ movdqa %xmm10,%xmm7
+ pxor 64-128(%rax),%xmm4
+ pxor %xmm1,%xmm4
+ paddd %xmm15,%xmm11
+ pslld $5,%xmm8
+ movdqa %xmm12,%xmm9
+ pand %xmm14,%xmm7
+
+ movdqa %xmm10,%xmm6
+ movdqa %xmm4,%xmm5
+ psrld $27,%xmm9
+ paddd %xmm7,%xmm11
+ pxor %xmm14,%xmm6
+
+ movdqa %xmm3,176-128(%rax)
+ paddd %xmm3,%xmm11
+ por %xmm9,%xmm8
+ psrld $31,%xmm5
+ pand %xmm13,%xmm6
+ movdqa %xmm13,%xmm7
+
+ pslld $30,%xmm7
+ paddd %xmm4,%xmm4
+ paddd %xmm6,%xmm11
+
+ psrld $2,%xmm13
+ paddd %xmm8,%xmm11
+ por %xmm5,%xmm4
+ por %xmm7,%xmm13
+ pxor %xmm2,%xmm0
+ movdqa 240-128(%rax),%xmm2
+
+ movdqa %xmm11,%xmm8
+ movdqa %xmm14,%xmm7
+ pxor 80-128(%rax),%xmm0
+ pxor %xmm2,%xmm0
+ paddd %xmm15,%xmm10
+ pslld $5,%xmm8
+ movdqa %xmm11,%xmm9
+ pand %xmm13,%xmm7
+
+ movdqa %xmm14,%xmm6
+ movdqa %xmm0,%xmm5
+ psrld $27,%xmm9
+ paddd %xmm7,%xmm10
+ pxor %xmm13,%xmm6
+
+ movdqa %xmm4,192-128(%rax)
+ paddd %xmm4,%xmm10
+ por %xmm9,%xmm8
+ psrld $31,%xmm5
+ pand %xmm12,%xmm6
+ movdqa %xmm12,%xmm7
+
+ pslld $30,%xmm7
+ paddd %xmm0,%xmm0
+ paddd %xmm6,%xmm10
+
+ psrld $2,%xmm12
+ paddd %xmm8,%xmm10
+ por %xmm5,%xmm0
+ por %xmm7,%xmm12
+ pxor %xmm3,%xmm1
+ movdqa 0-128(%rax),%xmm3
+
+ movdqa %xmm10,%xmm8
+ movdqa %xmm13,%xmm7
+ pxor 96-128(%rax),%xmm1
+ pxor %xmm3,%xmm1
+ paddd %xmm15,%xmm14
+ pslld $5,%xmm8
+ movdqa %xmm10,%xmm9
+ pand %xmm12,%xmm7
+
+ movdqa %xmm13,%xmm6
+ movdqa %xmm1,%xmm5
+ psrld $27,%xmm9
+ paddd %xmm7,%xmm14
+ pxor %xmm12,%xmm6
+
+ movdqa %xmm0,208-128(%rax)
+ paddd %xmm0,%xmm14
+ por %xmm9,%xmm8
+ psrld $31,%xmm5
+ pand %xmm11,%xmm6
+ movdqa %xmm11,%xmm7
+
+ pslld $30,%xmm7
+ paddd %xmm1,%xmm1
+ paddd %xmm6,%xmm14
+
+ psrld $2,%xmm11
+ paddd %xmm8,%xmm14
+ por %xmm5,%xmm1
+ por %xmm7,%xmm11
+ pxor %xmm4,%xmm2
+ movdqa 16-128(%rax),%xmm4
+
+ movdqa %xmm14,%xmm8
+ movdqa %xmm12,%xmm7
+ pxor 112-128(%rax),%xmm2
+ pxor %xmm4,%xmm2
+ paddd %xmm15,%xmm13
+ pslld $5,%xmm8
+ movdqa %xmm14,%xmm9
+ pand %xmm11,%xmm7
+
+ movdqa %xmm12,%xmm6
+ movdqa %xmm2,%xmm5
+ psrld $27,%xmm9
+ paddd %xmm7,%xmm13
+ pxor %xmm11,%xmm6
+
+ movdqa %xmm1,224-128(%rax)
+ paddd %xmm1,%xmm13
+ por %xmm9,%xmm8
+ psrld $31,%xmm5
+ pand %xmm10,%xmm6
+ movdqa %xmm10,%xmm7
+
+ pslld $30,%xmm7
+ paddd %xmm2,%xmm2
+ paddd %xmm6,%xmm13
+
+ psrld $2,%xmm10
+ paddd %xmm8,%xmm13
+ por %xmm5,%xmm2
+ por %xmm7,%xmm10
+ pxor %xmm0,%xmm3
+ movdqa 32-128(%rax),%xmm0
+
+ movdqa %xmm13,%xmm8
+ movdqa %xmm11,%xmm7
+ pxor 128-128(%rax),%xmm3
+ pxor %xmm0,%xmm3
+ paddd %xmm15,%xmm12
+ pslld $5,%xmm8
+ movdqa %xmm13,%xmm9
+ pand %xmm10,%xmm7
+
+ movdqa %xmm11,%xmm6
+ movdqa %xmm3,%xmm5
+ psrld $27,%xmm9
+ paddd %xmm7,%xmm12
+ pxor %xmm10,%xmm6
+
+ movdqa %xmm2,240-128(%rax)
+ paddd %xmm2,%xmm12
+ por %xmm9,%xmm8
+ psrld $31,%xmm5
+ pand %xmm14,%xmm6
+ movdqa %xmm14,%xmm7
+
+ pslld $30,%xmm7
+ paddd %xmm3,%xmm3
+ paddd %xmm6,%xmm12
+
+ psrld $2,%xmm14
+ paddd %xmm8,%xmm12
+ por %xmm5,%xmm3
+ por %xmm7,%xmm14
+ pxor %xmm1,%xmm4
+ movdqa 48-128(%rax),%xmm1
+
+ movdqa %xmm12,%xmm8
+ movdqa %xmm10,%xmm7
+ pxor 144-128(%rax),%xmm4
+ pxor %xmm1,%xmm4
+ paddd %xmm15,%xmm11
+ pslld $5,%xmm8
+ movdqa %xmm12,%xmm9
+ pand %xmm14,%xmm7
+
+ movdqa %xmm10,%xmm6
+ movdqa %xmm4,%xmm5
+ psrld $27,%xmm9
+ paddd %xmm7,%xmm11
+ pxor %xmm14,%xmm6
+
+ movdqa %xmm3,0-128(%rax)
+ paddd %xmm3,%xmm11
+ por %xmm9,%xmm8
+ psrld $31,%xmm5
+ pand %xmm13,%xmm6
+ movdqa %xmm13,%xmm7
+
+ pslld $30,%xmm7
+ paddd %xmm4,%xmm4
+ paddd %xmm6,%xmm11
+
+ psrld $2,%xmm13
+ paddd %xmm8,%xmm11
+ por %xmm5,%xmm4
+ por %xmm7,%xmm13
+ pxor %xmm2,%xmm0
+ movdqa 64-128(%rax),%xmm2
+
+ movdqa %xmm11,%xmm8
+ movdqa %xmm14,%xmm7
+ pxor 160-128(%rax),%xmm0
+ pxor %xmm2,%xmm0
+ paddd %xmm15,%xmm10
+ pslld $5,%xmm8
+ movdqa %xmm11,%xmm9
+ pand %xmm13,%xmm7
+
+ movdqa %xmm14,%xmm6
+ movdqa %xmm0,%xmm5
+ psrld $27,%xmm9
+ paddd %xmm7,%xmm10
+ pxor %xmm13,%xmm6
+
+ movdqa %xmm4,16-128(%rax)
+ paddd %xmm4,%xmm10
+ por %xmm9,%xmm8
+ psrld $31,%xmm5
+ pand %xmm12,%xmm6
+ movdqa %xmm12,%xmm7
+
+ pslld $30,%xmm7
+ paddd %xmm0,%xmm0
+ paddd %xmm6,%xmm10
+
+ psrld $2,%xmm12
+ paddd %xmm8,%xmm10
+ por %xmm5,%xmm0
+ por %xmm7,%xmm12
+ pxor %xmm3,%xmm1
+ movdqa 80-128(%rax),%xmm3
+
+ movdqa %xmm10,%xmm8
+ movdqa %xmm13,%xmm7
+ pxor 176-128(%rax),%xmm1
+ pxor %xmm3,%xmm1
+ paddd %xmm15,%xmm14
+ pslld $5,%xmm8
+ movdqa %xmm10,%xmm9
+ pand %xmm12,%xmm7
+
+ movdqa %xmm13,%xmm6
+ movdqa %xmm1,%xmm5
+ psrld $27,%xmm9
+ paddd %xmm7,%xmm14
+ pxor %xmm12,%xmm6
+
+ movdqa %xmm0,32-128(%rax)
+ paddd %xmm0,%xmm14
+ por %xmm9,%xmm8
+ psrld $31,%xmm5
+ pand %xmm11,%xmm6
+ movdqa %xmm11,%xmm7
+
+ pslld $30,%xmm7
+ paddd %xmm1,%xmm1
+ paddd %xmm6,%xmm14
+
+ psrld $2,%xmm11
+ paddd %xmm8,%xmm14
+ por %xmm5,%xmm1
+ por %xmm7,%xmm11
+ pxor %xmm4,%xmm2
+ movdqa 96-128(%rax),%xmm4
+
+ movdqa %xmm14,%xmm8
+ movdqa %xmm12,%xmm7
+ pxor 192-128(%rax),%xmm2
+ pxor %xmm4,%xmm2
+ paddd %xmm15,%xmm13
+ pslld $5,%xmm8
+ movdqa %xmm14,%xmm9
+ pand %xmm11,%xmm7
+
+ movdqa %xmm12,%xmm6
+ movdqa %xmm2,%xmm5
+ psrld $27,%xmm9
+ paddd %xmm7,%xmm13
+ pxor %xmm11,%xmm6
+
+ movdqa %xmm1,48-128(%rax)
+ paddd %xmm1,%xmm13
+ por %xmm9,%xmm8
+ psrld $31,%xmm5
+ pand %xmm10,%xmm6
+ movdqa %xmm10,%xmm7
+
+ pslld $30,%xmm7
+ paddd %xmm2,%xmm2
+ paddd %xmm6,%xmm13
+
+ psrld $2,%xmm10
+ paddd %xmm8,%xmm13
+ por %xmm5,%xmm2
+ por %xmm7,%xmm10
+ pxor %xmm0,%xmm3
+ movdqa 112-128(%rax),%xmm0
+
+ movdqa %xmm13,%xmm8
+ movdqa %xmm11,%xmm7
+ pxor 208-128(%rax),%xmm3
+ pxor %xmm0,%xmm3
+ paddd %xmm15,%xmm12
+ pslld $5,%xmm8
+ movdqa %xmm13,%xmm9
+ pand %xmm10,%xmm7
+
+ movdqa %xmm11,%xmm6
+ movdqa %xmm3,%xmm5
+ psrld $27,%xmm9
+ paddd %xmm7,%xmm12
+ pxor %xmm10,%xmm6
+
+ movdqa %xmm2,64-128(%rax)
+ paddd %xmm2,%xmm12
+ por %xmm9,%xmm8
+ psrld $31,%xmm5
+ pand %xmm14,%xmm6
+ movdqa %xmm14,%xmm7
+
+ pslld $30,%xmm7
+ paddd %xmm3,%xmm3
+ paddd %xmm6,%xmm12
+
+ psrld $2,%xmm14
+ paddd %xmm8,%xmm12
+ por %xmm5,%xmm3
+ por %xmm7,%xmm14
+ pxor %xmm1,%xmm4
+ movdqa 128-128(%rax),%xmm1
+
+ movdqa %xmm12,%xmm8
+ movdqa %xmm10,%xmm7
+ pxor 224-128(%rax),%xmm4
+ pxor %xmm1,%xmm4
+ paddd %xmm15,%xmm11
+ pslld $5,%xmm8
+ movdqa %xmm12,%xmm9
+ pand %xmm14,%xmm7
+
+ movdqa %xmm10,%xmm6
+ movdqa %xmm4,%xmm5
+ psrld $27,%xmm9
+ paddd %xmm7,%xmm11
+ pxor %xmm14,%xmm6
+
+ movdqa %xmm3,80-128(%rax)
+ paddd %xmm3,%xmm11
+ por %xmm9,%xmm8
+ psrld $31,%xmm5
+ pand %xmm13,%xmm6
+ movdqa %xmm13,%xmm7
+
+ pslld $30,%xmm7
+ paddd %xmm4,%xmm4
+ paddd %xmm6,%xmm11
+
+ psrld $2,%xmm13
+ paddd %xmm8,%xmm11
+ por %xmm5,%xmm4
+ por %xmm7,%xmm13
+ pxor %xmm2,%xmm0
+ movdqa 144-128(%rax),%xmm2
+
+ movdqa %xmm11,%xmm8
+ movdqa %xmm14,%xmm7
+ pxor 240-128(%rax),%xmm0
+ pxor %xmm2,%xmm0
+ paddd %xmm15,%xmm10
+ pslld $5,%xmm8
+ movdqa %xmm11,%xmm9
+ pand %xmm13,%xmm7
+
+ movdqa %xmm14,%xmm6
+ movdqa %xmm0,%xmm5
+ psrld $27,%xmm9
+ paddd %xmm7,%xmm10
+ pxor %xmm13,%xmm6
+
+ movdqa %xmm4,96-128(%rax)
+ paddd %xmm4,%xmm10
+ por %xmm9,%xmm8
+ psrld $31,%xmm5
+ pand %xmm12,%xmm6
+ movdqa %xmm12,%xmm7
+
+ pslld $30,%xmm7
+ paddd %xmm0,%xmm0
+ paddd %xmm6,%xmm10
+
+ psrld $2,%xmm12
+ paddd %xmm8,%xmm10
+ por %xmm5,%xmm0
+ por %xmm7,%xmm12
+ pxor %xmm3,%xmm1
+ movdqa 160-128(%rax),%xmm3
+
+ movdqa %xmm10,%xmm8
+ movdqa %xmm13,%xmm7
+ pxor 0-128(%rax),%xmm1
+ pxor %xmm3,%xmm1
+ paddd %xmm15,%xmm14
+ pslld $5,%xmm8
+ movdqa %xmm10,%xmm9
+ pand %xmm12,%xmm7
+
+ movdqa %xmm13,%xmm6
+ movdqa %xmm1,%xmm5
+ psrld $27,%xmm9
+ paddd %xmm7,%xmm14
+ pxor %xmm12,%xmm6
+
+ movdqa %xmm0,112-128(%rax)
+ paddd %xmm0,%xmm14
+ por %xmm9,%xmm8
+ psrld $31,%xmm5
+ pand %xmm11,%xmm6
+ movdqa %xmm11,%xmm7
+
+ pslld $30,%xmm7
+ paddd %xmm1,%xmm1
+ paddd %xmm6,%xmm14
+
+ psrld $2,%xmm11
+ paddd %xmm8,%xmm14
+ por %xmm5,%xmm1
+ por %xmm7,%xmm11
+ pxor %xmm4,%xmm2
+ movdqa 176-128(%rax),%xmm4
+
+ movdqa %xmm14,%xmm8
+ movdqa %xmm12,%xmm7
+ pxor 16-128(%rax),%xmm2
+ pxor %xmm4,%xmm2
+ paddd %xmm15,%xmm13
+ pslld $5,%xmm8
+ movdqa %xmm14,%xmm9
+ pand %xmm11,%xmm7
+
+ movdqa %xmm12,%xmm6
+ movdqa %xmm2,%xmm5
+ psrld $27,%xmm9
+ paddd %xmm7,%xmm13
+ pxor %xmm11,%xmm6
+
+ movdqa %xmm1,128-128(%rax)
+ paddd %xmm1,%xmm13
+ por %xmm9,%xmm8
+ psrld $31,%xmm5
+ pand %xmm10,%xmm6
+ movdqa %xmm10,%xmm7
+
+ pslld $30,%xmm7
+ paddd %xmm2,%xmm2
+ paddd %xmm6,%xmm13
+
+ psrld $2,%xmm10
+ paddd %xmm8,%xmm13
+ por %xmm5,%xmm2
+ por %xmm7,%xmm10
+ pxor %xmm0,%xmm3
+ movdqa 192-128(%rax),%xmm0
+
+ movdqa %xmm13,%xmm8
+ movdqa %xmm11,%xmm7
+ pxor 32-128(%rax),%xmm3
+ pxor %xmm0,%xmm3
+ paddd %xmm15,%xmm12
+ pslld $5,%xmm8
+ movdqa %xmm13,%xmm9
+ pand %xmm10,%xmm7
+
+ movdqa %xmm11,%xmm6
+ movdqa %xmm3,%xmm5
+ psrld $27,%xmm9
+ paddd %xmm7,%xmm12
+ pxor %xmm10,%xmm6
+
+ movdqa %xmm2,144-128(%rax)
+ paddd %xmm2,%xmm12
+ por %xmm9,%xmm8
+ psrld $31,%xmm5
+ pand %xmm14,%xmm6
+ movdqa %xmm14,%xmm7
+
+ pslld $30,%xmm7
+ paddd %xmm3,%xmm3
+ paddd %xmm6,%xmm12
+
+ psrld $2,%xmm14
+ paddd %xmm8,%xmm12
+ por %xmm5,%xmm3
+ por %xmm7,%xmm14
+ pxor %xmm1,%xmm4
+ movdqa 208-128(%rax),%xmm1
+
+ movdqa %xmm12,%xmm8
+ movdqa %xmm10,%xmm7
+ pxor 48-128(%rax),%xmm4
+ pxor %xmm1,%xmm4
+ paddd %xmm15,%xmm11
+ pslld $5,%xmm8
+ movdqa %xmm12,%xmm9
+ pand %xmm14,%xmm7
+
+ movdqa %xmm10,%xmm6
+ movdqa %xmm4,%xmm5
+ psrld $27,%xmm9
+ paddd %xmm7,%xmm11
+ pxor %xmm14,%xmm6
+
+ movdqa %xmm3,160-128(%rax)
+ paddd %xmm3,%xmm11
+ por %xmm9,%xmm8
+ psrld $31,%xmm5
+ pand %xmm13,%xmm6
+ movdqa %xmm13,%xmm7
+
+ pslld $30,%xmm7
+ paddd %xmm4,%xmm4
+ paddd %xmm6,%xmm11
+
+ psrld $2,%xmm13
+ paddd %xmm8,%xmm11
+ por %xmm5,%xmm4
+ por %xmm7,%xmm13
+ pxor %xmm2,%xmm0
+ movdqa 224-128(%rax),%xmm2
+
+ movdqa %xmm11,%xmm8
+ movdqa %xmm14,%xmm7
+ pxor 64-128(%rax),%xmm0
+ pxor %xmm2,%xmm0
+ paddd %xmm15,%xmm10
+ pslld $5,%xmm8
+ movdqa %xmm11,%xmm9
+ pand %xmm13,%xmm7
+
+ movdqa %xmm14,%xmm6
+ movdqa %xmm0,%xmm5
+ psrld $27,%xmm9
+ paddd %xmm7,%xmm10
+ pxor %xmm13,%xmm6
+
+ movdqa %xmm4,176-128(%rax)
+ paddd %xmm4,%xmm10
+ por %xmm9,%xmm8
+ psrld $31,%xmm5
+ pand %xmm12,%xmm6
+ movdqa %xmm12,%xmm7
+
+ pslld $30,%xmm7
+ paddd %xmm0,%xmm0
+ paddd %xmm6,%xmm10
+
+ psrld $2,%xmm12
+ paddd %xmm8,%xmm10
+ por %xmm5,%xmm0
+ por %xmm7,%xmm12
+ movdqa 64(%rbp),%xmm15
+ pxor %xmm3,%xmm1
+ movdqa 240-128(%rax),%xmm3
+
+ movdqa %xmm10,%xmm8
+ movdqa %xmm13,%xmm6
+ pxor 80-128(%rax),%xmm1
+ paddd %xmm15,%xmm14
+ pslld $5,%xmm8
+ pxor %xmm11,%xmm6
+
+ movdqa %xmm10,%xmm9
+ movdqa %xmm0,192-128(%rax)
+ paddd %xmm0,%xmm14
+ pxor %xmm3,%xmm1
+ psrld $27,%xmm9
+ pxor %xmm12,%xmm6
+ movdqa %xmm11,%xmm7
+
+ pslld $30,%xmm7
+ movdqa %xmm1,%xmm5
+ por %xmm9,%xmm8
+ psrld $31,%xmm5
+ paddd %xmm6,%xmm14
+ paddd %xmm1,%xmm1
+
+ psrld $2,%xmm11
+ paddd %xmm8,%xmm14
+ por %xmm5,%xmm1
+ por %xmm7,%xmm11
+ pxor %xmm4,%xmm2
+ movdqa 0-128(%rax),%xmm4
+
+ movdqa %xmm14,%xmm8
+ movdqa %xmm12,%xmm6
+ pxor 96-128(%rax),%xmm2
+ paddd %xmm15,%xmm13
+ pslld $5,%xmm8
+ pxor %xmm10,%xmm6
+
+ movdqa %xmm14,%xmm9
+ movdqa %xmm1,208-128(%rax)
+ paddd %xmm1,%xmm13
+ pxor %xmm4,%xmm2
+ psrld $27,%xmm9
+ pxor %xmm11,%xmm6
+ movdqa %xmm10,%xmm7
+
+ pslld $30,%xmm7
+ movdqa %xmm2,%xmm5
+ por %xmm9,%xmm8
+ psrld $31,%xmm5
+ paddd %xmm6,%xmm13
+ paddd %xmm2,%xmm2
+
+ psrld $2,%xmm10
+ paddd %xmm8,%xmm13
+ por %xmm5,%xmm2
+ por %xmm7,%xmm10
+ pxor %xmm0,%xmm3
+ movdqa 16-128(%rax),%xmm0
+
+ movdqa %xmm13,%xmm8
+ movdqa %xmm11,%xmm6
+ pxor 112-128(%rax),%xmm3
+ paddd %xmm15,%xmm12
+ pslld $5,%xmm8
+ pxor %xmm14,%xmm6
+
+ movdqa %xmm13,%xmm9
+ movdqa %xmm2,224-128(%rax)
+ paddd %xmm2,%xmm12
+ pxor %xmm0,%xmm3
+ psrld $27,%xmm9
+ pxor %xmm10,%xmm6
+ movdqa %xmm14,%xmm7
+
+ pslld $30,%xmm7
+ movdqa %xmm3,%xmm5
+ por %xmm9,%xmm8
+ psrld $31,%xmm5
+ paddd %xmm6,%xmm12
+ paddd %xmm3,%xmm3
+
+ psrld $2,%xmm14
+ paddd %xmm8,%xmm12
+ por %xmm5,%xmm3
+ por %xmm7,%xmm14
+ pxor %xmm1,%xmm4
+ movdqa 32-128(%rax),%xmm1
+
+ movdqa %xmm12,%xmm8
+ movdqa %xmm10,%xmm6
+ pxor 128-128(%rax),%xmm4
+ paddd %xmm15,%xmm11
+ pslld $5,%xmm8
+ pxor %xmm13,%xmm6
+
+ movdqa %xmm12,%xmm9
+ movdqa %xmm3,240-128(%rax)
+ paddd %xmm3,%xmm11
+ pxor %xmm1,%xmm4
+ psrld $27,%xmm9
+ pxor %xmm14,%xmm6
+ movdqa %xmm13,%xmm7
+
+ pslld $30,%xmm7
+ movdqa %xmm4,%xmm5
+ por %xmm9,%xmm8
+ psrld $31,%xmm5
+ paddd %xmm6,%xmm11
+ paddd %xmm4,%xmm4
+
+ psrld $2,%xmm13
+ paddd %xmm8,%xmm11
+ por %xmm5,%xmm4
+ por %xmm7,%xmm13
+ pxor %xmm2,%xmm0
+ movdqa 48-128(%rax),%xmm2
+
+ movdqa %xmm11,%xmm8
+ movdqa %xmm14,%xmm6
+ pxor 144-128(%rax),%xmm0
+ paddd %xmm15,%xmm10
+ pslld $5,%xmm8
+ pxor %xmm12,%xmm6
+
+ movdqa %xmm11,%xmm9
+ movdqa %xmm4,0-128(%rax)
+ paddd %xmm4,%xmm10
+ pxor %xmm2,%xmm0
+ psrld $27,%xmm9
+ pxor %xmm13,%xmm6
+ movdqa %xmm12,%xmm7
+
+ pslld $30,%xmm7
+ movdqa %xmm0,%xmm5
+ por %xmm9,%xmm8
+ psrld $31,%xmm5
+ paddd %xmm6,%xmm10
+ paddd %xmm0,%xmm0
+
+ psrld $2,%xmm12
+ paddd %xmm8,%xmm10
+ por %xmm5,%xmm0
+ por %xmm7,%xmm12
+ pxor %xmm3,%xmm1
+ movdqa 64-128(%rax),%xmm3
+
+ movdqa %xmm10,%xmm8
+ movdqa %xmm13,%xmm6
+ pxor 160-128(%rax),%xmm1
+ paddd %xmm15,%xmm14
+ pslld $5,%xmm8
+ pxor %xmm11,%xmm6
+
+ movdqa %xmm10,%xmm9
+ movdqa %xmm0,16-128(%rax)
+ paddd %xmm0,%xmm14
+ pxor %xmm3,%xmm1
+ psrld $27,%xmm9
+ pxor %xmm12,%xmm6
+ movdqa %xmm11,%xmm7
+
+ pslld $30,%xmm7
+ movdqa %xmm1,%xmm5
+ por %xmm9,%xmm8
+ psrld $31,%xmm5
+ paddd %xmm6,%xmm14
+ paddd %xmm1,%xmm1
+
+ psrld $2,%xmm11
+ paddd %xmm8,%xmm14
+ por %xmm5,%xmm1
+ por %xmm7,%xmm11
+ pxor %xmm4,%xmm2
+ movdqa 80-128(%rax),%xmm4
+
+ movdqa %xmm14,%xmm8
+ movdqa %xmm12,%xmm6
+ pxor 176-128(%rax),%xmm2
+ paddd %xmm15,%xmm13
+ pslld $5,%xmm8
+ pxor %xmm10,%xmm6
+
+ movdqa %xmm14,%xmm9
+ movdqa %xmm1,32-128(%rax)
+ paddd %xmm1,%xmm13
+ pxor %xmm4,%xmm2
+ psrld $27,%xmm9
+ pxor %xmm11,%xmm6
+ movdqa %xmm10,%xmm7
+
+ pslld $30,%xmm7
+ movdqa %xmm2,%xmm5
+ por %xmm9,%xmm8
+ psrld $31,%xmm5
+ paddd %xmm6,%xmm13
+ paddd %xmm2,%xmm2
+
+ psrld $2,%xmm10
+ paddd %xmm8,%xmm13
+ por %xmm5,%xmm2
+ por %xmm7,%xmm10
+ pxor %xmm0,%xmm3
+ movdqa 96-128(%rax),%xmm0
+
+ movdqa %xmm13,%xmm8
+ movdqa %xmm11,%xmm6
+ pxor 192-128(%rax),%xmm3
+ paddd %xmm15,%xmm12
+ pslld $5,%xmm8
+ pxor %xmm14,%xmm6
+
+ movdqa %xmm13,%xmm9
+ movdqa %xmm2,48-128(%rax)
+ paddd %xmm2,%xmm12
+ pxor %xmm0,%xmm3
+ psrld $27,%xmm9
+ pxor %xmm10,%xmm6
+ movdqa %xmm14,%xmm7
+
+ pslld $30,%xmm7
+ movdqa %xmm3,%xmm5
+ por %xmm9,%xmm8
+ psrld $31,%xmm5
+ paddd %xmm6,%xmm12
+ paddd %xmm3,%xmm3
+
+ psrld $2,%xmm14
+ paddd %xmm8,%xmm12
+ por %xmm5,%xmm3
+ por %xmm7,%xmm14
+ pxor %xmm1,%xmm4
+ movdqa 112-128(%rax),%xmm1
+
+ movdqa %xmm12,%xmm8
+ movdqa %xmm10,%xmm6
+ pxor 208-128(%rax),%xmm4
+ paddd %xmm15,%xmm11
+ pslld $5,%xmm8
+ pxor %xmm13,%xmm6
+
+ movdqa %xmm12,%xmm9
+ movdqa %xmm3,64-128(%rax)
+ paddd %xmm3,%xmm11
+ pxor %xmm1,%xmm4
+ psrld $27,%xmm9
+ pxor %xmm14,%xmm6
+ movdqa %xmm13,%xmm7
+
+ pslld $30,%xmm7
+ movdqa %xmm4,%xmm5
+ por %xmm9,%xmm8
+ psrld $31,%xmm5
+ paddd %xmm6,%xmm11
+ paddd %xmm4,%xmm4
+
+ psrld $2,%xmm13
+ paddd %xmm8,%xmm11
+ por %xmm5,%xmm4
+ por %xmm7,%xmm13
+ pxor %xmm2,%xmm0
+ movdqa 128-128(%rax),%xmm2
+
+ movdqa %xmm11,%xmm8
+ movdqa %xmm14,%xmm6
+ pxor 224-128(%rax),%xmm0
+ paddd %xmm15,%xmm10
+ pslld $5,%xmm8
+ pxor %xmm12,%xmm6
+
+ movdqa %xmm11,%xmm9
+ movdqa %xmm4,80-128(%rax)
+ paddd %xmm4,%xmm10
+ pxor %xmm2,%xmm0
+ psrld $27,%xmm9
+ pxor %xmm13,%xmm6
+ movdqa %xmm12,%xmm7
+
+ pslld $30,%xmm7
+ movdqa %xmm0,%xmm5
+ por %xmm9,%xmm8
+ psrld $31,%xmm5
+ paddd %xmm6,%xmm10
+ paddd %xmm0,%xmm0
+
+ psrld $2,%xmm12
+ paddd %xmm8,%xmm10
+ por %xmm5,%xmm0
+ por %xmm7,%xmm12
+ pxor %xmm3,%xmm1
+ movdqa 144-128(%rax),%xmm3
+
+ movdqa %xmm10,%xmm8
+ movdqa %xmm13,%xmm6
+ pxor 240-128(%rax),%xmm1
+ paddd %xmm15,%xmm14
+ pslld $5,%xmm8
+ pxor %xmm11,%xmm6
+
+ movdqa %xmm10,%xmm9
+ movdqa %xmm0,96-128(%rax)
+ paddd %xmm0,%xmm14
+ pxor %xmm3,%xmm1
+ psrld $27,%xmm9
+ pxor %xmm12,%xmm6
+ movdqa %xmm11,%xmm7
+
+ pslld $30,%xmm7
+ movdqa %xmm1,%xmm5
+ por %xmm9,%xmm8
+ psrld $31,%xmm5
+ paddd %xmm6,%xmm14
+ paddd %xmm1,%xmm1
+
+ psrld $2,%xmm11
+ paddd %xmm8,%xmm14
+ por %xmm5,%xmm1
+ por %xmm7,%xmm11
+ pxor %xmm4,%xmm2
+ movdqa 160-128(%rax),%xmm4
+
+ movdqa %xmm14,%xmm8
+ movdqa %xmm12,%xmm6
+ pxor 0-128(%rax),%xmm2
+ paddd %xmm15,%xmm13
+ pslld $5,%xmm8
+ pxor %xmm10,%xmm6
+
+ movdqa %xmm14,%xmm9
+ movdqa %xmm1,112-128(%rax)
+ paddd %xmm1,%xmm13
+ pxor %xmm4,%xmm2
+ psrld $27,%xmm9
+ pxor %xmm11,%xmm6
+ movdqa %xmm10,%xmm7
+
+ pslld $30,%xmm7
+ movdqa %xmm2,%xmm5
+ por %xmm9,%xmm8
+ psrld $31,%xmm5
+ paddd %xmm6,%xmm13
+ paddd %xmm2,%xmm2
+
+ psrld $2,%xmm10
+ paddd %xmm8,%xmm13
+ por %xmm5,%xmm2
+ por %xmm7,%xmm10
+ pxor %xmm0,%xmm3
+ movdqa 176-128(%rax),%xmm0
+
+ movdqa %xmm13,%xmm8
+ movdqa %xmm11,%xmm6
+ pxor 16-128(%rax),%xmm3
+ paddd %xmm15,%xmm12
+ pslld $5,%xmm8
+ pxor %xmm14,%xmm6
+
+ movdqa %xmm13,%xmm9
+ paddd %xmm2,%xmm12
+ pxor %xmm0,%xmm3
+ psrld $27,%xmm9
+ pxor %xmm10,%xmm6
+ movdqa %xmm14,%xmm7
+
+ pslld $30,%xmm7
+ movdqa %xmm3,%xmm5
+ por %xmm9,%xmm8
+ psrld $31,%xmm5
+ paddd %xmm6,%xmm12
+ paddd %xmm3,%xmm3
+
+ psrld $2,%xmm14
+ paddd %xmm8,%xmm12
+ por %xmm5,%xmm3
+ por %xmm7,%xmm14
+ pxor %xmm1,%xmm4
+ movdqa 192-128(%rax),%xmm1
+
+ movdqa %xmm12,%xmm8
+ movdqa %xmm10,%xmm6
+ pxor 32-128(%rax),%xmm4
+ paddd %xmm15,%xmm11
+ pslld $5,%xmm8
+ pxor %xmm13,%xmm6
+
+ movdqa %xmm12,%xmm9
+ paddd %xmm3,%xmm11
+ pxor %xmm1,%xmm4
+ psrld $27,%xmm9
+ pxor %xmm14,%xmm6
+ movdqa %xmm13,%xmm7
+
+ pslld $30,%xmm7
+ movdqa %xmm4,%xmm5
+ por %xmm9,%xmm8
+ psrld $31,%xmm5
+ paddd %xmm6,%xmm11
+ paddd %xmm4,%xmm4
+
+ psrld $2,%xmm13
+ paddd %xmm8,%xmm11
+ por %xmm5,%xmm4
+ por %xmm7,%xmm13
+ pxor %xmm2,%xmm0
+ movdqa 208-128(%rax),%xmm2
+
+ movdqa %xmm11,%xmm8
+ movdqa %xmm14,%xmm6
+ pxor 48-128(%rax),%xmm0
+ paddd %xmm15,%xmm10
+ pslld $5,%xmm8
+ pxor %xmm12,%xmm6
+
+ movdqa %xmm11,%xmm9
+ paddd %xmm4,%xmm10
+ pxor %xmm2,%xmm0
+ psrld $27,%xmm9
+ pxor %xmm13,%xmm6
+ movdqa %xmm12,%xmm7
+
+ pslld $30,%xmm7
+ movdqa %xmm0,%xmm5
+ por %xmm9,%xmm8
+ psrld $31,%xmm5
+ paddd %xmm6,%xmm10
+ paddd %xmm0,%xmm0
+
+ psrld $2,%xmm12
+ paddd %xmm8,%xmm10
+ por %xmm5,%xmm0
+ por %xmm7,%xmm12
+ pxor %xmm3,%xmm1
+ movdqa 224-128(%rax),%xmm3
+
+ movdqa %xmm10,%xmm8
+ movdqa %xmm13,%xmm6
+ pxor 64-128(%rax),%xmm1
+ paddd %xmm15,%xmm14
+ pslld $5,%xmm8
+ pxor %xmm11,%xmm6
+
+ movdqa %xmm10,%xmm9
+ paddd %xmm0,%xmm14
+ pxor %xmm3,%xmm1
+ psrld $27,%xmm9
+ pxor %xmm12,%xmm6
+ movdqa %xmm11,%xmm7
+
+ pslld $30,%xmm7
+ movdqa %xmm1,%xmm5
+ por %xmm9,%xmm8
+ psrld $31,%xmm5
+ paddd %xmm6,%xmm14
+ paddd %xmm1,%xmm1
+
+ psrld $2,%xmm11
+ paddd %xmm8,%xmm14
+ por %xmm5,%xmm1
+ por %xmm7,%xmm11
+ pxor %xmm4,%xmm2
+ movdqa 240-128(%rax),%xmm4
+
+ movdqa %xmm14,%xmm8
+ movdqa %xmm12,%xmm6
+ pxor 80-128(%rax),%xmm2
+ paddd %xmm15,%xmm13
+ pslld $5,%xmm8
+ pxor %xmm10,%xmm6
+
+ movdqa %xmm14,%xmm9
+ paddd %xmm1,%xmm13
+ pxor %xmm4,%xmm2
+ psrld $27,%xmm9
+ pxor %xmm11,%xmm6
+ movdqa %xmm10,%xmm7
+
+ pslld $30,%xmm7
+ movdqa %xmm2,%xmm5
+ por %xmm9,%xmm8
+ psrld $31,%xmm5
+ paddd %xmm6,%xmm13
+ paddd %xmm2,%xmm2
+
+ psrld $2,%xmm10
+ paddd %xmm8,%xmm13
+ por %xmm5,%xmm2
+ por %xmm7,%xmm10
+ pxor %xmm0,%xmm3
+ movdqa 0-128(%rax),%xmm0
+
+ movdqa %xmm13,%xmm8
+ movdqa %xmm11,%xmm6
+ pxor 96-128(%rax),%xmm3
+ paddd %xmm15,%xmm12
+ pslld $5,%xmm8
+ pxor %xmm14,%xmm6
+
+ movdqa %xmm13,%xmm9
+ paddd %xmm2,%xmm12
+ pxor %xmm0,%xmm3
+ psrld $27,%xmm9
+ pxor %xmm10,%xmm6
+ movdqa %xmm14,%xmm7
+
+ pslld $30,%xmm7
+ movdqa %xmm3,%xmm5
+ por %xmm9,%xmm8
+ psrld $31,%xmm5
+ paddd %xmm6,%xmm12
+ paddd %xmm3,%xmm3
+
+ psrld $2,%xmm14
+ paddd %xmm8,%xmm12
+ por %xmm5,%xmm3
+ por %xmm7,%xmm14
+ pxor %xmm1,%xmm4
+ movdqa 16-128(%rax),%xmm1
+
+ movdqa %xmm12,%xmm8
+ movdqa %xmm10,%xmm6
+ pxor 112-128(%rax),%xmm4
+ paddd %xmm15,%xmm11
+ pslld $5,%xmm8
+ pxor %xmm13,%xmm6
+
+ movdqa %xmm12,%xmm9
+ paddd %xmm3,%xmm11
+ pxor %xmm1,%xmm4
+ psrld $27,%xmm9
+ pxor %xmm14,%xmm6
+ movdqa %xmm13,%xmm7
+
+ pslld $30,%xmm7
+ movdqa %xmm4,%xmm5
+ por %xmm9,%xmm8
+ psrld $31,%xmm5
+ paddd %xmm6,%xmm11
+ paddd %xmm4,%xmm4
+
+ psrld $2,%xmm13
+ paddd %xmm8,%xmm11
+ por %xmm5,%xmm4
+ por %xmm7,%xmm13
+ movdqa %xmm11,%xmm8
+ paddd %xmm15,%xmm10
+ movdqa %xmm14,%xmm6
+ pslld $5,%xmm8
+ pxor %xmm12,%xmm6
+
+ movdqa %xmm11,%xmm9
+ paddd %xmm4,%xmm10
+ psrld $27,%xmm9
+ movdqa %xmm12,%xmm7
+ pxor %xmm13,%xmm6
+
+ pslld $30,%xmm7
+ por %xmm9,%xmm8
+ paddd %xmm6,%xmm10
+
+ psrld $2,%xmm12
+ paddd %xmm8,%xmm10
+ por %xmm7,%xmm12
+ movdqa (%rbx),%xmm0
+ movl $1,%ecx
+ cmpl 0(%rbx),%ecx
+ pxor %xmm8,%xmm8
+ cmovgeq %rbp,%r8
+ cmpl 4(%rbx),%ecx
+ movdqa %xmm0,%xmm1
+ cmovgeq %rbp,%r9
+ cmpl 8(%rbx),%ecx
+ pcmpgtd %xmm8,%xmm1
+ cmovgeq %rbp,%r10
+ cmpl 12(%rbx),%ecx
+ paddd %xmm1,%xmm0
+ cmovgeq %rbp,%r11
+
+ movdqu 0(%rdi),%xmm6
+ pand %xmm1,%xmm10
+ movdqu 32(%rdi),%xmm7
+ pand %xmm1,%xmm11
+ paddd %xmm6,%xmm10
+ movdqu 64(%rdi),%xmm8
+ pand %xmm1,%xmm12
+ paddd %xmm7,%xmm11
+ movdqu 96(%rdi),%xmm9
+ pand %xmm1,%xmm13
+ paddd %xmm8,%xmm12
+ movdqu 128(%rdi),%xmm5
+ pand %xmm1,%xmm14
+ movdqu %xmm10,0(%rdi)
+ paddd %xmm9,%xmm13
+ movdqu %xmm11,32(%rdi)
+ paddd %xmm5,%xmm14
+ movdqu %xmm12,64(%rdi)
+ movdqu %xmm13,96(%rdi)
+ movdqu %xmm14,128(%rdi)
+
+ movdqa %xmm0,(%rbx)
+ movdqa 96(%rbp),%xmm5
+ movdqa -32(%rbp),%xmm15
+ decl %edx
+ jnz .Loop
+
+ movl 280(%rsp),%edx
+ leaq 16(%rdi),%rdi
+ leaq 64(%rsi),%rsi
+ decl %edx
+ jnz .Loop_grande
+
+.Ldone:
+ movq 272(%rsp),%rax
+ movq -16(%rax),%rbp
+ movq -8(%rax),%rbx
+ leaq (%rax),%rsp
+.Lepilogue:
+ .byte 0xf3,0xc3
+.size sha1_multi_block,.-sha1_multi_block
+.type sha1_multi_block_shaext,@function
+.align 32
+sha1_multi_block_shaext:
+_shaext_shortcut:
+ movq %rsp,%rax
+ pushq %rbx
+ pushq %rbp
+ subq $288,%rsp
+ shll $1,%edx
+ andq $-256,%rsp
+ leaq 64(%rdi),%rdi
+ movq %rax,272(%rsp)
+.Lbody_shaext:
+ leaq 256(%rsp),%rbx
+ movdqa K_XX_XX+128(%rip),%xmm3
+
+.Loop_grande_shaext:
+ movl %edx,280(%rsp)
+ xorl %edx,%edx
+ movq 0(%rsi),%r8
+ movl 8(%rsi),%ecx
+ cmpl %edx,%ecx
+ cmovgl %ecx,%edx
+ testl %ecx,%ecx
+ movl %ecx,0(%rbx)
+ cmovleq %rsp,%r8
+ movq 16(%rsi),%r9
+ movl 24(%rsi),%ecx
+ cmpl %edx,%ecx
+ cmovgl %ecx,%edx
+ testl %ecx,%ecx
+ movl %ecx,4(%rbx)
+ cmovleq %rsp,%r9
+ testl %edx,%edx
+ jz .Ldone_shaext
+
+ movq 0-64(%rdi),%xmm0
+ movq 32-64(%rdi),%xmm4
+ movq 64-64(%rdi),%xmm5
+ movq 96-64(%rdi),%xmm6
+ movq 128-64(%rdi),%xmm7
+
+ punpckldq %xmm4,%xmm0
+ punpckldq %xmm6,%xmm5
+
+ movdqa %xmm0,%xmm8
+ punpcklqdq %xmm5,%xmm0
+ punpckhqdq %xmm5,%xmm8
+
+ pshufd $63,%xmm7,%xmm1
+ pshufd $127,%xmm7,%xmm9
+ pshufd $27,%xmm0,%xmm0
+ pshufd $27,%xmm8,%xmm8
+ jmp .Loop_shaext
+
+.align 32
+.Loop_shaext:
+ movdqu 0(%r8),%xmm4
+ movdqu 0(%r9),%xmm11
+ movdqu 16(%r8),%xmm5
+ movdqu 16(%r9),%xmm12
+ movdqu 32(%r8),%xmm6
+.byte 102,15,56,0,227
+ movdqu 32(%r9),%xmm13
+.byte 102,68,15,56,0,219
+ movdqu 48(%r8),%xmm7
+ leaq 64(%r8),%r8
+.byte 102,15,56,0,235
+ movdqu 48(%r9),%xmm14
+ leaq 64(%r9),%r9
+.byte 102,68,15,56,0,227
+
+ movdqa %xmm1,80(%rsp)
+ paddd %xmm4,%xmm1
+ movdqa %xmm9,112(%rsp)
+ paddd %xmm11,%xmm9
+ movdqa %xmm0,64(%rsp)
+ movdqa %xmm0,%xmm2
+ movdqa %xmm8,96(%rsp)
+ movdqa %xmm8,%xmm10
+.byte 15,58,204,193,0
+.byte 15,56,200,213
+.byte 69,15,58,204,193,0
+.byte 69,15,56,200,212
+.byte 102,15,56,0,243
+ prefetcht0 127(%r8)
+.byte 15,56,201,229
+.byte 102,68,15,56,0,235
+ prefetcht0 127(%r9)
+.byte 69,15,56,201,220
+
+.byte 102,15,56,0,251
+ movdqa %xmm0,%xmm1
+.byte 102,68,15,56,0,243
+ movdqa %xmm8,%xmm9
+.byte 15,58,204,194,0
+.byte 15,56,200,206
+.byte 69,15,58,204,194,0
+.byte 69,15,56,200,205
+ pxor %xmm6,%xmm4
+.byte 15,56,201,238
+ pxor %xmm13,%xmm11
+.byte 69,15,56,201,229
+ movdqa %xmm0,%xmm2
+ movdqa %xmm8,%xmm10
+.byte 15,58,204,193,0
+.byte 15,56,200,215
+.byte 69,15,58,204,193,0
+.byte 69,15,56,200,214
+.byte 15,56,202,231
+.byte 69,15,56,202,222
+ pxor %xmm7,%xmm5
+.byte 15,56,201,247
+ pxor %xmm14,%xmm12
+.byte 69,15,56,201,238
+ movdqa %xmm0,%xmm1
+ movdqa %xmm8,%xmm9
+.byte 15,58,204,194,0
+.byte 15,56,200,204
+.byte 69,15,58,204,194,0
+.byte 69,15,56,200,203
+.byte 15,56,202,236
+.byte 69,15,56,202,227
+ pxor %xmm4,%xmm6
+.byte 15,56,201,252
+ pxor %xmm11,%xmm13
+.byte 69,15,56,201,243
+ movdqa %xmm0,%xmm2
+ movdqa %xmm8,%xmm10
+.byte 15,58,204,193,0
+.byte 15,56,200,213
+.byte 69,15,58,204,193,0
+.byte 69,15,56,200,212
+.byte 15,56,202,245
+.byte 69,15,56,202,236
+ pxor %xmm5,%xmm7
+.byte 15,56,201,229
+ pxor %xmm12,%xmm14
+.byte 69,15,56,201,220
+ movdqa %xmm0,%xmm1
+ movdqa %xmm8,%xmm9
+.byte 15,58,204,194,1
+.byte 15,56,200,206
+.byte 69,15,58,204,194,1
+.byte 69,15,56,200,205
+.byte 15,56,202,254
+.byte 69,15,56,202,245
+ pxor %xmm6,%xmm4
+.byte 15,56,201,238
+ pxor %xmm13,%xmm11
+.byte 69,15,56,201,229
+ movdqa %xmm0,%xmm2
+ movdqa %xmm8,%xmm10
+.byte 15,58,204,193,1
+.byte 15,56,200,215
+.byte 69,15,58,204,193,1
+.byte 69,15,56,200,214
+.byte 15,56,202,231
+.byte 69,15,56,202,222
+ pxor %xmm7,%xmm5
+.byte 15,56,201,247
+ pxor %xmm14,%xmm12
+.byte 69,15,56,201,238
+ movdqa %xmm0,%xmm1
+ movdqa %xmm8,%xmm9
+.byte 15,58,204,194,1
+.byte 15,56,200,204
+.byte 69,15,58,204,194,1
+.byte 69,15,56,200,203
+.byte 15,56,202,236
+.byte 69,15,56,202,227
+ pxor %xmm4,%xmm6
+.byte 15,56,201,252
+ pxor %xmm11,%xmm13
+.byte 69,15,56,201,243
+ movdqa %xmm0,%xmm2
+ movdqa %xmm8,%xmm10
+.byte 15,58,204,193,1
+.byte 15,56,200,213
+.byte 69,15,58,204,193,1
+.byte 69,15,56,200,212
+.byte 15,56,202,245
+.byte 69,15,56,202,236
+ pxor %xmm5,%xmm7
+.byte 15,56,201,229
+ pxor %xmm12,%xmm14
+.byte 69,15,56,201,220
+ movdqa %xmm0,%xmm1
+ movdqa %xmm8,%xmm9
+.byte 15,58,204,194,1
+.byte 15,56,200,206
+.byte 69,15,58,204,194,1
+.byte 69,15,56,200,205
+.byte 15,56,202,254
+.byte 69,15,56,202,245
+ pxor %xmm6,%xmm4
+.byte 15,56,201,238
+ pxor %xmm13,%xmm11
+.byte 69,15,56,201,229
+ movdqa %xmm0,%xmm2
+ movdqa %xmm8,%xmm10
+.byte 15,58,204,193,2
+.byte 15,56,200,215
+.byte 69,15,58,204,193,2
+.byte 69,15,56,200,214
+.byte 15,56,202,231
+.byte 69,15,56,202,222
+ pxor %xmm7,%xmm5
+.byte 15,56,201,247
+ pxor %xmm14,%xmm12
+.byte 69,15,56,201,238
+ movdqa %xmm0,%xmm1
+ movdqa %xmm8,%xmm9
+.byte 15,58,204,194,2
+.byte 15,56,200,204
+.byte 69,15,58,204,194,2
+.byte 69,15,56,200,203
+.byte 15,56,202,236
+.byte 69,15,56,202,227
+ pxor %xmm4,%xmm6
+.byte 15,56,201,252
+ pxor %xmm11,%xmm13
+.byte 69,15,56,201,243
+ movdqa %xmm0,%xmm2
+ movdqa %xmm8,%xmm10
+.byte 15,58,204,193,2
+.byte 15,56,200,213
+.byte 69,15,58,204,193,2
+.byte 69,15,56,200,212
+.byte 15,56,202,245
+.byte 69,15,56,202,236
+ pxor %xmm5,%xmm7
+.byte 15,56,201,229
+ pxor %xmm12,%xmm14
+.byte 69,15,56,201,220
+ movdqa %xmm0,%xmm1
+ movdqa %xmm8,%xmm9
+.byte 15,58,204,194,2
+.byte 15,56,200,206
+.byte 69,15,58,204,194,2
+.byte 69,15,56,200,205
+.byte 15,56,202,254
+.byte 69,15,56,202,245
+ pxor %xmm6,%xmm4
+.byte 15,56,201,238
+ pxor %xmm13,%xmm11
+.byte 69,15,56,201,229
+ movdqa %xmm0,%xmm2
+ movdqa %xmm8,%xmm10
+.byte 15,58,204,193,2
+.byte 15,56,200,215
+.byte 69,15,58,204,193,2
+.byte 69,15,56,200,214
+.byte 15,56,202,231
+.byte 69,15,56,202,222
+ pxor %xmm7,%xmm5
+.byte 15,56,201,247
+ pxor %xmm14,%xmm12
+.byte 69,15,56,201,238
+ movdqa %xmm0,%xmm1
+ movdqa %xmm8,%xmm9
+.byte 15,58,204,194,3
+.byte 15,56,200,204
+.byte 69,15,58,204,194,3
+.byte 69,15,56,200,203
+.byte 15,56,202,236
+.byte 69,15,56,202,227
+ pxor %xmm4,%xmm6
+.byte 15,56,201,252
+ pxor %xmm11,%xmm13
+.byte 69,15,56,201,243
+ movdqa %xmm0,%xmm2
+ movdqa %xmm8,%xmm10
+.byte 15,58,204,193,3
+.byte 15,56,200,213
+.byte 69,15,58,204,193,3
+.byte 69,15,56,200,212
+.byte 15,56,202,245
+.byte 69,15,56,202,236
+ pxor %xmm5,%xmm7
+ pxor %xmm12,%xmm14
+
+ movl $1,%ecx
+ pxor %xmm4,%xmm4
+ cmpl 0(%rbx),%ecx
+ cmovgeq %rsp,%r8
+
+ movdqa %xmm0,%xmm1
+ movdqa %xmm8,%xmm9
+.byte 15,58,204,194,3
+.byte 15,56,200,206
+.byte 69,15,58,204,194,3
+.byte 69,15,56,200,205
+.byte 15,56,202,254
+.byte 69,15,56,202,245
+
+ cmpl 4(%rbx),%ecx
+ cmovgeq %rsp,%r9
+ movq (%rbx),%xmm6
+
+ movdqa %xmm0,%xmm2
+ movdqa %xmm8,%xmm10
+.byte 15,58,204,193,3
+.byte 15,56,200,215
+.byte 69,15,58,204,193,3
+.byte 69,15,56,200,214
+
+ pshufd $0,%xmm6,%xmm11
+ pshufd $85,%xmm6,%xmm12
+ movdqa %xmm6,%xmm7
+ pcmpgtd %xmm4,%xmm11
+ pcmpgtd %xmm4,%xmm12
+
+ movdqa %xmm0,%xmm1
+ movdqa %xmm8,%xmm9
+.byte 15,58,204,194,3
+.byte 15,56,200,204
+.byte 69,15,58,204,194,3
+.byte 68,15,56,200,204
+
+ pcmpgtd %xmm4,%xmm7
+ pand %xmm11,%xmm0
+ pand %xmm11,%xmm1
+ pand %xmm12,%xmm8
+ pand %xmm12,%xmm9
+ paddd %xmm7,%xmm6
+
+ paddd 64(%rsp),%xmm0
+ paddd 80(%rsp),%xmm1
+ paddd 96(%rsp),%xmm8
+ paddd 112(%rsp),%xmm9
+
+ movq %xmm6,(%rbx)
+ decl %edx
+ jnz .Loop_shaext
+
+ movl 280(%rsp),%edx
+
+ pshufd $27,%xmm0,%xmm0
+ pshufd $27,%xmm8,%xmm8
+
+ movdqa %xmm0,%xmm6
+ punpckldq %xmm8,%xmm0
+ punpckhdq %xmm8,%xmm6
+ punpckhdq %xmm9,%xmm1
+ movq %xmm0,0-64(%rdi)
+ psrldq $8,%xmm0
+ movq %xmm6,64-64(%rdi)
+ psrldq $8,%xmm6
+ movq %xmm0,32-64(%rdi)
+ psrldq $8,%xmm1
+ movq %xmm6,96-64(%rdi)
+ movq %xmm1,128-64(%rdi)
+
+ leaq 8(%rdi),%rdi
+ leaq 32(%rsi),%rsi
+ decl %edx
+ jnz .Loop_grande_shaext
+
+.Ldone_shaext:
+
+ movq -16(%rax),%rbp
+ movq -8(%rax),%rbx
+ leaq (%rax),%rsp
+.Lepilogue_shaext:
+ .byte 0xf3,0xc3
+.size sha1_multi_block_shaext,.-sha1_multi_block_shaext
+
+.align 256
+.long 0x5a827999,0x5a827999,0x5a827999,0x5a827999
+.long 0x5a827999,0x5a827999,0x5a827999,0x5a827999
+K_XX_XX:
+.long 0x6ed9eba1,0x6ed9eba1,0x6ed9eba1,0x6ed9eba1
+.long 0x6ed9eba1,0x6ed9eba1,0x6ed9eba1,0x6ed9eba1
+.long 0x8f1bbcdc,0x8f1bbcdc,0x8f1bbcdc,0x8f1bbcdc
+.long 0x8f1bbcdc,0x8f1bbcdc,0x8f1bbcdc,0x8f1bbcdc
+.long 0xca62c1d6,0xca62c1d6,0xca62c1d6,0xca62c1d6
+.long 0xca62c1d6,0xca62c1d6,0xca62c1d6,0xca62c1d6
+.long 0x00010203,0x04050607,0x08090a0b,0x0c0d0e0f
+.long 0x00010203,0x04050607,0x08090a0b,0x0c0d0e0f
+.byte 0xf,0xe,0xd,0xc,0xb,0xa,0x9,0x8,0x7,0x6,0x5,0x4,0x3,0x2,0x1,0x0
+.byte 83,72,65,49,32,109,117,108,116,105,45,98,108,111,99,107,32,116,114,97,110,115,102,111,114,109,32,102,111,114,32,120,56,54,95,54,52,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0
diff --git a/secure/lib/libcrypto/amd64/sha1-x86_64.S b/secure/lib/libcrypto/amd64/sha1-x86_64.S
index 421423a..25c27e5 100644
--- a/secure/lib/libcrypto/amd64/sha1-x86_64.S
+++ b/secure/lib/libcrypto/amd64/sha1-x86_64.S
@@ -8,23 +8,27 @@
sha1_block_data_order:
movl OPENSSL_ia32cap_P+0(%rip),%r9d
movl OPENSSL_ia32cap_P+4(%rip),%r8d
+ movl OPENSSL_ia32cap_P+8(%rip),%r10d
testl $512,%r8d
jz .Lialu
+ testl $536870912,%r10d
+ jnz _shaext_shortcut
jmp _ssse3_shortcut
.align 16
.Lialu:
+ movq %rsp,%rax
pushq %rbx
pushq %rbp
pushq %r12
pushq %r13
- movq %rsp,%r11
+ pushq %r14
movq %rdi,%r8
subq $72,%rsp
movq %rsi,%r9
andq $-64,%rsp
movq %rdx,%r10
- movq %r11,64(%rsp)
+ movq %rax,64(%rsp)
.Lprologue:
movl 0(%r8),%esi
@@ -38,1230 +42,1168 @@ sha1_block_data_order:
.Lloop:
movl 0(%r9),%edx
bswapl %edx
- movl %edx,0(%rsp)
- movl %r11d,%eax
movl 4(%r9),%ebp
+ movl %r12d,%eax
+ movl %edx,0(%rsp)
movl %esi,%ecx
- xorl %r12d,%eax
bswapl %ebp
+ xorl %r11d,%eax
roll $5,%ecx
- leal 1518500249(%rdx,%r13,1),%r13d
andl %edi,%eax
- movl %ebp,4(%rsp)
+ leal 1518500249(%rdx,%r13,1),%r13d
addl %ecx,%r13d
xorl %r12d,%eax
roll $30,%edi
addl %eax,%r13d
- movl %edi,%eax
- movl 8(%r9),%edx
+ movl 8(%r9),%r14d
+ movl %r11d,%eax
+ movl %ebp,4(%rsp)
movl %r13d,%ecx
- xorl %r11d,%eax
- bswapl %edx
+ bswapl %r14d
+ xorl %edi,%eax
roll $5,%ecx
- leal 1518500249(%rbp,%r12,1),%r12d
andl %esi,%eax
- movl %edx,8(%rsp)
+ leal 1518500249(%rbp,%r12,1),%r12d
addl %ecx,%r12d
xorl %r11d,%eax
roll $30,%esi
addl %eax,%r12d
- movl %esi,%eax
- movl 12(%r9),%ebp
+ movl 12(%r9),%edx
+ movl %edi,%eax
+ movl %r14d,8(%rsp)
movl %r12d,%ecx
- xorl %edi,%eax
- bswapl %ebp
+ bswapl %edx
+ xorl %esi,%eax
roll $5,%ecx
- leal 1518500249(%rdx,%r11,1),%r11d
andl %r13d,%eax
- movl %ebp,12(%rsp)
+ leal 1518500249(%r14,%r11,1),%r11d
addl %ecx,%r11d
xorl %edi,%eax
roll $30,%r13d
addl %eax,%r11d
- movl %r13d,%eax
- movl 16(%r9),%edx
+ movl 16(%r9),%ebp
+ movl %esi,%eax
+ movl %edx,12(%rsp)
movl %r11d,%ecx
- xorl %esi,%eax
- bswapl %edx
+ bswapl %ebp
+ xorl %r13d,%eax
roll $5,%ecx
- leal 1518500249(%rbp,%rdi,1),%edi
andl %r12d,%eax
- movl %edx,16(%rsp)
+ leal 1518500249(%rdx,%rdi,1),%edi
addl %ecx,%edi
xorl %esi,%eax
roll $30,%r12d
addl %eax,%edi
- movl %r12d,%eax
- movl 20(%r9),%ebp
+ movl 20(%r9),%r14d
+ movl %r13d,%eax
+ movl %ebp,16(%rsp)
movl %edi,%ecx
- xorl %r13d,%eax
- bswapl %ebp
+ bswapl %r14d
+ xorl %r12d,%eax
roll $5,%ecx
- leal 1518500249(%rdx,%rsi,1),%esi
andl %r11d,%eax
- movl %ebp,20(%rsp)
+ leal 1518500249(%rbp,%rsi,1),%esi
addl %ecx,%esi
xorl %r13d,%eax
roll $30,%r11d
addl %eax,%esi
- movl %r11d,%eax
movl 24(%r9),%edx
+ movl %r12d,%eax
+ movl %r14d,20(%rsp)
movl %esi,%ecx
- xorl %r12d,%eax
bswapl %edx
+ xorl %r11d,%eax
roll $5,%ecx
- leal 1518500249(%rbp,%r13,1),%r13d
andl %edi,%eax
- movl %edx,24(%rsp)
+ leal 1518500249(%r14,%r13,1),%r13d
addl %ecx,%r13d
xorl %r12d,%eax
roll $30,%edi
addl %eax,%r13d
- movl %edi,%eax
movl 28(%r9),%ebp
+ movl %r11d,%eax
+ movl %edx,24(%rsp)
movl %r13d,%ecx
- xorl %r11d,%eax
bswapl %ebp
+ xorl %edi,%eax
roll $5,%ecx
- leal 1518500249(%rdx,%r12,1),%r12d
andl %esi,%eax
- movl %ebp,28(%rsp)
+ leal 1518500249(%rdx,%r12,1),%r12d
addl %ecx,%r12d
xorl %r11d,%eax
roll $30,%esi
addl %eax,%r12d
- movl %esi,%eax
- movl 32(%r9),%edx
+ movl 32(%r9),%r14d
+ movl %edi,%eax
+ movl %ebp,28(%rsp)
movl %r12d,%ecx
- xorl %edi,%eax
- bswapl %edx
+ bswapl %r14d
+ xorl %esi,%eax
roll $5,%ecx
- leal 1518500249(%rbp,%r11,1),%r11d
andl %r13d,%eax
- movl %edx,32(%rsp)
+ leal 1518500249(%rbp,%r11,1),%r11d
addl %ecx,%r11d
xorl %edi,%eax
roll $30,%r13d
addl %eax,%r11d
- movl %r13d,%eax
- movl 36(%r9),%ebp
+ movl 36(%r9),%edx
+ movl %esi,%eax
+ movl %r14d,32(%rsp)
movl %r11d,%ecx
- xorl %esi,%eax
- bswapl %ebp
+ bswapl %edx
+ xorl %r13d,%eax
roll $5,%ecx
- leal 1518500249(%rdx,%rdi,1),%edi
andl %r12d,%eax
- movl %ebp,36(%rsp)
+ leal 1518500249(%r14,%rdi,1),%edi
addl %ecx,%edi
xorl %esi,%eax
roll $30,%r12d
addl %eax,%edi
- movl %r12d,%eax
- movl 40(%r9),%edx
+ movl 40(%r9),%ebp
+ movl %r13d,%eax
+ movl %edx,36(%rsp)
movl %edi,%ecx
- xorl %r13d,%eax
- bswapl %edx
+ bswapl %ebp
+ xorl %r12d,%eax
roll $5,%ecx
- leal 1518500249(%rbp,%rsi,1),%esi
andl %r11d,%eax
- movl %edx,40(%rsp)
+ leal 1518500249(%rdx,%rsi,1),%esi
addl %ecx,%esi
xorl %r13d,%eax
roll $30,%r11d
addl %eax,%esi
- movl %r11d,%eax
- movl 44(%r9),%ebp
+ movl 44(%r9),%r14d
+ movl %r12d,%eax
+ movl %ebp,40(%rsp)
movl %esi,%ecx
- xorl %r12d,%eax
- bswapl %ebp
+ bswapl %r14d
+ xorl %r11d,%eax
roll $5,%ecx
- leal 1518500249(%rdx,%r13,1),%r13d
andl %edi,%eax
- movl %ebp,44(%rsp)
+ leal 1518500249(%rbp,%r13,1),%r13d
addl %ecx,%r13d
xorl %r12d,%eax
roll $30,%edi
addl %eax,%r13d
- movl %edi,%eax
movl 48(%r9),%edx
+ movl %r11d,%eax
+ movl %r14d,44(%rsp)
movl %r13d,%ecx
- xorl %r11d,%eax
bswapl %edx
+ xorl %edi,%eax
roll $5,%ecx
- leal 1518500249(%rbp,%r12,1),%r12d
andl %esi,%eax
- movl %edx,48(%rsp)
+ leal 1518500249(%r14,%r12,1),%r12d
addl %ecx,%r12d
xorl %r11d,%eax
roll $30,%esi
addl %eax,%r12d
- movl %esi,%eax
movl 52(%r9),%ebp
+ movl %edi,%eax
+ movl %edx,48(%rsp)
movl %r12d,%ecx
- xorl %edi,%eax
bswapl %ebp
+ xorl %esi,%eax
roll $5,%ecx
- leal 1518500249(%rdx,%r11,1),%r11d
andl %r13d,%eax
- movl %ebp,52(%rsp)
+ leal 1518500249(%rdx,%r11,1),%r11d
addl %ecx,%r11d
xorl %edi,%eax
roll $30,%r13d
addl %eax,%r11d
- movl %r13d,%eax
- movl 56(%r9),%edx
+ movl 56(%r9),%r14d
+ movl %esi,%eax
+ movl %ebp,52(%rsp)
movl %r11d,%ecx
- xorl %esi,%eax
- bswapl %edx
+ bswapl %r14d
+ xorl %r13d,%eax
roll $5,%ecx
- leal 1518500249(%rbp,%rdi,1),%edi
andl %r12d,%eax
- movl %edx,56(%rsp)
+ leal 1518500249(%rbp,%rdi,1),%edi
addl %ecx,%edi
xorl %esi,%eax
roll $30,%r12d
addl %eax,%edi
- movl %r12d,%eax
- movl 60(%r9),%ebp
+ movl 60(%r9),%edx
+ movl %r13d,%eax
+ movl %r14d,56(%rsp)
movl %edi,%ecx
- xorl %r13d,%eax
- bswapl %ebp
+ bswapl %edx
+ xorl %r12d,%eax
roll $5,%ecx
- leal 1518500249(%rdx,%rsi,1),%esi
andl %r11d,%eax
- movl %ebp,60(%rsp)
+ leal 1518500249(%r14,%rsi,1),%esi
addl %ecx,%esi
xorl %r13d,%eax
roll $30,%r11d
addl %eax,%esi
- movl 0(%rsp),%edx
- movl %r11d,%eax
+ xorl 0(%rsp),%ebp
+ movl %r12d,%eax
+ movl %edx,60(%rsp)
movl %esi,%ecx
- xorl 8(%rsp),%edx
- xorl %r12d,%eax
+ xorl 8(%rsp),%ebp
+ xorl %r11d,%eax
roll $5,%ecx
- xorl 32(%rsp),%edx
+ xorl 32(%rsp),%ebp
andl %edi,%eax
- leal 1518500249(%rbp,%r13,1),%r13d
- xorl 52(%rsp),%edx
+ leal 1518500249(%rdx,%r13,1),%r13d
+ roll $30,%edi
xorl %r12d,%eax
- roll $1,%edx
addl %ecx,%r13d
- roll $30,%edi
- movl %edx,0(%rsp)
+ roll $1,%ebp
addl %eax,%r13d
- movl 4(%rsp),%ebp
- movl %edi,%eax
+ xorl 4(%rsp),%r14d
+ movl %r11d,%eax
+ movl %ebp,0(%rsp)
movl %r13d,%ecx
- xorl 12(%rsp),%ebp
- xorl %r11d,%eax
+ xorl 12(%rsp),%r14d
+ xorl %edi,%eax
roll $5,%ecx
- xorl 36(%rsp),%ebp
+ xorl 36(%rsp),%r14d
andl %esi,%eax
- leal 1518500249(%rdx,%r12,1),%r12d
- xorl 56(%rsp),%ebp
+ leal 1518500249(%rbp,%r12,1),%r12d
+ roll $30,%esi
xorl %r11d,%eax
- roll $1,%ebp
addl %ecx,%r12d
- roll $30,%esi
- movl %ebp,4(%rsp)
+ roll $1,%r14d
addl %eax,%r12d
- movl 8(%rsp),%edx
- movl %esi,%eax
+ xorl 8(%rsp),%edx
+ movl %edi,%eax
+ movl %r14d,4(%rsp)
movl %r12d,%ecx
xorl 16(%rsp),%edx
- xorl %edi,%eax
+ xorl %esi,%eax
roll $5,%ecx
xorl 40(%rsp),%edx
andl %r13d,%eax
- leal 1518500249(%rbp,%r11,1),%r11d
- xorl 60(%rsp),%edx
+ leal 1518500249(%r14,%r11,1),%r11d
+ roll $30,%r13d
xorl %edi,%eax
- roll $1,%edx
addl %ecx,%r11d
- roll $30,%r13d
- movl %edx,8(%rsp)
+ roll $1,%edx
addl %eax,%r11d
- movl 12(%rsp),%ebp
- movl %r13d,%eax
+ xorl 12(%rsp),%ebp
+ movl %esi,%eax
+ movl %edx,8(%rsp)
movl %r11d,%ecx
xorl 20(%rsp),%ebp
- xorl %esi,%eax
+ xorl %r13d,%eax
roll $5,%ecx
xorl 44(%rsp),%ebp
andl %r12d,%eax
leal 1518500249(%rdx,%rdi,1),%edi
- xorl 0(%rsp),%ebp
+ roll $30,%r12d
xorl %esi,%eax
- roll $1,%ebp
addl %ecx,%edi
- roll $30,%r12d
- movl %ebp,12(%rsp)
+ roll $1,%ebp
addl %eax,%edi
- movl 16(%rsp),%edx
- movl %r12d,%eax
+ xorl 16(%rsp),%r14d
+ movl %r13d,%eax
+ movl %ebp,12(%rsp)
movl %edi,%ecx
- xorl 24(%rsp),%edx
- xorl %r13d,%eax
+ xorl 24(%rsp),%r14d
+ xorl %r12d,%eax
roll $5,%ecx
- xorl 48(%rsp),%edx
+ xorl 48(%rsp),%r14d
andl %r11d,%eax
leal 1518500249(%rbp,%rsi,1),%esi
- xorl 4(%rsp),%edx
+ roll $30,%r11d
xorl %r13d,%eax
- roll $1,%edx
addl %ecx,%esi
- roll $30,%r11d
- movl %edx,16(%rsp)
+ roll $1,%r14d
addl %eax,%esi
- movl 20(%rsp),%ebp
- movl %r11d,%eax
+ xorl 20(%rsp),%edx
+ movl %edi,%eax
+ movl %r14d,16(%rsp)
movl %esi,%ecx
- xorl 28(%rsp),%ebp
- xorl %edi,%eax
- roll $5,%ecx
- leal 1859775393(%rdx,%r13,1),%r13d
- xorl 52(%rsp),%ebp
+ xorl 28(%rsp),%edx
xorl %r12d,%eax
+ roll $5,%ecx
+ xorl 52(%rsp),%edx
+ leal 1859775393(%r14,%r13,1),%r13d
+ xorl %r11d,%eax
addl %ecx,%r13d
- xorl 8(%rsp),%ebp
roll $30,%edi
addl %eax,%r13d
- roll $1,%ebp
- movl %ebp,20(%rsp)
- movl 24(%rsp),%edx
- movl %edi,%eax
+ roll $1,%edx
+ xorl 24(%rsp),%ebp
+ movl %esi,%eax
+ movl %edx,20(%rsp)
movl %r13d,%ecx
- xorl 32(%rsp),%edx
- xorl %esi,%eax
- roll $5,%ecx
- leal 1859775393(%rbp,%r12,1),%r12d
- xorl 56(%rsp),%edx
+ xorl 32(%rsp),%ebp
xorl %r11d,%eax
+ roll $5,%ecx
+ xorl 56(%rsp),%ebp
+ leal 1859775393(%rdx,%r12,1),%r12d
+ xorl %edi,%eax
addl %ecx,%r12d
- xorl 12(%rsp),%edx
roll $30,%esi
addl %eax,%r12d
- roll $1,%edx
- movl %edx,24(%rsp)
- movl 28(%rsp),%ebp
- movl %esi,%eax
+ roll $1,%ebp
+ xorl 28(%rsp),%r14d
+ movl %r13d,%eax
+ movl %ebp,24(%rsp)
movl %r12d,%ecx
- xorl 36(%rsp),%ebp
- xorl %r13d,%eax
- roll $5,%ecx
- leal 1859775393(%rdx,%r11,1),%r11d
- xorl 60(%rsp),%ebp
+ xorl 36(%rsp),%r14d
xorl %edi,%eax
+ roll $5,%ecx
+ xorl 60(%rsp),%r14d
+ leal 1859775393(%rbp,%r11,1),%r11d
+ xorl %esi,%eax
addl %ecx,%r11d
- xorl 16(%rsp),%ebp
roll $30,%r13d
addl %eax,%r11d
- roll $1,%ebp
- movl %ebp,28(%rsp)
- movl 32(%rsp),%edx
- movl %r13d,%eax
+ roll $1,%r14d
+ xorl 32(%rsp),%edx
+ movl %r12d,%eax
+ movl %r14d,28(%rsp)
movl %r11d,%ecx
xorl 40(%rsp),%edx
- xorl %r12d,%eax
+ xorl %esi,%eax
roll $5,%ecx
- leal 1859775393(%rbp,%rdi,1),%edi
xorl 0(%rsp),%edx
- xorl %esi,%eax
+ leal 1859775393(%r14,%rdi,1),%edi
+ xorl %r13d,%eax
addl %ecx,%edi
- xorl 20(%rsp),%edx
roll $30,%r12d
addl %eax,%edi
roll $1,%edx
+ xorl 36(%rsp),%ebp
+ movl %r11d,%eax
movl %edx,32(%rsp)
- movl 36(%rsp),%ebp
- movl %r12d,%eax
movl %edi,%ecx
xorl 44(%rsp),%ebp
- xorl %r11d,%eax
+ xorl %r13d,%eax
roll $5,%ecx
- leal 1859775393(%rdx,%rsi,1),%esi
xorl 4(%rsp),%ebp
- xorl %r13d,%eax
+ leal 1859775393(%rdx,%rsi,1),%esi
+ xorl %r12d,%eax
addl %ecx,%esi
- xorl 24(%rsp),%ebp
roll $30,%r11d
addl %eax,%esi
roll $1,%ebp
+ xorl 40(%rsp),%r14d
+ movl %edi,%eax
movl %ebp,36(%rsp)
- movl 40(%rsp),%edx
- movl %r11d,%eax
movl %esi,%ecx
- xorl 48(%rsp),%edx
- xorl %edi,%eax
+ xorl 48(%rsp),%r14d
+ xorl %r12d,%eax
roll $5,%ecx
+ xorl 8(%rsp),%r14d
leal 1859775393(%rbp,%r13,1),%r13d
- xorl 8(%rsp),%edx
- xorl %r12d,%eax
+ xorl %r11d,%eax
addl %ecx,%r13d
- xorl 28(%rsp),%edx
roll $30,%edi
addl %eax,%r13d
- roll $1,%edx
- movl %edx,40(%rsp)
- movl 44(%rsp),%ebp
- movl %edi,%eax
+ roll $1,%r14d
+ xorl 44(%rsp),%edx
+ movl %esi,%eax
+ movl %r14d,40(%rsp)
movl %r13d,%ecx
- xorl 52(%rsp),%ebp
- xorl %esi,%eax
- roll $5,%ecx
- leal 1859775393(%rdx,%r12,1),%r12d
- xorl 12(%rsp),%ebp
+ xorl 52(%rsp),%edx
xorl %r11d,%eax
+ roll $5,%ecx
+ xorl 12(%rsp),%edx
+ leal 1859775393(%r14,%r12,1),%r12d
+ xorl %edi,%eax
addl %ecx,%r12d
- xorl 32(%rsp),%ebp
roll $30,%esi
addl %eax,%r12d
- roll $1,%ebp
- movl %ebp,44(%rsp)
- movl 48(%rsp),%edx
- movl %esi,%eax
+ roll $1,%edx
+ xorl 48(%rsp),%ebp
+ movl %r13d,%eax
+ movl %edx,44(%rsp)
movl %r12d,%ecx
- xorl 56(%rsp),%edx
- xorl %r13d,%eax
- roll $5,%ecx
- leal 1859775393(%rbp,%r11,1),%r11d
- xorl 16(%rsp),%edx
+ xorl 56(%rsp),%ebp
xorl %edi,%eax
+ roll $5,%ecx
+ xorl 16(%rsp),%ebp
+ leal 1859775393(%rdx,%r11,1),%r11d
+ xorl %esi,%eax
addl %ecx,%r11d
- xorl 36(%rsp),%edx
roll $30,%r13d
addl %eax,%r11d
- roll $1,%edx
- movl %edx,48(%rsp)
- movl 52(%rsp),%ebp
- movl %r13d,%eax
+ roll $1,%ebp
+ xorl 52(%rsp),%r14d
+ movl %r12d,%eax
+ movl %ebp,48(%rsp)
movl %r11d,%ecx
- xorl 60(%rsp),%ebp
- xorl %r12d,%eax
- roll $5,%ecx
- leal 1859775393(%rdx,%rdi,1),%edi
- xorl 20(%rsp),%ebp
+ xorl 60(%rsp),%r14d
xorl %esi,%eax
+ roll $5,%ecx
+ xorl 20(%rsp),%r14d
+ leal 1859775393(%rbp,%rdi,1),%edi
+ xorl %r13d,%eax
addl %ecx,%edi
- xorl 40(%rsp),%ebp
roll $30,%r12d
addl %eax,%edi
- roll $1,%ebp
- movl %ebp,52(%rsp)
- movl 56(%rsp),%edx
- movl %r12d,%eax
+ roll $1,%r14d
+ xorl 56(%rsp),%edx
+ movl %r11d,%eax
+ movl %r14d,52(%rsp)
movl %edi,%ecx
xorl 0(%rsp),%edx
- xorl %r11d,%eax
+ xorl %r13d,%eax
roll $5,%ecx
- leal 1859775393(%rbp,%rsi,1),%esi
xorl 24(%rsp),%edx
- xorl %r13d,%eax
+ leal 1859775393(%r14,%rsi,1),%esi
+ xorl %r12d,%eax
addl %ecx,%esi
- xorl 44(%rsp),%edx
roll $30,%r11d
addl %eax,%esi
roll $1,%edx
+ xorl 60(%rsp),%ebp
+ movl %edi,%eax
movl %edx,56(%rsp)
- movl 60(%rsp),%ebp
- movl %r11d,%eax
movl %esi,%ecx
xorl 4(%rsp),%ebp
- xorl %edi,%eax
+ xorl %r12d,%eax
roll $5,%ecx
- leal 1859775393(%rdx,%r13,1),%r13d
xorl 28(%rsp),%ebp
- xorl %r12d,%eax
+ leal 1859775393(%rdx,%r13,1),%r13d
+ xorl %r11d,%eax
addl %ecx,%r13d
- xorl 48(%rsp),%ebp
roll $30,%edi
addl %eax,%r13d
roll $1,%ebp
+ xorl 0(%rsp),%r14d
+ movl %esi,%eax
movl %ebp,60(%rsp)
- movl 0(%rsp),%edx
- movl %edi,%eax
movl %r13d,%ecx
- xorl 8(%rsp),%edx
- xorl %esi,%eax
+ xorl 8(%rsp),%r14d
+ xorl %r11d,%eax
roll $5,%ecx
+ xorl 32(%rsp),%r14d
leal 1859775393(%rbp,%r12,1),%r12d
- xorl 32(%rsp),%edx
- xorl %r11d,%eax
+ xorl %edi,%eax
addl %ecx,%r12d
- xorl 52(%rsp),%edx
roll $30,%esi
addl %eax,%r12d
- roll $1,%edx
- movl %edx,0(%rsp)
- movl 4(%rsp),%ebp
- movl %esi,%eax
+ roll $1,%r14d
+ xorl 4(%rsp),%edx
+ movl %r13d,%eax
+ movl %r14d,0(%rsp)
movl %r12d,%ecx
- xorl 12(%rsp),%ebp
- xorl %r13d,%eax
- roll $5,%ecx
- leal 1859775393(%rdx,%r11,1),%r11d
- xorl 36(%rsp),%ebp
+ xorl 12(%rsp),%edx
xorl %edi,%eax
+ roll $5,%ecx
+ xorl 36(%rsp),%edx
+ leal 1859775393(%r14,%r11,1),%r11d
+ xorl %esi,%eax
addl %ecx,%r11d
- xorl 56(%rsp),%ebp
roll $30,%r13d
addl %eax,%r11d
- roll $1,%ebp
- movl %ebp,4(%rsp)
- movl 8(%rsp),%edx
- movl %r13d,%eax
+ roll $1,%edx
+ xorl 8(%rsp),%ebp
+ movl %r12d,%eax
+ movl %edx,4(%rsp)
movl %r11d,%ecx
- xorl 16(%rsp),%edx
- xorl %r12d,%eax
- roll $5,%ecx
- leal 1859775393(%rbp,%rdi,1),%edi
- xorl 40(%rsp),%edx
+ xorl 16(%rsp),%ebp
xorl %esi,%eax
+ roll $5,%ecx
+ xorl 40(%rsp),%ebp
+ leal 1859775393(%rdx,%rdi,1),%edi
+ xorl %r13d,%eax
addl %ecx,%edi
- xorl 60(%rsp),%edx
roll $30,%r12d
addl %eax,%edi
- roll $1,%edx
- movl %edx,8(%rsp)
- movl 12(%rsp),%ebp
- movl %r12d,%eax
+ roll $1,%ebp
+ xorl 12(%rsp),%r14d
+ movl %r11d,%eax
+ movl %ebp,8(%rsp)
movl %edi,%ecx
- xorl 20(%rsp),%ebp
- xorl %r11d,%eax
- roll $5,%ecx
- leal 1859775393(%rdx,%rsi,1),%esi
- xorl 44(%rsp),%ebp
+ xorl 20(%rsp),%r14d
xorl %r13d,%eax
+ roll $5,%ecx
+ xorl 44(%rsp),%r14d
+ leal 1859775393(%rbp,%rsi,1),%esi
+ xorl %r12d,%eax
addl %ecx,%esi
- xorl 0(%rsp),%ebp
roll $30,%r11d
addl %eax,%esi
- roll $1,%ebp
- movl %ebp,12(%rsp)
- movl 16(%rsp),%edx
- movl %r11d,%eax
+ roll $1,%r14d
+ xorl 16(%rsp),%edx
+ movl %edi,%eax
+ movl %r14d,12(%rsp)
movl %esi,%ecx
xorl 24(%rsp),%edx
- xorl %edi,%eax
+ xorl %r12d,%eax
roll $5,%ecx
- leal 1859775393(%rbp,%r13,1),%r13d
xorl 48(%rsp),%edx
- xorl %r12d,%eax
+ leal 1859775393(%r14,%r13,1),%r13d
+ xorl %r11d,%eax
addl %ecx,%r13d
- xorl 4(%rsp),%edx
roll $30,%edi
addl %eax,%r13d
roll $1,%edx
+ xorl 20(%rsp),%ebp
+ movl %esi,%eax
movl %edx,16(%rsp)
- movl 20(%rsp),%ebp
- movl %edi,%eax
movl %r13d,%ecx
xorl 28(%rsp),%ebp
- xorl %esi,%eax
+ xorl %r11d,%eax
roll $5,%ecx
- leal 1859775393(%rdx,%r12,1),%r12d
xorl 52(%rsp),%ebp
- xorl %r11d,%eax
+ leal 1859775393(%rdx,%r12,1),%r12d
+ xorl %edi,%eax
addl %ecx,%r12d
- xorl 8(%rsp),%ebp
roll $30,%esi
addl %eax,%r12d
roll $1,%ebp
+ xorl 24(%rsp),%r14d
+ movl %r13d,%eax
movl %ebp,20(%rsp)
- movl 24(%rsp),%edx
- movl %esi,%eax
movl %r12d,%ecx
- xorl 32(%rsp),%edx
- xorl %r13d,%eax
+ xorl 32(%rsp),%r14d
+ xorl %edi,%eax
roll $5,%ecx
+ xorl 56(%rsp),%r14d
leal 1859775393(%rbp,%r11,1),%r11d
- xorl 56(%rsp),%edx
- xorl %edi,%eax
+ xorl %esi,%eax
addl %ecx,%r11d
- xorl 12(%rsp),%edx
roll $30,%r13d
addl %eax,%r11d
- roll $1,%edx
- movl %edx,24(%rsp)
- movl 28(%rsp),%ebp
- movl %r13d,%eax
+ roll $1,%r14d
+ xorl 28(%rsp),%edx
+ movl %r12d,%eax
+ movl %r14d,24(%rsp)
movl %r11d,%ecx
- xorl 36(%rsp),%ebp
- xorl %r12d,%eax
- roll $5,%ecx
- leal 1859775393(%rdx,%rdi,1),%edi
- xorl 60(%rsp),%ebp
+ xorl 36(%rsp),%edx
xorl %esi,%eax
+ roll $5,%ecx
+ xorl 60(%rsp),%edx
+ leal 1859775393(%r14,%rdi,1),%edi
+ xorl %r13d,%eax
addl %ecx,%edi
- xorl 16(%rsp),%ebp
roll $30,%r12d
addl %eax,%edi
- roll $1,%ebp
- movl %ebp,28(%rsp)
- movl 32(%rsp),%edx
- movl %r12d,%eax
+ roll $1,%edx
+ xorl 32(%rsp),%ebp
+ movl %r11d,%eax
+ movl %edx,28(%rsp)
movl %edi,%ecx
- xorl 40(%rsp),%edx
- xorl %r11d,%eax
- roll $5,%ecx
- leal 1859775393(%rbp,%rsi,1),%esi
- xorl 0(%rsp),%edx
+ xorl 40(%rsp),%ebp
xorl %r13d,%eax
+ roll $5,%ecx
+ xorl 0(%rsp),%ebp
+ leal 1859775393(%rdx,%rsi,1),%esi
+ xorl %r12d,%eax
addl %ecx,%esi
- xorl 20(%rsp),%edx
roll $30,%r11d
addl %eax,%esi
- roll $1,%edx
- movl %edx,32(%rsp)
- movl 36(%rsp),%ebp
- movl %r11d,%eax
- movl %r11d,%ebx
- xorl 44(%rsp),%ebp
- andl %r12d,%eax
+ roll $1,%ebp
+ xorl 36(%rsp),%r14d
+ movl %r12d,%eax
+ movl %ebp,32(%rsp)
+ movl %r12d,%ebx
+ xorl 44(%rsp),%r14d
+ andl %r11d,%eax
movl %esi,%ecx
- xorl 4(%rsp),%ebp
- xorl %r12d,%ebx
- leal -1894007588(%rdx,%r13,1),%r13d
+ xorl 4(%rsp),%r14d
+ leal -1894007588(%rbp,%r13,1),%r13d
+ xorl %r11d,%ebx
roll $5,%ecx
- xorl 24(%rsp),%ebp
addl %eax,%r13d
+ roll $1,%r14d
andl %edi,%ebx
- roll $1,%ebp
- addl %ebx,%r13d
- roll $30,%edi
- movl %ebp,36(%rsp)
addl %ecx,%r13d
- movl 40(%rsp),%edx
- movl %edi,%eax
- movl %edi,%ebx
+ roll $30,%edi
+ addl %ebx,%r13d
+ xorl 40(%rsp),%edx
+ movl %r11d,%eax
+ movl %r14d,36(%rsp)
+ movl %r11d,%ebx
xorl 48(%rsp),%edx
- andl %r11d,%eax
+ andl %edi,%eax
movl %r13d,%ecx
xorl 8(%rsp),%edx
- xorl %r11d,%ebx
- leal -1894007588(%rbp,%r12,1),%r12d
+ leal -1894007588(%r14,%r12,1),%r12d
+ xorl %edi,%ebx
roll $5,%ecx
- xorl 28(%rsp),%edx
addl %eax,%r12d
- andl %esi,%ebx
roll $1,%edx
- addl %ebx,%r12d
+ andl %esi,%ebx
+ addl %ecx,%r12d
roll $30,%esi
+ addl %ebx,%r12d
+ xorl 44(%rsp),%ebp
+ movl %edi,%eax
movl %edx,40(%rsp)
- addl %ecx,%r12d
- movl 44(%rsp),%ebp
- movl %esi,%eax
- movl %esi,%ebx
+ movl %edi,%ebx
xorl 52(%rsp),%ebp
- andl %edi,%eax
+ andl %esi,%eax
movl %r12d,%ecx
xorl 12(%rsp),%ebp
- xorl %edi,%ebx
leal -1894007588(%rdx,%r11,1),%r11d
+ xorl %esi,%ebx
roll $5,%ecx
- xorl 32(%rsp),%ebp
addl %eax,%r11d
- andl %r13d,%ebx
roll $1,%ebp
- addl %ebx,%r11d
+ andl %r13d,%ebx
+ addl %ecx,%r11d
roll $30,%r13d
+ addl %ebx,%r11d
+ xorl 48(%rsp),%r14d
+ movl %esi,%eax
movl %ebp,44(%rsp)
- addl %ecx,%r11d
- movl 48(%rsp),%edx
- movl %r13d,%eax
- movl %r13d,%ebx
- xorl 56(%rsp),%edx
- andl %esi,%eax
+ movl %esi,%ebx
+ xorl 56(%rsp),%r14d
+ andl %r13d,%eax
movl %r11d,%ecx
- xorl 16(%rsp),%edx
- xorl %esi,%ebx
+ xorl 16(%rsp),%r14d
leal -1894007588(%rbp,%rdi,1),%edi
+ xorl %r13d,%ebx
roll $5,%ecx
- xorl 36(%rsp),%edx
addl %eax,%edi
+ roll $1,%r14d
andl %r12d,%ebx
- roll $1,%edx
- addl %ebx,%edi
- roll $30,%r12d
- movl %edx,48(%rsp)
addl %ecx,%edi
- movl 52(%rsp),%ebp
- movl %r12d,%eax
- movl %r12d,%ebx
- xorl 60(%rsp),%ebp
- andl %r13d,%eax
+ roll $30,%r12d
+ addl %ebx,%edi
+ xorl 52(%rsp),%edx
+ movl %r13d,%eax
+ movl %r14d,48(%rsp)
+ movl %r13d,%ebx
+ xorl 60(%rsp),%edx
+ andl %r12d,%eax
movl %edi,%ecx
- xorl 20(%rsp),%ebp
- xorl %r13d,%ebx
- leal -1894007588(%rdx,%rsi,1),%esi
+ xorl 20(%rsp),%edx
+ leal -1894007588(%r14,%rsi,1),%esi
+ xorl %r12d,%ebx
roll $5,%ecx
- xorl 40(%rsp),%ebp
addl %eax,%esi
+ roll $1,%edx
andl %r11d,%ebx
- roll $1,%ebp
- addl %ebx,%esi
- roll $30,%r11d
- movl %ebp,52(%rsp)
addl %ecx,%esi
- movl 56(%rsp),%edx
- movl %r11d,%eax
- movl %r11d,%ebx
- xorl 0(%rsp),%edx
- andl %r12d,%eax
+ roll $30,%r11d
+ addl %ebx,%esi
+ xorl 56(%rsp),%ebp
+ movl %r12d,%eax
+ movl %edx,52(%rsp)
+ movl %r12d,%ebx
+ xorl 0(%rsp),%ebp
+ andl %r11d,%eax
movl %esi,%ecx
- xorl 24(%rsp),%edx
- xorl %r12d,%ebx
- leal -1894007588(%rbp,%r13,1),%r13d
+ xorl 24(%rsp),%ebp
+ leal -1894007588(%rdx,%r13,1),%r13d
+ xorl %r11d,%ebx
roll $5,%ecx
- xorl 44(%rsp),%edx
addl %eax,%r13d
+ roll $1,%ebp
andl %edi,%ebx
- roll $1,%edx
- addl %ebx,%r13d
- roll $30,%edi
- movl %edx,56(%rsp)
addl %ecx,%r13d
- movl 60(%rsp),%ebp
- movl %edi,%eax
- movl %edi,%ebx
- xorl 4(%rsp),%ebp
- andl %r11d,%eax
+ roll $30,%edi
+ addl %ebx,%r13d
+ xorl 60(%rsp),%r14d
+ movl %r11d,%eax
+ movl %ebp,56(%rsp)
+ movl %r11d,%ebx
+ xorl 4(%rsp),%r14d
+ andl %edi,%eax
movl %r13d,%ecx
- xorl 28(%rsp),%ebp
- xorl %r11d,%ebx
- leal -1894007588(%rdx,%r12,1),%r12d
+ xorl 28(%rsp),%r14d
+ leal -1894007588(%rbp,%r12,1),%r12d
+ xorl %edi,%ebx
roll $5,%ecx
- xorl 48(%rsp),%ebp
addl %eax,%r12d
+ roll $1,%r14d
andl %esi,%ebx
- roll $1,%ebp
- addl %ebx,%r12d
- roll $30,%esi
- movl %ebp,60(%rsp)
addl %ecx,%r12d
- movl 0(%rsp),%edx
- movl %esi,%eax
- movl %esi,%ebx
+ roll $30,%esi
+ addl %ebx,%r12d
+ xorl 0(%rsp),%edx
+ movl %edi,%eax
+ movl %r14d,60(%rsp)
+ movl %edi,%ebx
xorl 8(%rsp),%edx
- andl %edi,%eax
+ andl %esi,%eax
movl %r12d,%ecx
xorl 32(%rsp),%edx
- xorl %edi,%ebx
- leal -1894007588(%rbp,%r11,1),%r11d
+ leal -1894007588(%r14,%r11,1),%r11d
+ xorl %esi,%ebx
roll $5,%ecx
- xorl 52(%rsp),%edx
addl %eax,%r11d
- andl %r13d,%ebx
roll $1,%edx
- addl %ebx,%r11d
+ andl %r13d,%ebx
+ addl %ecx,%r11d
roll $30,%r13d
+ addl %ebx,%r11d
+ xorl 4(%rsp),%ebp
+ movl %esi,%eax
movl %edx,0(%rsp)
- addl %ecx,%r11d
- movl 4(%rsp),%ebp
- movl %r13d,%eax
- movl %r13d,%ebx
+ movl %esi,%ebx
xorl 12(%rsp),%ebp
- andl %esi,%eax
+ andl %r13d,%eax
movl %r11d,%ecx
xorl 36(%rsp),%ebp
- xorl %esi,%ebx
leal -1894007588(%rdx,%rdi,1),%edi
+ xorl %r13d,%ebx
roll $5,%ecx
- xorl 56(%rsp),%ebp
addl %eax,%edi
- andl %r12d,%ebx
roll $1,%ebp
- addl %ebx,%edi
+ andl %r12d,%ebx
+ addl %ecx,%edi
roll $30,%r12d
+ addl %ebx,%edi
+ xorl 8(%rsp),%r14d
+ movl %r13d,%eax
movl %ebp,4(%rsp)
- addl %ecx,%edi
- movl 8(%rsp),%edx
- movl %r12d,%eax
- movl %r12d,%ebx
- xorl 16(%rsp),%edx
- andl %r13d,%eax
+ movl %r13d,%ebx
+ xorl 16(%rsp),%r14d
+ andl %r12d,%eax
movl %edi,%ecx
- xorl 40(%rsp),%edx
- xorl %r13d,%ebx
+ xorl 40(%rsp),%r14d
leal -1894007588(%rbp,%rsi,1),%esi
+ xorl %r12d,%ebx
roll $5,%ecx
- xorl 60(%rsp),%edx
addl %eax,%esi
+ roll $1,%r14d
andl %r11d,%ebx
- roll $1,%edx
- addl %ebx,%esi
- roll $30,%r11d
- movl %edx,8(%rsp)
addl %ecx,%esi
- movl 12(%rsp),%ebp
- movl %r11d,%eax
- movl %r11d,%ebx
- xorl 20(%rsp),%ebp
- andl %r12d,%eax
+ roll $30,%r11d
+ addl %ebx,%esi
+ xorl 12(%rsp),%edx
+ movl %r12d,%eax
+ movl %r14d,8(%rsp)
+ movl %r12d,%ebx
+ xorl 20(%rsp),%edx
+ andl %r11d,%eax
movl %esi,%ecx
- xorl 44(%rsp),%ebp
- xorl %r12d,%ebx
- leal -1894007588(%rdx,%r13,1),%r13d
+ xorl 44(%rsp),%edx
+ leal -1894007588(%r14,%r13,1),%r13d
+ xorl %r11d,%ebx
roll $5,%ecx
- xorl 0(%rsp),%ebp
addl %eax,%r13d
+ roll $1,%edx
andl %edi,%ebx
- roll $1,%ebp
- addl %ebx,%r13d
- roll $30,%edi
- movl %ebp,12(%rsp)
addl %ecx,%r13d
- movl 16(%rsp),%edx
- movl %edi,%eax
- movl %edi,%ebx
- xorl 24(%rsp),%edx
- andl %r11d,%eax
+ roll $30,%edi
+ addl %ebx,%r13d
+ xorl 16(%rsp),%ebp
+ movl %r11d,%eax
+ movl %edx,12(%rsp)
+ movl %r11d,%ebx
+ xorl 24(%rsp),%ebp
+ andl %edi,%eax
movl %r13d,%ecx
- xorl 48(%rsp),%edx
- xorl %r11d,%ebx
- leal -1894007588(%rbp,%r12,1),%r12d
+ xorl 48(%rsp),%ebp
+ leal -1894007588(%rdx,%r12,1),%r12d
+ xorl %edi,%ebx
roll $5,%ecx
- xorl 4(%rsp),%edx
addl %eax,%r12d
+ roll $1,%ebp
andl %esi,%ebx
- roll $1,%edx
- addl %ebx,%r12d
- roll $30,%esi
- movl %edx,16(%rsp)
addl %ecx,%r12d
- movl 20(%rsp),%ebp
- movl %esi,%eax
- movl %esi,%ebx
- xorl 28(%rsp),%ebp
- andl %edi,%eax
+ roll $30,%esi
+ addl %ebx,%r12d
+ xorl 20(%rsp),%r14d
+ movl %edi,%eax
+ movl %ebp,16(%rsp)
+ movl %edi,%ebx
+ xorl 28(%rsp),%r14d
+ andl %esi,%eax
movl %r12d,%ecx
- xorl 52(%rsp),%ebp
- xorl %edi,%ebx
- leal -1894007588(%rdx,%r11,1),%r11d
+ xorl 52(%rsp),%r14d
+ leal -1894007588(%rbp,%r11,1),%r11d
+ xorl %esi,%ebx
roll $5,%ecx
- xorl 8(%rsp),%ebp
addl %eax,%r11d
+ roll $1,%r14d
andl %r13d,%ebx
- roll $1,%ebp
- addl %ebx,%r11d
- roll $30,%r13d
- movl %ebp,20(%rsp)
addl %ecx,%r11d
- movl 24(%rsp),%edx
- movl %r13d,%eax
- movl %r13d,%ebx
+ roll $30,%r13d
+ addl %ebx,%r11d
+ xorl 24(%rsp),%edx
+ movl %esi,%eax
+ movl %r14d,20(%rsp)
+ movl %esi,%ebx
xorl 32(%rsp),%edx
- andl %esi,%eax
+ andl %r13d,%eax
movl %r11d,%ecx
xorl 56(%rsp),%edx
- xorl %esi,%ebx
- leal -1894007588(%rbp,%rdi,1),%edi
+ leal -1894007588(%r14,%rdi,1),%edi
+ xorl %r13d,%ebx
roll $5,%ecx
- xorl 12(%rsp),%edx
addl %eax,%edi
- andl %r12d,%ebx
roll $1,%edx
- addl %ebx,%edi
+ andl %r12d,%ebx
+ addl %ecx,%edi
roll $30,%r12d
+ addl %ebx,%edi
+ xorl 28(%rsp),%ebp
+ movl %r13d,%eax
movl %edx,24(%rsp)
- addl %ecx,%edi
- movl 28(%rsp),%ebp
- movl %r12d,%eax
- movl %r12d,%ebx
+ movl %r13d,%ebx
xorl 36(%rsp),%ebp
- andl %r13d,%eax
+ andl %r12d,%eax
movl %edi,%ecx
xorl 60(%rsp),%ebp
- xorl %r13d,%ebx
leal -1894007588(%rdx,%rsi,1),%esi
+ xorl %r12d,%ebx
roll $5,%ecx
- xorl 16(%rsp),%ebp
addl %eax,%esi
- andl %r11d,%ebx
roll $1,%ebp
- addl %ebx,%esi
+ andl %r11d,%ebx
+ addl %ecx,%esi
roll $30,%r11d
+ addl %ebx,%esi
+ xorl 32(%rsp),%r14d
+ movl %r12d,%eax
movl %ebp,28(%rsp)
- addl %ecx,%esi
- movl 32(%rsp),%edx
- movl %r11d,%eax
- movl %r11d,%ebx
- xorl 40(%rsp),%edx
- andl %r12d,%eax
+ movl %r12d,%ebx
+ xorl 40(%rsp),%r14d
+ andl %r11d,%eax
movl %esi,%ecx
- xorl 0(%rsp),%edx
- xorl %r12d,%ebx
+ xorl 0(%rsp),%r14d
leal -1894007588(%rbp,%r13,1),%r13d
+ xorl %r11d,%ebx
roll $5,%ecx
- xorl 20(%rsp),%edx
addl %eax,%r13d
+ roll $1,%r14d
andl %edi,%ebx
- roll $1,%edx
- addl %ebx,%r13d
- roll $30,%edi
- movl %edx,32(%rsp)
addl %ecx,%r13d
- movl 36(%rsp),%ebp
- movl %edi,%eax
- movl %edi,%ebx
- xorl 44(%rsp),%ebp
- andl %r11d,%eax
+ roll $30,%edi
+ addl %ebx,%r13d
+ xorl 36(%rsp),%edx
+ movl %r11d,%eax
+ movl %r14d,32(%rsp)
+ movl %r11d,%ebx
+ xorl 44(%rsp),%edx
+ andl %edi,%eax
movl %r13d,%ecx
- xorl 4(%rsp),%ebp
- xorl %r11d,%ebx
- leal -1894007588(%rdx,%r12,1),%r12d
+ xorl 4(%rsp),%edx
+ leal -1894007588(%r14,%r12,1),%r12d
+ xorl %edi,%ebx
roll $5,%ecx
- xorl 24(%rsp),%ebp
addl %eax,%r12d
+ roll $1,%edx
andl %esi,%ebx
- roll $1,%ebp
- addl %ebx,%r12d
- roll $30,%esi
- movl %ebp,36(%rsp)
addl %ecx,%r12d
- movl 40(%rsp),%edx
- movl %esi,%eax
- movl %esi,%ebx
- xorl 48(%rsp),%edx
- andl %edi,%eax
+ roll $30,%esi
+ addl %ebx,%r12d
+ xorl 40(%rsp),%ebp
+ movl %edi,%eax
+ movl %edx,36(%rsp)
+ movl %edi,%ebx
+ xorl 48(%rsp),%ebp
+ andl %esi,%eax
movl %r12d,%ecx
- xorl 8(%rsp),%edx
- xorl %edi,%ebx
- leal -1894007588(%rbp,%r11,1),%r11d
+ xorl 8(%rsp),%ebp
+ leal -1894007588(%rdx,%r11,1),%r11d
+ xorl %esi,%ebx
roll $5,%ecx
- xorl 28(%rsp),%edx
addl %eax,%r11d
+ roll $1,%ebp
andl %r13d,%ebx
- roll $1,%edx
- addl %ebx,%r11d
- roll $30,%r13d
- movl %edx,40(%rsp)
addl %ecx,%r11d
- movl 44(%rsp),%ebp
- movl %r13d,%eax
- movl %r13d,%ebx
- xorl 52(%rsp),%ebp
- andl %esi,%eax
+ roll $30,%r13d
+ addl %ebx,%r11d
+ xorl 44(%rsp),%r14d
+ movl %esi,%eax
+ movl %ebp,40(%rsp)
+ movl %esi,%ebx
+ xorl 52(%rsp),%r14d
+ andl %r13d,%eax
movl %r11d,%ecx
- xorl 12(%rsp),%ebp
- xorl %esi,%ebx
- leal -1894007588(%rdx,%rdi,1),%edi
+ xorl 12(%rsp),%r14d
+ leal -1894007588(%rbp,%rdi,1),%edi
+ xorl %r13d,%ebx
roll $5,%ecx
- xorl 32(%rsp),%ebp
addl %eax,%edi
+ roll $1,%r14d
andl %r12d,%ebx
- roll $1,%ebp
- addl %ebx,%edi
- roll $30,%r12d
- movl %ebp,44(%rsp)
addl %ecx,%edi
- movl 48(%rsp),%edx
- movl %r12d,%eax
- movl %r12d,%ebx
+ roll $30,%r12d
+ addl %ebx,%edi
+ xorl 48(%rsp),%edx
+ movl %r13d,%eax
+ movl %r14d,44(%rsp)
+ movl %r13d,%ebx
xorl 56(%rsp),%edx
- andl %r13d,%eax
+ andl %r12d,%eax
movl %edi,%ecx
xorl 16(%rsp),%edx
- xorl %r13d,%ebx
- leal -1894007588(%rbp,%rsi,1),%esi
+ leal -1894007588(%r14,%rsi,1),%esi
+ xorl %r12d,%ebx
roll $5,%ecx
- xorl 36(%rsp),%edx
addl %eax,%esi
- andl %r11d,%ebx
roll $1,%edx
- addl %ebx,%esi
+ andl %r11d,%ebx
+ addl %ecx,%esi
roll $30,%r11d
+ addl %ebx,%esi
+ xorl 52(%rsp),%ebp
+ movl %edi,%eax
movl %edx,48(%rsp)
- addl %ecx,%esi
- movl 52(%rsp),%ebp
- movl %r11d,%eax
movl %esi,%ecx
xorl 60(%rsp),%ebp
- xorl %edi,%eax
+ xorl %r12d,%eax
roll $5,%ecx
- leal -899497514(%rdx,%r13,1),%r13d
xorl 20(%rsp),%ebp
- xorl %r12d,%eax
+ leal -899497514(%rdx,%r13,1),%r13d
+ xorl %r11d,%eax
addl %ecx,%r13d
- xorl 40(%rsp),%ebp
roll $30,%edi
addl %eax,%r13d
roll $1,%ebp
+ xorl 56(%rsp),%r14d
+ movl %esi,%eax
movl %ebp,52(%rsp)
- movl 56(%rsp),%edx
- movl %edi,%eax
movl %r13d,%ecx
- xorl 0(%rsp),%edx
- xorl %esi,%eax
+ xorl 0(%rsp),%r14d
+ xorl %r11d,%eax
roll $5,%ecx
+ xorl 24(%rsp),%r14d
leal -899497514(%rbp,%r12,1),%r12d
- xorl 24(%rsp),%edx
- xorl %r11d,%eax
+ xorl %edi,%eax
addl %ecx,%r12d
- xorl 44(%rsp),%edx
roll $30,%esi
addl %eax,%r12d
- roll $1,%edx
- movl %edx,56(%rsp)
- movl 60(%rsp),%ebp
- movl %esi,%eax
+ roll $1,%r14d
+ xorl 60(%rsp),%edx
+ movl %r13d,%eax
+ movl %r14d,56(%rsp)
movl %r12d,%ecx
- xorl 4(%rsp),%ebp
- xorl %r13d,%eax
- roll $5,%ecx
- leal -899497514(%rdx,%r11,1),%r11d
- xorl 28(%rsp),%ebp
+ xorl 4(%rsp),%edx
xorl %edi,%eax
+ roll $5,%ecx
+ xorl 28(%rsp),%edx
+ leal -899497514(%r14,%r11,1),%r11d
+ xorl %esi,%eax
addl %ecx,%r11d
- xorl 48(%rsp),%ebp
roll $30,%r13d
addl %eax,%r11d
- roll $1,%ebp
- movl %ebp,60(%rsp)
- movl 0(%rsp),%edx
- movl %r13d,%eax
+ roll $1,%edx
+ xorl 0(%rsp),%ebp
+ movl %r12d,%eax
+ movl %edx,60(%rsp)
movl %r11d,%ecx
- xorl 8(%rsp),%edx
- xorl %r12d,%eax
- roll $5,%ecx
- leal -899497514(%rbp,%rdi,1),%edi
- xorl 32(%rsp),%edx
+ xorl 8(%rsp),%ebp
xorl %esi,%eax
+ roll $5,%ecx
+ xorl 32(%rsp),%ebp
+ leal -899497514(%rdx,%rdi,1),%edi
+ xorl %r13d,%eax
addl %ecx,%edi
- xorl 52(%rsp),%edx
roll $30,%r12d
addl %eax,%edi
- roll $1,%edx
- movl %edx,0(%rsp)
- movl 4(%rsp),%ebp
- movl %r12d,%eax
+ roll $1,%ebp
+ xorl 4(%rsp),%r14d
+ movl %r11d,%eax
+ movl %ebp,0(%rsp)
movl %edi,%ecx
- xorl 12(%rsp),%ebp
- xorl %r11d,%eax
- roll $5,%ecx
- leal -899497514(%rdx,%rsi,1),%esi
- xorl 36(%rsp),%ebp
+ xorl 12(%rsp),%r14d
xorl %r13d,%eax
+ roll $5,%ecx
+ xorl 36(%rsp),%r14d
+ leal -899497514(%rbp,%rsi,1),%esi
+ xorl %r12d,%eax
addl %ecx,%esi
- xorl 56(%rsp),%ebp
roll $30,%r11d
addl %eax,%esi
- roll $1,%ebp
- movl %ebp,4(%rsp)
- movl 8(%rsp),%edx
- movl %r11d,%eax
+ roll $1,%r14d
+ xorl 8(%rsp),%edx
+ movl %edi,%eax
+ movl %r14d,4(%rsp)
movl %esi,%ecx
xorl 16(%rsp),%edx
- xorl %edi,%eax
+ xorl %r12d,%eax
roll $5,%ecx
- leal -899497514(%rbp,%r13,1),%r13d
xorl 40(%rsp),%edx
- xorl %r12d,%eax
+ leal -899497514(%r14,%r13,1),%r13d
+ xorl %r11d,%eax
addl %ecx,%r13d
- xorl 60(%rsp),%edx
roll $30,%edi
addl %eax,%r13d
roll $1,%edx
+ xorl 12(%rsp),%ebp
+ movl %esi,%eax
movl %edx,8(%rsp)
- movl 12(%rsp),%ebp
- movl %edi,%eax
movl %r13d,%ecx
xorl 20(%rsp),%ebp
- xorl %esi,%eax
+ xorl %r11d,%eax
roll $5,%ecx
- leal -899497514(%rdx,%r12,1),%r12d
xorl 44(%rsp),%ebp
- xorl %r11d,%eax
+ leal -899497514(%rdx,%r12,1),%r12d
+ xorl %edi,%eax
addl %ecx,%r12d
- xorl 0(%rsp),%ebp
roll $30,%esi
addl %eax,%r12d
roll $1,%ebp
+ xorl 16(%rsp),%r14d
+ movl %r13d,%eax
movl %ebp,12(%rsp)
- movl 16(%rsp),%edx
- movl %esi,%eax
movl %r12d,%ecx
- xorl 24(%rsp),%edx
- xorl %r13d,%eax
+ xorl 24(%rsp),%r14d
+ xorl %edi,%eax
roll $5,%ecx
+ xorl 48(%rsp),%r14d
leal -899497514(%rbp,%r11,1),%r11d
- xorl 48(%rsp),%edx
- xorl %edi,%eax
+ xorl %esi,%eax
addl %ecx,%r11d
- xorl 4(%rsp),%edx
roll $30,%r13d
addl %eax,%r11d
- roll $1,%edx
- movl %edx,16(%rsp)
- movl 20(%rsp),%ebp
- movl %r13d,%eax
+ roll $1,%r14d
+ xorl 20(%rsp),%edx
+ movl %r12d,%eax
+ movl %r14d,16(%rsp)
movl %r11d,%ecx
- xorl 28(%rsp),%ebp
- xorl %r12d,%eax
- roll $5,%ecx
- leal -899497514(%rdx,%rdi,1),%edi
- xorl 52(%rsp),%ebp
+ xorl 28(%rsp),%edx
xorl %esi,%eax
+ roll $5,%ecx
+ xorl 52(%rsp),%edx
+ leal -899497514(%r14,%rdi,1),%edi
+ xorl %r13d,%eax
addl %ecx,%edi
- xorl 8(%rsp),%ebp
roll $30,%r12d
addl %eax,%edi
- roll $1,%ebp
- movl %ebp,20(%rsp)
- movl 24(%rsp),%edx
- movl %r12d,%eax
+ roll $1,%edx
+ xorl 24(%rsp),%ebp
+ movl %r11d,%eax
+ movl %edx,20(%rsp)
movl %edi,%ecx
- xorl 32(%rsp),%edx
- xorl %r11d,%eax
- roll $5,%ecx
- leal -899497514(%rbp,%rsi,1),%esi
- xorl 56(%rsp),%edx
+ xorl 32(%rsp),%ebp
xorl %r13d,%eax
+ roll $5,%ecx
+ xorl 56(%rsp),%ebp
+ leal -899497514(%rdx,%rsi,1),%esi
+ xorl %r12d,%eax
addl %ecx,%esi
- xorl 12(%rsp),%edx
roll $30,%r11d
addl %eax,%esi
- roll $1,%edx
- movl %edx,24(%rsp)
- movl 28(%rsp),%ebp
- movl %r11d,%eax
+ roll $1,%ebp
+ xorl 28(%rsp),%r14d
+ movl %edi,%eax
+ movl %ebp,24(%rsp)
movl %esi,%ecx
- xorl 36(%rsp),%ebp
- xorl %edi,%eax
- roll $5,%ecx
- leal -899497514(%rdx,%r13,1),%r13d
- xorl 60(%rsp),%ebp
+ xorl 36(%rsp),%r14d
xorl %r12d,%eax
+ roll $5,%ecx
+ xorl 60(%rsp),%r14d
+ leal -899497514(%rbp,%r13,1),%r13d
+ xorl %r11d,%eax
addl %ecx,%r13d
- xorl 16(%rsp),%ebp
roll $30,%edi
addl %eax,%r13d
- roll $1,%ebp
- movl %ebp,28(%rsp)
- movl 32(%rsp),%edx
- movl %edi,%eax
+ roll $1,%r14d
+ xorl 32(%rsp),%edx
+ movl %esi,%eax
+ movl %r14d,28(%rsp)
movl %r13d,%ecx
xorl 40(%rsp),%edx
- xorl %esi,%eax
+ xorl %r11d,%eax
roll $5,%ecx
- leal -899497514(%rbp,%r12,1),%r12d
xorl 0(%rsp),%edx
- xorl %r11d,%eax
+ leal -899497514(%r14,%r12,1),%r12d
+ xorl %edi,%eax
addl %ecx,%r12d
- xorl 20(%rsp),%edx
roll $30,%esi
addl %eax,%r12d
roll $1,%edx
- movl %edx,32(%rsp)
- movl 36(%rsp),%ebp
- movl %esi,%eax
+ xorl 36(%rsp),%ebp
+ movl %r13d,%eax
+
movl %r12d,%ecx
xorl 44(%rsp),%ebp
- xorl %r13d,%eax
+ xorl %edi,%eax
roll $5,%ecx
- leal -899497514(%rdx,%r11,1),%r11d
xorl 4(%rsp),%ebp
- xorl %edi,%eax
+ leal -899497514(%rdx,%r11,1),%r11d
+ xorl %esi,%eax
addl %ecx,%r11d
- xorl 24(%rsp),%ebp
roll $30,%r13d
addl %eax,%r11d
roll $1,%ebp
- movl %ebp,36(%rsp)
- movl 40(%rsp),%edx
- movl %r13d,%eax
+ xorl 40(%rsp),%r14d
+ movl %r12d,%eax
+
movl %r11d,%ecx
- xorl 48(%rsp),%edx
- xorl %r12d,%eax
+ xorl 48(%rsp),%r14d
+ xorl %esi,%eax
roll $5,%ecx
+ xorl 8(%rsp),%r14d
leal -899497514(%rbp,%rdi,1),%edi
- xorl 8(%rsp),%edx
- xorl %esi,%eax
+ xorl %r13d,%eax
addl %ecx,%edi
- xorl 28(%rsp),%edx
roll $30,%r12d
addl %eax,%edi
- roll $1,%edx
- movl %edx,40(%rsp)
- movl 44(%rsp),%ebp
- movl %r12d,%eax
+ roll $1,%r14d
+ xorl 44(%rsp),%edx
+ movl %r11d,%eax
+
movl %edi,%ecx
- xorl 52(%rsp),%ebp
- xorl %r11d,%eax
- roll $5,%ecx
- leal -899497514(%rdx,%rsi,1),%esi
- xorl 12(%rsp),%ebp
+ xorl 52(%rsp),%edx
xorl %r13d,%eax
+ roll $5,%ecx
+ xorl 12(%rsp),%edx
+ leal -899497514(%r14,%rsi,1),%esi
+ xorl %r12d,%eax
addl %ecx,%esi
- xorl 32(%rsp),%ebp
roll $30,%r11d
addl %eax,%esi
- roll $1,%ebp
- movl %ebp,44(%rsp)
- movl 48(%rsp),%edx
- movl %r11d,%eax
+ roll $1,%edx
+ xorl 48(%rsp),%ebp
+ movl %edi,%eax
+
movl %esi,%ecx
- xorl 56(%rsp),%edx
- xorl %edi,%eax
- roll $5,%ecx
- leal -899497514(%rbp,%r13,1),%r13d
- xorl 16(%rsp),%edx
+ xorl 56(%rsp),%ebp
xorl %r12d,%eax
+ roll $5,%ecx
+ xorl 16(%rsp),%ebp
+ leal -899497514(%rdx,%r13,1),%r13d
+ xorl %r11d,%eax
addl %ecx,%r13d
- xorl 36(%rsp),%edx
roll $30,%edi
addl %eax,%r13d
- roll $1,%edx
- movl %edx,48(%rsp)
- movl 52(%rsp),%ebp
- movl %edi,%eax
+ roll $1,%ebp
+ xorl 52(%rsp),%r14d
+ movl %esi,%eax
+
movl %r13d,%ecx
- xorl 60(%rsp),%ebp
- xorl %esi,%eax
- roll $5,%ecx
- leal -899497514(%rdx,%r12,1),%r12d
- xorl 20(%rsp),%ebp
+ xorl 60(%rsp),%r14d
xorl %r11d,%eax
+ roll $5,%ecx
+ xorl 20(%rsp),%r14d
+ leal -899497514(%rbp,%r12,1),%r12d
+ xorl %edi,%eax
addl %ecx,%r12d
- xorl 40(%rsp),%ebp
roll $30,%esi
addl %eax,%r12d
- roll $1,%ebp
- movl 56(%rsp),%edx
- movl %esi,%eax
+ roll $1,%r14d
+ xorl 56(%rsp),%edx
+ movl %r13d,%eax
+
movl %r12d,%ecx
xorl 0(%rsp),%edx
- xorl %r13d,%eax
+ xorl %edi,%eax
roll $5,%ecx
- leal -899497514(%rbp,%r11,1),%r11d
xorl 24(%rsp),%edx
- xorl %edi,%eax
+ leal -899497514(%r14,%r11,1),%r11d
+ xorl %esi,%eax
addl %ecx,%r11d
- xorl 44(%rsp),%edx
roll $30,%r13d
addl %eax,%r11d
roll $1,%edx
- movl 60(%rsp),%ebp
- movl %r13d,%eax
+ xorl 60(%rsp),%ebp
+ movl %r12d,%eax
+
movl %r11d,%ecx
xorl 4(%rsp),%ebp
- xorl %r12d,%eax
+ xorl %esi,%eax
roll $5,%ecx
- leal -899497514(%rdx,%rdi,1),%edi
xorl 28(%rsp),%ebp
- xorl %esi,%eax
+ leal -899497514(%rdx,%rdi,1),%edi
+ xorl %r13d,%eax
addl %ecx,%edi
- xorl 48(%rsp),%ebp
roll $30,%r12d
addl %eax,%edi
roll $1,%ebp
- movl %r12d,%eax
+ movl %r11d,%eax
movl %edi,%ecx
- xorl %r11d,%eax
+ xorl %r13d,%eax
leal -899497514(%rbp,%rsi,1),%esi
roll $5,%ecx
- xorl %r13d,%eax
+ xorl %r12d,%eax
addl %ecx,%esi
roll $30,%r11d
addl %eax,%esi
@@ -1281,29 +1223,202 @@ sha1_block_data_order:
jnz .Lloop
movq 64(%rsp),%rsi
- movq (%rsi),%r13
- movq 8(%rsi),%r12
- movq 16(%rsi),%rbp
- movq 24(%rsi),%rbx
- leaq 32(%rsi),%rsp
+ movq -40(%rsi),%r14
+ movq -32(%rsi),%r13
+ movq -24(%rsi),%r12
+ movq -16(%rsi),%rbp
+ movq -8(%rsi),%rbx
+ leaq (%rsi),%rsp
.Lepilogue:
.byte 0xf3,0xc3
.size sha1_block_data_order,.-sha1_block_data_order
+.type sha1_block_data_order_shaext,@function
+.align 32
+sha1_block_data_order_shaext:
+_shaext_shortcut:
+ movdqu (%rdi),%xmm0
+ movd 16(%rdi),%xmm1
+ movdqa K_XX_XX+160(%rip),%xmm3
+
+ movdqu (%rsi),%xmm4
+ pshufd $27,%xmm0,%xmm0
+ movdqu 16(%rsi),%xmm5
+ pshufd $27,%xmm1,%xmm1
+ movdqu 32(%rsi),%xmm6
+.byte 102,15,56,0,227
+ movdqu 48(%rsi),%xmm7
+.byte 102,15,56,0,235
+.byte 102,15,56,0,243
+ movdqa %xmm1,%xmm9
+.byte 102,15,56,0,251
+ jmp .Loop_shaext
+
+.align 16
+.Loop_shaext:
+ decq %rdx
+ leaq 64(%rsi),%rax
+ paddd %xmm4,%xmm1
+ cmovneq %rax,%rsi
+ movdqa %xmm0,%xmm8
+.byte 15,56,201,229
+ movdqa %xmm0,%xmm2
+.byte 15,58,204,193,0
+.byte 15,56,200,213
+ pxor %xmm6,%xmm4
+.byte 15,56,201,238
+.byte 15,56,202,231
+
+ movdqa %xmm0,%xmm1
+.byte 15,58,204,194,0
+.byte 15,56,200,206
+ pxor %xmm7,%xmm5
+.byte 15,56,202,236
+.byte 15,56,201,247
+ movdqa %xmm0,%xmm2
+.byte 15,58,204,193,0
+.byte 15,56,200,215
+ pxor %xmm4,%xmm6
+.byte 15,56,201,252
+.byte 15,56,202,245
+
+ movdqa %xmm0,%xmm1
+.byte 15,58,204,194,0
+.byte 15,56,200,204
+ pxor %xmm5,%xmm7
+.byte 15,56,202,254
+.byte 15,56,201,229
+ movdqa %xmm0,%xmm2
+.byte 15,58,204,193,0
+.byte 15,56,200,213
+ pxor %xmm6,%xmm4
+.byte 15,56,201,238
+.byte 15,56,202,231
+
+ movdqa %xmm0,%xmm1
+.byte 15,58,204,194,1
+.byte 15,56,200,206
+ pxor %xmm7,%xmm5
+.byte 15,56,202,236
+.byte 15,56,201,247
+ movdqa %xmm0,%xmm2
+.byte 15,58,204,193,1
+.byte 15,56,200,215
+ pxor %xmm4,%xmm6
+.byte 15,56,201,252
+.byte 15,56,202,245
+
+ movdqa %xmm0,%xmm1
+.byte 15,58,204,194,1
+.byte 15,56,200,204
+ pxor %xmm5,%xmm7
+.byte 15,56,202,254
+.byte 15,56,201,229
+ movdqa %xmm0,%xmm2
+.byte 15,58,204,193,1
+.byte 15,56,200,213
+ pxor %xmm6,%xmm4
+.byte 15,56,201,238
+.byte 15,56,202,231
+
+ movdqa %xmm0,%xmm1
+.byte 15,58,204,194,1
+.byte 15,56,200,206
+ pxor %xmm7,%xmm5
+.byte 15,56,202,236
+.byte 15,56,201,247
+ movdqa %xmm0,%xmm2
+.byte 15,58,204,193,2
+.byte 15,56,200,215
+ pxor %xmm4,%xmm6
+.byte 15,56,201,252
+.byte 15,56,202,245
+
+ movdqa %xmm0,%xmm1
+.byte 15,58,204,194,2
+.byte 15,56,200,204
+ pxor %xmm5,%xmm7
+.byte 15,56,202,254
+.byte 15,56,201,229
+ movdqa %xmm0,%xmm2
+.byte 15,58,204,193,2
+.byte 15,56,200,213
+ pxor %xmm6,%xmm4
+.byte 15,56,201,238
+.byte 15,56,202,231
+
+ movdqa %xmm0,%xmm1
+.byte 15,58,204,194,2
+.byte 15,56,200,206
+ pxor %xmm7,%xmm5
+.byte 15,56,202,236
+.byte 15,56,201,247
+ movdqa %xmm0,%xmm2
+.byte 15,58,204,193,2
+.byte 15,56,200,215
+ pxor %xmm4,%xmm6
+.byte 15,56,201,252
+.byte 15,56,202,245
+
+ movdqa %xmm0,%xmm1
+.byte 15,58,204,194,3
+.byte 15,56,200,204
+ pxor %xmm5,%xmm7
+.byte 15,56,202,254
+ movdqu (%rsi),%xmm4
+ movdqa %xmm0,%xmm2
+.byte 15,58,204,193,3
+.byte 15,56,200,213
+ movdqu 16(%rsi),%xmm5
+.byte 102,15,56,0,227
+
+ movdqa %xmm0,%xmm1
+.byte 15,58,204,194,3
+.byte 15,56,200,206
+ movdqu 32(%rsi),%xmm6
+.byte 102,15,56,0,235
+
+ movdqa %xmm0,%xmm2
+.byte 15,58,204,193,3
+.byte 15,56,200,215
+ movdqu 48(%rsi),%xmm7
+.byte 102,15,56,0,243
+
+ movdqa %xmm0,%xmm1
+.byte 15,58,204,194,3
+.byte 65,15,56,200,201
+.byte 102,15,56,0,251
+
+ paddd %xmm8,%xmm0
+ movdqa %xmm1,%xmm9
+
+ jnz .Loop_shaext
+
+ pshufd $27,%xmm0,%xmm0
+ pshufd $27,%xmm1,%xmm1
+ movdqu %xmm0,(%rdi)
+ movd %xmm1,16(%rdi)
+ .byte 0xf3,0xc3
+.size sha1_block_data_order_shaext,.-sha1_block_data_order_shaext
.type sha1_block_data_order_ssse3,@function
.align 16
sha1_block_data_order_ssse3:
_ssse3_shortcut:
+ movq %rsp,%rax
pushq %rbx
pushq %rbp
pushq %r12
+ pushq %r13
+ pushq %r14
leaq -64(%rsp),%rsp
+ movq %rax,%r14
+ andq $-64,%rsp
movq %rdi,%r8
movq %rsi,%r9
movq %rdx,%r10
shlq $6,%r10
addq %r9,%r10
- leaq K_XX_XX(%rip),%r11
+ leaq K_XX_XX+64(%rip),%r11
movl 0(%r8),%eax
movl 4(%r8),%ebx
@@ -1311,19 +1426,22 @@ _ssse3_shortcut:
movl 12(%r8),%edx
movl %ebx,%esi
movl 16(%r8),%ebp
+ movl %ecx,%edi
+ xorl %edx,%edi
+ andl %edi,%esi
movdqa 64(%r11),%xmm6
- movdqa 0(%r11),%xmm9
+ movdqa -64(%r11),%xmm9
movdqu 0(%r9),%xmm0
movdqu 16(%r9),%xmm1
movdqu 32(%r9),%xmm2
movdqu 48(%r9),%xmm3
.byte 102,15,56,0,198
- addq $64,%r9
.byte 102,15,56,0,206
.byte 102,15,56,0,214
-.byte 102,15,56,0,222
+ addq $64,%r9
paddd %xmm9,%xmm0
+.byte 102,15,56,0,222
paddd %xmm9,%xmm1
paddd %xmm9,%xmm2
movdqa %xmm0,0(%rsp)
@@ -1335,904 +1453,882 @@ _ssse3_shortcut:
jmp .Loop_ssse3
.align 16
.Loop_ssse3:
- movdqa %xmm1,%xmm4
- addl 0(%rsp),%ebp
- xorl %edx,%ecx
+ rorl $2,%ebx
+ pshufd $238,%xmm0,%xmm4
+ xorl %edx,%esi
movdqa %xmm3,%xmm8
-.byte 102,15,58,15,224,8
+ paddd %xmm3,%xmm9
movl %eax,%edi
+ addl 0(%rsp),%ebp
+ punpcklqdq %xmm1,%xmm4
+ xorl %ecx,%ebx
roll $5,%eax
- paddd %xmm3,%xmm9
- andl %ecx,%esi
- xorl %edx,%ecx
+ addl %esi,%ebp
psrldq $4,%xmm8
- xorl %edx,%esi
- addl %eax,%ebp
+ andl %ebx,%edi
+ xorl %ecx,%ebx
pxor %xmm0,%xmm4
- rorl $2,%ebx
- addl %esi,%ebp
+ addl %eax,%ebp
+ rorl $7,%eax
pxor %xmm2,%xmm8
- addl 4(%rsp),%edx
- xorl %ecx,%ebx
+ xorl %ecx,%edi
movl %ebp,%esi
- roll $5,%ebp
+ addl 4(%rsp),%edx
pxor %xmm8,%xmm4
- andl %ebx,%edi
- xorl %ecx,%ebx
+ xorl %ebx,%eax
+ roll $5,%ebp
movdqa %xmm9,48(%rsp)
- xorl %ecx,%edi
- addl %ebp,%edx
- movdqa %xmm4,%xmm10
- movdqa %xmm4,%xmm8
- rorl $7,%eax
addl %edi,%edx
- addl 8(%rsp),%ecx
+ andl %eax,%esi
+ movdqa %xmm4,%xmm10
xorl %ebx,%eax
+ addl %ebp,%edx
+ rorl $7,%ebp
+ movdqa %xmm4,%xmm8
+ xorl %ebx,%esi
pslldq $12,%xmm10
paddd %xmm4,%xmm4
movl %edx,%edi
- roll $5,%edx
- andl %eax,%esi
- xorl %ebx,%eax
+ addl 8(%rsp),%ecx
psrld $31,%xmm8
- xorl %ebx,%esi
- addl %edx,%ecx
- movdqa %xmm10,%xmm9
- rorl $7,%ebp
+ xorl %eax,%ebp
+ roll $5,%edx
addl %esi,%ecx
+ movdqa %xmm10,%xmm9
+ andl %ebp,%edi
+ xorl %eax,%ebp
psrld $30,%xmm10
+ addl %edx,%ecx
+ rorl $7,%edx
por %xmm8,%xmm4
- addl 12(%rsp),%ebx
- xorl %eax,%ebp
+ xorl %eax,%edi
movl %ecx,%esi
- roll $5,%ecx
+ addl 12(%rsp),%ebx
pslld $2,%xmm9
pxor %xmm10,%xmm4
- andl %ebp,%edi
- xorl %eax,%ebp
- movdqa 0(%r11),%xmm10
- xorl %eax,%edi
- addl %ecx,%ebx
- pxor %xmm9,%xmm4
- rorl $7,%edx
+ xorl %ebp,%edx
+ movdqa -64(%r11),%xmm10
+ roll $5,%ecx
addl %edi,%ebx
- movdqa %xmm2,%xmm5
- addl 16(%rsp),%eax
+ andl %edx,%esi
+ pxor %xmm9,%xmm4
xorl %ebp,%edx
+ addl %ecx,%ebx
+ rorl $7,%ecx
+ pshufd $238,%xmm1,%xmm5
+ xorl %ebp,%esi
movdqa %xmm4,%xmm9
-.byte 102,15,58,15,233,8
+ paddd %xmm4,%xmm10
movl %ebx,%edi
+ addl 16(%rsp),%eax
+ punpcklqdq %xmm2,%xmm5
+ xorl %edx,%ecx
roll $5,%ebx
- paddd %xmm4,%xmm10
- andl %edx,%esi
- xorl %ebp,%edx
+ addl %esi,%eax
psrldq $4,%xmm9
- xorl %ebp,%esi
- addl %ebx,%eax
+ andl %ecx,%edi
+ xorl %edx,%ecx
pxor %xmm1,%xmm5
- rorl $7,%ecx
- addl %esi,%eax
+ addl %ebx,%eax
+ rorl $7,%ebx
pxor %xmm3,%xmm9
- addl 20(%rsp),%ebp
- xorl %edx,%ecx
+ xorl %edx,%edi
movl %eax,%esi
- roll $5,%eax
+ addl 20(%rsp),%ebp
pxor %xmm9,%xmm5
- andl %ecx,%edi
- xorl %edx,%ecx
+ xorl %ecx,%ebx
+ roll $5,%eax
movdqa %xmm10,0(%rsp)
- xorl %edx,%edi
- addl %eax,%ebp
- movdqa %xmm5,%xmm8
- movdqa %xmm5,%xmm9
- rorl $7,%ebx
addl %edi,%ebp
- addl 24(%rsp),%edx
+ andl %ebx,%esi
+ movdqa %xmm5,%xmm8
xorl %ecx,%ebx
+ addl %eax,%ebp
+ rorl $7,%eax
+ movdqa %xmm5,%xmm9
+ xorl %ecx,%esi
pslldq $12,%xmm8
paddd %xmm5,%xmm5
movl %ebp,%edi
- roll $5,%ebp
- andl %ebx,%esi
- xorl %ecx,%ebx
+ addl 24(%rsp),%edx
psrld $31,%xmm9
- xorl %ecx,%esi
- addl %ebp,%edx
- movdqa %xmm8,%xmm10
- rorl $7,%eax
+ xorl %ebx,%eax
+ roll $5,%ebp
addl %esi,%edx
+ movdqa %xmm8,%xmm10
+ andl %eax,%edi
+ xorl %ebx,%eax
psrld $30,%xmm8
+ addl %ebp,%edx
+ rorl $7,%ebp
por %xmm9,%xmm5
- addl 28(%rsp),%ecx
- xorl %ebx,%eax
+ xorl %ebx,%edi
movl %edx,%esi
- roll $5,%edx
+ addl 28(%rsp),%ecx
pslld $2,%xmm10
pxor %xmm8,%xmm5
- andl %eax,%edi
- xorl %ebx,%eax
- movdqa 16(%r11),%xmm8
- xorl %ebx,%edi
- addl %edx,%ecx
- pxor %xmm10,%xmm5
- rorl $7,%ebp
+ xorl %eax,%ebp
+ movdqa -32(%r11),%xmm8
+ roll $5,%edx
addl %edi,%ecx
- movdqa %xmm3,%xmm6
- addl 32(%rsp),%ebx
+ andl %ebp,%esi
+ pxor %xmm10,%xmm5
xorl %eax,%ebp
+ addl %edx,%ecx
+ rorl $7,%edx
+ pshufd $238,%xmm2,%xmm6
+ xorl %eax,%esi
movdqa %xmm5,%xmm10
-.byte 102,15,58,15,242,8
+ paddd %xmm5,%xmm8
movl %ecx,%edi
+ addl 32(%rsp),%ebx
+ punpcklqdq %xmm3,%xmm6
+ xorl %ebp,%edx
roll $5,%ecx
- paddd %xmm5,%xmm8
- andl %ebp,%esi
- xorl %eax,%ebp
+ addl %esi,%ebx
psrldq $4,%xmm10
- xorl %eax,%esi
- addl %ecx,%ebx
+ andl %edx,%edi
+ xorl %ebp,%edx
pxor %xmm2,%xmm6
- rorl $7,%edx
- addl %esi,%ebx
+ addl %ecx,%ebx
+ rorl $7,%ecx
pxor %xmm4,%xmm10
- addl 36(%rsp),%eax
- xorl %ebp,%edx
+ xorl %ebp,%edi
movl %ebx,%esi
- roll $5,%ebx
+ addl 36(%rsp),%eax
pxor %xmm10,%xmm6
- andl %edx,%edi
- xorl %ebp,%edx
+ xorl %edx,%ecx
+ roll $5,%ebx
movdqa %xmm8,16(%rsp)
- xorl %ebp,%edi
- addl %ebx,%eax
- movdqa %xmm6,%xmm9
- movdqa %xmm6,%xmm10
- rorl $7,%ecx
addl %edi,%eax
- addl 40(%rsp),%ebp
+ andl %ecx,%esi
+ movdqa %xmm6,%xmm9
xorl %edx,%ecx
+ addl %ebx,%eax
+ rorl $7,%ebx
+ movdqa %xmm6,%xmm10
+ xorl %edx,%esi
pslldq $12,%xmm9
paddd %xmm6,%xmm6
movl %eax,%edi
- roll $5,%eax
- andl %ecx,%esi
- xorl %edx,%ecx
+ addl 40(%rsp),%ebp
psrld $31,%xmm10
- xorl %edx,%esi
- addl %eax,%ebp
- movdqa %xmm9,%xmm8
- rorl $7,%ebx
+ xorl %ecx,%ebx
+ roll $5,%eax
addl %esi,%ebp
+ movdqa %xmm9,%xmm8
+ andl %ebx,%edi
+ xorl %ecx,%ebx
psrld $30,%xmm9
+ addl %eax,%ebp
+ rorl $7,%eax
por %xmm10,%xmm6
- addl 44(%rsp),%edx
- xorl %ecx,%ebx
+ xorl %ecx,%edi
movl %ebp,%esi
- roll $5,%ebp
+ addl 44(%rsp),%edx
pslld $2,%xmm8
pxor %xmm9,%xmm6
- andl %ebx,%edi
- xorl %ecx,%ebx
- movdqa 16(%r11),%xmm9
- xorl %ecx,%edi
- addl %ebp,%edx
- pxor %xmm8,%xmm6
- rorl $7,%eax
+ xorl %ebx,%eax
+ movdqa -32(%r11),%xmm9
+ roll $5,%ebp
addl %edi,%edx
- movdqa %xmm4,%xmm7
- addl 48(%rsp),%ecx
+ andl %eax,%esi
+ pxor %xmm8,%xmm6
xorl %ebx,%eax
+ addl %ebp,%edx
+ rorl $7,%ebp
+ pshufd $238,%xmm3,%xmm7
+ xorl %ebx,%esi
movdqa %xmm6,%xmm8
-.byte 102,15,58,15,251,8
+ paddd %xmm6,%xmm9
movl %edx,%edi
+ addl 48(%rsp),%ecx
+ punpcklqdq %xmm4,%xmm7
+ xorl %eax,%ebp
roll $5,%edx
- paddd %xmm6,%xmm9
- andl %eax,%esi
- xorl %ebx,%eax
+ addl %esi,%ecx
psrldq $4,%xmm8
- xorl %ebx,%esi
- addl %edx,%ecx
+ andl %ebp,%edi
+ xorl %eax,%ebp
pxor %xmm3,%xmm7
- rorl $7,%ebp
- addl %esi,%ecx
+ addl %edx,%ecx
+ rorl $7,%edx
pxor %xmm5,%xmm8
- addl 52(%rsp),%ebx
- xorl %eax,%ebp
+ xorl %eax,%edi
movl %ecx,%esi
- roll $5,%ecx
+ addl 52(%rsp),%ebx
pxor %xmm8,%xmm7
- andl %ebp,%edi
- xorl %eax,%ebp
+ xorl %ebp,%edx
+ roll $5,%ecx
movdqa %xmm9,32(%rsp)
- xorl %eax,%edi
- addl %ecx,%ebx
- movdqa %xmm7,%xmm10
- movdqa %xmm7,%xmm8
- rorl $7,%edx
addl %edi,%ebx
- addl 56(%rsp),%eax
+ andl %edx,%esi
+ movdqa %xmm7,%xmm10
xorl %ebp,%edx
+ addl %ecx,%ebx
+ rorl $7,%ecx
+ movdqa %xmm7,%xmm8
+ xorl %ebp,%esi
pslldq $12,%xmm10
paddd %xmm7,%xmm7
movl %ebx,%edi
- roll $5,%ebx
- andl %edx,%esi
- xorl %ebp,%edx
+ addl 56(%rsp),%eax
psrld $31,%xmm8
- xorl %ebp,%esi
- addl %ebx,%eax
- movdqa %xmm10,%xmm9
- rorl $7,%ecx
+ xorl %edx,%ecx
+ roll $5,%ebx
addl %esi,%eax
+ movdqa %xmm10,%xmm9
+ andl %ecx,%edi
+ xorl %edx,%ecx
psrld $30,%xmm10
+ addl %ebx,%eax
+ rorl $7,%ebx
por %xmm8,%xmm7
- addl 60(%rsp),%ebp
- xorl %edx,%ecx
+ xorl %edx,%edi
movl %eax,%esi
- roll $5,%eax
+ addl 60(%rsp),%ebp
pslld $2,%xmm9
pxor %xmm10,%xmm7
- andl %ecx,%edi
- xorl %edx,%ecx
- movdqa 16(%r11),%xmm10
- xorl %edx,%edi
- addl %eax,%ebp
- pxor %xmm9,%xmm7
- rorl $7,%ebx
+ xorl %ecx,%ebx
+ movdqa -32(%r11),%xmm10
+ roll $5,%eax
addl %edi,%ebp
- movdqa %xmm7,%xmm9
- addl 0(%rsp),%edx
- pxor %xmm4,%xmm0
-.byte 102,68,15,58,15,206,8
+ andl %ebx,%esi
+ pxor %xmm9,%xmm7
+ pshufd $238,%xmm6,%xmm9
xorl %ecx,%ebx
+ addl %eax,%ebp
+ rorl $7,%eax
+ pxor %xmm4,%xmm0
+ xorl %ecx,%esi
movl %ebp,%edi
+ addl 0(%rsp),%edx
+ punpcklqdq %xmm7,%xmm9
+ xorl %ebx,%eax
roll $5,%ebp
pxor %xmm1,%xmm0
- andl %ebx,%esi
- xorl %ecx,%ebx
+ addl %esi,%edx
+ andl %eax,%edi
movdqa %xmm10,%xmm8
+ xorl %ebx,%eax
paddd %xmm7,%xmm10
- xorl %ecx,%esi
addl %ebp,%edx
pxor %xmm9,%xmm0
- rorl $7,%eax
- addl %esi,%edx
+ rorl $7,%ebp
+ xorl %ebx,%edi
+ movl %edx,%esi
addl 4(%rsp),%ecx
- xorl %ebx,%eax
movdqa %xmm0,%xmm9
- movdqa %xmm10,48(%rsp)
- movl %edx,%esi
+ xorl %eax,%ebp
roll $5,%edx
- andl %eax,%edi
- xorl %ebx,%eax
+ movdqa %xmm10,48(%rsp)
+ addl %edi,%ecx
+ andl %ebp,%esi
+ xorl %eax,%ebp
pslld $2,%xmm0
- xorl %ebx,%edi
addl %edx,%ecx
+ rorl $7,%edx
psrld $30,%xmm9
- rorl $7,%ebp
- addl %edi,%ecx
- addl 8(%rsp),%ebx
- xorl %eax,%ebp
+ xorl %eax,%esi
movl %ecx,%edi
- roll $5,%ecx
+ addl 8(%rsp),%ebx
por %xmm9,%xmm0
- andl %ebp,%esi
- xorl %eax,%ebp
- movdqa %xmm0,%xmm10
- xorl %eax,%esi
- addl %ecx,%ebx
- rorl $7,%edx
- addl %esi,%ebx
- addl 12(%rsp),%eax
xorl %ebp,%edx
- movl %ebx,%esi
- roll $5,%ebx
+ roll $5,%ecx
+ pshufd $238,%xmm7,%xmm10
+ addl %esi,%ebx
andl %edx,%edi
xorl %ebp,%edx
+ addl %ecx,%ebx
+ addl 12(%rsp),%eax
xorl %ebp,%edi
- addl %ebx,%eax
- rorl $7,%ecx
+ movl %ebx,%esi
+ roll $5,%ebx
addl %edi,%eax
- addl 16(%rsp),%ebp
- pxor %xmm5,%xmm1
-.byte 102,68,15,58,15,215,8
xorl %edx,%esi
+ rorl $7,%ecx
+ addl %ebx,%eax
+ pxor %xmm5,%xmm1
+ addl 16(%rsp),%ebp
+ xorl %ecx,%esi
+ punpcklqdq %xmm0,%xmm10
movl %eax,%edi
roll $5,%eax
pxor %xmm2,%xmm1
- xorl %ecx,%esi
- addl %eax,%ebp
+ addl %esi,%ebp
+ xorl %ecx,%edi
movdqa %xmm8,%xmm9
- paddd %xmm0,%xmm8
rorl $7,%ebx
- addl %esi,%ebp
+ paddd %xmm0,%xmm8
+ addl %eax,%ebp
pxor %xmm10,%xmm1
addl 20(%rsp),%edx
- xorl %ecx,%edi
+ xorl %ebx,%edi
movl %ebp,%esi
roll $5,%ebp
movdqa %xmm1,%xmm10
+ addl %edi,%edx
+ xorl %ebx,%esi
movdqa %xmm8,0(%rsp)
- xorl %ebx,%edi
- addl %ebp,%edx
rorl $7,%eax
- addl %edi,%edx
- pslld $2,%xmm1
+ addl %ebp,%edx
addl 24(%rsp),%ecx
- xorl %ebx,%esi
- psrld $30,%xmm10
+ pslld $2,%xmm1
+ xorl %eax,%esi
movl %edx,%edi
+ psrld $30,%xmm10
roll $5,%edx
- xorl %eax,%esi
- addl %edx,%ecx
- rorl $7,%ebp
addl %esi,%ecx
+ xorl %eax,%edi
+ rorl $7,%ebp
por %xmm10,%xmm1
+ addl %edx,%ecx
addl 28(%rsp),%ebx
- xorl %eax,%edi
- movdqa %xmm1,%xmm8
+ pshufd $238,%xmm0,%xmm8
+ xorl %ebp,%edi
movl %ecx,%esi
roll $5,%ecx
- xorl %ebp,%edi
- addl %ecx,%ebx
- rorl $7,%edx
addl %edi,%ebx
- addl 32(%rsp),%eax
- pxor %xmm6,%xmm2
-.byte 102,68,15,58,15,192,8
xorl %ebp,%esi
+ rorl $7,%edx
+ addl %ecx,%ebx
+ pxor %xmm6,%xmm2
+ addl 32(%rsp),%eax
+ xorl %edx,%esi
+ punpcklqdq %xmm1,%xmm8
movl %ebx,%edi
roll $5,%ebx
pxor %xmm3,%xmm2
- xorl %edx,%esi
- addl %ebx,%eax
- movdqa 32(%r11),%xmm10
- paddd %xmm1,%xmm9
- rorl $7,%ecx
addl %esi,%eax
+ xorl %edx,%edi
+ movdqa 0(%r11),%xmm10
+ rorl $7,%ecx
+ paddd %xmm1,%xmm9
+ addl %ebx,%eax
pxor %xmm8,%xmm2
addl 36(%rsp),%ebp
- xorl %edx,%edi
+ xorl %ecx,%edi
movl %eax,%esi
roll $5,%eax
movdqa %xmm2,%xmm8
+ addl %edi,%ebp
+ xorl %ecx,%esi
movdqa %xmm9,16(%rsp)
- xorl %ecx,%edi
- addl %eax,%ebp
rorl $7,%ebx
- addl %edi,%ebp
- pslld $2,%xmm2
+ addl %eax,%ebp
addl 40(%rsp),%edx
- xorl %ecx,%esi
- psrld $30,%xmm8
+ pslld $2,%xmm2
+ xorl %ebx,%esi
movl %ebp,%edi
+ psrld $30,%xmm8
roll $5,%ebp
- xorl %ebx,%esi
- addl %ebp,%edx
- rorl $7,%eax
addl %esi,%edx
+ xorl %ebx,%edi
+ rorl $7,%eax
por %xmm8,%xmm2
+ addl %ebp,%edx
addl 44(%rsp),%ecx
- xorl %ebx,%edi
- movdqa %xmm2,%xmm9
+ pshufd $238,%xmm1,%xmm9
+ xorl %eax,%edi
movl %edx,%esi
roll $5,%edx
- xorl %eax,%edi
- addl %edx,%ecx
- rorl $7,%ebp
addl %edi,%ecx
- addl 48(%rsp),%ebx
- pxor %xmm7,%xmm3
-.byte 102,68,15,58,15,201,8
xorl %eax,%esi
+ rorl $7,%ebp
+ addl %edx,%ecx
+ pxor %xmm7,%xmm3
+ addl 48(%rsp),%ebx
+ xorl %ebp,%esi
+ punpcklqdq %xmm2,%xmm9
movl %ecx,%edi
roll $5,%ecx
pxor %xmm4,%xmm3
- xorl %ebp,%esi
- addl %ecx,%ebx
+ addl %esi,%ebx
+ xorl %ebp,%edi
movdqa %xmm10,%xmm8
- paddd %xmm2,%xmm10
rorl $7,%edx
- addl %esi,%ebx
+ paddd %xmm2,%xmm10
+ addl %ecx,%ebx
pxor %xmm9,%xmm3
addl 52(%rsp),%eax
- xorl %ebp,%edi
+ xorl %edx,%edi
movl %ebx,%esi
roll $5,%ebx
movdqa %xmm3,%xmm9
+ addl %edi,%eax
+ xorl %edx,%esi
movdqa %xmm10,32(%rsp)
- xorl %edx,%edi
- addl %ebx,%eax
rorl $7,%ecx
- addl %edi,%eax
- pslld $2,%xmm3
+ addl %ebx,%eax
addl 56(%rsp),%ebp
- xorl %edx,%esi
- psrld $30,%xmm9
+ pslld $2,%xmm3
+ xorl %ecx,%esi
movl %eax,%edi
+ psrld $30,%xmm9
roll $5,%eax
- xorl %ecx,%esi
- addl %eax,%ebp
- rorl $7,%ebx
addl %esi,%ebp
+ xorl %ecx,%edi
+ rorl $7,%ebx
por %xmm9,%xmm3
+ addl %eax,%ebp
addl 60(%rsp),%edx
- xorl %ecx,%edi
- movdqa %xmm3,%xmm10
+ pshufd $238,%xmm2,%xmm10
+ xorl %ebx,%edi
movl %ebp,%esi
roll $5,%ebp
- xorl %ebx,%edi
- addl %ebp,%edx
- rorl $7,%eax
addl %edi,%edx
- addl 0(%rsp),%ecx
- pxor %xmm0,%xmm4
-.byte 102,68,15,58,15,210,8
xorl %ebx,%esi
+ rorl $7,%eax
+ addl %ebp,%edx
+ pxor %xmm0,%xmm4
+ addl 0(%rsp),%ecx
+ xorl %eax,%esi
+ punpcklqdq %xmm3,%xmm10
movl %edx,%edi
roll $5,%edx
pxor %xmm5,%xmm4
- xorl %eax,%esi
- addl %edx,%ecx
+ addl %esi,%ecx
+ xorl %eax,%edi
movdqa %xmm8,%xmm9
- paddd %xmm3,%xmm8
rorl $7,%ebp
- addl %esi,%ecx
+ paddd %xmm3,%xmm8
+ addl %edx,%ecx
pxor %xmm10,%xmm4
addl 4(%rsp),%ebx
- xorl %eax,%edi
+ xorl %ebp,%edi
movl %ecx,%esi
roll $5,%ecx
movdqa %xmm4,%xmm10
+ addl %edi,%ebx
+ xorl %ebp,%esi
movdqa %xmm8,48(%rsp)
- xorl %ebp,%edi
- addl %ecx,%ebx
rorl $7,%edx
- addl %edi,%ebx
- pslld $2,%xmm4
+ addl %ecx,%ebx
addl 8(%rsp),%eax
- xorl %ebp,%esi
- psrld $30,%xmm10
+ pslld $2,%xmm4
+ xorl %edx,%esi
movl %ebx,%edi
+ psrld $30,%xmm10
roll $5,%ebx
- xorl %edx,%esi
- addl %ebx,%eax
- rorl $7,%ecx
addl %esi,%eax
+ xorl %edx,%edi
+ rorl $7,%ecx
por %xmm10,%xmm4
+ addl %ebx,%eax
addl 12(%rsp),%ebp
- xorl %edx,%edi
- movdqa %xmm4,%xmm8
+ pshufd $238,%xmm3,%xmm8
+ xorl %ecx,%edi
movl %eax,%esi
roll $5,%eax
- xorl %ecx,%edi
- addl %eax,%ebp
- rorl $7,%ebx
addl %edi,%ebp
- addl 16(%rsp),%edx
- pxor %xmm1,%xmm5
-.byte 102,68,15,58,15,195,8
xorl %ecx,%esi
+ rorl $7,%ebx
+ addl %eax,%ebp
+ pxor %xmm1,%xmm5
+ addl 16(%rsp),%edx
+ xorl %ebx,%esi
+ punpcklqdq %xmm4,%xmm8
movl %ebp,%edi
roll $5,%ebp
pxor %xmm6,%xmm5
- xorl %ebx,%esi
- addl %ebp,%edx
+ addl %esi,%edx
+ xorl %ebx,%edi
movdqa %xmm9,%xmm10
- paddd %xmm4,%xmm9
rorl $7,%eax
- addl %esi,%edx
+ paddd %xmm4,%xmm9
+ addl %ebp,%edx
pxor %xmm8,%xmm5
addl 20(%rsp),%ecx
- xorl %ebx,%edi
+ xorl %eax,%edi
movl %edx,%esi
roll $5,%edx
movdqa %xmm5,%xmm8
+ addl %edi,%ecx
+ xorl %eax,%esi
movdqa %xmm9,0(%rsp)
- xorl %eax,%edi
- addl %edx,%ecx
rorl $7,%ebp
- addl %edi,%ecx
- pslld $2,%xmm5
+ addl %edx,%ecx
addl 24(%rsp),%ebx
- xorl %eax,%esi
- psrld $30,%xmm8
+ pslld $2,%xmm5
+ xorl %ebp,%esi
movl %ecx,%edi
+ psrld $30,%xmm8
roll $5,%ecx
- xorl %ebp,%esi
- addl %ecx,%ebx
- rorl $7,%edx
addl %esi,%ebx
+ xorl %ebp,%edi
+ rorl $7,%edx
por %xmm8,%xmm5
+ addl %ecx,%ebx
addl 28(%rsp),%eax
- xorl %ebp,%edi
- movdqa %xmm5,%xmm9
+ pshufd $238,%xmm4,%xmm9
+ rorl $7,%ecx
movl %ebx,%esi
- roll $5,%ebx
xorl %edx,%edi
- addl %ebx,%eax
- rorl $7,%ecx
+ roll $5,%ebx
addl %edi,%eax
- movl %ecx,%edi
- pxor %xmm2,%xmm6
-.byte 102,68,15,58,15,204,8
+ xorl %ecx,%esi
xorl %edx,%ecx
+ addl %ebx,%eax
+ pxor %xmm2,%xmm6
addl 32(%rsp),%ebp
- andl %edx,%edi
- pxor %xmm7,%xmm6
andl %ecx,%esi
+ xorl %edx,%ecx
rorl $7,%ebx
- movdqa %xmm10,%xmm8
- paddd %xmm5,%xmm10
- addl %edi,%ebp
+ punpcklqdq %xmm5,%xmm9
movl %eax,%edi
- pxor %xmm9,%xmm6
+ xorl %ecx,%esi
+ pxor %xmm7,%xmm6
roll $5,%eax
addl %esi,%ebp
- xorl %edx,%ecx
- addl %eax,%ebp
- movdqa %xmm6,%xmm9
- movdqa %xmm10,16(%rsp)
- movl %ebx,%esi
+ movdqa %xmm10,%xmm8
+ xorl %ebx,%edi
+ paddd %xmm5,%xmm10
xorl %ecx,%ebx
+ pxor %xmm9,%xmm6
+ addl %eax,%ebp
addl 36(%rsp),%edx
- andl %ecx,%esi
- pslld $2,%xmm6
andl %ebx,%edi
+ xorl %ecx,%ebx
rorl $7,%eax
- psrld $30,%xmm9
- addl %esi,%edx
+ movdqa %xmm6,%xmm9
movl %ebp,%esi
+ xorl %ebx,%edi
+ movdqa %xmm10,16(%rsp)
roll $5,%ebp
addl %edi,%edx
- xorl %ecx,%ebx
- addl %ebp,%edx
- por %xmm9,%xmm6
- movl %eax,%edi
+ xorl %eax,%esi
+ pslld $2,%xmm6
xorl %ebx,%eax
- movdqa %xmm6,%xmm10
+ addl %ebp,%edx
+ psrld $30,%xmm9
addl 40(%rsp),%ecx
- andl %ebx,%edi
andl %eax,%esi
+ xorl %ebx,%eax
+ por %xmm9,%xmm6
rorl $7,%ebp
- addl %edi,%ecx
movl %edx,%edi
+ xorl %eax,%esi
roll $5,%edx
+ pshufd $238,%xmm5,%xmm10
addl %esi,%ecx
- xorl %ebx,%eax
- addl %edx,%ecx
- movl %ebp,%esi
+ xorl %ebp,%edi
xorl %eax,%ebp
+ addl %edx,%ecx
addl 44(%rsp),%ebx
- andl %eax,%esi
andl %ebp,%edi
+ xorl %eax,%ebp
rorl $7,%edx
- addl %esi,%ebx
movl %ecx,%esi
+ xorl %ebp,%edi
roll $5,%ecx
addl %edi,%ebx
- xorl %eax,%ebp
+ xorl %edx,%esi
+ xorl %ebp,%edx
addl %ecx,%ebx
- movl %edx,%edi
pxor %xmm3,%xmm7
-.byte 102,68,15,58,15,213,8
- xorl %ebp,%edx
addl 48(%rsp),%eax
- andl %ebp,%edi
- pxor %xmm0,%xmm7
andl %edx,%esi
+ xorl %ebp,%edx
rorl $7,%ecx
- movdqa 48(%r11),%xmm9
- paddd %xmm6,%xmm8
- addl %edi,%eax
+ punpcklqdq %xmm6,%xmm10
movl %ebx,%edi
- pxor %xmm10,%xmm7
+ xorl %edx,%esi
+ pxor %xmm0,%xmm7
roll $5,%ebx
addl %esi,%eax
- xorl %ebp,%edx
- addl %ebx,%eax
- movdqa %xmm7,%xmm10
- movdqa %xmm8,32(%rsp)
- movl %ecx,%esi
+ movdqa 32(%r11),%xmm9
+ xorl %ecx,%edi
+ paddd %xmm6,%xmm8
xorl %edx,%ecx
+ pxor %xmm10,%xmm7
+ addl %ebx,%eax
addl 52(%rsp),%ebp
- andl %edx,%esi
- pslld $2,%xmm7
andl %ecx,%edi
+ xorl %edx,%ecx
rorl $7,%ebx
- psrld $30,%xmm10
- addl %esi,%ebp
+ movdqa %xmm7,%xmm10
movl %eax,%esi
+ xorl %ecx,%edi
+ movdqa %xmm8,32(%rsp)
roll $5,%eax
addl %edi,%ebp
- xorl %edx,%ecx
- addl %eax,%ebp
- por %xmm10,%xmm7
- movl %ebx,%edi
+ xorl %ebx,%esi
+ pslld $2,%xmm7
xorl %ecx,%ebx
- movdqa %xmm7,%xmm8
+ addl %eax,%ebp
+ psrld $30,%xmm10
addl 56(%rsp),%edx
- andl %ecx,%edi
andl %ebx,%esi
+ xorl %ecx,%ebx
+ por %xmm10,%xmm7
rorl $7,%eax
- addl %edi,%edx
movl %ebp,%edi
+ xorl %ebx,%esi
roll $5,%ebp
+ pshufd $238,%xmm6,%xmm8
addl %esi,%edx
- xorl %ecx,%ebx
- addl %ebp,%edx
- movl %eax,%esi
+ xorl %eax,%edi
xorl %ebx,%eax
+ addl %ebp,%edx
addl 60(%rsp),%ecx
- andl %ebx,%esi
andl %eax,%edi
+ xorl %ebx,%eax
rorl $7,%ebp
- addl %esi,%ecx
movl %edx,%esi
+ xorl %eax,%edi
roll $5,%edx
addl %edi,%ecx
- xorl %ebx,%eax
+ xorl %ebp,%esi
+ xorl %eax,%ebp
addl %edx,%ecx
- movl %ebp,%edi
pxor %xmm4,%xmm0
-.byte 102,68,15,58,15,198,8
- xorl %eax,%ebp
addl 0(%rsp),%ebx
- andl %eax,%edi
- pxor %xmm1,%xmm0
andl %ebp,%esi
+ xorl %eax,%ebp
rorl $7,%edx
- movdqa %xmm9,%xmm10
- paddd %xmm7,%xmm9
- addl %edi,%ebx
+ punpcklqdq %xmm7,%xmm8
movl %ecx,%edi
- pxor %xmm8,%xmm0
+ xorl %ebp,%esi
+ pxor %xmm1,%xmm0
roll $5,%ecx
addl %esi,%ebx
- xorl %eax,%ebp
- addl %ecx,%ebx
- movdqa %xmm0,%xmm8
- movdqa %xmm9,48(%rsp)
- movl %edx,%esi
+ movdqa %xmm9,%xmm10
+ xorl %edx,%edi
+ paddd %xmm7,%xmm9
xorl %ebp,%edx
+ pxor %xmm8,%xmm0
+ addl %ecx,%ebx
addl 4(%rsp),%eax
- andl %ebp,%esi
- pslld $2,%xmm0
andl %edx,%edi
+ xorl %ebp,%edx
rorl $7,%ecx
- psrld $30,%xmm8
- addl %esi,%eax
+ movdqa %xmm0,%xmm8
movl %ebx,%esi
+ xorl %edx,%edi
+ movdqa %xmm9,48(%rsp)
roll $5,%ebx
addl %edi,%eax
- xorl %ebp,%edx
- addl %ebx,%eax
- por %xmm8,%xmm0
- movl %ecx,%edi
+ xorl %ecx,%esi
+ pslld $2,%xmm0
xorl %edx,%ecx
- movdqa %xmm0,%xmm9
+ addl %ebx,%eax
+ psrld $30,%xmm8
addl 8(%rsp),%ebp
- andl %edx,%edi
andl %ecx,%esi
+ xorl %edx,%ecx
+ por %xmm8,%xmm0
rorl $7,%ebx
- addl %edi,%ebp
movl %eax,%edi
+ xorl %ecx,%esi
roll $5,%eax
+ pshufd $238,%xmm7,%xmm9
addl %esi,%ebp
- xorl %edx,%ecx
- addl %eax,%ebp
- movl %ebx,%esi
+ xorl %ebx,%edi
xorl %ecx,%ebx
+ addl %eax,%ebp
addl 12(%rsp),%edx
- andl %ecx,%esi
andl %ebx,%edi
+ xorl %ecx,%ebx
rorl $7,%eax
- addl %esi,%edx
movl %ebp,%esi
+ xorl %ebx,%edi
roll $5,%ebp
addl %edi,%edx
- xorl %ecx,%ebx
+ xorl %eax,%esi
+ xorl %ebx,%eax
addl %ebp,%edx
- movl %eax,%edi
pxor %xmm5,%xmm1
-.byte 102,68,15,58,15,207,8
- xorl %ebx,%eax
addl 16(%rsp),%ecx
- andl %ebx,%edi
- pxor %xmm2,%xmm1
andl %eax,%esi
+ xorl %ebx,%eax
rorl $7,%ebp
- movdqa %xmm10,%xmm8
- paddd %xmm0,%xmm10
- addl %edi,%ecx
+ punpcklqdq %xmm0,%xmm9
movl %edx,%edi
- pxor %xmm9,%xmm1
+ xorl %eax,%esi
+ pxor %xmm2,%xmm1
roll $5,%edx
addl %esi,%ecx
- xorl %ebx,%eax
- addl %edx,%ecx
- movdqa %xmm1,%xmm9
- movdqa %xmm10,0(%rsp)
- movl %ebp,%esi
+ movdqa %xmm10,%xmm8
+ xorl %ebp,%edi
+ paddd %xmm0,%xmm10
xorl %eax,%ebp
+ pxor %xmm9,%xmm1
+ addl %edx,%ecx
addl 20(%rsp),%ebx
- andl %eax,%esi
- pslld $2,%xmm1
andl %ebp,%edi
+ xorl %eax,%ebp
rorl $7,%edx
- psrld $30,%xmm9
- addl %esi,%ebx
+ movdqa %xmm1,%xmm9
movl %ecx,%esi
+ xorl %ebp,%edi
+ movdqa %xmm10,0(%rsp)
roll $5,%ecx
addl %edi,%ebx
- xorl %eax,%ebp
- addl %ecx,%ebx
- por %xmm9,%xmm1
- movl %edx,%edi
+ xorl %edx,%esi
+ pslld $2,%xmm1
xorl %ebp,%edx
- movdqa %xmm1,%xmm10
+ addl %ecx,%ebx
+ psrld $30,%xmm9
addl 24(%rsp),%eax
- andl %ebp,%edi
andl %edx,%esi
+ xorl %ebp,%edx
+ por %xmm9,%xmm1
rorl $7,%ecx
- addl %edi,%eax
movl %ebx,%edi
+ xorl %edx,%esi
roll $5,%ebx
+ pshufd $238,%xmm0,%xmm10
addl %esi,%eax
- xorl %ebp,%edx
- addl %ebx,%eax
- movl %ecx,%esi
+ xorl %ecx,%edi
xorl %edx,%ecx
+ addl %ebx,%eax
addl 28(%rsp),%ebp
- andl %edx,%esi
andl %ecx,%edi
+ xorl %edx,%ecx
rorl $7,%ebx
- addl %esi,%ebp
movl %eax,%esi
+ xorl %ecx,%edi
roll $5,%eax
addl %edi,%ebp
- xorl %edx,%ecx
+ xorl %ebx,%esi
+ xorl %ecx,%ebx
addl %eax,%ebp
- movl %ebx,%edi
pxor %xmm6,%xmm2
-.byte 102,68,15,58,15,208,8
- xorl %ecx,%ebx
addl 32(%rsp),%edx
- andl %ecx,%edi
- pxor %xmm3,%xmm2
andl %ebx,%esi
+ xorl %ecx,%ebx
rorl $7,%eax
- movdqa %xmm8,%xmm9
- paddd %xmm1,%xmm8
- addl %edi,%edx
+ punpcklqdq %xmm1,%xmm10
movl %ebp,%edi
- pxor %xmm10,%xmm2
+ xorl %ebx,%esi
+ pxor %xmm3,%xmm2
roll $5,%ebp
addl %esi,%edx
- xorl %ecx,%ebx
- addl %ebp,%edx
- movdqa %xmm2,%xmm10
- movdqa %xmm8,16(%rsp)
- movl %eax,%esi
+ movdqa %xmm8,%xmm9
+ xorl %eax,%edi
+ paddd %xmm1,%xmm8
xorl %ebx,%eax
+ pxor %xmm10,%xmm2
+ addl %ebp,%edx
addl 36(%rsp),%ecx
- andl %ebx,%esi
- pslld $2,%xmm2
andl %eax,%edi
+ xorl %ebx,%eax
rorl $7,%ebp
- psrld $30,%xmm10
- addl %esi,%ecx
+ movdqa %xmm2,%xmm10
movl %edx,%esi
+ xorl %eax,%edi
+ movdqa %xmm8,16(%rsp)
roll $5,%edx
addl %edi,%ecx
- xorl %ebx,%eax
- addl %edx,%ecx
- por %xmm10,%xmm2
- movl %ebp,%edi
+ xorl %ebp,%esi
+ pslld $2,%xmm2
xorl %eax,%ebp
- movdqa %xmm2,%xmm8
+ addl %edx,%ecx
+ psrld $30,%xmm10
addl 40(%rsp),%ebx
- andl %eax,%edi
andl %ebp,%esi
+ xorl %eax,%ebp
+ por %xmm10,%xmm2
rorl $7,%edx
- addl %edi,%ebx
movl %ecx,%edi
+ xorl %ebp,%esi
roll $5,%ecx
+ pshufd $238,%xmm1,%xmm8
addl %esi,%ebx
- xorl %eax,%ebp
- addl %ecx,%ebx
- movl %edx,%esi
+ xorl %edx,%edi
xorl %ebp,%edx
+ addl %ecx,%ebx
addl 44(%rsp),%eax
- andl %ebp,%esi
andl %edx,%edi
+ xorl %ebp,%edx
rorl $7,%ecx
- addl %esi,%eax
movl %ebx,%esi
+ xorl %edx,%edi
roll $5,%ebx
addl %edi,%eax
- xorl %ebp,%edx
+ xorl %edx,%esi
addl %ebx,%eax
- addl 48(%rsp),%ebp
pxor %xmm7,%xmm3
-.byte 102,68,15,58,15,193,8
- xorl %edx,%esi
+ addl 48(%rsp),%ebp
+ xorl %ecx,%esi
+ punpcklqdq %xmm2,%xmm8
movl %eax,%edi
roll $5,%eax
pxor %xmm4,%xmm3
- xorl %ecx,%esi
- addl %eax,%ebp
+ addl %esi,%ebp
+ xorl %ecx,%edi
movdqa %xmm9,%xmm10
- paddd %xmm2,%xmm9
rorl $7,%ebx
- addl %esi,%ebp
+ paddd %xmm2,%xmm9
+ addl %eax,%ebp
pxor %xmm8,%xmm3
addl 52(%rsp),%edx
- xorl %ecx,%edi
+ xorl %ebx,%edi
movl %ebp,%esi
roll $5,%ebp
movdqa %xmm3,%xmm8
+ addl %edi,%edx
+ xorl %ebx,%esi
movdqa %xmm9,32(%rsp)
- xorl %ebx,%edi
- addl %ebp,%edx
rorl $7,%eax
- addl %edi,%edx
- pslld $2,%xmm3
+ addl %ebp,%edx
addl 56(%rsp),%ecx
- xorl %ebx,%esi
- psrld $30,%xmm8
+ pslld $2,%xmm3
+ xorl %eax,%esi
movl %edx,%edi
+ psrld $30,%xmm8
roll $5,%edx
- xorl %eax,%esi
- addl %edx,%ecx
- rorl $7,%ebp
addl %esi,%ecx
+ xorl %eax,%edi
+ rorl $7,%ebp
por %xmm8,%xmm3
+ addl %edx,%ecx
addl 60(%rsp),%ebx
- xorl %eax,%edi
+ xorl %ebp,%edi
movl %ecx,%esi
roll $5,%ecx
- xorl %ebp,%edi
- addl %ecx,%ebx
- rorl $7,%edx
addl %edi,%ebx
- addl 0(%rsp),%eax
- paddd %xmm3,%xmm10
xorl %ebp,%esi
+ rorl $7,%edx
+ addl %ecx,%ebx
+ addl 0(%rsp),%eax
+ xorl %edx,%esi
movl %ebx,%edi
roll $5,%ebx
- xorl %edx,%esi
+ paddd %xmm3,%xmm10
+ addl %esi,%eax
+ xorl %edx,%edi
movdqa %xmm10,48(%rsp)
- addl %ebx,%eax
rorl $7,%ecx
- addl %esi,%eax
+ addl %ebx,%eax
addl 4(%rsp),%ebp
- xorl %edx,%edi
+ xorl %ecx,%edi
movl %eax,%esi
roll $5,%eax
- xorl %ecx,%edi
- addl %eax,%ebp
- rorl $7,%ebx
addl %edi,%ebp
- addl 8(%rsp),%edx
xorl %ecx,%esi
+ rorl $7,%ebx
+ addl %eax,%ebp
+ addl 8(%rsp),%edx
+ xorl %ebx,%esi
movl %ebp,%edi
roll $5,%ebp
- xorl %ebx,%esi
- addl %ebp,%edx
- rorl $7,%eax
addl %esi,%edx
- addl 12(%rsp),%ecx
xorl %ebx,%edi
+ rorl $7,%eax
+ addl %ebp,%edx
+ addl 12(%rsp),%ecx
+ xorl %eax,%edi
movl %edx,%esi
roll $5,%edx
- xorl %eax,%edi
- addl %edx,%ecx
- rorl $7,%ebp
addl %edi,%ecx
+ xorl %eax,%esi
+ rorl $7,%ebp
+ addl %edx,%ecx
cmpq %r10,%r9
je .Ldone_ssse3
movdqa 64(%r11),%xmm6
- movdqa 0(%r11),%xmm9
+ movdqa -64(%r11),%xmm9
movdqu 0(%r9),%xmm0
movdqu 16(%r9),%xmm1
movdqu 32(%r9),%xmm2
@@ -2240,113 +2336,112 @@ _ssse3_shortcut:
.byte 102,15,56,0,198
addq $64,%r9
addl 16(%rsp),%ebx
- xorl %eax,%esi
-.byte 102,15,56,0,206
+ xorl %ebp,%esi
movl %ecx,%edi
+.byte 102,15,56,0,206
roll $5,%ecx
+ addl %esi,%ebx
+ xorl %ebp,%edi
+ rorl $7,%edx
paddd %xmm9,%xmm0
- xorl %ebp,%esi
addl %ecx,%ebx
- rorl $7,%edx
- addl %esi,%ebx
- movdqa %xmm0,0(%rsp)
addl 20(%rsp),%eax
- xorl %ebp,%edi
- psubd %xmm9,%xmm0
+ xorl %edx,%edi
movl %ebx,%esi
+ movdqa %xmm0,0(%rsp)
roll $5,%ebx
- xorl %edx,%edi
- addl %ebx,%eax
- rorl $7,%ecx
addl %edi,%eax
- addl 24(%rsp),%ebp
xorl %edx,%esi
+ rorl $7,%ecx
+ psubd %xmm9,%xmm0
+ addl %ebx,%eax
+ addl 24(%rsp),%ebp
+ xorl %ecx,%esi
movl %eax,%edi
roll $5,%eax
- xorl %ecx,%esi
- addl %eax,%ebp
- rorl $7,%ebx
addl %esi,%ebp
- addl 28(%rsp),%edx
xorl %ecx,%edi
+ rorl $7,%ebx
+ addl %eax,%ebp
+ addl 28(%rsp),%edx
+ xorl %ebx,%edi
movl %ebp,%esi
roll $5,%ebp
- xorl %ebx,%edi
- addl %ebp,%edx
- rorl $7,%eax
addl %edi,%edx
- addl 32(%rsp),%ecx
xorl %ebx,%esi
-.byte 102,15,56,0,214
+ rorl $7,%eax
+ addl %ebp,%edx
+ addl 32(%rsp),%ecx
+ xorl %eax,%esi
movl %edx,%edi
+.byte 102,15,56,0,214
roll $5,%edx
+ addl %esi,%ecx
+ xorl %eax,%edi
+ rorl $7,%ebp
paddd %xmm9,%xmm1
- xorl %eax,%esi
addl %edx,%ecx
- rorl $7,%ebp
- addl %esi,%ecx
- movdqa %xmm1,16(%rsp)
addl 36(%rsp),%ebx
- xorl %eax,%edi
- psubd %xmm9,%xmm1
+ xorl %ebp,%edi
movl %ecx,%esi
+ movdqa %xmm1,16(%rsp)
roll $5,%ecx
- xorl %ebp,%edi
- addl %ecx,%ebx
- rorl $7,%edx
addl %edi,%ebx
- addl 40(%rsp),%eax
xorl %ebp,%esi
+ rorl $7,%edx
+ psubd %xmm9,%xmm1
+ addl %ecx,%ebx
+ addl 40(%rsp),%eax
+ xorl %edx,%esi
movl %ebx,%edi
roll $5,%ebx
- xorl %edx,%esi
- addl %ebx,%eax
- rorl $7,%ecx
addl %esi,%eax
- addl 44(%rsp),%ebp
xorl %edx,%edi
+ rorl $7,%ecx
+ addl %ebx,%eax
+ addl 44(%rsp),%ebp
+ xorl %ecx,%edi
movl %eax,%esi
roll $5,%eax
- xorl %ecx,%edi
- addl %eax,%ebp
- rorl $7,%ebx
addl %edi,%ebp
- addl 48(%rsp),%edx
xorl %ecx,%esi
-.byte 102,15,56,0,222
+ rorl $7,%ebx
+ addl %eax,%ebp
+ addl 48(%rsp),%edx
+ xorl %ebx,%esi
movl %ebp,%edi
+.byte 102,15,56,0,222
roll $5,%ebp
+ addl %esi,%edx
+ xorl %ebx,%edi
+ rorl $7,%eax
paddd %xmm9,%xmm2
- xorl %ebx,%esi
addl %ebp,%edx
- rorl $7,%eax
- addl %esi,%edx
- movdqa %xmm2,32(%rsp)
addl 52(%rsp),%ecx
- xorl %ebx,%edi
- psubd %xmm9,%xmm2
+ xorl %eax,%edi
movl %edx,%esi
+ movdqa %xmm2,32(%rsp)
roll $5,%edx
- xorl %eax,%edi
- addl %edx,%ecx
- rorl $7,%ebp
addl %edi,%ecx
- addl 56(%rsp),%ebx
xorl %eax,%esi
+ rorl $7,%ebp
+ psubd %xmm9,%xmm2
+ addl %edx,%ecx
+ addl 56(%rsp),%ebx
+ xorl %ebp,%esi
movl %ecx,%edi
roll $5,%ecx
- xorl %ebp,%esi
- addl %ecx,%ebx
- rorl $7,%edx
addl %esi,%ebx
- addl 60(%rsp),%eax
xorl %ebp,%edi
+ rorl $7,%edx
+ addl %ecx,%ebx
+ addl 60(%rsp),%eax
+ xorl %edx,%edi
movl %ebx,%esi
roll $5,%ebx
- xorl %edx,%edi
- addl %ebx,%eax
- rorl $7,%ecx
addl %edi,%eax
+ rorl $7,%ecx
+ addl %ebx,%eax
addl 0(%r8),%eax
addl 4(%r8),%esi
addl 8(%r8),%ecx
@@ -2356,108 +2451,110 @@ _ssse3_shortcut:
movl %esi,4(%r8)
movl %esi,%ebx
movl %ecx,8(%r8)
+ movl %ecx,%edi
movl %edx,12(%r8)
+ xorl %edx,%edi
movl %ebp,16(%r8)
+ andl %edi,%esi
jmp .Loop_ssse3
.align 16
.Ldone_ssse3:
addl 16(%rsp),%ebx
- xorl %eax,%esi
+ xorl %ebp,%esi
movl %ecx,%edi
roll $5,%ecx
- xorl %ebp,%esi
- addl %ecx,%ebx
- rorl $7,%edx
addl %esi,%ebx
- addl 20(%rsp),%eax
xorl %ebp,%edi
+ rorl $7,%edx
+ addl %ecx,%ebx
+ addl 20(%rsp),%eax
+ xorl %edx,%edi
movl %ebx,%esi
roll $5,%ebx
- xorl %edx,%edi
- addl %ebx,%eax
- rorl $7,%ecx
addl %edi,%eax
- addl 24(%rsp),%ebp
xorl %edx,%esi
+ rorl $7,%ecx
+ addl %ebx,%eax
+ addl 24(%rsp),%ebp
+ xorl %ecx,%esi
movl %eax,%edi
roll $5,%eax
- xorl %ecx,%esi
- addl %eax,%ebp
- rorl $7,%ebx
addl %esi,%ebp
- addl 28(%rsp),%edx
xorl %ecx,%edi
+ rorl $7,%ebx
+ addl %eax,%ebp
+ addl 28(%rsp),%edx
+ xorl %ebx,%edi
movl %ebp,%esi
roll $5,%ebp
- xorl %ebx,%edi
- addl %ebp,%edx
- rorl $7,%eax
addl %edi,%edx
- addl 32(%rsp),%ecx
xorl %ebx,%esi
+ rorl $7,%eax
+ addl %ebp,%edx
+ addl 32(%rsp),%ecx
+ xorl %eax,%esi
movl %edx,%edi
roll $5,%edx
- xorl %eax,%esi
- addl %edx,%ecx
- rorl $7,%ebp
addl %esi,%ecx
- addl 36(%rsp),%ebx
xorl %eax,%edi
+ rorl $7,%ebp
+ addl %edx,%ecx
+ addl 36(%rsp),%ebx
+ xorl %ebp,%edi
movl %ecx,%esi
roll $5,%ecx
- xorl %ebp,%edi
- addl %ecx,%ebx
- rorl $7,%edx
addl %edi,%ebx
- addl 40(%rsp),%eax
xorl %ebp,%esi
+ rorl $7,%edx
+ addl %ecx,%ebx
+ addl 40(%rsp),%eax
+ xorl %edx,%esi
movl %ebx,%edi
roll $5,%ebx
- xorl %edx,%esi
- addl %ebx,%eax
- rorl $7,%ecx
addl %esi,%eax
- addl 44(%rsp),%ebp
xorl %edx,%edi
+ rorl $7,%ecx
+ addl %ebx,%eax
+ addl 44(%rsp),%ebp
+ xorl %ecx,%edi
movl %eax,%esi
roll $5,%eax
- xorl %ecx,%edi
- addl %eax,%ebp
- rorl $7,%ebx
addl %edi,%ebp
- addl 48(%rsp),%edx
xorl %ecx,%esi
+ rorl $7,%ebx
+ addl %eax,%ebp
+ addl 48(%rsp),%edx
+ xorl %ebx,%esi
movl %ebp,%edi
roll $5,%ebp
- xorl %ebx,%esi
- addl %ebp,%edx
- rorl $7,%eax
addl %esi,%edx
- addl 52(%rsp),%ecx
xorl %ebx,%edi
+ rorl $7,%eax
+ addl %ebp,%edx
+ addl 52(%rsp),%ecx
+ xorl %eax,%edi
movl %edx,%esi
roll $5,%edx
- xorl %eax,%edi
- addl %edx,%ecx
- rorl $7,%ebp
addl %edi,%ecx
- addl 56(%rsp),%ebx
xorl %eax,%esi
+ rorl $7,%ebp
+ addl %edx,%ecx
+ addl 56(%rsp),%ebx
+ xorl %ebp,%esi
movl %ecx,%edi
roll $5,%ecx
- xorl %ebp,%esi
- addl %ecx,%ebx
- rorl $7,%edx
addl %esi,%ebx
- addl 60(%rsp),%eax
xorl %ebp,%edi
+ rorl $7,%edx
+ addl %ecx,%ebx
+ addl 60(%rsp),%eax
+ xorl %edx,%edi
movl %ebx,%esi
roll $5,%ebx
- xorl %edx,%edi
- addl %ebx,%eax
- rorl $7,%ecx
addl %edi,%eax
+ rorl $7,%ecx
+ addl %ebx,%eax
addl 0(%r8),%eax
addl 4(%r8),%esi
addl 8(%r8),%ecx
@@ -2468,20 +2565,28 @@ _ssse3_shortcut:
movl %ecx,8(%r8)
movl %edx,12(%r8)
movl %ebp,16(%r8)
- leaq 64(%rsp),%rsi
- movq 0(%rsi),%r12
- movq 8(%rsi),%rbp
- movq 16(%rsi),%rbx
- leaq 24(%rsi),%rsp
+ leaq (%r14),%rsi
+ movq -40(%rsi),%r14
+ movq -32(%rsi),%r13
+ movq -24(%rsi),%r12
+ movq -16(%rsi),%rbp
+ movq -8(%rsi),%rbx
+ leaq (%rsi),%rsp
.Lepilogue_ssse3:
.byte 0xf3,0xc3
.size sha1_block_data_order_ssse3,.-sha1_block_data_order_ssse3
.align 64
K_XX_XX:
-.long 0x5a827999,0x5a827999,0x5a827999,0x5a827999
-.long 0x6ed9eba1,0x6ed9eba1,0x6ed9eba1,0x6ed9eba1
-.long 0x8f1bbcdc,0x8f1bbcdc,0x8f1bbcdc,0x8f1bbcdc
-.long 0xca62c1d6,0xca62c1d6,0xca62c1d6,0xca62c1d6
-.long 0x00010203,0x04050607,0x08090a0b,0x0c0d0e0f
+.long 0x5a827999,0x5a827999,0x5a827999,0x5a827999
+.long 0x5a827999,0x5a827999,0x5a827999,0x5a827999
+.long 0x6ed9eba1,0x6ed9eba1,0x6ed9eba1,0x6ed9eba1
+.long 0x6ed9eba1,0x6ed9eba1,0x6ed9eba1,0x6ed9eba1
+.long 0x8f1bbcdc,0x8f1bbcdc,0x8f1bbcdc,0x8f1bbcdc
+.long 0x8f1bbcdc,0x8f1bbcdc,0x8f1bbcdc,0x8f1bbcdc
+.long 0xca62c1d6,0xca62c1d6,0xca62c1d6,0xca62c1d6
+.long 0xca62c1d6,0xca62c1d6,0xca62c1d6,0xca62c1d6
+.long 0x00010203,0x04050607,0x08090a0b,0x0c0d0e0f
+.long 0x00010203,0x04050607,0x08090a0b,0x0c0d0e0f
+.byte 0xf,0xe,0xd,0xc,0xb,0xa,0x9,0x8,0x7,0x6,0x5,0x4,0x3,0x2,0x1,0x0
.byte 83,72,65,49,32,98,108,111,99,107,32,116,114,97,110,115,102,111,114,109,32,102,111,114,32,120,56,54,95,54,52,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0
.align 64
diff --git a/secure/lib/libcrypto/amd64/sha256-mb-x86_64.S b/secure/lib/libcrypto/amd64/sha256-mb-x86_64.S
new file mode 100644
index 0000000..893d42a
--- /dev/null
+++ b/secure/lib/libcrypto/amd64/sha256-mb-x86_64.S
@@ -0,0 +1,3259 @@
+ # $FreeBSD$
+.text
+
+
+
+.globl sha256_multi_block
+.type sha256_multi_block,@function
+.align 32
+sha256_multi_block:
+ movq OPENSSL_ia32cap_P+4(%rip),%rcx
+ btq $61,%rcx
+ jc _shaext_shortcut
+ movq %rsp,%rax
+ pushq %rbx
+ pushq %rbp
+ subq $288,%rsp
+ andq $-256,%rsp
+ movq %rax,272(%rsp)
+.Lbody:
+ leaq K256+128(%rip),%rbp
+ leaq 256(%rsp),%rbx
+ leaq 128(%rdi),%rdi
+
+.Loop_grande:
+ movl %edx,280(%rsp)
+ xorl %edx,%edx
+ movq 0(%rsi),%r8
+ movl 8(%rsi),%ecx
+ cmpl %edx,%ecx
+ cmovgl %ecx,%edx
+ testl %ecx,%ecx
+ movl %ecx,0(%rbx)
+ cmovleq %rbp,%r8
+ movq 16(%rsi),%r9
+ movl 24(%rsi),%ecx
+ cmpl %edx,%ecx
+ cmovgl %ecx,%edx
+ testl %ecx,%ecx
+ movl %ecx,4(%rbx)
+ cmovleq %rbp,%r9
+ movq 32(%rsi),%r10
+ movl 40(%rsi),%ecx
+ cmpl %edx,%ecx
+ cmovgl %ecx,%edx
+ testl %ecx,%ecx
+ movl %ecx,8(%rbx)
+ cmovleq %rbp,%r10
+ movq 48(%rsi),%r11
+ movl 56(%rsi),%ecx
+ cmpl %edx,%ecx
+ cmovgl %ecx,%edx
+ testl %ecx,%ecx
+ movl %ecx,12(%rbx)
+ cmovleq %rbp,%r11
+ testl %edx,%edx
+ jz .Ldone
+
+ movdqu 0-128(%rdi),%xmm8
+ leaq 128(%rsp),%rax
+ movdqu 32-128(%rdi),%xmm9
+ movdqu 64-128(%rdi),%xmm10
+ movdqu 96-128(%rdi),%xmm11
+ movdqu 128-128(%rdi),%xmm12
+ movdqu 160-128(%rdi),%xmm13
+ movdqu 192-128(%rdi),%xmm14
+ movdqu 224-128(%rdi),%xmm15
+ movdqu .Lpbswap(%rip),%xmm6
+ jmp .Loop
+
+.align 32
+.Loop:
+ movdqa %xmm10,%xmm4
+ pxor %xmm9,%xmm4
+ movd 0(%r8),%xmm5
+ movd 0(%r9),%xmm0
+ movd 0(%r10),%xmm1
+ movd 0(%r11),%xmm2
+ punpckldq %xmm1,%xmm5
+ punpckldq %xmm2,%xmm0
+ punpckldq %xmm0,%xmm5
+ movdqa %xmm12,%xmm7
+.byte 102,15,56,0,238
+ movdqa %xmm12,%xmm2
+
+ psrld $6,%xmm7
+ movdqa %xmm12,%xmm1
+ pslld $7,%xmm2
+ movdqa %xmm5,0-128(%rax)
+ paddd %xmm15,%xmm5
+
+ psrld $11,%xmm1
+ pxor %xmm2,%xmm7
+ pslld $21-7,%xmm2
+ paddd -128(%rbp),%xmm5
+ pxor %xmm1,%xmm7
+
+ psrld $25-11,%xmm1
+ movdqa %xmm12,%xmm0
+
+ pxor %xmm2,%xmm7
+ movdqa %xmm12,%xmm3
+ pslld $26-21,%xmm2
+ pandn %xmm14,%xmm0
+ pand %xmm13,%xmm3
+ pxor %xmm1,%xmm7
+
+
+ movdqa %xmm8,%xmm1
+ pxor %xmm2,%xmm7
+ movdqa %xmm8,%xmm2
+ psrld $2,%xmm1
+ paddd %xmm7,%xmm5
+ pxor %xmm3,%xmm0
+ movdqa %xmm9,%xmm3
+ movdqa %xmm8,%xmm7
+ pslld $10,%xmm2
+ pxor %xmm8,%xmm3
+
+
+ psrld $13,%xmm7
+ pxor %xmm2,%xmm1
+ paddd %xmm0,%xmm5
+ pslld $19-10,%xmm2
+ pand %xmm3,%xmm4
+ pxor %xmm7,%xmm1
+
+
+ psrld $22-13,%xmm7
+ pxor %xmm2,%xmm1
+ movdqa %xmm9,%xmm15
+ pslld $30-19,%xmm2
+ pxor %xmm1,%xmm7
+ pxor %xmm4,%xmm15
+ paddd %xmm5,%xmm11
+ pxor %xmm2,%xmm7
+
+ paddd %xmm5,%xmm15
+ paddd %xmm7,%xmm15
+ movd 4(%r8),%xmm5
+ movd 4(%r9),%xmm0
+ movd 4(%r10),%xmm1
+ movd 4(%r11),%xmm2
+ punpckldq %xmm1,%xmm5
+ punpckldq %xmm2,%xmm0
+ punpckldq %xmm0,%xmm5
+ movdqa %xmm11,%xmm7
+
+ movdqa %xmm11,%xmm2
+.byte 102,15,56,0,238
+ psrld $6,%xmm7
+ movdqa %xmm11,%xmm1
+ pslld $7,%xmm2
+ movdqa %xmm5,16-128(%rax)
+ paddd %xmm14,%xmm5
+
+ psrld $11,%xmm1
+ pxor %xmm2,%xmm7
+ pslld $21-7,%xmm2
+ paddd -96(%rbp),%xmm5
+ pxor %xmm1,%xmm7
+
+ psrld $25-11,%xmm1
+ movdqa %xmm11,%xmm0
+
+ pxor %xmm2,%xmm7
+ movdqa %xmm11,%xmm4
+ pslld $26-21,%xmm2
+ pandn %xmm13,%xmm0
+ pand %xmm12,%xmm4
+ pxor %xmm1,%xmm7
+
+
+ movdqa %xmm15,%xmm1
+ pxor %xmm2,%xmm7
+ movdqa %xmm15,%xmm2
+ psrld $2,%xmm1
+ paddd %xmm7,%xmm5
+ pxor %xmm4,%xmm0
+ movdqa %xmm8,%xmm4
+ movdqa %xmm15,%xmm7
+ pslld $10,%xmm2
+ pxor %xmm15,%xmm4
+
+
+ psrld $13,%xmm7
+ pxor %xmm2,%xmm1
+ paddd %xmm0,%xmm5
+ pslld $19-10,%xmm2
+ pand %xmm4,%xmm3
+ pxor %xmm7,%xmm1
+
+
+ psrld $22-13,%xmm7
+ pxor %xmm2,%xmm1
+ movdqa %xmm8,%xmm14
+ pslld $30-19,%xmm2
+ pxor %xmm1,%xmm7
+ pxor %xmm3,%xmm14
+ paddd %xmm5,%xmm10
+ pxor %xmm2,%xmm7
+
+ paddd %xmm5,%xmm14
+ paddd %xmm7,%xmm14
+ movd 8(%r8),%xmm5
+ movd 8(%r9),%xmm0
+ movd 8(%r10),%xmm1
+ movd 8(%r11),%xmm2
+ punpckldq %xmm1,%xmm5
+ punpckldq %xmm2,%xmm0
+ punpckldq %xmm0,%xmm5
+ movdqa %xmm10,%xmm7
+.byte 102,15,56,0,238
+ movdqa %xmm10,%xmm2
+
+ psrld $6,%xmm7
+ movdqa %xmm10,%xmm1
+ pslld $7,%xmm2
+ movdqa %xmm5,32-128(%rax)
+ paddd %xmm13,%xmm5
+
+ psrld $11,%xmm1
+ pxor %xmm2,%xmm7
+ pslld $21-7,%xmm2
+ paddd -64(%rbp),%xmm5
+ pxor %xmm1,%xmm7
+
+ psrld $25-11,%xmm1
+ movdqa %xmm10,%xmm0
+
+ pxor %xmm2,%xmm7
+ movdqa %xmm10,%xmm3
+ pslld $26-21,%xmm2
+ pandn %xmm12,%xmm0
+ pand %xmm11,%xmm3
+ pxor %xmm1,%xmm7
+
+
+ movdqa %xmm14,%xmm1
+ pxor %xmm2,%xmm7
+ movdqa %xmm14,%xmm2
+ psrld $2,%xmm1
+ paddd %xmm7,%xmm5
+ pxor %xmm3,%xmm0
+ movdqa %xmm15,%xmm3
+ movdqa %xmm14,%xmm7
+ pslld $10,%xmm2
+ pxor %xmm14,%xmm3
+
+
+ psrld $13,%xmm7
+ pxor %xmm2,%xmm1
+ paddd %xmm0,%xmm5
+ pslld $19-10,%xmm2
+ pand %xmm3,%xmm4
+ pxor %xmm7,%xmm1
+
+
+ psrld $22-13,%xmm7
+ pxor %xmm2,%xmm1
+ movdqa %xmm15,%xmm13
+ pslld $30-19,%xmm2
+ pxor %xmm1,%xmm7
+ pxor %xmm4,%xmm13
+ paddd %xmm5,%xmm9
+ pxor %xmm2,%xmm7
+
+ paddd %xmm5,%xmm13
+ paddd %xmm7,%xmm13
+ movd 12(%r8),%xmm5
+ movd 12(%r9),%xmm0
+ movd 12(%r10),%xmm1
+ movd 12(%r11),%xmm2
+ punpckldq %xmm1,%xmm5
+ punpckldq %xmm2,%xmm0
+ punpckldq %xmm0,%xmm5
+ movdqa %xmm9,%xmm7
+
+ movdqa %xmm9,%xmm2
+.byte 102,15,56,0,238
+ psrld $6,%xmm7
+ movdqa %xmm9,%xmm1
+ pslld $7,%xmm2
+ movdqa %xmm5,48-128(%rax)
+ paddd %xmm12,%xmm5
+
+ psrld $11,%xmm1
+ pxor %xmm2,%xmm7
+ pslld $21-7,%xmm2
+ paddd -32(%rbp),%xmm5
+ pxor %xmm1,%xmm7
+
+ psrld $25-11,%xmm1
+ movdqa %xmm9,%xmm0
+
+ pxor %xmm2,%xmm7
+ movdqa %xmm9,%xmm4
+ pslld $26-21,%xmm2
+ pandn %xmm11,%xmm0
+ pand %xmm10,%xmm4
+ pxor %xmm1,%xmm7
+
+
+ movdqa %xmm13,%xmm1
+ pxor %xmm2,%xmm7
+ movdqa %xmm13,%xmm2
+ psrld $2,%xmm1
+ paddd %xmm7,%xmm5
+ pxor %xmm4,%xmm0
+ movdqa %xmm14,%xmm4
+ movdqa %xmm13,%xmm7
+ pslld $10,%xmm2
+ pxor %xmm13,%xmm4
+
+
+ psrld $13,%xmm7
+ pxor %xmm2,%xmm1
+ paddd %xmm0,%xmm5
+ pslld $19-10,%xmm2
+ pand %xmm4,%xmm3
+ pxor %xmm7,%xmm1
+
+
+ psrld $22-13,%xmm7
+ pxor %xmm2,%xmm1
+ movdqa %xmm14,%xmm12
+ pslld $30-19,%xmm2
+ pxor %xmm1,%xmm7
+ pxor %xmm3,%xmm12
+ paddd %xmm5,%xmm8
+ pxor %xmm2,%xmm7
+
+ paddd %xmm5,%xmm12
+ paddd %xmm7,%xmm12
+ movd 16(%r8),%xmm5
+ movd 16(%r9),%xmm0
+ movd 16(%r10),%xmm1
+ movd 16(%r11),%xmm2
+ punpckldq %xmm1,%xmm5
+ punpckldq %xmm2,%xmm0
+ punpckldq %xmm0,%xmm5
+ movdqa %xmm8,%xmm7
+.byte 102,15,56,0,238
+ movdqa %xmm8,%xmm2
+
+ psrld $6,%xmm7
+ movdqa %xmm8,%xmm1
+ pslld $7,%xmm2
+ movdqa %xmm5,64-128(%rax)
+ paddd %xmm11,%xmm5
+
+ psrld $11,%xmm1
+ pxor %xmm2,%xmm7
+ pslld $21-7,%xmm2
+ paddd 0(%rbp),%xmm5
+ pxor %xmm1,%xmm7
+
+ psrld $25-11,%xmm1
+ movdqa %xmm8,%xmm0
+
+ pxor %xmm2,%xmm7
+ movdqa %xmm8,%xmm3
+ pslld $26-21,%xmm2
+ pandn %xmm10,%xmm0
+ pand %xmm9,%xmm3
+ pxor %xmm1,%xmm7
+
+
+ movdqa %xmm12,%xmm1
+ pxor %xmm2,%xmm7
+ movdqa %xmm12,%xmm2
+ psrld $2,%xmm1
+ paddd %xmm7,%xmm5
+ pxor %xmm3,%xmm0
+ movdqa %xmm13,%xmm3
+ movdqa %xmm12,%xmm7
+ pslld $10,%xmm2
+ pxor %xmm12,%xmm3
+
+
+ psrld $13,%xmm7
+ pxor %xmm2,%xmm1
+ paddd %xmm0,%xmm5
+ pslld $19-10,%xmm2
+ pand %xmm3,%xmm4
+ pxor %xmm7,%xmm1
+
+
+ psrld $22-13,%xmm7
+ pxor %xmm2,%xmm1
+ movdqa %xmm13,%xmm11
+ pslld $30-19,%xmm2
+ pxor %xmm1,%xmm7
+ pxor %xmm4,%xmm11
+ paddd %xmm5,%xmm15
+ pxor %xmm2,%xmm7
+
+ paddd %xmm5,%xmm11
+ paddd %xmm7,%xmm11
+ movd 20(%r8),%xmm5
+ movd 20(%r9),%xmm0
+ movd 20(%r10),%xmm1
+ movd 20(%r11),%xmm2
+ punpckldq %xmm1,%xmm5
+ punpckldq %xmm2,%xmm0
+ punpckldq %xmm0,%xmm5
+ movdqa %xmm15,%xmm7
+
+ movdqa %xmm15,%xmm2
+.byte 102,15,56,0,238
+ psrld $6,%xmm7
+ movdqa %xmm15,%xmm1
+ pslld $7,%xmm2
+ movdqa %xmm5,80-128(%rax)
+ paddd %xmm10,%xmm5
+
+ psrld $11,%xmm1
+ pxor %xmm2,%xmm7
+ pslld $21-7,%xmm2
+ paddd 32(%rbp),%xmm5
+ pxor %xmm1,%xmm7
+
+ psrld $25-11,%xmm1
+ movdqa %xmm15,%xmm0
+
+ pxor %xmm2,%xmm7
+ movdqa %xmm15,%xmm4
+ pslld $26-21,%xmm2
+ pandn %xmm9,%xmm0
+ pand %xmm8,%xmm4
+ pxor %xmm1,%xmm7
+
+
+ movdqa %xmm11,%xmm1
+ pxor %xmm2,%xmm7
+ movdqa %xmm11,%xmm2
+ psrld $2,%xmm1
+ paddd %xmm7,%xmm5
+ pxor %xmm4,%xmm0
+ movdqa %xmm12,%xmm4
+ movdqa %xmm11,%xmm7
+ pslld $10,%xmm2
+ pxor %xmm11,%xmm4
+
+
+ psrld $13,%xmm7
+ pxor %xmm2,%xmm1
+ paddd %xmm0,%xmm5
+ pslld $19-10,%xmm2
+ pand %xmm4,%xmm3
+ pxor %xmm7,%xmm1
+
+
+ psrld $22-13,%xmm7
+ pxor %xmm2,%xmm1
+ movdqa %xmm12,%xmm10
+ pslld $30-19,%xmm2
+ pxor %xmm1,%xmm7
+ pxor %xmm3,%xmm10
+ paddd %xmm5,%xmm14
+ pxor %xmm2,%xmm7
+
+ paddd %xmm5,%xmm10
+ paddd %xmm7,%xmm10
+ movd 24(%r8),%xmm5
+ movd 24(%r9),%xmm0
+ movd 24(%r10),%xmm1
+ movd 24(%r11),%xmm2
+ punpckldq %xmm1,%xmm5
+ punpckldq %xmm2,%xmm0
+ punpckldq %xmm0,%xmm5
+ movdqa %xmm14,%xmm7
+.byte 102,15,56,0,238
+ movdqa %xmm14,%xmm2
+
+ psrld $6,%xmm7
+ movdqa %xmm14,%xmm1
+ pslld $7,%xmm2
+ movdqa %xmm5,96-128(%rax)
+ paddd %xmm9,%xmm5
+
+ psrld $11,%xmm1
+ pxor %xmm2,%xmm7
+ pslld $21-7,%xmm2
+ paddd 64(%rbp),%xmm5
+ pxor %xmm1,%xmm7
+
+ psrld $25-11,%xmm1
+ movdqa %xmm14,%xmm0
+
+ pxor %xmm2,%xmm7
+ movdqa %xmm14,%xmm3
+ pslld $26-21,%xmm2
+ pandn %xmm8,%xmm0
+ pand %xmm15,%xmm3
+ pxor %xmm1,%xmm7
+
+
+ movdqa %xmm10,%xmm1
+ pxor %xmm2,%xmm7
+ movdqa %xmm10,%xmm2
+ psrld $2,%xmm1
+ paddd %xmm7,%xmm5
+ pxor %xmm3,%xmm0
+ movdqa %xmm11,%xmm3
+ movdqa %xmm10,%xmm7
+ pslld $10,%xmm2
+ pxor %xmm10,%xmm3
+
+
+ psrld $13,%xmm7
+ pxor %xmm2,%xmm1
+ paddd %xmm0,%xmm5
+ pslld $19-10,%xmm2
+ pand %xmm3,%xmm4
+ pxor %xmm7,%xmm1
+
+
+ psrld $22-13,%xmm7
+ pxor %xmm2,%xmm1
+ movdqa %xmm11,%xmm9
+ pslld $30-19,%xmm2
+ pxor %xmm1,%xmm7
+ pxor %xmm4,%xmm9
+ paddd %xmm5,%xmm13
+ pxor %xmm2,%xmm7
+
+ paddd %xmm5,%xmm9
+ paddd %xmm7,%xmm9
+ movd 28(%r8),%xmm5
+ movd 28(%r9),%xmm0
+ movd 28(%r10),%xmm1
+ movd 28(%r11),%xmm2
+ punpckldq %xmm1,%xmm5
+ punpckldq %xmm2,%xmm0
+ punpckldq %xmm0,%xmm5
+ movdqa %xmm13,%xmm7
+
+ movdqa %xmm13,%xmm2
+.byte 102,15,56,0,238
+ psrld $6,%xmm7
+ movdqa %xmm13,%xmm1
+ pslld $7,%xmm2
+ movdqa %xmm5,112-128(%rax)
+ paddd %xmm8,%xmm5
+
+ psrld $11,%xmm1
+ pxor %xmm2,%xmm7
+ pslld $21-7,%xmm2
+ paddd 96(%rbp),%xmm5
+ pxor %xmm1,%xmm7
+
+ psrld $25-11,%xmm1
+ movdqa %xmm13,%xmm0
+
+ pxor %xmm2,%xmm7
+ movdqa %xmm13,%xmm4
+ pslld $26-21,%xmm2
+ pandn %xmm15,%xmm0
+ pand %xmm14,%xmm4
+ pxor %xmm1,%xmm7
+
+
+ movdqa %xmm9,%xmm1
+ pxor %xmm2,%xmm7
+ movdqa %xmm9,%xmm2
+ psrld $2,%xmm1
+ paddd %xmm7,%xmm5
+ pxor %xmm4,%xmm0
+ movdqa %xmm10,%xmm4
+ movdqa %xmm9,%xmm7
+ pslld $10,%xmm2
+ pxor %xmm9,%xmm4
+
+
+ psrld $13,%xmm7
+ pxor %xmm2,%xmm1
+ paddd %xmm0,%xmm5
+ pslld $19-10,%xmm2
+ pand %xmm4,%xmm3
+ pxor %xmm7,%xmm1
+
+
+ psrld $22-13,%xmm7
+ pxor %xmm2,%xmm1
+ movdqa %xmm10,%xmm8
+ pslld $30-19,%xmm2
+ pxor %xmm1,%xmm7
+ pxor %xmm3,%xmm8
+ paddd %xmm5,%xmm12
+ pxor %xmm2,%xmm7
+
+ paddd %xmm5,%xmm8
+ paddd %xmm7,%xmm8
+ leaq 256(%rbp),%rbp
+ movd 32(%r8),%xmm5
+ movd 32(%r9),%xmm0
+ movd 32(%r10),%xmm1
+ movd 32(%r11),%xmm2
+ punpckldq %xmm1,%xmm5
+ punpckldq %xmm2,%xmm0
+ punpckldq %xmm0,%xmm5
+ movdqa %xmm12,%xmm7
+.byte 102,15,56,0,238
+ movdqa %xmm12,%xmm2
+
+ psrld $6,%xmm7
+ movdqa %xmm12,%xmm1
+ pslld $7,%xmm2
+ movdqa %xmm5,128-128(%rax)
+ paddd %xmm15,%xmm5
+
+ psrld $11,%xmm1
+ pxor %xmm2,%xmm7
+ pslld $21-7,%xmm2
+ paddd -128(%rbp),%xmm5
+ pxor %xmm1,%xmm7
+
+ psrld $25-11,%xmm1
+ movdqa %xmm12,%xmm0
+
+ pxor %xmm2,%xmm7
+ movdqa %xmm12,%xmm3
+ pslld $26-21,%xmm2
+ pandn %xmm14,%xmm0
+ pand %xmm13,%xmm3
+ pxor %xmm1,%xmm7
+
+
+ movdqa %xmm8,%xmm1
+ pxor %xmm2,%xmm7
+ movdqa %xmm8,%xmm2
+ psrld $2,%xmm1
+ paddd %xmm7,%xmm5
+ pxor %xmm3,%xmm0
+ movdqa %xmm9,%xmm3
+ movdqa %xmm8,%xmm7
+ pslld $10,%xmm2
+ pxor %xmm8,%xmm3
+
+
+ psrld $13,%xmm7
+ pxor %xmm2,%xmm1
+ paddd %xmm0,%xmm5
+ pslld $19-10,%xmm2
+ pand %xmm3,%xmm4
+ pxor %xmm7,%xmm1
+
+
+ psrld $22-13,%xmm7
+ pxor %xmm2,%xmm1
+ movdqa %xmm9,%xmm15
+ pslld $30-19,%xmm2
+ pxor %xmm1,%xmm7
+ pxor %xmm4,%xmm15
+ paddd %xmm5,%xmm11
+ pxor %xmm2,%xmm7
+
+ paddd %xmm5,%xmm15
+ paddd %xmm7,%xmm15
+ movd 36(%r8),%xmm5
+ movd 36(%r9),%xmm0
+ movd 36(%r10),%xmm1
+ movd 36(%r11),%xmm2
+ punpckldq %xmm1,%xmm5
+ punpckldq %xmm2,%xmm0
+ punpckldq %xmm0,%xmm5
+ movdqa %xmm11,%xmm7
+
+ movdqa %xmm11,%xmm2
+.byte 102,15,56,0,238
+ psrld $6,%xmm7
+ movdqa %xmm11,%xmm1
+ pslld $7,%xmm2
+ movdqa %xmm5,144-128(%rax)
+ paddd %xmm14,%xmm5
+
+ psrld $11,%xmm1
+ pxor %xmm2,%xmm7
+ pslld $21-7,%xmm2
+ paddd -96(%rbp),%xmm5
+ pxor %xmm1,%xmm7
+
+ psrld $25-11,%xmm1
+ movdqa %xmm11,%xmm0
+
+ pxor %xmm2,%xmm7
+ movdqa %xmm11,%xmm4
+ pslld $26-21,%xmm2
+ pandn %xmm13,%xmm0
+ pand %xmm12,%xmm4
+ pxor %xmm1,%xmm7
+
+
+ movdqa %xmm15,%xmm1
+ pxor %xmm2,%xmm7
+ movdqa %xmm15,%xmm2
+ psrld $2,%xmm1
+ paddd %xmm7,%xmm5
+ pxor %xmm4,%xmm0
+ movdqa %xmm8,%xmm4
+ movdqa %xmm15,%xmm7
+ pslld $10,%xmm2
+ pxor %xmm15,%xmm4
+
+
+ psrld $13,%xmm7
+ pxor %xmm2,%xmm1
+ paddd %xmm0,%xmm5
+ pslld $19-10,%xmm2
+ pand %xmm4,%xmm3
+ pxor %xmm7,%xmm1
+
+
+ psrld $22-13,%xmm7
+ pxor %xmm2,%xmm1
+ movdqa %xmm8,%xmm14
+ pslld $30-19,%xmm2
+ pxor %xmm1,%xmm7
+ pxor %xmm3,%xmm14
+ paddd %xmm5,%xmm10
+ pxor %xmm2,%xmm7
+
+ paddd %xmm5,%xmm14
+ paddd %xmm7,%xmm14
+ movd 40(%r8),%xmm5
+ movd 40(%r9),%xmm0
+ movd 40(%r10),%xmm1
+ movd 40(%r11),%xmm2
+ punpckldq %xmm1,%xmm5
+ punpckldq %xmm2,%xmm0
+ punpckldq %xmm0,%xmm5
+ movdqa %xmm10,%xmm7
+.byte 102,15,56,0,238
+ movdqa %xmm10,%xmm2
+
+ psrld $6,%xmm7
+ movdqa %xmm10,%xmm1
+ pslld $7,%xmm2
+ movdqa %xmm5,160-128(%rax)
+ paddd %xmm13,%xmm5
+
+ psrld $11,%xmm1
+ pxor %xmm2,%xmm7
+ pslld $21-7,%xmm2
+ paddd -64(%rbp),%xmm5
+ pxor %xmm1,%xmm7
+
+ psrld $25-11,%xmm1
+ movdqa %xmm10,%xmm0
+
+ pxor %xmm2,%xmm7
+ movdqa %xmm10,%xmm3
+ pslld $26-21,%xmm2
+ pandn %xmm12,%xmm0
+ pand %xmm11,%xmm3
+ pxor %xmm1,%xmm7
+
+
+ movdqa %xmm14,%xmm1
+ pxor %xmm2,%xmm7
+ movdqa %xmm14,%xmm2
+ psrld $2,%xmm1
+ paddd %xmm7,%xmm5
+ pxor %xmm3,%xmm0
+ movdqa %xmm15,%xmm3
+ movdqa %xmm14,%xmm7
+ pslld $10,%xmm2
+ pxor %xmm14,%xmm3
+
+
+ psrld $13,%xmm7
+ pxor %xmm2,%xmm1
+ paddd %xmm0,%xmm5
+ pslld $19-10,%xmm2
+ pand %xmm3,%xmm4
+ pxor %xmm7,%xmm1
+
+
+ psrld $22-13,%xmm7
+ pxor %xmm2,%xmm1
+ movdqa %xmm15,%xmm13
+ pslld $30-19,%xmm2
+ pxor %xmm1,%xmm7
+ pxor %xmm4,%xmm13
+ paddd %xmm5,%xmm9
+ pxor %xmm2,%xmm7
+
+ paddd %xmm5,%xmm13
+ paddd %xmm7,%xmm13
+ movd 44(%r8),%xmm5
+ movd 44(%r9),%xmm0
+ movd 44(%r10),%xmm1
+ movd 44(%r11),%xmm2
+ punpckldq %xmm1,%xmm5
+ punpckldq %xmm2,%xmm0
+ punpckldq %xmm0,%xmm5
+ movdqa %xmm9,%xmm7
+
+ movdqa %xmm9,%xmm2
+.byte 102,15,56,0,238
+ psrld $6,%xmm7
+ movdqa %xmm9,%xmm1
+ pslld $7,%xmm2
+ movdqa %xmm5,176-128(%rax)
+ paddd %xmm12,%xmm5
+
+ psrld $11,%xmm1
+ pxor %xmm2,%xmm7
+ pslld $21-7,%xmm2
+ paddd -32(%rbp),%xmm5
+ pxor %xmm1,%xmm7
+
+ psrld $25-11,%xmm1
+ movdqa %xmm9,%xmm0
+
+ pxor %xmm2,%xmm7
+ movdqa %xmm9,%xmm4
+ pslld $26-21,%xmm2
+ pandn %xmm11,%xmm0
+ pand %xmm10,%xmm4
+ pxor %xmm1,%xmm7
+
+
+ movdqa %xmm13,%xmm1
+ pxor %xmm2,%xmm7
+ movdqa %xmm13,%xmm2
+ psrld $2,%xmm1
+ paddd %xmm7,%xmm5
+ pxor %xmm4,%xmm0
+ movdqa %xmm14,%xmm4
+ movdqa %xmm13,%xmm7
+ pslld $10,%xmm2
+ pxor %xmm13,%xmm4
+
+
+ psrld $13,%xmm7
+ pxor %xmm2,%xmm1
+ paddd %xmm0,%xmm5
+ pslld $19-10,%xmm2
+ pand %xmm4,%xmm3
+ pxor %xmm7,%xmm1
+
+
+ psrld $22-13,%xmm7
+ pxor %xmm2,%xmm1
+ movdqa %xmm14,%xmm12
+ pslld $30-19,%xmm2
+ pxor %xmm1,%xmm7
+ pxor %xmm3,%xmm12
+ paddd %xmm5,%xmm8
+ pxor %xmm2,%xmm7
+
+ paddd %xmm5,%xmm12
+ paddd %xmm7,%xmm12
+ movd 48(%r8),%xmm5
+ movd 48(%r9),%xmm0
+ movd 48(%r10),%xmm1
+ movd 48(%r11),%xmm2
+ punpckldq %xmm1,%xmm5
+ punpckldq %xmm2,%xmm0
+ punpckldq %xmm0,%xmm5
+ movdqa %xmm8,%xmm7
+.byte 102,15,56,0,238
+ movdqa %xmm8,%xmm2
+
+ psrld $6,%xmm7
+ movdqa %xmm8,%xmm1
+ pslld $7,%xmm2
+ movdqa %xmm5,192-128(%rax)
+ paddd %xmm11,%xmm5
+
+ psrld $11,%xmm1
+ pxor %xmm2,%xmm7
+ pslld $21-7,%xmm2
+ paddd 0(%rbp),%xmm5
+ pxor %xmm1,%xmm7
+
+ psrld $25-11,%xmm1
+ movdqa %xmm8,%xmm0
+
+ pxor %xmm2,%xmm7
+ movdqa %xmm8,%xmm3
+ pslld $26-21,%xmm2
+ pandn %xmm10,%xmm0
+ pand %xmm9,%xmm3
+ pxor %xmm1,%xmm7
+
+
+ movdqa %xmm12,%xmm1
+ pxor %xmm2,%xmm7
+ movdqa %xmm12,%xmm2
+ psrld $2,%xmm1
+ paddd %xmm7,%xmm5
+ pxor %xmm3,%xmm0
+ movdqa %xmm13,%xmm3
+ movdqa %xmm12,%xmm7
+ pslld $10,%xmm2
+ pxor %xmm12,%xmm3
+
+
+ psrld $13,%xmm7
+ pxor %xmm2,%xmm1
+ paddd %xmm0,%xmm5
+ pslld $19-10,%xmm2
+ pand %xmm3,%xmm4
+ pxor %xmm7,%xmm1
+
+
+ psrld $22-13,%xmm7
+ pxor %xmm2,%xmm1
+ movdqa %xmm13,%xmm11
+ pslld $30-19,%xmm2
+ pxor %xmm1,%xmm7
+ pxor %xmm4,%xmm11
+ paddd %xmm5,%xmm15
+ pxor %xmm2,%xmm7
+
+ paddd %xmm5,%xmm11
+ paddd %xmm7,%xmm11
+ movd 52(%r8),%xmm5
+ movd 52(%r9),%xmm0
+ movd 52(%r10),%xmm1
+ movd 52(%r11),%xmm2
+ punpckldq %xmm1,%xmm5
+ punpckldq %xmm2,%xmm0
+ punpckldq %xmm0,%xmm5
+ movdqa %xmm15,%xmm7
+
+ movdqa %xmm15,%xmm2
+.byte 102,15,56,0,238
+ psrld $6,%xmm7
+ movdqa %xmm15,%xmm1
+ pslld $7,%xmm2
+ movdqa %xmm5,208-128(%rax)
+ paddd %xmm10,%xmm5
+
+ psrld $11,%xmm1
+ pxor %xmm2,%xmm7
+ pslld $21-7,%xmm2
+ paddd 32(%rbp),%xmm5
+ pxor %xmm1,%xmm7
+
+ psrld $25-11,%xmm1
+ movdqa %xmm15,%xmm0
+
+ pxor %xmm2,%xmm7
+ movdqa %xmm15,%xmm4
+ pslld $26-21,%xmm2
+ pandn %xmm9,%xmm0
+ pand %xmm8,%xmm4
+ pxor %xmm1,%xmm7
+
+
+ movdqa %xmm11,%xmm1
+ pxor %xmm2,%xmm7
+ movdqa %xmm11,%xmm2
+ psrld $2,%xmm1
+ paddd %xmm7,%xmm5
+ pxor %xmm4,%xmm0
+ movdqa %xmm12,%xmm4
+ movdqa %xmm11,%xmm7
+ pslld $10,%xmm2
+ pxor %xmm11,%xmm4
+
+
+ psrld $13,%xmm7
+ pxor %xmm2,%xmm1
+ paddd %xmm0,%xmm5
+ pslld $19-10,%xmm2
+ pand %xmm4,%xmm3
+ pxor %xmm7,%xmm1
+
+
+ psrld $22-13,%xmm7
+ pxor %xmm2,%xmm1
+ movdqa %xmm12,%xmm10
+ pslld $30-19,%xmm2
+ pxor %xmm1,%xmm7
+ pxor %xmm3,%xmm10
+ paddd %xmm5,%xmm14
+ pxor %xmm2,%xmm7
+
+ paddd %xmm5,%xmm10
+ paddd %xmm7,%xmm10
+ movd 56(%r8),%xmm5
+ movd 56(%r9),%xmm0
+ movd 56(%r10),%xmm1
+ movd 56(%r11),%xmm2
+ punpckldq %xmm1,%xmm5
+ punpckldq %xmm2,%xmm0
+ punpckldq %xmm0,%xmm5
+ movdqa %xmm14,%xmm7
+.byte 102,15,56,0,238
+ movdqa %xmm14,%xmm2
+
+ psrld $6,%xmm7
+ movdqa %xmm14,%xmm1
+ pslld $7,%xmm2
+ movdqa %xmm5,224-128(%rax)
+ paddd %xmm9,%xmm5
+
+ psrld $11,%xmm1
+ pxor %xmm2,%xmm7
+ pslld $21-7,%xmm2
+ paddd 64(%rbp),%xmm5
+ pxor %xmm1,%xmm7
+
+ psrld $25-11,%xmm1
+ movdqa %xmm14,%xmm0
+
+ pxor %xmm2,%xmm7
+ movdqa %xmm14,%xmm3
+ pslld $26-21,%xmm2
+ pandn %xmm8,%xmm0
+ pand %xmm15,%xmm3
+ pxor %xmm1,%xmm7
+
+
+ movdqa %xmm10,%xmm1
+ pxor %xmm2,%xmm7
+ movdqa %xmm10,%xmm2
+ psrld $2,%xmm1
+ paddd %xmm7,%xmm5
+ pxor %xmm3,%xmm0
+ movdqa %xmm11,%xmm3
+ movdqa %xmm10,%xmm7
+ pslld $10,%xmm2
+ pxor %xmm10,%xmm3
+
+
+ psrld $13,%xmm7
+ pxor %xmm2,%xmm1
+ paddd %xmm0,%xmm5
+ pslld $19-10,%xmm2
+ pand %xmm3,%xmm4
+ pxor %xmm7,%xmm1
+
+
+ psrld $22-13,%xmm7
+ pxor %xmm2,%xmm1
+ movdqa %xmm11,%xmm9
+ pslld $30-19,%xmm2
+ pxor %xmm1,%xmm7
+ pxor %xmm4,%xmm9
+ paddd %xmm5,%xmm13
+ pxor %xmm2,%xmm7
+
+ paddd %xmm5,%xmm9
+ paddd %xmm7,%xmm9
+ movd 60(%r8),%xmm5
+ leaq 64(%r8),%r8
+ movd 60(%r9),%xmm0
+ leaq 64(%r9),%r9
+ movd 60(%r10),%xmm1
+ leaq 64(%r10),%r10
+ movd 60(%r11),%xmm2
+ leaq 64(%r11),%r11
+ punpckldq %xmm1,%xmm5
+ punpckldq %xmm2,%xmm0
+ punpckldq %xmm0,%xmm5
+ movdqa %xmm13,%xmm7
+
+ movdqa %xmm13,%xmm2
+.byte 102,15,56,0,238
+ psrld $6,%xmm7
+ movdqa %xmm13,%xmm1
+ pslld $7,%xmm2
+ movdqa %xmm5,240-128(%rax)
+ paddd %xmm8,%xmm5
+
+ psrld $11,%xmm1
+ pxor %xmm2,%xmm7
+ pslld $21-7,%xmm2
+ paddd 96(%rbp),%xmm5
+ pxor %xmm1,%xmm7
+
+ psrld $25-11,%xmm1
+ movdqa %xmm13,%xmm0
+ prefetcht0 63(%r8)
+ pxor %xmm2,%xmm7
+ movdqa %xmm13,%xmm4
+ pslld $26-21,%xmm2
+ pandn %xmm15,%xmm0
+ pand %xmm14,%xmm4
+ pxor %xmm1,%xmm7
+
+ prefetcht0 63(%r9)
+ movdqa %xmm9,%xmm1
+ pxor %xmm2,%xmm7
+ movdqa %xmm9,%xmm2
+ psrld $2,%xmm1
+ paddd %xmm7,%xmm5
+ pxor %xmm4,%xmm0
+ movdqa %xmm10,%xmm4
+ movdqa %xmm9,%xmm7
+ pslld $10,%xmm2
+ pxor %xmm9,%xmm4
+
+ prefetcht0 63(%r10)
+ psrld $13,%xmm7
+ pxor %xmm2,%xmm1
+ paddd %xmm0,%xmm5
+ pslld $19-10,%xmm2
+ pand %xmm4,%xmm3
+ pxor %xmm7,%xmm1
+
+ prefetcht0 63(%r11)
+ psrld $22-13,%xmm7
+ pxor %xmm2,%xmm1
+ movdqa %xmm10,%xmm8
+ pslld $30-19,%xmm2
+ pxor %xmm1,%xmm7
+ pxor %xmm3,%xmm8
+ paddd %xmm5,%xmm12
+ pxor %xmm2,%xmm7
+
+ paddd %xmm5,%xmm8
+ paddd %xmm7,%xmm8
+ leaq 256(%rbp),%rbp
+ movdqu 0-128(%rax),%xmm5
+ movl $3,%ecx
+ jmp .Loop_16_xx
+.align 32
+.Loop_16_xx:
+ movdqa 16-128(%rax),%xmm6
+ paddd 144-128(%rax),%xmm5
+
+ movdqa %xmm6,%xmm7
+ movdqa %xmm6,%xmm1
+ psrld $3,%xmm7
+ movdqa %xmm6,%xmm2
+
+ psrld $7,%xmm1
+ movdqa 224-128(%rax),%xmm0
+ pslld $14,%xmm2
+ pxor %xmm1,%xmm7
+ psrld $18-7,%xmm1
+ movdqa %xmm0,%xmm3
+ pxor %xmm2,%xmm7
+ pslld $25-14,%xmm2
+ pxor %xmm1,%xmm7
+ psrld $10,%xmm0
+ movdqa %xmm3,%xmm1
+
+ psrld $17,%xmm3
+ pxor %xmm2,%xmm7
+ pslld $13,%xmm1
+ paddd %xmm7,%xmm5
+ pxor %xmm3,%xmm0
+ psrld $19-17,%xmm3
+ pxor %xmm1,%xmm0
+ pslld $15-13,%xmm1
+ pxor %xmm3,%xmm0
+ pxor %xmm1,%xmm0
+ paddd %xmm0,%xmm5
+ movdqa %xmm12,%xmm7
+
+ movdqa %xmm12,%xmm2
+
+ psrld $6,%xmm7
+ movdqa %xmm12,%xmm1
+ pslld $7,%xmm2
+ movdqa %xmm5,0-128(%rax)
+ paddd %xmm15,%xmm5
+
+ psrld $11,%xmm1
+ pxor %xmm2,%xmm7
+ pslld $21-7,%xmm2
+ paddd -128(%rbp),%xmm5
+ pxor %xmm1,%xmm7
+
+ psrld $25-11,%xmm1
+ movdqa %xmm12,%xmm0
+
+ pxor %xmm2,%xmm7
+ movdqa %xmm12,%xmm3
+ pslld $26-21,%xmm2
+ pandn %xmm14,%xmm0
+ pand %xmm13,%xmm3
+ pxor %xmm1,%xmm7
+
+
+ movdqa %xmm8,%xmm1
+ pxor %xmm2,%xmm7
+ movdqa %xmm8,%xmm2
+ psrld $2,%xmm1
+ paddd %xmm7,%xmm5
+ pxor %xmm3,%xmm0
+ movdqa %xmm9,%xmm3
+ movdqa %xmm8,%xmm7
+ pslld $10,%xmm2
+ pxor %xmm8,%xmm3
+
+
+ psrld $13,%xmm7
+ pxor %xmm2,%xmm1
+ paddd %xmm0,%xmm5
+ pslld $19-10,%xmm2
+ pand %xmm3,%xmm4
+ pxor %xmm7,%xmm1
+
+
+ psrld $22-13,%xmm7
+ pxor %xmm2,%xmm1
+ movdqa %xmm9,%xmm15
+ pslld $30-19,%xmm2
+ pxor %xmm1,%xmm7
+ pxor %xmm4,%xmm15
+ paddd %xmm5,%xmm11
+ pxor %xmm2,%xmm7
+
+ paddd %xmm5,%xmm15
+ paddd %xmm7,%xmm15
+ movdqa 32-128(%rax),%xmm5
+ paddd 160-128(%rax),%xmm6
+
+ movdqa %xmm5,%xmm7
+ movdqa %xmm5,%xmm1
+ psrld $3,%xmm7
+ movdqa %xmm5,%xmm2
+
+ psrld $7,%xmm1
+ movdqa 240-128(%rax),%xmm0
+ pslld $14,%xmm2
+ pxor %xmm1,%xmm7
+ psrld $18-7,%xmm1
+ movdqa %xmm0,%xmm4
+ pxor %xmm2,%xmm7
+ pslld $25-14,%xmm2
+ pxor %xmm1,%xmm7
+ psrld $10,%xmm0
+ movdqa %xmm4,%xmm1
+
+ psrld $17,%xmm4
+ pxor %xmm2,%xmm7
+ pslld $13,%xmm1
+ paddd %xmm7,%xmm6
+ pxor %xmm4,%xmm0
+ psrld $19-17,%xmm4
+ pxor %xmm1,%xmm0
+ pslld $15-13,%xmm1
+ pxor %xmm4,%xmm0
+ pxor %xmm1,%xmm0
+ paddd %xmm0,%xmm6
+ movdqa %xmm11,%xmm7
+
+ movdqa %xmm11,%xmm2
+
+ psrld $6,%xmm7
+ movdqa %xmm11,%xmm1
+ pslld $7,%xmm2
+ movdqa %xmm6,16-128(%rax)
+ paddd %xmm14,%xmm6
+
+ psrld $11,%xmm1
+ pxor %xmm2,%xmm7
+ pslld $21-7,%xmm2
+ paddd -96(%rbp),%xmm6
+ pxor %xmm1,%xmm7
+
+ psrld $25-11,%xmm1
+ movdqa %xmm11,%xmm0
+
+ pxor %xmm2,%xmm7
+ movdqa %xmm11,%xmm4
+ pslld $26-21,%xmm2
+ pandn %xmm13,%xmm0
+ pand %xmm12,%xmm4
+ pxor %xmm1,%xmm7
+
+
+ movdqa %xmm15,%xmm1
+ pxor %xmm2,%xmm7
+ movdqa %xmm15,%xmm2
+ psrld $2,%xmm1
+ paddd %xmm7,%xmm6
+ pxor %xmm4,%xmm0
+ movdqa %xmm8,%xmm4
+ movdqa %xmm15,%xmm7
+ pslld $10,%xmm2
+ pxor %xmm15,%xmm4
+
+
+ psrld $13,%xmm7
+ pxor %xmm2,%xmm1
+ paddd %xmm0,%xmm6
+ pslld $19-10,%xmm2
+ pand %xmm4,%xmm3
+ pxor %xmm7,%xmm1
+
+
+ psrld $22-13,%xmm7
+ pxor %xmm2,%xmm1
+ movdqa %xmm8,%xmm14
+ pslld $30-19,%xmm2
+ pxor %xmm1,%xmm7
+ pxor %xmm3,%xmm14
+ paddd %xmm6,%xmm10
+ pxor %xmm2,%xmm7
+
+ paddd %xmm6,%xmm14
+ paddd %xmm7,%xmm14
+ movdqa 48-128(%rax),%xmm6
+ paddd 176-128(%rax),%xmm5
+
+ movdqa %xmm6,%xmm7
+ movdqa %xmm6,%xmm1
+ psrld $3,%xmm7
+ movdqa %xmm6,%xmm2
+
+ psrld $7,%xmm1
+ movdqa 0-128(%rax),%xmm0
+ pslld $14,%xmm2
+ pxor %xmm1,%xmm7
+ psrld $18-7,%xmm1
+ movdqa %xmm0,%xmm3
+ pxor %xmm2,%xmm7
+ pslld $25-14,%xmm2
+ pxor %xmm1,%xmm7
+ psrld $10,%xmm0
+ movdqa %xmm3,%xmm1
+
+ psrld $17,%xmm3
+ pxor %xmm2,%xmm7
+ pslld $13,%xmm1
+ paddd %xmm7,%xmm5
+ pxor %xmm3,%xmm0
+ psrld $19-17,%xmm3
+ pxor %xmm1,%xmm0
+ pslld $15-13,%xmm1
+ pxor %xmm3,%xmm0
+ pxor %xmm1,%xmm0
+ paddd %xmm0,%xmm5
+ movdqa %xmm10,%xmm7
+
+ movdqa %xmm10,%xmm2
+
+ psrld $6,%xmm7
+ movdqa %xmm10,%xmm1
+ pslld $7,%xmm2
+ movdqa %xmm5,32-128(%rax)
+ paddd %xmm13,%xmm5
+
+ psrld $11,%xmm1
+ pxor %xmm2,%xmm7
+ pslld $21-7,%xmm2
+ paddd -64(%rbp),%xmm5
+ pxor %xmm1,%xmm7
+
+ psrld $25-11,%xmm1
+ movdqa %xmm10,%xmm0
+
+ pxor %xmm2,%xmm7
+ movdqa %xmm10,%xmm3
+ pslld $26-21,%xmm2
+ pandn %xmm12,%xmm0
+ pand %xmm11,%xmm3
+ pxor %xmm1,%xmm7
+
+
+ movdqa %xmm14,%xmm1
+ pxor %xmm2,%xmm7
+ movdqa %xmm14,%xmm2
+ psrld $2,%xmm1
+ paddd %xmm7,%xmm5
+ pxor %xmm3,%xmm0
+ movdqa %xmm15,%xmm3
+ movdqa %xmm14,%xmm7
+ pslld $10,%xmm2
+ pxor %xmm14,%xmm3
+
+
+ psrld $13,%xmm7
+ pxor %xmm2,%xmm1
+ paddd %xmm0,%xmm5
+ pslld $19-10,%xmm2
+ pand %xmm3,%xmm4
+ pxor %xmm7,%xmm1
+
+
+ psrld $22-13,%xmm7
+ pxor %xmm2,%xmm1
+ movdqa %xmm15,%xmm13
+ pslld $30-19,%xmm2
+ pxor %xmm1,%xmm7
+ pxor %xmm4,%xmm13
+ paddd %xmm5,%xmm9
+ pxor %xmm2,%xmm7
+
+ paddd %xmm5,%xmm13
+ paddd %xmm7,%xmm13
+ movdqa 64-128(%rax),%xmm5
+ paddd 192-128(%rax),%xmm6
+
+ movdqa %xmm5,%xmm7
+ movdqa %xmm5,%xmm1
+ psrld $3,%xmm7
+ movdqa %xmm5,%xmm2
+
+ psrld $7,%xmm1
+ movdqa 16-128(%rax),%xmm0
+ pslld $14,%xmm2
+ pxor %xmm1,%xmm7
+ psrld $18-7,%xmm1
+ movdqa %xmm0,%xmm4
+ pxor %xmm2,%xmm7
+ pslld $25-14,%xmm2
+ pxor %xmm1,%xmm7
+ psrld $10,%xmm0
+ movdqa %xmm4,%xmm1
+
+ psrld $17,%xmm4
+ pxor %xmm2,%xmm7
+ pslld $13,%xmm1
+ paddd %xmm7,%xmm6
+ pxor %xmm4,%xmm0
+ psrld $19-17,%xmm4
+ pxor %xmm1,%xmm0
+ pslld $15-13,%xmm1
+ pxor %xmm4,%xmm0
+ pxor %xmm1,%xmm0
+ paddd %xmm0,%xmm6
+ movdqa %xmm9,%xmm7
+
+ movdqa %xmm9,%xmm2
+
+ psrld $6,%xmm7
+ movdqa %xmm9,%xmm1
+ pslld $7,%xmm2
+ movdqa %xmm6,48-128(%rax)
+ paddd %xmm12,%xmm6
+
+ psrld $11,%xmm1
+ pxor %xmm2,%xmm7
+ pslld $21-7,%xmm2
+ paddd -32(%rbp),%xmm6
+ pxor %xmm1,%xmm7
+
+ psrld $25-11,%xmm1
+ movdqa %xmm9,%xmm0
+
+ pxor %xmm2,%xmm7
+ movdqa %xmm9,%xmm4
+ pslld $26-21,%xmm2
+ pandn %xmm11,%xmm0
+ pand %xmm10,%xmm4
+ pxor %xmm1,%xmm7
+
+
+ movdqa %xmm13,%xmm1
+ pxor %xmm2,%xmm7
+ movdqa %xmm13,%xmm2
+ psrld $2,%xmm1
+ paddd %xmm7,%xmm6
+ pxor %xmm4,%xmm0
+ movdqa %xmm14,%xmm4
+ movdqa %xmm13,%xmm7
+ pslld $10,%xmm2
+ pxor %xmm13,%xmm4
+
+
+ psrld $13,%xmm7
+ pxor %xmm2,%xmm1
+ paddd %xmm0,%xmm6
+ pslld $19-10,%xmm2
+ pand %xmm4,%xmm3
+ pxor %xmm7,%xmm1
+
+
+ psrld $22-13,%xmm7
+ pxor %xmm2,%xmm1
+ movdqa %xmm14,%xmm12
+ pslld $30-19,%xmm2
+ pxor %xmm1,%xmm7
+ pxor %xmm3,%xmm12
+ paddd %xmm6,%xmm8
+ pxor %xmm2,%xmm7
+
+ paddd %xmm6,%xmm12
+ paddd %xmm7,%xmm12
+ movdqa 80-128(%rax),%xmm6
+ paddd 208-128(%rax),%xmm5
+
+ movdqa %xmm6,%xmm7
+ movdqa %xmm6,%xmm1
+ psrld $3,%xmm7
+ movdqa %xmm6,%xmm2
+
+ psrld $7,%xmm1
+ movdqa 32-128(%rax),%xmm0
+ pslld $14,%xmm2
+ pxor %xmm1,%xmm7
+ psrld $18-7,%xmm1
+ movdqa %xmm0,%xmm3
+ pxor %xmm2,%xmm7
+ pslld $25-14,%xmm2
+ pxor %xmm1,%xmm7
+ psrld $10,%xmm0
+ movdqa %xmm3,%xmm1
+
+ psrld $17,%xmm3
+ pxor %xmm2,%xmm7
+ pslld $13,%xmm1
+ paddd %xmm7,%xmm5
+ pxor %xmm3,%xmm0
+ psrld $19-17,%xmm3
+ pxor %xmm1,%xmm0
+ pslld $15-13,%xmm1
+ pxor %xmm3,%xmm0
+ pxor %xmm1,%xmm0
+ paddd %xmm0,%xmm5
+ movdqa %xmm8,%xmm7
+
+ movdqa %xmm8,%xmm2
+
+ psrld $6,%xmm7
+ movdqa %xmm8,%xmm1
+ pslld $7,%xmm2
+ movdqa %xmm5,64-128(%rax)
+ paddd %xmm11,%xmm5
+
+ psrld $11,%xmm1
+ pxor %xmm2,%xmm7
+ pslld $21-7,%xmm2
+ paddd 0(%rbp),%xmm5
+ pxor %xmm1,%xmm7
+
+ psrld $25-11,%xmm1
+ movdqa %xmm8,%xmm0
+
+ pxor %xmm2,%xmm7
+ movdqa %xmm8,%xmm3
+ pslld $26-21,%xmm2
+ pandn %xmm10,%xmm0
+ pand %xmm9,%xmm3
+ pxor %xmm1,%xmm7
+
+
+ movdqa %xmm12,%xmm1
+ pxor %xmm2,%xmm7
+ movdqa %xmm12,%xmm2
+ psrld $2,%xmm1
+ paddd %xmm7,%xmm5
+ pxor %xmm3,%xmm0
+ movdqa %xmm13,%xmm3
+ movdqa %xmm12,%xmm7
+ pslld $10,%xmm2
+ pxor %xmm12,%xmm3
+
+
+ psrld $13,%xmm7
+ pxor %xmm2,%xmm1
+ paddd %xmm0,%xmm5
+ pslld $19-10,%xmm2
+ pand %xmm3,%xmm4
+ pxor %xmm7,%xmm1
+
+
+ psrld $22-13,%xmm7
+ pxor %xmm2,%xmm1
+ movdqa %xmm13,%xmm11
+ pslld $30-19,%xmm2
+ pxor %xmm1,%xmm7
+ pxor %xmm4,%xmm11
+ paddd %xmm5,%xmm15
+ pxor %xmm2,%xmm7
+
+ paddd %xmm5,%xmm11
+ paddd %xmm7,%xmm11
+ movdqa 96-128(%rax),%xmm5
+ paddd 224-128(%rax),%xmm6
+
+ movdqa %xmm5,%xmm7
+ movdqa %xmm5,%xmm1
+ psrld $3,%xmm7
+ movdqa %xmm5,%xmm2
+
+ psrld $7,%xmm1
+ movdqa 48-128(%rax),%xmm0
+ pslld $14,%xmm2
+ pxor %xmm1,%xmm7
+ psrld $18-7,%xmm1
+ movdqa %xmm0,%xmm4
+ pxor %xmm2,%xmm7
+ pslld $25-14,%xmm2
+ pxor %xmm1,%xmm7
+ psrld $10,%xmm0
+ movdqa %xmm4,%xmm1
+
+ psrld $17,%xmm4
+ pxor %xmm2,%xmm7
+ pslld $13,%xmm1
+ paddd %xmm7,%xmm6
+ pxor %xmm4,%xmm0
+ psrld $19-17,%xmm4
+ pxor %xmm1,%xmm0
+ pslld $15-13,%xmm1
+ pxor %xmm4,%xmm0
+ pxor %xmm1,%xmm0
+ paddd %xmm0,%xmm6
+ movdqa %xmm15,%xmm7
+
+ movdqa %xmm15,%xmm2
+
+ psrld $6,%xmm7
+ movdqa %xmm15,%xmm1
+ pslld $7,%xmm2
+ movdqa %xmm6,80-128(%rax)
+ paddd %xmm10,%xmm6
+
+ psrld $11,%xmm1
+ pxor %xmm2,%xmm7
+ pslld $21-7,%xmm2
+ paddd 32(%rbp),%xmm6
+ pxor %xmm1,%xmm7
+
+ psrld $25-11,%xmm1
+ movdqa %xmm15,%xmm0
+
+ pxor %xmm2,%xmm7
+ movdqa %xmm15,%xmm4
+ pslld $26-21,%xmm2
+ pandn %xmm9,%xmm0
+ pand %xmm8,%xmm4
+ pxor %xmm1,%xmm7
+
+
+ movdqa %xmm11,%xmm1
+ pxor %xmm2,%xmm7
+ movdqa %xmm11,%xmm2
+ psrld $2,%xmm1
+ paddd %xmm7,%xmm6
+ pxor %xmm4,%xmm0
+ movdqa %xmm12,%xmm4
+ movdqa %xmm11,%xmm7
+ pslld $10,%xmm2
+ pxor %xmm11,%xmm4
+
+
+ psrld $13,%xmm7
+ pxor %xmm2,%xmm1
+ paddd %xmm0,%xmm6
+ pslld $19-10,%xmm2
+ pand %xmm4,%xmm3
+ pxor %xmm7,%xmm1
+
+
+ psrld $22-13,%xmm7
+ pxor %xmm2,%xmm1
+ movdqa %xmm12,%xmm10
+ pslld $30-19,%xmm2
+ pxor %xmm1,%xmm7
+ pxor %xmm3,%xmm10
+ paddd %xmm6,%xmm14
+ pxor %xmm2,%xmm7
+
+ paddd %xmm6,%xmm10
+ paddd %xmm7,%xmm10
+ movdqa 112-128(%rax),%xmm6
+ paddd 240-128(%rax),%xmm5
+
+ movdqa %xmm6,%xmm7
+ movdqa %xmm6,%xmm1
+ psrld $3,%xmm7
+ movdqa %xmm6,%xmm2
+
+ psrld $7,%xmm1
+ movdqa 64-128(%rax),%xmm0
+ pslld $14,%xmm2
+ pxor %xmm1,%xmm7
+ psrld $18-7,%xmm1
+ movdqa %xmm0,%xmm3
+ pxor %xmm2,%xmm7
+ pslld $25-14,%xmm2
+ pxor %xmm1,%xmm7
+ psrld $10,%xmm0
+ movdqa %xmm3,%xmm1
+
+ psrld $17,%xmm3
+ pxor %xmm2,%xmm7
+ pslld $13,%xmm1
+ paddd %xmm7,%xmm5
+ pxor %xmm3,%xmm0
+ psrld $19-17,%xmm3
+ pxor %xmm1,%xmm0
+ pslld $15-13,%xmm1
+ pxor %xmm3,%xmm0
+ pxor %xmm1,%xmm0
+ paddd %xmm0,%xmm5
+ movdqa %xmm14,%xmm7
+
+ movdqa %xmm14,%xmm2
+
+ psrld $6,%xmm7
+ movdqa %xmm14,%xmm1
+ pslld $7,%xmm2
+ movdqa %xmm5,96-128(%rax)
+ paddd %xmm9,%xmm5
+
+ psrld $11,%xmm1
+ pxor %xmm2,%xmm7
+ pslld $21-7,%xmm2
+ paddd 64(%rbp),%xmm5
+ pxor %xmm1,%xmm7
+
+ psrld $25-11,%xmm1
+ movdqa %xmm14,%xmm0
+
+ pxor %xmm2,%xmm7
+ movdqa %xmm14,%xmm3
+ pslld $26-21,%xmm2
+ pandn %xmm8,%xmm0
+ pand %xmm15,%xmm3
+ pxor %xmm1,%xmm7
+
+
+ movdqa %xmm10,%xmm1
+ pxor %xmm2,%xmm7
+ movdqa %xmm10,%xmm2
+ psrld $2,%xmm1
+ paddd %xmm7,%xmm5
+ pxor %xmm3,%xmm0
+ movdqa %xmm11,%xmm3
+ movdqa %xmm10,%xmm7
+ pslld $10,%xmm2
+ pxor %xmm10,%xmm3
+
+
+ psrld $13,%xmm7
+ pxor %xmm2,%xmm1
+ paddd %xmm0,%xmm5
+ pslld $19-10,%xmm2
+ pand %xmm3,%xmm4
+ pxor %xmm7,%xmm1
+
+
+ psrld $22-13,%xmm7
+ pxor %xmm2,%xmm1
+ movdqa %xmm11,%xmm9
+ pslld $30-19,%xmm2
+ pxor %xmm1,%xmm7
+ pxor %xmm4,%xmm9
+ paddd %xmm5,%xmm13
+ pxor %xmm2,%xmm7
+
+ paddd %xmm5,%xmm9
+ paddd %xmm7,%xmm9
+ movdqa 128-128(%rax),%xmm5
+ paddd 0-128(%rax),%xmm6
+
+ movdqa %xmm5,%xmm7
+ movdqa %xmm5,%xmm1
+ psrld $3,%xmm7
+ movdqa %xmm5,%xmm2
+
+ psrld $7,%xmm1
+ movdqa 80-128(%rax),%xmm0
+ pslld $14,%xmm2
+ pxor %xmm1,%xmm7
+ psrld $18-7,%xmm1
+ movdqa %xmm0,%xmm4
+ pxor %xmm2,%xmm7
+ pslld $25-14,%xmm2
+ pxor %xmm1,%xmm7
+ psrld $10,%xmm0
+ movdqa %xmm4,%xmm1
+
+ psrld $17,%xmm4
+ pxor %xmm2,%xmm7
+ pslld $13,%xmm1
+ paddd %xmm7,%xmm6
+ pxor %xmm4,%xmm0
+ psrld $19-17,%xmm4
+ pxor %xmm1,%xmm0
+ pslld $15-13,%xmm1
+ pxor %xmm4,%xmm0
+ pxor %xmm1,%xmm0
+ paddd %xmm0,%xmm6
+ movdqa %xmm13,%xmm7
+
+ movdqa %xmm13,%xmm2
+
+ psrld $6,%xmm7
+ movdqa %xmm13,%xmm1
+ pslld $7,%xmm2
+ movdqa %xmm6,112-128(%rax)
+ paddd %xmm8,%xmm6
+
+ psrld $11,%xmm1
+ pxor %xmm2,%xmm7
+ pslld $21-7,%xmm2
+ paddd 96(%rbp),%xmm6
+ pxor %xmm1,%xmm7
+
+ psrld $25-11,%xmm1
+ movdqa %xmm13,%xmm0
+
+ pxor %xmm2,%xmm7
+ movdqa %xmm13,%xmm4
+ pslld $26-21,%xmm2
+ pandn %xmm15,%xmm0
+ pand %xmm14,%xmm4
+ pxor %xmm1,%xmm7
+
+
+ movdqa %xmm9,%xmm1
+ pxor %xmm2,%xmm7
+ movdqa %xmm9,%xmm2
+ psrld $2,%xmm1
+ paddd %xmm7,%xmm6
+ pxor %xmm4,%xmm0
+ movdqa %xmm10,%xmm4
+ movdqa %xmm9,%xmm7
+ pslld $10,%xmm2
+ pxor %xmm9,%xmm4
+
+
+ psrld $13,%xmm7
+ pxor %xmm2,%xmm1
+ paddd %xmm0,%xmm6
+ pslld $19-10,%xmm2
+ pand %xmm4,%xmm3
+ pxor %xmm7,%xmm1
+
+
+ psrld $22-13,%xmm7
+ pxor %xmm2,%xmm1
+ movdqa %xmm10,%xmm8
+ pslld $30-19,%xmm2
+ pxor %xmm1,%xmm7
+ pxor %xmm3,%xmm8
+ paddd %xmm6,%xmm12
+ pxor %xmm2,%xmm7
+
+ paddd %xmm6,%xmm8
+ paddd %xmm7,%xmm8
+ leaq 256(%rbp),%rbp
+ movdqa 144-128(%rax),%xmm6
+ paddd 16-128(%rax),%xmm5
+
+ movdqa %xmm6,%xmm7
+ movdqa %xmm6,%xmm1
+ psrld $3,%xmm7
+ movdqa %xmm6,%xmm2
+
+ psrld $7,%xmm1
+ movdqa 96-128(%rax),%xmm0
+ pslld $14,%xmm2
+ pxor %xmm1,%xmm7
+ psrld $18-7,%xmm1
+ movdqa %xmm0,%xmm3
+ pxor %xmm2,%xmm7
+ pslld $25-14,%xmm2
+ pxor %xmm1,%xmm7
+ psrld $10,%xmm0
+ movdqa %xmm3,%xmm1
+
+ psrld $17,%xmm3
+ pxor %xmm2,%xmm7
+ pslld $13,%xmm1
+ paddd %xmm7,%xmm5
+ pxor %xmm3,%xmm0
+ psrld $19-17,%xmm3
+ pxor %xmm1,%xmm0
+ pslld $15-13,%xmm1
+ pxor %xmm3,%xmm0
+ pxor %xmm1,%xmm0
+ paddd %xmm0,%xmm5
+ movdqa %xmm12,%xmm7
+
+ movdqa %xmm12,%xmm2
+
+ psrld $6,%xmm7
+ movdqa %xmm12,%xmm1
+ pslld $7,%xmm2
+ movdqa %xmm5,128-128(%rax)
+ paddd %xmm15,%xmm5
+
+ psrld $11,%xmm1
+ pxor %xmm2,%xmm7
+ pslld $21-7,%xmm2
+ paddd -128(%rbp),%xmm5
+ pxor %xmm1,%xmm7
+
+ psrld $25-11,%xmm1
+ movdqa %xmm12,%xmm0
+
+ pxor %xmm2,%xmm7
+ movdqa %xmm12,%xmm3
+ pslld $26-21,%xmm2
+ pandn %xmm14,%xmm0
+ pand %xmm13,%xmm3
+ pxor %xmm1,%xmm7
+
+
+ movdqa %xmm8,%xmm1
+ pxor %xmm2,%xmm7
+ movdqa %xmm8,%xmm2
+ psrld $2,%xmm1
+ paddd %xmm7,%xmm5
+ pxor %xmm3,%xmm0
+ movdqa %xmm9,%xmm3
+ movdqa %xmm8,%xmm7
+ pslld $10,%xmm2
+ pxor %xmm8,%xmm3
+
+
+ psrld $13,%xmm7
+ pxor %xmm2,%xmm1
+ paddd %xmm0,%xmm5
+ pslld $19-10,%xmm2
+ pand %xmm3,%xmm4
+ pxor %xmm7,%xmm1
+
+
+ psrld $22-13,%xmm7
+ pxor %xmm2,%xmm1
+ movdqa %xmm9,%xmm15
+ pslld $30-19,%xmm2
+ pxor %xmm1,%xmm7
+ pxor %xmm4,%xmm15
+ paddd %xmm5,%xmm11
+ pxor %xmm2,%xmm7
+
+ paddd %xmm5,%xmm15
+ paddd %xmm7,%xmm15
+ movdqa 160-128(%rax),%xmm5
+ paddd 32-128(%rax),%xmm6
+
+ movdqa %xmm5,%xmm7
+ movdqa %xmm5,%xmm1
+ psrld $3,%xmm7
+ movdqa %xmm5,%xmm2
+
+ psrld $7,%xmm1
+ movdqa 112-128(%rax),%xmm0
+ pslld $14,%xmm2
+ pxor %xmm1,%xmm7
+ psrld $18-7,%xmm1
+ movdqa %xmm0,%xmm4
+ pxor %xmm2,%xmm7
+ pslld $25-14,%xmm2
+ pxor %xmm1,%xmm7
+ psrld $10,%xmm0
+ movdqa %xmm4,%xmm1
+
+ psrld $17,%xmm4
+ pxor %xmm2,%xmm7
+ pslld $13,%xmm1
+ paddd %xmm7,%xmm6
+ pxor %xmm4,%xmm0
+ psrld $19-17,%xmm4
+ pxor %xmm1,%xmm0
+ pslld $15-13,%xmm1
+ pxor %xmm4,%xmm0
+ pxor %xmm1,%xmm0
+ paddd %xmm0,%xmm6
+ movdqa %xmm11,%xmm7
+
+ movdqa %xmm11,%xmm2
+
+ psrld $6,%xmm7
+ movdqa %xmm11,%xmm1
+ pslld $7,%xmm2
+ movdqa %xmm6,144-128(%rax)
+ paddd %xmm14,%xmm6
+
+ psrld $11,%xmm1
+ pxor %xmm2,%xmm7
+ pslld $21-7,%xmm2
+ paddd -96(%rbp),%xmm6
+ pxor %xmm1,%xmm7
+
+ psrld $25-11,%xmm1
+ movdqa %xmm11,%xmm0
+
+ pxor %xmm2,%xmm7
+ movdqa %xmm11,%xmm4
+ pslld $26-21,%xmm2
+ pandn %xmm13,%xmm0
+ pand %xmm12,%xmm4
+ pxor %xmm1,%xmm7
+
+
+ movdqa %xmm15,%xmm1
+ pxor %xmm2,%xmm7
+ movdqa %xmm15,%xmm2
+ psrld $2,%xmm1
+ paddd %xmm7,%xmm6
+ pxor %xmm4,%xmm0
+ movdqa %xmm8,%xmm4
+ movdqa %xmm15,%xmm7
+ pslld $10,%xmm2
+ pxor %xmm15,%xmm4
+
+
+ psrld $13,%xmm7
+ pxor %xmm2,%xmm1
+ paddd %xmm0,%xmm6
+ pslld $19-10,%xmm2
+ pand %xmm4,%xmm3
+ pxor %xmm7,%xmm1
+
+
+ psrld $22-13,%xmm7
+ pxor %xmm2,%xmm1
+ movdqa %xmm8,%xmm14
+ pslld $30-19,%xmm2
+ pxor %xmm1,%xmm7
+ pxor %xmm3,%xmm14
+ paddd %xmm6,%xmm10
+ pxor %xmm2,%xmm7
+
+ paddd %xmm6,%xmm14
+ paddd %xmm7,%xmm14
+ movdqa 176-128(%rax),%xmm6
+ paddd 48-128(%rax),%xmm5
+
+ movdqa %xmm6,%xmm7
+ movdqa %xmm6,%xmm1
+ psrld $3,%xmm7
+ movdqa %xmm6,%xmm2
+
+ psrld $7,%xmm1
+ movdqa 128-128(%rax),%xmm0
+ pslld $14,%xmm2
+ pxor %xmm1,%xmm7
+ psrld $18-7,%xmm1
+ movdqa %xmm0,%xmm3
+ pxor %xmm2,%xmm7
+ pslld $25-14,%xmm2
+ pxor %xmm1,%xmm7
+ psrld $10,%xmm0
+ movdqa %xmm3,%xmm1
+
+ psrld $17,%xmm3
+ pxor %xmm2,%xmm7
+ pslld $13,%xmm1
+ paddd %xmm7,%xmm5
+ pxor %xmm3,%xmm0
+ psrld $19-17,%xmm3
+ pxor %xmm1,%xmm0
+ pslld $15-13,%xmm1
+ pxor %xmm3,%xmm0
+ pxor %xmm1,%xmm0
+ paddd %xmm0,%xmm5
+ movdqa %xmm10,%xmm7
+
+ movdqa %xmm10,%xmm2
+
+ psrld $6,%xmm7
+ movdqa %xmm10,%xmm1
+ pslld $7,%xmm2
+ movdqa %xmm5,160-128(%rax)
+ paddd %xmm13,%xmm5
+
+ psrld $11,%xmm1
+ pxor %xmm2,%xmm7
+ pslld $21-7,%xmm2
+ paddd -64(%rbp),%xmm5
+ pxor %xmm1,%xmm7
+
+ psrld $25-11,%xmm1
+ movdqa %xmm10,%xmm0
+
+ pxor %xmm2,%xmm7
+ movdqa %xmm10,%xmm3
+ pslld $26-21,%xmm2
+ pandn %xmm12,%xmm0
+ pand %xmm11,%xmm3
+ pxor %xmm1,%xmm7
+
+
+ movdqa %xmm14,%xmm1
+ pxor %xmm2,%xmm7
+ movdqa %xmm14,%xmm2
+ psrld $2,%xmm1
+ paddd %xmm7,%xmm5
+ pxor %xmm3,%xmm0
+ movdqa %xmm15,%xmm3
+ movdqa %xmm14,%xmm7
+ pslld $10,%xmm2
+ pxor %xmm14,%xmm3
+
+
+ psrld $13,%xmm7
+ pxor %xmm2,%xmm1
+ paddd %xmm0,%xmm5
+ pslld $19-10,%xmm2
+ pand %xmm3,%xmm4
+ pxor %xmm7,%xmm1
+
+
+ psrld $22-13,%xmm7
+ pxor %xmm2,%xmm1
+ movdqa %xmm15,%xmm13
+ pslld $30-19,%xmm2
+ pxor %xmm1,%xmm7
+ pxor %xmm4,%xmm13
+ paddd %xmm5,%xmm9
+ pxor %xmm2,%xmm7
+
+ paddd %xmm5,%xmm13
+ paddd %xmm7,%xmm13
+ movdqa 192-128(%rax),%xmm5
+ paddd 64-128(%rax),%xmm6
+
+ movdqa %xmm5,%xmm7
+ movdqa %xmm5,%xmm1
+ psrld $3,%xmm7
+ movdqa %xmm5,%xmm2
+
+ psrld $7,%xmm1
+ movdqa 144-128(%rax),%xmm0
+ pslld $14,%xmm2
+ pxor %xmm1,%xmm7
+ psrld $18-7,%xmm1
+ movdqa %xmm0,%xmm4
+ pxor %xmm2,%xmm7
+ pslld $25-14,%xmm2
+ pxor %xmm1,%xmm7
+ psrld $10,%xmm0
+ movdqa %xmm4,%xmm1
+
+ psrld $17,%xmm4
+ pxor %xmm2,%xmm7
+ pslld $13,%xmm1
+ paddd %xmm7,%xmm6
+ pxor %xmm4,%xmm0
+ psrld $19-17,%xmm4
+ pxor %xmm1,%xmm0
+ pslld $15-13,%xmm1
+ pxor %xmm4,%xmm0
+ pxor %xmm1,%xmm0
+ paddd %xmm0,%xmm6
+ movdqa %xmm9,%xmm7
+
+ movdqa %xmm9,%xmm2
+
+ psrld $6,%xmm7
+ movdqa %xmm9,%xmm1
+ pslld $7,%xmm2
+ movdqa %xmm6,176-128(%rax)
+ paddd %xmm12,%xmm6
+
+ psrld $11,%xmm1
+ pxor %xmm2,%xmm7
+ pslld $21-7,%xmm2
+ paddd -32(%rbp),%xmm6
+ pxor %xmm1,%xmm7
+
+ psrld $25-11,%xmm1
+ movdqa %xmm9,%xmm0
+
+ pxor %xmm2,%xmm7
+ movdqa %xmm9,%xmm4
+ pslld $26-21,%xmm2
+ pandn %xmm11,%xmm0
+ pand %xmm10,%xmm4
+ pxor %xmm1,%xmm7
+
+
+ movdqa %xmm13,%xmm1
+ pxor %xmm2,%xmm7
+ movdqa %xmm13,%xmm2
+ psrld $2,%xmm1
+ paddd %xmm7,%xmm6
+ pxor %xmm4,%xmm0
+ movdqa %xmm14,%xmm4
+ movdqa %xmm13,%xmm7
+ pslld $10,%xmm2
+ pxor %xmm13,%xmm4
+
+
+ psrld $13,%xmm7
+ pxor %xmm2,%xmm1
+ paddd %xmm0,%xmm6
+ pslld $19-10,%xmm2
+ pand %xmm4,%xmm3
+ pxor %xmm7,%xmm1
+
+
+ psrld $22-13,%xmm7
+ pxor %xmm2,%xmm1
+ movdqa %xmm14,%xmm12
+ pslld $30-19,%xmm2
+ pxor %xmm1,%xmm7
+ pxor %xmm3,%xmm12
+ paddd %xmm6,%xmm8
+ pxor %xmm2,%xmm7
+
+ paddd %xmm6,%xmm12
+ paddd %xmm7,%xmm12
+ movdqa 208-128(%rax),%xmm6
+ paddd 80-128(%rax),%xmm5
+
+ movdqa %xmm6,%xmm7
+ movdqa %xmm6,%xmm1
+ psrld $3,%xmm7
+ movdqa %xmm6,%xmm2
+
+ psrld $7,%xmm1
+ movdqa 160-128(%rax),%xmm0
+ pslld $14,%xmm2
+ pxor %xmm1,%xmm7
+ psrld $18-7,%xmm1
+ movdqa %xmm0,%xmm3
+ pxor %xmm2,%xmm7
+ pslld $25-14,%xmm2
+ pxor %xmm1,%xmm7
+ psrld $10,%xmm0
+ movdqa %xmm3,%xmm1
+
+ psrld $17,%xmm3
+ pxor %xmm2,%xmm7
+ pslld $13,%xmm1
+ paddd %xmm7,%xmm5
+ pxor %xmm3,%xmm0
+ psrld $19-17,%xmm3
+ pxor %xmm1,%xmm0
+ pslld $15-13,%xmm1
+ pxor %xmm3,%xmm0
+ pxor %xmm1,%xmm0
+ paddd %xmm0,%xmm5
+ movdqa %xmm8,%xmm7
+
+ movdqa %xmm8,%xmm2
+
+ psrld $6,%xmm7
+ movdqa %xmm8,%xmm1
+ pslld $7,%xmm2
+ movdqa %xmm5,192-128(%rax)
+ paddd %xmm11,%xmm5
+
+ psrld $11,%xmm1
+ pxor %xmm2,%xmm7
+ pslld $21-7,%xmm2
+ paddd 0(%rbp),%xmm5
+ pxor %xmm1,%xmm7
+
+ psrld $25-11,%xmm1
+ movdqa %xmm8,%xmm0
+
+ pxor %xmm2,%xmm7
+ movdqa %xmm8,%xmm3
+ pslld $26-21,%xmm2
+ pandn %xmm10,%xmm0
+ pand %xmm9,%xmm3
+ pxor %xmm1,%xmm7
+
+
+ movdqa %xmm12,%xmm1
+ pxor %xmm2,%xmm7
+ movdqa %xmm12,%xmm2
+ psrld $2,%xmm1
+ paddd %xmm7,%xmm5
+ pxor %xmm3,%xmm0
+ movdqa %xmm13,%xmm3
+ movdqa %xmm12,%xmm7
+ pslld $10,%xmm2
+ pxor %xmm12,%xmm3
+
+
+ psrld $13,%xmm7
+ pxor %xmm2,%xmm1
+ paddd %xmm0,%xmm5
+ pslld $19-10,%xmm2
+ pand %xmm3,%xmm4
+ pxor %xmm7,%xmm1
+
+
+ psrld $22-13,%xmm7
+ pxor %xmm2,%xmm1
+ movdqa %xmm13,%xmm11
+ pslld $30-19,%xmm2
+ pxor %xmm1,%xmm7
+ pxor %xmm4,%xmm11
+ paddd %xmm5,%xmm15
+ pxor %xmm2,%xmm7
+
+ paddd %xmm5,%xmm11
+ paddd %xmm7,%xmm11
+ movdqa 224-128(%rax),%xmm5
+ paddd 96-128(%rax),%xmm6
+
+ movdqa %xmm5,%xmm7
+ movdqa %xmm5,%xmm1
+ psrld $3,%xmm7
+ movdqa %xmm5,%xmm2
+
+ psrld $7,%xmm1
+ movdqa 176-128(%rax),%xmm0
+ pslld $14,%xmm2
+ pxor %xmm1,%xmm7
+ psrld $18-7,%xmm1
+ movdqa %xmm0,%xmm4
+ pxor %xmm2,%xmm7
+ pslld $25-14,%xmm2
+ pxor %xmm1,%xmm7
+ psrld $10,%xmm0
+ movdqa %xmm4,%xmm1
+
+ psrld $17,%xmm4
+ pxor %xmm2,%xmm7
+ pslld $13,%xmm1
+ paddd %xmm7,%xmm6
+ pxor %xmm4,%xmm0
+ psrld $19-17,%xmm4
+ pxor %xmm1,%xmm0
+ pslld $15-13,%xmm1
+ pxor %xmm4,%xmm0
+ pxor %xmm1,%xmm0
+ paddd %xmm0,%xmm6
+ movdqa %xmm15,%xmm7
+
+ movdqa %xmm15,%xmm2
+
+ psrld $6,%xmm7
+ movdqa %xmm15,%xmm1
+ pslld $7,%xmm2
+ movdqa %xmm6,208-128(%rax)
+ paddd %xmm10,%xmm6
+
+ psrld $11,%xmm1
+ pxor %xmm2,%xmm7
+ pslld $21-7,%xmm2
+ paddd 32(%rbp),%xmm6
+ pxor %xmm1,%xmm7
+
+ psrld $25-11,%xmm1
+ movdqa %xmm15,%xmm0
+
+ pxor %xmm2,%xmm7
+ movdqa %xmm15,%xmm4
+ pslld $26-21,%xmm2
+ pandn %xmm9,%xmm0
+ pand %xmm8,%xmm4
+ pxor %xmm1,%xmm7
+
+
+ movdqa %xmm11,%xmm1
+ pxor %xmm2,%xmm7
+ movdqa %xmm11,%xmm2
+ psrld $2,%xmm1
+ paddd %xmm7,%xmm6
+ pxor %xmm4,%xmm0
+ movdqa %xmm12,%xmm4
+ movdqa %xmm11,%xmm7
+ pslld $10,%xmm2
+ pxor %xmm11,%xmm4
+
+
+ psrld $13,%xmm7
+ pxor %xmm2,%xmm1
+ paddd %xmm0,%xmm6
+ pslld $19-10,%xmm2
+ pand %xmm4,%xmm3
+ pxor %xmm7,%xmm1
+
+
+ psrld $22-13,%xmm7
+ pxor %xmm2,%xmm1
+ movdqa %xmm12,%xmm10
+ pslld $30-19,%xmm2
+ pxor %xmm1,%xmm7
+ pxor %xmm3,%xmm10
+ paddd %xmm6,%xmm14
+ pxor %xmm2,%xmm7
+
+ paddd %xmm6,%xmm10
+ paddd %xmm7,%xmm10
+ movdqa 240-128(%rax),%xmm6
+ paddd 112-128(%rax),%xmm5
+
+ movdqa %xmm6,%xmm7
+ movdqa %xmm6,%xmm1
+ psrld $3,%xmm7
+ movdqa %xmm6,%xmm2
+
+ psrld $7,%xmm1
+ movdqa 192-128(%rax),%xmm0
+ pslld $14,%xmm2
+ pxor %xmm1,%xmm7
+ psrld $18-7,%xmm1
+ movdqa %xmm0,%xmm3
+ pxor %xmm2,%xmm7
+ pslld $25-14,%xmm2
+ pxor %xmm1,%xmm7
+ psrld $10,%xmm0
+ movdqa %xmm3,%xmm1
+
+ psrld $17,%xmm3
+ pxor %xmm2,%xmm7
+ pslld $13,%xmm1
+ paddd %xmm7,%xmm5
+ pxor %xmm3,%xmm0
+ psrld $19-17,%xmm3
+ pxor %xmm1,%xmm0
+ pslld $15-13,%xmm1
+ pxor %xmm3,%xmm0
+ pxor %xmm1,%xmm0
+ paddd %xmm0,%xmm5
+ movdqa %xmm14,%xmm7
+
+ movdqa %xmm14,%xmm2
+
+ psrld $6,%xmm7
+ movdqa %xmm14,%xmm1
+ pslld $7,%xmm2
+ movdqa %xmm5,224-128(%rax)
+ paddd %xmm9,%xmm5
+
+ psrld $11,%xmm1
+ pxor %xmm2,%xmm7
+ pslld $21-7,%xmm2
+ paddd 64(%rbp),%xmm5
+ pxor %xmm1,%xmm7
+
+ psrld $25-11,%xmm1
+ movdqa %xmm14,%xmm0
+
+ pxor %xmm2,%xmm7
+ movdqa %xmm14,%xmm3
+ pslld $26-21,%xmm2
+ pandn %xmm8,%xmm0
+ pand %xmm15,%xmm3
+ pxor %xmm1,%xmm7
+
+
+ movdqa %xmm10,%xmm1
+ pxor %xmm2,%xmm7
+ movdqa %xmm10,%xmm2
+ psrld $2,%xmm1
+ paddd %xmm7,%xmm5
+ pxor %xmm3,%xmm0
+ movdqa %xmm11,%xmm3
+ movdqa %xmm10,%xmm7
+ pslld $10,%xmm2
+ pxor %xmm10,%xmm3
+
+
+ psrld $13,%xmm7
+ pxor %xmm2,%xmm1
+ paddd %xmm0,%xmm5
+ pslld $19-10,%xmm2
+ pand %xmm3,%xmm4
+ pxor %xmm7,%xmm1
+
+
+ psrld $22-13,%xmm7
+ pxor %xmm2,%xmm1
+ movdqa %xmm11,%xmm9
+ pslld $30-19,%xmm2
+ pxor %xmm1,%xmm7
+ pxor %xmm4,%xmm9
+ paddd %xmm5,%xmm13
+ pxor %xmm2,%xmm7
+
+ paddd %xmm5,%xmm9
+ paddd %xmm7,%xmm9
+ movdqa 0-128(%rax),%xmm5
+ paddd 128-128(%rax),%xmm6
+
+ movdqa %xmm5,%xmm7
+ movdqa %xmm5,%xmm1
+ psrld $3,%xmm7
+ movdqa %xmm5,%xmm2
+
+ psrld $7,%xmm1
+ movdqa 208-128(%rax),%xmm0
+ pslld $14,%xmm2
+ pxor %xmm1,%xmm7
+ psrld $18-7,%xmm1
+ movdqa %xmm0,%xmm4
+ pxor %xmm2,%xmm7
+ pslld $25-14,%xmm2
+ pxor %xmm1,%xmm7
+ psrld $10,%xmm0
+ movdqa %xmm4,%xmm1
+
+ psrld $17,%xmm4
+ pxor %xmm2,%xmm7
+ pslld $13,%xmm1
+ paddd %xmm7,%xmm6
+ pxor %xmm4,%xmm0
+ psrld $19-17,%xmm4
+ pxor %xmm1,%xmm0
+ pslld $15-13,%xmm1
+ pxor %xmm4,%xmm0
+ pxor %xmm1,%xmm0
+ paddd %xmm0,%xmm6
+ movdqa %xmm13,%xmm7
+
+ movdqa %xmm13,%xmm2
+
+ psrld $6,%xmm7
+ movdqa %xmm13,%xmm1
+ pslld $7,%xmm2
+ movdqa %xmm6,240-128(%rax)
+ paddd %xmm8,%xmm6
+
+ psrld $11,%xmm1
+ pxor %xmm2,%xmm7
+ pslld $21-7,%xmm2
+ paddd 96(%rbp),%xmm6
+ pxor %xmm1,%xmm7
+
+ psrld $25-11,%xmm1
+ movdqa %xmm13,%xmm0
+
+ pxor %xmm2,%xmm7
+ movdqa %xmm13,%xmm4
+ pslld $26-21,%xmm2
+ pandn %xmm15,%xmm0
+ pand %xmm14,%xmm4
+ pxor %xmm1,%xmm7
+
+
+ movdqa %xmm9,%xmm1
+ pxor %xmm2,%xmm7
+ movdqa %xmm9,%xmm2
+ psrld $2,%xmm1
+ paddd %xmm7,%xmm6
+ pxor %xmm4,%xmm0
+ movdqa %xmm10,%xmm4
+ movdqa %xmm9,%xmm7
+ pslld $10,%xmm2
+ pxor %xmm9,%xmm4
+
+
+ psrld $13,%xmm7
+ pxor %xmm2,%xmm1
+ paddd %xmm0,%xmm6
+ pslld $19-10,%xmm2
+ pand %xmm4,%xmm3
+ pxor %xmm7,%xmm1
+
+
+ psrld $22-13,%xmm7
+ pxor %xmm2,%xmm1
+ movdqa %xmm10,%xmm8
+ pslld $30-19,%xmm2
+ pxor %xmm1,%xmm7
+ pxor %xmm3,%xmm8
+ paddd %xmm6,%xmm12
+ pxor %xmm2,%xmm7
+
+ paddd %xmm6,%xmm8
+ paddd %xmm7,%xmm8
+ leaq 256(%rbp),%rbp
+ decl %ecx
+ jnz .Loop_16_xx
+
+ movl $1,%ecx
+ leaq K256+128(%rip),%rbp
+
+ movdqa (%rbx),%xmm7
+ cmpl 0(%rbx),%ecx
+ pxor %xmm0,%xmm0
+ cmovgeq %rbp,%r8
+ cmpl 4(%rbx),%ecx
+ movdqa %xmm7,%xmm6
+ cmovgeq %rbp,%r9
+ cmpl 8(%rbx),%ecx
+ pcmpgtd %xmm0,%xmm6
+ cmovgeq %rbp,%r10
+ cmpl 12(%rbx),%ecx
+ paddd %xmm6,%xmm7
+ cmovgeq %rbp,%r11
+
+ movdqu 0-128(%rdi),%xmm0
+ pand %xmm6,%xmm8
+ movdqu 32-128(%rdi),%xmm1
+ pand %xmm6,%xmm9
+ movdqu 64-128(%rdi),%xmm2
+ pand %xmm6,%xmm10
+ movdqu 96-128(%rdi),%xmm5
+ pand %xmm6,%xmm11
+ paddd %xmm0,%xmm8
+ movdqu 128-128(%rdi),%xmm0
+ pand %xmm6,%xmm12
+ paddd %xmm1,%xmm9
+ movdqu 160-128(%rdi),%xmm1
+ pand %xmm6,%xmm13
+ paddd %xmm2,%xmm10
+ movdqu 192-128(%rdi),%xmm2
+ pand %xmm6,%xmm14
+ paddd %xmm5,%xmm11
+ movdqu 224-128(%rdi),%xmm5
+ pand %xmm6,%xmm15
+ paddd %xmm0,%xmm12
+ paddd %xmm1,%xmm13
+ movdqu %xmm8,0-128(%rdi)
+ paddd %xmm2,%xmm14
+ movdqu %xmm9,32-128(%rdi)
+ paddd %xmm5,%xmm15
+ movdqu %xmm10,64-128(%rdi)
+ movdqu %xmm11,96-128(%rdi)
+ movdqu %xmm12,128-128(%rdi)
+ movdqu %xmm13,160-128(%rdi)
+ movdqu %xmm14,192-128(%rdi)
+ movdqu %xmm15,224-128(%rdi)
+
+ movdqa %xmm7,(%rbx)
+ movdqa .Lpbswap(%rip),%xmm6
+ decl %edx
+ jnz .Loop
+
+ movl 280(%rsp),%edx
+ leaq 16(%rdi),%rdi
+ leaq 64(%rsi),%rsi
+ decl %edx
+ jnz .Loop_grande
+
+.Ldone:
+ movq 272(%rsp),%rax
+ movq -16(%rax),%rbp
+ movq -8(%rax),%rbx
+ leaq (%rax),%rsp
+.Lepilogue:
+ .byte 0xf3,0xc3
+.size sha256_multi_block,.-sha256_multi_block
+.type sha256_multi_block_shaext,@function
+.align 32
+sha256_multi_block_shaext:
+_shaext_shortcut:
+ movq %rsp,%rax
+ pushq %rbx
+ pushq %rbp
+ subq $288,%rsp
+ shll $1,%edx
+ andq $-256,%rsp
+ leaq 128(%rdi),%rdi
+ movq %rax,272(%rsp)
+.Lbody_shaext:
+ leaq 256(%rsp),%rbx
+ leaq K256_shaext+128(%rip),%rbp
+
+.Loop_grande_shaext:
+ movl %edx,280(%rsp)
+ xorl %edx,%edx
+ movq 0(%rsi),%r8
+ movl 8(%rsi),%ecx
+ cmpl %edx,%ecx
+ cmovgl %ecx,%edx
+ testl %ecx,%ecx
+ movl %ecx,0(%rbx)
+ cmovleq %rsp,%r8
+ movq 16(%rsi),%r9
+ movl 24(%rsi),%ecx
+ cmpl %edx,%ecx
+ cmovgl %ecx,%edx
+ testl %ecx,%ecx
+ movl %ecx,4(%rbx)
+ cmovleq %rsp,%r9
+ testl %edx,%edx
+ jz .Ldone_shaext
+
+ movq 0-128(%rdi),%xmm12
+ movq 32-128(%rdi),%xmm4
+ movq 64-128(%rdi),%xmm13
+ movq 96-128(%rdi),%xmm5
+ movq 128-128(%rdi),%xmm8
+ movq 160-128(%rdi),%xmm9
+ movq 192-128(%rdi),%xmm10
+ movq 224-128(%rdi),%xmm11
+
+ punpckldq %xmm4,%xmm12
+ punpckldq %xmm5,%xmm13
+ punpckldq %xmm9,%xmm8
+ punpckldq %xmm11,%xmm10
+ movdqa K256_shaext-16(%rip),%xmm3
+
+ movdqa %xmm12,%xmm14
+ movdqa %xmm13,%xmm15
+ punpcklqdq %xmm8,%xmm12
+ punpcklqdq %xmm10,%xmm13
+ punpckhqdq %xmm8,%xmm14
+ punpckhqdq %xmm10,%xmm15
+
+ pshufd $27,%xmm12,%xmm12
+ pshufd $27,%xmm13,%xmm13
+ pshufd $27,%xmm14,%xmm14
+ pshufd $27,%xmm15,%xmm15
+ jmp .Loop_shaext
+
+.align 32
+.Loop_shaext:
+ movdqu 0(%r8),%xmm4
+ movdqu 0(%r9),%xmm8
+ movdqu 16(%r8),%xmm5
+ movdqu 16(%r9),%xmm9
+ movdqu 32(%r8),%xmm6
+.byte 102,15,56,0,227
+ movdqu 32(%r9),%xmm10
+.byte 102,68,15,56,0,195
+ movdqu 48(%r8),%xmm7
+ leaq 64(%r8),%r8
+ movdqu 48(%r9),%xmm11
+ leaq 64(%r9),%r9
+
+ movdqa 0-128(%rbp),%xmm0
+.byte 102,15,56,0,235
+ paddd %xmm4,%xmm0
+ pxor %xmm12,%xmm4
+ movdqa %xmm0,%xmm1
+ movdqa 0-128(%rbp),%xmm2
+.byte 102,68,15,56,0,203
+ paddd %xmm8,%xmm2
+ movdqa %xmm13,80(%rsp)
+.byte 69,15,56,203,236
+ pxor %xmm14,%xmm8
+ movdqa %xmm2,%xmm0
+ movdqa %xmm15,112(%rsp)
+.byte 69,15,56,203,254
+ pshufd $14,%xmm1,%xmm0
+ pxor %xmm12,%xmm4
+ movdqa %xmm12,64(%rsp)
+.byte 69,15,56,203,229
+ pshufd $14,%xmm2,%xmm0
+ pxor %xmm14,%xmm8
+ movdqa %xmm14,96(%rsp)
+ movdqa 16-128(%rbp),%xmm1
+ paddd %xmm5,%xmm1
+.byte 102,15,56,0,243
+.byte 69,15,56,203,247
+
+ movdqa %xmm1,%xmm0
+ movdqa 16-128(%rbp),%xmm2
+ paddd %xmm9,%xmm2
+.byte 69,15,56,203,236
+ movdqa %xmm2,%xmm0
+ prefetcht0 127(%r8)
+.byte 102,15,56,0,251
+.byte 102,68,15,56,0,211
+ prefetcht0 127(%r9)
+.byte 69,15,56,203,254
+ pshufd $14,%xmm1,%xmm0
+.byte 102,68,15,56,0,219
+.byte 15,56,204,229
+.byte 69,15,56,203,229
+ pshufd $14,%xmm2,%xmm0
+ movdqa 32-128(%rbp),%xmm1
+ paddd %xmm6,%xmm1
+.byte 69,15,56,203,247
+
+ movdqa %xmm1,%xmm0
+ movdqa 32-128(%rbp),%xmm2
+ paddd %xmm10,%xmm2
+.byte 69,15,56,203,236
+.byte 69,15,56,204,193
+ movdqa %xmm2,%xmm0
+ movdqa %xmm7,%xmm3
+.byte 69,15,56,203,254
+ pshufd $14,%xmm1,%xmm0
+.byte 102,15,58,15,222,4
+ paddd %xmm3,%xmm4
+ movdqa %xmm11,%xmm3
+.byte 102,65,15,58,15,218,4
+.byte 15,56,204,238
+.byte 69,15,56,203,229
+ pshufd $14,%xmm2,%xmm0
+ movdqa 48-128(%rbp),%xmm1
+ paddd %xmm7,%xmm1
+.byte 69,15,56,203,247
+.byte 69,15,56,204,202
+
+ movdqa %xmm1,%xmm0
+ movdqa 48-128(%rbp),%xmm2
+ paddd %xmm3,%xmm8
+ paddd %xmm11,%xmm2
+.byte 15,56,205,231
+.byte 69,15,56,203,236
+ movdqa %xmm2,%xmm0
+ movdqa %xmm4,%xmm3
+.byte 102,15,58,15,223,4
+.byte 69,15,56,203,254
+.byte 69,15,56,205,195
+ pshufd $14,%xmm1,%xmm0
+ paddd %xmm3,%xmm5
+ movdqa %xmm8,%xmm3
+.byte 102,65,15,58,15,219,4
+.byte 15,56,204,247
+.byte 69,15,56,203,229
+ pshufd $14,%xmm2,%xmm0
+ movdqa 64-128(%rbp),%xmm1
+ paddd %xmm4,%xmm1
+.byte 69,15,56,203,247
+.byte 69,15,56,204,211
+ movdqa %xmm1,%xmm0
+ movdqa 64-128(%rbp),%xmm2
+ paddd %xmm3,%xmm9
+ paddd %xmm8,%xmm2
+.byte 15,56,205,236
+.byte 69,15,56,203,236
+ movdqa %xmm2,%xmm0
+ movdqa %xmm5,%xmm3
+.byte 102,15,58,15,220,4
+.byte 69,15,56,203,254
+.byte 69,15,56,205,200
+ pshufd $14,%xmm1,%xmm0
+ paddd %xmm3,%xmm6
+ movdqa %xmm9,%xmm3
+.byte 102,65,15,58,15,216,4
+.byte 15,56,204,252
+.byte 69,15,56,203,229
+ pshufd $14,%xmm2,%xmm0
+ movdqa 80-128(%rbp),%xmm1
+ paddd %xmm5,%xmm1
+.byte 69,15,56,203,247
+.byte 69,15,56,204,216
+ movdqa %xmm1,%xmm0
+ movdqa 80-128(%rbp),%xmm2
+ paddd %xmm3,%xmm10
+ paddd %xmm9,%xmm2
+.byte 15,56,205,245
+.byte 69,15,56,203,236
+ movdqa %xmm2,%xmm0
+ movdqa %xmm6,%xmm3
+.byte 102,15,58,15,221,4
+.byte 69,15,56,203,254
+.byte 69,15,56,205,209
+ pshufd $14,%xmm1,%xmm0
+ paddd %xmm3,%xmm7
+ movdqa %xmm10,%xmm3
+.byte 102,65,15,58,15,217,4
+.byte 15,56,204,229
+.byte 69,15,56,203,229
+ pshufd $14,%xmm2,%xmm0
+ movdqa 96-128(%rbp),%xmm1
+ paddd %xmm6,%xmm1
+.byte 69,15,56,203,247
+.byte 69,15,56,204,193
+ movdqa %xmm1,%xmm0
+ movdqa 96-128(%rbp),%xmm2
+ paddd %xmm3,%xmm11
+ paddd %xmm10,%xmm2
+.byte 15,56,205,254
+.byte 69,15,56,203,236
+ movdqa %xmm2,%xmm0
+ movdqa %xmm7,%xmm3
+.byte 102,15,58,15,222,4
+.byte 69,15,56,203,254
+.byte 69,15,56,205,218
+ pshufd $14,%xmm1,%xmm0
+ paddd %xmm3,%xmm4
+ movdqa %xmm11,%xmm3
+.byte 102,65,15,58,15,218,4
+.byte 15,56,204,238
+.byte 69,15,56,203,229
+ pshufd $14,%xmm2,%xmm0
+ movdqa 112-128(%rbp),%xmm1
+ paddd %xmm7,%xmm1
+.byte 69,15,56,203,247
+.byte 69,15,56,204,202
+ movdqa %xmm1,%xmm0
+ movdqa 112-128(%rbp),%xmm2
+ paddd %xmm3,%xmm8
+ paddd %xmm11,%xmm2
+.byte 15,56,205,231
+.byte 69,15,56,203,236
+ movdqa %xmm2,%xmm0
+ movdqa %xmm4,%xmm3
+.byte 102,15,58,15,223,4
+.byte 69,15,56,203,254
+.byte 69,15,56,205,195
+ pshufd $14,%xmm1,%xmm0
+ paddd %xmm3,%xmm5
+ movdqa %xmm8,%xmm3
+.byte 102,65,15,58,15,219,4
+.byte 15,56,204,247
+.byte 69,15,56,203,229
+ pshufd $14,%xmm2,%xmm0
+ movdqa 128-128(%rbp),%xmm1
+ paddd %xmm4,%xmm1
+.byte 69,15,56,203,247
+.byte 69,15,56,204,211
+ movdqa %xmm1,%xmm0
+ movdqa 128-128(%rbp),%xmm2
+ paddd %xmm3,%xmm9
+ paddd %xmm8,%xmm2
+.byte 15,56,205,236
+.byte 69,15,56,203,236
+ movdqa %xmm2,%xmm0
+ movdqa %xmm5,%xmm3
+.byte 102,15,58,15,220,4
+.byte 69,15,56,203,254
+.byte 69,15,56,205,200
+ pshufd $14,%xmm1,%xmm0
+ paddd %xmm3,%xmm6
+ movdqa %xmm9,%xmm3
+.byte 102,65,15,58,15,216,4
+.byte 15,56,204,252
+.byte 69,15,56,203,229
+ pshufd $14,%xmm2,%xmm0
+ movdqa 144-128(%rbp),%xmm1
+ paddd %xmm5,%xmm1
+.byte 69,15,56,203,247
+.byte 69,15,56,204,216
+ movdqa %xmm1,%xmm0
+ movdqa 144-128(%rbp),%xmm2
+ paddd %xmm3,%xmm10
+ paddd %xmm9,%xmm2
+.byte 15,56,205,245
+.byte 69,15,56,203,236
+ movdqa %xmm2,%xmm0
+ movdqa %xmm6,%xmm3
+.byte 102,15,58,15,221,4
+.byte 69,15,56,203,254
+.byte 69,15,56,205,209
+ pshufd $14,%xmm1,%xmm0
+ paddd %xmm3,%xmm7
+ movdqa %xmm10,%xmm3
+.byte 102,65,15,58,15,217,4
+.byte 15,56,204,229
+.byte 69,15,56,203,229
+ pshufd $14,%xmm2,%xmm0
+ movdqa 160-128(%rbp),%xmm1
+ paddd %xmm6,%xmm1
+.byte 69,15,56,203,247
+.byte 69,15,56,204,193
+ movdqa %xmm1,%xmm0
+ movdqa 160-128(%rbp),%xmm2
+ paddd %xmm3,%xmm11
+ paddd %xmm10,%xmm2
+.byte 15,56,205,254
+.byte 69,15,56,203,236
+ movdqa %xmm2,%xmm0
+ movdqa %xmm7,%xmm3
+.byte 102,15,58,15,222,4
+.byte 69,15,56,203,254
+.byte 69,15,56,205,218
+ pshufd $14,%xmm1,%xmm0
+ paddd %xmm3,%xmm4
+ movdqa %xmm11,%xmm3
+.byte 102,65,15,58,15,218,4
+.byte 15,56,204,238
+.byte 69,15,56,203,229
+ pshufd $14,%xmm2,%xmm0
+ movdqa 176-128(%rbp),%xmm1
+ paddd %xmm7,%xmm1
+.byte 69,15,56,203,247
+.byte 69,15,56,204,202
+ movdqa %xmm1,%xmm0
+ movdqa 176-128(%rbp),%xmm2
+ paddd %xmm3,%xmm8
+ paddd %xmm11,%xmm2
+.byte 15,56,205,231
+.byte 69,15,56,203,236
+ movdqa %xmm2,%xmm0
+ movdqa %xmm4,%xmm3
+.byte 102,15,58,15,223,4
+.byte 69,15,56,203,254
+.byte 69,15,56,205,195
+ pshufd $14,%xmm1,%xmm0
+ paddd %xmm3,%xmm5
+ movdqa %xmm8,%xmm3
+.byte 102,65,15,58,15,219,4
+.byte 15,56,204,247
+.byte 69,15,56,203,229
+ pshufd $14,%xmm2,%xmm0
+ movdqa 192-128(%rbp),%xmm1
+ paddd %xmm4,%xmm1
+.byte 69,15,56,203,247
+.byte 69,15,56,204,211
+ movdqa %xmm1,%xmm0
+ movdqa 192-128(%rbp),%xmm2
+ paddd %xmm3,%xmm9
+ paddd %xmm8,%xmm2
+.byte 15,56,205,236
+.byte 69,15,56,203,236
+ movdqa %xmm2,%xmm0
+ movdqa %xmm5,%xmm3
+.byte 102,15,58,15,220,4
+.byte 69,15,56,203,254
+.byte 69,15,56,205,200
+ pshufd $14,%xmm1,%xmm0
+ paddd %xmm3,%xmm6
+ movdqa %xmm9,%xmm3
+.byte 102,65,15,58,15,216,4
+.byte 15,56,204,252
+.byte 69,15,56,203,229
+ pshufd $14,%xmm2,%xmm0
+ movdqa 208-128(%rbp),%xmm1
+ paddd %xmm5,%xmm1
+.byte 69,15,56,203,247
+.byte 69,15,56,204,216
+ movdqa %xmm1,%xmm0
+ movdqa 208-128(%rbp),%xmm2
+ paddd %xmm3,%xmm10
+ paddd %xmm9,%xmm2
+.byte 15,56,205,245
+.byte 69,15,56,203,236
+ movdqa %xmm2,%xmm0
+ movdqa %xmm6,%xmm3
+.byte 102,15,58,15,221,4
+.byte 69,15,56,203,254
+.byte 69,15,56,205,209
+ pshufd $14,%xmm1,%xmm0
+ paddd %xmm3,%xmm7
+ movdqa %xmm10,%xmm3
+.byte 102,65,15,58,15,217,4
+ nop
+.byte 69,15,56,203,229
+ pshufd $14,%xmm2,%xmm0
+ movdqa 224-128(%rbp),%xmm1
+ paddd %xmm6,%xmm1
+.byte 69,15,56,203,247
+
+ movdqa %xmm1,%xmm0
+ movdqa 224-128(%rbp),%xmm2
+ paddd %xmm3,%xmm11
+ paddd %xmm10,%xmm2
+.byte 15,56,205,254
+ nop
+.byte 69,15,56,203,236
+ movdqa %xmm2,%xmm0
+ movl $1,%ecx
+ pxor %xmm6,%xmm6
+.byte 69,15,56,203,254
+.byte 69,15,56,205,218
+ pshufd $14,%xmm1,%xmm0
+ movdqa 240-128(%rbp),%xmm1
+ paddd %xmm7,%xmm1
+ movq (%rbx),%xmm7
+ nop
+.byte 69,15,56,203,229
+ pshufd $14,%xmm2,%xmm0
+ movdqa 240-128(%rbp),%xmm2
+ paddd %xmm11,%xmm2
+.byte 69,15,56,203,247
+
+ movdqa %xmm1,%xmm0
+ cmpl 0(%rbx),%ecx
+ cmovgeq %rsp,%r8
+ cmpl 4(%rbx),%ecx
+ cmovgeq %rsp,%r9
+ pshufd $0,%xmm7,%xmm9
+.byte 69,15,56,203,236
+ movdqa %xmm2,%xmm0
+ pshufd $85,%xmm7,%xmm10
+ movdqa %xmm7,%xmm11
+.byte 69,15,56,203,254
+ pshufd $14,%xmm1,%xmm0
+ pcmpgtd %xmm6,%xmm9
+ pcmpgtd %xmm6,%xmm10
+.byte 69,15,56,203,229
+ pshufd $14,%xmm2,%xmm0
+ pcmpgtd %xmm6,%xmm11
+ movdqa K256_shaext-16(%rip),%xmm3
+.byte 69,15,56,203,247
+
+ pand %xmm9,%xmm13
+ pand %xmm10,%xmm15
+ pand %xmm9,%xmm12
+ pand %xmm10,%xmm14
+ paddd %xmm7,%xmm11
+
+ paddd 80(%rsp),%xmm13
+ paddd 112(%rsp),%xmm15
+ paddd 64(%rsp),%xmm12
+ paddd 96(%rsp),%xmm14
+
+ movq %xmm11,(%rbx)
+ decl %edx
+ jnz .Loop_shaext
+
+ movl 280(%rsp),%edx
+
+ pshufd $27,%xmm12,%xmm12
+ pshufd $27,%xmm13,%xmm13
+ pshufd $27,%xmm14,%xmm14
+ pshufd $27,%xmm15,%xmm15
+
+ movdqa %xmm12,%xmm5
+ movdqa %xmm13,%xmm6
+ punpckldq %xmm14,%xmm12
+ punpckhdq %xmm14,%xmm5
+ punpckldq %xmm15,%xmm13
+ punpckhdq %xmm15,%xmm6
+
+ movq %xmm12,0-128(%rdi)
+ psrldq $8,%xmm12
+ movq %xmm5,128-128(%rdi)
+ psrldq $8,%xmm5
+ movq %xmm12,32-128(%rdi)
+ movq %xmm5,160-128(%rdi)
+
+ movq %xmm13,64-128(%rdi)
+ psrldq $8,%xmm13
+ movq %xmm6,192-128(%rdi)
+ psrldq $8,%xmm6
+ movq %xmm13,96-128(%rdi)
+ movq %xmm6,224-128(%rdi)
+
+ leaq 8(%rdi),%rdi
+ leaq 32(%rsi),%rsi
+ decl %edx
+ jnz .Loop_grande_shaext
+
+.Ldone_shaext:
+
+ movq -16(%rax),%rbp
+ movq -8(%rax),%rbx
+ leaq (%rax),%rsp
+.Lepilogue_shaext:
+ .byte 0xf3,0xc3
+.size sha256_multi_block_shaext,.-sha256_multi_block_shaext
+.align 256
+K256:
+.long 1116352408,1116352408,1116352408,1116352408
+.long 1116352408,1116352408,1116352408,1116352408
+.long 1899447441,1899447441,1899447441,1899447441
+.long 1899447441,1899447441,1899447441,1899447441
+.long 3049323471,3049323471,3049323471,3049323471
+.long 3049323471,3049323471,3049323471,3049323471
+.long 3921009573,3921009573,3921009573,3921009573
+.long 3921009573,3921009573,3921009573,3921009573
+.long 961987163,961987163,961987163,961987163
+.long 961987163,961987163,961987163,961987163
+.long 1508970993,1508970993,1508970993,1508970993
+.long 1508970993,1508970993,1508970993,1508970993
+.long 2453635748,2453635748,2453635748,2453635748
+.long 2453635748,2453635748,2453635748,2453635748
+.long 2870763221,2870763221,2870763221,2870763221
+.long 2870763221,2870763221,2870763221,2870763221
+.long 3624381080,3624381080,3624381080,3624381080
+.long 3624381080,3624381080,3624381080,3624381080
+.long 310598401,310598401,310598401,310598401
+.long 310598401,310598401,310598401,310598401
+.long 607225278,607225278,607225278,607225278
+.long 607225278,607225278,607225278,607225278
+.long 1426881987,1426881987,1426881987,1426881987
+.long 1426881987,1426881987,1426881987,1426881987
+.long 1925078388,1925078388,1925078388,1925078388
+.long 1925078388,1925078388,1925078388,1925078388
+.long 2162078206,2162078206,2162078206,2162078206
+.long 2162078206,2162078206,2162078206,2162078206
+.long 2614888103,2614888103,2614888103,2614888103
+.long 2614888103,2614888103,2614888103,2614888103
+.long 3248222580,3248222580,3248222580,3248222580
+.long 3248222580,3248222580,3248222580,3248222580
+.long 3835390401,3835390401,3835390401,3835390401
+.long 3835390401,3835390401,3835390401,3835390401
+.long 4022224774,4022224774,4022224774,4022224774
+.long 4022224774,4022224774,4022224774,4022224774
+.long 264347078,264347078,264347078,264347078
+.long 264347078,264347078,264347078,264347078
+.long 604807628,604807628,604807628,604807628
+.long 604807628,604807628,604807628,604807628
+.long 770255983,770255983,770255983,770255983
+.long 770255983,770255983,770255983,770255983
+.long 1249150122,1249150122,1249150122,1249150122
+.long 1249150122,1249150122,1249150122,1249150122
+.long 1555081692,1555081692,1555081692,1555081692
+.long 1555081692,1555081692,1555081692,1555081692
+.long 1996064986,1996064986,1996064986,1996064986
+.long 1996064986,1996064986,1996064986,1996064986
+.long 2554220882,2554220882,2554220882,2554220882
+.long 2554220882,2554220882,2554220882,2554220882
+.long 2821834349,2821834349,2821834349,2821834349
+.long 2821834349,2821834349,2821834349,2821834349
+.long 2952996808,2952996808,2952996808,2952996808
+.long 2952996808,2952996808,2952996808,2952996808
+.long 3210313671,3210313671,3210313671,3210313671
+.long 3210313671,3210313671,3210313671,3210313671
+.long 3336571891,3336571891,3336571891,3336571891
+.long 3336571891,3336571891,3336571891,3336571891
+.long 3584528711,3584528711,3584528711,3584528711
+.long 3584528711,3584528711,3584528711,3584528711
+.long 113926993,113926993,113926993,113926993
+.long 113926993,113926993,113926993,113926993
+.long 338241895,338241895,338241895,338241895
+.long 338241895,338241895,338241895,338241895
+.long 666307205,666307205,666307205,666307205
+.long 666307205,666307205,666307205,666307205
+.long 773529912,773529912,773529912,773529912
+.long 773529912,773529912,773529912,773529912
+.long 1294757372,1294757372,1294757372,1294757372
+.long 1294757372,1294757372,1294757372,1294757372
+.long 1396182291,1396182291,1396182291,1396182291
+.long 1396182291,1396182291,1396182291,1396182291
+.long 1695183700,1695183700,1695183700,1695183700
+.long 1695183700,1695183700,1695183700,1695183700
+.long 1986661051,1986661051,1986661051,1986661051
+.long 1986661051,1986661051,1986661051,1986661051
+.long 2177026350,2177026350,2177026350,2177026350
+.long 2177026350,2177026350,2177026350,2177026350
+.long 2456956037,2456956037,2456956037,2456956037
+.long 2456956037,2456956037,2456956037,2456956037
+.long 2730485921,2730485921,2730485921,2730485921
+.long 2730485921,2730485921,2730485921,2730485921
+.long 2820302411,2820302411,2820302411,2820302411
+.long 2820302411,2820302411,2820302411,2820302411
+.long 3259730800,3259730800,3259730800,3259730800
+.long 3259730800,3259730800,3259730800,3259730800
+.long 3345764771,3345764771,3345764771,3345764771
+.long 3345764771,3345764771,3345764771,3345764771
+.long 3516065817,3516065817,3516065817,3516065817
+.long 3516065817,3516065817,3516065817,3516065817
+.long 3600352804,3600352804,3600352804,3600352804
+.long 3600352804,3600352804,3600352804,3600352804
+.long 4094571909,4094571909,4094571909,4094571909
+.long 4094571909,4094571909,4094571909,4094571909
+.long 275423344,275423344,275423344,275423344
+.long 275423344,275423344,275423344,275423344
+.long 430227734,430227734,430227734,430227734
+.long 430227734,430227734,430227734,430227734
+.long 506948616,506948616,506948616,506948616
+.long 506948616,506948616,506948616,506948616
+.long 659060556,659060556,659060556,659060556
+.long 659060556,659060556,659060556,659060556
+.long 883997877,883997877,883997877,883997877
+.long 883997877,883997877,883997877,883997877
+.long 958139571,958139571,958139571,958139571
+.long 958139571,958139571,958139571,958139571
+.long 1322822218,1322822218,1322822218,1322822218
+.long 1322822218,1322822218,1322822218,1322822218
+.long 1537002063,1537002063,1537002063,1537002063
+.long 1537002063,1537002063,1537002063,1537002063
+.long 1747873779,1747873779,1747873779,1747873779
+.long 1747873779,1747873779,1747873779,1747873779
+.long 1955562222,1955562222,1955562222,1955562222
+.long 1955562222,1955562222,1955562222,1955562222
+.long 2024104815,2024104815,2024104815,2024104815
+.long 2024104815,2024104815,2024104815,2024104815
+.long 2227730452,2227730452,2227730452,2227730452
+.long 2227730452,2227730452,2227730452,2227730452
+.long 2361852424,2361852424,2361852424,2361852424
+.long 2361852424,2361852424,2361852424,2361852424
+.long 2428436474,2428436474,2428436474,2428436474
+.long 2428436474,2428436474,2428436474,2428436474
+.long 2756734187,2756734187,2756734187,2756734187
+.long 2756734187,2756734187,2756734187,2756734187
+.long 3204031479,3204031479,3204031479,3204031479
+.long 3204031479,3204031479,3204031479,3204031479
+.long 3329325298,3329325298,3329325298,3329325298
+.long 3329325298,3329325298,3329325298,3329325298
+.Lpbswap:
+.long 0x00010203,0x04050607,0x08090a0b,0x0c0d0e0f
+.long 0x00010203,0x04050607,0x08090a0b,0x0c0d0e0f
+K256_shaext:
+.long 0x428a2f98,0x71374491,0xb5c0fbcf,0xe9b5dba5
+.long 0x3956c25b,0x59f111f1,0x923f82a4,0xab1c5ed5
+.long 0xd807aa98,0x12835b01,0x243185be,0x550c7dc3
+.long 0x72be5d74,0x80deb1fe,0x9bdc06a7,0xc19bf174
+.long 0xe49b69c1,0xefbe4786,0x0fc19dc6,0x240ca1cc
+.long 0x2de92c6f,0x4a7484aa,0x5cb0a9dc,0x76f988da
+.long 0x983e5152,0xa831c66d,0xb00327c8,0xbf597fc7
+.long 0xc6e00bf3,0xd5a79147,0x06ca6351,0x14292967
+.long 0x27b70a85,0x2e1b2138,0x4d2c6dfc,0x53380d13
+.long 0x650a7354,0x766a0abb,0x81c2c92e,0x92722c85
+.long 0xa2bfe8a1,0xa81a664b,0xc24b8b70,0xc76c51a3
+.long 0xd192e819,0xd6990624,0xf40e3585,0x106aa070
+.long 0x19a4c116,0x1e376c08,0x2748774c,0x34b0bcb5
+.long 0x391c0cb3,0x4ed8aa4a,0x5b9cca4f,0x682e6ff3
+.long 0x748f82ee,0x78a5636f,0x84c87814,0x8cc70208
+.long 0x90befffa,0xa4506ceb,0xbef9a3f7,0xc67178f2
+.byte 83,72,65,50,53,54,32,109,117,108,116,105,45,98,108,111,99,107,32,116,114,97,110,115,102,111,114,109,32,102,111,114,32,120,56,54,95,54,52,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0
diff --git a/secure/lib/libcrypto/amd64/sha256-x86_64.S b/secure/lib/libcrypto/amd64/sha256-x86_64.S
index 79e06b4..a43a668 100644
--- a/secure/lib/libcrypto/amd64/sha256-x86_64.S
+++ b/secure/lib/libcrypto/amd64/sha256-x86_64.S
@@ -1,10 +1,19 @@
# $FreeBSD$
.text
+
.globl sha256_block_data_order
.type sha256_block_data_order,@function
.align 16
sha256_block_data_order:
+ leaq OPENSSL_ia32cap_P(%rip),%r11
+ movl 0(%r11),%r9d
+ movl 4(%r11),%r10d
+ movl 8(%r11),%r11d
+ testl $536870912,%r11d
+ jnz _shaext_shortcut
+ testl $512,%r10d
+ jnz .Lssse3_shortcut
pushq %rbx
pushq %rbp
pushq %r12
@@ -22,8 +31,6 @@ sha256_block_data_order:
movq %r11,64+24(%rsp)
.Lprologue:
- leaq K256(%rip),%rbp
-
movl 0(%rdi),%eax
movl 4(%rdi),%ebx
movl 8(%rdi),%ecx
@@ -36,1694 +43,1632 @@ sha256_block_data_order:
.align 16
.Lloop:
- xorq %rdi,%rdi
+ movl %ebx,%edi
+ leaq K256(%rip),%rbp
+ xorl %ecx,%edi
movl 0(%rsi),%r12d
movl %r8d,%r13d
movl %eax,%r14d
bswapl %r12d
rorl $14,%r13d
movl %r9d,%r15d
- movl %r12d,0(%rsp)
- rorl $9,%r14d
xorl %r8d,%r13d
+ rorl $9,%r14d
xorl %r10d,%r15d
- rorl $5,%r13d
- addl %r11d,%r12d
+ movl %r12d,0(%rsp)
xorl %eax,%r14d
-
- addl (%rbp,%rdi,4),%r12d
andl %r8d,%r15d
- movl %ebx,%r11d
+
+ rorl $5,%r13d
+ addl %r11d,%r12d
+ xorl %r10d,%r15d
rorl $11,%r14d
xorl %r8d,%r13d
- xorl %r10d,%r15d
+ addl %r15d,%r12d
- xorl %ecx,%r11d
+ movl %eax,%r15d
+ addl (%rbp),%r12d
xorl %eax,%r14d
- addl %r15d,%r12d
- movl %ebx,%r15d
+ xorl %ebx,%r15d
rorl $6,%r13d
- andl %eax,%r11d
- andl %ecx,%r15d
+ movl %ebx,%r11d
+ andl %r15d,%edi
rorl $2,%r14d
addl %r13d,%r12d
- addl %r15d,%r11d
+ xorl %edi,%r11d
addl %r12d,%edx
addl %r12d,%r11d
- leaq 1(%rdi),%rdi
- addl %r14d,%r11d
+ leaq 4(%rbp),%rbp
+ addl %r14d,%r11d
movl 4(%rsi),%r12d
movl %edx,%r13d
movl %r11d,%r14d
bswapl %r12d
rorl $14,%r13d
- movl %r8d,%r15d
- movl %r12d,4(%rsp)
+ movl %r8d,%edi
- rorl $9,%r14d
xorl %edx,%r13d
- xorl %r9d,%r15d
+ rorl $9,%r14d
+ xorl %r9d,%edi
- rorl $5,%r13d
- addl %r10d,%r12d
+ movl %r12d,4(%rsp)
xorl %r11d,%r14d
+ andl %edx,%edi
- addl (%rbp,%rdi,4),%r12d
- andl %edx,%r15d
- movl %eax,%r10d
+ rorl $5,%r13d
+ addl %r10d,%r12d
+ xorl %r9d,%edi
rorl $11,%r14d
xorl %edx,%r13d
- xorl %r9d,%r15d
+ addl %edi,%r12d
- xorl %ebx,%r10d
+ movl %r11d,%edi
+ addl (%rbp),%r12d
xorl %r11d,%r14d
- addl %r15d,%r12d
- movl %eax,%r15d
+ xorl %eax,%edi
rorl $6,%r13d
- andl %r11d,%r10d
- andl %ebx,%r15d
+ movl %eax,%r10d
+ andl %edi,%r15d
rorl $2,%r14d
addl %r13d,%r12d
- addl %r15d,%r10d
+ xorl %r15d,%r10d
addl %r12d,%ecx
addl %r12d,%r10d
- leaq 1(%rdi),%rdi
- addl %r14d,%r10d
+ leaq 4(%rbp),%rbp
+ addl %r14d,%r10d
movl 8(%rsi),%r12d
movl %ecx,%r13d
movl %r10d,%r14d
bswapl %r12d
rorl $14,%r13d
movl %edx,%r15d
- movl %r12d,8(%rsp)
- rorl $9,%r14d
xorl %ecx,%r13d
+ rorl $9,%r14d
xorl %r8d,%r15d
- rorl $5,%r13d
- addl %r9d,%r12d
+ movl %r12d,8(%rsp)
xorl %r10d,%r14d
-
- addl (%rbp,%rdi,4),%r12d
andl %ecx,%r15d
- movl %r11d,%r9d
+
+ rorl $5,%r13d
+ addl %r9d,%r12d
+ xorl %r8d,%r15d
rorl $11,%r14d
xorl %ecx,%r13d
- xorl %r8d,%r15d
+ addl %r15d,%r12d
- xorl %eax,%r9d
+ movl %r10d,%r15d
+ addl (%rbp),%r12d
xorl %r10d,%r14d
- addl %r15d,%r12d
- movl %r11d,%r15d
+ xorl %r11d,%r15d
rorl $6,%r13d
- andl %r10d,%r9d
- andl %eax,%r15d
+ movl %r11d,%r9d
+ andl %r15d,%edi
rorl $2,%r14d
addl %r13d,%r12d
- addl %r15d,%r9d
+ xorl %edi,%r9d
addl %r12d,%ebx
addl %r12d,%r9d
- leaq 1(%rdi),%rdi
- addl %r14d,%r9d
+ leaq 4(%rbp),%rbp
+ addl %r14d,%r9d
movl 12(%rsi),%r12d
movl %ebx,%r13d
movl %r9d,%r14d
bswapl %r12d
rorl $14,%r13d
- movl %ecx,%r15d
- movl %r12d,12(%rsp)
+ movl %ecx,%edi
- rorl $9,%r14d
xorl %ebx,%r13d
- xorl %edx,%r15d
+ rorl $9,%r14d
+ xorl %edx,%edi
- rorl $5,%r13d
- addl %r8d,%r12d
+ movl %r12d,12(%rsp)
xorl %r9d,%r14d
+ andl %ebx,%edi
- addl (%rbp,%rdi,4),%r12d
- andl %ebx,%r15d
- movl %r10d,%r8d
+ rorl $5,%r13d
+ addl %r8d,%r12d
+ xorl %edx,%edi
rorl $11,%r14d
xorl %ebx,%r13d
- xorl %edx,%r15d
+ addl %edi,%r12d
- xorl %r11d,%r8d
+ movl %r9d,%edi
+ addl (%rbp),%r12d
xorl %r9d,%r14d
- addl %r15d,%r12d
- movl %r10d,%r15d
+ xorl %r10d,%edi
rorl $6,%r13d
- andl %r9d,%r8d
- andl %r11d,%r15d
+ movl %r10d,%r8d
+ andl %edi,%r15d
rorl $2,%r14d
addl %r13d,%r12d
- addl %r15d,%r8d
+ xorl %r15d,%r8d
addl %r12d,%eax
addl %r12d,%r8d
- leaq 1(%rdi),%rdi
- addl %r14d,%r8d
+ leaq 20(%rbp),%rbp
+ addl %r14d,%r8d
movl 16(%rsi),%r12d
movl %eax,%r13d
movl %r8d,%r14d
bswapl %r12d
rorl $14,%r13d
movl %ebx,%r15d
- movl %r12d,16(%rsp)
- rorl $9,%r14d
xorl %eax,%r13d
+ rorl $9,%r14d
xorl %ecx,%r15d
- rorl $5,%r13d
- addl %edx,%r12d
+ movl %r12d,16(%rsp)
xorl %r8d,%r14d
-
- addl (%rbp,%rdi,4),%r12d
andl %eax,%r15d
- movl %r9d,%edx
+
+ rorl $5,%r13d
+ addl %edx,%r12d
+ xorl %ecx,%r15d
rorl $11,%r14d
xorl %eax,%r13d
- xorl %ecx,%r15d
+ addl %r15d,%r12d
- xorl %r10d,%edx
+ movl %r8d,%r15d
+ addl (%rbp),%r12d
xorl %r8d,%r14d
- addl %r15d,%r12d
- movl %r9d,%r15d
+ xorl %r9d,%r15d
rorl $6,%r13d
- andl %r8d,%edx
- andl %r10d,%r15d
+ movl %r9d,%edx
+ andl %r15d,%edi
rorl $2,%r14d
addl %r13d,%r12d
- addl %r15d,%edx
+ xorl %edi,%edx
addl %r12d,%r11d
addl %r12d,%edx
- leaq 1(%rdi),%rdi
- addl %r14d,%edx
+ leaq 4(%rbp),%rbp
+ addl %r14d,%edx
movl 20(%rsi),%r12d
movl %r11d,%r13d
movl %edx,%r14d
bswapl %r12d
rorl $14,%r13d
- movl %eax,%r15d
- movl %r12d,20(%rsp)
+ movl %eax,%edi
- rorl $9,%r14d
xorl %r11d,%r13d
- xorl %ebx,%r15d
+ rorl $9,%r14d
+ xorl %ebx,%edi
- rorl $5,%r13d
- addl %ecx,%r12d
+ movl %r12d,20(%rsp)
xorl %edx,%r14d
+ andl %r11d,%edi
- addl (%rbp,%rdi,4),%r12d
- andl %r11d,%r15d
- movl %r8d,%ecx
+ rorl $5,%r13d
+ addl %ecx,%r12d
+ xorl %ebx,%edi
rorl $11,%r14d
xorl %r11d,%r13d
- xorl %ebx,%r15d
+ addl %edi,%r12d
- xorl %r9d,%ecx
+ movl %edx,%edi
+ addl (%rbp),%r12d
xorl %edx,%r14d
- addl %r15d,%r12d
- movl %r8d,%r15d
+ xorl %r8d,%edi
rorl $6,%r13d
- andl %edx,%ecx
- andl %r9d,%r15d
+ movl %r8d,%ecx
+ andl %edi,%r15d
rorl $2,%r14d
addl %r13d,%r12d
- addl %r15d,%ecx
+ xorl %r15d,%ecx
addl %r12d,%r10d
addl %r12d,%ecx
- leaq 1(%rdi),%rdi
- addl %r14d,%ecx
+ leaq 4(%rbp),%rbp
+ addl %r14d,%ecx
movl 24(%rsi),%r12d
movl %r10d,%r13d
movl %ecx,%r14d
bswapl %r12d
rorl $14,%r13d
movl %r11d,%r15d
- movl %r12d,24(%rsp)
- rorl $9,%r14d
xorl %r10d,%r13d
+ rorl $9,%r14d
xorl %eax,%r15d
- rorl $5,%r13d
- addl %ebx,%r12d
+ movl %r12d,24(%rsp)
xorl %ecx,%r14d
-
- addl (%rbp,%rdi,4),%r12d
andl %r10d,%r15d
- movl %edx,%ebx
+
+ rorl $5,%r13d
+ addl %ebx,%r12d
+ xorl %eax,%r15d
rorl $11,%r14d
xorl %r10d,%r13d
- xorl %eax,%r15d
+ addl %r15d,%r12d
- xorl %r8d,%ebx
+ movl %ecx,%r15d
+ addl (%rbp),%r12d
xorl %ecx,%r14d
- addl %r15d,%r12d
- movl %edx,%r15d
+ xorl %edx,%r15d
rorl $6,%r13d
- andl %ecx,%ebx
- andl %r8d,%r15d
+ movl %edx,%ebx
+ andl %r15d,%edi
rorl $2,%r14d
addl %r13d,%r12d
- addl %r15d,%ebx
+ xorl %edi,%ebx
addl %r12d,%r9d
addl %r12d,%ebx
- leaq 1(%rdi),%rdi
- addl %r14d,%ebx
+ leaq 4(%rbp),%rbp
+ addl %r14d,%ebx
movl 28(%rsi),%r12d
movl %r9d,%r13d
movl %ebx,%r14d
bswapl %r12d
rorl $14,%r13d
- movl %r10d,%r15d
- movl %r12d,28(%rsp)
+ movl %r10d,%edi
- rorl $9,%r14d
xorl %r9d,%r13d
- xorl %r11d,%r15d
+ rorl $9,%r14d
+ xorl %r11d,%edi
- rorl $5,%r13d
- addl %eax,%r12d
+ movl %r12d,28(%rsp)
xorl %ebx,%r14d
+ andl %r9d,%edi
- addl (%rbp,%rdi,4),%r12d
- andl %r9d,%r15d
- movl %ecx,%eax
+ rorl $5,%r13d
+ addl %eax,%r12d
+ xorl %r11d,%edi
rorl $11,%r14d
xorl %r9d,%r13d
- xorl %r11d,%r15d
+ addl %edi,%r12d
- xorl %edx,%eax
+ movl %ebx,%edi
+ addl (%rbp),%r12d
xorl %ebx,%r14d
- addl %r15d,%r12d
- movl %ecx,%r15d
+ xorl %ecx,%edi
rorl $6,%r13d
- andl %ebx,%eax
- andl %edx,%r15d
+ movl %ecx,%eax
+ andl %edi,%r15d
rorl $2,%r14d
addl %r13d,%r12d
- addl %r15d,%eax
+ xorl %r15d,%eax
addl %r12d,%r8d
addl %r12d,%eax
- leaq 1(%rdi),%rdi
- addl %r14d,%eax
+ leaq 20(%rbp),%rbp
+ addl %r14d,%eax
movl 32(%rsi),%r12d
movl %r8d,%r13d
movl %eax,%r14d
bswapl %r12d
rorl $14,%r13d
movl %r9d,%r15d
- movl %r12d,32(%rsp)
- rorl $9,%r14d
xorl %r8d,%r13d
+ rorl $9,%r14d
xorl %r10d,%r15d
- rorl $5,%r13d
- addl %r11d,%r12d
+ movl %r12d,32(%rsp)
xorl %eax,%r14d
-
- addl (%rbp,%rdi,4),%r12d
andl %r8d,%r15d
- movl %ebx,%r11d
+
+ rorl $5,%r13d
+ addl %r11d,%r12d
+ xorl %r10d,%r15d
rorl $11,%r14d
xorl %r8d,%r13d
- xorl %r10d,%r15d
+ addl %r15d,%r12d
- xorl %ecx,%r11d
+ movl %eax,%r15d
+ addl (%rbp),%r12d
xorl %eax,%r14d
- addl %r15d,%r12d
- movl %ebx,%r15d
+ xorl %ebx,%r15d
rorl $6,%r13d
- andl %eax,%r11d
- andl %ecx,%r15d
+ movl %ebx,%r11d
+ andl %r15d,%edi
rorl $2,%r14d
addl %r13d,%r12d
- addl %r15d,%r11d
+ xorl %edi,%r11d
addl %r12d,%edx
addl %r12d,%r11d
- leaq 1(%rdi),%rdi
- addl %r14d,%r11d
+ leaq 4(%rbp),%rbp
+ addl %r14d,%r11d
movl 36(%rsi),%r12d
movl %edx,%r13d
movl %r11d,%r14d
bswapl %r12d
rorl $14,%r13d
- movl %r8d,%r15d
- movl %r12d,36(%rsp)
+ movl %r8d,%edi
- rorl $9,%r14d
xorl %edx,%r13d
- xorl %r9d,%r15d
+ rorl $9,%r14d
+ xorl %r9d,%edi
- rorl $5,%r13d
- addl %r10d,%r12d
+ movl %r12d,36(%rsp)
xorl %r11d,%r14d
+ andl %edx,%edi
- addl (%rbp,%rdi,4),%r12d
- andl %edx,%r15d
- movl %eax,%r10d
+ rorl $5,%r13d
+ addl %r10d,%r12d
+ xorl %r9d,%edi
rorl $11,%r14d
xorl %edx,%r13d
- xorl %r9d,%r15d
+ addl %edi,%r12d
- xorl %ebx,%r10d
+ movl %r11d,%edi
+ addl (%rbp),%r12d
xorl %r11d,%r14d
- addl %r15d,%r12d
- movl %eax,%r15d
+ xorl %eax,%edi
rorl $6,%r13d
- andl %r11d,%r10d
- andl %ebx,%r15d
+ movl %eax,%r10d
+ andl %edi,%r15d
rorl $2,%r14d
addl %r13d,%r12d
- addl %r15d,%r10d
+ xorl %r15d,%r10d
addl %r12d,%ecx
addl %r12d,%r10d
- leaq 1(%rdi),%rdi
- addl %r14d,%r10d
+ leaq 4(%rbp),%rbp
+ addl %r14d,%r10d
movl 40(%rsi),%r12d
movl %ecx,%r13d
movl %r10d,%r14d
bswapl %r12d
rorl $14,%r13d
movl %edx,%r15d
- movl %r12d,40(%rsp)
- rorl $9,%r14d
xorl %ecx,%r13d
+ rorl $9,%r14d
xorl %r8d,%r15d
- rorl $5,%r13d
- addl %r9d,%r12d
+ movl %r12d,40(%rsp)
xorl %r10d,%r14d
-
- addl (%rbp,%rdi,4),%r12d
andl %ecx,%r15d
- movl %r11d,%r9d
+
+ rorl $5,%r13d
+ addl %r9d,%r12d
+ xorl %r8d,%r15d
rorl $11,%r14d
xorl %ecx,%r13d
- xorl %r8d,%r15d
+ addl %r15d,%r12d
- xorl %eax,%r9d
+ movl %r10d,%r15d
+ addl (%rbp),%r12d
xorl %r10d,%r14d
- addl %r15d,%r12d
- movl %r11d,%r15d
+ xorl %r11d,%r15d
rorl $6,%r13d
- andl %r10d,%r9d
- andl %eax,%r15d
+ movl %r11d,%r9d
+ andl %r15d,%edi
rorl $2,%r14d
addl %r13d,%r12d
- addl %r15d,%r9d
+ xorl %edi,%r9d
addl %r12d,%ebx
addl %r12d,%r9d
- leaq 1(%rdi),%rdi
- addl %r14d,%r9d
+ leaq 4(%rbp),%rbp
+ addl %r14d,%r9d
movl 44(%rsi),%r12d
movl %ebx,%r13d
movl %r9d,%r14d
bswapl %r12d
rorl $14,%r13d
- movl %ecx,%r15d
- movl %r12d,44(%rsp)
+ movl %ecx,%edi
- rorl $9,%r14d
xorl %ebx,%r13d
- xorl %edx,%r15d
+ rorl $9,%r14d
+ xorl %edx,%edi
- rorl $5,%r13d
- addl %r8d,%r12d
+ movl %r12d,44(%rsp)
xorl %r9d,%r14d
+ andl %ebx,%edi
- addl (%rbp,%rdi,4),%r12d
- andl %ebx,%r15d
- movl %r10d,%r8d
+ rorl $5,%r13d
+ addl %r8d,%r12d
+ xorl %edx,%edi
rorl $11,%r14d
xorl %ebx,%r13d
- xorl %edx,%r15d
+ addl %edi,%r12d
- xorl %r11d,%r8d
+ movl %r9d,%edi
+ addl (%rbp),%r12d
xorl %r9d,%r14d
- addl %r15d,%r12d
- movl %r10d,%r15d
+ xorl %r10d,%edi
rorl $6,%r13d
- andl %r9d,%r8d
- andl %r11d,%r15d
+ movl %r10d,%r8d
+ andl %edi,%r15d
rorl $2,%r14d
addl %r13d,%r12d
- addl %r15d,%r8d
+ xorl %r15d,%r8d
addl %r12d,%eax
addl %r12d,%r8d
- leaq 1(%rdi),%rdi
- addl %r14d,%r8d
+ leaq 20(%rbp),%rbp
+ addl %r14d,%r8d
movl 48(%rsi),%r12d
movl %eax,%r13d
movl %r8d,%r14d
bswapl %r12d
rorl $14,%r13d
movl %ebx,%r15d
- movl %r12d,48(%rsp)
- rorl $9,%r14d
xorl %eax,%r13d
+ rorl $9,%r14d
xorl %ecx,%r15d
- rorl $5,%r13d
- addl %edx,%r12d
+ movl %r12d,48(%rsp)
xorl %r8d,%r14d
-
- addl (%rbp,%rdi,4),%r12d
andl %eax,%r15d
- movl %r9d,%edx
+
+ rorl $5,%r13d
+ addl %edx,%r12d
+ xorl %ecx,%r15d
rorl $11,%r14d
xorl %eax,%r13d
- xorl %ecx,%r15d
+ addl %r15d,%r12d
- xorl %r10d,%edx
+ movl %r8d,%r15d
+ addl (%rbp),%r12d
xorl %r8d,%r14d
- addl %r15d,%r12d
- movl %r9d,%r15d
+ xorl %r9d,%r15d
rorl $6,%r13d
- andl %r8d,%edx
- andl %r10d,%r15d
+ movl %r9d,%edx
+ andl %r15d,%edi
rorl $2,%r14d
addl %r13d,%r12d
- addl %r15d,%edx
+ xorl %edi,%edx
addl %r12d,%r11d
addl %r12d,%edx
- leaq 1(%rdi),%rdi
- addl %r14d,%edx
+ leaq 4(%rbp),%rbp
+ addl %r14d,%edx
movl 52(%rsi),%r12d
movl %r11d,%r13d
movl %edx,%r14d
bswapl %r12d
rorl $14,%r13d
- movl %eax,%r15d
- movl %r12d,52(%rsp)
+ movl %eax,%edi
- rorl $9,%r14d
xorl %r11d,%r13d
- xorl %ebx,%r15d
+ rorl $9,%r14d
+ xorl %ebx,%edi
- rorl $5,%r13d
- addl %ecx,%r12d
+ movl %r12d,52(%rsp)
xorl %edx,%r14d
+ andl %r11d,%edi
- addl (%rbp,%rdi,4),%r12d
- andl %r11d,%r15d
- movl %r8d,%ecx
+ rorl $5,%r13d
+ addl %ecx,%r12d
+ xorl %ebx,%edi
rorl $11,%r14d
xorl %r11d,%r13d
- xorl %ebx,%r15d
+ addl %edi,%r12d
- xorl %r9d,%ecx
+ movl %edx,%edi
+ addl (%rbp),%r12d
xorl %edx,%r14d
- addl %r15d,%r12d
- movl %r8d,%r15d
+ xorl %r8d,%edi
rorl $6,%r13d
- andl %edx,%ecx
- andl %r9d,%r15d
+ movl %r8d,%ecx
+ andl %edi,%r15d
rorl $2,%r14d
addl %r13d,%r12d
- addl %r15d,%ecx
+ xorl %r15d,%ecx
addl %r12d,%r10d
addl %r12d,%ecx
- leaq 1(%rdi),%rdi
- addl %r14d,%ecx
+ leaq 4(%rbp),%rbp
+ addl %r14d,%ecx
movl 56(%rsi),%r12d
movl %r10d,%r13d
movl %ecx,%r14d
bswapl %r12d
rorl $14,%r13d
movl %r11d,%r15d
- movl %r12d,56(%rsp)
- rorl $9,%r14d
xorl %r10d,%r13d
+ rorl $9,%r14d
xorl %eax,%r15d
- rorl $5,%r13d
- addl %ebx,%r12d
+ movl %r12d,56(%rsp)
xorl %ecx,%r14d
-
- addl (%rbp,%rdi,4),%r12d
andl %r10d,%r15d
- movl %edx,%ebx
+
+ rorl $5,%r13d
+ addl %ebx,%r12d
+ xorl %eax,%r15d
rorl $11,%r14d
xorl %r10d,%r13d
- xorl %eax,%r15d
+ addl %r15d,%r12d
- xorl %r8d,%ebx
+ movl %ecx,%r15d
+ addl (%rbp),%r12d
xorl %ecx,%r14d
- addl %r15d,%r12d
- movl %edx,%r15d
+ xorl %edx,%r15d
rorl $6,%r13d
- andl %ecx,%ebx
- andl %r8d,%r15d
+ movl %edx,%ebx
+ andl %r15d,%edi
rorl $2,%r14d
addl %r13d,%r12d
- addl %r15d,%ebx
+ xorl %edi,%ebx
addl %r12d,%r9d
addl %r12d,%ebx
- leaq 1(%rdi),%rdi
- addl %r14d,%ebx
+ leaq 4(%rbp),%rbp
+ addl %r14d,%ebx
movl 60(%rsi),%r12d
movl %r9d,%r13d
movl %ebx,%r14d
bswapl %r12d
rorl $14,%r13d
- movl %r10d,%r15d
- movl %r12d,60(%rsp)
+ movl %r10d,%edi
- rorl $9,%r14d
xorl %r9d,%r13d
- xorl %r11d,%r15d
+ rorl $9,%r14d
+ xorl %r11d,%edi
- rorl $5,%r13d
- addl %eax,%r12d
+ movl %r12d,60(%rsp)
xorl %ebx,%r14d
+ andl %r9d,%edi
- addl (%rbp,%rdi,4),%r12d
- andl %r9d,%r15d
- movl %ecx,%eax
+ rorl $5,%r13d
+ addl %eax,%r12d
+ xorl %r11d,%edi
rorl $11,%r14d
xorl %r9d,%r13d
- xorl %r11d,%r15d
+ addl %edi,%r12d
- xorl %edx,%eax
+ movl %ebx,%edi
+ addl (%rbp),%r12d
xorl %ebx,%r14d
- addl %r15d,%r12d
- movl %ecx,%r15d
+ xorl %ecx,%edi
rorl $6,%r13d
- andl %ebx,%eax
- andl %edx,%r15d
+ movl %ecx,%eax
+ andl %edi,%r15d
rorl $2,%r14d
addl %r13d,%r12d
- addl %r15d,%eax
+ xorl %r15d,%eax
addl %r12d,%r8d
addl %r12d,%eax
- leaq 1(%rdi),%rdi
- addl %r14d,%eax
+ leaq 20(%rbp),%rbp
jmp .Lrounds_16_xx
.align 16
.Lrounds_16_xx:
movl 4(%rsp),%r13d
- movl 56(%rsp),%r14d
- movl %r13d,%r12d
- movl %r14d,%r15d
+ movl 56(%rsp),%r15d
- rorl $11,%r12d
- xorl %r13d,%r12d
- shrl $3,%r13d
+ movl %r13d,%r12d
+ rorl $11,%r13d
+ addl %r14d,%eax
+ movl %r15d,%r14d
+ rorl $2,%r15d
- rorl $7,%r12d
xorl %r12d,%r13d
- movl 36(%rsp),%r12d
-
- rorl $2,%r15d
+ shrl $3,%r12d
+ rorl $7,%r13d
xorl %r14d,%r15d
shrl $10,%r14d
rorl $17,%r15d
- addl %r13d,%r12d
- xorl %r15d,%r14d
+ xorl %r13d,%r12d
+ xorl %r14d,%r15d
+ addl 36(%rsp),%r12d
addl 0(%rsp),%r12d
movl %r8d,%r13d
- addl %r14d,%r12d
+ addl %r15d,%r12d
movl %eax,%r14d
rorl $14,%r13d
movl %r9d,%r15d
- movl %r12d,0(%rsp)
- rorl $9,%r14d
xorl %r8d,%r13d
+ rorl $9,%r14d
xorl %r10d,%r15d
- rorl $5,%r13d
- addl %r11d,%r12d
+ movl %r12d,0(%rsp)
xorl %eax,%r14d
-
- addl (%rbp,%rdi,4),%r12d
andl %r8d,%r15d
- movl %ebx,%r11d
+
+ rorl $5,%r13d
+ addl %r11d,%r12d
+ xorl %r10d,%r15d
rorl $11,%r14d
xorl %r8d,%r13d
- xorl %r10d,%r15d
+ addl %r15d,%r12d
- xorl %ecx,%r11d
+ movl %eax,%r15d
+ addl (%rbp),%r12d
xorl %eax,%r14d
- addl %r15d,%r12d
- movl %ebx,%r15d
+ xorl %ebx,%r15d
rorl $6,%r13d
- andl %eax,%r11d
- andl %ecx,%r15d
+ movl %ebx,%r11d
+ andl %r15d,%edi
rorl $2,%r14d
addl %r13d,%r12d
- addl %r15d,%r11d
+ xorl %edi,%r11d
addl %r12d,%edx
addl %r12d,%r11d
- leaq 1(%rdi),%rdi
- addl %r14d,%r11d
+ leaq 4(%rbp),%rbp
movl 8(%rsp),%r13d
- movl 60(%rsp),%r14d
- movl %r13d,%r12d
- movl %r14d,%r15d
+ movl 60(%rsp),%edi
- rorl $11,%r12d
- xorl %r13d,%r12d
- shrl $3,%r13d
+ movl %r13d,%r12d
+ rorl $11,%r13d
+ addl %r14d,%r11d
+ movl %edi,%r14d
+ rorl $2,%edi
- rorl $7,%r12d
xorl %r12d,%r13d
- movl 40(%rsp),%r12d
-
- rorl $2,%r15d
- xorl %r14d,%r15d
+ shrl $3,%r12d
+ rorl $7,%r13d
+ xorl %r14d,%edi
shrl $10,%r14d
- rorl $17,%r15d
- addl %r13d,%r12d
- xorl %r15d,%r14d
+ rorl $17,%edi
+ xorl %r13d,%r12d
+ xorl %r14d,%edi
+ addl 40(%rsp),%r12d
addl 4(%rsp),%r12d
movl %edx,%r13d
- addl %r14d,%r12d
+ addl %edi,%r12d
movl %r11d,%r14d
rorl $14,%r13d
- movl %r8d,%r15d
- movl %r12d,4(%rsp)
+ movl %r8d,%edi
- rorl $9,%r14d
xorl %edx,%r13d
- xorl %r9d,%r15d
+ rorl $9,%r14d
+ xorl %r9d,%edi
- rorl $5,%r13d
- addl %r10d,%r12d
+ movl %r12d,4(%rsp)
xorl %r11d,%r14d
+ andl %edx,%edi
- addl (%rbp,%rdi,4),%r12d
- andl %edx,%r15d
- movl %eax,%r10d
+ rorl $5,%r13d
+ addl %r10d,%r12d
+ xorl %r9d,%edi
rorl $11,%r14d
xorl %edx,%r13d
- xorl %r9d,%r15d
+ addl %edi,%r12d
- xorl %ebx,%r10d
+ movl %r11d,%edi
+ addl (%rbp),%r12d
xorl %r11d,%r14d
- addl %r15d,%r12d
- movl %eax,%r15d
+ xorl %eax,%edi
rorl $6,%r13d
- andl %r11d,%r10d
- andl %ebx,%r15d
+ movl %eax,%r10d
+ andl %edi,%r15d
rorl $2,%r14d
addl %r13d,%r12d
- addl %r15d,%r10d
+ xorl %r15d,%r10d
addl %r12d,%ecx
addl %r12d,%r10d
- leaq 1(%rdi),%rdi
- addl %r14d,%r10d
+ leaq 4(%rbp),%rbp
movl 12(%rsp),%r13d
- movl 0(%rsp),%r14d
- movl %r13d,%r12d
- movl %r14d,%r15d
+ movl 0(%rsp),%r15d
- rorl $11,%r12d
- xorl %r13d,%r12d
- shrl $3,%r13d
+ movl %r13d,%r12d
+ rorl $11,%r13d
+ addl %r14d,%r10d
+ movl %r15d,%r14d
+ rorl $2,%r15d
- rorl $7,%r12d
xorl %r12d,%r13d
- movl 44(%rsp),%r12d
-
- rorl $2,%r15d
+ shrl $3,%r12d
+ rorl $7,%r13d
xorl %r14d,%r15d
shrl $10,%r14d
rorl $17,%r15d
- addl %r13d,%r12d
- xorl %r15d,%r14d
+ xorl %r13d,%r12d
+ xorl %r14d,%r15d
+ addl 44(%rsp),%r12d
addl 8(%rsp),%r12d
movl %ecx,%r13d
- addl %r14d,%r12d
+ addl %r15d,%r12d
movl %r10d,%r14d
rorl $14,%r13d
movl %edx,%r15d
- movl %r12d,8(%rsp)
- rorl $9,%r14d
xorl %ecx,%r13d
+ rorl $9,%r14d
xorl %r8d,%r15d
- rorl $5,%r13d
- addl %r9d,%r12d
+ movl %r12d,8(%rsp)
xorl %r10d,%r14d
-
- addl (%rbp,%rdi,4),%r12d
andl %ecx,%r15d
- movl %r11d,%r9d
+
+ rorl $5,%r13d
+ addl %r9d,%r12d
+ xorl %r8d,%r15d
rorl $11,%r14d
xorl %ecx,%r13d
- xorl %r8d,%r15d
+ addl %r15d,%r12d
- xorl %eax,%r9d
+ movl %r10d,%r15d
+ addl (%rbp),%r12d
xorl %r10d,%r14d
- addl %r15d,%r12d
- movl %r11d,%r15d
+ xorl %r11d,%r15d
rorl $6,%r13d
- andl %r10d,%r9d
- andl %eax,%r15d
+ movl %r11d,%r9d
+ andl %r15d,%edi
rorl $2,%r14d
addl %r13d,%r12d
- addl %r15d,%r9d
+ xorl %edi,%r9d
addl %r12d,%ebx
addl %r12d,%r9d
- leaq 1(%rdi),%rdi
- addl %r14d,%r9d
+ leaq 4(%rbp),%rbp
movl 16(%rsp),%r13d
- movl 4(%rsp),%r14d
- movl %r13d,%r12d
- movl %r14d,%r15d
+ movl 4(%rsp),%edi
- rorl $11,%r12d
- xorl %r13d,%r12d
- shrl $3,%r13d
+ movl %r13d,%r12d
+ rorl $11,%r13d
+ addl %r14d,%r9d
+ movl %edi,%r14d
+ rorl $2,%edi
- rorl $7,%r12d
xorl %r12d,%r13d
- movl 48(%rsp),%r12d
-
- rorl $2,%r15d
- xorl %r14d,%r15d
+ shrl $3,%r12d
+ rorl $7,%r13d
+ xorl %r14d,%edi
shrl $10,%r14d
- rorl $17,%r15d
- addl %r13d,%r12d
- xorl %r15d,%r14d
+ rorl $17,%edi
+ xorl %r13d,%r12d
+ xorl %r14d,%edi
+ addl 48(%rsp),%r12d
addl 12(%rsp),%r12d
movl %ebx,%r13d
- addl %r14d,%r12d
+ addl %edi,%r12d
movl %r9d,%r14d
rorl $14,%r13d
- movl %ecx,%r15d
- movl %r12d,12(%rsp)
+ movl %ecx,%edi
- rorl $9,%r14d
xorl %ebx,%r13d
- xorl %edx,%r15d
+ rorl $9,%r14d
+ xorl %edx,%edi
- rorl $5,%r13d
- addl %r8d,%r12d
+ movl %r12d,12(%rsp)
xorl %r9d,%r14d
+ andl %ebx,%edi
- addl (%rbp,%rdi,4),%r12d
- andl %ebx,%r15d
- movl %r10d,%r8d
+ rorl $5,%r13d
+ addl %r8d,%r12d
+ xorl %edx,%edi
rorl $11,%r14d
xorl %ebx,%r13d
- xorl %edx,%r15d
+ addl %edi,%r12d
- xorl %r11d,%r8d
+ movl %r9d,%edi
+ addl (%rbp),%r12d
xorl %r9d,%r14d
- addl %r15d,%r12d
- movl %r10d,%r15d
+ xorl %r10d,%edi
rorl $6,%r13d
- andl %r9d,%r8d
- andl %r11d,%r15d
+ movl %r10d,%r8d
+ andl %edi,%r15d
rorl $2,%r14d
addl %r13d,%r12d
- addl %r15d,%r8d
+ xorl %r15d,%r8d
addl %r12d,%eax
addl %r12d,%r8d
- leaq 1(%rdi),%rdi
- addl %r14d,%r8d
+ leaq 20(%rbp),%rbp
movl 20(%rsp),%r13d
- movl 8(%rsp),%r14d
- movl %r13d,%r12d
- movl %r14d,%r15d
+ movl 8(%rsp),%r15d
- rorl $11,%r12d
- xorl %r13d,%r12d
- shrl $3,%r13d
+ movl %r13d,%r12d
+ rorl $11,%r13d
+ addl %r14d,%r8d
+ movl %r15d,%r14d
+ rorl $2,%r15d
- rorl $7,%r12d
xorl %r12d,%r13d
- movl 52(%rsp),%r12d
-
- rorl $2,%r15d
+ shrl $3,%r12d
+ rorl $7,%r13d
xorl %r14d,%r15d
shrl $10,%r14d
rorl $17,%r15d
- addl %r13d,%r12d
- xorl %r15d,%r14d
+ xorl %r13d,%r12d
+ xorl %r14d,%r15d
+ addl 52(%rsp),%r12d
addl 16(%rsp),%r12d
movl %eax,%r13d
- addl %r14d,%r12d
+ addl %r15d,%r12d
movl %r8d,%r14d
rorl $14,%r13d
movl %ebx,%r15d
- movl %r12d,16(%rsp)
- rorl $9,%r14d
xorl %eax,%r13d
+ rorl $9,%r14d
xorl %ecx,%r15d
- rorl $5,%r13d
- addl %edx,%r12d
+ movl %r12d,16(%rsp)
xorl %r8d,%r14d
-
- addl (%rbp,%rdi,4),%r12d
andl %eax,%r15d
- movl %r9d,%edx
+
+ rorl $5,%r13d
+ addl %edx,%r12d
+ xorl %ecx,%r15d
rorl $11,%r14d
xorl %eax,%r13d
- xorl %ecx,%r15d
+ addl %r15d,%r12d
- xorl %r10d,%edx
+ movl %r8d,%r15d
+ addl (%rbp),%r12d
xorl %r8d,%r14d
- addl %r15d,%r12d
- movl %r9d,%r15d
+ xorl %r9d,%r15d
rorl $6,%r13d
- andl %r8d,%edx
- andl %r10d,%r15d
+ movl %r9d,%edx
+ andl %r15d,%edi
rorl $2,%r14d
addl %r13d,%r12d
- addl %r15d,%edx
+ xorl %edi,%edx
addl %r12d,%r11d
addl %r12d,%edx
- leaq 1(%rdi),%rdi
- addl %r14d,%edx
+ leaq 4(%rbp),%rbp
movl 24(%rsp),%r13d
- movl 12(%rsp),%r14d
- movl %r13d,%r12d
- movl %r14d,%r15d
+ movl 12(%rsp),%edi
- rorl $11,%r12d
- xorl %r13d,%r12d
- shrl $3,%r13d
+ movl %r13d,%r12d
+ rorl $11,%r13d
+ addl %r14d,%edx
+ movl %edi,%r14d
+ rorl $2,%edi
- rorl $7,%r12d
xorl %r12d,%r13d
- movl 56(%rsp),%r12d
-
- rorl $2,%r15d
- xorl %r14d,%r15d
+ shrl $3,%r12d
+ rorl $7,%r13d
+ xorl %r14d,%edi
shrl $10,%r14d
- rorl $17,%r15d
- addl %r13d,%r12d
- xorl %r15d,%r14d
+ rorl $17,%edi
+ xorl %r13d,%r12d
+ xorl %r14d,%edi
+ addl 56(%rsp),%r12d
addl 20(%rsp),%r12d
movl %r11d,%r13d
- addl %r14d,%r12d
+ addl %edi,%r12d
movl %edx,%r14d
rorl $14,%r13d
- movl %eax,%r15d
- movl %r12d,20(%rsp)
+ movl %eax,%edi
- rorl $9,%r14d
xorl %r11d,%r13d
- xorl %ebx,%r15d
+ rorl $9,%r14d
+ xorl %ebx,%edi
- rorl $5,%r13d
- addl %ecx,%r12d
+ movl %r12d,20(%rsp)
xorl %edx,%r14d
+ andl %r11d,%edi
- addl (%rbp,%rdi,4),%r12d
- andl %r11d,%r15d
- movl %r8d,%ecx
+ rorl $5,%r13d
+ addl %ecx,%r12d
+ xorl %ebx,%edi
rorl $11,%r14d
xorl %r11d,%r13d
- xorl %ebx,%r15d
+ addl %edi,%r12d
- xorl %r9d,%ecx
+ movl %edx,%edi
+ addl (%rbp),%r12d
xorl %edx,%r14d
- addl %r15d,%r12d
- movl %r8d,%r15d
+ xorl %r8d,%edi
rorl $6,%r13d
- andl %edx,%ecx
- andl %r9d,%r15d
+ movl %r8d,%ecx
+ andl %edi,%r15d
rorl $2,%r14d
addl %r13d,%r12d
- addl %r15d,%ecx
+ xorl %r15d,%ecx
addl %r12d,%r10d
addl %r12d,%ecx
- leaq 1(%rdi),%rdi
- addl %r14d,%ecx
+ leaq 4(%rbp),%rbp
movl 28(%rsp),%r13d
- movl 16(%rsp),%r14d
- movl %r13d,%r12d
- movl %r14d,%r15d
+ movl 16(%rsp),%r15d
- rorl $11,%r12d
- xorl %r13d,%r12d
- shrl $3,%r13d
+ movl %r13d,%r12d
+ rorl $11,%r13d
+ addl %r14d,%ecx
+ movl %r15d,%r14d
+ rorl $2,%r15d
- rorl $7,%r12d
xorl %r12d,%r13d
- movl 60(%rsp),%r12d
-
- rorl $2,%r15d
+ shrl $3,%r12d
+ rorl $7,%r13d
xorl %r14d,%r15d
shrl $10,%r14d
rorl $17,%r15d
- addl %r13d,%r12d
- xorl %r15d,%r14d
+ xorl %r13d,%r12d
+ xorl %r14d,%r15d
+ addl 60(%rsp),%r12d
addl 24(%rsp),%r12d
movl %r10d,%r13d
- addl %r14d,%r12d
+ addl %r15d,%r12d
movl %ecx,%r14d
rorl $14,%r13d
movl %r11d,%r15d
- movl %r12d,24(%rsp)
- rorl $9,%r14d
xorl %r10d,%r13d
+ rorl $9,%r14d
xorl %eax,%r15d
- rorl $5,%r13d
- addl %ebx,%r12d
+ movl %r12d,24(%rsp)
xorl %ecx,%r14d
-
- addl (%rbp,%rdi,4),%r12d
andl %r10d,%r15d
- movl %edx,%ebx
+
+ rorl $5,%r13d
+ addl %ebx,%r12d
+ xorl %eax,%r15d
rorl $11,%r14d
xorl %r10d,%r13d
- xorl %eax,%r15d
+ addl %r15d,%r12d
- xorl %r8d,%ebx
+ movl %ecx,%r15d
+ addl (%rbp),%r12d
xorl %ecx,%r14d
- addl %r15d,%r12d
- movl %edx,%r15d
+ xorl %edx,%r15d
rorl $6,%r13d
- andl %ecx,%ebx
- andl %r8d,%r15d
+ movl %edx,%ebx
+ andl %r15d,%edi
rorl $2,%r14d
addl %r13d,%r12d
- addl %r15d,%ebx
+ xorl %edi,%ebx
addl %r12d,%r9d
addl %r12d,%ebx
- leaq 1(%rdi),%rdi
- addl %r14d,%ebx
+ leaq 4(%rbp),%rbp
movl 32(%rsp),%r13d
- movl 20(%rsp),%r14d
- movl %r13d,%r12d
- movl %r14d,%r15d
+ movl 20(%rsp),%edi
- rorl $11,%r12d
- xorl %r13d,%r12d
- shrl $3,%r13d
+ movl %r13d,%r12d
+ rorl $11,%r13d
+ addl %r14d,%ebx
+ movl %edi,%r14d
+ rorl $2,%edi
- rorl $7,%r12d
xorl %r12d,%r13d
- movl 0(%rsp),%r12d
-
- rorl $2,%r15d
- xorl %r14d,%r15d
+ shrl $3,%r12d
+ rorl $7,%r13d
+ xorl %r14d,%edi
shrl $10,%r14d
- rorl $17,%r15d
- addl %r13d,%r12d
- xorl %r15d,%r14d
+ rorl $17,%edi
+ xorl %r13d,%r12d
+ xorl %r14d,%edi
+ addl 0(%rsp),%r12d
addl 28(%rsp),%r12d
movl %r9d,%r13d
- addl %r14d,%r12d
+ addl %edi,%r12d
movl %ebx,%r14d
rorl $14,%r13d
- movl %r10d,%r15d
- movl %r12d,28(%rsp)
+ movl %r10d,%edi
- rorl $9,%r14d
xorl %r9d,%r13d
- xorl %r11d,%r15d
+ rorl $9,%r14d
+ xorl %r11d,%edi
- rorl $5,%r13d
- addl %eax,%r12d
+ movl %r12d,28(%rsp)
xorl %ebx,%r14d
+ andl %r9d,%edi
- addl (%rbp,%rdi,4),%r12d
- andl %r9d,%r15d
- movl %ecx,%eax
+ rorl $5,%r13d
+ addl %eax,%r12d
+ xorl %r11d,%edi
rorl $11,%r14d
xorl %r9d,%r13d
- xorl %r11d,%r15d
+ addl %edi,%r12d
- xorl %edx,%eax
+ movl %ebx,%edi
+ addl (%rbp),%r12d
xorl %ebx,%r14d
- addl %r15d,%r12d
- movl %ecx,%r15d
+ xorl %ecx,%edi
rorl $6,%r13d
- andl %ebx,%eax
- andl %edx,%r15d
+ movl %ecx,%eax
+ andl %edi,%r15d
rorl $2,%r14d
addl %r13d,%r12d
- addl %r15d,%eax
+ xorl %r15d,%eax
addl %r12d,%r8d
addl %r12d,%eax
- leaq 1(%rdi),%rdi
- addl %r14d,%eax
+ leaq 20(%rbp),%rbp
movl 36(%rsp),%r13d
- movl 24(%rsp),%r14d
- movl %r13d,%r12d
- movl %r14d,%r15d
+ movl 24(%rsp),%r15d
- rorl $11,%r12d
- xorl %r13d,%r12d
- shrl $3,%r13d
+ movl %r13d,%r12d
+ rorl $11,%r13d
+ addl %r14d,%eax
+ movl %r15d,%r14d
+ rorl $2,%r15d
- rorl $7,%r12d
xorl %r12d,%r13d
- movl 4(%rsp),%r12d
-
- rorl $2,%r15d
+ shrl $3,%r12d
+ rorl $7,%r13d
xorl %r14d,%r15d
shrl $10,%r14d
rorl $17,%r15d
- addl %r13d,%r12d
- xorl %r15d,%r14d
+ xorl %r13d,%r12d
+ xorl %r14d,%r15d
+ addl 4(%rsp),%r12d
addl 32(%rsp),%r12d
movl %r8d,%r13d
- addl %r14d,%r12d
+ addl %r15d,%r12d
movl %eax,%r14d
rorl $14,%r13d
movl %r9d,%r15d
- movl %r12d,32(%rsp)
- rorl $9,%r14d
xorl %r8d,%r13d
+ rorl $9,%r14d
xorl %r10d,%r15d
- rorl $5,%r13d
- addl %r11d,%r12d
+ movl %r12d,32(%rsp)
xorl %eax,%r14d
-
- addl (%rbp,%rdi,4),%r12d
andl %r8d,%r15d
- movl %ebx,%r11d
+
+ rorl $5,%r13d
+ addl %r11d,%r12d
+ xorl %r10d,%r15d
rorl $11,%r14d
xorl %r8d,%r13d
- xorl %r10d,%r15d
+ addl %r15d,%r12d
- xorl %ecx,%r11d
+ movl %eax,%r15d
+ addl (%rbp),%r12d
xorl %eax,%r14d
- addl %r15d,%r12d
- movl %ebx,%r15d
+ xorl %ebx,%r15d
rorl $6,%r13d
- andl %eax,%r11d
- andl %ecx,%r15d
+ movl %ebx,%r11d
+ andl %r15d,%edi
rorl $2,%r14d
addl %r13d,%r12d
- addl %r15d,%r11d
+ xorl %edi,%r11d
addl %r12d,%edx
addl %r12d,%r11d
- leaq 1(%rdi),%rdi
- addl %r14d,%r11d
+ leaq 4(%rbp),%rbp
movl 40(%rsp),%r13d
- movl 28(%rsp),%r14d
- movl %r13d,%r12d
- movl %r14d,%r15d
+ movl 28(%rsp),%edi
- rorl $11,%r12d
- xorl %r13d,%r12d
- shrl $3,%r13d
+ movl %r13d,%r12d
+ rorl $11,%r13d
+ addl %r14d,%r11d
+ movl %edi,%r14d
+ rorl $2,%edi
- rorl $7,%r12d
xorl %r12d,%r13d
- movl 8(%rsp),%r12d
-
- rorl $2,%r15d
- xorl %r14d,%r15d
+ shrl $3,%r12d
+ rorl $7,%r13d
+ xorl %r14d,%edi
shrl $10,%r14d
- rorl $17,%r15d
- addl %r13d,%r12d
- xorl %r15d,%r14d
+ rorl $17,%edi
+ xorl %r13d,%r12d
+ xorl %r14d,%edi
+ addl 8(%rsp),%r12d
addl 36(%rsp),%r12d
movl %edx,%r13d
- addl %r14d,%r12d
+ addl %edi,%r12d
movl %r11d,%r14d
rorl $14,%r13d
- movl %r8d,%r15d
- movl %r12d,36(%rsp)
+ movl %r8d,%edi
- rorl $9,%r14d
xorl %edx,%r13d
- xorl %r9d,%r15d
+ rorl $9,%r14d
+ xorl %r9d,%edi
- rorl $5,%r13d
- addl %r10d,%r12d
+ movl %r12d,36(%rsp)
xorl %r11d,%r14d
+ andl %edx,%edi
- addl (%rbp,%rdi,4),%r12d
- andl %edx,%r15d
- movl %eax,%r10d
+ rorl $5,%r13d
+ addl %r10d,%r12d
+ xorl %r9d,%edi
rorl $11,%r14d
xorl %edx,%r13d
- xorl %r9d,%r15d
+ addl %edi,%r12d
- xorl %ebx,%r10d
+ movl %r11d,%edi
+ addl (%rbp),%r12d
xorl %r11d,%r14d
- addl %r15d,%r12d
- movl %eax,%r15d
+ xorl %eax,%edi
rorl $6,%r13d
- andl %r11d,%r10d
- andl %ebx,%r15d
+ movl %eax,%r10d
+ andl %edi,%r15d
rorl $2,%r14d
addl %r13d,%r12d
- addl %r15d,%r10d
+ xorl %r15d,%r10d
addl %r12d,%ecx
addl %r12d,%r10d
- leaq 1(%rdi),%rdi
- addl %r14d,%r10d
+ leaq 4(%rbp),%rbp
movl 44(%rsp),%r13d
- movl 32(%rsp),%r14d
- movl %r13d,%r12d
- movl %r14d,%r15d
+ movl 32(%rsp),%r15d
- rorl $11,%r12d
- xorl %r13d,%r12d
- shrl $3,%r13d
+ movl %r13d,%r12d
+ rorl $11,%r13d
+ addl %r14d,%r10d
+ movl %r15d,%r14d
+ rorl $2,%r15d
- rorl $7,%r12d
xorl %r12d,%r13d
- movl 12(%rsp),%r12d
-
- rorl $2,%r15d
+ shrl $3,%r12d
+ rorl $7,%r13d
xorl %r14d,%r15d
shrl $10,%r14d
rorl $17,%r15d
- addl %r13d,%r12d
- xorl %r15d,%r14d
+ xorl %r13d,%r12d
+ xorl %r14d,%r15d
+ addl 12(%rsp),%r12d
addl 40(%rsp),%r12d
movl %ecx,%r13d
- addl %r14d,%r12d
+ addl %r15d,%r12d
movl %r10d,%r14d
rorl $14,%r13d
movl %edx,%r15d
- movl %r12d,40(%rsp)
- rorl $9,%r14d
xorl %ecx,%r13d
+ rorl $9,%r14d
xorl %r8d,%r15d
- rorl $5,%r13d
- addl %r9d,%r12d
+ movl %r12d,40(%rsp)
xorl %r10d,%r14d
-
- addl (%rbp,%rdi,4),%r12d
andl %ecx,%r15d
- movl %r11d,%r9d
+
+ rorl $5,%r13d
+ addl %r9d,%r12d
+ xorl %r8d,%r15d
rorl $11,%r14d
xorl %ecx,%r13d
- xorl %r8d,%r15d
+ addl %r15d,%r12d
- xorl %eax,%r9d
+ movl %r10d,%r15d
+ addl (%rbp),%r12d
xorl %r10d,%r14d
- addl %r15d,%r12d
- movl %r11d,%r15d
+ xorl %r11d,%r15d
rorl $6,%r13d
- andl %r10d,%r9d
- andl %eax,%r15d
+ movl %r11d,%r9d
+ andl %r15d,%edi
rorl $2,%r14d
addl %r13d,%r12d
- addl %r15d,%r9d
+ xorl %edi,%r9d
addl %r12d,%ebx
addl %r12d,%r9d
- leaq 1(%rdi),%rdi
- addl %r14d,%r9d
+ leaq 4(%rbp),%rbp
movl 48(%rsp),%r13d
- movl 36(%rsp),%r14d
- movl %r13d,%r12d
- movl %r14d,%r15d
+ movl 36(%rsp),%edi
- rorl $11,%r12d
- xorl %r13d,%r12d
- shrl $3,%r13d
+ movl %r13d,%r12d
+ rorl $11,%r13d
+ addl %r14d,%r9d
+ movl %edi,%r14d
+ rorl $2,%edi
- rorl $7,%r12d
xorl %r12d,%r13d
- movl 16(%rsp),%r12d
-
- rorl $2,%r15d
- xorl %r14d,%r15d
+ shrl $3,%r12d
+ rorl $7,%r13d
+ xorl %r14d,%edi
shrl $10,%r14d
- rorl $17,%r15d
- addl %r13d,%r12d
- xorl %r15d,%r14d
+ rorl $17,%edi
+ xorl %r13d,%r12d
+ xorl %r14d,%edi
+ addl 16(%rsp),%r12d
addl 44(%rsp),%r12d
movl %ebx,%r13d
- addl %r14d,%r12d
+ addl %edi,%r12d
movl %r9d,%r14d
rorl $14,%r13d
- movl %ecx,%r15d
- movl %r12d,44(%rsp)
+ movl %ecx,%edi
- rorl $9,%r14d
xorl %ebx,%r13d
- xorl %edx,%r15d
+ rorl $9,%r14d
+ xorl %edx,%edi
- rorl $5,%r13d
- addl %r8d,%r12d
+ movl %r12d,44(%rsp)
xorl %r9d,%r14d
+ andl %ebx,%edi
- addl (%rbp,%rdi,4),%r12d
- andl %ebx,%r15d
- movl %r10d,%r8d
+ rorl $5,%r13d
+ addl %r8d,%r12d
+ xorl %edx,%edi
rorl $11,%r14d
xorl %ebx,%r13d
- xorl %edx,%r15d
+ addl %edi,%r12d
- xorl %r11d,%r8d
+ movl %r9d,%edi
+ addl (%rbp),%r12d
xorl %r9d,%r14d
- addl %r15d,%r12d
- movl %r10d,%r15d
+ xorl %r10d,%edi
rorl $6,%r13d
- andl %r9d,%r8d
- andl %r11d,%r15d
+ movl %r10d,%r8d
+ andl %edi,%r15d
rorl $2,%r14d
addl %r13d,%r12d
- addl %r15d,%r8d
+ xorl %r15d,%r8d
addl %r12d,%eax
addl %r12d,%r8d
- leaq 1(%rdi),%rdi
- addl %r14d,%r8d
+ leaq 20(%rbp),%rbp
movl 52(%rsp),%r13d
- movl 40(%rsp),%r14d
- movl %r13d,%r12d
- movl %r14d,%r15d
+ movl 40(%rsp),%r15d
- rorl $11,%r12d
- xorl %r13d,%r12d
- shrl $3,%r13d
+ movl %r13d,%r12d
+ rorl $11,%r13d
+ addl %r14d,%r8d
+ movl %r15d,%r14d
+ rorl $2,%r15d
- rorl $7,%r12d
xorl %r12d,%r13d
- movl 20(%rsp),%r12d
-
- rorl $2,%r15d
+ shrl $3,%r12d
+ rorl $7,%r13d
xorl %r14d,%r15d
shrl $10,%r14d
rorl $17,%r15d
- addl %r13d,%r12d
- xorl %r15d,%r14d
+ xorl %r13d,%r12d
+ xorl %r14d,%r15d
+ addl 20(%rsp),%r12d
addl 48(%rsp),%r12d
movl %eax,%r13d
- addl %r14d,%r12d
+ addl %r15d,%r12d
movl %r8d,%r14d
rorl $14,%r13d
movl %ebx,%r15d
- movl %r12d,48(%rsp)
- rorl $9,%r14d
xorl %eax,%r13d
+ rorl $9,%r14d
xorl %ecx,%r15d
- rorl $5,%r13d
- addl %edx,%r12d
+ movl %r12d,48(%rsp)
xorl %r8d,%r14d
-
- addl (%rbp,%rdi,4),%r12d
andl %eax,%r15d
- movl %r9d,%edx
+
+ rorl $5,%r13d
+ addl %edx,%r12d
+ xorl %ecx,%r15d
rorl $11,%r14d
xorl %eax,%r13d
- xorl %ecx,%r15d
+ addl %r15d,%r12d
- xorl %r10d,%edx
+ movl %r8d,%r15d
+ addl (%rbp),%r12d
xorl %r8d,%r14d
- addl %r15d,%r12d
- movl %r9d,%r15d
+ xorl %r9d,%r15d
rorl $6,%r13d
- andl %r8d,%edx
- andl %r10d,%r15d
+ movl %r9d,%edx
+ andl %r15d,%edi
rorl $2,%r14d
addl %r13d,%r12d
- addl %r15d,%edx
+ xorl %edi,%edx
addl %r12d,%r11d
addl %r12d,%edx
- leaq 1(%rdi),%rdi
- addl %r14d,%edx
+ leaq 4(%rbp),%rbp
movl 56(%rsp),%r13d
- movl 44(%rsp),%r14d
- movl %r13d,%r12d
- movl %r14d,%r15d
+ movl 44(%rsp),%edi
- rorl $11,%r12d
- xorl %r13d,%r12d
- shrl $3,%r13d
+ movl %r13d,%r12d
+ rorl $11,%r13d
+ addl %r14d,%edx
+ movl %edi,%r14d
+ rorl $2,%edi
- rorl $7,%r12d
xorl %r12d,%r13d
- movl 24(%rsp),%r12d
-
- rorl $2,%r15d
- xorl %r14d,%r15d
+ shrl $3,%r12d
+ rorl $7,%r13d
+ xorl %r14d,%edi
shrl $10,%r14d
- rorl $17,%r15d
- addl %r13d,%r12d
- xorl %r15d,%r14d
+ rorl $17,%edi
+ xorl %r13d,%r12d
+ xorl %r14d,%edi
+ addl 24(%rsp),%r12d
addl 52(%rsp),%r12d
movl %r11d,%r13d
- addl %r14d,%r12d
+ addl %edi,%r12d
movl %edx,%r14d
rorl $14,%r13d
- movl %eax,%r15d
- movl %r12d,52(%rsp)
+ movl %eax,%edi
- rorl $9,%r14d
xorl %r11d,%r13d
- xorl %ebx,%r15d
+ rorl $9,%r14d
+ xorl %ebx,%edi
- rorl $5,%r13d
- addl %ecx,%r12d
+ movl %r12d,52(%rsp)
xorl %edx,%r14d
+ andl %r11d,%edi
- addl (%rbp,%rdi,4),%r12d
- andl %r11d,%r15d
- movl %r8d,%ecx
+ rorl $5,%r13d
+ addl %ecx,%r12d
+ xorl %ebx,%edi
rorl $11,%r14d
xorl %r11d,%r13d
- xorl %ebx,%r15d
+ addl %edi,%r12d
- xorl %r9d,%ecx
+ movl %edx,%edi
+ addl (%rbp),%r12d
xorl %edx,%r14d
- addl %r15d,%r12d
- movl %r8d,%r15d
+ xorl %r8d,%edi
rorl $6,%r13d
- andl %edx,%ecx
- andl %r9d,%r15d
+ movl %r8d,%ecx
+ andl %edi,%r15d
rorl $2,%r14d
addl %r13d,%r12d
- addl %r15d,%ecx
+ xorl %r15d,%ecx
addl %r12d,%r10d
addl %r12d,%ecx
- leaq 1(%rdi),%rdi
- addl %r14d,%ecx
+ leaq 4(%rbp),%rbp
movl 60(%rsp),%r13d
- movl 48(%rsp),%r14d
- movl %r13d,%r12d
- movl %r14d,%r15d
+ movl 48(%rsp),%r15d
- rorl $11,%r12d
- xorl %r13d,%r12d
- shrl $3,%r13d
+ movl %r13d,%r12d
+ rorl $11,%r13d
+ addl %r14d,%ecx
+ movl %r15d,%r14d
+ rorl $2,%r15d
- rorl $7,%r12d
xorl %r12d,%r13d
- movl 28(%rsp),%r12d
-
- rorl $2,%r15d
+ shrl $3,%r12d
+ rorl $7,%r13d
xorl %r14d,%r15d
shrl $10,%r14d
rorl $17,%r15d
- addl %r13d,%r12d
- xorl %r15d,%r14d
+ xorl %r13d,%r12d
+ xorl %r14d,%r15d
+ addl 28(%rsp),%r12d
addl 56(%rsp),%r12d
movl %r10d,%r13d
- addl %r14d,%r12d
+ addl %r15d,%r12d
movl %ecx,%r14d
rorl $14,%r13d
movl %r11d,%r15d
- movl %r12d,56(%rsp)
- rorl $9,%r14d
xorl %r10d,%r13d
+ rorl $9,%r14d
xorl %eax,%r15d
- rorl $5,%r13d
- addl %ebx,%r12d
+ movl %r12d,56(%rsp)
xorl %ecx,%r14d
-
- addl (%rbp,%rdi,4),%r12d
andl %r10d,%r15d
- movl %edx,%ebx
+
+ rorl $5,%r13d
+ addl %ebx,%r12d
+ xorl %eax,%r15d
rorl $11,%r14d
xorl %r10d,%r13d
- xorl %eax,%r15d
+ addl %r15d,%r12d
- xorl %r8d,%ebx
+ movl %ecx,%r15d
+ addl (%rbp),%r12d
xorl %ecx,%r14d
- addl %r15d,%r12d
- movl %edx,%r15d
+ xorl %edx,%r15d
rorl $6,%r13d
- andl %ecx,%ebx
- andl %r8d,%r15d
+ movl %edx,%ebx
+ andl %r15d,%edi
rorl $2,%r14d
addl %r13d,%r12d
- addl %r15d,%ebx
+ xorl %edi,%ebx
addl %r12d,%r9d
addl %r12d,%ebx
- leaq 1(%rdi),%rdi
- addl %r14d,%ebx
+ leaq 4(%rbp),%rbp
movl 0(%rsp),%r13d
- movl 52(%rsp),%r14d
- movl %r13d,%r12d
- movl %r14d,%r15d
+ movl 52(%rsp),%edi
- rorl $11,%r12d
- xorl %r13d,%r12d
- shrl $3,%r13d
+ movl %r13d,%r12d
+ rorl $11,%r13d
+ addl %r14d,%ebx
+ movl %edi,%r14d
+ rorl $2,%edi
- rorl $7,%r12d
xorl %r12d,%r13d
- movl 32(%rsp),%r12d
-
- rorl $2,%r15d
- xorl %r14d,%r15d
+ shrl $3,%r12d
+ rorl $7,%r13d
+ xorl %r14d,%edi
shrl $10,%r14d
- rorl $17,%r15d
- addl %r13d,%r12d
- xorl %r15d,%r14d
+ rorl $17,%edi
+ xorl %r13d,%r12d
+ xorl %r14d,%edi
+ addl 32(%rsp),%r12d
addl 60(%rsp),%r12d
movl %r9d,%r13d
- addl %r14d,%r12d
+ addl %edi,%r12d
movl %ebx,%r14d
rorl $14,%r13d
- movl %r10d,%r15d
- movl %r12d,60(%rsp)
+ movl %r10d,%edi
- rorl $9,%r14d
xorl %r9d,%r13d
- xorl %r11d,%r15d
+ rorl $9,%r14d
+ xorl %r11d,%edi
- rorl $5,%r13d
- addl %eax,%r12d
+ movl %r12d,60(%rsp)
xorl %ebx,%r14d
+ andl %r9d,%edi
- addl (%rbp,%rdi,4),%r12d
- andl %r9d,%r15d
- movl %ecx,%eax
+ rorl $5,%r13d
+ addl %eax,%r12d
+ xorl %r11d,%edi
rorl $11,%r14d
xorl %r9d,%r13d
- xorl %r11d,%r15d
+ addl %edi,%r12d
- xorl %edx,%eax
+ movl %ebx,%edi
+ addl (%rbp),%r12d
xorl %ebx,%r14d
- addl %r15d,%r12d
- movl %ecx,%r15d
+ xorl %ecx,%edi
rorl $6,%r13d
- andl %ebx,%eax
- andl %edx,%r15d
+ movl %ecx,%eax
+ andl %edi,%r15d
rorl $2,%r14d
addl %r13d,%r12d
- addl %r15d,%eax
+ xorl %r15d,%eax
addl %r12d,%r8d
addl %r12d,%eax
- leaq 1(%rdi),%rdi
- addl %r14d,%eax
- cmpq $64,%rdi
- jb .Lrounds_16_xx
+ leaq 20(%rbp),%rbp
+ cmpb $0,3(%rbp)
+ jnz .Lrounds_16_xx
movq 64+0(%rsp),%rdi
+ addl %r14d,%eax
leaq 64(%rsi),%rsi
addl 0(%rdi),%eax
@@ -1762,18 +1707,1344 @@ sha256_block_data_order:
.type K256,@object
K256:
.long 0x428a2f98,0x71374491,0xb5c0fbcf,0xe9b5dba5
+.long 0x428a2f98,0x71374491,0xb5c0fbcf,0xe9b5dba5
+.long 0x3956c25b,0x59f111f1,0x923f82a4,0xab1c5ed5
.long 0x3956c25b,0x59f111f1,0x923f82a4,0xab1c5ed5
.long 0xd807aa98,0x12835b01,0x243185be,0x550c7dc3
+.long 0xd807aa98,0x12835b01,0x243185be,0x550c7dc3
+.long 0x72be5d74,0x80deb1fe,0x9bdc06a7,0xc19bf174
.long 0x72be5d74,0x80deb1fe,0x9bdc06a7,0xc19bf174
.long 0xe49b69c1,0xefbe4786,0x0fc19dc6,0x240ca1cc
+.long 0xe49b69c1,0xefbe4786,0x0fc19dc6,0x240ca1cc
+.long 0x2de92c6f,0x4a7484aa,0x5cb0a9dc,0x76f988da
.long 0x2de92c6f,0x4a7484aa,0x5cb0a9dc,0x76f988da
.long 0x983e5152,0xa831c66d,0xb00327c8,0xbf597fc7
+.long 0x983e5152,0xa831c66d,0xb00327c8,0xbf597fc7
.long 0xc6e00bf3,0xd5a79147,0x06ca6351,0x14292967
+.long 0xc6e00bf3,0xd5a79147,0x06ca6351,0x14292967
+.long 0x27b70a85,0x2e1b2138,0x4d2c6dfc,0x53380d13
.long 0x27b70a85,0x2e1b2138,0x4d2c6dfc,0x53380d13
.long 0x650a7354,0x766a0abb,0x81c2c92e,0x92722c85
+.long 0x650a7354,0x766a0abb,0x81c2c92e,0x92722c85
+.long 0xa2bfe8a1,0xa81a664b,0xc24b8b70,0xc76c51a3
.long 0xa2bfe8a1,0xa81a664b,0xc24b8b70,0xc76c51a3
.long 0xd192e819,0xd6990624,0xf40e3585,0x106aa070
+.long 0xd192e819,0xd6990624,0xf40e3585,0x106aa070
.long 0x19a4c116,0x1e376c08,0x2748774c,0x34b0bcb5
+.long 0x19a4c116,0x1e376c08,0x2748774c,0x34b0bcb5
+.long 0x391c0cb3,0x4ed8aa4a,0x5b9cca4f,0x682e6ff3
.long 0x391c0cb3,0x4ed8aa4a,0x5b9cca4f,0x682e6ff3
.long 0x748f82ee,0x78a5636f,0x84c87814,0x8cc70208
+.long 0x748f82ee,0x78a5636f,0x84c87814,0x8cc70208
.long 0x90befffa,0xa4506ceb,0xbef9a3f7,0xc67178f2
+.long 0x90befffa,0xa4506ceb,0xbef9a3f7,0xc67178f2
+
+.long 0x00010203,0x04050607,0x08090a0b,0x0c0d0e0f
+.long 0x00010203,0x04050607,0x08090a0b,0x0c0d0e0f
+.long 0x03020100,0x0b0a0908,0xffffffff,0xffffffff
+.long 0x03020100,0x0b0a0908,0xffffffff,0xffffffff
+.long 0xffffffff,0xffffffff,0x03020100,0x0b0a0908
+.long 0xffffffff,0xffffffff,0x03020100,0x0b0a0908
+.byte 83,72,65,50,53,54,32,98,108,111,99,107,32,116,114,97,110,115,102,111,114,109,32,102,111,114,32,120,56,54,95,54,52,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0
+.type sha256_block_data_order_shaext,@function
+.align 64
+sha256_block_data_order_shaext:
+_shaext_shortcut:
+ leaq K256+128(%rip),%rcx
+ movdqu (%rdi),%xmm1
+ movdqu 16(%rdi),%xmm2
+ movdqa 512-128(%rcx),%xmm7
+
+ pshufd $27,%xmm1,%xmm0
+ pshufd $177,%xmm1,%xmm1
+ pshufd $27,%xmm2,%xmm2
+ movdqa %xmm7,%xmm8
+.byte 102,15,58,15,202,8
+ punpcklqdq %xmm0,%xmm2
+ jmp .Loop_shaext
+
+.align 16
+.Loop_shaext:
+ movdqu (%rsi),%xmm3
+ movdqu 16(%rsi),%xmm4
+ movdqu 32(%rsi),%xmm5
+.byte 102,15,56,0,223
+ movdqu 48(%rsi),%xmm6
+
+ movdqa 0-128(%rcx),%xmm0
+ paddd %xmm3,%xmm0
+.byte 102,15,56,0,231
+ movdqa %xmm2,%xmm10
+.byte 15,56,203,209
+ pshufd $14,%xmm0,%xmm0
+ nop
+ movdqa %xmm1,%xmm9
+.byte 15,56,203,202
+
+ movdqa 32-128(%rcx),%xmm0
+ paddd %xmm4,%xmm0
+.byte 102,15,56,0,239
+.byte 15,56,203,209
+ pshufd $14,%xmm0,%xmm0
+ leaq 64(%rsi),%rsi
+.byte 15,56,204,220
+.byte 15,56,203,202
+
+ movdqa 64-128(%rcx),%xmm0
+ paddd %xmm5,%xmm0
+.byte 102,15,56,0,247
+.byte 15,56,203,209
+ pshufd $14,%xmm0,%xmm0
+ movdqa %xmm6,%xmm7
+.byte 102,15,58,15,253,4
+ nop
+ paddd %xmm7,%xmm3
+.byte 15,56,204,229
+.byte 15,56,203,202
+
+ movdqa 96-128(%rcx),%xmm0
+ paddd %xmm6,%xmm0
+.byte 15,56,205,222
+.byte 15,56,203,209
+ pshufd $14,%xmm0,%xmm0
+ movdqa %xmm3,%xmm7
+.byte 102,15,58,15,254,4
+ nop
+ paddd %xmm7,%xmm4
+.byte 15,56,204,238
+.byte 15,56,203,202
+ movdqa 128-128(%rcx),%xmm0
+ paddd %xmm3,%xmm0
+.byte 15,56,205,227
+.byte 15,56,203,209
+ pshufd $14,%xmm0,%xmm0
+ movdqa %xmm4,%xmm7
+.byte 102,15,58,15,251,4
+ nop
+ paddd %xmm7,%xmm5
+.byte 15,56,204,243
+.byte 15,56,203,202
+ movdqa 160-128(%rcx),%xmm0
+ paddd %xmm4,%xmm0
+.byte 15,56,205,236
+.byte 15,56,203,209
+ pshufd $14,%xmm0,%xmm0
+ movdqa %xmm5,%xmm7
+.byte 102,15,58,15,252,4
+ nop
+ paddd %xmm7,%xmm6
+.byte 15,56,204,220
+.byte 15,56,203,202
+ movdqa 192-128(%rcx),%xmm0
+ paddd %xmm5,%xmm0
+.byte 15,56,205,245
+.byte 15,56,203,209
+ pshufd $14,%xmm0,%xmm0
+ movdqa %xmm6,%xmm7
+.byte 102,15,58,15,253,4
+ nop
+ paddd %xmm7,%xmm3
+.byte 15,56,204,229
+.byte 15,56,203,202
+ movdqa 224-128(%rcx),%xmm0
+ paddd %xmm6,%xmm0
+.byte 15,56,205,222
+.byte 15,56,203,209
+ pshufd $14,%xmm0,%xmm0
+ movdqa %xmm3,%xmm7
+.byte 102,15,58,15,254,4
+ nop
+ paddd %xmm7,%xmm4
+.byte 15,56,204,238
+.byte 15,56,203,202
+ movdqa 256-128(%rcx),%xmm0
+ paddd %xmm3,%xmm0
+.byte 15,56,205,227
+.byte 15,56,203,209
+ pshufd $14,%xmm0,%xmm0
+ movdqa %xmm4,%xmm7
+.byte 102,15,58,15,251,4
+ nop
+ paddd %xmm7,%xmm5
+.byte 15,56,204,243
+.byte 15,56,203,202
+ movdqa 288-128(%rcx),%xmm0
+ paddd %xmm4,%xmm0
+.byte 15,56,205,236
+.byte 15,56,203,209
+ pshufd $14,%xmm0,%xmm0
+ movdqa %xmm5,%xmm7
+.byte 102,15,58,15,252,4
+ nop
+ paddd %xmm7,%xmm6
+.byte 15,56,204,220
+.byte 15,56,203,202
+ movdqa 320-128(%rcx),%xmm0
+ paddd %xmm5,%xmm0
+.byte 15,56,205,245
+.byte 15,56,203,209
+ pshufd $14,%xmm0,%xmm0
+ movdqa %xmm6,%xmm7
+.byte 102,15,58,15,253,4
+ nop
+ paddd %xmm7,%xmm3
+.byte 15,56,204,229
+.byte 15,56,203,202
+ movdqa 352-128(%rcx),%xmm0
+ paddd %xmm6,%xmm0
+.byte 15,56,205,222
+.byte 15,56,203,209
+ pshufd $14,%xmm0,%xmm0
+ movdqa %xmm3,%xmm7
+.byte 102,15,58,15,254,4
+ nop
+ paddd %xmm7,%xmm4
+.byte 15,56,204,238
+.byte 15,56,203,202
+ movdqa 384-128(%rcx),%xmm0
+ paddd %xmm3,%xmm0
+.byte 15,56,205,227
+.byte 15,56,203,209
+ pshufd $14,%xmm0,%xmm0
+ movdqa %xmm4,%xmm7
+.byte 102,15,58,15,251,4
+ nop
+ paddd %xmm7,%xmm5
+.byte 15,56,204,243
+.byte 15,56,203,202
+ movdqa 416-128(%rcx),%xmm0
+ paddd %xmm4,%xmm0
+.byte 15,56,205,236
+.byte 15,56,203,209
+ pshufd $14,%xmm0,%xmm0
+ movdqa %xmm5,%xmm7
+.byte 102,15,58,15,252,4
+.byte 15,56,203,202
+ paddd %xmm7,%xmm6
+
+ movdqa 448-128(%rcx),%xmm0
+ paddd %xmm5,%xmm0
+.byte 15,56,203,209
+ pshufd $14,%xmm0,%xmm0
+.byte 15,56,205,245
+ movdqa %xmm8,%xmm7
+.byte 15,56,203,202
+
+ movdqa 480-128(%rcx),%xmm0
+ paddd %xmm6,%xmm0
+ nop
+.byte 15,56,203,209
+ pshufd $14,%xmm0,%xmm0
+ decq %rdx
+ nop
+.byte 15,56,203,202
+
+ paddd %xmm10,%xmm2
+ paddd %xmm9,%xmm1
+ jnz .Loop_shaext
+
+ pshufd $177,%xmm2,%xmm2
+ pshufd $27,%xmm1,%xmm7
+ pshufd $177,%xmm1,%xmm1
+ punpckhqdq %xmm2,%xmm1
+.byte 102,15,58,15,215,8
+
+ movdqu %xmm1,(%rdi)
+ movdqu %xmm2,16(%rdi)
+ .byte 0xf3,0xc3
+.size sha256_block_data_order_shaext,.-sha256_block_data_order_shaext
+.type sha256_block_data_order_ssse3,@function
+.align 64
+sha256_block_data_order_ssse3:
+.Lssse3_shortcut:
+ pushq %rbx
+ pushq %rbp
+ pushq %r12
+ pushq %r13
+ pushq %r14
+ pushq %r15
+ movq %rsp,%r11
+ shlq $4,%rdx
+ subq $96,%rsp
+ leaq (%rsi,%rdx,4),%rdx
+ andq $-64,%rsp
+ movq %rdi,64+0(%rsp)
+ movq %rsi,64+8(%rsp)
+ movq %rdx,64+16(%rsp)
+ movq %r11,64+24(%rsp)
+.Lprologue_ssse3:
+
+ movl 0(%rdi),%eax
+ movl 4(%rdi),%ebx
+ movl 8(%rdi),%ecx
+ movl 12(%rdi),%edx
+ movl 16(%rdi),%r8d
+ movl 20(%rdi),%r9d
+ movl 24(%rdi),%r10d
+ movl 28(%rdi),%r11d
+
+
+ jmp .Lloop_ssse3
+.align 16
+.Lloop_ssse3:
+ movdqa K256+512(%rip),%xmm7
+ movdqu 0(%rsi),%xmm0
+ movdqu 16(%rsi),%xmm1
+ movdqu 32(%rsi),%xmm2
+.byte 102,15,56,0,199
+ movdqu 48(%rsi),%xmm3
+ leaq K256(%rip),%rbp
+.byte 102,15,56,0,207
+ movdqa 0(%rbp),%xmm4
+ movdqa 32(%rbp),%xmm5
+.byte 102,15,56,0,215
+ paddd %xmm0,%xmm4
+ movdqa 64(%rbp),%xmm6
+.byte 102,15,56,0,223
+ movdqa 96(%rbp),%xmm7
+ paddd %xmm1,%xmm5
+ paddd %xmm2,%xmm6
+ paddd %xmm3,%xmm7
+ movdqa %xmm4,0(%rsp)
+ movl %eax,%r14d
+ movdqa %xmm5,16(%rsp)
+ movl %ebx,%edi
+ movdqa %xmm6,32(%rsp)
+ xorl %ecx,%edi
+ movdqa %xmm7,48(%rsp)
+ movl %r8d,%r13d
+ jmp .Lssse3_00_47
+
+.align 16
+.Lssse3_00_47:
+ subq $-128,%rbp
+ rorl $14,%r13d
+ movdqa %xmm1,%xmm4
+ movl %r14d,%eax
+ movl %r9d,%r12d
+ movdqa %xmm3,%xmm7
+ rorl $9,%r14d
+ xorl %r8d,%r13d
+ xorl %r10d,%r12d
+ rorl $5,%r13d
+ xorl %eax,%r14d
+.byte 102,15,58,15,224,4
+ andl %r8d,%r12d
+ xorl %r8d,%r13d
+.byte 102,15,58,15,250,4
+ addl 0(%rsp),%r11d
+ movl %eax,%r15d
+ xorl %r10d,%r12d
+ rorl $11,%r14d
+ movdqa %xmm4,%xmm5
+ xorl %ebx,%r15d
+ addl %r12d,%r11d
+ movdqa %xmm4,%xmm6
+ rorl $6,%r13d
+ andl %r15d,%edi
+ psrld $3,%xmm4
+ xorl %eax,%r14d
+ addl %r13d,%r11d
+ xorl %ebx,%edi
+ paddd %xmm7,%xmm0
+ rorl $2,%r14d
+ addl %r11d,%edx
+ psrld $7,%xmm6
+ addl %edi,%r11d
+ movl %edx,%r13d
+ pshufd $250,%xmm3,%xmm7
+ addl %r11d,%r14d
+ rorl $14,%r13d
+ pslld $14,%xmm5
+ movl %r14d,%r11d
+ movl %r8d,%r12d
+ pxor %xmm6,%xmm4
+ rorl $9,%r14d
+ xorl %edx,%r13d
+ xorl %r9d,%r12d
+ rorl $5,%r13d
+ psrld $11,%xmm6
+ xorl %r11d,%r14d
+ pxor %xmm5,%xmm4
+ andl %edx,%r12d
+ xorl %edx,%r13d
+ pslld $11,%xmm5
+ addl 4(%rsp),%r10d
+ movl %r11d,%edi
+ pxor %xmm6,%xmm4
+ xorl %r9d,%r12d
+ rorl $11,%r14d
+ movdqa %xmm7,%xmm6
+ xorl %eax,%edi
+ addl %r12d,%r10d
+ pxor %xmm5,%xmm4
+ rorl $6,%r13d
+ andl %edi,%r15d
+ xorl %r11d,%r14d
+ psrld $10,%xmm7
+ addl %r13d,%r10d
+ xorl %eax,%r15d
+ paddd %xmm4,%xmm0
+ rorl $2,%r14d
+ addl %r10d,%ecx
+ psrlq $17,%xmm6
+ addl %r15d,%r10d
+ movl %ecx,%r13d
+ addl %r10d,%r14d
+ pxor %xmm6,%xmm7
+ rorl $14,%r13d
+ movl %r14d,%r10d
+ movl %edx,%r12d
+ rorl $9,%r14d
+ psrlq $2,%xmm6
+ xorl %ecx,%r13d
+ xorl %r8d,%r12d
+ pxor %xmm6,%xmm7
+ rorl $5,%r13d
+ xorl %r10d,%r14d
+ andl %ecx,%r12d
+ pshufd $128,%xmm7,%xmm7
+ xorl %ecx,%r13d
+ addl 8(%rsp),%r9d
+ movl %r10d,%r15d
+ psrldq $8,%xmm7
+ xorl %r8d,%r12d
+ rorl $11,%r14d
+ xorl %r11d,%r15d
+ addl %r12d,%r9d
+ rorl $6,%r13d
+ paddd %xmm7,%xmm0
+ andl %r15d,%edi
+ xorl %r10d,%r14d
+ addl %r13d,%r9d
+ pshufd $80,%xmm0,%xmm7
+ xorl %r11d,%edi
+ rorl $2,%r14d
+ addl %r9d,%ebx
+ movdqa %xmm7,%xmm6
+ addl %edi,%r9d
+ movl %ebx,%r13d
+ psrld $10,%xmm7
+ addl %r9d,%r14d
+ rorl $14,%r13d
+ psrlq $17,%xmm6
+ movl %r14d,%r9d
+ movl %ecx,%r12d
+ pxor %xmm6,%xmm7
+ rorl $9,%r14d
+ xorl %ebx,%r13d
+ xorl %edx,%r12d
+ rorl $5,%r13d
+ xorl %r9d,%r14d
+ psrlq $2,%xmm6
+ andl %ebx,%r12d
+ xorl %ebx,%r13d
+ addl 12(%rsp),%r8d
+ pxor %xmm6,%xmm7
+ movl %r9d,%edi
+ xorl %edx,%r12d
+ rorl $11,%r14d
+ pshufd $8,%xmm7,%xmm7
+ xorl %r10d,%edi
+ addl %r12d,%r8d
+ movdqa 0(%rbp),%xmm6
+ rorl $6,%r13d
+ andl %edi,%r15d
+ pslldq $8,%xmm7
+ xorl %r9d,%r14d
+ addl %r13d,%r8d
+ xorl %r10d,%r15d
+ paddd %xmm7,%xmm0
+ rorl $2,%r14d
+ addl %r8d,%eax
+ addl %r15d,%r8d
+ paddd %xmm0,%xmm6
+ movl %eax,%r13d
+ addl %r8d,%r14d
+ movdqa %xmm6,0(%rsp)
+ rorl $14,%r13d
+ movdqa %xmm2,%xmm4
+ movl %r14d,%r8d
+ movl %ebx,%r12d
+ movdqa %xmm0,%xmm7
+ rorl $9,%r14d
+ xorl %eax,%r13d
+ xorl %ecx,%r12d
+ rorl $5,%r13d
+ xorl %r8d,%r14d
+.byte 102,15,58,15,225,4
+ andl %eax,%r12d
+ xorl %eax,%r13d
+.byte 102,15,58,15,251,4
+ addl 16(%rsp),%edx
+ movl %r8d,%r15d
+ xorl %ecx,%r12d
+ rorl $11,%r14d
+ movdqa %xmm4,%xmm5
+ xorl %r9d,%r15d
+ addl %r12d,%edx
+ movdqa %xmm4,%xmm6
+ rorl $6,%r13d
+ andl %r15d,%edi
+ psrld $3,%xmm4
+ xorl %r8d,%r14d
+ addl %r13d,%edx
+ xorl %r9d,%edi
+ paddd %xmm7,%xmm1
+ rorl $2,%r14d
+ addl %edx,%r11d
+ psrld $7,%xmm6
+ addl %edi,%edx
+ movl %r11d,%r13d
+ pshufd $250,%xmm0,%xmm7
+ addl %edx,%r14d
+ rorl $14,%r13d
+ pslld $14,%xmm5
+ movl %r14d,%edx
+ movl %eax,%r12d
+ pxor %xmm6,%xmm4
+ rorl $9,%r14d
+ xorl %r11d,%r13d
+ xorl %ebx,%r12d
+ rorl $5,%r13d
+ psrld $11,%xmm6
+ xorl %edx,%r14d
+ pxor %xmm5,%xmm4
+ andl %r11d,%r12d
+ xorl %r11d,%r13d
+ pslld $11,%xmm5
+ addl 20(%rsp),%ecx
+ movl %edx,%edi
+ pxor %xmm6,%xmm4
+ xorl %ebx,%r12d
+ rorl $11,%r14d
+ movdqa %xmm7,%xmm6
+ xorl %r8d,%edi
+ addl %r12d,%ecx
+ pxor %xmm5,%xmm4
+ rorl $6,%r13d
+ andl %edi,%r15d
+ xorl %edx,%r14d
+ psrld $10,%xmm7
+ addl %r13d,%ecx
+ xorl %r8d,%r15d
+ paddd %xmm4,%xmm1
+ rorl $2,%r14d
+ addl %ecx,%r10d
+ psrlq $17,%xmm6
+ addl %r15d,%ecx
+ movl %r10d,%r13d
+ addl %ecx,%r14d
+ pxor %xmm6,%xmm7
+ rorl $14,%r13d
+ movl %r14d,%ecx
+ movl %r11d,%r12d
+ rorl $9,%r14d
+ psrlq $2,%xmm6
+ xorl %r10d,%r13d
+ xorl %eax,%r12d
+ pxor %xmm6,%xmm7
+ rorl $5,%r13d
+ xorl %ecx,%r14d
+ andl %r10d,%r12d
+ pshufd $128,%xmm7,%xmm7
+ xorl %r10d,%r13d
+ addl 24(%rsp),%ebx
+ movl %ecx,%r15d
+ psrldq $8,%xmm7
+ xorl %eax,%r12d
+ rorl $11,%r14d
+ xorl %edx,%r15d
+ addl %r12d,%ebx
+ rorl $6,%r13d
+ paddd %xmm7,%xmm1
+ andl %r15d,%edi
+ xorl %ecx,%r14d
+ addl %r13d,%ebx
+ pshufd $80,%xmm1,%xmm7
+ xorl %edx,%edi
+ rorl $2,%r14d
+ addl %ebx,%r9d
+ movdqa %xmm7,%xmm6
+ addl %edi,%ebx
+ movl %r9d,%r13d
+ psrld $10,%xmm7
+ addl %ebx,%r14d
+ rorl $14,%r13d
+ psrlq $17,%xmm6
+ movl %r14d,%ebx
+ movl %r10d,%r12d
+ pxor %xmm6,%xmm7
+ rorl $9,%r14d
+ xorl %r9d,%r13d
+ xorl %r11d,%r12d
+ rorl $5,%r13d
+ xorl %ebx,%r14d
+ psrlq $2,%xmm6
+ andl %r9d,%r12d
+ xorl %r9d,%r13d
+ addl 28(%rsp),%eax
+ pxor %xmm6,%xmm7
+ movl %ebx,%edi
+ xorl %r11d,%r12d
+ rorl $11,%r14d
+ pshufd $8,%xmm7,%xmm7
+ xorl %ecx,%edi
+ addl %r12d,%eax
+ movdqa 32(%rbp),%xmm6
+ rorl $6,%r13d
+ andl %edi,%r15d
+ pslldq $8,%xmm7
+ xorl %ebx,%r14d
+ addl %r13d,%eax
+ xorl %ecx,%r15d
+ paddd %xmm7,%xmm1
+ rorl $2,%r14d
+ addl %eax,%r8d
+ addl %r15d,%eax
+ paddd %xmm1,%xmm6
+ movl %r8d,%r13d
+ addl %eax,%r14d
+ movdqa %xmm6,16(%rsp)
+ rorl $14,%r13d
+ movdqa %xmm3,%xmm4
+ movl %r14d,%eax
+ movl %r9d,%r12d
+ movdqa %xmm1,%xmm7
+ rorl $9,%r14d
+ xorl %r8d,%r13d
+ xorl %r10d,%r12d
+ rorl $5,%r13d
+ xorl %eax,%r14d
+.byte 102,15,58,15,226,4
+ andl %r8d,%r12d
+ xorl %r8d,%r13d
+.byte 102,15,58,15,248,4
+ addl 32(%rsp),%r11d
+ movl %eax,%r15d
+ xorl %r10d,%r12d
+ rorl $11,%r14d
+ movdqa %xmm4,%xmm5
+ xorl %ebx,%r15d
+ addl %r12d,%r11d
+ movdqa %xmm4,%xmm6
+ rorl $6,%r13d
+ andl %r15d,%edi
+ psrld $3,%xmm4
+ xorl %eax,%r14d
+ addl %r13d,%r11d
+ xorl %ebx,%edi
+ paddd %xmm7,%xmm2
+ rorl $2,%r14d
+ addl %r11d,%edx
+ psrld $7,%xmm6
+ addl %edi,%r11d
+ movl %edx,%r13d
+ pshufd $250,%xmm1,%xmm7
+ addl %r11d,%r14d
+ rorl $14,%r13d
+ pslld $14,%xmm5
+ movl %r14d,%r11d
+ movl %r8d,%r12d
+ pxor %xmm6,%xmm4
+ rorl $9,%r14d
+ xorl %edx,%r13d
+ xorl %r9d,%r12d
+ rorl $5,%r13d
+ psrld $11,%xmm6
+ xorl %r11d,%r14d
+ pxor %xmm5,%xmm4
+ andl %edx,%r12d
+ xorl %edx,%r13d
+ pslld $11,%xmm5
+ addl 36(%rsp),%r10d
+ movl %r11d,%edi
+ pxor %xmm6,%xmm4
+ xorl %r9d,%r12d
+ rorl $11,%r14d
+ movdqa %xmm7,%xmm6
+ xorl %eax,%edi
+ addl %r12d,%r10d
+ pxor %xmm5,%xmm4
+ rorl $6,%r13d
+ andl %edi,%r15d
+ xorl %r11d,%r14d
+ psrld $10,%xmm7
+ addl %r13d,%r10d
+ xorl %eax,%r15d
+ paddd %xmm4,%xmm2
+ rorl $2,%r14d
+ addl %r10d,%ecx
+ psrlq $17,%xmm6
+ addl %r15d,%r10d
+ movl %ecx,%r13d
+ addl %r10d,%r14d
+ pxor %xmm6,%xmm7
+ rorl $14,%r13d
+ movl %r14d,%r10d
+ movl %edx,%r12d
+ rorl $9,%r14d
+ psrlq $2,%xmm6
+ xorl %ecx,%r13d
+ xorl %r8d,%r12d
+ pxor %xmm6,%xmm7
+ rorl $5,%r13d
+ xorl %r10d,%r14d
+ andl %ecx,%r12d
+ pshufd $128,%xmm7,%xmm7
+ xorl %ecx,%r13d
+ addl 40(%rsp),%r9d
+ movl %r10d,%r15d
+ psrldq $8,%xmm7
+ xorl %r8d,%r12d
+ rorl $11,%r14d
+ xorl %r11d,%r15d
+ addl %r12d,%r9d
+ rorl $6,%r13d
+ paddd %xmm7,%xmm2
+ andl %r15d,%edi
+ xorl %r10d,%r14d
+ addl %r13d,%r9d
+ pshufd $80,%xmm2,%xmm7
+ xorl %r11d,%edi
+ rorl $2,%r14d
+ addl %r9d,%ebx
+ movdqa %xmm7,%xmm6
+ addl %edi,%r9d
+ movl %ebx,%r13d
+ psrld $10,%xmm7
+ addl %r9d,%r14d
+ rorl $14,%r13d
+ psrlq $17,%xmm6
+ movl %r14d,%r9d
+ movl %ecx,%r12d
+ pxor %xmm6,%xmm7
+ rorl $9,%r14d
+ xorl %ebx,%r13d
+ xorl %edx,%r12d
+ rorl $5,%r13d
+ xorl %r9d,%r14d
+ psrlq $2,%xmm6
+ andl %ebx,%r12d
+ xorl %ebx,%r13d
+ addl 44(%rsp),%r8d
+ pxor %xmm6,%xmm7
+ movl %r9d,%edi
+ xorl %edx,%r12d
+ rorl $11,%r14d
+ pshufd $8,%xmm7,%xmm7
+ xorl %r10d,%edi
+ addl %r12d,%r8d
+ movdqa 64(%rbp),%xmm6
+ rorl $6,%r13d
+ andl %edi,%r15d
+ pslldq $8,%xmm7
+ xorl %r9d,%r14d
+ addl %r13d,%r8d
+ xorl %r10d,%r15d
+ paddd %xmm7,%xmm2
+ rorl $2,%r14d
+ addl %r8d,%eax
+ addl %r15d,%r8d
+ paddd %xmm2,%xmm6
+ movl %eax,%r13d
+ addl %r8d,%r14d
+ movdqa %xmm6,32(%rsp)
+ rorl $14,%r13d
+ movdqa %xmm0,%xmm4
+ movl %r14d,%r8d
+ movl %ebx,%r12d
+ movdqa %xmm2,%xmm7
+ rorl $9,%r14d
+ xorl %eax,%r13d
+ xorl %ecx,%r12d
+ rorl $5,%r13d
+ xorl %r8d,%r14d
+.byte 102,15,58,15,227,4
+ andl %eax,%r12d
+ xorl %eax,%r13d
+.byte 102,15,58,15,249,4
+ addl 48(%rsp),%edx
+ movl %r8d,%r15d
+ xorl %ecx,%r12d
+ rorl $11,%r14d
+ movdqa %xmm4,%xmm5
+ xorl %r9d,%r15d
+ addl %r12d,%edx
+ movdqa %xmm4,%xmm6
+ rorl $6,%r13d
+ andl %r15d,%edi
+ psrld $3,%xmm4
+ xorl %r8d,%r14d
+ addl %r13d,%edx
+ xorl %r9d,%edi
+ paddd %xmm7,%xmm3
+ rorl $2,%r14d
+ addl %edx,%r11d
+ psrld $7,%xmm6
+ addl %edi,%edx
+ movl %r11d,%r13d
+ pshufd $250,%xmm2,%xmm7
+ addl %edx,%r14d
+ rorl $14,%r13d
+ pslld $14,%xmm5
+ movl %r14d,%edx
+ movl %eax,%r12d
+ pxor %xmm6,%xmm4
+ rorl $9,%r14d
+ xorl %r11d,%r13d
+ xorl %ebx,%r12d
+ rorl $5,%r13d
+ psrld $11,%xmm6
+ xorl %edx,%r14d
+ pxor %xmm5,%xmm4
+ andl %r11d,%r12d
+ xorl %r11d,%r13d
+ pslld $11,%xmm5
+ addl 52(%rsp),%ecx
+ movl %edx,%edi
+ pxor %xmm6,%xmm4
+ xorl %ebx,%r12d
+ rorl $11,%r14d
+ movdqa %xmm7,%xmm6
+ xorl %r8d,%edi
+ addl %r12d,%ecx
+ pxor %xmm5,%xmm4
+ rorl $6,%r13d
+ andl %edi,%r15d
+ xorl %edx,%r14d
+ psrld $10,%xmm7
+ addl %r13d,%ecx
+ xorl %r8d,%r15d
+ paddd %xmm4,%xmm3
+ rorl $2,%r14d
+ addl %ecx,%r10d
+ psrlq $17,%xmm6
+ addl %r15d,%ecx
+ movl %r10d,%r13d
+ addl %ecx,%r14d
+ pxor %xmm6,%xmm7
+ rorl $14,%r13d
+ movl %r14d,%ecx
+ movl %r11d,%r12d
+ rorl $9,%r14d
+ psrlq $2,%xmm6
+ xorl %r10d,%r13d
+ xorl %eax,%r12d
+ pxor %xmm6,%xmm7
+ rorl $5,%r13d
+ xorl %ecx,%r14d
+ andl %r10d,%r12d
+ pshufd $128,%xmm7,%xmm7
+ xorl %r10d,%r13d
+ addl 56(%rsp),%ebx
+ movl %ecx,%r15d
+ psrldq $8,%xmm7
+ xorl %eax,%r12d
+ rorl $11,%r14d
+ xorl %edx,%r15d
+ addl %r12d,%ebx
+ rorl $6,%r13d
+ paddd %xmm7,%xmm3
+ andl %r15d,%edi
+ xorl %ecx,%r14d
+ addl %r13d,%ebx
+ pshufd $80,%xmm3,%xmm7
+ xorl %edx,%edi
+ rorl $2,%r14d
+ addl %ebx,%r9d
+ movdqa %xmm7,%xmm6
+ addl %edi,%ebx
+ movl %r9d,%r13d
+ psrld $10,%xmm7
+ addl %ebx,%r14d
+ rorl $14,%r13d
+ psrlq $17,%xmm6
+ movl %r14d,%ebx
+ movl %r10d,%r12d
+ pxor %xmm6,%xmm7
+ rorl $9,%r14d
+ xorl %r9d,%r13d
+ xorl %r11d,%r12d
+ rorl $5,%r13d
+ xorl %ebx,%r14d
+ psrlq $2,%xmm6
+ andl %r9d,%r12d
+ xorl %r9d,%r13d
+ addl 60(%rsp),%eax
+ pxor %xmm6,%xmm7
+ movl %ebx,%edi
+ xorl %r11d,%r12d
+ rorl $11,%r14d
+ pshufd $8,%xmm7,%xmm7
+ xorl %ecx,%edi
+ addl %r12d,%eax
+ movdqa 96(%rbp),%xmm6
+ rorl $6,%r13d
+ andl %edi,%r15d
+ pslldq $8,%xmm7
+ xorl %ebx,%r14d
+ addl %r13d,%eax
+ xorl %ecx,%r15d
+ paddd %xmm7,%xmm3
+ rorl $2,%r14d
+ addl %eax,%r8d
+ addl %r15d,%eax
+ paddd %xmm3,%xmm6
+ movl %r8d,%r13d
+ addl %eax,%r14d
+ movdqa %xmm6,48(%rsp)
+ cmpb $0,131(%rbp)
+ jne .Lssse3_00_47
+ rorl $14,%r13d
+ movl %r14d,%eax
+ movl %r9d,%r12d
+ rorl $9,%r14d
+ xorl %r8d,%r13d
+ xorl %r10d,%r12d
+ rorl $5,%r13d
+ xorl %eax,%r14d
+ andl %r8d,%r12d
+ xorl %r8d,%r13d
+ addl 0(%rsp),%r11d
+ movl %eax,%r15d
+ xorl %r10d,%r12d
+ rorl $11,%r14d
+ xorl %ebx,%r15d
+ addl %r12d,%r11d
+ rorl $6,%r13d
+ andl %r15d,%edi
+ xorl %eax,%r14d
+ addl %r13d,%r11d
+ xorl %ebx,%edi
+ rorl $2,%r14d
+ addl %r11d,%edx
+ addl %edi,%r11d
+ movl %edx,%r13d
+ addl %r11d,%r14d
+ rorl $14,%r13d
+ movl %r14d,%r11d
+ movl %r8d,%r12d
+ rorl $9,%r14d
+ xorl %edx,%r13d
+ xorl %r9d,%r12d
+ rorl $5,%r13d
+ xorl %r11d,%r14d
+ andl %edx,%r12d
+ xorl %edx,%r13d
+ addl 4(%rsp),%r10d
+ movl %r11d,%edi
+ xorl %r9d,%r12d
+ rorl $11,%r14d
+ xorl %eax,%edi
+ addl %r12d,%r10d
+ rorl $6,%r13d
+ andl %edi,%r15d
+ xorl %r11d,%r14d
+ addl %r13d,%r10d
+ xorl %eax,%r15d
+ rorl $2,%r14d
+ addl %r10d,%ecx
+ addl %r15d,%r10d
+ movl %ecx,%r13d
+ addl %r10d,%r14d
+ rorl $14,%r13d
+ movl %r14d,%r10d
+ movl %edx,%r12d
+ rorl $9,%r14d
+ xorl %ecx,%r13d
+ xorl %r8d,%r12d
+ rorl $5,%r13d
+ xorl %r10d,%r14d
+ andl %ecx,%r12d
+ xorl %ecx,%r13d
+ addl 8(%rsp),%r9d
+ movl %r10d,%r15d
+ xorl %r8d,%r12d
+ rorl $11,%r14d
+ xorl %r11d,%r15d
+ addl %r12d,%r9d
+ rorl $6,%r13d
+ andl %r15d,%edi
+ xorl %r10d,%r14d
+ addl %r13d,%r9d
+ xorl %r11d,%edi
+ rorl $2,%r14d
+ addl %r9d,%ebx
+ addl %edi,%r9d
+ movl %ebx,%r13d
+ addl %r9d,%r14d
+ rorl $14,%r13d
+ movl %r14d,%r9d
+ movl %ecx,%r12d
+ rorl $9,%r14d
+ xorl %ebx,%r13d
+ xorl %edx,%r12d
+ rorl $5,%r13d
+ xorl %r9d,%r14d
+ andl %ebx,%r12d
+ xorl %ebx,%r13d
+ addl 12(%rsp),%r8d
+ movl %r9d,%edi
+ xorl %edx,%r12d
+ rorl $11,%r14d
+ xorl %r10d,%edi
+ addl %r12d,%r8d
+ rorl $6,%r13d
+ andl %edi,%r15d
+ xorl %r9d,%r14d
+ addl %r13d,%r8d
+ xorl %r10d,%r15d
+ rorl $2,%r14d
+ addl %r8d,%eax
+ addl %r15d,%r8d
+ movl %eax,%r13d
+ addl %r8d,%r14d
+ rorl $14,%r13d
+ movl %r14d,%r8d
+ movl %ebx,%r12d
+ rorl $9,%r14d
+ xorl %eax,%r13d
+ xorl %ecx,%r12d
+ rorl $5,%r13d
+ xorl %r8d,%r14d
+ andl %eax,%r12d
+ xorl %eax,%r13d
+ addl 16(%rsp),%edx
+ movl %r8d,%r15d
+ xorl %ecx,%r12d
+ rorl $11,%r14d
+ xorl %r9d,%r15d
+ addl %r12d,%edx
+ rorl $6,%r13d
+ andl %r15d,%edi
+ xorl %r8d,%r14d
+ addl %r13d,%edx
+ xorl %r9d,%edi
+ rorl $2,%r14d
+ addl %edx,%r11d
+ addl %edi,%edx
+ movl %r11d,%r13d
+ addl %edx,%r14d
+ rorl $14,%r13d
+ movl %r14d,%edx
+ movl %eax,%r12d
+ rorl $9,%r14d
+ xorl %r11d,%r13d
+ xorl %ebx,%r12d
+ rorl $5,%r13d
+ xorl %edx,%r14d
+ andl %r11d,%r12d
+ xorl %r11d,%r13d
+ addl 20(%rsp),%ecx
+ movl %edx,%edi
+ xorl %ebx,%r12d
+ rorl $11,%r14d
+ xorl %r8d,%edi
+ addl %r12d,%ecx
+ rorl $6,%r13d
+ andl %edi,%r15d
+ xorl %edx,%r14d
+ addl %r13d,%ecx
+ xorl %r8d,%r15d
+ rorl $2,%r14d
+ addl %ecx,%r10d
+ addl %r15d,%ecx
+ movl %r10d,%r13d
+ addl %ecx,%r14d
+ rorl $14,%r13d
+ movl %r14d,%ecx
+ movl %r11d,%r12d
+ rorl $9,%r14d
+ xorl %r10d,%r13d
+ xorl %eax,%r12d
+ rorl $5,%r13d
+ xorl %ecx,%r14d
+ andl %r10d,%r12d
+ xorl %r10d,%r13d
+ addl 24(%rsp),%ebx
+ movl %ecx,%r15d
+ xorl %eax,%r12d
+ rorl $11,%r14d
+ xorl %edx,%r15d
+ addl %r12d,%ebx
+ rorl $6,%r13d
+ andl %r15d,%edi
+ xorl %ecx,%r14d
+ addl %r13d,%ebx
+ xorl %edx,%edi
+ rorl $2,%r14d
+ addl %ebx,%r9d
+ addl %edi,%ebx
+ movl %r9d,%r13d
+ addl %ebx,%r14d
+ rorl $14,%r13d
+ movl %r14d,%ebx
+ movl %r10d,%r12d
+ rorl $9,%r14d
+ xorl %r9d,%r13d
+ xorl %r11d,%r12d
+ rorl $5,%r13d
+ xorl %ebx,%r14d
+ andl %r9d,%r12d
+ xorl %r9d,%r13d
+ addl 28(%rsp),%eax
+ movl %ebx,%edi
+ xorl %r11d,%r12d
+ rorl $11,%r14d
+ xorl %ecx,%edi
+ addl %r12d,%eax
+ rorl $6,%r13d
+ andl %edi,%r15d
+ xorl %ebx,%r14d
+ addl %r13d,%eax
+ xorl %ecx,%r15d
+ rorl $2,%r14d
+ addl %eax,%r8d
+ addl %r15d,%eax
+ movl %r8d,%r13d
+ addl %eax,%r14d
+ rorl $14,%r13d
+ movl %r14d,%eax
+ movl %r9d,%r12d
+ rorl $9,%r14d
+ xorl %r8d,%r13d
+ xorl %r10d,%r12d
+ rorl $5,%r13d
+ xorl %eax,%r14d
+ andl %r8d,%r12d
+ xorl %r8d,%r13d
+ addl 32(%rsp),%r11d
+ movl %eax,%r15d
+ xorl %r10d,%r12d
+ rorl $11,%r14d
+ xorl %ebx,%r15d
+ addl %r12d,%r11d
+ rorl $6,%r13d
+ andl %r15d,%edi
+ xorl %eax,%r14d
+ addl %r13d,%r11d
+ xorl %ebx,%edi
+ rorl $2,%r14d
+ addl %r11d,%edx
+ addl %edi,%r11d
+ movl %edx,%r13d
+ addl %r11d,%r14d
+ rorl $14,%r13d
+ movl %r14d,%r11d
+ movl %r8d,%r12d
+ rorl $9,%r14d
+ xorl %edx,%r13d
+ xorl %r9d,%r12d
+ rorl $5,%r13d
+ xorl %r11d,%r14d
+ andl %edx,%r12d
+ xorl %edx,%r13d
+ addl 36(%rsp),%r10d
+ movl %r11d,%edi
+ xorl %r9d,%r12d
+ rorl $11,%r14d
+ xorl %eax,%edi
+ addl %r12d,%r10d
+ rorl $6,%r13d
+ andl %edi,%r15d
+ xorl %r11d,%r14d
+ addl %r13d,%r10d
+ xorl %eax,%r15d
+ rorl $2,%r14d
+ addl %r10d,%ecx
+ addl %r15d,%r10d
+ movl %ecx,%r13d
+ addl %r10d,%r14d
+ rorl $14,%r13d
+ movl %r14d,%r10d
+ movl %edx,%r12d
+ rorl $9,%r14d
+ xorl %ecx,%r13d
+ xorl %r8d,%r12d
+ rorl $5,%r13d
+ xorl %r10d,%r14d
+ andl %ecx,%r12d
+ xorl %ecx,%r13d
+ addl 40(%rsp),%r9d
+ movl %r10d,%r15d
+ xorl %r8d,%r12d
+ rorl $11,%r14d
+ xorl %r11d,%r15d
+ addl %r12d,%r9d
+ rorl $6,%r13d
+ andl %r15d,%edi
+ xorl %r10d,%r14d
+ addl %r13d,%r9d
+ xorl %r11d,%edi
+ rorl $2,%r14d
+ addl %r9d,%ebx
+ addl %edi,%r9d
+ movl %ebx,%r13d
+ addl %r9d,%r14d
+ rorl $14,%r13d
+ movl %r14d,%r9d
+ movl %ecx,%r12d
+ rorl $9,%r14d
+ xorl %ebx,%r13d
+ xorl %edx,%r12d
+ rorl $5,%r13d
+ xorl %r9d,%r14d
+ andl %ebx,%r12d
+ xorl %ebx,%r13d
+ addl 44(%rsp),%r8d
+ movl %r9d,%edi
+ xorl %edx,%r12d
+ rorl $11,%r14d
+ xorl %r10d,%edi
+ addl %r12d,%r8d
+ rorl $6,%r13d
+ andl %edi,%r15d
+ xorl %r9d,%r14d
+ addl %r13d,%r8d
+ xorl %r10d,%r15d
+ rorl $2,%r14d
+ addl %r8d,%eax
+ addl %r15d,%r8d
+ movl %eax,%r13d
+ addl %r8d,%r14d
+ rorl $14,%r13d
+ movl %r14d,%r8d
+ movl %ebx,%r12d
+ rorl $9,%r14d
+ xorl %eax,%r13d
+ xorl %ecx,%r12d
+ rorl $5,%r13d
+ xorl %r8d,%r14d
+ andl %eax,%r12d
+ xorl %eax,%r13d
+ addl 48(%rsp),%edx
+ movl %r8d,%r15d
+ xorl %ecx,%r12d
+ rorl $11,%r14d
+ xorl %r9d,%r15d
+ addl %r12d,%edx
+ rorl $6,%r13d
+ andl %r15d,%edi
+ xorl %r8d,%r14d
+ addl %r13d,%edx
+ xorl %r9d,%edi
+ rorl $2,%r14d
+ addl %edx,%r11d
+ addl %edi,%edx
+ movl %r11d,%r13d
+ addl %edx,%r14d
+ rorl $14,%r13d
+ movl %r14d,%edx
+ movl %eax,%r12d
+ rorl $9,%r14d
+ xorl %r11d,%r13d
+ xorl %ebx,%r12d
+ rorl $5,%r13d
+ xorl %edx,%r14d
+ andl %r11d,%r12d
+ xorl %r11d,%r13d
+ addl 52(%rsp),%ecx
+ movl %edx,%edi
+ xorl %ebx,%r12d
+ rorl $11,%r14d
+ xorl %r8d,%edi
+ addl %r12d,%ecx
+ rorl $6,%r13d
+ andl %edi,%r15d
+ xorl %edx,%r14d
+ addl %r13d,%ecx
+ xorl %r8d,%r15d
+ rorl $2,%r14d
+ addl %ecx,%r10d
+ addl %r15d,%ecx
+ movl %r10d,%r13d
+ addl %ecx,%r14d
+ rorl $14,%r13d
+ movl %r14d,%ecx
+ movl %r11d,%r12d
+ rorl $9,%r14d
+ xorl %r10d,%r13d
+ xorl %eax,%r12d
+ rorl $5,%r13d
+ xorl %ecx,%r14d
+ andl %r10d,%r12d
+ xorl %r10d,%r13d
+ addl 56(%rsp),%ebx
+ movl %ecx,%r15d
+ xorl %eax,%r12d
+ rorl $11,%r14d
+ xorl %edx,%r15d
+ addl %r12d,%ebx
+ rorl $6,%r13d
+ andl %r15d,%edi
+ xorl %ecx,%r14d
+ addl %r13d,%ebx
+ xorl %edx,%edi
+ rorl $2,%r14d
+ addl %ebx,%r9d
+ addl %edi,%ebx
+ movl %r9d,%r13d
+ addl %ebx,%r14d
+ rorl $14,%r13d
+ movl %r14d,%ebx
+ movl %r10d,%r12d
+ rorl $9,%r14d
+ xorl %r9d,%r13d
+ xorl %r11d,%r12d
+ rorl $5,%r13d
+ xorl %ebx,%r14d
+ andl %r9d,%r12d
+ xorl %r9d,%r13d
+ addl 60(%rsp),%eax
+ movl %ebx,%edi
+ xorl %r11d,%r12d
+ rorl $11,%r14d
+ xorl %ecx,%edi
+ addl %r12d,%eax
+ rorl $6,%r13d
+ andl %edi,%r15d
+ xorl %ebx,%r14d
+ addl %r13d,%eax
+ xorl %ecx,%r15d
+ rorl $2,%r14d
+ addl %eax,%r8d
+ addl %r15d,%eax
+ movl %r8d,%r13d
+ addl %eax,%r14d
+ movq 64+0(%rsp),%rdi
+ movl %r14d,%eax
+
+ addl 0(%rdi),%eax
+ leaq 64(%rsi),%rsi
+ addl 4(%rdi),%ebx
+ addl 8(%rdi),%ecx
+ addl 12(%rdi),%edx
+ addl 16(%rdi),%r8d
+ addl 20(%rdi),%r9d
+ addl 24(%rdi),%r10d
+ addl 28(%rdi),%r11d
+
+ cmpq 64+16(%rsp),%rsi
+
+ movl %eax,0(%rdi)
+ movl %ebx,4(%rdi)
+ movl %ecx,8(%rdi)
+ movl %edx,12(%rdi)
+ movl %r8d,16(%rdi)
+ movl %r9d,20(%rdi)
+ movl %r10d,24(%rdi)
+ movl %r11d,28(%rdi)
+ jb .Lloop_ssse3
+
+ movq 64+24(%rsp),%rsi
+ movq (%rsi),%r15
+ movq 8(%rsi),%r14
+ movq 16(%rsi),%r13
+ movq 24(%rsi),%r12
+ movq 32(%rsi),%rbp
+ movq 40(%rsi),%rbx
+ leaq 48(%rsi),%rsp
+.Lepilogue_ssse3:
+ .byte 0xf3,0xc3
+.size sha256_block_data_order_ssse3,.-sha256_block_data_order_ssse3
diff --git a/secure/lib/libcrypto/amd64/sha512-x86_64.S b/secure/lib/libcrypto/amd64/sha512-x86_64.S
index 74fc3d0..60518d4 100644
--- a/secure/lib/libcrypto/amd64/sha512-x86_64.S
+++ b/secure/lib/libcrypto/amd64/sha512-x86_64.S
@@ -1,6 +1,7 @@
# $FreeBSD$
.text
+
.globl sha512_block_data_order
.type sha512_block_data_order,@function
.align 16
@@ -22,8 +23,6 @@ sha512_block_data_order:
movq %r11,128+24(%rsp)
.Lprologue:
- leaq K512(%rip),%rbp
-
movq 0(%rdi),%rax
movq 8(%rdi),%rbx
movq 16(%rdi),%rcx
@@ -36,1694 +35,1632 @@ sha512_block_data_order:
.align 16
.Lloop:
- xorq %rdi,%rdi
+ movq %rbx,%rdi
+ leaq K512(%rip),%rbp
+ xorq %rcx,%rdi
movq 0(%rsi),%r12
movq %r8,%r13
movq %rax,%r14
bswapq %r12
rorq $23,%r13
movq %r9,%r15
- movq %r12,0(%rsp)
- rorq $5,%r14
xorq %r8,%r13
+ rorq $5,%r14
xorq %r10,%r15
- rorq $4,%r13
- addq %r11,%r12
+ movq %r12,0(%rsp)
xorq %rax,%r14
-
- addq (%rbp,%rdi,8),%r12
andq %r8,%r15
- movq %rbx,%r11
+
+ rorq $4,%r13
+ addq %r11,%r12
+ xorq %r10,%r15
rorq $6,%r14
xorq %r8,%r13
- xorq %r10,%r15
+ addq %r15,%r12
- xorq %rcx,%r11
+ movq %rax,%r15
+ addq (%rbp),%r12
xorq %rax,%r14
- addq %r15,%r12
- movq %rbx,%r15
+ xorq %rbx,%r15
rorq $14,%r13
- andq %rax,%r11
- andq %rcx,%r15
+ movq %rbx,%r11
+ andq %r15,%rdi
rorq $28,%r14
addq %r13,%r12
- addq %r15,%r11
+ xorq %rdi,%r11
addq %r12,%rdx
addq %r12,%r11
- leaq 1(%rdi),%rdi
- addq %r14,%r11
+ leaq 8(%rbp),%rbp
+ addq %r14,%r11
movq 8(%rsi),%r12
movq %rdx,%r13
movq %r11,%r14
bswapq %r12
rorq $23,%r13
- movq %r8,%r15
- movq %r12,8(%rsp)
+ movq %r8,%rdi
- rorq $5,%r14
xorq %rdx,%r13
- xorq %r9,%r15
+ rorq $5,%r14
+ xorq %r9,%rdi
- rorq $4,%r13
- addq %r10,%r12
+ movq %r12,8(%rsp)
xorq %r11,%r14
+ andq %rdx,%rdi
- addq (%rbp,%rdi,8),%r12
- andq %rdx,%r15
- movq %rax,%r10
+ rorq $4,%r13
+ addq %r10,%r12
+ xorq %r9,%rdi
rorq $6,%r14
xorq %rdx,%r13
- xorq %r9,%r15
+ addq %rdi,%r12
- xorq %rbx,%r10
+ movq %r11,%rdi
+ addq (%rbp),%r12
xorq %r11,%r14
- addq %r15,%r12
- movq %rax,%r15
+ xorq %rax,%rdi
rorq $14,%r13
- andq %r11,%r10
- andq %rbx,%r15
+ movq %rax,%r10
+ andq %rdi,%r15
rorq $28,%r14
addq %r13,%r12
- addq %r15,%r10
+ xorq %r15,%r10
addq %r12,%rcx
addq %r12,%r10
- leaq 1(%rdi),%rdi
- addq %r14,%r10
+ leaq 24(%rbp),%rbp
+ addq %r14,%r10
movq 16(%rsi),%r12
movq %rcx,%r13
movq %r10,%r14
bswapq %r12
rorq $23,%r13
movq %rdx,%r15
- movq %r12,16(%rsp)
- rorq $5,%r14
xorq %rcx,%r13
+ rorq $5,%r14
xorq %r8,%r15
- rorq $4,%r13
- addq %r9,%r12
+ movq %r12,16(%rsp)
xorq %r10,%r14
-
- addq (%rbp,%rdi,8),%r12
andq %rcx,%r15
- movq %r11,%r9
+
+ rorq $4,%r13
+ addq %r9,%r12
+ xorq %r8,%r15
rorq $6,%r14
xorq %rcx,%r13
- xorq %r8,%r15
+ addq %r15,%r12
- xorq %rax,%r9
+ movq %r10,%r15
+ addq (%rbp),%r12
xorq %r10,%r14
- addq %r15,%r12
- movq %r11,%r15
+ xorq %r11,%r15
rorq $14,%r13
- andq %r10,%r9
- andq %rax,%r15
+ movq %r11,%r9
+ andq %r15,%rdi
rorq $28,%r14
addq %r13,%r12
- addq %r15,%r9
+ xorq %rdi,%r9
addq %r12,%rbx
addq %r12,%r9
- leaq 1(%rdi),%rdi
- addq %r14,%r9
+ leaq 8(%rbp),%rbp
+ addq %r14,%r9
movq 24(%rsi),%r12
movq %rbx,%r13
movq %r9,%r14
bswapq %r12
rorq $23,%r13
- movq %rcx,%r15
- movq %r12,24(%rsp)
+ movq %rcx,%rdi
- rorq $5,%r14
xorq %rbx,%r13
- xorq %rdx,%r15
+ rorq $5,%r14
+ xorq %rdx,%rdi
- rorq $4,%r13
- addq %r8,%r12
+ movq %r12,24(%rsp)
xorq %r9,%r14
+ andq %rbx,%rdi
- addq (%rbp,%rdi,8),%r12
- andq %rbx,%r15
- movq %r10,%r8
+ rorq $4,%r13
+ addq %r8,%r12
+ xorq %rdx,%rdi
rorq $6,%r14
xorq %rbx,%r13
- xorq %rdx,%r15
+ addq %rdi,%r12
- xorq %r11,%r8
+ movq %r9,%rdi
+ addq (%rbp),%r12
xorq %r9,%r14
- addq %r15,%r12
- movq %r10,%r15
+ xorq %r10,%rdi
rorq $14,%r13
- andq %r9,%r8
- andq %r11,%r15
+ movq %r10,%r8
+ andq %rdi,%r15
rorq $28,%r14
addq %r13,%r12
- addq %r15,%r8
+ xorq %r15,%r8
addq %r12,%rax
addq %r12,%r8
- leaq 1(%rdi),%rdi
- addq %r14,%r8
+ leaq 24(%rbp),%rbp
+ addq %r14,%r8
movq 32(%rsi),%r12
movq %rax,%r13
movq %r8,%r14
bswapq %r12
rorq $23,%r13
movq %rbx,%r15
- movq %r12,32(%rsp)
- rorq $5,%r14
xorq %rax,%r13
+ rorq $5,%r14
xorq %rcx,%r15
- rorq $4,%r13
- addq %rdx,%r12
+ movq %r12,32(%rsp)
xorq %r8,%r14
-
- addq (%rbp,%rdi,8),%r12
andq %rax,%r15
- movq %r9,%rdx
+
+ rorq $4,%r13
+ addq %rdx,%r12
+ xorq %rcx,%r15
rorq $6,%r14
xorq %rax,%r13
- xorq %rcx,%r15
+ addq %r15,%r12
- xorq %r10,%rdx
+ movq %r8,%r15
+ addq (%rbp),%r12
xorq %r8,%r14
- addq %r15,%r12
- movq %r9,%r15
+ xorq %r9,%r15
rorq $14,%r13
- andq %r8,%rdx
- andq %r10,%r15
+ movq %r9,%rdx
+ andq %r15,%rdi
rorq $28,%r14
addq %r13,%r12
- addq %r15,%rdx
+ xorq %rdi,%rdx
addq %r12,%r11
addq %r12,%rdx
- leaq 1(%rdi),%rdi
- addq %r14,%rdx
+ leaq 8(%rbp),%rbp
+ addq %r14,%rdx
movq 40(%rsi),%r12
movq %r11,%r13
movq %rdx,%r14
bswapq %r12
rorq $23,%r13
- movq %rax,%r15
- movq %r12,40(%rsp)
+ movq %rax,%rdi
- rorq $5,%r14
xorq %r11,%r13
- xorq %rbx,%r15
+ rorq $5,%r14
+ xorq %rbx,%rdi
- rorq $4,%r13
- addq %rcx,%r12
+ movq %r12,40(%rsp)
xorq %rdx,%r14
+ andq %r11,%rdi
- addq (%rbp,%rdi,8),%r12
- andq %r11,%r15
- movq %r8,%rcx
+ rorq $4,%r13
+ addq %rcx,%r12
+ xorq %rbx,%rdi
rorq $6,%r14
xorq %r11,%r13
- xorq %rbx,%r15
+ addq %rdi,%r12
- xorq %r9,%rcx
+ movq %rdx,%rdi
+ addq (%rbp),%r12
xorq %rdx,%r14
- addq %r15,%r12
- movq %r8,%r15
+ xorq %r8,%rdi
rorq $14,%r13
- andq %rdx,%rcx
- andq %r9,%r15
+ movq %r8,%rcx
+ andq %rdi,%r15
rorq $28,%r14
addq %r13,%r12
- addq %r15,%rcx
+ xorq %r15,%rcx
addq %r12,%r10
addq %r12,%rcx
- leaq 1(%rdi),%rdi
- addq %r14,%rcx
+ leaq 24(%rbp),%rbp
+ addq %r14,%rcx
movq 48(%rsi),%r12
movq %r10,%r13
movq %rcx,%r14
bswapq %r12
rorq $23,%r13
movq %r11,%r15
- movq %r12,48(%rsp)
- rorq $5,%r14
xorq %r10,%r13
+ rorq $5,%r14
xorq %rax,%r15
- rorq $4,%r13
- addq %rbx,%r12
+ movq %r12,48(%rsp)
xorq %rcx,%r14
-
- addq (%rbp,%rdi,8),%r12
andq %r10,%r15
- movq %rdx,%rbx
+
+ rorq $4,%r13
+ addq %rbx,%r12
+ xorq %rax,%r15
rorq $6,%r14
xorq %r10,%r13
- xorq %rax,%r15
+ addq %r15,%r12
- xorq %r8,%rbx
+ movq %rcx,%r15
+ addq (%rbp),%r12
xorq %rcx,%r14
- addq %r15,%r12
- movq %rdx,%r15
+ xorq %rdx,%r15
rorq $14,%r13
- andq %rcx,%rbx
- andq %r8,%r15
+ movq %rdx,%rbx
+ andq %r15,%rdi
rorq $28,%r14
addq %r13,%r12
- addq %r15,%rbx
+ xorq %rdi,%rbx
addq %r12,%r9
addq %r12,%rbx
- leaq 1(%rdi),%rdi
- addq %r14,%rbx
+ leaq 8(%rbp),%rbp
+ addq %r14,%rbx
movq 56(%rsi),%r12
movq %r9,%r13
movq %rbx,%r14
bswapq %r12
rorq $23,%r13
- movq %r10,%r15
- movq %r12,56(%rsp)
+ movq %r10,%rdi
- rorq $5,%r14
xorq %r9,%r13
- xorq %r11,%r15
+ rorq $5,%r14
+ xorq %r11,%rdi
- rorq $4,%r13
- addq %rax,%r12
+ movq %r12,56(%rsp)
xorq %rbx,%r14
+ andq %r9,%rdi
- addq (%rbp,%rdi,8),%r12
- andq %r9,%r15
- movq %rcx,%rax
+ rorq $4,%r13
+ addq %rax,%r12
+ xorq %r11,%rdi
rorq $6,%r14
xorq %r9,%r13
- xorq %r11,%r15
+ addq %rdi,%r12
- xorq %rdx,%rax
+ movq %rbx,%rdi
+ addq (%rbp),%r12
xorq %rbx,%r14
- addq %r15,%r12
- movq %rcx,%r15
+ xorq %rcx,%rdi
rorq $14,%r13
- andq %rbx,%rax
- andq %rdx,%r15
+ movq %rcx,%rax
+ andq %rdi,%r15
rorq $28,%r14
addq %r13,%r12
- addq %r15,%rax
+ xorq %r15,%rax
addq %r12,%r8
addq %r12,%rax
- leaq 1(%rdi),%rdi
- addq %r14,%rax
+ leaq 24(%rbp),%rbp
+ addq %r14,%rax
movq 64(%rsi),%r12
movq %r8,%r13
movq %rax,%r14
bswapq %r12
rorq $23,%r13
movq %r9,%r15
- movq %r12,64(%rsp)
- rorq $5,%r14
xorq %r8,%r13
+ rorq $5,%r14
xorq %r10,%r15
- rorq $4,%r13
- addq %r11,%r12
+ movq %r12,64(%rsp)
xorq %rax,%r14
-
- addq (%rbp,%rdi,8),%r12
andq %r8,%r15
- movq %rbx,%r11
+
+ rorq $4,%r13
+ addq %r11,%r12
+ xorq %r10,%r15
rorq $6,%r14
xorq %r8,%r13
- xorq %r10,%r15
+ addq %r15,%r12
- xorq %rcx,%r11
+ movq %rax,%r15
+ addq (%rbp),%r12
xorq %rax,%r14
- addq %r15,%r12
- movq %rbx,%r15
+ xorq %rbx,%r15
rorq $14,%r13
- andq %rax,%r11
- andq %rcx,%r15
+ movq %rbx,%r11
+ andq %r15,%rdi
rorq $28,%r14
addq %r13,%r12
- addq %r15,%r11
+ xorq %rdi,%r11
addq %r12,%rdx
addq %r12,%r11
- leaq 1(%rdi),%rdi
- addq %r14,%r11
+ leaq 8(%rbp),%rbp
+ addq %r14,%r11
movq 72(%rsi),%r12
movq %rdx,%r13
movq %r11,%r14
bswapq %r12
rorq $23,%r13
- movq %r8,%r15
- movq %r12,72(%rsp)
+ movq %r8,%rdi
- rorq $5,%r14
xorq %rdx,%r13
- xorq %r9,%r15
+ rorq $5,%r14
+ xorq %r9,%rdi
- rorq $4,%r13
- addq %r10,%r12
+ movq %r12,72(%rsp)
xorq %r11,%r14
+ andq %rdx,%rdi
- addq (%rbp,%rdi,8),%r12
- andq %rdx,%r15
- movq %rax,%r10
+ rorq $4,%r13
+ addq %r10,%r12
+ xorq %r9,%rdi
rorq $6,%r14
xorq %rdx,%r13
- xorq %r9,%r15
+ addq %rdi,%r12
- xorq %rbx,%r10
+ movq %r11,%rdi
+ addq (%rbp),%r12
xorq %r11,%r14
- addq %r15,%r12
- movq %rax,%r15
+ xorq %rax,%rdi
rorq $14,%r13
- andq %r11,%r10
- andq %rbx,%r15
+ movq %rax,%r10
+ andq %rdi,%r15
rorq $28,%r14
addq %r13,%r12
- addq %r15,%r10
+ xorq %r15,%r10
addq %r12,%rcx
addq %r12,%r10
- leaq 1(%rdi),%rdi
- addq %r14,%r10
+ leaq 24(%rbp),%rbp
+ addq %r14,%r10
movq 80(%rsi),%r12
movq %rcx,%r13
movq %r10,%r14
bswapq %r12
rorq $23,%r13
movq %rdx,%r15
- movq %r12,80(%rsp)
- rorq $5,%r14
xorq %rcx,%r13
+ rorq $5,%r14
xorq %r8,%r15
- rorq $4,%r13
- addq %r9,%r12
+ movq %r12,80(%rsp)
xorq %r10,%r14
-
- addq (%rbp,%rdi,8),%r12
andq %rcx,%r15
- movq %r11,%r9
+
+ rorq $4,%r13
+ addq %r9,%r12
+ xorq %r8,%r15
rorq $6,%r14
xorq %rcx,%r13
- xorq %r8,%r15
+ addq %r15,%r12
- xorq %rax,%r9
+ movq %r10,%r15
+ addq (%rbp),%r12
xorq %r10,%r14
- addq %r15,%r12
- movq %r11,%r15
+ xorq %r11,%r15
rorq $14,%r13
- andq %r10,%r9
- andq %rax,%r15
+ movq %r11,%r9
+ andq %r15,%rdi
rorq $28,%r14
addq %r13,%r12
- addq %r15,%r9
+ xorq %rdi,%r9
addq %r12,%rbx
addq %r12,%r9
- leaq 1(%rdi),%rdi
- addq %r14,%r9
+ leaq 8(%rbp),%rbp
+ addq %r14,%r9
movq 88(%rsi),%r12
movq %rbx,%r13
movq %r9,%r14
bswapq %r12
rorq $23,%r13
- movq %rcx,%r15
- movq %r12,88(%rsp)
+ movq %rcx,%rdi
- rorq $5,%r14
xorq %rbx,%r13
- xorq %rdx,%r15
+ rorq $5,%r14
+ xorq %rdx,%rdi
- rorq $4,%r13
- addq %r8,%r12
+ movq %r12,88(%rsp)
xorq %r9,%r14
+ andq %rbx,%rdi
- addq (%rbp,%rdi,8),%r12
- andq %rbx,%r15
- movq %r10,%r8
+ rorq $4,%r13
+ addq %r8,%r12
+ xorq %rdx,%rdi
rorq $6,%r14
xorq %rbx,%r13
- xorq %rdx,%r15
+ addq %rdi,%r12
- xorq %r11,%r8
+ movq %r9,%rdi
+ addq (%rbp),%r12
xorq %r9,%r14
- addq %r15,%r12
- movq %r10,%r15
+ xorq %r10,%rdi
rorq $14,%r13
- andq %r9,%r8
- andq %r11,%r15
+ movq %r10,%r8
+ andq %rdi,%r15
rorq $28,%r14
addq %r13,%r12
- addq %r15,%r8
+ xorq %r15,%r8
addq %r12,%rax
addq %r12,%r8
- leaq 1(%rdi),%rdi
- addq %r14,%r8
+ leaq 24(%rbp),%rbp
+ addq %r14,%r8
movq 96(%rsi),%r12
movq %rax,%r13
movq %r8,%r14
bswapq %r12
rorq $23,%r13
movq %rbx,%r15
- movq %r12,96(%rsp)
- rorq $5,%r14
xorq %rax,%r13
+ rorq $5,%r14
xorq %rcx,%r15
- rorq $4,%r13
- addq %rdx,%r12
+ movq %r12,96(%rsp)
xorq %r8,%r14
-
- addq (%rbp,%rdi,8),%r12
andq %rax,%r15
- movq %r9,%rdx
+
+ rorq $4,%r13
+ addq %rdx,%r12
+ xorq %rcx,%r15
rorq $6,%r14
xorq %rax,%r13
- xorq %rcx,%r15
+ addq %r15,%r12
- xorq %r10,%rdx
+ movq %r8,%r15
+ addq (%rbp),%r12
xorq %r8,%r14
- addq %r15,%r12
- movq %r9,%r15
+ xorq %r9,%r15
rorq $14,%r13
- andq %r8,%rdx
- andq %r10,%r15
+ movq %r9,%rdx
+ andq %r15,%rdi
rorq $28,%r14
addq %r13,%r12
- addq %r15,%rdx
+ xorq %rdi,%rdx
addq %r12,%r11
addq %r12,%rdx
- leaq 1(%rdi),%rdi
- addq %r14,%rdx
+ leaq 8(%rbp),%rbp
+ addq %r14,%rdx
movq 104(%rsi),%r12
movq %r11,%r13
movq %rdx,%r14
bswapq %r12
rorq $23,%r13
- movq %rax,%r15
- movq %r12,104(%rsp)
+ movq %rax,%rdi
- rorq $5,%r14
xorq %r11,%r13
- xorq %rbx,%r15
+ rorq $5,%r14
+ xorq %rbx,%rdi
- rorq $4,%r13
- addq %rcx,%r12
+ movq %r12,104(%rsp)
xorq %rdx,%r14
+ andq %r11,%rdi
- addq (%rbp,%rdi,8),%r12
- andq %r11,%r15
- movq %r8,%rcx
+ rorq $4,%r13
+ addq %rcx,%r12
+ xorq %rbx,%rdi
rorq $6,%r14
xorq %r11,%r13
- xorq %rbx,%r15
+ addq %rdi,%r12
- xorq %r9,%rcx
+ movq %rdx,%rdi
+ addq (%rbp),%r12
xorq %rdx,%r14
- addq %r15,%r12
- movq %r8,%r15
+ xorq %r8,%rdi
rorq $14,%r13
- andq %rdx,%rcx
- andq %r9,%r15
+ movq %r8,%rcx
+ andq %rdi,%r15
rorq $28,%r14
addq %r13,%r12
- addq %r15,%rcx
+ xorq %r15,%rcx
addq %r12,%r10
addq %r12,%rcx
- leaq 1(%rdi),%rdi
- addq %r14,%rcx
+ leaq 24(%rbp),%rbp
+ addq %r14,%rcx
movq 112(%rsi),%r12
movq %r10,%r13
movq %rcx,%r14
bswapq %r12
rorq $23,%r13
movq %r11,%r15
- movq %r12,112(%rsp)
- rorq $5,%r14
xorq %r10,%r13
+ rorq $5,%r14
xorq %rax,%r15
- rorq $4,%r13
- addq %rbx,%r12
+ movq %r12,112(%rsp)
xorq %rcx,%r14
-
- addq (%rbp,%rdi,8),%r12
andq %r10,%r15
- movq %rdx,%rbx
+
+ rorq $4,%r13
+ addq %rbx,%r12
+ xorq %rax,%r15
rorq $6,%r14
xorq %r10,%r13
- xorq %rax,%r15
+ addq %r15,%r12
- xorq %r8,%rbx
+ movq %rcx,%r15
+ addq (%rbp),%r12
xorq %rcx,%r14
- addq %r15,%r12
- movq %rdx,%r15
+ xorq %rdx,%r15
rorq $14,%r13
- andq %rcx,%rbx
- andq %r8,%r15
+ movq %rdx,%rbx
+ andq %r15,%rdi
rorq $28,%r14
addq %r13,%r12
- addq %r15,%rbx
+ xorq %rdi,%rbx
addq %r12,%r9
addq %r12,%rbx
- leaq 1(%rdi),%rdi
- addq %r14,%rbx
+ leaq 8(%rbp),%rbp
+ addq %r14,%rbx
movq 120(%rsi),%r12
movq %r9,%r13
movq %rbx,%r14
bswapq %r12
rorq $23,%r13
- movq %r10,%r15
- movq %r12,120(%rsp)
+ movq %r10,%rdi
- rorq $5,%r14
xorq %r9,%r13
- xorq %r11,%r15
+ rorq $5,%r14
+ xorq %r11,%rdi
- rorq $4,%r13
- addq %rax,%r12
+ movq %r12,120(%rsp)
xorq %rbx,%r14
+ andq %r9,%rdi
- addq (%rbp,%rdi,8),%r12
- andq %r9,%r15
- movq %rcx,%rax
+ rorq $4,%r13
+ addq %rax,%r12
+ xorq %r11,%rdi
rorq $6,%r14
xorq %r9,%r13
- xorq %r11,%r15
+ addq %rdi,%r12
- xorq %rdx,%rax
+ movq %rbx,%rdi
+ addq (%rbp),%r12
xorq %rbx,%r14
- addq %r15,%r12
- movq %rcx,%r15
+ xorq %rcx,%rdi
rorq $14,%r13
- andq %rbx,%rax
- andq %rdx,%r15
+ movq %rcx,%rax
+ andq %rdi,%r15
rorq $28,%r14
addq %r13,%r12
- addq %r15,%rax
+ xorq %r15,%rax
addq %r12,%r8
addq %r12,%rax
- leaq 1(%rdi),%rdi
- addq %r14,%rax
+ leaq 24(%rbp),%rbp
jmp .Lrounds_16_xx
.align 16
.Lrounds_16_xx:
movq 8(%rsp),%r13
- movq 112(%rsp),%r14
- movq %r13,%r12
- movq %r14,%r15
+ movq 112(%rsp),%r15
- rorq $7,%r12
- xorq %r13,%r12
- shrq $7,%r13
+ movq %r13,%r12
+ rorq $7,%r13
+ addq %r14,%rax
+ movq %r15,%r14
+ rorq $42,%r15
- rorq $1,%r12
xorq %r12,%r13
- movq 72(%rsp),%r12
-
- rorq $42,%r15
+ shrq $7,%r12
+ rorq $1,%r13
xorq %r14,%r15
shrq $6,%r14
rorq $19,%r15
- addq %r13,%r12
- xorq %r15,%r14
+ xorq %r13,%r12
+ xorq %r14,%r15
+ addq 72(%rsp),%r12
addq 0(%rsp),%r12
movq %r8,%r13
- addq %r14,%r12
+ addq %r15,%r12
movq %rax,%r14
rorq $23,%r13
movq %r9,%r15
- movq %r12,0(%rsp)
- rorq $5,%r14
xorq %r8,%r13
+ rorq $5,%r14
xorq %r10,%r15
- rorq $4,%r13
- addq %r11,%r12
+ movq %r12,0(%rsp)
xorq %rax,%r14
-
- addq (%rbp,%rdi,8),%r12
andq %r8,%r15
- movq %rbx,%r11
+
+ rorq $4,%r13
+ addq %r11,%r12
+ xorq %r10,%r15
rorq $6,%r14
xorq %r8,%r13
- xorq %r10,%r15
+ addq %r15,%r12
- xorq %rcx,%r11
+ movq %rax,%r15
+ addq (%rbp),%r12
xorq %rax,%r14
- addq %r15,%r12
- movq %rbx,%r15
+ xorq %rbx,%r15
rorq $14,%r13
- andq %rax,%r11
- andq %rcx,%r15
+ movq %rbx,%r11
+ andq %r15,%rdi
rorq $28,%r14
addq %r13,%r12
- addq %r15,%r11
+ xorq %rdi,%r11
addq %r12,%rdx
addq %r12,%r11
- leaq 1(%rdi),%rdi
- addq %r14,%r11
+ leaq 8(%rbp),%rbp
movq 16(%rsp),%r13
- movq 120(%rsp),%r14
- movq %r13,%r12
- movq %r14,%r15
+ movq 120(%rsp),%rdi
- rorq $7,%r12
- xorq %r13,%r12
- shrq $7,%r13
+ movq %r13,%r12
+ rorq $7,%r13
+ addq %r14,%r11
+ movq %rdi,%r14
+ rorq $42,%rdi
- rorq $1,%r12
xorq %r12,%r13
- movq 80(%rsp),%r12
-
- rorq $42,%r15
- xorq %r14,%r15
+ shrq $7,%r12
+ rorq $1,%r13
+ xorq %r14,%rdi
shrq $6,%r14
- rorq $19,%r15
- addq %r13,%r12
- xorq %r15,%r14
+ rorq $19,%rdi
+ xorq %r13,%r12
+ xorq %r14,%rdi
+ addq 80(%rsp),%r12
addq 8(%rsp),%r12
movq %rdx,%r13
- addq %r14,%r12
+ addq %rdi,%r12
movq %r11,%r14
rorq $23,%r13
- movq %r8,%r15
- movq %r12,8(%rsp)
+ movq %r8,%rdi
- rorq $5,%r14
xorq %rdx,%r13
- xorq %r9,%r15
+ rorq $5,%r14
+ xorq %r9,%rdi
- rorq $4,%r13
- addq %r10,%r12
+ movq %r12,8(%rsp)
xorq %r11,%r14
+ andq %rdx,%rdi
- addq (%rbp,%rdi,8),%r12
- andq %rdx,%r15
- movq %rax,%r10
+ rorq $4,%r13
+ addq %r10,%r12
+ xorq %r9,%rdi
rorq $6,%r14
xorq %rdx,%r13
- xorq %r9,%r15
+ addq %rdi,%r12
- xorq %rbx,%r10
+ movq %r11,%rdi
+ addq (%rbp),%r12
xorq %r11,%r14
- addq %r15,%r12
- movq %rax,%r15
+ xorq %rax,%rdi
rorq $14,%r13
- andq %r11,%r10
- andq %rbx,%r15
+ movq %rax,%r10
+ andq %rdi,%r15
rorq $28,%r14
addq %r13,%r12
- addq %r15,%r10
+ xorq %r15,%r10
addq %r12,%rcx
addq %r12,%r10
- leaq 1(%rdi),%rdi
- addq %r14,%r10
+ leaq 24(%rbp),%rbp
movq 24(%rsp),%r13
- movq 0(%rsp),%r14
- movq %r13,%r12
- movq %r14,%r15
+ movq 0(%rsp),%r15
- rorq $7,%r12
- xorq %r13,%r12
- shrq $7,%r13
+ movq %r13,%r12
+ rorq $7,%r13
+ addq %r14,%r10
+ movq %r15,%r14
+ rorq $42,%r15
- rorq $1,%r12
xorq %r12,%r13
- movq 88(%rsp),%r12
-
- rorq $42,%r15
+ shrq $7,%r12
+ rorq $1,%r13
xorq %r14,%r15
shrq $6,%r14
rorq $19,%r15
- addq %r13,%r12
- xorq %r15,%r14
+ xorq %r13,%r12
+ xorq %r14,%r15
+ addq 88(%rsp),%r12
addq 16(%rsp),%r12
movq %rcx,%r13
- addq %r14,%r12
+ addq %r15,%r12
movq %r10,%r14
rorq $23,%r13
movq %rdx,%r15
- movq %r12,16(%rsp)
- rorq $5,%r14
xorq %rcx,%r13
+ rorq $5,%r14
xorq %r8,%r15
- rorq $4,%r13
- addq %r9,%r12
+ movq %r12,16(%rsp)
xorq %r10,%r14
-
- addq (%rbp,%rdi,8),%r12
andq %rcx,%r15
- movq %r11,%r9
+
+ rorq $4,%r13
+ addq %r9,%r12
+ xorq %r8,%r15
rorq $6,%r14
xorq %rcx,%r13
- xorq %r8,%r15
+ addq %r15,%r12
- xorq %rax,%r9
+ movq %r10,%r15
+ addq (%rbp),%r12
xorq %r10,%r14
- addq %r15,%r12
- movq %r11,%r15
+ xorq %r11,%r15
rorq $14,%r13
- andq %r10,%r9
- andq %rax,%r15
+ movq %r11,%r9
+ andq %r15,%rdi
rorq $28,%r14
addq %r13,%r12
- addq %r15,%r9
+ xorq %rdi,%r9
addq %r12,%rbx
addq %r12,%r9
- leaq 1(%rdi),%rdi
- addq %r14,%r9
+ leaq 8(%rbp),%rbp
movq 32(%rsp),%r13
- movq 8(%rsp),%r14
- movq %r13,%r12
- movq %r14,%r15
+ movq 8(%rsp),%rdi
- rorq $7,%r12
- xorq %r13,%r12
- shrq $7,%r13
+ movq %r13,%r12
+ rorq $7,%r13
+ addq %r14,%r9
+ movq %rdi,%r14
+ rorq $42,%rdi
- rorq $1,%r12
xorq %r12,%r13
- movq 96(%rsp),%r12
-
- rorq $42,%r15
- xorq %r14,%r15
+ shrq $7,%r12
+ rorq $1,%r13
+ xorq %r14,%rdi
shrq $6,%r14
- rorq $19,%r15
- addq %r13,%r12
- xorq %r15,%r14
+ rorq $19,%rdi
+ xorq %r13,%r12
+ xorq %r14,%rdi
+ addq 96(%rsp),%r12
addq 24(%rsp),%r12
movq %rbx,%r13
- addq %r14,%r12
+ addq %rdi,%r12
movq %r9,%r14
rorq $23,%r13
- movq %rcx,%r15
- movq %r12,24(%rsp)
+ movq %rcx,%rdi
- rorq $5,%r14
xorq %rbx,%r13
- xorq %rdx,%r15
+ rorq $5,%r14
+ xorq %rdx,%rdi
- rorq $4,%r13
- addq %r8,%r12
+ movq %r12,24(%rsp)
xorq %r9,%r14
+ andq %rbx,%rdi
- addq (%rbp,%rdi,8),%r12
- andq %rbx,%r15
- movq %r10,%r8
+ rorq $4,%r13
+ addq %r8,%r12
+ xorq %rdx,%rdi
rorq $6,%r14
xorq %rbx,%r13
- xorq %rdx,%r15
+ addq %rdi,%r12
- xorq %r11,%r8
+ movq %r9,%rdi
+ addq (%rbp),%r12
xorq %r9,%r14
- addq %r15,%r12
- movq %r10,%r15
+ xorq %r10,%rdi
rorq $14,%r13
- andq %r9,%r8
- andq %r11,%r15
+ movq %r10,%r8
+ andq %rdi,%r15
rorq $28,%r14
addq %r13,%r12
- addq %r15,%r8
+ xorq %r15,%r8
addq %r12,%rax
addq %r12,%r8
- leaq 1(%rdi),%rdi
- addq %r14,%r8
+ leaq 24(%rbp),%rbp
movq 40(%rsp),%r13
- movq 16(%rsp),%r14
- movq %r13,%r12
- movq %r14,%r15
+ movq 16(%rsp),%r15
- rorq $7,%r12
- xorq %r13,%r12
- shrq $7,%r13
+ movq %r13,%r12
+ rorq $7,%r13
+ addq %r14,%r8
+ movq %r15,%r14
+ rorq $42,%r15
- rorq $1,%r12
xorq %r12,%r13
- movq 104(%rsp),%r12
-
- rorq $42,%r15
+ shrq $7,%r12
+ rorq $1,%r13
xorq %r14,%r15
shrq $6,%r14
rorq $19,%r15
- addq %r13,%r12
- xorq %r15,%r14
+ xorq %r13,%r12
+ xorq %r14,%r15
+ addq 104(%rsp),%r12
addq 32(%rsp),%r12
movq %rax,%r13
- addq %r14,%r12
+ addq %r15,%r12
movq %r8,%r14
rorq $23,%r13
movq %rbx,%r15
- movq %r12,32(%rsp)
- rorq $5,%r14
xorq %rax,%r13
+ rorq $5,%r14
xorq %rcx,%r15
- rorq $4,%r13
- addq %rdx,%r12
+ movq %r12,32(%rsp)
xorq %r8,%r14
-
- addq (%rbp,%rdi,8),%r12
andq %rax,%r15
- movq %r9,%rdx
+
+ rorq $4,%r13
+ addq %rdx,%r12
+ xorq %rcx,%r15
rorq $6,%r14
xorq %rax,%r13
- xorq %rcx,%r15
+ addq %r15,%r12
- xorq %r10,%rdx
+ movq %r8,%r15
+ addq (%rbp),%r12
xorq %r8,%r14
- addq %r15,%r12
- movq %r9,%r15
+ xorq %r9,%r15
rorq $14,%r13
- andq %r8,%rdx
- andq %r10,%r15
+ movq %r9,%rdx
+ andq %r15,%rdi
rorq $28,%r14
addq %r13,%r12
- addq %r15,%rdx
+ xorq %rdi,%rdx
addq %r12,%r11
addq %r12,%rdx
- leaq 1(%rdi),%rdi
- addq %r14,%rdx
+ leaq 8(%rbp),%rbp
movq 48(%rsp),%r13
- movq 24(%rsp),%r14
- movq %r13,%r12
- movq %r14,%r15
+ movq 24(%rsp),%rdi
- rorq $7,%r12
- xorq %r13,%r12
- shrq $7,%r13
+ movq %r13,%r12
+ rorq $7,%r13
+ addq %r14,%rdx
+ movq %rdi,%r14
+ rorq $42,%rdi
- rorq $1,%r12
xorq %r12,%r13
- movq 112(%rsp),%r12
-
- rorq $42,%r15
- xorq %r14,%r15
+ shrq $7,%r12
+ rorq $1,%r13
+ xorq %r14,%rdi
shrq $6,%r14
- rorq $19,%r15
- addq %r13,%r12
- xorq %r15,%r14
+ rorq $19,%rdi
+ xorq %r13,%r12
+ xorq %r14,%rdi
+ addq 112(%rsp),%r12
addq 40(%rsp),%r12
movq %r11,%r13
- addq %r14,%r12
+ addq %rdi,%r12
movq %rdx,%r14
rorq $23,%r13
- movq %rax,%r15
- movq %r12,40(%rsp)
+ movq %rax,%rdi
- rorq $5,%r14
xorq %r11,%r13
- xorq %rbx,%r15
+ rorq $5,%r14
+ xorq %rbx,%rdi
- rorq $4,%r13
- addq %rcx,%r12
+ movq %r12,40(%rsp)
xorq %rdx,%r14
+ andq %r11,%rdi
- addq (%rbp,%rdi,8),%r12
- andq %r11,%r15
- movq %r8,%rcx
+ rorq $4,%r13
+ addq %rcx,%r12
+ xorq %rbx,%rdi
rorq $6,%r14
xorq %r11,%r13
- xorq %rbx,%r15
+ addq %rdi,%r12
- xorq %r9,%rcx
+ movq %rdx,%rdi
+ addq (%rbp),%r12
xorq %rdx,%r14
- addq %r15,%r12
- movq %r8,%r15
+ xorq %r8,%rdi
rorq $14,%r13
- andq %rdx,%rcx
- andq %r9,%r15
+ movq %r8,%rcx
+ andq %rdi,%r15
rorq $28,%r14
addq %r13,%r12
- addq %r15,%rcx
+ xorq %r15,%rcx
addq %r12,%r10
addq %r12,%rcx
- leaq 1(%rdi),%rdi
- addq %r14,%rcx
+ leaq 24(%rbp),%rbp
movq 56(%rsp),%r13
- movq 32(%rsp),%r14
- movq %r13,%r12
- movq %r14,%r15
+ movq 32(%rsp),%r15
- rorq $7,%r12
- xorq %r13,%r12
- shrq $7,%r13
+ movq %r13,%r12
+ rorq $7,%r13
+ addq %r14,%rcx
+ movq %r15,%r14
+ rorq $42,%r15
- rorq $1,%r12
xorq %r12,%r13
- movq 120(%rsp),%r12
-
- rorq $42,%r15
+ shrq $7,%r12
+ rorq $1,%r13
xorq %r14,%r15
shrq $6,%r14
rorq $19,%r15
- addq %r13,%r12
- xorq %r15,%r14
+ xorq %r13,%r12
+ xorq %r14,%r15
+ addq 120(%rsp),%r12
addq 48(%rsp),%r12
movq %r10,%r13
- addq %r14,%r12
+ addq %r15,%r12
movq %rcx,%r14
rorq $23,%r13
movq %r11,%r15
- movq %r12,48(%rsp)
- rorq $5,%r14
xorq %r10,%r13
+ rorq $5,%r14
xorq %rax,%r15
- rorq $4,%r13
- addq %rbx,%r12
+ movq %r12,48(%rsp)
xorq %rcx,%r14
-
- addq (%rbp,%rdi,8),%r12
andq %r10,%r15
- movq %rdx,%rbx
+
+ rorq $4,%r13
+ addq %rbx,%r12
+ xorq %rax,%r15
rorq $6,%r14
xorq %r10,%r13
- xorq %rax,%r15
+ addq %r15,%r12
- xorq %r8,%rbx
+ movq %rcx,%r15
+ addq (%rbp),%r12
xorq %rcx,%r14
- addq %r15,%r12
- movq %rdx,%r15
+ xorq %rdx,%r15
rorq $14,%r13
- andq %rcx,%rbx
- andq %r8,%r15
+ movq %rdx,%rbx
+ andq %r15,%rdi
rorq $28,%r14
addq %r13,%r12
- addq %r15,%rbx
+ xorq %rdi,%rbx
addq %r12,%r9
addq %r12,%rbx
- leaq 1(%rdi),%rdi
- addq %r14,%rbx
+ leaq 8(%rbp),%rbp
movq 64(%rsp),%r13
- movq 40(%rsp),%r14
- movq %r13,%r12
- movq %r14,%r15
+ movq 40(%rsp),%rdi
- rorq $7,%r12
- xorq %r13,%r12
- shrq $7,%r13
+ movq %r13,%r12
+ rorq $7,%r13
+ addq %r14,%rbx
+ movq %rdi,%r14
+ rorq $42,%rdi
- rorq $1,%r12
xorq %r12,%r13
- movq 0(%rsp),%r12
-
- rorq $42,%r15
- xorq %r14,%r15
+ shrq $7,%r12
+ rorq $1,%r13
+ xorq %r14,%rdi
shrq $6,%r14
- rorq $19,%r15
- addq %r13,%r12
- xorq %r15,%r14
+ rorq $19,%rdi
+ xorq %r13,%r12
+ xorq %r14,%rdi
+ addq 0(%rsp),%r12
addq 56(%rsp),%r12
movq %r9,%r13
- addq %r14,%r12
+ addq %rdi,%r12
movq %rbx,%r14
rorq $23,%r13
- movq %r10,%r15
- movq %r12,56(%rsp)
+ movq %r10,%rdi
- rorq $5,%r14
xorq %r9,%r13
- xorq %r11,%r15
+ rorq $5,%r14
+ xorq %r11,%rdi
- rorq $4,%r13
- addq %rax,%r12
+ movq %r12,56(%rsp)
xorq %rbx,%r14
+ andq %r9,%rdi
- addq (%rbp,%rdi,8),%r12
- andq %r9,%r15
- movq %rcx,%rax
+ rorq $4,%r13
+ addq %rax,%r12
+ xorq %r11,%rdi
rorq $6,%r14
xorq %r9,%r13
- xorq %r11,%r15
+ addq %rdi,%r12
- xorq %rdx,%rax
+ movq %rbx,%rdi
+ addq (%rbp),%r12
xorq %rbx,%r14
- addq %r15,%r12
- movq %rcx,%r15
+ xorq %rcx,%rdi
rorq $14,%r13
- andq %rbx,%rax
- andq %rdx,%r15
+ movq %rcx,%rax
+ andq %rdi,%r15
rorq $28,%r14
addq %r13,%r12
- addq %r15,%rax
+ xorq %r15,%rax
addq %r12,%r8
addq %r12,%rax
- leaq 1(%rdi),%rdi
- addq %r14,%rax
+ leaq 24(%rbp),%rbp
movq 72(%rsp),%r13
- movq 48(%rsp),%r14
- movq %r13,%r12
- movq %r14,%r15
+ movq 48(%rsp),%r15
- rorq $7,%r12
- xorq %r13,%r12
- shrq $7,%r13
+ movq %r13,%r12
+ rorq $7,%r13
+ addq %r14,%rax
+ movq %r15,%r14
+ rorq $42,%r15
- rorq $1,%r12
xorq %r12,%r13
- movq 8(%rsp),%r12
-
- rorq $42,%r15
+ shrq $7,%r12
+ rorq $1,%r13
xorq %r14,%r15
shrq $6,%r14
rorq $19,%r15
- addq %r13,%r12
- xorq %r15,%r14
+ xorq %r13,%r12
+ xorq %r14,%r15
+ addq 8(%rsp),%r12
addq 64(%rsp),%r12
movq %r8,%r13
- addq %r14,%r12
+ addq %r15,%r12
movq %rax,%r14
rorq $23,%r13
movq %r9,%r15
- movq %r12,64(%rsp)
- rorq $5,%r14
xorq %r8,%r13
+ rorq $5,%r14
xorq %r10,%r15
- rorq $4,%r13
- addq %r11,%r12
+ movq %r12,64(%rsp)
xorq %rax,%r14
-
- addq (%rbp,%rdi,8),%r12
andq %r8,%r15
- movq %rbx,%r11
+
+ rorq $4,%r13
+ addq %r11,%r12
+ xorq %r10,%r15
rorq $6,%r14
xorq %r8,%r13
- xorq %r10,%r15
+ addq %r15,%r12
- xorq %rcx,%r11
+ movq %rax,%r15
+ addq (%rbp),%r12
xorq %rax,%r14
- addq %r15,%r12
- movq %rbx,%r15
+ xorq %rbx,%r15
rorq $14,%r13
- andq %rax,%r11
- andq %rcx,%r15
+ movq %rbx,%r11
+ andq %r15,%rdi
rorq $28,%r14
addq %r13,%r12
- addq %r15,%r11
+ xorq %rdi,%r11
addq %r12,%rdx
addq %r12,%r11
- leaq 1(%rdi),%rdi
- addq %r14,%r11
+ leaq 8(%rbp),%rbp
movq 80(%rsp),%r13
- movq 56(%rsp),%r14
- movq %r13,%r12
- movq %r14,%r15
+ movq 56(%rsp),%rdi
- rorq $7,%r12
- xorq %r13,%r12
- shrq $7,%r13
+ movq %r13,%r12
+ rorq $7,%r13
+ addq %r14,%r11
+ movq %rdi,%r14
+ rorq $42,%rdi
- rorq $1,%r12
xorq %r12,%r13
- movq 16(%rsp),%r12
-
- rorq $42,%r15
- xorq %r14,%r15
+ shrq $7,%r12
+ rorq $1,%r13
+ xorq %r14,%rdi
shrq $6,%r14
- rorq $19,%r15
- addq %r13,%r12
- xorq %r15,%r14
+ rorq $19,%rdi
+ xorq %r13,%r12
+ xorq %r14,%rdi
+ addq 16(%rsp),%r12
addq 72(%rsp),%r12
movq %rdx,%r13
- addq %r14,%r12
+ addq %rdi,%r12
movq %r11,%r14
rorq $23,%r13
- movq %r8,%r15
- movq %r12,72(%rsp)
+ movq %r8,%rdi
- rorq $5,%r14
xorq %rdx,%r13
- xorq %r9,%r15
+ rorq $5,%r14
+ xorq %r9,%rdi
- rorq $4,%r13
- addq %r10,%r12
+ movq %r12,72(%rsp)
xorq %r11,%r14
+ andq %rdx,%rdi
- addq (%rbp,%rdi,8),%r12
- andq %rdx,%r15
- movq %rax,%r10
+ rorq $4,%r13
+ addq %r10,%r12
+ xorq %r9,%rdi
rorq $6,%r14
xorq %rdx,%r13
- xorq %r9,%r15
+ addq %rdi,%r12
- xorq %rbx,%r10
+ movq %r11,%rdi
+ addq (%rbp),%r12
xorq %r11,%r14
- addq %r15,%r12
- movq %rax,%r15
+ xorq %rax,%rdi
rorq $14,%r13
- andq %r11,%r10
- andq %rbx,%r15
+ movq %rax,%r10
+ andq %rdi,%r15
rorq $28,%r14
addq %r13,%r12
- addq %r15,%r10
+ xorq %r15,%r10
addq %r12,%rcx
addq %r12,%r10
- leaq 1(%rdi),%rdi
- addq %r14,%r10
+ leaq 24(%rbp),%rbp
movq 88(%rsp),%r13
- movq 64(%rsp),%r14
- movq %r13,%r12
- movq %r14,%r15
+ movq 64(%rsp),%r15
- rorq $7,%r12
- xorq %r13,%r12
- shrq $7,%r13
+ movq %r13,%r12
+ rorq $7,%r13
+ addq %r14,%r10
+ movq %r15,%r14
+ rorq $42,%r15
- rorq $1,%r12
xorq %r12,%r13
- movq 24(%rsp),%r12
-
- rorq $42,%r15
+ shrq $7,%r12
+ rorq $1,%r13
xorq %r14,%r15
shrq $6,%r14
rorq $19,%r15
- addq %r13,%r12
- xorq %r15,%r14
+ xorq %r13,%r12
+ xorq %r14,%r15
+ addq 24(%rsp),%r12
addq 80(%rsp),%r12
movq %rcx,%r13
- addq %r14,%r12
+ addq %r15,%r12
movq %r10,%r14
rorq $23,%r13
movq %rdx,%r15
- movq %r12,80(%rsp)
- rorq $5,%r14
xorq %rcx,%r13
+ rorq $5,%r14
xorq %r8,%r15
- rorq $4,%r13
- addq %r9,%r12
+ movq %r12,80(%rsp)
xorq %r10,%r14
-
- addq (%rbp,%rdi,8),%r12
andq %rcx,%r15
- movq %r11,%r9
+
+ rorq $4,%r13
+ addq %r9,%r12
+ xorq %r8,%r15
rorq $6,%r14
xorq %rcx,%r13
- xorq %r8,%r15
+ addq %r15,%r12
- xorq %rax,%r9
+ movq %r10,%r15
+ addq (%rbp),%r12
xorq %r10,%r14
- addq %r15,%r12
- movq %r11,%r15
+ xorq %r11,%r15
rorq $14,%r13
- andq %r10,%r9
- andq %rax,%r15
+ movq %r11,%r9
+ andq %r15,%rdi
rorq $28,%r14
addq %r13,%r12
- addq %r15,%r9
+ xorq %rdi,%r9
addq %r12,%rbx
addq %r12,%r9
- leaq 1(%rdi),%rdi
- addq %r14,%r9
+ leaq 8(%rbp),%rbp
movq 96(%rsp),%r13
- movq 72(%rsp),%r14
- movq %r13,%r12
- movq %r14,%r15
+ movq 72(%rsp),%rdi
- rorq $7,%r12
- xorq %r13,%r12
- shrq $7,%r13
+ movq %r13,%r12
+ rorq $7,%r13
+ addq %r14,%r9
+ movq %rdi,%r14
+ rorq $42,%rdi
- rorq $1,%r12
xorq %r12,%r13
- movq 32(%rsp),%r12
-
- rorq $42,%r15
- xorq %r14,%r15
+ shrq $7,%r12
+ rorq $1,%r13
+ xorq %r14,%rdi
shrq $6,%r14
- rorq $19,%r15
- addq %r13,%r12
- xorq %r15,%r14
+ rorq $19,%rdi
+ xorq %r13,%r12
+ xorq %r14,%rdi
+ addq 32(%rsp),%r12
addq 88(%rsp),%r12
movq %rbx,%r13
- addq %r14,%r12
+ addq %rdi,%r12
movq %r9,%r14
rorq $23,%r13
- movq %rcx,%r15
- movq %r12,88(%rsp)
+ movq %rcx,%rdi
- rorq $5,%r14
xorq %rbx,%r13
- xorq %rdx,%r15
+ rorq $5,%r14
+ xorq %rdx,%rdi
- rorq $4,%r13
- addq %r8,%r12
+ movq %r12,88(%rsp)
xorq %r9,%r14
+ andq %rbx,%rdi
- addq (%rbp,%rdi,8),%r12
- andq %rbx,%r15
- movq %r10,%r8
+ rorq $4,%r13
+ addq %r8,%r12
+ xorq %rdx,%rdi
rorq $6,%r14
xorq %rbx,%r13
- xorq %rdx,%r15
+ addq %rdi,%r12
- xorq %r11,%r8
+ movq %r9,%rdi
+ addq (%rbp),%r12
xorq %r9,%r14
- addq %r15,%r12
- movq %r10,%r15
+ xorq %r10,%rdi
rorq $14,%r13
- andq %r9,%r8
- andq %r11,%r15
+ movq %r10,%r8
+ andq %rdi,%r15
rorq $28,%r14
addq %r13,%r12
- addq %r15,%r8
+ xorq %r15,%r8
addq %r12,%rax
addq %r12,%r8
- leaq 1(%rdi),%rdi
- addq %r14,%r8
+ leaq 24(%rbp),%rbp
movq 104(%rsp),%r13
- movq 80(%rsp),%r14
- movq %r13,%r12
- movq %r14,%r15
+ movq 80(%rsp),%r15
- rorq $7,%r12
- xorq %r13,%r12
- shrq $7,%r13
+ movq %r13,%r12
+ rorq $7,%r13
+ addq %r14,%r8
+ movq %r15,%r14
+ rorq $42,%r15
- rorq $1,%r12
xorq %r12,%r13
- movq 40(%rsp),%r12
-
- rorq $42,%r15
+ shrq $7,%r12
+ rorq $1,%r13
xorq %r14,%r15
shrq $6,%r14
rorq $19,%r15
- addq %r13,%r12
- xorq %r15,%r14
+ xorq %r13,%r12
+ xorq %r14,%r15
+ addq 40(%rsp),%r12
addq 96(%rsp),%r12
movq %rax,%r13
- addq %r14,%r12
+ addq %r15,%r12
movq %r8,%r14
rorq $23,%r13
movq %rbx,%r15
- movq %r12,96(%rsp)
- rorq $5,%r14
xorq %rax,%r13
+ rorq $5,%r14
xorq %rcx,%r15
- rorq $4,%r13
- addq %rdx,%r12
+ movq %r12,96(%rsp)
xorq %r8,%r14
-
- addq (%rbp,%rdi,8),%r12
andq %rax,%r15
- movq %r9,%rdx
+
+ rorq $4,%r13
+ addq %rdx,%r12
+ xorq %rcx,%r15
rorq $6,%r14
xorq %rax,%r13
- xorq %rcx,%r15
+ addq %r15,%r12
- xorq %r10,%rdx
+ movq %r8,%r15
+ addq (%rbp),%r12
xorq %r8,%r14
- addq %r15,%r12
- movq %r9,%r15
+ xorq %r9,%r15
rorq $14,%r13
- andq %r8,%rdx
- andq %r10,%r15
+ movq %r9,%rdx
+ andq %r15,%rdi
rorq $28,%r14
addq %r13,%r12
- addq %r15,%rdx
+ xorq %rdi,%rdx
addq %r12,%r11
addq %r12,%rdx
- leaq 1(%rdi),%rdi
- addq %r14,%rdx
+ leaq 8(%rbp),%rbp
movq 112(%rsp),%r13
- movq 88(%rsp),%r14
- movq %r13,%r12
- movq %r14,%r15
+ movq 88(%rsp),%rdi
- rorq $7,%r12
- xorq %r13,%r12
- shrq $7,%r13
+ movq %r13,%r12
+ rorq $7,%r13
+ addq %r14,%rdx
+ movq %rdi,%r14
+ rorq $42,%rdi
- rorq $1,%r12
xorq %r12,%r13
- movq 48(%rsp),%r12
-
- rorq $42,%r15
- xorq %r14,%r15
+ shrq $7,%r12
+ rorq $1,%r13
+ xorq %r14,%rdi
shrq $6,%r14
- rorq $19,%r15
- addq %r13,%r12
- xorq %r15,%r14
+ rorq $19,%rdi
+ xorq %r13,%r12
+ xorq %r14,%rdi
+ addq 48(%rsp),%r12
addq 104(%rsp),%r12
movq %r11,%r13
- addq %r14,%r12
+ addq %rdi,%r12
movq %rdx,%r14
rorq $23,%r13
- movq %rax,%r15
- movq %r12,104(%rsp)
+ movq %rax,%rdi
- rorq $5,%r14
xorq %r11,%r13
- xorq %rbx,%r15
+ rorq $5,%r14
+ xorq %rbx,%rdi
- rorq $4,%r13
- addq %rcx,%r12
+ movq %r12,104(%rsp)
xorq %rdx,%r14
+ andq %r11,%rdi
- addq (%rbp,%rdi,8),%r12
- andq %r11,%r15
- movq %r8,%rcx
+ rorq $4,%r13
+ addq %rcx,%r12
+ xorq %rbx,%rdi
rorq $6,%r14
xorq %r11,%r13
- xorq %rbx,%r15
+ addq %rdi,%r12
- xorq %r9,%rcx
+ movq %rdx,%rdi
+ addq (%rbp),%r12
xorq %rdx,%r14
- addq %r15,%r12
- movq %r8,%r15
+ xorq %r8,%rdi
rorq $14,%r13
- andq %rdx,%rcx
- andq %r9,%r15
+ movq %r8,%rcx
+ andq %rdi,%r15
rorq $28,%r14
addq %r13,%r12
- addq %r15,%rcx
+ xorq %r15,%rcx
addq %r12,%r10
addq %r12,%rcx
- leaq 1(%rdi),%rdi
- addq %r14,%rcx
+ leaq 24(%rbp),%rbp
movq 120(%rsp),%r13
- movq 96(%rsp),%r14
- movq %r13,%r12
- movq %r14,%r15
+ movq 96(%rsp),%r15
- rorq $7,%r12
- xorq %r13,%r12
- shrq $7,%r13
+ movq %r13,%r12
+ rorq $7,%r13
+ addq %r14,%rcx
+ movq %r15,%r14
+ rorq $42,%r15
- rorq $1,%r12
xorq %r12,%r13
- movq 56(%rsp),%r12
-
- rorq $42,%r15
+ shrq $7,%r12
+ rorq $1,%r13
xorq %r14,%r15
shrq $6,%r14
rorq $19,%r15
- addq %r13,%r12
- xorq %r15,%r14
+ xorq %r13,%r12
+ xorq %r14,%r15
+ addq 56(%rsp),%r12
addq 112(%rsp),%r12
movq %r10,%r13
- addq %r14,%r12
+ addq %r15,%r12
movq %rcx,%r14
rorq $23,%r13
movq %r11,%r15
- movq %r12,112(%rsp)
- rorq $5,%r14
xorq %r10,%r13
+ rorq $5,%r14
xorq %rax,%r15
- rorq $4,%r13
- addq %rbx,%r12
+ movq %r12,112(%rsp)
xorq %rcx,%r14
-
- addq (%rbp,%rdi,8),%r12
andq %r10,%r15
- movq %rdx,%rbx
+
+ rorq $4,%r13
+ addq %rbx,%r12
+ xorq %rax,%r15
rorq $6,%r14
xorq %r10,%r13
- xorq %rax,%r15
+ addq %r15,%r12
- xorq %r8,%rbx
+ movq %rcx,%r15
+ addq (%rbp),%r12
xorq %rcx,%r14
- addq %r15,%r12
- movq %rdx,%r15
+ xorq %rdx,%r15
rorq $14,%r13
- andq %rcx,%rbx
- andq %r8,%r15
+ movq %rdx,%rbx
+ andq %r15,%rdi
rorq $28,%r14
addq %r13,%r12
- addq %r15,%rbx
+ xorq %rdi,%rbx
addq %r12,%r9
addq %r12,%rbx
- leaq 1(%rdi),%rdi
- addq %r14,%rbx
+ leaq 8(%rbp),%rbp
movq 0(%rsp),%r13
- movq 104(%rsp),%r14
- movq %r13,%r12
- movq %r14,%r15
+ movq 104(%rsp),%rdi
- rorq $7,%r12
- xorq %r13,%r12
- shrq $7,%r13
+ movq %r13,%r12
+ rorq $7,%r13
+ addq %r14,%rbx
+ movq %rdi,%r14
+ rorq $42,%rdi
- rorq $1,%r12
xorq %r12,%r13
- movq 64(%rsp),%r12
-
- rorq $42,%r15
- xorq %r14,%r15
+ shrq $7,%r12
+ rorq $1,%r13
+ xorq %r14,%rdi
shrq $6,%r14
- rorq $19,%r15
- addq %r13,%r12
- xorq %r15,%r14
+ rorq $19,%rdi
+ xorq %r13,%r12
+ xorq %r14,%rdi
+ addq 64(%rsp),%r12
addq 120(%rsp),%r12
movq %r9,%r13
- addq %r14,%r12
+ addq %rdi,%r12
movq %rbx,%r14
rorq $23,%r13
- movq %r10,%r15
- movq %r12,120(%rsp)
+ movq %r10,%rdi
- rorq $5,%r14
xorq %r9,%r13
- xorq %r11,%r15
+ rorq $5,%r14
+ xorq %r11,%rdi
- rorq $4,%r13
- addq %rax,%r12
+ movq %r12,120(%rsp)
xorq %rbx,%r14
+ andq %r9,%rdi
- addq (%rbp,%rdi,8),%r12
- andq %r9,%r15
- movq %rcx,%rax
+ rorq $4,%r13
+ addq %rax,%r12
+ xorq %r11,%rdi
rorq $6,%r14
xorq %r9,%r13
- xorq %r11,%r15
+ addq %rdi,%r12
- xorq %rdx,%rax
+ movq %rbx,%rdi
+ addq (%rbp),%r12
xorq %rbx,%r14
- addq %r15,%r12
- movq %rcx,%r15
+ xorq %rcx,%rdi
rorq $14,%r13
- andq %rbx,%rax
- andq %rdx,%r15
+ movq %rcx,%rax
+ andq %rdi,%r15
rorq $28,%r14
addq %r13,%r12
- addq %r15,%rax
+ xorq %r15,%rax
addq %r12,%r8
addq %r12,%rax
- leaq 1(%rdi),%rdi
- addq %r14,%rax
- cmpq $80,%rdi
- jb .Lrounds_16_xx
+ leaq 24(%rbp),%rbp
+ cmpb $0,7(%rbp)
+ jnz .Lrounds_16_xx
movq 128+0(%rsp),%rdi
+ addq %r14,%rax
leaq 128(%rsi),%rsi
addq 0(%rdi),%rax
@@ -1762,42 +1699,86 @@ sha512_block_data_order:
.type K512,@object
K512:
.quad 0x428a2f98d728ae22,0x7137449123ef65cd
+.quad 0x428a2f98d728ae22,0x7137449123ef65cd
+.quad 0xb5c0fbcfec4d3b2f,0xe9b5dba58189dbbc
.quad 0xb5c0fbcfec4d3b2f,0xe9b5dba58189dbbc
.quad 0x3956c25bf348b538,0x59f111f1b605d019
+.quad 0x3956c25bf348b538,0x59f111f1b605d019
+.quad 0x923f82a4af194f9b,0xab1c5ed5da6d8118
.quad 0x923f82a4af194f9b,0xab1c5ed5da6d8118
.quad 0xd807aa98a3030242,0x12835b0145706fbe
+.quad 0xd807aa98a3030242,0x12835b0145706fbe
+.quad 0x243185be4ee4b28c,0x550c7dc3d5ffb4e2
.quad 0x243185be4ee4b28c,0x550c7dc3d5ffb4e2
.quad 0x72be5d74f27b896f,0x80deb1fe3b1696b1
+.quad 0x72be5d74f27b896f,0x80deb1fe3b1696b1
+.quad 0x9bdc06a725c71235,0xc19bf174cf692694
.quad 0x9bdc06a725c71235,0xc19bf174cf692694
.quad 0xe49b69c19ef14ad2,0xefbe4786384f25e3
+.quad 0xe49b69c19ef14ad2,0xefbe4786384f25e3
.quad 0x0fc19dc68b8cd5b5,0x240ca1cc77ac9c65
+.quad 0x0fc19dc68b8cd5b5,0x240ca1cc77ac9c65
+.quad 0x2de92c6f592b0275,0x4a7484aa6ea6e483
.quad 0x2de92c6f592b0275,0x4a7484aa6ea6e483
.quad 0x5cb0a9dcbd41fbd4,0x76f988da831153b5
+.quad 0x5cb0a9dcbd41fbd4,0x76f988da831153b5
.quad 0x983e5152ee66dfab,0xa831c66d2db43210
+.quad 0x983e5152ee66dfab,0xa831c66d2db43210
+.quad 0xb00327c898fb213f,0xbf597fc7beef0ee4
.quad 0xb00327c898fb213f,0xbf597fc7beef0ee4
.quad 0xc6e00bf33da88fc2,0xd5a79147930aa725
+.quad 0xc6e00bf33da88fc2,0xd5a79147930aa725
.quad 0x06ca6351e003826f,0x142929670a0e6e70
+.quad 0x06ca6351e003826f,0x142929670a0e6e70
+.quad 0x27b70a8546d22ffc,0x2e1b21385c26c926
.quad 0x27b70a8546d22ffc,0x2e1b21385c26c926
.quad 0x4d2c6dfc5ac42aed,0x53380d139d95b3df
+.quad 0x4d2c6dfc5ac42aed,0x53380d139d95b3df
+.quad 0x650a73548baf63de,0x766a0abb3c77b2a8
.quad 0x650a73548baf63de,0x766a0abb3c77b2a8
.quad 0x81c2c92e47edaee6,0x92722c851482353b
+.quad 0x81c2c92e47edaee6,0x92722c851482353b
+.quad 0xa2bfe8a14cf10364,0xa81a664bbc423001
.quad 0xa2bfe8a14cf10364,0xa81a664bbc423001
.quad 0xc24b8b70d0f89791,0xc76c51a30654be30
+.quad 0xc24b8b70d0f89791,0xc76c51a30654be30
.quad 0xd192e819d6ef5218,0xd69906245565a910
+.quad 0xd192e819d6ef5218,0xd69906245565a910
+.quad 0xf40e35855771202a,0x106aa07032bbd1b8
.quad 0xf40e35855771202a,0x106aa07032bbd1b8
.quad 0x19a4c116b8d2d0c8,0x1e376c085141ab53
+.quad 0x19a4c116b8d2d0c8,0x1e376c085141ab53
.quad 0x2748774cdf8eeb99,0x34b0bcb5e19b48a8
+.quad 0x2748774cdf8eeb99,0x34b0bcb5e19b48a8
+.quad 0x391c0cb3c5c95a63,0x4ed8aa4ae3418acb
.quad 0x391c0cb3c5c95a63,0x4ed8aa4ae3418acb
.quad 0x5b9cca4f7763e373,0x682e6ff3d6b2b8a3
+.quad 0x5b9cca4f7763e373,0x682e6ff3d6b2b8a3
.quad 0x748f82ee5defb2fc,0x78a5636f43172f60
+.quad 0x748f82ee5defb2fc,0x78a5636f43172f60
+.quad 0x84c87814a1f0ab72,0x8cc702081a6439ec
.quad 0x84c87814a1f0ab72,0x8cc702081a6439ec
.quad 0x90befffa23631e28,0xa4506cebde82bde9
+.quad 0x90befffa23631e28,0xa4506cebde82bde9
+.quad 0xbef9a3f7b2c67915,0xc67178f2e372532b
.quad 0xbef9a3f7b2c67915,0xc67178f2e372532b
.quad 0xca273eceea26619c,0xd186b8c721c0c207
+.quad 0xca273eceea26619c,0xd186b8c721c0c207
+.quad 0xeada7dd6cde0eb1e,0xf57d4f7fee6ed178
.quad 0xeada7dd6cde0eb1e,0xf57d4f7fee6ed178
.quad 0x06f067aa72176fba,0x0a637dc5a2c898a6
+.quad 0x06f067aa72176fba,0x0a637dc5a2c898a6
.quad 0x113f9804bef90dae,0x1b710b35131c471b
+.quad 0x113f9804bef90dae,0x1b710b35131c471b
+.quad 0x28db77f523047d84,0x32caab7b40c72493
.quad 0x28db77f523047d84,0x32caab7b40c72493
.quad 0x3c9ebe0a15c9bebc,0x431d67c49c100d4c
+.quad 0x3c9ebe0a15c9bebc,0x431d67c49c100d4c
.quad 0x4cc5d4becb3e42b6,0x597f299cfc657e2a
+.quad 0x4cc5d4becb3e42b6,0x597f299cfc657e2a
+.quad 0x5fcb6fab3ad6faec,0x6c44198c4a475817
.quad 0x5fcb6fab3ad6faec,0x6c44198c4a475817
+
+.quad 0x0001020304050607,0x08090a0b0c0d0e0f
+.quad 0x0001020304050607,0x08090a0b0c0d0e0f
+.byte 83,72,65,53,49,50,32,98,108,111,99,107,32,116,114,97,110,115,102,111,114,109,32,102,111,114,32,120,56,54,95,54,52,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0
diff --git a/secure/lib/libcrypto/amd64/vpaes-x86_64.S b/secure/lib/libcrypto/amd64/vpaes-x86_64.S
index 8cb9644..8ec5c40 100644
--- a/secure/lib/libcrypto/amd64/vpaes-x86_64.S
+++ b/secure/lib/libcrypto/amd64/vpaes-x86_64.S
@@ -32,8 +32,8 @@ _vpaes_encrypt_core:
movdqa .Lk_ipt+16(%rip),%xmm0
.byte 102,15,56,0,193
pxor %xmm5,%xmm2
- pxor %xmm2,%xmm0
addq $16,%r9
+ pxor %xmm2,%xmm0
leaq .Lk_mc_backward(%rip),%r10
jmp .Lenc_entry
@@ -41,19 +41,19 @@ _vpaes_encrypt_core:
.Lenc_loop:
movdqa %xmm13,%xmm4
-.byte 102,15,56,0,226
- pxor %xmm5,%xmm4
movdqa %xmm12,%xmm0
+.byte 102,15,56,0,226
.byte 102,15,56,0,195
- pxor %xmm4,%xmm0
+ pxor %xmm5,%xmm4
movdqa %xmm15,%xmm5
-.byte 102,15,56,0,234
+ pxor %xmm4,%xmm0
movdqa -64(%r11,%r10,1),%xmm1
+.byte 102,15,56,0,234
+ movdqa (%r11,%r10,1),%xmm4
movdqa %xmm14,%xmm2
.byte 102,15,56,0,211
- pxor %xmm5,%xmm2
- movdqa (%r11,%r10,1),%xmm4
movdqa %xmm0,%xmm3
+ pxor %xmm5,%xmm2
.byte 102,15,56,0,193
addq $16,%r9
pxor %xmm2,%xmm0
@@ -62,30 +62,30 @@ _vpaes_encrypt_core:
pxor %xmm0,%xmm3
.byte 102,15,56,0,193
andq $48,%r11
- pxor %xmm3,%xmm0
subq $1,%rax
+ pxor %xmm3,%xmm0
.Lenc_entry:
movdqa %xmm9,%xmm1
+ movdqa %xmm11,%xmm5
pandn %xmm0,%xmm1
psrld $4,%xmm1
pand %xmm9,%xmm0
- movdqa %xmm11,%xmm5
.byte 102,15,56,0,232
- pxor %xmm1,%xmm0
movdqa %xmm10,%xmm3
+ pxor %xmm1,%xmm0
.byte 102,15,56,0,217
- pxor %xmm5,%xmm3
movdqa %xmm10,%xmm4
+ pxor %xmm5,%xmm3
.byte 102,15,56,0,224
- pxor %xmm5,%xmm4
movdqa %xmm10,%xmm2
+ pxor %xmm5,%xmm4
.byte 102,15,56,0,211
- pxor %xmm0,%xmm2
movdqa %xmm10,%xmm3
- movdqu (%r9),%xmm5
+ pxor %xmm0,%xmm2
.byte 102,15,56,0,220
+ movdqu (%r9),%xmm5
pxor %xmm1,%xmm3
jnz .Lenc_loop
@@ -138,62 +138,61 @@ _vpaes_decrypt_core:
movdqa -32(%r10),%xmm4
+ movdqa -16(%r10),%xmm1
.byte 102,15,56,0,226
- pxor %xmm0,%xmm4
- movdqa -16(%r10),%xmm0
-.byte 102,15,56,0,195
+.byte 102,15,56,0,203
pxor %xmm4,%xmm0
- addq $16,%r9
-
-.byte 102,15,56,0,197
movdqa 0(%r10),%xmm4
-.byte 102,15,56,0,226
- pxor %xmm0,%xmm4
- movdqa 16(%r10),%xmm0
-.byte 102,15,56,0,195
- pxor %xmm4,%xmm0
- subq $1,%rax
+ pxor %xmm1,%xmm0
+ movdqa 16(%r10),%xmm1
-.byte 102,15,56,0,197
- movdqa 32(%r10),%xmm4
.byte 102,15,56,0,226
- pxor %xmm0,%xmm4
- movdqa 48(%r10),%xmm0
-.byte 102,15,56,0,195
+.byte 102,15,56,0,197
+.byte 102,15,56,0,203
pxor %xmm4,%xmm0
+ movdqa 32(%r10),%xmm4
+ pxor %xmm1,%xmm0
+ movdqa 48(%r10),%xmm1
+.byte 102,15,56,0,226
.byte 102,15,56,0,197
+.byte 102,15,56,0,203
+ pxor %xmm4,%xmm0
movdqa 64(%r10),%xmm4
+ pxor %xmm1,%xmm0
+ movdqa 80(%r10),%xmm1
+
.byte 102,15,56,0,226
- pxor %xmm0,%xmm4
- movdqa 80(%r10),%xmm0
-.byte 102,15,56,0,195
+.byte 102,15,56,0,197
+.byte 102,15,56,0,203
pxor %xmm4,%xmm0
-
+ addq $16,%r9
.byte 102,15,58,15,237,12
+ pxor %xmm1,%xmm0
+ subq $1,%rax
.Ldec_entry:
movdqa %xmm9,%xmm1
pandn %xmm0,%xmm1
+ movdqa %xmm11,%xmm2
psrld $4,%xmm1
pand %xmm9,%xmm0
- movdqa %xmm11,%xmm2
.byte 102,15,56,0,208
- pxor %xmm1,%xmm0
movdqa %xmm10,%xmm3
+ pxor %xmm1,%xmm0
.byte 102,15,56,0,217
- pxor %xmm2,%xmm3
movdqa %xmm10,%xmm4
+ pxor %xmm2,%xmm3
.byte 102,15,56,0,224
pxor %xmm2,%xmm4
movdqa %xmm10,%xmm2
.byte 102,15,56,0,211
- pxor %xmm0,%xmm2
movdqa %xmm10,%xmm3
+ pxor %xmm0,%xmm2
.byte 102,15,56,0,220
- pxor %xmm1,%xmm3
movdqu (%r9),%xmm0
+ pxor %xmm1,%xmm3
jnz .Ldec_loop
@@ -221,7 +220,7 @@ _vpaes_schedule_core:
- call _vpaes_preheat
+ call _vpaes_preheat
movdqa .Lk_rcon(%rip),%xmm8
movdqu (%rdi),%xmm0
@@ -267,7 +266,7 @@ _vpaes_schedule_core:
call _vpaes_schedule_round
decq %rsi
jz .Lschedule_mangle_last
- call _vpaes_schedule_mangle
+ call _vpaes_schedule_mangle
jmp .Loop_schedule_128
@@ -288,7 +287,7 @@ _vpaes_schedule_core:
.align 16
.Lschedule_192:
movdqu 8(%rdi),%xmm0
- call _vpaes_schedule_transform
+ call _vpaes_schedule_transform
movdqa %xmm0,%xmm6
pxor %xmm4,%xmm4
movhlps %xmm4,%xmm6
@@ -297,13 +296,13 @@ _vpaes_schedule_core:
.Loop_schedule_192:
call _vpaes_schedule_round
.byte 102,15,58,15,198,8
- call _vpaes_schedule_mangle
+ call _vpaes_schedule_mangle
call _vpaes_schedule_192_smear
- call _vpaes_schedule_mangle
+ call _vpaes_schedule_mangle
call _vpaes_schedule_round
decq %rsi
jz .Lschedule_mangle_last
- call _vpaes_schedule_mangle
+ call _vpaes_schedule_mangle
call _vpaes_schedule_192_smear
jmp .Loop_schedule_192
@@ -320,18 +319,18 @@ _vpaes_schedule_core:
.align 16
.Lschedule_256:
movdqu 16(%rdi),%xmm0
- call _vpaes_schedule_transform
+ call _vpaes_schedule_transform
movl $7,%esi
.Loop_schedule_256:
- call _vpaes_schedule_mangle
+ call _vpaes_schedule_mangle
movdqa %xmm0,%xmm6
call _vpaes_schedule_round
decq %rsi
jz .Lschedule_mangle_last
- call _vpaes_schedule_mangle
+ call _vpaes_schedule_mangle
pshufd $255,%xmm0,%xmm0
@@ -369,7 +368,7 @@ _vpaes_schedule_core:
.Lschedule_mangle_last_dec:
addq $-16,%rdx
pxor .Lk_s63(%rip),%xmm0
- call _vpaes_schedule_transform
+ call _vpaes_schedule_transform
movdqu %xmm0,(%rdx)
@@ -401,12 +400,12 @@ _vpaes_schedule_core:
.type _vpaes_schedule_192_smear,@function
.align 16
_vpaes_schedule_192_smear:
- pshufd $128,%xmm6,%xmm0
- pxor %xmm0,%xmm6
+ pshufd $128,%xmm6,%xmm1
pshufd $254,%xmm7,%xmm0
+ pxor %xmm1,%xmm6
+ pxor %xmm1,%xmm1
pxor %xmm0,%xmm6
movdqa %xmm6,%xmm0
- pxor %xmm1,%xmm1
movhlps %xmm1,%xmm6
.byte 0xf3,0xc3
.size _vpaes_schedule_192_smear,.-_vpaes_schedule_192_smear
diff --git a/secure/lib/libcrypto/amd64/wp-x86_64.S b/secure/lib/libcrypto/amd64/wp-x86_64.S
index f6cf81c..36f5bc0 100644
--- a/secure/lib/libcrypto/amd64/wp-x86_64.S
+++ b/secure/lib/libcrypto/amd64/wp-x86_64.S
@@ -63,233 +63,236 @@ whirlpool_block:
movq %r15,64+56(%rsp)
xorq %rsi,%rsi
movq %rsi,24(%rbx)
+ jmp .Lround
.align 16
.Lround:
movq 4096(%rbp,%rsi,8),%r8
movl 0(%rsp),%eax
movl 4(%rsp),%ebx
- movb %al,%cl
- movb %ah,%dl
+ movzbl %al,%ecx
+ movzbl %ah,%edx
+ shrl $16,%eax
leaq (%rcx,%rcx,1),%rsi
+ movzbl %al,%ecx
leaq (%rdx,%rdx,1),%rdi
- shrl $16,%eax
+ movzbl %ah,%edx
xorq 0(%rbp,%rsi,8),%r8
movq 7(%rbp,%rdi,8),%r9
- movb %al,%cl
- movb %ah,%dl
movl 0+8(%rsp),%eax
leaq (%rcx,%rcx,1),%rsi
+ movzbl %bl,%ecx
leaq (%rdx,%rdx,1),%rdi
+ movzbl %bh,%edx
movq 6(%rbp,%rsi,8),%r10
movq 5(%rbp,%rdi,8),%r11
- movb %bl,%cl
- movb %bh,%dl
+ shrl $16,%ebx
leaq (%rcx,%rcx,1),%rsi
+ movzbl %bl,%ecx
leaq (%rdx,%rdx,1),%rdi
- shrl $16,%ebx
+ movzbl %bh,%edx
movq 4(%rbp,%rsi,8),%r12
movq 3(%rbp,%rdi,8),%r13
- movb %bl,%cl
- movb %bh,%dl
movl 0+8+4(%rsp),%ebx
leaq (%rcx,%rcx,1),%rsi
+ movzbl %al,%ecx
leaq (%rdx,%rdx,1),%rdi
+ movzbl %ah,%edx
movq 2(%rbp,%rsi,8),%r14
movq 1(%rbp,%rdi,8),%r15
- movb %al,%cl
- movb %ah,%dl
+ shrl $16,%eax
leaq (%rcx,%rcx,1),%rsi
+ movzbl %al,%ecx
leaq (%rdx,%rdx,1),%rdi
- shrl $16,%eax
+ movzbl %ah,%edx
xorq 0(%rbp,%rsi,8),%r9
xorq 7(%rbp,%rdi,8),%r10
- movb %al,%cl
- movb %ah,%dl
movl 8+8(%rsp),%eax
leaq (%rcx,%rcx,1),%rsi
+ movzbl %bl,%ecx
leaq (%rdx,%rdx,1),%rdi
+ movzbl %bh,%edx
xorq 6(%rbp,%rsi,8),%r11
xorq 5(%rbp,%rdi,8),%r12
- movb %bl,%cl
- movb %bh,%dl
+ shrl $16,%ebx
leaq (%rcx,%rcx,1),%rsi
+ movzbl %bl,%ecx
leaq (%rdx,%rdx,1),%rdi
- shrl $16,%ebx
+ movzbl %bh,%edx
xorq 4(%rbp,%rsi,8),%r13
xorq 3(%rbp,%rdi,8),%r14
- movb %bl,%cl
- movb %bh,%dl
movl 8+8+4(%rsp),%ebx
leaq (%rcx,%rcx,1),%rsi
+ movzbl %al,%ecx
leaq (%rdx,%rdx,1),%rdi
+ movzbl %ah,%edx
xorq 2(%rbp,%rsi,8),%r15
xorq 1(%rbp,%rdi,8),%r8
- movb %al,%cl
- movb %ah,%dl
+ shrl $16,%eax
leaq (%rcx,%rcx,1),%rsi
+ movzbl %al,%ecx
leaq (%rdx,%rdx,1),%rdi
- shrl $16,%eax
+ movzbl %ah,%edx
xorq 0(%rbp,%rsi,8),%r10
xorq 7(%rbp,%rdi,8),%r11
- movb %al,%cl
- movb %ah,%dl
movl 16+8(%rsp),%eax
leaq (%rcx,%rcx,1),%rsi
+ movzbl %bl,%ecx
leaq (%rdx,%rdx,1),%rdi
+ movzbl %bh,%edx
xorq 6(%rbp,%rsi,8),%r12
xorq 5(%rbp,%rdi,8),%r13
- movb %bl,%cl
- movb %bh,%dl
+ shrl $16,%ebx
leaq (%rcx,%rcx,1),%rsi
+ movzbl %bl,%ecx
leaq (%rdx,%rdx,1),%rdi
- shrl $16,%ebx
+ movzbl %bh,%edx
xorq 4(%rbp,%rsi,8),%r14
xorq 3(%rbp,%rdi,8),%r15
- movb %bl,%cl
- movb %bh,%dl
movl 16+8+4(%rsp),%ebx
leaq (%rcx,%rcx,1),%rsi
+ movzbl %al,%ecx
leaq (%rdx,%rdx,1),%rdi
+ movzbl %ah,%edx
xorq 2(%rbp,%rsi,8),%r8
xorq 1(%rbp,%rdi,8),%r9
- movb %al,%cl
- movb %ah,%dl
+ shrl $16,%eax
leaq (%rcx,%rcx,1),%rsi
+ movzbl %al,%ecx
leaq (%rdx,%rdx,1),%rdi
- shrl $16,%eax
+ movzbl %ah,%edx
xorq 0(%rbp,%rsi,8),%r11
xorq 7(%rbp,%rdi,8),%r12
- movb %al,%cl
- movb %ah,%dl
movl 24+8(%rsp),%eax
leaq (%rcx,%rcx,1),%rsi
+ movzbl %bl,%ecx
leaq (%rdx,%rdx,1),%rdi
+ movzbl %bh,%edx
xorq 6(%rbp,%rsi,8),%r13
xorq 5(%rbp,%rdi,8),%r14
- movb %bl,%cl
- movb %bh,%dl
+ shrl $16,%ebx
leaq (%rcx,%rcx,1),%rsi
+ movzbl %bl,%ecx
leaq (%rdx,%rdx,1),%rdi
- shrl $16,%ebx
+ movzbl %bh,%edx
xorq 4(%rbp,%rsi,8),%r15
xorq 3(%rbp,%rdi,8),%r8
- movb %bl,%cl
- movb %bh,%dl
movl 24+8+4(%rsp),%ebx
leaq (%rcx,%rcx,1),%rsi
+ movzbl %al,%ecx
leaq (%rdx,%rdx,1),%rdi
+ movzbl %ah,%edx
xorq 2(%rbp,%rsi,8),%r9
xorq 1(%rbp,%rdi,8),%r10
- movb %al,%cl
- movb %ah,%dl
+ shrl $16,%eax
leaq (%rcx,%rcx,1),%rsi
+ movzbl %al,%ecx
leaq (%rdx,%rdx,1),%rdi
- shrl $16,%eax
+ movzbl %ah,%edx
xorq 0(%rbp,%rsi,8),%r12
xorq 7(%rbp,%rdi,8),%r13
- movb %al,%cl
- movb %ah,%dl
movl 32+8(%rsp),%eax
leaq (%rcx,%rcx,1),%rsi
+ movzbl %bl,%ecx
leaq (%rdx,%rdx,1),%rdi
+ movzbl %bh,%edx
xorq 6(%rbp,%rsi,8),%r14
xorq 5(%rbp,%rdi,8),%r15
- movb %bl,%cl
- movb %bh,%dl
+ shrl $16,%ebx
leaq (%rcx,%rcx,1),%rsi
+ movzbl %bl,%ecx
leaq (%rdx,%rdx,1),%rdi
- shrl $16,%ebx
+ movzbl %bh,%edx
xorq 4(%rbp,%rsi,8),%r8
xorq 3(%rbp,%rdi,8),%r9
- movb %bl,%cl
- movb %bh,%dl
movl 32+8+4(%rsp),%ebx
leaq (%rcx,%rcx,1),%rsi
+ movzbl %al,%ecx
leaq (%rdx,%rdx,1),%rdi
+ movzbl %ah,%edx
xorq 2(%rbp,%rsi,8),%r10
xorq 1(%rbp,%rdi,8),%r11
- movb %al,%cl
- movb %ah,%dl
+ shrl $16,%eax
leaq (%rcx,%rcx,1),%rsi
+ movzbl %al,%ecx
leaq (%rdx,%rdx,1),%rdi
- shrl $16,%eax
+ movzbl %ah,%edx
xorq 0(%rbp,%rsi,8),%r13
xorq 7(%rbp,%rdi,8),%r14
- movb %al,%cl
- movb %ah,%dl
movl 40+8(%rsp),%eax
leaq (%rcx,%rcx,1),%rsi
+ movzbl %bl,%ecx
leaq (%rdx,%rdx,1),%rdi
+ movzbl %bh,%edx
xorq 6(%rbp,%rsi,8),%r15
xorq 5(%rbp,%rdi,8),%r8
- movb %bl,%cl
- movb %bh,%dl
+ shrl $16,%ebx
leaq (%rcx,%rcx,1),%rsi
+ movzbl %bl,%ecx
leaq (%rdx,%rdx,1),%rdi
- shrl $16,%ebx
+ movzbl %bh,%edx
xorq 4(%rbp,%rsi,8),%r9
xorq 3(%rbp,%rdi,8),%r10
- movb %bl,%cl
- movb %bh,%dl
movl 40+8+4(%rsp),%ebx
leaq (%rcx,%rcx,1),%rsi
+ movzbl %al,%ecx
leaq (%rdx,%rdx,1),%rdi
+ movzbl %ah,%edx
xorq 2(%rbp,%rsi,8),%r11
xorq 1(%rbp,%rdi,8),%r12
- movb %al,%cl
- movb %ah,%dl
+ shrl $16,%eax
leaq (%rcx,%rcx,1),%rsi
+ movzbl %al,%ecx
leaq (%rdx,%rdx,1),%rdi
- shrl $16,%eax
+ movzbl %ah,%edx
xorq 0(%rbp,%rsi,8),%r14
xorq 7(%rbp,%rdi,8),%r15
- movb %al,%cl
- movb %ah,%dl
movl 48+8(%rsp),%eax
leaq (%rcx,%rcx,1),%rsi
+ movzbl %bl,%ecx
leaq (%rdx,%rdx,1),%rdi
+ movzbl %bh,%edx
xorq 6(%rbp,%rsi,8),%r8
xorq 5(%rbp,%rdi,8),%r9
- movb %bl,%cl
- movb %bh,%dl
+ shrl $16,%ebx
leaq (%rcx,%rcx,1),%rsi
+ movzbl %bl,%ecx
leaq (%rdx,%rdx,1),%rdi
- shrl $16,%ebx
+ movzbl %bh,%edx
xorq 4(%rbp,%rsi,8),%r10
xorq 3(%rbp,%rdi,8),%r11
- movb %bl,%cl
- movb %bh,%dl
movl 48+8+4(%rsp),%ebx
leaq (%rcx,%rcx,1),%rsi
+ movzbl %al,%ecx
leaq (%rdx,%rdx,1),%rdi
+ movzbl %ah,%edx
xorq 2(%rbp,%rsi,8),%r12
xorq 1(%rbp,%rdi,8),%r13
- movb %al,%cl
- movb %ah,%dl
+ shrl $16,%eax
leaq (%rcx,%rcx,1),%rsi
+ movzbl %al,%ecx
leaq (%rdx,%rdx,1),%rdi
- shrl $16,%eax
+ movzbl %ah,%edx
xorq 0(%rbp,%rsi,8),%r15
xorq 7(%rbp,%rdi,8),%r8
- movb %al,%cl
- movb %ah,%dl
movl 56+8(%rsp),%eax
leaq (%rcx,%rcx,1),%rsi
+ movzbl %bl,%ecx
leaq (%rdx,%rdx,1),%rdi
+ movzbl %bh,%edx
xorq 6(%rbp,%rsi,8),%r9
xorq 5(%rbp,%rdi,8),%r10
- movb %bl,%cl
- movb %bh,%dl
+ shrl $16,%ebx
leaq (%rcx,%rcx,1),%rsi
+ movzbl %bl,%ecx
leaq (%rdx,%rdx,1),%rdi
- shrl $16,%ebx
+ movzbl %bh,%edx
xorq 4(%rbp,%rsi,8),%r11
xorq 3(%rbp,%rdi,8),%r12
- movb %bl,%cl
- movb %bh,%dl
movl 56+8+4(%rsp),%ebx
leaq (%rcx,%rcx,1),%rsi
+ movzbl %al,%ecx
leaq (%rdx,%rdx,1),%rdi
+ movzbl %ah,%edx
xorq 2(%rbp,%rsi,8),%r13
xorq 1(%rbp,%rdi,8),%r14
movq %r8,0(%rsp)
@@ -300,228 +303,228 @@ whirlpool_block:
movq %r13,40(%rsp)
movq %r14,48(%rsp)
movq %r15,56(%rsp)
- movb %al,%cl
- movb %ah,%dl
+ shrl $16,%eax
leaq (%rcx,%rcx,1),%rsi
+ movzbl %al,%ecx
leaq (%rdx,%rdx,1),%rdi
- shrl $16,%eax
+ movzbl %ah,%edx
xorq 0(%rbp,%rsi,8),%r8
xorq 7(%rbp,%rdi,8),%r9
- movb %al,%cl
- movb %ah,%dl
movl 64+0+8(%rsp),%eax
leaq (%rcx,%rcx,1),%rsi
+ movzbl %bl,%ecx
leaq (%rdx,%rdx,1),%rdi
+ movzbl %bh,%edx
xorq 6(%rbp,%rsi,8),%r10
xorq 5(%rbp,%rdi,8),%r11
- movb %bl,%cl
- movb %bh,%dl
+ shrl $16,%ebx
leaq (%rcx,%rcx,1),%rsi
+ movzbl %bl,%ecx
leaq (%rdx,%rdx,1),%rdi
- shrl $16,%ebx
+ movzbl %bh,%edx
xorq 4(%rbp,%rsi,8),%r12
xorq 3(%rbp,%rdi,8),%r13
- movb %bl,%cl
- movb %bh,%dl
movl 64+0+8+4(%rsp),%ebx
leaq (%rcx,%rcx,1),%rsi
+ movzbl %al,%ecx
leaq (%rdx,%rdx,1),%rdi
+ movzbl %ah,%edx
xorq 2(%rbp,%rsi,8),%r14
xorq 1(%rbp,%rdi,8),%r15
- movb %al,%cl
- movb %ah,%dl
+ shrl $16,%eax
leaq (%rcx,%rcx,1),%rsi
+ movzbl %al,%ecx
leaq (%rdx,%rdx,1),%rdi
- shrl $16,%eax
+ movzbl %ah,%edx
xorq 0(%rbp,%rsi,8),%r9
xorq 7(%rbp,%rdi,8),%r10
- movb %al,%cl
- movb %ah,%dl
movl 64+8+8(%rsp),%eax
leaq (%rcx,%rcx,1),%rsi
+ movzbl %bl,%ecx
leaq (%rdx,%rdx,1),%rdi
+ movzbl %bh,%edx
xorq 6(%rbp,%rsi,8),%r11
xorq 5(%rbp,%rdi,8),%r12
- movb %bl,%cl
- movb %bh,%dl
+ shrl $16,%ebx
leaq (%rcx,%rcx,1),%rsi
+ movzbl %bl,%ecx
leaq (%rdx,%rdx,1),%rdi
- shrl $16,%ebx
+ movzbl %bh,%edx
xorq 4(%rbp,%rsi,8),%r13
xorq 3(%rbp,%rdi,8),%r14
- movb %bl,%cl
- movb %bh,%dl
movl 64+8+8+4(%rsp),%ebx
leaq (%rcx,%rcx,1),%rsi
+ movzbl %al,%ecx
leaq (%rdx,%rdx,1),%rdi
+ movzbl %ah,%edx
xorq 2(%rbp,%rsi,8),%r15
xorq 1(%rbp,%rdi,8),%r8
- movb %al,%cl
- movb %ah,%dl
+ shrl $16,%eax
leaq (%rcx,%rcx,1),%rsi
+ movzbl %al,%ecx
leaq (%rdx,%rdx,1),%rdi
- shrl $16,%eax
+ movzbl %ah,%edx
xorq 0(%rbp,%rsi,8),%r10
xorq 7(%rbp,%rdi,8),%r11
- movb %al,%cl
- movb %ah,%dl
movl 64+16+8(%rsp),%eax
leaq (%rcx,%rcx,1),%rsi
+ movzbl %bl,%ecx
leaq (%rdx,%rdx,1),%rdi
+ movzbl %bh,%edx
xorq 6(%rbp,%rsi,8),%r12
xorq 5(%rbp,%rdi,8),%r13
- movb %bl,%cl
- movb %bh,%dl
+ shrl $16,%ebx
leaq (%rcx,%rcx,1),%rsi
+ movzbl %bl,%ecx
leaq (%rdx,%rdx,1),%rdi
- shrl $16,%ebx
+ movzbl %bh,%edx
xorq 4(%rbp,%rsi,8),%r14
xorq 3(%rbp,%rdi,8),%r15
- movb %bl,%cl
- movb %bh,%dl
movl 64+16+8+4(%rsp),%ebx
leaq (%rcx,%rcx,1),%rsi
+ movzbl %al,%ecx
leaq (%rdx,%rdx,1),%rdi
+ movzbl %ah,%edx
xorq 2(%rbp,%rsi,8),%r8
xorq 1(%rbp,%rdi,8),%r9
- movb %al,%cl
- movb %ah,%dl
+ shrl $16,%eax
leaq (%rcx,%rcx,1),%rsi
+ movzbl %al,%ecx
leaq (%rdx,%rdx,1),%rdi
- shrl $16,%eax
+ movzbl %ah,%edx
xorq 0(%rbp,%rsi,8),%r11
xorq 7(%rbp,%rdi,8),%r12
- movb %al,%cl
- movb %ah,%dl
movl 64+24+8(%rsp),%eax
leaq (%rcx,%rcx,1),%rsi
+ movzbl %bl,%ecx
leaq (%rdx,%rdx,1),%rdi
+ movzbl %bh,%edx
xorq 6(%rbp,%rsi,8),%r13
xorq 5(%rbp,%rdi,8),%r14
- movb %bl,%cl
- movb %bh,%dl
+ shrl $16,%ebx
leaq (%rcx,%rcx,1),%rsi
+ movzbl %bl,%ecx
leaq (%rdx,%rdx,1),%rdi
- shrl $16,%ebx
+ movzbl %bh,%edx
xorq 4(%rbp,%rsi,8),%r15
xorq 3(%rbp,%rdi,8),%r8
- movb %bl,%cl
- movb %bh,%dl
movl 64+24+8+4(%rsp),%ebx
leaq (%rcx,%rcx,1),%rsi
+ movzbl %al,%ecx
leaq (%rdx,%rdx,1),%rdi
+ movzbl %ah,%edx
xorq 2(%rbp,%rsi,8),%r9
xorq 1(%rbp,%rdi,8),%r10
- movb %al,%cl
- movb %ah,%dl
+ shrl $16,%eax
leaq (%rcx,%rcx,1),%rsi
+ movzbl %al,%ecx
leaq (%rdx,%rdx,1),%rdi
- shrl $16,%eax
+ movzbl %ah,%edx
xorq 0(%rbp,%rsi,8),%r12
xorq 7(%rbp,%rdi,8),%r13
- movb %al,%cl
- movb %ah,%dl
movl 64+32+8(%rsp),%eax
leaq (%rcx,%rcx,1),%rsi
+ movzbl %bl,%ecx
leaq (%rdx,%rdx,1),%rdi
+ movzbl %bh,%edx
xorq 6(%rbp,%rsi,8),%r14
xorq 5(%rbp,%rdi,8),%r15
- movb %bl,%cl
- movb %bh,%dl
+ shrl $16,%ebx
leaq (%rcx,%rcx,1),%rsi
+ movzbl %bl,%ecx
leaq (%rdx,%rdx,1),%rdi
- shrl $16,%ebx
+ movzbl %bh,%edx
xorq 4(%rbp,%rsi,8),%r8
xorq 3(%rbp,%rdi,8),%r9
- movb %bl,%cl
- movb %bh,%dl
movl 64+32+8+4(%rsp),%ebx
leaq (%rcx,%rcx,1),%rsi
+ movzbl %al,%ecx
leaq (%rdx,%rdx,1),%rdi
+ movzbl %ah,%edx
xorq 2(%rbp,%rsi,8),%r10
xorq 1(%rbp,%rdi,8),%r11
- movb %al,%cl
- movb %ah,%dl
+ shrl $16,%eax
leaq (%rcx,%rcx,1),%rsi
+ movzbl %al,%ecx
leaq (%rdx,%rdx,1),%rdi
- shrl $16,%eax
+ movzbl %ah,%edx
xorq 0(%rbp,%rsi,8),%r13
xorq 7(%rbp,%rdi,8),%r14
- movb %al,%cl
- movb %ah,%dl
movl 64+40+8(%rsp),%eax
leaq (%rcx,%rcx,1),%rsi
+ movzbl %bl,%ecx
leaq (%rdx,%rdx,1),%rdi
+ movzbl %bh,%edx
xorq 6(%rbp,%rsi,8),%r15
xorq 5(%rbp,%rdi,8),%r8
- movb %bl,%cl
- movb %bh,%dl
+ shrl $16,%ebx
leaq (%rcx,%rcx,1),%rsi
+ movzbl %bl,%ecx
leaq (%rdx,%rdx,1),%rdi
- shrl $16,%ebx
+ movzbl %bh,%edx
xorq 4(%rbp,%rsi,8),%r9
xorq 3(%rbp,%rdi,8),%r10
- movb %bl,%cl
- movb %bh,%dl
movl 64+40+8+4(%rsp),%ebx
leaq (%rcx,%rcx,1),%rsi
+ movzbl %al,%ecx
leaq (%rdx,%rdx,1),%rdi
+ movzbl %ah,%edx
xorq 2(%rbp,%rsi,8),%r11
xorq 1(%rbp,%rdi,8),%r12
- movb %al,%cl
- movb %ah,%dl
+ shrl $16,%eax
leaq (%rcx,%rcx,1),%rsi
+ movzbl %al,%ecx
leaq (%rdx,%rdx,1),%rdi
- shrl $16,%eax
+ movzbl %ah,%edx
xorq 0(%rbp,%rsi,8),%r14
xorq 7(%rbp,%rdi,8),%r15
- movb %al,%cl
- movb %ah,%dl
movl 64+48+8(%rsp),%eax
leaq (%rcx,%rcx,1),%rsi
+ movzbl %bl,%ecx
leaq (%rdx,%rdx,1),%rdi
+ movzbl %bh,%edx
xorq 6(%rbp,%rsi,8),%r8
xorq 5(%rbp,%rdi,8),%r9
- movb %bl,%cl
- movb %bh,%dl
+ shrl $16,%ebx
leaq (%rcx,%rcx,1),%rsi
+ movzbl %bl,%ecx
leaq (%rdx,%rdx,1),%rdi
- shrl $16,%ebx
+ movzbl %bh,%edx
xorq 4(%rbp,%rsi,8),%r10
xorq 3(%rbp,%rdi,8),%r11
- movb %bl,%cl
- movb %bh,%dl
movl 64+48+8+4(%rsp),%ebx
leaq (%rcx,%rcx,1),%rsi
+ movzbl %al,%ecx
leaq (%rdx,%rdx,1),%rdi
+ movzbl %ah,%edx
xorq 2(%rbp,%rsi,8),%r12
xorq 1(%rbp,%rdi,8),%r13
- movb %al,%cl
- movb %ah,%dl
+ shrl $16,%eax
leaq (%rcx,%rcx,1),%rsi
+ movzbl %al,%ecx
leaq (%rdx,%rdx,1),%rdi
- shrl $16,%eax
+ movzbl %ah,%edx
xorq 0(%rbp,%rsi,8),%r15
xorq 7(%rbp,%rdi,8),%r8
- movb %al,%cl
- movb %ah,%dl
leaq (%rcx,%rcx,1),%rsi
+ movzbl %bl,%ecx
leaq (%rdx,%rdx,1),%rdi
+ movzbl %bh,%edx
xorq 6(%rbp,%rsi,8),%r9
xorq 5(%rbp,%rdi,8),%r10
- movb %bl,%cl
- movb %bh,%dl
+ shrl $16,%ebx
leaq (%rcx,%rcx,1),%rsi
+ movzbl %bl,%ecx
leaq (%rdx,%rdx,1),%rdi
- shrl $16,%ebx
+ movzbl %bh,%edx
xorq 4(%rbp,%rsi,8),%r11
xorq 3(%rbp,%rdi,8),%r12
- movb %bl,%cl
- movb %bh,%dl
leaq (%rcx,%rcx,1),%rsi
+ movzbl %al,%ecx
leaq (%rdx,%rdx,1),%rdi
+ movzbl %ah,%edx
xorq 2(%rbp,%rsi,8),%r13
xorq 1(%rbp,%rdi,8),%r14
leaq 128(%rsp),%rbx
diff --git a/secure/lib/libcrypto/amd64/x86_64-gf2m.S b/secure/lib/libcrypto/amd64/x86_64-gf2m.S
index 7279c75..f86c253 100644
--- a/secure/lib/libcrypto/amd64/x86_64-gf2m.S
+++ b/secure/lib/libcrypto/amd64/x86_64-gf2m.S
@@ -246,13 +246,13 @@ bn_GF2m_mul_2x2:
movq $15,%r8
movq %rsi,%rax
movq %rcx,%rbp
- call _mul_1x1
+ call _mul_1x1
movq %rax,16(%rsp)
movq %rdx,24(%rsp)
movq 48(%rsp),%rax
movq 64(%rsp),%rbp
- call _mul_1x1
+ call _mul_1x1
movq %rax,0(%rsp)
movq %rdx,8(%rsp)
@@ -260,7 +260,7 @@ bn_GF2m_mul_2x2:
movq 56(%rsp),%rbp
xorq 48(%rsp),%rax
xorq 64(%rsp),%rbp
- call _mul_1x1
+ call _mul_1x1
movq 0(%rsp),%rbx
movq 8(%rsp),%rcx
movq 16(%rsp),%rdi
diff --git a/secure/lib/libcrypto/amd64/x86_64-mont.S b/secure/lib/libcrypto/amd64/x86_64-mont.S
index 5997f3c..bff0fb9 100644
--- a/secure/lib/libcrypto/amd64/x86_64-mont.S
+++ b/secure/lib/libcrypto/amd64/x86_64-mont.S
@@ -1,6 +1,8 @@
# $FreeBSD$
.text
+
+
.globl bn_mul_mont
.type bn_mul_mont,@function
.align 16
@@ -11,7 +13,9 @@ bn_mul_mont:
jb .Lmul_enter
cmpq %rsi,%rdx
jne .Lmul4x_enter
- jmp .Lsqr4x_enter
+ testl $7,%r9d
+ jz .Lsqr8x_enter
+ jmp .Lmul4x_enter
.align 16
.Lmul_enter:
@@ -164,7 +168,7 @@ bn_mul_mont:
leaq 1(%r14),%r14
cmpq %r9,%r14
- jl .Louter
+ jb .Louter
xorq %r14,%r14
movq (%rsp),%rax
@@ -330,7 +334,7 @@ bn_mul4x_mont:
movq %rdi,-32(%rsp,%r15,8)
movq %rdx,%r13
cmpq %r9,%r15
- jl .L1st4x
+ jb .L1st4x
mulq %rbx
addq %rax,%r10
@@ -478,7 +482,7 @@ bn_mul4x_mont:
movq %rdi,-32(%rsp,%r15,8)
movq %rdx,%r13
cmpq %r9,%r15
- jl .Linner4x
+ jb .Linner4x
mulq %rbx
addq %rax,%r10
@@ -524,7 +528,7 @@ bn_mul4x_mont:
movq %rdi,(%rsp,%r15,8)
cmpq %r9,%r14
- jl .Louter4x
+ jb .Louter4x
movq 16(%rsp,%r9,8),%rdi
movq 0(%rsp),%rax
pxor %xmm0,%xmm0
@@ -606,10 +610,13 @@ bn_mul4x_mont:
.Lmul4x_epilogue:
.byte 0xf3,0xc3
.size bn_mul4x_mont,.-bn_mul4x_mont
-.type bn_sqr4x_mont,@function
-.align 16
-bn_sqr4x_mont:
-.Lsqr4x_enter:
+
+
+.type bn_sqr8x_mont,@function
+.align 32
+bn_sqr8x_mont:
+.Lsqr8x_enter:
+ movq %rsp,%rax
pushq %rbx
pushq %rbp
pushq %r12
@@ -617,759 +624,102 @@ bn_sqr4x_mont:
pushq %r14
pushq %r15
+ movl %r9d,%r10d
shll $3,%r9d
- xorq %r10,%r10
- movq %rsp,%r11
- subq %r9,%r10
- movq (%r8),%r8
- leaq -72(%rsp,%r10,2),%rsp
- andq $-1024,%rsp
-
-
-
-
-
-
-
-
-
-
-
- movq %rdi,32(%rsp)
- movq %rcx,40(%rsp)
- movq %r8,48(%rsp)
- movq %r11,56(%rsp)
-.Lsqr4x_body:
-
-
-
-
-
-
-
- leaq 32(%r10),%rbp
- leaq (%rsi,%r9,1),%rsi
-
- movq %r9,%rcx
-
-
- movq -32(%rsi,%rbp,1),%r14
- leaq 64(%rsp,%r9,2),%rdi
- movq -24(%rsi,%rbp,1),%rax
- leaq -32(%rdi,%rbp,1),%rdi
- movq -16(%rsi,%rbp,1),%rbx
- movq %rax,%r15
-
- mulq %r14
- movq %rax,%r10
- movq %rbx,%rax
- movq %rdx,%r11
- movq %r10,-24(%rdi,%rbp,1)
-
- xorq %r10,%r10
- mulq %r14
- addq %rax,%r11
- movq %rbx,%rax
- adcq %rdx,%r10
- movq %r11,-16(%rdi,%rbp,1)
-
- leaq -16(%rbp),%rcx
-
-
- movq 8(%rsi,%rcx,1),%rbx
- mulq %r15
- movq %rax,%r12
- movq %rbx,%rax
- movq %rdx,%r13
-
- xorq %r11,%r11
- addq %r12,%r10
- leaq 16(%rcx),%rcx
- adcq $0,%r11
- mulq %r14
- addq %rax,%r10
- movq %rbx,%rax
- adcq %rdx,%r11
- movq %r10,-8(%rdi,%rcx,1)
- jmp .Lsqr4x_1st
-
-.align 16
-.Lsqr4x_1st:
- movq (%rsi,%rcx,1),%rbx
- xorq %r12,%r12
- mulq %r15
- addq %rax,%r13
- movq %rbx,%rax
- adcq %rdx,%r12
-
- xorq %r10,%r10
- addq %r13,%r11
- adcq $0,%r10
- mulq %r14
- addq %rax,%r11
- movq %rbx,%rax
- adcq %rdx,%r10
- movq %r11,(%rdi,%rcx,1)
-
-
- movq 8(%rsi,%rcx,1),%rbx
- xorq %r13,%r13
- mulq %r15
- addq %rax,%r12
- movq %rbx,%rax
- adcq %rdx,%r13
-
- xorq %r11,%r11
- addq %r12,%r10
- adcq $0,%r11
- mulq %r14
- addq %rax,%r10
- movq %rbx,%rax
- adcq %rdx,%r11
- movq %r10,8(%rdi,%rcx,1)
-
- movq 16(%rsi,%rcx,1),%rbx
- xorq %r12,%r12
- mulq %r15
- addq %rax,%r13
- movq %rbx,%rax
- adcq %rdx,%r12
-
- xorq %r10,%r10
- addq %r13,%r11
- adcq $0,%r10
- mulq %r14
- addq %rax,%r11
- movq %rbx,%rax
- adcq %rdx,%r10
- movq %r11,16(%rdi,%rcx,1)
-
-
- movq 24(%rsi,%rcx,1),%rbx
- xorq %r13,%r13
- mulq %r15
- addq %rax,%r12
- movq %rbx,%rax
- adcq %rdx,%r13
-
- xorq %r11,%r11
- addq %r12,%r10
- leaq 32(%rcx),%rcx
- adcq $0,%r11
- mulq %r14
- addq %rax,%r10
- movq %rbx,%rax
- adcq %rdx,%r11
- movq %r10,-8(%rdi,%rcx,1)
-
- cmpq $0,%rcx
- jne .Lsqr4x_1st
-
- xorq %r12,%r12
- addq %r11,%r13
- adcq $0,%r12
- mulq %r15
- addq %rax,%r13
- adcq %rdx,%r12
-
- movq %r13,(%rdi)
- leaq 16(%rbp),%rbp
- movq %r12,8(%rdi)
- jmp .Lsqr4x_outer
-
-.align 16
-.Lsqr4x_outer:
- movq -32(%rsi,%rbp,1),%r14
- leaq 64(%rsp,%r9,2),%rdi
- movq -24(%rsi,%rbp,1),%rax
- leaq -32(%rdi,%rbp,1),%rdi
- movq -16(%rsi,%rbp,1),%rbx
- movq %rax,%r15
-
- movq -24(%rdi,%rbp,1),%r10
- xorq %r11,%r11
- mulq %r14
- addq %rax,%r10
- movq %rbx,%rax
- adcq %rdx,%r11
- movq %r10,-24(%rdi,%rbp,1)
-
- xorq %r10,%r10
- addq -16(%rdi,%rbp,1),%r11
- adcq $0,%r10
- mulq %r14
- addq %rax,%r11
- movq %rbx,%rax
- adcq %rdx,%r10
- movq %r11,-16(%rdi,%rbp,1)
-
- leaq -16(%rbp),%rcx
- xorq %r12,%r12
-
-
- movq 8(%rsi,%rcx,1),%rbx
- xorq %r13,%r13
- addq 8(%rdi,%rcx,1),%r12
- adcq $0,%r13
- mulq %r15
- addq %rax,%r12
- movq %rbx,%rax
- adcq %rdx,%r13
-
- xorq %r11,%r11
- addq %r12,%r10
- adcq $0,%r11
- mulq %r14
- addq %rax,%r10
- movq %rbx,%rax
- adcq %rdx,%r11
- movq %r10,8(%rdi,%rcx,1)
-
- leaq 16(%rcx),%rcx
- jmp .Lsqr4x_inner
-
-.align 16
-.Lsqr4x_inner:
- movq (%rsi,%rcx,1),%rbx
- xorq %r12,%r12
- addq (%rdi,%rcx,1),%r13
- adcq $0,%r12
- mulq %r15
- addq %rax,%r13
- movq %rbx,%rax
- adcq %rdx,%r12
-
- xorq %r10,%r10
- addq %r13,%r11
- adcq $0,%r10
- mulq %r14
- addq %rax,%r11
- movq %rbx,%rax
- adcq %rdx,%r10
- movq %r11,(%rdi,%rcx,1)
-
- movq 8(%rsi,%rcx,1),%rbx
- xorq %r13,%r13
- addq 8(%rdi,%rcx,1),%r12
- adcq $0,%r13
- mulq %r15
- addq %rax,%r12
- movq %rbx,%rax
- adcq %rdx,%r13
-
- xorq %r11,%r11
- addq %r12,%r10
- leaq 16(%rcx),%rcx
- adcq $0,%r11
- mulq %r14
- addq %rax,%r10
- movq %rbx,%rax
- adcq %rdx,%r11
- movq %r10,-8(%rdi,%rcx,1)
-
- cmpq $0,%rcx
- jne .Lsqr4x_inner
-
- xorq %r12,%r12
- addq %r11,%r13
- adcq $0,%r12
- mulq %r15
- addq %rax,%r13
- adcq %rdx,%r12
+ shlq $3+2,%r10
+ negq %r9
- movq %r13,(%rdi)
- movq %r12,8(%rdi)
- addq $16,%rbp
- jnz .Lsqr4x_outer
- movq -32(%rsi),%r14
- leaq 64(%rsp,%r9,2),%rdi
- movq -24(%rsi),%rax
- leaq -32(%rdi,%rbp,1),%rdi
- movq -16(%rsi),%rbx
- movq %rax,%r15
-
- xorq %r11,%r11
- mulq %r14
- addq %rax,%r10
- movq %rbx,%rax
- adcq %rdx,%r11
- movq %r10,-24(%rdi)
-
- xorq %r10,%r10
- addq %r13,%r11
- adcq $0,%r10
- mulq %r14
- addq %rax,%r11
- movq %rbx,%rax
- adcq %rdx,%r10
- movq %r11,-16(%rdi)
-
- movq -8(%rsi),%rbx
- mulq %r15
- addq %rax,%r12
- movq %rbx,%rax
- adcq $0,%rdx
-
- xorq %r11,%r11
- addq %r12,%r10
- movq %rdx,%r13
- adcq $0,%r11
- mulq %r14
- addq %rax,%r10
- movq %rbx,%rax
- adcq %rdx,%r11
- movq %r10,-8(%rdi)
- xorq %r12,%r12
- addq %r11,%r13
- adcq $0,%r12
- mulq %r15
- addq %rax,%r13
- movq -16(%rsi),%rax
- adcq %rdx,%r12
-
- movq %r13,(%rdi)
- movq %r12,8(%rdi)
-
- mulq %rbx
- addq $16,%rbp
- xorq %r14,%r14
- subq %r9,%rbp
- xorq %r15,%r15
-
- addq %r12,%rax
- adcq $0,%rdx
- movq %rax,8(%rdi)
- movq %rdx,16(%rdi)
- movq %r15,24(%rdi)
-
- movq -16(%rsi,%rbp,1),%rax
- leaq 64(%rsp,%r9,2),%rdi
- xorq %r10,%r10
- movq -24(%rdi,%rbp,2),%r11
-
- leaq (%r14,%r10,2),%r12
- shrq $63,%r10
- leaq (%rcx,%r11,2),%r13
- shrq $63,%r11
- orq %r10,%r13
- movq -16(%rdi,%rbp,2),%r10
- movq %r11,%r14
- mulq %rax
- negq %r15
- movq -8(%rdi,%rbp,2),%r11
- adcq %rax,%r12
- movq -8(%rsi,%rbp,1),%rax
- movq %r12,-32(%rdi,%rbp,2)
- adcq %rdx,%r13
-
- leaq (%r14,%r10,2),%rbx
- movq %r13,-24(%rdi,%rbp,2)
- sbbq %r15,%r15
- shrq $63,%r10
- leaq (%rcx,%r11,2),%r8
- shrq $63,%r11
- orq %r10,%r8
- movq 0(%rdi,%rbp,2),%r10
- movq %r11,%r14
- mulq %rax
- negq %r15
- movq 8(%rdi,%rbp,2),%r11
- adcq %rax,%rbx
- movq 0(%rsi,%rbp,1),%rax
- movq %rbx,-16(%rdi,%rbp,2)
- adcq %rdx,%r8
- leaq 16(%rbp),%rbp
- movq %r8,-40(%rdi,%rbp,2)
- sbbq %r15,%r15
- jmp .Lsqr4x_shift_n_add
-
-.align 16
-.Lsqr4x_shift_n_add:
- leaq (%r14,%r10,2),%r12
- shrq $63,%r10
- leaq (%rcx,%r11,2),%r13
- shrq $63,%r11
- orq %r10,%r13
- movq -16(%rdi,%rbp,2),%r10
- movq %r11,%r14
- mulq %rax
- negq %r15
- movq -8(%rdi,%rbp,2),%r11
- adcq %rax,%r12
- movq -8(%rsi,%rbp,1),%rax
- movq %r12,-32(%rdi,%rbp,2)
- adcq %rdx,%r13
-
- leaq (%r14,%r10,2),%rbx
- movq %r13,-24(%rdi,%rbp,2)
- sbbq %r15,%r15
- shrq $63,%r10
- leaq (%rcx,%r11,2),%r8
- shrq $63,%r11
- orq %r10,%r8
- movq 0(%rdi,%rbp,2),%r10
- movq %r11,%r14
- mulq %rax
- negq %r15
- movq 8(%rdi,%rbp,2),%r11
- adcq %rax,%rbx
- movq 0(%rsi,%rbp,1),%rax
- movq %rbx,-16(%rdi,%rbp,2)
- adcq %rdx,%r8
-
- leaq (%r14,%r10,2),%r12
- movq %r8,-8(%rdi,%rbp,2)
- sbbq %r15,%r15
- shrq $63,%r10
- leaq (%rcx,%r11,2),%r13
- shrq $63,%r11
- orq %r10,%r13
- movq 16(%rdi,%rbp,2),%r10
- movq %r11,%r14
- mulq %rax
- negq %r15
- movq 24(%rdi,%rbp,2),%r11
- adcq %rax,%r12
- movq 8(%rsi,%rbp,1),%rax
- movq %r12,0(%rdi,%rbp,2)
- adcq %rdx,%r13
-
- leaq (%r14,%r10,2),%rbx
- movq %r13,8(%rdi,%rbp,2)
- sbbq %r15,%r15
- shrq $63,%r10
- leaq (%rcx,%r11,2),%r8
- shrq $63,%r11
- orq %r10,%r8
- movq 32(%rdi,%rbp,2),%r10
- movq %r11,%r14
- mulq %rax
- negq %r15
- movq 40(%rdi,%rbp,2),%r11
- adcq %rax,%rbx
- movq 16(%rsi,%rbp,1),%rax
- movq %rbx,16(%rdi,%rbp,2)
- adcq %rdx,%r8
- movq %r8,24(%rdi,%rbp,2)
- sbbq %r15,%r15
- addq $32,%rbp
- jnz .Lsqr4x_shift_n_add
-
- leaq (%r14,%r10,2),%r12
- shrq $63,%r10
- leaq (%rcx,%r11,2),%r13
- shrq $63,%r11
- orq %r10,%r13
- movq -16(%rdi),%r10
- movq %r11,%r14
- mulq %rax
- negq %r15
- movq -8(%rdi),%r11
- adcq %rax,%r12
- movq -8(%rsi),%rax
- movq %r12,-32(%rdi)
- adcq %rdx,%r13
-
- leaq (%r14,%r10,2),%rbx
- movq %r13,-24(%rdi)
- sbbq %r15,%r15
- shrq $63,%r10
- leaq (%rcx,%r11,2),%r8
- shrq $63,%r11
- orq %r10,%r8
- mulq %rax
- negq %r15
- adcq %rax,%rbx
- adcq %rdx,%r8
- movq %rbx,-16(%rdi)
- movq %r8,-8(%rdi)
- movq 40(%rsp),%rsi
- movq 48(%rsp),%r8
- xorq %rcx,%rcx
- movq %r9,0(%rsp)
- subq %r9,%rcx
- movq 64(%rsp),%r10
- movq %r8,%r14
- leaq 64(%rsp,%r9,2),%rax
- leaq 64(%rsp,%r9,1),%rdi
- movq %rax,8(%rsp)
- leaq (%rsi,%r9,1),%rsi
- xorq %rbp,%rbp
-
- movq 0(%rsi,%rcx,1),%rax
- movq 8(%rsi,%rcx,1),%r9
- imulq %r10,%r14
- movq %rax,%rbx
- jmp .Lsqr4x_mont_outer
-
-.align 16
-.Lsqr4x_mont_outer:
- xorq %r11,%r11
- mulq %r14
- addq %rax,%r10
- movq %r9,%rax
- adcq %rdx,%r11
- movq %r8,%r15
-
- xorq %r10,%r10
- addq 8(%rdi,%rcx,1),%r11
- adcq $0,%r10
- mulq %r14
- addq %rax,%r11
- movq %rbx,%rax
- adcq %rdx,%r10
-
- imulq %r11,%r15
-
- movq 16(%rsi,%rcx,1),%rbx
- xorq %r13,%r13
- addq %r11,%r12
- adcq $0,%r13
- mulq %r15
- addq %rax,%r12
- movq %rbx,%rax
- adcq %rdx,%r13
- movq %r12,8(%rdi,%rcx,1)
-
- xorq %r11,%r11
- addq 16(%rdi,%rcx,1),%r10
- adcq $0,%r11
- mulq %r14
- addq %rax,%r10
- movq %r9,%rax
- adcq %rdx,%r11
-
- movq 24(%rsi,%rcx,1),%r9
- xorq %r12,%r12
- addq %r10,%r13
- adcq $0,%r12
- mulq %r15
- addq %rax,%r13
- movq %r9,%rax
- adcq %rdx,%r12
- movq %r13,16(%rdi,%rcx,1)
- xorq %r10,%r10
- addq 24(%rdi,%rcx,1),%r11
+ leaq -64(%rsp,%r9,4),%r11
+ movq (%r8),%r8
+ subq %rsi,%r11
+ andq $4095,%r11
+ cmpq %r11,%r10
+ jb .Lsqr8x_sp_alt
+ subq %r11,%rsp
+ leaq -64(%rsp,%r9,4),%rsp
+ jmp .Lsqr8x_sp_done
+
+.align 32
+.Lsqr8x_sp_alt:
+ leaq 4096-64(,%r9,4),%r10
+ leaq -64(%rsp,%r9,4),%rsp
+ subq %r10,%r11
+ movq $0,%r10
+ cmovcq %r10,%r11
+ subq %r11,%rsp
+.Lsqr8x_sp_done:
+ andq $-64,%rsp
+ movq %r9,%r10
+ negq %r9
+
+ leaq 64(%rsp,%r9,2),%r11
+ movq %r8,32(%rsp)
+ movq %rax,40(%rsp)
+.Lsqr8x_body:
+
+ movq %r9,%rbp
+.byte 102,73,15,110,211
+ shrq $3+2,%rbp
+ movl OPENSSL_ia32cap_P+8(%rip),%eax
+ jmp .Lsqr8x_copy_n
+
+.align 32
+.Lsqr8x_copy_n:
+ movq 0(%rcx),%xmm0
+ movq 8(%rcx),%xmm1
+ movq 16(%rcx),%xmm3
+ movq 24(%rcx),%xmm4
leaq 32(%rcx),%rcx
- adcq $0,%r10
- mulq %r14
- addq %rax,%r11
- movq %rbx,%rax
- adcq %rdx,%r10
- jmp .Lsqr4x_mont_inner
-
-.align 16
-.Lsqr4x_mont_inner:
- movq (%rsi,%rcx,1),%rbx
- xorq %r13,%r13
- addq %r11,%r12
- adcq $0,%r13
- mulq %r15
- addq %rax,%r12
- movq %rbx,%rax
- adcq %rdx,%r13
- movq %r12,-8(%rdi,%rcx,1)
-
- xorq %r11,%r11
- addq (%rdi,%rcx,1),%r10
- adcq $0,%r11
- mulq %r14
- addq %rax,%r10
- movq %r9,%rax
- adcq %rdx,%r11
-
- movq 8(%rsi,%rcx,1),%r9
- xorq %r12,%r12
- addq %r10,%r13
- adcq $0,%r12
- mulq %r15
- addq %rax,%r13
- movq %r9,%rax
- adcq %rdx,%r12
- movq %r13,(%rdi,%rcx,1)
-
- xorq %r10,%r10
- addq 8(%rdi,%rcx,1),%r11
- adcq $0,%r10
- mulq %r14
- addq %rax,%r11
- movq %rbx,%rax
- adcq %rdx,%r10
-
-
- movq 16(%rsi,%rcx,1),%rbx
- xorq %r13,%r13
- addq %r11,%r12
- adcq $0,%r13
- mulq %r15
- addq %rax,%r12
- movq %rbx,%rax
- adcq %rdx,%r13
- movq %r12,8(%rdi,%rcx,1)
-
- xorq %r11,%r11
- addq 16(%rdi,%rcx,1),%r10
- adcq $0,%r11
- mulq %r14
- addq %rax,%r10
- movq %r9,%rax
- adcq %rdx,%r11
-
- movq 24(%rsi,%rcx,1),%r9
- xorq %r12,%r12
- addq %r10,%r13
- adcq $0,%r12
- mulq %r15
- addq %rax,%r13
- movq %r9,%rax
- adcq %rdx,%r12
- movq %r13,16(%rdi,%rcx,1)
+ movdqa %xmm0,0(%r11)
+ movdqa %xmm1,16(%r11)
+ movdqa %xmm3,32(%r11)
+ movdqa %xmm4,48(%r11)
+ leaq 64(%r11),%r11
+ decq %rbp
+ jnz .Lsqr8x_copy_n
- xorq %r10,%r10
- addq 24(%rdi,%rcx,1),%r11
- leaq 32(%rcx),%rcx
- adcq $0,%r10
- mulq %r14
- addq %rax,%r11
- movq %rbx,%rax
- adcq %rdx,%r10
- cmpq $0,%rcx
- jne .Lsqr4x_mont_inner
-
- subq 0(%rsp),%rcx
- movq %r8,%r14
-
- xorq %r13,%r13
- addq %r11,%r12
- adcq $0,%r13
- mulq %r15
- addq %rax,%r12
- movq %r9,%rax
- adcq %rdx,%r13
- movq %r12,-8(%rdi)
-
- xorq %r11,%r11
- addq (%rdi),%r10
- adcq $0,%r11
- movq 0(%rsi,%rcx,1),%rbx
- addq %rbp,%r10
- adcq $0,%r11
+ pxor %xmm0,%xmm0
+.byte 102,72,15,110,207
+.byte 102,73,15,110,218
+ call bn_sqr8x_internal
- imulq 16(%rdi,%rcx,1),%r14
- xorq %r12,%r12
- movq 8(%rsi,%rcx,1),%r9
- addq %r10,%r13
- movq 16(%rdi,%rcx,1),%r10
- adcq $0,%r12
- mulq %r15
- addq %rax,%r13
- movq %rbx,%rax
- adcq %rdx,%r12
- movq %r13,(%rdi)
-
- xorq %rbp,%rbp
- addq 8(%rdi),%r12
- adcq %rbp,%rbp
- addq %r11,%r12
- leaq 16(%rdi),%rdi
- adcq $0,%rbp
- movq %r12,-8(%rdi)
- cmpq 8(%rsp),%rdi
- jb .Lsqr4x_mont_outer
-
- movq 0(%rsp),%r9
- movq %rbp,(%rdi)
- movq 64(%rsp,%r9,1),%rax
- leaq 64(%rsp,%r9,1),%rbx
+ pxor %xmm0,%xmm0
+ leaq 48(%rsp),%rax
+ leaq 64(%rsp,%r9,2),%rdx
+ shrq $3+2,%r9
movq 40(%rsp),%rsi
- shrq $5,%r9
- movq 8(%rbx),%rdx
- xorq %rbp,%rbp
-
- movq 32(%rsp),%rdi
- subq 0(%rsi),%rax
- movq 16(%rbx),%r10
- movq 24(%rbx),%r11
- sbbq 8(%rsi),%rdx
- leaq -1(%r9),%rcx
- jmp .Lsqr4x_sub
-.align 16
-.Lsqr4x_sub:
- movq %rax,0(%rdi,%rbp,8)
- movq %rdx,8(%rdi,%rbp,8)
- sbbq 16(%rsi,%rbp,8),%r10
- movq 32(%rbx,%rbp,8),%rax
- movq 40(%rbx,%rbp,8),%rdx
- sbbq 24(%rsi,%rbp,8),%r11
- movq %r10,16(%rdi,%rbp,8)
- movq %r11,24(%rdi,%rbp,8)
- sbbq 32(%rsi,%rbp,8),%rax
- movq 48(%rbx,%rbp,8),%r10
- movq 56(%rbx,%rbp,8),%r11
- sbbq 40(%rsi,%rbp,8),%rdx
- leaq 4(%rbp),%rbp
- decq %rcx
- jnz .Lsqr4x_sub
-
- movq %rax,0(%rdi,%rbp,8)
- movq 32(%rbx,%rbp,8),%rax
- sbbq 16(%rsi,%rbp,8),%r10
- movq %rdx,8(%rdi,%rbp,8)
- sbbq 24(%rsi,%rbp,8),%r11
- movq %r10,16(%rdi,%rbp,8)
+ jmp .Lsqr8x_zero
+
+.align 32
+.Lsqr8x_zero:
+ movdqa %xmm0,0(%rax)
+ movdqa %xmm0,16(%rax)
+ movdqa %xmm0,32(%rax)
+ movdqa %xmm0,48(%rax)
+ leaq 64(%rax),%rax
+ movdqa %xmm0,0(%rdx)
+ movdqa %xmm0,16(%rdx)
+ movdqa %xmm0,32(%rdx)
+ movdqa %xmm0,48(%rdx)
+ leaq 64(%rdx),%rdx
+ decq %r9
+ jnz .Lsqr8x_zero
- sbbq $0,%rax
- movq %r11,24(%rdi,%rbp,8)
- xorq %rbp,%rbp
- andq %rax,%rbx
- notq %rax
- movq %rdi,%rsi
- andq %rax,%rsi
- leaq -1(%r9),%rcx
- orq %rsi,%rbx
-
- pxor %xmm0,%xmm0
- leaq 64(%rsp,%r9,8),%rsi
- movdqu (%rbx),%xmm1
- leaq (%rsi,%r9,8),%rsi
- movdqa %xmm0,64(%rsp)
- movdqa %xmm0,(%rsi)
- movdqu %xmm1,(%rdi)
- jmp .Lsqr4x_copy
-.align 16
-.Lsqr4x_copy:
- movdqu 16(%rbx,%rbp,1),%xmm2
- movdqu 32(%rbx,%rbp,1),%xmm1
- movdqa %xmm0,80(%rsp,%rbp,1)
- movdqa %xmm0,96(%rsp,%rbp,1)
- movdqa %xmm0,16(%rsi,%rbp,1)
- movdqa %xmm0,32(%rsi,%rbp,1)
- movdqu %xmm2,16(%rdi,%rbp,1)
- movdqu %xmm1,32(%rdi,%rbp,1)
- leaq 32(%rbp),%rbp
- decq %rcx
- jnz .Lsqr4x_copy
-
- movdqu 16(%rbx,%rbp,1),%xmm2
- movdqa %xmm0,80(%rsp,%rbp,1)
- movdqa %xmm0,16(%rsi,%rbp,1)
- movdqu %xmm2,16(%rdi,%rbp,1)
- movq 56(%rsp),%rsi
movq $1,%rax
- movq 0(%rsi),%r15
- movq 8(%rsi),%r14
- movq 16(%rsi),%r13
- movq 24(%rsi),%r12
- movq 32(%rsi),%rbp
- movq 40(%rsi),%rbx
- leaq 48(%rsi),%rsp
-.Lsqr4x_epilogue:
+ movq -48(%rsi),%r15
+ movq -40(%rsi),%r14
+ movq -32(%rsi),%r13
+ movq -24(%rsi),%r12
+ movq -16(%rsi),%rbp
+ movq -8(%rsi),%rbx
+ leaq (%rsi),%rsp
+.Lsqr8x_epilogue:
.byte 0xf3,0xc3
-.size bn_sqr4x_mont,.-bn_sqr4x_mont
+.size bn_sqr8x_mont,.-bn_sqr8x_mont
.byte 77,111,110,116,103,111,109,101,114,121,32,77,117,108,116,105,112,108,105,99,97,116,105,111,110,32,102,111,114,32,120,56,54,95,54,52,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0
.align 16
diff --git a/secure/lib/libcrypto/amd64/x86_64-mont5.S b/secure/lib/libcrypto/amd64/x86_64-mont5.S
index b0b3442..6ab0922 100644
--- a/secure/lib/libcrypto/amd64/x86_64-mont5.S
+++ b/secure/lib/libcrypto/amd64/x86_64-mont5.S
@@ -1,19 +1,20 @@
# $FreeBSD$
.text
+
+
.globl bn_mul_mont_gather5
.type bn_mul_mont_gather5,@function
.align 64
bn_mul_mont_gather5:
- testl $3,%r9d
+ testl $7,%r9d
jnz .Lmul_enter
- cmpl $8,%r9d
- jb .Lmul_enter
jmp .Lmul4x_enter
.align 16
.Lmul_enter:
movl %r9d,%r9d
+ movq %rsp,%rax
movl 8(%rsp),%r10d
pushq %rbx
pushq %rbp
@@ -21,7 +22,6 @@ bn_mul_mont_gather5:
pushq %r13
pushq %r14
pushq %r15
- movq %rsp,%rax
leaq 2(%r9),%r11
negq %r11
leaq (%rsp,%r11,8),%rsp
@@ -222,7 +222,7 @@ bn_mul_mont_gather5:
leaq 1(%r14),%r14
cmpq %r9,%r14
- jl .Louter
+ jb .Louter
xorq %r14,%r14
movq (%rsp),%rax
@@ -256,477 +256,1526 @@ bn_mul_mont_gather5:
movq 8(%rsp,%r9,8),%rsi
movq $1,%rax
- movq (%rsi),%r15
- movq 8(%rsi),%r14
- movq 16(%rsi),%r13
- movq 24(%rsi),%r12
- movq 32(%rsi),%rbp
- movq 40(%rsi),%rbx
- leaq 48(%rsi),%rsp
+ movq -48(%rsi),%r15
+ movq -40(%rsi),%r14
+ movq -32(%rsi),%r13
+ movq -24(%rsi),%r12
+ movq -16(%rsi),%rbp
+ movq -8(%rsi),%rbx
+ leaq (%rsi),%rsp
.Lmul_epilogue:
.byte 0xf3,0xc3
.size bn_mul_mont_gather5,.-bn_mul_mont_gather5
.type bn_mul4x_mont_gather5,@function
-.align 16
+.align 32
bn_mul4x_mont_gather5:
.Lmul4x_enter:
- movl %r9d,%r9d
- movl 8(%rsp),%r10d
+.byte 0x67
+ movq %rsp,%rax
pushq %rbx
pushq %rbp
pushq %r12
pushq %r13
pushq %r14
pushq %r15
- movq %rsp,%rax
- leaq 4(%r9),%r11
- negq %r11
- leaq (%rsp,%r11,8),%rsp
- andq $-1024,%rsp
+.byte 0x67
+ movl %r9d,%r10d
+ shll $3,%r9d
+ shll $3+2,%r10d
+ negq %r9
- movq %rax,8(%rsp,%r9,8)
+
+
+
+
+
+
+
+ leaq -64(%rsp,%r9,2),%r11
+ subq %rsi,%r11
+ andq $4095,%r11
+ cmpq %r11,%r10
+ jb .Lmul4xsp_alt
+ subq %r11,%rsp
+ leaq -64(%rsp,%r9,2),%rsp
+ jmp .Lmul4xsp_done
+
+.align 32
+.Lmul4xsp_alt:
+ leaq 4096-64(,%r9,2),%r10
+ leaq -64(%rsp,%r9,2),%rsp
+ subq %r10,%r11
+ movq $0,%r10
+ cmovcq %r10,%r11
+ subq %r11,%rsp
+.Lmul4xsp_done:
+ andq $-64,%rsp
+ negq %r9
+
+ movq %rax,40(%rsp)
.Lmul4x_body:
- movq %rdi,16(%rsp,%r9,8)
- movq %rdx,%r12
+
+ call mul4x_internal
+
+ movq 40(%rsp),%rsi
+ movq $1,%rax
+ movq -48(%rsi),%r15
+ movq -40(%rsi),%r14
+ movq -32(%rsi),%r13
+ movq -24(%rsi),%r12
+ movq -16(%rsi),%rbp
+ movq -8(%rsi),%rbx
+ leaq (%rsi),%rsp
+.Lmul4x_epilogue:
+ .byte 0xf3,0xc3
+.size bn_mul4x_mont_gather5,.-bn_mul4x_mont_gather5
+
+.type mul4x_internal,@function
+.align 32
+mul4x_internal:
+ shlq $5,%r9
+ movl 8(%rax),%r10d
+ leaq 256(%rdx,%r9,1),%r13
+ shrq $5,%r9
movq %r10,%r11
shrq $3,%r10
andq $7,%r11
notq %r10
leaq .Lmagic_masks(%rip),%rax
andq $3,%r10
- leaq 96(%r12,%r11,8),%r12
+ leaq 96(%rdx,%r11,8),%r12
movq 0(%rax,%r10,8),%xmm4
movq 8(%rax,%r10,8),%xmm5
+ addq $7,%r11
movq 16(%rax,%r10,8),%xmm6
movq 24(%rax,%r10,8),%xmm7
+ andq $7,%r11
movq -96(%r12),%xmm0
+ leaq 256(%r12),%r14
movq -32(%r12),%xmm1
pand %xmm4,%xmm0
movq 32(%r12),%xmm2
pand %xmm5,%xmm1
movq 96(%r12),%xmm3
pand %xmm6,%xmm2
+.byte 0x67
por %xmm1,%xmm0
+ movq -96(%r14),%xmm1
+.byte 0x67
pand %xmm7,%xmm3
+.byte 0x67
por %xmm2,%xmm0
- leaq 256(%r12),%r12
+ movq -32(%r14),%xmm2
+.byte 0x67
+ pand %xmm4,%xmm1
+.byte 0x67
por %xmm3,%xmm0
+ movq 32(%r14),%xmm3
.byte 102,72,15,126,195
+ movq 96(%r14),%xmm0
+ movq %r13,16+8(%rsp)
+ movq %rdi,56+8(%rsp)
+
movq (%r8),%r8
movq (%rsi),%rax
-
- xorq %r14,%r14
- xorq %r15,%r15
-
- movq -96(%r12),%xmm0
- movq -32(%r12),%xmm1
- pand %xmm4,%xmm0
- movq 32(%r12),%xmm2
- pand %xmm5,%xmm1
+ leaq (%rsi,%r9,1),%rsi
+ negq %r9
movq %r8,%rbp
mulq %rbx
movq %rax,%r10
movq (%rcx),%rax
- movq 96(%r12),%xmm3
- pand %xmm6,%xmm2
- por %xmm1,%xmm0
- pand %xmm7,%xmm3
+ pand %xmm5,%xmm2
+ pand %xmm6,%xmm3
+ por %xmm2,%xmm1
imulq %r10,%rbp
+
+
+
+
+
+
+
+ leaq 64+8(%rsp,%r11,8),%r14
movq %rdx,%r11
- por %xmm2,%xmm0
- leaq 256(%r12),%r12
- por %xmm3,%xmm0
+ pand %xmm7,%xmm0
+ por %xmm3,%xmm1
+ leaq 512(%r12),%r12
+ por %xmm1,%xmm0
mulq %rbp
addq %rax,%r10
- movq 8(%rsi),%rax
+ movq 8(%rsi,%r9,1),%rax
adcq $0,%rdx
movq %rdx,%rdi
mulq %rbx
addq %rax,%r11
- movq 8(%rcx),%rax
+ movq 16(%rcx),%rax
adcq $0,%rdx
movq %rdx,%r10
mulq %rbp
addq %rax,%rdi
- movq 16(%rsi),%rax
+ movq 16(%rsi,%r9,1),%rax
adcq $0,%rdx
addq %r11,%rdi
- leaq 4(%r15),%r15
+ leaq 32(%r9),%r15
+ leaq 64(%rcx),%rcx
adcq $0,%rdx
- movq %rdi,(%rsp)
+ movq %rdi,(%r14)
movq %rdx,%r13
jmp .L1st4x
-.align 16
+
+.align 32
.L1st4x:
mulq %rbx
addq %rax,%r10
- movq -16(%rcx,%r15,8),%rax
+ movq -32(%rcx),%rax
+ leaq 32(%r14),%r14
adcq $0,%rdx
movq %rdx,%r11
mulq %rbp
addq %rax,%r13
- movq -8(%rsi,%r15,8),%rax
+ movq -8(%rsi,%r15,1),%rax
adcq $0,%rdx
addq %r10,%r13
adcq $0,%rdx
- movq %r13,-24(%rsp,%r15,8)
+ movq %r13,-24(%r14)
movq %rdx,%rdi
mulq %rbx
addq %rax,%r11
- movq -8(%rcx,%r15,8),%rax
+ movq -16(%rcx),%rax
adcq $0,%rdx
movq %rdx,%r10
mulq %rbp
addq %rax,%rdi
- movq (%rsi,%r15,8),%rax
+ movq (%rsi,%r15,1),%rax
adcq $0,%rdx
addq %r11,%rdi
adcq $0,%rdx
- movq %rdi,-16(%rsp,%r15,8)
+ movq %rdi,-16(%r14)
movq %rdx,%r13
mulq %rbx
addq %rax,%r10
- movq (%rcx,%r15,8),%rax
+ movq 0(%rcx),%rax
adcq $0,%rdx
movq %rdx,%r11
mulq %rbp
addq %rax,%r13
- movq 8(%rsi,%r15,8),%rax
+ movq 8(%rsi,%r15,1),%rax
adcq $0,%rdx
addq %r10,%r13
adcq $0,%rdx
- movq %r13,-8(%rsp,%r15,8)
+ movq %r13,-8(%r14)
movq %rdx,%rdi
mulq %rbx
addq %rax,%r11
- movq 8(%rcx,%r15,8),%rax
+ movq 16(%rcx),%rax
adcq $0,%rdx
- leaq 4(%r15),%r15
movq %rdx,%r10
mulq %rbp
addq %rax,%rdi
- movq -16(%rsi,%r15,8),%rax
+ movq 16(%rsi,%r15,1),%rax
adcq $0,%rdx
addq %r11,%rdi
+ leaq 64(%rcx),%rcx
adcq $0,%rdx
- movq %rdi,-32(%rsp,%r15,8)
+ movq %rdi,(%r14)
movq %rdx,%r13
- cmpq %r9,%r15
- jl .L1st4x
+
+ addq $32,%r15
+ jnz .L1st4x
mulq %rbx
addq %rax,%r10
- movq -16(%rcx,%r15,8),%rax
+ movq -32(%rcx),%rax
+ leaq 32(%r14),%r14
adcq $0,%rdx
movq %rdx,%r11
mulq %rbp
addq %rax,%r13
- movq -8(%rsi,%r15,8),%rax
+ movq -8(%rsi),%rax
adcq $0,%rdx
addq %r10,%r13
adcq $0,%rdx
- movq %r13,-24(%rsp,%r15,8)
+ movq %r13,-24(%r14)
movq %rdx,%rdi
mulq %rbx
addq %rax,%r11
- movq -8(%rcx,%r15,8),%rax
+ movq -16(%rcx),%rax
adcq $0,%rdx
movq %rdx,%r10
mulq %rbp
addq %rax,%rdi
- movq (%rsi),%rax
+ movq (%rsi,%r9,1),%rax
adcq $0,%rdx
addq %r11,%rdi
adcq $0,%rdx
- movq %rdi,-16(%rsp,%r15,8)
+ movq %rdi,-16(%r14)
movq %rdx,%r13
.byte 102,72,15,126,195
+ leaq (%rcx,%r9,2),%rcx
xorq %rdi,%rdi
addq %r10,%r13
adcq $0,%rdi
- movq %r13,-8(%rsp,%r15,8)
- movq %rdi,(%rsp,%r15,8)
+ movq %r13,-8(%r14)
- leaq 1(%r14),%r14
-.align 4
-.Louter4x:
- xorq %r15,%r15
- movq -96(%r12),%xmm0
- movq -32(%r12),%xmm1
- pand %xmm4,%xmm0
- movq 32(%r12),%xmm2
- pand %xmm5,%xmm1
+ jmp .Louter4x
- movq (%rsp),%r10
+.align 32
+.Louter4x:
+ movq (%r14,%r9,1),%r10
movq %r8,%rbp
mulq %rbx
addq %rax,%r10
movq (%rcx),%rax
adcq $0,%rdx
+ movq -96(%r12),%xmm0
+ movq -32(%r12),%xmm1
+ pand %xmm4,%xmm0
+ movq 32(%r12),%xmm2
+ pand %xmm5,%xmm1
movq 96(%r12),%xmm3
- pand %xmm6,%xmm2
- por %xmm1,%xmm0
- pand %xmm7,%xmm3
imulq %r10,%rbp
+.byte 0x67
movq %rdx,%r11
+ movq %rdi,(%r14)
+ pand %xmm6,%xmm2
+ por %xmm1,%xmm0
+ pand %xmm7,%xmm3
por %xmm2,%xmm0
+ leaq (%r14,%r9,1),%r14
leaq 256(%r12),%r12
por %xmm3,%xmm0
mulq %rbp
addq %rax,%r10
- movq 8(%rsi),%rax
+ movq 8(%rsi,%r9,1),%rax
adcq $0,%rdx
movq %rdx,%rdi
mulq %rbx
addq %rax,%r11
- movq 8(%rcx),%rax
+ movq 16(%rcx),%rax
adcq $0,%rdx
- addq 8(%rsp),%r11
+ addq 8(%r14),%r11
adcq $0,%rdx
movq %rdx,%r10
mulq %rbp
addq %rax,%rdi
- movq 16(%rsi),%rax
+ movq 16(%rsi,%r9,1),%rax
adcq $0,%rdx
addq %r11,%rdi
- leaq 4(%r15),%r15
+ leaq 32(%r9),%r15
+ leaq 64(%rcx),%rcx
adcq $0,%rdx
movq %rdx,%r13
jmp .Linner4x
-.align 16
+
+.align 32
.Linner4x:
mulq %rbx
addq %rax,%r10
- movq -16(%rcx,%r15,8),%rax
+ movq -32(%rcx),%rax
adcq $0,%rdx
- addq -16(%rsp,%r15,8),%r10
+ addq 16(%r14),%r10
+ leaq 32(%r14),%r14
adcq $0,%rdx
movq %rdx,%r11
mulq %rbp
addq %rax,%r13
- movq -8(%rsi,%r15,8),%rax
+ movq -8(%rsi,%r15,1),%rax
adcq $0,%rdx
addq %r10,%r13
adcq $0,%rdx
- movq %rdi,-32(%rsp,%r15,8)
+ movq %rdi,-32(%r14)
movq %rdx,%rdi
mulq %rbx
addq %rax,%r11
- movq -8(%rcx,%r15,8),%rax
+ movq -16(%rcx),%rax
adcq $0,%rdx
- addq -8(%rsp,%r15,8),%r11
+ addq -8(%r14),%r11
adcq $0,%rdx
movq %rdx,%r10
mulq %rbp
addq %rax,%rdi
- movq (%rsi,%r15,8),%rax
+ movq (%rsi,%r15,1),%rax
adcq $0,%rdx
addq %r11,%rdi
adcq $0,%rdx
- movq %r13,-24(%rsp,%r15,8)
+ movq %r13,-24(%r14)
movq %rdx,%r13
mulq %rbx
addq %rax,%r10
- movq (%rcx,%r15,8),%rax
+ movq 0(%rcx),%rax
adcq $0,%rdx
- addq (%rsp,%r15,8),%r10
+ addq (%r14),%r10
adcq $0,%rdx
movq %rdx,%r11
mulq %rbp
addq %rax,%r13
- movq 8(%rsi,%r15,8),%rax
+ movq 8(%rsi,%r15,1),%rax
adcq $0,%rdx
addq %r10,%r13
adcq $0,%rdx
- movq %rdi,-16(%rsp,%r15,8)
+ movq %rdi,-16(%r14)
movq %rdx,%rdi
mulq %rbx
addq %rax,%r11
- movq 8(%rcx,%r15,8),%rax
+ movq 16(%rcx),%rax
adcq $0,%rdx
- addq 8(%rsp,%r15,8),%r11
+ addq 8(%r14),%r11
adcq $0,%rdx
- leaq 4(%r15),%r15
movq %rdx,%r10
mulq %rbp
addq %rax,%rdi
- movq -16(%rsi,%r15,8),%rax
+ movq 16(%rsi,%r15,1),%rax
adcq $0,%rdx
addq %r11,%rdi
+ leaq 64(%rcx),%rcx
adcq $0,%rdx
- movq %r13,-40(%rsp,%r15,8)
+ movq %r13,-8(%r14)
movq %rdx,%r13
- cmpq %r9,%r15
- jl .Linner4x
+
+ addq $32,%r15
+ jnz .Linner4x
mulq %rbx
addq %rax,%r10
- movq -16(%rcx,%r15,8),%rax
+ movq -32(%rcx),%rax
adcq $0,%rdx
- addq -16(%rsp,%r15,8),%r10
+ addq 16(%r14),%r10
+ leaq 32(%r14),%r14
adcq $0,%rdx
movq %rdx,%r11
mulq %rbp
addq %rax,%r13
- movq -8(%rsi,%r15,8),%rax
+ movq -8(%rsi),%rax
adcq $0,%rdx
addq %r10,%r13
adcq $0,%rdx
- movq %rdi,-32(%rsp,%r15,8)
+ movq %rdi,-32(%r14)
movq %rdx,%rdi
mulq %rbx
addq %rax,%r11
- movq -8(%rcx,%r15,8),%rax
+ movq %rbp,%rax
+ movq -16(%rcx),%rbp
adcq $0,%rdx
- addq -8(%rsp,%r15,8),%r11
+ addq -8(%r14),%r11
adcq $0,%rdx
- leaq 1(%r14),%r14
movq %rdx,%r10
mulq %rbp
addq %rax,%rdi
- movq (%rsi),%rax
+ movq (%rsi,%r9,1),%rax
adcq $0,%rdx
addq %r11,%rdi
adcq $0,%rdx
- movq %r13,-24(%rsp,%r15,8)
+ movq %r13,-24(%r14)
movq %rdx,%r13
.byte 102,72,15,126,195
- movq %rdi,-16(%rsp,%r15,8)
+ movq %rdi,-16(%r14)
+ leaq (%rcx,%r9,2),%rcx
xorq %rdi,%rdi
addq %r10,%r13
adcq $0,%rdi
- addq (%rsp,%r9,8),%r13
+ addq (%r14),%r13
adcq $0,%rdi
- movq %r13,-8(%rsp,%r15,8)
- movq %rdi,(%rsp,%r15,8)
+ movq %r13,-8(%r14)
+
+ cmpq 16+8(%rsp),%r12
+ jb .Louter4x
+ subq %r13,%rbp
+ adcq %r15,%r15
+ orq %r15,%rdi
+ xorq $1,%rdi
+ leaq (%r14,%r9,1),%rbx
+ leaq (%rcx,%rdi,8),%rbp
+ movq %r9,%rcx
+ sarq $3+2,%rcx
+ movq 56+8(%rsp),%rdi
+ jmp .Lsqr4x_sub
+.size mul4x_internal,.-mul4x_internal
+.globl bn_power5
+.type bn_power5,@function
+.align 32
+bn_power5:
+ movq %rsp,%rax
+ pushq %rbx
+ pushq %rbp
+ pushq %r12
+ pushq %r13
+ pushq %r14
+ pushq %r15
+ movl %r9d,%r10d
+ shll $3,%r9d
+ shll $3+2,%r10d
+ negq %r9
+ movq (%r8),%r8
- cmpq %r9,%r14
- jl .Louter4x
- movq 16(%rsp,%r9,8),%rdi
- movq 0(%rsp),%rax
- pxor %xmm0,%xmm0
- movq 8(%rsp),%rdx
- shrq $2,%r9
- leaq (%rsp),%rsi
- xorq %r14,%r14
- subq 0(%rcx),%rax
- movq 16(%rsi),%rbx
- movq 24(%rsi),%rbp
- sbbq 8(%rcx),%rdx
- leaq -1(%r9),%r15
- jmp .Lsub4x
-.align 16
-.Lsub4x:
- movq %rax,0(%rdi,%r14,8)
- movq %rdx,8(%rdi,%r14,8)
- sbbq 16(%rcx,%r14,8),%rbx
- movq 32(%rsi,%r14,8),%rax
- movq 40(%rsi,%r14,8),%rdx
- sbbq 24(%rcx,%r14,8),%rbp
- movq %rbx,16(%rdi,%r14,8)
- movq %rbp,24(%rdi,%r14,8)
- sbbq 32(%rcx,%r14,8),%rax
- movq 48(%rsi,%r14,8),%rbx
- movq 56(%rsi,%r14,8),%rbp
- sbbq 40(%rcx,%r14,8),%rdx
- leaq 4(%r14),%r14
- decq %r15
- jnz .Lsub4x
- movq %rax,0(%rdi,%r14,8)
- movq 32(%rsi,%r14,8),%rax
- sbbq 16(%rcx,%r14,8),%rbx
- movq %rdx,8(%rdi,%r14,8)
- sbbq 24(%rcx,%r14,8),%rbp
- movq %rbx,16(%rdi,%r14,8)
- sbbq $0,%rax
- movq %rbp,24(%rdi,%r14,8)
+
+
+
+ leaq -64(%rsp,%r9,2),%r11
+ subq %rsi,%r11
+ andq $4095,%r11
+ cmpq %r11,%r10
+ jb .Lpwr_sp_alt
+ subq %r11,%rsp
+ leaq -64(%rsp,%r9,2),%rsp
+ jmp .Lpwr_sp_done
+
+.align 32
+.Lpwr_sp_alt:
+ leaq 4096-64(,%r9,2),%r10
+ leaq -64(%rsp,%r9,2),%rsp
+ subq %r10,%r11
+ movq $0,%r10
+ cmovcq %r10,%r11
+ subq %r11,%rsp
+.Lpwr_sp_done:
+ andq $-64,%rsp
+ movq %r9,%r10
+ negq %r9
+
+
+
+
+
+
+
+
+
+
+ movq %r8,32(%rsp)
+ movq %rax,40(%rsp)
+.Lpower5_body:
+.byte 102,72,15,110,207
+.byte 102,72,15,110,209
+.byte 102,73,15,110,218
+.byte 102,72,15,110,226
+
+ call __bn_sqr8x_internal
+ call __bn_sqr8x_internal
+ call __bn_sqr8x_internal
+ call __bn_sqr8x_internal
+ call __bn_sqr8x_internal
+
+.byte 102,72,15,126,209
+.byte 102,72,15,126,226
+ movq %rsi,%rdi
+ movq 40(%rsp),%rax
+ leaq 32(%rsp),%r8
+
+ call mul4x_internal
+
+ movq 40(%rsp),%rsi
+ movq $1,%rax
+ movq -48(%rsi),%r15
+ movq -40(%rsi),%r14
+ movq -32(%rsi),%r13
+ movq -24(%rsi),%r12
+ movq -16(%rsi),%rbp
+ movq -8(%rsi),%rbx
+ leaq (%rsi),%rsp
+.Lpower5_epilogue:
+ .byte 0xf3,0xc3
+.size bn_power5,.-bn_power5
+
+.globl bn_sqr8x_internal
+.hidden bn_sqr8x_internal
+.type bn_sqr8x_internal,@function
+.align 32
+bn_sqr8x_internal:
+__bn_sqr8x_internal:
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ leaq 32(%r10),%rbp
+ leaq (%rsi,%r9,1),%rsi
+
+ movq %r9,%rcx
+
+
+ movq -32(%rsi,%rbp,1),%r14
+ leaq 48+8(%rsp,%r9,2),%rdi
+ movq -24(%rsi,%rbp,1),%rax
+ leaq -32(%rdi,%rbp,1),%rdi
+ movq -16(%rsi,%rbp,1),%rbx
+ movq %rax,%r15
+
+ mulq %r14
+ movq %rax,%r10
+ movq %rbx,%rax
+ movq %rdx,%r11
+ movq %r10,-24(%rdi,%rbp,1)
+
+ mulq %r14
+ addq %rax,%r11
+ movq %rbx,%rax
+ adcq $0,%rdx
+ movq %r11,-16(%rdi,%rbp,1)
+ movq %rdx,%r10
+
+
+ movq -8(%rsi,%rbp,1),%rbx
+ mulq %r15
+ movq %rax,%r12
+ movq %rbx,%rax
+ movq %rdx,%r13
+
+ leaq (%rbp),%rcx
+ mulq %r14
+ addq %rax,%r10
+ movq %rbx,%rax
+ movq %rdx,%r11
+ adcq $0,%r11
+ addq %r12,%r10
+ adcq $0,%r11
+ movq %r10,-8(%rdi,%rcx,1)
+ jmp .Lsqr4x_1st
+
+.align 32
+.Lsqr4x_1st:
+ movq (%rsi,%rcx,1),%rbx
+ mulq %r15
+ addq %rax,%r13
+ movq %rbx,%rax
+ movq %rdx,%r12
+ adcq $0,%r12
+
+ mulq %r14
+ addq %rax,%r11
+ movq %rbx,%rax
+ movq 8(%rsi,%rcx,1),%rbx
+ movq %rdx,%r10
+ adcq $0,%r10
+ addq %r13,%r11
+ adcq $0,%r10
+
+
+ mulq %r15
+ addq %rax,%r12
+ movq %rbx,%rax
+ movq %r11,(%rdi,%rcx,1)
+ movq %rdx,%r13
+ adcq $0,%r13
+
+ mulq %r14
+ addq %rax,%r10
+ movq %rbx,%rax
+ movq 16(%rsi,%rcx,1),%rbx
+ movq %rdx,%r11
+ adcq $0,%r11
+ addq %r12,%r10
+ adcq $0,%r11
+
+ mulq %r15
+ addq %rax,%r13
+ movq %rbx,%rax
+ movq %r10,8(%rdi,%rcx,1)
+ movq %rdx,%r12
+ adcq $0,%r12
+
+ mulq %r14
+ addq %rax,%r11
+ movq %rbx,%rax
+ movq 24(%rsi,%rcx,1),%rbx
+ movq %rdx,%r10
+ adcq $0,%r10
+ addq %r13,%r11
+ adcq $0,%r10
+
+
+ mulq %r15
+ addq %rax,%r12
+ movq %rbx,%rax
+ movq %r11,16(%rdi,%rcx,1)
+ movq %rdx,%r13
+ adcq $0,%r13
+ leaq 32(%rcx),%rcx
+
+ mulq %r14
+ addq %rax,%r10
+ movq %rbx,%rax
+ movq %rdx,%r11
+ adcq $0,%r11
+ addq %r12,%r10
+ adcq $0,%r11
+ movq %r10,-8(%rdi,%rcx,1)
+
+ cmpq $0,%rcx
+ jne .Lsqr4x_1st
+
+ mulq %r15
+ addq %rax,%r13
+ leaq 16(%rbp),%rbp
+ adcq $0,%rdx
+ addq %r11,%r13
+ adcq $0,%rdx
+
+ movq %r13,(%rdi)
+ movq %rdx,%r12
+ movq %rdx,8(%rdi)
+ jmp .Lsqr4x_outer
+
+.align 32
+.Lsqr4x_outer:
+ movq -32(%rsi,%rbp,1),%r14
+ leaq 48+8(%rsp,%r9,2),%rdi
+ movq -24(%rsi,%rbp,1),%rax
+ leaq -32(%rdi,%rbp,1),%rdi
+ movq -16(%rsi,%rbp,1),%rbx
+ movq %rax,%r15
+
+ mulq %r14
+ movq -24(%rdi,%rbp,1),%r10
+ addq %rax,%r10
+ movq %rbx,%rax
+ adcq $0,%rdx
+ movq %r10,-24(%rdi,%rbp,1)
+ movq %rdx,%r11
+
+ mulq %r14
+ addq %rax,%r11
+ movq %rbx,%rax
+ adcq $0,%rdx
+ addq -16(%rdi,%rbp,1),%r11
+ movq %rdx,%r10
+ adcq $0,%r10
+ movq %r11,-16(%rdi,%rbp,1)
+
+ xorq %r12,%r12
+
+ movq -8(%rsi,%rbp,1),%rbx
+ mulq %r15
+ addq %rax,%r12
+ movq %rbx,%rax
+ adcq $0,%rdx
+ addq -8(%rdi,%rbp,1),%r12
+ movq %rdx,%r13
+ adcq $0,%r13
+
+ mulq %r14
+ addq %rax,%r10
+ movq %rbx,%rax
+ adcq $0,%rdx
+ addq %r12,%r10
+ movq %rdx,%r11
+ adcq $0,%r11
+ movq %r10,-8(%rdi,%rbp,1)
+
+ leaq (%rbp),%rcx
+ jmp .Lsqr4x_inner
+
+.align 32
+.Lsqr4x_inner:
+ movq (%rsi,%rcx,1),%rbx
+ mulq %r15
+ addq %rax,%r13
+ movq %rbx,%rax
+ movq %rdx,%r12
+ adcq $0,%r12
+ addq (%rdi,%rcx,1),%r13
+ adcq $0,%r12
+
+.byte 0x67
+ mulq %r14
+ addq %rax,%r11
+ movq %rbx,%rax
+ movq 8(%rsi,%rcx,1),%rbx
+ movq %rdx,%r10
+ adcq $0,%r10
+ addq %r13,%r11
+ adcq $0,%r10
+
+ mulq %r15
+ addq %rax,%r12
+ movq %r11,(%rdi,%rcx,1)
+ movq %rbx,%rax
+ movq %rdx,%r13
+ adcq $0,%r13
+ addq 8(%rdi,%rcx,1),%r12
+ leaq 16(%rcx),%rcx
+ adcq $0,%r13
+
+ mulq %r14
+ addq %rax,%r10
+ movq %rbx,%rax
+ adcq $0,%rdx
+ addq %r12,%r10
+ movq %rdx,%r11
+ adcq $0,%r11
+ movq %r10,-8(%rdi,%rcx,1)
+
+ cmpq $0,%rcx
+ jne .Lsqr4x_inner
+
+.byte 0x67
+ mulq %r15
+ addq %rax,%r13
+ adcq $0,%rdx
+ addq %r11,%r13
+ adcq $0,%rdx
+
+ movq %r13,(%rdi)
+ movq %rdx,%r12
+ movq %rdx,8(%rdi)
+
+ addq $16,%rbp
+ jnz .Lsqr4x_outer
+
+
+ movq -32(%rsi),%r14
+ leaq 48+8(%rsp,%r9,2),%rdi
+ movq -24(%rsi),%rax
+ leaq -32(%rdi,%rbp,1),%rdi
+ movq -16(%rsi),%rbx
+ movq %rax,%r15
+
+ mulq %r14
+ addq %rax,%r10
+ movq %rbx,%rax
+ movq %rdx,%r11
+ adcq $0,%r11
+
+ mulq %r14
+ addq %rax,%r11
+ movq %rbx,%rax
+ movq %r10,-24(%rdi)
+ movq %rdx,%r10
+ adcq $0,%r10
+ addq %r13,%r11
+ movq -8(%rsi),%rbx
+ adcq $0,%r10
+
+ mulq %r15
+ addq %rax,%r12
+ movq %rbx,%rax
+ movq %r11,-16(%rdi)
+ movq %rdx,%r13
+ adcq $0,%r13
+
+ mulq %r14
+ addq %rax,%r10
+ movq %rbx,%rax
+ movq %rdx,%r11
+ adcq $0,%r11
+ addq %r12,%r10
+ adcq $0,%r11
+ movq %r10,-8(%rdi)
+
+ mulq %r15
+ addq %rax,%r13
+ movq -16(%rsi),%rax
+ adcq $0,%rdx
+ addq %r11,%r13
+ adcq $0,%rdx
+
+ movq %r13,(%rdi)
+ movq %rdx,%r12
+ movq %rdx,8(%rdi)
+
+ mulq %rbx
+ addq $16,%rbp
xorq %r14,%r14
- andq %rax,%rsi
- notq %rax
- movq %rdi,%rcx
- andq %rax,%rcx
- leaq -1(%r9),%r15
- orq %rcx,%rsi
+ subq %r9,%rbp
+ xorq %r15,%r15
+
+ addq %r12,%rax
+ adcq $0,%rdx
+ movq %rax,8(%rdi)
+ movq %rdx,16(%rdi)
+ movq %r15,24(%rdi)
+
+ movq -16(%rsi,%rbp,1),%rax
+ leaq 48+8(%rsp),%rdi
+ xorq %r10,%r10
+ movq 8(%rdi),%r11
+
+ leaq (%r14,%r10,2),%r12
+ shrq $63,%r10
+ leaq (%rcx,%r11,2),%r13
+ shrq $63,%r11
+ orq %r10,%r13
+ movq 16(%rdi),%r10
+ movq %r11,%r14
+ mulq %rax
+ negq %r15
+ movq 24(%rdi),%r11
+ adcq %rax,%r12
+ movq -8(%rsi,%rbp,1),%rax
+ movq %r12,(%rdi)
+ adcq %rdx,%r13
+
+ leaq (%r14,%r10,2),%rbx
+ movq %r13,8(%rdi)
+ sbbq %r15,%r15
+ shrq $63,%r10
+ leaq (%rcx,%r11,2),%r8
+ shrq $63,%r11
+ orq %r10,%r8
+ movq 32(%rdi),%r10
+ movq %r11,%r14
+ mulq %rax
+ negq %r15
+ movq 40(%rdi),%r11
+ adcq %rax,%rbx
+ movq 0(%rsi,%rbp,1),%rax
+ movq %rbx,16(%rdi)
+ adcq %rdx,%r8
+ leaq 16(%rbp),%rbp
+ movq %r8,24(%rdi)
+ sbbq %r15,%r15
+ leaq 64(%rdi),%rdi
+ jmp .Lsqr4x_shift_n_add
+
+.align 32
+.Lsqr4x_shift_n_add:
+ leaq (%r14,%r10,2),%r12
+ shrq $63,%r10
+ leaq (%rcx,%r11,2),%r13
+ shrq $63,%r11
+ orq %r10,%r13
+ movq -16(%rdi),%r10
+ movq %r11,%r14
+ mulq %rax
+ negq %r15
+ movq -8(%rdi),%r11
+ adcq %rax,%r12
+ movq -8(%rsi,%rbp,1),%rax
+ movq %r12,-32(%rdi)
+ adcq %rdx,%r13
+
+ leaq (%r14,%r10,2),%rbx
+ movq %r13,-24(%rdi)
+ sbbq %r15,%r15
+ shrq $63,%r10
+ leaq (%rcx,%r11,2),%r8
+ shrq $63,%r11
+ orq %r10,%r8
+ movq 0(%rdi),%r10
+ movq %r11,%r14
+ mulq %rax
+ negq %r15
+ movq 8(%rdi),%r11
+ adcq %rax,%rbx
+ movq 0(%rsi,%rbp,1),%rax
+ movq %rbx,-16(%rdi)
+ adcq %rdx,%r8
+
+ leaq (%r14,%r10,2),%r12
+ movq %r8,-8(%rdi)
+ sbbq %r15,%r15
+ shrq $63,%r10
+ leaq (%rcx,%r11,2),%r13
+ shrq $63,%r11
+ orq %r10,%r13
+ movq 16(%rdi),%r10
+ movq %r11,%r14
+ mulq %rax
+ negq %r15
+ movq 24(%rdi),%r11
+ adcq %rax,%r12
+ movq 8(%rsi,%rbp,1),%rax
+ movq %r12,0(%rdi)
+ adcq %rdx,%r13
+
+ leaq (%r14,%r10,2),%rbx
+ movq %r13,8(%rdi)
+ sbbq %r15,%r15
+ shrq $63,%r10
+ leaq (%rcx,%r11,2),%r8
+ shrq $63,%r11
+ orq %r10,%r8
+ movq 32(%rdi),%r10
+ movq %r11,%r14
+ mulq %rax
+ negq %r15
+ movq 40(%rdi),%r11
+ adcq %rax,%rbx
+ movq 16(%rsi,%rbp,1),%rax
+ movq %rbx,16(%rdi)
+ adcq %rdx,%r8
+ movq %r8,24(%rdi)
+ sbbq %r15,%r15
+ leaq 64(%rdi),%rdi
+ addq $32,%rbp
+ jnz .Lsqr4x_shift_n_add
+
+ leaq (%r14,%r10,2),%r12
+.byte 0x67
+ shrq $63,%r10
+ leaq (%rcx,%r11,2),%r13
+ shrq $63,%r11
+ orq %r10,%r13
+ movq -16(%rdi),%r10
+ movq %r11,%r14
+ mulq %rax
+ negq %r15
+ movq -8(%rdi),%r11
+ adcq %rax,%r12
+ movq -8(%rsi),%rax
+ movq %r12,-32(%rdi)
+ adcq %rdx,%r13
+
+ leaq (%r14,%r10,2),%rbx
+ movq %r13,-24(%rdi)
+ sbbq %r15,%r15
+ shrq $63,%r10
+ leaq (%rcx,%r11,2),%r8
+ shrq $63,%r11
+ orq %r10,%r8
+ mulq %rax
+ negq %r15
+ adcq %rax,%rbx
+ adcq %rdx,%r8
+ movq %rbx,-16(%rdi)
+ movq %r8,-8(%rdi)
+.byte 102,72,15,126,213
+sqr8x_reduction:
+ xorq %rax,%rax
+ leaq (%rbp,%r9,2),%rcx
+ leaq 48+8(%rsp,%r9,2),%rdx
+ movq %rcx,0+8(%rsp)
+ leaq 48+8(%rsp,%r9,1),%rdi
+ movq %rdx,8+8(%rsp)
+ negq %r9
+ jmp .L8x_reduction_loop
+
+.align 32
+.L8x_reduction_loop:
+ leaq (%rdi,%r9,1),%rdi
+.byte 0x66
+ movq 0(%rdi),%rbx
+ movq 8(%rdi),%r9
+ movq 16(%rdi),%r10
+ movq 24(%rdi),%r11
+ movq 32(%rdi),%r12
+ movq 40(%rdi),%r13
+ movq 48(%rdi),%r14
+ movq 56(%rdi),%r15
+ movq %rax,(%rdx)
+ leaq 64(%rdi),%rdi
+
+.byte 0x67
+ movq %rbx,%r8
+ imulq 32+8(%rsp),%rbx
+ movq 0(%rbp),%rax
+ movl $8,%ecx
+ jmp .L8x_reduce
+
+.align 32
+.L8x_reduce:
+ mulq %rbx
+ movq 16(%rbp),%rax
+ negq %r8
+ movq %rdx,%r8
+ adcq $0,%r8
+
+ mulq %rbx
+ addq %rax,%r9
+ movq 32(%rbp),%rax
+ adcq $0,%rdx
+ addq %r9,%r8
+ movq %rbx,48-8+8(%rsp,%rcx,8)
+ movq %rdx,%r9
+ adcq $0,%r9
+
+ mulq %rbx
+ addq %rax,%r10
+ movq 48(%rbp),%rax
+ adcq $0,%rdx
+ addq %r10,%r9
+ movq 32+8(%rsp),%rsi
+ movq %rdx,%r10
+ adcq $0,%r10
+
+ mulq %rbx
+ addq %rax,%r11
+ movq 64(%rbp),%rax
+ adcq $0,%rdx
+ imulq %r8,%rsi
+ addq %r11,%r10
+ movq %rdx,%r11
+ adcq $0,%r11
+ mulq %rbx
+ addq %rax,%r12
+ movq 80(%rbp),%rax
+ adcq $0,%rdx
+ addq %r12,%r11
+ movq %rdx,%r12
+ adcq $0,%r12
+
+ mulq %rbx
+ addq %rax,%r13
+ movq 96(%rbp),%rax
+ adcq $0,%rdx
+ addq %r13,%r12
+ movq %rdx,%r13
+ adcq $0,%r13
+
+ mulq %rbx
+ addq %rax,%r14
+ movq 112(%rbp),%rax
+ adcq $0,%rdx
+ addq %r14,%r13
+ movq %rdx,%r14
+ adcq $0,%r14
+
+ mulq %rbx
+ movq %rsi,%rbx
+ addq %rax,%r15
+ movq 0(%rbp),%rax
+ adcq $0,%rdx
+ addq %r15,%r14
+ movq %rdx,%r15
+ adcq $0,%r15
+
+ decl %ecx
+ jnz .L8x_reduce
+
+ leaq 128(%rbp),%rbp
+ xorq %rax,%rax
+ movq 8+8(%rsp),%rdx
+ cmpq 0+8(%rsp),%rbp
+ jae .L8x_no_tail
+
+.byte 0x66
+ addq 0(%rdi),%r8
+ adcq 8(%rdi),%r9
+ adcq 16(%rdi),%r10
+ adcq 24(%rdi),%r11
+ adcq 32(%rdi),%r12
+ adcq 40(%rdi),%r13
+ adcq 48(%rdi),%r14
+ adcq 56(%rdi),%r15
+ sbbq %rsi,%rsi
+
+ movq 48+56+8(%rsp),%rbx
+ movl $8,%ecx
+ movq 0(%rbp),%rax
+ jmp .L8x_tail
+
+.align 32
+.L8x_tail:
+ mulq %rbx
+ addq %rax,%r8
+ movq 16(%rbp),%rax
+ movq %r8,(%rdi)
+ movq %rdx,%r8
+ adcq $0,%r8
+
+ mulq %rbx
+ addq %rax,%r9
+ movq 32(%rbp),%rax
+ adcq $0,%rdx
+ addq %r9,%r8
+ leaq 8(%rdi),%rdi
+ movq %rdx,%r9
+ adcq $0,%r9
+
+ mulq %rbx
+ addq %rax,%r10
+ movq 48(%rbp),%rax
+ adcq $0,%rdx
+ addq %r10,%r9
+ movq %rdx,%r10
+ adcq $0,%r10
+
+ mulq %rbx
+ addq %rax,%r11
+ movq 64(%rbp),%rax
+ adcq $0,%rdx
+ addq %r11,%r10
+ movq %rdx,%r11
+ adcq $0,%r11
+
+ mulq %rbx
+ addq %rax,%r12
+ movq 80(%rbp),%rax
+ adcq $0,%rdx
+ addq %r12,%r11
+ movq %rdx,%r12
+ adcq $0,%r12
+
+ mulq %rbx
+ addq %rax,%r13
+ movq 96(%rbp),%rax
+ adcq $0,%rdx
+ addq %r13,%r12
+ movq %rdx,%r13
+ adcq $0,%r13
+
+ mulq %rbx
+ addq %rax,%r14
+ movq 112(%rbp),%rax
+ adcq $0,%rdx
+ addq %r14,%r13
+ movq %rdx,%r14
+ adcq $0,%r14
+
+ mulq %rbx
+ movq 48-16+8(%rsp,%rcx,8),%rbx
+ addq %rax,%r15
+ adcq $0,%rdx
+ addq %r15,%r14
+ movq 0(%rbp),%rax
+ movq %rdx,%r15
+ adcq $0,%r15
+
+ decl %ecx
+ jnz .L8x_tail
+
+ leaq 128(%rbp),%rbp
+ movq 8+8(%rsp),%rdx
+ cmpq 0+8(%rsp),%rbp
+ jae .L8x_tail_done
+
+ movq 48+56+8(%rsp),%rbx
+ negq %rsi
+ movq 0(%rbp),%rax
+ adcq 0(%rdi),%r8
+ adcq 8(%rdi),%r9
+ adcq 16(%rdi),%r10
+ adcq 24(%rdi),%r11
+ adcq 32(%rdi),%r12
+ adcq 40(%rdi),%r13
+ adcq 48(%rdi),%r14
+ adcq 56(%rdi),%r15
+ sbbq %rsi,%rsi
+
+ movl $8,%ecx
+ jmp .L8x_tail
+
+.align 32
+.L8x_tail_done:
+ addq (%rdx),%r8
+ xorq %rax,%rax
+
+ negq %rsi
+.L8x_no_tail:
+ adcq 0(%rdi),%r8
+ adcq 8(%rdi),%r9
+ adcq 16(%rdi),%r10
+ adcq 24(%rdi),%r11
+ adcq 32(%rdi),%r12
+ adcq 40(%rdi),%r13
+ adcq 48(%rdi),%r14
+ adcq 56(%rdi),%r15
+ adcq $0,%rax
+ movq -16(%rbp),%rcx
+ xorq %rsi,%rsi
+
+.byte 102,72,15,126,213
+
+ movq %r8,0(%rdi)
+ movq %r9,8(%rdi)
+.byte 102,73,15,126,217
+ movq %r10,16(%rdi)
+ movq %r11,24(%rdi)
+ movq %r12,32(%rdi)
+ movq %r13,40(%rdi)
+ movq %r14,48(%rdi)
+ movq %r15,56(%rdi)
+ leaq 64(%rdi),%rdi
+
+ cmpq %rdx,%rdi
+ jb .L8x_reduction_loop
+
+ subq %r15,%rcx
+ leaq (%rdi,%r9,1),%rbx
+ adcq %rsi,%rsi
+ movq %r9,%rcx
+ orq %rsi,%rax
+.byte 102,72,15,126,207
+ xorq $1,%rax
+.byte 102,72,15,126,206
+ leaq (%rbp,%rax,8),%rbp
+ sarq $3+2,%rcx
+ jmp .Lsqr4x_sub
+
+.align 32
+.Lsqr4x_sub:
+.byte 0x66
+ movq 0(%rbx),%r12
+ movq 8(%rbx),%r13
+ sbbq 0(%rbp),%r12
+ movq 16(%rbx),%r14
+ sbbq 16(%rbp),%r13
+ movq 24(%rbx),%r15
+ leaq 32(%rbx),%rbx
+ sbbq 32(%rbp),%r14
+ movq %r12,0(%rdi)
+ sbbq 48(%rbp),%r15
+ leaq 64(%rbp),%rbp
+ movq %r13,8(%rdi)
+ movq %r14,16(%rdi)
+ movq %r15,24(%rdi)
+ leaq 32(%rdi),%rdi
+
+ incq %rcx
+ jnz .Lsqr4x_sub
+ movq %r9,%r10
+ negq %r9
+ .byte 0xf3,0xc3
+.size bn_sqr8x_internal,.-bn_sqr8x_internal
+.globl bn_from_montgomery
+.type bn_from_montgomery,@function
+.align 32
+bn_from_montgomery:
+ testl $7,%r9d
+ jz bn_from_mont8x
+ xorl %eax,%eax
+ .byte 0xf3,0xc3
+.size bn_from_montgomery,.-bn_from_montgomery
+
+.type bn_from_mont8x,@function
+.align 32
+bn_from_mont8x:
+.byte 0x67
+ movq %rsp,%rax
+ pushq %rbx
+ pushq %rbp
+ pushq %r12
+ pushq %r13
+ pushq %r14
+ pushq %r15
+.byte 0x67
+ movl %r9d,%r10d
+ shll $3,%r9d
+ shll $3+2,%r10d
+ negq %r9
+ movq (%r8),%r8
+
+
+
+
+
+
+
+ leaq -64(%rsp,%r9,2),%r11
+ subq %rsi,%r11
+ andq $4095,%r11
+ cmpq %r11,%r10
+ jb .Lfrom_sp_alt
+ subq %r11,%rsp
+ leaq -64(%rsp,%r9,2),%rsp
+ jmp .Lfrom_sp_done
+
+.align 32
+.Lfrom_sp_alt:
+ leaq 4096-64(,%r9,2),%r10
+ leaq -64(%rsp,%r9,2),%rsp
+ subq %r10,%r11
+ movq $0,%r10
+ cmovcq %r10,%r11
+ subq %r11,%rsp
+.Lfrom_sp_done:
+ andq $-64,%rsp
+ movq %r9,%r10
+ negq %r9
+
+
+
+
+
+
+
+
+
+
+ movq %r8,32(%rsp)
+ movq %rax,40(%rsp)
+.Lfrom_body:
+ movq %r9,%r11
+ leaq 48(%rsp),%rax
+ pxor %xmm0,%xmm0
+ jmp .Lmul_by_1
+
+.align 32
+.Lmul_by_1:
movdqu (%rsi),%xmm1
- movdqa %xmm0,(%rsp)
- movdqu %xmm1,(%rdi)
- jmp .Lcopy4x
-.align 16
-.Lcopy4x:
- movdqu 16(%rsi,%r14,1),%xmm2
- movdqu 32(%rsi,%r14,1),%xmm1
- movdqa %xmm0,16(%rsp,%r14,1)
- movdqu %xmm2,16(%rdi,%r14,1)
- movdqa %xmm0,32(%rsp,%r14,1)
- movdqu %xmm1,32(%rdi,%r14,1)
- leaq 32(%r14),%r14
- decq %r15
- jnz .Lcopy4x
+ movdqu 16(%rsi),%xmm2
+ movdqu 32(%rsi),%xmm3
+ movdqa %xmm0,(%rax,%r9,1)
+ movdqu 48(%rsi),%xmm4
+ movdqa %xmm0,16(%rax,%r9,1)
+.byte 0x48,0x8d,0xb6,0x40,0x00,0x00,0x00
+ movdqa %xmm1,(%rax)
+ movdqa %xmm0,32(%rax,%r9,1)
+ movdqa %xmm2,16(%rax)
+ movdqa %xmm0,48(%rax,%r9,1)
+ movdqa %xmm3,32(%rax)
+ movdqa %xmm4,48(%rax)
+ leaq 64(%rax),%rax
+ subq $64,%r11
+ jnz .Lmul_by_1
+
+.byte 102,72,15,110,207
+.byte 102,72,15,110,209
+.byte 0x67
+ movq %rcx,%rbp
+.byte 102,73,15,110,218
+ call sqr8x_reduction
+
+ pxor %xmm0,%xmm0
+ leaq 48(%rsp),%rax
+ movq 40(%rsp),%rsi
+ jmp .Lfrom_mont_zero
+
+.align 32
+.Lfrom_mont_zero:
+ movdqa %xmm0,0(%rax)
+ movdqa %xmm0,16(%rax)
+ movdqa %xmm0,32(%rax)
+ movdqa %xmm0,48(%rax)
+ leaq 64(%rax),%rax
+ subq $32,%r9
+ jnz .Lfrom_mont_zero
- shlq $2,%r9
- movdqu 16(%rsi,%r14,1),%xmm2
- movdqa %xmm0,16(%rsp,%r14,1)
- movdqu %xmm2,16(%rdi,%r14,1)
- movq 8(%rsp,%r9,8),%rsi
movq $1,%rax
- movq (%rsi),%r15
- movq 8(%rsi),%r14
- movq 16(%rsi),%r13
- movq 24(%rsi),%r12
- movq 32(%rsi),%rbp
- movq 40(%rsi),%rbx
- leaq 48(%rsi),%rsp
-.Lmul4x_epilogue:
+ movq -48(%rsi),%r15
+ movq -40(%rsi),%r14
+ movq -32(%rsi),%r13
+ movq -24(%rsi),%r12
+ movq -16(%rsi),%rbp
+ movq -8(%rsi),%rbx
+ leaq (%rsi),%rsp
+.Lfrom_epilogue:
.byte 0xf3,0xc3
-.size bn_mul4x_mont_gather5,.-bn_mul4x_mont_gather5
+.size bn_from_mont8x,.-bn_from_mont8x
+.globl bn_get_bits5
+.type bn_get_bits5,@function
+.align 16
+bn_get_bits5:
+ leaq 0(%rdi),%r10
+ leaq 1(%rdi),%r11
+ movl %esi,%ecx
+ shrl $4,%esi
+ andl $15,%ecx
+ leal -8(%rcx),%eax
+ cmpl $11,%ecx
+ cmovaq %r11,%r10
+ cmoval %eax,%ecx
+ movzwl (%r10,%rsi,2),%eax
+ shrl %cl,%eax
+ andl $31,%eax
+ .byte 0xf3,0xc3
+.size bn_get_bits5,.-bn_get_bits5
+
.globl bn_scatter5
.type bn_scatter5,@function
.align 16
bn_scatter5:
- cmpq $0,%rsi
+ cmpl $0,%esi
jz .Lscatter_epilogue
leaq (%rdx,%rcx,8),%rdx
.Lscatter:
@@ -734,7 +1783,7 @@ bn_scatter5:
leaq 8(%rdi),%rdi
movq %rax,(%rdx)
leaq 256(%rdx),%rdx
- subq $1,%rsi
+ subl $1,%esi
jnz .Lscatter
.Lscatter_epilogue:
.byte 0xf3,0xc3
@@ -744,13 +1793,13 @@ bn_scatter5:
.type bn_gather5,@function
.align 16
bn_gather5:
- movq %rcx,%r11
- shrq $3,%rcx
+ movl %ecx,%r11d
+ shrl $3,%ecx
andq $7,%r11
- notq %rcx
+ notl %ecx
leaq .Lmagic_masks(%rip),%rax
- andq $3,%rcx
- leaq 96(%rdx,%r11,8),%rdx
+ andl $3,%ecx
+ leaq 128(%rdx,%r11,8),%rdx
movq 0(%rax,%rcx,8),%xmm4
movq 8(%rax,%rcx,8),%xmm5
movq 16(%rax,%rcx,8),%xmm6
@@ -758,22 +1807,23 @@ bn_gather5:
jmp .Lgather
.align 16
.Lgather:
- movq -96(%rdx),%xmm0
- movq -32(%rdx),%xmm1
+ movq -128(%rdx),%xmm0
+ movq -64(%rdx),%xmm1
pand %xmm4,%xmm0
- movq 32(%rdx),%xmm2
+ movq 0(%rdx),%xmm2
pand %xmm5,%xmm1
- movq 96(%rdx),%xmm3
+ movq 64(%rdx),%xmm3
pand %xmm6,%xmm2
por %xmm1,%xmm0
pand %xmm7,%xmm3
+.byte 0x67,0x67
por %xmm2,%xmm0
leaq 256(%rdx),%rdx
por %xmm3,%xmm0
movq %xmm0,(%rdi)
leaq 8(%rdi),%rdi
- subq $1,%rsi
+ subl $1,%esi
jnz .Lgather
.byte 0xf3,0xc3
.LSEH_end_bn_gather5:
diff --git a/secure/lib/libcrypto/amd64/x86_64cpuid.S b/secure/lib/libcrypto/amd64/x86_64cpuid.S
index c5d8399..93de516 100644
--- a/secure/lib/libcrypto/amd64/x86_64cpuid.S
+++ b/secure/lib/libcrypto/amd64/x86_64cpuid.S
@@ -5,7 +5,7 @@
call OPENSSL_cpuid_setup
.hidden OPENSSL_ia32cap_P
-.comm OPENSSL_ia32cap_P,8,4
+.comm OPENSSL_ia32cap_P,16,4
.text
@@ -15,11 +15,11 @@
OPENSSL_atomic_add:
movl (%rdi),%eax
.Lspin: leaq (%rsi,%rax,1),%r8
-.byte 0xf0
+.byte 0xf0
cmpxchgl %r8d,(%rdi)
jne .Lspin
movl %r8d,%eax
-.byte 0x48,0x98
+.byte 0x48,0x98
.byte 0xf3,0xc3
.size OPENSSL_atomic_add,.-OPENSSL_atomic_add
@@ -40,6 +40,7 @@ OPENSSL_ia32_cpuid:
movq %rbx,%r8
xorl %eax,%eax
+ movl %eax,8(%rdi)
cpuid
movl %eax,%r11d
@@ -107,6 +108,14 @@ OPENSSL_ia32_cpuid:
shrl $14,%r10d
andl $4095,%r10d
+ cmpl $7,%r11d
+ jb .Lnocacheinfo
+
+ movl $7,%eax
+ xorl %ecx,%ecx
+ cpuid
+ movl %ebx,8(%rdi)
+
.Lnocacheinfo:
movl $1,%eax
cpuid
@@ -139,13 +148,14 @@ OPENSSL_ia32_cpuid:
btl $27,%r9d
jnc .Lclear_avx
xorl %ecx,%ecx
-.byte 0x0f,0x01,0xd0
+.byte 0x0f,0x01,0xd0
andl $6,%eax
cmpl $6,%eax
je .Ldone
.Lclear_avx:
movl $4026525695,%eax
andl %eax,%r9d
+ andl $4294967263,8(%rdi)
.Ldone:
shlq $32,%r9
movl %r10d,%eax
@@ -233,3 +243,18 @@ OPENSSL_ia32_rdrand:
cmoveq %rcx,%rax
.byte 0xf3,0xc3
.size OPENSSL_ia32_rdrand,.-OPENSSL_ia32_rdrand
+
+.globl OPENSSL_ia32_rdseed
+.type OPENSSL_ia32_rdseed,@function
+.align 16
+OPENSSL_ia32_rdseed:
+ movl $8,%ecx
+.Loop_rdseed:
+.byte 72,15,199,248
+ jc .Lbreak_rdseed
+ loop .Loop_rdseed
+.Lbreak_rdseed:
+ cmpq $0,%rax
+ cmoveq %rcx,%rax
+ .byte 0xf3,0xc3
+.size OPENSSL_ia32_rdseed,.-OPENSSL_ia32_rdseed
diff --git a/secure/lib/libcrypto/engines/Makefile b/secure/lib/libcrypto/engines/Makefile
index e29fb87..a41dd7b 100644
--- a/secure/lib/libcrypto/engines/Makefile
+++ b/secure/lib/libcrypto/engines/Makefile
@@ -1,6 +1,6 @@
# $FreeBSD$
-SUBDIR= lib4758cca libaep libatalla libchil libcswift libgost libnuron \
- libsureware libubsec
+SUBDIR= lib4758cca libaep libatalla libcapi libchil libcswift libgost \
+ libnuron libsureware libubsec
.include <bsd.subdir.mk>
diff --git a/secure/lib/libcrypto/engines/libcapi/Makefile b/secure/lib/libcrypto/engines/libcapi/Makefile
new file mode 100644
index 0000000..48543ab
--- /dev/null
+++ b/secure/lib/libcrypto/engines/libcapi/Makefile
@@ -0,0 +1,6 @@
+# $FreeBSD$
+
+SHLIB_NAME?= libcapi.so
+SRCS= e_capi.c
+
+.include <bsd.lib.mk>
diff --git a/secure/lib/libcrypto/engines/libgost/Makefile b/secure/lib/libcrypto/engines/libgost/Makefile
index ad718fa..ca1c716 100644
--- a/secure/lib/libcrypto/engines/libgost/Makefile
+++ b/secure/lib/libcrypto/engines/libgost/Makefile
@@ -1,8 +1,9 @@
# $FreeBSD$
SHLIB_NAME?= libgost.so
-SRCS= gost2001.c gost2001_keyx.c gost89.c gost94_keyx.c gost_ameth.c \
- gost_asn1.c gost_crypt.c gost_ctl.c gost_eng.c gost_keywrap.c \
- gost_md.c gost_params.c gost_pmeth.c gost_sign.c gosthash.c
+SRCS= e_gost_err.c gost2001.c gost2001_keyx.c gost89.c gost94_keyx.c \
+ gost_ameth.c gost_asn1.c gost_crypt.c gost_ctl.c gost_eng.c \
+ gost_keywrap.c gost_md.c gost_params.c gost_pmeth.c gost_sign.c \
+ gosthash.c
.include <bsd.lib.mk>
diff --git a/secure/lib/libcrypto/i386/aes-586.s b/secure/lib/libcrypto/i386/aes-586.s
index 704c53c..bb66276 100644
--- a/secure/lib/libcrypto/i386/aes-586.s
+++ b/secure/lib/libcrypto/i386/aes-586.s
@@ -101,74 +101,78 @@ _x86_AES_encrypt_compact:
xorl %ecx,%edx
movl %esi,%ecx
- movl %ecx,%esi
- andl $2155905152,%esi
- movl %esi,%ebp
- shrl $7,%ebp
+ movl $2155905152,%ebp
+ andl %ecx,%ebp
leal (%ecx,%ecx,1),%edi
- subl %ebp,%esi
+ movl %ebp,%esi
+ shrl $7,%ebp
andl $4278124286,%edi
- andl $454761243,%esi
+ subl %ebp,%esi
movl %ecx,%ebp
+ andl $454761243,%esi
+ rorl $16,%ebp
xorl %edi,%esi
+ movl %ecx,%edi
xorl %esi,%ecx
+ rorl $24,%edi
+ xorl %ebp,%esi
roll $24,%ecx
+ xorl %edi,%esi
+ movl $2155905152,%ebp
xorl %esi,%ecx
- rorl $16,%ebp
- xorl %ebp,%ecx
- rorl $8,%ebp
- xorl %ebp,%ecx
- movl %edx,%esi
- andl $2155905152,%esi
- movl %esi,%ebp
- shrl $7,%ebp
+ andl %edx,%ebp
leal (%edx,%edx,1),%edi
- subl %ebp,%esi
+ movl %ebp,%esi
+ shrl $7,%ebp
andl $4278124286,%edi
- andl $454761243,%esi
+ subl %ebp,%esi
movl %edx,%ebp
+ andl $454761243,%esi
+ rorl $16,%ebp
xorl %edi,%esi
+ movl %edx,%edi
xorl %esi,%edx
+ rorl $24,%edi
+ xorl %ebp,%esi
roll $24,%edx
+ xorl %edi,%esi
+ movl $2155905152,%ebp
xorl %esi,%edx
- rorl $16,%ebp
- xorl %ebp,%edx
- rorl $8,%ebp
- xorl %ebp,%edx
- movl %eax,%esi
- andl $2155905152,%esi
- movl %esi,%ebp
- shrl $7,%ebp
+ andl %eax,%ebp
leal (%eax,%eax,1),%edi
- subl %ebp,%esi
+ movl %ebp,%esi
+ shrl $7,%ebp
andl $4278124286,%edi
- andl $454761243,%esi
+ subl %ebp,%esi
movl %eax,%ebp
+ andl $454761243,%esi
+ rorl $16,%ebp
xorl %edi,%esi
+ movl %eax,%edi
xorl %esi,%eax
+ rorl $24,%edi
+ xorl %ebp,%esi
roll $24,%eax
+ xorl %edi,%esi
+ movl $2155905152,%ebp
xorl %esi,%eax
- rorl $16,%ebp
- xorl %ebp,%eax
- rorl $8,%ebp
- xorl %ebp,%eax
- movl %ebx,%esi
- andl $2155905152,%esi
- movl %esi,%ebp
- shrl $7,%ebp
+ andl %ebx,%ebp
leal (%ebx,%ebx,1),%edi
- subl %ebp,%esi
+ movl %ebp,%esi
+ shrl $7,%ebp
andl $4278124286,%edi
- andl $454761243,%esi
+ subl %ebp,%esi
movl %ebx,%ebp
+ andl $454761243,%esi
+ rorl $16,%ebp
xorl %edi,%esi
+ movl %ebx,%edi
xorl %esi,%ebx
+ rorl $24,%edi
+ xorl %ebp,%esi
roll $24,%ebx
+ xorl %edi,%esi
xorl %esi,%ebx
- rorl $16,%ebp
- xorl %ebp,%ebx
- rorl $8,%ebp
- xorl %ebp,%ebx
movl 20(%esp),%edi
movl 28(%esp),%ebp
addl $16,%edi
@@ -290,74 +294,76 @@ _sse_AES_encrypt_compact:
pshufw $13,%mm4,%mm5
movd %mm1,%eax
movd %mm5,%ebx
+ movl %edi,20(%esp)
movzbl %al,%esi
- movzbl -128(%ebp,%esi,1),%ecx
- pshufw $13,%mm0,%mm2
movzbl %ah,%edx
+ pshufw $13,%mm0,%mm2
+ movzbl -128(%ebp,%esi,1),%ecx
+ movzbl %bl,%edi
movzbl -128(%ebp,%edx,1),%edx
- shll $8,%edx
shrl $16,%eax
- movzbl %bl,%esi
- movzbl -128(%ebp,%esi,1),%esi
+ shll $8,%edx
+ movzbl -128(%ebp,%edi,1),%esi
+ movzbl %bh,%edi
shll $16,%esi
- orl %esi,%ecx
pshufw $8,%mm4,%mm6
- movzbl %bh,%esi
- movzbl -128(%ebp,%esi,1),%esi
+ orl %esi,%ecx
+ movzbl -128(%ebp,%edi,1),%esi
+ movzbl %ah,%edi
shll $24,%esi
- orl %esi,%edx
shrl $16,%ebx
- movzbl %ah,%esi
- movzbl -128(%ebp,%esi,1),%esi
+ orl %esi,%edx
+ movzbl -128(%ebp,%edi,1),%esi
+ movzbl %bh,%edi
shll $8,%esi
orl %esi,%ecx
- movzbl %bh,%esi
- movzbl -128(%ebp,%esi,1),%esi
+ movzbl -128(%ebp,%edi,1),%esi
+ movzbl %al,%edi
shll $24,%esi
orl %esi,%ecx
- movd %ecx,%mm0
- movzbl %al,%esi
- movzbl -128(%ebp,%esi,1),%ecx
+ movzbl -128(%ebp,%edi,1),%esi
+ movzbl %bl,%edi
movd %mm2,%eax
- movzbl %bl,%esi
- movzbl -128(%ebp,%esi,1),%esi
- shll $16,%esi
- orl %esi,%ecx
+ movd %ecx,%mm0
+ movzbl -128(%ebp,%edi,1),%ecx
+ movzbl %ah,%edi
+ shll $16,%ecx
movd %mm6,%ebx
- movzbl %ah,%esi
- movzbl -128(%ebp,%esi,1),%esi
+ orl %esi,%ecx
+ movzbl -128(%ebp,%edi,1),%esi
+ movzbl %bh,%edi
shll $24,%esi
orl %esi,%ecx
- movzbl %bh,%esi
- movzbl -128(%ebp,%esi,1),%esi
+ movzbl -128(%ebp,%edi,1),%esi
+ movzbl %bl,%edi
shll $8,%esi
- orl %esi,%ecx
- movd %ecx,%mm1
- movzbl %bl,%esi
- movzbl -128(%ebp,%esi,1),%ecx
shrl $16,%ebx
- movzbl %al,%esi
- movzbl -128(%ebp,%esi,1),%esi
- shll $16,%esi
orl %esi,%ecx
+ movzbl -128(%ebp,%edi,1),%esi
+ movzbl %al,%edi
shrl $16,%eax
+ movd %ecx,%mm1
+ movzbl -128(%ebp,%edi,1),%ecx
+ movzbl %ah,%edi
+ shll $16,%ecx
+ andl $255,%eax
+ orl %esi,%ecx
punpckldq %mm1,%mm0
- movzbl %ah,%esi
- movzbl -128(%ebp,%esi,1),%esi
+ movzbl -128(%ebp,%edi,1),%esi
+ movzbl %bh,%edi
shll $24,%esi
- orl %esi,%ecx
- andl $255,%eax
+ andl $255,%ebx
movzbl -128(%ebp,%eax,1),%eax
+ orl %esi,%ecx
shll $16,%eax
+ movzbl -128(%ebp,%edi,1),%esi
orl %eax,%edx
- movzbl %bh,%esi
- movzbl -128(%ebp,%esi,1),%esi
shll $8,%esi
- orl %esi,%ecx
- movd %ecx,%mm4
- andl $255,%ebx
movzbl -128(%ebp,%ebx,1),%ebx
+ orl %esi,%ecx
orl %ebx,%edx
+ movl 20(%esp),%edi
+ movd %ecx,%mm4
movd %edx,%mm5
punpckldq %mm5,%mm4
addl $16,%edi
@@ -1130,28 +1136,28 @@ _x86_AES_decrypt_compact:
movzbl -128(%ebp,%eax,1),%eax
shll $24,%eax
xorl %eax,%edx
- movl %ecx,%esi
- andl $2155905152,%esi
- movl %esi,%edi
+ movl $2155905152,%edi
+ andl %ecx,%edi
+ movl %edi,%esi
shrl $7,%edi
leal (%ecx,%ecx,1),%eax
subl %edi,%esi
andl $4278124286,%eax
andl $454761243,%esi
- xorl %eax,%esi
- movl %esi,%eax
- andl $2155905152,%esi
- movl %esi,%edi
+ xorl %esi,%eax
+ movl $2155905152,%edi
+ andl %eax,%edi
+ movl %edi,%esi
shrl $7,%edi
leal (%eax,%eax,1),%ebx
subl %edi,%esi
andl $4278124286,%ebx
andl $454761243,%esi
xorl %ecx,%eax
- xorl %ebx,%esi
- movl %esi,%ebx
- andl $2155905152,%esi
- movl %esi,%edi
+ xorl %esi,%ebx
+ movl $2155905152,%edi
+ andl %ebx,%edi
+ movl %edi,%esi
shrl $7,%edi
leal (%ebx,%ebx,1),%ebp
subl %edi,%esi
@@ -1162,39 +1168,39 @@ _x86_AES_decrypt_compact:
xorl %esi,%ebp
xorl %eax,%ecx
xorl %ebp,%eax
- roll $24,%eax
xorl %ebx,%ecx
xorl %ebp,%ebx
- roll $16,%ebx
+ roll $24,%eax
xorl %ebp,%ecx
- roll $8,%ebp
+ roll $16,%ebx
xorl %eax,%ecx
+ roll $8,%ebp
xorl %ebx,%ecx
movl 4(%esp),%eax
xorl %ebp,%ecx
movl %ecx,12(%esp)
- movl %edx,%esi
- andl $2155905152,%esi
- movl %esi,%edi
+ movl $2155905152,%edi
+ andl %edx,%edi
+ movl %edi,%esi
shrl $7,%edi
leal (%edx,%edx,1),%ebx
subl %edi,%esi
andl $4278124286,%ebx
andl $454761243,%esi
- xorl %ebx,%esi
- movl %esi,%ebx
- andl $2155905152,%esi
- movl %esi,%edi
+ xorl %esi,%ebx
+ movl $2155905152,%edi
+ andl %ebx,%edi
+ movl %edi,%esi
shrl $7,%edi
leal (%ebx,%ebx,1),%ecx
subl %edi,%esi
andl $4278124286,%ecx
andl $454761243,%esi
xorl %edx,%ebx
- xorl %ecx,%esi
- movl %esi,%ecx
- andl $2155905152,%esi
- movl %esi,%edi
+ xorl %esi,%ecx
+ movl $2155905152,%edi
+ andl %ecx,%edi
+ movl %edi,%esi
shrl $7,%edi
leal (%ecx,%ecx,1),%ebp
subl %edi,%esi
@@ -1205,39 +1211,39 @@ _x86_AES_decrypt_compact:
xorl %esi,%ebp
xorl %ebx,%edx
xorl %ebp,%ebx
- roll $24,%ebx
xorl %ecx,%edx
xorl %ebp,%ecx
- roll $16,%ecx
+ roll $24,%ebx
xorl %ebp,%edx
- roll $8,%ebp
+ roll $16,%ecx
xorl %ebx,%edx
+ roll $8,%ebp
xorl %ecx,%edx
movl 8(%esp),%ebx
xorl %ebp,%edx
movl %edx,16(%esp)
- movl %eax,%esi
- andl $2155905152,%esi
- movl %esi,%edi
+ movl $2155905152,%edi
+ andl %eax,%edi
+ movl %edi,%esi
shrl $7,%edi
leal (%eax,%eax,1),%ecx
subl %edi,%esi
andl $4278124286,%ecx
andl $454761243,%esi
- xorl %ecx,%esi
- movl %esi,%ecx
- andl $2155905152,%esi
- movl %esi,%edi
+ xorl %esi,%ecx
+ movl $2155905152,%edi
+ andl %ecx,%edi
+ movl %edi,%esi
shrl $7,%edi
leal (%ecx,%ecx,1),%edx
subl %edi,%esi
andl $4278124286,%edx
andl $454761243,%esi
xorl %eax,%ecx
- xorl %edx,%esi
- movl %esi,%edx
- andl $2155905152,%esi
- movl %esi,%edi
+ xorl %esi,%edx
+ movl $2155905152,%edi
+ andl %edx,%edi
+ movl %edi,%esi
shrl $7,%edi
leal (%edx,%edx,1),%ebp
subl %edi,%esi
@@ -1248,37 +1254,37 @@ _x86_AES_decrypt_compact:
xorl %esi,%ebp
xorl %ecx,%eax
xorl %ebp,%ecx
- roll $24,%ecx
xorl %edx,%eax
xorl %ebp,%edx
- roll $16,%edx
+ roll $24,%ecx
xorl %ebp,%eax
- roll $8,%ebp
+ roll $16,%edx
xorl %ecx,%eax
+ roll $8,%ebp
xorl %edx,%eax
xorl %ebp,%eax
- movl %ebx,%esi
- andl $2155905152,%esi
- movl %esi,%edi
+ movl $2155905152,%edi
+ andl %ebx,%edi
+ movl %edi,%esi
shrl $7,%edi
leal (%ebx,%ebx,1),%ecx
subl %edi,%esi
andl $4278124286,%ecx
andl $454761243,%esi
- xorl %ecx,%esi
- movl %esi,%ecx
- andl $2155905152,%esi
- movl %esi,%edi
+ xorl %esi,%ecx
+ movl $2155905152,%edi
+ andl %ecx,%edi
+ movl %edi,%esi
shrl $7,%edi
leal (%ecx,%ecx,1),%edx
subl %edi,%esi
andl $4278124286,%edx
andl $454761243,%esi
xorl %ebx,%ecx
- xorl %edx,%esi
- movl %esi,%edx
- andl $2155905152,%esi
- movl %esi,%edi
+ xorl %esi,%edx
+ movl $2155905152,%edi
+ andl %edx,%edi
+ movl %edi,%esi
shrl $7,%edi
leal (%edx,%edx,1),%ebp
subl %edi,%esi
@@ -1289,13 +1295,13 @@ _x86_AES_decrypt_compact:
xorl %esi,%ebp
xorl %ecx,%ebx
xorl %ebp,%ecx
- roll $24,%ecx
xorl %edx,%ebx
xorl %ebp,%edx
- roll $16,%edx
+ roll $24,%ecx
xorl %ebp,%ebx
- roll $8,%ebp
+ roll $16,%edx
xorl %ecx,%ebx
+ roll $8,%ebp
xorl %edx,%ebx
movl 12(%esp),%ecx
xorl %ebp,%ebx
@@ -1414,77 +1420,79 @@ _sse_AES_decrypt_compact:
.align 16
.L007loop:
pshufw $12,%mm0,%mm1
- movd %mm1,%eax
pshufw $9,%mm4,%mm5
- movzbl %al,%esi
- movzbl -128(%ebp,%esi,1),%ecx
+ movd %mm1,%eax
movd %mm5,%ebx
+ movl %edi,20(%esp)
+ movzbl %al,%esi
movzbl %ah,%edx
+ pshufw $6,%mm0,%mm2
+ movzbl -128(%ebp,%esi,1),%ecx
+ movzbl %bl,%edi
movzbl -128(%ebp,%edx,1),%edx
+ shrl $16,%eax
shll $8,%edx
- pshufw $6,%mm0,%mm2
- movzbl %bl,%esi
- movzbl -128(%ebp,%esi,1),%esi
+ movzbl -128(%ebp,%edi,1),%esi
+ movzbl %bh,%edi
shll $16,%esi
+ pshufw $3,%mm4,%mm6
orl %esi,%ecx
- shrl $16,%eax
- movzbl %bh,%esi
- movzbl -128(%ebp,%esi,1),%esi
+ movzbl -128(%ebp,%edi,1),%esi
+ movzbl %ah,%edi
shll $24,%esi
- orl %esi,%edx
shrl $16,%ebx
- pshufw $3,%mm4,%mm6
- movzbl %ah,%esi
- movzbl -128(%ebp,%esi,1),%esi
+ orl %esi,%edx
+ movzbl -128(%ebp,%edi,1),%esi
+ movzbl %bh,%edi
shll $24,%esi
orl %esi,%ecx
- movzbl %bh,%esi
- movzbl -128(%ebp,%esi,1),%esi
+ movzbl -128(%ebp,%edi,1),%esi
+ movzbl %al,%edi
shll $8,%esi
- orl %esi,%ecx
- movd %ecx,%mm0
- movzbl %al,%esi
movd %mm2,%eax
- movzbl -128(%ebp,%esi,1),%ecx
- shll $16,%ecx
- movzbl %bl,%esi
+ orl %esi,%ecx
+ movzbl -128(%ebp,%edi,1),%esi
+ movzbl %bl,%edi
+ shll $16,%esi
movd %mm6,%ebx
- movzbl -128(%ebp,%esi,1),%esi
+ movd %ecx,%mm0
+ movzbl -128(%ebp,%edi,1),%ecx
+ movzbl %al,%edi
orl %esi,%ecx
- movzbl %al,%esi
- movzbl -128(%ebp,%esi,1),%esi
+ movzbl -128(%ebp,%edi,1),%esi
+ movzbl %bl,%edi
orl %esi,%edx
- movzbl %bl,%esi
- movzbl -128(%ebp,%esi,1),%esi
+ movzbl -128(%ebp,%edi,1),%esi
+ movzbl %ah,%edi
shll $16,%esi
- orl %esi,%edx
- movd %edx,%mm1
- movzbl %ah,%esi
- movzbl -128(%ebp,%esi,1),%edx
- shll $8,%edx
- movzbl %bh,%esi
shrl $16,%eax
- movzbl -128(%ebp,%esi,1),%esi
- shll $24,%esi
orl %esi,%edx
+ movzbl -128(%ebp,%edi,1),%esi
+ movzbl %bh,%edi
shrl $16,%ebx
- punpckldq %mm1,%mm0
- movzbl %bh,%esi
- movzbl -128(%ebp,%esi,1),%esi
shll $8,%esi
- orl %esi,%ecx
+ movd %edx,%mm1
+ movzbl -128(%ebp,%edi,1),%edx
+ movzbl %bh,%edi
+ shll $24,%edx
andl $255,%ebx
+ orl %esi,%edx
+ punpckldq %mm1,%mm0
+ movzbl -128(%ebp,%edi,1),%esi
+ movzbl %al,%edi
+ shll $8,%esi
+ movzbl %ah,%eax
movzbl -128(%ebp,%ebx,1),%ebx
+ orl %esi,%ecx
+ movzbl -128(%ebp,%edi,1),%esi
orl %ebx,%edx
- movzbl %al,%esi
- movzbl -128(%ebp,%esi,1),%esi
shll $16,%esi
- orl %esi,%edx
- movd %edx,%mm4
- movzbl %ah,%eax
movzbl -128(%ebp,%eax,1),%eax
+ orl %esi,%edx
shll $24,%eax
orl %eax,%ecx
+ movl 20(%esp),%edi
+ movd %edx,%mm4
movd %ecx,%mm5
punpckldq %mm5,%mm4
addl $16,%edi
@@ -3046,30 +3054,30 @@ private_AES_set_decrypt_key:
.align 4
.L056permute:
addl $16,%edi
- movl %eax,%esi
- andl $2155905152,%esi
- movl %esi,%ebp
- shrl $7,%ebp
+ movl $2155905152,%ebp
+ andl %eax,%ebp
leal (%eax,%eax,1),%ebx
+ movl %ebp,%esi
+ shrl $7,%ebp
subl %ebp,%esi
andl $4278124286,%ebx
andl $454761243,%esi
- xorl %ebx,%esi
- movl %esi,%ebx
- andl $2155905152,%esi
- movl %esi,%ebp
- shrl $7,%ebp
+ xorl %esi,%ebx
+ movl $2155905152,%ebp
+ andl %ebx,%ebp
leal (%ebx,%ebx,1),%ecx
+ movl %ebp,%esi
+ shrl $7,%ebp
subl %ebp,%esi
andl $4278124286,%ecx
andl $454761243,%esi
xorl %eax,%ebx
- xorl %ecx,%esi
- movl %esi,%ecx
- andl $2155905152,%esi
- movl %esi,%ebp
- shrl $7,%ebp
+ xorl %esi,%ecx
+ movl $2155905152,%ebp
+ andl %ecx,%ebp
leal (%ecx,%ecx,1),%edx
+ movl %ebp,%esi
+ shrl $7,%ebp
xorl %eax,%ecx
subl %ebp,%esi
andl $4278124286,%edx
@@ -3090,30 +3098,30 @@ private_AES_set_decrypt_key:
movl %ebp,%ebx
xorl %edx,%eax
movl %eax,(%edi)
- movl %ebx,%esi
- andl $2155905152,%esi
- movl %esi,%ebp
- shrl $7,%ebp
+ movl $2155905152,%ebp
+ andl %ebx,%ebp
leal (%ebx,%ebx,1),%ecx
+ movl %ebp,%esi
+ shrl $7,%ebp
subl %ebp,%esi
andl $4278124286,%ecx
andl $454761243,%esi
- xorl %ecx,%esi
- movl %esi,%ecx
- andl $2155905152,%esi
- movl %esi,%ebp
- shrl $7,%ebp
+ xorl %esi,%ecx
+ movl $2155905152,%ebp
+ andl %ecx,%ebp
leal (%ecx,%ecx,1),%edx
+ movl %ebp,%esi
+ shrl $7,%ebp
subl %ebp,%esi
andl $4278124286,%edx
andl $454761243,%esi
xorl %ebx,%ecx
- xorl %edx,%esi
- movl %esi,%edx
- andl $2155905152,%esi
- movl %esi,%ebp
- shrl $7,%ebp
+ xorl %esi,%edx
+ movl $2155905152,%ebp
+ andl %edx,%ebp
leal (%edx,%edx,1),%eax
+ movl %ebp,%esi
+ shrl $7,%ebp
xorl %ebx,%edx
subl %ebp,%esi
andl $4278124286,%eax
@@ -3134,30 +3142,30 @@ private_AES_set_decrypt_key:
movl %ebp,%ecx
xorl %eax,%ebx
movl %ebx,4(%edi)
- movl %ecx,%esi
- andl $2155905152,%esi
- movl %esi,%ebp
- shrl $7,%ebp
+ movl $2155905152,%ebp
+ andl %ecx,%ebp
leal (%ecx,%ecx,1),%edx
+ movl %ebp,%esi
+ shrl $7,%ebp
subl %ebp,%esi
andl $4278124286,%edx
andl $454761243,%esi
- xorl %edx,%esi
- movl %esi,%edx
- andl $2155905152,%esi
- movl %esi,%ebp
- shrl $7,%ebp
+ xorl %esi,%edx
+ movl $2155905152,%ebp
+ andl %edx,%ebp
leal (%edx,%edx,1),%eax
+ movl %ebp,%esi
+ shrl $7,%ebp
subl %ebp,%esi
andl $4278124286,%eax
andl $454761243,%esi
xorl %ecx,%edx
- xorl %eax,%esi
- movl %esi,%eax
- andl $2155905152,%esi
- movl %esi,%ebp
- shrl $7,%ebp
+ xorl %esi,%eax
+ movl $2155905152,%ebp
+ andl %eax,%ebp
leal (%eax,%eax,1),%ebx
+ movl %ebp,%esi
+ shrl $7,%ebp
xorl %ecx,%eax
subl %ebp,%esi
andl $4278124286,%ebx
@@ -3178,30 +3186,30 @@ private_AES_set_decrypt_key:
movl %ebp,%edx
xorl %ebx,%ecx
movl %ecx,8(%edi)
- movl %edx,%esi
- andl $2155905152,%esi
- movl %esi,%ebp
- shrl $7,%ebp
+ movl $2155905152,%ebp
+ andl %edx,%ebp
leal (%edx,%edx,1),%eax
+ movl %ebp,%esi
+ shrl $7,%ebp
subl %ebp,%esi
andl $4278124286,%eax
andl $454761243,%esi
- xorl %eax,%esi
- movl %esi,%eax
- andl $2155905152,%esi
- movl %esi,%ebp
- shrl $7,%ebp
+ xorl %esi,%eax
+ movl $2155905152,%ebp
+ andl %eax,%ebp
leal (%eax,%eax,1),%ebx
+ movl %ebp,%esi
+ shrl $7,%ebp
subl %ebp,%esi
andl $4278124286,%ebx
andl $454761243,%esi
xorl %edx,%eax
- xorl %ebx,%esi
- movl %esi,%ebx
- andl $2155905152,%esi
- movl %esi,%ebp
- shrl $7,%ebp
+ xorl %esi,%ebx
+ movl $2155905152,%ebp
+ andl %ebx,%ebp
leal (%ebx,%ebx,1),%ecx
+ movl %ebp,%esi
+ shrl $7,%ebp
xorl %edx,%ebx
subl %ebp,%esi
andl $4278124286,%ecx
@@ -3234,4 +3242,4 @@ private_AES_set_decrypt_key:
.byte 65,69,83,32,102,111,114,32,120,56,54,44,32,67,82,89
.byte 80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114
.byte 111,64,111,112,101,110,115,115,108,46,111,114,103,62,0
-.comm OPENSSL_ia32cap_P,8,4
+.comm OPENSSL_ia32cap_P,16,4
diff --git a/secure/lib/libcrypto/i386/aesni-x86.s b/secure/lib/libcrypto/i386/aesni-x86.s
index e05096f..5b294bd 100644
--- a/secure/lib/libcrypto/i386/aesni-x86.s
+++ b/secure/lib/libcrypto/i386/aesni-x86.s
@@ -22,7 +22,10 @@ aesni_encrypt:
leal 16(%edx),%edx
jnz .L000enc1_loop_1
.byte 102,15,56,221,209
+ pxor %xmm0,%xmm0
+ pxor %xmm1,%xmm1
movups %xmm2,(%eax)
+ pxor %xmm2,%xmm2
ret
.size aesni_encrypt,.-.L_aesni_encrypt_begin
.globl aesni_decrypt
@@ -46,32 +49,90 @@ aesni_decrypt:
leal 16(%edx),%edx
jnz .L001dec1_loop_2
.byte 102,15,56,223,209
+ pxor %xmm0,%xmm0
+ pxor %xmm1,%xmm1
movups %xmm2,(%eax)
+ pxor %xmm2,%xmm2
ret
.size aesni_decrypt,.-.L_aesni_decrypt_begin
+.type _aesni_encrypt2,@function
+.align 16
+_aesni_encrypt2:
+ movups (%edx),%xmm0
+ shll $4,%ecx
+ movups 16(%edx),%xmm1
+ xorps %xmm0,%xmm2
+ pxor %xmm0,%xmm3
+ movups 32(%edx),%xmm0
+ leal 32(%edx,%ecx,1),%edx
+ negl %ecx
+ addl $16,%ecx
+.L002enc2_loop:
+.byte 102,15,56,220,209
+.byte 102,15,56,220,217
+ movups (%edx,%ecx,1),%xmm1
+ addl $32,%ecx
+.byte 102,15,56,220,208
+.byte 102,15,56,220,216
+ movups -16(%edx,%ecx,1),%xmm0
+ jnz .L002enc2_loop
+.byte 102,15,56,220,209
+.byte 102,15,56,220,217
+.byte 102,15,56,221,208
+.byte 102,15,56,221,216
+ ret
+.size _aesni_encrypt2,.-_aesni_encrypt2
+.type _aesni_decrypt2,@function
+.align 16
+_aesni_decrypt2:
+ movups (%edx),%xmm0
+ shll $4,%ecx
+ movups 16(%edx),%xmm1
+ xorps %xmm0,%xmm2
+ pxor %xmm0,%xmm3
+ movups 32(%edx),%xmm0
+ leal 32(%edx,%ecx,1),%edx
+ negl %ecx
+ addl $16,%ecx
+.L003dec2_loop:
+.byte 102,15,56,222,209
+.byte 102,15,56,222,217
+ movups (%edx,%ecx,1),%xmm1
+ addl $32,%ecx
+.byte 102,15,56,222,208
+.byte 102,15,56,222,216
+ movups -16(%edx,%ecx,1),%xmm0
+ jnz .L003dec2_loop
+.byte 102,15,56,222,209
+.byte 102,15,56,222,217
+.byte 102,15,56,223,208
+.byte 102,15,56,223,216
+ ret
+.size _aesni_decrypt2,.-_aesni_decrypt2
.type _aesni_encrypt3,@function
.align 16
_aesni_encrypt3:
movups (%edx),%xmm0
- shrl $1,%ecx
+ shll $4,%ecx
movups 16(%edx),%xmm1
- leal 32(%edx),%edx
xorps %xmm0,%xmm2
pxor %xmm0,%xmm3
pxor %xmm0,%xmm4
- movups (%edx),%xmm0
-.L002enc3_loop:
+ movups 32(%edx),%xmm0
+ leal 32(%edx,%ecx,1),%edx
+ negl %ecx
+ addl $16,%ecx
+.L004enc3_loop:
.byte 102,15,56,220,209
.byte 102,15,56,220,217
- decl %ecx
.byte 102,15,56,220,225
- movups 16(%edx),%xmm1
+ movups (%edx,%ecx,1),%xmm1
+ addl $32,%ecx
.byte 102,15,56,220,208
.byte 102,15,56,220,216
- leal 32(%edx),%edx
.byte 102,15,56,220,224
- movups (%edx),%xmm0
- jnz .L002enc3_loop
+ movups -16(%edx,%ecx,1),%xmm0
+ jnz .L004enc3_loop
.byte 102,15,56,220,209
.byte 102,15,56,220,217
.byte 102,15,56,220,225
@@ -84,25 +145,26 @@ _aesni_encrypt3:
.align 16
_aesni_decrypt3:
movups (%edx),%xmm0
- shrl $1,%ecx
+ shll $4,%ecx
movups 16(%edx),%xmm1
- leal 32(%edx),%edx
xorps %xmm0,%xmm2
pxor %xmm0,%xmm3
pxor %xmm0,%xmm4
- movups (%edx),%xmm0
-.L003dec3_loop:
+ movups 32(%edx),%xmm0
+ leal 32(%edx,%ecx,1),%edx
+ negl %ecx
+ addl $16,%ecx
+.L005dec3_loop:
.byte 102,15,56,222,209
.byte 102,15,56,222,217
- decl %ecx
.byte 102,15,56,222,225
- movups 16(%edx),%xmm1
+ movups (%edx,%ecx,1),%xmm1
+ addl $32,%ecx
.byte 102,15,56,222,208
.byte 102,15,56,222,216
- leal 32(%edx),%edx
.byte 102,15,56,222,224
- movups (%edx),%xmm0
- jnz .L003dec3_loop
+ movups -16(%edx,%ecx,1),%xmm0
+ jnz .L005dec3_loop
.byte 102,15,56,222,209
.byte 102,15,56,222,217
.byte 102,15,56,222,225
@@ -116,27 +178,29 @@ _aesni_decrypt3:
_aesni_encrypt4:
movups (%edx),%xmm0
movups 16(%edx),%xmm1
- shrl $1,%ecx
- leal 32(%edx),%edx
+ shll $4,%ecx
xorps %xmm0,%xmm2
pxor %xmm0,%xmm3
pxor %xmm0,%xmm4
pxor %xmm0,%xmm5
- movups (%edx),%xmm0
-.L004enc4_loop:
+ movups 32(%edx),%xmm0
+ leal 32(%edx,%ecx,1),%edx
+ negl %ecx
+.byte 15,31,64,0
+ addl $16,%ecx
+.L006enc4_loop:
.byte 102,15,56,220,209
.byte 102,15,56,220,217
- decl %ecx
.byte 102,15,56,220,225
.byte 102,15,56,220,233
- movups 16(%edx),%xmm1
+ movups (%edx,%ecx,1),%xmm1
+ addl $32,%ecx
.byte 102,15,56,220,208
.byte 102,15,56,220,216
- leal 32(%edx),%edx
.byte 102,15,56,220,224
.byte 102,15,56,220,232
- movups (%edx),%xmm0
- jnz .L004enc4_loop
+ movups -16(%edx,%ecx,1),%xmm0
+ jnz .L006enc4_loop
.byte 102,15,56,220,209
.byte 102,15,56,220,217
.byte 102,15,56,220,225
@@ -152,27 +216,29 @@ _aesni_encrypt4:
_aesni_decrypt4:
movups (%edx),%xmm0
movups 16(%edx),%xmm1
- shrl $1,%ecx
- leal 32(%edx),%edx
+ shll $4,%ecx
xorps %xmm0,%xmm2
pxor %xmm0,%xmm3
pxor %xmm0,%xmm4
pxor %xmm0,%xmm5
- movups (%edx),%xmm0
-.L005dec4_loop:
+ movups 32(%edx),%xmm0
+ leal 32(%edx,%ecx,1),%edx
+ negl %ecx
+.byte 15,31,64,0
+ addl $16,%ecx
+.L007dec4_loop:
.byte 102,15,56,222,209
.byte 102,15,56,222,217
- decl %ecx
.byte 102,15,56,222,225
.byte 102,15,56,222,233
- movups 16(%edx),%xmm1
+ movups (%edx,%ecx,1),%xmm1
+ addl $32,%ecx
.byte 102,15,56,222,208
.byte 102,15,56,222,216
- leal 32(%edx),%edx
.byte 102,15,56,222,224
.byte 102,15,56,222,232
- movups (%edx),%xmm0
- jnz .L005dec4_loop
+ movups -16(%edx,%ecx,1),%xmm0
+ jnz .L007dec4_loop
.byte 102,15,56,222,209
.byte 102,15,56,222,217
.byte 102,15,56,222,225
@@ -187,45 +253,42 @@ _aesni_decrypt4:
.align 16
_aesni_encrypt6:
movups (%edx),%xmm0
- shrl $1,%ecx
+ shll $4,%ecx
movups 16(%edx),%xmm1
- leal 32(%edx),%edx
xorps %xmm0,%xmm2
pxor %xmm0,%xmm3
-.byte 102,15,56,220,209
pxor %xmm0,%xmm4
-.byte 102,15,56,220,217
+.byte 102,15,56,220,209
pxor %xmm0,%xmm5
- decl %ecx
-.byte 102,15,56,220,225
pxor %xmm0,%xmm6
-.byte 102,15,56,220,233
+.byte 102,15,56,220,217
+ leal 32(%edx,%ecx,1),%edx
+ negl %ecx
+.byte 102,15,56,220,225
pxor %xmm0,%xmm7
-.byte 102,15,56,220,241
- movups (%edx),%xmm0
-.byte 102,15,56,220,249
- jmp .L_aesni_encrypt6_enter
+ movups (%edx,%ecx,1),%xmm0
+ addl $16,%ecx
+ jmp .L008_aesni_encrypt6_inner
.align 16
-.L006enc6_loop:
+.L009enc6_loop:
.byte 102,15,56,220,209
.byte 102,15,56,220,217
- decl %ecx
.byte 102,15,56,220,225
+.L008_aesni_encrypt6_inner:
.byte 102,15,56,220,233
.byte 102,15,56,220,241
.byte 102,15,56,220,249
-.align 16
.L_aesni_encrypt6_enter:
- movups 16(%edx),%xmm1
+ movups (%edx,%ecx,1),%xmm1
+ addl $32,%ecx
.byte 102,15,56,220,208
.byte 102,15,56,220,216
- leal 32(%edx),%edx
.byte 102,15,56,220,224
.byte 102,15,56,220,232
.byte 102,15,56,220,240
.byte 102,15,56,220,248
- movups (%edx),%xmm0
- jnz .L006enc6_loop
+ movups -16(%edx,%ecx,1),%xmm0
+ jnz .L009enc6_loop
.byte 102,15,56,220,209
.byte 102,15,56,220,217
.byte 102,15,56,220,225
@@ -244,45 +307,42 @@ _aesni_encrypt6:
.align 16
_aesni_decrypt6:
movups (%edx),%xmm0
- shrl $1,%ecx
+ shll $4,%ecx
movups 16(%edx),%xmm1
- leal 32(%edx),%edx
xorps %xmm0,%xmm2
pxor %xmm0,%xmm3
-.byte 102,15,56,222,209
pxor %xmm0,%xmm4
-.byte 102,15,56,222,217
+.byte 102,15,56,222,209
pxor %xmm0,%xmm5
- decl %ecx
-.byte 102,15,56,222,225
pxor %xmm0,%xmm6
-.byte 102,15,56,222,233
+.byte 102,15,56,222,217
+ leal 32(%edx,%ecx,1),%edx
+ negl %ecx
+.byte 102,15,56,222,225
pxor %xmm0,%xmm7
-.byte 102,15,56,222,241
- movups (%edx),%xmm0
-.byte 102,15,56,222,249
- jmp .L_aesni_decrypt6_enter
+ movups (%edx,%ecx,1),%xmm0
+ addl $16,%ecx
+ jmp .L010_aesni_decrypt6_inner
.align 16
-.L007dec6_loop:
+.L011dec6_loop:
.byte 102,15,56,222,209
.byte 102,15,56,222,217
- decl %ecx
.byte 102,15,56,222,225
+.L010_aesni_decrypt6_inner:
.byte 102,15,56,222,233
.byte 102,15,56,222,241
.byte 102,15,56,222,249
-.align 16
.L_aesni_decrypt6_enter:
- movups 16(%edx),%xmm1
+ movups (%edx,%ecx,1),%xmm1
+ addl $32,%ecx
.byte 102,15,56,222,208
.byte 102,15,56,222,216
- leal 32(%edx),%edx
.byte 102,15,56,222,224
.byte 102,15,56,222,232
.byte 102,15,56,222,240
.byte 102,15,56,222,248
- movups (%edx),%xmm0
- jnz .L007dec6_loop
+ movups -16(%edx,%ecx,1),%xmm0
+ jnz .L011dec6_loop
.byte 102,15,56,222,209
.byte 102,15,56,222,217
.byte 102,15,56,222,225
@@ -312,14 +372,14 @@ aesni_ecb_encrypt:
movl 32(%esp),%edx
movl 36(%esp),%ebx
andl $-16,%eax
- jz .L008ecb_ret
+ jz .L012ecb_ret
movl 240(%edx),%ecx
testl %ebx,%ebx
- jz .L009ecb_decrypt
+ jz .L013ecb_decrypt
movl %edx,%ebp
movl %ecx,%ebx
cmpl $96,%eax
- jb .L010ecb_enc_tail
+ jb .L014ecb_enc_tail
movdqu (%esi),%xmm2
movdqu 16(%esi),%xmm3
movdqu 32(%esi),%xmm4
@@ -328,9 +388,9 @@ aesni_ecb_encrypt:
movdqu 80(%esi),%xmm7
leal 96(%esi),%esi
subl $96,%eax
- jmp .L011ecb_enc_loop6_enter
+ jmp .L015ecb_enc_loop6_enter
.align 16
-.L012ecb_enc_loop6:
+.L016ecb_enc_loop6:
movups %xmm2,(%edi)
movdqu (%esi),%xmm2
movups %xmm3,16(%edi)
@@ -345,12 +405,12 @@ aesni_ecb_encrypt:
leal 96(%edi),%edi
movdqu 80(%esi),%xmm7
leal 96(%esi),%esi
-.L011ecb_enc_loop6_enter:
+.L015ecb_enc_loop6_enter:
call _aesni_encrypt6
movl %ebp,%edx
movl %ebx,%ecx
subl $96,%eax
- jnc .L012ecb_enc_loop6
+ jnc .L016ecb_enc_loop6
movups %xmm2,(%edi)
movups %xmm3,16(%edi)
movups %xmm4,32(%edi)
@@ -359,18 +419,18 @@ aesni_ecb_encrypt:
movups %xmm7,80(%edi)
leal 96(%edi),%edi
addl $96,%eax
- jz .L008ecb_ret
-.L010ecb_enc_tail:
+ jz .L012ecb_ret
+.L014ecb_enc_tail:
movups (%esi),%xmm2
cmpl $32,%eax
- jb .L013ecb_enc_one
+ jb .L017ecb_enc_one
movups 16(%esi),%xmm3
- je .L014ecb_enc_two
+ je .L018ecb_enc_two
movups 32(%esi),%xmm4
cmpl $64,%eax
- jb .L015ecb_enc_three
+ jb .L019ecb_enc_three
movups 48(%esi),%xmm5
- je .L016ecb_enc_four
+ je .L020ecb_enc_four
movups 64(%esi),%xmm6
xorps %xmm7,%xmm7
call _aesni_encrypt6
@@ -379,50 +439,49 @@ aesni_ecb_encrypt:
movups %xmm4,32(%edi)
movups %xmm5,48(%edi)
movups %xmm6,64(%edi)
- jmp .L008ecb_ret
+ jmp .L012ecb_ret
.align 16
-.L013ecb_enc_one:
+.L017ecb_enc_one:
movups (%edx),%xmm0
movups 16(%edx),%xmm1
leal 32(%edx),%edx
xorps %xmm0,%xmm2
-.L017enc1_loop_3:
+.L021enc1_loop_3:
.byte 102,15,56,220,209
decl %ecx
movups (%edx),%xmm1
leal 16(%edx),%edx
- jnz .L017enc1_loop_3
+ jnz .L021enc1_loop_3
.byte 102,15,56,221,209
movups %xmm2,(%edi)
- jmp .L008ecb_ret
+ jmp .L012ecb_ret
.align 16
-.L014ecb_enc_two:
- xorps %xmm4,%xmm4
- call _aesni_encrypt3
+.L018ecb_enc_two:
+ call _aesni_encrypt2
movups %xmm2,(%edi)
movups %xmm3,16(%edi)
- jmp .L008ecb_ret
+ jmp .L012ecb_ret
.align 16
-.L015ecb_enc_three:
+.L019ecb_enc_three:
call _aesni_encrypt3
movups %xmm2,(%edi)
movups %xmm3,16(%edi)
movups %xmm4,32(%edi)
- jmp .L008ecb_ret
+ jmp .L012ecb_ret
.align 16
-.L016ecb_enc_four:
+.L020ecb_enc_four:
call _aesni_encrypt4
movups %xmm2,(%edi)
movups %xmm3,16(%edi)
movups %xmm4,32(%edi)
movups %xmm5,48(%edi)
- jmp .L008ecb_ret
+ jmp .L012ecb_ret
.align 16
-.L009ecb_decrypt:
+.L013ecb_decrypt:
movl %edx,%ebp
movl %ecx,%ebx
cmpl $96,%eax
- jb .L018ecb_dec_tail
+ jb .L022ecb_dec_tail
movdqu (%esi),%xmm2
movdqu 16(%esi),%xmm3
movdqu 32(%esi),%xmm4
@@ -431,9 +490,9 @@ aesni_ecb_encrypt:
movdqu 80(%esi),%xmm7
leal 96(%esi),%esi
subl $96,%eax
- jmp .L019ecb_dec_loop6_enter
+ jmp .L023ecb_dec_loop6_enter
.align 16
-.L020ecb_dec_loop6:
+.L024ecb_dec_loop6:
movups %xmm2,(%edi)
movdqu (%esi),%xmm2
movups %xmm3,16(%edi)
@@ -448,12 +507,12 @@ aesni_ecb_encrypt:
leal 96(%edi),%edi
movdqu 80(%esi),%xmm7
leal 96(%esi),%esi
-.L019ecb_dec_loop6_enter:
+.L023ecb_dec_loop6_enter:
call _aesni_decrypt6
movl %ebp,%edx
movl %ebx,%ecx
subl $96,%eax
- jnc .L020ecb_dec_loop6
+ jnc .L024ecb_dec_loop6
movups %xmm2,(%edi)
movups %xmm3,16(%edi)
movups %xmm4,32(%edi)
@@ -462,18 +521,18 @@ aesni_ecb_encrypt:
movups %xmm7,80(%edi)
leal 96(%edi),%edi
addl $96,%eax
- jz .L008ecb_ret
-.L018ecb_dec_tail:
+ jz .L012ecb_ret
+.L022ecb_dec_tail:
movups (%esi),%xmm2
cmpl $32,%eax
- jb .L021ecb_dec_one
+ jb .L025ecb_dec_one
movups 16(%esi),%xmm3
- je .L022ecb_dec_two
+ je .L026ecb_dec_two
movups 32(%esi),%xmm4
cmpl $64,%eax
- jb .L023ecb_dec_three
+ jb .L027ecb_dec_three
movups 48(%esi),%xmm5
- je .L024ecb_dec_four
+ je .L028ecb_dec_four
movups 64(%esi),%xmm6
xorps %xmm7,%xmm7
call _aesni_decrypt6
@@ -482,44 +541,51 @@ aesni_ecb_encrypt:
movups %xmm4,32(%edi)
movups %xmm5,48(%edi)
movups %xmm6,64(%edi)
- jmp .L008ecb_ret
+ jmp .L012ecb_ret
.align 16
-.L021ecb_dec_one:
+.L025ecb_dec_one:
movups (%edx),%xmm0
movups 16(%edx),%xmm1
leal 32(%edx),%edx
xorps %xmm0,%xmm2
-.L025dec1_loop_4:
+.L029dec1_loop_4:
.byte 102,15,56,222,209
decl %ecx
movups (%edx),%xmm1
leal 16(%edx),%edx
- jnz .L025dec1_loop_4
+ jnz .L029dec1_loop_4
.byte 102,15,56,223,209
movups %xmm2,(%edi)
- jmp .L008ecb_ret
+ jmp .L012ecb_ret
.align 16
-.L022ecb_dec_two:
- xorps %xmm4,%xmm4
- call _aesni_decrypt3
+.L026ecb_dec_two:
+ call _aesni_decrypt2
movups %xmm2,(%edi)
movups %xmm3,16(%edi)
- jmp .L008ecb_ret
+ jmp .L012ecb_ret
.align 16
-.L023ecb_dec_three:
+.L027ecb_dec_three:
call _aesni_decrypt3
movups %xmm2,(%edi)
movups %xmm3,16(%edi)
movups %xmm4,32(%edi)
- jmp .L008ecb_ret
+ jmp .L012ecb_ret
.align 16
-.L024ecb_dec_four:
+.L028ecb_dec_four:
call _aesni_decrypt4
movups %xmm2,(%edi)
movups %xmm3,16(%edi)
movups %xmm4,32(%edi)
movups %xmm5,48(%edi)
-.L008ecb_ret:
+.L012ecb_ret:
+ pxor %xmm0,%xmm0
+ pxor %xmm1,%xmm1
+ pxor %xmm2,%xmm2
+ pxor %xmm3,%xmm3
+ pxor %xmm4,%xmm4
+ pxor %xmm5,%xmm5
+ pxor %xmm6,%xmm6
+ pxor %xmm7,%xmm7
popl %edi
popl %esi
popl %ebx
@@ -558,48 +624,56 @@ aesni_ccm64_encrypt_blocks:
movl %ebp,20(%esp)
movl %ebp,24(%esp)
movl %ebp,28(%esp)
- shrl $1,%ecx
+ shll $4,%ecx
+ movl $16,%ebx
leal (%edx),%ebp
movdqa (%esp),%xmm5
movdqa %xmm7,%xmm2
- movl %ecx,%ebx
+ leal 32(%edx,%ecx,1),%edx
+ subl %ecx,%ebx
.byte 102,15,56,0,253
-.L026ccm64_enc_outer:
+.L030ccm64_enc_outer:
movups (%ebp),%xmm0
movl %ebx,%ecx
movups (%esi),%xmm6
xorps %xmm0,%xmm2
movups 16(%ebp),%xmm1
xorps %xmm6,%xmm0
- leal 32(%ebp),%edx
xorps %xmm0,%xmm3
- movups (%edx),%xmm0
-.L027ccm64_enc2_loop:
+ movups 32(%ebp),%xmm0
+.L031ccm64_enc2_loop:
.byte 102,15,56,220,209
- decl %ecx
.byte 102,15,56,220,217
- movups 16(%edx),%xmm1
+ movups (%edx,%ecx,1),%xmm1
+ addl $32,%ecx
.byte 102,15,56,220,208
- leal 32(%edx),%edx
.byte 102,15,56,220,216
- movups (%edx),%xmm0
- jnz .L027ccm64_enc2_loop
+ movups -16(%edx,%ecx,1),%xmm0
+ jnz .L031ccm64_enc2_loop
.byte 102,15,56,220,209
.byte 102,15,56,220,217
paddq 16(%esp),%xmm7
+ decl %eax
.byte 102,15,56,221,208
.byte 102,15,56,221,216
- decl %eax
leal 16(%esi),%esi
xorps %xmm2,%xmm6
movdqa %xmm7,%xmm2
movups %xmm6,(%edi)
- leal 16(%edi),%edi
.byte 102,15,56,0,213
- jnz .L026ccm64_enc_outer
+ leal 16(%edi),%edi
+ jnz .L030ccm64_enc_outer
movl 48(%esp),%esp
movl 40(%esp),%edi
movups %xmm3,(%edi)
+ pxor %xmm0,%xmm0
+ pxor %xmm1,%xmm1
+ pxor %xmm2,%xmm2
+ pxor %xmm3,%xmm3
+ pxor %xmm4,%xmm4
+ pxor %xmm5,%xmm5
+ pxor %xmm6,%xmm6
+ pxor %xmm7,%xmm7
popl %edi
popl %esi
popl %ebx
@@ -647,71 +721,82 @@ aesni_ccm64_decrypt_blocks:
movups 16(%edx),%xmm1
leal 32(%edx),%edx
xorps %xmm0,%xmm2
-.L028enc1_loop_5:
+.L032enc1_loop_5:
.byte 102,15,56,220,209
decl %ecx
movups (%edx),%xmm1
leal 16(%edx),%edx
- jnz .L028enc1_loop_5
+ jnz .L032enc1_loop_5
.byte 102,15,56,221,209
+ shll $4,%ebx
+ movl $16,%ecx
movups (%esi),%xmm6
paddq 16(%esp),%xmm7
leal 16(%esi),%esi
- jmp .L029ccm64_dec_outer
+ subl %ebx,%ecx
+ leal 32(%ebp,%ebx,1),%edx
+ movl %ecx,%ebx
+ jmp .L033ccm64_dec_outer
.align 16
-.L029ccm64_dec_outer:
+.L033ccm64_dec_outer:
xorps %xmm2,%xmm6
movdqa %xmm7,%xmm2
- movl %ebx,%ecx
movups %xmm6,(%edi)
leal 16(%edi),%edi
.byte 102,15,56,0,213
subl $1,%eax
- jz .L030ccm64_dec_break
+ jz .L034ccm64_dec_break
movups (%ebp),%xmm0
- shrl $1,%ecx
+ movl %ebx,%ecx
movups 16(%ebp),%xmm1
xorps %xmm0,%xmm6
- leal 32(%ebp),%edx
xorps %xmm0,%xmm2
xorps %xmm6,%xmm3
- movups (%edx),%xmm0
-.L031ccm64_dec2_loop:
+ movups 32(%ebp),%xmm0
+.L035ccm64_dec2_loop:
.byte 102,15,56,220,209
- decl %ecx
.byte 102,15,56,220,217
- movups 16(%edx),%xmm1
+ movups (%edx,%ecx,1),%xmm1
+ addl $32,%ecx
.byte 102,15,56,220,208
- leal 32(%edx),%edx
.byte 102,15,56,220,216
- movups (%edx),%xmm0
- jnz .L031ccm64_dec2_loop
+ movups -16(%edx,%ecx,1),%xmm0
+ jnz .L035ccm64_dec2_loop
movups (%esi),%xmm6
paddq 16(%esp),%xmm7
.byte 102,15,56,220,209
.byte 102,15,56,220,217
- leal 16(%esi),%esi
.byte 102,15,56,221,208
.byte 102,15,56,221,216
- jmp .L029ccm64_dec_outer
+ leal 16(%esi),%esi
+ jmp .L033ccm64_dec_outer
.align 16
-.L030ccm64_dec_break:
+.L034ccm64_dec_break:
+ movl 240(%ebp),%ecx
movl %ebp,%edx
movups (%edx),%xmm0
movups 16(%edx),%xmm1
xorps %xmm0,%xmm6
leal 32(%edx),%edx
xorps %xmm6,%xmm3
-.L032enc1_loop_6:
+.L036enc1_loop_6:
.byte 102,15,56,220,217
decl %ecx
movups (%edx),%xmm1
leal 16(%edx),%edx
- jnz .L032enc1_loop_6
+ jnz .L036enc1_loop_6
.byte 102,15,56,221,217
movl 48(%esp),%esp
movl 40(%esp),%edi
movups %xmm3,(%edi)
+ pxor %xmm0,%xmm0
+ pxor %xmm1,%xmm1
+ pxor %xmm2,%xmm2
+ pxor %xmm3,%xmm3
+ pxor %xmm4,%xmm4
+ pxor %xmm5,%xmm5
+ pxor %xmm6,%xmm6
+ pxor %xmm7,%xmm7
popl %edi
popl %esi
popl %ebx
@@ -737,7 +822,7 @@ aesni_ctr32_encrypt_blocks:
andl $-16,%esp
movl %ebp,80(%esp)
cmpl $1,%eax
- je .L033ctr32_one_shortcut
+ je .L037ctr32_one_shortcut
movdqu (%ebx),%xmm7
movl $202182159,(%esp)
movl $134810123,4(%esp)
@@ -753,63 +838,59 @@ aesni_ctr32_encrypt_blocks:
.byte 102,15,58,34,253,3
movl 240(%edx),%ecx
bswap %ebx
- pxor %xmm1,%xmm1
pxor %xmm0,%xmm0
+ pxor %xmm1,%xmm1
movdqa (%esp),%xmm2
-.byte 102,15,58,34,203,0
+.byte 102,15,58,34,195,0
leal 3(%ebx),%ebp
-.byte 102,15,58,34,197,0
+.byte 102,15,58,34,205,0
incl %ebx
-.byte 102,15,58,34,203,1
+.byte 102,15,58,34,195,1
incl %ebp
-.byte 102,15,58,34,197,1
+.byte 102,15,58,34,205,1
incl %ebx
-.byte 102,15,58,34,203,2
+.byte 102,15,58,34,195,2
incl %ebp
-.byte 102,15,58,34,197,2
- movdqa %xmm1,48(%esp)
-.byte 102,15,56,0,202
- movdqa %xmm0,64(%esp)
+.byte 102,15,58,34,205,2
+ movdqa %xmm0,48(%esp)
.byte 102,15,56,0,194
- pshufd $192,%xmm1,%xmm2
- pshufd $128,%xmm1,%xmm3
+ movdqu (%edx),%xmm6
+ movdqa %xmm1,64(%esp)
+.byte 102,15,56,0,202
+ pshufd $192,%xmm0,%xmm2
+ pshufd $128,%xmm0,%xmm3
cmpl $6,%eax
- jb .L034ctr32_tail
+ jb .L038ctr32_tail
+ pxor %xmm6,%xmm7
+ shll $4,%ecx
+ movl $16,%ebx
movdqa %xmm7,32(%esp)
- shrl $1,%ecx
movl %edx,%ebp
- movl %ecx,%ebx
+ subl %ecx,%ebx
+ leal 32(%edx,%ecx,1),%edx
subl $6,%eax
- jmp .L035ctr32_loop6
-.align 16
-.L035ctr32_loop6:
- pshufd $64,%xmm1,%xmm4
- movdqa 32(%esp),%xmm1
- pshufd $192,%xmm0,%xmm5
- por %xmm1,%xmm2
- pshufd $128,%xmm0,%xmm6
- por %xmm1,%xmm3
- pshufd $64,%xmm0,%xmm7
- por %xmm1,%xmm4
- por %xmm1,%xmm5
- por %xmm1,%xmm6
- por %xmm1,%xmm7
- movups (%ebp),%xmm0
- movups 16(%ebp),%xmm1
- leal 32(%ebp),%edx
- decl %ecx
+ jmp .L039ctr32_loop6
+.align 16
+.L039ctr32_loop6:
+ pshufd $64,%xmm0,%xmm4
+ movdqa 32(%esp),%xmm0
+ pshufd $192,%xmm1,%xmm5
pxor %xmm0,%xmm2
+ pshufd $128,%xmm1,%xmm6
pxor %xmm0,%xmm3
-.byte 102,15,56,220,209
+ pshufd $64,%xmm1,%xmm7
+ movups 16(%ebp),%xmm1
pxor %xmm0,%xmm4
-.byte 102,15,56,220,217
pxor %xmm0,%xmm5
-.byte 102,15,56,220,225
+.byte 102,15,56,220,209
pxor %xmm0,%xmm6
-.byte 102,15,56,220,233
pxor %xmm0,%xmm7
+.byte 102,15,56,220,217
+ movups 32(%ebp),%xmm0
+ movl %ebx,%ecx
+.byte 102,15,56,220,225
+.byte 102,15,56,220,233
.byte 102,15,56,220,241
- movups (%edx),%xmm0
.byte 102,15,56,220,249
call .L_aesni_encrypt6_enter
movups (%esi),%xmm1
@@ -820,51 +901,51 @@ aesni_ctr32_encrypt_blocks:
movups %xmm2,(%edi)
movdqa 16(%esp),%xmm0
xorps %xmm1,%xmm4
- movdqa 48(%esp),%xmm1
+ movdqa 64(%esp),%xmm1
movups %xmm3,16(%edi)
movups %xmm4,32(%edi)
paddd %xmm0,%xmm1
- paddd 64(%esp),%xmm0
+ paddd 48(%esp),%xmm0
movdqa (%esp),%xmm2
movups 48(%esi),%xmm3
movups 64(%esi),%xmm4
xorps %xmm3,%xmm5
movups 80(%esi),%xmm3
leal 96(%esi),%esi
- movdqa %xmm1,48(%esp)
-.byte 102,15,56,0,202
+ movdqa %xmm0,48(%esp)
+.byte 102,15,56,0,194
xorps %xmm4,%xmm6
movups %xmm5,48(%edi)
xorps %xmm3,%xmm7
- movdqa %xmm0,64(%esp)
-.byte 102,15,56,0,194
+ movdqa %xmm1,64(%esp)
+.byte 102,15,56,0,202
movups %xmm6,64(%edi)
- pshufd $192,%xmm1,%xmm2
+ pshufd $192,%xmm0,%xmm2
movups %xmm7,80(%edi)
leal 96(%edi),%edi
- movl %ebx,%ecx
- pshufd $128,%xmm1,%xmm3
+ pshufd $128,%xmm0,%xmm3
subl $6,%eax
- jnc .L035ctr32_loop6
+ jnc .L039ctr32_loop6
addl $6,%eax
- jz .L036ctr32_ret
+ jz .L040ctr32_ret
+ movdqu (%ebp),%xmm7
movl %ebp,%edx
- leal 1(,%ecx,2),%ecx
- movdqa 32(%esp),%xmm7
-.L034ctr32_tail:
+ pxor 32(%esp),%xmm7
+ movl 240(%ebp),%ecx
+.L038ctr32_tail:
por %xmm7,%xmm2
cmpl $2,%eax
- jb .L037ctr32_one
- pshufd $64,%xmm1,%xmm4
+ jb .L041ctr32_one
+ pshufd $64,%xmm0,%xmm4
por %xmm7,%xmm3
- je .L038ctr32_two
- pshufd $192,%xmm0,%xmm5
+ je .L042ctr32_two
+ pshufd $192,%xmm1,%xmm5
por %xmm7,%xmm4
cmpl $4,%eax
- jb .L039ctr32_three
- pshufd $128,%xmm0,%xmm6
+ jb .L043ctr32_three
+ pshufd $128,%xmm1,%xmm6
por %xmm7,%xmm5
- je .L040ctr32_four
+ je .L044ctr32_four
por %xmm7,%xmm6
call _aesni_encrypt6
movups (%esi),%xmm1
@@ -882,39 +963,39 @@ aesni_ctr32_encrypt_blocks:
movups %xmm4,32(%edi)
movups %xmm5,48(%edi)
movups %xmm6,64(%edi)
- jmp .L036ctr32_ret
+ jmp .L040ctr32_ret
.align 16
-.L033ctr32_one_shortcut:
+.L037ctr32_one_shortcut:
movups (%ebx),%xmm2
movl 240(%edx),%ecx
-.L037ctr32_one:
+.L041ctr32_one:
movups (%edx),%xmm0
movups 16(%edx),%xmm1
leal 32(%edx),%edx
xorps %xmm0,%xmm2
-.L041enc1_loop_7:
+.L045enc1_loop_7:
.byte 102,15,56,220,209
decl %ecx
movups (%edx),%xmm1
leal 16(%edx),%edx
- jnz .L041enc1_loop_7
+ jnz .L045enc1_loop_7
.byte 102,15,56,221,209
movups (%esi),%xmm6
xorps %xmm2,%xmm6
movups %xmm6,(%edi)
- jmp .L036ctr32_ret
+ jmp .L040ctr32_ret
.align 16
-.L038ctr32_two:
- call _aesni_encrypt3
+.L042ctr32_two:
+ call _aesni_encrypt2
movups (%esi),%xmm5
movups 16(%esi),%xmm6
xorps %xmm5,%xmm2
xorps %xmm6,%xmm3
movups %xmm2,(%edi)
movups %xmm3,16(%edi)
- jmp .L036ctr32_ret
+ jmp .L040ctr32_ret
.align 16
-.L039ctr32_three:
+.L043ctr32_three:
call _aesni_encrypt3
movups (%esi),%xmm5
movups 16(%esi),%xmm6
@@ -925,9 +1006,9 @@ aesni_ctr32_encrypt_blocks:
xorps %xmm7,%xmm4
movups %xmm3,16(%edi)
movups %xmm4,32(%edi)
- jmp .L036ctr32_ret
+ jmp .L040ctr32_ret
.align 16
-.L040ctr32_four:
+.L044ctr32_four:
call _aesni_encrypt4
movups (%esi),%xmm6
movups 16(%esi),%xmm7
@@ -941,7 +1022,18 @@ aesni_ctr32_encrypt_blocks:
xorps %xmm0,%xmm5
movups %xmm4,32(%edi)
movups %xmm5,48(%edi)
-.L036ctr32_ret:
+.L040ctr32_ret:
+ pxor %xmm0,%xmm0
+ pxor %xmm1,%xmm1
+ pxor %xmm2,%xmm2
+ pxor %xmm3,%xmm3
+ pxor %xmm4,%xmm4
+ movdqa %xmm0,32(%esp)
+ pxor %xmm5,%xmm5
+ movdqa %xmm0,48(%esp)
+ pxor %xmm6,%xmm6
+ movdqa %xmm0,64(%esp)
+ pxor %xmm7,%xmm7
movl 80(%esp),%esp
popl %edi
popl %esi
@@ -966,12 +1058,12 @@ aesni_xts_encrypt:
movups 16(%edx),%xmm1
leal 32(%edx),%edx
xorps %xmm0,%xmm2
-.L042enc1_loop_8:
+.L046enc1_loop_8:
.byte 102,15,56,220,209
decl %ecx
movups (%edx),%xmm1
leal 16(%edx),%edx
- jnz .L042enc1_loop_8
+ jnz .L046enc1_loop_8
.byte 102,15,56,221,209
movl 20(%esp),%esi
movl 24(%esp),%edi
@@ -995,12 +1087,14 @@ aesni_xts_encrypt:
movl %edx,%ebp
movl %ecx,%ebx
subl $96,%eax
- jc .L043xts_enc_short
- shrl $1,%ecx
- movl %ecx,%ebx
- jmp .L044xts_enc_loop6
+ jc .L047xts_enc_short
+ shll $4,%ecx
+ movl $16,%ebx
+ subl %ecx,%ebx
+ leal 32(%edx,%ecx,1),%edx
+ jmp .L048xts_enc_loop6
.align 16
-.L044xts_enc_loop6:
+.L048xts_enc_loop6:
pshufd $19,%xmm0,%xmm2
pxor %xmm0,%xmm0
movdqa %xmm1,(%esp)
@@ -1036,6 +1130,7 @@ aesni_xts_encrypt:
pand %xmm3,%xmm7
movups (%esi),%xmm2
pxor %xmm1,%xmm7
+ movl %ebx,%ecx
movdqu 16(%esi),%xmm3
xorps %xmm0,%xmm2
movdqu 32(%esi),%xmm4
@@ -1051,19 +1146,17 @@ aesni_xts_encrypt:
movdqa %xmm7,80(%esp)
pxor %xmm1,%xmm7
movups 16(%ebp),%xmm1
- leal 32(%ebp),%edx
pxor 16(%esp),%xmm3
-.byte 102,15,56,220,209
pxor 32(%esp),%xmm4
-.byte 102,15,56,220,217
+.byte 102,15,56,220,209
pxor 48(%esp),%xmm5
- decl %ecx
-.byte 102,15,56,220,225
pxor 64(%esp),%xmm6
-.byte 102,15,56,220,233
+.byte 102,15,56,220,217
pxor %xmm0,%xmm7
+ movups 32(%ebp),%xmm0
+.byte 102,15,56,220,225
+.byte 102,15,56,220,233
.byte 102,15,56,220,241
- movups (%edx),%xmm0
.byte 102,15,56,220,249
call .L_aesni_encrypt6_enter
movdqa 80(%esp),%xmm1
@@ -1088,26 +1181,25 @@ aesni_xts_encrypt:
paddq %xmm1,%xmm1
pand %xmm3,%xmm2
pcmpgtd %xmm1,%xmm0
- movl %ebx,%ecx
pxor %xmm2,%xmm1
subl $96,%eax
- jnc .L044xts_enc_loop6
- leal 1(,%ecx,2),%ecx
+ jnc .L048xts_enc_loop6
+ movl 240(%ebp),%ecx
movl %ebp,%edx
movl %ecx,%ebx
-.L043xts_enc_short:
+.L047xts_enc_short:
addl $96,%eax
- jz .L045xts_enc_done6x
+ jz .L049xts_enc_done6x
movdqa %xmm1,%xmm5
cmpl $32,%eax
- jb .L046xts_enc_one
+ jb .L050xts_enc_one
pshufd $19,%xmm0,%xmm2
pxor %xmm0,%xmm0
paddq %xmm1,%xmm1
pand %xmm3,%xmm2
pcmpgtd %xmm1,%xmm0
pxor %xmm2,%xmm1
- je .L047xts_enc_two
+ je .L051xts_enc_two
pshufd $19,%xmm0,%xmm2
pxor %xmm0,%xmm0
movdqa %xmm1,%xmm6
@@ -1116,7 +1208,7 @@ aesni_xts_encrypt:
pcmpgtd %xmm1,%xmm0
pxor %xmm2,%xmm1
cmpl $64,%eax
- jb .L048xts_enc_three
+ jb .L052xts_enc_three
pshufd $19,%xmm0,%xmm2
pxor %xmm0,%xmm0
movdqa %xmm1,%xmm7
@@ -1126,7 +1218,7 @@ aesni_xts_encrypt:
pxor %xmm2,%xmm1
movdqa %xmm5,(%esp)
movdqa %xmm6,16(%esp)
- je .L049xts_enc_four
+ je .L053xts_enc_four
movdqa %xmm7,32(%esp)
pshufd $19,%xmm0,%xmm7
movdqa %xmm1,48(%esp)
@@ -1158,9 +1250,9 @@ aesni_xts_encrypt:
movups %xmm5,48(%edi)
movups %xmm6,64(%edi)
leal 80(%edi),%edi
- jmp .L050xts_enc_done
+ jmp .L054xts_enc_done
.align 16
-.L046xts_enc_one:
+.L050xts_enc_one:
movups (%esi),%xmm2
leal 16(%esi),%esi
xorps %xmm5,%xmm2
@@ -1168,37 +1260,36 @@ aesni_xts_encrypt:
movups 16(%edx),%xmm1
leal 32(%edx),%edx
xorps %xmm0,%xmm2
-.L051enc1_loop_9:
+.L055enc1_loop_9:
.byte 102,15,56,220,209
decl %ecx
movups (%edx),%xmm1
leal 16(%edx),%edx
- jnz .L051enc1_loop_9
+ jnz .L055enc1_loop_9
.byte 102,15,56,221,209
xorps %xmm5,%xmm2
movups %xmm2,(%edi)
leal 16(%edi),%edi
movdqa %xmm5,%xmm1
- jmp .L050xts_enc_done
+ jmp .L054xts_enc_done
.align 16
-.L047xts_enc_two:
+.L051xts_enc_two:
movaps %xmm1,%xmm6
movups (%esi),%xmm2
movups 16(%esi),%xmm3
leal 32(%esi),%esi
xorps %xmm5,%xmm2
xorps %xmm6,%xmm3
- xorps %xmm4,%xmm4
- call _aesni_encrypt3
+ call _aesni_encrypt2
xorps %xmm5,%xmm2
xorps %xmm6,%xmm3
movups %xmm2,(%edi)
movups %xmm3,16(%edi)
leal 32(%edi),%edi
movdqa %xmm6,%xmm1
- jmp .L050xts_enc_done
+ jmp .L054xts_enc_done
.align 16
-.L048xts_enc_three:
+.L052xts_enc_three:
movaps %xmm1,%xmm7
movups (%esi),%xmm2
movups 16(%esi),%xmm3
@@ -1216,9 +1307,9 @@ aesni_xts_encrypt:
movups %xmm4,32(%edi)
leal 48(%edi),%edi
movdqa %xmm7,%xmm1
- jmp .L050xts_enc_done
+ jmp .L054xts_enc_done
.align 16
-.L049xts_enc_four:
+.L053xts_enc_four:
movaps %xmm1,%xmm6
movups (%esi),%xmm2
movups 16(%esi),%xmm3
@@ -1240,28 +1331,28 @@ aesni_xts_encrypt:
movups %xmm5,48(%edi)
leal 64(%edi),%edi
movdqa %xmm6,%xmm1
- jmp .L050xts_enc_done
+ jmp .L054xts_enc_done
.align 16
-.L045xts_enc_done6x:
+.L049xts_enc_done6x:
movl 112(%esp),%eax
andl $15,%eax
- jz .L052xts_enc_ret
+ jz .L056xts_enc_ret
movdqa %xmm1,%xmm5
movl %eax,112(%esp)
- jmp .L053xts_enc_steal
+ jmp .L057xts_enc_steal
.align 16
-.L050xts_enc_done:
+.L054xts_enc_done:
movl 112(%esp),%eax
pxor %xmm0,%xmm0
andl $15,%eax
- jz .L052xts_enc_ret
+ jz .L056xts_enc_ret
pcmpgtd %xmm1,%xmm0
movl %eax,112(%esp)
pshufd $19,%xmm0,%xmm5
paddq %xmm1,%xmm1
pand 96(%esp),%xmm5
pxor %xmm1,%xmm5
-.L053xts_enc_steal:
+.L057xts_enc_steal:
movzbl (%esi),%ecx
movzbl -16(%edi),%edx
leal 1(%esi),%esi
@@ -1269,7 +1360,7 @@ aesni_xts_encrypt:
movb %dl,(%edi)
leal 1(%edi),%edi
subl $1,%eax
- jnz .L053xts_enc_steal
+ jnz .L057xts_enc_steal
subl 112(%esp),%edi
movl %ebp,%edx
movl %ebx,%ecx
@@ -1279,16 +1370,30 @@ aesni_xts_encrypt:
movups 16(%edx),%xmm1
leal 32(%edx),%edx
xorps %xmm0,%xmm2
-.L054enc1_loop_10:
+.L058enc1_loop_10:
.byte 102,15,56,220,209
decl %ecx
movups (%edx),%xmm1
leal 16(%edx),%edx
- jnz .L054enc1_loop_10
+ jnz .L058enc1_loop_10
.byte 102,15,56,221,209
xorps %xmm5,%xmm2
movups %xmm2,-16(%edi)
-.L052xts_enc_ret:
+.L056xts_enc_ret:
+ pxor %xmm0,%xmm0
+ pxor %xmm1,%xmm1
+ pxor %xmm2,%xmm2
+ movdqa %xmm0,(%esp)
+ pxor %xmm3,%xmm3
+ movdqa %xmm0,16(%esp)
+ pxor %xmm4,%xmm4
+ movdqa %xmm0,32(%esp)
+ pxor %xmm5,%xmm5
+ movdqa %xmm0,48(%esp)
+ pxor %xmm6,%xmm6
+ movdqa %xmm0,64(%esp)
+ pxor %xmm7,%xmm7
+ movdqa %xmm0,80(%esp)
movl 116(%esp),%esp
popl %edi
popl %esi
@@ -1313,12 +1418,12 @@ aesni_xts_decrypt:
movups 16(%edx),%xmm1
leal 32(%edx),%edx
xorps %xmm0,%xmm2
-.L055enc1_loop_11:
+.L059enc1_loop_11:
.byte 102,15,56,220,209
decl %ecx
movups (%edx),%xmm1
leal 16(%edx),%edx
- jnz .L055enc1_loop_11
+ jnz .L059enc1_loop_11
.byte 102,15,56,221,209
movl 20(%esp),%esi
movl 24(%esp),%edi
@@ -1347,12 +1452,14 @@ aesni_xts_decrypt:
pcmpgtd %xmm1,%xmm0
andl $-16,%eax
subl $96,%eax
- jc .L056xts_dec_short
- shrl $1,%ecx
- movl %ecx,%ebx
- jmp .L057xts_dec_loop6
+ jc .L060xts_dec_short
+ shll $4,%ecx
+ movl $16,%ebx
+ subl %ecx,%ebx
+ leal 32(%edx,%ecx,1),%edx
+ jmp .L061xts_dec_loop6
.align 16
-.L057xts_dec_loop6:
+.L061xts_dec_loop6:
pshufd $19,%xmm0,%xmm2
pxor %xmm0,%xmm0
movdqa %xmm1,(%esp)
@@ -1388,6 +1495,7 @@ aesni_xts_decrypt:
pand %xmm3,%xmm7
movups (%esi),%xmm2
pxor %xmm1,%xmm7
+ movl %ebx,%ecx
movdqu 16(%esi),%xmm3
xorps %xmm0,%xmm2
movdqu 32(%esi),%xmm4
@@ -1403,19 +1511,17 @@ aesni_xts_decrypt:
movdqa %xmm7,80(%esp)
pxor %xmm1,%xmm7
movups 16(%ebp),%xmm1
- leal 32(%ebp),%edx
pxor 16(%esp),%xmm3
-.byte 102,15,56,222,209
pxor 32(%esp),%xmm4
-.byte 102,15,56,222,217
+.byte 102,15,56,222,209
pxor 48(%esp),%xmm5
- decl %ecx
-.byte 102,15,56,222,225
pxor 64(%esp),%xmm6
-.byte 102,15,56,222,233
+.byte 102,15,56,222,217
pxor %xmm0,%xmm7
+ movups 32(%ebp),%xmm0
+.byte 102,15,56,222,225
+.byte 102,15,56,222,233
.byte 102,15,56,222,241
- movups (%edx),%xmm0
.byte 102,15,56,222,249
call .L_aesni_decrypt6_enter
movdqa 80(%esp),%xmm1
@@ -1440,26 +1546,25 @@ aesni_xts_decrypt:
paddq %xmm1,%xmm1
pand %xmm3,%xmm2
pcmpgtd %xmm1,%xmm0
- movl %ebx,%ecx
pxor %xmm2,%xmm1
subl $96,%eax
- jnc .L057xts_dec_loop6
- leal 1(,%ecx,2),%ecx
+ jnc .L061xts_dec_loop6
+ movl 240(%ebp),%ecx
movl %ebp,%edx
movl %ecx,%ebx
-.L056xts_dec_short:
+.L060xts_dec_short:
addl $96,%eax
- jz .L058xts_dec_done6x
+ jz .L062xts_dec_done6x
movdqa %xmm1,%xmm5
cmpl $32,%eax
- jb .L059xts_dec_one
+ jb .L063xts_dec_one
pshufd $19,%xmm0,%xmm2
pxor %xmm0,%xmm0
paddq %xmm1,%xmm1
pand %xmm3,%xmm2
pcmpgtd %xmm1,%xmm0
pxor %xmm2,%xmm1
- je .L060xts_dec_two
+ je .L064xts_dec_two
pshufd $19,%xmm0,%xmm2
pxor %xmm0,%xmm0
movdqa %xmm1,%xmm6
@@ -1468,7 +1573,7 @@ aesni_xts_decrypt:
pcmpgtd %xmm1,%xmm0
pxor %xmm2,%xmm1
cmpl $64,%eax
- jb .L061xts_dec_three
+ jb .L065xts_dec_three
pshufd $19,%xmm0,%xmm2
pxor %xmm0,%xmm0
movdqa %xmm1,%xmm7
@@ -1478,7 +1583,7 @@ aesni_xts_decrypt:
pxor %xmm2,%xmm1
movdqa %xmm5,(%esp)
movdqa %xmm6,16(%esp)
- je .L062xts_dec_four
+ je .L066xts_dec_four
movdqa %xmm7,32(%esp)
pshufd $19,%xmm0,%xmm7
movdqa %xmm1,48(%esp)
@@ -1510,9 +1615,9 @@ aesni_xts_decrypt:
movups %xmm5,48(%edi)
movups %xmm6,64(%edi)
leal 80(%edi),%edi
- jmp .L063xts_dec_done
+ jmp .L067xts_dec_done
.align 16
-.L059xts_dec_one:
+.L063xts_dec_one:
movups (%esi),%xmm2
leal 16(%esi),%esi
xorps %xmm5,%xmm2
@@ -1520,36 +1625,36 @@ aesni_xts_decrypt:
movups 16(%edx),%xmm1
leal 32(%edx),%edx
xorps %xmm0,%xmm2
-.L064dec1_loop_12:
+.L068dec1_loop_12:
.byte 102,15,56,222,209
decl %ecx
movups (%edx),%xmm1
leal 16(%edx),%edx
- jnz .L064dec1_loop_12
+ jnz .L068dec1_loop_12
.byte 102,15,56,223,209
xorps %xmm5,%xmm2
movups %xmm2,(%edi)
leal 16(%edi),%edi
movdqa %xmm5,%xmm1
- jmp .L063xts_dec_done
+ jmp .L067xts_dec_done
.align 16
-.L060xts_dec_two:
+.L064xts_dec_two:
movaps %xmm1,%xmm6
movups (%esi),%xmm2
movups 16(%esi),%xmm3
leal 32(%esi),%esi
xorps %xmm5,%xmm2
xorps %xmm6,%xmm3
- call _aesni_decrypt3
+ call _aesni_decrypt2
xorps %xmm5,%xmm2
xorps %xmm6,%xmm3
movups %xmm2,(%edi)
movups %xmm3,16(%edi)
leal 32(%edi),%edi
movdqa %xmm6,%xmm1
- jmp .L063xts_dec_done
+ jmp .L067xts_dec_done
.align 16
-.L061xts_dec_three:
+.L065xts_dec_three:
movaps %xmm1,%xmm7
movups (%esi),%xmm2
movups 16(%esi),%xmm3
@@ -1567,9 +1672,9 @@ aesni_xts_decrypt:
movups %xmm4,32(%edi)
leal 48(%edi),%edi
movdqa %xmm7,%xmm1
- jmp .L063xts_dec_done
+ jmp .L067xts_dec_done
.align 16
-.L062xts_dec_four:
+.L066xts_dec_four:
movaps %xmm1,%xmm6
movups (%esi),%xmm2
movups 16(%esi),%xmm3
@@ -1591,20 +1696,20 @@ aesni_xts_decrypt:
movups %xmm5,48(%edi)
leal 64(%edi),%edi
movdqa %xmm6,%xmm1
- jmp .L063xts_dec_done
+ jmp .L067xts_dec_done
.align 16
-.L058xts_dec_done6x:
+.L062xts_dec_done6x:
movl 112(%esp),%eax
andl $15,%eax
- jz .L065xts_dec_ret
+ jz .L069xts_dec_ret
movl %eax,112(%esp)
- jmp .L066xts_dec_only_one_more
+ jmp .L070xts_dec_only_one_more
.align 16
-.L063xts_dec_done:
+.L067xts_dec_done:
movl 112(%esp),%eax
pxor %xmm0,%xmm0
andl $15,%eax
- jz .L065xts_dec_ret
+ jz .L069xts_dec_ret
pcmpgtd %xmm1,%xmm0
movl %eax,112(%esp)
pshufd $19,%xmm0,%xmm2
@@ -1614,7 +1719,7 @@ aesni_xts_decrypt:
pand %xmm3,%xmm2
pcmpgtd %xmm1,%xmm0
pxor %xmm2,%xmm1
-.L066xts_dec_only_one_more:
+.L070xts_dec_only_one_more:
pshufd $19,%xmm0,%xmm5
movdqa %xmm1,%xmm6
paddq %xmm1,%xmm1
@@ -1628,16 +1733,16 @@ aesni_xts_decrypt:
movups 16(%edx),%xmm1
leal 32(%edx),%edx
xorps %xmm0,%xmm2
-.L067dec1_loop_13:
+.L071dec1_loop_13:
.byte 102,15,56,222,209
decl %ecx
movups (%edx),%xmm1
leal 16(%edx),%edx
- jnz .L067dec1_loop_13
+ jnz .L071dec1_loop_13
.byte 102,15,56,223,209
xorps %xmm5,%xmm2
movups %xmm2,(%edi)
-.L068xts_dec_steal:
+.L072xts_dec_steal:
movzbl 16(%esi),%ecx
movzbl (%edi),%edx
leal 1(%esi),%esi
@@ -1645,7 +1750,7 @@ aesni_xts_decrypt:
movb %dl,16(%edi)
leal 1(%edi),%edi
subl $1,%eax
- jnz .L068xts_dec_steal
+ jnz .L072xts_dec_steal
subl 112(%esp),%edi
movl %ebp,%edx
movl %ebx,%ecx
@@ -1655,16 +1760,30 @@ aesni_xts_decrypt:
movups 16(%edx),%xmm1
leal 32(%edx),%edx
xorps %xmm0,%xmm2
-.L069dec1_loop_14:
+.L073dec1_loop_14:
.byte 102,15,56,222,209
decl %ecx
movups (%edx),%xmm1
leal 16(%edx),%edx
- jnz .L069dec1_loop_14
+ jnz .L073dec1_loop_14
.byte 102,15,56,223,209
xorps %xmm6,%xmm2
movups %xmm2,(%edi)
-.L065xts_dec_ret:
+.L069xts_dec_ret:
+ pxor %xmm0,%xmm0
+ pxor %xmm1,%xmm1
+ pxor %xmm2,%xmm2
+ movdqa %xmm0,(%esp)
+ pxor %xmm3,%xmm3
+ movdqa %xmm0,16(%esp)
+ pxor %xmm4,%xmm4
+ movdqa %xmm0,32(%esp)
+ pxor %xmm5,%xmm5
+ movdqa %xmm0,48(%esp)
+ pxor %xmm6,%xmm6
+ movdqa %xmm0,64(%esp)
+ pxor %xmm7,%xmm7
+ movdqa %xmm0,80(%esp)
movl 116(%esp),%esp
popl %edi
popl %esi
@@ -1690,7 +1809,7 @@ aesni_cbc_encrypt:
movl 32(%esp),%edx
movl 36(%esp),%ebp
testl %eax,%eax
- jz .L070cbc_abort
+ jz .L074cbc_abort
cmpl $0,40(%esp)
xchgl %esp,%ebx
movups (%ebp),%xmm7
@@ -1698,14 +1817,14 @@ aesni_cbc_encrypt:
movl %edx,%ebp
movl %ebx,16(%esp)
movl %ecx,%ebx
- je .L071cbc_decrypt
+ je .L075cbc_decrypt
movaps %xmm7,%xmm2
cmpl $16,%eax
- jb .L072cbc_enc_tail
+ jb .L076cbc_enc_tail
subl $16,%eax
- jmp .L073cbc_enc_loop
+ jmp .L077cbc_enc_loop
.align 16
-.L073cbc_enc_loop:
+.L077cbc_enc_loop:
movups (%esi),%xmm7
leal 16(%esi),%esi
movups (%edx),%xmm0
@@ -1713,24 +1832,25 @@ aesni_cbc_encrypt:
xorps %xmm0,%xmm7
leal 32(%edx),%edx
xorps %xmm7,%xmm2
-.L074enc1_loop_15:
+.L078enc1_loop_15:
.byte 102,15,56,220,209
decl %ecx
movups (%edx),%xmm1
leal 16(%edx),%edx
- jnz .L074enc1_loop_15
+ jnz .L078enc1_loop_15
.byte 102,15,56,221,209
movl %ebx,%ecx
movl %ebp,%edx
movups %xmm2,(%edi)
leal 16(%edi),%edi
subl $16,%eax
- jnc .L073cbc_enc_loop
+ jnc .L077cbc_enc_loop
addl $16,%eax
- jnz .L072cbc_enc_tail
+ jnz .L076cbc_enc_tail
movaps %xmm2,%xmm7
- jmp .L075cbc_ret
-.L072cbc_enc_tail:
+ pxor %xmm2,%xmm2
+ jmp .L079cbc_ret
+.L076cbc_enc_tail:
movl %eax,%ecx
.long 2767451785
movl $16,%ecx
@@ -1741,20 +1861,20 @@ aesni_cbc_encrypt:
movl %ebx,%ecx
movl %edi,%esi
movl %ebp,%edx
- jmp .L073cbc_enc_loop
+ jmp .L077cbc_enc_loop
.align 16
-.L071cbc_decrypt:
+.L075cbc_decrypt:
cmpl $80,%eax
- jbe .L076cbc_dec_tail
+ jbe .L080cbc_dec_tail
movaps %xmm7,(%esp)
subl $80,%eax
- jmp .L077cbc_dec_loop6_enter
+ jmp .L081cbc_dec_loop6_enter
.align 16
-.L078cbc_dec_loop6:
+.L082cbc_dec_loop6:
movaps %xmm0,(%esp)
movups %xmm7,(%edi)
leal 16(%edi),%edi
-.L077cbc_dec_loop6_enter:
+.L081cbc_dec_loop6_enter:
movdqu (%esi),%xmm2
movdqu 16(%esi),%xmm3
movdqu 32(%esi),%xmm4
@@ -1784,28 +1904,28 @@ aesni_cbc_encrypt:
movups %xmm6,64(%edi)
leal 80(%edi),%edi
subl $96,%eax
- ja .L078cbc_dec_loop6
+ ja .L082cbc_dec_loop6
movaps %xmm7,%xmm2
movaps %xmm0,%xmm7
addl $80,%eax
- jle .L079cbc_dec_tail_collected
+ jle .L083cbc_dec_clear_tail_collected
movups %xmm2,(%edi)
leal 16(%edi),%edi
-.L076cbc_dec_tail:
+.L080cbc_dec_tail:
movups (%esi),%xmm2
movaps %xmm2,%xmm6
cmpl $16,%eax
- jbe .L080cbc_dec_one
+ jbe .L084cbc_dec_one
movups 16(%esi),%xmm3
movaps %xmm3,%xmm5
cmpl $32,%eax
- jbe .L081cbc_dec_two
+ jbe .L085cbc_dec_two
movups 32(%esi),%xmm4
cmpl $48,%eax
- jbe .L082cbc_dec_three
+ jbe .L086cbc_dec_three
movups 48(%esi),%xmm5
cmpl $64,%eax
- jbe .L083cbc_dec_four
+ jbe .L087cbc_dec_four
movups 64(%esi),%xmm6
movaps %xmm7,(%esp)
movups (%esi),%xmm2
@@ -1823,56 +1943,62 @@ aesni_cbc_encrypt:
xorps %xmm0,%xmm6
movups %xmm2,(%edi)
movups %xmm3,16(%edi)
+ pxor %xmm3,%xmm3
movups %xmm4,32(%edi)
+ pxor %xmm4,%xmm4
movups %xmm5,48(%edi)
+ pxor %xmm5,%xmm5
leal 64(%edi),%edi
movaps %xmm6,%xmm2
+ pxor %xmm6,%xmm6
subl $80,%eax
- jmp .L079cbc_dec_tail_collected
+ jmp .L088cbc_dec_tail_collected
.align 16
-.L080cbc_dec_one:
+.L084cbc_dec_one:
movups (%edx),%xmm0
movups 16(%edx),%xmm1
leal 32(%edx),%edx
xorps %xmm0,%xmm2
-.L084dec1_loop_16:
+.L089dec1_loop_16:
.byte 102,15,56,222,209
decl %ecx
movups (%edx),%xmm1
leal 16(%edx),%edx
- jnz .L084dec1_loop_16
+ jnz .L089dec1_loop_16
.byte 102,15,56,223,209
xorps %xmm7,%xmm2
movaps %xmm6,%xmm7
subl $16,%eax
- jmp .L079cbc_dec_tail_collected
+ jmp .L088cbc_dec_tail_collected
.align 16
-.L081cbc_dec_two:
- xorps %xmm4,%xmm4
- call _aesni_decrypt3
+.L085cbc_dec_two:
+ call _aesni_decrypt2
xorps %xmm7,%xmm2
xorps %xmm6,%xmm3
movups %xmm2,(%edi)
movaps %xmm3,%xmm2
+ pxor %xmm3,%xmm3
leal 16(%edi),%edi
movaps %xmm5,%xmm7
subl $32,%eax
- jmp .L079cbc_dec_tail_collected
+ jmp .L088cbc_dec_tail_collected
.align 16
-.L082cbc_dec_three:
+.L086cbc_dec_three:
call _aesni_decrypt3
xorps %xmm7,%xmm2
xorps %xmm6,%xmm3
xorps %xmm5,%xmm4
movups %xmm2,(%edi)
movaps %xmm4,%xmm2
+ pxor %xmm4,%xmm4
movups %xmm3,16(%edi)
+ pxor %xmm3,%xmm3
leal 32(%edi),%edi
movups 32(%esi),%xmm7
subl $48,%eax
- jmp .L079cbc_dec_tail_collected
+ jmp .L088cbc_dec_tail_collected
.align 16
-.L083cbc_dec_four:
+.L087cbc_dec_four:
call _aesni_decrypt4
movups 16(%esi),%xmm1
movups 32(%esi),%xmm0
@@ -1882,28 +2008,44 @@ aesni_cbc_encrypt:
movups %xmm2,(%edi)
xorps %xmm1,%xmm4
movups %xmm3,16(%edi)
+ pxor %xmm3,%xmm3
xorps %xmm0,%xmm5
movups %xmm4,32(%edi)
+ pxor %xmm4,%xmm4
leal 48(%edi),%edi
movaps %xmm5,%xmm2
+ pxor %xmm5,%xmm5
subl $64,%eax
-.L079cbc_dec_tail_collected:
+ jmp .L088cbc_dec_tail_collected
+.align 16
+.L083cbc_dec_clear_tail_collected:
+ pxor %xmm3,%xmm3
+ pxor %xmm4,%xmm4
+ pxor %xmm5,%xmm5
+ pxor %xmm6,%xmm6
+.L088cbc_dec_tail_collected:
andl $15,%eax
- jnz .L085cbc_dec_tail_partial
+ jnz .L090cbc_dec_tail_partial
movups %xmm2,(%edi)
- jmp .L075cbc_ret
+ pxor %xmm0,%xmm0
+ jmp .L079cbc_ret
.align 16
-.L085cbc_dec_tail_partial:
+.L090cbc_dec_tail_partial:
movaps %xmm2,(%esp)
+ pxor %xmm0,%xmm0
movl $16,%ecx
movl %esp,%esi
subl %eax,%ecx
.long 2767451785
-.L075cbc_ret:
+ movdqa %xmm2,(%esp)
+.L079cbc_ret:
movl 16(%esp),%esp
movl 36(%esp),%ebp
+ pxor %xmm2,%xmm2
+ pxor %xmm1,%xmm1
movups %xmm7,(%ebp)
-.L070cbc_abort:
+ pxor %xmm7,%xmm7
+.L074cbc_abort:
popl %edi
popl %esi
popl %ebx
@@ -1913,52 +2055,62 @@ aesni_cbc_encrypt:
.type _aesni_set_encrypt_key,@function
.align 16
_aesni_set_encrypt_key:
+ pushl %ebp
+ pushl %ebx
testl %eax,%eax
- jz .L086bad_pointer
+ jz .L091bad_pointer
testl %edx,%edx
- jz .L086bad_pointer
+ jz .L091bad_pointer
+ call .L092pic
+.L092pic:
+ popl %ebx
+ leal .Lkey_const-.L092pic(%ebx),%ebx
+ leal OPENSSL_ia32cap_P,%ebp
movups (%eax),%xmm0
xorps %xmm4,%xmm4
+ movl 4(%ebp),%ebp
leal 16(%edx),%edx
+ andl $268437504,%ebp
cmpl $256,%ecx
- je .L08714rounds
+ je .L09314rounds
cmpl $192,%ecx
- je .L08812rounds
+ je .L09412rounds
cmpl $128,%ecx
- jne .L089bad_keybits
+ jne .L095bad_keybits
.align 16
-.L09010rounds:
+.L09610rounds:
+ cmpl $268435456,%ebp
+ je .L09710rounds_alt
movl $9,%ecx
movups %xmm0,-16(%edx)
.byte 102,15,58,223,200,1
- call .L091key_128_cold
+ call .L098key_128_cold
.byte 102,15,58,223,200,2
- call .L092key_128
+ call .L099key_128
.byte 102,15,58,223,200,4
- call .L092key_128
+ call .L099key_128
.byte 102,15,58,223,200,8
- call .L092key_128
+ call .L099key_128
.byte 102,15,58,223,200,16
- call .L092key_128
+ call .L099key_128
.byte 102,15,58,223,200,32
- call .L092key_128
+ call .L099key_128
.byte 102,15,58,223,200,64
- call .L092key_128
+ call .L099key_128
.byte 102,15,58,223,200,128
- call .L092key_128
+ call .L099key_128
.byte 102,15,58,223,200,27
- call .L092key_128
+ call .L099key_128
.byte 102,15,58,223,200,54
- call .L092key_128
+ call .L099key_128
movups %xmm0,(%edx)
movl %ecx,80(%edx)
- xorl %eax,%eax
- ret
+ jmp .L100good_key
.align 16
-.L092key_128:
+.L099key_128:
movups %xmm0,(%edx)
leal 16(%edx),%edx
-.L091key_128_cold:
+.L098key_128_cold:
shufps $16,%xmm0,%xmm4
xorps %xmm4,%xmm0
shufps $140,%xmm0,%xmm4
@@ -1967,38 +2119,91 @@ _aesni_set_encrypt_key:
xorps %xmm1,%xmm0
ret
.align 16
-.L08812rounds:
+.L09710rounds_alt:
+ movdqa (%ebx),%xmm5
+ movl $8,%ecx
+ movdqa 32(%ebx),%xmm4
+ movdqa %xmm0,%xmm2
+ movdqu %xmm0,-16(%edx)
+.L101loop_key128:
+.byte 102,15,56,0,197
+.byte 102,15,56,221,196
+ pslld $1,%xmm4
+ leal 16(%edx),%edx
+ movdqa %xmm2,%xmm3
+ pslldq $4,%xmm2
+ pxor %xmm2,%xmm3
+ pslldq $4,%xmm2
+ pxor %xmm2,%xmm3
+ pslldq $4,%xmm2
+ pxor %xmm3,%xmm2
+ pxor %xmm2,%xmm0
+ movdqu %xmm0,-16(%edx)
+ movdqa %xmm0,%xmm2
+ decl %ecx
+ jnz .L101loop_key128
+ movdqa 48(%ebx),%xmm4
+.byte 102,15,56,0,197
+.byte 102,15,56,221,196
+ pslld $1,%xmm4
+ movdqa %xmm2,%xmm3
+ pslldq $4,%xmm2
+ pxor %xmm2,%xmm3
+ pslldq $4,%xmm2
+ pxor %xmm2,%xmm3
+ pslldq $4,%xmm2
+ pxor %xmm3,%xmm2
+ pxor %xmm2,%xmm0
+ movdqu %xmm0,(%edx)
+ movdqa %xmm0,%xmm2
+.byte 102,15,56,0,197
+.byte 102,15,56,221,196
+ movdqa %xmm2,%xmm3
+ pslldq $4,%xmm2
+ pxor %xmm2,%xmm3
+ pslldq $4,%xmm2
+ pxor %xmm2,%xmm3
+ pslldq $4,%xmm2
+ pxor %xmm3,%xmm2
+ pxor %xmm2,%xmm0
+ movdqu %xmm0,16(%edx)
+ movl $9,%ecx
+ movl %ecx,96(%edx)
+ jmp .L100good_key
+.align 16
+.L09412rounds:
movq 16(%eax),%xmm2
+ cmpl $268435456,%ebp
+ je .L10212rounds_alt
movl $11,%ecx
movups %xmm0,-16(%edx)
.byte 102,15,58,223,202,1
- call .L093key_192a_cold
+ call .L103key_192a_cold
.byte 102,15,58,223,202,2
- call .L094key_192b
+ call .L104key_192b
.byte 102,15,58,223,202,4
- call .L095key_192a
+ call .L105key_192a
.byte 102,15,58,223,202,8
- call .L094key_192b
+ call .L104key_192b
.byte 102,15,58,223,202,16
- call .L095key_192a
+ call .L105key_192a
.byte 102,15,58,223,202,32
- call .L094key_192b
+ call .L104key_192b
.byte 102,15,58,223,202,64
- call .L095key_192a
+ call .L105key_192a
.byte 102,15,58,223,202,128
- call .L094key_192b
+ call .L104key_192b
movups %xmm0,(%edx)
movl %ecx,48(%edx)
- xorl %eax,%eax
- ret
+ jmp .L100good_key
.align 16
-.L095key_192a:
+.L105key_192a:
movups %xmm0,(%edx)
leal 16(%edx),%edx
.align 16
-.L093key_192a_cold:
+.L103key_192a_cold:
movaps %xmm2,%xmm5
-.L096key_192b_warm:
+.L106key_192b_warm:
shufps $16,%xmm0,%xmm4
movdqa %xmm2,%xmm3
xorps %xmm4,%xmm0
@@ -2012,56 +2217,90 @@ _aesni_set_encrypt_key:
pxor %xmm3,%xmm2
ret
.align 16
-.L094key_192b:
+.L104key_192b:
movaps %xmm0,%xmm3
shufps $68,%xmm0,%xmm5
movups %xmm5,(%edx)
shufps $78,%xmm2,%xmm3
movups %xmm3,16(%edx)
leal 32(%edx),%edx
- jmp .L096key_192b_warm
+ jmp .L106key_192b_warm
+.align 16
+.L10212rounds_alt:
+ movdqa 16(%ebx),%xmm5
+ movdqa 32(%ebx),%xmm4
+ movl $8,%ecx
+ movdqu %xmm0,-16(%edx)
+.L107loop_key192:
+ movq %xmm2,(%edx)
+ movdqa %xmm2,%xmm1
+.byte 102,15,56,0,213
+.byte 102,15,56,221,212
+ pslld $1,%xmm4
+ leal 24(%edx),%edx
+ movdqa %xmm0,%xmm3
+ pslldq $4,%xmm0
+ pxor %xmm0,%xmm3
+ pslldq $4,%xmm0
+ pxor %xmm0,%xmm3
+ pslldq $4,%xmm0
+ pxor %xmm3,%xmm0
+ pshufd $255,%xmm0,%xmm3
+ pxor %xmm1,%xmm3
+ pslldq $4,%xmm1
+ pxor %xmm1,%xmm3
+ pxor %xmm2,%xmm0
+ pxor %xmm3,%xmm2
+ movdqu %xmm0,-16(%edx)
+ decl %ecx
+ jnz .L107loop_key192
+ movl $11,%ecx
+ movl %ecx,32(%edx)
+ jmp .L100good_key
.align 16
-.L08714rounds:
+.L09314rounds:
movups 16(%eax),%xmm2
- movl $13,%ecx
leal 16(%edx),%edx
+ cmpl $268435456,%ebp
+ je .L10814rounds_alt
+ movl $13,%ecx
movups %xmm0,-32(%edx)
movups %xmm2,-16(%edx)
.byte 102,15,58,223,202,1
- call .L097key_256a_cold
+ call .L109key_256a_cold
.byte 102,15,58,223,200,1
- call .L098key_256b
+ call .L110key_256b
.byte 102,15,58,223,202,2
- call .L099key_256a
+ call .L111key_256a
.byte 102,15,58,223,200,2
- call .L098key_256b
+ call .L110key_256b
.byte 102,15,58,223,202,4
- call .L099key_256a
+ call .L111key_256a
.byte 102,15,58,223,200,4
- call .L098key_256b
+ call .L110key_256b
.byte 102,15,58,223,202,8
- call .L099key_256a
+ call .L111key_256a
.byte 102,15,58,223,200,8
- call .L098key_256b
+ call .L110key_256b
.byte 102,15,58,223,202,16
- call .L099key_256a
+ call .L111key_256a
.byte 102,15,58,223,200,16
- call .L098key_256b
+ call .L110key_256b
.byte 102,15,58,223,202,32
- call .L099key_256a
+ call .L111key_256a
.byte 102,15,58,223,200,32
- call .L098key_256b
+ call .L110key_256b
.byte 102,15,58,223,202,64
- call .L099key_256a
+ call .L111key_256a
movups %xmm0,(%edx)
movl %ecx,16(%edx)
xorl %eax,%eax
- ret
+ jmp .L100good_key
.align 16
-.L099key_256a:
+.L111key_256a:
movups %xmm2,(%edx)
leal 16(%edx),%edx
-.L097key_256a_cold:
+.L109key_256a_cold:
shufps $16,%xmm0,%xmm4
xorps %xmm4,%xmm0
shufps $140,%xmm0,%xmm4
@@ -2070,7 +2309,7 @@ _aesni_set_encrypt_key:
xorps %xmm1,%xmm0
ret
.align 16
-.L098key_256b:
+.L110key_256b:
movups %xmm0,(%edx)
leal 16(%edx),%edx
shufps $16,%xmm2,%xmm4
@@ -2080,13 +2319,70 @@ _aesni_set_encrypt_key:
shufps $170,%xmm1,%xmm1
xorps %xmm1,%xmm2
ret
+.align 16
+.L10814rounds_alt:
+ movdqa (%ebx),%xmm5
+ movdqa 32(%ebx),%xmm4
+ movl $7,%ecx
+ movdqu %xmm0,-32(%edx)
+ movdqa %xmm2,%xmm1
+ movdqu %xmm2,-16(%edx)
+.L112loop_key256:
+.byte 102,15,56,0,213
+.byte 102,15,56,221,212
+ movdqa %xmm0,%xmm3
+ pslldq $4,%xmm0
+ pxor %xmm0,%xmm3
+ pslldq $4,%xmm0
+ pxor %xmm0,%xmm3
+ pslldq $4,%xmm0
+ pxor %xmm3,%xmm0
+ pslld $1,%xmm4
+ pxor %xmm2,%xmm0
+ movdqu %xmm0,(%edx)
+ decl %ecx
+ jz .L113done_key256
+ pshufd $255,%xmm0,%xmm2
+ pxor %xmm3,%xmm3
+.byte 102,15,56,221,211
+ movdqa %xmm1,%xmm3
+ pslldq $4,%xmm1
+ pxor %xmm1,%xmm3
+ pslldq $4,%xmm1
+ pxor %xmm1,%xmm3
+ pslldq $4,%xmm1
+ pxor %xmm3,%xmm1
+ pxor %xmm1,%xmm2
+ movdqu %xmm2,16(%edx)
+ leal 32(%edx),%edx
+ movdqa %xmm2,%xmm1
+ jmp .L112loop_key256
+.L113done_key256:
+ movl $13,%ecx
+ movl %ecx,16(%edx)
+.L100good_key:
+ pxor %xmm0,%xmm0
+ pxor %xmm1,%xmm1
+ pxor %xmm2,%xmm2
+ pxor %xmm3,%xmm3
+ pxor %xmm4,%xmm4
+ pxor %xmm5,%xmm5
+ xorl %eax,%eax
+ popl %ebx
+ popl %ebp
+ ret
.align 4
-.L086bad_pointer:
+.L091bad_pointer:
movl $-1,%eax
+ popl %ebx
+ popl %ebp
ret
.align 4
-.L089bad_keybits:
+.L095bad_keybits:
+ pxor %xmm0,%xmm0
movl $-2,%eax
+ popl %ebx
+ popl %ebp
ret
.size _aesni_set_encrypt_key,.-_aesni_set_encrypt_key
.globl aesni_set_encrypt_key
@@ -2112,7 +2408,7 @@ aesni_set_decrypt_key:
movl 12(%esp),%edx
shll $4,%ecx
testl %eax,%eax
- jnz .L100dec_key_ret
+ jnz .L114dec_key_ret
leal 16(%edx,%ecx,1),%eax
movups (%edx),%xmm0
movups (%eax),%xmm1
@@ -2120,7 +2416,7 @@ aesni_set_decrypt_key:
movups %xmm1,(%edx)
leal 16(%edx),%edx
leal -16(%eax),%eax
-.L101dec_key_inverse:
+.L115dec_key_inverse:
movups (%edx),%xmm0
movups (%eax),%xmm1
.byte 102,15,56,219,192
@@ -2130,15 +2426,24 @@ aesni_set_decrypt_key:
movups %xmm0,16(%eax)
movups %xmm1,-16(%edx)
cmpl %edx,%eax
- ja .L101dec_key_inverse
+ ja .L115dec_key_inverse
movups (%edx),%xmm0
.byte 102,15,56,219,192
movups %xmm0,(%edx)
+ pxor %xmm0,%xmm0
+ pxor %xmm1,%xmm1
xorl %eax,%eax
-.L100dec_key_ret:
+.L114dec_key_ret:
ret
.size aesni_set_decrypt_key,.-.L_aesni_set_decrypt_key_begin
+.align 64
+.Lkey_const:
+.long 202313229,202313229,202313229,202313229
+.long 67569157,67569157,67569157,67569157
+.long 1,1,1,1
+.long 27,27,27,27
.byte 65,69,83,32,102,111,114,32,73,110,116,101,108,32,65,69
.byte 83,45,78,73,44,32,67,82,89,80,84,79,71,65,77,83
.byte 32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115
.byte 115,108,46,111,114,103,62,0
+.comm OPENSSL_ia32cap_P,16,4
diff --git a/secure/lib/libcrypto/i386/bn-586.s b/secure/lib/libcrypto/i386/bn-586.s
index b40296e..3200c6d 100644
--- a/secure/lib/libcrypto/i386/bn-586.s
+++ b/secure/lib/libcrypto/i386/bn-586.s
@@ -1519,4 +1519,4 @@ bn_sub_part_words:
popl %ebp
ret
.size bn_sub_part_words,.-.L_bn_sub_part_words_begin
-.comm OPENSSL_ia32cap_P,8,4
+.comm OPENSSL_ia32cap_P,16,4
diff --git a/secure/lib/libcrypto/i386/cast-586.s b/secure/lib/libcrypto/i386/cast-586.s
deleted file mode 100644
index 2d65735..0000000
--- a/secure/lib/libcrypto/i386/cast-586.s
+++ /dev/null
@@ -1,934 +0,0 @@
- # $FreeBSD$
-.file "cast-586.s"
-.text
-.globl CAST_encrypt
-.type CAST_encrypt,@function
-.align 16
-CAST_encrypt:
-.L_CAST_encrypt_begin:
-
- pushl %ebp
- pushl %ebx
- movl 12(%esp),%ebx
- movl 16(%esp),%ebp
- pushl %esi
- pushl %edi
-
- movl (%ebx),%edi
- movl 4(%ebx),%esi
-
- movl 128(%ebp),%eax
- pushl %eax
- xorl %eax,%eax
-
- movl (%ebp),%edx
- movl 4(%ebp),%ecx
- addl %esi,%edx
- roll %cl,%edx
- movl %edx,%ebx
- xorl %ecx,%ecx
- movb %dh,%cl
- andl $255,%ebx
- shrl $16,%edx
- xorl %eax,%eax
- movb %dh,%al
- andl $255,%edx
- movl CAST_S_table0(,%ecx,4),%ecx
- movl CAST_S_table1(,%ebx,4),%ebx
- xorl %ebx,%ecx
- movl CAST_S_table2(,%eax,4),%ebx
- subl %ebx,%ecx
- movl CAST_S_table3(,%edx,4),%ebx
- addl %ebx,%ecx
- xorl %ecx,%edi
-
- movl 8(%ebp),%edx
- movl 12(%ebp),%ecx
- xorl %edi,%edx
- roll %cl,%edx
- movl %edx,%ebx
- xorl %ecx,%ecx
- movb %dh,%cl
- andl $255,%ebx
- shrl $16,%edx
- xorl %eax,%eax
- movb %dh,%al
- andl $255,%edx
- movl CAST_S_table0(,%ecx,4),%ecx
- movl CAST_S_table1(,%ebx,4),%ebx
- subl %ebx,%ecx
- movl CAST_S_table2(,%eax,4),%ebx
- addl %ebx,%ecx
- movl CAST_S_table3(,%edx,4),%ebx
- xorl %ebx,%ecx
- xorl %ecx,%esi
-
- movl 16(%ebp),%edx
- movl 20(%ebp),%ecx
- subl %esi,%edx
- roll %cl,%edx
- movl %edx,%ebx
- xorl %ecx,%ecx
- movb %dh,%cl
- andl $255,%ebx
- shrl $16,%edx
- xorl %eax,%eax
- movb %dh,%al
- andl $255,%edx
- movl CAST_S_table0(,%ecx,4),%ecx
- movl CAST_S_table1(,%ebx,4),%ebx
- addl %ebx,%ecx
- movl CAST_S_table2(,%eax,4),%ebx
- xorl %ebx,%ecx
- movl CAST_S_table3(,%edx,4),%ebx
- subl %ebx,%ecx
- xorl %ecx,%edi
-
- movl 24(%ebp),%edx
- movl 28(%ebp),%ecx
- addl %edi,%edx
- roll %cl,%edx
- movl %edx,%ebx
- xorl %ecx,%ecx
- movb %dh,%cl
- andl $255,%ebx
- shrl $16,%edx
- xorl %eax,%eax
- movb %dh,%al
- andl $255,%edx
- movl CAST_S_table0(,%ecx,4),%ecx
- movl CAST_S_table1(,%ebx,4),%ebx
- xorl %ebx,%ecx
- movl CAST_S_table2(,%eax,4),%ebx
- subl %ebx,%ecx
- movl CAST_S_table3(,%edx,4),%ebx
- addl %ebx,%ecx
- xorl %ecx,%esi
-
- movl 32(%ebp),%edx
- movl 36(%ebp),%ecx
- xorl %esi,%edx
- roll %cl,%edx
- movl %edx,%ebx
- xorl %ecx,%ecx
- movb %dh,%cl
- andl $255,%ebx
- shrl $16,%edx
- xorl %eax,%eax
- movb %dh,%al
- andl $255,%edx
- movl CAST_S_table0(,%ecx,4),%ecx
- movl CAST_S_table1(,%ebx,4),%ebx
- subl %ebx,%ecx
- movl CAST_S_table2(,%eax,4),%ebx
- addl %ebx,%ecx
- movl CAST_S_table3(,%edx,4),%ebx
- xorl %ebx,%ecx
- xorl %ecx,%edi
-
- movl 40(%ebp),%edx
- movl 44(%ebp),%ecx
- subl %edi,%edx
- roll %cl,%edx
- movl %edx,%ebx
- xorl %ecx,%ecx
- movb %dh,%cl
- andl $255,%ebx
- shrl $16,%edx
- xorl %eax,%eax
- movb %dh,%al
- andl $255,%edx
- movl CAST_S_table0(,%ecx,4),%ecx
- movl CAST_S_table1(,%ebx,4),%ebx
- addl %ebx,%ecx
- movl CAST_S_table2(,%eax,4),%ebx
- xorl %ebx,%ecx
- movl CAST_S_table3(,%edx,4),%ebx
- subl %ebx,%ecx
- xorl %ecx,%esi
-
- movl 48(%ebp),%edx
- movl 52(%ebp),%ecx
- addl %esi,%edx
- roll %cl,%edx
- movl %edx,%ebx
- xorl %ecx,%ecx
- movb %dh,%cl
- andl $255,%ebx
- shrl $16,%edx
- xorl %eax,%eax
- movb %dh,%al
- andl $255,%edx
- movl CAST_S_table0(,%ecx,4),%ecx
- movl CAST_S_table1(,%ebx,4),%ebx
- xorl %ebx,%ecx
- movl CAST_S_table2(,%eax,4),%ebx
- subl %ebx,%ecx
- movl CAST_S_table3(,%edx,4),%ebx
- addl %ebx,%ecx
- xorl %ecx,%edi
-
- movl 56(%ebp),%edx
- movl 60(%ebp),%ecx
- xorl %edi,%edx
- roll %cl,%edx
- movl %edx,%ebx
- xorl %ecx,%ecx
- movb %dh,%cl
- andl $255,%ebx
- shrl $16,%edx
- xorl %eax,%eax
- movb %dh,%al
- andl $255,%edx
- movl CAST_S_table0(,%ecx,4),%ecx
- movl CAST_S_table1(,%ebx,4),%ebx
- subl %ebx,%ecx
- movl CAST_S_table2(,%eax,4),%ebx
- addl %ebx,%ecx
- movl CAST_S_table3(,%edx,4),%ebx
- xorl %ebx,%ecx
- xorl %ecx,%esi
-
- movl 64(%ebp),%edx
- movl 68(%ebp),%ecx
- subl %esi,%edx
- roll %cl,%edx
- movl %edx,%ebx
- xorl %ecx,%ecx
- movb %dh,%cl
- andl $255,%ebx
- shrl $16,%edx
- xorl %eax,%eax
- movb %dh,%al
- andl $255,%edx
- movl CAST_S_table0(,%ecx,4),%ecx
- movl CAST_S_table1(,%ebx,4),%ebx
- addl %ebx,%ecx
- movl CAST_S_table2(,%eax,4),%ebx
- xorl %ebx,%ecx
- movl CAST_S_table3(,%edx,4),%ebx
- subl %ebx,%ecx
- xorl %ecx,%edi
-
- movl 72(%ebp),%edx
- movl 76(%ebp),%ecx
- addl %edi,%edx
- roll %cl,%edx
- movl %edx,%ebx
- xorl %ecx,%ecx
- movb %dh,%cl
- andl $255,%ebx
- shrl $16,%edx
- xorl %eax,%eax
- movb %dh,%al
- andl $255,%edx
- movl CAST_S_table0(,%ecx,4),%ecx
- movl CAST_S_table1(,%ebx,4),%ebx
- xorl %ebx,%ecx
- movl CAST_S_table2(,%eax,4),%ebx
- subl %ebx,%ecx
- movl CAST_S_table3(,%edx,4),%ebx
- addl %ebx,%ecx
- xorl %ecx,%esi
-
- movl 80(%ebp),%edx
- movl 84(%ebp),%ecx
- xorl %esi,%edx
- roll %cl,%edx
- movl %edx,%ebx
- xorl %ecx,%ecx
- movb %dh,%cl
- andl $255,%ebx
- shrl $16,%edx
- xorl %eax,%eax
- movb %dh,%al
- andl $255,%edx
- movl CAST_S_table0(,%ecx,4),%ecx
- movl CAST_S_table1(,%ebx,4),%ebx
- subl %ebx,%ecx
- movl CAST_S_table2(,%eax,4),%ebx
- addl %ebx,%ecx
- movl CAST_S_table3(,%edx,4),%ebx
- xorl %ebx,%ecx
- xorl %ecx,%edi
-
- movl 88(%ebp),%edx
- movl 92(%ebp),%ecx
- subl %edi,%edx
- roll %cl,%edx
- movl %edx,%ebx
- xorl %ecx,%ecx
- movb %dh,%cl
- andl $255,%ebx
- shrl $16,%edx
- xorl %eax,%eax
- movb %dh,%al
- andl $255,%edx
- movl CAST_S_table0(,%ecx,4),%ecx
- movl CAST_S_table1(,%ebx,4),%ebx
- addl %ebx,%ecx
- movl CAST_S_table2(,%eax,4),%ebx
- xorl %ebx,%ecx
- movl CAST_S_table3(,%edx,4),%ebx
- subl %ebx,%ecx
- xorl %ecx,%esi
-
- popl %edx
- orl %edx,%edx
- jnz .L000cast_enc_done
-
- movl 96(%ebp),%edx
- movl 100(%ebp),%ecx
- addl %esi,%edx
- roll %cl,%edx
- movl %edx,%ebx
- xorl %ecx,%ecx
- movb %dh,%cl
- andl $255,%ebx
- shrl $16,%edx
- xorl %eax,%eax
- movb %dh,%al
- andl $255,%edx
- movl CAST_S_table0(,%ecx,4),%ecx
- movl CAST_S_table1(,%ebx,4),%ebx
- xorl %ebx,%ecx
- movl CAST_S_table2(,%eax,4),%ebx
- subl %ebx,%ecx
- movl CAST_S_table3(,%edx,4),%ebx
- addl %ebx,%ecx
- xorl %ecx,%edi
-
- movl 104(%ebp),%edx
- movl 108(%ebp),%ecx
- xorl %edi,%edx
- roll %cl,%edx
- movl %edx,%ebx
- xorl %ecx,%ecx
- movb %dh,%cl
- andl $255,%ebx
- shrl $16,%edx
- xorl %eax,%eax
- movb %dh,%al
- andl $255,%edx
- movl CAST_S_table0(,%ecx,4),%ecx
- movl CAST_S_table1(,%ebx,4),%ebx
- subl %ebx,%ecx
- movl CAST_S_table2(,%eax,4),%ebx
- addl %ebx,%ecx
- movl CAST_S_table3(,%edx,4),%ebx
- xorl %ebx,%ecx
- xorl %ecx,%esi
-
- movl 112(%ebp),%edx
- movl 116(%ebp),%ecx
- subl %esi,%edx
- roll %cl,%edx
- movl %edx,%ebx
- xorl %ecx,%ecx
- movb %dh,%cl
- andl $255,%ebx
- shrl $16,%edx
- xorl %eax,%eax
- movb %dh,%al
- andl $255,%edx
- movl CAST_S_table0(,%ecx,4),%ecx
- movl CAST_S_table1(,%ebx,4),%ebx
- addl %ebx,%ecx
- movl CAST_S_table2(,%eax,4),%ebx
- xorl %ebx,%ecx
- movl CAST_S_table3(,%edx,4),%ebx
- subl %ebx,%ecx
- xorl %ecx,%edi
-
- movl 120(%ebp),%edx
- movl 124(%ebp),%ecx
- addl %edi,%edx
- roll %cl,%edx
- movl %edx,%ebx
- xorl %ecx,%ecx
- movb %dh,%cl
- andl $255,%ebx
- shrl $16,%edx
- xorl %eax,%eax
- movb %dh,%al
- andl $255,%edx
- movl CAST_S_table0(,%ecx,4),%ecx
- movl CAST_S_table1(,%ebx,4),%ebx
- xorl %ebx,%ecx
- movl CAST_S_table2(,%eax,4),%ebx
- subl %ebx,%ecx
- movl CAST_S_table3(,%edx,4),%ebx
- addl %ebx,%ecx
- xorl %ecx,%esi
-.L000cast_enc_done:
- nop
- movl 20(%esp),%eax
- movl %edi,4(%eax)
- movl %esi,(%eax)
- popl %edi
- popl %esi
- popl %ebx
- popl %ebp
- ret
-.size CAST_encrypt,.-.L_CAST_encrypt_begin
-.globl CAST_decrypt
-.type CAST_decrypt,@function
-.align 16
-CAST_decrypt:
-.L_CAST_decrypt_begin:
-
- pushl %ebp
- pushl %ebx
- movl 12(%esp),%ebx
- movl 16(%esp),%ebp
- pushl %esi
- pushl %edi
-
- movl (%ebx),%edi
- movl 4(%ebx),%esi
-
- movl 128(%ebp),%eax
- orl %eax,%eax
- jnz .L001cast_dec_skip
- xorl %eax,%eax
-
- movl 120(%ebp),%edx
- movl 124(%ebp),%ecx
- addl %esi,%edx
- roll %cl,%edx
- movl %edx,%ebx
- xorl %ecx,%ecx
- movb %dh,%cl
- andl $255,%ebx
- shrl $16,%edx
- xorl %eax,%eax
- movb %dh,%al
- andl $255,%edx
- movl CAST_S_table0(,%ecx,4),%ecx
- movl CAST_S_table1(,%ebx,4),%ebx
- xorl %ebx,%ecx
- movl CAST_S_table2(,%eax,4),%ebx
- subl %ebx,%ecx
- movl CAST_S_table3(,%edx,4),%ebx
- addl %ebx,%ecx
- xorl %ecx,%edi
-
- movl 112(%ebp),%edx
- movl 116(%ebp),%ecx
- subl %edi,%edx
- roll %cl,%edx
- movl %edx,%ebx
- xorl %ecx,%ecx
- movb %dh,%cl
- andl $255,%ebx
- shrl $16,%edx
- xorl %eax,%eax
- movb %dh,%al
- andl $255,%edx
- movl CAST_S_table0(,%ecx,4),%ecx
- movl CAST_S_table1(,%ebx,4),%ebx
- addl %ebx,%ecx
- movl CAST_S_table2(,%eax,4),%ebx
- xorl %ebx,%ecx
- movl CAST_S_table3(,%edx,4),%ebx
- subl %ebx,%ecx
- xorl %ecx,%esi
-
- movl 104(%ebp),%edx
- movl 108(%ebp),%ecx
- xorl %esi,%edx
- roll %cl,%edx
- movl %edx,%ebx
- xorl %ecx,%ecx
- movb %dh,%cl
- andl $255,%ebx
- shrl $16,%edx
- xorl %eax,%eax
- movb %dh,%al
- andl $255,%edx
- movl CAST_S_table0(,%ecx,4),%ecx
- movl CAST_S_table1(,%ebx,4),%ebx
- subl %ebx,%ecx
- movl CAST_S_table2(,%eax,4),%ebx
- addl %ebx,%ecx
- movl CAST_S_table3(,%edx,4),%ebx
- xorl %ebx,%ecx
- xorl %ecx,%edi
-
- movl 96(%ebp),%edx
- movl 100(%ebp),%ecx
- addl %edi,%edx
- roll %cl,%edx
- movl %edx,%ebx
- xorl %ecx,%ecx
- movb %dh,%cl
- andl $255,%ebx
- shrl $16,%edx
- xorl %eax,%eax
- movb %dh,%al
- andl $255,%edx
- movl CAST_S_table0(,%ecx,4),%ecx
- movl CAST_S_table1(,%ebx,4),%ebx
- xorl %ebx,%ecx
- movl CAST_S_table2(,%eax,4),%ebx
- subl %ebx,%ecx
- movl CAST_S_table3(,%edx,4),%ebx
- addl %ebx,%ecx
- xorl %ecx,%esi
-.L001cast_dec_skip:
-
- movl 88(%ebp),%edx
- movl 92(%ebp),%ecx
- subl %esi,%edx
- roll %cl,%edx
- movl %edx,%ebx
- xorl %ecx,%ecx
- movb %dh,%cl
- andl $255,%ebx
- shrl $16,%edx
- xorl %eax,%eax
- movb %dh,%al
- andl $255,%edx
- movl CAST_S_table0(,%ecx,4),%ecx
- movl CAST_S_table1(,%ebx,4),%ebx
- addl %ebx,%ecx
- movl CAST_S_table2(,%eax,4),%ebx
- xorl %ebx,%ecx
- movl CAST_S_table3(,%edx,4),%ebx
- subl %ebx,%ecx
- xorl %ecx,%edi
-
- movl 80(%ebp),%edx
- movl 84(%ebp),%ecx
- xorl %edi,%edx
- roll %cl,%edx
- movl %edx,%ebx
- xorl %ecx,%ecx
- movb %dh,%cl
- andl $255,%ebx
- shrl $16,%edx
- xorl %eax,%eax
- movb %dh,%al
- andl $255,%edx
- movl CAST_S_table0(,%ecx,4),%ecx
- movl CAST_S_table1(,%ebx,4),%ebx
- subl %ebx,%ecx
- movl CAST_S_table2(,%eax,4),%ebx
- addl %ebx,%ecx
- movl CAST_S_table3(,%edx,4),%ebx
- xorl %ebx,%ecx
- xorl %ecx,%esi
-
- movl 72(%ebp),%edx
- movl 76(%ebp),%ecx
- addl %esi,%edx
- roll %cl,%edx
- movl %edx,%ebx
- xorl %ecx,%ecx
- movb %dh,%cl
- andl $255,%ebx
- shrl $16,%edx
- xorl %eax,%eax
- movb %dh,%al
- andl $255,%edx
- movl CAST_S_table0(,%ecx,4),%ecx
- movl CAST_S_table1(,%ebx,4),%ebx
- xorl %ebx,%ecx
- movl CAST_S_table2(,%eax,4),%ebx
- subl %ebx,%ecx
- movl CAST_S_table3(,%edx,4),%ebx
- addl %ebx,%ecx
- xorl %ecx,%edi
-
- movl 64(%ebp),%edx
- movl 68(%ebp),%ecx
- subl %edi,%edx
- roll %cl,%edx
- movl %edx,%ebx
- xorl %ecx,%ecx
- movb %dh,%cl
- andl $255,%ebx
- shrl $16,%edx
- xorl %eax,%eax
- movb %dh,%al
- andl $255,%edx
- movl CAST_S_table0(,%ecx,4),%ecx
- movl CAST_S_table1(,%ebx,4),%ebx
- addl %ebx,%ecx
- movl CAST_S_table2(,%eax,4),%ebx
- xorl %ebx,%ecx
- movl CAST_S_table3(,%edx,4),%ebx
- subl %ebx,%ecx
- xorl %ecx,%esi
-
- movl 56(%ebp),%edx
- movl 60(%ebp),%ecx
- xorl %esi,%edx
- roll %cl,%edx
- movl %edx,%ebx
- xorl %ecx,%ecx
- movb %dh,%cl
- andl $255,%ebx
- shrl $16,%edx
- xorl %eax,%eax
- movb %dh,%al
- andl $255,%edx
- movl CAST_S_table0(,%ecx,4),%ecx
- movl CAST_S_table1(,%ebx,4),%ebx
- subl %ebx,%ecx
- movl CAST_S_table2(,%eax,4),%ebx
- addl %ebx,%ecx
- movl CAST_S_table3(,%edx,4),%ebx
- xorl %ebx,%ecx
- xorl %ecx,%edi
-
- movl 48(%ebp),%edx
- movl 52(%ebp),%ecx
- addl %edi,%edx
- roll %cl,%edx
- movl %edx,%ebx
- xorl %ecx,%ecx
- movb %dh,%cl
- andl $255,%ebx
- shrl $16,%edx
- xorl %eax,%eax
- movb %dh,%al
- andl $255,%edx
- movl CAST_S_table0(,%ecx,4),%ecx
- movl CAST_S_table1(,%ebx,4),%ebx
- xorl %ebx,%ecx
- movl CAST_S_table2(,%eax,4),%ebx
- subl %ebx,%ecx
- movl CAST_S_table3(,%edx,4),%ebx
- addl %ebx,%ecx
- xorl %ecx,%esi
-
- movl 40(%ebp),%edx
- movl 44(%ebp),%ecx
- subl %esi,%edx
- roll %cl,%edx
- movl %edx,%ebx
- xorl %ecx,%ecx
- movb %dh,%cl
- andl $255,%ebx
- shrl $16,%edx
- xorl %eax,%eax
- movb %dh,%al
- andl $255,%edx
- movl CAST_S_table0(,%ecx,4),%ecx
- movl CAST_S_table1(,%ebx,4),%ebx
- addl %ebx,%ecx
- movl CAST_S_table2(,%eax,4),%ebx
- xorl %ebx,%ecx
- movl CAST_S_table3(,%edx,4),%ebx
- subl %ebx,%ecx
- xorl %ecx,%edi
-
- movl 32(%ebp),%edx
- movl 36(%ebp),%ecx
- xorl %edi,%edx
- roll %cl,%edx
- movl %edx,%ebx
- xorl %ecx,%ecx
- movb %dh,%cl
- andl $255,%ebx
- shrl $16,%edx
- xorl %eax,%eax
- movb %dh,%al
- andl $255,%edx
- movl CAST_S_table0(,%ecx,4),%ecx
- movl CAST_S_table1(,%ebx,4),%ebx
- subl %ebx,%ecx
- movl CAST_S_table2(,%eax,4),%ebx
- addl %ebx,%ecx
- movl CAST_S_table3(,%edx,4),%ebx
- xorl %ebx,%ecx
- xorl %ecx,%esi
-
- movl 24(%ebp),%edx
- movl 28(%ebp),%ecx
- addl %esi,%edx
- roll %cl,%edx
- movl %edx,%ebx
- xorl %ecx,%ecx
- movb %dh,%cl
- andl $255,%ebx
- shrl $16,%edx
- xorl %eax,%eax
- movb %dh,%al
- andl $255,%edx
- movl CAST_S_table0(,%ecx,4),%ecx
- movl CAST_S_table1(,%ebx,4),%ebx
- xorl %ebx,%ecx
- movl CAST_S_table2(,%eax,4),%ebx
- subl %ebx,%ecx
- movl CAST_S_table3(,%edx,4),%ebx
- addl %ebx,%ecx
- xorl %ecx,%edi
-
- movl 16(%ebp),%edx
- movl 20(%ebp),%ecx
- subl %edi,%edx
- roll %cl,%edx
- movl %edx,%ebx
- xorl %ecx,%ecx
- movb %dh,%cl
- andl $255,%ebx
- shrl $16,%edx
- xorl %eax,%eax
- movb %dh,%al
- andl $255,%edx
- movl CAST_S_table0(,%ecx,4),%ecx
- movl CAST_S_table1(,%ebx,4),%ebx
- addl %ebx,%ecx
- movl CAST_S_table2(,%eax,4),%ebx
- xorl %ebx,%ecx
- movl CAST_S_table3(,%edx,4),%ebx
- subl %ebx,%ecx
- xorl %ecx,%esi
-
- movl 8(%ebp),%edx
- movl 12(%ebp),%ecx
- xorl %esi,%edx
- roll %cl,%edx
- movl %edx,%ebx
- xorl %ecx,%ecx
- movb %dh,%cl
- andl $255,%ebx
- shrl $16,%edx
- xorl %eax,%eax
- movb %dh,%al
- andl $255,%edx
- movl CAST_S_table0(,%ecx,4),%ecx
- movl CAST_S_table1(,%ebx,4),%ebx
- subl %ebx,%ecx
- movl CAST_S_table2(,%eax,4),%ebx
- addl %ebx,%ecx
- movl CAST_S_table3(,%edx,4),%ebx
- xorl %ebx,%ecx
- xorl %ecx,%edi
-
- movl (%ebp),%edx
- movl 4(%ebp),%ecx
- addl %edi,%edx
- roll %cl,%edx
- movl %edx,%ebx
- xorl %ecx,%ecx
- movb %dh,%cl
- andl $255,%ebx
- shrl $16,%edx
- xorl %eax,%eax
- movb %dh,%al
- andl $255,%edx
- movl CAST_S_table0(,%ecx,4),%ecx
- movl CAST_S_table1(,%ebx,4),%ebx
- xorl %ebx,%ecx
- movl CAST_S_table2(,%eax,4),%ebx
- subl %ebx,%ecx
- movl CAST_S_table3(,%edx,4),%ebx
- addl %ebx,%ecx
- xorl %ecx,%esi
- nop
- movl 20(%esp),%eax
- movl %edi,4(%eax)
- movl %esi,(%eax)
- popl %edi
- popl %esi
- popl %ebx
- popl %ebp
- ret
-.size CAST_decrypt,.-.L_CAST_decrypt_begin
-.globl CAST_cbc_encrypt
-.type CAST_cbc_encrypt,@function
-.align 16
-CAST_cbc_encrypt:
-.L_CAST_cbc_encrypt_begin:
-
- pushl %ebp
- pushl %ebx
- pushl %esi
- pushl %edi
- movl 28(%esp),%ebp
-
- movl 36(%esp),%ebx
- movl (%ebx),%esi
- movl 4(%ebx),%edi
- pushl %edi
- pushl %esi
- pushl %edi
- pushl %esi
- movl %esp,%ebx
- movl 36(%esp),%esi
- movl 40(%esp),%edi
-
- movl 56(%esp),%ecx
-
- movl 48(%esp),%eax
- pushl %eax
- pushl %ebx
- cmpl $0,%ecx
- jz .L002decrypt
- andl $4294967288,%ebp
- movl 8(%esp),%eax
- movl 12(%esp),%ebx
- jz .L003encrypt_finish
-.L004encrypt_loop:
- movl (%esi),%ecx
- movl 4(%esi),%edx
- xorl %ecx,%eax
- xorl %edx,%ebx
- bswap %eax
- bswap %ebx
- movl %eax,8(%esp)
- movl %ebx,12(%esp)
- call .L_CAST_encrypt_begin
- movl 8(%esp),%eax
- movl 12(%esp),%ebx
- bswap %eax
- bswap %ebx
- movl %eax,(%edi)
- movl %ebx,4(%edi)
- addl $8,%esi
- addl $8,%edi
- subl $8,%ebp
- jnz .L004encrypt_loop
-.L003encrypt_finish:
- movl 52(%esp),%ebp
- andl $7,%ebp
- jz .L005finish
- call .L006PIC_point
-.L006PIC_point:
- popl %edx
- leal .L007cbc_enc_jmp_table-.L006PIC_point(%edx),%ecx
- movl (%ecx,%ebp,4),%ebp
- addl %edx,%ebp
- xorl %ecx,%ecx
- xorl %edx,%edx
- jmp *%ebp
-.L008ej7:
- movb 6(%esi),%dh
- shll $8,%edx
-.L009ej6:
- movb 5(%esi),%dh
-.L010ej5:
- movb 4(%esi),%dl
-.L011ej4:
- movl (%esi),%ecx
- jmp .L012ejend
-.L013ej3:
- movb 2(%esi),%ch
- shll $8,%ecx
-.L014ej2:
- movb 1(%esi),%ch
-.L015ej1:
- movb (%esi),%cl
-.L012ejend:
- xorl %ecx,%eax
- xorl %edx,%ebx
- bswap %eax
- bswap %ebx
- movl %eax,8(%esp)
- movl %ebx,12(%esp)
- call .L_CAST_encrypt_begin
- movl 8(%esp),%eax
- movl 12(%esp),%ebx
- bswap %eax
- bswap %ebx
- movl %eax,(%edi)
- movl %ebx,4(%edi)
- jmp .L005finish
-.L002decrypt:
- andl $4294967288,%ebp
- movl 16(%esp),%eax
- movl 20(%esp),%ebx
- jz .L016decrypt_finish
-.L017decrypt_loop:
- movl (%esi),%eax
- movl 4(%esi),%ebx
- bswap %eax
- bswap %ebx
- movl %eax,8(%esp)
- movl %ebx,12(%esp)
- call .L_CAST_decrypt_begin
- movl 8(%esp),%eax
- movl 12(%esp),%ebx
- bswap %eax
- bswap %ebx
- movl 16(%esp),%ecx
- movl 20(%esp),%edx
- xorl %eax,%ecx
- xorl %ebx,%edx
- movl (%esi),%eax
- movl 4(%esi),%ebx
- movl %ecx,(%edi)
- movl %edx,4(%edi)
- movl %eax,16(%esp)
- movl %ebx,20(%esp)
- addl $8,%esi
- addl $8,%edi
- subl $8,%ebp
- jnz .L017decrypt_loop
-.L016decrypt_finish:
- movl 52(%esp),%ebp
- andl $7,%ebp
- jz .L005finish
- movl (%esi),%eax
- movl 4(%esi),%ebx
- bswap %eax
- bswap %ebx
- movl %eax,8(%esp)
- movl %ebx,12(%esp)
- call .L_CAST_decrypt_begin
- movl 8(%esp),%eax
- movl 12(%esp),%ebx
- bswap %eax
- bswap %ebx
- movl 16(%esp),%ecx
- movl 20(%esp),%edx
- xorl %eax,%ecx
- xorl %ebx,%edx
- movl (%esi),%eax
- movl 4(%esi),%ebx
-.L018dj7:
- rorl $16,%edx
- movb %dl,6(%edi)
- shrl $16,%edx
-.L019dj6:
- movb %dh,5(%edi)
-.L020dj5:
- movb %dl,4(%edi)
-.L021dj4:
- movl %ecx,(%edi)
- jmp .L022djend
-.L023dj3:
- rorl $16,%ecx
- movb %cl,2(%edi)
- shll $16,%ecx
-.L024dj2:
- movb %ch,1(%esi)
-.L025dj1:
- movb %cl,(%esi)
-.L022djend:
- jmp .L005finish
-.L005finish:
- movl 60(%esp),%ecx
- addl $24,%esp
- movl %eax,(%ecx)
- movl %ebx,4(%ecx)
- popl %edi
- popl %esi
- popl %ebx
- popl %ebp
- ret
-.align 64
-.L007cbc_enc_jmp_table:
-.long 0
-.long .L015ej1-.L006PIC_point
-.long .L014ej2-.L006PIC_point
-.long .L013ej3-.L006PIC_point
-.long .L011ej4-.L006PIC_point
-.long .L010ej5-.L006PIC_point
-.long .L009ej6-.L006PIC_point
-.long .L008ej7-.L006PIC_point
-.align 64
-.size CAST_cbc_encrypt,.-.L_CAST_cbc_encrypt_begin
diff --git a/secure/lib/libcrypto/i386/des-586.s b/secure/lib/libcrypto/i386/des-586.s
index 868b2ca..83bf07a 100644
--- a/secure/lib/libcrypto/i386/des-586.s
+++ b/secure/lib/libcrypto/i386/des-586.s
@@ -1001,7 +1001,7 @@ DES_encrypt1:
call .L000pic_point
.L000pic_point:
popl %ebp
- leal DES_SPtrans-.L000pic_point(%ebp),%ebp
+ leal .Ldes_sptrans-.L000pic_point(%ebp),%ebp
movl 24(%esp),%ecx
cmpl $0,%ebx
je .L001decrypt
@@ -1078,7 +1078,7 @@ DES_encrypt2:
call .L003pic_point
.L003pic_point:
popl %ebp
- leal DES_SPtrans-.L003pic_point(%ebp),%ebp
+ leal .Ldes_sptrans-.L003pic_point(%ebp),%ebp
movl 24(%esp),%ecx
cmpl $0,%ebx
je .L004decrypt
@@ -1708,6 +1708,7 @@ DES_ede3_cbc_encrypt:
.size DES_ede3_cbc_encrypt,.-.L_DES_ede3_cbc_encrypt_begin
.align 64
DES_SPtrans:
+.Ldes_sptrans:
.long 34080768,524288,33554434,34080770
.long 33554432,526338,524290,33554434
.long 526338,34080768,34078720,2050
diff --git a/secure/lib/libcrypto/i386/ghash-x86.s b/secure/lib/libcrypto/i386/ghash-x86.s
index a200a97..53d5e3f 100644
--- a/secure/lib/libcrypto/i386/ghash-x86.s
+++ b/secure/lib/libcrypto/i386/ghash-x86.s
@@ -946,27 +946,34 @@ gcm_init_clmul:
pslldq $8,%xmm4
pxor %xmm3,%xmm1
pxor %xmm4,%xmm0
+ movdqa %xmm0,%xmm4
movdqa %xmm0,%xmm3
- psllq $1,%xmm0
- pxor %xmm3,%xmm0
psllq $5,%xmm0
+ pxor %xmm0,%xmm3
+ psllq $1,%xmm0
pxor %xmm3,%xmm0
psllq $57,%xmm0
- movdqa %xmm0,%xmm4
+ movdqa %xmm0,%xmm3
pslldq $8,%xmm0
- psrldq $8,%xmm4
- pxor %xmm3,%xmm0
- pxor %xmm4,%xmm1
- movdqa %xmm0,%xmm4
- psrlq $5,%xmm0
+ psrldq $8,%xmm3
pxor %xmm4,%xmm0
+ pxor %xmm3,%xmm1
+ movdqa %xmm0,%xmm4
psrlq $1,%xmm0
+ pxor %xmm4,%xmm1
+ pxor %xmm0,%xmm4
+ psrlq $5,%xmm0
pxor %xmm4,%xmm0
- pxor %xmm1,%xmm4
psrlq $1,%xmm0
- pxor %xmm4,%xmm0
+ pxor %xmm1,%xmm0
+ pshufd $78,%xmm2,%xmm3
+ pshufd $78,%xmm0,%xmm4
+ pxor %xmm2,%xmm3
movdqu %xmm2,(%edx)
+ pxor %xmm0,%xmm4
movdqu %xmm0,16(%edx)
+.byte 102,15,58,15,227,8
+ movdqu %xmm4,32(%edx)
ret
.size gcm_init_clmul,.-.L_gcm_init_clmul_begin
.globl gcm_gmult_clmul
@@ -984,11 +991,10 @@ gcm_gmult_clmul:
movdqa (%ecx),%xmm5
movups (%edx),%xmm2
.byte 102,15,56,0,197
+ movups 32(%edx),%xmm4
movdqa %xmm0,%xmm1
pshufd $78,%xmm0,%xmm3
- pshufd $78,%xmm2,%xmm4
pxor %xmm0,%xmm3
- pxor %xmm2,%xmm4
.byte 102,15,58,68,194,0
.byte 102,15,58,68,202,17
.byte 102,15,58,68,220,0
@@ -999,25 +1005,26 @@ gcm_gmult_clmul:
pslldq $8,%xmm4
pxor %xmm3,%xmm1
pxor %xmm4,%xmm0
+ movdqa %xmm0,%xmm4
movdqa %xmm0,%xmm3
- psllq $1,%xmm0
- pxor %xmm3,%xmm0
psllq $5,%xmm0
+ pxor %xmm0,%xmm3
+ psllq $1,%xmm0
pxor %xmm3,%xmm0
psllq $57,%xmm0
- movdqa %xmm0,%xmm4
+ movdqa %xmm0,%xmm3
pslldq $8,%xmm0
- psrldq $8,%xmm4
- pxor %xmm3,%xmm0
- pxor %xmm4,%xmm1
- movdqa %xmm0,%xmm4
- psrlq $5,%xmm0
+ psrldq $8,%xmm3
pxor %xmm4,%xmm0
+ pxor %xmm3,%xmm1
+ movdqa %xmm0,%xmm4
psrlq $1,%xmm0
+ pxor %xmm4,%xmm1
+ pxor %xmm0,%xmm4
+ psrlq $5,%xmm0
pxor %xmm4,%xmm0
- pxor %xmm1,%xmm4
psrlq $1,%xmm0
- pxor %xmm4,%xmm0
+ pxor %xmm1,%xmm0
.byte 102,15,56,0,197
movdqu %xmm0,(%eax)
ret
@@ -1049,127 +1056,115 @@ gcm_ghash_clmul:
movdqu 16(%esi),%xmm6
.byte 102,15,56,0,221
.byte 102,15,56,0,245
+ movdqu 32(%edx),%xmm5
pxor %xmm3,%xmm0
- movdqa %xmm6,%xmm7
pshufd $78,%xmm6,%xmm3
- pshufd $78,%xmm2,%xmm4
+ movdqa %xmm6,%xmm7
pxor %xmm6,%xmm3
- pxor %xmm2,%xmm4
+ leal 32(%esi),%esi
.byte 102,15,58,68,242,0
.byte 102,15,58,68,250,17
-.byte 102,15,58,68,220,0
- xorps %xmm6,%xmm3
- xorps %xmm7,%xmm3
- movdqa %xmm3,%xmm4
- psrldq $8,%xmm3
- pslldq $8,%xmm4
- pxor %xmm3,%xmm7
- pxor %xmm4,%xmm6
+.byte 102,15,58,68,221,0
movups 16(%edx),%xmm2
- leal 32(%esi),%esi
+ nop
subl $32,%ebx
jbe .L014even_tail
+ jmp .L015mod_loop
+.align 32
.L015mod_loop:
+ pshufd $78,%xmm0,%xmm4
movdqa %xmm0,%xmm1
- pshufd $78,%xmm0,%xmm3
- pshufd $78,%xmm2,%xmm4
- pxor %xmm0,%xmm3
- pxor %xmm2,%xmm4
+ pxor %xmm0,%xmm4
+ nop
.byte 102,15,58,68,194,0
.byte 102,15,58,68,202,17
-.byte 102,15,58,68,220,0
- xorps %xmm0,%xmm3
- xorps %xmm1,%xmm3
- movdqa %xmm3,%xmm4
- psrldq $8,%xmm3
- pslldq $8,%xmm4
- pxor %xmm3,%xmm1
- pxor %xmm4,%xmm0
- movdqu (%esi),%xmm3
+.byte 102,15,58,68,229,16
movups (%edx),%xmm2
- pxor %xmm6,%xmm0
- pxor %xmm7,%xmm1
+ xorps %xmm6,%xmm0
+ movdqa (%ecx),%xmm5
+ xorps %xmm7,%xmm1
+ movdqu (%esi),%xmm7
+ pxor %xmm0,%xmm3
movdqu 16(%esi),%xmm6
-.byte 102,15,56,0,221
+ pxor %xmm1,%xmm3
+.byte 102,15,56,0,253
+ pxor %xmm3,%xmm4
+ movdqa %xmm4,%xmm3
+ psrldq $8,%xmm4
+ pslldq $8,%xmm3
+ pxor %xmm4,%xmm1
+ pxor %xmm3,%xmm0
.byte 102,15,56,0,245
- movdqa %xmm6,%xmm5
+ pxor %xmm7,%xmm1
movdqa %xmm6,%xmm7
- pxor %xmm3,%xmm1
+ movdqa %xmm0,%xmm4
movdqa %xmm0,%xmm3
- psllq $1,%xmm0
- pxor %xmm3,%xmm0
psllq $5,%xmm0
+ pxor %xmm0,%xmm3
+ psllq $1,%xmm0
pxor %xmm3,%xmm0
.byte 102,15,58,68,242,0
+ movups 32(%edx),%xmm5
psllq $57,%xmm0
- movdqa %xmm0,%xmm4
+ movdqa %xmm0,%xmm3
pslldq $8,%xmm0
- psrldq $8,%xmm4
- pxor %xmm3,%xmm0
- pshufd $78,%xmm5,%xmm3
+ psrldq $8,%xmm3
+ pxor %xmm4,%xmm0
+ pxor %xmm3,%xmm1
+ pshufd $78,%xmm7,%xmm3
+ movdqa %xmm0,%xmm4
+ psrlq $1,%xmm0
+ pxor %xmm7,%xmm3
pxor %xmm4,%xmm1
- pxor %xmm5,%xmm3
- pshufd $78,%xmm2,%xmm5
- pxor %xmm2,%xmm5
.byte 102,15,58,68,250,17
- movdqa %xmm0,%xmm4
+ movups 16(%edx),%xmm2
+ pxor %xmm0,%xmm4
psrlq $5,%xmm0
pxor %xmm4,%xmm0
psrlq $1,%xmm0
- pxor %xmm4,%xmm0
- pxor %xmm1,%xmm4
- psrlq $1,%xmm0
- pxor %xmm4,%xmm0
+ pxor %xmm1,%xmm0
.byte 102,15,58,68,221,0
- movups 16(%edx),%xmm2
- xorps %xmm6,%xmm3
- xorps %xmm7,%xmm3
- movdqa %xmm3,%xmm5
- psrldq $8,%xmm3
- pslldq $8,%xmm5
- pxor %xmm3,%xmm7
- pxor %xmm5,%xmm6
- movdqa (%ecx),%xmm5
leal 32(%esi),%esi
subl $32,%ebx
ja .L015mod_loop
.L014even_tail:
+ pshufd $78,%xmm0,%xmm4
movdqa %xmm0,%xmm1
- pshufd $78,%xmm0,%xmm3
- pshufd $78,%xmm2,%xmm4
- pxor %xmm0,%xmm3
- pxor %xmm2,%xmm4
+ pxor %xmm0,%xmm4
.byte 102,15,58,68,194,0
.byte 102,15,58,68,202,17
-.byte 102,15,58,68,220,0
- xorps %xmm0,%xmm3
- xorps %xmm1,%xmm3
- movdqa %xmm3,%xmm4
- psrldq $8,%xmm3
- pslldq $8,%xmm4
- pxor %xmm3,%xmm1
- pxor %xmm4,%xmm0
- pxor %xmm6,%xmm0
- pxor %xmm7,%xmm1
- movdqa %xmm0,%xmm3
- psllq $1,%xmm0
+.byte 102,15,58,68,229,16
+ movdqa (%ecx),%xmm5
+ xorps %xmm6,%xmm0
+ xorps %xmm7,%xmm1
+ pxor %xmm0,%xmm3
+ pxor %xmm1,%xmm3
+ pxor %xmm3,%xmm4
+ movdqa %xmm4,%xmm3
+ psrldq $8,%xmm4
+ pslldq $8,%xmm3
+ pxor %xmm4,%xmm1
pxor %xmm3,%xmm0
+ movdqa %xmm0,%xmm4
+ movdqa %xmm0,%xmm3
psllq $5,%xmm0
+ pxor %xmm0,%xmm3
+ psllq $1,%xmm0
pxor %xmm3,%xmm0
psllq $57,%xmm0
- movdqa %xmm0,%xmm4
+ movdqa %xmm0,%xmm3
pslldq $8,%xmm0
- psrldq $8,%xmm4
- pxor %xmm3,%xmm0
- pxor %xmm4,%xmm1
- movdqa %xmm0,%xmm4
- psrlq $5,%xmm0
+ psrldq $8,%xmm3
pxor %xmm4,%xmm0
+ pxor %xmm3,%xmm1
+ movdqa %xmm0,%xmm4
psrlq $1,%xmm0
+ pxor %xmm4,%xmm1
+ pxor %xmm0,%xmm4
+ psrlq $5,%xmm0
pxor %xmm4,%xmm0
- pxor %xmm1,%xmm4
psrlq $1,%xmm0
- pxor %xmm4,%xmm0
+ pxor %xmm1,%xmm0
testl %ebx,%ebx
jnz .L016done
movups (%edx),%xmm2
@@ -1192,25 +1187,26 @@ gcm_ghash_clmul:
pslldq $8,%xmm4
pxor %xmm3,%xmm1
pxor %xmm4,%xmm0
+ movdqa %xmm0,%xmm4
movdqa %xmm0,%xmm3
- psllq $1,%xmm0
- pxor %xmm3,%xmm0
psllq $5,%xmm0
+ pxor %xmm0,%xmm3
+ psllq $1,%xmm0
pxor %xmm3,%xmm0
psllq $57,%xmm0
- movdqa %xmm0,%xmm4
+ movdqa %xmm0,%xmm3
pslldq $8,%xmm0
- psrldq $8,%xmm4
- pxor %xmm3,%xmm0
- pxor %xmm4,%xmm1
- movdqa %xmm0,%xmm4
- psrlq $5,%xmm0
+ psrldq $8,%xmm3
pxor %xmm4,%xmm0
+ pxor %xmm3,%xmm1
+ movdqa %xmm0,%xmm4
psrlq $1,%xmm0
+ pxor %xmm4,%xmm1
+ pxor %xmm0,%xmm4
+ psrlq $5,%xmm0
pxor %xmm4,%xmm0
- pxor %xmm1,%xmm4
psrlq $1,%xmm0
- pxor %xmm4,%xmm0
+ pxor %xmm1,%xmm0
.L016done:
.byte 102,15,56,0,197
movdqu %xmm0,(%eax)
@@ -1225,12 +1221,6 @@ gcm_ghash_clmul:
.byte 15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0
.byte 1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,194
.align 64
-.Lrem_4bit:
-.long 0,0,0,471859200,0,943718400,0,610271232
-.long 0,1887436800,0,1822425088,0,1220542464,0,1423966208
-.long 0,3774873600,0,4246732800,0,3644850176,0,3311403008
-.long 0,2441084928,0,2376073216,0,2847932416,0,3051356160
-.align 64
.Lrem_8bit:
.value 0,450,900,582,1800,1738,1164,1358
.value 3600,4050,3476,3158,2328,2266,2716,2910
@@ -1264,6 +1254,12 @@ gcm_ghash_clmul:
.value 42960,42514,42068,42390,41176,41242,41820,41630
.value 46560,46114,46692,47014,45800,45866,45420,45230
.value 48112,47666,47220,47542,48376,48442,49020,48830
+.align 64
+.Lrem_4bit:
+.long 0,0,0,471859200,0,943718400,0,610271232
+.long 0,1887436800,0,1822425088,0,1220542464,0,1423966208
+.long 0,3774873600,0,4246732800,0,3644850176,0,3311403008
+.long 0,2441084928,0,2376073216,0,2847932416,0,3051356160
.byte 71,72,65,83,72,32,102,111,114,32,120,56,54,44,32,67
.byte 82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112
.byte 112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62
diff --git a/secure/lib/libcrypto/i386/rc4-586.s b/secure/lib/libcrypto/i386/rc4-586.s
index c1f70a6..e9603ae 100644
--- a/secure/lib/libcrypto/i386/rc4-586.s
+++ b/secure/lib/libcrypto/i386/rc4-586.s
@@ -30,8 +30,8 @@ RC4:
movl (%edi,%eax,4),%ecx
andl $-4,%edx
jz .L002loop1
- testl $-8,%edx
movl %ebp,32(%esp)
+ testl $-8,%edx
jz .L003go4loop4
leal OPENSSL_ia32cap_P,%ebp
btl $26,(%ebp)
@@ -370,4 +370,4 @@ RC4_options:
.byte 111,64,111,112,101,110,115,115,108,46,111,114,103,62,0
.align 64
.size RC4_options,.-.L_RC4_options_begin
-.comm OPENSSL_ia32cap_P,8,4
+.comm OPENSSL_ia32cap_P,16,4
diff --git a/secure/lib/libcrypto/i386/sha1-586.s b/secure/lib/libcrypto/i386/sha1-586.s
index ffb8883..74b1ab4 100644
--- a/secure/lib/libcrypto/i386/sha1-586.s
+++ b/secure/lib/libcrypto/i386/sha1-586.s
@@ -19,8 +19,11 @@ sha1_block_data_order:
movl 4(%esi),%edx
testl $512,%edx
jz .L001x86
+ movl 8(%esi),%ecx
testl $16777216,%eax
jz .L001x86
+ testl $536870912,%ecx
+ jnz .Lshaext_shortcut
jmp .Lssse3_shortcut
.align 16
.L001x86:
@@ -1389,9 +1392,9 @@ sha1_block_data_order:
popl %ebp
ret
.size sha1_block_data_order,.-.L_sha1_block_data_order_begin
-.type _sha1_block_data_order_ssse3,@function
+.type _sha1_block_data_order_shaext,@function
.align 16
-_sha1_block_data_order_ssse3:
+_sha1_block_data_order_shaext:
pushl %ebp
pushl %ebx
pushl %esi
@@ -1400,6 +1403,176 @@ _sha1_block_data_order_ssse3:
.L003pic_point:
popl %ebp
leal .LK_XX_XX-.L003pic_point(%ebp),%ebp
+.Lshaext_shortcut:
+ movl 20(%esp),%edi
+ movl %esp,%ebx
+ movl 24(%esp),%esi
+ movl 28(%esp),%ecx
+ subl $32,%esp
+ movdqu (%edi),%xmm0
+ movd 16(%edi),%xmm1
+ andl $-32,%esp
+ movdqa 80(%ebp),%xmm3
+ movdqu (%esi),%xmm4
+ pshufd $27,%xmm0,%xmm0
+ movdqu 16(%esi),%xmm5
+ pshufd $27,%xmm1,%xmm1
+ movdqu 32(%esi),%xmm6
+.byte 102,15,56,0,227
+ movdqu 48(%esi),%xmm7
+.byte 102,15,56,0,235
+.byte 102,15,56,0,243
+.byte 102,15,56,0,251
+ jmp .L004loop_shaext
+.align 16
+.L004loop_shaext:
+ decl %ecx
+ leal 64(%esi),%eax
+ movdqa %xmm1,(%esp)
+ paddd %xmm4,%xmm1
+ cmovnel %eax,%esi
+ movdqa %xmm0,16(%esp)
+.byte 15,56,201,229
+ movdqa %xmm0,%xmm2
+.byte 15,58,204,193,0
+.byte 15,56,200,213
+ pxor %xmm6,%xmm4
+.byte 15,56,201,238
+.byte 15,56,202,231
+ movdqa %xmm0,%xmm1
+.byte 15,58,204,194,0
+.byte 15,56,200,206
+ pxor %xmm7,%xmm5
+.byte 15,56,202,236
+.byte 15,56,201,247
+ movdqa %xmm0,%xmm2
+.byte 15,58,204,193,0
+.byte 15,56,200,215
+ pxor %xmm4,%xmm6
+.byte 15,56,201,252
+.byte 15,56,202,245
+ movdqa %xmm0,%xmm1
+.byte 15,58,204,194,0
+.byte 15,56,200,204
+ pxor %xmm5,%xmm7
+.byte 15,56,202,254
+.byte 15,56,201,229
+ movdqa %xmm0,%xmm2
+.byte 15,58,204,193,0
+.byte 15,56,200,213
+ pxor %xmm6,%xmm4
+.byte 15,56,201,238
+.byte 15,56,202,231
+ movdqa %xmm0,%xmm1
+.byte 15,58,204,194,1
+.byte 15,56,200,206
+ pxor %xmm7,%xmm5
+.byte 15,56,202,236
+.byte 15,56,201,247
+ movdqa %xmm0,%xmm2
+.byte 15,58,204,193,1
+.byte 15,56,200,215
+ pxor %xmm4,%xmm6
+.byte 15,56,201,252
+.byte 15,56,202,245
+ movdqa %xmm0,%xmm1
+.byte 15,58,204,194,1
+.byte 15,56,200,204
+ pxor %xmm5,%xmm7
+.byte 15,56,202,254
+.byte 15,56,201,229
+ movdqa %xmm0,%xmm2
+.byte 15,58,204,193,1
+.byte 15,56,200,213
+ pxor %xmm6,%xmm4
+.byte 15,56,201,238
+.byte 15,56,202,231
+ movdqa %xmm0,%xmm1
+.byte 15,58,204,194,1
+.byte 15,56,200,206
+ pxor %xmm7,%xmm5
+.byte 15,56,202,236
+.byte 15,56,201,247
+ movdqa %xmm0,%xmm2
+.byte 15,58,204,193,2
+.byte 15,56,200,215
+ pxor %xmm4,%xmm6
+.byte 15,56,201,252
+.byte 15,56,202,245
+ movdqa %xmm0,%xmm1
+.byte 15,58,204,194,2
+.byte 15,56,200,204
+ pxor %xmm5,%xmm7
+.byte 15,56,202,254
+.byte 15,56,201,229
+ movdqa %xmm0,%xmm2
+.byte 15,58,204,193,2
+.byte 15,56,200,213
+ pxor %xmm6,%xmm4
+.byte 15,56,201,238
+.byte 15,56,202,231
+ movdqa %xmm0,%xmm1
+.byte 15,58,204,194,2
+.byte 15,56,200,206
+ pxor %xmm7,%xmm5
+.byte 15,56,202,236
+.byte 15,56,201,247
+ movdqa %xmm0,%xmm2
+.byte 15,58,204,193,2
+.byte 15,56,200,215
+ pxor %xmm4,%xmm6
+.byte 15,56,201,252
+.byte 15,56,202,245
+ movdqa %xmm0,%xmm1
+.byte 15,58,204,194,3
+.byte 15,56,200,204
+ pxor %xmm5,%xmm7
+.byte 15,56,202,254
+ movdqu (%esi),%xmm4
+ movdqa %xmm0,%xmm2
+.byte 15,58,204,193,3
+.byte 15,56,200,213
+ movdqu 16(%esi),%xmm5
+.byte 102,15,56,0,227
+ movdqa %xmm0,%xmm1
+.byte 15,58,204,194,3
+.byte 15,56,200,206
+ movdqu 32(%esi),%xmm6
+.byte 102,15,56,0,235
+ movdqa %xmm0,%xmm2
+.byte 15,58,204,193,3
+.byte 15,56,200,215
+ movdqu 48(%esi),%xmm7
+.byte 102,15,56,0,243
+ movdqa %xmm0,%xmm1
+.byte 15,58,204,194,3
+ movdqa (%esp),%xmm2
+.byte 102,15,56,0,251
+.byte 15,56,200,202
+ paddd 16(%esp),%xmm0
+ jnz .L004loop_shaext
+ pshufd $27,%xmm0,%xmm0
+ pshufd $27,%xmm1,%xmm1
+ movdqu %xmm0,(%edi)
+ movd %xmm1,16(%edi)
+ movl %ebx,%esp
+ popl %edi
+ popl %esi
+ popl %ebx
+ popl %ebp
+ ret
+.size _sha1_block_data_order_shaext,.-_sha1_block_data_order_shaext
+.type _sha1_block_data_order_ssse3,@function
+.align 16
+_sha1_block_data_order_ssse3:
+ pushl %ebp
+ pushl %ebx
+ pushl %esi
+ pushl %edi
+ call .L005pic_point
+.L005pic_point:
+ popl %ebp
+ leal .LK_XX_XX-.L005pic_point(%ebp),%ebp
.Lssse3_shortcut:
movdqa (%ebp),%xmm7
movdqa 16(%ebp),%xmm0
@@ -1447,936 +1620,917 @@ _sha1_block_data_order_ssse3:
movdqa %xmm1,16(%esp)
psubd %xmm7,%xmm1
movdqa %xmm2,32(%esp)
+ movl %ecx,%ebp
psubd %xmm7,%xmm2
- movdqa %xmm1,%xmm4
- jmp .L004loop
+ xorl %edx,%ebp
+ pshufd $238,%xmm0,%xmm4
+ andl %ebp,%esi
+ jmp .L006loop
.align 16
-.L004loop:
- addl (%esp),%edi
- xorl %edx,%ecx
-.byte 102,15,58,15,224,8
- movdqa %xmm3,%xmm6
+.L006loop:
+ rorl $2,%ebx
+ xorl %edx,%esi
movl %eax,%ebp
- roll $5,%eax
+ punpcklqdq %xmm1,%xmm4
+ movdqa %xmm3,%xmm6
+ addl (%esp),%edi
+ xorl %ecx,%ebx
paddd %xmm3,%xmm7
movdqa %xmm0,64(%esp)
- andl %ecx,%esi
- xorl %edx,%ecx
+ roll $5,%eax
+ addl %esi,%edi
psrldq $4,%xmm6
- xorl %edx,%esi
- addl %eax,%edi
+ andl %ebx,%ebp
+ xorl %ecx,%ebx
pxor %xmm0,%xmm4
- rorl $2,%ebx
- addl %esi,%edi
+ addl %eax,%edi
+ rorl $7,%eax
pxor %xmm2,%xmm6
- addl 4(%esp),%edx
- xorl %ecx,%ebx
+ xorl %ecx,%ebp
movl %edi,%esi
- roll $5,%edi
+ addl 4(%esp),%edx
pxor %xmm6,%xmm4
- andl %ebx,%ebp
- xorl %ecx,%ebx
+ xorl %ebx,%eax
+ roll $5,%edi
movdqa %xmm7,48(%esp)
- xorl %ecx,%ebp
- addl %edi,%edx
- movdqa %xmm4,%xmm0
- movdqa %xmm4,%xmm6
- rorl $7,%eax
addl %ebp,%edx
- addl 8(%esp),%ecx
+ andl %eax,%esi
+ movdqa %xmm4,%xmm0
xorl %ebx,%eax
+ addl %edi,%edx
+ rorl $7,%edi
+ movdqa %xmm4,%xmm6
+ xorl %ebx,%esi
pslldq $12,%xmm0
paddd %xmm4,%xmm4
movl %edx,%ebp
- roll $5,%edx
- andl %eax,%esi
- xorl %ebx,%eax
+ addl 8(%esp),%ecx
psrld $31,%xmm6
- xorl %ebx,%esi
- addl %edx,%ecx
+ xorl %eax,%edi
+ roll $5,%edx
movdqa %xmm0,%xmm7
- rorl $7,%edi
addl %esi,%ecx
+ andl %edi,%ebp
+ xorl %eax,%edi
psrld $30,%xmm0
+ addl %edx,%ecx
+ rorl $7,%edx
por %xmm6,%xmm4
- addl 12(%esp),%ebx
- xorl %eax,%edi
+ xorl %eax,%ebp
movl %ecx,%esi
- roll $5,%ecx
+ addl 12(%esp),%ebx
pslld $2,%xmm7
+ xorl %edi,%edx
+ roll $5,%ecx
pxor %xmm0,%xmm4
- andl %edi,%ebp
- xorl %eax,%edi
movdqa 96(%esp),%xmm0
- xorl %eax,%ebp
- addl %ecx,%ebx
- pxor %xmm7,%xmm4
- movdqa %xmm2,%xmm5
- rorl $7,%edx
addl %ebp,%ebx
- addl 16(%esp),%eax
+ andl %edx,%esi
+ pxor %xmm7,%xmm4
+ pshufd $238,%xmm1,%xmm5
xorl %edi,%edx
-.byte 102,15,58,15,233,8
- movdqa %xmm4,%xmm7
+ addl %ecx,%ebx
+ rorl $7,%ecx
+ xorl %edi,%esi
movl %ebx,%ebp
- roll $5,%ebx
+ punpcklqdq %xmm2,%xmm5
+ movdqa %xmm4,%xmm7
+ addl 16(%esp),%eax
+ xorl %edx,%ecx
paddd %xmm4,%xmm0
movdqa %xmm1,80(%esp)
- andl %edx,%esi
- xorl %edi,%edx
+ roll $5,%ebx
+ addl %esi,%eax
psrldq $4,%xmm7
- xorl %edi,%esi
- addl %ebx,%eax
+ andl %ecx,%ebp
+ xorl %edx,%ecx
pxor %xmm1,%xmm5
- rorl $7,%ecx
- addl %esi,%eax
+ addl %ebx,%eax
+ rorl $7,%ebx
pxor %xmm3,%xmm7
- addl 20(%esp),%edi
- xorl %edx,%ecx
+ xorl %edx,%ebp
movl %eax,%esi
- roll $5,%eax
+ addl 20(%esp),%edi
pxor %xmm7,%xmm5
- andl %ecx,%ebp
- xorl %edx,%ecx
+ xorl %ecx,%ebx
+ roll $5,%eax
movdqa %xmm0,(%esp)
- xorl %edx,%ebp
- addl %eax,%edi
- movdqa %xmm5,%xmm1
- movdqa %xmm5,%xmm7
- rorl $7,%ebx
addl %ebp,%edi
- addl 24(%esp),%edx
+ andl %ebx,%esi
+ movdqa %xmm5,%xmm1
xorl %ecx,%ebx
+ addl %eax,%edi
+ rorl $7,%eax
+ movdqa %xmm5,%xmm7
+ xorl %ecx,%esi
pslldq $12,%xmm1
paddd %xmm5,%xmm5
movl %edi,%ebp
- roll $5,%edi
- andl %ebx,%esi
- xorl %ecx,%ebx
+ addl 24(%esp),%edx
psrld $31,%xmm7
- xorl %ecx,%esi
- addl %edi,%edx
+ xorl %ebx,%eax
+ roll $5,%edi
movdqa %xmm1,%xmm0
- rorl $7,%eax
addl %esi,%edx
+ andl %eax,%ebp
+ xorl %ebx,%eax
psrld $30,%xmm1
+ addl %edi,%edx
+ rorl $7,%edi
por %xmm7,%xmm5
- addl 28(%esp),%ecx
- xorl %ebx,%eax
+ xorl %ebx,%ebp
movl %edx,%esi
- roll $5,%edx
+ addl 28(%esp),%ecx
pslld $2,%xmm0
+ xorl %eax,%edi
+ roll $5,%edx
pxor %xmm1,%xmm5
- andl %eax,%ebp
- xorl %ebx,%eax
movdqa 112(%esp),%xmm1
- xorl %ebx,%ebp
- addl %edx,%ecx
- pxor %xmm0,%xmm5
- movdqa %xmm3,%xmm6
- rorl $7,%edi
addl %ebp,%ecx
- addl 32(%esp),%ebx
+ andl %edi,%esi
+ pxor %xmm0,%xmm5
+ pshufd $238,%xmm2,%xmm6
xorl %eax,%edi
-.byte 102,15,58,15,242,8
- movdqa %xmm5,%xmm0
+ addl %edx,%ecx
+ rorl $7,%edx
+ xorl %eax,%esi
movl %ecx,%ebp
- roll $5,%ecx
+ punpcklqdq %xmm3,%xmm6
+ movdqa %xmm5,%xmm0
+ addl 32(%esp),%ebx
+ xorl %edi,%edx
paddd %xmm5,%xmm1
movdqa %xmm2,96(%esp)
- andl %edi,%esi
- xorl %eax,%edi
+ roll $5,%ecx
+ addl %esi,%ebx
psrldq $4,%xmm0
- xorl %eax,%esi
- addl %ecx,%ebx
+ andl %edx,%ebp
+ xorl %edi,%edx
pxor %xmm2,%xmm6
- rorl $7,%edx
- addl %esi,%ebx
+ addl %ecx,%ebx
+ rorl $7,%ecx
pxor %xmm4,%xmm0
- addl 36(%esp),%eax
- xorl %edi,%edx
+ xorl %edi,%ebp
movl %ebx,%esi
- roll $5,%ebx
+ addl 36(%esp),%eax
pxor %xmm0,%xmm6
- andl %edx,%ebp
- xorl %edi,%edx
+ xorl %edx,%ecx
+ roll $5,%ebx
movdqa %xmm1,16(%esp)
- xorl %edi,%ebp
- addl %ebx,%eax
- movdqa %xmm6,%xmm2
- movdqa %xmm6,%xmm0
- rorl $7,%ecx
addl %ebp,%eax
- addl 40(%esp),%edi
+ andl %ecx,%esi
+ movdqa %xmm6,%xmm2
xorl %edx,%ecx
+ addl %ebx,%eax
+ rorl $7,%ebx
+ movdqa %xmm6,%xmm0
+ xorl %edx,%esi
pslldq $12,%xmm2
paddd %xmm6,%xmm6
movl %eax,%ebp
- roll $5,%eax
- andl %ecx,%esi
- xorl %edx,%ecx
+ addl 40(%esp),%edi
psrld $31,%xmm0
- xorl %edx,%esi
- addl %eax,%edi
+ xorl %ecx,%ebx
+ roll $5,%eax
movdqa %xmm2,%xmm1
- rorl $7,%ebx
addl %esi,%edi
+ andl %ebx,%ebp
+ xorl %ecx,%ebx
psrld $30,%xmm2
+ addl %eax,%edi
+ rorl $7,%eax
por %xmm0,%xmm6
- addl 44(%esp),%edx
- xorl %ecx,%ebx
+ xorl %ecx,%ebp
movdqa 64(%esp),%xmm0
movl %edi,%esi
- roll $5,%edi
+ addl 44(%esp),%edx
pslld $2,%xmm1
+ xorl %ebx,%eax
+ roll $5,%edi
pxor %xmm2,%xmm6
- andl %ebx,%ebp
- xorl %ecx,%ebx
movdqa 112(%esp),%xmm2
- xorl %ecx,%ebp
- addl %edi,%edx
- pxor %xmm1,%xmm6
- movdqa %xmm4,%xmm7
- rorl $7,%eax
addl %ebp,%edx
- addl 48(%esp),%ecx
+ andl %eax,%esi
+ pxor %xmm1,%xmm6
+ pshufd $238,%xmm3,%xmm7
xorl %ebx,%eax
-.byte 102,15,58,15,251,8
- movdqa %xmm6,%xmm1
+ addl %edi,%edx
+ rorl $7,%edi
+ xorl %ebx,%esi
movl %edx,%ebp
- roll $5,%edx
+ punpcklqdq %xmm4,%xmm7
+ movdqa %xmm6,%xmm1
+ addl 48(%esp),%ecx
+ xorl %eax,%edi
paddd %xmm6,%xmm2
movdqa %xmm3,64(%esp)
- andl %eax,%esi
- xorl %ebx,%eax
+ roll $5,%edx
+ addl %esi,%ecx
psrldq $4,%xmm1
- xorl %ebx,%esi
- addl %edx,%ecx
+ andl %edi,%ebp
+ xorl %eax,%edi
pxor %xmm3,%xmm7
- rorl $7,%edi
- addl %esi,%ecx
+ addl %edx,%ecx
+ rorl $7,%edx
pxor %xmm5,%xmm1
- addl 52(%esp),%ebx
- xorl %eax,%edi
+ xorl %eax,%ebp
movl %ecx,%esi
- roll $5,%ecx
+ addl 52(%esp),%ebx
pxor %xmm1,%xmm7
- andl %edi,%ebp
- xorl %eax,%edi
+ xorl %edi,%edx
+ roll $5,%ecx
movdqa %xmm2,32(%esp)
- xorl %eax,%ebp
- addl %ecx,%ebx
- movdqa %xmm7,%xmm3
- movdqa %xmm7,%xmm1
- rorl $7,%edx
addl %ebp,%ebx
- addl 56(%esp),%eax
+ andl %edx,%esi
+ movdqa %xmm7,%xmm3
xorl %edi,%edx
+ addl %ecx,%ebx
+ rorl $7,%ecx
+ movdqa %xmm7,%xmm1
+ xorl %edi,%esi
pslldq $12,%xmm3
paddd %xmm7,%xmm7
movl %ebx,%ebp
- roll $5,%ebx
- andl %edx,%esi
- xorl %edi,%edx
+ addl 56(%esp),%eax
psrld $31,%xmm1
- xorl %edi,%esi
- addl %ebx,%eax
+ xorl %edx,%ecx
+ roll $5,%ebx
movdqa %xmm3,%xmm2
- rorl $7,%ecx
addl %esi,%eax
+ andl %ecx,%ebp
+ xorl %edx,%ecx
psrld $30,%xmm3
+ addl %ebx,%eax
+ rorl $7,%ebx
por %xmm1,%xmm7
- addl 60(%esp),%edi
- xorl %edx,%ecx
+ xorl %edx,%ebp
movdqa 80(%esp),%xmm1
movl %eax,%esi
- roll $5,%eax
+ addl 60(%esp),%edi
pslld $2,%xmm2
+ xorl %ecx,%ebx
+ roll $5,%eax
pxor %xmm3,%xmm7
- andl %ecx,%ebp
- xorl %edx,%ecx
movdqa 112(%esp),%xmm3
- xorl %edx,%ebp
- addl %eax,%edi
- pxor %xmm2,%xmm7
- rorl $7,%ebx
addl %ebp,%edi
- movdqa %xmm7,%xmm2
- addl (%esp),%edx
- pxor %xmm4,%xmm0
-.byte 102,15,58,15,214,8
+ andl %ebx,%esi
+ pxor %xmm2,%xmm7
+ pshufd $238,%xmm6,%xmm2
xorl %ecx,%ebx
+ addl %eax,%edi
+ rorl $7,%eax
+ pxor %xmm4,%xmm0
+ punpcklqdq %xmm7,%xmm2
+ xorl %ecx,%esi
movl %edi,%ebp
- roll $5,%edi
+ addl (%esp),%edx
pxor %xmm1,%xmm0
movdqa %xmm4,80(%esp)
- andl %ebx,%esi
- xorl %ecx,%ebx
+ xorl %ebx,%eax
+ roll $5,%edi
movdqa %xmm3,%xmm4
+ addl %esi,%edx
paddd %xmm7,%xmm3
- xorl %ecx,%esi
- addl %edi,%edx
+ andl %eax,%ebp
pxor %xmm2,%xmm0
- rorl $7,%eax
- addl %esi,%edx
- addl 4(%esp),%ecx
xorl %ebx,%eax
+ addl %edi,%edx
+ rorl $7,%edi
+ xorl %ebx,%ebp
movdqa %xmm0,%xmm2
movdqa %xmm3,48(%esp)
movl %edx,%esi
+ addl 4(%esp),%ecx
+ xorl %eax,%edi
roll $5,%edx
- andl %eax,%ebp
- xorl %ebx,%eax
pslld $2,%xmm0
- xorl %ebx,%ebp
- addl %edx,%ecx
- psrld $30,%xmm2
- rorl $7,%edi
addl %ebp,%ecx
- addl 8(%esp),%ebx
+ andl %edi,%esi
+ psrld $30,%xmm2
xorl %eax,%edi
+ addl %edx,%ecx
+ rorl $7,%edx
+ xorl %eax,%esi
movl %ecx,%ebp
+ addl 8(%esp),%ebx
+ xorl %edi,%edx
roll $5,%ecx
por %xmm2,%xmm0
- andl %edi,%esi
- xorl %eax,%edi
+ addl %esi,%ebx
+ andl %edx,%ebp
movdqa 96(%esp),%xmm2
- xorl %eax,%esi
+ xorl %edi,%edx
addl %ecx,%ebx
- rorl $7,%edx
- addl %esi,%ebx
addl 12(%esp),%eax
- movdqa %xmm0,%xmm3
- xorl %edi,%edx
+ xorl %edi,%ebp
movl %ebx,%esi
+ pshufd $238,%xmm7,%xmm3
roll $5,%ebx
- andl %edx,%ebp
- xorl %edi,%edx
- xorl %edi,%ebp
- addl %ebx,%eax
- rorl $7,%ecx
addl %ebp,%eax
+ xorl %edx,%esi
+ rorl $7,%ecx
+ addl %ebx,%eax
addl 16(%esp),%edi
pxor %xmm5,%xmm1
-.byte 102,15,58,15,223,8
- xorl %edx,%esi
+ punpcklqdq %xmm0,%xmm3
+ xorl %ecx,%esi
movl %eax,%ebp
roll $5,%eax
pxor %xmm2,%xmm1
movdqa %xmm5,96(%esp)
- xorl %ecx,%esi
- addl %eax,%edi
+ addl %esi,%edi
+ xorl %ecx,%ebp
movdqa %xmm4,%xmm5
- paddd %xmm0,%xmm4
rorl $7,%ebx
- addl %esi,%edi
+ paddd %xmm0,%xmm4
+ addl %eax,%edi
pxor %xmm3,%xmm1
addl 20(%esp),%edx
- xorl %ecx,%ebp
+ xorl %ebx,%ebp
movl %edi,%esi
roll $5,%edi
movdqa %xmm1,%xmm3
movdqa %xmm4,(%esp)
- xorl %ebx,%ebp
- addl %edi,%edx
- rorl $7,%eax
addl %ebp,%edx
+ xorl %ebx,%esi
+ rorl $7,%eax
+ addl %edi,%edx
pslld $2,%xmm1
addl 24(%esp),%ecx
- xorl %ebx,%esi
+ xorl %eax,%esi
psrld $30,%xmm3
movl %edx,%ebp
roll $5,%edx
- xorl %eax,%esi
- addl %edx,%ecx
- rorl $7,%edi
addl %esi,%ecx
+ xorl %eax,%ebp
+ rorl $7,%edi
+ addl %edx,%ecx
por %xmm3,%xmm1
addl 28(%esp),%ebx
- xorl %eax,%ebp
+ xorl %edi,%ebp
movdqa 64(%esp),%xmm3
movl %ecx,%esi
roll $5,%ecx
- xorl %edi,%ebp
- addl %ecx,%ebx
- rorl $7,%edx
- movdqa %xmm1,%xmm4
addl %ebp,%ebx
+ xorl %edi,%esi
+ rorl $7,%edx
+ pshufd $238,%xmm0,%xmm4
+ addl %ecx,%ebx
addl 32(%esp),%eax
pxor %xmm6,%xmm2
-.byte 102,15,58,15,224,8
- xorl %edi,%esi
+ punpcklqdq %xmm1,%xmm4
+ xorl %edx,%esi
movl %ebx,%ebp
roll $5,%ebx
pxor %xmm3,%xmm2
movdqa %xmm6,64(%esp)
- xorl %edx,%esi
- addl %ebx,%eax
+ addl %esi,%eax
+ xorl %edx,%ebp
movdqa 128(%esp),%xmm6
- paddd %xmm1,%xmm5
rorl $7,%ecx
- addl %esi,%eax
+ paddd %xmm1,%xmm5
+ addl %ebx,%eax
pxor %xmm4,%xmm2
addl 36(%esp),%edi
- xorl %edx,%ebp
+ xorl %ecx,%ebp
movl %eax,%esi
roll $5,%eax
movdqa %xmm2,%xmm4
movdqa %xmm5,16(%esp)
- xorl %ecx,%ebp
- addl %eax,%edi
- rorl $7,%ebx
addl %ebp,%edi
+ xorl %ecx,%esi
+ rorl $7,%ebx
+ addl %eax,%edi
pslld $2,%xmm2
addl 40(%esp),%edx
- xorl %ecx,%esi
+ xorl %ebx,%esi
psrld $30,%xmm4
movl %edi,%ebp
roll $5,%edi
- xorl %ebx,%esi
- addl %edi,%edx
- rorl $7,%eax
addl %esi,%edx
+ xorl %ebx,%ebp
+ rorl $7,%eax
+ addl %edi,%edx
por %xmm4,%xmm2
addl 44(%esp),%ecx
- xorl %ebx,%ebp
+ xorl %eax,%ebp
movdqa 80(%esp),%xmm4
movl %edx,%esi
roll $5,%edx
- xorl %eax,%ebp
- addl %edx,%ecx
- rorl $7,%edi
- movdqa %xmm2,%xmm5
addl %ebp,%ecx
+ xorl %eax,%esi
+ rorl $7,%edi
+ pshufd $238,%xmm1,%xmm5
+ addl %edx,%ecx
addl 48(%esp),%ebx
pxor %xmm7,%xmm3
-.byte 102,15,58,15,233,8
- xorl %eax,%esi
+ punpcklqdq %xmm2,%xmm5
+ xorl %edi,%esi
movl %ecx,%ebp
roll $5,%ecx
pxor %xmm4,%xmm3
movdqa %xmm7,80(%esp)
- xorl %edi,%esi
- addl %ecx,%ebx
+ addl %esi,%ebx
+ xorl %edi,%ebp
movdqa %xmm6,%xmm7
- paddd %xmm2,%xmm6
rorl $7,%edx
- addl %esi,%ebx
+ paddd %xmm2,%xmm6
+ addl %ecx,%ebx
pxor %xmm5,%xmm3
addl 52(%esp),%eax
- xorl %edi,%ebp
+ xorl %edx,%ebp
movl %ebx,%esi
roll $5,%ebx
movdqa %xmm3,%xmm5
movdqa %xmm6,32(%esp)
- xorl %edx,%ebp
- addl %ebx,%eax
- rorl $7,%ecx
addl %ebp,%eax
+ xorl %edx,%esi
+ rorl $7,%ecx
+ addl %ebx,%eax
pslld $2,%xmm3
addl 56(%esp),%edi
- xorl %edx,%esi
+ xorl %ecx,%esi
psrld $30,%xmm5
movl %eax,%ebp
roll $5,%eax
- xorl %ecx,%esi
- addl %eax,%edi
- rorl $7,%ebx
addl %esi,%edi
+ xorl %ecx,%ebp
+ rorl $7,%ebx
+ addl %eax,%edi
por %xmm5,%xmm3
addl 60(%esp),%edx
- xorl %ecx,%ebp
+ xorl %ebx,%ebp
movdqa 96(%esp),%xmm5
movl %edi,%esi
roll $5,%edi
- xorl %ebx,%ebp
- addl %edi,%edx
- rorl $7,%eax
- movdqa %xmm3,%xmm6
addl %ebp,%edx
+ xorl %ebx,%esi
+ rorl $7,%eax
+ pshufd $238,%xmm2,%xmm6
+ addl %edi,%edx
addl (%esp),%ecx
pxor %xmm0,%xmm4
-.byte 102,15,58,15,242,8
- xorl %ebx,%esi
+ punpcklqdq %xmm3,%xmm6
+ xorl %eax,%esi
movl %edx,%ebp
roll $5,%edx
pxor %xmm5,%xmm4
movdqa %xmm0,96(%esp)
- xorl %eax,%esi
- addl %edx,%ecx
+ addl %esi,%ecx
+ xorl %eax,%ebp
movdqa %xmm7,%xmm0
- paddd %xmm3,%xmm7
rorl $7,%edi
- addl %esi,%ecx
+ paddd %xmm3,%xmm7
+ addl %edx,%ecx
pxor %xmm6,%xmm4
addl 4(%esp),%ebx
- xorl %eax,%ebp
+ xorl %edi,%ebp
movl %ecx,%esi
roll $5,%ecx
movdqa %xmm4,%xmm6
movdqa %xmm7,48(%esp)
- xorl %edi,%ebp
- addl %ecx,%ebx
- rorl $7,%edx
addl %ebp,%ebx
+ xorl %edi,%esi
+ rorl $7,%edx
+ addl %ecx,%ebx
pslld $2,%xmm4
addl 8(%esp),%eax
- xorl %edi,%esi
+ xorl %edx,%esi
psrld $30,%xmm6
movl %ebx,%ebp
roll $5,%ebx
- xorl %edx,%esi
- addl %ebx,%eax
- rorl $7,%ecx
addl %esi,%eax
+ xorl %edx,%ebp
+ rorl $7,%ecx
+ addl %ebx,%eax
por %xmm6,%xmm4
addl 12(%esp),%edi
- xorl %edx,%ebp
+ xorl %ecx,%ebp
movdqa 64(%esp),%xmm6
movl %eax,%esi
roll $5,%eax
- xorl %ecx,%ebp
- addl %eax,%edi
- rorl $7,%ebx
- movdqa %xmm4,%xmm7
addl %ebp,%edi
+ xorl %ecx,%esi
+ rorl $7,%ebx
+ pshufd $238,%xmm3,%xmm7
+ addl %eax,%edi
addl 16(%esp),%edx
pxor %xmm1,%xmm5
-.byte 102,15,58,15,251,8
- xorl %ecx,%esi
+ punpcklqdq %xmm4,%xmm7
+ xorl %ebx,%esi
movl %edi,%ebp
roll $5,%edi
pxor %xmm6,%xmm5
movdqa %xmm1,64(%esp)
- xorl %ebx,%esi
- addl %edi,%edx
+ addl %esi,%edx
+ xorl %ebx,%ebp
movdqa %xmm0,%xmm1
- paddd %xmm4,%xmm0
rorl $7,%eax
- addl %esi,%edx
+ paddd %xmm4,%xmm0
+ addl %edi,%edx
pxor %xmm7,%xmm5
addl 20(%esp),%ecx
- xorl %ebx,%ebp
+ xorl %eax,%ebp
movl %edx,%esi
roll $5,%edx
movdqa %xmm5,%xmm7
movdqa %xmm0,(%esp)
- xorl %eax,%ebp
- addl %edx,%ecx
- rorl $7,%edi
addl %ebp,%ecx
+ xorl %eax,%esi
+ rorl $7,%edi
+ addl %edx,%ecx
pslld $2,%xmm5
addl 24(%esp),%ebx
- xorl %eax,%esi
+ xorl %edi,%esi
psrld $30,%xmm7
movl %ecx,%ebp
roll $5,%ecx
- xorl %edi,%esi
- addl %ecx,%ebx
- rorl $7,%edx
addl %esi,%ebx
+ xorl %edi,%ebp
+ rorl $7,%edx
+ addl %ecx,%ebx
por %xmm7,%xmm5
addl 28(%esp),%eax
- xorl %edi,%ebp
movdqa 80(%esp),%xmm7
+ rorl $7,%ecx
movl %ebx,%esi
- roll $5,%ebx
xorl %edx,%ebp
- addl %ebx,%eax
- rorl $7,%ecx
- movdqa %xmm5,%xmm0
+ roll $5,%ebx
+ pshufd $238,%xmm4,%xmm0
addl %ebp,%eax
- movl %ecx,%ebp
- pxor %xmm2,%xmm6
-.byte 102,15,58,15,196,8
+ xorl %ecx,%esi
xorl %edx,%ecx
+ addl %ebx,%eax
addl 32(%esp),%edi
- andl %edx,%ebp
- pxor %xmm7,%xmm6
- movdqa %xmm2,80(%esp)
+ pxor %xmm2,%xmm6
+ punpcklqdq %xmm5,%xmm0
andl %ecx,%esi
+ xorl %edx,%ecx
rorl $7,%ebx
- movdqa %xmm1,%xmm2
- paddd %xmm5,%xmm1
- addl %ebp,%edi
+ pxor %xmm7,%xmm6
+ movdqa %xmm2,80(%esp)
movl %eax,%ebp
- pxor %xmm0,%xmm6
+ xorl %ecx,%esi
roll $5,%eax
+ movdqa %xmm1,%xmm2
addl %esi,%edi
- xorl %edx,%ecx
+ paddd %xmm5,%xmm1
+ xorl %ebx,%ebp
+ pxor %xmm0,%xmm6
+ xorl %ecx,%ebx
addl %eax,%edi
+ addl 36(%esp),%edx
+ andl %ebx,%ebp
movdqa %xmm6,%xmm0
movdqa %xmm1,16(%esp)
- movl %ebx,%esi
xorl %ecx,%ebx
- addl 36(%esp),%edx
- andl %ecx,%esi
- pslld $2,%xmm6
- andl %ebx,%ebp
rorl $7,%eax
- psrld $30,%xmm0
- addl %esi,%edx
movl %edi,%esi
+ xorl %ebx,%ebp
roll $5,%edi
+ pslld $2,%xmm6
addl %ebp,%edx
- xorl %ecx,%ebx
- addl %edi,%edx
- por %xmm0,%xmm6
- movl %eax,%ebp
+ xorl %eax,%esi
+ psrld $30,%xmm0
xorl %ebx,%eax
- movdqa 96(%esp),%xmm0
+ addl %edi,%edx
addl 40(%esp),%ecx
- andl %ebx,%ebp
andl %eax,%esi
+ xorl %ebx,%eax
rorl $7,%edi
- addl %ebp,%ecx
- movdqa %xmm6,%xmm1
+ por %xmm0,%xmm6
movl %edx,%ebp
+ xorl %eax,%esi
+ movdqa 96(%esp),%xmm0
roll $5,%edx
addl %esi,%ecx
- xorl %ebx,%eax
- addl %edx,%ecx
- movl %edi,%esi
+ xorl %edi,%ebp
xorl %eax,%edi
+ addl %edx,%ecx
+ pshufd $238,%xmm5,%xmm1
addl 44(%esp),%ebx
- andl %eax,%esi
andl %edi,%ebp
+ xorl %eax,%edi
rorl $7,%edx
- addl %esi,%ebx
movl %ecx,%esi
+ xorl %edi,%ebp
roll $5,%ecx
addl %ebp,%ebx
- xorl %eax,%edi
+ xorl %edx,%esi
+ xorl %edi,%edx
addl %ecx,%ebx
- movl %edx,%ebp
+ addl 48(%esp),%eax
pxor %xmm3,%xmm7
-.byte 102,15,58,15,205,8
+ punpcklqdq %xmm6,%xmm1
+ andl %edx,%esi
xorl %edi,%edx
- addl 48(%esp),%eax
- andl %edi,%ebp
+ rorl $7,%ecx
pxor %xmm0,%xmm7
movdqa %xmm3,96(%esp)
- andl %edx,%esi
- rorl $7,%ecx
- movdqa 144(%esp),%xmm3
- paddd %xmm6,%xmm2
- addl %ebp,%eax
movl %ebx,%ebp
- pxor %xmm1,%xmm7
+ xorl %edx,%esi
roll $5,%ebx
+ movdqa 144(%esp),%xmm3
addl %esi,%eax
- xorl %edi,%edx
+ paddd %xmm6,%xmm2
+ xorl %ecx,%ebp
+ pxor %xmm1,%xmm7
+ xorl %edx,%ecx
addl %ebx,%eax
+ addl 52(%esp),%edi
+ andl %ecx,%ebp
movdqa %xmm7,%xmm1
movdqa %xmm2,32(%esp)
- movl %ecx,%esi
xorl %edx,%ecx
- addl 52(%esp),%edi
- andl %edx,%esi
- pslld $2,%xmm7
- andl %ecx,%ebp
rorl $7,%ebx
- psrld $30,%xmm1
- addl %esi,%edi
movl %eax,%esi
+ xorl %ecx,%ebp
roll $5,%eax
+ pslld $2,%xmm7
addl %ebp,%edi
- xorl %edx,%ecx
- addl %eax,%edi
- por %xmm1,%xmm7
- movl %ebx,%ebp
+ xorl %ebx,%esi
+ psrld $30,%xmm1
xorl %ecx,%ebx
- movdqa 64(%esp),%xmm1
+ addl %eax,%edi
addl 56(%esp),%edx
- andl %ecx,%ebp
andl %ebx,%esi
+ xorl %ecx,%ebx
rorl $7,%eax
- addl %ebp,%edx
- movdqa %xmm7,%xmm2
+ por %xmm1,%xmm7
movl %edi,%ebp
+ xorl %ebx,%esi
+ movdqa 64(%esp),%xmm1
roll $5,%edi
addl %esi,%edx
- xorl %ecx,%ebx
- addl %edi,%edx
- movl %eax,%esi
+ xorl %eax,%ebp
xorl %ebx,%eax
+ addl %edi,%edx
+ pshufd $238,%xmm6,%xmm2
addl 60(%esp),%ecx
- andl %ebx,%esi
andl %eax,%ebp
+ xorl %ebx,%eax
rorl $7,%edi
- addl %esi,%ecx
movl %edx,%esi
+ xorl %eax,%ebp
roll $5,%edx
addl %ebp,%ecx
- xorl %ebx,%eax
+ xorl %edi,%esi
+ xorl %eax,%edi
addl %edx,%ecx
- movl %edi,%ebp
+ addl (%esp),%ebx
pxor %xmm4,%xmm0
-.byte 102,15,58,15,214,8
+ punpcklqdq %xmm7,%xmm2
+ andl %edi,%esi
xorl %eax,%edi
- addl (%esp),%ebx
- andl %eax,%ebp
+ rorl $7,%edx
pxor %xmm1,%xmm0
movdqa %xmm4,64(%esp)
- andl %edi,%esi
- rorl $7,%edx
- movdqa %xmm3,%xmm4
- paddd %xmm7,%xmm3
- addl %ebp,%ebx
movl %ecx,%ebp
- pxor %xmm2,%xmm0
+ xorl %edi,%esi
roll $5,%ecx
+ movdqa %xmm3,%xmm4
addl %esi,%ebx
- xorl %eax,%edi
+ paddd %xmm7,%xmm3
+ xorl %edx,%ebp
+ pxor %xmm2,%xmm0
+ xorl %edi,%edx
addl %ecx,%ebx
+ addl 4(%esp),%eax
+ andl %edx,%ebp
movdqa %xmm0,%xmm2
movdqa %xmm3,48(%esp)
- movl %edx,%esi
xorl %edi,%edx
- addl 4(%esp),%eax
- andl %edi,%esi
- pslld $2,%xmm0
- andl %edx,%ebp
rorl $7,%ecx
- psrld $30,%xmm2
- addl %esi,%eax
movl %ebx,%esi
+ xorl %edx,%ebp
roll $5,%ebx
+ pslld $2,%xmm0
addl %ebp,%eax
- xorl %edi,%edx
- addl %ebx,%eax
- por %xmm2,%xmm0
- movl %ecx,%ebp
+ xorl %ecx,%esi
+ psrld $30,%xmm2
xorl %edx,%ecx
- movdqa 80(%esp),%xmm2
+ addl %ebx,%eax
addl 8(%esp),%edi
- andl %edx,%ebp
andl %ecx,%esi
+ xorl %edx,%ecx
rorl $7,%ebx
- addl %ebp,%edi
- movdqa %xmm0,%xmm3
+ por %xmm2,%xmm0
movl %eax,%ebp
+ xorl %ecx,%esi
+ movdqa 80(%esp),%xmm2
roll $5,%eax
addl %esi,%edi
- xorl %edx,%ecx
- addl %eax,%edi
- movl %ebx,%esi
+ xorl %ebx,%ebp
xorl %ecx,%ebx
+ addl %eax,%edi
+ pshufd $238,%xmm7,%xmm3
addl 12(%esp),%edx
- andl %ecx,%esi
andl %ebx,%ebp
+ xorl %ecx,%ebx
rorl $7,%eax
- addl %esi,%edx
movl %edi,%esi
+ xorl %ebx,%ebp
roll $5,%edi
addl %ebp,%edx
- xorl %ecx,%ebx
+ xorl %eax,%esi
+ xorl %ebx,%eax
addl %edi,%edx
- movl %eax,%ebp
+ addl 16(%esp),%ecx
pxor %xmm5,%xmm1
-.byte 102,15,58,15,223,8
+ punpcklqdq %xmm0,%xmm3
+ andl %eax,%esi
xorl %ebx,%eax
- addl 16(%esp),%ecx
- andl %ebx,%ebp
+ rorl $7,%edi
pxor %xmm2,%xmm1
movdqa %xmm5,80(%esp)
- andl %eax,%esi
- rorl $7,%edi
- movdqa %xmm4,%xmm5
- paddd %xmm0,%xmm4
- addl %ebp,%ecx
movl %edx,%ebp
- pxor %xmm3,%xmm1
+ xorl %eax,%esi
roll $5,%edx
+ movdqa %xmm4,%xmm5
addl %esi,%ecx
- xorl %ebx,%eax
+ paddd %xmm0,%xmm4
+ xorl %edi,%ebp
+ pxor %xmm3,%xmm1
+ xorl %eax,%edi
addl %edx,%ecx
+ addl 20(%esp),%ebx
+ andl %edi,%ebp
movdqa %xmm1,%xmm3
movdqa %xmm4,(%esp)
- movl %edi,%esi
xorl %eax,%edi
- addl 20(%esp),%ebx
- andl %eax,%esi
- pslld $2,%xmm1
- andl %edi,%ebp
rorl $7,%edx
- psrld $30,%xmm3
- addl %esi,%ebx
movl %ecx,%esi
+ xorl %edi,%ebp
roll $5,%ecx
+ pslld $2,%xmm1
addl %ebp,%ebx
- xorl %eax,%edi
- addl %ecx,%ebx
- por %xmm3,%xmm1
- movl %edx,%ebp
+ xorl %edx,%esi
+ psrld $30,%xmm3
xorl %edi,%edx
- movdqa 96(%esp),%xmm3
+ addl %ecx,%ebx
addl 24(%esp),%eax
- andl %edi,%ebp
andl %edx,%esi
+ xorl %edi,%edx
rorl $7,%ecx
- addl %ebp,%eax
- movdqa %xmm1,%xmm4
+ por %xmm3,%xmm1
movl %ebx,%ebp
+ xorl %edx,%esi
+ movdqa 96(%esp),%xmm3
roll $5,%ebx
addl %esi,%eax
- xorl %edi,%edx
- addl %ebx,%eax
- movl %ecx,%esi
+ xorl %ecx,%ebp
xorl %edx,%ecx
+ addl %ebx,%eax
+ pshufd $238,%xmm0,%xmm4
addl 28(%esp),%edi
- andl %edx,%esi
andl %ecx,%ebp
+ xorl %edx,%ecx
rorl $7,%ebx
- addl %esi,%edi
movl %eax,%esi
+ xorl %ecx,%ebp
roll $5,%eax
addl %ebp,%edi
- xorl %edx,%ecx
+ xorl %ebx,%esi
+ xorl %ecx,%ebx
addl %eax,%edi
- movl %ebx,%ebp
+ addl 32(%esp),%edx
pxor %xmm6,%xmm2
-.byte 102,15,58,15,224,8
+ punpcklqdq %xmm1,%xmm4
+ andl %ebx,%esi
xorl %ecx,%ebx
- addl 32(%esp),%edx
- andl %ecx,%ebp
+ rorl $7,%eax
pxor %xmm3,%xmm2
movdqa %xmm6,96(%esp)
- andl %ebx,%esi
- rorl $7,%eax
- movdqa %xmm5,%xmm6
- paddd %xmm1,%xmm5
- addl %ebp,%edx
movl %edi,%ebp
- pxor %xmm4,%xmm2
+ xorl %ebx,%esi
roll $5,%edi
+ movdqa %xmm5,%xmm6
addl %esi,%edx
- xorl %ecx,%ebx
+ paddd %xmm1,%xmm5
+ xorl %eax,%ebp
+ pxor %xmm4,%xmm2
+ xorl %ebx,%eax
addl %edi,%edx
+ addl 36(%esp),%ecx
+ andl %eax,%ebp
movdqa %xmm2,%xmm4
movdqa %xmm5,16(%esp)
- movl %eax,%esi
xorl %ebx,%eax
- addl 36(%esp),%ecx
- andl %ebx,%esi
- pslld $2,%xmm2
- andl %eax,%ebp
rorl $7,%edi
- psrld $30,%xmm4
- addl %esi,%ecx
movl %edx,%esi
+ xorl %eax,%ebp
roll $5,%edx
+ pslld $2,%xmm2
addl %ebp,%ecx
- xorl %ebx,%eax
- addl %edx,%ecx
- por %xmm4,%xmm2
- movl %edi,%ebp
+ xorl %edi,%esi
+ psrld $30,%xmm4
xorl %eax,%edi
- movdqa 64(%esp),%xmm4
+ addl %edx,%ecx
addl 40(%esp),%ebx
- andl %eax,%ebp
andl %edi,%esi
+ xorl %eax,%edi
rorl $7,%edx
- addl %ebp,%ebx
- movdqa %xmm2,%xmm5
+ por %xmm4,%xmm2
movl %ecx,%ebp
+ xorl %edi,%esi
+ movdqa 64(%esp),%xmm4
roll $5,%ecx
addl %esi,%ebx
- xorl %eax,%edi
- addl %ecx,%ebx
- movl %edx,%esi
+ xorl %edx,%ebp
xorl %edi,%edx
+ addl %ecx,%ebx
+ pshufd $238,%xmm1,%xmm5
addl 44(%esp),%eax
- andl %edi,%esi
andl %edx,%ebp
+ xorl %edi,%edx
rorl $7,%ecx
- addl %esi,%eax
movl %ebx,%esi
+ xorl %edx,%ebp
roll $5,%ebx
addl %ebp,%eax
- xorl %edi,%edx
+ xorl %edx,%esi
addl %ebx,%eax
addl 48(%esp),%edi
pxor %xmm7,%xmm3
-.byte 102,15,58,15,233,8
- xorl %edx,%esi
+ punpcklqdq %xmm2,%xmm5
+ xorl %ecx,%esi
movl %eax,%ebp
roll $5,%eax
pxor %xmm4,%xmm3
movdqa %xmm7,64(%esp)
- xorl %ecx,%esi
- addl %eax,%edi
+ addl %esi,%edi
+ xorl %ecx,%ebp
movdqa %xmm6,%xmm7
- paddd %xmm2,%xmm6
rorl $7,%ebx
- addl %esi,%edi
+ paddd %xmm2,%xmm6
+ addl %eax,%edi
pxor %xmm5,%xmm3
addl 52(%esp),%edx
- xorl %ecx,%ebp
+ xorl %ebx,%ebp
movl %edi,%esi
roll $5,%edi
movdqa %xmm3,%xmm5
movdqa %xmm6,32(%esp)
- xorl %ebx,%ebp
- addl %edi,%edx
- rorl $7,%eax
addl %ebp,%edx
+ xorl %ebx,%esi
+ rorl $7,%eax
+ addl %edi,%edx
pslld $2,%xmm3
addl 56(%esp),%ecx
- xorl %ebx,%esi
+ xorl %eax,%esi
psrld $30,%xmm5
movl %edx,%ebp
roll $5,%edx
- xorl %eax,%esi
- addl %edx,%ecx
- rorl $7,%edi
addl %esi,%ecx
+ xorl %eax,%ebp
+ rorl $7,%edi
+ addl %edx,%ecx
por %xmm5,%xmm3
addl 60(%esp),%ebx
- xorl %eax,%ebp
+ xorl %edi,%ebp
movl %ecx,%esi
roll $5,%ecx
- xorl %edi,%ebp
- addl %ecx,%ebx
- rorl $7,%edx
addl %ebp,%ebx
- addl (%esp),%eax
- paddd %xmm3,%xmm7
xorl %edi,%esi
+ rorl $7,%edx
+ addl %ecx,%ebx
+ addl (%esp),%eax
+ xorl %edx,%esi
movl %ebx,%ebp
roll $5,%ebx
- xorl %edx,%esi
- movdqa %xmm7,48(%esp)
- addl %ebx,%eax
- rorl $7,%ecx
addl %esi,%eax
- addl 4(%esp),%edi
xorl %edx,%ebp
+ rorl $7,%ecx
+ paddd %xmm3,%xmm7
+ addl %ebx,%eax
+ addl 4(%esp),%edi
+ xorl %ecx,%ebp
movl %eax,%esi
+ movdqa %xmm7,48(%esp)
roll $5,%eax
- xorl %ecx,%ebp
- addl %eax,%edi
- rorl $7,%ebx
addl %ebp,%edi
- addl 8(%esp),%edx
xorl %ecx,%esi
+ rorl $7,%ebx
+ addl %eax,%edi
+ addl 8(%esp),%edx
+ xorl %ebx,%esi
movl %edi,%ebp
roll $5,%edi
- xorl %ebx,%esi
- addl %edi,%edx
- rorl $7,%eax
addl %esi,%edx
- addl 12(%esp),%ecx
xorl %ebx,%ebp
+ rorl $7,%eax
+ addl %edi,%edx
+ addl 12(%esp),%ecx
+ xorl %eax,%ebp
movl %edx,%esi
roll $5,%edx
- xorl %eax,%ebp
- addl %edx,%ecx
- rorl $7,%edi
addl %ebp,%ecx
+ xorl %eax,%esi
+ rorl $7,%edi
+ addl %edx,%ecx
movl 196(%esp),%ebp
cmpl 200(%esp),%ebp
- je .L005done
+ je .L007done
movdqa 160(%esp),%xmm7
movdqa 176(%esp),%xmm6
movdqu (%ebp),%xmm0
@@ -2388,113 +2542,112 @@ _sha1_block_data_order_ssse3:
movl %ebp,196(%esp)
movdqa %xmm7,96(%esp)
addl 16(%esp),%ebx
- xorl %eax,%esi
-.byte 102,15,56,0,206
+ xorl %edi,%esi
movl %ecx,%ebp
roll $5,%ecx
- paddd %xmm7,%xmm0
- xorl %edi,%esi
- addl %ecx,%ebx
- rorl $7,%edx
addl %esi,%ebx
- movdqa %xmm0,(%esp)
- addl 20(%esp),%eax
xorl %edi,%ebp
- psubd %xmm7,%xmm0
+ rorl $7,%edx
+.byte 102,15,56,0,206
+ addl %ecx,%ebx
+ addl 20(%esp),%eax
+ xorl %edx,%ebp
movl %ebx,%esi
+ paddd %xmm7,%xmm0
roll $5,%ebx
- xorl %edx,%ebp
- addl %ebx,%eax
- rorl $7,%ecx
addl %ebp,%eax
- addl 24(%esp),%edi
xorl %edx,%esi
+ rorl $7,%ecx
+ movdqa %xmm0,(%esp)
+ addl %ebx,%eax
+ addl 24(%esp),%edi
+ xorl %ecx,%esi
movl %eax,%ebp
+ psubd %xmm7,%xmm0
roll $5,%eax
- xorl %ecx,%esi
- addl %eax,%edi
- rorl $7,%ebx
addl %esi,%edi
- addl 28(%esp),%edx
xorl %ecx,%ebp
+ rorl $7,%ebx
+ addl %eax,%edi
+ addl 28(%esp),%edx
+ xorl %ebx,%ebp
movl %edi,%esi
roll $5,%edi
- xorl %ebx,%ebp
- addl %edi,%edx
- rorl $7,%eax
addl %ebp,%edx
- addl 32(%esp),%ecx
xorl %ebx,%esi
-.byte 102,15,56,0,214
+ rorl $7,%eax
+ addl %edi,%edx
+ addl 32(%esp),%ecx
+ xorl %eax,%esi
movl %edx,%ebp
roll $5,%edx
- paddd %xmm7,%xmm1
- xorl %eax,%esi
- addl %edx,%ecx
- rorl $7,%edi
addl %esi,%ecx
- movdqa %xmm1,16(%esp)
- addl 36(%esp),%ebx
xorl %eax,%ebp
- psubd %xmm7,%xmm1
+ rorl $7,%edi
+.byte 102,15,56,0,214
+ addl %edx,%ecx
+ addl 36(%esp),%ebx
+ xorl %edi,%ebp
movl %ecx,%esi
+ paddd %xmm7,%xmm1
roll $5,%ecx
- xorl %edi,%ebp
- addl %ecx,%ebx
- rorl $7,%edx
addl %ebp,%ebx
- addl 40(%esp),%eax
xorl %edi,%esi
+ rorl $7,%edx
+ movdqa %xmm1,16(%esp)
+ addl %ecx,%ebx
+ addl 40(%esp),%eax
+ xorl %edx,%esi
movl %ebx,%ebp
+ psubd %xmm7,%xmm1
roll $5,%ebx
- xorl %edx,%esi
- addl %ebx,%eax
- rorl $7,%ecx
addl %esi,%eax
- addl 44(%esp),%edi
xorl %edx,%ebp
+ rorl $7,%ecx
+ addl %ebx,%eax
+ addl 44(%esp),%edi
+ xorl %ecx,%ebp
movl %eax,%esi
roll $5,%eax
- xorl %ecx,%ebp
- addl %eax,%edi
- rorl $7,%ebx
addl %ebp,%edi
- addl 48(%esp),%edx
xorl %ecx,%esi
-.byte 102,15,56,0,222
+ rorl $7,%ebx
+ addl %eax,%edi
+ addl 48(%esp),%edx
+ xorl %ebx,%esi
movl %edi,%ebp
roll $5,%edi
- paddd %xmm7,%xmm2
- xorl %ebx,%esi
- addl %edi,%edx
- rorl $7,%eax
addl %esi,%edx
- movdqa %xmm2,32(%esp)
- addl 52(%esp),%ecx
xorl %ebx,%ebp
- psubd %xmm7,%xmm2
+ rorl $7,%eax
+.byte 102,15,56,0,222
+ addl %edi,%edx
+ addl 52(%esp),%ecx
+ xorl %eax,%ebp
movl %edx,%esi
+ paddd %xmm7,%xmm2
roll $5,%edx
- xorl %eax,%ebp
- addl %edx,%ecx
- rorl $7,%edi
addl %ebp,%ecx
- addl 56(%esp),%ebx
xorl %eax,%esi
+ rorl $7,%edi
+ movdqa %xmm2,32(%esp)
+ addl %edx,%ecx
+ addl 56(%esp),%ebx
+ xorl %edi,%esi
movl %ecx,%ebp
+ psubd %xmm7,%xmm2
roll $5,%ecx
- xorl %edi,%esi
- addl %ecx,%ebx
- rorl $7,%edx
addl %esi,%ebx
- addl 60(%esp),%eax
xorl %edi,%ebp
+ rorl $7,%edx
+ addl %ecx,%ebx
+ addl 60(%esp),%eax
+ xorl %edx,%ebp
movl %ebx,%esi
roll $5,%ebx
- xorl %edx,%ebp
- addl %ebx,%eax
- rorl $7,%ecx
addl %ebp,%eax
+ rorl $7,%ecx
+ addl %ebx,%eax
movl 192(%esp),%ebp
addl (%ebp),%eax
addl 4(%ebp),%esi
@@ -2504,109 +2657,112 @@ _sha1_block_data_order_ssse3:
movl %esi,4(%ebp)
addl 16(%ebp),%edi
movl %ecx,8(%ebp)
- movl %esi,%ebx
+ movl %ecx,%ebx
movl %edx,12(%ebp)
+ xorl %edx,%ebx
movl %edi,16(%ebp)
- movdqa %xmm1,%xmm4
- jmp .L004loop
+ movl %esi,%ebp
+ pshufd $238,%xmm0,%xmm4
+ andl %ebx,%esi
+ movl %ebp,%ebx
+ jmp .L006loop
.align 16
-.L005done:
+.L007done:
addl 16(%esp),%ebx
- xorl %eax,%esi
+ xorl %edi,%esi
movl %ecx,%ebp
roll $5,%ecx
- xorl %edi,%esi
- addl %ecx,%ebx
- rorl $7,%edx
addl %esi,%ebx
- addl 20(%esp),%eax
xorl %edi,%ebp
+ rorl $7,%edx
+ addl %ecx,%ebx
+ addl 20(%esp),%eax
+ xorl %edx,%ebp
movl %ebx,%esi
roll $5,%ebx
- xorl %edx,%ebp
- addl %ebx,%eax
- rorl $7,%ecx
addl %ebp,%eax
- addl 24(%esp),%edi
xorl %edx,%esi
+ rorl $7,%ecx
+ addl %ebx,%eax
+ addl 24(%esp),%edi
+ xorl %ecx,%esi
movl %eax,%ebp
roll $5,%eax
- xorl %ecx,%esi
- addl %eax,%edi
- rorl $7,%ebx
addl %esi,%edi
- addl 28(%esp),%edx
xorl %ecx,%ebp
+ rorl $7,%ebx
+ addl %eax,%edi
+ addl 28(%esp),%edx
+ xorl %ebx,%ebp
movl %edi,%esi
roll $5,%edi
- xorl %ebx,%ebp
- addl %edi,%edx
- rorl $7,%eax
addl %ebp,%edx
- addl 32(%esp),%ecx
xorl %ebx,%esi
+ rorl $7,%eax
+ addl %edi,%edx
+ addl 32(%esp),%ecx
+ xorl %eax,%esi
movl %edx,%ebp
roll $5,%edx
- xorl %eax,%esi
- addl %edx,%ecx
- rorl $7,%edi
addl %esi,%ecx
- addl 36(%esp),%ebx
xorl %eax,%ebp
+ rorl $7,%edi
+ addl %edx,%ecx
+ addl 36(%esp),%ebx
+ xorl %edi,%ebp
movl %ecx,%esi
roll $5,%ecx
- xorl %edi,%ebp
- addl %ecx,%ebx
- rorl $7,%edx
addl %ebp,%ebx
- addl 40(%esp),%eax
xorl %edi,%esi
+ rorl $7,%edx
+ addl %ecx,%ebx
+ addl 40(%esp),%eax
+ xorl %edx,%esi
movl %ebx,%ebp
roll $5,%ebx
- xorl %edx,%esi
- addl %ebx,%eax
- rorl $7,%ecx
addl %esi,%eax
- addl 44(%esp),%edi
xorl %edx,%ebp
+ rorl $7,%ecx
+ addl %ebx,%eax
+ addl 44(%esp),%edi
+ xorl %ecx,%ebp
movl %eax,%esi
roll $5,%eax
- xorl %ecx,%ebp
- addl %eax,%edi
- rorl $7,%ebx
addl %ebp,%edi
- addl 48(%esp),%edx
xorl %ecx,%esi
+ rorl $7,%ebx
+ addl %eax,%edi
+ addl 48(%esp),%edx
+ xorl %ebx,%esi
movl %edi,%ebp
roll $5,%edi
- xorl %ebx,%esi
- addl %edi,%edx
- rorl $7,%eax
addl %esi,%edx
- addl 52(%esp),%ecx
xorl %ebx,%ebp
+ rorl $7,%eax
+ addl %edi,%edx
+ addl 52(%esp),%ecx
+ xorl %eax,%ebp
movl %edx,%esi
roll $5,%edx
- xorl %eax,%ebp
- addl %edx,%ecx
- rorl $7,%edi
addl %ebp,%ecx
- addl 56(%esp),%ebx
xorl %eax,%esi
+ rorl $7,%edi
+ addl %edx,%ecx
+ addl 56(%esp),%ebx
+ xorl %edi,%esi
movl %ecx,%ebp
roll $5,%ecx
- xorl %edi,%esi
- addl %ecx,%ebx
- rorl $7,%edx
addl %esi,%ebx
- addl 60(%esp),%eax
xorl %edi,%ebp
+ rorl $7,%edx
+ addl %ecx,%ebx
+ addl 60(%esp),%eax
+ xorl %edx,%ebp
movl %ebx,%esi
roll $5,%ebx
- xorl %edx,%ebp
- addl %ebx,%eax
- rorl $7,%ecx
addl %ebp,%eax
+ rorl $7,%ecx
+ addl %ebx,%eax
movl 192(%esp),%ebp
addl (%ebp),%eax
movl 204(%esp),%esp
@@ -2632,8 +2788,9 @@ _sha1_block_data_order_ssse3:
.long 2400959708,2400959708,2400959708,2400959708
.long 3395469782,3395469782,3395469782,3395469782
.long 66051,67438087,134810123,202182159
+.byte 15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0
.byte 83,72,65,49,32,98,108,111,99,107,32,116,114,97,110,115
.byte 102,111,114,109,32,102,111,114,32,120,56,54,44,32,67,82
.byte 89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112
.byte 114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0
-.comm OPENSSL_ia32cap_P,8,4
+.comm OPENSSL_ia32cap_P,16,4
diff --git a/secure/lib/libcrypto/i386/sha256-586.s b/secure/lib/libcrypto/i386/sha256-586.s
index 7ea3748..a3b82f8 100644
--- a/secure/lib/libcrypto/i386/sha256-586.s
+++ b/secure/lib/libcrypto/i386/sha256-586.s
@@ -26,234 +26,4553 @@ sha256_block_data_order:
movl %edi,4(%esp)
movl %eax,8(%esp)
movl %ebx,12(%esp)
+ leal OPENSSL_ia32cap_P,%edx
+ movl (%edx),%ecx
+ movl 4(%edx),%ebx
+ testl $1048576,%ecx
+ jnz .L002loop
+ movl 8(%edx),%edx
+ testl $16777216,%ecx
+ jz .L003no_xmm
+ andl $1073741824,%ecx
+ andl $268435968,%ebx
+ testl $536870912,%edx
+ jnz .L004shaext
+ orl %ebx,%ecx
+ andl $1342177280,%ecx
+ cmpl $1342177280,%ecx
+ testl $512,%ebx
+ jnz .L005SSSE3
+.L003no_xmm:
+ subl %edi,%eax
+ cmpl $256,%eax
+ jae .L006unrolled
+ jmp .L002loop
.align 16
.L002loop:
movl (%edi),%eax
movl 4(%edi),%ebx
movl 8(%edi),%ecx
- movl 12(%edi),%edx
bswap %eax
+ movl 12(%edi),%edx
bswap %ebx
- bswap %ecx
- bswap %edx
pushl %eax
+ bswap %ecx
pushl %ebx
+ bswap %edx
pushl %ecx
pushl %edx
movl 16(%edi),%eax
movl 20(%edi),%ebx
movl 24(%edi),%ecx
- movl 28(%edi),%edx
bswap %eax
+ movl 28(%edi),%edx
bswap %ebx
- bswap %ecx
- bswap %edx
pushl %eax
+ bswap %ecx
pushl %ebx
+ bswap %edx
pushl %ecx
pushl %edx
movl 32(%edi),%eax
movl 36(%edi),%ebx
movl 40(%edi),%ecx
- movl 44(%edi),%edx
bswap %eax
+ movl 44(%edi),%edx
bswap %ebx
- bswap %ecx
- bswap %edx
pushl %eax
+ bswap %ecx
pushl %ebx
+ bswap %edx
pushl %ecx
pushl %edx
movl 48(%edi),%eax
movl 52(%edi),%ebx
movl 56(%edi),%ecx
- movl 60(%edi),%edx
bswap %eax
+ movl 60(%edi),%edx
bswap %ebx
- bswap %ecx
- bswap %edx
pushl %eax
+ bswap %ecx
pushl %ebx
+ bswap %edx
pushl %ecx
pushl %edx
addl $64,%edi
- subl $32,%esp
- movl %edi,100(%esp)
+ leal -36(%esp),%esp
+ movl %edi,104(%esp)
movl (%esi),%eax
movl 4(%esi),%ebx
movl 8(%esi),%ecx
movl 12(%esi),%edi
- movl %ebx,4(%esp)
- movl %ecx,8(%esp)
- movl %edi,12(%esp)
+ movl %ebx,8(%esp)
+ xorl %ecx,%ebx
+ movl %ecx,12(%esp)
+ movl %edi,16(%esp)
+ movl %ebx,(%esp)
movl 16(%esi),%edx
movl 20(%esi),%ebx
movl 24(%esi),%ecx
movl 28(%esi),%edi
- movl %ebx,20(%esp)
- movl %ecx,24(%esp)
- movl %edi,28(%esp)
+ movl %ebx,24(%esp)
+ movl %ecx,28(%esp)
+ movl %edi,32(%esp)
.align 16
-.L00300_15:
- movl 92(%esp),%ebx
+.L00700_15:
movl %edx,%ecx
+ movl 24(%esp),%esi
rorl $14,%ecx
- movl 20(%esp),%esi
+ movl 28(%esp),%edi
xorl %edx,%ecx
+ xorl %edi,%esi
+ movl 96(%esp),%ebx
rorl $5,%ecx
- xorl %edx,%ecx
- rorl $6,%ecx
- movl 24(%esp),%edi
- addl %ecx,%ebx
+ andl %edx,%esi
+ movl %edx,20(%esp)
+ xorl %ecx,%edx
+ addl 32(%esp),%ebx
xorl %edi,%esi
- movl %edx,16(%esp)
+ rorl $6,%edx
movl %eax,%ecx
+ addl %esi,%ebx
+ rorl $9,%ecx
+ addl %edx,%ebx
+ movl 8(%esp),%edi
+ xorl %eax,%ecx
+ movl %eax,4(%esp)
+ leal -4(%esp),%esp
+ rorl $11,%ecx
+ movl (%ebp),%esi
+ xorl %eax,%ecx
+ movl 20(%esp),%edx
+ xorl %edi,%eax
+ rorl $2,%ecx
+ addl %esi,%ebx
+ movl %eax,(%esp)
+ addl %ebx,%edx
+ andl 4(%esp),%eax
+ addl %ecx,%ebx
+ xorl %edi,%eax
+ addl $4,%ebp
+ addl %ebx,%eax
+ cmpl $3248222580,%esi
+ jne .L00700_15
+ movl 156(%esp),%ecx
+ jmp .L00816_63
+.align 16
+.L00816_63:
+ movl %ecx,%ebx
+ movl 104(%esp),%esi
+ rorl $11,%ecx
+ movl %esi,%edi
+ rorl $2,%esi
+ xorl %ebx,%ecx
+ shrl $3,%ebx
+ rorl $7,%ecx
+ xorl %edi,%esi
+ xorl %ecx,%ebx
+ rorl $17,%esi
+ addl 160(%esp),%ebx
+ shrl $10,%edi
+ addl 124(%esp),%ebx
+ movl %edx,%ecx
+ xorl %esi,%edi
+ movl 24(%esp),%esi
+ rorl $14,%ecx
+ addl %edi,%ebx
+ movl 28(%esp),%edi
+ xorl %edx,%ecx
+ xorl %edi,%esi
+ movl %ebx,96(%esp)
+ rorl $5,%ecx
andl %edx,%esi
- movl 12(%esp),%edx
+ movl %edx,20(%esp)
+ xorl %ecx,%edx
+ addl 32(%esp),%ebx
xorl %edi,%esi
- movl %eax,%edi
+ rorl $6,%edx
+ movl %eax,%ecx
addl %esi,%ebx
rorl $9,%ecx
+ addl %edx,%ebx
+ movl 8(%esp),%edi
+ xorl %eax,%ecx
+ movl %eax,4(%esp)
+ leal -4(%esp),%esp
+ rorl $11,%ecx
+ movl (%ebp),%esi
+ xorl %eax,%ecx
+ movl 20(%esp),%edx
+ xorl %edi,%eax
+ rorl $2,%ecx
+ addl %esi,%ebx
+ movl %eax,(%esp)
+ addl %ebx,%edx
+ andl 4(%esp),%eax
+ addl %ecx,%ebx
+ xorl %edi,%eax
+ movl 156(%esp),%ecx
+ addl $4,%ebp
+ addl %ebx,%eax
+ cmpl $3329325298,%esi
+ jne .L00816_63
+ movl 356(%esp),%esi
+ movl 8(%esp),%ebx
+ movl 16(%esp),%ecx
+ addl (%esi),%eax
+ addl 4(%esi),%ebx
+ addl 8(%esi),%edi
+ addl 12(%esi),%ecx
+ movl %eax,(%esi)
+ movl %ebx,4(%esi)
+ movl %edi,8(%esi)
+ movl %ecx,12(%esi)
+ movl 24(%esp),%eax
+ movl 28(%esp),%ebx
+ movl 32(%esp),%ecx
+ movl 360(%esp),%edi
+ addl 16(%esi),%edx
+ addl 20(%esi),%eax
+ addl 24(%esi),%ebx
+ addl 28(%esi),%ecx
+ movl %edx,16(%esi)
+ movl %eax,20(%esi)
+ movl %ebx,24(%esi)
+ movl %ecx,28(%esi)
+ leal 356(%esp),%esp
+ subl $256,%ebp
+ cmpl 8(%esp),%edi
+ jb .L002loop
+ movl 12(%esp),%esp
+ popl %edi
+ popl %esi
+ popl %ebx
+ popl %ebp
+ ret
+.align 64
+.L001K256:
+.long 1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298
+.long 66051,67438087,134810123,202182159
+.byte 83,72,65,50,53,54,32,98,108,111,99,107,32,116,114,97
+.byte 110,115,102,111,114,109,32,102,111,114,32,120,56,54,44,32
+.byte 67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97
+.byte 112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103
+.byte 62,0
+.align 16
+.L006unrolled:
+ leal -96(%esp),%esp
+ movl (%esi),%eax
+ movl 4(%esi),%ebp
+ movl 8(%esi),%ecx
+ movl 12(%esi),%ebx
+ movl %ebp,4(%esp)
+ xorl %ecx,%ebp
+ movl %ecx,8(%esp)
+ movl %ebx,12(%esp)
+ movl 16(%esi),%edx
+ movl 20(%esi),%ebx
+ movl 24(%esi),%ecx
+ movl 28(%esi),%esi
+ movl %ebx,20(%esp)
+ movl %ecx,24(%esp)
+ movl %esi,28(%esp)
+ jmp .L009grand_loop
+.align 16
+.L009grand_loop:
+ movl (%edi),%ebx
+ movl 4(%edi),%ecx
+ bswap %ebx
+ movl 8(%edi),%esi
+ bswap %ecx
+ movl %ebx,32(%esp)
+ bswap %esi
+ movl %ecx,36(%esp)
+ movl %esi,40(%esp)
+ movl 12(%edi),%ebx
+ movl 16(%edi),%ecx
+ bswap %ebx
+ movl 20(%edi),%esi
+ bswap %ecx
+ movl %ebx,44(%esp)
+ bswap %esi
+ movl %ecx,48(%esp)
+ movl %esi,52(%esp)
+ movl 24(%edi),%ebx
+ movl 28(%edi),%ecx
+ bswap %ebx
+ movl 32(%edi),%esi
+ bswap %ecx
+ movl %ebx,56(%esp)
+ bswap %esi
+ movl %ecx,60(%esp)
+ movl %esi,64(%esp)
+ movl 36(%edi),%ebx
+ movl 40(%edi),%ecx
+ bswap %ebx
+ movl 44(%edi),%esi
+ bswap %ecx
+ movl %ebx,68(%esp)
+ bswap %esi
+ movl %ecx,72(%esp)
+ movl %esi,76(%esp)
+ movl 48(%edi),%ebx
+ movl 52(%edi),%ecx
+ bswap %ebx
+ movl 56(%edi),%esi
+ bswap %ecx
+ movl %ebx,80(%esp)
+ bswap %esi
+ movl %ecx,84(%esp)
+ movl %esi,88(%esp)
+ movl 60(%edi),%ebx
+ addl $64,%edi
+ bswap %ebx
+ movl %edi,100(%esp)
+ movl %ebx,92(%esp)
+ movl %edx,%ecx
+ movl 20(%esp),%esi
+ rorl $14,%edx
+ movl 24(%esp),%edi
+ xorl %ecx,%edx
+ movl 32(%esp),%ebx
+ xorl %edi,%esi
+ rorl $5,%edx
+ andl %ecx,%esi
+ movl %ecx,16(%esp)
+ xorl %ecx,%edx
addl 28(%esp),%ebx
+ xorl %esi,%edi
+ rorl $6,%edx
+ movl %eax,%ecx
+ addl %edi,%ebx
+ rorl $9,%ecx
+ movl %eax,%esi
+ movl 4(%esp),%edi
+ xorl %eax,%ecx
+ movl %eax,(%esp)
+ xorl %edi,%eax
+ rorl $11,%ecx
+ andl %eax,%ebp
+ leal 1116352408(%ebx,%edx,1),%edx
+ xorl %esi,%ecx
+ xorl %edi,%ebp
+ rorl $2,%ecx
+ addl %edx,%ebp
+ addl 12(%esp),%edx
+ addl %ecx,%ebp
+ movl %edx,%esi
+ movl 16(%esp),%ecx
+ rorl $14,%edx
+ movl 20(%esp),%edi
+ xorl %esi,%edx
+ movl 36(%esp),%ebx
+ xorl %edi,%ecx
+ rorl $5,%edx
+ andl %esi,%ecx
+ movl %esi,12(%esp)
+ xorl %esi,%edx
+ addl 24(%esp),%ebx
+ xorl %ecx,%edi
+ rorl $6,%edx
+ movl %ebp,%esi
+ addl %edi,%ebx
+ rorl $9,%esi
+ movl %ebp,%ecx
+ movl (%esp),%edi
+ xorl %ebp,%esi
+ movl %ebp,28(%esp)
+ xorl %edi,%ebp
+ rorl $11,%esi
+ andl %ebp,%eax
+ leal 1899447441(%ebx,%edx,1),%edx
+ xorl %ecx,%esi
+ xorl %edi,%eax
+ rorl $2,%esi
+ addl %edx,%eax
+ addl 8(%esp),%edx
+ addl %esi,%eax
+ movl %edx,%ecx
+ movl 12(%esp),%esi
+ rorl $14,%edx
+ movl 16(%esp),%edi
+ xorl %ecx,%edx
+ movl 40(%esp),%ebx
+ xorl %edi,%esi
+ rorl $5,%edx
+ andl %ecx,%esi
+ movl %ecx,8(%esp)
+ xorl %ecx,%edx
+ addl 20(%esp),%ebx
+ xorl %esi,%edi
+ rorl $6,%edx
+ movl %eax,%ecx
+ addl %edi,%ebx
+ rorl $9,%ecx
+ movl %eax,%esi
+ movl 28(%esp),%edi
xorl %eax,%ecx
+ movl %eax,24(%esp)
+ xorl %edi,%eax
rorl $11,%ecx
+ andl %eax,%ebp
+ leal 3049323471(%ebx,%edx,1),%edx
+ xorl %esi,%ecx
+ xorl %edi,%ebp
+ rorl $2,%ecx
+ addl %edx,%ebp
+ addl 4(%esp),%edx
+ addl %ecx,%ebp
+ movl %edx,%esi
+ movl 8(%esp),%ecx
+ rorl $14,%edx
+ movl 12(%esp),%edi
+ xorl %esi,%edx
+ movl 44(%esp),%ebx
+ xorl %edi,%ecx
+ rorl $5,%edx
+ andl %esi,%ecx
+ movl %esi,4(%esp)
+ xorl %esi,%edx
+ addl 16(%esp),%ebx
+ xorl %ecx,%edi
+ rorl $6,%edx
+ movl %ebp,%esi
+ addl %edi,%ebx
+ rorl $9,%esi
+ movl %ebp,%ecx
+ movl 24(%esp),%edi
+ xorl %ebp,%esi
+ movl %ebp,20(%esp)
+ xorl %edi,%ebp
+ rorl $11,%esi
+ andl %ebp,%eax
+ leal 3921009573(%ebx,%edx,1),%edx
+ xorl %ecx,%esi
+ xorl %edi,%eax
+ rorl $2,%esi
+ addl %edx,%eax
+ addl (%esp),%edx
+ addl %esi,%eax
+ movl %edx,%ecx
movl 4(%esp),%esi
+ rorl $14,%edx
+ movl 8(%esp),%edi
+ xorl %ecx,%edx
+ movl 48(%esp),%ebx
+ xorl %edi,%esi
+ rorl $5,%edx
+ andl %ecx,%esi
+ movl %ecx,(%esp)
+ xorl %ecx,%edx
+ addl 12(%esp),%ebx
+ xorl %esi,%edi
+ rorl $6,%edx
+ movl %eax,%ecx
+ addl %edi,%ebx
+ rorl $9,%ecx
+ movl %eax,%esi
+ movl 20(%esp),%edi
xorl %eax,%ecx
+ movl %eax,16(%esp)
+ xorl %edi,%eax
+ rorl $11,%ecx
+ andl %eax,%ebp
+ leal 961987163(%ebx,%edx,1),%edx
+ xorl %esi,%ecx
+ xorl %edi,%ebp
rorl $2,%ecx
- addl %ebx,%edx
+ addl %edx,%ebp
+ addl 28(%esp),%edx
+ addl %ecx,%ebp
+ movl %edx,%esi
+ movl (%esp),%ecx
+ rorl $14,%edx
+ movl 4(%esp),%edi
+ xorl %esi,%edx
+ movl 52(%esp),%ebx
+ xorl %edi,%ecx
+ rorl $5,%edx
+ andl %esi,%ecx
+ movl %esi,28(%esp)
+ xorl %esi,%edx
+ addl 8(%esp),%ebx
+ xorl %ecx,%edi
+ rorl $6,%edx
+ movl %ebp,%esi
+ addl %edi,%ebx
+ rorl $9,%esi
+ movl %ebp,%ecx
+ movl 16(%esp),%edi
+ xorl %ebp,%esi
+ movl %ebp,12(%esp)
+ xorl %edi,%ebp
+ rorl $11,%esi
+ andl %ebp,%eax
+ leal 1508970993(%ebx,%edx,1),%edx
+ xorl %ecx,%esi
+ xorl %edi,%eax
+ rorl $2,%esi
+ addl %edx,%eax
+ addl 24(%esp),%edx
+ addl %esi,%eax
+ movl %edx,%ecx
+ movl 28(%esp),%esi
+ rorl $14,%edx
+ movl (%esp),%edi
+ xorl %ecx,%edx
+ movl 56(%esp),%ebx
+ xorl %edi,%esi
+ rorl $5,%edx
+ andl %ecx,%esi
+ movl %ecx,24(%esp)
+ xorl %ecx,%edx
+ addl 4(%esp),%ebx
+ xorl %esi,%edi
+ rorl $6,%edx
+ movl %eax,%ecx
+ addl %edi,%ebx
+ rorl $9,%ecx
+ movl %eax,%esi
+ movl 12(%esp),%edi
+ xorl %eax,%ecx
+ movl %eax,8(%esp)
+ xorl %edi,%eax
+ rorl $11,%ecx
+ andl %eax,%ebp
+ leal 2453635748(%ebx,%edx,1),%edx
+ xorl %esi,%ecx
+ xorl %edi,%ebp
+ rorl $2,%ecx
+ addl %edx,%ebp
+ addl 20(%esp),%edx
+ addl %ecx,%ebp
+ movl %edx,%esi
+ movl 24(%esp),%ecx
+ rorl $14,%edx
+ movl 28(%esp),%edi
+ xorl %esi,%edx
+ movl 60(%esp),%ebx
+ xorl %edi,%ecx
+ rorl $5,%edx
+ andl %esi,%ecx
+ movl %esi,20(%esp)
+ xorl %esi,%edx
+ addl (%esp),%ebx
+ xorl %ecx,%edi
+ rorl $6,%edx
+ movl %ebp,%esi
+ addl %edi,%ebx
+ rorl $9,%esi
+ movl %ebp,%ecx
movl 8(%esp),%edi
- addl %ecx,%ebx
+ xorl %ebp,%esi
+ movl %ebp,4(%esp)
+ xorl %edi,%ebp
+ rorl $11,%esi
+ andl %ebp,%eax
+ leal 2870763221(%ebx,%edx,1),%edx
+ xorl %ecx,%esi
+ xorl %edi,%eax
+ rorl $2,%esi
+ addl %edx,%eax
+ addl 16(%esp),%edx
+ addl %esi,%eax
+ movl %edx,%ecx
+ movl 20(%esp),%esi
+ rorl $14,%edx
+ movl 24(%esp),%edi
+ xorl %ecx,%edx
+ movl 64(%esp),%ebx
+ xorl %edi,%esi
+ rorl $5,%edx
+ andl %ecx,%esi
+ movl %ecx,16(%esp)
+ xorl %ecx,%edx
+ addl 28(%esp),%ebx
+ xorl %esi,%edi
+ rorl $6,%edx
+ movl %eax,%ecx
+ addl %edi,%ebx
+ rorl $9,%ecx
+ movl %eax,%esi
+ movl 4(%esp),%edi
+ xorl %eax,%ecx
movl %eax,(%esp)
+ xorl %edi,%eax
+ rorl $11,%ecx
+ andl %eax,%ebp
+ leal 3624381080(%ebx,%edx,1),%edx
+ xorl %esi,%ecx
+ xorl %edi,%ebp
+ rorl $2,%ecx
+ addl %edx,%ebp
+ addl 12(%esp),%edx
+ addl %ecx,%ebp
+ movl %edx,%esi
+ movl 16(%esp),%ecx
+ rorl $14,%edx
+ movl 20(%esp),%edi
+ xorl %esi,%edx
+ movl 68(%esp),%ebx
+ xorl %edi,%ecx
+ rorl $5,%edx
+ andl %esi,%ecx
+ movl %esi,12(%esp)
+ xorl %esi,%edx
+ addl 24(%esp),%ebx
+ xorl %ecx,%edi
+ rorl $6,%edx
+ movl %ebp,%esi
+ addl %edi,%ebx
+ rorl $9,%esi
+ movl %ebp,%ecx
+ movl (%esp),%edi
+ xorl %ebp,%esi
+ movl %ebp,28(%esp)
+ xorl %edi,%ebp
+ rorl $11,%esi
+ andl %ebp,%eax
+ leal 310598401(%ebx,%edx,1),%edx
+ xorl %ecx,%esi
+ xorl %edi,%eax
+ rorl $2,%esi
+ addl %edx,%eax
+ addl 8(%esp),%edx
+ addl %esi,%eax
+ movl %edx,%ecx
+ movl 12(%esp),%esi
+ rorl $14,%edx
+ movl 16(%esp),%edi
+ xorl %ecx,%edx
+ movl 72(%esp),%ebx
+ xorl %edi,%esi
+ rorl $5,%edx
+ andl %ecx,%esi
+ movl %ecx,8(%esp)
+ xorl %ecx,%edx
+ addl 20(%esp),%ebx
+ xorl %esi,%edi
+ rorl $6,%edx
movl %eax,%ecx
- subl $4,%esp
- orl %esi,%eax
+ addl %edi,%ebx
+ rorl $9,%ecx
+ movl %eax,%esi
+ movl 28(%esp),%edi
+ xorl %eax,%ecx
+ movl %eax,24(%esp)
+ xorl %edi,%eax
+ rorl $11,%ecx
+ andl %eax,%ebp
+ leal 607225278(%ebx,%edx,1),%edx
+ xorl %esi,%ecx
+ xorl %edi,%ebp
+ rorl $2,%ecx
+ addl %edx,%ebp
+ addl 4(%esp),%edx
+ addl %ecx,%ebp
+ movl %edx,%esi
+ movl 8(%esp),%ecx
+ rorl $14,%edx
+ movl 12(%esp),%edi
+ xorl %esi,%edx
+ movl 76(%esp),%ebx
+ xorl %edi,%ecx
+ rorl $5,%edx
andl %esi,%ecx
- andl %edi,%eax
- movl (%ebp),%esi
- orl %ecx,%eax
- addl $4,%ebp
- addl %ebx,%eax
- addl %esi,%edx
+ movl %esi,4(%esp)
+ xorl %esi,%edx
+ addl 16(%esp),%ebx
+ xorl %ecx,%edi
+ rorl $6,%edx
+ movl %ebp,%esi
+ addl %edi,%ebx
+ rorl $9,%esi
+ movl %ebp,%ecx
+ movl 24(%esp),%edi
+ xorl %ebp,%esi
+ movl %ebp,20(%esp)
+ xorl %edi,%ebp
+ rorl $11,%esi
+ andl %ebp,%eax
+ leal 1426881987(%ebx,%edx,1),%edx
+ xorl %ecx,%esi
+ xorl %edi,%eax
+ rorl $2,%esi
+ addl %edx,%eax
+ addl (%esp),%edx
addl %esi,%eax
- cmpl $3248222580,%esi
- jne .L00300_15
- movl 152(%esp),%ebx
-.align 16
-.L00416_63:
- movl %ebx,%esi
- movl 100(%esp),%ecx
+ movl %edx,%ecx
+ movl 4(%esp),%esi
+ rorl $14,%edx
+ movl 8(%esp),%edi
+ xorl %ecx,%edx
+ movl 80(%esp),%ebx
+ xorl %edi,%esi
+ rorl $5,%edx
+ andl %ecx,%esi
+ movl %ecx,(%esp)
+ xorl %ecx,%edx
+ addl 12(%esp),%ebx
+ xorl %esi,%edi
+ rorl $6,%edx
+ movl %eax,%ecx
+ addl %edi,%ebx
+ rorl $9,%ecx
+ movl %eax,%esi
+ movl 20(%esp),%edi
+ xorl %eax,%ecx
+ movl %eax,16(%esp)
+ xorl %edi,%eax
+ rorl $11,%ecx
+ andl %eax,%ebp
+ leal 1925078388(%ebx,%edx,1),%edx
+ xorl %esi,%ecx
+ xorl %edi,%ebp
+ rorl $2,%ecx
+ addl %edx,%ebp
+ addl 28(%esp),%edx
+ addl %ecx,%ebp
+ movl %edx,%esi
+ movl (%esp),%ecx
+ rorl $14,%edx
+ movl 4(%esp),%edi
+ xorl %esi,%edx
+ movl 84(%esp),%ebx
+ xorl %edi,%ecx
+ rorl $5,%edx
+ andl %esi,%ecx
+ movl %esi,28(%esp)
+ xorl %esi,%edx
+ addl 8(%esp),%ebx
+ xorl %ecx,%edi
+ rorl $6,%edx
+ movl %ebp,%esi
+ addl %edi,%ebx
+ rorl $9,%esi
+ movl %ebp,%ecx
+ movl 16(%esp),%edi
+ xorl %ebp,%esi
+ movl %ebp,12(%esp)
+ xorl %edi,%ebp
+ rorl $11,%esi
+ andl %ebp,%eax
+ leal 2162078206(%ebx,%edx,1),%edx
+ xorl %ecx,%esi
+ xorl %edi,%eax
+ rorl $2,%esi
+ addl %edx,%eax
+ addl 24(%esp),%edx
+ addl %esi,%eax
+ movl %edx,%ecx
+ movl 28(%esp),%esi
+ rorl $14,%edx
+ movl (%esp),%edi
+ xorl %ecx,%edx
+ movl 88(%esp),%ebx
+ xorl %edi,%esi
+ rorl $5,%edx
+ andl %ecx,%esi
+ movl %ecx,24(%esp)
+ xorl %ecx,%edx
+ addl 4(%esp),%ebx
+ xorl %esi,%edi
+ rorl $6,%edx
+ movl %eax,%ecx
+ addl %edi,%ebx
+ rorl $9,%ecx
+ movl %eax,%esi
+ movl 12(%esp),%edi
+ xorl %eax,%ecx
+ movl %eax,8(%esp)
+ xorl %edi,%eax
+ rorl $11,%ecx
+ andl %eax,%ebp
+ leal 2614888103(%ebx,%edx,1),%edx
+ xorl %esi,%ecx
+ xorl %edi,%ebp
+ rorl $2,%ecx
+ addl %edx,%ebp
+ addl 20(%esp),%edx
+ addl %ecx,%ebp
+ movl %edx,%esi
+ movl 24(%esp),%ecx
+ rorl $14,%edx
+ movl 28(%esp),%edi
+ xorl %esi,%edx
+ movl 92(%esp),%ebx
+ xorl %edi,%ecx
+ rorl $5,%edx
+ andl %esi,%ecx
+ movl %esi,20(%esp)
+ xorl %esi,%edx
+ addl (%esp),%ebx
+ xorl %ecx,%edi
+ rorl $6,%edx
+ movl %ebp,%esi
+ addl %edi,%ebx
+ rorl $9,%esi
+ movl %ebp,%ecx
+ movl 8(%esp),%edi
+ xorl %ebp,%esi
+ movl %ebp,4(%esp)
+ xorl %edi,%ebp
+ rorl $11,%esi
+ andl %ebp,%eax
+ leal 3248222580(%ebx,%edx,1),%edx
+ xorl %ecx,%esi
+ xorl %edi,%eax
+ movl 36(%esp),%ecx
+ rorl $2,%esi
+ addl %edx,%eax
+ addl 16(%esp),%edx
+ addl %esi,%eax
+ movl 88(%esp),%esi
+ movl %ecx,%ebx
+ rorl $11,%ecx
+ movl %esi,%edi
+ rorl $2,%esi
+ xorl %ebx,%ecx
+ shrl $3,%ebx
+ rorl $7,%ecx
+ xorl %edi,%esi
+ xorl %ecx,%ebx
+ rorl $17,%esi
+ addl 32(%esp),%ebx
+ shrl $10,%edi
+ addl 68(%esp),%ebx
+ movl %edx,%ecx
+ xorl %esi,%edi
+ movl 20(%esp),%esi
+ rorl $14,%edx
+ addl %edi,%ebx
+ movl 24(%esp),%edi
+ xorl %ecx,%edx
+ movl %ebx,32(%esp)
+ xorl %edi,%esi
+ rorl $5,%edx
+ andl %ecx,%esi
+ movl %ecx,16(%esp)
+ xorl %ecx,%edx
+ addl 28(%esp),%ebx
+ xorl %esi,%edi
+ rorl $6,%edx
+ movl %eax,%ecx
+ addl %edi,%ebx
+ rorl $9,%ecx
+ movl %eax,%esi
+ movl 4(%esp),%edi
+ xorl %eax,%ecx
+ movl %eax,(%esp)
+ xorl %edi,%eax
+ rorl $11,%ecx
+ andl %eax,%ebp
+ leal 3835390401(%ebx,%edx,1),%edx
+ xorl %esi,%ecx
+ xorl %edi,%ebp
+ movl 40(%esp),%esi
+ rorl $2,%ecx
+ addl %edx,%ebp
+ addl 12(%esp),%edx
+ addl %ecx,%ebp
+ movl 92(%esp),%ecx
+ movl %esi,%ebx
rorl $11,%esi
movl %ecx,%edi
+ rorl $2,%ecx
xorl %ebx,%esi
+ shrl $3,%ebx
rorl $7,%esi
+ xorl %edi,%ecx
+ xorl %esi,%ebx
+ rorl $17,%ecx
+ addl 36(%esp),%ebx
+ shrl $10,%edi
+ addl 72(%esp),%ebx
+ movl %edx,%esi
+ xorl %ecx,%edi
+ movl 16(%esp),%ecx
+ rorl $14,%edx
+ addl %edi,%ebx
+ movl 20(%esp),%edi
+ xorl %esi,%edx
+ movl %ebx,36(%esp)
+ xorl %edi,%ecx
+ rorl $5,%edx
+ andl %esi,%ecx
+ movl %esi,12(%esp)
+ xorl %esi,%edx
+ addl 24(%esp),%ebx
+ xorl %ecx,%edi
+ rorl $6,%edx
+ movl %ebp,%esi
+ addl %edi,%ebx
+ rorl $9,%esi
+ movl %ebp,%ecx
+ movl (%esp),%edi
+ xorl %ebp,%esi
+ movl %ebp,28(%esp)
+ xorl %edi,%ebp
+ rorl $11,%esi
+ andl %ebp,%eax
+ leal 4022224774(%ebx,%edx,1),%edx
+ xorl %ecx,%esi
+ xorl %edi,%eax
+ movl 44(%esp),%ecx
+ rorl $2,%esi
+ addl %edx,%eax
+ addl 8(%esp),%edx
+ addl %esi,%eax
+ movl 32(%esp),%esi
+ movl %ecx,%ebx
+ rorl $11,%ecx
+ movl %esi,%edi
+ rorl $2,%esi
+ xorl %ebx,%ecx
+ shrl $3,%ebx
+ rorl $7,%ecx
+ xorl %edi,%esi
+ xorl %ecx,%ebx
+ rorl $17,%esi
+ addl 40(%esp),%ebx
+ shrl $10,%edi
+ addl 76(%esp),%ebx
+ movl %edx,%ecx
+ xorl %esi,%edi
+ movl 12(%esp),%esi
+ rorl $14,%edx
+ addl %edi,%ebx
+ movl 16(%esp),%edi
+ xorl %ecx,%edx
+ movl %ebx,40(%esp)
+ xorl %edi,%esi
+ rorl $5,%edx
+ andl %ecx,%esi
+ movl %ecx,8(%esp)
+ xorl %ecx,%edx
+ addl 20(%esp),%ebx
+ xorl %esi,%edi
+ rorl $6,%edx
+ movl %eax,%ecx
+ addl %edi,%ebx
+ rorl $9,%ecx
+ movl %eax,%esi
+ movl 28(%esp),%edi
+ xorl %eax,%ecx
+ movl %eax,24(%esp)
+ xorl %edi,%eax
+ rorl $11,%ecx
+ andl %eax,%ebp
+ leal 264347078(%ebx,%edx,1),%edx
+ xorl %esi,%ecx
+ xorl %edi,%ebp
+ movl 48(%esp),%esi
+ rorl $2,%ecx
+ addl %edx,%ebp
+ addl 4(%esp),%edx
+ addl %ecx,%ebp
+ movl 36(%esp),%ecx
+ movl %esi,%ebx
+ rorl $11,%esi
+ movl %ecx,%edi
+ rorl $2,%ecx
+ xorl %ebx,%esi
shrl $3,%ebx
- rorl $2,%edi
+ rorl $7,%esi
+ xorl %edi,%ecx
xorl %esi,%ebx
+ rorl $17,%ecx
+ addl 44(%esp),%ebx
+ shrl $10,%edi
+ addl 80(%esp),%ebx
+ movl %edx,%esi
xorl %ecx,%edi
- rorl $17,%edi
- shrl $10,%ecx
- addl 156(%esp),%ebx
+ movl 8(%esp),%ecx
+ rorl $14,%edx
+ addl %edi,%ebx
+ movl 12(%esp),%edi
+ xorl %esi,%edx
+ movl %ebx,44(%esp)
+ xorl %edi,%ecx
+ rorl $5,%edx
+ andl %esi,%ecx
+ movl %esi,4(%esp)
+ xorl %esi,%edx
+ addl 16(%esp),%ebx
xorl %ecx,%edi
- addl 120(%esp),%ebx
+ rorl $6,%edx
+ movl %ebp,%esi
+ addl %edi,%ebx
+ rorl $9,%esi
+ movl %ebp,%ecx
+ movl 24(%esp),%edi
+ xorl %ebp,%esi
+ movl %ebp,20(%esp)
+ xorl %edi,%ebp
+ rorl $11,%esi
+ andl %ebp,%eax
+ leal 604807628(%ebx,%edx,1),%edx
+ xorl %ecx,%esi
+ xorl %edi,%eax
+ movl 52(%esp),%ecx
+ rorl $2,%esi
+ addl %edx,%eax
+ addl (%esp),%edx
+ addl %esi,%eax
+ movl 40(%esp),%esi
+ movl %ecx,%ebx
+ rorl $11,%ecx
+ movl %esi,%edi
+ rorl $2,%esi
+ xorl %ebx,%ecx
+ shrl $3,%ebx
+ rorl $7,%ecx
+ xorl %edi,%esi
+ xorl %ecx,%ebx
+ rorl $17,%esi
+ addl 48(%esp),%ebx
+ shrl $10,%edi
+ addl 84(%esp),%ebx
movl %edx,%ecx
+ xorl %esi,%edi
+ movl 4(%esp),%esi
+ rorl $14,%edx
addl %edi,%ebx
- rorl $14,%ecx
+ movl 8(%esp),%edi
+ xorl %ecx,%edx
+ movl %ebx,48(%esp)
+ xorl %edi,%esi
+ rorl $5,%edx
+ andl %ecx,%esi
+ movl %ecx,(%esp)
+ xorl %ecx,%edx
+ addl 12(%esp),%ebx
+ xorl %esi,%edi
+ rorl $6,%edx
+ movl %eax,%ecx
+ addl %edi,%ebx
+ rorl $9,%ecx
+ movl %eax,%esi
+ movl 20(%esp),%edi
+ xorl %eax,%ecx
+ movl %eax,16(%esp)
+ xorl %edi,%eax
+ rorl $11,%ecx
+ andl %eax,%ebp
+ leal 770255983(%ebx,%edx,1),%edx
+ xorl %esi,%ecx
+ xorl %edi,%ebp
+ movl 56(%esp),%esi
+ rorl $2,%ecx
+ addl %edx,%ebp
+ addl 28(%esp),%edx
+ addl %ecx,%ebp
+ movl 44(%esp),%ecx
+ movl %esi,%ebx
+ rorl $11,%esi
+ movl %ecx,%edi
+ rorl $2,%ecx
+ xorl %ebx,%esi
+ shrl $3,%ebx
+ rorl $7,%esi
+ xorl %edi,%ecx
+ xorl %esi,%ebx
+ rorl $17,%ecx
+ addl 52(%esp),%ebx
+ shrl $10,%edi
+ addl 88(%esp),%ebx
+ movl %edx,%esi
+ xorl %ecx,%edi
+ movl (%esp),%ecx
+ rorl $14,%edx
+ addl %edi,%ebx
+ movl 4(%esp),%edi
+ xorl %esi,%edx
+ movl %ebx,52(%esp)
+ xorl %edi,%ecx
+ rorl $5,%edx
+ andl %esi,%ecx
+ movl %esi,28(%esp)
+ xorl %esi,%edx
+ addl 8(%esp),%ebx
+ xorl %ecx,%edi
+ rorl $6,%edx
+ movl %ebp,%esi
+ addl %edi,%ebx
+ rorl $9,%esi
+ movl %ebp,%ecx
+ movl 16(%esp),%edi
+ xorl %ebp,%esi
+ movl %ebp,12(%esp)
+ xorl %edi,%ebp
+ rorl $11,%esi
+ andl %ebp,%eax
+ leal 1249150122(%ebx,%edx,1),%edx
+ xorl %ecx,%esi
+ xorl %edi,%eax
+ movl 60(%esp),%ecx
+ rorl $2,%esi
+ addl %edx,%eax
+ addl 24(%esp),%edx
+ addl %esi,%eax
+ movl 48(%esp),%esi
+ movl %ecx,%ebx
+ rorl $11,%ecx
+ movl %esi,%edi
+ rorl $2,%esi
+ xorl %ebx,%ecx
+ shrl $3,%ebx
+ rorl $7,%ecx
+ xorl %edi,%esi
+ xorl %ecx,%ebx
+ rorl $17,%esi
+ addl 56(%esp),%ebx
+ shrl $10,%edi
+ addl 92(%esp),%ebx
+ movl %edx,%ecx
+ xorl %esi,%edi
+ movl 28(%esp),%esi
+ rorl $14,%edx
+ addl %edi,%ebx
+ movl (%esp),%edi
+ xorl %ecx,%edx
+ movl %ebx,56(%esp)
+ xorl %edi,%esi
+ rorl $5,%edx
+ andl %ecx,%esi
+ movl %ecx,24(%esp)
+ xorl %ecx,%edx
+ addl 4(%esp),%ebx
+ xorl %esi,%edi
+ rorl $6,%edx
+ movl %eax,%ecx
+ addl %edi,%ebx
+ rorl $9,%ecx
+ movl %eax,%esi
+ movl 12(%esp),%edi
+ xorl %eax,%ecx
+ movl %eax,8(%esp)
+ xorl %edi,%eax
+ rorl $11,%ecx
+ andl %eax,%ebp
+ leal 1555081692(%ebx,%edx,1),%edx
+ xorl %esi,%ecx
+ xorl %edi,%ebp
+ movl 64(%esp),%esi
+ rorl $2,%ecx
+ addl %edx,%ebp
+ addl 20(%esp),%edx
+ addl %ecx,%ebp
+ movl 52(%esp),%ecx
+ movl %esi,%ebx
+ rorl $11,%esi
+ movl %ecx,%edi
+ rorl $2,%ecx
+ xorl %ebx,%esi
+ shrl $3,%ebx
+ rorl $7,%esi
+ xorl %edi,%ecx
+ xorl %esi,%ebx
+ rorl $17,%ecx
+ addl 60(%esp),%ebx
+ shrl $10,%edi
+ addl 32(%esp),%ebx
+ movl %edx,%esi
+ xorl %ecx,%edi
+ movl 24(%esp),%ecx
+ rorl $14,%edx
+ addl %edi,%ebx
+ movl 28(%esp),%edi
+ xorl %esi,%edx
+ movl %ebx,60(%esp)
+ xorl %edi,%ecx
+ rorl $5,%edx
+ andl %esi,%ecx
+ movl %esi,20(%esp)
+ xorl %esi,%edx
+ addl (%esp),%ebx
+ xorl %ecx,%edi
+ rorl $6,%edx
+ movl %ebp,%esi
+ addl %edi,%ebx
+ rorl $9,%esi
+ movl %ebp,%ecx
+ movl 8(%esp),%edi
+ xorl %ebp,%esi
+ movl %ebp,4(%esp)
+ xorl %edi,%ebp
+ rorl $11,%esi
+ andl %ebp,%eax
+ leal 1996064986(%ebx,%edx,1),%edx
+ xorl %ecx,%esi
+ xorl %edi,%eax
+ movl 68(%esp),%ecx
+ rorl $2,%esi
+ addl %edx,%eax
+ addl 16(%esp),%edx
+ addl %esi,%eax
+ movl 56(%esp),%esi
+ movl %ecx,%ebx
+ rorl $11,%ecx
+ movl %esi,%edi
+ rorl $2,%esi
+ xorl %ebx,%ecx
+ shrl $3,%ebx
+ rorl $7,%ecx
+ xorl %edi,%esi
+ xorl %ecx,%ebx
+ rorl $17,%esi
+ addl 64(%esp),%ebx
+ shrl $10,%edi
+ addl 36(%esp),%ebx
+ movl %edx,%ecx
+ xorl %esi,%edi
movl 20(%esp),%esi
- xorl %edx,%ecx
- rorl $5,%ecx
+ rorl $14,%edx
+ addl %edi,%ebx
+ movl 24(%esp),%edi
+ xorl %ecx,%edx
+ movl %ebx,64(%esp)
+ xorl %edi,%esi
+ rorl $5,%edx
+ andl %ecx,%esi
+ movl %ecx,16(%esp)
+ xorl %ecx,%edx
+ addl 28(%esp),%ebx
+ xorl %esi,%edi
+ rorl $6,%edx
+ movl %eax,%ecx
+ addl %edi,%ebx
+ rorl $9,%ecx
+ movl %eax,%esi
+ movl 4(%esp),%edi
+ xorl %eax,%ecx
+ movl %eax,(%esp)
+ xorl %edi,%eax
+ rorl $11,%ecx
+ andl %eax,%ebp
+ leal 2554220882(%ebx,%edx,1),%edx
+ xorl %esi,%ecx
+ xorl %edi,%ebp
+ movl 72(%esp),%esi
+ rorl $2,%ecx
+ addl %edx,%ebp
+ addl 12(%esp),%edx
+ addl %ecx,%ebp
+ movl 60(%esp),%ecx
+ movl %esi,%ebx
+ rorl $11,%esi
+ movl %ecx,%edi
+ rorl $2,%ecx
+ xorl %ebx,%esi
+ shrl $3,%ebx
+ rorl $7,%esi
+ xorl %edi,%ecx
+ xorl %esi,%ebx
+ rorl $17,%ecx
+ addl 68(%esp),%ebx
+ shrl $10,%edi
+ addl 40(%esp),%ebx
+ movl %edx,%esi
+ xorl %ecx,%edi
+ movl 16(%esp),%ecx
+ rorl $14,%edx
+ addl %edi,%ebx
+ movl 20(%esp),%edi
+ xorl %esi,%edx
+ movl %ebx,68(%esp)
+ xorl %edi,%ecx
+ rorl $5,%edx
+ andl %esi,%ecx
+ movl %esi,12(%esp)
+ xorl %esi,%edx
+ addl 24(%esp),%ebx
+ xorl %ecx,%edi
+ rorl $6,%edx
+ movl %ebp,%esi
+ addl %edi,%ebx
+ rorl $9,%esi
+ movl %ebp,%ecx
+ movl (%esp),%edi
+ xorl %ebp,%esi
+ movl %ebp,28(%esp)
+ xorl %edi,%ebp
+ rorl $11,%esi
+ andl %ebp,%eax
+ leal 2821834349(%ebx,%edx,1),%edx
+ xorl %ecx,%esi
+ xorl %edi,%eax
+ movl 76(%esp),%ecx
+ rorl $2,%esi
+ addl %edx,%eax
+ addl 8(%esp),%edx
+ addl %esi,%eax
+ movl 64(%esp),%esi
+ movl %ecx,%ebx
+ rorl $11,%ecx
+ movl %esi,%edi
+ rorl $2,%esi
+ xorl %ebx,%ecx
+ shrl $3,%ebx
+ rorl $7,%ecx
+ xorl %edi,%esi
+ xorl %ecx,%ebx
+ rorl $17,%esi
+ addl 72(%esp),%ebx
+ shrl $10,%edi
+ addl 44(%esp),%ebx
+ movl %edx,%ecx
+ xorl %esi,%edi
+ movl 12(%esp),%esi
+ rorl $14,%edx
+ addl %edi,%ebx
+ movl 16(%esp),%edi
+ xorl %ecx,%edx
+ movl %ebx,72(%esp)
+ xorl %edi,%esi
+ rorl $5,%edx
+ andl %ecx,%esi
+ movl %ecx,8(%esp)
+ xorl %ecx,%edx
+ addl 20(%esp),%ebx
+ xorl %esi,%edi
+ rorl $6,%edx
+ movl %eax,%ecx
+ addl %edi,%ebx
+ rorl $9,%ecx
+ movl %eax,%esi
+ movl 28(%esp),%edi
+ xorl %eax,%ecx
+ movl %eax,24(%esp)
+ xorl %edi,%eax
+ rorl $11,%ecx
+ andl %eax,%ebp
+ leal 2952996808(%ebx,%edx,1),%edx
+ xorl %esi,%ecx
+ xorl %edi,%ebp
+ movl 80(%esp),%esi
+ rorl $2,%ecx
+ addl %edx,%ebp
+ addl 4(%esp),%edx
+ addl %ecx,%ebp
+ movl 68(%esp),%ecx
+ movl %esi,%ebx
+ rorl $11,%esi
+ movl %ecx,%edi
+ rorl $2,%ecx
+ xorl %ebx,%esi
+ shrl $3,%ebx
+ rorl $7,%esi
+ xorl %edi,%ecx
+ xorl %esi,%ebx
+ rorl $17,%ecx
+ addl 76(%esp),%ebx
+ shrl $10,%edi
+ addl 48(%esp),%ebx
+ movl %edx,%esi
+ xorl %ecx,%edi
+ movl 8(%esp),%ecx
+ rorl $14,%edx
+ addl %edi,%ebx
+ movl 12(%esp),%edi
+ xorl %esi,%edx
+ movl %ebx,76(%esp)
+ xorl %edi,%ecx
+ rorl $5,%edx
+ andl %esi,%ecx
+ movl %esi,4(%esp)
+ xorl %esi,%edx
+ addl 16(%esp),%ebx
+ xorl %ecx,%edi
+ rorl $6,%edx
+ movl %ebp,%esi
+ addl %edi,%ebx
+ rorl $9,%esi
+ movl %ebp,%ecx
+ movl 24(%esp),%edi
+ xorl %ebp,%esi
+ movl %ebp,20(%esp)
+ xorl %edi,%ebp
+ rorl $11,%esi
+ andl %ebp,%eax
+ leal 3210313671(%ebx,%edx,1),%edx
+ xorl %ecx,%esi
+ xorl %edi,%eax
+ movl 84(%esp),%ecx
+ rorl $2,%esi
+ addl %edx,%eax
+ addl (%esp),%edx
+ addl %esi,%eax
+ movl 72(%esp),%esi
+ movl %ecx,%ebx
+ rorl $11,%ecx
+ movl %esi,%edi
+ rorl $2,%esi
+ xorl %ebx,%ecx
+ shrl $3,%ebx
+ rorl $7,%ecx
+ xorl %edi,%esi
+ xorl %ecx,%ebx
+ rorl $17,%esi
+ addl 80(%esp),%ebx
+ shrl $10,%edi
+ addl 52(%esp),%ebx
+ movl %edx,%ecx
+ xorl %esi,%edi
+ movl 4(%esp),%esi
+ rorl $14,%edx
+ addl %edi,%ebx
+ movl 8(%esp),%edi
+ xorl %ecx,%edx
+ movl %ebx,80(%esp)
+ xorl %edi,%esi
+ rorl $5,%edx
+ andl %ecx,%esi
+ movl %ecx,(%esp)
+ xorl %ecx,%edx
+ addl 12(%esp),%ebx
+ xorl %esi,%edi
+ rorl $6,%edx
+ movl %eax,%ecx
+ addl %edi,%ebx
+ rorl $9,%ecx
+ movl %eax,%esi
+ movl 20(%esp),%edi
+ xorl %eax,%ecx
+ movl %eax,16(%esp)
+ xorl %edi,%eax
+ rorl $11,%ecx
+ andl %eax,%ebp
+ leal 3336571891(%ebx,%edx,1),%edx
+ xorl %esi,%ecx
+ xorl %edi,%ebp
+ movl 88(%esp),%esi
+ rorl $2,%ecx
+ addl %edx,%ebp
+ addl 28(%esp),%edx
+ addl %ecx,%ebp
+ movl 76(%esp),%ecx
+ movl %esi,%ebx
+ rorl $11,%esi
+ movl %ecx,%edi
+ rorl $2,%ecx
+ xorl %ebx,%esi
+ shrl $3,%ebx
+ rorl $7,%esi
+ xorl %edi,%ecx
+ xorl %esi,%ebx
+ rorl $17,%ecx
+ addl 84(%esp),%ebx
+ shrl $10,%edi
+ addl 56(%esp),%ebx
+ movl %edx,%esi
+ xorl %ecx,%edi
+ movl (%esp),%ecx
+ rorl $14,%edx
+ addl %edi,%ebx
+ movl 4(%esp),%edi
+ xorl %esi,%edx
+ movl %ebx,84(%esp)
+ xorl %edi,%ecx
+ rorl $5,%edx
+ andl %esi,%ecx
+ movl %esi,28(%esp)
+ xorl %esi,%edx
+ addl 8(%esp),%ebx
+ xorl %ecx,%edi
+ rorl $6,%edx
+ movl %ebp,%esi
+ addl %edi,%ebx
+ rorl $9,%esi
+ movl %ebp,%ecx
+ movl 16(%esp),%edi
+ xorl %ebp,%esi
+ movl %ebp,12(%esp)
+ xorl %edi,%ebp
+ rorl $11,%esi
+ andl %ebp,%eax
+ leal 3584528711(%ebx,%edx,1),%edx
+ xorl %ecx,%esi
+ xorl %edi,%eax
+ movl 92(%esp),%ecx
+ rorl $2,%esi
+ addl %edx,%eax
+ addl 24(%esp),%edx
+ addl %esi,%eax
+ movl 80(%esp),%esi
+ movl %ecx,%ebx
+ rorl $11,%ecx
+ movl %esi,%edi
+ rorl $2,%esi
+ xorl %ebx,%ecx
+ shrl $3,%ebx
+ rorl $7,%ecx
+ xorl %edi,%esi
+ xorl %ecx,%ebx
+ rorl $17,%esi
+ addl 88(%esp),%ebx
+ shrl $10,%edi
+ addl 60(%esp),%ebx
+ movl %edx,%ecx
+ xorl %esi,%edi
+ movl 28(%esp),%esi
+ rorl $14,%edx
+ addl %edi,%ebx
+ movl (%esp),%edi
+ xorl %ecx,%edx
+ movl %ebx,88(%esp)
+ xorl %edi,%esi
+ rorl $5,%edx
+ andl %ecx,%esi
+ movl %ecx,24(%esp)
+ xorl %ecx,%edx
+ addl 4(%esp),%ebx
+ xorl %esi,%edi
+ rorl $6,%edx
+ movl %eax,%ecx
+ addl %edi,%ebx
+ rorl $9,%ecx
+ movl %eax,%esi
+ movl 12(%esp),%edi
+ xorl %eax,%ecx
+ movl %eax,8(%esp)
+ xorl %edi,%eax
+ rorl $11,%ecx
+ andl %eax,%ebp
+ leal 113926993(%ebx,%edx,1),%edx
+ xorl %esi,%ecx
+ xorl %edi,%ebp
+ movl 32(%esp),%esi
+ rorl $2,%ecx
+ addl %edx,%ebp
+ addl 20(%esp),%edx
+ addl %ecx,%ebp
+ movl 84(%esp),%ecx
+ movl %esi,%ebx
+ rorl $11,%esi
+ movl %ecx,%edi
+ rorl $2,%ecx
+ xorl %ebx,%esi
+ shrl $3,%ebx
+ rorl $7,%esi
+ xorl %edi,%ecx
+ xorl %esi,%ebx
+ rorl $17,%ecx
+ addl 92(%esp),%ebx
+ shrl $10,%edi
+ addl 64(%esp),%ebx
+ movl %edx,%esi
+ xorl %ecx,%edi
+ movl 24(%esp),%ecx
+ rorl $14,%edx
+ addl %edi,%ebx
+ movl 28(%esp),%edi
+ xorl %esi,%edx
movl %ebx,92(%esp)
- xorl %edx,%ecx
- rorl $6,%ecx
+ xorl %edi,%ecx
+ rorl $5,%edx
+ andl %esi,%ecx
+ movl %esi,20(%esp)
+ xorl %esi,%edx
+ addl (%esp),%ebx
+ xorl %ecx,%edi
+ rorl $6,%edx
+ movl %ebp,%esi
+ addl %edi,%ebx
+ rorl $9,%esi
+ movl %ebp,%ecx
+ movl 8(%esp),%edi
+ xorl %ebp,%esi
+ movl %ebp,4(%esp)
+ xorl %edi,%ebp
+ rorl $11,%esi
+ andl %ebp,%eax
+ leal 338241895(%ebx,%edx,1),%edx
+ xorl %ecx,%esi
+ xorl %edi,%eax
+ movl 36(%esp),%ecx
+ rorl $2,%esi
+ addl %edx,%eax
+ addl 16(%esp),%edx
+ addl %esi,%eax
+ movl 88(%esp),%esi
+ movl %ecx,%ebx
+ rorl $11,%ecx
+ movl %esi,%edi
+ rorl $2,%esi
+ xorl %ebx,%ecx
+ shrl $3,%ebx
+ rorl $7,%ecx
+ xorl %edi,%esi
+ xorl %ecx,%ebx
+ rorl $17,%esi
+ addl 32(%esp),%ebx
+ shrl $10,%edi
+ addl 68(%esp),%ebx
+ movl %edx,%ecx
+ xorl %esi,%edi
+ movl 20(%esp),%esi
+ rorl $14,%edx
+ addl %edi,%ebx
movl 24(%esp),%edi
- addl %ecx,%ebx
+ xorl %ecx,%edx
+ movl %ebx,32(%esp)
xorl %edi,%esi
- movl %edx,16(%esp)
+ rorl $5,%edx
+ andl %ecx,%esi
+ movl %ecx,16(%esp)
+ xorl %ecx,%edx
+ addl 28(%esp),%ebx
+ xorl %esi,%edi
+ rorl $6,%edx
movl %eax,%ecx
- andl %edx,%esi
- movl 12(%esp),%edx
+ addl %edi,%ebx
+ rorl $9,%ecx
+ movl %eax,%esi
+ movl 4(%esp),%edi
+ xorl %eax,%ecx
+ movl %eax,(%esp)
+ xorl %edi,%eax
+ rorl $11,%ecx
+ andl %eax,%ebp
+ leal 666307205(%ebx,%edx,1),%edx
+ xorl %esi,%ecx
+ xorl %edi,%ebp
+ movl 40(%esp),%esi
+ rorl $2,%ecx
+ addl %edx,%ebp
+ addl 12(%esp),%edx
+ addl %ecx,%ebp
+ movl 92(%esp),%ecx
+ movl %esi,%ebx
+ rorl $11,%esi
+ movl %ecx,%edi
+ rorl $2,%ecx
+ xorl %ebx,%esi
+ shrl $3,%ebx
+ rorl $7,%esi
+ xorl %edi,%ecx
+ xorl %esi,%ebx
+ rorl $17,%ecx
+ addl 36(%esp),%ebx
+ shrl $10,%edi
+ addl 72(%esp),%ebx
+ movl %edx,%esi
+ xorl %ecx,%edi
+ movl 16(%esp),%ecx
+ rorl $14,%edx
+ addl %edi,%ebx
+ movl 20(%esp),%edi
+ xorl %esi,%edx
+ movl %ebx,36(%esp)
+ xorl %edi,%ecx
+ rorl $5,%edx
+ andl %esi,%ecx
+ movl %esi,12(%esp)
+ xorl %esi,%edx
+ addl 24(%esp),%ebx
+ xorl %ecx,%edi
+ rorl $6,%edx
+ movl %ebp,%esi
+ addl %edi,%ebx
+ rorl $9,%esi
+ movl %ebp,%ecx
+ movl (%esp),%edi
+ xorl %ebp,%esi
+ movl %ebp,28(%esp)
+ xorl %edi,%ebp
+ rorl $11,%esi
+ andl %ebp,%eax
+ leal 773529912(%ebx,%edx,1),%edx
+ xorl %ecx,%esi
+ xorl %edi,%eax
+ movl 44(%esp),%ecx
+ rorl $2,%esi
+ addl %edx,%eax
+ addl 8(%esp),%edx
+ addl %esi,%eax
+ movl 32(%esp),%esi
+ movl %ecx,%ebx
+ rorl $11,%ecx
+ movl %esi,%edi
+ rorl $2,%esi
+ xorl %ebx,%ecx
+ shrl $3,%ebx
+ rorl $7,%ecx
xorl %edi,%esi
- movl %eax,%edi
- addl %esi,%ebx
+ xorl %ecx,%ebx
+ rorl $17,%esi
+ addl 40(%esp),%ebx
+ shrl $10,%edi
+ addl 76(%esp),%ebx
+ movl %edx,%ecx
+ xorl %esi,%edi
+ movl 12(%esp),%esi
+ rorl $14,%edx
+ addl %edi,%ebx
+ movl 16(%esp),%edi
+ xorl %ecx,%edx
+ movl %ebx,40(%esp)
+ xorl %edi,%esi
+ rorl $5,%edx
+ andl %ecx,%esi
+ movl %ecx,8(%esp)
+ xorl %ecx,%edx
+ addl 20(%esp),%ebx
+ xorl %esi,%edi
+ rorl $6,%edx
+ movl %eax,%ecx
+ addl %edi,%ebx
+ rorl $9,%ecx
+ movl %eax,%esi
+ movl 28(%esp),%edi
+ xorl %eax,%ecx
+ movl %eax,24(%esp)
+ xorl %edi,%eax
+ rorl $11,%ecx
+ andl %eax,%ebp
+ leal 1294757372(%ebx,%edx,1),%edx
+ xorl %esi,%ecx
+ xorl %edi,%ebp
+ movl 48(%esp),%esi
+ rorl $2,%ecx
+ addl %edx,%ebp
+ addl 4(%esp),%edx
+ addl %ecx,%ebp
+ movl 36(%esp),%ecx
+ movl %esi,%ebx
+ rorl $11,%esi
+ movl %ecx,%edi
+ rorl $2,%ecx
+ xorl %ebx,%esi
+ shrl $3,%ebx
+ rorl $7,%esi
+ xorl %edi,%ecx
+ xorl %esi,%ebx
+ rorl $17,%ecx
+ addl 44(%esp),%ebx
+ shrl $10,%edi
+ addl 80(%esp),%ebx
+ movl %edx,%esi
+ xorl %ecx,%edi
+ movl 8(%esp),%ecx
+ rorl $14,%edx
+ addl %edi,%ebx
+ movl 12(%esp),%edi
+ xorl %esi,%edx
+ movl %ebx,44(%esp)
+ xorl %edi,%ecx
+ rorl $5,%edx
+ andl %esi,%ecx
+ movl %esi,4(%esp)
+ xorl %esi,%edx
+ addl 16(%esp),%ebx
+ xorl %ecx,%edi
+ rorl $6,%edx
+ movl %ebp,%esi
+ addl %edi,%ebx
+ rorl $9,%esi
+ movl %ebp,%ecx
+ movl 24(%esp),%edi
+ xorl %ebp,%esi
+ movl %ebp,20(%esp)
+ xorl %edi,%ebp
+ rorl $11,%esi
+ andl %ebp,%eax
+ leal 1396182291(%ebx,%edx,1),%edx
+ xorl %ecx,%esi
+ xorl %edi,%eax
+ movl 52(%esp),%ecx
+ rorl $2,%esi
+ addl %edx,%eax
+ addl (%esp),%edx
+ addl %esi,%eax
+ movl 40(%esp),%esi
+ movl %ecx,%ebx
+ rorl $11,%ecx
+ movl %esi,%edi
+ rorl $2,%esi
+ xorl %ebx,%ecx
+ shrl $3,%ebx
+ rorl $7,%ecx
+ xorl %edi,%esi
+ xorl %ecx,%ebx
+ rorl $17,%esi
+ addl 48(%esp),%ebx
+ shrl $10,%edi
+ addl 84(%esp),%ebx
+ movl %edx,%ecx
+ xorl %esi,%edi
+ movl 4(%esp),%esi
+ rorl $14,%edx
+ addl %edi,%ebx
+ movl 8(%esp),%edi
+ xorl %ecx,%edx
+ movl %ebx,48(%esp)
+ xorl %edi,%esi
+ rorl $5,%edx
+ andl %ecx,%esi
+ movl %ecx,(%esp)
+ xorl %ecx,%edx
+ addl 12(%esp),%ebx
+ xorl %esi,%edi
+ rorl $6,%edx
+ movl %eax,%ecx
+ addl %edi,%ebx
rorl $9,%ecx
+ movl %eax,%esi
+ movl 20(%esp),%edi
+ xorl %eax,%ecx
+ movl %eax,16(%esp)
+ xorl %edi,%eax
+ rorl $11,%ecx
+ andl %eax,%ebp
+ leal 1695183700(%ebx,%edx,1),%edx
+ xorl %esi,%ecx
+ xorl %edi,%ebp
+ movl 56(%esp),%esi
+ rorl $2,%ecx
+ addl %edx,%ebp
+ addl 28(%esp),%edx
+ addl %ecx,%ebp
+ movl 44(%esp),%ecx
+ movl %esi,%ebx
+ rorl $11,%esi
+ movl %ecx,%edi
+ rorl $2,%ecx
+ xorl %ebx,%esi
+ shrl $3,%ebx
+ rorl $7,%esi
+ xorl %edi,%ecx
+ xorl %esi,%ebx
+ rorl $17,%ecx
+ addl 52(%esp),%ebx
+ shrl $10,%edi
+ addl 88(%esp),%ebx
+ movl %edx,%esi
+ xorl %ecx,%edi
+ movl (%esp),%ecx
+ rorl $14,%edx
+ addl %edi,%ebx
+ movl 4(%esp),%edi
+ xorl %esi,%edx
+ movl %ebx,52(%esp)
+ xorl %edi,%ecx
+ rorl $5,%edx
+ andl %esi,%ecx
+ movl %esi,28(%esp)
+ xorl %esi,%edx
+ addl 8(%esp),%ebx
+ xorl %ecx,%edi
+ rorl $6,%edx
+ movl %ebp,%esi
+ addl %edi,%ebx
+ rorl $9,%esi
+ movl %ebp,%ecx
+ movl 16(%esp),%edi
+ xorl %ebp,%esi
+ movl %ebp,12(%esp)
+ xorl %edi,%ebp
+ rorl $11,%esi
+ andl %ebp,%eax
+ leal 1986661051(%ebx,%edx,1),%edx
+ xorl %ecx,%esi
+ xorl %edi,%eax
+ movl 60(%esp),%ecx
+ rorl $2,%esi
+ addl %edx,%eax
+ addl 24(%esp),%edx
+ addl %esi,%eax
+ movl 48(%esp),%esi
+ movl %ecx,%ebx
+ rorl $11,%ecx
+ movl %esi,%edi
+ rorl $2,%esi
+ xorl %ebx,%ecx
+ shrl $3,%ebx
+ rorl $7,%ecx
+ xorl %edi,%esi
+ xorl %ecx,%ebx
+ rorl $17,%esi
+ addl 56(%esp),%ebx
+ shrl $10,%edi
+ addl 92(%esp),%ebx
+ movl %edx,%ecx
+ xorl %esi,%edi
+ movl 28(%esp),%esi
+ rorl $14,%edx
+ addl %edi,%ebx
+ movl (%esp),%edi
+ xorl %ecx,%edx
+ movl %ebx,56(%esp)
+ xorl %edi,%esi
+ rorl $5,%edx
+ andl %ecx,%esi
+ movl %ecx,24(%esp)
+ xorl %ecx,%edx
+ addl 4(%esp),%ebx
+ xorl %esi,%edi
+ rorl $6,%edx
+ movl %eax,%ecx
+ addl %edi,%ebx
+ rorl $9,%ecx
+ movl %eax,%esi
+ movl 12(%esp),%edi
+ xorl %eax,%ecx
+ movl %eax,8(%esp)
+ xorl %edi,%eax
+ rorl $11,%ecx
+ andl %eax,%ebp
+ leal 2177026350(%ebx,%edx,1),%edx
+ xorl %esi,%ecx
+ xorl %edi,%ebp
+ movl 64(%esp),%esi
+ rorl $2,%ecx
+ addl %edx,%ebp
+ addl 20(%esp),%edx
+ addl %ecx,%ebp
+ movl 52(%esp),%ecx
+ movl %esi,%ebx
+ rorl $11,%esi
+ movl %ecx,%edi
+ rorl $2,%ecx
+ xorl %ebx,%esi
+ shrl $3,%ebx
+ rorl $7,%esi
+ xorl %edi,%ecx
+ xorl %esi,%ebx
+ rorl $17,%ecx
+ addl 60(%esp),%ebx
+ shrl $10,%edi
+ addl 32(%esp),%ebx
+ movl %edx,%esi
+ xorl %ecx,%edi
+ movl 24(%esp),%ecx
+ rorl $14,%edx
+ addl %edi,%ebx
+ movl 28(%esp),%edi
+ xorl %esi,%edx
+ movl %ebx,60(%esp)
+ xorl %edi,%ecx
+ rorl $5,%edx
+ andl %esi,%ecx
+ movl %esi,20(%esp)
+ xorl %esi,%edx
+ addl (%esp),%ebx
+ xorl %ecx,%edi
+ rorl $6,%edx
+ movl %ebp,%esi
+ addl %edi,%ebx
+ rorl $9,%esi
+ movl %ebp,%ecx
+ movl 8(%esp),%edi
+ xorl %ebp,%esi
+ movl %ebp,4(%esp)
+ xorl %edi,%ebp
+ rorl $11,%esi
+ andl %ebp,%eax
+ leal 2456956037(%ebx,%edx,1),%edx
+ xorl %ecx,%esi
+ xorl %edi,%eax
+ movl 68(%esp),%ecx
+ rorl $2,%esi
+ addl %edx,%eax
+ addl 16(%esp),%edx
+ addl %esi,%eax
+ movl 56(%esp),%esi
+ movl %ecx,%ebx
+ rorl $11,%ecx
+ movl %esi,%edi
+ rorl $2,%esi
+ xorl %ebx,%ecx
+ shrl $3,%ebx
+ rorl $7,%ecx
+ xorl %edi,%esi
+ xorl %ecx,%ebx
+ rorl $17,%esi
+ addl 64(%esp),%ebx
+ shrl $10,%edi
+ addl 36(%esp),%ebx
+ movl %edx,%ecx
+ xorl %esi,%edi
+ movl 20(%esp),%esi
+ rorl $14,%edx
+ addl %edi,%ebx
+ movl 24(%esp),%edi
+ xorl %ecx,%edx
+ movl %ebx,64(%esp)
+ xorl %edi,%esi
+ rorl $5,%edx
+ andl %ecx,%esi
+ movl %ecx,16(%esp)
+ xorl %ecx,%edx
addl 28(%esp),%ebx
+ xorl %esi,%edi
+ rorl $6,%edx
+ movl %eax,%ecx
+ addl %edi,%ebx
+ rorl $9,%ecx
+ movl %eax,%esi
+ movl 4(%esp),%edi
+ xorl %eax,%ecx
+ movl %eax,(%esp)
+ xorl %edi,%eax
+ rorl $11,%ecx
+ andl %eax,%ebp
+ leal 2730485921(%ebx,%edx,1),%edx
+ xorl %esi,%ecx
+ xorl %edi,%ebp
+ movl 72(%esp),%esi
+ rorl $2,%ecx
+ addl %edx,%ebp
+ addl 12(%esp),%edx
+ addl %ecx,%ebp
+ movl 60(%esp),%ecx
+ movl %esi,%ebx
+ rorl $11,%esi
+ movl %ecx,%edi
+ rorl $2,%ecx
+ xorl %ebx,%esi
+ shrl $3,%ebx
+ rorl $7,%esi
+ xorl %edi,%ecx
+ xorl %esi,%ebx
+ rorl $17,%ecx
+ addl 68(%esp),%ebx
+ shrl $10,%edi
+ addl 40(%esp),%ebx
+ movl %edx,%esi
+ xorl %ecx,%edi
+ movl 16(%esp),%ecx
+ rorl $14,%edx
+ addl %edi,%ebx
+ movl 20(%esp),%edi
+ xorl %esi,%edx
+ movl %ebx,68(%esp)
+ xorl %edi,%ecx
+ rorl $5,%edx
+ andl %esi,%ecx
+ movl %esi,12(%esp)
+ xorl %esi,%edx
+ addl 24(%esp),%ebx
+ xorl %ecx,%edi
+ rorl $6,%edx
+ movl %ebp,%esi
+ addl %edi,%ebx
+ rorl $9,%esi
+ movl %ebp,%ecx
+ movl (%esp),%edi
+ xorl %ebp,%esi
+ movl %ebp,28(%esp)
+ xorl %edi,%ebp
+ rorl $11,%esi
+ andl %ebp,%eax
+ leal 2820302411(%ebx,%edx,1),%edx
+ xorl %ecx,%esi
+ xorl %edi,%eax
+ movl 76(%esp),%ecx
+ rorl $2,%esi
+ addl %edx,%eax
+ addl 8(%esp),%edx
+ addl %esi,%eax
+ movl 64(%esp),%esi
+ movl %ecx,%ebx
+ rorl $11,%ecx
+ movl %esi,%edi
+ rorl $2,%esi
+ xorl %ebx,%ecx
+ shrl $3,%ebx
+ rorl $7,%ecx
+ xorl %edi,%esi
+ xorl %ecx,%ebx
+ rorl $17,%esi
+ addl 72(%esp),%ebx
+ shrl $10,%edi
+ addl 44(%esp),%ebx
+ movl %edx,%ecx
+ xorl %esi,%edi
+ movl 12(%esp),%esi
+ rorl $14,%edx
+ addl %edi,%ebx
+ movl 16(%esp),%edi
+ xorl %ecx,%edx
+ movl %ebx,72(%esp)
+ xorl %edi,%esi
+ rorl $5,%edx
+ andl %ecx,%esi
+ movl %ecx,8(%esp)
+ xorl %ecx,%edx
+ addl 20(%esp),%ebx
+ xorl %esi,%edi
+ rorl $6,%edx
+ movl %eax,%ecx
+ addl %edi,%ebx
+ rorl $9,%ecx
+ movl %eax,%esi
+ movl 28(%esp),%edi
xorl %eax,%ecx
+ movl %eax,24(%esp)
+ xorl %edi,%eax
+ rorl $11,%ecx
+ andl %eax,%ebp
+ leal 3259730800(%ebx,%edx,1),%edx
+ xorl %esi,%ecx
+ xorl %edi,%ebp
+ movl 80(%esp),%esi
+ rorl $2,%ecx
+ addl %edx,%ebp
+ addl 4(%esp),%edx
+ addl %ecx,%ebp
+ movl 68(%esp),%ecx
+ movl %esi,%ebx
+ rorl $11,%esi
+ movl %ecx,%edi
+ rorl $2,%ecx
+ xorl %ebx,%esi
+ shrl $3,%ebx
+ rorl $7,%esi
+ xorl %edi,%ecx
+ xorl %esi,%ebx
+ rorl $17,%ecx
+ addl 76(%esp),%ebx
+ shrl $10,%edi
+ addl 48(%esp),%ebx
+ movl %edx,%esi
+ xorl %ecx,%edi
+ movl 8(%esp),%ecx
+ rorl $14,%edx
+ addl %edi,%ebx
+ movl 12(%esp),%edi
+ xorl %esi,%edx
+ movl %ebx,76(%esp)
+ xorl %edi,%ecx
+ rorl $5,%edx
+ andl %esi,%ecx
+ movl %esi,4(%esp)
+ xorl %esi,%edx
+ addl 16(%esp),%ebx
+ xorl %ecx,%edi
+ rorl $6,%edx
+ movl %ebp,%esi
+ addl %edi,%ebx
+ rorl $9,%esi
+ movl %ebp,%ecx
+ movl 24(%esp),%edi
+ xorl %ebp,%esi
+ movl %ebp,20(%esp)
+ xorl %edi,%ebp
+ rorl $11,%esi
+ andl %ebp,%eax
+ leal 3345764771(%ebx,%edx,1),%edx
+ xorl %ecx,%esi
+ xorl %edi,%eax
+ movl 84(%esp),%ecx
+ rorl $2,%esi
+ addl %edx,%eax
+ addl (%esp),%edx
+ addl %esi,%eax
+ movl 72(%esp),%esi
+ movl %ecx,%ebx
rorl $11,%ecx
+ movl %esi,%edi
+ rorl $2,%esi
+ xorl %ebx,%ecx
+ shrl $3,%ebx
+ rorl $7,%ecx
+ xorl %edi,%esi
+ xorl %ecx,%ebx
+ rorl $17,%esi
+ addl 80(%esp),%ebx
+ shrl $10,%edi
+ addl 52(%esp),%ebx
+ movl %edx,%ecx
+ xorl %esi,%edi
movl 4(%esp),%esi
+ rorl $14,%edx
+ addl %edi,%ebx
+ movl 8(%esp),%edi
+ xorl %ecx,%edx
+ movl %ebx,80(%esp)
+ xorl %edi,%esi
+ rorl $5,%edx
+ andl %ecx,%esi
+ movl %ecx,(%esp)
+ xorl %ecx,%edx
+ addl 12(%esp),%ebx
+ xorl %esi,%edi
+ rorl $6,%edx
+ movl %eax,%ecx
+ addl %edi,%ebx
+ rorl $9,%ecx
+ movl %eax,%esi
+ movl 20(%esp),%edi
xorl %eax,%ecx
+ movl %eax,16(%esp)
+ xorl %edi,%eax
+ rorl $11,%ecx
+ andl %eax,%ebp
+ leal 3516065817(%ebx,%edx,1),%edx
+ xorl %esi,%ecx
+ xorl %edi,%ebp
+ movl 88(%esp),%esi
rorl $2,%ecx
- addl %ebx,%edx
+ addl %edx,%ebp
+ addl 28(%esp),%edx
+ addl %ecx,%ebp
+ movl 76(%esp),%ecx
+ movl %esi,%ebx
+ rorl $11,%esi
+ movl %ecx,%edi
+ rorl $2,%ecx
+ xorl %ebx,%esi
+ shrl $3,%ebx
+ rorl $7,%esi
+ xorl %edi,%ecx
+ xorl %esi,%ebx
+ rorl $17,%ecx
+ addl 84(%esp),%ebx
+ shrl $10,%edi
+ addl 56(%esp),%ebx
+ movl %edx,%esi
+ xorl %ecx,%edi
+ movl (%esp),%ecx
+ rorl $14,%edx
+ addl %edi,%ebx
+ movl 4(%esp),%edi
+ xorl %esi,%edx
+ movl %ebx,84(%esp)
+ xorl %edi,%ecx
+ rorl $5,%edx
+ andl %esi,%ecx
+ movl %esi,28(%esp)
+ xorl %esi,%edx
+ addl 8(%esp),%ebx
+ xorl %ecx,%edi
+ rorl $6,%edx
+ movl %ebp,%esi
+ addl %edi,%ebx
+ rorl $9,%esi
+ movl %ebp,%ecx
+ movl 16(%esp),%edi
+ xorl %ebp,%esi
+ movl %ebp,12(%esp)
+ xorl %edi,%ebp
+ rorl $11,%esi
+ andl %ebp,%eax
+ leal 3600352804(%ebx,%edx,1),%edx
+ xorl %ecx,%esi
+ xorl %edi,%eax
+ movl 92(%esp),%ecx
+ rorl $2,%esi
+ addl %edx,%eax
+ addl 24(%esp),%edx
+ addl %esi,%eax
+ movl 80(%esp),%esi
+ movl %ecx,%ebx
+ rorl $11,%ecx
+ movl %esi,%edi
+ rorl $2,%esi
+ xorl %ebx,%ecx
+ shrl $3,%ebx
+ rorl $7,%ecx
+ xorl %edi,%esi
+ xorl %ecx,%ebx
+ rorl $17,%esi
+ addl 88(%esp),%ebx
+ shrl $10,%edi
+ addl 60(%esp),%ebx
+ movl %edx,%ecx
+ xorl %esi,%edi
+ movl 28(%esp),%esi
+ rorl $14,%edx
+ addl %edi,%ebx
+ movl (%esp),%edi
+ xorl %ecx,%edx
+ movl %ebx,88(%esp)
+ xorl %edi,%esi
+ rorl $5,%edx
+ andl %ecx,%esi
+ movl %ecx,24(%esp)
+ xorl %ecx,%edx
+ addl 4(%esp),%ebx
+ xorl %esi,%edi
+ rorl $6,%edx
+ movl %eax,%ecx
+ addl %edi,%ebx
+ rorl $9,%ecx
+ movl %eax,%esi
+ movl 12(%esp),%edi
+ xorl %eax,%ecx
+ movl %eax,8(%esp)
+ xorl %edi,%eax
+ rorl $11,%ecx
+ andl %eax,%ebp
+ leal 4094571909(%ebx,%edx,1),%edx
+ xorl %esi,%ecx
+ xorl %edi,%ebp
+ movl 32(%esp),%esi
+ rorl $2,%ecx
+ addl %edx,%ebp
+ addl 20(%esp),%edx
+ addl %ecx,%ebp
+ movl 84(%esp),%ecx
+ movl %esi,%ebx
+ rorl $11,%esi
+ movl %ecx,%edi
+ rorl $2,%ecx
+ xorl %ebx,%esi
+ shrl $3,%ebx
+ rorl $7,%esi
+ xorl %edi,%ecx
+ xorl %esi,%ebx
+ rorl $17,%ecx
+ addl 92(%esp),%ebx
+ shrl $10,%edi
+ addl 64(%esp),%ebx
+ movl %edx,%esi
+ xorl %ecx,%edi
+ movl 24(%esp),%ecx
+ rorl $14,%edx
+ addl %edi,%ebx
+ movl 28(%esp),%edi
+ xorl %esi,%edx
+ movl %ebx,92(%esp)
+ xorl %edi,%ecx
+ rorl $5,%edx
+ andl %esi,%ecx
+ movl %esi,20(%esp)
+ xorl %esi,%edx
+ addl (%esp),%ebx
+ xorl %ecx,%edi
+ rorl $6,%edx
+ movl %ebp,%esi
+ addl %edi,%ebx
+ rorl $9,%esi
+ movl %ebp,%ecx
movl 8(%esp),%edi
- addl %ecx,%ebx
+ xorl %ebp,%esi
+ movl %ebp,4(%esp)
+ xorl %edi,%ebp
+ rorl $11,%esi
+ andl %ebp,%eax
+ leal 275423344(%ebx,%edx,1),%edx
+ xorl %ecx,%esi
+ xorl %edi,%eax
+ movl 36(%esp),%ecx
+ rorl $2,%esi
+ addl %edx,%eax
+ addl 16(%esp),%edx
+ addl %esi,%eax
+ movl 88(%esp),%esi
+ movl %ecx,%ebx
+ rorl $11,%ecx
+ movl %esi,%edi
+ rorl $2,%esi
+ xorl %ebx,%ecx
+ shrl $3,%ebx
+ rorl $7,%ecx
+ xorl %edi,%esi
+ xorl %ecx,%ebx
+ rorl $17,%esi
+ addl 32(%esp),%ebx
+ shrl $10,%edi
+ addl 68(%esp),%ebx
+ movl %edx,%ecx
+ xorl %esi,%edi
+ movl 20(%esp),%esi
+ rorl $14,%edx
+ addl %edi,%ebx
+ movl 24(%esp),%edi
+ xorl %ecx,%edx
+ movl %ebx,32(%esp)
+ xorl %edi,%esi
+ rorl $5,%edx
+ andl %ecx,%esi
+ movl %ecx,16(%esp)
+ xorl %ecx,%edx
+ addl 28(%esp),%ebx
+ xorl %esi,%edi
+ rorl $6,%edx
+ movl %eax,%ecx
+ addl %edi,%ebx
+ rorl $9,%ecx
+ movl %eax,%esi
+ movl 4(%esp),%edi
+ xorl %eax,%ecx
movl %eax,(%esp)
+ xorl %edi,%eax
+ rorl $11,%ecx
+ andl %eax,%ebp
+ leal 430227734(%ebx,%edx,1),%edx
+ xorl %esi,%ecx
+ xorl %edi,%ebp
+ movl 40(%esp),%esi
+ rorl $2,%ecx
+ addl %edx,%ebp
+ addl 12(%esp),%edx
+ addl %ecx,%ebp
+ movl 92(%esp),%ecx
+ movl %esi,%ebx
+ rorl $11,%esi
+ movl %ecx,%edi
+ rorl $2,%ecx
+ xorl %ebx,%esi
+ shrl $3,%ebx
+ rorl $7,%esi
+ xorl %edi,%ecx
+ xorl %esi,%ebx
+ rorl $17,%ecx
+ addl 36(%esp),%ebx
+ shrl $10,%edi
+ addl 72(%esp),%ebx
+ movl %edx,%esi
+ xorl %ecx,%edi
+ movl 16(%esp),%ecx
+ rorl $14,%edx
+ addl %edi,%ebx
+ movl 20(%esp),%edi
+ xorl %esi,%edx
+ movl %ebx,36(%esp)
+ xorl %edi,%ecx
+ rorl $5,%edx
+ andl %esi,%ecx
+ movl %esi,12(%esp)
+ xorl %esi,%edx
+ addl 24(%esp),%ebx
+ xorl %ecx,%edi
+ rorl $6,%edx
+ movl %ebp,%esi
+ addl %edi,%ebx
+ rorl $9,%esi
+ movl %ebp,%ecx
+ movl (%esp),%edi
+ xorl %ebp,%esi
+ movl %ebp,28(%esp)
+ xorl %edi,%ebp
+ rorl $11,%esi
+ andl %ebp,%eax
+ leal 506948616(%ebx,%edx,1),%edx
+ xorl %ecx,%esi
+ xorl %edi,%eax
+ movl 44(%esp),%ecx
+ rorl $2,%esi
+ addl %edx,%eax
+ addl 8(%esp),%edx
+ addl %esi,%eax
+ movl 32(%esp),%esi
+ movl %ecx,%ebx
+ rorl $11,%ecx
+ movl %esi,%edi
+ rorl $2,%esi
+ xorl %ebx,%ecx
+ shrl $3,%ebx
+ rorl $7,%ecx
+ xorl %edi,%esi
+ xorl %ecx,%ebx
+ rorl $17,%esi
+ addl 40(%esp),%ebx
+ shrl $10,%edi
+ addl 76(%esp),%ebx
+ movl %edx,%ecx
+ xorl %esi,%edi
+ movl 12(%esp),%esi
+ rorl $14,%edx
+ addl %edi,%ebx
+ movl 16(%esp),%edi
+ xorl %ecx,%edx
+ movl %ebx,40(%esp)
+ xorl %edi,%esi
+ rorl $5,%edx
+ andl %ecx,%esi
+ movl %ecx,8(%esp)
+ xorl %ecx,%edx
+ addl 20(%esp),%ebx
+ xorl %esi,%edi
+ rorl $6,%edx
movl %eax,%ecx
- subl $4,%esp
- orl %esi,%eax
+ addl %edi,%ebx
+ rorl $9,%ecx
+ movl %eax,%esi
+ movl 28(%esp),%edi
+ xorl %eax,%ecx
+ movl %eax,24(%esp)
+ xorl %edi,%eax
+ rorl $11,%ecx
+ andl %eax,%ebp
+ leal 659060556(%ebx,%edx,1),%edx
+ xorl %esi,%ecx
+ xorl %edi,%ebp
+ movl 48(%esp),%esi
+ rorl $2,%ecx
+ addl %edx,%ebp
+ addl 4(%esp),%edx
+ addl %ecx,%ebp
+ movl 36(%esp),%ecx
+ movl %esi,%ebx
+ rorl $11,%esi
+ movl %ecx,%edi
+ rorl $2,%ecx
+ xorl %ebx,%esi
+ shrl $3,%ebx
+ rorl $7,%esi
+ xorl %edi,%ecx
+ xorl %esi,%ebx
+ rorl $17,%ecx
+ addl 44(%esp),%ebx
+ shrl $10,%edi
+ addl 80(%esp),%ebx
+ movl %edx,%esi
+ xorl %ecx,%edi
+ movl 8(%esp),%ecx
+ rorl $14,%edx
+ addl %edi,%ebx
+ movl 12(%esp),%edi
+ xorl %esi,%edx
+ movl %ebx,44(%esp)
+ xorl %edi,%ecx
+ rorl $5,%edx
andl %esi,%ecx
- andl %edi,%eax
- movl (%ebp),%esi
- orl %ecx,%eax
- addl $4,%ebp
- addl %ebx,%eax
- movl 152(%esp),%ebx
- addl %esi,%edx
+ movl %esi,4(%esp)
+ xorl %esi,%edx
+ addl 16(%esp),%ebx
+ xorl %ecx,%edi
+ rorl $6,%edx
+ movl %ebp,%esi
+ addl %edi,%ebx
+ rorl $9,%esi
+ movl %ebp,%ecx
+ movl 24(%esp),%edi
+ xorl %ebp,%esi
+ movl %ebp,20(%esp)
+ xorl %edi,%ebp
+ rorl $11,%esi
+ andl %ebp,%eax
+ leal 883997877(%ebx,%edx,1),%edx
+ xorl %ecx,%esi
+ xorl %edi,%eax
+ movl 52(%esp),%ecx
+ rorl $2,%esi
+ addl %edx,%eax
+ addl (%esp),%edx
addl %esi,%eax
- cmpl $3329325298,%esi
- jne .L00416_63
- movl 352(%esp),%esi
- movl 4(%esp),%ebx
+ movl 40(%esp),%esi
+ movl %ecx,%ebx
+ rorl $11,%ecx
+ movl %esi,%edi
+ rorl $2,%esi
+ xorl %ebx,%ecx
+ shrl $3,%ebx
+ rorl $7,%ecx
+ xorl %edi,%esi
+ xorl %ecx,%ebx
+ rorl $17,%esi
+ addl 48(%esp),%ebx
+ shrl $10,%edi
+ addl 84(%esp),%ebx
+ movl %edx,%ecx
+ xorl %esi,%edi
+ movl 4(%esp),%esi
+ rorl $14,%edx
+ addl %edi,%ebx
+ movl 8(%esp),%edi
+ xorl %ecx,%edx
+ movl %ebx,48(%esp)
+ xorl %edi,%esi
+ rorl $5,%edx
+ andl %ecx,%esi
+ movl %ecx,(%esp)
+ xorl %ecx,%edx
+ addl 12(%esp),%ebx
+ xorl %esi,%edi
+ rorl $6,%edx
+ movl %eax,%ecx
+ addl %edi,%ebx
+ rorl $9,%ecx
+ movl %eax,%esi
+ movl 20(%esp),%edi
+ xorl %eax,%ecx
+ movl %eax,16(%esp)
+ xorl %edi,%eax
+ rorl $11,%ecx
+ andl %eax,%ebp
+ leal 958139571(%ebx,%edx,1),%edx
+ xorl %esi,%ecx
+ xorl %edi,%ebp
+ movl 56(%esp),%esi
+ rorl $2,%ecx
+ addl %edx,%ebp
+ addl 28(%esp),%edx
+ addl %ecx,%ebp
+ movl 44(%esp),%ecx
+ movl %esi,%ebx
+ rorl $11,%esi
+ movl %ecx,%edi
+ rorl $2,%ecx
+ xorl %ebx,%esi
+ shrl $3,%ebx
+ rorl $7,%esi
+ xorl %edi,%ecx
+ xorl %esi,%ebx
+ rorl $17,%ecx
+ addl 52(%esp),%ebx
+ shrl $10,%edi
+ addl 88(%esp),%ebx
+ movl %edx,%esi
+ xorl %ecx,%edi
+ movl (%esp),%ecx
+ rorl $14,%edx
+ addl %edi,%ebx
+ movl 4(%esp),%edi
+ xorl %esi,%edx
+ movl %ebx,52(%esp)
+ xorl %edi,%ecx
+ rorl $5,%edx
+ andl %esi,%ecx
+ movl %esi,28(%esp)
+ xorl %esi,%edx
+ addl 8(%esp),%ebx
+ xorl %ecx,%edi
+ rorl $6,%edx
+ movl %ebp,%esi
+ addl %edi,%ebx
+ rorl $9,%esi
+ movl %ebp,%ecx
+ movl 16(%esp),%edi
+ xorl %ebp,%esi
+ movl %ebp,12(%esp)
+ xorl %edi,%ebp
+ rorl $11,%esi
+ andl %ebp,%eax
+ leal 1322822218(%ebx,%edx,1),%edx
+ xorl %ecx,%esi
+ xorl %edi,%eax
+ movl 60(%esp),%ecx
+ rorl $2,%esi
+ addl %edx,%eax
+ addl 24(%esp),%edx
+ addl %esi,%eax
+ movl 48(%esp),%esi
+ movl %ecx,%ebx
+ rorl $11,%ecx
+ movl %esi,%edi
+ rorl $2,%esi
+ xorl %ebx,%ecx
+ shrl $3,%ebx
+ rorl $7,%ecx
+ xorl %edi,%esi
+ xorl %ecx,%ebx
+ rorl $17,%esi
+ addl 56(%esp),%ebx
+ shrl $10,%edi
+ addl 92(%esp),%ebx
+ movl %edx,%ecx
+ xorl %esi,%edi
+ movl 28(%esp),%esi
+ rorl $14,%edx
+ addl %edi,%ebx
+ movl (%esp),%edi
+ xorl %ecx,%edx
+ movl %ebx,56(%esp)
+ xorl %edi,%esi
+ rorl $5,%edx
+ andl %ecx,%esi
+ movl %ecx,24(%esp)
+ xorl %ecx,%edx
+ addl 4(%esp),%ebx
+ xorl %esi,%edi
+ rorl $6,%edx
+ movl %eax,%ecx
+ addl %edi,%ebx
+ rorl $9,%ecx
+ movl %eax,%esi
+ movl 12(%esp),%edi
+ xorl %eax,%ecx
+ movl %eax,8(%esp)
+ xorl %edi,%eax
+ rorl $11,%ecx
+ andl %eax,%ebp
+ leal 1537002063(%ebx,%edx,1),%edx
+ xorl %esi,%ecx
+ xorl %edi,%ebp
+ movl 64(%esp),%esi
+ rorl $2,%ecx
+ addl %edx,%ebp
+ addl 20(%esp),%edx
+ addl %ecx,%ebp
+ movl 52(%esp),%ecx
+ movl %esi,%ebx
+ rorl $11,%esi
+ movl %ecx,%edi
+ rorl $2,%ecx
+ xorl %ebx,%esi
+ shrl $3,%ebx
+ rorl $7,%esi
+ xorl %edi,%ecx
+ xorl %esi,%ebx
+ rorl $17,%ecx
+ addl 60(%esp),%ebx
+ shrl $10,%edi
+ addl 32(%esp),%ebx
+ movl %edx,%esi
+ xorl %ecx,%edi
+ movl 24(%esp),%ecx
+ rorl $14,%edx
+ addl %edi,%ebx
+ movl 28(%esp),%edi
+ xorl %esi,%edx
+ movl %ebx,60(%esp)
+ xorl %edi,%ecx
+ rorl $5,%edx
+ andl %esi,%ecx
+ movl %esi,20(%esp)
+ xorl %esi,%edx
+ addl (%esp),%ebx
+ xorl %ecx,%edi
+ rorl $6,%edx
+ movl %ebp,%esi
+ addl %edi,%ebx
+ rorl $9,%esi
+ movl %ebp,%ecx
+ movl 8(%esp),%edi
+ xorl %ebp,%esi
+ movl %ebp,4(%esp)
+ xorl %edi,%ebp
+ rorl $11,%esi
+ andl %ebp,%eax
+ leal 1747873779(%ebx,%edx,1),%edx
+ xorl %ecx,%esi
+ xorl %edi,%eax
+ movl 68(%esp),%ecx
+ rorl $2,%esi
+ addl %edx,%eax
+ addl 16(%esp),%edx
+ addl %esi,%eax
+ movl 56(%esp),%esi
+ movl %ecx,%ebx
+ rorl $11,%ecx
+ movl %esi,%edi
+ rorl $2,%esi
+ xorl %ebx,%ecx
+ shrl $3,%ebx
+ rorl $7,%ecx
+ xorl %edi,%esi
+ xorl %ecx,%ebx
+ rorl $17,%esi
+ addl 64(%esp),%ebx
+ shrl $10,%edi
+ addl 36(%esp),%ebx
+ movl %edx,%ecx
+ xorl %esi,%edi
+ movl 20(%esp),%esi
+ rorl $14,%edx
+ addl %edi,%ebx
+ movl 24(%esp),%edi
+ xorl %ecx,%edx
+ movl %ebx,64(%esp)
+ xorl %edi,%esi
+ rorl $5,%edx
+ andl %ecx,%esi
+ movl %ecx,16(%esp)
+ xorl %ecx,%edx
+ addl 28(%esp),%ebx
+ xorl %esi,%edi
+ rorl $6,%edx
+ movl %eax,%ecx
+ addl %edi,%ebx
+ rorl $9,%ecx
+ movl %eax,%esi
+ movl 4(%esp),%edi
+ xorl %eax,%ecx
+ movl %eax,(%esp)
+ xorl %edi,%eax
+ rorl $11,%ecx
+ andl %eax,%ebp
+ leal 1955562222(%ebx,%edx,1),%edx
+ xorl %esi,%ecx
+ xorl %edi,%ebp
+ movl 72(%esp),%esi
+ rorl $2,%ecx
+ addl %edx,%ebp
+ addl 12(%esp),%edx
+ addl %ecx,%ebp
+ movl 60(%esp),%ecx
+ movl %esi,%ebx
+ rorl $11,%esi
+ movl %ecx,%edi
+ rorl $2,%ecx
+ xorl %ebx,%esi
+ shrl $3,%ebx
+ rorl $7,%esi
+ xorl %edi,%ecx
+ xorl %esi,%ebx
+ rorl $17,%ecx
+ addl 68(%esp),%ebx
+ shrl $10,%edi
+ addl 40(%esp),%ebx
+ movl %edx,%esi
+ xorl %ecx,%edi
+ movl 16(%esp),%ecx
+ rorl $14,%edx
+ addl %edi,%ebx
+ movl 20(%esp),%edi
+ xorl %esi,%edx
+ movl %ebx,68(%esp)
+ xorl %edi,%ecx
+ rorl $5,%edx
+ andl %esi,%ecx
+ movl %esi,12(%esp)
+ xorl %esi,%edx
+ addl 24(%esp),%ebx
+ xorl %ecx,%edi
+ rorl $6,%edx
+ movl %ebp,%esi
+ addl %edi,%ebx
+ rorl $9,%esi
+ movl %ebp,%ecx
+ movl (%esp),%edi
+ xorl %ebp,%esi
+ movl %ebp,28(%esp)
+ xorl %edi,%ebp
+ rorl $11,%esi
+ andl %ebp,%eax
+ leal 2024104815(%ebx,%edx,1),%edx
+ xorl %ecx,%esi
+ xorl %edi,%eax
+ movl 76(%esp),%ecx
+ rorl $2,%esi
+ addl %edx,%eax
+ addl 8(%esp),%edx
+ addl %esi,%eax
+ movl 64(%esp),%esi
+ movl %ecx,%ebx
+ rorl $11,%ecx
+ movl %esi,%edi
+ rorl $2,%esi
+ xorl %ebx,%ecx
+ shrl $3,%ebx
+ rorl $7,%ecx
+ xorl %edi,%esi
+ xorl %ecx,%ebx
+ rorl $17,%esi
+ addl 72(%esp),%ebx
+ shrl $10,%edi
+ addl 44(%esp),%ebx
+ movl %edx,%ecx
+ xorl %esi,%edi
+ movl 12(%esp),%esi
+ rorl $14,%edx
+ addl %edi,%ebx
+ movl 16(%esp),%edi
+ xorl %ecx,%edx
+ movl %ebx,72(%esp)
+ xorl %edi,%esi
+ rorl $5,%edx
+ andl %ecx,%esi
+ movl %ecx,8(%esp)
+ xorl %ecx,%edx
+ addl 20(%esp),%ebx
+ xorl %esi,%edi
+ rorl $6,%edx
+ movl %eax,%ecx
+ addl %edi,%ebx
+ rorl $9,%ecx
+ movl %eax,%esi
+ movl 28(%esp),%edi
+ xorl %eax,%ecx
+ movl %eax,24(%esp)
+ xorl %edi,%eax
+ rorl $11,%ecx
+ andl %eax,%ebp
+ leal 2227730452(%ebx,%edx,1),%edx
+ xorl %esi,%ecx
+ xorl %edi,%ebp
+ movl 80(%esp),%esi
+ rorl $2,%ecx
+ addl %edx,%ebp
+ addl 4(%esp),%edx
+ addl %ecx,%ebp
+ movl 68(%esp),%ecx
+ movl %esi,%ebx
+ rorl $11,%esi
+ movl %ecx,%edi
+ rorl $2,%ecx
+ xorl %ebx,%esi
+ shrl $3,%ebx
+ rorl $7,%esi
+ xorl %edi,%ecx
+ xorl %esi,%ebx
+ rorl $17,%ecx
+ addl 76(%esp),%ebx
+ shrl $10,%edi
+ addl 48(%esp),%ebx
+ movl %edx,%esi
+ xorl %ecx,%edi
movl 8(%esp),%ecx
+ rorl $14,%edx
+ addl %edi,%ebx
+ movl 12(%esp),%edi
+ xorl %esi,%edx
+ movl %ebx,76(%esp)
+ xorl %edi,%ecx
+ rorl $5,%edx
+ andl %esi,%ecx
+ movl %esi,4(%esp)
+ xorl %esi,%edx
+ addl 16(%esp),%ebx
+ xorl %ecx,%edi
+ rorl $6,%edx
+ movl %ebp,%esi
+ addl %edi,%ebx
+ rorl $9,%esi
+ movl %ebp,%ecx
+ movl 24(%esp),%edi
+ xorl %ebp,%esi
+ movl %ebp,20(%esp)
+ xorl %edi,%ebp
+ rorl $11,%esi
+ andl %ebp,%eax
+ leal 2361852424(%ebx,%edx,1),%edx
+ xorl %ecx,%esi
+ xorl %edi,%eax
+ movl 84(%esp),%ecx
+ rorl $2,%esi
+ addl %edx,%eax
+ addl (%esp),%edx
+ addl %esi,%eax
+ movl 72(%esp),%esi
+ movl %ecx,%ebx
+ rorl $11,%ecx
+ movl %esi,%edi
+ rorl $2,%esi
+ xorl %ebx,%ecx
+ shrl $3,%ebx
+ rorl $7,%ecx
+ xorl %edi,%esi
+ xorl %ecx,%ebx
+ rorl $17,%esi
+ addl 80(%esp),%ebx
+ shrl $10,%edi
+ addl 52(%esp),%ebx
+ movl %edx,%ecx
+ xorl %esi,%edi
+ movl 4(%esp),%esi
+ rorl $14,%edx
+ addl %edi,%ebx
+ movl 8(%esp),%edi
+ xorl %ecx,%edx
+ movl %ebx,80(%esp)
+ xorl %edi,%esi
+ rorl $5,%edx
+ andl %ecx,%esi
+ movl %ecx,(%esp)
+ xorl %ecx,%edx
+ addl 12(%esp),%ebx
+ xorl %esi,%edi
+ rorl $6,%edx
+ movl %eax,%ecx
+ addl %edi,%ebx
+ rorl $9,%ecx
+ movl %eax,%esi
+ movl 20(%esp),%edi
+ xorl %eax,%ecx
+ movl %eax,16(%esp)
+ xorl %edi,%eax
+ rorl $11,%ecx
+ andl %eax,%ebp
+ leal 2428436474(%ebx,%edx,1),%edx
+ xorl %esi,%ecx
+ xorl %edi,%ebp
+ movl 88(%esp),%esi
+ rorl $2,%ecx
+ addl %edx,%ebp
+ addl 28(%esp),%edx
+ addl %ecx,%ebp
+ movl 76(%esp),%ecx
+ movl %esi,%ebx
+ rorl $11,%esi
+ movl %ecx,%edi
+ rorl $2,%ecx
+ xorl %ebx,%esi
+ shrl $3,%ebx
+ rorl $7,%esi
+ xorl %edi,%ecx
+ xorl %esi,%ebx
+ rorl $17,%ecx
+ addl 84(%esp),%ebx
+ shrl $10,%edi
+ addl 56(%esp),%ebx
+ movl %edx,%esi
+ xorl %ecx,%edi
+ movl (%esp),%ecx
+ rorl $14,%edx
+ addl %edi,%ebx
+ movl 4(%esp),%edi
+ xorl %esi,%edx
+ movl %ebx,84(%esp)
+ xorl %edi,%ecx
+ rorl $5,%edx
+ andl %esi,%ecx
+ movl %esi,28(%esp)
+ xorl %esi,%edx
+ addl 8(%esp),%ebx
+ xorl %ecx,%edi
+ rorl $6,%edx
+ movl %ebp,%esi
+ addl %edi,%ebx
+ rorl $9,%esi
+ movl %ebp,%ecx
+ movl 16(%esp),%edi
+ xorl %ebp,%esi
+ movl %ebp,12(%esp)
+ xorl %edi,%ebp
+ rorl $11,%esi
+ andl %ebp,%eax
+ leal 2756734187(%ebx,%edx,1),%edx
+ xorl %ecx,%esi
+ xorl %edi,%eax
+ movl 92(%esp),%ecx
+ rorl $2,%esi
+ addl %edx,%eax
+ addl 24(%esp),%edx
+ addl %esi,%eax
+ movl 80(%esp),%esi
+ movl %ecx,%ebx
+ rorl $11,%ecx
+ movl %esi,%edi
+ rorl $2,%esi
+ xorl %ebx,%ecx
+ shrl $3,%ebx
+ rorl $7,%ecx
+ xorl %edi,%esi
+ xorl %ecx,%ebx
+ rorl $17,%esi
+ addl 88(%esp),%ebx
+ shrl $10,%edi
+ addl 60(%esp),%ebx
+ movl %edx,%ecx
+ xorl %esi,%edi
+ movl 28(%esp),%esi
+ rorl $14,%edx
+ addl %edi,%ebx
+ movl (%esp),%edi
+ xorl %ecx,%edx
+ xorl %edi,%esi
+ rorl $5,%edx
+ andl %ecx,%esi
+ movl %ecx,24(%esp)
+ xorl %ecx,%edx
+ addl 4(%esp),%ebx
+ xorl %esi,%edi
+ rorl $6,%edx
+ movl %eax,%ecx
+ addl %edi,%ebx
+ rorl $9,%ecx
+ movl %eax,%esi
movl 12(%esp),%edi
+ xorl %eax,%ecx
+ movl %eax,8(%esp)
+ xorl %edi,%eax
+ rorl $11,%ecx
+ andl %eax,%ebp
+ leal 3204031479(%ebx,%edx,1),%edx
+ xorl %esi,%ecx
+ xorl %edi,%ebp
+ movl 32(%esp),%esi
+ rorl $2,%ecx
+ addl %edx,%ebp
+ addl 20(%esp),%edx
+ addl %ecx,%ebp
+ movl 84(%esp),%ecx
+ movl %esi,%ebx
+ rorl $11,%esi
+ movl %ecx,%edi
+ rorl $2,%ecx
+ xorl %ebx,%esi
+ shrl $3,%ebx
+ rorl $7,%esi
+ xorl %edi,%ecx
+ xorl %esi,%ebx
+ rorl $17,%ecx
+ addl 92(%esp),%ebx
+ shrl $10,%edi
+ addl 64(%esp),%ebx
+ movl %edx,%esi
+ xorl %ecx,%edi
+ movl 24(%esp),%ecx
+ rorl $14,%edx
+ addl %edi,%ebx
+ movl 28(%esp),%edi
+ xorl %esi,%edx
+ xorl %edi,%ecx
+ rorl $5,%edx
+ andl %esi,%ecx
+ movl %esi,20(%esp)
+ xorl %esi,%edx
+ addl (%esp),%ebx
+ xorl %ecx,%edi
+ rorl $6,%edx
+ movl %ebp,%esi
+ addl %edi,%ebx
+ rorl $9,%esi
+ movl %ebp,%ecx
+ movl 8(%esp),%edi
+ xorl %ebp,%esi
+ movl %ebp,4(%esp)
+ xorl %edi,%ebp
+ rorl $11,%esi
+ andl %ebp,%eax
+ leal 3329325298(%ebx,%edx,1),%edx
+ xorl %ecx,%esi
+ xorl %edi,%eax
+ rorl $2,%esi
+ addl %edx,%eax
+ addl 16(%esp),%edx
+ addl %esi,%eax
+ movl 96(%esp),%esi
+ xorl %edi,%ebp
+ movl 12(%esp),%ecx
addl (%esi),%eax
- addl 4(%esi),%ebx
- addl 8(%esi),%ecx
- addl 12(%esi),%edi
+ addl 4(%esi),%ebp
+ addl 8(%esi),%edi
+ addl 12(%esi),%ecx
movl %eax,(%esi)
- movl %ebx,4(%esi)
- movl %ecx,8(%esi)
- movl %edi,12(%esi)
- movl 20(%esp),%eax
+ movl %ebp,4(%esi)
+ movl %edi,8(%esi)
+ movl %ecx,12(%esi)
+ movl %ebp,4(%esp)
+ xorl %edi,%ebp
+ movl %edi,8(%esp)
+ movl %ecx,12(%esp)
+ movl 20(%esp),%edi
movl 24(%esp),%ebx
movl 28(%esp),%ecx
- movl 356(%esp),%edi
addl 16(%esi),%edx
- addl 20(%esi),%eax
+ addl 20(%esi),%edi
addl 24(%esi),%ebx
addl 28(%esi),%ecx
movl %edx,16(%esi)
- movl %eax,20(%esi)
+ movl %edi,20(%esi)
movl %ebx,24(%esi)
movl %ecx,28(%esi)
- addl $352,%esp
- subl $256,%ebp
- cmpl 8(%esp),%edi
- jb .L002loop
- movl 12(%esp),%esp
+ movl %edi,20(%esp)
+ movl 100(%esp),%edi
+ movl %ebx,24(%esp)
+ movl %ecx,28(%esp)
+ cmpl 104(%esp),%edi
+ jb .L009grand_loop
+ movl 108(%esp),%esp
+ popl %edi
+ popl %esi
+ popl %ebx
+ popl %ebp
+ ret
+.align 32
+.L004shaext:
+ subl $32,%esp
+ movdqu (%esi),%xmm1
+ leal 128(%ebp),%ebp
+ movdqu 16(%esi),%xmm2
+ movdqa 128(%ebp),%xmm7
+ pshufd $27,%xmm1,%xmm0
+ pshufd $177,%xmm1,%xmm1
+ pshufd $27,%xmm2,%xmm2
+.byte 102,15,58,15,202,8
+ punpcklqdq %xmm0,%xmm2
+ jmp .L010loop_shaext
+.align 16
+.L010loop_shaext:
+ movdqu (%edi),%xmm3
+ movdqu 16(%edi),%xmm4
+ movdqu 32(%edi),%xmm5
+.byte 102,15,56,0,223
+ movdqu 48(%edi),%xmm6
+ movdqa %xmm2,16(%esp)
+ movdqa -128(%ebp),%xmm0
+ paddd %xmm3,%xmm0
+.byte 102,15,56,0,231
+.byte 15,56,203,209
+ pshufd $14,%xmm0,%xmm0
+ nop
+ movdqa %xmm1,(%esp)
+.byte 15,56,203,202
+ movdqa -112(%ebp),%xmm0
+ paddd %xmm4,%xmm0
+.byte 102,15,56,0,239
+.byte 15,56,203,209
+ pshufd $14,%xmm0,%xmm0
+ leal 64(%edi),%edi
+.byte 15,56,204,220
+.byte 15,56,203,202
+ movdqa -96(%ebp),%xmm0
+ paddd %xmm5,%xmm0
+.byte 102,15,56,0,247
+.byte 15,56,203,209
+ pshufd $14,%xmm0,%xmm0
+ movdqa %xmm6,%xmm7
+.byte 102,15,58,15,253,4
+ nop
+ paddd %xmm7,%xmm3
+.byte 15,56,204,229
+.byte 15,56,203,202
+ movdqa -80(%ebp),%xmm0
+ paddd %xmm6,%xmm0
+.byte 15,56,205,222
+.byte 15,56,203,209
+ pshufd $14,%xmm0,%xmm0
+ movdqa %xmm3,%xmm7
+.byte 102,15,58,15,254,4
+ nop
+ paddd %xmm7,%xmm4
+.byte 15,56,204,238
+.byte 15,56,203,202
+ movdqa -64(%ebp),%xmm0
+ paddd %xmm3,%xmm0
+.byte 15,56,205,227
+.byte 15,56,203,209
+ pshufd $14,%xmm0,%xmm0
+ movdqa %xmm4,%xmm7
+.byte 102,15,58,15,251,4
+ nop
+ paddd %xmm7,%xmm5
+.byte 15,56,204,243
+.byte 15,56,203,202
+ movdqa -48(%ebp),%xmm0
+ paddd %xmm4,%xmm0
+.byte 15,56,205,236
+.byte 15,56,203,209
+ pshufd $14,%xmm0,%xmm0
+ movdqa %xmm5,%xmm7
+.byte 102,15,58,15,252,4
+ nop
+ paddd %xmm7,%xmm6
+.byte 15,56,204,220
+.byte 15,56,203,202
+ movdqa -32(%ebp),%xmm0
+ paddd %xmm5,%xmm0
+.byte 15,56,205,245
+.byte 15,56,203,209
+ pshufd $14,%xmm0,%xmm0
+ movdqa %xmm6,%xmm7
+.byte 102,15,58,15,253,4
+ nop
+ paddd %xmm7,%xmm3
+.byte 15,56,204,229
+.byte 15,56,203,202
+ movdqa -16(%ebp),%xmm0
+ paddd %xmm6,%xmm0
+.byte 15,56,205,222
+.byte 15,56,203,209
+ pshufd $14,%xmm0,%xmm0
+ movdqa %xmm3,%xmm7
+.byte 102,15,58,15,254,4
+ nop
+ paddd %xmm7,%xmm4
+.byte 15,56,204,238
+.byte 15,56,203,202
+ movdqa (%ebp),%xmm0
+ paddd %xmm3,%xmm0
+.byte 15,56,205,227
+.byte 15,56,203,209
+ pshufd $14,%xmm0,%xmm0
+ movdqa %xmm4,%xmm7
+.byte 102,15,58,15,251,4
+ nop
+ paddd %xmm7,%xmm5
+.byte 15,56,204,243
+.byte 15,56,203,202
+ movdqa 16(%ebp),%xmm0
+ paddd %xmm4,%xmm0
+.byte 15,56,205,236
+.byte 15,56,203,209
+ pshufd $14,%xmm0,%xmm0
+ movdqa %xmm5,%xmm7
+.byte 102,15,58,15,252,4
+ nop
+ paddd %xmm7,%xmm6
+.byte 15,56,204,220
+.byte 15,56,203,202
+ movdqa 32(%ebp),%xmm0
+ paddd %xmm5,%xmm0
+.byte 15,56,205,245
+.byte 15,56,203,209
+ pshufd $14,%xmm0,%xmm0
+ movdqa %xmm6,%xmm7
+.byte 102,15,58,15,253,4
+ nop
+ paddd %xmm7,%xmm3
+.byte 15,56,204,229
+.byte 15,56,203,202
+ movdqa 48(%ebp),%xmm0
+ paddd %xmm6,%xmm0
+.byte 15,56,205,222
+.byte 15,56,203,209
+ pshufd $14,%xmm0,%xmm0
+ movdqa %xmm3,%xmm7
+.byte 102,15,58,15,254,4
+ nop
+ paddd %xmm7,%xmm4
+.byte 15,56,204,238
+.byte 15,56,203,202
+ movdqa 64(%ebp),%xmm0
+ paddd %xmm3,%xmm0
+.byte 15,56,205,227
+.byte 15,56,203,209
+ pshufd $14,%xmm0,%xmm0
+ movdqa %xmm4,%xmm7
+.byte 102,15,58,15,251,4
+ nop
+ paddd %xmm7,%xmm5
+.byte 15,56,204,243
+.byte 15,56,203,202
+ movdqa 80(%ebp),%xmm0
+ paddd %xmm4,%xmm0
+.byte 15,56,205,236
+.byte 15,56,203,209
+ pshufd $14,%xmm0,%xmm0
+ movdqa %xmm5,%xmm7
+.byte 102,15,58,15,252,4
+.byte 15,56,203,202
+ paddd %xmm7,%xmm6
+ movdqa 96(%ebp),%xmm0
+ paddd %xmm5,%xmm0
+.byte 15,56,203,209
+ pshufd $14,%xmm0,%xmm0
+.byte 15,56,205,245
+ movdqa 128(%ebp),%xmm7
+.byte 15,56,203,202
+ movdqa 112(%ebp),%xmm0
+ paddd %xmm6,%xmm0
+ nop
+.byte 15,56,203,209
+ pshufd $14,%xmm0,%xmm0
+ cmpl %edi,%eax
+ nop
+.byte 15,56,203,202
+ paddd 16(%esp),%xmm2
+ paddd (%esp),%xmm1
+ jnz .L010loop_shaext
+ pshufd $177,%xmm2,%xmm2
+ pshufd $27,%xmm1,%xmm7
+ pshufd $177,%xmm1,%xmm1
+ punpckhqdq %xmm2,%xmm1
+.byte 102,15,58,15,215,8
+ movl 44(%esp),%esp
+ movdqu %xmm1,(%esi)
+ movdqu %xmm2,16(%esi)
+ popl %edi
+ popl %esi
+ popl %ebx
+ popl %ebp
+ ret
+.align 32
+.L005SSSE3:
+ leal -96(%esp),%esp
+ movl (%esi),%eax
+ movl 4(%esi),%ebx
+ movl 8(%esi),%ecx
+ movl 12(%esi),%edi
+ movl %ebx,4(%esp)
+ xorl %ecx,%ebx
+ movl %ecx,8(%esp)
+ movl %edi,12(%esp)
+ movl 16(%esi),%edx
+ movl 20(%esi),%edi
+ movl 24(%esi),%ecx
+ movl 28(%esi),%esi
+ movl %edi,20(%esp)
+ movl 100(%esp),%edi
+ movl %ecx,24(%esp)
+ movl %esi,28(%esp)
+ movdqa 256(%ebp),%xmm7
+ jmp .L011grand_ssse3
+.align 16
+.L011grand_ssse3:
+ movdqu (%edi),%xmm0
+ movdqu 16(%edi),%xmm1
+ movdqu 32(%edi),%xmm2
+ movdqu 48(%edi),%xmm3
+ addl $64,%edi
+.byte 102,15,56,0,199
+ movl %edi,100(%esp)
+.byte 102,15,56,0,207
+ movdqa (%ebp),%xmm4
+.byte 102,15,56,0,215
+ movdqa 16(%ebp),%xmm5
+ paddd %xmm0,%xmm4
+.byte 102,15,56,0,223
+ movdqa 32(%ebp),%xmm6
+ paddd %xmm1,%xmm5
+ movdqa 48(%ebp),%xmm7
+ movdqa %xmm4,32(%esp)
+ paddd %xmm2,%xmm6
+ movdqa %xmm5,48(%esp)
+ paddd %xmm3,%xmm7
+ movdqa %xmm6,64(%esp)
+ movdqa %xmm7,80(%esp)
+ jmp .L012ssse3_00_47
+.align 16
+.L012ssse3_00_47:
+ addl $64,%ebp
+ movl %edx,%ecx
+ movdqa %xmm1,%xmm4
+ rorl $14,%edx
+ movl 20(%esp),%esi
+ movdqa %xmm3,%xmm7
+ xorl %ecx,%edx
+ movl 24(%esp),%edi
+.byte 102,15,58,15,224,4
+ xorl %edi,%esi
+ rorl $5,%edx
+ andl %ecx,%esi
+.byte 102,15,58,15,250,4
+ movl %ecx,16(%esp)
+ xorl %ecx,%edx
+ xorl %esi,%edi
+ movdqa %xmm4,%xmm5
+ rorl $6,%edx
+ movl %eax,%ecx
+ movdqa %xmm4,%xmm6
+ addl %edi,%edx
+ movl 4(%esp),%edi
+ psrld $3,%xmm4
+ movl %eax,%esi
+ rorl $9,%ecx
+ paddd %xmm7,%xmm0
+ movl %eax,(%esp)
+ xorl %eax,%ecx
+ psrld $7,%xmm6
+ xorl %edi,%eax
+ addl 28(%esp),%edx
+ rorl $11,%ecx
+ andl %eax,%ebx
+ pshufd $250,%xmm3,%xmm7
+ xorl %esi,%ecx
+ addl 32(%esp),%edx
+ pslld $14,%xmm5
+ xorl %edi,%ebx
+ rorl $2,%ecx
+ pxor %xmm6,%xmm4
+ addl %edx,%ebx
+ addl 12(%esp),%edx
+ psrld $11,%xmm6
+ addl %ecx,%ebx
+ movl %edx,%ecx
+ rorl $14,%edx
+ pxor %xmm5,%xmm4
+ movl 16(%esp),%esi
+ xorl %ecx,%edx
+ pslld $11,%xmm5
+ movl 20(%esp),%edi
+ xorl %edi,%esi
+ rorl $5,%edx
+ pxor %xmm6,%xmm4
+ andl %ecx,%esi
+ movl %ecx,12(%esp)
+ movdqa %xmm7,%xmm6
+ xorl %ecx,%edx
+ xorl %esi,%edi
+ rorl $6,%edx
+ pxor %xmm5,%xmm4
+ movl %ebx,%ecx
+ addl %edi,%edx
+ psrld $10,%xmm7
+ movl (%esp),%edi
+ movl %ebx,%esi
+ rorl $9,%ecx
+ paddd %xmm4,%xmm0
+ movl %ebx,28(%esp)
+ xorl %ebx,%ecx
+ psrlq $17,%xmm6
+ xorl %edi,%ebx
+ addl 24(%esp),%edx
+ rorl $11,%ecx
+ pxor %xmm6,%xmm7
+ andl %ebx,%eax
+ xorl %esi,%ecx
+ psrlq $2,%xmm6
+ addl 36(%esp),%edx
+ xorl %edi,%eax
+ rorl $2,%ecx
+ pxor %xmm6,%xmm7
+ addl %edx,%eax
+ addl 8(%esp),%edx
+ pshufd $128,%xmm7,%xmm7
+ addl %ecx,%eax
+ movl %edx,%ecx
+ rorl $14,%edx
+ movl 12(%esp),%esi
+ xorl %ecx,%edx
+ movl 16(%esp),%edi
+ xorl %edi,%esi
+ rorl $5,%edx
+ andl %ecx,%esi
+ psrldq $8,%xmm7
+ movl %ecx,8(%esp)
+ xorl %ecx,%edx
+ xorl %esi,%edi
+ paddd %xmm7,%xmm0
+ rorl $6,%edx
+ movl %eax,%ecx
+ addl %edi,%edx
+ movl 28(%esp),%edi
+ movl %eax,%esi
+ rorl $9,%ecx
+ movl %eax,24(%esp)
+ pshufd $80,%xmm0,%xmm7
+ xorl %eax,%ecx
+ xorl %edi,%eax
+ addl 20(%esp),%edx
+ movdqa %xmm7,%xmm6
+ rorl $11,%ecx
+ psrld $10,%xmm7
+ andl %eax,%ebx
+ psrlq $17,%xmm6
+ xorl %esi,%ecx
+ addl 40(%esp),%edx
+ xorl %edi,%ebx
+ rorl $2,%ecx
+ pxor %xmm6,%xmm7
+ addl %edx,%ebx
+ addl 4(%esp),%edx
+ psrlq $2,%xmm6
+ addl %ecx,%ebx
+ movl %edx,%ecx
+ rorl $14,%edx
+ pxor %xmm6,%xmm7
+ movl 8(%esp),%esi
+ xorl %ecx,%edx
+ movl 12(%esp),%edi
+ pshufd $8,%xmm7,%xmm7
+ xorl %edi,%esi
+ rorl $5,%edx
+ movdqa (%ebp),%xmm6
+ andl %ecx,%esi
+ movl %ecx,4(%esp)
+ pslldq $8,%xmm7
+ xorl %ecx,%edx
+ xorl %esi,%edi
+ rorl $6,%edx
+ movl %ebx,%ecx
+ addl %edi,%edx
+ movl 24(%esp),%edi
+ movl %ebx,%esi
+ rorl $9,%ecx
+ paddd %xmm7,%xmm0
+ movl %ebx,20(%esp)
+ xorl %ebx,%ecx
+ xorl %edi,%ebx
+ addl 16(%esp),%edx
+ paddd %xmm0,%xmm6
+ rorl $11,%ecx
+ andl %ebx,%eax
+ xorl %esi,%ecx
+ addl 44(%esp),%edx
+ xorl %edi,%eax
+ rorl $2,%ecx
+ addl %edx,%eax
+ addl (%esp),%edx
+ addl %ecx,%eax
+ movdqa %xmm6,32(%esp)
+ movl %edx,%ecx
+ movdqa %xmm2,%xmm4
+ rorl $14,%edx
+ movl 4(%esp),%esi
+ movdqa %xmm0,%xmm7
+ xorl %ecx,%edx
+ movl 8(%esp),%edi
+.byte 102,15,58,15,225,4
+ xorl %edi,%esi
+ rorl $5,%edx
+ andl %ecx,%esi
+.byte 102,15,58,15,251,4
+ movl %ecx,(%esp)
+ xorl %ecx,%edx
+ xorl %esi,%edi
+ movdqa %xmm4,%xmm5
+ rorl $6,%edx
+ movl %eax,%ecx
+ movdqa %xmm4,%xmm6
+ addl %edi,%edx
+ movl 20(%esp),%edi
+ psrld $3,%xmm4
+ movl %eax,%esi
+ rorl $9,%ecx
+ paddd %xmm7,%xmm1
+ movl %eax,16(%esp)
+ xorl %eax,%ecx
+ psrld $7,%xmm6
+ xorl %edi,%eax
+ addl 12(%esp),%edx
+ rorl $11,%ecx
+ andl %eax,%ebx
+ pshufd $250,%xmm0,%xmm7
+ xorl %esi,%ecx
+ addl 48(%esp),%edx
+ pslld $14,%xmm5
+ xorl %edi,%ebx
+ rorl $2,%ecx
+ pxor %xmm6,%xmm4
+ addl %edx,%ebx
+ addl 28(%esp),%edx
+ psrld $11,%xmm6
+ addl %ecx,%ebx
+ movl %edx,%ecx
+ rorl $14,%edx
+ pxor %xmm5,%xmm4
+ movl (%esp),%esi
+ xorl %ecx,%edx
+ pslld $11,%xmm5
+ movl 4(%esp),%edi
+ xorl %edi,%esi
+ rorl $5,%edx
+ pxor %xmm6,%xmm4
+ andl %ecx,%esi
+ movl %ecx,28(%esp)
+ movdqa %xmm7,%xmm6
+ xorl %ecx,%edx
+ xorl %esi,%edi
+ rorl $6,%edx
+ pxor %xmm5,%xmm4
+ movl %ebx,%ecx
+ addl %edi,%edx
+ psrld $10,%xmm7
+ movl 16(%esp),%edi
+ movl %ebx,%esi
+ rorl $9,%ecx
+ paddd %xmm4,%xmm1
+ movl %ebx,12(%esp)
+ xorl %ebx,%ecx
+ psrlq $17,%xmm6
+ xorl %edi,%ebx
+ addl 8(%esp),%edx
+ rorl $11,%ecx
+ pxor %xmm6,%xmm7
+ andl %ebx,%eax
+ xorl %esi,%ecx
+ psrlq $2,%xmm6
+ addl 52(%esp),%edx
+ xorl %edi,%eax
+ rorl $2,%ecx
+ pxor %xmm6,%xmm7
+ addl %edx,%eax
+ addl 24(%esp),%edx
+ pshufd $128,%xmm7,%xmm7
+ addl %ecx,%eax
+ movl %edx,%ecx
+ rorl $14,%edx
+ movl 28(%esp),%esi
+ xorl %ecx,%edx
+ movl (%esp),%edi
+ xorl %edi,%esi
+ rorl $5,%edx
+ andl %ecx,%esi
+ psrldq $8,%xmm7
+ movl %ecx,24(%esp)
+ xorl %ecx,%edx
+ xorl %esi,%edi
+ paddd %xmm7,%xmm1
+ rorl $6,%edx
+ movl %eax,%ecx
+ addl %edi,%edx
+ movl 12(%esp),%edi
+ movl %eax,%esi
+ rorl $9,%ecx
+ movl %eax,8(%esp)
+ pshufd $80,%xmm1,%xmm7
+ xorl %eax,%ecx
+ xorl %edi,%eax
+ addl 4(%esp),%edx
+ movdqa %xmm7,%xmm6
+ rorl $11,%ecx
+ psrld $10,%xmm7
+ andl %eax,%ebx
+ psrlq $17,%xmm6
+ xorl %esi,%ecx
+ addl 56(%esp),%edx
+ xorl %edi,%ebx
+ rorl $2,%ecx
+ pxor %xmm6,%xmm7
+ addl %edx,%ebx
+ addl 20(%esp),%edx
+ psrlq $2,%xmm6
+ addl %ecx,%ebx
+ movl %edx,%ecx
+ rorl $14,%edx
+ pxor %xmm6,%xmm7
+ movl 24(%esp),%esi
+ xorl %ecx,%edx
+ movl 28(%esp),%edi
+ pshufd $8,%xmm7,%xmm7
+ xorl %edi,%esi
+ rorl $5,%edx
+ movdqa 16(%ebp),%xmm6
+ andl %ecx,%esi
+ movl %ecx,20(%esp)
+ pslldq $8,%xmm7
+ xorl %ecx,%edx
+ xorl %esi,%edi
+ rorl $6,%edx
+ movl %ebx,%ecx
+ addl %edi,%edx
+ movl 8(%esp),%edi
+ movl %ebx,%esi
+ rorl $9,%ecx
+ paddd %xmm7,%xmm1
+ movl %ebx,4(%esp)
+ xorl %ebx,%ecx
+ xorl %edi,%ebx
+ addl (%esp),%edx
+ paddd %xmm1,%xmm6
+ rorl $11,%ecx
+ andl %ebx,%eax
+ xorl %esi,%ecx
+ addl 60(%esp),%edx
+ xorl %edi,%eax
+ rorl $2,%ecx
+ addl %edx,%eax
+ addl 16(%esp),%edx
+ addl %ecx,%eax
+ movdqa %xmm6,48(%esp)
+ movl %edx,%ecx
+ movdqa %xmm3,%xmm4
+ rorl $14,%edx
+ movl 20(%esp),%esi
+ movdqa %xmm1,%xmm7
+ xorl %ecx,%edx
+ movl 24(%esp),%edi
+.byte 102,15,58,15,226,4
+ xorl %edi,%esi
+ rorl $5,%edx
+ andl %ecx,%esi
+.byte 102,15,58,15,248,4
+ movl %ecx,16(%esp)
+ xorl %ecx,%edx
+ xorl %esi,%edi
+ movdqa %xmm4,%xmm5
+ rorl $6,%edx
+ movl %eax,%ecx
+ movdqa %xmm4,%xmm6
+ addl %edi,%edx
+ movl 4(%esp),%edi
+ psrld $3,%xmm4
+ movl %eax,%esi
+ rorl $9,%ecx
+ paddd %xmm7,%xmm2
+ movl %eax,(%esp)
+ xorl %eax,%ecx
+ psrld $7,%xmm6
+ xorl %edi,%eax
+ addl 28(%esp),%edx
+ rorl $11,%ecx
+ andl %eax,%ebx
+ pshufd $250,%xmm1,%xmm7
+ xorl %esi,%ecx
+ addl 64(%esp),%edx
+ pslld $14,%xmm5
+ xorl %edi,%ebx
+ rorl $2,%ecx
+ pxor %xmm6,%xmm4
+ addl %edx,%ebx
+ addl 12(%esp),%edx
+ psrld $11,%xmm6
+ addl %ecx,%ebx
+ movl %edx,%ecx
+ rorl $14,%edx
+ pxor %xmm5,%xmm4
+ movl 16(%esp),%esi
+ xorl %ecx,%edx
+ pslld $11,%xmm5
+ movl 20(%esp),%edi
+ xorl %edi,%esi
+ rorl $5,%edx
+ pxor %xmm6,%xmm4
+ andl %ecx,%esi
+ movl %ecx,12(%esp)
+ movdqa %xmm7,%xmm6
+ xorl %ecx,%edx
+ xorl %esi,%edi
+ rorl $6,%edx
+ pxor %xmm5,%xmm4
+ movl %ebx,%ecx
+ addl %edi,%edx
+ psrld $10,%xmm7
+ movl (%esp),%edi
+ movl %ebx,%esi
+ rorl $9,%ecx
+ paddd %xmm4,%xmm2
+ movl %ebx,28(%esp)
+ xorl %ebx,%ecx
+ psrlq $17,%xmm6
+ xorl %edi,%ebx
+ addl 24(%esp),%edx
+ rorl $11,%ecx
+ pxor %xmm6,%xmm7
+ andl %ebx,%eax
+ xorl %esi,%ecx
+ psrlq $2,%xmm6
+ addl 68(%esp),%edx
+ xorl %edi,%eax
+ rorl $2,%ecx
+ pxor %xmm6,%xmm7
+ addl %edx,%eax
+ addl 8(%esp),%edx
+ pshufd $128,%xmm7,%xmm7
+ addl %ecx,%eax
+ movl %edx,%ecx
+ rorl $14,%edx
+ movl 12(%esp),%esi
+ xorl %ecx,%edx
+ movl 16(%esp),%edi
+ xorl %edi,%esi
+ rorl $5,%edx
+ andl %ecx,%esi
+ psrldq $8,%xmm7
+ movl %ecx,8(%esp)
+ xorl %ecx,%edx
+ xorl %esi,%edi
+ paddd %xmm7,%xmm2
+ rorl $6,%edx
+ movl %eax,%ecx
+ addl %edi,%edx
+ movl 28(%esp),%edi
+ movl %eax,%esi
+ rorl $9,%ecx
+ movl %eax,24(%esp)
+ pshufd $80,%xmm2,%xmm7
+ xorl %eax,%ecx
+ xorl %edi,%eax
+ addl 20(%esp),%edx
+ movdqa %xmm7,%xmm6
+ rorl $11,%ecx
+ psrld $10,%xmm7
+ andl %eax,%ebx
+ psrlq $17,%xmm6
+ xorl %esi,%ecx
+ addl 72(%esp),%edx
+ xorl %edi,%ebx
+ rorl $2,%ecx
+ pxor %xmm6,%xmm7
+ addl %edx,%ebx
+ addl 4(%esp),%edx
+ psrlq $2,%xmm6
+ addl %ecx,%ebx
+ movl %edx,%ecx
+ rorl $14,%edx
+ pxor %xmm6,%xmm7
+ movl 8(%esp),%esi
+ xorl %ecx,%edx
+ movl 12(%esp),%edi
+ pshufd $8,%xmm7,%xmm7
+ xorl %edi,%esi
+ rorl $5,%edx
+ movdqa 32(%ebp),%xmm6
+ andl %ecx,%esi
+ movl %ecx,4(%esp)
+ pslldq $8,%xmm7
+ xorl %ecx,%edx
+ xorl %esi,%edi
+ rorl $6,%edx
+ movl %ebx,%ecx
+ addl %edi,%edx
+ movl 24(%esp),%edi
+ movl %ebx,%esi
+ rorl $9,%ecx
+ paddd %xmm7,%xmm2
+ movl %ebx,20(%esp)
+ xorl %ebx,%ecx
+ xorl %edi,%ebx
+ addl 16(%esp),%edx
+ paddd %xmm2,%xmm6
+ rorl $11,%ecx
+ andl %ebx,%eax
+ xorl %esi,%ecx
+ addl 76(%esp),%edx
+ xorl %edi,%eax
+ rorl $2,%ecx
+ addl %edx,%eax
+ addl (%esp),%edx
+ addl %ecx,%eax
+ movdqa %xmm6,64(%esp)
+ movl %edx,%ecx
+ movdqa %xmm0,%xmm4
+ rorl $14,%edx
+ movl 4(%esp),%esi
+ movdqa %xmm2,%xmm7
+ xorl %ecx,%edx
+ movl 8(%esp),%edi
+.byte 102,15,58,15,227,4
+ xorl %edi,%esi
+ rorl $5,%edx
+ andl %ecx,%esi
+.byte 102,15,58,15,249,4
+ movl %ecx,(%esp)
+ xorl %ecx,%edx
+ xorl %esi,%edi
+ movdqa %xmm4,%xmm5
+ rorl $6,%edx
+ movl %eax,%ecx
+ movdqa %xmm4,%xmm6
+ addl %edi,%edx
+ movl 20(%esp),%edi
+ psrld $3,%xmm4
+ movl %eax,%esi
+ rorl $9,%ecx
+ paddd %xmm7,%xmm3
+ movl %eax,16(%esp)
+ xorl %eax,%ecx
+ psrld $7,%xmm6
+ xorl %edi,%eax
+ addl 12(%esp),%edx
+ rorl $11,%ecx
+ andl %eax,%ebx
+ pshufd $250,%xmm2,%xmm7
+ xorl %esi,%ecx
+ addl 80(%esp),%edx
+ pslld $14,%xmm5
+ xorl %edi,%ebx
+ rorl $2,%ecx
+ pxor %xmm6,%xmm4
+ addl %edx,%ebx
+ addl 28(%esp),%edx
+ psrld $11,%xmm6
+ addl %ecx,%ebx
+ movl %edx,%ecx
+ rorl $14,%edx
+ pxor %xmm5,%xmm4
+ movl (%esp),%esi
+ xorl %ecx,%edx
+ pslld $11,%xmm5
+ movl 4(%esp),%edi
+ xorl %edi,%esi
+ rorl $5,%edx
+ pxor %xmm6,%xmm4
+ andl %ecx,%esi
+ movl %ecx,28(%esp)
+ movdqa %xmm7,%xmm6
+ xorl %ecx,%edx
+ xorl %esi,%edi
+ rorl $6,%edx
+ pxor %xmm5,%xmm4
+ movl %ebx,%ecx
+ addl %edi,%edx
+ psrld $10,%xmm7
+ movl 16(%esp),%edi
+ movl %ebx,%esi
+ rorl $9,%ecx
+ paddd %xmm4,%xmm3
+ movl %ebx,12(%esp)
+ xorl %ebx,%ecx
+ psrlq $17,%xmm6
+ xorl %edi,%ebx
+ addl 8(%esp),%edx
+ rorl $11,%ecx
+ pxor %xmm6,%xmm7
+ andl %ebx,%eax
+ xorl %esi,%ecx
+ psrlq $2,%xmm6
+ addl 84(%esp),%edx
+ xorl %edi,%eax
+ rorl $2,%ecx
+ pxor %xmm6,%xmm7
+ addl %edx,%eax
+ addl 24(%esp),%edx
+ pshufd $128,%xmm7,%xmm7
+ addl %ecx,%eax
+ movl %edx,%ecx
+ rorl $14,%edx
+ movl 28(%esp),%esi
+ xorl %ecx,%edx
+ movl (%esp),%edi
+ xorl %edi,%esi
+ rorl $5,%edx
+ andl %ecx,%esi
+ psrldq $8,%xmm7
+ movl %ecx,24(%esp)
+ xorl %ecx,%edx
+ xorl %esi,%edi
+ paddd %xmm7,%xmm3
+ rorl $6,%edx
+ movl %eax,%ecx
+ addl %edi,%edx
+ movl 12(%esp),%edi
+ movl %eax,%esi
+ rorl $9,%ecx
+ movl %eax,8(%esp)
+ pshufd $80,%xmm3,%xmm7
+ xorl %eax,%ecx
+ xorl %edi,%eax
+ addl 4(%esp),%edx
+ movdqa %xmm7,%xmm6
+ rorl $11,%ecx
+ psrld $10,%xmm7
+ andl %eax,%ebx
+ psrlq $17,%xmm6
+ xorl %esi,%ecx
+ addl 88(%esp),%edx
+ xorl %edi,%ebx
+ rorl $2,%ecx
+ pxor %xmm6,%xmm7
+ addl %edx,%ebx
+ addl 20(%esp),%edx
+ psrlq $2,%xmm6
+ addl %ecx,%ebx
+ movl %edx,%ecx
+ rorl $14,%edx
+ pxor %xmm6,%xmm7
+ movl 24(%esp),%esi
+ xorl %ecx,%edx
+ movl 28(%esp),%edi
+ pshufd $8,%xmm7,%xmm7
+ xorl %edi,%esi
+ rorl $5,%edx
+ movdqa 48(%ebp),%xmm6
+ andl %ecx,%esi
+ movl %ecx,20(%esp)
+ pslldq $8,%xmm7
+ xorl %ecx,%edx
+ xorl %esi,%edi
+ rorl $6,%edx
+ movl %ebx,%ecx
+ addl %edi,%edx
+ movl 8(%esp),%edi
+ movl %ebx,%esi
+ rorl $9,%ecx
+ paddd %xmm7,%xmm3
+ movl %ebx,4(%esp)
+ xorl %ebx,%ecx
+ xorl %edi,%ebx
+ addl (%esp),%edx
+ paddd %xmm3,%xmm6
+ rorl $11,%ecx
+ andl %ebx,%eax
+ xorl %esi,%ecx
+ addl 92(%esp),%edx
+ xorl %edi,%eax
+ rorl $2,%ecx
+ addl %edx,%eax
+ addl 16(%esp),%edx
+ addl %ecx,%eax
+ movdqa %xmm6,80(%esp)
+ cmpl $66051,64(%ebp)
+ jne .L012ssse3_00_47
+ movl %edx,%ecx
+ rorl $14,%edx
+ movl 20(%esp),%esi
+ xorl %ecx,%edx
+ movl 24(%esp),%edi
+ xorl %edi,%esi
+ rorl $5,%edx
+ andl %ecx,%esi
+ movl %ecx,16(%esp)
+ xorl %ecx,%edx
+ xorl %esi,%edi
+ rorl $6,%edx
+ movl %eax,%ecx
+ addl %edi,%edx
+ movl 4(%esp),%edi
+ movl %eax,%esi
+ rorl $9,%ecx
+ movl %eax,(%esp)
+ xorl %eax,%ecx
+ xorl %edi,%eax
+ addl 28(%esp),%edx
+ rorl $11,%ecx
+ andl %eax,%ebx
+ xorl %esi,%ecx
+ addl 32(%esp),%edx
+ xorl %edi,%ebx
+ rorl $2,%ecx
+ addl %edx,%ebx
+ addl 12(%esp),%edx
+ addl %ecx,%ebx
+ movl %edx,%ecx
+ rorl $14,%edx
+ movl 16(%esp),%esi
+ xorl %ecx,%edx
+ movl 20(%esp),%edi
+ xorl %edi,%esi
+ rorl $5,%edx
+ andl %ecx,%esi
+ movl %ecx,12(%esp)
+ xorl %ecx,%edx
+ xorl %esi,%edi
+ rorl $6,%edx
+ movl %ebx,%ecx
+ addl %edi,%edx
+ movl (%esp),%edi
+ movl %ebx,%esi
+ rorl $9,%ecx
+ movl %ebx,28(%esp)
+ xorl %ebx,%ecx
+ xorl %edi,%ebx
+ addl 24(%esp),%edx
+ rorl $11,%ecx
+ andl %ebx,%eax
+ xorl %esi,%ecx
+ addl 36(%esp),%edx
+ xorl %edi,%eax
+ rorl $2,%ecx
+ addl %edx,%eax
+ addl 8(%esp),%edx
+ addl %ecx,%eax
+ movl %edx,%ecx
+ rorl $14,%edx
+ movl 12(%esp),%esi
+ xorl %ecx,%edx
+ movl 16(%esp),%edi
+ xorl %edi,%esi
+ rorl $5,%edx
+ andl %ecx,%esi
+ movl %ecx,8(%esp)
+ xorl %ecx,%edx
+ xorl %esi,%edi
+ rorl $6,%edx
+ movl %eax,%ecx
+ addl %edi,%edx
+ movl 28(%esp),%edi
+ movl %eax,%esi
+ rorl $9,%ecx
+ movl %eax,24(%esp)
+ xorl %eax,%ecx
+ xorl %edi,%eax
+ addl 20(%esp),%edx
+ rorl $11,%ecx
+ andl %eax,%ebx
+ xorl %esi,%ecx
+ addl 40(%esp),%edx
+ xorl %edi,%ebx
+ rorl $2,%ecx
+ addl %edx,%ebx
+ addl 4(%esp),%edx
+ addl %ecx,%ebx
+ movl %edx,%ecx
+ rorl $14,%edx
+ movl 8(%esp),%esi
+ xorl %ecx,%edx
+ movl 12(%esp),%edi
+ xorl %edi,%esi
+ rorl $5,%edx
+ andl %ecx,%esi
+ movl %ecx,4(%esp)
+ xorl %ecx,%edx
+ xorl %esi,%edi
+ rorl $6,%edx
+ movl %ebx,%ecx
+ addl %edi,%edx
+ movl 24(%esp),%edi
+ movl %ebx,%esi
+ rorl $9,%ecx
+ movl %ebx,20(%esp)
+ xorl %ebx,%ecx
+ xorl %edi,%ebx
+ addl 16(%esp),%edx
+ rorl $11,%ecx
+ andl %ebx,%eax
+ xorl %esi,%ecx
+ addl 44(%esp),%edx
+ xorl %edi,%eax
+ rorl $2,%ecx
+ addl %edx,%eax
+ addl (%esp),%edx
+ addl %ecx,%eax
+ movl %edx,%ecx
+ rorl $14,%edx
+ movl 4(%esp),%esi
+ xorl %ecx,%edx
+ movl 8(%esp),%edi
+ xorl %edi,%esi
+ rorl $5,%edx
+ andl %ecx,%esi
+ movl %ecx,(%esp)
+ xorl %ecx,%edx
+ xorl %esi,%edi
+ rorl $6,%edx
+ movl %eax,%ecx
+ addl %edi,%edx
+ movl 20(%esp),%edi
+ movl %eax,%esi
+ rorl $9,%ecx
+ movl %eax,16(%esp)
+ xorl %eax,%ecx
+ xorl %edi,%eax
+ addl 12(%esp),%edx
+ rorl $11,%ecx
+ andl %eax,%ebx
+ xorl %esi,%ecx
+ addl 48(%esp),%edx
+ xorl %edi,%ebx
+ rorl $2,%ecx
+ addl %edx,%ebx
+ addl 28(%esp),%edx
+ addl %ecx,%ebx
+ movl %edx,%ecx
+ rorl $14,%edx
+ movl (%esp),%esi
+ xorl %ecx,%edx
+ movl 4(%esp),%edi
+ xorl %edi,%esi
+ rorl $5,%edx
+ andl %ecx,%esi
+ movl %ecx,28(%esp)
+ xorl %ecx,%edx
+ xorl %esi,%edi
+ rorl $6,%edx
+ movl %ebx,%ecx
+ addl %edi,%edx
+ movl 16(%esp),%edi
+ movl %ebx,%esi
+ rorl $9,%ecx
+ movl %ebx,12(%esp)
+ xorl %ebx,%ecx
+ xorl %edi,%ebx
+ addl 8(%esp),%edx
+ rorl $11,%ecx
+ andl %ebx,%eax
+ xorl %esi,%ecx
+ addl 52(%esp),%edx
+ xorl %edi,%eax
+ rorl $2,%ecx
+ addl %edx,%eax
+ addl 24(%esp),%edx
+ addl %ecx,%eax
+ movl %edx,%ecx
+ rorl $14,%edx
+ movl 28(%esp),%esi
+ xorl %ecx,%edx
+ movl (%esp),%edi
+ xorl %edi,%esi
+ rorl $5,%edx
+ andl %ecx,%esi
+ movl %ecx,24(%esp)
+ xorl %ecx,%edx
+ xorl %esi,%edi
+ rorl $6,%edx
+ movl %eax,%ecx
+ addl %edi,%edx
+ movl 12(%esp),%edi
+ movl %eax,%esi
+ rorl $9,%ecx
+ movl %eax,8(%esp)
+ xorl %eax,%ecx
+ xorl %edi,%eax
+ addl 4(%esp),%edx
+ rorl $11,%ecx
+ andl %eax,%ebx
+ xorl %esi,%ecx
+ addl 56(%esp),%edx
+ xorl %edi,%ebx
+ rorl $2,%ecx
+ addl %edx,%ebx
+ addl 20(%esp),%edx
+ addl %ecx,%ebx
+ movl %edx,%ecx
+ rorl $14,%edx
+ movl 24(%esp),%esi
+ xorl %ecx,%edx
+ movl 28(%esp),%edi
+ xorl %edi,%esi
+ rorl $5,%edx
+ andl %ecx,%esi
+ movl %ecx,20(%esp)
+ xorl %ecx,%edx
+ xorl %esi,%edi
+ rorl $6,%edx
+ movl %ebx,%ecx
+ addl %edi,%edx
+ movl 8(%esp),%edi
+ movl %ebx,%esi
+ rorl $9,%ecx
+ movl %ebx,4(%esp)
+ xorl %ebx,%ecx
+ xorl %edi,%ebx
+ addl (%esp),%edx
+ rorl $11,%ecx
+ andl %ebx,%eax
+ xorl %esi,%ecx
+ addl 60(%esp),%edx
+ xorl %edi,%eax
+ rorl $2,%ecx
+ addl %edx,%eax
+ addl 16(%esp),%edx
+ addl %ecx,%eax
+ movl %edx,%ecx
+ rorl $14,%edx
+ movl 20(%esp),%esi
+ xorl %ecx,%edx
+ movl 24(%esp),%edi
+ xorl %edi,%esi
+ rorl $5,%edx
+ andl %ecx,%esi
+ movl %ecx,16(%esp)
+ xorl %ecx,%edx
+ xorl %esi,%edi
+ rorl $6,%edx
+ movl %eax,%ecx
+ addl %edi,%edx
+ movl 4(%esp),%edi
+ movl %eax,%esi
+ rorl $9,%ecx
+ movl %eax,(%esp)
+ xorl %eax,%ecx
+ xorl %edi,%eax
+ addl 28(%esp),%edx
+ rorl $11,%ecx
+ andl %eax,%ebx
+ xorl %esi,%ecx
+ addl 64(%esp),%edx
+ xorl %edi,%ebx
+ rorl $2,%ecx
+ addl %edx,%ebx
+ addl 12(%esp),%edx
+ addl %ecx,%ebx
+ movl %edx,%ecx
+ rorl $14,%edx
+ movl 16(%esp),%esi
+ xorl %ecx,%edx
+ movl 20(%esp),%edi
+ xorl %edi,%esi
+ rorl $5,%edx
+ andl %ecx,%esi
+ movl %ecx,12(%esp)
+ xorl %ecx,%edx
+ xorl %esi,%edi
+ rorl $6,%edx
+ movl %ebx,%ecx
+ addl %edi,%edx
+ movl (%esp),%edi
+ movl %ebx,%esi
+ rorl $9,%ecx
+ movl %ebx,28(%esp)
+ xorl %ebx,%ecx
+ xorl %edi,%ebx
+ addl 24(%esp),%edx
+ rorl $11,%ecx
+ andl %ebx,%eax
+ xorl %esi,%ecx
+ addl 68(%esp),%edx
+ xorl %edi,%eax
+ rorl $2,%ecx
+ addl %edx,%eax
+ addl 8(%esp),%edx
+ addl %ecx,%eax
+ movl %edx,%ecx
+ rorl $14,%edx
+ movl 12(%esp),%esi
+ xorl %ecx,%edx
+ movl 16(%esp),%edi
+ xorl %edi,%esi
+ rorl $5,%edx
+ andl %ecx,%esi
+ movl %ecx,8(%esp)
+ xorl %ecx,%edx
+ xorl %esi,%edi
+ rorl $6,%edx
+ movl %eax,%ecx
+ addl %edi,%edx
+ movl 28(%esp),%edi
+ movl %eax,%esi
+ rorl $9,%ecx
+ movl %eax,24(%esp)
+ xorl %eax,%ecx
+ xorl %edi,%eax
+ addl 20(%esp),%edx
+ rorl $11,%ecx
+ andl %eax,%ebx
+ xorl %esi,%ecx
+ addl 72(%esp),%edx
+ xorl %edi,%ebx
+ rorl $2,%ecx
+ addl %edx,%ebx
+ addl 4(%esp),%edx
+ addl %ecx,%ebx
+ movl %edx,%ecx
+ rorl $14,%edx
+ movl 8(%esp),%esi
+ xorl %ecx,%edx
+ movl 12(%esp),%edi
+ xorl %edi,%esi
+ rorl $5,%edx
+ andl %ecx,%esi
+ movl %ecx,4(%esp)
+ xorl %ecx,%edx
+ xorl %esi,%edi
+ rorl $6,%edx
+ movl %ebx,%ecx
+ addl %edi,%edx
+ movl 24(%esp),%edi
+ movl %ebx,%esi
+ rorl $9,%ecx
+ movl %ebx,20(%esp)
+ xorl %ebx,%ecx
+ xorl %edi,%ebx
+ addl 16(%esp),%edx
+ rorl $11,%ecx
+ andl %ebx,%eax
+ xorl %esi,%ecx
+ addl 76(%esp),%edx
+ xorl %edi,%eax
+ rorl $2,%ecx
+ addl %edx,%eax
+ addl (%esp),%edx
+ addl %ecx,%eax
+ movl %edx,%ecx
+ rorl $14,%edx
+ movl 4(%esp),%esi
+ xorl %ecx,%edx
+ movl 8(%esp),%edi
+ xorl %edi,%esi
+ rorl $5,%edx
+ andl %ecx,%esi
+ movl %ecx,(%esp)
+ xorl %ecx,%edx
+ xorl %esi,%edi
+ rorl $6,%edx
+ movl %eax,%ecx
+ addl %edi,%edx
+ movl 20(%esp),%edi
+ movl %eax,%esi
+ rorl $9,%ecx
+ movl %eax,16(%esp)
+ xorl %eax,%ecx
+ xorl %edi,%eax
+ addl 12(%esp),%edx
+ rorl $11,%ecx
+ andl %eax,%ebx
+ xorl %esi,%ecx
+ addl 80(%esp),%edx
+ xorl %edi,%ebx
+ rorl $2,%ecx
+ addl %edx,%ebx
+ addl 28(%esp),%edx
+ addl %ecx,%ebx
+ movl %edx,%ecx
+ rorl $14,%edx
+ movl (%esp),%esi
+ xorl %ecx,%edx
+ movl 4(%esp),%edi
+ xorl %edi,%esi
+ rorl $5,%edx
+ andl %ecx,%esi
+ movl %ecx,28(%esp)
+ xorl %ecx,%edx
+ xorl %esi,%edi
+ rorl $6,%edx
+ movl %ebx,%ecx
+ addl %edi,%edx
+ movl 16(%esp),%edi
+ movl %ebx,%esi
+ rorl $9,%ecx
+ movl %ebx,12(%esp)
+ xorl %ebx,%ecx
+ xorl %edi,%ebx
+ addl 8(%esp),%edx
+ rorl $11,%ecx
+ andl %ebx,%eax
+ xorl %esi,%ecx
+ addl 84(%esp),%edx
+ xorl %edi,%eax
+ rorl $2,%ecx
+ addl %edx,%eax
+ addl 24(%esp),%edx
+ addl %ecx,%eax
+ movl %edx,%ecx
+ rorl $14,%edx
+ movl 28(%esp),%esi
+ xorl %ecx,%edx
+ movl (%esp),%edi
+ xorl %edi,%esi
+ rorl $5,%edx
+ andl %ecx,%esi
+ movl %ecx,24(%esp)
+ xorl %ecx,%edx
+ xorl %esi,%edi
+ rorl $6,%edx
+ movl %eax,%ecx
+ addl %edi,%edx
+ movl 12(%esp),%edi
+ movl %eax,%esi
+ rorl $9,%ecx
+ movl %eax,8(%esp)
+ xorl %eax,%ecx
+ xorl %edi,%eax
+ addl 4(%esp),%edx
+ rorl $11,%ecx
+ andl %eax,%ebx
+ xorl %esi,%ecx
+ addl 88(%esp),%edx
+ xorl %edi,%ebx
+ rorl $2,%ecx
+ addl %edx,%ebx
+ addl 20(%esp),%edx
+ addl %ecx,%ebx
+ movl %edx,%ecx
+ rorl $14,%edx
+ movl 24(%esp),%esi
+ xorl %ecx,%edx
+ movl 28(%esp),%edi
+ xorl %edi,%esi
+ rorl $5,%edx
+ andl %ecx,%esi
+ movl %ecx,20(%esp)
+ xorl %ecx,%edx
+ xorl %esi,%edi
+ rorl $6,%edx
+ movl %ebx,%ecx
+ addl %edi,%edx
+ movl 8(%esp),%edi
+ movl %ebx,%esi
+ rorl $9,%ecx
+ movl %ebx,4(%esp)
+ xorl %ebx,%ecx
+ xorl %edi,%ebx
+ addl (%esp),%edx
+ rorl $11,%ecx
+ andl %ebx,%eax
+ xorl %esi,%ecx
+ addl 92(%esp),%edx
+ xorl %edi,%eax
+ rorl $2,%ecx
+ addl %edx,%eax
+ addl 16(%esp),%edx
+ addl %ecx,%eax
+ movl 96(%esp),%esi
+ xorl %edi,%ebx
+ movl 12(%esp),%ecx
+ addl (%esi),%eax
+ addl 4(%esi),%ebx
+ addl 8(%esi),%edi
+ addl 12(%esi),%ecx
+ movl %eax,(%esi)
+ movl %ebx,4(%esi)
+ movl %edi,8(%esi)
+ movl %ecx,12(%esi)
+ movl %ebx,4(%esp)
+ xorl %edi,%ebx
+ movl %edi,8(%esp)
+ movl %ecx,12(%esp)
+ movl 20(%esp),%edi
+ movl 24(%esp),%ecx
+ addl 16(%esi),%edx
+ addl 20(%esi),%edi
+ addl 24(%esi),%ecx
+ movl %edx,16(%esi)
+ movl %edi,20(%esi)
+ movl %edi,20(%esp)
+ movl 28(%esp),%edi
+ movl %ecx,24(%esi)
+ addl 28(%esi),%edi
+ movl %ecx,24(%esp)
+ movl %edi,28(%esi)
+ movl %edi,28(%esp)
+ movl 100(%esp),%edi
+ movdqa 64(%ebp),%xmm7
+ subl $192,%ebp
+ cmpl 104(%esp),%edi
+ jb .L011grand_ssse3
+ movl 108(%esp),%esp
popl %edi
popl %esi
popl %ebx
popl %ebp
ret
-.align 64
-.L001K256:
-.long 1116352408,1899447441,3049323471,3921009573
-.long 961987163,1508970993,2453635748,2870763221
-.long 3624381080,310598401,607225278,1426881987
-.long 1925078388,2162078206,2614888103,3248222580
-.long 3835390401,4022224774,264347078,604807628
-.long 770255983,1249150122,1555081692,1996064986
-.long 2554220882,2821834349,2952996808,3210313671
-.long 3336571891,3584528711,113926993,338241895
-.long 666307205,773529912,1294757372,1396182291
-.long 1695183700,1986661051,2177026350,2456956037
-.long 2730485921,2820302411,3259730800,3345764771
-.long 3516065817,3600352804,4094571909,275423344
-.long 430227734,506948616,659060556,883997877
-.long 958139571,1322822218,1537002063,1747873779
-.long 1955562222,2024104815,2227730452,2361852424
-.long 2428436474,2756734187,3204031479,3329325298
.size sha256_block_data_order,.-.L_sha256_block_data_order_begin
-.byte 83,72,65,50,53,54,32,98,108,111,99,107,32,116,114,97
-.byte 110,115,102,111,114,109,32,102,111,114,32,120,56,54,44,32
-.byte 67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97
-.byte 112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103
-.byte 62,0
+.comm OPENSSL_ia32cap_P,16,4
diff --git a/secure/lib/libcrypto/i386/sha512-586.s b/secure/lib/libcrypto/i386/sha512-586.s
index a37f850..2dc6f1a 100644
--- a/secure/lib/libcrypto/i386/sha512-586.s
+++ b/secure/lib/libcrypto/i386/sha512-586.s
@@ -27,249 +27,2243 @@ sha512_block_data_order:
movl %eax,8(%esp)
movl %ebx,12(%esp)
leal OPENSSL_ia32cap_P,%edx
- btl $26,(%edx)
- jnc .L002loop_x86
+ movl (%edx),%ecx
+ testl $67108864,%ecx
+ jz .L002loop_x86
+ movl 4(%edx),%edx
movq (%esi),%mm0
+ andl $16777216,%ecx
movq 8(%esi),%mm1
+ andl $512,%edx
movq 16(%esi),%mm2
+ orl %edx,%ecx
movq 24(%esi),%mm3
movq 32(%esi),%mm4
movq 40(%esi),%mm5
movq 48(%esi),%mm6
movq 56(%esi),%mm7
+ cmpl $16777728,%ecx
+ je .L003SSSE3
subl $80,%esp
+ jmp .L004loop_sse2
.align 16
-.L003loop_sse2:
+.L004loop_sse2:
movq %mm1,8(%esp)
movq %mm2,16(%esp)
movq %mm3,24(%esp)
movq %mm5,40(%esp)
movq %mm6,48(%esp)
+ pxor %mm1,%mm2
movq %mm7,56(%esp)
- movl (%edi),%ecx
- movl 4(%edi),%edx
+ movq %mm0,%mm3
+ movl (%edi),%eax
+ movl 4(%edi),%ebx
addl $8,%edi
- bswap %ecx
- bswap %edx
- movl %ecx,76(%esp)
- movl %edx,72(%esp)
+ movl $15,%edx
+ bswap %eax
+ bswap %ebx
+ jmp .L00500_14_sse2
.align 16
-.L00400_14_sse2:
+.L00500_14_sse2:
+ movd %eax,%mm1
movl (%edi),%eax
+ movd %ebx,%mm7
movl 4(%edi),%ebx
addl $8,%edi
bswap %eax
bswap %ebx
- movl %eax,68(%esp)
- movl %ebx,64(%esp)
+ punpckldq %mm1,%mm7
+ movq %mm4,%mm1
+ pxor %mm6,%mm5
+ psrlq $14,%mm1
+ movq %mm4,32(%esp)
+ pand %mm4,%mm5
+ psllq $23,%mm4
+ movq %mm3,%mm0
+ movq %mm7,72(%esp)
+ movq %mm1,%mm3
+ psrlq $4,%mm1
+ pxor %mm6,%mm5
+ pxor %mm4,%mm3
+ psllq $23,%mm4
+ pxor %mm1,%mm3
+ movq %mm0,(%esp)
+ paddq %mm5,%mm7
+ pxor %mm4,%mm3
+ psrlq $23,%mm1
+ paddq 56(%esp),%mm7
+ pxor %mm1,%mm3
+ psllq $4,%mm4
+ paddq (%ebp),%mm7
+ pxor %mm4,%mm3
+ movq 24(%esp),%mm4
+ paddq %mm7,%mm3
+ movq %mm0,%mm5
+ psrlq $28,%mm5
+ paddq %mm3,%mm4
+ movq %mm0,%mm6
+ movq %mm5,%mm7
+ psllq $25,%mm6
+ movq 8(%esp),%mm1
+ psrlq $6,%mm5
+ pxor %mm6,%mm7
+ subl $8,%esp
+ psllq $5,%mm6
+ pxor %mm5,%mm7
+ pxor %mm1,%mm0
+ psrlq $5,%mm5
+ pxor %mm6,%mm7
+ pand %mm0,%mm2
+ psllq $6,%mm6
+ pxor %mm5,%mm7
+ pxor %mm1,%mm2
+ pxor %mm7,%mm6
movq 40(%esp),%mm5
+ paddq %mm2,%mm3
+ movq %mm0,%mm2
+ addl $8,%ebp
+ paddq %mm6,%mm3
movq 48(%esp),%mm6
- movq 56(%esp),%mm7
+ decl %edx
+ jnz .L00500_14_sse2
+ movd %eax,%mm1
+ movd %ebx,%mm7
+ punpckldq %mm1,%mm7
movq %mm4,%mm1
- movq %mm4,%mm2
+ pxor %mm6,%mm5
psrlq $14,%mm1
movq %mm4,32(%esp)
- psllq $23,%mm2
+ pand %mm4,%mm5
+ psllq $23,%mm4
+ movq %mm3,%mm0
+ movq %mm7,72(%esp)
movq %mm1,%mm3
psrlq $4,%mm1
- pxor %mm2,%mm3
- psllq $23,%mm2
+ pxor %mm6,%mm5
+ pxor %mm4,%mm3
+ psllq $23,%mm4
pxor %mm1,%mm3
+ movq %mm0,(%esp)
+ paddq %mm5,%mm7
+ pxor %mm4,%mm3
psrlq $23,%mm1
- pxor %mm2,%mm3
- psllq $4,%mm2
+ paddq 56(%esp),%mm7
pxor %mm1,%mm3
+ psllq $4,%mm4
paddq (%ebp),%mm7
- pxor %mm2,%mm3
+ pxor %mm4,%mm3
+ movq 24(%esp),%mm4
+ paddq %mm7,%mm3
+ movq %mm0,%mm5
+ psrlq $28,%mm5
+ paddq %mm3,%mm4
+ movq %mm0,%mm6
+ movq %mm5,%mm7
+ psllq $25,%mm6
+ movq 8(%esp),%mm1
+ psrlq $6,%mm5
+ pxor %mm6,%mm7
+ subl $8,%esp
+ psllq $5,%mm6
+ pxor %mm5,%mm7
+ pxor %mm1,%mm0
+ psrlq $5,%mm5
+ pxor %mm6,%mm7
+ pand %mm0,%mm2
+ psllq $6,%mm6
+ pxor %mm5,%mm7
+ pxor %mm1,%mm2
+ pxor %mm7,%mm6
+ movq 192(%esp),%mm7
+ paddq %mm2,%mm3
+ movq %mm0,%mm2
+ addl $8,%ebp
+ paddq %mm6,%mm3
+ pxor %mm0,%mm0
+ movl $32,%edx
+ jmp .L00616_79_sse2
+.align 16
+.L00616_79_sse2:
+ movq 88(%esp),%mm5
+ movq %mm7,%mm1
+ psrlq $1,%mm7
+ movq %mm5,%mm6
+ psrlq $6,%mm5
+ psllq $56,%mm1
+ paddq %mm3,%mm0
+ movq %mm7,%mm3
+ psrlq $6,%mm7
+ pxor %mm1,%mm3
+ psllq $7,%mm1
+ pxor %mm7,%mm3
+ psrlq $1,%mm7
+ pxor %mm1,%mm3
+ movq %mm5,%mm1
+ psrlq $13,%mm5
+ pxor %mm3,%mm7
+ psllq $3,%mm6
+ pxor %mm5,%mm1
+ paddq 200(%esp),%mm7
+ pxor %mm6,%mm1
+ psrlq $42,%mm5
+ paddq 128(%esp),%mm7
+ pxor %mm5,%mm1
+ psllq $42,%mm6
+ movq 40(%esp),%mm5
+ pxor %mm6,%mm1
+ movq 48(%esp),%mm6
+ paddq %mm1,%mm7
+ movq %mm4,%mm1
+ pxor %mm6,%mm5
+ psrlq $14,%mm1
+ movq %mm4,32(%esp)
+ pand %mm4,%mm5
+ psllq $23,%mm4
+ movq %mm7,72(%esp)
+ movq %mm1,%mm3
+ psrlq $4,%mm1
pxor %mm6,%mm5
+ pxor %mm4,%mm3
+ psllq $23,%mm4
+ pxor %mm1,%mm3
+ movq %mm0,(%esp)
+ paddq %mm5,%mm7
+ pxor %mm4,%mm3
+ psrlq $23,%mm1
+ paddq 56(%esp),%mm7
+ pxor %mm1,%mm3
+ psllq $4,%mm4
+ paddq (%ebp),%mm7
+ pxor %mm4,%mm3
+ movq 24(%esp),%mm4
+ paddq %mm7,%mm3
+ movq %mm0,%mm5
+ psrlq $28,%mm5
+ paddq %mm3,%mm4
+ movq %mm0,%mm6
+ movq %mm5,%mm7
+ psllq $25,%mm6
movq 8(%esp),%mm1
+ psrlq $6,%mm5
+ pxor %mm6,%mm7
+ subl $8,%esp
+ psllq $5,%mm6
+ pxor %mm5,%mm7
+ pxor %mm1,%mm0
+ psrlq $5,%mm5
+ pxor %mm6,%mm7
+ pand %mm0,%mm2
+ psllq $6,%mm6
+ pxor %mm5,%mm7
+ pxor %mm1,%mm2
+ pxor %mm7,%mm6
+ movq 192(%esp),%mm7
+ paddq %mm6,%mm2
+ addl $8,%ebp
+ movq 88(%esp),%mm5
+ movq %mm7,%mm1
+ psrlq $1,%mm7
+ movq %mm5,%mm6
+ psrlq $6,%mm5
+ psllq $56,%mm1
+ paddq %mm3,%mm2
+ movq %mm7,%mm3
+ psrlq $6,%mm7
+ pxor %mm1,%mm3
+ psllq $7,%mm1
+ pxor %mm7,%mm3
+ psrlq $1,%mm7
+ pxor %mm1,%mm3
+ movq %mm5,%mm1
+ psrlq $13,%mm5
+ pxor %mm3,%mm7
+ psllq $3,%mm6
+ pxor %mm5,%mm1
+ paddq 200(%esp),%mm7
+ pxor %mm6,%mm1
+ psrlq $42,%mm5
+ paddq 128(%esp),%mm7
+ pxor %mm5,%mm1
+ psllq $42,%mm6
+ movq 40(%esp),%mm5
+ pxor %mm6,%mm1
+ movq 48(%esp),%mm6
+ paddq %mm1,%mm7
+ movq %mm4,%mm1
+ pxor %mm6,%mm5
+ psrlq $14,%mm1
+ movq %mm4,32(%esp)
pand %mm4,%mm5
- movq 16(%esp),%mm2
+ psllq $23,%mm4
+ movq %mm7,72(%esp)
+ movq %mm1,%mm3
+ psrlq $4,%mm1
pxor %mm6,%mm5
+ pxor %mm4,%mm3
+ psllq $23,%mm4
+ pxor %mm1,%mm3
+ movq %mm2,(%esp)
+ paddq %mm5,%mm7
+ pxor %mm4,%mm3
+ psrlq $23,%mm1
+ paddq 56(%esp),%mm7
+ pxor %mm1,%mm3
+ psllq $4,%mm4
+ paddq (%ebp),%mm7
+ pxor %mm4,%mm3
movq 24(%esp),%mm4
- paddq %mm5,%mm3
+ paddq %mm7,%mm3
+ movq %mm2,%mm5
+ psrlq $28,%mm5
+ paddq %mm3,%mm4
+ movq %mm2,%mm6
+ movq %mm5,%mm7
+ psllq $25,%mm6
+ movq 8(%esp),%mm1
+ psrlq $6,%mm5
+ pxor %mm6,%mm7
+ subl $8,%esp
+ psllq $5,%mm6
+ pxor %mm5,%mm7
+ pxor %mm1,%mm2
+ psrlq $5,%mm5
+ pxor %mm6,%mm7
+ pand %mm2,%mm0
+ psllq $6,%mm6
+ pxor %mm5,%mm7
+ pxor %mm1,%mm0
+ pxor %mm7,%mm6
+ movq 192(%esp),%mm7
+ paddq %mm6,%mm0
+ addl $8,%ebp
+ decl %edx
+ jnz .L00616_79_sse2
+ paddq %mm3,%mm0
+ movq 8(%esp),%mm1
+ movq 24(%esp),%mm3
+ movq 40(%esp),%mm5
+ movq 48(%esp),%mm6
+ movq 56(%esp),%mm7
+ pxor %mm1,%mm2
+ paddq (%esi),%mm0
+ paddq 8(%esi),%mm1
+ paddq 16(%esi),%mm2
+ paddq 24(%esi),%mm3
+ paddq 32(%esi),%mm4
+ paddq 40(%esi),%mm5
+ paddq 48(%esi),%mm6
+ paddq 56(%esi),%mm7
+ movl $640,%eax
+ movq %mm0,(%esi)
+ movq %mm1,8(%esi)
+ movq %mm2,16(%esi)
+ movq %mm3,24(%esi)
+ movq %mm4,32(%esi)
+ movq %mm5,40(%esi)
+ movq %mm6,48(%esi)
+ movq %mm7,56(%esi)
+ leal (%esp,%eax,1),%esp
+ subl %eax,%ebp
+ cmpl 88(%esp),%edi
+ jb .L004loop_sse2
+ movl 92(%esp),%esp
+ emms
+ popl %edi
+ popl %esi
+ popl %ebx
+ popl %ebp
+ ret
+.align 32
+.L003SSSE3:
+ leal -64(%esp),%edx
+ subl $256,%esp
+ movdqa 640(%ebp),%xmm1
+ movdqu (%edi),%xmm0
+.byte 102,15,56,0,193
+ movdqa (%ebp),%xmm3
+ movdqa %xmm1,%xmm2
+ movdqu 16(%edi),%xmm1
+ paddq %xmm0,%xmm3
+.byte 102,15,56,0,202
+ movdqa %xmm3,-128(%edx)
+ movdqa 16(%ebp),%xmm4
+ movdqa %xmm2,%xmm3
+ movdqu 32(%edi),%xmm2
+ paddq %xmm1,%xmm4
+.byte 102,15,56,0,211
+ movdqa %xmm4,-112(%edx)
+ movdqa 32(%ebp),%xmm5
+ movdqa %xmm3,%xmm4
+ movdqu 48(%edi),%xmm3
+ paddq %xmm2,%xmm5
+.byte 102,15,56,0,220
+ movdqa %xmm5,-96(%edx)
+ movdqa 48(%ebp),%xmm6
+ movdqa %xmm4,%xmm5
+ movdqu 64(%edi),%xmm4
+ paddq %xmm3,%xmm6
+.byte 102,15,56,0,229
+ movdqa %xmm6,-80(%edx)
+ movdqa 64(%ebp),%xmm7
+ movdqa %xmm5,%xmm6
+ movdqu 80(%edi),%xmm5
+ paddq %xmm4,%xmm7
+.byte 102,15,56,0,238
+ movdqa %xmm7,-64(%edx)
+ movdqa %xmm0,(%edx)
+ movdqa 80(%ebp),%xmm0
+ movdqa %xmm6,%xmm7
+ movdqu 96(%edi),%xmm6
+ paddq %xmm5,%xmm0
+.byte 102,15,56,0,247
+ movdqa %xmm0,-48(%edx)
+ movdqa %xmm1,16(%edx)
+ movdqa 96(%ebp),%xmm1
+ movdqa %xmm7,%xmm0
+ movdqu 112(%edi),%xmm7
+ paddq %xmm6,%xmm1
+.byte 102,15,56,0,248
+ movdqa %xmm1,-32(%edx)
+ movdqa %xmm2,32(%edx)
+ movdqa 112(%ebp),%xmm2
+ movdqa (%edx),%xmm0
+ paddq %xmm7,%xmm2
+ movdqa %xmm2,-16(%edx)
+ nop
+.align 32
+.L007loop_ssse3:
+ movdqa 16(%edx),%xmm2
+ movdqa %xmm3,48(%edx)
+ leal 128(%ebp),%ebp
+ movq %mm1,8(%esp)
+ movl %edi,%ebx
+ movq %mm2,16(%esp)
+ leal 128(%edi),%edi
+ movq %mm3,24(%esp)
+ cmpl %eax,%edi
+ movq %mm5,40(%esp)
+ cmovbl %edi,%ebx
+ movq %mm6,48(%esp)
+ movl $4,%ecx
+ pxor %mm1,%mm2
+ movq %mm7,56(%esp)
+ pxor %mm3,%mm3
+ jmp .L00800_47_ssse3
+.align 32
+.L00800_47_ssse3:
+ movdqa %xmm5,%xmm3
+ movdqa %xmm2,%xmm1
+.byte 102,15,58,15,208,8
+ movdqa %xmm4,(%edx)
+.byte 102,15,58,15,220,8
+ movdqa %xmm2,%xmm4
+ psrlq $7,%xmm2
+ paddq %xmm3,%xmm0
+ movdqa %xmm4,%xmm3
+ psrlq $1,%xmm4
+ psllq $56,%xmm3
+ pxor %xmm4,%xmm2
+ psrlq $7,%xmm4
+ pxor %xmm3,%xmm2
+ psllq $7,%xmm3
+ pxor %xmm4,%xmm2
+ movdqa %xmm7,%xmm4
+ pxor %xmm3,%xmm2
+ movdqa %xmm7,%xmm3
+ psrlq $6,%xmm4
+ paddq %xmm2,%xmm0
+ movdqa %xmm7,%xmm2
+ psrlq $19,%xmm3
+ psllq $3,%xmm2
+ pxor %xmm3,%xmm4
+ psrlq $42,%xmm3
+ pxor %xmm2,%xmm4
+ psllq $42,%xmm2
+ pxor %xmm3,%xmm4
+ movdqa 32(%edx),%xmm3
+ pxor %xmm2,%xmm4
+ movdqa (%ebp),%xmm2
+ movq %mm4,%mm1
+ paddq %xmm4,%xmm0
+ movq -128(%edx),%mm7
+ pxor %mm6,%mm5
+ psrlq $14,%mm1
+ movq %mm4,32(%esp)
+ paddq %xmm0,%xmm2
+ pand %mm4,%mm5
+ psllq $23,%mm4
+ paddq %mm3,%mm0
+ movq %mm1,%mm3
+ psrlq $4,%mm1
+ pxor %mm6,%mm5
+ pxor %mm4,%mm3
+ psllq $23,%mm4
+ pxor %mm1,%mm3
movq %mm0,(%esp)
+ paddq %mm5,%mm7
+ pxor %mm4,%mm3
+ psrlq $23,%mm1
+ paddq 56(%esp),%mm7
+ pxor %mm1,%mm3
+ psllq $4,%mm4
+ pxor %mm4,%mm3
+ movq 24(%esp),%mm4
paddq %mm7,%mm3
movq %mm0,%mm5
+ psrlq $28,%mm5
+ paddq %mm3,%mm4
movq %mm0,%mm6
- paddq 72(%esp),%mm3
+ movq %mm5,%mm7
+ psllq $25,%mm6
+ movq 8(%esp),%mm1
+ psrlq $6,%mm5
+ pxor %mm6,%mm7
+ psllq $5,%mm6
+ pxor %mm5,%mm7
+ pxor %mm1,%mm0
+ psrlq $5,%mm5
+ pxor %mm6,%mm7
+ pand %mm0,%mm2
+ psllq $6,%mm6
+ pxor %mm5,%mm7
+ pxor %mm1,%mm2
+ pxor %mm7,%mm6
+ movq 32(%esp),%mm5
+ paddq %mm6,%mm2
+ movq 40(%esp),%mm6
+ movq %mm4,%mm1
+ movq -120(%edx),%mm7
+ pxor %mm6,%mm5
+ psrlq $14,%mm1
+ movq %mm4,24(%esp)
+ pand %mm4,%mm5
+ psllq $23,%mm4
+ paddq %mm3,%mm2
+ movq %mm1,%mm3
+ psrlq $4,%mm1
+ pxor %mm6,%mm5
+ pxor %mm4,%mm3
+ psllq $23,%mm4
+ pxor %mm1,%mm3
+ movq %mm2,56(%esp)
+ paddq %mm5,%mm7
+ pxor %mm4,%mm3
+ psrlq $23,%mm1
+ paddq 48(%esp),%mm7
+ pxor %mm1,%mm3
+ psllq $4,%mm4
+ pxor %mm4,%mm3
+ movq 16(%esp),%mm4
+ paddq %mm7,%mm3
+ movq %mm2,%mm5
psrlq $28,%mm5
paddq %mm3,%mm4
+ movq %mm2,%mm6
+ movq %mm5,%mm7
psllq $25,%mm6
+ movq (%esp),%mm1
+ psrlq $6,%mm5
+ pxor %mm6,%mm7
+ psllq $5,%mm6
+ pxor %mm5,%mm7
+ pxor %mm1,%mm2
+ psrlq $5,%mm5
+ pxor %mm6,%mm7
+ pand %mm2,%mm0
+ psllq $6,%mm6
+ pxor %mm5,%mm7
+ pxor %mm1,%mm0
+ pxor %mm7,%mm6
+ movq 24(%esp),%mm5
+ paddq %mm6,%mm0
+ movq 32(%esp),%mm6
+ movdqa %xmm2,-128(%edx)
+ movdqa %xmm6,%xmm4
+ movdqa %xmm3,%xmm2
+.byte 102,15,58,15,217,8
+ movdqa %xmm5,16(%edx)
+.byte 102,15,58,15,229,8
+ movdqa %xmm3,%xmm5
+ psrlq $7,%xmm3
+ paddq %xmm4,%xmm1
+ movdqa %xmm5,%xmm4
+ psrlq $1,%xmm5
+ psllq $56,%xmm4
+ pxor %xmm5,%xmm3
+ psrlq $7,%xmm5
+ pxor %xmm4,%xmm3
+ psllq $7,%xmm4
+ pxor %xmm5,%xmm3
+ movdqa %xmm0,%xmm5
+ pxor %xmm4,%xmm3
+ movdqa %xmm0,%xmm4
+ psrlq $6,%xmm5
+ paddq %xmm3,%xmm1
+ movdqa %xmm0,%xmm3
+ psrlq $19,%xmm4
+ psllq $3,%xmm3
+ pxor %xmm4,%xmm5
+ psrlq $42,%xmm4
+ pxor %xmm3,%xmm5
+ psllq $42,%xmm3
+ pxor %xmm4,%xmm5
+ movdqa 48(%edx),%xmm4
+ pxor %xmm3,%xmm5
+ movdqa 16(%ebp),%xmm3
+ movq %mm4,%mm1
+ paddq %xmm5,%xmm1
+ movq -112(%edx),%mm7
+ pxor %mm6,%mm5
+ psrlq $14,%mm1
+ movq %mm4,16(%esp)
+ paddq %xmm1,%xmm3
+ pand %mm4,%mm5
+ psllq $23,%mm4
+ paddq %mm3,%mm0
+ movq %mm1,%mm3
+ psrlq $4,%mm1
+ pxor %mm6,%mm5
+ pxor %mm4,%mm3
+ psllq $23,%mm4
+ pxor %mm1,%mm3
+ movq %mm0,48(%esp)
+ paddq %mm5,%mm7
+ pxor %mm4,%mm3
+ psrlq $23,%mm1
+ paddq 40(%esp),%mm7
+ pxor %mm1,%mm3
+ psllq $4,%mm4
+ pxor %mm4,%mm3
+ movq 8(%esp),%mm4
+ paddq %mm7,%mm3
+ movq %mm0,%mm5
+ psrlq $28,%mm5
+ paddq %mm3,%mm4
+ movq %mm0,%mm6
movq %mm5,%mm7
+ psllq $25,%mm6
+ movq 56(%esp),%mm1
psrlq $6,%mm5
pxor %mm6,%mm7
psllq $5,%mm6
pxor %mm5,%mm7
+ pxor %mm1,%mm0
psrlq $5,%mm5
pxor %mm6,%mm7
+ pand %mm0,%mm2
psllq $6,%mm6
pxor %mm5,%mm7
- subl $8,%esp
+ pxor %mm1,%mm2
+ pxor %mm7,%mm6
+ movq 16(%esp),%mm5
+ paddq %mm6,%mm2
+ movq 24(%esp),%mm6
+ movq %mm4,%mm1
+ movq -104(%edx),%mm7
+ pxor %mm6,%mm5
+ psrlq $14,%mm1
+ movq %mm4,8(%esp)
+ pand %mm4,%mm5
+ psllq $23,%mm4
+ paddq %mm3,%mm2
+ movq %mm1,%mm3
+ psrlq $4,%mm1
+ pxor %mm6,%mm5
+ pxor %mm4,%mm3
+ psllq $23,%mm4
+ pxor %mm1,%mm3
+ movq %mm2,40(%esp)
+ paddq %mm5,%mm7
+ pxor %mm4,%mm3
+ psrlq $23,%mm1
+ paddq 32(%esp),%mm7
+ pxor %mm1,%mm3
+ psllq $4,%mm4
+ pxor %mm4,%mm3
+ movq (%esp),%mm4
+ paddq %mm7,%mm3
+ movq %mm2,%mm5
+ psrlq $28,%mm5
+ paddq %mm3,%mm4
+ movq %mm2,%mm6
+ movq %mm5,%mm7
+ psllq $25,%mm6
+ movq 48(%esp),%mm1
+ psrlq $6,%mm5
+ pxor %mm6,%mm7
+ psllq $5,%mm6
+ pxor %mm5,%mm7
+ pxor %mm1,%mm2
+ psrlq $5,%mm5
+ pxor %mm6,%mm7
+ pand %mm2,%mm0
+ psllq $6,%mm6
+ pxor %mm5,%mm7
+ pxor %mm1,%mm0
+ pxor %mm7,%mm6
+ movq 8(%esp),%mm5
+ paddq %mm6,%mm0
+ movq 16(%esp),%mm6
+ movdqa %xmm3,-112(%edx)
+ movdqa %xmm7,%xmm5
+ movdqa %xmm4,%xmm3
+.byte 102,15,58,15,226,8
+ movdqa %xmm6,32(%edx)
+.byte 102,15,58,15,238,8
+ movdqa %xmm4,%xmm6
+ psrlq $7,%xmm4
+ paddq %xmm5,%xmm2
+ movdqa %xmm6,%xmm5
+ psrlq $1,%xmm6
+ psllq $56,%xmm5
+ pxor %xmm6,%xmm4
+ psrlq $7,%xmm6
+ pxor %xmm5,%xmm4
+ psllq $7,%xmm5
+ pxor %xmm6,%xmm4
+ movdqa %xmm1,%xmm6
+ pxor %xmm5,%xmm4
+ movdqa %xmm1,%xmm5
+ psrlq $6,%xmm6
+ paddq %xmm4,%xmm2
+ movdqa %xmm1,%xmm4
+ psrlq $19,%xmm5
+ psllq $3,%xmm4
+ pxor %xmm5,%xmm6
+ psrlq $42,%xmm5
+ pxor %xmm4,%xmm6
+ psllq $42,%xmm4
+ pxor %xmm5,%xmm6
+ movdqa (%edx),%xmm5
+ pxor %xmm4,%xmm6
+ movdqa 32(%ebp),%xmm4
+ movq %mm4,%mm1
+ paddq %xmm6,%xmm2
+ movq -96(%edx),%mm7
+ pxor %mm6,%mm5
+ psrlq $14,%mm1
+ movq %mm4,(%esp)
+ paddq %xmm2,%xmm4
+ pand %mm4,%mm5
+ psllq $23,%mm4
+ paddq %mm3,%mm0
+ movq %mm1,%mm3
+ psrlq $4,%mm1
+ pxor %mm6,%mm5
+ pxor %mm4,%mm3
+ psllq $23,%mm4
+ pxor %mm1,%mm3
+ movq %mm0,32(%esp)
+ paddq %mm5,%mm7
+ pxor %mm4,%mm3
+ psrlq $23,%mm1
+ paddq 24(%esp),%mm7
+ pxor %mm1,%mm3
+ psllq $4,%mm4
+ pxor %mm4,%mm3
+ movq 56(%esp),%mm4
+ paddq %mm7,%mm3
+ movq %mm0,%mm5
+ psrlq $28,%mm5
+ paddq %mm3,%mm4
+ movq %mm0,%mm6
+ movq %mm5,%mm7
+ psllq $25,%mm6
+ movq 40(%esp),%mm1
+ psrlq $6,%mm5
+ pxor %mm6,%mm7
+ psllq $5,%mm6
+ pxor %mm5,%mm7
+ pxor %mm1,%mm0
+ psrlq $5,%mm5
+ pxor %mm6,%mm7
+ pand %mm0,%mm2
+ psllq $6,%mm6
+ pxor %mm5,%mm7
+ pxor %mm1,%mm2
+ pxor %mm7,%mm6
+ movq (%esp),%mm5
+ paddq %mm6,%mm2
+ movq 8(%esp),%mm6
+ movq %mm4,%mm1
+ movq -88(%edx),%mm7
+ pxor %mm6,%mm5
+ psrlq $14,%mm1
+ movq %mm4,56(%esp)
+ pand %mm4,%mm5
+ psllq $23,%mm4
+ paddq %mm3,%mm2
+ movq %mm1,%mm3
+ psrlq $4,%mm1
+ pxor %mm6,%mm5
+ pxor %mm4,%mm3
+ psllq $23,%mm4
+ pxor %mm1,%mm3
+ movq %mm2,24(%esp)
+ paddq %mm5,%mm7
+ pxor %mm4,%mm3
+ psrlq $23,%mm1
+ paddq 16(%esp),%mm7
+ pxor %mm1,%mm3
+ psllq $4,%mm4
+ pxor %mm4,%mm3
+ movq 48(%esp),%mm4
+ paddq %mm7,%mm3
+ movq %mm2,%mm5
+ psrlq $28,%mm5
+ paddq %mm3,%mm4
+ movq %mm2,%mm6
+ movq %mm5,%mm7
+ psllq $25,%mm6
+ movq 32(%esp),%mm1
+ psrlq $6,%mm5
+ pxor %mm6,%mm7
+ psllq $5,%mm6
+ pxor %mm5,%mm7
+ pxor %mm1,%mm2
+ psrlq $5,%mm5
pxor %mm6,%mm7
+ pand %mm2,%mm0
+ psllq $6,%mm6
+ pxor %mm5,%mm7
+ pxor %mm1,%mm0
+ pxor %mm7,%mm6
+ movq 56(%esp),%mm5
+ paddq %mm6,%mm0
+ movq (%esp),%mm6
+ movdqa %xmm4,-96(%edx)
+ movdqa %xmm0,%xmm6
+ movdqa %xmm5,%xmm4
+.byte 102,15,58,15,235,8
+ movdqa %xmm7,48(%edx)
+.byte 102,15,58,15,247,8
+ movdqa %xmm5,%xmm7
+ psrlq $7,%xmm5
+ paddq %xmm6,%xmm3
+ movdqa %xmm7,%xmm6
+ psrlq $1,%xmm7
+ psllq $56,%xmm6
+ pxor %xmm7,%xmm5
+ psrlq $7,%xmm7
+ pxor %xmm6,%xmm5
+ psllq $7,%xmm6
+ pxor %xmm7,%xmm5
+ movdqa %xmm2,%xmm7
+ pxor %xmm6,%xmm5
+ movdqa %xmm2,%xmm6
+ psrlq $6,%xmm7
+ paddq %xmm5,%xmm3
+ movdqa %xmm2,%xmm5
+ psrlq $19,%xmm6
+ psllq $3,%xmm5
+ pxor %xmm6,%xmm7
+ psrlq $42,%xmm6
+ pxor %xmm5,%xmm7
+ psllq $42,%xmm5
+ pxor %xmm6,%xmm7
+ movdqa 16(%edx),%xmm6
+ pxor %xmm5,%xmm7
+ movdqa 48(%ebp),%xmm5
+ movq %mm4,%mm1
+ paddq %xmm7,%xmm3
+ movq -80(%edx),%mm7
+ pxor %mm6,%mm5
+ psrlq $14,%mm1
+ movq %mm4,48(%esp)
+ paddq %xmm3,%xmm5
+ pand %mm4,%mm5
+ psllq $23,%mm4
+ paddq %mm3,%mm0
+ movq %mm1,%mm3
+ psrlq $4,%mm1
+ pxor %mm6,%mm5
+ pxor %mm4,%mm3
+ psllq $23,%mm4
+ pxor %mm1,%mm3
+ movq %mm0,16(%esp)
+ paddq %mm5,%mm7
+ pxor %mm4,%mm3
+ psrlq $23,%mm1
+ paddq 8(%esp),%mm7
+ pxor %mm1,%mm3
+ psllq $4,%mm4
+ pxor %mm4,%mm3
+ movq 40(%esp),%mm4
+ paddq %mm7,%mm3
movq %mm0,%mm5
- por %mm2,%mm0
- pand %mm2,%mm5
- pand %mm1,%mm0
- por %mm0,%mm5
+ psrlq $28,%mm5
+ paddq %mm3,%mm4
+ movq %mm0,%mm6
+ movq %mm5,%mm7
+ psllq $25,%mm6
+ movq 24(%esp),%mm1
+ psrlq $6,%mm5
+ pxor %mm6,%mm7
+ psllq $5,%mm6
+ pxor %mm5,%mm7
+ pxor %mm1,%mm0
+ psrlq $5,%mm5
+ pxor %mm6,%mm7
+ pand %mm0,%mm2
+ psllq $6,%mm6
+ pxor %mm5,%mm7
+ pxor %mm1,%mm2
+ pxor %mm7,%mm6
+ movq 48(%esp),%mm5
+ paddq %mm6,%mm2
+ movq 56(%esp),%mm6
+ movq %mm4,%mm1
+ movq -72(%edx),%mm7
+ pxor %mm6,%mm5
+ psrlq $14,%mm1
+ movq %mm4,40(%esp)
+ pand %mm4,%mm5
+ psllq $23,%mm4
+ paddq %mm3,%mm2
+ movq %mm1,%mm3
+ psrlq $4,%mm1
+ pxor %mm6,%mm5
+ pxor %mm4,%mm3
+ psllq $23,%mm4
+ pxor %mm1,%mm3
+ movq %mm2,8(%esp)
paddq %mm5,%mm7
- movq %mm3,%mm0
- movb (%ebp),%dl
- paddq %mm7,%mm0
- addl $8,%ebp
- cmpb $53,%dl
- jne .L00400_14_sse2
+ pxor %mm4,%mm3
+ psrlq $23,%mm1
+ paddq (%esp),%mm7
+ pxor %mm1,%mm3
+ psllq $4,%mm4
+ pxor %mm4,%mm3
+ movq 32(%esp),%mm4
+ paddq %mm7,%mm3
+ movq %mm2,%mm5
+ psrlq $28,%mm5
+ paddq %mm3,%mm4
+ movq %mm2,%mm6
+ movq %mm5,%mm7
+ psllq $25,%mm6
+ movq 16(%esp),%mm1
+ psrlq $6,%mm5
+ pxor %mm6,%mm7
+ psllq $5,%mm6
+ pxor %mm5,%mm7
+ pxor %mm1,%mm2
+ psrlq $5,%mm5
+ pxor %mm6,%mm7
+ pand %mm2,%mm0
+ psllq $6,%mm6
+ pxor %mm5,%mm7
+ pxor %mm1,%mm0
+ pxor %mm7,%mm6
movq 40(%esp),%mm5
+ paddq %mm6,%mm0
movq 48(%esp),%mm6
- movq 56(%esp),%mm7
+ movdqa %xmm5,-80(%edx)
+ movdqa %xmm1,%xmm7
+ movdqa %xmm6,%xmm5
+.byte 102,15,58,15,244,8
+ movdqa %xmm0,(%edx)
+.byte 102,15,58,15,248,8
+ movdqa %xmm6,%xmm0
+ psrlq $7,%xmm6
+ paddq %xmm7,%xmm4
+ movdqa %xmm0,%xmm7
+ psrlq $1,%xmm0
+ psllq $56,%xmm7
+ pxor %xmm0,%xmm6
+ psrlq $7,%xmm0
+ pxor %xmm7,%xmm6
+ psllq $7,%xmm7
+ pxor %xmm0,%xmm6
+ movdqa %xmm3,%xmm0
+ pxor %xmm7,%xmm6
+ movdqa %xmm3,%xmm7
+ psrlq $6,%xmm0
+ paddq %xmm6,%xmm4
+ movdqa %xmm3,%xmm6
+ psrlq $19,%xmm7
+ psllq $3,%xmm6
+ pxor %xmm7,%xmm0
+ psrlq $42,%xmm7
+ pxor %xmm6,%xmm0
+ psllq $42,%xmm6
+ pxor %xmm7,%xmm0
+ movdqa 32(%edx),%xmm7
+ pxor %xmm6,%xmm0
+ movdqa 64(%ebp),%xmm6
movq %mm4,%mm1
- movq %mm4,%mm2
+ paddq %xmm0,%xmm4
+ movq -64(%edx),%mm7
+ pxor %mm6,%mm5
psrlq $14,%mm1
movq %mm4,32(%esp)
- psllq $23,%mm2
+ paddq %xmm4,%xmm6
+ pand %mm4,%mm5
+ psllq $23,%mm4
+ paddq %mm3,%mm0
movq %mm1,%mm3
psrlq $4,%mm1
- pxor %mm2,%mm3
- psllq $23,%mm2
+ pxor %mm6,%mm5
+ pxor %mm4,%mm3
+ psllq $23,%mm4
pxor %mm1,%mm3
+ movq %mm0,(%esp)
+ paddq %mm5,%mm7
+ pxor %mm4,%mm3
psrlq $23,%mm1
- pxor %mm2,%mm3
- psllq $4,%mm2
+ paddq 56(%esp),%mm7
pxor %mm1,%mm3
- paddq (%ebp),%mm7
- pxor %mm2,%mm3
- pxor %mm6,%mm5
+ psllq $4,%mm4
+ pxor %mm4,%mm3
+ movq 24(%esp),%mm4
+ paddq %mm7,%mm3
+ movq %mm0,%mm5
+ psrlq $28,%mm5
+ paddq %mm3,%mm4
+ movq %mm0,%mm6
+ movq %mm5,%mm7
+ psllq $25,%mm6
movq 8(%esp),%mm1
+ psrlq $6,%mm5
+ pxor %mm6,%mm7
+ psllq $5,%mm6
+ pxor %mm5,%mm7
+ pxor %mm1,%mm0
+ psrlq $5,%mm5
+ pxor %mm6,%mm7
+ pand %mm0,%mm2
+ psllq $6,%mm6
+ pxor %mm5,%mm7
+ pxor %mm1,%mm2
+ pxor %mm7,%mm6
+ movq 32(%esp),%mm5
+ paddq %mm6,%mm2
+ movq 40(%esp),%mm6
+ movq %mm4,%mm1
+ movq -56(%edx),%mm7
+ pxor %mm6,%mm5
+ psrlq $14,%mm1
+ movq %mm4,24(%esp)
pand %mm4,%mm5
- movq 16(%esp),%mm2
+ psllq $23,%mm4
+ paddq %mm3,%mm2
+ movq %mm1,%mm3
+ psrlq $4,%mm1
pxor %mm6,%mm5
- movq 24(%esp),%mm4
- paddq %mm5,%mm3
+ pxor %mm4,%mm3
+ psllq $23,%mm4
+ pxor %mm1,%mm3
+ movq %mm2,56(%esp)
+ paddq %mm5,%mm7
+ pxor %mm4,%mm3
+ psrlq $23,%mm1
+ paddq 48(%esp),%mm7
+ pxor %mm1,%mm3
+ psllq $4,%mm4
+ pxor %mm4,%mm3
+ movq 16(%esp),%mm4
+ paddq %mm7,%mm3
+ movq %mm2,%mm5
+ psrlq $28,%mm5
+ paddq %mm3,%mm4
+ movq %mm2,%mm6
+ movq %mm5,%mm7
+ psllq $25,%mm6
+ movq (%esp),%mm1
+ psrlq $6,%mm5
+ pxor %mm6,%mm7
+ psllq $5,%mm6
+ pxor %mm5,%mm7
+ pxor %mm1,%mm2
+ psrlq $5,%mm5
+ pxor %mm6,%mm7
+ pand %mm2,%mm0
+ psllq $6,%mm6
+ pxor %mm5,%mm7
+ pxor %mm1,%mm0
+ pxor %mm7,%mm6
+ movq 24(%esp),%mm5
+ paddq %mm6,%mm0
+ movq 32(%esp),%mm6
+ movdqa %xmm6,-64(%edx)
+ movdqa %xmm2,%xmm0
+ movdqa %xmm7,%xmm6
+.byte 102,15,58,15,253,8
+ movdqa %xmm1,16(%edx)
+.byte 102,15,58,15,193,8
+ movdqa %xmm7,%xmm1
+ psrlq $7,%xmm7
+ paddq %xmm0,%xmm5
+ movdqa %xmm1,%xmm0
+ psrlq $1,%xmm1
+ psllq $56,%xmm0
+ pxor %xmm1,%xmm7
+ psrlq $7,%xmm1
+ pxor %xmm0,%xmm7
+ psllq $7,%xmm0
+ pxor %xmm1,%xmm7
+ movdqa %xmm4,%xmm1
+ pxor %xmm0,%xmm7
+ movdqa %xmm4,%xmm0
+ psrlq $6,%xmm1
+ paddq %xmm7,%xmm5
+ movdqa %xmm4,%xmm7
+ psrlq $19,%xmm0
+ psllq $3,%xmm7
+ pxor %xmm0,%xmm1
+ psrlq $42,%xmm0
+ pxor %xmm7,%xmm1
+ psllq $42,%xmm7
+ pxor %xmm0,%xmm1
+ movdqa 48(%edx),%xmm0
+ pxor %xmm7,%xmm1
+ movdqa 80(%ebp),%xmm7
+ movq %mm4,%mm1
+ paddq %xmm1,%xmm5
+ movq -48(%edx),%mm7
+ pxor %mm6,%mm5
+ psrlq $14,%mm1
+ movq %mm4,16(%esp)
+ paddq %xmm5,%xmm7
+ pand %mm4,%mm5
+ psllq $23,%mm4
+ paddq %mm3,%mm0
+ movq %mm1,%mm3
+ psrlq $4,%mm1
+ pxor %mm6,%mm5
+ pxor %mm4,%mm3
+ psllq $23,%mm4
+ pxor %mm1,%mm3
+ movq %mm0,48(%esp)
+ paddq %mm5,%mm7
+ pxor %mm4,%mm3
+ psrlq $23,%mm1
+ paddq 40(%esp),%mm7
+ pxor %mm1,%mm3
+ psllq $4,%mm4
+ pxor %mm4,%mm3
+ movq 8(%esp),%mm4
+ paddq %mm7,%mm3
+ movq %mm0,%mm5
+ psrlq $28,%mm5
+ paddq %mm3,%mm4
+ movq %mm0,%mm6
+ movq %mm5,%mm7
+ psllq $25,%mm6
+ movq 56(%esp),%mm1
+ psrlq $6,%mm5
+ pxor %mm6,%mm7
+ psllq $5,%mm6
+ pxor %mm5,%mm7
+ pxor %mm1,%mm0
+ psrlq $5,%mm5
+ pxor %mm6,%mm7
+ pand %mm0,%mm2
+ psllq $6,%mm6
+ pxor %mm5,%mm7
+ pxor %mm1,%mm2
+ pxor %mm7,%mm6
+ movq 16(%esp),%mm5
+ paddq %mm6,%mm2
+ movq 24(%esp),%mm6
+ movq %mm4,%mm1
+ movq -40(%edx),%mm7
+ pxor %mm6,%mm5
+ psrlq $14,%mm1
+ movq %mm4,8(%esp)
+ pand %mm4,%mm5
+ psllq $23,%mm4
+ paddq %mm3,%mm2
+ movq %mm1,%mm3
+ psrlq $4,%mm1
+ pxor %mm6,%mm5
+ pxor %mm4,%mm3
+ psllq $23,%mm4
+ pxor %mm1,%mm3
+ movq %mm2,40(%esp)
+ paddq %mm5,%mm7
+ pxor %mm4,%mm3
+ psrlq $23,%mm1
+ paddq 32(%esp),%mm7
+ pxor %mm1,%mm3
+ psllq $4,%mm4
+ pxor %mm4,%mm3
+ movq (%esp),%mm4
+ paddq %mm7,%mm3
+ movq %mm2,%mm5
+ psrlq $28,%mm5
+ paddq %mm3,%mm4
+ movq %mm2,%mm6
+ movq %mm5,%mm7
+ psllq $25,%mm6
+ movq 48(%esp),%mm1
+ psrlq $6,%mm5
+ pxor %mm6,%mm7
+ psllq $5,%mm6
+ pxor %mm5,%mm7
+ pxor %mm1,%mm2
+ psrlq $5,%mm5
+ pxor %mm6,%mm7
+ pand %mm2,%mm0
+ psllq $6,%mm6
+ pxor %mm5,%mm7
+ pxor %mm1,%mm0
+ pxor %mm7,%mm6
+ movq 8(%esp),%mm5
+ paddq %mm6,%mm0
+ movq 16(%esp),%mm6
+ movdqa %xmm7,-48(%edx)
+ movdqa %xmm3,%xmm1
+ movdqa %xmm0,%xmm7
+.byte 102,15,58,15,198,8
+ movdqa %xmm2,32(%edx)
+.byte 102,15,58,15,202,8
+ movdqa %xmm0,%xmm2
+ psrlq $7,%xmm0
+ paddq %xmm1,%xmm6
+ movdqa %xmm2,%xmm1
+ psrlq $1,%xmm2
+ psllq $56,%xmm1
+ pxor %xmm2,%xmm0
+ psrlq $7,%xmm2
+ pxor %xmm1,%xmm0
+ psllq $7,%xmm1
+ pxor %xmm2,%xmm0
+ movdqa %xmm5,%xmm2
+ pxor %xmm1,%xmm0
+ movdqa %xmm5,%xmm1
+ psrlq $6,%xmm2
+ paddq %xmm0,%xmm6
+ movdqa %xmm5,%xmm0
+ psrlq $19,%xmm1
+ psllq $3,%xmm0
+ pxor %xmm1,%xmm2
+ psrlq $42,%xmm1
+ pxor %xmm0,%xmm2
+ psllq $42,%xmm0
+ pxor %xmm1,%xmm2
+ movdqa (%edx),%xmm1
+ pxor %xmm0,%xmm2
+ movdqa 96(%ebp),%xmm0
+ movq %mm4,%mm1
+ paddq %xmm2,%xmm6
+ movq -32(%edx),%mm7
+ pxor %mm6,%mm5
+ psrlq $14,%mm1
+ movq %mm4,(%esp)
+ paddq %xmm6,%xmm0
+ pand %mm4,%mm5
+ psllq $23,%mm4
+ paddq %mm3,%mm0
+ movq %mm1,%mm3
+ psrlq $4,%mm1
+ pxor %mm6,%mm5
+ pxor %mm4,%mm3
+ psllq $23,%mm4
+ pxor %mm1,%mm3
+ movq %mm0,32(%esp)
+ paddq %mm5,%mm7
+ pxor %mm4,%mm3
+ psrlq $23,%mm1
+ paddq 24(%esp),%mm7
+ pxor %mm1,%mm3
+ psllq $4,%mm4
+ pxor %mm4,%mm3
+ movq 56(%esp),%mm4
+ paddq %mm7,%mm3
+ movq %mm0,%mm5
+ psrlq $28,%mm5
+ paddq %mm3,%mm4
+ movq %mm0,%mm6
+ movq %mm5,%mm7
+ psllq $25,%mm6
+ movq 40(%esp),%mm1
+ psrlq $6,%mm5
+ pxor %mm6,%mm7
+ psllq $5,%mm6
+ pxor %mm5,%mm7
+ pxor %mm1,%mm0
+ psrlq $5,%mm5
+ pxor %mm6,%mm7
+ pand %mm0,%mm2
+ psllq $6,%mm6
+ pxor %mm5,%mm7
+ pxor %mm1,%mm2
+ pxor %mm7,%mm6
+ movq (%esp),%mm5
+ paddq %mm6,%mm2
+ movq 8(%esp),%mm6
+ movq %mm4,%mm1
+ movq -24(%edx),%mm7
+ pxor %mm6,%mm5
+ psrlq $14,%mm1
+ movq %mm4,56(%esp)
+ pand %mm4,%mm5
+ psllq $23,%mm4
+ paddq %mm3,%mm2
+ movq %mm1,%mm3
+ psrlq $4,%mm1
+ pxor %mm6,%mm5
+ pxor %mm4,%mm3
+ psllq $23,%mm4
+ pxor %mm1,%mm3
+ movq %mm2,24(%esp)
+ paddq %mm5,%mm7
+ pxor %mm4,%mm3
+ psrlq $23,%mm1
+ paddq 16(%esp),%mm7
+ pxor %mm1,%mm3
+ psllq $4,%mm4
+ pxor %mm4,%mm3
+ movq 48(%esp),%mm4
+ paddq %mm7,%mm3
+ movq %mm2,%mm5
+ psrlq $28,%mm5
+ paddq %mm3,%mm4
+ movq %mm2,%mm6
+ movq %mm5,%mm7
+ psllq $25,%mm6
+ movq 32(%esp),%mm1
+ psrlq $6,%mm5
+ pxor %mm6,%mm7
+ psllq $5,%mm6
+ pxor %mm5,%mm7
+ pxor %mm1,%mm2
+ psrlq $5,%mm5
+ pxor %mm6,%mm7
+ pand %mm2,%mm0
+ psllq $6,%mm6
+ pxor %mm5,%mm7
+ pxor %mm1,%mm0
+ pxor %mm7,%mm6
+ movq 56(%esp),%mm5
+ paddq %mm6,%mm0
+ movq (%esp),%mm6
+ movdqa %xmm0,-32(%edx)
+ movdqa %xmm4,%xmm2
+ movdqa %xmm1,%xmm0
+.byte 102,15,58,15,207,8
+ movdqa %xmm3,48(%edx)
+.byte 102,15,58,15,211,8
+ movdqa %xmm1,%xmm3
+ psrlq $7,%xmm1
+ paddq %xmm2,%xmm7
+ movdqa %xmm3,%xmm2
+ psrlq $1,%xmm3
+ psllq $56,%xmm2
+ pxor %xmm3,%xmm1
+ psrlq $7,%xmm3
+ pxor %xmm2,%xmm1
+ psllq $7,%xmm2
+ pxor %xmm3,%xmm1
+ movdqa %xmm6,%xmm3
+ pxor %xmm2,%xmm1
+ movdqa %xmm6,%xmm2
+ psrlq $6,%xmm3
+ paddq %xmm1,%xmm7
+ movdqa %xmm6,%xmm1
+ psrlq $19,%xmm2
+ psllq $3,%xmm1
+ pxor %xmm2,%xmm3
+ psrlq $42,%xmm2
+ pxor %xmm1,%xmm3
+ psllq $42,%xmm1
+ pxor %xmm2,%xmm3
+ movdqa 16(%edx),%xmm2
+ pxor %xmm1,%xmm3
+ movdqa 112(%ebp),%xmm1
+ movq %mm4,%mm1
+ paddq %xmm3,%xmm7
+ movq -16(%edx),%mm7
+ pxor %mm6,%mm5
+ psrlq $14,%mm1
+ movq %mm4,48(%esp)
+ paddq %xmm7,%xmm1
+ pand %mm4,%mm5
+ psllq $23,%mm4
+ paddq %mm3,%mm0
+ movq %mm1,%mm3
+ psrlq $4,%mm1
+ pxor %mm6,%mm5
+ pxor %mm4,%mm3
+ psllq $23,%mm4
+ pxor %mm1,%mm3
+ movq %mm0,16(%esp)
+ paddq %mm5,%mm7
+ pxor %mm4,%mm3
+ psrlq $23,%mm1
+ paddq 8(%esp),%mm7
+ pxor %mm1,%mm3
+ psllq $4,%mm4
+ pxor %mm4,%mm3
+ movq 40(%esp),%mm4
+ paddq %mm7,%mm3
+ movq %mm0,%mm5
+ psrlq $28,%mm5
+ paddq %mm3,%mm4
+ movq %mm0,%mm6
+ movq %mm5,%mm7
+ psllq $25,%mm6
+ movq 24(%esp),%mm1
+ psrlq $6,%mm5
+ pxor %mm6,%mm7
+ psllq $5,%mm6
+ pxor %mm5,%mm7
+ pxor %mm1,%mm0
+ psrlq $5,%mm5
+ pxor %mm6,%mm7
+ pand %mm0,%mm2
+ psllq $6,%mm6
+ pxor %mm5,%mm7
+ pxor %mm1,%mm2
+ pxor %mm7,%mm6
+ movq 48(%esp),%mm5
+ paddq %mm6,%mm2
+ movq 56(%esp),%mm6
+ movq %mm4,%mm1
+ movq -8(%edx),%mm7
+ pxor %mm6,%mm5
+ psrlq $14,%mm1
+ movq %mm4,40(%esp)
+ pand %mm4,%mm5
+ psllq $23,%mm4
+ paddq %mm3,%mm2
+ movq %mm1,%mm3
+ psrlq $4,%mm1
+ pxor %mm6,%mm5
+ pxor %mm4,%mm3
+ psllq $23,%mm4
+ pxor %mm1,%mm3
+ movq %mm2,8(%esp)
+ paddq %mm5,%mm7
+ pxor %mm4,%mm3
+ psrlq $23,%mm1
+ paddq (%esp),%mm7
+ pxor %mm1,%mm3
+ psllq $4,%mm4
+ pxor %mm4,%mm3
+ movq 32(%esp),%mm4
+ paddq %mm7,%mm3
+ movq %mm2,%mm5
+ psrlq $28,%mm5
+ paddq %mm3,%mm4
+ movq %mm2,%mm6
+ movq %mm5,%mm7
+ psllq $25,%mm6
+ movq 16(%esp),%mm1
+ psrlq $6,%mm5
+ pxor %mm6,%mm7
+ psllq $5,%mm6
+ pxor %mm5,%mm7
+ pxor %mm1,%mm2
+ psrlq $5,%mm5
+ pxor %mm6,%mm7
+ pand %mm2,%mm0
+ psllq $6,%mm6
+ pxor %mm5,%mm7
+ pxor %mm1,%mm0
+ pxor %mm7,%mm6
+ movq 40(%esp),%mm5
+ paddq %mm6,%mm0
+ movq 48(%esp),%mm6
+ movdqa %xmm1,-16(%edx)
+ leal 128(%ebp),%ebp
+ decl %ecx
+ jnz .L00800_47_ssse3
+ movdqa (%ebp),%xmm1
+ leal -640(%ebp),%ebp
+ movdqu (%ebx),%xmm0
+.byte 102,15,56,0,193
+ movdqa (%ebp),%xmm3
+ movdqa %xmm1,%xmm2
+ movdqu 16(%ebx),%xmm1
+ paddq %xmm0,%xmm3
+.byte 102,15,56,0,202
+ movq %mm4,%mm1
+ movq -128(%edx),%mm7
+ pxor %mm6,%mm5
+ psrlq $14,%mm1
+ movq %mm4,32(%esp)
+ pand %mm4,%mm5
+ psllq $23,%mm4
+ paddq %mm3,%mm0
+ movq %mm1,%mm3
+ psrlq $4,%mm1
+ pxor %mm6,%mm5
+ pxor %mm4,%mm3
+ psllq $23,%mm4
+ pxor %mm1,%mm3
movq %mm0,(%esp)
+ paddq %mm5,%mm7
+ pxor %mm4,%mm3
+ psrlq $23,%mm1
+ paddq 56(%esp),%mm7
+ pxor %mm1,%mm3
+ psllq $4,%mm4
+ pxor %mm4,%mm3
+ movq 24(%esp),%mm4
paddq %mm7,%mm3
movq %mm0,%mm5
+ psrlq $28,%mm5
+ paddq %mm3,%mm4
movq %mm0,%mm6
- paddq 72(%esp),%mm3
+ movq %mm5,%mm7
+ psllq $25,%mm6
+ movq 8(%esp),%mm1
+ psrlq $6,%mm5
+ pxor %mm6,%mm7
+ psllq $5,%mm6
+ pxor %mm5,%mm7
+ pxor %mm1,%mm0
+ psrlq $5,%mm5
+ pxor %mm6,%mm7
+ pand %mm0,%mm2
+ psllq $6,%mm6
+ pxor %mm5,%mm7
+ pxor %mm1,%mm2
+ pxor %mm7,%mm6
+ movq 32(%esp),%mm5
+ paddq %mm6,%mm2
+ movq 40(%esp),%mm6
+ movq %mm4,%mm1
+ movq -120(%edx),%mm7
+ pxor %mm6,%mm5
+ psrlq $14,%mm1
+ movq %mm4,24(%esp)
+ pand %mm4,%mm5
+ psllq $23,%mm4
+ paddq %mm3,%mm2
+ movq %mm1,%mm3
+ psrlq $4,%mm1
+ pxor %mm6,%mm5
+ pxor %mm4,%mm3
+ psllq $23,%mm4
+ pxor %mm1,%mm3
+ movq %mm2,56(%esp)
+ paddq %mm5,%mm7
+ pxor %mm4,%mm3
+ psrlq $23,%mm1
+ paddq 48(%esp),%mm7
+ pxor %mm1,%mm3
+ psllq $4,%mm4
+ pxor %mm4,%mm3
+ movq 16(%esp),%mm4
+ paddq %mm7,%mm3
+ movq %mm2,%mm5
psrlq $28,%mm5
paddq %mm3,%mm4
+ movq %mm2,%mm6
+ movq %mm5,%mm7
psllq $25,%mm6
+ movq (%esp),%mm1
+ psrlq $6,%mm5
+ pxor %mm6,%mm7
+ psllq $5,%mm6
+ pxor %mm5,%mm7
+ pxor %mm1,%mm2
+ psrlq $5,%mm5
+ pxor %mm6,%mm7
+ pand %mm2,%mm0
+ psllq $6,%mm6
+ pxor %mm5,%mm7
+ pxor %mm1,%mm0
+ pxor %mm7,%mm6
+ movq 24(%esp),%mm5
+ paddq %mm6,%mm0
+ movq 32(%esp),%mm6
+ movdqa %xmm3,-128(%edx)
+ movdqa 16(%ebp),%xmm4
+ movdqa %xmm2,%xmm3
+ movdqu 32(%ebx),%xmm2
+ paddq %xmm1,%xmm4
+.byte 102,15,56,0,211
+ movq %mm4,%mm1
+ movq -112(%edx),%mm7
+ pxor %mm6,%mm5
+ psrlq $14,%mm1
+ movq %mm4,16(%esp)
+ pand %mm4,%mm5
+ psllq $23,%mm4
+ paddq %mm3,%mm0
+ movq %mm1,%mm3
+ psrlq $4,%mm1
+ pxor %mm6,%mm5
+ pxor %mm4,%mm3
+ psllq $23,%mm4
+ pxor %mm1,%mm3
+ movq %mm0,48(%esp)
+ paddq %mm5,%mm7
+ pxor %mm4,%mm3
+ psrlq $23,%mm1
+ paddq 40(%esp),%mm7
+ pxor %mm1,%mm3
+ psllq $4,%mm4
+ pxor %mm4,%mm3
+ movq 8(%esp),%mm4
+ paddq %mm7,%mm3
+ movq %mm0,%mm5
+ psrlq $28,%mm5
+ paddq %mm3,%mm4
+ movq %mm0,%mm6
movq %mm5,%mm7
+ psllq $25,%mm6
+ movq 56(%esp),%mm1
psrlq $6,%mm5
pxor %mm6,%mm7
psllq $5,%mm6
pxor %mm5,%mm7
+ pxor %mm1,%mm0
psrlq $5,%mm5
pxor %mm6,%mm7
+ pand %mm0,%mm2
psllq $6,%mm6
pxor %mm5,%mm7
- subl $8,%esp
+ pxor %mm1,%mm2
+ pxor %mm7,%mm6
+ movq 16(%esp),%mm5
+ paddq %mm6,%mm2
+ movq 24(%esp),%mm6
+ movq %mm4,%mm1
+ movq -104(%edx),%mm7
+ pxor %mm6,%mm5
+ psrlq $14,%mm1
+ movq %mm4,8(%esp)
+ pand %mm4,%mm5
+ psllq $23,%mm4
+ paddq %mm3,%mm2
+ movq %mm1,%mm3
+ psrlq $4,%mm1
+ pxor %mm6,%mm5
+ pxor %mm4,%mm3
+ psllq $23,%mm4
+ pxor %mm1,%mm3
+ movq %mm2,40(%esp)
+ paddq %mm5,%mm7
+ pxor %mm4,%mm3
+ psrlq $23,%mm1
+ paddq 32(%esp),%mm7
+ pxor %mm1,%mm3
+ psllq $4,%mm4
+ pxor %mm4,%mm3
+ movq (%esp),%mm4
+ paddq %mm7,%mm3
+ movq %mm2,%mm5
+ psrlq $28,%mm5
+ paddq %mm3,%mm4
+ movq %mm2,%mm6
+ movq %mm5,%mm7
+ psllq $25,%mm6
+ movq 48(%esp),%mm1
+ psrlq $6,%mm5
pxor %mm6,%mm7
+ psllq $5,%mm6
+ pxor %mm5,%mm7
+ pxor %mm1,%mm2
+ psrlq $5,%mm5
+ pxor %mm6,%mm7
+ pand %mm2,%mm0
+ psllq $6,%mm6
+ pxor %mm5,%mm7
+ pxor %mm1,%mm0
+ pxor %mm7,%mm6
+ movq 8(%esp),%mm5
+ paddq %mm6,%mm0
+ movq 16(%esp),%mm6
+ movdqa %xmm4,-112(%edx)
+ movdqa 32(%ebp),%xmm5
+ movdqa %xmm3,%xmm4
+ movdqu 48(%ebx),%xmm3
+ paddq %xmm2,%xmm5
+.byte 102,15,56,0,220
+ movq %mm4,%mm1
+ movq -96(%edx),%mm7
+ pxor %mm6,%mm5
+ psrlq $14,%mm1
+ movq %mm4,(%esp)
+ pand %mm4,%mm5
+ psllq $23,%mm4
+ paddq %mm3,%mm0
+ movq %mm1,%mm3
+ psrlq $4,%mm1
+ pxor %mm6,%mm5
+ pxor %mm4,%mm3
+ psllq $23,%mm4
+ pxor %mm1,%mm3
+ movq %mm0,32(%esp)
+ paddq %mm5,%mm7
+ pxor %mm4,%mm3
+ psrlq $23,%mm1
+ paddq 24(%esp),%mm7
+ pxor %mm1,%mm3
+ psllq $4,%mm4
+ pxor %mm4,%mm3
+ movq 56(%esp),%mm4
+ paddq %mm7,%mm3
movq %mm0,%mm5
- por %mm2,%mm0
- movq 88(%esp),%mm6
- pand %mm2,%mm5
- pand %mm1,%mm0
- movq 192(%esp),%mm2
- por %mm0,%mm5
+ psrlq $28,%mm5
+ paddq %mm3,%mm4
+ movq %mm0,%mm6
+ movq %mm5,%mm7
+ psllq $25,%mm6
+ movq 40(%esp),%mm1
+ psrlq $6,%mm5
+ pxor %mm6,%mm7
+ psllq $5,%mm6
+ pxor %mm5,%mm7
+ pxor %mm1,%mm0
+ psrlq $5,%mm5
+ pxor %mm6,%mm7
+ pand %mm0,%mm2
+ psllq $6,%mm6
+ pxor %mm5,%mm7
+ pxor %mm1,%mm2
+ pxor %mm7,%mm6
+ movq (%esp),%mm5
+ paddq %mm6,%mm2
+ movq 8(%esp),%mm6
+ movq %mm4,%mm1
+ movq -88(%edx),%mm7
+ pxor %mm6,%mm5
+ psrlq $14,%mm1
+ movq %mm4,56(%esp)
+ pand %mm4,%mm5
+ psllq $23,%mm4
+ paddq %mm3,%mm2
+ movq %mm1,%mm3
+ psrlq $4,%mm1
+ pxor %mm6,%mm5
+ pxor %mm4,%mm3
+ psllq $23,%mm4
+ pxor %mm1,%mm3
+ movq %mm2,24(%esp)
paddq %mm5,%mm7
- movq %mm3,%mm0
- movb (%ebp),%dl
- paddq %mm7,%mm0
- addl $8,%ebp
-.align 16
-.L00516_79_sse2:
- movq %mm2,%mm1
- psrlq $1,%mm2
- movq %mm6,%mm7
- psrlq $6,%mm6
- movq %mm2,%mm3
- psrlq $6,%mm2
- movq %mm6,%mm5
- psrlq $13,%mm6
- pxor %mm2,%mm3
- psrlq $1,%mm2
- pxor %mm6,%mm5
- psrlq $42,%mm6
- pxor %mm2,%mm3
- movq 200(%esp),%mm2
- psllq $56,%mm1
+ pxor %mm4,%mm3
+ psrlq $23,%mm1
+ paddq 16(%esp),%mm7
+ pxor %mm1,%mm3
+ psllq $4,%mm4
+ pxor %mm4,%mm3
+ movq 48(%esp),%mm4
+ paddq %mm7,%mm3
+ movq %mm2,%mm5
+ psrlq $28,%mm5
+ paddq %mm3,%mm4
+ movq %mm2,%mm6
+ movq %mm5,%mm7
+ psllq $25,%mm6
+ movq 32(%esp),%mm1
+ psrlq $6,%mm5
+ pxor %mm6,%mm7
+ psllq $5,%mm6
+ pxor %mm5,%mm7
+ pxor %mm1,%mm2
+ psrlq $5,%mm5
+ pxor %mm6,%mm7
+ pand %mm2,%mm0
+ psllq $6,%mm6
+ pxor %mm5,%mm7
+ pxor %mm1,%mm0
+ pxor %mm7,%mm6
+ movq 56(%esp),%mm5
+ paddq %mm6,%mm0
+ movq (%esp),%mm6
+ movdqa %xmm5,-96(%edx)
+ movdqa 48(%ebp),%xmm6
+ movdqa %xmm4,%xmm5
+ movdqu 64(%ebx),%xmm4
+ paddq %xmm3,%xmm6
+.byte 102,15,56,0,229
+ movq %mm4,%mm1
+ movq -80(%edx),%mm7
pxor %mm6,%mm5
- psllq $3,%mm7
+ psrlq $14,%mm1
+ movq %mm4,48(%esp)
+ pand %mm4,%mm5
+ psllq $23,%mm4
+ paddq %mm3,%mm0
+ movq %mm1,%mm3
+ psrlq $4,%mm1
+ pxor %mm6,%mm5
+ pxor %mm4,%mm3
+ psllq $23,%mm4
pxor %mm1,%mm3
- paddq 128(%esp),%mm2
- psllq $7,%mm1
- pxor %mm7,%mm5
- psllq $42,%mm7
+ movq %mm0,16(%esp)
+ paddq %mm5,%mm7
+ pxor %mm4,%mm3
+ psrlq $23,%mm1
+ paddq 8(%esp),%mm7
pxor %mm1,%mm3
- pxor %mm7,%mm5
- paddq %mm5,%mm3
- paddq %mm2,%mm3
- movq %mm3,72(%esp)
+ psllq $4,%mm4
+ pxor %mm4,%mm3
+ movq 40(%esp),%mm4
+ paddq %mm7,%mm3
+ movq %mm0,%mm5
+ psrlq $28,%mm5
+ paddq %mm3,%mm4
+ movq %mm0,%mm6
+ movq %mm5,%mm7
+ psllq $25,%mm6
+ movq 24(%esp),%mm1
+ psrlq $6,%mm5
+ pxor %mm6,%mm7
+ psllq $5,%mm6
+ pxor %mm5,%mm7
+ pxor %mm1,%mm0
+ psrlq $5,%mm5
+ pxor %mm6,%mm7
+ pand %mm0,%mm2
+ psllq $6,%mm6
+ pxor %mm5,%mm7
+ pxor %mm1,%mm2
+ pxor %mm7,%mm6
+ movq 48(%esp),%mm5
+ paddq %mm6,%mm2
+ movq 56(%esp),%mm6
+ movq %mm4,%mm1
+ movq -72(%edx),%mm7
+ pxor %mm6,%mm5
+ psrlq $14,%mm1
+ movq %mm4,40(%esp)
+ pand %mm4,%mm5
+ psllq $23,%mm4
+ paddq %mm3,%mm2
+ movq %mm1,%mm3
+ psrlq $4,%mm1
+ pxor %mm6,%mm5
+ pxor %mm4,%mm3
+ psllq $23,%mm4
+ pxor %mm1,%mm3
+ movq %mm2,8(%esp)
+ paddq %mm5,%mm7
+ pxor %mm4,%mm3
+ psrlq $23,%mm1
+ paddq (%esp),%mm7
+ pxor %mm1,%mm3
+ psllq $4,%mm4
+ pxor %mm4,%mm3
+ movq 32(%esp),%mm4
+ paddq %mm7,%mm3
+ movq %mm2,%mm5
+ psrlq $28,%mm5
+ paddq %mm3,%mm4
+ movq %mm2,%mm6
+ movq %mm5,%mm7
+ psllq $25,%mm6
+ movq 16(%esp),%mm1
+ psrlq $6,%mm5
+ pxor %mm6,%mm7
+ psllq $5,%mm6
+ pxor %mm5,%mm7
+ pxor %mm1,%mm2
+ psrlq $5,%mm5
+ pxor %mm6,%mm7
+ pand %mm2,%mm0
+ psllq $6,%mm6
+ pxor %mm5,%mm7
+ pxor %mm1,%mm0
+ pxor %mm7,%mm6
movq 40(%esp),%mm5
+ paddq %mm6,%mm0
movq 48(%esp),%mm6
- movq 56(%esp),%mm7
+ movdqa %xmm6,-80(%edx)
+ movdqa 64(%ebp),%xmm7
+ movdqa %xmm5,%xmm6
+ movdqu 80(%ebx),%xmm5
+ paddq %xmm4,%xmm7
+.byte 102,15,56,0,238
movq %mm4,%mm1
- movq %mm4,%mm2
+ movq -64(%edx),%mm7
+ pxor %mm6,%mm5
psrlq $14,%mm1
movq %mm4,32(%esp)
- psllq $23,%mm2
+ pand %mm4,%mm5
+ psllq $23,%mm4
+ paddq %mm3,%mm0
movq %mm1,%mm3
psrlq $4,%mm1
- pxor %mm2,%mm3
- psllq $23,%mm2
+ pxor %mm6,%mm5
+ pxor %mm4,%mm3
+ psllq $23,%mm4
pxor %mm1,%mm3
+ movq %mm0,(%esp)
+ paddq %mm5,%mm7
+ pxor %mm4,%mm3
psrlq $23,%mm1
- pxor %mm2,%mm3
- psllq $4,%mm2
+ paddq 56(%esp),%mm7
pxor %mm1,%mm3
- paddq (%ebp),%mm7
- pxor %mm2,%mm3
- pxor %mm6,%mm5
+ psllq $4,%mm4
+ pxor %mm4,%mm3
+ movq 24(%esp),%mm4
+ paddq %mm7,%mm3
+ movq %mm0,%mm5
+ psrlq $28,%mm5
+ paddq %mm3,%mm4
+ movq %mm0,%mm6
+ movq %mm5,%mm7
+ psllq $25,%mm6
movq 8(%esp),%mm1
+ psrlq $6,%mm5
+ pxor %mm6,%mm7
+ psllq $5,%mm6
+ pxor %mm5,%mm7
+ pxor %mm1,%mm0
+ psrlq $5,%mm5
+ pxor %mm6,%mm7
+ pand %mm0,%mm2
+ psllq $6,%mm6
+ pxor %mm5,%mm7
+ pxor %mm1,%mm2
+ pxor %mm7,%mm6
+ movq 32(%esp),%mm5
+ paddq %mm6,%mm2
+ movq 40(%esp),%mm6
+ movq %mm4,%mm1
+ movq -56(%edx),%mm7
+ pxor %mm6,%mm5
+ psrlq $14,%mm1
+ movq %mm4,24(%esp)
pand %mm4,%mm5
- movq 16(%esp),%mm2
+ psllq $23,%mm4
+ paddq %mm3,%mm2
+ movq %mm1,%mm3
+ psrlq $4,%mm1
pxor %mm6,%mm5
- movq 24(%esp),%mm4
- paddq %mm5,%mm3
- movq %mm0,(%esp)
+ pxor %mm4,%mm3
+ psllq $23,%mm4
+ pxor %mm1,%mm3
+ movq %mm2,56(%esp)
+ paddq %mm5,%mm7
+ pxor %mm4,%mm3
+ psrlq $23,%mm1
+ paddq 48(%esp),%mm7
+ pxor %mm1,%mm3
+ psllq $4,%mm4
+ pxor %mm4,%mm3
+ movq 16(%esp),%mm4
+ paddq %mm7,%mm3
+ movq %mm2,%mm5
+ psrlq $28,%mm5
+ paddq %mm3,%mm4
+ movq %mm2,%mm6
+ movq %mm5,%mm7
+ psllq $25,%mm6
+ movq (%esp),%mm1
+ psrlq $6,%mm5
+ pxor %mm6,%mm7
+ psllq $5,%mm6
+ pxor %mm5,%mm7
+ pxor %mm1,%mm2
+ psrlq $5,%mm5
+ pxor %mm6,%mm7
+ pand %mm2,%mm0
+ psllq $6,%mm6
+ pxor %mm5,%mm7
+ pxor %mm1,%mm0
+ pxor %mm7,%mm6
+ movq 24(%esp),%mm5
+ paddq %mm6,%mm0
+ movq 32(%esp),%mm6
+ movdqa %xmm7,-64(%edx)
+ movdqa %xmm0,(%edx)
+ movdqa 80(%ebp),%xmm0
+ movdqa %xmm6,%xmm7
+ movdqu 96(%ebx),%xmm6
+ paddq %xmm5,%xmm0
+.byte 102,15,56,0,247
+ movq %mm4,%mm1
+ movq -48(%edx),%mm7
+ pxor %mm6,%mm5
+ psrlq $14,%mm1
+ movq %mm4,16(%esp)
+ pand %mm4,%mm5
+ psllq $23,%mm4
+ paddq %mm3,%mm0
+ movq %mm1,%mm3
+ psrlq $4,%mm1
+ pxor %mm6,%mm5
+ pxor %mm4,%mm3
+ psllq $23,%mm4
+ pxor %mm1,%mm3
+ movq %mm0,48(%esp)
+ paddq %mm5,%mm7
+ pxor %mm4,%mm3
+ psrlq $23,%mm1
+ paddq 40(%esp),%mm7
+ pxor %mm1,%mm3
+ psllq $4,%mm4
+ pxor %mm4,%mm3
+ movq 8(%esp),%mm4
paddq %mm7,%mm3
movq %mm0,%mm5
+ psrlq $28,%mm5
+ paddq %mm3,%mm4
movq %mm0,%mm6
- paddq 72(%esp),%mm3
+ movq %mm5,%mm7
+ psllq $25,%mm6
+ movq 56(%esp),%mm1
+ psrlq $6,%mm5
+ pxor %mm6,%mm7
+ psllq $5,%mm6
+ pxor %mm5,%mm7
+ pxor %mm1,%mm0
+ psrlq $5,%mm5
+ pxor %mm6,%mm7
+ pand %mm0,%mm2
+ psllq $6,%mm6
+ pxor %mm5,%mm7
+ pxor %mm1,%mm2
+ pxor %mm7,%mm6
+ movq 16(%esp),%mm5
+ paddq %mm6,%mm2
+ movq 24(%esp),%mm6
+ movq %mm4,%mm1
+ movq -40(%edx),%mm7
+ pxor %mm6,%mm5
+ psrlq $14,%mm1
+ movq %mm4,8(%esp)
+ pand %mm4,%mm5
+ psllq $23,%mm4
+ paddq %mm3,%mm2
+ movq %mm1,%mm3
+ psrlq $4,%mm1
+ pxor %mm6,%mm5
+ pxor %mm4,%mm3
+ psllq $23,%mm4
+ pxor %mm1,%mm3
+ movq %mm2,40(%esp)
+ paddq %mm5,%mm7
+ pxor %mm4,%mm3
+ psrlq $23,%mm1
+ paddq 32(%esp),%mm7
+ pxor %mm1,%mm3
+ psllq $4,%mm4
+ pxor %mm4,%mm3
+ movq (%esp),%mm4
+ paddq %mm7,%mm3
+ movq %mm2,%mm5
psrlq $28,%mm5
paddq %mm3,%mm4
+ movq %mm2,%mm6
+ movq %mm5,%mm7
psllq $25,%mm6
+ movq 48(%esp),%mm1
+ psrlq $6,%mm5
+ pxor %mm6,%mm7
+ psllq $5,%mm6
+ pxor %mm5,%mm7
+ pxor %mm1,%mm2
+ psrlq $5,%mm5
+ pxor %mm6,%mm7
+ pand %mm2,%mm0
+ psllq $6,%mm6
+ pxor %mm5,%mm7
+ pxor %mm1,%mm0
+ pxor %mm7,%mm6
+ movq 8(%esp),%mm5
+ paddq %mm6,%mm0
+ movq 16(%esp),%mm6
+ movdqa %xmm0,-48(%edx)
+ movdqa %xmm1,16(%edx)
+ movdqa 96(%ebp),%xmm1
+ movdqa %xmm7,%xmm0
+ movdqu 112(%ebx),%xmm7
+ paddq %xmm6,%xmm1
+.byte 102,15,56,0,248
+ movq %mm4,%mm1
+ movq -32(%edx),%mm7
+ pxor %mm6,%mm5
+ psrlq $14,%mm1
+ movq %mm4,(%esp)
+ pand %mm4,%mm5
+ psllq $23,%mm4
+ paddq %mm3,%mm0
+ movq %mm1,%mm3
+ psrlq $4,%mm1
+ pxor %mm6,%mm5
+ pxor %mm4,%mm3
+ psllq $23,%mm4
+ pxor %mm1,%mm3
+ movq %mm0,32(%esp)
+ paddq %mm5,%mm7
+ pxor %mm4,%mm3
+ psrlq $23,%mm1
+ paddq 24(%esp),%mm7
+ pxor %mm1,%mm3
+ psllq $4,%mm4
+ pxor %mm4,%mm3
+ movq 56(%esp),%mm4
+ paddq %mm7,%mm3
+ movq %mm0,%mm5
+ psrlq $28,%mm5
+ paddq %mm3,%mm4
+ movq %mm0,%mm6
movq %mm5,%mm7
+ psllq $25,%mm6
+ movq 40(%esp),%mm1
psrlq $6,%mm5
pxor %mm6,%mm7
psllq $5,%mm6
pxor %mm5,%mm7
+ pxor %mm1,%mm0
psrlq $5,%mm5
pxor %mm6,%mm7
+ pand %mm0,%mm2
psllq $6,%mm6
pxor %mm5,%mm7
- subl $8,%esp
+ pxor %mm1,%mm2
+ pxor %mm7,%mm6
+ movq (%esp),%mm5
+ paddq %mm6,%mm2
+ movq 8(%esp),%mm6
+ movq %mm4,%mm1
+ movq -24(%edx),%mm7
+ pxor %mm6,%mm5
+ psrlq $14,%mm1
+ movq %mm4,56(%esp)
+ pand %mm4,%mm5
+ psllq $23,%mm4
+ paddq %mm3,%mm2
+ movq %mm1,%mm3
+ psrlq $4,%mm1
+ pxor %mm6,%mm5
+ pxor %mm4,%mm3
+ psllq $23,%mm4
+ pxor %mm1,%mm3
+ movq %mm2,24(%esp)
+ paddq %mm5,%mm7
+ pxor %mm4,%mm3
+ psrlq $23,%mm1
+ paddq 16(%esp),%mm7
+ pxor %mm1,%mm3
+ psllq $4,%mm4
+ pxor %mm4,%mm3
+ movq 48(%esp),%mm4
+ paddq %mm7,%mm3
+ movq %mm2,%mm5
+ psrlq $28,%mm5
+ paddq %mm3,%mm4
+ movq %mm2,%mm6
+ movq %mm5,%mm7
+ psllq $25,%mm6
+ movq 32(%esp),%mm1
+ psrlq $6,%mm5
pxor %mm6,%mm7
+ psllq $5,%mm6
+ pxor %mm5,%mm7
+ pxor %mm1,%mm2
+ psrlq $5,%mm5
+ pxor %mm6,%mm7
+ pand %mm2,%mm0
+ psllq $6,%mm6
+ pxor %mm5,%mm7
+ pxor %mm1,%mm0
+ pxor %mm7,%mm6
+ movq 56(%esp),%mm5
+ paddq %mm6,%mm0
+ movq (%esp),%mm6
+ movdqa %xmm1,-32(%edx)
+ movdqa %xmm2,32(%edx)
+ movdqa 112(%ebp),%xmm2
+ movdqa (%edx),%xmm0
+ paddq %xmm7,%xmm2
+ movq %mm4,%mm1
+ movq -16(%edx),%mm7
+ pxor %mm6,%mm5
+ psrlq $14,%mm1
+ movq %mm4,48(%esp)
+ pand %mm4,%mm5
+ psllq $23,%mm4
+ paddq %mm3,%mm0
+ movq %mm1,%mm3
+ psrlq $4,%mm1
+ pxor %mm6,%mm5
+ pxor %mm4,%mm3
+ psllq $23,%mm4
+ pxor %mm1,%mm3
+ movq %mm0,16(%esp)
+ paddq %mm5,%mm7
+ pxor %mm4,%mm3
+ psrlq $23,%mm1
+ paddq 8(%esp),%mm7
+ pxor %mm1,%mm3
+ psllq $4,%mm4
+ pxor %mm4,%mm3
+ movq 40(%esp),%mm4
+ paddq %mm7,%mm3
movq %mm0,%mm5
- por %mm2,%mm0
- movq 88(%esp),%mm6
- pand %mm2,%mm5
- pand %mm1,%mm0
- movq 192(%esp),%mm2
- por %mm0,%mm5
+ psrlq $28,%mm5
+ paddq %mm3,%mm4
+ movq %mm0,%mm6
+ movq %mm5,%mm7
+ psllq $25,%mm6
+ movq 24(%esp),%mm1
+ psrlq $6,%mm5
+ pxor %mm6,%mm7
+ psllq $5,%mm6
+ pxor %mm5,%mm7
+ pxor %mm1,%mm0
+ psrlq $5,%mm5
+ pxor %mm6,%mm7
+ pand %mm0,%mm2
+ psllq $6,%mm6
+ pxor %mm5,%mm7
+ pxor %mm1,%mm2
+ pxor %mm7,%mm6
+ movq 48(%esp),%mm5
+ paddq %mm6,%mm2
+ movq 56(%esp),%mm6
+ movq %mm4,%mm1
+ movq -8(%edx),%mm7
+ pxor %mm6,%mm5
+ psrlq $14,%mm1
+ movq %mm4,40(%esp)
+ pand %mm4,%mm5
+ psllq $23,%mm4
+ paddq %mm3,%mm2
+ movq %mm1,%mm3
+ psrlq $4,%mm1
+ pxor %mm6,%mm5
+ pxor %mm4,%mm3
+ psllq $23,%mm4
+ pxor %mm1,%mm3
+ movq %mm2,8(%esp)
paddq %mm5,%mm7
- movq %mm3,%mm0
- movb (%ebp),%dl
- paddq %mm7,%mm0
- addl $8,%ebp
- cmpb $23,%dl
- jne .L00516_79_sse2
- movq 8(%esp),%mm1
- movq 16(%esp),%mm2
- movq 24(%esp),%mm3
+ pxor %mm4,%mm3
+ psrlq $23,%mm1
+ paddq (%esp),%mm7
+ pxor %mm1,%mm3
+ psllq $4,%mm4
+ pxor %mm4,%mm3
+ movq 32(%esp),%mm4
+ paddq %mm7,%mm3
+ movq %mm2,%mm5
+ psrlq $28,%mm5
+ paddq %mm3,%mm4
+ movq %mm2,%mm6
+ movq %mm5,%mm7
+ psllq $25,%mm6
+ movq 16(%esp),%mm1
+ psrlq $6,%mm5
+ pxor %mm6,%mm7
+ psllq $5,%mm6
+ pxor %mm5,%mm7
+ pxor %mm1,%mm2
+ psrlq $5,%mm5
+ pxor %mm6,%mm7
+ pand %mm2,%mm0
+ psllq $6,%mm6
+ pxor %mm5,%mm7
+ pxor %mm1,%mm0
+ pxor %mm7,%mm6
movq 40(%esp),%mm5
+ paddq %mm6,%mm0
movq 48(%esp),%mm6
+ movdqa %xmm2,-16(%edx)
+ movq 8(%esp),%mm1
+ paddq %mm3,%mm0
+ movq 24(%esp),%mm3
movq 56(%esp),%mm7
+ pxor %mm1,%mm2
paddq (%esi),%mm0
paddq 8(%esi),%mm1
paddq 16(%esi),%mm2
@@ -286,12 +2280,10 @@ sha512_block_data_order:
movq %mm5,40(%esi)
movq %mm6,48(%esi)
movq %mm7,56(%esi)
- addl $640,%esp
- subl $640,%ebp
- cmpl 88(%esp),%edi
- jb .L003loop_sse2
+ cmpl %eax,%edi
+ jb .L007loop_ssse3
+ movl 76(%edx),%esp
emms
- movl 92(%esp),%esp
popl %edi
popl %esi
popl %ebx
@@ -402,7 +2394,7 @@ sha512_block_data_order:
movl $16,%ecx
.long 2784229001
.align 16
-.L00600_15_x86:
+.L00900_15_x86:
movl 40(%esp),%ecx
movl 44(%esp),%edx
movl %ecx,%esi
@@ -509,9 +2501,9 @@ sha512_block_data_order:
subl $8,%esp
leal 8(%ebp),%ebp
cmpb $148,%dl
- jne .L00600_15_x86
+ jne .L00900_15_x86
.align 16
-.L00716_79_x86:
+.L01016_79_x86:
movl 312(%esp),%ecx
movl 316(%esp),%edx
movl %ecx,%esi
@@ -684,7 +2676,7 @@ sha512_block_data_order:
subl $8,%esp
leal 8(%ebp),%ebp
cmpb $23,%dl
- jne .L00716_79_x86
+ jne .L01016_79_x86
movl 840(%esp),%esi
movl 844(%esp),%edi
movl (%esi),%eax
@@ -827,10 +2819,12 @@ sha512_block_data_order:
.long 4234509866,1501505948
.long 987167468,1607167915
.long 1246189591,1816402316
+.long 67438087,66051
+.long 202182159,134810123
.size sha512_block_data_order,.-.L_sha512_block_data_order_begin
.byte 83,72,65,53,49,50,32,98,108,111,99,107,32,116,114,97
.byte 110,115,102,111,114,109,32,102,111,114,32,120,56,54,44,32
.byte 67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97
.byte 112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103
.byte 62,0
-.comm OPENSSL_ia32cap_P,8,4
+.comm OPENSSL_ia32cap_P,16,4
diff --git a/secure/lib/libcrypto/i386/vpaes-x86.s b/secure/lib/libcrypto/i386/vpaes-x86.s
index 7264297..e1dda0f 100644
--- a/secure/lib/libcrypto/i386/vpaes-x86.s
+++ b/secure/lib/libcrypto/i386/vpaes-x86.s
@@ -74,33 +74,33 @@ _vpaes_encrypt_core:
movdqa %xmm6,%xmm1
movdqa (%ebp),%xmm2
pandn %xmm0,%xmm1
- movdqu (%edx),%xmm5
- psrld $4,%xmm1
pand %xmm6,%xmm0
+ movdqu (%edx),%xmm5
.byte 102,15,56,0,208
movdqa 16(%ebp),%xmm0
-.byte 102,15,56,0,193
pxor %xmm5,%xmm2
- pxor %xmm2,%xmm0
+ psrld $4,%xmm1
addl $16,%edx
+.byte 102,15,56,0,193
leal 192(%ebp),%ebx
+ pxor %xmm2,%xmm0
jmp .L000enc_entry
.align 16
.L001enc_loop:
movdqa 32(%ebp),%xmm4
-.byte 102,15,56,0,226
- pxor %xmm5,%xmm4
movdqa 48(%ebp),%xmm0
+.byte 102,15,56,0,226
.byte 102,15,56,0,195
- pxor %xmm4,%xmm0
+ pxor %xmm5,%xmm4
movdqa 64(%ebp),%xmm5
-.byte 102,15,56,0,234
+ pxor %xmm4,%xmm0
movdqa -64(%ebx,%ecx,1),%xmm1
+.byte 102,15,56,0,234
movdqa 80(%ebp),%xmm2
-.byte 102,15,56,0,211
- pxor %xmm5,%xmm2
movdqa (%ebx,%ecx,1),%xmm4
+.byte 102,15,56,0,211
movdqa %xmm0,%xmm3
+ pxor %xmm5,%xmm2
.byte 102,15,56,0,193
addl $16,%edx
pxor %xmm2,%xmm0
@@ -109,28 +109,28 @@ _vpaes_encrypt_core:
pxor %xmm0,%xmm3
.byte 102,15,56,0,193
andl $48,%ecx
- pxor %xmm3,%xmm0
subl $1,%eax
+ pxor %xmm3,%xmm0
.L000enc_entry:
movdqa %xmm6,%xmm1
+ movdqa -32(%ebp),%xmm5
pandn %xmm0,%xmm1
psrld $4,%xmm1
pand %xmm6,%xmm0
- movdqa -32(%ebp),%xmm5
.byte 102,15,56,0,232
- pxor %xmm1,%xmm0
movdqa %xmm7,%xmm3
+ pxor %xmm1,%xmm0
.byte 102,15,56,0,217
- pxor %xmm5,%xmm3
movdqa %xmm7,%xmm4
+ pxor %xmm5,%xmm3
.byte 102,15,56,0,224
- pxor %xmm5,%xmm4
movdqa %xmm7,%xmm2
+ pxor %xmm5,%xmm4
.byte 102,15,56,0,211
- pxor %xmm0,%xmm2
movdqa %xmm7,%xmm3
- movdqu (%edx),%xmm5
+ pxor %xmm0,%xmm2
.byte 102,15,56,0,220
+ movdqu (%edx),%xmm5
pxor %xmm1,%xmm3
jnz .L001enc_loop
movdqa 96(%ebp),%xmm4
@@ -146,8 +146,8 @@ _vpaes_encrypt_core:
.type _vpaes_decrypt_core,@function
.align 16
_vpaes_decrypt_core:
- movl 240(%edx),%eax
leal 608(%ebp),%ebx
+ movl 240(%edx),%eax
movdqa %xmm6,%xmm1
movdqa -64(%ebx),%xmm2
pandn %xmm0,%xmm1
@@ -170,56 +170,56 @@ _vpaes_decrypt_core:
.align 16
.L003dec_loop:
movdqa -32(%ebx),%xmm4
+ movdqa -16(%ebx),%xmm1
.byte 102,15,56,0,226
- pxor %xmm0,%xmm4
- movdqa -16(%ebx),%xmm0
-.byte 102,15,56,0,195
+.byte 102,15,56,0,203
pxor %xmm4,%xmm0
- addl $16,%edx
-.byte 102,15,56,0,197
movdqa (%ebx),%xmm4
+ pxor %xmm1,%xmm0
+ movdqa 16(%ebx),%xmm1
.byte 102,15,56,0,226
- pxor %xmm0,%xmm4
- movdqa 16(%ebx),%xmm0
-.byte 102,15,56,0,195
- pxor %xmm4,%xmm0
- subl $1,%eax
.byte 102,15,56,0,197
+.byte 102,15,56,0,203
+ pxor %xmm4,%xmm0
movdqa 32(%ebx),%xmm4
+ pxor %xmm1,%xmm0
+ movdqa 48(%ebx),%xmm1
.byte 102,15,56,0,226
- pxor %xmm0,%xmm4
- movdqa 48(%ebx),%xmm0
-.byte 102,15,56,0,195
- pxor %xmm4,%xmm0
.byte 102,15,56,0,197
+.byte 102,15,56,0,203
+ pxor %xmm4,%xmm0
movdqa 64(%ebx),%xmm4
+ pxor %xmm1,%xmm0
+ movdqa 80(%ebx),%xmm1
.byte 102,15,56,0,226
- pxor %xmm0,%xmm4
- movdqa 80(%ebx),%xmm0
-.byte 102,15,56,0,195
+.byte 102,15,56,0,197
+.byte 102,15,56,0,203
pxor %xmm4,%xmm0
+ addl $16,%edx
.byte 102,15,58,15,237,12
+ pxor %xmm1,%xmm0
+ subl $1,%eax
.L002dec_entry:
movdqa %xmm6,%xmm1
+ movdqa -32(%ebp),%xmm2
pandn %xmm0,%xmm1
- psrld $4,%xmm1
pand %xmm6,%xmm0
- movdqa -32(%ebp),%xmm2
+ psrld $4,%xmm1
.byte 102,15,56,0,208
- pxor %xmm1,%xmm0
movdqa %xmm7,%xmm3
+ pxor %xmm1,%xmm0
.byte 102,15,56,0,217
- pxor %xmm2,%xmm3
movdqa %xmm7,%xmm4
+ pxor %xmm2,%xmm3
.byte 102,15,56,0,224
pxor %xmm2,%xmm4
movdqa %xmm7,%xmm2
.byte 102,15,56,0,211
- pxor %xmm0,%xmm2
movdqa %xmm7,%xmm3
+ pxor %xmm0,%xmm2
.byte 102,15,56,0,220
- pxor %xmm1,%xmm3
movdqu (%edx),%xmm0
+ pxor %xmm1,%xmm3
jnz .L003dec_loop
movdqa 96(%ebx),%xmm4
.byte 102,15,56,0,226
@@ -328,12 +328,12 @@ _vpaes_schedule_core:
.type _vpaes_schedule_192_smear,@function
.align 16
_vpaes_schedule_192_smear:
- pshufd $128,%xmm6,%xmm0
- pxor %xmm0,%xmm6
+ pshufd $128,%xmm6,%xmm1
pshufd $254,%xmm7,%xmm0
+ pxor %xmm1,%xmm6
+ pxor %xmm1,%xmm1
pxor %xmm0,%xmm6
movdqa %xmm6,%xmm0
- pxor %xmm1,%xmm1
movhlps %xmm1,%xmm6
ret
.size _vpaes_schedule_192_smear,.-_vpaes_schedule_192_smear
diff --git a/secure/lib/libcrypto/i386/wp-mmx.s b/secure/lib/libcrypto/i386/wp-mmx.s
index c0a42fd..6ceae96 100644
--- a/secure/lib/libcrypto/i386/wp-mmx.s
+++ b/secure/lib/libcrypto/i386/wp-mmx.s
@@ -67,228 +67,230 @@ whirlpool_block_mmx:
movq 4096(%ebp,%esi,8),%mm0
movl (%esp),%eax
movl 4(%esp),%ebx
- movb %al,%cl
- movb %ah,%dl
+ movzbl %al,%ecx
+ movzbl %ah,%edx
+ shrl $16,%eax
leal (%ecx,%ecx,1),%esi
+ movzbl %al,%ecx
leal (%edx,%edx,1),%edi
- shrl $16,%eax
+ movzbl %ah,%edx
pxor (%ebp,%esi,8),%mm0
movq 7(%ebp,%edi,8),%mm1
- movb %al,%cl
- movb %ah,%dl
movl 8(%esp),%eax
leal (%ecx,%ecx,1),%esi
+ movzbl %bl,%ecx
leal (%edx,%edx,1),%edi
+ movzbl %bh,%edx
movq 6(%ebp,%esi,8),%mm2
movq 5(%ebp,%edi,8),%mm3
- movb %bl,%cl
- movb %bh,%dl
+ shrl $16,%ebx
leal (%ecx,%ecx,1),%esi
+ movzbl %bl,%ecx
leal (%edx,%edx,1),%edi
- shrl $16,%ebx
+ movzbl %bh,%edx
movq 4(%ebp,%esi,8),%mm4
movq 3(%ebp,%edi,8),%mm5
- movb %bl,%cl
- movb %bh,%dl
movl 12(%esp),%ebx
leal (%ecx,%ecx,1),%esi
+ movzbl %al,%ecx
leal (%edx,%edx,1),%edi
+ movzbl %ah,%edx
movq 2(%ebp,%esi,8),%mm6
movq 1(%ebp,%edi,8),%mm7
- movb %al,%cl
- movb %ah,%dl
+ shrl $16,%eax
leal (%ecx,%ecx,1),%esi
+ movzbl %al,%ecx
leal (%edx,%edx,1),%edi
- shrl $16,%eax
+ movzbl %ah,%edx
pxor (%ebp,%esi,8),%mm1
pxor 7(%ebp,%edi,8),%mm2
- movb %al,%cl
- movb %ah,%dl
movl 16(%esp),%eax
leal (%ecx,%ecx,1),%esi
+ movzbl %bl,%ecx
leal (%edx,%edx,1),%edi
+ movzbl %bh,%edx
pxor 6(%ebp,%esi,8),%mm3
pxor 5(%ebp,%edi,8),%mm4
- movb %bl,%cl
- movb %bh,%dl
+ shrl $16,%ebx
leal (%ecx,%ecx,1),%esi
+ movzbl %bl,%ecx
leal (%edx,%edx,1),%edi
- shrl $16,%ebx
+ movzbl %bh,%edx
pxor 4(%ebp,%esi,8),%mm5
pxor 3(%ebp,%edi,8),%mm6
- movb %bl,%cl
- movb %bh,%dl
movl 20(%esp),%ebx
leal (%ecx,%ecx,1),%esi
+ movzbl %al,%ecx
leal (%edx,%edx,1),%edi
+ movzbl %ah,%edx
pxor 2(%ebp,%esi,8),%mm7
pxor 1(%ebp,%edi,8),%mm0
- movb %al,%cl
- movb %ah,%dl
+ shrl $16,%eax
leal (%ecx,%ecx,1),%esi
+ movzbl %al,%ecx
leal (%edx,%edx,1),%edi
- shrl $16,%eax
+ movzbl %ah,%edx
pxor (%ebp,%esi,8),%mm2
pxor 7(%ebp,%edi,8),%mm3
- movb %al,%cl
- movb %ah,%dl
movl 24(%esp),%eax
leal (%ecx,%ecx,1),%esi
+ movzbl %bl,%ecx
leal (%edx,%edx,1),%edi
+ movzbl %bh,%edx
pxor 6(%ebp,%esi,8),%mm4
pxor 5(%ebp,%edi,8),%mm5
- movb %bl,%cl
- movb %bh,%dl
+ shrl $16,%ebx
leal (%ecx,%ecx,1),%esi
+ movzbl %bl,%ecx
leal (%edx,%edx,1),%edi
- shrl $16,%ebx
+ movzbl %bh,%edx
pxor 4(%ebp,%esi,8),%mm6
pxor 3(%ebp,%edi,8),%mm7
- movb %bl,%cl
- movb %bh,%dl
movl 28(%esp),%ebx
leal (%ecx,%ecx,1),%esi
+ movzbl %al,%ecx
leal (%edx,%edx,1),%edi
+ movzbl %ah,%edx
pxor 2(%ebp,%esi,8),%mm0
pxor 1(%ebp,%edi,8),%mm1
- movb %al,%cl
- movb %ah,%dl
+ shrl $16,%eax
leal (%ecx,%ecx,1),%esi
+ movzbl %al,%ecx
leal (%edx,%edx,1),%edi
- shrl $16,%eax
+ movzbl %ah,%edx
pxor (%ebp,%esi,8),%mm3
pxor 7(%ebp,%edi,8),%mm4
- movb %al,%cl
- movb %ah,%dl
movl 32(%esp),%eax
leal (%ecx,%ecx,1),%esi
+ movzbl %bl,%ecx
leal (%edx,%edx,1),%edi
+ movzbl %bh,%edx
pxor 6(%ebp,%esi,8),%mm5
pxor 5(%ebp,%edi,8),%mm6
- movb %bl,%cl
- movb %bh,%dl
+ shrl $16,%ebx
leal (%ecx,%ecx,1),%esi
+ movzbl %bl,%ecx
leal (%edx,%edx,1),%edi
- shrl $16,%ebx
+ movzbl %bh,%edx
pxor 4(%ebp,%esi,8),%mm7
pxor 3(%ebp,%edi,8),%mm0
- movb %bl,%cl
- movb %bh,%dl
movl 36(%esp),%ebx
leal (%ecx,%ecx,1),%esi
+ movzbl %al,%ecx
leal (%edx,%edx,1),%edi
+ movzbl %ah,%edx
pxor 2(%ebp,%esi,8),%mm1
pxor 1(%ebp,%edi,8),%mm2
- movb %al,%cl
- movb %ah,%dl
+ shrl $16,%eax
leal (%ecx,%ecx,1),%esi
+ movzbl %al,%ecx
leal (%edx,%edx,1),%edi
- shrl $16,%eax
+ movzbl %ah,%edx
pxor (%ebp,%esi,8),%mm4
pxor 7(%ebp,%edi,8),%mm5
- movb %al,%cl
- movb %ah,%dl
movl 40(%esp),%eax
leal (%ecx,%ecx,1),%esi
+ movzbl %bl,%ecx
leal (%edx,%edx,1),%edi
+ movzbl %bh,%edx
pxor 6(%ebp,%esi,8),%mm6
pxor 5(%ebp,%edi,8),%mm7
- movb %bl,%cl
- movb %bh,%dl
+ shrl $16,%ebx
leal (%ecx,%ecx,1),%esi
+ movzbl %bl,%ecx
leal (%edx,%edx,1),%edi
- shrl $16,%ebx
+ movzbl %bh,%edx
pxor 4(%ebp,%esi,8),%mm0
pxor 3(%ebp,%edi,8),%mm1
- movb %bl,%cl
- movb %bh,%dl
movl 44(%esp),%ebx
leal (%ecx,%ecx,1),%esi
+ movzbl %al,%ecx
leal (%edx,%edx,1),%edi
+ movzbl %ah,%edx
pxor 2(%ebp,%esi,8),%mm2
pxor 1(%ebp,%edi,8),%mm3
- movb %al,%cl
- movb %ah,%dl
+ shrl $16,%eax
leal (%ecx,%ecx,1),%esi
+ movzbl %al,%ecx
leal (%edx,%edx,1),%edi
- shrl $16,%eax
+ movzbl %ah,%edx
pxor (%ebp,%esi,8),%mm5
pxor 7(%ebp,%edi,8),%mm6
- movb %al,%cl
- movb %ah,%dl
movl 48(%esp),%eax
leal (%ecx,%ecx,1),%esi
+ movzbl %bl,%ecx
leal (%edx,%edx,1),%edi
+ movzbl %bh,%edx
pxor 6(%ebp,%esi,8),%mm7
pxor 5(%ebp,%edi,8),%mm0
- movb %bl,%cl
- movb %bh,%dl
+ shrl $16,%ebx
leal (%ecx,%ecx,1),%esi
+ movzbl %bl,%ecx
leal (%edx,%edx,1),%edi
- shrl $16,%ebx
+ movzbl %bh,%edx
pxor 4(%ebp,%esi,8),%mm1
pxor 3(%ebp,%edi,8),%mm2
- movb %bl,%cl
- movb %bh,%dl
movl 52(%esp),%ebx
leal (%ecx,%ecx,1),%esi
+ movzbl %al,%ecx
leal (%edx,%edx,1),%edi
+ movzbl %ah,%edx
pxor 2(%ebp,%esi,8),%mm3
pxor 1(%ebp,%edi,8),%mm4
- movb %al,%cl
- movb %ah,%dl
+ shrl $16,%eax
leal (%ecx,%ecx,1),%esi
+ movzbl %al,%ecx
leal (%edx,%edx,1),%edi
- shrl $16,%eax
+ movzbl %ah,%edx
pxor (%ebp,%esi,8),%mm6
pxor 7(%ebp,%edi,8),%mm7
- movb %al,%cl
- movb %ah,%dl
movl 56(%esp),%eax
leal (%ecx,%ecx,1),%esi
+ movzbl %bl,%ecx
leal (%edx,%edx,1),%edi
+ movzbl %bh,%edx
pxor 6(%ebp,%esi,8),%mm0
pxor 5(%ebp,%edi,8),%mm1
- movb %bl,%cl
- movb %bh,%dl
+ shrl $16,%ebx
leal (%ecx,%ecx,1),%esi
+ movzbl %bl,%ecx
leal (%edx,%edx,1),%edi
- shrl $16,%ebx
+ movzbl %bh,%edx
pxor 4(%ebp,%esi,8),%mm2
pxor 3(%ebp,%edi,8),%mm3
- movb %bl,%cl
- movb %bh,%dl
movl 60(%esp),%ebx
leal (%ecx,%ecx,1),%esi
+ movzbl %al,%ecx
leal (%edx,%edx,1),%edi
+ movzbl %ah,%edx
pxor 2(%ebp,%esi,8),%mm4
pxor 1(%ebp,%edi,8),%mm5
- movb %al,%cl
- movb %ah,%dl
+ shrl $16,%eax
leal (%ecx,%ecx,1),%esi
+ movzbl %al,%ecx
leal (%edx,%edx,1),%edi
- shrl $16,%eax
+ movzbl %ah,%edx
pxor (%ebp,%esi,8),%mm7
pxor 7(%ebp,%edi,8),%mm0
- movb %al,%cl
- movb %ah,%dl
movl 64(%esp),%eax
leal (%ecx,%ecx,1),%esi
+ movzbl %bl,%ecx
leal (%edx,%edx,1),%edi
+ movzbl %bh,%edx
pxor 6(%ebp,%esi,8),%mm1
pxor 5(%ebp,%edi,8),%mm2
- movb %bl,%cl
- movb %bh,%dl
+ shrl $16,%ebx
leal (%ecx,%ecx,1),%esi
+ movzbl %bl,%ecx
leal (%edx,%edx,1),%edi
- shrl $16,%ebx
+ movzbl %bh,%edx
pxor 4(%ebp,%esi,8),%mm3
pxor 3(%ebp,%edi,8),%mm4
- movb %bl,%cl
- movb %bh,%dl
movl 68(%esp),%ebx
leal (%ecx,%ecx,1),%esi
+ movzbl %al,%ecx
leal (%edx,%edx,1),%edi
+ movzbl %ah,%edx
pxor 2(%ebp,%esi,8),%mm5
pxor 1(%ebp,%edi,8),%mm6
movq %mm0,(%esp)
@@ -299,226 +301,226 @@ whirlpool_block_mmx:
movq %mm5,40(%esp)
movq %mm6,48(%esp)
movq %mm7,56(%esp)
- movb %al,%cl
- movb %ah,%dl
+ shrl $16,%eax
leal (%ecx,%ecx,1),%esi
+ movzbl %al,%ecx
leal (%edx,%edx,1),%edi
- shrl $16,%eax
+ movzbl %ah,%edx
pxor (%ebp,%esi,8),%mm0
pxor 7(%ebp,%edi,8),%mm1
- movb %al,%cl
- movb %ah,%dl
movl 72(%esp),%eax
leal (%ecx,%ecx,1),%esi
+ movzbl %bl,%ecx
leal (%edx,%edx,1),%edi
+ movzbl %bh,%edx
pxor 6(%ebp,%esi,8),%mm2
pxor 5(%ebp,%edi,8),%mm3
- movb %bl,%cl
- movb %bh,%dl
+ shrl $16,%ebx
leal (%ecx,%ecx,1),%esi
+ movzbl %bl,%ecx
leal (%edx,%edx,1),%edi
- shrl $16,%ebx
+ movzbl %bh,%edx
pxor 4(%ebp,%esi,8),%mm4
pxor 3(%ebp,%edi,8),%mm5
- movb %bl,%cl
- movb %bh,%dl
movl 76(%esp),%ebx
leal (%ecx,%ecx,1),%esi
+ movzbl %al,%ecx
leal (%edx,%edx,1),%edi
+ movzbl %ah,%edx
pxor 2(%ebp,%esi,8),%mm6
pxor 1(%ebp,%edi,8),%mm7
- movb %al,%cl
- movb %ah,%dl
+ shrl $16,%eax
leal (%ecx,%ecx,1),%esi
+ movzbl %al,%ecx
leal (%edx,%edx,1),%edi
- shrl $16,%eax
+ movzbl %ah,%edx
pxor (%ebp,%esi,8),%mm1
pxor 7(%ebp,%edi,8),%mm2
- movb %al,%cl
- movb %ah,%dl
movl 80(%esp),%eax
leal (%ecx,%ecx,1),%esi
+ movzbl %bl,%ecx
leal (%edx,%edx,1),%edi
+ movzbl %bh,%edx
pxor 6(%ebp,%esi,8),%mm3
pxor 5(%ebp,%edi,8),%mm4
- movb %bl,%cl
- movb %bh,%dl
+ shrl $16,%ebx
leal (%ecx,%ecx,1),%esi
+ movzbl %bl,%ecx
leal (%edx,%edx,1),%edi
- shrl $16,%ebx
+ movzbl %bh,%edx
pxor 4(%ebp,%esi,8),%mm5
pxor 3(%ebp,%edi,8),%mm6
- movb %bl,%cl
- movb %bh,%dl
movl 84(%esp),%ebx
leal (%ecx,%ecx,1),%esi
+ movzbl %al,%ecx
leal (%edx,%edx,1),%edi
+ movzbl %ah,%edx
pxor 2(%ebp,%esi,8),%mm7
pxor 1(%ebp,%edi,8),%mm0
- movb %al,%cl
- movb %ah,%dl
+ shrl $16,%eax
leal (%ecx,%ecx,1),%esi
+ movzbl %al,%ecx
leal (%edx,%edx,1),%edi
- shrl $16,%eax
+ movzbl %ah,%edx
pxor (%ebp,%esi,8),%mm2
pxor 7(%ebp,%edi,8),%mm3
- movb %al,%cl
- movb %ah,%dl
movl 88(%esp),%eax
leal (%ecx,%ecx,1),%esi
+ movzbl %bl,%ecx
leal (%edx,%edx,1),%edi
+ movzbl %bh,%edx
pxor 6(%ebp,%esi,8),%mm4
pxor 5(%ebp,%edi,8),%mm5
- movb %bl,%cl
- movb %bh,%dl
+ shrl $16,%ebx
leal (%ecx,%ecx,1),%esi
+ movzbl %bl,%ecx
leal (%edx,%edx,1),%edi
- shrl $16,%ebx
+ movzbl %bh,%edx
pxor 4(%ebp,%esi,8),%mm6
pxor 3(%ebp,%edi,8),%mm7
- movb %bl,%cl
- movb %bh,%dl
movl 92(%esp),%ebx
leal (%ecx,%ecx,1),%esi
+ movzbl %al,%ecx
leal (%edx,%edx,1),%edi
+ movzbl %ah,%edx
pxor 2(%ebp,%esi,8),%mm0
pxor 1(%ebp,%edi,8),%mm1
- movb %al,%cl
- movb %ah,%dl
+ shrl $16,%eax
leal (%ecx,%ecx,1),%esi
+ movzbl %al,%ecx
leal (%edx,%edx,1),%edi
- shrl $16,%eax
+ movzbl %ah,%edx
pxor (%ebp,%esi,8),%mm3
pxor 7(%ebp,%edi,8),%mm4
- movb %al,%cl
- movb %ah,%dl
movl 96(%esp),%eax
leal (%ecx,%ecx,1),%esi
+ movzbl %bl,%ecx
leal (%edx,%edx,1),%edi
+ movzbl %bh,%edx
pxor 6(%ebp,%esi,8),%mm5
pxor 5(%ebp,%edi,8),%mm6
- movb %bl,%cl
- movb %bh,%dl
+ shrl $16,%ebx
leal (%ecx,%ecx,1),%esi
+ movzbl %bl,%ecx
leal (%edx,%edx,1),%edi
- shrl $16,%ebx
+ movzbl %bh,%edx
pxor 4(%ebp,%esi,8),%mm7
pxor 3(%ebp,%edi,8),%mm0
- movb %bl,%cl
- movb %bh,%dl
movl 100(%esp),%ebx
leal (%ecx,%ecx,1),%esi
+ movzbl %al,%ecx
leal (%edx,%edx,1),%edi
+ movzbl %ah,%edx
pxor 2(%ebp,%esi,8),%mm1
pxor 1(%ebp,%edi,8),%mm2
- movb %al,%cl
- movb %ah,%dl
+ shrl $16,%eax
leal (%ecx,%ecx,1),%esi
+ movzbl %al,%ecx
leal (%edx,%edx,1),%edi
- shrl $16,%eax
+ movzbl %ah,%edx
pxor (%ebp,%esi,8),%mm4
pxor 7(%ebp,%edi,8),%mm5
- movb %al,%cl
- movb %ah,%dl
movl 104(%esp),%eax
leal (%ecx,%ecx,1),%esi
+ movzbl %bl,%ecx
leal (%edx,%edx,1),%edi
+ movzbl %bh,%edx
pxor 6(%ebp,%esi,8),%mm6
pxor 5(%ebp,%edi,8),%mm7
- movb %bl,%cl
- movb %bh,%dl
+ shrl $16,%ebx
leal (%ecx,%ecx,1),%esi
+ movzbl %bl,%ecx
leal (%edx,%edx,1),%edi
- shrl $16,%ebx
+ movzbl %bh,%edx
pxor 4(%ebp,%esi,8),%mm0
pxor 3(%ebp,%edi,8),%mm1
- movb %bl,%cl
- movb %bh,%dl
movl 108(%esp),%ebx
leal (%ecx,%ecx,1),%esi
+ movzbl %al,%ecx
leal (%edx,%edx,1),%edi
+ movzbl %ah,%edx
pxor 2(%ebp,%esi,8),%mm2
pxor 1(%ebp,%edi,8),%mm3
- movb %al,%cl
- movb %ah,%dl
+ shrl $16,%eax
leal (%ecx,%ecx,1),%esi
+ movzbl %al,%ecx
leal (%edx,%edx,1),%edi
- shrl $16,%eax
+ movzbl %ah,%edx
pxor (%ebp,%esi,8),%mm5
pxor 7(%ebp,%edi,8),%mm6
- movb %al,%cl
- movb %ah,%dl
movl 112(%esp),%eax
leal (%ecx,%ecx,1),%esi
+ movzbl %bl,%ecx
leal (%edx,%edx,1),%edi
+ movzbl %bh,%edx
pxor 6(%ebp,%esi,8),%mm7
pxor 5(%ebp,%edi,8),%mm0
- movb %bl,%cl
- movb %bh,%dl
+ shrl $16,%ebx
leal (%ecx,%ecx,1),%esi
+ movzbl %bl,%ecx
leal (%edx,%edx,1),%edi
- shrl $16,%ebx
+ movzbl %bh,%edx
pxor 4(%ebp,%esi,8),%mm1
pxor 3(%ebp,%edi,8),%mm2
- movb %bl,%cl
- movb %bh,%dl
movl 116(%esp),%ebx
leal (%ecx,%ecx,1),%esi
+ movzbl %al,%ecx
leal (%edx,%edx,1),%edi
+ movzbl %ah,%edx
pxor 2(%ebp,%esi,8),%mm3
pxor 1(%ebp,%edi,8),%mm4
- movb %al,%cl
- movb %ah,%dl
+ shrl $16,%eax
leal (%ecx,%ecx,1),%esi
+ movzbl %al,%ecx
leal (%edx,%edx,1),%edi
- shrl $16,%eax
+ movzbl %ah,%edx
pxor (%ebp,%esi,8),%mm6
pxor 7(%ebp,%edi,8),%mm7
- movb %al,%cl
- movb %ah,%dl
movl 120(%esp),%eax
leal (%ecx,%ecx,1),%esi
+ movzbl %bl,%ecx
leal (%edx,%edx,1),%edi
+ movzbl %bh,%edx
pxor 6(%ebp,%esi,8),%mm0
pxor 5(%ebp,%edi,8),%mm1
- movb %bl,%cl
- movb %bh,%dl
+ shrl $16,%ebx
leal (%ecx,%ecx,1),%esi
+ movzbl %bl,%ecx
leal (%edx,%edx,1),%edi
- shrl $16,%ebx
+ movzbl %bh,%edx
pxor 4(%ebp,%esi,8),%mm2
pxor 3(%ebp,%edi,8),%mm3
- movb %bl,%cl
- movb %bh,%dl
movl 124(%esp),%ebx
leal (%ecx,%ecx,1),%esi
+ movzbl %al,%ecx
leal (%edx,%edx,1),%edi
+ movzbl %ah,%edx
pxor 2(%ebp,%esi,8),%mm4
pxor 1(%ebp,%edi,8),%mm5
- movb %al,%cl
- movb %ah,%dl
+ shrl $16,%eax
leal (%ecx,%ecx,1),%esi
+ movzbl %al,%ecx
leal (%edx,%edx,1),%edi
- shrl $16,%eax
+ movzbl %ah,%edx
pxor (%ebp,%esi,8),%mm7
pxor 7(%ebp,%edi,8),%mm0
- movb %al,%cl
- movb %ah,%dl
leal (%ecx,%ecx,1),%esi
+ movzbl %bl,%ecx
leal (%edx,%edx,1),%edi
+ movzbl %bh,%edx
pxor 6(%ebp,%esi,8),%mm1
pxor 5(%ebp,%edi,8),%mm2
- movb %bl,%cl
- movb %bh,%dl
+ shrl $16,%ebx
leal (%ecx,%ecx,1),%esi
+ movzbl %bl,%ecx
leal (%edx,%edx,1),%edi
- shrl $16,%ebx
+ movzbl %bh,%edx
pxor 4(%ebp,%esi,8),%mm3
pxor 3(%ebp,%edi,8),%mm4
- movb %bl,%cl
- movb %bh,%dl
leal (%ecx,%ecx,1),%esi
+ movzbl %al,%ecx
leal (%edx,%edx,1),%edi
+ movzbl %ah,%edx
pxor 2(%ebp,%esi,8),%mm5
pxor 1(%ebp,%edi,8),%mm6
leal 128(%esp),%ebx
diff --git a/secure/lib/libcrypto/i386/x86-gf2m.s b/secure/lib/libcrypto/i386/x86-gf2m.s
index 1fcfe38..b7177ed 100644
--- a/secure/lib/libcrypto/i386/x86-gf2m.s
+++ b/secure/lib/libcrypto/i386/x86-gf2m.s
@@ -341,4 +341,4 @@ bn_GF2m_mul_2x2:
.byte 67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97
.byte 112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103
.byte 62,0
-.comm OPENSSL_ia32cap_P,8,4
+.comm OPENSSL_ia32cap_P,16,4
diff --git a/secure/lib/libcrypto/i386/x86-mont.s b/secure/lib/libcrypto/i386/x86-mont.s
index 0eec75d..26f84f8 100644
--- a/secure/lib/libcrypto/i386/x86-mont.s
+++ b/secure/lib/libcrypto/i386/x86-mont.s
@@ -454,4 +454,4 @@ bn_mul_mont:
.byte 54,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121
.byte 32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46
.byte 111,114,103,62,0
-.comm OPENSSL_ia32cap_P,8,4
+.comm OPENSSL_ia32cap_P,16,4
diff --git a/secure/lib/libcrypto/i386/x86cpuid.s b/secure/lib/libcrypto/i386/x86cpuid.s
index 815ff69..69622ec 100644
--- a/secure/lib/libcrypto/i386/x86cpuid.s
+++ b/secure/lib/libcrypto/i386/x86cpuid.s
@@ -23,6 +23,8 @@ OPENSSL_ia32_cpuid:
xorl %eax,%eax
btl $21,%ecx
jnc .L000nocpuid
+ movl 20(%esp),%esi
+ movl %eax,8(%esi)
.byte 0x0f,0xa2
movl %eax,%edi
xorl %eax,%eax
@@ -73,28 +75,36 @@ OPENSSL_ia32_cpuid:
andl $4026531839,%edx
jmp .L002generic
.L001intel:
+ cmpl $7,%edi
+ jb .L003cacheinfo
+ movl 20(%esp),%esi
+ movl $7,%eax
+ xorl %ecx,%ecx
+ .byte 0x0f,0xa2
+ movl %ebx,8(%esi)
+.L003cacheinfo:
cmpl $4,%edi
movl $-1,%edi
- jb .L003nocacheinfo
+ jb .L004nocacheinfo
movl $4,%eax
movl $0,%ecx
.byte 0x0f,0xa2
movl %eax,%edi
shrl $14,%edi
andl $4095,%edi
-.L003nocacheinfo:
+.L004nocacheinfo:
movl $1,%eax
xorl %ecx,%ecx
.byte 0x0f,0xa2
andl $3220176895,%edx
cmpl $0,%ebp
- jne .L004notintel
+ jne .L005notintel
orl $1073741824,%edx
andb $15,%ah
cmpb $15,%ah
- jne .L004notintel
+ jne .L005notintel
orl $1048576,%edx
-.L004notintel:
+.L005notintel:
btl $28,%edx
jnc .L002generic
andl $4026531839,%edx
@@ -111,20 +121,22 @@ OPENSSL_ia32_cpuid:
movl %edx,%esi
orl %ecx,%ebp
btl $27,%ecx
- jnc .L005clear_avx
+ jnc .L006clear_avx
xorl %ecx,%ecx
.byte 15,1,208
andl $6,%eax
cmpl $6,%eax
- je .L006done
+ je .L007done
cmpl $2,%eax
- je .L005clear_avx
-.L007clear_xmm:
+ je .L006clear_avx
+.L008clear_xmm:
andl $4261412861,%ebp
andl $4278190079,%esi
-.L005clear_avx:
+.L006clear_avx:
andl $4026525695,%ebp
-.L006done:
+ movl 20(%esp),%edi
+ andl $4294967263,8(%edi)
+.L007done:
movl %esi,%eax
movl %ebp,%edx
.L000nocpuid:
@@ -143,9 +155,9 @@ OPENSSL_rdtsc:
xorl %edx,%edx
leal OPENSSL_ia32cap_P,%ecx
btl $4,(%ecx)
- jnc .L008notsc
+ jnc .L009notsc
.byte 0x0f,0x31
-.L008notsc:
+.L009notsc:
ret
.size OPENSSL_rdtsc,.-.L_OPENSSL_rdtsc_begin
.globl OPENSSL_instrument_halt
@@ -155,14 +167,14 @@ OPENSSL_instrument_halt:
.L_OPENSSL_instrument_halt_begin:
leal OPENSSL_ia32cap_P,%ecx
btl $4,(%ecx)
- jnc .L009nohalt
+ jnc .L010nohalt
.long 2421723150
andl $3,%eax
- jnz .L009nohalt
+ jnz .L010nohalt
pushfl
popl %eax
btl $9,%eax
- jnc .L009nohalt
+ jnc .L010nohalt
.byte 0x0f,0x31
pushl %edx
pushl %eax
@@ -172,7 +184,7 @@ OPENSSL_instrument_halt:
sbbl 4(%esp),%edx
addl $8,%esp
ret
-.L009nohalt:
+.L010nohalt:
xorl %eax,%eax
xorl %edx,%edx
ret
@@ -185,21 +197,21 @@ OPENSSL_far_spin:
pushfl
popl %eax
btl $9,%eax
- jnc .L010nospin
+ jnc .L011nospin
movl 4(%esp),%eax
movl 8(%esp),%ecx
.long 2430111262
xorl %eax,%eax
movl (%ecx),%edx
- jmp .L011spin
+ jmp .L012spin
.align 16
-.L011spin:
+.L012spin:
incl %eax
cmpl (%ecx),%edx
- je .L011spin
+ je .L012spin
.long 529567888
ret
-.L010nospin:
+.L011nospin:
xorl %eax,%eax
xorl %edx,%edx
ret
@@ -214,10 +226,10 @@ OPENSSL_wipe_cpu:
leal OPENSSL_ia32cap_P,%ecx
movl (%ecx),%ecx
btl $1,(%ecx)
- jnc .L012no_x87
+ jnc .L013no_x87
andl $83886080,%ecx
cmpl $83886080,%ecx
- jne .L013no_sse2
+ jne .L014no_sse2
pxor %xmm0,%xmm0
pxor %xmm1,%xmm1
pxor %xmm2,%xmm2
@@ -226,9 +238,9 @@ OPENSSL_wipe_cpu:
pxor %xmm5,%xmm5
pxor %xmm6,%xmm6
pxor %xmm7,%xmm7
-.L013no_sse2:
+.L014no_sse2:
.long 4007259865,4007259865,4007259865,4007259865,2430851995
-.L012no_x87:
+.L013no_x87:
leal 4(%esp),%eax
ret
.size OPENSSL_wipe_cpu,.-.L_OPENSSL_wipe_cpu_begin
@@ -242,11 +254,11 @@ OPENSSL_atomic_add:
pushl %ebx
nop
movl (%edx),%eax
-.L014spin:
+.L015spin:
leal (%eax,%ecx,1),%ebx
nop
.long 447811568
- jne .L014spin
+ jne .L015spin
movl %ebx,%eax
popl %ebx
ret
@@ -287,32 +299,32 @@ OPENSSL_cleanse:
movl 8(%esp),%ecx
xorl %eax,%eax
cmpl $7,%ecx
- jae .L015lot
+ jae .L016lot
cmpl $0,%ecx
- je .L016ret
-.L017little:
+ je .L017ret
+.L018little:
movb %al,(%edx)
subl $1,%ecx
leal 1(%edx),%edx
- jnz .L017little
-.L016ret:
+ jnz .L018little
+.L017ret:
ret
.align 16
-.L015lot:
+.L016lot:
testl $3,%edx
- jz .L018aligned
+ jz .L019aligned
movb %al,(%edx)
leal -1(%ecx),%ecx
leal 1(%edx),%edx
- jmp .L015lot
-.L018aligned:
+ jmp .L016lot
+.L019aligned:
movl %eax,(%edx)
leal -4(%ecx),%ecx
testl $-4,%ecx
leal 4(%edx),%edx
- jnz .L018aligned
+ jnz .L019aligned
cmpl $0,%ecx
- jne .L017little
+ jne .L018little
ret
.size OPENSSL_cleanse,.-.L_OPENSSL_cleanse_begin
.globl OPENSSL_ia32_rdrand
@@ -321,15 +333,32 @@ OPENSSL_cleanse:
OPENSSL_ia32_rdrand:
.L_OPENSSL_ia32_rdrand_begin:
movl $8,%ecx
-.L019loop:
+.L020loop:
.byte 15,199,240
- jc .L020break
- loop .L019loop
-.L020break:
+ jc .L021break
+ loop .L020loop
+.L021break:
cmpl $0,%eax
cmovel %ecx,%eax
ret
.size OPENSSL_ia32_rdrand,.-.L_OPENSSL_ia32_rdrand_begin
-.comm OPENSSL_ia32cap_P,8,4
+.globl OPENSSL_ia32_rdseed
+.type OPENSSL_ia32_rdseed,@function
+.align 16
+OPENSSL_ia32_rdseed:
+.L_OPENSSL_ia32_rdseed_begin:
+ movl $8,%ecx
+.L022loop:
+.byte 15,199,248
+ jc .L023break
+ loop .L022loop
+.L023break:
+ cmpl $0,%eax
+ cmovel %ecx,%eax
+ ret
+.size OPENSSL_ia32_rdseed,.-.L_OPENSSL_ia32_rdseed_begin
+.hidden OPENSSL_cpuid_setup
+.hidden OPENSSL_ia32cap_P
+.comm OPENSSL_ia32cap_P,16,4
.section .init
call OPENSSL_cpuid_setup
diff --git a/secure/lib/libcrypto/man/ASN1_OBJECT_new.3 b/secure/lib/libcrypto/man/ASN1_OBJECT_new.3
index 927b28b..2b7ff89 100644
--- a/secure/lib/libcrypto/man/ASN1_OBJECT_new.3
+++ b/secure/lib/libcrypto/man/ASN1_OBJECT_new.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "ASN1_OBJECT_new 3"
-.TH ASN1_OBJECT_new 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH ASN1_OBJECT_new 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/ASN1_STRING_length.3 b/secure/lib/libcrypto/man/ASN1_STRING_length.3
index dd9bc74..fe95425 100644
--- a/secure/lib/libcrypto/man/ASN1_STRING_length.3
+++ b/secure/lib/libcrypto/man/ASN1_STRING_length.3
@@ -133,14 +133,14 @@
.\" ========================================================================
.\"
.IX Title "ASN1_STRING_length 3"
-.TH ASN1_STRING_length 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH ASN1_STRING_length 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
.nh
.SH "NAME"
ASN1_STRING_dup, ASN1_STRING_cmp, ASN1_STRING_set, ASN1_STRING_length,
-ASN1_STRING_length_set, ASN1_STRING_type, ASN1_STRING_data \-
+ASN1_STRING_length_set, ASN1_STRING_type, ASN1_STRING_data, ASN1_STRING_to_UTF8 \-
ASN1_STRING utility functions
.SH "SYNOPSIS"
.IX Header "SYNOPSIS"
diff --git a/secure/lib/libcrypto/man/ASN1_STRING_new.3 b/secure/lib/libcrypto/man/ASN1_STRING_new.3
index 52203a3..3d24f4a 100644
--- a/secure/lib/libcrypto/man/ASN1_STRING_new.3
+++ b/secure/lib/libcrypto/man/ASN1_STRING_new.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "ASN1_STRING_new 3"
-.TH ASN1_STRING_new 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH ASN1_STRING_new 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/ASN1_STRING_print_ex.3 b/secure/lib/libcrypto/man/ASN1_STRING_print_ex.3
index b5e0c23..037a498 100644
--- a/secure/lib/libcrypto/man/ASN1_STRING_print_ex.3
+++ b/secure/lib/libcrypto/man/ASN1_STRING_print_ex.3
@@ -133,13 +133,13 @@
.\" ========================================================================
.\"
.IX Title "ASN1_STRING_print_ex 3"
-.TH ASN1_STRING_print_ex 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH ASN1_STRING_print_ex 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
.nh
.SH "NAME"
-ASN1_STRING_print_ex, ASN1_STRING_print_ex_fp \- ASN1_STRING output routines.
+ASN1_STRING_print_ex, ASN1_STRING_print_ex_fp, ASN1_STRING_print \- ASN1_STRING output routines.
.SH "SYNOPSIS"
.IX Header "SYNOPSIS"
.Vb 1
diff --git a/secure/lib/libcrypto/man/ASN1_TIME_set.3 b/secure/lib/libcrypto/man/ASN1_TIME_set.3
new file mode 100644
index 0000000..8ac876b
--- /dev/null
+++ b/secure/lib/libcrypto/man/ASN1_TIME_set.3
@@ -0,0 +1,264 @@
+.\" Automatically generated by Pod::Man 2.28 (Pod::Simple 3.30)
+.\"
+.\" Standard preamble:
+.\" ========================================================================
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Vb \" Begin verbatim text
+.ft CW
+.nf
+.ne \\$1
+..
+.de Ve \" End verbatim text
+.ft R
+.fi
+..
+.\" Set up some character translations and predefined strings. \*(-- will
+.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
+.\" double quote, and \*(R" will give a right double quote. \*(C+ will
+.\" give a nicer C++. Capital omega is used to do unbreakable dashes and
+.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff,
+.\" nothing in troff, for use with C<>.
+.tr \(*W-
+.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
+.ie n \{\
+. ds -- \(*W-
+. ds PI pi
+. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
+. ds L" ""
+. ds R" ""
+. ds C` ""
+. ds C' ""
+'br\}
+.el\{\
+. ds -- \|\(em\|
+. ds PI \(*p
+. ds L" ``
+. ds R" ''
+. ds C`
+. ds C'
+'br\}
+.\"
+.\" Escape single quotes in literal strings from groff's Unicode transform.
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\"
+.\" If the F register is turned on, we'll generate index entries on stderr for
+.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
+.\" entries marked with X<> in POD. Of course, you'll have to process the
+.\" output yourself in some meaningful fashion.
+.\"
+.\" Avoid warning from groff about undefined register 'F'.
+.de IX
+..
+.nr rF 0
+.if \n(.g .if rF .nr rF 1
+.if (\n(rF:(\n(.g==0)) \{
+. if \nF \{
+. de IX
+. tm Index:\\$1\t\\n%\t"\\$2"
+..
+. if !\nF==2 \{
+. nr % 0
+. nr F 2
+. \}
+. \}
+.\}
+.rr rF
+.\"
+.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
+.\" Fear. Run. Save yourself. No user-serviceable parts.
+. \" fudge factors for nroff and troff
+.if n \{\
+. ds #H 0
+. ds #V .8m
+. ds #F .3m
+. ds #[ \f1
+. ds #] \fP
+.\}
+.if t \{\
+. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+. ds #V .6m
+. ds #F 0
+. ds #[ \&
+. ds #] \&
+.\}
+. \" simple accents for nroff and troff
+.if n \{\
+. ds ' \&
+. ds ` \&
+. ds ^ \&
+. ds , \&
+. ds ~ ~
+. ds /
+.\}
+.if t \{\
+. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
+.\}
+. \" troff and (daisy-wheel) nroff accents
+.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
+.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
+.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
+.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
+.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
+.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
+.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
+.ds ae a\h'-(\w'a'u*4/10)'e
+.ds Ae A\h'-(\w'A'u*4/10)'E
+. \" corrections for vroff
+.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
+.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
+. \" for low resolution devices (crt and lpr)
+.if \n(.H>23 .if \n(.V>19 \
+\{\
+. ds : e
+. ds 8 ss
+. ds o a
+. ds d- d\h'-1'\(ga
+. ds D- D\h'-1'\(hy
+. ds th \o'bp'
+. ds Th \o'LP'
+. ds ae ae
+. ds Ae AE
+.\}
+.rm #[ #] #H #V #F C
+.\" ========================================================================
+.\"
+.IX Title "ASN1_TIME_set 3"
+.TH ASN1_TIME_set 3 "2015-07-09" "1.0.2d" "OpenSSL"
+.\" For nroff, turn off justification. Always turn off hyphenation; it makes
+.\" way too many mistakes in technical documents.
+.if n .ad l
+.nh
+.SH "NAME"
+ASN1_TIME_set, ASN1_TIME_adj, ASN1_TIME_check, ASN1_TIME_set_string,
+ASN1_TIME_print, ASN1_TIME_diff \- ASN.1 Time functions.
+.SH "SYNOPSIS"
+.IX Header "SYNOPSIS"
+.Vb 6
+\& ASN1_TIME *ASN1_TIME_set(ASN1_TIME *s, time_t t);
+\& ASN1_TIME *ASN1_TIME_adj(ASN1_TIME *s, time_t t,
+\& int offset_day, long offset_sec);
+\& int ASN1_TIME_set_string(ASN1_TIME *s, const char *str);
+\& int ASN1_TIME_check(const ASN1_TIME *t);
+\& int ASN1_TIME_print(BIO *b, const ASN1_TIME *s);
+\&
+\& int ASN1_TIME_diff(int *pday, int *psec,
+\& const ASN1_TIME *from, const ASN1_TIME *to);
+.Ve
+.SH "DESCRIPTION"
+.IX Header "DESCRIPTION"
+The function \fIASN1_TIME_set()\fR sets the \s-1ASN1_TIME\s0 structure \fBs\fR to the
+time represented by the time_t value \fBt\fR. If \fBs\fR is \s-1NULL\s0 a new \s-1ASN1_TIME\s0
+structure is allocated and returned.
+.PP
+\&\fIASN1_TIME_adj()\fR sets the \s-1ASN1_TIME\s0 structure \fBs\fR to the time represented
+by the time \fBoffset_day\fR and \fBoffset_sec\fR after the time_t value \fBt\fR.
+The values of \fBoffset_day\fR or \fBoffset_sec\fR can be negative to set a
+time before \fBt\fR. The \fBoffset_sec\fR value can also exceed the number of
+seconds in a day. If \fBs\fR is \s-1NULL\s0 a new \s-1ASN1_TIME\s0 structure is allocated
+and returned.
+.PP
+\&\fIASN1_TIME_set_string()\fR sets \s-1ASN1_TIME\s0 structure \fBs\fR to the time
+represented by string \fBstr\fR which must be in appropriate \s-1ASN.1\s0 time
+format (for example \s-1YYMMDDHHMMSSZ\s0 or \s-1YYYYMMDDHHMMSSZ\s0).
+.PP
+\&\fIASN1_TIME_check()\fR checks the syntax of \s-1ASN1_TIME\s0 structure \fBs\fR.
+.PP
+\&\fIASN1_TIME_print()\fR prints out the time \fBs\fR to \s-1BIO \s0\fBb\fR in human readable
+format. It will be of the format \s-1MMM DD HH:MM:SS YYYY\s0 [\s-1GMT\s0], for example
+\&\*(L"Feb 3 00:55:52 2015 \s-1GMT\*(R"\s0 it does not include a newline. If the time
+structure has invalid format it prints out \*(L"Bad time value\*(R" and returns
+an error.
+.PP
+\&\fIASN1_TIME_diff()\fR sets \fB*pday\fR and \fB*psec\fR to the time difference between
+\&\fBfrom\fR and \fBto\fR. If \fBto\fR represents a time later than \fBfrom\fR then
+one or both (depending on the time difference) of \fB*pday\fR and \fB*psec\fR
+will be positive. If \fBto\fR represents a time earlier than \fBfrom\fR then
+one or both of \fB*pday\fR and \fB*psec\fR will be negative. If \fBto\fR and \fBfrom\fR
+represent the same time then \fB*pday\fR and \fB*psec\fR will both be zero.
+If both \fB*pday\fR and \fB*psec\fR are non-zero they will always have the same
+sign. The value of \fB*psec\fR will always be less than the number of seconds
+in a day. If \fBfrom\fR or \fBto\fR is \s-1NULL\s0 the current time is used.
+.SH "NOTES"
+.IX Header "NOTES"
+The \s-1ASN1_TIME\s0 structure corresponds to the \s-1ASN.1\s0 structure \fBTime\fR
+defined in \s-1RFC5280\s0 et al. The time setting functions obey the rules outlined
+in \s-1RFC5280:\s0 if the date can be represented by UTCTime it is used, else
+GeneralizedTime is used.
+.PP
+The \s-1ASN1_TIME\s0 structure is represented as an \s-1ASN1_STRING\s0 internally and can
+be freed up using \fIASN1_STRING_free()\fR.
+.PP
+The \s-1ASN1_TIME\s0 structure can represent years from 0000 to 9999 but no attempt
+is made to correct ancient calendar changes (for example from Julian to
+Gregorian calendars).
+.PP
+Some applications add offset times directly to a time_t value and pass the
+results to \fIASN1_TIME_set()\fR (or equivalent). This can cause problems as the
+time_t value can overflow on some systems resulting in unexpected results.
+New applications should use \fIASN1_TIME_adj()\fR instead and pass the offset value
+in the \fBoffset_sec\fR and \fBoffset_day\fR parameters instead of directly
+manipulating a time_t value.
+.SH "BUGS"
+.IX Header "BUGS"
+\&\fIASN1_TIME_print()\fR currently does not print out the time zone: it either prints
+out \*(L"\s-1GMT\*(R"\s0 or nothing. But all certificates complying with \s-1RFC5280\s0 et al use \s-1GMT\s0
+anyway.
+.SH "EXAMPLES"
+.IX Header "EXAMPLES"
+Set a time structure to one hour after the current time and print it out:
+.PP
+.Vb 11
+\& #include <time.h>
+\& #include <openssl/asn1.h>
+\& ASN1_TIME *tm;
+\& time_t t;
+\& BIO *b;
+\& t = time(NULL);
+\& tm = ASN1_TIME_adj(NULL, t, 0, 60 * 60);
+\& b = BIO_new_fp(stdout, BIO_NOCLOSE);
+\& ASN1_TIME_print(b, tm);
+\& ASN1_STRING_free(tm);
+\& BIO_free(b);
+.Ve
+.PP
+Determine if one time is later or sooner than the current time:
+.PP
+.Vb 1
+\& int day, sec;
+\&
+\& if (!ASN1_TIME_diff(&day, &sec, NULL, to))
+\& /* Invalid time format */
+\&
+\& if (day > 0 || sec > 0)
+\& printf("Later\en");
+\& else if (day < 0 || sec < 0)
+\& printf("Sooner\en");
+\& else
+\& printf("Same\en");
+.Ve
+.SH "RETURN VALUES"
+.IX Header "RETURN VALUES"
+\&\fIASN1_TIME_set()\fR and \fIASN1_TIME_adj()\fR return a pointer to an \s-1ASN1_TIME\s0 structure
+or \s-1NULL\s0 if an error occurred.
+.PP
+\&\fIASN1_TIME_set_string()\fR returns 1 if the time value is successfully set and
+0 otherwise.
+.PP
+\&\fIASN1_TIME_check()\fR returns 1 if the structure is syntactically correct and 0
+otherwise.
+.PP
+\&\fIASN1_TIME_print()\fR returns 1 if the time is successfully printed out and 0 if
+an error occurred (I/O error or invalid time format).
+.PP
+\&\fIASN1_TIME_diff()\fR returns 1 for sucess and 0 for failure. It can fail if the
+pass \s-1ASN1_TIME\s0 structure has invalid syntax for example.
diff --git a/secure/lib/libcrypto/man/ASN1_generate_nconf.3 b/secure/lib/libcrypto/man/ASN1_generate_nconf.3
index af892e2..7149547 100644
--- a/secure/lib/libcrypto/man/ASN1_generate_nconf.3
+++ b/secure/lib/libcrypto/man/ASN1_generate_nconf.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "ASN1_generate_nconf 3"
-.TH ASN1_generate_nconf 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH ASN1_generate_nconf 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/BIO_ctrl.3 b/secure/lib/libcrypto/man/BIO_ctrl.3
index b191ed2..a4b3691 100644
--- a/secure/lib/libcrypto/man/BIO_ctrl.3
+++ b/secure/lib/libcrypto/man/BIO_ctrl.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "BIO_ctrl 3"
-.TH BIO_ctrl 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH BIO_ctrl 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/BIO_f_base64.3 b/secure/lib/libcrypto/man/BIO_f_base64.3
index db4a753..1678773 100644
--- a/secure/lib/libcrypto/man/BIO_f_base64.3
+++ b/secure/lib/libcrypto/man/BIO_f_base64.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "BIO_f_base64 3"
-.TH BIO_f_base64 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH BIO_f_base64 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/BIO_f_buffer.3 b/secure/lib/libcrypto/man/BIO_f_buffer.3
index 8a7e7a2..022f6ac 100644
--- a/secure/lib/libcrypto/man/BIO_f_buffer.3
+++ b/secure/lib/libcrypto/man/BIO_f_buffer.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "BIO_f_buffer 3"
-.TH BIO_f_buffer 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH BIO_f_buffer 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/BIO_f_cipher.3 b/secure/lib/libcrypto/man/BIO_f_cipher.3
index f751a5c..2ae0f3e 100644
--- a/secure/lib/libcrypto/man/BIO_f_cipher.3
+++ b/secure/lib/libcrypto/man/BIO_f_cipher.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "BIO_f_cipher 3"
-.TH BIO_f_cipher 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH BIO_f_cipher 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/BIO_f_md.3 b/secure/lib/libcrypto/man/BIO_f_md.3
index 0217508..ae83639 100644
--- a/secure/lib/libcrypto/man/BIO_f_md.3
+++ b/secure/lib/libcrypto/man/BIO_f_md.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "BIO_f_md 3"
-.TH BIO_f_md 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH BIO_f_md 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/BIO_f_null.3 b/secure/lib/libcrypto/man/BIO_f_null.3
index 9b4f647..f877a0a 100644
--- a/secure/lib/libcrypto/man/BIO_f_null.3
+++ b/secure/lib/libcrypto/man/BIO_f_null.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "BIO_f_null 3"
-.TH BIO_f_null 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH BIO_f_null 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/BIO_f_ssl.3 b/secure/lib/libcrypto/man/BIO_f_ssl.3
index 8ccb59a..84c8510 100644
--- a/secure/lib/libcrypto/man/BIO_f_ssl.3
+++ b/secure/lib/libcrypto/man/BIO_f_ssl.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "BIO_f_ssl 3"
-.TH BIO_f_ssl 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH BIO_f_ssl 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
@@ -244,7 +244,7 @@ already been established this call has no effect.
is non blocking they can still request a retry in exceptional
circumstances. Specifically this will happen if a session
renegotiation takes place during a \fIBIO_read()\fR operation, one
-case where this happens is when \s-1SGC\s0 or step up occurs.
+case where this happens is when step up occurs.
.PP
In OpenSSL 0.9.6 and later the \s-1SSL\s0 flag \s-1SSL_AUTO_RETRY\s0 can be
set to disable this behaviour. That is when this flag is set
diff --git a/secure/lib/libcrypto/man/BIO_find_type.3 b/secure/lib/libcrypto/man/BIO_find_type.3
index 3fdfa1e..04876c1 100644
--- a/secure/lib/libcrypto/man/BIO_find_type.3
+++ b/secure/lib/libcrypto/man/BIO_find_type.3
@@ -133,13 +133,13 @@
.\" ========================================================================
.\"
.IX Title "BIO_find_type 3"
-.TH BIO_find_type 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH BIO_find_type 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
.nh
.SH "NAME"
-BIO_find_type, BIO_next \- BIO chain traversal
+BIO_find_type, BIO_next, BIO_method_type \- BIO chain traversal
.SH "SYNOPSIS"
.IX Header "SYNOPSIS"
.Vb 1
diff --git a/secure/lib/libcrypto/man/BIO_new.3 b/secure/lib/libcrypto/man/BIO_new.3
index b51eb3c..75a8a0b 100644
--- a/secure/lib/libcrypto/man/BIO_new.3
+++ b/secure/lib/libcrypto/man/BIO_new.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "BIO_new 3"
-.TH BIO_new 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH BIO_new 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/BIO_new_CMS.3 b/secure/lib/libcrypto/man/BIO_new_CMS.3
index 87fb129..e30e9ab 100644
--- a/secure/lib/libcrypto/man/BIO_new_CMS.3
+++ b/secure/lib/libcrypto/man/BIO_new_CMS.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "BIO_new_CMS 3"
-.TH BIO_new_CMS 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH BIO_new_CMS 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/BIO_push.3 b/secure/lib/libcrypto/man/BIO_push.3
index 3a45766..e7943c4 100644
--- a/secure/lib/libcrypto/man/BIO_push.3
+++ b/secure/lib/libcrypto/man/BIO_push.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "BIO_push 3"
-.TH BIO_push 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH BIO_push 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/BIO_read.3 b/secure/lib/libcrypto/man/BIO_read.3
index 495d84e..9267591 100644
--- a/secure/lib/libcrypto/man/BIO_read.3
+++ b/secure/lib/libcrypto/man/BIO_read.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "BIO_read 3"
-.TH BIO_read 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH BIO_read 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/BIO_s_accept.3 b/secure/lib/libcrypto/man/BIO_s_accept.3
index eddc678..fd084f5 100644
--- a/secure/lib/libcrypto/man/BIO_s_accept.3
+++ b/secure/lib/libcrypto/man/BIO_s_accept.3
@@ -133,13 +133,13 @@
.\" ========================================================================
.\"
.IX Title "BIO_s_accept 3"
-.TH BIO_s_accept 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH BIO_s_accept 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
.nh
.SH "NAME"
-BIO_s_accept, BIO_set_accept_port, BIO_get_accept_port,
+BIO_s_accept, BIO_set_accept_port, BIO_get_accept_port, BIO_new_accept,
BIO_set_nbio_accept, BIO_set_accept_bios, BIO_set_bind_mode,
BIO_get_bind_mode, BIO_do_accept \- accept BIO
.SH "SYNOPSIS"
diff --git a/secure/lib/libcrypto/man/BIO_s_bio.3 b/secure/lib/libcrypto/man/BIO_s_bio.3
index 98692ac..cb0f399 100644
--- a/secure/lib/libcrypto/man/BIO_s_bio.3
+++ b/secure/lib/libcrypto/man/BIO_s_bio.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "BIO_s_bio 3"
-.TH BIO_s_bio 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH BIO_s_bio 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/BIO_s_connect.3 b/secure/lib/libcrypto/man/BIO_s_connect.3
index e3482df..f4f5010 100644
--- a/secure/lib/libcrypto/man/BIO_s_connect.3
+++ b/secure/lib/libcrypto/man/BIO_s_connect.3
@@ -133,13 +133,13 @@
.\" ========================================================================
.\"
.IX Title "BIO_s_connect 3"
-.TH BIO_s_connect 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH BIO_s_connect 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
.nh
.SH "NAME"
-BIO_s_connect, BIO_set_conn_hostname, BIO_set_conn_port,
+BIO_s_connect, BIO_new_connect, BIO_set_conn_hostname, BIO_set_conn_port,
BIO_set_conn_ip, BIO_set_conn_int_port, BIO_get_conn_hostname,
BIO_get_conn_port, BIO_get_conn_ip, BIO_get_conn_int_port,
BIO_set_nbio, BIO_do_connect \- connect BIO
diff --git a/secure/lib/libcrypto/man/BIO_s_fd.3 b/secure/lib/libcrypto/man/BIO_s_fd.3
index 06a20a8..f5e6d03 100644
--- a/secure/lib/libcrypto/man/BIO_s_fd.3
+++ b/secure/lib/libcrypto/man/BIO_s_fd.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "BIO_s_fd 3"
-.TH BIO_s_fd 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH BIO_s_fd 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/BIO_s_file.3 b/secure/lib/libcrypto/man/BIO_s_file.3
index b14c86f..63d1ef5 100644
--- a/secure/lib/libcrypto/man/BIO_s_file.3
+++ b/secure/lib/libcrypto/man/BIO_s_file.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "BIO_s_file 3"
-.TH BIO_s_file 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH BIO_s_file 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/BIO_s_mem.3 b/secure/lib/libcrypto/man/BIO_s_mem.3
index ec74f15..1908fdb 100644
--- a/secure/lib/libcrypto/man/BIO_s_mem.3
+++ b/secure/lib/libcrypto/man/BIO_s_mem.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "BIO_s_mem 3"
-.TH BIO_s_mem 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH BIO_s_mem 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/BIO_s_null.3 b/secure/lib/libcrypto/man/BIO_s_null.3
index 077723e..dd2857b 100644
--- a/secure/lib/libcrypto/man/BIO_s_null.3
+++ b/secure/lib/libcrypto/man/BIO_s_null.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "BIO_s_null 3"
-.TH BIO_s_null 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH BIO_s_null 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/BIO_s_socket.3 b/secure/lib/libcrypto/man/BIO_s_socket.3
index 0afadac..01d9f44 100644
--- a/secure/lib/libcrypto/man/BIO_s_socket.3
+++ b/secure/lib/libcrypto/man/BIO_s_socket.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "BIO_s_socket 3"
-.TH BIO_s_socket 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH BIO_s_socket 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/BIO_set_callback.3 b/secure/lib/libcrypto/man/BIO_set_callback.3
index b355f65..2b0b4db 100644
--- a/secure/lib/libcrypto/man/BIO_set_callback.3
+++ b/secure/lib/libcrypto/man/BIO_set_callback.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "BIO_set_callback 3"
-.TH BIO_set_callback 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH BIO_set_callback 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/BIO_should_retry.3 b/secure/lib/libcrypto/man/BIO_should_retry.3
index 980952a..f9563754 100644
--- a/secure/lib/libcrypto/man/BIO_should_retry.3
+++ b/secure/lib/libcrypto/man/BIO_should_retry.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "BIO_should_retry 3"
-.TH BIO_should_retry 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH BIO_should_retry 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/BN_BLINDING_new.3 b/secure/lib/libcrypto/man/BN_BLINDING_new.3
index 3266d01..025f834 100644
--- a/secure/lib/libcrypto/man/BN_BLINDING_new.3
+++ b/secure/lib/libcrypto/man/BN_BLINDING_new.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "BN_BLINDING_new 3"
-.TH BN_BLINDING_new 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH BN_BLINDING_new 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
@@ -141,7 +141,7 @@
.SH "NAME"
BN_BLINDING_new, BN_BLINDING_free, BN_BLINDING_update, BN_BLINDING_convert,
BN_BLINDING_invert, BN_BLINDING_convert_ex, BN_BLINDING_invert_ex,
-BN_BLINDING_get_thread_id, BN_BLINDING_set_thread_id, BN_BLINDING_get_flags,
+BN_BLINDING_get_thread_id, BN_BLINDING_set_thread_id, BN_BLINDING_thread_id, BN_BLINDING_get_flags,
BN_BLINDING_set_flags, BN_BLINDING_create_param \- blinding related BIGNUM
functions.
.SH "SYNOPSIS"
@@ -220,7 +220,7 @@ or \s-1NULL\s0 in case of an error.
.PP
\&\fIBN_BLINDING_update()\fR, \fIBN_BLINDING_convert()\fR, \fIBN_BLINDING_invert()\fR,
\&\fIBN_BLINDING_convert_ex()\fR and \fIBN_BLINDING_invert_ex()\fR return 1 on
-success and 0 if an error occured.
+success and 0 if an error occurred.
.PP
\&\fIBN_BLINDING_thread_id()\fR returns a pointer to the thread id object
within a \fB\s-1BN_BLINDING\s0\fR object.
diff --git a/secure/lib/libcrypto/man/BN_CTX_new.3 b/secure/lib/libcrypto/man/BN_CTX_new.3
index 340197f..f2f61e9 100644
--- a/secure/lib/libcrypto/man/BN_CTX_new.3
+++ b/secure/lib/libcrypto/man/BN_CTX_new.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "BN_CTX_new 3"
-.TH BN_CTX_new 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH BN_CTX_new 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
@@ -147,10 +147,14 @@ BN_CTX_new, BN_CTX_init, BN_CTX_free \- allocate and free BN_CTX structures
\&
\& BN_CTX *BN_CTX_new(void);
\&
-\& void BN_CTX_init(BN_CTX *c);
-\&
\& void BN_CTX_free(BN_CTX *c);
.Ve
+.PP
+Deprecated:
+.PP
+.Vb 1
+\& void BN_CTX_init(BN_CTX *c);
+.Ve
.SH "DESCRIPTION"
.IX Header "DESCRIPTION"
A \fB\s-1BN_CTX\s0\fR is a structure that holds \fB\s-1BIGNUM\s0\fR temporary variables used by
@@ -159,14 +163,16 @@ is rather expensive when used in conjunction with repeated subroutine
calls, the \fB\s-1BN_CTX\s0\fR structure is used.
.PP
\&\fIBN_CTX_new()\fR allocates and initializes a \fB\s-1BN_CTX\s0\fR
-structure. \fIBN_CTX_init()\fR initializes an existing uninitialized
-\&\fB\s-1BN_CTX\s0\fR.
+structure.
.PP
\&\fIBN_CTX_free()\fR frees the components of the \fB\s-1BN_CTX\s0\fR, and if it was
created by \fIBN_CTX_new()\fR, also the structure itself.
If \fIBN_CTX_start\fR\|(3) has been used on the \fB\s-1BN_CTX\s0\fR,
\&\fIBN_CTX_end\fR\|(3) must be called before the \fB\s-1BN_CTX\s0\fR
may be freed by \fIBN_CTX_free()\fR.
+.PP
+\&\fIBN_CTX_init()\fR (deprecated) initializes an existing uninitialized \fB\s-1BN_CTX\s0\fR.
+This should not be used for new programs. Use \fIBN_CTX_new()\fR instead.
.SH "RETURN VALUES"
.IX Header "RETURN VALUES"
\&\fIBN_CTX_new()\fR returns a pointer to the \fB\s-1BN_CTX\s0\fR. If the allocation fails,
diff --git a/secure/lib/libcrypto/man/BN_CTX_start.3 b/secure/lib/libcrypto/man/BN_CTX_start.3
index 60f0c50..f630a0f 100644
--- a/secure/lib/libcrypto/man/BN_CTX_start.3
+++ b/secure/lib/libcrypto/man/BN_CTX_start.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "BN_CTX_start 3"
-.TH BN_CTX_start 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH BN_CTX_start 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/BN_add.3 b/secure/lib/libcrypto/man/BN_add.3
index 5689dc6..75a2a5c 100644
--- a/secure/lib/libcrypto/man/BN_add.3
+++ b/secure/lib/libcrypto/man/BN_add.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "BN_add 3"
-.TH BN_add 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH BN_add 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/BN_add_word.3 b/secure/lib/libcrypto/man/BN_add_word.3
index f42d70e..c00d9f4 100644
--- a/secure/lib/libcrypto/man/BN_add_word.3
+++ b/secure/lib/libcrypto/man/BN_add_word.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "BN_add_word 3"
-.TH BN_add_word 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH BN_add_word 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/BN_bn2bin.3 b/secure/lib/libcrypto/man/BN_bn2bin.3
index 3f7f574..4f94150 100644
--- a/secure/lib/libcrypto/man/BN_bn2bin.3
+++ b/secure/lib/libcrypto/man/BN_bn2bin.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "BN_bn2bin 3"
-.TH BN_bn2bin 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH BN_bn2bin 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/BN_cmp.3 b/secure/lib/libcrypto/man/BN_cmp.3
index 57d3ae9..c9f5a68 100644
--- a/secure/lib/libcrypto/man/BN_cmp.3
+++ b/secure/lib/libcrypto/man/BN_cmp.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "BN_cmp 3"
-.TH BN_cmp 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH BN_cmp 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/BN_copy.3 b/secure/lib/libcrypto/man/BN_copy.3
index a671762..4fb3a8a 100644
--- a/secure/lib/libcrypto/man/BN_copy.3
+++ b/secure/lib/libcrypto/man/BN_copy.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "BN_copy 3"
-.TH BN_copy 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH BN_copy 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/BN_generate_prime.3 b/secure/lib/libcrypto/man/BN_generate_prime.3
index dd69285..f27e165 100644
--- a/secure/lib/libcrypto/man/BN_generate_prime.3
+++ b/secure/lib/libcrypto/man/BN_generate_prime.3
@@ -133,18 +133,38 @@
.\" ========================================================================
.\"
.IX Title "BN_generate_prime 3"
-.TH BN_generate_prime 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH BN_generate_prime 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
.nh
.SH "NAME"
-BN_generate_prime, BN_is_prime, BN_is_prime_fasttest \- generate primes and test for primality
+BN_generate_prime_ex, BN_is_prime_ex, BN_is_prime_fasttest_ex, BN_GENCB_call,
+BN_GENCB_set_old, BN_GENCB_set, BN_generate_prime, BN_is_prime,
+BN_is_prime_fasttest \- generate primes and test for primality
.SH "SYNOPSIS"
.IX Header "SYNOPSIS"
.Vb 1
\& #include <openssl/bn.h>
\&
+\& int BN_generate_prime_ex(BIGNUM *ret,int bits,int safe, const BIGNUM *add,
+\& const BIGNUM *rem, BN_GENCB *cb);
+\&
+\& int BN_is_prime_ex(const BIGNUM *p,int nchecks, BN_CTX *ctx, BN_GENCB *cb);
+\&
+\& int BN_is_prime_fasttest_ex(const BIGNUM *p,int nchecks, BN_CTX *ctx,
+\& int do_trial_division, BN_GENCB *cb);
+\&
+\& int BN_GENCB_call(BN_GENCB *cb, int a, int b);
+\&
+\& #define BN_GENCB_set_old(gencb, callback, cb_arg) ...
+\&
+\& #define BN_GENCB_set(gencb, callback, cb_arg) ...
+.Ve
+.PP
+Deprecated:
+.PP
+.Vb 2
\& BIGNUM *BN_generate_prime(BIGNUM *ret, int num, int safe, BIGNUM *add,
\& BIGNUM *rem, void (*callback)(int, int, void *), void *cb_arg);
\&
@@ -157,19 +177,19 @@ BN_generate_prime, BN_is_prime, BN_is_prime_fasttest \- generate primes and test
.Ve
.SH "DESCRIPTION"
.IX Header "DESCRIPTION"
-\&\fIBN_generate_prime()\fR generates a pseudo-random prime number of \fBnum\fR
-bits.
+\&\fIBN_generate_prime_ex()\fR generates a pseudo-random prime number of
+bit length \fBbits\fR.
If \fBret\fR is not \fB\s-1NULL\s0\fR, it will be used to store the number.
.PP
-If \fBcallback\fR is not \fB\s-1NULL\s0\fR, it is called as follows:
+If \fBcb\fR is not \fB\s-1NULL\s0\fR, it is used as follows:
.IP "\(bu" 4
-\&\fBcallback(0, i, cb_arg)\fR is called after generating the i\-th
+\&\fBBN_GENCB_call(cb, 0, i)\fR is called after generating the i\-th
potential prime number.
.IP "\(bu" 4
-While the number is being tested for primality, \fBcallback(1, j,
-cb_arg)\fR is called as described below.
+While the number is being tested for primality,
+\&\fBBN_GENCB_call(cb, 1, j)\fR is called as described below.
.IP "\(bu" 4
-When a prime has been found, \fBcallback(2, i, cb_arg)\fR is called.
+When a prime has been found, \fBBN_GENCB_call(cb, 2, i)\fR is called.
.PP
The prime may have to fulfill additional requirements for use in
Diffie-Hellman key exchange:
@@ -181,37 +201,66 @@ generator.
If \fBsafe\fR is true, it will be a safe prime (i.e. a prime p so
that (p\-1)/2 is also prime).
.PP
-The \s-1PRNG\s0 must be seeded prior to calling \fIBN_generate_prime()\fR.
+The \s-1PRNG\s0 must be seeded prior to calling \fIBN_generate_prime_ex()\fR.
The prime number generation has a negligible error probability.
.PP
-\&\fIBN_is_prime()\fR and \fIBN_is_prime_fasttest()\fR test if the number \fBa\fR is
+\&\fIBN_is_prime_ex()\fR and \fIBN_is_prime_fasttest_ex()\fR test if the number \fBp\fR is
prime. The following tests are performed until one of them shows that
-\&\fBa\fR is composite; if \fBa\fR passes all these tests, it is considered
+\&\fBp\fR is composite; if \fBp\fR passes all these tests, it is considered
prime.
.PP
-\&\fIBN_is_prime_fasttest()\fR, when called with \fBdo_trial_division == 1\fR,
+\&\fIBN_is_prime_fasttest_ex()\fR, when called with \fBdo_trial_division == 1\fR,
first attempts trial division by a number of small primes;
-if no divisors are found by this test and \fBcallback\fR is not \fB\s-1NULL\s0\fR,
-\&\fBcallback(1, \-1, cb_arg)\fR is called.
+if no divisors are found by this test and \fBcb\fR is not \fB\s-1NULL\s0\fR,
+\&\fBBN_GENCB_call(cb, 1, \-1)\fR is called.
If \fBdo_trial_division == 0\fR, this test is skipped.
.PP
-Both \fIBN_is_prime()\fR and \fIBN_is_prime_fasttest()\fR perform a Miller-Rabin
-probabilistic primality test with \fBchecks\fR iterations. If
-\&\fBchecks == BN_prime_checks\fR, a number of iterations is used that
+Both \fIBN_is_prime_ex()\fR and \fIBN_is_prime_fasttest_ex()\fR perform a Miller-Rabin
+probabilistic primality test with \fBnchecks\fR iterations. If
+\&\fBnchecks == BN_prime_checks\fR, a number of iterations is used that
yields a false positive rate of at most 2^\-80 for random input.
.PP
-If \fBcallback\fR is not \fB\s-1NULL\s0\fR, \fBcallback(1, j, cb_arg)\fR is called
+If \fBcb\fR is not \fB\s-1NULL\s0\fR, \fBBN_GENCB_call(cb, 1, j)\fR is called
after the j\-th iteration (j = 0, 1, ...). \fBctx\fR is a
pre-allocated \fB\s-1BN_CTX\s0\fR (to save the overhead of allocating and
freeing the structure in a loop), or \fB\s-1NULL\s0\fR.
+.PP
+BN_GENCB_call calls the callback function held in the \fB\s-1BN_GENCB\s0\fR structure
+and passes the ints \fBa\fR and \fBb\fR as arguments. There are two types of
+\&\fB\s-1BN_GENCB\s0\fR structure that are supported: \*(L"new\*(R" style and \*(L"old\*(R" style. New
+programs should prefer the \*(L"new\*(R" style, whilst the \*(L"old\*(R" style is provided
+for backwards compatibility purposes.
+.PP
+For \*(L"new\*(R" style callbacks a \s-1BN_GENCB\s0 structure should be initialised with a
+call to BN_GENCB_set, where \fBgencb\fR is a \fB\s-1BN_GENCB\s0 *\fR, \fBcallback\fR is of
+type \fBint (*callback)(int, int, \s-1BN_GENCB\s0 *)\fR and \fBcb_arg\fR is a \fBvoid *\fR.
+\&\*(L"Old\*(R" style callbacks are the same except they are initialised with a call
+to BN_GENCB_set_old and \fBcallback\fR is of type
+\&\fBvoid (*callback)(int, int, void *)\fR.
+.PP
+A callback is invoked through a call to \fBBN_GENCB_call\fR. This will check
+the type of the callback and will invoke \fBcallback(a, b, gencb)\fR for new
+style callbacks or \fBcallback(a, b, cb_arg)\fR for old style.
+.PP
+BN_generate_prime (deprecated) works in the same way as
+BN_generate_prime_ex but expects an old style callback function
+directly in the \fBcallback\fR parameter, and an argument to pass to it in
+the \fBcb_arg\fR. Similarly BN_is_prime and BN_is_prime_fasttest are
+deprecated and can be compared to BN_is_prime_ex and
+BN_is_prime_fasttest_ex respectively.
.SH "RETURN VALUES"
.IX Header "RETURN VALUES"
-\&\fIBN_generate_prime()\fR returns the prime number on success, \fB\s-1NULL\s0\fR otherwise.
+\&\fIBN_generate_prime_ex()\fR return 1 on success or 0 on error.
.PP
-\&\fIBN_is_prime()\fR returns 0 if the number is composite, 1 if it is
-prime with an error probability of less than 0.25^\fBchecks\fR, and
+\&\fIBN_is_prime_ex()\fR, \fIBN_is_prime_fasttest_ex()\fR, \fIBN_is_prime()\fR and
+\&\fIBN_is_prime_fasttest()\fR return 0 if the number is composite, 1 if it is
+prime with an error probability of less than 0.25^\fBnchecks\fR, and
\&\-1 on error.
.PP
+\&\fIBN_generate_prime()\fR returns the prime number on success, \fB\s-1NULL\s0\fR otherwise.
+.PP
+Callback functions should return 1 on success or 0 on error.
+.PP
The error codes can be obtained by \fIERR_get_error\fR\|(3).
.SH "SEE ALSO"
.IX Header "SEE ALSO"
diff --git a/secure/lib/libcrypto/man/BN_mod_inverse.3 b/secure/lib/libcrypto/man/BN_mod_inverse.3
index 47e4a73..7562fea 100644
--- a/secure/lib/libcrypto/man/BN_mod_inverse.3
+++ b/secure/lib/libcrypto/man/BN_mod_inverse.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "BN_mod_inverse 3"
-.TH BN_mod_inverse 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH BN_mod_inverse 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/BN_mod_mul_montgomery.3 b/secure/lib/libcrypto/man/BN_mod_mul_montgomery.3
index 5319570..5663241 100644
--- a/secure/lib/libcrypto/man/BN_mod_mul_montgomery.3
+++ b/secure/lib/libcrypto/man/BN_mod_mul_montgomery.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "BN_mod_mul_montgomery 3"
-.TH BN_mod_mul_montgomery 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH BN_mod_mul_montgomery 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/BN_mod_mul_reciprocal.3 b/secure/lib/libcrypto/man/BN_mod_mul_reciprocal.3
index 1589115..1e518cf 100644
--- a/secure/lib/libcrypto/man/BN_mod_mul_reciprocal.3
+++ b/secure/lib/libcrypto/man/BN_mod_mul_reciprocal.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "BN_mod_mul_reciprocal 3"
-.TH BN_mod_mul_reciprocal 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH BN_mod_mul_reciprocal 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/BN_new.3 b/secure/lib/libcrypto/man/BN_new.3
index b150cda..553bad9 100644
--- a/secure/lib/libcrypto/man/BN_new.3
+++ b/secure/lib/libcrypto/man/BN_new.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "BN_new 3"
-.TH BN_new 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH BN_new 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/BN_num_bytes.3 b/secure/lib/libcrypto/man/BN_num_bytes.3
index ce7487a..c9ea90f 100644
--- a/secure/lib/libcrypto/man/BN_num_bytes.3
+++ b/secure/lib/libcrypto/man/BN_num_bytes.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "BN_num_bytes 3"
-.TH BN_num_bytes 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH BN_num_bytes 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/BN_rand.3 b/secure/lib/libcrypto/man/BN_rand.3
index 8297eac..aa365bb 100644
--- a/secure/lib/libcrypto/man/BN_rand.3
+++ b/secure/lib/libcrypto/man/BN_rand.3
@@ -133,13 +133,13 @@
.\" ========================================================================
.\"
.IX Title "BN_rand 3"
-.TH BN_rand 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH BN_rand 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
.nh
.SH "NAME"
-BN_rand, BN_pseudo_rand \- generate pseudo\-random number
+BN_rand, BN_pseudo_rand, BN_rand_range, BN_pseudo_rand_range \- generate pseudo\-random number
.SH "SYNOPSIS"
.IX Header "SYNOPSIS"
.Vb 1
diff --git a/secure/lib/libcrypto/man/BN_set_bit.3 b/secure/lib/libcrypto/man/BN_set_bit.3
index 7e20ebe..7f62476 100644
--- a/secure/lib/libcrypto/man/BN_set_bit.3
+++ b/secure/lib/libcrypto/man/BN_set_bit.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "BN_set_bit 3"
-.TH BN_set_bit 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH BN_set_bit 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/BN_swap.3 b/secure/lib/libcrypto/man/BN_swap.3
index d4a4511..2a32dd8 100644
--- a/secure/lib/libcrypto/man/BN_swap.3
+++ b/secure/lib/libcrypto/man/BN_swap.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "BN_swap 3"
-.TH BN_swap 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH BN_swap 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/BN_zero.3 b/secure/lib/libcrypto/man/BN_zero.3
index ab6e8ea..51a71bb 100644
--- a/secure/lib/libcrypto/man/BN_zero.3
+++ b/secure/lib/libcrypto/man/BN_zero.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "BN_zero 3"
-.TH BN_zero 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH BN_zero 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/CMS_add0_cert.3 b/secure/lib/libcrypto/man/CMS_add0_cert.3
index 1553be8..155e9e3 100644
--- a/secure/lib/libcrypto/man/CMS_add0_cert.3
+++ b/secure/lib/libcrypto/man/CMS_add0_cert.3
@@ -133,15 +133,13 @@
.\" ========================================================================
.\"
.IX Title "CMS_add0_cert 3"
-.TH CMS_add0_cert 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH CMS_add0_cert 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
.nh
.SH "NAME"
-.Vb 1
-\& CMS_add0_cert, CMS_add1_cert, CMS_get1_certs, CMS_add0_crl, CMS_get1_crls, \- CMS certificate and CRL utility functions
-.Ve
+CMS_add0_cert, CMS_add1_cert, CMS_get1_certs, CMS_add0_crl, CMS_add1_crl, CMS_get1_crls, \- CMS certificate and CRL utility functions
.SH "SYNOPSIS"
.IX Header "SYNOPSIS"
.Vb 1
diff --git a/secure/lib/libcrypto/man/CMS_add1_recipient_cert.3 b/secure/lib/libcrypto/man/CMS_add1_recipient_cert.3
index 505f4ec..9e1d3b2 100644
--- a/secure/lib/libcrypto/man/CMS_add1_recipient_cert.3
+++ b/secure/lib/libcrypto/man/CMS_add1_recipient_cert.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "CMS_add1_recipient_cert 3"
-.TH CMS_add1_recipient_cert 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH CMS_add1_recipient_cert 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/CMS_add1_signer.3 b/secure/lib/libcrypto/man/CMS_add1_signer.3
index ddaecfc..5729bbc 100644
--- a/secure/lib/libcrypto/man/CMS_add1_signer.3
+++ b/secure/lib/libcrypto/man/CMS_add1_signer.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "CMS_add1_signer 3"
-.TH CMS_add1_signer 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH CMS_add1_signer 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/CMS_compress.3 b/secure/lib/libcrypto/man/CMS_compress.3
index ecd4611..fc29407 100644
--- a/secure/lib/libcrypto/man/CMS_compress.3
+++ b/secure/lib/libcrypto/man/CMS_compress.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "CMS_compress 3"
-.TH CMS_compress 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH CMS_compress 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/CMS_decrypt.3 b/secure/lib/libcrypto/man/CMS_decrypt.3
index fd3fa72..36e24fe 100644
--- a/secure/lib/libcrypto/man/CMS_decrypt.3
+++ b/secure/lib/libcrypto/man/CMS_decrypt.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "CMS_decrypt 3"
-.TH CMS_decrypt 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH CMS_decrypt 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/CMS_encrypt.3 b/secure/lib/libcrypto/man/CMS_encrypt.3
index 32398ae..34faa80 100644
--- a/secure/lib/libcrypto/man/CMS_encrypt.3
+++ b/secure/lib/libcrypto/man/CMS_encrypt.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "CMS_encrypt 3"
-.TH CMS_encrypt 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH CMS_encrypt 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/CMS_final.3 b/secure/lib/libcrypto/man/CMS_final.3
index cd043ae..a2b986b 100644
--- a/secure/lib/libcrypto/man/CMS_final.3
+++ b/secure/lib/libcrypto/man/CMS_final.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "CMS_final 3"
-.TH CMS_final 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH CMS_final 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/CMS_get0_RecipientInfos.3 b/secure/lib/libcrypto/man/CMS_get0_RecipientInfos.3
index ff2cb31..6945fe4 100644
--- a/secure/lib/libcrypto/man/CMS_get0_RecipientInfos.3
+++ b/secure/lib/libcrypto/man/CMS_get0_RecipientInfos.3
@@ -133,15 +133,13 @@
.\" ========================================================================
.\"
.IX Title "CMS_get0_RecipientInfos 3"
-.TH CMS_get0_RecipientInfos 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH CMS_get0_RecipientInfos 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
.nh
.SH "NAME"
-.Vb 1
-\& CMS_get0_RecipientInfos, CMS_RecipientInfo_type, CMS_RecipientInfo_ktri_get0_signer_id,CMS_RecipientInfo_ktri_cert_cmp, CMS_RecipientInfo_set0_pkey, CMS_RecipientInfo_kekri_get0_id, CMS_RecipientInfo_kekri_id_cmp, CMS_RecipientInfo_set0_key, CMS_RecipientInfo_decrypt \- CMS envelopedData RecipientInfo routines
-.Ve
+CMS_get0_RecipientInfos, CMS_RecipientInfo_type, CMS_RecipientInfo_ktri_get0_signer_id,CMS_RecipientInfo_ktri_cert_cmp, CMS_RecipientInfo_set0_pkey, CMS_RecipientInfo_kekri_get0_id, CMS_RecipientInfo_kekri_id_cmp, CMS_RecipientInfo_set0_key, CMS_RecipientInfo_decrypt, CMS_RecipientInfo_encrypt \- CMS envelopedData RecipientInfo routines
.SH "SYNOPSIS"
.IX Header "SYNOPSIS"
.Vb 1
@@ -159,6 +157,7 @@
\& int CMS_RecipientInfo_set0_key(CMS_RecipientInfo *ri, unsigned char *key, size_t keylen);
\&
\& int CMS_RecipientInfo_decrypt(CMS_ContentInfo *cms, CMS_RecipientInfo *ri);
+\& int CMS_RecipientInfo_encrypt(CMS_ContentInfo *cms, CMS_RecipientInfo *ri);
.Ve
.SH "DESCRIPTION"
.IX Header "DESCRIPTION"
@@ -204,6 +203,11 @@ successful and non zero if not.
\&\fICMS_RecipientInfo_decrypt()\fR attempts to decrypt CMS_RecipientInfo structure
\&\fBri\fR in structure \fBcms\fR. A key must have been associated with the structure
first.
+.PP
+\&\fICMS_RecipientInfo_encrypt()\fR attempts to encrypt CMS_RecipientInfo structure
+\&\fBri\fR in structure \fBcms\fR. A key must have been associated with the structure
+first and the content encryption key must be available: for example by a
+previous call to \fICMS_RecipientInfo_decrypt()\fR.
.SH "NOTES"
.IX Header "NOTES"
The main purpose of these functions is to enable an application to lookup
@@ -218,6 +222,13 @@ function. Then if the corresponding secret or private key can be obtained by
any appropriate means it can then associated with the structure and
\&\fICMS_RecpientInfo_decrypt()\fR called. If successful \fICMS_decrypt()\fR can be called
with a \s-1NULL\s0 key to decrypt the enveloped content.
+.PP
+The \fICMS_RecipientInfo_encrypt()\fR can be used to add a new recipient to an
+existing enveloped data structure. Typically an application will first decrypt
+an appropriate CMS_RecipientInfo structure to make the content encrypt key
+available, it will then add a new recipient using a function such as
+\&\fICMS_add1_recipient_cert()\fR and finally encrypt the content encryption key
+using \fICMS_RecipientInfo_encrypt()\fR.
.SH "RETURN VALUES"
.IX Header "RETURN VALUES"
\&\fICMS_get0_RecipientInfos()\fR returns all CMS_RecipientInfo structures, or \s-1NULL\s0 if
@@ -226,6 +237,7 @@ an error occurs.
\&\fICMS_RecipientInfo_ktri_get0_signer_id()\fR, \fICMS_RecipientInfo_set0_pkey()\fR,
\&\fICMS_RecipientInfo_kekri_get0_id()\fR, \fICMS_RecipientInfo_set0_key()\fR and
\&\fICMS_RecipientInfo_decrypt()\fR return 1 for success or 0 if an error occurs.
+\&\fICMS_RecipientInfo_encrypt()\fR return 1 for success or 0 if an error occurs.
.PP
\&\fICMS_RecipientInfo_ktri_cert_cmp()\fR and \fICMS_RecipientInfo_kekri_cmp()\fR return 0
for a successful comparison and non zero otherwise.
diff --git a/secure/lib/libcrypto/man/CMS_get0_SignerInfos.3 b/secure/lib/libcrypto/man/CMS_get0_SignerInfos.3
index 2b9265f..364fa87 100644
--- a/secure/lib/libcrypto/man/CMS_get0_SignerInfos.3
+++ b/secure/lib/libcrypto/man/CMS_get0_SignerInfos.3
@@ -133,15 +133,13 @@
.\" ========================================================================
.\"
.IX Title "CMS_get0_SignerInfos 3"
-.TH CMS_get0_SignerInfos 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH CMS_get0_SignerInfos 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
.nh
.SH "NAME"
-.Vb 1
-\& CMS_get0_SignerInfos, CMS_SignerInfo_get0_signer_id, CMS_SignerInfo_cert_cmp, CMS_set1_signer_certs \- CMS signedData signer functions.
-.Ve
+CMS_get0_SignerInfos, CMS_SignerInfo_get0_signer_id, CMS_SignerInfo_get0_signature, CMS_SignerInfo_cert_cmp, CMS_set1_signer_cert \- CMS signedData signer functions.
.SH "SYNOPSIS"
.IX Header "SYNOPSIS"
.Vb 1
@@ -150,6 +148,7 @@
\& STACK_OF(CMS_SignerInfo) *CMS_get0_SignerInfos(CMS_ContentInfo *cms);
\&
\& int CMS_SignerInfo_get0_signer_id(CMS_SignerInfo *si, ASN1_OCTET_STRING **keyid, X509_NAME **issuer, ASN1_INTEGER **sno);
+\& ASN1_OCTET_STRING *CMS_SignerInfo_get0_signature(CMS_SignerInfo *si);
\& int CMS_SignerInfo_cert_cmp(CMS_SignerInfo *si, X509 *cert);
\& void CMS_SignerInfo_set1_signer_cert(CMS_SignerInfo *si, X509 *signer);
.Ve
@@ -163,6 +162,11 @@ associated with a specific CMS_SignerInfo structure \fBsi\fR. Either the
keyidentifier will be set in \fBkeyid\fR or \fBboth\fR issuer name and serial number
in \fBissuer\fR and \fBsno\fR.
.PP
+\&\fICMS_SignerInfo_get0_signature()\fR retrieves the signature associated with
+\&\fBsi\fR in a pointer to an \s-1ASN1_OCTET_STRING\s0 structure. This pointer returned
+corresponds to the internal signature value if \fBsi\fR so it may be read or
+modified.
+.PP
\&\fICMS_SignerInfo_cert_cmp()\fR compares the certificate \fBcert\fR against the signer
identifier \fBsi\fR. It returns zero if the comparison is successful and non zero
if not.
diff --git a/secure/lib/libcrypto/man/CMS_get0_type.3 b/secure/lib/libcrypto/man/CMS_get0_type.3
index a977393..2d552c2 100644
--- a/secure/lib/libcrypto/man/CMS_get0_type.3
+++ b/secure/lib/libcrypto/man/CMS_get0_type.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "CMS_get0_type 3"
-.TH CMS_get0_type 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH CMS_get0_type 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/CMS_get1_ReceiptRequest.3 b/secure/lib/libcrypto/man/CMS_get1_ReceiptRequest.3
index 52ffa53..14bc08b 100644
--- a/secure/lib/libcrypto/man/CMS_get1_ReceiptRequest.3
+++ b/secure/lib/libcrypto/man/CMS_get1_ReceiptRequest.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "CMS_get1_ReceiptRequest 3"
-.TH CMS_get1_ReceiptRequest 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH CMS_get1_ReceiptRequest 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/CMS_sign.3 b/secure/lib/libcrypto/man/CMS_sign.3
index 1b1fdfe..133362e 100644
--- a/secure/lib/libcrypto/man/CMS_sign.3
+++ b/secure/lib/libcrypto/man/CMS_sign.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "CMS_sign 3"
-.TH CMS_sign 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH CMS_sign 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/CMS_sign_receipt.3 b/secure/lib/libcrypto/man/CMS_sign_receipt.3
index 98372e0..f757976 100644
--- a/secure/lib/libcrypto/man/CMS_sign_receipt.3
+++ b/secure/lib/libcrypto/man/CMS_sign_receipt.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "CMS_sign_receipt 3"
-.TH CMS_sign_receipt 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH CMS_sign_receipt 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/CMS_uncompress.3 b/secure/lib/libcrypto/man/CMS_uncompress.3
index 5fd9e70..4a75752 100644
--- a/secure/lib/libcrypto/man/CMS_uncompress.3
+++ b/secure/lib/libcrypto/man/CMS_uncompress.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "CMS_uncompress 3"
-.TH CMS_uncompress 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH CMS_uncompress 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/CMS_verify.3 b/secure/lib/libcrypto/man/CMS_verify.3
index 088ee45..7572718 100644
--- a/secure/lib/libcrypto/man/CMS_verify.3
+++ b/secure/lib/libcrypto/man/CMS_verify.3
@@ -133,15 +133,13 @@
.\" ========================================================================
.\"
.IX Title "CMS_verify 3"
-.TH CMS_verify 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH CMS_verify 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
.nh
.SH "NAME"
-.Vb 1
-\& CMS_verify \- verify a CMS SignedData structure
-.Ve
+CMS_verify, CMS_get0_signers \- verify a CMS SignedData structure
.SH "SYNOPSIS"
.IX Header "SYNOPSIS"
.Vb 1
diff --git a/secure/lib/libcrypto/man/CMS_verify_receipt.3 b/secure/lib/libcrypto/man/CMS_verify_receipt.3
index d618959..f941405 100644
--- a/secure/lib/libcrypto/man/CMS_verify_receipt.3
+++ b/secure/lib/libcrypto/man/CMS_verify_receipt.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "CMS_verify_receipt 3"
-.TH CMS_verify_receipt 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH CMS_verify_receipt 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/CONF_modules_free.3 b/secure/lib/libcrypto/man/CONF_modules_free.3
index 5e99d8e..3ed0b47 100644
--- a/secure/lib/libcrypto/man/CONF_modules_free.3
+++ b/secure/lib/libcrypto/man/CONF_modules_free.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "CONF_modules_free 3"
-.TH CONF_modules_free 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH CONF_modules_free 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/CONF_modules_load_file.3 b/secure/lib/libcrypto/man/CONF_modules_load_file.3
index 222d832..c5be2a2 100644
--- a/secure/lib/libcrypto/man/CONF_modules_load_file.3
+++ b/secure/lib/libcrypto/man/CONF_modules_load_file.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "CONF_modules_load_file 3"
-.TH CONF_modules_load_file 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH CONF_modules_load_file 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/CRYPTO_set_ex_data.3 b/secure/lib/libcrypto/man/CRYPTO_set_ex_data.3
index 1abdb16..0df3708 100644
--- a/secure/lib/libcrypto/man/CRYPTO_set_ex_data.3
+++ b/secure/lib/libcrypto/man/CRYPTO_set_ex_data.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "CRYPTO_set_ex_data 3"
-.TH CRYPTO_set_ex_data 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH CRYPTO_set_ex_data 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/DH_generate_key.3 b/secure/lib/libcrypto/man/DH_generate_key.3
index dd63e80..db22819 100644
--- a/secure/lib/libcrypto/man/DH_generate_key.3
+++ b/secure/lib/libcrypto/man/DH_generate_key.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "DH_generate_key 3"
-.TH DH_generate_key 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH DH_generate_key 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/DH_generate_parameters.3 b/secure/lib/libcrypto/man/DH_generate_parameters.3
index d217bb0..f4dd262e 100644
--- a/secure/lib/libcrypto/man/DH_generate_parameters.3
+++ b/secure/lib/libcrypto/man/DH_generate_parameters.3
@@ -133,38 +133,46 @@
.\" ========================================================================
.\"
.IX Title "DH_generate_parameters 3"
-.TH DH_generate_parameters 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH DH_generate_parameters 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
.nh
.SH "NAME"
-DH_generate_parameters, DH_check \- generate and check Diffie\-Hellman parameters
+DH_generate_parameters_ex, DH_generate_parameters,
+DH_check \- generate and check Diffie\-Hellman parameters
.SH "SYNOPSIS"
.IX Header "SYNOPSIS"
.Vb 1
\& #include <openssl/dh.h>
\&
-\& DH *DH_generate_parameters(int prime_len, int generator,
-\& void (*callback)(int, int, void *), void *cb_arg);
+\& int DH_generate_parameters_ex(DH *dh, int prime_len,int generator, BN_GENCB *cb);
\&
\& int DH_check(DH *dh, int *codes);
.Ve
+.PP
+Deprecated:
+.PP
+.Vb 2
+\& DH *DH_generate_parameters(int prime_len, int generator,
+\& void (*callback)(int, int, void *), void *cb_arg);
+.Ve
.SH "DESCRIPTION"
.IX Header "DESCRIPTION"
-\&\fIDH_generate_parameters()\fR generates Diffie-Hellman parameters that can
-be shared among a group of users, and returns them in a newly
-allocated \fB\s-1DH\s0\fR structure. The pseudo-random number generator must be
+\&\fIDH_generate_parameters_ex()\fR generates Diffie-Hellman parameters that can
+be shared among a group of users, and stores them in the provided \fB\s-1DH\s0\fR
+structure. The pseudo-random number generator must be
seeded prior to calling \fIDH_generate_parameters()\fR.
.PP
\&\fBprime_len\fR is the length in bits of the safe prime to be generated.
\&\fBgenerator\fR is a small number > 1, typically 2 or 5.
.PP
A callback function may be used to provide feedback about the progress
-of the key generation. If \fBcallback\fR is not \fB\s-1NULL\s0\fR, it will be
+of the key generation. If \fBcb\fR is not \fB\s-1NULL\s0\fR, it will be
called as described in \fIBN_generate_prime\fR\|(3) while a random prime
-number is generated, and when a prime has been found, \fBcallback(3,
-0, cb_arg)\fR is called.
+number is generated, and when a prime has been found, \fBBN_GENCB_call(cb, 3, 0)\fR
+is called. See \fIBN_generate_prime\fR\|(3) for information on
+the \fIBN_GENCB_call()\fR function.
.PP
\&\fIDH_check()\fR validates Diffie-Hellman parameters. It checks that \fBp\fR is
a safe prime, and that \fBg\fR is a suitable generator. In the case of an
@@ -174,18 +182,20 @@ error, the bit flags \s-1DH_CHECK_P_NOT_SAFE_PRIME\s0 or
checked, i.e. it does not equal 2 or 5.
.SH "RETURN VALUES"
.IX Header "RETURN VALUES"
-\&\fIDH_generate_parameters()\fR returns a pointer to the \s-1DH\s0 structure, or
-\&\s-1NULL\s0 if the parameter generation fails. The error codes can be
-obtained by \fIERR_get_error\fR\|(3).
+\&\fIDH_generate_parameters_ex()\fR and \fIDH_check()\fR return 1 if the check could be
+performed, 0 otherwise.
+.PP
+\&\fIDH_generate_parameters()\fR (deprecated) returns a pointer to the \s-1DH\s0 structure, or
+\&\s-1NULL\s0 if the parameter generation fails.
.PP
-\&\fIDH_check()\fR returns 1 if the check could be performed, 0 otherwise.
+The error codes can be obtained by \fIERR_get_error\fR\|(3).
.SH "NOTES"
.IX Header "NOTES"
-\&\fIDH_generate_parameters()\fR may run for several hours before finding a
-suitable prime.
+\&\fIDH_generate_parameters_ex()\fR and \fIDH_generate_parameters()\fR may run for several
+hours before finding a suitable prime.
.PP
-The parameters generated by \fIDH_generate_parameters()\fR are not to be
-used in signature schemes.
+The parameters generated by \fIDH_generate_parameters_ex()\fR and \fIDH_generate_parameters()\fR
+are not to be used in signature schemes.
.SH "BUGS"
.IX Header "BUGS"
If \fBgenerator\fR is not 2 or 5, \fBdh\->g\fR=\fBgenerator\fR is not
diff --git a/secure/lib/libcrypto/man/DH_get_ex_new_index.3 b/secure/lib/libcrypto/man/DH_get_ex_new_index.3
index e145ff3..b1b57c7 100644
--- a/secure/lib/libcrypto/man/DH_get_ex_new_index.3
+++ b/secure/lib/libcrypto/man/DH_get_ex_new_index.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "DH_get_ex_new_index 3"
-.TH DH_get_ex_new_index 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH DH_get_ex_new_index 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/DH_new.3 b/secure/lib/libcrypto/man/DH_new.3
index ba35c41..7d29964 100644
--- a/secure/lib/libcrypto/man/DH_new.3
+++ b/secure/lib/libcrypto/man/DH_new.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "DH_new 3"
-.TH DH_new 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH DH_new 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/DH_set_method.3 b/secure/lib/libcrypto/man/DH_set_method.3
index 327ad6b..2032e91 100644
--- a/secure/lib/libcrypto/man/DH_set_method.3
+++ b/secure/lib/libcrypto/man/DH_set_method.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "DH_set_method 3"
-.TH DH_set_method 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH DH_set_method 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/DH_size.3 b/secure/lib/libcrypto/man/DH_size.3
index 610af44..388e335 100644
--- a/secure/lib/libcrypto/man/DH_size.3
+++ b/secure/lib/libcrypto/man/DH_size.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "DH_size 3"
-.TH DH_size 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH DH_size 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/DSA_SIG_new.3 b/secure/lib/libcrypto/man/DSA_SIG_new.3
index 707f760..7c32203 100644
--- a/secure/lib/libcrypto/man/DSA_SIG_new.3
+++ b/secure/lib/libcrypto/man/DSA_SIG_new.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "DSA_SIG_new 3"
-.TH DSA_SIG_new 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH DSA_SIG_new 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/DSA_do_sign.3 b/secure/lib/libcrypto/man/DSA_do_sign.3
index bf54098..35ee6a6 100644
--- a/secure/lib/libcrypto/man/DSA_do_sign.3
+++ b/secure/lib/libcrypto/man/DSA_do_sign.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "DSA_do_sign 3"
-.TH DSA_do_sign 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH DSA_do_sign 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/DSA_dup_DH.3 b/secure/lib/libcrypto/man/DSA_dup_DH.3
index bce717f..08e499a 100644
--- a/secure/lib/libcrypto/man/DSA_dup_DH.3
+++ b/secure/lib/libcrypto/man/DSA_dup_DH.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "DSA_dup_DH 3"
-.TH DSA_dup_DH 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH DSA_dup_DH 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/DSA_generate_key.3 b/secure/lib/libcrypto/man/DSA_generate_key.3
index 9e2ac1c..f87545f 100644
--- a/secure/lib/libcrypto/man/DSA_generate_key.3
+++ b/secure/lib/libcrypto/man/DSA_generate_key.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "DSA_generate_key 3"
-.TH DSA_generate_key 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH DSA_generate_key 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/DSA_generate_parameters.3 b/secure/lib/libcrypto/man/DSA_generate_parameters.3
index 6ffe950..f41c6b8 100644
--- a/secure/lib/libcrypto/man/DSA_generate_parameters.3
+++ b/secure/lib/libcrypto/man/DSA_generate_parameters.3
@@ -133,26 +133,34 @@
.\" ========================================================================
.\"
.IX Title "DSA_generate_parameters 3"
-.TH DSA_generate_parameters 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH DSA_generate_parameters 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
.nh
.SH "NAME"
-DSA_generate_parameters \- generate DSA parameters
+DSA_generate_parameters_ex, DSA_generate_parameters \- generate DSA parameters
.SH "SYNOPSIS"
.IX Header "SYNOPSIS"
.Vb 1
\& #include <openssl/dsa.h>
\&
+\& int DSA_generate_parameters_ex(DSA *dsa, int bits,
+\& const unsigned char *seed,int seed_len,
+\& int *counter_ret, unsigned long *h_ret, BN_GENCB *cb);
+.Ve
+.PP
+Deprecated:
+.PP
+.Vb 3
\& DSA *DSA_generate_parameters(int bits, unsigned char *seed,
\& int seed_len, int *counter_ret, unsigned long *h_ret,
\& void (*callback)(int, int, void *), void *cb_arg);
.Ve
.SH "DESCRIPTION"
.IX Header "DESCRIPTION"
-\&\fIDSA_generate_parameters()\fR generates primes p and q and a generator g
-for use in the \s-1DSA.\s0
+\&\fIDSA_generate_parameters_ex()\fR generates primes p and q and a generator g
+for use in the \s-1DSA\s0 and stores the result in \fBdsa\fR.
.PP
\&\fBbits\fR is the length of the prime to be generated; the \s-1DSS\s0 allows a
maximum of 1024 bits.
@@ -162,52 +170,62 @@ generated at random. Otherwise, the seed is used to generate
them. If the given seed does not yield a prime q, a new random
seed is chosen and placed at \fBseed\fR.
.PP
-\&\fIDSA_generate_parameters()\fR places the iteration count in
+\&\fIDSA_generate_parameters_ex()\fR places the iteration count in
*\fBcounter_ret\fR and a counter used for finding a generator in
*\fBh_ret\fR, unless these are \fB\s-1NULL\s0\fR.
.PP
A callback function may be used to provide feedback about the progress
-of the key generation. If \fBcallback\fR is not \fB\s-1NULL\s0\fR, it will be
-called as follows:
+of the key generation. If \fBcb\fR is not \fB\s-1NULL\s0\fR, it will be
+called as shown below. For information on the \s-1BN_GENCB\s0 structure and the
+BN_GENCB_call function discussed below, refer to
+\&\fIBN_generate_prime\fR\|(3).
.IP "\(bu" 4
-When a candidate for q is generated, \fBcallback(0, m++, cb_arg)\fR is called
+When a candidate for q is generated, \fBBN_GENCB_call(cb, 0, m++)\fR is called
(m is 0 for the first candidate).
.IP "\(bu" 4
When a candidate for q has passed a test by trial division,
-\&\fBcallback(1, \-1, cb_arg)\fR is called.
+\&\fBBN_GENCB_call(cb, 1, \-1)\fR is called.
While a candidate for q is tested by Miller-Rabin primality tests,
-\&\fBcallback(1, i, cb_arg)\fR is called in the outer loop
+\&\fBBN_GENCB_call(cb, 1, i)\fR is called in the outer loop
(once for each witness that confirms that the candidate may be prime);
i is the loop counter (starting at 0).
.IP "\(bu" 4
-When a prime q has been found, \fBcallback(2, 0, cb_arg)\fR and
-\&\fBcallback(3, 0, cb_arg)\fR are called.
+When a prime q has been found, \fBBN_GENCB_call(cb, 2, 0)\fR and
+\&\fBBN_GENCB_call(cb, 3, 0)\fR are called.
.IP "\(bu" 4
Before a candidate for p (other than the first) is generated and tested,
-\&\fBcallback(0, counter, cb_arg)\fR is called.
+\&\fBBN_GENCB_call(cb, 0, counter)\fR is called.
.IP "\(bu" 4
When a candidate for p has passed the test by trial division,
-\&\fBcallback(1, \-1, cb_arg)\fR is called.
+\&\fBBN_GENCB_call(cb, 1, \-1)\fR is called.
While it is tested by the Miller-Rabin primality test,
-\&\fBcallback(1, i, cb_arg)\fR is called in the outer loop
+\&\fBBN_GENCB_call(cb, 1, i)\fR is called in the outer loop
(once for each witness that confirms that the candidate may be prime).
i is the loop counter (starting at 0).
.IP "\(bu" 4
-When p has been found, \fBcallback(2, 1, cb_arg)\fR is called.
+When p has been found, \fBBN_GENCB_call(cb, 2, 1)\fR is called.
.IP "\(bu" 4
-When the generator has been found, \fBcallback(3, 1, cb_arg)\fR is called.
+When the generator has been found, \fBBN_GENCB_call(cb, 3, 1)\fR is called.
+.PP
+\&\fIDSA_generate_parameters()\fR (deprecated) works in much the same way as for DSA_generate_parameters_ex, except that no \fBdsa\fR parameter is passed and
+instead a newly allocated \fB\s-1DSA\s0\fR structure is returned. Additionally \*(L"old
+style\*(R" callbacks are used instead of the newer \s-1BN_GENCB\s0 based approach.
+Refer to \fIBN_generate_prime\fR\|(3) for further information.
.SH "RETURN VALUE"
.IX Header "RETURN VALUE"
+\&\fIDSA_generate_parameters_ex()\fR returns a 1 on success, or 0 otherwise.
+.PP
\&\fIDSA_generate_parameters()\fR returns a pointer to the \s-1DSA\s0 structure, or
-\&\fB\s-1NULL\s0\fR if the parameter generation fails. The error codes can be
-obtained by \fIERR_get_error\fR\|(3).
+\&\fB\s-1NULL\s0\fR if the parameter generation fails.
+.PP
+The error codes can be obtained by \fIERR_get_error\fR\|(3).
.SH "BUGS"
.IX Header "BUGS"
Seed lengths > 20 are not supported.
.SH "SEE ALSO"
.IX Header "SEE ALSO"
\&\fIdsa\fR\|(3), \fIERR_get_error\fR\|(3), \fIrand\fR\|(3),
-\&\fIDSA_free\fR\|(3)
+\&\fIDSA_free\fR\|(3), \fIBN_generate_prime\fR\|(3)
.SH "HISTORY"
.IX Header "HISTORY"
\&\fIDSA_generate_parameters()\fR appeared in SSLeay 0.8. The \fBcb_arg\fR
diff --git a/secure/lib/libcrypto/man/DSA_get_ex_new_index.3 b/secure/lib/libcrypto/man/DSA_get_ex_new_index.3
index 69cc05d..6124470 100644
--- a/secure/lib/libcrypto/man/DSA_get_ex_new_index.3
+++ b/secure/lib/libcrypto/man/DSA_get_ex_new_index.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "DSA_get_ex_new_index 3"
-.TH DSA_get_ex_new_index 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH DSA_get_ex_new_index 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/DSA_new.3 b/secure/lib/libcrypto/man/DSA_new.3
index 9d91fb2..9c29d65 100644
--- a/secure/lib/libcrypto/man/DSA_new.3
+++ b/secure/lib/libcrypto/man/DSA_new.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "DSA_new 3"
-.TH DSA_new 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH DSA_new 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/DSA_set_method.3 b/secure/lib/libcrypto/man/DSA_set_method.3
index 706ecf1..280706d 100644
--- a/secure/lib/libcrypto/man/DSA_set_method.3
+++ b/secure/lib/libcrypto/man/DSA_set_method.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "DSA_set_method 3"
-.TH DSA_set_method 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH DSA_set_method 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/DSA_sign.3 b/secure/lib/libcrypto/man/DSA_sign.3
index 636dc2e..b555ef7 100644
--- a/secure/lib/libcrypto/man/DSA_sign.3
+++ b/secure/lib/libcrypto/man/DSA_sign.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "DSA_sign 3"
-.TH DSA_sign 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH DSA_sign 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/DSA_size.3 b/secure/lib/libcrypto/man/DSA_size.3
index 485cc77..3ecdac7 100644
--- a/secure/lib/libcrypto/man/DSA_size.3
+++ b/secure/lib/libcrypto/man/DSA_size.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "DSA_size 3"
-.TH DSA_size 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH DSA_size 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/EC_GFp_simple_method.3 b/secure/lib/libcrypto/man/EC_GFp_simple_method.3
new file mode 100644
index 0000000..703b27f
--- /dev/null
+++ b/secure/lib/libcrypto/man/EC_GFp_simple_method.3
@@ -0,0 +1,193 @@
+.\" Automatically generated by Pod::Man 2.28 (Pod::Simple 3.30)
+.\"
+.\" Standard preamble:
+.\" ========================================================================
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Vb \" Begin verbatim text
+.ft CW
+.nf
+.ne \\$1
+..
+.de Ve \" End verbatim text
+.ft R
+.fi
+..
+.\" Set up some character translations and predefined strings. \*(-- will
+.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
+.\" double quote, and \*(R" will give a right double quote. \*(C+ will
+.\" give a nicer C++. Capital omega is used to do unbreakable dashes and
+.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff,
+.\" nothing in troff, for use with C<>.
+.tr \(*W-
+.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
+.ie n \{\
+. ds -- \(*W-
+. ds PI pi
+. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
+. ds L" ""
+. ds R" ""
+. ds C` ""
+. ds C' ""
+'br\}
+.el\{\
+. ds -- \|\(em\|
+. ds PI \(*p
+. ds L" ``
+. ds R" ''
+. ds C`
+. ds C'
+'br\}
+.\"
+.\" Escape single quotes in literal strings from groff's Unicode transform.
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\"
+.\" If the F register is turned on, we'll generate index entries on stderr for
+.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
+.\" entries marked with X<> in POD. Of course, you'll have to process the
+.\" output yourself in some meaningful fashion.
+.\"
+.\" Avoid warning from groff about undefined register 'F'.
+.de IX
+..
+.nr rF 0
+.if \n(.g .if rF .nr rF 1
+.if (\n(rF:(\n(.g==0)) \{
+. if \nF \{
+. de IX
+. tm Index:\\$1\t\\n%\t"\\$2"
+..
+. if !\nF==2 \{
+. nr % 0
+. nr F 2
+. \}
+. \}
+.\}
+.rr rF
+.\"
+.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
+.\" Fear. Run. Save yourself. No user-serviceable parts.
+. \" fudge factors for nroff and troff
+.if n \{\
+. ds #H 0
+. ds #V .8m
+. ds #F .3m
+. ds #[ \f1
+. ds #] \fP
+.\}
+.if t \{\
+. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+. ds #V .6m
+. ds #F 0
+. ds #[ \&
+. ds #] \&
+.\}
+. \" simple accents for nroff and troff
+.if n \{\
+. ds ' \&
+. ds ` \&
+. ds ^ \&
+. ds , \&
+. ds ~ ~
+. ds /
+.\}
+.if t \{\
+. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
+.\}
+. \" troff and (daisy-wheel) nroff accents
+.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
+.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
+.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
+.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
+.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
+.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
+.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
+.ds ae a\h'-(\w'a'u*4/10)'e
+.ds Ae A\h'-(\w'A'u*4/10)'E
+. \" corrections for vroff
+.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
+.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
+. \" for low resolution devices (crt and lpr)
+.if \n(.H>23 .if \n(.V>19 \
+\{\
+. ds : e
+. ds 8 ss
+. ds o a
+. ds d- d\h'-1'\(ga
+. ds D- D\h'-1'\(hy
+. ds th \o'bp'
+. ds Th \o'LP'
+. ds ae ae
+. ds Ae AE
+.\}
+.rm #[ #] #H #V #F C
+.\" ========================================================================
+.\"
+.IX Title "EC_GFp_simple_method 3"
+.TH EC_GFp_simple_method 3 "2015-07-09" "1.0.2d" "OpenSSL"
+.\" For nroff, turn off justification. Always turn off hyphenation; it makes
+.\" way too many mistakes in technical documents.
+.if n .ad l
+.nh
+.SH "NAME"
+EC_GFp_simple_method, EC_GFp_mont_method, EC_GFp_nist_method, EC_GFp_nistp224_method, EC_GFp_nistp256_method, EC_GFp_nistp521_method, EC_GF2m_simple_method, EC_METHOD_get_field_type \- Functions for obtaining EC_METHOD objects.
+.SH "SYNOPSIS"
+.IX Header "SYNOPSIS"
+.Vb 1
+\& #include <openssl/ec.h>
+\&
+\& const EC_METHOD *EC_GFp_simple_method(void);
+\& const EC_METHOD *EC_GFp_mont_method(void);
+\& const EC_METHOD *EC_GFp_nist_method(void);
+\& const EC_METHOD *EC_GFp_nistp224_method(void);
+\& const EC_METHOD *EC_GFp_nistp256_method(void);
+\& const EC_METHOD *EC_GFp_nistp521_method(void);
+\&
+\& const EC_METHOD *EC_GF2m_simple_method(void);
+\&
+\& int EC_METHOD_get_field_type(const EC_METHOD *meth);
+.Ve
+.SH "DESCRIPTION"
+.IX Header "DESCRIPTION"
+The Elliptic Curve library provides a number of different implementations through a single common interface.
+When constructing a curve using EC_GROUP_new (see \fIEC_GROUP_new\fR\|(3)) an
+implementation method must be provided. The functions described here all return a const pointer to an
+\&\fB\s-1EC_METHOD\s0\fR structure that can be passed to \s-1EC_GROUP_NEW.\s0 It is important that the correct implementation
+type for the form of curve selected is used.
+.PP
+For F2^m curves there is only one implementation choice, i.e. EC_GF2_simple_method.
+.PP
+For Fp curves the lowest common denominator implementation is the EC_GFp_simple_method implementation. All
+other implementations are based on this one. EC_GFp_mont_method builds on EC_GFp_simple_method but adds the
+use of montgomery multiplication (see \fIBN_mod_mul_montgomery\fR\|(3)). EC_GFp_nist_method
+offers an implementation optimised for use with \s-1NIST\s0 recommended curves (\s-1NIST\s0 curves are available through
+EC_GROUP_new_by_curve_name as described in \fIEC_GROUP_new\fR\|(3)).
+.PP
+The functions EC_GFp_nistp224_method, EC_GFp_nistp256_method and EC_GFp_nistp521_method offer 64 bit
+optimised implementations for the \s-1NIST P224, P256\s0 and P521 curves respectively. Note, however, that these
+implementations are not available on all platforms.
+.PP
+EC_METHOD_get_field_type identifies what type of field the \s-1EC_METHOD\s0 structure supports, which will be either
+F2^m or Fp. If the field type is Fp then the value \fBNID_X9_62_prime_field\fR is returned. If the field type is
+F2^m then the value \fBNID_X9_62_characteristic_two_field\fR is returned. These values are defined in the
+obj_mac.h header file.
+.SH "RETURN VALUES"
+.IX Header "RETURN VALUES"
+All EC_GFp* functions and EC_GF2m_simple_method always return a const pointer to an \s-1EC_METHOD\s0 structure.
+.PP
+EC_METHOD_get_field_type returns an integer that identifies the type of field the \s-1EC_METHOD\s0 structure supports.
+.SH "SEE ALSO"
+.IX Header "SEE ALSO"
+\&\fIcrypto\fR\|(3), \fIec\fR\|(3), \fIEC_GROUP_new\fR\|(3), \fIEC_GROUP_copy\fR\|(3),
+\&\fIEC_POINT_new\fR\|(3), \fIEC_POINT_add\fR\|(3), \fIEC_KEY_new\fR\|(3),
+\&\fId2i_ECPKParameters\fR\|(3),
+\&\fIBN_mod_mul_montgomery\fR\|(3)
diff --git a/secure/lib/libcrypto/man/EC_GROUP_copy.3 b/secure/lib/libcrypto/man/EC_GROUP_copy.3
new file mode 100644
index 0000000..6bed833
--- /dev/null
+++ b/secure/lib/libcrypto/man/EC_GROUP_copy.3
@@ -0,0 +1,308 @@
+.\" Automatically generated by Pod::Man 2.28 (Pod::Simple 3.30)
+.\"
+.\" Standard preamble:
+.\" ========================================================================
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Vb \" Begin verbatim text
+.ft CW
+.nf
+.ne \\$1
+..
+.de Ve \" End verbatim text
+.ft R
+.fi
+..
+.\" Set up some character translations and predefined strings. \*(-- will
+.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
+.\" double quote, and \*(R" will give a right double quote. \*(C+ will
+.\" give a nicer C++. Capital omega is used to do unbreakable dashes and
+.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff,
+.\" nothing in troff, for use with C<>.
+.tr \(*W-
+.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
+.ie n \{\
+. ds -- \(*W-
+. ds PI pi
+. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
+. ds L" ""
+. ds R" ""
+. ds C` ""
+. ds C' ""
+'br\}
+.el\{\
+. ds -- \|\(em\|
+. ds PI \(*p
+. ds L" ``
+. ds R" ''
+. ds C`
+. ds C'
+'br\}
+.\"
+.\" Escape single quotes in literal strings from groff's Unicode transform.
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\"
+.\" If the F register is turned on, we'll generate index entries on stderr for
+.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
+.\" entries marked with X<> in POD. Of course, you'll have to process the
+.\" output yourself in some meaningful fashion.
+.\"
+.\" Avoid warning from groff about undefined register 'F'.
+.de IX
+..
+.nr rF 0
+.if \n(.g .if rF .nr rF 1
+.if (\n(rF:(\n(.g==0)) \{
+. if \nF \{
+. de IX
+. tm Index:\\$1\t\\n%\t"\\$2"
+..
+. if !\nF==2 \{
+. nr % 0
+. nr F 2
+. \}
+. \}
+.\}
+.rr rF
+.\"
+.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
+.\" Fear. Run. Save yourself. No user-serviceable parts.
+. \" fudge factors for nroff and troff
+.if n \{\
+. ds #H 0
+. ds #V .8m
+. ds #F .3m
+. ds #[ \f1
+. ds #] \fP
+.\}
+.if t \{\
+. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+. ds #V .6m
+. ds #F 0
+. ds #[ \&
+. ds #] \&
+.\}
+. \" simple accents for nroff and troff
+.if n \{\
+. ds ' \&
+. ds ` \&
+. ds ^ \&
+. ds , \&
+. ds ~ ~
+. ds /
+.\}
+.if t \{\
+. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
+.\}
+. \" troff and (daisy-wheel) nroff accents
+.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
+.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
+.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
+.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
+.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
+.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
+.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
+.ds ae a\h'-(\w'a'u*4/10)'e
+.ds Ae A\h'-(\w'A'u*4/10)'E
+. \" corrections for vroff
+.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
+.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
+. \" for low resolution devices (crt and lpr)
+.if \n(.H>23 .if \n(.V>19 \
+\{\
+. ds : e
+. ds 8 ss
+. ds o a
+. ds d- d\h'-1'\(ga
+. ds D- D\h'-1'\(hy
+. ds th \o'bp'
+. ds Th \o'LP'
+. ds ae ae
+. ds Ae AE
+.\}
+.rm #[ #] #H #V #F C
+.\" ========================================================================
+.\"
+.IX Title "EC_GROUP_copy 3"
+.TH EC_GROUP_copy 3 "2015-07-09" "1.0.2d" "OpenSSL"
+.\" For nroff, turn off justification. Always turn off hyphenation; it makes
+.\" way too many mistakes in technical documents.
+.if n .ad l
+.nh
+.SH "NAME"
+EC_GROUP_copy, EC_GROUP_dup, EC_GROUP_method_of, EC_GROUP_set_generator, EC_GROUP_get0_generator, EC_GROUP_get_order, EC_GROUP_get_cofactor, EC_GROUP_set_curve_name, EC_GROUP_get_curve_name, EC_GROUP_set_asn1_flag, EC_GROUP_get_asn1_flag, EC_GROUP_set_point_conversion_form, EC_GROUP_get_point_conversion_form, EC_GROUP_get0_seed, EC_GROUP_get_seed_len, EC_GROUP_set_seed, EC_GROUP_get_degree, EC_GROUP_check, EC_GROUP_check_discriminant, EC_GROUP_cmp, EC_GROUP_get_basis_type, EC_GROUP_get_trinomial_basis, EC_GROUP_get_pentanomial_basis \- Functions for manipulating EC_GROUP objects.
+.SH "SYNOPSIS"
+.IX Header "SYNOPSIS"
+.Vb 2
+\& #include <openssl/ec.h>
+\& #include <openssl/bn.h>
+\&
+\& int EC_GROUP_copy(EC_GROUP *dst, const EC_GROUP *src);
+\& EC_GROUP *EC_GROUP_dup(const EC_GROUP *src);
+\&
+\& const EC_METHOD *EC_GROUP_method_of(const EC_GROUP *group);
+\&
+\& int EC_GROUP_set_generator(EC_GROUP *group, const EC_POINT *generator, const BIGNUM *order, const BIGNUM *cofactor);
+\& const EC_POINT *EC_GROUP_get0_generator(const EC_GROUP *group);
+\&
+\& int EC_GROUP_get_order(const EC_GROUP *group, BIGNUM *order, BN_CTX *ctx);
+\& int EC_GROUP_get_cofactor(const EC_GROUP *group, BIGNUM *cofactor, BN_CTX *ctx);
+\&
+\& void EC_GROUP_set_curve_name(EC_GROUP *group, int nid);
+\& int EC_GROUP_get_curve_name(const EC_GROUP *group);
+\&
+\& void EC_GROUP_set_asn1_flag(EC_GROUP *group, int flag);
+\& int EC_GROUP_get_asn1_flag(const EC_GROUP *group);
+\&
+\& void EC_GROUP_set_point_conversion_form(EC_GROUP *group, point_conversion_form_t form);
+\& point_conversion_form_t EC_GROUP_get_point_conversion_form(const EC_GROUP *);
+\&
+\& unsigned char *EC_GROUP_get0_seed(const EC_GROUP *x);
+\& size_t EC_GROUP_get_seed_len(const EC_GROUP *);
+\& size_t EC_GROUP_set_seed(EC_GROUP *, const unsigned char *, size_t len);
+\&
+\& int EC_GROUP_get_degree(const EC_GROUP *group);
+\&
+\& int EC_GROUP_check(const EC_GROUP *group, BN_CTX *ctx);
+\&
+\& int EC_GROUP_check_discriminant(const EC_GROUP *group, BN_CTX *ctx);
+\&
+\& int EC_GROUP_cmp(const EC_GROUP *a, const EC_GROUP *b, BN_CTX *ctx);
+\&
+\& int EC_GROUP_get_basis_type(const EC_GROUP *);
+\& int EC_GROUP_get_trinomial_basis(const EC_GROUP *, unsigned int *k);
+\& int EC_GROUP_get_pentanomial_basis(const EC_GROUP *, unsigned int *k1,
+\& unsigned int *k2, unsigned int *k3);
+.Ve
+.SH "DESCRIPTION"
+.IX Header "DESCRIPTION"
+EC_GROUP_copy copies the curve \fBsrc\fR into \fBdst\fR. Both \fBsrc\fR and \fBdst\fR must use the same \s-1EC_METHOD.\s0
+.PP
+EC_GROUP_dup creates a new \s-1EC_GROUP\s0 object and copies the content from \fBsrc\fR to the newly created
+\&\s-1EC_GROUP\s0 object.
+.PP
+EC_GROUP_method_of obtains the \s-1EC_METHOD\s0 of \fBgroup\fR.
+.PP
+EC_GROUP_set_generator sets curve paramaters that must be agreed by all participants using the curve. These
+paramaters include the \fBgenerator\fR, the \fBorder\fR and the \fBcofactor\fR. The \fBgenerator\fR is a well defined point on the
+curve chosen for cryptographic operations. Integers used for point multiplications will be between 0 and
+n\-1 where n is the \fBorder\fR. The \fBorder\fR multipied by the \fBcofactor\fR gives the number of points on the curve.
+.PP
+EC_GROUP_get0_generator returns the generator for the identified \fBgroup\fR.
+.PP
+The functions EC_GROUP_get_order and EC_GROUP_get_cofactor populate the provided \fBorder\fR and \fBcofactor\fR parameters
+with the respective order and cofactors for the \fBgroup\fR.
+.PP
+The functions EC_GROUP_set_curve_name and EC_GROUP_get_curve_name, set and get the \s-1NID\s0 for the curve respectively
+(see \fIEC_GROUP_new\fR\|(3)). If a curve does not have a \s-1NID\s0 associated with it, then EC_GROUP_get_curve_name
+will return 0.
+.PP
+The asn1_flag value on a curve is used to determine whether there is a specific \s-1ASN1 OID\s0 to describe the curve or not.
+If the asn1_flag is 1 then this is a named curve with an associated \s-1ASN1 OID.\s0 If not then asn1_flag is 0. The functions
+EC_GROUP_get_asn1_flag and EC_GROUP_set_asn1_flag get and set the status of the asn1_flag for the curve. If set then
+the curve_name must also be set.
+.PP
+The point_coversion_form for a curve controls how \s-1EC_POINT\s0 data is encoded as \s-1ASN1\s0 as defined in X9.62 (\s-1ECDSA\s0).
+point_conversion_form_t is an enum defined as follows:
+.PP
+.Vb 10
+\& typedef enum {
+\& /** the point is encoded as z||x, where the octet z specifies
+\& * which solution of the quadratic equation y is */
+\& POINT_CONVERSION_COMPRESSED = 2,
+\& /** the point is encoded as z||x||y, where z is the octet 0x02 */
+\& POINT_CONVERSION_UNCOMPRESSED = 4,
+\& /** the point is encoded as z||x||y, where the octet z specifies
+\& * which solution of the quadratic equation y is */
+\& POINT_CONVERSION_HYBRID = 6
+\& } point_conversion_form_t;
+.Ve
+.PP
+For \s-1POINT_CONVERSION_UNCOMPRESSED\s0 the point is encoded as an octet signifying the \s-1UNCOMPRESSED\s0 form has been used followed by
+the octets for x, followed by the octets for y.
+.PP
+For any given x co-ordinate for a point on a curve it is possible to derive two possible y values. For
+\&\s-1POINT_CONVERSION_COMPRESSED\s0 the point is encoded as an octet signifying that the \s-1COMPRESSED\s0 form has been used \s-1AND\s0 which of
+the two possible solutions for y has been used, followed by the octets for x.
+.PP
+For \s-1POINT_CONVERSION_HYBRID\s0 the point is encoded as an octet signifying the \s-1HYBRID\s0 form has been used \s-1AND\s0 which of the two
+possible solutions for y has been used, followed by the octets for x, followed by the octets for y.
+.PP
+The functions EC_GROUP_set_point_conversion_form and EC_GROUP_get_point_conversion_form set and get the point_conversion_form
+for the curve respectively.
+.PP
+\&\s-1ANSI X9.62 \s0(\s-1ECDSA\s0 standard) defines a method of generating the curve parameter b from a random number. This provides advantages
+in that a parameter obtained in this way is highly unlikely to be susceptible to special purpose attacks, or have any trapdoors in it.
+If the seed is present for a curve then the b parameter was generated in a verifiable fashion using that seed. The OpenSSL \s-1EC\s0 library
+does not use this seed value but does enable you to inspect it using EC_GROUP_get0_seed. This returns a pointer to a memory block
+containing the seed that was used. The length of the memory block can be obtained using EC_GROUP_get_seed_len. A number of the
+builtin curves within the library provide seed values that can be obtained. It is also possible to set a custom seed using
+EC_GROUP_set_seed and passing a pointer to a memory block, along with the length of the seed. Again, the \s-1EC\s0 library will not use
+this seed value, although it will be preserved in any \s-1ASN1\s0 based communications.
+.PP
+EC_GROUP_get_degree gets the degree of the field. For Fp fields this will be the number of bits in p. For F2^m fields this will be
+the value m.
+.PP
+The function EC_GROUP_check_discriminant calculates the discriminant for the curve and verifies that it is valid.
+For a curve defined over Fp the discriminant is given by the formula 4*a^3 + 27*b^2 whilst for F2^m curves the discriminant is
+simply b. In either case for the curve to be valid the discriminant must be non zero.
+.PP
+The function EC_GROUP_check performs a number of checks on a curve to verify that it is valid. Checks performed include
+verifying that the discriminant is non zero; that a generator has been defined; that the generator is on the curve and has
+the correct order.
+.PP
+EC_GROUP_cmp compares \fBa\fR and \fBb\fR to determine whether they represent the same curve or not.
+.PP
+The functions EC_GROUP_get_basis_type, EC_GROUP_get_trinomial_basis and EC_GROUP_get_pentanomial_basis should only be called for curves
+defined over an F2^m field. Addition and multiplication operations within an F2^m field are performed using an irreducible polynomial
+function f(x). This function is either a trinomial of the form:
+.PP
+f(x) = x^m + x^k + 1 with m > k >= 1
+.PP
+or a pentanomial of the form:
+.PP
+f(x) = x^m + x^k3 + x^k2 + x^k1 + 1 with m > k3 > k2 > k1 >= 1
+.PP
+The function EC_GROUP_get_basis_type returns a \s-1NID\s0 identifying whether a trinomial or pentanomial is in use for the field. The
+function EC_GROUP_get_trinomial_basis must only be called where f(x) is of the trinomial form, and returns the value of \fBk\fR. Similary
+the function EC_GROUP_get_pentanomial_basis must only be called where f(x) is of the pentanomial form, and returns the values of \fBk1\fR,
+\&\fBk2\fR and \fBk3\fR respectively.
+.SH "RETURN VALUES"
+.IX Header "RETURN VALUES"
+The following functions return 1 on success or 0 on error: EC_GROUP_copy, EC_GROUP_set_generator, EC_GROUP_check,
+EC_GROUP_check_discriminant, EC_GROUP_get_trinomial_basis and EC_GROUP_get_pentanomial_basis.
+.PP
+EC_GROUP_dup returns a pointer to the duplicated curve, or \s-1NULL\s0 on error.
+.PP
+EC_GROUP_method_of returns the \s-1EC_METHOD\s0 implementation in use for the given curve or \s-1NULL\s0 on error.
+.PP
+EC_GROUP_get0_generator returns the generator for the given curve or \s-1NULL\s0 on error.
+.PP
+EC_GROUP_get_order, EC_GROUP_get_cofactor, EC_GROUP_get_curve_name, EC_GROUP_get_asn1_flag, EC_GROUP_get_point_conversion_form
+and EC_GROUP_get_degree return the order, cofactor, curve name (\s-1NID\s0), \s-1ASN1\s0 flag, point_conversion_form and degree for the
+specified curve respectively. If there is no curve name associated with a curve then EC_GROUP_get_curve_name will return 0.
+.PP
+EC_GROUP_get0_seed returns a pointer to the seed that was used to generate the parameter b, or \s-1NULL\s0 if the seed is not
+specified. EC_GROUP_get_seed_len returns the length of the seed or 0 if the seed is not specified.
+.PP
+EC_GROUP_set_seed returns the length of the seed that has been set. If the supplied seed is \s-1NULL,\s0 or the supplied seed length is
+0, the return value will be 1. On error 0 is returned.
+.PP
+EC_GROUP_cmp returns 0 if the curves are equal, 1 if they are not equal, or \-1 on error.
+.PP
+EC_GROUP_get_basis_type returns the values NID_X9_62_tpBasis or NID_X9_62_ppBasis (as defined in <openssl/obj_mac.h>) for a
+trinomial or pentanomial respectively. Alternatively in the event of an error a 0 is returned.
+.SH "SEE ALSO"
+.IX Header "SEE ALSO"
+\&\fIcrypto\fR\|(3), \fIec\fR\|(3), \fIEC_GROUP_new\fR\|(3),
+\&\fIEC_POINT_new\fR\|(3), \fIEC_POINT_add\fR\|(3), \fIEC_KEY_new\fR\|(3),
+\&\fIEC_GFp_simple_method\fR\|(3), \fId2i_ECPKParameters\fR\|(3)
diff --git a/secure/lib/libcrypto/man/EC_GROUP_new.3 b/secure/lib/libcrypto/man/EC_GROUP_new.3
new file mode 100644
index 0000000..583a5d3
--- /dev/null
+++ b/secure/lib/libcrypto/man/EC_GROUP_new.3
@@ -0,0 +1,230 @@
+.\" Automatically generated by Pod::Man 2.28 (Pod::Simple 3.30)
+.\"
+.\" Standard preamble:
+.\" ========================================================================
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Vb \" Begin verbatim text
+.ft CW
+.nf
+.ne \\$1
+..
+.de Ve \" End verbatim text
+.ft R
+.fi
+..
+.\" Set up some character translations and predefined strings. \*(-- will
+.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
+.\" double quote, and \*(R" will give a right double quote. \*(C+ will
+.\" give a nicer C++. Capital omega is used to do unbreakable dashes and
+.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff,
+.\" nothing in troff, for use with C<>.
+.tr \(*W-
+.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
+.ie n \{\
+. ds -- \(*W-
+. ds PI pi
+. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
+. ds L" ""
+. ds R" ""
+. ds C` ""
+. ds C' ""
+'br\}
+.el\{\
+. ds -- \|\(em\|
+. ds PI \(*p
+. ds L" ``
+. ds R" ''
+. ds C`
+. ds C'
+'br\}
+.\"
+.\" Escape single quotes in literal strings from groff's Unicode transform.
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\"
+.\" If the F register is turned on, we'll generate index entries on stderr for
+.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
+.\" entries marked with X<> in POD. Of course, you'll have to process the
+.\" output yourself in some meaningful fashion.
+.\"
+.\" Avoid warning from groff about undefined register 'F'.
+.de IX
+..
+.nr rF 0
+.if \n(.g .if rF .nr rF 1
+.if (\n(rF:(\n(.g==0)) \{
+. if \nF \{
+. de IX
+. tm Index:\\$1\t\\n%\t"\\$2"
+..
+. if !\nF==2 \{
+. nr % 0
+. nr F 2
+. \}
+. \}
+.\}
+.rr rF
+.\"
+.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
+.\" Fear. Run. Save yourself. No user-serviceable parts.
+. \" fudge factors for nroff and troff
+.if n \{\
+. ds #H 0
+. ds #V .8m
+. ds #F .3m
+. ds #[ \f1
+. ds #] \fP
+.\}
+.if t \{\
+. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+. ds #V .6m
+. ds #F 0
+. ds #[ \&
+. ds #] \&
+.\}
+. \" simple accents for nroff and troff
+.if n \{\
+. ds ' \&
+. ds ` \&
+. ds ^ \&
+. ds , \&
+. ds ~ ~
+. ds /
+.\}
+.if t \{\
+. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
+.\}
+. \" troff and (daisy-wheel) nroff accents
+.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
+.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
+.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
+.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
+.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
+.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
+.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
+.ds ae a\h'-(\w'a'u*4/10)'e
+.ds Ae A\h'-(\w'A'u*4/10)'E
+. \" corrections for vroff
+.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
+.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
+. \" for low resolution devices (crt and lpr)
+.if \n(.H>23 .if \n(.V>19 \
+\{\
+. ds : e
+. ds 8 ss
+. ds o a
+. ds d- d\h'-1'\(ga
+. ds D- D\h'-1'\(hy
+. ds th \o'bp'
+. ds Th \o'LP'
+. ds ae ae
+. ds Ae AE
+.\}
+.rm #[ #] #H #V #F C
+.\" ========================================================================
+.\"
+.IX Title "EC_GROUP_new 3"
+.TH EC_GROUP_new 3 "2015-07-09" "1.0.2d" "OpenSSL"
+.\" For nroff, turn off justification. Always turn off hyphenation; it makes
+.\" way too many mistakes in technical documents.
+.if n .ad l
+.nh
+.SH "NAME"
+EC_GROUP_new, EC_GROUP_free, EC_GROUP_clear_free, EC_GROUP_new_curve_GFp, EC_GROUP_new_curve_GF2m, EC_GROUP_new_by_curve_name, EC_GROUP_set_curve_GFp, EC_GROUP_get_curve_GFp, EC_GROUP_set_curve_GF2m, EC_GROUP_get_curve_GF2m, EC_get_builtin_curves \- Functions for creating and destroying EC_GROUP objects.
+.SH "SYNOPSIS"
+.IX Header "SYNOPSIS"
+.Vb 2
+\& #include <openssl/ec.h>
+\& #include <openssl/bn.h>
+\&
+\& EC_GROUP *EC_GROUP_new(const EC_METHOD *meth);
+\& void EC_GROUP_free(EC_GROUP *group);
+\& void EC_GROUP_clear_free(EC_GROUP *group);
+\&
+\& EC_GROUP *EC_GROUP_new_curve_GFp(const BIGNUM *p, const BIGNUM *a, const BIGNUM *b, BN_CTX *ctx);
+\& EC_GROUP *EC_GROUP_new_curve_GF2m(const BIGNUM *p, const BIGNUM *a, const BIGNUM *b, BN_CTX *ctx);
+\& EC_GROUP *EC_GROUP_new_by_curve_name(int nid);
+\&
+\& int EC_GROUP_set_curve_GFp(EC_GROUP *group, const BIGNUM *p, const BIGNUM *a, const BIGNUM *b, BN_CTX *ctx);
+\& int EC_GROUP_get_curve_GFp(const EC_GROUP *group, BIGNUM *p, BIGNUM *a, BIGNUM *b, BN_CTX *ctx);
+\& int EC_GROUP_set_curve_GF2m(EC_GROUP *group, const BIGNUM *p, const BIGNUM *a, const BIGNUM *b, BN_CTX *ctx);
+\& int EC_GROUP_get_curve_GF2m(const EC_GROUP *group, BIGNUM *p, BIGNUM *a, BIGNUM *b, BN_CTX *ctx);
+\&
+\& size_t EC_get_builtin_curves(EC_builtin_curve *r, size_t nitems);
+.Ve
+.SH "DESCRIPTION"
+.IX Header "DESCRIPTION"
+Within the library there are two forms of elliptic curve that are of interest. The first form is those defined over the
+prime field Fp. The elements of Fp are the integers 0 to p\-1, where p is a prime number. This gives us a revised
+elliptic curve equation as follows:
+.PP
+y^2 mod p = x^3 +ax + b mod p
+.PP
+The second form is those defined over a binary field F2^m where the elements of the field are integers of length at
+most m bits. For this form the elliptic curve equation is modified to:
+.PP
+y^2 + xy = x^3 + ax^2 + b (where b != 0)
+.PP
+Operations in a binary field are performed relative to an \fBirreducible polynomial\fR. All such curves with OpenSSL
+use a trinomial or a pentanomial for this parameter.
+.PP
+A new curve can be constructed by calling EC_GROUP_new, using the implementation provided by \fBmeth\fR (see
+\&\fIEC_GFp_simple_method\fR\|(3)). It is then necessary to call either EC_GROUP_set_curve_GFp or
+EC_GROUP_set_curve_GF2m as appropriate to create a curve defined over Fp or over F2^m respectively.
+.PP
+EC_GROUP_set_curve_GFp sets the curve parameters \fBp\fR, \fBa\fR and \fBb\fR for a curve over Fp stored in \fBgroup\fR.
+EC_group_get_curve_GFp obtains the previously set curve parameters.
+.PP
+EC_GROUP_set_curve_GF2m sets the equivalent curve parameters for a curve over F2^m. In this case \fBp\fR represents
+the irreducible polybnomial \- each bit represents a term in the polynomial. Therefore there will either be three
+or five bits set dependant on whether the polynomial is a trinomial or a pentanomial.
+EC_group_get_curve_GF2m obtains the previously set curve parameters.
+.PP
+The functions EC_GROUP_new_curve_GFp and EC_GROUP_new_curve_GF2m are shortcuts for calling EC_GROUP_new and the
+appropriate EC_group_set_curve function. An appropriate default implementation method will be used.
+.PP
+Whilst the library can be used to create any curve using the functions described above, there are also a number of
+predefined curves that are available. In order to obtain a list of all of the predefined curves, call the function
+EC_get_builtin_curves. The parameter \fBr\fR should be an array of EC_builtin_curve structures of size \fBnitems\fR. The function
+will populate the \fBr\fR array with information about the builtin curves. If \fBnitems\fR is less than the total number of
+curves available, then the first \fBnitems\fR curves will be returned. Otherwise the total number of curves will be
+provided. The return value is the total number of curves available (whether that number has been populated in \fBr\fR or
+not). Passing a \s-1NULL \s0\fBr\fR, or setting \fBnitems\fR to 0 will do nothing other than return the total number of curves available.
+The EC_builtin_curve structure is defined as follows:
+.PP
+.Vb 4
+\& typedef struct {
+\& int nid;
+\& const char *comment;
+\& } EC_builtin_curve;
+.Ve
+.PP
+Each EC_builtin_curve item has a unique integer id (\fBnid\fR), and a human readable comment string describing the curve.
+.PP
+In order to construct a builtin curve use the function EC_GROUP_new_by_curve_name and provide the \fBnid\fR of the curve to
+be constructed.
+.PP
+EC_GROUP_free frees the memory associated with the \s-1EC_GROUP.\s0
+.PP
+EC_GROUP_clear_free destroys any sensitive data held within the \s-1EC_GROUP\s0 and then frees its memory.
+.SH "RETURN VALUES"
+.IX Header "RETURN VALUES"
+All EC_GROUP_new* functions return a pointer to the newly constructed group, or \s-1NULL\s0 on error.
+.PP
+EC_get_builtin_curves returns the number of builtin curves that are available.
+.PP
+EC_GROUP_set_curve_GFp, EC_GROUP_get_curve_GFp, EC_GROUP_set_curve_GF2m, EC_GROUP_get_curve_GF2m return 1 on success or 0 on error.
+.SH "SEE ALSO"
+.IX Header "SEE ALSO"
+\&\fIcrypto\fR\|(3), \fIec\fR\|(3), \fIEC_GROUP_copy\fR\|(3),
+\&\fIEC_POINT_new\fR\|(3), \fIEC_POINT_add\fR\|(3), \fIEC_KEY_new\fR\|(3),
+\&\fIEC_GFp_simple_method\fR\|(3), \fId2i_ECPKParameters\fR\|(3)
diff --git a/secure/lib/libcrypto/man/EC_KEY_new.3 b/secure/lib/libcrypto/man/EC_KEY_new.3
new file mode 100644
index 0000000..cf0d471
--- /dev/null
+++ b/secure/lib/libcrypto/man/EC_KEY_new.3
@@ -0,0 +1,239 @@
+.\" Automatically generated by Pod::Man 2.28 (Pod::Simple 3.30)
+.\"
+.\" Standard preamble:
+.\" ========================================================================
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Vb \" Begin verbatim text
+.ft CW
+.nf
+.ne \\$1
+..
+.de Ve \" End verbatim text
+.ft R
+.fi
+..
+.\" Set up some character translations and predefined strings. \*(-- will
+.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
+.\" double quote, and \*(R" will give a right double quote. \*(C+ will
+.\" give a nicer C++. Capital omega is used to do unbreakable dashes and
+.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff,
+.\" nothing in troff, for use with C<>.
+.tr \(*W-
+.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
+.ie n \{\
+. ds -- \(*W-
+. ds PI pi
+. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
+. ds L" ""
+. ds R" ""
+. ds C` ""
+. ds C' ""
+'br\}
+.el\{\
+. ds -- \|\(em\|
+. ds PI \(*p
+. ds L" ``
+. ds R" ''
+. ds C`
+. ds C'
+'br\}
+.\"
+.\" Escape single quotes in literal strings from groff's Unicode transform.
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\"
+.\" If the F register is turned on, we'll generate index entries on stderr for
+.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
+.\" entries marked with X<> in POD. Of course, you'll have to process the
+.\" output yourself in some meaningful fashion.
+.\"
+.\" Avoid warning from groff about undefined register 'F'.
+.de IX
+..
+.nr rF 0
+.if \n(.g .if rF .nr rF 1
+.if (\n(rF:(\n(.g==0)) \{
+. if \nF \{
+. de IX
+. tm Index:\\$1\t\\n%\t"\\$2"
+..
+. if !\nF==2 \{
+. nr % 0
+. nr F 2
+. \}
+. \}
+.\}
+.rr rF
+.\"
+.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
+.\" Fear. Run. Save yourself. No user-serviceable parts.
+. \" fudge factors for nroff and troff
+.if n \{\
+. ds #H 0
+. ds #V .8m
+. ds #F .3m
+. ds #[ \f1
+. ds #] \fP
+.\}
+.if t \{\
+. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+. ds #V .6m
+. ds #F 0
+. ds #[ \&
+. ds #] \&
+.\}
+. \" simple accents for nroff and troff
+.if n \{\
+. ds ' \&
+. ds ` \&
+. ds ^ \&
+. ds , \&
+. ds ~ ~
+. ds /
+.\}
+.if t \{\
+. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
+.\}
+. \" troff and (daisy-wheel) nroff accents
+.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
+.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
+.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
+.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
+.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
+.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
+.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
+.ds ae a\h'-(\w'a'u*4/10)'e
+.ds Ae A\h'-(\w'A'u*4/10)'E
+. \" corrections for vroff
+.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
+.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
+. \" for low resolution devices (crt and lpr)
+.if \n(.H>23 .if \n(.V>19 \
+\{\
+. ds : e
+. ds 8 ss
+. ds o a
+. ds d- d\h'-1'\(ga
+. ds D- D\h'-1'\(hy
+. ds th \o'bp'
+. ds Th \o'LP'
+. ds ae ae
+. ds Ae AE
+.\}
+.rm #[ #] #H #V #F C
+.\" ========================================================================
+.\"
+.IX Title "EC_KEY_new 3"
+.TH EC_KEY_new 3 "2015-07-09" "1.0.2d" "OpenSSL"
+.\" For nroff, turn off justification. Always turn off hyphenation; it makes
+.\" way too many mistakes in technical documents.
+.if n .ad l
+.nh
+.SH "NAME"
+EC_KEY_new, EC_KEY_get_flags, EC_KEY_set_flags, EC_KEY_clear_flags, EC_KEY_new_by_curve_name, EC_KEY_free, EC_KEY_copy, EC_KEY_dup, EC_KEY_up_ref, EC_KEY_get0_group, EC_KEY_set_group, EC_KEY_get0_private_key, EC_KEY_set_private_key, EC_KEY_get0_public_key, EC_KEY_set_public_key, EC_KEY_get_enc_flags, EC_KEY_set_enc_flags, EC_KEY_get_conv_form, EC_KEY_set_conv_form, EC_KEY_get_key_method_data, EC_KEY_insert_key_method_data, EC_KEY_set_asn1_flag, EC_KEY_precompute_mult, EC_KEY_generate_key, EC_KEY_check_key, EC_KEY_set_public_key_affine_coordinates \- Functions for creating, destroying and manipulating EC_KEY objects.
+.SH "SYNOPSIS"
+.IX Header "SYNOPSIS"
+.Vb 2
+\& #include <openssl/ec.h>
+\& #include <openssl/bn.h>
+\&
+\& EC_KEY *EC_KEY_new(void);
+\& int EC_KEY_get_flags(const EC_KEY *key);
+\& void EC_KEY_set_flags(EC_KEY *key, int flags);
+\& void EC_KEY_clear_flags(EC_KEY *key, int flags);
+\& EC_KEY *EC_KEY_new_by_curve_name(int nid);
+\& void EC_KEY_free(EC_KEY *key);
+\& EC_KEY *EC_KEY_copy(EC_KEY *dst, const EC_KEY *src);
+\& EC_KEY *EC_KEY_dup(const EC_KEY *src);
+\& int EC_KEY_up_ref(EC_KEY *key);
+\& const EC_GROUP *EC_KEY_get0_group(const EC_KEY *key);
+\& int EC_KEY_set_group(EC_KEY *key, const EC_GROUP *group);
+\& const BIGNUM *EC_KEY_get0_private_key(const EC_KEY *key);
+\& int EC_KEY_set_private_key(EC_KEY *key, const BIGNUM *prv);
+\& const EC_POINT *EC_KEY_get0_public_key(const EC_KEY *key);
+\& int EC_KEY_set_public_key(EC_KEY *key, const EC_POINT *pub);
+\& point_conversion_form_t EC_KEY_get_conv_form(const EC_KEY *key);
+\& void EC_KEY_set_conv_form(EC_KEY *eckey, point_conversion_form_t cform);
+\& void *EC_KEY_get_key_method_data(EC_KEY *key,
+\& void *(*dup_func)(void *), void (*free_func)(void *), void (*clear_free_func)(void *));
+\& void EC_KEY_insert_key_method_data(EC_KEY *key, void *data,
+\& void *(*dup_func)(void *), void (*free_func)(void *), void (*clear_free_func)(void *));
+\& void EC_KEY_set_asn1_flag(EC_KEY *eckey, int asn1_flag);
+\& int EC_KEY_precompute_mult(EC_KEY *key, BN_CTX *ctx);
+\& int EC_KEY_generate_key(EC_KEY *key);
+\& int EC_KEY_check_key(const EC_KEY *key);
+\& int EC_KEY_set_public_key_affine_coordinates(EC_KEY *key, BIGNUM *x, BIGNUM *y);
+.Ve
+.SH "DESCRIPTION"
+.IX Header "DESCRIPTION"
+An \s-1EC_KEY\s0 represents a public key and (optionaly) an associated private key. A new \s-1EC_KEY \s0(with no associated curve) can be constructed by calling EC_KEY_new.
+The reference count for the newly created \s-1EC_KEY\s0 is initially set to 1. A curve can be associated with the \s-1EC_KEY\s0 by calling
+EC_KEY_set_group.
+.PP
+Alternatively a new \s-1EC_KEY\s0 can be constructed by calling EC_KEY_new_by_curve_name and supplying the nid of the associated curve. Refer to \fIEC_GROUP_new\fR\|(3) for a description of curve names. This function simply wraps calls to EC_KEY_new and
+EC_GROUP_new_by_curve_name.
+.PP
+Calling EC_KEY_free decrements the reference count for the \s-1EC_KEY\s0 object, and if it has dropped to zero then frees the memory associated
+with it.
+.PP
+EC_KEY_copy copies the contents of the \s-1EC_KEY\s0 in \fBsrc\fR into \fBdest\fR.
+.PP
+EC_KEY_dup creates a new \s-1EC_KEY\s0 object and copies \fBec_key\fR into it.
+.PP
+EC_KEY_up_ref increments the reference count associated with the \s-1EC_KEY\s0 object.
+.PP
+EC_KEY_generate_key generates a new public and private key for the supplied \fBeckey\fR object. \fBeckey\fR must have an \s-1EC_GROUP\s0 object
+associated with it before calling this function. The private key is a random integer (0 < priv_key < order, where order is the order
+of the \s-1EC_GROUP\s0 object). The public key is an \s-1EC_POINT\s0 on the curve calculated by multiplying the generator for the curve by the
+private key.
+.PP
+EC_KEY_check_key performs various sanity checks on the \s-1EC_KEY\s0 object to confirm that it is valid.
+.PP
+EC_KEY_set_public_key_affine_coordinates sets the public key for \fBkey\fR based on its affine co-ordinates, i.e. it constructs an \s-1EC_POINT\s0
+object based on the supplied \fBx\fR and \fBy\fR values and sets the public key to be this \s-1EC_POINT.\s0 It will also performs certain sanity checks
+on the key to confirm that it is valid.
+.PP
+The functions EC_KEY_get0_group, EC_KEY_set_group, EC_KEY_get0_private_key, EC_KEY_set_private_key, EC_KEY_get0_public_key, and EC_KEY_set_public_key get and set the \s-1EC_GROUP\s0 object, the private key and the \s-1EC_POINT\s0 public key for the \fBkey\fR respectively.
+.PP
+The functions EC_KEY_get_conv_form and EC_KEY_set_conv_form get and set the point_conversion_form for the \fBkey\fR. For a description
+of point_conversion_forms please refer to \fIEC_POINT_new\fR\|(3).
+.PP
+EC_KEY_insert_key_method_data and EC_KEY_get_key_method_data enable the caller to associate arbitary additional data specific to the
+elliptic curve scheme being used with the \s-1EC_KEY\s0 object. This data is treated as a \*(L"black box\*(R" by the ec library. The data to be stored by EC_KEY_insert_key_method_data is provided in the \fBdata\fR parameter, which must have have associated functions for duplicating, freeing and \*(L"clear_freeing\*(R" the data item. If a subsequent EC_KEY_get_key_method_data call is issued, the functions for duplicating, freeing and \*(L"clear_freeing\*(R" the data item must be provided again, and they must be the same as they were when the data item was inserted.
+.PP
+EC_KEY_set_flags sets the flags in the \fBflags\fR parameter on the \s-1EC_KEY\s0 object. Any flags that are already set are left set. The currently defined standard flags are \s-1EC_FLAG_NON_FIPS_ALLOW\s0 and \s-1EC_FLAG_FIPS_CHECKED.\s0 In addition there is the flag \s-1EC_FLAG_COFACTOR_ECDH\s0 which is specific to \s-1ECDH\s0 and is defined in ecdh.h. EC_KEY_get_flags returns the current flags that are set for this \s-1EC_KEY.\s0 EC_KEY_clear_flags clears the flags indicated by the \fBflags\fR parameter. All other flags are left in their existing state.
+.PP
+EC_KEY_set_asn1_flag sets the asn1_flag on the underlying \s-1EC_GROUP\s0 object (if set). Refer to \fIEC_GROUP_copy\fR\|(3) for further information on the asn1_flag.
+.PP
+EC_KEY_precompute_mult stores multiples of the underlying \s-1EC_GROUP\s0 generator for faster point multiplication. See also \fIEC_POINT_add\fR\|(3).
+.SH "RETURN VALUES"
+.IX Header "RETURN VALUES"
+EC_KEY_new, EC_KEY_new_by_curve_name and EC_KEY_dup return a pointer to the newly created \s-1EC_KEY\s0 object, or \s-1NULL\s0 on error.
+.PP
+EC_KEY_get_flags returns the flags associated with the \s-1EC_KEY\s0 object as an integer.
+.PP
+EC_KEY_copy returns a pointer to the destination key, or \s-1NULL\s0 on error.
+.PP
+EC_KEY_up_ref, EC_KEY_set_group, EC_KEY_set_private_key, EC_KEY_set_public_key, EC_KEY_precompute_mult, EC_KEY_generate_key, EC_KEY_check_key and EC_KEY_set_public_key_affine_coordinates return 1 on success or 0 on error.
+.PP
+EC_KEY_get0_group returns the \s-1EC_GROUP\s0 associated with the \s-1EC_KEY.\s0
+.PP
+EC_KEY_get0_private_key returns the private key associated with the \s-1EC_KEY.\s0
+.PP
+EC_KEY_get_conv_form return the point_conversion_form for the \s-1EC_KEY.\s0
+.SH "SEE ALSO"
+.IX Header "SEE ALSO"
+\&\fIcrypto\fR\|(3), \fIec\fR\|(3), \fIEC_GROUP_new\fR\|(3),
+\&\fIEC_GROUP_copy\fR\|(3), \fIEC_POINT_new\fR\|(3),
+\&\fIEC_POINT_add\fR\|(3),
+\&\fIEC_GFp_simple_method\fR\|(3),
+\&\fId2i_ECPKParameters\fR\|(3)
diff --git a/secure/lib/libcrypto/man/EC_POINT_add.3 b/secure/lib/libcrypto/man/EC_POINT_add.3
new file mode 100644
index 0000000..36f1ce1
--- /dev/null
+++ b/secure/lib/libcrypto/man/EC_POINT_add.3
@@ -0,0 +1,203 @@
+.\" Automatically generated by Pod::Man 2.28 (Pod::Simple 3.30)
+.\"
+.\" Standard preamble:
+.\" ========================================================================
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Vb \" Begin verbatim text
+.ft CW
+.nf
+.ne \\$1
+..
+.de Ve \" End verbatim text
+.ft R
+.fi
+..
+.\" Set up some character translations and predefined strings. \*(-- will
+.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
+.\" double quote, and \*(R" will give a right double quote. \*(C+ will
+.\" give a nicer C++. Capital omega is used to do unbreakable dashes and
+.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff,
+.\" nothing in troff, for use with C<>.
+.tr \(*W-
+.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
+.ie n \{\
+. ds -- \(*W-
+. ds PI pi
+. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
+. ds L" ""
+. ds R" ""
+. ds C` ""
+. ds C' ""
+'br\}
+.el\{\
+. ds -- \|\(em\|
+. ds PI \(*p
+. ds L" ``
+. ds R" ''
+. ds C`
+. ds C'
+'br\}
+.\"
+.\" Escape single quotes in literal strings from groff's Unicode transform.
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\"
+.\" If the F register is turned on, we'll generate index entries on stderr for
+.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
+.\" entries marked with X<> in POD. Of course, you'll have to process the
+.\" output yourself in some meaningful fashion.
+.\"
+.\" Avoid warning from groff about undefined register 'F'.
+.de IX
+..
+.nr rF 0
+.if \n(.g .if rF .nr rF 1
+.if (\n(rF:(\n(.g==0)) \{
+. if \nF \{
+. de IX
+. tm Index:\\$1\t\\n%\t"\\$2"
+..
+. if !\nF==2 \{
+. nr % 0
+. nr F 2
+. \}
+. \}
+.\}
+.rr rF
+.\"
+.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
+.\" Fear. Run. Save yourself. No user-serviceable parts.
+. \" fudge factors for nroff and troff
+.if n \{\
+. ds #H 0
+. ds #V .8m
+. ds #F .3m
+. ds #[ \f1
+. ds #] \fP
+.\}
+.if t \{\
+. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+. ds #V .6m
+. ds #F 0
+. ds #[ \&
+. ds #] \&
+.\}
+. \" simple accents for nroff and troff
+.if n \{\
+. ds ' \&
+. ds ` \&
+. ds ^ \&
+. ds , \&
+. ds ~ ~
+. ds /
+.\}
+.if t \{\
+. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
+.\}
+. \" troff and (daisy-wheel) nroff accents
+.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
+.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
+.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
+.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
+.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
+.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
+.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
+.ds ae a\h'-(\w'a'u*4/10)'e
+.ds Ae A\h'-(\w'A'u*4/10)'E
+. \" corrections for vroff
+.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
+.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
+. \" for low resolution devices (crt and lpr)
+.if \n(.H>23 .if \n(.V>19 \
+\{\
+. ds : e
+. ds 8 ss
+. ds o a
+. ds d- d\h'-1'\(ga
+. ds D- D\h'-1'\(hy
+. ds th \o'bp'
+. ds Th \o'LP'
+. ds ae ae
+. ds Ae AE
+.\}
+.rm #[ #] #H #V #F C
+.\" ========================================================================
+.\"
+.IX Title "EC_POINT_add 3"
+.TH EC_POINT_add 3 "2015-07-09" "1.0.2d" "OpenSSL"
+.\" For nroff, turn off justification. Always turn off hyphenation; it makes
+.\" way too many mistakes in technical documents.
+.if n .ad l
+.nh
+.SH "NAME"
+EC_POINT_add, EC_POINT_dbl, EC_POINT_invert, EC_POINT_is_at_infinity, EC_POINT_is_on_curve, EC_POINT_cmp, EC_POINT_make_affine, EC_POINTs_make_affine, EC_POINTs_mul, EC_POINT_mul, EC_GROUP_precompute_mult, EC_GROUP_have_precompute_mult \- Functions for performing mathematical operations and tests on EC_POINT objects.
+.SH "SYNOPSIS"
+.IX Header "SYNOPSIS"
+.Vb 2
+\& #include <openssl/ec.h>
+\& #include <openssl/bn.h>
+\&
+\& int EC_POINT_add(const EC_GROUP *group, EC_POINT *r, const EC_POINT *a, const EC_POINT *b, BN_CTX *ctx);
+\& int EC_POINT_dbl(const EC_GROUP *group, EC_POINT *r, const EC_POINT *a, BN_CTX *ctx);
+\& int EC_POINT_invert(const EC_GROUP *group, EC_POINT *a, BN_CTX *ctx);
+\& int EC_POINT_is_at_infinity(const EC_GROUP *group, const EC_POINT *p);
+\& int EC_POINT_is_on_curve(const EC_GROUP *group, const EC_POINT *point, BN_CTX *ctx);
+\& int EC_POINT_cmp(const EC_GROUP *group, const EC_POINT *a, const EC_POINT *b, BN_CTX *ctx);
+\& int EC_POINT_make_affine(const EC_GROUP *group, EC_POINT *point, BN_CTX *ctx);
+\& int EC_POINTs_make_affine(const EC_GROUP *group, size_t num, EC_POINT *points[], BN_CTX *ctx);
+\& int EC_POINTs_mul(const EC_GROUP *group, EC_POINT *r, const BIGNUM *n, size_t num, const EC_POINT *p[], const BIGNUM *m[], BN_CTX *ctx);
+\& int EC_POINT_mul(const EC_GROUP *group, EC_POINT *r, const BIGNUM *n, const EC_POINT *q, const BIGNUM *m, BN_CTX *ctx);
+\& int EC_GROUP_precompute_mult(EC_GROUP *group, BN_CTX *ctx);
+\& int EC_GROUP_have_precompute_mult(const EC_GROUP *group);
+.Ve
+.SH "DESCRIPTION"
+.IX Header "DESCRIPTION"
+EC_POINT_add adds the two points \fBa\fR and \fBb\fR and places the result in \fBr\fR. Similarly EC_POINT_dbl doubles the point \fBa\fR and places the
+result in \fBr\fR. In both cases it is valid for \fBr\fR to be one of \fBa\fR or \fBb\fR.
+.PP
+EC_POINT_invert calculates the inverse of the supplied point \fBa\fR. The result is placed back in \fBa\fR.
+.PP
+The function EC_POINT_is_at_infinity tests whether the supplied point is at infinity or not.
+.PP
+EC_POINT_is_on_curve tests whether the supplied point is on the curve or not.
+.PP
+EC_POINT_cmp compares the two supplied points and tests whether or not they are equal.
+.PP
+The functions EC_POINT_make_affine and EC_POINTs_make_affine force the internal representation of the \s-1EC_POINT\s0(s) into the affine
+co-ordinate system. In the case of EC_POINTs_make_affine the value \fBnum\fR provides the number of points in the array \fBpoints\fR to be
+forced.
+.PP
+EC_POINT_mul calculates the value generator * \fBn\fR + \fBq\fR * \fBm\fR and stores the result in \fBr\fR. The value \fBn\fR may be \s-1NULL\s0 in which case the result is just \fBq\fR * \fBm\fR.
+.PP
+EC_POINTs_mul calculates the value generator * \fBn\fR + \fBq[0]\fR * \fBm[0]\fR + ... + \fBq[num\-1]\fR * \fBm[num\-1]\fR. As for EC_POINT_mul the value
+\&\fBn\fR may be \s-1NULL.\s0
+.PP
+The function EC_GROUP_precompute_mult stores multiples of the generator for faster point multiplication, whilst
+EC_GROUP_have_precompute_mult tests whether precomputation has already been done. See \fIEC_GROUP_copy\fR\|(3) for information
+about the generator.
+.SH "RETURN VALUES"
+.IX Header "RETURN VALUES"
+The following functions return 1 on success or 0 on error: EC_POINT_add, EC_POINT_dbl, EC_POINT_invert, EC_POINT_make_affine,
+EC_POINTs_make_affine, EC_POINTs_make_affine, EC_POINT_mul, EC_POINTs_mul and EC_GROUP_precompute_mult.
+.PP
+EC_POINT_is_at_infinity returns 1 if the point is at infinity, or 0 otherwise.
+.PP
+EC_POINT_is_on_curve returns 1 if the point is on the curve, 0 if not, or \-1 on error.
+.PP
+EC_POINT_cmp returns 1 if the points are not equal, 0 if they are, or \-1 on error.
+.PP
+EC_GROUP_have_precompute_mult return 1 if a precomputation has been done, or 0 if not.
+.SH "SEE ALSO"
+.IX Header "SEE ALSO"
+\&\fIcrypto\fR\|(3), \fIec\fR\|(3), \fIEC_GROUP_new\fR\|(3), \fIEC_GROUP_copy\fR\|(3),
+\&\fIEC_POINT_new\fR\|(3), \fIEC_KEY_new\fR\|(3),
+\&\fIEC_GFp_simple_method\fR\|(3), \fId2i_ECPKParameters\fR\|(3)
diff --git a/secure/lib/libcrypto/man/EC_POINT_new.3 b/secure/lib/libcrypto/man/EC_POINT_new.3
new file mode 100644
index 0000000..b28c7c1
--- /dev/null
+++ b/secure/lib/libcrypto/man/EC_POINT_new.3
@@ -0,0 +1,260 @@
+.\" Automatically generated by Pod::Man 2.28 (Pod::Simple 3.30)
+.\"
+.\" Standard preamble:
+.\" ========================================================================
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Vb \" Begin verbatim text
+.ft CW
+.nf
+.ne \\$1
+..
+.de Ve \" End verbatim text
+.ft R
+.fi
+..
+.\" Set up some character translations and predefined strings. \*(-- will
+.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
+.\" double quote, and \*(R" will give a right double quote. \*(C+ will
+.\" give a nicer C++. Capital omega is used to do unbreakable dashes and
+.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff,
+.\" nothing in troff, for use with C<>.
+.tr \(*W-
+.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
+.ie n \{\
+. ds -- \(*W-
+. ds PI pi
+. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
+. ds L" ""
+. ds R" ""
+. ds C` ""
+. ds C' ""
+'br\}
+.el\{\
+. ds -- \|\(em\|
+. ds PI \(*p
+. ds L" ``
+. ds R" ''
+. ds C`
+. ds C'
+'br\}
+.\"
+.\" Escape single quotes in literal strings from groff's Unicode transform.
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\"
+.\" If the F register is turned on, we'll generate index entries on stderr for
+.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
+.\" entries marked with X<> in POD. Of course, you'll have to process the
+.\" output yourself in some meaningful fashion.
+.\"
+.\" Avoid warning from groff about undefined register 'F'.
+.de IX
+..
+.nr rF 0
+.if \n(.g .if rF .nr rF 1
+.if (\n(rF:(\n(.g==0)) \{
+. if \nF \{
+. de IX
+. tm Index:\\$1\t\\n%\t"\\$2"
+..
+. if !\nF==2 \{
+. nr % 0
+. nr F 2
+. \}
+. \}
+.\}
+.rr rF
+.\"
+.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
+.\" Fear. Run. Save yourself. No user-serviceable parts.
+. \" fudge factors for nroff and troff
+.if n \{\
+. ds #H 0
+. ds #V .8m
+. ds #F .3m
+. ds #[ \f1
+. ds #] \fP
+.\}
+.if t \{\
+. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+. ds #V .6m
+. ds #F 0
+. ds #[ \&
+. ds #] \&
+.\}
+. \" simple accents for nroff and troff
+.if n \{\
+. ds ' \&
+. ds ` \&
+. ds ^ \&
+. ds , \&
+. ds ~ ~
+. ds /
+.\}
+.if t \{\
+. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
+.\}
+. \" troff and (daisy-wheel) nroff accents
+.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
+.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
+.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
+.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
+.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
+.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
+.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
+.ds ae a\h'-(\w'a'u*4/10)'e
+.ds Ae A\h'-(\w'A'u*4/10)'E
+. \" corrections for vroff
+.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
+.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
+. \" for low resolution devices (crt and lpr)
+.if \n(.H>23 .if \n(.V>19 \
+\{\
+. ds : e
+. ds 8 ss
+. ds o a
+. ds d- d\h'-1'\(ga
+. ds D- D\h'-1'\(hy
+. ds th \o'bp'
+. ds Th \o'LP'
+. ds ae ae
+. ds Ae AE
+.\}
+.rm #[ #] #H #V #F C
+.\" ========================================================================
+.\"
+.IX Title "EC_POINT_new 3"
+.TH EC_POINT_new 3 "2015-07-09" "1.0.2d" "OpenSSL"
+.\" For nroff, turn off justification. Always turn off hyphenation; it makes
+.\" way too many mistakes in technical documents.
+.if n .ad l
+.nh
+.SH "NAME"
+EC_POINT_new, EC_POINT_free, EC_POINT_clear_free, EC_POINT_copy, EC_POINT_dup, EC_POINT_method_of, EC_POINT_set_to_infinity, EC_POINT_set_Jprojective_coordinates, EC_POINT_get_Jprojective_coordinates_GFp, EC_POINT_set_affine_coordinates_GFp, EC_POINT_get_affine_coordinates_GFp, EC_POINT_set_compressed_coordinates_GFp, EC_POINT_set_affine_coordinates_GF2m, EC_POINT_get_affine_coordinates_GF2m, EC_POINT_set_compressed_coordinates_GF2m, EC_POINT_point2oct, EC_POINT_oct2point, EC_POINT_point2bn, EC_POINT_bn2point, EC_POINT_point2hex, EC_POINT_hex2point \- Functions for creating, destroying and manipulating EC_POINT objects.
+.SH "SYNOPSIS"
+.IX Header "SYNOPSIS"
+.Vb 2
+\& #include <openssl/ec.h>
+\& #include <openssl/bn.h>
+\&
+\& EC_POINT *EC_POINT_new(const EC_GROUP *group);
+\& void EC_POINT_free(EC_POINT *point);
+\& void EC_POINT_clear_free(EC_POINT *point);
+\& int EC_POINT_copy(EC_POINT *dst, const EC_POINT *src);
+\& EC_POINT *EC_POINT_dup(const EC_POINT *src, const EC_GROUP *group);
+\& const EC_METHOD *EC_POINT_method_of(const EC_POINT *point);
+\& int EC_POINT_set_to_infinity(const EC_GROUP *group, EC_POINT *point);
+\& int EC_POINT_set_Jprojective_coordinates_GFp(const EC_GROUP *group, EC_POINT *p,
+\& const BIGNUM *x, const BIGNUM *y, const BIGNUM *z, BN_CTX *ctx);
+\& int EC_POINT_get_Jprojective_coordinates_GFp(const EC_GROUP *group,
+\& const EC_POINT *p, BIGNUM *x, BIGNUM *y, BIGNUM *z, BN_CTX *ctx);
+\& int EC_POINT_set_affine_coordinates_GFp(const EC_GROUP *group, EC_POINT *p,
+\& const BIGNUM *x, const BIGNUM *y, BN_CTX *ctx);
+\& int EC_POINT_get_affine_coordinates_GFp(const EC_GROUP *group,
+\& const EC_POINT *p, BIGNUM *x, BIGNUM *y, BN_CTX *ctx);
+\& int EC_POINT_set_compressed_coordinates_GFp(const EC_GROUP *group, EC_POINT *p,
+\& const BIGNUM *x, int y_bit, BN_CTX *ctx);
+\& int EC_POINT_set_affine_coordinates_GF2m(const EC_GROUP *group, EC_POINT *p,
+\& const BIGNUM *x, const BIGNUM *y, BN_CTX *ctx);
+\& int EC_POINT_get_affine_coordinates_GF2m(const EC_GROUP *group,
+\& const EC_POINT *p, BIGNUM *x, BIGNUM *y, BN_CTX *ctx);
+\& int EC_POINT_set_compressed_coordinates_GF2m(const EC_GROUP *group, EC_POINT *p,
+\& const BIGNUM *x, int y_bit, BN_CTX *ctx);
+\& size_t EC_POINT_point2oct(const EC_GROUP *group, const EC_POINT *p,
+\& point_conversion_form_t form,
+\& unsigned char *buf, size_t len, BN_CTX *ctx);
+\& int EC_POINT_oct2point(const EC_GROUP *group, EC_POINT *p,
+\& const unsigned char *buf, size_t len, BN_CTX *ctx);
+\& BIGNUM *EC_POINT_point2bn(const EC_GROUP *, const EC_POINT *,
+\& point_conversion_form_t form, BIGNUM *, BN_CTX *);
+\& EC_POINT *EC_POINT_bn2point(const EC_GROUP *, const BIGNUM *,
+\& EC_POINT *, BN_CTX *);
+\& char *EC_POINT_point2hex(const EC_GROUP *, const EC_POINT *,
+\& point_conversion_form_t form, BN_CTX *);
+\& EC_POINT *EC_POINT_hex2point(const EC_GROUP *, const char *,
+\& EC_POINT *, BN_CTX *);
+.Ve
+.SH "DESCRIPTION"
+.IX Header "DESCRIPTION"
+An \s-1EC_POINT\s0 represents a point on a curve. A new point is constructed by calling the function EC_POINT_new and providing the \fBgroup\fR
+object that the point relates to.
+.PP
+EC_POINT_free frees the memory associated with the \s-1EC_POINT.\s0
+.PP
+EC_POINT_clear_free destroys any sensitive data held within the \s-1EC_POINT\s0 and then frees its memory.
+.PP
+EC_POINT_copy copies the point \fBsrc\fR into \fBdst\fR. Both \fBsrc\fR and \fBdst\fR must use the same \s-1EC_METHOD.\s0
+.PP
+EC_POINT_dup creates a new \s-1EC_POINT\s0 object and copies the content from \fBsrc\fR to the newly created
+\&\s-1EC_POINT\s0 object.
+.PP
+EC_POINT_method_of obtains the \s-1EC_METHOD\s0 associated with \fBpoint\fR.
+.PP
+A valid point on a curve is the special point at infinity. A point is set to be at infinity by calling EC_POINT_set_to_infinity.
+.PP
+The affine co-ordinates for a point describe a point in terms of its x and y position. The functions
+EC_POINT_set_affine_coordinates_GFp and EC_POINT_set_affine_coordinates_GF2m set the \fBx\fR and \fBy\fR co-ordinates for the point
+\&\fBp\fR defined over the curve given in \fBgroup\fR.
+.PP
+As well as the affine co-ordinates, a point can alternatively be described in terms of its Jacobian
+projective co-ordinates (for Fp curves only). Jacobian projective co-ordinates are expressed as three values x, y and z. Working in
+this co-ordinate system provides more efficient point multiplication operations.
+A mapping exists between Jacobian projective co-ordinates and affine co-ordinates. A Jacobian projective co-ordinate (x, y, z) can be written as an affine co-ordinate as (x/(z^2), y/(z^3)). Conversion to Jacobian projective to affine co-ordinates is simple. The co-ordinate (x, y) is
+mapped to (x, y, 1). To set or get the projective co-ordinates use EC_POINT_set_Jprojective_coordinates_GFp and
+EC_POINT_get_Jprojective_coordinates_GFp respectively.
+.PP
+Points can also be described in terms of their compressed co-ordinates. For a point (x, y), for any given value for x such that the point is
+on the curve there will only ever be two possible values for y. Therefore a point can be set using the EC_POINT_set_compressed_coordinates_GFp
+and EC_POINT_set_compressed_coordinates_GF2m functions where \fBx\fR is the x co-ordinate and \fBy_bit\fR is a value 0 or 1 to identify which of
+the two possible values for y should be used.
+.PP
+In addition EC_POINTs can be converted to and from various external
+representations. Supported representations are octet strings, BIGNUMs and
+hexadecimal. Octet strings are stored in a buffer along with an associated
+buffer length. A point held in a \s-1BIGNUM\s0 is calculated by converting the point to
+an octet string and then converting that octet string into a \s-1BIGNUM\s0 integer.
+Points in hexadecimal format are stored in a \s-1NULL\s0 terminated character string
+where each character is one of the printable values 0\-9 or A\-F (or a\-f).
+.PP
+The functions EC_POINT_point2oct, EC_POINT_oct2point, EC_POINT_point2bn, EC_POINT_bn2point, EC_POINT_point2hex and EC_POINT_hex2point convert
+from and to EC_POINTs for the formats: octet string, \s-1BIGNUM\s0 and hexadecimal respectively.
+.PP
+The function EC_POINT_point2oct must be supplied with a buffer long enough to store the octet string. The return value provides the number of
+octets stored. Calling the function with a \s-1NULL\s0 buffer will not perform the conversion but will still return the required buffer length.
+.PP
+The function EC_POINT_point2hex will allocate sufficient memory to store the hexadecimal string. It is the caller's responsibility to free
+this memory with a subsequent call to \fIOPENSSL_free()\fR.
+.SH "RETURN VALUES"
+.IX Header "RETURN VALUES"
+EC_POINT_new and EC_POINT_dup return the newly allocated \s-1EC_POINT\s0 or \s-1NULL\s0 on error.
+.PP
+The following functions return 1 on success or 0 on error: EC_POINT_copy, EC_POINT_set_to_infinity, EC_POINT_set_Jprojective_coordinates_GFp,
+EC_POINT_get_Jprojective_coordinates_GFp, EC_POINT_set_affine_coordinates_GFp, EC_POINT_get_affine_coordinates_GFp,
+EC_POINT_set_compressed_coordinates_GFp, EC_POINT_set_affine_coordinates_GF2m, EC_POINT_get_affine_coordinates_GF2m,
+EC_POINT_set_compressed_coordinates_GF2m and EC_POINT_oct2point.
+.PP
+EC_POINT_method_of returns the \s-1EC_METHOD\s0 associated with the supplied \s-1EC_POINT.\s0
+.PP
+EC_POINT_point2oct returns the length of the required buffer, or 0 on error.
+.PP
+EC_POINT_point2bn returns the pointer to the \s-1BIGNUM\s0 supplied, or \s-1NULL\s0 on error.
+.PP
+EC_POINT_bn2point returns the pointer to the \s-1EC_POINT\s0 supplied, or \s-1NULL\s0 on error.
+.PP
+EC_POINT_point2hex returns a pointer to the hex string, or \s-1NULL\s0 on error.
+.PP
+EC_POINT_hex2point returns the pointer to the \s-1EC_POINT\s0 supplied, or \s-1NULL\s0 on error.
+.SH "SEE ALSO"
+.IX Header "SEE ALSO"
+\&\fIcrypto\fR\|(3), \fIec\fR\|(3), \fIEC_GROUP_new\fR\|(3), \fIEC_GROUP_copy\fR\|(3),
+\&\fIEC_POINT_add\fR\|(3), \fIEC_KEY_new\fR\|(3),
+\&\fIEC_GFp_simple_method\fR\|(3), \fId2i_ECPKParameters\fR\|(3)
diff --git a/secure/lib/libcrypto/man/ERR_GET_LIB.3 b/secure/lib/libcrypto/man/ERR_GET_LIB.3
index 9b5ac95..d7eb967 100644
--- a/secure/lib/libcrypto/man/ERR_GET_LIB.3
+++ b/secure/lib/libcrypto/man/ERR_GET_LIB.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "ERR_GET_LIB 3"
-.TH ERR_GET_LIB 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH ERR_GET_LIB 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/ERR_clear_error.3 b/secure/lib/libcrypto/man/ERR_clear_error.3
index 914086d..e98d053 100644
--- a/secure/lib/libcrypto/man/ERR_clear_error.3
+++ b/secure/lib/libcrypto/man/ERR_clear_error.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "ERR_clear_error 3"
-.TH ERR_clear_error 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH ERR_clear_error 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/ERR_error_string.3 b/secure/lib/libcrypto/man/ERR_error_string.3
index 2899929..470342a 100644
--- a/secure/lib/libcrypto/man/ERR_error_string.3
+++ b/secure/lib/libcrypto/man/ERR_error_string.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "ERR_error_string 3"
-.TH ERR_error_string 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH ERR_error_string 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/ERR_get_error.3 b/secure/lib/libcrypto/man/ERR_get_error.3
index f6f85d7..a6ade52 100644
--- a/secure/lib/libcrypto/man/ERR_get_error.3
+++ b/secure/lib/libcrypto/man/ERR_get_error.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "ERR_get_error 3"
-.TH ERR_get_error 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH ERR_get_error 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/ERR_load_crypto_strings.3 b/secure/lib/libcrypto/man/ERR_load_crypto_strings.3
index 4918d0c..9c42a1a 100644
--- a/secure/lib/libcrypto/man/ERR_load_crypto_strings.3
+++ b/secure/lib/libcrypto/man/ERR_load_crypto_strings.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "ERR_load_crypto_strings 3"
-.TH ERR_load_crypto_strings 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH ERR_load_crypto_strings 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/ERR_load_strings.3 b/secure/lib/libcrypto/man/ERR_load_strings.3
index 08af931..ea5990d 100644
--- a/secure/lib/libcrypto/man/ERR_load_strings.3
+++ b/secure/lib/libcrypto/man/ERR_load_strings.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "ERR_load_strings 3"
-.TH ERR_load_strings 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH ERR_load_strings 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/ERR_print_errors.3 b/secure/lib/libcrypto/man/ERR_print_errors.3
index d54345a..3b01d25 100644
--- a/secure/lib/libcrypto/man/ERR_print_errors.3
+++ b/secure/lib/libcrypto/man/ERR_print_errors.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "ERR_print_errors 3"
-.TH ERR_print_errors 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH ERR_print_errors 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/ERR_put_error.3 b/secure/lib/libcrypto/man/ERR_put_error.3
index 37cc32f..694b728 100644
--- a/secure/lib/libcrypto/man/ERR_put_error.3
+++ b/secure/lib/libcrypto/man/ERR_put_error.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "ERR_put_error 3"
-.TH ERR_put_error 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH ERR_put_error 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/ERR_remove_state.3 b/secure/lib/libcrypto/man/ERR_remove_state.3
index a0ece2b..57009b3 100644
--- a/secure/lib/libcrypto/man/ERR_remove_state.3
+++ b/secure/lib/libcrypto/man/ERR_remove_state.3
@@ -133,34 +133,47 @@
.\" ========================================================================
.\"
.IX Title "ERR_remove_state 3"
-.TH ERR_remove_state 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH ERR_remove_state 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
.nh
.SH "NAME"
-ERR_remove_state \- free a thread's error queue
+ERR_remove_thread_state, ERR_remove_state \- free a thread's error queue
.SH "SYNOPSIS"
.IX Header "SYNOPSIS"
.Vb 1
\& #include <openssl/err.h>
\&
+\& void ERR_remove_thread_state(const CRYPTO_THREADID *tid);
+.Ve
+.PP
+Deprecated:
+.PP
+.Vb 1
\& void ERR_remove_state(unsigned long pid);
.Ve
.SH "DESCRIPTION"
.IX Header "DESCRIPTION"
-\&\fIERR_remove_state()\fR frees the error queue associated with thread \fBpid\fR.
-If \fBpid\fR == 0, the current thread will have its error queue removed.
+\&\fIERR_remove_thread_state()\fR frees the error queue associated with thread \fBtid\fR.
+If \fBtid\fR == \fB\s-1NULL\s0\fR, the current thread will have its error queue removed.
.PP
Since error queue data structures are allocated automatically for new
threads, they must be freed when threads are terminated in order to
avoid memory leaks.
+.PP
+ERR_remove_state is deprecated and has been replaced by
+ERR_remove_thread_state. Since threads in OpenSSL are no longer identified
+by unsigned long values any argument to this function is ignored. Calling
+ERR_remove_state is equivalent to \fBERR_remove_thread_state(\s-1NULL\s0)\fR.
.SH "RETURN VALUE"
.IX Header "RETURN VALUE"
-\&\fIERR_remove_state()\fR returns no value.
+ERR_remove_thread_state and \fIERR_remove_state()\fR return no value.
.SH "SEE ALSO"
.IX Header "SEE ALSO"
\&\fIerr\fR\|(3)
.SH "HISTORY"
.IX Header "HISTORY"
-\&\fIERR_remove_state()\fR is available in all versions of SSLeay and OpenSSL.
+\&\fIERR_remove_state()\fR is available in all versions of SSLeay and OpenSSL. It
+was deprecated in OpenSSL 1.0.0 when ERR_remove_thread_state was introduced
+and thread IDs were introduced to identify threads instead of 'unsigned long'.
diff --git a/secure/lib/libcrypto/man/ERR_set_mark.3 b/secure/lib/libcrypto/man/ERR_set_mark.3
index fada986..29ed839 100644
--- a/secure/lib/libcrypto/man/ERR_set_mark.3
+++ b/secure/lib/libcrypto/man/ERR_set_mark.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "ERR_set_mark 3"
-.TH ERR_set_mark 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH ERR_set_mark 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/EVP_BytesToKey.3 b/secure/lib/libcrypto/man/EVP_BytesToKey.3
index 20c608f..b11c92d 100644
--- a/secure/lib/libcrypto/man/EVP_BytesToKey.3
+++ b/secure/lib/libcrypto/man/EVP_BytesToKey.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "EVP_BytesToKey 3"
-.TH EVP_BytesToKey 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH EVP_BytesToKey 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
@@ -172,8 +172,8 @@ If the total key and \s-1IV\s0 length is less than the digest length and
\&\fB\s-1MD5\s0\fR is used then the derivation algorithm is compatible with PKCS#5 v1.5
otherwise a non standard extension is used to derive the extra data.
.PP
-Newer applications should use more standard algorithms such as PKCS#5
-v2.0 for key derivation.
+Newer applications should use a more modern algorithm such as \s-1PBKDF2\s0 as
+defined in PKCS#5v2.1 and provided by \s-1PKCS5_PBKDF2_HMAC.\s0
.SH "KEY DERIVATION ALGORITHM"
.IX Header "KEY DERIVATION ALGORITHM"
The key and \s-1IV\s0 is derived by concatenating D_1, D_2, etc until
@@ -191,7 +191,10 @@ The initial bytes are used for the key and the subsequent bytes for
the \s-1IV.\s0
.SH "RETURN VALUES"
.IX Header "RETURN VALUES"
-\&\fIEVP_BytesToKey()\fR returns the size of the derived key in bytes.
+If \fBdata\fR is \s-1NULL,\s0 then \fIEVP_BytesToKey()\fR returns the number of bytes
+needed to store the derived key.
+Otherwise, \fIEVP_BytesToKey()\fR returns the size of the derived key in bytes,
+or 0 on error.
.SH "SEE ALSO"
.IX Header "SEE ALSO"
\&\fIevp\fR\|(3), \fIrand\fR\|(3),
diff --git a/secure/lib/libcrypto/man/EVP_DigestInit.3 b/secure/lib/libcrypto/man/EVP_DigestInit.3
index 5df74cb..dcdff95 100644
--- a/secure/lib/libcrypto/man/EVP_DigestInit.3
+++ b/secure/lib/libcrypto/man/EVP_DigestInit.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "EVP_DigestInit 3"
-.TH EVP_DigestInit 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH EVP_DigestInit 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
@@ -141,10 +141,10 @@
.SH "NAME"
EVP_MD_CTX_init, EVP_MD_CTX_create, EVP_DigestInit_ex, EVP_DigestUpdate,
EVP_DigestFinal_ex, EVP_MD_CTX_cleanup, EVP_MD_CTX_destroy, EVP_MAX_MD_SIZE,
-EVP_MD_CTX_copy_ex, EVP_MD_CTX_copy, EVP_MD_type, EVP_MD_pkey_type, EVP_MD_size,
-EVP_MD_block_size, EVP_MD_CTX_md, EVP_MD_CTX_size, EVP_MD_CTX_block_size, EVP_MD_CTX_type,
-EVP_md_null, EVP_md2, EVP_md5, EVP_sha, EVP_sha1, EVP_sha224, EVP_sha256,
-EVP_sha384, EVP_sha512, EVP_dss, EVP_dss1, EVP_mdc2,
+EVP_MD_CTX_copy_ex, EVP_DigestInit, EVP_DigestFinal, EVP_MD_CTX_copy, EVP_MD_type,
+EVP_MD_pkey_type, EVP_MD_size, EVP_MD_block_size, EVP_MD_CTX_md, EVP_MD_CTX_size,
+EVP_MD_CTX_block_size, EVP_MD_CTX_type, EVP_md_null, EVP_md2, EVP_md5, EVP_sha, EVP_sha1,
+EVP_sha224, EVP_sha256, EVP_sha384, EVP_sha512, EVP_dss, EVP_dss1, EVP_mdc2,
EVP_ripemd160, EVP_get_digestbyname, EVP_get_digestbynid, EVP_get_digestbyobj \-
EVP digest routines
.SH "SYNOPSIS"
@@ -407,7 +407,7 @@ and \fIEVP_DigestFinal_ex()\fR were added in OpenSSL 0.9.7.
.PP
\&\fIEVP_md_null()\fR, \fIEVP_md2()\fR, \fIEVP_md5()\fR, \fIEVP_sha()\fR, \fIEVP_sha1()\fR,
\&\fIEVP_dss()\fR, \fIEVP_dss1()\fR, \fIEVP_mdc2()\fR and \fIEVP_ripemd160()\fR were
-changed to return truely const \s-1EVP_MD\s0 * in OpenSSL 0.9.7.
+changed to return truly const \s-1EVP_MD\s0 * in OpenSSL 0.9.7.
.PP
The link between digests and signing algorithms was fixed in OpenSSL 1.0 and
later, so now \fIEVP_sha1()\fR can be used with \s-1RSA\s0 and \s-1DSA\s0; there is no need to
diff --git a/secure/lib/libcrypto/man/EVP_DigestSignInit.3 b/secure/lib/libcrypto/man/EVP_DigestSignInit.3
index 4cf71d5..e607489 100644
--- a/secure/lib/libcrypto/man/EVP_DigestSignInit.3
+++ b/secure/lib/libcrypto/man/EVP_DigestSignInit.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "EVP_DigestSignInit 3"
-.TH EVP_DigestSignInit 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH EVP_DigestSignInit 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/EVP_DigestVerifyInit.3 b/secure/lib/libcrypto/man/EVP_DigestVerifyInit.3
index dfae90f..7b3cea1 100644
--- a/secure/lib/libcrypto/man/EVP_DigestVerifyInit.3
+++ b/secure/lib/libcrypto/man/EVP_DigestVerifyInit.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "EVP_DigestVerifyInit 3"
-.TH EVP_DigestVerifyInit 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH EVP_DigestVerifyInit 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
@@ -148,7 +148,7 @@ EVP_DigestVerifyInit, EVP_DigestVerifyUpdate, EVP_DigestVerifyFinal \- EVP signa
\& int EVP_DigestVerifyInit(EVP_MD_CTX *ctx, EVP_PKEY_CTX **pctx,
\& const EVP_MD *type, ENGINE *e, EVP_PKEY *pkey);
\& int EVP_DigestVerifyUpdate(EVP_MD_CTX *ctx, const void *d, unsigned int cnt);
-\& int EVP_DigestVerifyFinal(EVP_MD_CTX *ctx, unsigned char *sig, size_t siglen);
+\& int EVP_DigestVerifyFinal(EVP_MD_CTX *ctx, const unsigned char *sig, size_t siglen);
.Ve
.SH "DESCRIPTION"
.IX Header "DESCRIPTION"
diff --git a/secure/lib/libcrypto/man/EVP_EncryptInit.3 b/secure/lib/libcrypto/man/EVP_EncryptInit.3
index e8826f5..87ad242 100644
--- a/secure/lib/libcrypto/man/EVP_EncryptInit.3
+++ b/secure/lib/libcrypto/man/EVP_EncryptInit.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "EVP_EncryptInit 3"
-.TH EVP_EncryptInit 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH EVP_EncryptInit 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
@@ -153,7 +153,17 @@ EVP_CIPHER_CTX_nid, EVP_CIPHER_CTX_block_size, EVP_CIPHER_CTX_key_length,
EVP_CIPHER_CTX_iv_length, EVP_CIPHER_CTX_get_app_data,
EVP_CIPHER_CTX_set_app_data, EVP_CIPHER_CTX_type, EVP_CIPHER_CTX_flags,
EVP_CIPHER_CTX_mode, EVP_CIPHER_param_to_asn1, EVP_CIPHER_asn1_to_param,
-EVP_CIPHER_CTX_set_padding \- EVP cipher routines
+EVP_CIPHER_CTX_set_padding, EVP_enc_null, EVP_des_cbc, EVP_des_ecb,
+EVP_des_cfb, EVP_des_ofb, EVP_des_ede_cbc, EVP_des_ede, EVP_des_ede_ofb,
+EVP_des_ede_cfb, EVP_des_ede3_cbc, EVP_des_ede3, EVP_des_ede3_ofb,
+EVP_des_ede3_cfb, EVP_desx_cbc, EVP_rc4, EVP_rc4_40, EVP_idea_cbc,
+EVP_idea_ecb, EVP_idea_cfb, EVP_idea_ofb, EVP_idea_cbc, EVP_rc2_cbc,
+EVP_rc2_ecb, EVP_rc2_cfb, EVP_rc2_ofb, EVP_rc2_40_cbc, EVP_rc2_64_cbc,
+EVP_bf_cbc, EVP_bf_ecb, EVP_bf_cfb, EVP_bf_ofb, EVP_cast5_cbc,
+EVP_cast5_ecb, EVP_cast5_cfb, EVP_cast5_ofb, EVP_rc5_32_12_16_cbc,
+EVP_rc5_32_12_16_ecb, EVP_rc5_32_12_16_cfb, EVP_rc5_32_12_16_ofb,
+EVP_aes_128_gcm, EVP_aes_192_gcm, EVP_aes_256_gcm, EVP_aes_128_ccm,
+EVP_aes_192_ccm, EVP_aes_256_ccm \- EVP cipher routines
.SH "SYNOPSIS"
.IX Header "SYNOPSIS"
.Vb 1
@@ -368,8 +378,7 @@ or the parameters cannot be set (for example the \s-1RC2\s0 effective key length
is not supported.
.PP
\&\fIEVP_CIPHER_CTX_ctrl()\fR allows various cipher specific parameters to be determined
-and set. Currently only the \s-1RC2\s0 effective key length and the number of rounds of
-\&\s-1RC5\s0 can be set.
+and set.
.SH "RETURN VALUES"
.IX Header "RETURN VALUES"
\&\fIEVP_EncryptInit_ex()\fR, \fIEVP_EncryptUpdate()\fR and \fIEVP_EncryptFinal_ex()\fR
@@ -457,6 +466,92 @@ length cipher.
\&\s-1RC5\s0 encryption algorithm in \s-1CBC, ECB, CFB\s0 and \s-1OFB\s0 modes respectively. This is a variable key length
cipher with an additional \*(L"number of rounds\*(R" parameter. By default the key length is set to 128
bits and 12 rounds.
+.IP "EVP_aes_128_gcm(void), EVP_aes_192_gcm(void), EVP_aes_256_gcm(void)" 4
+.IX Item "EVP_aes_128_gcm(void), EVP_aes_192_gcm(void), EVP_aes_256_gcm(void)"
+\&\s-1AES\s0 Galois Counter Mode (\s-1GCM\s0) for 128, 192 and 256 bit keys respectively.
+These ciphers require additional control operations to function correctly: see
+\&\*(L"\s-1GCM\s0 mode\*(R" section below for details.
+.IP "EVP_aes_128_ccm(void), EVP_aes_192_ccm(void), EVP_aes_256_ccm(void)" 4
+.IX Item "EVP_aes_128_ccm(void), EVP_aes_192_ccm(void), EVP_aes_256_ccm(void)"
+\&\s-1AES\s0 Counter with CBC-MAC Mode (\s-1CCM\s0) for 128, 192 and 256 bit keys respectively.
+These ciphers require additional control operations to function correctly: see
+\&\s-1CCM\s0 mode section below for details.
+.SH "GCM Mode"
+.IX Header "GCM Mode"
+For \s-1GCM\s0 mode ciphers the behaviour of the \s-1EVP\s0 interface is subtly altered and
+several \s-1GCM\s0 specific ctrl operations are supported.
+.PP
+To specify any additional authenticated data (\s-1AAD\s0) a call to \fIEVP_CipherUpdate()\fR,
+\&\fIEVP_EncryptUpdate()\fR or \fIEVP_DecryptUpdate()\fR should be made with the output
+parameter \fBout\fR set to \fB\s-1NULL\s0\fR.
+.PP
+When decrypting the return value of \fIEVP_DecryptFinal()\fR or \fIEVP_CipherFinal()\fR
+indicates if the operation was successful. If it does not indicate success
+the authentication operation has failed and any output data \fB\s-1MUST NOT\s0\fR
+be used as it is corrupted.
+.PP
+The following ctrls are supported in \s-1GCM\s0 mode:
+.PP
+.Vb 1
+\& EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_GCM_SET_IVLEN, ivlen, NULL);
+.Ve
+.PP
+Sets the \s-1GCM IV\s0 length: this call can only be made before specifying an \s-1IV.\s0 If
+not called a default \s-1IV\s0 length is used (96 bits for \s-1AES\s0).
+.PP
+.Vb 1
+\& EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_GCM_GET_TAG, taglen, tag);
+.Ve
+.PP
+Writes \fBtaglen\fR bytes of the tag value to the buffer indicated by \fBtag\fR.
+This call can only be made when encrypting data and \fBafter\fR all data has been
+processed (e.g. after an \fIEVP_EncryptFinal()\fR call).
+.PP
+.Vb 1
+\& EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_GCM_SET_TAG, taglen, tag);
+.Ve
+.PP
+Sets the expected tag to \fBtaglen\fR bytes from \fBtag\fR. This call is only legal
+when decrypting data and must be made \fBbefore\fR any data is processed (e.g.
+before any \fIEVP_DecryptUpdate()\fR call).
+.PP
+See \s-1EXAMPLES\s0 below for an example of the use of \s-1GCM\s0 mode.
+.SH "CCM Mode"
+.IX Header "CCM Mode"
+The behaviour of \s-1CCM\s0 mode ciphers is similar to \s-1CCM\s0 mode but with a few
+additional requirements and different ctrl values.
+.PP
+Like \s-1GCM\s0 mode any additional authenticated data (\s-1AAD\s0) is passed by calling
+\&\fIEVP_CipherUpdate()\fR, \fIEVP_EncryptUpdate()\fR or \fIEVP_DecryptUpdate()\fR with the output
+parameter \fBout\fR set to \fB\s-1NULL\s0\fR. Additionally the total plaintext or ciphertext
+length \fB\s-1MUST\s0\fR be passed to \fIEVP_CipherUpdate()\fR, \fIEVP_EncryptUpdate()\fR or
+\&\fIEVP_DecryptUpdate()\fR with the output and input parameters (\fBin\fR and \fBout\fR)
+set to \fB\s-1NULL\s0\fR and the length passed in the \fBinl\fR parameter.
+.PP
+The following ctrls are supported in \s-1CCM\s0 mode:
+.PP
+.Vb 1
+\& EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_CCM_SET_TAG, taglen, tag);
+.Ve
+.PP
+This call is made to set the expected \fB\s-1CCM\s0\fR tag value when decrypting or
+the length of the tag (with the \fBtag\fR parameter set to \s-1NULL\s0) when encrypting.
+The tag length is often referred to as \fBM\fR. If not set a default value is
+used (12 for \s-1AES\s0).
+.PP
+.Vb 1
+\& EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_CCM_SET_L, ivlen, NULL);
+.Ve
+.PP
+Sets the \s-1CCM \s0\fBL\fR value. If not set a default is used (8 for \s-1AES\s0).
+.PP
+.Vb 1
+\& EVP_CIPHER_CTX_ctrl(ctx, EVP_CTRL_CCM_SET_IVLEN, ivlen, NULL);
+.Ve
+.PP
+Sets the \s-1CCM\s0 nonce (\s-1IV\s0) length: this call can only be made before specifying
+an nonce value. The nonce length is given by \fB15 \- L\fR so it is 7 by default
+for \s-1AES.\s0
.SH "NOTES"
.IX Header "NOTES"
Where possible the \fB\s-1EVP\s0\fR interface to symmetric ciphers should be used in
diff --git a/secure/lib/libcrypto/man/EVP_OpenInit.3 b/secure/lib/libcrypto/man/EVP_OpenInit.3
index 1e2695e..d5acd78 100644
--- a/secure/lib/libcrypto/man/EVP_OpenInit.3
+++ b/secure/lib/libcrypto/man/EVP_OpenInit.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "EVP_OpenInit 3"
-.TH EVP_OpenInit 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH EVP_OpenInit 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/EVP_PKEY_CTX_ctrl.3 b/secure/lib/libcrypto/man/EVP_PKEY_CTX_ctrl.3
index aaf6c8e..47ee71f 100644
--- a/secure/lib/libcrypto/man/EVP_PKEY_CTX_ctrl.3
+++ b/secure/lib/libcrypto/man/EVP_PKEY_CTX_ctrl.3
@@ -133,13 +133,19 @@
.\" ========================================================================
.\"
.IX Title "EVP_PKEY_CTX_ctrl 3"
-.TH EVP_PKEY_CTX_ctrl 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH EVP_PKEY_CTX_ctrl 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
.nh
.SH "NAME"
-EVP_PKEY_ctrl, EVP_PKEY_ctrl_str \- algorithm specific control operations
+EVP_PKEY_CTX_ctrl, EVP_PKEY_CTX_ctrl_str, EVP_PKEY_get_default_digest_nid,
+EVP_PKEY_CTX_set_signature_md, EVP_PKEY_CTX_set_rsa_padding,
+EVP_PKEY_CTX_set_rsa_pss_saltlen, EVP_PKEY_CTX_set_rsa_rsa_keygen_bits,
+EVP_PKEY_CTX_set_rsa_keygen_pubexp, EVP_PKEY_CTX_set_dsa_paramgen_bits,
+EVP_PKEY_CTX_set_dh_paramgen_prime_len,
+EVP_PKEY_CTX_set_dh_paramgen_generator,
+EVP_PKEY_CTX_set_ec_paramgen_curve_nid \- algorithm specific control operations
.SH "SYNOPSIS"
.IX Header "SYNOPSIS"
.Vb 1
@@ -182,7 +188,7 @@ The control command is indicated in \fBcmd\fR and any additional arguments in
Applications will not normally call \fIEVP_PKEY_CTX_ctrl()\fR directly but will
instead call one of the algorithm specific macros below.
.PP
-The function \fIEVP_PKEY_ctrl_str()\fR allows an application to send an algorithm
+The function \fIEVP_PKEY_CTX_ctrl_str()\fR allows an application to send an algorithm
specific control operation to a context \fBctx\fR in string form. This is
intended to be used for options specified on the command line or in text
files. The commands supported are documented in the openssl utility
diff --git a/secure/lib/libcrypto/man/EVP_PKEY_CTX_new.3 b/secure/lib/libcrypto/man/EVP_PKEY_CTX_new.3
index 639ed76..e113644 100644
--- a/secure/lib/libcrypto/man/EVP_PKEY_CTX_new.3
+++ b/secure/lib/libcrypto/man/EVP_PKEY_CTX_new.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "EVP_PKEY_CTX_new 3"
-.TH EVP_PKEY_CTX_new 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH EVP_PKEY_CTX_new 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/EVP_PKEY_cmp.3 b/secure/lib/libcrypto/man/EVP_PKEY_cmp.3
index 958a3d8..67c9fe2 100644
--- a/secure/lib/libcrypto/man/EVP_PKEY_cmp.3
+++ b/secure/lib/libcrypto/man/EVP_PKEY_cmp.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "EVP_PKEY_cmp 3"
-.TH EVP_PKEY_cmp 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH EVP_PKEY_cmp 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
@@ -160,10 +160,10 @@ doesn't use parameters.
The function \fIEVP_PKEY_copy_parameters()\fR copies the parameters from key
\&\fBfrom\fR to key \fBto\fR.
.PP
-The funcion \fIEVP_PKEY_cmp_parameters()\fR compares the parameters of keys
+The function \fIEVP_PKEY_cmp_parameters()\fR compares the parameters of keys
\&\fBa\fR and \fBb\fR.
.PP
-The funcion \fIEVP_PKEY_cmp()\fR compares the public key components and paramters
+The function \fIEVP_PKEY_cmp()\fR compares the public key components and paramters
(if present) of keys \fBa\fR and \fBb\fR.
.SH "NOTES"
.IX Header "NOTES"
diff --git a/secure/lib/libcrypto/man/EVP_PKEY_decrypt.3 b/secure/lib/libcrypto/man/EVP_PKEY_decrypt.3
index bf3d420..c52382d 100644
--- a/secure/lib/libcrypto/man/EVP_PKEY_decrypt.3
+++ b/secure/lib/libcrypto/man/EVP_PKEY_decrypt.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "EVP_PKEY_decrypt 3"
-.TH EVP_PKEY_decrypt 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH EVP_PKEY_decrypt 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/EVP_PKEY_derive.3 b/secure/lib/libcrypto/man/EVP_PKEY_derive.3
index 68ddbbb..7923347 100644
--- a/secure/lib/libcrypto/man/EVP_PKEY_derive.3
+++ b/secure/lib/libcrypto/man/EVP_PKEY_derive.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "EVP_PKEY_derive 3"
-.TH EVP_PKEY_derive 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH EVP_PKEY_derive 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/EVP_PKEY_encrypt.3 b/secure/lib/libcrypto/man/EVP_PKEY_encrypt.3
index be44f10..6fd361b 100644
--- a/secure/lib/libcrypto/man/EVP_PKEY_encrypt.3
+++ b/secure/lib/libcrypto/man/EVP_PKEY_encrypt.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "EVP_PKEY_encrypt 3"
-.TH EVP_PKEY_encrypt 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH EVP_PKEY_encrypt 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/EVP_PKEY_get_default_digest.3 b/secure/lib/libcrypto/man/EVP_PKEY_get_default_digest.3
index 33be108..084b3e2 100644
--- a/secure/lib/libcrypto/man/EVP_PKEY_get_default_digest.3
+++ b/secure/lib/libcrypto/man/EVP_PKEY_get_default_digest.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "EVP_PKEY_get_default_digest 3"
-.TH EVP_PKEY_get_default_digest 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH EVP_PKEY_get_default_digest 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/EVP_PKEY_keygen.3 b/secure/lib/libcrypto/man/EVP_PKEY_keygen.3
index 1c4daf9..48e07f8 100644
--- a/secure/lib/libcrypto/man/EVP_PKEY_keygen.3
+++ b/secure/lib/libcrypto/man/EVP_PKEY_keygen.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "EVP_PKEY_keygen 3"
-.TH EVP_PKEY_keygen 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH EVP_PKEY_keygen 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/EVP_PKEY_new.3 b/secure/lib/libcrypto/man/EVP_PKEY_new.3
index ab0c7d9..fd37be3 100644
--- a/secure/lib/libcrypto/man/EVP_PKEY_new.3
+++ b/secure/lib/libcrypto/man/EVP_PKEY_new.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "EVP_PKEY_new 3"
-.TH EVP_PKEY_new 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH EVP_PKEY_new 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/EVP_PKEY_print_private.3 b/secure/lib/libcrypto/man/EVP_PKEY_print_private.3
index 4adde36..4924221 100644
--- a/secure/lib/libcrypto/man/EVP_PKEY_print_private.3
+++ b/secure/lib/libcrypto/man/EVP_PKEY_print_private.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "EVP_PKEY_print_private 3"
-.TH EVP_PKEY_print_private 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH EVP_PKEY_print_private 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/EVP_PKEY_set1_RSA.3 b/secure/lib/libcrypto/man/EVP_PKEY_set1_RSA.3
index 890d124..6f32c7c 100644
--- a/secure/lib/libcrypto/man/EVP_PKEY_set1_RSA.3
+++ b/secure/lib/libcrypto/man/EVP_PKEY_set1_RSA.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "EVP_PKEY_set1_RSA 3"
-.TH EVP_PKEY_set1_RSA 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH EVP_PKEY_set1_RSA 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/EVP_PKEY_sign.3 b/secure/lib/libcrypto/man/EVP_PKEY_sign.3
index d3611e0..ea634a3 100644
--- a/secure/lib/libcrypto/man/EVP_PKEY_sign.3
+++ b/secure/lib/libcrypto/man/EVP_PKEY_sign.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "EVP_PKEY_sign 3"
-.TH EVP_PKEY_sign 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH EVP_PKEY_sign 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/EVP_PKEY_verify.3 b/secure/lib/libcrypto/man/EVP_PKEY_verify.3
index 09c8d6a..3ba848b 100644
--- a/secure/lib/libcrypto/man/EVP_PKEY_verify.3
+++ b/secure/lib/libcrypto/man/EVP_PKEY_verify.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "EVP_PKEY_verify 3"
-.TH EVP_PKEY_verify 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH EVP_PKEY_verify 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/EVP_PKEY_verify_recover.3 b/secure/lib/libcrypto/man/EVP_PKEY_verify_recover.3
index 940d0a2..617a33b 100644
--- a/secure/lib/libcrypto/man/EVP_PKEY_verify_recover.3
+++ b/secure/lib/libcrypto/man/EVP_PKEY_verify_recover.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "EVP_PKEY_verify_recover 3"
-.TH EVP_PKEY_verify_recover 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH EVP_PKEY_verify_recover 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/EVP_SealInit.3 b/secure/lib/libcrypto/man/EVP_SealInit.3
index e57d788..42ccd2a 100644
--- a/secure/lib/libcrypto/man/EVP_SealInit.3
+++ b/secure/lib/libcrypto/man/EVP_SealInit.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "EVP_SealInit 3"
-.TH EVP_SealInit 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH EVP_SealInit 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/EVP_SignInit.3 b/secure/lib/libcrypto/man/EVP_SignInit.3
index 7aed114..5cbe3f9 100644
--- a/secure/lib/libcrypto/man/EVP_SignInit.3
+++ b/secure/lib/libcrypto/man/EVP_SignInit.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "EVP_SignInit 3"
-.TH EVP_SignInit 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH EVP_SignInit 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/EVP_VerifyInit.3 b/secure/lib/libcrypto/man/EVP_VerifyInit.3
index b9ce446..5d34258 100644
--- a/secure/lib/libcrypto/man/EVP_VerifyInit.3
+++ b/secure/lib/libcrypto/man/EVP_VerifyInit.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "EVP_VerifyInit 3"
-.TH EVP_VerifyInit 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH EVP_VerifyInit 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/OBJ_nid2obj.3 b/secure/lib/libcrypto/man/OBJ_nid2obj.3
index 31fe94d..acdaff9 100644
--- a/secure/lib/libcrypto/man/OBJ_nid2obj.3
+++ b/secure/lib/libcrypto/man/OBJ_nid2obj.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "OBJ_nid2obj 3"
-.TH OBJ_nid2obj 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH OBJ_nid2obj 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/OPENSSL_Applink.3 b/secure/lib/libcrypto/man/OPENSSL_Applink.3
index 78f7f38..221e86c 100644
--- a/secure/lib/libcrypto/man/OPENSSL_Applink.3
+++ b/secure/lib/libcrypto/man/OPENSSL_Applink.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "OPENSSL_Applink 3"
-.TH OPENSSL_Applink 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH OPENSSL_Applink 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/OPENSSL_VERSION_NUMBER.3 b/secure/lib/libcrypto/man/OPENSSL_VERSION_NUMBER.3
index 7db1044..58aa212 100644
--- a/secure/lib/libcrypto/man/OPENSSL_VERSION_NUMBER.3
+++ b/secure/lib/libcrypto/man/OPENSSL_VERSION_NUMBER.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "OPENSSL_VERSION_NUMBER 3"
-.TH OPENSSL_VERSION_NUMBER 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH OPENSSL_VERSION_NUMBER 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
@@ -155,7 +155,7 @@ OPENSSL_VERSION_NUMBER, SSLeay, SSLeay_version \- get OpenSSL version number
\&\s-1OPENSSL_VERSION_NUMBER\s0 is a numeric release version identifier:
.PP
.Vb 1
-\& MMNNFFPPS: major minor fix patch status
+\& MNNFFPPS: major minor fix patch status
.Ve
.PP
The status nibble has one of the values 0 for development, 1 to e for betas
diff --git a/secure/lib/libcrypto/man/OPENSSL_config.3 b/secure/lib/libcrypto/man/OPENSSL_config.3
index f34f3e8..63ef10a 100644
--- a/secure/lib/libcrypto/man/OPENSSL_config.3
+++ b/secure/lib/libcrypto/man/OPENSSL_config.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "OPENSSL_config 3"
-.TH OPENSSL_config 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH OPENSSL_config 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
@@ -183,16 +183,6 @@ configuration file.
.PP
Applications should free up configuration at application closedown by calling
\&\fICONF_modules_free()\fR.
-.SH "RESTRICTIONS"
-.IX Header "RESTRICTIONS"
-The \fIOPENSSL_config()\fR function is designed to be a very simple \*(L"call it and
-forget it\*(R" function. As a result its behaviour is somewhat limited. It ignores
-all errors silently and it can only load from the standard configuration file
-location for example.
-.PP
-It is however \fBmuch\fR better than nothing. Applications which need finer
-control over their configuration functionality should use the configuration
-functions such as \fICONF_load_modules()\fR directly.
.SH "RETURN VALUES"
.IX Header "RETURN VALUES"
Neither \fIOPENSSL_config()\fR nor \fIOPENSSL_no_config()\fR return a value.
diff --git a/secure/lib/libcrypto/man/OPENSSL_ia32cap.3 b/secure/lib/libcrypto/man/OPENSSL_ia32cap.3
index 0e8972d..1acf0f7 100644
--- a/secure/lib/libcrypto/man/OPENSSL_ia32cap.3
+++ b/secure/lib/libcrypto/man/OPENSSL_ia32cap.3
@@ -133,46 +133,94 @@
.\" ========================================================================
.\"
.IX Title "OPENSSL_ia32cap 3"
-.TH OPENSSL_ia32cap 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH OPENSSL_ia32cap 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
.nh
.SH "NAME"
-OPENSSL_ia32cap \- finding the IA\-32 processor capabilities
+OPENSSL_ia32cap, OPENSSL_ia32cap_loc \- the IA\-32 processor capabilities vector
.SH "SYNOPSIS"
.IX Header "SYNOPSIS"
.Vb 2
-\& unsigned long *OPENSSL_ia32cap_loc(void);
-\& #define OPENSSL_ia32cap (*(OPENSSL_ia32cap_loc()))
+\& unsigned int *OPENSSL_ia32cap_loc(void);
+\& #define OPENSSL_ia32cap ((OPENSSL_ia32cap_loc())[0])
.Ve
.SH "DESCRIPTION"
.IX Header "DESCRIPTION"
Value returned by \fIOPENSSL_ia32cap_loc()\fR is address of a variable
-containing \s-1IA\-32\s0 processor capabilities bit vector as it appears in \s-1EDX\s0
-register after executing \s-1CPUID\s0 instruction with EAX=1 input value (see
-Intel Application Note #241618). Naturally it's meaningful on IA\-32[E]
-platforms only. The variable is normally set up automatically upon
-toolkit initialization, but can be manipulated afterwards to modify
-crypto library behaviour. For the moment of this writing six bits are
-significant, namely:
-.PP
-1. bit #28 denoting Hyperthreading, which is used to distiguish
- cores with shared cache;
-2. bit #26 denoting \s-1SSE2\s0 support;
-3. bit #25 denoting \s-1SSE\s0 support;
-4. bit #23 denoting \s-1MMX\s0 support;
-5. bit #20, reserved by Intel, is used to choose between \s-1RC4\s0 code
- pathes;
-6. bit #4 denoting presence of Time-Stamp Counter.
+containing \s-1IA\-32\s0 processor capabilities bit vector as it appears in
+\&\s-1EDX:ECX\s0 register pair after executing \s-1CPUID\s0 instruction with EAX=1
+input value (see Intel Application Note #241618). Naturally it's
+meaningful on x86 and x86_64 platforms only. The variable is normally
+set up automatically upon toolkit initialization, but can be
+manipulated afterwards to modify crypto library behaviour. For the
+moment of this writing following bits are significant:
+.IP "bit #4 denoting presence of Time-Stamp Counter." 4
+.IX Item "bit #4 denoting presence of Time-Stamp Counter."
+.PD 0
+.IP "bit #19 denoting availability of \s-1CLFLUSH\s0 instruction;" 4
+.IX Item "bit #19 denoting availability of CLFLUSH instruction;"
+.IP "bit #20, reserved by Intel, is used to choose among \s-1RC4\s0 code paths;" 4
+.IX Item "bit #20, reserved by Intel, is used to choose among RC4 code paths;"
+.IP "bit #23 denoting \s-1MMX\s0 support;" 4
+.IX Item "bit #23 denoting MMX support;"
+.IP "bit #24, \s-1FXSR\s0 bit, denoting availability of \s-1XMM\s0 registers;" 4
+.IX Item "bit #24, FXSR bit, denoting availability of XMM registers;"
+.IP "bit #25 denoting \s-1SSE\s0 support;" 4
+.IX Item "bit #25 denoting SSE support;"
+.IP "bit #26 denoting \s-1SSE2\s0 support;" 4
+.IX Item "bit #26 denoting SSE2 support;"
+.IP "bit #28 denoting Hyperthreading, which is used to distinguish cores with shared cache;" 4
+.IX Item "bit #28 denoting Hyperthreading, which is used to distinguish cores with shared cache;"
+.IP "bit #30, reserved by Intel, denotes specifically Intel CPUs;" 4
+.IX Item "bit #30, reserved by Intel, denotes specifically Intel CPUs;"
+.IP "bit #33 denoting availability of \s-1PCLMULQDQ\s0 instruction;" 4
+.IX Item "bit #33 denoting availability of PCLMULQDQ instruction;"
+.IP "bit #41 denoting \s-1SSSE3,\s0 Supplemental \s-1SSE3,\s0 support;" 4
+.IX Item "bit #41 denoting SSSE3, Supplemental SSE3, support;"
+.IP "bit #43 denoting \s-1AMD XOP\s0 support (forced to zero on non-AMD CPUs);" 4
+.IX Item "bit #43 denoting AMD XOP support (forced to zero on non-AMD CPUs);"
+.IP "bit #57 denoting AES-NI instruction set extension;" 4
+.IX Item "bit #57 denoting AES-NI instruction set extension;"
+.IP "bit #59, \s-1OSXSAVE\s0 bit, denoting availability of \s-1YMM\s0 registers;" 4
+.IX Item "bit #59, OSXSAVE bit, denoting availability of YMM registers;"
+.IP "bit #60 denoting \s-1AVX\s0 extension;" 4
+.IX Item "bit #60 denoting AVX extension;"
+.IP "bit #62 denoting availability of \s-1RDRAND\s0 instruction;" 4
+.IX Item "bit #62 denoting availability of RDRAND instruction;"
+.PD
.PP
For example, clearing bit #26 at run-time disables high-performance
-\&\s-1SSE2\s0 code present in the crypto library. You might have to do this if
-target OpenSSL application is executed on \s-1SSE2\s0 capable \s-1CPU,\s0 but under
-control of \s-1OS\s0 which does not support \s-1SSE2\s0 extentions. Even though you
-can manipulate the value programmatically, you most likely will find it
-more appropriate to set up an environment variable with the same name
-prior starting target application, e.g. on Intel P4 processor 'env
-OPENSSL_ia32cap=0x12900010 apps/openssl', to achieve same effect
-without modifying the application source code. Alternatively you can
-reconfigure the toolkit with no\-sse2 option and recompile.
+\&\s-1SSE2\s0 code present in the crypto library, while clearing bit #24
+disables \s-1SSE2\s0 code operating on 128\-bit \s-1XMM\s0 register bank. You might
+have to do the latter if target OpenSSL application is executed on \s-1SSE2\s0
+capable \s-1CPU,\s0 but under control of \s-1OS\s0 that does not enable \s-1XMM\s0
+registers. Even though you can manipulate the value programmatically,
+you most likely will find it more appropriate to set up an environment
+variable with the same name prior starting target application, e.g. on
+Intel P4 processor 'env OPENSSL_ia32cap=0x16980010 apps/openssl', or
+better yet 'env OPENSSL_ia32cap=~0x1000000 apps/openssl' to achieve same
+effect without modifying the application source code. Alternatively you
+can reconfigure the toolkit with no\-sse2 option and recompile.
+.PP
+Less intuitive is clearing bit #28. The truth is that it's not copied
+from \s-1CPUID\s0 output verbatim, but is adjusted to reflect whether or not
+the data cache is actually shared between logical cores. This in turn
+affects the decision on whether or not expensive countermeasures
+against cache-timing attacks are applied, most notably in \s-1AES\s0 assembler
+module.
+.PP
+The vector is further extended with \s-1EBX\s0 value returned by \s-1CPUID\s0 with
+EAX=7 and ECX=0 as input. Following bits are significant:
+.IP "bit #64+3 denoting availability of \s-1BMI1\s0 instructions, e.g. \s-1ANDN\s0;" 4
+.IX Item "bit #64+3 denoting availability of BMI1 instructions, e.g. ANDN;"
+.PD 0
+.IP "bit #64+5 denoting availability of \s-1AVX2\s0 instructions;" 4
+.IX Item "bit #64+5 denoting availability of AVX2 instructions;"
+.IP "bit #64+8 denoting availability of \s-1BMI2\s0 instructions, e.g. \s-1MUXL\s0 and \s-1RORX\s0;" 4
+.IX Item "bit #64+8 denoting availability of BMI2 instructions, e.g. MUXL and RORX;"
+.IP "bit #64+18 denoting availability of \s-1RDSEED\s0 instruction;" 4
+.IX Item "bit #64+18 denoting availability of RDSEED instruction;"
+.IP "bit #64+19 denoting availability of \s-1ADCX\s0 and \s-1ADOX\s0 instructions;" 4
+.IX Item "bit #64+19 denoting availability of ADCX and ADOX instructions;"
diff --git a/secure/lib/libcrypto/man/OPENSSL_instrument_bus.3 b/secure/lib/libcrypto/man/OPENSSL_instrument_bus.3
new file mode 100644
index 0000000..5d8fea1
--- /dev/null
+++ b/secure/lib/libcrypto/man/OPENSSL_instrument_bus.3
@@ -0,0 +1,178 @@
+.\" Automatically generated by Pod::Man 2.28 (Pod::Simple 3.30)
+.\"
+.\" Standard preamble:
+.\" ========================================================================
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Vb \" Begin verbatim text
+.ft CW
+.nf
+.ne \\$1
+..
+.de Ve \" End verbatim text
+.ft R
+.fi
+..
+.\" Set up some character translations and predefined strings. \*(-- will
+.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
+.\" double quote, and \*(R" will give a right double quote. \*(C+ will
+.\" give a nicer C++. Capital omega is used to do unbreakable dashes and
+.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff,
+.\" nothing in troff, for use with C<>.
+.tr \(*W-
+.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
+.ie n \{\
+. ds -- \(*W-
+. ds PI pi
+. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
+. ds L" ""
+. ds R" ""
+. ds C` ""
+. ds C' ""
+'br\}
+.el\{\
+. ds -- \|\(em\|
+. ds PI \(*p
+. ds L" ``
+. ds R" ''
+. ds C`
+. ds C'
+'br\}
+.\"
+.\" Escape single quotes in literal strings from groff's Unicode transform.
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\"
+.\" If the F register is turned on, we'll generate index entries on stderr for
+.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
+.\" entries marked with X<> in POD. Of course, you'll have to process the
+.\" output yourself in some meaningful fashion.
+.\"
+.\" Avoid warning from groff about undefined register 'F'.
+.de IX
+..
+.nr rF 0
+.if \n(.g .if rF .nr rF 1
+.if (\n(rF:(\n(.g==0)) \{
+. if \nF \{
+. de IX
+. tm Index:\\$1\t\\n%\t"\\$2"
+..
+. if !\nF==2 \{
+. nr % 0
+. nr F 2
+. \}
+. \}
+.\}
+.rr rF
+.\"
+.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
+.\" Fear. Run. Save yourself. No user-serviceable parts.
+. \" fudge factors for nroff and troff
+.if n \{\
+. ds #H 0
+. ds #V .8m
+. ds #F .3m
+. ds #[ \f1
+. ds #] \fP
+.\}
+.if t \{\
+. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+. ds #V .6m
+. ds #F 0
+. ds #[ \&
+. ds #] \&
+.\}
+. \" simple accents for nroff and troff
+.if n \{\
+. ds ' \&
+. ds ` \&
+. ds ^ \&
+. ds , \&
+. ds ~ ~
+. ds /
+.\}
+.if t \{\
+. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
+.\}
+. \" troff and (daisy-wheel) nroff accents
+.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
+.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
+.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
+.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
+.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
+.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
+.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
+.ds ae a\h'-(\w'a'u*4/10)'e
+.ds Ae A\h'-(\w'A'u*4/10)'E
+. \" corrections for vroff
+.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
+.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
+. \" for low resolution devices (crt and lpr)
+.if \n(.H>23 .if \n(.V>19 \
+\{\
+. ds : e
+. ds 8 ss
+. ds o a
+. ds d- d\h'-1'\(ga
+. ds D- D\h'-1'\(hy
+. ds th \o'bp'
+. ds Th \o'LP'
+. ds ae ae
+. ds Ae AE
+.\}
+.rm #[ #] #H #V #F C
+.\" ========================================================================
+.\"
+.IX Title "OPENSSL_instrument_bus 3"
+.TH OPENSSL_instrument_bus 3 "2015-07-09" "1.0.2d" "OpenSSL"
+.\" For nroff, turn off justification. Always turn off hyphenation; it makes
+.\" way too many mistakes in technical documents.
+.if n .ad l
+.nh
+.SH "NAME"
+OPENSSL_instrument_bus, OPENSSL_instrument_bus2 \- instrument references to memory bus
+.SH "SYNOPSIS"
+.IX Header "SYNOPSIS"
+.Vb 4
+\& #ifdef OPENSSL_CPUID_OBJ
+\& size_t OPENSSL_instrument_bus (int *vector,size_t num);
+\& size_t OPENSSL_instrument_bus2(int *vector,size_t num,size_t max);
+\& #endif
+.Ve
+.SH "DESCRIPTION"
+.IX Header "DESCRIPTION"
+It was empirically found that timings of references to primary memory
+are subject to irregular, apparently non-deterministic variations. The
+subroutines in question instrument these references for purposes of
+gathering entropy for random number generator. In order to make it
+bus-bound a 'flush cache line' instruction is used between probes. In
+addition probes are added to \fBvector\fR elements in atomic or
+interlocked manner, which should contribute additional noise on
+multi-processor systems. This also means that \fBvector[num]\fR should be
+zeroed upon invocation (if you want to retrieve actual probe values).
+.PP
+OPENSSL_instrument_bus performs \fBnum\fR probes and records the number of
+oscillator cycles every probe took.
+.PP
+OPENSSL_instrument_bus2 on the other hand \fBaccumulates\fR consecutive
+probes with the same value, i.e. in a way it records duration of
+periods when probe values appeared deterministic. The subroutine
+performs at most \fBmax\fR probes in attempt to fill the \fBvector[num]\fR,
+with \fBmax\fR value of 0 meaning \*(L"as many as it takes.\*(R"
+.SH "RETURN VALUE"
+.IX Header "RETURN VALUE"
+Return value of 0 indicates that \s-1CPU\s0 is not capable of performing the
+benchmark, either because oscillator counter or 'flush cache line' is
+not available on current platform. For reference, on x86 'flush cache
+line' was introduced with the \s-1SSE2\s0 extensions.
+.PP
+Otherwise number of recorded values is returned.
diff --git a/secure/lib/libcrypto/man/OPENSSL_load_builtin_modules.3 b/secure/lib/libcrypto/man/OPENSSL_load_builtin_modules.3
index fa0a058..06a041f 100644
--- a/secure/lib/libcrypto/man/OPENSSL_load_builtin_modules.3
+++ b/secure/lib/libcrypto/man/OPENSSL_load_builtin_modules.3
@@ -133,13 +133,13 @@
.\" ========================================================================
.\"
.IX Title "OPENSSL_load_builtin_modules 3"
-.TH OPENSSL_load_builtin_modules 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH OPENSSL_load_builtin_modules 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
.nh
.SH "NAME"
-OPENSSL_load_builtin_modules \- add standard configuration modules
+OPENSSL_load_builtin_modules, ASN1_add_oid_module, ENGINE_add_conf_module \- add standard configuration modules
.SH "SYNOPSIS"
.IX Header "SYNOPSIS"
.Vb 1
diff --git a/secure/lib/libcrypto/man/OpenSSL_add_all_algorithms.3 b/secure/lib/libcrypto/man/OpenSSL_add_all_algorithms.3
index 9e88ee9..5338f19 100644
--- a/secure/lib/libcrypto/man/OpenSSL_add_all_algorithms.3
+++ b/secure/lib/libcrypto/man/OpenSSL_add_all_algorithms.3
@@ -133,13 +133,13 @@
.\" ========================================================================
.\"
.IX Title "OpenSSL_add_all_algorithms 3"
-.TH OpenSSL_add_all_algorithms 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH OpenSSL_add_all_algorithms 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
.nh
.SH "NAME"
-OpenSSL_add_all_algorithms, OpenSSL_add_all_ciphers, OpenSSL_add_all_digests \-
+OpenSSL_add_all_algorithms, OpenSSL_add_all_ciphers, OpenSSL_add_all_digests, EVP_cleanup \-
add algorithms to internal table
.SH "SYNOPSIS"
.IX Header "SYNOPSIS"
diff --git a/secure/lib/libcrypto/man/PEM_write_bio_CMS_stream.3 b/secure/lib/libcrypto/man/PEM_write_bio_CMS_stream.3
index abc2345..48dcd4e 100644
--- a/secure/lib/libcrypto/man/PEM_write_bio_CMS_stream.3
+++ b/secure/lib/libcrypto/man/PEM_write_bio_CMS_stream.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "PEM_write_bio_CMS_stream 3"
-.TH PEM_write_bio_CMS_stream 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH PEM_write_bio_CMS_stream 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/PEM_write_bio_PKCS7_stream.3 b/secure/lib/libcrypto/man/PEM_write_bio_PKCS7_stream.3
index f186dba..2c5026b 100644
--- a/secure/lib/libcrypto/man/PEM_write_bio_PKCS7_stream.3
+++ b/secure/lib/libcrypto/man/PEM_write_bio_PKCS7_stream.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "PEM_write_bio_PKCS7_stream 3"
-.TH PEM_write_bio_PKCS7_stream 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH PEM_write_bio_PKCS7_stream 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/PKCS12_create.3 b/secure/lib/libcrypto/man/PKCS12_create.3
index 5b45b6e..f48de873 100644
--- a/secure/lib/libcrypto/man/PKCS12_create.3
+++ b/secure/lib/libcrypto/man/PKCS12_create.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "PKCS12_create 3"
-.TH PKCS12_create 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH PKCS12_create 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/PKCS12_parse.3 b/secure/lib/libcrypto/man/PKCS12_parse.3
index 4ce2f26..3c41710 100644
--- a/secure/lib/libcrypto/man/PKCS12_parse.3
+++ b/secure/lib/libcrypto/man/PKCS12_parse.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "PKCS12_parse 3"
-.TH PKCS12_parse 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH PKCS12_parse 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/PKCS7_decrypt.3 b/secure/lib/libcrypto/man/PKCS7_decrypt.3
index 479feb3..7f991b6 100644
--- a/secure/lib/libcrypto/man/PKCS7_decrypt.3
+++ b/secure/lib/libcrypto/man/PKCS7_decrypt.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "PKCS7_decrypt 3"
-.TH PKCS7_decrypt 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH PKCS7_decrypt 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/PKCS7_encrypt.3 b/secure/lib/libcrypto/man/PKCS7_encrypt.3
index 24b0089..1dd9942 100644
--- a/secure/lib/libcrypto/man/PKCS7_encrypt.3
+++ b/secure/lib/libcrypto/man/PKCS7_encrypt.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "PKCS7_encrypt 3"
-.TH PKCS7_encrypt 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH PKCS7_encrypt 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/PKCS7_sign.3 b/secure/lib/libcrypto/man/PKCS7_sign.3
index 4a2b7ce..9d6f06d 100644
--- a/secure/lib/libcrypto/man/PKCS7_sign.3
+++ b/secure/lib/libcrypto/man/PKCS7_sign.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "PKCS7_sign 3"
-.TH PKCS7_sign 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH PKCS7_sign 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/PKCS7_sign_add_signer.3 b/secure/lib/libcrypto/man/PKCS7_sign_add_signer.3
index 80205d5..a98f6df 100644
--- a/secure/lib/libcrypto/man/PKCS7_sign_add_signer.3
+++ b/secure/lib/libcrypto/man/PKCS7_sign_add_signer.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "PKCS7_sign_add_signer 3"
-.TH PKCS7_sign_add_signer 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH PKCS7_sign_add_signer 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/PKCS7_verify.3 b/secure/lib/libcrypto/man/PKCS7_verify.3
index 1bb8146..e58a10d 100644
--- a/secure/lib/libcrypto/man/PKCS7_verify.3
+++ b/secure/lib/libcrypto/man/PKCS7_verify.3
@@ -133,13 +133,13 @@
.\" ========================================================================
.\"
.IX Title "PKCS7_verify 3"
-.TH PKCS7_verify 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH PKCS7_verify 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
.nh
.SH "NAME"
-PKCS7_verify \- verify a PKCS#7 signedData structure
+PKCS7_verify, PKCS7_get0_signers \- verify a PKCS#7 signedData structure
.SH "SYNOPSIS"
.IX Header "SYNOPSIS"
.Vb 1
@@ -225,8 +225,8 @@ signer it cannot be trusted without additional evidence (such as a trusted
timestamp).
.SH "RETURN VALUES"
.IX Header "RETURN VALUES"
-\&\fIPKCS7_verify()\fR returns 1 for a successful verification and zero or a negative
-value if an error occurs.
+\&\fIPKCS7_verify()\fR returns one for a successful verification and zero
+if an error occurs.
.PP
\&\fIPKCS7_get0_signers()\fR returns all signers or \fB\s-1NULL\s0\fR if an error occurred.
.PP
diff --git a/secure/lib/libcrypto/man/RAND_add.3 b/secure/lib/libcrypto/man/RAND_add.3
index 21c5869..12f24ea 100644
--- a/secure/lib/libcrypto/man/RAND_add.3
+++ b/secure/lib/libcrypto/man/RAND_add.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "RAND_add 3"
-.TH RAND_add 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH RAND_add 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/RAND_bytes.3 b/secure/lib/libcrypto/man/RAND_bytes.3
index de043c1..d3dab57 100644
--- a/secure/lib/libcrypto/man/RAND_bytes.3
+++ b/secure/lib/libcrypto/man/RAND_bytes.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "RAND_bytes 3"
-.TH RAND_bytes 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH RAND_bytes 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/RAND_cleanup.3 b/secure/lib/libcrypto/man/RAND_cleanup.3
index d562b9d..5954086 100644
--- a/secure/lib/libcrypto/man/RAND_cleanup.3
+++ b/secure/lib/libcrypto/man/RAND_cleanup.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "RAND_cleanup 3"
-.TH RAND_cleanup 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH RAND_cleanup 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/RAND_egd.3 b/secure/lib/libcrypto/man/RAND_egd.3
index b6e027c..ff644ad 100644
--- a/secure/lib/libcrypto/man/RAND_egd.3
+++ b/secure/lib/libcrypto/man/RAND_egd.3
@@ -133,13 +133,13 @@
.\" ========================================================================
.\"
.IX Title "RAND_egd 3"
-.TH RAND_egd 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH RAND_egd 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
.nh
.SH "NAME"
-RAND_egd \- query entropy gathering daemon
+RAND_egd, RAND_egd_bytes, RAND_query_egd_bytes \- query entropy gathering daemon
.SH "SYNOPSIS"
.IX Header "SYNOPSIS"
.Vb 1
diff --git a/secure/lib/libcrypto/man/RAND_load_file.3 b/secure/lib/libcrypto/man/RAND_load_file.3
index 6d55b96..1e1ab59 100644
--- a/secure/lib/libcrypto/man/RAND_load_file.3
+++ b/secure/lib/libcrypto/man/RAND_load_file.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "RAND_load_file 3"
-.TH RAND_load_file 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH RAND_load_file 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/RAND_set_rand_method.3 b/secure/lib/libcrypto/man/RAND_set_rand_method.3
index df6118b..0a8ee84 100644
--- a/secure/lib/libcrypto/man/RAND_set_rand_method.3
+++ b/secure/lib/libcrypto/man/RAND_set_rand_method.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "RAND_set_rand_method 3"
-.TH RAND_set_rand_method 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH RAND_set_rand_method 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/RSA_blinding_on.3 b/secure/lib/libcrypto/man/RSA_blinding_on.3
index 3d65308..502b30c 100644
--- a/secure/lib/libcrypto/man/RSA_blinding_on.3
+++ b/secure/lib/libcrypto/man/RSA_blinding_on.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "RSA_blinding_on 3"
-.TH RSA_blinding_on 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH RSA_blinding_on 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/RSA_check_key.3 b/secure/lib/libcrypto/man/RSA_check_key.3
index 2e36c74..4d7689e 100644
--- a/secure/lib/libcrypto/man/RSA_check_key.3
+++ b/secure/lib/libcrypto/man/RSA_check_key.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "RSA_check_key 3"
-.TH RSA_check_key 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH RSA_check_key 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/RSA_generate_key.3 b/secure/lib/libcrypto/man/RSA_generate_key.3
index 0425128..05acc68 100644
--- a/secure/lib/libcrypto/man/RSA_generate_key.3
+++ b/secure/lib/libcrypto/man/RSA_generate_key.3
@@ -133,58 +133,71 @@
.\" ========================================================================
.\"
.IX Title "RSA_generate_key 3"
-.TH RSA_generate_key 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH RSA_generate_key 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
.nh
.SH "NAME"
-RSA_generate_key \- generate RSA key pair
+RSA_generate_key_ex, RSA_generate_key \- generate RSA key pair
.SH "SYNOPSIS"
.IX Header "SYNOPSIS"
.Vb 1
\& #include <openssl/rsa.h>
\&
+\& int RSA_generate_key_ex(RSA *rsa, int bits, BIGNUM *e, BN_GENCB *cb);
+.Ve
+.PP
+Deprecated:
+.PP
+.Vb 2
\& RSA *RSA_generate_key(int num, unsigned long e,
\& void (*callback)(int,int,void *), void *cb_arg);
.Ve
.SH "DESCRIPTION"
.IX Header "DESCRIPTION"
-\&\fIRSA_generate_key()\fR generates a key pair and returns it in a newly
-allocated \fB\s-1RSA\s0\fR structure. The pseudo-random number generator must
-be seeded prior to calling \fIRSA_generate_key()\fR.
+\&\fIRSA_generate_key_ex()\fR generates a key pair and stores it in the \fB\s-1RSA\s0\fR
+structure provided in \fBrsa\fR. The pseudo-random number generator must
+be seeded prior to calling \fIRSA_generate_key_ex()\fR.
.PP
-The modulus size will be \fBnum\fR bits, and the public exponent will be
+The modulus size will be of length \fBbits\fR, and the public exponent will be
\&\fBe\fR. Key sizes with \fBnum\fR < 1024 should be considered insecure.
The exponent is an odd number, typically 3, 17 or 65537.
.PP
A callback function may be used to provide feedback about the
-progress of the key generation. If \fBcallback\fR is not \fB\s-1NULL\s0\fR, it
-will be called as follows:
+progress of the key generation. If \fBcb\fR is not \fB\s-1NULL\s0\fR, it
+will be called as follows using the \fIBN_GENCB_call()\fR function
+described on the \fIBN_generate_prime\fR\|(3) page.
.IP "\(bu" 4
While a random prime number is generated, it is called as
described in \fIBN_generate_prime\fR\|(3).
.IP "\(bu" 4
When the n\-th randomly generated prime is rejected as not
-suitable for the key, \fBcallback(2, n, cb_arg)\fR is called.
+suitable for the key, \fBBN_GENCB_call(cb, 2, n)\fR is called.
.IP "\(bu" 4
When a random p has been found with p\-1 relatively prime to \fBe\fR,
-it is called as \fBcallback(3, 0, cb_arg)\fR.
+it is called as \fBBN_GENCB_call(cb, 3, 0)\fR.
.PP
-The process is then repeated for prime q with \fBcallback(3, 1, cb_arg)\fR.
+The process is then repeated for prime q with \fBBN_GENCB_call(cb, 3, 1)\fR.
+.PP
+RSA_generate_key is deprecated (new applications should use
+RSA_generate_key_ex instead). RSA_generate_key works in the same was as
+RSA_generate_key_ex except it uses \*(L"old style\*(R" call backs. See
+\&\fIBN_generate_prime\fR\|(3) for further details.
.SH "RETURN VALUE"
.IX Header "RETURN VALUE"
-If key generation fails, \fIRSA_generate_key()\fR returns \fB\s-1NULL\s0\fR; the
-error codes can be obtained by \fIERR_get_error\fR\|(3).
+If key generation fails, \fIRSA_generate_key()\fR returns \fB\s-1NULL\s0\fR.
+.PP
+The error codes can be obtained by \fIERR_get_error\fR\|(3).
.SH "BUGS"
.IX Header "BUGS"
-\&\fBcallback(2, x, cb_arg)\fR is used with two different meanings.
+\&\fBBN_GENCB_call(cb, 2, x)\fR is used with two different meanings.
.PP
\&\fIRSA_generate_key()\fR goes into an infinite loop for illegal input values.
.SH "SEE ALSO"
.IX Header "SEE ALSO"
\&\fIERR_get_error\fR\|(3), \fIrand\fR\|(3), \fIrsa\fR\|(3),
-\&\fIRSA_free\fR\|(3)
+\&\fIRSA_free\fR\|(3), \fIBN_generate_prime\fR\|(3)
.SH "HISTORY"
.IX Header "HISTORY"
The \fBcb_arg\fR argument was added in SSLeay 0.9.0.
diff --git a/secure/lib/libcrypto/man/RSA_get_ex_new_index.3 b/secure/lib/libcrypto/man/RSA_get_ex_new_index.3
index 954791d..18983d3 100644
--- a/secure/lib/libcrypto/man/RSA_get_ex_new_index.3
+++ b/secure/lib/libcrypto/man/RSA_get_ex_new_index.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "RSA_get_ex_new_index 3"
-.TH RSA_get_ex_new_index 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH RSA_get_ex_new_index 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/RSA_new.3 b/secure/lib/libcrypto/man/RSA_new.3
index 550f94c..48b7d3e 100644
--- a/secure/lib/libcrypto/man/RSA_new.3
+++ b/secure/lib/libcrypto/man/RSA_new.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "RSA_new 3"
-.TH RSA_new 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH RSA_new 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/RSA_padding_add_PKCS1_type_1.3 b/secure/lib/libcrypto/man/RSA_padding_add_PKCS1_type_1.3
index c273008..f050930 100644
--- a/secure/lib/libcrypto/man/RSA_padding_add_PKCS1_type_1.3
+++ b/secure/lib/libcrypto/man/RSA_padding_add_PKCS1_type_1.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "RSA_padding_add_PKCS1_type_1 3"
-.TH RSA_padding_add_PKCS1_type_1 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH RSA_padding_add_PKCS1_type_1 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/RSA_print.3 b/secure/lib/libcrypto/man/RSA_print.3
index d6a198c..ece4a26 100644
--- a/secure/lib/libcrypto/man/RSA_print.3
+++ b/secure/lib/libcrypto/man/RSA_print.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "RSA_print 3"
-.TH RSA_print 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH RSA_print 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/RSA_private_encrypt.3 b/secure/lib/libcrypto/man/RSA_private_encrypt.3
index f2f2989..15ad222 100644
--- a/secure/lib/libcrypto/man/RSA_private_encrypt.3
+++ b/secure/lib/libcrypto/man/RSA_private_encrypt.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "RSA_private_encrypt 3"
-.TH RSA_private_encrypt 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH RSA_private_encrypt 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/RSA_public_encrypt.3 b/secure/lib/libcrypto/man/RSA_public_encrypt.3
index 864ecd5..c3e05cf 100644
--- a/secure/lib/libcrypto/man/RSA_public_encrypt.3
+++ b/secure/lib/libcrypto/man/RSA_public_encrypt.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "RSA_public_encrypt 3"
-.TH RSA_public_encrypt 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH RSA_public_encrypt 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/RSA_set_method.3 b/secure/lib/libcrypto/man/RSA_set_method.3
index c2e11c4..e7a53de 100644
--- a/secure/lib/libcrypto/man/RSA_set_method.3
+++ b/secure/lib/libcrypto/man/RSA_set_method.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "RSA_set_method 3"
-.TH RSA_set_method 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH RSA_set_method 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/RSA_sign.3 b/secure/lib/libcrypto/man/RSA_sign.3
index 2f0c11a..a7a33bc 100644
--- a/secure/lib/libcrypto/man/RSA_sign.3
+++ b/secure/lib/libcrypto/man/RSA_sign.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "RSA_sign 3"
-.TH RSA_sign 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH RSA_sign 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/RSA_sign_ASN1_OCTET_STRING.3 b/secure/lib/libcrypto/man/RSA_sign_ASN1_OCTET_STRING.3
index d175c0f..aa7b184 100644
--- a/secure/lib/libcrypto/man/RSA_sign_ASN1_OCTET_STRING.3
+++ b/secure/lib/libcrypto/man/RSA_sign_ASN1_OCTET_STRING.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "RSA_sign_ASN1_OCTET_STRING 3"
-.TH RSA_sign_ASN1_OCTET_STRING 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH RSA_sign_ASN1_OCTET_STRING 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/RSA_size.3 b/secure/lib/libcrypto/man/RSA_size.3
index 6085268..5bdc8bf 100644
--- a/secure/lib/libcrypto/man/RSA_size.3
+++ b/secure/lib/libcrypto/man/RSA_size.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "RSA_size 3"
-.TH RSA_size 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH RSA_size 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/SMIME_read_CMS.3 b/secure/lib/libcrypto/man/SMIME_read_CMS.3
index fa5c996..e9647f9 100644
--- a/secure/lib/libcrypto/man/SMIME_read_CMS.3
+++ b/secure/lib/libcrypto/man/SMIME_read_CMS.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "SMIME_read_CMS 3"
-.TH SMIME_read_CMS 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH SMIME_read_CMS 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/SMIME_read_PKCS7.3 b/secure/lib/libcrypto/man/SMIME_read_PKCS7.3
index 420a504..6693560 100644
--- a/secure/lib/libcrypto/man/SMIME_read_PKCS7.3
+++ b/secure/lib/libcrypto/man/SMIME_read_PKCS7.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "SMIME_read_PKCS7 3"
-.TH SMIME_read_PKCS7 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH SMIME_read_PKCS7 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/SMIME_write_CMS.3 b/secure/lib/libcrypto/man/SMIME_write_CMS.3
index da2c50d..e0d738e 100644
--- a/secure/lib/libcrypto/man/SMIME_write_CMS.3
+++ b/secure/lib/libcrypto/man/SMIME_write_CMS.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "SMIME_write_CMS 3"
-.TH SMIME_write_CMS 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH SMIME_write_CMS 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/SMIME_write_PKCS7.3 b/secure/lib/libcrypto/man/SMIME_write_PKCS7.3
index 20b0716..c7c551a 100644
--- a/secure/lib/libcrypto/man/SMIME_write_PKCS7.3
+++ b/secure/lib/libcrypto/man/SMIME_write_PKCS7.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "SMIME_write_PKCS7 3"
-.TH SMIME_write_PKCS7 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH SMIME_write_PKCS7 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/SSLeay_version.3 b/secure/lib/libcrypto/man/SSLeay_version.3
new file mode 100644
index 0000000..677cc4b
--- /dev/null
+++ b/secure/lib/libcrypto/man/SSLeay_version.3
@@ -0,0 +1,192 @@
+.\" Automatically generated by Pod::Man 2.28 (Pod::Simple 3.30)
+.\"
+.\" Standard preamble:
+.\" ========================================================================
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Vb \" Begin verbatim text
+.ft CW
+.nf
+.ne \\$1
+..
+.de Ve \" End verbatim text
+.ft R
+.fi
+..
+.\" Set up some character translations and predefined strings. \*(-- will
+.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
+.\" double quote, and \*(R" will give a right double quote. \*(C+ will
+.\" give a nicer C++. Capital omega is used to do unbreakable dashes and
+.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff,
+.\" nothing in troff, for use with C<>.
+.tr \(*W-
+.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
+.ie n \{\
+. ds -- \(*W-
+. ds PI pi
+. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
+. ds L" ""
+. ds R" ""
+. ds C` ""
+. ds C' ""
+'br\}
+.el\{\
+. ds -- \|\(em\|
+. ds PI \(*p
+. ds L" ``
+. ds R" ''
+. ds C`
+. ds C'
+'br\}
+.\"
+.\" Escape single quotes in literal strings from groff's Unicode transform.
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\"
+.\" If the F register is turned on, we'll generate index entries on stderr for
+.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
+.\" entries marked with X<> in POD. Of course, you'll have to process the
+.\" output yourself in some meaningful fashion.
+.\"
+.\" Avoid warning from groff about undefined register 'F'.
+.de IX
+..
+.nr rF 0
+.if \n(.g .if rF .nr rF 1
+.if (\n(rF:(\n(.g==0)) \{
+. if \nF \{
+. de IX
+. tm Index:\\$1\t\\n%\t"\\$2"
+..
+. if !\nF==2 \{
+. nr % 0
+. nr F 2
+. \}
+. \}
+.\}
+.rr rF
+.\"
+.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
+.\" Fear. Run. Save yourself. No user-serviceable parts.
+. \" fudge factors for nroff and troff
+.if n \{\
+. ds #H 0
+. ds #V .8m
+. ds #F .3m
+. ds #[ \f1
+. ds #] \fP
+.\}
+.if t \{\
+. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+. ds #V .6m
+. ds #F 0
+. ds #[ \&
+. ds #] \&
+.\}
+. \" simple accents for nroff and troff
+.if n \{\
+. ds ' \&
+. ds ` \&
+. ds ^ \&
+. ds , \&
+. ds ~ ~
+. ds /
+.\}
+.if t \{\
+. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
+.\}
+. \" troff and (daisy-wheel) nroff accents
+.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
+.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
+.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
+.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
+.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
+.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
+.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
+.ds ae a\h'-(\w'a'u*4/10)'e
+.ds Ae A\h'-(\w'A'u*4/10)'E
+. \" corrections for vroff
+.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
+.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
+. \" for low resolution devices (crt and lpr)
+.if \n(.H>23 .if \n(.V>19 \
+\{\
+. ds : e
+. ds 8 ss
+. ds o a
+. ds d- d\h'-1'\(ga
+. ds D- D\h'-1'\(hy
+. ds th \o'bp'
+. ds Th \o'LP'
+. ds ae ae
+. ds Ae AE
+.\}
+.rm #[ #] #H #V #F C
+.\" ========================================================================
+.\"
+.IX Title "SSLeay_version 3"
+.TH SSLeay_version 3 "2015-07-09" "1.0.2d" "OpenSSL"
+.\" For nroff, turn off justification. Always turn off hyphenation; it makes
+.\" way too many mistakes in technical documents.
+.if n .ad l
+.nh
+.SH "NAME"
+SSLeay_version \- retrieve version/build information about OpenSSL library
+.SH "SYNOPSIS"
+.IX Header "SYNOPSIS"
+.Vb 1
+\& #include <openssl/crypto.h>
+\&
+\& const char *SSLeay_version(int type);
+.Ve
+.SH "DESCRIPTION"
+.IX Header "DESCRIPTION"
+\&\fISSLeay_version()\fR returns a pointer to a constant string describing the
+version of the OpenSSL library or giving information about the library
+build.
+.PP
+The following \fBtype\fR values are supported:
+.IP "\s-1SSLEAY_VERSION\s0" 4
+.IX Item "SSLEAY_VERSION"
+The version of the OpenSSL library including the release date.
+.IP "\s-1SSLEAY_CFLAGS\s0" 4
+.IX Item "SSLEAY_CFLAGS"
+The compiler flags set for the compilation process in the form
+\&\*(L"compiler: ...\*(R" if available or \*(L"compiler: information not available\*(R"
+otherwise.
+.IP "\s-1SSLEAY_BUILT_ON\s0" 4
+.IX Item "SSLEAY_BUILT_ON"
+The date of the build process in the form \*(L"built on: ...\*(R" if available
+or \*(L"built on: date not available\*(R" otherwise.
+.IP "\s-1SSLEAY_PLATFORM\s0" 4
+.IX Item "SSLEAY_PLATFORM"
+The \*(L"Configure\*(R" target of the library build in the form \*(L"platform: ...\*(R"
+if available or \*(L"platform: information not available\*(R" otherwise.
+.IP "\s-1SSLEAY_DIR\s0" 4
+.IX Item "SSLEAY_DIR"
+The \*(L"\s-1OPENSSLDIR\*(R"\s0 setting of the library build in the form \*(L"\s-1OPENSSLDIR: \*(R"..."\*(L"\s0
+if available or \*(R"\s-1OPENSSLDIR: N/A"\s0 otherwise.
+.SH "RETURN VALUES"
+.IX Header "RETURN VALUES"
+The following return values can occur:
+.ie n .IP """not available""" 4
+.el .IP "``not available''" 4
+.IX Item "not available"
+An invalid value for \fBtype\fR was given.
+.IP "Pointer to constant string" 4
+.IX Item "Pointer to constant string"
+Textual description.
+.SH "SEE ALSO"
+.IX Header "SEE ALSO"
+\&\fIcrypto\fR\|(3)
+.SH "HISTORY"
+.IX Header "HISTORY"
+\&\fB\s-1SSLEAY_DIR\s0\fR was added in OpenSSL 0.9.7.
diff --git a/secure/lib/libcrypto/man/X509_NAME_ENTRY_get_object.3 b/secure/lib/libcrypto/man/X509_NAME_ENTRY_get_object.3
index 6ebeaf2..77cc58e 100644
--- a/secure/lib/libcrypto/man/X509_NAME_ENTRY_get_object.3
+++ b/secure/lib/libcrypto/man/X509_NAME_ENTRY_get_object.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "X509_NAME_ENTRY_get_object 3"
-.TH X509_NAME_ENTRY_get_object 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH X509_NAME_ENTRY_get_object 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/X509_NAME_add_entry_by_txt.3 b/secure/lib/libcrypto/man/X509_NAME_add_entry_by_txt.3
index 208b598..5dfc928 100644
--- a/secure/lib/libcrypto/man/X509_NAME_add_entry_by_txt.3
+++ b/secure/lib/libcrypto/man/X509_NAME_add_entry_by_txt.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "X509_NAME_add_entry_by_txt 3"
-.TH X509_NAME_add_entry_by_txt 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH X509_NAME_add_entry_by_txt 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
@@ -180,7 +180,7 @@ the call.
.SH "NOTES"
.IX Header "NOTES"
The use of string types such as \fB\s-1MBSTRING_ASC\s0\fR or \fB\s-1MBSTRING_UTF8\s0\fR
-is strongly recommened for the \fBtype\fR parameter. This allows the
+is strongly recommended for the \fBtype\fR parameter. This allows the
internal code to correctly determine the type of the field and to
apply length checks according to the relevant standards. This is
done using \fIASN1_STRING_set_by_NID()\fR.
diff --git a/secure/lib/libcrypto/man/X509_NAME_get_index_by_NID.3 b/secure/lib/libcrypto/man/X509_NAME_get_index_by_NID.3
index 5c598f8..9f10125 100644
--- a/secure/lib/libcrypto/man/X509_NAME_get_index_by_NID.3
+++ b/secure/lib/libcrypto/man/X509_NAME_get_index_by_NID.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "X509_NAME_get_index_by_NID 3"
-.TH X509_NAME_get_index_by_NID 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH X509_NAME_get_index_by_NID 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/X509_NAME_print_ex.3 b/secure/lib/libcrypto/man/X509_NAME_print_ex.3
index 10fdfb6..6eda0e0 100644
--- a/secure/lib/libcrypto/man/X509_NAME_print_ex.3
+++ b/secure/lib/libcrypto/man/X509_NAME_print_ex.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "X509_NAME_print_ex 3"
-.TH X509_NAME_print_ex 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH X509_NAME_print_ex 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/X509_STORE_CTX_get_error.3 b/secure/lib/libcrypto/man/X509_STORE_CTX_get_error.3
index cd437af..9154c3d 100644
--- a/secure/lib/libcrypto/man/X509_STORE_CTX_get_error.3
+++ b/secure/lib/libcrypto/man/X509_STORE_CTX_get_error.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "X509_STORE_CTX_get_error 3"
-.TH X509_STORE_CTX_get_error 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH X509_STORE_CTX_get_error 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
@@ -169,7 +169,7 @@ checks.
.PP
\&\fIX509_STORE_CTX_get_error_depth()\fR returns the \fBdepth\fR of the error. This is a
non-negative integer representing where in the certificate chain the error
-occurred. If it is zero it occured in the end entity certificate, one if
+occurred. If it is zero it occurred in the end entity certificate, one if
it is the certificate which signed the end entity certificate and so on.
.PP
\&\fIX509_STORE_CTX_get_current_cert()\fR returns the certificate in \fBctx\fR which
@@ -342,10 +342,10 @@ The only CRLs that could be found did not match the scope of the certificate.
Some feature of a certificate extension is not supported. Unused.
.IP "\fBX509_V_ERR_PERMITTED_VIOLATION: permitted subtree violation\fR" 4
.IX Item "X509_V_ERR_PERMITTED_VIOLATION: permitted subtree violation"
-A name constraint violation occured in the permitted subtrees.
+A name constraint violation occurred in the permitted subtrees.
.IP "\fBX509_V_ERR_EXCLUDED_VIOLATION: excluded subtree violation\fR" 4
.IX Item "X509_V_ERR_EXCLUDED_VIOLATION: excluded subtree violation"
-A name constraint violation occured in the excluded subtrees.
+A name constraint violation occurred in the excluded subtrees.
.IP "\fBX509_V_ERR_SUBTREE_MINMAX: name constraints minimum and maximum not supported\fR" 4
.IX Item "X509_V_ERR_SUBTREE_MINMAX: name constraints minimum and maximum not supported"
A certificate name constraints extension included a minimum or maximum field:
@@ -361,7 +361,7 @@ address format of a form not mentioned in \s-1RFC3280.\s0 This could be caused b
a garbage extension or some new feature not currently supported.
.IP "\fBX509_V_ERR_CRL_PATH_VALIDATION_ERROR: \s-1CRL\s0 path validation error\fR" 4
.IX Item "X509_V_ERR_CRL_PATH_VALIDATION_ERROR: CRL path validation error"
-An error occured when attempting to verify the \s-1CRL\s0 path. This error can only
+An error occurred when attempting to verify the \s-1CRL\s0 path. This error can only
happen if extended \s-1CRL\s0 checking is enabled.
.IP "\fBX509_V_ERR_APPLICATION_VERIFICATION: application verification failure\fR" 4
.IX Item "X509_V_ERR_APPLICATION_VERIFICATION: application verification failure"
diff --git a/secure/lib/libcrypto/man/X509_STORE_CTX_get_ex_new_index.3 b/secure/lib/libcrypto/man/X509_STORE_CTX_get_ex_new_index.3
index dbfc8f6..00a0fe8 100644
--- a/secure/lib/libcrypto/man/X509_STORE_CTX_get_ex_new_index.3
+++ b/secure/lib/libcrypto/man/X509_STORE_CTX_get_ex_new_index.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "X509_STORE_CTX_get_ex_new_index 3"
-.TH X509_STORE_CTX_get_ex_new_index 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH X509_STORE_CTX_get_ex_new_index 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/X509_STORE_CTX_new.3 b/secure/lib/libcrypto/man/X509_STORE_CTX_new.3
index 25cedf2..1f01425 100644
--- a/secure/lib/libcrypto/man/X509_STORE_CTX_new.3
+++ b/secure/lib/libcrypto/man/X509_STORE_CTX_new.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "X509_STORE_CTX_new 3"
-.TH X509_STORE_CTX_new 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH X509_STORE_CTX_new 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/X509_STORE_CTX_set_verify_cb.3 b/secure/lib/libcrypto/man/X509_STORE_CTX_set_verify_cb.3
index 54e9db6..234c747 100644
--- a/secure/lib/libcrypto/man/X509_STORE_CTX_set_verify_cb.3
+++ b/secure/lib/libcrypto/man/X509_STORE_CTX_set_verify_cb.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "X509_STORE_CTX_set_verify_cb 3"
-.TH X509_STORE_CTX_set_verify_cb 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH X509_STORE_CTX_set_verify_cb 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/X509_STORE_set_verify_cb_func.3 b/secure/lib/libcrypto/man/X509_STORE_set_verify_cb_func.3
index 9586a18..4ab026a 100644
--- a/secure/lib/libcrypto/man/X509_STORE_set_verify_cb_func.3
+++ b/secure/lib/libcrypto/man/X509_STORE_set_verify_cb_func.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "X509_STORE_set_verify_cb_func 3"
-.TH X509_STORE_set_verify_cb_func 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH X509_STORE_set_verify_cb_func 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/X509_VERIFY_PARAM_set_flags.3 b/secure/lib/libcrypto/man/X509_VERIFY_PARAM_set_flags.3
index f08c9bc..c8c9907 100644
--- a/secure/lib/libcrypto/man/X509_VERIFY_PARAM_set_flags.3
+++ b/secure/lib/libcrypto/man/X509_VERIFY_PARAM_set_flags.3
@@ -133,13 +133,13 @@
.\" ========================================================================
.\"
.IX Title "X509_VERIFY_PARAM_set_flags 3"
-.TH X509_VERIFY_PARAM_set_flags 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH X509_VERIFY_PARAM_set_flags 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
.nh
.SH "NAME"
-X509_VERIFY_PARAM_set_flags, X509_VERIFY_PARAM_clear_flags, X509_VERIFY_PARAM_get_flags, X509_VERIFY_PARAM_set_purpose, X509_VERIFY_PARAM_set_trust, X509_VERIFY_PARAM_set_depth, X509_VERIFY_PARAM_get_depth, X509_VERIFY_PARAM_set_time, X509_VERIFY_PARAM_add0_policy, X509_VERIFY_PARAM_set1_policies \- X509 verification parameters
+X509_VERIFY_PARAM_set_flags, X509_VERIFY_PARAM_clear_flags, X509_VERIFY_PARAM_get_flags, X509_VERIFY_PARAM_set_purpose, X509_VERIFY_PARAM_set_trust, X509_VERIFY_PARAM_set_depth, X509_VERIFY_PARAM_get_depth, X509_VERIFY_PARAM_set_time, X509_VERIFY_PARAM_add0_policy, X509_VERIFY_PARAM_set1_policies, X509_VERIFY_PARAM_set1_host, X509_VERIFY_PARAM_add1_host, X509_VERIFY_PARAM_set_hostflags, X509_VERIFY_PARAM_get0_peername, X509_VERIFY_PARAM_set1_email, X509_VERIFY_PARAM_set1_ip, X509_VERIFY_PARAM_set1_ip_asc \- X509 verification parameters
.SH "SYNOPSIS"
.IX Header "SYNOPSIS"
.Vb 1
@@ -162,6 +162,19 @@ X509_VERIFY_PARAM_set_flags, X509_VERIFY_PARAM_clear_flags, X509_VERIFY_PARAM_ge
\&
\& void X509_VERIFY_PARAM_set_depth(X509_VERIFY_PARAM *param, int depth);
\& int X509_VERIFY_PARAM_get_depth(const X509_VERIFY_PARAM *param);
+\&
+\& int X509_VERIFY_PARAM_set1_host(X509_VERIFY_PARAM *param,
+\& const char *name, size_t namelen);
+\& int X509_VERIFY_PARAM_add1_host(X509_VERIFY_PARAM *param,
+\& const char *name, size_t namelen);
+\& void X509_VERIFY_PARAM_set_hostflags(X509_VERIFY_PARAM *param,
+\& unsigned int flags);
+\& char *X509_VERIFY_PARAM_get0_peername(X509_VERIFY_PARAM *param);
+\& int X509_VERIFY_PARAM_set1_email(X509_VERIFY_PARAM *param,
+\& const char *email, size_t emaillen);
+\& int X509_VERIFY_PARAM_set1_ip(X509_VERIFY_PARAM *param,
+\& const unsigned char *ip, size_t iplen);
+\& int X509_VERIFY_PARAM_set1_ip_asc(X509_VERIFY_PARAM *param, const char *ipasc);
.Ve
.SH "DESCRIPTION"
.IX Header "DESCRIPTION"
@@ -197,12 +210,63 @@ an existing policy set.
\&\fIX509_VERIFY_PARAM_set_depth()\fR sets the maximum verification depth to \fBdepth\fR.
That is the maximum number of untrusted \s-1CA\s0 certificates that can appear in a
chain.
+.PP
+\&\fIX509_VERIFY_PARAM_set1_host()\fR sets the expected \s-1DNS\s0 hostname to
+\&\fBname\fR clearing any previously specified host name or names. If
+\&\fBname\fR is \s-1NULL,\s0 or empty the list of hostnames is cleared, and
+name checks are not performed on the peer certificate. If \fBname\fR
+is NUL-terminated, \fBnamelen\fR may be zero, otherwise \fBnamelen\fR
+must be set to the length of \fBname\fR. When a hostname is specified,
+certificate verification automatically invokes \fIX509_check_host\fR\|(3)
+with flags equal to the \fBflags\fR argument given to
+\&\fB\f(BIX509_VERIFY_PARAM_set_hostflags()\fB\fR (default zero). Applications
+are strongly advised to use this interface in preference to explicitly
+calling \fIX509_check_host\fR\|(3), hostname checks are out of scope
+with the \s-1\fIDANE\-EE\s0\fR\|(3) certificate usage, and the internal check will
+be suppressed as appropriate when \s-1DANE\s0 support is added to OpenSSL.
+.PP
+\&\fIX509_VERIFY_PARAM_add1_host()\fR adds \fBname\fR as an additional reference
+identifer that can match the peer's certificate. Any previous names
+set via \fIX509_VERIFY_PARAM_set1_host()\fR or \fIX509_VERIFY_PARAM_add1_host()\fR
+are retained, no change is made if \fBname\fR is \s-1NULL\s0 or empty. When
+multiple names are configured, the peer is considered verified when
+any name matches.
+.PP
+\&\fIX509_VERIFY_PARAM_get0_peername()\fR returns the \s-1DNS\s0 hostname or subject
+CommonName from the peer certificate that matched one of the reference
+identifiers. When wildcard matching is not disabled, or when a
+reference identifier specifies a parent domain (starts with \*(L".\*(R")
+rather than a hostname, the peer name may be a wildcard name or a
+sub-domain of the reference identifier respectively. The return
+string is allocated by the library and is no longer valid once the
+associated \fBparam\fR argument is freed. Applications must not free
+the return value.
+.PP
+\&\fIX509_VERIFY_PARAM_set1_email()\fR sets the expected \s-1RFC822\s0 email address to
+\&\fBemail\fR. If \fBemail\fR is NUL-terminated, \fBemaillen\fR may be zero, otherwise
+\&\fBemaillen\fR must be set to the length of \fBemail\fR. When an email address
+is specified, certificate verification automatically invokes
+\&\fIX509_check_email\fR\|(3).
+.PP
+\&\fIX509_VERIFY_PARAM_set1_ip()\fR sets the expected \s-1IP\s0 address to \fBip\fR.
+The \fBip\fR argument is in binary format, in network byte-order and
+\&\fBiplen\fR must be set to 4 for IPv4 and 16 for IPv6. When an \s-1IP\s0
+address is specified, certificate verification automatically invokes
+\&\fIX509_check_ip\fR\|(3).
+.PP
+\&\fIX509_VERIFY_PARAM_set1_ip_asc()\fR sets the expected \s-1IP\s0 address to
+\&\fBipasc\fR. The \fBipasc\fR argument is a NUL-terminal \s-1ASCII\s0 string:
+dotted decimal quad for IPv4 and colon-separated hexadecimal for
+IPv6. The condensed \*(L"::\*(R" notation is supported for IPv6 addresses.
.SH "RETURN VALUES"
.IX Header "RETURN VALUES"
-\&\fIX509_VERIFY_PARAM_set_flags()\fR, \fIX509_VERIFY_PARAM_clear_flags()\fR,
+\&\fIX509_VERIFY_PARAM_set_flags()\fR, \fIX509_VERIFY_PARAM_clear_flags()\fR,
\&\fIX509_VERIFY_PARAM_set_purpose()\fR, \fIX509_VERIFY_PARAM_set_trust()\fR,
-\&\fIX509_VERIFY_PARAM_add0_policy()\fR and \fIX509_VERIFY_PARAM_set1_policies()\fR return 1
-for success and 0 for failure.
+\&\fIX509_VERIFY_PARAM_add0_policy()\fR \fIX509_VERIFY_PARAM_set1_policies()\fR,
+\&\fIX509_VERIFY_PARAM_set1_host()\fR, \fIX509_VERIFY_PARAM_set_hostflags()\fR,
+\&\fIX509_VERIFY_PARAM_set1_email()\fR, \fIX509_VERIFY_PARAM_set1_ip()\fR and
+\&\fIX509_VERIFY_PARAM_set1_ip_asc()\fR return 1 for success and 0 for
+failure.
.PP
\&\fIX509_VERIFY_PARAM_get_flags()\fR returns the current verification flags.
.PP
@@ -272,7 +336,7 @@ The \fBX509_V_FLAG_NO_ALT_CHAINS\fR flag suppresses checking for alternative
chains. By default, when building a certificate chain, if the first certificate
chain found is not trusted, then OpenSSL will continue to check to see if an
alternative chain can be found that is trusted. With this flag set the behaviour
-will match that of OpenSSL versions prior to 1.0.1n and 1.0.2b.
+will match that of OpenSSL versions prior to 1.0.2b.
.SH "NOTES"
.IX Header "NOTES"
The above functions should be used to manipulate verification parameters
@@ -301,7 +365,10 @@ connections associated with an \fB\s-1SSL_CTX\s0\fR structure \fBctx\fR:
.Ve
.SH "SEE ALSO"
.IX Header "SEE ALSO"
-\&\fIX509_verify_cert\fR\|(3)
+\&\fIX509_verify_cert\fR\|(3),
+\&\fIX509_check_host\fR\|(3),
+\&\fIX509_check_email\fR\|(3),
+\&\fIX509_check_ip\fR\|(3)
.SH "HISTORY"
.IX Header "HISTORY"
-The \fBX509_V_FLAG_NO_ALT_CHAINS\fR flag was added in OpenSSL 1.0.1n and 1.0.2b
+The \fBX509_V_FLAG_NO_ALT_CHAINS\fR flag was added in OpenSSL 1.0.2b
diff --git a/secure/lib/libcrypto/man/X509_check_host.3 b/secure/lib/libcrypto/man/X509_check_host.3
new file mode 100644
index 0000000..4556924
--- /dev/null
+++ b/secure/lib/libcrypto/man/X509_check_host.3
@@ -0,0 +1,269 @@
+.\" Automatically generated by Pod::Man 2.28 (Pod::Simple 3.30)
+.\"
+.\" Standard preamble:
+.\" ========================================================================
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Vb \" Begin verbatim text
+.ft CW
+.nf
+.ne \\$1
+..
+.de Ve \" End verbatim text
+.ft R
+.fi
+..
+.\" Set up some character translations and predefined strings. \*(-- will
+.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
+.\" double quote, and \*(R" will give a right double quote. \*(C+ will
+.\" give a nicer C++. Capital omega is used to do unbreakable dashes and
+.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff,
+.\" nothing in troff, for use with C<>.
+.tr \(*W-
+.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
+.ie n \{\
+. ds -- \(*W-
+. ds PI pi
+. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
+. ds L" ""
+. ds R" ""
+. ds C` ""
+. ds C' ""
+'br\}
+.el\{\
+. ds -- \|\(em\|
+. ds PI \(*p
+. ds L" ``
+. ds R" ''
+. ds C`
+. ds C'
+'br\}
+.\"
+.\" Escape single quotes in literal strings from groff's Unicode transform.
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\"
+.\" If the F register is turned on, we'll generate index entries on stderr for
+.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
+.\" entries marked with X<> in POD. Of course, you'll have to process the
+.\" output yourself in some meaningful fashion.
+.\"
+.\" Avoid warning from groff about undefined register 'F'.
+.de IX
+..
+.nr rF 0
+.if \n(.g .if rF .nr rF 1
+.if (\n(rF:(\n(.g==0)) \{
+. if \nF \{
+. de IX
+. tm Index:\\$1\t\\n%\t"\\$2"
+..
+. if !\nF==2 \{
+. nr % 0
+. nr F 2
+. \}
+. \}
+.\}
+.rr rF
+.\"
+.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
+.\" Fear. Run. Save yourself. No user-serviceable parts.
+. \" fudge factors for nroff and troff
+.if n \{\
+. ds #H 0
+. ds #V .8m
+. ds #F .3m
+. ds #[ \f1
+. ds #] \fP
+.\}
+.if t \{\
+. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+. ds #V .6m
+. ds #F 0
+. ds #[ \&
+. ds #] \&
+.\}
+. \" simple accents for nroff and troff
+.if n \{\
+. ds ' \&
+. ds ` \&
+. ds ^ \&
+. ds , \&
+. ds ~ ~
+. ds /
+.\}
+.if t \{\
+. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
+.\}
+. \" troff and (daisy-wheel) nroff accents
+.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
+.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
+.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
+.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
+.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
+.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
+.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
+.ds ae a\h'-(\w'a'u*4/10)'e
+.ds Ae A\h'-(\w'A'u*4/10)'E
+. \" corrections for vroff
+.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
+.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
+. \" for low resolution devices (crt and lpr)
+.if \n(.H>23 .if \n(.V>19 \
+\{\
+. ds : e
+. ds 8 ss
+. ds o a
+. ds d- d\h'-1'\(ga
+. ds D- D\h'-1'\(hy
+. ds th \o'bp'
+. ds Th \o'LP'
+. ds ae ae
+. ds Ae AE
+.\}
+.rm #[ #] #H #V #F C
+.\" ========================================================================
+.\"
+.IX Title "X509_check_host 3"
+.TH X509_check_host 3 "2015-07-09" "1.0.2d" "OpenSSL"
+.\" For nroff, turn off justification. Always turn off hyphenation; it makes
+.\" way too many mistakes in technical documents.
+.if n .ad l
+.nh
+.SH "NAME"
+X509_check_host, X509_check_email, X509_check_ip, X509_check_ip_asc \- X.509 certificate matching
+.SH "SYNOPSIS"
+.IX Header "SYNOPSIS"
+.Vb 1
+\& #include <openssl/x509.h>
+\&
+\& int X509_check_host(X509 *, const char *name, size_t namelen,
+\& unsigned int flags, char **peername);
+\& int X509_check_email(X509 *, const char *address, size_t addresslen,
+\& unsigned int flags);
+\& int X509_check_ip(X509 *, const unsigned char *address, size_t addresslen,
+\& unsigned int flags);
+\& int X509_check_ip_asc(X509 *, const char *address, unsigned int flags);
+.Ve
+.SH "DESCRIPTION"
+.IX Header "DESCRIPTION"
+The certificate matching functions are used to check whether a
+certificate matches a given host name, email address, or \s-1IP\s0 address.
+The validity of the certificate and its trust level has to be checked by
+other means.
+.PP
+\&\fIX509_check_host()\fR checks if the certificate Subject Alternative
+Name (\s-1SAN\s0) or Subject CommonName (\s-1CN\s0) matches the specified host
+name, which must be encoded in the preferred name syntax described
+in section 3.5 of \s-1RFC 1034. \s0 By default, wildcards are supported
+and they match only in the left-most label; but they may match
+part of that label with an explicit prefix or suffix. For example,
+by default, the host \fBname\fR \*(L"www.example.com\*(R" would match a
+certificate with a \s-1SAN\s0 or \s-1CN\s0 value of \*(L"*.example.com\*(R", \*(L"w*.example.com\*(R"
+or \*(L"*w.example.com\*(R".
+.PP
+Per section 6.4.2 of \s-1RFC 6125, \s0\fBname\fR values representing international
+domain names must be given in A\-label form. The \fBnamelen\fR argument
+must be the number of characters in the name string or zero in which
+case the length is calculated with strlen(\fBname\fR). When \fBname\fR starts
+with a dot (e.g \*(L".example.com\*(R"), it will be matched by a certificate
+valid for any sub-domain of \fBname\fR, (see also
+\&\fBX509_CHECK_FLAG_SINGLE_LABEL_SUBDOMAINS\fR below).
+.PP
+When the certificate is matched, and \fBpeername\fR is not \s-1NULL,\s0 a
+pointer to a copy of the matching \s-1SAN\s0 or \s-1CN\s0 from the peer certificate
+is stored at the address passed in \fBpeername\fR. The application
+is responsible for freeing the peername via \fIOPENSSL_free()\fR when it
+is no longer needed.
+.PP
+\&\fIX509_check_email()\fR checks if the certificate matches the specified
+email \fBaddress\fR. Only the mailbox syntax of \s-1RFC 822\s0 is supported,
+comments are not allowed, and no attempt is made to normalize quoted
+characters. The \fBaddresslen\fR argument must be the number of
+characters in the address string or zero in which case the length
+is calculated with strlen(\fBaddress\fR).
+.PP
+\&\fIX509_check_ip()\fR checks if the certificate matches a specified IPv4 or
+IPv6 address. The \fBaddress\fR array is in binary format, in network
+byte order. The length is either 4 (IPv4) or 16 (IPv6). Only
+explicitly marked addresses in the certificates are considered; \s-1IP\s0
+addresses stored in \s-1DNS\s0 names and Common Names are ignored.
+.PP
+\&\fIX509_check_ip_asc()\fR is similar, except that the NUL-terminated
+string \fBaddress\fR is first converted to the internal representation.
+.PP
+The \fBflags\fR argument is usually 0. It can be the bitwise \s-1OR\s0 of the
+flags:
+.IP "\fBX509_CHECK_FLAG_ALWAYS_CHECK_SUBJECT\fR," 4
+.IX Item "X509_CHECK_FLAG_ALWAYS_CHECK_SUBJECT,"
+.PD 0
+.IP "\fBX509_CHECK_FLAG_NO_WILDCARDS\fR," 4
+.IX Item "X509_CHECK_FLAG_NO_WILDCARDS,"
+.IP "\fBX509_CHECK_FLAG_NO_PARTIAL_WILDCARDS\fR," 4
+.IX Item "X509_CHECK_FLAG_NO_PARTIAL_WILDCARDS,"
+.IP "\fBX509_CHECK_FLAG_MULTI_LABEL_WILDCARDS\fR." 4
+.IX Item "X509_CHECK_FLAG_MULTI_LABEL_WILDCARDS."
+.IP "\fBX509_CHECK_FLAG_SINGLE_LABEL_SUBDOMAINS\fR." 4
+.IX Item "X509_CHECK_FLAG_SINGLE_LABEL_SUBDOMAINS."
+.PD
+.PP
+The \fBX509_CHECK_FLAG_ALWAYS_CHECK_SUBJECT\fR flag causes the function
+to consider the subject \s-1DN\s0 even if the certificate contains at least
+one subject alternative name of the right type (\s-1DNS\s0 name or email
+address as appropriate); the default is to ignore the subject \s-1DN\s0
+when at least one corresponding subject alternative names is present.
+.PP
+If set, \fBX509_CHECK_FLAG_NO_WILDCARDS\fR disables wildcard
+expansion; this only applies to \fBX509_check_host\fR.
+.PP
+If set, \fBX509_CHECK_FLAG_NO_PARTIAL_WILDCARDS\fR suppresses support
+for \*(L"*\*(R" as wildcard pattern in labels that have a prefix or suffix,
+such as: \*(L"www*\*(R" or \*(L"*www\*(R"; this only aplies to \fBX509_check_host\fR.
+.PP
+If set, \fBX509_CHECK_FLAG_MULTI_LABEL_WILDCARDS\fR allows a \*(L"*\*(R" that
+constitutes the complete label of a \s-1DNS\s0 name (e.g. \*(L"*.example.com\*(R")
+to match more than one label in \fBname\fR; this flag only applies
+to \fBX509_check_host\fR.
+.PP
+If set, \fBX509_CHECK_FLAG_SINGLE_LABEL_SUBDOMAINS\fR restricts \fBname\fR
+values which start with \*(L".\*(R", that would otherwise match any sub-domain
+in the peer certificate, to only match direct child sub-domains.
+Thus, for instance, with this flag set a \fBname\fR of \*(L".example.com\*(R"
+would match a peer certificate with a \s-1DNS\s0 name of \*(L"www.example.com\*(R",
+but would not match a peer certificate with a \s-1DNS\s0 name of
+\&\*(L"www.sub.example.com\*(R"; this flag only applies to \fBX509_check_host\fR.
+.SH "RETURN VALUES"
+.IX Header "RETURN VALUES"
+The functions return 1 for a successful match, 0 for a failed match
+and \-1 for an internal error: typically a memory allocation failure
+or an \s-1ASN.1\s0 decoding error.
+.PP
+All functions can also return \-2 if the input is malformed. For example,
+\&\fIX509_check_host()\fR returns \-2 if the provided \fBname\fR contains embedded
+NULs.
+.SH "NOTES"
+.IX Header "NOTES"
+Applications are encouraged to use \fIX509_VERIFY_PARAM_set1_host()\fR
+rather than explicitly calling \fIX509_check_host\fR\|(3). Host name
+checks are out of scope with the \s-1\fIDANE\-EE\s0\fR\|(3) certificate usage,
+and the internal checks will be suppressed as appropriate when
+\&\s-1DANE\s0 support is added to OpenSSL.
+.SH "SEE ALSO"
+.IX Header "SEE ALSO"
+\&\fISSL_get_verify_result\fR\|(3),
+\&\fIX509_VERIFY_PARAM_set1_host\fR\|(3),
+\&\fIX509_VERIFY_PARAM_add1_host\fR\|(3),
+\&\fIX509_VERIFY_PARAM_set1_email\fR\|(3),
+\&\fIX509_VERIFY_PARAM_set1_ip\fR\|(3),
+\&\fIX509_VERIFY_PARAM_set1_ipasc\fR\|(3)
+.SH "HISTORY"
+.IX Header "HISTORY"
+These functions were added in OpenSSL 1.1.0.
diff --git a/secure/lib/libcrypto/man/X509_new.3 b/secure/lib/libcrypto/man/X509_new.3
index 587b861..8f5fda7 100644
--- a/secure/lib/libcrypto/man/X509_new.3
+++ b/secure/lib/libcrypto/man/X509_new.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "X509_new 3"
-.TH X509_new 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH X509_new 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/X509_verify_cert.3 b/secure/lib/libcrypto/man/X509_verify_cert.3
index 6250339..7dc95ca 100644
--- a/secure/lib/libcrypto/man/X509_verify_cert.3
+++ b/secure/lib/libcrypto/man/X509_verify_cert.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "X509_verify_cert 3"
-.TH X509_verify_cert 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH X509_verify_cert 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/bio.3 b/secure/lib/libcrypto/man/bio.3
index 18288c4..29b4622 100644
--- a/secure/lib/libcrypto/man/bio.3
+++ b/secure/lib/libcrypto/man/bio.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "bio 3"
-.TH bio 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH bio 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/blowfish.3 b/secure/lib/libcrypto/man/blowfish.3
index 738c2b8..1375358 100644
--- a/secure/lib/libcrypto/man/blowfish.3
+++ b/secure/lib/libcrypto/man/blowfish.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "blowfish 3"
-.TH blowfish 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH blowfish 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/bn.3 b/secure/lib/libcrypto/man/bn.3
index 441b944..72a4c04 100644
--- a/secure/lib/libcrypto/man/bn.3
+++ b/secure/lib/libcrypto/man/bn.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "bn 3"
-.TH bn 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH bn 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/bn_internal.3 b/secure/lib/libcrypto/man/bn_internal.3
index 83afdda..df16fd6 100644
--- a/secure/lib/libcrypto/man/bn_internal.3
+++ b/secure/lib/libcrypto/man/bn_internal.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "bn_internal 3"
-.TH bn_internal 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH bn_internal 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/buffer.3 b/secure/lib/libcrypto/man/buffer.3
index 8cd00a8..fcb7985 100644
--- a/secure/lib/libcrypto/man/buffer.3
+++ b/secure/lib/libcrypto/man/buffer.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "buffer 3"
-.TH buffer 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH buffer 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/crypto.3 b/secure/lib/libcrypto/man/crypto.3
index 53e9f5b..3aeaa33 100644
--- a/secure/lib/libcrypto/man/crypto.3
+++ b/secure/lib/libcrypto/man/crypto.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "crypto 3"
-.TH crypto 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH crypto 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
@@ -182,7 +182,7 @@ hash functions and a cryptographic pseudo-random number generator.
\&\fIpkcs7\fR\|(3), \fIpkcs12\fR\|(3)
.IP "\s-1INTERNAL FUNCTIONS\s0" 4
.IX Item "INTERNAL FUNCTIONS"
-\&\fIbn\fR\|(3), \fIbuffer\fR\|(3), \fIlhash\fR\|(3),
+\&\fIbn\fR\|(3), \fIbuffer\fR\|(3), \fIec\fR\|(3), \fIlhash\fR\|(3),
\&\fIobjects\fR\|(3), \fIstack\fR\|(3),
\&\fItxt_db\fR\|(3)
.SH "NOTES"
diff --git a/secure/lib/libcrypto/man/d2i_ASN1_OBJECT.3 b/secure/lib/libcrypto/man/d2i_ASN1_OBJECT.3
index aaf5154..dfd106c 100644
--- a/secure/lib/libcrypto/man/d2i_ASN1_OBJECT.3
+++ b/secure/lib/libcrypto/man/d2i_ASN1_OBJECT.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "d2i_ASN1_OBJECT 3"
-.TH d2i_ASN1_OBJECT 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH d2i_ASN1_OBJECT 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/d2i_CMS_ContentInfo.3 b/secure/lib/libcrypto/man/d2i_CMS_ContentInfo.3
index d2b17cf..2c4f36e 100644
--- a/secure/lib/libcrypto/man/d2i_CMS_ContentInfo.3
+++ b/secure/lib/libcrypto/man/d2i_CMS_ContentInfo.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "d2i_CMS_ContentInfo 3"
-.TH d2i_CMS_ContentInfo 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH d2i_CMS_ContentInfo 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/d2i_DHparams.3 b/secure/lib/libcrypto/man/d2i_DHparams.3
index 67e8d7b..8edf342 100644
--- a/secure/lib/libcrypto/man/d2i_DHparams.3
+++ b/secure/lib/libcrypto/man/d2i_DHparams.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "d2i_DHparams 3"
-.TH d2i_DHparams 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH d2i_DHparams 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/d2i_DSAPublicKey.3 b/secure/lib/libcrypto/man/d2i_DSAPublicKey.3
index 0455f59..ed56f87 100644
--- a/secure/lib/libcrypto/man/d2i_DSAPublicKey.3
+++ b/secure/lib/libcrypto/man/d2i_DSAPublicKey.3
@@ -133,14 +133,14 @@
.\" ========================================================================
.\"
.IX Title "d2i_DSAPublicKey 3"
-.TH d2i_DSAPublicKey 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH d2i_DSAPublicKey 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
.nh
.SH "NAME"
d2i_DSAPublicKey, i2d_DSAPublicKey, d2i_DSAPrivateKey, i2d_DSAPrivateKey,
-d2i_DSA_PUBKEY, i2d_DSA_PUBKEY, d2i_DSA_SIG, i2d_DSA_SIG \- DSA key encoding
+d2i_DSA_PUBKEY, i2d_DSA_PUBKEY, d2i_DSAparams, i2d_DSAparams, d2i_DSA_SIG, i2d_DSA_SIG \- DSA key encoding
and parsing functions.
.SH "SYNOPSIS"
.IX Header "SYNOPSIS"
diff --git a/secure/lib/libcrypto/man/d2i_ECPKParameters.3 b/secure/lib/libcrypto/man/d2i_ECPKParameters.3
new file mode 100644
index 0000000..b14d481
--- /dev/null
+++ b/secure/lib/libcrypto/man/d2i_ECPKParameters.3
@@ -0,0 +1,216 @@
+.\" Automatically generated by Pod::Man 2.28 (Pod::Simple 3.30)
+.\"
+.\" Standard preamble:
+.\" ========================================================================
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Vb \" Begin verbatim text
+.ft CW
+.nf
+.ne \\$1
+..
+.de Ve \" End verbatim text
+.ft R
+.fi
+..
+.\" Set up some character translations and predefined strings. \*(-- will
+.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
+.\" double quote, and \*(R" will give a right double quote. \*(C+ will
+.\" give a nicer C++. Capital omega is used to do unbreakable dashes and
+.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff,
+.\" nothing in troff, for use with C<>.
+.tr \(*W-
+.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
+.ie n \{\
+. ds -- \(*W-
+. ds PI pi
+. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
+. ds L" ""
+. ds R" ""
+. ds C` ""
+. ds C' ""
+'br\}
+.el\{\
+. ds -- \|\(em\|
+. ds PI \(*p
+. ds L" ``
+. ds R" ''
+. ds C`
+. ds C'
+'br\}
+.\"
+.\" Escape single quotes in literal strings from groff's Unicode transform.
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\"
+.\" If the F register is turned on, we'll generate index entries on stderr for
+.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
+.\" entries marked with X<> in POD. Of course, you'll have to process the
+.\" output yourself in some meaningful fashion.
+.\"
+.\" Avoid warning from groff about undefined register 'F'.
+.de IX
+..
+.nr rF 0
+.if \n(.g .if rF .nr rF 1
+.if (\n(rF:(\n(.g==0)) \{
+. if \nF \{
+. de IX
+. tm Index:\\$1\t\\n%\t"\\$2"
+..
+. if !\nF==2 \{
+. nr % 0
+. nr F 2
+. \}
+. \}
+.\}
+.rr rF
+.\"
+.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
+.\" Fear. Run. Save yourself. No user-serviceable parts.
+. \" fudge factors for nroff and troff
+.if n \{\
+. ds #H 0
+. ds #V .8m
+. ds #F .3m
+. ds #[ \f1
+. ds #] \fP
+.\}
+.if t \{\
+. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+. ds #V .6m
+. ds #F 0
+. ds #[ \&
+. ds #] \&
+.\}
+. \" simple accents for nroff and troff
+.if n \{\
+. ds ' \&
+. ds ` \&
+. ds ^ \&
+. ds , \&
+. ds ~ ~
+. ds /
+.\}
+.if t \{\
+. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
+.\}
+. \" troff and (daisy-wheel) nroff accents
+.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
+.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
+.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
+.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
+.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
+.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
+.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
+.ds ae a\h'-(\w'a'u*4/10)'e
+.ds Ae A\h'-(\w'A'u*4/10)'E
+. \" corrections for vroff
+.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
+.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
+. \" for low resolution devices (crt and lpr)
+.if \n(.H>23 .if \n(.V>19 \
+\{\
+. ds : e
+. ds 8 ss
+. ds o a
+. ds d- d\h'-1'\(ga
+. ds D- D\h'-1'\(hy
+. ds th \o'bp'
+. ds Th \o'LP'
+. ds ae ae
+. ds Ae AE
+.\}
+.rm #[ #] #H #V #F C
+.\" ========================================================================
+.\"
+.IX Title "d2i_ECPKParameters 3"
+.TH d2i_ECPKParameters 3 "2015-07-09" "1.0.2d" "OpenSSL"
+.\" For nroff, turn off justification. Always turn off hyphenation; it makes
+.\" way too many mistakes in technical documents.
+.if n .ad l
+.nh
+.SH "NAME"
+d2i_ECPKParameters, i2d_ECPKParameters, d2i_ECPKParameters_bio, i2d_ECPKParameters_bio, d2i_ECPKParameters_fp, i2d_ECPKParameters_fp, ECPKParameters_print, ECPKParameters_print_fp \- Functions for decoding and encoding ASN1 representations of elliptic curve entities
+.SH "SYNOPSIS"
+.IX Header "SYNOPSIS"
+.Vb 1
+\& #include <openssl/ec.h>
+\&
+\& EC_GROUP *d2i_ECPKParameters(EC_GROUP **px, const unsigned char **in, long len);
+\& int i2d_ECPKParameters(const EC_GROUP *x, unsigned char **out);
+\& #define d2i_ECPKParameters_bio(bp,x) ASN1_d2i_bio_of(EC_GROUP,NULL,d2i_ECPKParameters,bp,x)
+\& #define i2d_ECPKParameters_bio(bp,x) ASN1_i2d_bio_of_const(EC_GROUP,i2d_ECPKParameters,bp,x)
+\& #define d2i_ECPKParameters_fp(fp,x) (EC_GROUP *)ASN1_d2i_fp(NULL, \e
+\& (char *(*)())d2i_ECPKParameters,(fp),(unsigned char **)(x))
+\& #define i2d_ECPKParameters_fp(fp,x) ASN1_i2d_fp(i2d_ECPKParameters,(fp), \e
+\& (unsigned char *)(x))
+\& int ECPKParameters_print(BIO *bp, const EC_GROUP *x, int off);
+\& int ECPKParameters_print_fp(FILE *fp, const EC_GROUP *x, int off);
+.Ve
+.SH "DESCRIPTION"
+.IX Header "DESCRIPTION"
+The ECPKParameters encode and decode routines encode and parse the public parameters for an
+\&\fB\s-1EC_GROUP\s0\fR structure, which represents a curve.
+.PP
+\&\fId2i_ECPKParameters()\fR attempts to decode \fBlen\fR bytes at \fB*in\fR. If
+successful a pointer to the \fB\s-1EC_GROUP\s0\fR structure is returned. If an error
+occurred then \fB\s-1NULL\s0\fR is returned. If \fBpx\fR is not \fB\s-1NULL\s0\fR then the
+returned structure is written to \fB*px\fR. If \fB*px\fR is not \fB\s-1NULL\s0\fR
+then it is assumed that \fB*px\fR contains a valid \fB\s-1EC_GROUP\s0\fR
+structure and an attempt is made to reuse it. If the call is
+successful \fB*in\fR is incremented to the byte following the
+parsed data.
+.PP
+\&\fIi2d_ECPKParameters()\fR encodes the structure pointed to by \fBx\fR into \s-1DER\s0 format.
+If \fBout\fR is not \fB\s-1NULL\s0\fR is writes the \s-1DER\s0 encoded data to the buffer
+at \fB*out\fR, and increments it to point after the data just written.
+If the return value is negative an error occurred, otherwise it
+returns the length of the encoded data.
+.PP
+If \fB*out\fR is \fB\s-1NULL\s0\fR memory will be allocated for a buffer and the encoded
+data written to it. In this case \fB*out\fR is not incremented and it points to
+the start of the data just written.
+.PP
+\&\fId2i_ECPKParameters_bio()\fR is similar to \fId2i_ECPKParameters()\fR except it attempts
+to parse data from \s-1BIO \s0\fBbp\fR.
+.PP
+\&\fId2i_ECPKParameters_fp()\fR is similar to \fId2i_ECPKParameters()\fR except it attempts
+to parse data from \s-1FILE\s0 pointer \fBfp\fR.
+.PP
+\&\fIi2d_ECPKParameters_bio()\fR is similar to \fIi2d_ECPKParameters()\fR except it writes
+the encoding of the structure \fBx\fR to \s-1BIO \s0\fBbp\fR and it
+returns 1 for success and 0 for failure.
+.PP
+\&\fIi2d_ECPKParameters_fp()\fR is similar to \fIi2d_ECPKParameters()\fR except it writes
+the encoding of the structure \fBx\fR to \s-1BIO \s0\fBbp\fR and it
+returns 1 for success and 0 for failure.
+.PP
+These functions are very similar to the X509 functions described in \fId2i_X509\fR\|(3),
+where further notes and examples are available.
+.PP
+The ECPKParameters_print and ECPKParameters_print_fp functions print a human-readable output
+of the public parameters of the \s-1EC_GROUP\s0 to \fBbp\fR or \fBfp\fR. The output lines are indented by \fBoff\fR spaces.
+.SH "RETURN VALUES"
+.IX Header "RETURN VALUES"
+\&\fId2i_ECPKParameters()\fR, \fId2i_ECPKParameters_bio()\fR and \fId2i_ECPKParameters_fp()\fR return a valid \fB\s-1EC_GROUP\s0\fR structure
+or \fB\s-1NULL\s0\fR if an error occurs.
+.PP
+\&\fIi2d_ECPKParameters()\fR returns the number of bytes successfully encoded or a negative
+value if an error occurs.
+.PP
+\&\fIi2d_ECPKParameters_bio()\fR, \fIi2d_ECPKParameters_fp()\fR, ECPKParameters_print and ECPKParameters_print_fp
+return 1 for success and 0 if an error occurs.
+.SH "SEE ALSO"
+.IX Header "SEE ALSO"
+\&\fIcrypto\fR\|(3), \fIec\fR\|(3), \fIEC_GROUP_new\fR\|(3), \fIEC_GROUP_copy\fR\|(3),
+\&\fIEC_POINT_new\fR\|(3), \fIEC_POINT_add\fR\|(3), \fIEC_KEY_new\fR\|(3),
+\&\fIEC_GFp_simple_method\fR\|(3), \fId2i_X509\fR\|(3)
diff --git a/secure/lib/libcrypto/man/d2i_ECPrivateKey.3 b/secure/lib/libcrypto/man/d2i_ECPrivateKey.3
index f6161ef..07a2962 100644
--- a/secure/lib/libcrypto/man/d2i_ECPrivateKey.3
+++ b/secure/lib/libcrypto/man/d2i_ECPrivateKey.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "d2i_ECPrivateKey 3"
-.TH d2i_ECPrivateKey 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH d2i_ECPrivateKey 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/d2i_PKCS8PrivateKey.3 b/secure/lib/libcrypto/man/d2i_PKCS8PrivateKey.3
index 91eb895..a89957d 100644
--- a/secure/lib/libcrypto/man/d2i_PKCS8PrivateKey.3
+++ b/secure/lib/libcrypto/man/d2i_PKCS8PrivateKey.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "d2i_PKCS8PrivateKey 3"
-.TH d2i_PKCS8PrivateKey 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH d2i_PKCS8PrivateKey 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/d2i_RSAPublicKey.3 b/secure/lib/libcrypto/man/d2i_RSAPublicKey.3
index 839512a..4e5af7a 100644
--- a/secure/lib/libcrypto/man/d2i_RSAPublicKey.3
+++ b/secure/lib/libcrypto/man/d2i_RSAPublicKey.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "d2i_RSAPublicKey 3"
-.TH d2i_RSAPublicKey 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH d2i_RSAPublicKey 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/d2i_X509.3 b/secure/lib/libcrypto/man/d2i_X509.3
index fc2a852..fa12c9f 100644
--- a/secure/lib/libcrypto/man/d2i_X509.3
+++ b/secure/lib/libcrypto/man/d2i_X509.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "d2i_X509 3"
-.TH d2i_X509 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH d2i_X509 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
@@ -154,6 +154,8 @@ i2d_X509_fp \- X509 encode and decode functions
\&
\& int i2d_X509_bio(BIO *bp, X509 *x);
\& int i2d_X509_fp(FILE *fp, X509 *x);
+\&
+\& int i2d_re_X509_tbs(X509 *x, unsigned char **out);
.Ve
.SH "DESCRIPTION"
.IX Header "DESCRIPTION"
@@ -196,11 +198,17 @@ returns 1 for success and 0 for failure.
\&\fIi2d_X509_fp()\fR is similar to \fIi2d_X509()\fR except it writes
the encoding of the structure \fBx\fR to \s-1BIO \s0\fBbp\fR and it
returns 1 for success and 0 for failure.
+.PP
+\&\fIi2d_re_X509_tbs()\fR is similar to \fIi2d_X509()\fR except it encodes
+only the TBSCertificate portion of the certificate.
.SH "NOTES"
.IX Header "NOTES"
The letters \fBi\fR and \fBd\fR in for example \fBi2d_X509\fR stand for
-\&\*(L"internal\*(R" (that is an internal C structure) and \*(L"\s-1DER\*(R".\s0 So that
-\&\fBi2d_X509\fR converts from internal to \s-1DER.\s0
+\&\*(L"internal\*(R" (that is an internal C structure) and \*(L"\s-1DER\*(R".\s0 So
+\&\fBi2d_X509\fR converts from internal to \s-1DER.\s0 The \*(L"re\*(R" in
+\&\fBi2d_re_X509_tbs\fR stands for \*(L"re-encode\*(R", and ensures that a fresh
+encoding is generated in case the object has been modified after
+creation (see the \s-1BUGS\s0 section).
.PP
The functions can also understand \fB\s-1BER\s0\fR forms.
.PP
@@ -351,6 +359,21 @@ then the encoded structure may contain invalid data or omit the
fields entirely and will not be parsed by \fId2i_X509()\fR. This may be
fixed in future so code should not assume that \fIi2d_X509()\fR will
always succeed.
+.PP
+The encoding of the TBSCertificate portion of a certificate is cached
+in the \fBX509\fR structure internally to improve encoding performance
+and to ensure certificate signatures are verified correctly in some
+certificates with broken (non-DER) encodings.
+.PP
+Any function which encodes an X509 structure such as \fIi2d_X509()\fR,
+\&\fIi2d_X509_fp()\fR or \fIi2d_X509_bio()\fR may return a stale encoding if the
+\&\fBX509\fR structure has been modified after deserialization or previous
+serialization.
+.PP
+If, after modification, the \fBX509\fR object is re-signed with \fIX509_sign()\fR,
+the encoding is automatically renewed. Otherwise, the encoding of the
+TBSCertificate portion of the \fBX509\fR can be manually renewed by calling
+\&\fIi2d_re_X509_tbs()\fR.
.SH "RETURN VALUES"
.IX Header "RETURN VALUES"
\&\fId2i_X509()\fR, \fId2i_X509_bio()\fR and \fId2i_X509_fp()\fR return a valid \fBX509\fR structure
diff --git a/secure/lib/libcrypto/man/d2i_X509_ALGOR.3 b/secure/lib/libcrypto/man/d2i_X509_ALGOR.3
index d369ab3..223d300 100644
--- a/secure/lib/libcrypto/man/d2i_X509_ALGOR.3
+++ b/secure/lib/libcrypto/man/d2i_X509_ALGOR.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "d2i_X509_ALGOR 3"
-.TH d2i_X509_ALGOR 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH d2i_X509_ALGOR 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/d2i_X509_CRL.3 b/secure/lib/libcrypto/man/d2i_X509_CRL.3
index f30cdda..399cd97 100644
--- a/secure/lib/libcrypto/man/d2i_X509_CRL.3
+++ b/secure/lib/libcrypto/man/d2i_X509_CRL.3
@@ -133,13 +133,13 @@
.\" ========================================================================
.\"
.IX Title "d2i_X509_CRL 3"
-.TH d2i_X509_CRL 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH d2i_X509_CRL 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
.nh
.SH "NAME"
-d2i_X509_CRL, i2d_X509_CRL, d2i_X509_CRL_bio, d2i_509_CRL_fp,
+d2i_X509_CRL, i2d_X509_CRL, d2i_X509_CRL_bio, d2i_X509_CRL_fp,
i2d_X509_CRL_bio, i2d_X509_CRL_fp \- PKCS#10 certificate request functions.
.SH "SYNOPSIS"
.IX Header "SYNOPSIS"
diff --git a/secure/lib/libcrypto/man/d2i_X509_NAME.3 b/secure/lib/libcrypto/man/d2i_X509_NAME.3
index 87e1348..04a2489 100644
--- a/secure/lib/libcrypto/man/d2i_X509_NAME.3
+++ b/secure/lib/libcrypto/man/d2i_X509_NAME.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "d2i_X509_NAME 3"
-.TH d2i_X509_NAME 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH d2i_X509_NAME 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/d2i_X509_REQ.3 b/secure/lib/libcrypto/man/d2i_X509_REQ.3
index e2ac57f..f6adf50 100644
--- a/secure/lib/libcrypto/man/d2i_X509_REQ.3
+++ b/secure/lib/libcrypto/man/d2i_X509_REQ.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "d2i_X509_REQ 3"
-.TH d2i_X509_REQ 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH d2i_X509_REQ 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/d2i_X509_SIG.3 b/secure/lib/libcrypto/man/d2i_X509_SIG.3
index 026826e..630ede5 100644
--- a/secure/lib/libcrypto/man/d2i_X509_SIG.3
+++ b/secure/lib/libcrypto/man/d2i_X509_SIG.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "d2i_X509_SIG 3"
-.TH d2i_X509_SIG 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH d2i_X509_SIG 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/des.3 b/secure/lib/libcrypto/man/des.3
index 35d8d29..db4329c 100644
--- a/secure/lib/libcrypto/man/des.3
+++ b/secure/lib/libcrypto/man/des.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "des 3"
-.TH des 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH des 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/dh.3 b/secure/lib/libcrypto/man/dh.3
index 4d3dcbd..93e848d 100644
--- a/secure/lib/libcrypto/man/dh.3
+++ b/secure/lib/libcrypto/man/dh.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "dh 3"
-.TH dh 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH dh 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/dsa.3 b/secure/lib/libcrypto/man/dsa.3
index d7e540d..14043aa 100644
--- a/secure/lib/libcrypto/man/dsa.3
+++ b/secure/lib/libcrypto/man/dsa.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "dsa 3"
-.TH dsa 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH dsa 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/ec.3 b/secure/lib/libcrypto/man/ec.3
new file mode 100644
index 0000000..cda2f21
--- /dev/null
+++ b/secure/lib/libcrypto/man/ec.3
@@ -0,0 +1,333 @@
+.\" Automatically generated by Pod::Man 2.28 (Pod::Simple 3.30)
+.\"
+.\" Standard preamble:
+.\" ========================================================================
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Vb \" Begin verbatim text
+.ft CW
+.nf
+.ne \\$1
+..
+.de Ve \" End verbatim text
+.ft R
+.fi
+..
+.\" Set up some character translations and predefined strings. \*(-- will
+.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
+.\" double quote, and \*(R" will give a right double quote. \*(C+ will
+.\" give a nicer C++. Capital omega is used to do unbreakable dashes and
+.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff,
+.\" nothing in troff, for use with C<>.
+.tr \(*W-
+.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
+.ie n \{\
+. ds -- \(*W-
+. ds PI pi
+. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
+. ds L" ""
+. ds R" ""
+. ds C` ""
+. ds C' ""
+'br\}
+.el\{\
+. ds -- \|\(em\|
+. ds PI \(*p
+. ds L" ``
+. ds R" ''
+. ds C`
+. ds C'
+'br\}
+.\"
+.\" Escape single quotes in literal strings from groff's Unicode transform.
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\"
+.\" If the F register is turned on, we'll generate index entries on stderr for
+.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
+.\" entries marked with X<> in POD. Of course, you'll have to process the
+.\" output yourself in some meaningful fashion.
+.\"
+.\" Avoid warning from groff about undefined register 'F'.
+.de IX
+..
+.nr rF 0
+.if \n(.g .if rF .nr rF 1
+.if (\n(rF:(\n(.g==0)) \{
+. if \nF \{
+. de IX
+. tm Index:\\$1\t\\n%\t"\\$2"
+..
+. if !\nF==2 \{
+. nr % 0
+. nr F 2
+. \}
+. \}
+.\}
+.rr rF
+.\"
+.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
+.\" Fear. Run. Save yourself. No user-serviceable parts.
+. \" fudge factors for nroff and troff
+.if n \{\
+. ds #H 0
+. ds #V .8m
+. ds #F .3m
+. ds #[ \f1
+. ds #] \fP
+.\}
+.if t \{\
+. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+. ds #V .6m
+. ds #F 0
+. ds #[ \&
+. ds #] \&
+.\}
+. \" simple accents for nroff and troff
+.if n \{\
+. ds ' \&
+. ds ` \&
+. ds ^ \&
+. ds , \&
+. ds ~ ~
+. ds /
+.\}
+.if t \{\
+. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
+.\}
+. \" troff and (daisy-wheel) nroff accents
+.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
+.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
+.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
+.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
+.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
+.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
+.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
+.ds ae a\h'-(\w'a'u*4/10)'e
+.ds Ae A\h'-(\w'A'u*4/10)'E
+. \" corrections for vroff
+.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
+.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
+. \" for low resolution devices (crt and lpr)
+.if \n(.H>23 .if \n(.V>19 \
+\{\
+. ds : e
+. ds 8 ss
+. ds o a
+. ds d- d\h'-1'\(ga
+. ds D- D\h'-1'\(hy
+. ds th \o'bp'
+. ds Th \o'LP'
+. ds ae ae
+. ds Ae AE
+.\}
+.rm #[ #] #H #V #F C
+.\" ========================================================================
+.\"
+.IX Title "ec 3"
+.TH ec 3 "2015-07-09" "1.0.2d" "OpenSSL"
+.\" For nroff, turn off justification. Always turn off hyphenation; it makes
+.\" way too many mistakes in technical documents.
+.if n .ad l
+.nh
+.SH "NAME"
+ec \- Elliptic Curve functions
+.SH "SYNOPSIS"
+.IX Header "SYNOPSIS"
+.Vb 2
+\& #include <openssl/ec.h>
+\& #include <openssl/bn.h>
+\&
+\& const EC_METHOD *EC_GFp_simple_method(void);
+\& const EC_METHOD *EC_GFp_mont_method(void);
+\& const EC_METHOD *EC_GFp_nist_method(void);
+\& const EC_METHOD *EC_GFp_nistp224_method(void);
+\& const EC_METHOD *EC_GFp_nistp256_method(void);
+\& const EC_METHOD *EC_GFp_nistp521_method(void);
+\&
+\& const EC_METHOD *EC_GF2m_simple_method(void);
+\&
+\& EC_GROUP *EC_GROUP_new(const EC_METHOD *meth);
+\& void EC_GROUP_free(EC_GROUP *group);
+\& void EC_GROUP_clear_free(EC_GROUP *group);
+\& int EC_GROUP_copy(EC_GROUP *dst, const EC_GROUP *src);
+\& EC_GROUP *EC_GROUP_dup(const EC_GROUP *src);
+\& const EC_METHOD *EC_GROUP_method_of(const EC_GROUP *group);
+\& int EC_METHOD_get_field_type(const EC_METHOD *meth);
+\& int EC_GROUP_set_generator(EC_GROUP *group, const EC_POINT *generator, const BIGNUM *order, const BIGNUM *cofactor);
+\& const EC_POINT *EC_GROUP_get0_generator(const EC_GROUP *group);
+\& int EC_GROUP_get_order(const EC_GROUP *group, BIGNUM *order, BN_CTX *ctx);
+\& int EC_GROUP_get_cofactor(const EC_GROUP *group, BIGNUM *cofactor, BN_CTX *ctx);
+\& void EC_GROUP_set_curve_name(EC_GROUP *group, int nid);
+\& int EC_GROUP_get_curve_name(const EC_GROUP *group);
+\& void EC_GROUP_set_asn1_flag(EC_GROUP *group, int flag);
+\& int EC_GROUP_get_asn1_flag(const EC_GROUP *group);
+\& void EC_GROUP_set_point_conversion_form(EC_GROUP *group, point_conversion_form_t form);
+\& point_conversion_form_t EC_GROUP_get_point_conversion_form(const EC_GROUP *);
+\& unsigned char *EC_GROUP_get0_seed(const EC_GROUP *x);
+\& size_t EC_GROUP_get_seed_len(const EC_GROUP *);
+\& size_t EC_GROUP_set_seed(EC_GROUP *, const unsigned char *, size_t len);
+\& int EC_GROUP_set_curve_GFp(EC_GROUP *group, const BIGNUM *p, const BIGNUM *a, const BIGNUM *b, BN_CTX *ctx);
+\& int EC_GROUP_get_curve_GFp(const EC_GROUP *group, BIGNUM *p, BIGNUM *a, BIGNUM *b, BN_CTX *ctx);
+\& int EC_GROUP_set_curve_GF2m(EC_GROUP *group, const BIGNUM *p, const BIGNUM *a, const BIGNUM *b, BN_CTX *ctx);
+\& int EC_GROUP_get_curve_GF2m(const EC_GROUP *group, BIGNUM *p, BIGNUM *a, BIGNUM *b, BN_CTX *ctx);
+\& int EC_GROUP_get_degree(const EC_GROUP *group);
+\& int EC_GROUP_check(const EC_GROUP *group, BN_CTX *ctx);
+\& int EC_GROUP_check_discriminant(const EC_GROUP *group, BN_CTX *ctx);
+\& int EC_GROUP_cmp(const EC_GROUP *a, const EC_GROUP *b, BN_CTX *ctx);
+\& EC_GROUP *EC_GROUP_new_curve_GFp(const BIGNUM *p, const BIGNUM *a, const BIGNUM *b, BN_CTX *ctx);
+\& EC_GROUP *EC_GROUP_new_curve_GF2m(const BIGNUM *p, const BIGNUM *a, const BIGNUM *b, BN_CTX *ctx);
+\& EC_GROUP *EC_GROUP_new_by_curve_name(int nid);
+\&
+\& size_t EC_get_builtin_curves(EC_builtin_curve *r, size_t nitems);
+\&
+\& EC_POINT *EC_POINT_new(const EC_GROUP *group);
+\& void EC_POINT_free(EC_POINT *point);
+\& void EC_POINT_clear_free(EC_POINT *point);
+\& int EC_POINT_copy(EC_POINT *dst, const EC_POINT *src);
+\& EC_POINT *EC_POINT_dup(const EC_POINT *src, const EC_GROUP *group);
+\& const EC_METHOD *EC_POINT_method_of(const EC_POINT *point);
+\& int EC_POINT_set_to_infinity(const EC_GROUP *group, EC_POINT *point);
+\& int EC_POINT_set_Jprojective_coordinates_GFp(const EC_GROUP *group, EC_POINT *p,
+\& const BIGNUM *x, const BIGNUM *y, const BIGNUM *z, BN_CTX *ctx);
+\& int EC_POINT_get_Jprojective_coordinates_GFp(const EC_GROUP *group,
+\& const EC_POINT *p, BIGNUM *x, BIGNUM *y, BIGNUM *z, BN_CTX *ctx);
+\& int EC_POINT_set_affine_coordinates_GFp(const EC_GROUP *group, EC_POINT *p,
+\& const BIGNUM *x, const BIGNUM *y, BN_CTX *ctx);
+\& int EC_POINT_get_affine_coordinates_GFp(const EC_GROUP *group,
+\& const EC_POINT *p, BIGNUM *x, BIGNUM *y, BN_CTX *ctx);
+\& int EC_POINT_set_compressed_coordinates_GFp(const EC_GROUP *group, EC_POINT *p,
+\& const BIGNUM *x, int y_bit, BN_CTX *ctx);
+\& int EC_POINT_set_affine_coordinates_GF2m(const EC_GROUP *group, EC_POINT *p,
+\& const BIGNUM *x, const BIGNUM *y, BN_CTX *ctx);
+\& int EC_POINT_get_affine_coordinates_GF2m(const EC_GROUP *group,
+\& const EC_POINT *p, BIGNUM *x, BIGNUM *y, BN_CTX *ctx);
+\& int EC_POINT_set_compressed_coordinates_GF2m(const EC_GROUP *group, EC_POINT *p,
+\& const BIGNUM *x, int y_bit, BN_CTX *ctx);
+\& size_t EC_POINT_point2oct(const EC_GROUP *group, const EC_POINT *p,
+\& point_conversion_form_t form,
+\& unsigned char *buf, size_t len, BN_CTX *ctx);
+\& int EC_POINT_oct2point(const EC_GROUP *group, EC_POINT *p,
+\& const unsigned char *buf, size_t len, BN_CTX *ctx);
+\& BIGNUM *EC_POINT_point2bn(const EC_GROUP *, const EC_POINT *,
+\& point_conversion_form_t form, BIGNUM *, BN_CTX *);
+\& EC_POINT *EC_POINT_bn2point(const EC_GROUP *, const BIGNUM *,
+\& EC_POINT *, BN_CTX *);
+\& char *EC_POINT_point2hex(const EC_GROUP *, const EC_POINT *,
+\& point_conversion_form_t form, BN_CTX *);
+\& EC_POINT *EC_POINT_hex2point(const EC_GROUP *, const char *,
+\& EC_POINT *, BN_CTX *);
+\&
+\& int EC_POINT_add(const EC_GROUP *group, EC_POINT *r, const EC_POINT *a, const EC_POINT *b, BN_CTX *ctx);
+\& int EC_POINT_dbl(const EC_GROUP *group, EC_POINT *r, const EC_POINT *a, BN_CTX *ctx);
+\& int EC_POINT_invert(const EC_GROUP *group, EC_POINT *a, BN_CTX *ctx);
+\& int EC_POINT_is_at_infinity(const EC_GROUP *group, const EC_POINT *p);
+\& int EC_POINT_is_on_curve(const EC_GROUP *group, const EC_POINT *point, BN_CTX *ctx);
+\& int EC_POINT_cmp(const EC_GROUP *group, const EC_POINT *a, const EC_POINT *b, BN_CTX *ctx);
+\& int EC_POINT_make_affine(const EC_GROUP *group, EC_POINT *point, BN_CTX *ctx);
+\& int EC_POINTs_make_affine(const EC_GROUP *group, size_t num, EC_POINT *points[], BN_CTX *ctx);
+\& int EC_POINTs_mul(const EC_GROUP *group, EC_POINT *r, const BIGNUM *n, size_t num, const EC_POINT *p[], const BIGNUM *m[], BN_CTX *ctx);
+\& int EC_POINT_mul(const EC_GROUP *group, EC_POINT *r, const BIGNUM *n, const EC_POINT *q, const BIGNUM *m, BN_CTX *ctx);
+\& int EC_GROUP_precompute_mult(EC_GROUP *group, BN_CTX *ctx);
+\& int EC_GROUP_have_precompute_mult(const EC_GROUP *group);
+\&
+\& int EC_GROUP_get_basis_type(const EC_GROUP *);
+\& int EC_GROUP_get_trinomial_basis(const EC_GROUP *, unsigned int *k);
+\& int EC_GROUP_get_pentanomial_basis(const EC_GROUP *, unsigned int *k1,
+\& unsigned int *k2, unsigned int *k3);
+\& EC_GROUP *d2i_ECPKParameters(EC_GROUP **, const unsigned char **in, long len);
+\& int i2d_ECPKParameters(const EC_GROUP *, unsigned char **out);
+\& #define d2i_ECPKParameters_bio(bp,x) ASN1_d2i_bio_of(EC_GROUP,NULL,d2i_ECPKParameters,bp,x)
+\& #define i2d_ECPKParameters_bio(bp,x) ASN1_i2d_bio_of_const(EC_GROUP,i2d_ECPKParameters,bp,x)
+\& #define d2i_ECPKParameters_fp(fp,x) (EC_GROUP *)ASN1_d2i_fp(NULL, \e
+\& (char *(*)())d2i_ECPKParameters,(fp),(unsigned char **)(x))
+\& #define i2d_ECPKParameters_fp(fp,x) ASN1_i2d_fp(i2d_ECPKParameters,(fp), \e
+\& (unsigned char *)(x))
+\& int ECPKParameters_print(BIO *bp, const EC_GROUP *x, int off);
+\& int ECPKParameters_print_fp(FILE *fp, const EC_GROUP *x, int off);
+\&
+\& EC_KEY *EC_KEY_new(void);
+\& int EC_KEY_get_flags(const EC_KEY *key);
+\& void EC_KEY_set_flags(EC_KEY *key, int flags);
+\& void EC_KEY_clear_flags(EC_KEY *key, int flags);
+\& EC_KEY *EC_KEY_new_by_curve_name(int nid);
+\& void EC_KEY_free(EC_KEY *key);
+\& EC_KEY *EC_KEY_copy(EC_KEY *dst, const EC_KEY *src);
+\& EC_KEY *EC_KEY_dup(const EC_KEY *src);
+\& int EC_KEY_up_ref(EC_KEY *key);
+\& const EC_GROUP *EC_KEY_get0_group(const EC_KEY *key);
+\& int EC_KEY_set_group(EC_KEY *key, const EC_GROUP *group);
+\& const BIGNUM *EC_KEY_get0_private_key(const EC_KEY *key);
+\& int EC_KEY_set_private_key(EC_KEY *key, const BIGNUM *prv);
+\& const EC_POINT *EC_KEY_get0_public_key(const EC_KEY *key);
+\& int EC_KEY_set_public_key(EC_KEY *key, const EC_POINT *pub);
+\& unsigned EC_KEY_get_enc_flags(const EC_KEY *key);
+\& void EC_KEY_set_enc_flags(EC_KEY *eckey, unsigned int flags);
+\& point_conversion_form_t EC_KEY_get_conv_form(const EC_KEY *key);
+\& void EC_KEY_set_conv_form(EC_KEY *eckey, point_conversion_form_t cform);
+\& void *EC_KEY_get_key_method_data(EC_KEY *key,
+\& void *(*dup_func)(void *), void (*free_func)(void *), void (*clear_free_func)(void *));
+\& void EC_KEY_insert_key_method_data(EC_KEY *key, void *data,
+\& void *(*dup_func)(void *), void (*free_func)(void *), void (*clear_free_func)(void *));
+\& void EC_KEY_set_asn1_flag(EC_KEY *eckey, int asn1_flag);
+\& int EC_KEY_precompute_mult(EC_KEY *key, BN_CTX *ctx);
+\& int EC_KEY_generate_key(EC_KEY *key);
+\& int EC_KEY_check_key(const EC_KEY *key);
+\& int EC_KEY_set_public_key_affine_coordinates(EC_KEY *key, BIGNUM *x, BIGNUM *y);
+\&
+\& EC_KEY *d2i_ECPrivateKey(EC_KEY **key, const unsigned char **in, long len);
+\& int i2d_ECPrivateKey(EC_KEY *key, unsigned char **out);
+\&
+\& EC_KEY *d2i_ECParameters(EC_KEY **key, const unsigned char **in, long len);
+\& int i2d_ECParameters(EC_KEY *key, unsigned char **out);
+\&
+\& EC_KEY *o2i_ECPublicKey(EC_KEY **key, const unsigned char **in, long len);
+\& int i2o_ECPublicKey(EC_KEY *key, unsigned char **out);
+\& int ECParameters_print(BIO *bp, const EC_KEY *key);
+\& int EC_KEY_print(BIO *bp, const EC_KEY *key, int off);
+\& int ECParameters_print_fp(FILE *fp, const EC_KEY *key);
+\& int EC_KEY_print_fp(FILE *fp, const EC_KEY *key, int off);
+\& #define ECParameters_dup(x) ASN1_dup_of(EC_KEY,i2d_ECParameters,d2i_ECParameters,x)
+\& #define EVP_PKEY_CTX_set_ec_paramgen_curve_nid(ctx, nid) \e
+\& EVP_PKEY_CTX_ctrl(ctx, EVP_PKEY_EC, EVP_PKEY_OP_PARAMGEN, \e
+\& EVP_PKEY_CTRL_EC_PARAMGEN_CURVE_NID, nid, NULL)
+.Ve
+.SH "DESCRIPTION"
+.IX Header "DESCRIPTION"
+This library provides an extensive set of functions for performing operations on elliptic curves over finite fields.
+In general an elliptic curve is one with an equation of the form:
+.PP
+y^2 = x^3 + ax + b
+.PP
+An \fB\s-1EC_GROUP\s0\fR structure is used to represent the definition of an elliptic curve. Points on a curve are stored using an
+\&\fB\s-1EC_POINT\s0\fR structure. An \fB\s-1EC_KEY\s0\fR is used to hold a private/public key pair, where a private key is simply a \s-1BIGNUM\s0 and a
+public key is a point on a curve (represented by an \fB\s-1EC_POINT\s0\fR).
+.PP
+The library contains a number of alternative implementations of the different functions. Each implementation is optimised
+for different scenarios. No matter which implementation is being used, the interface remains the same. The library
+handles calling the correct implementation when an interface function is invoked. An implementation is represented by
+an \fB\s-1EC_METHOD\s0\fR structure.
+.PP
+The creation and destruction of \fB\s-1EC_GROUP\s0\fR objects is described in \fIEC_GROUP_new\fR\|(3). Functions for
+manipulating \fB\s-1EC_GROUP\s0\fR objects are described in \fIEC_GROUP_copy\fR\|(3).
+.PP
+Functions for creating, destroying and manipulating \fB\s-1EC_POINT\s0\fR objects are explained in \fIEC_POINT_new\fR\|(3),
+whilst functions for performing mathematical operations and tests on \fBEC_POINTs\fR are coverd in \fIEC_POINT_add\fR\|(3).
+.PP
+For working with private and public keys refer to \fIEC_KEY_new\fR\|(3). Implementations are covered in
+\&\fIEC_GFp_simple_method\fR\|(3).
+.PP
+For information on encoding and decoding curve parameters to and from \s-1ASN1\s0 see \fId2i_ECPKParameters\fR\|(3).
+.SH "SEE ALSO"
+.IX Header "SEE ALSO"
+\&\fIcrypto\fR\|(3), \fIEC_GROUP_new\fR\|(3), \fIEC_GROUP_copy\fR\|(3),
+\&\fIEC_POINT_new\fR\|(3), \fIEC_POINT_add\fR\|(3), \fIEC_KEY_new\fR\|(3),
+\&\fIEC_GFp_simple_method\fR\|(3), \fId2i_ECPKParameters\fR\|(3)
diff --git a/secure/lib/libcrypto/man/ecdsa.3 b/secure/lib/libcrypto/man/ecdsa.3
index 7594d5f..d3f0c70 100644
--- a/secure/lib/libcrypto/man/ecdsa.3
+++ b/secure/lib/libcrypto/man/ecdsa.3
@@ -133,13 +133,13 @@
.\" ========================================================================
.\"
.IX Title "ecdsa 3"
-.TH ecdsa 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH ecdsa 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
.nh
.SH "NAME"
-ecdsa \- Elliptic Curve Digital Signature Algorithm
+ECDSA_SIG_new, ECDSA_SIG_free, i2d_ECDSA_SIG, d2i_ECDSA_SIG, ECDSA_size, ECDSA_sign_setup, ECDSA_sign, ECDSA_sign_ex, ECDSA_verify, ECDSA_do_sign, ECDSA_do_sign_ex, ECDSA_do_verify \- Elliptic Curve Digital Signature Algorithm
.SH "SYNOPSIS"
.IX Header "SYNOPSIS"
.Vb 1
diff --git a/secure/lib/libcrypto/man/engine.3 b/secure/lib/libcrypto/man/engine.3
index 9896b6c..f363220 100644
--- a/secure/lib/libcrypto/man/engine.3
+++ b/secure/lib/libcrypto/man/engine.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "engine 3"
-.TH engine 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH engine 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/err.3 b/secure/lib/libcrypto/man/err.3
index 66210ae..63c025b 100644
--- a/secure/lib/libcrypto/man/err.3
+++ b/secure/lib/libcrypto/man/err.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "err 3"
-.TH err 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH err 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/evp.3 b/secure/lib/libcrypto/man/evp.3
index a7cb86a..69c9fdf 100644
--- a/secure/lib/libcrypto/man/evp.3
+++ b/secure/lib/libcrypto/man/evp.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "evp 3"
-.TH evp 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH evp 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
@@ -150,17 +150,42 @@ evp \- high\-level cryptographic functions
The \s-1EVP\s0 library provides a high-level interface to cryptographic
functions.
.PP
-\&\fBEVP_Seal\fR\fI...\fR and \fBEVP_Open\fR\fI...\fR provide public key encryption
-and decryption to implement digital \*(L"envelopes\*(R".
+\&\fBEVP_Seal\fR\fI...\fR and \fBEVP_Open\fR\fI...\fR
+provide public key encryption and decryption to implement digital \*(L"envelopes\*(R".
.PP
-The \fBEVP_Sign\fR\fI...\fR and \fBEVP_Verify\fR\fI...\fR functions implement
-digital signatures.
+The \fBEVP_DigestSign\fR\fI...\fR and
+\&\fBEVP_DigestVerify\fR\fI...\fR functions implement
+digital signatures and Message Authentication Codes (MACs). Also see the older
+\&\fBEVP_Sign\fR\fI...\fR and \fBEVP_Verify\fR\fI...\fR
+functions.
.PP
Symmetric encryption is available with the \fBEVP_Encrypt\fR\fI...\fR
functions. The \fBEVP_Digest\fR\fI...\fR functions provide message digests.
.PP
The \fB\s-1EVP_PKEY\s0\fR\fI...\fR functions provide a high level interface to
-asymmetric algorithms.
+asymmetric algorithms. To create a new \s-1EVP_PKEY\s0 see
+\&\fIEVP_PKEY_new\fR\|(3). EVP_PKEYs can be associated
+with a private key of a particular algorithm by using the functions
+described on the \fIEVP_PKEY_set1_RSA\fR\|(3) page, or
+new keys can be generated using \fIEVP_PKEY_keygen\fR\|(3).
+EVP_PKEYs can be compared using \fIEVP_PKEY_cmp\fR\|(3), or printed using
+\&\fIEVP_PKEY_print_private\fR\|(3).
+.PP
+The \s-1EVP_PKEY\s0 functions support the full range of asymmetric algorithm operations:
+.IP "For key agreement see \fIEVP_PKEY_derive\fR\|(3)" 4
+.IX Item "For key agreement see EVP_PKEY_derive"
+.PD 0
+.IP "For signing and verifying see \fIEVP_PKEY_sign\fR\|(3), \fIEVP_PKEY_verify\fR\|(3) and \fIEVP_PKEY_verify_recover\fR\|(3). However, note that these functions do not perform a digest of the data to be signed. Therefore normally you would use the \fBEVP_DigestSign\fR\fI...\fR functions for this purpose." 4
+.IX Item "For signing and verifying see EVP_PKEY_sign, EVP_PKEY_verify and EVP_PKEY_verify_recover. However, note that these functions do not perform a digest of the data to be signed. Therefore normally you would use the EVP_DigestSign... functions for this purpose."
+.ie n .IP "For encryption and decryption see \fIEVP_PKEY_encrypt\fR\|(3) and \fIEVP_PKEY_decrypt\fR\|(3) respectively. However, note that these functions perform encryption and decryption only. As public key encryption is an expensive operation, normally you would wrap an encrypted message in a ""digital envelope"" using the \fBEVP_Seal\fR\fI...\fR and \fBEVP_Open\fR\fI...\fR functions." 4
+.el .IP "For encryption and decryption see \fIEVP_PKEY_encrypt\fR\|(3) and \fIEVP_PKEY_decrypt\fR\|(3) respectively. However, note that these functions perform encryption and decryption only. As public key encryption is an expensive operation, normally you would wrap an encrypted message in a ``digital envelope'' using the \fBEVP_Seal\fR\fI...\fR and \fBEVP_Open\fR\fI...\fR functions." 4
+.IX Item "For encryption and decryption see EVP_PKEY_encrypt and EVP_PKEY_decrypt respectively. However, note that these functions perform encryption and decryption only. As public key encryption is an expensive operation, normally you would wrap an encrypted message in a digital envelope using the EVP_Seal... and EVP_Open... functions."
+.PD
+.PP
+The \fIEVP_BytesToKey\fR\|(3) function provides some limited support for password
+based encryption. Careful selection of the parameters will provide a PKCS#5 \s-1PBKDF1\s0 compatible
+implementation. However, new applications should not typically use this (preferring, for example,
+\&\s-1PBKDF2\s0 from PCKS#5).
.PP
Algorithms are loaded with \fIOpenSSL_add_all_algorithms\fR\|(3).
.PP
@@ -183,7 +208,19 @@ using the high level interface.
\&\fIEVP_EncryptInit\fR\|(3),
\&\fIEVP_OpenInit\fR\|(3),
\&\fIEVP_SealInit\fR\|(3),
+\&\fIEVP_DigestSignInit\fR\|(3),
\&\fIEVP_SignInit\fR\|(3),
\&\fIEVP_VerifyInit\fR\|(3),
+\&\fIEVP_PKEY_new\fR\|(3),
+\&\fIEVP_PKEY_set1_RSA\fR\|(3),
+\&\fIEVP_PKEY_keygen\fR\|(3),
+\&\fIEVP_PKEY_print_private\fR\|(3),
+\&\fIEVP_PKEY_decrypt\fR\|(3),
+\&\fIEVP_PKEY_encrypt\fR\|(3),
+\&\fIEVP_PKEY_sign\fR\|(3),
+\&\fIEVP_PKEY_verify\fR\|(3),
+\&\fIEVP_PKEY_verify_recover\fR\|(3),
+\&\fIEVP_PKEY_derive\fR\|(3),
+\&\fIEVP_BytesToKey\fR\|(3),
\&\fIOpenSSL_add_all_algorithms\fR\|(3),
\&\fIengine\fR\|(3)
diff --git a/secure/lib/libcrypto/man/hmac.3 b/secure/lib/libcrypto/man/hmac.3
index 8f5c458..b6fed21 100644
--- a/secure/lib/libcrypto/man/hmac.3
+++ b/secure/lib/libcrypto/man/hmac.3
@@ -133,14 +133,14 @@
.\" ========================================================================
.\"
.IX Title "hmac 3"
-.TH hmac 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH hmac 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
.nh
.SH "NAME"
-HMAC, HMAC_Init, HMAC_Update, HMAC_Final, HMAC_cleanup \- HMAC message
-authentication code
+HMAC, HMAC_CTX_init, HMAC_Init, HMAC_Init_ex, HMAC_Update, HMAC_Final, HMAC_CTX_cleanup,
+HMAC_cleanup \- HMAC message authentication code
.SH "SYNOPSIS"
.IX Header "SYNOPSIS"
.Vb 1
diff --git a/secure/lib/libcrypto/man/i2d_CMS_bio_stream.3 b/secure/lib/libcrypto/man/i2d_CMS_bio_stream.3
index 93b49c1..b1eee7d 100644
--- a/secure/lib/libcrypto/man/i2d_CMS_bio_stream.3
+++ b/secure/lib/libcrypto/man/i2d_CMS_bio_stream.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "i2d_CMS_bio_stream 3"
-.TH i2d_CMS_bio_stream 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH i2d_CMS_bio_stream 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/i2d_PKCS7_bio_stream.3 b/secure/lib/libcrypto/man/i2d_PKCS7_bio_stream.3
index fd07c3b..1910be2 100644
--- a/secure/lib/libcrypto/man/i2d_PKCS7_bio_stream.3
+++ b/secure/lib/libcrypto/man/i2d_PKCS7_bio_stream.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "i2d_PKCS7_bio_stream 3"
-.TH i2d_PKCS7_bio_stream 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH i2d_PKCS7_bio_stream 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
@@ -158,7 +158,7 @@ This function is effectively a version of the \fId2i_PKCS7_bio()\fR supporting
streaming.
.SH "BUGS"
.IX Header "BUGS"
-The prefix \*(L"d2i\*(R" is arguably wrong because the function outputs \s-1BER\s0 format.
+The prefix \*(L"i2d\*(R" is arguably wrong because the function outputs \s-1BER\s0 format.
.SH "RETURN VALUES"
.IX Header "RETURN VALUES"
\&\fIi2d_PKCS7_bio_stream()\fR returns 1 for success or 0 for failure.
diff --git a/secure/lib/libcrypto/man/lh_stats.3 b/secure/lib/libcrypto/man/lh_stats.3
index cf28f33..19a5146 100644
--- a/secure/lib/libcrypto/man/lh_stats.3
+++ b/secure/lib/libcrypto/man/lh_stats.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "lh_stats 3"
-.TH lh_stats 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH lh_stats 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/lhash.3 b/secure/lib/libcrypto/man/lhash.3
index 055a248..fce16ee 100644
--- a/secure/lib/libcrypto/man/lhash.3
+++ b/secure/lib/libcrypto/man/lhash.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "lhash 3"
-.TH lhash 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH lhash 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/md5.3 b/secure/lib/libcrypto/man/md5.3
index 3c43627..3970a45 100644
--- a/secure/lib/libcrypto/man/md5.3
+++ b/secure/lib/libcrypto/man/md5.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "md5 3"
-.TH md5 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH md5 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/mdc2.3 b/secure/lib/libcrypto/man/mdc2.3
index 183793a..46915da 100644
--- a/secure/lib/libcrypto/man/mdc2.3
+++ b/secure/lib/libcrypto/man/mdc2.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "mdc2 3"
-.TH mdc2 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH mdc2 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/pem.3 b/secure/lib/libcrypto/man/pem.3
index 2e03f31..c25cff4 100644
--- a/secure/lib/libcrypto/man/pem.3
+++ b/secure/lib/libcrypto/man/pem.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "pem 3"
-.TH pem 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH pem 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/rand.3 b/secure/lib/libcrypto/man/rand.3
index 9445f4b..8c45a7a 100644
--- a/secure/lib/libcrypto/man/rand.3
+++ b/secure/lib/libcrypto/man/rand.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "rand 3"
-.TH rand 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH rand 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
@@ -176,7 +176,7 @@ Since the introduction of the \s-1ENGINE API,\s0 the recommended way of controll
default implementations is by using the \s-1ENGINE API\s0 functions. The default
\&\fB\s-1RAND_METHOD\s0\fR, as set by \fIRAND_set_rand_method()\fR and returned by
\&\fIRAND_get_rand_method()\fR, is only used if no \s-1ENGINE\s0 has been set as the default
-\&\*(L"rand\*(R" implementation. Hence, these two functions are no longer the recommened
+\&\*(L"rand\*(R" implementation. Hence, these two functions are no longer the recommended
way to control defaults.
.PP
If an alternative \fB\s-1RAND_METHOD\s0\fR implementation is being used (either set
diff --git a/secure/lib/libcrypto/man/rc4.3 b/secure/lib/libcrypto/man/rc4.3
index c9987df..076898b 100644
--- a/secure/lib/libcrypto/man/rc4.3
+++ b/secure/lib/libcrypto/man/rc4.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "rc4 3"
-.TH rc4 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH rc4 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/ripemd.3 b/secure/lib/libcrypto/man/ripemd.3
index b2c6443..eee8447 100644
--- a/secure/lib/libcrypto/man/ripemd.3
+++ b/secure/lib/libcrypto/man/ripemd.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "ripemd 3"
-.TH ripemd 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH ripemd 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/rsa.3 b/secure/lib/libcrypto/man/rsa.3
index 11a364c..d49f16c 100644
--- a/secure/lib/libcrypto/man/rsa.3
+++ b/secure/lib/libcrypto/man/rsa.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "rsa 3"
-.TH rsa 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH rsa 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/sha.3 b/secure/lib/libcrypto/man/sha.3
index dbaf4e8..a76d682 100644
--- a/secure/lib/libcrypto/man/sha.3
+++ b/secure/lib/libcrypto/man/sha.3
@@ -133,35 +133,64 @@
.\" ========================================================================
.\"
.IX Title "sha 3"
-.TH sha 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH sha 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
.nh
.SH "NAME"
-SHA1, SHA1_Init, SHA1_Update, SHA1_Final \- Secure Hash Algorithm
+SHA1, SHA1_Init, SHA1_Update, SHA1_Final, SHA224, SHA224_Init, SHA224_Update,
+SHA224_Final, SHA256, SHA256_Init, SHA256_Update, SHA256_Final, SHA384,
+SHA384_Init, SHA384_Update, SHA384_Final, SHA512, SHA512_Init, SHA512_Update,
+SHA512_Final \- Secure Hash Algorithm
.SH "SYNOPSIS"
.IX Header "SYNOPSIS"
.Vb 1
\& #include <openssl/sha.h>
\&
-\& unsigned char *SHA1(const unsigned char *d, unsigned long n,
-\& unsigned char *md);
-\&
\& int SHA1_Init(SHA_CTX *c);
-\& int SHA1_Update(SHA_CTX *c, const void *data,
-\& unsigned long len);
+\& int SHA1_Update(SHA_CTX *c, const void *data, size_t len);
\& int SHA1_Final(unsigned char *md, SHA_CTX *c);
+\& unsigned char *SHA1(const unsigned char *d, size_t n,
+\& unsigned char *md);
+\&
+\& int SHA224_Init(SHA256_CTX *c);
+\& int SHA224_Update(SHA256_CTX *c, const void *data, size_t len);
+\& int SHA224_Final(unsigned char *md, SHA256_CTX *c);
+\& unsigned char *SHA224(const unsigned char *d, size_t n,
+\& unsigned char *md);
+\&
+\& int SHA256_Init(SHA256_CTX *c);
+\& int SHA256_Update(SHA256_CTX *c, const void *data, size_t len);
+\& int SHA256_Final(unsigned char *md, SHA256_CTX *c);
+\& unsigned char *SHA256(const unsigned char *d, size_t n,
+\& unsigned char *md);
+\&
+\& int SHA384_Init(SHA512_CTX *c);
+\& int SHA384_Update(SHA512_CTX *c, const void *data, size_t len);
+\& int SHA384_Final(unsigned char *md, SHA512_CTX *c);
+\& unsigned char *SHA384(const unsigned char *d, size_t n,
+\& unsigned char *md);
+\&
+\& int SHA512_Init(SHA512_CTX *c);
+\& int SHA512_Update(SHA512_CTX *c, const void *data, size_t len);
+\& int SHA512_Final(unsigned char *md, SHA512_CTX *c);
+\& unsigned char *SHA512(const unsigned char *d, size_t n,
+\& unsigned char *md);
.Ve
.SH "DESCRIPTION"
.IX Header "DESCRIPTION"
+Applications should use the higher level functions
+\&\fIEVP_DigestInit\fR\|(3) etc. instead of calling the hash
+functions directly.
+.PP
\&\s-1SHA\-1 \s0(Secure Hash Algorithm) is a cryptographic hash function with a
160 bit output.
.PP
\&\s-1\fISHA1\s0()\fR computes the \s-1SHA\-1\s0 message digest of the \fBn\fR
bytes at \fBd\fR and places it in \fBmd\fR (which must have space for
\&\s-1SHA_DIGEST_LENGTH\s0 == 20 bytes of output). If \fBmd\fR is \s-1NULL,\s0 the digest
-is placed in a static array.
+is placed in a static array. Note: setting \fBmd\fR to \s-1NULL\s0 is \fBnot thread safe\fR.
.PP
The following functions may be used if the message is not completely
stored in memory:
@@ -174,22 +203,27 @@ be hashed (\fBlen\fR bytes at \fBdata\fR).
\&\fISHA1_Final()\fR places the message digest in \fBmd\fR, which must have space
for \s-1SHA_DIGEST_LENGTH\s0 == 20 bytes of output, and erases the \fB\s-1SHA_CTX\s0\fR.
.PP
-Applications should use the higher level functions
-\&\fIEVP_DigestInit\fR\|(3)
-etc. instead of calling the hash functions directly.
+The \s-1SHA224, SHA256, SHA384\s0 and \s-1SHA512\s0 families of functions operate in the
+same way as for the \s-1SHA1\s0 functions. Note that \s-1SHA224\s0 and \s-1SHA256\s0 use a
+\&\fB\s-1SHA256_CTX\s0\fR object instead of \fB\s-1SHA_CTX\s0\fR. \s-1SHA384\s0 and \s-1SHA512\s0 use \fB\s-1SHA512_CTX\s0\fR.
+The buffer \fBmd\fR must have space for the output from the \s-1SHA\s0 variant being used
+(defined by \s-1SHA224_DIGEST_LENGTH, SHA256_DIGEST_LENGTH, SHA384_DIGEST_LENGTH\s0 and
+\&\s-1SHA512_DIGEST_LENGTH\s0). Also note that, as for the \s-1\fISHA1\s0()\fR function above, the
+\&\s-1\fISHA224\s0()\fR, \s-1\fISHA256\s0()\fR, \s-1\fISHA384\s0()\fR and \s-1\fISHA512\s0()\fR functions are not thread safe if
+\&\fBmd\fR is \s-1NULL.\s0
.PP
The predecessor of \s-1SHA\-1, SHA,\s0 is also implemented, but it should be
used only when backward compatibility is required.
.SH "RETURN VALUES"
.IX Header "RETURN VALUES"
-\&\s-1\fISHA1\s0()\fR returns a pointer to the hash value.
+\&\s-1\fISHA1\s0()\fR, \s-1\fISHA224\s0()\fR, \s-1\fISHA256\s0()\fR, \s-1\fISHA384\s0()\fR and \s-1\fISHA512\s0()\fR return a pointer to the hash
+value.
.PP
-\&\fISHA1_Init()\fR, \fISHA1_Update()\fR and \fISHA1_Final()\fR return 1 for success, 0 otherwise.
+\&\fISHA1_Init()\fR, \fISHA1_Update()\fR and \fISHA1_Final()\fR and equivalent \s-1SHA224, SHA256,
+SHA384\s0 and \s-1SHA512\s0 functions return 1 for success, 0 otherwise.
.SH "CONFORMING TO"
.IX Header "CONFORMING TO"
-\&\s-1SHA: US\s0 Federal Information Processing Standard \s-1FIPS PUB 180 \s0(Secure Hash
-Standard),
-\&\s-1SHA\-1: US\s0 Federal Information Processing Standard \s-1FIPS PUB 180\-1 \s0(Secure Hash
+\&\s-1US\s0 Federal Information Processing Standard \s-1FIPS PUB 180\-4 \s0(Secure Hash
Standard),
\&\s-1ANSI X9.30\s0
.SH "SEE ALSO"
diff --git a/secure/lib/libcrypto/man/threads.3 b/secure/lib/libcrypto/man/threads.3
index 07e763e..2ef7ebb 100644
--- a/secure/lib/libcrypto/man/threads.3
+++ b/secure/lib/libcrypto/man/threads.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "threads 3"
-.TH threads 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH threads 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/ui.3 b/secure/lib/libcrypto/man/ui.3
index 5d98570..2a3e7f5 100644
--- a/secure/lib/libcrypto/man/ui.3
+++ b/secure/lib/libcrypto/man/ui.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "ui 3"
-.TH ui 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH ui 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/ui_compat.3 b/secure/lib/libcrypto/man/ui_compat.3
index 15894d5..e286dc6 100644
--- a/secure/lib/libcrypto/man/ui_compat.3
+++ b/secure/lib/libcrypto/man/ui_compat.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "ui_compat 3"
-.TH ui_compat 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH ui_compat 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/man/x509.3 b/secure/lib/libcrypto/man/x509.3
index 7cbfada..0777817 100644
--- a/secure/lib/libcrypto/man/x509.3
+++ b/secure/lib/libcrypto/man/x509.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "x509 3"
-.TH x509 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH x509 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libcrypto/opensslconf-aarch64.h b/secure/lib/libcrypto/opensslconf-aarch64.h
index adbaba9..80adf45 100644
--- a/secure/lib/libcrypto/opensslconf-aarch64.h
+++ b/secure/lib/libcrypto/opensslconf-aarch64.h
@@ -21,12 +21,18 @@ extern "C" {
#ifndef OPENSSL_NO_KRB5
# define OPENSSL_NO_KRB5
#endif
+#ifndef OPENSSL_NO_LIBUNBOUND
+# define OPENSSL_NO_LIBUNBOUND
+#endif
#ifndef OPENSSL_NO_MD2
# define OPENSSL_NO_MD2
#endif
#ifndef OPENSSL_NO_SCTP
# define OPENSSL_NO_SCTP
#endif
+#ifndef OPENSSL_NO_SSL_TRACE
+# define OPENSSL_NO_SSL_TRACE
+#endif
#ifndef OPENSSL_NO_SSL2
# define OPENSSL_NO_SSL2
#endif
@@ -66,12 +72,18 @@ extern "C" {
# if defined(OPENSSL_NO_KRB5) && !defined(NO_KRB5)
# define NO_KRB5
# endif
+# if defined(OPENSSL_NO_LIBUNBOUND) && !defined(NO_LIBUNBOUND)
+# define NO_LIBUNBOUND
+# endif
# if defined(OPENSSL_NO_MD2) && !defined(NO_MD2)
# define NO_MD2
# endif
# if defined(OPENSSL_NO_SCTP) && !defined(NO_SCTP)
# define NO_SCTP
# endif
+# if defined(OPENSSL_NO_SSL_TRACE) && !defined(NO_SSL_TRACE)
+# define NO_SSL_TRACE
+# endif
# if defined(OPENSSL_NO_SSL2) && !defined(NO_SSL2)
# define NO_SSL2
# endif
@@ -186,7 +198,7 @@ extern "C" {
#endif
#if defined(DES_RISC1) && defined(DES_RISC2)
-YOU SHOULD NOT HAVE BOTH DES_RISC1 AND DES_RISC2 DEFINED!!!!!
+#error YOU SHOULD NOT HAVE BOTH DES_RISC1 AND DES_RISC2 DEFINED!!!!!
#endif
/* Unroll the inner loop, this sometimes helps, sometimes hinders.
diff --git a/secure/lib/libcrypto/opensslconf-arm.h b/secure/lib/libcrypto/opensslconf-arm.h
index 4ddfe82..cfa6bdc 100644
--- a/secure/lib/libcrypto/opensslconf-arm.h
+++ b/secure/lib/libcrypto/opensslconf-arm.h
@@ -21,12 +21,18 @@ extern "C" {
#ifndef OPENSSL_NO_KRB5
# define OPENSSL_NO_KRB5
#endif
+#ifndef OPENSSL_NO_LIBUNBOUND
+# define OPENSSL_NO_LIBUNBOUND
+#endif
#ifndef OPENSSL_NO_MD2
# define OPENSSL_NO_MD2
#endif
#ifndef OPENSSL_NO_SCTP
# define OPENSSL_NO_SCTP
#endif
+#ifndef OPENSSL_NO_SSL_TRACE
+# define OPENSSL_NO_SSL_TRACE
+#endif
#ifndef OPENSSL_NO_SSL2
# define OPENSSL_NO_SSL2
#endif
@@ -66,12 +72,18 @@ extern "C" {
# if defined(OPENSSL_NO_KRB5) && !defined(NO_KRB5)
# define NO_KRB5
# endif
+# if defined(OPENSSL_NO_LIBUNBOUND) && !defined(NO_LIBUNBOUND)
+# define NO_LIBUNBOUND
+# endif
# if defined(OPENSSL_NO_MD2) && !defined(NO_MD2)
# define NO_MD2
# endif
# if defined(OPENSSL_NO_SCTP) && !defined(NO_SCTP)
# define NO_SCTP
# endif
+# if defined(OPENSSL_NO_SSL_TRACE) && !defined(NO_SSL_TRACE)
+# define NO_SSL_TRACE
+# endif
# if defined(OPENSSL_NO_SSL2) && !defined(NO_SSL2)
# define NO_SSL2
# endif
@@ -186,7 +198,7 @@ extern "C" {
#endif
#if defined(DES_RISC1) && defined(DES_RISC2)
-YOU SHOULD NOT HAVE BOTH DES_RISC1 AND DES_RISC2 DEFINED!!!!!
+#error YOU SHOULD NOT HAVE BOTH DES_RISC1 AND DES_RISC2 DEFINED!!!!!
#endif
/* Unroll the inner loop, this sometimes helps, sometimes hinders.
diff --git a/secure/lib/libcrypto/opensslconf-mips.h b/secure/lib/libcrypto/opensslconf-mips.h
index b55557e..2c4bd24 100644
--- a/secure/lib/libcrypto/opensslconf-mips.h
+++ b/secure/lib/libcrypto/opensslconf-mips.h
@@ -21,12 +21,18 @@ extern "C" {
#ifndef OPENSSL_NO_KRB5
# define OPENSSL_NO_KRB5
#endif
+#ifndef OPENSSL_NO_LIBUNBOUND
+# define OPENSSL_NO_LIBUNBOUND
+#endif
#ifndef OPENSSL_NO_MD2
# define OPENSSL_NO_MD2
#endif
#ifndef OPENSSL_NO_SCTP
# define OPENSSL_NO_SCTP
#endif
+#ifndef OPENSSL_NO_SSL_TRACE
+# define OPENSSL_NO_SSL_TRACE
+#endif
#ifndef OPENSSL_NO_SSL2
# define OPENSSL_NO_SSL2
#endif
@@ -66,12 +72,18 @@ extern "C" {
# if defined(OPENSSL_NO_KRB5) && !defined(NO_KRB5)
# define NO_KRB5
# endif
+# if defined(OPENSSL_NO_LIBUNBOUND) && !defined(NO_LIBUNBOUND)
+# define NO_LIBUNBOUND
+# endif
# if defined(OPENSSL_NO_MD2) && !defined(NO_MD2)
# define NO_MD2
# endif
# if defined(OPENSSL_NO_SCTP) && !defined(NO_SCTP)
# define NO_SCTP
# endif
+# if defined(OPENSSL_NO_SSL_TRACE) && !defined(NO_SSL_TRACE)
+# define NO_SSL_TRACE
+# endif
# if defined(OPENSSL_NO_SSL2) && !defined(NO_SSL2)
# define NO_SSL2
# endif
@@ -200,7 +212,7 @@ extern "C" {
#endif
#if defined(DES_RISC1) && defined(DES_RISC2)
-YOU SHOULD NOT HAVE BOTH DES_RISC1 AND DES_RISC2 DEFINED!!!!!
+#error YOU SHOULD NOT HAVE BOTH DES_RISC1 AND DES_RISC2 DEFINED!!!!!
#endif
/* Unroll the inner loop, this sometimes helps, sometimes hinders.
diff --git a/secure/lib/libcrypto/opensslconf-powerpc.h b/secure/lib/libcrypto/opensslconf-powerpc.h
index 341daa2..45c1abd 100644
--- a/secure/lib/libcrypto/opensslconf-powerpc.h
+++ b/secure/lib/libcrypto/opensslconf-powerpc.h
@@ -21,12 +21,18 @@ extern "C" {
#ifndef OPENSSL_NO_KRB5
# define OPENSSL_NO_KRB5
#endif
+#ifndef OPENSSL_NO_LIBUNBOUND
+# define OPENSSL_NO_LIBUNBOUND
+#endif
#ifndef OPENSSL_NO_MD2
# define OPENSSL_NO_MD2
#endif
#ifndef OPENSSL_NO_SCTP
# define OPENSSL_NO_SCTP
#endif
+#ifndef OPENSSL_NO_SSL_TRACE
+# define OPENSSL_NO_SSL_TRACE
+#endif
#ifndef OPENSSL_NO_SSL2
# define OPENSSL_NO_SSL2
#endif
@@ -66,12 +72,18 @@ extern "C" {
# if defined(OPENSSL_NO_KRB5) && !defined(NO_KRB5)
# define NO_KRB5
# endif
+# if defined(OPENSSL_NO_LIBUNBOUND) && !defined(NO_LIBUNBOUND)
+# define NO_LIBUNBOUND
+# endif
# if defined(OPENSSL_NO_MD2) && !defined(NO_MD2)
# define NO_MD2
# endif
# if defined(OPENSSL_NO_SCTP) && !defined(NO_SCTP)
# define NO_SCTP
# endif
+# if defined(OPENSSL_NO_SSL_TRACE) && !defined(NO_SSL_TRACE)
+# define NO_SSL_TRACE
+# endif
# if defined(OPENSSL_NO_SSL2) && !defined(NO_SSL2)
# define NO_SSL2
# endif
@@ -195,7 +207,7 @@ extern "C" {
#endif
#if defined(DES_RISC1) && defined(DES_RISC2)
-YOU SHOULD NOT HAVE BOTH DES_RISC1 AND DES_RISC2 DEFINED!!!!!
+#error YOU SHOULD NOT HAVE BOTH DES_RISC1 AND DES_RISC2 DEFINED!!!!!
#endif
/* Unroll the inner loop, this sometimes helps, sometimes hinders.
diff --git a/secure/lib/libcrypto/opensslconf-sparc64.h b/secure/lib/libcrypto/opensslconf-sparc64.h
index 23abf0c..564d5e1 100644
--- a/secure/lib/libcrypto/opensslconf-sparc64.h
+++ b/secure/lib/libcrypto/opensslconf-sparc64.h
@@ -21,12 +21,18 @@ extern "C" {
#ifndef OPENSSL_NO_KRB5
# define OPENSSL_NO_KRB5
#endif
+#ifndef OPENSSL_NO_LIBUNBOUND
+# define OPENSSL_NO_LIBUNBOUND
+#endif
#ifndef OPENSSL_NO_MD2
# define OPENSSL_NO_MD2
#endif
#ifndef OPENSSL_NO_SCTP
# define OPENSSL_NO_SCTP
#endif
+#ifndef OPENSSL_NO_SSL_TRACE
+# define OPENSSL_NO_SSL_TRACE
+#endif
#ifndef OPENSSL_NO_SSL2
# define OPENSSL_NO_SSL2
#endif
@@ -66,12 +72,18 @@ extern "C" {
# if defined(OPENSSL_NO_KRB5) && !defined(NO_KRB5)
# define NO_KRB5
# endif
+# if defined(OPENSSL_NO_LIBUNBOUND) && !defined(NO_LIBUNBOUND)
+# define NO_LIBUNBOUND
+# endif
# if defined(OPENSSL_NO_MD2) && !defined(NO_MD2)
# define NO_MD2
# endif
# if defined(OPENSSL_NO_SCTP) && !defined(NO_SCTP)
# define NO_SCTP
# endif
+# if defined(OPENSSL_NO_SSL_TRACE) && !defined(NO_SSL_TRACE)
+# define NO_SSL_TRACE
+# endif
# if defined(OPENSSL_NO_SSL2) && !defined(NO_SSL2)
# define NO_SSL2
# endif
@@ -186,7 +198,7 @@ extern "C" {
#endif
#if defined(DES_RISC1) && defined(DES_RISC2)
-YOU SHOULD NOT HAVE BOTH DES_RISC1 AND DES_RISC2 DEFINED!!!!!
+#error YOU SHOULD NOT HAVE BOTH DES_RISC1 AND DES_RISC2 DEFINED!!!!!
#endif
/* Unroll the inner loop, this sometimes helps, sometimes hinders.
diff --git a/secure/lib/libcrypto/opensslconf-x86.h b/secure/lib/libcrypto/opensslconf-x86.h
index ed3ee20..4aab445 100644
--- a/secure/lib/libcrypto/opensslconf-x86.h
+++ b/secure/lib/libcrypto/opensslconf-x86.h
@@ -21,12 +21,18 @@ extern "C" {
#ifndef OPENSSL_NO_KRB5
# define OPENSSL_NO_KRB5
#endif
+#ifndef OPENSSL_NO_LIBUNBOUND
+# define OPENSSL_NO_LIBUNBOUND
+#endif
#ifndef OPENSSL_NO_MD2
# define OPENSSL_NO_MD2
#endif
#ifndef OPENSSL_NO_SCTP
# define OPENSSL_NO_SCTP
#endif
+#ifndef OPENSSL_NO_SSL_TRACE
+# define OPENSSL_NO_SSL_TRACE
+#endif
#ifndef OPENSSL_NO_SSL2
# define OPENSSL_NO_SSL2
#endif
@@ -63,12 +69,18 @@ extern "C" {
# if defined(OPENSSL_NO_KRB5) && !defined(NO_KRB5)
# define NO_KRB5
# endif
+# if defined(OPENSSL_NO_LIBUNBOUND) && !defined(NO_LIBUNBOUND)
+# define NO_LIBUNBOUND
+# endif
# if defined(OPENSSL_NO_MD2) && !defined(NO_MD2)
# define NO_MD2
# endif
# if defined(OPENSSL_NO_SCTP) && !defined(NO_SCTP)
# define NO_SCTP
# endif
+# if defined(OPENSSL_NO_SSL_TRACE) && !defined(NO_SSL_TRACE)
+# define NO_SSL_TRACE
+# endif
# if defined(OPENSSL_NO_SSL2) && !defined(NO_SSL2)
# define NO_SSL2
# endif
@@ -215,7 +227,7 @@ extern "C" {
#endif
#if defined(DES_RISC1) && defined(DES_RISC2)
-YOU SHOULD NOT HAVE BOTH DES_RISC1 AND DES_RISC2 DEFINED!!!!!
+#error YOU SHOULD NOT HAVE BOTH DES_RISC1 AND DES_RISC2 DEFINED!!!!!
#endif
/* Unroll the inner loop, this sometimes helps, sometimes hinders.
diff --git a/secure/lib/libssl/Makefile b/secure/lib/libssl/Makefile
index 271c0ce..6b2bf3a 100644
--- a/secure/lib/libssl/Makefile
+++ b/secure/lib/libssl/Makefile
@@ -1,7 +1,7 @@
# $FreeBSD$
LIB= ssl
-SHLIB_MAJOR= 7
+SHLIB_MAJOR= 8
NO_LINT=
@@ -10,13 +10,13 @@ NO_LINT=
.endif
.include "../libcrypto/Makefile.inc"
-SRCS= bio_ssl.c d1_both.c d1_clnt.c d1_enc.c d1_lib.c d1_meth.c d1_pkt.c \
- d1_srtp.c d1_srvr.c s23_clnt.c s23_lib.c s23_meth.c s23_pkt.c \
- s23_srvr.c s3_both.c s3_cbc.c s3_clnt.c s3_enc.c s3_lib.c s3_meth.c \
- s3_pkt.c s3_srvr.c ssl_algs.c ssl_asn1.c ssl_cert.c ssl_ciph.c \
+SRCS= bio_ssl.c d1_both.c d1_clnt.c d1_lib.c d1_meth.c d1_pkt.c d1_srtp.c \
+ d1_srvr.c s23_clnt.c s23_lib.c s23_meth.c s23_pkt.c s23_srvr.c \
+ s3_both.c s3_cbc.c s3_clnt.c s3_enc.c s3_lib.c s3_meth.c s3_pkt.c \
+ s3_srvr.c ssl_algs.c ssl_asn1.c ssl_cert.c ssl_ciph.c ssl_conf.c \
ssl_err.c ssl_err2.c ssl_lib.c ssl_rsa.c ssl_sess.c ssl_stat.c \
- ssl_txt.c t1_clnt.c t1_enc.c t1_lib.c t1_meth.c t1_reneg.c t1_srvr.c \
- tls_srp.c
+ ssl_txt.c t1_clnt.c t1_enc.c t1_ext.c t1_lib.c t1_meth.c t1_reneg.c \
+ t1_srvr.c tls_srp.c
INCS= dtls1.h kssl.h srtp.h ssl.h ssl2.h ssl23.h ssl3.h tls1.h
INCSDIR=${INCLUDEDIR}/openssl
diff --git a/secure/lib/libssl/Makefile.man b/secure/lib/libssl/Makefile.man
index 5302f4f..c06c27f 100644
--- a/secure/lib/libssl/Makefile.man
+++ b/secure/lib/libssl/Makefile.man
@@ -2,11 +2,19 @@
# DO NOT EDIT: generated from man-makefile-update target
MAN+= SSL_CIPHER_get_name.3
MAN+= SSL_COMP_add_compression_method.3
+MAN+= SSL_CONF_CTX_new.3
+MAN+= SSL_CONF_CTX_set1_prefix.3
+MAN+= SSL_CONF_CTX_set_flags.3
+MAN+= SSL_CONF_CTX_set_ssl_ctx.3
+MAN+= SSL_CONF_cmd.3
+MAN+= SSL_CONF_cmd_argv.3
+MAN+= SSL_CTX_add1_chain_cert.3
MAN+= SSL_CTX_add_extra_chain_cert.3
MAN+= SSL_CTX_add_session.3
MAN+= SSL_CTX_ctrl.3
MAN+= SSL_CTX_flush_sessions.3
MAN+= SSL_CTX_free.3
+MAN+= SSL_CTX_get0_param.3
MAN+= SSL_CTX_get_ex_new_index.3
MAN+= SSL_CTX_get_verify_mode.3
MAN+= SSL_CTX_load_verify_locations.3
@@ -15,11 +23,15 @@ MAN+= SSL_CTX_sess_number.3
MAN+= SSL_CTX_sess_set_cache_size.3
MAN+= SSL_CTX_sess_set_get_cb.3
MAN+= SSL_CTX_sessions.3
+MAN+= SSL_CTX_set1_curves.3
+MAN+= SSL_CTX_set1_verify_cert_store.3
+MAN+= SSL_CTX_set_cert_cb.3
MAN+= SSL_CTX_set_cert_store.3
MAN+= SSL_CTX_set_cert_verify_callback.3
MAN+= SSL_CTX_set_cipher_list.3
MAN+= SSL_CTX_set_client_CA_list.3
MAN+= SSL_CTX_set_client_cert_cb.3
+MAN+= SSL_CTX_set_custom_cli_ext.3
MAN+= SSL_CTX_set_default_passwd_cb.3
MAN+= SSL_CTX_set_generate_session_id.3
MAN+= SSL_CTX_set_info_callback.3
@@ -40,6 +52,7 @@ MAN+= SSL_CTX_set_tmp_rsa_callback.3
MAN+= SSL_CTX_set_verify.3
MAN+= SSL_CTX_use_certificate.3
MAN+= SSL_CTX_use_psk_identity_hint.3
+MAN+= SSL_CTX_use_serverinfo.3
MAN+= SSL_SESSION_free.3
MAN+= SSL_SESSION_get_ex_new_index.3
MAN+= SSL_SESSION_get_time.3
@@ -87,6 +100,27 @@ MAN+= ssl.3
MLINKS+= SSL_CIPHER_get_name.3 SSL_CIPHER_get_bits.3
MLINKS+= SSL_CIPHER_get_name.3 SSL_CIPHER_get_version.3
MLINKS+= SSL_CIPHER_get_name.3 SSL_CIPHER_description.3
+MLINKS+= SSL_COMP_add_compression_method.3 SSL_COMP_free_compression_methods.3
+MLINKS+= SSL_CONF_CTX_new.3 SSL_CONF_CTX_free.3
+MLINKS+= SSL_CONF_CTX_set_flags.3 SSL_CONF_CTX_clear_flags.3
+MLINKS+= SSL_CONF_CTX_set_ssl_ctx.3 SSL_CONF_CTX_set_ssl.3
+MLINKS+= SSL_CTX_add1_chain_cert.3 SSL_CTX_set0_chain.3
+MLINKS+= SSL_CTX_add1_chain_cert.3 SSL_CTX_set1_chain.3
+MLINKS+= SSL_CTX_add1_chain_cert.3 SSL_CTX_add0_chain_cert.3
+MLINKS+= SSL_CTX_add1_chain_cert.3 SSL_CTX_get0_chain_certs.3
+MLINKS+= SSL_CTX_add1_chain_cert.3 SSL_CTX_clear_chain_certs.3
+MLINKS+= SSL_CTX_add1_chain_cert.3 SSL_set0_chain.3
+MLINKS+= SSL_CTX_add1_chain_cert.3 SSL_set1_chain.3
+MLINKS+= SSL_CTX_add1_chain_cert.3 SSL_add0_chain_cert.3
+MLINKS+= SSL_CTX_add1_chain_cert.3 SSL_add1_chain_cert.3
+MLINKS+= SSL_CTX_add1_chain_cert.3 SSL_get0_chain_certs.3
+MLINKS+= SSL_CTX_add1_chain_cert.3 SSL_clear_chain_certs.3
+MLINKS+= SSL_CTX_add1_chain_cert.3 SSL_CTX_build_cert_chain.3
+MLINKS+= SSL_CTX_add1_chain_cert.3 SSL_build_cert_chain.3
+MLINKS+= SSL_CTX_add1_chain_cert.3 SSL_CTX_select_current_cert.3
+MLINKS+= SSL_CTX_add1_chain_cert.3 SSL_select_current_cert.3
+MLINKS+= SSL_CTX_add1_chain_cert.3 SSL_CTX_set_current_cert.3
+MLINKS+= SSL_CTX_add1_chain_cert.3 SSL_set_current_cert.3
MLINKS+= SSL_CTX_add_session.3 SSL_add_session.3
MLINKS+= SSL_CTX_add_session.3 SSL_CTX_remove_session.3
MLINKS+= SSL_CTX_add_session.3 SSL_remove_session.3
@@ -94,6 +128,9 @@ MLINKS+= SSL_CTX_ctrl.3 SSL_CTX_callback_ctrl.3
MLINKS+= SSL_CTX_ctrl.3 SSL_ctrl.3
MLINKS+= SSL_CTX_ctrl.3 SSL_callback_ctrl.3
MLINKS+= SSL_CTX_flush_sessions.3 SSL_flush_sessions.3
+MLINKS+= SSL_CTX_get0_param.3 SSL_get0_param.3
+MLINKS+= SSL_CTX_get0_param.3 SSL_CTX_set1_param.3
+MLINKS+= SSL_CTX_get0_param.3 SSL_set1_param.3
MLINKS+= SSL_CTX_get_ex_new_index.3 SSL_CTX_set_ex_data.3
MLINKS+= SSL_CTX_get_ex_new_index.3 SSL_CTX_get_ex_data.3
MLINKS+= SSL_CTX_get_verify_mode.3 SSL_get_verify_mode.3
@@ -118,12 +155,29 @@ MLINKS+= SSL_CTX_sess_set_get_cb.3 SSL_CTX_sess_set_remove_cb.3
MLINKS+= SSL_CTX_sess_set_get_cb.3 SSL_CTX_sess_get_new_cb.3
MLINKS+= SSL_CTX_sess_set_get_cb.3 SSL_CTX_sess_get_remove_cb.3
MLINKS+= SSL_CTX_sess_set_get_cb.3 SSL_CTX_sess_get_get_cb.3
+MLINKS+= SSL_CTX_set1_curves.3 SSL_CTX_set1_curves_list.3
+MLINKS+= SSL_CTX_set1_curves.3 SSL_set1_curves.3
+MLINKS+= SSL_CTX_set1_curves.3 SSL_set1_curves_list.3
+MLINKS+= SSL_CTX_set1_curves.3 SSL_get1_curves.3
+MLINKS+= SSL_CTX_set1_curves.3 SSL_get_shared_curve.3
+MLINKS+= SSL_CTX_set1_curves.3 SSL_CTX_set_ecdh_auto.3
+MLINKS+= SSL_CTX_set1_curves.3 SSL_set_ecdh_auto.3
+MLINKS+= SSL_CTX_set1_verify_cert_store.3 SSL_CTX_set0_verify_cert_store.3
+MLINKS+= SSL_CTX_set1_verify_cert_store.3 SSL_CTX_set0_chain_cert_store.3
+MLINKS+= SSL_CTX_set1_verify_cert_store.3 SSL_CTX_set1_chain_cert_store.3
+MLINKS+= SSL_CTX_set1_verify_cert_store.3 SSL_set0_verify_cert_store.3
+MLINKS+= SSL_CTX_set1_verify_cert_store.3 SSL_set1_verify_cert_store.3
+MLINKS+= SSL_CTX_set1_verify_cert_store.3 SSL_set0_chain_cert_store.3
+MLINKS+= SSL_CTX_set1_verify_cert_store.3 SSL_set1_chain_cert_store.3
+MLINKS+= SSL_CTX_set_cert_cb.3 SSL_set_cert_cb.3
MLINKS+= SSL_CTX_set_cert_store.3 SSL_CTX_get_cert_store.3
MLINKS+= SSL_CTX_set_cipher_list.3 SSL_set_cipher_list.3
MLINKS+= SSL_CTX_set_client_CA_list.3 SSL_set_client_CA_list.3
MLINKS+= SSL_CTX_set_client_CA_list.3 SSL_CTX_add_client_CA.3
MLINKS+= SSL_CTX_set_client_CA_list.3 SSL_add_client_CA.3
MLINKS+= SSL_CTX_set_client_cert_cb.3 SSL_CTX_get_client_cert_cb.3
+MLINKS+= SSL_CTX_set_custom_cli_ext.3 SSL_CTX_add_client_custom_ext.3
+MLINKS+= SSL_CTX_set_custom_cli_ext.3 SSL_CTX_add_server_custom_ext.3
MLINKS+= SSL_CTX_set_default_passwd_cb.3 SSL_CTX_set_default_passwd_cb_userdata.3
MLINKS+= SSL_CTX_set_generate_session_id.3 SSL_set_generate_session_id.3
MLINKS+= SSL_CTX_set_generate_session_id.3 SSL_has_matching_session_id.3
@@ -193,6 +247,7 @@ MLINKS+= SSL_CTX_use_certificate.3 SSL_check_private_key.3
MLINKS+= SSL_CTX_use_psk_identity_hint.3 SSL_use_psk_identity_hint.3
MLINKS+= SSL_CTX_use_psk_identity_hint.3 SSL_CTX_set_psk_server_callback.3
MLINKS+= SSL_CTX_use_psk_identity_hint.3 SSL_set_psk_server_callback.3
+MLINKS+= SSL_CTX_use_serverinfo.3 SSL_CTX_use_serverinfo_file.3
MLINKS+= SSL_SESSION_get_ex_new_index.3 SSL_SESSION_set_ex_data.3
MLINKS+= SSL_SESSION_get_ex_new_index.3 SSL_SESSION_get_ex_data.3
MLINKS+= SSL_SESSION_get_time.3 SSL_SESSION_set_time.3
diff --git a/secure/lib/libssl/man/SSL_CIPHER_get_name.3 b/secure/lib/libssl/man/SSL_CIPHER_get_name.3
index db90114..79b58fb 100644
--- a/secure/lib/libssl/man/SSL_CIPHER_get_name.3
+++ b/secure/lib/libssl/man/SSL_CIPHER_get_name.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "SSL_CIPHER_get_name 3"
-.TH SSL_CIPHER_get_name 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH SSL_CIPHER_get_name 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
@@ -235,10 +235,21 @@ library crashes.
If \fISSL_CIPHER_description()\fR cannot handle a built-in cipher, the according
description of the cipher property is \fBunknown\fR. This case should not
occur.
+.PP
+The standard terminology for ephemeral Diffie-Hellman schemes is \s-1DHE
+\&\s0(finite field) or \s-1ECDHE \s0(elliptic curve). This version of OpenSSL
+idiosyncratically reports these schemes as \s-1EDH\s0 and \s-1EECDH,\s0 even though
+it also accepts the standard terminology.
+.PP
+It is recommended to use the standard terminology (\s-1DHE\s0 and \s-1ECDHE\s0)
+during configuration (e.g. via SSL_CTX_set_cipher_list) for clarity of
+configuration. OpenSSL versions after 1.0.2 will report the standard
+terms via SSL_CIPHER_get_name and SSL_CIPHER_description.
.SH "RETURN VALUES"
.IX Header "RETURN VALUES"
See \s-1DESCRIPTION\s0
.SH "SEE ALSO"
.IX Header "SEE ALSO"
\&\fIssl\fR\|(3), \fISSL_get_current_cipher\fR\|(3),
-\&\fISSL_get_ciphers\fR\|(3), \fIciphers\fR\|(1)
+\&\fISSL_get_ciphers\fR\|(3), \fIciphers\fR\|(1),
+\&\fISSL_CTX_set_cipher_list\fR\|(3)
diff --git a/secure/lib/libssl/man/SSL_COMP_add_compression_method.3 b/secure/lib/libssl/man/SSL_COMP_add_compression_method.3
index d8b4a76..6b2da97 100644
--- a/secure/lib/libssl/man/SSL_COMP_add_compression_method.3
+++ b/secure/lib/libssl/man/SSL_COMP_add_compression_method.3
@@ -133,19 +133,21 @@
.\" ========================================================================
.\"
.IX Title "SSL_COMP_add_compression_method 3"
-.TH SSL_COMP_add_compression_method 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH SSL_COMP_add_compression_method 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
.nh
.SH "NAME"
-SSL_COMP_add_compression_method \- handle SSL/TLS integrated compression methods
+SSL_COMP_add_compression_method, SSL_COMP_free_compression_methods \- handle SSL/TLS integrated compression methods
.SH "SYNOPSIS"
.IX Header "SYNOPSIS"
.Vb 1
\& #include <openssl/ssl.h>
\&
\& int SSL_COMP_add_compression_method(int id, COMP_METHOD *cm);
+\&
+\& +void SSL_COMP_free_compression_methods(void);
.Ve
.SH "DESCRIPTION"
.IX Header "DESCRIPTION"
@@ -153,6 +155,10 @@ SSL_COMP_add_compression_method \- handle SSL/TLS integrated compression methods
the identifier \fBid\fR to the list of available compression methods. This
list is globally maintained for all \s-1SSL\s0 operations within this application.
It cannot be set for specific \s-1SSL_CTX\s0 or \s-1SSL\s0 objects.
+.PP
+\&\fISSL_COMP_free_compression_methods()\fR frees the internal table of
+compression methods that were built internally, and possibly
+augmented by adding \fISSL_COMP_add_compression_method()\fR.
.SH "NOTES"
.IX Header "NOTES"
The \s-1TLS\s0 standard (or SSLv3) allows the integration of compression methods
@@ -174,8 +180,8 @@ its own compression methods and will unconditionally activate compression
when a matching identifier is found. There is no way to restrict the list
of compression methods supported on a per connection basis.
.PP
-The OpenSSL library has the compression methods \fB\f(BICOMP_rle()\fB\fR and (when
-especially enabled during compilation) \fB\f(BICOMP_zlib()\fB\fR available.
+If enabled during compilation, the OpenSSL library will have the
+\&\fICOMP_zlib()\fR compression method available.
.SH "WARNINGS"
.IX Header "WARNINGS"
Once the identities of the compression methods for the \s-1TLS\s0 protocol have
diff --git a/secure/lib/libssl/man/SSL_CONF_CTX_new.3 b/secure/lib/libssl/man/SSL_CONF_CTX_new.3
new file mode 100644
index 0000000..d72e8c6
--- /dev/null
+++ b/secure/lib/libssl/man/SSL_CONF_CTX_new.3
@@ -0,0 +1,172 @@
+.\" Automatically generated by Pod::Man 2.28 (Pod::Simple 3.30)
+.\"
+.\" Standard preamble:
+.\" ========================================================================
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Vb \" Begin verbatim text
+.ft CW
+.nf
+.ne \\$1
+..
+.de Ve \" End verbatim text
+.ft R
+.fi
+..
+.\" Set up some character translations and predefined strings. \*(-- will
+.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
+.\" double quote, and \*(R" will give a right double quote. \*(C+ will
+.\" give a nicer C++. Capital omega is used to do unbreakable dashes and
+.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff,
+.\" nothing in troff, for use with C<>.
+.tr \(*W-
+.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
+.ie n \{\
+. ds -- \(*W-
+. ds PI pi
+. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
+. ds L" ""
+. ds R" ""
+. ds C` ""
+. ds C' ""
+'br\}
+.el\{\
+. ds -- \|\(em\|
+. ds PI \(*p
+. ds L" ``
+. ds R" ''
+. ds C`
+. ds C'
+'br\}
+.\"
+.\" Escape single quotes in literal strings from groff's Unicode transform.
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\"
+.\" If the F register is turned on, we'll generate index entries on stderr for
+.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
+.\" entries marked with X<> in POD. Of course, you'll have to process the
+.\" output yourself in some meaningful fashion.
+.\"
+.\" Avoid warning from groff about undefined register 'F'.
+.de IX
+..
+.nr rF 0
+.if \n(.g .if rF .nr rF 1
+.if (\n(rF:(\n(.g==0)) \{
+. if \nF \{
+. de IX
+. tm Index:\\$1\t\\n%\t"\\$2"
+..
+. if !\nF==2 \{
+. nr % 0
+. nr F 2
+. \}
+. \}
+.\}
+.rr rF
+.\"
+.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
+.\" Fear. Run. Save yourself. No user-serviceable parts.
+. \" fudge factors for nroff and troff
+.if n \{\
+. ds #H 0
+. ds #V .8m
+. ds #F .3m
+. ds #[ \f1
+. ds #] \fP
+.\}
+.if t \{\
+. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+. ds #V .6m
+. ds #F 0
+. ds #[ \&
+. ds #] \&
+.\}
+. \" simple accents for nroff and troff
+.if n \{\
+. ds ' \&
+. ds ` \&
+. ds ^ \&
+. ds , \&
+. ds ~ ~
+. ds /
+.\}
+.if t \{\
+. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
+.\}
+. \" troff and (daisy-wheel) nroff accents
+.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
+.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
+.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
+.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
+.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
+.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
+.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
+.ds ae a\h'-(\w'a'u*4/10)'e
+.ds Ae A\h'-(\w'A'u*4/10)'E
+. \" corrections for vroff
+.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
+.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
+. \" for low resolution devices (crt and lpr)
+.if \n(.H>23 .if \n(.V>19 \
+\{\
+. ds : e
+. ds 8 ss
+. ds o a
+. ds d- d\h'-1'\(ga
+. ds D- D\h'-1'\(hy
+. ds th \o'bp'
+. ds Th \o'LP'
+. ds ae ae
+. ds Ae AE
+.\}
+.rm #[ #] #H #V #F C
+.\" ========================================================================
+.\"
+.IX Title "SSL_CONF_CTX_new 3"
+.TH SSL_CONF_CTX_new 3 "2015-07-09" "1.0.2d" "OpenSSL"
+.\" For nroff, turn off justification. Always turn off hyphenation; it makes
+.\" way too many mistakes in technical documents.
+.if n .ad l
+.nh
+.SH "NAME"
+SSL_CONF_CTX_new, SSL_CONF_CTX_free \- SSL configuration allocation functions
+.SH "SYNOPSIS"
+.IX Header "SYNOPSIS"
+.Vb 1
+\& #include <openssl/ssl.h>
+\&
+\& SSL_CONF_CTX *SSL_CONF_CTX_new(void);
+\& void SSL_CONF_CTX_free(SSL_CONF_CTX *cctx);
+.Ve
+.SH "DESCRIPTION"
+.IX Header "DESCRIPTION"
+The function \fISSL_CONF_CTX_new()\fR allocates and initialises an \fB\s-1SSL_CONF_CTX\s0\fR
+structure for use with the \s-1SSL_CONF\s0 functions.
+.PP
+The function \fISSL_CONF_CTX_free()\fR frees up the context \fBcctx\fR.
+.SH "RETURN VALUES"
+.IX Header "RETURN VALUES"
+\&\fISSL_CONF_CTX_new()\fR returns either the newly allocated \fB\s-1SSL_CONF_CTX\s0\fR structure
+or \fB\s-1NULL\s0\fR if an error occurs.
+.PP
+\&\fISSL_CONF_CTX_free()\fR does not return a value.
+.SH "SEE ALSO"
+.IX Header "SEE ALSO"
+\&\fISSL_CONF_CTX_set_flags\fR\|(3),
+\&\fISSL_CONF_CTX_set_ssl_ctx\fR\|(3),
+\&\fISSL_CONF_CTX_set1_prefix\fR\|(3),
+\&\fISSL_CONF_cmd\fR\|(3),
+\&\fISSL_CONF_cmd_argv\fR\|(3)
+.SH "HISTORY"
+.IX Header "HISTORY"
+These functions were first added to OpenSSL 1.0.2
diff --git a/secure/lib/libssl/man/SSL_CONF_CTX_set1_prefix.3 b/secure/lib/libssl/man/SSL_CONF_CTX_set1_prefix.3
new file mode 100644
index 0000000..99b6f95
--- /dev/null
+++ b/secure/lib/libssl/man/SSL_CONF_CTX_set1_prefix.3
@@ -0,0 +1,180 @@
+.\" Automatically generated by Pod::Man 2.28 (Pod::Simple 3.30)
+.\"
+.\" Standard preamble:
+.\" ========================================================================
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Vb \" Begin verbatim text
+.ft CW
+.nf
+.ne \\$1
+..
+.de Ve \" End verbatim text
+.ft R
+.fi
+..
+.\" Set up some character translations and predefined strings. \*(-- will
+.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
+.\" double quote, and \*(R" will give a right double quote. \*(C+ will
+.\" give a nicer C++. Capital omega is used to do unbreakable dashes and
+.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff,
+.\" nothing in troff, for use with C<>.
+.tr \(*W-
+.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
+.ie n \{\
+. ds -- \(*W-
+. ds PI pi
+. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
+. ds L" ""
+. ds R" ""
+. ds C` ""
+. ds C' ""
+'br\}
+.el\{\
+. ds -- \|\(em\|
+. ds PI \(*p
+. ds L" ``
+. ds R" ''
+. ds C`
+. ds C'
+'br\}
+.\"
+.\" Escape single quotes in literal strings from groff's Unicode transform.
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\"
+.\" If the F register is turned on, we'll generate index entries on stderr for
+.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
+.\" entries marked with X<> in POD. Of course, you'll have to process the
+.\" output yourself in some meaningful fashion.
+.\"
+.\" Avoid warning from groff about undefined register 'F'.
+.de IX
+..
+.nr rF 0
+.if \n(.g .if rF .nr rF 1
+.if (\n(rF:(\n(.g==0)) \{
+. if \nF \{
+. de IX
+. tm Index:\\$1\t\\n%\t"\\$2"
+..
+. if !\nF==2 \{
+. nr % 0
+. nr F 2
+. \}
+. \}
+.\}
+.rr rF
+.\"
+.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
+.\" Fear. Run. Save yourself. No user-serviceable parts.
+. \" fudge factors for nroff and troff
+.if n \{\
+. ds #H 0
+. ds #V .8m
+. ds #F .3m
+. ds #[ \f1
+. ds #] \fP
+.\}
+.if t \{\
+. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+. ds #V .6m
+. ds #F 0
+. ds #[ \&
+. ds #] \&
+.\}
+. \" simple accents for nroff and troff
+.if n \{\
+. ds ' \&
+. ds ` \&
+. ds ^ \&
+. ds , \&
+. ds ~ ~
+. ds /
+.\}
+.if t \{\
+. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
+.\}
+. \" troff and (daisy-wheel) nroff accents
+.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
+.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
+.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
+.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
+.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
+.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
+.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
+.ds ae a\h'-(\w'a'u*4/10)'e
+.ds Ae A\h'-(\w'A'u*4/10)'E
+. \" corrections for vroff
+.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
+.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
+. \" for low resolution devices (crt and lpr)
+.if \n(.H>23 .if \n(.V>19 \
+\{\
+. ds : e
+. ds 8 ss
+. ds o a
+. ds d- d\h'-1'\(ga
+. ds D- D\h'-1'\(hy
+. ds th \o'bp'
+. ds Th \o'LP'
+. ds ae ae
+. ds Ae AE
+.\}
+.rm #[ #] #H #V #F C
+.\" ========================================================================
+.\"
+.IX Title "SSL_CONF_CTX_set1_prefix 3"
+.TH SSL_CONF_CTX_set1_prefix 3 "2015-07-09" "1.0.2d" "OpenSSL"
+.\" For nroff, turn off justification. Always turn off hyphenation; it makes
+.\" way too many mistakes in technical documents.
+.if n .ad l
+.nh
+.SH "NAME"
+SSL_CONF_CTX_set1_prefix \- Set configuration context command prefix
+.SH "SYNOPSIS"
+.IX Header "SYNOPSIS"
+.Vb 1
+\& #include <openssl/ssl.h>
+\&
+\& unsigned int SSL_CONF_CTX_set1_prefix(SSL_CONF_CTX *cctx, const char *prefix);
+.Ve
+.SH "DESCRIPTION"
+.IX Header "DESCRIPTION"
+The function \fISSL_CONF_CTX_set1_prefix()\fR sets the command prefix of \fBcctx\fR
+to \fBprefix\fR. If \fBprefix\fR is \fB\s-1NULL\s0\fR it is restored to the default value.
+.SH "NOTES"
+.IX Header "NOTES"
+Command prefixes alter the commands recognised by subsequent \fISSL_CTX_cmd()\fR
+calls. For example for files, if the prefix \*(L"\s-1SSL\*(R"\s0 is set then command names
+such as \*(L"SSLProtocol\*(R", \*(L"SSLOptions\*(R" etc. are recognised instead of \*(L"Protocol\*(R"
+and \*(L"Options\*(R". Similarly for command lines if the prefix is \*(L"\-\-ssl\-\*(R" then
+\&\*(L"\-\-ssl\-no_tls1_2\*(R" is recognised instead of \*(L"\-no_tls1_2\*(R".
+.PP
+If the \fB\s-1SSL_CONF_FLAG_CMDLINE\s0\fR flag is set then prefix checks are case
+sensitive and \*(L"\-\*(R" is the default. In the unlikely even an application
+explicitly wants to set no prefix it must be explicitly set to "".
+.PP
+If the \fB\s-1SSL_CONF_FLAG_FILE\s0\fR flag is set then prefix checks are case
+insensitive and no prefix is the default.
+.SH "RETURN VALUES"
+.IX Header "RETURN VALUES"
+\&\fISSL_CONF_CTX_set1_prefix()\fR returns 1 for success and 0 for failure.
+.SH "SEE ALSO"
+.IX Header "SEE ALSO"
+\&\fISSL_CONF_CTX_new\fR\|(3),
+\&\fISSL_CONF_CTX_set_flags\fR\|(3),
+\&\fISSL_CONF_CTX_set_ssl_ctx\fR\|(3),
+\&\fISSL_CONF_cmd\fR\|(3),
+\&\fISSL_CONF_cmd_argv\fR\|(3)
+.SH "HISTORY"
+.IX Header "HISTORY"
+These functions were first added to OpenSSL 1.0.2
diff --git a/secure/lib/libssl/man/SSL_CONF_CTX_set_flags.3 b/secure/lib/libssl/man/SSL_CONF_CTX_set_flags.3
new file mode 100644
index 0000000..0412b59
--- /dev/null
+++ b/secure/lib/libssl/man/SSL_CONF_CTX_set_flags.3
@@ -0,0 +1,191 @@
+.\" Automatically generated by Pod::Man 2.28 (Pod::Simple 3.30)
+.\"
+.\" Standard preamble:
+.\" ========================================================================
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Vb \" Begin verbatim text
+.ft CW
+.nf
+.ne \\$1
+..
+.de Ve \" End verbatim text
+.ft R
+.fi
+..
+.\" Set up some character translations and predefined strings. \*(-- will
+.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
+.\" double quote, and \*(R" will give a right double quote. \*(C+ will
+.\" give a nicer C++. Capital omega is used to do unbreakable dashes and
+.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff,
+.\" nothing in troff, for use with C<>.
+.tr \(*W-
+.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
+.ie n \{\
+. ds -- \(*W-
+. ds PI pi
+. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
+. ds L" ""
+. ds R" ""
+. ds C` ""
+. ds C' ""
+'br\}
+.el\{\
+. ds -- \|\(em\|
+. ds PI \(*p
+. ds L" ``
+. ds R" ''
+. ds C`
+. ds C'
+'br\}
+.\"
+.\" Escape single quotes in literal strings from groff's Unicode transform.
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\"
+.\" If the F register is turned on, we'll generate index entries on stderr for
+.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
+.\" entries marked with X<> in POD. Of course, you'll have to process the
+.\" output yourself in some meaningful fashion.
+.\"
+.\" Avoid warning from groff about undefined register 'F'.
+.de IX
+..
+.nr rF 0
+.if \n(.g .if rF .nr rF 1
+.if (\n(rF:(\n(.g==0)) \{
+. if \nF \{
+. de IX
+. tm Index:\\$1\t\\n%\t"\\$2"
+..
+. if !\nF==2 \{
+. nr % 0
+. nr F 2
+. \}
+. \}
+.\}
+.rr rF
+.\"
+.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
+.\" Fear. Run. Save yourself. No user-serviceable parts.
+. \" fudge factors for nroff and troff
+.if n \{\
+. ds #H 0
+. ds #V .8m
+. ds #F .3m
+. ds #[ \f1
+. ds #] \fP
+.\}
+.if t \{\
+. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+. ds #V .6m
+. ds #F 0
+. ds #[ \&
+. ds #] \&
+.\}
+. \" simple accents for nroff and troff
+.if n \{\
+. ds ' \&
+. ds ` \&
+. ds ^ \&
+. ds , \&
+. ds ~ ~
+. ds /
+.\}
+.if t \{\
+. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
+.\}
+. \" troff and (daisy-wheel) nroff accents
+.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
+.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
+.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
+.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
+.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
+.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
+.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
+.ds ae a\h'-(\w'a'u*4/10)'e
+.ds Ae A\h'-(\w'A'u*4/10)'E
+. \" corrections for vroff
+.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
+.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
+. \" for low resolution devices (crt and lpr)
+.if \n(.H>23 .if \n(.V>19 \
+\{\
+. ds : e
+. ds 8 ss
+. ds o a
+. ds d- d\h'-1'\(ga
+. ds D- D\h'-1'\(hy
+. ds th \o'bp'
+. ds Th \o'LP'
+. ds ae ae
+. ds Ae AE
+.\}
+.rm #[ #] #H #V #F C
+.\" ========================================================================
+.\"
+.IX Title "SSL_CONF_CTX_set_flags 3"
+.TH SSL_CONF_CTX_set_flags 3 "2015-07-09" "1.0.2d" "OpenSSL"
+.\" For nroff, turn off justification. Always turn off hyphenation; it makes
+.\" way too many mistakes in technical documents.
+.if n .ad l
+.nh
+.SH "NAME"
+SSL_CONF_CTX_set_flags, SSL_CONF_CTX_clear_flags \- Set of clear SSL configuration context flags
+.SH "SYNOPSIS"
+.IX Header "SYNOPSIS"
+.Vb 1
+\& #include <openssl/ssl.h>
+\&
+\& unsigned int SSL_CONF_CTX_set_flags(SSL_CONF_CTX *cctx, unsigned int flags);
+\& unsigned int SSL_CONF_CTX_clear_flags(SSL_CONF_CTX *cctx, unsigned int flags);
+.Ve
+.SH "DESCRIPTION"
+.IX Header "DESCRIPTION"
+The function \fISSL_CONF_CTX_set_flags()\fR sets \fBflags\fR in the context \fBcctx\fR.
+.PP
+The function \fISSL_CONF_CTX_clear_flags()\fR clears \fBflags\fR in the context \fBcctx\fR.
+.SH "NOTES"
+.IX Header "NOTES"
+The flags set affect how subsequent calls to \fISSL_CONF_cmd()\fR or
+\&\fISSL_CONF_argv()\fR behave.
+.PP
+Currently the following \fBflags\fR values are recognised:
+.IP "\s-1SSL_CONF_FLAG_CMDLINE, SSL_CONF_FLAG_FILE\s0" 4
+.IX Item "SSL_CONF_FLAG_CMDLINE, SSL_CONF_FLAG_FILE"
+recognise options intended for command line or configuration file use. At
+least one of these flags must be set.
+.IP "\s-1SSL_CONF_FLAG_CLIENT, SSL_CONF_FLAG_SERVER\s0" 4
+.IX Item "SSL_CONF_FLAG_CLIENT, SSL_CONF_FLAG_SERVER"
+recognise options intended for use in \s-1SSL/TLS\s0 clients or servers. One or
+both of these flags must be set.
+.IP "\s-1SSL_CONF_FLAG_CERTIFICATE\s0" 4
+.IX Item "SSL_CONF_FLAG_CERTIFICATE"
+recognise certificate and private key options.
+.IP "\s-1SSL_CONF_FLAG_SHOW_ERRORS\s0" 4
+.IX Item "SSL_CONF_FLAG_SHOW_ERRORS"
+indicate errors relating to unrecognised options or missing arguments in
+the error queue. If this option isn't set such errors are only reflected
+in the return values of \fISSL_CONF_set_cmd()\fR or \fISSL_CONF_set_argv()\fR
+.SH "RETURN VALUES"
+.IX Header "RETURN VALUES"
+\&\fISSL_CONF_CTX_set_flags()\fR and \fISSL_CONF_CTX_clear_flags()\fR returns the new flags
+value after setting or clearing flags.
+.SH "SEE ALSO"
+.IX Header "SEE ALSO"
+\&\fISSL_CONF_CTX_new\fR\|(3),
+\&\fISSL_CONF_CTX_set_ssl_ctx\fR\|(3),
+\&\fISSL_CONF_CTX_set1_prefix\fR\|(3),
+\&\fISSL_CONF_cmd\fR\|(3),
+\&\fISSL_CONF_cmd_argv\fR\|(3)
+.SH "HISTORY"
+.IX Header "HISTORY"
+These functions were first added to OpenSSL 1.0.2
diff --git a/secure/lib/libssl/man/SSL_CONF_CTX_set_ssl_ctx.3 b/secure/lib/libssl/man/SSL_CONF_CTX_set_ssl_ctx.3
new file mode 100644
index 0000000..c07a3eb
--- /dev/null
+++ b/secure/lib/libssl/man/SSL_CONF_CTX_set_ssl_ctx.3
@@ -0,0 +1,178 @@
+.\" Automatically generated by Pod::Man 2.28 (Pod::Simple 3.30)
+.\"
+.\" Standard preamble:
+.\" ========================================================================
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Vb \" Begin verbatim text
+.ft CW
+.nf
+.ne \\$1
+..
+.de Ve \" End verbatim text
+.ft R
+.fi
+..
+.\" Set up some character translations and predefined strings. \*(-- will
+.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
+.\" double quote, and \*(R" will give a right double quote. \*(C+ will
+.\" give a nicer C++. Capital omega is used to do unbreakable dashes and
+.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff,
+.\" nothing in troff, for use with C<>.
+.tr \(*W-
+.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
+.ie n \{\
+. ds -- \(*W-
+. ds PI pi
+. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
+. ds L" ""
+. ds R" ""
+. ds C` ""
+. ds C' ""
+'br\}
+.el\{\
+. ds -- \|\(em\|
+. ds PI \(*p
+. ds L" ``
+. ds R" ''
+. ds C`
+. ds C'
+'br\}
+.\"
+.\" Escape single quotes in literal strings from groff's Unicode transform.
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\"
+.\" If the F register is turned on, we'll generate index entries on stderr for
+.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
+.\" entries marked with X<> in POD. Of course, you'll have to process the
+.\" output yourself in some meaningful fashion.
+.\"
+.\" Avoid warning from groff about undefined register 'F'.
+.de IX
+..
+.nr rF 0
+.if \n(.g .if rF .nr rF 1
+.if (\n(rF:(\n(.g==0)) \{
+. if \nF \{
+. de IX
+. tm Index:\\$1\t\\n%\t"\\$2"
+..
+. if !\nF==2 \{
+. nr % 0
+. nr F 2
+. \}
+. \}
+.\}
+.rr rF
+.\"
+.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
+.\" Fear. Run. Save yourself. No user-serviceable parts.
+. \" fudge factors for nroff and troff
+.if n \{\
+. ds #H 0
+. ds #V .8m
+. ds #F .3m
+. ds #[ \f1
+. ds #] \fP
+.\}
+.if t \{\
+. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+. ds #V .6m
+. ds #F 0
+. ds #[ \&
+. ds #] \&
+.\}
+. \" simple accents for nroff and troff
+.if n \{\
+. ds ' \&
+. ds ` \&
+. ds ^ \&
+. ds , \&
+. ds ~ ~
+. ds /
+.\}
+.if t \{\
+. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
+.\}
+. \" troff and (daisy-wheel) nroff accents
+.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
+.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
+.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
+.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
+.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
+.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
+.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
+.ds ae a\h'-(\w'a'u*4/10)'e
+.ds Ae A\h'-(\w'A'u*4/10)'E
+. \" corrections for vroff
+.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
+.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
+. \" for low resolution devices (crt and lpr)
+.if \n(.H>23 .if \n(.V>19 \
+\{\
+. ds : e
+. ds 8 ss
+. ds o a
+. ds d- d\h'-1'\(ga
+. ds D- D\h'-1'\(hy
+. ds th \o'bp'
+. ds Th \o'LP'
+. ds ae ae
+. ds Ae AE
+.\}
+.rm #[ #] #H #V #F C
+.\" ========================================================================
+.\"
+.IX Title "SSL_CONF_CTX_set_ssl_ctx 3"
+.TH SSL_CONF_CTX_set_ssl_ctx 3 "2015-07-09" "1.0.2d" "OpenSSL"
+.\" For nroff, turn off justification. Always turn off hyphenation; it makes
+.\" way too many mistakes in technical documents.
+.if n .ad l
+.nh
+.SH "NAME"
+SSL_CONF_CTX_set_ssl_ctx, SSL_CONF_CTX_set_ssl \- set context to configure
+.SH "SYNOPSIS"
+.IX Header "SYNOPSIS"
+.Vb 1
+\& #include <openssl/ssl.h>
+\&
+\& void SSL_CONF_CTX_set_ssl_ctx(SSL_CONF_CTX *cctx, SSL_CTX *ctx);
+\& void SSL_CONF_CTX_set_ssl(SSL_CONF_CTX *cctx, SSL *ssl);
+.Ve
+.SH "DESCRIPTION"
+.IX Header "DESCRIPTION"
+\&\fISSL_CONF_CTX_set_ssl_ctx()\fR sets the context associated with \fBcctx\fR to the
+\&\fB\s-1SSL_CTX\s0\fR structure \fBctx\fR. Any previous \fB\s-1SSL\s0\fR or \fB\s-1SSL_CTX\s0\fR associated with
+\&\fBcctx\fR is cleared. Subsequent calls to \fISSL_CONF_cmd()\fR will be sent to
+\&\fBctx\fR.
+.PP
+\&\fISSL_CONF_CTX_set_ssl()\fR sets the context associated with \fBcctx\fR to the
+\&\fB\s-1SSL\s0\fR structure \fBssl\fR. Any previous \fB\s-1SSL\s0\fR or \fB\s-1SSL_CTX\s0\fR associated with
+\&\fBcctx\fR is cleared. Subsequent calls to \fISSL_CONF_cmd()\fR will be sent to
+\&\fBssl\fR.
+.SH "NOTES"
+.IX Header "NOTES"
+The context need not be set or it can be set to \fB\s-1NULL\s0\fR in which case only
+syntax checking of commands is performed, where possible.
+.SH "RETURN VALUES"
+.IX Header "RETURN VALUES"
+\&\fISSL_CONF_CTX_set_ssl_ctx()\fR and \fISSL_CTX_set_ssl()\fR do not return a value.
+.SH "SEE ALSO"
+.IX Header "SEE ALSO"
+\&\fISSL_CONF_CTX_new\fR\|(3),
+\&\fISSL_CONF_CTX_set_flags\fR\|(3),
+\&\fISSL_CONF_CTX_set1_prefix\fR\|(3),
+\&\fISSL_CONF_cmd\fR\|(3),
+\&\fISSL_CONF_cmd_argv\fR\|(3)
+.SH "HISTORY"
+.IX Header "HISTORY"
+These functions were first added to OpenSSL 1.0.2
diff --git a/secure/lib/libssl/man/SSL_CONF_cmd.3 b/secure/lib/libssl/man/SSL_CONF_cmd.3
new file mode 100644
index 0000000..0d38c4c
--- /dev/null
+++ b/secure/lib/libssl/man/SSL_CONF_cmd.3
@@ -0,0 +1,536 @@
+.\" Automatically generated by Pod::Man 2.28 (Pod::Simple 3.30)
+.\"
+.\" Standard preamble:
+.\" ========================================================================
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Vb \" Begin verbatim text
+.ft CW
+.nf
+.ne \\$1
+..
+.de Ve \" End verbatim text
+.ft R
+.fi
+..
+.\" Set up some character translations and predefined strings. \*(-- will
+.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
+.\" double quote, and \*(R" will give a right double quote. \*(C+ will
+.\" give a nicer C++. Capital omega is used to do unbreakable dashes and
+.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff,
+.\" nothing in troff, for use with C<>.
+.tr \(*W-
+.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
+.ie n \{\
+. ds -- \(*W-
+. ds PI pi
+. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
+. ds L" ""
+. ds R" ""
+. ds C` ""
+. ds C' ""
+'br\}
+.el\{\
+. ds -- \|\(em\|
+. ds PI \(*p
+. ds L" ``
+. ds R" ''
+. ds C`
+. ds C'
+'br\}
+.\"
+.\" Escape single quotes in literal strings from groff's Unicode transform.
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\"
+.\" If the F register is turned on, we'll generate index entries on stderr for
+.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
+.\" entries marked with X<> in POD. Of course, you'll have to process the
+.\" output yourself in some meaningful fashion.
+.\"
+.\" Avoid warning from groff about undefined register 'F'.
+.de IX
+..
+.nr rF 0
+.if \n(.g .if rF .nr rF 1
+.if (\n(rF:(\n(.g==0)) \{
+. if \nF \{
+. de IX
+. tm Index:\\$1\t\\n%\t"\\$2"
+..
+. if !\nF==2 \{
+. nr % 0
+. nr F 2
+. \}
+. \}
+.\}
+.rr rF
+.\"
+.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
+.\" Fear. Run. Save yourself. No user-serviceable parts.
+. \" fudge factors for nroff and troff
+.if n \{\
+. ds #H 0
+. ds #V .8m
+. ds #F .3m
+. ds #[ \f1
+. ds #] \fP
+.\}
+.if t \{\
+. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+. ds #V .6m
+. ds #F 0
+. ds #[ \&
+. ds #] \&
+.\}
+. \" simple accents for nroff and troff
+.if n \{\
+. ds ' \&
+. ds ` \&
+. ds ^ \&
+. ds , \&
+. ds ~ ~
+. ds /
+.\}
+.if t \{\
+. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
+.\}
+. \" troff and (daisy-wheel) nroff accents
+.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
+.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
+.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
+.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
+.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
+.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
+.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
+.ds ae a\h'-(\w'a'u*4/10)'e
+.ds Ae A\h'-(\w'A'u*4/10)'E
+. \" corrections for vroff
+.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
+.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
+. \" for low resolution devices (crt and lpr)
+.if \n(.H>23 .if \n(.V>19 \
+\{\
+. ds : e
+. ds 8 ss
+. ds o a
+. ds d- d\h'-1'\(ga
+. ds D- D\h'-1'\(hy
+. ds th \o'bp'
+. ds Th \o'LP'
+. ds ae ae
+. ds Ae AE
+.\}
+.rm #[ #] #H #V #F C
+.\" ========================================================================
+.\"
+.IX Title "SSL_CONF_cmd 3"
+.TH SSL_CONF_cmd 3 "2015-07-09" "1.0.2d" "OpenSSL"
+.\" For nroff, turn off justification. Always turn off hyphenation; it makes
+.\" way too many mistakes in technical documents.
+.if n .ad l
+.nh
+.SH "NAME"
+SSL_CONF_cmd \- send configuration command
+.SH "SYNOPSIS"
+.IX Header "SYNOPSIS"
+.Vb 1
+\& #include <openssl/ssl.h>
+\&
+\& int SSL_CONF_cmd(SSL_CONF_CTX *cctx, const char *cmd, const char *value);
+\& int SSL_CONF_cmd_value_type(SSL_CONF_CTX *cctx, const char *cmd);
+\& int SSL_CONF_finish(SSL_CONF_CTX *cctx);
+.Ve
+.SH "DESCRIPTION"
+.IX Header "DESCRIPTION"
+The function \fISSL_CONF_cmd()\fR performs configuration operation \fBcmd\fR with
+optional parameter \fBvalue\fR on \fBctx\fR. Its purpose is to simplify application
+configuration of \fB\s-1SSL_CTX\s0\fR or \fB\s-1SSL\s0\fR structures by providing a common
+framework for command line options or configuration files.
+.PP
+\&\fISSL_CONF_cmd_value_type()\fR returns the type of value that \fBcmd\fR refers to.
+.PP
+The function \fISSL_CONF_finish()\fR must be called after all configuration
+operations have been completed. It is used to finalise any operations
+or to process defaults.
+.SH "SUPPORTED COMMAND LINE COMMANDS"
+.IX Header "SUPPORTED COMMAND LINE COMMANDS"
+Currently supported \fBcmd\fR names for command lines (i.e. when the
+flag \fB\s-1SSL_CONF_CMDLINE\s0\fR is set) are listed below. Note: all \fBcmd\fR names
+are case sensitive. Unless otherwise stated commands can be used by
+both clients and servers and the \fBvalue\fR parameter is not used. The default
+prefix for command line commands is \fB\-\fR and that is reflected below.
+.IP "\fB\-sigalgs\fR" 4
+.IX Item "-sigalgs"
+This sets the supported signature algorithms for \s-1TLS\s0 v1.2. For clients this
+value is used directly for the supported signature algorithms extension. For
+servers it is used to determine which signature algorithms to support.
+.Sp
+The \fBvalue\fR argument should be a colon separated list of signature algorithms
+in order of decreasing preference of the form \fBalgorithm+hash\fR. \fBalgorithm\fR
+is one of \fB\s-1RSA\s0\fR, \fB\s-1DSA\s0\fR or \fB\s-1ECDSA\s0\fR and \fBhash\fR is a supported algorithm
+\&\s-1OID\s0 short name such as \fB\s-1SHA1\s0\fR, \fB\s-1SHA224\s0\fR, \fB\s-1SHA256\s0\fR, \fB\s-1SHA384\s0\fR of \fB\s-1SHA512\s0\fR.
+Note: algorithm and hash names are case sensitive.
+.Sp
+If this option is not set then all signature algorithms supported by the
+OpenSSL library are permissible.
+.IP "\fB\-client_sigalgs\fR" 4
+.IX Item "-client_sigalgs"
+This sets the supported signature algorithms associated with client
+authentication for \s-1TLS\s0 v1.2. For servers the value is used in the supported
+signature algorithms field of a certificate request. For clients it is
+used to determine which signature algorithm to with the client certificate.
+If a server does not request a certificate this option has no effect.
+.Sp
+The syntax of \fBvalue\fR is identical to \fB\-sigalgs\fR. If not set then
+the value set for \fB\-sigalgs\fR will be used instead.
+.IP "\fB\-curves\fR" 4
+.IX Item "-curves"
+This sets the supported elliptic curves. For clients the curves are
+sent using the supported curves extension. For servers it is used
+to determine which curve to use. This setting affects curves used for both
+signatures and key exchange, if applicable.
+.Sp
+The \fBvalue\fR argument is a colon separated list of curves. The curve can be
+either the \fB\s-1NIST\s0\fR name (e.g. \fBP\-256\fR) or an OpenSSL \s-1OID\s0 name (e.g
+\&\fBprime256v1\fR). Curve names are case sensitive.
+.IP "\fB\-named_curve\fR" 4
+.IX Item "-named_curve"
+This sets the temporary curve used for ephemeral \s-1ECDH\s0 modes. Only used by
+servers
+.Sp
+The \fBvalue\fR argument is a curve name or the special value \fBauto\fR which
+picks an appropriate curve based on client and server preferences. The curve
+can be either the \fB\s-1NIST\s0\fR name (e.g. \fBP\-256\fR) or an OpenSSL \s-1OID\s0 name
+(e.g \fBprime256v1\fR). Curve names are case sensitive.
+.IP "\fB\-cipher\fR" 4
+.IX Item "-cipher"
+Sets the cipher suite list to \fBvalue\fR. Note: syntax checking of \fBvalue\fR is
+currently not performed unless a \fB\s-1SSL\s0\fR or \fB\s-1SSL_CTX\s0\fR structure is
+associated with \fBcctx\fR.
+.IP "\fB\-cert\fR" 4
+.IX Item "-cert"
+Attempts to use the file \fBvalue\fR as the certificate for the appropriate
+context. It currently uses \fISSL_CTX_use_certificate_chain_file()\fR if an \fB\s-1SSL_CTX\s0\fR
+structure is set or \fISSL_use_certificate_file()\fR with filetype \s-1PEM\s0 if an \fB\s-1SSL\s0\fR
+structure is set. This option is only supported if certificate operations
+are permitted.
+.IP "\fB\-key\fR" 4
+.IX Item "-key"
+Attempts to use the file \fBvalue\fR as the private key for the appropriate
+context. This option is only supported if certificate operations
+are permitted. Note: if no \fB\-key\fR option is set then a private key is
+not loaded: it does not currently use the \fB\-cert\fR file.
+.IP "\fB\-dhparam\fR" 4
+.IX Item "-dhparam"
+Attempts to use the file \fBvalue\fR as the set of temporary \s-1DH\s0 parameters for
+the appropriate context. This option is only supported if certificate
+operations are permitted.
+.IP "\fB\-no_ssl2\fR, \fB\-no_ssl3\fR, \fB\-no_tls1\fR, \fB\-no_tls1_1\fR, \fB\-no_tls1_2\fR" 4
+.IX Item "-no_ssl2, -no_ssl3, -no_tls1, -no_tls1_1, -no_tls1_2"
+Disables protocol support for SSLv2, SSLv3, \s-1TLS 1.0, TLS 1.1\s0 or \s-1TLS 1.2 \s0
+by setting the corresponding options \fB\s-1SSL_OP_NO_SSL2\s0\fR, \fB\s-1SSL_OP_NO_SSL3\s0\fR,
+\&\fB\s-1SSL_OP_NO_TLS1\s0\fR, \fB\s-1SSL_OP_NO_TLS1_1\s0\fR and \fB\s-1SSL_OP_NO_TLS1_2\s0\fR respectively.
+.IP "\fB\-bugs\fR" 4
+.IX Item "-bugs"
+Various bug workarounds are set, same as setting \fB\s-1SSL_OP_ALL\s0\fR.
+.IP "\fB\-no_comp\fR" 4
+.IX Item "-no_comp"
+Disables support for \s-1SSL/TLS\s0 compression, same as setting \fB\s-1SSL_OP_NO_COMPRESS\s0\fR.
+.IP "\fB\-no_ticket\fR" 4
+.IX Item "-no_ticket"
+Disables support for session tickets, same as setting \fB\s-1SSL_OP_NO_TICKET\s0\fR.
+.IP "\fB\-serverpref\fR" 4
+.IX Item "-serverpref"
+Use server and not client preference order when determining which cipher suite,
+signature algorithm or elliptic curve to use for an incoming connection.
+Equivalent to \fB\s-1SSL_OP_CIPHER_SERVER_PREFERENCE\s0\fR. Only used by servers.
+.IP "\fB\-no_resumption_on_reneg\fR" 4
+.IX Item "-no_resumption_on_reneg"
+set \s-1SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION\s0 flag. Only used by servers.
+.IP "\fB\-legacyrenegotiation\fR" 4
+.IX Item "-legacyrenegotiation"
+permits the use of unsafe legacy renegotiation. Equivalent to setting
+\&\fB\s-1SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION\s0\fR.
+.IP "\fB\-legacy_server_connect\fR, \fB\-no_legacy_server_connect\fR" 4
+.IX Item "-legacy_server_connect, -no_legacy_server_connect"
+permits or prohibits the use of unsafe legacy renegotiation for OpenSSL
+clients only. Equivalent to setting or clearing \fB\s-1SSL_OP_LEGACY_SERVER_CONNECT\s0\fR.
+Set by default.
+.IP "\fB\-strict\fR" 4
+.IX Item "-strict"
+enables strict mode protocol handling. Equivalent to setting
+\&\fB\s-1SSL_CERT_FLAG_TLS_STRICT\s0\fR.
+.IP "\fB\-debug_broken_protocol\fR" 4
+.IX Item "-debug_broken_protocol"
+disables various checks and permits several kinds of broken protocol behaviour
+for testing purposes: it should \fB\s-1NEVER\s0\fR be used in anything other than a test
+environment. Only supported if OpenSSL is configured with
+\&\fB\-DOPENSSL_SSL_DEBUG_BROKEN_PROTOCOL\fR.
+.SH "SUPPORTED CONFIGURATION FILE COMMANDS"
+.IX Header "SUPPORTED CONFIGURATION FILE COMMANDS"
+Currently supported \fBcmd\fR names for configuration files (i.e. when the
+flag \fB\s-1SSL_CONF_FLAG_FILE\s0\fR is set) are listed below. All configuration file
+\&\fBcmd\fR names and are case insensitive so \fBsignaturealgorithms\fR is recognised
+as well as \fBSignatureAlgorithms\fR. Unless otherwise stated the \fBvalue\fR names
+are also case insensitive.
+.PP
+Note: the command prefix (if set) alters the recognised \fBcmd\fR values.
+.IP "\fBCipherString\fR" 4
+.IX Item "CipherString"
+Sets the cipher suite list to \fBvalue\fR. Note: syntax checking of \fBvalue\fR is
+currently not performed unless an \fB\s-1SSL\s0\fR or \fB\s-1SSL_CTX\s0\fR structure is
+associated with \fBcctx\fR.
+.IP "\fBCertificate\fR" 4
+.IX Item "Certificate"
+Attempts to use the file \fBvalue\fR as the certificate for the appropriate
+context. It currently uses \fISSL_CTX_use_certificate_chain_file()\fR if an \fB\s-1SSL_CTX\s0\fR
+structure is set or \fISSL_use_certificate_file()\fR with filetype \s-1PEM\s0 if an \fB\s-1SSL\s0\fR
+structure is set. This option is only supported if certificate operations
+are permitted.
+.IP "\fBPrivateKey\fR" 4
+.IX Item "PrivateKey"
+Attempts to use the file \fBvalue\fR as the private key for the appropriate
+context. This option is only supported if certificate operations
+are permitted. Note: if no \fB\-key\fR option is set then a private key is
+not loaded: it does not currently use the \fBCertificate\fR file.
+.IP "\fBServerInfoFile\fR" 4
+.IX Item "ServerInfoFile"
+Attempts to use the file \fBvalue\fR in the \*(L"serverinfo\*(R" extension using the
+function SSL_CTX_use_serverinfo_file.
+.IP "\fBDHParameters\fR" 4
+.IX Item "DHParameters"
+Attempts to use the file \fBvalue\fR as the set of temporary \s-1DH\s0 parameters for
+the appropriate context. This option is only supported if certificate
+operations are permitted.
+.IP "\fBSignatureAlgorithms\fR" 4
+.IX Item "SignatureAlgorithms"
+This sets the supported signature algorithms for \s-1TLS\s0 v1.2. For clients this
+value is used directly for the supported signature algorithms extension. For
+servers it is used to determine which signature algorithms to support.
+.Sp
+The \fBvalue\fR argument should be a colon separated list of signature algorithms
+in order of decreasing preference of the form \fBalgorithm+hash\fR. \fBalgorithm\fR
+is one of \fB\s-1RSA\s0\fR, \fB\s-1DSA\s0\fR or \fB\s-1ECDSA\s0\fR and \fBhash\fR is a supported algorithm
+\&\s-1OID\s0 short name such as \fB\s-1SHA1\s0\fR, \fB\s-1SHA224\s0\fR, \fB\s-1SHA256\s0\fR, \fB\s-1SHA384\s0\fR of \fB\s-1SHA512\s0\fR.
+Note: algorithm and hash names are case sensitive.
+.Sp
+If this option is not set then all signature algorithms supported by the
+OpenSSL library are permissible.
+.IP "\fBClientSignatureAlgorithms\fR" 4
+.IX Item "ClientSignatureAlgorithms"
+This sets the supported signature algorithms associated with client
+authentication for \s-1TLS\s0 v1.2. For servers the value is used in the supported
+signature algorithms field of a certificate request. For clients it is
+used to determine which signature algorithm to with the client certificate.
+.Sp
+The syntax of \fBvalue\fR is identical to \fBSignatureAlgorithms\fR. If not set then
+the value set for \fBSignatureAlgorithms\fR will be used instead.
+.IP "\fBCurves\fR" 4
+.IX Item "Curves"
+This sets the supported elliptic curves. For clients the curves are
+sent using the supported curves extension. For servers it is used
+to determine which curve to use. This setting affects curves used for both
+signatures and key exchange, if applicable.
+.Sp
+The \fBvalue\fR argument is a colon separated list of curves. The curve can be
+either the \fB\s-1NIST\s0\fR name (e.g. \fBP\-256\fR) or an OpenSSL \s-1OID\s0 name (e.g
+\&\fBprime256v1\fR). Curve names are case sensitive.
+.IP "\fBECDHParameters\fR" 4
+.IX Item "ECDHParameters"
+This sets the temporary curve used for ephemeral \s-1ECDH\s0 modes. Only used by
+servers
+.Sp
+The \fBvalue\fR argument is a curve name or the special value \fBAutomatic\fR which
+picks an appropriate curve based on client and server preferences. The curve
+can be either the \fB\s-1NIST\s0\fR name (e.g. \fBP\-256\fR) or an OpenSSL \s-1OID\s0 name
+(e.g \fBprime256v1\fR). Curve names are case sensitive.
+.IP "\fBProtocol\fR" 4
+.IX Item "Protocol"
+The supported versions of the \s-1SSL\s0 or \s-1TLS\s0 protocol.
+.Sp
+The \fBvalue\fR argument is a comma separated list of supported protocols to
+enable or disable. If an protocol is preceded by \fB\-\fR that version is disabled.
+All versions are enabled by default, though applications may choose to
+explicitly disable some. Currently supported protocol values are \fBSSLv2\fR,
+\&\fBSSLv3\fR, \fBTLSv1\fR, \fBTLSv1.1\fR and \fBTLSv1.2\fR. The special value \fB\s-1ALL\s0\fR refers
+to all supported versions.
+.IP "\fBOptions\fR" 4
+.IX Item "Options"
+The \fBvalue\fR argument is a comma separated list of various flags to set.
+If a flag string is preceded \fB\-\fR it is disabled. See the
+\&\fBSSL_CTX_set_options\fR function for more details of individual options.
+.Sp
+Each option is listed below. Where an operation is enabled by default
+the \fB\-flag\fR syntax is needed to disable it.
+.Sp
+\&\fBSessionTicket\fR: session ticket support, enabled by default. Inverse of
+\&\fB\s-1SSL_OP_NO_TICKET\s0\fR: that is \fB\-SessionTicket\fR is the same as setting
+\&\fB\s-1SSL_OP_NO_TICKET\s0\fR.
+.Sp
+\&\fBCompression\fR: \s-1SSL/TLS\s0 compression support, enabled by default. Inverse
+of \fB\s-1SSL_OP_NO_COMPRESSION\s0\fR.
+.Sp
+\&\fBEmptyFragments\fR: use empty fragments as a countermeasure against a
+\&\s-1SSL 3.0/TLS 1.0\s0 protocol vulnerability affecting \s-1CBC\s0 ciphers. It
+is set by default. Inverse of \fB\s-1SSL_OP_DONT_INSERT_EMPTY_FRAGMENTS\s0\fR.
+.Sp
+\&\fBBugs\fR: enable various bug workarounds. Same as \fB\s-1SSL_OP_ALL\s0\fR.
+.Sp
+\&\fBDHSingle\fR: enable single use \s-1DH\s0 keys, set by default. Inverse of
+\&\fB\s-1SSL_OP_DH_SINGLE\s0\fR. Only used by servers.
+.Sp
+\&\fBECDHSingle\fR enable single use \s-1ECDH\s0 keys, set by default. Inverse of
+\&\fB\s-1SSL_OP_ECDH_SINGLE\s0\fR. Only used by servers.
+.Sp
+\&\fBServerPreference\fR use server and not client preference order when
+determining which cipher suite, signature algorithm or elliptic curve
+to use for an incoming connection. Equivalent to
+\&\fB\s-1SSL_OP_CIPHER_SERVER_PREFERENCE\s0\fR. Only used by servers.
+.Sp
+\&\fBNoResumptionOnRenegotiation\fR set
+\&\fB\s-1SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION\s0\fR flag. Only used by servers.
+.Sp
+\&\fBUnsafeLegacyRenegotiation\fR permits the use of unsafe legacy renegotiation.
+Equivalent to \fB\s-1SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION\s0\fR.
+.Sp
+\&\fBUnsafeLegacyServerConnect\fR permits the use of unsafe legacy renegotiation
+for OpenSSL clients only. Equivalent to \fB\s-1SSL_OP_LEGACY_SERVER_CONNECT\s0\fR.
+Set by default.
+.SH "SUPPORTED COMMAND TYPES"
+.IX Header "SUPPORTED COMMAND TYPES"
+The function \fISSL_CONF_cmd_value_type()\fR currently returns one of the following
+types:
+.IP "\fB\s-1SSL_CONF_TYPE_UNKNOWN\s0\fR" 4
+.IX Item "SSL_CONF_TYPE_UNKNOWN"
+The \fBcmd\fR string is unrecognised, this return value can be use to flag
+syntax errors.
+.IP "\fB\s-1SSL_CONF_TYPE_STRING\s0\fR" 4
+.IX Item "SSL_CONF_TYPE_STRING"
+The value is a string without any specific structure.
+.IP "\fB\s-1SSL_CONF_TYPE_FILE\s0\fR" 4
+.IX Item "SSL_CONF_TYPE_FILE"
+The value is a file name.
+.IP "\fB\s-1SSL_CONF_TYPE_DIR\s0\fR" 4
+.IX Item "SSL_CONF_TYPE_DIR"
+The value is a directory name.
+.SH "NOTES"
+.IX Header "NOTES"
+The order of operations is significant. This can be used to set either defaults
+or values which cannot be overridden. For example if an application calls:
+.PP
+.Vb 2
+\& SSL_CONF_cmd(ctx, "Protocol", "\-SSLv2");
+\& SSL_CONF_cmd(ctx, userparam, uservalue);
+.Ve
+.PP
+it will disable SSLv2 support by default but the user can override it. If
+however the call sequence is:
+.PP
+.Vb 2
+\& SSL_CONF_cmd(ctx, userparam, uservalue);
+\& SSL_CONF_cmd(ctx, "Protocol", "\-SSLv2");
+.Ve
+.PP
+SSLv2 is \fBalways\fR disabled and attempt to override this by the user are
+ignored.
+.PP
+By checking the return code of \fISSL_CTX_cmd()\fR it is possible to query if a
+given \fBcmd\fR is recognised, this is useful is \fISSL_CTX_cmd()\fR values are
+mixed with additional application specific operations.
+.PP
+For example an application might call \fISSL_CTX_cmd()\fR and if it returns
+\&\-2 (unrecognised command) continue with processing of application specific
+commands.
+.PP
+Applications can also use \fISSL_CTX_cmd()\fR to process command lines though the
+utility function \fISSL_CTX_cmd_argv()\fR is normally used instead. One way
+to do this is to set the prefix to an appropriate value using
+\&\fISSL_CONF_CTX_set1_prefix()\fR, pass the current argument to \fBcmd\fR and the
+following argument to \fBvalue\fR (which may be \s-1NULL\s0).
+.PP
+In this case if the return value is positive then it is used to skip that
+number of arguments as they have been processed by \fISSL_CTX_cmd()\fR. If \-2 is
+returned then \fBcmd\fR is not recognised and application specific arguments
+can be checked instead. If \-3 is returned a required argument is missing
+and an error is indicated. If 0 is returned some other error occurred and
+this can be reported back to the user.
+.PP
+The function \fISSL_CONF_cmd_value_type()\fR can be used by applications to
+check for the existence of a command or to perform additional syntax
+checking or translation of the command value. For example if the return
+value is \fB\s-1SSL_CONF_TYPE_FILE\s0\fR an application could translate a relative
+pathname to an absolute pathname.
+.SH "EXAMPLES"
+.IX Header "EXAMPLES"
+Set supported signature algorithms:
+.PP
+.Vb 1
+\& SSL_CONF_cmd(ctx, "SignatureAlgorithms", "ECDSA+SHA256:RSA+SHA256:DSA+SHA256");
+.Ve
+.PP
+Enable all protocols except SSLv3 and SSLv2:
+.PP
+.Vb 1
+\& SSL_CONF_cmd(ctx, "Protocol", "ALL,\-SSLv3,\-SSLv2");
+.Ve
+.PP
+Only enable TLSv1.2:
+.PP
+.Vb 1
+\& SSL_CONF_cmd(ctx, "Protocol", "\-ALL,TLSv1.2");
+.Ve
+.PP
+Disable \s-1TLS\s0 session tickets:
+.PP
+.Vb 1
+\& SSL_CONF_cmd(ctx, "Options", "\-SessionTicket");
+.Ve
+.PP
+Set supported curves to P\-256, P\-384:
+.PP
+.Vb 1
+\& SSL_CONF_cmd(ctx, "Curves", "P\-256:P\-384");
+.Ve
+.PP
+Set automatic support for any elliptic curve for key exchange:
+.PP
+.Vb 1
+\& SSL_CONF_cmd(ctx, "ECDHParameters", "Automatic");
+.Ve
+.SH "RETURN VALUES"
+.IX Header "RETURN VALUES"
+\&\fISSL_CONF_cmd()\fR returns 1 if the value of \fBcmd\fR is recognised and \fBvalue\fR is
+\&\fB\s-1NOT\s0\fR used and 2 if both \fBcmd\fR and \fBvalue\fR are used. In other words it
+returns the number of arguments processed. This is useful when processing
+command lines.
+.PP
+A return value of \-2 means \fBcmd\fR is not recognised.
+.PP
+A return value of \-3 means \fBcmd\fR is recognised and the command requires a
+value but \fBvalue\fR is \s-1NULL.\s0
+.PP
+A return code of 0 indicates that both \fBcmd\fR and \fBvalue\fR are valid but an
+error occurred attempting to perform the operation: for example due to an
+error in the syntax of \fBvalue\fR in this case the error queue may provide
+additional information.
+.PP
+\&\fISSL_CONF_finish()\fR returns 1 for success and 0 for failure.
+.SH "SEE ALSO"
+.IX Header "SEE ALSO"
+\&\fISSL_CONF_CTX_new\fR\|(3),
+\&\fISSL_CONF_CTX_set_flags\fR\|(3),
+\&\fISSL_CONF_CTX_set1_prefix\fR\|(3),
+\&\fISSL_CONF_CTX_set_ssl_ctx\fR\|(3),
+\&\fISSL_CONF_cmd_argv\fR\|(3)
+.SH "HISTORY"
+.IX Header "HISTORY"
+\&\fISSL_CONF_cmd()\fR was first added to OpenSSL 1.0.2
diff --git a/secure/lib/libssl/man/SSL_CONF_cmd_argv.3 b/secure/lib/libssl/man/SSL_CONF_cmd_argv.3
new file mode 100644
index 0000000..377eaac
--- /dev/null
+++ b/secure/lib/libssl/man/SSL_CONF_cmd_argv.3
@@ -0,0 +1,174 @@
+.\" Automatically generated by Pod::Man 2.28 (Pod::Simple 3.30)
+.\"
+.\" Standard preamble:
+.\" ========================================================================
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Vb \" Begin verbatim text
+.ft CW
+.nf
+.ne \\$1
+..
+.de Ve \" End verbatim text
+.ft R
+.fi
+..
+.\" Set up some character translations and predefined strings. \*(-- will
+.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
+.\" double quote, and \*(R" will give a right double quote. \*(C+ will
+.\" give a nicer C++. Capital omega is used to do unbreakable dashes and
+.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff,
+.\" nothing in troff, for use with C<>.
+.tr \(*W-
+.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
+.ie n \{\
+. ds -- \(*W-
+. ds PI pi
+. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
+. ds L" ""
+. ds R" ""
+. ds C` ""
+. ds C' ""
+'br\}
+.el\{\
+. ds -- \|\(em\|
+. ds PI \(*p
+. ds L" ``
+. ds R" ''
+. ds C`
+. ds C'
+'br\}
+.\"
+.\" Escape single quotes in literal strings from groff's Unicode transform.
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\"
+.\" If the F register is turned on, we'll generate index entries on stderr for
+.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
+.\" entries marked with X<> in POD. Of course, you'll have to process the
+.\" output yourself in some meaningful fashion.
+.\"
+.\" Avoid warning from groff about undefined register 'F'.
+.de IX
+..
+.nr rF 0
+.if \n(.g .if rF .nr rF 1
+.if (\n(rF:(\n(.g==0)) \{
+. if \nF \{
+. de IX
+. tm Index:\\$1\t\\n%\t"\\$2"
+..
+. if !\nF==2 \{
+. nr % 0
+. nr F 2
+. \}
+. \}
+.\}
+.rr rF
+.\"
+.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
+.\" Fear. Run. Save yourself. No user-serviceable parts.
+. \" fudge factors for nroff and troff
+.if n \{\
+. ds #H 0
+. ds #V .8m
+. ds #F .3m
+. ds #[ \f1
+. ds #] \fP
+.\}
+.if t \{\
+. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+. ds #V .6m
+. ds #F 0
+. ds #[ \&
+. ds #] \&
+.\}
+. \" simple accents for nroff and troff
+.if n \{\
+. ds ' \&
+. ds ` \&
+. ds ^ \&
+. ds , \&
+. ds ~ ~
+. ds /
+.\}
+.if t \{\
+. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
+.\}
+. \" troff and (daisy-wheel) nroff accents
+.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
+.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
+.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
+.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
+.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
+.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
+.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
+.ds ae a\h'-(\w'a'u*4/10)'e
+.ds Ae A\h'-(\w'A'u*4/10)'E
+. \" corrections for vroff
+.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
+.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
+. \" for low resolution devices (crt and lpr)
+.if \n(.H>23 .if \n(.V>19 \
+\{\
+. ds : e
+. ds 8 ss
+. ds o a
+. ds d- d\h'-1'\(ga
+. ds D- D\h'-1'\(hy
+. ds th \o'bp'
+. ds Th \o'LP'
+. ds ae ae
+. ds Ae AE
+.\}
+.rm #[ #] #H #V #F C
+.\" ========================================================================
+.\"
+.IX Title "SSL_CONF_cmd_argv 3"
+.TH SSL_CONF_cmd_argv 3 "2015-07-09" "1.0.2d" "OpenSSL"
+.\" For nroff, turn off justification. Always turn off hyphenation; it makes
+.\" way too many mistakes in technical documents.
+.if n .ad l
+.nh
+.SH "NAME"
+SSL_CONF_cmd_argv \- SSL configuration command line processing.
+.SH "SYNOPSIS"
+.IX Header "SYNOPSIS"
+.Vb 1
+\& #include <openssl/ssl.h>
+\&
+\& int SSL_CONF_cmd_argv(SSL_CONF_CTX *cctx, int *pargc, char ***pargv);
+.Ve
+.SH "DESCRIPTION"
+.IX Header "DESCRIPTION"
+The function \fISSL_CONF_cmd_argv()\fR processes at most two command line
+arguments from \fBpargv\fR and \fBpargc\fR. The values of \fBpargv\fR and \fBpargc\fR
+are updated to reflect the number of command options processed. The \fBpargc\fR
+argument can be set to \fB\s-1NULL\s0\fR is it is not used.
+.SH "RETURN VALUES"
+.IX Header "RETURN VALUES"
+\&\fISSL_CONF_cmd_argv()\fR returns the number of command arguments processed: 0, 1, 2
+or a negative error code.
+.PP
+If \-2 is returned then an argument for a command is missing.
+.PP
+If \-1 is returned the command is recognised but couldn't be processed due
+to an error: for example a syntax error in the argument.
+.SH "SEE ALSO"
+.IX Header "SEE ALSO"
+\&\fISSL_CONF_CTX_new\fR\|(3),
+\&\fISSL_CONF_CTX_set_flags\fR\|(3),
+\&\fISSL_CONF_CTX_set1_prefix\fR\|(3),
+\&\fISSL_CONF_CTX_set_ssl_ctx\fR\|(3),
+\&\fISSL_CONF_cmd\fR\|(3)
+.SH "HISTORY"
+.IX Header "HISTORY"
+These functions were first added to OpenSSL 1.0.2
diff --git a/secure/lib/libssl/man/SSL_CTX_add1_chain_cert.3 b/secure/lib/libssl/man/SSL_CTX_add1_chain_cert.3
new file mode 100644
index 0000000..c4fb8ea
--- /dev/null
+++ b/secure/lib/libssl/man/SSL_CTX_add1_chain_cert.3
@@ -0,0 +1,280 @@
+.\" Automatically generated by Pod::Man 2.28 (Pod::Simple 3.30)
+.\"
+.\" Standard preamble:
+.\" ========================================================================
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Vb \" Begin verbatim text
+.ft CW
+.nf
+.ne \\$1
+..
+.de Ve \" End verbatim text
+.ft R
+.fi
+..
+.\" Set up some character translations and predefined strings. \*(-- will
+.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
+.\" double quote, and \*(R" will give a right double quote. \*(C+ will
+.\" give a nicer C++. Capital omega is used to do unbreakable dashes and
+.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff,
+.\" nothing in troff, for use with C<>.
+.tr \(*W-
+.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
+.ie n \{\
+. ds -- \(*W-
+. ds PI pi
+. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
+. ds L" ""
+. ds R" ""
+. ds C` ""
+. ds C' ""
+'br\}
+.el\{\
+. ds -- \|\(em\|
+. ds PI \(*p
+. ds L" ``
+. ds R" ''
+. ds C`
+. ds C'
+'br\}
+.\"
+.\" Escape single quotes in literal strings from groff's Unicode transform.
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\"
+.\" If the F register is turned on, we'll generate index entries on stderr for
+.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
+.\" entries marked with X<> in POD. Of course, you'll have to process the
+.\" output yourself in some meaningful fashion.
+.\"
+.\" Avoid warning from groff about undefined register 'F'.
+.de IX
+..
+.nr rF 0
+.if \n(.g .if rF .nr rF 1
+.if (\n(rF:(\n(.g==0)) \{
+. if \nF \{
+. de IX
+. tm Index:\\$1\t\\n%\t"\\$2"
+..
+. if !\nF==2 \{
+. nr % 0
+. nr F 2
+. \}
+. \}
+.\}
+.rr rF
+.\"
+.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
+.\" Fear. Run. Save yourself. No user-serviceable parts.
+. \" fudge factors for nroff and troff
+.if n \{\
+. ds #H 0
+. ds #V .8m
+. ds #F .3m
+. ds #[ \f1
+. ds #] \fP
+.\}
+.if t \{\
+. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+. ds #V .6m
+. ds #F 0
+. ds #[ \&
+. ds #] \&
+.\}
+. \" simple accents for nroff and troff
+.if n \{\
+. ds ' \&
+. ds ` \&
+. ds ^ \&
+. ds , \&
+. ds ~ ~
+. ds /
+.\}
+.if t \{\
+. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
+.\}
+. \" troff and (daisy-wheel) nroff accents
+.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
+.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
+.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
+.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
+.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
+.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
+.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
+.ds ae a\h'-(\w'a'u*4/10)'e
+.ds Ae A\h'-(\w'A'u*4/10)'E
+. \" corrections for vroff
+.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
+.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
+. \" for low resolution devices (crt and lpr)
+.if \n(.H>23 .if \n(.V>19 \
+\{\
+. ds : e
+. ds 8 ss
+. ds o a
+. ds d- d\h'-1'\(ga
+. ds D- D\h'-1'\(hy
+. ds th \o'bp'
+. ds Th \o'LP'
+. ds ae ae
+. ds Ae AE
+.\}
+.rm #[ #] #H #V #F C
+.\" ========================================================================
+.\"
+.IX Title "SSL_CTX_add1_chain_cert 3"
+.TH SSL_CTX_add1_chain_cert 3 "2015-07-09" "1.0.2d" "OpenSSL"
+.\" For nroff, turn off justification. Always turn off hyphenation; it makes
+.\" way too many mistakes in technical documents.
+.if n .ad l
+.nh
+.SH "NAME"
+SSL_CTX_set0_chain, SSL_CTX_set1_chain, SSL_CTX_add0_chain_cert,
+SSL_CTX_add1_chain_cert, SSL_CTX_get0_chain_certs, SSL_CTX_clear_chain_certs,
+SSL_set0_chain, SSL_set1_chain, SSL_add0_chain_cert, SSL_add1_chain_cert,
+SSL_get0_chain_certs, SSL_clear_chain_certs, SSL_CTX_build_cert_chain,
+SSL_build_cert_chain, SSL_CTX_select_current_cert,
+SSL_select_current_cert, SSL_CTX_set_current_cert, SSL_set_current_cert \- extra
+chain certificate processing
+.SH "SYNOPSIS"
+.IX Header "SYNOPSIS"
+.Vb 1
+\& #include <openssl/ssl.h>
+\&
+\& int SSL_CTX_set0_chain(SSL_CTX *ctx, STACK_OF(X509) *sk);
+\& int SSL_CTX_set1_chain(SSL_CTX *ctx, STACK_OF(X509) *sk);
+\& int SSL_CTX_add0_chain_cert(SSL_CTX *ctx, X509 *x509);
+\& int SSL_CTX_add1_chain_cert(SSL_CTX *ctx, X509 *x509);
+\& int SSL_CTX_get0_chain_certs(SSL_CTX *ctx, STACK_OF(X509) **sk);
+\& int SSL_CTX_clear_chain_certs(SSL_CTX *ctx);
+\&
+\& int SSL_set0_chain(SSL *ssl, STACK_OF(X509) *sk);
+\& int SSL_set1_chain(SSL *ssl, STACK_OF(X509) *sk);
+\& int SSL_add0_chain_cert(SSL *ssl, X509 *x509);
+\& int SSL_add1_chain_cert(SSL *ssl, X509 *x509);
+\& int SSL_get0_chain_certs(SSL *ssl, STACK_OF(X509) **sk);
+\& int SSL_clear_chain_certs(SSL *ssl);
+\&
+\& int SSL_CTX_build_cert_chain(SSL_CTX *ctx, flags);
+\& int SSL_build_cert_chain(SSL *ssl, flags);
+\&
+\& int SSL_CTX_select_current_cert(SSL_CTX *ctx, X509 *x509);
+\& int SSL_select_current_cert(SSL *ssl, X509 *x509);
+\& int SSL_CTX_set_current_cert(SSL_CTX *ctx, long op);
+\& int SSL_set_current_cert(SSL *ssl, long op);
+.Ve
+.SH "DESCRIPTION"
+.IX Header "DESCRIPTION"
+\&\fISSL_CTX_set0_chain()\fR and \fISSL_CTX_set1_chain()\fR set the certificate chain
+associated with the current certificate of \fBctx\fR to \fBsk\fR.
+.PP
+\&\fISSL_CTX_add0_chain_cert()\fR and \fISSL_CTX_add1_chain_cert()\fR append the single
+certificate \fBx509\fR to the chain associated with the current certificate of
+\&\fBctx\fR.
+.PP
+\&\fISSL_CTX_get0_chain_certs()\fR retrieves the chain associated with the current
+certificate of \fBctx\fR.
+.PP
+\&\fISSL_CTX_clear_chain_certs()\fR clears any existing chain associated with the
+current certificate of \fBctx\fR. (This is implemented by calling
+\&\fISSL_CTX_set0_chain()\fR with \fBsk\fR set to \fB\s-1NULL\s0\fR).
+.PP
+\&\fISSL_CTX_build_cert_chain()\fR builds the certificate chain for \fBctx\fR normally
+this uses the chain store or the verify store if the chain store is not set.
+If the function is successful the built chain will replace any existing chain.
+The \fBflags\fR parameter can be set to \fB\s-1SSL_BUILD_CHAIN_FLAG_UNTRUSTED\s0\fR to use
+existing chain certificates as untrusted CAs, \fB\s-1SSL_BUILD_CHAIN_FLAG_NO_ROOT\s0\fR
+to omit the root \s-1CA\s0 from the built chain, \fB\s-1SSL_BUILD_CHAIN_FLAG_CHECK\s0\fR to
+use all existing chain certificates only to build the chain (effectively
+sanity checking and rearranging them if necessary), the flag
+\&\fB\s-1SSL_BUILD_CHAIN_FLAG_IGNORE_ERROR\s0\fR ignores any errors during verification:
+if flag \fB\s-1SSL_BUILD_CHAIN_FLAG_CLEAR_ERROR\s0\fR is also set verification errors
+are cleared from the error queue.
+.PP
+Each of these functions operates on the \fIcurrent\fR end entity
+(i.e. server or client) certificate. This is the last certificate loaded or
+selected on the corresponding \fBctx\fR structure.
+.PP
+\&\fISSL_CTX_select_current_cert()\fR selects \fBx509\fR as the current end entity
+certificate, but only if \fBx509\fR has already been loaded into \fBctx\fR using a
+function such as \fISSL_CTX_use_certificate()\fR.
+.PP
+\&\fISSL_set0_chain()\fR, \fISSL_set1_chain()\fR, \fISSL_add0_chain_cert()\fR,
+\&\fISSL_add1_chain_cert()\fR, \fISSL_get0_chain_certs()\fR, \fISSL_clear_chain_certs()\fR,
+\&\fISSL_build_cert_chain()\fR, \fISSL_select_current_cert()\fR and \fISSL_set_current_cert()\fR
+are similar except they apply to \s-1SSL\s0 structure \fBssl\fR.
+.PP
+\&\fISSL_CTX_set_current_cert()\fR changes the current certificate to a value based
+on the \fBop\fR argument. Currently \fBop\fR can be \fB\s-1SSL_CERT_SET_FIRST\s0\fR to use
+the first valid certificate or \fB\s-1SSL_CERT_SET_NEXT\s0\fR to set the next valid
+certificate after the current certificate. These two operations can be
+used to iterate over all certificates in an \fB\s-1SSL_CTX\s0\fR structure.
+.PP
+\&\fISSL_set_current_cert()\fR also supports the option \fB\s-1SSL_CERT_SET_SERVER\s0\fR.
+If \fBssl\fR is a server and has sent a certificate to a connected client
+this option sets that certificate to the current certificate and returns 1.
+If the negotiated ciphersuite is anonymous (and thus no certificate will
+be sent) 2 is returned and the current certificate is unchanged. If \fBssl\fR
+is not a server or a certificate has not been sent 0 is returned and
+the current certificate is unchanged.
+.PP
+All these functions are implemented as macros. Those containing a \fB1\fR
+increment the reference count of the supplied certificate or chain so it must
+be freed at some point after the operation. Those containing a \fB0\fR do
+not increment reference counts and the supplied certificate or chain
+\&\fB\s-1MUST NOT\s0\fR be freed after the operation.
+.SH "NOTES"
+.IX Header "NOTES"
+The chains associate with an \s-1SSL_CTX\s0 structure are copied to any \s-1SSL\s0
+structures when \fISSL_new()\fR is called. \s-1SSL\s0 structures will not be affected
+by any chains subsequently changed in the parent \s-1SSL_CTX.\s0
+.PP
+One chain can be set for each key type supported by a server. So, for example,
+an \s-1RSA\s0 and a \s-1DSA\s0 certificate can (and often will) have different chains.
+.PP
+The functions \fISSL_CTX_build_cert_chain()\fR and \fISSL_build_cert_chain()\fR can
+be used to check application configuration and to ensure any necessary
+subordinate CAs are sent in the correct order. Misconfigured applications
+sending incorrect certificate chains often cause problems with peers.
+.PP
+For example an application can add any set of certificates using
+\&\fISSL_CTX_use_certificate_chain_file()\fR then call \fISSL_CTX_build_cert_chain()\fR
+with the option \fB\s-1SSL_BUILD_CHAIN_FLAG_CHECK\s0\fR to check and reorder them.
+.PP
+Applications can issue non fatal warnings when checking chains by setting
+the flag \fB\s-1SSL_BUILD_CHAIN_FLAG_IGNORE_ERRORS\s0\fR and checking the return
+value.
+.PP
+Calling \fISSL_CTX_build_cert_chain()\fR or \fISSL_build_cert_chain()\fR is more
+efficient than the automatic chain building as it is only performed once.
+Automatic chain building is performed on each new session.
+.PP
+If any certificates are added using these functions no certificates added
+using \fISSL_CTX_add_extra_chain_cert()\fR will be used.
+.SH "RETURN VALUES"
+.IX Header "RETURN VALUES"
+\&\fISSL_set_current_cert()\fR with \fB\s-1SSL_CERT_SET_SERVER\s0\fR return 1 for success, 2 if
+no server certificate is used because the ciphersuites is anonymous and 0
+for failure.
+.PP
+\&\fISSL_CTX_build_cert_chain()\fR and \fISSL_build_cert_chain()\fR return 1 for success
+and 0 for failure. If the flag \fB\s-1SSL_BUILD_CHAIN_FLAG_IGNORE_ERROR\s0\fR and
+a verification error occurs then 2 is returned.
+.PP
+All other functions return 1 for success and 0 for failure.
+.SH "SEE ALSO"
+.IX Header "SEE ALSO"
+\&\fISSL_CTX_add_extra_chain_cert\fR\|(3)
+.SH "HISTORY"
+.IX Header "HISTORY"
+These functions were first added to OpenSSL 1.0.2.
diff --git a/secure/lib/libssl/man/SSL_CTX_add_extra_chain_cert.3 b/secure/lib/libssl/man/SSL_CTX_add_extra_chain_cert.3
index aba4756..fcaf811 100644
--- a/secure/lib/libssl/man/SSL_CTX_add_extra_chain_cert.3
+++ b/secure/lib/libssl/man/SSL_CTX_add_extra_chain_cert.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "SSL_CTX_add_extra_chain_cert 3"
-.TH SSL_CTX_add_extra_chain_cert 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH SSL_CTX_add_extra_chain_cert 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
@@ -167,7 +167,8 @@ Only one set of extra chain certificates can be specified per \s-1SSL_CTX\s0
structure. Different chains for different certificates (for example if both
\&\s-1RSA\s0 and \s-1DSA\s0 certificates are specified by the same server) or different \s-1SSL\s0
structures with the same parent \s-1SSL_CTX\s0 cannot be specified using this
-function.
+function. For more flexibility functions such as \fISSL_add1_chain_cert()\fR should
+be used instead.
.SH "RETURN VALUES"
.IX Header "RETURN VALUES"
\&\fISSL_CTX_add_extra_chain_cert()\fR returns 1 on success. Check out the
@@ -178,3 +179,13 @@ error stack to find out the reason for failure otherwise.
\&\fISSL_CTX_use_certificate\fR\|(3),
\&\fISSL_CTX_set_client_cert_cb\fR\|(3),
\&\fISSL_CTX_load_verify_locations\fR\|(3)
+\&\fISSL_CTX_set0_chain\fR\|(3)
+\&\fISSL_CTX_set1_chain\fR\|(3)
+\&\fISSL_CTX_add0_chain_cert\fR\|(3)
+\&\fISSL_CTX_add1_chain_cert\fR\|(3)
+\&\fISSL_set0_chain\fR\|(3)
+\&\fISSL_set1_chain\fR\|(3)
+\&\fISSL_add0_chain_cert\fR\|(3)
+\&\fISSL_add1_chain_cert\fR\|(3)
+\&\fISSL_CTX_build_cert_chain\fR\|(3)
+\&\fISSL_build_cert_chain\fR\|(3)
diff --git a/secure/lib/libssl/man/SSL_CTX_add_session.3 b/secure/lib/libssl/man/SSL_CTX_add_session.3
index 5215c74..4a3b113 100644
--- a/secure/lib/libssl/man/SSL_CTX_add_session.3
+++ b/secure/lib/libssl/man/SSL_CTX_add_session.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "SSL_CTX_add_session 3"
-.TH SSL_CTX_add_session 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH SSL_CTX_add_session 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libssl/man/SSL_CTX_ctrl.3 b/secure/lib/libssl/man/SSL_CTX_ctrl.3
index b74fd36..74d9683 100644
--- a/secure/lib/libssl/man/SSL_CTX_ctrl.3
+++ b/secure/lib/libssl/man/SSL_CTX_ctrl.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "SSL_CTX_ctrl 3"
-.TH SSL_CTX_ctrl 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH SSL_CTX_ctrl 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libssl/man/SSL_CTX_flush_sessions.3 b/secure/lib/libssl/man/SSL_CTX_flush_sessions.3
index 671ad58..1bc8b52 100644
--- a/secure/lib/libssl/man/SSL_CTX_flush_sessions.3
+++ b/secure/lib/libssl/man/SSL_CTX_flush_sessions.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "SSL_CTX_flush_sessions 3"
-.TH SSL_CTX_flush_sessions 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH SSL_CTX_flush_sessions 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libssl/man/SSL_CTX_free.3 b/secure/lib/libssl/man/SSL_CTX_free.3
index b627fc9..7df44e9 100644
--- a/secure/lib/libssl/man/SSL_CTX_free.3
+++ b/secure/lib/libssl/man/SSL_CTX_free.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "SSL_CTX_free 3"
-.TH SSL_CTX_free 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH SSL_CTX_free 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libssl/man/SSL_CTX_get0_param.3 b/secure/lib/libssl/man/SSL_CTX_get0_param.3
new file mode 100644
index 0000000..6e1eb27
--- /dev/null
+++ b/secure/lib/libssl/man/SSL_CTX_get0_param.3
@@ -0,0 +1,187 @@
+.\" Automatically generated by Pod::Man 2.28 (Pod::Simple 3.30)
+.\"
+.\" Standard preamble:
+.\" ========================================================================
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Vb \" Begin verbatim text
+.ft CW
+.nf
+.ne \\$1
+..
+.de Ve \" End verbatim text
+.ft R
+.fi
+..
+.\" Set up some character translations and predefined strings. \*(-- will
+.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
+.\" double quote, and \*(R" will give a right double quote. \*(C+ will
+.\" give a nicer C++. Capital omega is used to do unbreakable dashes and
+.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff,
+.\" nothing in troff, for use with C<>.
+.tr \(*W-
+.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
+.ie n \{\
+. ds -- \(*W-
+. ds PI pi
+. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
+. ds L" ""
+. ds R" ""
+. ds C` ""
+. ds C' ""
+'br\}
+.el\{\
+. ds -- \|\(em\|
+. ds PI \(*p
+. ds L" ``
+. ds R" ''
+. ds C`
+. ds C'
+'br\}
+.\"
+.\" Escape single quotes in literal strings from groff's Unicode transform.
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\"
+.\" If the F register is turned on, we'll generate index entries on stderr for
+.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
+.\" entries marked with X<> in POD. Of course, you'll have to process the
+.\" output yourself in some meaningful fashion.
+.\"
+.\" Avoid warning from groff about undefined register 'F'.
+.de IX
+..
+.nr rF 0
+.if \n(.g .if rF .nr rF 1
+.if (\n(rF:(\n(.g==0)) \{
+. if \nF \{
+. de IX
+. tm Index:\\$1\t\\n%\t"\\$2"
+..
+. if !\nF==2 \{
+. nr % 0
+. nr F 2
+. \}
+. \}
+.\}
+.rr rF
+.\"
+.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
+.\" Fear. Run. Save yourself. No user-serviceable parts.
+. \" fudge factors for nroff and troff
+.if n \{\
+. ds #H 0
+. ds #V .8m
+. ds #F .3m
+. ds #[ \f1
+. ds #] \fP
+.\}
+.if t \{\
+. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+. ds #V .6m
+. ds #F 0
+. ds #[ \&
+. ds #] \&
+.\}
+. \" simple accents for nroff and troff
+.if n \{\
+. ds ' \&
+. ds ` \&
+. ds ^ \&
+. ds , \&
+. ds ~ ~
+. ds /
+.\}
+.if t \{\
+. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
+.\}
+. \" troff and (daisy-wheel) nroff accents
+.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
+.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
+.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
+.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
+.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
+.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
+.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
+.ds ae a\h'-(\w'a'u*4/10)'e
+.ds Ae A\h'-(\w'A'u*4/10)'E
+. \" corrections for vroff
+.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
+.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
+. \" for low resolution devices (crt and lpr)
+.if \n(.H>23 .if \n(.V>19 \
+\{\
+. ds : e
+. ds 8 ss
+. ds o a
+. ds d- d\h'-1'\(ga
+. ds D- D\h'-1'\(hy
+. ds th \o'bp'
+. ds Th \o'LP'
+. ds ae ae
+. ds Ae AE
+.\}
+.rm #[ #] #H #V #F C
+.\" ========================================================================
+.\"
+.IX Title "SSL_CTX_get0_param 3"
+.TH SSL_CTX_get0_param 3 "2015-07-09" "1.0.2d" "OpenSSL"
+.\" For nroff, turn off justification. Always turn off hyphenation; it makes
+.\" way too many mistakes in technical documents.
+.if n .ad l
+.nh
+.SH "NAME"
+SSL_CTX_get0_param, SSL_get0_param, SSL_CTX_set1_param, SSL_set1_param \-
+get and set verification parameters
+.SH "SYNOPSIS"
+.IX Header "SYNOPSIS"
+.Vb 1
+\& #include <openssl/ssl.h>
+\&
+\& X509_VERIFY_PARAM *SSL_CTX_get0_param(SSL_CTX *ctx)
+\& X509_VERIFY_PARAM *SSL_get0_param(SSL *ssl)
+\& int SSL_CTX_set1_param(SSL_CTX *ctx, X509_VERIFY_PARAM *vpm)
+\& int SSL_set1_param(SSL *ssl, X509_VERIFY_PARAM *vpm)
+.Ve
+.SH "DESCRIPTION"
+.IX Header "DESCRIPTION"
+\&\fISSL_CTX_get0_param()\fR and \fISSL_get0_param()\fR retrieve an internal pointer to
+the verification parameters for \fBctx\fR or \fBssl\fR respectively. The returned
+pointer must not be freed by the calling application.
+.PP
+\&\fISSL_CTX_set1_param()\fR and \fISSL_set1_param()\fR set the verification parameters
+to \fBvpm\fR for \fBctx\fR or \fBssl\fR.
+.SH "NOTES"
+.IX Header "NOTES"
+Typically parameters are retrieved from an \fB\s-1SSL_CTX\s0\fR or \fB\s-1SSL\s0\fR structure
+using \fISSL_CTX_get0_param()\fR or \fISSL_get0_param()\fR and an application modifies
+them to suit its needs: for example to add a hostname check.
+.SH "EXAMPLE"
+.IX Header "EXAMPLE"
+Check hostname matches \*(L"www.foo.com\*(R" in peer certificate:
+.PP
+.Vb 2
+\& X509_VERIFY_PARAM *vpm = SSL_get0_param(ssl);
+\& X509_VERIFY_PARAM_set1_host(vpm, "www.foo.com");
+.Ve
+.SH "RETURN VALUES"
+.IX Header "RETURN VALUES"
+\&\fISSL_CTX_get0_param()\fR and \fISSL_get0_param()\fR return a pointer to an
+\&\fBX509_VERIFY_PARAM\fR structure.
+.PP
+\&\fISSL_CTX_set1_param()\fR and \fISSL_set1_param()\fR return 1 for success and 0
+for failure.
+.SH "SEE ALSO"
+.IX Header "SEE ALSO"
+\&\fIX509_VERIFY_PARAM_set_flags\fR\|(3)
+.SH "HISTORY"
+.IX Header "HISTORY"
+These functions were first added to OpenSSL 1.0.2.
diff --git a/secure/lib/libssl/man/SSL_CTX_get_ex_new_index.3 b/secure/lib/libssl/man/SSL_CTX_get_ex_new_index.3
index f8ebb59..5dd1820 100644
--- a/secure/lib/libssl/man/SSL_CTX_get_ex_new_index.3
+++ b/secure/lib/libssl/man/SSL_CTX_get_ex_new_index.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "SSL_CTX_get_ex_new_index 3"
-.TH SSL_CTX_get_ex_new_index 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH SSL_CTX_get_ex_new_index 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libssl/man/SSL_CTX_get_verify_mode.3 b/secure/lib/libssl/man/SSL_CTX_get_verify_mode.3
index 0169da7..be53503 100644
--- a/secure/lib/libssl/man/SSL_CTX_get_verify_mode.3
+++ b/secure/lib/libssl/man/SSL_CTX_get_verify_mode.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "SSL_CTX_get_verify_mode 3"
-.TH SSL_CTX_get_verify_mode 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH SSL_CTX_get_verify_mode 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libssl/man/SSL_CTX_load_verify_locations.3 b/secure/lib/libssl/man/SSL_CTX_load_verify_locations.3
index ac1ebcf..5942be4 100644
--- a/secure/lib/libssl/man/SSL_CTX_load_verify_locations.3
+++ b/secure/lib/libssl/man/SSL_CTX_load_verify_locations.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "SSL_CTX_load_verify_locations 3"
-.TH SSL_CTX_load_verify_locations 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH SSL_CTX_load_verify_locations 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libssl/man/SSL_CTX_new.3 b/secure/lib/libssl/man/SSL_CTX_new.3
index 1395429..f81b32f 100644
--- a/secure/lib/libssl/man/SSL_CTX_new.3
+++ b/secure/lib/libssl/man/SSL_CTX_new.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "SSL_CTX_new 3"
-.TH SSL_CTX_new 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH SSL_CTX_new 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libssl/man/SSL_CTX_sess_number.3 b/secure/lib/libssl/man/SSL_CTX_sess_number.3
index d980b8b..2f8194b 100644
--- a/secure/lib/libssl/man/SSL_CTX_sess_number.3
+++ b/secure/lib/libssl/man/SSL_CTX_sess_number.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "SSL_CTX_sess_number 3"
-.TH SSL_CTX_sess_number 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH SSL_CTX_sess_number 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libssl/man/SSL_CTX_sess_set_cache_size.3 b/secure/lib/libssl/man/SSL_CTX_sess_set_cache_size.3
index 8bf5a0f..32a5ecc 100644
--- a/secure/lib/libssl/man/SSL_CTX_sess_set_cache_size.3
+++ b/secure/lib/libssl/man/SSL_CTX_sess_set_cache_size.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "SSL_CTX_sess_set_cache_size 3"
-.TH SSL_CTX_sess_set_cache_size 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH SSL_CTX_sess_set_cache_size 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
@@ -152,6 +152,7 @@ SSL_CTX_sess_set_cache_size, SSL_CTX_sess_get_cache_size \- manipulate session c
.IX Header "DESCRIPTION"
\&\fISSL_CTX_sess_set_cache_size()\fR sets the size of the internal session cache
of context \fBctx\fR to \fBt\fR.
+This value is a hint and not an absolute; see the notes below.
.PP
\&\fISSL_CTX_sess_get_cache_size()\fR returns the currently valid session cache size.
.SH "NOTES"
@@ -161,8 +162,9 @@ currently 1024*20, so that up to 20000 sessions can be held. This size
can be modified using the \fISSL_CTX_sess_set_cache_size()\fR call. A special
case is the size 0, which is used for unlimited size.
.PP
-When the maximum number of sessions is reached, no more new sessions are
-added to the cache. New space may be added by calling
+If adding the session makes the cache exceed its size, then unused
+sessions are dropped from the end of the cache.
+Cache space may also be reclaimed by calling
\&\fISSL_CTX_flush_sessions\fR\|(3) to remove
expired sessions.
.PP
diff --git a/secure/lib/libssl/man/SSL_CTX_sess_set_get_cb.3 b/secure/lib/libssl/man/SSL_CTX_sess_set_get_cb.3
index 370c2e4..140755e 100644
--- a/secure/lib/libssl/man/SSL_CTX_sess_set_get_cb.3
+++ b/secure/lib/libssl/man/SSL_CTX_sess_set_get_cb.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "SSL_CTX_sess_set_get_cb 3"
-.TH SSL_CTX_sess_set_get_cb 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH SSL_CTX_sess_set_get_cb 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libssl/man/SSL_CTX_sessions.3 b/secure/lib/libssl/man/SSL_CTX_sessions.3
index 36dbf68..9dbd080 100644
--- a/secure/lib/libssl/man/SSL_CTX_sessions.3
+++ b/secure/lib/libssl/man/SSL_CTX_sessions.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "SSL_CTX_sessions 3"
-.TH SSL_CTX_sessions 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH SSL_CTX_sessions 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libssl/man/SSL_CTX_set1_curves.3 b/secure/lib/libssl/man/SSL_CTX_set1_curves.3
new file mode 100644
index 0000000..0e5fe2d
--- /dev/null
+++ b/secure/lib/libssl/man/SSL_CTX_set1_curves.3
@@ -0,0 +1,236 @@
+.\" Automatically generated by Pod::Man 2.28 (Pod::Simple 3.30)
+.\"
+.\" Standard preamble:
+.\" ========================================================================
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Vb \" Begin verbatim text
+.ft CW
+.nf
+.ne \\$1
+..
+.de Ve \" End verbatim text
+.ft R
+.fi
+..
+.\" Set up some character translations and predefined strings. \*(-- will
+.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
+.\" double quote, and \*(R" will give a right double quote. \*(C+ will
+.\" give a nicer C++. Capital omega is used to do unbreakable dashes and
+.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff,
+.\" nothing in troff, for use with C<>.
+.tr \(*W-
+.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
+.ie n \{\
+. ds -- \(*W-
+. ds PI pi
+. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
+. ds L" ""
+. ds R" ""
+. ds C` ""
+. ds C' ""
+'br\}
+.el\{\
+. ds -- \|\(em\|
+. ds PI \(*p
+. ds L" ``
+. ds R" ''
+. ds C`
+. ds C'
+'br\}
+.\"
+.\" Escape single quotes in literal strings from groff's Unicode transform.
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\"
+.\" If the F register is turned on, we'll generate index entries on stderr for
+.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
+.\" entries marked with X<> in POD. Of course, you'll have to process the
+.\" output yourself in some meaningful fashion.
+.\"
+.\" Avoid warning from groff about undefined register 'F'.
+.de IX
+..
+.nr rF 0
+.if \n(.g .if rF .nr rF 1
+.if (\n(rF:(\n(.g==0)) \{
+. if \nF \{
+. de IX
+. tm Index:\\$1\t\\n%\t"\\$2"
+..
+. if !\nF==2 \{
+. nr % 0
+. nr F 2
+. \}
+. \}
+.\}
+.rr rF
+.\"
+.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
+.\" Fear. Run. Save yourself. No user-serviceable parts.
+. \" fudge factors for nroff and troff
+.if n \{\
+. ds #H 0
+. ds #V .8m
+. ds #F .3m
+. ds #[ \f1
+. ds #] \fP
+.\}
+.if t \{\
+. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+. ds #V .6m
+. ds #F 0
+. ds #[ \&
+. ds #] \&
+.\}
+. \" simple accents for nroff and troff
+.if n \{\
+. ds ' \&
+. ds ` \&
+. ds ^ \&
+. ds , \&
+. ds ~ ~
+. ds /
+.\}
+.if t \{\
+. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
+.\}
+. \" troff and (daisy-wheel) nroff accents
+.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
+.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
+.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
+.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
+.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
+.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
+.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
+.ds ae a\h'-(\w'a'u*4/10)'e
+.ds Ae A\h'-(\w'A'u*4/10)'E
+. \" corrections for vroff
+.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
+.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
+. \" for low resolution devices (crt and lpr)
+.if \n(.H>23 .if \n(.V>19 \
+\{\
+. ds : e
+. ds 8 ss
+. ds o a
+. ds d- d\h'-1'\(ga
+. ds D- D\h'-1'\(hy
+. ds th \o'bp'
+. ds Th \o'LP'
+. ds ae ae
+. ds Ae AE
+.\}
+.rm #[ #] #H #V #F C
+.\" ========================================================================
+.\"
+.IX Title "SSL_CTX_set1_curves 3"
+.TH SSL_CTX_set1_curves 3 "2015-07-09" "1.0.2d" "OpenSSL"
+.\" For nroff, turn off justification. Always turn off hyphenation; it makes
+.\" way too many mistakes in technical documents.
+.if n .ad l
+.nh
+.SH "NAME"
+SSL_CTX_set1_curves, SSL_CTX_set1_curves_list, SSL_set1_curves,
+SSL_set1_curves_list, SSL_get1_curves, SSL_get_shared_curve,
+SSL_CTX_set_ecdh_auto, SSL_set_ecdh_auto \- EC supported curve functions
+.SH "SYNOPSIS"
+.IX Header "SYNOPSIS"
+.Vb 1
+\& #include <openssl/ssl.h>
+\&
+\& int SSL_CTX_set1_curves(SSL_CTX *ctx, int *clist, int clistlen);
+\& int SSL_CTX_set1_curves_list(SSL_CTX *ctx, char *list);
+\&
+\& int SSL_set1_curves(SSL *ssl, int *clist, int clistlen);
+\& int SSL_set1_curves_list(SSL *ssl, char *list);
+\&
+\& int SSL_get1_curves(SSL *ssl, int *curves);
+\& int SSL_get_shared_curve(SSL *s, int n);
+\&
+\& int SSL_CTX_set_ecdh_auto(SSL_CTX *ctx, int onoff);
+\& int SSL_set_ecdh_auto(SSL *s, int onoff);
+.Ve
+.SH "DESCRIPTION"
+.IX Header "DESCRIPTION"
+\&\fISSL_CTX_set1_curves()\fR sets the supported curves for \fBctx\fR to \fBclistlen\fR
+curves in the array \fBclist\fR. The array consist of all NIDs of curves in
+preference order. For a \s-1TLS\s0 client the curves are used directly in the
+supported curves extension. For a \s-1TLS\s0 server the curves are used to
+determine the set of shared curves.
+.PP
+\&\fISSL_CTX_set1_curves_list()\fR sets the supported curves for \fBctx\fR to
+string \fBlist\fR. The string is a colon separated list of curve NIDs or
+names, for example \*(L"P\-521:P\-384:P\-256\*(R".
+.PP
+\&\fISSL_set1_curves()\fR and \fISSL_set1_curves_list()\fR are similar except they set
+supported curves for the \s-1SSL\s0 structure \fBssl\fR.
+.PP
+\&\fISSL_get1_curves()\fR returns the set of supported curves sent by a client
+in the supported curves extension. It returns the total number of
+supported curves. The \fBcurves\fR parameter can be \fB\s-1NULL\s0\fR to simply
+return the number of curves for memory allocation purposes. The
+\&\fBcurves\fR array is in the form of a set of curve NIDs in preference
+order. It can return zero if the client did not send a supported curves
+extension.
+.PP
+\&\fISSL_get_shared_curve()\fR returns shared curve \fBn\fR for a server-side
+\&\s-1SSL \s0\fBssl\fR. If \fBn\fR is \-1 then the total number of shared curves is
+returned, which may be zero. Other than for diagnostic purposes,
+most applications will only be interested in the first shared curve
+so \fBn\fR is normally set to zero. If the value \fBn\fR is out of range,
+NID_undef is returned.
+.PP
+\&\fISSL_CTX_set_ecdh_auto()\fR and \fISSL_set_ecdh_auto()\fR set automatic curve
+selection for server \fBctx\fR or \fBssl\fR to \fBonoff\fR. If \fBonoff\fR is 1 then
+the highest preference curve is automatically used for \s-1ECDH\s0 temporary
+keys used during key exchange.
+.PP
+All these functions are implemented as macros.
+.SH "NOTES"
+.IX Header "NOTES"
+If an application wishes to make use of several of these functions for
+configuration purposes either on a command line or in a file it should
+consider using the \s-1SSL_CONF\s0 interface instead of manually parsing options.
+.PP
+The functions \fISSL_CTX_set_ecdh_auto()\fR and \fISSL_set_ecdh_auto()\fR can be used to
+make a server always choose the most appropriate curve for a client. If set
+it will override any temporary \s-1ECDH\s0 parameters set by a server. Previous
+versions of OpenSSL could effectively only use a single \s-1ECDH\s0 curve set
+using a function such as \fISSL_CTX_set_ecdh_tmp()\fR. Newer applications should
+just call:
+.PP
+.Vb 1
+\& SSL_CTX_set_ecdh_auto(ctx, 1);
+.Ve
+.PP
+and they will automatically support \s-1ECDH\s0 using the most appropriate shared
+curve.
+.SH "RETURN VALUES"
+.IX Header "RETURN VALUES"
+\&\fISSL_CTX_set1_curves()\fR, \fISSL_CTX_set1_curves_list()\fR, \fISSL_set1_curves()\fR,
+\&\fISSL_set1_curves_list()\fR, \fISSL_CTX_set_ecdh_auto()\fR and \fISSL_set_ecdh_auto()\fR
+return 1 for success and 0 for failure.
+.PP
+\&\fISSL_get1_curves()\fR returns the number of curves, which may be zero.
+.PP
+\&\fISSL_get_shared_curve()\fR returns the \s-1NID\s0 of shared curve \fBn\fR or NID_undef if there
+is no shared curve \fBn\fR; or the total number of shared curves if \fBn\fR
+is \-1.
+.PP
+When called on a client \fBssl\fR, \fISSL_get_shared_curve()\fR has no meaning and
+returns \-1.
+.SH "SEE ALSO"
+.IX Header "SEE ALSO"
+\&\fISSL_CTX_add_extra_chain_cert\fR\|(3)
+.SH "HISTORY"
+.IX Header "HISTORY"
+These functions were first added to OpenSSL 1.0.2.
diff --git a/secure/lib/libssl/man/SSL_CTX_set1_verify_cert_store.3 b/secure/lib/libssl/man/SSL_CTX_set1_verify_cert_store.3
new file mode 100644
index 0000000..8709286
--- /dev/null
+++ b/secure/lib/libssl/man/SSL_CTX_set1_verify_cert_store.3
@@ -0,0 +1,222 @@
+.\" Automatically generated by Pod::Man 2.28 (Pod::Simple 3.30)
+.\"
+.\" Standard preamble:
+.\" ========================================================================
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Vb \" Begin verbatim text
+.ft CW
+.nf
+.ne \\$1
+..
+.de Ve \" End verbatim text
+.ft R
+.fi
+..
+.\" Set up some character translations and predefined strings. \*(-- will
+.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
+.\" double quote, and \*(R" will give a right double quote. \*(C+ will
+.\" give a nicer C++. Capital omega is used to do unbreakable dashes and
+.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff,
+.\" nothing in troff, for use with C<>.
+.tr \(*W-
+.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
+.ie n \{\
+. ds -- \(*W-
+. ds PI pi
+. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
+. ds L" ""
+. ds R" ""
+. ds C` ""
+. ds C' ""
+'br\}
+.el\{\
+. ds -- \|\(em\|
+. ds PI \(*p
+. ds L" ``
+. ds R" ''
+. ds C`
+. ds C'
+'br\}
+.\"
+.\" Escape single quotes in literal strings from groff's Unicode transform.
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\"
+.\" If the F register is turned on, we'll generate index entries on stderr for
+.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
+.\" entries marked with X<> in POD. Of course, you'll have to process the
+.\" output yourself in some meaningful fashion.
+.\"
+.\" Avoid warning from groff about undefined register 'F'.
+.de IX
+..
+.nr rF 0
+.if \n(.g .if rF .nr rF 1
+.if (\n(rF:(\n(.g==0)) \{
+. if \nF \{
+. de IX
+. tm Index:\\$1\t\\n%\t"\\$2"
+..
+. if !\nF==2 \{
+. nr % 0
+. nr F 2
+. \}
+. \}
+.\}
+.rr rF
+.\"
+.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
+.\" Fear. Run. Save yourself. No user-serviceable parts.
+. \" fudge factors for nroff and troff
+.if n \{\
+. ds #H 0
+. ds #V .8m
+. ds #F .3m
+. ds #[ \f1
+. ds #] \fP
+.\}
+.if t \{\
+. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+. ds #V .6m
+. ds #F 0
+. ds #[ \&
+. ds #] \&
+.\}
+. \" simple accents for nroff and troff
+.if n \{\
+. ds ' \&
+. ds ` \&
+. ds ^ \&
+. ds , \&
+. ds ~ ~
+. ds /
+.\}
+.if t \{\
+. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
+.\}
+. \" troff and (daisy-wheel) nroff accents
+.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
+.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
+.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
+.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
+.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
+.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
+.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
+.ds ae a\h'-(\w'a'u*4/10)'e
+.ds Ae A\h'-(\w'A'u*4/10)'E
+. \" corrections for vroff
+.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
+.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
+. \" for low resolution devices (crt and lpr)
+.if \n(.H>23 .if \n(.V>19 \
+\{\
+. ds : e
+. ds 8 ss
+. ds o a
+. ds d- d\h'-1'\(ga
+. ds D- D\h'-1'\(hy
+. ds th \o'bp'
+. ds Th \o'LP'
+. ds ae ae
+. ds Ae AE
+.\}
+.rm #[ #] #H #V #F C
+.\" ========================================================================
+.\"
+.IX Title "SSL_CTX_set1_verify_cert_store 3"
+.TH SSL_CTX_set1_verify_cert_store 3 "2015-07-09" "1.0.2d" "OpenSSL"
+.\" For nroff, turn off justification. Always turn off hyphenation; it makes
+.\" way too many mistakes in technical documents.
+.if n .ad l
+.nh
+.SH "NAME"
+SSL_CTX_set0_verify_cert_store, SSL_CTX_set1_verify_cert_store,
+SSL_CTX_set0_chain_cert_store, SSL_CTX_set1_chain_cert_store,
+SSL_set0_verify_cert_store, SSL_set1_verify_cert_store,
+SSL_set0_chain_cert_store, SSL_set1_chain_cert_store \- set certificate
+verification or chain store
+.SH "SYNOPSIS"
+.IX Header "SYNOPSIS"
+.Vb 1
+\& #include <openssl/ssl.h>
+\&
+\& int SSL_CTX_set0_verify_cert_store(SSL_CTX *ctx, X509_STORE *st);
+\& int SSL_CTX_set1_verify_cert_store(SSL_CTX *ctx, X509_STORE *st);
+\& int SSL_CTX_set0_chain_cert_store(SSL_CTX *ctx, X509_STORE *st);
+\& int SSL_CTX_set1_chain_cert_store(SSL_CTX *ctx, X509_STORE *st);
+\&
+\& int SSL_set0_verify_cert_store(SSL_CTX *ctx, X509_STORE *st);
+\& int SSL_set1_verify_cert_store(SSL_CTX *ctx, X509_STORE *st);
+\& int SSL_set0_chain_cert_store(SSL_CTX *ctx, X509_STORE *st);
+\& int SSL_set1_chain_cert_store(SSL_CTX *ctx, X509_STORE *st);
+.Ve
+.SH "DESCRIPTION"
+.IX Header "DESCRIPTION"
+\&\fISSL_CTX_set0_verify_cert_store()\fR and \fISSL_CTX_set1_verify_cert_store()\fR
+set the certificate store used for certificate verification to \fBst\fR.
+.PP
+\&\fISSL_CTX_set0_chain_cert_store()\fR and \fISSL_CTX_set1_chain_cert_store()\fR
+set the certificate store used for certificate chain building to \fBst\fR.
+.PP
+\&\fISSL_set0_verify_cert_store()\fR, \fISSL_set1_verify_cert_store()\fR,
+\&\fISSL_set0_chain_cert_store()\fR and \fISSL_set1_chain_cert_store()\fR are similar
+except they apply to \s-1SSL\s0 structure \fBssl\fR.
+.PP
+All these functions are implemented as macros. Those containing a \fB1\fR
+increment the reference count of the supplied store so it must
+be freed at some point after the operation. Those containing a \fB0\fR do
+not increment reference counts and the supplied store \fB\s-1MUST NOT\s0\fR be freed
+after the operation.
+.SH "NOTES"
+.IX Header "NOTES"
+The stores pointers associated with an \s-1SSL_CTX\s0 structure are copied to any \s-1SSL\s0
+structures when \fISSL_new()\fR is called. As a result \s-1SSL\s0 structures will not be
+affected if the parent \s-1SSL_CTX\s0 store pointer is set to a new value.
+.PP
+The verification store is used to verify the certificate chain sent by the
+peer: that is an \s-1SSL/TLS\s0 client will use the verification store to verify
+the server's certificate chain and a \s-1SSL/TLS\s0 server will use it to verify
+any client certificate chain.
+.PP
+The chain store is used to build the certificate chain.
+.PP
+If the mode \fB\s-1SSL_MODE_NO_AUTO_CHAIN\s0\fR is set or a certificate chain is
+configured already (for example using the functions such as
+\&\fISSL_CTX_add1_chain_cert\fR\|(3) or
+\&\fISSL_CTX_add_extra_chain_cert\fR\|(3)) then
+automatic chain building is disabled.
+.PP
+If the mode \fB\s-1SSL_MODE_NO_AUTO_CHAIN\s0\fR is set then automatic chain building
+is disabled.
+.PP
+If the chain or the verification store is not set then the store associated
+with the parent \s-1SSL_CTX\s0 is used instead to retain compatibility with previous
+versions of OpenSSL.
+.SH "RETURN VALUES"
+.IX Header "RETURN VALUES"
+All these functions return 1 for success and 0 for failure.
+.SH "SEE ALSO"
+.IX Header "SEE ALSO"
+\&\fISSL_CTX_add_extra_chain_cert\fR\|(3)
+\&\fISSL_CTX_set0_chain\fR\|(3)
+\&\fISSL_CTX_set1_chain\fR\|(3)
+\&\fISSL_CTX_add0_chain_cert\fR\|(3)
+\&\fISSL_CTX_add1_chain_cert\fR\|(3)
+\&\fISSL_set0_chain\fR\|(3)
+\&\fISSL_set1_chain\fR\|(3)
+\&\fISSL_add0_chain_cert\fR\|(3)
+\&\fISSL_add1_chain_cert\fR\|(3)
+\&\fISSL_CTX_build_cert_chain\fR\|(3)
+\&\fISSL_build_cert_chain\fR\|(3)
+.SH "HISTORY"
+.IX Header "HISTORY"
+These functions were first added to OpenSSL 1.0.2.
diff --git a/secure/lib/libssl/man/SSL_CTX_set_cert_cb.3 b/secure/lib/libssl/man/SSL_CTX_set_cert_cb.3
new file mode 100644
index 0000000..b858902
--- /dev/null
+++ b/secure/lib/libssl/man/SSL_CTX_set_cert_cb.3
@@ -0,0 +1,201 @@
+.\" Automatically generated by Pod::Man 2.28 (Pod::Simple 3.30)
+.\"
+.\" Standard preamble:
+.\" ========================================================================
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Vb \" Begin verbatim text
+.ft CW
+.nf
+.ne \\$1
+..
+.de Ve \" End verbatim text
+.ft R
+.fi
+..
+.\" Set up some character translations and predefined strings. \*(-- will
+.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
+.\" double quote, and \*(R" will give a right double quote. \*(C+ will
+.\" give a nicer C++. Capital omega is used to do unbreakable dashes and
+.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff,
+.\" nothing in troff, for use with C<>.
+.tr \(*W-
+.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
+.ie n \{\
+. ds -- \(*W-
+. ds PI pi
+. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
+. ds L" ""
+. ds R" ""
+. ds C` ""
+. ds C' ""
+'br\}
+.el\{\
+. ds -- \|\(em\|
+. ds PI \(*p
+. ds L" ``
+. ds R" ''
+. ds C`
+. ds C'
+'br\}
+.\"
+.\" Escape single quotes in literal strings from groff's Unicode transform.
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\"
+.\" If the F register is turned on, we'll generate index entries on stderr for
+.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
+.\" entries marked with X<> in POD. Of course, you'll have to process the
+.\" output yourself in some meaningful fashion.
+.\"
+.\" Avoid warning from groff about undefined register 'F'.
+.de IX
+..
+.nr rF 0
+.if \n(.g .if rF .nr rF 1
+.if (\n(rF:(\n(.g==0)) \{
+. if \nF \{
+. de IX
+. tm Index:\\$1\t\\n%\t"\\$2"
+..
+. if !\nF==2 \{
+. nr % 0
+. nr F 2
+. \}
+. \}
+.\}
+.rr rF
+.\"
+.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
+.\" Fear. Run. Save yourself. No user-serviceable parts.
+. \" fudge factors for nroff and troff
+.if n \{\
+. ds #H 0
+. ds #V .8m
+. ds #F .3m
+. ds #[ \f1
+. ds #] \fP
+.\}
+.if t \{\
+. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+. ds #V .6m
+. ds #F 0
+. ds #[ \&
+. ds #] \&
+.\}
+. \" simple accents for nroff and troff
+.if n \{\
+. ds ' \&
+. ds ` \&
+. ds ^ \&
+. ds , \&
+. ds ~ ~
+. ds /
+.\}
+.if t \{\
+. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
+.\}
+. \" troff and (daisy-wheel) nroff accents
+.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
+.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
+.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
+.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
+.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
+.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
+.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
+.ds ae a\h'-(\w'a'u*4/10)'e
+.ds Ae A\h'-(\w'A'u*4/10)'E
+. \" corrections for vroff
+.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
+.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
+. \" for low resolution devices (crt and lpr)
+.if \n(.H>23 .if \n(.V>19 \
+\{\
+. ds : e
+. ds 8 ss
+. ds o a
+. ds d- d\h'-1'\(ga
+. ds D- D\h'-1'\(hy
+. ds th \o'bp'
+. ds Th \o'LP'
+. ds ae ae
+. ds Ae AE
+.\}
+.rm #[ #] #H #V #F C
+.\" ========================================================================
+.\"
+.IX Title "SSL_CTX_set_cert_cb 3"
+.TH SSL_CTX_set_cert_cb 3 "2015-07-09" "1.0.2d" "OpenSSL"
+.\" For nroff, turn off justification. Always turn off hyphenation; it makes
+.\" way too many mistakes in technical documents.
+.if n .ad l
+.nh
+.SH "NAME"
+SSL_CTX_set_cert_cb, SSL_set_cert_cb \- handle certificate callback function
+.SH "SYNOPSIS"
+.IX Header "SYNOPSIS"
+.Vb 1
+\& #include <openssl/ssl.h>
+\&
+\& void SSL_CTX_set_cert_cb(SSL_CTX *c, int (*cert_cb)(SSL *ssl, void *arg), void *arg);
+\& void SSL_set_cert_cb(SSL *s, int (*cert_cb)(SSL *ssl, void *arg), void *arg);
+\&
+\& int (*cert_cb)(SSL *ssl, void *arg);
+.Ve
+.SH "DESCRIPTION"
+.IX Header "DESCRIPTION"
+\&\fISSL_CTX_set_cert_cb()\fR and \fISSL_set_cert_cb()\fR sets the \fB\f(BIcert_cb()\fB\fR callback,
+\&\fBarg\fR value is pointer which is passed to the application callback.
+.PP
+When \fB\f(BIcert_cb()\fB\fR is \s-1NULL,\s0 no callback function is used.
+.PP
+\&\fIcert_cb()\fR is the application defined callback. It is called before a
+certificate will be used by a client or server. The callback can then inspect
+the passed \fBssl\fR structure and set or clear any appropriate certificates. If
+the callback is successful it \fB\s-1MUST\s0\fR return 1 even if no certificates have
+been set. A zero is returned on error which will abort the handshake with a
+fatal internal error alert. A negative return value will suspend the handshake
+and the handshake function will return immediately.
+\&\fISSL_get_error\fR\|(3) will return \s-1SSL_ERROR_WANT_X509_LOOKUP\s0 to
+indicate, that the handshake was suspended. The next call to the handshake
+function will again lead to the call of \fIcert_cb()\fR. It is the job of the
+\&\fIcert_cb()\fR to store information about the state of the last call,
+if required to continue.
+.SH "NOTES"
+.IX Header "NOTES"
+An application will typically call \fISSL_use_certificate()\fR and
+\&\fISSL_use_PrivateKey()\fR to set the end entity certificate and private key.
+It can add intermediate and optionally the root \s-1CA\s0 certificates using
+\&\fISSL_add1_chain_cert()\fR.
+.PP
+It might also call \fISSL_certs_clear()\fR to delete any certificates associated
+with the \fB\s-1SSL\s0\fR object.
+.PP
+The certificate callback functionality supercedes the (largely broken)
+functionality provided by the old client certificate callback interface.
+It is \fBalways\fR called even is a certificate is already set so the callback
+can modify or delete the existing certificate.
+.PP
+A more advanced callback might examine the handshake parameters and set
+whatever chain is appropriate. For example a legacy client supporting only
+\&\s-1TLS\s0 v1.0 might receive a certificate chain signed using \s-1SHA1\s0 whereas a
+\&\s-1TLS\s0 v1.2 client which advertises support for \s-1SHA256\s0 could receive a chain
+using \s-1SHA256.\s0
+.PP
+Normal server sanity checks are performed on any certificates set
+by the callback. So if an \s-1EC\s0 chain is set for a curve the client does not
+support it will \fBnot\fR be used.
+.SH "SEE ALSO"
+.IX Header "SEE ALSO"
+\&\fIssl\fR\|(3), \fISSL_use_certificate\fR\|(3),
+\&\fISSL_add1_chain_cert\fR\|(3),
+\&\fISSL_get_client_CA_list\fR\|(3),
+\&\fISSL_clear\fR\|(3), \fISSL_free\fR\|(3)
diff --git a/secure/lib/libssl/man/SSL_CTX_set_cert_store.3 b/secure/lib/libssl/man/SSL_CTX_set_cert_store.3
index 5d17a91..4253a53 100644
--- a/secure/lib/libssl/man/SSL_CTX_set_cert_store.3
+++ b/secure/lib/libssl/man/SSL_CTX_set_cert_store.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "SSL_CTX_set_cert_store 3"
-.TH SSL_CTX_set_cert_store 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH SSL_CTX_set_cert_store 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
@@ -177,6 +177,12 @@ overridden with the \fIverify_callback()\fR set via the
\&\fISSL_CTX_set_verify\fR\|(3) family of functions.
This document must therefore be updated when documentation about the
X509_STORE object and its handling becomes available.
+.SH "RESTRICTIONS"
+.IX Header "RESTRICTIONS"
+The X509_STORE structure used by an \s-1SSL_CTX\s0 is used for verifying peer
+certificates and building certificate chains, it is also shared by
+every child \s-1SSL\s0 structure. Applications wanting finer control can use
+functions such as \fISSL_CTX_set1_verify_cert_store()\fR instead.
.SH "RETURN VALUES"
.IX Header "RETURN VALUES"
\&\fISSL_CTX_set_cert_store()\fR does not return diagnostic output.
diff --git a/secure/lib/libssl/man/SSL_CTX_set_cert_verify_callback.3 b/secure/lib/libssl/man/SSL_CTX_set_cert_verify_callback.3
index 5d86dc3..a6a590e 100644
--- a/secure/lib/libssl/man/SSL_CTX_set_cert_verify_callback.3
+++ b/secure/lib/libssl/man/SSL_CTX_set_cert_verify_callback.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "SSL_CTX_set_cert_verify_callback 3"
-.TH SSL_CTX_set_cert_verify_callback 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH SSL_CTX_set_cert_verify_callback 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libssl/man/SSL_CTX_set_cipher_list.3 b/secure/lib/libssl/man/SSL_CTX_set_cipher_list.3
index e0243d6..3d70ced 100644
--- a/secure/lib/libssl/man/SSL_CTX_set_cipher_list.3
+++ b/secure/lib/libssl/man/SSL_CTX_set_cipher_list.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "SSL_CTX_set_cipher_list 3"
-.TH SSL_CTX_set_cipher_list 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH SSL_CTX_set_cipher_list 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
@@ -177,7 +177,7 @@ A \s-1RSA\s0 cipher can only be chosen, when a \s-1RSA\s0 certificate is availab
a temporary 512 bit \s-1RSA\s0 key, as typically the supplied key has a length
of 1024 bit (see
\&\fISSL_CTX_set_tmp_rsa_callback\fR\|(3)).
-\&\s-1RSA\s0 ciphers using \s-1EDH\s0 need a certificate and key and additional DH-parameters
+\&\s-1RSA\s0 ciphers using \s-1DHE\s0 need a certificate and key and additional DH-parameters
(see \fISSL_CTX_set_tmp_dh_callback\fR\|(3)).
.PP
A \s-1DSA\s0 cipher can only be chosen, when a \s-1DSA\s0 certificate is available.
diff --git a/secure/lib/libssl/man/SSL_CTX_set_client_CA_list.3 b/secure/lib/libssl/man/SSL_CTX_set_client_CA_list.3
index 3746b3b..203378c 100644
--- a/secure/lib/libssl/man/SSL_CTX_set_client_CA_list.3
+++ b/secure/lib/libssl/man/SSL_CTX_set_client_CA_list.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "SSL_CTX_set_client_CA_list 3"
-.TH SSL_CTX_set_client_CA_list 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH SSL_CTX_set_client_CA_list 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libssl/man/SSL_CTX_set_client_cert_cb.3 b/secure/lib/libssl/man/SSL_CTX_set_client_cert_cb.3
index ef24866..d9a4b7e 100644
--- a/secure/lib/libssl/man/SSL_CTX_set_client_cert_cb.3
+++ b/secure/lib/libssl/man/SSL_CTX_set_client_cert_cb.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "SSL_CTX_set_client_cert_cb 3"
-.TH SSL_CTX_set_client_cert_cb 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH SSL_CTX_set_client_cert_cb 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libssl/man/SSL_CTX_set_custom_cli_ext.3 b/secure/lib/libssl/man/SSL_CTX_set_custom_cli_ext.3
new file mode 100644
index 0000000..4bec817
--- /dev/null
+++ b/secure/lib/libssl/man/SSL_CTX_set_custom_cli_ext.3
@@ -0,0 +1,264 @@
+.\" Automatically generated by Pod::Man 2.28 (Pod::Simple 3.30)
+.\"
+.\" Standard preamble:
+.\" ========================================================================
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Vb \" Begin verbatim text
+.ft CW
+.nf
+.ne \\$1
+..
+.de Ve \" End verbatim text
+.ft R
+.fi
+..
+.\" Set up some character translations and predefined strings. \*(-- will
+.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
+.\" double quote, and \*(R" will give a right double quote. \*(C+ will
+.\" give a nicer C++. Capital omega is used to do unbreakable dashes and
+.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff,
+.\" nothing in troff, for use with C<>.
+.tr \(*W-
+.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
+.ie n \{\
+. ds -- \(*W-
+. ds PI pi
+. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
+. ds L" ""
+. ds R" ""
+. ds C` ""
+. ds C' ""
+'br\}
+.el\{\
+. ds -- \|\(em\|
+. ds PI \(*p
+. ds L" ``
+. ds R" ''
+. ds C`
+. ds C'
+'br\}
+.\"
+.\" Escape single quotes in literal strings from groff's Unicode transform.
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\"
+.\" If the F register is turned on, we'll generate index entries on stderr for
+.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
+.\" entries marked with X<> in POD. Of course, you'll have to process the
+.\" output yourself in some meaningful fashion.
+.\"
+.\" Avoid warning from groff about undefined register 'F'.
+.de IX
+..
+.nr rF 0
+.if \n(.g .if rF .nr rF 1
+.if (\n(rF:(\n(.g==0)) \{
+. if \nF \{
+. de IX
+. tm Index:\\$1\t\\n%\t"\\$2"
+..
+. if !\nF==2 \{
+. nr % 0
+. nr F 2
+. \}
+. \}
+.\}
+.rr rF
+.\"
+.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
+.\" Fear. Run. Save yourself. No user-serviceable parts.
+. \" fudge factors for nroff and troff
+.if n \{\
+. ds #H 0
+. ds #V .8m
+. ds #F .3m
+. ds #[ \f1
+. ds #] \fP
+.\}
+.if t \{\
+. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+. ds #V .6m
+. ds #F 0
+. ds #[ \&
+. ds #] \&
+.\}
+. \" simple accents for nroff and troff
+.if n \{\
+. ds ' \&
+. ds ` \&
+. ds ^ \&
+. ds , \&
+. ds ~ ~
+. ds /
+.\}
+.if t \{\
+. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
+.\}
+. \" troff and (daisy-wheel) nroff accents
+.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
+.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
+.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
+.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
+.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
+.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
+.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
+.ds ae a\h'-(\w'a'u*4/10)'e
+.ds Ae A\h'-(\w'A'u*4/10)'E
+. \" corrections for vroff
+.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
+.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
+. \" for low resolution devices (crt and lpr)
+.if \n(.H>23 .if \n(.V>19 \
+\{\
+. ds : e
+. ds 8 ss
+. ds o a
+. ds d- d\h'-1'\(ga
+. ds D- D\h'-1'\(hy
+. ds th \o'bp'
+. ds Th \o'LP'
+. ds ae ae
+. ds Ae AE
+.\}
+.rm #[ #] #H #V #F C
+.\" ========================================================================
+.\"
+.IX Title "SSL_CTX_set_custom_cli_ext 3"
+.TH SSL_CTX_set_custom_cli_ext 3 "2015-07-09" "1.0.2d" "OpenSSL"
+.\" For nroff, turn off justification. Always turn off hyphenation; it makes
+.\" way too many mistakes in technical documents.
+.if n .ad l
+.nh
+.SH "NAME"
+SSL_CTX_add_client_custom_ext, SSL_CTX_add_server_custom_ext \- custom TLS extension handling
+.SH "SYNOPSIS"
+.IX Header "SYNOPSIS"
+.Vb 1
+\& #include <openssl/ssl.h>
+\&
+\& int SSL_CTX_add_client_custom_ext(SSL_CTX *ctx, unsigned int ext_type,
+\& custom_ext_add_cb add_cb,
+\& custom_ext_free_cb free_cb, void *add_arg,
+\& custom_ext_parse_cb parse_cb,
+\& void *parse_arg);
+\&
+\& int SSL_CTX_add_server_custom_ext(SSL_CTX *ctx, unsigned int ext_type,
+\& custom_ext_add_cb add_cb,
+\& custom_ext_free_cb free_cb, void *add_arg,
+\& custom_ext_parse_cb parse_cb,
+\& void *parse_arg);
+\&
+\& int SSL_extension_supported(unsigned int ext_type);
+\&
+\& typedef int (*custom_ext_add_cb)(SSL *s, unsigned int ext_type,
+\& const unsigned char **out,
+\& size_t *outlen, int *al,
+\& void *add_arg);
+\&
+\& typedef void (*custom_ext_free_cb)(SSL *s, unsigned int ext_type,
+\& const unsigned char *out,
+\& void *add_arg);
+\&
+\& typedef int (*custom_ext_parse_cb)(SSL *s, unsigned int ext_type,
+\& const unsigned char *in,
+\& size_t inlen, int *al,
+\& void *parse_arg);
+.Ve
+.SH "DESCRIPTION"
+.IX Header "DESCRIPTION"
+\&\fISSL_CTX_add_client_custom_ext()\fR adds a custom extension for a \s-1TLS\s0 client
+with extension type \fBext_type\fR and callbacks \fBadd_cb\fR, \fBfree_cb\fR and
+\&\fBparse_cb\fR.
+.PP
+\&\fISSL_CTX_add_server_custom_ext()\fR adds a custom extension for a \s-1TLS\s0 server
+with extension type \fBext_type\fR and callbacks \fBadd_cb\fR, \fBfree_cb\fR and
+\&\fBparse_cb\fR.
+.PP
+In both cases the extension type must not be handled by OpenSSL internally
+or an error occurs.
+.PP
+\&\fISSL_extension_supported()\fR returns 1 if the extension \fBext_type\fR is handled
+internally by OpenSSL and 0 otherwise.
+.SH "EXTENSION CALLBACKS"
+.IX Header "EXTENSION CALLBACKS"
+The callback \fBadd_cb\fR is called to send custom extension data to be
+included in ClientHello for \s-1TLS\s0 clients or ServerHello for servers. The
+\&\fBext_type\fR parameter is set to the extension type which will be added and
+\&\fBadd_arg\fR to the value set when the extension handler was added.
+.PP
+If the application wishes to include the extension \fBext_type\fR it should
+set \fB*out\fR to the extension data, set \fB*outlen\fR to the length of the
+extension data and return 1.
+.PP
+If the \fBadd_cb\fR does not wish to include the extension it must return 0.
+.PP
+If \fBadd_cb\fR returns \-1 a fatal handshake error occurs using the \s-1TLS\s0
+alert value specified in \fB*al\fR.
+.PP
+For clients (but not servers) if \fBadd_cb\fR is set to \s-1NULL\s0 a zero length
+extension is added for \fBext_type\fR.
+.PP
+For clients every registered \fBadd_cb\fR is always called to see if the
+application wishes to add an extension to ClientHello.
+.PP
+For servers every registered \fBadd_cb\fR is called once if and only if the
+corresponding extension was received in ClientHello to see if the application
+wishes to add the extension to ServerHello. That is, if no corresponding extension
+was received in ClientHello then \fBadd_cb\fR will not be called.
+.PP
+If an extension is added (that is \fBadd_cb\fR returns 1) \fBfree_cb\fR is called
+(if it is set) with the value of \fBout\fR set by the add callback. It can be
+used to free up any dynamic extension data set by \fBadd_cb\fR. Since \fBout\fR is
+constant (to permit use of constant data in \fBadd_cb\fR) applications may need to
+cast away const to free the data.
+.PP
+The callback \fBparse_cb\fR receives data for \s-1TLS\s0 extensions. For \s-1TLS\s0 clients
+the extension data will come from ServerHello and for \s-1TLS\s0 servers it will
+come from ClientHello.
+.PP
+The extension data consists of \fBinlen\fR bytes in the buffer \fBin\fR for the
+extension \fBextension_type\fR.
+.PP
+If the \fBparse_cb\fR considers the extension data acceptable it must return
+1. If it returns 0 or a negative value a fatal handshake error occurs
+using the \s-1TLS\s0 alert value specified in \fB*al\fR.
+.PP
+The buffer \fBin\fR is a temporary internal buffer which will not be valid after
+the callback returns.
+.SH "NOTES"
+.IX Header "NOTES"
+The \fBadd_arg\fR and \fBparse_arg\fR parameters can be set to arbitrary values
+which will be passed to the corresponding callbacks. They can, for example,
+be used to store the extension data received in a convenient structure or
+pass the extension data to be added or freed when adding extensions.
+.PP
+The \fBext_type\fR parameter corresponds to the \fBextension_type\fR field of
+\&\s-1RFC5246\s0 et al. It is \fBnot\fR a \s-1NID.\s0
+.PP
+If the same custom extension type is received multiple times a fatal
+\&\fBdecode_error\fR alert is sent and the handshake aborts. If a custom extension
+is received in ServerHello which was not sent in ClientHello a fatal
+\&\fBunsupported_extension\fR alert is sent and the handshake is aborted. The
+ServerHello \fBadd_cb\fR callback is only called if the corresponding extension
+was received in ClientHello. This is compliant with the \s-1TLS\s0 specifications.
+This behaviour ensures that each callback is called at most once and that
+an application can never send unsolicited extensions.
+.SH "RETURN VALUES"
+.IX Header "RETURN VALUES"
+\&\fISSL_CTX_add_client_custom_ext()\fR and \fISSL_CTX_add_server_custom_ext()\fR return 1 for
+success and 0 for failure. A failure can occur if an attempt is made to
+add the same \fBext_type\fR more than once, if an attempt is made to use an
+extension type handled internally by OpenSSL or if an internal error occurs
+(for example a memory allocation failure).
+.PP
+\&\fISSL_extension_supported()\fR returns 1 if the extension \fBext_type\fR is handled
+internally by OpenSSL and 0 otherwise.
diff --git a/secure/lib/libssl/man/SSL_CTX_set_default_passwd_cb.3 b/secure/lib/libssl/man/SSL_CTX_set_default_passwd_cb.3
index 9dab343..7388cb1 100644
--- a/secure/lib/libssl/man/SSL_CTX_set_default_passwd_cb.3
+++ b/secure/lib/libssl/man/SSL_CTX_set_default_passwd_cb.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "SSL_CTX_set_default_passwd_cb 3"
-.TH SSL_CTX_set_default_passwd_cb 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH SSL_CTX_set_default_passwd_cb 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libssl/man/SSL_CTX_set_generate_session_id.3 b/secure/lib/libssl/man/SSL_CTX_set_generate_session_id.3
index cd51338..602d00c 100644
--- a/secure/lib/libssl/man/SSL_CTX_set_generate_session_id.3
+++ b/secure/lib/libssl/man/SSL_CTX_set_generate_session_id.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "SSL_CTX_set_generate_session_id 3"
-.TH SSL_CTX_set_generate_session_id 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH SSL_CTX_set_generate_session_id 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libssl/man/SSL_CTX_set_info_callback.3 b/secure/lib/libssl/man/SSL_CTX_set_info_callback.3
index 58ee7a2..d8bcc3e 100644
--- a/secure/lib/libssl/man/SSL_CTX_set_info_callback.3
+++ b/secure/lib/libssl/man/SSL_CTX_set_info_callback.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "SSL_CTX_set_info_callback 3"
-.TH SSL_CTX_set_info_callback 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH SSL_CTX_set_info_callback 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libssl/man/SSL_CTX_set_max_cert_list.3 b/secure/lib/libssl/man/SSL_CTX_set_max_cert_list.3
index 265cc55..c018083 100644
--- a/secure/lib/libssl/man/SSL_CTX_set_max_cert_list.3
+++ b/secure/lib/libssl/man/SSL_CTX_set_max_cert_list.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "SSL_CTX_set_max_cert_list 3"
-.TH SSL_CTX_set_max_cert_list 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH SSL_CTX_set_max_cert_list 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libssl/man/SSL_CTX_set_mode.3 b/secure/lib/libssl/man/SSL_CTX_set_mode.3
index b1502ff..d0e0442 100644
--- a/secure/lib/libssl/man/SSL_CTX_set_mode.3
+++ b/secure/lib/libssl/man/SSL_CTX_set_mode.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "SSL_CTX_set_mode 3"
-.TH SSL_CTX_set_mode 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH SSL_CTX_set_mode 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libssl/man/SSL_CTX_set_msg_callback.3 b/secure/lib/libssl/man/SSL_CTX_set_msg_callback.3
index 3bfa3d5..8c5cc1d 100644
--- a/secure/lib/libssl/man/SSL_CTX_set_msg_callback.3
+++ b/secure/lib/libssl/man/SSL_CTX_set_msg_callback.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "SSL_CTX_set_msg_callback 3"
-.TH SSL_CTX_set_msg_callback 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH SSL_CTX_set_msg_callback 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libssl/man/SSL_CTX_set_options.3 b/secure/lib/libssl/man/SSL_CTX_set_options.3
index 3747de6..2be16ce 100644
--- a/secure/lib/libssl/man/SSL_CTX_set_options.3
+++ b/secure/lib/libssl/man/SSL_CTX_set_options.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "SSL_CTX_set_options 3"
-.TH SSL_CTX_set_options 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH SSL_CTX_set_options 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libssl/man/SSL_CTX_set_psk_client_callback.3 b/secure/lib/libssl/man/SSL_CTX_set_psk_client_callback.3
index 54bbe43..0596370 100644
--- a/secure/lib/libssl/man/SSL_CTX_set_psk_client_callback.3
+++ b/secure/lib/libssl/man/SSL_CTX_set_psk_client_callback.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "SSL_CTX_set_psk_client_callback 3"
-.TH SSL_CTX_set_psk_client_callback 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH SSL_CTX_set_psk_client_callback 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libssl/man/SSL_CTX_set_quiet_shutdown.3 b/secure/lib/libssl/man/SSL_CTX_set_quiet_shutdown.3
index 9520211..1184c4a 100644
--- a/secure/lib/libssl/man/SSL_CTX_set_quiet_shutdown.3
+++ b/secure/lib/libssl/man/SSL_CTX_set_quiet_shutdown.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "SSL_CTX_set_quiet_shutdown 3"
-.TH SSL_CTX_set_quiet_shutdown 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH SSL_CTX_set_quiet_shutdown 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libssl/man/SSL_CTX_set_read_ahead.3 b/secure/lib/libssl/man/SSL_CTX_set_read_ahead.3
index d72eb46..c5fbc2c 100644
--- a/secure/lib/libssl/man/SSL_CTX_set_read_ahead.3
+++ b/secure/lib/libssl/man/SSL_CTX_set_read_ahead.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "SSL_CTX_set_read_ahead 3"
-.TH SSL_CTX_set_read_ahead 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH SSL_CTX_set_read_ahead 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libssl/man/SSL_CTX_set_session_cache_mode.3 b/secure/lib/libssl/man/SSL_CTX_set_session_cache_mode.3
index dac4b7d..40585e6 100644
--- a/secure/lib/libssl/man/SSL_CTX_set_session_cache_mode.3
+++ b/secure/lib/libssl/man/SSL_CTX_set_session_cache_mode.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "SSL_CTX_set_session_cache_mode 3"
-.TH SSL_CTX_set_session_cache_mode 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH SSL_CTX_set_session_cache_mode 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libssl/man/SSL_CTX_set_session_id_context.3 b/secure/lib/libssl/man/SSL_CTX_set_session_id_context.3
index 31dea8b..1ade776 100644
--- a/secure/lib/libssl/man/SSL_CTX_set_session_id_context.3
+++ b/secure/lib/libssl/man/SSL_CTX_set_session_id_context.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "SSL_CTX_set_session_id_context 3"
-.TH SSL_CTX_set_session_id_context 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH SSL_CTX_set_session_id_context 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libssl/man/SSL_CTX_set_ssl_version.3 b/secure/lib/libssl/man/SSL_CTX_set_ssl_version.3
index ebce586..c3037c8 100644
--- a/secure/lib/libssl/man/SSL_CTX_set_ssl_version.3
+++ b/secure/lib/libssl/man/SSL_CTX_set_ssl_version.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "SSL_CTX_set_ssl_version 3"
-.TH SSL_CTX_set_ssl_version 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH SSL_CTX_set_ssl_version 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libssl/man/SSL_CTX_set_timeout.3 b/secure/lib/libssl/man/SSL_CTX_set_timeout.3
index e9471a0..6b085c8 100644
--- a/secure/lib/libssl/man/SSL_CTX_set_timeout.3
+++ b/secure/lib/libssl/man/SSL_CTX_set_timeout.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "SSL_CTX_set_timeout 3"
-.TH SSL_CTX_set_timeout 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH SSL_CTX_set_timeout 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libssl/man/SSL_CTX_set_tlsext_ticket_key_cb.3 b/secure/lib/libssl/man/SSL_CTX_set_tlsext_ticket_key_cb.3
index 0e442ea..ca7e7aa 100644
--- a/secure/lib/libssl/man/SSL_CTX_set_tlsext_ticket_key_cb.3
+++ b/secure/lib/libssl/man/SSL_CTX_set_tlsext_ticket_key_cb.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "SSL_CTX_set_tlsext_ticket_key_cb 3"
-.TH SSL_CTX_set_tlsext_ticket_key_cb 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH SSL_CTX_set_tlsext_ticket_key_cb 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libssl/man/SSL_CTX_set_tmp_dh_callback.3 b/secure/lib/libssl/man/SSL_CTX_set_tmp_dh_callback.3
index d58f518..22e2e6b 100644
--- a/secure/lib/libssl/man/SSL_CTX_set_tmp_dh_callback.3
+++ b/secure/lib/libssl/man/SSL_CTX_set_tmp_dh_callback.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "SSL_CTX_set_tmp_dh_callback 3"
-.TH SSL_CTX_set_tmp_dh_callback 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH SSL_CTX_set_tmp_dh_callback 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libssl/man/SSL_CTX_set_tmp_rsa_callback.3 b/secure/lib/libssl/man/SSL_CTX_set_tmp_rsa_callback.3
index 2338021..efd8ee0 100644
--- a/secure/lib/libssl/man/SSL_CTX_set_tmp_rsa_callback.3
+++ b/secure/lib/libssl/man/SSL_CTX_set_tmp_rsa_callback.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "SSL_CTX_set_tmp_rsa_callback 3"
-.TH SSL_CTX_set_tmp_rsa_callback 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH SSL_CTX_set_tmp_rsa_callback 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
@@ -206,7 +206,7 @@ the \s-1TLS\s0 standard, when the \s-1RSA\s0 key can be used for signing only, t
for export ciphers. Using ephemeral \s-1RSA\s0 key exchange for other purposes
violates the standard and can break interoperability with clients.
It is therefore strongly recommended to not use ephemeral \s-1RSA\s0 key
-exchange and use \s-1EDH \s0(Ephemeral Diffie-Hellman) key exchange instead
+exchange and use \s-1DHE \s0(Ephemeral Diffie-Hellman) key exchange instead
in order to achieve forward secrecy (see
\&\fISSL_CTX_set_tmp_dh_callback\fR\|(3)).
.PP
diff --git a/secure/lib/libssl/man/SSL_CTX_set_verify.3 b/secure/lib/libssl/man/SSL_CTX_set_verify.3
index 1e4b37d..6a5961e 100644
--- a/secure/lib/libssl/man/SSL_CTX_set_verify.3
+++ b/secure/lib/libssl/man/SSL_CTX_set_verify.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "SSL_CTX_set_verify 3"
-.TH SSL_CTX_set_verify 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH SSL_CTX_set_verify 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libssl/man/SSL_CTX_use_certificate.3 b/secure/lib/libssl/man/SSL_CTX_use_certificate.3
index 293b584..c5c6eea 100644
--- a/secure/lib/libssl/man/SSL_CTX_use_certificate.3
+++ b/secure/lib/libssl/man/SSL_CTX_use_certificate.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "SSL_CTX_use_certificate 3"
-.TH SSL_CTX_use_certificate 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH SSL_CTX_use_certificate 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
@@ -244,10 +244,9 @@ the same check for \fBssl\fR. If no key/certificate was explicitly added for
this \fBssl\fR, the last item added into \fBctx\fR will be checked.
.SH "NOTES"
.IX Header "NOTES"
-The internal certificate store of OpenSSL can hold two private key/certificate
-pairs at a time: one key/certificate of type \s-1RSA\s0 and one key/certificate
-of type \s-1DSA.\s0 The certificate used depends on the cipher select, see
-also \fISSL_CTX_set_cipher_list\fR\|(3).
+The internal certificate store of OpenSSL can hold several private
+key/certificate pairs at a time. The certificate used depends on the
+cipher selected, see also \fISSL_CTX_set_cipher_list\fR\|(3).
.PP
When reading certificates and private keys from file, files of type
\&\s-1SSL_FILETYPE_ASN1 \s0(also known as \fB\s-1DER\s0\fR, binary encoding) can only contain
@@ -257,16 +256,13 @@ Files of type \s-1SSL_FILETYPE_PEM\s0 can contain more than one item.
.PP
\&\fISSL_CTX_use_certificate_chain_file()\fR adds the first certificate found
in the file to the certificate store. The other certificates are added
-to the store of chain certificates using
-\&\fISSL_CTX_add_extra_chain_cert\fR\|(3).
-There exists only one extra chain store, so that the same chain is appended
-to both types of certificates, \s-1RSA\s0 and \s-1DSA\s0! If it is not intended to use
-both type of certificate at the same time, it is recommended to use the
-\&\fISSL_CTX_use_certificate_chain_file()\fR instead of the
-\&\fISSL_CTX_use_certificate_file()\fR function in order to allow the use of
-complete certificate chains even when no trusted \s-1CA\s0 storage is used or
-when the \s-1CA\s0 issuing the certificate shall not be added to the trusted
-\&\s-1CA\s0 storage.
+to the store of chain certificates using \fISSL_CTX_add1_chain_cert\fR\|(3). Note: versions of OpenSSL before 1.0.2 only had a single
+certificate chain store for all certificate types, OpenSSL 1.0.2 and later
+have a separate chain store for each type. \fISSL_CTX_use_certificate_chain_file()\fR
+should be used instead of the \fISSL_CTX_use_certificate_file()\fR function in order
+to allow the use of complete certificate chains even when no trusted \s-1CA\s0
+storage is used or when the \s-1CA\s0 issuing the certificate shall not be added to
+the trusted \s-1CA\s0 storage.
.PP
If additional certificates are needed to complete the chain during the
\&\s-1TLS\s0 negotiation, \s-1CA\s0 certificates are additionally looked up in the
diff --git a/secure/lib/libssl/man/SSL_CTX_use_psk_identity_hint.3 b/secure/lib/libssl/man/SSL_CTX_use_psk_identity_hint.3
index 04ea12a..3061fbc 100644
--- a/secure/lib/libssl/man/SSL_CTX_use_psk_identity_hint.3
+++ b/secure/lib/libssl/man/SSL_CTX_use_psk_identity_hint.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "SSL_CTX_use_psk_identity_hint 3"
-.TH SSL_CTX_use_psk_identity_hint 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH SSL_CTX_use_psk_identity_hint 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
@@ -184,8 +184,11 @@ by the client in parameter \fBidentity\fR, and a buffer \fBpsk\fR of length
1 on success, 0 otherwise.
.PP
Return values from the server callback are interpreted as follows:
-.IP "> 0" 4
-.IX Item "> 0"
+.IP "0" 4
+\&\s-1PSK\s0 identity was not found. An \*(L"unknown_psk_identity\*(R" alert message
+will be sent and the connection setup fails.
+.IP ">0" 4
+.IX Item ">0"
\&\s-1PSK\s0 identity was found and the server callback has provided the \s-1PSK\s0
successfully in parameter \fBpsk\fR. Return value is the length of
\&\fBpsk\fR in bytes. It is an error to return a value greater than
@@ -196,6 +199,3 @@ protocol to continue anyway, the callback must provide some random
data to \fBpsk\fR and return the length of the random data, so the
connection will fail with decryption_error before it will be finished
completely.
-.IP "0" 4
-\&\s-1PSK\s0 identity was not found. An \*(L"unknown_psk_identity\*(R" alert message
-will be sent and the connection setup fails.
diff --git a/secure/lib/libssl/man/SSL_CTX_use_serverinfo.3 b/secure/lib/libssl/man/SSL_CTX_use_serverinfo.3
new file mode 100644
index 0000000..124d00a
--- /dev/null
+++ b/secure/lib/libssl/man/SSL_CTX_use_serverinfo.3
@@ -0,0 +1,179 @@
+.\" Automatically generated by Pod::Man 2.28 (Pod::Simple 3.30)
+.\"
+.\" Standard preamble:
+.\" ========================================================================
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Vb \" Begin verbatim text
+.ft CW
+.nf
+.ne \\$1
+..
+.de Ve \" End verbatim text
+.ft R
+.fi
+..
+.\" Set up some character translations and predefined strings. \*(-- will
+.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left
+.\" double quote, and \*(R" will give a right double quote. \*(C+ will
+.\" give a nicer C++. Capital omega is used to do unbreakable dashes and
+.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff,
+.\" nothing in troff, for use with C<>.
+.tr \(*W-
+.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p'
+.ie n \{\
+. ds -- \(*W-
+. ds PI pi
+. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch
+. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch
+. ds L" ""
+. ds R" ""
+. ds C` ""
+. ds C' ""
+'br\}
+.el\{\
+. ds -- \|\(em\|
+. ds PI \(*p
+. ds L" ``
+. ds R" ''
+. ds C`
+. ds C'
+'br\}
+.\"
+.\" Escape single quotes in literal strings from groff's Unicode transform.
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\"
+.\" If the F register is turned on, we'll generate index entries on stderr for
+.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
+.\" entries marked with X<> in POD. Of course, you'll have to process the
+.\" output yourself in some meaningful fashion.
+.\"
+.\" Avoid warning from groff about undefined register 'F'.
+.de IX
+..
+.nr rF 0
+.if \n(.g .if rF .nr rF 1
+.if (\n(rF:(\n(.g==0)) \{
+. if \nF \{
+. de IX
+. tm Index:\\$1\t\\n%\t"\\$2"
+..
+. if !\nF==2 \{
+. nr % 0
+. nr F 2
+. \}
+. \}
+.\}
+.rr rF
+.\"
+.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2).
+.\" Fear. Run. Save yourself. No user-serviceable parts.
+. \" fudge factors for nroff and troff
+.if n \{\
+. ds #H 0
+. ds #V .8m
+. ds #F .3m
+. ds #[ \f1
+. ds #] \fP
+.\}
+.if t \{\
+. ds #H ((1u-(\\\\n(.fu%2u))*.13m)
+. ds #V .6m
+. ds #F 0
+. ds #[ \&
+. ds #] \&
+.\}
+. \" simple accents for nroff and troff
+.if n \{\
+. ds ' \&
+. ds ` \&
+. ds ^ \&
+. ds , \&
+. ds ~ ~
+. ds /
+.\}
+.if t \{\
+. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u"
+. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u'
+. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u'
+. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u'
+. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u'
+. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u'
+.\}
+. \" troff and (daisy-wheel) nroff accents
+.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V'
+.ds 8 \h'\*(#H'\(*b\h'-\*(#H'
+.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#]
+.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H'
+.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u'
+.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#]
+.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#]
+.ds ae a\h'-(\w'a'u*4/10)'e
+.ds Ae A\h'-(\w'A'u*4/10)'E
+. \" corrections for vroff
+.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u'
+.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u'
+. \" for low resolution devices (crt and lpr)
+.if \n(.H>23 .if \n(.V>19 \
+\{\
+. ds : e
+. ds 8 ss
+. ds o a
+. ds d- d\h'-1'\(ga
+. ds D- D\h'-1'\(hy
+. ds th \o'bp'
+. ds Th \o'LP'
+. ds ae ae
+. ds Ae AE
+.\}
+.rm #[ #] #H #V #F C
+.\" ========================================================================
+.\"
+.IX Title "SSL_CTX_use_serverinfo 3"
+.TH SSL_CTX_use_serverinfo 3 "2015-07-09" "1.0.2d" "OpenSSL"
+.\" For nroff, turn off justification. Always turn off hyphenation; it makes
+.\" way too many mistakes in technical documents.
+.if n .ad l
+.nh
+.SH "NAME"
+SSL_CTX_use_serverinfo, SSL_CTX_use_serverinfo_file \- use serverinfo extension
+.SH "SYNOPSIS"
+.IX Header "SYNOPSIS"
+.Vb 1
+\& #include <openssl/ssl.h>
+\&
+\& int SSL_CTX_use_serverinfo(SSL_CTX *ctx, const unsigned char *serverinfo,
+\& size_t serverinfo_length);
+\&
+\& int SSL_CTX_use_serverinfo_file(SSL_CTX *ctx, const char *file);
+.Ve
+.SH "DESCRIPTION"
+.IX Header "DESCRIPTION"
+These functions load \*(L"serverinfo\*(R" \s-1TLS\s0 ServerHello Extensions into the \s-1SSL_CTX.
+A \s0\*(L"serverinfo\*(R" extension is returned in response to an empty ClientHello
+Extension.
+.PP
+\&\fISSL_CTX_use_serverinfo()\fR loads one or more serverinfo extensions from
+a byte array into \fBctx\fR. The extensions must be concatenated into a
+sequence of bytes. Each extension must consist of a 2\-byte Extension Type,
+a 2\-byte length, and then length bytes of extension_data.
+.PP
+\&\fISSL_CTX_use_serverinfo_file()\fR loads one or more serverinfo extensions from
+\&\fBfile\fR into \fBctx\fR. The extensions must be in \s-1PEM\s0 format. Each extension
+must consist of a 2\-byte Extension Type, a 2\-byte length, and then length
+bytes of extension_data. Each \s-1PEM\s0 extension name must begin with the phrase
+\&\*(L"\s-1BEGIN SERVERINFO FOR \*(R".\s0
+.SH "NOTES"
+.IX Header "NOTES"
+.SH "RETURN VALUES"
+.IX Header "RETURN VALUES"
+On success, the functions return 1.
+On failure, the functions return 0. Check out the error stack to find out
+the reason.
+.SH "SEE ALSO"
+.IX Header "SEE ALSO"
+.SH "HISTORY"
+.IX Header "HISTORY"
diff --git a/secure/lib/libssl/man/SSL_SESSION_free.3 b/secure/lib/libssl/man/SSL_SESSION_free.3
index 52a5490..31dc630 100644
--- a/secure/lib/libssl/man/SSL_SESSION_free.3
+++ b/secure/lib/libssl/man/SSL_SESSION_free.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "SSL_SESSION_free 3"
-.TH SSL_SESSION_free 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH SSL_SESSION_free 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libssl/man/SSL_SESSION_get_ex_new_index.3 b/secure/lib/libssl/man/SSL_SESSION_get_ex_new_index.3
index b861fe3..f84542d 100644
--- a/secure/lib/libssl/man/SSL_SESSION_get_ex_new_index.3
+++ b/secure/lib/libssl/man/SSL_SESSION_get_ex_new_index.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "SSL_SESSION_get_ex_new_index 3"
-.TH SSL_SESSION_get_ex_new_index 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH SSL_SESSION_get_ex_new_index 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libssl/man/SSL_SESSION_get_time.3 b/secure/lib/libssl/man/SSL_SESSION_get_time.3
index 669901e..5dc18e6 100644
--- a/secure/lib/libssl/man/SSL_SESSION_get_time.3
+++ b/secure/lib/libssl/man/SSL_SESSION_get_time.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "SSL_SESSION_get_time 3"
-.TH SSL_SESSION_get_time 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH SSL_SESSION_get_time 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libssl/man/SSL_accept.3 b/secure/lib/libssl/man/SSL_accept.3
index 0636013..9c9608a 100644
--- a/secure/lib/libssl/man/SSL_accept.3
+++ b/secure/lib/libssl/man/SSL_accept.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "SSL_accept 3"
-.TH SSL_accept 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH SSL_accept 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
@@ -157,10 +157,7 @@ The communication channel must already have been set and assigned to the
The behaviour of \fISSL_accept()\fR depends on the underlying \s-1BIO. \s0
.PP
If the underlying \s-1BIO\s0 is \fBblocking\fR, \fISSL_accept()\fR will only return once the
-handshake has been finished or an error occurred, except for \s-1SGC \s0(Server
-Gated Cryptography). For \s-1SGC,\s0 \fISSL_accept()\fR may return with \-1, but
-\&\fISSL_get_error()\fR will yield \fB\s-1SSL_ERROR_WANT_READ/WRITE\s0\fR and \fISSL_accept()\fR
-should be called again.
+handshake has been finished or an error occurred.
.PP
If the underlying \s-1BIO\s0 is \fBnon-blocking\fR, \fISSL_accept()\fR will also return
when the underlying \s-1BIO\s0 could not satisfy the needs of \fISSL_accept()\fR
diff --git a/secure/lib/libssl/man/SSL_alert_type_string.3 b/secure/lib/libssl/man/SSL_alert_type_string.3
index 476983d..f4d2f4e 100644
--- a/secure/lib/libssl/man/SSL_alert_type_string.3
+++ b/secure/lib/libssl/man/SSL_alert_type_string.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "SSL_alert_type_string 3"
-.TH SSL_alert_type_string 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH SSL_alert_type_string 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libssl/man/SSL_clear.3 b/secure/lib/libssl/man/SSL_clear.3
index 1226faa..26bca44 100644
--- a/secure/lib/libssl/man/SSL_clear.3
+++ b/secure/lib/libssl/man/SSL_clear.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "SSL_clear 3"
-.TH SSL_clear 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH SSL_clear 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libssl/man/SSL_connect.3 b/secure/lib/libssl/man/SSL_connect.3
index b82e103..a1039ba 100644
--- a/secure/lib/libssl/man/SSL_connect.3
+++ b/secure/lib/libssl/man/SSL_connect.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "SSL_connect 3"
-.TH SSL_connect 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH SSL_connect 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libssl/man/SSL_do_handshake.3 b/secure/lib/libssl/man/SSL_do_handshake.3
index 3d62274..5471b70 100644
--- a/secure/lib/libssl/man/SSL_do_handshake.3
+++ b/secure/lib/libssl/man/SSL_do_handshake.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "SSL_do_handshake 3"
-.TH SSL_do_handshake 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH SSL_do_handshake 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
@@ -159,10 +159,7 @@ routines may have to be explicitly set in advance using either
The behaviour of \fISSL_do_handshake()\fR depends on the underlying \s-1BIO.\s0
.PP
If the underlying \s-1BIO\s0 is \fBblocking\fR, \fISSL_do_handshake()\fR will only return
-once the handshake has been finished or an error occurred, except for \s-1SGC
-\&\s0(Server Gated Cryptography). For \s-1SGC,\s0 \fISSL_do_handshake()\fR may return with \-1,
-but \fISSL_get_error()\fR will yield \fB\s-1SSL_ERROR_WANT_READ/WRITE\s0\fR and
-\&\fISSL_do_handshake()\fR should be called again.
+once the handshake has been finished or an error occurred.
.PP
If the underlying \s-1BIO\s0 is \fBnon-blocking\fR, \fISSL_do_handshake()\fR will also return
when the underlying \s-1BIO\s0 could not satisfy the needs of \fISSL_do_handshake()\fR
diff --git a/secure/lib/libssl/man/SSL_free.3 b/secure/lib/libssl/man/SSL_free.3
index f2dc9d8..1c87807 100644
--- a/secure/lib/libssl/man/SSL_free.3
+++ b/secure/lib/libssl/man/SSL_free.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "SSL_free 3"
-.TH SSL_free 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH SSL_free 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libssl/man/SSL_get_SSL_CTX.3 b/secure/lib/libssl/man/SSL_get_SSL_CTX.3
index e33e11e..2960a43 100644
--- a/secure/lib/libssl/man/SSL_get_SSL_CTX.3
+++ b/secure/lib/libssl/man/SSL_get_SSL_CTX.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "SSL_get_SSL_CTX 3"
-.TH SSL_get_SSL_CTX 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH SSL_get_SSL_CTX 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libssl/man/SSL_get_ciphers.3 b/secure/lib/libssl/man/SSL_get_ciphers.3
index e31ba68..37fa048 100644
--- a/secure/lib/libssl/man/SSL_get_ciphers.3
+++ b/secure/lib/libssl/man/SSL_get_ciphers.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "SSL_get_ciphers 3"
-.TH SSL_get_ciphers 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH SSL_get_ciphers 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libssl/man/SSL_get_client_CA_list.3 b/secure/lib/libssl/man/SSL_get_client_CA_list.3
index 47a8ba5..370f86f 100644
--- a/secure/lib/libssl/man/SSL_get_client_CA_list.3
+++ b/secure/lib/libssl/man/SSL_get_client_CA_list.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "SSL_get_client_CA_list 3"
-.TH SSL_get_client_CA_list 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH SSL_get_client_CA_list 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libssl/man/SSL_get_current_cipher.3 b/secure/lib/libssl/man/SSL_get_current_cipher.3
index 041ec39..1c27046 100644
--- a/secure/lib/libssl/man/SSL_get_current_cipher.3
+++ b/secure/lib/libssl/man/SSL_get_current_cipher.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "SSL_get_current_cipher 3"
-.TH SSL_get_current_cipher 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH SSL_get_current_cipher 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libssl/man/SSL_get_default_timeout.3 b/secure/lib/libssl/man/SSL_get_default_timeout.3
index fd3298a..bfa05ef 100644
--- a/secure/lib/libssl/man/SSL_get_default_timeout.3
+++ b/secure/lib/libssl/man/SSL_get_default_timeout.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "SSL_get_default_timeout 3"
-.TH SSL_get_default_timeout 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH SSL_get_default_timeout 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libssl/man/SSL_get_error.3 b/secure/lib/libssl/man/SSL_get_error.3
index ce9d766..68201a0 100644
--- a/secure/lib/libssl/man/SSL_get_error.3
+++ b/secure/lib/libssl/man/SSL_get_error.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "SSL_get_error 3"
-.TH SSL_get_error 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH SSL_get_error 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libssl/man/SSL_get_ex_data_X509_STORE_CTX_idx.3 b/secure/lib/libssl/man/SSL_get_ex_data_X509_STORE_CTX_idx.3
index 0758afa..0f067ed 100644
--- a/secure/lib/libssl/man/SSL_get_ex_data_X509_STORE_CTX_idx.3
+++ b/secure/lib/libssl/man/SSL_get_ex_data_X509_STORE_CTX_idx.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "SSL_get_ex_data_X509_STORE_CTX_idx 3"
-.TH SSL_get_ex_data_X509_STORE_CTX_idx 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH SSL_get_ex_data_X509_STORE_CTX_idx 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libssl/man/SSL_get_ex_new_index.3 b/secure/lib/libssl/man/SSL_get_ex_new_index.3
index 8343610..3a7177c 100644
--- a/secure/lib/libssl/man/SSL_get_ex_new_index.3
+++ b/secure/lib/libssl/man/SSL_get_ex_new_index.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "SSL_get_ex_new_index 3"
-.TH SSL_get_ex_new_index 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH SSL_get_ex_new_index 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libssl/man/SSL_get_fd.3 b/secure/lib/libssl/man/SSL_get_fd.3
index 610e409..1660074 100644
--- a/secure/lib/libssl/man/SSL_get_fd.3
+++ b/secure/lib/libssl/man/SSL_get_fd.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "SSL_get_fd 3"
-.TH SSL_get_fd 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH SSL_get_fd 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libssl/man/SSL_get_peer_cert_chain.3 b/secure/lib/libssl/man/SSL_get_peer_cert_chain.3
index e63045b..3659142 100644
--- a/secure/lib/libssl/man/SSL_get_peer_cert_chain.3
+++ b/secure/lib/libssl/man/SSL_get_peer_cert_chain.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "SSL_get_peer_cert_chain 3"
-.TH SSL_get_peer_cert_chain 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH SSL_get_peer_cert_chain 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libssl/man/SSL_get_peer_certificate.3 b/secure/lib/libssl/man/SSL_get_peer_certificate.3
index b908dd7..2199634 100644
--- a/secure/lib/libssl/man/SSL_get_peer_certificate.3
+++ b/secure/lib/libssl/man/SSL_get_peer_certificate.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "SSL_get_peer_certificate 3"
-.TH SSL_get_peer_certificate 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH SSL_get_peer_certificate 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libssl/man/SSL_get_psk_identity.3 b/secure/lib/libssl/man/SSL_get_psk_identity.3
index 7849428..a67c8a1 100644
--- a/secure/lib/libssl/man/SSL_get_psk_identity.3
+++ b/secure/lib/libssl/man/SSL_get_psk_identity.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "SSL_get_psk_identity 3"
-.TH SSL_get_psk_identity 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH SSL_get_psk_identity 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libssl/man/SSL_get_rbio.3 b/secure/lib/libssl/man/SSL_get_rbio.3
index b4f6682..8e2aca5 100644
--- a/secure/lib/libssl/man/SSL_get_rbio.3
+++ b/secure/lib/libssl/man/SSL_get_rbio.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "SSL_get_rbio 3"
-.TH SSL_get_rbio 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH SSL_get_rbio 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libssl/man/SSL_get_session.3 b/secure/lib/libssl/man/SSL_get_session.3
index 58ccee0..8071642 100644
--- a/secure/lib/libssl/man/SSL_get_session.3
+++ b/secure/lib/libssl/man/SSL_get_session.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "SSL_get_session 3"
-.TH SSL_get_session 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH SSL_get_session 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libssl/man/SSL_get_verify_result.3 b/secure/lib/libssl/man/SSL_get_verify_result.3
index 898c0a0..85bd8a7 100644
--- a/secure/lib/libssl/man/SSL_get_verify_result.3
+++ b/secure/lib/libssl/man/SSL_get_verify_result.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "SSL_get_verify_result 3"
-.TH SSL_get_verify_result 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH SSL_get_verify_result 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libssl/man/SSL_get_version.3 b/secure/lib/libssl/man/SSL_get_version.3
index 672e51f..faf1c43 100644
--- a/secure/lib/libssl/man/SSL_get_version.3
+++ b/secure/lib/libssl/man/SSL_get_version.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "SSL_get_version 3"
-.TH SSL_get_version 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH SSL_get_version 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libssl/man/SSL_library_init.3 b/secure/lib/libssl/man/SSL_library_init.3
index 41c9a78..bc49f6c 100644
--- a/secure/lib/libssl/man/SSL_library_init.3
+++ b/secure/lib/libssl/man/SSL_library_init.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "SSL_library_init 3"
-.TH SSL_library_init 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH SSL_library_init 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libssl/man/SSL_load_client_CA_file.3 b/secure/lib/libssl/man/SSL_load_client_CA_file.3
index 2fadca2..4382fea 100644
--- a/secure/lib/libssl/man/SSL_load_client_CA_file.3
+++ b/secure/lib/libssl/man/SSL_load_client_CA_file.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "SSL_load_client_CA_file 3"
-.TH SSL_load_client_CA_file 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH SSL_load_client_CA_file 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libssl/man/SSL_new.3 b/secure/lib/libssl/man/SSL_new.3
index dd76ac5..a6a5319 100644
--- a/secure/lib/libssl/man/SSL_new.3
+++ b/secure/lib/libssl/man/SSL_new.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "SSL_new 3"
-.TH SSL_new 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH SSL_new 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libssl/man/SSL_pending.3 b/secure/lib/libssl/man/SSL_pending.3
index 975f6e1..1f25900 100644
--- a/secure/lib/libssl/man/SSL_pending.3
+++ b/secure/lib/libssl/man/SSL_pending.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "SSL_pending 3"
-.TH SSL_pending 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH SSL_pending 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libssl/man/SSL_read.3 b/secure/lib/libssl/man/SSL_read.3
index 5cb35f8..9f899c5 100644
--- a/secure/lib/libssl/man/SSL_read.3
+++ b/secure/lib/libssl/man/SSL_read.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "SSL_read 3"
-.TH SSL_read 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH SSL_read 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libssl/man/SSL_rstate_string.3 b/secure/lib/libssl/man/SSL_rstate_string.3
index 6c83879..ba560a5 100644
--- a/secure/lib/libssl/man/SSL_rstate_string.3
+++ b/secure/lib/libssl/man/SSL_rstate_string.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "SSL_rstate_string 3"
-.TH SSL_rstate_string 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH SSL_rstate_string 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libssl/man/SSL_session_reused.3 b/secure/lib/libssl/man/SSL_session_reused.3
index 278e81a..c977ef6 100644
--- a/secure/lib/libssl/man/SSL_session_reused.3
+++ b/secure/lib/libssl/man/SSL_session_reused.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "SSL_session_reused 3"
-.TH SSL_session_reused 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH SSL_session_reused 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libssl/man/SSL_set_bio.3 b/secure/lib/libssl/man/SSL_set_bio.3
index c7c3bf9..d097281 100644
--- a/secure/lib/libssl/man/SSL_set_bio.3
+++ b/secure/lib/libssl/man/SSL_set_bio.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "SSL_set_bio 3"
-.TH SSL_set_bio 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH SSL_set_bio 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libssl/man/SSL_set_connect_state.3 b/secure/lib/libssl/man/SSL_set_connect_state.3
index b937dc1..0fe480a 100644
--- a/secure/lib/libssl/man/SSL_set_connect_state.3
+++ b/secure/lib/libssl/man/SSL_set_connect_state.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "SSL_set_connect_state 3"
-.TH SSL_set_connect_state 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH SSL_set_connect_state 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libssl/man/SSL_set_fd.3 b/secure/lib/libssl/man/SSL_set_fd.3
index 2cb4fdc..56bde1d 100644
--- a/secure/lib/libssl/man/SSL_set_fd.3
+++ b/secure/lib/libssl/man/SSL_set_fd.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "SSL_set_fd 3"
-.TH SSL_set_fd 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH SSL_set_fd 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libssl/man/SSL_set_session.3 b/secure/lib/libssl/man/SSL_set_session.3
index 42c6eb0..63eecd5 100644
--- a/secure/lib/libssl/man/SSL_set_session.3
+++ b/secure/lib/libssl/man/SSL_set_session.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "SSL_set_session 3"
-.TH SSL_set_session 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH SSL_set_session 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libssl/man/SSL_set_shutdown.3 b/secure/lib/libssl/man/SSL_set_shutdown.3
index ec6b0ba..6c401f4 100644
--- a/secure/lib/libssl/man/SSL_set_shutdown.3
+++ b/secure/lib/libssl/man/SSL_set_shutdown.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "SSL_set_shutdown 3"
-.TH SSL_set_shutdown 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH SSL_set_shutdown 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libssl/man/SSL_set_verify_result.3 b/secure/lib/libssl/man/SSL_set_verify_result.3
index 3e00707..f0ce4c3 100644
--- a/secure/lib/libssl/man/SSL_set_verify_result.3
+++ b/secure/lib/libssl/man/SSL_set_verify_result.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "SSL_set_verify_result 3"
-.TH SSL_set_verify_result 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH SSL_set_verify_result 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libssl/man/SSL_shutdown.3 b/secure/lib/libssl/man/SSL_shutdown.3
index 24b81bc..cef5bfb 100644
--- a/secure/lib/libssl/man/SSL_shutdown.3
+++ b/secure/lib/libssl/man/SSL_shutdown.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "SSL_shutdown 3"
-.TH SSL_shutdown 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH SSL_shutdown 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
@@ -218,8 +218,8 @@ erroneous \s-1SSL_ERROR_SYSCALL\s0 may be flagged even though no error occurred.
.IX Item "1"
The shutdown was successfully completed. The \*(L"close notify\*(R" alert was sent
and the peer's \*(L"close notify\*(R" alert was received.
-.IP "\-1" 4
-.IX Item "-1"
+.IP "<0" 4
+.IX Item "<0"
The shutdown was not successful because a fatal error occurred either
at the protocol level or a connection failure occurred. It can also occur if
action is need to continue the operation for non-blocking BIOs.
diff --git a/secure/lib/libssl/man/SSL_state_string.3 b/secure/lib/libssl/man/SSL_state_string.3
index 5c44d91..f9ecb1e 100644
--- a/secure/lib/libssl/man/SSL_state_string.3
+++ b/secure/lib/libssl/man/SSL_state_string.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "SSL_state_string 3"
-.TH SSL_state_string 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH SSL_state_string 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libssl/man/SSL_want.3 b/secure/lib/libssl/man/SSL_want.3
index 87b19d8..b45588f 100644
--- a/secure/lib/libssl/man/SSL_want.3
+++ b/secure/lib/libssl/man/SSL_want.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "SSL_want 3"
-.TH SSL_want 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH SSL_want 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libssl/man/SSL_write.3 b/secure/lib/libssl/man/SSL_write.3
index c66c99d..8b258da 100644
--- a/secure/lib/libssl/man/SSL_write.3
+++ b/secure/lib/libssl/man/SSL_write.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "SSL_write 3"
-.TH SSL_write 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH SSL_write 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libssl/man/d2i_SSL_SESSION.3 b/secure/lib/libssl/man/d2i_SSL_SESSION.3
index fc6269a..02f691e 100644
--- a/secure/lib/libssl/man/d2i_SSL_SESSION.3
+++ b/secure/lib/libssl/man/d2i_SSL_SESSION.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "d2i_SSL_SESSION 3"
-.TH d2i_SSL_SESSION 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH d2i_SSL_SESSION 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/lib/libssl/man/ssl.3 b/secure/lib/libssl/man/ssl.3
index b4c2649..c155431 100644
--- a/secure/lib/libssl/man/ssl.3
+++ b/secure/lib/libssl/man/ssl.3
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "ssl 3"
-.TH ssl 3 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH ssl 3 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
@@ -467,6 +467,10 @@ session instead of a context.
.IX Item "int SSL_CTX_use_certificate_ASN1(SSL_CTX *ctx, int len, unsigned char *d);"
.IP "int \fBSSL_CTX_use_certificate_file\fR(\s-1SSL_CTX\s0 *ctx, char *file, int type);" 4
.IX Item "int SSL_CTX_use_certificate_file(SSL_CTX *ctx, char *file, int type);"
+.IP "X509 *\fBSSL_CTX_get0_certificate\fR(const \s-1SSL_CTX\s0 *ctx);" 4
+.IX Item "X509 *SSL_CTX_get0_certificate(const SSL_CTX *ctx);"
+.IP "\s-1EVP_PKEY\s0 *\fBSSL_CTX_get0_privatekey\fR(const \s-1SSL_CTX\s0 *ctx);" 4
+.IX Item "EVP_PKEY *SSL_CTX_get0_privatekey(const SSL_CTX *ctx);"
.IP "void \fBSSL_CTX_set_psk_client_callback\fR(\s-1SSL_CTX\s0 *ctx, unsigned int (*callback)(\s-1SSL\s0 *ssl, const char *hint, char *identity, unsigned int max_identity_len, unsigned char *psk, unsigned int max_psk_len));" 4
.IX Item "void SSL_CTX_set_psk_client_callback(SSL_CTX *ctx, unsigned int (*callback)(SSL *ssl, const char *hint, char *identity, unsigned int max_identity_len, unsigned char *psk, unsigned int max_psk_len));"
.IP "int \fBSSL_CTX_use_psk_identity_hint\fR(\s-1SSL_CTX\s0 *ctx, const char *hint);" 4
@@ -591,8 +595,8 @@ connection defined in the \fB\s-1SSL\s0\fR structure.
.IX Item "STACK *SSL_get_peer_cert_chain(const SSL *ssl);"
.IP "X509 *\fBSSL_get_peer_certificate\fR(const \s-1SSL\s0 *ssl);" 4
.IX Item "X509 *SSL_get_peer_certificate(const SSL *ssl);"
-.IP "\s-1EVP_PKEY\s0 *\fBSSL_get_privatekey\fR(\s-1SSL\s0 *ssl);" 4
-.IX Item "EVP_PKEY *SSL_get_privatekey(SSL *ssl);"
+.IP "\s-1EVP_PKEY\s0 *\fBSSL_get_privatekey\fR(const \s-1SSL\s0 *ssl);" 4
+.IX Item "EVP_PKEY *SSL_get_privatekey(const SSL *ssl);"
.IP "int \fBSSL_get_quiet_shutdown\fR(const \s-1SSL\s0 *ssl);" 4
.IX Item "int SSL_get_quiet_shutdown(const SSL *ssl);"
.IP "\s-1BIO\s0 *\fBSSL_get_rbio\fR(const \s-1SSL\s0 *ssl);" 4
diff --git a/secure/usr.bin/openssl/man/CA.pl.1 b/secure/usr.bin/openssl/man/CA.pl.1
index feb02cf..d70ef8c 100644
--- a/secure/usr.bin/openssl/man/CA.pl.1
+++ b/secure/usr.bin/openssl/man/CA.pl.1
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "CA.PL 1"
-.TH CA.PL 1 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH CA.PL 1 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/usr.bin/openssl/man/asn1parse.1 b/secure/usr.bin/openssl/man/asn1parse.1
index 5cdea68..5b30f3d 100644
--- a/secure/usr.bin/openssl/man/asn1parse.1
+++ b/secure/usr.bin/openssl/man/asn1parse.1
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "ASN1PARSE 1"
-.TH ASN1PARSE 1 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH ASN1PARSE 1 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/usr.bin/openssl/man/c_rehash.1 b/secure/usr.bin/openssl/man/c_rehash.1
index 3b0365b..1f26bb3 100644
--- a/secure/usr.bin/openssl/man/c_rehash.1
+++ b/secure/usr.bin/openssl/man/c_rehash.1
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "C_REHASH 1"
-.TH C_REHASH 1 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH C_REHASH 1 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
@@ -143,12 +143,18 @@ c_rehash \- Create symbolic links to files named by the hash values
.SH "SYNOPSIS"
.IX Header "SYNOPSIS"
\&\fBc_rehash\fR
+\&\fB[\-old]\fR
+\&\fB[\-h]\fR
+\&\fB[\-n]\fR
+\&\fB[\-v]\fR
[ \fIdirectory\fR...]
.SH "DESCRIPTION"
.IX Header "DESCRIPTION"
-\&\fBc_rehash\fR scans directories and calculates a hash value of each \f(CW\*(C`.pem\*(C'\fR
+\&\fBc_rehash\fR scans directories and calculates a hash value of each
+\&\f(CW\*(C`.pem\*(C'\fR, \f(CW\*(C`.crt\*(C'\fR, \f(CW\*(C`.cer\*(C'\fR, or \f(CW\*(C`.crl\*(C'\fR
file in the specified directory list and creates symbolic links
for each file, where the name of the link is the hash value.
+(If the platform does not support symbolic links, a copy is made.)
This utility is useful as many programs that use OpenSSL require
directories to be set up like this in order to find certificates.
.PP
@@ -166,6 +172,7 @@ is a hexadecimal character and \fBD\fR is a single decimal digit.
When processing a directory, \fBc_rehash\fR will first remove all links
that have a name in that syntax. If you have links in that format
used for other purposes, they will be removed.
+To skip the removal step, use the \fB\-n\fR flag.
Hashes for \s-1CRL\s0's look similar except the letter \fBr\fR appears after
the period, like this: \f(CW\*(C`HHHHHHHH.rD\*(C'\fR.
.PP
@@ -174,7 +181,7 @@ incrementing the \fBD\fR value. Duplicates are found by comparing the
full \s-1SHA\-1\s0 fingerprint. A warning will be displayed if a duplicate
is found.
.PP
-A warning will also be displayed if there are \fB.pem\fR files that
+A warning will also be displayed if there are files that
cannot be parsed as either a certificate or a \s-1CRL.\s0
.PP
The program uses the \fBopenssl\fR program to compute the hashes and
@@ -184,13 +191,31 @@ Any program can be used, it will be invoked as follows for either
a certificate or \s-1CRL:\s0
.PP
.Vb 2
-\& $OPENSSL x509 \-hash \-fingerprint \-noout \-in FFFFFF
-\& $OPENSSL crl \-hash \-fingerprint \-noout \-in FFFFFF
+\& $OPENSSL x509 \-hash \-fingerprint \-noout \-in FILENAME
+\& $OPENSSL crl \-hash \-fingerprint \-noout \-in FILENAME
.Ve
.PP
-where \fB\s-1FFFFFF\s0\fR is the filename. It must output the hash of the
+where \fB\s-1FILENAME\s0\fR is the filename. It must output the hash of the
file on the first line, and the fingerprint on the second,
optionally prefixed with some text and an equals sign.
+.SH "OPTIONS"
+.IX Header "OPTIONS"
+.IP "\fB\-old\fR" 4
+.IX Item "-old"
+Use old-style hashing (\s-1MD5,\s0 as opposed to \s-1SHA\-1\s0) for generating
+links for releases before 1.0.0. Note that current versions will
+not use the old style.
+.IP "\fB\-h\fR" 4
+.IX Item "-h"
+Display a brief usage message.
+.IP "\fB\-n\fR" 4
+.IX Item "-n"
+Do not remove existing links.
+This is needed when keeping new and old-style links in the same directory.
+.IP "\fB\-v\fR" 4
+.IX Item "-v"
+Print messages about old links removed and new links created.
+By default, \fBc_rehash\fR only lists each directory as it is processed.
.SH "ENVIRONMENT"
.IX Header "ENVIRONMENT"
.IP "\fB\s-1OPENSSL\s0\fR" 4
diff --git a/secure/usr.bin/openssl/man/ca.1 b/secure/usr.bin/openssl/man/ca.1
index 76df602..0026b4c 100644
--- a/secure/usr.bin/openssl/man/ca.1
+++ b/secure/usr.bin/openssl/man/ca.1
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "CA 1"
-.TH CA 1 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH CA 1 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/usr.bin/openssl/man/ciphers.1 b/secure/usr.bin/openssl/man/ciphers.1
index a79ee7a..ff87f0d 100644
--- a/secure/usr.bin/openssl/man/ciphers.1
+++ b/secure/usr.bin/openssl/man/ciphers.1
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "CIPHERS 1"
-.TH CIPHERS 1 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH CIPHERS 1 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
@@ -281,13 +281,13 @@ cipher suites using \s-1RSA\s0 key exchange.
.IP "\fBkDHr\fR, \fBkDHd\fR, \fBkDH\fR" 4
.IX Item "kDHr, kDHd, kDH"
cipher suites using \s-1DH\s0 key agreement and \s-1DH\s0 certificates signed by CAs with \s-1RSA\s0
-and \s-1DSS\s0 keys or either respectively. Not implemented.
-.IP "\fBkEDH\fR" 4
-.IX Item "kEDH"
+and \s-1DSS\s0 keys or either respectively.
+.IP "\fBkDHE\fR, \fBkEDH\fR" 4
+.IX Item "kDHE, kEDH"
cipher suites using ephemeral \s-1DH\s0 key agreement, including anonymous cipher
suites.
-.IP "\fB\s-1EDH\s0\fR" 4
-.IX Item "EDH"
+.IP "\fB\s-1DHE\s0\fR, \fB\s-1EDH\s0\fR" 4
+.IX Item "DHE, EDH"
cipher suites using authenticated ephemeral \s-1DH\s0 key agreement.
.IP "\fB\s-1ADH\s0\fR" 4
.IX Item "ADH"
@@ -300,12 +300,12 @@ cipher suites using \s-1DH,\s0 including anonymous \s-1DH,\s0 ephemeral \s-1DH\s
.IX Item "kECDHr, kECDHe, kECDH"
cipher suites using fixed \s-1ECDH\s0 key agreement signed by CAs with \s-1RSA\s0 and \s-1ECDSA\s0
keys or either respectively.
-.IP "\fBkEECDH\fR" 4
-.IX Item "kEECDH"
+.IP "\fBkECDHE\fR, \fBkEECDH\fR" 4
+.IX Item "kECDHE, kEECDH"
cipher suites using ephemeral \s-1ECDH\s0 key agreement, including anonymous
cipher suites.
-.IP "\fB\s-1EECDHE\s0\fR" 4
-.IX Item "EECDHE"
+.IP "\fB\s-1ECDHE\s0\fR, \fB\s-1EECDH\s0\fR" 4
+.IX Item "ECDHE, EECDH"
cipher suites using authenticated ephemeral \s-1ECDH\s0 key agreement.
.IP "\fB\s-1AECDH\s0\fR" 4
.IX Item "AECDH"
@@ -323,7 +323,7 @@ cipher suites using \s-1DSS\s0 authentication, i.e. the certificates carry \s-1D
.IP "\fBaDH\fR" 4
.IX Item "aDH"
cipher suites effectively using \s-1DH\s0 authentication, i.e. the certificates carry
-\&\s-1DH\s0 keys. Not implemented.
+\&\s-1DH\s0 keys.
.IP "\fBaECDH\fR" 4
.IX Item "aECDH"
cipher suites effectively using \s-1ECDH\s0 authentication, i.e. the certificates
@@ -401,6 +401,17 @@ cipher suites using \s-1GOST 28147\-89 MAC \s0\fBinstead of\fR \s-1HMAC.\s0
.IP "\fB\s-1PSK\s0\fR" 4
.IX Item "PSK"
cipher suites using pre-shared keys (\s-1PSK\s0).
+.IP "\fB\s-1SUITEB128\s0\fR, \fB\s-1SUITEB128ONLY\s0\fR, \fB\s-1SUITEB192\s0\fR" 4
+.IX Item "SUITEB128, SUITEB128ONLY, SUITEB192"
+enables suite B mode operation using 128 (permitting 192 bit mode by peer)
+128 bit (not permitting 192 bit by peer) or 192 bit level of security
+respectively. If used these cipherstrings should appear first in the cipher
+list and anything after them is ignored. Setting Suite B mode has additional
+consequences required to comply with \s-1RFC6460.\s0 In particular the supported
+signature algorithms is reduced to support only \s-1ECDSA\s0 and \s-1SHA256\s0 or \s-1SHA384,\s0
+only the elliptic curves P\-256 and P\-384 can be used and only the two suite B
+compliant ciphersuites (\s-1ECDHE\-ECDSA\-AES128\-GCM\-SHA256\s0 and
+\&\s-1ECDHE\-ECDSA\-AES256\-GCM\-SHA384\s0) are permissible.
.SH "CIPHER SUITE NAMES"
.IX Header "CIPHER SUITE NAMES"
The following lists give the \s-1SSL\s0 or \s-1TLS\s0 cipher suites names from the
@@ -421,12 +432,10 @@ e.g. \s-1DES\-CBC3\-SHA.\s0 In these cases, \s-1RSA\s0 authentication is used.
\& SSL_RSA_WITH_DES_CBC_SHA DES\-CBC\-SHA
\& SSL_RSA_WITH_3DES_EDE_CBC_SHA DES\-CBC3\-SHA
\&
-\& SSL_DH_DSS_EXPORT_WITH_DES40_CBC_SHA Not implemented.
-\& SSL_DH_DSS_WITH_DES_CBC_SHA Not implemented.
-\& SSL_DH_DSS_WITH_3DES_EDE_CBC_SHA Not implemented.
-\& SSL_DH_RSA_EXPORT_WITH_DES40_CBC_SHA Not implemented.
-\& SSL_DH_RSA_WITH_DES_CBC_SHA Not implemented.
-\& SSL_DH_RSA_WITH_3DES_EDE_CBC_SHA Not implemented.
+\& SSL_DH_DSS_WITH_DES_CBC_SHA DH\-DSS\-DES\-CBC\-SHA
+\& SSL_DH_DSS_WITH_3DES_EDE_CBC_SHA DH\-DSS\-DES\-CBC3\-SHA
+\& SSL_DH_RSA_WITH_DES_CBC_SHA DH\-RSA\-DES\-CBC\-SHA
+\& SSL_DH_RSA_WITH_3DES_EDE_CBC_SHA DH\-RSA\-DES\-CBC3\-SHA
\& SSL_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA EXP\-EDH\-DSS\-DES\-CBC\-SHA
\& SSL_DHE_DSS_WITH_DES_CBC_SHA EDH\-DSS\-CBC\-SHA
\& SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA EDH\-DSS\-DES\-CBC3\-SHA
@@ -483,10 +492,10 @@ e.g. \s-1DES\-CBC3\-SHA.\s0 In these cases, \s-1RSA\s0 authentication is used.
\& TLS_RSA_WITH_AES_128_CBC_SHA AES128\-SHA
\& TLS_RSA_WITH_AES_256_CBC_SHA AES256\-SHA
\&
-\& TLS_DH_DSS_WITH_AES_128_CBC_SHA Not implemented.
-\& TLS_DH_DSS_WITH_AES_256_CBC_SHA Not implemented.
-\& TLS_DH_RSA_WITH_AES_128_CBC_SHA Not implemented.
-\& TLS_DH_RSA_WITH_AES_256_CBC_SHA Not implemented.
+\& TLS_DH_DSS_WITH_AES_128_CBC_SHA DH\-DSS\-AES128\-SHA
+\& TLS_DH_DSS_WITH_AES_256_CBC_SHA DH\-DSS\-AES256\-SHA
+\& TLS_DH_RSA_WITH_AES_128_CBC_SHA DH\-RSA\-AES128\-SHA
+\& TLS_DH_RSA_WITH_AES_256_CBC_SHA DH\-RSA\-AES256\-SHA
\&
\& TLS_DHE_DSS_WITH_AES_128_CBC_SHA DHE\-DSS\-AES128\-SHA
\& TLS_DHE_DSS_WITH_AES_256_CBC_SHA DHE\-DSS\-AES256\-SHA
@@ -502,10 +511,10 @@ e.g. \s-1DES\-CBC3\-SHA.\s0 In these cases, \s-1RSA\s0 authentication is used.
\& TLS_RSA_WITH_CAMELLIA_128_CBC_SHA CAMELLIA128\-SHA
\& TLS_RSA_WITH_CAMELLIA_256_CBC_SHA CAMELLIA256\-SHA
\&
-\& TLS_DH_DSS_WITH_CAMELLIA_128_CBC_SHA Not implemented.
-\& TLS_DH_DSS_WITH_CAMELLIA_256_CBC_SHA Not implemented.
-\& TLS_DH_RSA_WITH_CAMELLIA_128_CBC_SHA Not implemented.
-\& TLS_DH_RSA_WITH_CAMELLIA_256_CBC_SHA Not implemented.
+\& TLS_DH_DSS_WITH_CAMELLIA_128_CBC_SHA DH\-DSS\-CAMELLIA128\-SHA
+\& TLS_DH_DSS_WITH_CAMELLIA_256_CBC_SHA DH\-DSS\-CAMELLIA256\-SHA
+\& TLS_DH_RSA_WITH_CAMELLIA_128_CBC_SHA DH\-RSA\-CAMELLIA128\-SHA
+\& TLS_DH_RSA_WITH_CAMELLIA_256_CBC_SHA DH\-RSA\-CAMELLIA256\-SHA
\&
\& TLS_DHE_DSS_WITH_CAMELLIA_128_CBC_SHA DHE\-DSS\-CAMELLIA128\-SHA
\& TLS_DHE_DSS_WITH_CAMELLIA_256_CBC_SHA DHE\-DSS\-CAMELLIA256\-SHA
@@ -520,8 +529,8 @@ e.g. \s-1DES\-CBC3\-SHA.\s0 In these cases, \s-1RSA\s0 authentication is used.
.Vb 1
\& TLS_RSA_WITH_SEED_CBC_SHA SEED\-SHA
\&
-\& TLS_DH_DSS_WITH_SEED_CBC_SHA Not implemented.
-\& TLS_DH_RSA_WITH_SEED_CBC_SHA Not implemented.
+\& TLS_DH_DSS_WITH_SEED_CBC_SHA DH\-DSS\-SEED\-SHA
+\& TLS_DH_RSA_WITH_SEED_CBC_SHA DH\-RSA\-SEED\-SHA
\&
\& TLS_DHE_DSS_WITH_SEED_CBC_SHA DHE\-DSS\-SEED\-SHA
\& TLS_DHE_RSA_WITH_SEED_CBC_SHA DHE\-RSA\-SEED\-SHA
@@ -593,15 +602,15 @@ Note: these ciphers can also be used in \s-1SSL\s0 v3.
\& TLS_RSA_WITH_AES_128_GCM_SHA256 AES128\-GCM\-SHA256
\& TLS_RSA_WITH_AES_256_GCM_SHA384 AES256\-GCM\-SHA384
\&
-\& TLS_DH_RSA_WITH_AES_128_CBC_SHA256 Not implemented.
-\& TLS_DH_RSA_WITH_AES_256_CBC_SHA256 Not implemented.
-\& TLS_DH_RSA_WITH_AES_128_GCM_SHA256 Not implemented.
-\& TLS_DH_RSA_WITH_AES_256_GCM_SHA384 Not implemented.
+\& TLS_DH_RSA_WITH_AES_128_CBC_SHA256 DH\-RSA\-AES128\-SHA256
+\& TLS_DH_RSA_WITH_AES_256_CBC_SHA256 DH\-RSA\-AES256\-SHA256
+\& TLS_DH_RSA_WITH_AES_128_GCM_SHA256 DH\-RSA\-AES128\-GCM\-SHA256
+\& TLS_DH_RSA_WITH_AES_256_GCM_SHA384 DH\-RSA\-AES256\-GCM\-SHA384
\&
-\& TLS_DH_DSS_WITH_AES_128_CBC_SHA256 Not implemented.
-\& TLS_DH_DSS_WITH_AES_256_CBC_SHA256 Not implemented.
-\& TLS_DH_DSS_WITH_AES_128_GCM_SHA256 Not implemented.
-\& TLS_DH_DSS_WITH_AES_256_GCM_SHA384 Not implemented.
+\& TLS_DH_DSS_WITH_AES_128_CBC_SHA256 DH\-DSS\-AES128\-SHA256
+\& TLS_DH_DSS_WITH_AES_256_CBC_SHA256 DH\-DSS\-AES256\-SHA256
+\& TLS_DH_DSS_WITH_AES_128_GCM_SHA256 DH\-DSS\-AES128\-GCM\-SHA256
+\& TLS_DH_DSS_WITH_AES_256_GCM_SHA384 DH\-DSS\-AES256\-GCM\-SHA384
\&
\& TLS_DHE_RSA_WITH_AES_128_CBC_SHA256 DHE\-RSA\-AES128\-SHA256
\& TLS_DHE_RSA_WITH_AES_256_CBC_SHA256 DHE\-RSA\-AES256\-SHA256
@@ -659,9 +668,6 @@ Note: these ciphers can also be used in \s-1SSL\s0 v3.
.Ve
.SH "NOTES"
.IX Header "NOTES"
-The non-ephemeral \s-1DH\s0 modes are currently unimplemented in OpenSSL
-because there is no support for \s-1DH\s0 certificates.
-.PP
Some compiled versions of OpenSSL may not include all the ciphers
listed here because some ciphers were excluded at compile time.
.SH "EXAMPLES"
diff --git a/secure/usr.bin/openssl/man/cms.1 b/secure/usr.bin/openssl/man/cms.1
index 106bb70..bb4dae5 100644
--- a/secure/usr.bin/openssl/man/cms.1
+++ b/secure/usr.bin/openssl/man/cms.1
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "CMS 1"
-.TH CMS 1 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH CMS 1 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
@@ -194,6 +194,7 @@ cms \- CMS utility
[\fB\-secretkeyid id\fR]
[\fB\-econtent_type type\fR]
[\fB\-inkey file\fR]
+[\fB\-keyopt name:parameter\fR]
[\fB\-passin arg\fR]
[\fB\-rand file(s)\fR]
[\fBcert.pem...\fR]
@@ -412,8 +413,13 @@ verified then the signers certificates will be written to this file if the
verification was successful.
.IP "\fB\-recip file\fR" 4
.IX Item "-recip file"
-the recipients certificate when decrypting a message. This certificate
-must match one of the recipients of the message or an error occurs.
+when decrypting a message this specifies the recipients certificate. The
+certificate must match one of the recipients of the message or an error
+occurs.
+.Sp
+When encrypting a message this option may be used multiple times to specify
+each recipient. This form \fBmust\fR be used if customised parameters are
+required (for example to specify RSA-OAEP).
.IP "\fB\-keyid\fR" 4
.IX Item "-keyid"
use subject key identifier to identify certificates instead of issuer name and
@@ -462,6 +468,12 @@ corresponding certificate. If this option is not specified then the
private key must be included in the certificate file specified with
the \fB\-recip\fR or \fB\-signer\fR file. When signing this option can be used
multiple times to specify successive keys.
+.IP "\fB\-keyopt name:opt\fR" 4
+.IX Item "-keyopt name:opt"
+for signing and encryption this option can be used multiple times to
+set customised parameters for the preceding key or certificate. It can
+currently be used to set RSA-PSS for signing, RSA-OAEP for encryption
+or to modify default parameters for \s-1ECDH.\s0
.IP "\fB\-passin arg\fR" 4
.IX Item "-passin arg"
the private key password source. For more information about the format of \fBarg\fR
@@ -570,6 +582,10 @@ The \fB\-compress\fR option.
.PP
The \fB\-secretkey\fR option when used with \fB\-encrypt\fR.
.PP
+The use of \s-1PSS\s0 with \fB\-sign\fR.
+.PP
+The use of \s-1OAEP\s0 or non-RSA keys with \fB\-encrypt\fR.
+.PP
Additionally the \fB\-EncryptedData_create\fR and \fB\-data_create\fR type cannot
be processed by the older \fBsmime\fR command.
.SH "EXAMPLES"
@@ -676,6 +692,27 @@ Add a signer to an existing message:
.Vb 1
\& openssl cms \-resign \-in mail.msg \-signer newsign.pem \-out mail2.msg
.Ve
+.PP
+Sign mail using RSA-PSS:
+.PP
+.Vb 2
+\& openssl cms \-sign \-in message.txt \-text \-out mail.msg \e
+\& \-signer mycert.pem \-keyopt rsa_padding_mode:pss
+.Ve
+.PP
+Create encrypted mail using RSA-OAEP:
+.PP
+.Vb 2
+\& openssl cms \-encrypt \-in plain.txt \-out mail.msg \e
+\& \-recip cert.pem \-keyopt rsa_padding_mode:oaep
+.Ve
+.PP
+Use \s-1SHA256 KDF\s0 with an \s-1ECDH\s0 certificate:
+.PP
+.Vb 2
+\& openssl cms \-encrypt \-in plain.txt \-out mail.msg \e
+\& \-recip ecdhcert.pem \-keyopt ecdh_kdf_md:sha256
+.Ve
.SH "BUGS"
.IX Header "BUGS"
The \s-1MIME\s0 parser isn't very clever: it seems to handle most messages that I've
@@ -700,4 +737,14 @@ No revocation checking is done on the signer's certificate.
The use of multiple \fB\-signer\fR options and the \fB\-resign\fR command were first
added in OpenSSL 1.0.0
.PP
-The \-no_alt_chains options was first added to OpenSSL 1.0.1n and 1.0.2b.
+The \fBkeyopt\fR option was first added in OpenSSL 1.1.0
+.PP
+The use of \fB\-recip\fR to specify the recipient when encrypting mail was first
+added to OpenSSL 1.1.0
+.PP
+Support for RSA-OAEP and RSA-PSS was first added to OpenSSL 1.1.0.
+.PP
+The use of non-RSA keys with \fB\-encrypt\fR and \fB\-decrypt\fR was first added
+to OpenSSL 1.1.0.
+.PP
+The \-no_alt_chains options was first added to OpenSSL 1.0.2b.
diff --git a/secure/usr.bin/openssl/man/crl.1 b/secure/usr.bin/openssl/man/crl.1
index 564fce0..352499a 100644
--- a/secure/usr.bin/openssl/man/crl.1
+++ b/secure/usr.bin/openssl/man/crl.1
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "CRL 1"
-.TH CRL 1 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH CRL 1 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/usr.bin/openssl/man/crl2pkcs7.1 b/secure/usr.bin/openssl/man/crl2pkcs7.1
index 8c41ff9..a768c92 100644
--- a/secure/usr.bin/openssl/man/crl2pkcs7.1
+++ b/secure/usr.bin/openssl/man/crl2pkcs7.1
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "CRL2PKCS7 1"
-.TH CRL2PKCS7 1 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH CRL2PKCS7 1 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/usr.bin/openssl/man/dgst.1 b/secure/usr.bin/openssl/man/dgst.1
index c2ec0a8..fdf1535 100644
--- a/secure/usr.bin/openssl/man/dgst.1
+++ b/secure/usr.bin/openssl/man/dgst.1
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "DGST 1"
-.TH DGST 1 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH DGST 1 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/usr.bin/openssl/man/dhparam.1 b/secure/usr.bin/openssl/man/dhparam.1
index ba49bd4..e89a351 100644
--- a/secure/usr.bin/openssl/man/dhparam.1
+++ b/secure/usr.bin/openssl/man/dhparam.1
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "DHPARAM 1"
-.TH DHPARAM 1 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH DHPARAM 1 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/usr.bin/openssl/man/dsa.1 b/secure/usr.bin/openssl/man/dsa.1
index 213c803..da5df42 100644
--- a/secure/usr.bin/openssl/man/dsa.1
+++ b/secure/usr.bin/openssl/man/dsa.1
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "DSA 1"
-.TH DSA 1 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH DSA 1 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/usr.bin/openssl/man/dsaparam.1 b/secure/usr.bin/openssl/man/dsaparam.1
index 2f76249..20e8e68 100644
--- a/secure/usr.bin/openssl/man/dsaparam.1
+++ b/secure/usr.bin/openssl/man/dsaparam.1
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "DSAPARAM 1"
-.TH DSAPARAM 1 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH DSAPARAM 1 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/usr.bin/openssl/man/ec.1 b/secure/usr.bin/openssl/man/ec.1
index 99533b9..24ced4b 100644
--- a/secure/usr.bin/openssl/man/ec.1
+++ b/secure/usr.bin/openssl/man/ec.1
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "EC 1"
-.TH EC 1 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH EC 1 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/usr.bin/openssl/man/ecparam.1 b/secure/usr.bin/openssl/man/ecparam.1
index b03dad4..a615b3f 100644
--- a/secure/usr.bin/openssl/man/ecparam.1
+++ b/secure/usr.bin/openssl/man/ecparam.1
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "ECPARAM 1"
-.TH ECPARAM 1 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH ECPARAM 1 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/usr.bin/openssl/man/enc.1 b/secure/usr.bin/openssl/man/enc.1
index 6a7103f..c119e7e 100644
--- a/secure/usr.bin/openssl/man/enc.1
+++ b/secure/usr.bin/openssl/man/enc.1
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "ENC 1"
-.TH ENC 1 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH ENC 1 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/usr.bin/openssl/man/errstr.1 b/secure/usr.bin/openssl/man/errstr.1
index 29b48ee..c4f1e0a 100644
--- a/secure/usr.bin/openssl/man/errstr.1
+++ b/secure/usr.bin/openssl/man/errstr.1
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "ERRSTR 1"
-.TH ERRSTR 1 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH ERRSTR 1 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/usr.bin/openssl/man/gendsa.1 b/secure/usr.bin/openssl/man/gendsa.1
index 70df180..642e7ad 100644
--- a/secure/usr.bin/openssl/man/gendsa.1
+++ b/secure/usr.bin/openssl/man/gendsa.1
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "GENDSA 1"
-.TH GENDSA 1 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH GENDSA 1 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/usr.bin/openssl/man/genpkey.1 b/secure/usr.bin/openssl/man/genpkey.1
index 0a40a3f..fd2264e 100644
--- a/secure/usr.bin/openssl/man/genpkey.1
+++ b/secure/usr.bin/openssl/man/genpkey.1
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "GENPKEY 1"
-.TH GENPKEY 1 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH GENPKEY 1 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
@@ -232,6 +232,14 @@ The number of bits in the prime parameter \fBp\fR.
.IP "\fBdh_paramgen_generator:value\fR" 4
.IX Item "dh_paramgen_generator:value"
The value to use for the generator \fBg\fR.
+.IP "\fBdh_rfc5114:num\fR" 4
+.IX Item "dh_rfc5114:num"
+If this option is set then the appropriate \s-1RFC5114\s0 parameters are used
+instead of generating new parameters. The value \fBnum\fR can take the
+values 1, 2 or 3 corresponding to \s-1RFC5114 DH\s0 parameters consisting of
+1024 bit group with 160 bit subgroup, 2048 bit group with 224 bit subgroup
+and 2048 bit group with 256 bit subgroup as mentioned in \s-1RFC5114\s0 sections
+2.1, 2.2 and 2.3 respectively.
.SH "EC PARAMETER GENERATION OPTIONS"
.IX Header "EC PARAMETER GENERATION OPTIONS"
.IP "\fBec_paramgen_curve:curve\fR" 4
@@ -308,6 +316,12 @@ Generate 1024 bit \s-1DH\s0 parameters:
\& \-pkeyopt dh_paramgen_prime_len:1024
.Ve
.PP
+Output \s-1RFC5114 2048\s0 bit \s-1DH\s0 parameters with 224 bit subgroup:
+.PP
+.Vb 1
+\& openssl genpkey \-genparam \-algorithm DH \-out dhp.pem \-pkeyopt dh_rfc5114:2
+.Ve
+.PP
Generate \s-1DH\s0 key from parameters:
.PP
.Vb 1
diff --git a/secure/usr.bin/openssl/man/genrsa.1 b/secure/usr.bin/openssl/man/genrsa.1
index babce6d..a701f16 100644
--- a/secure/usr.bin/openssl/man/genrsa.1
+++ b/secure/usr.bin/openssl/man/genrsa.1
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "GENRSA 1"
-.TH GENRSA 1 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH GENRSA 1 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/usr.bin/openssl/man/nseq.1 b/secure/usr.bin/openssl/man/nseq.1
index 796efa4..990d4f7 100644
--- a/secure/usr.bin/openssl/man/nseq.1
+++ b/secure/usr.bin/openssl/man/nseq.1
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "NSEQ 1"
-.TH NSEQ 1 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH NSEQ 1 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/usr.bin/openssl/man/ocsp.1 b/secure/usr.bin/openssl/man/ocsp.1
index d45193d..f99ce3b 100644
--- a/secure/usr.bin/openssl/man/ocsp.1
+++ b/secure/usr.bin/openssl/man/ocsp.1
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "OCSP 1"
-.TH OCSP 1 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH OCSP 1 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
@@ -489,4 +489,4 @@ second file.
.Ve
.SH "HISTORY"
.IX Header "HISTORY"
-The \-no_alt_chains options was first added to OpenSSL 1.0.1n and 1.0.2b.
+The \-no_alt_chains options was first added to OpenSSL 1.0.2b.
diff --git a/secure/usr.bin/openssl/man/openssl.1 b/secure/usr.bin/openssl/man/openssl.1
index b2ae545..b307e03 100644
--- a/secure/usr.bin/openssl/man/openssl.1
+++ b/secure/usr.bin/openssl/man/openssl.1
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "OPENSSL 1"
-.TH OPENSSL 1 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH OPENSSL 1 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/usr.bin/openssl/man/passwd.1 b/secure/usr.bin/openssl/man/passwd.1
index 705a8e3..54e355a 100644
--- a/secure/usr.bin/openssl/man/passwd.1
+++ b/secure/usr.bin/openssl/man/passwd.1
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "PASSWD 1"
-.TH PASSWD 1 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH PASSWD 1 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/usr.bin/openssl/man/pkcs12.1 b/secure/usr.bin/openssl/man/pkcs12.1
index ac98964..85e4b73 100644
--- a/secure/usr.bin/openssl/man/pkcs12.1
+++ b/secure/usr.bin/openssl/man/pkcs12.1
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "PKCS12 1"
-.TH PKCS12 1 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH PKCS12 1 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/usr.bin/openssl/man/pkcs7.1 b/secure/usr.bin/openssl/man/pkcs7.1
index deee40d..d077174 100644
--- a/secure/usr.bin/openssl/man/pkcs7.1
+++ b/secure/usr.bin/openssl/man/pkcs7.1
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "PKCS7 1"
-.TH PKCS7 1 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH PKCS7 1 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/usr.bin/openssl/man/pkcs8.1 b/secure/usr.bin/openssl/man/pkcs8.1
index 5824bd7..5e3dfab 100644
--- a/secure/usr.bin/openssl/man/pkcs8.1
+++ b/secure/usr.bin/openssl/man/pkcs8.1
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "PKCS8 1"
-.TH PKCS8 1 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH PKCS8 1 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
@@ -156,6 +156,7 @@ pkcs8 \- PKCS#8 format private key conversion tool
[\fB\-embed\fR]
[\fB\-nsdb\fR]
[\fB\-v2 alg\fR]
+[\fB\-v2prf alg\fR]
[\fB\-v1 alg\fR]
[\fB\-engine id\fR]
.SH "DESCRIPTION"
@@ -238,6 +239,11 @@ private keys with OpenSSL then this doesn't matter.
.Sp
The \fBalg\fR argument is the encryption algorithm to use, valid values include
\&\fBdes\fR, \fBdes3\fR and \fBrc2\fR. It is recommended that \fBdes3\fR is used.
+.IP "\fB\-v2prf alg\fR" 4
+.IX Item "-v2prf alg"
+This option sets the \s-1PRF\s0 algorithm to use with PKCS#5 v2.0. A typical value
+values would be \fBhmacWithSHA256\fR. If this option isn't set then the default
+for the cipher is used or \fBhmacWithSHA1\fR if there is no default.
.IP "\fB\-v1 alg\fR" 4
.IX Item "-v1 alg"
This option specifies a PKCS#5 v1.5 or PKCS#12 algorithm to use. A complete
@@ -308,6 +314,13 @@ Convert a private from traditional to PKCS#5 v2.0 format using triple
\& openssl pkcs8 \-in key.pem \-topk8 \-v2 des3 \-out enckey.pem
.Ve
.PP
+Convert a private from traditional to PKCS#5 v2.0 format using \s-1AES\s0 with
+256 bits in \s-1CBC\s0 mode and \fBhmacWithSHA256\fR \s-1PRF:\s0
+.PP
+.Vb 1
+\& openssl pkcs8 \-in key.pem \-topk8 \-v2 aes\-256\-cbc \-v2prf hmacWithSHA256 \-out enckey.pem
+.Ve
+.PP
Convert a private key to PKCS#8 using a PKCS#5 1.5 compatible algorithm
(\s-1DES\s0):
.PP
diff --git a/secure/usr.bin/openssl/man/pkey.1 b/secure/usr.bin/openssl/man/pkey.1
index f270aeb..77b824c 100644
--- a/secure/usr.bin/openssl/man/pkey.1
+++ b/secure/usr.bin/openssl/man/pkey.1
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "PKEY 1"
-.TH PKEY 1 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH PKEY 1 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/usr.bin/openssl/man/pkeyparam.1 b/secure/usr.bin/openssl/man/pkeyparam.1
index 8b7d5bc..2df7904 100644
--- a/secure/usr.bin/openssl/man/pkeyparam.1
+++ b/secure/usr.bin/openssl/man/pkeyparam.1
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "PKEYPARAM 1"
-.TH PKEYPARAM 1 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH PKEYPARAM 1 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/usr.bin/openssl/man/pkeyutl.1 b/secure/usr.bin/openssl/man/pkeyutl.1
index 058292b..64ec80e 100644
--- a/secure/usr.bin/openssl/man/pkeyutl.1
+++ b/secure/usr.bin/openssl/man/pkeyutl.1
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "PKEYUTL 1"
-.TH PKEYUTL 1 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH PKEYUTL 1 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/usr.bin/openssl/man/rand.1 b/secure/usr.bin/openssl/man/rand.1
index 6161b76..a1c30f6 100644
--- a/secure/usr.bin/openssl/man/rand.1
+++ b/secure/usr.bin/openssl/man/rand.1
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "RAND 1"
-.TH RAND 1 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH RAND 1 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/usr.bin/openssl/man/req.1 b/secure/usr.bin/openssl/man/req.1
index 38d9849..a404c1c 100644
--- a/secure/usr.bin/openssl/man/req.1
+++ b/secure/usr.bin/openssl/man/req.1
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "REQ 1"
-.TH REQ 1 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH REQ 1 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
@@ -340,8 +340,8 @@ this option outputs a self signed certificate instead of a certificate
request. This is typically used to generate a test certificate or
a self signed root \s-1CA.\s0 The extensions added to the certificate
(if any) are specified in the configuration file. Unless specified
-using the \fBset_serial\fR option \fB0\fR will be used for the serial
-number.
+using the \fBset_serial\fR option, a large random number will be used for
+the serial number.
.IP "\fB\-days n\fR" 4
.IX Item "-days n"
when the \fB\-x509\fR option is being used this specifies the number of
diff --git a/secure/usr.bin/openssl/man/rsa.1 b/secure/usr.bin/openssl/man/rsa.1
index b240fb7..339cbf8 100644
--- a/secure/usr.bin/openssl/man/rsa.1
+++ b/secure/usr.bin/openssl/man/rsa.1
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "RSA 1"
-.TH RSA 1 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH RSA 1 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/usr.bin/openssl/man/rsautl.1 b/secure/usr.bin/openssl/man/rsautl.1
index 368ba02..b9cc868 100644
--- a/secure/usr.bin/openssl/man/rsautl.1
+++ b/secure/usr.bin/openssl/man/rsautl.1
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "RSAUTL 1"
-.TH RSAUTL 1 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH RSAUTL 1 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/usr.bin/openssl/man/s_client.1 b/secure/usr.bin/openssl/man/s_client.1
index 266d567..31064e2 100644
--- a/secure/usr.bin/openssl/man/s_client.1
+++ b/secure/usr.bin/openssl/man/s_client.1
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "S_CLIENT 1"
-.TH S_CLIENT 1 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH S_CLIENT 1 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
@@ -173,6 +173,9 @@ s_client \- SSL/TLS client program
[\fB\-no_ssl2\fR]
[\fB\-no_ssl3\fR]
[\fB\-no_tls1\fR]
+[\fB\-no_tls1_1\fR]
+[\fB\-no_tls1_2\fR]
+[\fB\-fallback_scsv\fR]
[\fB\-bugs\fR]
[\fB\-cipher cipherlist\fR]
[\fB\-serverpref\fR]
@@ -183,6 +186,7 @@ s_client \- SSL/TLS client program
[\fB\-sess_out filename\fR]
[\fB\-sess_in filename\fR]
[\fB\-rand file(s)\fR]
+[\fB\-serverinfo types\fR]
[\fB\-status\fR]
[\fB\-nextprotoneg protocols\fR]
.SH "DESCRIPTION"
@@ -301,16 +305,18 @@ Use the \s-1PSK\s0 identity \fBidentity\fR when using a \s-1PSK\s0 cipher suite.
Use the \s-1PSK\s0 key \fBkey\fR when using a \s-1PSK\s0 cipher suite. The key is
given as a hexadecimal number without leading 0x, for example \-psk
1a2b3c4d.
-.IP "\fB\-ssl2\fR, \fB\-ssl3\fR, \fB\-tls1\fR, \fB\-no_ssl2\fR, \fB\-no_ssl3\fR, \fB\-no_tls1\fR" 4
-.IX Item "-ssl2, -ssl3, -tls1, -no_ssl2, -no_ssl3, -no_tls1"
+.IP "\fB\-ssl2\fR, \fB\-ssl3\fR, \fB\-tls1\fR, \fB\-no_ssl2\fR, \fB\-no_ssl3\fR, \fB\-no_tls1\fR, \fB\-no_tls1_1\fR, \fB\-no_tls1_2\fR" 4
+.IX Item "-ssl2, -ssl3, -tls1, -no_ssl2, -no_ssl3, -no_tls1, -no_tls1_1, -no_tls1_2"
these options disable the use of certain \s-1SSL\s0 or \s-1TLS\s0 protocols. By default
the initial handshake uses a method which should be compatible with all
servers and permit them to use \s-1SSL\s0 v3, \s-1SSL\s0 v2 or \s-1TLS\s0 as appropriate.
.Sp
-Unfortunately there are a lot of ancient and broken servers in use which
+Unfortunately there are still ancient and broken servers in use which
cannot handle this technique and will fail to connect. Some servers only
-work if \s-1TLS\s0 is turned off with the \fB\-no_tls\fR option others will only
-support \s-1SSL\s0 v2 and may need the \fB\-ssl2\fR option.
+work if \s-1TLS\s0 is turned off.
+.IP "\fB\-fallback_scsv\fR" 4
+.IX Item "-fallback_scsv"
+Send \s-1TLS_FALLBACK_SCSV\s0 in the ClientHello.
.IP "\fB\-bugs\fR" 4
.IX Item "-bugs"
there are several known bug in \s-1SSL\s0 and \s-1TLS\s0 implementations. Adding this
@@ -355,6 +361,12 @@ generator, or an \s-1EGD\s0 socket (see \fIRAND_egd\fR\|(3)).
Multiple files can be specified separated by a OS-dependent character.
The separator is \fB;\fR for MS-Windows, \fB,\fR for OpenVMS, and \fB:\fR for
all others.
+.IP "\fB\-serverinfo types\fR" 4
+.IX Item "-serverinfo types"
+a list of comma-separated \s-1TLS\s0 Extension Types (numbers between 0 and
+65535). Each type will be sent as an empty ClientHello \s-1TLS\s0 Extension.
+The server's response (if any) will be encoded and displayed as a \s-1PEM\s0
+file.
.IP "\fB\-status\fR" 4
.IX Item "-status"
sends a certificate status request to the server (\s-1OCSP\s0 stapling). The server
@@ -437,4 +449,4 @@ information whenever a session is renegotiated.
\&\fIsess_id\fR\|(1), \fIs_server\fR\|(1), \fIciphers\fR\|(1)
.SH "HISTORY"
.IX Header "HISTORY"
-The \-no_alt_chains options was first added to OpenSSL 1.0.1n and 1.0.2b.
+The \-no_alt_chains options was first added to OpenSSL 1.0.2b.
diff --git a/secure/usr.bin/openssl/man/s_server.1 b/secure/usr.bin/openssl/man/s_server.1
index e2c2c39..0f3b3c1 100644
--- a/secure/usr.bin/openssl/man/s_server.1
+++ b/secure/usr.bin/openssl/man/s_server.1
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "S_SERVER 1"
-.TH S_SERVER 1 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH S_SERVER 1 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
@@ -181,7 +181,6 @@ s_server \- SSL/TLS server program
[\fB\-no_ssl3\fR]
[\fB\-no_tls1\fR]
[\fB\-no_dhe\fR]
-[\fB\-no_ecdhe\fR]
[\fB\-bugs\fR]
[\fB\-hack\fR]
[\fB\-www\fR]
@@ -192,6 +191,8 @@ s_server \- SSL/TLS server program
[\fB\-no_ticket\fR]
[\fB\-id_prefix arg\fR]
[\fB\-rand file(s)\fR]
+[\fB\-serverinfo file\fR]
+[\fB\-no_resumption_on_reneg\fR]
[\fB\-status\fR]
[\fB\-status_verbose\fR]
[\fB\-status_timeout nsec\fR]
@@ -258,10 +259,6 @@ a static set of parameters hard coded into the s_server program will be used.
.IX Item "-no_dhe"
if this option is set then no \s-1DH\s0 parameters will be loaded effectively
disabling the ephemeral \s-1DH\s0 cipher suites.
-.IP "\fB\-no_ecdhe\fR" 4
-.IX Item "-no_ecdhe"
-if this option is set then no \s-1ECDH\s0 parameters will be loaded effectively
-disabling the ephemeral \s-1ECDH\s0 cipher suites.
.IP "\fB\-no_tmp_rsa\fR" 4
.IX Item "-no_tmp_rsa"
certain export cipher suites sometimes use a temporary \s-1RSA\s0 key, this option
@@ -390,6 +387,16 @@ generator, or an \s-1EGD\s0 socket (see \fIRAND_egd\fR\|(3)).
Multiple files can be specified separated by a OS-dependent character.
The separator is \fB;\fR for MS-Windows, \fB,\fR for OpenVMS, and \fB:\fR for
all others.
+.IP "\fB\-serverinfo file\fR" 4
+.IX Item "-serverinfo file"
+a file containing one or more blocks of \s-1PEM\s0 data. Each \s-1PEM\s0 block
+must encode a \s-1TLS\s0 ServerHello extension (2 bytes type, 2 bytes length,
+followed by \*(L"length\*(R" bytes of extension data). If the client sends
+an empty \s-1TLS\s0 ClientHello extension matching the type, the corresponding
+ServerHello extension will be returned.
+.IP "\fB\-no_resumption_on_reneg\fR" 4
+.IX Item "-no_resumption_on_reneg"
+set \s-1SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION\s0 flag.
.IP "\fB\-status\fR" 4
.IX Item "-status"
enables certificate status request support (aka \s-1OCSP\s0 stapling).
@@ -476,4 +483,4 @@ unknown cipher suites a client says it supports.
\&\fIsess_id\fR\|(1), \fIs_client\fR\|(1), \fIciphers\fR\|(1)
.SH "HISTORY"
.IX Header "HISTORY"
-The \-no_alt_chains options was first added to OpenSSL 1.0.1n and 1.0.2b.
+The \-no_alt_chains options was first added to OpenSSL 1.0.2b.
diff --git a/secure/usr.bin/openssl/man/s_time.1 b/secure/usr.bin/openssl/man/s_time.1
index 109df0f..38a26e9 100644
--- a/secure/usr.bin/openssl/man/s_time.1
+++ b/secure/usr.bin/openssl/man/s_time.1
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "S_TIME 1"
-.TH S_TIME 1 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH S_TIME 1 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/usr.bin/openssl/man/sess_id.1 b/secure/usr.bin/openssl/man/sess_id.1
index 1e25ad2..365ece1 100644
--- a/secure/usr.bin/openssl/man/sess_id.1
+++ b/secure/usr.bin/openssl/man/sess_id.1
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "SESS_ID 1"
-.TH SESS_ID 1 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH SESS_ID 1 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/usr.bin/openssl/man/smime.1 b/secure/usr.bin/openssl/man/smime.1
index 86c0230..3c97bbd 100644
--- a/secure/usr.bin/openssl/man/smime.1
+++ b/secure/usr.bin/openssl/man/smime.1
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "SMIME 1"
-.TH SMIME 1 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH SMIME 1 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
@@ -550,4 +550,4 @@ structures may cause parsing errors.
The use of multiple \fB\-signer\fR options and the \fB\-resign\fR command were first
added in OpenSSL 1.0.0
.PP
-The \-no_alt_chains options was first added to OpenSSL 1.0.1n and 1.0.2b.
+The \-no_alt_chains options was first added to OpenSSL 1.0.2b.
diff --git a/secure/usr.bin/openssl/man/speed.1 b/secure/usr.bin/openssl/man/speed.1
index 874e4f2..5eb4866 100644
--- a/secure/usr.bin/openssl/man/speed.1
+++ b/secure/usr.bin/openssl/man/speed.1
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "SPEED 1"
-.TH SPEED 1 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH SPEED 1 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/usr.bin/openssl/man/spkac.1 b/secure/usr.bin/openssl/man/spkac.1
index f466ab5..e29183f 100644
--- a/secure/usr.bin/openssl/man/spkac.1
+++ b/secure/usr.bin/openssl/man/spkac.1
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "SPKAC 1"
-.TH SPKAC 1 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH SPKAC 1 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/usr.bin/openssl/man/ts.1 b/secure/usr.bin/openssl/man/ts.1
index fcc6d22..677663d 100644
--- a/secure/usr.bin/openssl/man/ts.1
+++ b/secure/usr.bin/openssl/man/ts.1
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "TS 1"
-.TH TS 1 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH TS 1 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/usr.bin/openssl/man/tsget.1 b/secure/usr.bin/openssl/man/tsget.1
index 597a74d..b8baff5 100644
--- a/secure/usr.bin/openssl/man/tsget.1
+++ b/secure/usr.bin/openssl/man/tsget.1
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "TSGET 1"
-.TH TSGET 1 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH TSGET 1 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/usr.bin/openssl/man/verify.1 b/secure/usr.bin/openssl/man/verify.1
index dc602b4..0b8fa29 100644
--- a/secure/usr.bin/openssl/man/verify.1
+++ b/secure/usr.bin/openssl/man/verify.1
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "VERIFY 1"
-.TH VERIFY 1 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH VERIFY 1 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
@@ -148,6 +148,10 @@ verify \- Utility to verify certificates.
[\fB\-purpose purpose\fR]
[\fB\-policy arg\fR]
[\fB\-ignore_critical\fR]
+[\fB\-attime timestamp\fR]
+[\fB\-check_ss_sig\fR]
+[\fB\-crlfile file\fR]
+[\fB\-crl_download\fR]
[\fB\-crl_check\fR]
[\fB\-crl_check_all\fR]
[\fB\-policy_check\fR]
@@ -162,7 +166,7 @@ verify \- Utility to verify certificates.
[\fB\-untrusted file\fR]
[\fB\-help\fR]
[\fB\-issuer_checks\fR]
-[\fB\-attime timestamp\fR]
+[\fB\-trusted file\fR]
[\fB\-verbose\fR]
[\fB\-\fR]
[certificates]
@@ -181,9 +185,28 @@ create symbolic links to a directory of certificates.
.IP "\fB\-CAfile file\fR A file of trusted certificates. The file should contain multiple certificates in \s-1PEM\s0 format concatenated together." 4
.IX Item "-CAfile file A file of trusted certificates. The file should contain multiple certificates in PEM format concatenated together."
.PD 0
+.IP "\fB\-attime timestamp\fR" 4
+.IX Item "-attime timestamp"
+.PD
+Perform validation checks using time specified by \fBtimestamp\fR and not
+current system time. \fBtimestamp\fR is the number of seconds since
+01.01.1970 (\s-1UNIX\s0 time).
+.IP "\fB\-check_ss_sig\fR" 4
+.IX Item "-check_ss_sig"
+Verify the signature on the self-signed root \s-1CA.\s0 This is disabled by default
+because it doesn't add any security.
+.IP "\fB\-crlfile file\fR" 4
+.IX Item "-crlfile file"
+File containing one or more \s-1CRL\s0's (in \s-1PEM\s0 format) to load.
+.IP "\fB\-crl_download\fR" 4
+.IX Item "-crl_download"
+Attempt to download \s-1CRL\s0 information for this certificate.
+.IP "\fB\-crl_check\fR" 4
+.IX Item "-crl_check"
+Checks end entity certificate validity by attempting to look up a valid \s-1CRL.\s0
+If a valid \s-1CRL\s0 cannot be found an error occurs.
.IP "\fB\-untrusted file\fR" 4
.IX Item "-untrusted file"
-.PD
A file of untrusted certificates. The file should contain multiple certificates
in \s-1PEM\s0 format concatenated together.
.IP "\fB\-purpose purpose\fR" 4
@@ -206,11 +229,6 @@ current certificate. This shows why each candidate issuer certificate was
rejected. The presence of rejection messages does not itself imply that
anything is wrong; during the normal verification process, several
rejections may take place.
-.IP "\fB\-attime timestamp\fR" 4
-.IX Item "-attime timestamp"
-Perform validation checks using time specified by \fBtimestamp\fR and not
-current system time. \fBtimestamp\fR is the number of seconds since
-01.01.1970 (\s-1UNIX\s0 time).
.IP "\fB\-policy arg\fR" 4
.IX Item "-policy arg"
Enable policy processing and add \fBarg\fR to the user-initial-policy-set (see
@@ -235,6 +253,10 @@ trusted, then OpenSSL will continue to check to see if an alternative chain can
be found that is trusted. With this option that behaviour is suppressed so that
only the first chain found is ever used. Using this option will force the
behaviour to match that of previous OpenSSL versions.
+.IP "\fB\-trusted file\fR" 4
+.IX Item "-trusted file"
+A file of additional trusted certificates. The file should contain multiple
+certificates in \s-1PEM\s0 format concatenated together.
.IP "\fB\-policy_print\fR" 4
.IX Item "-policy_print"
Print out diagnostics related to policy processing.
@@ -487,4 +509,4 @@ Previous versions of this documentation swapped the meaning of the
\&\fIx509\fR\|(1)
.SH "HISTORY"
.IX Header "HISTORY"
-The \-no_alt_chains options was first added to OpenSSL 1.0.1n and 1.0.2b.
+The \-no_alt_chains options was first added to OpenSSL 1.0.2b.
diff --git a/secure/usr.bin/openssl/man/version.1 b/secure/usr.bin/openssl/man/version.1
index 79305bb..401bde5 100644
--- a/secure/usr.bin/openssl/man/version.1
+++ b/secure/usr.bin/openssl/man/version.1
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "VERSION 1"
-.TH VERSION 1 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH VERSION 1 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/secure/usr.bin/openssl/man/x509.1 b/secure/usr.bin/openssl/man/x509.1
index 9306e41..27b8a8e 100644
--- a/secure/usr.bin/openssl/man/x509.1
+++ b/secure/usr.bin/openssl/man/x509.1
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "X509 1"
-.TH X509 1 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH X509 1 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
@@ -186,6 +186,7 @@ x509 \- Certificate display and signing utility
[\fB\-CAkey filename\fR]
[\fB\-CAcreateserial\fR]
[\fB\-CAserial filename\fR]
+[\fB\-force_pubkey key\fR]
[\fB\-text\fR]
[\fB\-certopt option\fR]
[\fB\-C\fR]
@@ -482,6 +483,14 @@ specified then the extensions should either be contained in the unnamed
\&\*(L"extensions\*(R" which contains the section to use. See the
\&\fIx509v3_config\fR\|(5) manual page for details of the
extension section format.
+.IP "\fB\-force_pubkey key\fR" 4
+.IX Item "-force_pubkey key"
+when a certificate is created set its public key to \fBkey\fR instead of the
+key in the certificate or certificate request. This option is useful for
+creating certificates where the algorithm can't normally sign requests, for
+example \s-1DH.\s0
+.Sp
+The format or \fBkey\fR can be specified using the \fB\-keyform\fR option.
.SS "\s-1NAME OPTIONS\s0"
.IX Subsection "NAME OPTIONS"
The \fBnameopt\fR command line switch determines how the subject and issuer
diff --git a/secure/usr.bin/openssl/man/x509v3_config.1 b/secure/usr.bin/openssl/man/x509v3_config.1
index 9e149f5..3eb624d 100644
--- a/secure/usr.bin/openssl/man/x509v3_config.1
+++ b/secure/usr.bin/openssl/man/x509v3_config.1
@@ -133,7 +133,7 @@
.\" ========================================================================
.\"
.IX Title "X509V3_CONFIG 1"
-.TH X509V3_CONFIG 1 "2015-07-09" "1.0.1p" "OpenSSL"
+.TH X509V3_CONFIG 1 "2015-07-09" "1.0.2d" "OpenSSL"
.\" For nroff, turn off justification. Always turn off hyphenation; it makes
.\" way too many mistakes in technical documents.
.if n .ad l
diff --git a/share/colldef/Makefile b/share/colldef/Makefile
index 5beb8ba..b6869e1 100644
--- a/share/colldef/Makefile
+++ b/share/colldef/Makefile
@@ -2,7 +2,7 @@
# Warning: Do not edit. This file is automatically generated from the
# tools in /usr/src/tools/tools/locale.
-LOCALEDIR= /usr/share/locale
+LOCALEDIR= ${SHAREDIR}/locale
FILESNAME= LC_COLLATE
.SUFFIXES: .src .LC_COLLATE
MAPLOC= ${.CURDIR}/../../tools/tools/locale/etc/final-maps
diff --git a/share/ctypedef/Makefile b/share/ctypedef/Makefile
index f3ce92b..fcefcca 100644
--- a/share/ctypedef/Makefile
+++ b/share/ctypedef/Makefile
@@ -2,7 +2,7 @@
# Warning: Do not edit. This file is automatically generated from the
# tools in /usr/src/tools/tools/locale.
-LOCALEDIR= /usr/share/locale
+LOCALEDIR= ${SHAREDIR}/locale
FILESNAME= LC_CTYPE
.SUFFIXES: .src .LC_CTYPE
MAPLOC= ${.CURDIR}/../../tools/tools/locale/etc/final-maps
diff --git a/share/examples/smbfs/Makefile b/share/examples/smbfs/Makefile
index 9e5b99a..3867b80 100644
--- a/share/examples/smbfs/Makefile
+++ b/share/examples/smbfs/Makefile
@@ -1,7 +1,7 @@
# $FreeBSD$
NO_OBJ=
-BINDIR= /usr/share/examples/smbfs
+FILESDIR= ${SHAREDIR}/examples/smbfs
FILES= dot.nsmbrc
.PATH: ${.CURDIR}/../../../contrib/smbfs/examples
diff --git a/share/examples/smbfs/print/Makefile b/share/examples/smbfs/print/Makefile
index eb66815..67f4823 100644
--- a/share/examples/smbfs/print/Makefile
+++ b/share/examples/smbfs/print/Makefile
@@ -1,7 +1,7 @@
# $FreeBSD$
NO_OBJ=
-BINDIR= /usr/share/examples/smbfs/print
+FILESDIR= ${SHAREDIR}/examples/smbfs/print
FILES= lj6l ljspool printcap.sample tolj
.PATH: ${.CURDIR}/../../../../contrib/smbfs/examples/print
diff --git a/share/keys/pkg/trusted/Makefile b/share/keys/pkg/trusted/Makefile
index ee0d4c9..bc8d13a 100644
--- a/share/keys/pkg/trusted/Makefile
+++ b/share/keys/pkg/trusted/Makefile
@@ -4,7 +4,7 @@ NO_OBJ=
FILES= pkg.freebsd.org.2013102301
-FILESDIR= /usr/share/keys/pkg/trusted
+FILESDIR= ${SHAREDIR}/keys/pkg/trusted
FILESMODE= 644
.include <bsd.prog.mk>
diff --git a/share/man/man4/Makefile b/share/man/man4/Makefile
index 94c2ad3..cfb6646 100644
--- a/share/man/man4/Makefile
+++ b/share/man/man4/Makefile
@@ -672,6 +672,7 @@ MLINKS+=nge.4 if_nge.4
MLINKS+=${_ntb.4} ${_if_ntb.4} \
${_ntb.4} ${_ntb_hw.4}
MLINKS+=${_nxge.4} ${_if_nxge.4}
+MLINKS+=otus.4 if_otus.4
MLINKS+=ow.4 onewire.4
MLINKS+=patm.4 if_patm.4
MLINKS+=pccbb.4 cbb.4
@@ -685,6 +686,7 @@ MLINKS+=rl.4 if_rl.4
MLINKS+=rue.4 if_rue.4
MLINKS+=rum.4 if_rum.4
MLINKS+=run.4 if_run.4
+MLINKS+=rsu.4 if_rsu.4
MLINKS+=scsi.4 CAM.4 \
scsi.4 cam.4 \
scsi.4 scbus.4 \
@@ -713,6 +715,7 @@ MLINKS+=tl.4 if_tl.4
MLINKS+=tun.4 if_tun.4
MLINKS+=tx.4 if_tx.4
MLINKS+=txp.4 if_txp.4
+MLINKS+=urtwn.4 if_urtwn.4
MLINKS+=vge.4 if_vge.4
MLINKS+=vlan.4 if_vlan.4
MLINKS+=vxlan.4 if_vxlan.4
diff --git a/share/man/man4/cloudabi.4 b/share/man/man4/cloudabi.4
index 1986735..e7a5653 100644
--- a/share/man/man4/cloudabi.4
+++ b/share/man/man4/cloudabi.4
@@ -22,7 +22,7 @@
.\" SUCH DAMAGE.
.\"
.\" $FreeBSD$
-.Dd July 31, 2015
+.Dd October 22, 2015
.Dt CLOUDABI 4
.Os
.Sh NAME
@@ -73,7 +73,7 @@ module can be loaded on any architecture supported by
.Fx ,
the
.Nm cloudabi64
-module is only available for amd64.
+module is only available for amd64 and arm64.
.Pp
A full cross compilation toolchain for CloudABI is available in the
.Pa devel/cloudabi-toolchain
@@ -95,6 +95,9 @@ restricted set of resources.
.Pp
cloudlibc on GitHub:
.Pa https://github.com/NuxiNL/cloudlibc .
+.Pp
+The CloudABI Ports Collection on GitHub:
+.Pa https://github.com/NuxiNL/cloudabi-ports .
.Sh HISTORY
CloudABI support first appeared in
.Fx 11.0 .
diff --git a/share/man/man4/ioat.4 b/share/man/man4/ioat.4
index 301ab4f..62d85f1 100644
--- a/share/man/man4/ioat.4
+++ b/share/man/man4/ioat.4
@@ -24,14 +24,25 @@
.\"
.\" $FreeBSD$
.\"
-.Dd August 24, 2015
+.Dd October 31, 2015
.Dt IOAT 4
.Os
.Sh NAME
.Nm I/OAT
.Nd Intel I/O Acceleration Technology
.Sh SYNOPSIS
+To compile this driver into your kernel,
+place the following line in your kernel configuration file:
+.Bd -ragged -offset indent
.Cd "device ioat"
+.Ed
+.Pp
+Or, to load the driver as a module at boot, place the following line in
+.Xr loader.conf 5 :
+.Bd -literal -offset indent
+ioat_load="YES"
+.Ed
+.Pp
In
.Xr loader.conf 5 :
.Pp
@@ -46,11 +57,13 @@ In
(only critical errors; maximum of 3)
.Pp
.Ft typedef void
-.Fn (*bus_dmaengine_callback_t) "void *arg"
+.Fn (*bus_dmaengine_callback_t) "void *arg" "int error"
.Pp
.Ft bus_dmaengine_t
.Fn ioat_get_dmaengine "uint32_t channel_index"
.Ft void
+.Fn ioat_put_dmaengine "bus_dmaengine_t dmaengine"
+.Ft void
.Fn ioat_acquire "bus_dmaengine_t dmaengine"
.Ft void
.Fn ioat_release "bus_dmaengine_t dmaengine"
@@ -65,6 +78,16 @@ In
.Fa "uint32_t flags"
.Fc
.Ft struct bus_dmadesc *
+.Fo ioat_blockfill
+.Fa "bus_dmaengine_t dmaengine"
+.Fa "bus_addr_t dst"
+.Fa "uint64_t fillpattern"
+.Fa "bus_size_t len"
+.Fa "bus_dmaengine_callback_t callback_fn"
+.Fa "void *callback_arg"
+.Fa "uint32_t flags"
+.Fc
+.Ft struct bus_dmadesc *
.Fo ioat_null
.Fa "bus_dmaengine_t dmaengine"
.Fa "bus_dmaengine_callback_t callback_fn"
@@ -82,7 +105,9 @@ There is a number of DMA channels per CPU package.
Each may be used independently.
Operations on a single channel proceed sequentially.
.Pp
-Copy operations may be used to offload memory copies to the DMA engines.
+Blockfill operations can be used to write a 64-bit pattern to memory.
+.Pp
+Copy operations can be used to offload memory copies to the DMA engines.
.Pp
Null operations do nothing, but may be used to test the interrupt and callback
mechanism.
@@ -92,6 +117,26 @@ All operations can optionally trigger an interrupt at completion with the
flag.
For example, a user might submit multiple operations to the same channel and
only enable an interrupt and callback for the last operation.
+.Pp
+All operations are safe to use in a non-blocking context with the
+.Ar DMA_NO_WAIT
+flag.
+(Of course, allocations may fail and operations requested with
+.Ar DMA_NO_WAIT
+may return NULL.)
+.Pp
+All operations, as well as
+.Fn ioat_get_dmaengine ,
+can return NULL in special circumstances.
+For example, if the
+.Nm
+driver is being unloaded, or the administrator has induced a hardware reset, or
+a usage error has resulted in a hardware error state that needs to be recovered
+from.
+.Pp
+It is invalid to attempt to submit new DMA operations in a
+.Fa bus_dmaengine_callback_t
+context.
.Sh USAGE
A typical user will lookup the DMA engine object for a given channel with
.Fn ioat_get_dmaengine .
@@ -101,10 +146,11 @@ the
.Ar bus_dmaengine_t
object for exclusive access to enqueue operations on that channel.
Then, they will submit one or more operations using
-.Fn ioat_copy
+.Fn ioat_blockfill ,
+.Fn ioat_copy ,
or
.Fn ioat_null .
-Finally, they will
+After queueing one or more individual DMA operations, they will
.Fn ioat_release
the
.Ar bus_dmaengine_t
@@ -114,6 +160,19 @@ The routine they provided for the
argument will be invoked with the provided
.Fa callback_arg
when the operation is complete.
+When they are finished with the
+.Ar bus_dmaengine_t ,
+the user should
+.Fn ioat_put_dmaengine .
+.Pp
+Users MUST NOT block between
+.Fn ioat_acquire
+and
+.Fn ioat_release .
+Users SHOULD NOT hold
+.Ar bus_dmaengine_t
+references for a very long time to enable fault recovery and kernel module
+unload.
.Pp
For an example of usage, see
.Pa src/sys/dev/ioat/ioat_test.c .
@@ -135,19 +194,23 @@ The
.Nm
driver was developed by
.An \&Jim Harris Aq Mt jimharris@FreeBSD.org ,
+.An \&Carl Delsey Aq Mt carl.r.delsey@intel.com ,
and
-.An \&Carl Delsey Aq Mt carl.r.delsey@intel.com .
+.An \&Conrad Meyer Aq Mt cem@FreeBSD.org .
This manual page was written by
.An \&Conrad Meyer Aq Mt cem@FreeBSD.org .
.Sh CAVEATS
Copy operation takes bus addresses as parameters, not virtual addresses.
.Pp
-Copies larger than max transfer size (1MB) are not supported.
+Buffers for individual copy operations must be physically contiguous.
+.Pp
+Copies larger than max transfer size (1MB, but may vary by hardware) are not
+supported.
Future versions will likely support this by breaking up the transfer into
smaller sizes.
.Sh BUGS
The
.Nm
-driver only supports copy and null operations at this time.
+driver only supports blockfill, copy, and null operations at this time.
The driver does not yet support advanced DMA modes, such as XOR, that some
I/OAT devices support.
diff --git a/share/man/man4/isp.4 b/share/man/man4/isp.4
index 6d3a49a..767db68 100644
--- a/share/man/man4/isp.4
+++ b/share/man/man4/isp.4
@@ -29,7 +29,7 @@
.\"
.\" $FreeBSD$
.\"
-.Dd December 1, 2014
+.Dd October 29, 2015
.Dt ISP 4
.Os
.Sh NAME
@@ -60,8 +60,7 @@ devices.
SCSI features include support for Ultra SCSI and wide mode transactions
for
.Tn SCSI ,
-Ultra2 LVD (for the ISP1080 and ISP1280), and Ultra3 LVD (for the
-ISP12160).
+Ultra2 LVD (ISP1080, ISP1280), and Ultra3 LVD (ISP12160).
.Pp
Fibre Channel support uses FCP SCSI profile for
.Tn FibreChannel ,
@@ -69,15 +68,13 @@ and utilizes Class 3 and Class 2 connections (Qlogic 2100 is Class
3 only, minor patches to the Qlogic 2200 to force Class 2 mode).
Support is available for Public and Private loops, and for
point-to-point connections (Qlogic 2200 only).
-The newer 2-Gigabit cards (2300, 2312, 2322) and 4-Gigabit (2422, 2432)
-are also supported.
-Command tagging is
-supported for all (in fact,
+The newer 2-Gigabit cards (2300, 2312, 2322), 4-Gigabit (2422, 2432)
+and 8-Gigabit (2532) are also supported.
+Command tagging is supported for all (in fact,
.Tn FibreChannel
requires tagging).
Fabric support is enabled by default for other than 2100 cards.
-Fabric
-support for 2100 cards has been so problematic and these cards are so
+Fabric support for 2100 cards has been so problematic and these cards are so
old now that it is just not worth your time to try it.
.Sh FIRMWARE
Firmware is available if the
@@ -103,15 +100,16 @@ Qlogic 1020 Fast Wide and Differential Fast Wide PCI cards.
.It ISP1040
Qlogic 1040 Ultra Wide and Differential Ultra Wide PCI cards.
Also known as the DEC KZPBA-CA (single ended) and KZPBA-CB (HVD differential).
-.It Qlogic 1240
-Qlogic 1240 Dual Bus Ultra Wide and Differential Ultra Wide PCI
-cards.
.It Qlogic 1020
Qlogic 1020 SCSI cards.
.It Qlogic 1040
Qlogic 1040 Ultra SCSI cards.
.It Qlogic 1080
-Qlogic 1280 LVD Ultra2 Wide PCI cards.
+Qlogic 1080 LVD Ultra2 Wide SCSI cards.
+.It Qlogic 10160
+Qlogic 10160 LVD Ultra3 Wide PCI cards.
+.It Qlogic 1240
+Qlogic 1240 Dual Bus Ultra Wide and Differential Ultra Wide PCI cards.
.It Qlogic 1280
Qlogic 1280 Dual Bus LVD Ultra2 Wide PCI cards.
.It Qlogic 12160
@@ -123,21 +121,21 @@ Loop (single, dual).
Qlogic 2200 Copper and Optical Fibre Channel Arbitrated Loop PCI
cards (single, dual, quad).
.It Qlogic 2300
-Qlogic 2300 Optical Fibre Channel PCI cards.
+Qlogic 2300 Optical 2Gb Fibre Channel PCI cards.
.It Qlogic 2312
-Qlogic 2312 Optical Fibre Channel PCI cards.
+Qlogic 2312 Optical 2Gb Fibre Channel PCI cards.
.It Qlogic 234X
-Qlogic 234X Optical Fibre Channel PCI cards (2312 chipset, single and dual attach).
+Qlogic 234X Optical 2Gb Fibre Channel PCI cards (2312 chipset, single and dual attach).
.It Qlogic 2322
-Qlogic 2322 Optical Fibre Channel PCIe cards.
+Qlogic 2322 Optical 2Gb Fibre Channel PCIe cards.
.It Qlogic 200
-Dell Branded version of the QLogic 2312 Fibre Channel PCI cards.
+Dell branded version of the QLogic 2312.
.It Qlogic 2422
-Qlogic 2422 Optical Fibre Channel PCI cards (4 Gigabit)
-.It Qlogic 2432
-Qlogic 2432 Optical Fibre Channel PCIe cards (4 Gigabit)
+Qlogic 2422 Optical 4Gb Fibre Channel PCI cards.
.It Qlogic 2432
-Qlogic 2532 Optical Fibre Channel PCIe cards (8 Gigabit)
+Qlogic 2432 Optical 4Gb Fibre Channel PCIe cards.
+.It Qlogic 2532
+Qlogic 2532 Optical 8Gb Fibre Channel PCIe cards.
.El
.Sh CONFIGURATION OPTIONS
Target mode support may be enabled with the
@@ -232,13 +230,11 @@ The
.Nm
driver was written by
.An Matthew Jacob
-originally for NetBSD at
-NASA/Ames Research Center.
+originally for NetBSD at NASA/Ames Research Center.
+Some later improvement was done by
+.An Alexander Motin Aq Mt mav@FreeBSD.org .
.Sh BUGS
The driver currently ignores some NVRAM settings.
.Pp
-Target mode support is not completely reliable yet.
-It works reasonably
-well for Fibre Channel, somewhat well for Qlogic 1040 cards, but
-does not yet work for the other cards (due to last minute unannounced
-changes in firmware interfaces).
+Target mode support works reasonably well for 23xx and above Fibre Channel
+cards, but not really tested on older ones.
diff --git a/share/man/man4/tcp.4 b/share/man/man4/tcp.4
index 351e4b4..8c5887f 100644
--- a/share/man/man4/tcp.4
+++ b/share/man/man4/tcp.4
@@ -34,7 +34,7 @@
.\" From: @(#)tcp.4 8.1 (Berkeley) 6/5/93
.\" $FreeBSD$
.\"
-.Dd October 13, 2014
+.Dd October 27, 2015
.Dt TCP 4
.Os
.Sh NAME
@@ -454,6 +454,17 @@ code.
For this reason, we use 200ms of slop and a near-0
minimum, which gives us an effective minimum of 200ms (similar to
.Tn Linux ) .
+.It Va initcwnd_segments
+Enable the ability to specify initial congestion window in number of segments.
+The default value is 10 as suggested by RFC 6928.
+Changing the value on fly would not affect connections using congestion window
+from the hostcache.
+Caution:
+This regulates the burst of packets allowed to be sent in the first RTT.
+The value should be relative to the link capacity.
+Start with small values for lower-capacity links.
+Large bursts can cause buffer overruns and packet drops if routers have small
+buffers or the link is experiencing congestion.
.It Va rfc3042
Enable the Limited Transmit algorithm as described in RFC 3042.
It helps avoid timeouts on lossy links and also when the congestion window
diff --git a/share/man/man4/wlan.4 b/share/man/man4/wlan.4
index 9bfbb4a..747e040 100644
--- a/share/man/man4/wlan.4
+++ b/share/man/man4/wlan.4
@@ -25,7 +25,7 @@
.\"
.\" $FreeBSD$
.\"
-.Dd August 10, 2015
+.Dd October 29, 2015
.Dt WLAN 4
.Os
.Sh NAME
@@ -182,6 +182,7 @@ may not interoperate.
.Xr malo 4 ,
.Xr mwl 4 ,
.Xr netintro 4 ,
+.Xr otus 4 ,
.Xr ral 4 ,
.Xr rsu 4 ,
.Xr rum 4 ,
diff --git a/share/man/man5/style.Makefile.5 b/share/man/man5/style.Makefile.5
index c3a3288..5e34b96 100644
--- a/share/man/man5/style.Makefile.5
+++ b/share/man/man5/style.Makefile.5
@@ -27,7 +27,7 @@
.\"
.\" $FreeBSD$
.\"
-.Dd January 8, 2005
+.Dd October 21, 2015
.Dt STYLE.MAKEFILE 5
.Os
.Sh NAME
@@ -117,6 +117,13 @@ i.e., no space between the variable name and the
.Ic = .
Keep values sorted alphabetically, if possible.
.It
+Variables are expanded with
+.Sy {} ,
+not
+.Sy () .
+Such as
+.Va ${VARIABLE} .
+.It
Do not use
.Ic +=
to set variables that are only set once
diff --git a/share/man/man7/build.7 b/share/man/man7/build.7
index 6980dc2..be6fe09 100644
--- a/share/man/man7/build.7
+++ b/share/man/man7/build.7
@@ -24,7 +24,7 @@
.\"
.\" $FreeBSD$
.\"
-.Dd December 31, 2014
+.Dd October 21, 2015
.Dt BUILD 7
.Os
.Sh NAME
@@ -463,7 +463,19 @@ for more details.
.It Va SUBDIR_OVERRIDE
Override the default list of sub-directories and only build the
sub-directory named in this variable.
-This variable is useful when debugging failed builds.
+If combined with
+.Cm buildworld
+then all libraries and includes, and some of the build tools will still build
+as well.
+When combined with
+.Cm buildworld
+it is necesarry to override
+.Va LOCAL_LIB_DIRS
+with any custom directories containing libraries.
+This allows building a subset of the system in the same way as
+.Cm buildworld
+does using its sysroot handling.
+This variable can also be useful when debugging failed builds.
.Bd -literal -offset indent
make some-target SUBDIR_OVERRIDE=foo/bar
.Ed
diff --git a/share/man/man9/BUS_ADD_CHILD.9 b/share/man/man9/BUS_ADD_CHILD.9
index 8b69d5a..1e98ffe 100644
--- a/share/man/man9/BUS_ADD_CHILD.9
+++ b/share/man/man9/BUS_ADD_CHILD.9
@@ -28,7 +28,7 @@
.\"
.\" $FreeBSD$
.\"
-.Dd May 13, 2004
+.Dd October 28, 2015
.Dt BUS_ADD_CHILD 9
.Os
.Sh NAME
@@ -44,6 +44,8 @@ The
.Fn BUS_ADD_CHILD
method
is used by the driver identify routine to add devices to the tree.
+It can also be used to add children to buses that implement this
+routine in other contexts, although the behavior is bus specific.
Please see
.Xr device_add_child 9
for more details.
@@ -53,18 +55,31 @@ however, the bus'
.Fn BUS_ADD_CHILD
is called.
.Pp
-Busses implementing
+Buses implementing
.Fn BUS_ADD_CHILD
should insert the device into the tree using
.Xr device_add_child 9
before adding things such as their own ivars and resource lists to the device.
+.Fn BUS_ADD_CHILD
+is not called by
+.Xr device_add_child 9 .
+.Fn BUS_ADD_CHILD
+instead calls
+.Xr device_add_child 9 .
+.Pp
+A panic will result when called for a bus that does not implement
+.Fn BUS_ADD_CHILD .
+Some buses require a special bus-specific routine to be called instead
+of
+.Fn BUS_ADD_CHILD .
.Sh RETURN VALUES
The
.Fn BUS_ADD_CHILD
method returns
.Vt device_t
added to the tree, or
-.Dv NULL .
+.Dv NULL
+to indicate failure.
.Sh SEE ALSO
.Xr device 9 ,
.Xr device_add_child 9 ,
diff --git a/share/man/man9/Makefile b/share/man/man9/Makefile
index a529366..516d6c3 100644
--- a/share/man/man9/Makefile
+++ b/share/man/man9/Makefile
@@ -57,6 +57,7 @@ MAN= accept_filter.9 \
contigmalloc.9 \
copy.9 \
counter.9 \
+ cpuset.9 \
cr_cansee.9 \
critical_enter.9 \
cr_seeothergids.9 \
@@ -636,6 +637,31 @@ MLINKS+=counter.9 counter_u64_alloc.9 \
counter.9 counter_u64_add_protected.9 \
counter.9 counter_u64_fetch.9 \
counter.9 counter_u64_zero.9
+MLINKS+=cpuset.9 CPUSET_T_INITIALIZER.9 \
+ cpuset.9 CPUSET_FSET.9 \
+ cpuset.9 CPU_CLR.9 \
+ cpuset.9 CPU_COPY.9 \
+ cpuset.9 CPU_ISSET.9 \
+ cpuset.9 CPU_SET.9 \
+ cpuset.9 CPU_ZERO.9 \
+ cpuset.9 CPU_FILL.9 \
+ cpuset.9 CPU_SETOF.9 \
+ cpuset.9 CPU_EMPTY.9 \
+ cpuset.9 CPU_ISFULLSET.9 \
+ cpuset.9 CPU_FFS.9 \
+ cpuset.9 CPU_COUNT.9 \
+ cpuset.9 CPU_SUBSET.9 \
+ cpuset.9 CPU_OVERLAP.9 \
+ cpuset.9 CPU_CMP.9 \
+ cpuset.9 CPU_OR.9 \
+ cpuset.9 CPU_AND.9 \
+ cpuset.9 CPU_NAND.9 \
+ cpuset.9 CPU_CLR_ATOMIC.9 \
+ cpuset.9 CPU_SET_ATOMIC.9 \
+ cpuset.9 CPU_SET_ATOMIC_ACQ.9 \
+ cpuset.9 CPU_AND_ATOMIC.9 \
+ cpuset.9 CPU_OR_ATOMIC.9 \
+ cpuset.9 CPU_COPY_STORE_REL.9
MLINKS+=critical_enter.9 critical.9 \
critical_enter.9 critical_exit.9
MLINKS+=crypto.9 crypto_dispatch.9 \
@@ -1603,6 +1629,8 @@ MLINKS+=sysctl.9 SYSCTL_DECL.9 \
sysctl.9 SYSCTL_ADD_ROOT_NODE.9 \
sysctl.9 SYSCTL_ADD_STRING.9 \
sysctl.9 SYSCTL_ADD_STRUCT.9 \
+ sysctl.9 SYSCTL_ADD_U8.9 \
+ sysctl.9 SYSCTL_ADD_U16.9 \
sysctl.9 SYSCTL_ADD_UAUTO.9 \
sysctl.9 SYSCTL_ADD_UINT.9 \
sysctl.9 SYSCTL_ADD_ULONG.9 \
@@ -1620,6 +1648,8 @@ MLINKS+=sysctl.9 SYSCTL_DECL.9 \
sysctl.9 SYSCTL_ROOT_NODE.9 \
sysctl.9 SYSCTL_STRING.9 \
sysctl.9 SYSCTL_STRUCT.9 \
+ sysctl.9 SYSCTL_U8.9 \
+ sysctl.9 SYSCTL_U16.9 \
sysctl.9 SYSCTL_UINT.9 \
sysctl.9 SYSCTL_ULONG.9 \
sysctl.9 SYSCTL_UQUAD.9
diff --git a/share/man/man9/bitset.9 b/share/man/man9/bitset.9
index 361b0e5..19f53a2 100644
--- a/share/man/man9/bitset.9
+++ b/share/man/man9/bitset.9
@@ -24,7 +24,7 @@
.\"
.\" $FreeBSD$
.\"
-.Dd October 17, 2015
+.Dd October 20, 2015
.Dt BITSET 9
.Os
.Sh NAME
@@ -352,16 +352,9 @@ myset = BITSET_T_INITIALIZER(BITSET_FSET(__bitset_words(MYSETSIZE)));
myset = BITSET_T_INITIALIZER(0x1);
.Ed
.Sh SEE ALSO
-The older
-.Xr bitstring 3 .
+.Xr bitstring 3 ,
+.Xr cpuset 9
.Sh HISTORY
-.In sys/cpuset.h
-first appeared in
-.Fx 7.1 ,
-released in January 2009, and in
-.Fx 8.0 ,
-released in November 2009 .
-.Pp
The
.Nm
macros first appeared in
@@ -377,11 +370,9 @@ This manual page first appeared in
.An -nosplit
The
.Nm
-macros were written for
+macros were generalized and pulled out of
.In sys/cpuset.h
-by
-.An Jeff Roberson Aq Mt jeff@FreeBSD.org ;
-they were generalized and pulled out as
+as
.In sys/_bitset.h
and
.In sys/bitset.h
diff --git a/share/man/man9/cpuset.9 b/share/man/man9/cpuset.9
new file mode 100644
index 0000000..fb0a9fc
--- /dev/null
+++ b/share/man/man9/cpuset.9
@@ -0,0 +1,352 @@
+.\" Copyright (c) 2015 Conrad Meyer <cem@FreeBSD.org>
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\" notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\" notice, this list of conditions and the following disclaimer in the
+.\" documentation and/or other materials provided with the distribution.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS''
+.\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+.\" TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+.\" PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE
+.\" LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+.\" CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+.\" SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+.\" CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+.\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+.\" POSSIBILITY OF SUCH DAMAGE.
+.\"
+.\" $FreeBSD$
+.\"
+.Dd October 20, 2015
+.Dt CPUSET 9
+.Os
+.Sh NAME
+.Nm cpuset(9)
+\(em
+.Nm CPUSET_T_INITIALIZER ,
+.Nm CPUSET_FSET ,
+.Nm CPU_CLR ,
+.Nm CPU_COPY ,
+.Nm CPU_ISSET ,
+.Nm CPU_SET ,
+.Nm CPU_ZERO ,
+.Nm CPU_FILL ,
+.Nm CPU_SETOF ,
+.Nm CPU_EMPTY ,
+.Nm CPU_ISFULLSET ,
+.Nm CPU_FFS ,
+.Nm CPU_COUNT ,
+.Nm CPU_SUBSET ,
+.Nm CPU_OVERLAP ,
+.Nm CPU_CMP ,
+.Nm CPU_OR ,
+.Nm CPU_AND ,
+.Nm CPU_NAND ,
+.Nm CPU_CLR_ATOMIC ,
+.Nm CPU_SET_ATOMIC ,
+.Nm CPU_SET_ATOMIC_ACQ ,
+.Nm CPU_AND_ATOMIC ,
+.Nm CPU_OR_ATOMIC ,
+.Nm CPU_COPY_STORE_REL
+.Nd cpuset manipulation macros
+.Sh SYNOPSIS
+.In sys/_cpuset.h
+.In sys/cpuset.h
+.\"
+.Fn CPUSET_T_INITIALIZER "ARRAY_CONTENTS"
+.Vt CPUSET_FSET
+.\"
+.Fn CPU_CLR "size_t cpu_idx" "cpuset_t *cpuset"
+.Fn CPU_COPY "cpuset_t *from" "cpuset_t *to"
+.Ft bool
+.Fn CPU_ISSET "size_t cpu_idx" "cpuset_t *cpuset"
+.Fn CPU_SET "size_t cpu_idx" "cpuset_t *cpuset"
+.Fn CPU_ZERO "cpuset_t *cpuset"
+.Fn CPU_FILL "cpuset_t *cpuset"
+.Fn CPU_SETOF "size_t cpu_idx" "cpuset_t *cpuset"
+.Ft bool
+.Fn CPU_EMPTY "cpuset_t *cpuset"
+.Ft bool
+.Fn CPU_ISFULLSET "cpuset_t *cpuset"
+.Ft size_t
+.Fn CPU_FFS "cpuset_t *cpuset"
+.Ft size_t
+.Fn CPU_COUNT "cpuset_t *cpuset"
+.\"
+.Ft bool
+.Fn CPU_SUBSET "cpuset_t *haystack" "cpuset_t *needle"
+.Ft bool
+.Fn CPU_OVERLAP "cpuset_t *cpuset1" "cpuset_t *cpuset2"
+.Ft bool
+.Fn CPU_CMP "cpuset_t *cpuset1" "cpuset_t *cpuset2"
+.Fn CPU_OR "cpuset_t *dst" "cpuset_t *src"
+.Fn CPU_AND "cpuset_t *dst" "cpuset_t *src"
+.Fn CPU_NAND "cpuset_t *dst" "cpuset_t *src"
+.\"
+.Fn CPU_CLR_ATOMIC "size_t cpu_idx" "cpuset_t *cpuset"
+.Fn CPU_SET_ATOMIC "size_t cpu_idx" "cpuset_t *cpuset"
+.Fn CPU_SET_ATOMIC_ACQ "size_t cpu_idx" "cpuset_t *cpuset"
+.\"
+.Fn CPU_AND_ATOMIC "cpuset_t *dst" "cpuset_t *src"
+.Fn CPU_OR_ATOMIC "cpuset_t *dst" "cpuset_t *src"
+.Fn CPU_COPY_STORE_REL "cpuset_t *from" "cpuset_t *to"
+.Sh DESCRIPTION
+The
+.Nm
+family of macros provide a flexible and efficient CPU set implementation,
+backed by the
+.Xr bitset 9
+macros.
+Each CPU is represented by a single bit.
+The maximum number of CPUs representable by
+.Vt cpuset_t
+is
+.Va MAXCPU .
+Individual CPUs in cpusets are referenced with indices zero through
+.Fa MAXCPU - 1 .
+.Pp
+The
+.Fn CPUSET_T_INITIALIZER
+macro allows one to initialize a
+.Vt cpuset_t
+with a compile time literal value.
+.Pp
+The
+.Fn CPUSET_FSET
+macro defines a compile time literal, usable by
+.Fn CPUSET_T_INITIALIZER ,
+representing a full cpuset (all CPUs present).
+For examples of
+.Fn CPUSET_T_INITIALIZER
+and
+.Fn CPUSET_FSET
+usage, see the
+.Sx CPUSET_T_INITIALIZER EXAMPLE
+section.
+.Pp
+The
+.Fn CPU_CLR
+macro removes CPU
+.Fa cpu_idx
+from the cpuset pointed to by
+.Fa cpuset .
+The
+.Fn CPU_CLR_ATOMIC
+macro is identical, but the bit representing the CPU is cleared with atomic
+machine instructions.
+.Pp
+The
+.Fn CPU_COPY
+macro copies the contents of the cpuset
+.Fa from
+to the cpuset
+.Fa to .
+.Fn CPU_COPY_STORE_REL
+is similar, but copies component machine words from
+.Fa from
+and writes them to
+.Fa to
+with atomic store with release semantics.
+(That is, if
+.Fa to
+is composed of multiple machine words,
+.Fn CPU_COPY_STORE_REL
+performs multiple individually atomic operations.)
+.Pp
+The
+.Fn CPU_SET
+macro adds CPU
+.Fa cpu_idx
+to the cpuset pointed to by
+.Fa cpuset ,
+if it is not already present.
+The
+.Fn CPU_SET_ATOMIC
+macro is identical, but the bit representing the CPU is set with atomic
+machine instructions.
+The
+.Fn CPU_SET_ATOMIC_ACQ
+macro sets the bit representing the CPU with atomic acquire semantics.
+.Pp
+The
+.Fn CPU_ZERO
+macro removes all CPUs from
+.Fa cpuset .
+.Pp
+The
+.Fn CPU_FILL
+macro adds all CPUs to
+.Fa cpuset .
+.Pp
+The
+.Fn CPU_SETOF
+macro removes all CPUs in
+.Fa cpuset
+before adding only CPU
+.Fa cpu_idx .
+.Pp
+The
+.Fn CPU_EMPTY
+macro returns
+.Dv true
+if
+.Fa cpuset
+is empty.
+.Pp
+The
+.Fn CPU_ISFULLSET
+macro returns
+.Dv true
+if
+.Fa cpuset
+is full (the set of all CPUs).
+.Pp
+The
+.Fn CPU_FFS
+macro returns the 1-index of the first (lowest) CPU in
+.Fa cpuset ,
+or zero if
+.Fa cpuset
+is empty.
+Like with
+.Xr ffs 3 ,
+to use the non-zero result of
+.Fn CPU_FFS
+as a
+.Fa cpu_idx
+index parameter to any other
+.Nm
+macro, you must subtract one from the result.
+.Pp
+The
+.Fn CPU_COUNT
+macro returns the total number of CPUs in
+.Fa cpuset .
+.Pp
+The
+.Fn CPU_SUBSET
+macro returns
+.Dv true
+if
+.Fa needle
+is a subset of
+.Fa haystack .
+.Pp
+The
+.Fn CPU_OVERLAP
+macro returns
+.Dv true
+if
+.Fa cpuset1
+and
+.Fa cpuset2
+have any common CPUs.
+(That is, if
+.Fa cpuset1
+AND
+.Fa cpuset2
+is not the empty set.)
+.Pp
+The
+.Fn CPU_CMP
+macro returns
+.Dv true
+if
+.Fa cpuset1
+is NOT equal to
+.Fa cpuset2 .
+.Pp
+The
+.Fn CPU_OR
+macro adds CPUs present in
+.Fa src
+to
+.Fa dst .
+(It is the
+.Nm
+equivalent of the scalar:
+.Fa dst
+|=
+.Fa src . )
+.Fn CPU_OR_ATOMIC
+is similar, but sets the bits representing CPUs in the component machine words
+in
+.Fa dst
+with atomic machine instructions.
+(That is, if
+.Fa dst
+is composed of multiple machine words,
+.Fn CPU_OR_ATOMIC
+performs multiple individually atomic operations.)
+.Pp
+The
+.Fn CPU_AND
+macro removes CPUs absent from
+.Fa src
+from
+.Fa dst .
+(It is the
+.Nm
+equivalent of the scalar:
+.Fa dst
+&=
+.Fa src . )
+.Fn CPU_AND_ATOMIC
+is similar, with the same atomic semantics as
+.Fn CPU_OR_ATOMIC .
+.Pp
+The
+.Fn CPU_NAND
+macro removes CPUs in
+.Fa src
+from
+.Fa dst .
+(It is the
+.Nm
+equivalent of the scalar:
+.Fa dst
+&=
+.Fa ~ src . )
+.Sh CPUSET_T_INITIALIZER EXAMPLE
+.Bd -literal
+cpuset_t myset;
+
+/* Initialize myset to filled (all CPUs) */
+myset = CPUSET_T_INITIALIZER(CPUSET_FSET);
+
+/* Initialize myset to only the lowest CPU */
+myset = CPUSET_T_INITIALIZER(0x1);
+.Ed
+.Sh SEE ALSO
+.Xr cpuset 1 ,
+.Xr cpuset 2 ,
+.Xr bitset 9
+.Sh HISTORY
+.In sys/cpuset.h
+first appeared in
+.Fx 7.1 ,
+released in January 2009, and in
+.Fx 8.0 ,
+released in November 2009.
+.Pp
+This manual page first appeared in
+.Fx 11.0 .
+.Sh AUTHORS
+.An -nosplit
+The
+.Nm
+macros were written by
+.An Jeff Roberson Aq Mt jeff@FreeBSD.org .
+This manual page was written by
+.An Conrad Meyer Aq Mt cem@FreeBSD.org .
+.Sh CAVEATS
+Unlike every other reference to individual set members, which are zero-indexed,
+.Fn CPU_FFS
+returns a one-indexed result (or zero if the cpuset is empty).
diff --git a/share/man/man9/device_add_child.9 b/share/man/man9/device_add_child.9
index 7ddd19a..052db92 100644
--- a/share/man/man9/device_add_child.9
+++ b/share/man/man9/device_add_child.9
@@ -28,7 +28,7 @@
.\"
.\" $FreeBSD$
.\"
-.Dd September 12, 2006
+.Dd October 28, 2015
.Dt DEVICE_ADD_CHILD 9
.Os
.Sh NAME
@@ -74,14 +74,14 @@ Normally unit numbers will be chosen automatically by the system and a
unit number of
.Dv -1
should be given.
-When a specific unit number is desired (e.g.\& for wiring a particular
+When a specific unit number is desired (e.g.,\& for wiring a particular
piece of hardware to a pre-configured unit number), that unit should
be passed.
If the specified unit number is already allocated, a new
unit will be allocated and a diagnostic message printed.
.Pp
If the devices attached to a bus must be probed in a specific order
-(e.g.\& for the ISA bus some devices are sensitive to failed probe attempts
+(e.g.,\& for the ISA bus some devices are sensitive to failed probe attempts
of unrelated drivers and therefore must be probed first),
the
.Fa order
@@ -109,10 +109,18 @@ Authors of bus drivers must likewise be careful when adding children
when they are loaded and unloaded to avoid duplication of children
devices.
.Pp
-Identify routines should use
+When adding a child to another device node, such as in an identify
+routine, use
.Xr BUS_ADD_CHILD 9
instead of
.Xr device_add_child 9 .
+.Xr BUS_ADD_CHILD 9
+will call
+.Xr device_add_child 9
+and add the proper bus-specific data to the new child.
+.Fn device_add_child
+does not call
+.Xr BUS_ADD_CHILD 9 .
.Sh RETURN VALUES
The new device if successful, NULL otherwise.
.Sh SEE ALSO
diff --git a/share/man/man9/getenv.9 b/share/man/man9/getenv.9
index a530ca4..cf5d889 100644
--- a/share/man/man9/getenv.9
+++ b/share/man/man9/getenv.9
@@ -27,7 +27,7 @@
.\"
.\" $FreeBSD$
.\"
-.Dd October 22, 2013
+.Dd October 22, 2015
.Dt GETENV 9
.Os
.Sh NAME
@@ -78,7 +78,6 @@ function obtains the current value of the kernel environment variable
.Fa name
and returns a pointer to the string value.
The caller should not modify the string pointed to by the return value.
-.Pp
The
.Fn getenv
function may allocate temporary storage,
@@ -88,12 +87,24 @@ function must be called to release any allocated resources when the value
returned by
.Fn getenv
is no longer needed.
+.Pp
+The
+.Fn freeenv
+function is used to release the resources allocated by a previous call to
+.Fn getenv .
The
.Fa env
argument passed to
.Fn freeenv
is the pointer returned by the earlier call to
.Fn getenv .
+Like
+.Xr free 3 ,
+the
+.Fa env
+argument can be
+.Va NULL ,
+in which case no action occurs.
.Pp
The
.Fn setenv
@@ -156,7 +167,8 @@ Otherwise,
the value is interpreted as decimal.
The value may contain a single character suffix specifying a unit for
the value.
-The interpreted value is multipled by the unit's magnitude before being returned.
+The interpreted value is multiplied by the unit's magnitude before being
+returned.
The following unit suffixes are supported:
.Bl -column -offset indent ".Sy Unit" ".Sy Magnitude"
.It Sy Unit Ta Sy Magnitude
@@ -179,7 +191,7 @@ zero is returned.
If the variable exists,
up to
.Fa size - 1
-characters of it's value are copied to the buffer pointed to by
+characters of its value are copied to the buffer pointed to by
.Fa data
followed by a null character and a non-zero value is returned.
.Sh RETURN VALUES
diff --git a/share/man/man9/sysctl.9 b/share/man/man9/sysctl.9
index 51ab5d7..c0f8363 100644
--- a/share/man/man9/sysctl.9
+++ b/share/man/man9/sysctl.9
@@ -25,7 +25,7 @@
.\"
.\" $FreeBSD$
.\"
-.Dd October 20, 2014
+.Dd October 23, 2015
.Dt SYSCTL 9
.Os
.Sh NAME
@@ -39,6 +39,8 @@
.Nm SYSCTL_ADD_ROOT_NODE ,
.Nm SYSCTL_ADD_STRING ,
.Nm SYSCTL_ADD_STRUCT ,
+.Nm SYSCTL_ADD_U8 ,
+.Nm SYSCTL_ADD_U16 ,
.Nm SYSCTL_ADD_UAUTO ,
.Nm SYSCTL_ADD_UINT ,
.Nm SYSCTL_ADD_ULONG ,
@@ -56,6 +58,8 @@
.Nm SYSCTL_ROOT_NODE ,
.Nm SYSCTL_STRING ,
.Nm SYSCTL_STRUCT ,
+.Nm SYSCTL_U8 ,
+.Nm SYSCTL_U16 ,
.Nm SYSCTL_UINT ,
.Nm SYSCTL_ULONG ,
.Nm SYSCTL_UQUAD
@@ -162,6 +166,28 @@
.Fa "const char *descr"
.Fc
.Ft struct sysctl_oid *
+.Fo SYSCTL_ADD_U8
+.Fa "struct sysctl_ctx_list *ctx"
+.Fa "struct sysctl_oid_list *parent"
+.Fa "int number"
+.Fa "const char *name"
+.Fa "int ctlflags"
+.Fa "unsigned int *ptr"
+.Fa "intptr_t val"
+.Fa "const char *descr"
+.Fc
+.Ft struct sysctl_oid *
+.Fo SYSCTL_ADD_U16
+.Fa "struct sysctl_ctx_list *ctx"
+.Fa "struct sysctl_oid_list *parent"
+.Fa "int number"
+.Fa "const char *name"
+.Fa "int ctlflags"
+.Fa "unsigned int *ptr"
+.Fa "intptr_t val"
+.Fa "const char *descr"
+.Fc
+.Ft struct sysctl_oid *
.Fo SYSCTL_ADD_UINT
.Fa "struct sysctl_ctx_list *ctx"
.Fa "struct sysctl_oid_list *parent"
@@ -228,6 +254,8 @@
.Fn SYSCTL_STRING parent number name ctlflags arg len descr
.Fn SYSCTL_STRUCT parent number name ctlflags ptr struct_type descr
.Fn SYSCTL_ROOT_NODE number name ctlflags handler descr
+.Fn SYSCTL_U8 parent number name ctlflags ptr val descr
+.Fn SYSCTL_U16 parent number name ctlflags ptr val descr
.Fn SYSCTL_UINT parent number name ctlflags ptr val descr
.Fn SYSCTL_ULONG parent number name ctlflags ptr val descr
.Fn SYSCTL_UQUAD parent number name ctlflags ptr val descr
@@ -413,6 +441,8 @@ Static sysctls are declared using one of the
.Fn SYSCTL_ROOT_NODE ,
.Fn SYSCTL_STRING ,
.Fn SYSCTL_STRUCT ,
+.Fn SYSCTL_U8 ,
+.Fn SYSCTL_U16 ,
.Fn SYSCTL_UINT ,
.Fn SYSCTL_ULONG
or
@@ -429,6 +459,8 @@ Dynamic nodes are created using one of the
.Fn SYSCTL_ADD_ROOT_NODE ,
.Fn SYSCTL_ADD_STRING ,
.Fn SYSCTL_ADD_STRUCT ,
+.Fn SYSCTL_ADD_U8 ,
+.Fn SYSCTL_ADD_U16 ,
.Fn SYSCTL_ADD_UAUTO ,
.Fn SYSCTL_ADD_UINT ,
.Fn SYSCTL_ADD_ULONG ,
@@ -459,6 +491,10 @@ This is an opaque data structure.
.It Dv CTLTYPE_STRUCT
Alias for
.Dv CTLTYPE_OPAQUE .
+.It Dv CTLTYPE_U8
+This is an 8-bit unsigned integer.
+.It Dv CTLTYPE_U16
+This is a 16-bit unsigned integer.
.It Dv CTLTYPE_UINT
This is an unsigned integer.
.It Dv CTLTYPE_LONG
diff --git a/share/misc/bsd-family-tree b/share/misc/bsd-family-tree
index 4ff700d..ad954d1 100644
--- a/share/misc/bsd-family-tree
+++ b/share/misc/bsd-family-tree
@@ -320,17 +320,21 @@ FreeBSD 5.2 | | | |
| | | | OpenBSD 5.6 |
| FreeBSD | | | |
| 10.1 | | | DragonFly 4.0.1
- | | | | |
- | | | | DragonFly 4.0.2
- | | | | |
- | | | | DragonFly 4.0.3
- | | | | |
- | | | | DragonFly 4.0.4
- | | | | |
- | | | | DragonFly 4.0.5
- | | | | |
- | | | OpenBSD 5.7 |
- | | | | DragonFly 4.2.0
+ | | | | | |
+ | | | | | DragonFly 4.0.2
+ | | | | | |
+ | | | | | DragonFly 4.0.3
+ | | | | | |
+ | | | | | DragonFly 4.0.4
+ | | | | | |
+ | | | | | DragonFly 4.0.5
+ | | | | | |
+ | | | | OpenBSD 5.7 |
+ | | | | | DragonFly 4.2.0
+ | FreeBSD | | | |
+ | 10.2 | | | |
+ | OS X NetBSD 7.0 | |
+ | 10.11 | OpenBSD 5.8 |
| | | | |
FreeBSD 11 -current | NetBSD -current OpenBSD -current DragonFly -current
| | | | |
@@ -673,6 +677,10 @@ DragonFly 4.0.4 2015-03-09 [DFB]
DragonFly 4.0.5 2015-03-23 [DFB]
OpenBSD 5.7 2015-05-01 [OBD]
DragonFly 4.2.0 2015-06-29 [DFB]
+FreeBSD 10.2 2015-08-13 [FBD]
+NetBSD 7.0 2015-09-25 [NBD]
+OS X 10.11 2015-09-30 [APL]
+OpenBSD 5.8 2015-10-18 [OBD]
Bibliography
------------------------
diff --git a/share/misc/committers-src.dot b/share/misc/committers-src.dot
index 1ebf420..2b8866f 100644
--- a/share/misc/committers-src.dot
+++ b/share/misc/committers-src.dot
@@ -119,6 +119,7 @@ art [label="Artem Belevich\nart@FreeBSD.org\n2011/03/29"]
arybchik [label="Andrew Rybchenko\narybchik@FreeBSD.org\n2014/10/12"]
asomers [label="Alan Somers\nasomers@FreeBSD.org\n2013/04/24"]
avg [label="Andriy Gapon\navg@FreeBSD.org\n2009/02/18"]
+avos [label="Andriy Voskoboinyk\navos@FreeBSD.org\n2015/09/24"]
bapt [label="Baptiste Daroussin\nbapt@FreeBSD.org\n2011/12/23"]
bdrewery [label="Bryan Drewery\nbdrewery@FreeBSD.org\n2013/12/14"]
benl [label="Ben Laurie\nbenl@FreeBSD.org\n2011/05/18"]
@@ -205,6 +206,7 @@ joerg [label="Joerg Wunsch\njoerg@FreeBSD.org\n1993/11/14"]
jon [label="Jonathan Chen\njon@FreeBSD.org\n2000/10/17"]
jonathan [label="Jonathan Anderson\njonathan@FreeBSD.org\n2010/10/07"]
jpaetzel [label="Josh Paetzel\njpaetzel@FreeBSD.org\n2011/01/21"]
+jtl [label="Jonathan T. Looney\njtl@FreeBSD.org\n2015/10/26"]
julian [label="Julian Elischer\njulian@FreeBSD.org\n1993/04/19"]
jwd [label="John De Boskey\njwd@FreeBSD.org\n2000/05/19"]
kaiw [label="Kai Wang\nkaiw@FreeBSD.org\n2007/09/26"]
@@ -216,6 +218,7 @@ kib [label="Konstantin Belousov\nkib@FreeBSD.org\n2006/06/03"]
kmacy [label="Kip Macy\nkmacy@FreeBSD.org\n2005/06/01"]
kp [label="Kristof Provost\nkp@FreeBSD.org\n2015/03/22"]
le [label="Lukas Ertl\nle@FreeBSD.org\n2004/02/02"]
+lidl [label="Kurt Lidl\nlidl@FreeBSD.org\n2015/10/21"]
loos [label="Luiz Otavio O Souza\nloos@FreeBSD.org\n2013/07/03"]
lstewart [label="Lawrence Stewart\nlstewart@FreeBSD.org\n2008/10/06"]
marcel [label="Marcel Moolenaar\nmarcel@FreeBSD.org\n1999/07/03"]
@@ -232,6 +235,7 @@ melifaro [label="Alexander V. Chernikov\nmelifaro@FreeBSD.org\n2011/10/04"]
mjacob [label="Matt Jacob\nmjacob@FreeBSD.org\n1997/08/13"]
mjg [label="Mateusz Guzik\nmjg@FreeBSD.org\n2012/06/04"]
mlaier [label="Max Laier\nmlaier@FreeBSD.org\n2004/02/10"]
+mmel [label="Michal Meloun\nmmel@FreeBSD.org\n2015/11/01"]
monthadar [label="Monthadar Al Jaberi\nmonthadar@FreeBSD.org\n2012/04/02"]
mp [label="Mark Peek\nmp@FreeBSD.org\n2001/07/27"]
mr [label="Michael Reifenberger\nmr@FreeBSD.org\n2001/09/30"]
@@ -283,6 +287,7 @@ sephe [label="Sepherosa Ziehau\nsephe@FreeBSD.org\n2007/03/28"]
sepotvin [label="Stephane E. Potvin\nsepotvin@FreeBSD.org\n2007/02/15"]
simon [label="Simon L. Nielsen\nsimon@FreeBSD.org\n2006/03/07"]
sjg [label="Simon J. Gerraty\nsjg@FreeBSD.org\n2012/10/23"]
+skra [label="Svatopluk Kraus\nslm@FreeBSD.org\n2015/10/28"]
slm [label="Stephen McConnell\nslm@FreeBSD.org\n2014/05/07"]
smh [label="Steven Hartland\nsmh@FreeBSD.org\n2012/11/12"]
sobomax [label="Maxim Sobolev\nsobomax@FreeBSD.org\n2001/07/25"]
@@ -332,6 +337,8 @@ day1 -> rgrimes
day1 -> alm
day1 -> dg
+adrian -> avos
+adrian -> lidl
adrian -> loos
adrian -> monthadar
adrian -> ray
@@ -456,6 +463,7 @@ gnn -> davide
gnn -> arybchik
gnn -> erj
gnn -> kp
+gnn -> jtl
grehan -> bryanv
@@ -565,11 +573,13 @@ kib -> jlh
kib -> jpaetzel
kib -> lulf
kib -> melifaro
+kib -> mmel
kib -> pho
kib -> pluknet
kib -> rdivacky
kib -> rmacklem
kib -> rmh
+kib -> skra
kib -> stas
kib -> tijl
kib -> trociny
@@ -658,6 +668,7 @@ rpaulo -> avg
rpaulo -> bschmidt
rpaulo -> dim
rpaulo -> jmmv
+rpaulo -> lidl
rpaulo -> ngie
rrs -> brucec
diff --git a/share/misc/scsi_modes b/share/misc/scsi_modes
index 781b8f1..80752e7 100644
--- a/share/misc/scsi_modes
+++ b/share/misc/scsi_modes
@@ -106,7 +106,7 @@
{EBACKERR} t1
{LogErr} t1
{Reserved} *t4
- {MRIE} b4
+ {MRIE} t4
{Interval Timer} i4
{Report Count} i4
}
diff --git a/share/mk/bsd.README b/share/mk/bsd.README
index cb6e41f..5aa1949 100644
--- a/share/mk/bsd.README
+++ b/share/mk/bsd.README
@@ -20,6 +20,7 @@ bsd.arch.inc.mk - includes arch-specific Makefile.$arch
bsd.compiler.mk - defined based on current compiler
bsd.confs.mk - install of configuration files
bsd.cpu.mk - sets CPU/arch-related variables (included from sys.mk)
+bsd.crunchgen.mk - building crunched binaries using crunchgen(1)
bsd.dep.mk - handle Makefile dependencies
bsd.doc.mk - building troff system documents
bsd.endian.mk - TARGET_ENDIAN=1234(little) or 4321 (big) for target
diff --git a/share/mk/bsd.compiler.mk b/share/mk/bsd.compiler.mk
index dcdf598..9ad4bae 100644
--- a/share/mk/bsd.compiler.mk
+++ b/share/mk/bsd.compiler.mk
@@ -25,13 +25,34 @@
.if !target(__<bsd.compiler.mk>__)
__<bsd.compiler.mk>__:
+# Try to import COMPILER_TYPE and COMPILER_VERSION from parent make.
+# The value is only used/exported for the same environment that impacts
+# CC and COMPILER_* settings here.
+_exported_vars= COMPILER_TYPE COMPILER_VERSION
+_cc_hash= ${CC}${MACHINE}${PATH}
+_cc_hash:= ${_cc_hash:hash}
+# Only import if none of the vars are set somehow else.
+_can_export= yes
+.for var in ${_exported_vars}
+.if defined(${var})
+_can_export= no
+.endif
+.endfor
+.if ${_can_export} == yes
+.for var in ${_exported_vars}
+.if defined(${var}.${_cc_hash})
+${var}= ${${var}.${_cc_hash}}
+.endif
+.endfor
+.endif
+
.if ${MACHINE} == "common"
# common is a pseudo machine for architecture independent
# generated files - thus there is no compiler.
COMPILER_TYPE= none
COMPILER_VERSION= 0
.elif !defined(COMPILER_TYPE) || !defined(COMPILER_VERSION)
-_v!= ${CC} --version 2>/dev/null || echo 0.0.0
+_v!= ${CC} --version || echo 0.0.0
.if !defined(COMPILER_TYPE)
. if ${CC:T:M*gcc*}
@@ -54,6 +75,14 @@ COMPILER_VERSION!=echo ${_v:M[1-9].[0-9]*} | awk -F. '{print $$1 * 10000 + $$2 *
.undef _v
.endif
+# Export the values so sub-makes don't have to look them up again, using the
+# hash key computed above.
+.for var in ${_exported_vars}
+${var}.${_cc_hash}:= ${${var}}
+.export-env ${var}.${_cc_hash}
+.undef ${var}.${_cc_hash}
+.endfor
+
.if ${COMPILER_TYPE} == "clang" || \
(${COMPILER_TYPE} == "gcc" && ${COMPILER_VERSION} >= 40800)
COMPILER_FEATURES= c++11
diff --git a/share/mk/bsd.confs.mk b/share/mk/bsd.confs.mk
index 36298d7..aa5191f 100644
--- a/share/mk/bsd.confs.mk
+++ b/share/mk/bsd.confs.mk
@@ -4,11 +4,10 @@
.error bsd.conf.mk cannot be included directly.
.endif
-.if ${MK_INCLUDES} != "no"
CONFGROUPS?= CONFS
.if !target(buildconfig)
-.for group in ${CONFSGROUPS}
+.for group in ${CONFGROUPS}
buildconfig: ${${group}}
.endfor
.endif
@@ -22,10 +21,9 @@ all: buildconfig
${group}OWN?= ${SHAREOWN}
${group}GRP?= ${SHAREGRP}
${group}MODE?= ${CONFMODE}
-${group}DIR?= ${CONFIGDIR}/
+${group}DIR?= ${CONFDIR}
STAGE_SETS+= ${group}
STAGE_DIR.${group}= ${STAGE_OBJTOP}${${group}DIR}
-STAGE_SYMLINKS_DIR.${group}= ${STAGE_OBJTOP}
_${group}CONFS=
.for cnf in ${${group}}
@@ -46,7 +44,6 @@ STAGE_AS_${cnf:T}= ${${group}NAME_${cnf:T}}
# XXX {group}OWN,GRP,MODE
STAGE_DIR.${cnf:T}= ${STAGE_OBJTOP}${${group}DIR_${cnf:T}}
stage_as.${cnf:T}: ${cnf}
-stage_config: stage_as.${cnf:T}
installconfig: _${group}INS_${cnf:T}
_${group}INS_${cnf:T}: ${cnf}
@@ -60,7 +57,6 @@ _${group}CONFS+= ${cnf}
.endfor
.if !empty(_${group}CONFS)
stage_files.${group}: ${_${group}CONFS}
-stage_config: stage_files.${group}
installconfig: _${group}INS
_${group}INS: ${_${group}CONFS}
@@ -78,10 +74,12 @@ _${group}INS: ${_${group}CONFS}
.endif # !target(installconfig)
-.if ${MK_STAGING} != "no" && !defined(_SKIP_BUILD)
-.if !defined(NO_STAGE_CONFIG)
-STAGE_TARGETS+= stage_config
+.if ${MK_STAGING} != "no"
+.if !empty(STAGE_SETS)
+buildconfig: stage_files
+.if !empty(STAGE_AS_SETS)
+buildconfig: stage_as
+.endif
.endif
.endif
-.endif # ${MK_INCLUDES} != "no"
diff --git a/share/mk/bsd.crunchgen.mk b/share/mk/bsd.crunchgen.mk
index 0f0edd3..9618f5e 100644
--- a/share/mk/bsd.crunchgen.mk
+++ b/share/mk/bsd.crunchgen.mk
@@ -1,5 +1,7 @@
#################################################################
#
+# Generate crunched binaries using crunchgen(1).
+#
# General notes:
#
# A number of Make variables are used to generate the crunchgen config file.
@@ -13,14 +15,14 @@
# local architecture.
#
# Special options can be specified for individual programs
-# CRUNCH_SRCDIR_$(P): base source directory for program $(P)
-# CRUNCH_BUILDOPTS_$(P): additional build options for $(P)
-# CRUNCH_ALIAS_$(P): additional names to be used for $(P)
+# CRUNCH_SRCDIR_${P}: base source directory for program ${P}
+# CRUNCH_BUILDOPTS_${P}: additional build options for ${P}
+# CRUNCH_ALIAS_${P}: additional names to be used for ${P}
#
# By default, any name appearing in CRUNCH_PROGS or CRUNCH_ALIAS_${P}
# will be used to generate a hard link to the resulting binary.
# Specific links can be suppressed by setting
-# CRUNCH_SUPPRESS_LINK_$(NAME) to 1.
+# CRUNCH_SUPPRESS_LINK_${NAME} to 1.
#
# If CRUNCH_GENERATE_LINKS is set to no, no links will be generated.
#
@@ -31,138 +33,124 @@
# The following is pretty nearly a generic crunchgen-handling makefile
#
-CONF= $(PROG).conf
-OUTMK= $(PROG).mk
-OUTC= $(PROG).c
-OUTPUTS=$(OUTMK) $(OUTC) $(PROG).cache
+CONF= ${PROG}.conf
+OUTMK= ${PROG}.mk
+OUTC= ${PROG}.c
+OUTPUTS=${OUTMK} ${OUTC} ${PROG}.cache
CRUNCHOBJS= ${.OBJDIR}
.if defined(MAKEOBJDIRPREFIX)
CANONICALOBJDIR:= ${MAKEOBJDIRPREFIX}${.CURDIR}
.elif defined(MAKEOBJDIR) && ${MAKEOBJDIR:M/*} != ""
-CANONICALOBJDIR:=${MAKEOBJDIR}
+CANONICALOBJDIR:= ${MAKEOBJDIR}
.else
CANONICALOBJDIR:= /usr/obj${.CURDIR}
.endif
-CRUNCH_GENERATE_LINKS?= yes
+CRUNCH_GENERATE_LINKS?= yes
-CLEANFILES+= $(CONF) *.o *.lo *.c *.mk *.cache *.a *.h
+CLEANFILES+= ${CONF} *.o *.lo *.c *.mk *.cache *.a *.h
# Don't try to extract debug info from ${PROG}.
-MK_DEBUG_FILES=no
+MK_DEBUG_FILES= no
+
+# Set a default SRCDIR for each for simpler handling below.
+.for D in ${CRUNCH_SRCDIRS}
+.for P in ${CRUNCH_PROGS_${D}}
+CRUNCH_SRCDIR_${P}?= ${.CURDIR}/../../${D}/${P}
+.endfor
+.endfor
# Program names and their aliases contribute hardlinks to 'rescue' executable,
# except for those that get suppressed.
-.for D in $(CRUNCH_SRCDIRS)
-.for P in $(CRUNCH_PROGS_$(D))
-.ifdef CRUNCH_SRCDIR_${P}
-$(OUTPUTS): $(CRUNCH_SRCDIR_${P})/Makefile
-.else
-$(OUTPUTS): $(.CURDIR)/../../$(D)/$(P)/Makefile
-.endif
+.for D in ${CRUNCH_SRCDIRS}
+.for P in ${CRUNCH_PROGS_${D}}
+${OUTPUTS}: ${CRUNCH_SRCDIR_${P}}/Makefile
.if ${CRUNCH_GENERATE_LINKS} == "yes"
.ifndef CRUNCH_SUPPRESS_LINK_${P}
-LINKS+= $(BINDIR)/$(PROG) $(BINDIR)/$(P)
+LINKS+= ${BINDIR}/${PROG} ${BINDIR}/${P}
.endif
-.for A in $(CRUNCH_ALIAS_$(P))
+.for A in ${CRUNCH_ALIAS_${P}}
.ifndef CRUNCH_SUPPRESS_LINK_${A}
-LINKS+= $(BINDIR)/$(PROG) $(BINDIR)/$(A)
+LINKS+= ${BINDIR}/${PROG} ${BINDIR}/${A}
.endif
.endfor
.endif
.endfor
.endfor
-all: $(PROG)
-exe: $(PROG)
+all: ${PROG}
+exe: ${PROG}
-$(CONF): Makefile
- echo \# Auto-generated, do not edit >$(.TARGET)
+${CONF}: Makefile
+ echo \# Auto-generated, do not edit >${.TARGET}
.ifdef CRUNCH_BUILDOPTS
- echo buildopts $(CRUNCH_BUILDOPTS) >>$(.TARGET)
+ echo buildopts ${CRUNCH_BUILDOPTS} >>${.TARGET}
.endif
.ifdef CRUNCH_LIBS
- echo libs $(CRUNCH_LIBS) >>$(.TARGET)
+ echo libs ${CRUNCH_LIBS} >>${.TARGET}
.endif
.ifdef CRUNCH_SHLIBS
- echo libs_so $(CRUNCH_SHLIBS) >>$(.TARGET)
-.endif
-.for D in $(CRUNCH_SRCDIRS)
-.for P in $(CRUNCH_PROGS_$(D))
- echo progs $(P) >>$(.TARGET)
-.ifdef CRUNCH_SRCDIR_${P}
- echo special $(P) srcdir $(CRUNCH_SRCDIR_${P}) >>$(.TARGET)
-.else
- echo special $(P) srcdir $(.CURDIR)/../../$(D)/$(P) >>$(.TARGET)
+ echo libs_so ${CRUNCH_SHLIBS} >>${.TARGET}
.endif
+.for D in ${CRUNCH_SRCDIRS}
+.for P in ${CRUNCH_PROGS_${D}}
+ echo progs ${P} >>${.TARGET}
+ echo special ${P} srcdir ${CRUNCH_SRCDIR_${P}} >>${.TARGET}
.ifdef CRUNCH_BUILDOPTS_${P}
- echo special $(P) buildopts DIRPRFX=${DIRPRFX}${P}/ \
- $(CRUNCH_BUILDOPTS_${P}) >>$(.TARGET)
+ echo special ${P} buildopts DIRPRFX=${DIRPRFX}${P}/ \
+ ${CRUNCH_BUILDOPTS_${P}} >>${.TARGET}
.else
- echo special $(P) buildopts DIRPRFX=${DIRPRFX}${P}/ >>$(.TARGET)
+ echo special ${P} buildopts DIRPRFX=${DIRPRFX}${P}/ >>${.TARGET}
.endif
-.for A in $(CRUNCH_ALIAS_$(P))
- echo ln $(P) $(A) >>$(.TARGET)
+.for A in ${CRUNCH_ALIAS_${P}}
+ echo ln ${P} ${A} >>${.TARGET}
.endfor
.endfor
.endfor
CRUNCHGEN?= crunchgen
-# XXX Make sure we don't pass -P to crunchgen(1).
-.MAKEFLAGS:= ${.MAKEFLAGS:N-P}
-.ORDER: $(OUTPUTS) objs
-$(OUTPUTS): $(CONF) .META
- MAKE=${MAKE} MAKEOBJDIRPREFIX=${CRUNCHOBJS} ${CRUNCHGEN} -fq -m $(OUTMK) \
- -c $(OUTC) $(CONF)
+CRUNCHENV?= MK_TESTS=no
+.ORDER: ${OUTPUTS} objs
+${OUTPUTS}: ${CONF} .META
+ MAKE=${MAKE} MAKEOBJDIRPREFIX=${CRUNCHOBJS} ${CRUNCHGEN} -fq \
+ -m ${OUTMK} -c ${OUTC} ${CONF}
-$(PROG): $(OUTPUTS) objs
- MAKEOBJDIRPREFIX=${CRUNCHOBJS} ${MAKE} -f $(OUTMK) exe
+# These 2 targets cannot use .MAKE since they depend on the generated
+# ${OUTMK} above.
+${PROG}: ${OUTPUTS} objs
+ ${CRUNCHENV} MAKEOBJDIRPREFIX=${CRUNCHOBJS} ${MAKE} -f ${OUTMK} exe
-objs: $(OUTMK)
- MAKEOBJDIRPREFIX=${CRUNCHOBJS} ${MAKE} -f $(OUTMK) objs
+objs: ${OUTMK}
+ ${CRUNCHENV} MAKEOBJDIRPREFIX=${CRUNCHOBJS} ${MAKE} -f ${OUTMK} objs
# <sigh> Someone should replace the bin/csh and bin/sh build-tools with
# shell scripts so we can remove this nonsense.
-build-tools:
-.for _tool in $(CRUNCH_BUILDTOOLS)
- cd $(.CURDIR)/../../${_tool}; \
- MAKEOBJDIRPREFIX=${CRUNCHOBJS} ${MAKE} obj; \
- MAKEOBJDIRPREFIX=${CRUNCHOBJS} ${MAKE} build-tools
+.for _tool in ${CRUNCH_BUILDTOOLS}
+build-tools-${_tool}:
+ ${_+_}cd ${.CURDIR}/../../${_tool}; \
+ ${CRUNCHENV} MAKEOBJDIRPREFIX=${CRUNCHOBJS} ${MAKE} obj; \
+ ${CRUNCHENV} MAKEOBJDIRPREFIX=${CRUNCHOBJS} ${MAKE} build-tools
+build-tools: build-tools-${_tool}
.endfor
# Use a separate build tree to hold files compiled for this crunchgen binary
# Yes, this does seem to partly duplicate bsd.subdir.mk, but I can't
# get that to cooperate with bsd.prog.mk. Besides, many of the standard
# targets should NOT be propagated into the components.
-cleandepend cleandir obj objlink:
-.for D in $(CRUNCH_SRCDIRS)
-.for P in $(CRUNCH_PROGS_$(D))
-.ifdef CRUNCH_SRCDIR_${P}
- cd ${CRUNCH_SRCDIR_$(P)} && \
- MAKEOBJDIRPREFIX=${CANONICALOBJDIR} ${MAKE} \
- DIRPRFX=${DIRPRFX}${P}/ ${CRUNCH_BUILDOPTS} ${.TARGET}
-.else
- cd $(.CURDIR)/../../${D}/${P} && \
- MAKEOBJDIRPREFIX=${CANONICALOBJDIR} ${MAKE} \
- DIRPRFX=${DIRPRFX}${P}/ ${CRUNCH_BUILDOPTS} ${.TARGET}
-.endif
+.for __target in clean cleandepend cleandir obj objlink
+.for D in ${CRUNCH_SRCDIRS}
+.for P in ${CRUNCH_PROGS_${D}}
+${__target}_crunchdir_${P}: .PHONY .MAKE
+ ${_+_}cd ${CRUNCH_SRCDIR_${P}} && \
+ ${CRUNCHENV} MAKEOBJDIRPREFIX=${CANONICALOBJDIR} ${MAKE} \
+ DIRPRFX=${DIRPRFX}${P}/ ${CRUNCH_BUILDOPTS} ${__target}
+${__target}: ${__target}_crunchdir_${P}
+.endfor
.endfor
.endfor
clean:
rm -f ${CLEANFILES}
- if [ -e ${.OBJDIR}/$(OUTMK) ]; then \
- MAKEOBJDIRPREFIX=${CRUNCHOBJS} ${MAKE} -f $(OUTMK) clean; \
+ ${_+_}if [ -e ${.OBJDIR}/${OUTMK} ]; then \
+ ${CRUNCHENV} MAKEOBJDIRPREFIX=${CRUNCHOBJS} ${MAKE} \
+ -f ${OUTMK} clean; \
fi
-.for D in $(CRUNCH_SRCDIRS)
-.for P in $(CRUNCH_PROGS_$(D))
-.ifdef CRUNCH_SRCDIR_${P}
- cd ${CRUNCH_SRCDIR_$(P)} && \
- MAKEOBJDIRPREFIX=${CANONICALOBJDIR} ${MAKE} \
- DIRPRFX=${DIRPRFX}${P}/ ${CRUNCH_BUILDOPTS} ${.TARGET}
-.else
- cd $(.CURDIR)/../../${D}/${P} && \
- MAKEOBJDIRPREFIX=${CANONICALOBJDIR} ${MAKE} \
- DIRPRFX=${DIRPRFX}${P}/ ${CRUNCH_BUILDOPTS} ${.TARGET}
-.endif
-.endfor
-.endfor
diff --git a/share/mk/bsd.files.mk b/share/mk/bsd.files.mk
index 6a6c66a..17a99d2 100644
--- a/share/mk/bsd.files.mk
+++ b/share/mk/bsd.files.mk
@@ -30,13 +30,12 @@ ${group}DIR?= ${BINDIR}
STAGE_SETS+= ${group}
.endif
STAGE_DIR.${group}= ${STAGE_OBJTOP}${${group}DIR}
-STAGE_SYMLINKS_DIR.${group}= ${STAGE_OBJTOP}
_${group}FILES=
.for file in ${${group}}
.if defined(${group}OWN_${file:T}) || defined(${group}GRP_${file:T}) || \
defined(${group}MODE_${file:T}) || defined(${group}DIR_${file:T}) || \
- defined(${group}NAME_${file:T})
+ defined(${group}NAME_${file:T}) || defined(${group}NAME)
${group}OWN_${file:T}?= ${${group}OWN}
${group}GRP_${file:T}?= ${${group}GRP}
${group}MODE_${file:T}?= ${${group}MODE}
diff --git a/share/mk/bsd.man.mk b/share/mk/bsd.man.mk
index 72aedfb..d0992b6 100644
--- a/share/mk/bsd.man.mk
+++ b/share/mk/bsd.man.mk
@@ -104,8 +104,8 @@ ${__target}: ${__page}
.endfor
.endif
.endfor
-.endif
-.else
+.endif # !empty(MAN)
+.else # !defined(MANFILTER)
.if defined(MAN) && !empty(MAN)
CLEANFILES+= ${MAN:T:S/$/${CATEXT}/g}
.if defined(MANBUILDCAT) && !empty(MANBUILDCAT)
@@ -120,9 +120,9 @@ ${__target}: ${__page}
_manpages: ${MAN}
.endif
.endif
-.endif
+.endif # defined(MANFILTER)
-.else
+.else # ${MK_MANCOMPRESS} == "yes"
ZEXT= ${MCOMPRESS_EXT}
@@ -169,7 +169,7 @@ ${__target}: ${__page}
.endfor
.endif
-.endif
+.endif # ${MK_MANCOMPRESS} == "no"
maninstall: _maninstall
_maninstall:
@@ -185,20 +185,26 @@ _maninstall: ${MAN}
${DESTDIR}${CATDIR}${__page:E}${MANSUBDIR}/${__page}
.endif
.endfor
-.else
-.for _page _sect in ${.ALLSRC:C/\.([^.]*)$/.\1 \1/}
- @d=${DESTDIR}${MANDIR}${_sect}${MANSUBDIR}/; \
- ${ECHO} ${MINSTALL} ${_page} $${d}; \
- ${MINSTALL} $${page} $${d};
-.endfor
+.else # !defined(MANFILTER)
+ @set ${.ALLSRC:C/\.([^.]*)$/.\1 \1/}; \
+ while : ; do \
+ case $$# in \
+ 0) break;; \
+ 1) echo "warn: missing extension: $$1"; break;; \
+ esac; \
+ page=$$1; shift; sect=$$1; shift; \
+ d=${DESTDIR}${MANDIR}$${sect}${MANSUBDIR}; \
+ ${ECHO} ${MINSTALL} $${page} $${d}; \
+ ${MINSTALL} $${page} $${d}; \
+ done
.if defined(MANBUILDCAT) && !empty(MANBUILDCAT)
.for __page in ${MAN}
${MINSTALL} ${__page:T:S/$/${CATEXT}/} \
${DESTDIR}${CATDIR}${__page:E}${MANSUBDIR}/${__page:T}
.endfor
.endif
-.endif
-.else
+.endif # defined(MANFILTER)
+.else # ${MK_MANCOMPRESS} == "yes"
.for __page in ${MAN}
${MINSTALL} ${__page:T:S/$/${MCOMPRESS_EXT}/g} \
${DESTDIR}${MANDIR}${__page:E}${MANSUBDIR}/
@@ -207,7 +213,7 @@ _maninstall: ${MAN}
${DESTDIR}${CATDIR}${__page:E}${MANSUBDIR}/${__page:T:S/$/${MCOMPRESS_EXT}/}
.endif
.endfor
-.endif
+.endif # ${MK_MANCOMPRESS} == "no"
.endif
.if !defined(NO_MLINKS) && defined(MLINKS) && !empty(MLINKS)
diff --git a/share/mk/bsd.progs.mk b/share/mk/bsd.progs.mk
index 2da30c7..c84e94b 100644
--- a/share/mk/bsd.progs.mk
+++ b/share/mk/bsd.progs.mk
@@ -31,7 +31,7 @@ UPDATE_DEPENDFILE_PROG = ${PROGS:[1]}
# They may have asked us to build just one
.for t in ${PROGS}
.if make($t)
-.if ${PROGS_CXX:M${t}}
+.if ${PROGS_CXX:U:M${t}}
PROG_CXX ?= $t
.endif
PROG ?= $t
@@ -116,16 +116,16 @@ x.$p= PROG_CXX=$p
$p ${p}_p: .PHONY .MAKE
(cd ${.CURDIR} && \
DEPENDFILE=.depend.$p \
- ${MAKE} -f ${MAKEFILE} _RECURSING_PROGS= \
- SUBDIR= PROG=$p ${x.$p})
+ NO_SUBDIR=1 ${MAKE} -f ${MAKEFILE} _RECURSING_PROGS= \
+ PROG=$p ${x.$p})
# Pseudo targets for PROG, such as 'install'.
.for t in ${PROGS_TARGETS:O:u}
$p.$t: .PHONY .MAKE
(cd ${.CURDIR} && \
DEPENDFILE=.depend.$p \
- ${MAKE} -f ${MAKEFILE} _RECURSING_PROGS= \
- SUBDIR= PROG=$p ${x.$p} ${@:E})
+ NO_SUBDIR=1 ${MAKE} -f ${MAKEFILE} _RECURSING_PROGS= \
+ PROG=$p ${x.$p} ${@:E})
.endfor
.endfor
diff --git a/share/mk/bsd.subdir.mk b/share/mk/bsd.subdir.mk
index 037a7fe..f9b9e97 100644
--- a/share/mk/bsd.subdir.mk
+++ b/share/mk/bsd.subdir.mk
@@ -28,6 +28,10 @@
# See ALL_SUBDIR_TARGETS for list of targets that will recurse.
# Custom targets can be added to SUBDIR_TARGETS in src.conf.
#
+# Targets defined in STANDALONE_SUBDIR_TARGETS will always be ran
+# with SUBDIR_PARALLEL and will not respect .WAIT or SUBDIR_DEPEND_
+# values.
+#
.if !target(__<bsd.subdir.mk>__)
__<bsd.subdir.mk>__:
@@ -38,6 +42,10 @@ ALL_SUBDIR_TARGETS= all all-man buildconfig checkdpadd clean cleandepend \
realinstall regress tags \
${SUBDIR_TARGETS}
+# Described above.
+STANDALONE_SUBDIR_TARGETS?= obj checkdpadd clean cleandepend cleandir \
+ cleanilinks cleanobj
+
.include <bsd.init.mk>
.if !defined(NEED_SUBDIR)
@@ -63,35 +71,37 @@ distribute: .MAKE
.endfor
.endif
-_SUBDIR: .USE .MAKE
-.if defined(SUBDIR) && !empty(SUBDIR) && !defined(NO_SUBDIR)
- @${_+_}for entry in ${SUBDIR:N.WAIT}; do \
- if test -d ${.CURDIR}/$${entry}.${MACHINE_ARCH}; then \
- ${ECHODIR} "===> ${DIRPRFX}$${entry}.${MACHINE_ARCH} (${.TARGET:S,realinstall,install,:S,^_sub.,,})"; \
- edir=$${entry}.${MACHINE_ARCH}; \
- cd ${.CURDIR}/$${edir}; \
- else \
- ${ECHODIR} "===> ${DIRPRFX}$$entry (${.TARGET:S,realinstall,install,:S,^_sub.,,})"; \
- edir=$${entry}; \
- cd ${.CURDIR}/$${edir}; \
+# Subdir code shared among 'make <subdir>', 'make <target>' and SUBDIR_PARALLEL.
+_SUBDIR_SH= \
+ if test -d ${.CURDIR}/$${dir}.${MACHINE_ARCH}; then \
+ dir=$${dir}.${MACHINE_ARCH}; \
fi; \
- ${MAKE} ${.TARGET:S,realinstall,install,:S,^_sub.,,} \
- DIRPRFX=${DIRPRFX}$$edir/; \
- done
+ ${ECHODIR} "===> ${DIRPRFX}$${dir} ($${target})"; \
+ cd ${.CURDIR}/$${dir}; \
+ ${MAKE} $${target} DIRPRFX=${DIRPRFX}$${dir}/
+
+_SUBDIR: .USEBEFORE
+.if defined(SUBDIR) && !empty(SUBDIR) && !defined(NO_SUBDIR)
+ @${_+_}target=${.TARGET:S,realinstall,install,}; \
+ for dir in ${SUBDIR:N.WAIT}; do ( ${_SUBDIR_SH} ); done
.endif
${SUBDIR:N.WAIT}: .PHONY .MAKE
- ${_+_}@if test -d ${.TARGET}.${MACHINE_ARCH}; then \
- cd ${.CURDIR}/${.TARGET}.${MACHINE_ARCH}; \
- else \
- cd ${.CURDIR}/${.TARGET}; \
- fi; \
- ${MAKE} all
+ ${_+_}@target=all; \
+ dir=${.TARGET}; \
+ ${_SUBDIR_SH};
# Work around parsing of .if nested in .for by putting .WAIT string into a var.
__wait= .WAIT
.for __target in ${ALL_SUBDIR_TARGETS}
-.ifdef SUBDIR_PARALLEL
+# Can ordering be skipped for this and SUBDIR_PARALLEL forced?
+.if make(${__target}) && ${STANDALONE_SUBDIR_TARGETS:M${__target}}
+_is_standalone_target= 1
+SUBDIR:= ${SUBDIR:N.WAIT}
+.else
+_is_standalone_target= 0
+.endif
+.if defined(SUBDIR_PARALLEL) || ${_is_standalone_target} == 1
__subdir_targets=
.for __dir in ${SUBDIR}
.if ${__wait} == ${__dir}
@@ -99,31 +109,24 @@ __subdir_targets+= .WAIT
.else
__subdir_targets+= ${__target}_subdir_${__dir}
__deps=
+.if ${_is_standalone_target} == 0
.for __dep in ${SUBDIR_DEPEND_${__dir}}
__deps+= ${__target}_subdir_${__dep}
.endfor
-${__target}_subdir_${__dir}: .MAKE ${__deps}
+.endif
+${__target}_subdir_${__dir}: .PHONY .MAKE ${__deps}
.if !defined(NO_SUBDIR)
- @${_+_}if test -d ${.CURDIR}/${__dir}.${MACHINE_ARCH}; then \
- ${ECHODIR} "===> ${DIRPRFX}${__dir}.${MACHINE_ARCH} (${__target:realinstall=install})"; \
- edir=${__dir}.${MACHINE_ARCH}; \
- cd ${.CURDIR}/$${edir}; \
- else \
- ${ECHODIR} "===> ${DIRPRFX}${__dir} (${__target:realinstall=install})"; \
- edir=${__dir}; \
- cd ${.CURDIR}/$${edir}; \
- fi; \
- ${MAKE} ${__target:realinstall=install} \
- DIRPRFX=${DIRPRFX}$$edir/
+ @${_+_}target=${__target:realinstall=install}; \
+ dir=${__dir}; \
+ ${_SUBDIR_SH};
.endif
.endif
-.endfor
+.endfor # __dir in ${SUBDIR}
${__target}: ${__subdir_targets}
.else
-${__target}: _sub.${__target}
-_sub.${__target}: _SUBDIR
-.endif
-.endfor
+${__target}: _SUBDIR
+.endif # SUBDIR_PARALLEL || _is_standalone_target
+.endfor # __target in ${ALL_SUBDIR_TARGETS}
# This is to support 'make includes' calling 'make buildincludes' and
# 'make installincludes' in the proper order, and to support these
@@ -132,8 +135,7 @@ _sub.${__target}: _SUBDIR
.for __stage in build install
${__stage}${__target}:
.if make(${__stage}${__target})
-${__stage}${__target}: _sub.${__stage}${__target}
-_sub.${__stage}${__target}: _SUBDIR
+${__stage}${__target}: _SUBDIR
.endif
.endfor
.if !target(${__target})
diff --git a/share/mk/src.opts.mk b/share/mk/src.opts.mk
index a5e78a3..7aca914 100644
--- a/share/mk/src.opts.mk
+++ b/share/mk/src.opts.mk
@@ -210,21 +210,22 @@ __TT=${MACHINE}
.endif
.include <bsd.compiler.mk>
-.if !${COMPILER_FEATURES:Mc++11}
-# If the compiler is not C++11 capable, disable clang and use gcc instead.
-__DEFAULT_YES_OPTIONS+=GCC GCC_BOOTSTRAP GNUCXX
-__DEFAULT_NO_OPTIONS+=CLANG CLANG_BOOTSTRAP CLANG_FULL CLANG_IS_CC
-.elif ${__T} == "aarch64" || ${__T} == "amd64" || ${__TT} == "arm" || \
- ${__T} == "i386"
-# On x86 and arm, clang is enabled, and will be installed as the default cc.
+# If the compiler is not C++11 capable, disable Clang and use GCC instead.
+# This means that architectures that have GCC 4.2 as default can not
+# build Clang without using an external compiler.
+
+.if ${COMPILER_FEATURES:Mc++11} && (${__T} == "aarch64" || \
+ ${__T} == "amd64" || ${__TT} == "arm" || ${__T} == "i386")
+# Clang is enabled, and will be installed as the default /usr/bin/cc.
__DEFAULT_YES_OPTIONS+=CLANG CLANG_BOOTSTRAP CLANG_FULL CLANG_IS_CC
__DEFAULT_NO_OPTIONS+=GCC GCC_BOOTSTRAP GNUCXX
-.elif ${__T:Mpowerpc*}
-# On powerpc, clang is enabled, but gcc is installed as the default cc.
+.elif ${COMPILER_FEATURES:Mc++11} && ${__T:Mpowerpc*}
+# On powerpc, if an external compiler that supports C++11 is used as ${CC},
+# then Clang is enabled, but GCC is installed as the default /usr/bin/cc.
__DEFAULT_YES_OPTIONS+=CLANG CLANG_FULL GCC GCC_BOOTSTRAP GNUCXX
__DEFAULT_NO_OPTIONS+=CLANG_BOOTSTRAP CLANG_IS_CC
.else
-# Everything else disables clang, and uses gcc instead.
+# Everything else disables Clang, and uses GCC instead.
__DEFAULT_YES_OPTIONS+=GCC GCC_BOOTSTRAP GNUCXX
__DEFAULT_NO_OPTIONS+=CLANG CLANG_BOOTSTRAP CLANG_FULL CLANG_IS_CC
.endif
diff --git a/share/monetdef/Makefile b/share/monetdef/Makefile
index 8a5aab7..c15e245 100644
--- a/share/monetdef/Makefile
+++ b/share/monetdef/Makefile
@@ -2,7 +2,7 @@
# Warning: Do not edit. This file is automatically generated from the
# tools in /usr/src/tools/tools/locale.
-LOCALEDIR= /usr/share/locale
+LOCALEDIR= ${SHAREDIR}/locale
FILESNAME= LC_MONETARY
.SUFFIXES: .src .out
diff --git a/share/msgdef/Makefile b/share/msgdef/Makefile
index 008fb7b..6dcb747 100644
--- a/share/msgdef/Makefile
+++ b/share/msgdef/Makefile
@@ -2,7 +2,7 @@
# Warning: Do not edit. This file is automatically generated from the
# tools in /usr/src/tools/tools/locale.
-LOCALEDIR= /usr/share/locale
+LOCALEDIR= ${SHAREDIR}/locale
FILESNAME= LC_MESSAGES
.SUFFIXES: .src .out
diff --git a/share/numericdef/Makefile b/share/numericdef/Makefile
index c1dbcc8..ed32a68 100644
--- a/share/numericdef/Makefile
+++ b/share/numericdef/Makefile
@@ -2,7 +2,7 @@
# Warning: Do not edit. This file is automatically generated from the
# tools in /usr/src/tools/tools/locale.
-LOCALEDIR= /usr/share/locale
+LOCALEDIR= ${SHAREDIR}/locale
FILESNAME= LC_NUMERIC
.SUFFIXES: .src .out
diff --git a/share/sendmail/Makefile b/share/sendmail/Makefile
index 8153d49..a548b63 100644
--- a/share/sendmail/Makefile
+++ b/share/sendmail/Makefile
@@ -7,7 +7,7 @@ CFDIR= cf
CFDIRS!= (cd ${SENDMAIL_DIR}; find -L ${CFDIR} \( \( -name CVS -o -name .svn \) -prune \) -o -type d -print)
CFFILES!= (cd ${SENDMAIL_DIR}; find -L ${CFDIR} \( \( -name CVS -o -name .svn \) -prune \) -o -type f -print)
-DDIR= ${DESTDIR}/usr/share/sendmail
+DDIR= ${DESTDIR}${SHAREDIR}/sendmail
# Define SHARED to indicate whether you want symbolic links to the system
# source (``symlinks''), or a separate copy (``copies'')
diff --git a/share/skel/Makefile b/share/skel/Makefile
index 305a455..6b67d2b 100644
--- a/share/skel/Makefile
+++ b/share/skel/Makefile
@@ -5,8 +5,8 @@ FILESGROUPS= FILES1 FILES2
FILES1= dot.cshrc dot.login dot.login_conf dot.mailrc dot.profile \
dot.shrc
FILES2= dot.mail_aliases dot.rhosts
-FILES1DIR= /usr/share/skel
-FILES2DIR= /usr/share/skel
+FILES1DIR= ${SHAREDIR}/skel
+FILES2DIR= ${SHAREDIR}/skel
FILES1MODE= 0644
FILES2MODE= 0600
diff --git a/sys/amd64/Makefile b/sys/amd64/Makefile
index 3925e74..2e87b95 100644
--- a/sys/amd64/Makefile
+++ b/sys/amd64/Makefile
@@ -14,7 +14,7 @@ all:
@echo "make links or tags only"
# Directories in which to place amd64 tags links
-DAMD64= acpica amd64 ia32 include isa linux32 pci
+DAMD64= acpica amd64 ia32 include linux linux32 pci vmm
links::
-for i in ${COMMDIR1}; do \
@@ -26,8 +26,9 @@ links::
SAMD64= ${SYS}/amd64/acpica/*.[ch] \
${SYS}/amd64/amd64/*.[ch] ${SYS}/amd64/ia32/*.[ch] \
- ${SYS}/amd64/include/*.[ch] ${SYS}/amd64/isa/*.[ch] \
- ${SYS}/amd64/linux32/*.[ch] ${SYS}/amd64/pci/*.[ch]
+ ${SYS}/amd64/include/*.[ch] ${SYS}/amd64/linux/*.[ch] \
+ ${SYS}/amd64/linux32/*.[ch] ${SYS}/amd64/pci/*.[ch] \
+ ${SYS}/amd64/vmm/*.[ch]
AAMD64= ${SYS}/amd64/amd64/*.S
tags::
diff --git a/sys/amd64/amd64/initcpu.c b/sys/amd64/amd64/initcpu.c
index 36f2d0f..f711b12 100644
--- a/sys/amd64/amd64/initcpu.c
+++ b/sys/amd64/amd64/initcpu.c
@@ -211,12 +211,17 @@ initializecpucache(void)
* CPUID_SS feature even though the native CPU supports it.
*/
TUNABLE_INT_FETCH("hw.clflush_disable", &hw_clflush_disable);
- if (vm_guest != VM_GUEST_NO && hw_clflush_disable == -1)
+ if (vm_guest != VM_GUEST_NO && hw_clflush_disable == -1) {
cpu_feature &= ~CPUID_CLFSH;
+ cpu_stdext_feature &= ~CPUID_STDEXT_CLFLUSHOPT;
+ }
+
/*
- * Allow to disable CLFLUSH feature manually by
- * hw.clflush_disable tunable.
+ * The kernel's use of CLFLUSH{,OPT} can be disabled manually
+ * by setting the hw.clflush_disable tunable.
*/
- if (hw_clflush_disable == 1)
+ if (hw_clflush_disable == 1) {
cpu_feature &= ~CPUID_CLFSH;
+ cpu_stdext_feature &= ~CPUID_STDEXT_CLFLUSHOPT;
+ }
}
diff --git a/sys/amd64/amd64/pmap.c b/sys/amd64/amd64/pmap.c
index cc1b73e..883c1c5 100644
--- a/sys/amd64/amd64/pmap.c
+++ b/sys/amd64/amd64/pmap.c
@@ -1710,9 +1710,8 @@ pmap_invalidate_cache_range(vm_offset_t sva, vm_offset_t eva, boolean_t force)
if ((cpu_feature & CPUID_SS) != 0 && !force)
; /* If "Self Snoop" is supported and allowed, do nothing. */
- else if ((cpu_feature & CPUID_CLFSH) != 0 &&
+ else if ((cpu_stdext_feature & CPUID_STDEXT_CLFLUSHOPT) != 0 &&
eva - sva < PMAP_CLFLUSH_THRESHOLD) {
-
/*
* XXX: Some CPUs fault, hang, or trash the local APIC
* registers if we use CLFLUSH on the local APIC
@@ -1731,8 +1730,21 @@ pmap_invalidate_cache_range(vm_offset_t sva, vm_offset_t eva, boolean_t force)
*/
mfence();
for (; sva < eva; sva += cpu_clflush_line_size)
- clflush(sva);
+ clflushopt(sva);
mfence();
+ } else if ((cpu_feature & CPUID_CLFSH) != 0 &&
+ eva - sva < PMAP_CLFLUSH_THRESHOLD) {
+ if (pmap_kextract(sva) == lapic_paddr)
+ return;
+ /*
+ * Writes are ordered by CLFLUSH on Intel CPUs.
+ */
+ if (cpu_vendor_id != CPU_VENDOR_INTEL)
+ mfence();
+ for (; sva < eva; sva += cpu_clflush_line_size)
+ clflush(sva);
+ if (cpu_vendor_id != CPU_VENDOR_INTEL)
+ mfence();
} else {
/*
@@ -1756,19 +1768,27 @@ pmap_invalidate_cache_pages(vm_page_t *pages, int count)
{
vm_offset_t daddr, eva;
int i;
+ bool useclflushopt;
+ useclflushopt = (cpu_stdext_feature & CPUID_STDEXT_CLFLUSHOPT) != 0;
if (count >= PMAP_CLFLUSH_THRESHOLD / PAGE_SIZE ||
- (cpu_feature & CPUID_CLFSH) == 0)
+ ((cpu_feature & CPUID_CLFSH) == 0 && !useclflushopt))
pmap_invalidate_cache();
else {
- mfence();
+ if (useclflushopt || cpu_vendor_id != CPU_VENDOR_INTEL)
+ mfence();
for (i = 0; i < count; i++) {
daddr = PHYS_TO_DMAP(VM_PAGE_TO_PHYS(pages[i]));
eva = daddr + PAGE_SIZE;
- for (; daddr < eva; daddr += cpu_clflush_line_size)
- clflush(daddr);
+ for (; daddr < eva; daddr += cpu_clflush_line_size) {
+ if (useclflushopt)
+ clflushopt(daddr);
+ else
+ clflush(daddr);
+ }
}
- mfence();
+ if (useclflushopt || cpu_vendor_id != CPU_VENDOR_INTEL)
+ mfence();
}
}
@@ -6391,7 +6411,7 @@ pmap_change_attr_locked(vm_offset_t va, vm_size_t size, int mode)
*/
for (tmpva = base; tmpva < base + size; ) {
pdpe = pmap_pdpe(kernel_pmap, tmpva);
- if (*pdpe == 0)
+ if (pdpe == NULL || *pdpe == 0)
return (EINVAL);
if (*pdpe & PG_PS) {
/*
@@ -6464,7 +6484,8 @@ pmap_change_attr_locked(vm_offset_t va, vm_size_t size, int mode)
X86_PG_PDE_CACHE);
changed = TRUE;
}
- if (tmpva >= VM_MIN_KERNEL_ADDRESS) {
+ if (tmpva >= VM_MIN_KERNEL_ADDRESS &&
+ (*pdpe & PG_PS_FRAME) < dmaplimit) {
if (pa_start == pa_end) {
/* Start physical address run. */
pa_start = *pdpe & PG_PS_FRAME;
@@ -6493,7 +6514,8 @@ pmap_change_attr_locked(vm_offset_t va, vm_size_t size, int mode)
X86_PG_PDE_CACHE);
changed = TRUE;
}
- if (tmpva >= VM_MIN_KERNEL_ADDRESS) {
+ if (tmpva >= VM_MIN_KERNEL_ADDRESS &&
+ (*pde & PG_PS_FRAME) < dmaplimit) {
if (pa_start == pa_end) {
/* Start physical address run. */
pa_start = *pde & PG_PS_FRAME;
@@ -6520,7 +6542,8 @@ pmap_change_attr_locked(vm_offset_t va, vm_size_t size, int mode)
X86_PG_PTE_CACHE);
changed = TRUE;
}
- if (tmpva >= VM_MIN_KERNEL_ADDRESS) {
+ if (tmpva >= VM_MIN_KERNEL_ADDRESS &&
+ (*pte & PG_PS_FRAME) < dmaplimit) {
if (pa_start == pa_end) {
/* Start physical address run. */
pa_start = *pte & PG_FRAME;
diff --git a/sys/amd64/cloudabi64/cloudabi64_sysvec.c b/sys/amd64/cloudabi64/cloudabi64_sysvec.c
index 89540ed..e6e680b 100644
--- a/sys/amd64/cloudabi64/cloudabi64_sysvec.c
+++ b/sys/amd64/cloudabi64/cloudabi64_sysvec.c
@@ -27,107 +27,26 @@
__FBSDID("$FreeBSD$");
#include <sys/param.h>
-#include <sys/exec.h>
-#include <sys/imgact.h>
-#include <sys/imgact_elf.h>
#include <sys/kernel.h>
-#include <sys/module.h>
#include <sys/proc.h>
-#include <sys/smp.h>
-#include <sys/sysctl.h>
#include <sys/sysent.h>
-#include <sys/systm.h>
-#include <vm/pmap.h>
#include <vm/vm.h>
+#include <vm/pmap.h>
#include <machine/frame.h>
#include <machine/pcb.h>
#include <machine/pmap.h>
-#include <machine/psl.h>
#include <machine/vmparam.h>
#include <compat/cloudabi/cloudabi_util.h>
#include <compat/cloudabi64/cloudabi64_syscall.h>
-#include <compat/cloudabi64/cloudabi64_syscalldefs.h>
#include <compat/cloudabi64/cloudabi64_util.h>
extern const char *cloudabi64_syscallnames[];
extern struct sysent cloudabi64_sysent[];
-static register_t *
-cloudabi64_copyout_strings(struct image_params *imgp)
-{
- uintptr_t begin;
- size_t len;
-
- /* Copy out program arguments. */
- len = imgp->args->begin_envv - imgp->args->begin_argv;
- begin = rounddown2(USRSTACK - len, sizeof(register_t));
- copyout(imgp->args->begin_argv, (void *)begin, len);
- return ((register_t *)begin);
-}
-
-static int
-cloudabi64_fixup(register_t **stack_base, struct image_params *imgp)
-{
- char canarybuf[64];
- Elf64_Auxargs *args;
- struct thread *td;
- void *argdata, *canary;
- size_t argdatalen;
- int error;
-
- /*
- * CloudABI executables do not store the FreeBSD OS release
- * number in their header. Set the OS release number to the
- * latest version of FreeBSD, so that system calls behave as if
- * called natively.
- */
- td = curthread;
- td->td_proc->p_osrel = __FreeBSD_version;
-
- /* Store canary for stack smashing protection. */
- argdata = *stack_base;
- arc4rand(canarybuf, sizeof(canarybuf), 0);
- *stack_base -= howmany(sizeof(canarybuf), sizeof(register_t));
- canary = *stack_base;
- error = copyout(canarybuf, canary, sizeof(canarybuf));
- if (error != 0)
- return (error);
-
- /*
- * Compute length of program arguments. As the argument data is
- * binary safe, we had to add a trailing null byte in
- * exec_copyin_data_fds(). Undo this by reducing the length.
- */
- args = (Elf64_Auxargs *)imgp->auxargs;
- argdatalen = imgp->args->begin_envv - imgp->args->begin_argv;
- if (argdatalen > 0)
- --argdatalen;
-
- /* Write out an auxiliary vector. */
- cloudabi64_auxv_t auxv[] = {
-#define VAL(type, val) { .a_type = (type), .a_val = (val) }
-#define PTR(type, ptr) { .a_type = (type), .a_ptr = (uintptr_t)(ptr) }
- PTR(CLOUDABI_AT_ARGDATA, argdata),
- VAL(CLOUDABI_AT_ARGDATALEN, argdatalen),
- PTR(CLOUDABI_AT_CANARY, canary),
- VAL(CLOUDABI_AT_CANARYLEN, sizeof(canarybuf)),
- VAL(CLOUDABI_AT_NCPUS, mp_ncpus),
- VAL(CLOUDABI_AT_PAGESZ, args->pagesz),
- PTR(CLOUDABI_AT_PHDR, args->phdr),
- VAL(CLOUDABI_AT_PHNUM, args->phnum),
- VAL(CLOUDABI_AT_TID, td->td_tid),
-#undef VAL
-#undef PTR
- { .a_type = CLOUDABI_AT_NULL },
- };
- *stack_base -= howmany(sizeof(auxv), sizeof(register_t));
- return (copyout(auxv, *stack_base, sizeof(auxv)));
-}
-
static int
cloudabi64_fetch_syscall_args(struct thread *td, struct syscall_args *sa)
{
@@ -234,43 +153,9 @@ static struct sysentvec cloudabi64_elf_sysvec = {
INIT_SYSENTVEC(elf_sysvec, &cloudabi64_elf_sysvec);
-static Elf64_Brandinfo cloudabi64_brand = {
+Elf64_Brandinfo cloudabi64_brand = {
.brand = ELFOSABI_CLOUDABI,
.machine = EM_X86_64,
.sysvec = &cloudabi64_elf_sysvec,
.compat_3_brand = "CloudABI",
};
-
-static int
-cloudabi64_modevent(module_t mod, int type, void *data)
-{
-
- switch (type) {
- case MOD_LOAD:
- if (elf64_insert_brand_entry(&cloudabi64_brand) < 0) {
- printf("Failed to add CloudABI ELF brand handler\n");
- return (EINVAL);
- }
- return (0);
- case MOD_UNLOAD:
- if (elf64_brand_inuse(&cloudabi64_brand))
- return (EBUSY);
- if (elf64_remove_brand_entry(&cloudabi64_brand) < 0) {
- printf("Failed to remove CloudABI ELF brand handler\n");
- return (EINVAL);
- }
- return (0);
- default:
- return (EOPNOTSUPP);
- }
-}
-
-static moduledata_t cloudabi64_module = {
- "cloudabi64",
- cloudabi64_modevent,
- NULL
-};
-
-DECLARE_MODULE_TIED(cloudabi64, cloudabi64_module, SI_SUB_EXEC, SI_ORDER_ANY);
-MODULE_DEPEND(cloudabi64, cloudabi, 1, 1, 1);
-FEATURE(cloudabi64, "CloudABI 64bit support");
diff --git a/sys/amd64/include/cpufunc.h b/sys/amd64/include/cpufunc.h
index c0c5b0a..f2961d6 100644
--- a/sys/amd64/include/cpufunc.h
+++ b/sys/amd64/include/cpufunc.h
@@ -107,6 +107,13 @@ clflush(u_long addr)
}
static __inline void
+clflushopt(u_long addr)
+{
+
+ __asm __volatile(".byte 0x66;clflush %0" : : "m" (*(char *)addr));
+}
+
+static __inline void
clts(void)
{
diff --git a/sys/amd64/include/xen/xen-os.h b/sys/amd64/include/xen/xen-os.h
index ee498b9..1490e59 100644
--- a/sys/amd64/include/xen/xen-os.h
+++ b/sys/amd64/include/xen/xen-os.h
@@ -1,132 +1,6 @@
-/******************************************************************************
- * amd64/xen/xen-os.h
- *
- * Random collection of macros and definition
- *
- * Copyright (c) 2003, 2004 Keir Fraser (on behalf of the Xen team)
- * All rights reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- *
- * $FreeBSD$
+/*-
+ * This file is in the public domain.
*/
+/* $FreeBSD$ */
-#ifndef _MACHINE_XEN_XEN_OS_H_
-#define _MACHINE_XEN_XEN_OS_H_
-
-#ifdef PAE
-#define CONFIG_X86_PAE
-#endif
-
-/* Everything below this point is not included by assembler (.S) files. */
-#ifndef __ASSEMBLY__
-
-/* REP NOP (PAUSE) is a good thing to insert into busy-wait loops. */
-static inline void rep_nop(void)
-{
- __asm__ __volatile__ ( "rep;nop" : : : "memory" );
-}
-#define cpu_relax() rep_nop()
-
-/* This is a barrier for the compiler only, NOT the processor! */
-#define barrier() __asm__ __volatile__("": : :"memory")
-
-#define LOCK_PREFIX ""
-#define LOCK ""
-#define ADDR (*(volatile long *) addr)
-
-/**
- * test_and_clear_bit - Clear a bit and return its old value
- * @nr: Bit to set
- * @addr: Address to count from
- *
- * This operation is atomic and cannot be reordered.
- * It also implies a memory barrier.
- */
-static __inline int test_and_clear_bit(int nr, volatile void * addr)
-{
- int oldbit;
-
- __asm__ __volatile__( LOCK_PREFIX
- "btrl %2,%1\n\tsbbl %0,%0"
- :"=r" (oldbit),"=m" (ADDR)
- :"Ir" (nr) : "memory");
- return oldbit;
-}
-
-static __inline int constant_test_bit(int nr, const volatile void * addr)
-{
- return ((1UL << (nr & 31)) & (((const volatile unsigned int *) addr)[nr >> 5])) != 0;
-}
-
-static __inline int variable_test_bit(int nr, volatile void * addr)
-{
- int oldbit;
-
- __asm__ __volatile__(
- "btl %2,%1\n\tsbbl %0,%0"
- :"=r" (oldbit)
- :"m" (ADDR),"Ir" (nr));
- return oldbit;
-}
-
-#define test_bit(nr,addr) \
-(__builtin_constant_p(nr) ? \
- constant_test_bit((nr),(addr)) : \
- variable_test_bit((nr),(addr)))
-
-/**
- * set_bit - Atomically set a bit in memory
- * @nr: the bit to set
- * @addr: the address to start counting from
- *
- * This function is atomic and may not be reordered. See __set_bit()
- * if you do not require the atomic guarantees.
- * Note that @nr may be almost arbitrarily large; this function is not
- * restricted to acting on a single-word quantity.
- */
-static __inline__ void set_bit(int nr, volatile void * addr)
-{
- __asm__ __volatile__( LOCK_PREFIX
- "btsl %1,%0"
- :"=m" (ADDR)
- :"Ir" (nr));
-}
-
-/**
- * clear_bit - Clears a bit in memory
- * @nr: Bit to clear
- * @addr: Address to start counting from
- *
- * clear_bit() is atomic and may not be reordered. However, it does
- * not contain a memory barrier, so if it is used for locking purposes,
- * you should call smp_mb__before_clear_bit() and/or smp_mb__after_clear_bit()
- * in order to ensure changes are visible on other processors.
- */
-static __inline__ void clear_bit(int nr, volatile void * addr)
-{
- __asm__ __volatile__( LOCK_PREFIX
- "btrl %1,%0"
- :"=m" (ADDR)
- :"Ir" (nr));
-}
-
-#endif /* !__ASSEMBLY__ */
-
-#endif /* _MACHINE_XEN_XEN_OS_H_ */
+#include <x86/xen/xen-os.h>
diff --git a/sys/amd64/linux/linux_proto.h b/sys/amd64/linux/linux_proto.h
index 795a830..8aecd7c 100644
--- a/sys/amd64/linux/linux_proto.h
+++ b/sys/amd64/linux/linux_proto.h
@@ -3,7 +3,7 @@
*
* DO NOT EDIT-- this file is automatically generated.
* $FreeBSD$
- * created from FreeBSD: head/sys/amd64/linux/syscalls.master 283492 2015-05-24 18:08:01Z dchagin
+ * created from FreeBSD: head/sys/amd64/linux/syscalls.master 289769 2015-10-22 21:28:20Z jhb
*/
#ifndef _LINUX_SYSPROTO_H_
diff --git a/sys/amd64/linux/linux_syscall.h b/sys/amd64/linux/linux_syscall.h
index 19a0265..671eb0b 100644
--- a/sys/amd64/linux/linux_syscall.h
+++ b/sys/amd64/linux/linux_syscall.h
@@ -3,7 +3,7 @@
*
* DO NOT EDIT-- this file is automatically generated.
* $FreeBSD$
- * created from FreeBSD: head/sys/amd64/linux/syscalls.master 283492 2015-05-24 18:08:01Z dchagin
+ * created from FreeBSD: head/sys/amd64/linux/syscalls.master 289769 2015-10-22 21:28:20Z jhb
*/
#define LINUX_SYS_read 0
diff --git a/sys/amd64/linux/linux_syscalls.c b/sys/amd64/linux/linux_syscalls.c
index f19d285..a414ea0 100644
--- a/sys/amd64/linux/linux_syscalls.c
+++ b/sys/amd64/linux/linux_syscalls.c
@@ -3,7 +3,7 @@
*
* DO NOT EDIT-- this file is automatically generated.
* $FreeBSD$
- * created from FreeBSD: head/sys/amd64/linux/syscalls.master 283492 2015-05-24 18:08:01Z dchagin
+ * created from FreeBSD: head/sys/amd64/linux/syscalls.master 289769 2015-10-22 21:28:20Z jhb
*/
const char *linux_syscallnames[] = {
diff --git a/sys/amd64/linux/linux_sysent.c b/sys/amd64/linux/linux_sysent.c
index a575787..31f2eeb 100644
--- a/sys/amd64/linux/linux_sysent.c
+++ b/sys/amd64/linux/linux_sysent.c
@@ -3,7 +3,7 @@
*
* DO NOT EDIT-- this file is automatically generated.
* $FreeBSD$
- * created from FreeBSD: head/sys/amd64/linux/syscalls.master 283492 2015-05-24 18:08:01Z dchagin
+ * created from FreeBSD: head/sys/amd64/linux/syscalls.master 289769 2015-10-22 21:28:20Z jhb
*/
#include <sys/param.h>
diff --git a/sys/amd64/linux/linux_systrace_args.c b/sys/amd64/linux/linux_systrace_args.c
index 529e768..d649eed 100644
--- a/sys/amd64/linux/linux_systrace_args.c
+++ b/sys/amd64/linux/linux_systrace_args.c
@@ -73,8 +73,8 @@ systrace_args(int sysnum, void *params, uint64_t *uarg, int *n_args)
/* poll */
case 7: {
struct poll_args *p = params;
- iarg[0] = p->*; /* struct pollfd */
- uarg[1] = p->nfds; /* unsigned int */
+ uarg[0] = (intptr_t) p->fds; /* struct pollfd * */
+ uarg[1] = p->nfds; /* u_int */
iarg[2] = p->timeout; /* int */
*n_args = 3;
break;
@@ -591,7 +591,7 @@ systrace_args(int sysnum, void *params, uint64_t *uarg, int *n_args)
iarg[0] = p->semid; /* l_int */
iarg[1] = p->semnum; /* l_int */
iarg[2] = p->cmd; /* l_int */
- uarg[3] = p->arg; /* union l_semun */
+ uarg[3] = p->arg.buf; /* union l_semun */
*n_args = 4;
break;
}
@@ -1327,7 +1327,7 @@ systrace_args(int sysnum, void *params, uint64_t *uarg, int *n_args)
/* settimeofday */
case 164: {
struct settimeofday_args *p = params;
- uarg[0] = (intptr_t) p->tp; /* struct l_timeval * */
+ uarg[0] = (intptr_t) p->tv; /* struct l_timeval * */
uarg[1] = (intptr_t) p->tzp; /* struct timezone * */
*n_args = 2;
break;
@@ -2380,10 +2380,10 @@ systrace_entry_setargdesc(int sysnum, int ndx, char *desc, size_t descsz)
case 7:
switch(ndx) {
case 0:
- p = "struct pollfd";
+ p = "struct pollfd *";
break;
case 1:
- p = "unsigned int";
+ p = "u_int";
break;
case 2:
p = "int";
diff --git a/sys/amd64/linux/syscalls.master b/sys/amd64/linux/syscalls.master
index d840f88..87c8000 100644
--- a/sys/amd64/linux/syscalls.master
+++ b/sys/amd64/linux/syscalls.master
@@ -49,8 +49,8 @@
struct l_newstat *buf); }
6 AUE_LSTAT STD { int linux_newlstat(char *path, \
struct l_newstat *buf); }
-7 AUE_POLL NOPROTO { int poll(struct pollfd*, \
- unsigned int nfds, int timeout); }
+7 AUE_POLL NOPROTO { int poll(struct pollfd *fds, u_int nfds, \
+ int timeout); }
8 AUE_LSEEK STD { int linux_lseek(l_uint fdes, l_off_t off, \
l_int whence); }
9 AUE_MMAP STD { int linux_mmap2(l_ulong addr, l_ulong len, \
@@ -316,7 +316,7 @@
161 AUE_CHROOT NOPROTO { int chroot(char *path); }
162 AUE_SYNC NOPROTO { int sync(void); }
163 AUE_ACCT NOPROTO { int acct(char *path); }
-164 AUE_SETTIMEOFDAY NOPROTO { int settimeofday(struct l_timeval *tp, struct timezone *tzp); }
+164 AUE_SETTIMEOFDAY NOPROTO { int settimeofday(struct l_timeval *tv, struct timezone *tzp); }
165 AUE_MOUNT STD { int linux_mount(char *specialfile, \
char *dir, char *filesystemtype, \
l_ulong rwflag, void *data); }
diff --git a/sys/amd64/linux32/linux.h b/sys/amd64/linux32/linux.h
index e3b9f11..02d12f5 100644
--- a/sys/amd64/linux32/linux.h
+++ b/sys/amd64/linux32/linux.h
@@ -40,7 +40,7 @@
* debugging support
*/
extern u_char linux_debug_map[];
-#define ldebug(name) isclr(linux_debug_map, LINUX_SYS_linux_ ## name)
+#define ldebug(name) isclr(linux_debug_map, LINUX32_SYS_linux_ ## name)
#define ARGS(nm, fmt) "linux(%ld/%ld): "#nm"("fmt")\n", \
(long)td->td_proc->p_pid, (long)td->td_tid
#define LMSG(fmt) "linux(%ld/%ld): "fmt"\n", \
diff --git a/sys/amd64/linux32/linux32_locore.s b/sys/amd64/linux32/linux32_locore.s
index 4edbdf3..7bbd69a 100644
--- a/sys/amd64/linux32/linux32_locore.s
+++ b/sys/amd64/linux32/linux32_locore.s
@@ -28,7 +28,7 @@ NON_GPROF_ENTRY(linux32_sigcode)
jmp *LINUX_SIGF_HANDLER(%ebx)
.startsigcode:
popl %eax
- movl $LINUX_SYS_linux_sigreturn,%eax /* linux_sigreturn() */
+ movl $LINUX32_SYS_linux_sigreturn,%eax /* linux_sigreturn() */
int $0x80 /* enter kernel with args */
.endsigcode:
0: jmp 0b
@@ -44,7 +44,7 @@ NON_GPROF_ENTRY(linux32_rt_sigcode)
push %eax
jmp *LINUX_RT_SIGF_HANDLER(%edi)
.startrtsigcode:
- movl $LINUX_SYS_linux_rt_sigreturn,%eax /* linux_rt_sigreturn() */
+ movl $LINUX32_SYS_linux_rt_sigreturn,%eax /* linux_rt_sigreturn() */
int $0x80 /* enter kernel with args */
.endrtsigcode:
0: jmp 0b
diff --git a/sys/amd64/linux32/linux32_proto.h b/sys/amd64/linux32/linux32_proto.h
index c6b233e..84c7815 100644
--- a/sys/amd64/linux32/linux32_proto.h
+++ b/sys/amd64/linux32/linux32_proto.h
@@ -3,11 +3,11 @@
*
* DO NOT EDIT-- this file is automatically generated.
* $FreeBSD$
- * created from FreeBSD: head/sys/amd64/linux32/syscalls.master 283492 2015-05-24 18:08:01Z dchagin
+ * created from FreeBSD: head/sys/amd64/linux32/syscalls.master 289769 2015-10-22 21:28:20Z jhb
*/
-#ifndef _LINUX_SYSPROTO_H_
-#define _LINUX_SYSPROTO_H_
+#ifndef _LINUX32_SYSPROTO_H_
+#define _LINUX32_SYSPROTO_H_
#include <sys/signal.h>
#include <sys/acl.h>
@@ -1464,286 +1464,286 @@ int linux_process_vm_writev(struct thread *, struct linux_process_vm_writev_args
#endif /* COMPAT_FREEBSD7 */
-#define LINUX_SYS_AUE_linux_exit AUE_EXIT
-#define LINUX_SYS_AUE_linux_fork AUE_FORK
-#define LINUX_SYS_AUE_linux_open AUE_OPEN_RWTC
-#define LINUX_SYS_AUE_linux_waitpid AUE_WAIT4
-#define LINUX_SYS_AUE_linux_creat AUE_CREAT
-#define LINUX_SYS_AUE_linux_link AUE_LINK
-#define LINUX_SYS_AUE_linux_unlink AUE_UNLINK
-#define LINUX_SYS_AUE_linux_execve AUE_EXECVE
-#define LINUX_SYS_AUE_linux_chdir AUE_CHDIR
-#define LINUX_SYS_AUE_linux_time AUE_NULL
-#define LINUX_SYS_AUE_linux_mknod AUE_MKNOD
-#define LINUX_SYS_AUE_linux_chmod AUE_CHMOD
-#define LINUX_SYS_AUE_linux_lchown16 AUE_LCHOWN
-#define LINUX_SYS_AUE_linux_stat AUE_STAT
-#define LINUX_SYS_AUE_linux_lseek AUE_LSEEK
-#define LINUX_SYS_AUE_linux_getpid AUE_GETPID
-#define LINUX_SYS_AUE_linux_mount AUE_MOUNT
-#define LINUX_SYS_AUE_linux_oldumount AUE_UMOUNT
-#define LINUX_SYS_AUE_linux_setuid16 AUE_SETUID
-#define LINUX_SYS_AUE_linux_getuid16 AUE_GETUID
-#define LINUX_SYS_AUE_linux_stime AUE_SETTIMEOFDAY
-#define LINUX_SYS_AUE_linux_ptrace AUE_PTRACE
-#define LINUX_SYS_AUE_linux_alarm AUE_NULL
-#define LINUX_SYS_AUE_linux_pause AUE_NULL
-#define LINUX_SYS_AUE_linux_utime AUE_UTIME
-#define LINUX_SYS_AUE_linux_access AUE_ACCESS
-#define LINUX_SYS_AUE_linux_nice AUE_NICE
-#define LINUX_SYS_AUE_linux_kill AUE_KILL
-#define LINUX_SYS_AUE_linux_rename AUE_RENAME
-#define LINUX_SYS_AUE_linux_mkdir AUE_MKDIR
-#define LINUX_SYS_AUE_linux_rmdir AUE_RMDIR
-#define LINUX_SYS_AUE_linux_pipe AUE_PIPE
-#define LINUX_SYS_AUE_linux_times AUE_NULL
-#define LINUX_SYS_AUE_linux_brk AUE_NULL
-#define LINUX_SYS_AUE_linux_setgid16 AUE_SETGID
-#define LINUX_SYS_AUE_linux_getgid16 AUE_GETGID
-#define LINUX_SYS_AUE_linux_signal AUE_NULL
-#define LINUX_SYS_AUE_linux_geteuid16 AUE_GETEUID
-#define LINUX_SYS_AUE_linux_getegid16 AUE_GETEGID
-#define LINUX_SYS_AUE_linux_umount AUE_UMOUNT
-#define LINUX_SYS_AUE_linux_ioctl AUE_IOCTL
-#define LINUX_SYS_AUE_linux_fcntl AUE_FCNTL
-#define LINUX_SYS_AUE_linux_olduname AUE_NULL
-#define LINUX_SYS_AUE_linux_ustat AUE_NULL
-#define LINUX_SYS_AUE_linux_getppid AUE_GETPPID
-#define LINUX_SYS_AUE_linux_sigaction AUE_NULL
-#define LINUX_SYS_AUE_linux_sgetmask AUE_NULL
-#define LINUX_SYS_AUE_linux_ssetmask AUE_NULL
-#define LINUX_SYS_AUE_linux_setreuid16 AUE_SETREUID
-#define LINUX_SYS_AUE_linux_setregid16 AUE_SETREGID
-#define LINUX_SYS_AUE_linux_sigsuspend AUE_NULL
-#define LINUX_SYS_AUE_linux_sigpending AUE_NULL
-#define LINUX_SYS_AUE_linux_sethostname AUE_SYSCTL
-#define LINUX_SYS_AUE_linux_setrlimit AUE_SETRLIMIT
-#define LINUX_SYS_AUE_linux_old_getrlimit AUE_GETRLIMIT
-#define LINUX_SYS_AUE_linux_getrusage AUE_GETRUSAGE
-#define LINUX_SYS_AUE_linux_gettimeofday AUE_NULL
-#define LINUX_SYS_AUE_linux_settimeofday AUE_SETTIMEOFDAY
-#define LINUX_SYS_AUE_linux_getgroups16 AUE_GETGROUPS
-#define LINUX_SYS_AUE_linux_setgroups16 AUE_SETGROUPS
-#define LINUX_SYS_AUE_linux_old_select AUE_SELECT
-#define LINUX_SYS_AUE_linux_symlink AUE_SYMLINK
-#define LINUX_SYS_AUE_linux_lstat AUE_LSTAT
-#define LINUX_SYS_AUE_linux_readlink AUE_READLINK
-#define LINUX_SYS_AUE_linux_reboot AUE_REBOOT
-#define LINUX_SYS_AUE_linux_readdir AUE_GETDIRENTRIES
-#define LINUX_SYS_AUE_linux_mmap AUE_MMAP
-#define LINUX_SYS_AUE_linux_truncate AUE_TRUNCATE
-#define LINUX_SYS_AUE_linux_ftruncate AUE_FTRUNCATE
-#define LINUX_SYS_AUE_linux_getpriority AUE_GETPRIORITY
-#define LINUX_SYS_AUE_linux_statfs AUE_STATFS
-#define LINUX_SYS_AUE_linux_fstatfs AUE_FSTATFS
-#define LINUX_SYS_AUE_linux_socketcall AUE_NULL
-#define LINUX_SYS_AUE_linux_syslog AUE_NULL
-#define LINUX_SYS_AUE_linux_setitimer AUE_SETITIMER
-#define LINUX_SYS_AUE_linux_getitimer AUE_GETITIMER
-#define LINUX_SYS_AUE_linux_newstat AUE_STAT
-#define LINUX_SYS_AUE_linux_newlstat AUE_LSTAT
-#define LINUX_SYS_AUE_linux_newfstat AUE_FSTAT
-#define LINUX_SYS_AUE_linux_uname AUE_NULL
-#define LINUX_SYS_AUE_linux_iopl AUE_NULL
-#define LINUX_SYS_AUE_linux_vhangup AUE_NULL
-#define LINUX_SYS_AUE_linux_wait4 AUE_WAIT4
-#define LINUX_SYS_AUE_linux_swapoff AUE_SWAPOFF
-#define LINUX_SYS_AUE_linux_sysinfo AUE_NULL
-#define LINUX_SYS_AUE_linux_ipc AUE_NULL
-#define LINUX_SYS_AUE_linux_sigreturn AUE_SIGRETURN
-#define LINUX_SYS_AUE_linux_clone AUE_RFORK
-#define LINUX_SYS_AUE_linux_setdomainname AUE_SYSCTL
-#define LINUX_SYS_AUE_linux_newuname AUE_NULL
-#define LINUX_SYS_AUE_linux_adjtimex AUE_ADJTIME
-#define LINUX_SYS_AUE_linux_mprotect AUE_MPROTECT
-#define LINUX_SYS_AUE_linux_sigprocmask AUE_SIGPROCMASK
-#define LINUX_SYS_AUE_linux_create_module AUE_NULL
-#define LINUX_SYS_AUE_linux_init_module AUE_NULL
-#define LINUX_SYS_AUE_linux_delete_module AUE_NULL
-#define LINUX_SYS_AUE_linux_get_kernel_syms AUE_NULL
-#define LINUX_SYS_AUE_linux_quotactl AUE_QUOTACTL
-#define LINUX_SYS_AUE_linux_bdflush AUE_BDFLUSH
-#define LINUX_SYS_AUE_linux_sysfs AUE_NULL
-#define LINUX_SYS_AUE_linux_personality AUE_PERSONALITY
-#define LINUX_SYS_AUE_linux_setfsuid16 AUE_SETFSUID
-#define LINUX_SYS_AUE_linux_setfsgid16 AUE_SETFSGID
-#define LINUX_SYS_AUE_linux_llseek AUE_LSEEK
-#define LINUX_SYS_AUE_linux_getdents AUE_GETDIRENTRIES
-#define LINUX_SYS_AUE_linux_select AUE_SELECT
-#define LINUX_SYS_AUE_linux_msync AUE_MSYNC
-#define LINUX_SYS_AUE_linux_readv AUE_READV
-#define LINUX_SYS_AUE_linux_writev AUE_WRITEV
-#define LINUX_SYS_AUE_linux_getsid AUE_GETSID
-#define LINUX_SYS_AUE_linux_fdatasync AUE_NULL
-#define LINUX_SYS_AUE_linux_sysctl AUE_SYSCTL
-#define LINUX_SYS_AUE_linux_sched_setparam AUE_SCHED_SETPARAM
-#define LINUX_SYS_AUE_linux_sched_getparam AUE_SCHED_GETPARAM
-#define LINUX_SYS_AUE_linux_sched_setscheduler AUE_SCHED_SETSCHEDULER
-#define LINUX_SYS_AUE_linux_sched_getscheduler AUE_SCHED_GETSCHEDULER
-#define LINUX_SYS_AUE_linux_sched_get_priority_max AUE_SCHED_GET_PRIORITY_MAX
-#define LINUX_SYS_AUE_linux_sched_get_priority_min AUE_SCHED_GET_PRIORITY_MIN
-#define LINUX_SYS_AUE_linux_sched_rr_get_interval AUE_SCHED_RR_GET_INTERVAL
-#define LINUX_SYS_AUE_linux_nanosleep AUE_NULL
-#define LINUX_SYS_AUE_linux_mremap AUE_NULL
-#define LINUX_SYS_AUE_linux_setresuid16 AUE_SETRESUID
-#define LINUX_SYS_AUE_linux_getresuid16 AUE_GETRESUID
-#define LINUX_SYS_AUE_linux_query_module AUE_NULL
-#define LINUX_SYS_AUE_linux_nfsservctl AUE_NULL
-#define LINUX_SYS_AUE_linux_setresgid16 AUE_SETRESGID
-#define LINUX_SYS_AUE_linux_getresgid16 AUE_GETRESGID
-#define LINUX_SYS_AUE_linux_prctl AUE_PRCTL
-#define LINUX_SYS_AUE_linux_rt_sigreturn AUE_NULL
-#define LINUX_SYS_AUE_linux_rt_sigaction AUE_NULL
-#define LINUX_SYS_AUE_linux_rt_sigprocmask AUE_NULL
-#define LINUX_SYS_AUE_linux_rt_sigpending AUE_NULL
-#define LINUX_SYS_AUE_linux_rt_sigtimedwait AUE_NULL
-#define LINUX_SYS_AUE_linux_rt_sigqueueinfo AUE_NULL
-#define LINUX_SYS_AUE_linux_rt_sigsuspend AUE_NULL
-#define LINUX_SYS_AUE_linux_pread AUE_PREAD
-#define LINUX_SYS_AUE_linux_pwrite AUE_PWRITE
-#define LINUX_SYS_AUE_linux_chown16 AUE_CHOWN
-#define LINUX_SYS_AUE_linux_getcwd AUE_GETCWD
-#define LINUX_SYS_AUE_linux_capget AUE_CAPGET
-#define LINUX_SYS_AUE_linux_capset AUE_CAPSET
-#define LINUX_SYS_AUE_linux_sigaltstack AUE_NULL
-#define LINUX_SYS_AUE_linux_sendfile AUE_SENDFILE
-#define LINUX_SYS_AUE_linux_vfork AUE_VFORK
-#define LINUX_SYS_AUE_linux_getrlimit AUE_GETRLIMIT
-#define LINUX_SYS_AUE_linux_mmap2 AUE_MMAP
-#define LINUX_SYS_AUE_linux_truncate64 AUE_TRUNCATE
-#define LINUX_SYS_AUE_linux_ftruncate64 AUE_FTRUNCATE
-#define LINUX_SYS_AUE_linux_stat64 AUE_STAT
-#define LINUX_SYS_AUE_linux_lstat64 AUE_LSTAT
-#define LINUX_SYS_AUE_linux_fstat64 AUE_FSTAT
-#define LINUX_SYS_AUE_linux_lchown AUE_LCHOWN
-#define LINUX_SYS_AUE_linux_getuid AUE_GETUID
-#define LINUX_SYS_AUE_linux_getgid AUE_GETGID
-#define LINUX_SYS_AUE_linux_getgroups AUE_GETGROUPS
-#define LINUX_SYS_AUE_linux_setgroups AUE_SETGROUPS
-#define LINUX_SYS_AUE_linux_chown AUE_CHOWN
-#define LINUX_SYS_AUE_linux_setfsuid AUE_SETFSUID
-#define LINUX_SYS_AUE_linux_setfsgid AUE_SETFSGID
-#define LINUX_SYS_AUE_linux_pivot_root AUE_PIVOT_ROOT
-#define LINUX_SYS_AUE_linux_mincore AUE_MINCORE
-#define LINUX_SYS_AUE_linux_getdents64 AUE_GETDIRENTRIES
-#define LINUX_SYS_AUE_linux_fcntl64 AUE_FCNTL
-#define LINUX_SYS_AUE_linux_gettid AUE_NULL
-#define LINUX_SYS_AUE_linux_setxattr AUE_NULL
-#define LINUX_SYS_AUE_linux_lsetxattr AUE_NULL
-#define LINUX_SYS_AUE_linux_fsetxattr AUE_NULL
-#define LINUX_SYS_AUE_linux_getxattr AUE_NULL
-#define LINUX_SYS_AUE_linux_lgetxattr AUE_NULL
-#define LINUX_SYS_AUE_linux_fgetxattr AUE_NULL
-#define LINUX_SYS_AUE_linux_listxattr AUE_NULL
-#define LINUX_SYS_AUE_linux_llistxattr AUE_NULL
-#define LINUX_SYS_AUE_linux_flistxattr AUE_NULL
-#define LINUX_SYS_AUE_linux_removexattr AUE_NULL
-#define LINUX_SYS_AUE_linux_lremovexattr AUE_NULL
-#define LINUX_SYS_AUE_linux_fremovexattr AUE_NULL
-#define LINUX_SYS_AUE_linux_tkill AUE_NULL
-#define LINUX_SYS_AUE_linux_sys_futex AUE_NULL
-#define LINUX_SYS_AUE_linux_sched_setaffinity AUE_NULL
-#define LINUX_SYS_AUE_linux_sched_getaffinity AUE_NULL
-#define LINUX_SYS_AUE_linux_set_thread_area AUE_NULL
-#define LINUX_SYS_AUE_linux_fadvise64 AUE_NULL
-#define LINUX_SYS_AUE_linux_exit_group AUE_EXIT
-#define LINUX_SYS_AUE_linux_lookup_dcookie AUE_NULL
-#define LINUX_SYS_AUE_linux_epoll_create AUE_NULL
-#define LINUX_SYS_AUE_linux_epoll_ctl AUE_NULL
-#define LINUX_SYS_AUE_linux_epoll_wait AUE_NULL
-#define LINUX_SYS_AUE_linux_remap_file_pages AUE_NULL
-#define LINUX_SYS_AUE_linux_set_tid_address AUE_NULL
-#define LINUX_SYS_AUE_linux_timer_create AUE_NULL
-#define LINUX_SYS_AUE_linux_timer_settime AUE_NULL
-#define LINUX_SYS_AUE_linux_timer_gettime AUE_NULL
-#define LINUX_SYS_AUE_linux_timer_getoverrun AUE_NULL
-#define LINUX_SYS_AUE_linux_timer_delete AUE_NULL
-#define LINUX_SYS_AUE_linux_clock_settime AUE_CLOCK_SETTIME
-#define LINUX_SYS_AUE_linux_clock_gettime AUE_NULL
-#define LINUX_SYS_AUE_linux_clock_getres AUE_NULL
-#define LINUX_SYS_AUE_linux_clock_nanosleep AUE_NULL
-#define LINUX_SYS_AUE_linux_statfs64 AUE_STATFS
-#define LINUX_SYS_AUE_linux_fstatfs64 AUE_FSTATFS
-#define LINUX_SYS_AUE_linux_tgkill AUE_NULL
-#define LINUX_SYS_AUE_linux_utimes AUE_UTIMES
-#define LINUX_SYS_AUE_linux_fadvise64_64 AUE_NULL
-#define LINUX_SYS_AUE_linux_mbind AUE_NULL
-#define LINUX_SYS_AUE_linux_get_mempolicy AUE_NULL
-#define LINUX_SYS_AUE_linux_set_mempolicy AUE_NULL
-#define LINUX_SYS_AUE_linux_mq_open AUE_NULL
-#define LINUX_SYS_AUE_linux_mq_unlink AUE_NULL
-#define LINUX_SYS_AUE_linux_mq_timedsend AUE_NULL
-#define LINUX_SYS_AUE_linux_mq_timedreceive AUE_NULL
-#define LINUX_SYS_AUE_linux_mq_notify AUE_NULL
-#define LINUX_SYS_AUE_linux_mq_getsetattr AUE_NULL
-#define LINUX_SYS_AUE_linux_kexec_load AUE_NULL
-#define LINUX_SYS_AUE_linux_waitid AUE_WAIT6
-#define LINUX_SYS_AUE_linux_add_key AUE_NULL
-#define LINUX_SYS_AUE_linux_request_key AUE_NULL
-#define LINUX_SYS_AUE_linux_keyctl AUE_NULL
-#define LINUX_SYS_AUE_linux_ioprio_set AUE_NULL
-#define LINUX_SYS_AUE_linux_ioprio_get AUE_NULL
-#define LINUX_SYS_AUE_linux_inotify_init AUE_NULL
-#define LINUX_SYS_AUE_linux_inotify_add_watch AUE_NULL
-#define LINUX_SYS_AUE_linux_inotify_rm_watch AUE_NULL
-#define LINUX_SYS_AUE_linux_migrate_pages AUE_NULL
-#define LINUX_SYS_AUE_linux_openat AUE_OPEN_RWTC
-#define LINUX_SYS_AUE_linux_mkdirat AUE_MKDIRAT
-#define LINUX_SYS_AUE_linux_mknodat AUE_MKNODAT
-#define LINUX_SYS_AUE_linux_fchownat AUE_FCHOWNAT
-#define LINUX_SYS_AUE_linux_futimesat AUE_FUTIMESAT
-#define LINUX_SYS_AUE_linux_fstatat64 AUE_FSTATAT
-#define LINUX_SYS_AUE_linux_unlinkat AUE_UNLINKAT
-#define LINUX_SYS_AUE_linux_renameat AUE_RENAMEAT
-#define LINUX_SYS_AUE_linux_linkat AUE_LINKAT
-#define LINUX_SYS_AUE_linux_symlinkat AUE_SYMLINKAT
-#define LINUX_SYS_AUE_linux_readlinkat AUE_READLINKAT
-#define LINUX_SYS_AUE_linux_fchmodat AUE_FCHMODAT
-#define LINUX_SYS_AUE_linux_faccessat AUE_FACCESSAT
-#define LINUX_SYS_AUE_linux_pselect6 AUE_SELECT
-#define LINUX_SYS_AUE_linux_ppoll AUE_POLL
-#define LINUX_SYS_AUE_linux_unshare AUE_NULL
-#define LINUX_SYS_AUE_linux_set_robust_list AUE_NULL
-#define LINUX_SYS_AUE_linux_get_robust_list AUE_NULL
-#define LINUX_SYS_AUE_linux_splice AUE_NULL
-#define LINUX_SYS_AUE_linux_sync_file_range AUE_NULL
-#define LINUX_SYS_AUE_linux_tee AUE_NULL
-#define LINUX_SYS_AUE_linux_vmsplice AUE_NULL
-#define LINUX_SYS_AUE_linux_move_pages AUE_NULL
-#define LINUX_SYS_AUE_linux_getcpu AUE_NULL
-#define LINUX_SYS_AUE_linux_epoll_pwait AUE_NULL
-#define LINUX_SYS_AUE_linux_utimensat AUE_FUTIMESAT
-#define LINUX_SYS_AUE_linux_signalfd AUE_NULL
-#define LINUX_SYS_AUE_linux_timerfd_create AUE_NULL
-#define LINUX_SYS_AUE_linux_eventfd AUE_NULL
-#define LINUX_SYS_AUE_linux_fallocate AUE_NULL
-#define LINUX_SYS_AUE_linux_timerfd_settime AUE_NULL
-#define LINUX_SYS_AUE_linux_timerfd_gettime AUE_NULL
-#define LINUX_SYS_AUE_linux_signalfd4 AUE_NULL
-#define LINUX_SYS_AUE_linux_eventfd2 AUE_NULL
-#define LINUX_SYS_AUE_linux_epoll_create1 AUE_NULL
-#define LINUX_SYS_AUE_linux_dup3 AUE_NULL
-#define LINUX_SYS_AUE_linux_pipe2 AUE_NULL
-#define LINUX_SYS_AUE_linux_inotify_init1 AUE_NULL
-#define LINUX_SYS_AUE_linux_preadv AUE_NULL
-#define LINUX_SYS_AUE_linux_pwritev AUE_NULL
-#define LINUX_SYS_AUE_linux_rt_tsigqueueinfo AUE_NULL
-#define LINUX_SYS_AUE_linux_perf_event_open AUE_NULL
-#define LINUX_SYS_AUE_linux_recvmmsg AUE_NULL
-#define LINUX_SYS_AUE_linux_fanotify_init AUE_NULL
-#define LINUX_SYS_AUE_linux_fanotify_mark AUE_NULL
-#define LINUX_SYS_AUE_linux_prlimit64 AUE_NULL
-#define LINUX_SYS_AUE_linux_name_to_handle_at AUE_NULL
-#define LINUX_SYS_AUE_linux_open_by_handle_at AUE_NULL
-#define LINUX_SYS_AUE_linux_clock_adjtime AUE_NULL
-#define LINUX_SYS_AUE_linux_syncfs AUE_SYNC
-#define LINUX_SYS_AUE_linux_sendmmsg AUE_NULL
-#define LINUX_SYS_AUE_linux_setns AUE_NULL
-#define LINUX_SYS_AUE_linux_process_vm_readv AUE_NULL
-#define LINUX_SYS_AUE_linux_process_vm_writev AUE_NULL
+#define LINUX32_SYS_AUE_linux_exit AUE_EXIT
+#define LINUX32_SYS_AUE_linux_fork AUE_FORK
+#define LINUX32_SYS_AUE_linux_open AUE_OPEN_RWTC
+#define LINUX32_SYS_AUE_linux_waitpid AUE_WAIT4
+#define LINUX32_SYS_AUE_linux_creat AUE_CREAT
+#define LINUX32_SYS_AUE_linux_link AUE_LINK
+#define LINUX32_SYS_AUE_linux_unlink AUE_UNLINK
+#define LINUX32_SYS_AUE_linux_execve AUE_EXECVE
+#define LINUX32_SYS_AUE_linux_chdir AUE_CHDIR
+#define LINUX32_SYS_AUE_linux_time AUE_NULL
+#define LINUX32_SYS_AUE_linux_mknod AUE_MKNOD
+#define LINUX32_SYS_AUE_linux_chmod AUE_CHMOD
+#define LINUX32_SYS_AUE_linux_lchown16 AUE_LCHOWN
+#define LINUX32_SYS_AUE_linux_stat AUE_STAT
+#define LINUX32_SYS_AUE_linux_lseek AUE_LSEEK
+#define LINUX32_SYS_AUE_linux_getpid AUE_GETPID
+#define LINUX32_SYS_AUE_linux_mount AUE_MOUNT
+#define LINUX32_SYS_AUE_linux_oldumount AUE_UMOUNT
+#define LINUX32_SYS_AUE_linux_setuid16 AUE_SETUID
+#define LINUX32_SYS_AUE_linux_getuid16 AUE_GETUID
+#define LINUX32_SYS_AUE_linux_stime AUE_SETTIMEOFDAY
+#define LINUX32_SYS_AUE_linux_ptrace AUE_PTRACE
+#define LINUX32_SYS_AUE_linux_alarm AUE_NULL
+#define LINUX32_SYS_AUE_linux_pause AUE_NULL
+#define LINUX32_SYS_AUE_linux_utime AUE_UTIME
+#define LINUX32_SYS_AUE_linux_access AUE_ACCESS
+#define LINUX32_SYS_AUE_linux_nice AUE_NICE
+#define LINUX32_SYS_AUE_linux_kill AUE_KILL
+#define LINUX32_SYS_AUE_linux_rename AUE_RENAME
+#define LINUX32_SYS_AUE_linux_mkdir AUE_MKDIR
+#define LINUX32_SYS_AUE_linux_rmdir AUE_RMDIR
+#define LINUX32_SYS_AUE_linux_pipe AUE_PIPE
+#define LINUX32_SYS_AUE_linux_times AUE_NULL
+#define LINUX32_SYS_AUE_linux_brk AUE_NULL
+#define LINUX32_SYS_AUE_linux_setgid16 AUE_SETGID
+#define LINUX32_SYS_AUE_linux_getgid16 AUE_GETGID
+#define LINUX32_SYS_AUE_linux_signal AUE_NULL
+#define LINUX32_SYS_AUE_linux_geteuid16 AUE_GETEUID
+#define LINUX32_SYS_AUE_linux_getegid16 AUE_GETEGID
+#define LINUX32_SYS_AUE_linux_umount AUE_UMOUNT
+#define LINUX32_SYS_AUE_linux_ioctl AUE_IOCTL
+#define LINUX32_SYS_AUE_linux_fcntl AUE_FCNTL
+#define LINUX32_SYS_AUE_linux_olduname AUE_NULL
+#define LINUX32_SYS_AUE_linux_ustat AUE_NULL
+#define LINUX32_SYS_AUE_linux_getppid AUE_GETPPID
+#define LINUX32_SYS_AUE_linux_sigaction AUE_NULL
+#define LINUX32_SYS_AUE_linux_sgetmask AUE_NULL
+#define LINUX32_SYS_AUE_linux_ssetmask AUE_NULL
+#define LINUX32_SYS_AUE_linux_setreuid16 AUE_SETREUID
+#define LINUX32_SYS_AUE_linux_setregid16 AUE_SETREGID
+#define LINUX32_SYS_AUE_linux_sigsuspend AUE_NULL
+#define LINUX32_SYS_AUE_linux_sigpending AUE_NULL
+#define LINUX32_SYS_AUE_linux_sethostname AUE_SYSCTL
+#define LINUX32_SYS_AUE_linux_setrlimit AUE_SETRLIMIT
+#define LINUX32_SYS_AUE_linux_old_getrlimit AUE_GETRLIMIT
+#define LINUX32_SYS_AUE_linux_getrusage AUE_GETRUSAGE
+#define LINUX32_SYS_AUE_linux_gettimeofday AUE_NULL
+#define LINUX32_SYS_AUE_linux_settimeofday AUE_SETTIMEOFDAY
+#define LINUX32_SYS_AUE_linux_getgroups16 AUE_GETGROUPS
+#define LINUX32_SYS_AUE_linux_setgroups16 AUE_SETGROUPS
+#define LINUX32_SYS_AUE_linux_old_select AUE_SELECT
+#define LINUX32_SYS_AUE_linux_symlink AUE_SYMLINK
+#define LINUX32_SYS_AUE_linux_lstat AUE_LSTAT
+#define LINUX32_SYS_AUE_linux_readlink AUE_READLINK
+#define LINUX32_SYS_AUE_linux_reboot AUE_REBOOT
+#define LINUX32_SYS_AUE_linux_readdir AUE_GETDIRENTRIES
+#define LINUX32_SYS_AUE_linux_mmap AUE_MMAP
+#define LINUX32_SYS_AUE_linux_truncate AUE_TRUNCATE
+#define LINUX32_SYS_AUE_linux_ftruncate AUE_FTRUNCATE
+#define LINUX32_SYS_AUE_linux_getpriority AUE_GETPRIORITY
+#define LINUX32_SYS_AUE_linux_statfs AUE_STATFS
+#define LINUX32_SYS_AUE_linux_fstatfs AUE_FSTATFS
+#define LINUX32_SYS_AUE_linux_socketcall AUE_NULL
+#define LINUX32_SYS_AUE_linux_syslog AUE_NULL
+#define LINUX32_SYS_AUE_linux_setitimer AUE_SETITIMER
+#define LINUX32_SYS_AUE_linux_getitimer AUE_GETITIMER
+#define LINUX32_SYS_AUE_linux_newstat AUE_STAT
+#define LINUX32_SYS_AUE_linux_newlstat AUE_LSTAT
+#define LINUX32_SYS_AUE_linux_newfstat AUE_FSTAT
+#define LINUX32_SYS_AUE_linux_uname AUE_NULL
+#define LINUX32_SYS_AUE_linux_iopl AUE_NULL
+#define LINUX32_SYS_AUE_linux_vhangup AUE_NULL
+#define LINUX32_SYS_AUE_linux_wait4 AUE_WAIT4
+#define LINUX32_SYS_AUE_linux_swapoff AUE_SWAPOFF
+#define LINUX32_SYS_AUE_linux_sysinfo AUE_NULL
+#define LINUX32_SYS_AUE_linux_ipc AUE_NULL
+#define LINUX32_SYS_AUE_linux_sigreturn AUE_SIGRETURN
+#define LINUX32_SYS_AUE_linux_clone AUE_RFORK
+#define LINUX32_SYS_AUE_linux_setdomainname AUE_SYSCTL
+#define LINUX32_SYS_AUE_linux_newuname AUE_NULL
+#define LINUX32_SYS_AUE_linux_adjtimex AUE_ADJTIME
+#define LINUX32_SYS_AUE_linux_mprotect AUE_MPROTECT
+#define LINUX32_SYS_AUE_linux_sigprocmask AUE_SIGPROCMASK
+#define LINUX32_SYS_AUE_linux_create_module AUE_NULL
+#define LINUX32_SYS_AUE_linux_init_module AUE_NULL
+#define LINUX32_SYS_AUE_linux_delete_module AUE_NULL
+#define LINUX32_SYS_AUE_linux_get_kernel_syms AUE_NULL
+#define LINUX32_SYS_AUE_linux_quotactl AUE_QUOTACTL
+#define LINUX32_SYS_AUE_linux_bdflush AUE_BDFLUSH
+#define LINUX32_SYS_AUE_linux_sysfs AUE_NULL
+#define LINUX32_SYS_AUE_linux_personality AUE_PERSONALITY
+#define LINUX32_SYS_AUE_linux_setfsuid16 AUE_SETFSUID
+#define LINUX32_SYS_AUE_linux_setfsgid16 AUE_SETFSGID
+#define LINUX32_SYS_AUE_linux_llseek AUE_LSEEK
+#define LINUX32_SYS_AUE_linux_getdents AUE_GETDIRENTRIES
+#define LINUX32_SYS_AUE_linux_select AUE_SELECT
+#define LINUX32_SYS_AUE_linux_msync AUE_MSYNC
+#define LINUX32_SYS_AUE_linux_readv AUE_READV
+#define LINUX32_SYS_AUE_linux_writev AUE_WRITEV
+#define LINUX32_SYS_AUE_linux_getsid AUE_GETSID
+#define LINUX32_SYS_AUE_linux_fdatasync AUE_NULL
+#define LINUX32_SYS_AUE_linux_sysctl AUE_SYSCTL
+#define LINUX32_SYS_AUE_linux_sched_setparam AUE_SCHED_SETPARAM
+#define LINUX32_SYS_AUE_linux_sched_getparam AUE_SCHED_GETPARAM
+#define LINUX32_SYS_AUE_linux_sched_setscheduler AUE_SCHED_SETSCHEDULER
+#define LINUX32_SYS_AUE_linux_sched_getscheduler AUE_SCHED_GETSCHEDULER
+#define LINUX32_SYS_AUE_linux_sched_get_priority_max AUE_SCHED_GET_PRIORITY_MAX
+#define LINUX32_SYS_AUE_linux_sched_get_priority_min AUE_SCHED_GET_PRIORITY_MIN
+#define LINUX32_SYS_AUE_linux_sched_rr_get_interval AUE_SCHED_RR_GET_INTERVAL
+#define LINUX32_SYS_AUE_linux_nanosleep AUE_NULL
+#define LINUX32_SYS_AUE_linux_mremap AUE_NULL
+#define LINUX32_SYS_AUE_linux_setresuid16 AUE_SETRESUID
+#define LINUX32_SYS_AUE_linux_getresuid16 AUE_GETRESUID
+#define LINUX32_SYS_AUE_linux_query_module AUE_NULL
+#define LINUX32_SYS_AUE_linux_nfsservctl AUE_NULL
+#define LINUX32_SYS_AUE_linux_setresgid16 AUE_SETRESGID
+#define LINUX32_SYS_AUE_linux_getresgid16 AUE_GETRESGID
+#define LINUX32_SYS_AUE_linux_prctl AUE_PRCTL
+#define LINUX32_SYS_AUE_linux_rt_sigreturn AUE_NULL
+#define LINUX32_SYS_AUE_linux_rt_sigaction AUE_NULL
+#define LINUX32_SYS_AUE_linux_rt_sigprocmask AUE_NULL
+#define LINUX32_SYS_AUE_linux_rt_sigpending AUE_NULL
+#define LINUX32_SYS_AUE_linux_rt_sigtimedwait AUE_NULL
+#define LINUX32_SYS_AUE_linux_rt_sigqueueinfo AUE_NULL
+#define LINUX32_SYS_AUE_linux_rt_sigsuspend AUE_NULL
+#define LINUX32_SYS_AUE_linux_pread AUE_PREAD
+#define LINUX32_SYS_AUE_linux_pwrite AUE_PWRITE
+#define LINUX32_SYS_AUE_linux_chown16 AUE_CHOWN
+#define LINUX32_SYS_AUE_linux_getcwd AUE_GETCWD
+#define LINUX32_SYS_AUE_linux_capget AUE_CAPGET
+#define LINUX32_SYS_AUE_linux_capset AUE_CAPSET
+#define LINUX32_SYS_AUE_linux_sigaltstack AUE_NULL
+#define LINUX32_SYS_AUE_linux_sendfile AUE_SENDFILE
+#define LINUX32_SYS_AUE_linux_vfork AUE_VFORK
+#define LINUX32_SYS_AUE_linux_getrlimit AUE_GETRLIMIT
+#define LINUX32_SYS_AUE_linux_mmap2 AUE_MMAP
+#define LINUX32_SYS_AUE_linux_truncate64 AUE_TRUNCATE
+#define LINUX32_SYS_AUE_linux_ftruncate64 AUE_FTRUNCATE
+#define LINUX32_SYS_AUE_linux_stat64 AUE_STAT
+#define LINUX32_SYS_AUE_linux_lstat64 AUE_LSTAT
+#define LINUX32_SYS_AUE_linux_fstat64 AUE_FSTAT
+#define LINUX32_SYS_AUE_linux_lchown AUE_LCHOWN
+#define LINUX32_SYS_AUE_linux_getuid AUE_GETUID
+#define LINUX32_SYS_AUE_linux_getgid AUE_GETGID
+#define LINUX32_SYS_AUE_linux_getgroups AUE_GETGROUPS
+#define LINUX32_SYS_AUE_linux_setgroups AUE_SETGROUPS
+#define LINUX32_SYS_AUE_linux_chown AUE_CHOWN
+#define LINUX32_SYS_AUE_linux_setfsuid AUE_SETFSUID
+#define LINUX32_SYS_AUE_linux_setfsgid AUE_SETFSGID
+#define LINUX32_SYS_AUE_linux_pivot_root AUE_PIVOT_ROOT
+#define LINUX32_SYS_AUE_linux_mincore AUE_MINCORE
+#define LINUX32_SYS_AUE_linux_getdents64 AUE_GETDIRENTRIES
+#define LINUX32_SYS_AUE_linux_fcntl64 AUE_FCNTL
+#define LINUX32_SYS_AUE_linux_gettid AUE_NULL
+#define LINUX32_SYS_AUE_linux_setxattr AUE_NULL
+#define LINUX32_SYS_AUE_linux_lsetxattr AUE_NULL
+#define LINUX32_SYS_AUE_linux_fsetxattr AUE_NULL
+#define LINUX32_SYS_AUE_linux_getxattr AUE_NULL
+#define LINUX32_SYS_AUE_linux_lgetxattr AUE_NULL
+#define LINUX32_SYS_AUE_linux_fgetxattr AUE_NULL
+#define LINUX32_SYS_AUE_linux_listxattr AUE_NULL
+#define LINUX32_SYS_AUE_linux_llistxattr AUE_NULL
+#define LINUX32_SYS_AUE_linux_flistxattr AUE_NULL
+#define LINUX32_SYS_AUE_linux_removexattr AUE_NULL
+#define LINUX32_SYS_AUE_linux_lremovexattr AUE_NULL
+#define LINUX32_SYS_AUE_linux_fremovexattr AUE_NULL
+#define LINUX32_SYS_AUE_linux_tkill AUE_NULL
+#define LINUX32_SYS_AUE_linux_sys_futex AUE_NULL
+#define LINUX32_SYS_AUE_linux_sched_setaffinity AUE_NULL
+#define LINUX32_SYS_AUE_linux_sched_getaffinity AUE_NULL
+#define LINUX32_SYS_AUE_linux_set_thread_area AUE_NULL
+#define LINUX32_SYS_AUE_linux_fadvise64 AUE_NULL
+#define LINUX32_SYS_AUE_linux_exit_group AUE_EXIT
+#define LINUX32_SYS_AUE_linux_lookup_dcookie AUE_NULL
+#define LINUX32_SYS_AUE_linux_epoll_create AUE_NULL
+#define LINUX32_SYS_AUE_linux_epoll_ctl AUE_NULL
+#define LINUX32_SYS_AUE_linux_epoll_wait AUE_NULL
+#define LINUX32_SYS_AUE_linux_remap_file_pages AUE_NULL
+#define LINUX32_SYS_AUE_linux_set_tid_address AUE_NULL
+#define LINUX32_SYS_AUE_linux_timer_create AUE_NULL
+#define LINUX32_SYS_AUE_linux_timer_settime AUE_NULL
+#define LINUX32_SYS_AUE_linux_timer_gettime AUE_NULL
+#define LINUX32_SYS_AUE_linux_timer_getoverrun AUE_NULL
+#define LINUX32_SYS_AUE_linux_timer_delete AUE_NULL
+#define LINUX32_SYS_AUE_linux_clock_settime AUE_CLOCK_SETTIME
+#define LINUX32_SYS_AUE_linux_clock_gettime AUE_NULL
+#define LINUX32_SYS_AUE_linux_clock_getres AUE_NULL
+#define LINUX32_SYS_AUE_linux_clock_nanosleep AUE_NULL
+#define LINUX32_SYS_AUE_linux_statfs64 AUE_STATFS
+#define LINUX32_SYS_AUE_linux_fstatfs64 AUE_FSTATFS
+#define LINUX32_SYS_AUE_linux_tgkill AUE_NULL
+#define LINUX32_SYS_AUE_linux_utimes AUE_UTIMES
+#define LINUX32_SYS_AUE_linux_fadvise64_64 AUE_NULL
+#define LINUX32_SYS_AUE_linux_mbind AUE_NULL
+#define LINUX32_SYS_AUE_linux_get_mempolicy AUE_NULL
+#define LINUX32_SYS_AUE_linux_set_mempolicy AUE_NULL
+#define LINUX32_SYS_AUE_linux_mq_open AUE_NULL
+#define LINUX32_SYS_AUE_linux_mq_unlink AUE_NULL
+#define LINUX32_SYS_AUE_linux_mq_timedsend AUE_NULL
+#define LINUX32_SYS_AUE_linux_mq_timedreceive AUE_NULL
+#define LINUX32_SYS_AUE_linux_mq_notify AUE_NULL
+#define LINUX32_SYS_AUE_linux_mq_getsetattr AUE_NULL
+#define LINUX32_SYS_AUE_linux_kexec_load AUE_NULL
+#define LINUX32_SYS_AUE_linux_waitid AUE_WAIT6
+#define LINUX32_SYS_AUE_linux_add_key AUE_NULL
+#define LINUX32_SYS_AUE_linux_request_key AUE_NULL
+#define LINUX32_SYS_AUE_linux_keyctl AUE_NULL
+#define LINUX32_SYS_AUE_linux_ioprio_set AUE_NULL
+#define LINUX32_SYS_AUE_linux_ioprio_get AUE_NULL
+#define LINUX32_SYS_AUE_linux_inotify_init AUE_NULL
+#define LINUX32_SYS_AUE_linux_inotify_add_watch AUE_NULL
+#define LINUX32_SYS_AUE_linux_inotify_rm_watch AUE_NULL
+#define LINUX32_SYS_AUE_linux_migrate_pages AUE_NULL
+#define LINUX32_SYS_AUE_linux_openat AUE_OPEN_RWTC
+#define LINUX32_SYS_AUE_linux_mkdirat AUE_MKDIRAT
+#define LINUX32_SYS_AUE_linux_mknodat AUE_MKNODAT
+#define LINUX32_SYS_AUE_linux_fchownat AUE_FCHOWNAT
+#define LINUX32_SYS_AUE_linux_futimesat AUE_FUTIMESAT
+#define LINUX32_SYS_AUE_linux_fstatat64 AUE_FSTATAT
+#define LINUX32_SYS_AUE_linux_unlinkat AUE_UNLINKAT
+#define LINUX32_SYS_AUE_linux_renameat AUE_RENAMEAT
+#define LINUX32_SYS_AUE_linux_linkat AUE_LINKAT
+#define LINUX32_SYS_AUE_linux_symlinkat AUE_SYMLINKAT
+#define LINUX32_SYS_AUE_linux_readlinkat AUE_READLINKAT
+#define LINUX32_SYS_AUE_linux_fchmodat AUE_FCHMODAT
+#define LINUX32_SYS_AUE_linux_faccessat AUE_FACCESSAT
+#define LINUX32_SYS_AUE_linux_pselect6 AUE_SELECT
+#define LINUX32_SYS_AUE_linux_ppoll AUE_POLL
+#define LINUX32_SYS_AUE_linux_unshare AUE_NULL
+#define LINUX32_SYS_AUE_linux_set_robust_list AUE_NULL
+#define LINUX32_SYS_AUE_linux_get_robust_list AUE_NULL
+#define LINUX32_SYS_AUE_linux_splice AUE_NULL
+#define LINUX32_SYS_AUE_linux_sync_file_range AUE_NULL
+#define LINUX32_SYS_AUE_linux_tee AUE_NULL
+#define LINUX32_SYS_AUE_linux_vmsplice AUE_NULL
+#define LINUX32_SYS_AUE_linux_move_pages AUE_NULL
+#define LINUX32_SYS_AUE_linux_getcpu AUE_NULL
+#define LINUX32_SYS_AUE_linux_epoll_pwait AUE_NULL
+#define LINUX32_SYS_AUE_linux_utimensat AUE_FUTIMESAT
+#define LINUX32_SYS_AUE_linux_signalfd AUE_NULL
+#define LINUX32_SYS_AUE_linux_timerfd_create AUE_NULL
+#define LINUX32_SYS_AUE_linux_eventfd AUE_NULL
+#define LINUX32_SYS_AUE_linux_fallocate AUE_NULL
+#define LINUX32_SYS_AUE_linux_timerfd_settime AUE_NULL
+#define LINUX32_SYS_AUE_linux_timerfd_gettime AUE_NULL
+#define LINUX32_SYS_AUE_linux_signalfd4 AUE_NULL
+#define LINUX32_SYS_AUE_linux_eventfd2 AUE_NULL
+#define LINUX32_SYS_AUE_linux_epoll_create1 AUE_NULL
+#define LINUX32_SYS_AUE_linux_dup3 AUE_NULL
+#define LINUX32_SYS_AUE_linux_pipe2 AUE_NULL
+#define LINUX32_SYS_AUE_linux_inotify_init1 AUE_NULL
+#define LINUX32_SYS_AUE_linux_preadv AUE_NULL
+#define LINUX32_SYS_AUE_linux_pwritev AUE_NULL
+#define LINUX32_SYS_AUE_linux_rt_tsigqueueinfo AUE_NULL
+#define LINUX32_SYS_AUE_linux_perf_event_open AUE_NULL
+#define LINUX32_SYS_AUE_linux_recvmmsg AUE_NULL
+#define LINUX32_SYS_AUE_linux_fanotify_init AUE_NULL
+#define LINUX32_SYS_AUE_linux_fanotify_mark AUE_NULL
+#define LINUX32_SYS_AUE_linux_prlimit64 AUE_NULL
+#define LINUX32_SYS_AUE_linux_name_to_handle_at AUE_NULL
+#define LINUX32_SYS_AUE_linux_open_by_handle_at AUE_NULL
+#define LINUX32_SYS_AUE_linux_clock_adjtime AUE_NULL
+#define LINUX32_SYS_AUE_linux_syncfs AUE_SYNC
+#define LINUX32_SYS_AUE_linux_sendmmsg AUE_NULL
+#define LINUX32_SYS_AUE_linux_setns AUE_NULL
+#define LINUX32_SYS_AUE_linux_process_vm_readv AUE_NULL
+#define LINUX32_SYS_AUE_linux_process_vm_writev AUE_NULL
#undef PAD_
#undef PADL_
#undef PADR_
-#endif /* !_LINUX_SYSPROTO_H_ */
+#endif /* !_LINUX32_SYSPROTO_H_ */
diff --git a/sys/amd64/linux32/linux32_syscall.h b/sys/amd64/linux32/linux32_syscall.h
index f2410f3..a3fbb26 100644
--- a/sys/amd64/linux32/linux32_syscall.h
+++ b/sys/amd64/linux32/linux32_syscall.h
@@ -3,322 +3,322 @@
*
* DO NOT EDIT-- this file is automatically generated.
* $FreeBSD$
- * created from FreeBSD: head/sys/amd64/linux32/syscalls.master 283492 2015-05-24 18:08:01Z dchagin
+ * created from FreeBSD: head/sys/amd64/linux32/syscalls.master 289769 2015-10-22 21:28:20Z jhb
*/
-#define LINUX_SYS_linux_exit 1
-#define LINUX_SYS_linux_fork 2
-#define LINUX_SYS_read 3
-#define LINUX_SYS_write 4
-#define LINUX_SYS_linux_open 5
-#define LINUX_SYS_close 6
-#define LINUX_SYS_linux_waitpid 7
-#define LINUX_SYS_linux_creat 8
-#define LINUX_SYS_linux_link 9
-#define LINUX_SYS_linux_unlink 10
-#define LINUX_SYS_linux_execve 11
-#define LINUX_SYS_linux_chdir 12
-#define LINUX_SYS_linux_time 13
-#define LINUX_SYS_linux_mknod 14
-#define LINUX_SYS_linux_chmod 15
-#define LINUX_SYS_linux_lchown16 16
-#define LINUX_SYS_linux_stat 18
-#define LINUX_SYS_linux_lseek 19
-#define LINUX_SYS_linux_getpid 20
-#define LINUX_SYS_linux_mount 21
-#define LINUX_SYS_linux_oldumount 22
-#define LINUX_SYS_linux_setuid16 23
-#define LINUX_SYS_linux_getuid16 24
-#define LINUX_SYS_linux_stime 25
-#define LINUX_SYS_linux_ptrace 26
-#define LINUX_SYS_linux_alarm 27
-#define LINUX_SYS_linux_pause 29
-#define LINUX_SYS_linux_utime 30
-#define LINUX_SYS_linux_access 33
-#define LINUX_SYS_linux_nice 34
-#define LINUX_SYS_sync 36
-#define LINUX_SYS_linux_kill 37
-#define LINUX_SYS_linux_rename 38
-#define LINUX_SYS_linux_mkdir 39
-#define LINUX_SYS_linux_rmdir 40
-#define LINUX_SYS_dup 41
-#define LINUX_SYS_linux_pipe 42
-#define LINUX_SYS_linux_times 43
-#define LINUX_SYS_linux_brk 45
-#define LINUX_SYS_linux_setgid16 46
-#define LINUX_SYS_linux_getgid16 47
-#define LINUX_SYS_linux_signal 48
-#define LINUX_SYS_linux_geteuid16 49
-#define LINUX_SYS_linux_getegid16 50
-#define LINUX_SYS_acct 51
-#define LINUX_SYS_linux_umount 52
-#define LINUX_SYS_linux_ioctl 54
-#define LINUX_SYS_linux_fcntl 55
-#define LINUX_SYS_setpgid 57
-#define LINUX_SYS_linux_olduname 59
-#define LINUX_SYS_umask 60
-#define LINUX_SYS_chroot 61
-#define LINUX_SYS_linux_ustat 62
-#define LINUX_SYS_dup2 63
-#define LINUX_SYS_linux_getppid 64
-#define LINUX_SYS_getpgrp 65
-#define LINUX_SYS_setsid 66
-#define LINUX_SYS_linux_sigaction 67
-#define LINUX_SYS_linux_sgetmask 68
-#define LINUX_SYS_linux_ssetmask 69
-#define LINUX_SYS_linux_setreuid16 70
-#define LINUX_SYS_linux_setregid16 71
-#define LINUX_SYS_linux_sigsuspend 72
-#define LINUX_SYS_linux_sigpending 73
-#define LINUX_SYS_linux_sethostname 74
-#define LINUX_SYS_linux_setrlimit 75
-#define LINUX_SYS_linux_old_getrlimit 76
-#define LINUX_SYS_linux_getrusage 77
-#define LINUX_SYS_linux_gettimeofday 78
-#define LINUX_SYS_linux_settimeofday 79
-#define LINUX_SYS_linux_getgroups16 80
-#define LINUX_SYS_linux_setgroups16 81
-#define LINUX_SYS_linux_old_select 82
-#define LINUX_SYS_linux_symlink 83
-#define LINUX_SYS_linux_lstat 84
-#define LINUX_SYS_linux_readlink 85
-#define LINUX_SYS_swapon 87
-#define LINUX_SYS_linux_reboot 88
-#define LINUX_SYS_linux_readdir 89
-#define LINUX_SYS_linux_mmap 90
-#define LINUX_SYS_munmap 91
-#define LINUX_SYS_linux_truncate 92
-#define LINUX_SYS_linux_ftruncate 93
-#define LINUX_SYS_fchmod 94
-#define LINUX_SYS_fchown 95
-#define LINUX_SYS_linux_getpriority 96
-#define LINUX_SYS_setpriority 97
-#define LINUX_SYS_linux_statfs 99
-#define LINUX_SYS_linux_fstatfs 100
-#define LINUX_SYS_linux_socketcall 102
-#define LINUX_SYS_linux_syslog 103
-#define LINUX_SYS_linux_setitimer 104
-#define LINUX_SYS_linux_getitimer 105
-#define LINUX_SYS_linux_newstat 106
-#define LINUX_SYS_linux_newlstat 107
-#define LINUX_SYS_linux_newfstat 108
-#define LINUX_SYS_linux_uname 109
-#define LINUX_SYS_linux_iopl 110
-#define LINUX_SYS_linux_vhangup 111
-#define LINUX_SYS_linux_wait4 114
-#define LINUX_SYS_linux_swapoff 115
-#define LINUX_SYS_linux_sysinfo 116
-#define LINUX_SYS_linux_ipc 117
-#define LINUX_SYS_fsync 118
-#define LINUX_SYS_linux_sigreturn 119
-#define LINUX_SYS_linux_clone 120
-#define LINUX_SYS_linux_setdomainname 121
-#define LINUX_SYS_linux_newuname 122
-#define LINUX_SYS_linux_adjtimex 124
-#define LINUX_SYS_linux_mprotect 125
-#define LINUX_SYS_linux_sigprocmask 126
-#define LINUX_SYS_linux_create_module 127
-#define LINUX_SYS_linux_init_module 128
-#define LINUX_SYS_linux_delete_module 129
-#define LINUX_SYS_linux_get_kernel_syms 130
-#define LINUX_SYS_linux_quotactl 131
-#define LINUX_SYS_getpgid 132
-#define LINUX_SYS_fchdir 133
-#define LINUX_SYS_linux_bdflush 134
-#define LINUX_SYS_linux_sysfs 135
-#define LINUX_SYS_linux_personality 136
-#define LINUX_SYS_linux_setfsuid16 138
-#define LINUX_SYS_linux_setfsgid16 139
-#define LINUX_SYS_linux_llseek 140
-#define LINUX_SYS_linux_getdents 141
-#define LINUX_SYS_linux_select 142
-#define LINUX_SYS_flock 143
-#define LINUX_SYS_linux_msync 144
-#define LINUX_SYS_linux_readv 145
-#define LINUX_SYS_linux_writev 146
-#define LINUX_SYS_linux_getsid 147
-#define LINUX_SYS_linux_fdatasync 148
-#define LINUX_SYS_linux_sysctl 149
-#define LINUX_SYS_mlock 150
-#define LINUX_SYS_munlock 151
-#define LINUX_SYS_mlockall 152
-#define LINUX_SYS_munlockall 153
-#define LINUX_SYS_linux_sched_setparam 154
-#define LINUX_SYS_linux_sched_getparam 155
-#define LINUX_SYS_linux_sched_setscheduler 156
-#define LINUX_SYS_linux_sched_getscheduler 157
-#define LINUX_SYS_sched_yield 158
-#define LINUX_SYS_linux_sched_get_priority_max 159
-#define LINUX_SYS_linux_sched_get_priority_min 160
-#define LINUX_SYS_linux_sched_rr_get_interval 161
-#define LINUX_SYS_linux_nanosleep 162
-#define LINUX_SYS_linux_mremap 163
-#define LINUX_SYS_linux_setresuid16 164
-#define LINUX_SYS_linux_getresuid16 165
-#define LINUX_SYS_linux_query_module 167
-#define LINUX_SYS_poll 168
-#define LINUX_SYS_linux_nfsservctl 169
-#define LINUX_SYS_linux_setresgid16 170
-#define LINUX_SYS_linux_getresgid16 171
-#define LINUX_SYS_linux_prctl 172
-#define LINUX_SYS_linux_rt_sigreturn 173
-#define LINUX_SYS_linux_rt_sigaction 174
-#define LINUX_SYS_linux_rt_sigprocmask 175
-#define LINUX_SYS_linux_rt_sigpending 176
-#define LINUX_SYS_linux_rt_sigtimedwait 177
-#define LINUX_SYS_linux_rt_sigqueueinfo 178
-#define LINUX_SYS_linux_rt_sigsuspend 179
-#define LINUX_SYS_linux_pread 180
-#define LINUX_SYS_linux_pwrite 181
-#define LINUX_SYS_linux_chown16 182
-#define LINUX_SYS_linux_getcwd 183
-#define LINUX_SYS_linux_capget 184
-#define LINUX_SYS_linux_capset 185
-#define LINUX_SYS_linux_sigaltstack 186
-#define LINUX_SYS_linux_sendfile 187
-#define LINUX_SYS_linux_vfork 190
-#define LINUX_SYS_linux_getrlimit 191
-#define LINUX_SYS_linux_mmap2 192
-#define LINUX_SYS_linux_truncate64 193
-#define LINUX_SYS_linux_ftruncate64 194
-#define LINUX_SYS_linux_stat64 195
-#define LINUX_SYS_linux_lstat64 196
-#define LINUX_SYS_linux_fstat64 197
-#define LINUX_SYS_linux_lchown 198
-#define LINUX_SYS_linux_getuid 199
-#define LINUX_SYS_linux_getgid 200
-#define LINUX_SYS_geteuid 201
-#define LINUX_SYS_getegid 202
-#define LINUX_SYS_setreuid 203
-#define LINUX_SYS_setregid 204
-#define LINUX_SYS_linux_getgroups 205
-#define LINUX_SYS_linux_setgroups 206
-#define LINUX_SYS_setresuid 208
-#define LINUX_SYS_getresuid 209
-#define LINUX_SYS_setresgid 210
-#define LINUX_SYS_getresgid 211
-#define LINUX_SYS_linux_chown 212
-#define LINUX_SYS_setuid 213
-#define LINUX_SYS_setgid 214
-#define LINUX_SYS_linux_setfsuid 215
-#define LINUX_SYS_linux_setfsgid 216
-#define LINUX_SYS_linux_pivot_root 217
-#define LINUX_SYS_linux_mincore 218
-#define LINUX_SYS_madvise 219
-#define LINUX_SYS_linux_getdents64 220
-#define LINUX_SYS_linux_fcntl64 221
-#define LINUX_SYS_linux_gettid 224
-#define LINUX_SYS_linux_setxattr 226
-#define LINUX_SYS_linux_lsetxattr 227
-#define LINUX_SYS_linux_fsetxattr 228
-#define LINUX_SYS_linux_getxattr 229
-#define LINUX_SYS_linux_lgetxattr 230
-#define LINUX_SYS_linux_fgetxattr 231
-#define LINUX_SYS_linux_listxattr 232
-#define LINUX_SYS_linux_llistxattr 233
-#define LINUX_SYS_linux_flistxattr 234
-#define LINUX_SYS_linux_removexattr 235
-#define LINUX_SYS_linux_lremovexattr 236
-#define LINUX_SYS_linux_fremovexattr 237
-#define LINUX_SYS_linux_tkill 238
-#define LINUX_SYS_linux_sys_futex 240
-#define LINUX_SYS_linux_sched_setaffinity 241
-#define LINUX_SYS_linux_sched_getaffinity 242
-#define LINUX_SYS_linux_set_thread_area 243
-#define LINUX_SYS_linux_fadvise64 250
-#define LINUX_SYS_linux_exit_group 252
-#define LINUX_SYS_linux_lookup_dcookie 253
-#define LINUX_SYS_linux_epoll_create 254
-#define LINUX_SYS_linux_epoll_ctl 255
-#define LINUX_SYS_linux_epoll_wait 256
-#define LINUX_SYS_linux_remap_file_pages 257
-#define LINUX_SYS_linux_set_tid_address 258
-#define LINUX_SYS_linux_timer_create 259
-#define LINUX_SYS_linux_timer_settime 260
-#define LINUX_SYS_linux_timer_gettime 261
-#define LINUX_SYS_linux_timer_getoverrun 262
-#define LINUX_SYS_linux_timer_delete 263
-#define LINUX_SYS_linux_clock_settime 264
-#define LINUX_SYS_linux_clock_gettime 265
-#define LINUX_SYS_linux_clock_getres 266
-#define LINUX_SYS_linux_clock_nanosleep 267
-#define LINUX_SYS_linux_statfs64 268
-#define LINUX_SYS_linux_fstatfs64 269
-#define LINUX_SYS_linux_tgkill 270
-#define LINUX_SYS_linux_utimes 271
-#define LINUX_SYS_linux_fadvise64_64 272
-#define LINUX_SYS_linux_mbind 274
-#define LINUX_SYS_linux_get_mempolicy 275
-#define LINUX_SYS_linux_set_mempolicy 276
-#define LINUX_SYS_linux_mq_open 277
-#define LINUX_SYS_linux_mq_unlink 278
-#define LINUX_SYS_linux_mq_timedsend 279
-#define LINUX_SYS_linux_mq_timedreceive 280
-#define LINUX_SYS_linux_mq_notify 281
-#define LINUX_SYS_linux_mq_getsetattr 282
-#define LINUX_SYS_linux_kexec_load 283
-#define LINUX_SYS_linux_waitid 284
-#define LINUX_SYS_linux_add_key 286
-#define LINUX_SYS_linux_request_key 287
-#define LINUX_SYS_linux_keyctl 288
-#define LINUX_SYS_linux_ioprio_set 289
-#define LINUX_SYS_linux_ioprio_get 290
-#define LINUX_SYS_linux_inotify_init 291
-#define LINUX_SYS_linux_inotify_add_watch 292
-#define LINUX_SYS_linux_inotify_rm_watch 293
-#define LINUX_SYS_linux_migrate_pages 294
-#define LINUX_SYS_linux_openat 295
-#define LINUX_SYS_linux_mkdirat 296
-#define LINUX_SYS_linux_mknodat 297
-#define LINUX_SYS_linux_fchownat 298
-#define LINUX_SYS_linux_futimesat 299
-#define LINUX_SYS_linux_fstatat64 300
-#define LINUX_SYS_linux_unlinkat 301
-#define LINUX_SYS_linux_renameat 302
-#define LINUX_SYS_linux_linkat 303
-#define LINUX_SYS_linux_symlinkat 304
-#define LINUX_SYS_linux_readlinkat 305
-#define LINUX_SYS_linux_fchmodat 306
-#define LINUX_SYS_linux_faccessat 307
-#define LINUX_SYS_linux_pselect6 308
-#define LINUX_SYS_linux_ppoll 309
-#define LINUX_SYS_linux_unshare 310
-#define LINUX_SYS_linux_set_robust_list 311
-#define LINUX_SYS_linux_get_robust_list 312
-#define LINUX_SYS_linux_splice 313
-#define LINUX_SYS_linux_sync_file_range 314
-#define LINUX_SYS_linux_tee 315
-#define LINUX_SYS_linux_vmsplice 316
-#define LINUX_SYS_linux_move_pages 317
-#define LINUX_SYS_linux_getcpu 318
-#define LINUX_SYS_linux_epoll_pwait 319
-#define LINUX_SYS_linux_utimensat 320
-#define LINUX_SYS_linux_signalfd 321
-#define LINUX_SYS_linux_timerfd_create 322
-#define LINUX_SYS_linux_eventfd 323
-#define LINUX_SYS_linux_fallocate 324
-#define LINUX_SYS_linux_timerfd_settime 325
-#define LINUX_SYS_linux_timerfd_gettime 326
-#define LINUX_SYS_linux_signalfd4 327
-#define LINUX_SYS_linux_eventfd2 328
-#define LINUX_SYS_linux_epoll_create1 329
-#define LINUX_SYS_linux_dup3 330
-#define LINUX_SYS_linux_pipe2 331
-#define LINUX_SYS_linux_inotify_init1 332
-#define LINUX_SYS_linux_preadv 333
-#define LINUX_SYS_linux_pwritev 334
-#define LINUX_SYS_linux_rt_tsigqueueinfo 335
-#define LINUX_SYS_linux_perf_event_open 336
-#define LINUX_SYS_linux_recvmmsg 337
-#define LINUX_SYS_linux_fanotify_init 338
-#define LINUX_SYS_linux_fanotify_mark 339
-#define LINUX_SYS_linux_prlimit64 340
-#define LINUX_SYS_linux_name_to_handle_at 341
-#define LINUX_SYS_linux_open_by_handle_at 342
-#define LINUX_SYS_linux_clock_adjtime 343
-#define LINUX_SYS_linux_syncfs 344
-#define LINUX_SYS_linux_sendmmsg 345
-#define LINUX_SYS_linux_setns 346
-#define LINUX_SYS_linux_process_vm_readv 347
-#define LINUX_SYS_linux_process_vm_writev 348
-#define LINUX_SYS_MAXSYSCALL 350
+#define LINUX32_SYS_linux_exit 1
+#define LINUX32_SYS_linux_fork 2
+#define LINUX32_SYS_read 3
+#define LINUX32_SYS_write 4
+#define LINUX32_SYS_linux_open 5
+#define LINUX32_SYS_close 6
+#define LINUX32_SYS_linux_waitpid 7
+#define LINUX32_SYS_linux_creat 8
+#define LINUX32_SYS_linux_link 9
+#define LINUX32_SYS_linux_unlink 10
+#define LINUX32_SYS_linux_execve 11
+#define LINUX32_SYS_linux_chdir 12
+#define LINUX32_SYS_linux_time 13
+#define LINUX32_SYS_linux_mknod 14
+#define LINUX32_SYS_linux_chmod 15
+#define LINUX32_SYS_linux_lchown16 16
+#define LINUX32_SYS_linux_stat 18
+#define LINUX32_SYS_linux_lseek 19
+#define LINUX32_SYS_linux_getpid 20
+#define LINUX32_SYS_linux_mount 21
+#define LINUX32_SYS_linux_oldumount 22
+#define LINUX32_SYS_linux_setuid16 23
+#define LINUX32_SYS_linux_getuid16 24
+#define LINUX32_SYS_linux_stime 25
+#define LINUX32_SYS_linux_ptrace 26
+#define LINUX32_SYS_linux_alarm 27
+#define LINUX32_SYS_linux_pause 29
+#define LINUX32_SYS_linux_utime 30
+#define LINUX32_SYS_linux_access 33
+#define LINUX32_SYS_linux_nice 34
+#define LINUX32_SYS_sync 36
+#define LINUX32_SYS_linux_kill 37
+#define LINUX32_SYS_linux_rename 38
+#define LINUX32_SYS_linux_mkdir 39
+#define LINUX32_SYS_linux_rmdir 40
+#define LINUX32_SYS_dup 41
+#define LINUX32_SYS_linux_pipe 42
+#define LINUX32_SYS_linux_times 43
+#define LINUX32_SYS_linux_brk 45
+#define LINUX32_SYS_linux_setgid16 46
+#define LINUX32_SYS_linux_getgid16 47
+#define LINUX32_SYS_linux_signal 48
+#define LINUX32_SYS_linux_geteuid16 49
+#define LINUX32_SYS_linux_getegid16 50
+#define LINUX32_SYS_acct 51
+#define LINUX32_SYS_linux_umount 52
+#define LINUX32_SYS_linux_ioctl 54
+#define LINUX32_SYS_linux_fcntl 55
+#define LINUX32_SYS_setpgid 57
+#define LINUX32_SYS_linux_olduname 59
+#define LINUX32_SYS_umask 60
+#define LINUX32_SYS_chroot 61
+#define LINUX32_SYS_linux_ustat 62
+#define LINUX32_SYS_dup2 63
+#define LINUX32_SYS_linux_getppid 64
+#define LINUX32_SYS_getpgrp 65
+#define LINUX32_SYS_setsid 66
+#define LINUX32_SYS_linux_sigaction 67
+#define LINUX32_SYS_linux_sgetmask 68
+#define LINUX32_SYS_linux_ssetmask 69
+#define LINUX32_SYS_linux_setreuid16 70
+#define LINUX32_SYS_linux_setregid16 71
+#define LINUX32_SYS_linux_sigsuspend 72
+#define LINUX32_SYS_linux_sigpending 73
+#define LINUX32_SYS_linux_sethostname 74
+#define LINUX32_SYS_linux_setrlimit 75
+#define LINUX32_SYS_linux_old_getrlimit 76
+#define LINUX32_SYS_linux_getrusage 77
+#define LINUX32_SYS_linux_gettimeofday 78
+#define LINUX32_SYS_linux_settimeofday 79
+#define LINUX32_SYS_linux_getgroups16 80
+#define LINUX32_SYS_linux_setgroups16 81
+#define LINUX32_SYS_linux_old_select 82
+#define LINUX32_SYS_linux_symlink 83
+#define LINUX32_SYS_linux_lstat 84
+#define LINUX32_SYS_linux_readlink 85
+#define LINUX32_SYS_swapon 87
+#define LINUX32_SYS_linux_reboot 88
+#define LINUX32_SYS_linux_readdir 89
+#define LINUX32_SYS_linux_mmap 90
+#define LINUX32_SYS_munmap 91
+#define LINUX32_SYS_linux_truncate 92
+#define LINUX32_SYS_linux_ftruncate 93
+#define LINUX32_SYS_fchmod 94
+#define LINUX32_SYS_fchown 95
+#define LINUX32_SYS_linux_getpriority 96
+#define LINUX32_SYS_setpriority 97
+#define LINUX32_SYS_linux_statfs 99
+#define LINUX32_SYS_linux_fstatfs 100
+#define LINUX32_SYS_linux_socketcall 102
+#define LINUX32_SYS_linux_syslog 103
+#define LINUX32_SYS_linux_setitimer 104
+#define LINUX32_SYS_linux_getitimer 105
+#define LINUX32_SYS_linux_newstat 106
+#define LINUX32_SYS_linux_newlstat 107
+#define LINUX32_SYS_linux_newfstat 108
+#define LINUX32_SYS_linux_uname 109
+#define LINUX32_SYS_linux_iopl 110
+#define LINUX32_SYS_linux_vhangup 111
+#define LINUX32_SYS_linux_wait4 114
+#define LINUX32_SYS_linux_swapoff 115
+#define LINUX32_SYS_linux_sysinfo 116
+#define LINUX32_SYS_linux_ipc 117
+#define LINUX32_SYS_fsync 118
+#define LINUX32_SYS_linux_sigreturn 119
+#define LINUX32_SYS_linux_clone 120
+#define LINUX32_SYS_linux_setdomainname 121
+#define LINUX32_SYS_linux_newuname 122
+#define LINUX32_SYS_linux_adjtimex 124
+#define LINUX32_SYS_linux_mprotect 125
+#define LINUX32_SYS_linux_sigprocmask 126
+#define LINUX32_SYS_linux_create_module 127
+#define LINUX32_SYS_linux_init_module 128
+#define LINUX32_SYS_linux_delete_module 129
+#define LINUX32_SYS_linux_get_kernel_syms 130
+#define LINUX32_SYS_linux_quotactl 131
+#define LINUX32_SYS_getpgid 132
+#define LINUX32_SYS_fchdir 133
+#define LINUX32_SYS_linux_bdflush 134
+#define LINUX32_SYS_linux_sysfs 135
+#define LINUX32_SYS_linux_personality 136
+#define LINUX32_SYS_linux_setfsuid16 138
+#define LINUX32_SYS_linux_setfsgid16 139
+#define LINUX32_SYS_linux_llseek 140
+#define LINUX32_SYS_linux_getdents 141
+#define LINUX32_SYS_linux_select 142
+#define LINUX32_SYS_flock 143
+#define LINUX32_SYS_linux_msync 144
+#define LINUX32_SYS_linux_readv 145
+#define LINUX32_SYS_linux_writev 146
+#define LINUX32_SYS_linux_getsid 147
+#define LINUX32_SYS_linux_fdatasync 148
+#define LINUX32_SYS_linux_sysctl 149
+#define LINUX32_SYS_mlock 150
+#define LINUX32_SYS_munlock 151
+#define LINUX32_SYS_mlockall 152
+#define LINUX32_SYS_munlockall 153
+#define LINUX32_SYS_linux_sched_setparam 154
+#define LINUX32_SYS_linux_sched_getparam 155
+#define LINUX32_SYS_linux_sched_setscheduler 156
+#define LINUX32_SYS_linux_sched_getscheduler 157
+#define LINUX32_SYS_sched_yield 158
+#define LINUX32_SYS_linux_sched_get_priority_max 159
+#define LINUX32_SYS_linux_sched_get_priority_min 160
+#define LINUX32_SYS_linux_sched_rr_get_interval 161
+#define LINUX32_SYS_linux_nanosleep 162
+#define LINUX32_SYS_linux_mremap 163
+#define LINUX32_SYS_linux_setresuid16 164
+#define LINUX32_SYS_linux_getresuid16 165
+#define LINUX32_SYS_linux_query_module 167
+#define LINUX32_SYS_poll 168
+#define LINUX32_SYS_linux_nfsservctl 169
+#define LINUX32_SYS_linux_setresgid16 170
+#define LINUX32_SYS_linux_getresgid16 171
+#define LINUX32_SYS_linux_prctl 172
+#define LINUX32_SYS_linux_rt_sigreturn 173
+#define LINUX32_SYS_linux_rt_sigaction 174
+#define LINUX32_SYS_linux_rt_sigprocmask 175
+#define LINUX32_SYS_linux_rt_sigpending 176
+#define LINUX32_SYS_linux_rt_sigtimedwait 177
+#define LINUX32_SYS_linux_rt_sigqueueinfo 178
+#define LINUX32_SYS_linux_rt_sigsuspend 179
+#define LINUX32_SYS_linux_pread 180
+#define LINUX32_SYS_linux_pwrite 181
+#define LINUX32_SYS_linux_chown16 182
+#define LINUX32_SYS_linux_getcwd 183
+#define LINUX32_SYS_linux_capget 184
+#define LINUX32_SYS_linux_capset 185
+#define LINUX32_SYS_linux_sigaltstack 186
+#define LINUX32_SYS_linux_sendfile 187
+#define LINUX32_SYS_linux_vfork 190
+#define LINUX32_SYS_linux_getrlimit 191
+#define LINUX32_SYS_linux_mmap2 192
+#define LINUX32_SYS_linux_truncate64 193
+#define LINUX32_SYS_linux_ftruncate64 194
+#define LINUX32_SYS_linux_stat64 195
+#define LINUX32_SYS_linux_lstat64 196
+#define LINUX32_SYS_linux_fstat64 197
+#define LINUX32_SYS_linux_lchown 198
+#define LINUX32_SYS_linux_getuid 199
+#define LINUX32_SYS_linux_getgid 200
+#define LINUX32_SYS_geteuid 201
+#define LINUX32_SYS_getegid 202
+#define LINUX32_SYS_setreuid 203
+#define LINUX32_SYS_setregid 204
+#define LINUX32_SYS_linux_getgroups 205
+#define LINUX32_SYS_linux_setgroups 206
+#define LINUX32_SYS_setresuid 208
+#define LINUX32_SYS_getresuid 209
+#define LINUX32_SYS_setresgid 210
+#define LINUX32_SYS_getresgid 211
+#define LINUX32_SYS_linux_chown 212
+#define LINUX32_SYS_setuid 213
+#define LINUX32_SYS_setgid 214
+#define LINUX32_SYS_linux_setfsuid 215
+#define LINUX32_SYS_linux_setfsgid 216
+#define LINUX32_SYS_linux_pivot_root 217
+#define LINUX32_SYS_linux_mincore 218
+#define LINUX32_SYS_madvise 219
+#define LINUX32_SYS_linux_getdents64 220
+#define LINUX32_SYS_linux_fcntl64 221
+#define LINUX32_SYS_linux_gettid 224
+#define LINUX32_SYS_linux_setxattr 226
+#define LINUX32_SYS_linux_lsetxattr 227
+#define LINUX32_SYS_linux_fsetxattr 228
+#define LINUX32_SYS_linux_getxattr 229
+#define LINUX32_SYS_linux_lgetxattr 230
+#define LINUX32_SYS_linux_fgetxattr 231
+#define LINUX32_SYS_linux_listxattr 232
+#define LINUX32_SYS_linux_llistxattr 233
+#define LINUX32_SYS_linux_flistxattr 234
+#define LINUX32_SYS_linux_removexattr 235
+#define LINUX32_SYS_linux_lremovexattr 236
+#define LINUX32_SYS_linux_fremovexattr 237
+#define LINUX32_SYS_linux_tkill 238
+#define LINUX32_SYS_linux_sys_futex 240
+#define LINUX32_SYS_linux_sched_setaffinity 241
+#define LINUX32_SYS_linux_sched_getaffinity 242
+#define LINUX32_SYS_linux_set_thread_area 243
+#define LINUX32_SYS_linux_fadvise64 250
+#define LINUX32_SYS_linux_exit_group 252
+#define LINUX32_SYS_linux_lookup_dcookie 253
+#define LINUX32_SYS_linux_epoll_create 254
+#define LINUX32_SYS_linux_epoll_ctl 255
+#define LINUX32_SYS_linux_epoll_wait 256
+#define LINUX32_SYS_linux_remap_file_pages 257
+#define LINUX32_SYS_linux_set_tid_address 258
+#define LINUX32_SYS_linux_timer_create 259
+#define LINUX32_SYS_linux_timer_settime 260
+#define LINUX32_SYS_linux_timer_gettime 261
+#define LINUX32_SYS_linux_timer_getoverrun 262
+#define LINUX32_SYS_linux_timer_delete 263
+#define LINUX32_SYS_linux_clock_settime 264
+#define LINUX32_SYS_linux_clock_gettime 265
+#define LINUX32_SYS_linux_clock_getres 266
+#define LINUX32_SYS_linux_clock_nanosleep 267
+#define LINUX32_SYS_linux_statfs64 268
+#define LINUX32_SYS_linux_fstatfs64 269
+#define LINUX32_SYS_linux_tgkill 270
+#define LINUX32_SYS_linux_utimes 271
+#define LINUX32_SYS_linux_fadvise64_64 272
+#define LINUX32_SYS_linux_mbind 274
+#define LINUX32_SYS_linux_get_mempolicy 275
+#define LINUX32_SYS_linux_set_mempolicy 276
+#define LINUX32_SYS_linux_mq_open 277
+#define LINUX32_SYS_linux_mq_unlink 278
+#define LINUX32_SYS_linux_mq_timedsend 279
+#define LINUX32_SYS_linux_mq_timedreceive 280
+#define LINUX32_SYS_linux_mq_notify 281
+#define LINUX32_SYS_linux_mq_getsetattr 282
+#define LINUX32_SYS_linux_kexec_load 283
+#define LINUX32_SYS_linux_waitid 284
+#define LINUX32_SYS_linux_add_key 286
+#define LINUX32_SYS_linux_request_key 287
+#define LINUX32_SYS_linux_keyctl 288
+#define LINUX32_SYS_linux_ioprio_set 289
+#define LINUX32_SYS_linux_ioprio_get 290
+#define LINUX32_SYS_linux_inotify_init 291
+#define LINUX32_SYS_linux_inotify_add_watch 292
+#define LINUX32_SYS_linux_inotify_rm_watch 293
+#define LINUX32_SYS_linux_migrate_pages 294
+#define LINUX32_SYS_linux_openat 295
+#define LINUX32_SYS_linux_mkdirat 296
+#define LINUX32_SYS_linux_mknodat 297
+#define LINUX32_SYS_linux_fchownat 298
+#define LINUX32_SYS_linux_futimesat 299
+#define LINUX32_SYS_linux_fstatat64 300
+#define LINUX32_SYS_linux_unlinkat 301
+#define LINUX32_SYS_linux_renameat 302
+#define LINUX32_SYS_linux_linkat 303
+#define LINUX32_SYS_linux_symlinkat 304
+#define LINUX32_SYS_linux_readlinkat 305
+#define LINUX32_SYS_linux_fchmodat 306
+#define LINUX32_SYS_linux_faccessat 307
+#define LINUX32_SYS_linux_pselect6 308
+#define LINUX32_SYS_linux_ppoll 309
+#define LINUX32_SYS_linux_unshare 310
+#define LINUX32_SYS_linux_set_robust_list 311
+#define LINUX32_SYS_linux_get_robust_list 312
+#define LINUX32_SYS_linux_splice 313
+#define LINUX32_SYS_linux_sync_file_range 314
+#define LINUX32_SYS_linux_tee 315
+#define LINUX32_SYS_linux_vmsplice 316
+#define LINUX32_SYS_linux_move_pages 317
+#define LINUX32_SYS_linux_getcpu 318
+#define LINUX32_SYS_linux_epoll_pwait 319
+#define LINUX32_SYS_linux_utimensat 320
+#define LINUX32_SYS_linux_signalfd 321
+#define LINUX32_SYS_linux_timerfd_create 322
+#define LINUX32_SYS_linux_eventfd 323
+#define LINUX32_SYS_linux_fallocate 324
+#define LINUX32_SYS_linux_timerfd_settime 325
+#define LINUX32_SYS_linux_timerfd_gettime 326
+#define LINUX32_SYS_linux_signalfd4 327
+#define LINUX32_SYS_linux_eventfd2 328
+#define LINUX32_SYS_linux_epoll_create1 329
+#define LINUX32_SYS_linux_dup3 330
+#define LINUX32_SYS_linux_pipe2 331
+#define LINUX32_SYS_linux_inotify_init1 332
+#define LINUX32_SYS_linux_preadv 333
+#define LINUX32_SYS_linux_pwritev 334
+#define LINUX32_SYS_linux_rt_tsigqueueinfo 335
+#define LINUX32_SYS_linux_perf_event_open 336
+#define LINUX32_SYS_linux_recvmmsg 337
+#define LINUX32_SYS_linux_fanotify_init 338
+#define LINUX32_SYS_linux_fanotify_mark 339
+#define LINUX32_SYS_linux_prlimit64 340
+#define LINUX32_SYS_linux_name_to_handle_at 341
+#define LINUX32_SYS_linux_open_by_handle_at 342
+#define LINUX32_SYS_linux_clock_adjtime 343
+#define LINUX32_SYS_linux_syncfs 344
+#define LINUX32_SYS_linux_sendmmsg 345
+#define LINUX32_SYS_linux_setns 346
+#define LINUX32_SYS_linux_process_vm_readv 347
+#define LINUX32_SYS_linux_process_vm_writev 348
+#define LINUX32_SYS_MAXSYSCALL 350
diff --git a/sys/amd64/linux32/linux32_syscalls.c b/sys/amd64/linux32/linux32_syscalls.c
index 6f26207..f3b4510 100644
--- a/sys/amd64/linux32/linux32_syscalls.c
+++ b/sys/amd64/linux32/linux32_syscalls.c
@@ -3,10 +3,10 @@
*
* DO NOT EDIT-- this file is automatically generated.
* $FreeBSD$
- * created from FreeBSD: head/sys/amd64/linux32/syscalls.master 283492 2015-05-24 18:08:01Z dchagin
+ * created from FreeBSD: head/sys/amd64/linux32/syscalls.master 289769 2015-10-22 21:28:20Z jhb
*/
-const char *linux_syscallnames[] = {
+const char *linux32_syscallnames[] = {
#define nosys linux_nosys
"#0", /* 0 = setup */
"linux_exit", /* 1 = linux_exit */
diff --git a/sys/amd64/linux32/linux32_sysent.c b/sys/amd64/linux32/linux32_sysent.c
index 004b886..6f0420d 100644
--- a/sys/amd64/linux32/linux32_sysent.c
+++ b/sys/amd64/linux32/linux32_sysent.c
@@ -3,7 +3,7 @@
*
* DO NOT EDIT-- this file is automatically generated.
* $FreeBSD$
- * created from FreeBSD: head/sys/amd64/linux32/syscalls.master 283492 2015-05-24 18:08:01Z dchagin
+ * created from FreeBSD: head/sys/amd64/linux32/syscalls.master 289769 2015-10-22 21:28:20Z jhb
*/
#include "opt_compat.h"
@@ -17,7 +17,7 @@
#define AS(name) (sizeof(struct name) / sizeof(register_t))
/* The casts are bogus but will do for now. */
-struct sysent linux_sysent[] = {
+struct sysent linux32_sysent[] = {
#define nosys linux_nosys
{ 0, (sy_call_t *)nosys, AUE_NULL, NULL, 0, 0, 0, SY_THR_ABSENT }, /* 0 = setup */
{ AS(linux_exit_args), (sy_call_t *)linux_exit, AUE_EXIT, NULL, 0, 0, 0, SY_THR_STATIC }, /* 1 = linux_exit */
diff --git a/sys/amd64/linux32/linux32_sysvec.c b/sys/amd64/linux32/linux32_sysvec.c
index 4364438..6ed0369 100644
--- a/sys/amd64/linux32/linux32_sysvec.c
+++ b/sys/amd64/linux32/linux32_sysvec.c
@@ -105,8 +105,8 @@ MODULE_VERSION(linux, 1);
* to syscall 0. This is slightly less bogus than using
* ldebug(sigreturn).
*/
-#define LINUX_SYS_linux_rt_sendsig 0
-#define LINUX_SYS_linux_sendsig 0
+#define LINUX32_SYS_linux_rt_sendsig 0
+#define LINUX32_SYS_linux_sendsig 0
const char *linux_kplatform;
static int linux_szsigcode;
@@ -115,7 +115,7 @@ static char *linux_shared_page_mapping;
extern char _binary_linux32_locore_o_start;
extern char _binary_linux32_locore_o_end;
-extern struct sysent linux_sysent[LINUX_SYS_MAXSYSCALL];
+extern struct sysent linux32_sysent[LINUX32_SYS_MAXSYSCALL];
SET_DECLARE(linux_ioctl_handler_set, struct linux_ioctl_handler);
@@ -741,7 +741,7 @@ linux32_fetch_syscall_args(struct thread *td, struct syscall_args *sa)
if (sa->code >= p->p_sysent->sv_size)
/* nosys */
- sa->callp = &p->p_sysent->sv_table[LINUX_SYS_MAXSYSCALL];
+ sa->callp = &p->p_sysent->sv_table[p->p_sysent->sv_size - 1];
else
sa->callp = &p->p_sysent->sv_table[sa->code];
sa->narg = sa->callp->sy_narg;
@@ -1008,8 +1008,8 @@ linux32_fixlimit(struct rlimit *rl, int which)
}
struct sysentvec elf_linux_sysvec = {
- .sv_size = LINUX_SYS_MAXSYSCALL,
- .sv_table = linux_sysent,
+ .sv_size = LINUX32_SYS_MAXSYSCALL,
+ .sv_table = linux32_sysent,
.sv_mask = 0,
.sv_sigsize = 0,
.sv_sigtbl = NULL,
diff --git a/sys/amd64/linux32/syscalls.conf b/sys/amd64/linux32/syscalls.conf
index dc0ad82..7d096b5 100644
--- a/sys/amd64/linux32/syscalls.conf
+++ b/sys/amd64/linux32/syscalls.conf
@@ -1,11 +1,11 @@
# $FreeBSD$
sysnames="linux32_syscalls.c"
sysproto="linux32_proto.h"
-sysproto_h=_LINUX_SYSPROTO_H_
+sysproto_h=_LINUX32_SYSPROTO_H_
syshdr="linux32_syscall.h"
syssw="linux32_sysent.c"
sysmk="/dev/null"
-syscallprefix="LINUX_SYS_"
-switchname="linux_sysent"
-namesname="linux_syscallnames"
+syscallprefix="LINUX32_SYS_"
+switchname="linux32_sysent"
+namesname="linux32_syscallnames"
systrace="linux32_systrace_args.c"
diff --git a/sys/amd64/linux32/syscalls.master b/sys/amd64/linux32/syscalls.master
index 5f688f3..8d9f90c 100644
--- a/sys/amd64/linux32/syscalls.master
+++ b/sys/amd64/linux32/syscalls.master
@@ -2,7 +2,7 @@
; @(#)syscalls.master 8.1 (Berkeley) 7/19/93
; System call name/number master file (or rather, slave, from LINUX).
-; Processed to create linux_sysent.c, linux_proto.h and linux_syscall.h.
+; Processed to create linux32_sysent.c, linux32_proto.h and linux32_syscall.h.
; Columns: number audit type nargs name alt{name,tag,rtyp}/comments
; number system call number, must be in order
diff --git a/sys/arm/amlogic/aml8726/aml8726_machdep.c b/sys/arm/amlogic/aml8726/aml8726_machdep.c
index 2f98235..e1cd1b9 100644
--- a/sys/arm/amlogic/aml8726/aml8726_machdep.c
+++ b/sys/arm/amlogic/aml8726/aml8726_machdep.c
@@ -29,6 +29,8 @@
#include <sys/cdefs.h>
__FBSDID("$FreeBSD$");
+#include "opt_platform.h"
+
#define _ARM32_BUS_DMA_PRIVATE
#include <sys/param.h>
#include <sys/systm.h>
diff --git a/sys/arm/arm/busdma_machdep-v6.c b/sys/arm/arm/busdma_machdep-v6.c
index 45f957a..d62522e 100644
--- a/sys/arm/arm/busdma_machdep-v6.c
+++ b/sys/arm/arm/busdma_machdep-v6.c
@@ -1,5 +1,5 @@
/*-
- * Copyright (c) 2012-2014 Ian Lepore
+ * Copyright (c) 2012-2015 Ian Lepore
* Copyright (c) 2010 Mark Tinguely
* Copyright (c) 2004 Olivier Houchard
* Copyright (c) 2002 Peter Grehan
@@ -35,9 +35,6 @@ __FBSDID("$FreeBSD$");
#define _ARM32_BUS_DMA_PRIVATE
#include <sys/param.h>
-#include <sys/kdb.h>
-#include <ddb/ddb.h>
-#include <ddb/db_output.h>
#include <sys/systm.h>
#include <sys/malloc.h>
#include <sys/bus.h>
@@ -61,35 +58,43 @@ __FBSDID("$FreeBSD$");
#include <machine/atomic.h>
#include <machine/bus.h>
-#include <machine/cpufunc.h>
+#include <machine/cpu-v6.h>
#include <machine/md_var.h>
-#define MAX_BPAGES 64
-#define MAX_DMA_SEGMENTS 4096
-#define BUS_DMA_EXCL_BOUNCE BUS_DMA_BUS2
-#define BUS_DMA_ALIGN_BOUNCE BUS_DMA_BUS3
-#define BUS_DMA_COULD_BOUNCE (BUS_DMA_EXCL_BOUNCE | BUS_DMA_ALIGN_BOUNCE)
-#define BUS_DMA_MIN_ALLOC_COMP BUS_DMA_BUS4
+#if __ARM_ARCH < 6
+#define BUSDMA_DCACHE_ALIGN arm_dcache_align
+#define BUSDMA_DCACHE_MASK arm_dcache_align_mask
+#else
+#define BUSDMA_DCACHE_ALIGN cpuinfo.dcache_line_size
+#define BUSDMA_DCACHE_MASK cpuinfo.dcache_line_mask
+#endif
+
+#define MAX_BPAGES 64
+#define MAX_DMA_SEGMENTS 4096
+#define BUS_DMA_EXCL_BOUNCE BUS_DMA_BUS2
+#define BUS_DMA_ALIGN_BOUNCE BUS_DMA_BUS3
+#define BUS_DMA_COULD_BOUNCE (BUS_DMA_EXCL_BOUNCE | BUS_DMA_ALIGN_BOUNCE)
+#define BUS_DMA_MIN_ALLOC_COMP BUS_DMA_BUS4
struct bounce_zone;
struct bus_dma_tag {
- bus_dma_tag_t parent;
- bus_size_t alignment;
- bus_size_t boundary;
- bus_addr_t lowaddr;
- bus_addr_t highaddr;
- bus_dma_filter_t *filter;
- void *filterarg;
- bus_size_t maxsize;
- u_int nsegments;
- bus_size_t maxsegsz;
- int flags;
- int ref_count;
- int map_count;
- bus_dma_lock_t *lockfunc;
- void *lockfuncarg;
- struct bounce_zone *bounce_zone;
+ bus_dma_tag_t parent;
+ bus_size_t alignment;
+ bus_addr_t boundary;
+ bus_addr_t lowaddr;
+ bus_addr_t highaddr;
+ bus_dma_filter_t *filter;
+ void *filterarg;
+ bus_size_t maxsize;
+ u_int nsegments;
+ bus_size_t maxsegsz;
+ int flags;
+ int ref_count;
+ int map_count;
+ bus_dma_lock_t *lockfunc;
+ void *lockfuncarg;
+ struct bounce_zone *bounce_zone;
/*
* DMA range for this tag. If the page doesn't fall within
* one of these ranges, an error is returned. The caller
@@ -104,14 +109,16 @@ struct bounce_page {
vm_offset_t vaddr; /* kva of bounce buffer */
bus_addr_t busaddr; /* Physical address */
vm_offset_t datavaddr; /* kva of client data */
- bus_addr_t dataaddr; /* client physical address */
+ vm_page_t datapage; /* physical page of client data */
+ vm_offset_t dataoffs; /* page offset of client data */
bus_size_t datacount; /* client data count */
STAILQ_ENTRY(bounce_page) links;
};
struct sync_list {
vm_offset_t vaddr; /* kva of client data */
- bus_addr_t busaddr; /* client physical address */
+ vm_page_t pages; /* starting page of client data */
+ vm_offset_t dataoffs; /* page offset of client data */
bus_size_t datacount; /* client data count */
};
@@ -176,22 +183,21 @@ SYSCTL_INT(_hw_busdma, OID_AUTO, total_bpages, CTLFLAG_RD, &total_bpages, 0,
"Total bounce pages");
struct bus_dmamap {
- struct bp_list bpages;
- int pagesneeded;
- int pagesreserved;
- bus_dma_tag_t dmat;
- struct memdesc mem;
- pmap_t pmap;
- bus_dmamap_callback_t *callback;
- void *callback_arg;
- int flags;
-#define DMAMAP_COHERENT (1 << 0)
-#define DMAMAP_DMAMEM_ALLOC (1 << 1)
-#define DMAMAP_MBUF (1 << 2)
+ struct bp_list bpages;
+ int pagesneeded;
+ int pagesreserved;
+ bus_dma_tag_t dmat;
+ struct memdesc mem;
+ bus_dmamap_callback_t *callback;
+ void *callback_arg;
+ int flags;
+#define DMAMAP_COHERENT (1 << 0)
+#define DMAMAP_DMAMEM_ALLOC (1 << 1)
+#define DMAMAP_MBUF (1 << 2)
STAILQ_ENTRY(bus_dmamap) links;
bus_dma_segment_t *segments;
- int sync_count;
- struct sync_list slist[];
+ int sync_count;
+ struct sync_list slist[];
};
static STAILQ_HEAD(, bus_dmamap) bounce_map_waitinglist;
@@ -201,20 +207,25 @@ static void init_bounce_pages(void *dummy);
static int alloc_bounce_zone(bus_dma_tag_t dmat);
static int alloc_bounce_pages(bus_dma_tag_t dmat, u_int numpages);
static int reserve_bounce_pages(bus_dma_tag_t dmat, bus_dmamap_t map,
- int commit);
+ int commit);
static bus_addr_t add_bounce_page(bus_dma_tag_t dmat, bus_dmamap_t map,
- vm_offset_t vaddr, bus_addr_t addr,
- bus_size_t size);
+ vm_offset_t vaddr, bus_addr_t addr, bus_size_t size);
static void free_bounce_page(bus_dma_tag_t dmat, struct bounce_page *bpage);
-static void _bus_dmamap_count_pages(bus_dma_tag_t dmat, bus_dmamap_t map,
- void *buf, bus_size_t buflen, int flags);
+static void _bus_dmamap_count_pages(bus_dma_tag_t dmat, pmap_t pmap,
+ bus_dmamap_t map, void *buf, bus_size_t buflen, int flags);
static void _bus_dmamap_count_phys(bus_dma_tag_t dmat, bus_dmamap_t map,
vm_paddr_t buf, bus_size_t buflen, int flags);
static int _bus_dmamap_reserve_pages(bus_dma_tag_t dmat, bus_dmamap_t map,
int flags);
+static void dma_preread_safe(vm_offset_t va, vm_paddr_t pa, vm_size_t size);
+static void dma_dcache_sync(struct sync_list *sl, bus_dmasync_op_t op);
static busdma_bufalloc_t coherent_allocator; /* Cache of coherent buffers */
static busdma_bufalloc_t standard_allocator; /* Cache of standard buffers */
+
+MALLOC_DEFINE(M_BUSDMA, "busdma", "busdma metadata");
+MALLOC_DEFINE(M_BOUNCE, "bounce", "busdma bounce pages");
+
static void
busdma_init(void *dummy)
{
@@ -231,7 +242,7 @@ busdma_init(void *dummy)
/* Create a cache of buffers in standard (cacheable) memory. */
standard_allocator = busdma_bufalloc_create("buffer",
- arm_dcache_align, /* minimum_alignment */
+ BUSDMA_DCACHE_ALIGN,/* minimum_alignment */
NULL, /* uma_alloc func */
NULL, /* uma_free func */
uma_flags); /* uma_zcreate_flags */
@@ -250,7 +261,7 @@ busdma_init(void *dummy)
* BUS_DMA_COHERENT (and potentially BUS_DMA_NOCACHE) flag.
*/
coherent_allocator = busdma_bufalloc_create("coherent",
- arm_dcache_align, /* minimum_alignment */
+ BUSDMA_DCACHE_ALIGN,/* minimum_alignment */
busdma_bufalloc_alloc_uncacheable,
busdma_bufalloc_free_uncacheable,
uma_flags); /* uma_zcreate_flags */
@@ -258,7 +269,7 @@ busdma_init(void *dummy)
/*
* This init historically used SI_SUB_VM, but now the init code requires
- * malloc(9) using M_DEVBUF memory and the pcpu zones for counter(9), which get
+ * malloc(9) using M_BUSDMA memory and the pcpu zones for counter(9), which get
* set up by SI_SUB_KMEM and SI_ORDER_LAST, so we'll go right after that by
* using SI_SUB_KMEM+1.
*/
@@ -454,11 +465,10 @@ dflt_lock(void *arg, bus_dma_lock_op_t op)
*/
int
bus_dma_tag_create(bus_dma_tag_t parent, bus_size_t alignment,
- bus_size_t boundary, bus_addr_t lowaddr,
- bus_addr_t highaddr, bus_dma_filter_t *filter,
- void *filterarg, bus_size_t maxsize, int nsegments,
- bus_size_t maxsegsz, int flags, bus_dma_lock_t *lockfunc,
- void *lockfuncarg, bus_dma_tag_t *dmat)
+ bus_addr_t boundary, bus_addr_t lowaddr, bus_addr_t highaddr,
+ bus_dma_filter_t *filter, void *filterarg, bus_size_t maxsize,
+ int nsegments, bus_size_t maxsegsz, int flags, bus_dma_lock_t *lockfunc,
+ void *lockfuncarg, bus_dma_tag_t *dmat)
{
bus_dma_tag_t newtag;
int error = 0;
@@ -480,7 +490,7 @@ bus_dma_tag_create(bus_dma_tag_t parent, bus_size_t alignment,
/* Return a NULL tag on failure */
*dmat = NULL;
- newtag = (bus_dma_tag_t)malloc(sizeof(*newtag), M_DEVBUF,
+ newtag = (bus_dma_tag_t)malloc(sizeof(*newtag), M_BUSDMA,
M_ZERO | M_NOWAIT);
if (newtag == NULL) {
CTR4(KTR_BUSDMA, "%s returned tag %p tag flags 0x%x error %d",
@@ -556,7 +566,7 @@ bus_dma_tag_create(bus_dma_tag_t parent, bus_size_t alignment,
maxsize = roundup2(maxsize, PAGE_SIZE) + PAGE_SIZE;
if ((error = alloc_bounce_zone(newtag)) != 0) {
- free(newtag, M_DEVBUF);
+ free(newtag, M_BUSDMA);
return (error);
}
bz = newtag->bounce_zone;
@@ -576,7 +586,7 @@ bus_dma_tag_create(bus_dma_tag_t parent, bus_size_t alignment,
newtag->bounce_zone = NULL;
if (error != 0) {
- free(newtag, M_DEVBUF);
+ free(newtag, M_BUSDMA);
} else {
atomic_add_32(&tags_total, 1);
*dmat = newtag;
@@ -609,7 +619,7 @@ bus_dma_tag_destroy(bus_dma_tag_t dmat)
atomic_subtract_int(&dmat->ref_count, 1);
if (dmat->ref_count == 0) {
atomic_subtract_32(&tags_total, 1);
- free(dmat, M_DEVBUF);
+ free(dmat, M_BUSDMA);
/*
* Last reference count, so
* release our reference
@@ -682,7 +692,7 @@ allocate_map(bus_dma_tag_t dmat, int mflags)
dmat->nsegments, MAX_DMA_SEGMENTS));
segsize = sizeof(struct bus_dma_segment) * dmat->nsegments;
mapsize = sizeof(*map) + sizeof(struct sync_list) * dmat->nsegments;
- map = malloc(mapsize + segsize, M_DEVBUF, mflags | M_ZERO);
+ map = malloc(mapsize + segsize, M_BUSDMA, mflags | M_ZERO);
if (map == NULL) {
CTR3(KTR_BUSDMA, "%s: tag %p error %d", __func__, dmat, ENOMEM);
return (NULL);
@@ -716,7 +726,7 @@ bus_dmamap_create(bus_dma_tag_t dmat, int flags, bus_dmamap_t *mapp)
*/
error = allocate_bz_and_pages(dmat, map);
if (error != 0) {
- free(map, M_DEVBUF);
+ free(map, M_BUSDMA);
*mapp = NULL;
return (error);
}
@@ -735,6 +745,7 @@ bus_dmamap_create(bus_dma_tag_t dmat, int flags, bus_dmamap_t *mapp)
int
bus_dmamap_destroy(bus_dma_tag_t dmat, bus_dmamap_t map)
{
+
if (STAILQ_FIRST(&map->bpages) != NULL || map->sync_count != 0) {
CTR3(KTR_BUSDMA, "%s: tag %p error %d",
__func__, dmat, EBUSY);
@@ -745,21 +756,20 @@ bus_dmamap_destroy(bus_dma_tag_t dmat, bus_dmamap_t map)
if (map->flags & DMAMAP_COHERENT)
atomic_subtract_32(&maps_coherent, 1);
atomic_subtract_32(&maps_total, 1);
- free(map, M_DEVBUF);
+ free(map, M_BUSDMA);
dmat->map_count--;
CTR2(KTR_BUSDMA, "%s: tag %p error 0", __func__, dmat);
return (0);
}
-
/*
- * Allocate a piece of memory that can be efficiently mapped into
- * bus device space based on the constraints lited in the dma tag.
- * A dmamap to for use with dmamap_load is also allocated.
+ * Allocate a piece of memory that can be efficiently mapped into bus device
+ * space based on the constraints listed in the dma tag. Returns a pointer to
+ * the allocated memory, and a pointer to an associated bus_dmamap.
*/
int
-bus_dmamem_alloc(bus_dma_tag_t dmat, void** vaddr, int flags,
- bus_dmamap_t *mapp)
+bus_dmamem_alloc(bus_dma_tag_t dmat, void **vaddr, int flags,
+ bus_dmamap_t *mapp)
{
busdma_bufalloc_t ba;
struct busdma_bufzone *bufzone;
@@ -824,12 +834,10 @@ bus_dmamem_alloc(bus_dma_tag_t dmat, void** vaddr, int flags,
mflags, 0, dmat->lowaddr, dmat->alignment, dmat->boundary,
memattr);
}
-
-
if (*vaddr == NULL) {
CTR4(KTR_BUSDMA, "%s: tag %p tag flags 0x%x error %d",
__func__, dmat, dmat->flags, ENOMEM);
- free(map, M_DEVBUF);
+ free(map, M_BUSDMA);
*mapp = NULL;
return (ENOMEM);
}
@@ -845,8 +853,8 @@ bus_dmamem_alloc(bus_dma_tag_t dmat, void** vaddr, int flags,
}
/*
- * Free a piece of memory and it's allociated dmamap, that was allocated
- * via bus_dmamem_alloc. Make the same choice for free/contigfree.
+ * Free a piece of memory that was allocated via bus_dmamem_alloc, along with
+ * its associated map.
*/
void
bus_dmamem_free(bus_dma_tag_t dmat, void *vaddr, bus_dmamap_t map)
@@ -872,7 +880,7 @@ bus_dmamem_free(bus_dma_tag_t dmat, void *vaddr, bus_dmamap_t map)
atomic_subtract_32(&maps_coherent, 1);
atomic_subtract_32(&maps_total, 1);
atomic_subtract_32(&maps_dmamem, 1);
- free(map, M_DEVBUF);
+ free(map, M_BUSDMA);
CTR3(KTR_BUSDMA, "%s: tag %p flags 0x%x", __func__, dmat, dmat->flags);
}
@@ -896,7 +904,8 @@ _bus_dmamap_count_phys(bus_dma_tag_t dmat, bus_dmamap_t map, vm_paddr_t buf,
while (buflen != 0) {
sgsize = MIN(buflen, dmat->maxsegsz);
if (must_bounce(dmat, map, curaddr, sgsize) != 0) {
- sgsize = MIN(sgsize, PAGE_SIZE);
+ sgsize = MIN(sgsize,
+ PAGE_SIZE - (curaddr & PAGE_MASK));
map->pagesneeded++;
}
curaddr += sgsize;
@@ -907,7 +916,7 @@ _bus_dmamap_count_phys(bus_dma_tag_t dmat, bus_dmamap_t map, vm_paddr_t buf,
}
static void
-_bus_dmamap_count_pages(bus_dma_tag_t dmat, bus_dmamap_t map,
+_bus_dmamap_count_pages(bus_dma_tag_t dmat, pmap_t pmap, bus_dmamap_t map,
void *buf, bus_size_t buflen, int flags)
{
vm_offset_t vaddr;
@@ -927,10 +936,10 @@ _bus_dmamap_count_pages(bus_dma_tag_t dmat, bus_dmamap_t map,
vendaddr = (vm_offset_t)buf + buflen;
while (vaddr < vendaddr) {
- if (__predict_true(map->pmap == kernel_pmap))
+ if (__predict_true(pmap == kernel_pmap))
paddr = pmap_kextract(vaddr);
else
- paddr = pmap_extract(map->pmap, vaddr);
+ paddr = pmap_extract(pmap, vaddr);
if (must_bounce(dmat, map, paddr,
min(vendaddr - vaddr, (PAGE_SIZE - ((vm_offset_t)vaddr &
PAGE_MASK)))) != 0) {
@@ -973,7 +982,7 @@ _bus_dmamap_reserve_pages(bus_dma_tag_t dmat, bus_dmamap_t map, int flags)
*/
static int
_bus_dmamap_addseg(bus_dma_tag_t dmat, bus_dmamap_t map, bus_addr_t curaddr,
- bus_size_t sgsize, bus_dma_segment_t *segs, int *segp)
+ bus_size_t sgsize, bus_dma_segment_t *segs, int *segp)
{
bus_addr_t baddr, bmask;
int seg;
@@ -1017,7 +1026,7 @@ _bus_dmamap_addseg(bus_dma_tag_t dmat, bus_dmamap_t map, bus_addr_t curaddr,
if (curaddr == segs[seg].ds_addr + segs[seg].ds_len &&
(segs[seg].ds_len + sgsize) <= dmat->maxsegsz &&
(dmat->boundary == 0 ||
- (segs[seg].ds_addr & bmask) == (curaddr & bmask)))
+ (segs[seg].ds_addr & bmask) == (curaddr & bmask)))
segs[seg].ds_len += sgsize;
else {
if (++seg >= dmat->nsegments)
@@ -1035,15 +1044,13 @@ _bus_dmamap_addseg(bus_dma_tag_t dmat, bus_dmamap_t map, bus_addr_t curaddr,
* the starting segment on entrace, and the ending segment on exit.
*/
int
-_bus_dmamap_load_phys(bus_dma_tag_t dmat,
- bus_dmamap_t map,
- vm_paddr_t buf, bus_size_t buflen,
- int flags,
- bus_dma_segment_t *segs,
- int *segp)
+_bus_dmamap_load_phys(bus_dma_tag_t dmat, bus_dmamap_t map, vm_paddr_t buf,
+ bus_size_t buflen, int flags, bus_dma_segment_t *segs, int *segp)
{
bus_addr_t curaddr;
+ bus_addr_t sl_end = 0;
bus_size_t sgsize;
+ struct sync_list *sl;
int error;
if (segs == NULL)
@@ -1052,7 +1059,7 @@ _bus_dmamap_load_phys(bus_dma_tag_t dmat,
counter_u64_add(maploads_total, 1);
counter_u64_add(maploads_physmem, 1);
- if (might_bounce(dmat, map, buflen, buflen)) {
+ if (might_bounce(dmat, map, (bus_addr_t)buf, buflen)) {
_bus_dmamap_count_phys(dmat, map, buf, buflen, flags);
if (map->pagesneeded != 0) {
counter_u64_add(maploads_bounced, 1);
@@ -1062,14 +1069,31 @@ _bus_dmamap_load_phys(bus_dma_tag_t dmat,
}
}
+ sl = map->slist + map->sync_count - 1;
+
while (buflen > 0) {
curaddr = buf;
sgsize = MIN(buflen, dmat->maxsegsz);
if (map->pagesneeded != 0 && must_bounce(dmat, map, curaddr,
sgsize)) {
- sgsize = MIN(sgsize, PAGE_SIZE);
+ sgsize = MIN(sgsize, PAGE_SIZE - (curaddr & PAGE_MASK));
curaddr = add_bounce_page(dmat, map, 0, curaddr,
- sgsize);
+ sgsize);
+ } else {
+ if (map->sync_count > 0)
+ sl_end = VM_PAGE_TO_PHYS(sl->pages) +
+ sl->dataoffs + sl->datacount;
+
+ if (map->sync_count == 0 || curaddr != sl_end) {
+ if (++map->sync_count > dmat->nsegments)
+ break;
+ sl++;
+ sl->vaddr = 0;
+ sl->datacount = sgsize;
+ sl->pages = PHYS_TO_VM_PAGE(curaddr);
+ sl->dataoffs = curaddr & PAGE_MASK;
+ } else
+ sl->datacount += sgsize;
}
sgsize = _bus_dmamap_addseg(dmat, map, curaddr, sgsize, segs,
segp);
@@ -1101,20 +1125,17 @@ _bus_dmamap_load_ma(bus_dma_tag_t dmat, bus_dmamap_t map,
/*
* Utility function to load a linear buffer. segp contains
- * the starting segment on entrace, and the ending segment on exit.
+ * the starting segment on entrance, and the ending segment on exit.
*/
int
-_bus_dmamap_load_buffer(bus_dma_tag_t dmat,
- bus_dmamap_t map,
- void *buf, bus_size_t buflen,
- pmap_t pmap,
- int flags,
- bus_dma_segment_t *segs,
- int *segp)
+_bus_dmamap_load_buffer(bus_dma_tag_t dmat, bus_dmamap_t map, void *buf,
+ bus_size_t buflen, pmap_t pmap, int flags, bus_dma_segment_t *segs,
+ int *segp)
{
bus_size_t sgsize;
bus_addr_t curaddr;
- vm_offset_t vaddr;
+ bus_addr_t sl_pend = 0;
+ vm_offset_t kvaddr, vaddr, sl_vend = 0;
struct sync_list *sl;
int error;
@@ -1132,10 +1153,8 @@ _bus_dmamap_load_buffer(bus_dma_tag_t dmat,
map->flags |= DMAMAP_MBUF;
}
- map->pmap = pmap;
-
if (might_bounce(dmat, map, (bus_addr_t)buf, buflen)) {
- _bus_dmamap_count_pages(dmat, map, buf, buflen, flags);
+ _bus_dmamap_count_pages(dmat, pmap, map, buf, buflen, flags);
if (map->pagesneeded != 0) {
counter_u64_add(maploads_bounced, 1);
error = _bus_dmamap_reserve_pages(dmat, map, flags);
@@ -1144,22 +1163,25 @@ _bus_dmamap_load_buffer(bus_dma_tag_t dmat,
}
}
- sl = NULL;
+ sl = map->slist + map->sync_count - 1;
vaddr = (vm_offset_t)buf;
while (buflen > 0) {
/*
* Get the physical address for this segment.
*/
- if (__predict_true(map->pmap == kernel_pmap))
+ if (__predict_true(pmap == kernel_pmap)) {
curaddr = pmap_kextract(vaddr);
- else
- curaddr = pmap_extract(map->pmap, vaddr);
+ kvaddr = vaddr;
+ } else {
+ curaddr = pmap_extract(pmap, vaddr);
+ kvaddr = 0;
+ }
/*
* Compute the segment size, and adjust counts.
*/
- sgsize = PAGE_SIZE - ((u_long)curaddr & PAGE_MASK);
+ sgsize = PAGE_SIZE - (curaddr & PAGE_MASK);
if (sgsize > dmat->maxsegsz)
sgsize = dmat->maxsegsz;
if (buflen < sgsize)
@@ -1167,26 +1189,31 @@ _bus_dmamap_load_buffer(bus_dma_tag_t dmat,
if (map->pagesneeded != 0 && must_bounce(dmat, map, curaddr,
sgsize)) {
- curaddr = add_bounce_page(dmat, map, vaddr, curaddr,
- sgsize);
+ curaddr = add_bounce_page(dmat, map, kvaddr, curaddr,
+ sgsize);
} else {
- sl = &map->slist[map->sync_count - 1];
+ if (map->sync_count > 0) {
+ sl_pend = VM_PAGE_TO_PHYS(sl->pages) +
+ sl->dataoffs + sl->datacount;
+ sl_vend = sl->vaddr + sl->datacount;
+ }
+
if (map->sync_count == 0 ||
-#ifdef ARM_L2_PIPT
- curaddr != sl->busaddr + sl->datacount ||
-#endif
- vaddr != sl->vaddr + sl->datacount) {
+ (kvaddr != 0 && kvaddr != sl_vend) ||
+ (curaddr != sl_pend)) {
+
if (++map->sync_count > dmat->nsegments)
goto cleanup;
sl++;
- sl->vaddr = vaddr;
+ sl->vaddr = kvaddr;
sl->datacount = sgsize;
- sl->busaddr = curaddr;
+ sl->pages = PHYS_TO_VM_PAGE(curaddr);
+ sl->dataoffs = curaddr & PAGE_MASK;
} else
sl->datacount += sgsize;
}
sgsize = _bus_dmamap_addseg(dmat, map, curaddr, sgsize, segs,
- segp);
+ segp);
if (sgsize == 0)
break;
vaddr += sgsize;
@@ -1204,11 +1231,9 @@ cleanup:
return (0);
}
-
void
-__bus_dmamap_waitok(bus_dma_tag_t dmat, bus_dmamap_t map,
- struct memdesc *mem, bus_dmamap_callback_t *callback,
- void *callback_arg)
+__bus_dmamap_waitok(bus_dma_tag_t dmat, bus_dmamap_t map, struct memdesc *mem,
+ bus_dmamap_callback_t *callback, void *callback_arg)
{
map->mem = *mem;
@@ -1219,7 +1244,7 @@ __bus_dmamap_waitok(bus_dma_tag_t dmat, bus_dmamap_t map,
bus_dma_segment_t *
_bus_dmamap_complete(bus_dma_tag_t dmat, bus_dmamap_t map,
- bus_dma_segment_t *segs, int nsegs, int error)
+ bus_dma_segment_t *segs, int nsegs, int error)
{
if (segs == NULL)
@@ -1252,64 +1277,94 @@ _bus_dmamap_unload(bus_dma_tag_t dmat, bus_dmamap_t map)
map->flags &= ~DMAMAP_MBUF;
}
-#ifdef notyetbounceuser
-/* If busdma uses user pages, then the interrupt handler could
- * be use the kernel vm mapping. Both bounce pages and sync list
- * do not cross page boundaries.
- * Below is a rough sequence that a person would do to fix the
- * user page reference in the kernel vmspace. This would be
- * done in the dma post routine.
- */
-void
-_bus_dmamap_fix_user(vm_offset_t buf, bus_size_t len,
- pmap_t pmap, int op)
+static void
+dma_preread_safe(vm_offset_t va, vm_paddr_t pa, vm_size_t size)
{
- bus_size_t sgsize;
- bus_addr_t curaddr;
- vm_offset_t va;
-
/*
- * each synclist entry is contained within a single page.
- * this would be needed if BUS_DMASYNC_POSTxxxx was implemented
+ * Write back any partial cachelines immediately before and
+ * after the DMA region. We don't need to round the address
+ * down to the nearest cacheline or specify the exact size,
+ * as dcache_wb_poc() will do the rounding for us and works
+ * at cacheline granularity.
*/
- curaddr = pmap_extract(pmap, buf);
- va = pmap_dma_map(curaddr);
- switch (op) {
- case SYNC_USER_INV:
- cpu_dcache_wb_range(va, sgsize);
- break;
+ if (va & BUSDMA_DCACHE_MASK)
+ dcache_wb_poc(va, pa, 1);
+ if ((va + size) & BUSDMA_DCACHE_MASK)
+ dcache_wb_poc(va + size, pa + size, 1);
- case SYNC_USER_COPYTO:
- bcopy((void *)va, (void *)bounce, sgsize);
- break;
+ dcache_inv_poc_dma(va, pa, size);
+}
- case SYNC_USER_COPYFROM:
- bcopy((void *) bounce, (void *)va, sgsize);
- break;
+static void
+dma_dcache_sync(struct sync_list *sl, bus_dmasync_op_t op)
+{
+ uint32_t len, offset;
+ vm_page_t m;
+ vm_paddr_t pa;
+ vm_offset_t va, tempva;
+ bus_size_t size;
+
+ offset = sl->dataoffs;
+ m = sl->pages;
+ size = sl->datacount;
+ pa = VM_PAGE_TO_PHYS(m) | offset;
+
+ for ( ; size != 0; size -= len, pa += len, offset = 0, ++m) {
+ tempva = 0;
+ if (sl->vaddr == 0) {
+ len = min(PAGE_SIZE - offset, size);
+ tempva = pmap_quick_enter_page(m);
+ va = tempva | offset;
+ } else {
+ len = sl->datacount;
+ va = sl->vaddr;
+ }
+ KASSERT(pa == (VM_PAGE_TO_PHYS(m) | offset),
+ ("unexpected vm_page_t phys: 0x%08x != 0x%08x",
+ VM_PAGE_TO_PHYS(m) | offset, pa));
- default:
- break;
- }
+ switch (op) {
+ case BUS_DMASYNC_PREWRITE:
+ case BUS_DMASYNC_PREWRITE | BUS_DMASYNC_PREREAD:
+ dcache_wb_poc(va, pa, len);
+ break;
+ case BUS_DMASYNC_PREREAD:
+ /*
+ * An mbuf may start in the middle of a cacheline. There
+ * will be no cpu writes to the beginning of that line
+ * (which contains the mbuf header) while dma is in
+ * progress. Handle that case by doing a writeback of
+ * just the first cacheline before invalidating the
+ * overall buffer. Any mbuf in a chain may have this
+ * misalignment. Buffers which are not mbufs bounce if
+ * they are not aligned to a cacheline.
+ */
+ dma_preread_safe(va, pa, len);
+ break;
+ case BUS_DMASYNC_POSTREAD:
+ case BUS_DMASYNC_POSTREAD | BUS_DMASYNC_POSTWRITE:
+ dcache_inv_poc(va, pa, len);
+ break;
+ default:
+ panic("unsupported combination of sync operations: "
+ "0x%08x\n", op);
+ }
- pmap_dma_unmap(va);
+ if (tempva != 0)
+ pmap_quick_remove_page(tempva);
+ }
}
-#endif
-
-#ifdef ARM_L2_PIPT
-#define l2cache_wb_range(va, pa, size) cpu_l2cache_wb_range(pa, size)
-#define l2cache_wbinv_range(va, pa, size) cpu_l2cache_wbinv_range(pa, size)
-#define l2cache_inv_range(va, pa, size) cpu_l2cache_inv_range(pa, size)
-#else
-#define l2cache_wb_range(va, pa, size) cpu_l2cache_wb_range(va, size)
-#define l2cache_wbinv_range(va, pa, size) cpu_l2cache_wbinv_range(va, size)
-#define l2cache_inv_range(va, pa, size) cpu_l2cache_inv_range(va, size)
-#endif
void
_bus_dmamap_sync(bus_dma_tag_t dmat, bus_dmamap_t map, bus_dmasync_op_t op)
{
struct bounce_page *bpage;
struct sync_list *sl, *end;
+ vm_offset_t datavaddr, tempvaddr;
+
+ if (op == BUS_DMASYNC_POSTWRITE)
+ return;
+
/*
* If the buffer was from user space, it is possible that this is not
* the same vm map, especially on a POST operation. It's not clear that
@@ -1317,8 +1372,6 @@ _bus_dmamap_sync(bus_dma_tag_t dmat, bus_dmamap_t map, bus_dmasync_op_t op)
* we're able to test direct userland dma, panic on a map mismatch.
*/
if ((bpage = STAILQ_FIRST(&map->bpages)) != NULL) {
- if (!pmap_dmap_iscurrent(map->pmap))
- panic("_bus_dmamap_sync: wrong user map for bounce sync.");
CTR4(KTR_BUSDMA, "%s: tag %p tag flags 0x%x op 0x%x "
"performing bounce", __func__, dmat, dmat->flags, op);
@@ -1329,18 +1382,18 @@ _bus_dmamap_sync(bus_dma_tag_t dmat, bus_dmamap_t map, bus_dmasync_op_t op)
*/
if (op & BUS_DMASYNC_PREWRITE) {
while (bpage != NULL) {
- if (bpage->datavaddr != 0)
- bcopy((void *)bpage->datavaddr,
- (void *)bpage->vaddr,
- bpage->datacount);
- else
- physcopyout(bpage->dataaddr,
- (void *)bpage->vaddr,
- bpage->datacount);
- cpu_dcache_wb_range((vm_offset_t)bpage->vaddr,
+ tempvaddr = 0;
+ datavaddr = bpage->datavaddr;
+ if (datavaddr == 0) {
+ tempvaddr = pmap_quick_enter_page(
+ bpage->datapage);
+ datavaddr = tempvaddr | bpage->dataoffs;
+ }
+ bcopy((void *)datavaddr, (void *)bpage->vaddr,
bpage->datacount);
- l2cache_wb_range((vm_offset_t)bpage->vaddr,
- (vm_offset_t)bpage->busaddr,
+ if (tempvaddr != 0)
+ pmap_quick_remove_page(tempvaddr);
+ dcache_wb_poc(bpage->vaddr, bpage->busaddr,
bpage->datacount);
bpage = STAILQ_NEXT(bpage, links);
}
@@ -1361,10 +1414,7 @@ _bus_dmamap_sync(bus_dma_tag_t dmat, bus_dmamap_t map, bus_dmasync_op_t op)
if ((op & BUS_DMASYNC_PREREAD) && !(op & BUS_DMASYNC_PREWRITE)) {
bpage = STAILQ_FIRST(&map->bpages);
while (bpage != NULL) {
- cpu_dcache_inv_range((vm_offset_t)bpage->vaddr,
- bpage->datacount);
- l2cache_inv_range((vm_offset_t)bpage->vaddr,
- (vm_offset_t)bpage->busaddr,
+ dcache_inv_poc_dma(bpage->vaddr, bpage->busaddr,
bpage->datacount);
bpage = STAILQ_NEXT(bpage, links);
}
@@ -1381,19 +1431,19 @@ _bus_dmamap_sync(bus_dma_tag_t dmat, bus_dmamap_t map, bus_dmasync_op_t op)
*/
if (op & BUS_DMASYNC_POSTREAD) {
while (bpage != NULL) {
- l2cache_inv_range((vm_offset_t)bpage->vaddr,
- (vm_offset_t)bpage->busaddr,
+ dcache_inv_poc(bpage->vaddr, bpage->busaddr,
bpage->datacount);
- cpu_dcache_inv_range((vm_offset_t)bpage->vaddr,
+ tempvaddr = 0;
+ datavaddr = bpage->datavaddr;
+ if (datavaddr == 0) {
+ tempvaddr = pmap_quick_enter_page(
+ bpage->datapage);
+ datavaddr = tempvaddr | bpage->dataoffs;
+ }
+ bcopy((void *)bpage->vaddr, (void *)datavaddr,
bpage->datacount);
- if (bpage->datavaddr != 0)
- bcopy((void *)bpage->vaddr,
- (void *)bpage->datavaddr,
- bpage->datacount);
- else
- physcopyin((void *)bpage->vaddr,
- bpage->dataaddr,
- bpage->datacount);
+ if (tempvaddr != 0)
+ pmap_quick_remove_page(tempvaddr);
bpage = STAILQ_NEXT(bpage, links);
}
dmat->bounce_zone->total_bounced++;
@@ -1424,68 +1474,13 @@ _bus_dmamap_sync(bus_dma_tag_t dmat, bus_dmamap_t map, bus_dmasync_op_t op)
* outer-to-inner for POSTREAD invalidation is not a mistake.
*/
if (map->sync_count != 0) {
- if (!pmap_dmap_iscurrent(map->pmap))
- panic("_bus_dmamap_sync: wrong user map for sync.");
-
sl = &map->slist[0];
end = &map->slist[map->sync_count];
CTR4(KTR_BUSDMA, "%s: tag %p tag flags 0x%x op 0x%x "
"performing sync", __func__, dmat, dmat->flags, op);
- switch (op) {
- case BUS_DMASYNC_PREWRITE:
- case BUS_DMASYNC_PREWRITE | BUS_DMASYNC_PREREAD:
- while (sl != end) {
- cpu_dcache_wb_range(sl->vaddr, sl->datacount);
- l2cache_wb_range(sl->vaddr, sl->busaddr,
- sl->datacount);
- sl++;
- }
- break;
-
- case BUS_DMASYNC_PREREAD:
- /*
- * An mbuf may start in the middle of a cacheline. There
- * will be no cpu writes to the beginning of that line
- * (which contains the mbuf header) while dma is in
- * progress. Handle that case by doing a writeback of
- * just the first cacheline before invalidating the
- * overall buffer. Any mbuf in a chain may have this
- * misalignment. Buffers which are not mbufs bounce if
- * they are not aligned to a cacheline.
- */
- while (sl != end) {
- if (sl->vaddr & arm_dcache_align_mask) {
- KASSERT(map->flags & DMAMAP_MBUF,
- ("unaligned buffer is not an mbuf"));
- cpu_dcache_wb_range(sl->vaddr, 1);
- l2cache_wb_range(sl->vaddr,
- sl->busaddr, 1);
- }
- cpu_dcache_inv_range(sl->vaddr, sl->datacount);
- l2cache_inv_range(sl->vaddr, sl->busaddr,
- sl->datacount);
- sl++;
- }
- break;
-
- case BUS_DMASYNC_POSTWRITE:
- break;
-
- case BUS_DMASYNC_POSTREAD:
- case BUS_DMASYNC_POSTREAD | BUS_DMASYNC_POSTWRITE:
- while (sl != end) {
- l2cache_inv_range(sl->vaddr, sl->busaddr,
- sl->datacount);
- cpu_dcache_inv_range(sl->vaddr, sl->datacount);
- sl++;
- }
- break;
-
- default:
- panic("unsupported combination of sync operations: 0x%08x\n", op);
- break;
- }
+ for ( ; sl != end; ++sl)
+ dma_dcache_sync(sl, op);
}
}
@@ -1529,7 +1524,7 @@ alloc_bounce_zone(bus_dma_tag_t dmat)
}
}
- if ((bz = (struct bounce_zone *)malloc(sizeof(*bz), M_DEVBUF,
+ if ((bz = (struct bounce_zone *)malloc(sizeof(*bz), M_BUSDMA,
M_NOWAIT | M_ZERO)) == NULL)
return (ENOMEM);
@@ -1600,15 +1595,15 @@ alloc_bounce_pages(bus_dma_tag_t dmat, u_int numpages)
while (numpages > 0) {
struct bounce_page *bpage;
- bpage = (struct bounce_page *)malloc(sizeof(*bpage), M_DEVBUF,
+ bpage = (struct bounce_page *)malloc(sizeof(*bpage), M_BUSDMA,
M_NOWAIT | M_ZERO);
if (bpage == NULL)
break;
- bpage->vaddr = (vm_offset_t)contigmalloc(PAGE_SIZE, M_DEVBUF,
+ bpage->vaddr = (vm_offset_t)contigmalloc(PAGE_SIZE, M_BOUNCE,
M_NOWAIT, 0ul, bz->lowaddr, PAGE_SIZE, 0);
if (bpage->vaddr == 0) {
- free(bpage, M_DEVBUF);
+ free(bpage, M_BUSDMA);
break;
}
bpage->busaddr = pmap_kextract(bpage->vaddr);
@@ -1645,14 +1640,13 @@ reserve_bounce_pages(bus_dma_tag_t dmat, bus_dmamap_t map, int commit)
static bus_addr_t
add_bounce_page(bus_dma_tag_t dmat, bus_dmamap_t map, vm_offset_t vaddr,
- bus_addr_t addr, bus_size_t size)
+ bus_addr_t addr, bus_size_t size)
{
struct bounce_zone *bz;
struct bounce_page *bpage;
KASSERT(dmat->bounce_zone != NULL, ("no bounce zone in dma tag"));
- KASSERT(map != NULL,
- ("add_bounce_page: bad map %p", map));
+ KASSERT(map != NULL, ("add_bounce_page: bad map %p", map));
bz = dmat->bounce_zone;
if (map->pagesneeded == 0)
@@ -1679,7 +1673,8 @@ add_bounce_page(bus_dma_tag_t dmat, bus_dmamap_t map, vm_offset_t vaddr,
bpage->busaddr |= addr & PAGE_MASK;
}
bpage->datavaddr = vaddr;
- bpage->dataaddr = addr;
+ bpage->datapage = PHYS_TO_VM_PAGE(addr);
+ bpage->dataoffs = addr & PAGE_MASK;
bpage->datacount = size;
STAILQ_INSERT_TAIL(&(map->bpages), bpage, links);
return (bpage->busaddr);
diff --git a/sys/arm/arm/busdma_machdep.c b/sys/arm/arm/busdma_machdep.c
index d7498c5..d2f517a 100644
--- a/sys/arm/arm/busdma_machdep.c
+++ b/sys/arm/arm/busdma_machdep.c
@@ -58,31 +58,32 @@ __FBSDID("$FreeBSD$");
#include <sys/malloc.h>
#include <sys/bus.h>
#include <sys/busdma_bufalloc.h>
+#include <sys/counter.h>
#include <sys/interrupt.h>
+#include <sys/kernel.h>
+#include <sys/ktr.h>
#include <sys/lock.h>
-#include <sys/proc.h>
#include <sys/memdesc.h>
+#include <sys/proc.h>
#include <sys/mutex.h>
-#include <sys/ktr.h>
-#include <sys/kernel.h>
#include <sys/sysctl.h>
#include <sys/uio.h>
-#include <vm/uma.h>
#include <vm/vm.h>
-#include <vm/vm_extern.h>
-#include <vm/vm_kern.h>
#include <vm/vm_page.h>
#include <vm/vm_map.h>
+#include <vm/vm_extern.h>
+#include <vm/vm_kern.h>
#include <machine/atomic.h>
#include <machine/bus.h>
#include <machine/cpufunc.h>
#include <machine/md_var.h>
-#define MAX_BPAGES 64
-#define BUS_DMA_COULD_BOUNCE BUS_DMA_BUS3
-#define BUS_DMA_MIN_ALLOC_COMP BUS_DMA_BUS4
+#define MAX_BPAGES 64
+#define MAX_DMA_SEGMENTS 4096
+#define BUS_DMA_COULD_BOUNCE BUS_DMA_BUS3
+#define BUS_DMA_MIN_ALLOC_COMP BUS_DMA_BUS4
struct bounce_zone;
@@ -102,6 +103,7 @@ struct bus_dma_tag {
int map_count;
bus_dma_lock_t *lockfunc;
void *lockfuncarg;
+ struct bounce_zone *bounce_zone;
/*
* DMA range for this tag. If the page doesn't fall within
* one of these ranges, an error is returned. The caller
@@ -110,28 +112,22 @@ struct bus_dma_tag {
*/
struct arm32_dma_range *ranges;
int _nranges;
- struct bounce_zone *bounce_zone;
- /*
- * Most tags need one or two segments, and can use the local tagsegs
- * array. For tags with a larger limit, we'll allocate a bigger array
- * on first use.
- */
- bus_dma_segment_t *segments;
- bus_dma_segment_t tagsegs[2];
};
struct bounce_page {
vm_offset_t vaddr; /* kva of bounce buffer */
bus_addr_t busaddr; /* Physical address */
vm_offset_t datavaddr; /* kva of client data */
- bus_addr_t dataaddr; /* client physical address */
+ vm_page_t datapage; /* physical page of client data */
+ vm_offset_t dataoffs; /* page offset of client data */
bus_size_t datacount; /* client data count */
STAILQ_ENTRY(bounce_page) links;
};
struct sync_list {
- vm_offset_t vaddr; /* kva of bounce buffer */
- bus_addr_t busaddr; /* Physical address */
+ vm_offset_t vaddr; /* kva of client data */
+ vm_page_t pages; /* starting page of client data */
+ vm_offset_t dataoffs; /* page offset of client data */
bus_size_t datacount; /* client data count */
};
@@ -158,45 +154,75 @@ struct bounce_zone {
static struct mtx bounce_lock;
static int total_bpages;
static int busdma_zonecount;
+static uint32_t tags_total;
+static uint32_t maps_total;
+static uint32_t maps_dmamem;
+static uint32_t maps_coherent;
+static counter_u64_t maploads_total;
+static counter_u64_t maploads_bounced;
+static counter_u64_t maploads_coherent;
+static counter_u64_t maploads_dmamem;
+static counter_u64_t maploads_mbuf;
+static counter_u64_t maploads_physmem;
+
static STAILQ_HEAD(, bounce_zone) bounce_zone_list;
-static SYSCTL_NODE(_hw, OID_AUTO, busdma, CTLFLAG_RD, 0, "Busdma parameters");
+SYSCTL_NODE(_hw, OID_AUTO, busdma, CTLFLAG_RD, 0, "Busdma parameters");
+SYSCTL_UINT(_hw_busdma, OID_AUTO, tags_total, CTLFLAG_RD, &tags_total, 0,
+ "Number of active tags");
+SYSCTL_UINT(_hw_busdma, OID_AUTO, maps_total, CTLFLAG_RD, &maps_total, 0,
+ "Number of active maps");
+SYSCTL_UINT(_hw_busdma, OID_AUTO, maps_dmamem, CTLFLAG_RD, &maps_dmamem, 0,
+ "Number of active maps for bus_dmamem_alloc buffers");
+SYSCTL_UINT(_hw_busdma, OID_AUTO, maps_coherent, CTLFLAG_RD, &maps_coherent, 0,
+ "Number of active maps with BUS_DMA_COHERENT flag set");
+SYSCTL_COUNTER_U64(_hw_busdma, OID_AUTO, maploads_total, CTLFLAG_RD,
+ &maploads_total, "Number of load operations performed");
+SYSCTL_COUNTER_U64(_hw_busdma, OID_AUTO, maploads_bounced, CTLFLAG_RD,
+ &maploads_bounced, "Number of load operations that used bounce buffers");
+SYSCTL_COUNTER_U64(_hw_busdma, OID_AUTO, maploads_coherent, CTLFLAG_RD,
+ &maploads_dmamem, "Number of load operations on BUS_DMA_COHERENT memory");
+SYSCTL_COUNTER_U64(_hw_busdma, OID_AUTO, maploads_dmamem, CTLFLAG_RD,
+ &maploads_dmamem, "Number of load operations on bus_dmamem_alloc buffers");
+SYSCTL_COUNTER_U64(_hw_busdma, OID_AUTO, maploads_mbuf, CTLFLAG_RD,
+ &maploads_mbuf, "Number of load operations for mbufs");
+SYSCTL_COUNTER_U64(_hw_busdma, OID_AUTO, maploads_physmem, CTLFLAG_RD,
+ &maploads_physmem, "Number of load operations on physical buffers");
SYSCTL_INT(_hw_busdma, OID_AUTO, total_bpages, CTLFLAG_RD, &total_bpages, 0,
- "Total bounce pages");
-
-#define DMAMAP_COHERENT 0x8
-#define DMAMAP_CACHE_ALIGNED 0x10
+ "Total bounce pages");
struct bus_dmamap {
- struct bp_list bpages;
- int pagesneeded;
- int pagesreserved;
- bus_dma_tag_t dmat;
- struct memdesc mem;
- int flags;
+ struct bp_list bpages;
+ int pagesneeded;
+ int pagesreserved;
+ bus_dma_tag_t dmat;
+ struct memdesc mem;
+ bus_dmamap_callback_t *callback;
+ void *callback_arg;
+ int flags;
+#define DMAMAP_COHERENT (1 << 0)
+#define DMAMAP_DMAMEM_ALLOC (1 << 1)
+#define DMAMAP_MBUF (1 << 2)
+#define DMAMAP_CACHE_ALIGNED (1 << 3)
STAILQ_ENTRY(bus_dmamap) links;
- bus_dmamap_callback_t *callback;
- void *callback_arg;
- int sync_count;
- struct sync_list *slist;
+ bus_dma_segment_t *segments;
+ int sync_count;
+ struct sync_list slist[];
};
static STAILQ_HEAD(, bus_dmamap) bounce_map_waitinglist;
static STAILQ_HEAD(, bus_dmamap) bounce_map_callbacklist;
-static struct mtx busdma_mtx;
-
-MTX_SYSINIT(busdma_mtx, &busdma_mtx, "busdma lock", MTX_DEF);
-
static void init_bounce_pages(void *dummy);
static int alloc_bounce_zone(bus_dma_tag_t dmat);
static int alloc_bounce_pages(bus_dma_tag_t dmat, u_int numpages);
static int reserve_bounce_pages(bus_dma_tag_t dmat, bus_dmamap_t map,
- int commit);
+ int commit);
static bus_addr_t add_bounce_page(bus_dma_tag_t dmat, bus_dmamap_t map,
- vm_offset_t vaddr, bus_addr_t addr,
- bus_size_t size);
+ vm_offset_t vaddr, bus_addr_t addr, bus_size_t size);
static void free_bounce_page(bus_dma_tag_t dmat, struct bounce_page *bpage);
+static void bus_dmamap_sync_sl(struct sync_list *sl, bus_dmasync_op_t op,
+ int bufaligned);
/* Default tag, as most drivers provide no parent tag. */
bus_dma_tag_t arm_root_dma_tag;
@@ -206,54 +232,22 @@ bus_dma_tag_t arm_root_dma_tag;
* Begin block of code useful to transplant to other implementations.
*/
-static uma_zone_t dmamap_zone; /* Cache of struct bus_dmamap items */
-
static busdma_bufalloc_t coherent_allocator; /* Cache of coherent buffers */
static busdma_bufalloc_t standard_allocator; /* Cache of standard buffers */
-/*
- * This is the ctor function passed to uma_zcreate() for the pool of dma maps.
- * It'll need platform-specific changes if this code is copied.
- */
-static int
-dmamap_ctor(void *mem, int size, void *arg, int flags)
-{
- bus_dmamap_t map;
- bus_dma_tag_t dmat;
-
- map = (bus_dmamap_t)mem;
- dmat = (bus_dma_tag_t)arg;
-
- dmat->map_count++;
-
- map->dmat = dmat;
- map->flags = 0;
- STAILQ_INIT(&map->bpages);
-
- return (0);
-}
-
-/*
- * This is the dtor function passed to uma_zcreate() for the pool of dma maps.
- * It may need platform-specific changes if this code is copied .
- */
-static void
-dmamap_dtor(void *mem, int size, void *arg)
-{
- bus_dmamap_t map;
-
- map = (bus_dmamap_t)mem;
-
- map->dmat->map_count--;
-}
+MALLOC_DEFINE(M_BUSDMA, "busdma", "busdma metadata");
+MALLOC_DEFINE(M_BOUNCE, "bounce", "busdma bounce pages");
static void
busdma_init(void *dummy)
{
- /* Create a cache of maps for bus_dmamap_create(). */
- dmamap_zone = uma_zcreate("dma maps", sizeof(struct bus_dmamap),
- dmamap_ctor, dmamap_dtor, NULL, NULL, UMA_ALIGN_PTR, 0);
+ maploads_total = counter_u64_alloc(M_WAITOK);
+ maploads_bounced = counter_u64_alloc(M_WAITOK);
+ maploads_coherent = counter_u64_alloc(M_WAITOK);
+ maploads_dmamem = counter_u64_alloc(M_WAITOK);
+ maploads_mbuf = counter_u64_alloc(M_WAITOK);
+ maploads_physmem = counter_u64_alloc(M_WAITOK);
/* Create a cache of buffers in standard (cacheable) memory. */
standard_allocator = busdma_bufalloc_create("buffer",
@@ -275,11 +269,11 @@ busdma_init(void *dummy)
/*
* This init historically used SI_SUB_VM, but now the init code requires
- * malloc(9) using M_DEVBUF memory, which is set up later than SI_SUB_VM, by
- * SI_SUB_KMEM and SI_ORDER_THIRD, so we'll go right after that by using
- * SI_SUB_KMEM and SI_ORDER_FOURTH.
+ * malloc(9) using M_BUSDMA memory and the pcpu zones for counter(9), which get
+ * set up by SI_SUB_KMEM and SI_ORDER_LAST, so we'll go right after that by
+ * using SI_SUB_KMEM+1.
*/
-SYSINIT(busdma, SI_SUB_KMEM, SI_ORDER_FOURTH, busdma_init, NULL);
+SYSINIT(busdma, SI_SUB_KMEM+1, SI_ORDER_FIRST, busdma_init, NULL);
/*
* End block of code useful to transplant to other implementations.
@@ -357,6 +351,7 @@ _bus_dma_inrange(struct arm32_dma_range *ranges, int nranges,
return (NULL);
}
+
/*
* Convenience function for manipulating driver locks from busdma (during
* busdma_swi, for example). Drivers that don't provide their own locks
@@ -400,15 +395,12 @@ dflt_lock(void *arg, bus_dma_lock_op_t op)
/*
* Allocate a device specific dma_tag.
*/
-#define SEG_NB 1024
-
int
bus_dma_tag_create(bus_dma_tag_t parent, bus_size_t alignment,
- bus_addr_t boundary, bus_addr_t lowaddr,
- bus_addr_t highaddr, bus_dma_filter_t *filter,
- void *filterarg, bus_size_t maxsize, int nsegments,
- bus_size_t maxsegsz, int flags, bus_dma_lock_t *lockfunc,
- void *lockfuncarg, bus_dma_tag_t *dmat)
+ bus_addr_t boundary, bus_addr_t lowaddr, bus_addr_t highaddr,
+ bus_dma_filter_t *filter, void *filterarg, bus_size_t maxsize,
+ int nsegments, bus_size_t maxsegsz, int flags, bus_dma_lock_t *lockfunc,
+ void *lockfuncarg, bus_dma_tag_t *dmat)
{
bus_dma_tag_t newtag;
int error = 0;
@@ -417,7 +409,7 @@ bus_dma_tag_create(bus_dma_tag_t parent, bus_size_t alignment,
if (!parent)
parent = arm_root_dma_tag;
- newtag = (bus_dma_tag_t)malloc(sizeof(*newtag), M_DEVBUF, M_NOWAIT);
+ newtag = (bus_dma_tag_t)malloc(sizeof(*newtag), M_BUSDMA, M_NOWAIT);
if (newtag == NULL) {
CTR4(KTR_BUSDMA, "%s returned tag %p tag flags 0x%x error %d",
__func__, newtag, 0, error);
@@ -431,8 +423,8 @@ bus_dma_tag_create(bus_dma_tag_t parent, bus_size_t alignment,
newtag->highaddr = trunc_page((vm_offset_t)highaddr) + (PAGE_SIZE - 1);
newtag->filter = filter;
newtag->filterarg = filterarg;
- newtag->maxsize = maxsize;
- newtag->nsegments = nsegments;
+ newtag->maxsize = maxsize;
+ newtag->nsegments = nsegments;
newtag->maxsegsz = maxsegsz;
newtag->flags = flags;
newtag->ref_count = 1; /* Count ourself */
@@ -446,40 +438,27 @@ bus_dma_tag_create(bus_dma_tag_t parent, bus_size_t alignment,
newtag->lockfunc = dflt_lock;
newtag->lockfuncarg = NULL;
}
- /*
- * If all the segments we need fit into the local tagsegs array, set the
- * pointer now. Otherwise NULL the pointer and an array of segments
- * will be allocated later, on first use. We don't pre-allocate now
- * because some tags exist just to pass contraints to children in the
- * device hierarchy, and they tend to use BUS_SPACE_UNRESTRICTED and we
- * sure don't want to try to allocate an array for that.
- */
- if (newtag->nsegments <= nitems(newtag->tagsegs))
- newtag->segments = newtag->tagsegs;
- else
- newtag->segments = NULL;
- /*
- * Take into account any restrictions imposed by our parent tag
- */
- if (parent != NULL) {
- newtag->lowaddr = MIN(parent->lowaddr, newtag->lowaddr);
- newtag->highaddr = MAX(parent->highaddr, newtag->highaddr);
+
+ /* Take into account any restrictions imposed by our parent tag */
+ if (parent != NULL) {
+ newtag->lowaddr = MIN(parent->lowaddr, newtag->lowaddr);
+ newtag->highaddr = MAX(parent->highaddr, newtag->highaddr);
if (newtag->boundary == 0)
newtag->boundary = parent->boundary;
else if (parent->boundary != 0)
- newtag->boundary = MIN(parent->boundary,
+ newtag->boundary = MIN(parent->boundary,
newtag->boundary);
if ((newtag->filter != NULL) ||
((parent->flags & BUS_DMA_COULD_BOUNCE) != 0))
newtag->flags |= BUS_DMA_COULD_BOUNCE;
- if (newtag->filter == NULL) {
- /*
- * Short circuit looking at our parent directly
- * since we have encapsulated all of its information
- */
- newtag->filter = parent->filter;
- newtag->filterarg = parent->filterarg;
- newtag->parent = parent->parent;
+ if (newtag->filter == NULL) {
+ /*
+ * Short circuit looking at our parent directly
+ * since we have encapsulated all of its information
+ */
+ newtag->filter = parent->filter;
+ newtag->filterarg = parent->filterarg;
+ newtag->parent = parent->parent;
}
if (newtag->parent != NULL)
atomic_add_int(&parent->ref_count, 1);
@@ -495,7 +474,7 @@ bus_dma_tag_create(bus_dma_tag_t parent, bus_size_t alignment,
/* Must bounce */
if ((error = alloc_bounce_zone(newtag)) != 0) {
- free(newtag, M_DEVBUF);
+ free(newtag, M_BUSDMA);
return (error);
}
bz = newtag->bounce_zone;
@@ -513,90 +492,61 @@ bus_dma_tag_create(bus_dma_tag_t parent, bus_size_t alignment,
newtag->flags |= BUS_DMA_MIN_ALLOC_COMP;
} else
newtag->bounce_zone = NULL;
- if (error != 0)
- free(newtag, M_DEVBUF);
- else
+
+ if (error != 0) {
+ free(newtag, M_BUSDMA);
+ } else {
+ atomic_add_32(&tags_total, 1);
*dmat = newtag;
+ }
CTR4(KTR_BUSDMA, "%s returned tag %p tag flags 0x%x error %d",
__func__, newtag, (newtag != NULL ? newtag->flags : 0), error);
-
return (error);
}
int
bus_dma_tag_destroy(bus_dma_tag_t dmat)
{
-#ifdef KTR
- bus_dma_tag_t dmat_copy = dmat;
-#endif
-
- if (dmat != NULL) {
-
- if (dmat->map_count != 0)
- return (EBUSY);
-
- while (dmat != NULL) {
- bus_dma_tag_t parent;
-
- parent = dmat->parent;
- atomic_subtract_int(&dmat->ref_count, 1);
- if (dmat->ref_count == 0) {
- if (dmat->segments != NULL &&
- dmat->segments != dmat->tagsegs)
- free(dmat->segments, M_DEVBUF);
- free(dmat, M_DEVBUF);
- /*
- * Last reference count, so
- * release our reference
- * count on our parent.
- */
- dmat = parent;
- } else
- dmat = NULL;
- }
- }
- CTR2(KTR_BUSDMA, "%s tag %p", __func__, dmat_copy);
-
- return (0);
-}
+ bus_dma_tag_t dmat_copy;
+ int error;
-#include <sys/kdb.h>
-/*
- * Allocate a handle for mapping from kva/uva/physical
- * address space into bus device space.
- */
-int
-bus_dmamap_create(bus_dma_tag_t dmat, int flags, bus_dmamap_t *mapp)
-{
- struct sync_list *slist;
- bus_dmamap_t map;
- int error = 0;
+ error = 0;
+ dmat_copy = dmat;
- slist = malloc(sizeof(*slist) * dmat->nsegments, M_DEVBUF, M_NOWAIT);
- if (slist == NULL)
- return (ENOMEM);
+ if (dmat != NULL) {
- map = uma_zalloc_arg(dmamap_zone, dmat, M_NOWAIT);
- *mapp = map;
- if (map == NULL) {
- free(slist, M_DEVBUF);
- return (ENOMEM);
- }
+ if (dmat->map_count != 0) {
+ error = EBUSY;
+ goto out;
+ }
- /*
- * If the tag's segments haven't been allocated yet we need to do it
- * now, because we can't sleep for resources at map load time.
- */
- if (dmat->segments == NULL) {
- dmat->segments = malloc(dmat->nsegments *
- sizeof(*dmat->segments), M_DEVBUF, M_NOWAIT);
- if (dmat->segments == NULL) {
- free(slist, M_DEVBUF);
- uma_zfree(dmamap_zone, map);
- *mapp = NULL;
- return (ENOMEM);
+ while (dmat != NULL) {
+ bus_dma_tag_t parent;
+
+ parent = dmat->parent;
+ atomic_subtract_int(&dmat->ref_count, 1);
+ if (dmat->ref_count == 0) {
+ atomic_subtract_32(&tags_total, 1);
+ free(dmat, M_BUSDMA);
+ /*
+ * Last reference count, so
+ * release our reference
+ * count on our parent.
+ */
+ dmat = parent;
+ } else
+ dmat = NULL;
}
}
+out:
+ CTR3(KTR_BUSDMA, "%s tag %p error %d", __func__, dmat_copy, error);
+ return (error);
+}
+
+static int
+allocate_bz_and_pages(bus_dma_tag_t dmat, bus_dmamap_t map)
+{
+ int error;
/*
* Bouncing might be required if the driver asks for an active
@@ -611,16 +561,13 @@ bus_dmamap_create(bus_dma_tag_t dmat, int flags, bus_dmamap_t *mapp)
if (dmat->bounce_zone == NULL) {
if ((error = alloc_bounce_zone(dmat)) != 0) {
- free(slist, M_DEVBUF);
- uma_zfree(dmamap_zone, map);
- *mapp = NULL;
return (error);
}
}
bz = dmat->bounce_zone;
/* Initialize the new map */
- STAILQ_INIT(&((*mapp)->bpages));
+ STAILQ_INIT(&(map->bpages));
/*
* Attempt to add pages to our pool on a per-instance
@@ -635,21 +582,74 @@ bus_dmamap_create(bus_dma_tag_t dmat, int flags, bus_dmamap_t *mapp)
pages = MIN(maxpages - bz->total_bpages, pages);
pages = MAX(pages, 1);
if (alloc_bounce_pages(dmat, pages) < pages)
- error = ENOMEM;
+ return (ENOMEM);
- if ((dmat->flags & BUS_DMA_MIN_ALLOC_COMP) == 0) {
- if (error == 0)
- dmat->flags |= BUS_DMA_MIN_ALLOC_COMP;
- } else {
- error = 0;
- }
+ if ((dmat->flags & BUS_DMA_MIN_ALLOC_COMP) == 0)
+ dmat->flags |= BUS_DMA_MIN_ALLOC_COMP;
}
bz->map_count++;
}
- map->sync_count = 0;
- map->slist = slist;
- CTR4(KTR_BUSDMA, "%s: tag %p tag flags 0x%x error %d",
- __func__, dmat, dmat->flags, error);
+ return (0);
+}
+
+static bus_dmamap_t
+allocate_map(bus_dma_tag_t dmat, int mflags)
+{
+ int mapsize, segsize;
+ bus_dmamap_t map;
+
+ /*
+ * Allocate the map. The map structure ends with an embedded
+ * variable-sized array of sync_list structures. Following that
+ * we allocate enough extra space to hold the array of bus_dma_segments.
+ */
+ KASSERT(dmat->nsegments <= MAX_DMA_SEGMENTS,
+ ("cannot allocate %u dma segments (max is %u)",
+ dmat->nsegments, MAX_DMA_SEGMENTS));
+ segsize = sizeof(struct bus_dma_segment) * dmat->nsegments;
+ mapsize = sizeof(*map) + sizeof(struct sync_list) * dmat->nsegments;
+ map = malloc(mapsize + segsize, M_BUSDMA, mflags | M_ZERO);
+ if (map == NULL) {
+ CTR3(KTR_BUSDMA, "%s: tag %p error %d", __func__, dmat, ENOMEM);
+ return (NULL);
+ }
+ map->segments = (bus_dma_segment_t *)((uintptr_t)map + mapsize);
+ return (map);
+}
+
+/*
+ * Allocate a handle for mapping from kva/uva/physical
+ * address space into bus device space.
+ */
+int
+bus_dmamap_create(bus_dma_tag_t dmat, int flags, bus_dmamap_t *mapp)
+{
+ bus_dmamap_t map;
+ int error = 0;
+
+ *mapp = map = allocate_map(dmat, M_NOWAIT);
+ if (map == NULL) {
+ CTR3(KTR_BUSDMA, "%s: tag %p error %d", __func__, dmat, ENOMEM);
+ return (ENOMEM);
+ }
+
+ /*
+ * Bouncing might be required if the driver asks for an exclusion
+ * region, a data alignment that is stricter than 1, or DMA that begins
+ * or ends with a partial cacheline. Whether bouncing will actually
+ * happen can't be known until mapping time, but we need to pre-allocate
+ * resources now because we might not be allowed to at mapping time.
+ */
+ error = allocate_bz_and_pages(dmat, map);
+ if (error != 0) {
+ free(map, M_BUSDMA);
+ *mapp = NULL;
+ return (error);
+ }
+ if (map->flags & DMAMAP_COHERENT)
+ atomic_add_32(&maps_coherent, 1);
+ atomic_add_32(&maps_total, 1);
+ dmat->map_count++;
return (0);
}
@@ -667,12 +667,15 @@ bus_dmamap_destroy(bus_dma_tag_t dmat, bus_dmamap_t map)
__func__, dmat, EBUSY);
return (EBUSY);
}
- free(map->slist, M_DEVBUF);
- uma_zfree(dmamap_zone, map);
if (dmat->bounce_zone)
dmat->bounce_zone->map_count--;
+ if (map->flags & DMAMAP_COHERENT)
+ atomic_subtract_32(&maps_coherent, 1);
+ atomic_subtract_32(&maps_total, 1);
+ free(map, M_BUSDMA);
+ dmat->map_count--;
CTR2(KTR_BUSDMA, "%s: tag %p error 0", __func__, dmat);
- return (0);
+ return (0);
}
/*
@@ -681,37 +684,31 @@ bus_dmamap_destroy(bus_dma_tag_t dmat, bus_dmamap_t map)
* the allocated memory, and a pointer to an associated bus_dmamap.
*/
int
-bus_dmamem_alloc(bus_dma_tag_t dmat, void **vaddrp, int flags,
- bus_dmamap_t *mapp)
+bus_dmamem_alloc(bus_dma_tag_t dmat, void **vaddr, int flags,
+ bus_dmamap_t *mapp)
{
- struct sync_list *slist;
- void * vaddr;
- struct busdma_bufzone *bufzone;
busdma_bufalloc_t ba;
+ struct busdma_bufzone *bufzone;
bus_dmamap_t map;
- int mflags;
vm_memattr_t memattr;
+ int mflags;
if (flags & BUS_DMA_NOWAIT)
mflags = M_NOWAIT;
else
mflags = M_WAITOK;
- /*
- * If the tag's segments haven't been allocated yet we need to do it
- * now, because we can't sleep for resources at map load time.
- */
- if (dmat->segments == NULL)
- dmat->segments = malloc(dmat->nsegments *
- sizeof(*dmat->segments), M_DEVBUF, mflags);
+ if (flags & BUS_DMA_ZERO)
+ mflags |= M_ZERO;
- slist = malloc(sizeof(*slist) * dmat->nsegments, M_DEVBUF, M_NOWAIT);
- if (slist == NULL)
- return (ENOMEM);
- map = uma_zalloc_arg(dmamap_zone, dmat, mflags);
+ *mapp = map = allocate_map(dmat, mflags);
if (map == NULL) {
- free(slist, M_DEVBUF);
+ CTR4(KTR_BUSDMA, "%s: tag %p tag flags 0x%x error %d",
+ __func__, dmat, dmat->flags, ENOMEM);
return (ENOMEM);
}
+ map->flags = DMAMAP_DMAMEM_ALLOC;
+
+ /* Choose a busdma buffer allocator based on memory type flags. */
if (flags & BUS_DMA_COHERENT) {
memattr = VM_MEMATTR_UNCACHEABLE;
ba = coherent_allocator;
@@ -720,11 +717,6 @@ bus_dmamem_alloc(bus_dma_tag_t dmat, void **vaddrp, int flags,
memattr = VM_MEMATTR_DEFAULT;
ba = standard_allocator;
}
- /* All buffers we allocate are cache-aligned. */
- map->flags |= DMAMAP_CACHE_ALIGNED;
-
- if (flags & BUS_DMA_ZERO)
- mflags |= M_ZERO;
/*
* Try to find a bufzone in the allocator that holds a cache of buffers
@@ -748,28 +740,32 @@ bus_dmamem_alloc(bus_dma_tag_t dmat, void **vaddrp, int flags,
*/
if (bufzone != NULL && dmat->alignment <= bufzone->size &&
!_bus_dma_can_bounce(dmat->lowaddr, dmat->highaddr)) {
- vaddr = uma_zalloc(bufzone->umazone, mflags);
+ *vaddr = uma_zalloc(bufzone->umazone, mflags);
} else if (dmat->nsegments >= btoc(dmat->maxsize) &&
dmat->alignment <= PAGE_SIZE && dmat->boundary == 0) {
- vaddr = (void *)kmem_alloc_attr(kernel_arena, dmat->maxsize,
+ *vaddr = (void *)kmem_alloc_attr(kernel_arena, dmat->maxsize,
mflags, 0, dmat->lowaddr, memattr);
} else {
- vaddr = (void *)kmem_alloc_contig(kernel_arena, dmat->maxsize,
+ *vaddr = (void *)kmem_alloc_contig(kernel_arena, dmat->maxsize,
mflags, 0, dmat->lowaddr, dmat->alignment, dmat->boundary,
memattr);
}
- if (vaddr == NULL) {
- free(slist, M_DEVBUF);
- uma_zfree(dmamap_zone, map);
- map = NULL;
- } else {
- map->slist = slist;
- map->sync_count = 0;
+ if (*vaddr == NULL) {
+ CTR4(KTR_BUSDMA, "%s: tag %p tag flags 0x%x error %d",
+ __func__, dmat, dmat->flags, ENOMEM);
+ free(map, M_BUSDMA);
+ *mapp = NULL;
+ return (ENOMEM);
}
- *vaddrp = vaddr;
- *mapp = map;
+ if (map->flags & DMAMAP_COHERENT)
+ atomic_add_32(&maps_coherent, 1);
+ atomic_add_32(&maps_dmamem, 1);
+ atomic_add_32(&maps_total, 1);
+ dmat->map_count++;
- return (vaddr == NULL ? ENOMEM : 0);
+ CTR4(KTR_BUSDMA, "%s: tag %p tag flags 0x%x error %d",
+ __func__, dmat, dmat->flags, 0);
+ return (0);
}
/*
@@ -786,10 +782,6 @@ bus_dmamem_free(bus_dma_tag_t dmat, void *vaddr, bus_dmamap_t map)
ba = coherent_allocator;
else
ba = standard_allocator;
- uma_zfree(dmamap_zone, map);
-
- free(map->slist, M_DEVBUF);
- /* Be careful not to access map from here on. */
bufzone = busdma_bufalloc_findzone(ba, dmat->maxsize);
@@ -798,6 +790,14 @@ bus_dmamem_free(bus_dma_tag_t dmat, void *vaddr, bus_dmamap_t map)
uma_zfree(bufzone->umazone, vaddr);
else
kmem_free(kernel_arena, (vm_offset_t)vaddr, dmat->maxsize);
+
+ dmat->map_count--;
+ if (map->flags & DMAMAP_COHERENT)
+ atomic_subtract_32(&maps_coherent, 1);
+ atomic_subtract_32(&maps_total, 1);
+ atomic_subtract_32(&maps_dmamem, 1);
+ free(map, M_BUSDMA);
+ CTR3(KTR_BUSDMA, "%s: tag %p flags 0x%x", __func__, dmat, dmat->flags);
}
static void
@@ -820,7 +820,8 @@ _bus_dmamap_count_phys(bus_dma_tag_t dmat, bus_dmamap_t map, vm_paddr_t buf,
while (buflen != 0) {
sgsize = MIN(buflen, dmat->maxsegsz);
if (run_filter(dmat, curaddr) != 0) {
- sgsize = MIN(sgsize, PAGE_SIZE);
+ sgsize = MIN(sgsize,
+ PAGE_SIZE - (curaddr & PAGE_MASK));
map->pagesneeded++;
}
curaddr += sgsize;
@@ -930,7 +931,7 @@ _bus_dmamap_addseg(bus_dma_tag_t dmat, bus_dmamap_t map, bus_addr_t curaddr,
curaddr == segs[seg].ds_addr + segs[seg].ds_len &&
(segs[seg].ds_len + sgsize) <= dmat->maxsegsz &&
(dmat->boundary == 0 ||
- (segs[seg].ds_addr & bmask) == (curaddr & bmask))) {
+ (segs[seg].ds_addr & bmask) == (curaddr & bmask))) {
segs[seg].ds_len += sgsize;
} else {
if (++seg >= dmat->nsegments)
@@ -950,30 +951,53 @@ int
_bus_dmamap_load_phys(bus_dma_tag_t dmat, bus_dmamap_t map, vm_paddr_t buf,
bus_size_t buflen, int flags, bus_dma_segment_t *segs, int *segp)
{
- bus_size_t sgsize;
bus_addr_t curaddr;
+ bus_addr_t sl_end = 0;
+ bus_size_t sgsize;
+ struct sync_list *sl;
int error;
if (segs == NULL)
- segs = dmat->segments;
+ segs = map->segments;
+
+ counter_u64_add(maploads_total, 1);
+ counter_u64_add(maploads_physmem, 1);
if ((dmat->flags & BUS_DMA_COULD_BOUNCE) != 0) {
_bus_dmamap_count_phys(dmat, map, buf, buflen, flags);
if (map->pagesneeded != 0) {
+ counter_u64_add(maploads_bounced, 1);
error = _bus_dmamap_reserve_pages(dmat, map, flags);
if (error)
return (error);
}
}
+ sl = map->slist + map->sync_count - 1;
+
while (buflen > 0) {
curaddr = buf;
sgsize = MIN(buflen, dmat->maxsegsz);
if (((dmat->flags & BUS_DMA_COULD_BOUNCE) != 0) &&
map->pagesneeded != 0 && run_filter(dmat, curaddr)) {
- sgsize = MIN(sgsize, PAGE_SIZE);
+ sgsize = MIN(sgsize, PAGE_SIZE - (curaddr & PAGE_MASK));
curaddr = add_bounce_page(dmat, map, 0, curaddr,
sgsize);
+ } else {
+ if (map->sync_count > 0)
+ sl_end = VM_PAGE_TO_PHYS(sl->pages) +
+ sl->dataoffs + sl->datacount;
+
+ if (map->sync_count == 0 || curaddr != sl_end) {
+ if (++map->sync_count > dmat->nsegments)
+ break;
+ sl++;
+ sl->vaddr = 0;
+ sl->datacount = sgsize;
+ sl->pages = PHYS_TO_VM_PAGE(curaddr);
+ sl->dataoffs = curaddr & PAGE_MASK;
+ } else
+ sl->datacount += sgsize;
}
sgsize = _bus_dmamap_addseg(dmat, map, curaddr, sgsize, segs,
segp);
@@ -1014,18 +1038,30 @@ _bus_dmamap_load_buffer(bus_dma_tag_t dmat, bus_dmamap_t map, void *buf,
{
bus_size_t sgsize;
bus_addr_t curaddr;
+ bus_addr_t sl_pend = 0;
struct sync_list *sl;
+ vm_offset_t kvaddr;
vm_offset_t vaddr = (vm_offset_t)buf;
+ vm_offset_t sl_vend = 0;
int error = 0;
+ counter_u64_add(maploads_total, 1);
+ if (map->flags & DMAMAP_COHERENT)
+ counter_u64_add(maploads_coherent, 1);
+ if (map->flags & DMAMAP_DMAMEM_ALLOC)
+ counter_u64_add(maploads_dmamem, 1);
+
if (segs == NULL)
- segs = dmat->segments;
- if ((flags & BUS_DMA_LOAD_MBUF) != 0)
+ segs = map->segments;
+ if (flags & BUS_DMA_LOAD_MBUF) {
+ counter_u64_add(maploads_mbuf, 1);
map->flags |= DMAMAP_CACHE_ALIGNED;
+ }
if ((dmat->flags & BUS_DMA_COULD_BOUNCE) != 0) {
_bus_dmamap_count_pages(dmat, map, pmap, buf, buflen, flags);
if (map->pagesneeded != 0) {
+ counter_u64_add(maploads_bounced, 1);
error = _bus_dmamap_reserve_pages(dmat, map, flags);
if (error)
return (error);
@@ -1034,21 +1070,25 @@ _bus_dmamap_load_buffer(bus_dma_tag_t dmat, bus_dmamap_t map, void *buf,
CTR3(KTR_BUSDMA, "lowaddr= %d boundary= %d, "
"alignment= %d", dmat->lowaddr, dmat->boundary, dmat->alignment);
+ sl = map->slist + map->sync_count - 1;
+
while (buflen > 0) {
/*
* Get the physical address for this segment.
*/
if (__predict_true(pmap == kernel_pmap)) {
curaddr = pmap_kextract(vaddr);
+ kvaddr = vaddr;
} else {
curaddr = pmap_extract(pmap, vaddr);
map->flags &= ~DMAMAP_COHERENT;
+ kvaddr = 0;
}
/*
* Compute the segment size, and adjust counts.
*/
- sgsize = PAGE_SIZE - ((u_long)curaddr & PAGE_MASK);
+ sgsize = PAGE_SIZE - (curaddr & PAGE_MASK);
if (sgsize > dmat->maxsegsz)
sgsize = dmat->maxsegsz;
if (buflen < sgsize)
@@ -1056,18 +1096,26 @@ _bus_dmamap_load_buffer(bus_dma_tag_t dmat, bus_dmamap_t map, void *buf,
if (((dmat->flags & BUS_DMA_COULD_BOUNCE) != 0) &&
map->pagesneeded != 0 && run_filter(dmat, curaddr)) {
- curaddr = add_bounce_page(dmat, map, vaddr, curaddr,
+ curaddr = add_bounce_page(dmat, map, kvaddr, curaddr,
sgsize);
} else {
- sl = &map->slist[map->sync_count - 1];
+ if (map->sync_count > 0) {
+ sl_pend = VM_PAGE_TO_PHYS(sl->pages) +
+ sl->dataoffs + sl->datacount;
+ sl_vend = sl->vaddr + sl->datacount;
+ }
+
if (map->sync_count == 0 ||
- vaddr != sl->vaddr + sl->datacount) {
+ (kvaddr != 0 && kvaddr != sl_vend) ||
+ (kvaddr == 0 && curaddr != sl_pend)) {
+
if (++map->sync_count > dmat->nsegments)
goto cleanup;
sl++;
- sl->vaddr = vaddr;
+ sl->vaddr = kvaddr;
sl->datacount = sgsize;
- sl->busaddr = curaddr;
+ sl->pages = PHYS_TO_VM_PAGE(curaddr);
+ sl->dataoffs = curaddr & PAGE_MASK;
} else
sl->datacount += sgsize;
}
@@ -1091,9 +1139,8 @@ cleanup:
}
void
-__bus_dmamap_waitok(bus_dma_tag_t dmat, bus_dmamap_t map,
- struct memdesc *mem, bus_dmamap_callback_t *callback,
- void *callback_arg)
+__bus_dmamap_waitok(bus_dma_tag_t dmat, bus_dmamap_t map, struct memdesc *mem,
+ bus_dmamap_callback_t *callback, void *callback_arg)
{
KASSERT(dmat != NULL, ("dmatag is NULL"));
@@ -1105,11 +1152,11 @@ __bus_dmamap_waitok(bus_dma_tag_t dmat, bus_dmamap_t map,
bus_dma_segment_t *
_bus_dmamap_complete(bus_dma_tag_t dmat, bus_dmamap_t map,
- bus_dma_segment_t *segs, int nsegs, int error)
+ bus_dma_segment_t *segs, int nsegs, int error)
{
if (segs == NULL)
- segs = dmat->segments;
+ segs = map->segments;
return (segs);
}
@@ -1120,13 +1167,22 @@ void
_bus_dmamap_unload(bus_dma_tag_t dmat, bus_dmamap_t map)
{
struct bounce_page *bpage;
+ struct bounce_zone *bz;
- while ((bpage = STAILQ_FIRST(&map->bpages)) != NULL) {
- STAILQ_REMOVE_HEAD(&map->bpages, links);
- free_bounce_page(dmat, bpage);
+ if ((bz = dmat->bounce_zone) != NULL) {
+ while ((bpage = STAILQ_FIRST(&map->bpages)) != NULL) {
+ STAILQ_REMOVE_HEAD(&map->bpages, links);
+ free_bounce_page(dmat, bpage);
+ }
+
+ bz = dmat->bounce_zone;
+ bz->free_bpages += map->pagesreserved;
+ bz->reserved_bpages -= map->pagesreserved;
+ map->pagesreserved = 0;
+ map->pagesneeded = 0;
}
map->sync_count = 0;
- return;
+ map->flags &= ~DMAMAP_MBUF;
}
static void
@@ -1199,18 +1255,66 @@ bus_dmamap_sync_buf(vm_offset_t buf, int len, bus_dmasync_op_t op,
}
static void
+bus_dmamap_sync_sl(struct sync_list *sl, bus_dmasync_op_t op,
+ int bufaligned)
+{
+ vm_offset_t tempvaddr;
+ vm_page_t curpage;
+ size_t npages;
+
+ if (sl->vaddr != 0) {
+ bus_dmamap_sync_buf(sl->vaddr, sl->datacount, op, bufaligned);
+ return;
+ }
+
+ tempvaddr = 0;
+ npages = atop(round_page(sl->dataoffs + sl->datacount));
+
+ for (curpage = sl->pages; curpage != sl->pages + npages; ++curpage) {
+ /*
+ * If the page is mapped to some other VA that hasn't
+ * been supplied to busdma, then pmap_quick_enter_page()
+ * will find all duplicate mappings and mark them
+ * uncacheable.
+ * That will also do any necessary wb/inv. Otherwise,
+ * if the page is truly unmapped, then we don't actually
+ * need to do cache maintenance.
+ * XXX: May overwrite DMA'ed data in the POSTREAD
+ * case where the CPU has written to a cacheline not
+ * completely covered by the DMA region.
+ */
+ KASSERT(VM_PAGE_TO_PHYS(curpage) == VM_PAGE_TO_PHYS(sl->pages) +
+ ptoa(curpage - sl->pages),
+ ("unexpected vm_page_t phys: 0x%08x != 0x%08x",
+ VM_PAGE_TO_PHYS(curpage), VM_PAGE_TO_PHYS(sl->pages) +
+ ptoa(curpage - sl->pages)));
+ tempvaddr = pmap_quick_enter_page(curpage);
+ pmap_quick_remove_page(tempvaddr);
+ }
+}
+
+static void
_bus_dmamap_sync_bp(bus_dma_tag_t dmat, bus_dmamap_t map, bus_dmasync_op_t op)
{
struct bounce_page *bpage;
+ vm_offset_t datavaddr, tempvaddr;
+
+ if ((op & (BUS_DMASYNC_PREWRITE | BUS_DMASYNC_POSTREAD)) == 0)
+ return;
STAILQ_FOREACH(bpage, &map->bpages, links) {
+ tempvaddr = 0;
+ datavaddr = bpage->datavaddr;
if (op & BUS_DMASYNC_PREWRITE) {
- if (bpage->datavaddr != 0)
- bcopy((void *)bpage->datavaddr,
- (void *)bpage->vaddr, bpage->datacount);
- else
- physcopyout(bpage->dataaddr,
- (void *)bpage->vaddr,bpage->datacount);
+ if (datavaddr == 0) {
+ tempvaddr =
+ pmap_quick_enter_page(bpage->datapage);
+ datavaddr = tempvaddr | bpage->dataoffs;
+ }
+ bcopy((void *)datavaddr,
+ (void *)bpage->vaddr, bpage->datacount);
+ if (tempvaddr != 0)
+ pmap_quick_remove_page(tempvaddr);
cpu_dcache_wb_range(bpage->vaddr, bpage->datacount);
cpu_l2cache_wb_range(bpage->vaddr, bpage->datacount);
dmat->bounce_zone->total_bounced++;
@@ -1218,12 +1322,15 @@ _bus_dmamap_sync_bp(bus_dma_tag_t dmat, bus_dmamap_t map, bus_dmasync_op_t op)
if (op & BUS_DMASYNC_POSTREAD) {
cpu_dcache_inv_range(bpage->vaddr, bpage->datacount);
cpu_l2cache_inv_range(bpage->vaddr, bpage->datacount);
- if (bpage->datavaddr != 0)
- bcopy((void *)bpage->vaddr,
- (void *)bpage->datavaddr, bpage->datacount);
- else
- physcopyin((void *)bpage->vaddr,
- bpage->dataaddr, bpage->datacount);
+ if (datavaddr == 0) {
+ tempvaddr =
+ pmap_quick_enter_page(bpage->datapage);
+ datavaddr = tempvaddr | bpage->dataoffs;
+ }
+ bcopy((void *)bpage->vaddr,
+ (void *)datavaddr, bpage->datacount);
+ if (tempvaddr != 0)
+ pmap_quick_remove_page(tempvaddr);
dmat->bounce_zone->total_bounced++;
}
}
@@ -1246,8 +1353,7 @@ _bus_dmamap_sync(bus_dma_tag_t dmat, bus_dmamap_t map, bus_dmasync_op_t op)
if (map->sync_count) {
end = &map->slist[map->sync_count];
for (sl = &map->slist[0]; sl != end; sl++)
- bus_dmamap_sync_buf(sl->vaddr, sl->datacount, op,
- bufaligned);
+ bus_dmamap_sync_sl(sl, op, bufaligned);
}
drain:
@@ -1270,12 +1376,14 @@ SYSINIT(bpages, SI_SUB_LOCK, SI_ORDER_ANY, init_bounce_pages, NULL);
static struct sysctl_ctx_list *
busdma_sysctl_tree(struct bounce_zone *bz)
{
+
return (&bz->sysctl_tree);
}
static struct sysctl_oid *
busdma_sysctl_tree_top(struct bounce_zone *bz)
{
+
return (bz->sysctl_tree_top);
}
@@ -1286,14 +1394,14 @@ alloc_bounce_zone(bus_dma_tag_t dmat)
/* Check to see if we already have a suitable zone */
STAILQ_FOREACH(bz, &bounce_zone_list, links) {
- if ((dmat->alignment <= bz->alignment)
- && (dmat->lowaddr >= bz->lowaddr)) {
+ if ((dmat->alignment <= bz->alignment) &&
+ (dmat->lowaddr >= bz->lowaddr)) {
dmat->bounce_zone = bz;
return (0);
}
}
- if ((bz = (struct bounce_zone *)malloc(sizeof(*bz), M_DEVBUF,
+ if ((bz = (struct bounce_zone *)malloc(sizeof(*bz), M_BUSDMA,
M_NOWAIT | M_ZERO)) == NULL)
return (ENOMEM);
@@ -1338,7 +1446,7 @@ alloc_bounce_zone(bus_dma_tag_t dmat)
SYSCTL_ADD_INT(busdma_sysctl_tree(bz),
SYSCTL_CHILDREN(busdma_sysctl_tree_top(bz)), OID_AUTO,
"total_bounced", CTLFLAG_RD, &bz->total_bounced, 0,
- "Total bounce requests");
+ "Total bounce requests (pages bounced)");
SYSCTL_ADD_INT(busdma_sysctl_tree(bz),
SYSCTL_CHILDREN(busdma_sysctl_tree_top(bz)), OID_AUTO,
"total_deferred", CTLFLAG_RD, &bz->total_deferred, 0,
@@ -1364,18 +1472,15 @@ alloc_bounce_pages(bus_dma_tag_t dmat, u_int numpages)
while (numpages > 0) {
struct bounce_page *bpage;
- bpage = (struct bounce_page *)malloc(sizeof(*bpage), M_DEVBUF,
- M_NOWAIT | M_ZERO);
+ bpage = (struct bounce_page *)malloc(sizeof(*bpage), M_BUSDMA,
+ M_NOWAIT | M_ZERO);
if (bpage == NULL)
break;
- bpage->vaddr = (vm_offset_t)contigmalloc(PAGE_SIZE, M_DEVBUF,
- M_NOWAIT, 0ul,
- bz->lowaddr,
- PAGE_SIZE,
- 0);
+ bpage->vaddr = (vm_offset_t)contigmalloc(PAGE_SIZE, M_BOUNCE,
+ M_NOWAIT, 0ul, bz->lowaddr, PAGE_SIZE, 0);
if (bpage->vaddr == 0) {
- free(bpage, M_DEVBUF);
+ free(bpage, M_BUSDMA);
break;
}
bpage->busaddr = pmap_kextract(bpage->vaddr);
@@ -1412,7 +1517,7 @@ reserve_bounce_pages(bus_dma_tag_t dmat, bus_dmamap_t map, int commit)
static bus_addr_t
add_bounce_page(bus_dma_tag_t dmat, bus_dmamap_t map, vm_offset_t vaddr,
- bus_addr_t addr, bus_size_t size)
+ bus_addr_t addr, bus_size_t size)
{
struct bounce_zone *bz;
struct bounce_page *bpage;
@@ -1445,7 +1550,8 @@ add_bounce_page(bus_dma_tag_t dmat, bus_dmamap_t map, vm_offset_t vaddr,
bpage->busaddr |= addr & PAGE_MASK;
}
bpage->datavaddr = vaddr;
- bpage->dataaddr = addr;
+ bpage->datapage = PHYS_TO_VM_PAGE(addr);
+ bpage->dataoffs = addr & PAGE_MASK;
bpage->datacount = size;
STAILQ_INSERT_TAIL(&(map->bpages), bpage, links);
return (bpage->busaddr);
@@ -1478,7 +1584,7 @@ free_bounce_page(bus_dma_tag_t dmat, struct bounce_page *bpage)
if (reserve_bounce_pages(map->dmat, map, 1) == 0) {
STAILQ_REMOVE_HEAD(&bounce_map_waitinglist, links);
STAILQ_INSERT_TAIL(&bounce_map_callbacklist,
- map, links);
+ map, links);
busdma_swi_pending = 1;
bz->total_deferred++;
swi_sched(vm_ih, 0);
@@ -1498,10 +1604,10 @@ busdma_swi(void)
STAILQ_REMOVE_HEAD(&bounce_map_callbacklist, links);
mtx_unlock(&bounce_lock);
dmat = map->dmat;
- (dmat->lockfunc)(dmat->lockfuncarg, BUS_DMA_LOCK);
- bus_dmamap_load_mem(map->dmat, map, &map->mem,
- map->callback, map->callback_arg, BUS_DMA_WAITOK);
- (dmat->lockfunc)(dmat->lockfuncarg, BUS_DMA_UNLOCK);
+ dmat->lockfunc(dmat->lockfuncarg, BUS_DMA_LOCK);
+ bus_dmamap_load_mem(map->dmat, map, &map->mem, map->callback,
+ map->callback_arg, BUS_DMA_WAITOK);
+ dmat->lockfunc(dmat->lockfuncarg, BUS_DMA_UNLOCK);
mtx_lock(&bounce_lock);
}
mtx_unlock(&bounce_lock);
diff --git a/sys/arm/arm/cpufunc.c b/sys/arm/arm/cpufunc.c
index fea0581..734ee58 100644
--- a/sys/arm/arm/cpufunc.c
+++ b/sys/arm/arm/cpufunc.c
@@ -1294,7 +1294,7 @@ cortexa_setup(void)
/* And again. */
cpu_idcache_wbinv_all();
-#ifdef SMP
+#if defined(SMP) && !defined(ARM_NEW_PMAP)
armv7_auxctrl((1 << 6) | (1 << 0), (1 << 6) | (1 << 0)); /* Enable SMP + TLB broadcasting */
#endif
diff --git a/sys/arm/arm/cpuinfo.c b/sys/arm/arm/cpuinfo.c
index 311eba1..5e96cae 100644
--- a/sys/arm/arm/cpuinfo.c
+++ b/sys/arm/arm/cpuinfo.c
@@ -145,3 +145,82 @@ cpuinfo_init(void)
cpuinfo.dcache_line_mask = cpuinfo.dcache_line_size - 1;
cpuinfo.icache_line_mask = cpuinfo.icache_line_size - 1;
}
+
+/*
+ * Get bits that must be set or cleared in ACLR register.
+ * Note: Bits in ACLR register are IMPLEMENTATION DEFINED.
+ * Its expected that SCU is in operational state before this
+ * function is called.
+ */
+void
+cpuinfo_get_actlr_modifier(uint32_t *actlr_mask, uint32_t *actlr_set)
+{
+ *actlr_mask = 0;
+ *actlr_set = 0;
+
+ if (cpuinfo.implementer == CPU_IMPLEMENTER_ARM) {
+ switch (cpuinfo.part_number) {
+
+ case CPU_ARCH_CORTEX_A17:
+ case CPU_ARCH_CORTEX_A12: /* A12 is merged to A17 */
+ /*
+ * Enable SMP mode
+ */
+ *actlr_mask = (1 << 6);
+ *actlr_set = (1 << 6);
+ break;
+ case CPU_ARCH_CORTEX_A15:
+ /*
+ * Enable snoop-delayed exclusive handling
+ * Enable SMP mode
+ */
+ *actlr_mask = (1U << 31) |(1 << 6);
+ *actlr_set = (1U << 31) |(1 << 6);
+ break;
+ case CPU_ARCH_CORTEX_A9:
+ /*
+ * Disable exclusive L1/L2 cache control
+ * Enable SMP mode
+ * Enable Cache and TLB maintenance broadcast
+ */
+ *actlr_mask = (1 << 7) | (1 << 6) | (1 << 0);
+ *actlr_set = (1 << 6) | (1 << 0);
+ break;
+ case CPU_ARCH_CORTEX_A8:
+ /*
+ * Enable L2 cache
+ * Enable L1 data cache hardware alias checks
+ */
+ *actlr_mask = (1 << 1) | (1 << 0);
+ *actlr_set = (1 << 1);
+ break;
+ case CPU_ARCH_CORTEX_A7:
+ /*
+ * Enable SMP mode
+ */
+ *actlr_mask = (1 << 6);
+ *actlr_set = (1 << 6);
+ break;
+ case CPU_ARCH_CORTEX_A5:
+ /*
+ * Disable exclusive L1/L2 cache control
+ * Enable SMP mode
+ * Enable Cache and TLB maintenance broadcast
+ */
+ *actlr_mask = (1 << 7) | (1 << 6) | (1 << 0);
+ *actlr_set = (1 << 6) | (1 << 0);
+ break;
+ case CPU_ARCH_ARM1176:
+ /*
+ * Restrict cache size to 16KB
+ * Enable the return stack
+ * Enable dynamic branch prediction
+ * Enable static branch prediction
+ */
+ *actlr_mask = (1 << 6) | (1 << 2) | (1 << 1) | (1 << 0);
+ *actlr_set = (1 << 6) | (1 << 2) | (1 << 1) | (1 << 0);
+ break;
+ }
+ return;
+ }
+}
diff --git a/sys/arm/arm/gic.c b/sys/arm/arm/gic.c
index a1ce111..079e089 100644
--- a/sys/arm/arm/gic.c
+++ b/sys/arm/arm/gic.c
@@ -554,10 +554,10 @@ dispatch_irq:
arm_irq_dispatch(isrc, tf);
next_irq:
-// arm_irq_memory_barrier(irq); /* XXX */
-// irq_active_reg = gic_c_read_4(sc, GICC_IAR);
-// irq = irq_active_reg & 0x3FF;
- if (0 && irq < sc->nirqs)
+ arm_irq_memory_barrier(irq);
+ irq_active_reg = gic_c_read_4(sc, GICC_IAR);
+ irq = irq_active_reg & 0x3FF;
+ if (irq < sc->nirqs)
goto dispatch_irq;
return (FILTER_HANDLED);
@@ -860,7 +860,6 @@ arm_gic_post_filter(device_t dev, struct arm_irqsrc *isrc)
gic_c_write_4(sc, GICC_EOIR, isrc->isrc_data);
}
-#ifdef SMP
static int
arm_gic_bind(device_t dev, struct arm_irqsrc *isrc)
{
@@ -877,6 +876,7 @@ arm_gic_bind(device_t dev, struct arm_irqsrc *isrc)
return (gic_bind(sc, irq, &isrc->isrc_cpu));
}
+#ifdef SMP
static void
arm_gic_ipi_send(device_t dev, struct arm_irqsrc *isrc, cpuset_t cpus)
{
diff --git a/sys/arm/arm/locore-v6.S b/sys/arm/arm/locore-v6.S
index 5a52228..6aa61f3 100644
--- a/sys/arm/arm/locore-v6.S
+++ b/sys/arm/arm/locore-v6.S
@@ -74,9 +74,11 @@ __FBSDID("$FreeBSD$");
teq r0, #(PSR_HYP32_MODE) /* Hyp Mode? */ ;\
bne 1f ;\
/* Ensure that IRQ, FIQ and Aborts will be disabled after eret */ ;\
- mrs r0, spsr ;\
+ mrs r0, cpsr ;\
+ bic r0, r0, #(PSR_MODE) ;\
+ orr r0, r0, #(PSR_SVC32_MODE) ;\
orr r0, r0, #(PSR_I | PSR_F | PSR_A) ;\
- msr spsr, r0 ;\
+ msr spsr_cxsf, r0 ;\
/* Exit hypervisor mode */ ;\
adr lr, 1f ;\
MSR_ELR_HYP(14) ;\
diff --git a/sys/arm/arm/mp_machdep.c b/sys/arm/arm/mp_machdep.c
index 5d1043f..19ff079 100644
--- a/sys/arm/arm/mp_machdep.c
+++ b/sys/arm/arm/mp_machdep.c
@@ -154,10 +154,12 @@ init_secondary(int cpu)
#ifndef ARM_INTRNG
int start = 0, end = 0;
#endif
-
#ifdef ARM_NEW_PMAP
+ uint32_t actlr_mask, actlr_set;
+
pmap_set_tex();
- reinit_mmu(pmap_kern_ttb, (1<<6) | (1<< 0), (1<<6) | (1<< 0));
+ cpuinfo_get_actlr_modifier(&actlr_mask, &actlr_set);
+ reinit_mmu(pmap_kern_ttb, actlr_mask, actlr_set);
cpu_setup();
/* Provide stack pointers for other processor modes. */
diff --git a/sys/arm/arm/pmap-v6-new.c b/sys/arm/arm/pmap-v6-new.c
index d0a3f0f..97ee566 100644
--- a/sys/arm/arm/pmap-v6-new.c
+++ b/sys/arm/arm/pmap-v6-new.c
@@ -713,6 +713,7 @@ pmap_bootstrap_prepare(vm_paddr_t last)
pt1_entry_t *pte1p;
pt2_entry_t *pte2p;
u_int i;
+ uint32_t actlr_mask, actlr_set;
/*
* Now, we are going to make real kernel mapping. Note that we are
@@ -829,8 +830,8 @@ pmap_bootstrap_prepare(vm_paddr_t last)
/* Finally, switch from 'boot_pt1' to 'kern_pt1'. */
pmap_kern_ttb = base_pt1 | ttb_flags;
- reinit_mmu(pmap_kern_ttb, (1 << 6) | (1 << 0), (1 << 6) | (1 << 0));
-
+ cpuinfo_get_actlr_modifier(&actlr_mask, &actlr_set);
+ reinit_mmu(pmap_kern_ttb, actlr_mask, actlr_set);
/*
* Initialize the first available KVA. As kernel image is mapped by
* sections, we are leaving some gap behind.
@@ -5946,13 +5947,6 @@ pmap_activate(struct thread *td)
critical_exit();
}
-int
-pmap_dmap_iscurrent(pmap_t pmap)
-{
-
- return (pmap_is_current(pmap));
-}
-
/*
* Perform the pmap work for mincore.
*/
diff --git a/sys/arm/arm/pmap-v6.c b/sys/arm/arm/pmap-v6.c
index 437891e..4dbd9c4 100644
--- a/sys/arm/arm/pmap-v6.c
+++ b/sys/arm/arm/pmap-v6.c
@@ -5398,12 +5398,6 @@ pmap_map_chunk(vm_offset_t l1pt, vm_offset_t va, vm_offset_t pa,
}
-int
-pmap_dmap_iscurrent(pmap_t pmap)
-{
- return(pmap_is_current(pmap));
-}
-
void
pmap_page_set_memattr(vm_page_t m, vm_memattr_t ma)
{
diff --git a/sys/arm/broadcom/bcm2835/bcm2835_mbox.c b/sys/arm/broadcom/bcm2835/bcm2835_mbox.c
index 5940ad6..78384eb 100644
--- a/sys/arm/broadcom/bcm2835/bcm2835_mbox.c
+++ b/sys/arm/broadcom/bcm2835/bcm2835_mbox.c
@@ -577,7 +577,7 @@ bcm2835_mbox_fb_init(device_t dev, struct bcm2835_fb_config *fb)
fb->xoffset = msg->offset.body.resp.x;
fb->yoffset = msg->offset.body.resp.y;
fb->pitch = msg->pitch.body.resp.pitch;
- fb->base = msg->buffer.body.resp.fb_address;
+ fb->base = VCBUS_TO_PHYS(msg->buffer.body.resp.fb_address);
fb->size = msg->buffer.body.resp.fb_size;
}
diff --git a/sys/arm/broadcom/bcm2835/bcm2835_vcbus.h b/sys/arm/broadcom/bcm2835/bcm2835_vcbus.h
index 7b79b1a..e1d44b3 100644
--- a/sys/arm/broadcom/bcm2835/bcm2835_vcbus.h
+++ b/sys/arm/broadcom/bcm2835/bcm2835_vcbus.h
@@ -67,6 +67,6 @@
* when address is returned by VC over mailbox interface. e.g.
* framebuffer base
*/
-#define VCBUS_TO_PHYS(vca) ((vca) - BCM2835_VCBUS_SDRAM_BASE)
+#define VCBUS_TO_PHYS(vca) ((vca) & ~(BCM2835_VCBUS_SDRAM_BASE))
#endif /* _BCM2835_VCBUS_H_ */
diff --git a/sys/arm/conf/ARMADAXP b/sys/arm/conf/ARMADAXP
index 6d51c16..f1b2776 100644
--- a/sys/arm/conf/ARMADAXP
+++ b/sys/arm/conf/ARMADAXP
@@ -95,6 +95,7 @@ device iicbus
device ether
device mge # Marvell Gigabit Ethernet controller
device mii
+device mdio
device e1000phy
device bpf
options DEVICE_POLLING
diff --git a/sys/arm/conf/DB-78XXX b/sys/arm/conf/DB-78XXX
index e59e426..024593c 100644
--- a/sys/arm/conf/DB-78XXX
+++ b/sys/arm/conf/DB-78XXX
@@ -66,6 +66,7 @@ device uart
device ether
device mge # Marvell Gigabit Ethernet controller
device mii
+device mdio
device e1000phy
device bpf
diff --git a/sys/arm/conf/DB-88F5XXX b/sys/arm/conf/DB-88F5XXX
index f1729f0..5fd96fc 100644
--- a/sys/arm/conf/DB-88F5XXX
+++ b/sys/arm/conf/DB-88F5XXX
@@ -65,6 +65,7 @@ device uart
device ether
device mge # Marvell Gigabit Ethernet controller
device mii
+device mdio
device e1000phy
device bpf
options DEVICE_POLLING
diff --git a/sys/arm/conf/DB-88F6XXX b/sys/arm/conf/DB-88F6XXX
index ec3eff0..c3f238c 100644
--- a/sys/arm/conf/DB-88F6XXX
+++ b/sys/arm/conf/DB-88F6XXX
@@ -67,6 +67,7 @@ device uart
device ether
device mge # Marvell Gigabit Ethernet controller
device mii
+device mdio
device e1000phy
device bpf
diff --git a/sys/arm/conf/DOCKSTAR b/sys/arm/conf/DOCKSTAR
index b00b3bf..d7fa96e 100644
--- a/sys/arm/conf/DOCKSTAR
+++ b/sys/arm/conf/DOCKSTAR
@@ -96,6 +96,7 @@ device uart
# Networking
device mge # Marvell Gigabit Ethernet controller
device mii
+device mdio
device e1000phy
# USB
diff --git a/sys/arm/conf/DREAMPLUG-1001 b/sys/arm/conf/DREAMPLUG-1001
index 3baacaa..3277b43 100644
--- a/sys/arm/conf/DREAMPLUG-1001
+++ b/sys/arm/conf/DREAMPLUG-1001
@@ -100,6 +100,7 @@ device uart
# Networking
device mge # Marvell Gigabit Ethernet controller
device mii
+device mdio
device e1000phy
# USB
diff --git a/sys/arm/conf/EP80219 b/sys/arm/conf/EP80219
deleted file mode 100644
index a744283..0000000
--- a/sys/arm/conf/EP80219
+++ /dev/null
@@ -1,111 +0,0 @@
-# EP80219 -- Custom kernel configuration file for FreeBSD/arm on the EP80219
-#
-# For more information on this file, please read the handbook section on
-# Kernel Configuration Files:
-#
-# http://www.FreeBSD.org/doc/en_US.ISO8859-1/books/handbook/kernelconfig-config.html
-#
-# The handbook is also available locally in /usr/share/doc/handbook
-# if you've installed the doc distribution, otherwise always see the
-# FreeBSD World Wide Web server (http://www.FreeBSD.org/) for the
-# latest information.
-#
-# An exhaustive list of options and more detailed explanations of the
-# device lines is also present in the ../../conf/NOTES and NOTES files.
-# If you are in doubt as to the purpose or necessity of a line, check first
-# in NOTES.
-#
-# $FreeBSD$
-
-ident EP80219
-
-include "std.arm"
-options PHYSADDR=0xa0000000
-options KERNPHYSADDR=0xa0200000
-options KERNVIRTADDR=0xc0200000 # Used in ldscript.arm
-
-#options ARM32_NEW_VM_LAYOUT
-include "../xscale/i80321/std.ep80219"
-makeoptions MODULES_OVERRIDE=""
-
-makeoptions DEBUG=-g # Build kernel with gdb(1) debug symbols
-makeoptions CONF_CFLAGS=-mcpu=xscale
-options HZ=100
-#options DEVICE_POLLING
-
-options SCHED_4BSD # 4BSD scheduler
-options INET # InterNETworking
-#options INET6 # IPv6 communications protocols
-options FFS # Berkeley Fast Filesystem
-options SOFTUPDATES # Enable FFS soft updates support
-options UFS_ACL # Support for access control lists
-options UFS_DIRHASH # Improve performance on big directories
-options NFSCL # Network Filesystem Client
-options NFSD # Network Filesystem Server
-options NFSLOCKD # Network Lock Manager
-options NFS_ROOT # NFS usable as /, requires NFSCL
-options TMPFS # Efficient memory filesystem
-#options MSDOSFS # MSDOS Filesystem
-options CD9660 # ISO 9660 Filesystem
-#options PROCFS # Process filesystem (requires PSEUDOFS)
-options PSEUDOFS # Pseudo-filesystem framework
-options SCSI_DELAY=5000 # Delay (in ms) before probing SCSI
-options KTRACE # ktrace(1) support
-options SYSVSHM # SYSV-style shared memory
-options SYSVMSG # SYSV-style message queues
-options SYSVSEM # SYSV-style semaphores
-options _KPOSIX_PRIORITY_SCHEDULING # Posix P1003_1B real-time extensions
-options KBD_INSTALL_CDEV # install a CDEV entry in /dev
-options GEOM_PART_BSD # BSD partition scheme
-options GEOM_PART_MBR # MBR partition scheme
-options GEOM_PART_GPT # GUID Partition Tables.
-options GEOM_LABEL # Providers labelization.
-
-options BOOTP
-options BOOTP_NFSROOT
-options BOOTP_NFSV3
-options BOOTP_WIRED_TO=fxp0
-options BOOTP_COMPAT
-#options PREEMPTION
-device loop
-device ether
-#device saarm
-device miibus
-device fxp
-device uart
-device pci
-
-device ata
-
-device scbus # SCSI bus (required for ATA/SCSI)
-device cd # CD
-device da # Direct Access (disks)
-device pass # Passthrough device (direct ATA/SCSI access)
-
-# SCSI Controllers
-
-device iopwdog # I80321 Watchdog
-device dma # I80321 DMA Controller
-
-# Debugging for use in -current
-options KDB
-options DDB # Enable the kernel debugger
-#options DEADLKRES # Enable the deadlock resolver
-#options INVARIANTS # Enable calls of extra sanity checking
-#options INVARIANT_SUPPORT # Extra sanity checks of internal structures, required by INVARIANTS
-#options WITNESS # Enable checks to detect deadlocks and cycles
-#options WITNESS_SKIPSPIN # Don't run witness on spinlocks for speed
-#options DIAGNOSTIC
-
-options XSCALE_CACHE_READ_WRITE_ALLOCATE
-device md
-device random # Entropy device
-
-# Floppy drives
-
-options INCLUDE_CONFIG_FILE # Include this file in kernel
-#options VERBOSE_SYSINIT
-options VERBOSE_INIT_ARM
-
-device bpf
-#options ROOTDEVNAME=\"ufs:ada0s1a\"
diff --git a/sys/arm/conf/IQ31244 b/sys/arm/conf/IQ31244
deleted file mode 100644
index 0bb224d..0000000
--- a/sys/arm/conf/IQ31244
+++ /dev/null
@@ -1,110 +0,0 @@
-# IQ31244 -- Custom kernel configuration file for FreeBSD/arm on the IQ31244
-#
-# For more information on this file, please read the handbook section on
-# Kernel Configuration Files:
-#
-# http://www.FreeBSD.org/doc/en_US.ISO8859-1/books/handbook/kernelconfig-config.html
-#
-# The handbook is also available locally in /usr/share/doc/handbook
-# if you've installed the doc distribution, otherwise always see the
-# FreeBSD World Wide Web server (http://www.FreeBSD.org/) for the
-# latest information.
-#
-# An exhaustive list of options and more detailed explanations of the
-# device lines is also present in the ../../conf/NOTES and NOTES files.
-# If you are in doubt as to the purpose or necessity of a line, check first
-# in NOTES.
-#
-# $FreeBSD$
-
-ident IQ31244
-
-include "std.arm"
-options PHYSADDR=0xa0000000
-options KERNPHYSADDR=0xa0200000
-options KERNVIRTADDR=0xc0200000 # Used in ldscript.arm
-options FLASHADDR=0xf0000000
-options LOADERRAMADDR=0x00000000
-
-include "../xscale/i80321/std.iq31244"
-makeoptions MODULES_OVERRIDE=""
-
-#makeoptions DEBUG=-g # Build kernel with gdb(1) debug symbols
-makeoptions CONF_CFLAGS=-mcpu=xscale
-options HZ=100
-#options DEVICE_POLLING
-
-options SCHED_4BSD # 4BSD scheduler
-options INET # InterNETworking
-options INET6 # IPv6 communications protocols
-options FFS # Berkeley Fast Filesystem
-options SOFTUPDATES # Enable FFS soft updates support
-options UFS_ACL # Support for access control lists
-options UFS_DIRHASH # Improve performance on big directories
-options NFSCL # Network Filesystem Client
-options NFSD # Network Filesystem Server
-options NFSLOCKD # Network Lock Manager
-options NFS_ROOT # NFS usable as /, requires NFSCL
-options GEOM_PART_BSD # BSD partition scheme
-options GEOM_PART_MBR # MBR partition scheme
-options TMPFS # Efficient memory filesystem
-#options MSDOSFS # MSDOS Filesystem
-options CD9660 # ISO 9660 Filesystem
-#options PROCFS # Process filesystem (requires PSEUDOFS)
-options PSEUDOFS # Pseudo-filesystem framework
-options SCSI_DELAY=5000 # Delay (in ms) before probing SCSI
-options KTRACE # ktrace(1) support
-options SYSVSHM # SYSV-style shared memory
-options SYSVMSG # SYSV-style message queues
-options SYSVSEM # SYSV-style semaphores
-options _KPOSIX_PRIORITY_SCHEDULING # Posix P1003_1B real-time extensions
-options KBD_INSTALL_CDEV # install a CDEV entry in /dev
-options BOOTP
-options BOOTP_NFSROOT
-options BOOTP_NFSV3
-options BOOTP_WIRED_TO=em0
-options BOOTP_COMPAT
-#options PREEMPTION
-device loop
-device ether
-#device saarm
-device miibus
-device rl
-device em
-device uart
-device pci
-
-device ata
-
-device scbus # SCSI bus (required for ATA/SCSI)
-device cd # CD
-device da # Direct Access (disks)
-device pass # Passthrough device (direct ATA/SCSI access)
-
-# SCSI Controllers
-
-device iopwdog # I80321 Watchdog
-device dma # I80321 DMA Controller
-device aau # I80321 Application Accelerator Unit
-device "iq31244_7seg" # IQ31244 7 seg
-#options AHC_REG_PRETTY_PRINT # Print register bitfields in debug
- # output. Adds ~128k to driver.
-#options AHD_REG_PRETTY_PRINT # Print register bitfields in debug
- # output. Adds ~215k to driver.
-
-# Debugging for use in -current
-options KDB
-options DDB # Enable the kernel debugger
-#options DEADLKRES # Enable the deadlock resolver
-#options INVARIANTS # Enable calls of extra sanity checking
-#options INVARIANT_SUPPORT # Extra sanity checks of internal structures, required by INVARIANTS
-#options WITNESS # Enable checks to detect deadlocks and cycles
-#options WITNESS_SKIPSPIN # Don't run witness on spinlocks for speed
-#options DIAGNOSTIC
-
-options XSCALE_CACHE_READ_WRITE_ALLOCATE
-device md
-device random # Entropy device
-
-# Floppy drives
-
diff --git a/sys/arm/conf/LN2410SBC b/sys/arm/conf/LN2410SBC
deleted file mode 100644
index a154c32..0000000
--- a/sys/arm/conf/LN2410SBC
+++ /dev/null
@@ -1,90 +0,0 @@
-# LN2410SBC -- Custom kernel configuration for the LN2410SBC
-#
-# For more information on this file, please read the handbook section on
-# Kernel Configuration Files:
-#
-# http://www.FreeBSD.org/doc/en_US.ISO8859-1/books/handbook/kernelconfig-config.html
-#
-# The handbook is also available locally in /usr/share/doc/handbook
-# if you've installed the doc distribution, otherwise always see the
-# FreeBSD World Wide Web server (http://www.FreeBSD.org/) for the
-# latest information.
-#
-# An exhaustive list of options and more detailed explanations of the
-# device lines is also present in the ../../conf/NOTES and NOTES files.
-# If you are in doubt as to the purpose or necessity of a line, check first
-# in NOTES.
-#
-# $FreeBSD$
-
-ident LN2410SBC
-
-include "std.arm"
-include "../samsung/s3c2xx0/std.ln2410sbc"
-#To statically compile in device wiring instead of /boot/device.hints
-#hints "GENERIC.hints" # Default places to look for devices.
-makeoptions MODULES_OVERRIDE=""
-
-device board_ln2410sbc
-
-makeoptions DEBUG=-g # Build kernel with gdb(1) debug symbols
-options HZ=100
-options DDB
-options KDB
-
-options SCHED_4BSD # 4BSD scheduler
-options INET # InterNETworking
-#options INET6 # IPv6 communications protocols
-options FFS # Berkeley Fast Filesystem
-#options SOFTUPDATES # Enable FFS soft updates support
-#options UFS_ACL # Support for access control lists
-#options UFS_DIRHASH # Improve performance on big directories
-#options MD_ROOT # MD is a potential root device
-#options MD_ROOT_SIZE=4096 # 4MB ram disk
-options ROOTDEVNAME=\"ufs:da0s1\"
-
-#options BOOTP
-#options BOOTP_NFSROOT # NFS mount root filesystem using BOOTP info
-#options NFSCL # Network Filesystem Client
-#options NFS_ROOT # NFS usable as root device
-
-options GEOM_PART_BSD # BSD partition scheme
-options GEOM_PART_MBR # MBR partition scheme
-options TMPFS # Efficient memory filesystem
-options PSEUDOFS # Pseudo-filesystem framework
-#options SCSI_DELAY=5000 # Delay (in ms) before probing SCSI
-options KTRACE # ktrace(1) support
-options SYSVSHM # SYSV-style shared memory
-options SYSVMSG # SYSV-style message queues
-options SYSVSEM # SYSV-style semaphores
-options _KPOSIX_PRIORITY_SCHEDULING # Posix P1003_1B real-time extensions
-
-options MUTEX_NOINLINE
-options RWLOCK_NOINLINE
-options SX_NOINLINE
-
-options NO_FFS_SNAPSHOT
-options NO_SWAPPING
-device random
-
-device loop
-device ether
-device bpf
-
-device uart
-
-# Debugging for use in -current
-options INVARIANTS # Enable calls of extra sanity checking
-options INVARIANT_SUPPORT # Extra sanity checks of internal structures, required by INVARIANTS
-options WITNESS # Enable checks to detect deadlocks and cycles
-options WITNESS_SKIPSPIN # Don't run witness on spinlocks for speed
-
-device md
-
-options USB_DEBUG # enable debug msgs
-device usb
-device ohci
-device umass
-device scbus # SCSI bus (required for da)
-device da # Direct Access (disks)
-
diff --git a/sys/arm/conf/NOTES b/sys/arm/conf/NOTES
index 9f47b59..238cc1b 100644
--- a/sys/arm/conf/NOTES
+++ b/sys/arm/conf/NOTES
@@ -19,11 +19,6 @@ files "../mv/discovery/files.db78xxx"
files "../mv/kirkwood/files.kirkwood"
files "../mv/orion/files.db88f5xxx"
files "../mv/orion/files.ts7800"
-files "../samsung/s3c2xx0/files.s3c2xx0"
-files "../xscale/i80321/files.ep80219"
-files "../xscale/i80321/files.i80219"
-files "../xscale/i80321/files.i80321"
-files "../xscale/i80321/files.iq31244"
files "../xscale/i8134x/files.crb"
files "../xscale/i8134x/files.i81342"
files "../xscale/ixp425/files.avila"
@@ -58,7 +53,6 @@ device at91_board_sam9x25ek
device at91_board_tsc4370
device at91rm9200
device nand
-device board_ln2410sbc
nooptions SMP
nooptions MAXCPU
diff --git a/sys/arm/conf/SHEEVAPLUG b/sys/arm/conf/SHEEVAPLUG
index 507ba75..5d89c2d 100644
--- a/sys/arm/conf/SHEEVAPLUG
+++ b/sys/arm/conf/SHEEVAPLUG
@@ -60,6 +60,7 @@ device uart
device ether
device mge # Marvell Gigabit Ethernet controller
device mii
+device mdio
device e1000phy
device bpf
options DEVICE_POLLING
diff --git a/sys/arm/conf/TS7800 b/sys/arm/conf/TS7800
index 1a565c4..1b62e59 100644
--- a/sys/arm/conf/TS7800
+++ b/sys/arm/conf/TS7800
@@ -60,6 +60,7 @@ device uart
device ether
device mge # Marvell Gigabit Ethernet controller
device mii
+device mdio
device e1000phy
device bpf
options HZ=1000
diff --git a/sys/arm/include/cpu-v6.h b/sys/arm/include/cpu-v6.h
index e4a8936..6bc9752 100644
--- a/sys/arm/include/cpu-v6.h
+++ b/sys/arm/include/cpu-v6.h
@@ -34,6 +34,7 @@
#error Only include this file in the kernel
#else
+#include <machine/acle-compat.h>
#include "machine/atomic.h"
#include "machine/cpufunc.h"
#include "machine/cpuinfo.h"
@@ -263,6 +264,12 @@ _W64F1(cp15_cnthp_cval_set, CP15_CNTHP_CVAL(%Q0, %R0))
#undef _WF0
#undef _WF1
+#if __ARM_ARCH >= 6
+/*
+ * Cache and TLB maintenance operations for armv6+ code. The #else block
+ * provides armv4/v5 implementations for a few of these used in common code.
+ */
+
/*
* TLB maintenance operations.
*/
@@ -471,6 +478,33 @@ dcache_inv_poc(vm_offset_t va, vm_paddr_t pa, vm_size_t size)
}
/*
+ * Discard D-cache lines to PoC, prior to overwrite by DMA engine.
+ *
+ * Normal invalidation does L2 then L1 to ensure that stale data from L2 doesn't
+ * flow into L1 while invalidating. This routine is intended to be used only
+ * when invalidating a buffer before a DMA operation loads new data into memory.
+ * The concern in this case is that dirty lines are not evicted to main memory,
+ * overwriting the DMA data. For that reason, the L1 is done first to ensure
+ * that an evicted L1 line doesn't flow to L2 after the L2 has been cleaned.
+ */
+static __inline void
+dcache_inv_poc_dma(vm_offset_t va, vm_paddr_t pa, vm_size_t size)
+{
+ vm_offset_t eva = va + size;
+
+ /* invalidate L1 first */
+ dsb();
+ va &= ~cpuinfo.dcache_line_mask;
+ for ( ; va < eva; va += cpuinfo.dcache_line_size) {
+ _CP15_DCIMVAC(va);
+ }
+ dsb();
+
+ /* then L2 */
+ cpu_l2cache_inv_range(pa, size);
+}
+
+/*
* Write back D-cache to PoC
*
* Caches are written back from innermost to outermost as dirty cachelines
@@ -531,6 +565,47 @@ cp15_ttbr_set(uint32_t reg)
tlb_flush_all_ng_local();
}
+#else /* ! __ARM_ARCH >= 6 */
+
+/*
+ * armv4/5 compatibility shims.
+ *
+ * These functions provide armv4 cache maintenance using the new armv6 names.
+ * Included here are just the functions actually used now in common code; it may
+ * be necessary to add things here over time.
+ *
+ * The callers of the dcache functions expect these routines to handle address
+ * and size values which are not aligned to cacheline boundaries; the armv4 and
+ * armv5 asm code handles that.
+ */
+
+static __inline void
+dcache_inv_poc(vm_offset_t va, vm_paddr_t pa, vm_size_t size)
+{
+
+ cpu_dcache_inv_range(va, size);
+ cpu_l2cache_inv_range(va, size);
+}
+
+static __inline void
+dcache_inv_poc_dma(vm_offset_t va, vm_paddr_t pa, vm_size_t size)
+{
+
+ /* See armv6 code, above, for why we do L2 before L1 in this case. */
+ cpu_l2cache_inv_range(va, size);
+ cpu_dcache_inv_range(va, size);
+}
+
+static __inline void
+dcache_wb_poc(vm_offset_t va, vm_paddr_t pa, vm_size_t size)
+{
+
+ cpu_dcache_wb_range(va, size);
+ cpu_l2cache_wb_range(va, size);
+}
+
+#endif /* __ARM_ARCH >= 6 */
+
#endif /* _KERNEL */
#endif /* !MACHINE_CPU_V6_H */
diff --git a/sys/arm/include/cpuinfo.h b/sys/arm/include/cpuinfo.h
index ce0d8e6..210e432 100644
--- a/sys/arm/include/cpuinfo.h
+++ b/sys/arm/include/cpuinfo.h
@@ -32,6 +32,23 @@
#include <sys/types.h>
+#define CPU_IMPLEMENTER_ARM 0x41
+#define CPU_IMPLEMENTER_QCOM 0x51
+#define CPU_IMPLEMENTER_MRVL 0x56
+
+/* ARM */
+#define CPU_ARCH_ARM1176 0xB76
+#define CPU_ARCH_CORTEX_A5 0xC05
+#define CPU_ARCH_CORTEX_A7 0xC07
+#define CPU_ARCH_CORTEX_A8 0xC08
+#define CPU_ARCH_CORTEX_A9 0xC09
+#define CPU_ARCH_CORTEX_A12 0xC0D
+#define CPU_ARCH_CORTEX_A15 0xC0F
+#define CPU_ARCH_CORTEX_A17 0xC11
+
+/* QCOM */
+#define CPU_ARCH_KRAIT_300 0x06F
+
struct cpuinfo {
/* raw id registers */
uint32_t midr;
@@ -93,5 +110,5 @@ struct cpuinfo {
extern struct cpuinfo cpuinfo;
void cpuinfo_init(void);
-
+void cpuinfo_get_actlr_modifier(uint32_t *actlr_mask, uint32_t *actlr_set);
#endif /* _MACHINE_CPUINFO_H_ */
diff --git a/sys/arm/include/pmap-v6.h b/sys/arm/include/pmap-v6.h
index 304dec6..ef6758d 100644
--- a/sys/arm/include/pmap-v6.h
+++ b/sys/arm/include/pmap-v6.h
@@ -265,11 +265,6 @@ void pmap_devmap_bootstrap(const struct pmap_devmap *);
#define PMAP_DOMAIN_KERNEL 0 /* The kernel uses domain #0 */
/*
- * sys/arm/arm/busdma_machdep-v6.c
- */
-int pmap_dmap_iscurrent(pmap_t pmap);
-
-/*
* sys/arm/arm/cpufunc.c
*/
void pmap_pte_init_mmu_v6(void);
diff --git a/sys/arm/include/pmap.h b/sys/arm/include/pmap.h
index c42a36f..923301f 100644
--- a/sys/arm/include/pmap.h
+++ b/sys/arm/include/pmap.h
@@ -277,7 +277,6 @@ void
pmap_map_entry(vm_offset_t l1pt, vm_offset_t va, vm_offset_t pa, int prot,
int cache);
int pmap_fault_fixup(pmap_t, vm_offset_t, vm_prot_t, int);
-int pmap_dmap_iscurrent(pmap_t pmap);
/*
* Definitions for MMU domains
diff --git a/sys/arm/samsung/s3c2xx0/files.s3c2xx0 b/sys/arm/samsung/s3c2xx0/files.s3c2xx0
deleted file mode 100644
index 7748c4f..0000000
--- a/sys/arm/samsung/s3c2xx0/files.s3c2xx0
+++ /dev/null
@@ -1,14 +0,0 @@
-# $FreeBSD$
-arm/arm/bus_space_base.c standard
-arm/arm/bus_space_asm_generic.S standard
-arm/arm/bus_space_generic.c standard
-arm/samsung/s3c2xx0/board_ln2410sbc.c optional board_ln2410sbc
-arm/samsung/s3c2xx0/s3c24x0_rtc.c standard
-arm/samsung/s3c2xx0/s3c24x0_machdep.c standard
-arm/samsung/s3c2xx0/s3c24x0.c standard
-arm/samsung/s3c2xx0/s3c24x0_clk.c standard
-arm/samsung/s3c2xx0/uart_bus_s3c2410.c optional uart
-arm/samsung/s3c2xx0/uart_cpu_s3c2410.c optional uart
-arm/samsung/s3c2xx0/uart_dev_s3c2410.c optional uart
-
-dev/usb/controller/ohci_s3c24x0.c optional ohci
diff --git a/sys/arm/samsung/s3c2xx0/s3c2410reg.h b/sys/arm/samsung/s3c2xx0/s3c2410reg.h
deleted file mode 100644
index e13ee3c..0000000
--- a/sys/arm/samsung/s3c2xx0/s3c2410reg.h
+++ /dev/null
@@ -1,96 +0,0 @@
-/* $NetBSD: s3c2410reg.h,v 1.6 2004/02/12 03:52:46 bsh Exp $ */
-
-/*-
- * Copyright (c) 2003, 2004 Genetec corporation. All rights reserved.
- * Written by Hiroyuki Bessho for Genetec corporation.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. The name of Genetec corporation may not be used to endorse
- * or promote products derived from this software without specific prior
- * written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY GENETEC CORP. ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GENETEC CORP.
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- *
- * $FreeBSD$
- */
-
-
-/*
- * Samsung S3C2410X processor is ARM920T based integrated CPU
- *
- * Reference:
- * S3C2410X User's Manual
- */
-#ifndef _ARM_S3C2XX0_S3C2410REG_H_
-#define _ARM_S3C2XX0_S3C2410REG_H_
-
-/* common definitions for S3C2410 and S3C2440 */
-#include <arm/samsung/s3c2xx0/s3c24x0reg.h>
-
-/*
- * Memory Map
- */
-#define S3C2410_BANK_SIZE 0x08000000
-#define S3C2410_BANK_START(n) (S3C2410_BANK_SIZE*(n))
-#define S3C2410_SDRAM_START S3C2410_BANK_START(6)
-
-
-/* interrupt control */
-#define S3C2410_SUBIRQ_MAX (S3C24X0_SUBIRQ_MIN+10)
-
-/* Clock control */
-/* CLKMAN_CLKCON */
-#define S3C2410_CLKCON_SM (1<<0) /* 1=transition to SPECIAL mode */
-/* CLKMAN_CLKDIVN */
-#define S3C2410_CLKDIVN_HDIVN (1<<1) /* hclk=fclk/2 */
-
-/* NAND Flash controller */
-#define S3C2410_NANDFC_SIZE 0x18
-/* NANDFC_NFCONF */
-#define S3C2410_NFCONF_ENABLE (1<<15) /* NAND controller enabled */
-#define S3C2410_NFCONF_ECC (1<<12) /* Initialize ECC decoder/encoder */
-#define S3C2410_NFCONF_FCE (1<<11) /* Flash chip enabled */
-#define S3C2410_NFCONF_TACLS (7<<8) /* CLE and ALE duration */
-#define S3C2410_NFCONF_TWRPH0 (7<<4) /* TWRPH0 duration */
-#define S3C2410_NFCONF_TWRPH1 (7<<0) /* TWRPH1 duration */
-#define S3C2410_NANDFC_NFCMD 0x04 /* command */
-#define S3C2410_NANDFC_NFADDR 0x08 /* address */
-#define S3C2410_NANDFC_NFDATA 0x0c /* data */
-#define S3C2410_NANDFC_NFSTAT 0x10 /* operation status */
-#define S3C2410_NANDFC_NFECC 0x14 /* ecc */
-
-/* MMC/SD */
-/* SDI_CON */
-#define S3C2410_CON_FIFO_RESET (1<<1)
-
-/* GPIO */
-#define S3C2410_GPIO_SIZE 0xb4
-
-/* SD interface */
-#define S3C2410_SDI_SIZE 0x44
-#define DCON_STOP (1<<14) /* Force the transfer to stop */
-#define S3C2410_SDI_DAT 0x3c
-#define S3C2410_SDI_IMSK 0x40 /* Interrupt mask */
-#define S3C2410_SDI_IMASK_ALL 0x3ffdf
-
-/* ADC */
-#define S3C2410_ADC_SIZE 0x14
-
-#endif /* _ARM_S3C2XX0_S3C2410REG_H_ */
diff --git a/sys/arm/samsung/s3c2xx0/s3c2410var.h b/sys/arm/samsung/s3c2xx0/s3c2410var.h
deleted file mode 100644
index 1ce9b99..0000000
--- a/sys/arm/samsung/s3c2xx0/s3c2410var.h
+++ /dev/null
@@ -1,49 +0,0 @@
-/* $NetBSD: s3c2410var.h,v 1.2 2003/08/29 12:57:50 bsh Exp $ */
-
-/*-
- * Copyright (c) 2003 Genetec corporation. All rights reserved.
- * Written by Hiroyuki Bessho for Genetec corporation.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. The name of Genetec corporation may not be used to endorse
- * or promote products derived from this software without specific prior
- * written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY GENETEC CORP. ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GENETEC CORP.
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- *
- * $FreeBSD$
- */
-
-#ifndef _ARM_S3C2410VAR_H_
-#define _ARM_S3C2410VAR_H_
-
-#include <arm/samsung/s3c2xx0/s3c24x0var.h>
-
-int s3c2410_sscom_cnattach(bus_space_tag_t, int, int, int, tcflag_t);
-int s3c2410_sscom_kgdb_attach(bus_space_tag_t, int, int, int, tcflag_t);
-void s3c2410_intr_init(struct s3c24x0_softc *);
-void s3c2410_softreset(void);
-
-void s3c2410_mask_subinterrupts(int);
-void s3c2410_unmask_subinterrupts(int);
-
-void *s3c2410_extint_establish(int, int, int, int (*)(void *), void *);
-void s3c2410_setup_extint(int, int);
-#endif /* _ARM_S3C2410VAR_H_ */
diff --git a/sys/arm/samsung/s3c2xx0/s3c2440reg.h b/sys/arm/samsung/s3c2xx0/s3c2440reg.h
deleted file mode 100644
index 2304b69..0000000
--- a/sys/arm/samsung/s3c2xx0/s3c2440reg.h
+++ /dev/null
@@ -1,109 +0,0 @@
-/*-
- * Copyright (C) 2009 Andrew Turner
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * $FreeBSD$
- */
-
-/*
- * Samsung S3C2440X processor is ARM920T based integrated CPU
- *
- * Reference:
- * S3C2440A/S3C2442B User's Manual
- */
-#ifndef _ARM_S3C2XX0_S3C2440REG_H_
-#define _ARM_S3C2XX0_S3C2440REG_H_
-
-/* common definitions for S3C2410 and S3C2440 */
-#include <arm/samsung/s3c2xx0/s3c24x0reg.h>
-
-/*
- * Memory Map
- */
-#define S3C2440_BANK_SIZE 0x08000000
-#define S3C2440_BANK_START(n) (S3C2410_BANK_SIZE*(n))
-#define S3C2440_SDRAM_START S3C2410_BANK_START(6)
-
-
-/* interrupt control */
-#define S3C2440_SUBIRQ_MAX (S3C24X0_SUBIRQ_MIN+10)
-
-/* Clock control */
-/* CLKMAN_CLKCON */
-#define S3C2440_CLKCON_STOP (1<<0) /* 1=transition to STOP mode */
-/* CLKMAN_CLKDIVN */
-#define S3C2440_CLKDIVN_HDIVN (3<<1) /* hclk */
-#define S3C2440_CLKMAN_CAMDIVN 0x18
-#define S3C2440_CAMDIVN_HCLK4_HALF (1<<9)
-#define S3C2440_CAMDIVN_HCLK3_HALF (1<<8)
-
-/* NAND Flash controller */
-#define S3C2440_NANDFC_SIZE 0x40
-
-#define S3C2440_NANDFC_NFCONT 0x04
-#define S3C2440_NFCONT_LOCK_TIGHT (1<<13) /* Lock part of the NAND */
-#define S3C2440_NFCONT_SOFT_LOCK (1<<12) /* Soft lock part of the NAND */
-#define S3C2440_NFCONT_ILLEGAL_ACC_INT (1<<10) /* Illegal access interrupt */
-#define S3C2440_NFCONT_RNB_INT (1<<9) /* RnB transition interrupt */
-#define S3C2440_NFCONT_RNB_TRANS_MODE (1<<8) /* RnB transition mode */
-#define S3C2440_NFCONT_SPARE_ECC_LOCK (1<<6) /* Lock spare ECC generation */
-#define S3C2440_NFCONT_MAIN_ECC_LOCK (1<<5) /* Lock main ECC generation */
-#define S3C2440_NFCONT_INIT_ECC (1<<4) /* Init ECC encoder/decoder */
-#define S3C2440_NFCONT_NCE (1<<1) /* NAND Chip select */
-#define S3C2440_NFCONT_ENABLE (1<<0) /* Enable the controller */
-#define S3C2440_NANDFC_NFCMMD 0x08
-#define S3C2440_NANDFC_NFADDR 0x0c
-#define S3C2440_NANDFC_NFDATA 0x10
-#define S3C2440_NANDFC_NFSTAT 0x20
-
-/* MMC/SD */
-/* SDI_CON */
-#define S3C2440_CON_RESET (1<<8)
-#define S3C2440_CON_CLOCK_TYPE (1<<5)
-/* SDI_FSTA */
-#define S3c2440_FSTA_RESET (1<<16)
-#define S3C2440_FSTA_FAIL_ERROR_MSK (3<<14)
-#define S3C2440_FSTA_FAIL_NONE (0<<14)
-#define S3C2440_FSTA_FAIL_FIFO (1<<14)
-#define S3C2440_FSTA_FAIL_LAST_TRANS (2<<14)
-
-/* GPIO */
-#define S3C2440_GPIO_SIZE 0xd0
-
-/* SD interface */
-#define S3C2410_SDI_SIZE 0x44
-#define DCON_START (1<<14) /* Start the data transfer */
-#define S3C2440_SDI_IMSK 0x3c /* Interrupt mask */
-#define S3C2440_SDI_IMASK_ALL 0x3C7C0
-#define S3C2440_SDI_DAT 0x40
-
-/* ADC */
-#define ADCTSC_UD_SEN (1<<8)
-#define S3C2440_ADC_SIZE 0x18
-
-/* UART */
-#define S3C2440_UFSTAT_TXCOUNT (0x3f << 8)
-#define S3C2440_UFSTAT_RXCOUNT (0x3f << 0)
-
-#endif /* _ARM_S3C2XX0_S3C2440REG_H_ */
diff --git a/sys/arm/samsung/s3c2xx0/s3c24x0.c b/sys/arm/samsung/s3c2xx0/s3c24x0.c
deleted file mode 100644
index 845651f..0000000
--- a/sys/arm/samsung/s3c2xx0/s3c24x0.c
+++ /dev/null
@@ -1,802 +0,0 @@
-/* $NetBSD: s3c2410.c,v 1.4 2003/08/27 03:46:05 bsh Exp $ */
-
-/*
- * Copyright (c) 2003 Genetec corporation. All rights reserved.
- * Written by Hiroyuki Bessho for Genetec corporation.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. The name of Genetec corporation may not be used to endorse
- * or promote products derived from this software without specific prior
- * written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY GENETEC CORP. ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GENETEC CORP.
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
-#include <sys/param.h>
-#include <sys/systm.h>
-#include <sys/kernel.h>
-#include <sys/reboot.h>
-#include <sys/malloc.h>
-#include <sys/module.h>
-#include <sys/bus.h>
-
-#include <vm/vm.h>
-#include <vm/pmap.h>
-
-#include <machine/armreg.h>
-#include <machine/cpu.h>
-#include <machine/bus.h>
-
-#include <machine/cpufunc.h>
-#include <machine/intr.h>
-#include <arm/samsung/s3c2xx0/s3c2410reg.h>
-#include <arm/samsung/s3c2xx0/s3c2440reg.h>
-#include <arm/samsung/s3c2xx0/s3c24x0var.h>
-#include <sys/rman.h>
-
-#define S3C2XX0_XTAL_CLK 12000000
-
-bus_space_tag_t s3c2xx0_bs_tag;
-
-#define IPL_LEVELS 13
-u_int irqmasks[IPL_LEVELS];
-
-static struct {
- uint32_t idcode;
- const char *name;
- s3c2xx0_cpu cpu;
-} s3c2x0_cpu_id[] = {
- { CHIPID_S3C2410A, "S3C2410A", CPU_S3C2410 },
- { CHIPID_S3C2440A, "S3C2440A", CPU_S3C2440 },
- { CHIPID_S3C2442B, "S3C2442B", CPU_S3C2440 },
-
- { 0, NULL }
-};
-
-static struct {
- const char *name;
- int prio;
- int unit;
- struct {
- int type;
- u_long start;
- u_long count;
- } res[2];
-} s3c24x0_children[] = {
- { "rtc", 0, -1, {
- { SYS_RES_IOPORT, S3C24X0_RTC_PA_BASE, S3C24X0_RTC_SIZE },
- { 0 },
- } },
- { "timer", 0, -1, { { 0 }, } },
- { "uart", 1, 0, {
- { SYS_RES_IRQ, S3C24X0_INT_UART0, 1 },
- { SYS_RES_IOPORT, S3C24X0_UART_PA_BASE(0),
- S3C24X0_UART_BASE(1) - S3C24X0_UART_BASE(0) },
- } },
- { "uart", 1, 1, {
- { SYS_RES_IRQ, S3C24X0_INT_UART1, 1 },
- { SYS_RES_IOPORT, S3C24X0_UART_PA_BASE(1),
- S3C24X0_UART_BASE(2) - S3C24X0_UART_BASE(1) },
- } },
- { "uart", 1, 2, {
- { SYS_RES_IRQ, S3C24X0_INT_UART2, 1 },
- { SYS_RES_IOPORT, S3C24X0_UART_PA_BASE(2),
- S3C24X0_UART_BASE(3) - S3C24X0_UART_BASE(2) },
- } },
- { "ohci", 0, -1, {
- { SYS_RES_IRQ, S3C24X0_INT_USBH, 0 },
- { SYS_RES_IOPORT, S3C24X0_USBHC_PA_BASE, S3C24X0_USBHC_SIZE },
- } },
- { NULL },
-};
-
-
-/* prototypes */
-static device_t s3c24x0_add_child(device_t, int, const char *, int);
-
-static int s3c24x0_probe(device_t);
-static int s3c24x0_attach(device_t);
-static void s3c24x0_identify(driver_t *, device_t);
-static int s3c24x0_setup_intr(device_t, device_t, struct resource *, int,
- driver_filter_t *, driver_intr_t *, void *, void **);
-static int s3c24x0_teardown_intr(device_t, device_t, struct resource *,
- void *);
-static int s3c24x0_config_intr(device_t, int, enum intr_trigger,
- enum intr_polarity);
-static struct resource *s3c24x0_alloc_resource(device_t, device_t, int, int *,
- u_long, u_long, u_long, u_int);
-static int s3c24x0_activate_resource(device_t, device_t, int, int,
- struct resource *);
-static int s3c24x0_release_resource(device_t, device_t, int, int,
- struct resource *);
-static struct resource_list *s3c24x0_get_resource_list(device_t, device_t);
-
-static void s3c24x0_identify_cpu(device_t);
-
-static device_method_t s3c24x0_methods[] = {
- DEVMETHOD(device_probe, s3c24x0_probe),
- DEVMETHOD(device_attach, s3c24x0_attach),
- DEVMETHOD(device_identify, s3c24x0_identify),
- DEVMETHOD(bus_setup_intr, s3c24x0_setup_intr),
- DEVMETHOD(bus_teardown_intr, s3c24x0_teardown_intr),
- DEVMETHOD(bus_config_intr, s3c24x0_config_intr),
- DEVMETHOD(bus_alloc_resource, s3c24x0_alloc_resource),
- DEVMETHOD(bus_activate_resource, s3c24x0_activate_resource),
- DEVMETHOD(bus_release_resource, s3c24x0_release_resource),
- DEVMETHOD(bus_get_resource_list,s3c24x0_get_resource_list),
- DEVMETHOD(bus_set_resource, bus_generic_rl_set_resource),
- DEVMETHOD(bus_get_resource, bus_generic_rl_get_resource),
- {0, 0},
-};
-
-static driver_t s3c24x0_driver = {
- "s3c24x0",
- s3c24x0_methods,
- sizeof(struct s3c24x0_softc),
-};
-static devclass_t s3c24x0_devclass;
-
-DRIVER_MODULE(s3c24x0, nexus, s3c24x0_driver, s3c24x0_devclass, 0, 0);
-
-struct s3c2xx0_softc *s3c2xx0_softc = NULL;
-
-static device_t
-s3c24x0_add_child(device_t bus, int prio, const char *name, int unit)
-{
- device_t child;
- struct s3c2xx0_ivar *ivar;
-
- child = device_add_child_ordered(bus, prio, name, unit);
- if (child == NULL)
- return (NULL);
-
- ivar = malloc(sizeof(*ivar), M_DEVBUF, M_NOWAIT | M_ZERO);
- if (ivar == NULL) {
- device_delete_child(bus, child);
- printf("Can't add alloc ivar\n");
- return (NULL);
- }
- device_set_ivars(child, ivar);
- resource_list_init(&ivar->resources);
-
- return (child);
-}
-
-static void
-s3c24x0_enable_ext_intr(unsigned int irq)
-{
- uint32_t reg, value;
- int offset;
-
- if (irq <= 7) {
- reg = GPIO_PFCON;
- offset = irq * 2;
- } else if (irq <= 23) {
- reg = GPIO_PGCON;
- offset = (irq - 8) * 2;
- } else
- return;
-
- /* Make the pin an interrupt source */
- value = bus_space_read_4(s3c2xx0_softc->sc_iot,
- s3c2xx0_softc->sc_gpio_ioh, reg);
- value &= ~(3 << offset);
- value |= 2 << offset;
- bus_space_write_4(s3c2xx0_softc->sc_iot, s3c2xx0_softc->sc_gpio_ioh,
- reg, value);
-}
-
-static int
-s3c24x0_setup_intr(device_t dev, device_t child,
- struct resource *ires, int flags, driver_filter_t *filt,
- driver_intr_t *intr, void *arg, void **cookiep)
-{
- int error, irq;
-
- error = BUS_SETUP_INTR(device_get_parent(dev), child, ires, flags, filt,
- intr, arg, cookiep);
- if (error != 0)
- return (error);
-
- for (irq = rman_get_start(ires); irq <= rman_get_end(ires); irq++) {
- if (irq >= S3C24X0_EXTIRQ_MIN && irq <= S3C24X0_EXTIRQ_MAX) {
- /* Enable the external interrupt pin */
- s3c24x0_enable_ext_intr(irq - S3C24X0_EXTIRQ_MIN);
- }
- }
- return (0);
-}
-
-static int
-s3c24x0_teardown_intr(device_t dev, device_t child, struct resource *res,
- void *cookie)
-{
- return (BUS_TEARDOWN_INTR(device_get_parent(dev), child, res, cookie));
-}
-
-static int
-s3c24x0_config_intr(device_t dev, int irq, enum intr_trigger trig,
- enum intr_polarity pol)
-{
- uint32_t mask, reg, value;
- int offset;
-
- /* Only external interrupts can be configured */
- if (irq < S3C24X0_EXTIRQ_MIN || irq > S3C24X0_EXTIRQ_MAX)
- return (EINVAL);
-
- /* There is no standard trigger or polarity for the bus */
- if (trig == INTR_TRIGGER_CONFORM || pol == INTR_POLARITY_CONFORM)
- return (EINVAL);
-
- irq -= S3C24X0_EXTIRQ_MIN;
-
- /* Get the bits to set */
- mask = 0;
- if (pol == INTR_POLARITY_LOW) {
- mask = 2;
- } else if (pol == INTR_POLARITY_HIGH) {
- mask = 4;
- }
- if (trig == INTR_TRIGGER_LEVEL) {
- mask >>= 2;
- }
-
- /* Get the register to set */
- if (irq <= 7) {
- reg = GPIO_EXTINT(0);
- offset = irq * 4;
- } else if (irq <= 15) {
- reg = GPIO_EXTINT(1);
- offset = (irq - 8) * 4;
- } else if (irq <= 23) {
- reg = GPIO_EXTINT(2);
- offset = (irq - 16) * 4;
- } else {
- return (EINVAL);
- }
-
- /* Set the new signaling method */
- value = bus_space_read_4(s3c2xx0_softc->sc_iot,
- s3c2xx0_softc->sc_gpio_ioh, reg);
- value &= ~(7 << offset);
- value |= mask << offset;
- bus_space_write_4(s3c2xx0_softc->sc_iot,
- s3c2xx0_softc->sc_gpio_ioh, reg, value);
-
- return (0);
-}
-
-static struct resource *
-s3c24x0_alloc_resource(device_t bus, device_t child, int type, int *rid,
- u_long start, u_long end, u_long count, u_int flags)
-{
- struct resource_list_entry *rle;
- struct s3c2xx0_ivar *ivar = device_get_ivars(child);
- struct resource_list *rl = &ivar->resources;
- struct resource *res = NULL;
-
- if (device_get_parent(child) != bus)
- return (BUS_ALLOC_RESOURCE(device_get_parent(bus), child,
- type, rid, start, end, count, flags));
-
- rle = resource_list_find(rl, type, *rid);
- if (rle != NULL) {
- /* There is a resource list. Use it */
- if (rle->res)
- panic("Resource rid %d type %d already in use", *rid,
- type);
- if (start == 0UL && end == ~0UL) {
- start = rle->start;
- count = ulmax(count, rle->count);
- end = ulmax(rle->end, start + count - 1);
- }
- /*
- * When allocating an irq with children irq's really
- * allocate the children as it is those we are interested
- * in receiving, not the parent.
- */
- if (type == SYS_RES_IRQ && start == end) {
- switch (start) {
- case S3C24X0_INT_ADCTC:
- start = S3C24X0_INT_TC;
- end = S3C24X0_INT_ADC;
- break;
-#ifdef S3C2440_INT_CAM
- case S3C2440_INT_CAM:
- start = S3C2440_INT_CAM_C;
- end = S3C2440_INT_CAM_P;
- break;
-#endif
- default:
- break;
- }
- count = end - start + 1;
- }
- }
-
- switch (type) {
- case SYS_RES_IRQ:
- res = rman_reserve_resource(
- &s3c2xx0_softc->s3c2xx0_irq_rman, start, end,
- count, flags, child);
- break;
-
- case SYS_RES_IOPORT:
- case SYS_RES_MEMORY:
- res = rman_reserve_resource(
- &s3c2xx0_softc->s3c2xx0_mem_rman,
- start, end, count, flags, child);
- if (res == NULL)
- panic("Unable to map address space %#lX-%#lX", start,
- end);
-
- rman_set_bustag(res, s3c2xx0_bs_tag);
- rman_set_bushandle(res, start);
- if (flags & RF_ACTIVE) {
- if (bus_activate_resource(child, type, *rid, res)) {
- rman_release_resource(res);
- return (NULL);
- }
- }
- break;
- }
-
- if (res != NULL) {
- rman_set_rid(res, *rid);
- if (rle != NULL) {
- rle->res = res;
- rle->start = rman_get_start(res);
- rle->end = rman_get_end(res);
- rle->count = count;
- }
- }
-
- return (res);
-}
-
-static int
-s3c24x0_activate_resource(device_t bus, device_t child, int type, int rid,
- struct resource *r)
-{
- bus_space_handle_t p;
- int error;
-
- if (type == SYS_RES_MEMORY || type == SYS_RES_IOPORT) {
- error = bus_space_map(rman_get_bustag(r),
- rman_get_bushandle(r), rman_get_size(r), 0, &p);
- if (error)
- return (error);
- rman_set_bushandle(r, p);
- }
- return (rman_activate_resource(r));
-}
-
-static int
-s3c24x0_release_resource(device_t bus, device_t child, int type, int rid,
- struct resource *r)
-{
- struct s3c2xx0_ivar *ivar = device_get_ivars(child);
- struct resource_list *rl = &ivar->resources;
- struct resource_list_entry *rle;
-
- if (rl == NULL)
- return (EINVAL);
-
- rle = resource_list_find(rl, type, rid);
- if (rle == NULL)
- return (EINVAL);
-
- rman_release_resource(r);
- rle->res = NULL;
-
- return 0;
-}
-
-static struct resource_list *
-s3c24x0_get_resource_list(device_t dev, device_t child)
-{
- struct s3c2xx0_ivar *ivar;
-
- ivar = device_get_ivars(child);
- return (&(ivar->resources));
-}
-
-void
-s3c24x0_identify(driver_t *driver, device_t parent)
-{
-
- BUS_ADD_CHILD(parent, 0, "s3c24x0", 0);
-}
-
-int
-s3c24x0_probe(device_t dev)
-{
- return (BUS_PROBE_NOWILDCARD);
-}
-
-int
-s3c24x0_attach(device_t dev)
-{
- struct s3c24x0_softc *sc = device_get_softc(dev);
- bus_space_tag_t iot;
- device_t child;
- unsigned int i, j;
- u_long irqmax;
-
- s3c2xx0_bs_tag = arm_base_bs_tag;
- s3c2xx0_softc = &(sc->sc_sx);
- sc->sc_sx.sc_iot = iot = s3c2xx0_bs_tag;
- s3c2xx0_softc->s3c2xx0_irq_rman.rm_type = RMAN_ARRAY;
- s3c2xx0_softc->s3c2xx0_irq_rman.rm_descr = "S3C24X0 IRQs";
- s3c2xx0_softc->s3c2xx0_mem_rman.rm_type = RMAN_ARRAY;
- s3c2xx0_softc->s3c2xx0_mem_rman.rm_descr = "S3C24X0 Device Registers";
- /* Manage the registor memory space */
- if ((rman_init(&s3c2xx0_softc->s3c2xx0_mem_rman) != 0) ||
- (rman_manage_region(&s3c2xx0_softc->s3c2xx0_mem_rman,
- S3C24X0_DEV_VA_OFFSET,
- S3C24X0_DEV_VA_OFFSET + S3C24X0_DEV_VA_SIZE) != 0) ||
- (rman_manage_region(&s3c2xx0_softc->s3c2xx0_mem_rman,
- S3C24X0_DEV_START, S3C24X0_DEV_STOP) != 0))
- panic("s3c24x0_attach: failed to set up register rman");
-
- /* These are needed for things without a proper device to attach to */
- sc->sc_sx.sc_intctl_ioh = S3C24X0_INTCTL_BASE;
- sc->sc_sx.sc_gpio_ioh = S3C24X0_GPIO_BASE;
- sc->sc_sx.sc_clkman_ioh = S3C24X0_CLKMAN_BASE;
- sc->sc_sx.sc_wdt_ioh = S3C24X0_WDT_BASE;
- sc->sc_timer_ioh = S3C24X0_TIMER_BASE;
-
- /*
- * Identify the CPU
- */
- s3c24x0_identify_cpu(dev);
-
- /*
- * Manage the interrupt space.
- * We need to put this after s3c24x0_identify_cpu as the avaliable
- * interrupts change depending on which CPU we have.
- */
- if (sc->sc_sx.sc_cpu == CPU_S3C2410)
- irqmax = S3C2410_SUBIRQ_MAX;
- else
- irqmax = S3C2440_SUBIRQ_MAX;
- if (rman_init(&s3c2xx0_softc->s3c2xx0_irq_rman) != 0 ||
- rman_manage_region(&s3c2xx0_softc->s3c2xx0_irq_rman, 0,
- irqmax) != 0 ||
- rman_manage_region(&s3c2xx0_softc->s3c2xx0_irq_rman,
- S3C24X0_EXTIRQ_MIN, S3C24X0_EXTIRQ_MAX))
- panic("s3c24x0_attach: failed to set up IRQ rman");
-
- /* calculate current clock frequency */
- s3c24x0_clock_freq(&sc->sc_sx);
- device_printf(dev, "fclk %d MHz hclk %d MHz pclk %d MHz\n",
- sc->sc_sx.sc_fclk / 1000000, sc->sc_sx.sc_hclk / 1000000,
- sc->sc_sx.sc_pclk / 1000000);
-
- /*
- * Attach children devices
- */
-
- for (i = 0; s3c24x0_children[i].name != NULL; i++) {
- child = s3c24x0_add_child(dev, s3c24x0_children[i].prio,
- s3c24x0_children[i].name, s3c24x0_children[i].unit);
- for (j = 0; j < sizeof(s3c24x0_children[i].res) /
- sizeof(s3c24x0_children[i].res[0]) &&
- s3c24x0_children[i].res[j].type != 0; j++) {
- bus_set_resource(child,
- s3c24x0_children[i].res[j].type, 0,
- s3c24x0_children[i].res[j].start,
- s3c24x0_children[i].res[j].count);
- }
- }
-
- bus_generic_probe(dev);
- bus_generic_attach(dev);
-
- return (0);
-}
-
-static void
-s3c24x0_identify_cpu(device_t dev)
-{
- struct s3c24x0_softc *sc = device_get_softc(dev);
- uint32_t idcode;
- int i;
-
- idcode = bus_space_read_4(sc->sc_sx.sc_iot, sc->sc_sx.sc_gpio_ioh,
- GPIO_GSTATUS1);
-
- for (i = 0; s3c2x0_cpu_id[i].name != NULL; i++) {
- if (s3c2x0_cpu_id[i].idcode == idcode)
- break;
- }
- if (s3c2x0_cpu_id[i].name == NULL)
- panic("Unknown CPU detected ((Chip ID: %#X)", idcode);
- device_printf(dev, "Found %s CPU (Chip ID: %#X)\n",
- s3c2x0_cpu_id[i].name, idcode);
- sc->sc_sx.sc_cpu = s3c2x0_cpu_id[i].cpu;
-}
-
-/*
- * fill sc_pclk, sc_hclk, sc_fclk from values of clock controller register.
- *
- * s3c24{1,4}0_clock_freq2() is meant to be called from kernel startup routines.
- * s3c24x0_clock_freq() is for after kernel initialization is done.
- *
- * Because they can be called before bus_space is available we need to use
- * volatile pointers rather than bus_space_read.
- */
-void
-s3c2410_clock_freq2(vm_offset_t clkman_base, int *fclk, int *hclk, int *pclk)
-{
- uint32_t pllcon, divn;
- unsigned int mdiv, pdiv, sdiv;
- unsigned int f, h, p;
-
- pllcon = *(volatile uint32_t *)(clkman_base + CLKMAN_MPLLCON);
- divn = *(volatile uint32_t *)(clkman_base + CLKMAN_CLKDIVN);
-
- mdiv = (pllcon & PLLCON_MDIV_MASK) >> PLLCON_MDIV_SHIFT;
- pdiv = (pllcon & PLLCON_PDIV_MASK) >> PLLCON_PDIV_SHIFT;
- sdiv = (pllcon & PLLCON_SDIV_MASK) >> PLLCON_SDIV_SHIFT;
-
- f = ((mdiv + 8) * S3C2XX0_XTAL_CLK) / ((pdiv + 2) * (1 << sdiv));
- h = f;
- if (divn & S3C2410_CLKDIVN_HDIVN)
- h /= 2;
- p = h;
- if (divn & CLKDIVN_PDIVN)
- p /= 2;
-
- if (fclk) *fclk = f;
- if (hclk) *hclk = h;
- if (pclk) *pclk = p;
-}
-
-void
-s3c2440_clock_freq2(vm_offset_t clkman_base, int *fclk, int *hclk, int *pclk)
-{
- uint32_t pllcon, divn, camdivn;
- unsigned int mdiv, pdiv, sdiv;
- unsigned int f, h, p;
-
- pllcon = *(volatile uint32_t *)(clkman_base + CLKMAN_MPLLCON);
- divn = *(volatile uint32_t *)(clkman_base + CLKMAN_CLKDIVN);
- camdivn = *(volatile uint32_t *)(clkman_base + S3C2440_CLKMAN_CAMDIVN);
-
- mdiv = (pllcon & PLLCON_MDIV_MASK) >> PLLCON_MDIV_SHIFT;
- pdiv = (pllcon & PLLCON_PDIV_MASK) >> PLLCON_PDIV_SHIFT;
- sdiv = (pllcon & PLLCON_SDIV_MASK) >> PLLCON_SDIV_SHIFT;
-
- f = (2 * (mdiv + 8) * S3C2XX0_XTAL_CLK) / ((pdiv + 2) * (1 << sdiv));
- h = f;
- switch((divn >> 1) & 3) {
- case 0:
- break;
- case 1:
- h /= 2;
- break;
- case 2:
- if ((camdivn & S3C2440_CAMDIVN_HCLK4_HALF) ==
- S3C2440_CAMDIVN_HCLK4_HALF)
- h /= 8;
- else
- h /= 4;
- break;
- case 3:
- if ((camdivn & S3C2440_CAMDIVN_HCLK3_HALF) ==
- S3C2440_CAMDIVN_HCLK3_HALF)
- h /= 6;
- else
- h /= 3;
- break;
- }
- p = h;
- if (divn & CLKDIVN_PDIVN)
- p /= 2;
-
- if (fclk) *fclk = f;
- if (hclk) *hclk = h;
- if (pclk) *pclk = p;
-}
-
-void
-s3c24x0_clock_freq(struct s3c2xx0_softc *sc)
-{
- vm_offset_t va;
-
- va = sc->sc_clkman_ioh;
- switch(sc->sc_cpu) {
- case CPU_S3C2410:
- s3c2410_clock_freq2(va, &sc->sc_fclk, &sc->sc_hclk,
- &sc->sc_pclk);
- break;
- case CPU_S3C2440:
- s3c2440_clock_freq2(va, &sc->sc_fclk, &sc->sc_hclk,
- &sc->sc_pclk);
- break;
- }
-}
-
-void
-cpu_reset(void)
-{
- (void) disable_interrupts(PSR_I|PSR_F);
-
- bus_space_write_4(s3c2xx0_bs_tag, s3c2xx0_softc->sc_wdt_ioh, WDT_WTCON,
- WTCON_ENABLE | WTCON_CLKSEL_16 | WTCON_ENRST);
- for(;;);
-}
-
-void
-s3c24x0_sleep(int mode __unused)
-{
- int reg;
-
- reg = bus_space_read_4(s3c2xx0_bs_tag, s3c2xx0_softc->sc_clkman_ioh,
- CLKMAN_CLKCON);
- bus_space_write_4(s3c2xx0_bs_tag, s3c2xx0_softc->sc_clkman_ioh,
- CLKMAN_CLKCON, reg | CLKCON_IDLE);
-}
-
-
-int
-arm_get_next_irq(int last __unused)
-{
- uint32_t intpnd;
- int irq, subirq;
-
- if ((irq = bus_space_read_4(s3c2xx0_bs_tag,
- s3c2xx0_softc->sc_intctl_ioh, INTCTL_INTOFFSET)) != 0) {
-
- /* Clear the pending bit */
- intpnd = bus_space_read_4(s3c2xx0_bs_tag,
- s3c2xx0_softc->sc_intctl_ioh, INTCTL_INTPND);
- bus_space_write_4(s3c2xx0_bs_tag, s3c2xx0_softc->sc_intctl_ioh,
- INTCTL_SRCPND, intpnd);
- bus_space_write_4(s3c2xx0_bs_tag, s3c2xx0_softc->sc_intctl_ioh,
- INTCTL_INTPND, intpnd);
-
- switch (irq) {
- case S3C24X0_INT_ADCTC:
- case S3C24X0_INT_UART0:
- case S3C24X0_INT_UART1:
- case S3C24X0_INT_UART2:
- /* Find the sub IRQ */
- subirq = 0x7ff;
- subirq &= bus_space_read_4(s3c2xx0_bs_tag,
- s3c2xx0_softc->sc_intctl_ioh, INTCTL_SUBSRCPND);
- subirq &= ~(bus_space_read_4(s3c2xx0_bs_tag,
- s3c2xx0_softc->sc_intctl_ioh, INTCTL_INTSUBMSK));
- if (subirq == 0)
- return (irq);
-
- subirq = ffs(subirq) - 1;
-
- /* Clear the sub irq pending bit */
- bus_space_write_4(s3c2xx0_bs_tag,
- s3c2xx0_softc->sc_intctl_ioh, INTCTL_SUBSRCPND,
- (1 << subirq));
-
- /*
- * Return the parent IRQ for UART
- * as it is all we ever need
- */
- if (subirq <= 8)
- return (irq);
-
- return (S3C24X0_SUBIRQ_MIN + subirq);
-
- case S3C24X0_INT_0:
- case S3C24X0_INT_1:
- case S3C24X0_INT_2:
- case S3C24X0_INT_3:
- /* There is a 1:1 mapping to the IRQ we are handling */
- return S3C24X0_INT_EXT(irq);
-
- case S3C24X0_INT_4_7:
- case S3C24X0_INT_8_23:
- /* Find the external interrupt being called */
- subirq = 0x7fffff;
- subirq &= bus_space_read_4(s3c2xx0_bs_tag,
- s3c2xx0_softc->sc_gpio_ioh, GPIO_EINTPEND);
- subirq &= ~bus_space_read_4(s3c2xx0_bs_tag,
- s3c2xx0_softc->sc_gpio_ioh, GPIO_EINTMASK);
- if (subirq == 0)
- return (irq);
-
- subirq = ffs(subirq) - 1;
-
- /* Clear the external irq pending bit */
- bus_space_write_4(s3c2xx0_bs_tag,
- s3c2xx0_softc->sc_gpio_ioh, GPIO_EINTPEND,
- (1 << subirq));
-
- return S3C24X0_INT_EXT(subirq);
- }
-
- return (irq);
- }
- return (-1);
-}
-
-void
-arm_mask_irq(uintptr_t irq)
-{
- u_int32_t mask;
-
- if (irq >= S3C24X0_INT_EXT(0) && irq <= S3C24X0_INT_EXT(3)) {
- /* External interrupt 0..3 are directly mapped to irq 0..3 */
- irq -= S3C24X0_EXTIRQ_MIN;
- }
- if (irq < S3C24X0_SUBIRQ_MIN) {
- mask = bus_space_read_4(s3c2xx0_bs_tag,
- s3c2xx0_softc->sc_intctl_ioh, INTCTL_INTMSK);
- mask |= (1 << irq);
- bus_space_write_4(s3c2xx0_bs_tag,
- s3c2xx0_softc->sc_intctl_ioh, INTCTL_INTMSK, mask);
- } else if (irq < S3C24X0_EXTIRQ_MIN) {
- mask = bus_space_read_4(s3c2xx0_bs_tag,
- s3c2xx0_softc->sc_intctl_ioh, INTCTL_INTSUBMSK);
- mask |= (1 << (irq - S3C24X0_SUBIRQ_MIN));
- bus_space_write_4(s3c2xx0_bs_tag,
- s3c2xx0_softc->sc_intctl_ioh, INTCTL_INTSUBMSK, mask);
- } else {
- mask = bus_space_read_4(s3c2xx0_bs_tag,
- s3c2xx0_softc->sc_gpio_ioh, GPIO_EINTMASK);
- mask |= (1 << (irq - S3C24X0_EXTIRQ_MIN));
- bus_space_write_4(s3c2xx0_bs_tag,
- s3c2xx0_softc->sc_intctl_ioh, GPIO_EINTMASK, mask);
- }
-}
-
-void
-arm_unmask_irq(uintptr_t irq)
-{
- u_int32_t mask;
-
- if (irq >= S3C24X0_INT_EXT(0) && irq <= S3C24X0_INT_EXT(3)) {
- /* External interrupt 0..3 are directly mapped to irq 0..3 */
- irq -= S3C24X0_EXTIRQ_MIN;
- }
- if (irq < S3C24X0_SUBIRQ_MIN) {
- mask = bus_space_read_4(s3c2xx0_bs_tag,
- s3c2xx0_softc->sc_intctl_ioh, INTCTL_INTMSK);
- mask &= ~(1 << irq);
- bus_space_write_4(s3c2xx0_bs_tag,
- s3c2xx0_softc->sc_intctl_ioh, INTCTL_INTMSK, mask);
- } else if (irq < S3C24X0_EXTIRQ_MIN) {
- mask = bus_space_read_4(s3c2xx0_bs_tag,
- s3c2xx0_softc->sc_intctl_ioh, INTCTL_INTSUBMSK);
- mask &= ~(1 << (irq - S3C24X0_SUBIRQ_MIN));
- bus_space_write_4(s3c2xx0_bs_tag,
- s3c2xx0_softc->sc_intctl_ioh, INTCTL_INTSUBMSK, mask);
- } else {
- mask = bus_space_read_4(s3c2xx0_bs_tag,
- s3c2xx0_softc->sc_gpio_ioh, GPIO_EINTMASK);
- mask &= ~(1 << (irq - S3C24X0_EXTIRQ_MIN));
- bus_space_write_4(s3c2xx0_bs_tag,
- s3c2xx0_softc->sc_intctl_ioh, GPIO_EINTMASK, mask);
- }
-}
diff --git a/sys/arm/samsung/s3c2xx0/s3c24x0_clk.c b/sys/arm/samsung/s3c2xx0/s3c24x0_clk.c
deleted file mode 100644
index d4c4e98..0000000
--- a/sys/arm/samsung/s3c2xx0/s3c24x0_clk.c
+++ /dev/null
@@ -1,287 +0,0 @@
-/* $NetBSD: s3c24x0_clk.c,v 1.6 2005/12/24 20:06:52 perry Exp $ */
-
-/*
- * Copyright (c) 2003 Genetec corporation. All rights reserved.
- * Written by Hiroyuki Bessho for Genetec corporation.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. The name of Genetec corporation may not be used to endorse
- * or promote products derived from this software without specific prior
- * written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY GENETEC CORP. ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GENETEC CORP.
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
-#include <sys/param.h>
-#include <sys/systm.h>
-#include <sys/kernel.h>
-#include <sys/module.h>
-#include <sys/time.h>
-#include <sys/bus.h>
-#include <sys/resource.h>
-#include <sys/rman.h>
-#include <sys/timetc.h>
-
-#include <machine/bus.h>
-#include <machine/cpu.h>
-#include <machine/cpufunc.h>
-#include <machine/frame.h>
-#include <machine/resource.h>
-#include <machine/intr.h>
-#include <arm/samsung/s3c2xx0/s3c24x0reg.h>
-#include <arm/samsung/s3c2xx0/s3c24x0var.h>
-
-struct s3c24x0_timer_softc {
- device_t dev;
-} timer_softc;
-
-static unsigned s3c24x0_timer_get_timecount(struct timecounter *tc);
-
-static struct timecounter s3c24x0_timer_timecounter = {
- s3c24x0_timer_get_timecount, /* get_timecount */
- NULL, /* no poll_pps */
- ~0u, /* counter_mask */
- 3686400, /* frequency */
- "s3c24x0 timer", /* name */
- 1000 /* quality */
-};
-
-static int
-s3c24x0_timer_probe(device_t dev)
-{
-
- device_set_desc(dev, "s3c24x0 timer");
- return (0);
-}
-
-static int
-s3c24x0_timer_attach(device_t dev)
-{
- timer_softc.dev = dev;
-
- /* We need to do this here for devices that expect DELAY to work */
- return (0);
-}
-
-static device_method_t s3c24x0_timer_methods[] = {
- DEVMETHOD(device_probe, s3c24x0_timer_probe),
- DEVMETHOD(device_attach, s3c24x0_timer_attach),
- {0, 0},
-};
-
-static driver_t s3c24x0_timer_driver = {
- "timer",
- s3c24x0_timer_methods,
- sizeof(struct s3c24x0_timer_softc),
-};
-static devclass_t s3c24x0_timer_devclass;
-
-DRIVER_MODULE(s3c24x0timer, s3c24x0, s3c24x0_timer_driver,
- s3c24x0_timer_devclass, 0, 0);
-
-#define TIMER_FREQUENCY(pclk) ((pclk)/16) /* divider=1/16 */
-
-static unsigned int timer4_reload_value;
-static unsigned int timer4_prescaler;
-static unsigned int timer4_mseccount;
-static volatile uint32_t s3c24x0_base;
-
-#define usec_to_counter(t) \
- ((timer4_mseccount*(t))/1000)
-
-#define counter_to_usec(c,pclk) \
- (((c)*timer4_prescaler*1000)/(TIMER_FREQUENCY(pclk)/1000))
-
-static inline int
-read_timer(struct s3c24x0_softc *sc)
-{
- int count;
-
- do {
- count = bus_space_read_2(sc->sc_sx.sc_iot, sc->sc_timer_ioh,
- TIMER_TCNTO(4));
- } while ( __predict_false(count > timer4_reload_value) );
-
- return count;
-}
-
-static unsigned
-s3c24x0_timer_get_timecount(struct timecounter *tc)
-{
- struct s3c24x0_softc *sc = (struct s3c24x0_softc *)s3c2xx0_softc;
- int value;
-
- value = bus_space_read_2(sc->sc_sx.sc_iot, sc->sc_timer_ioh,
- TIMER_TCNTO(4));
- return (s3c24x0_base - value);
-}
-
-static int
-clock_intr(void *arg)
-{
- struct trapframe *fp = arg;
-
- atomic_add_32(&s3c24x0_base, timer4_reload_value);
-
- hardclock(TRAPF_USERMODE(fp), TRAPF_PC(fp));
- return (FILTER_HANDLED);
-}
-
-void
-cpu_initclocks(void)
-{
- struct s3c24x0_softc *sc = (struct s3c24x0_softc *)s3c2xx0_softc;
- long tc;
- struct resource *irq;
- int rid = 0;
- void *ihl;
- int err, prescaler;
- int pclk = s3c2xx0_softc->sc_pclk;
- bus_space_tag_t iot = sc->sc_sx.sc_iot;
- bus_space_handle_t ioh = sc->sc_timer_ioh;
- uint32_t reg;
- device_t dev = timer_softc.dev;
-
- /* We have already been initialized */
- if (timer4_reload_value != 0)
- return;
-
-#define time_constant(hz) (TIMER_FREQUENCY(pclk) /(hz)/ prescaler)
-#define calc_time_constant(hz) \
- do { \
- prescaler = 1; \
- do { \
- ++prescaler; \
- tc = time_constant(hz); \
- } while( tc > 65536 ); \
- } while(0)
-
-
- /* Use the channels 4 and 3 for hardclock and statclock, respectively */
-
- /* stop all timers */
- bus_space_write_4(iot, ioh, TIMER_TCON, 0);
-
- /* calc suitable prescaler value */
- calc_time_constant(hz);
-
- timer4_prescaler = prescaler;
- timer4_reload_value = TIMER_FREQUENCY(pclk) / hz / prescaler;
- timer4_mseccount = TIMER_FREQUENCY(pclk)/timer4_prescaler/1000 ;
-
- bus_space_write_4(iot, ioh, TIMER_TCNTB(4),
- ((prescaler - 1) << 16) | (timer4_reload_value - 1));
-
- printf("clock: hz=%d PCLK=%d prescaler=%d tc=%ld\n",
- hz, pclk, prescaler, tc);
-
- irq = bus_alloc_resource(dev, SYS_RES_IRQ, &rid, S3C24X0_INT_TIMER4,
- S3C24X0_INT_TIMER4, 1, RF_ACTIVE);
- if (!irq)
- panic("Unable to allocate the clock irq handler.\n");
-
- err = bus_setup_intr(dev, irq, INTR_TYPE_CLK,
- clock_intr, NULL, NULL, &ihl);
- if (err != 0)
- panic("Unable to setup the clock irq handler.\n");
-
- /* set prescaler1 */
- reg = bus_space_read_4(iot, ioh, TIMER_TCFG0);
- bus_space_write_4(iot, ioh, TIMER_TCFG0,
- (reg & ~0xff00) | ((prescaler-1) << 8));
-
- /* divider 1/16 for ch #4 */
- reg = bus_space_read_4(iot, ioh, TIMER_TCFG1);
- bus_space_write_4(iot, ioh, TIMER_TCFG1,
- (reg & ~(TCFG1_MUX_MASK(4))) |
- (TCFG1_MUX_DIV16 << TCFG1_MUX_SHIFT(4)) );
-
-
- /* start timers */
- reg = bus_space_read_4(iot, ioh, TIMER_TCON);
- reg &= ~(TCON_MASK(4));
-
- /* load the time constant */
- bus_space_write_4(iot, ioh, TIMER_TCON, reg | TCON_MANUALUPDATE(4));
- /* set auto reload and start */
- bus_space_write_4(iot, ioh, TIMER_TCON, reg |
- TCON_AUTORELOAD(4) | TCON_START(4) );
-
- s3c24x0_timer_timecounter.tc_frequency = TIMER_FREQUENCY(pclk) /
- timer4_prescaler;
- tc_init(&s3c24x0_timer_timecounter);
-}
-
-/*
- * DELAY:
- *
- * Delay for at least N microseconds.
- */
-void
-DELAY(int n)
-{
- struct s3c24x0_softc *sc = (struct s3c24x0_softc *) s3c2xx0_softc;
- int v0, v1, delta;
- u_int ucnt;
-
- if (timer4_reload_value == 0) {
- /* not initialized yet */
- while ( n-- > 0 ){
- int m;
-
- for (m = 0; m < 100; ++m )
- ;
- }
- return;
- }
-
- /* read down counter */
- v0 = read_timer(sc);
-
- ucnt = usec_to_counter(n);
-
- while( ucnt > 0 ) {
- v1 = read_timer(sc);
- delta = v0 - v1;
- if ( delta < 0 )
- delta += timer4_reload_value;
-
- if((u_int)delta < ucnt){
- ucnt -= (u_int)delta;
- v0 = v1;
- }
- else {
- ucnt = 0;
- }
- }
-}
-
-void
-cpu_startprofclock(void)
-{
-}
-
-void
-cpu_stopprofclock(void)
-{
-}
diff --git a/sys/arm/samsung/s3c2xx0/s3c24x0_machdep.c b/sys/arm/samsung/s3c2xx0/s3c24x0_machdep.c
deleted file mode 100644
index bd3c230..0000000
--- a/sys/arm/samsung/s3c2xx0/s3c24x0_machdep.c
+++ /dev/null
@@ -1,405 +0,0 @@
-/*-
- * Copyright (c) 1994-1998 Mark Brinicombe.
- * Copyright (c) 1994 Brini.
- * All rights reserved.
- *
- * This code is derived from software written for Brini by Mark Brinicombe
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by Brini.
- * 4. The name of the company nor the name of the author may be used to
- * endorse or promote products derived from this software without specific
- * prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY BRINI ``AS IS'' AND ANY EXPRESS OR IMPLIED
- * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL BRINI OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
- * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * RiscBSD kernel project
- *
- * machdep.c
- *
- * Machine dependant functions for kernel setup
- *
- * This file needs a lot of work.
- *
- * Created : 17/09/94
- */
-
-#include "opt_ddb.h"
-#include "opt_kstack_pages.h"
-
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
-#define _ARM32_BUS_DMA_PRIVATE
-#include <sys/param.h>
-#include <sys/systm.h>
-#include <sys/sysproto.h>
-#include <sys/signalvar.h>
-#include <sys/imgact.h>
-#include <sys/kernel.h>
-#include <sys/ktr.h>
-#include <sys/linker.h>
-#include <sys/lock.h>
-#include <sys/malloc.h>
-#include <sys/mutex.h>
-#include <sys/pcpu.h>
-#include <sys/proc.h>
-#include <sys/ptrace.h>
-#include <sys/cons.h>
-#include <sys/bio.h>
-#include <sys/bus.h>
-#include <sys/buf.h>
-#include <sys/exec.h>
-#include <sys/kdb.h>
-#include <sys/msgbuf.h>
-#include <machine/physmem.h>
-#include <machine/reg.h>
-#include <machine/cpu.h>
-
-#include <vm/vm.h>
-#include <vm/pmap.h>
-#include <vm/vm_object.h>
-#include <vm/vm_page.h>
-#include <vm/vm_map.h>
-#include <machine/devmap.h>
-#include <machine/vmparam.h>
-#include <machine/pcb.h>
-#include <machine/undefined.h>
-#include <machine/machdep.h>
-#include <machine/metadata.h>
-#include <machine/armreg.h>
-#include <machine/bus.h>
-#include <sys/reboot.h>
-
-#include <arm/samsung/s3c2xx0/s3c24x0var.h>
-#include <arm/samsung/s3c2xx0/s3c2410reg.h>
-#include <arm/samsung/s3c2xx0/s3c2xx0board.h>
-
-/* Page table for mapping proc0 zero page */
-#define KERNEL_PT_SYS 0
-#define KERNEL_PT_KERN 1
-#define KERNEL_PT_KERN_NUM 44
-/* L2 table for mapping after kernel */
-#define KERNEL_PT_AFKERNEL KERNEL_PT_KERN + KERNEL_PT_KERN_NUM
-#define KERNEL_PT_AFKERNEL_NUM 5
-
-/* this should be evenly divisable by PAGE_SIZE / L2_TABLE_SIZE_REAL (or 4) */
-#define NUM_KERNEL_PTS (KERNEL_PT_AFKERNEL + KERNEL_PT_AFKERNEL_NUM)
-
-extern int s3c2410_pclk;
-
-struct pv_addr kernel_pt_table[NUM_KERNEL_PTS];
-
-/* Physical and virtual addresses for some global pages */
-
-struct pv_addr systempage;
-struct pv_addr msgbufpv;
-struct pv_addr irqstack;
-struct pv_addr undstack;
-struct pv_addr abtstack;
-struct pv_addr kernelstack;
-
-#define _A(a) ((a) & ~L1_S_OFFSET)
-#define _S(s) (((s) + L1_S_SIZE - 1) & ~(L1_S_SIZE-1))
-
-/* Static device mappings. */
-static const struct arm_devmap_entry s3c24x0_devmap[] = {
- /*
- * Map the devices we need early on.
- */
- {
- _A(S3C24X0_CLKMAN_BASE),
- _A(S3C24X0_CLKMAN_PA_BASE),
- _S(S3C24X0_CLKMAN_SIZE),
- VM_PROT_READ|VM_PROT_WRITE,
- PTE_DEVICE,
- },
- {
- _A(S3C24X0_GPIO_BASE),
- _A(S3C24X0_GPIO_PA_BASE),
- _S(S3C2410_GPIO_SIZE),
- VM_PROT_READ|VM_PROT_WRITE,
- PTE_DEVICE,
- },
- {
- _A(S3C24X0_INTCTL_BASE),
- _A(S3C24X0_INTCTL_PA_BASE),
- _S(S3C24X0_INTCTL_SIZE),
- VM_PROT_READ|VM_PROT_WRITE,
- PTE_DEVICE,
- },
- {
- _A(S3C24X0_TIMER_BASE),
- _A(S3C24X0_TIMER_PA_BASE),
- _S(S3C24X0_TIMER_SIZE),
- VM_PROT_READ|VM_PROT_WRITE,
- PTE_DEVICE,
- },
- {
- _A(S3C24X0_UART0_BASE),
- _A(S3C24X0_UART0_PA_BASE),
- _S(S3C24X0_UART_PA_BASE(3) - S3C24X0_UART0_PA_BASE),
- VM_PROT_READ|VM_PROT_WRITE,
- PTE_DEVICE,
- },
- {
- _A(S3C24X0_WDT_BASE),
- _A(S3C24X0_WDT_PA_BASE),
- _S(S3C24X0_WDT_SIZE),
- VM_PROT_READ|VM_PROT_WRITE,
- PTE_DEVICE,
- },
- {
- 0,
- 0,
- 0,
- 0,
- 0,
- }
-};
-
-#undef _A
-#undef _S
-
-#define ioreg_read32(a) (*(volatile uint32_t *)(a))
-#define ioreg_write32(a,v) (*(volatile uint32_t *)(a)=(v))
-
-struct arm32_dma_range s3c24x0_range = {
- .dr_sysbase = 0,
- .dr_busbase = 0,
- .dr_len = 0,
-};
-
-struct arm32_dma_range *
-bus_dma_get_range(void)
-{
-
- if (s3c24x0_range.dr_len == 0) {
- s3c24x0_range.dr_sysbase = dump_avail[0];
- s3c24x0_range.dr_busbase = dump_avail[0];
- s3c24x0_range.dr_len = dump_avail[1] - dump_avail[0];
- }
- return (&s3c24x0_range);
-}
-
-int
-bus_dma_get_range_nb(void)
-{
- return (1);
-}
-
-void *
-initarm(struct arm_boot_params *abp)
-{
- struct pv_addr kernel_l1pt;
- int loop;
- u_int l1pagetable;
- vm_offset_t freemempos;
- vm_offset_t afterkern;
- vm_offset_t lastaddr;
-
- int i;
- uint32_t memsize;
-
- boothowto = 0; /* Likely not needed */
- lastaddr = parse_boot_param(abp);
- arm_physmem_kernaddr = abp->abp_physaddr;
- i = 0;
- set_cpufuncs();
- cpufuncs.cf_sleep = s3c24x0_sleep;
-
- pcpu0_init();
-
- /* Do basic tuning, hz etc */
- init_param1();
-
-#define KERNEL_TEXT_BASE (KERNBASE)
- freemempos = (lastaddr + PAGE_MASK) & ~PAGE_MASK;
- /* Define a macro to simplify memory allocation */
-#define valloc_pages(var, np) \
- alloc_pages((var).pv_va, (np)); \
- (var).pv_pa = (var).pv_va + (abp->abp_physaddr - KERNVIRTADDR);
-
-#define alloc_pages(var, np) \
- (var) = freemempos; \
- freemempos += (np * PAGE_SIZE); \
- memset((char *)(var), 0, ((np) * PAGE_SIZE));
-
- while (((freemempos - L1_TABLE_SIZE) & (L1_TABLE_SIZE - 1)) != 0)
- freemempos += PAGE_SIZE;
- valloc_pages(kernel_l1pt, L1_TABLE_SIZE / PAGE_SIZE);
- for (loop = 0; loop < NUM_KERNEL_PTS; ++loop) {
- if (!(loop % (PAGE_SIZE / L2_TABLE_SIZE_REAL))) {
- valloc_pages(kernel_pt_table[loop],
- L2_TABLE_SIZE / PAGE_SIZE);
- } else {
- kernel_pt_table[loop].pv_va = freemempos -
- (loop % (PAGE_SIZE / L2_TABLE_SIZE_REAL)) *
- L2_TABLE_SIZE_REAL;
- kernel_pt_table[loop].pv_pa =
- kernel_pt_table[loop].pv_va - KERNVIRTADDR +
- abp->abp_physaddr;
- }
- }
- /*
- * Allocate a page for the system page mapped to V0x00000000
- * This page will just contain the system vectors and can be
- * shared by all processes.
- */
- valloc_pages(systempage, 1);
-
- /* Allocate stacks for all modes */
- valloc_pages(irqstack, IRQ_STACK_SIZE);
- valloc_pages(abtstack, ABT_STACK_SIZE);
- valloc_pages(undstack, UND_STACK_SIZE);
- valloc_pages(kernelstack, kstack_pages);
- valloc_pages(msgbufpv, round_page(msgbufsize) / PAGE_SIZE);
- /*
- * Now we start construction of the L1 page table
- * We start by mapping the L2 page tables into the L1.
- * This means that we can replace L1 mappings later on if necessary
- */
- l1pagetable = kernel_l1pt.pv_va;
-
- /* Map the L2 pages tables in the L1 page table */
- pmap_link_l2pt(l1pagetable, ARM_VECTORS_HIGH,
- &kernel_pt_table[KERNEL_PT_SYS]);
- for (i = 0; i < KERNEL_PT_KERN_NUM; i++)
- pmap_link_l2pt(l1pagetable, KERNBASE + i * L1_S_SIZE,
- &kernel_pt_table[KERNEL_PT_KERN + i]);
- pmap_map_chunk(l1pagetable, KERNBASE, PHYSADDR,
- (((uint32_t)(lastaddr) - KERNBASE) + PAGE_SIZE) & ~(PAGE_SIZE - 1),
- VM_PROT_READ|VM_PROT_WRITE, PTE_CACHE);
- afterkern = round_page((lastaddr + L1_S_SIZE) & ~(L1_S_SIZE
- - 1));
- for (i = 0; i < KERNEL_PT_AFKERNEL_NUM; i++) {
- pmap_link_l2pt(l1pagetable, afterkern + i * L1_S_SIZE,
- &kernel_pt_table[KERNEL_PT_AFKERNEL + i]);
- }
-
- /* Map the vector page. */
- pmap_map_entry(l1pagetable, ARM_VECTORS_HIGH, systempage.pv_pa,
- VM_PROT_READ|VM_PROT_WRITE, PTE_CACHE);
- /* Map the stack pages */
- pmap_map_chunk(l1pagetable, irqstack.pv_va, irqstack.pv_pa,
- IRQ_STACK_SIZE * PAGE_SIZE, VM_PROT_READ|VM_PROT_WRITE, PTE_CACHE);
- pmap_map_chunk(l1pagetable, abtstack.pv_va, abtstack.pv_pa,
- ABT_STACK_SIZE * PAGE_SIZE, VM_PROT_READ|VM_PROT_WRITE, PTE_CACHE);
- pmap_map_chunk(l1pagetable, undstack.pv_va, undstack.pv_pa,
- UND_STACK_SIZE * PAGE_SIZE, VM_PROT_READ|VM_PROT_WRITE, PTE_CACHE);
- pmap_map_chunk(l1pagetable, kernelstack.pv_va, kernelstack.pv_pa,
- kstack_pages * PAGE_SIZE, VM_PROT_READ|VM_PROT_WRITE, PTE_CACHE);
-
- pmap_map_chunk(l1pagetable, kernel_l1pt.pv_va, kernel_l1pt.pv_pa,
- L1_TABLE_SIZE, VM_PROT_READ|VM_PROT_WRITE, PTE_PAGETABLE);
- pmap_map_chunk(l1pagetable, msgbufpv.pv_va, msgbufpv.pv_pa,
- msgbufsize, VM_PROT_READ|VM_PROT_WRITE, PTE_CACHE);
-
-
- for (loop = 0; loop < NUM_KERNEL_PTS; ++loop) {
- pmap_map_chunk(l1pagetable, kernel_pt_table[loop].pv_va,
- kernel_pt_table[loop].pv_pa, L2_TABLE_SIZE,
- VM_PROT_READ|VM_PROT_WRITE, PTE_PAGETABLE);
- }
-
- arm_devmap_bootstrap(l1pagetable, s3c24x0_devmap);
-
- cpu_domains((DOMAIN_CLIENT << (PMAP_DOMAIN_KERNEL*2)) | DOMAIN_CLIENT);
- setttb(kernel_l1pt.pv_pa);
- cpu_tlb_flushID();
- cpu_domains(DOMAIN_CLIENT << (PMAP_DOMAIN_KERNEL*2));
-
- /*
- * Pages were allocated during the secondary bootstrap for the
- * stacks for different CPU modes.
- * We must now set the r13 registers in the different CPU modes to
- * point to these stacks.
- * Since the ARM stacks use STMFD etc. we must set r13 to the top end
- * of the stack memory.
- */
-
- cpu_control(CPU_CONTROL_MMU_ENABLE, CPU_CONTROL_MMU_ENABLE);
- set_stackptrs(0);
-
- /*
- * We must now clean the cache again....
- * Cleaning may be done by reading new data to displace any
- * dirty data in the cache. This will have happened in setttb()
- * but since we are boot strapping the addresses used for the read
- * may have just been remapped and thus the cache could be out
- * of sync. A re-clean after the switch will cure this.
- * After booting there are no gross relocations of the kernel thus
- * this problem will not occur after initarm().
- */
- cpu_idcache_wbinv_all();
- cpu_setup();
-
- /* Disable all peripheral interrupts */
- ioreg_write32(S3C24X0_INTCTL_BASE + INTCTL_INTMSK, ~0);
- memsize = board_init();
- /* Find pclk for uart */
- switch(ioreg_read32(S3C24X0_GPIO_BASE + GPIO_GSTATUS1) >> 16) {
- case 0x3241:
- s3c2410_clock_freq2(S3C24X0_CLKMAN_BASE, NULL, NULL,
- &s3c2410_pclk);
- break;
- case 0x3244:
- s3c2440_clock_freq2(S3C24X0_CLKMAN_BASE, NULL, NULL,
- &s3c2410_pclk);
- break;
- }
- cninit();
-
- undefined_init();
-
- init_proc0(kernelstack.pv_va);
-
- arm_vector_init(ARM_VECTORS_HIGH, ARM_VEC_ALL);
-
- pmap_curmaxkvaddr = afterkern + 0x100000 * (KERNEL_PT_KERN_NUM - 1);
- vm_max_kernel_address = KERNVIRTADDR + 3 * memsize;
- pmap_bootstrap(freemempos, &kernel_l1pt);
- msgbufp = (void*)msgbufpv.pv_va;
- msgbufinit(msgbufp, msgbufsize);
- mutex_init();
-
- /*
- * Add the physical ram we have available.
- *
- * Exclude the kernel, and all the things we allocated which immediately
- * follow the kernel, from the VM allocation pool but not from crash
- * dumps. virtual_avail is a global variable which tracks the kva we've
- * "allocated" while setting up pmaps.
- *
- * Prepare the list of physical memory available to the vm subsystem.
- */
- arm_physmem_hardware_region(PHYSADDR, memsize);
- arm_physmem_exclude_region(abp->abp_physaddr,
- virtual_avail - KERNVIRTADDR, EXFLAG_NOALLOC);
- arm_physmem_init_kernel_globals();
-
- init_param2(physmem);
- kdb_init();
-
- return ((void *)(kernelstack.pv_va + USPACE_SVC_STACK_TOP -
- sizeof(struct pcb)));
-}
diff --git a/sys/arm/samsung/s3c2xx0/s3c24x0_rtc.c b/sys/arm/samsung/s3c2xx0/s3c24x0_rtc.c
deleted file mode 100644
index f0d35c9..0000000
--- a/sys/arm/samsung/s3c2xx0/s3c24x0_rtc.c
+++ /dev/null
@@ -1,162 +0,0 @@
-/*
- * Copyright (C) 2010 Andrew Turner
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- */
-
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-#include <sys/param.h>
-#include <sys/bus.h>
-#include <sys/time.h>
-#include <sys/clock.h>
-#include <sys/resource.h>
-#include <sys/systm.h>
-#include <sys/rman.h>
-#include <sys/kernel.h>
-#include <sys/module.h>
-
-#include <machine/bus.h>
-
-#include <arm/samsung/s3c2xx0/s3c24x0reg.h>
-
-#include "clock_if.h"
-
-#define YEAR_BASE 2000
-
-struct s3c2xx0_rtc_softc {
- struct resource *mem_res;
-};
-
-static int
-s3c2xx0_rtc_probe(device_t dev)
-{
-
- device_set_desc(dev, "Samsung Integrated RTC");
- return (0);
-}
-
-static int
-s3c2xx0_rtc_attach(device_t dev)
-{
- struct s3c2xx0_rtc_softc *sc;
- int error, rid;
-
- sc = device_get_softc(dev);
- error = 0;
-
- rid = 0;
- sc->mem_res = bus_alloc_resource_any(dev, SYS_RES_IOPORT, &rid,
- RF_ACTIVE);
- if (sc->mem_res == NULL) {
- error = ENOMEM;
- goto out;
- }
-
- bus_write_1(sc->mem_res, RTC_RTCCON, RTCCON_RTCEN);
- clock_register(dev, 1000000);
-
-out:
- return (error);
-}
-
-static int
-s3c2xx0_rtc_gettime(device_t dev, struct timespec *ts)
-{
- struct s3c2xx0_rtc_softc *sc;
- struct clocktime ct;
-
-#define READ_TIME() do { \
- ct.year = YEAR_BASE + FROMBCD(bus_read_1(sc->mem_res, RTC_BCDYEAR)); \
- ct.mon = FROMBCD(bus_read_1(sc->mem_res, RTC_BCDMON)); \
- ct.dow = FROMBCD(bus_read_1(sc->mem_res, RTC_BCDDAY)); \
- ct.day = FROMBCD(bus_read_1(sc->mem_res, RTC_BCDDATE)); \
- ct.hour = FROMBCD(bus_read_1(sc->mem_res, RTC_BCDHOUR)); \
- ct.min = FROMBCD(bus_read_1(sc->mem_res, RTC_BCDMIN)); \
- ct.sec = FROMBCD(bus_read_1(sc->mem_res, RTC_BCDSEC)); \
-} while (0)
-
- sc = device_get_softc(dev);
-
- ct.nsec = 0;
- READ_TIME();
- /*
- * Check if we could have read incorrect values
- * as the values could have changed.
- */
- if (ct.sec == 0) {
- READ_TIME();
- }
-
- ct.dow = -1;
-
-#undef READ_TIME
- return (clock_ct_to_ts(&ct, ts));
-}
-
-static int
-s3c2xx0_rtc_settime(device_t dev, struct timespec *ts)
-{
- struct s3c2xx0_rtc_softc *sc;
- struct clocktime ct;
-
- sc = device_get_softc(dev);
-
- /* Resolution: 1 sec */
- if (ts->tv_nsec >= 500000000)
- ts->tv_sec++;
- ts->tv_nsec = 0;
- clock_ts_to_ct(ts, &ct);
-
- bus_write_1(sc->mem_res, RTC_BCDSEC, TOBCD(ct.sec));
- bus_write_1(sc->mem_res, RTC_BCDMIN, TOBCD(ct.min));
- bus_write_1(sc->mem_res, RTC_BCDHOUR, TOBCD(ct.hour));
- bus_write_1(sc->mem_res, RTC_BCDDATE, TOBCD(ct.day));
- bus_write_1(sc->mem_res, RTC_BCDDAY, TOBCD(ct.dow));
- bus_write_1(sc->mem_res, RTC_BCDMON, TOBCD(ct.mon));
- bus_write_1(sc->mem_res, RTC_BCDYEAR, TOBCD(ct.year - YEAR_BASE));
-
- return (0);
-}
-
-static device_method_t s3c2xx0_rtc_methods[] = {
- DEVMETHOD(device_probe, s3c2xx0_rtc_probe),
- DEVMETHOD(device_attach, s3c2xx0_rtc_attach),
-
- DEVMETHOD(clock_gettime, s3c2xx0_rtc_gettime),
- DEVMETHOD(clock_settime, s3c2xx0_rtc_settime),
-
- { 0, 0 },
-};
-
-static driver_t s3c2xx0_rtc_driver = {
- "rtc",
- s3c2xx0_rtc_methods,
- sizeof(struct s3c2xx0_rtc_softc),
-};
-static devclass_t s3c2xx0_rtc_devclass;
-
-DRIVER_MODULE(s3c2xx0_rtc, s3c24x0, s3c2xx0_rtc_driver, s3c2xx0_rtc_devclass,
- 0, 0);
-
diff --git a/sys/arm/samsung/s3c2xx0/s3c24x0reg.h b/sys/arm/samsung/s3c2xx0/s3c24x0reg.h
deleted file mode 100644
index 2004e11..0000000
--- a/sys/arm/samsung/s3c2xx0/s3c24x0reg.h
+++ /dev/null
@@ -1,718 +0,0 @@
-/* $NetBSD: s3c24x0reg.h,v 1.7 2004/02/12 03:52:46 bsh Exp $ */
-
-/*-
- * Copyright (c) 2003 Genetec corporation All rights reserved.
- * Written by Hiroyuki Bessho for Genetec corporation.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. The name of Genetec corporation may not be used to endorse
- * or promote products derived from this software without specific prior
- * written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY GENETEC CORP. ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
- * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
- * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GENETEC CORP.
- * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
- * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
- * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
- * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
- * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
- * POSSIBILITY OF SUCH DAMAGE.
- *
- * $FreeBSD$
- */
-
-
-/*
- * Samsung S3C2410X/2400 processor is ARM920T based integrated CPU
- *
- * Reference:
- * S3C2410X User's Manual
- * S3C2400 User's Manual
- */
-#ifndef _ARM_S3C2XX0_S3C24X0REG_H_
-#define _ARM_S3C2XX0_S3C24X0REG_H_
-
-/* common definitions for S3C2800, S3C2410 and S3C2440 */
-#include <arm/samsung/s3c2xx0/s3c2xx0reg.h>
-
-/*
- * Map the device registers into kernel space.
- *
- * As most devices use less than 1 page of memory reduce
- * the distance between allocations by right shifting
- * S3C24X0_DEV_SHIFT bits. Because the UART takes 3*0x4000
- * bytes the upper limit on S3C24X0_DEV_SHIFT is 4.
- * TODO: Fix the UART code so we can increase this value.
- */
-#define S3C24X0_DEV_START 0x48000000
-#define S3C24X0_DEV_STOP 0x60000000
-#define S3C24X0_DEV_VA_OFFSET 0xD8000000
-#define S3C24X0_DEV_SHIFT 4
-#define S3C24X0_DEV_PA_SIZE (S3C24X0_DEV_STOP - S3C24X0_DEV_START)
-#define S3C24X0_DEV_VA_SIZE (S3C24X0_DEV_PA_SIZE >> S3C24X0_DEV_SHIFT)
-#define S3C24X0_DEV_PA_TO_VA(x) ((x >> S3C24X0_DEV_SHIFT) - S3C24X0_DEV_START + S3C24X0_DEV_VA_OFFSET)
-
-/*
- * Physical address of integrated peripherals
- */
-#define S3C24X0_MEMCTL_PA_BASE 0x48000000 /* memory controller */
-#define S3C24X0_MEMCTL_BASE S3C24X0_DEV_PA_TO_VA(S3C24X0_MEMCTL_PA_BASE)
-#define S3C24X0_USBHC_PA_BASE 0x49000000 /* USB Host controller */
-#define S3C24X0_USBHC_BASE S3C24X0_DEV_PA_TO_VA(S3C24X0_USBHC_PA_BASE)
-#define S3C24X0_INTCTL_PA_BASE 0x4a000000 /* Interrupt controller */
-#define S3C24X0_INTCTL_BASE S3C24X0_DEV_PA_TO_VA(S3C24X0_INTCTL_PA_BASE)
-#define S3C24X0_INTCTL_SIZE 0x20
-#define S3C24X0_DMAC_PA_BASE 0x4b000000
-#define S3C24X0_DMAC_BASE S3C24X0_DEV_PA_TO_VA(S3C24X0_DMAC_PA_BASE)
-#define S3C24X0_DMAC_SIZE 0xe4
-#define S3C24X0_CLKMAN_PA_BASE 0x4c000000 /* clock & power management */
-#define S3C24X0_CLKMAN_BASE S3C24X0_DEV_PA_TO_VA(S3C24X0_CLKMAN_PA_BASE)
-#define S3C24X0_LCDC_PA_BASE 0x4d000000 /* LCD controller */
-#define S3C24X0_LCDC_BASE S3C24X0_DEV_PA_TO_VA(S3C24X0_LCDC_PA_BASE)
-#define S3C24X0_LCDC_SIZE 0x64
-#define S3C24X0_NANDFC_PA_BASE 0x4e000000 /* NAND Flash controller */
-#define S3C24X0_NANDFC_BASE S3C24X0_DEV_PA_TO_VA(S3C24X0_NANDFC_PA_BASE)
-#define S3C24X0_UART0_PA_BASE 0x50000000
-#define S3C24X0_UART0_BASE S3C24X0_DEV_PA_TO_VA(S3C24X0_UART0_PA_BASE)
-#define S3C24X0_UART_PA_BASE(n) (S3C24X0_UART0_PA_BASE+0x4000*(n))
-#define S3C24X0_UART_BASE(n) (S3C24X0_UART0_BASE+0x4000*(n))
-#define S3C24X0_TIMER_PA_BASE 0x51000000
-#define S3C24X0_TIMER_BASE S3C24X0_DEV_PA_TO_VA(S3C24X0_TIMER_PA_BASE)
-#define S3C24X0_USBDC_PA_BASE 0x5200140
-#define S3C24X0_USBDC_BASE S3C24X0_DEV_PA_TO_VA(S3C24X0_USBDC_PA_BASE)
-#define S3C24X0_USBDC_SIZE 0x130
-#define S3C24X0_WDT_PA_BASE 0x53000000
-#define S3C24X0_WDT_BASE S3C24X0_DEV_PA_TO_VA(S3C24X0_WDT_PA_BASE)
-#define S3C24X0_IIC_PA_BASE 0x54000000
-#define S3C24X0_IIC_BASE S3C24X0_DEV_PA_TO_VA(S3C24X0_IIC_PA_BASE)
-#define S3C24X0_IIS_PA_BASE 0x55000000
-#define S3C24X0_IIS_BASE S3C24X0_DEV_PA_TO_VA(S3C24X0_IIS_PA_BASE)
-#define S3C24X0_GPIO_PA_BASE 0x56000000
-#define S3C24X0_GPIO_BASE S3C24X0_DEV_PA_TO_VA(S3C24X0_GPIO_PA_BASE)
-#define S3C24X0_RTC_PA_BASE 0x57000000
-#define S3C24X0_RTC_BASE S3C24X0_DEV_PA_TO_VA(S3C24X0_RTC_PA_BASE)
-#define S3C24X0_RTC_SIZE 0x8C
-#define S3C24X0_ADC_PA_BASE 0x58000000
-#define S3C24X0_ADC_BASE S3C24X0_DEV_PA_TO_VA(S3C24X0_ADC_PA_BASE)
-#define S3C24X0_SPI0_PA_BASE 0x59000000
-#define S3C24X0_SPI0_BASE S3C24X0_DEV_PA_TO_VA(S3C24X0_SPI0_PA_BASE)
-#define S3C24X0_SPI1_PA_BASE 0x59000020
-#define S3C24X0_SPI1_BASE S3C24X0_DEV_PA_TO_VA(S3C24X0_SPI1_PA_BASE)
-#define S3C24X0_SDI_PA_BASE 0x5a000000 /* SD Interface */
-#define S3C24X0_SDI_BASE S3C24X0_DEV_PA_TO_VA(S3C24X0_SDI_PA_BASE)
-
-#define S3C24X0_REG_BASE 0x48000000
-#define S3C24X0_REG_SIZE 0x13000000
-
-/* Memory controller */
-#define MEMCTL_BWSCON 0x00 /* Bus width and wait status */
-#define BWSCON_DW0_SHIFT 1 /* bank0 is odd */
-#define BWSCON_BANK_SHIFT(n) (4*(n)) /* for bank 1..7 */
-#define BWSCON_DW_MASK 0x03
-#define BWSCON_DW_8 0
-#define BWSCON_DW_16 1
-#define BWSCON_DW_32 2
-#define BWSCON_WS 0x04 /* WAIT enable for the bank */
-#define BWSCON_ST 0x08 /* SRAM use UB/LB for the bank */
-
-#define MEMCTL_BANKCON0 0x04 /* Boot ROM control */
-#define MEMCTL_BANKCON(n) (0x04+4*(n)) /* BANKn control */
-#define BANKCON_MT_SHIFT 15
-#define BANKCON_MT_ROM (0<<BANKCON_MT_SHIFT)
-#define BANKCON_MT_DRAM (3<<BANKCON_MT_SHIFT)
-#define BANKCON_TACS_SHIFT 13 /* address set-up time to nGCS */
-#define BANKCON_TCOS_SHIFT 11 /* CS set-up to nOE */
-#define BANKCON_TACC_SHIFT 8 /* CS set-up to nOE */
-#define BANKCON_TOCH_SHIFT 6 /* CS hold time from OE */
-#define BANKCON_TCAH_SHIFT 4 /* address hold time from OE */
-#define BANKCON_TACP_SHIFT 2 /* page mode access cycle */
-#define BANKCON_TACP_2 (0<<BANKCON_TACP_SHIFT)
-#define BANKCON_TACP_3 (1<<BANKCON_TACP_SHIFT)
-#define BANKCON_TACP_4 (2<<BANKCON_TACP_SHIFT)
-#define BANKCON_TACP_6 (3<<BANKCON_TACP_SHIFT)
-#define BANKCON_PMC_4 (1<<0)
-#define BANKCON_PMC_8 (2<<0)
-#define BANKCON_PMC_16 (3<<0)
-#define BANKCON_TRCD_SHIFT 2 /* RAS to CAS delay */
-#define BANKCON_TRCD_2 (0<<2)
-#define BANKCON_TRCD_3 (1<<2)
-#define BANKCON_TRCD_4 (2<<2)
-#define BANKCON_SCAN_8 (0<<0) /* Column address number */
-#define BANKCON_SCAN_9 (1<<0)
-#define BANKCON_SCAN_10 (2<<0)
-#define MEMCTL_REFRESH 0x24 /* DRAM?SDRAM Refresh */
-#define REFRESH_REFEN (1<<23)
-#define REFRESH_TREFMD (1<<22) /* 1=self refresh */
-#define REFRESH_TRP_2 (0<<20)
-#define REFRESH_TRP_3 (1<<20)
-#define REFRESH_TRP_4 (2<<20)
-#define REFRESH_TRC_4 (0<<18)
-#define REFRESH_TRC_5 (1<<18)
-#define REFRESH_TRC_6 (2<<18)
-#define REFRESH_TRC_7 (3<<18)
-#define REFRESH_COUNTER_MASK 0x3ff
-#define MEMCTL_BANKSIZE 0x28 /* Flexible Bank size */
-#define MEMCTL_MRSRB6 0x2c /* SDRAM Mode register */
-#define MEMCTL_MRSRB7 0x30
-#define MRSR_CL_SHIFT 4 /* CAS Latency */
-
-#define S3C24X0_MEMCTL_SIZE 0x34
-
-/* USB Host controller */
-#define S3C24X0_USBHC_SIZE 0x5c
-
-/* Interrupt controller */
-#define INTCTL_PRIORITY 0x0c /* IRQ Priority control */
-#define INTCTL_INTPND 0x10 /* Interrupt request status */
-#define INTCTL_INTOFFSET 0x14 /* Interrupt request source */
-#define INTCTL_SUBSRCPND 0x18 /* sub source pending */
-#define INTCTL_INTSUBMSK 0x1c /* sub mask */
-
-/* Interrupt source */
-#define S3C24X0_INT_ADCTC 31 /* ADC (and TC for 2410) */
-#define S3C24X0_INT_RTC 30 /* RTC alarm */
-#define S3C24X0_INT_SPI1 29 /* SPI 1 */
-#define S3C24X0_INT_UART0 28 /* UART0 */
-#define S3C24X0_INT_IIC 27
-#define S3C24X0_INT_USBH 26 /* USB Host */
-#define S3C24X0_INT_USBD 25 /* USB Device */
-#define S3C24X0_INT_UART1 23 /* UART0 (2410 only) */
-#define S3C24X0_INT_SPI0 22 /* SPI 0 */
-#define S3C24X0_INT_SDI 21
-#define S3C24X0_INT_DMA3 20
-#define S3C24X0_INT_DMA2 19
-#define S3C24X0_INT_DMA1 18
-#define S3C24X0_INT_DMA0 17
-#define S3C24X0_INT_LCD 16
-
-#define S3C24X0_INT_UART2 15 /* UART2 int (2410) */
-#define S3C24X0_INT_TIMER4 14
-#define S3C24X0_INT_TIMER3 13
-#define S3C24X0_INT_TIMER2 12
-#define S3C24X0_INT_TIMER1 11
-#define S3C24X0_INT_TIMER0 10
-#define S3C24X0_INT_TIMER(n) (10+(n)) /* timer interrupt [4:0] */
-#define S3C24X0_INT_WDT 9 /* Watch dog timer */
-#define S3C24X0_INT_TICK 8
-#define S3C24X0_INT_BFLT 7 /* Battery fault */
-#define S3C24X0_INT_8_23 5 /* Ext int 8..23 */
-#define S3C24X0_INT_4_7 4 /* Ext int 4..7 */
-#define S3C24X0_INT_3 3
-#define S3C24X0_INT_2 2
-#define S3C24X0_INT_1 1
-#define S3C24X0_INT_0 0
-
-/* 24{1,4}0 has more than 32 interrupt sources. These are sub-sources
- * that are OR-ed into main interrupt sources, and controlled via
- * SUBSRCPND and SUBSRCMSK registers */
-#define S3C24X0_SUBIRQ_MIN 32
-
-/* cascaded to INT_ADCTC */
-#define S3C24X0_INT_ADC (S3C24X0_SUBIRQ_MIN+10) /* AD converter */
-#define S3C24X0_INT_TC (S3C24X0_SUBIRQ_MIN+9) /* Touch screen */
-/* cascaded to INT_UART2 */
-#define S3C24X0_INT_ERR2 (S3C24X0_SUBIRQ_MIN+8) /* UART2 Error */
-#define S3C24X0_INT_TXD2 (S3C24X0_SUBIRQ_MIN+7) /* UART2 Tx */
-#define S3C24X0_INT_RXD2 (S3C24X0_SUBIRQ_MIN+6) /* UART2 Rx */
-/* cascaded to INT_UART1 */
-#define S3C24X0_INT_ERR1 (S3C24X0_SUBIRQ_MIN+5) /* UART1 Error */
-#define S3C24X0_INT_TXD1 (S3C24X0_SUBIRQ_MIN+4) /* UART1 Tx */
-#define S3C24X0_INT_RXD1 (S3C24X0_SUBIRQ_MIN+3) /* UART1 Rx */
-/* cascaded to INT_UART0 */
-#define S3C24X0_INT_ERR0 (S3C24X0_SUBIRQ_MIN+2) /* UART0 Error */
-#define S3C24X0_INT_TXD0 (S3C24X0_SUBIRQ_MIN+1) /* UART0 Tx */
-#define S3C24X0_INT_RXD0 (S3C24X0_SUBIRQ_MIN+0) /* UART0 Rx */
-
-/*
- * Support for external interrupts. We use values from 48
- * to allow new CPU's to allocate new subirq's.
- */
-#define S3C24X0_EXTIRQ_MIN 48
-#define S3C24X0_EXTIRQ_COUNT 24
-#define S3C24X0_EXTIRQ_MAX (S3C24X0_EXTIRQ_MIN + S3C24X0_EXTIRQ_COUNT - 1)
-#define S3C24X0_INT_EXT(n) (S3C24X0_EXTIRQ_MIN + (n))
-
-/* DMA controller */
-/* XXX */
-
-/* Clock & power manager */
-#define CLKMAN_LOCKTIME 0x00 /* PLL lock time */
-#define CLKMAN_MPLLCON 0x04 /* MPLL control */
-#define CLKMAN_UPLLCON 0x08 /* UPLL control */
-#define PLLCON_MDIV_SHIFT 12
-#define PLLCON_MDIV_MASK (0xff<<PLLCON_MDIV_SHIFT)
-#define PLLCON_PDIV_SHIFT 4
-#define PLLCON_PDIV_MASK (0x3f<<PLLCON_PDIV_SHIFT)
-#define PLLCON_SDIV_SHIFT 0
-#define PLLCON_SDIV_MASK (0x03<<PLLCON_SDIV_SHIFT)
-#define CLKMAN_CLKCON 0x0c
-#define CLKCON_SPI (1<<18)
-#define CLKCON_IIS (1<<17)
-#define CLKCON_IIC (1<<16)
-#define CLKCON_ADC (1<<15)
-#define CLKCON_RTC (1<<14)
-#define CLKCON_GPIO (1<<13)
-#define CLKCON_UART2 (1<<12)
-#define CLKCON_UART1 (1<<11)
-#define CLKCON_UART0 (1<<10) /* PCLK to UART0 */
-#define CLKCON_SDI (1<<9)
-#define CLKCON_TIMER (1<<8) /* PCLK to TIMER */
-#define CLKCON_USBD (1<<7) /* PCLK to USB device controller */
-#define CLKCON_USBH (1<<6) /* PCLK to USB host controller */
-#define CLKCON_LCDC (1<<5) /* PCLK to LCD controller */
-#define CLKCON_NANDFC (1<<4) /* PCLK to NAND Flash controller */
-#define CLKCON_IDLE (1<<2) /* 1=transition to IDLE mode */
-#define CLKMAN_CLKSLOW 0x10
-#define CLKMAN_CLKDIVN 0x14
-#define CLKDIVN_PDIVN (1<<0) /* pclk=hclk/2 */
-
-#define CLKMAN_CLKSLOW 0x10 /* slow clock controll */
-#define CLKSLOW_UCLK (1<<7) /* 1=UPLL off */
-#define CLKSLOW_MPLL (1<<5) /* 1=PLL off */
-#define CLKSLOW_SLOW (1<<4) /* 1: Enable SLOW mode */
-#define CLKSLOW_VAL_MASK 0x0f /* divider value for slow clock */
-
-#define CLKMAN_CLKDIVN 0x14 /* Software reset control */
-#define CLKDIVN_PDIVN (1<<0)
-
-#define S3C24X0_CLKMAN_SIZE 0x18
-
-/* LCD controller */
-#define LCDC_LCDCON1 0x00 /* control 1 */
-#define LCDCON1_ENVID (1<<0) /* enable video */
-#define LCDCON1_BPPMODE_SHIFT 1
-#define LCDCON1_BPPMODE_MASK (0x0f<<LCDCON1_BPPMODE_SHIFT)
-#define LCDCON1_BPPMODE_STN1 (0x0<<LCDCON1_BPPMODE_SHIFT)
-#define LCDCON1_BPPMODE_STN2 (0x1<<LCDCON1_BPPMODE_SHIFT)
-#define LCDCON1_BPPMODE_STN4 (0x2<<LCDCON1_BPPMODE_SHIFT)
-#define LCDCON1_BPPMODE_STN8 (0x3<<LCDCON1_BPPMODE_SHIFT)
-#define LCDCON1_BPPMODE_STN12 (0x4<<LCDCON1_BPPMODE_SHIFT)
-#define LCDCON1_BPPMODE_TFT1 (0x8<<LCDCON1_BPPMODE_SHIFT)
-#define LCDCON1_BPPMODE_TFT2 (0x9<<LCDCON1_BPPMODE_SHIFT)
-#define LCDCON1_BPPMODE_TFT4 (0xa<<LCDCON1_BPPMODE_SHIFT)
-#define LCDCON1_BPPMODE_TFT8 (0xb<<LCDCON1_BPPMODE_SHIFT)
-#define LCDCON1_BPPMODE_TFT16 (0xc<<LCDCON1_BPPMODE_SHIFT)
-#define LCDCON1_BPPMODE_TFT24 (0xd<<LCDCON1_BPPMODE_SHIFT)
-#define LCDCON1_BPPMODE_TFTX (0x8<<LCDCON1_BPPMODE_SHIFT)
-
-#define LCDCON1_PNRMODE_SHIFT 5
-#define LCDCON1_PNRMODE_MASK (0x3<<LCDCON1_PNRMODE_SHIFT)
-#define LCDCON1_PNRMODE_DUALSTN4 (0x0<<LCDCON1_PNRMODE_SHIFT)
-#define LCDCON1_PNRMODE_SINGLESTN4 (0x1<<LCDCON1_PNRMODE_SHIFT)
-#define LCDCON1_PNRMODE_SINGLESTN8 (0x2<<LCDCON1_PNRMODE_SHIFT)
-#define LCDCON1_PNRMODE_TFT (0x3<<LCDCON1_PNRMODE_SHIFT)
-
-#define LCDCON1_MMODE (1<<7) /* VM toggle rate */
-#define LCDCON1_CLKVAL_SHIFT 8
-#define LCDCON1_CLKVAL_MASK (0x3ff<<LCDCON1_CLKVAL_SHIFT)
-#define LCDCON1_LINCNT_SHIFT 18
-#define LCDCON1_LINCNT_MASK (0x3ff<<LCDCON1_LINCNT_SHIFT)
-
-#define LCDC_LCDCON2 0x04 /* control 2 */
-#define LCDCON2_VPSW_SHIFT 0 /* TFT Vsync pulse width */
-#define LCDCON2_VPSW_MASK (0x3f<<LCDCON2_VPSW_SHIFT)
-#define LCDCON2_VFPD_SHIFT 6 /* TFT V front porch */
-#define LCDCON2_VFPD_MASK (0xff<<LCDCON2_VFPD_SHIFT)
-#define LCDCON2_LINEVAL_SHIFT 14 /* Vertical size */
-#define LCDCON2_LINEVAL_MASK (0x3ff<<LCDCON2_LINEVAL_SHIFT)
-#define LCDCON2_VBPD_SHIFT 24 /* TFT V back porch */
-#define LCDCON2_VBPD_MASK (0xff<<LCDCON2_VBPD_SHIFT)
-
-#define LCDC_LCDCON3 0x08 /* control 2 */
-#define LCDCON3_HFPD_SHIFT 0 /* TFT H front porch */
-#define LCDCON3_HFPD_MASK (0xff<<LCDCON3_VPFD_SHIFT)
-#define LCDCON3_LINEBLANK_SHIFT 0 /* STN H blank time */
-#define LCDCON3_LINEBLANK_MASK (0xff<<LCDCON3_LINEBLANK_SHIFT)
-#define LCDCON3_HOZVAL_SHIFT 8 /* Horizontal size */
-#define LCDCON3_HOZVAL_MASK (0x7ff<<LCDCON3_HOZVAL_SHIFT)
-#define LCDCON3_HBPD_SHIFT 19 /* TFT H back porch */
-#define LCDCON3_HBPD_MASK (0x7f<<LCDCON3_HPBD_SHIFT)
-#define LCDCON3_WDLY_SHIFT 19 /* STN vline delay */
-#define LCDCON3_WDLY_MASK (0x03<<LCDCON3_WDLY_SHIFT)
-#define LCDCON3_WDLY_16 (0x00<<LCDCON3_WDLY_SHIFT)
-#define LCDCON3_WDLY_32 (0x01<<LCDCON3_WDLY_SHIFT)
-#define LCDCON3_WDLY_64 (0x02<<LCDCON3_WDLY_SHIFT)
-#define LCDCON3_WDLY_128 (0x03<<LCDCON3_WDLY_SHIFT)
-
-#define LCDC_LCDCON4 0x0c /* control 4 */
-#define LCDCON4_HPSW_SHIFT 0 /* TFT Hsync pulse width */
-#define LCDCON4_HPSW_MASK (0xff<<LCDCON4_HPSW_SHIFT)
-#define LCDCON4_WLH_SHIFT 0 /* STN VLINE high width */
-#define LCDCON4_WLH_MASK (0x03<<LCDCON4_WLH_SHIFT)
-#define LCDCON4_WLH_16 (0x00<<LCDCON4_WLH_SHIFT)
-#define LCDCON4_WLH_32 (0x01<<LCDCON4_WLH_SHIFT)
-#define LCDCON4_WLH_64 (0x02<<LCDCON4_WLH_SHIFT)
-#define LCDCON4_WLH_128 (0x03<<LCDCON4_WLH_SHIFT)
-
-#define LCDCON4_MVAL_SHIFT 8 /* STN VM toggle rate */
-#define LCDCON4_MVAL_MASK (0xff<<LCDCON4_MVAL_SHIFT)
-
-#define LCDC_LCDCON5 0x10 /* control 5 */
-#define LCDCON5_HWSWP (1<<0) /* half-word swap */
-#define LCDCON5_BSWP (1<<1) /* byte swap */
-#define LCDCON5_ENLEND (1<<2) /* TFT: enable LEND signal */
-#define LCDCON5_PWREN (1<<3) /* enable PWREN signale */
-#define LCDCON5_INVLEND (1<<4) /* TFT: LEND signal polarity */
-#define LCDCON5_INVPWREN (1<<5) /* PWREN signal polarity */
-#define LCDCON5_INVVDEN (1<<6) /* VDEN signal polarity */
-#define LCDCON5_INVVD (1<<7) /* video data signal polarity */
-#define LCDCON5_INVVFRAME (1<<8) /* VFRAME/VSYNC signal polarity */
-#define LCDCON5_INVVLINE (1<<9) /* VLINE/HSYNC signal polarity */
-#define LCDCON5_INVVCLK (1<<10) /* VCLK signal polarity */
-#define LCDCON5_INVVCLK_RISING LCDCON5_INVVCLK
-#define LCDCON5_INVVCLK_FALLING 0
-#define LCDCON5_FRM565 (1<<11) /* RGB:565 format*/
-#define LCDCON5_FRM555I 0 /* RGBI:5551 format */
-#define LCDCON5_BPP24BL (1<<12) /* bit order for bpp24 */
-
-#define LCDCON5_HSTATUS_SHIFT 17 /* TFT: horizontal status */
-#define LCDCON5_HSTATUS_MASK (0x03<<LCDCON5_HSTATUS_SHIFT)
-#define LCDCON5_HSTATUS_HSYNC (0x00<<LCDCON5_HSTATUS_SHIFT)
-#define LCDCON5_HSTATUS_BACKP (0x01<<LCDCON5_HSTATUS_SHIFT)
-#define LCDCON5_HSTATUS_ACTIVE (0x02<<LCDCON5_HSTATUS_SHIFT)
-#define LCDCON5_HSTATUS_FRONTP (0x03<<LCDCON5_HSTATUS_SHIFT)
-
-#define LCDCON5_VSTATUS_SHIFT 19 /* TFT: vertical status */
-#define LCDCON5_VSTATUS_MASK (0x03<<LCDCON5_VSTATUS_SHIFT)
-#define LCDCON5_VSTATUS_HSYNC (0x00<<LCDCON5_VSTATUS_SHIFT)
-#define LCDCON5_VSTATUS_BACKP (0x01<<LCDCON5_VSTATUS_SHIFT)
-#define LCDCON5_VSTATUS_ACTIVE (0x02<<LCDCON5_VSTATUS_SHIFT)
-#define LCDCON5_VSTATUS_FRONTP (0x03<<LCDCON5_VSTATUS_SHIFT)
-
-#define LCDC_LCDSADDR1 0x14 /* frame buffer start address */
-#define LCDC_LCDSADDR2 0x18
-#define LCDC_LCDSADDR3 0x1c
-#define LCDSADDR3_OFFSIZE_SHIFT 11
-#define LCDSADDR3_PAGEWIDTH_SHIFT 0
-
-#define LCDC_REDLUT 0x20 /* STN: red lookup table */
-#define LCDC_GREENLUT 0x24 /* STN: green lookup table */
-#define LCDC_BLUELUT 0x28 /* STN: blue lookup table */
-#define LCDC_DITHMODE 0x4c /* STN: dithering mode */
-
-#define LCDC_TPAL 0x50 /* TFT: temporary palette */
-#define TPAL_TPALEN (1<<24)
-#define TPAL_RED_SHIFT 16
-#define TPAL_GREEN_SHIFT 8
-#define TPAL_BLUE_SHIFT 0
-
-#define LCDC_LCDINTPND 0x54
-#define LCDC_LCDSRCPND 0x58
-#define LCDC_LCDINTMSK 0x5c
-#define LCDINT_FICNT (1<<0) /* FIFO trigger interrupt pending */
-#define LCDINT_FRSYN (1<<1) /* frame sync interrupt pending */
-#define LCDINT_FIWSEL (1<<2) /* FIFO trigger level: 1=8 words, 0=4 words*/
-
-#define LCDC_LPCSEL 0x60 /* LPC3600 mode */
-#define LPCSEL_LPC_EN (1<<0) /* enable LPC3600 mode */
-#define LPCSEL_RES_SEL (1<<1) /* 1=240x320 0=320x240 */
-#define LPCSEL_MODE_SEL (1<<2)
-#define LPCSEL_CPV_SEL (1<<3)
-
-
-#define LCDC_PALETTE 0x0400
-#define LCDC_PALETTE_SIZE 0x0400
-
-/* NAND Flash controller */
-#define NANDFC_NFCONF 0x00 /* Configuration */
-/* NANDFC_NFSTAT */
-#define NFSTAT_READY (1<<0) /* NAND flash memory ready/busy status */
-
-
-/* MMC/SD */
-#define SDI_CON 0x00
-#define CON_BYTEORDER (1<<4)
-#define CON_SDIO_INTR (1<<3)
-#define CON_READWAIT_EN (1<<2)
-#define CON_CLOCK_EN (1<<0)
-#define SDI_PRE 0x04
-#define SDI_CARG 0x08
-#define SDI_CCON 0x0c
-#define CCON_ABORDCMD (1<<12) /* Abort SDIO CMD12/52 */
-#define CCON_WITHDATA (1<<11) /* CMD with data */
-#define CCON_LONGRSP (1<<10) /* 136 bit response */
-#define CCON_WAITRSP (1<<9) /* Host waits for response */
-#define CCON_CMD_START (1<<8)
-#define CCON_CMDINDEX_MASK (0x7F) /* Command number index */
-#define SDI_CSTA 0x10
-#define CSTA_RSPCRCFAIL (1<<12)
-#define CSTA_CMDSENT (1<<11)
-#define CSTA_CMDTOUT (1<<10)
-#define CSTA_RSPFIN (1<<9)
-/* All the bits to be cleared */
-#define CSTA_ALL_CLEAR (CSTA_RSPCRCFAIL | CSTA_CMDSENT | \
- CSTA_CMDTOUT | CSTA_RSPFIN)
-#define CSTA_ERROR (CSTA_RSPCRCFAIL | CSTA_CMDTOUT)
-#define CSTA_CMDON (1<<8)
-#define SDI_RSP0 0x14
-#define SDI_RSP1 0x18
-#define SDI_RSP2 0x1c
-#define SDI_RSP3 0x20
-#define SDI_DTIMER 0x24
-#define SDI_BSIZE 0x28
-#define SDI_DCON 0x2c
-#define DCON_PRDTYPE (1<<21)
-#define DCON_TARSP (1<<20) /* Transmit after response */
-#define DCON_RACMD (1<<19) /* Receive after command */
-#define DCON_BACMD (1<<18) /* Busy after command */
-#define DCON_BLKMODE (1<<17) /* Stream/Block mode */
-#define DCON_WIDEBUS (1<<16) /* Standard/Wide bus */
-#define DCON_ENDMA (1<<15) /* DMA Enable */
-/* Determine the direction of the data transfer */
-#define DCON_DATA_READY (0<<12) /* No transfer */
-#define DCON_ONLYBUST (1<<12) /* Check if busy */
-#define DCON_DATA_RECEIVE (2<<12) /* Receive data from SD */
-#define DCON_DATA_TRANSMIT (3<<12) /* Send data to SD */
-#define DCON_BLKNUM_MASK (0x7FF) /* Block number */
-#define SDI_DCNT 0x30
-#define SDI_DSTA 0x34
-#define SDI_FSTA 0x38
-#define FSTA_TX_AVAIL (1<<13)
-#define FSTA_RX_AVAIL (1<<12)
-#define FSTA_TX_FIFO_HALF_FULL (1<<11)
-#define FSTA_TX_FIFO_EMPTY (1<<10)
-#define FSTA_RX_FIFO_LAST_DATA (1<<9)
-#define FSTA_RX_FIFO_FULL (1<<8)
-#define FSTA_RX_FIFO_HALF_FULL (1<<7)
-#define FSTA_FIFO_COUNT_MSK (0x7F)
-
-/* Timer */
-#define TIMER_TCFG0 0x00 /* Timer configuration */
-#define TIMER_TCFG1 0x04
-#define TCFG1_MUX_SHIFT(n) (4*(n))
-#define TCFG1_MUX_MASK(n) (0x0f << TCFG1_MUX_SHIFT(n))
-#define TCFG1_MUX_DIV2 0
-#define TCFG1_MUX_DIV4 1
-#define TCFG1_MUX_DIV8 2
-#define TCFG1_MUX_DIV16 3
-#define TCFG1_MUX_EXT 4
-#define TIMER_TCON 0x08 /* control */
-#define TCON_SHIFT(n) (4 * ((n)==0 ? 0 : (n)+1))
-#define TCON_START(n) (1 << TCON_SHIFT(n))
-#define TCON_MANUALUPDATE(n) (1 << (TCON_SHIFT(n) + 1))
-#define TCON_INVERTER(n) (1 << (TCON_SHIFT(n) + 2))
-#define __TCON_AUTORELOAD(n) (1 << (TCON_SHIFT(n) + 3)) /* n=0..3 */
-#define TCON_AUTORELOAD4 (1<<22) /* stupid hardware design */
-#define TCON_AUTORELOAD(n) \
- ((n)==4 ? TCON_AUTORELOAD4 : __TCON_AUTORELOAD(n))
-#define TCON_MASK(n) (0x0f << TCON_SHIFT(n))
-#define TIMER_TCNTB(n) (0x0c+0x0c*(n)) /* count buffer */
-#define TIMER_TCMPB(n) (0x10+0x0c*(n)) /* compare buffer */
-#define __TIMER_TCNTO(n) (0x14+0x0c*(n)) /* count observation */
-#define TIMER_TCNTO4 0x40
-#define TIMER_TCNTO(n) ((n)==4 ? TIMER_TCNTO4 : __TIMER_TCNTO(n))
-
-#define S3C24X0_TIMER_SIZE 0x44
-
-/* UART */
-/* diffs to s3c2800 */
-/* SSCOM_UMCON */
-#define UMCON_AFC (1<<4) /* auto flow control */
-/* SSCOM_UMSTAT */
-#define UMSTAT_DCTS (1<<2) /* CTS change */
-/* SSCOM_UMSTAT */
-#define ULCON_IR (1<<6)
-#define ULCON_PARITY_SHIFT 3
-
-#define S3C24X0_UART_SIZE 0x2c
-
-/* USB device */
-/* XXX */
-
-/* Watch dog timer */
-#define WDT_WTCON 0x00 /* WDT mode */
-#define WTCON_PRESCALE_SHIFT 8
-#define WTCON_PRESCALE (0xff<<WTCON_PRESCALE_SHIFT)
-#define WTCON_ENABLE (1<<5)
-#define WTCON_CLKSEL (3<<3)
-#define WTCON_CLKSEL_16 (0<<3)
-#define WTCON_CLKSEL_32 (1<<3)
-#define WTCON_CLKSEL_64 (2<<3)
-#define WTCON_CLKSEL_128 (3<<3)
-#define WTCON_ENINT (1<<2)
-#define WTCON_ENRST (1<<0)
-
-#define WTCON_WDTSTOP 0
-
-#define WDT_WTDAT 0x04 /* timer data */
-#define WDT_WTCNT 0x08 /* timer count */
-
-#define S3C24X0_WDT_SIZE 0x0c
-
-/* IIC */
-#define S3C24X0_IIC_SIZE 0x0c
-
-
-/* IIS */
-#define S3C24X0_IIS_SIZE 0x14
-
-/* GPIO */
-#define GPIO_PACON 0x00 /* port A configuration */
-#define GPIO_PADAT 0x04 /* port A data */
-
-#define GPIO_PBCON 0x10
-/* These are only used on port B-H on 2410 & B-H,J on 2440 */
-#define PCON_INPUT 0 /* Input port */
-#define PCON_OUTPUT 1 /* Output port */
-#define PCON_ALTFUN 2 /* Alternate function */
-#define PCON_ALTFUN2 3 /* Alternate function */
-#define GPIO_PBDAT 0x14
-/* This is different between 2440 and 2442 (pull up vs pull down): */
-#define GPIO_PBUP 0x18 /* 2410 & 2440 */
-#define GPIO_PBDOWN 0x18 /* 2442 */
-
-#define GPIO_PCCON 0x20
-#define GPIO_PCDAT 0x24
-#define GPIO_PCUP 0x28 /* 2410 & 2440 */
-#define GPIO_PCDOWN 0x28 /* 2442 */
-
-#define GPIO_PDCON 0x30
-#define GPIO_PDDAT 0x34
-#define GPIO_PDUP 0x38 /* 2410 & 2440 */
-#define GPIO_PDDOWN 0x38 /* 2442 */
-
-#define GPIO_PECON 0x40
-#define PECON_INPUT(x) (0<<((x)*2)) /* Pin is used for input */
-#define PECON_OUTPUT(x) (1<<((x)*2)) /* Pin is used for output */
-#define PECON_FUNC_A(x) (2<<((x)*2)) /* Pin is used for function 'A' */
-#define PECON_FUNC_B(x) (3<<((x)*2)) /* Pin is used for function 'B' */
-#define PECON_MASK(x) (3<<((x)*2))
-#define GPIO_PEDAT 0x44
-#define GPIO_PEUP 0x48 /* 2410 & 2440 */
-#define GPIO_PEDOWN 0x48 /* 2442 */
-#define PEUD_ENABLE(x) (~(1<<(x))) /* Enable the pull Up/Down */
-#define PEUD_DISABLE(x) (1<<(x)) /* Disable the pull Up/Down */
-
-#define GPIO_PFCON 0x50
-#define GPIO_PFDAT 0x54
-#define GPIO_PFUP 0x58 /* 2410 & 2440 */
-#define GPIO_PFDOWN 0x58 /* 2442 */
-
-#define GPIO_PGCON 0x60
-#define GPIO_PGDAT 0x64
-#define GPIO_PGUP 0x68 /* 2410 & 2440 */
-#define GPIO_PGDOWN 0x68 /* 2442 */
-
-#define GPIO_PHCON 0x70
-#define GPIO_PHDAT 0x74
-#define GPIO_PHUP 0x78 /* 2410 & 2440 */
-#define GPIO_PHDOWN 0x78 /* 2442 */
-
-#define GPIO_MISCCR 0x80 /* miscellaneous control */
-#define GPIO_DCLKCON 0x84 /* DCLK 0/1 */
-#define GPIO_EXTINT(n) (0x88+4*(n)) /* external int control 0/1/2 */
-#define GPIO_EINTFLT(n) (0x94+4*(n)) /* external int filter control 0..3 */
-#define EXTINTR_LOW 0x00
-#define EXTINTR_HIGH 0x01
-#define EXTINTR_FALLING 0x02
-#define EXTINTR_RISING 0x04
-#define EXTINTR_BOTH 0x06
-#define GPIO_EINTMASK 0xa4
-#define GPIO_EINTPEND 0xa8
-#define GPIO_GSTATUS0 0xac /* external pin status */
-#define GPIO_GSTATUS1 0xb0 /* Chip ID */
-#define CHIPID_S3C2410A 0x32410002
-#define CHIPID_S3C2440A 0x32440001
-#define CHIPID_S3C2442B 0x32440AAB
-#define GPIO_GSTATUS2 0xb4 /* Reset status */
-#define GPIO_GSTATUS3 0xb8
-#define GPIO_GSTATUS4 0xbc
-
-#define GPIO_SET_FUNC(v,port,func) \
- (((v) & ~(3<<(2*(port))))|((func)<<(2*(port))))
-
-/* ADC */
-#define ADC_ADCCON 0x00
-#define ADCCON_ENABLE_START (1<<0)
-#define ADCCON_READ_START (1<<1)
-#define ADCCON_STDBM (1<<2)
-#define ADCCON_SEL_MUX_SHIFT 3
-#define ADCCON_SEL_MUX_MASK (0x7<<ADCCON_SEL_MUX_SHIFT)
-#define ADCCON_PRSCVL_SHIFT 6
-#define ADCCON_PRSCVL_MASK (0xff<<ADCCON_PRSCVL_SHIFT)
-#define ADCCON_PRSCEN (1<<14)
-#define ADCCON_ECFLG (1<<15)
-
-#define ADC_ADCTSC 0x04
-#define ADCTSC_XY_PST 0x03
-#define ADCTSC_AUTO_PST (1<<2)
-#define ADCTSC_PULL_UP (1<<3)
-#define ADCTSC_XP_SEN (1<<4)
-#define ADCTSC_XM_SEN (1<<5)
-#define ADCTSC_YP_SEN (1<<6)
-#define ADCTSC_YM_SEN (1<<7)
-#define ADC_ADCDLY 0x08
-#define ADC_ADCDAT0 0x0c
-#define ADC_ADCDAT1 0x10
-
-#define ADCDAT_DATAMASK 0x3ff
-
-/* RTC */
-#define RTC_RTCCON 0x40
-#define RTCCON_RTCEN (1<<0)
-#define RTCCON_CLKSEL (1<<1)
-#define RTCCON_CNTSEL (1<<2)
-#define RTCCON_CLKRST (1<<3)
-#define RTC_TICNT0 0x44
-/* TICNT1 on 2440 */
-#define RTC_RTCALM 0x50
-#define RTC_ALMSEC 0x54
-#define RTC_ALMMIN 0x58
-#define RTC_ALMHOUR 0x5C
-#define RTC_ALMDATE 0x60
-#define RTC_ALMMON 0x64
-#define RTC_ALMYEAR 0x68
-/* RTCRST on 2410 */
-#define RTC_BCDSEC 0x70
-#define RTC_BCDMIN 0x74
-#define RTC_BCDHOUR 0x78
-#define RTC_BCDDATE 0x7C
-#define RTC_BCDDAY 0x80
-#define RTC_BCDMON 0x84
-#define RTC_BCDYEAR 0x88
-
-
-/* SPI */
-#define S3C24X0_SPI_SIZE 0x20
-
-#define SPI_SPCON 0x00
-#define SPCON_TAGD (1<<0) /* Tx auto garbage */
-#define SPCON_CPHA (1<<1)
-#define SPCON_CPOL (1<<2)
-#define SPCON_IDLELOW_RISING (0|0)
-#define SPCON_IDLELOW_FALLING (0|SPCON_CPHA)
-#define SPCON_IDLEHIGH_FALLING (SPCON_CPOL|0)
-#define SPCON_IDLEHIGH_RISING (SPCON_CPOL|SPCON_CPHA)
-#define SPCON_MSTR (1<<3)
-#define SPCON_ENSCK (1<<4)
-#define SPCON_SMOD_SHIFT 5
-#define SPCON_SMOD_MASK (0x03<<SPCON_SMOD_SHIFT)
-#define SPCON_SMOD_POLL (0x00<<SPCON_SMOD_SHIFT)
-#define SPCON_SMOD_INT (0x01<<SPCON_SMOD_SHIFT)
-#define SPCON_SMOD_DMA (0x02<<SPCON_SMOD_SHIFT)
-
-#define SPI_SPSTA 0x04 /* status register */
-#define SPSTA_REDY (1<<0) /* ready */
-#define SPSTA_MULF (1<<1) /* multi master error */
-#define SPSTA_DCOL (1<<2) /* Data collision error */
-
-#define SPI_SPPIN 0x08
-#define SPPIN_KEEP (1<<0)
-#define SPPIN_ENMUL (1<<2) /* multi master error detect */
-
-#define SPI_SPPRE 0x0c /* prescaler */
-#define SPI_SPTDAT 0x10 /* tx data */
-#define SPI_SPRDAT 0x14 /* rx data */
-
-
-#endif /* _ARM_S3C2XX0_S3C24X0REG_H_ */
diff --git a/sys/arm/samsung/s3c2xx0/s3c2xx0board.h b/sys/arm/samsung/s3c2xx0/s3c2xx0board.h
deleted file mode 100644
index 8a2c631..0000000
--- a/sys/arm/samsung/s3c2xx0/s3c2xx0board.h
+++ /dev/null
@@ -1,36 +0,0 @@
-/*-
- * Copyright (c) 2008 Warner Losh. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-/* $FreeBSD$ */
-
-#ifndef _ARM_S3C2XX0_S3C2XX0BOARD_H_
-#define _ARM_S3C2XX0_S3C2XX0BOARD_H_
-
-/*
- * These routines are expected to be provided by the board files.
- */
-long board_init(void);
-
-#endif /* _ARM_S3C2XX0_S3C2XX0BOARD_H_ */
diff --git a/sys/arm/samsung/s3c2xx0/s3c2xx0reg.h b/sys/arm/samsung/s3c2xx0/s3c2xx0reg.h
deleted file mode 100644
index 627c3ca..0000000
--- a/sys/arm/samsung/s3c2xx0/s3c2xx0reg.h
+++ /dev/null
@@ -1,139 +0,0 @@
-/* $NetBSD: s3c2xx0reg.h,v 1.4 2004/02/12 03:47:29 bsh Exp $ */
-
-/*-
- * Copyright (c) 2002, 2003 Fujitsu Component Limited
- * Copyright (c) 2002, 2003 Genetec Corporation
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of The Fujitsu Component Limited nor the name of
- * Genetec corporation may not be used to endorse or promote products
- * derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY FUJITSU COMPONENT LIMITED AND GENETEC
- * CORPORATION ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL FUJITSU COMPONENT LIMITED OR GENETEC
- * CORPORATION BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * $FreeBSD$
- */
-
-
-/*
- * Register definitions common to S3C2800 and S3C24[01]0
- */
-#ifndef _ARM_S3C2XX0_S3C2XX0REG_H_
-#define _ARM_S3C2XX0_S3C2XX0REG_H_
-
-/* UART */
-/*
- * S3C2800, 2410 and 2400 have a common built-in UART block. However,
- * there are small diffs in bit position of some registers.
- * Following definitions can be foune in s3c{2800,24x0}reg.h for
- * that reason.
- *
- * ULCON_IR (Infra-red mode)
- * ULCON_PARITY_SHIFT (Parity mode bit position)
- * UMCON_AFC (Auto flow control)
- * UMSTAT_DCTS (CTS change)
- */
-
-#define SSCOM_ULCON 0x00 /* UART line control */
-/* ULCON_PARITY_SHIFT and ULCON_IR is defined in s3c{2800,24x0}reg.h */
-#define ULCON_PARITY_NONE (0<<ULCON_PARITY_SHIFT)
-#define ULCON_PARITY_ODD (4<<ULCON_PARITY_SHIFT)
-#define ULCON_PARITY_EVEN (5<<ULCON_PARITY_SHIFT)
-#define ULCON_PARITY_ONE (6<<ULCON_PARITY_SHIFT)
-#define ULCON_PARITY_ZERO (7<<ULCON_PARITY_SHIFT)
-#define ULCON_STOP (1<<2)
-#define ULCON_LENGTH_5 0
-#define ULCON_LENGTH_6 1
-#define ULCON_LENGTH_7 2
-#define ULCON_LENGTH_8 3
-#define SSCOM_UCON 0x04 /* UART control */
-#define UCON_TXINT_TYPE (1<<9) /* Tx interrupt. 0=pulse,1=level */
-#define UCON_TXINT_TYPE_LEVEL UCON_TXINT_TYPE
-#define UCON_TXINT_TYPE_PULSE 0
-#define UCON_RXINT_TYPE (1<<8) /* Rx interrupt */
-#define UCON_RXINT_TYPE_LEVEL UCON_RXINT_TYPE
-#define UCON_RXINT_TYPE_PULSE 0
-#define UCON_TOINT (1<<7) /* Rx timeout interrupt */
-#define UCON_ERRINT (1<<6) /* receive error interrupt */
-#define UCON_LOOP (1<<5) /* loopback */
-#define UCON_SBREAK (1<<4) /* send break */
-#define UCON_TXMODE_DISABLE (0<<2)
-#define UCON_TXMODE_INT (1<<2)
-#define UCON_TXMODE_DMA (2<<2)
-#define UCON_TXMODE_MASK (3<<2)
-#define UCON_RXMODE_DISABLE (0<<0)
-#define UCON_RXMODE_INT (1<<0)
-#define UCON_RXMODE_DMA (2<<0)
-#define UCON_RXMODE_MASK (3<<0)
-#define SSCOM_UFCON 0x08 /* FIFO control */
-#define UFCON_TXTRIGGER_0 (0<<6)
-#define UFCON_TXTRIGGER_4 (1<<6)
-#define UFCON_TXTRIGGER_8 (2<<6)
-#define UFCON_TXTRIGGER_16 (3<<6)
-#define UFCON_RXTRIGGER_4 (0<<4)
-#define UFCON_RXTRIGGER_8 (1<<4)
-#define UFCON_RXTRIGGER_12 (2<<4)
-#define UFCON_RXTRIGGER_16 (3<<4)
-#define UFCON_TXFIFO_RESET (1<<2)
-#define UFCON_RXFIFO_RESET (1<<1)
-#define UFCON_FIFO_ENABLE (1<<0)
-#define SSCOM_UMCON 0x0c /* MODEM control */
-/* UMCON_AFC is defined in s3c{2800,24x0}reg.h */
-#define UMCON_RTS (1<<0) /* Request to send */
-#define SSCOM_UTRSTAT 0x10 /* Status register */
-#define UTRSTAT_TXSHIFTER_EMPTY (1<<2)
-#define UTRSTAT_TXEMPTY (1<<1) /* TX fifo or buffer empty */
-#define UTRSTAT_RXREADY (1<<0) /* RX fifo or buffer is not empty */
-#define SSCOM_UERSTAT 0x14 /* Error status register */
-#define UERSTAT_BREAK (1<<3) /* Break signal, not 2410 */
-#define UERSTAT_FRAME (1<<2) /* Frame error */
-#define UERSTAT_PARITY (1<<1) /* Parity error, not 2410 */
-#define UERSTAT_OVERRUN (1<<0) /* Overrun */
-#define UERSTAT_ALL_ERRORS \
- (UERSTAT_OVERRUN|UERSTAT_BREAK|UERSTAT_FRAME|UERSTAT_PARITY)
-#define SSCOM_UFSTAT 0x18 /* Fifo status register */
-#define UFSTAT_TXFULL (1<<9) /* Tx fifo full */
-#define UFSTAT_RXFULL (1<<8) /* Rx fifo full */
-#define UFSTAT_TXCOUNT_SHIFT 4 /* TX FIFO count */
-#define UFSTAT_TXCOUNT (0x0f<<UFSTAT_TXCOUNT_SHIFT)
-#define UFSTAT_RXCOUNT_SHIFT 0 /* RX FIFO count */
-#define UFSTAT_RXCOUNT (0x0f<<UFSTAT_RXCOUNT_SHIFT)
-#define SSCOM_UMSTAT 0x1c /* Modem status register */
-/* UMSTAT_DCTS is defined in s3c{2800,24x0}reg.h */
-#define UMSTAT_CTS (1<<0) /* Clear to send */
-#if _BYTE_ORDER == _LITTLE_ENDIAN
-#define SSCOM_UTXH 0x20 /* Transmit data register */
-#define SSCOM_URXH 0x24 /* Receive data register */
-#else
-#define SSCOM_UTXH 0x23 /* Transmit data register */
-#define SSCOM_URXH 0x27 /* Receive data register */
-#endif
-#define SSCOM_UBRDIV 0x28 /* baud-reate divisor */
-#define SSCOM_SIZE 0x2c
-
-/* Interrupt controller (Common to S3c2800/2400X/2410X) */
-#define INTCTL_SRCPND 0x00 /* Interrupt request status */
-#define INTCTL_INTMOD 0x04 /* Interrupt mode (FIQ/IRQ) */
-#define INTCTL_INTMSK 0x08 /* Interrupt mask */
-
-#endif /* _ARM_S3C2XX0_S3C2XX0REG_H_ */
diff --git a/sys/arm/samsung/s3c2xx0/s3c2xx0var.h b/sys/arm/samsung/s3c2xx0/s3c2xx0var.h
deleted file mode 100644
index 505c6b0..0000000
--- a/sys/arm/samsung/s3c2xx0/s3c2xx0var.h
+++ /dev/null
@@ -1,84 +0,0 @@
-/* $NetBSD: s3c2xx0var.h,v 1.3 2003/08/05 11:26:54 bsh Exp $ */
-
-/*-
- * Copyright (c) 2002 Fujitsu Component Limited
- * Copyright (c) 2002 Genetec Corporation
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of The Fujitsu Component Limited nor the name of
- * Genetec corporation may not be used to endorse or promote products
- * derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY FUJITSU COMPONENT LIMITED AND GENETEC
- * CORPORATION ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL FUJITSU COMPONENT LIMITED OR GENETEC
- * CORPORATION BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- *
- * $FreeBSD$
- */
-
-#ifndef _ARM_S3C2XX0VAR_H_
-#define _ARM_S3C2XX0VAR_H_
-
-#include <machine/bus.h>
-#include <sys/rman.h>
-
-typedef enum {
- CPU_S3C2410,
- CPU_S3C2440,
-} s3c2xx0_cpu;
-
-struct s3c2xx0_softc {
- device_t sc_dev;
-
- s3c2xx0_cpu sc_cpu;
-
- bus_space_tag_t sc_iot;
-
- bus_space_handle_t sc_intctl_ioh;
- bus_space_handle_t sc_gpio_ioh; /* GPIO */
- bus_space_handle_t sc_clkman_ioh; /* Clock manager */
- bus_space_handle_t sc_wdt_ioh; /* Watchdog Timer */
-
- bus_dma_tag_t sc_dmat;
-
- /* clock frequency */
- int sc_fclk; /* CPU clock */
- int sc_hclk; /* AHB bus clock */
- int sc_pclk; /* peripheral clock */
-
- struct rman s3c2xx0_irq_rman;
- struct rman s3c2xx0_mem_rman;
-};
-
-struct s3c2xx0_ivar {
- struct resource_list resources;
-};
-
-typedef void *s3c2xx0_chipset_tag_t;
-
-extern bus_space_tag_t s3c2xx0_bs_tag;
-extern struct s3c2xx0_softc *s3c2xx0_softc;
-extern struct arm32_bus_dma_tag s3c2xx0_bus_dma;
-
-/* Platform needs to provide this */
-bus_dma_tag_t s3c2xx0_bus_dma_init(struct arm32_bus_dma_tag *);
-
-#endif /* _ARM_S3C2XX0VAR_H_ */
diff --git a/sys/arm/samsung/s3c2xx0/std.ln2410sbc b/sys/arm/samsung/s3c2xx0/std.ln2410sbc
deleted file mode 100644
index 1f1143e..0000000
--- a/sys/arm/samsung/s3c2xx0/std.ln2410sbc
+++ /dev/null
@@ -1,10 +0,0 @@
-#$FreeBSD$
-include "../samsung/s3c2xx0/std.s3c2410"
-
-makeoptions KERNPHYSADDR=0x30000000
-makeoptions KERNVIRTADDR=0xc0000000
-options KERNPHYSADDR=0x30000000
-options KERNVIRTADDR=0xc0000000
-options PHYSADDR=0x30000000
-options NO_EVENTTIMERS
-
diff --git a/sys/arm/samsung/s3c2xx0/std.s3c2410 b/sys/arm/samsung/s3c2xx0/std.s3c2410
deleted file mode 100644
index 4f55b93..0000000
--- a/sys/arm/samsung/s3c2xx0/std.s3c2410
+++ /dev/null
@@ -1,8 +0,0 @@
-# $FreeBSD$
-
-files "../samsung/s3c2xx0/files.s3c2xx0"
-cpu CPU_ARM9
-machine arm
-
-makeoptions CONF_CFLAGS=-mcpu=arm920t
-options NO_EVENTTIMERS
diff --git a/sys/arm/samsung/s3c2xx0/uart_bus_s3c2410.c b/sys/arm/samsung/s3c2xx0/uart_bus_s3c2410.c
deleted file mode 100644
index 882a546..0000000
--- a/sys/arm/samsung/s3c2xx0/uart_bus_s3c2410.c
+++ /dev/null
@@ -1,60 +0,0 @@
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
-#include <sys/param.h>
-#include <sys/systm.h>
-#include <sys/bus.h>
-#include <sys/conf.h>
-#include <sys/kernel.h>
-#include <sys/module.h>
-#include <machine/bus.h>
-#include <sys/rman.h>
-#include <machine/resource.h>
-
-#include <dev/uart/uart.h>
-#include <dev/uart/uart_bus.h>
-#include <dev/uart/uart_cpu.h>
-
-#include <arm/samsung/s3c2xx0/s3c24x0reg.h>
-
-#include "uart_if.h"
-
-extern struct uart_class uart_s3c2410_class;
-
-static int uart_s3c2410_probe(device_t dev);
-
-static device_method_t uart_s3c2410_methods[] = {
- /* Device interface */
- DEVMETHOD(device_probe, uart_s3c2410_probe),
- DEVMETHOD(device_attach, uart_bus_attach),
- DEVMETHOD(device_detach, uart_bus_detach),
- { 0, 0 }
-};
-
-static driver_t uart_s3c2410_driver = {
- uart_driver_name,
- uart_s3c2410_methods,
- sizeof(struct uart_softc),
-};
-
-extern SLIST_HEAD(uart_devinfo_list, uart_devinfo) uart_sysdevs;
-static int
-uart_s3c2410_probe(device_t dev)
-{
- struct uart_devinfo *sysdev;
- struct uart_softc *sc;
- int unit;
-
- sc = device_get_softc(dev);
- sc->sc_class = &uart_s3c2410_class;
-
- unit = device_get_unit(dev);
- sysdev = SLIST_FIRST(&uart_sysdevs);
- if (S3C24X0_UART_BASE(unit) == sysdev->bas.bsh) {
- sc->sc_sysdev = sysdev;
- bcopy(&sc->sc_sysdev->bas, &sc->sc_bas, sizeof(sc->sc_bas));
- }
- return(uart_bus_probe(dev, 0, 0, 0, unit));
-}
-
-DRIVER_MODULE(uart, s3c24x0, uart_s3c2410_driver, uart_devclass, 0, 0);
diff --git a/sys/arm/samsung/s3c2xx0/uart_dev_s3c2410.c b/sys/arm/samsung/s3c2xx0/uart_dev_s3c2410.c
deleted file mode 100644
index cc0d59a..0000000
--- a/sys/arm/samsung/s3c2xx0/uart_dev_s3c2410.c
+++ /dev/null
@@ -1,406 +0,0 @@
-/*
- * Copyright (c) 2003 Marcel Moolenaar
- * Copyright (c) 2007-2009 Andrew Turner
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
-#include <sys/param.h>
-#include <sys/systm.h>
-#include <sys/bus.h>
-#include <sys/conf.h>
-#include <sys/cons.h>
-#include <sys/tty.h>
-#include <sys/rman.h>
-#include <machine/bus.h>
-#include <machine/intr.h>
-
-#include <dev/uart/uart.h>
-#include <dev/uart/uart_cpu.h>
-#include <dev/uart/uart_bus.h>
-#include <arm/samsung/s3c2xx0/s3c2440reg.h>
-#include <arm/samsung/s3c2xx0/uart_dev_s3c2410.h>
-#include <arm/samsung/s3c2xx0/s3c2xx0reg.h>
-#include <arm/samsung/s3c2xx0/s3c2xx0var.h>
-#include "uart_if.h"
-
-/* Finds the subirq from the parent */
-#define get_sub_irq(parent, offset) \
- ((parent == S3C24X0_INT_UART0) ? S3C24X0_SUBIRQ_MIN + offset : \
- ((parent == S3C24X0_INT_UART1) ? S3C24X0_SUBIRQ_MIN + 3 + offset : \
- S3C24X0_SUBIRQ_MIN + 6 + offset))
-#define RX_OFF 0
-#define TX_OFF 1
-#define ERR_OFF 2
-
-extern unsigned int s3c2410_pclk;
-
-static int sscomspeed(long, long);
-static int s3c24x0_uart_param(struct uart_bas *, int, int, int, int);
-
-/*
- * Low-level UART interface.
- */
-static int s3c2410_probe(struct uart_bas *bas);
-static void s3c2410_init(struct uart_bas *bas, int, int, int, int);
-static void s3c2410_term(struct uart_bas *bas);
-static void s3c2410_putc(struct uart_bas *bas, int);
-static int s3c2410_rxready(struct uart_bas *bas);
-static int s3c2410_getc(struct uart_bas *bas, struct mtx *mtx);
-
-extern SLIST_HEAD(uart_devinfo_list, uart_devinfo) uart_sysdevs;
-
-static int
-sscomspeed(long speed, long frequency)
-{
- int x;
-
- if (speed <= 0 || frequency <= 0)
- return -1;
- x = (frequency / 16) / speed;
- return x-1;
-}
-
-static int
-s3c24x0_uart_param(struct uart_bas *bas, int baudrate, int databits,
- int stopbits, int parity)
-{
- int brd, ulcon;
-
- ulcon = 0;
-
- switch(databits) {
- case 5:
- ulcon |= ULCON_LENGTH_5;
- break;
- case 6:
- ulcon |= ULCON_LENGTH_6;
- break;
- case 7:
- ulcon |= ULCON_LENGTH_7;
- break;
- case 8:
- ulcon |= ULCON_LENGTH_8;
- break;
- default:
- return (EINVAL);
- }
-
- switch (parity) {
- case UART_PARITY_NONE:
- ulcon |= ULCON_PARITY_NONE;
- break;
- case UART_PARITY_ODD:
- ulcon |= ULCON_PARITY_ODD;
- break;
- case UART_PARITY_EVEN:
- ulcon |= ULCON_PARITY_EVEN;
- break;
- case UART_PARITY_MARK:
- case UART_PARITY_SPACE:
- default:
- return (EINVAL);
- }
-
- if (stopbits == 2)
- ulcon |= ULCON_STOP;
-
- uart_setreg(bas, SSCOM_ULCON, ulcon);
-
- brd = sscomspeed(baudrate, bas->rclk);
- uart_setreg(bas, SSCOM_UBRDIV, brd);
-
- return (0);
-}
-
-struct uart_ops uart_s3c2410_ops = {
- .probe = s3c2410_probe,
- .init = s3c2410_init,
- .term = s3c2410_term,
- .putc = s3c2410_putc,
- .rxready = s3c2410_rxready,
- .getc = s3c2410_getc,
-};
-
-static int
-s3c2410_probe(struct uart_bas *bas)
-{
- return (0);
-}
-
-static void
-s3c2410_init(struct uart_bas *bas, int baudrate, int databits, int stopbits,
- int parity)
-{
- if (bas->rclk == 0)
- bas->rclk = s3c2410_pclk;
- KASSERT(bas->rclk != 0, ("s3c2410_init: Invalid rclk"));
-
- uart_setreg(bas, SSCOM_UCON, 0);
- uart_setreg(bas, SSCOM_UFCON,
- UFCON_TXTRIGGER_8 | UFCON_RXTRIGGER_8 |
- UFCON_TXFIFO_RESET | UFCON_RXFIFO_RESET |
- UFCON_FIFO_ENABLE);
- s3c24x0_uart_param(bas, baudrate, databits, stopbits, parity);
-
- /* Enable UART. */
- uart_setreg(bas, SSCOM_UCON, UCON_TXMODE_INT | UCON_RXMODE_INT |
- UCON_TOINT);
- uart_setreg(bas, SSCOM_UMCON, UMCON_RTS);
-}
-
-static void
-s3c2410_term(struct uart_bas *bas)
-{
- /* XXX */
-}
-
-static void
-s3c2410_putc(struct uart_bas *bas, int c)
-{
- while ((bus_space_read_4(bas->bst, bas->bsh, SSCOM_UFSTAT) &
- UFSTAT_TXFULL) == UFSTAT_TXFULL)
- continue;
-
- uart_setreg(bas, SSCOM_UTXH, c);
-}
-
-static int
-s3c2410_rxready(struct uart_bas *bas)
-{
- return ((uart_getreg(bas, SSCOM_UTRSTAT) & UTRSTAT_RXREADY) ==
- UTRSTAT_RXREADY);
-}
-
-static int
-s3c2410_getc(struct uart_bas *bas, struct mtx *mtx)
-{
- while (!sscom_rxrdy(bas->bst, bas->bsh))
- continue;
-
- return sscom_getc(bas->bst, bas->bsh);
-}
-static int s3c2410_bus_probe(struct uart_softc *sc);
-static int s3c2410_bus_attach(struct uart_softc *sc);
-static int s3c2410_bus_flush(struct uart_softc *, int);
-static int s3c2410_bus_getsig(struct uart_softc *);
-static int s3c2410_bus_ioctl(struct uart_softc *, int, intptr_t);
-static int s3c2410_bus_ipend(struct uart_softc *);
-static int s3c2410_bus_param(struct uart_softc *, int, int, int, int);
-static int s3c2410_bus_receive(struct uart_softc *);
-static int s3c2410_bus_setsig(struct uart_softc *, int);
-static int s3c2410_bus_transmit(struct uart_softc *);
-static void s3c2410_bus_grab(struct uart_softc *);
-static void s3c2410_bus_ungrab(struct uart_softc *);
-
-static kobj_method_t s3c2410_methods[] = {
- KOBJMETHOD(uart_probe, s3c2410_bus_probe),
- KOBJMETHOD(uart_attach, s3c2410_bus_attach),
- KOBJMETHOD(uart_flush, s3c2410_bus_flush),
- KOBJMETHOD(uart_getsig, s3c2410_bus_getsig),
- KOBJMETHOD(uart_ioctl, s3c2410_bus_ioctl),
- KOBJMETHOD(uart_ipend, s3c2410_bus_ipend),
- KOBJMETHOD(uart_param, s3c2410_bus_param),
- KOBJMETHOD(uart_receive, s3c2410_bus_receive),
- KOBJMETHOD(uart_setsig, s3c2410_bus_setsig),
- KOBJMETHOD(uart_transmit, s3c2410_bus_transmit),
- KOBJMETHOD(uart_grab, s3c2410_bus_grab),
- KOBJMETHOD(uart_ungrab, s3c2410_bus_ungrab),
-
- {0, 0 }
-};
-
-int
-s3c2410_bus_probe(struct uart_softc *sc)
-{
- switch(s3c2xx0_softc->sc_cpu) {
- case CPU_S3C2410:
- sc->sc_txfifosz = 16;
- sc->sc_rxfifosz = 16;
- break;
- case CPU_S3C2440:
- sc->sc_txfifosz = 64;
- sc->sc_rxfifosz = 64;
- break;
- default:
- return (ENXIO);
- }
-
- return (0);
-}
-
-static int
-s3c2410_bus_attach(struct uart_softc *sc)
-{
- uintptr_t irq;
-
- sc->sc_hwiflow = 0;
- sc->sc_hwoflow = 0;
-
- irq = rman_get_start(sc->sc_ires);
- arm_unmask_irq(irq);
- arm_unmask_irq(get_sub_irq(irq, RX_OFF));
- arm_unmask_irq(get_sub_irq(irq, TX_OFF));
- arm_unmask_irq(get_sub_irq(irq, ERR_OFF));
-
- return (0);
-}
-
-static int
-s3c2410_bus_transmit(struct uart_softc *sc)
-{
- uintptr_t irq;
-
- uart_lock(sc->sc_hwmtx);
-
- for (int i = 0; i < sc->sc_txdatasz; i++) {
- s3c2410_putc(&sc->sc_bas, sc->sc_txbuf[i]);
- uart_barrier(&sc->sc_bas);
- }
-
- sc->sc_txbusy = 1;
-
- uart_unlock(sc->sc_hwmtx);
-
- irq = rman_get_start(sc->sc_ires);
- arm_unmask_irq(get_sub_irq(irq, TX_OFF));
-
- return (0);
-}
-
-static int
-s3c2410_bus_setsig(struct uart_softc *sc, int sig)
-{
- return (0);
-}
-
-static int
-s3c2410_bus_receive(struct uart_softc *sc)
-{
-
- uart_rx_put(sc, uart_getreg(&sc->sc_bas, SSCOM_URXH));
- return (0);
-}
-
-static int
-s3c2410_bus_param(struct uart_softc *sc, int baudrate, int databits,
- int stopbits, int parity)
-{
- int error;
-
- if (sc->sc_bas.rclk == 0)
- sc->sc_bas.rclk = s3c2410_pclk;
- KASSERT(sc->sc_bas.rclk != 0, ("s3c2410_init: Invalid rclk"));
-
- uart_lock(sc->sc_hwmtx);
- error = s3c24x0_uart_param(&sc->sc_bas, baudrate, databits, stopbits,
- parity);
- uart_unlock(sc->sc_hwmtx);
-
- return (error);
-}
-
-static int
-s3c2410_bus_ipend(struct uart_softc *sc)
-{
- uint32_t ufstat, txmask, rxmask;
- uintptr_t irq;
- int ipend = 0;
-
- uart_lock(sc->sc_hwmtx);
- ufstat = bus_space_read_4(sc->sc_bas.bst, sc->sc_bas.bsh, SSCOM_UFSTAT);
- uart_unlock(sc->sc_hwmtx);
-
- txmask = rxmask = 0;
- switch (s3c2xx0_softc->sc_cpu) {
- case CPU_S3C2410:
- txmask = UFSTAT_TXCOUNT;
- rxmask = UFSTAT_RXCOUNT;
- break;
- case CPU_S3C2440:
- txmask = S3C2440_UFSTAT_TXCOUNT;
- rxmask = S3C2440_UFSTAT_RXCOUNT;
- break;
- }
- if ((ufstat & txmask) == 0) {
- if (sc->sc_txbusy != 0)
- ipend |= SER_INT_TXIDLE;
- irq = rman_get_start(sc->sc_ires);
- arm_mask_irq(get_sub_irq(irq, TX_OFF));
- }
- if ((ufstat & rxmask) > 0) {
- ipend |= SER_INT_RXREADY;
- }
-
- return (ipend);
-}
-
-static int
-s3c2410_bus_flush(struct uart_softc *sc, int what)
-{
- return (0);
-}
-
-static int
-s3c2410_bus_getsig(struct uart_softc *sc)
-{
- return (0);
-}
-
-static int
-s3c2410_bus_ioctl(struct uart_softc *sc, int request, intptr_t data)
-{
- return (EINVAL);
-}
-
-
-static void
-s3c2410_bus_grab(struct uart_softc *sc)
-{
- uintptr_t irq;
-
- irq = rman_get_start(sc->sc_ires);
- arm_mask_irq(get_sub_irq(irq, RX_OFF));
-}
-
-static void
-s3c2410_bus_ungrab(struct uart_softc *sc)
-{
- uintptr_t irq;
-
- irq = rman_get_start(sc->sc_ires);
- arm_unmask_irq(get_sub_irq(irq, RX_OFF));
-}
-
-struct uart_class uart_s3c2410_class = {
- "s3c2410 class",
- s3c2410_methods,
- 1,
- .uc_ops = &uart_s3c2410_ops,
- .uc_range = 8,
- .uc_rclk = 0,
- .uc_rshift = 0
-};
diff --git a/sys/arm/samsung/s3c2xx0/uart_dev_s3c2410.h b/sys/arm/samsung/s3c2xx0/uart_dev_s3c2410.h
deleted file mode 100644
index 5479796..0000000
--- a/sys/arm/samsung/s3c2xx0/uart_dev_s3c2410.h
+++ /dev/null
@@ -1,88 +0,0 @@
-/* $NetBSD: sscom_var.h,v 1.5 2003/08/04 12:28:49 bsh Exp $ */
-
-/*-
- * Copyright (c) 2002, 2003 Fujitsu Component Limited
- * Copyright (c) 2002, 2003 Genetec Corporation
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of The Fujitsu Component Limited nor the name of
- * Genetec corporation may not be used to endorse or promote products
- * derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY FUJITSU COMPONENT LIMITED AND GENETEC
- * CORPORATION ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
- * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL FUJITSU COMPONENT LIMITED OR GENETEC
- * CORPORATION BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
- * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
- * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
- * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-/* derived from sys/dev/ic/comvar.h */
-
-/*-
- * Copyright (c) 1996 Christopher G. Demetriou. All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. All advertising materials mentioning features or use of this software
- * must display the following acknowledgement:
- * This product includes software developed by Christopher G. Demetriou
- * for the NetBSD Project.
- * 4. The name of the author may not be used to endorse or promote products
- * derived from this software without specific prior written permission
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * $FreeBSD$
- */
-
-#ifndef _ARM_S3C2XX0_SSCOM_VAR_H
-#define _ARM_S3C2XX0_SSCOM_VAR_H
-
-
-/* Hardware flag masks */
-#define SSCOM_HW_FLOW 0x02
-#define SSCOM_HW_DEV_OK 0x04
-#define SSCOM_HW_CONSOLE 0x08
-#define SSCOM_HW_KGDB 0x10
-#define SSCOM_HW_TXINT 0x20
-#define SSCOM_HW_RXINT 0x40
-
-/* Buffer size for character buffer */
-#define SSCOM_RING_SIZE 2048
-
-#define sscom_rxrdy(iot,ioh) \
- (bus_space_read_1((iot), (ioh), SSCOM_UTRSTAT) & UTRSTAT_RXREADY)
-#define sscom_getc(iot,ioh) bus_space_read_1((iot), (ioh), SSCOM_URXH)
-#define sscom_geterr(iot,ioh) bus_space_read_1((iot), (ioh), SSCOM_UERSTAT)
-
-#endif /* _ARM_S3C2XX0_SSCOM_VAR_H */
diff --git a/sys/arm/ti/am335x/am335x_pmic.c b/sys/arm/ti/am335x/am335x_pmic.c
index eefece8..8bb272b 100644
--- a/sys/arm/ti/am335x/am335x_pmic.c
+++ b/sys/arm/ti/am335x/am335x_pmic.c
@@ -147,7 +147,7 @@ am335x_pmic_probe(device_t dev)
sc = device_get_softc(dev);
sc->sc_dev = dev;
/* Convert to 8-bit addressing */
- sc->sc_addr = iicbus_get_addr(dev) << 1;
+ sc->sc_addr = iicbus_get_addr(dev);
device_set_desc(dev, "TI TPS65217 Power Management IC");
diff --git a/sys/arm/ti/am335x/tda19988.c b/sys/arm/ti/am335x/tda19988.c
index 18bc18b..c77874d 100644
--- a/sys/arm/ti/am335x/tda19988.c
+++ b/sys/arm/ti/am335x/tda19988.c
@@ -731,7 +731,7 @@ tda19988_attach(device_t dev)
sc = device_get_softc(dev);
sc->sc_dev = dev;
- sc->sc_addr = iicbus_get_addr(dev) << 1;
+ sc->sc_addr = iicbus_get_addr(dev);
sc->sc_cec_addr = (0x34 << 1); /* hardcoded */
sc->sc_edid = malloc(EDID_LENGTH, M_DEVBUF, M_WAITOK | M_ZERO);
sc->sc_edid_len = EDID_LENGTH;
diff --git a/sys/arm64/arm64/busdma_bounce.c b/sys/arm64/arm64/busdma_bounce.c
index 477c819..cd0c087 100644
--- a/sys/arm64/arm64/busdma_bounce.c
+++ b/sys/arm64/arm64/busdma_bounce.c
@@ -78,7 +78,8 @@ struct bounce_page {
vm_offset_t vaddr; /* kva of bounce buffer */
bus_addr_t busaddr; /* Physical address */
vm_offset_t datavaddr; /* kva of client data */
- bus_addr_t dataaddr; /* client physical address */
+ vm_page_t datapage; /* physical page of client data */
+ vm_offset_t dataoffs; /* page offset of client data */
bus_size_t datacount; /* client data count */
STAILQ_ENTRY(bounce_page) links;
};
@@ -478,7 +479,8 @@ _bus_dmamap_count_phys(bus_dma_tag_t dmat, bus_dmamap_t map, vm_paddr_t buf,
while (buflen != 0) {
sgsize = MIN(buflen, dmat->common.maxsegsz);
if (bus_dma_run_filter(&dmat->common, curaddr)) {
- sgsize = MIN(sgsize, PAGE_SIZE);
+ sgsize = MIN(sgsize,
+ PAGE_SIZE - (curaddr & PAGE_MASK));
map->pagesneeded++;
}
curaddr += sgsize;
@@ -632,7 +634,7 @@ bounce_bus_dmamap_load_phys(bus_dma_tag_t dmat, bus_dmamap_t map,
if (((dmat->bounce_flags & BUS_DMA_COULD_BOUNCE) != 0) &&
map->pagesneeded != 0 &&
bus_dma_run_filter(&dmat->common, curaddr)) {
- sgsize = MIN(sgsize, PAGE_SIZE);
+ sgsize = MIN(sgsize, PAGE_SIZE - (curaddr & PAGE_MASK));
curaddr = add_bounce_page(dmat, map, 0, curaddr,
sgsize);
}
@@ -661,7 +663,7 @@ bounce_bus_dmamap_load_buffer(bus_dma_tag_t dmat, bus_dmamap_t map, void *buf,
{
bus_size_t sgsize, max_sgsize;
bus_addr_t curaddr;
- vm_offset_t vaddr;
+ vm_offset_t kvaddr, vaddr;
int error;
if (map == NULL)
@@ -684,22 +686,25 @@ bounce_bus_dmamap_load_buffer(bus_dma_tag_t dmat, bus_dmamap_t map, void *buf,
/*
* Get the physical address for this segment.
*/
- if (pmap == kernel_pmap)
+ if (pmap == kernel_pmap) {
curaddr = pmap_kextract(vaddr);
- else
+ kvaddr = vaddr;
+ } else {
curaddr = pmap_extract(pmap, vaddr);
+ kvaddr = 0;
+ }
/*
* Compute the segment size, and adjust counts.
*/
max_sgsize = MIN(buflen, dmat->common.maxsegsz);
- sgsize = PAGE_SIZE - ((vm_offset_t)curaddr & PAGE_MASK);
+ sgsize = PAGE_SIZE - (curaddr & PAGE_MASK);
if (((dmat->bounce_flags & BUS_DMA_COULD_BOUNCE) != 0) &&
map->pagesneeded != 0 &&
bus_dma_run_filter(&dmat->common, curaddr)) {
sgsize = roundup2(sgsize, dmat->common.alignment);
sgsize = MIN(sgsize, max_sgsize);
- curaddr = add_bounce_page(dmat, map, vaddr, curaddr,
+ curaddr = add_bounce_page(dmat, map, kvaddr, curaddr,
sgsize);
} else {
sgsize = MIN(sgsize, max_sgsize);
@@ -760,6 +765,10 @@ bounce_bus_dmamap_sync(bus_dma_tag_t dmat, bus_dmamap_t map,
bus_dmasync_op_t op)
{
struct bounce_page *bpage;
+ vm_offset_t datavaddr, tempvaddr;
+
+ if ((bpage = STAILQ_FIRST(&map->bpages)) == NULL)
+ return;
/*
* XXX ARM64TODO:
@@ -768,47 +777,47 @@ bounce_bus_dmamap_sync(bus_dma_tag_t dmat, bus_dmamap_t map,
* added to this function.
*/
- if ((bpage = STAILQ_FIRST(&map->bpages)) != NULL) {
- /*
- * Handle data bouncing. We might also
- * want to add support for invalidating
- * the caches on broken hardware
- */
- CTR4(KTR_BUSDMA, "%s: tag %p tag flags 0x%x op 0x%x "
- "performing bounce", __func__, dmat,
- dmat->common.flags, op);
-
- if ((op & BUS_DMASYNC_PREWRITE) != 0) {
- while (bpage != NULL) {
- if (bpage->datavaddr != 0) {
- bcopy((void *)bpage->datavaddr,
- (void *)bpage->vaddr,
- bpage->datacount);
- } else {
- physcopyout(bpage->dataaddr,
- (void *)bpage->vaddr,
- bpage->datacount);
- }
- bpage = STAILQ_NEXT(bpage, links);
+ CTR4(KTR_BUSDMA, "%s: tag %p tag flags 0x%x op 0x%x "
+ "performing bounce", __func__, dmat, dmat->common.flags, op);
+
+ if ((op & BUS_DMASYNC_PREWRITE) != 0) {
+ while (bpage != NULL) {
+ tempvaddr = 0;
+ datavaddr = bpage->datavaddr;
+ if (datavaddr == 0) {
+ tempvaddr =
+ pmap_quick_enter_page(bpage->datapage);
+ datavaddr = tempvaddr | bpage->dataoffs;
}
- dmat->bounce_zone->total_bounced++;
+
+ bcopy((void *)datavaddr,
+ (void *)bpage->vaddr, bpage->datacount);
+
+ if (tempvaddr != 0)
+ pmap_quick_remove_page(tempvaddr);
+ bpage = STAILQ_NEXT(bpage, links);
}
+ dmat->bounce_zone->total_bounced++;
+ }
- if ((op & BUS_DMASYNC_POSTREAD) != 0) {
- while (bpage != NULL) {
- if (bpage->datavaddr != 0) {
- bcopy((void *)bpage->vaddr,
- (void *)bpage->datavaddr,
- bpage->datacount);
- } else {
- physcopyin((void *)bpage->vaddr,
- bpage->dataaddr,
- bpage->datacount);
- }
- bpage = STAILQ_NEXT(bpage, links);
+ if ((op & BUS_DMASYNC_POSTREAD) != 0) {
+ while (bpage != NULL) {
+ tempvaddr = 0;
+ datavaddr = bpage->datavaddr;
+ if (datavaddr == 0) {
+ tempvaddr =
+ pmap_quick_enter_page(bpage->datapage);
+ datavaddr = tempvaddr | bpage->dataoffs;
}
- dmat->bounce_zone->total_bounced++;
+
+ bcopy((void *)bpage->vaddr,
+ (void *)datavaddr, bpage->datacount);
+
+ if (tempvaddr != 0)
+ pmap_quick_remove_page(tempvaddr);
+ bpage = STAILQ_NEXT(bpage, links);
}
+ dmat->bounce_zone->total_bounced++;
}
}
@@ -1000,7 +1009,8 @@ add_bounce_page(bus_dma_tag_t dmat, bus_dmamap_t map, vm_offset_t vaddr,
bpage->busaddr |= addr & PAGE_MASK;
}
bpage->datavaddr = vaddr;
- bpage->dataaddr = addr;
+ bpage->datapage = PHYS_TO_VM_PAGE(addr);
+ bpage->dataoffs = addr & PAGE_MASK;
bpage->datacount = size;
STAILQ_INSERT_TAIL(&(map->bpages), bpage, links);
return (bpage->busaddr);
diff --git a/sys/arm64/arm64/gic_v3_its.c b/sys/arm64/arm64/gic_v3_its.c
index cb8a488..e4d2de9 100644
--- a/sys/arm64/arm64/gic_v3_its.c
+++ b/sys/arm64/arm64/gic_v3_its.c
@@ -59,6 +59,8 @@ __FBSDID("$FreeBSD$");
#include "gic_v3_reg.h"
#include "gic_v3_var.h"
+#define GIC_V3_ITS_QUIRK_THUNDERX_PEM_BUS_OFFSET 144
+
#include "pic_if.h"
/* Device and PIC methods */
@@ -1475,8 +1477,8 @@ its_get_devid_thunder(device_t pci_dev)
bsf = PCI_RID(pci_get_bus(pci_dev), pci_get_slot(pci_dev),
pci_get_function(pci_dev));
- /* ECAM is on bus=0 */
- if (bus == 0) {
+ /* Check if accessing internal PCIe (low bus numbers) */
+ if (bus < GIC_V3_ITS_QUIRK_THUNDERX_PEM_BUS_OFFSET) {
return ((pci_get_domain(pci_dev) << PCI_RID_DOMAIN_SHIFT) |
bsf);
/* PEM otherwise */
diff --git a/sys/arm64/arm64/locore.S b/sys/arm64/arm64/locore.S
index 204306d..5a61c4a 100644
--- a/sys/arm64/arm64/locore.S
+++ b/sys/arm64/arm64/locore.S
@@ -100,6 +100,16 @@ _start:
br x15
virtdone:
+ /*
+ * Now that we are in virtual address space,
+ * we don't need the identity mapping in TTBR0 and
+ * can set the TCR to a more useful value.
+ */
+ ldr x2, tcr
+ mrs x3, id_aa64mmfr0_el1
+ bfi x2, x3, #32, #3
+ msr tcr_el1, x2
+
/* Set up the stack */
adr x25, initstack_end
mov sp, x25
@@ -167,7 +177,7 @@ ENTRY(mpentry)
/* Load the kernel page table */
adr x26, pagetable_l1_ttbr1
/* Load the identity page table */
- adr x27, pagetable_l1_ttbr0
+ adr x27, pagetable_l0_ttbr0
/* Enable the mmu */
bl start_mmu
@@ -177,6 +187,16 @@ ENTRY(mpentry)
br x15
mp_virtdone:
+ /*
+ * Now that we are in virtual address space,
+ * we don't need the identity mapping in TTBR0 and
+ * can set the TCR to a more useful value.
+ */
+ ldr x2, tcr
+ mrs x3, id_aa64mmfr0_el1
+ bfi x2, x3, #32, #3
+ msr tcr_el1, x2
+
ldr x4, =secondary_stacks
mov x5, #(PAGE_SIZE * KSTACK_PAGES)
mul x5, x0, x5
@@ -373,9 +393,9 @@ create_pagetables:
*/
add x27, x26, #PAGE_SIZE
+ mov x6, x27 /* The initial page table */
#if defined(SOCDEV_PA) && defined(SOCDEV_VA)
/* Create a table for the UART */
- mov x6, x27 /* The initial page table */
mov x7, #DEVICE_MEM
mov x8, #(SOCDEV_VA) /* VA start */
mov x9, #(SOCDEV_PA) /* PA start */
@@ -384,18 +404,56 @@ create_pagetables:
#endif
/* Create the VA = PA map */
- mov x6, x27 /* The initial page table */
mov x7, #NORMAL_UNCACHED /* Uncached as it's only needed early on */
mov x9, x27
mov x8, x9 /* VA start (== PA start) */
mov x10, #1
bl build_l1_block_pagetable
+ /* Move to the l0 table */
+ add x27, x27, #PAGE_SIZE
+
+ /* Link the l0 -> l1 table */
+ mov x9, x6
+ mov x6, x27
+ bl link_l0_pagetable
+
/* Restore the Link register */
mov x30, x5
ret
/*
+ * Builds an L0 -> L1 table descriptor
+ *
+ * This is a link for a 512GiB block of memory with up to 1GiB regions mapped
+ * within it by build_l1_block_pagetable.
+ *
+ * x6 = L0 table
+ * x8 = Virtual Address
+ * x9 = L1 PA (trashed)
+ * x11, x12 and x13 are trashed
+ */
+link_l0_pagetable:
+ /*
+ * Link an L0 -> L1 table entry.
+ */
+ /* Find the table index */
+ lsr x11, x8, #L0_SHIFT
+ and x11, x11, #Ln_ADDR_MASK
+
+ /* Build the L0 block entry */
+ mov x12, #L0_TABLE
+
+ /* Only use the output address bits */
+ lsr x9, x9, #12
+ orr x12, x12, x9, lsl #12
+
+ /* Store the entry */
+ str x12, [x6, x11, lsl #3]
+
+ ret
+
+/*
* Builds an L1 -> L2 table descriptor
*
* This is a link for a 1GiB block of memory with up to 2MiB regions mapped
@@ -535,8 +593,13 @@ start_mmu:
ldr x2, mair
msr mair_el1, x2
- /* Setup TCR according to PARange bits from ID_AA64MMFR0_EL1 */
- ldr x2, tcr
+ /*
+ * Setup TCR according to PARange bits from ID_AA64MMFR0_EL1.
+ * Some machines have physical memory mapped >512GiB, which can not
+ * be identity-mapped using the default 39 VA bits. Thus, use
+ * 48 VA bits for now and switch back to 39 after the VA jump.
+ */
+ ldr x2, tcr_early
mrs x3, id_aa64mmfr0_el1
bfi x2, x3, #32, #3
msr tcr_el1, x2
@@ -559,6 +622,9 @@ mair:
tcr:
.quad (TCR_TxSZ(64 - VIRT_BITS) | TCR_ASID_16 | TCR_TG1_4K | \
TCR_CACHE_ATTRS | TCR_SMP_ATTRS)
+tcr_early:
+ .quad (TCR_T1SZ(64 - VIRT_BITS) | TCR_T0SZ(64 - 48) | \
+ TCR_ASID_16 | TCR_TG1_4K | TCR_CACHE_ATTRS | TCR_SMP_ATTRS)
sctlr_set:
/* Bits to set */
.quad (SCTLR_UCI | SCTLR_nTWE | SCTLR_nTWI | SCTLR_UCT | SCTLR_DZE | \
@@ -586,6 +652,8 @@ pagetable_l1_ttbr1:
.space PAGE_SIZE
pagetable_l1_ttbr0:
.space PAGE_SIZE
+pagetable_l0_ttbr0:
+ .space PAGE_SIZE
pagetable_end:
el2_pagetable:
diff --git a/sys/arm64/arm64/trap.c b/sys/arm64/arm64/trap.c
index a29f915..b7db974 100644
--- a/sys/arm64/arm64/trap.c
+++ b/sys/arm64/arm64/trap.c
@@ -263,20 +263,6 @@ do_el1h_sync(struct trapframe *frame)
return;
#endif
- /*
- * Sanity check we are in an exception er can handle. The IL bit
- * is used to indicate the instruction length, except in a few
- * exceptions described in the ARMv8 ARM.
- *
- * It is unclear in some cases if the bit is implementation defined.
- * The Foundation Model and QEMU disagree on if the IL bit should
- * be set when we are in a data fault from the same EL and the ISV
- * bit (bit 24) is also set.
- */
- KASSERT((esr & ESR_ELx_IL) == ESR_ELx_IL ||
- (exception == EXCP_DATA_ABORT && ((esr & ISS_DATA_ISV) == 0)),
- ("Invalid instruction length in exception, esr %lx", esr));
-
CTR4(KTR_TRAP,
"do_el1_sync: curthread: %p, esr %lx, elr: %lx, frame: %p",
curthread, esr, frame->tf_elr, frame);
diff --git a/sys/arm64/cavium/thunder_pcie.c b/sys/arm64/cavium/thunder_pcie.c
index fb2aa37..1108d15 100644
--- a/sys/arm64/cavium/thunder_pcie.c
+++ b/sys/arm64/cavium/thunder_pcie.c
@@ -35,6 +35,8 @@ __FBSDID("$FreeBSD$");
#include <sys/param.h>
#include <sys/systm.h>
#include <sys/malloc.h>
+#include <sys/types.h>
+#include <sys/sysctl.h>
#include <sys/kernel.h>
#include <sys/rman.h>
#include <sys/module.h>
@@ -47,6 +49,7 @@ __FBSDID("$FreeBSD$");
#include <dev/pci/pcivar.h>
#include <dev/pci/pcireg.h>
#include <dev/pci/pcib_private.h>
+#include <dev/pci/pci_private.h>
#include <machine/cpu.h>
#include <machine/bus.h>
#include <machine/intr.h>
@@ -96,6 +99,15 @@ struct thunder_pcie_softc {
device_t dev;
};
+/*
+ * ThunderX supports up to 4 ethernet interfaces, so it's good
+ * value to use as default for numbers of VFs, since each eth
+ * interface represents separate virtual function.
+ */
+static int thunder_pcie_max_vfs = 4;
+SYSCTL_INT(_hw, OID_AUTO, thunder_pcie_max_vfs, CTLFLAG_RWTUN,
+ &thunder_pcie_max_vfs, 0, "Max VFs supported by ThunderX internal PCIe");
+
/* Forward prototypes */
static struct resource *thunder_pcie_alloc_resource(device_t,
device_t, int, int *, u_long, u_long, u_long, u_int);
@@ -424,6 +436,7 @@ thunder_pcie_alloc_resource(device_t dev, device_t child, int type, int *rid,
struct thunder_pcie_softc *sc = device_get_softc(dev);
struct rman *rm = NULL;
struct resource *res;
+ pci_addr_t map, testval;
switch (type) {
case SYS_RES_IOPORT:
@@ -438,9 +451,32 @@ thunder_pcie_alloc_resource(device_t dev, device_t child, int type, int *rid,
};
if ((start == 0UL) && (end == ~0UL)) {
- device_printf(dev,
- "Cannot allocate resource with unspecified range\n");
- goto fail;
+
+ /* Read BAR manually to get resource address and size */
+ pci_read_bar(child, *rid, &map, &testval, NULL);
+
+ /* Mask the information bits */
+ if (PCI_BAR_MEM(map))
+ map &= PCIM_BAR_MEM_BASE;
+ else
+ map &= PCIM_BAR_IO_BASE;
+
+ if (PCI_BAR_MEM(testval))
+ testval &= PCIM_BAR_MEM_BASE;
+ else
+ testval &= PCIM_BAR_IO_BASE;
+
+ start = map;
+ count = (~testval) + 1;
+ /*
+ * Internal ThunderX devices supports up to 3 64-bit BARs.
+ * If we're allocating anything above, that means upper layer
+ * wants us to allocate VF-BAR. In that case reserve bigger
+ * slice to make a room for other VFs adjacent to this one.
+ */
+ if (*rid > PCIR_BAR(5))
+ count = count * thunder_pcie_max_vfs;
+ end = start + count - 1;
}
/* Convert input BUS address to required PHYS */
diff --git a/sys/arm64/cloudabi64/cloudabi64_sysvec.c b/sys/arm64/cloudabi64/cloudabi64_sysvec.c
new file mode 100644
index 0000000..17fa0d4
--- /dev/null
+++ b/sys/arm64/cloudabi64/cloudabi64_sysvec.c
@@ -0,0 +1,162 @@
+/*-
+ * Copyright (c) 2015 Nuxi, https://nuxi.nl/
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#include <sys/param.h>
+#include <sys/kernel.h>
+#include <sys/proc.h>
+#include <sys/sysent.h>
+
+#include <vm/vm.h>
+#include <vm/pmap.h>
+
+#include <machine/frame.h>
+#include <machine/pcb.h>
+#include <machine/pmap.h>
+#include <machine/vmparam.h>
+
+#include <compat/cloudabi/cloudabi_util.h>
+
+#include <compat/cloudabi64/cloudabi64_syscall.h>
+#include <compat/cloudabi64/cloudabi64_util.h>
+
+extern const char *cloudabi64_syscallnames[];
+extern struct sysent cloudabi64_sysent[];
+
+static int
+cloudabi64_fetch_syscall_args(struct thread *td, struct syscall_args *sa)
+{
+ struct trapframe *frame = td->td_frame;
+ int i;
+
+ /* Obtain system call number. */
+ sa->code = frame->tf_x[8];
+ if (sa->code >= CLOUDABI64_SYS_MAXSYSCALL)
+ return (ENOSYS);
+ sa->callp = &cloudabi64_sysent[sa->code];
+
+ /* Fetch system call arguments. */
+ for (i = 0; i < MAXARGS; i++)
+ sa->args[i] = frame->tf_x[i];
+
+ /* Default system call return values. */
+ td->td_retval[0] = 0;
+ td->td_retval[1] = frame->tf_x[1];
+ return (0);
+}
+
+static void
+cloudabi64_set_syscall_retval(struct thread *td, int error)
+{
+ struct trapframe *frame = td->td_frame;
+
+ switch (error) {
+ case 0:
+ /* System call succeeded. */
+ frame->tf_x[0] = td->td_retval[0];
+ frame->tf_x[1] = td->td_retval[1];
+ frame->tf_spsr &= ~PSR_C;
+ break;
+ case ERESTART:
+ /* Restart system call. */
+ frame->tf_elr -= 4;
+ break;
+ case EJUSTRETURN:
+ break;
+ default:
+ /* System call returned an error. */
+ frame->tf_x[0] = cloudabi_convert_errno(error);
+ frame->tf_spsr |= PSR_C;
+ break;
+ }
+}
+
+static void
+cloudabi64_schedtail(struct thread *td)
+{
+ struct trapframe *frame = td->td_frame;
+
+ /*
+ * Initial register values for processes returning from fork.
+ * Make sure that we only set these values when forking, not
+ * when creating a new thread.
+ */
+ if ((td->td_pflags & TDP_FORKING) != 0) {
+ frame->tf_x[0] = CLOUDABI_PROCESS_CHILD;
+ frame->tf_x[1] = td->td_tid;
+ }
+}
+
+void
+cloudabi64_thread_setregs(struct thread *td,
+ const cloudabi64_threadattr_t *attr)
+{
+ struct trapframe *frame;
+ stack_t stack;
+
+ /* Perform standard register initialization. */
+ stack.ss_sp = (void *)attr->stack;
+ stack.ss_size = attr->stack_size;
+ cpu_set_upcall_kse(td, (void *)attr->entry_point, NULL, &stack);
+
+ /*
+ * Pass in the thread ID of the new thread and the argument
+ * pointer provided by the parent thread in as arguments to the
+ * entry point.
+ */
+ frame = td->td_frame;
+ frame->tf_x[0] = td->td_tid;
+ frame->tf_x[1] = attr->argument;
+}
+
+static struct sysentvec cloudabi64_elf_sysvec = {
+ .sv_size = CLOUDABI64_SYS_MAXSYSCALL,
+ .sv_table = cloudabi64_sysent,
+ .sv_fixup = cloudabi64_fixup,
+ .sv_name = "CloudABI ELF64",
+ .sv_coredump = elf64_coredump,
+ .sv_pagesize = PAGE_SIZE,
+ .sv_minuser = VM_MIN_ADDRESS,
+ .sv_maxuser = VM_MAXUSER_ADDRESS,
+ .sv_usrstack = USRSTACK,
+ .sv_stackprot = VM_PROT_READ | VM_PROT_WRITE,
+ .sv_copyout_strings = cloudabi64_copyout_strings,
+ .sv_flags = SV_ABI_CLOUDABI | SV_CAPSICUM,
+ .sv_set_syscall_retval = cloudabi64_set_syscall_retval,
+ .sv_fetch_syscall_args = cloudabi64_fetch_syscall_args,
+ .sv_syscallnames = cloudabi64_syscallnames,
+ .sv_schedtail = cloudabi64_schedtail,
+};
+
+INIT_SYSENTVEC(elf_sysvec, &cloudabi64_elf_sysvec);
+
+Elf64_Brandinfo cloudabi64_brand = {
+ .brand = ELFOSABI_CLOUDABI,
+ .machine = EM_AARCH64,
+ .sysvec = &cloudabi64_elf_sysvec,
+ .compat_3_brand = "CloudABI",
+};
diff --git a/sys/arm64/conf/GENERIC b/sys/arm64/conf/GENERIC
index d671fa8..87f7884 100644
--- a/sys/arm64/conf/GENERIC
+++ b/sys/arm64/conf/GENERIC
@@ -22,6 +22,7 @@ cpu ARM64
ident GENERIC
makeoptions DEBUG=-g # Build kernel with gdb(1) debug symbols
+makeoptions WITH_CTF=1 # Run ctfconvert(1) for DTrace support
options SCHED_ULE # ULE scheduler
options PREEMPTION # Enable kernel thread preemption
diff --git a/sys/arm64/include/armreg.h b/sys/arm64/include/armreg.h
index c701942..de8ce40 100644
--- a/sys/arm64/include/armreg.h
+++ b/sys/arm64/include/armreg.h
@@ -231,7 +231,9 @@
#define TCR_T1SZ_SHIFT 16
#define TCR_T0SZ_SHIFT 0
-#define TCR_TxSZ(x) (((x) << TCR_T1SZ_SHIFT) | ((x) << TCR_T0SZ_SHIFT))
+#define TCR_T1SZ(x) ((x) << TCR_T1SZ_SHIFT)
+#define TCR_T0SZ(x) ((x) << TCR_T0SZ_SHIFT)
+#define TCR_TxSZ(x) (TCR_T1SZ(x) | TCR_T0SZ(x))
/* Saved Program Status Register */
#define DBG_SPSR_SS (0x1 << 21)
diff --git a/sys/arm64/include/asm.h b/sys/arm64/include/asm.h
index f73773d..8bd47ed 100644
--- a/sys/arm64/include/asm.h
+++ b/sys/arm64/include/asm.h
@@ -39,7 +39,7 @@
#define _C_LABEL(x) x
#define ENTRY(sym) \
- .text; .globl sym; .align 2; sym:
+ .text; .globl sym; .align 2; .type sym,#function; sym:
#define EENTRY(sym) \
.globl sym; sym:
#define END(sym) .size sym, . - sym
diff --git a/sys/boot/common/newvers.sh b/sys/boot/common/newvers.sh
index fd7b0b1..ee2ac99 100755
--- a/sys/boot/common/newvers.sh
+++ b/sys/boot/common/newvers.sh
@@ -32,12 +32,16 @@
#
# @(#)newvers.sh 8.1 (Berkeley) 4/20/94
+tempfile=$(mktemp tmp.XXXXXX) || exit
+trap "rm -f $tempfile" EXIT INT TERM
+
LC_ALL=C; export LC_ALL
u=${USER-root} h=${HOSTNAME-`hostname`} t=`date`
#r=`head -n 6 $1 | tail -n 1 | awk -F: ' { print $1 } '`
r=`awk -F: ' /^[0-9]\.[0-9]+:/ { print $1; exit }' $1`
-echo "char bootprog_name[] = \"FreeBSD/${3} ${2}\";" > vers.c
-echo "char bootprog_rev[] = \"${r}\";" >> vers.c
-echo "char bootprog_date[] = \"${t}\";" >> vers.c
-echo "char bootprog_maker[] = \"${u}@${h}\";" >> vers.c
+echo "char bootprog_name[] = \"FreeBSD/${3} ${2}\";" > $tempfile
+echo "char bootprog_rev[] = \"${r}\";" >> $tempfile
+echo "char bootprog_date[] = \"${t}\";" >> $tempfile
+echo "char bootprog_maker[] = \"${u}@${h}\";" >> $tempfile
+mv $tempfile vers.c
diff --git a/sys/cam/ctl/ctl.c b/sys/cam/ctl/ctl.c
index 30c4eb0..0d10721 100644
--- a/sys/cam/ctl/ctl.c
+++ b/sys/cam/ctl/ctl.c
@@ -927,6 +927,11 @@ ctl_isc_announce_mode(struct ctl_lun *lun, uint32_t initidx,
}
if (i == CTL_NUM_MODE_PAGES)
return;
+
+ /* Don't try to replicate pages not present on this device. */
+ if (lun->mode_pages.index[i].page_data == NULL)
+ return;
+
bzero(&msg.mode, sizeof(msg.mode));
msg.hdr.msg_type = CTL_MSG_MODE_SYNC;
msg.hdr.nexus.targ_port = initidx / CTL_MAX_INIT_PER_PORT;
@@ -3533,6 +3538,67 @@ ctl_lun_map_to_port(struct ctl_port *port, uint32_t lun_id)
return (UINT32_MAX);
}
+uint32_t
+ctl_decode_lun(uint64_t encoded)
+{
+ uint8_t lun[8];
+ uint32_t result = 0xffffffff;
+
+ be64enc(lun, encoded);
+ switch (lun[0] & RPL_LUNDATA_ATYP_MASK) {
+ case RPL_LUNDATA_ATYP_PERIPH:
+ if ((lun[0] & 0x3f) == 0 && lun[2] == 0 && lun[3] == 0 &&
+ lun[4] == 0 && lun[5] == 0 && lun[6] == 0 && lun[7] == 0)
+ result = lun[1];
+ break;
+ case RPL_LUNDATA_ATYP_FLAT:
+ if (lun[2] == 0 && lun[3] == 0 && lun[4] == 0 && lun[5] == 0 &&
+ lun[6] == 0 && lun[7] == 0)
+ result = ((lun[0] & 0x3f) << 8) + lun[1];
+ break;
+ case RPL_LUNDATA_ATYP_EXTLUN:
+ switch (lun[0] & RPL_LUNDATA_EXT_EAM_MASK) {
+ case 0x02:
+ switch (lun[0] & RPL_LUNDATA_EXT_LEN_MASK) {
+ case 0x00:
+ result = lun[1];
+ break;
+ case 0x10:
+ result = (lun[1] << 16) + (lun[2] << 8) +
+ lun[3];
+ break;
+ case 0x20:
+ if (lun[1] == 0 && lun[6] == 0 && lun[7] == 0)
+ result = (lun[2] << 24) +
+ (lun[3] << 16) + (lun[4] << 8) +
+ lun[5];
+ break;
+ }
+ break;
+ case RPL_LUNDATA_EXT_EAM_NOT_SPEC:
+ result = 0xffffffff;
+ break;
+ }
+ break;
+ }
+ return (result);
+}
+
+uint64_t
+ctl_encode_lun(uint32_t decoded)
+{
+ uint64_t l = decoded;
+
+ if (l <= 0xff)
+ return (((uint64_t)RPL_LUNDATA_ATYP_PERIPH << 56) | (l << 48));
+ if (l <= 0x3fff)
+ return (((uint64_t)RPL_LUNDATA_ATYP_FLAT << 56) | (l << 48));
+ if (l <= 0xffffff)
+ return (((uint64_t)(RPL_LUNDATA_ATYP_EXTLUN | 0x12) << 56) |
+ (l << 32));
+ return ((((uint64_t)RPL_LUNDATA_ATYP_EXTLUN | 0x22) << 56) | (l << 16));
+}
+
static struct ctl_port *
ctl_io_port(struct ctl_io_hdr *io_hdr)
{
@@ -3810,7 +3876,7 @@ ctl_expand_number(const char *buf, uint64_t *num)
static int
ctl_init_page_index(struct ctl_lun *lun)
{
- int i;
+ int i, page_code;
struct ctl_page_index *page_index;
const char *value;
uint64_t ival;
@@ -3831,10 +3897,12 @@ ctl_init_page_index(struct ctl_lun *lun)
(page_index->page_flags & CTL_PAGE_FLAG_CDROM) == 0)
continue;
- switch (page_index->page_code & SMPH_PC_MASK) {
+ page_code = page_index->page_code & SMPH_PC_MASK;
+ switch (page_code) {
case SMS_RW_ERROR_RECOVERY_PAGE: {
- if (page_index->subpage != SMS_SUBPAGE_PAGE_0)
- panic("subpage is incorrect!");
+ KASSERT(page_index->subpage == SMS_SUBPAGE_PAGE_0,
+ ("subpage %#x for page %#x is incorrect!",
+ page_index->subpage, page_code));
memcpy(&lun->mode_pages.rw_er_page[CTL_PAGE_CURRENT],
&rw_er_page_default,
sizeof(rw_er_page_default));
@@ -3854,8 +3922,9 @@ ctl_init_page_index(struct ctl_lun *lun)
case SMS_FORMAT_DEVICE_PAGE: {
struct scsi_format_page *format_page;
- if (page_index->subpage != SMS_SUBPAGE_PAGE_0)
- panic("subpage is incorrect!");
+ KASSERT(page_index->subpage == SMS_SUBPAGE_PAGE_0,
+ ("subpage %#x for page %#x is incorrect!",
+ page_index->subpage, page_code));
/*
* Sectors per track are set above. Bytes per
@@ -3901,9 +3970,9 @@ ctl_init_page_index(struct ctl_lun *lun)
int shift;
#endif /* !__XSCALE__ */
- if (page_index->subpage != SMS_SUBPAGE_PAGE_0)
- panic("invalid subpage value %d",
- page_index->subpage);
+ KASSERT(page_index->subpage == SMS_SUBPAGE_PAGE_0,
+ ("subpage %#x for page %#x is incorrect!",
+ page_index->subpage, page_code));
/*
* Rotation rate and sectors per track are set
@@ -3981,9 +4050,9 @@ ctl_init_page_index(struct ctl_lun *lun)
case SMS_CACHING_PAGE: {
struct scsi_caching_page *caching_page;
- if (page_index->subpage != SMS_SUBPAGE_PAGE_0)
- panic("invalid subpage value %d",
- page_index->subpage);
+ KASSERT(page_index->subpage == SMS_SUBPAGE_PAGE_0,
+ ("subpage %#x for page %#x is incorrect!",
+ page_index->subpage, page_code));
memcpy(&lun->mode_pages.caching_page[CTL_PAGE_DEFAULT],
&caching_page_default,
sizeof(caching_page_default));
@@ -4066,6 +4135,9 @@ ctl_init_page_index(struct ctl_lun *lun)
page_index->page_data =
(uint8_t *)lun->mode_pages.control_ext_page;
break;
+ default:
+ panic("subpage %#x for page %#x is incorrect!",
+ page_index->subpage, page_code);
}
break;
}
@@ -4157,10 +4229,18 @@ ctl_init_page_index(struct ctl_lun *lun)
sizeof(lbp_page_default));
page_index->page_data =
(uint8_t *)lun->mode_pages.lbp_page;
- }}
+ break;
+ }
+ default:
+ panic("subpage %#x for page %#x is incorrect!",
+ page_index->subpage, page_code);
+ }
break;
}
case SMS_CDDVD_CAPS_PAGE:{
+ KASSERT(page_index->subpage == SMS_SUBPAGE_PAGE_0,
+ ("subpage %#x for page %#x is incorrect!",
+ page_index->subpage, page_code));
memcpy(&lun->mode_pages.cddvd_page[CTL_PAGE_DEFAULT],
&cddvd_page_default,
sizeof(cddvd_page_default));
@@ -4201,17 +4281,14 @@ ctl_init_page_index(struct ctl_lun *lun)
break;
}
default:
- panic("invalid subpage value %d",
- page_index->subpage);
- break;
+ panic("subpage %#x for page %#x is incorrect!",
+ page_index->subpage, page_code);
}
- break;
+ break;
}
default:
- panic("invalid page value %d",
- page_index->page_code & SMPH_PC_MASK);
- break;
- }
+ panic("invalid page code value %#x", page_code);
+ }
}
return (CTL_RETVAL_COMPLETE);
@@ -6223,8 +6300,7 @@ ctl_mode_select(struct ctl_scsiio *ctsio)
break;
}
default:
- panic("Invalid CDB type %#x", ctsio->cdb[0]);
- break;
+ panic("%s: Invalid CDB type %#x", __func__, ctsio->cdb[0]);
}
if (param_len < (header_size + bd_len)) {
@@ -6487,8 +6563,7 @@ ctl_mode_sense(struct ctl_scsiio *ctsio)
break;
}
default:
- panic("invalid CDB type %#x", ctsio->cdb[0]);
- break; /* NOTREACHED */
+ panic("%s: Invalid CDB type %#x", __func__, ctsio->cdb[0]);
}
/*
@@ -7502,7 +7577,7 @@ retry:
lun->pr_key_count;
break;
default:
- panic("Invalid PR type %x", cdb->action);
+ panic("%s: Invalid PR type %#x", __func__, cdb->action);
}
mtx_unlock(&lun->lun_lock);
@@ -7698,12 +7773,7 @@ retry:
break;
}
default:
- /*
- * This is a bug, because we just checked for this above,
- * and should have returned an error.
- */
- panic("Invalid PR type %x", cdb->action);
- break; /* NOTREACHED */
+ panic("%s: Invalid PR type %#x", __func__, cdb->action);
}
mtx_unlock(&lun->lun_lock);
@@ -8421,7 +8491,7 @@ ctl_persistent_reserve_out(struct ctl_scsiio *ctsio)
break;
}
default:
- panic("Invalid PR type %x", cdb->action);
+ panic("%s: Invalid PR type %#x", __func__, cdb->action);
}
done:
@@ -9052,36 +9122,9 @@ ctl_report_luns(struct ctl_scsiio *ctsio)
if (lun == NULL)
continue;
- if (targ_lun_id <= 0xff) {
- /*
- * Peripheral addressing method, bus number 0.
- */
- lun_data->luns[num_filled].lundata[0] =
- RPL_LUNDATA_ATYP_PERIPH;
- lun_data->luns[num_filled].lundata[1] = targ_lun_id;
- num_filled++;
- } else if (targ_lun_id <= 0x3fff) {
- /*
- * Flat addressing method.
- */
- lun_data->luns[num_filled].lundata[0] =
- RPL_LUNDATA_ATYP_FLAT | (targ_lun_id >> 8);
- lun_data->luns[num_filled].lundata[1] =
- (targ_lun_id & 0xff);
- num_filled++;
- } else if (targ_lun_id <= 0xffffff) {
- /*
- * Extended flat addressing method.
- */
- lun_data->luns[num_filled].lundata[0] =
- RPL_LUNDATA_ATYP_EXTLUN | 0x12;
- scsi_ulto3b(targ_lun_id,
- &lun_data->luns[num_filled].lundata[1]);
- num_filled++;
- } else {
- printf("ctl_report_luns: bogus LUN number %jd, "
- "skipping\n", (intmax_t)targ_lun_id);
- }
+ be64enc(lun_data->luns[num_filled++].lundata,
+ ctl_encode_lun(targ_lun_id));
+
/*
* According to SPC-3, rev 14 section 6.21:
*
@@ -11030,8 +11073,9 @@ ctl_check_for_blockage(struct ctl_lun *lun, union ctl_io *pending_io,
case CTL_SER_SKIP:
return (CTL_ACTION_SKIP);
default:
- panic("invalid serialization value %d",
- serialize_row[pending_entry->seridx]);
+ panic("%s: Invalid serialization value %d for %d => %d",
+ __func__, serialize_row[pending_entry->seridx],
+ pending_entry->seridx, ooa_entry->seridx);
}
return (CTL_ACTION_ERROR);
@@ -11080,8 +11124,7 @@ ctl_check_ooa(struct ctl_lun *lun, union ctl_io *pending_io,
case CTL_ACTION_PASS:
break;
default:
- panic("invalid action %d", action);
- break; /* NOTREACHED */
+ panic("%s: Invalid action %d\n", __func__, action);
}
}
@@ -12558,9 +12601,8 @@ ctl_datamove(union ctl_io *io)
io->taskio.tag_num, io->taskio.tag_type);
break;
default:
- printf("Invalid CTL I/O type %d\n", io->io_hdr.io_type);
- panic("Invalid CTL I/O type %d\n", io->io_hdr.io_type);
- break;
+ panic("%s: Invalid CTL I/O type %d\n",
+ __func__, io->io_hdr.io_type);
}
sbuf_cat(&sb, path_str);
sbuf_printf(&sb, "ctl_datamove: %jd seconds\n",
@@ -13093,9 +13135,8 @@ ctl_process_done(union ctl_io *io)
io->taskio.tag_num, io->taskio.tag_type);
break;
default:
- printf("Invalid CTL I/O type %d\n", io->io_hdr.io_type);
- panic("Invalid CTL I/O type %d\n", io->io_hdr.io_type);
- break;
+ panic("%s: Invalid CTL I/O type %d\n",
+ __func__, io->io_hdr.io_type);
}
sbuf_cat(&sb, path_str);
sbuf_printf(&sb, "ctl_process_done: %jd seconds\n",
@@ -13114,9 +13155,8 @@ ctl_process_done(union ctl_io *io)
fe_done(io);
return;
default:
- panic("ctl_process_done: invalid io type %d\n",
- io->io_hdr.io_type);
- break; /* NOTREACHED */
+ panic("%s: Invalid CTL I/O type %d\n",
+ __func__, io->io_hdr.io_type);
}
lun = (struct ctl_lun *)io->io_hdr.ctl_private[CTL_PRIV_LUN].ptr;
diff --git a/sys/cam/ctl/ctl.h b/sys/cam/ctl/ctl.h
index 35fc4c3..ba78ff0 100644
--- a/sys/cam/ctl/ctl.h
+++ b/sys/cam/ctl/ctl.h
@@ -191,6 +191,9 @@ void ctl_clr_ua_all(struct ctl_lun *lun, uint32_t except, ctl_ua_type ua);
void ctl_clr_ua_allluns(struct ctl_softc *ctl_softc, uint32_t initidx,
ctl_ua_type ua_type);
+uint32_t ctl_decode_lun(uint64_t encoded);
+uint64_t ctl_encode_lun(uint32_t decoded);
+
void ctl_isc_announce_lun(struct ctl_lun *lun);
void ctl_isc_announce_port(struct ctl_port *port);
void ctl_isc_announce_iid(struct ctl_port *port, int iid);
diff --git a/sys/cam/ctl/ctl_backend_block.c b/sys/cam/ctl/ctl_backend_block.c
index 254f52b..df65ffd 100644
--- a/sys/cam/ctl/ctl_backend_block.c
+++ b/sys/cam/ctl/ctl_backend_block.c
@@ -2110,7 +2110,7 @@ ctl_be_block_close(struct ctl_be_block_lun *be_lun)
case CTL_BE_BLOCK_NONE:
break;
default:
- panic("Unexpected backend type.");
+ panic("Unexpected backend type %d", be_lun->dev_type);
break;
}
be_lun->dev_type = CTL_BE_BLOCK_NONE;
diff --git a/sys/cam/ctl/ctl_frontend_cam_sim.c b/sys/cam/ctl/ctl_frontend_cam_sim.c
index 428cf44..9f9ea15 100644
--- a/sys/cam/ctl/ctl_frontend_cam_sim.c
+++ b/sys/cam/ctl/ctl_frontend_cam_sim.c
@@ -549,7 +549,8 @@ cfcs_action(struct cam_sim *sim, union ccb *ccb)
io->io_hdr.io_type = CTL_IO_SCSI;
io->io_hdr.nexus.initid = 1;
io->io_hdr.nexus.targ_port = softc->port.targ_port;
- io->io_hdr.nexus.targ_lun = ccb->ccb_h.target_lun;
+ io->io_hdr.nexus.targ_lun = ctl_decode_lun(
+ CAM_EXTLUN_BYTE_SWIZZLE(ccb->ccb_h.target_lun));
/*
* This tag scheme isn't the best, since we could in theory
* have a very long-lived I/O and tag collision, especially
@@ -638,7 +639,8 @@ cfcs_action(struct cam_sim *sim, union ccb *ccb)
io->io_hdr.io_type = CTL_IO_TASK;
io->io_hdr.nexus.initid = 1;
io->io_hdr.nexus.targ_port = softc->port.targ_port;
- io->io_hdr.nexus.targ_lun = ccb->ccb_h.target_lun;
+ io->io_hdr.nexus.targ_lun = ctl_decode_lun(
+ CAM_EXTLUN_BYTE_SWIZZLE(ccb->ccb_h.target_lun));
io->taskio.task_action = CTL_TASK_ABORT_TASK;
io->taskio.tag_num = abort_ccb->csio.tag_id;
switch (abort_ccb->csio.tag_action) {
@@ -733,7 +735,8 @@ cfcs_action(struct cam_sim *sim, union ccb *ccb)
io->io_hdr.io_type = CTL_IO_TASK;
io->io_hdr.nexus.initid = 1;
io->io_hdr.nexus.targ_port = softc->port.targ_port;
- io->io_hdr.nexus.targ_lun = ccb->ccb_h.target_lun;
+ io->io_hdr.nexus.targ_lun = ctl_decode_lun(
+ CAM_EXTLUN_BYTE_SWIZZLE(ccb->ccb_h.target_lun));
if (ccb->ccb_h.func_code == XPT_RESET_BUS)
io->taskio.task_action = CTL_TASK_BUS_RESET;
else
@@ -760,7 +763,7 @@ cfcs_action(struct cam_sim *sim, union ccb *ccb)
cpi->version_num = 0;
cpi->hba_inquiry = PI_TAG_ABLE;
cpi->target_sprt = 0;
- cpi->hba_misc = 0;
+ cpi->hba_misc = PIM_EXTLUNS;
cpi->hba_eng_cnt = 0;
cpi->max_target = 1;
cpi->max_lun = 1024;
diff --git a/sys/cam/ctl/ctl_frontend_iscsi.c b/sys/cam/ctl/ctl_frontend_iscsi.c
index 30cca91..07b9687 100644
--- a/sys/cam/ctl/ctl_frontend_iscsi.c
+++ b/sys/cam/ctl/ctl_frontend_iscsi.c
@@ -39,6 +39,7 @@ __FBSDID("$FreeBSD$");
#include <sys/param.h>
#include <sys/capsicum.h>
#include <sys/condvar.h>
+#include <sys/endian.h>
#include <sys/file.h>
#include <sys/kernel.h>
#include <sys/kthread.h>
@@ -416,62 +417,6 @@ cfiscsi_pdu_queue(struct icl_pdu *response)
CFISCSI_SESSION_UNLOCK(cs);
}
-static uint32_t
-cfiscsi_decode_lun(uint64_t encoded)
-{
- uint8_t lun[8];
- uint32_t result;
-
- /*
- * The LUN field in iSCSI PDUs may look like an ordinary 64 bit number,
- * but is in fact an evil, multidimensional structure defined
- * in SCSI Architecture Model 5 (SAM-5), section 4.6.
- */
- memcpy(lun, &encoded, sizeof(lun));
- switch (lun[0] & 0xC0) {
- case 0x00:
- if ((lun[0] & 0x3f) != 0 || lun[2] != 0 || lun[3] != 0 ||
- lun[4] != 0 || lun[5] != 0 || lun[6] != 0 || lun[7] != 0) {
- CFISCSI_WARN("malformed LUN "
- "(peripheral device addressing method): 0x%jx",
- (uintmax_t)encoded);
- result = 0xffffffff;
- break;
- }
- result = lun[1];
- break;
- case 0x40:
- if (lun[2] != 0 || lun[3] != 0 || lun[4] != 0 || lun[5] != 0 ||
- lun[6] != 0 || lun[7] != 0) {
- CFISCSI_WARN("malformed LUN "
- "(flat address space addressing method): 0x%jx",
- (uintmax_t)encoded);
- result = 0xffffffff;
- break;
- }
- result = ((lun[0] & 0x3f) << 8) + lun[1];
- break;
- case 0xC0:
- if (lun[0] != 0xD2 || lun[4] != 0 || lun[5] != 0 ||
- lun[6] != 0 || lun[7] != 0) {
- CFISCSI_WARN("malformed LUN (extended flat "
- "address space addressing method): 0x%jx",
- (uintmax_t)encoded);
- result = 0xffffffff;
- break;
- }
- result = (lun[1] << 16) + (lun[2] << 8) + lun[3];
- break;
- default:
- CFISCSI_WARN("unsupported LUN format 0x%jx",
- (uintmax_t)encoded);
- result = 0xffffffff;
- break;
- }
-
- return (result);
-}
-
static void
cfiscsi_pdu_handle_nop_out(struct icl_pdu *request)
{
@@ -566,7 +511,7 @@ cfiscsi_pdu_handle_scsi_command(struct icl_pdu *request)
io->io_hdr.io_type = CTL_IO_SCSI;
io->io_hdr.nexus.initid = cs->cs_ctl_initid;
io->io_hdr.nexus.targ_port = cs->cs_target->ct_port.targ_port;
- io->io_hdr.nexus.targ_lun = cfiscsi_decode_lun(bhssc->bhssc_lun);
+ io->io_hdr.nexus.targ_lun = ctl_decode_lun(be64toh(bhssc->bhssc_lun));
io->scsiio.tag_num = bhssc->bhssc_initiator_task_tag;
switch ((bhssc->bhssc_flags & BHSSC_FLAGS_ATTR)) {
case BHSSC_FLAGS_ATTR_UNTAGGED:
@@ -622,7 +567,7 @@ cfiscsi_pdu_handle_task_request(struct icl_pdu *request)
io->io_hdr.io_type = CTL_IO_TASK;
io->io_hdr.nexus.initid = cs->cs_ctl_initid;
io->io_hdr.nexus.targ_port = cs->cs_target->ct_port.targ_port;
- io->io_hdr.nexus.targ_lun = cfiscsi_decode_lun(bhstmr->bhstmr_lun);
+ io->io_hdr.nexus.targ_lun = ctl_decode_lun(be64toh(bhstmr->bhstmr_lun));
io->taskio.tag_type = CTL_TAG_SIMPLE; /* XXX */
switch (bhstmr->bhstmr_function & ~0x80) {
diff --git a/sys/cam/ctl/scsi_ctl.c b/sys/cam/ctl/scsi_ctl.c
index 25c745b..2705240 100644
--- a/sys/cam/ctl/scsi_ctl.c
+++ b/sys/cam/ctl/scsi_ctl.c
@@ -1,5 +1,6 @@
/*-
* Copyright (c) 2008, 2009 Silicon Graphics International Corp.
+ * Copyright (c) 2014-2015 Alexander Motin <mav@FreeBSD.org>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -73,13 +74,14 @@ __FBSDID("$FreeBSD$");
#include <cam/ctl/ctl_error.h>
struct ctlfe_softc {
- struct ctl_port port;
- path_id_t path_id;
- target_id_t target_id;
- u_int maxio;
+ struct ctl_port port;
+ path_id_t path_id;
+ target_id_t target_id;
+ uint32_t hba_misc;
+ u_int maxio;
struct cam_sim *sim;
- char port_name[DEV_IDLEN];
- struct mtx lun_softc_mtx;
+ char port_name[DEV_IDLEN];
+ struct mtx lun_softc_mtx;
STAILQ_HEAD(, ctlfe_lun_softc) lun_softc_list;
STAILQ_ENTRY(ctlfe_softc) links;
};
@@ -355,6 +357,7 @@ ctlfeasync(void *callback_arg, uint32_t code, struct cam_path *path, void *arg)
softc->path_id = cpi->ccb_h.path_id;
softc->target_id = cpi->initiator_id;
softc->sim = xpt_path_sim(path);
+ softc->hba_misc = cpi->hba_misc;
if (cpi->maxio != 0)
softc->maxio = cpi->maxio;
else
@@ -1166,7 +1169,12 @@ ctlfedone(struct cam_periph *periph, union ccb *done_ccb)
io->io_hdr.io_type = CTL_IO_SCSI;
io->io_hdr.nexus.initid = atio->init_id;
io->io_hdr.nexus.targ_port = bus_softc->port.targ_port;
- io->io_hdr.nexus.targ_lun = atio->ccb_h.target_lun;
+ if (bus_softc->hba_misc & PIM_EXTLUNS) {
+ io->io_hdr.nexus.targ_lun = ctl_decode_lun(
+ CAM_EXTLUN_BYTE_SWIZZLE(atio->ccb_h.target_lun));
+ } else {
+ io->io_hdr.nexus.targ_lun = atio->ccb_h.target_lun;
+ }
io->scsiio.tag_num = atio->tag_id;
switch (atio->tag_action) {
case CAM_TAG_ACTION_NONE:
@@ -1440,7 +1448,12 @@ ctlfedone(struct cam_periph *periph, union ccb *done_ccb)
inot->ccb_h.io_ptr = io;
io->io_hdr.nexus.initid = inot->initiator_id;
io->io_hdr.nexus.targ_port = bus_softc->port.targ_port;
- io->io_hdr.nexus.targ_lun = inot->ccb_h.target_lun;
+ if (bus_softc->hba_misc & PIM_EXTLUNS) {
+ io->io_hdr.nexus.targ_lun = ctl_decode_lun(
+ CAM_EXTLUN_BYTE_SWIZZLE(inot->ccb_h.target_lun));
+ } else {
+ io->io_hdr.nexus.targ_lun = inot->ccb_h.target_lun;
+ }
/* XXX KDM should this be the tag_id? */
io->taskio.tag_num = inot->seq_id;
@@ -1459,24 +1472,31 @@ ctlfedone(struct cam_periph *periph, union ccb *done_ccb)
CTL_TASK_ABORT_TASK_SET;
break;
case MSG_TARGET_RESET:
- io->taskio.task_action =
- CTL_TASK_TARGET_RESET;
+ io->taskio.task_action = CTL_TASK_TARGET_RESET;
break;
case MSG_ABORT_TASK:
- io->taskio.task_action =
- CTL_TASK_ABORT_TASK;
+ io->taskio.task_action = CTL_TASK_ABORT_TASK;
break;
case MSG_LOGICAL_UNIT_RESET:
- io->taskio.task_action =
- CTL_TASK_LUN_RESET;
+ io->taskio.task_action = CTL_TASK_LUN_RESET;
break;
case MSG_CLEAR_TASK_SET:
io->taskio.task_action =
- CTL_TASK_CLEAR_TASK_SET;
+ CTL_TASK_CLEAR_TASK_SET;
break;
case MSG_CLEAR_ACA:
+ io->taskio.task_action = CTL_TASK_CLEAR_ACA;
+ break;
+ case MSG_QUERY_TASK:
+ io->taskio.task_action = CTL_TASK_QUERY_TASK;
+ break;
+ case MSG_QUERY_TASK_SET:
+ io->taskio.task_action =
+ CTL_TASK_QUERY_TASK_SET;
+ break;
+ case MSG_QUERY_ASYNC_EVENT:
io->taskio.task_action =
- CTL_TASK_CLEAR_ACA;
+ CTL_TASK_QUERY_ASYNC_EVENT;
break;
case MSG_NOOP:
send_ctl_io = 0;
@@ -1813,9 +1833,11 @@ ctlfe_lun_enable(void *arg, int lun_id)
cam_status status;
bus_softc = (struct ctlfe_softc *)arg;
+ if (bus_softc->hba_misc & PIM_EXTLUNS)
+ lun_id = CAM_EXTLUN_BYTE_SWIZZLE(ctl_encode_lun(lun_id));
status = xpt_create_path(&path, /*periph*/ NULL,
- bus_softc->path_id, bus_softc->target_id, lun_id);
+ bus_softc->path_id, bus_softc->target_id, lun_id);
/* XXX KDM need some way to return status to CTL here? */
if (status != CAM_REQ_CMP) {
printf("%s: could not create path, status %#x\n", __func__,
@@ -1872,6 +1894,8 @@ ctlfe_lun_disable(void *arg, int lun_id)
struct ctlfe_lun_softc *lun_softc;
softc = (struct ctlfe_softc *)arg;
+ if (softc->hba_misc & PIM_EXTLUNS)
+ lun_id = CAM_EXTLUN_BYTE_SWIZZLE(ctl_encode_lun(lun_id));
mtx_lock(&softc->lun_softc_mtx);
STAILQ_FOREACH(lun_softc, &softc->lun_softc_list, links) {
@@ -1879,7 +1903,7 @@ ctlfe_lun_disable(void *arg, int lun_id)
path = lun_softc->periph->path;
- if ((xpt_path_target_id(path) == 0)
+ if ((xpt_path_target_id(path) == softc->target_id)
&& (xpt_path_lun_id(path) == lun_id)) {
break;
}
diff --git a/sys/cam/scsi/scsi_message.h b/sys/cam/scsi/scsi_message.h
index 53b7640..ddac571 100644
--- a/sys/cam/scsi/scsi_message.h
+++ b/sys/cam/scsi/scsi_message.h
@@ -68,3 +68,9 @@
#define MSG_EXT_PPR_QAS_REQ 0x04
#define MSG_EXT_PPR_DT_REQ 0x02
#define MSG_EXT_PPR_IU_REQ 0x01
+
+/* Fake messages not defined for SPI, but needed for other transports */
+#define MSG_QUERY_TASK 0x100
+#define MSG_QUERY_TASK_SET 0x101
+#define MSG_QUERY_ASYNC_EVENT 0x102
+
diff --git a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c
index ba16ded..0123a79 100644
--- a/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c
+++ b/sys/cddl/contrib/opensolaris/uts/common/fs/zfs/arc.c
@@ -1131,6 +1131,24 @@ static boolean_t l2arc_compress_buf(arc_buf_hdr_t *);
static void l2arc_decompress_zio(zio_t *, arc_buf_hdr_t *, enum zio_compress);
static void l2arc_release_cdata_buf(arc_buf_hdr_t *);
+static void
+l2arc_trim(const arc_buf_hdr_t *hdr)
+{
+ l2arc_dev_t *dev = hdr->b_l2hdr.b_dev;
+
+ ASSERT(HDR_HAS_L2HDR(hdr));
+ ASSERT(MUTEX_HELD(&dev->l2ad_mtx));
+
+ if (hdr->b_l2hdr.b_daddr == L2ARC_ADDR_UNSET)
+ return;
+ if (hdr->b_l2hdr.b_asize != 0) {
+ trim_map_free(dev->l2ad_vdev, hdr->b_l2hdr.b_daddr,
+ hdr->b_l2hdr.b_asize, 0);
+ } else {
+ ASSERT3U(hdr->b_l2hdr.b_compress, ==, ZIO_COMPRESS_EMPTY);
+ }
+}
+
static uint64_t
buf_hash(uint64_t spa, const dva_t *dva, uint64_t birth)
{
@@ -2403,10 +2421,7 @@ arc_hdr_destroy(arc_buf_hdr_t *hdr)
* want to re-destroy the header's L2 portion.
*/
if (HDR_HAS_L2HDR(hdr)) {
- if (hdr->b_l2hdr.b_daddr != L2ARC_ADDR_UNSET)
- trim_map_free(dev->l2ad_vdev,
- hdr->b_l2hdr.b_daddr,
- hdr->b_l2hdr.b_asize, 0);
+ l2arc_trim(hdr);
arc_hdr_l2hdr_destroy(hdr);
}
@@ -4776,10 +4791,7 @@ arc_release(arc_buf_t *buf, void *tag)
* to acquire the l2ad_mtx.
*/
if (HDR_HAS_L2HDR(hdr)) {
- if (hdr->b_l2hdr.b_daddr != L2ARC_ADDR_UNSET)
- trim_map_free(hdr->b_l2hdr.b_dev->l2ad_vdev,
- hdr->b_l2hdr.b_daddr,
- hdr->b_l2hdr.b_asize, 0);
+ l2arc_trim(hdr);
arc_hdr_l2hdr_destroy(hdr);
}
@@ -5966,8 +5978,7 @@ top:
* Error - drop L2ARC entry.
*/
list_remove(buflist, hdr);
- trim_map_free(hdr->b_l2hdr.b_dev->l2ad_vdev,
- hdr->b_l2hdr.b_daddr, hdr->b_l2hdr.b_asize, 0);
+ l2arc_trim(hdr);
hdr->b_flags &= ~ARC_FLAG_HAS_L2HDR;
ARCSTAT_INCR(arcstat_l2_asize, -hdr->b_l2hdr.b_asize);
diff --git a/sys/cddl/dev/systrace/systrace.c b/sys/cddl/dev/systrace/systrace.c
index 921393c..1796091 100644
--- a/sys/cddl/dev/systrace/systrace.c
+++ b/sys/cddl/dev/systrace/systrace.c
@@ -60,24 +60,37 @@
#ifdef LINUX_SYSTRACE
#if defined(__amd64__)
-#include <amd64/linux32/linux.h>
-#include <amd64/linux32/linux32_proto.h>
-#include <amd64/linux32/linux32_syscalls.c>
-#include <amd64/linux32/linux32_systrace_args.c>
-#define MODNAME "linux32"
+#include <amd64/linux/linux.h>
+#include <amd64/linux/linux_proto.h>
+#include <amd64/linux/linux_syscalls.c>
+#include <amd64/linux/linux_systrace_args.c>
#elif defined(__i386__)
#include <i386/linux/linux.h>
#include <i386/linux/linux_proto.h>
#include <i386/linux/linux_syscalls.c>
#include <i386/linux/linux_systrace_args.c>
-#define MODNAME "linux"
#else
#error Only i386 and amd64 are supported.
#endif
+#define MODNAME "linux"
extern struct sysent linux_sysent[];
#define MAXSYSCALL LINUX_SYS_MAXSYSCALL
#define SYSCALLNAMES linux_syscallnames
#define SYSENT linux_sysent
+#elif defined(LINUX32_SYSTRACE)
+#if defined(__amd64__)
+#include <amd64/linux32/linux.h>
+#include <amd64/linux32/linux32_proto.h>
+#include <amd64/linux32/linux32_syscalls.c>
+#include <amd64/linux32/linux32_systrace_args.c>
+#else
+#error Only amd64 is supported.
+#endif
+#define MODNAME "linux32"
+extern struct sysent linux32_sysent[];
+#define MAXSYSCALL LINUX32_SYS_MAXSYSCALL
+#define SYSCALLNAMES linux32_syscallnames
+#define SYSENT linux32_sysent
#elif defined(FREEBSD32_SYSTRACE)
/*
* The syscall arguments are processed into a DTrace argument array
@@ -103,6 +116,7 @@ extern const char *freebsd32_syscallnames[];
#define MAXSYSCALL SYS_MAXSYSCALL
#define SYSCALLNAMES syscallnames
#define SYSENT sysent
+#define NATIVE_ABI
#endif
#define PROVNAME "syscall"
@@ -132,7 +146,7 @@ static void systrace_load(void *);
static struct cdevsw systrace_cdevsw = {
.d_version = D_VERSION,
.d_open = systrace_open,
-#ifdef LINUX_SYSTRACE
+#ifndef NATIVE_ABI
.d_name = "systrace_" MODNAME,
#else
.d_name = "systrace",
@@ -171,7 +185,7 @@ static dtrace_provider_id_t systrace_id;
typedef void (*systrace_dtrace_probe_t)(dtrace_id_t, uintptr_t, uintptr_t,
uintptr_t, uintptr_t, uintptr_t, uintptr_t, uintptr_t, uintptr_t);
-#if !defined(LINUX_SYSTRACE)
+#ifdef NATIVE_ABI
/*
* Probe callback function.
*
@@ -314,7 +328,7 @@ systrace_load(void *dummy)
NULL, &systrace_pops, NULL, &systrace_id) != 0)
return;
-#if !defined(LINUX_SYSTRACE)
+#ifdef NATIVE_ABI
systrace_probe_func = systrace_probe;
#endif
}
@@ -328,7 +342,7 @@ systrace_unload()
if ((error = dtrace_unregister(systrace_id)) != 0)
return (error);
-#if !defined(LINUX_SYSTRACE)
+#ifdef NATIVE_ABI
systrace_probe_func = NULL;
#endif
@@ -370,6 +384,16 @@ SYSINIT(systrace_load, SI_SUB_DTRACE_PROVIDER, SI_ORDER_ANY, systrace_load, NULL
SYSUNINIT(systrace_unload, SI_SUB_DTRACE_PROVIDER, SI_ORDER_ANY, systrace_unload, NULL);
#ifdef LINUX_SYSTRACE
+DEV_MODULE(systrace_linux, systrace_modevent, NULL);
+MODULE_VERSION(systrace_linux, 1);
+#ifdef __amd64__
+MODULE_DEPEND(systrace_linux, linux64, 1, 1, 1);
+#else
+MODULE_DEPEND(systrace_linux, linux, 1, 1, 1);
+#endif
+MODULE_DEPEND(systrace_linux, dtrace, 1, 1, 1);
+MODULE_DEPEND(systrace_linux, opensolaris, 1, 1, 1);
+#elif defined(LINUX32_SYSTRACE)
DEV_MODULE(systrace_linux32, systrace_modevent, NULL);
MODULE_VERSION(systrace_linux32, 1);
MODULE_DEPEND(systrace_linux32, linux, 1, 1, 1);
diff --git a/sys/compat/cloudabi64/cloudabi64_module.c b/sys/compat/cloudabi64/cloudabi64_module.c
new file mode 100644
index 0000000..ca8ecf4
--- /dev/null
+++ b/sys/compat/cloudabi64/cloudabi64_module.c
@@ -0,0 +1,148 @@
+/*-
+ * Copyright (c) 2015 Nuxi, https://nuxi.nl/
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#include <sys/param.h>
+#include <sys/imgact.h>
+#include <sys/kernel.h>
+#include <sys/module.h>
+#include <sys/proc.h>
+#include <sys/smp.h>
+#include <sys/sysctl.h>
+#include <sys/sysent.h>
+#include <sys/systm.h>
+
+#include <compat/cloudabi64/cloudabi64_syscalldefs.h>
+#include <compat/cloudabi64/cloudabi64_util.h>
+
+register_t *
+cloudabi64_copyout_strings(struct image_params *imgp)
+{
+ struct image_args *args;
+ uintptr_t begin;
+ size_t len;
+
+ /* Copy out program arguments. */
+ args = imgp->args;
+ len = args->begin_envv - args->begin_argv;
+ begin = rounddown2(imgp->sysent->sv_usrstack - len, sizeof(register_t));
+ copyout(args->begin_argv, (void *)begin, len);
+ return ((register_t *)begin);
+}
+
+int
+cloudabi64_fixup(register_t **stack_base, struct image_params *imgp)
+{
+ char canarybuf[64];
+ Elf64_Auxargs *args;
+ struct thread *td;
+ void *argdata, *canary;
+ size_t argdatalen;
+ int error;
+
+ /*
+ * CloudABI executables do not store the FreeBSD OS release
+ * number in their header. Set the OS release number to the
+ * latest version of FreeBSD, so that system calls behave as if
+ * called natively.
+ */
+ td = curthread;
+ td->td_proc->p_osrel = __FreeBSD_version;
+
+ /* Store canary for stack smashing protection. */
+ argdata = *stack_base;
+ arc4rand(canarybuf, sizeof(canarybuf), 0);
+ *stack_base -= howmany(sizeof(canarybuf), sizeof(register_t));
+ canary = *stack_base;
+ error = copyout(canarybuf, canary, sizeof(canarybuf));
+ if (error != 0)
+ return (error);
+
+ /*
+ * Compute length of program arguments. As the argument data is
+ * binary safe, we had to add a trailing null byte in
+ * exec_copyin_data_fds(). Undo this by reducing the length.
+ */
+ args = (Elf64_Auxargs *)imgp->auxargs;
+ argdatalen = imgp->args->begin_envv - imgp->args->begin_argv;
+ if (argdatalen > 0)
+ --argdatalen;
+
+ /* Write out an auxiliary vector. */
+ cloudabi64_auxv_t auxv[] = {
+#define VAL(type, val) { .a_type = (type), .a_val = (val) }
+#define PTR(type, ptr) { .a_type = (type), .a_ptr = (uintptr_t)(ptr) }
+ PTR(CLOUDABI_AT_ARGDATA, argdata),
+ VAL(CLOUDABI_AT_ARGDATALEN, argdatalen),
+ PTR(CLOUDABI_AT_CANARY, canary),
+ VAL(CLOUDABI_AT_CANARYLEN, sizeof(canarybuf)),
+ VAL(CLOUDABI_AT_NCPUS, mp_ncpus),
+ VAL(CLOUDABI_AT_PAGESZ, args->pagesz),
+ PTR(CLOUDABI_AT_PHDR, args->phdr),
+ VAL(CLOUDABI_AT_PHNUM, args->phnum),
+ VAL(CLOUDABI_AT_TID, td->td_tid),
+#undef VAL
+#undef PTR
+ { .a_type = CLOUDABI_AT_NULL },
+ };
+ *stack_base -= howmany(sizeof(auxv), sizeof(register_t));
+ return (copyout(auxv, *stack_base, sizeof(auxv)));
+}
+
+static int
+cloudabi64_modevent(module_t mod, int type, void *data)
+{
+
+ switch (type) {
+ case MOD_LOAD:
+ if (elf64_insert_brand_entry(&cloudabi64_brand) < 0) {
+ printf("Failed to add CloudABI ELF brand handler\n");
+ return (EINVAL);
+ }
+ return (0);
+ case MOD_UNLOAD:
+ if (elf64_brand_inuse(&cloudabi64_brand))
+ return (EBUSY);
+ if (elf64_remove_brand_entry(&cloudabi64_brand) < 0) {
+ printf("Failed to remove CloudABI ELF brand handler\n");
+ return (EINVAL);
+ }
+ return (0);
+ default:
+ return (EOPNOTSUPP);
+ }
+}
+
+static moduledata_t cloudabi64_module = {
+ "cloudabi64",
+ cloudabi64_modevent,
+ NULL
+};
+
+DECLARE_MODULE_TIED(cloudabi64, cloudabi64_module, SI_SUB_EXEC, SI_ORDER_ANY);
+MODULE_DEPEND(cloudabi64, cloudabi, 1, 1, 1);
+FEATURE(cloudabi64, "CloudABI 64bit support");
diff --git a/sys/compat/cloudabi64/cloudabi64_util.h b/sys/compat/cloudabi64/cloudabi64_util.h
index c56d4cc..180a01e 100644
--- a/sys/compat/cloudabi64/cloudabi64_util.h
+++ b/sys/compat/cloudabi64/cloudabi64_util.h
@@ -28,10 +28,20 @@
#ifndef _CLOUDABI64_UTIL_H_
#define _CLOUDABI64_UTIL_H_
+#include <sys/types.h>
+#include <sys/imgact_elf.h>
+
#include <compat/cloudabi64/cloudabi64_syscalldefs.h>
+struct image_params;
struct thread;
+extern Elf64_Brandinfo cloudabi64_brand;
+
+/* Stack initialization during process execution. */
+register_t *cloudabi64_copyout_strings(struct image_params *);
+int cloudabi64_fixup(register_t **, struct image_params *);
+
void cloudabi64_thread_setregs(struct thread *,
const cloudabi64_threadattr_t *);
diff --git a/sys/compat/linux/linux_misc.c b/sys/compat/linux/linux_misc.c
index ccb618c..de91869 100644
--- a/sys/compat/linux/linux_misc.c
+++ b/sys/compat/linux/linux_misc.c
@@ -2356,7 +2356,13 @@ linux_ppoll(struct thread *td, struct linux_ppoll_args *args)
#if defined(DEBUG) || defined(KTR)
/* XXX: can be removed when every ldebug(...) and KTR stuff are removed. */
-u_char linux_debug_map[howmany(LINUX_SYS_MAXSYSCALL, sizeof(u_char))];
+#ifdef COMPAT_LINUX32
+#define L_MAXSYSCALL LINUX32_SYS_MAXSYSCALL
+#else
+#define L_MAXSYSCALL LINUX_SYS_MAXSYSCALL
+#endif
+
+u_char linux_debug_map[howmany(L_MAXSYSCALL, sizeof(u_char))];
static int
linux_debug(int syscall, int toggle, int global)
@@ -2368,7 +2374,7 @@ linux_debug(int syscall, int toggle, int global)
memset(linux_debug_map, c, sizeof(linux_debug_map));
return (0);
}
- if (syscall < 0 || syscall >= LINUX_SYS_MAXSYSCALL)
+ if (syscall < 0 || syscall >= L_MAXSYSCALL)
return (EINVAL);
if (toggle)
clrbit(linux_debug_map, syscall);
@@ -2376,6 +2382,7 @@ linux_debug(int syscall, int toggle, int global)
setbit(linux_debug_map, syscall);
return (0);
}
+#undef L_MAXSYSCALL
/*
* Usage: sysctl linux.debug=<syscall_nr>.<0/1>
diff --git a/sys/ofed/include/asm/atomic-long.h b/sys/compat/linuxkpi/common/include/asm/atomic-long.h
index 1a8c915..f522af8 100644
--- a/sys/ofed/include/asm/atomic-long.h
+++ b/sys/compat/linuxkpi/common/include/asm/atomic-long.h
@@ -25,8 +25,9 @@
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * $FreeBSD$
*/
-
#ifndef _ATOMIC_LONG_H_
#define _ATOMIC_LONG_H_
diff --git a/sys/ofed/include/asm/atomic.h b/sys/compat/linuxkpi/common/include/asm/atomic.h
index f27fa9c..fc22a39 100644
--- a/sys/ofed/include/asm/atomic.h
+++ b/sys/compat/linuxkpi/common/include/asm/atomic.h
@@ -25,8 +25,9 @@
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * $FreeBSD$
*/
-
#ifndef _ASM_ATOMIC_H_
#define _ASM_ATOMIC_H_
diff --git a/sys/ofed/include/asm/byteorder.h b/sys/compat/linuxkpi/common/include/asm/byteorder.h
index 451831d..7168e49 100644
--- a/sys/ofed/include/asm/byteorder.h
+++ b/sys/compat/linuxkpi/common/include/asm/byteorder.h
@@ -25,8 +25,9 @@
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * $FreeBSD$
*/
-
#ifndef _ASM_BYTEORDER_H_
#define _ASM_BYTEORDER_H_
diff --git a/sys/ofed/include/asm/fcntl.h b/sys/compat/linuxkpi/common/include/asm/fcntl.h
index 38ab48b..f24624e 100644
--- a/sys/ofed/include/asm/fcntl.h
+++ b/sys/compat/linuxkpi/common/include/asm/fcntl.h
@@ -25,6 +25,8 @@
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * $FreeBSD$
*/
#ifndef _ASM_FCNTL_H_
#define _ASM_FCNTL_H_
diff --git a/sys/ofed/include/asm/io.h b/sys/compat/linuxkpi/common/include/asm/io.h
index 6b30ff5..24d350f 100644
--- a/sys/ofed/include/asm/io.h
+++ b/sys/compat/linuxkpi/common/include/asm/io.h
@@ -1,4 +1,4 @@
-/*
+/*-
* Copyright (c) 2010 Isilon Systems, Inc.
* Copyright (c) 2010 iX Systems, Inc.
* Copyright (c) 2010 Panasas, Inc.
@@ -25,8 +25,9 @@
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * $FreeBSD$
*/
-
#ifndef _ASM_IO_H_
#define _ASM_IO_H_
diff --git a/sys/ofed/include/asm/pgtable.h b/sys/compat/linuxkpi/common/include/asm/pgtable.h
index f302e58..7bdab1c 100644
--- a/sys/ofed/include/asm/pgtable.h
+++ b/sys/compat/linuxkpi/common/include/asm/pgtable.h
@@ -25,6 +25,8 @@
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * $FreeBSD$
*/
#ifndef _ASM_PGTABLE_H_
#define _ASM_PGTABLE_H_
diff --git a/sys/ofed/include/asm/types.h b/sys/compat/linuxkpi/common/include/asm/types.h
index 3007413..fb2fd56 100644
--- a/sys/ofed/include/asm/types.h
+++ b/sys/compat/linuxkpi/common/include/asm/types.h
@@ -25,8 +25,9 @@
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * $FreeBSD$
*/
-
#ifndef _ASM_TYPES_H_
#define _ASM_TYPES_H_
diff --git a/sys/ofed/include/asm/uaccess.h b/sys/compat/linuxkpi/common/include/asm/uaccess.h
index 3416553..ce90355 100644
--- a/sys/ofed/include/asm/uaccess.h
+++ b/sys/compat/linuxkpi/common/include/asm/uaccess.h
@@ -25,8 +25,9 @@
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * $FreeBSD$
*/
-
#ifndef _ASM_UACCESS_H_
#define _ASM_UACCESS_H_
diff --git a/sys/ofed/include/linux/bitops.h b/sys/compat/linuxkpi/common/include/linux/bitops.h
index d3f82fe..8b985a9 100644
--- a/sys/ofed/include/linux/bitops.h
+++ b/sys/compat/linuxkpi/common/include/linux/bitops.h
@@ -2,7 +2,7 @@
* Copyright (c) 2010 Isilon Systems, Inc.
* Copyright (c) 2010 iX Systems, Inc.
* Copyright (c) 2010 Panasas, Inc.
- * Copyright (c) 2013, 2014 Mellanox Technologies, Ltd.
+ * Copyright (c) 2013-2015 Mellanox Technologies, Ltd.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -25,19 +25,27 @@
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * $FreeBSD$
*/
#ifndef _LINUX_BITOPS_H_
#define _LINUX_BITOPS_H_
+#include <sys/types.h>
+#include <sys/systm.h>
+
+#define BIT(nr) (1UL << (nr))
#ifdef __LP64__
#define BITS_PER_LONG 64
#else
#define BITS_PER_LONG 32
#endif
-#define BIT_MASK(n) (~0UL >> (BITS_PER_LONG - (n)))
+#define BITMAP_FIRST_WORD_MASK(start) (~0UL << ((start) % BITS_PER_LONG))
+#define BITMAP_LAST_WORD_MASK(n) (~0UL >> (BITS_PER_LONG - (n)))
#define BITS_TO_LONGS(n) howmany((n), BITS_PER_LONG)
+#define BIT_MASK(nr) (1UL << ((nr) & (BITS_PER_LONG - 1)))
#define BIT_WORD(nr) ((nr) / BITS_PER_LONG)
-
+#define GENMASK(lo, hi) (((2UL << ((hi) - (lo))) - 1UL) << (lo))
#define BITS_PER_BYTE 8
static inline int
@@ -90,7 +98,7 @@ find_first_bit(unsigned long *addr, unsigned long size)
return (bit + __ffsl(*addr));
}
if (size) {
- mask = (*addr) & BIT_MASK(size);
+ mask = (*addr) & BITMAP_LAST_WORD_MASK(size);
if (mask)
bit += __ffsl(mask);
else
@@ -112,7 +120,7 @@ find_first_zero_bit(unsigned long *addr, unsigned long size)
return (bit + __ffsl(~(*addr)));
}
if (size) {
- mask = ~(*addr) & BIT_MASK(size);
+ mask = ~(*addr) & BITMAP_LAST_WORD_MASK(size);
if (mask)
bit += __ffsl(mask);
else
@@ -134,7 +142,7 @@ find_last_bit(unsigned long *addr, unsigned long size)
bit = BITS_PER_LONG * pos;
addr += pos;
if (offs) {
- mask = (*addr) & BIT_MASK(offs);
+ mask = (*addr) & BITMAP_LAST_WORD_MASK(offs);
if (mask)
return (bit + __flsl(mask));
}
@@ -162,7 +170,7 @@ find_next_bit(unsigned long *addr, unsigned long size, unsigned long offset)
bit = BITS_PER_LONG * pos;
addr += pos;
if (offs) {
- mask = (*addr) & ~BIT_MASK(offs);
+ mask = (*addr) & ~BITMAP_LAST_WORD_MASK(offs);
if (mask)
return (bit + __ffsl(mask));
if (size - bit <= BITS_PER_LONG)
@@ -177,7 +185,7 @@ find_next_bit(unsigned long *addr, unsigned long size, unsigned long offset)
return (bit + __ffsl(*addr));
}
if (size) {
- mask = (*addr) & BIT_MASK(size);
+ mask = (*addr) & BITMAP_LAST_WORD_MASK(size);
if (mask)
bit += __ffsl(mask);
else
@@ -202,7 +210,7 @@ find_next_zero_bit(unsigned long *addr, unsigned long size,
bit = BITS_PER_LONG * pos;
addr += pos;
if (offs) {
- mask = ~(*addr) & ~BIT_MASK(offs);
+ mask = ~(*addr) & ~BITMAP_LAST_WORD_MASK(offs);
if (mask)
return (bit + __ffsl(mask));
if (size - bit <= BITS_PER_LONG)
@@ -217,7 +225,7 @@ find_next_zero_bit(unsigned long *addr, unsigned long size,
return (bit + __ffsl(~(*addr)));
}
if (size) {
- mask = ~(*addr) & BIT_MASK(size);
+ mask = ~(*addr) & BITMAP_LAST_WORD_MASK(size);
if (mask)
bit += __ffsl(mask);
else
@@ -245,13 +253,13 @@ bitmap_fill(unsigned long *addr, int size)
memset(addr, 0xff, len);
tail = size & (BITS_PER_LONG - 1);
if (tail)
- addr[size / BITS_PER_LONG] = BIT_MASK(tail);
+ addr[size / BITS_PER_LONG] = BITMAP_LAST_WORD_MASK(tail);
}
static inline int
bitmap_full(unsigned long *addr, int size)
{
- long mask;
+ unsigned long mask;
int tail;
int len;
int i;
@@ -262,7 +270,7 @@ bitmap_full(unsigned long *addr, int size)
return (0);
tail = size & (BITS_PER_LONG - 1);
if (tail) {
- mask = BIT_MASK(tail);
+ mask = BITMAP_LAST_WORD_MASK(tail);
if ((addr[i] & mask) != mask)
return (0);
}
@@ -272,7 +280,7 @@ bitmap_full(unsigned long *addr, int size)
static inline int
bitmap_empty(unsigned long *addr, int size)
{
- long mask;
+ unsigned long mask;
int tail;
int len;
int i;
@@ -283,38 +291,36 @@ bitmap_empty(unsigned long *addr, int size)
return (0);
tail = size & (BITS_PER_LONG - 1);
if (tail) {
- mask = BIT_MASK(tail);
+ mask = BITMAP_LAST_WORD_MASK(tail);
if ((addr[i] & mask) != 0)
return (0);
}
return (1);
}
-#define NBLONG (NBBY * sizeof(long))
-
#define __set_bit(i, a) \
- atomic_set_long(&((volatile long *)(a))[(i)/NBLONG], 1UL << ((i) % NBLONG))
+ atomic_set_long(&((volatile long *)(a))[BIT_WORD(i)], BIT_MASK(i))
#define set_bit(i, a) \
- atomic_set_long(&((volatile long *)(a))[(i)/NBLONG], 1UL << ((i) % NBLONG))
+ atomic_set_long(&((volatile long *)(a))[BIT_WORD(i)], BIT_MASK(i))
#define __clear_bit(i, a) \
- atomic_clear_long(&((volatile long *)(a))[(i)/NBLONG], 1UL << ((i) % NBLONG))
+ atomic_clear_long(&((volatile long *)(a))[BIT_WORD(i)], BIT_MASK(i))
#define clear_bit(i, a) \
- atomic_clear_long(&((volatile long *)(a))[(i)/NBLONG], 1UL << ((i) % NBLONG))
+ atomic_clear_long(&((volatile long *)(a))[BIT_WORD(i)], BIT_MASK(i))
#define test_bit(i, a) \
- !!(atomic_load_acq_long(&((volatile long *)(a))[(i)/NBLONG]) & \
- (1UL << ((i) % NBLONG)))
+ !!(atomic_load_acq_long(&((volatile long *)(a))[BIT_WORD(i)]) & \
+ BIT_MASK(i))
static inline long
test_and_clear_bit(long bit, long *var)
{
long val;
- var += bit / (sizeof(long) * NBBY);
- bit %= sizeof(long) * NBBY;
+ var += BIT_WORD(bit);
+ bit %= BITS_PER_LONG;
bit = (1UL << bit);
do {
val = *(volatile long *)var;
@@ -328,8 +334,8 @@ test_and_set_bit(long bit, long *var)
{
long val;
- var += bit / (sizeof(long) * NBBY);
- bit %= sizeof(long) * NBBY;
+ var += BIT_WORD(bit);
+ bit %= BITS_PER_LONG;
bit = (1UL << bit);
do {
val = *(volatile long *)var;
@@ -338,15 +344,6 @@ test_and_set_bit(long bit, long *var)
return !!(val & bit);
}
-
-#define BITMAP_FIRST_WORD_MASK(start) (~0UL << ((start) % BITS_PER_LONG))
-#define BITMAP_LAST_WORD_MASK(nbits) \
-( \
- ((nbits) % BITS_PER_LONG) ? \
- (1UL<<((nbits) % BITS_PER_LONG))-1 : ~0UL \
-)
-
-
static inline void
bitmap_set(unsigned long *map, int start, int nr)
{
@@ -390,36 +387,28 @@ bitmap_clear(unsigned long *map, int start, int nr)
}
enum {
- REG_OP_ISFREE, /* true if region is all zero bits */
- REG_OP_ALLOC, /* set all bits in region */
- REG_OP_RELEASE, /* clear all bits in region */
+ REG_OP_ISFREE,
+ REG_OP_ALLOC,
+ REG_OP_RELEASE,
};
static int __reg_op(unsigned long *bitmap, int pos, int order, int reg_op)
{
- int nbits_reg; /* number of bits in region */
- int index; /* index first long of region in bitmap */
- int offset; /* bit offset region in bitmap[index] */
- int nlongs_reg; /* num longs spanned by region in bitmap */
- int nbitsinlong; /* num bits of region in each spanned long */
- unsigned long mask; /* bitmask for one long of region */
- int i; /* scans bitmap by longs */
- int ret = 0; /* return value */
-
- /*
- * Either nlongs_reg == 1 (for small orders that fit in one long)
- * or (offset == 0 && mask == ~0UL) (for larger multiword orders.)
- */
+ int nbits_reg;
+ int index;
+ int offset;
+ int nlongs_reg;
+ int nbitsinlong;
+ unsigned long mask;
+ int i;
+ int ret = 0;
+
nbits_reg = 1 << order;
index = pos / BITS_PER_LONG;
offset = pos - (index * BITS_PER_LONG);
nlongs_reg = BITS_TO_LONGS(nbits_reg);
nbitsinlong = min(nbits_reg, BITS_PER_LONG);
- /*
- * Can't do "mask = (1UL << nbitsinlong) - 1", as that
- * overflows if nbitsinlong == BITS_PER_LONG.
- */
mask = (1UL << (nbitsinlong - 1));
mask += mask - 1;
mask <<= offset;
@@ -430,7 +419,7 @@ static int __reg_op(unsigned long *bitmap, int pos, int order, int reg_op)
if (bitmap[index + i] & mask)
goto done;
}
- ret = 1; /* all bits in region free (zero) */
+ ret = 1;
break;
case REG_OP_ALLOC:
@@ -447,24 +436,11 @@ done:
return ret;
}
-/**
- * bitmap_find_free_region - find a contiguous aligned mem region
- * @bitmap: array of unsigned longs corresponding to the bitmap
- * @bits: number of bits in the bitmap
- * @order: region size (log base 2 of number of bits) to find
- *
- * Find a region of free (zero) bits in a @bitmap of @bits bits and
- * allocate them (set them to one). Only consider regions of length
- * a power (@order) of two, aligned to that power of two, which
- * makes the search algorithm much faster.
- *
- * Return the bit offset in bitmap of the allocated region,
- * or -errno on failure.
- */
static inline int
bitmap_find_free_region(unsigned long *bitmap, int bits, int order)
{
- int pos, end; /* scans bitmap by regions of size order */
+ int pos;
+ int end;
for (pos = 0 ; (end = pos + (1 << order)) <= bits; pos = end) {
if (!__reg_op(bitmap, pos, order, REG_OP_ISFREE))
@@ -475,18 +451,6 @@ bitmap_find_free_region(unsigned long *bitmap, int bits, int order)
return -ENOMEM;
}
-/**
- * bitmap_allocate_region - allocate bitmap region
- * @bitmap: array of unsigned longs corresponding to the bitmap
- * @pos: beginning of bit region to allocate
- * @order: region size (log base 2 of number of bits) to allocate
- *
- * Allocate (set bits in) a specified region of a bitmap.
- *
- * Return 0 on success, or %-EBUSY if specified region wasn't
- * free (not all bits were zero).
- */
-
static inline int
bitmap_allocate_region(unsigned long *bitmap, int pos, int order)
{
@@ -496,17 +460,6 @@ bitmap_allocate_region(unsigned long *bitmap, int pos, int order)
return 0;
}
-/**
- * bitmap_release_region - release allocated bitmap region
- * @bitmap: array of unsigned longs corresponding to the bitmap
- * @pos: beginning of bit region to release
- * @order: region size (log base 2 of number of bits) to release
- *
- * This is the complement to __bitmap_find_free_region() and releases
- * the found region (by clearing it in the bitmap).
- *
- * No return value.
- */
static inline void
bitmap_release_region(unsigned long *bitmap, int pos, int order)
{
diff --git a/sys/ofed/include/linux/cache.h b/sys/compat/linuxkpi/common/include/linux/cache.h
index 921a507..a269e55 100644
--- a/sys/ofed/include/linux/cache.h
+++ b/sys/compat/linuxkpi/common/include/linux/cache.h
@@ -25,8 +25,9 @@
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * $FreeBSD$
*/
-
#ifndef _LINUX_CACHE_H_
#define _LINUX_CACHE_H_
diff --git a/sys/ofed/include/linux/cdev.h b/sys/compat/linuxkpi/common/include/linux/cdev.h
index 986f819..9d5b3fb 100644
--- a/sys/ofed/include/linux/cdev.h
+++ b/sys/compat/linuxkpi/common/include/linux/cdev.h
@@ -25,8 +25,9 @@
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * $FreeBSD$
*/
-
#ifndef _LINUX_CDEV_H_
#define _LINUX_CDEV_H_
diff --git a/sys/ofed/include/linux/clocksource.h b/sys/compat/linuxkpi/common/include/linux/clocksource.h
index c6ded28..7a4835c 100644
--- a/sys/ofed/include/linux/clocksource.h
+++ b/sys/compat/linuxkpi/common/include/linux/clocksource.h
@@ -25,8 +25,9 @@
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * $FreeBSD$
*/
-
#ifndef _LINUX_CLOCKSOURCE_H
#define _LINUX_CLOCKSOURCE_H
diff --git a/sys/ofed/include/linux/compat.h b/sys/compat/linuxkpi/common/include/linux/compat.h
index a8929f3..74ce9ec 100644
--- a/sys/ofed/include/linux/compat.h
+++ b/sys/compat/linuxkpi/common/include/linux/compat.h
@@ -25,8 +25,9 @@
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * $FreeBSD$
*/
-
#ifndef _LINUX_COMPAT_H_
#define _LINUX_COMPAT_H_
diff --git a/sys/ofed/include/linux/compiler.h b/sys/compat/linuxkpi/common/include/linux/compiler.h
index 9b1a5ad..6381358 100644
--- a/sys/ofed/include/linux/compiler.h
+++ b/sys/compat/linuxkpi/common/include/linux/compiler.h
@@ -2,7 +2,8 @@
* Copyright (c) 2010 Isilon Systems, Inc.
* Copyright (c) 2010 iX Systems, Inc.
* Copyright (c) 2010 Panasas, Inc.
- * Copyright (c) 2013, 2014 Mellanox Technologies, Ltd.
+ * Copyright (c) 2013-2015 Mellanox Technologies, Ltd.
+ * Copyright (c) 2015 François Tigeot
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -25,8 +26,9 @@
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * $FreeBSD$
*/
-
#ifndef _LINUX_COMPILER_H_
#define _LINUX_COMPILER_H_
@@ -62,5 +64,12 @@
#define typeof(x) __typeof(x)
#define uninitialized_var(x) x = x
+#define __read_mostly __attribute__((__section__(".data.read_mostly")))
+#define __always_unused __unused
+#define __must_check __result_use_check
+
+#define __printf(a,b) __printflike(a,b)
+
+#define barrier() __asm__ __volatile__("": : :"memory")
#endif /* _LINUX_COMPILER_H_ */
diff --git a/sys/ofed/include/linux/completion.h b/sys/compat/linuxkpi/common/include/linux/completion.h
index 1e27e2a..7cfb10d 100644
--- a/sys/ofed/include/linux/completion.h
+++ b/sys/compat/linuxkpi/common/include/linux/completion.h
@@ -25,8 +25,9 @@
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * $FreeBSD$
*/
-
#ifndef _LINUX_COMPLETION_H_
#define _LINUX_COMPLETION_H_
diff --git a/sys/ofed/include/linux/delay.h b/sys/compat/linuxkpi/common/include/linux/delay.h
index ac9e46d..da38662 100644
--- a/sys/ofed/include/linux/delay.h
+++ b/sys/compat/linuxkpi/common/include/linux/delay.h
@@ -2,7 +2,8 @@
* Copyright (c) 2010 Isilon Systems, Inc.
* Copyright (c) 2010 iX Systems, Inc.
* Copyright (c) 2010 Panasas, Inc.
- * Copyright (c) 2013, 2014 Mellanox Technologies, Ltd.
+ * Copyright (c) 2013-2015 Mellanox Technologies, Ltd.
+ * Copyright (c) 2014 François Tigeot
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -25,12 +26,14 @@
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * $FreeBSD$
*/
-
#ifndef _LINUX_DELAY_H_
#define _LINUX_DELAY_H_
#include <linux/jiffies.h>
+#include <sys/systm.h>
static inline void
linux_msleep(int ms)
@@ -41,4 +44,25 @@ linux_msleep(int ms)
#undef msleep
#define msleep linux_msleep
+#define udelay(t) DELAY(t)
+
+static inline void
+mdelay(unsigned long msecs)
+{
+ while (msecs--)
+ DELAY(1000);
+}
+
+static inline void
+ndelay(unsigned long x)
+{
+ DELAY(howmany(x, 1000));
+}
+
+static inline void
+usleep_range(unsigned long min, unsigned long max)
+{
+ DELAY(min);
+}
+
#endif /* _LINUX_DELAY_H_ */
diff --git a/sys/ofed/include/linux/device.h b/sys/compat/linuxkpi/common/include/linux/device.h
index b7795fc..3459a5c 100644
--- a/sys/ofed/include/linux/device.h
+++ b/sys/compat/linuxkpi/common/include/linux/device.h
@@ -25,6 +25,8 @@
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * $FreeBSD$
*/
#ifndef _LINUX_DEVICE_H_
#define _LINUX_DEVICE_H_
diff --git a/sys/ofed/include/linux/dma-attrs.h b/sys/compat/linuxkpi/common/include/linux/dma-attrs.h
index a379e17..fda2282 100644
--- a/sys/ofed/include/linux/dma-attrs.h
+++ b/sys/compat/linuxkpi/common/include/linux/dma-attrs.h
@@ -25,6 +25,8 @@
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * $FreeBSD$
*/
#ifndef _LINUX_DMA_ATTR_H_
#define _LINUX_DMA_ATTR_H_
diff --git a/sys/ofed/include/linux/dma-mapping.h b/sys/compat/linuxkpi/common/include/linux/dma-mapping.h
index 3af3e22..da08751 100644
--- a/sys/ofed/include/linux/dma-mapping.h
+++ b/sys/compat/linuxkpi/common/include/linux/dma-mapping.h
@@ -25,6 +25,8 @@
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * $FreeBSD$
*/
#ifndef _LINUX_DMA_MAPPING_H_
#define _LINUX_DMA_MAPPING_H_
diff --git a/sys/ofed/include/linux/dmapool.h b/sys/compat/linuxkpi/common/include/linux/dmapool.h
index a6486db..3ea2d5b 100644
--- a/sys/ofed/include/linux/dmapool.h
+++ b/sys/compat/linuxkpi/common/include/linux/dmapool.h
@@ -25,8 +25,9 @@
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * $FreeBSD$
*/
-
#ifndef _LINUX_DMAPOOL_H_
#define _LINUX_DMAPOOL_H_
diff --git a/sys/ofed/include/linux/err.h b/sys/compat/linuxkpi/common/include/linux/err.h
index fe6b71d..2366130 100644
--- a/sys/ofed/include/linux/err.h
+++ b/sys/compat/linuxkpi/common/include/linux/err.h
@@ -2,7 +2,7 @@
* Copyright (c) 2010 Isilon Systems, Inc.
* Copyright (c) 2010 iX Systems, Inc.
* Copyright (c) 2010 Panasas, Inc.
- * Copyright (c) 2013, 2014 Mellanox Technologies, Ltd.
+ * Copyright (c) 2013-2015 Mellanox Technologies, Ltd.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -25,8 +25,9 @@
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * $FreeBSD$
*/
-
#ifndef _LINUX_ERR_H_
#define _LINUX_ERR_H_
@@ -52,6 +53,12 @@ IS_ERR(const void *ptr)
return IS_ERR_VALUE((unsigned long)ptr);
}
+static inline long
+IS_ERR_OR_NULL(const void *ptr)
+{
+ return !ptr || IS_ERR_VALUE((unsigned long)ptr);
+}
+
static inline void *
ERR_CAST(void *ptr)
{
diff --git a/sys/ofed/include/linux/errno.h b/sys/compat/linuxkpi/common/include/linux/errno.h
index 55e192b..a043a3d 100644
--- a/sys/ofed/include/linux/errno.h
+++ b/sys/compat/linuxkpi/common/include/linux/errno.h
@@ -25,13 +25,16 @@
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * $FreeBSD$
*/
-
#ifndef _LINUX_ERRNO_H_
#define _LINUX_ERRNO_H_
#include <sys/errno.h>
+#define ECHRNG EDOM
+#define ETIME ETIMEDOUT
#define ECOMM ESTALE
#define ENODATA ECONNREFUSED
#define ENOIOCTLCMD ENOIOCTL
diff --git a/sys/compat/linuxkpi/common/include/linux/etherdevice.h b/sys/compat/linuxkpi/common/include/linux/etherdevice.h
new file mode 100644
index 0000000..12ea345
--- /dev/null
+++ b/sys/compat/linuxkpi/common/include/linux/etherdevice.h
@@ -0,0 +1,62 @@
+/*-
+ * Copyright (c) 2015 Mellanox Technologies, Ltd. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice unmodified, this list of conditions, and the following
+ * disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * $FreeBSD$
+ */
+#ifndef _LINUX_ETHERDEVICE
+#define _LINUX_ETHERDEVICE
+
+#include <linux/types.h>
+
+static inline bool
+is_zero_ether_addr(const u8 * addr)
+{
+ return ((addr[0] + addr[1] + addr[2] + addr[3] + addr[4] + addr[5]) == 0x00);
+}
+
+static inline bool
+is_multicast_ether_addr(const u8 * addr)
+{
+ return (0x01 & addr[0]);
+}
+
+static inline bool
+is_broadcast_ether_addr(const u8 * addr)
+{
+ return ((addr[0] + addr[1] + addr[2] + addr[3] + addr[4] + addr[5]) == (6 * 0xff));
+}
+
+static inline bool
+is_valid_ether_addr(const u8 * addr)
+{
+ return !is_multicast_ether_addr(addr) && !is_zero_ether_addr(addr);
+}
+
+static inline void
+ether_addr_copy(u8 * dst, const u8 * src)
+{
+ memcpy(dst, src, 6);
+}
+
+#endif /* _LINUX_ETHERDEVICE */
diff --git a/sys/ofed/include/linux/file.h b/sys/compat/linuxkpi/common/include/linux/file.h
index e2cebab..b23c971 100644
--- a/sys/ofed/include/linux/file.h
+++ b/sys/compat/linuxkpi/common/include/linux/file.h
@@ -25,6 +25,8 @@
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * $FreeBSD$
*/
#ifndef _LINUX_FILE_H_
#define _LINUX_FILE_H_
diff --git a/sys/ofed/include/linux/fs.h b/sys/compat/linuxkpi/common/include/linux/fs.h
index b3f2810..797b816 100644
--- a/sys/ofed/include/linux/fs.h
+++ b/sys/compat/linuxkpi/common/include/linux/fs.h
@@ -25,6 +25,8 @@
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * $FreeBSD$
*/
#ifndef _LINUX_FS_H_
#define _LINUX_FS_H_
diff --git a/sys/ofed/include/linux/gfp.h b/sys/compat/linuxkpi/common/include/linux/gfp.h
index cb43104..a82f30d 100644
--- a/sys/ofed/include/linux/gfp.h
+++ b/sys/compat/linuxkpi/common/include/linux/gfp.h
@@ -25,8 +25,9 @@
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * $FreeBSD$
*/
-
#ifndef _LINUX_GFP_H_
#define _LINUX_GFP_H_
diff --git a/sys/ofed/include/linux/hardirq.h b/sys/compat/linuxkpi/common/include/linux/hardirq.h
index af78ac4..b8e4c95 100644
--- a/sys/ofed/include/linux/hardirq.h
+++ b/sys/compat/linuxkpi/common/include/linux/hardirq.h
@@ -25,6 +25,8 @@
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * $FreeBSD$
*/
#ifndef _LINUX_HARDIRQ_H_
#define _LINUX_HARDIRQ_H_
diff --git a/sys/ofed/include/linux/idr.h b/sys/compat/linuxkpi/common/include/linux/idr.h
index 207d7f7..9beec68 100644
--- a/sys/ofed/include/linux/idr.h
+++ b/sys/compat/linuxkpi/common/include/linux/idr.h
@@ -25,8 +25,9 @@
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * $FreeBSD$
*/
-
#ifndef _LINUX_IDR_H_
#define _LINUX_IDR_H_
diff --git a/sys/ofed/include/linux/if_arp.h b/sys/compat/linuxkpi/common/include/linux/if_arp.h
index 9694690..6233aac 100644
--- a/sys/ofed/include/linux/if_arp.h
+++ b/sys/compat/linuxkpi/common/include/linux/if_arp.h
@@ -25,6 +25,8 @@
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * $FreeBSD$
*/
#ifndef _LINUX_IF_ARP_H_
#define _LINUX_IF_ARP_H_
diff --git a/sys/ofed/include/linux/if_ether.h b/sys/compat/linuxkpi/common/include/linux/if_ether.h
index fae7a76..c89e1e2 100644
--- a/sys/ofed/include/linux/if_ether.h
+++ b/sys/compat/linuxkpi/common/include/linux/if_ether.h
@@ -25,6 +25,8 @@
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * $FreeBSD$
*/
#ifndef _LINUX_IF_ETHER_H_
#define _LINUX_IF_ETHER_H_
diff --git a/sys/ofed/include/linux/if_vlan.h b/sys/compat/linuxkpi/common/include/linux/if_vlan.h
index 8b0cd29..4a8808f 100644
--- a/sys/ofed/include/linux/if_vlan.h
+++ b/sys/compat/linuxkpi/common/include/linux/if_vlan.h
@@ -25,8 +25,9 @@
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * $FreeBSD$
*/
-
#ifndef _LINUX_IF_VLAN_H_
#define _LINUX_IF_VLAN_H_
diff --git a/sys/ofed/include/linux/in.h b/sys/compat/linuxkpi/common/include/linux/in.h
index 102563f..f390c1d 100644
--- a/sys/ofed/include/linux/in.h
+++ b/sys/compat/linuxkpi/common/include/linux/in.h
@@ -25,6 +25,8 @@
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * $FreeBSD$
*/
#ifndef _LINUX_IN_H_
#define _LINUX_IN_H_
diff --git a/sys/ofed/include/linux/in6.h b/sys/compat/linuxkpi/common/include/linux/in6.h
index 2740142..ef012dd 100644
--- a/sys/ofed/include/linux/in6.h
+++ b/sys/compat/linuxkpi/common/include/linux/in6.h
@@ -25,8 +25,9 @@
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * $FreeBSD$
*/
-
#ifndef _LINUX_IN6_H_
#define _LINUX_IN6_H_
diff --git a/sys/ofed/include/linux/inetdevice.h b/sys/compat/linuxkpi/common/include/linux/inetdevice.h
index 554348c..12d7544 100644
--- a/sys/ofed/include/linux/inetdevice.h
+++ b/sys/compat/linuxkpi/common/include/linux/inetdevice.h
@@ -25,8 +25,9 @@
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * $FreeBSD$
*/
-
#ifndef _LINUX_INETDEVICE_H_
#define _LINUX_INETDEVICE_H_
diff --git a/sys/ofed/include/linux/interrupt.h b/sys/compat/linuxkpi/common/include/linux/interrupt.h
index d97d6a9..4c0ad80 100644
--- a/sys/ofed/include/linux/interrupt.h
+++ b/sys/compat/linuxkpi/common/include/linux/interrupt.h
@@ -2,7 +2,7 @@
* Copyright (c) 2010 Isilon Systems, Inc.
* Copyright (c) 2010 iX Systems, Inc.
* Copyright (c) 2010 Panasas, Inc.
- * Copyright (c) 2013, 2014 Mellanox Technologies, Ltd.
+ * Copyright (c) 2013-2015 Mellanox Technologies, Ltd.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -25,8 +25,9 @@
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * $FreeBSD$
*/
-
#ifndef _LINUX_INTERRUPT_H_
#define _LINUX_INTERRUPT_H_
@@ -117,6 +118,23 @@ request_irq(unsigned int irq, irq_handler_t handler, unsigned long flags,
return 0;
}
+static inline int
+bind_irq_to_cpu(unsigned int irq, int cpu_id)
+{
+ struct irq_ent *irqe;
+ struct device *dev;
+
+ dev = _pci_find_irq_dev(irq);
+ if (dev == NULL)
+ return (-ENOENT);
+
+ irqe = _irq_ent(dev, irq);
+ if (irqe == NULL)
+ return (-ENOENT);
+
+ return (-bus_bind_intr(dev->bsddev, irqe->res, cpu_id));
+}
+
static inline void
free_irq(unsigned int irq, void *device)
{
diff --git a/sys/ofed/include/linux/io-mapping.h b/sys/compat/linuxkpi/common/include/linux/io-mapping.h
index ea62a73..8650dba 100644
--- a/sys/ofed/include/linux/io-mapping.h
+++ b/sys/compat/linuxkpi/common/include/linux/io-mapping.h
@@ -25,8 +25,9 @@
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * $FreeBSD$
*/
-
#ifndef _LINUX_IO_MAPPING_H_
#define _LINUX_IO_MAPPING_H_
diff --git a/sys/ofed/include/linux/io.h b/sys/compat/linuxkpi/common/include/linux/io.h
index 4c8c9f5..16543ff 100644
--- a/sys/ofed/include/linux/io.h
+++ b/sys/compat/linuxkpi/common/include/linux/io.h
@@ -25,8 +25,9 @@
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * $FreeBSD$
*/
-
#ifndef _LINUX_IO_H_
#define _LINUX_IO_H_
diff --git a/sys/ofed/include/linux/ioctl.h b/sys/compat/linuxkpi/common/include/linux/ioctl.h
index 289a296..6f57906 100644
--- a/sys/ofed/include/linux/ioctl.h
+++ b/sys/compat/linuxkpi/common/include/linux/ioctl.h
@@ -25,8 +25,9 @@
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * $FreeBSD$
*/
-
#ifndef _LINUX_IOCTL_H_
#define _LINUX_IOCTL_H_
diff --git a/sys/ofed/include/linux/jhash.h b/sys/compat/linuxkpi/common/include/linux/jhash.h
index ff6ff09..f31829e 100644
--- a/sys/ofed/include/linux/jhash.h
+++ b/sys/compat/linuxkpi/common/include/linux/jhash.h
@@ -18,6 +18,8 @@
*
* I've modified Bob's hash to be useful in the Linux kernel, and
* any bugs present are surely my fault. -DaveM
+ *
+ * $FreeBSD$
*/
/* NOTE: Arguments are modified. */
diff --git a/sys/ofed/include/linux/jiffies.h b/sys/compat/linuxkpi/common/include/linux/jiffies.h
index dce2e15..f7bc529 100644
--- a/sys/ofed/include/linux/jiffies.h
+++ b/sys/compat/linuxkpi/common/include/linux/jiffies.h
@@ -25,15 +25,19 @@
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * $FreeBSD$
*/
#ifndef _LINUX_JIFFIES_H_
#define _LINUX_JIFFIES_H_
#include <linux/types.h>
#include <linux/kernel.h>
+#include <linux/time.h>
#include <sys/time.h>
#include <sys/kernel.h>
+#include <sys/limits.h>
static inline int
msecs_to_jiffies(int msec)
@@ -46,13 +50,49 @@ msecs_to_jiffies(int msec)
}
#define jiffies ticks
+#define jiffies_64 ticks
#define jiffies_to_msecs(x) (((int64_t)(x)) * 1000 / hz)
+#define MAX_JIFFY_OFFSET ((INT_MAX >> 1) - 1)
+
#define time_after(a, b) ((int)((b) - (a)) < 0)
#define time_before(a, b) time_after(b,a)
#define time_after_eq(a, b) ((int)((a) - (b)) >= 0)
#define time_before_eq(a, b) time_after_eq(b, a)
+#define time_in_range(a,b,c) \
+ (time_after_eq(a,b) && time_before_eq(a,c))
#define HZ hz
+static inline int
+timespec_to_jiffies(const struct timespec *ts)
+{
+ u64 result;
+
+ result = ((u64)hz * ts->tv_sec) +
+ (((u64)hz * ts->tv_nsec + NSEC_PER_SEC - 1) / NSEC_PER_SEC);
+ if (result > MAX_JIFFY_OFFSET)
+ result = MAX_JIFFY_OFFSET;
+
+ return ((int)result);
+}
+
+static inline int
+usecs_to_jiffies(const unsigned int u)
+{
+ u64 result;
+
+ result = ((u64)u * hz + 1000000 - 1) / 1000000;
+ if (result > MAX_JIFFY_OFFSET)
+ result = MAX_JIFFY_OFFSET;
+
+ return ((int)result);
+}
+
+static inline u64
+get_jiffies_64(void)
+{
+ return ((u64)(unsigned)ticks);
+}
+
#endif /* _LINUX_JIFFIES_H_ */
diff --git a/sys/ofed/include/linux/kdev_t.h b/sys/compat/linuxkpi/common/include/linux/kdev_t.h
index 8aaca2d..8dea1ab 100644
--- a/sys/ofed/include/linux/kdev_t.h
+++ b/sys/compat/linuxkpi/common/include/linux/kdev_t.h
@@ -25,8 +25,9 @@
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * $FreeBSD$
*/
-
#ifndef _LINUX_KDEV_T_H_
#define _LINUX_KDEV_T_H_
diff --git a/sys/ofed/include/linux/kernel.h b/sys/compat/linuxkpi/common/include/linux/kernel.h
index f205e20..bfc3b7d 100644
--- a/sys/ofed/include/linux/kernel.h
+++ b/sys/compat/linuxkpi/common/include/linux/kernel.h
@@ -2,7 +2,8 @@
* Copyright (c) 2010 Isilon Systems, Inc.
* Copyright (c) 2010 iX Systems, Inc.
* Copyright (c) 2010 Panasas, Inc.
- * Copyright (c) 2013, 2014 Mellanox Technologies, Ltd.
+ * Copyright (c) 2013-2015 Mellanox Technologies, Ltd.
+ * Copyright (c) 2014-2015 François Tigeot
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -25,6 +26,8 @@
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * $FreeBSD$
*/
#ifndef _LINUX_KERNEL_H_
#define _LINUX_KERNEL_H_
@@ -69,7 +72,8 @@
#define ALIGN(x, y) roundup2((x), (y))
#undef PTR_ALIGN
#define PTR_ALIGN(p, a) ((__typeof(p))ALIGN((uintptr_t)(p), (a)))
-#define DIV_ROUND_UP howmany
+#define DIV_ROUND_UP(x, n) howmany(x, n)
+#define DIV_ROUND_UP_ULL(x, n) DIV_ROUND_UP((unsigned long long)(x), (n))
#define FIELD_SIZEOF(t, f) sizeof(((t *)0)->f)
#define printk(X...) printf(X)
@@ -90,9 +94,6 @@
({ if (0) log(LOG_DEBUG, pr_fmt(fmt), ##__VA_ARGS__); 0; })
#endif
-#define udelay(t) DELAY(t)
-#define usleep_range(min,max) DELAY(min)
-
#ifndef pr_fmt
#define pr_fmt(fmt) fmt
#endif
@@ -164,9 +165,16 @@
#define min(x, y) ((x) < (y) ? (x) : (y))
#define max(x, y) ((x) > (y) ? (x) : (y))
+
+#define min3(a, b, c) min(a, min(b,c))
+#define max3(a, b, c) max(a, max(b,c))
+
#define min_t(type, _x, _y) ((type)(_x) < (type)(_y) ? (type)(_x) : (type)(_y))
#define max_t(type, _x, _y) ((type)(_x) > (type)(_y) ? (type)(_x) : (type)(_y))
+#define clamp_t(type, _x, min, max) min_t(type, max_t(type, _x, min), max)
+#define clamp(x, lo, hi) min( max(x,lo), hi)
+
/*
* This looks more complex than it should be. But we need to
* get the type for the ~ right in round_down (it needs to be
@@ -184,4 +192,28 @@ typedef struct pm_message {
int event;
} pm_message_t;
+/* Swap values of a and b */
+#define swap(a, b) do { \
+ typeof(a) _swap_tmp = a; \
+ a = b; \
+ b = _swap_tmp; \
+} while (0)
+
+#define DIV_ROUND_CLOSEST(x, divisor) (((x) + ((divisor) / 2)) / (divisor))
+
+static inline uintmax_t
+mult_frac(uintmax_t x, uintmax_t multiplier, uintmax_t divisor)
+{
+ uintmax_t q = (x / divisor);
+ uintmax_t r = (x % divisor);
+
+ return ((q * multiplier) + ((r * multiplier) / divisor));
+}
+
+static inline int64_t
+abs64(int64_t x)
+{
+ return (x < 0 ? -x : x);
+}
+
#endif /* _LINUX_KERNEL_H_ */
diff --git a/sys/ofed/include/linux/kmod.h b/sys/compat/linuxkpi/common/include/linux/kmod.h
index 1ce17a4..c943dc5 100644
--- a/sys/ofed/include/linux/kmod.h
+++ b/sys/compat/linuxkpi/common/include/linux/kmod.h
@@ -25,8 +25,9 @@
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * $FreeBSD$
*/
-
#ifndef _LINUX_KMOD_H_
#define _LINUX_KMOD_H_
diff --git a/sys/ofed/include/linux/kobject.h b/sys/compat/linuxkpi/common/include/linux/kobject.h
index 159f071..63fbc56 100644
--- a/sys/ofed/include/linux/kobject.h
+++ b/sys/compat/linuxkpi/common/include/linux/kobject.h
@@ -25,6 +25,8 @@
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * $FreeBSD$
*/
#ifndef _LINUX_KOBJECT_H_
#define _LINUX_KOBJECT_H_
diff --git a/sys/ofed/include/linux/kref.h b/sys/compat/linuxkpi/common/include/linux/kref.h
index 883e1a1..de5ddaa 100644
--- a/sys/ofed/include/linux/kref.h
+++ b/sys/compat/linuxkpi/common/include/linux/kref.h
@@ -2,7 +2,8 @@
* Copyright (c) 2010 Isilon Systems, Inc.
* Copyright (c) 2010 iX Systems, Inc.
* Copyright (c) 2010 Panasas, Inc.
- * Copyright (c) 2013, 2014 Mellanox Technologies, Ltd.
+ * Copyright (c) 2013-2015 Mellanox Technologies, Ltd.
+ * Copyright (c) 2013 François Tigeot
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -25,6 +26,8 @@
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * $FreeBSD$
*/
#ifndef _LINUX_KREF_H_
#define _LINUX_KREF_H_
@@ -32,33 +35,56 @@
#include <sys/types.h>
#include <sys/refcount.h>
+#include <asm/atomic.h>
+
struct kref {
- volatile u_int count;
+ atomic_t refcount;
};
static inline void
kref_init(struct kref *kref)
{
- refcount_init(&kref->count, 1);
+ refcount_init(&kref->refcount.counter, 1);
}
static inline void
kref_get(struct kref *kref)
{
- refcount_acquire(&kref->count);
+ refcount_acquire(&kref->refcount.counter);
}
static inline int
kref_put(struct kref *kref, void (*rel)(struct kref *kref))
{
- if (refcount_release(&kref->count)) {
+ if (refcount_release(&kref->refcount.counter)) {
rel(kref);
return 1;
}
return 0;
}
+static inline int
+kref_sub(struct kref *kref, unsigned int count,
+ void (*rel)(struct kref *kref))
+{
+
+ while (count--) {
+ if (refcount_release(&kref->refcount.counter)) {
+ rel(kref);
+ return 1;
+ }
+ }
+ return 0;
+}
+
+static inline int __must_check
+kref_get_unless_zero(struct kref *kref)
+{
+
+ return atomic_add_unless(&kref->refcount, 1, 0);
+}
+
#endif /* _LINUX_KREF_H_ */
diff --git a/sys/ofed/include/linux/kthread.h b/sys/compat/linuxkpi/common/include/linux/kthread.h
index fb8160d1..fa8e9ba 100644
--- a/sys/ofed/include/linux/kthread.h
+++ b/sys/compat/linuxkpi/common/include/linux/kthread.h
@@ -25,6 +25,8 @@
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * $FreeBSD$
*/
#ifndef _LINUX_KTHREAD_H_
#define _LINUX_KTHREAD_H_
diff --git a/sys/compat/linuxkpi/common/include/linux/ktime.h b/sys/compat/linuxkpi/common/include/linux/ktime.h
new file mode 100644
index 0000000..c9fa81c
--- /dev/null
+++ b/sys/compat/linuxkpi/common/include/linux/ktime.h
@@ -0,0 +1,135 @@
+/*-
+ * Copyright (c) 2014-2015 Mellanox Technologies, Ltd.
+ * Copyright (c) 2015 François Tigeot
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice unmodified, this list of conditions, and the following
+ * disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * $FreeBSD$
+ */
+#ifndef _LINUX_KTIME_H
+#define _LINUX_KTIME_H
+
+#include <linux/types.h>
+#include <linux/time.h>
+#include <linux/jiffies.h>
+
+#define ktime_get_ts(x) getnanouptime(x)
+
+/* time values in nanoseconds */
+union ktime {
+ int64_t tv64;
+};
+
+typedef union ktime ktime_t;
+
+#define KTIME_MAX ((s64)~((u64)1 << 63))
+#define KTIME_SEC_MAX (KTIME_MAX / NSEC_PER_SEC)
+
+static inline int64_t
+ktime_to_ns(ktime_t kt)
+{
+ return kt.tv64;
+}
+
+static inline struct timeval
+ktime_to_timeval(ktime_t kt)
+{
+ return ns_to_timeval(kt.tv64);
+}
+
+static inline ktime_t
+ktime_add_ns(ktime_t kt, int64_t ns)
+{
+ ktime_t res;
+
+ res.tv64 = kt.tv64 + ns;
+ return kt;
+}
+
+static inline ktime_t
+ktime_sub_ns(ktime_t kt, int64_t ns)
+{
+ ktime_t res;
+
+ res.tv64 = kt.tv64 - ns;
+ return kt;
+}
+
+static inline ktime_t
+ktime_set(const long secs, const unsigned long nsecs)
+{
+ ktime_t retval = { (s64)secs * NSEC_PER_SEC + (s64)nsecs };
+ return (retval);
+}
+
+static inline ktime_t
+ktime_sub(ktime_t lhs, ktime_t rhs)
+{
+ lhs.tv64 -= rhs.tv64;
+ return (lhs);
+}
+
+static inline ktime_t
+ktime_add(ktime_t lhs, ktime_t rhs)
+{
+ lhs.tv64 += rhs.tv64;
+ return (lhs);
+}
+
+static inline ktime_t
+timespec_to_ktime(struct timespec ts)
+{
+ return (ktime_set(ts.tv_sec, ts.tv_nsec));
+}
+
+static inline ktime_t
+timeval_to_ktime(struct timeval tv)
+{
+ return (ktime_set(tv.tv_sec, tv.tv_usec * NSEC_PER_USEC));
+}
+
+#define ktime_to_timespec(kt) ns_to_timespec((kt).tv64)
+#define ktime_to_timeval(kt) ns_to_timeval((kt).tv64)
+#define ktime_to_ns(kt) ((kt).tv64)
+
+static inline s64
+ktime_get_ns(void)
+{
+ struct timespec ts;
+ ktime_t kt;
+
+ ktime_get_ts(&ts);
+ kt = timespec_to_ktime(ts);
+ return (ktime_to_ns(kt));
+}
+
+static inline ktime_t
+ktime_get(void)
+{
+ struct timespec ts;
+
+ ktime_get_ts(&ts);
+ return (timespec_to_ktime(ts));
+}
+
+#endif /* _LINUX_KTIME_H */
diff --git a/sys/ofed/include/linux/list.h b/sys/compat/linuxkpi/common/include/linux/list.h
index fe06cf3..bfa7d97 100644
--- a/sys/ofed/include/linux/list.h
+++ b/sys/compat/linuxkpi/common/include/linux/list.h
@@ -25,6 +25,8 @@
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * $FreeBSD$
*/
#ifndef _LINUX_LIST_H_
#define _LINUX_LIST_H_
@@ -96,6 +98,15 @@ list_del(struct list_head *entry)
}
static inline void
+list_replace(struct list_head *old, struct list_head *new)
+{
+ new->next = old->next;
+ new->next->prev = new;
+ new->prev = old->prev;
+ new->prev->next = new;
+}
+
+static inline void
_list_add(struct list_head *new, struct list_head *prev,
struct list_head *next)
{
@@ -119,6 +130,9 @@ list_del_init(struct list_head *entry)
#define list_first_entry(ptr, type, member) \
list_entry((ptr)->next, type, member)
+#define list_next_entry(ptr, member) \
+ list_entry(((ptr)->member.next), typeof(*(ptr)), member)
+
#define list_for_each(p, head) \
for (p = (head)->next; p != (head); p = p->next)
@@ -134,6 +148,15 @@ list_del_init(struct list_head *entry)
n = list_entry(p->field.next, typeof(*p), field); &p->field != (h);\
p = n, n = list_entry(n->field.next, typeof(*n), field))
+#define list_for_each_entry_continue(p, h, field) \
+ for (p = list_next_entry((p), field); &p->field != (h); \
+ p = list_next_entry((p), field))
+
+#define list_for_each_entry_safe_from(pos, n, head, member) \
+ for (n = list_entry(pos->member.next, typeof(*pos), member); \
+ &pos->member != (head); \
+ pos = n, n = list_entry(n->member.next, typeof(*n), member))
+
#define list_for_each_entry_reverse(p, h, field) \
for (p = list_entry((h)->prev, typeof(*p), field); &p->field != (h); \
p = list_entry(p->field.prev, typeof(*p), field))
@@ -381,10 +404,14 @@ static inline int list_is_last(const struct list_head *list,
#define hlist_for_each_safe(p, n, head) \
for (p = (head)->first; p && ({ n = p->next; 1; }); p = n)
-#define hlist_for_each_entry(tp, p, head, field) \
- for (p = (head)->first; \
- p ? (tp = hlist_entry(p, typeof(*tp), field)): NULL; p = p->next)
-
+#define hlist_entry_safe(ptr, type, member) \
+ ((ptr) ? hlist_entry(ptr, type, member) : NULL)
+
+#define hlist_for_each_entry(pos, head, member) \
+ for (pos = hlist_entry_safe((head)->first, typeof(*(pos)), member);\
+ pos; \
+ pos = hlist_entry_safe((pos)->member.next, typeof(*(pos)), member))
+
#define hlist_for_each_entry_continue(tp, p, field) \
for (p = (p)->next; \
p ? (tp = hlist_entry(p, typeof(*tp), field)): NULL; p = p->next)
@@ -398,4 +425,8 @@ static inline int list_is_last(const struct list_head *list,
tpos = hlist_entry((pos), typeof(*(tpos)), member); 1;}); \
pos = (n))
+#define hlist_add_head_rcu(n, h) hlist_add_head(n, h)
+
+#define hlist_del_init_rcu(n) hlist_del_init(n)
+
#endif /* _LINUX_LIST_H_ */
diff --git a/sys/ofed/include/linux/lockdep.h b/sys/compat/linuxkpi/common/include/linux/lockdep.h
index bdfa648..2738693 100644
--- a/sys/ofed/include/linux/lockdep.h
+++ b/sys/compat/linuxkpi/common/include/linux/lockdep.h
@@ -25,8 +25,9 @@
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * $FreeBSD$
*/
-
#ifndef _LINUX_LOCKDEP_H_
#define _LINUX_LOCKDEP_H_
diff --git a/sys/ofed/include/linux/log2.h b/sys/compat/linuxkpi/common/include/linux/log2.h
index 77a2924..a44c560 100644
--- a/sys/ofed/include/linux/log2.h
+++ b/sys/compat/linuxkpi/common/include/linux/log2.h
@@ -2,7 +2,7 @@
* Copyright (c) 2010 Isilon Systems, Inc.
* Copyright (c) 2010 iX Systems, Inc.
* Copyright (c) 2010 Panasas, Inc.
- * Copyright (c) 2013, 2014 Mellanox Technologies, Ltd.
+ * Copyright (c) 2013-2015 Mellanox Technologies, Ltd.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -25,8 +25,9 @@
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * $FreeBSD$
*/
-
#ifndef _LINUX_LOG2_H_
#define _LINUX_LOG2_H_
@@ -52,50 +53,10 @@ rounddown_pow_of_two(unsigned long x)
return (1UL << (flsl(x) - 1));
}
-
-/*
- * deal with unrepresentable constant logarithms
- */
-extern __attribute__((const, noreturn))
-int ____ilog2_NaN(void);
-
-/*
- * non-constant log of base 2 calculators
- * - the arch may override these in asm/bitops.h if they can be implemented
- * more efficiently than using fls() and fls64()
- * - the arch is not required to handle n==0 if implementing the fallback
- */
-#ifndef CONFIG_ARCH_HAS_ILOG2_U32
-static inline __attribute__((const))
-int __ilog2_u32(u32 n)
-{
- return flsl(n) - 1;
-}
-#endif
-
-#ifndef CONFIG_ARCH_HAS_ILOG2_U64
-static inline __attribute__((const))
-int __ilog2_u64(u64 n)
-{
- return flsl(n) - 1;
-}
-#endif
-
-
-/**
- * ilog2 - log of base 2 of 32-bit or a 64-bit unsigned value
- * @n - parameter
- *
- * constant-capable log of base 2 calculation
- * - this can be used to initialise global variables from constant data, hence
- * the massive ternary operator construction
- *
- * selects the appropriately-sized optimised version depending on sizeof(n)
- */
-#define ilog2(n) \
+#define ilog2(n) \
( \
__builtin_constant_p(n) ? ( \
- (n) < 1 ? ____ilog2_NaN() : \
+ (n) < 1 ? -1 : \
(n) & (1ULL << 63) ? 63 : \
(n) & (1ULL << 62) ? 62 : \
(n) & (1ULL << 61) ? 61 : \
@@ -160,12 +121,10 @@ int __ilog2_u64(u64 n)
(n) & (1ULL << 2) ? 2 : \
(n) & (1ULL << 1) ? 1 : \
(n) & (1ULL << 0) ? 0 : \
- ____ilog2_NaN() \
- ) : \
+ -1) : \
(sizeof(n) <= 4) ? \
- __ilog2_u32(n) : \
- __ilog2_u64(n) \
- )
+ fls((u32)(n)) - 1 : flsll((u64)(n)) - 1 \
+)
#define order_base_2(x) ilog2(roundup_pow_of_two(x))
diff --git a/sys/ofed/include/linux/math64.h b/sys/compat/linuxkpi/common/include/linux/math64.h
index a898f37..2a488f1 100644
--- a/sys/ofed/include/linux/math64.h
+++ b/sys/compat/linuxkpi/common/include/linux/math64.h
@@ -23,8 +23,9 @@
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * $FreeBSD$
*/
-
#ifndef _LINUX_MATH64_H
#define _LINUX_MATH64_H
diff --git a/sys/ofed/include/linux/miscdevice.h b/sys/compat/linuxkpi/common/include/linux/miscdevice.h
index 1be903d..96d8fe7 100644
--- a/sys/ofed/include/linux/miscdevice.h
+++ b/sys/compat/linuxkpi/common/include/linux/miscdevice.h
@@ -25,8 +25,9 @@
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * $FreeBSD$
*/
-
#ifndef _LINUX_MISCDEVICE_H_
#define _LINUX_MISCDEVICE_H_
diff --git a/sys/ofed/include/linux/mm.h b/sys/compat/linuxkpi/common/include/linux/mm.h
index b1a575c..3835e34 100644
--- a/sys/ofed/include/linux/mm.h
+++ b/sys/compat/linuxkpi/common/include/linux/mm.h
@@ -2,7 +2,9 @@
* Copyright (c) 2010 Isilon Systems, Inc.
* Copyright (c) 2010 iX Systems, Inc.
* Copyright (c) 2010 Panasas, Inc.
- * Copyright (c) 2013, 2014 Mellanox Technologies, Ltd.
+ * Copyright (c) 2013-2015 Mellanox Technologies, Ltd.
+ * Copyright (c) 2015 François Tigeot
+ * Copyright (c) 2015 Matthew Dillon <dillon@backplane.com>
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
@@ -25,6 +27,8 @@
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * $FreeBSD$
*/
#ifndef _LINUX_MM_H_
#define _LINUX_MM_H_
@@ -84,4 +88,24 @@ io_remap_pfn_range(struct vm_area_struct *vma,
return (0);
}
+static inline unsigned long
+vma_pages(struct vm_area_struct *vma)
+{
+ return ((vma->vm_end - vma->vm_start) >> PAGE_SHIFT);
+}
+
+#define offset_in_page(off) ((off) & (PAGE_SIZE - 1))
+
+static inline void
+set_page_dirty(struct vm_page *page)
+{
+ vm_page_dirty(page);
+}
+
+static inline void
+get_page(struct vm_page *page)
+{
+ vm_page_hold(page);
+}
+
#endif /* _LINUX_MM_H_ */
diff --git a/sys/ofed/include/linux/module.h b/sys/compat/linuxkpi/common/include/linux/module.h
index cd9f4d5..0caa2b0 100644
--- a/sys/ofed/include/linux/module.h
+++ b/sys/compat/linuxkpi/common/include/linux/module.h
@@ -25,6 +25,8 @@
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * $FreeBSD$
*/
#ifndef _LINUX_MODULE_H_
#define _LINUX_MODULE_H_
diff --git a/sys/ofed/include/linux/moduleparam.h b/sys/compat/linuxkpi/common/include/linux/moduleparam.h
index c1817ea..9699b33 100644
--- a/sys/ofed/include/linux/moduleparam.h
+++ b/sys/compat/linuxkpi/common/include/linux/moduleparam.h
@@ -25,8 +25,9 @@
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * $FreeBSD$
*/
-
#ifndef _LINUX_MODULEPARAM_H_
#define _LINUX_MODULEPARAM_H_
diff --git a/sys/ofed/include/linux/mutex.h b/sys/compat/linuxkpi/common/include/linux/mutex.h
index 0ffc729..aee34cf 100644
--- a/sys/ofed/include/linux/mutex.h
+++ b/sys/compat/linuxkpi/common/include/linux/mutex.h
@@ -25,6 +25,8 @@
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * $FreeBSD$
*/
#ifndef _LINUX_MUTEX_H_
#define _LINUX_MUTEX_H_
diff --git a/sys/ofed/include/linux/net.h b/sys/compat/linuxkpi/common/include/linux/net.h
index db90f94..166b750 100644
--- a/sys/ofed/include/linux/net.h
+++ b/sys/compat/linuxkpi/common/include/linux/net.h
@@ -25,8 +25,9 @@
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * $FreeBSD$
*/
-
#ifndef _LINUX_NET_H_
#define _LINUX_NET_H_
diff --git a/sys/ofed/include/linux/netdevice.h b/sys/compat/linuxkpi/common/include/linux/netdevice.h
index a18070e..1b1f8bf 100644
--- a/sys/ofed/include/linux/netdevice.h
+++ b/sys/compat/linuxkpi/common/include/linux/netdevice.h
@@ -25,6 +25,8 @@
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * $FreeBSD$
*/
#ifndef _LINUX_NETDEVICE_H_
#define _LINUX_NETDEVICE_H_
diff --git a/sys/ofed/include/linux/notifier.h b/sys/compat/linuxkpi/common/include/linux/notifier.h
index 291c267..ca750e0 100644
--- a/sys/ofed/include/linux/notifier.h
+++ b/sys/compat/linuxkpi/common/include/linux/notifier.h
@@ -25,8 +25,9 @@
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * $FreeBSD$
*/
-
#ifndef _LINUX_NOTIFIER_H_
#define _LINUX_NOTIFIER_H_
diff --git a/sys/ofed/include/linux/page.h b/sys/compat/linuxkpi/common/include/linux/page.h
index 1ce1531..acc9f03 100644
--- a/sys/ofed/include/linux/page.h
+++ b/sys/compat/linuxkpi/common/include/linux/page.h
@@ -25,6 +25,8 @@
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * $FreeBSD$
*/
#ifndef _LINUX_PAGE_H_
#define _LINUX_PAGE_H_
diff --git a/sys/ofed/include/linux/pci.h b/sys/compat/linuxkpi/common/include/linux/pci.h
index 60e1d02..54ea99c 100644
--- a/sys/ofed/include/linux/pci.h
+++ b/sys/compat/linuxkpi/common/include/linux/pci.h
@@ -25,8 +25,9 @@
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * $FreeBSD$
*/
-
#ifndef _LINUX_PCI_H_
#define _LINUX_PCI_H_
diff --git a/sys/ofed/include/linux/poll.h b/sys/compat/linuxkpi/common/include/linux/poll.h
index 79d582c..e4f7417 100644
--- a/sys/ofed/include/linux/poll.h
+++ b/sys/compat/linuxkpi/common/include/linux/poll.h
@@ -25,8 +25,9 @@
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * $FreeBSD$
*/
-
#ifndef _LINUX_POLL_H_
#define _LINUX_POLL_H_
diff --git a/sys/ofed/include/linux/printk.h b/sys/compat/linuxkpi/common/include/linux/printk.h
index 3c97ae7..b160594 100644
--- a/sys/ofed/include/linux/printk.h
+++ b/sys/compat/linuxkpi/common/include/linux/printk.h
@@ -25,8 +25,9 @@
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * $FreeBSD$
*/
-
#ifndef _FBSD_PRINTK_H_
#define _FBSD_PRINTK_H_
diff --git a/sys/ofed/include/linux/radix-tree.h b/sys/compat/linuxkpi/common/include/linux/radix-tree.h
index 4443329..838b81c 100644
--- a/sys/ofed/include/linux/radix-tree.h
+++ b/sys/compat/linuxkpi/common/include/linux/radix-tree.h
@@ -25,8 +25,9 @@
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * $FreeBSD$
*/
-
#ifndef _LINUX_RADIX_TREE_H_
#define _LINUX_RADIX_TREE_H_
diff --git a/sys/ofed/include/linux/random.h b/sys/compat/linuxkpi/common/include/linux/random.h
index 0dac9fa..caae7b3 100644
--- a/sys/ofed/include/linux/random.h
+++ b/sys/compat/linuxkpi/common/include/linux/random.h
@@ -25,8 +25,9 @@
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * $FreeBSD$
*/
-
#ifndef _LINUX_RANDOM_H_
#define _LINUX_RANDOM_H_
diff --git a/sys/ofed/include/linux/rbtree.h b/sys/compat/linuxkpi/common/include/linux/rbtree.h
index d0db2ab..c4478ca 100644
--- a/sys/ofed/include/linux/rbtree.h
+++ b/sys/compat/linuxkpi/common/include/linux/rbtree.h
@@ -25,6 +25,8 @@
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * $FreeBSD$
*/
#ifndef _LINUX_RBTREE_H_
#define _LINUX_RBTREE_H_
diff --git a/sys/ofed/include/linux/rwlock.h b/sys/compat/linuxkpi/common/include/linux/rwlock.h
index 969f93e..e7c6301 100644
--- a/sys/ofed/include/linux/rwlock.h
+++ b/sys/compat/linuxkpi/common/include/linux/rwlock.h
@@ -25,6 +25,8 @@
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * $FreeBSD$
*/
#ifndef _LINUX_RWLOCK_H_
#define _LINUX_RWLOCK_H_
diff --git a/sys/ofed/include/linux/rwsem.h b/sys/compat/linuxkpi/common/include/linux/rwsem.h
index d0392e5..22ad4dc 100644
--- a/sys/ofed/include/linux/rwsem.h
+++ b/sys/compat/linuxkpi/common/include/linux/rwsem.h
@@ -25,6 +25,8 @@
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * $FreeBSD$
*/
#ifndef _LINUX_RWSEM_H_
#define _LINUX_RWSEM_H_
diff --git a/sys/ofed/include/linux/scatterlist.h b/sys/compat/linuxkpi/common/include/linux/scatterlist.h
index b8e7c29..5aa8d65 100644
--- a/sys/ofed/include/linux/scatterlist.h
+++ b/sys/compat/linuxkpi/common/include/linux/scatterlist.h
@@ -2,7 +2,7 @@
* Copyright (c) 2010 Isilon Systems, Inc.
* Copyright (c) 2010 iX Systems, Inc.
* Copyright (c) 2010 Panasas, Inc.
- * Copyright (c) 2013, 2014 Mellanox Technologies, Ltd.
+ * Copyright (c) 2013-2015 Mellanox Technologies, Ltd.
* Copyright (c) 2015 Matthew Dillon <dillon@backplane.com>
* All rights reserved.
*
@@ -26,56 +26,39 @@
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * $FreeBSD$
*/
-
#ifndef _LINUX_SCATTERLIST_H_
#define _LINUX_SCATTERLIST_H_
#include <linux/page.h>
#include <linux/slab.h>
-/*
- * SG table design.
- *
- * If flags bit 0 is set, then the sg field contains a pointer to the next sg
- * table list. Otherwise the next entry is at sg + 1, can be determined using
- * the sg_is_chain() function.
- *
- * If flags bit 1 is set, then this sg entry is the last element in a list,
- * can be determined using the sg_is_last() function.
- *
- * See sg_next().
- *
- */
-
struct scatterlist {
union {
- struct page *page;
- struct scatterlist *sg;
- } sl_un;
- dma_addr_t address;
- unsigned long offset;
- uint32_t length;
- uint32_t flags;
+ struct page *page;
+ struct scatterlist *sg;
+ } sl_un;
+ dma_addr_t address;
+ unsigned long offset;
+ uint32_t length;
+ uint32_t flags;
};
struct sg_table {
- struct scatterlist *sgl; /* the list */
- unsigned int nents; /* number of mapped entries */
- unsigned int orig_nents; /* original size of list */
+ struct scatterlist *sgl;
+ unsigned int nents;
+ unsigned int orig_nents;
};
struct sg_page_iter {
- struct scatterlist *sg;
- unsigned int sg_pgoffset; /* page index */
- unsigned int maxents;
+ struct scatterlist *sg;
+ unsigned int sg_pgoffset;
+ unsigned int maxents;
};
-/*
- * Maximum number of entries that will be allocated in one piece, if
- * a list larger than this is required then chaining will be utilized.
- */
-#define SG_MAX_SINGLE_ALLOC (PAGE_SIZE / sizeof(struct scatterlist))
+#define SG_MAX_SINGLE_ALLOC (PAGE_SIZE / sizeof(struct scatterlist))
#define sg_dma_address(sg) (sg)->address
#define sg_dma_len(sg) (sg)->length
@@ -127,60 +110,24 @@ sg_phys(struct scatterlist *sg)
return sg_page(sg)->phys_addr + sg->offset;
}
-/**
- * sg_chain - Chain two sglists together
- * @prv: First scatterlist
- * @prv_nents: Number of entries in prv
- * @sgl: Second scatterlist
- *
- * Description:
- * Links @prv@ and @sgl@ together, to form a longer scatterlist.
- *
- **/
static inline void
sg_chain(struct scatterlist *prv, unsigned int prv_nents,
- struct scatterlist *sgl)
+ struct scatterlist *sgl)
{
-/*
- * offset and length are unused for chain entry. Clear them.
- */
struct scatterlist *sg = &prv[prv_nents - 1];
sg->offset = 0;
sg->length = 0;
-
- /*
- * Indicate a link pointer, and set the link to the second list.
- */
sg->flags = SG_CHAIN;
sg->sl_un.sg = sgl;
}
-/**
- * sg_mark_end - Mark the end of the scatterlist
- * @sg: SG entryScatterlist
- *
- * Description:
- * Marks the passed in sg entry as the termination point for the sg
- * table. A call to sg_next() on this entry will return NULL.
- *
- **/
-static inline void sg_mark_end(struct scatterlist *sg)
+static inline void
+sg_mark_end(struct scatterlist *sg)
{
- sg->flags = SG_END;
+ sg->flags = SG_END;
}
-/**
- * __sg_free_table - Free a previously mapped sg table
- * @table: The sg table header to use
- * @max_ents: The maximum number of entries per single scatterlist
- *
- * Description:
- * Free an sg table previously allocated and setup with
- * __sg_alloc_table(). The @max_ents value must be identical to
- * that previously used with __sg_alloc_table().
- *
- **/
static inline void
__sg_free_table(struct sg_table *table, unsigned int max_ents)
{
@@ -194,12 +141,6 @@ __sg_free_table(struct sg_table *table, unsigned int max_ents)
unsigned int alloc_size = table->orig_nents;
unsigned int sg_size;
- /*
- * If we have more than max_ents segments left,
- * then assign 'next' to the sg table after the current one.
- * sg_size is then one less than alloc size, since the last
- * element is the chain pointer.
- */
if (alloc_size > max_ents) {
next = sgl[max_ents - 1].sl_un.sg;
alloc_size = max_ents;
@@ -217,38 +158,15 @@ __sg_free_table(struct sg_table *table, unsigned int max_ents)
table->sgl = NULL;
}
-/**
- * sg_free_table - Free a previously allocated sg table
- * @table: The mapped sg table header
- *
- **/
static inline void
sg_free_table(struct sg_table *table)
{
__sg_free_table(table, SG_MAX_SINGLE_ALLOC);
}
-/**
- * __sg_alloc_table - Allocate and initialize an sg table with given allocator
- * @table: The sg table header to use
- * @nents: Number of entries in sg list
- * @max_ents: The maximum number of entries the allocator returns per call
- * @gfp_mask: GFP allocation mask
- *
- * Description:
- * This function returns a @table @nents long. The allocator is
- * defined to return scatterlist chunks of maximum size @max_ents.
- * Thus if @nents is bigger than @max_ents, the scatterlists will be
- * chained in units of @max_ents.
- *
- * Notes:
- * If this function returns non-0 (eg failure), the caller must call
- * __sg_free_table() to cleanup any leftover allocations.
- *
- **/
static inline int
__sg_alloc_table(struct sg_table *table, unsigned int nents,
- unsigned int max_ents, gfp_t gfp_mask)
+ unsigned int max_ents, gfp_t gfp_mask)
{
struct scatterlist *sg, *prv;
unsigned int left;
@@ -260,7 +178,8 @@ __sg_alloc_table(struct sg_table *table, unsigned int nents,
left = nents;
prv = NULL;
do {
- unsigned int sg_size, alloc_size = left;
+ unsigned int sg_size;
+ unsigned int alloc_size = left;
if (alloc_size > max_ents) {
alloc_size = max_ents;
@@ -272,33 +191,19 @@ __sg_alloc_table(struct sg_table *table, unsigned int nents,
sg = kmalloc(alloc_size * sizeof(struct scatterlist), gfp_mask);
if (unlikely(!sg)) {
- /*
- * Adjust entry count to reflect that the last
- * entry of the previous table won't be used for
- * linkage. Without this, sg_kfree() may get
- * confused.
- */
if (prv)
table->nents = ++table->orig_nents;
return -ENOMEM;
}
-
sg_init_table(sg, alloc_size);
table->nents = table->orig_nents += sg_size;
- /*
- * If this is the first mapping, assign the sg table header.
- * If this is not the first mapping, chain previous part.
- */
if (prv)
sg_chain(prv, max_ents, sg);
else
table->sgl = sg;
- /*
- * If no more entries after this one, mark the end
- */
if (!left)
sg_mark_end(&sg[sg_size - 1]);
@@ -308,34 +213,19 @@ __sg_alloc_table(struct sg_table *table, unsigned int nents,
return 0;
}
-/**
- * sg_alloc_table - Allocate and initialize an sg table
- * @table: The sg table header to use
- * @nents: Number of entries in sg list
- * @gfp_mask: GFP allocation mask
- *
- * Description:
- * Allocate and initialize an sg table. If @nents@ is larger than
- * SG_MAX_SINGLE_ALLOC a chained sg table will be setup.
- *
- **/
-
static inline int
sg_alloc_table(struct sg_table *table, unsigned int nents, gfp_t gfp_mask)
{
int ret;
ret = __sg_alloc_table(table, nents, SG_MAX_SINGLE_ALLOC,
- gfp_mask);
+ gfp_mask);
if (unlikely(ret))
__sg_free_table(table, SG_MAX_SINGLE_ALLOC);
return ret;
}
-/*
- * Iterate pages in sg list.
- */
static inline void
_sg_iter_next(struct sg_page_iter *iter)
{
@@ -357,26 +247,16 @@ _sg_iter_next(struct sg_page_iter *iter)
iter->sg = sg;
}
-/*
- * NOTE: pgoffset is really a page index, not a byte offset.
- */
static inline void
_sg_iter_init(struct scatterlist *sgl, struct sg_page_iter *iter,
- unsigned int nents, unsigned long pgoffset)
+ unsigned int nents, unsigned long pgoffset)
{
if (nents) {
- /*
- * Nominal case. Note subtract 1 from starting page index
- * for initial _sg_iter_next() call.
- */
iter->sg = sgl;
iter->sg_pgoffset = pgoffset - 1;
iter->maxents = nents;
_sg_iter_next(iter);
} else {
- /*
- * Degenerate case
- */
iter->sg = NULL;
iter->sg_pgoffset = 0;
iter->maxents = 0;
@@ -396,4 +276,4 @@ sg_page_iter_dma_address(struct sg_page_iter *spi)
#define for_each_sg(sglist, sg, sgmax, _itr) \
for (_itr = 0, sg = (sglist); _itr < (sgmax); _itr++, sg = sg_next(sg))
-#endif /* _LINUX_SCATTERLIST_H_ */
+#endif /* _LINUX_SCATTERLIST_H_ */
diff --git a/sys/ofed/include/linux/sched.h b/sys/compat/linuxkpi/common/include/linux/sched.h
index c2fb8df..c2d66d7 100644
--- a/sys/ofed/include/linux/sched.h
+++ b/sys/compat/linuxkpi/common/include/linux/sched.h
@@ -25,6 +25,8 @@
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * $FreeBSD$
*/
#ifndef _LINUX_SCHED_H_
#define _LINUX_SCHED_H_
@@ -62,9 +64,12 @@ struct task_struct {
int should_stop;
};
-#define current ((struct task_struct *)curthread->td_retval[1])
-#define task_struct_get(x) (struct task_struct *)(x)->td_retval[1]
-#define task_struct_set(x, y) (x)->td_retval[1] = (register_t)(y)
+#define current task_struct_get(curthread)
+#define task_struct_get(x) ((struct task_struct *)(uintptr_t)(x)->td_retval[1])
+#define task_struct_set(x, y) (x)->td_retval[1] = (uintptr_t)(y)
+
+/* ensure the task_struct pointer fits into the td_retval[1] field */
+CTASSERT(sizeof(((struct thread *)0)->td_retval[1]) >= sizeof(uintptr_t));
#define set_current_state(x) \
atomic_store_rel_int((volatile int *)&current->state, (x))
diff --git a/sys/ofed/include/linux/semaphore.h b/sys/compat/linuxkpi/common/include/linux/semaphore.h
index 31967a6..022a016 100644
--- a/sys/ofed/include/linux/semaphore.h
+++ b/sys/compat/linuxkpi/common/include/linux/semaphore.h
@@ -25,6 +25,8 @@
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * $FreeBSD$
*/
#ifndef _LINUX_SEMAPHORE_H_
#define _LINUX_SEMAPHORE_H_
diff --git a/sys/ofed/include/linux/slab.h b/sys/compat/linuxkpi/common/include/linux/slab.h
index 0d01a36..1b56b55 100644
--- a/sys/ofed/include/linux/slab.h
+++ b/sys/compat/linuxkpi/common/include/linux/slab.h
@@ -25,6 +25,8 @@
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * $FreeBSD$
*/
#ifndef _LINUX_SLAB_H_
#define _LINUX_SLAB_H_
diff --git a/sys/ofed/include/linux/socket.h b/sys/compat/linuxkpi/common/include/linux/socket.h
index a3b0efc..a9a952e 100644
--- a/sys/ofed/include/linux/socket.h
+++ b/sys/compat/linuxkpi/common/include/linux/socket.h
@@ -25,6 +25,8 @@
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * $FreeBSD$
*/
#ifndef _LINUX_SOCKET_H_
#define _LINUX_SOCKET_H_
diff --git a/sys/ofed/include/linux/spinlock.h b/sys/compat/linuxkpi/common/include/linux/spinlock.h
index ad709ec..97c83e0 100644
--- a/sys/ofed/include/linux/spinlock.h
+++ b/sys/compat/linuxkpi/common/include/linux/spinlock.h
@@ -25,6 +25,8 @@
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * $FreeBSD$
*/
#ifndef _LINUX_SPINLOCK_H_
#define _LINUX_SPINLOCK_H_
diff --git a/sys/ofed/include/linux/string.h b/sys/compat/linuxkpi/common/include/linux/string.h
index 710ad0a..cf55b09 100644
--- a/sys/ofed/include/linux/string.h
+++ b/sys/compat/linuxkpi/common/include/linux/string.h
@@ -25,8 +25,9 @@
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * $FreeBSD$
*/
-
#ifndef _LINUX_STRING_H_
#define _LINUX_STRING_H_
diff --git a/sys/ofed/include/linux/sysfs.h b/sys/compat/linuxkpi/common/include/linux/sysfs.h
index a4e7d77..e565e43 100644
--- a/sys/ofed/include/linux/sysfs.h
+++ b/sys/compat/linuxkpi/common/include/linux/sysfs.h
@@ -25,8 +25,9 @@
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * $FreeBSD$
*/
-
#ifndef _LINUX_SYSFS_H_
#define _LINUX_SYSFS_H_
diff --git a/sys/compat/linuxkpi/common/include/linux/time.h b/sys/compat/linuxkpi/common/include/linux/time.h
new file mode 100644
index 0000000..27516a4
--- /dev/null
+++ b/sys/compat/linuxkpi/common/include/linux/time.h
@@ -0,0 +1,131 @@
+/*-
+ * Copyright (c) 2014-2015 François Tigeot
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice unmodified, this list of conditions, and the following
+ * disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * $FreeBSD$
+ */
+#ifndef _LINUX_TIME_H_
+#define _LINUX_TIME_H_
+
+#define NSEC_PER_USEC 1000L
+#define NSEC_PER_SEC 1000000000L
+
+#include <sys/time.h>
+#include <sys/stdint.h>
+
+static inline struct timeval
+ns_to_timeval(const int64_t nsec)
+{
+ struct timeval tv;
+ long rem;
+
+ if (nsec == 0) {
+ tv.tv_sec = 0;
+ tv.tv_usec = 0;
+ return (tv);
+ }
+
+ tv.tv_sec = nsec / NSEC_PER_SEC;
+ rem = nsec % NSEC_PER_SEC;
+ if (rem < 0) {
+ tv.tv_sec--;
+ rem += NSEC_PER_SEC;
+ }
+ tv.tv_usec = rem / 1000;
+ return (tv);
+}
+
+static inline int64_t
+timeval_to_ns(const struct timeval *tv)
+{
+ return ((int64_t)tv->tv_sec * NSEC_PER_SEC) +
+ tv->tv_usec * NSEC_PER_USEC;
+}
+
+#define getrawmonotonic(ts) nanouptime(ts)
+
+static inline struct timespec
+timespec_sub(struct timespec lhs, struct timespec rhs)
+{
+ struct timespec ts;
+
+ ts.tv_sec = lhs.tv_sec;
+ ts.tv_nsec = lhs.tv_nsec;
+ timespecsub(&ts, &rhs);
+
+ return ts;
+}
+
+static inline void
+set_normalized_timespec(struct timespec *ts, time_t sec, int64_t nsec)
+{
+ /* XXX: this doesn't actually normalize anything */
+ ts->tv_sec = sec;
+ ts->tv_nsec = nsec;
+}
+
+static inline int64_t
+timespec_to_ns(const struct timespec *ts)
+{
+ return ((ts->tv_sec * NSEC_PER_SEC) + ts->tv_nsec);
+}
+
+static inline struct timespec
+ns_to_timespec(const int64_t nsec)
+{
+ struct timespec ts;
+ int32_t rem;
+
+ if (nsec == 0) {
+ ts.tv_sec = 0;
+ ts.tv_nsec = 0;
+ return (ts);
+ }
+
+ ts.tv_sec = nsec / NSEC_PER_SEC;
+ rem = nsec % NSEC_PER_SEC;
+ if (rem < 0) {
+ ts.tv_sec--;
+ rem += NSEC_PER_SEC;
+ }
+ ts.tv_nsec = rem;
+ return (ts);
+}
+
+static inline int
+timespec_valid(const struct timespec *ts)
+{
+ if (ts->tv_sec < 0 || ts->tv_sec > 100000000 ||
+ ts->tv_nsec < 0 || ts->tv_nsec >= 1000000000)
+ return (0);
+ return (1);
+}
+
+static inline unsigned long
+get_seconds(void)
+{
+ return time_uptime;
+}
+
+#endif /* _LINUX_TIME_H_ */
diff --git a/sys/ofed/include/linux/timer.h b/sys/compat/linuxkpi/common/include/linux/timer.h
index 53ee20b..a794c13 100644
--- a/sys/ofed/include/linux/timer.h
+++ b/sys/compat/linuxkpi/common/include/linux/timer.h
@@ -25,6 +25,8 @@
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * $FreeBSD$
*/
#ifndef _LINUX_TIMER_H_
#define _LINUX_TIMER_H_
diff --git a/sys/ofed/include/linux/types.h b/sys/compat/linuxkpi/common/include/linux/types.h
index 9fff0ec..c9c3728 100644
--- a/sys/ofed/include/linux/types.h
+++ b/sys/compat/linuxkpi/common/include/linux/types.h
@@ -25,6 +25,8 @@
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * $FreeBSD$
*/
#ifndef _LINUX_TYPES_H_
#define _LINUX_TYPES_H_
@@ -36,8 +38,6 @@
#include <linux/compiler.h>
#include <asm/types.h>
-#define __read_mostly __attribute__((__section__(".data.read_mostly")))
-
#ifndef __bitwise__
#ifdef __CHECKER__
#define __bitwise__ __attribute__((bitwise))
diff --git a/sys/ofed/include/linux/uaccess.h b/sys/compat/linuxkpi/common/include/linux/uaccess.h
index bab848c..87d1bab 100644
--- a/sys/ofed/include/linux/uaccess.h
+++ b/sys/compat/linuxkpi/common/include/linux/uaccess.h
@@ -26,21 +26,32 @@
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * $FreeBSD$
*/
#ifndef _LINUX_UACCESS_H_
#define _LINUX_UACCESS_H_
+#include <linux/compiler.h>
+
#define get_user(_x, _p) -copyin((_p), &(_x), sizeof(*(_p)))
#define put_user(_x, _p) -copyout(&(_x), (_p), sizeof(*(_p)))
-static inline void pagefault_disable(void)
+/*
+ * NOTE: The returned value from pagefault_disable() must be stored
+ * and passed to pagefault_enable(). Else possible recursion on the
+ * state can be lost.
+ */
+static inline int __must_check
+pagefault_disable(void)
{
- curthread_pflags_set(TDP_NOFAULTING | TDP_RESETSPUR);
+ return (vm_fault_disable_pagefaults());
}
-static inline void pagefault_enable(void)
+static inline void
+pagefault_enable(int save)
{
- curthread_pflags_restore(~(TDP_NOFAULTING | TDP_RESETSPUR));
+ vm_fault_enable_pagefaults(save);
}
#endif /* _LINUX_UACCESS_H_ */
diff --git a/sys/dev/usb/usb_compat_linux.h b/sys/compat/linuxkpi/common/include/linux/usb.h
index 1f00d4b..1f00d4b 100644
--- a/sys/dev/usb/usb_compat_linux.h
+++ b/sys/compat/linuxkpi/common/include/linux/usb.h
diff --git a/sys/ofed/include/linux/vmalloc.h b/sys/compat/linuxkpi/common/include/linux/vmalloc.h
index 2629d38..5317831 100644
--- a/sys/ofed/include/linux/vmalloc.h
+++ b/sys/compat/linuxkpi/common/include/linux/vmalloc.h
@@ -25,8 +25,9 @@
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * $FreeBSD$
*/
-
#ifndef _LINUX_VMALLOC_H_
#define _LINUX_VMALLOC_H_
diff --git a/sys/ofed/include/linux/wait.h b/sys/compat/linuxkpi/common/include/linux/wait.h
index dccd0f3..c62f735 100644
--- a/sys/ofed/include/linux/wait.h
+++ b/sys/compat/linuxkpi/common/include/linux/wait.h
@@ -25,6 +25,8 @@
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * $FreeBSD$
*/
#ifndef _LINUX_WAIT_H_
#define _LINUX_WAIT_H_
diff --git a/sys/ofed/include/linux/workqueue.h b/sys/compat/linuxkpi/common/include/linux/workqueue.h
index 3f2c7fe..e9a6f5a 100644
--- a/sys/ofed/include/linux/workqueue.h
+++ b/sys/compat/linuxkpi/common/include/linux/workqueue.h
@@ -25,6 +25,8 @@
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * $FreeBSD$
*/
#ifndef _LINUX_WORKQUEUE_H_
#define _LINUX_WORKQUEUE_H_
diff --git a/sys/ofed/include/net/if_inet6.h b/sys/compat/linuxkpi/common/include/net/if_inet6.h
index e4515b8..df853fd 100644
--- a/sys/ofed/include/net/if_inet6.h
+++ b/sys/compat/linuxkpi/common/include/net/if_inet6.h
@@ -25,8 +25,9 @@
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * $FreeBSD$
*/
-
#ifndef _NET_IF_INET6_H_
#define _NET_IF_INET6_H_
diff --git a/sys/ofed/include/net/ip.h b/sys/compat/linuxkpi/common/include/net/ip.h
index 587ceb8..7fbe9d9 100644
--- a/sys/ofed/include/net/ip.h
+++ b/sys/compat/linuxkpi/common/include/net/ip.h
@@ -25,8 +25,9 @@
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * $FreeBSD$
*/
-
#ifndef _LINUX_NET_IP_H_
#define _LINUX_NET_IP_H_
diff --git a/sys/ofed/include/net/ipv6.h b/sys/compat/linuxkpi/common/include/net/ipv6.h
index aa4de93..1244706 100644
--- a/sys/ofed/include/net/ipv6.h
+++ b/sys/compat/linuxkpi/common/include/net/ipv6.h
@@ -25,8 +25,9 @@
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * $FreeBSD$
*/
-
#ifndef _LINUX_NET_IPV6_H_
#define _LINUX_NET_IPV6_H_
diff --git a/sys/ofed/include/net/netevent.h b/sys/compat/linuxkpi/common/include/net/netevent.h
index 3e7ec1d..d2d37c0 100644
--- a/sys/ofed/include/net/netevent.h
+++ b/sys/compat/linuxkpi/common/include/net/netevent.h
@@ -25,8 +25,9 @@
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * $FreeBSD$
*/
-
#ifndef _LINUX_NET_NETEVENT_H_
#define _LINUX_NET_NETEVENT_H_
diff --git a/sys/ofed/include/net/tcp.h b/sys/compat/linuxkpi/common/include/net/tcp.h
index 70fdf99..3f15619 100644
--- a/sys/ofed/include/net/tcp.h
+++ b/sys/compat/linuxkpi/common/include/net/tcp.h
@@ -25,8 +25,9 @@
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * $FreeBSD$
*/
-
#ifndef _LINUX_NET_TCP_H_
#define _LINUX_NET_TCP_H_
diff --git a/sys/ofed/include/linux/linux_compat.c b/sys/compat/linuxkpi/common/src/linux_compat.c
index d082eeb..26df7db 100644
--- a/sys/ofed/include/linux/linux_compat.c
+++ b/sys/compat/linuxkpi/common/src/linux_compat.c
@@ -27,6 +27,9 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
#include <sys/param.h>
#include <sys/systm.h>
#include <sys/malloc.h>
@@ -660,7 +663,11 @@ _ioremap_attr(vm_paddr_t phys_addr, unsigned long size, int attr)
{
void *addr;
+#if defined(__i386__) || defined(__amd64__)
addr = pmap_mapdev_attr(phys_addr, size, attr);
+#else
+ addr = NULL;
+#endif
if (addr == NULL)
return (NULL);
vmmap_add(addr, size);
@@ -676,7 +683,9 @@ iounmap(void *addr)
vmmap = vmmap_remove(addr);
if (vmmap == NULL)
return;
+#if defined(__i386__) || defined(__amd64__)
pmap_unmapdev((vm_offset_t)addr, vmmap->vm_size);
+#endif
kfree(vmmap);
}
diff --git a/sys/ofed/include/linux/linux_idr.c b/sys/compat/linuxkpi/common/src/linux_idr.c
index a692fb8..fa98622 100644
--- a/sys/ofed/include/linux/linux_idr.c
+++ b/sys/compat/linuxkpi/common/src/linux_idr.c
@@ -27,6 +27,9 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
#include <sys/param.h>
#include <sys/systm.h>
#include <sys/malloc.h>
diff --git a/sys/ofed/include/linux/linux_kmod.c b/sys/compat/linuxkpi/common/src/linux_kmod.c
index 3d0290c..efe16fb 100644
--- a/sys/ofed/include/linux/linux_kmod.c
+++ b/sys/compat/linuxkpi/common/src/linux_kmod.c
@@ -1,4 +1,3 @@
-/* $FreeBSD$ */
/*-
* Copyright (c) 2015 Mellanox Technologies, Ltd.
* All rights reserved.
@@ -25,9 +24,12 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
#include <sys/param.h>
#include <sys/module.h>
-MODULE_VERSION(linuxapi, 1);
-MODULE_DEPEND(linuxapi, pci, 1, 1, 1);
+MODULE_VERSION(linuxkpi, 1);
+MODULE_DEPEND(linuxkpi, pci, 1, 1, 1);
diff --git a/sys/ofed/include/linux/linux_pci.c b/sys/compat/linuxkpi/common/src/linux_pci.c
index a76de88..2d3d03b 100644
--- a/sys/ofed/include/linux/linux_pci.c
+++ b/sys/compat/linuxkpi/common/src/linux_pci.c
@@ -1,4 +1,3 @@
-/* $FreeBSD$ */
/*-
* Copyright (c) 2015 Mellanox Technologies, Ltd.
* All rights reserved.
@@ -25,6 +24,9 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
#include <sys/param.h>
#include <sys/systm.h>
#include <sys/malloc.h>
diff --git a/sys/ofed/include/linux/linux_radix.c b/sys/compat/linuxkpi/common/src/linux_radix.c
index 9197b18..1cd9e45 100644
--- a/sys/ofed/include/linux/linux_radix.c
+++ b/sys/compat/linuxkpi/common/src/linux_radix.c
@@ -27,6 +27,9 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
#include <sys/param.h>
#include <sys/systm.h>
#include <sys/malloc.h>
diff --git a/sys/dev/usb/usb_compat_linux.c b/sys/compat/linuxkpi/common/src/linux_usb.c
index 56caf06..b7ef538 100644
--- a/sys/dev/usb/usb_compat_linux.c
+++ b/sys/compat/linuxkpi/common/src/linux_usb.c
@@ -54,7 +54,7 @@
#define USB_DEBUG_VAR usb_debug
#include <dev/usb/usb_core.h>
-#include <dev/usb/usb_compat_linux.h>
+#include <linux/usb.h>
#include <dev/usb/usb_process.h>
#include <dev/usb/usb_device.h>
#include <dev/usb/usb_util.h>
@@ -63,6 +63,7 @@
#include <dev/usb/usb_hub.h>
#include <dev/usb/usb_request.h>
#include <dev/usb/usb_debug.h>
+#include <dev/usb/usb_dynamic.h>
#endif /* USB_GLOBAL_INCLUDE_FILE */
struct usb_linux_softc {
@@ -1733,3 +1734,13 @@ usb_bulk_msg(struct usb_device *udev, struct usb_host_endpoint *uhe,
return (err);
}
+MODULE_DEPEND(linuxkpi, usb, 1, 1, 1);
+
+static void
+usb_linux_init(void *arg)
+{
+ /* register our function */
+ usb_linux_free_device_p = &usb_linux_free_device;
+}
+SYSINIT(usb_linux_init, SI_SUB_LOCK, SI_ORDER_FIRST, usb_linux_init, NULL);
+SYSUNINIT(usb_linux_unload, SI_SUB_LOCK, SI_ORDER_ANY, usb_linux_unload, NULL);
diff --git a/sys/conf/NOTES b/sys/conf/NOTES
index c1210e2..1afefdb 100644
--- a/sys/conf/NOTES
+++ b/sys/conf/NOTES
@@ -359,6 +359,9 @@ options COMPAT_FREEBSD9
# Enable FreeBSD10 compatibility syscalls
options COMPAT_FREEBSD10
+# Enable Linux Kernel Programming Interface
+options COMPAT_LINUXKPI
+
#
# These three options provide support for System V Interface
# Definition-style interprocess communication, in the form of shared
diff --git a/sys/conf/files b/sys/conf/files
index f32f60c..c07cf40 100644
--- a/sys/conf/files
+++ b/sys/conf/files
@@ -266,6 +266,7 @@ compat/cloudabi/cloudabi_random.c optional compat_cloudabi64
compat/cloudabi/cloudabi_sock.c optional compat_cloudabi64
compat/cloudabi/cloudabi_thread.c optional compat_cloudabi64
compat/cloudabi64/cloudabi64_fd.c optional compat_cloudabi64
+compat/cloudabi64/cloudabi64_module.c optional compat_cloudabi64
compat/cloudabi64/cloudabi64_poll.c optional compat_cloudabi64
compat/cloudabi64/cloudabi64_sock.c optional compat_cloudabi64
compat/cloudabi64/cloudabi64_syscalls.c optional compat_cloudabi64
@@ -1397,8 +1398,8 @@ dev/etherswitch/ip17x/ip175c.c optional ip17x
dev/etherswitch/ip17x/ip175d.c optional ip17x
dev/etherswitch/ip17x/ip17x_phy.c optional ip17x
dev/etherswitch/ip17x/ip17x_vlans.c optional ip17x
-dev/etherswitch/mdio_if.m optional miiproxy
-dev/etherswitch/mdio.c optional miiproxy
+dev/etherswitch/mdio_if.m optional miiproxy | mdio
+dev/etherswitch/mdio.c optional miiproxy | mdio
dev/etherswitch/miiproxy.c optional miiproxy
dev/etherswitch/rtl8366/rtl8366rb.c optional rtl8366rb
dev/etherswitch/ukswitch/ukswitch.c optional ukswitch
@@ -2573,7 +2574,6 @@ dev/usb/storage/ustorage_fs.c optional usfs
# USB core
#
dev/usb/usb_busdma.c optional usb
-dev/usb/usb_compat_linux.c optional usb
dev/usb/usb_core.c optional usb
dev/usb/usb_debug.c optional usb
dev/usb/usb_dev.c optional usb
@@ -3795,17 +3795,20 @@ nlm/nlm_prot_svc.c optional nfslockd | nfsd
nlm/nlm_prot_xdr.c optional nfslockd | nfsd
nlm/sm_inter_xdr.c optional nfslockd | nfsd
-# Linux Kernel Compatibility API
-ofed/include/linux/linux_kmod.c optional ofed | compat_linuxapi \
- no-depend compile-with "${OFED_C}"
-ofed/include/linux/linux_compat.c optional ofed | compat_linuxapi \
- no-depend compile-with "${OFED_C}"
-ofed/include/linux/linux_pci.c optional ofed | compat_linuxapi \
- no-depend compile-with "${OFED_C}"
-ofed/include/linux/linux_idr.c optional ofed | compat_linuxapi \
- no-depend compile-with "${OFED_C}"
-ofed/include/linux/linux_radix.c optional ofed | compat_linuxapi \
- no-depend compile-with "${OFED_C}"
+# Linux Kernel Programming Interface
+compat/linuxkpi/common/src/linux_kmod.c optional compat_linuxkpi \
+ no-depend compile-with "${LINUXKPI_C}"
+compat/linuxkpi/common/src/linux_compat.c optional compat_linuxkpi \
+ no-depend compile-with "${LINUXKPI_C}"
+compat/linuxkpi/common/src/linux_pci.c optional compat_linuxkpi pci \
+ no-depend compile-with "${LINUXKPI_C}"
+compat/linuxkpi/common/src/linux_idr.c optional compat_linuxkpi \
+ no-depend compile-with "${LINUXKPI_C}"
+compat/linuxkpi/common/src/linux_radix.c optional compat_linuxkpi \
+ no-depend compile-with "${LINUXKPI_C}"
+compat/linuxkpi/common/src/linux_usb.c optional compat_linuxkpi usb \
+ no-depend compile-with "${LINUXKPI_C}"
+
# OpenFabrics Enterprise Distribution (Infiniband)
ofed/drivers/infiniband/core/addr.c optional ofed \
no-depend \
diff --git a/sys/conf/files.arm b/sys/conf/files.arm
index 33838ae..66c8daf 100644
--- a/sys/conf/files.arm
+++ b/sys/conf/files.arm
@@ -120,6 +120,7 @@ libkern/ashldi3.c standard
libkern/ashrdi3.c standard
libkern/divdi3.c standard
libkern/ffsl.c standard
+libkern/ffsll.c standard
libkern/fls.c standard
libkern/flsl.c standard
libkern/flsll.c standard
diff --git a/sys/conf/files.arm64 b/sys/conf/files.arm64
index a49a110..3a9a651 100644
--- a/sys/conf/files.arm64
+++ b/sys/conf/files.arm64
@@ -53,6 +53,7 @@ arm64/arm64/vm_machdep.c standard
arm64/cavium/thunder_pcie.c optional soc_cavm_thunderx pci fdt
arm64/cavium/thunder_pcie_pem.c optional soc_cavm_thunderx pci
arm64/cavium/thunder_pcie_common.c optional soc_cavm_thunderx pci
+arm64/cloudabi64/cloudabi64_sysvec.c optional compat_cloudabi64
crypto/blowfish/bf_enc.c optional crypto | ipsec
crypto/des/des_enc.c optional crypto | ipsec | netsmb
dev/acpica/acpi_if.m optional acpi
@@ -81,6 +82,7 @@ kern/subr_dummy_vdso_tc.c standard
libkern/bcmp.c standard
libkern/ffs.c standard
libkern/ffsl.c standard
+libkern/ffsll.c standard
libkern/fls.c standard
libkern/flsl.c standard
libkern/flsll.c standard
diff --git a/sys/conf/files.i386 b/sys/conf/files.i386
index 9f04bef..ffe272e 100644
--- a/sys/conf/files.i386
+++ b/sys/conf/files.i386
@@ -530,6 +530,7 @@ kern/imgact_aout.c optional compat_aout
kern/imgact_gzip.c optional gzip
kern/subr_sfbuf.c standard
libkern/divdi3.c standard
+libkern/ffsll.c standard
libkern/flsll.c standard
libkern/memmove.c standard
libkern/memset.c standard
diff --git a/sys/conf/files.mips b/sys/conf/files.mips
index 76ad371..22b9472 100644
--- a/sys/conf/files.mips
+++ b/sys/conf/files.mips
@@ -50,11 +50,13 @@ mips/mips/vm_machdep.c standard
# misc opt-in bits
kern/kern_clocksource.c standard
kern/link_elf_obj.c standard
+kern/subr_busdma_bufalloc.c standard
kern/subr_dummy_vdso_tc.c standard
kern/subr_sfbuf.c optional mips | mipsel | mipsn32
# gcc/clang runtime
libkern/ffsl.c standard
+libkern/ffsll.c standard
libkern/fls.c standard
libkern/flsl.c standard
libkern/flsll.c standard
diff --git a/sys/conf/files.pc98 b/sys/conf/files.pc98
index 78f85ba..75269b4 100644
--- a/sys/conf/files.pc98
+++ b/sys/conf/files.pc98
@@ -222,6 +222,7 @@ kern/imgact_aout.c optional compat_aout
kern/imgact_gzip.c optional gzip
kern/subr_sfbuf.c standard
libkern/divdi3.c standard
+libkern/ffsll.c standard
libkern/flsll.c standard
libkern/memmove.c standard
libkern/memset.c standard
diff --git a/sys/conf/files.powerpc b/sys/conf/files.powerpc
index be17b6e..7aa9840 100644
--- a/sys/conf/files.powerpc
+++ b/sys/conf/files.powerpc
@@ -87,6 +87,7 @@ libkern/cmpdi2.c optional powerpc
libkern/divdi3.c optional powerpc
libkern/ffs.c standard
libkern/ffsl.c standard
+libkern/ffsll.c standard
libkern/fls.c standard
libkern/flsl.c standard
libkern/flsll.c standard
diff --git a/sys/conf/files.sparc64 b/sys/conf/files.sparc64
index 0a0b721..84f23ff 100644
--- a/sys/conf/files.sparc64
+++ b/sys/conf/files.sparc64
@@ -67,6 +67,7 @@ kern/syscalls.c optional ktr
kern/subr_sfbuf.c standard
libkern/ffs.c standard
libkern/ffsl.c standard
+libkern/ffsll.c standard
libkern/fls.c standard
libkern/flsl.c standard
libkern/flsll.c standard
diff --git a/sys/conf/kern.pre.mk b/sys/conf/kern.pre.mk
index 3783881..4328749 100644
--- a/sys/conf/kern.pre.mk
+++ b/sys/conf/kern.pre.mk
@@ -177,9 +177,13 @@ NORMAL_CTFCONVERT= @:
NORMAL_LINT= ${LINT} ${LINTFLAGS} ${CFLAGS:M-[DIU]*} ${.IMPSRC}
+# Linux Kernel Programming Interface C-flags
+LINUXKPI_INCLUDES= -I$S/compat/linuxkpi/common/include
+LINUXKPI_C= ${NORMAL_C} ${LINUXKPI_INCLUDES}
+
# Infiniband C flags. Correct include paths and omit errors that linux
# does not honor.
-OFEDINCLUDES= -I$S/ofed/include/
+OFEDINCLUDES= -I$S/ofed/include ${LINUXKPI_INCLUDES}
OFEDNOERR= -Wno-cast-qual -Wno-pointer-arith
OFEDCFLAGS= ${CFLAGS:N-I*} ${OFEDINCLUDES} ${CFLAGS:M-I*} ${OFEDNOERR}
OFED_C_NOIMP= ${CC} -c -o ${.TARGET} ${OFEDCFLAGS} ${WERROR} ${PROF}
diff --git a/sys/conf/options b/sys/conf/options
index dcea435..346e22e 100644
--- a/sys/conf/options
+++ b/sys/conf/options
@@ -86,7 +86,7 @@ COMPAT_FREEBSD7 opt_compat.h
COMPAT_FREEBSD9 opt_compat.h
COMPAT_FREEBSD10 opt_compat.h
COMPAT_CLOUDABI64 opt_dontuse.h
-COMPAT_LINUXAPI opt_compat.h
+COMPAT_LINUXKPI opt_compat.h
COMPILING_LINT opt_global.h
CY_PCI_FASTINTR
DEADLKRES opt_watchdog.h
diff --git a/sys/contrib/rdma/krping/krping.c b/sys/contrib/rdma/krping/krping.c
index 94b2eb9..6ffaa38 100644
--- a/sys/contrib/rdma/krping/krping.c
+++ b/sys/contrib/rdma/krping/krping.c
@@ -61,7 +61,7 @@ MODULE_AUTHOR("Steve Wise");
MODULE_DESCRIPTION("RDMA ping client/server");
MODULE_LICENSE("Dual BSD/GPL");
MODULE_VERSION(krping, 1);
-MODULE_DEPEND(krping, linuxapi, 1, 1, 1);
+MODULE_DEPEND(krping, linuxkpi, 1, 1, 1);
static __inline uint64_t
get_cycles(void)
diff --git a/sys/contrib/vchiq/interface/vchiq_arm/vchiq_2835_arm.c b/sys/contrib/vchiq/interface/vchiq_arm/vchiq_2835_arm.c
index 2aa2ecc..2f8ed43 100644
--- a/sys/contrib/vchiq/interface/vchiq_arm/vchiq_2835_arm.c
+++ b/sys/contrib/vchiq/interface/vchiq_arm/vchiq_2835_arm.c
@@ -109,6 +109,22 @@ vchiq_dmamap_cb(void *arg, bus_dma_segment_t *segs, int nseg, int err)
*addr = PHYS_TO_VCBUS(segs[0].ds_addr);
}
+static int
+copyout_page(vm_page_t p, size_t offset, void *kaddr, size_t size)
+{
+ uint8_t *dst;
+
+ dst = pmap_mapdev(VM_PAGE_TO_PHYS(p), PAGE_SIZE);
+ if (!dst)
+ return ENOMEM;
+
+ memcpy(dst + offset, kaddr, size);
+
+ pmap_unmapdev((vm_offset_t)dst, PAGE_SIZE);
+
+ return 0;
+}
+
int __init
vchiq_platform_init(VCHIQ_STATE_T *state)
{
@@ -560,15 +576,19 @@ free_pagelist(BULKINFO_T *bi, int actual)
if (head_bytes > actual)
head_bytes = actual;
- memcpy((char *)bi->buf,
+ copyout_page(pages[0],
+ pagelist->offset,
fragments->headbuf,
head_bytes);
}
if ((actual >= 0) && (head_bytes < actual) &&
(tail_bytes != 0)) {
- memcpy((char *)bi->buf + actual - tail_bytes,
- fragments->tailbuf, tail_bytes);
+
+ copyout_page(pages[num_pages-1],
+ (((vm_offset_t)bi->buf + actual) % PAGE_SIZE) - tail_bytes,
+ fragments->tailbuf,
+ tail_bytes);
}
down(&g_free_fragments_mutex);
diff --git a/sys/dev/ata/chipsets/ata-jmicron.c b/sys/dev/ata/chipsets/ata-jmicron.c
index 498c16e..5eb9ae8 100644
--- a/sys/dev/ata/chipsets/ata-jmicron.c
+++ b/sys/dev/ata/chipsets/ata-jmicron.c
@@ -142,12 +142,13 @@ ata_jmicron_ch_attach(device_t dev)
static int
ata_jmicron_setmode(device_t dev, int target, int mode)
{
- struct ata_pci_controller *ctlr = device_get_softc(device_get_parent(dev));
+ device_t parent = device_get_parent(dev);
+ struct ata_pci_controller *ctlr = device_get_softc(parent);
mode = min(mode, ctlr->chip->max_dma);
/* check for 80pin cable present */
if (ata_dma_check_80pin && mode > ATA_UDMA2 &&
- pci_read_config(dev, 0x40, 1) & 0x08) {
+ pci_read_config(parent, 0x40, 1) & 0x08) {
ata_print_cable(dev, "controller");
mode = ATA_UDMA2;
}
diff --git a/sys/dev/cxgb/ulp/iw_cxgb/iw_cxgb.c b/sys/dev/cxgb/ulp/iw_cxgb/iw_cxgb.c
index 18876fe..7b21daa 100644
--- a/sys/dev/cxgb/ulp/iw_cxgb/iw_cxgb.c
+++ b/sys/dev/cxgb/ulp/iw_cxgb/iw_cxgb.c
@@ -296,5 +296,5 @@ MODULE_DEPEND(t3_tom, cxgbc, 1, 1, 1);
MODULE_DEPEND(iw_cxgb, toecore, 1, 1, 1);
MODULE_DEPEND(iw_cxgb, t3_tom, 1, 1, 1);
MODULE_DEPEND(iw_cxgb, ibcore, 1, 1, 1);
-MODULE_DEPEND(iw_cxgb, linuxapi, 1, 1, 1);
+MODULE_DEPEND(iw_cxgb, linuxkpi, 1, 1, 1);
diff --git a/sys/dev/cxgbe/iw_cxgbe/device.c b/sys/dev/cxgbe/iw_cxgbe/device.c
index 29378ae..6de0de6 100644
--- a/sys/dev/cxgbe/iw_cxgbe/device.c
+++ b/sys/dev/cxgbe/iw_cxgbe/device.c
@@ -363,5 +363,5 @@ MODULE_VERSION(iw_cxgbe, 1);
MODULE_DEPEND(iw_cxgbe, t4nex, 1, 1, 1);
MODULE_DEPEND(iw_cxgbe, t4_tom, 1, 1, 1);
MODULE_DEPEND(iw_cxgbe, ibcore, 1, 1, 1);
-MODULE_DEPEND(iw_cxgbe, linuxapi, 1, 1, 1);
+MODULE_DEPEND(iw_cxgbe, linuxkpi, 1, 1, 1);
DECLARE_MODULE(iw_cxgbe, c4iw_mod_data, SI_SUB_EXEC, SI_ORDER_ANY);
diff --git a/sys/dev/cxgbe/iw_cxgbe/iw_cxgbe.h b/sys/dev/cxgbe/iw_cxgbe/iw_cxgbe.h
index 5f2542c..e6d70f4 100644
--- a/sys/dev/cxgbe/iw_cxgbe/iw_cxgbe.h
+++ b/sys/dev/cxgbe/iw_cxgbe/iw_cxgbe.h
@@ -606,18 +606,16 @@ enum c4iw_mmid_state {
#define MPA_V2_RDMA_READ_RTR 0x4000
#define MPA_V2_IRD_ORD_MASK 0x3FFF
-/* Fixme: Use atomic_read for kref.count as same as Linux */
#define c4iw_put_ep(ep) { \
CTR4(KTR_IW_CXGBE, "put_ep (%s:%u) ep %p, refcnt %d", \
- __func__, __LINE__, ep, (ep)->kref.count); \
- WARN_ON((ep)->kref.count < 1); \
+ __func__, __LINE__, ep, atomic_read(&(ep)->kref.refcount)); \
+ WARN_ON(atomic_read(&(ep)->kref.refcount) < 1); \
kref_put(&((ep)->kref), _c4iw_free_ep); \
}
-/* Fixme: Use atomic_read for kref.count as same as Linux */
#define c4iw_get_ep(ep) { \
CTR4(KTR_IW_CXGBE, "get_ep (%s:%u) ep %p, refcnt %d", \
- __func__, __LINE__, ep, (ep)->kref.count); \
+ __func__, __LINE__, ep, atomic_read(&(ep)->kref.refcount)); \
kref_get(&((ep)->kref)); \
}
diff --git a/sys/dev/cxgbe/iw_cxgbe/qp.c b/sys/dev/cxgbe/iw_cxgbe/qp.c
index cf74760..38c61ea 100644
--- a/sys/dev/cxgbe/iw_cxgbe/qp.c
+++ b/sys/dev/cxgbe/iw_cxgbe/qp.c
@@ -1257,8 +1257,7 @@ int c4iw_modify_qp(struct c4iw_dev *rhp, struct c4iw_qp *qhp,
case C4IW_QP_STATE_RTS:
switch (attrs->next_state) {
case C4IW_QP_STATE_CLOSING:
- //Fixme: Use atomic_read as same as Linux
- BUG_ON(qhp->ep->com.kref.count < 2);
+ BUG_ON(atomic_read(&qhp->ep->com.kref.refcount) < 2);
set_state(qhp, C4IW_QP_STATE_CLOSING);
ep = qhp->ep;
if (!internal) {
diff --git a/sys/dev/cxgbe/tom/t4_cpl_io.c b/sys/dev/cxgbe/tom/t4_cpl_io.c
index eb972d0..efd683b 100644
--- a/sys/dev/cxgbe/tom/t4_cpl_io.c
+++ b/sys/dev/cxgbe/tom/t4_cpl_io.c
@@ -675,7 +675,6 @@ t4_push_frames(struct adapter *sc, struct toepcb *toep, int drop)
}
}
- shove = m == NULL && !(tp->t_flags & TF_MORETOCOME);
space = sbspace(sb);
if (space <= sb->sb_hiwat * 3 / 8 &&
@@ -712,6 +711,7 @@ t4_push_frames(struct adapter *sc, struct toepcb *toep, int drop)
if (__predict_false(toep->flags & TPF_FIN_SENT))
panic("%s: excess tx.", __func__);
+ shove = m == NULL && !(tp->t_flags & TF_MORETOCOME);
if (plen <= max_imm) {
/* Immediate data tx */
diff --git a/sys/dev/drm2/i915/i915_dma.c b/sys/dev/drm2/i915/i915_dma.c
index dddc03e..2d0f57d 100644
--- a/sys/dev/drm2/i915/i915_dma.c
+++ b/sys/dev/drm2/i915/i915_dma.c
@@ -254,7 +254,7 @@ static int i915_dma_resume(struct drm_device * dev)
drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;
struct intel_ring_buffer *ring = LP_RING(dev_priv);
- DRM_DEBUG("\n");
+ DRM_DEBUG_DRIVER("%s\n", __func__);
if (ring->virtual_start == NULL) {
DRM_ERROR("can not ioremap virtual address for"
@@ -267,13 +267,14 @@ static int i915_dma_resume(struct drm_device * dev)
DRM_ERROR("Can not find hardware status page\n");
return -EINVAL;
}
- DRM_DEBUG("hw status page @ %p\n", ring->status_page.page_addr);
+ DRM_DEBUG_DRIVER("hw status page @ %p\n",
+ ring->status_page.page_addr);
if (ring->status_page.gfx_addr != 0)
intel_ring_setup_status_page(ring);
else
i915_write_hws_pga(dev);
- DRM_DEBUG("Enabled hardware status page\n");
+ DRM_DEBUG_DRIVER("Enabled hardware status page\n");
return 0;
}
@@ -562,7 +563,6 @@ static int i915_dispatch_batchbuffer(struct drm_device * dev,
}
i915_emit_breadcrumb(dev);
-
return 0;
}
@@ -576,10 +576,10 @@ static int i915_dispatch_flip(struct drm_device * dev)
if (!master_priv->sarea_priv)
return -EINVAL;
- DRM_DEBUG("%s: page=%d pfCurrentPage=%d\n",
- __func__,
- dev_priv->current_page,
- master_priv->sarea_priv->pf_current_page);
+ DRM_DEBUG_DRIVER("%s: page=%d pfCurrentPage=%d\n",
+ __func__,
+ dev_priv->current_page,
+ master_priv->sarea_priv->pf_current_page);
i915_kernel_lost_context(dev);
@@ -622,10 +622,8 @@ static int i915_dispatch_flip(struct drm_device * dev)
static int i915_quiescent(struct drm_device *dev)
{
- struct intel_ring_buffer *ring = LP_RING(dev->dev_private);
-
i915_kernel_lost_context(dev);
- return (intel_wait_ring_idle(ring));
+ return intel_wait_ring_idle(LP_RING(dev->dev_private));
}
static int i915_flush_ioctl(struct drm_device *dev, void *data,
@@ -642,7 +640,7 @@ static int i915_flush_ioctl(struct drm_device *dev, void *data,
ret = i915_quiescent(dev);
DRM_UNLOCK(dev);
- return (ret);
+ return ret;
}
int i915_batchbuffer(struct drm_device *dev, void *data,
@@ -653,28 +651,29 @@ int i915_batchbuffer(struct drm_device *dev, void *data,
drm_i915_sarea_t *sarea_priv = (drm_i915_sarea_t *)
master_priv->sarea_priv;
drm_i915_batchbuffer_t *batch = data;
- struct drm_clip_rect *cliprects;
size_t cliplen;
int ret;
+ struct drm_clip_rect *cliprects = NULL;
if (!dev_priv->dri1.allow_batchbuffer) {
DRM_ERROR("Batchbuffer ioctl disabled\n");
return -EINVAL;
}
- DRM_DEBUG("i915 batchbuffer, start %x used %d cliprects %d\n",
- batch->start, batch->used, batch->num_cliprects);
+ DRM_DEBUG_DRIVER("i915 batchbuffer, start %x used %d cliprects %d\n",
+ batch->start, batch->used, batch->num_cliprects);
cliplen = batch->num_cliprects * sizeof(struct drm_clip_rect);
if (batch->num_cliprects < 0)
return -EFAULT;
if (batch->num_cliprects != 0) {
cliprects = malloc(batch->num_cliprects *
- sizeof(struct drm_clip_rect), DRM_MEM_DMA,
- M_WAITOK | M_ZERO);
+ sizeof(struct drm_clip_rect),
+ DRM_MEM_DMA, M_WAITOK | M_ZERO);
ret = -copyin(batch->cliprects, cliprects,
- batch->num_cliprects * sizeof(struct drm_clip_rect));
+ batch->num_cliprects *
+ sizeof(struct drm_clip_rect));
if (ret != 0)
goto fail_free;
} else
@@ -690,6 +689,7 @@ int i915_batchbuffer(struct drm_device *dev, void *data,
fail_free:
free(cliprects, DRM_MEM_DMA);
+
return ret;
}
@@ -705,12 +705,12 @@ int i915_cmdbuffer(struct drm_device *dev, void *data,
void *batch_data;
int ret;
+ DRM_DEBUG_DRIVER("i915 cmdbuffer, buf %p sz %d cliprects %d\n",
+ cmdbuf->buf, cmdbuf->sz, cmdbuf->num_cliprects);
+
if (drm_core_check_feature(dev, DRIVER_MODESET))
return -ENODEV;
- DRM_DEBUG("i915 cmdbuffer, buf %p sz %d cliprects %d\n",
- cmdbuf->buf, cmdbuf->sz, cmdbuf->num_cliprects);
-
if (cmdbuf->num_cliprects < 0)
return -EINVAL;
@@ -722,8 +722,7 @@ int i915_cmdbuffer(struct drm_device *dev, void *data,
if (cmdbuf->num_cliprects) {
cliprects = malloc(cmdbuf->num_cliprects *
- sizeof(struct drm_clip_rect), DRM_MEM_DMA,
- M_WAITOK | M_ZERO);
+ sizeof(struct drm_clip_rect), DRM_MEM_DMA, M_WAITOK | M_ZERO);
ret = -copyin(cmdbuf->cliprects, cliprects,
cmdbuf->num_cliprects * sizeof(struct drm_clip_rect));
if (ret != 0)
@@ -746,6 +745,7 @@ fail_clip_free:
free(cliprects, DRM_MEM_DMA);
fail_batch_free:
free(batch_data, DRM_MEM_DMA);
+
return ret;
}
@@ -756,7 +756,7 @@ static int i915_emit_irq(struct drm_device * dev)
i915_kernel_lost_context(dev);
- DRM_DEBUG("i915: emit_irq\n");
+ DRM_DEBUG_DRIVER("\n");
dev_priv->counter++;
if (dev_priv->counter > 0x7FFFFFFFUL)
@@ -779,10 +779,10 @@ static int i915_wait_irq(struct drm_device * dev, int irq_nr)
{
drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;
struct drm_i915_master_private *master_priv = dev->primary->master->driver_priv;
- int ret;
+ int ret = 0;
struct intel_ring_buffer *ring = LP_RING(dev_priv);
- DRM_DEBUG("irq_nr=%d breadcrumb=%d\n", irq_nr,
+ DRM_DEBUG_DRIVER("irq_nr=%d breadcrumb=%d\n", irq_nr,
READ_BREADCRUMB(dev_priv));
if (READ_BREADCRUMB(dev_priv) >= irq_nr) {
@@ -920,7 +920,7 @@ static int i915_flip_bufs(struct drm_device *dev, void *data,
if (drm_core_check_feature(dev, DRIVER_MODESET))
return -ENODEV;
- DRM_DEBUG("%s\n", __func__);
+ DRM_DEBUG_DRIVER("%s\n", __func__);
RING_LOCK_TEST_WITH_RETURN(dev, file_priv);
@@ -1039,7 +1039,8 @@ static int i915_setparam(struct drm_device *dev, void *data,
dev_priv->fence_reg_start = param->value;
break;
default:
- DRM_DEBUG("unknown parameter %d\n", param->param);
+ DRM_DEBUG_DRIVER("unknown parameter %d\n",
+ param->param);
return -EINVAL;
}
@@ -1051,7 +1052,7 @@ static int i915_set_status_page(struct drm_device *dev, void *data,
{
drm_i915_private_t *dev_priv = dev->dev_private;
drm_i915_hws_addr_t *hws = data;
- struct intel_ring_buffer *ring = LP_RING(dev_priv);
+ struct intel_ring_buffer *ring;
if (drm_core_check_feature(dev, DRIVER_MODESET))
return -ENODEV;
@@ -1064,18 +1065,20 @@ static int i915_set_status_page(struct drm_device *dev, void *data,
return -EINVAL;
}
- DRM_DEBUG("set status page addr 0x%08x\n", (u32)hws->addr);
if (drm_core_check_feature(dev, DRIVER_MODESET)) {
DRM_ERROR("tried to set status page when mode setting active\n");
return 0;
}
+ DRM_DEBUG_DRIVER("set status page addr 0x%08x\n", (u32)hws->addr);
+
+ ring = LP_RING(dev_priv);
ring->status_page.gfx_addr = dev_priv->status_gfx_addr =
hws->addr & (0x1ffff<<12);
- dev_priv->dri1.gfx_hws_cpu_addr = pmap_mapdev_attr(
- dev->agp->base + hws->addr, PAGE_SIZE,
- VM_MEMATTR_WRITE_COMBINING);
+ dev_priv->dri1.gfx_hws_cpu_addr =
+ pmap_mapdev_attr(dev->agp->base + hws->addr, PAGE_SIZE,
+ VM_MEMATTR_WRITE_COMBINING);
if (dev_priv->dri1.gfx_hws_cpu_addr == NULL) {
i915_dma_cleanup(dev);
ring->status_page.gfx_addr = dev_priv->status_gfx_addr = 0;
@@ -1086,107 +1089,24 @@ static int i915_set_status_page(struct drm_device *dev, void *data,
memset(dev_priv->dri1.gfx_hws_cpu_addr, 0, PAGE_SIZE);
I915_WRITE(HWS_PGA, dev_priv->status_gfx_addr);
- DRM_DEBUG("load hws HWS_PGA with gfx mem 0x%x\n",
- dev_priv->status_gfx_addr);
- DRM_DEBUG("load hws at %p\n", dev_priv->hw_status_page);
- return 0;
-}
-
-static int
-i915_load_modeset_init(struct drm_device *dev)
-{
- struct drm_i915_private *dev_priv = dev->dev_private;
- int ret;
- ret = intel_parse_bios(dev);
- if (ret)
- DRM_INFO("failed to find VBIOS tables\n");
-
-#if 0
- intel_register_dsm_handler();
-#endif
-
- /* Initialise stolen first so that we may reserve preallocated
- * objects for the BIOS to KMS transition.
- */
- ret = i915_gem_init_stolen(dev);
- if (ret)
- goto cleanup_vga_switcheroo;
-
- intel_modeset_init(dev);
-
- ret = i915_gem_init(dev);
- if (ret)
- goto cleanup_gem_stolen;
-
- intel_modeset_gem_init(dev);
-
- ret = drm_irq_install(dev);
- if (ret)
- goto cleanup_gem;
-
- dev->vblank_disable_allowed = 1;
-
- ret = intel_fbdev_init(dev);
- if (ret)
- goto cleanup_gem;
-
- drm_kms_helper_poll_init(dev);
-
- /* We're off and running w/KMS */
- dev_priv->mm.suspended = 0;
-
- return 0;
-
-cleanup_gem:
- DRM_LOCK(dev);
- i915_gem_cleanup_ringbuffer(dev);
- DRM_UNLOCK(dev);
- i915_gem_cleanup_aliasing_ppgtt(dev);
-cleanup_gem_stolen:
- i915_gem_cleanup_stolen(dev);
-cleanup_vga_switcheroo:
- return (ret);
-}
-
-int i915_master_create(struct drm_device *dev, struct drm_master *master)
-{
- struct drm_i915_master_private *master_priv;
-
- master_priv = malloc(sizeof(*master_priv), DRM_MEM_DMA,
- M_NOWAIT | M_ZERO);
- if (!master_priv)
- return -ENOMEM;
-
- master->driver_priv = master_priv;
+ DRM_DEBUG_DRIVER("load hws HWS_PGA with gfx mem 0x%x\n",
+ dev_priv->status_gfx_addr);
+ DRM_DEBUG_DRIVER("load hws at %p\n",
+ dev_priv->hw_status_page);
return 0;
}
-void i915_master_destroy(struct drm_device *dev, struct drm_master *master)
-{
- struct drm_i915_master_private *master_priv = master->driver_priv;
-
- if (!master_priv)
- return;
-
- free(master_priv, DRM_MEM_DMA);
-
- master->driver_priv = NULL;
-}
-
-static int
-i915_get_bridge_dev(struct drm_device *dev)
+static int i915_get_bridge_dev(struct drm_device *dev)
{
- struct drm_i915_private *dev_priv;
-
- dev_priv = dev->dev_private;
+ struct drm_i915_private *dev_priv = dev->dev_private;
dev_priv->bridge_dev = intel_gtt_get_bridge_device();
- if (dev_priv->bridge_dev == NULL) {
+ if (!dev_priv->bridge_dev) {
DRM_ERROR("bridge device not found\n");
- return (-1);
+ return -1;
}
- return (0);
+ return 0;
}
#define MCHBAR_I915 0x44
@@ -1200,19 +1120,13 @@ i915_get_bridge_dev(struct drm_device *dev)
static int
intel_alloc_mchbar_resource(struct drm_device *dev)
{
- drm_i915_private_t *dev_priv;
- device_t vga;
- int reg;
- u32 temp_lo, temp_hi;
+ drm_i915_private_t *dev_priv = dev->dev_private;
+ int reg = INTEL_INFO(dev)->gen >= 4 ? MCHBAR_I965 : MCHBAR_I915;
+ u32 temp_lo, temp_hi = 0;
u64 mchbar_addr, temp;
- dev_priv = dev->dev_private;
- reg = INTEL_INFO(dev)->gen >= 4 ? MCHBAR_I965 : MCHBAR_I915;
-
if (INTEL_INFO(dev)->gen >= 4)
temp_hi = pci_read_config(dev_priv->bridge_dev, reg + 4, 4);
- else
- temp_hi = 0;
temp_lo = pci_read_config(dev_priv->bridge_dev, reg, 4);
mchbar_addr = ((u64)temp_hi << 32) | temp_lo;
@@ -1224,14 +1138,15 @@ intel_alloc_mchbar_resource(struct drm_device *dev)
#endif
/* Get some space for it */
+ device_t vga;
vga = device_get_parent(dev->dev);
dev_priv->mch_res_rid = 0x100;
dev_priv->mch_res = BUS_ALLOC_RESOURCE(device_get_parent(vga),
dev->dev, SYS_RES_MEMORY, &dev_priv->mch_res_rid, 0, ~0UL,
MCHBAR_SIZE, RF_ACTIVE | RF_SHAREABLE);
if (dev_priv->mch_res == NULL) {
- DRM_ERROR("failed mchbar resource alloc\n");
- return (-ENOMEM);
+ DRM_DEBUG_DRIVER("failed bus alloc\n");
+ return -ENOMEM;
}
if (INTEL_INFO(dev)->gen >= 4) {
@@ -1241,20 +1156,17 @@ intel_alloc_mchbar_resource(struct drm_device *dev)
}
pci_write_config(dev_priv->bridge_dev, reg,
rman_get_start(dev_priv->mch_res) & UINT32_MAX, 4);
- return (0);
+ return 0;
}
static void
intel_setup_mchbar(struct drm_device *dev)
{
- drm_i915_private_t *dev_priv;
- int mchbar_reg;
+ drm_i915_private_t *dev_priv = dev->dev_private;
+ int mchbar_reg = INTEL_INFO(dev)->gen >= 4 ? MCHBAR_I965 : MCHBAR_I915;
u32 temp;
bool enabled;
- dev_priv = dev->dev_private;
- mchbar_reg = INTEL_INFO(dev)->gen >= 4 ? MCHBAR_I965 : MCHBAR_I915;
-
dev_priv->mchbar_need_disable = false;
if (IS_I915G(dev) || IS_I915GM(dev)) {
@@ -1289,14 +1201,10 @@ intel_setup_mchbar(struct drm_device *dev)
static void
intel_teardown_mchbar(struct drm_device *dev)
{
- drm_i915_private_t *dev_priv;
- device_t vga;
- int mchbar_reg;
+ drm_i915_private_t *dev_priv = dev->dev_private;
+ int mchbar_reg = INTEL_INFO(dev)->gen >= 4 ? MCHBAR_I965 : MCHBAR_I915;
u32 temp;
- dev_priv = dev->dev_private;
- mchbar_reg = INTEL_INFO(dev)->gen >= 4 ? MCHBAR_I965 : MCHBAR_I915;
-
if (dev_priv->mchbar_need_disable) {
if (IS_I915G(dev) || IS_I915GM(dev)) {
temp = pci_read_config(dev_priv->bridge_dev,
@@ -1314,6 +1222,7 @@ intel_teardown_mchbar(struct drm_device *dev)
}
if (dev_priv->mch_res != NULL) {
+ device_t vga;
vga = device_get_parent(dev->dev);
BUS_DEACTIVATE_RESOURCE(device_get_parent(vga), dev->dev,
SYS_RES_MEMORY, dev_priv->mch_res_rid, dev_priv->mch_res);
@@ -1323,6 +1232,86 @@ intel_teardown_mchbar(struct drm_device *dev)
}
}
+static int i915_load_modeset_init(struct drm_device *dev)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ int ret;
+
+ ret = intel_parse_bios(dev);
+ if (ret)
+ DRM_INFO("failed to find VBIOS tables\n");
+
+#if 0
+ intel_register_dsm_handler();
+#endif
+
+ /* Initialise stolen first so that we may reserve preallocated
+ * objects for the BIOS to KMS transition.
+ */
+ ret = i915_gem_init_stolen(dev);
+ if (ret)
+ goto cleanup_vga_switcheroo;
+
+ intel_modeset_init(dev);
+
+ ret = i915_gem_init(dev);
+ if (ret)
+ goto cleanup_gem_stolen;
+
+ intel_modeset_gem_init(dev);
+
+ ret = drm_irq_install(dev);
+ if (ret)
+ goto cleanup_gem;
+
+ dev->vblank_disable_allowed = 1;
+
+ ret = intel_fbdev_init(dev);
+ if (ret)
+ goto cleanup_gem;
+
+ drm_kms_helper_poll_init(dev);
+
+ /* We're off and running w/KMS */
+ dev_priv->mm.suspended = 0;
+
+ return 0;
+
+cleanup_gem:
+ DRM_LOCK(dev);
+ i915_gem_cleanup_ringbuffer(dev);
+ DRM_UNLOCK(dev);
+ i915_gem_cleanup_aliasing_ppgtt(dev);
+cleanup_gem_stolen:
+ i915_gem_cleanup_stolen(dev);
+cleanup_vga_switcheroo:
+ return ret;
+}
+
+int i915_master_create(struct drm_device *dev, struct drm_master *master)
+{
+ struct drm_i915_master_private *master_priv;
+
+ master_priv = malloc(sizeof(*master_priv), DRM_MEM_DMA, M_NOWAIT | M_ZERO);
+ if (!master_priv)
+ return -ENOMEM;
+
+ master->driver_priv = master_priv;
+ return 0;
+}
+
+void i915_master_destroy(struct drm_device *dev, struct drm_master *master)
+{
+ struct drm_i915_master_private *master_priv = master->driver_priv;
+
+ if (!master_priv)
+ return;
+
+ free(master_priv, DRM_MEM_DMA);
+
+ master->driver_priv = NULL;
+}
+
/**
* i915_driver_load - setup chip and create an initial config
* @dev: DRM device
@@ -1339,7 +1328,7 @@ int i915_driver_load(struct drm_device *dev, unsigned long flags)
struct drm_i915_private *dev_priv = dev->dev_private;
const struct intel_device_info *info;
unsigned long base, size;
- int mmio_bar, ret;
+ int ret = 0, mmio_bar;
info = i915_get_device_id(dev->pci_device);
@@ -1347,9 +1336,6 @@ int i915_driver_load(struct drm_device *dev, unsigned long flags)
if (info->gen >= 6 && !drm_core_check_feature(dev, DRIVER_MODESET))
return -ENODEV;
-
- ret = 0;
-
/* i915 has 4 more counters */
dev->counters += 4;
dev->types[6] = _DRM_STAT_IRQ;
@@ -1358,7 +1344,7 @@ int i915_driver_load(struct drm_device *dev, unsigned long flags)
dev->types[9] = _DRM_STAT_DMA;
dev_priv = malloc(sizeof(drm_i915_private_t), DRM_MEM_DRIVER,
- M_ZERO | M_WAITOK);
+ M_WAITOK | M_ZERO);
dev->dev_private = (void *)dev_priv;
dev_priv->dev = dev;
@@ -1366,7 +1352,7 @@ int i915_driver_load(struct drm_device *dev, unsigned long flags)
if (i915_get_bridge_dev(dev)) {
free(dev_priv, DRM_MEM_DRIVER);
- return (-EIO);
+ return -EIO;
}
dev_priv->mm.gtt = intel_gtt_get();
@@ -1375,12 +1361,13 @@ int i915_driver_load(struct drm_device *dev, unsigned long flags)
base = drm_get_resource_start(dev, mmio_bar);
size = drm_get_resource_len(dev, mmio_bar);
- ret = drm_addmap(dev, base, size, _DRM_REGISTERS,
- _DRM_KERNEL | _DRM_DRIVER, &dev_priv->mmio_map);
+ ret = drm_addmap(dev,
+ base, size,
+ _DRM_REGISTERS, _DRM_KERNEL | _DRM_DRIVER, &dev_priv->mmio_map);
if (ret != 0) {
DRM_ERROR("Failed to allocate mmio_map: %d\n", ret);
free(dev_priv, DRM_MEM_DRIVER);
- return (ret);
+ return ret;
}
dev_priv->tq = taskqueue_create("915", M_WAITOK,
@@ -1463,7 +1450,7 @@ int i915_driver_load(struct drm_device *dev, unsigned long flags)
if (IS_GEN5(dev))
intel_gpu_ips_init(dev_priv);
- return (0);
+ return 0;
out_gem_unload:
/* XXXKIB */
@@ -1546,16 +1533,16 @@ int i915_driver_unload(struct drm_device *dev)
int i915_driver_open(struct drm_device *dev, struct drm_file *file)
{
- struct drm_i915_file_private *i915_file_priv;
+ struct drm_i915_file_private *file_priv;
- i915_file_priv = malloc(sizeof(*i915_file_priv), DRM_MEM_FILES,
- M_WAITOK | M_ZERO);
+ file_priv = malloc(sizeof(*file_priv), DRM_MEM_FILES, M_WAITOK | M_ZERO);
+
+ file->driver_priv = file_priv;
- mtx_init(&i915_file_priv->mm.lck, "915fp", NULL, MTX_DEF);
- INIT_LIST_HEAD(&i915_file_priv->mm.request_list);
- file->driver_priv = i915_file_priv;
+ mtx_init(&file_priv->mm.lck, "915fp", NULL, MTX_DEF);
+ INIT_LIST_HEAD(&file_priv->mm.request_list);
- drm_gem_names_init(&i915_file_priv->context_idr);
+ drm_gem_names_init(&file_priv->context_idr);
return 0;
}
@@ -1581,6 +1568,7 @@ void i915_driver_lastclose(struct drm_device * dev)
* up anything. */
if (!dev_priv)
return;
+
if (drm_core_check_feature(dev, DRIVER_MODESET)) {
#if 1
KIB_NOTYET();
@@ -1602,12 +1590,12 @@ void i915_driver_preclose(struct drm_device * dev, struct drm_file *file_priv)
i915_gem_release(dev, file_priv);
}
-void i915_driver_postclose(struct drm_device *dev, struct drm_file *file_priv)
+void i915_driver_postclose(struct drm_device *dev, struct drm_file *file)
{
- struct drm_i915_file_private *i915_file_priv = file_priv->driver_priv;
+ struct drm_i915_file_private *file_priv = file->driver_priv;
- mtx_destroy(&i915_file_priv->mm.lck);
- free(i915_file_priv, DRM_MEM_FILES);
+ mtx_destroy(&file_priv->mm.lck);
+ free(file_priv, DRM_MEM_FILES);
}
struct drm_ioctl_desc i915_ioctls[] = {
diff --git a/sys/dev/drm2/i915/i915_drv.c b/sys/dev/drm2/i915/i915_drv.c
index 3109827..e4bf06e 100644
--- a/sys/dev/drm2/i915/i915_drv.c
+++ b/sys/dev/drm2/i915/i915_drv.c
@@ -42,6 +42,44 @@ __FBSDID("$FreeBSD$");
#include "fb_if.h"
+int intel_iommu_enabled = 0;
+TUNABLE_INT("drm.i915.intel_iommu_enabled", &intel_iommu_enabled);
+int intel_iommu_gfx_mapped = 0;
+TUNABLE_INT("drm.i915.intel_iommu_gfx_mapped", &intel_iommu_gfx_mapped);
+
+int i915_prefault_disable;
+TUNABLE_INT("drm.i915.prefault_disable", &i915_prefault_disable);
+int i915_semaphores = -1;
+TUNABLE_INT("drm.i915.semaphores", &i915_semaphores);
+static int i915_try_reset = 1;
+TUNABLE_INT("drm.i915.try_reset", &i915_try_reset);
+unsigned int i915_lvds_downclock = 0;
+TUNABLE_INT("drm.i915.lvds_downclock", &i915_lvds_downclock);
+int i915_vbt_sdvo_panel_type = -1;
+TUNABLE_INT("drm.i915.vbt_sdvo_panel_type", &i915_vbt_sdvo_panel_type);
+unsigned int i915_powersave = 1;
+TUNABLE_INT("drm.i915.powersave", &i915_powersave);
+int i915_enable_fbc = 0;
+TUNABLE_INT("drm.i915.enable_fbc", &i915_enable_fbc);
+int i915_enable_rc6 = 0;
+TUNABLE_INT("drm.i915.enable_rc6", &i915_enable_rc6);
+int i915_lvds_channel_mode;
+TUNABLE_INT("drm.i915.lvds_channel_mode", &i915_lvds_channel_mode);
+int i915_panel_use_ssc = -1;
+TUNABLE_INT("drm.i915.panel_use_ssc", &i915_panel_use_ssc);
+int i915_panel_ignore_lid = 0;
+TUNABLE_INT("drm.i915.panel_ignore_lid", &i915_panel_ignore_lid);
+int i915_panel_invert_brightness;
+TUNABLE_INT("drm.i915.panel_invert_brightness", &i915_panel_invert_brightness);
+int i915_modeset = 1;
+TUNABLE_INT("drm.i915.modeset", &i915_modeset);
+int i915_enable_ppgtt = -1;
+TUNABLE_INT("drm.i915.enable_ppgtt", &i915_enable_ppgtt);
+int i915_enable_hangcheck = 1;
+TUNABLE_INT("drm.i915.enable_hangcheck", &i915_enable_hangcheck);
+static int i915_enable_unsupported = 0;
+TUNABLE_INT("drm.i915.enable_unsupported", &i915_enable_unsupported);
+
/* drv_PCI_IDs comes from drm_pciids.h, generated from drm_pciids.txt. */
static drm_pci_id_list_t i915_pciidlist[] = {
i915_PCI_IDS
@@ -229,7 +267,7 @@ static const struct intel_device_info intel_haswell_m_info = {
static const struct intel_gfx_device_id {
int device;
const struct intel_device_info *info;
-} pciidlist[] = { /* aka */
+} i915_infolist[] = { /* aka */
INTEL_VGA_DEVICE(0x3577, &intel_i830_info), /* I830_M */
INTEL_VGA_DEVICE(0x2562, &intel_845g_info), /* 845_G */
INTEL_VGA_DEVICE(0x3582, &intel_i85x_info), /* I855_GM */
@@ -316,7 +354,61 @@ static const struct intel_gfx_device_id {
{0, 0}
};
-static int i915_enable_unsupported;
+#define PCI_VENDOR_INTEL 0x8086
+#define INTEL_PCH_DEVICE_ID_MASK 0xff00
+#define INTEL_PCH_IBX_DEVICE_ID_TYPE 0x3b00
+#define INTEL_PCH_CPT_DEVICE_ID_TYPE 0x1c00
+#define INTEL_PCH_PPT_DEVICE_ID_TYPE 0x1e00
+#define INTEL_PCH_LPT_DEVICE_ID_TYPE 0x8c00
+
+void intel_detect_pch(struct drm_device *dev)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ device_t pch;
+ uint32_t id;
+
+ pch = pci_find_class(PCIC_BRIDGE, PCIS_BRIDGE_ISA);
+ if (pch != NULL && pci_get_vendor(pch) == PCI_VENDOR_INTEL) {
+ id = pci_get_device(pch) & INTEL_PCH_DEVICE_ID_MASK;
+ if (id == INTEL_PCH_IBX_DEVICE_ID_TYPE) {
+ dev_priv->pch_type = PCH_IBX;
+ dev_priv->num_pch_pll = 2;
+ DRM_DEBUG_KMS("Found Ibex Peak PCH\n");
+ } else if (id == INTEL_PCH_CPT_DEVICE_ID_TYPE) {
+ dev_priv->pch_type = PCH_CPT;
+ dev_priv->num_pch_pll = 2;
+ DRM_DEBUG_KMS("Found CougarPoint PCH\n");
+ } else if (id == INTEL_PCH_PPT_DEVICE_ID_TYPE) {
+ /* PantherPoint is CPT compatible */
+ dev_priv->pch_type = PCH_CPT;
+ dev_priv->num_pch_pll = 2;
+ DRM_DEBUG_KMS("Found PatherPoint PCH\n");
+ } else if (id == INTEL_PCH_LPT_DEVICE_ID_TYPE) {
+ dev_priv->pch_type = PCH_LPT;
+ dev_priv->num_pch_pll = 0;
+ DRM_DEBUG_KMS("Found LynxPoint PCH\n");
+ } else
+ DRM_DEBUG_KMS("No PCH detected\n");
+ KASSERT(dev_priv->num_pch_pll <= I915_NUM_PLLS,
+ ("num_pch_pll %d\n", dev_priv->num_pch_pll));
+ } else
+ DRM_DEBUG_KMS("No Intel PCI-ISA bridge found\n");
+}
+
+bool i915_semaphore_is_enabled(struct drm_device *dev)
+{
+ if (INTEL_INFO(dev)->gen < 6)
+ return 0;
+
+ if (i915_semaphores >= 0)
+ return i915_semaphores;
+
+ /* Enable semaphores on SNB when IO remapping is off */
+ if (INTEL_INFO(dev)->gen == 6 && intel_iommu_gfx_mapped)
+ return false;
+
+ return 1;
+}
static int i915_drm_freeze(struct drm_device *dev)
{
@@ -355,7 +447,7 @@ static int i915_suspend(device_t kdev)
int error;
dev = device_get_softc(kdev);
- if (dev == NULL || dev->dev_private == NULL) {
+ if (!dev || !dev->dev_private) {
DRM_ERROR("DRM not initialized, aborting suspend.\n");
return ENODEV;
}
@@ -363,7 +455,7 @@ static int i915_suspend(device_t kdev)
DRM_DEBUG_KMS("starting suspend\n");
error = i915_drm_freeze(dev);
if (error)
- return (-error);
+ return -error;
error = bus_generic_suspend(kdev);
DRM_DEBUG_KMS("finished suspend %d\n", error);
@@ -429,8 +521,8 @@ static int i915_resume(device_t kdev)
#endif
ret = i915_drm_thaw(dev);
- if (ret != 0)
- return (-ret);
+ if (ret)
+ return -ret;
drm_kms_helper_poll_enable(dev);
ret = bus_generic_resume(kdev);
@@ -438,321 +530,6 @@ static int i915_resume(device_t kdev)
return (ret);
}
-static int
-i915_probe(device_t kdev)
-{
- const struct intel_device_info *info;
- int error;
-
- error = drm_probe_helper(kdev, i915_pciidlist);
- if (error != 0)
- return (-error);
- info = i915_get_device_id(pci_get_device(kdev));
- if (info == NULL)
- return (ENXIO);
- return (0);
-}
-
-int i915_modeset;
-
-static int
-i915_attach(device_t kdev)
-{
-
- if (i915_modeset == 1)
- i915_driver_info.driver_features |= DRIVER_MODESET;
- return (-drm_attach_helper(kdev, i915_pciidlist, &i915_driver_info));
-}
-
-static struct fb_info *
-i915_fb_helper_getinfo(device_t kdev)
-{
- struct intel_fbdev *ifbdev;
- drm_i915_private_t *dev_priv;
- struct drm_device *dev;
- struct fb_info *info;
-
- dev = device_get_softc(kdev);
- dev_priv = dev->dev_private;
- ifbdev = dev_priv->fbdev;
- if (ifbdev == NULL)
- return (NULL);
-
- info = ifbdev->helper.fbdev;
-
- return (info);
-}
-
-const struct intel_device_info *
-i915_get_device_id(int device)
-{
- const struct intel_gfx_device_id *did;
-
- for (did = &pciidlist[0]; did->device != 0; did++) {
- if (did->device != device)
- continue;
- if (did->info->not_supported && !i915_enable_unsupported)
- return (NULL);
- return (did->info);
- }
- return (NULL);
-}
-
-static device_method_t i915_methods[] = {
- /* Device interface */
- DEVMETHOD(device_probe, i915_probe),
- DEVMETHOD(device_attach, i915_attach),
- DEVMETHOD(device_suspend, i915_suspend),
- DEVMETHOD(device_resume, i915_resume),
- DEVMETHOD(device_detach, drm_generic_detach),
-
- /* Framebuffer service methods */
- DEVMETHOD(fb_getinfo, i915_fb_helper_getinfo),
-
- DEVMETHOD_END
-};
-
-static driver_t i915_driver = {
- "drmn",
- i915_methods,
- sizeof(struct drm_device)
-};
-
-extern devclass_t drm_devclass;
-DRIVER_MODULE_ORDERED(i915kms, vgapci, i915_driver, drm_devclass, 0, 0,
- SI_ORDER_ANY);
-MODULE_DEPEND(i915kms, drmn, 1, 1, 1);
-MODULE_DEPEND(i915kms, agp, 1, 1, 1);
-MODULE_DEPEND(i915kms, iicbus, 1, 1, 1);
-MODULE_DEPEND(i915kms, iic, 1, 1, 1);
-MODULE_DEPEND(i915kms, iicbb, 1, 1, 1);
-
-int intel_iommu_enabled = 0;
-TUNABLE_INT("drm.i915.intel_iommu_enabled", &intel_iommu_enabled);
-int intel_iommu_gfx_mapped = 0;
-TUNABLE_INT("drm.i915.intel_iommu_gfx_mapped", &intel_iommu_gfx_mapped);
-
-int i915_prefault_disable;
-TUNABLE_INT("drm.i915.prefault_disable", &i915_prefault_disable);
-int i915_semaphores = -1;
-TUNABLE_INT("drm.i915.semaphores", &i915_semaphores);
-static int i915_try_reset = 1;
-TUNABLE_INT("drm.i915.try_reset", &i915_try_reset);
-unsigned int i915_lvds_downclock = 0;
-TUNABLE_INT("drm.i915.lvds_downclock", &i915_lvds_downclock);
-int i915_vbt_sdvo_panel_type = -1;
-TUNABLE_INT("drm.i915.vbt_sdvo_panel_type", &i915_vbt_sdvo_panel_type);
-unsigned int i915_powersave = 1;
-TUNABLE_INT("drm.i915.powersave", &i915_powersave);
-int i915_enable_fbc = 0;
-TUNABLE_INT("drm.i915.enable_fbc", &i915_enable_fbc);
-int i915_enable_rc6 = 0;
-TUNABLE_INT("drm.i915.enable_rc6", &i915_enable_rc6);
-int i915_lvds_channel_mode;
-TUNABLE_INT("drm.i915.lvds_channel_mode", &i915_lvds_channel_mode);
-int i915_panel_use_ssc = -1;
-TUNABLE_INT("drm.i915.panel_use_ssc", &i915_panel_use_ssc);
-int i915_panel_ignore_lid = 0;
-TUNABLE_INT("drm.i915.panel_ignore_lid", &i915_panel_ignore_lid);
-int i915_panel_invert_brightness;
-TUNABLE_INT("drm.i915.panel_invert_brightness", &i915_panel_invert_brightness);
-int i915_modeset = 1;
-TUNABLE_INT("drm.i915.modeset", &i915_modeset);
-int i915_enable_ppgtt = -1;
-TUNABLE_INT("drm.i915.enable_ppgtt", &i915_enable_ppgtt);
-int i915_enable_hangcheck = 1;
-TUNABLE_INT("drm.i915.enable_hangcheck", &i915_enable_hangcheck);
-TUNABLE_INT("drm.i915.enable_unsupported", &i915_enable_unsupported);
-
-#define PCI_VENDOR_INTEL 0x8086
-#define INTEL_PCH_DEVICE_ID_MASK 0xff00
-#define INTEL_PCH_IBX_DEVICE_ID_TYPE 0x3b00
-#define INTEL_PCH_CPT_DEVICE_ID_TYPE 0x1c00
-#define INTEL_PCH_PPT_DEVICE_ID_TYPE 0x1e00
-#define INTEL_PCH_LPT_DEVICE_ID_TYPE 0x8c00
-
-void intel_detect_pch(struct drm_device *dev)
-{
- struct drm_i915_private *dev_priv;
- device_t pch;
- uint32_t id;
-
- dev_priv = dev->dev_private;
- pch = pci_find_class(PCIC_BRIDGE, PCIS_BRIDGE_ISA);
- if (pch != NULL && pci_get_vendor(pch) == PCI_VENDOR_INTEL) {
- id = pci_get_device(pch) & INTEL_PCH_DEVICE_ID_MASK;
- if (id == INTEL_PCH_IBX_DEVICE_ID_TYPE) {
- dev_priv->pch_type = PCH_IBX;
- dev_priv->num_pch_pll = 2;
- DRM_DEBUG_KMS("Found Ibex Peak PCH\n");
- } else if (id == INTEL_PCH_CPT_DEVICE_ID_TYPE) {
- dev_priv->pch_type = PCH_CPT;
- dev_priv->num_pch_pll = 2;
- DRM_DEBUG_KMS("Found CougarPoint PCH\n");
- } else if (id == INTEL_PCH_PPT_DEVICE_ID_TYPE) {
- /* PantherPoint is CPT compatible */
- dev_priv->pch_type = PCH_CPT;
- dev_priv->num_pch_pll = 2;
- DRM_DEBUG_KMS("Found PatherPoint PCH\n");
- } else if (id == INTEL_PCH_LPT_DEVICE_ID_TYPE) {
- dev_priv->pch_type = PCH_LPT;
- dev_priv->num_pch_pll = 0;
- DRM_DEBUG_KMS("Found LynxPoint PCH\n");
- } else
- DRM_DEBUG_KMS("No PCH detected\n");
- KASSERT(dev_priv->num_pch_pll <= I915_NUM_PLLS,
- ("num_pch_pll %d\n", dev_priv->num_pch_pll));
- } else
- DRM_DEBUG_KMS("No Intel PCI-ISA bridge found\n");
-}
-
-bool i915_semaphore_is_enabled(struct drm_device *dev)
-{
- if (INTEL_INFO(dev)->gen < 6)
- return 0;
-
- if (i915_semaphores >= 0)
- return i915_semaphores;
-
- /* Enable semaphores on SNB when IO remapping is off */
- if (INTEL_INFO(dev)->gen == 6 && intel_iommu_gfx_mapped)
- return false;
-
- return 1;
-}
-
-void
-__gen6_gt_force_wake_get(struct drm_i915_private *dev_priv)
-{
- int count;
-
- count = 0;
- while (count++ < 50 && (I915_READ_NOTRACE(FORCEWAKE_ACK) & 1))
- DELAY(10);
-
- I915_WRITE_NOTRACE(FORCEWAKE, 1);
- POSTING_READ(FORCEWAKE);
-
- count = 0;
- while (count++ < 50 && (I915_READ_NOTRACE(FORCEWAKE_ACK) & 1) == 0)
- DELAY(10);
-}
-
-void
-__gen6_gt_force_wake_mt_get(struct drm_i915_private *dev_priv)
-{
- int count;
-
- count = 0;
- while (count++ < 50 && (I915_READ_NOTRACE(FORCEWAKE_MT_ACK) & 1))
- DELAY(10);
-
- I915_WRITE_NOTRACE(FORCEWAKE_MT, _MASKED_BIT_ENABLE(1));
- POSTING_READ(FORCEWAKE_MT);
-
- count = 0;
- while (count++ < 50 && (I915_READ_NOTRACE(FORCEWAKE_MT_ACK) & 1) == 0)
- DELAY(10);
-}
-
-void
-gen6_gt_force_wake_get(struct drm_i915_private *dev_priv)
-{
-
- mtx_lock(&dev_priv->gt_lock);
- if (dev_priv->forcewake_count++ == 0)
- dev_priv->display.force_wake_get(dev_priv);
- mtx_unlock(&dev_priv->gt_lock);
-}
-
-static void
-gen6_gt_check_fifodbg(struct drm_i915_private *dev_priv)
-{
- u32 gtfifodbg;
-
- gtfifodbg = I915_READ_NOTRACE(GTFIFODBG);
- if ((gtfifodbg & GT_FIFO_CPU_ERROR_MASK) != 0) {
- printf("MMIO read or write has been dropped %x\n", gtfifodbg);
- I915_WRITE_NOTRACE(GTFIFODBG, GT_FIFO_CPU_ERROR_MASK);
- }
-}
-
-void
-__gen6_gt_force_wake_put(struct drm_i915_private *dev_priv)
-{
-
- I915_WRITE_NOTRACE(FORCEWAKE, 0);
- /* The below doubles as a POSTING_READ */
- gen6_gt_check_fifodbg(dev_priv);
-}
-
-void
-__gen6_gt_force_wake_mt_put(struct drm_i915_private *dev_priv)
-{
-
- I915_WRITE_NOTRACE(FORCEWAKE_MT, _MASKED_BIT_DISABLE(1));
- /* The below doubles as a POSTING_READ */
- gen6_gt_check_fifodbg(dev_priv);
-}
-
-void
-gen6_gt_force_wake_put(struct drm_i915_private *dev_priv)
-{
-
- mtx_lock(&dev_priv->gt_lock);
- if (--dev_priv->forcewake_count == 0)
- dev_priv->display.force_wake_put(dev_priv);
- mtx_unlock(&dev_priv->gt_lock);
-}
-
-int
-__gen6_gt_wait_for_fifo(struct drm_i915_private *dev_priv)
-{
- int ret = 0;
-
- if (dev_priv->gt_fifo_count < GT_FIFO_NUM_RESERVED_ENTRIES) {
- int loop = 500;
- u32 fifo = I915_READ_NOTRACE(GT_FIFO_FREE_ENTRIES);
- while (fifo <= GT_FIFO_NUM_RESERVED_ENTRIES && loop--) {
- DELAY(10);
- fifo = I915_READ_NOTRACE(GT_FIFO_FREE_ENTRIES);
- }
- if (loop < 0 && fifo <= GT_FIFO_NUM_RESERVED_ENTRIES) {
- printf("%s loop\n", __func__);
- ++ret;
- }
- dev_priv->gt_fifo_count = fifo;
- }
- dev_priv->gt_fifo_count--;
-
- return (ret);
-}
-
-void vlv_force_wake_get(struct drm_i915_private *dev_priv)
-{
- int count;
-
- count = 0;
-
- /* Already awake? */
- if ((I915_READ(0x130094) & 0xa1) == 0xa1)
- return;
-
- I915_WRITE_NOTRACE(FORCEWAKE_VLV, 0xffffffff);
- POSTING_READ(FORCEWAKE_VLV);
-
- count = 0;
- while (count++ < 50 && (I915_READ_NOTRACE(FORCEWAKE_ACK_VLV) & 1) == 0)
- DELAY(10);
-}
-
-void vlv_force_wake_put(struct drm_i915_private *dev_priv)
-{
- I915_WRITE_NOTRACE(FORCEWAKE_VLV, 0xffff0000);
- /* FIXME: confirm VLV behavior with Punit folks */
- POSTING_READ(FORCEWAKE_VLV);
-}
-
static int i8xx_do_reset(struct drm_device *dev)
{
struct drm_i915_private *dev_priv = dev->dev_private;
@@ -808,8 +585,8 @@ static int i965_do_reset(struct drm_device *dev)
*/
gdrst = pci_read_config(dev->dev, I965_GDRST, 1);
pci_write_config(dev->dev, I965_GDRST,
- gdrst | GRDOM_RENDER | GRDOM_RESET_ENABLE, 1);
-
+ gdrst | GRDOM_RENDER |
+ GRDOM_RESET_ENABLE, 1);
ret = wait_for(i965_reset_complete(dev), 500);
if (ret)
return ret;
@@ -817,7 +594,8 @@ static int i965_do_reset(struct drm_device *dev)
/* We can't reset render&media without also resetting display ... */
gdrst = pci_read_config(dev->dev, I965_GDRST, 1);
pci_write_config(dev->dev, I965_GDRST,
- gdrst | GRDOM_MEDIA | GRDOM_RESET_ENABLE, 1);
+ gdrst | GRDOM_MEDIA |
+ GRDOM_RESET_ENABLE, 1);
return wait_for(i965_reset_complete(dev), 500);
}
@@ -866,8 +644,8 @@ static int gen6_do_reset(struct drm_device *dev)
500, 0, "915rst");
/* If reset with a user forcewake, try to restore, otherwise turn it off */
- if (dev_priv->forcewake_count)
- dev_priv->display.force_wake_get(dev_priv);
+ if (dev_priv->forcewake_count)
+ dev_priv->display.force_wake_get(dev_priv);
else
dev_priv->display.force_wake_put(dev_priv);
@@ -875,7 +653,7 @@ static int gen6_do_reset(struct drm_device *dev)
dev_priv->gt_fifo_count = I915_READ_NOTRACE(GT_FIFO_FREE_ENTRIES);
mtx_unlock(&dev_priv->gt_lock);
- return (ret);
+ return ret;
}
int intel_gpu_reset(struct drm_device *dev)
@@ -990,6 +768,7 @@ int i915_reset(struct drm_device *dev)
* least the rps/rc6/emon init done within modeset_init_hw. For
* some unknown reason, this blows up my ilk, so don't.
*/
+
DRM_UNLOCK(dev);
if (drm_core_check_feature(dev, DRIVER_MODESET))
@@ -1004,12 +783,226 @@ int i915_reset(struct drm_device *dev)
return 0;
}
+const struct intel_device_info *
+i915_get_device_id(int device)
+{
+ const struct intel_gfx_device_id *did;
+
+ for (did = &i915_infolist[0]; did->device != 0; did++) {
+ if (did->device != device)
+ continue;
+ if (did->info->not_supported && !i915_enable_unsupported)
+ return (NULL);
+ return (did->info);
+ }
+ return (NULL);
+}
+
+static int i915_probe(device_t kdev)
+{
+ const struct intel_device_info *intel_info =
+ i915_get_device_id(pci_get_device(kdev));
+
+ if (intel_info == NULL)
+ return (ENXIO);
+
+ return -drm_probe_helper(kdev, i915_pciidlist);
+}
+
+static int i915_attach(device_t kdev)
+{
+
+ if (i915_modeset == 1)
+ i915_driver_info.driver_features |= DRIVER_MODESET;
+ return (-drm_attach_helper(kdev, i915_pciidlist, &i915_driver_info));
+}
+
+static struct fb_info *
+i915_fb_helper_getinfo(device_t kdev)
+{
+ struct intel_fbdev *ifbdev;
+ drm_i915_private_t *dev_priv;
+ struct drm_device *dev;
+ struct fb_info *info;
+
+ dev = device_get_softc(kdev);
+ dev_priv = dev->dev_private;
+ ifbdev = dev_priv->fbdev;
+ if (ifbdev == NULL)
+ return (NULL);
+
+ info = ifbdev->helper.fbdev;
+
+ return (info);
+}
+
+static device_method_t i915_methods[] = {
+ /* Device interface */
+ DEVMETHOD(device_probe, i915_probe),
+ DEVMETHOD(device_attach, i915_attach),
+ DEVMETHOD(device_suspend, i915_suspend),
+ DEVMETHOD(device_resume, i915_resume),
+ DEVMETHOD(device_detach, drm_generic_detach),
+
+ /* Framebuffer service methods */
+ DEVMETHOD(fb_getinfo, i915_fb_helper_getinfo),
+
+ DEVMETHOD_END
+};
+
+static driver_t i915_driver = {
+ "drmn",
+ i915_methods,
+ sizeof(struct drm_device)
+};
+
+extern devclass_t drm_devclass;
+DRIVER_MODULE_ORDERED(i915kms, vgapci, i915_driver, drm_devclass, 0, 0,
+ SI_ORDER_ANY);
+MODULE_DEPEND(i915kms, drmn, 1, 1, 1);
+MODULE_DEPEND(i915kms, agp, 1, 1, 1);
+MODULE_DEPEND(i915kms, iicbus, 1, 1, 1);
+MODULE_DEPEND(i915kms, iic, 1, 1, 1);
+MODULE_DEPEND(i915kms, iicbb, 1, 1, 1);
+
/* We give fast paths for the really cool registers */
#define NEEDS_FORCE_WAKE(dev_priv, reg) \
- (((dev_priv)->info->gen >= 6) && \
- ((reg) < 0x40000) && \
- ((reg) != FORCEWAKE)) && \
- (!IS_VALLEYVIEW((dev_priv)->dev))
+ (((dev_priv)->info->gen >= 6) && \
+ ((reg) < 0x40000) && \
+ ((reg) != FORCEWAKE)) && \
+ (!IS_VALLEYVIEW((dev_priv)->dev))
+
+void
+__gen6_gt_force_wake_get(struct drm_i915_private *dev_priv)
+{
+ int count;
+
+ count = 0;
+ while (count++ < 50 && (I915_READ_NOTRACE(FORCEWAKE_ACK) & 1))
+ DELAY(10);
+
+ I915_WRITE_NOTRACE(FORCEWAKE, 1);
+ POSTING_READ(FORCEWAKE);
+
+ count = 0;
+ while (count++ < 50 && (I915_READ_NOTRACE(FORCEWAKE_ACK) & 1) == 0)
+ DELAY(10);
+}
+
+void
+__gen6_gt_force_wake_mt_get(struct drm_i915_private *dev_priv)
+{
+ int count;
+
+ count = 0;
+ while (count++ < 50 && (I915_READ_NOTRACE(FORCEWAKE_MT_ACK) & 1))
+ DELAY(10);
+
+ I915_WRITE_NOTRACE(FORCEWAKE_MT, _MASKED_BIT_ENABLE(1));
+ POSTING_READ(FORCEWAKE_MT);
+
+ count = 0;
+ while (count++ < 50 && (I915_READ_NOTRACE(FORCEWAKE_MT_ACK) & 1) == 0)
+ DELAY(10);
+}
+
+void
+gen6_gt_force_wake_get(struct drm_i915_private *dev_priv)
+{
+
+ mtx_lock(&dev_priv->gt_lock);
+ if (dev_priv->forcewake_count++ == 0)
+ dev_priv->display.force_wake_get(dev_priv);
+ mtx_unlock(&dev_priv->gt_lock);
+}
+
+static void
+gen6_gt_check_fifodbg(struct drm_i915_private *dev_priv)
+{
+ u32 gtfifodbg;
+
+ gtfifodbg = I915_READ_NOTRACE(GTFIFODBG);
+ if ((gtfifodbg & GT_FIFO_CPU_ERROR_MASK) != 0) {
+ printf("MMIO read or write has been dropped %x\n", gtfifodbg);
+ I915_WRITE_NOTRACE(GTFIFODBG, GT_FIFO_CPU_ERROR_MASK);
+ }
+}
+
+void
+__gen6_gt_force_wake_put(struct drm_i915_private *dev_priv)
+{
+
+ I915_WRITE_NOTRACE(FORCEWAKE, 0);
+ /* The below doubles as a POSTING_READ */
+ gen6_gt_check_fifodbg(dev_priv);
+}
+
+void
+__gen6_gt_force_wake_mt_put(struct drm_i915_private *dev_priv)
+{
+
+ I915_WRITE_NOTRACE(FORCEWAKE_MT, _MASKED_BIT_DISABLE(1));
+ /* The below doubles as a POSTING_READ */
+ gen6_gt_check_fifodbg(dev_priv);
+}
+
+void
+gen6_gt_force_wake_put(struct drm_i915_private *dev_priv)
+{
+
+ mtx_lock(&dev_priv->gt_lock);
+ if (--dev_priv->forcewake_count == 0)
+ dev_priv->display.force_wake_put(dev_priv);
+ mtx_unlock(&dev_priv->gt_lock);
+}
+
+int
+__gen6_gt_wait_for_fifo(struct drm_i915_private *dev_priv)
+{
+ int ret = 0;
+
+ if (dev_priv->gt_fifo_count < GT_FIFO_NUM_RESERVED_ENTRIES) {
+ int loop = 500;
+ u32 fifo = I915_READ_NOTRACE(GT_FIFO_FREE_ENTRIES);
+ while (fifo <= GT_FIFO_NUM_RESERVED_ENTRIES && loop--) {
+ DELAY(10);
+ fifo = I915_READ_NOTRACE(GT_FIFO_FREE_ENTRIES);
+ }
+ if (loop < 0 && fifo <= GT_FIFO_NUM_RESERVED_ENTRIES) {
+ printf("%s loop\n", __func__);
+ ++ret;
+ }
+ dev_priv->gt_fifo_count = fifo;
+ }
+ dev_priv->gt_fifo_count--;
+
+ return (ret);
+}
+
+void vlv_force_wake_get(struct drm_i915_private *dev_priv)
+{
+ int count;
+
+ count = 0;
+
+ /* Already awake? */
+ if ((I915_READ(0x130094) & 0xa1) == 0xa1)
+ return;
+
+ I915_WRITE_NOTRACE(FORCEWAKE_VLV, 0xffffffff);
+ POSTING_READ(FORCEWAKE_VLV);
+
+ count = 0;
+ while (count++ < 50 && (I915_READ_NOTRACE(FORCEWAKE_ACK_VLV) & 1) == 0)
+ DELAY(10);
+}
+
+void vlv_force_wake_put(struct drm_i915_private *dev_priv)
+{
+ I915_WRITE_NOTRACE(FORCEWAKE_VLV, 0xffff0000);
+ /* FIXME: confirm VLV behavior with Punit folks */
+ POSTING_READ(FORCEWAKE_VLV);
+}
#define __i915_read(x, y) \
u##x i915_read##x(struct drm_i915_private *dev_priv, u32 reg) { \
@@ -1018,12 +1011,12 @@ u##x i915_read##x(struct drm_i915_private *dev_priv, u32 reg) { \
mtx_lock(&dev_priv->gt_lock); \
if (dev_priv->forcewake_count == 0) \
dev_priv->display.force_wake_get(dev_priv); \
- val = DRM_READ##y(dev_priv->mmio_map, reg); \
+ val = DRM_READ##x(dev_priv->mmio_map, reg); \
if (dev_priv->forcewake_count == 0) \
dev_priv->display.force_wake_put(dev_priv); \
mtx_unlock(&dev_priv->gt_lock); \
} else { \
- val = DRM_READ##y(dev_priv->mmio_map, reg); \
+ val = DRM_READ##x(dev_priv->mmio_map, reg); \
} \
trace_i915_reg_rw(false, reg, val, sizeof(val)); \
return val; \
@@ -1042,7 +1035,7 @@ void i915_write##x(struct drm_i915_private *dev_priv, u32 reg, u##x val) { \
if (NEEDS_FORCE_WAKE((dev_priv), (reg))) { \
__fifo_ret = __gen6_gt_wait_for_fifo(dev_priv); \
} \
- DRM_WRITE##y(dev_priv->mmio_map, reg, val); \
+ DRM_WRITE##x(dev_priv->mmio_map, reg, val); \
if (__predict_false(__fifo_ret)) { \
gen6_gt_check_fifodbg(dev_priv); \
} \
diff --git a/sys/dev/drm2/i915/i915_gem_execbuffer.c b/sys/dev/drm2/i915/i915_gem_execbuffer.c
index 088043d..61d0fa1 100644
--- a/sys/dev/drm2/i915/i915_gem_execbuffer.c
+++ b/sys/dev/drm2/i915/i915_gem_execbuffer.c
@@ -221,9 +221,10 @@ eb_create(int size)
{
struct eb_objects *eb;
- eb = malloc(sizeof(*eb), DRM_I915_GEM, M_WAITOK | M_ZERO);
+ eb = malloc(sizeof(*eb),
+ DRM_I915_GEM, M_WAITOK | M_ZERO);
eb->buckets = hashinit(size, DRM_I915_GEM, &eb->hashmask);
- return (eb);
+ return eb;
}
static void
@@ -250,9 +251,10 @@ eb_get_object(struct eb_objects *eb, unsigned long handle)
LIST_FOREACH(obj, &eb->buckets[handle & eb->hashmask], exec_node) {
if (obj->exec_handle == handle)
- return (obj);
+ return obj;
}
- return (NULL);
+
+ return NULL;
}
static void
@@ -374,7 +376,7 @@ i915_gem_execbuffer_relocate_entry(struct drm_i915_gem_object *obj,
/* We can't wait for rendering with pagefaults disabled */
if (obj->active && (curthread->td_pflags & TDP_NOFAULTING) != 0)
- return (-EFAULT);
+ return -EFAULT;
reloc->delta += target_offset;
if (use_cpu_reloc(obj)) {
@@ -389,7 +391,7 @@ i915_gem_execbuffer_relocate_entry(struct drm_i915_gem_object *obj,
sf = sf_buf_alloc(obj->pages[OFF_TO_IDX(reloc->offset)],
SFB_NOWAIT);
if (sf == NULL)
- return (-ENOMEM);
+ return -ENOMEM;
vaddr = (void *)sf_buf_kva(sf);
*(uint32_t *)(vaddr + page_offset) = reloc->delta;
sf_buf_free(sf);
@@ -509,14 +511,13 @@ i915_gem_execbuffer_relocate(struct drm_device *dev,
i915_gem_retire_requests(dev);
ret = 0;
- pflags = vm_fault_disable_pagefaults();
/* This is the fast path and we cannot handle a pagefault whilst
* holding the device lock lest the user pass in the relocations
* contained within a mmaped bo. For in such a case we, the page
* fault handler would call i915_gem_fault() and we would try to
* acquire the device lock again. Obviously this is bad.
*/
-
+ pflags = vm_fault_disable_pagefaults();
list_for_each_entry(obj, objects, exec_list) {
ret = i915_gem_execbuffer_relocate_object(obj, eb);
if (ret)
@@ -585,7 +586,8 @@ i915_gem_execbuffer_reserve(struct intel_ring_buffer *ring,
struct drm_i915_gem_object *obj;
struct list_head ordered_objects;
bool has_fenced_gpu_access = INTEL_INFO(ring->dev)->gen < 4;
- int ret, retry;
+ int retry;
+ int ret;
dev_priv = ring->dev->dev_private;
INIT_LIST_HEAD(&ordered_objects);
@@ -941,13 +943,15 @@ i915_gem_check_execbuffer(struct drm_i915_gem_execbuffer2 *exec)
static int
validate_exec_list(struct drm_i915_gem_exec_object2 *exec, int count,
- vm_page_t ***map)
+ vm_page_t ***map, int **maplen)
{
vm_page_t *ma;
int i, length, page_count;
/* XXXKIB various limits checking is missing there */
*map = malloc(count * sizeof(*ma), DRM_I915_GEM, M_WAITOK | M_ZERO);
+ *maplen = malloc(count * sizeof(*maplen), DRM_I915_GEM, M_WAITOK |
+ M_ZERO);
for (i = 0; i < count; i++) {
/* First check for malicious input causing overflow */
if (exec[i].relocation_count >
@@ -955,11 +959,12 @@ validate_exec_list(struct drm_i915_gem_exec_object2 *exec, int count,
return -EINVAL;
length = exec[i].relocation_count *
- sizeof(struct drm_i915_gem_relocation_entry);
+ sizeof(struct drm_i915_gem_relocation_entry);
if (length == 0) {
(*map)[i] = NULL;
continue;
}
+
/*
* Since both start and end of the relocation region
* may be not aligned on the page boundary, be
@@ -969,12 +974,13 @@ validate_exec_list(struct drm_i915_gem_exec_object2 *exec, int count,
page_count = howmany(length, PAGE_SIZE) + 2;
ma = (*map)[i] = malloc(page_count * sizeof(vm_page_t),
DRM_I915_GEM, M_WAITOK | M_ZERO);
- if (vm_fault_quick_hold_pages(&curproc->p_vmspace->vm_map,
- exec[i].relocs_ptr, length, VM_PROT_READ | VM_PROT_WRITE,
- ma, page_count) == -1) {
+ (*maplen)[i] = vm_fault_quick_hold_pages(
+ &curproc->p_vmspace->vm_map, exec[i].relocs_ptr, length,
+ VM_PROT_READ | VM_PROT_WRITE, ma, page_count);
+ if ((*maplen)[i] == -1) {
free(ma, DRM_I915_GEM);
(*map)[i] = NULL;
- return (-EFAULT);
+ return -EFAULT;
}
}
@@ -1055,7 +1061,7 @@ i915_gem_fix_mi_batchbuffer_end(struct drm_i915_gem_object *batch_obj,
char *mkva;
uint64_t po_r, po_w;
uint32_t cmd;
-
+
po_r = batch_obj->base.dev->agp->base + batch_obj->gtt_offset +
batch_start_offset + batch_len;
if (batch_len > 0)
@@ -1085,7 +1091,7 @@ DRM_DEBUG("batchbuffer does not end by MI_BATCH_BUFFER_END, overwriting last bo
int i915_fix_mi_batchbuffer_end = 0;
- static int
+static int
i915_reset_gen7_sol_offsets(struct drm_device *dev,
struct intel_ring_buffer *ring)
{
@@ -1122,12 +1128,13 @@ i915_gem_do_execbuffer(struct drm_device *dev, void *data,
struct drm_i915_gem_object *batch_obj;
struct drm_clip_rect *cliprects = NULL;
struct intel_ring_buffer *ring;
- vm_page_t **relocs_ma;
u32 ctx_id = i915_execbuffer2_get_context_id(*args);
u32 exec_start, exec_len;
u32 seqno;
u32 mask;
int ret, mode, i;
+ vm_page_t **relocs_ma;
+ int *relocs_len;
if (!i915_gem_check_execbuffer(args)) {
DRM_DEBUG("execbuf with invalid offset/length\n");
@@ -1137,9 +1144,10 @@ i915_gem_do_execbuffer(struct drm_device *dev, void *data,
if (args->batch_len == 0)
return (0);
- ret = validate_exec_list(exec, args->buffer_count, &relocs_ma);
- if (ret != 0)
- goto pre_struct_lock_err;
+ ret = validate_exec_list(exec, args->buffer_count,
+ &relocs_ma, &relocs_len);
+ if (ret)
+ goto pre_mutex_err;
switch (args->flags & I915_EXEC_RING_MASK) {
case I915_EXEC_DEFAULT:
@@ -1152,7 +1160,7 @@ i915_gem_do_execbuffer(struct drm_device *dev, void *data,
DRM_DEBUG("Ring %s doesn't support contexts\n",
ring->name);
ret = -EPERM;
- goto pre_struct_lock_err;
+ goto pre_mutex_err;
}
break;
case I915_EXEC_BLT:
@@ -1161,20 +1169,20 @@ i915_gem_do_execbuffer(struct drm_device *dev, void *data,
DRM_DEBUG("Ring %s doesn't support contexts\n",
ring->name);
ret = -EPERM;
- goto pre_struct_lock_err;
+ goto pre_mutex_err;
}
break;
default:
DRM_DEBUG("execbuf with unknown ring: %d\n",
(int)(args->flags & I915_EXEC_RING_MASK));
ret = -EINVAL;
- goto pre_struct_lock_err;
+ goto pre_mutex_err;
}
if (!intel_ring_initialized(ring)) {
DRM_DEBUG("execbuf with invalid ring: %d\n",
(int)(args->flags & I915_EXEC_RING_MASK));
ret = -EINVAL;
- goto pre_struct_lock_err;
+ goto pre_mutex_err;
}
mode = args->flags & I915_EXEC_CONSTANTS_MASK;
@@ -1187,13 +1195,13 @@ i915_gem_do_execbuffer(struct drm_device *dev, void *data,
mode != dev_priv->relative_constants_mode) {
if (INTEL_INFO(dev)->gen < 4) {
ret = -EINVAL;
- goto pre_struct_lock_err;
+ goto pre_mutex_err;
}
if (INTEL_INFO(dev)->gen > 5 &&
mode == I915_EXEC_CONSTANTS_REL_SURFACE) {
ret = -EINVAL;
- goto pre_struct_lock_err;
+ goto pre_mutex_err;
}
/* The HW changed the meaning on this bit on gen6 */
@@ -1204,57 +1212,57 @@ i915_gem_do_execbuffer(struct drm_device *dev, void *data,
default:
DRM_DEBUG("execbuf with unknown constants: %d\n", mode);
ret = -EINVAL;
- goto pre_struct_lock_err;
+ goto pre_mutex_err;
}
if (args->buffer_count < 1) {
DRM_DEBUG("execbuf with %d buffers\n", args->buffer_count);
ret = -EINVAL;
- goto pre_struct_lock_err;
+ goto pre_mutex_err;
}
if (args->num_cliprects != 0) {
if (ring != &dev_priv->rings[RCS]) {
DRM_DEBUG("clip rectangles are only valid with the render ring\n");
ret = -EINVAL;
- goto pre_struct_lock_err;
+ goto pre_mutex_err;
}
if (INTEL_INFO(dev)->gen >= 5) {
DRM_DEBUG("clip rectangles are only valid on pre-gen5\n");
ret = -EINVAL;
- goto pre_struct_lock_err;
+ goto pre_mutex_err;
}
if (args->num_cliprects > UINT_MAX / sizeof(*cliprects)) {
DRM_DEBUG("execbuf with %u cliprects\n",
args->num_cliprects);
ret = -EINVAL;
- goto pre_struct_lock_err;
+ goto pre_mutex_err;
}
- cliprects = malloc( sizeof(*cliprects) * args->num_cliprects,
- DRM_I915_GEM, M_WAITOK | M_ZERO);
+ cliprects = malloc(args->num_cliprects * sizeof(*cliprects),
+ DRM_I915_GEM, M_WAITOK | M_ZERO);
ret = -copyin((void *)(uintptr_t)args->cliprects_ptr, cliprects,
sizeof(*cliprects) * args->num_cliprects);
if (ret != 0)
- goto pre_struct_lock_err;
+ goto pre_mutex_err;
}
ret = i915_mutex_lock_interruptible(dev);
if (ret)
- goto pre_struct_lock_err;
+ goto pre_mutex_err;
if (dev_priv->mm.suspended) {
DRM_UNLOCK(dev);
ret = -EBUSY;
- goto pre_struct_lock_err;
+ goto pre_mutex_err;
}
eb = eb_create(args->buffer_count);
if (eb == NULL) {
DRM_UNLOCK(dev);
ret = -ENOMEM;
- goto pre_struct_lock_err;
+ goto pre_mutex_err;
}
/* Look up object handles */
@@ -1345,7 +1353,7 @@ i915_gem_do_execbuffer(struct drm_device *dev, void *data,
mode != dev_priv->relative_constants_mode) {
ret = intel_ring_begin(ring, 4);
if (ret)
- goto err;
+ goto err;
intel_ring_emit(ring, MI_NOOP);
intel_ring_emit(ring, MI_LOAD_REGISTER_IMM(1));
@@ -1370,9 +1378,6 @@ i915_gem_do_execbuffer(struct drm_device *dev, void *data,
args->batch_start_offset, args->batch_len);
}
- CTR4(KTR_DRM, "ring_dispatch %s %d exec %x %x", ring->name, seqno,
- exec_start, exec_len);
-
if (cliprects) {
for (i = 0; i < args->num_cliprects; i++) {
ret = i915_emit_box(dev, &cliprects[i],
@@ -1392,6 +1397,9 @@ i915_gem_do_execbuffer(struct drm_device *dev, void *data,
goto err;
}
+ CTR4(KTR_DRM, "ring_dispatch %s %d exec %x %x", ring->name, seqno,
+ exec_start, exec_len);
+
i915_gem_execbuffer_move_to_active(&objects, ring, seqno);
i915_gem_execbuffer_retire_commands(dev, file, ring);
@@ -1406,18 +1414,17 @@ err:
list_del_init(&obj->exec_list);
drm_gem_object_unreference(&obj->base);
}
+
DRM_UNLOCK(dev);
-pre_struct_lock_err:
+pre_mutex_err:
for (i = 0; i < args->buffer_count; i++) {
if (relocs_ma[i] != NULL) {
- vm_page_unhold_pages(relocs_ma[i], howmany(
- exec[i].relocation_count *
- sizeof(struct drm_i915_gem_relocation_entry),
- PAGE_SIZE));
+ vm_page_unhold_pages(relocs_ma[i], relocs_len[i]);
free(relocs_ma[i], DRM_I915_GEM);
}
}
+ free(relocs_len, DRM_I915_GEM);
free(relocs_ma, DRM_I915_GEM);
free(cliprects, DRM_I915_GEM);
return ret;
@@ -1458,7 +1465,7 @@ i915_gem_execbuffer(struct drm_device *dev, void *data,
args->buffer_count, ret);
free(exec_list, DRM_I915_GEM);
free(exec2_list, DRM_I915_GEM);
- return (ret);
+ return ret;
}
for (i = 0; i < args->buffer_count; i++) {
@@ -1522,8 +1529,8 @@ i915_gem_execbuffer2(struct drm_device *dev, void *data,
}
/* XXXKIB user-controllable malloc size */
- exec2_list = malloc(sizeof(*exec2_list) * args->buffer_count,
- DRM_I915_GEM, M_WAITOK);
+ exec2_list = malloc(sizeof(*exec2_list)*args->buffer_count,
+ DRM_I915_GEM, M_WAITOK);
ret = -copyin((void *)(uintptr_t)args->buffers_ptr, exec2_list,
sizeof(*exec2_list) * args->buffer_count);
if (ret != 0) {
diff --git a/sys/dev/drm2/i915/i915_irq.c b/sys/dev/drm2/i915/i915_irq.c
index ac89032..d0b7e62 100644
--- a/sys/dev/drm2/i915/i915_irq.c
+++ b/sys/dev/drm2/i915/i915_irq.c
@@ -132,8 +132,7 @@ i915_pipe_enabled(struct drm_device *dev, int pipe)
/* Called from drm generic code, passed a 'crtc', which
* we use as a pipe index
*/
-static u32
-i915_get_vblank_counter(struct drm_device *dev, int pipe)
+static u32 i915_get_vblank_counter(struct drm_device *dev, int pipe)
{
drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;
unsigned long high_frame;
@@ -141,7 +140,7 @@ i915_get_vblank_counter(struct drm_device *dev, int pipe)
u32 high1, high2, low;
if (!i915_pipe_enabled(dev, pipe)) {
- DRM_DEBUG("trying to get vblank count for disabled "
+ DRM_DEBUG_DRIVER("trying to get vblank count for disabled "
"pipe %c\n", pipe_name(pipe));
return 0;
}
@@ -165,14 +164,13 @@ i915_get_vblank_counter(struct drm_device *dev, int pipe)
return (high1 << 8) | low;
}
-static u32
-gm45_get_vblank_counter(struct drm_device *dev, int pipe)
+static u32 gm45_get_vblank_counter(struct drm_device *dev, int pipe)
{
drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;
int reg = PIPE_FRMCOUNT_GM45(pipe);
if (!i915_pipe_enabled(dev, pipe)) {
- DRM_DEBUG("i915: trying to get vblank count for disabled "
+ DRM_DEBUG_DRIVER("trying to get vblank count for disabled "
"pipe %c\n", pipe_name(pipe));
return 0;
}
@@ -180,9 +178,8 @@ gm45_get_vblank_counter(struct drm_device *dev, int pipe)
return I915_READ(reg);
}
-static int
-i915_get_crtc_scanoutpos(struct drm_device *dev, int pipe,
- int *vpos, int *hpos)
+static int i915_get_crtc_scanoutpos(struct drm_device *dev, int pipe,
+ int *vpos, int *hpos)
{
drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;
u32 vbl = 0, position = 0;
@@ -191,7 +188,7 @@ i915_get_crtc_scanoutpos(struct drm_device *dev, int pipe,
int ret = 0;
if (!i915_pipe_enabled(dev, pipe)) {
- DRM_DEBUG("i915: trying to get scanoutpos for disabled "
+ DRM_DEBUG_DRIVER("trying to get scanoutpos for disabled "
"pipe %c\n", pipe_name(pipe));
return 0;
}
@@ -247,9 +244,10 @@ i915_get_crtc_scanoutpos(struct drm_device *dev, int pipe,
return ret;
}
-static int
-i915_get_vblank_timestamp(struct drm_device *dev, int pipe, int *max_error,
- struct timeval *vblank_time, unsigned flags)
+static int i915_get_vblank_timestamp(struct drm_device *dev, int pipe,
+ int *max_error,
+ struct timeval *vblank_time,
+ unsigned flags)
{
struct drm_i915_private *dev_priv = dev->dev_private;
struct drm_crtc *crtc;
@@ -268,7 +266,7 @@ i915_get_vblank_timestamp(struct drm_device *dev, int pipe, int *max_error,
if (!crtc->enabled) {
#if 0
- DRM_DEBUG("crtc %d is disabled\n", pipe);
+ DRM_DEBUG_KMS("crtc %d is disabled\n", pipe);
#endif
return -EBUSY;
}
@@ -282,19 +280,14 @@ i915_get_vblank_timestamp(struct drm_device *dev, int pipe, int *max_error,
/*
* Handle hotplug events outside the interrupt handler proper.
*/
-static void
-i915_hotplug_work_func(void *context, int pending)
+static void i915_hotplug_work_func(void *context, int pending)
{
drm_i915_private_t *dev_priv = context;
struct drm_device *dev = dev_priv->dev;
- struct drm_mode_config *mode_config;
+ struct drm_mode_config *mode_config = &dev->mode_config;
struct intel_encoder *encoder;
DRM_DEBUG("running encoder hotplug functions\n");
- dev_priv = context;
- dev = dev_priv->dev;
-
- mode_config = &dev->mode_config;
sx_xlock(&mode_config->mutex);
DRM_DEBUG_KMS("running encoder hotplug functions\n");
@@ -350,29 +343,25 @@ static void notify_ring(struct drm_device *dev,
if (ring->obj == NULL)
return;
- CTR2(KTR_DRM, "request_complete %s %d", ring->name,
- ring->get_seqno(ring));
+ CTR2(KTR_DRM, "request_complete %s %d", ring->name, ring->get_seqno(ring));
mtx_lock(&dev_priv->irq_lock);
wakeup(ring);
mtx_unlock(&dev_priv->irq_lock);
-
if (i915_enable_hangcheck) {
dev_priv->hangcheck_count = 0;
callout_schedule(&dev_priv->hangcheck_timer,
- DRM_I915_HANGCHECK_PERIOD);
+ DRM_I915_HANGCHECK_PERIOD);
}
}
-static void
-gen6_pm_rps_work_func(void *arg, int pending)
+static void gen6_pm_rps_work(void *context, int pending)
{
struct drm_device *dev;
- drm_i915_private_t *dev_priv;
- u8 new_delay;
+ drm_i915_private_t *dev_priv = context;
u32 pm_iir, pm_imr;
+ u8 new_delay;
- dev_priv = (drm_i915_private_t *)arg;
dev = dev_priv->dev;
new_delay = dev_priv->cur_delay;
@@ -467,7 +456,7 @@ static void gen6_queue_rps_work(struct drm_i915_private *dev_priv,
taskqueue_enqueue(dev_priv->tq, &dev_priv->rps_task);
}
-static void valleyview_irq_handler(void *arg)
+static void valleyview_irq_handler(DRM_IRQ_ARGS)
{
struct drm_device *dev = (struct drm_device *) arg;
drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;
@@ -518,7 +507,7 @@ static void valleyview_irq_handler(void *arg)
hotplug_status);
if (hotplug_status & dev_priv->hotplug_supported_mask)
taskqueue_enqueue(dev_priv->tq,
- &dev_priv->hotplug_task);
+ &dev_priv->hotplug_task);
I915_WRITE(PORT_HOTPLUG_STAT, hotplug_status);
I915_READ(PORT_HOTPLUG_STAT);
@@ -548,7 +537,8 @@ static void valleyview_irq_handler(void *arg)
I915_WRITE(VLV_IIR, iir);
}
-out:;
+out:
+ return;
}
static void pch_irq_handler(struct drm_device *dev, u32 pch_iir)
@@ -557,42 +547,41 @@ static void pch_irq_handler(struct drm_device *dev, u32 pch_iir)
int pipe;
if (pch_iir & SDE_AUDIO_POWER_MASK)
- DRM_DEBUG("i915: PCH audio power change on port %d\n",
+ DRM_DEBUG_DRIVER("PCH audio power change on port %d\n",
(pch_iir & SDE_AUDIO_POWER_MASK) >>
SDE_AUDIO_POWER_SHIFT);
if (pch_iir & SDE_GMBUS)
- DRM_DEBUG("i915: PCH GMBUS interrupt\n");
+ DRM_DEBUG_DRIVER("PCH GMBUS interrupt\n");
if (pch_iir & SDE_AUDIO_HDCP_MASK)
- DRM_DEBUG("i915: PCH HDCP audio interrupt\n");
+ DRM_DEBUG_DRIVER("PCH HDCP audio interrupt\n");
if (pch_iir & SDE_AUDIO_TRANS_MASK)
- DRM_DEBUG("i915: PCH transcoder audio interrupt\n");
+ DRM_DEBUG_DRIVER("PCH transcoder audio interrupt\n");
if (pch_iir & SDE_POISON)
- DRM_ERROR("i915: PCH poison interrupt\n");
+ DRM_ERROR("PCH poison interrupt\n");
if (pch_iir & SDE_FDI_MASK)
for_each_pipe(pipe)
- DRM_DEBUG(" pipe %c FDI IIR: 0x%08x\n",
+ DRM_DEBUG_DRIVER(" pipe %c FDI IIR: 0x%08x\n",
pipe_name(pipe),
I915_READ(FDI_RX_IIR(pipe)));
if (pch_iir & (SDE_TRANSB_CRC_DONE | SDE_TRANSA_CRC_DONE))
- DRM_DEBUG("i915: PCH transcoder CRC done interrupt\n");
+ DRM_DEBUG_DRIVER("PCH transcoder CRC done interrupt\n");
if (pch_iir & (SDE_TRANSB_CRC_ERR | SDE_TRANSA_CRC_ERR))
- DRM_DEBUG("i915: PCH transcoder CRC error interrupt\n");
+ DRM_DEBUG_DRIVER("PCH transcoder CRC error interrupt\n");
if (pch_iir & SDE_TRANSB_FIFO_UNDER)
- DRM_DEBUG("i915: PCH transcoder B underrun interrupt\n");
+ DRM_DEBUG_DRIVER("PCH transcoder B underrun interrupt\n");
if (pch_iir & SDE_TRANSA_FIFO_UNDER)
- DRM_DEBUG("PCH transcoder A underrun interrupt\n");
+ DRM_DEBUG_DRIVER("PCH transcoder A underrun interrupt\n");
}
-static void
-ivybridge_irq_handler(void *arg)
+static void ivybridge_irq_handler(DRM_IRQ_ARGS)
{
struct drm_device *dev = (struct drm_device *) arg;
drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;
@@ -606,7 +595,7 @@ ivybridge_irq_handler(void *arg)
I915_WRITE(DEIER, de_ier & ~DE_MASTER_IRQ_CONTROL);
POSTING_READ(DEIER);
- gt_iir = I915_READ(GTIIR);
+ gt_iir = I915_READ(GTIIR);
if (gt_iir) {
snb_gt_irq_handler(dev, dev_priv, gt_iir);
I915_WRITE(GTIIR, gt_iir);
@@ -666,10 +655,9 @@ static void ilk_gt_irq_handler(struct drm_device *dev,
notify_ring(dev, &dev_priv->rings[VCS]);
}
-static void
-ironlake_irq_handler(void *arg)
+static void ironlake_irq_handler(DRM_IRQ_ARGS)
{
- struct drm_device *dev = arg;
+ struct drm_device *dev = (struct drm_device *) arg;
drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;
u32 de_iir, gt_iir, de_ier, pch_iir, pm_iir;
u32 hotplug_mask;
@@ -703,9 +691,8 @@ ironlake_irq_handler(void *arg)
else
snb_gt_irq_handler(dev, dev_priv, gt_iir);
- if (de_iir & DE_GSE) {
+ if (de_iir & DE_GSE)
intel_opregion_gse_intr(dev);
- }
if (de_iir & DE_PLANEA_FLIP_DONE) {
intel_prepare_page_flip(dev, 0);
@@ -757,8 +744,7 @@ done:
* Fire an error uevent so userspace can see that a hang or error
* was detected.
*/
-static void
-i915_error_work_func(void *context, int pending)
+static void i915_error_work_func(void *context, int pending)
{
drm_i915_private_t *dev_priv = context;
struct drm_device *dev = dev_priv->dev;
@@ -766,7 +752,7 @@ i915_error_work_func(void *context, int pending)
/* kobject_uevent_env(&dev->primary->kdev.kobj, KOBJ_CHANGE, error_event); */
if (atomic_load_acq_int(&dev_priv->mm.wedged)) {
- DRM_DEBUG("i915: resetting chip\n");
+ DRM_DEBUG_DRIVER("resetting chip\n");
/* kobject_uevent_env(&dev->primary->kdev.kobj, KOBJ_CHANGE, reset_event); */
if (!i915_reset(dev)) {
atomic_store_rel_int(&dev_priv->mm.wedged, 0);
@@ -779,6 +765,420 @@ i915_error_work_func(void *context, int pending)
}
}
+static struct drm_i915_error_object *
+i915_error_object_create(struct drm_i915_private *dev_priv,
+ struct drm_i915_gem_object *src)
+{
+ struct drm_i915_error_object *dst;
+ struct sf_buf *sf;
+ void *d, *s;
+ int page, page_count;
+ u32 reloc_offset;
+
+ if (src == NULL || src->pages == NULL)
+ return NULL;
+
+ page_count = src->base.size / PAGE_SIZE;
+
+ dst = malloc(sizeof(*dst) + page_count * sizeof(u32 *), DRM_I915_GEM,
+ M_NOWAIT);
+ if (dst == NULL)
+ return (NULL);
+
+ reloc_offset = src->gtt_offset;
+ for (page = 0; page < page_count; page++) {
+ d = malloc(PAGE_SIZE, DRM_I915_GEM, M_NOWAIT);
+ if (d == NULL)
+ goto unwind;
+
+ if (reloc_offset < dev_priv->mm.gtt_mappable_end &&
+ src->has_global_gtt_mapping) {
+ /* Simply ignore tiling or any overlapping fence.
+ * It's part of the error state, and this hopefully
+ * captures what the GPU read.
+ */
+ s = pmap_mapdev_attr(src->base.dev->agp->base +
+ reloc_offset, PAGE_SIZE, PAT_WRITE_COMBINING);
+ memcpy(d, s, PAGE_SIZE);
+ pmap_unmapdev((vm_offset_t)s, PAGE_SIZE);
+ } else {
+ drm_clflush_pages(&src->pages[page], 1);
+
+ sched_pin();
+ sf = sf_buf_alloc(src->pages[page], SFB_CPUPRIVATE |
+ SFB_NOWAIT);
+ if (sf != NULL) {
+ s = (void *)(uintptr_t)sf_buf_kva(sf);
+ memcpy(d, s, PAGE_SIZE);
+ sf_buf_free(sf);
+ } else {
+ bzero(d, PAGE_SIZE);
+ strcpy(d, "XXXKIB");
+ }
+ sched_unpin();
+
+ drm_clflush_pages(&src->pages[page], 1);
+ }
+
+ dst->pages[page] = d;
+
+ reloc_offset += PAGE_SIZE;
+ }
+ dst->page_count = page_count;
+ dst->gtt_offset = src->gtt_offset;
+
+ return dst;
+
+unwind:
+ while (page--)
+ free(dst->pages[page], DRM_I915_GEM);
+ free(dst, DRM_I915_GEM);
+ return NULL;
+}
+
+static void
+i915_error_object_free(struct drm_i915_error_object *obj)
+{
+ int page;
+
+ if (obj == NULL)
+ return;
+
+ for (page = 0; page < obj->page_count; page++)
+ free(obj->pages[page], DRM_I915_GEM);
+
+ free(obj, DRM_I915_GEM);
+}
+
+void
+i915_error_state_free(struct drm_i915_error_state *error)
+{
+ int i;
+
+ for (i = 0; i < ARRAY_SIZE(error->ring); i++) {
+ i915_error_object_free(error->ring[i].batchbuffer);
+ i915_error_object_free(error->ring[i].ringbuffer);
+ free(error->ring[i].requests, DRM_I915_GEM);
+ }
+
+ free(error->active_bo, DRM_I915_GEM);
+ free(error->overlay, DRM_I915_GEM);
+ free(error, DRM_I915_GEM);
+}
+
+static void capture_bo(struct drm_i915_error_buffer *err,
+ struct drm_i915_gem_object *obj)
+{
+ err->size = obj->base.size;
+ err->name = obj->base.name;
+ err->seqno = obj->last_rendering_seqno;
+ err->gtt_offset = obj->gtt_offset;
+ err->read_domains = obj->base.read_domains;
+ err->write_domain = obj->base.write_domain;
+ err->fence_reg = obj->fence_reg;
+ err->pinned = 0;
+ if (obj->pin_count > 0)
+ err->pinned = 1;
+ if (obj->user_pin_count > 0)
+ err->pinned = -1;
+ err->tiling = obj->tiling_mode;
+ err->dirty = obj->dirty;
+ err->purgeable = obj->madv != I915_MADV_WILLNEED;
+ err->ring = obj->ring ? obj->ring->id : -1;
+ err->cache_level = obj->cache_level;
+}
+
+static u32 capture_active_bo(struct drm_i915_error_buffer *err,
+ int count, struct list_head *head)
+{
+ struct drm_i915_gem_object *obj;
+ int i = 0;
+
+ list_for_each_entry(obj, head, mm_list) {
+ capture_bo(err++, obj);
+ if (++i == count)
+ break;
+ }
+
+ return i;
+}
+
+static u32 capture_pinned_bo(struct drm_i915_error_buffer *err,
+ int count, struct list_head *head)
+{
+ struct drm_i915_gem_object *obj;
+ int i = 0;
+
+ list_for_each_entry(obj, head, gtt_list) {
+ if (obj->pin_count == 0)
+ continue;
+
+ capture_bo(err++, obj);
+ if (++i == count)
+ break;
+ }
+
+ return i;
+}
+
+static void i915_gem_record_fences(struct drm_device *dev,
+ struct drm_i915_error_state *error)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ int i;
+
+ /* Fences */
+ switch (INTEL_INFO(dev)->gen) {
+ case 7:
+ case 6:
+ for (i = 0; i < 16; i++)
+ error->fence[i] = I915_READ64(FENCE_REG_SANDYBRIDGE_0 + (i * 8));
+ break;
+ case 5:
+ case 4:
+ for (i = 0; i < 16; i++)
+ error->fence[i] = I915_READ64(FENCE_REG_965_0 + (i * 8));
+ break;
+ case 3:
+ if (IS_I945G(dev) || IS_I945GM(dev) || IS_G33(dev))
+ for (i = 0; i < 8; i++)
+ error->fence[i+8] = I915_READ(FENCE_REG_945_8 + (i * 4));
+ case 2:
+ for (i = 0; i < 8; i++)
+ error->fence[i] = I915_READ(FENCE_REG_830_0 + (i * 4));
+ break;
+
+ }
+}
+
+static struct drm_i915_error_object *
+i915_error_first_batchbuffer(struct drm_i915_private *dev_priv,
+ struct intel_ring_buffer *ring)
+{
+ struct drm_i915_gem_object *obj;
+ u32 seqno;
+
+ if (!ring->get_seqno)
+ return NULL;
+
+ seqno = ring->get_seqno(ring);
+ list_for_each_entry(obj, &dev_priv->mm.active_list, mm_list) {
+ if (obj->ring != ring)
+ continue;
+
+ if (i915_seqno_passed(seqno, obj->last_rendering_seqno))
+ continue;
+
+ if ((obj->base.read_domains & I915_GEM_DOMAIN_COMMAND) == 0)
+ continue;
+
+ /* We need to copy these to an anonymous buffer as the simplest
+ * method to avoid being overwritten by userspace.
+ */
+ return i915_error_object_create(dev_priv, obj);
+ }
+
+ return NULL;
+}
+
+static void i915_record_ring_state(struct drm_device *dev,
+ struct drm_i915_error_state *error,
+ struct intel_ring_buffer *ring)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+
+ if (INTEL_INFO(dev)->gen >= 6) {
+ error->fault_reg[ring->id] = I915_READ(RING_FAULT_REG(ring));
+ error->semaphore_mboxes[ring->id][0]
+ = I915_READ(RING_SYNC_0(ring->mmio_base));
+ error->semaphore_mboxes[ring->id][1]
+ = I915_READ(RING_SYNC_1(ring->mmio_base));
+ }
+
+ if (INTEL_INFO(dev)->gen >= 4) {
+ error->faddr[ring->id] = I915_READ(RING_DMA_FADD(ring->mmio_base));
+ error->ipeir[ring->id] = I915_READ(RING_IPEIR(ring->mmio_base));
+ error->ipehr[ring->id] = I915_READ(RING_IPEHR(ring->mmio_base));
+ error->instdone[ring->id] = I915_READ(RING_INSTDONE(ring->mmio_base));
+ error->instps[ring->id] = I915_READ(RING_INSTPS(ring->mmio_base));
+ if (ring->id == RCS) {
+ error->instdone1 = I915_READ(INSTDONE1);
+ error->bbaddr = I915_READ64(BB_ADDR);
+ }
+ } else {
+ error->faddr[ring->id] = I915_READ(DMA_FADD_I8XX);
+ error->ipeir[ring->id] = I915_READ(IPEIR);
+ error->ipehr[ring->id] = I915_READ(IPEHR);
+ error->instdone[ring->id] = I915_READ(INSTDONE);
+ }
+
+ sleepq_lock(ring);
+ error->waiting[ring->id] = sleepq_sleepcnt(ring, 0) != 0;
+ sleepq_release(ring);
+ error->instpm[ring->id] = I915_READ(RING_INSTPM(ring->mmio_base));
+ error->seqno[ring->id] = ring->get_seqno(ring);
+ error->acthd[ring->id] = intel_ring_get_active_head(ring);
+ error->head[ring->id] = I915_READ_HEAD(ring);
+ error->tail[ring->id] = I915_READ_TAIL(ring);
+
+ error->cpu_ring_head[ring->id] = ring->head;
+ error->cpu_ring_tail[ring->id] = ring->tail;
+}
+
+static void i915_gem_record_rings(struct drm_device *dev,
+ struct drm_i915_error_state *error)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ struct intel_ring_buffer *ring;
+ struct drm_i915_gem_request *request;
+ int i, count;
+
+ for_each_ring(ring, dev_priv, i) {
+ i915_record_ring_state(dev, error, ring);
+
+ error->ring[i].batchbuffer =
+ i915_error_first_batchbuffer(dev_priv, ring);
+
+ error->ring[i].ringbuffer =
+ i915_error_object_create(dev_priv, ring->obj);
+
+ count = 0;
+ list_for_each_entry(request, &ring->request_list, list)
+ count++;
+
+ error->ring[i].num_requests = count;
+ error->ring[i].requests =
+ malloc(count*sizeof(struct drm_i915_error_request),
+ DRM_I915_GEM, M_WAITOK);
+ if (error->ring[i].requests == NULL) {
+ error->ring[i].num_requests = 0;
+ continue;
+ }
+
+ count = 0;
+ list_for_each_entry(request, &ring->request_list, list) {
+ struct drm_i915_error_request *erq;
+
+ erq = &error->ring[i].requests[count++];
+ erq->seqno = request->seqno;
+ erq->jiffies = request->emitted_jiffies;
+ erq->tail = request->tail;
+ }
+ }
+}
+
+static void i915_capture_error_state(struct drm_device *dev)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ struct drm_i915_gem_object *obj;
+ struct drm_i915_error_state *error;
+ int i, pipe;
+
+ mtx_lock(&dev_priv->error_lock);
+ error = dev_priv->first_error;
+ mtx_unlock(&dev_priv->error_lock);
+ if (error)
+ return;
+
+ /* Account for pipe specific data like PIPE*STAT */
+ error = malloc(sizeof(*error), DRM_I915_GEM, M_NOWAIT | M_ZERO);
+ if (!error) {
+ DRM_DEBUG_DRIVER("out of memory, not capturing error state\n");
+ return;
+ }
+
+ DRM_INFO("capturing error event; look for more information in sysctl hw.dri.%d.info.i915_error_state\n",
+ dev->sysctl_node_idx);
+
+ refcount_init(&error->ref, 1);
+ error->eir = I915_READ(EIR);
+ error->pgtbl_er = I915_READ(PGTBL_ER);
+
+ if (HAS_PCH_SPLIT(dev))
+ error->ier = I915_READ(DEIER) | I915_READ(GTIER);
+ else if (IS_VALLEYVIEW(dev))
+ error->ier = I915_READ(GTIER) | I915_READ(VLV_IER);
+ else if (IS_GEN2(dev))
+ error->ier = I915_READ16(IER);
+ else
+ error->ier = I915_READ(IER);
+
+ for_each_pipe(pipe)
+ error->pipestat[pipe] = I915_READ(PIPESTAT(pipe));
+
+ if (INTEL_INFO(dev)->gen >= 6) {
+ error->error = I915_READ(ERROR_GEN6);
+ error->done_reg = I915_READ(DONE_REG);
+ }
+
+ i915_gem_record_fences(dev, error);
+ i915_gem_record_rings(dev, error);
+
+ /* Record buffers on the active and pinned lists. */
+ error->active_bo = NULL;
+ error->pinned_bo = NULL;
+
+ i = 0;
+ list_for_each_entry(obj, &dev_priv->mm.active_list, mm_list)
+ i++;
+ error->active_bo_count = i;
+ list_for_each_entry(obj, &dev_priv->mm.gtt_list, mm_list)
+ if (obj->pin_count)
+ i++;
+ error->pinned_bo_count = i - error->active_bo_count;
+
+ error->active_bo = NULL;
+ error->pinned_bo = NULL;
+ if (i) {
+ error->active_bo = malloc(sizeof(*error->active_bo)*i,
+ DRM_I915_GEM, M_NOWAIT);
+ if (error->active_bo)
+ error->pinned_bo =
+ error->active_bo + error->active_bo_count;
+ }
+
+ if (error->active_bo)
+ error->active_bo_count =
+ capture_active_bo(error->active_bo,
+ error->active_bo_count,
+ &dev_priv->mm.active_list);
+
+ if (error->pinned_bo)
+ error->pinned_bo_count =
+ capture_pinned_bo(error->pinned_bo,
+ error->pinned_bo_count,
+ &dev_priv->mm.gtt_list);
+
+ microtime(&error->time);
+
+ error->overlay = intel_overlay_capture_error_state(dev);
+ error->display = intel_display_capture_error_state(dev);
+
+ mtx_lock(&dev_priv->error_lock);
+ if (dev_priv->first_error == NULL) {
+ dev_priv->first_error = error;
+ error = NULL;
+ }
+ mtx_unlock(&dev_priv->error_lock);
+
+ if (error)
+ i915_error_state_free(error);
+}
+
+void i915_destroy_error_state(struct drm_device *dev)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ struct drm_i915_error_state *error;
+
+ mtx_lock(&dev_priv->error_lock);
+ error = dev_priv->first_error;
+ dev_priv->first_error = NULL;
+ mtx_unlock(&dev_priv->error_lock);
+
+ if (error && refcount_release(&error->ref))
+ i915_error_state_free(error);
+}
+
#define pr_err(...) printf(__VA_ARGS__)
static void i915_report_and_clear_eir(struct drm_device *dev)
@@ -928,7 +1328,9 @@ static void i915_pageflip_stall_check(struct drm_device *dev, int pipe)
mtx_lock(&dev->event_lock);
work = intel_crtc->unpin_work;
- if (work == NULL || work->pending || !work->enable_stall_check) {
+ if (work == NULL ||
+ work->pending ||
+ !work->enable_stall_check) {
/* Either the pending flip IRQ arrived, or we're too early. Don't check */
mtx_unlock(&dev->event_lock);
return;
@@ -950,7 +1352,7 @@ static void i915_pageflip_stall_check(struct drm_device *dev, int pipe)
mtx_unlock(&dev->event_lock);
if (stall_detected) {
- DRM_DEBUG("Pageflip stall detected\n");
+ DRM_DEBUG_DRIVER("Pageflip stall detected\n");
intel_prepare_page_flip(dev, intel_crtc->plane);
}
}
@@ -958,8 +1360,7 @@ static void i915_pageflip_stall_check(struct drm_device *dev, int pipe)
/* Called from drm generic code, passed 'crtc' which
* we use as a pipe index
*/
-static int
-i915_enable_vblank(struct drm_device *dev, int pipe)
+static int i915_enable_vblank(struct drm_device *dev, int pipe)
{
drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;
@@ -983,8 +1384,7 @@ i915_enable_vblank(struct drm_device *dev, int pipe)
return 0;
}
-static int
-ironlake_enable_vblank(struct drm_device *dev, int pipe)
+static int ironlake_enable_vblank(struct drm_device *dev, int pipe)
{
drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;
@@ -993,15 +1393,14 @@ ironlake_enable_vblank(struct drm_device *dev, int pipe)
mtx_lock(&dev_priv->irq_lock);
ironlake_enable_display_irq(dev_priv, (pipe == 0) ?
- DE_PIPEA_VBLANK : DE_PIPEB_VBLANK);
+ DE_PIPEA_VBLANK : DE_PIPEB_VBLANK);
mtx_unlock(&dev_priv->irq_lock);
CTR1(KTR_DRM, "ironlake_enable_vblank %d", pipe);
return 0;
}
-static int
-ivybridge_enable_vblank(struct drm_device *dev, int pipe)
+static int ivybridge_enable_vblank(struct drm_device *dev, int pipe)
{
drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;
@@ -1045,8 +1444,7 @@ static int valleyview_enable_vblank(struct drm_device *dev, int pipe)
/* Called from drm generic code, passed 'crtc' which
* we use as a pipe index
*/
-static void
-i915_disable_vblank(struct drm_device *dev, int pipe)
+static void i915_disable_vblank(struct drm_device *dev, int pipe)
{
drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;
@@ -1055,26 +1453,24 @@ i915_disable_vblank(struct drm_device *dev, int pipe)
I915_WRITE(INSTPM, _MASKED_BIT_ENABLE(INSTPM_AGPBUSY_DIS));
i915_disable_pipestat(dev_priv, pipe,
- PIPE_VBLANK_INTERRUPT_ENABLE |
- PIPE_START_VBLANK_INTERRUPT_ENABLE);
+ PIPE_VBLANK_INTERRUPT_ENABLE |
+ PIPE_START_VBLANK_INTERRUPT_ENABLE);
mtx_unlock(&dev_priv->irq_lock);
CTR1(KTR_DRM, "i915_disable_vblank %d", pipe);
}
-static void
-ironlake_disable_vblank(struct drm_device *dev, int pipe)
+static void ironlake_disable_vblank(struct drm_device *dev, int pipe)
{
drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;
mtx_lock(&dev_priv->irq_lock);
ironlake_disable_display_irq(dev_priv, (pipe == 0) ?
- DE_PIPEA_VBLANK : DE_PIPEB_VBLANK);
+ DE_PIPEA_VBLANK : DE_PIPEB_VBLANK);
mtx_unlock(&dev_priv->irq_lock);
CTR1(KTR_DRM, "ironlake_disable_vblank %d", pipe);
}
-static void
-ivybridge_disable_vblank(struct drm_device *dev, int pipe)
+static void ivybridge_disable_vblank(struct drm_device *dev, int pipe)
{
drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;
@@ -1119,7 +1515,8 @@ ring_last_seqno(struct intel_ring_buffer *ring)
static bool i915_hangcheck_ring_idle(struct intel_ring_buffer *ring, bool *err)
{
if (list_empty(&ring->request_list) ||
- i915_seqno_passed(ring->get_seqno(ring), ring_last_seqno(ring))) {
+ i915_seqno_passed(ring->get_seqno(ring),
+ ring_last_seqno(ring))) {
/* Issue a wake-up to catch stuck h/w. */
sleepq_lock(ring);
if (sleepq_sleepcnt(ring, 0) != 0) {
@@ -1184,10 +1581,9 @@ static bool i915_hangcheck_hung(struct drm_device *dev)
* ACTHD. If ACTHD hasn't changed by the time the hangcheck timer elapses
* again, we assume the chip is wedged and try to fix it.
*/
-void
-i915_hangcheck_elapsed(void *context)
+void i915_hangcheck_elapsed(void *data)
{
- struct drm_device *dev = (struct drm_device *)context;
+ struct drm_device *dev = (struct drm_device *)data;
drm_i915_private_t *dev_priv = dev->dev_private;
uint32_t acthd[I915_NUM_RINGS], instdone, instdone1;
struct intel_ring_buffer *ring;
@@ -1244,8 +1640,7 @@ repeat:
/* drm_dma.h hooks
*/
-static void
-ironlake_irq_preinstall(struct drm_device *dev)
+static void ironlake_irq_preinstall(struct drm_device *dev)
{
drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;
@@ -1389,8 +1784,7 @@ static int ironlake_irq_postinstall(struct drm_device *dev)
return 0;
}
-static int
-ivybridge_irq_postinstall(struct drm_device *dev)
+static int ivybridge_irq_postinstall(struct drm_device *dev)
{
drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;
/* enable kind of interrupts always enabled */
@@ -1545,12 +1939,11 @@ static void valleyview_irq_uninstall(struct drm_device *dev)
POSTING_READ(VLV_IER);
}
-static void
-ironlake_irq_uninstall(struct drm_device *dev)
+static void ironlake_irq_uninstall(struct drm_device *dev)
{
drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;
- if (dev_priv == NULL)
+ if (!dev_priv)
return;
I915_WRITE(HWSTAM, 0xffffffff);
@@ -1572,11 +1965,11 @@ static void i8xx_irq_preinstall(struct drm_device * dev)
{
drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;
int pipe;
-
+
atomic_set(&dev_priv->irq_received, 0);
-
- for_each_pipe(pipe)
- I915_WRITE(PIPESTAT(pipe), 0);
+
+ for_each_pipe(pipe)
+ I915_WRITE(PIPESTAT(pipe), 0);
I915_WRITE16(IMR, 0xffff);
I915_WRITE16(IER, 0x0);
POSTING_READ16(IER);
@@ -1611,7 +2004,7 @@ static int i8xx_irq_postinstall(struct drm_device *dev)
return 0;
}
-static void i8xx_irq_handler(void *arg)
+static void i8xx_irq_handler(DRM_IRQ_ARGS)
{
struct drm_device *dev = (struct drm_device *) arg;
drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;
@@ -1786,7 +2179,7 @@ static int i915_irq_postinstall(struct drm_device *dev)
return 0;
}
-static void i915_irq_handler(void *arg)
+static irqreturn_t i915_irq_handler(DRM_IRQ_ARGS)
{
struct drm_device *dev = (struct drm_device *) arg;
drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;
@@ -1843,7 +2236,7 @@ static void i915_irq_handler(void *arg)
hotplug_status);
if (hotplug_status & dev_priv->hotplug_supported_mask)
taskqueue_enqueue(dev_priv->tq,
- &dev_priv->hotplug_task);
+ &dev_priv->hotplug_task);
I915_WRITE(PORT_HOTPLUG_STAT, hotplug_status);
POSTING_READ(PORT_HOTPLUG_STAT);
@@ -2027,7 +2420,7 @@ static int i965_irq_postinstall(struct drm_device *dev)
return 0;
}
-static void i965_irq_handler(void *arg)
+static irqreturn_t i965_irq_handler(DRM_IRQ_ARGS)
{
struct drm_device *dev = (struct drm_device *) arg;
drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;
@@ -2083,7 +2476,7 @@ static void i965_irq_handler(void *arg)
hotplug_status);
if (hotplug_status & dev_priv->hotplug_supported_mask)
taskqueue_enqueue(dev_priv->tq,
- &dev_priv->hotplug_task);
+ &dev_priv->hotplug_task);
I915_WRITE(PORT_HOTPLUG_STAT, hotplug_status);
I915_READ(PORT_HOTPLUG_STAT);
@@ -2169,7 +2562,7 @@ void intel_irq_init(struct drm_device *dev)
dev->dev_private);
TASK_INIT(&dev_priv->error_task, 0, i915_error_work_func,
dev->dev_private);
- TASK_INIT(&dev_priv->rps_task, 0, gen6_pm_rps_work_func,
+ TASK_INIT(&dev_priv->rps_task, 0, gen6_pm_rps_work,
dev->dev_private);
dev->driver->get_vblank_counter = i915_get_vblank_counter;
@@ -2238,424 +2631,3 @@ void intel_irq_init(struct drm_device *dev)
dev->driver->disable_vblank = i915_disable_vblank;
}
}
-
-static struct drm_i915_error_object *
-i915_error_object_create(struct drm_i915_private *dev_priv,
- struct drm_i915_gem_object *src)
-{
- struct drm_i915_error_object *dst;
- struct sf_buf *sf;
- void *d, *s;
- int page, page_count;
- u32 reloc_offset;
-
- if (src == NULL || src->pages == NULL)
- return NULL;
-
- page_count = src->base.size / PAGE_SIZE;
-
- dst = malloc(sizeof(*dst) + page_count * sizeof(u32 *), DRM_I915_GEM,
- M_NOWAIT);
- if (dst == NULL)
- return (NULL);
-
- reloc_offset = src->gtt_offset;
- for (page = 0; page < page_count; page++) {
- d = malloc(PAGE_SIZE, DRM_I915_GEM, M_NOWAIT);
- if (d == NULL)
- goto unwind;
-
- if (reloc_offset < dev_priv->mm.gtt_mappable_end &&
- src->has_global_gtt_mapping) {
- /* Simply ignore tiling or any overlapping fence.
- * It's part of the error state, and this hopefully
- * captures what the GPU read.
- */
- s = pmap_mapdev_attr(src->base.dev->agp->base +
- reloc_offset, PAGE_SIZE, PAT_WRITE_COMBINING);
- memcpy(d, s, PAGE_SIZE);
- pmap_unmapdev((vm_offset_t)s, PAGE_SIZE);
- } else {
- drm_clflush_pages(&src->pages[page], 1);
-
- sched_pin();
- sf = sf_buf_alloc(src->pages[page], SFB_CPUPRIVATE |
- SFB_NOWAIT);
- if (sf != NULL) {
- s = (void *)(uintptr_t)sf_buf_kva(sf);
- memcpy(d, s, PAGE_SIZE);
- sf_buf_free(sf);
- } else {
- bzero(d, PAGE_SIZE);
- strcpy(d, "XXXKIB");
- }
- sched_unpin();
-
- drm_clflush_pages(&src->pages[page], 1);
- }
-
- dst->pages[page] = d;
-
- reloc_offset += PAGE_SIZE;
- }
- dst->page_count = page_count;
- dst->gtt_offset = src->gtt_offset;
-
- return (dst);
-
-unwind:
- while (page--)
- free(dst->pages[page], DRM_I915_GEM);
- free(dst, DRM_I915_GEM);
- return (NULL);
-}
-
-static void
-i915_error_object_free(struct drm_i915_error_object *obj)
-{
- int page;
-
- if (obj == NULL)
- return;
-
- for (page = 0; page < obj->page_count; page++)
- free(obj->pages[page], DRM_I915_GEM);
-
- free(obj, DRM_I915_GEM);
-}
-
-void
-i915_error_state_free(struct drm_i915_error_state *error)
-{
- int i;
-
- for (i = 0; i < ARRAY_SIZE(error->ring); i++) {
- i915_error_object_free(error->ring[i].batchbuffer);
- i915_error_object_free(error->ring[i].ringbuffer);
- free(error->ring[i].requests, DRM_I915_GEM);
- }
-
- free(error->active_bo, DRM_I915_GEM);
- free(error->overlay, DRM_I915_GEM);
- free(error, DRM_I915_GEM);
-}
-
-static void capture_bo(struct drm_i915_error_buffer *err,
- struct drm_i915_gem_object *obj)
-{
- err->size = obj->base.size;
- err->name = obj->base.name;
- err->seqno = obj->last_rendering_seqno;
- err->gtt_offset = obj->gtt_offset;
- err->read_domains = obj->base.read_domains;
- err->write_domain = obj->base.write_domain;
- err->fence_reg = obj->fence_reg;
- err->pinned = 0;
- if (obj->pin_count > 0)
- err->pinned = 1;
- if (obj->user_pin_count > 0)
- err->pinned = -1;
- err->tiling = obj->tiling_mode;
- err->dirty = obj->dirty;
- err->purgeable = obj->madv != I915_MADV_WILLNEED;
- err->ring = obj->ring ? obj->ring->id : -1;
- err->cache_level = obj->cache_level;
-}
-
-static u32 capture_active_bo(struct drm_i915_error_buffer *err,
- int count, struct list_head *head)
-{
- struct drm_i915_gem_object *obj;
- int i = 0;
-
- list_for_each_entry(obj, head, mm_list) {
- capture_bo(err++, obj);
- if (++i == count)
- break;
- }
-
- return i;
-}
-
-static u32 capture_pinned_bo(struct drm_i915_error_buffer *err,
- int count, struct list_head *head)
-{
- struct drm_i915_gem_object *obj;
- int i = 0;
-
- list_for_each_entry(obj, head, gtt_list) {
- if (obj->pin_count == 0)
- continue;
-
- capture_bo(err++, obj);
- if (++i == count)
- break;
- }
-
- return i;
-}
-
-static void
-i915_gem_record_fences(struct drm_device *dev,
- struct drm_i915_error_state *error)
-{
- struct drm_i915_private *dev_priv = dev->dev_private;
- int i;
-
- /* Fences */
- switch (INTEL_INFO(dev)->gen) {
- case 7:
- case 6:
- for (i = 0; i < 16; i++)
- error->fence[i] = I915_READ64(FENCE_REG_SANDYBRIDGE_0 + (i * 8));
- break;
- case 5:
- case 4:
- for (i = 0; i < 16; i++)
- error->fence[i] = I915_READ64(FENCE_REG_965_0 +
- (i * 8));
- break;
- case 3:
- if (IS_I945G(dev) || IS_I945GM(dev) || IS_G33(dev))
- for (i = 0; i < 8; i++)
- error->fence[i+8] = I915_READ(FENCE_REG_945_8 +
- (i * 4));
- case 2:
- for (i = 0; i < 8; i++)
- error->fence[i] = I915_READ(FENCE_REG_830_0 + (i * 4));
- break;
-
- }
-}
-
-static struct drm_i915_error_object *
-i915_error_first_batchbuffer(struct drm_i915_private *dev_priv,
- struct intel_ring_buffer *ring)
-{
- struct drm_i915_gem_object *obj;
- u32 seqno;
-
- if (!ring->get_seqno)
- return (NULL);
-
- seqno = ring->get_seqno(ring);
- list_for_each_entry(obj, &dev_priv->mm.active_list, mm_list) {
- if (obj->ring != ring)
- continue;
-
- if (i915_seqno_passed(seqno, obj->last_rendering_seqno))
- continue;
-
- if ((obj->base.read_domains & I915_GEM_DOMAIN_COMMAND) == 0)
- continue;
-
- /* We need to copy these to an anonymous buffer as the simplest
- * method to avoid being overwritten by userspace.
- */
- return (i915_error_object_create(dev_priv, obj));
- }
-
- return NULL;
-}
-
-static void
-i915_record_ring_state(struct drm_device *dev,
- struct drm_i915_error_state *error,
- struct intel_ring_buffer *ring)
-{
- struct drm_i915_private *dev_priv = dev->dev_private;
-
- if (INTEL_INFO(dev)->gen >= 6) {
- error->fault_reg[ring->id] = I915_READ(RING_FAULT_REG(ring));
- error->semaphore_mboxes[ring->id][0]
- = I915_READ(RING_SYNC_0(ring->mmio_base));
- error->semaphore_mboxes[ring->id][1]
- = I915_READ(RING_SYNC_1(ring->mmio_base));
- }
-
- if (INTEL_INFO(dev)->gen >= 4) {
- error->faddr[ring->id] = I915_READ(RING_DMA_FADD(ring->mmio_base));
- error->ipeir[ring->id] = I915_READ(RING_IPEIR(ring->mmio_base));
- error->ipehr[ring->id] = I915_READ(RING_IPEHR(ring->mmio_base));
- error->instdone[ring->id] = I915_READ(RING_INSTDONE(ring->mmio_base));
- error->instps[ring->id] = I915_READ(RING_INSTPS(ring->mmio_base));
- if (ring->id == RCS) {
- error->instdone1 = I915_READ(INSTDONE1);
- error->bbaddr = I915_READ64(BB_ADDR);
- }
- } else {
- error->faddr[ring->id] = I915_READ(DMA_FADD_I8XX);
- error->ipeir[ring->id] = I915_READ(IPEIR);
- error->ipehr[ring->id] = I915_READ(IPEHR);
- error->instdone[ring->id] = I915_READ(INSTDONE);
- }
-
- sleepq_lock(ring);
- error->waiting[ring->id] = sleepq_sleepcnt(ring, 0) != 0;
- sleepq_release(ring);
- error->instpm[ring->id] = I915_READ(RING_INSTPM(ring->mmio_base));
- error->seqno[ring->id] = ring->get_seqno(ring);
- error->acthd[ring->id] = intel_ring_get_active_head(ring);
- error->head[ring->id] = I915_READ_HEAD(ring);
- error->tail[ring->id] = I915_READ_TAIL(ring);
-
- error->cpu_ring_head[ring->id] = ring->head;
- error->cpu_ring_tail[ring->id] = ring->tail;
-}
-
-static void
-i915_gem_record_rings(struct drm_device *dev,
- struct drm_i915_error_state *error)
-{
- struct drm_i915_private *dev_priv = dev->dev_private;
- struct intel_ring_buffer *ring;
- struct drm_i915_gem_request *request;
- int i, count;
-
- for_each_ring(ring, dev_priv, i) {
- i915_record_ring_state(dev, error, ring);
-
- error->ring[i].batchbuffer =
- i915_error_first_batchbuffer(dev_priv, ring);
-
- error->ring[i].ringbuffer =
- i915_error_object_create(dev_priv, ring->obj);
-
- count = 0;
- list_for_each_entry(request, &ring->request_list, list)
- count++;
-
- error->ring[i].num_requests = count;
- error->ring[i].requests = malloc(count *
- sizeof(struct drm_i915_error_request), DRM_I915_GEM,
- M_WAITOK);
- if (error->ring[i].requests == NULL) {
- error->ring[i].num_requests = 0;
- continue;
- }
-
- count = 0;
- list_for_each_entry(request, &ring->request_list, list) {
- struct drm_i915_error_request *erq;
-
- erq = &error->ring[i].requests[count++];
- erq->seqno = request->seqno;
- erq->jiffies = request->emitted_jiffies;
- erq->tail = request->tail;
- }
- }
-}
-
-static void
-i915_capture_error_state(struct drm_device *dev)
-{
- struct drm_i915_private *dev_priv = dev->dev_private;
- struct drm_i915_gem_object *obj;
- struct drm_i915_error_state *error;
- int i, pipe;
-
- mtx_lock(&dev_priv->error_lock);
- error = dev_priv->first_error;
- mtx_unlock(&dev_priv->error_lock);
- if (error != NULL)
- return;
-
- /* Account for pipe specific data like PIPE*STAT */
- error = malloc(sizeof(*error), DRM_I915_GEM, M_NOWAIT | M_ZERO);
- if (error == NULL) {
- DRM_DEBUG("out of memory, not capturing error state\n");
- return;
- }
-
- DRM_INFO("capturing error event; look for more information in "
- "sysctl hw.dri.%d.info.i915_error_state\n", dev->sysctl_node_idx);
-
- refcount_init(&error->ref, 1);
- error->eir = I915_READ(EIR);
- error->pgtbl_er = I915_READ(PGTBL_ER);
-
- if (HAS_PCH_SPLIT(dev))
- error->ier = I915_READ(DEIER) | I915_READ(GTIER);
- else if (IS_VALLEYVIEW(dev))
- error->ier = I915_READ(GTIER) | I915_READ(VLV_IER);
- else if (IS_GEN2(dev))
- error->ier = I915_READ16(IER);
- else
- error->ier = I915_READ(IER);
-
- for_each_pipe(pipe)
- error->pipestat[pipe] = I915_READ(PIPESTAT(pipe));
-
- if (INTEL_INFO(dev)->gen >= 6) {
- error->error = I915_READ(ERROR_GEN6);
- error->done_reg = I915_READ(DONE_REG);
- }
-
- i915_gem_record_fences(dev, error);
- i915_gem_record_rings(dev, error);
-
- /* Record buffers on the active and pinned lists. */
- error->active_bo = NULL;
- error->pinned_bo = NULL;
-
- i = 0;
- list_for_each_entry(obj, &dev_priv->mm.active_list, mm_list)
- i++;
- error->active_bo_count = i;
- list_for_each_entry(obj, &dev_priv->mm.gtt_list, mm_list)
- if (obj->pin_count)
- i++;
- error->pinned_bo_count = i - error->active_bo_count;
-
- error->active_bo = NULL;
- error->pinned_bo = NULL;
- if (i) {
- error->active_bo = malloc(sizeof(*error->active_bo) * i,
- DRM_I915_GEM, M_NOWAIT);
- if (error->active_bo)
- error->pinned_bo = error->active_bo +
- error->active_bo_count;
- }
-
- if (error->active_bo)
- error->active_bo_count =
- capture_active_bo(error->active_bo,
- error->active_bo_count,
- &dev_priv->mm.active_list);
-
- if (error->pinned_bo)
- error->pinned_bo_count =
- capture_pinned_bo(error->pinned_bo,
- error->pinned_bo_count,
- &dev_priv->mm.gtt_list);
-
- microtime(&error->time);
-
- error->overlay = intel_overlay_capture_error_state(dev);
- error->display = intel_display_capture_error_state(dev);
-
- mtx_lock(&dev_priv->error_lock);
- if (dev_priv->first_error == NULL) {
- dev_priv->first_error = error;
- error = NULL;
- }
- mtx_unlock(&dev_priv->error_lock);
-
- if (error != NULL)
- i915_error_state_free(error);
-}
-
-void
-i915_destroy_error_state(struct drm_device *dev)
-{
- struct drm_i915_private *dev_priv = dev->dev_private;
- struct drm_i915_error_state *error;
-
- mtx_lock(&dev_priv->error_lock);
- error = dev_priv->first_error;
- dev_priv->first_error = NULL;
- mtx_unlock(&dev_priv->error_lock);
-
- if (error != NULL && refcount_release(&error->ref))
- i915_error_state_free(error);
-}
diff --git a/sys/dev/drm2/i915/intel_crt.c b/sys/dev/drm2/i915/intel_crt.c
index 5f52bfd..ef6bf4c 100644
--- a/sys/dev/drm2/i915/intel_crt.c
+++ b/sys/dev/drm2/i915/intel_crt.c
@@ -498,16 +498,16 @@ static int intel_crt_get_modes(struct drm_connector *connector)
struct drm_device *dev = connector->dev;
struct drm_i915_private *dev_priv = dev->dev_private;
int ret;
- device_t iic;
+ device_t i2c;
- iic = intel_gmbus_get_adapter(dev_priv, dev_priv->crt_ddc_pin);
- ret = intel_ddc_get_modes(connector, iic);
+ i2c = intel_gmbus_get_adapter(dev_priv, dev_priv->crt_ddc_pin);
+ ret = intel_ddc_get_modes(connector, i2c);
if (ret || !IS_G4X(dev))
return ret;
/* Try to probe digital port for output in DVI-I -> VGA mode. */
- iic = intel_gmbus_get_adapter(dev_priv, GMBUS_PORT_DPB);
- return intel_ddc_get_modes(connector, iic);
+ i2c = intel_gmbus_get_adapter(dev_priv, GMBUS_PORT_DPB);
+ return intel_ddc_get_modes(connector, i2c);
}
static int intel_crt_set_property(struct drm_connector *connector,
@@ -522,8 +522,9 @@ static void intel_crt_reset(struct drm_connector *connector)
struct drm_device *dev = connector->dev;
struct intel_crt *crt = intel_attached_crt(connector);
- if (HAS_PCH_SPLIT(dev))
+ if (HAS_PCH_SPLIT(dev)) {
crt->force_hotplug_required = 1;
+ }
}
/*
@@ -596,6 +597,7 @@ void intel_crt_init(struct drm_device *dev)
return;
crt = malloc(sizeof(struct intel_crt), DRM_MEM_KMS, M_WAITOK | M_ZERO);
+
intel_connector = malloc(sizeof(struct intel_connector), DRM_MEM_KMS,
M_WAITOK | M_ZERO);
diff --git a/sys/dev/drm2/i915/intel_display.c b/sys/dev/drm2/i915/intel_display.c
index 93b94be..b360380 100644
--- a/sys/dev/drm2/i915/intel_display.c
+++ b/sys/dev/drm2/i915/intel_display.c
@@ -929,7 +929,8 @@ static void assert_pll(struct drm_i915_private *dev_priv,
/* For ILK+ */
static void assert_pch_pll(struct drm_i915_private *dev_priv,
- struct intel_crtc *intel_crtc, bool state)
+ struct intel_crtc *intel_crtc,
+ bool state)
{
int reg;
u32 val;
@@ -1174,6 +1175,24 @@ static void assert_transcoder_disabled(struct drm_i915_private *dev_priv,
pipe_name(pipe));
}
+static bool dp_pipe_enabled(struct drm_i915_private *dev_priv,
+ enum pipe pipe, u32 port_sel, u32 val)
+{
+ if ((val & DP_PORT_EN) == 0)
+ return false;
+
+ if (HAS_PCH_CPT(dev_priv->dev)) {
+ u32 trans_dp_ctl_reg = TRANS_DP_CTL(pipe);
+ u32 trans_dp_ctl = I915_READ(trans_dp_ctl_reg);
+ if ((trans_dp_ctl & TRANS_DP_PORT_SEL_MASK) != port_sel)
+ return false;
+ } else {
+ if ((val & DP_PIPE_MASK) != (pipe << 30))
+ return false;
+ }
+ return true;
+}
+
static bool hdmi_pipe_enabled(struct drm_i915_private *dev_priv,
enum pipe pipe, u32 val)
{
@@ -1221,24 +1240,6 @@ static bool adpa_pipe_enabled(struct drm_i915_private *dev_priv,
return true;
}
-static bool dp_pipe_enabled(struct drm_i915_private *dev_priv,
- enum pipe pipe, u32 port_sel, u32 val)
-{
- if ((val & DP_PORT_EN) == 0)
- return false;
-
- if (HAS_PCH_CPT(dev_priv->dev)) {
- u32 trans_dp_ctl_reg = TRANS_DP_CTL(pipe);
- u32 trans_dp_ctl = I915_READ(trans_dp_ctl_reg);
- if ((trans_dp_ctl & TRANS_DP_PORT_SEL_MASK) != port_sel)
- return false;
- } else {
- if ((val & DP_PIPE_MASK) != (pipe << 30))
- return false;
- }
- return true;
-}
-
static void assert_pch_dp_disabled(struct drm_i915_private *dev_priv,
enum pipe pipe, int reg, u32 port_sel)
{
@@ -1357,16 +1358,13 @@ intel_sbi_write(struct drm_i915_private *dev_priv, u16 reg, u32 value)
{
mtx_lock(&dev_priv->dpio_lock);
- if (wait_for((I915_READ(SBI_CTL_STAT) & SBI_READY) == 0,
- 100)) {
+ if (wait_for((I915_READ(SBI_CTL_STAT) & SBI_READY) == 0, 100)) {
DRM_ERROR("timeout waiting for SBI to become ready\n");
goto out_unlock;
}
- I915_WRITE(SBI_ADDR,
- (reg << 16));
- I915_WRITE(SBI_DATA,
- value);
+ I915_WRITE(SBI_ADDR, (reg << 16));
+ I915_WRITE(SBI_DATA, value);
I915_WRITE(SBI_CTL_STAT,
SBI_BUSY |
SBI_CTL_OP_CRWR);
@@ -1388,14 +1386,12 @@ intel_sbi_read(struct drm_i915_private *dev_priv, u16 reg)
value = 0;
mtx_lock(&dev_priv->dpio_lock);
- if (wait_for((I915_READ(SBI_CTL_STAT) & SBI_READY) == 0,
- 100)) {
+ if (wait_for((I915_READ(SBI_CTL_STAT) & SBI_READY) == 0, 100)) {
DRM_ERROR("timeout waiting for SBI to become ready\n");
goto out_unlock;
}
- I915_WRITE(SBI_ADDR,
- (reg << 16));
+ I915_WRITE(SBI_ADDR, (reg << 16));
I915_WRITE(SBI_CTL_STAT,
SBI_BUSY |
SBI_CTL_OP_CRRD);
@@ -1913,7 +1909,7 @@ static int i9xx_update_plane(struct drm_crtc *crtc, struct drm_framebuffer *fb,
I915_WRITE(DSPADDR(plane), Start + Offset);
POSTING_READ(reg);
- return (0);
+ return 0;
}
static int ironlake_update_plane(struct drm_crtc *crtc,
@@ -2029,7 +2025,7 @@ intel_finish_fb(struct drm_framebuffer *old_fb)
msleep(&obj->pending_flip, &dev->event_lock,
0, "915flp", 0);
}
- mtx_unlock(&dev->event_lock);
+ mtx_unlock(&dev->event_lock);
/* Big Hammer, we also need to ensure that any pending
* MI_WAIT_FOR_EVENT inside a user batch buffer on the
@@ -2042,6 +2038,7 @@ intel_finish_fb(struct drm_framebuffer *old_fb)
dev_priv->mm.interruptible = false;
ret = i915_gem_object_finish_gpu(obj);
dev_priv->mm.interruptible = was_interruptible;
+
return ret;
}
@@ -2738,8 +2735,8 @@ static void lpt_program_iclkip(struct drm_crtc *crtc)
/* Disable SSCCTL */
intel_sbi_write(dev_priv, SBI_SSCCTL6,
- intel_sbi_read(dev_priv, SBI_SSCCTL6) |
- SBI_SSCCTL_DISABLE);
+ intel_sbi_read(dev_priv, SBI_SSCCTL6) |
+ SBI_SSCCTL_DISABLE);
/* 20MHz is a corner case which is out of range for the 7-bit divisor */
if (crtc->mode.clock == 20000) {
@@ -2790,25 +2787,18 @@ static void lpt_program_iclkip(struct drm_crtc *crtc)
temp |= SBI_SSCDIVINTPHASE_DIR(phasedir);
temp |= SBI_SSCDIVINTPHASE_PROPAGATE;
- intel_sbi_write(dev_priv,
- SBI_SSCDIVINTPHASE6,
- temp);
+ intel_sbi_write(dev_priv, SBI_SSCDIVINTPHASE6, temp);
/* Program SSCAUXDIV */
temp = intel_sbi_read(dev_priv, SBI_SSCAUXDIV6);
temp &= ~SBI_SSCAUXDIV_FINALDIV2SEL(1);
temp |= SBI_SSCAUXDIV_FINALDIV2SEL(auxdiv);
- intel_sbi_write(dev_priv,
- SBI_SSCAUXDIV6,
- temp);
-
+ intel_sbi_write(dev_priv, SBI_SSCAUXDIV6, temp);
/* Enable modulator and associated divider */
temp = intel_sbi_read(dev_priv, SBI_SSCCTL6);
temp &= ~SBI_SSCCTL_DISABLE;
- intel_sbi_write(dev_priv,
- SBI_SSCCTL6,
- temp);
+ intel_sbi_write(dev_priv, SBI_SSCCTL6, temp);
/* Wait for initialization time */
DELAY(24);
@@ -3053,10 +3043,11 @@ static void ironlake_crtc_enable(struct drm_crtc *crtc)
is_pch_port = intel_crtc_driving_pch(crtc);
- if (is_pch_port)
+ if (is_pch_port) {
ironlake_fdi_pll_enable(crtc);
- else
+ } else {
ironlake_fdi_disable(crtc);
+ }
/* Enable panel fitting for LVDS */
if (dev_priv->pch_pf_size &&
@@ -3687,7 +3678,7 @@ static bool intel_choose_pipe_bpp_dither(struct drm_crtc *crtc,
display_bpc = min(display_bpc, bpc);
DRM_DEBUG_KMS("setting pipe bpc to %d (max display bpc %d)\n",
- bpc, display_bpc);
+ bpc, display_bpc);
*pipe_bpp = display_bpc * 3;
@@ -4609,8 +4600,8 @@ static int ironlake_crtc_mode_set(struct drm_crtc *crtc,
if (pll == NULL) {
DRM_DEBUG_DRIVER("failed to find PLL for pipe %d\n",
pipe);
- return -EINVAL;
- }
+ return -EINVAL;
+ }
} else
intel_put_pch_pll(intel_crtc);
@@ -5309,8 +5300,9 @@ static struct drm_display_mode load_detect_mode = {
static int
intel_framebuffer_create(struct drm_device *dev,
- struct drm_mode_fb_cmd2 *mode_cmd, struct drm_i915_gem_object *obj,
- struct drm_framebuffer **res)
+ struct drm_mode_fb_cmd2 *mode_cmd,
+ struct drm_i915_gem_object *obj,
+ struct drm_framebuffer **res)
{
struct intel_framebuffer *intel_fb;
int ret;
@@ -5320,11 +5312,11 @@ intel_framebuffer_create(struct drm_device *dev,
if (ret) {
drm_gem_object_unreference_unlocked(&obj->base);
free(intel_fb, DRM_MEM_KMS);
- return (ret);
+ return ret;
}
*res = &intel_fb->base;
- return (0);
+ return 0;
}
static u32
@@ -5343,16 +5335,17 @@ intel_framebuffer_size_for_mode(struct drm_display_mode *mode, int bpp)
static int
intel_framebuffer_create_for_mode(struct drm_device *dev,
- struct drm_display_mode *mode, int depth, int bpp,
- struct drm_framebuffer **res)
+ struct drm_display_mode *mode,
+ int depth, int bpp,
+ struct drm_framebuffer **res)
{
struct drm_i915_gem_object *obj;
- struct drm_mode_fb_cmd2 mode_cmd;
+ struct drm_mode_fb_cmd2 mode_cmd = { 0 };
obj = i915_gem_alloc_object(dev,
intel_framebuffer_size_for_mode(mode, bpp));
if (obj == NULL)
- return (-ENOMEM);
+ return -ENOMEM;
mode_cmd.width = mode->hdisplay;
mode_cmd.height = mode->vdisplay;
@@ -5360,12 +5353,13 @@ intel_framebuffer_create_for_mode(struct drm_device *dev,
bpp);
mode_cmd.pixel_format = drm_mode_legacy_fb_format(bpp, depth);
- return (intel_framebuffer_create(dev, &mode_cmd, obj, res));
+ return intel_framebuffer_create(dev, &mode_cmd, obj, res);
}
static int
mode_fits_in_fbdev(struct drm_device *dev,
- struct drm_display_mode *mode, struct drm_framebuffer **res)
+ struct drm_display_mode *mode,
+ struct drm_framebuffer **res)
{
struct drm_i915_private *dev_priv = dev->dev_private;
struct drm_i915_gem_object *obj;
@@ -5373,29 +5367,29 @@ mode_fits_in_fbdev(struct drm_device *dev,
if (dev_priv->fbdev == NULL) {
*res = NULL;
- return (0);
+ return 0;
}
obj = dev_priv->fbdev->ifb.obj;
if (obj == NULL) {
*res = NULL;
- return (0);
+ return 0;
}
fb = &dev_priv->fbdev->ifb.base;
if (fb->pitches[0] < intel_framebuffer_pitch_for_width(mode->hdisplay,
fb->bits_per_pixel)) {
*res = NULL;
- return (0);
+ return 0;
}
if (obj->base.size < mode->vdisplay * fb->pitches[0]) {
*res = NULL;
- return (0);
+ return 0;
}
*res = fb;
- return (0);
+ return 0;
}
bool intel_get_load_detect_pipe(struct intel_encoder *intel_encoder,
@@ -5409,7 +5403,8 @@ bool intel_get_load_detect_pipe(struct intel_encoder *intel_encoder,
struct drm_crtc *crtc = NULL;
struct drm_device *dev = encoder->dev;
struct drm_framebuffer *old_fb;
- int i = -1, r;
+ int i = -1;
+ int ret;
DRM_DEBUG_KMS("[CONNECTOR:%d:%s], [ENCODER:%d:%s]\n",
connector->base.id, drm_get_connector_name(connector),
@@ -5487,15 +5482,15 @@ bool intel_get_load_detect_pipe(struct intel_encoder *intel_encoder,
* not even exist) or that it is large enough to satisfy the
* requested mode.
*/
- r = mode_fits_in_fbdev(dev, mode, &crtc->fb);
+ ret = mode_fits_in_fbdev(dev, mode, &crtc->fb);
if (crtc->fb == NULL) {
DRM_DEBUG_KMS("creating tmp fb for load-detection\n");
- r = intel_framebuffer_create_for_mode(dev, mode, 24, 32,
+ ret = intel_framebuffer_create_for_mode(dev, mode, 24, 32,
&crtc->fb);
old->release_fb = crtc->fb;
} else
DRM_DEBUG_KMS("reusing fbdev for load-detection framebuffer\n");
- if (r != 0) {
+ if (ret) {
DRM_DEBUG_KMS("failed to allocate framebuffer for load-detection\n");
crtc->fb = old_fb;
return false;
@@ -5511,7 +5506,6 @@ bool intel_get_load_detect_pipe(struct intel_encoder *intel_encoder,
/* let the connector get through one full cycle before testing */
intel_wait_for_vblank(dev, intel_crtc->pipe);
-
return true;
}
@@ -5755,7 +5749,7 @@ static void intel_decrease_pllclock(struct drm_crtc *crtc)
if (!HAS_PIPE_CXSR(dev) && intel_crtc->lowfreq_avail) {
int pipe = intel_crtc->pipe;
int dpll_reg = DPLL(pipe);
- u32 dpll;
+ int dpll;
DRM_DEBUG_DRIVER("downclocking LVDS\n");
@@ -5769,6 +5763,7 @@ static void intel_decrease_pllclock(struct drm_crtc *crtc)
if (!(dpll & DISPLAY_RATE_SELECT_FPA1))
DRM_DEBUG_DRIVER("failed to downclock LVDS!\n");
}
+
}
/**
@@ -5881,16 +5876,16 @@ static void intel_crtc_destroy(struct drm_crtc *crtc)
static void intel_unpin_work_fn(void *arg, int pending)
{
- struct intel_unpin_work *work = arg;
- struct drm_device *dev;
+ struct intel_unpin_work *work =
+ arg;
+ struct drm_device *dev = work->dev;
- dev = work->dev;
DRM_LOCK(dev);
intel_unpin_fb_obj(work->old_fb_obj);
drm_gem_object_unreference(&work->pending_flip_obj->base);
drm_gem_object_unreference(&work->old_fb_obj->base);
- intel_update_fbc(work->dev);
+ intel_update_fbc(dev);
DRM_UNLOCK(dev);
free(work, DRM_MEM_KMS);
}
@@ -6250,7 +6245,7 @@ static int intel_crtc_page_flip(struct drm_crtc *crtc,
free(work, DRM_MEM_KMS);
drm_vblank_put(dev, intel_crtc->pipe);
- DRM_DEBUG("flip queue: crtc already busy\n");
+ DRM_DEBUG_DRIVER("flip queue: crtc already busy\n");
return -EBUSY;
}
intel_crtc->unpin_work = work;
@@ -6705,8 +6700,7 @@ int intel_framebuffer_init(struct drm_device *dev,
case DRM_FORMAT_VYUY:
break;
default:
- DRM_DEBUG_KMS("unsupported pixel format %u\n",
- mode_cmd->pixel_format);
+ DRM_DEBUG("unsupported pixel format %u\n", mode_cmd->pixel_format);
return -EINVAL;
}
@@ -6723,17 +6717,18 @@ int intel_framebuffer_init(struct drm_device *dev,
static int
intel_user_framebuffer_create(struct drm_device *dev,
- struct drm_file *filp, struct drm_mode_fb_cmd2 *mode_cmd,
- struct drm_framebuffer **res)
+ struct drm_file *filp,
+ struct drm_mode_fb_cmd2 *mode_cmd,
+ struct drm_framebuffer **res)
{
struct drm_i915_gem_object *obj;
obj = to_intel_bo(drm_gem_object_lookup(dev, filp,
mode_cmd->handles[0]));
if (&obj->base == NULL)
- return (-ENOENT);
+ return -ENOENT;
- return (intel_framebuffer_create(dev, mode_cmd, obj, res));
+ return intel_framebuffer_create(dev, mode_cmd, obj, res);
}
static const struct drm_mode_config_funcs intel_mode_funcs = {
@@ -6942,7 +6937,7 @@ static void i915_disable_vga(struct drm_device *dev)
#endif
outb(VGA_SR_INDEX, SR01);
sr1 = inb(VGA_SR_DATA);
- outb(VGA_SR_DATA, sr1 | 1 << 5);
+ outb(VGA_SR_DATA, sr1 | 1<<5);
#if 0
vga_put(dev->pdev, VGA_RSRC_LEGACY_IO);
#endif
@@ -7061,6 +7056,7 @@ void intel_modeset_cleanup(struct drm_device *dev)
intel_unregister_dsm_handler();
#endif
+
list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) {
/* Skip inactive CRTCs */
if (!crtc->fb)
@@ -7088,7 +7084,6 @@ void intel_modeset_cleanup(struct drm_device *dev)
/* Disable the irq before mode object teardown, for the irq might
* enqueue unpin/hotplug work. */
drm_irq_uninstall(dev);
-
if (taskqueue_cancel(dev_priv->tq, &dev_priv->hotplug_task, NULL))
taskqueue_drain(dev_priv->tq, &dev_priv->hotplug_task);
if (taskqueue_cancel(dev_priv->tq, &dev_priv->rps_task, NULL))
@@ -7127,11 +7122,9 @@ void intel_connector_attach_encoder(struct intel_connector *connector,
*/
int intel_modeset_vga_set_state(struct drm_device *dev, bool state)
{
- struct drm_i915_private *dev_priv;
device_t bridge_dev;
u16 gmch_ctrl;
- dev_priv = dev->dev_private;
bridge_dev = intel_gtt_get_bridge_device();
gmch_ctrl = pci_read_config(bridge_dev, INTEL_GMCH_CTRL, 2);
if (state)
diff --git a/sys/dev/drm2/i915/intel_pm.c b/sys/dev/drm2/i915/intel_pm.c
index 5a8153c..90f513d 100644
--- a/sys/dev/drm2/i915/intel_pm.c
+++ b/sys/dev/drm2/i915/intel_pm.c
@@ -602,7 +602,7 @@ static void i915_ironlake_get_mem_freq(struct drm_device *dev)
dev_priv->mem_freq = 1600;
break;
default:
- DRM_DEBUG("unknown memory frequency 0x%02x\n",
+ DRM_DEBUG_DRIVER("unknown memory frequency 0x%02x\n",
ddrpll & 0xff);
dev_priv->mem_freq = 0;
break;
@@ -633,7 +633,7 @@ static void i915_ironlake_get_mem_freq(struct drm_device *dev)
dev_priv->fsb_freq = 6400;
break;
default:
- DRM_DEBUG("unknown fsb frequency 0x%04x\n",
+ DRM_DEBUG_DRIVER("unknown fsb frequency 0x%04x\n",
csipll & 0x3ff);
dev_priv->fsb_freq = 0;
break;
@@ -2706,7 +2706,7 @@ unsigned long i915_chipset_val(struct drm_i915_private *dev_priv)
* zero and give the hw a chance to gather more samples.
*/
if (diff1 <= 10)
- return (dev_priv->chipset_power);
+ return dev_priv->chipset_power;
count1 = I915_READ(DMIEC);
count2 = I915_READ(DDREC);
@@ -2739,7 +2739,7 @@ unsigned long i915_chipset_val(struct drm_i915_private *dev_priv)
dev_priv->last_time1 = now;
dev_priv->chipset_power = ret;
- return (ret);
+ return ret;
}
unsigned long i915_mch_val(struct drm_i915_private *dev_priv)
@@ -3192,6 +3192,18 @@ void intel_init_emon(struct drm_device *dev)
dev_priv->corr = (lcfuse & LCFUSE_HIV_MASK);
}
+static void ibx_init_clock_gating(struct drm_device *dev)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+
+ /*
+ * On Ibex Peak and Cougar Point, we need to disable clock
+ * gating for the panel power sequencer or it will fail to
+ * start up when no ports are active.
+ */
+ I915_WRITE(SOUTH_DSPCLK_GATE_D, PCH_DPLSUNIT_CLOCK_GATE_DISABLE);
+}
+
static void ironlake_init_clock_gating(struct drm_device *dev)
{
struct drm_i915_private *dev_priv = dev->dev_private;
@@ -3261,6 +3273,24 @@ static void ironlake_init_clock_gating(struct drm_device *dev)
_3D_CHICKEN2_WM_READ_PIPELINED);
}
+static void cpt_init_clock_gating(struct drm_device *dev)
+{
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ int pipe;
+
+ /*
+ * On Ibex Peak and Cougar Point, we need to disable clock
+ * gating for the panel power sequencer or it will fail to
+ * start up when no ports are active.
+ */
+ I915_WRITE(SOUTH_DSPCLK_GATE_D, PCH_DPLSUNIT_CLOCK_GATE_DISABLE);
+ I915_WRITE(SOUTH_CHICKEN2, I915_READ(SOUTH_CHICKEN2) |
+ DPLS_EDP_PPS_FIX_DIS);
+ /* Without this, mode sets may fail silently on FDI */
+ for_each_pipe(pipe)
+ I915_WRITE(TRANS_CHICKEN2(pipe), TRANS_AUTOTRAIN_GEN_STALL_DIS);
+}
+
static void gen6_init_clock_gating(struct drm_device *dev)
{
struct drm_i915_private *dev_priv = dev->dev_private;
@@ -3510,36 +3540,6 @@ static void i830_init_clock_gating(struct drm_device *dev)
I915_WRITE(DSPCLK_GATE_D, OVRUNIT_CLOCK_GATE_DISABLE);
}
-static void ibx_init_clock_gating(struct drm_device *dev)
-{
- struct drm_i915_private *dev_priv = dev->dev_private;
-
- /*
- * On Ibex Peak and Cougar Point, we need to disable clock
- * gating for the panel power sequencer or it will fail to
- * start up when no ports are active.
- */
- I915_WRITE(SOUTH_DSPCLK_GATE_D, PCH_DPLSUNIT_CLOCK_GATE_DISABLE);
-}
-
-static void cpt_init_clock_gating(struct drm_device *dev)
-{
- struct drm_i915_private *dev_priv = dev->dev_private;
- int pipe;
-
- /*
- * On Ibex Peak and Cougar Point, we need to disable clock
- * gating for the panel power sequencer or it will fail to
- * start up when no ports are active.
- */
- I915_WRITE(SOUTH_DSPCLK_GATE_D, PCH_DPLSUNIT_CLOCK_GATE_DISABLE);
- I915_WRITE(SOUTH_CHICKEN2, I915_READ(SOUTH_CHICKEN2) |
- DPLS_EDP_PPS_FIX_DIS);
- /* Without this, mode sets may fail silently on FDI */
- for_each_pipe(pipe)
- I915_WRITE(TRANS_CHICKEN2(pipe), TRANS_AUTOTRAIN_GEN_STALL_DIS);
-}
-
void intel_init_clock_gating(struct drm_device *dev)
{
struct drm_i915_private *dev_priv = dev->dev_private;
diff --git a/sys/dev/drm2/i915/intel_ringbuffer.c b/sys/dev/drm2/i915/intel_ringbuffer.c
index 2251220..e0abb83 100644
--- a/sys/dev/drm2/i915/intel_ringbuffer.c
+++ b/sys/dev/drm2/i915/intel_ringbuffer.c
@@ -99,11 +99,11 @@ gen2_render_ring_flush(struct intel_ring_buffer *ring,
static int
gen4_render_ring_flush(struct intel_ring_buffer *ring,
- u32 invalidate_domains,
- u32 flush_domains)
+ u32 invalidate_domains,
+ u32 flush_domains)
{
struct drm_device *dev = ring->dev;
- uint32_t cmd;
+ u32 cmd;
int ret;
/*
@@ -268,7 +268,7 @@ gen6_render_ring_flush(struct intel_ring_buffer *ring,
}
static void ring_write_tail(struct intel_ring_buffer *ring,
- uint32_t value)
+ u32 value)
{
drm_i915_private_t *dev_priv = ring->dev->dev_private;
I915_WRITE_TAIL(ring, value);
@@ -277,7 +277,7 @@ static void ring_write_tail(struct intel_ring_buffer *ring,
u32 intel_ring_get_active_head(struct intel_ring_buffer *ring)
{
drm_i915_private_t *dev_priv = ring->dev->dev_private;
- uint32_t acthd_reg = INTEL_INFO(ring->dev)->gen >= 4 ?
+ u32 acthd_reg = INTEL_INFO(ring->dev)->gen >= 4 ?
RING_ACTHD(ring->mmio_base) : ACTHD;
return I915_READ(acthd_reg);
@@ -287,7 +287,7 @@ static int init_ring_common(struct intel_ring_buffer *ring)
{
drm_i915_private_t *dev_priv = ring->dev->dev_private;
struct drm_i915_gem_object *obj = ring->obj;
- uint32_t head;
+ u32 head;
/* Stop the ring if it's running. */
I915_WRITE_CTL(ring, 0);
@@ -300,7 +300,7 @@ static int init_ring_common(struct intel_ring_buffer *ring)
/* G45 ring initialization fails to reset head to zero */
if (head != 0) {
- DRM_DEBUG("%s head not reset to zero "
+ DRM_DEBUG_KMS("%s head not reset to zero "
"ctl %08x head %08x tail %08x start %08x\n",
ring->name,
I915_READ_CTL(ring),
@@ -410,6 +410,7 @@ cleanup_pipe_control(struct intel_ring_buffer *ring)
return;
obj = pc->obj;
+
pmap_qremove((vm_offset_t)pc->cpu_page, 1);
kva_free((uintptr_t)pc->cpu_page, PAGE_SIZE);
i915_gem_object_unpin(obj);
@@ -439,7 +440,6 @@ static int init_render_ring(struct intel_ring_buffer *ring)
return ret;
}
-
if (IS_GEN6(dev)) {
/* From the Sandybridge PRM, volume 1 part 3, page 24:
* "If this bit is set, STCunit will have LRA as replacement
@@ -473,8 +473,8 @@ static void render_ring_cleanup(struct intel_ring_buffer *ring)
static void
update_mboxes(struct intel_ring_buffer *ring,
- u32 seqno,
- u32 mmio_offset)
+ u32 seqno,
+ u32 mmio_offset)
{
intel_ring_emit(ring, MI_SEMAPHORE_MBOX |
MI_SEMAPHORE_GLOBAL_GTT |
@@ -643,7 +643,7 @@ gen6_ring_get_seqno(struct intel_ring_buffer *ring)
return intel_read_status_page(ring, I915_GEM_HWS_INDEX);
}
-static uint32_t
+static u32
ring_get_seqno(struct intel_ring_buffer *ring)
{
if (ring->status_page.page_addr == NULL)
@@ -651,7 +651,7 @@ ring_get_seqno(struct intel_ring_buffer *ring)
return intel_read_status_page(ring, I915_GEM_HWS_INDEX);
}
-static uint32_t
+static u32
pc_render_get_seqno(struct intel_ring_buffer *ring)
{
struct pipe_control *pc = ring->private;
@@ -764,7 +764,7 @@ void intel_ring_setup_status_page(struct intel_ring_buffer *ring)
{
struct drm_device *dev = ring->dev;
drm_i915_private_t *dev_priv = dev->dev_private;
- uint32_t mmio = 0;
+ u32 mmio = 0;
/* The ring status page addresses are no longer next to the rest of
* the ring registers as of gen7.
@@ -793,8 +793,8 @@ void intel_ring_setup_status_page(struct intel_ring_buffer *ring)
static int
bsd_ring_flush(struct intel_ring_buffer *ring,
- uint32_t invalidate_domains,
- uint32_t flush_domains)
+ u32 invalidate_domains,
+ u32 flush_domains)
{
int ret;
@@ -871,7 +871,8 @@ gen6_ring_put_irq(struct intel_ring_buffer *ring)
}
static int
-i965_dispatch_execbuffer(struct intel_ring_buffer *ring, u32 offset, u32 length)
+i965_dispatch_execbuffer(struct intel_ring_buffer *ring,
+ u32 offset, u32 length)
{
int ret;
@@ -910,7 +911,7 @@ i830_dispatch_execbuffer(struct intel_ring_buffer *ring,
static int
i915_dispatch_execbuffer(struct intel_ring_buffer *ring,
- u32 offset, u32 len)
+ u32 offset, u32 len)
{
int ret;
@@ -974,7 +975,7 @@ static int init_status_page(struct intel_ring_buffer *ring)
memset(ring->status_page.page_addr, 0, PAGE_SIZE);
intel_ring_setup_status_page(ring);
- DRM_DEBUG("i915: init_status_page %s hws offset: 0x%08x\n",
+ DRM_DEBUG_DRIVER("%s hws offset: 0x%08x\n",
ring->name, ring->status_page.gfx_addr);
return 0;
@@ -1078,28 +1079,6 @@ void intel_cleanup_ring_buffer(struct intel_ring_buffer *ring)
cleanup_status_page(ring);
}
-static int intel_wrap_ring_buffer(struct intel_ring_buffer *ring)
-{
- uint32_t *virt;
- int rem = ring->size - ring->tail;
-
- if (ring->space < rem) {
- int ret = intel_wait_ring_buffer(ring, rem);
- if (ret)
- return ret;
- }
-
- virt = (uint32_t *)((char *)ring->virtual_start + ring->tail);
- rem /= 4;
- while (rem--)
- *virt++ = MI_NOOP;
-
- ring->tail = 0;
- ring->space = ring_space(ring);
-
- return 0;
-}
-
static int intel_ring_wait_seqno(struct intel_ring_buffer *ring, u32 seqno)
{
struct drm_i915_private *dev_priv = ring->dev->dev_private;
@@ -1222,6 +1201,28 @@ int intel_wait_ring_buffer(struct intel_ring_buffer *ring, int n)
return -EBUSY;
}
+static int intel_wrap_ring_buffer(struct intel_ring_buffer *ring)
+{
+ uint32_t *virt;
+ int rem = ring->size - ring->tail;
+
+ if (ring->space < rem) {
+ int ret = intel_wait_ring_buffer(ring, rem);
+ if (ret)
+ return ret;
+ }
+
+ virt = (uint32_t *)((char *)ring->virtual_start + ring->tail);
+ rem /= 4;
+ while (rem--)
+ *virt++ = MI_NOOP;
+
+ ring->tail = 0;
+ ring->space = ring_space(ring);
+
+ return 0;
+}
+
int intel_ring_begin(struct intel_ring_buffer *ring,
int num_dwords)
{
@@ -1283,7 +1284,7 @@ static void gen6_bsd_ring_write_tail(struct intel_ring_buffer *ring,
}
static int gen6_ring_flush(struct intel_ring_buffer *ring,
- uint32_t invalidate, uint32_t flush)
+ u32 invalidate, u32 flush)
{
uint32_t cmd;
int ret;
@@ -1305,7 +1306,7 @@ static int gen6_ring_flush(struct intel_ring_buffer *ring,
static int
gen6_ring_dispatch_execbuffer(struct intel_ring_buffer *ring,
- uint32_t offset, uint32_t len)
+ u32 offset, u32 len)
{
int ret;
@@ -1326,7 +1327,7 @@ gen6_ring_dispatch_execbuffer(struct intel_ring_buffer *ring,
static int blt_ring_flush(struct intel_ring_buffer *ring,
u32 invalidate, u32 flush)
{
- u32 cmd;
+ uint32_t cmd;
int ret;
ret = intel_ring_begin(ring, 4);
diff --git a/sys/dev/drm2/i915/intel_ringbuffer.h b/sys/dev/drm2/i915/intel_ringbuffer.h
index 93bdf24..e5e52ae 100644
--- a/sys/dev/drm2/i915/intel_ringbuffer.h
+++ b/sys/dev/drm2/i915/intel_ringbuffer.h
@@ -81,15 +81,15 @@ struct intel_ring_buffer {
int (*init)(struct intel_ring_buffer *ring);
void (*write_tail)(struct intel_ring_buffer *ring,
- uint32_t value);
+ u32 value);
int (*flush)(struct intel_ring_buffer *ring,
- uint32_t invalidate_domains,
- uint32_t flush_domains);
+ u32 invalidate_domains,
+ u32 flush_domains);
int (*add_request)(struct intel_ring_buffer *ring,
uint32_t *seqno);
uint32_t (*get_seqno)(struct intel_ring_buffer *ring);
int (*dispatch_execbuffer)(struct intel_ring_buffer *ring,
- uint32_t offset, uint32_t length);
+ u32 offset, u32 length);
#define I915_DISPATCH_SECURE 0x1
#define I915_DISPATCH_PINNED 0x2
void (*cleanup)(struct intel_ring_buffer *ring);
@@ -155,7 +155,7 @@ intel_ring_flag(struct intel_ring_buffer *ring)
return 1 << ring->id;
}
-static inline uint32_t
+static inline u32
intel_ring_sync_index(struct intel_ring_buffer *ring,
struct intel_ring_buffer *other)
{
@@ -180,7 +180,7 @@ intel_read_status_page(struct intel_ring_buffer *ring,
{
/* Ensure that the compiler doesn't optimize away the load. */
__compiler_membar();
- return (atomic_load_acq_32(ring->status_page.page_addr + reg));
+ return atomic_load_acq_32(ring->status_page.page_addr + reg);
}
void intel_cleanup_ring_buffer(struct intel_ring_buffer *ring);
@@ -221,7 +221,6 @@ static inline u32 intel_ring_get_tail(struct intel_ring_buffer *ring)
void i915_trace_irq_get(struct intel_ring_buffer *ring, uint32_t seqno);
/* DRI warts */
-int intel_render_ring_init_dri(struct drm_device *dev, uint64_t start,
- uint32_t size);
+int intel_render_ring_init_dri(struct drm_device *dev, u64 start, u32 size);
#endif /* _INTEL_RINGBUFFER_H_ */
diff --git a/sys/dev/etherswitch/arswitch/arswitch_8327.c b/sys/dev/etherswitch/arswitch/arswitch_8327.c
index e727416..96c2282 100644
--- a/sys/dev/etherswitch/arswitch/arswitch_8327.c
+++ b/sys/dev/etherswitch/arswitch/arswitch_8327.c
@@ -66,6 +66,14 @@
#include "miibus_if.h"
#include "etherswitch_if.h"
+/*
+ * AR8327 TODO:
+ *
+ * There should be a default hardware setup hint set for the default
+ * switch config. Otherwise the default is "all ports in one vlangroup",
+ * which means both CPU ports can see each other and that will quickly
+ * lead to traffic storms/loops.
+ */
static int
ar8327_vlan_op(struct arswitch_softc *sc, uint32_t op, uint32_t vid,
@@ -897,8 +905,8 @@ ar8327_reset_vlans(struct arswitch_softc *sc)
/*
* If dot1q - set pvid; dot1q, etc.
*/
- sc->vid[0] = 1;
if (sc->vlan_mode == ETHERSWITCH_VLAN_DOT1Q) {
+ sc->vid[0] = 1;
for (i = 0; i < AR8327_NUM_PORTS; i++) {
/* Each port - pvid 1 */
sc->hal.arswitch_vlan_set_pvid(sc, i, sc->vid[0]);
diff --git a/sys/dev/etherswitch/e6000sw/e6000sw.c b/sys/dev/etherswitch/e6000sw/e6000sw.c
new file mode 100644
index 0000000..e598607
--- /dev/null
+++ b/sys/dev/etherswitch/e6000sw/e6000sw.c
@@ -0,0 +1,976 @@
+/*-
+ * Copyright (c) 2015 Semihalf
+ * Copyright (c) 2015 Stormshield
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#include <sys/types.h>
+#include <sys/param.h>
+#include <sys/systm.h>
+#include <sys/sockio.h>
+#include <sys/kernel.h>
+#include <sys/kthread.h>
+#include <sys/socket.h>
+#include <sys/module.h>
+#include <sys/errno.h>
+#include <sys/bus.h>
+#include <sys/conf.h>
+#include <sys/uio.h>
+#include <sys/fcntl.h>
+
+#include <net/if.h>
+#include <net/if_media.h>
+#include <net/if_types.h>
+
+#include <machine/bus.h>
+#include <machine/resource.h>
+
+#include <arm/mv/mvwin.h>
+#include <arm/mv/mvreg.h>
+#include <arm/mv/mvvar.h>
+
+#include <dev/etherswitch/etherswitch.h>
+#include <dev/etherswitch/mdio.h>
+#include <dev/mii/mii.h>
+#include <dev/mii/miivar.h>
+#include <dev/mge/if_mgevar.h>
+
+#include "e6000swreg.h"
+#include "etherswitch_if.h"
+#include "miibus_if.h"
+#include "mdio_if.h"
+
+MALLOC_DECLARE(M_E6000SW);
+MALLOC_DEFINE(M_E6000SW, "e6000sw", "e6000sw switch");
+
+#define E6000SW_LOCK(_sc) \
+ sx_xlock(&(_sc)->sx)
+#define E6000SW_UNLOCK(_sc) \
+ sx_unlock(&(_sc)->sx)
+#define E6000SW_LOCK_ASSERT(_sc, _what) \
+ sx_assert(&(_sc)->sx, (_what))
+#define E6000SW_TRYLOCK(_sc) \
+ sx_tryxlock(&(_sc)->sx)
+
+typedef struct e6000sw_softc {
+ device_t dev;
+
+ struct sx sx;
+ struct ifnet *ifp[E6000SW_NUM_PHYS];
+ char *ifname[E6000SW_NUM_PHYS];
+ device_t miibus[E6000SW_NUM_PHYS];
+ struct mii_data *mii[E6000SW_NUM_PHYS];
+ struct callout tick_callout;
+
+ uint32_t cpuports_mask;
+
+ int vid[E6000SW_NUM_VGROUPS];
+ int members[E6000SW_NUM_VGROUPS];
+ int vgroup[E6000SW_NUM_PORTS];
+} e6000sw_softc_t;
+
+static etherswitch_info_t etherswitch_info = {
+ .es_nports = E6000SW_NUM_PORTS,
+ .es_nvlangroups = E6000SW_NUM_VGROUPS,
+ .es_name = "Marvell 6000 series switch"
+};
+
+static void e6000sw_identify(driver_t *driver, device_t parent);
+static int e6000sw_probe(device_t dev);
+static int e6000sw_attach(device_t dev);
+static int e6000sw_detach(device_t dev);
+static int e6000sw_readphy(device_t dev, int phy, int reg);
+static int e6000sw_writephy(device_t dev, int phy, int reg, int data);
+static etherswitch_info_t* e6000sw_getinfo(device_t dev);
+static void e6000sw_lock(device_t dev);
+static void e6000sw_unlock(device_t dev);
+static int e6000sw_getport(device_t dev, etherswitch_port_t *p);
+static int e6000sw_setport(device_t dev, etherswitch_port_t *p);
+static int e6000sw_readreg_wrapper(device_t dev, int addr_reg);
+static int e6000sw_writereg_wrapper(device_t dev, int addr_reg, int val);
+static int e6000sw_readphy_wrapper(device_t dev, int phy, int reg);
+static int e6000sw_writephy_wrapper(device_t dev, int phy, int reg, int data);
+static int e6000sw_getvgroup_wrapper(device_t dev, etherswitch_vlangroup_t *vg);
+static int e6000sw_setvgroup_wrapper(device_t dev, etherswitch_vlangroup_t *vg);
+static int e6000sw_setvgroup(device_t dev, etherswitch_vlangroup_t *vg);
+static int e6000sw_getvgroup(device_t dev, etherswitch_vlangroup_t *vg);
+static void e6000sw_setup(device_t dev, e6000sw_softc_t *sc);
+static void e6000sw_port_vlan_conf(e6000sw_softc_t *sc);
+static void e6000sw_tick(void *arg);
+static void e6000sw_set_atustat(device_t dev, e6000sw_softc_t *sc, int bin,
+ int flag);
+static int e6000sw_atu_flush(device_t dev, e6000sw_softc_t *sc, int flag);
+static __inline void e6000sw_writereg(e6000sw_softc_t *sc, int addr, int reg,
+ int val);
+static __inline uint32_t e6000sw_readreg(e6000sw_softc_t *sc, int addr,
+ int reg);
+static int e6000sw_ifmedia_upd(struct ifnet *ifp);
+static void e6000sw_ifmedia_sts(struct ifnet *ifp, struct ifmediareq *ifmr);
+static int e6000sw_atu_mac_table(device_t dev, e6000sw_softc_t *sc, struct
+ atu_opt *atu, int flag);
+static int e6000sw_get_pvid(e6000sw_softc_t *sc, int port, int *pvid);
+static int e6000sw_set_pvid(e6000sw_softc_t *sc, int port, int pvid);
+static __inline int e6000sw_cpuport(e6000sw_softc_t *sc, int port);
+static __inline struct mii_data *e6000sw_miiforphy(e6000sw_softc_t *sc,
+ unsigned int phy);
+
+static struct proc *e6000sw_kproc;
+
+static device_method_t e6000sw_methods[] = {
+ /* device interface */
+ DEVMETHOD(device_identify, e6000sw_identify),
+ DEVMETHOD(device_probe, e6000sw_probe),
+ DEVMETHOD(device_attach, e6000sw_attach),
+ DEVMETHOD(device_detach, e6000sw_detach),
+
+ /* bus interface */
+ DEVMETHOD(bus_add_child, device_add_child_ordered),
+
+ /* mii interface */
+ DEVMETHOD(miibus_readreg, e6000sw_readphy),
+ DEVMETHOD(miibus_writereg, e6000sw_writephy),
+
+ /* etherswitch interface */
+ DEVMETHOD(etherswitch_getinfo, e6000sw_getinfo),
+ DEVMETHOD(etherswitch_lock, e6000sw_lock),
+ DEVMETHOD(etherswitch_unlock, e6000sw_unlock),
+ DEVMETHOD(etherswitch_getport, e6000sw_getport),
+ DEVMETHOD(etherswitch_setport, e6000sw_setport),
+ DEVMETHOD(etherswitch_readreg, e6000sw_readreg_wrapper),
+ DEVMETHOD(etherswitch_writereg, e6000sw_writereg_wrapper),
+ DEVMETHOD(etherswitch_readphyreg, e6000sw_readphy_wrapper),
+ DEVMETHOD(etherswitch_writephyreg, e6000sw_writephy_wrapper),
+ DEVMETHOD(etherswitch_setvgroup, e6000sw_setvgroup_wrapper),
+ DEVMETHOD(etherswitch_getvgroup, e6000sw_getvgroup_wrapper),
+
+ DEVMETHOD_END
+};
+
+static devclass_t e6000sw_devclass;
+
+DEFINE_CLASS_0(e6000sw, e6000sw_driver, e6000sw_methods,
+ sizeof(e6000sw_softc_t));
+
+DRIVER_MODULE(e6000sw, mdio, e6000sw_driver, e6000sw_devclass, 0, 0);
+DRIVER_MODULE(etherswitch, e6000sw, etherswitch_driver, etherswitch_devclass, 0,
+ 0);
+DRIVER_MODULE(miibus, e6000sw, miibus_driver, miibus_devclass, 0, 0);
+MODULE_DEPEND(e6000sw, mdio, 1, 1, 1);
+
+static void
+e6000sw_identify(driver_t *driver, device_t parent)
+{
+
+ if (device_find_child(parent, "e6000sw", -1) == NULL)
+ BUS_ADD_CHILD(parent, 0, "e6000sw", -1);
+}
+
+static int
+e6000sw_probe(device_t dev)
+{
+ e6000sw_softc_t *sc;
+ const char *description;
+ unsigned int id;
+
+ sc = device_get_softc(dev);
+ bzero(sc, sizeof(e6000sw_softc_t));
+ sc->dev = dev;
+ /* Lock is necessary due to assertions. */
+ sx_init(&sc->sx, "e6000sw");
+ E6000SW_LOCK(sc);
+
+ id = e6000sw_readreg(sc, REG_PORT(0), SWITCH_ID);
+
+ switch (id & 0xfff0) {
+ case 0x3520:
+ description = "Marvell 88E6352";
+ break;
+ case 0x1720:
+ description = "Marvell 88E6172";
+ break;
+ case 0x1760:
+ description = "Marvell 88E6176";
+ break;
+ default:
+ E6000SW_UNLOCK(sc);
+ sx_destroy(&sc->sx);
+ device_printf(dev, "Unrecognized device.\n");
+ return (ENXIO);
+ }
+
+ device_set_desc(dev, description);
+
+ E6000SW_UNLOCK(sc);
+
+ return (BUS_PROBE_DEFAULT);
+}
+
+static int
+e6000sw_attach(device_t dev)
+{
+ e6000sw_softc_t *sc;
+ int phy, err, port;
+ char name[IFNAMSIZ];
+
+ err = 0;
+ sc = device_get_softc(dev);
+ E6000SW_LOCK(sc);
+ sc->cpuports_mask = E6000SW_CPUPORTS_MASK;
+ for (port = 0; port < E6000SW_NUM_PORTS; port++)
+ sc->vgroup[port] = E6000SW_PORT_NO_VGROUP;
+ e6000sw_setup(dev, sc);
+
+ snprintf(name, IFNAMSIZ, "%sport", device_get_nameunit(sc->dev));
+ for (phy = 0; phy < E6000SW_NUM_PHYS; phy++) {
+ sc->ifp[phy] = if_alloc(IFT_ETHER);
+ if (sc->ifp[phy] == NULL)
+ goto out_fail;
+ sc->ifp[phy]->if_softc = sc;
+ sc->ifp[phy]->if_flags |= IFF_UP | IFF_BROADCAST |
+ IFF_DRV_RUNNING | IFF_SIMPLEX;
+ sc->ifname[phy] = malloc(strlen(name) + 1, M_E6000SW, M_WAITOK);
+ if (sc->ifname[phy] == NULL)
+ goto out_fail;
+ bcopy(name, sc->ifname[phy], strlen(name) + 1);
+ if_initname(sc->ifp[phy], sc->ifname[phy], phy);
+ err = mii_attach(sc->dev, &sc->miibus[phy], sc->ifp[phy],
+ e6000sw_ifmedia_upd, e6000sw_ifmedia_sts, BMSR_DEFCAPMASK,
+ phy, MII_OFFSET_ANY, 0);
+ if (err != 0) {
+ device_printf(sc->dev,
+ "attaching PHY %d failed\n",
+ phy);
+ goto out_fail;
+ }
+ sc->mii[phy] = device_get_softc(sc->miibus[phy]);
+ }
+ E6000SW_UNLOCK(sc);
+
+ bus_generic_probe(dev);
+ bus_enumerate_hinted_children(dev);
+ bus_generic_attach(dev);
+
+ kproc_create(e6000sw_tick, sc, &e6000sw_kproc, 0, 0,
+ "e6000sw tick kproc");
+
+ return (0);
+
+out_fail:
+ e6000sw_detach(dev);
+
+ return (ENXIO);
+}
+
+static __inline void
+e6000sw_poll_done(e6000sw_softc_t *sc)
+{
+
+ while (e6000sw_readreg(sc, REG_GLOBAL2, PHY_CMD) &
+ (1 << PHY_CMD_SMI_BUSY))
+ continue;
+}
+
+
+/*
+ * PHY registers are paged. Put page index in reg 22 (accessible from every
+ * page), then access specific register.
+ */
+static int
+e6000sw_readphy(device_t dev, int phy, int reg)
+{
+ e6000sw_softc_t *sc;
+ uint32_t val;
+
+ sc = device_get_softc(dev);
+ val = 0;
+
+ if (phy >= E6000SW_NUM_PHYS || reg >= E6000SW_NUM_PHY_REGS) {
+ device_printf(dev, "Wrong register address.\n");
+ return (EINVAL);
+ }
+
+ E6000SW_LOCK_ASSERT(sc, SA_XLOCKED);
+
+ e6000sw_poll_done(sc);
+ val |= 1 << PHY_CMD_SMI_BUSY;
+ val |= PHY_CMD_MODE_MDIO << PHY_CMD_MODE;
+ val |= PHY_CMD_OPCODE_READ << PHY_CMD_OPCODE;
+ val |= (reg << PHY_CMD_REG_ADDR) & PHY_CMD_REG_ADDR_MASK;
+ val |= (phy << PHY_CMD_DEV_ADDR) & PHY_CMD_DEV_ADDR_MASK;
+ e6000sw_writereg(sc, REG_GLOBAL2, SMI_PHY_CMD_REG, val);
+ e6000sw_poll_done(sc);
+ val = e6000sw_readreg(sc, REG_GLOBAL2, SMI_PHY_DATA_REG)
+ & PHY_DATA_MASK;
+
+ return (val);
+}
+
+static int
+e6000sw_writephy(device_t dev, int phy, int reg, int data)
+{
+ e6000sw_softc_t *sc;
+ uint32_t val;
+
+ sc = device_get_softc(dev);
+ val = 0;
+
+ if (phy >= E6000SW_NUM_PHYS || reg >= E6000SW_NUM_PHY_REGS) {
+ device_printf(dev, "Wrong register address.\n");
+ return (EINVAL);
+ }
+
+ E6000SW_LOCK_ASSERT(sc, SA_XLOCKED);
+
+ e6000sw_poll_done(sc);
+ val |= PHY_CMD_MODE_MDIO << PHY_CMD_MODE;
+ val |= 1 << PHY_CMD_SMI_BUSY;
+ val |= PHY_CMD_OPCODE_WRITE << PHY_CMD_OPCODE;
+ val |= (reg << PHY_CMD_REG_ADDR) & PHY_CMD_REG_ADDR_MASK;
+ val |= (phy << PHY_CMD_DEV_ADDR) & PHY_CMD_DEV_ADDR_MASK;
+ e6000sw_writereg(sc, REG_GLOBAL2, SMI_PHY_DATA_REG,
+ data & PHY_DATA_MASK);
+ e6000sw_writereg(sc, REG_GLOBAL2, SMI_PHY_CMD_REG, val);
+ e6000sw_poll_done(sc);
+
+ return (0);
+}
+
+static int
+e6000sw_detach(device_t dev)
+{
+ int phy;
+ e6000sw_softc_t *sc;
+
+ sc = device_get_softc(dev);
+ bus_generic_detach(dev);
+ sx_destroy(&sc->sx);
+ for (phy = 0; phy < E6000SW_NUM_PHYS; phy++) {
+ if (sc->miibus[phy] != NULL)
+ device_delete_child(dev, sc->miibus[phy]);
+ if (sc->ifp[phy] != NULL)
+ if_free(sc->ifp[phy]);
+ if (sc->ifname[phy] != NULL)
+ free(sc->ifname[phy], M_E6000SW);
+ }
+
+ return (0);
+}
+
+static etherswitch_info_t*
+e6000sw_getinfo(device_t dev)
+{
+
+ return (&etherswitch_info);
+}
+
+static void
+e6000sw_lock(device_t dev)
+{
+ struct e6000sw_softc *sc;
+
+ sc = device_get_softc(dev);
+
+ E6000SW_LOCK_ASSERT(sc, SA_UNLOCKED);
+ E6000SW_LOCK(sc);
+}
+
+static void
+e6000sw_unlock(device_t dev)
+{
+ struct e6000sw_softc *sc;
+
+ sc = device_get_softc(dev);
+
+ E6000SW_LOCK_ASSERT(sc, SA_XLOCKED);
+ E6000SW_UNLOCK(sc);
+}
+
+static int
+e6000sw_getport(device_t dev, etherswitch_port_t *p)
+{
+ struct mii_data *mii;
+ int err;
+ struct ifmediareq *ifmr;
+
+ err = 0;
+ e6000sw_softc_t *sc = device_get_softc(dev);
+ E6000SW_LOCK_ASSERT(sc, SA_UNLOCKED);
+
+ E6000SW_LOCK(sc);
+
+ if (p->es_port >= E6000SW_NUM_PORTS ||
+ p->es_port < 0) {
+ err = EINVAL;
+ goto out;
+ }
+
+ e6000sw_get_pvid(sc, p->es_port, &p->es_pvid);
+
+ if (e6000sw_cpuport(sc, p->es_port)) {
+ p->es_flags |= ETHERSWITCH_PORT_CPU;
+ ifmr = &p->es_ifmr;
+ ifmr->ifm_status = IFM_ACTIVE | IFM_AVALID;
+ ifmr->ifm_count = 0;
+ ifmr->ifm_current = ifmr->ifm_active =
+ IFM_ETHER | IFM_1000_T | IFM_FDX;
+ ifmr->ifm_mask = 0;
+ } else {
+ mii = e6000sw_miiforphy(sc, p->es_port);
+ err = ifmedia_ioctl(mii->mii_ifp, &p->es_ifr,
+ &mii->mii_media, SIOCGIFMEDIA);
+ }
+
+out:
+ E6000SW_UNLOCK(sc);
+ return (err);
+}
+
+static int
+e6000sw_setport(device_t dev, etherswitch_port_t *p)
+{
+ e6000sw_softc_t *sc;
+ int err;
+ struct mii_data *mii;
+
+ err = 0;
+ sc = device_get_softc(dev);
+ E6000SW_LOCK_ASSERT(sc, SA_UNLOCKED);
+
+ E6000SW_LOCK(sc);
+
+ if (p->es_port >= E6000SW_NUM_PORTS ||
+ p->es_port < 0) {
+ err = EINVAL;
+ goto out;
+ }
+
+ if (p->es_pvid != 0)
+ e6000sw_set_pvid(sc, p->es_port, p->es_pvid);
+ if (!e6000sw_cpuport(sc, p->es_port)) {
+ mii = e6000sw_miiforphy(sc, p->es_port);
+ err = ifmedia_ioctl(mii->mii_ifp, &p->es_ifr, &mii->mii_media,
+ SIOCSIFMEDIA);
+ }
+
+out:
+ E6000SW_UNLOCK(sc);
+ return (err);
+}
+
+/*
+ * Registers in this switch are divided into sections, specified in
+ * documentation. So as to access any of them, section index and reg index
+ * is necessary. etherswitchcfg uses only one variable, so indexes were
+ * compressed into addr_reg: 32 * section_index + reg_index.
+ */
+static int
+e6000sw_readreg_wrapper(device_t dev, int addr_reg)
+{
+
+ if ((addr_reg > (REG_GLOBAL2 * 32 + REG_NUM_MAX)) ||
+ (addr_reg < (REG_PORT(0) * 32))) {
+ device_printf(dev, "Wrong register address.\n");
+ return (EINVAL);
+ }
+
+ return (e6000sw_readreg(device_get_softc(dev), addr_reg / 32,
+ addr_reg % 32));
+}
+
+static int
+e6000sw_writereg_wrapper(device_t dev, int addr_reg, int val)
+{
+
+ if ((addr_reg > (REG_GLOBAL2 * 32 + REG_NUM_MAX)) ||
+ (addr_reg < (REG_PORT(0) * 32))) {
+ device_printf(dev, "Wrong register address.\n");
+ return (EINVAL);
+ }
+ e6000sw_writereg(device_get_softc(dev), addr_reg / 5,
+ addr_reg % 32, val);
+
+ return (0);
+}
+
+/*
+ * These wrappers are necessary because PHY accesses from etherswitchcfg
+ * need to be synchronized with locks, while miibus PHY accesses do not.
+ */
+static int
+e6000sw_readphy_wrapper(device_t dev, int phy, int reg)
+{
+ e6000sw_softc_t *sc;
+ int ret;
+
+ sc = device_get_softc(dev);
+ E6000SW_LOCK_ASSERT(sc, SA_UNLOCKED);
+
+ E6000SW_LOCK(sc);
+ ret = e6000sw_readphy(dev, phy, reg);
+ E6000SW_UNLOCK(sc);
+
+ return (ret);
+}
+
+static int
+e6000sw_writephy_wrapper(device_t dev, int phy, int reg, int data)
+{
+ e6000sw_softc_t *sc;
+ int ret;
+
+ sc = device_get_softc(dev);
+ E6000SW_LOCK_ASSERT(sc, SA_UNLOCKED);
+
+ E6000SW_LOCK(sc);
+ ret = e6000sw_writephy(dev, phy, reg, data);
+ E6000SW_UNLOCK(sc);
+
+ return (ret);
+}
+
+/*
+ * setvgroup/getvgroup called from etherswitchfcg need to be locked,
+ * while internal calls do not.
+ */
+static int
+e6000sw_setvgroup_wrapper(device_t dev, etherswitch_vlangroup_t *vg)
+{
+ e6000sw_softc_t *sc;
+ int ret;
+
+ sc = device_get_softc(dev);
+ E6000SW_LOCK_ASSERT(sc, SA_UNLOCKED);
+
+ E6000SW_LOCK(sc);
+ ret = e6000sw_setvgroup(dev, vg);
+ E6000SW_UNLOCK(sc);
+
+ return (ret);
+}
+
+static int
+e6000sw_getvgroup_wrapper(device_t dev, etherswitch_vlangroup_t *vg)
+{
+ e6000sw_softc_t *sc;
+ int ret;
+
+ sc = device_get_softc(dev);
+ E6000SW_LOCK_ASSERT(sc, SA_UNLOCKED);
+
+ E6000SW_LOCK(sc);
+ ret = e6000sw_getvgroup(dev, vg);
+ E6000SW_UNLOCK(sc);
+
+ return (ret);
+}
+
+static __inline void
+e6000sw_flush_port(e6000sw_softc_t *sc, int port)
+{
+ uint32_t reg;
+
+ reg = e6000sw_readreg(sc, REG_PORT(port),
+ PORT_VLAN_MAP);
+ reg &= ~PORT_VLAN_MAP_TABLE_MASK;
+ reg &= ~PORT_VLAN_MAP_FID_MASK;
+ e6000sw_writereg(sc, REG_PORT(port),
+ PORT_VLAN_MAP, reg);
+ if (sc->vgroup[port] != E6000SW_PORT_NO_VGROUP) {
+ /*
+ * If port belonged somewhere, owner-group
+ * should have its entry removed.
+ */
+ sc->members[sc->vgroup[port]] &= ~(1 << port);
+ sc->vgroup[port] = E6000SW_PORT_NO_VGROUP;
+ }
+}
+
+static __inline void
+e6000sw_port_assign_vgroup(e6000sw_softc_t *sc, int port, int fid, int vgroup,
+ int members)
+{
+ uint32_t reg;
+
+ reg = e6000sw_readreg(sc, REG_PORT(port),
+ PORT_VLAN_MAP);
+ reg &= ~PORT_VLAN_MAP_TABLE_MASK;
+ reg &= ~PORT_VLAN_MAP_FID_MASK;
+ reg |= members & ~(1 << port);
+ reg |= (fid << PORT_VLAN_MAP_FID) & PORT_VLAN_MAP_FID_MASK;
+ e6000sw_writereg(sc, REG_PORT(port), PORT_VLAN_MAP,
+ reg);
+ sc->vgroup[port] = vgroup;
+}
+
+static int
+e6000sw_setvgroup(device_t dev, etherswitch_vlangroup_t *vg)
+{
+ e6000sw_softc_t *sc;
+ int port, fid;
+
+ sc = device_get_softc(dev);
+ E6000SW_LOCK_ASSERT(sc, SA_XLOCKED);
+
+ if (vg->es_vlangroup >= E6000SW_NUM_VGROUPS)
+ return (EINVAL);
+ if (vg->es_member_ports != vg->es_untagged_ports) {
+ device_printf(dev, "Tagged ports not supported.\n");
+ return (EINVAL);
+ }
+
+ vg->es_untagged_ports &= PORT_VLAN_MAP_TABLE_MASK;
+ fid = vg->es_vlangroup + 1;
+ for (port = 0; port < E6000SW_NUM_PORTS; port++) {
+ if ((sc->members[vg->es_vlangroup] & (1 << port)) ||
+ (vg->es_untagged_ports & (1 << port)))
+ e6000sw_flush_port(sc, port);
+ if (vg->es_untagged_ports & (1 << port))
+ e6000sw_port_assign_vgroup(sc, port, fid,
+ vg->es_vlangroup, vg->es_untagged_ports);
+ }
+ sc->vid[vg->es_vlangroup] = vg->es_vid;
+ sc->members[vg->es_vlangroup] = vg->es_untagged_ports;
+
+ return (0);
+}
+
+static int
+e6000sw_getvgroup(device_t dev, etherswitch_vlangroup_t *vg)
+{
+ e6000sw_softc_t *sc;
+
+ sc = device_get_softc(dev);
+ E6000SW_LOCK_ASSERT(sc, SA_XLOCKED);
+
+ if (vg->es_vlangroup >= E6000SW_NUM_VGROUPS)
+ return (EINVAL);
+ vg->es_untagged_ports = vg->es_member_ports =
+ sc->members[vg->es_vlangroup];
+ vg->es_vid = ETHERSWITCH_VID_VALID;
+
+ return (0);
+}
+
+static __inline struct mii_data*
+e6000sw_miiforphy(e6000sw_softc_t *sc, unsigned int phy)
+{
+
+ if (phy >= E6000SW_NUM_PHYS)
+ return (NULL);
+
+ return (device_get_softc(sc->miibus[phy]));
+}
+
+static int
+e6000sw_ifmedia_upd(struct ifnet *ifp)
+{
+ e6000sw_softc_t *sc;
+ struct mii_data *mii;
+
+ sc = ifp->if_softc;
+ mii = e6000sw_miiforphy(sc, ifp->if_dunit);
+ if (mii == NULL)
+ return (ENXIO);
+ mii_mediachg(mii);
+
+ return (0);
+}
+
+static void
+e6000sw_ifmedia_sts(struct ifnet *ifp, struct ifmediareq *ifmr)
+{
+ e6000sw_softc_t *sc;
+ struct mii_data *mii;
+
+ sc = ifp->if_softc;
+ mii = e6000sw_miiforphy(sc, ifp->if_dunit);
+
+ if (mii == NULL)
+ return;
+
+ mii_pollstat(mii);
+ ifmr->ifm_active = mii->mii_media_active;
+ ifmr->ifm_status = mii->mii_media_status;
+}
+
+static __inline uint32_t
+e6000sw_readreg(e6000sw_softc_t *sc, int addr, int reg)
+{
+
+ E6000SW_LOCK_ASSERT(sc, SA_XLOCKED);
+
+ return (MDIO_READREG(device_get_parent(sc->dev), addr, reg));
+}
+
+static __inline void
+e6000sw_writereg(e6000sw_softc_t *sc, int addr, int reg, int val)
+{
+
+ E6000SW_LOCK_ASSERT(sc, SA_XLOCKED);
+
+ MDIO_WRITEREG(device_get_parent(sc->dev), addr, reg, val);
+}
+
+static __inline int
+e6000sw_cpuport(e6000sw_softc_t *sc, int port)
+{
+
+ return (sc->cpuports_mask & (1 << port));
+}
+
+static __inline int
+e6000sw_set_pvid(e6000sw_softc_t *sc, int port, int pvid)
+{
+
+ e6000sw_writereg(sc, REG_PORT(port), PORT_VID, pvid &
+ PORT_VID_DEF_VID_MASK);
+
+ return (0);
+}
+
+static __inline int
+e6000sw_get_pvid(e6000sw_softc_t *sc, int port, int *pvid)
+{
+
+ if (pvid == NULL)
+ return (ENXIO);
+
+ *pvid = e6000sw_readreg(sc, REG_PORT(port), PORT_VID) &
+ PORT_VID_DEF_VID_MASK;
+
+ return (0);
+}
+
+static void
+e6000sw_tick (void *arg)
+{
+ e6000sw_softc_t *sc;
+ struct mii_softc *miisc;
+ int i;
+
+ sc = arg;
+
+ E6000SW_LOCK_ASSERT(sc, SA_UNLOCKED);
+ for (;;) {
+ E6000SW_LOCK(sc);
+ for (i = 0; i < E6000SW_NUM_PHYS; i++) {
+ mii_tick(sc->mii[i]);
+ LIST_FOREACH(miisc, &sc->mii[i]->mii_phys, mii_list) {
+ if (IFM_INST(sc->mii[i]->mii_media.ifm_cur->ifm_media)
+ != miisc->mii_inst)
+ continue;
+ mii_phy_update(miisc, MII_POLLSTAT);
+ }
+ }
+ E6000SW_UNLOCK(sc);
+ pause("e6000sw tick", 1000);
+ }
+}
+
+static void
+e6000sw_setup(device_t dev, e6000sw_softc_t *sc)
+{
+ uint16_t atu_ctrl, atu_age;
+
+ /* Set aging time */
+ e6000sw_writereg(sc, REG_GLOBAL, ATU_CONTROL,
+ (E6000SW_DEFAULT_AGETIME << ATU_CONTROL_AGETIME) |
+ (1 << ATU_CONTROL_LEARN2ALL));
+
+ /* Send all with specific mac address to cpu port */
+ e6000sw_writereg(sc, REG_GLOBAL2, MGMT_EN_2x, MGMT_EN_ALL);
+ e6000sw_writereg(sc, REG_GLOBAL2, MGMT_EN_0x, MGMT_EN_ALL);
+
+ /* Disable Remote Managment */
+ e6000sw_writereg(sc, REG_GLOBAL, SWITCH_GLOBAL_CONTROL2, 0);
+
+ /* Disable loopback filter and flow control messages */
+ e6000sw_writereg(sc, REG_GLOBAL2, SWITCH_MGMT,
+ SWITCH_MGMT_PRI_MASK |
+ (1 << SWITCH_MGMT_RSVD2CPU) |
+ SWITCH_MGMT_FC_PRI_MASK |
+ (1 << SWITCH_MGMT_FORCEFLOW));
+
+ /* Set VLAN configuration */
+ e6000sw_port_vlan_conf(sc);
+
+ e6000sw_atu_flush(dev, sc, NO_OPERATION);
+ e6000sw_atu_mac_table(dev, sc, NULL, NO_OPERATION);
+ e6000sw_set_atustat(dev, sc, 0, COUNT_ALL);
+
+ /* Set ATU AgeTime to 15 seconds */
+ atu_age = 1;
+
+ atu_ctrl = e6000sw_readreg(sc, REG_GLOBAL, ATU_CONTROL);
+
+ /* Set new AgeTime field */
+ atu_ctrl &= ~ATU_CONTROL_AGETIME_MASK;
+ e6000sw_writereg(sc, REG_GLOBAL, ATU_CONTROL, atu_ctrl |
+ (atu_age << ATU_CONTROL_AGETIME));
+}
+
+static void
+e6000sw_port_vlan_conf(e6000sw_softc_t *sc)
+{
+ int port, ret;
+ etherswitch_vlangroup_t vg;
+ device_t dev;
+
+ dev = sc->dev;
+ /* Disable all ports */
+ for (port = 0; port < E6000SW_NUM_PORTS; port++) {
+ ret = e6000sw_readreg(sc, REG_PORT(port), PORT_CONTROL);
+ e6000sw_writereg(sc, REG_PORT(port), PORT_CONTROL,
+ (ret & ~PORT_CONTROL_ENABLE));
+ }
+
+ /* Set port priority */
+ for (port = 0; port < E6000SW_NUM_PORTS; port++) {
+ ret = e6000sw_readreg(sc, REG_PORT(port), PORT_VID);
+ ret &= ~PORT_VID_PRIORITY_MASK;
+ e6000sw_writereg(sc, REG_PORT(port), PORT_VID, ret);
+ }
+
+ vg.es_vlangroup = 0;
+ vg.es_vid = 0;
+ vg.es_member_ports = vg.es_untagged_ports = E6000SW_DEF_VLANGROUP0;
+ e6000sw_setvgroup(dev, &vg);
+ vg.es_vlangroup = 1;
+ vg.es_vid = 1;
+ vg.es_member_ports = vg.es_untagged_ports = E6000SW_DEF_VLANGROUP1;
+ e6000sw_setvgroup(dev, &vg);
+
+ device_printf(dev, "Default vlangroups set.\n");
+ /* Set VID map */
+ for (port = 0; port < E6000SW_NUM_PORTS; port++) {
+ ret = e6000sw_readreg(sc, REG_PORT(port), PORT_VID);
+ ret &= ~PORT_VID_DEF_VID_MASK;
+ ret |= (port + 1);
+ e6000sw_writereg(sc, REG_PORT(port), PORT_VID, ret);
+ }
+
+ /* Enable all ports */
+ for (port = 0; port < E6000SW_NUM_PORTS; port++) {
+ ret = e6000sw_readreg(sc, REG_PORT(port), PORT_CONTROL);
+ e6000sw_writereg(sc, REG_PORT(port), PORT_CONTROL, (ret |
+ PORT_CONTROL_ENABLE));
+ }
+}
+
+static void
+e6000sw_set_atustat(device_t dev, e6000sw_softc_t *sc, int bin, int flag)
+{
+ uint16_t ret;
+
+ ret = e6000sw_readreg(sc, REG_GLOBAL2, ATU_STATS);
+ e6000sw_writereg(sc, REG_GLOBAL2, ATU_STATS, (bin << ATU_STATS_BIN ) |
+ (flag << ATU_STATS_FLAG));
+}
+
+static int
+e6000sw_atu_mac_table(device_t dev, e6000sw_softc_t *sc, struct atu_opt *atu,
+ int flag)
+{
+ uint16_t ret_opt;
+ uint16_t ret_data;
+ int retries;
+
+ if (flag == NO_OPERATION)
+ return (0);
+ else if ((flag & (LOAD_FROM_FIB | PURGE_FROM_FIB | GET_NEXT_IN_FIB |
+ GET_VIOLATION_DATA | CLEAR_VIOLATION_DATA)) == 0) {
+ device_printf(dev, "Wrong Opcode for ATU operation\n");
+ return (EINVAL);
+ }
+
+ ret_opt = e6000sw_readreg(sc, REG_GLOBAL, ATU_OPERATION);
+
+ if (ret_opt & ATU_UNIT_BUSY) {
+ device_printf(dev, "ATU unit is busy, cannot access"
+ "register\n");
+ return (EBUSY);
+ } else {
+ if(flag & LOAD_FROM_FIB) {
+ ret_data = e6000sw_readreg(sc, REG_GLOBAL, ATU_DATA);
+ e6000sw_writereg(sc, REG_GLOBAL2, ATU_DATA, (ret_data &
+ ~ENTRY_STATE));
+ }
+ e6000sw_writereg(sc, REG_GLOBAL, ATU_MAC_ADDR01, atu->mac_01);
+ e6000sw_writereg(sc, REG_GLOBAL, ATU_MAC_ADDR23, atu->mac_23);
+ e6000sw_writereg(sc, REG_GLOBAL, ATU_MAC_ADDR45, atu->mac_45);
+ e6000sw_writereg(sc, REG_GLOBAL, ATU_FID, atu->fid);
+
+ e6000sw_writereg(sc, REG_GLOBAL, ATU_OPERATION, (ret_opt |
+ ATU_UNIT_BUSY | flag));
+
+ retries = E6000SW_RETRIES;
+ while (--retries & (e6000sw_readreg(sc, REG_GLOBAL,
+ ATU_OPERATION) & ATU_UNIT_BUSY))
+ DELAY(1);
+
+ if (retries == 0)
+ device_printf(dev, "Timeout while flushing\n");
+ else if (flag & GET_NEXT_IN_FIB) {
+ atu->mac_01 = e6000sw_readreg(sc, REG_GLOBAL,
+ ATU_MAC_ADDR01);
+ atu->mac_23 = e6000sw_readreg(sc, REG_GLOBAL,
+ ATU_MAC_ADDR23);
+ atu->mac_45 = e6000sw_readreg(sc, REG_GLOBAL,
+ ATU_MAC_ADDR45);
+ }
+ }
+
+ return (0);
+}
+
+static int
+e6000sw_atu_flush(device_t dev, e6000sw_softc_t *sc, int flag)
+{
+ uint16_t ret;
+ int retries;
+
+ if (flag == NO_OPERATION)
+ return (0);
+
+ ret = e6000sw_readreg(sc, REG_GLOBAL, ATU_OPERATION);
+ if (ret & ATU_UNIT_BUSY) {
+ device_printf(dev, "Atu unit is busy, cannot flush\n");
+ return (EBUSY);
+ } else {
+ e6000sw_writereg(sc, REG_GLOBAL, ATU_OPERATION, (ret |
+ ATU_UNIT_BUSY | flag));
+ retries = E6000SW_RETRIES;
+ while (--retries & (e6000sw_readreg(sc, REG_GLOBAL,
+ ATU_OPERATION) & ATU_UNIT_BUSY))
+ DELAY(1);
+
+ if (retries == 0)
+ device_printf(dev, "Timeout while flushing\n");
+ }
+
+ return (0);
+}
diff --git a/sys/dev/etherswitch/e6000sw/e6000swreg.h b/sys/dev/etherswitch/e6000sw/e6000swreg.h
new file mode 100644
index 0000000..b8cdfe3
--- /dev/null
+++ b/sys/dev/etherswitch/e6000sw/e6000swreg.h
@@ -0,0 +1,185 @@
+/*-
+ * Copyright (c) 2015 Semihalf
+ * Copyright (c) 2015 Stormshield
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * $FreeBSD$
+ *
+ */
+
+#ifndef _E6000SWREG_H_
+#define _E6000SWREG_H_
+
+struct atu_opt {
+ uint16_t mac_01;
+ uint16_t mac_23;
+ uint16_t mac_45;
+ uint16_t fid;
+};
+
+/*
+ * Definitions for the Marvell 88E6000 series Ethernet Switch.
+ */
+
+#define CPU_PORT 0x5
+
+/*
+ * Switch Registers
+ */
+#define REG_GLOBAL 0x1b
+#define REG_GLOBAL2 0x1c
+#define REG_PORT(p) (0x10 + (p))
+
+#define REG_NUM_MAX 31
+
+/*
+ * Per-Port Switch Registers
+ */
+#define PORT_STATUS 0x0
+#define PSC_CONTROL 0x1
+#define SWITCH_ID 0x3
+#define PORT_CONTROL 0x4
+#define PORT_CONTROL_1 0x5
+#define PORT_VLAN_MAP 0x6
+#define PORT_VID 0x7
+#define PORT_ASSOCIATION_VECTOR 0xb
+#define PORT_ATU_CTRL 0xc
+#define RX_COUNTER 0x12
+#define TX_COUNTER 0x13
+
+#define PORT_VID_DEF_VID 0
+#define PORT_VID_DEF_VID_MASK 0xfff
+#define PORT_VID_PRIORITY_MASK 0xc00
+
+#define PORT_CONTROL_ENABLE 0x3
+
+/* PORT_VLAN fields */
+#define PORT_VLAN_MAP_TABLE_MASK 0x7f
+#define PORT_VLAN_MAP_FID 12
+#define PORT_VLAN_MAP_FID_MASK 0xf000
+/*
+ * Switch Global Register 1 accessed via REG_GLOBAL_ADDR
+ */
+#define SWITCH_GLOBAL_STATUS 0
+#define SWITCH_GLOBAL_CONTROL 4
+#define SWITCH_GLOBAL_CONTROL2 28
+
+#define MONITOR_CONTROL 26
+
+/* ATU operation */
+#define ATU_FID 1
+#define ATU_CONTROL 10
+#define ATU_OPERATION 11
+#define ATU_DATA 12
+#define ATU_MAC_ADDR01 13
+#define ATU_MAC_ADDR23 14
+#define ATU_MAC_ADDR45 15
+
+#define ATU_UNIT_BUSY (1 << 15)
+#define ENTRY_STATE 0xf
+
+/* ATU_CONTROL fields */
+#define ATU_CONTROL_AGETIME 4
+#define ATU_CONTROL_AGETIME_MASK 0xff0
+#define ATU_CONTROL_LEARN2ALL 3
+
+/* ATU opcode */
+#define NO_OPERATION (0 << 0)
+#define FLUSH_ALL (1 << 0)
+#define FLUSH_NON_STATIC (1 << 1)
+#define LOAD_FROM_FIB (3 << 0)
+#define PURGE_FROM_FIB (3 << 0)
+#define GET_NEXT_IN_FIB (1 << 2)
+#define FLUSH_ALL_IN_FIB (5 << 0)
+#define FLUSH_NON_STATIC_IN_FIB (3 << 1)
+#define GET_VIOLATION_DATA (7 << 0)
+#define CLEAR_VIOLATION_DATA (7 << 0)
+
+/* ATU Stats */
+#define COUNT_ALL (0 << 0)
+
+/*
+ * Switch Global Register 2 accessed via REG_GLOBAL2_ADDR
+ */
+#define MGMT_EN_2x 2
+#define MGMT_EN_0x 3
+#define SWITCH_MGMT 5
+#define ATU_STATS 14
+
+#define MGMT_EN_ALL 0xffff
+
+/* SWITCH_MGMT fields */
+
+#define SWITCH_MGMT_PRI 0
+#define SWITCH_MGMT_PRI_MASK 7
+#define SWITCH_MGMT_RSVD2CPU 3
+#define SWITCH_MGMT_FC_PRI 4
+#define SWITCH_MGMT_FC_PRI_MASK (7 << 4)
+#define SWITCH_MGMT_FORCEFLOW 7
+
+/* ATU_STATS fields */
+
+#define ATU_STATS_BIN 14
+#define ATU_STATS_FLAG 12
+
+/*
+ * PHY registers accessed via 'Switch Global Registers' (REG_GLOBAL2).
+ */
+#define SMI_PHY_CMD_REG 0x18
+#define SMI_PHY_DATA_REG 0x19
+
+#define PHY_CMD 0x18
+#define PHY_DATA 0x19
+#define PHY_DATA_MASK 0xffff
+
+#define PHY_CMD_SMI_BUSY 15
+#define PHY_CMD_MODE 12
+#define PHY_CMD_MODE_MDIO 1
+#define PHY_CMD_MODE_XMDIO 0
+#define PHY_CMD_OPCODE 10
+#define PHY_CMD_OPCODE_WRITE 1
+#define PHY_CMD_OPCODE_READ 2
+#define PHY_CMD_DEV_ADDR 5
+#define PHY_CMD_DEV_ADDR_MASK 0x3e0
+#define PHY_CMD_REG_ADDR 0
+#define PHY_CMD_REG_ADDR_MASK 0x1f
+
+#define PHY_PAGE_REG 22
+
+#define E6000SW_NUM_PHYS 5
+#define E6000SW_NUM_PHY_REGS 29
+#define E6000SW_CPUPORTS_MASK ((1 << 5) | (1 << 6))
+#define E6000SW_NUM_VGROUPS 8
+#define E6000SW_NUM_PORTS 7
+#define E6000SW_PORT_NO_VGROUP -1
+#define E6000SW_DEFAULT_AGETIME 20
+#define E6000SW_RETRIES 100
+
+
+/* Default vlangroups */
+#define E6000SW_DEF_VLANGROUP0 (1 | (1 << 1) | (1 << 2) | (1 << 3) | \
+ (1 << 6))
+#define E6000SW_DEF_VLANGROUP1 ((1 << 4) | (1 << 5))
+
+#endif /* _E6000SWREG_H_ */
diff --git a/sys/dev/filemon/filemon.c b/sys/dev/filemon/filemon.c
index f8a698f..ef6c98c 100644
--- a/sys/dev/filemon/filemon.c
+++ b/sys/dev/filemon/filemon.c
@@ -195,9 +195,6 @@ filemon_open(struct cdev *dev, int oflags __unused, int devtype __unused,
if (filemon == NULL) {
filemon = malloc(sizeof(struct filemon), M_FILEMON,
M_WAITOK | M_ZERO);
-
- filemon->fp = NULL;
-
sx_init(&filemon->lock, "filemon");
}
diff --git a/sys/dev/iicbus/icee.c b/sys/dev/iicbus/icee.c
index 800ec4c..fffb356 100644
--- a/sys/dev/iicbus/icee.c
+++ b/sys/dev/iicbus/icee.c
@@ -27,6 +27,9 @@ __FBSDID("$FreeBSD$");
/*
* Generic IIC eeprom support, modeled after the AT24C family of products.
*/
+
+#include "opt_platform.h"
+
#include <sys/param.h>
#include <sys/systm.h>
#include <sys/bus.h>
@@ -37,26 +40,73 @@ __FBSDID("$FreeBSD$");
#include <sys/sx.h>
#include <sys/uio.h>
#include <machine/bus.h>
+
+#ifdef FDT
+#include <dev/ofw/ofw_bus.h>
+#include <dev/ofw/ofw_bus_subr.h>
+#endif
+
#include <dev/iicbus/iiconf.h>
#include <dev/iicbus/iicbus.h>
#include "iicbus_if.h"
-#define IIC_M_WR 0 /* write operation */
+/*
+ * AT24 parts have a "write page size" that differs per-device, and a "read page
+ * size" that is always equal to the full device size. We define maximum values
+ * here to limit how long we occupy the bus with a single transfer, and because
+ * there are temporary buffers of these sizes allocated on the stack.
+ */
#define MAX_RD_SZ 256 /* Largest read size we support */
-#define MAX_WR_SZ 256 /* Largest write size we support */
+#define MAX_WR_SZ 256 /* Largest write size we support */
struct icee_softc {
- device_t sc_dev; /* Myself */
- device_t sc_busdev; /* Parent bus */
+ device_t dev; /* Myself */
struct cdev *cdev; /* user interface */
- int addr;
+ int addr; /* Slave address on the bus */
int size; /* How big am I? */
- int type; /* What type 8 or 16 bit? */
- int rd_sz; /* What's the read page size */
+ int type; /* What address type 8 or 16 bit? */
int wr_sz; /* What's the write page size */
};
+#ifdef FDT
+struct eeprom_desc {
+ int type;
+ int size;
+ int wr_sz;
+ const char *name;
+};
+
+static struct eeprom_desc type_desc[] = {
+ { 8, 128, 8, "AT24C01"},
+ { 8, 256, 8, "AT24C02"},
+ { 8, 512, 16, "AT24C04"},
+ { 8, 1024, 16, "AT24C08"},
+ { 8, 2 * 1024, 16, "AT24C16"},
+ {16, 4 * 1024, 32, "AT24C32"},
+ {16, 8 * 1024, 32, "AT24C64"},
+ {16, 16 * 1024, 64, "AT24C128"},
+ {16, 32 * 1024, 64, "AT24C256"},
+ {16, 64 * 1024, 128, "AT24C512"},
+ {16, 128 * 1024, 256, "AT24CM01"},
+};
+
+static struct ofw_compat_data compat_data[] = {
+ {"atmel,24c01", (uintptr_t)(&type_desc[0])},
+ {"atmel,24c02", (uintptr_t)(&type_desc[1])},
+ {"atmel,24c04", (uintptr_t)(&type_desc[2])},
+ {"atmel,24c08", (uintptr_t)(&type_desc[3])},
+ {"atmel,24c16", (uintptr_t)(&type_desc[4])},
+ {"atmel,24c32", (uintptr_t)(&type_desc[5])},
+ {"atmel,24c64", (uintptr_t)(&type_desc[6])},
+ {"atmel,24c128", (uintptr_t)(&type_desc[7])},
+ {"atmel,24c256", (uintptr_t)(&type_desc[8])},
+ {"atmel,24c512", (uintptr_t)(&type_desc[9])},
+ {"atmel,24c1024", (uintptr_t)(&type_desc[10])},
+ {NULL, (uintptr_t)NULL},
+};
+#endif
+
#define CDEV2SOFTC(dev) ((dev)->si_drv1)
/* cdev routines */
@@ -75,6 +125,39 @@ static struct cdevsw icee_cdevsw =
.d_write = icee_write
};
+#ifdef FDT
+static int
+icee_probe(device_t dev)
+{
+ struct eeprom_desc *d;
+
+ if (!ofw_bus_status_okay(dev))
+ return (ENXIO);
+
+ d = (struct eeprom_desc *)
+ ofw_bus_search_compatible(dev, compat_data)->ocd_data;
+ if (d == NULL)
+ return (ENXIO);
+
+ device_set_desc(dev, d->name);
+ return (BUS_PROBE_DEFAULT);
+}
+
+static void
+icee_init(struct icee_softc *sc)
+{
+ struct eeprom_desc *d;
+
+ d = (struct eeprom_desc *)
+ ofw_bus_search_compatible(sc->dev, compat_data)->ocd_data;
+ if (d == NULL)
+ return; /* attach will see sc->size == 0 and return error */
+
+ sc->size = d->size;
+ sc->type = d->type;
+ sc->wr_sz = d->wr_sz;
+}
+#else /* !FDT */
static int
icee_probe(device_t dev)
{
@@ -83,37 +166,44 @@ icee_probe(device_t dev)
return (BUS_PROBE_NOWILDCARD);
}
-static int
-icee_attach(device_t dev)
+static void
+icee_init(struct icee_softc *sc)
{
- struct icee_softc *sc = device_get_softc(dev);
const char *dname;
- int dunit, err;
+ int dunit;
- sc->sc_dev = dev;
- sc->sc_busdev = device_get_parent(sc->sc_dev);
- sc->addr = iicbus_get_addr(dev);
- err = 0;
- dname = device_get_name(dev);
- dunit = device_get_unit(dev);
+ dname = device_get_name(sc->dev);
+ dunit = device_get_unit(sc->dev);
resource_int_value(dname, dunit, "size", &sc->size);
resource_int_value(dname, dunit, "type", &sc->type);
- resource_int_value(dname, dunit, "rd_sz", &sc->rd_sz);
- if (sc->rd_sz > MAX_RD_SZ)
- sc->rd_sz = MAX_RD_SZ;
resource_int_value(dname, dunit, "wr_sz", &sc->wr_sz);
+}
+#endif /* FDT */
+
+static int
+icee_attach(device_t dev)
+{
+ struct icee_softc *sc = device_get_softc(dev);
+
+ sc->dev = dev;
+ sc->addr = iicbus_get_addr(dev);
+ icee_init(sc);
+ if (sc->size == 0 || sc->type == 0 || sc->wr_sz == 0) {
+ device_printf(sc->dev, "Missing config data, "
+ "these cannot be zero: size %d type %d wr_sz %d\n",
+ sc->size, sc->type, sc->wr_sz);
+ return (EINVAL);
+ }
if (bootverbose)
- device_printf(dev, "size: %d bytes bus_width: %d-bits\n",
+ device_printf(dev, "size: %d bytes, addressing: %d-bits\n",
sc->size, sc->type);
sc->cdev = make_dev(&icee_cdevsw, device_get_unit(dev), UID_ROOT,
GID_WHEEL, 0600, "icee%d", device_get_unit(dev));
if (sc->cdev == NULL) {
- err = ENOMEM;
- goto out;
+ return (ENOMEM);
}
sc->cdev->si_drv1 = sc;
-out:
- return (err);
+ return (0);
}
static int
@@ -149,14 +239,11 @@ icee_read(struct cdev *dev, struct uio *uio, int ioflag)
return (EIO);
if (sc->type != 8 && sc->type != 16)
return (EINVAL);
- error = iicbus_request_bus(sc->sc_busdev, sc->sc_dev, IIC_INTRWAIT);
- if (error!= 0)
- return (iic2errno(error));
slave = error = 0;
while (uio->uio_resid > 0) {
if (uio->uio_offset >= sc->size)
break;
- len = MIN(sc->rd_sz - (uio->uio_offset & (sc->rd_sz - 1)),
+ len = MIN(MAX_RD_SZ - (uio->uio_offset & (MAX_RD_SZ - 1)),
uio->uio_resid);
switch (sc->type) {
case 8:
@@ -175,7 +262,7 @@ icee_read(struct cdev *dev, struct uio *uio, int ioflag)
}
for (i = 0; i < 2; i++)
msgs[i].slave = slave;
- error = iicbus_transfer(sc->sc_dev, msgs, 2);
+ error = iicbus_transfer_excl(sc->dev, msgs, 2, IIC_INTRWAIT);
if (error) {
error = iic2errno(error);
break;
@@ -184,7 +271,6 @@ icee_read(struct cdev *dev, struct uio *uio, int ioflag)
if (error)
break;
}
- iicbus_release_bus(sc->sc_busdev, sc->sc_dev);
return (error);
}
@@ -213,9 +299,6 @@ icee_write(struct cdev *dev, struct uio *uio, int ioflag)
if (sc->type != 8 && sc->type != 16)
return (EINVAL);
- error = iicbus_request_bus(sc->sc_busdev, sc->sc_dev, IIC_INTRWAIT);
- if (error!= 0)
- return (iic2errno(error));
slave = error = 0;
while (uio->uio_resid > 0) {
if (uio->uio_offset >= sc->size)
@@ -239,7 +322,7 @@ icee_write(struct cdev *dev, struct uio *uio, int ioflag)
error = uiomove(data + sc->type / 8, len, uio);
if (error)
break;
- error = iicbus_transfer(sc->sc_dev, wr, 1);
+ error = iicbus_transfer_excl(sc->dev, wr, 1, IIC_INTRWAIT);
if (error) {
error = iic2errno(error);
break;
@@ -248,14 +331,14 @@ icee_write(struct cdev *dev, struct uio *uio, int ioflag)
waitlimit = 10000;
rd[0].slave = slave;
do {
- error = iicbus_transfer(sc->sc_dev, rd, 1);
+ error = iicbus_transfer_excl(sc->dev, rd, 1,
+ IIC_INTRWAIT);
} while (waitlimit-- > 0 && error != 0);
if (error) {
error = iic2errno(error);
break;
}
}
- iicbus_release_bus(sc->sc_busdev, sc->sc_dev);
return error;
}
diff --git a/sys/dev/iicbus/iicbb.c b/sys/dev/iicbus/iicbb.c
index 977d52a..ed1d7b8 100644
--- a/sys/dev/iicbus/iicbb.c
+++ b/sys/dev/iicbus/iicbb.c
@@ -149,22 +149,9 @@ iicbb_attach(device_t dev)
static int
iicbb_detach(device_t dev)
{
- struct iicbb_softc *sc = (struct iicbb_softc *)device_get_softc(dev);
- device_t child;
-
- /*
- * We need to save child because the detach indirectly causes
- * sc->iicbus to be zeroed. Since we added the device
- * unconditionally in iicbb_attach, we need to make sure we
- * delete it here. See iicbb_child_detached. We need that
- * callback in case newbus detached our children w/o detaching
- * us (say iicbus is a module and unloaded w/o iicbb being
- * unloaded).
- */
- child = sc->iicbus;
+
bus_generic_detach(dev);
- if (child)
- device_delete_child(dev, child);
+ device_delete_children(dev);
return (0);
}
diff --git a/sys/dev/iicbus/iicbus.c b/sys/dev/iicbus/iicbus.c
index 71098ed..df29b09 100644
--- a/sys/dev/iicbus/iicbus.c
+++ b/sys/dev/iicbus/iicbus.c
@@ -40,7 +40,7 @@ __FBSDID("$FreeBSD$");
#include <sys/mutex.h>
#include <sys/rman.h>
#include <sys/sysctl.h>
-#include <sys/bus.h>
+#include <sys/bus.h>
#include <dev/iicbus/iiconf.h>
#include <dev/iicbus/iicbus.h>
@@ -61,7 +61,7 @@ iicbus_probe(device_t dev)
}
#if SCAN_IICBUS
-static int
+static int
iic_probe_device(device_t dev, u_char addr)
{
int count;
@@ -127,7 +127,7 @@ iicbus_attach(device_t dev)
bus_generic_attach(dev);
return (0);
}
-
+
static int
iicbus_detach(device_t dev)
{
@@ -135,10 +135,11 @@ iicbus_detach(device_t dev)
iicbus_reset(dev, IIC_FASTEST, 0, NULL);
bus_generic_detach(dev);
+ device_delete_children(dev);
mtx_destroy(&sc->lock);
return (0);
}
-
+
static int
iicbus_print_child(device_t dev, device_t child)
{
diff --git a/sys/dev/iicbus/iicoc.c b/sys/dev/iicbus/iicoc.c
index 45f1692..c55d6fe 100644
--- a/sys/dev/iicbus/iicoc.c
+++ b/sys/dev/iicbus/iicoc.c
@@ -229,6 +229,7 @@ static int
iicoc_detach(device_t dev)
{
bus_generic_detach(dev);
+ device_delete_children(dev);
return (0);
}
diff --git a/sys/dev/iicbus/iiconf.c b/sys/dev/iicbus/iiconf.c
index e28d341..8ac8a47 100644
--- a/sys/dev/iicbus/iiconf.c
+++ b/sys/dev/iicbus/iiconf.c
@@ -395,6 +395,21 @@ iicbus_transfer(device_t bus, struct iic_msg *msgs, uint32_t nmsgs)
return (IICBUS_TRANSFER(device_get_parent(bus), msgs, nmsgs));
}
+int
+iicbus_transfer_excl(device_t dev, struct iic_msg *msgs, uint32_t nmsgs,
+ int how)
+{
+ device_t bus;
+ int error;
+
+ bus = device_get_parent(dev);
+ error = iicbus_request_bus(bus, dev, how);
+ if (error == 0)
+ error = IICBUS_TRANSFER(bus, msgs, nmsgs);
+ iicbus_release_bus(bus, dev);
+ return (error);
+}
+
/*
* Generic version of iicbus_transfer that calls the appropriate
* routines to accomplish this. See note above about acceptable
diff --git a/sys/dev/iicbus/iiconf.h b/sys/dev/iicbus/iiconf.h
index aca0137..12ac0d7 100644
--- a/sys/dev/iicbus/iiconf.h
+++ b/sys/dev/iicbus/iiconf.h
@@ -129,6 +129,8 @@ extern int iicbus_block_read(device_t, u_char, char *, int, int *);
/* vectors of iic operations to pass to bridge */
int iicbus_transfer(device_t bus, struct iic_msg *msgs, uint32_t nmsgs);
+int iicbus_transfer_excl(device_t bus, struct iic_msg *msgs, uint32_t nmsgs,
+ int how);
int iicbus_transfer_gen(device_t bus, struct iic_msg *msgs, uint32_t nmsgs);
#define IICBUS_MODVER 1
diff --git a/sys/dev/iicbus/iicsmb.c b/sys/dev/iicbus/iicsmb.c
index 27f1d2b..d8f35c6 100644
--- a/sys/dev/iicbus/iicsmb.c
+++ b/sys/dev/iicbus/iicsmb.c
@@ -167,11 +167,9 @@ static int
iicsmb_detach(device_t dev)
{
struct iicsmb_softc *sc = (struct iicsmb_softc *)device_get_softc(dev);
-
+
bus_generic_detach(dev);
- if (sc->smbus) {
- device_delete_child(dev, sc->smbus);
- }
+ device_delete_children(dev);
mtx_destroy(&sc->lock);
return (0);
diff --git a/sys/dev/ioat/ioat.c b/sys/dev/ioat/ioat.c
index 43ceac9..8245adf 100644
--- a/sys/dev/ioat/ioat.c
+++ b/sys/dev/ioat/ioat.c
@@ -38,6 +38,7 @@ __FBSDID("$FreeBSD$");
#include <sys/module.h>
#include <sys/mutex.h>
#include <sys/rman.h>
+#include <sys/sbuf.h>
#include <sys/sysctl.h>
#include <sys/time.h>
#include <dev/pci/pcireg.h>
@@ -50,27 +51,41 @@ __FBSDID("$FreeBSD$");
#include "ioat_hw.h"
#include "ioat_internal.h"
+#define IOAT_INTR_TIMO (hz / 10)
+#define IOAT_REFLK (&ioat->submit_lock)
+
static int ioat_probe(device_t device);
static int ioat_attach(device_t device);
static int ioat_detach(device_t device);
static int ioat_setup_intr(struct ioat_softc *ioat);
static int ioat_teardown_intr(struct ioat_softc *ioat);
static int ioat3_attach(device_t device);
+static int ioat_start_channel(struct ioat_softc *ioat);
static int ioat_map_pci_bar(struct ioat_softc *ioat);
static void ioat_dmamap_cb(void *arg, bus_dma_segment_t *segs, int nseg,
int error);
static void ioat_interrupt_handler(void *arg);
static boolean_t ioat_model_resets_msix(struct ioat_softc *ioat);
+static int chanerr_to_errno(uint32_t);
static void ioat_process_events(struct ioat_softc *ioat);
static inline uint32_t ioat_get_active(struct ioat_softc *ioat);
static inline uint32_t ioat_get_ring_space(struct ioat_softc *ioat);
+static void ioat_free_ring(struct ioat_softc *, uint32_t size,
+ struct ioat_descriptor **);
static void ioat_free_ring_entry(struct ioat_softc *ioat,
struct ioat_descriptor *desc);
-static struct ioat_descriptor * ioat_alloc_ring_entry(struct ioat_softc *ioat);
-static int ioat_reserve_space_and_lock(struct ioat_softc *ioat, int num_descs);
-static struct ioat_descriptor * ioat_get_ring_entry(struct ioat_softc *ioat,
+static struct ioat_descriptor *ioat_alloc_ring_entry(struct ioat_softc *,
+ int mflags);
+static int ioat_reserve_space(struct ioat_softc *, uint32_t, int mflags);
+static struct ioat_descriptor *ioat_get_ring_entry(struct ioat_softc *ioat,
uint32_t index);
-static boolean_t resize_ring(struct ioat_softc *ioat, int order);
+static struct ioat_descriptor **ioat_prealloc_ring(struct ioat_softc *,
+ uint32_t size, boolean_t need_dscr, int mflags);
+static int ring_grow(struct ioat_softc *, uint32_t oldorder,
+ struct ioat_descriptor **);
+static int ring_shrink(struct ioat_softc *, uint32_t oldorder,
+ struct ioat_descriptor **);
+static void ioat_halted_debug(struct ioat_softc *, uint32_t);
static void ioat_timer_callback(void *arg);
static void dump_descriptor(void *hw_desc);
static void ioat_submit_single(struct ioat_softc *ioat);
@@ -78,6 +93,23 @@ static void ioat_comp_update_map(void *arg, bus_dma_segment_t *seg, int nseg,
int error);
static int ioat_reset_hw(struct ioat_softc *ioat);
static void ioat_setup_sysctl(device_t device);
+static int sysctl_handle_reset(SYSCTL_HANDLER_ARGS);
+static inline struct ioat_softc *ioat_get(struct ioat_softc *,
+ enum ioat_ref_kind);
+static inline void ioat_put(struct ioat_softc *, enum ioat_ref_kind);
+static inline void _ioat_putn(struct ioat_softc *, uint32_t,
+ enum ioat_ref_kind, boolean_t);
+static inline void ioat_putn(struct ioat_softc *, uint32_t,
+ enum ioat_ref_kind);
+static inline void ioat_putn_locked(struct ioat_softc *, uint32_t,
+ enum ioat_ref_kind);
+static void ioat_drain_locked(struct ioat_softc *);
+
+#define ioat_log_message(v, ...) do { \
+ if ((v) <= g_ioat_debug_level) { \
+ device_printf(ioat->device, __VA_ARGS__); \
+ } \
+} while (0)
MALLOC_DEFINE(M_IOAT, "ioat", "ioat driver memory allocations");
SYSCTL_NODE(_hw, OID_AUTO, ioat, CTLFLAG_RD, 0, "ioat node");
@@ -86,7 +118,7 @@ static int g_force_legacy_interrupts;
SYSCTL_INT(_hw_ioat, OID_AUTO, force_legacy_interrupts, CTLFLAG_RDTUN,
&g_force_legacy_interrupts, 0, "Set to non-zero to force MSI-X disabled");
-static int g_ioat_debug_level = 0;
+int g_ioat_debug_level = 0;
SYSCTL_INT(_hw_ioat, OID_AUTO, debug_level, CTLFLAG_RWTUN, &g_ioat_debug_level,
0, "Set log level (0-3) for ioat(4). Higher is more verbose.");
@@ -227,10 +259,6 @@ ioat_attach(device_t device)
goto err;
}
- error = ioat_setup_intr(ioat);
- if (error != 0)
- return (error);
-
error = ioat3_attach(device);
if (error != 0)
goto err;
@@ -239,7 +267,20 @@ ioat_attach(device_t device)
if (error != 0)
goto err;
+ error = ioat_setup_intr(ioat);
+ if (error != 0)
+ goto err;
+
+ error = ioat_reset_hw(ioat);
+ if (error != 0)
+ goto err;
+
+ ioat_process_events(ioat);
+ ioat_setup_sysctl(device);
+
+ ioat->chan_idx = ioat_channel_index;
ioat_channel[ioat_channel_index++] = ioat;
+ ioat_test_attach();
err:
if (error != 0)
@@ -251,9 +292,19 @@ static int
ioat_detach(device_t device)
{
struct ioat_softc *ioat;
- uint32_t i;
ioat = DEVICE2SOFTC(device);
+
+ ioat_test_detach();
+
+ mtx_lock(IOAT_REFLK);
+ ioat->quiescing = TRUE;
+ ioat_channel[ioat->chan_idx] = NULL;
+
+ ioat_drain_locked(ioat);
+ mtx_unlock(IOAT_REFLK);
+
+ ioat_teardown_intr(ioat);
callout_drain(&ioat->timer);
pci_disable_busmaster(device);
@@ -262,11 +313,8 @@ ioat_detach(device_t device)
bus_release_resource(device, SYS_RES_MEMORY,
ioat->pci_resource_id, ioat->pci_resource);
- if (ioat->ring != NULL) {
- for (i = 0; i < (1 << ioat->ring_size_order); i++)
- ioat_free_ring_entry(ioat, ioat->ring[i]);
- free(ioat->ring, M_IOAT);
- }
+ if (ioat->ring != NULL)
+ ioat_free_ring(ioat, 1 << ioat->ring_size_order, ioat->ring);
if (ioat->comp_update != NULL) {
bus_dmamap_unload(ioat->comp_update_tag, ioat->comp_update_map);
@@ -277,8 +325,6 @@ ioat_detach(device_t device)
bus_dma_tag_destroy(ioat->hw_desc_tag);
- ioat_teardown_intr(ioat);
-
return (0);
}
@@ -298,7 +344,7 @@ ioat_teardown_intr(struct ioat_softc *ioat)
}
static int
-ioat3_selftest(struct ioat_softc *ioat)
+ioat_start_channel(struct ioat_softc *ioat)
{
uint64_t status;
uint32_t chanerr;
@@ -317,7 +363,8 @@ ioat3_selftest(struct ioat_softc *ioat)
chanerr = ioat_read_4(ioat, IOAT_CHANERR_OFFSET);
ioat_log_message(0, "could not start channel: "
- "status = %#jx error = %x\n", (uintmax_t)status, chanerr);
+ "status = %#jx error = %b\n", (uintmax_t)status, (int)chanerr,
+ IOAT_CHANERR_STR);
return (ENXIO);
}
@@ -331,32 +378,36 @@ ioat3_attach(device_t device)
struct ioat_descriptor **ring;
struct ioat_descriptor *next;
struct ioat_dma_hw_descriptor *dma_hw_desc;
- uint32_t capabilities;
int i, num_descriptors;
int error;
uint8_t xfercap;
error = 0;
ioat = DEVICE2SOFTC(device);
- capabilities = ioat_read_dmacapability(ioat);
+ ioat->capabilities = ioat_read_dmacapability(ioat);
- xfercap = ioat_read_xfercap(ioat);
+ ioat_log_message(1, "Capabilities: %b\n", (int)ioat->capabilities,
+ IOAT_DMACAP_STR);
- /* Only bits [4:0] are valid. */
- xfercap &= 0x1f;
+ xfercap = ioat_read_xfercap(ioat);
ioat->max_xfer_size = 1 << xfercap;
/* TODO: need to check DCA here if we ever do XOR/PQ */
mtx_init(&ioat->submit_lock, "ioat_submit", NULL, MTX_DEF);
- mtx_init(&ioat->cleanup_lock, "ioat_process_events", NULL, MTX_DEF);
- callout_init(&ioat->timer, CALLOUT_MPSAFE);
+ mtx_init(&ioat->cleanup_lock, "ioat_cleanup", NULL, MTX_DEF);
+ callout_init(&ioat->timer, 1);
+
+ /* Establish lock order for Witness */
+ mtx_lock(&ioat->submit_lock);
+ mtx_lock(&ioat->cleanup_lock);
+ mtx_unlock(&ioat->cleanup_lock);
+ mtx_unlock(&ioat->submit_lock);
ioat->is_resize_pending = FALSE;
ioat->is_completion_pending = FALSE;
ioat->is_reset_pending = FALSE;
ioat->is_channel_running = FALSE;
- ioat->is_waiting_for_ack = FALSE;
bus_dma_tag_create(bus_get_dma_tag(ioat->device), sizeof(uint64_t), 0x0,
BUS_SPACE_MAXADDR, BUS_SPACE_MAXADDR, NULL, NULL,
@@ -385,13 +436,13 @@ ioat3_attach(device_t device)
&ioat->hw_desc_tag);
ioat->ring = malloc(num_descriptors * sizeof(*ring), M_IOAT,
- M_ZERO | M_NOWAIT);
+ M_ZERO | M_WAITOK);
if (ioat->ring == NULL)
return (ENOMEM);
ring = ioat->ring;
for (i = 0; i < num_descriptors; i++) {
- ring[i] = ioat_alloc_ring_entry(ioat);
+ ring[i] = ioat_alloc_ring_entry(ioat, M_WAITOK);
if (ring[i] == NULL)
return (ENOMEM);
@@ -407,24 +458,9 @@ ioat3_attach(device_t device)
ring[i]->u.dma->next = ring[0]->hw_desc_bus_addr;
- ioat->head = 0;
+ ioat->head = ioat->hw_head = 0;
ioat->tail = 0;
ioat->last_seen = 0;
-
- error = ioat_reset_hw(ioat);
- if (error != 0)
- return (error);
-
- ioat_write_chanctrl(ioat, IOAT_CHANCTRL_RUN);
- ioat_write_chancmp(ioat, ioat->comp_update_bus_addr);
- ioat_write_chainaddr(ioat, ring[0]->hw_desc_bus_addr);
-
- error = ioat3_selftest(ioat);
- if (error != 0)
- return (error);
-
- ioat_process_events(ioat);
- ioat_setup_sysctl(device);
return (0);
}
@@ -433,8 +469,8 @@ ioat_map_pci_bar(struct ioat_softc *ioat)
{
ioat->pci_resource_id = PCIR_BAR(0);
- ioat->pci_resource = bus_alloc_resource(ioat->device, SYS_RES_MEMORY,
- &ioat->pci_resource_id, 0, ~0, 1, RF_ACTIVE);
+ ioat->pci_resource = bus_alloc_resource_any(ioat->device,
+ SYS_RES_MEMORY, &ioat->pci_resource_id, RF_ACTIVE);
if (ioat->pci_resource == NULL) {
ioat_log_message(0, "unable to allocate pci resource\n");
@@ -451,6 +487,7 @@ ioat_comp_update_map(void *arg, bus_dma_segment_t *seg, int nseg, int error)
{
struct ioat_softc *ioat = arg;
+ KASSERT(error == 0, ("%s: error:%d", __func__, error));
ioat->comp_update_bus_addr = seg[0].ds_addr;
}
@@ -459,6 +496,7 @@ ioat_dmamap_cb(void *arg, bus_dma_segment_t *segs, int nseg, int error)
{
bus_addr_t *baddr;
+ KASSERT(error == 0, ("%s: error:%d", __func__, error));
baddr = arg;
*baddr = segs->ds_addr;
}
@@ -541,13 +579,30 @@ ioat_interrupt_handler(void *arg)
ioat_process_events(ioat);
}
+static int
+chanerr_to_errno(uint32_t chanerr)
+{
+
+ if (chanerr == 0)
+ return (0);
+ if ((chanerr & (IOAT_CHANERR_XSADDERR | IOAT_CHANERR_XDADDERR)) != 0)
+ return (EFAULT);
+ if ((chanerr & (IOAT_CHANERR_RDERR | IOAT_CHANERR_WDERR)) != 0)
+ return (EIO);
+ /* This one is probably our fault: */
+ if ((chanerr & IOAT_CHANERR_NDADDERR) != 0)
+ return (EIO);
+ return (EIO);
+}
+
static void
ioat_process_events(struct ioat_softc *ioat)
{
struct ioat_descriptor *desc;
struct bus_dmadesc *dmadesc;
uint64_t comp_update, status;
- uint32_t completed;
+ uint32_t completed, chanerr;
+ int error;
mtx_lock(&ioat->cleanup_lock);
@@ -555,21 +610,20 @@ ioat_process_events(struct ioat_softc *ioat)
comp_update = *ioat->comp_update;
status = comp_update & IOAT_CHANSTS_COMPLETED_DESCRIPTOR_MASK;
- ioat_log_message(3, "%s\n", __func__);
+ CTR0(KTR_IOAT, __func__);
- if (status == ioat->last_seen) {
- mtx_unlock(&ioat->cleanup_lock);
- return;
- }
+ if (status == ioat->last_seen)
+ goto out;
while (1) {
desc = ioat_get_ring_entry(ioat, ioat->tail);
dmadesc = &desc->bus_dmadesc;
- ioat_log_message(3, "completing desc %d\n", ioat->tail);
+ CTR1(KTR_IOAT, "completing desc %d", ioat->tail);
- if (dmadesc->callback_fn)
- (*dmadesc->callback_fn)(dmadesc->callback_arg);
+ if (dmadesc->callback_fn != NULL)
+ dmadesc->callback_fn(dmadesc->callback_arg, 0);
+ completed++;
ioat->tail++;
if (desc->hw_desc_bus_addr == status)
break;
@@ -579,11 +633,54 @@ ioat_process_events(struct ioat_softc *ioat)
if (ioat->head == ioat->tail) {
ioat->is_completion_pending = FALSE;
- callout_reset(&ioat->timer, 5 * hz, ioat_timer_callback, ioat);
+ callout_reset(&ioat->timer, IOAT_INTR_TIMO,
+ ioat_timer_callback, ioat);
}
+out:
ioat_write_chanctrl(ioat, IOAT_CHANCTRL_RUN);
mtx_unlock(&ioat->cleanup_lock);
+
+ ioat_putn(ioat, completed, IOAT_ACTIVE_DESCR_REF);
+ wakeup(&ioat->tail);
+
+ if (!is_ioat_halted(comp_update))
+ return;
+
+ /*
+ * Fatal programming error on this DMA channel. Flush any outstanding
+ * work with error status and restart the engine.
+ */
+ ioat_log_message(0, "Channel halted due to fatal programming error\n");
+ mtx_lock(&ioat->submit_lock);
+ mtx_lock(&ioat->cleanup_lock);
+ ioat->quiescing = TRUE;
+
+ chanerr = ioat_read_4(ioat, IOAT_CHANERR_OFFSET);
+ ioat_halted_debug(ioat, chanerr);
+
+ while (ioat_get_active(ioat) > 0) {
+ desc = ioat_get_ring_entry(ioat, ioat->tail);
+ dmadesc = &desc->bus_dmadesc;
+ CTR1(KTR_IOAT, "completing err desc %d", ioat->tail);
+
+ if (dmadesc->callback_fn != NULL)
+ dmadesc->callback_fn(dmadesc->callback_arg,
+ chanerr_to_errno(chanerr));
+
+ ioat_putn_locked(ioat, 1, IOAT_ACTIVE_DESCR_REF);
+ ioat->tail++;
+ }
+
+ /* Clear error status */
+ ioat_write_4(ioat, IOAT_CHANERR_OFFSET, chanerr);
+
+ mtx_unlock(&ioat->cleanup_lock);
+ mtx_unlock(&ioat->submit_lock);
+
+ ioat_log_message(0, "Resetting channel to recover from error\n");
+ error = ioat_reset_hw(ioat);
+ KASSERT(error == 0, ("%s: reset failed: %d", __func__, error));
}
/*
@@ -592,10 +689,25 @@ ioat_process_events(struct ioat_softc *ioat)
bus_dmaengine_t
ioat_get_dmaengine(uint32_t index)
{
+ struct ioat_softc *sc;
+
+ if (index >= ioat_channel_index)
+ return (NULL);
- if (index < ioat_channel_index)
- return (&ioat_channel[index]->dmaengine);
- return (NULL);
+ sc = ioat_channel[index];
+ if (sc == NULL || sc->quiescing)
+ return (NULL);
+
+ return (&ioat_get(sc, IOAT_DMAENGINE_REF)->dmaengine);
+}
+
+void
+ioat_put_dmaengine(bus_dmaengine_t dmaengine)
+{
+ struct ioat_softc *ioat;
+
+ ioat = to_ioat_softc(dmaengine);
+ ioat_put(ioat, IOAT_DMAENGINE_REF);
}
void
@@ -605,7 +717,7 @@ ioat_acquire(bus_dmaengine_t dmaengine)
ioat = to_ioat_softc(dmaengine);
mtx_lock(&ioat->submit_lock);
- ioat_log_message(3, "%s\n", __func__);
+ CTR0(KTR_IOAT, __func__);
}
void
@@ -613,47 +725,77 @@ ioat_release(bus_dmaengine_t dmaengine)
{
struct ioat_softc *ioat;
- ioat_log_message(3, "%s\n", __func__);
ioat = to_ioat_softc(dmaengine);
- ioat_write_2(ioat, IOAT_DMACOUNT_OFFSET, (uint16_t)ioat->head);
+ CTR0(KTR_IOAT, __func__);
+ ioat_write_2(ioat, IOAT_DMACOUNT_OFFSET, (uint16_t)ioat->hw_head);
mtx_unlock(&ioat->submit_lock);
}
-struct bus_dmadesc *
-ioat_null(bus_dmaengine_t dmaengine, bus_dmaengine_callback_t callback_fn,
- void *callback_arg, uint32_t flags)
+static struct ioat_descriptor *
+ioat_op_generic(struct ioat_softc *ioat, uint8_t op,
+ uint32_t size, uint64_t src, uint64_t dst,
+ bus_dmaengine_callback_t callback_fn, void *callback_arg,
+ uint32_t flags)
{
- struct ioat_softc *ioat;
+ struct ioat_generic_hw_descriptor *hw_desc;
struct ioat_descriptor *desc;
- struct ioat_dma_hw_descriptor *hw_desc;
+ int mflags;
+
+ mtx_assert(&ioat->submit_lock, MA_OWNED);
KASSERT((flags & ~DMA_ALL_FLAGS) == 0, ("Unrecognized flag(s): %#x",
flags & ~DMA_ALL_FLAGS));
-
- ioat = to_ioat_softc(dmaengine);
-
- if (ioat_reserve_space_and_lock(ioat, 1) != 0)
+ if ((flags & DMA_NO_WAIT) != 0)
+ mflags = M_NOWAIT;
+ else
+ mflags = M_WAITOK;
+
+ if (size > ioat->max_xfer_size) {
+ ioat_log_message(0, "%s: max_xfer_size = %d, requested = %u\n",
+ __func__, ioat->max_xfer_size, (unsigned)size);
return (NULL);
+ }
- ioat_log_message(3, "%s\n", __func__);
+ if (ioat_reserve_space(ioat, 1, mflags) != 0)
+ return (NULL);
desc = ioat_get_ring_entry(ioat, ioat->head);
- hw_desc = desc->u.dma;
+ hw_desc = desc->u.generic;
hw_desc->u.control_raw = 0;
- hw_desc->u.control.null = 1;
- hw_desc->u.control.completion_update = 1;
+ hw_desc->u.control_generic.op = op;
+ hw_desc->u.control_generic.completion_update = 1;
if ((flags & DMA_INT_EN) != 0)
- hw_desc->u.control.int_enable = 1;
+ hw_desc->u.control_generic.int_enable = 1;
- hw_desc->size = 8;
- hw_desc->src_addr = 0;
- hw_desc->dest_addr = 0;
+ hw_desc->size = size;
+ hw_desc->src_addr = src;
+ hw_desc->dest_addr = dst;
desc->bus_dmadesc.callback_fn = callback_fn;
desc->bus_dmadesc.callback_arg = callback_arg;
+ return (desc);
+}
+struct bus_dmadesc *
+ioat_null(bus_dmaengine_t dmaengine, bus_dmaengine_callback_t callback_fn,
+ void *callback_arg, uint32_t flags)
+{
+ struct ioat_dma_hw_descriptor *hw_desc;
+ struct ioat_descriptor *desc;
+ struct ioat_softc *ioat;
+
+ CTR0(KTR_IOAT, __func__);
+ ioat = to_ioat_softc(dmaengine);
+
+ desc = ioat_op_generic(ioat, IOAT_OP_COPY, 8, 0, 0, callback_fn,
+ callback_arg, flags);
+ if (desc == NULL)
+ return (NULL);
+
+ hw_desc = desc->u.dma;
+ hw_desc->u.control.null = 1;
ioat_submit_single(ioat);
return (&desc->bus_dmadesc);
}
@@ -663,45 +805,65 @@ ioat_copy(bus_dmaengine_t dmaengine, bus_addr_t dst,
bus_addr_t src, bus_size_t len, bus_dmaengine_callback_t callback_fn,
void *callback_arg, uint32_t flags)
{
- struct ioat_descriptor *desc;
struct ioat_dma_hw_descriptor *hw_desc;
+ struct ioat_descriptor *desc;
struct ioat_softc *ioat;
- KASSERT((flags & ~DMA_ALL_FLAGS) == 0, ("Unrecognized flag(s): %#x",
- flags & ~DMA_ALL_FLAGS));
-
+ CTR0(KTR_IOAT, __func__);
ioat = to_ioat_softc(dmaengine);
- if (len > ioat->max_xfer_size) {
- ioat_log_message(0, "%s: max_xfer_size = %d, requested = %d\n",
- __func__, ioat->max_xfer_size, (int)len);
+ if (((src | dst) & (0xffffull << 48)) != 0) {
+ ioat_log_message(0, "%s: High 16 bits of src/dst invalid\n",
+ __func__);
return (NULL);
}
- if (ioat_reserve_space_and_lock(ioat, 1) != 0)
+ desc = ioat_op_generic(ioat, IOAT_OP_COPY, len, src, dst, callback_fn,
+ callback_arg, flags);
+ if (desc == NULL)
return (NULL);
- ioat_log_message(3, "%s\n", __func__);
-
- desc = ioat_get_ring_entry(ioat, ioat->head);
hw_desc = desc->u.dma;
+ if (g_ioat_debug_level >= 3)
+ dump_descriptor(hw_desc);
- hw_desc->u.control_raw = 0;
- hw_desc->u.control.completion_update = 1;
+ ioat_submit_single(ioat);
+ return (&desc->bus_dmadesc);
+}
- if ((flags & DMA_INT_EN) != 0)
- hw_desc->u.control.int_enable = 1;
+struct bus_dmadesc *
+ioat_blockfill(bus_dmaengine_t dmaengine, bus_addr_t dst, uint64_t fillpattern,
+ bus_size_t len, bus_dmaengine_callback_t callback_fn, void *callback_arg,
+ uint32_t flags)
+{
+ struct ioat_fill_hw_descriptor *hw_desc;
+ struct ioat_descriptor *desc;
+ struct ioat_softc *ioat;
- hw_desc->size = len;
- hw_desc->src_addr = src;
- hw_desc->dest_addr = dst;
+ CTR0(KTR_IOAT, __func__);
+ ioat = to_ioat_softc(dmaengine);
+
+ if ((ioat->capabilities & IOAT_DMACAP_BFILL) == 0) {
+ ioat_log_message(0, "%s: Device lacks BFILL capability\n",
+ __func__);
+ return (NULL);
+ }
+
+ if ((dst & (0xffffull << 48)) != 0) {
+ ioat_log_message(0, "%s: High 16 bits of dst invalid\n",
+ __func__);
+ return (NULL);
+ }
+
+ desc = ioat_op_generic(ioat, IOAT_OP_FILL, len, fillpattern, dst,
+ callback_fn, callback_arg, flags);
+ if (desc == NULL)
+ return (NULL);
+ hw_desc = desc->u.fill;
if (g_ioat_debug_level >= 3)
dump_descriptor(hw_desc);
- desc->bus_dmadesc.callback_fn = callback_fn;
- desc->bus_dmadesc.callback_arg = callback_arg;
-
ioat_submit_single(ioat);
return (&desc->bus_dmadesc);
}
@@ -724,26 +886,43 @@ ioat_get_ring_space(struct ioat_softc *ioat)
}
static struct ioat_descriptor *
-ioat_alloc_ring_entry(struct ioat_softc *ioat)
+ioat_alloc_ring_entry(struct ioat_softc *ioat, int mflags)
{
- struct ioat_dma_hw_descriptor *hw_desc;
+ struct ioat_generic_hw_descriptor *hw_desc;
struct ioat_descriptor *desc;
+ int error, busdmaflag;
+
+ error = ENOMEM;
+ hw_desc = NULL;
- desc = malloc(sizeof(struct ioat_descriptor), M_IOAT, M_NOWAIT);
+ if ((mflags & M_WAITOK) != 0)
+ busdmaflag = BUS_DMA_WAITOK;
+ else
+ busdmaflag = BUS_DMA_NOWAIT;
+
+ desc = malloc(sizeof(*desc), M_IOAT, mflags);
if (desc == NULL)
- return (NULL);
+ goto out;
- bus_dmamem_alloc(ioat->hw_desc_tag, (void **)&hw_desc, BUS_DMA_ZERO,
- &ioat->hw_desc_map);
- if (hw_desc == NULL) {
- free(desc, M_IOAT);
- return (NULL);
- }
+ bus_dmamem_alloc(ioat->hw_desc_tag, (void **)&hw_desc,
+ BUS_DMA_ZERO | busdmaflag, &ioat->hw_desc_map);
+ if (hw_desc == NULL)
+ goto out;
+
+ memset(&desc->bus_dmadesc, 0, sizeof(desc->bus_dmadesc));
+ desc->u.generic = hw_desc;
- bus_dmamap_load(ioat->hw_desc_tag, ioat->hw_desc_map, hw_desc,
- sizeof(*hw_desc), ioat_dmamap_cb, &desc->hw_desc_bus_addr, 0);
+ error = bus_dmamap_load(ioat->hw_desc_tag, ioat->hw_desc_map, hw_desc,
+ sizeof(*hw_desc), ioat_dmamap_cb, &desc->hw_desc_bus_addr,
+ busdmaflag);
+ if (error)
+ goto out;
- desc->u.dma = hw_desc;
+out:
+ if (error) {
+ ioat_free_ring_entry(ioat, desc);
+ return (NULL);
+ }
return (desc);
}
@@ -754,28 +933,140 @@ ioat_free_ring_entry(struct ioat_softc *ioat, struct ioat_descriptor *desc)
if (desc == NULL)
return;
- if (desc->u.dma)
- bus_dmamem_free(ioat->hw_desc_tag, desc->u.dma,
+ if (desc->u.generic)
+ bus_dmamem_free(ioat->hw_desc_tag, desc->u.generic,
ioat->hw_desc_map);
free(desc, M_IOAT);
}
+/*
+ * Reserves space in this IOAT descriptor ring by ensuring enough slots remain
+ * for 'num_descs'.
+ *
+ * If mflags contains M_WAITOK, blocks until enough space is available.
+ *
+ * Returns zero on success, or an errno on error. If num_descs is beyond the
+ * maximum ring size, returns EINVAl; if allocation would block and mflags
+ * contains M_NOWAIT, returns EAGAIN.
+ *
+ * Must be called with the submit_lock held; returns with the lock held. The
+ * lock may be dropped to allocate the ring.
+ *
+ * (The submit_lock is needed to add any entries to the ring, so callers are
+ * assured enough room is available.)
+ */
static int
-ioat_reserve_space_and_lock(struct ioat_softc *ioat, int num_descs)
+ioat_reserve_space(struct ioat_softc *ioat, uint32_t num_descs, int mflags)
{
- boolean_t retry;
+ struct ioat_descriptor **new_ring;
+ uint32_t order;
+ int error;
- while (1) {
+ mtx_assert(&ioat->submit_lock, MA_OWNED);
+ error = 0;
+
+ if (num_descs < 1 || num_descs > (1 << IOAT_MAX_ORDER)) {
+ error = EINVAL;
+ goto out;
+ }
+ if (ioat->quiescing) {
+ error = ENXIO;
+ goto out;
+ }
+
+ for (;;) {
if (ioat_get_ring_space(ioat) >= num_descs)
- return (0);
+ goto out;
+
+ order = ioat->ring_size_order;
+ if (ioat->is_resize_pending || order == IOAT_MAX_ORDER) {
+ if ((mflags & M_WAITOK) != 0) {
+ msleep(&ioat->tail, &ioat->submit_lock, 0,
+ "ioat_rsz", 0);
+ continue;
+ }
- mtx_lock(&ioat->cleanup_lock);
- retry = resize_ring(ioat, ioat->ring_size_order + 1);
- mtx_unlock(&ioat->cleanup_lock);
+ error = EAGAIN;
+ break;
+ }
- if (!retry)
- return (ENOMEM);
+ ioat->is_resize_pending = TRUE;
+ for (;;) {
+ mtx_unlock(&ioat->submit_lock);
+
+ new_ring = ioat_prealloc_ring(ioat, 1 << (order + 1),
+ TRUE, mflags);
+
+ mtx_lock(&ioat->submit_lock);
+ KASSERT(ioat->ring_size_order == order,
+ ("is_resize_pending should protect order"));
+
+ if (new_ring == NULL) {
+ KASSERT((mflags & M_WAITOK) == 0,
+ ("allocation failed"));
+ error = EAGAIN;
+ break;
+ }
+
+ error = ring_grow(ioat, order, new_ring);
+ if (error == 0)
+ break;
+ }
+ ioat->is_resize_pending = FALSE;
+ wakeup(&ioat->tail);
+ if (error)
+ break;
+ }
+
+out:
+ mtx_assert(&ioat->submit_lock, MA_OWNED);
+ return (error);
+}
+
+static struct ioat_descriptor **
+ioat_prealloc_ring(struct ioat_softc *ioat, uint32_t size, boolean_t need_dscr,
+ int mflags)
+{
+ struct ioat_descriptor **ring;
+ uint32_t i;
+ int error;
+
+ KASSERT(size > 0 && powerof2(size), ("bogus size"));
+
+ ring = malloc(size * sizeof(*ring), M_IOAT, M_ZERO | mflags);
+ if (ring == NULL)
+ return (NULL);
+
+ if (need_dscr) {
+ error = ENOMEM;
+ for (i = size / 2; i < size; i++) {
+ ring[i] = ioat_alloc_ring_entry(ioat, mflags);
+ if (ring[i] == NULL)
+ goto out;
+ ring[i]->id = i;
+ }
}
+ error = 0;
+
+out:
+ if (error != 0 && ring != NULL) {
+ ioat_free_ring(ioat, size, ring);
+ ring = NULL;
+ }
+ return (ring);
+}
+
+static void
+ioat_free_ring(struct ioat_softc *ioat, uint32_t size,
+ struct ioat_descriptor **ring)
+{
+ uint32_t i;
+
+ for (i = 0; i < size; i++) {
+ if (ring[i] != NULL)
+ ioat_free_ring_entry(ioat, ring[i]);
+ }
+ free(ring, M_IOAT);
}
static struct ioat_descriptor *
@@ -785,151 +1076,218 @@ ioat_get_ring_entry(struct ioat_softc *ioat, uint32_t index)
return (ioat->ring[index % (1 << ioat->ring_size_order)]);
}
-static boolean_t
-resize_ring(struct ioat_softc *ioat, int order)
+static int
+ring_grow(struct ioat_softc *ioat, uint32_t oldorder,
+ struct ioat_descriptor **newring)
{
- struct ioat_descriptor **ring;
- struct ioat_descriptor *next;
+ struct ioat_descriptor *tmp, *next;
struct ioat_dma_hw_descriptor *hw;
- struct ioat_descriptor *ent;
- uint32_t current_size, active, new_size, i, new_idx, current_idx;
- uint32_t new_idx2;
+ uint32_t oldsize, newsize, head, tail, i, end;
+ int error;
- current_size = 1 << ioat->ring_size_order;
- active = (ioat->head - ioat->tail) & (current_size - 1);
- new_size = 1 << order;
+ CTR0(KTR_IOAT, __func__);
- if (order > IOAT_MAX_ORDER)
- return (FALSE);
+ mtx_assert(&ioat->submit_lock, MA_OWNED);
- /*
- * when shrinking, verify that we can hold the current active
- * set in the new ring
- */
- if (active >= new_size)
- return (FALSE);
+ if (oldorder != ioat->ring_size_order || oldorder >= IOAT_MAX_ORDER) {
+ error = EINVAL;
+ goto out;
+ }
- /* allocate the array to hold the software ring */
- ring = malloc(new_size * sizeof(*ring), M_IOAT, M_ZERO | M_NOWAIT);
- if (ring == NULL)
- return (FALSE);
+ oldsize = (1 << oldorder);
+ newsize = (1 << (oldorder + 1));
- ioat_log_message(2, "ring resize: new: %d old: %d\n",
- new_size, current_size);
+ mtx_lock(&ioat->cleanup_lock);
- /* allocate/trim descriptors as needed */
- if (new_size > current_size) {
- /* copy current descriptors to the new ring */
- for (i = 0; i < current_size; i++) {
- current_idx = (ioat->tail + i) & (current_size - 1);
- new_idx = (ioat->tail + i) & (new_size - 1);
+ head = ioat->head & (oldsize - 1);
+ tail = ioat->tail & (oldsize - 1);
- ring[new_idx] = ioat->ring[current_idx];
- ring[new_idx]->id = new_idx;
- }
+ /* Copy old descriptors to new ring */
+ for (i = 0; i < oldsize; i++)
+ newring[i] = ioat->ring[i];
- /* add new descriptors to the ring */
- for (i = current_size; i < new_size; i++) {
- new_idx = (ioat->tail + i) & (new_size - 1);
-
- ring[new_idx] = ioat_alloc_ring_entry(ioat);
- if (ring[new_idx] == NULL) {
- while (i--) {
- new_idx2 = (ioat->tail + i) &
- (new_size - 1);
-
- ioat_free_ring_entry(ioat,
- ring[new_idx2]);
- }
- free(ring, M_IOAT);
- return (FALSE);
- }
- ring[new_idx]->id = new_idx;
- }
+ /*
+ * If head has wrapped but tail hasn't, we must swap some descriptors
+ * around so that tail can increment directly to head.
+ */
+ if (head < tail) {
+ for (i = 0; i <= head; i++) {
+ tmp = newring[oldsize + i];
- for (i = current_size - 1; i < new_size; i++) {
- new_idx = (ioat->tail + i) & (new_size - 1);
- next = ring[(new_idx + 1) & (new_size - 1)];
- hw = ring[new_idx]->u.dma;
+ newring[oldsize + i] = newring[i];
+ newring[oldsize + i]->id = oldsize + i;
- hw->next = next->hw_desc_bus_addr;
+ newring[i] = tmp;
+ newring[i]->id = i;
}
+ head += oldsize;
+ }
+
+ KASSERT(head >= tail, ("invariants"));
+
+ /* Head didn't wrap; we only need to link in oldsize..newsize */
+ if (head < oldsize) {
+ i = oldsize - 1;
+ end = newsize;
} else {
- /*
- * copy current descriptors to the new ring, dropping the
- * removed descriptors
- */
- for (i = 0; i < new_size; i++) {
- current_idx = (ioat->tail + i) & (current_size - 1);
- new_idx = (ioat->tail + i) & (new_size - 1);
-
- ring[new_idx] = ioat->ring[current_idx];
- ring[new_idx]->id = new_idx;
- }
+ /* Head did wrap; link newhead..newsize and 0..oldhead */
+ i = head;
+ end = newsize + (head - oldsize) + 1;
+ }
- /* free deleted descriptors */
- for (i = new_size; i < current_size; i++) {
- ent = ioat_get_ring_entry(ioat, ioat->tail + i);
- ioat_free_ring_entry(ioat, ent);
- }
+ /*
+ * Fix up hardware ring, being careful not to trample the active
+ * section (tail -> head).
+ */
+ for (; i < end; i++) {
+ KASSERT((i & (newsize - 1)) < tail ||
+ (i & (newsize - 1)) >= head, ("trampling snake"));
- /* fix up hardware ring */
- hw = ring[(ioat->tail + new_size - 1) & (new_size - 1)]->u.dma;
- next = ring[(ioat->tail + new_size) & (new_size - 1)];
+ next = newring[(i + 1) & (newsize - 1)];
+ hw = newring[i & (newsize - 1)]->u.dma;
hw->next = next->hw_desc_bus_addr;
}
free(ioat->ring, M_IOAT);
- ioat->ring = ring;
- ioat->ring_size_order = order;
+ ioat->ring = newring;
+ ioat->ring_size_order = oldorder + 1;
+ ioat->tail = tail;
+ ioat->head = head;
+ error = 0;
+
+ mtx_unlock(&ioat->cleanup_lock);
+out:
+ if (error)
+ ioat_free_ring(ioat, (1 << (oldorder + 1)), newring);
+ return (error);
+}
+
+static int
+ring_shrink(struct ioat_softc *ioat, uint32_t oldorder,
+ struct ioat_descriptor **newring)
+{
+ struct ioat_dma_hw_descriptor *hw;
+ struct ioat_descriptor *ent, *next;
+ uint32_t oldsize, newsize, current_idx, new_idx, i;
+ int error;
+
+ CTR0(KTR_IOAT, __func__);
+
+ mtx_assert(&ioat->submit_lock, MA_OWNED);
+
+ if (oldorder != ioat->ring_size_order || oldorder <= IOAT_MIN_ORDER) {
+ error = EINVAL;
+ goto out_unlocked;
+ }
+
+ oldsize = (1 << oldorder);
+ newsize = (1 << (oldorder - 1));
+
+ mtx_lock(&ioat->cleanup_lock);
+
+ /* Can't shrink below current active set! */
+ if (ioat_get_active(ioat) >= newsize) {
+ error = ENOMEM;
+ goto out;
+ }
+
+ /*
+ * Copy current descriptors to the new ring, dropping the removed
+ * descriptors.
+ */
+ for (i = 0; i < newsize; i++) {
+ current_idx = (ioat->tail + i) & (oldsize - 1);
+ new_idx = (ioat->tail + i) & (newsize - 1);
+
+ newring[new_idx] = ioat->ring[current_idx];
+ newring[new_idx]->id = new_idx;
+ }
+
+ /* Free deleted descriptors */
+ for (i = newsize; i < oldsize; i++) {
+ ent = ioat_get_ring_entry(ioat, ioat->tail + i);
+ ioat_free_ring_entry(ioat, ent);
+ }
+
+ /* Fix up hardware ring. */
+ hw = newring[(ioat->tail + newsize - 1) & (newsize - 1)]->u.dma;
+ next = newring[(ioat->tail + newsize) & (newsize - 1)];
+ hw->next = next->hw_desc_bus_addr;
+
+ free(ioat->ring, M_IOAT);
+ ioat->ring = newring;
+ ioat->ring_size_order = oldorder - 1;
+ error = 0;
- return (TRUE);
+out:
+ mtx_unlock(&ioat->cleanup_lock);
+out_unlocked:
+ if (error)
+ ioat_free_ring(ioat, (1 << (oldorder - 1)), newring);
+ return (error);
}
static void
-ioat_timer_callback(void *arg)
+ioat_halted_debug(struct ioat_softc *ioat, uint32_t chanerr)
{
struct ioat_descriptor *desc;
+
+ ioat_log_message(0, "Channel halted (%b)\n", (int)chanerr,
+ IOAT_CHANERR_STR);
+ if (chanerr == 0)
+ return;
+
+ mtx_assert(&ioat->cleanup_lock, MA_OWNED);
+
+ desc = ioat_get_ring_entry(ioat, ioat->tail + 0);
+ dump_descriptor(desc->u.raw);
+
+ desc = ioat_get_ring_entry(ioat, ioat->tail + 1);
+ dump_descriptor(desc->u.raw);
+}
+
+static void
+ioat_timer_callback(void *arg)
+{
+ struct ioat_descriptor **newring;
struct ioat_softc *ioat;
- uint64_t status;
- uint32_t chanerr;
+ uint32_t order;
ioat = arg;
- ioat_log_message(2, "%s\n", __func__);
+ ioat_log_message(1, "%s\n", __func__);
if (ioat->is_completion_pending) {
- status = ioat_get_chansts(ioat);
+ ioat_process_events(ioat);
+ return;
+ }
- /*
- * When halted due to errors, check for channel programming
- * errors before advancing the completion state.
- */
- if (is_ioat_halted(status)) {
- chanerr = ioat_read_4(ioat, IOAT_CHANERR_OFFSET);
- ioat_log_message(0, "Channel halted (%x)\n", chanerr);
+ /* Slowly scale the ring down if idle. */
+ mtx_lock(&ioat->submit_lock);
+ order = ioat->ring_size_order;
+ if (ioat->is_resize_pending || order == IOAT_MIN_ORDER) {
+ mtx_unlock(&ioat->submit_lock);
+ goto out;
+ }
+ ioat->is_resize_pending = TRUE;
+ mtx_unlock(&ioat->submit_lock);
- desc = ioat_get_ring_entry(ioat, ioat->tail + 0);
- dump_descriptor(desc->u.raw);
+ newring = ioat_prealloc_ring(ioat, 1 << (order - 1), FALSE,
+ M_NOWAIT);
- desc = ioat_get_ring_entry(ioat, ioat->tail + 1);
- dump_descriptor(desc->u.raw);
- }
- ioat_process_events(ioat);
- } else {
- mtx_lock(&ioat->submit_lock);
- mtx_lock(&ioat->cleanup_lock);
+ mtx_lock(&ioat->submit_lock);
+ KASSERT(ioat->ring_size_order == order,
+ ("resize_pending protects order"));
- if (ioat_get_active(ioat) == 0 &&
- ioat->ring_size_order > IOAT_MIN_ORDER)
- resize_ring(ioat, ioat->ring_size_order - 1);
+ if (newring != NULL)
+ ring_shrink(ioat, order, newring);
- mtx_unlock(&ioat->cleanup_lock);
- mtx_unlock(&ioat->submit_lock);
+ ioat->is_resize_pending = FALSE;
+ mtx_unlock(&ioat->submit_lock);
- if (ioat->ring_size_order > IOAT_MIN_ORDER)
- callout_reset(&ioat->timer, 5 * hz,
- ioat_timer_callback, ioat);
- }
+out:
+ if (ioat->ring_size_order > IOAT_MIN_ORDER)
+ callout_reset(&ioat->timer, 10 * hz,
+ ioat_timer_callback, ioat);
}
/*
@@ -939,12 +1297,14 @@ static void
ioat_submit_single(struct ioat_softc *ioat)
{
+ ioat_get(ioat, IOAT_ACTIVE_DESCR_REF);
atomic_add_rel_int(&ioat->head, 1);
+ atomic_add_rel_int(&ioat->hw_head, 1);
if (!ioat->is_completion_pending) {
ioat->is_completion_pending = TRUE;
- callout_reset(&ioat->timer, 10 * hz, ioat_timer_callback,
- ioat);
+ callout_reset(&ioat->timer, IOAT_INTR_TIMO,
+ ioat_timer_callback, ioat);
}
}
@@ -953,7 +1313,13 @@ ioat_reset_hw(struct ioat_softc *ioat)
{
uint64_t status;
uint32_t chanerr;
- int timeout;
+ unsigned timeout;
+ int error;
+
+ mtx_lock(IOAT_REFLK);
+ ioat->quiescing = TRUE;
+ ioat_drain_locked(ioat);
+ mtx_unlock(IOAT_REFLK);
status = ioat_get_chansts(ioat);
if (is_ioat_active(status) || is_ioat_idle(status))
@@ -965,8 +1331,12 @@ ioat_reset_hw(struct ioat_softc *ioat)
DELAY(1000);
status = ioat_get_chansts(ioat);
}
- if (timeout == 20)
- return (ETIMEDOUT);
+ if (timeout == 20) {
+ error = ETIMEDOUT;
+ goto out;
+ }
+
+ KASSERT(ioat_get_active(ioat) == 0, ("active after quiesce"));
chanerr = ioat_read_4(ioat, IOAT_CHANERR_OFFSET);
ioat_write_4(ioat, IOAT_CHANERR_OFFSET, chanerr);
@@ -984,21 +1354,165 @@ ioat_reset_hw(struct ioat_softc *ioat)
* BDXDE and BWD models reset MSI-X registers on device reset.
* Save/restore their contents manually.
*/
- if (ioat_model_resets_msix(ioat))
+ if (ioat_model_resets_msix(ioat)) {
+ ioat_log_message(1, "device resets MSI-X registers; saving\n");
pci_save_state(ioat->device);
+ }
ioat_reset(ioat);
/* Wait at most 20 ms */
for (timeout = 0; ioat_reset_pending(ioat) && timeout < 20; timeout++)
DELAY(1000);
- if (timeout == 20)
- return (ETIMEDOUT);
+ if (timeout == 20) {
+ error = ETIMEDOUT;
+ goto out;
+ }
- if (ioat_model_resets_msix(ioat))
+ if (ioat_model_resets_msix(ioat)) {
+ ioat_log_message(1, "device resets registers; restored\n");
pci_restore_state(ioat->device);
+ }
- return (0);
+ /* Reset attempts to return the hardware to "halted." */
+ status = ioat_get_chansts(ioat);
+ if (is_ioat_active(status) || is_ioat_idle(status)) {
+ /* So this really shouldn't happen... */
+ ioat_log_message(0, "Device is active after a reset?\n");
+ ioat_write_chanctrl(ioat, IOAT_CHANCTRL_RUN);
+ error = 0;
+ goto out;
+ }
+
+ chanerr = ioat_read_4(ioat, IOAT_CHANERR_OFFSET);
+ if (chanerr != 0) {
+ mtx_lock(&ioat->cleanup_lock);
+ ioat_halted_debug(ioat, chanerr);
+ mtx_unlock(&ioat->cleanup_lock);
+ error = EIO;
+ goto out;
+ }
+
+ /*
+ * Bring device back online after reset. Writing CHAINADDR brings the
+ * device back to active.
+ *
+ * The internal ring counter resets to zero, so we have to start over
+ * at zero as well.
+ */
+ ioat->tail = ioat->head = ioat->hw_head = 0;
+ ioat->last_seen = 0;
+
+ ioat_write_chanctrl(ioat, IOAT_CHANCTRL_RUN);
+ ioat_write_chancmp(ioat, ioat->comp_update_bus_addr);
+ ioat_write_chainaddr(ioat, ioat->ring[0]->hw_desc_bus_addr);
+ error = 0;
+
+out:
+ mtx_lock(IOAT_REFLK);
+ ioat->quiescing = FALSE;
+ mtx_unlock(IOAT_REFLK);
+
+ if (error == 0)
+ error = ioat_start_channel(ioat);
+
+ return (error);
+}
+
+static int
+sysctl_handle_chansts(SYSCTL_HANDLER_ARGS)
+{
+ struct ioat_softc *ioat;
+ struct sbuf sb;
+ uint64_t status;
+ int error;
+
+ ioat = arg1;
+
+ status = ioat_get_chansts(ioat) & IOAT_CHANSTS_STATUS;
+
+ sbuf_new_for_sysctl(&sb, NULL, 256, req);
+ switch (status) {
+ case IOAT_CHANSTS_ACTIVE:
+ sbuf_printf(&sb, "ACTIVE");
+ break;
+ case IOAT_CHANSTS_IDLE:
+ sbuf_printf(&sb, "IDLE");
+ break;
+ case IOAT_CHANSTS_SUSPENDED:
+ sbuf_printf(&sb, "SUSPENDED");
+ break;
+ case IOAT_CHANSTS_HALTED:
+ sbuf_printf(&sb, "HALTED");
+ break;
+ case IOAT_CHANSTS_ARMED:
+ sbuf_printf(&sb, "ARMED");
+ break;
+ default:
+ sbuf_printf(&sb, "UNKNOWN");
+ break;
+ }
+ error = sbuf_finish(&sb);
+ sbuf_delete(&sb);
+
+ if (error != 0 || req->newptr == NULL)
+ return (error);
+ return (EINVAL);
+}
+
+static int
+sysctl_handle_error(SYSCTL_HANDLER_ARGS)
+{
+ struct ioat_descriptor *desc;
+ struct ioat_softc *ioat;
+ int error, arg;
+
+ ioat = arg1;
+
+ arg = 0;
+ error = SYSCTL_OUT(req, &arg, sizeof(arg));
+ if (error != 0 || req->newptr == NULL)
+ return (error);
+
+ error = SYSCTL_IN(req, &arg, sizeof(arg));
+ if (error != 0)
+ return (error);
+
+ if (arg != 0) {
+ ioat_acquire(&ioat->dmaengine);
+ desc = ioat_op_generic(ioat, IOAT_OP_COPY, 1,
+ 0xffff000000000000ull, 0xffff000000000000ull, NULL, NULL,
+ 0);
+ if (desc == NULL)
+ error = ENOMEM;
+ else
+ ioat_submit_single(ioat);
+ ioat_release(&ioat->dmaengine);
+ }
+ return (error);
+}
+
+static int
+sysctl_handle_reset(SYSCTL_HANDLER_ARGS)
+{
+ struct ioat_softc *ioat;
+ int error, arg;
+
+ ioat = arg1;
+
+ arg = 0;
+ error = SYSCTL_OUT(req, &arg, sizeof(arg));
+ if (error != 0 || req->newptr == NULL)
+ return (error);
+
+ error = SYSCTL_IN(req, &arg, sizeof(arg));
+ if (error != 0)
+ return (error);
+
+ if (arg != 0)
+ error = ioat_reset_hw(ioat);
+
+ return (error);
}
static void
@@ -1016,39 +1530,136 @@ dump_descriptor(void *hw_desc)
static void
ioat_setup_sysctl(device_t device)
{
- struct sysctl_ctx_list *sysctl_ctx;
- struct sysctl_oid *sysctl_tree;
+ struct sysctl_oid_list *par;
+ struct sysctl_ctx_list *ctx;
+ struct sysctl_oid *tree;
struct ioat_softc *ioat;
ioat = DEVICE2SOFTC(device);
- sysctl_ctx = device_get_sysctl_ctx(device);
- sysctl_tree = device_get_sysctl_tree(device);
-
- SYSCTL_ADD_UINT(sysctl_ctx, SYSCTL_CHILDREN(sysctl_tree), OID_AUTO,
- "ring_size_order", CTLFLAG_RD, &ioat->ring_size_order,
- 0, "HW descriptor ring size order");
- SYSCTL_ADD_UINT(sysctl_ctx, SYSCTL_CHILDREN(sysctl_tree), OID_AUTO,
- "head", CTLFLAG_RD, &ioat->head,
- 0, "HW descriptor head pointer index");
- SYSCTL_ADD_UINT(sysctl_ctx, SYSCTL_CHILDREN(sysctl_tree), OID_AUTO,
- "tail", CTLFLAG_RD, &ioat->tail,
- 0, "HW descriptor tail pointer index");
+ ctx = device_get_sysctl_ctx(device);
+ tree = device_get_sysctl_tree(device);
+ par = SYSCTL_CHILDREN(tree);
+
+ SYSCTL_ADD_INT(ctx, par, OID_AUTO, "version", CTLFLAG_RD,
+ &ioat->version, 0, "HW version (0xMM form)");
+ SYSCTL_ADD_UINT(ctx, par, OID_AUTO, "max_xfer_size", CTLFLAG_RD,
+ &ioat->max_xfer_size, 0, "HW maximum transfer size");
+
+ SYSCTL_ADD_UINT(ctx, par, OID_AUTO, "ring_size_order", CTLFLAG_RD,
+ &ioat->ring_size_order, 0, "SW descriptor ring size order");
+ SYSCTL_ADD_UINT(ctx, par, OID_AUTO, "head", CTLFLAG_RD, &ioat->head, 0,
+ "SW descriptor head pointer index");
+ SYSCTL_ADD_UINT(ctx, par, OID_AUTO, "tail", CTLFLAG_RD, &ioat->tail, 0,
+ "SW descriptor tail pointer index");
+ SYSCTL_ADD_UINT(ctx, par, OID_AUTO, "hw_head", CTLFLAG_RD,
+ &ioat->hw_head, 0, "HW DMACOUNT");
+
+ SYSCTL_ADD_UQUAD(ctx, par, OID_AUTO, "last_completion", CTLFLAG_RD,
+ ioat->comp_update, "HW addr of last completion");
+
+ SYSCTL_ADD_INT(ctx, par, OID_AUTO, "is_resize_pending", CTLFLAG_RD,
+ &ioat->is_resize_pending, 0, "resize pending");
+ SYSCTL_ADD_INT(ctx, par, OID_AUTO, "is_completion_pending", CTLFLAG_RD,
+ &ioat->is_completion_pending, 0, "completion pending");
+ SYSCTL_ADD_INT(ctx, par, OID_AUTO, "is_reset_pending", CTLFLAG_RD,
+ &ioat->is_reset_pending, 0, "reset pending");
+ SYSCTL_ADD_INT(ctx, par, OID_AUTO, "is_channel_running", CTLFLAG_RD,
+ &ioat->is_channel_running, 0, "channel running");
+
+ SYSCTL_ADD_PROC(ctx, par, OID_AUTO, "force_hw_reset",
+ CTLTYPE_INT | CTLFLAG_RW, ioat, 0, sysctl_handle_reset, "I",
+ "Set to non-zero to reset the hardware");
+ SYSCTL_ADD_PROC(ctx, par, OID_AUTO, "force_hw_error",
+ CTLTYPE_INT | CTLFLAG_RW, ioat, 0, sysctl_handle_error, "I",
+ "Set to non-zero to inject a recoverable hardware error");
+ SYSCTL_ADD_PROC(ctx, par, OID_AUTO, "chansts",
+ CTLTYPE_STRING | CTLFLAG_RD, ioat, 0, sysctl_handle_chansts, "A",
+ "String of the channel status");
}
-void
-ioat_log_message(int verbosity, char *fmt, ...)
+static inline struct ioat_softc *
+ioat_get(struct ioat_softc *ioat, enum ioat_ref_kind kind)
+{
+ uint32_t old;
+
+ KASSERT(kind < IOAT_NUM_REF_KINDS, ("bogus"));
+
+ old = atomic_fetchadd_32(&ioat->refcnt, 1);
+ KASSERT(old < UINT32_MAX, ("refcnt overflow"));
+
+#ifdef INVARIANTS
+ old = atomic_fetchadd_32(&ioat->refkinds[kind], 1);
+ KASSERT(old < UINT32_MAX, ("refcnt kind overflow"));
+#endif
+
+ return (ioat);
+}
+
+static inline void
+ioat_putn(struct ioat_softc *ioat, uint32_t n, enum ioat_ref_kind kind)
{
- va_list argp;
- char buffer[512];
- struct timeval tv;
- if (verbosity > g_ioat_debug_level)
+ _ioat_putn(ioat, n, kind, FALSE);
+}
+
+static inline void
+ioat_putn_locked(struct ioat_softc *ioat, uint32_t n, enum ioat_ref_kind kind)
+{
+
+ _ioat_putn(ioat, n, kind, TRUE);
+}
+
+static inline void
+_ioat_putn(struct ioat_softc *ioat, uint32_t n, enum ioat_ref_kind kind,
+ boolean_t locked)
+{
+ uint32_t old;
+
+ KASSERT(kind < IOAT_NUM_REF_KINDS, ("bogus"));
+
+ if (n == 0)
return;
- va_start(argp, fmt);
- vsnprintf(buffer, sizeof(buffer) - 1, fmt, argp);
- va_end(argp);
- microuptime(&tv);
+#ifdef INVARIANTS
+ old = atomic_fetchadd_32(&ioat->refkinds[kind], -n);
+ KASSERT(old >= n, ("refcnt kind underflow"));
+#endif
+
+ /* Skip acquiring the lock if resulting refcnt > 0. */
+ for (;;) {
+ old = ioat->refcnt;
+ if (old <= n)
+ break;
+ if (atomic_cmpset_32(&ioat->refcnt, old, old - n))
+ return;
+ }
+
+ if (locked)
+ mtx_assert(IOAT_REFLK, MA_OWNED);
+ else
+ mtx_lock(IOAT_REFLK);
+
+ old = atomic_fetchadd_32(&ioat->refcnt, -n);
+ KASSERT(old >= n, ("refcnt error"));
+
+ if (old == n)
+ wakeup(IOAT_REFLK);
+ if (!locked)
+ mtx_unlock(IOAT_REFLK);
+}
+
+static inline void
+ioat_put(struct ioat_softc *ioat, enum ioat_ref_kind kind)
+{
+
+ ioat_putn(ioat, 1, kind);
+}
+
+static void
+ioat_drain_locked(struct ioat_softc *ioat)
+{
- printf("[%d:%06d] ioat: %s", (int)tv.tv_sec, (int)tv.tv_usec, buffer);
+ mtx_assert(IOAT_REFLK, MA_OWNED);
+ while (ioat->refcnt > 0)
+ msleep(IOAT_REFLK, IOAT_REFLK, 0, "ioat_drain", 0);
}
diff --git a/sys/dev/ioat/ioat.h b/sys/dev/ioat/ioat.h
index dce4142..c5a4855 100644
--- a/sys/dev/ioat/ioat.h
+++ b/sys/dev/ioat/ioat.h
@@ -41,17 +41,25 @@ __FBSDID("$FreeBSD$");
* this on the last operation in a group
*/
#define DMA_INT_EN 0x1
-#define DMA_ALL_FLAGS (DMA_INT_EN)
+/*
+ * Like M_NOWAIT. Operations will return NULL if they cannot allocate a
+ * descriptor without blocking.
+ */
+#define DMA_NO_WAIT 0x2
+#define DMA_ALL_FLAGS (DMA_INT_EN | DMA_NO_WAIT)
typedef void *bus_dmaengine_t;
struct bus_dmadesc;
-typedef void (*bus_dmaengine_callback_t)(void *arg);
+typedef void (*bus_dmaengine_callback_t)(void *arg, int error);
/*
* Called first to acquire a reference to the DMA channel
*/
bus_dmaengine_t ioat_get_dmaengine(uint32_t channel_index);
+/* Release the DMA channel */
+void ioat_put_dmaengine(bus_dmaengine_t dmaengine);
+
/*
* Acquire must be called before issuing an operation to perform. Release is
* called after. Multiple operations can be issued within the context of one
@@ -60,6 +68,16 @@ bus_dmaengine_t ioat_get_dmaengine(uint32_t channel_index);
void ioat_acquire(bus_dmaengine_t dmaengine);
void ioat_release(bus_dmaengine_t dmaengine);
+/*
+ * Issue a blockfill operation. The 64-bit pattern 'fillpattern' is written to
+ * 'len' physically contiguous bytes at 'dst'.
+ *
+ * Only supported on devices with the BFILL capability.
+ */
+struct bus_dmadesc *ioat_blockfill(bus_dmaengine_t dmaengine, bus_addr_t dst,
+ uint64_t fillpattern, bus_size_t len, bus_dmaengine_callback_t callback_fn,
+ void *callback_arg, uint32_t flags);
+
/* Issues the copy data operation */
struct bus_dmadesc *ioat_copy(bus_dmaengine_t dmaengine, bus_addr_t dst,
bus_addr_t src, bus_size_t len, bus_dmaengine_callback_t callback_fn,
diff --git a/sys/dev/ioat/ioat_hw.h b/sys/dev/ioat/ioat_hw.h
index 8e9952a..43c78ca 100644
--- a/sys/dev/ioat/ioat_hw.h
+++ b/sys/dev/ioat/ioat_hw.h
@@ -34,6 +34,8 @@ __FBSDID("$FreeBSD$");
#define IOAT_CHANCNT_OFFSET 0x00
#define IOAT_XFERCAP_OFFSET 0x01
+/* Only bits [4:0] are valid. */
+#define IOAT_XFERCAP_VALID_MASK 0x1f
#define IOAT_GENCTRL_OFFSET 0x02
@@ -52,6 +54,21 @@ __FBSDID("$FreeBSD$");
#define IOAT_CS_STATUS_OFFSET 0x0E
#define IOAT_DMACAPABILITY_OFFSET 0x10
+#define IOAT_DMACAP_PB (1 << 0)
+#define IOAT_DMACAP_DCA (1 << 4)
+#define IOAT_DMACAP_BFILL (1 << 6)
+#define IOAT_DMACAP_XOR (1 << 8)
+#define IOAT_DMACAP_PQ (1 << 9)
+#define IOAT_DMACAP_DMA_DIF (1 << 10)
+#define IOAT_DMACAP_DWBES (1 << 13)
+#define IOAT_DMACAP_RAID16SS (1 << 17)
+#define IOAT_DMACAP_DMAMC (1 << 18)
+#define IOAT_DMACAP_CTOS (1 << 19)
+
+#define IOAT_DMACAP_STR \
+ "\20\24Completion_Timeout_Support\23DMA_with_Multicasting_Support" \
+ "\22RAID_Super_descriptors\16Descriptor_Write_Back_Error_Support" \
+ "\13DMA_with_DIF\12PQ\11XOR\07Block_Fill\05DCA\01Page_Break"
/* DMA Channel Registers */
#define IOAT_CHANCTRL_OFFSET 0x80
@@ -64,7 +81,9 @@ __FBSDID("$FreeBSD$");
#define IOAT_CHANCTRL_ERR_COMPLETION_EN 0x0004
#define IOAT_CHANCTRL_INT_REARM 0x0001
#define IOAT_CHANCTRL_RUN (IOAT_CHANCTRL_INT_REARM |\
- IOAT_CHANCTRL_ANY_ERR_ABORT_EN)
+ IOAT_CHANCTRL_ERR_COMPLETION_EN |\
+ IOAT_CHANCTRL_ANY_ERR_ABORT_EN |\
+ IOAT_CHANCTRL_ERR_INT_EN)
#define IOAT_CHANCMD_OFFSET 0x84
#define IOAT_CHANCMD_RESET 0x20
@@ -81,6 +100,7 @@ __FBSDID("$FreeBSD$");
#define IOAT_CHANSTS_IDLE 0x1
#define IOAT_CHANSTS_SUSPENDED 0x2
#define IOAT_CHANSTS_HALTED 0x3
+#define IOAT_CHANSTS_ARMED 0x4
#define IOAT_CHANSTS_UNAFFILIATED_ERROR 0x8ULL
#define IOAT_CHANSTS_SOFT_ERROR 0x10ULL
@@ -95,6 +115,42 @@ __FBSDID("$FreeBSD$");
#define IOAT_CHANERR_OFFSET 0xA8
+#define IOAT_CHANERR_XSADDERR (1 << 0)
+#define IOAT_CHANERR_XDADDERR (1 << 1)
+#define IOAT_CHANERR_NDADDERR (1 << 2)
+#define IOAT_CHANERR_DERR (1 << 3)
+#define IOAT_CHANERR_CHADDERR (1 << 4)
+#define IOAT_CHANERR_CCMDERR (1 << 5)
+#define IOAT_CHANERR_CUNCORERR (1 << 6)
+#define IOAT_CHANERR_DUNCORERR (1 << 7)
+#define IOAT_CHANERR_RDERR (1 << 8)
+#define IOAT_CHANERR_WDERR (1 << 9)
+#define IOAT_CHANERR_DCERR (1 << 10)
+#define IOAT_CHANERR_DXSERR (1 << 11)
+#define IOAT_CHANERR_CMPADDERR (1 << 12)
+#define IOAT_CHANERR_INTCFGERR (1 << 13)
+#define IOAT_CHANERR_SEDERR (1 << 14)
+#define IOAT_CHANERR_UNAFFERR (1 << 15)
+#define IOAT_CHANERR_CXPERR (1 << 16)
+/* Reserved. (1 << 17) */
+#define IOAT_CHANERR_DCNTERR (1 << 18)
+#define IOAT_CHANERR_DIFFERR (1 << 19)
+#define IOAT_CHANERR_GTVERR (1 << 20)
+#define IOAT_CHANERR_ATVERR (1 << 21)
+#define IOAT_CHANERR_RTVERR (1 << 22)
+#define IOAT_CHANERR_BBERR (1 << 23)
+#define IOAT_CHANERR_RDIFFERR (1 << 24)
+#define IOAT_CHANERR_RGTVERR (1 << 25)
+#define IOAT_CHANERR_RATVERR (1 << 26)
+#define IOAT_CHANERR_RRTVERR (1 << 27)
+
+#define IOAT_CHANERR_STR \
+ "\20\34RRTVERR\33RATVERR\32RGTVERR\31RDIFFERR\30BBERR\27RTVERR\26ATVERR" \
+ "\25GTVERR\24DIFFERR\23DCNTERR\21CXPERR\20UNAFFERR\17SEDERR\16INTCFGERR" \
+ "\15CMPADDERR\14DXSERR\13DCERR\12WDERR\11RDERR\10DUNCORERR\07CUNCORERR" \
+ "\06CCMDERR\05CHADDERR\04DERR\03NDADDERR\02XDADDERR\01XSADDERR"
+
+
#define IOAT_CFG_CHANERR_INT_OFFSET 0x180
#define IOAT_CFG_CHANERRMASK_INT_OFFSET 0x184
diff --git a/sys/dev/ioat/ioat_internal.h b/sys/dev/ioat/ioat_internal.h
index 049d779..4ec738e 100644
--- a/sys/dev/ioat/ioat_internal.h
+++ b/sys/dev/ioat/ioat_internal.h
@@ -29,13 +29,14 @@ __FBSDID("$FreeBSD$");
#ifndef __IOAT_INTERNAL_H__
#define __IOAT_INTERNAL_H__
-#define DEVICE2SOFTC(dev) ((struct ioat_softc *) device_get_softc(dev))
+#define DEVICE2SOFTC(dev) ((struct ioat_softc *) device_get_softc(dev))
+#define KTR_IOAT KTR_SPARE3
#define ioat_read_chancnt(ioat) \
ioat_read_1((ioat), IOAT_CHANCNT_OFFSET)
#define ioat_read_xfercap(ioat) \
- ioat_read_1((ioat), IOAT_XFERCAP_OFFSET)
+ (ioat_read_1((ioat), IOAT_XFERCAP_OFFSET) & IOAT_XFERCAP_VALID_MASK)
#define ioat_write_intrctrl(ioat, value) \
ioat_write_1((ioat), IOAT_INTRCTRL_OFFSET, (value))
@@ -119,12 +120,41 @@ MALLOC_DECLARE(M_IOAT);
SYSCTL_DECL(_hw_ioat);
-void ioat_log_message(int verbosity, char *fmt, ...);
+extern int g_ioat_debug_level;
+
+struct generic_dma_control {
+ uint32_t int_enable:1;
+ uint32_t src_snoop_disable:1;
+ uint32_t dest_snoop_disable:1;
+ uint32_t completion_update:1;
+ uint32_t fence:1;
+ uint32_t reserved1:1;
+ uint32_t src_page_break:1;
+ uint32_t dest_page_break:1;
+ uint32_t bundle:1;
+ uint32_t dest_dca:1;
+ uint32_t hint:1;
+ uint32_t reserved2:13;
+ uint32_t op:8;
+};
+
+struct ioat_generic_hw_descriptor {
+ uint32_t size;
+ union {
+ uint32_t control_raw;
+ struct generic_dma_control control_generic;
+ } u;
+ uint64_t src_addr;
+ uint64_t dest_addr;
+ uint64_t next;
+ uint64_t reserved[4];
+};
struct ioat_dma_hw_descriptor {
uint32_t size;
union {
uint32_t control_raw;
+ struct generic_dma_control control_generic;
struct {
uint32_t int_enable:1;
uint32_t src_snoop_disable:1;
@@ -155,6 +185,7 @@ struct ioat_fill_hw_descriptor {
uint32_t size;
union {
uint32_t control_raw;
+ struct generic_dma_control control_generic;
struct {
uint32_t int_enable:1;
uint32_t reserved:1;
@@ -182,6 +213,7 @@ struct ioat_xor_hw_descriptor {
uint32_t size;
union {
uint32_t control_raw;
+ struct generic_dma_control control_generic;
struct {
uint32_t int_enable:1;
uint32_t src_snoop_disable:1;
@@ -219,6 +251,7 @@ struct ioat_pq_hw_descriptor {
uint32_t size;
union {
uint32_t control_raw;
+ struct generic_dma_control control_generic;
struct {
uint32_t int_enable:1;
uint32_t src_snoop_disable:1;
@@ -260,6 +293,7 @@ struct ioat_pq_update_hw_descriptor {
uint32_t size;
union {
uint32_t control_raw;
+ struct generic_dma_control control_generic;
struct {
uint32_t int_enable:1;
uint32_t src_snoop_disable:1;
@@ -299,6 +333,7 @@ struct bus_dmadesc {
struct ioat_descriptor {
struct bus_dmadesc bus_dmadesc;
union {
+ struct ioat_generic_hw_descriptor *generic;
struct ioat_dma_hw_descriptor *dma;
struct ioat_fill_hw_descriptor *fill;
struct ioat_xor_hw_descriptor *xor;
@@ -308,11 +343,15 @@ struct ioat_descriptor {
struct ioat_raw_hw_descriptor *raw;
} u;
uint32_t id;
- uint32_t length;
- enum validate_flags *validate_result;
bus_addr_t hw_desc_bus_addr;
};
+enum ioat_ref_kind {
+ IOAT_DMAENGINE_REF = 0,
+ IOAT_ACTIVE_DESCR_REF,
+ IOAT_NUM_REF_KINDS
+};
+
/* One of these per allocated PCI device. */
struct ioat_softc {
bus_dmaengine_t dmaengine;
@@ -324,15 +363,16 @@ struct ioat_softc {
})
int version;
+ int chan_idx;
struct mtx submit_lock;
- int num_interrupts;
device_t device;
bus_space_tag_t pci_bus_tag;
bus_space_handle_t pci_bus_handle;
int pci_resource_id;
struct resource *pci_resource;
uint32_t max_xfer_size;
+ uint32_t capabilities;
struct resource *res;
int rid;
@@ -348,24 +388,30 @@ struct ioat_softc {
struct callout timer;
+ boolean_t quiescing;
boolean_t is_resize_pending;
boolean_t is_completion_pending;
boolean_t is_reset_pending;
boolean_t is_channel_running;
- boolean_t is_waiting_for_ack;
- uint32_t xfercap_log;
uint32_t head;
uint32_t tail;
- uint16_t reserved;
+ uint32_t hw_head;
uint32_t ring_size_order;
bus_addr_t last_seen;
struct ioat_descriptor **ring;
struct mtx cleanup_lock;
+ volatile uint32_t refcnt;
+#ifdef INVARIANTS
+ volatile uint32_t refkinds[IOAT_NUM_REF_KINDS];
+#endif
};
+void ioat_test_attach(void);
+void ioat_test_detach(void);
+
static inline uint64_t
ioat_get_chansts(struct ioat_softc *ioat)
{
diff --git a/sys/dev/ioat/ioat_test.c b/sys/dev/ioat/ioat_test.c
index 8352e74..a8311ab 100644
--- a/sys/dev/ioat/ioat_test.c
+++ b/sys/dev/ioat/ioat_test.c
@@ -43,7 +43,9 @@ __FBSDID("$FreeBSD$");
#include <dev/pci/pcivar.h>
#include <machine/bus.h>
#include <machine/resource.h>
+#include <machine/stdarg.h>
#include <vm/vm.h>
+#include <vm/vm_param.h>
#include <vm/pmap.h>
#include "ioat.h"
@@ -51,21 +53,34 @@ __FBSDID("$FreeBSD$");
#include "ioat_internal.h"
#include "ioat_test.h"
+#ifndef time_after
+#define time_after(a,b) ((long)(b) - (long)(a) < 0)
+#endif
+
MALLOC_DEFINE(M_IOAT_TEST, "ioat_test", "ioat test allocations");
-#define IOAT_TEST_SIZE 0x40000
-#define IOAT_MAX_BUFS 8
+#define IOAT_MAX_BUFS 256
struct test_transaction {
- uint8_t num_buffers;
void *buf[IOAT_MAX_BUFS];
uint32_t length;
+ uint32_t depth;
struct ioat_test *test;
+ TAILQ_ENTRY(test_transaction) entry;
};
+#define IT_LOCK() mtx_lock(&ioat_test_lk)
+#define IT_UNLOCK() mtx_unlock(&ioat_test_lk)
+#define IT_ASSERT() mtx_assert(&ioat_test_lk, MA_OWNED)
+static struct mtx ioat_test_lk;
+MTX_SYSINIT(ioat_test_lk, &ioat_test_lk, "test coordination mtx", MTX_DEF);
+
static int g_thread_index = 1;
static struct cdev *g_ioat_cdev = NULL;
+#define ioat_test_log(v, ...) _ioat_test_log((v), "ioat_test: " __VA_ARGS__)
+static inline void _ioat_test_log(int verbosity, const char *fmt, ...);
+
static void
ioat_test_transaction_destroy(struct test_transaction *tx)
{
@@ -73,7 +88,7 @@ ioat_test_transaction_destroy(struct test_transaction *tx)
for (i = 0; i < IOAT_MAX_BUFS; i++) {
if (tx->buf[i] != NULL) {
- contigfree(tx->buf[i], IOAT_TEST_SIZE, M_IOAT_TEST);
+ contigfree(tx->buf[i], tx->length, M_IOAT_TEST);
tx->buf[i] = NULL;
}
}
@@ -82,17 +97,16 @@ ioat_test_transaction_destroy(struct test_transaction *tx)
}
static struct
-test_transaction *ioat_test_transaction_create(uint8_t num_buffers,
+test_transaction *ioat_test_transaction_create(unsigned num_buffers,
uint32_t buffer_size)
{
struct test_transaction *tx;
- int i;
+ unsigned i;
- tx = malloc(sizeof(struct test_transaction), M_IOAT_TEST, M_NOWAIT | M_ZERO);
+ tx = malloc(sizeof(*tx), M_IOAT_TEST, M_NOWAIT | M_ZERO);
if (tx == NULL)
return (NULL);
- tx->num_buffers = num_buffers;
tx->length = buffer_size;
for (i = 0; i < num_buffers; i++) {
@@ -108,90 +122,311 @@ test_transaction *ioat_test_transaction_create(uint8_t num_buffers,
}
static void
-ioat_dma_test_callback(void *arg)
+dump_hex(void *p, size_t chunks)
+{
+ size_t i, j;
+
+ for (i = 0; i < chunks; i++) {
+ for (j = 0; j < 8; j++)
+ printf("%08x ", ((uint32_t *)p)[i * 8 + j]);
+ printf("\n");
+ }
+}
+
+static bool
+ioat_compare_ok(struct test_transaction *tx)
+{
+ struct ioat_test *test;
+ char *dst, *src;
+ uint32_t i, j;
+
+ test = tx->test;
+
+ for (i = 0; i < tx->depth; i++) {
+ dst = tx->buf[2 * i + 1];
+ src = tx->buf[2 * i];
+
+ if (test->testkind == IOAT_TEST_FILL) {
+ for (j = 0; j < tx->length; j += sizeof(uint64_t)) {
+ if (memcmp(src, &dst[j],
+ MIN(sizeof(uint64_t), tx->length - j))
+ != 0)
+ return (false);
+ }
+ } else if (test->testkind == IOAT_TEST_DMA) {
+ if (memcmp(src, dst, tx->length) != 0)
+ return (false);
+ } else if (test->testkind == IOAT_TEST_RAW_DMA) {
+ if (test->raw_write)
+ dst = test->raw_vtarget;
+ dump_hex(dst, tx->length / 32);
+ }
+ }
+ return (true);
+}
+
+static void
+ioat_dma_test_callback(void *arg, int error)
{
struct test_transaction *tx;
struct ioat_test *test;
+ if (error != 0)
+ ioat_test_log(0, "%s: Got error: %d\n", __func__, error);
+
tx = arg;
test = tx->test;
- if (memcmp(tx->buf[0], tx->buf[1], tx->length) != 0) {
- ioat_log_message(0, "miscompare found\n");
- test->status = IOAT_TEST_MISCOMPARE;
+ if (test->verify && !ioat_compare_ok(tx)) {
+ ioat_test_log(0, "miscompare found\n");
+ atomic_add_32(&test->status[IOAT_TEST_MISCOMPARE], tx->depth);
+ } else if (!test->too_late)
+ atomic_add_32(&test->status[IOAT_TEST_OK], tx->depth);
+
+ IT_LOCK();
+ TAILQ_REMOVE(&test->pend_q, tx, entry);
+ TAILQ_INSERT_TAIL(&test->free_q, tx, entry);
+ wakeup(&test->free_q);
+ IT_UNLOCK();
+}
+
+static int
+ioat_test_prealloc_memory(struct ioat_test *test, int index)
+{
+ uint32_t i, j, k;
+ struct test_transaction *tx;
+
+ for (i = 0; i < test->transactions; i++) {
+ tx = ioat_test_transaction_create(test->chain_depth * 2,
+ test->buffer_size);
+ if (tx == NULL) {
+ ioat_test_log(0, "tx == NULL - memory exhausted\n");
+ test->status[IOAT_TEST_NO_MEMORY]++;
+ return (ENOMEM);
+ }
+
+ TAILQ_INSERT_HEAD(&test->free_q, tx, entry);
+
+ tx->test = test;
+ tx->depth = test->chain_depth;
+
+ /* fill in source buffers */
+ for (j = 0; j < (tx->length / sizeof(uint32_t)); j++) {
+ uint32_t val = j + (index << 28);
+
+ for (k = 0; k < test->chain_depth; k++) {
+ ((uint32_t *)tx->buf[2*k])[j] = ~val;
+ ((uint32_t *)tx->buf[2*k+1])[j] = val;
+ }
+ }
}
- atomic_add_32(&test->num_completions, 1);
- ioat_test_transaction_destroy(tx);
- if (test->num_completions == test->num_loops)
- wakeup(test);
+ return (0);
}
static void
-ioat_dma_test(void *arg)
+ioat_test_release_memory(struct ioat_test *test)
+{
+ struct test_transaction *tx, *s;
+
+ TAILQ_FOREACH_SAFE(tx, &test->free_q, entry, s)
+ ioat_test_transaction_destroy(tx);
+ TAILQ_INIT(&test->free_q);
+
+ TAILQ_FOREACH_SAFE(tx, &test->pend_q, entry, s)
+ ioat_test_transaction_destroy(tx);
+ TAILQ_INIT(&test->pend_q);
+}
+
+static void
+ioat_test_submit_1_tx(struct ioat_test *test, bus_dmaengine_t dma)
{
struct test_transaction *tx;
+ struct bus_dmadesc *desc;
+ bus_dmaengine_callback_t cb;
+ bus_addr_t src, dest;
+ uint64_t fillpattern;
+ uint32_t i, flags;
+
+ desc = NULL;
+
+ IT_LOCK();
+ while (TAILQ_EMPTY(&test->free_q))
+ msleep(&test->free_q, &ioat_test_lk, 0, "test_submit", 0);
+
+ tx = TAILQ_FIRST(&test->free_q);
+ TAILQ_REMOVE(&test->free_q, tx, entry);
+ TAILQ_INSERT_HEAD(&test->pend_q, tx, entry);
+ IT_UNLOCK();
+
+ ioat_acquire(dma);
+ for (i = 0; i < tx->depth; i++) {
+ src = vtophys((vm_offset_t)tx->buf[2*i]);
+ dest = vtophys((vm_offset_t)tx->buf[2*i+1]);
+
+ if (test->testkind == IOAT_TEST_RAW_DMA) {
+ if (test->raw_write)
+ dest = test->raw_target;
+ else
+ src = test->raw_target;
+ }
+
+ if (i == tx->depth - 1) {
+ cb = ioat_dma_test_callback;
+ flags = DMA_INT_EN;
+ } else {
+ cb = NULL;
+ flags = 0;
+ }
+
+ if (test->testkind == IOAT_TEST_DMA ||
+ test->testkind == IOAT_TEST_RAW_DMA)
+ desc = ioat_copy(dma, dest, src, tx->length, cb, tx,
+ flags);
+ else if (test->testkind == IOAT_TEST_FILL) {
+ fillpattern = *(uint64_t *)tx->buf[2*i];
+ desc = ioat_blockfill(dma, dest, fillpattern,
+ tx->length, cb, tx, flags);
+ }
+ if (desc == NULL)
+ break;
+ }
+ ioat_release(dma);
+
+ /*
+ * We couldn't issue an IO -- either the device is being detached or
+ * the HW reset. Essentially spin until the device comes back up or
+ * our timer expires.
+ */
+ if (desc == NULL && tx->depth > 0) {
+ atomic_add_32(&test->status[IOAT_TEST_NO_DMA_ENGINE], tx->depth);
+ IT_LOCK();
+ TAILQ_REMOVE(&test->pend_q, tx, entry);
+ TAILQ_INSERT_HEAD(&test->free_q, tx, entry);
+ IT_UNLOCK();
+ }
+}
+
+static void
+ioat_dma_test(void *arg)
+{
struct ioat_test *test;
bus_dmaengine_t dmaengine;
uint32_t loops;
- int index, i;
+ int index, rc, start, end;
test = arg;
- loops = test->num_loops;
+ memset(__DEVOLATILE(void *, test->status), 0, sizeof(test->status));
- test->status = IOAT_TEST_OK;
- test->num_completions = 0;
-
- index = g_thread_index++;
- dmaengine = ioat_get_dmaengine(test->channel_index);
+ if (test->buffer_size > 1024 * 1024) {
+ ioat_test_log(0, "Buffer size too large >1MB\n");
+ test->status[IOAT_TEST_NO_MEMORY]++;
+ return;
+ }
- if (dmaengine == NULL) {
- ioat_log_message(0, "Couldn't acquire dmaengine\n");
- test->status = IOAT_TEST_NO_DMA_ENGINE;
+ if (test->chain_depth * 2 > IOAT_MAX_BUFS) {
+ ioat_test_log(0, "Depth too large (> %u)\n",
+ (unsigned)IOAT_MAX_BUFS / 2);
+ test->status[IOAT_TEST_NO_MEMORY]++;
return;
}
- ioat_log_message(0, "Thread %d: num_loops remaining: 0x%07x\n", index,
- test->num_loops);
+ if (btoc((uint64_t)test->buffer_size * test->chain_depth *
+ test->transactions) > (physmem / 4)) {
+ ioat_test_log(0, "Sanity check failed -- test would "
+ "use more than 1/4 of phys mem.\n");
+ test->status[IOAT_TEST_NO_MEMORY]++;
+ return;
+ }
- for (loops = 0; loops < test->num_loops; loops++) {
- bus_addr_t src, dest;
+ if ((uint64_t)test->transactions * test->chain_depth > (1<<16)) {
+ ioat_test_log(0, "Sanity check failed -- test would "
+ "use more than available IOAT ring space.\n");
+ test->status[IOAT_TEST_NO_MEMORY]++;
+ return;
+ }
- if (loops % 0x10000 == 0) {
- ioat_log_message(0, "Thread %d: "
- "num_loops remaining: 0x%07x\n", index,
- test->num_loops - loops);
- }
+ if (test->testkind >= IOAT_NUM_TESTKINDS) {
+ ioat_test_log(0, "Invalid kind %u\n",
+ (unsigned)test->testkind);
+ test->status[IOAT_TEST_INVALID_INPUT]++;
+ return;
+ }
- tx = ioat_test_transaction_create(2, IOAT_TEST_SIZE);
- if (tx == NULL) {
- ioat_log_message(0, "tx == NULL - memory exhausted\n");
- atomic_add_32(&test->num_completions, 1);
- test->status = IOAT_TEST_NO_MEMORY;
- continue;
- }
+ dmaengine = ioat_get_dmaengine(test->channel_index);
+ if (dmaengine == NULL) {
+ ioat_test_log(0, "Couldn't acquire dmaengine\n");
+ test->status[IOAT_TEST_NO_DMA_ENGINE]++;
+ return;
+ }
- tx->test = test;
- wmb();
+ if (test->testkind == IOAT_TEST_FILL &&
+ (to_ioat_softc(dmaengine)->capabilities & IOAT_DMACAP_BFILL) == 0)
+ {
+ ioat_test_log(0,
+ "Hardware doesn't support block fill, aborting test\n");
+ test->status[IOAT_TEST_INVALID_INPUT]++;
+ goto out;
+ }
- /* fill in source buffer */
- for (i = 0; i < (IOAT_TEST_SIZE / sizeof(uint32_t)); i++) {
- uint32_t val = i + (loops << 16) + (index << 28);
- ((uint32_t *)tx->buf[0])[i] = ~val;
- ((uint32_t *)tx->buf[1])[i] = val;
+ if (test->testkind == IOAT_TEST_RAW_DMA) {
+ if (test->raw_is_virtual) {
+ test->raw_vtarget = (void *)test->raw_target;
+ test->raw_target = vtophys(test->raw_vtarget);
+ } else {
+ test->raw_vtarget = pmap_mapdev(test->raw_target,
+ test->buffer_size);
}
+ }
- src = pmap_kextract((vm_offset_t)tx->buf[0]);
- dest = pmap_kextract((vm_offset_t)tx->buf[1]);
+ index = g_thread_index++;
+ TAILQ_INIT(&test->free_q);
+ TAILQ_INIT(&test->pend_q);
+
+ if (test->duration == 0)
+ ioat_test_log(1, "Thread %d: num_loops remaining: 0x%08x\n",
+ index, test->transactions);
+ else
+ ioat_test_log(1, "Thread %d: starting\n", index);
+
+ rc = ioat_test_prealloc_memory(test, index);
+ if (rc != 0) {
+ ioat_test_log(0, "prealloc_memory: %d\n", rc);
+ goto out;
+ }
+ wmb();
+
+ test->too_late = false;
+ start = ticks;
+ end = start + (((sbintime_t)test->duration * hz) / 1000);
+
+ for (loops = 0;; loops++) {
+ if (test->duration == 0 && loops >= test->transactions)
+ break;
+ else if (test->duration != 0 && time_after(ticks, end)) {
+ test->too_late = true;
+ break;
+ }
- ioat_acquire(dmaengine);
- ioat_copy(dmaengine, src, dest, IOAT_TEST_SIZE,
- ioat_dma_test_callback, tx, DMA_INT_EN);
- ioat_release(dmaengine);
+ ioat_test_submit_1_tx(test, dmaengine);
}
- while (test->num_completions < test->num_loops)
- tsleep(test, 0, "compl", 5 * hz);
+ ioat_test_log(1, "Test Elapsed: %d ticks (overrun %d), %d sec.\n",
+ ticks - start, ticks - end, (ticks - start) / hz);
+
+ IT_LOCK();
+ while (!TAILQ_EMPTY(&test->pend_q))
+ msleep(&test->free_q, &ioat_test_lk, 0, "ioattestcompl", hz);
+ IT_UNLOCK();
+ ioat_test_log(1, "Test Elapsed2: %d ticks (overrun %d), %d sec.\n",
+ ticks - start, ticks - end, (ticks - start) / hz);
+
+ ioat_test_release_memory(test);
+out:
+ if (test->testkind == IOAT_TEST_RAW_DMA && !test->raw_is_virtual)
+ pmap_unmapdev((vm_offset_t)test->raw_vtarget,
+ test->buffer_size);
+ ioat_put_dmaengine(dmaengine);
}
static int
@@ -233,6 +468,22 @@ static struct cdevsw ioat_cdevsw = {
};
static int
+enable_ioat_test(bool enable)
+{
+
+ mtx_assert(&Giant, MA_OWNED);
+
+ if (enable && g_ioat_cdev == NULL) {
+ g_ioat_cdev = make_dev(&ioat_cdevsw, 0, UID_ROOT, GID_WHEEL,
+ 0600, "ioat_test");
+ } else if (!enable && g_ioat_cdev != NULL) {
+ destroy_dev(g_ioat_cdev);
+ g_ioat_cdev = NULL;
+ }
+ return (0);
+}
+
+static int
sysctl_enable_ioat_test(SYSCTL_HANDLER_ARGS)
{
int error, enabled;
@@ -242,15 +493,45 @@ sysctl_enable_ioat_test(SYSCTL_HANDLER_ARGS)
if (error != 0 || req->newptr == NULL)
return (error);
- if (enabled != 0 && g_ioat_cdev == NULL) {
- g_ioat_cdev = make_dev(&ioat_cdevsw, 0, UID_ROOT, GID_WHEEL,
- 0600, "ioat_test");
- } else if (enabled == 0 && g_ioat_cdev != NULL) {
- destroy_dev(g_ioat_cdev);
- g_ioat_cdev = NULL;
- }
+ enable_ioat_test(enabled);
return (0);
}
SYSCTL_PROC(_hw_ioat, OID_AUTO, enable_ioat_test, CTLTYPE_INT | CTLFLAG_RW,
0, 0, sysctl_enable_ioat_test, "I",
"Non-zero: Enable the /dev/ioat_test device");
+
+void
+ioat_test_attach(void)
+{
+ char *val;
+
+ val = kern_getenv("hw.ioat.enable_ioat_test");
+ if (val != NULL && strcmp(val, "0") != 0) {
+ mtx_lock(&Giant);
+ enable_ioat_test(true);
+ mtx_unlock(&Giant);
+ }
+ freeenv(val);
+}
+
+void
+ioat_test_detach(void)
+{
+
+ mtx_lock(&Giant);
+ enable_ioat_test(false);
+ mtx_unlock(&Giant);
+}
+
+static inline void
+_ioat_test_log(int verbosity, const char *fmt, ...)
+{
+ va_list argp;
+
+ if (verbosity > g_ioat_debug_level)
+ return;
+
+ va_start(argp, fmt);
+ vprintf(fmt, argp);
+ va_end(argp);
+}
diff --git a/sys/dev/ioat/ioat_test.h b/sys/dev/ioat/ioat_test.h
index 636a971..b6e6a15 100644
--- a/sys/dev/ioat/ioat_test.h
+++ b/sys/dev/ioat/ioat_test.h
@@ -29,17 +29,55 @@ __FBSDID("$FreeBSD$");
#ifndef __IOAT_TEST_H__
#define __IOAT_TEST_H__
+enum ioat_res {
+ IOAT_TEST_OK = 0,
+ IOAT_TEST_NO_DMA_ENGINE,
+ IOAT_TEST_NO_MEMORY,
+ IOAT_TEST_MISCOMPARE,
+ IOAT_TEST_INVALID_INPUT,
+ IOAT_NUM_RES
+};
+
+enum ioat_test_kind {
+ IOAT_TEST_FILL = 0,
+ IOAT_TEST_DMA,
+ IOAT_TEST_RAW_DMA,
+ IOAT_NUM_TESTKINDS
+};
+
+struct test_transaction;
+
struct ioat_test {
+ volatile uint32_t status[IOAT_NUM_RES];
uint32_t channel_index;
- uint32_t num_loops;
- volatile uint32_t num_completions;
- uint32_t status;
-};
-#define IOAT_TEST_OK 0
-#define IOAT_TEST_NO_DMA_ENGINE 1
-#define IOAT_TEST_NO_MEMORY 2
-#define IOAT_TEST_MISCOMPARE 3
+ enum ioat_test_kind testkind;
+
+ /* HW max of 1MB */
+ uint32_t buffer_size;
+ uint32_t chain_depth;
+ uint32_t transactions;
+
+ /*
+ * If non-zero, duration is time in ms;
+ * If zero, bounded by 'transactions' above.
+ */
+ uint32_t duration;
+
+ /* If true, check for miscompares after a copy. */
+ bool verify;
+
+ /* DMA directly to/from some memory address */
+ uint64_t raw_target;
+ void *raw_vtarget;
+ bool raw_write;
+ bool raw_is_virtual;
+
+ /* Internal usage -- not test inputs */
+ TAILQ_HEAD(, test_transaction) free_q;
+ TAILQ_HEAD(, test_transaction) pend_q;
+ volatile bool too_late;
+};
#define IOAT_DMATEST _IOWR('i', 0, struct ioat_test)
diff --git a/sys/dev/isp/isp.c b/sys/dev/isp/isp.c
index 9e8e29b..8c93263 100644
--- a/sys/dev/isp/isp.c
+++ b/sys/dev/isp/isp.c
@@ -119,6 +119,7 @@ static int isp_plogx(ispsoftc_t *, int, uint16_t, uint32_t, int, int);
static int isp_port_login(ispsoftc_t *, uint16_t, uint32_t);
static int isp_port_logout(ispsoftc_t *, uint16_t, uint32_t);
static int isp_getpdb(ispsoftc_t *, int, uint16_t, isp_pdb_t *, int);
+static int isp_gethandles(ispsoftc_t *, int, uint16_t *, int *, int, int);
static void isp_dump_chip_portdb(ispsoftc_t *, int, int);
static uint64_t isp_get_wwn(ispsoftc_t *, int, int, int);
static int isp_fclink_test(ispsoftc_t *, int, int);
@@ -130,7 +131,7 @@ static int isp_scan_fabric(ispsoftc_t *, int);
static int isp_login_device(ispsoftc_t *, int, uint32_t, isp_pdb_t *, uint16_t *);
static int isp_register_fc4_type(ispsoftc_t *, int);
static int isp_register_fc4_type_24xx(ispsoftc_t *, int);
-static uint16_t isp_nxt_handle(ispsoftc_t *, int, uint16_t);
+static uint16_t isp_next_handle(ispsoftc_t *, uint16_t *);
static void isp_fw_state(ispsoftc_t *, int);
static void isp_mboxcmd_qnw(ispsoftc_t *, mbreg_t *, int);
static void isp_mboxcmd(ispsoftc_t *, mbreg_t *);
@@ -1010,33 +1011,15 @@ isp_reset(ispsoftc_t *isp, int do_load_defaults)
}
}
- /*
- * Give it a chance to finish starting up.
- * Give the 24XX more time.
- */
- if (IS_24XX(isp)) {
- ISP_DELAY(500000);
+ if (IS_SCSI(isp)) {
/*
- * Check to see if the 24XX firmware really started.
+ * Set CLOCK RATE, but only if asked to.
*/
- if (mbs.param[1] == 0xdead) {
- isp_prt(isp, ISP_LOGERR, "f/w didn't *really* start");
- ISP_RESET0(isp);
- return;
- }
- } else {
- ISP_DELAY(250000);
- if (IS_SCSI(isp)) {
- /*
- * Set CLOCK RATE, but only if asked to.
- */
- if (isp->isp_clock) {
- mbs.param[0] = MBOX_SET_CLOCK_RATE;
- mbs.param[1] = isp->isp_clock;
- mbs.logval = MBLOGNONE;
- isp_mboxcmd(isp, &mbs);
- /* we will try not to care if this fails */
- }
+ if (isp->isp_clock) {
+ MBSINIT(&mbs, MBOX_SET_CLOCK_RATE, MBLOGALL, 0);
+ mbs.param[1] = isp->isp_clock;
+ isp_mboxcmd(isp, &mbs);
+ /* we will try not to care if this fails */
}
}
@@ -1090,8 +1073,13 @@ isp_reset(ispsoftc_t *isp, int do_load_defaults)
} else {
isp->isp_fwattr = mbs.param[6];
}
- if (IS_24XX(isp) && (isp->isp_fwattr & ISP2400_FW_ATTR_EXTNDED)) {
- isp->isp_fwattr |= (((uint64_t) mbs.param[15]) << 16) | (((uint64_t) mbs.param[16]) << 32) | (((uint64_t) mbs.param[17]) << 48);
+ if (IS_24XX(isp)) {
+ isp->isp_fwattr |= ((uint64_t) mbs.param[15]) << 16;
+ if (isp->isp_fwattr & ISP2400_FW_ATTR_EXTNDED) {
+ isp->isp_fwattr |=
+ (((uint64_t) mbs.param[16]) << 32) |
+ (((uint64_t) mbs.param[17]) << 48);
+ }
}
} else if (IS_SCSI(isp)) {
#ifndef ISP_TARGET_MODE
@@ -1132,6 +1120,18 @@ isp_reset(ispsoftc_t *isp, int do_load_defaults)
fwt ^=ISP2400_FW_ATTR_VI;
ISP_SNPRINTF(buf, ISP_FC_SCRLEN - strlen(buf), "%s VI", buf);
}
+ if (fwt & ISP2400_FW_ATTR_MQ) {
+ fwt ^=ISP2400_FW_ATTR_MQ;
+ ISP_SNPRINTF(buf, ISP_FC_SCRLEN - strlen(buf), "%s MQ", buf);
+ }
+ if (fwt & ISP2400_FW_ATTR_MSIX) {
+ fwt ^=ISP2400_FW_ATTR_MSIX;
+ ISP_SNPRINTF(buf, ISP_FC_SCRLEN - strlen(buf), "%s MSIX", buf);
+ }
+ if (fwt & ISP2400_FW_ATTR_FCOE) {
+ fwt ^=ISP2400_FW_ATTR_FCOE;
+ ISP_SNPRINTF(buf, ISP_FC_SCRLEN - strlen(buf), "%s FCOE", buf);
+ }
if (fwt & ISP2400_FW_ATTR_VP0) {
fwt ^= ISP2400_FW_ATTR_VP0;
ISP_SNPRINTF(buf, ISP_FC_SCRLEN - strlen(buf), "%s VP0_Decoupling", buf);
@@ -1140,7 +1140,43 @@ isp_reset(ispsoftc_t *isp, int do_load_defaults)
fwt ^= ISP2400_FW_ATTR_EXPFW;
ISP_SNPRINTF(buf, ISP_FC_SCRLEN - strlen(buf), "%s (Experimental)", buf);
}
+ if (fwt & ISP2400_FW_ATTR_HOTFW) {
+ fwt ^= ISP2400_FW_ATTR_HOTFW;
+ ISP_SNPRINTF(buf, ISP_FC_SCRLEN - strlen(buf), "%s HotFW", buf);
+ }
fwt &= ~ISP2400_FW_ATTR_EXTNDED;
+ if (fwt & ISP2400_FW_ATTR_EXTVP) {
+ fwt ^= ISP2400_FW_ATTR_EXTVP;
+ ISP_SNPRINTF(buf, ISP_FC_SCRLEN - strlen(buf), "%s ExtVP", buf);
+ }
+ if (fwt & ISP2400_FW_ATTR_VN2VN) {
+ fwt ^= ISP2400_FW_ATTR_VN2VN;
+ ISP_SNPRINTF(buf, ISP_FC_SCRLEN - strlen(buf), "%s VN2VN", buf);
+ }
+ if (fwt & ISP2400_FW_ATTR_EXMOFF) {
+ fwt ^= ISP2400_FW_ATTR_EXMOFF;
+ ISP_SNPRINTF(buf, ISP_FC_SCRLEN - strlen(buf), "%s EXMOFF", buf);
+ }
+ if (fwt & ISP2400_FW_ATTR_NPMOFF) {
+ fwt ^= ISP2400_FW_ATTR_NPMOFF;
+ ISP_SNPRINTF(buf, ISP_FC_SCRLEN - strlen(buf), "%s NPMOFF", buf);
+ }
+ if (fwt & ISP2400_FW_ATTR_DIFCHOP) {
+ fwt ^= ISP2400_FW_ATTR_DIFCHOP;
+ ISP_SNPRINTF(buf, ISP_FC_SCRLEN - strlen(buf), "%s DIFCHOP", buf);
+ }
+ if (fwt & ISP2400_FW_ATTR_SRIOV) {
+ fwt ^= ISP2400_FW_ATTR_SRIOV;
+ ISP_SNPRINTF(buf, ISP_FC_SCRLEN - strlen(buf), "%s SRIOV", buf);
+ }
+ if (fwt & ISP2400_FW_ATTR_ASICTMP) {
+ fwt ^= ISP2400_FW_ATTR_ASICTMP;
+ ISP_SNPRINTF(buf, ISP_FC_SCRLEN - strlen(buf), "%s ASICTMP", buf);
+ }
+ if (fwt & ISP2400_FW_ATTR_ATIOMQ) {
+ fwt ^= ISP2400_FW_ATTR_ATIOMQ;
+ ISP_SNPRINTF(buf, ISP_FC_SCRLEN - strlen(buf), "%s ATIOMQ", buf);
+ }
if (fwt) {
ISP_SNPRINTF(buf, ISP_FC_SCRLEN - strlen(buf), "%s (unknown 0x%08x%08x)", buf,
(uint32_t) (fwt >> 32), (uint32_t) fwt);
@@ -1222,7 +1258,12 @@ isp_reset(ispsoftc_t *isp, int do_load_defaults)
*/
if (IS_FC(isp) && isp->isp_nchan > 1) {
if (!ISP_CAP_MULTI_ID(isp)) {
- isp_prt(isp, ISP_LOGWARN, "non-MULTIID f/w loaded, only can enable 1 of %d channels", isp->isp_nchan);
+ isp_prt(isp, ISP_LOGWARN, "non-MULTIID f/w loaded, "
+ "only can enable 1 of %d channels", isp->isp_nchan);
+ isp->isp_nchan = 1;
+ } else if (!ISP_CAP_VP0(isp)) {
+ isp_prt(isp, ISP_LOGWARN, "We can not use MULTIID "
+ "feature properly without VP0_Decoupling");
isp->isp_nchan = 1;
}
}
@@ -1266,7 +1307,7 @@ isp_reset(ispsoftc_t *isp, int do_load_defaults)
}
} else {
if (ISP_CAP_SCCFW(isp)) {
- isp->isp_maxluns = 16384;
+ isp->isp_maxluns = 0; /* No limit -- 2/8 bytes */
} else {
isp->isp_maxluns = 16;
}
@@ -1315,6 +1356,8 @@ isp_scsi_init(ispsoftc_t *isp)
sdparam *sdp_chan0, *sdp_chan1;
mbreg_t mbs;
+ isp->isp_state = ISP_INITSTATE;
+
sdp_chan0 = SDPARAM(isp, 0);
sdp_chan1 = sdp_chan0;
if (IS_DUALBUS(isp)) {
@@ -1490,7 +1533,7 @@ isp_scsi_init(ispsoftc_t *isp)
}
}
- isp->isp_state = ISP_INITSTATE;
+ isp->isp_state = ISP_RUNSTATE;
}
static void
@@ -1614,17 +1657,15 @@ isp_fibre_init(ispsoftc_t *isp)
fcparam *fcp;
isp_icb_t local, *icbp = &local;
mbreg_t mbs;
- int ownloopid;
/*
* We only support one channel on non-24XX cards
*/
fcp = FCPARAM(isp, 0);
- if (fcp->role == ISP_ROLE_NONE) {
- isp->isp_state = ISP_INITSTATE;
+ if (fcp->role == ISP_ROLE_NONE)
return;
- }
+ isp->isp_state = ISP_INITSTATE;
ISP_MEMZERO(icbp, sizeof (*icbp));
icbp->icb_version = ICB_VERSION1;
icbp->icb_fwoptions = fcp->isp_fwoptions;
@@ -1689,19 +1730,12 @@ isp_fibre_init(ispsoftc_t *isp)
}
icbp->icb_retry_delay = fcp->isp_retry_delay;
icbp->icb_retry_count = fcp->isp_retry_count;
- icbp->icb_hardaddr = fcp->isp_loopid;
- ownloopid = (isp->isp_confopts & ISP_CFG_OWNLOOPID) != 0;
- if (icbp->icb_hardaddr >= LOCAL_LOOP_LIM) {
- icbp->icb_hardaddr = 0;
- ownloopid = 0;
- }
-
- /*
- * Our life seems so much better with 2200s and later with
- * the latest f/w if we set Hard Address.
- */
- if (ownloopid || ISP_FW_NEWER_THAN(isp, 2, 2, 5)) {
- icbp->icb_fwoptions |= ICBOPT_HARD_ADDRESS;
+ if (fcp->isp_loopid < LOCAL_LOOP_LIM) {
+ icbp->icb_hardaddr = fcp->isp_loopid;
+ if (isp->isp_confopts & ISP_CFG_OWNLOOPID)
+ icbp->icb_fwoptions |= ICBOPT_HARD_ADDRESS;
+ else
+ icbp->icb_fwoptions |= ICBOPT_PREV_ADDRESS;
}
/*
@@ -1843,7 +1877,7 @@ isp_fibre_init(ispsoftc_t *isp)
icbp->icb_logintime = ICB_LOGIN_TOV;
#ifdef ISP_TARGET_MODE
- if (ISP_FW_NEWER_THAN(isp, 3, 25, 0) && (icbp->icb_fwoptions & ICBOPT_TGT_ENABLE)) {
+ if (IS_23XX(isp) && (icbp->icb_fwoptions & ICBOPT_TGT_ENABLE)) {
icbp->icb_lunenables = 0xffff;
icbp->icb_ccnt = DFLT_CMND_CNT;
icbp->icb_icnt = DFLT_INOT_CNT;
@@ -1901,6 +1935,7 @@ isp_fibre_init(ispsoftc_t *isp)
* Init the firmware
*/
MBSINIT(&mbs, MBOX_INIT_FIRMWARE, MBLOGALL, 30000000);
+ mbs.param[1] = 0;
mbs.param[2] = DMA_WD1(fcp->isp_scdma);
mbs.param[3] = DMA_WD0(fcp->isp_scdma);
mbs.param[6] = DMA_WD3(fcp->isp_scdma);
@@ -1924,7 +1959,7 @@ isp_fibre_init(ispsoftc_t *isp)
/*
* Whatever happens, we're now committed to being here.
*/
- isp->isp_state = ISP_INITSTATE;
+ isp->isp_state = ISP_RUNSTATE;
}
static void
@@ -1934,7 +1969,6 @@ isp_fibre_init_2400(ispsoftc_t *isp)
isp_icb_2400_t local, *icbp = &local;
mbreg_t mbs;
int chan;
- int ownloopid = 0;
/*
* Check to see whether all channels have *some* kind of role
@@ -1947,10 +1981,11 @@ isp_fibre_init_2400(ispsoftc_t *isp)
}
if (chan == isp->isp_nchan) {
isp_prt(isp, ISP_LOG_WARN1, "all %d channels with role 'none'", chan);
- isp->isp_state = ISP_INITSTATE;
return;
}
+ isp->isp_state = ISP_INITSTATE;
+
/*
* Start with channel 0.
*/
@@ -1968,16 +2003,20 @@ isp_fibre_init_2400(ispsoftc_t *isp)
ISP_MEMZERO(icbp, sizeof (*icbp));
icbp->icb_fwoptions1 = fcp->isp_fwoptions;
- if (fcp->role & ISP_ROLE_TARGET) {
- icbp->icb_fwoptions1 |= ICB2400_OPT1_TGT_ENABLE;
- } else {
- icbp->icb_fwoptions1 &= ~ICB2400_OPT1_TGT_ENABLE;
- }
-
- if (fcp->role & ISP_ROLE_INITIATOR) {
+ icbp->icb_fwoptions2 = fcp->isp_xfwoptions;
+ icbp->icb_fwoptions3 = fcp->isp_zfwoptions;
+ if (isp->isp_nchan > 1 && ISP_CAP_VP0(isp)) {
icbp->icb_fwoptions1 &= ~ICB2400_OPT1_INI_DISABLE;
+ icbp->icb_fwoptions1 |= ICB2400_OPT1_TGT_ENABLE;
} else {
- icbp->icb_fwoptions1 |= ICB2400_OPT1_INI_DISABLE;
+ if (fcp->role & ISP_ROLE_TARGET)
+ icbp->icb_fwoptions1 |= ICB2400_OPT1_TGT_ENABLE;
+ else
+ icbp->icb_fwoptions1 &= ~ICB2400_OPT1_TGT_ENABLE;
+ if (fcp->role & ISP_ROLE_INITIATOR)
+ icbp->icb_fwoptions1 &= ~ICB2400_OPT1_INI_DISABLE;
+ else
+ icbp->icb_fwoptions1 |= ICB2400_OPT1_INI_DISABLE;
}
icbp->icb_version = ICB_VERSION1;
@@ -2002,18 +2041,14 @@ isp_fibre_init_2400(ispsoftc_t *isp)
icbp->icb_xchgcnt >>= 1;
}
-
- ownloopid = (isp->isp_confopts & ISP_CFG_OWNLOOPID) != 0;
- icbp->icb_hardaddr = fcp->isp_loopid;
- if (icbp->icb_hardaddr >= LOCAL_LOOP_LIM) {
- icbp->icb_hardaddr = 0;
- ownloopid = 0;
+ if (fcp->isp_loopid < LOCAL_LOOP_LIM) {
+ icbp->icb_hardaddr = fcp->isp_loopid;
+ if (isp->isp_confopts & ISP_CFG_OWNLOOPID)
+ icbp->icb_fwoptions1 |= ICB2400_OPT1_HARD_ADDRESS;
+ else
+ icbp->icb_fwoptions1 |= ICB2400_OPT1_PREV_ADDRESS;
}
- if (ownloopid)
- icbp->icb_fwoptions1 |= ICB2400_OPT1_HARD_ADDRESS;
-
- icbp->icb_fwoptions2 = fcp->isp_xfwoptions;
if (isp->isp_confopts & ISP_CFG_NOFCTAPE) {
icbp->icb_fwoptions2 &= ~ICB2400_OPT2_FCTAPE;
}
@@ -2021,10 +2056,11 @@ isp_fibre_init_2400(ispsoftc_t *isp)
icbp->icb_fwoptions2 |= ICB2400_OPT2_FCTAPE;
}
- if (icbp->icb_fwoptions2 & ICB2400_OPT2_FCTAPE) {
- FCPARAM(isp, chan)->fctape_enabled = 1;
- } else {
- FCPARAM(isp, chan)->fctape_enabled = 0;
+ for (chan = 0; chan < isp->isp_nchan; chan++) {
+ if (icbp->icb_fwoptions2 & ICB2400_OPT2_FCTAPE)
+ FCPARAM(isp, chan)->fctape_enabled = 1;
+ else
+ FCPARAM(isp, chan)->fctape_enabled = 0;
}
switch (isp->isp_confopts & ISP_CFG_PORT_PREF) {
@@ -2056,7 +2092,6 @@ isp_fibre_init_2400(ispsoftc_t *isp)
break;
}
- icbp->icb_fwoptions3 = fcp->isp_zfwoptions;
if ((icbp->icb_fwoptions3 & ICB2400_OPT3_RSPSZ_MASK) == 0) {
icbp->icb_fwoptions3 |= ICB2400_OPT3_RSPSZ_24;
}
@@ -2072,9 +2107,6 @@ isp_fibre_init_2400(ispsoftc_t *isp)
} else {
icbp->icb_fwoptions3 |= ICB2400_OPT3_RATE_AUTO;
}
- if (ownloopid == 0) {
- icbp->icb_fwoptions3 |= ICB2400_OPT3_SOFTID;
- }
icbp->icb_logintime = ICB_LOGIN_TOV;
if (fcp->isp_wwnn && fcp->isp_wwpn) {
@@ -2155,31 +2187,46 @@ isp_fibre_init_2400(ispsoftc_t *isp)
size_t amt = 0;
uint8_t *off;
- vpinfo.vp_count = isp->isp_nchan - 1;
vpinfo.vp_global_options = 0;
+ if (ISP_CAP_VP0(isp)) {
+ vpinfo.vp_global_options |= ICB2400_VPGOPT_VP0_DECOUPLE;
+ vpinfo.vp_count = isp->isp_nchan;
+ chan = 0;
+ } else {
+ vpinfo.vp_count = isp->isp_nchan - 1;
+ chan = 1;
+ }
off = fcp->isp_scratch;
off += ICB2400_VPINFO_OFF;
vdst = (isp_icb_2400_vpinfo_t *) off;
isp_put_icb_2400_vpinfo(isp, &vpinfo, vdst);
amt = ICB2400_VPINFO_OFF + sizeof (isp_icb_2400_vpinfo_t);
- for (chan = 1; chan < isp->isp_nchan; chan++) {
+ for (; chan < isp->isp_nchan; chan++) {
fcparam *fcp2;
ISP_MEMZERO(&pi, sizeof (pi));
fcp2 = FCPARAM(isp, chan);
if (fcp2->role != ISP_ROLE_NONE) {
pi.vp_port_options = ICB2400_VPOPT_ENABLED;
- if (fcp2->role & ISP_ROLE_INITIATOR) {
+ if (fcp2->role & ISP_ROLE_INITIATOR)
pi.vp_port_options |= ICB2400_VPOPT_INI_ENABLE;
- }
- if ((fcp2->role & ISP_ROLE_TARGET) == 0) {
+ if ((fcp2->role & ISP_ROLE_TARGET) == 0)
pi.vp_port_options |= ICB2400_VPOPT_TGT_DISABLE;
- }
- MAKE_NODE_NAME_FROM_WWN(pi.vp_port_portname, fcp2->isp_wwpn);
- MAKE_NODE_NAME_FROM_WWN(pi.vp_port_nodename, fcp2->isp_wwnn);
}
+ if (fcp2->isp_loopid < LOCAL_LOOP_LIM) {
+ pi.vp_port_loopid = fcp2->isp_loopid;
+ if (isp->isp_confopts & ISP_CFG_OWNLOOPID)
+ pi.vp_port_options |= ICB2400_VPOPT_HARD_ADDRESS;
+ else
+ pi.vp_port_options |= ICB2400_VPOPT_PREV_ADDRESS;
+ }
+ MAKE_NODE_NAME_FROM_WWN(pi.vp_port_portname, fcp2->isp_wwpn);
+ MAKE_NODE_NAME_FROM_WWN(pi.vp_port_nodename, fcp2->isp_wwnn);
off = fcp->isp_scratch;
- off += ICB2400_VPINFO_PORT_OFF(chan);
+ if (ISP_CAP_VP0(isp))
+ off += ICB2400_VPINFO_PORT_OFF(chan);
+ else
+ off += ICB2400_VPINFO_PORT_OFF(chan - 1);
pdst = (vp_port_info_t *) off;
isp_put_vp_port_info(isp, &pi, pdst);
amt += ICB2400_VPOPT_WRITE_SIZE;
@@ -2200,6 +2247,7 @@ isp_fibre_init_2400(ispsoftc_t *isp)
} else {
mbs.param[0] = MBOX_INIT_FIRMWARE;
}
+ mbs.param[1] = 0;
mbs.param[2] = DMA_WD1(fcp->isp_scdma);
mbs.param[3] = DMA_WD0(fcp->isp_scdma);
mbs.param[6] = DMA_WD3(fcp->isp_scdma);
@@ -2221,7 +2269,7 @@ isp_fibre_init_2400(ispsoftc_t *isp)
/*
* Whatever happens, we're now committed to being here.
*/
- isp->isp_state = ISP_INITSTATE;
+ isp->isp_state = ISP_RUNSTATE;
}
static void
@@ -2231,10 +2279,6 @@ isp_mark_portdb(ispsoftc_t *isp, int chan, int disposition)
fcportdb_t *lp;
int i;
- if (chan < 0 || chan >= isp->isp_nchan) {
- isp_prt(isp, ISP_LOGWARN, "isp_mark_portdb: bad channel %d", chan);
- return;
- }
for (i = 0; i < MAX_FC_TARG; i++) {
lp = &fcp->portdb[i];
switch (lp->state) {
@@ -2496,7 +2540,8 @@ isp_getpdb(ispsoftc_t *isp, int chan, uint16_t id, isp_pdb_t *pdb, int dolock)
isp_pdb_24xx_t bill;
} un;
- MBSINIT(&mbs, MBOX_GET_PORT_DB, MBLOGALL & ~MBOX_COMMAND_PARAM_ERROR, 250000);
+ MBSINIT(&mbs, MBOX_GET_PORT_DB,
+ MBLOGALL & ~MBLOGMASK(MBOX_COMMAND_PARAM_ERROR), 250000);
if (IS_24XX(isp)) {
mbs.ibits = (1 << 9)|(1 << 10);
mbs.param[1] = id;
@@ -2522,7 +2567,7 @@ isp_getpdb(ispsoftc_t *isp, int chan, uint16_t id, isp_pdb_t *pdb, int dolock)
if (dolock) {
FC_SCRATCH_RELEASE(isp, chan);
}
- return (mbs.param[0]);
+ return (mbs.param[0] | (mbs.param[1] << 16));
}
if (IS_24XX(isp)) {
isp_get_pdb_24xx(isp, fcp->isp_scratch, &un.bill);
@@ -2553,6 +2598,78 @@ isp_getpdb(ispsoftc_t *isp, int chan, uint16_t id, isp_pdb_t *pdb, int dolock)
return (0);
}
+static int
+isp_gethandles(ispsoftc_t *isp, int chan, uint16_t *handles, int *num,
+ int dolock, int loop)
+{
+ fcparam *fcp = FCPARAM(isp, chan);
+ mbreg_t mbs;
+ isp_pnhle_21xx_t el1, *elp1;
+ isp_pnhle_23xx_t el3, *elp3;
+ isp_pnhle_24xx_t el4, *elp4;
+ int i, j;
+ uint32_t p;
+ uint16_t h;
+
+ MBSINIT(&mbs, MBOX_GET_ID_LIST, MBLOGALL, 250000);
+ if (IS_24XX(isp)) {
+ mbs.param[2] = DMA_WD1(fcp->isp_scdma);
+ mbs.param[3] = DMA_WD0(fcp->isp_scdma);
+ mbs.param[6] = DMA_WD3(fcp->isp_scdma);
+ mbs.param[7] = DMA_WD2(fcp->isp_scdma);
+ mbs.param[8] = ISP_FC_SCRLEN;
+ mbs.param[9] = chan;
+ } else {
+ mbs.ibits = (1 << 1)|(1 << 2)|(1 << 3)|(1 << 6);
+ mbs.param[1] = DMA_WD1(fcp->isp_scdma);
+ mbs.param[2] = DMA_WD0(fcp->isp_scdma);
+ mbs.param[3] = DMA_WD3(fcp->isp_scdma);
+ mbs.param[6] = DMA_WD2(fcp->isp_scdma);
+ }
+ if (dolock) {
+ if (FC_SCRATCH_ACQUIRE(isp, chan)) {
+ isp_prt(isp, ISP_LOGERR, sacq);
+ return (-1);
+ }
+ }
+ MEMORYBARRIER(isp, SYNC_SFORDEV, 0, ISP_FC_SCRLEN, chan);
+ isp_mboxcmd(isp, &mbs);
+ if (mbs.param[0] != MBOX_COMMAND_COMPLETE) {
+ if (dolock) {
+ FC_SCRATCH_RELEASE(isp, chan);
+ }
+ return (mbs.param[0] | (mbs.param[1] << 16));
+ }
+ elp1 = fcp->isp_scratch;
+ elp3 = fcp->isp_scratch;
+ elp4 = fcp->isp_scratch;
+ for (i = 0, j = 0; i < mbs.param[1] && j < *num; i++) {
+ if (IS_24XX(isp)) {
+ isp_get_pnhle_24xx(isp, &elp4[i], &el4);
+ p = el4.pnhle_port_id_lo |
+ (el4.pnhle_port_id_hi << 16);
+ h = el4.pnhle_handle;
+ } else if (IS_23XX(isp)) {
+ isp_get_pnhle_23xx(isp, &elp3[i], &el3);
+ p = el3.pnhle_port_id_lo |
+ (el3.pnhle_port_id_hi << 16);
+ h = el3.pnhle_handle;
+ } else { /* 21xx */
+ isp_get_pnhle_21xx(isp, &elp1[i], &el1);
+ p = el1.pnhle_port_id_lo |
+ ((el1.pnhle_port_id_hi_handle & 0xff) << 16);
+ h = el1.pnhle_port_id_hi_handle >> 8;
+ }
+ if (loop && (p >> 8) != (fcp->isp_portid >> 8))
+ continue;
+ handles[j++] = h;
+ }
+ *num = j;
+ if (dolock)
+ FC_SCRATCH_RELEASE(isp, chan);
+ return (0);
+}
+
static void
isp_dump_chip_portdb(ispsoftc_t *isp, int chan, int dolock)
{
@@ -2588,7 +2705,8 @@ isp_get_wwn(ispsoftc_t *isp, int chan, int loopid, int nodename)
fcp->isp_loopstate < LOOP_PDB_RCVD) {
return (wwn);
}
- MBSINIT(&mbs, MBOX_GET_PORT_NAME, MBLOGALL & ~MBOX_COMMAND_PARAM_ERROR, 500000);
+ MBSINIT(&mbs, MBOX_GET_PORT_NAME,
+ MBLOGALL & ~MBLOGMASK(MBOX_COMMAND_PARAM_ERROR), 500000);
if (ISP_CAP_2KLOGIN(isp)) {
mbs.param[1] = loopid;
if (nodename) {
@@ -2836,7 +2954,7 @@ isp_fclink_test(ispsoftc_t *isp, int chan, int usdelay)
fcp->isp_fabric_params = 0;
}
if (chan) {
- fcp->isp_sns_hdl = NPH_SNS_HDLBASE + chan;
+ fcp->isp_sns_hdl = NPH_RESERVED - chan;
r = isp_plogx(isp, chan, fcp->isp_sns_hdl, SNS_PORT_ID, PLOGX_FLG_CMD_PLOGI | PLOGX_FLG_COND_PLOGI | PLOGX_FLG_SKIP_PRLI, 0);
if (r) {
isp_prt(isp, ISP_LOGWARN, "%s: Chan %d cannot log into SNS", __func__, chan);
@@ -3041,79 +3159,68 @@ isp_scan_loop(ispsoftc_t *isp, int chan)
{
fcportdb_t *lp, tmp;
fcparam *fcp = FCPARAM(isp, chan);
- int i;
+ int i, idx, lim, r;
isp_pdb_t pdb;
- uint16_t handle, lim = 0;
+ uint16_t handles[LOCAL_LOOP_LIM];
+ uint16_t handle;
if (fcp->isp_fwstate < FW_READY ||
fcp->isp_loopstate < LOOP_PDB_RCVD) {
return (-1);
}
-
if (fcp->isp_loopstate > LOOP_SCANNING_LOOP) {
return (0);
}
-
- /*
- * Check our connection topology.
- *
- * If we're a public or private loop, we scan 0..125 as handle values.
- * The firmware has (typically) peformed a PLOGI for us. We skip this
- * step if we're a ISP_24XX in NP-IV mode.
- *
- * If we're a N-port connection, we treat this is a short loop (0..1).
- */
- switch (fcp->isp_topo) {
- case TOPO_NL_PORT:
- lim = LOCAL_LOOP_LIM;
- break;
- case TOPO_FL_PORT:
- if (IS_24XX(isp) && isp->isp_nchan > 1) {
- isp_prt(isp, ISP_LOG_SANCFG, "Chan %d Skipping Local Loop Scan", chan);
- fcp->isp_loopstate = LOOP_LSCAN_DONE;
- return (0);
- }
- lim = LOCAL_LOOP_LIM;
- break;
- case TOPO_N_PORT:
- lim = 2;
- break;
- default:
- isp_prt(isp, ISP_LOG_SANCFG, "Chan %d no loop topology to scan", chan);
+ if (fcp->isp_topo != TOPO_NL_PORT && fcp->isp_topo != TOPO_FL_PORT &&
+ fcp->isp_topo != TOPO_N_PORT) {
+ isp_prt(isp, ISP_LOG_SANCFG,
+ "Chan %d no loop topology to scan", chan);
fcp->isp_loopstate = LOOP_LSCAN_DONE;
return (0);
}
fcp->isp_loopstate = LOOP_SCANNING_LOOP;
- isp_prt(isp, ISP_LOG_SANCFG, "Chan %d FC scan loop 0..%d", chan, lim-1);
+ lim = LOCAL_LOOP_LIM;
+ r = isp_gethandles(isp, chan, handles, &lim, 1, 1);
+ if (r != 0) {
+ isp_prt(isp, ISP_LOG_SANCFG,
+ "Chan %d getting list of handles failed with %x", chan, r);
+fail:
+ ISP_MARK_PORTDB(isp, chan, 1);
+ isp_prt(isp, ISP_LOG_SANCFG,
+ "Chan %d FC scan loop DONE (bad)", chan);
+ return (-1);
+ }
+
+ isp_prt(isp, ISP_LOG_SANCFG, "Chan %d FC scan loop -- %d ports",
+ chan, lim);
/*
* Run through the list and get the port database info for each one.
*/
- for (handle = 0; handle < lim; handle++) {
- int r;
+ for (idx = 0; idx < lim; idx++) {
+ handle = handles[idx];
+
/*
* Don't scan "special" ids.
*/
- if (handle >= FL_ID && handle <= SNS_ID) {
- continue;
- }
if (ISP_CAP_2KLOGIN(isp)) {
- if (handle >= NPH_RESERVED && handle <= NPH_FL_ID) {
+ if (handle >= NPH_RESERVED - isp->isp_nchan)
+ continue;
+ } else {
+ if (handle >= FL_ID && handle <= SNS_ID)
continue;
- }
}
+
/*
* In older cards with older f/w GET_PORT_DATABASE has been
* known to hang. This trick gets around that problem.
*/
if (IS_2100(isp) || IS_2200(isp)) {
uint64_t node_wwn = isp_get_wwn(isp, chan, handle, 1);
- if (fcp->isp_loopstate < LOOP_SCANNING_LOOP) {
- isp_prt(isp, ISP_LOG_SANCFG, "Chan %d FC scan loop DONE (bad)", chan);
- return (-1);
- }
+ if (fcp->isp_loopstate < LOOP_SCANNING_LOOP)
+ goto fail;
if (node_wwn == INI_NONE) {
continue;
}
@@ -3127,19 +3234,13 @@ isp_scan_loop(ispsoftc_t *isp, int chan)
isp_prt(isp, ISP_LOGDEBUG1,
"Chan %d FC scan loop handle %d returned %x",
chan, handle, r);
- if (fcp->isp_loopstate < LOOP_SCANNING_LOOP) {
- ISP_MARK_PORTDB(isp, chan, 1);
- isp_prt(isp, ISP_LOG_SANCFG, "Chan %d FC scan loop DONE (bad)", chan);
- return (-1);
- }
+ if (fcp->isp_loopstate < LOOP_SCANNING_LOOP)
+ goto fail;
continue;
}
- if (fcp->isp_loopstate < LOOP_SCANNING_LOOP) {
- ISP_MARK_PORTDB(isp, chan, 1);
- isp_prt(isp, ISP_LOG_SANCFG, "Chan %d FC scan loop DONE (bad)", chan);
- return (-1);
- }
+ if (fcp->isp_loopstate < LOOP_SCANNING_LOOP)
+ goto fail;
/*
* On *very* old 2100 firmware we would end up sometimes
@@ -3149,10 +3250,9 @@ isp_scan_loop(ispsoftc_t *isp, int chan)
*/
if (IS_2100(isp) && pdb.handle != handle) {
isp_prt(isp, ISP_LOGWARN,
- "Chan %d cannot synchronize port database", chan);
- ISP_MARK_PORTDB(isp, chan, 1);
- isp_prt(isp, ISP_LOG_SANCFG, "Chan %d FC scan loop DONE (bad)", chan);
- return (-1);
+ "Chan %d getpdb() returned wrong handle %x != %x",
+ chan, pdb.handle, handle);
+ goto fail;
}
/*
@@ -3208,9 +3308,7 @@ isp_scan_loop(ispsoftc_t *isp, int chan)
"Chan %d [%d] not probational/zombie (0x%x)",
chan, FC_PORTDB_TGT(isp, chan, lp), lp->state);
isp_dump_portdb(isp, chan);
- ISP_MARK_PORTDB(isp, chan, 1);
- isp_prt(isp, ISP_LOG_SANCFG, "Chan %d FC scan loop DONE (bad)", chan);
- return (-1);
+ goto fail;
}
/*
@@ -3457,7 +3555,7 @@ isp_scan_fabric(ispsoftc_t *isp, int chan)
{
fcparam *fcp = FCPARAM(isp, chan);
uint32_t portid;
- uint16_t handle, oldhandle, loopid;
+ uint16_t handle, loopid;
isp_pdb_t pdb;
int portidx, portlim, r;
sns_gid_ft_rsp_t *rs0, *rs1;
@@ -3496,7 +3594,7 @@ isp_scan_fabric(ispsoftc_t *isp, int chan)
loopid = FL_ID;
}
r = isp_getpdb(isp, chan, loopid, &pdb, 0);
- if (r == MBOX_NOT_LOGGED_IN) {
+ if ((r & 0xffff) == MBOX_NOT_LOGGED_IN) {
isp_dump_chip_portdb(isp, chan, 0);
}
if (r) {
@@ -3560,11 +3658,6 @@ isp_scan_fabric(ispsoftc_t *isp, int chan)
fcp->portdb[FL_ID].state = FC_PORTDB_STATE_PENDING_VALID;
/*
- * Prime the handle we will start using.
- */
- oldhandle = FCPARAM(isp, 0)->isp_lasthdl;
-
- /*
* Go through the list and remove duplicate port ids.
*/
@@ -3757,7 +3850,7 @@ isp_scan_fabric(ispsoftc_t *isp, int chan)
*/
if ((fcp->role & ISP_ROLE_INITIATOR) == 0 ||
isp_login_device(isp, chan, portid, &pdb,
- &oldhandle)) {
+ &FCPARAM(isp, 0)->isp_lasthdl)) {
lp->new_portid = portid;
lp->state = FC_PORTDB_STATE_DEAD;
if (fcp->isp_loopstate !=
@@ -3774,7 +3867,6 @@ isp_scan_fabric(ispsoftc_t *isp, int chan)
ISP_MARK_PORTDB(isp, chan, 1);
return (-1);
}
- FCPARAM(isp, 0)->isp_lasthdl = oldhandle;
MAKE_WWN_FROM_NODE_NAME(wwnn, pdb.nodename);
MAKE_WWN_FROM_NODE_NAME(wwpn, pdb.portname);
if (wwpn != lp->port_wwn ||
@@ -3875,7 +3967,8 @@ isp_scan_fabric(ispsoftc_t *isp, int chan)
* isp_login_device will check for handle and
* portid consistency after login.
*/
- if (isp_login_device(isp, chan, portid, &pdb, &oldhandle)) {
+ if (isp_login_device(isp, chan, portid, &pdb,
+ &FCPARAM(isp, 0)->isp_lasthdl)) {
if (fcp->isp_loopstate != LOOP_SCANNING_FABRIC) {
FC_SCRATCH_RELEASE(isp, chan);
ISP_MARK_PORTDB(isp, chan, 1);
@@ -3888,7 +3981,6 @@ isp_scan_fabric(ispsoftc_t *isp, int chan)
ISP_MARK_PORTDB(isp, chan, 1);
return (-1);
}
- FCPARAM(isp, 0)->isp_lasthdl = oldhandle;
handle = pdb.handle;
MAKE_WWN_FROM_NODE_NAME(wwnn, pdb.nodename);
@@ -3981,7 +4073,7 @@ isp_login_device(ispsoftc_t *isp, int chan, uint32_t portid, isp_pdb_t *p, uint1
lim = NPH_MAX;
}
- handle = isp_nxt_handle(isp, chan, *ohp);
+ handle = isp_next_handle(isp, ohp);
for (i = 0; i < lim; i++) {
/*
* See if we're still logged into something with
@@ -4005,7 +4097,6 @@ isp_login_device(ispsoftc_t *isp, int chan, uint32_t portid, isp_pdb_t *p, uint1
return (-1);
}
if (r == 0) {
- *ohp = handle;
break;
} else if ((r & 0xffff) == MBOX_PORT_ID_USED) {
/*
@@ -4023,22 +4114,14 @@ isp_login_device(ispsoftc_t *isp, int chan, uint32_t portid, isp_pdb_t *p, uint1
if (FCPARAM(isp, chan)->isp_loopstate != LOOP_SCANNING_FABRIC) {
return (-1);
}
- if (r == 0) {
- *ohp = handle;
- } else {
+ if (r != 0)
i = lim;
- }
break;
} else if ((r & 0xffff) == MBOX_LOOP_ID_USED) {
- /*
- * Try the next loop id.
- */
- *ohp = handle;
- handle = isp_nxt_handle(isp, chan, handle);
+ /* Try the next loop id. */
+ handle = isp_next_handle(isp, ohp);
} else {
- /*
- * Give up.
- */
+ /* Give up. */
i = lim;
break;
}
@@ -4223,45 +4306,46 @@ isp_register_fc4_type_24xx(ispsoftc_t *isp, int chan)
}
static uint16_t
-isp_nxt_handle(ispsoftc_t *isp, int chan, uint16_t handle)
+isp_next_handle(ispsoftc_t *isp, uint16_t *ohp)
{
- int i;
+ fcparam *fcp;
+ int i, chan, wrap;
+ uint16_t handle, minh, maxh;
+
+ handle = *ohp;
+ if (ISP_CAP_2KLOGIN(isp)) {
+ minh = 0;
+ maxh = NPH_RESERVED - isp->isp_nchan; /* Reserve for SNS */
+ } else {
+ minh = SNS_ID + 1;
+ maxh = NPH_MAX - 1;
+ }
+ wrap = 0;
+
+next:
if (handle == NIL_HANDLE) {
- if (FCPARAM(isp, chan)->isp_topo == TOPO_F_PORT) {
- handle = 0;
- } else {
- handle = SNS_ID+1;
- }
+ handle = minh;
} else {
- handle += 1;
- if (handle >= FL_ID && handle <= SNS_ID) {
- handle = SNS_ID+1;
- }
- if (handle >= NPH_RESERVED && handle <= NPH_FL_ID) {
- handle = NPH_FL_ID+1;
- }
- if (ISP_CAP_2KLOGIN(isp)) {
- if (handle == NPH_MAX_2K) {
- handle = 0;
- }
- } else {
- if (handle == NPH_MAX) {
- handle = 0;
+ handle++;
+ if (handle > maxh) {
+ if (++wrap >= 2) {
+ isp_prt(isp, ISP_LOGERR, "Out of port handles!");
+ return (NIL_HANDLE);
}
+ handle = minh;
}
}
- if (handle == FCPARAM(isp, chan)->isp_loopid) {
- return (isp_nxt_handle(isp, chan, handle));
- }
- for (i = 0; i < MAX_FC_TARG; i++) {
- if (FCPARAM(isp, chan)->portdb[i].state ==
- FC_PORTDB_STATE_NIL) {
+ for (chan = 0; chan < isp->isp_nchan; chan++) {
+ fcp = FCPARAM(isp, chan);
+ if (fcp->role == ISP_ROLE_NONE)
continue;
- }
- if (FCPARAM(isp, chan)->portdb[i].handle == handle) {
- return (isp_nxt_handle(isp, chan, handle));
+ for (i = 0; i < MAX_FC_TARG; i++) {
+ if (fcp->portdb[i].state != FC_PORTDB_STATE_NIL &&
+ fcp->portdb[i].handle == handle)
+ goto next;
}
}
+ *ohp = handle;
return (handle);
}
@@ -4285,16 +4369,6 @@ isp_start(XS_T *xs)
isp = XS_ISP(xs);
/*
- * Now make sure we're running.
- */
-
- if (isp->isp_state != ISP_RUNSTATE) {
- isp_prt(isp, ISP_LOGERR, "Adapter not at RUNSTATE");
- XS_SETERR(xs, HBA_BOTCH);
- return (CMD_COMPLETE);
- }
-
- /*
* Check command CDB length, etc.. We really are limited to 16 bytes
* for Fibre Channel, but can do up to 44 bytes in parallel SCSI,
* but probably only if we're running fairly new firmware (we'll
@@ -4316,11 +4390,19 @@ isp_start(XS_T *xs)
fcparam *fcp = FCPARAM(isp, XS_CHANNEL(xs));
if ((fcp->role & ISP_ROLE_INITIATOR) == 0) {
- isp_prt(isp, ISP_LOG_WARN1, "%d.%d.%d I am not an initiator", XS_CHANNEL(xs), target, XS_LUN(xs));
+ isp_prt(isp, ISP_LOG_WARN1,
+ "%d.%d.%jx I am not an initiator",
+ XS_CHANNEL(xs), target, (uintmax_t)XS_LUN(xs));
XS_SETERR(xs, HBA_SELTIMEOUT);
return (CMD_COMPLETE);
}
+ if (isp->isp_state != ISP_RUNSTATE) {
+ isp_prt(isp, ISP_LOGERR, "Adapter not at RUNSTATE");
+ XS_SETERR(xs, HBA_BOTCH);
+ return (CMD_COMPLETE);
+ }
+
/*
* Try again later.
*/
@@ -4336,21 +4418,34 @@ isp_start(XS_T *xs)
return (CMD_COMPLETE);
}
if (lp->state == FC_PORTDB_STATE_ZOMBIE) {
- isp_prt(isp, ISP_LOGDEBUG1, "%d.%d.%d target zombie", XS_CHANNEL(xs), target, XS_LUN(xs));
+ isp_prt(isp, ISP_LOGDEBUG1,
+ "%d.%d.%jx target zombie",
+ XS_CHANNEL(xs), target, (uintmax_t)XS_LUN(xs));
return (CMD_RQLATER);
}
if (lp->state != FC_PORTDB_STATE_VALID) {
- isp_prt(isp, ISP_LOGDEBUG1, "%d.%d.%d bad db port state 0x%x", XS_CHANNEL(xs), target, XS_LUN(xs), lp->state);
+ isp_prt(isp, ISP_LOGDEBUG1,
+ "%d.%d.%jx bad db port state 0x%x",
+ XS_CHANNEL(xs), target, (uintmax_t)XS_LUN(xs), lp->state);
XS_SETERR(xs, HBA_SELTIMEOUT);
return (CMD_COMPLETE);
}
} else {
sdparam *sdp = SDPARAM(isp, XS_CHANNEL(xs));
if ((sdp->role & ISP_ROLE_INITIATOR) == 0) {
- isp_prt(isp, ISP_LOGDEBUG1, "%d.%d.%d I am not an initiator", XS_CHANNEL(xs), target, XS_LUN(xs));
+ isp_prt(isp, ISP_LOGDEBUG1,
+ "%d.%d.%jx I am not an initiator",
+ XS_CHANNEL(xs), target, (uintmax_t)XS_LUN(xs));
XS_SETERR(xs, HBA_SELTIMEOUT);
return (CMD_COMPLETE);
}
+
+ if (isp->isp_state != ISP_RUNSTATE) {
+ isp_prt(isp, ISP_LOGERR, "Adapter not at RUNSTATE");
+ XS_SETERR(xs, HBA_BOTCH);
+ return (CMD_COMPLETE);
+ }
+
if (sdp->update) {
isp_spi_update(isp, XS_CHANNEL(xs));
}
@@ -4497,14 +4592,20 @@ isp_start(XS_T *xs)
t7->req_tidlo = lp->portid;
t7->req_tidhi = lp->portid >> 16;
t7->req_vpidx = ISP_GET_VPIDX(isp, XS_CHANNEL(xs));
- if (XS_LUN(xs) > 256) {
+#if __FreeBSD_version >= 1000700
+ be64enc(t7->req_lun, CAM_EXTLUN_BYTE_SWIZZLE(XS_LUN(xs)));
+#else
+ if (XS_LUN(xs) >= 256) {
t7->req_lun[0] = XS_LUN(xs) >> 8;
t7->req_lun[0] |= 0x40;
}
t7->req_lun[1] = XS_LUN(xs);
+#endif
if (FCPARAM(isp, XS_CHANNEL(xs))->fctape_enabled && (lp->prli_word3 & PRLI_WD3_RETRY)) {
if (FCP_NEXT_CRN(isp, &t7->req_crn, xs)) {
- isp_prt(isp, ISP_LOG_WARN1, "%d.%d.%d cannot generate next CRN", XS_CHANNEL(xs), target, XS_LUN(xs));
+ isp_prt(isp, ISP_LOG_WARN1,
+ "%d.%d.%jx cannot generate next CRN",
+ XS_CHANNEL(xs), target, (uintmax_t)XS_LUN(xs));
XS_SETERR(xs, HBA_BOTCH);
return (CMD_EAGAIN);
}
@@ -4521,7 +4622,9 @@ isp_start(XS_T *xs)
}
if (FCPARAM(isp, XS_CHANNEL(xs))->fctape_enabled && (lp->prli_word3 & PRLI_WD3_RETRY)) {
if (FCP_NEXT_CRN(isp, &t2->req_crn, xs)) {
- isp_prt(isp, ISP_LOG_WARN1, "%d.%d.%d cannot generate next CRN", XS_CHANNEL(xs), target, XS_LUN(xs));
+ isp_prt(isp, ISP_LOG_WARN1,
+ "%d.%d.%jx cannot generate next CRN",
+ XS_CHANNEL(xs), target, (uintmax_t)XS_LUN(xs));
XS_SETERR(xs, HBA_BOTCH);
return (CMD_EAGAIN);
}
@@ -4530,11 +4633,19 @@ isp_start(XS_T *xs)
ispreqt2e_t *t2e = (ispreqt2e_t *)local;
t2e->req_target = lp->handle;
t2e->req_scclun = XS_LUN(xs);
+#if __FreeBSD_version < 1000700
+ if (XS_LUN(xs) >= 256)
+ t2e->req_scclun |= 0x4000;
+#endif
cdbp = t2e->req_cdb;
} else if (ISP_CAP_SCCFW(isp)) {
ispreqt2_t *t2 = (ispreqt2_t *)local;
t2->req_target = lp->handle;
t2->req_scclun = XS_LUN(xs);
+#if __FreeBSD_version < 1000700
+ if (XS_LUN(xs) >= 256)
+ t2->req_scclun |= 0x4000;
+#endif
cdbp = t2->req_cdb;
} else {
t2->req_target = lp->handle;
@@ -4789,7 +4900,8 @@ isp_control(ispsoftc_t *isp, ispctl_t ctl, ...)
} else {
mbs.param[1] = (chan << 15) | (tgt << 8) | XS_LUN(xs);
}
- MBSINIT(&mbs, MBOX_ABORT, MBLOGALL & ~MBOX_COMMAND_ERROR, 0);
+ MBSINIT(&mbs, MBOX_ABORT,
+ MBLOGALL & ~MBLOGMASK(MBOX_COMMAND_ERROR), 0);
mbs.param[2] = handle;
isp_mboxcmd(isp, &mbs);
if (mbs.param[0] != MBOX_COMMAND_COMPLETE) {
@@ -4923,7 +5035,7 @@ isp_control(ispsoftc_t *isp, ispctl_t ctl, ...)
return (isp_plogx(isp, p->channel, p->handle, p->portid, p->flags, 0));
}
do {
- p->handle = isp_nxt_handle(isp, p->channel, p->handle);
+ isp_next_handle(isp, &p->handle);
r = isp_plogx(isp, p->channel, p->handle, p->portid, p->flags, 0);
if ((r & 0xffff) == MBOX_PORT_ID_USED) {
p->handle = r >> 16;
@@ -4973,7 +5085,7 @@ isp_control(ispsoftc_t *isp, ispctl_t ctl, ...)
#endif
void
-isp_intr(ispsoftc_t *isp, uint32_t isr, uint16_t sema, uint16_t mbox)
+isp_intr(ispsoftc_t *isp, uint16_t isr, uint16_t sema, uint16_t info)
{
XS_T *complist[MAX_REQUESTQ_COMPLETIONS], *xs;
uint32_t iptr, optr, junk;
@@ -4987,11 +5099,11 @@ again:
*/
if (sema) {
fmbox:
- if (mbox & MBOX_COMMAND_COMPLETE) {
+ if (info & MBOX_COMMAND_COMPLETE) {
isp->isp_intmboxc++;
if (isp->isp_mboxbsy) {
int obits = isp->isp_obits;
- isp->isp_mboxtmp[0] = mbox;
+ isp->isp_mboxtmp[0] = info;
for (i = 1; i < ISP_NMBOX(isp); i++) {
if ((obits & (1 << i)) == 0) {
continue;
@@ -5005,15 +5117,15 @@ again:
}
MBOX_NOTIFY_COMPLETE(isp);
} else {
- isp_prt(isp, ISP_LOGWARN, "mailbox cmd (0x%x) with no waiters", mbox);
+ isp_prt(isp, ISP_LOGWARN, "mailbox cmd (0x%x) with no waiters", info);
}
} else {
- i = IS_FC(isp)? isp_parse_async_fc(isp, mbox) : isp_parse_async(isp, mbox);
+ i = IS_FC(isp)? isp_parse_async_fc(isp, info) : isp_parse_async(isp, info);
if (i < 0) {
return;
}
}
- if ((IS_FC(isp) && mbox != ASYNC_RIOZIO_STALL) || isp->isp_state != ISP_RUNSTATE) {
+ if ((IS_FC(isp) && info != ASYNC_RIOZIO_STALL) || isp->isp_state != ISP_RUNSTATE) {
goto out;
}
}
@@ -5028,7 +5140,8 @@ again:
if (isp->isp_mboxbsy && isp->isp_lastmbxcmd == MBOX_ABOUT_FIRMWARE) {
goto fmbox;
}
- isp_prt(isp, ISP_LOGINFO, "interrupt (ISR=%x SEMA=%x) when not ready", isr, sema);
+ isp_prt(isp, ISP_LOGINFO, "interrupt (ISR=%x SEMA=%x INFO=%x) "
+ "when not ready", isr, sema, info);
/*
* Thank you very much! *Burrrp*!
*/
@@ -5046,8 +5159,8 @@ again:
* Check for ATIO Queue entries.
*/
if (IS_24XX(isp) &&
- ((isr & BIU2400_R2HST_ISTAT_MASK) == ISP2400R2HST_ATIO_RSPQ_UPDATE ||
- (isr & BIU2400_R2HST_ISTAT_MASK) == ISP2400R2HST_ATIO_RQST_UPDATE)) {
+ (isr == ISPR2HST_ATIO_UPDATE || isr == ISPR2HST_ATIO_RSPQ_UPDATE ||
+ isr == ISPR2HST_ATIO_UPDATE2)) {
iptr = ISP_READ(isp, BIU2400_ATIO_RSPINP);
optr = isp->isp_atioodx;
@@ -5081,25 +5194,6 @@ again:
#endif
/*
- * Get the current Response Queue Out Pointer.
- *
- * If we're a 2300 or 2400, we can ask what hardware what it thinks.
- */
-#if 0
- if (IS_23XX(isp) || IS_24XX(isp)) {
- optr = ISP_READ(isp, isp->isp_respoutrp);
- /*
- * Debug: to be taken out eventually
- */
- if (isp->isp_resodx != optr) {
- isp_prt(isp, ISP_LOGINFO, "isp_intr: hard optr=%x, soft optr %x", optr, isp->isp_resodx);
- isp->isp_resodx = optr;
- }
- } else
-#endif
- optr = isp->isp_resodx;
-
- /*
* You *must* read the Response Queue In Pointer
* prior to clearing the RISC interrupt.
*
@@ -5120,6 +5214,7 @@ again:
iptr = ISP_READ(isp, isp->isp_respinrp);
}
+ optr = isp->isp_resodx;
if (optr == iptr && sema == 0) {
/*
* There are a lot of these- reasons unknown- mostly on
@@ -5143,8 +5238,8 @@ again:
;
} else {
sema = ISP_READ(isp, BIU_SEMA);
- mbox = ISP_READ(isp, OUTMAILBOX0);
- if ((sema & 0x3) && (mbox & 0x8000)) {
+ info = ISP_READ(isp, OUTMAILBOX0);
+ if ((sema & 0x3) && (info & 0x8000)) {
goto again;
}
}
@@ -5339,12 +5434,14 @@ again:
continue;
}
if (req_status_flags & RQSTF_BUS_RESET) {
- isp_prt(isp, ISP_LOG_WARN1, "%d.%d.%d bus was reset", XS_CHANNEL(xs), XS_TGT(xs), XS_LUN(xs));
+ isp_prt(isp, ISP_LOG_WARN1, "%d.%d.%jx bus was reset",
+ XS_CHANNEL(xs), XS_TGT(xs), (uintmax_t)XS_LUN(xs));
XS_SETERR(xs, HBA_BUSRESET);
ISP_SET_SENDMARKER(isp, XS_CHANNEL(xs), 1);
}
if (buddaboom) {
- isp_prt(isp, ISP_LOG_WARN1, "%d.%d.%d buddaboom", XS_CHANNEL(xs), XS_TGT(xs), XS_LUN(xs));
+ isp_prt(isp, ISP_LOG_WARN1, "%d.%d.%jx buddaboom",
+ XS_CHANNEL(xs), XS_TGT(xs), (uintmax_t)XS_LUN(xs));
XS_SETERR(xs, HBA_BOTCH);
}
@@ -5396,24 +5493,32 @@ again:
if (resp && rlen >= 4 && resp[FCP_RSPNS_CODE_OFFSET] != 0) {
const char *ptr;
char lb[64];
- const char *rnames[6] = {
- "Task Management Function Done",
- "Data Length Differs From Burst Length",
- "Invalid FCP Cmnd",
- "FCP DATA RO mismatch with FCP DATA_XFR_RDY RO",
- "Task Management Function Rejected",
- "Task Management Function Failed",
+ const char *rnames[10] = {
+ "Task Management function complete",
+ "FCP_DATA length different than FCP_BURST_LEN",
+ "FCP_CMND fields invalid",
+ "FCP_DATA parameter mismatch with FCP_DATA_RO",
+ "Task Management function rejected",
+ "Task Management function failed",
+ NULL,
+ NULL,
+ "Task Management function succeeded",
+ "Task Management function incorrect logical unit number",
};
- if (resp[FCP_RSPNS_CODE_OFFSET] > 5) {
- ISP_SNPRINTF(lb, sizeof lb, "Unknown FCP Response Code 0x%x", resp[FCP_RSPNS_CODE_OFFSET]);
+ uint8_t code = resp[FCP_RSPNS_CODE_OFFSET];
+ if (code >= 10 || rnames[code] == NULL) {
+ ISP_SNPRINTF(lb, sizeof(lb),
+ "Unknown FCP Response Code 0x%x",
+ code);
ptr = lb;
} else {
- ptr = rnames[resp[FCP_RSPNS_CODE_OFFSET]];
+ ptr = rnames[code];
}
- isp_xs_prt(isp, xs, ISP_LOGWARN, "FCP RESPONSE, LENGTH %u: %s CDB0=0x%02x", rlen, ptr, XS_CDBP(xs)[0] & 0xff);
- if (resp[FCP_RSPNS_CODE_OFFSET] != 0) {
+ isp_xs_prt(isp, xs, ISP_LOGWARN,
+ "FCP RESPONSE, LENGTH %u: %s CDB0=0x%02x",
+ rlen, ptr, XS_CDBP(xs)[0] & 0xff);
+ if (code != 0 && code != 8)
XS_SETERR(xs, HBA_BOTCH);
- }
}
if (IS_24XX(isp)) {
isp_parse_status_24xx(isp, (isp24xx_statusreq_t *)sp, xs, &resid);
@@ -5480,7 +5585,11 @@ again:
*XS_STSP(xs) = SCSI_QFULL;
XS_SETERR(xs, HBA_NOERROR);
} else if (XS_NOERR(xs)) {
- isp_prt(isp, ISP_LOG_WARN1, "%d.%d.%d badness at %s:%u", XS_CHANNEL(xs), XS_TGT(xs), XS_LUN(xs), __func__, __LINE__);
+ isp_prt(isp, ISP_LOG_WARN1,
+ "%d.%d.%jx badness at %s:%u",
+ XS_CHANNEL(xs), XS_TGT(xs),
+ (uintmax_t)XS_LUN(xs),
+ __func__, __LINE__);
XS_SETERR(xs, HBA_BOTCH);
}
XS_SET_RESID(xs, XS_XFRLEN(xs));
@@ -5892,7 +6001,11 @@ isp_parse_async_fc(ispsoftc_t *isp, uint16_t mbox)
continue;
}
j++;
- isp_prt(isp, ISP_LOG_WARN1, "%d.%d.%d bus reset set at %s:%u", XS_CHANNEL(xs), XS_TGT(xs), XS_LUN(xs), __func__, __LINE__);
+ isp_prt(isp, ISP_LOG_WARN1,
+ "%d.%d.%jx bus reset set at %s:%u",
+ XS_CHANNEL(xs), XS_TGT(xs),
+ (uintmax_t)XS_LUN(xs),
+ __func__, __LINE__);
XS_SETERR(xs, HBA_BUSRESET);
}
if (j) {
@@ -5980,21 +6093,21 @@ isp_parse_async_fc(ispsoftc_t *isp, uint16_t mbox)
case ASYNC_PDB_CHANGED:
{
- int nphdl, nlstate, reason;
- /*
- * We *should* get a channel out of the 24XX, but we don't seem
- * to get more than a PDB CHANGED on channel 0, so turn it into
- * a broadcast event.
- */
+ int echan, nphdl, nlstate, reason;
+
if (IS_24XX(isp)) {
nphdl = ISP_READ(isp, OUTMAILBOX1);
nlstate = ISP_READ(isp, OUTMAILBOX2);
reason = ISP_READ(isp, OUTMAILBOX3) >> 8;
+ GET_24XX_BUS(isp, chan, "ASYNC_CHANGE_NOTIFY");
+ echan = (nphdl == NIL_HANDLE) ?
+ isp->isp_nchan - 1 : chan;
} else {
nphdl = NIL_HANDLE;
nlstate = reason = 0;
+ chan = echan = 0;
}
- for (chan = 0; chan < isp->isp_nchan; chan++) {
+ for (; chan <= echan; chan++) {
fcparam *fcp = FCPARAM(isp, chan);
if (fcp->role == ISP_ROLE_NONE) {
@@ -6371,7 +6484,9 @@ isp_parse_status(ispsoftc_t *isp, ispstatusreq_t *sp, XS_T *xs, long *rp)
break;
case RQCS_XACT_ERR2:
- isp_xs_prt(isp, xs, ISP_LOGERR, "HBA attempted queued transaction to target routine %d", XS_LUN(xs));
+ isp_xs_prt(isp, xs, ISP_LOGERR,
+ "HBA attempted queued transaction to target routine %jx",
+ (uintmax_t)XS_LUN(xs));
break;
case RQCS_XACT_ERR3:
@@ -7015,7 +7130,7 @@ static const uint32_t mbpfc[] = {
ISP_FC_OPMAP(0x07, 0x03), /* 0x1d: MBOX_GET_DEV_QUEUE_STATUS */
ISP_FC_OPMAP(0x00, 0x00), /* 0x1e: */
ISP_FC_OPMAP(0x01, 0x07), /* 0x1f: MBOX_GET_FIRMWARE_STATUS */
- ISP_FC_OPMAP_HALF(0x2, 0x01, 0x0, 0xcf), /* 0x20: MBOX_GET_LOOP_ID */
+ ISP_FC_OPMAP_HALF(0x2, 0x01, 0x7e, 0xcf), /* 0x20: MBOX_GET_LOOP_ID */
ISP_FC_OPMAP(0x00, 0x00), /* 0x21: */
ISP_FC_OPMAP(0x01, 0x07), /* 0x22: MBOX_GET_RETRY_COUNT */
ISP_FC_OPMAP(0x00, 0x00), /* 0x23: */
@@ -7055,7 +7170,7 @@ static const uint32_t mbpfc[] = {
ISP_FC_OPMAP(0x00, 0x00), /* 0x45: */
ISP_FC_OPMAP(0x00, 0x00), /* 0x46: */
ISP_FC_OPMAP(0xcf, 0x03), /* 0x47: GET PORT_DATABASE ENHANCED */
- ISP_FC_OPMAP(0xcd, 0x01), /* 0x48: MBOX_INIT_FIRMWARE_MULTI_ID */
+ ISP_FC_OPMAP(0xcf, 0x0f), /* 0x48: MBOX_INIT_FIRMWARE_MULTI_ID */
ISP_FC_OPMAP(0xcd, 0x01), /* 0x49: MBOX_GET_VP_DATABASE */
ISP_FC_OPMAP_HALF(0x2, 0xcd, 0x0, 0x01), /* 0x4a: MBOX_GET_VP_DATABASE_ENTRY */
ISP_FC_OPMAP(0x00, 0x00), /* 0x4b: */
@@ -7079,7 +7194,7 @@ static const uint32_t mbpfc[] = {
ISP_FC_OPMAP(0x07, 0x03), /* 0x5d: MBOX_GET_SET_DATA_RATE */
ISP_FC_OPMAP(0x00, 0x00), /* 0x5e: */
ISP_FC_OPMAP(0x00, 0x00), /* 0x5f: */
- ISP_FC_OPMAP(0xcd, 0x01), /* 0x60: MBOX_INIT_FIRMWARE */
+ ISP_FC_OPMAP(0xcf, 0x0f), /* 0x60: MBOX_INIT_FIRMWARE */
ISP_FC_OPMAP(0x00, 0x00), /* 0x61: */
ISP_FC_OPMAP(0x01, 0x01), /* 0x62: MBOX_INIT_LIP */
ISP_FC_OPMAP(0xcd, 0x03), /* 0x63: MBOX_GET_FC_AL_POSITION_MAP */
@@ -7100,14 +7215,14 @@ static const uint32_t mbpfc[] = {
ISP_FC_OPMAP(0x0f, 0x0f), /* 0x72: MBOX_INIT_LIP_LOGIN */
ISP_FC_OPMAP(0x00, 0x00), /* 0x73: */
ISP_FC_OPMAP(0x07, 0x01), /* 0x74: LOGIN LOOP PORT */
- ISP_FC_OPMAP(0xcf, 0x03), /* 0x75: GET PORT/NODE NAME LIST */
+ ISP_FC_OPMAP_HALF(0x03, 0xcf, 0x00, 0x07), /* 0x75: GET PORT/NODE NAME LIST */
ISP_FC_OPMAP(0x4f, 0x01), /* 0x76: SET VENDOR ID */
ISP_FC_OPMAP(0xcd, 0x01), /* 0x77: INITIALIZE IP MAILBOX */
ISP_FC_OPMAP(0x00, 0x00), /* 0x78: */
ISP_FC_OPMAP(0x00, 0x00), /* 0x79: */
ISP_FC_OPMAP(0x00, 0x00), /* 0x7a: */
ISP_FC_OPMAP(0x00, 0x00), /* 0x7b: */
- ISP_FC_OPMAP(0x4f, 0x03), /* 0x7c: Get ID List */
+ ISP_FC_OPMAP_HALF(0x03, 0x4f, 0x00, 0x07), /* 0x7c: Get ID List */
ISP_FC_OPMAP(0xcf, 0x01), /* 0x7d: SEND LFA */
ISP_FC_OPMAP(0x0f, 0x01) /* 0x7e: LUN RESET */
};
@@ -7297,7 +7412,7 @@ isp_mboxcmd_qnw(ispsoftc_t *isp, mbreg_t *mbp, int nodelay)
static void
isp_mboxcmd(ispsoftc_t *isp, mbreg_t *mbp)
{
- const char *cname, *xname;
+ const char *cname, *xname, *sname;
char tname[16], mname[16];
unsigned int ibits, obits, box, opcode;
@@ -7407,57 +7522,58 @@ isp_mboxcmd(ispsoftc_t *isp, mbreg_t *mbp)
isp->isp_mboxbsy = 0;
MBOX_RELEASE(isp);
- out:
- if (mbp->logval == 0 || opcode == MBOX_EXEC_FIRMWARE) {
+out:
+ if (mbp->logval == 0 || mbp->param[0] == MBOX_COMMAND_COMPLETE)
+ return;
+
+ if ((mbp->param[0] & 0xbfe0) == 0 &&
+ (mbp->logval & MBLOGMASK(mbp->param[0])) == 0)
return;
- }
- /*
- * Just to be chatty here...
- */
xname = NULL;
+ sname = "";
switch (mbp->param[0]) {
- case MBOX_COMMAND_COMPLETE:
- break;
case MBOX_INVALID_COMMAND:
- if (mbp->logval & MBLOGMASK(MBOX_COMMAND_COMPLETE)) {
- xname = "INVALID COMMAND";
- }
+ xname = "INVALID COMMAND";
break;
case MBOX_HOST_INTERFACE_ERROR:
- if (mbp->logval & MBLOGMASK(MBOX_HOST_INTERFACE_ERROR)) {
- xname = "HOST INTERFACE ERROR";
- }
+ xname = "HOST INTERFACE ERROR";
break;
case MBOX_TEST_FAILED:
- if (mbp->logval & MBLOGMASK(MBOX_TEST_FAILED)) {
- xname = "TEST FAILED";
- }
+ xname = "TEST FAILED";
break;
case MBOX_COMMAND_ERROR:
- if (mbp->logval & MBLOGMASK(MBOX_COMMAND_ERROR)) {
- xname = "COMMAND ERROR";
- }
+ xname = "COMMAND ERROR";
+ ISP_SNPRINTF(mname, sizeof(mname), " subcode 0x%x",
+ mbp->param[1]);
+ sname = mname;
break;
case MBOX_COMMAND_PARAM_ERROR:
- if (mbp->logval & MBLOGMASK(MBOX_COMMAND_PARAM_ERROR)) {
- xname = "COMMAND PARAMETER ERROR";
- }
- break;
- case MBOX_LOOP_ID_USED:
- if (mbp->logval & MBLOGMASK(MBOX_LOOP_ID_USED)) {
- xname = "LOOP ID ALREADY IN USE";
- }
+ xname = "COMMAND PARAMETER ERROR";
break;
case MBOX_PORT_ID_USED:
- if (mbp->logval & MBLOGMASK(MBOX_PORT_ID_USED)) {
- xname = "PORT ID ALREADY IN USE";
- }
+ xname = "PORT ID ALREADY IN USE";
+ break;
+ case MBOX_LOOP_ID_USED:
+ xname = "LOOP ID ALREADY IN USE";
break;
case MBOX_ALL_IDS_USED:
- if (mbp->logval & MBLOGMASK(MBOX_ALL_IDS_USED)) {
- xname = "ALL LOOP IDS IN USE";
- }
+ xname = "ALL LOOP IDS IN USE";
+ break;
+ case MBOX_NOT_LOGGED_IN:
+ xname = "NOT LOGGED IN";
+ break;
+ case MBOX_LINK_DOWN_ERROR:
+ xname = "LINK DOWN ERROR";
+ break;
+ case MBOX_LOOPBACK_ERROR:
+ xname = "LOOPBACK ERROR";
+ break;
+ case MBOX_CHECKSUM_ERROR:
+ xname = "CHECKSUM ERROR";
+ break;
+ case MBOX_INVALID_PRODUCT_KEY:
+ xname = "INVALID PRODUCT KEY";
break;
case MBOX_REGS_BUSY:
xname = "REGISTERS BUSY";
@@ -7471,8 +7587,8 @@ isp_mboxcmd(ispsoftc_t *isp, mbreg_t *mbp)
break;
}
if (xname) {
- isp_prt(isp, ISP_LOGALL, "Mailbox Command '%s' failed (%s)",
- cname, xname);
+ isp_prt(isp, ISP_LOGALL, "Mailbox Command '%s' failed (%s%s)",
+ cname, xname, sname);
}
}
@@ -7824,7 +7940,8 @@ isp_reinit(ispsoftc_t *isp, int do_load_defaults)
{
int i, res = 0;
- isp_reset(isp, do_load_defaults);
+ if (isp->isp_state != ISP_RESETSTATE)
+ isp_reset(isp, do_load_defaults);
if (isp->isp_state != ISP_RESETSTATE) {
res = EIO;
isp_prt(isp, ISP_LOGERR, "%s: cannot reset card", __func__);
@@ -7833,15 +7950,10 @@ isp_reinit(ispsoftc_t *isp, int do_load_defaults)
}
isp_init(isp);
- if (isp->isp_state == ISP_INITSTATE) {
- isp->isp_state = ISP_RUNSTATE;
- }
-
- if (isp->isp_state != ISP_RUNSTATE) {
+ if (isp->isp_state > ISP_RESETSTATE &&
+ isp->isp_state != ISP_RUNSTATE) {
res = EIO;
-#ifndef ISP_TARGET_MODE
- isp_prt(isp, ISP_LOGWARN, "%s: not at runstate", __func__);
-#endif
+ isp_prt(isp, ISP_LOGERR, "%s: cannot init card", __func__);
ISP_DISABLE_INTS(isp);
if (IS_FC(isp)) {
/*
diff --git a/sys/dev/isp/isp_freebsd.c b/sys/dev/isp/isp_freebsd.c
index 24fbae9..efc1b7c 100644
--- a/sys/dev/isp/isp_freebsd.c
+++ b/sys/dev/isp/isp_freebsd.c
@@ -54,7 +54,6 @@ int isp_fabric_hysteresis = 5;
int isp_loop_down_limit = 60; /* default loop down limit */
int isp_quickboot_time = 7; /* don't wait more than N secs for loop up */
int isp_gone_device_time = 30; /* grace time before reporting device lost */
-int isp_autoconfig = 1; /* automatically attach/detach devices */
static const char prom3[] = "Chan %d [%u] PortID 0x%06x Departed because of %s";
static void isp_freeze_loopdown(ispsoftc_t *, int, char *);
@@ -69,10 +68,6 @@ static timeout_t isp_ldt;
static task_fn_t isp_ldt_task;
static void isp_kthread(void *);
static void isp_action(struct cam_sim *, union ccb *);
-#ifdef ISP_INTERNAL_TARGET
-static void isp_target_thread_pi(void *);
-static void isp_target_thread_fc(void *);
-#endif
static int isp_timer_count;
static void isp_timer(void *);
@@ -160,14 +155,6 @@ isp_attach_chan(ispsoftc_t *isp, struct cam_devq *devq, int chan)
struct isp_spi *spi = ISP_SPI_PC(isp, chan);
spi->sim = sim;
spi->path = path;
-#ifdef ISP_INTERNAL_TARGET
- ISP_SET_PC(isp, chan, proc_active, 1);
- if (THREAD_CREATE(isp_target_thread_pi, spi, &spi->target_proc, 0, 0, "%s: isp_test_tgt%d", device_get_nameunit(isp->isp_osinfo.dev), chan)) {
- ISP_SET_PC(isp, chan, proc_active, 0);
- isp_prt(isp, ISP_LOGERR, "cannot create test target thread");
- }
- ISP_SPI_PC(isp, chan)->num_threads += 1;
-#endif
} else {
fcparam *fcp = FCPARAM(isp, chan);
struct isp_fc *fc = ISP_FC_PC(isp, chan);
@@ -206,14 +193,6 @@ isp_attach_chan(ispsoftc_t *isp, struct cam_devq *devq, int chan)
return (ENOMEM);
}
fc->num_threads += 1;
-#ifdef ISP_INTERNAL_TARGET
- ISP_SET_PC(isp, chan, proc_active, 1);
- if (THREAD_CREATE(isp_target_thread_fc, fc, &fc->target_proc, 0, 0, "%s: isp_test_tgt%d", device_get_nameunit(isp->isp_osinfo.dev), chan)) {
- ISP_SET_PC(isp, chan, proc_active, 0);
- isp_prt(isp, ISP_LOGERR, "cannot create test target thread");
- }
- fc->num_threads += 1;
-#endif
if (chan > 0) {
snprintf(name, sizeof(name), "chan%d", chan);
tree = SYSCTL_ADD_NODE(ctx, SYSCTL_CHILDREN(tree),
@@ -259,18 +238,6 @@ isp_attach_chan(ispsoftc_t *isp, struct cam_devq *devq, int chan)
}
static void
-isp_detach_internal_target(ispsoftc_t *isp, int chan)
-{
-#ifdef ISP_INTERNAL_TARGET
- void *wchan;
-
- ISP_GET_PC(isp, chan, target_proc, wchan);
- ISP_SET_PC(isp, chan, proc_active, 0);
- wakeup(wchan);
-#endif
-}
-
-static void
isp_detach_chan(ispsoftc_t *isp, int chan)
{
struct cam_sim *sim;
@@ -294,7 +261,6 @@ isp_detach_chan(ispsoftc_t *isp, int chan)
/* Wait for the channel's spawned threads to exit. */
wakeup(isp->isp_osinfo.pc.ptr);
- isp_detach_internal_target(isp, chan);
while (*num_threads != 0)
mtx_sleep(isp, &isp->isp_osinfo.lock, PRIBIO, "isp_reap", 100);
}
@@ -416,11 +382,16 @@ isp_freeze_loopdown(ispsoftc_t *isp, int chan, char *msg)
if (IS_FC(isp)) {
struct isp_fc *fc = ISP_FC_PC(isp, chan);
if (fc->simqfrozen == 0) {
- isp_prt(isp, ISP_LOGDEBUG0, "%s: freeze simq (loopdown) chan %d", msg, chan);
+ isp_prt(isp, ISP_LOGDEBUG0,
+ "Chan %d %s -- freeze simq (loopdown)", chan, msg);
fc->simqfrozen = SIMQFRZ_LOOPDOWN;
+#if __FreeBSD_version >= 1000039
+ xpt_hold_boot();
+#endif
xpt_freeze_simq(fc->sim, 1);
} else {
- isp_prt(isp, ISP_LOGDEBUG0, "%s: mark frozen (loopdown) chan %d", msg, chan);
+ isp_prt(isp, ISP_LOGDEBUG0,
+ "Chan %d %s -- mark frozen (loopdown)", chan, msg);
fc->simqfrozen |= SIMQFRZ_LOOPDOWN;
}
}
@@ -436,6 +407,9 @@ isp_unfreeze_loopdown(ispsoftc_t *isp, int chan)
if (wasfrozen && fc->simqfrozen == 0) {
isp_prt(isp, ISP_LOG_SANCFG|ISP_LOGDEBUG0, "%s: Chan %d releasing simq", __func__, chan);
xpt_release_simq(fc->sim, 1);
+#if __FreeBSD_version >= 1000039
+ xpt_release_boot();
+#endif
}
}
}
@@ -1181,7 +1155,7 @@ create_lun_state(ispsoftc_t *isp, int bus, struct cam_path *path, tstate_t **rsl
lun = xpt_path_lun_id(path);
if (lun != CAM_LUN_WILDCARD) {
- if (lun >= ISP_MAX_LUNS(isp)) {
+ if (ISP_MAX_LUNS(isp) > 0 && lun >= ISP_MAX_LUNS(isp)) {
return (CAM_LUN_INVALID);
}
}
@@ -1266,7 +1240,8 @@ isp_enable_lun(ispsoftc_t *isp, union ccb *ccb)
bus = XS_CHANNEL(ccb);
target = ccb->ccb_h.target_id;
lun = ccb->ccb_h.target_lun;
- ISP_PATH_PRT(isp, ISP_LOGTDEBUG0|ISP_LOGCONFIG, ccb->ccb_h.path, "enabling lun %u\n", lun);
+ ISP_PATH_PRT(isp, ISP_LOGTDEBUG0|ISP_LOGCONFIG, ccb->ccb_h.path,
+ "enabling lun %jx\n", (uintmax_t)lun);
if (target == CAM_TARGET_WILDCARD && lun != CAM_LUN_WILDCARD) {
ccb->ccb_h.status = CAM_LUN_INVALID;
xpt_done(ccb);
@@ -1279,7 +1254,8 @@ isp_enable_lun(ispsoftc_t *isp, union ccb *ccb)
return;
}
if (isp->isp_dblev & ISP_LOGTDEBUG0) {
- xpt_print(ccb->ccb_h.path, "enabling lun 0x%x on channel %d\n", lun, bus);
+ xpt_print(ccb->ccb_h.path,
+ "enabling lun 0x%jx on channel %d\n", (uintmax_t)lun, bus);
}
/*
@@ -1438,7 +1414,8 @@ isp_enable_deferred(ispsoftc_t *isp, int bus, lun_id_t lun)
ISP_GET_PC(isp, bus, tm_luns_enabled, luns_already_enabled);
isp_prt(isp, ISP_LOGTINFO, "%s: bus %d lun %jx luns_enabled %d", __func__, bus, (uintmax_t)lun, luns_already_enabled);
- if (IS_24XX(isp) || (IS_FC(isp) && luns_already_enabled)) {
+ if (IS_23XX(isp) || IS_24XX(isp) ||
+ (IS_FC(isp) && luns_already_enabled)) {
status = CAM_REQ_CMP;
} else {
int cmd_cnt, not_cnt;
@@ -1478,7 +1455,8 @@ isp_disable_lun(ispsoftc_t *isp, union ccb *ccb)
bus = XS_CHANNEL(ccb);
target = ccb->ccb_h.target_id;
lun = ccb->ccb_h.target_lun;
- ISP_PATH_PRT(isp, ISP_LOGTDEBUG0|ISP_LOGCONFIG, ccb->ccb_h.path, "disabling lun %u\n", lun);
+ ISP_PATH_PRT(isp, ISP_LOGTDEBUG0|ISP_LOGCONFIG, ccb->ccb_h.path,
+ "disabling lun %jx\n", (uintmax_t)lun);
if (target == CAM_TARGET_WILDCARD && lun != CAM_LUN_WILDCARD) {
ccb->ccb_h.status = CAM_LUN_INVALID;
xpt_done(ccb);
@@ -1508,7 +1486,7 @@ isp_disable_lun(ispsoftc_t *isp, union ccb *ccb)
/*
* If we're a 24XX card, we're done.
*/
- if (IS_24XX(isp)) {
+ if (IS_23XX(isp) || IS_24XX(isp)) {
status = CAM_REQ_CMP;
goto done;
}
@@ -1524,7 +1502,7 @@ isp_disable_lun(ispsoftc_t *isp, union ccb *ccb)
if (isp_lun_cmd(isp, RQSTYPE_ENABLE_LUN, bus, lun, 0, 0)) {
status = CAM_RESRC_UNAVAIL;
} else {
- mtx_sleep(ccb, &isp->isp_lock, PRIBIO, "isp_disable_lun", 0);
+ mtx_sleep(&status, &isp->isp_lock, PRIBIO, "isp_disable_lun", 0);
}
isp->isp_osinfo.rptr = NULL;
done:
@@ -2209,6 +2187,10 @@ isp_target_putback_atio(union ccb *ccb)
at->at_header.rqs_entry_count = 1;
if (ISP_CAP_SCCFW(isp)) {
at->at_scclun = (uint16_t) ccb->ccb_h.target_lun;
+#if __FreeBSD_version < 1000700
+ if (at->at_scclun >= 256)
+ at->at_scclun |= 0x4000;
+#endif
} else {
at->at_lun = (uint8_t) ccb->ccb_h.target_lun;
}
@@ -2394,6 +2376,9 @@ isp_handle_platform_atio2(ispsoftc_t *isp, at2_entry_t *aep)
if (ISP_CAP_SCCFW(isp)) {
lun = aep->at_scclun;
+#if __FreeBSD_version < 1000700
+ lun &= 0x3fff;
+#endif
} else {
lun = aep->at_lun;
}
@@ -2475,12 +2460,13 @@ isp_handle_platform_atio2(ispsoftc_t *isp, at2_entry_t *aep)
else {
if ((isp_find_pdb_by_handle(isp, 0, nphdl, &lp) == 0 ||
lp->state == FC_PORTDB_STATE_ZOMBIE)) {
- uint64_t iid =
+ uint64_t wwpn =
(((uint64_t) aep->at_wwpn[0]) << 48) |
(((uint64_t) aep->at_wwpn[1]) << 32) |
(((uint64_t) aep->at_wwpn[2]) << 16) |
(((uint64_t) aep->at_wwpn[3]) << 0);
- isp_add_wwn_entry(isp, 0, iid, nphdl, PORT_ANY, 0);
+ isp_add_wwn_entry(isp, 0, wwpn, INI_NONE,
+ nphdl, PORT_ANY, 0);
isp_find_pdb_by_handle(isp, 0, nphdl, &lp);
}
atiop->init_id = FC_PORTDB_TGT(isp, 0, lp);
@@ -2539,7 +2525,8 @@ static void
isp_handle_platform_atio7(ispsoftc_t *isp, at7_entry_t *aep)
{
int cdbxlen;
- uint16_t lun, chan, nphdl = NIL_HANDLE;
+ lun_id_t lun;
+ uint16_t chan, nphdl = NIL_HANDLE;
uint32_t did, sid;
fcportdb_t *lp;
tstate_t *tptr;
@@ -2550,7 +2537,12 @@ isp_handle_platform_atio7(ispsoftc_t *isp, at7_entry_t *aep)
did = (aep->at_hdr.d_id[0] << 16) | (aep->at_hdr.d_id[1] << 8) | aep->at_hdr.d_id[2];
sid = (aep->at_hdr.s_id[0] << 16) | (aep->at_hdr.s_id[1] << 8) | aep->at_hdr.s_id[2];
- lun = (aep->at_cmnd.fcp_cmnd_lun[0] << 8) | aep->at_cmnd.fcp_cmnd_lun[1];
+#if __FreeBSD_version >= 1000700
+ lun = CAM_EXTLUN_BYTE_SWIZZLE(be64dec(aep->at_cmnd.fcp_cmnd_lun));
+#else
+ lun = (aep->at_cmnd.fcp_cmnd_lun[0] & 0x3f << 8) |
+ aep->at_cmnd.fcp_cmnd_lun[1];
+#endif
/*
* Find the N-port handle, and Virtual Port Index for this command.
@@ -2616,7 +2608,9 @@ isp_handle_platform_atio7(ispsoftc_t *isp, at7_entry_t *aep)
if (tptr == NULL) {
tptr = get_lun_statep(isp, chan, CAM_LUN_WILDCARD);
if (tptr == NULL) {
- isp_prt(isp, ISP_LOGWARN, "%s: [0x%x] no state pointer for lun %d or wildcard", __func__, aep->at_rxid, lun);
+ isp_prt(isp, ISP_LOGWARN,
+ "%s: [0x%x] no state pointer for lun %jx or wildcard",
+ __func__, aep->at_rxid, (uintmax_t)lun);
if (lun == 0) {
isp_endcmd(isp, aep, nphdl, SCSI_STATUS_BUSY, 0);
} else {
@@ -2738,7 +2732,8 @@ isp_handle_platform_atio7(ispsoftc_t *isp, at7_entry_t *aep)
atp->cdb0 = atiop->cdb_io.cdb_bytes[0];
atp->tattr = aep->at_cmnd.fcp_cmnd_task_attribute & FCP_CMND_TASK_ATTR_MASK;
atp->state = ATPD_STATE_CAM;
- isp_prt(isp, ISP_LOGTDEBUG0, "ATIO7[0x%x] CDB=0x%x lun %d datalen %u", aep->at_rxid, atp->cdb0, lun, atp->orig_datalen);
+ isp_prt(isp, ISP_LOGTDEBUG0, "ATIO7[0x%x] CDB=0x%x lun %jx datalen %u",
+ aep->at_rxid, atp->cdb0, (uintmax_t)lun, atp->orig_datalen);
xpt_done((union ccb *)atiop);
rls_lun_statep(isp, tptr);
return;
@@ -3026,7 +3021,7 @@ isp_handle_platform_ctio(ispsoftc_t *isp, void *arg)
resid = ct->ct_resid;
moved_data = data_requested - resid;
}
- isp_prt(isp, ISP_LOGTDEBUG0, "%s: CTIO[%x] seq %u nc %d tag %x S_ID 0x%x lun %d sts %x flg %x resid %d %s", __func__, ct->ct_fwhandle, ATPD_GET_SEQNO(ct),
+ isp_prt(isp, ISP_LOGTDEBUG0, "%s: CTIO[%x] seq %u nc %d tag %x S_ID 0x%x lun %x sts %x flg %x resid %d %s", __func__, ct->ct_fwhandle, ATPD_GET_SEQNO(ct),
notify_cam, ct->ct_tag_val, ct->ct_iid, ct->ct_lun, ct->ct_status, ct->ct_flags, resid, sentstatus? "FIN" : "MID");
}
if (ok) {
@@ -3117,6 +3112,9 @@ isp_handle_platform_notify_fc(ispsoftc_t *isp, in_fcentry_t *inp)
if (ISP_CAP_SCCFW(isp)) {
lun = inp->in_scclun;
+#if __FreeBSD_version < 1000700
+ lun &= 0x3fff;
+#endif
} else {
lun = inp->in_lun;
}
@@ -3190,8 +3188,9 @@ isp_handle_platform_notify_24xx(ispsoftc_t *isp, in_fcentry_24xx_t *inot)
uint16_t prli_options = 0;
uint32_t portid;
fcportdb_t *lp;
- uint8_t *ptr = NULL;
- uint64_t wwn;
+ char *msg = NULL;
+ uint8_t *ptr = (uint8_t *)inot;
+ uint64_t wwpn = INI_NONE, wwnn = INI_NONE;
nphdl = inot->in_nphdl;
if (nphdl != NIL_HANDLE) {
@@ -3203,7 +3202,7 @@ isp_handle_platform_notify_24xx(ispsoftc_t *isp, in_fcentry_24xx_t *inot)
switch (inot->in_status) {
case IN24XX_ELS_RCVD:
{
- char buf[16], *msg;
+ char buf[16];
int chan = ISP_GET_VPIDX(isp, inot->in_vpidx);
/*
@@ -3214,49 +3213,27 @@ isp_handle_platform_notify_24xx(ispsoftc_t *isp, in_fcentry_24xx_t *inot)
switch (inot->in_status_subcode) {
case LOGO:
msg = "LOGO";
- if (ISP_FW_NEWER_THAN(isp, 4, 0, 25)) {
- ptr = (uint8_t *)inot; /* point to unswizzled entry! */
- wwn = (((uint64_t) ptr[IN24XX_LOGO_WWPN_OFF]) << 56) |
- (((uint64_t) ptr[IN24XX_LOGO_WWPN_OFF+1]) << 48) |
- (((uint64_t) ptr[IN24XX_LOGO_WWPN_OFF+2]) << 40) |
- (((uint64_t) ptr[IN24XX_LOGO_WWPN_OFF+3]) << 32) |
- (((uint64_t) ptr[IN24XX_LOGO_WWPN_OFF+4]) << 24) |
- (((uint64_t) ptr[IN24XX_LOGO_WWPN_OFF+5]) << 16) |
- (((uint64_t) ptr[IN24XX_LOGO_WWPN_OFF+6]) << 8) |
- (((uint64_t) ptr[IN24XX_LOGO_WWPN_OFF+7]));
- } else {
- wwn = INI_ANY;
- }
- isp_del_wwn_entry(isp, chan, wwn, nphdl, portid);
+ wwpn = be64dec(&ptr[IN24XX_PLOGI_WWPN_OFF]);
+ isp_del_wwn_entry(isp, chan, wwpn, nphdl, portid);
break;
case PRLO:
msg = "PRLO";
break;
case PLOGI:
+ msg = "PLOGI";
+ wwnn = be64dec(&ptr[IN24XX_PLOGI_WWNN_OFF]);
+ wwpn = be64dec(&ptr[IN24XX_PLOGI_WWPN_OFF]);
+ isp_add_wwn_entry(isp, chan, wwpn, wwnn,
+ nphdl, portid, prli_options);
+ break;
case PRLI:
- /*
- * Treat PRLI the same as PLOGI and make a database entry for it.
- */
- if (inot->in_status_subcode == PLOGI) {
- msg = "PLOGI";
- } else {
- prli_options = inot->in_prli_options;
- msg = "PRLI";
- }
- if (ISP_FW_NEWER_THAN(isp, 4, 0, 25)) {
- ptr = (uint8_t *)inot; /* point to unswizzled entry! */
- wwn = (((uint64_t) ptr[IN24XX_PLOGI_WWPN_OFF]) << 56) |
- (((uint64_t) ptr[IN24XX_PLOGI_WWPN_OFF+1]) << 48) |
- (((uint64_t) ptr[IN24XX_PLOGI_WWPN_OFF+2]) << 40) |
- (((uint64_t) ptr[IN24XX_PLOGI_WWPN_OFF+3]) << 32) |
- (((uint64_t) ptr[IN24XX_PLOGI_WWPN_OFF+4]) << 24) |
- (((uint64_t) ptr[IN24XX_PLOGI_WWPN_OFF+5]) << 16) |
- (((uint64_t) ptr[IN24XX_PLOGI_WWPN_OFF+6]) << 8) |
- (((uint64_t) ptr[IN24XX_PLOGI_WWPN_OFF+7]));
- } else {
- wwn = INI_NONE;
- }
- isp_add_wwn_entry(isp, chan, wwn, nphdl, portid, prli_options);
+ msg = "PRLI";
+ prli_options = inot->in_prli_options;
+ if (inot->in_flags & IN24XX_FLAG_PN_NN_VALID)
+ wwnn = be64dec(&ptr[IN24XX_PRLI_WWNN_OFF]);
+ wwpn = be64dec(&ptr[IN24XX_PRLI_WWPN_OFF]);
+ isp_add_wwn_entry(isp, chan, wwpn, wwnn,
+ nphdl, portid, prli_options);
break;
case PDISC:
msg = "PDISC";
@@ -3280,21 +3257,19 @@ isp_handle_platform_notify_24xx(ispsoftc_t *isp, in_fcentry_24xx_t *inot)
}
case IN24XX_PORT_LOGOUT:
- ptr = "PORT LOGOUT";
+ msg = "PORT LOGOUT";
if (isp_find_pdb_by_handle(isp, ISP_GET_VPIDX(isp, inot->in_vpidx), nphdl, &lp)) {
isp_del_wwn_entry(isp, ISP_GET_VPIDX(isp, inot->in_vpidx), lp->port_wwn, nphdl, lp->portid);
}
/* FALLTHROUGH */
case IN24XX_PORT_CHANGED:
- if (ptr == NULL) {
- ptr = "PORT CHANGED";
- }
+ if (msg == NULL)
+ msg = "PORT CHANGED";
/* FALLTHROUGH */
- case IN24XX_LIP_RESET:
- if (ptr == NULL) {
- ptr = "LIP RESET";
- }
- isp_prt(isp, ISP_LOGINFO, "Chan %d %s (sub-status 0x%x) for N-port handle 0x%x", ISP_GET_VPIDX(isp, inot->in_vpidx), ptr, inot->in_status_subcode, nphdl);
+ case IN24XX_LIP_RESET:
+ if (msg == NULL)
+ msg = "LIP RESET";
+ isp_prt(isp, ISP_LOGINFO, "Chan %d %s (sub-status 0x%x) for N-port handle 0x%x", ISP_GET_VPIDX(isp, inot->in_vpidx), msg, inot->in_status_subcode, nphdl);
/*
* All subcodes here are irrelevant. What is relevant
@@ -3310,21 +3285,18 @@ isp_handle_platform_notify_24xx(ispsoftc_t *isp, in_fcentry_24xx_t *inot)
isp_handle_srr_notify(isp, inot);
break;
#else
- if (ptr == NULL) {
- ptr = "SRR RCVD";
- }
+ if (msg == NULL)
+ msg = "SRR RCVD";
/* FALLTHROUGH */
#endif
case IN24XX_LINK_RESET:
- if (ptr == NULL) {
- ptr = "LINK RESET";
- }
+ if (msg == NULL)
+ msg = "LINK RESET";
case IN24XX_LINK_FAILED:
- if (ptr == NULL) {
- ptr = "LINK FAILED";
- }
+ if (msg == NULL)
+ msg = "LINK FAILED";
default:
- isp_prt(isp, ISP_LOGWARN, "Chan %d %s", ISP_GET_VPIDX(isp, inot->in_vpidx), ptr);
+ isp_prt(isp, ISP_LOGWARN, "Chan %d %s", ISP_GET_VPIDX(isp, inot->in_vpidx), msg);
isp_async(isp, ISPASYNC_TARGET_NOTIFY_ACK, inot);
break;
}
@@ -3504,6 +3476,12 @@ isp_handle_platform_target_tmf(ispsoftc_t *isp, isp_notify_t *notify)
case NT_TARGET_RESET:
inot->arg = MSG_TARGET_RESET;
break;
+ case NT_QUERY_TASK_SET:
+ inot->arg = MSG_QUERY_TASK_SET;
+ break;
+ case NT_QUERY_ASYNC_EVENT:
+ inot->arg = MSG_QUERY_ASYNC_EVENT;
+ break;
default:
isp_prt(isp, ISP_LOGWARN, "%s: unknown TMF code 0x%x for chan %d lun %#jx", __func__, notify->nt_ncode, notify->nt_channel, (uintmax_t)lun);
goto bad;
@@ -3612,859 +3590,6 @@ isp_target_mark_aborted_early(ispsoftc_t *isp, tstate_t *tptr, uint32_t tag_id)
}
}
}
-
-
-#ifdef ISP_INTERNAL_TARGET
-//#define ISP_SEPARATE_STATUS 1
-#define ISP_MULTI_CCBS 1
-#if defined(ISP_MULTI_CCBS) && !defined(ISP_SEPARATE_STATUS)
-#define ISP_SEPARATE_STATUS 1
-#endif
-
-typedef struct periph_private_data_t {
- union ccb *ccb; /* original ATIO or Immediate Notify */
- unsigned long offset; /* current offset */
- int sequence; /* current CTIO sequence */
- int ctio_cnt; /* current # of ctio's outstanding */
- int
- status_sent : 1,
- on_queue : 1; /* on restart queue */
-} ppd_t;
-/*
- * Each ATIO we allocate will have periph private data associated with it
- * that maintains per-command state. This private to each ATIO.
- */
-#define ATIO_PPD(ccb) ((ppd_t *)(((struct ccb_hdr *)ccb)->ppriv_ptr0))
-/*
- * Each CTIO we send downstream will get a pointer to the ATIO itself
- * so that on completion we can retrieve that pointer.
- */
-#define ccb_atio ppriv_ptr1
-#define ccb_inot ppriv_ptr1
-
-/*
- * Each CTIO we send downstream will contain a sequence number
- */
-#define CTIO_SEQ(ccb) ccb->ccb_h.ppriv_field0
-
-#define MAX_ISP_TARG_TRANSFER (2 << 20)
-#define NISP_TARG_CMDS 64
-#define NISP_TARG_NOTIFIES 64
-#define DISK_SHIFT 9
-#define JUNK_SIZE 256
-#define MULTI_CCB_DATA_LIM 8192
-//#define MULTI_CCB_DATA_CNT 64
-#define MULTI_CCB_DATA_CNT 8
-
-extern u_int vm_kmem_size;
-static int ca;
-static uint32_t disk_size;
-static uint8_t *disk_data = NULL;
-static uint8_t *junk_data;
-static MALLOC_DEFINE(M_ISPTARG, "ISPTARG", "ISP TARGET data");
-struct isptarg_softc {
- /* CCBs (CTIOs, ATIOs, INOTs) pending on the controller */
- struct isp_ccbq work_queue;
- struct isp_ccbq rework_queue;
- struct isp_ccbq running_queue;
- struct isp_ccbq inot_queue;
- struct cam_periph *periph;
- struct cam_path *path;
- ispsoftc_t *isp;
-};
-static periph_ctor_t isptargctor;
-static periph_dtor_t isptargdtor;
-static periph_start_t isptargstart;
-static periph_init_t isptarginit;
-static void isptarg_done(struct cam_periph *, union ccb *);
-static void isptargasync(void *, u_int32_t, struct cam_path *, void *);
-
-
-static int isptarg_rwparm(uint8_t *, uint8_t *, uint64_t, uint32_t, uint8_t **, uint32_t *, int *);
-
-static struct periph_driver isptargdriver =
-{
- isptarginit, "isptarg", TAILQ_HEAD_INITIALIZER(isptargdriver.units), 0
-};
-
-static void
-isptarginit(void)
-{
-}
-
-static void
-isptargnotify(ispsoftc_t *isp, union ccb *iccb, struct ccb_immediate_notify *inot)
-{
- struct ccb_notify_acknowledge *ack = &iccb->cna2;
-
- ISP_PATH_PRT(isp, ISP_LOGTDEBUG0, inot->ccb_h.path, "%s: [0x%x] immediate notify for 0x%x from 0x%x status 0x%x arg 0x%x\n", __func__,
- inot->tag_id, inot->initiator_id, inot->seq_id, inot->ccb_h.status, inot->arg);
- ack->ccb_h.func_code = XPT_NOTIFY_ACKNOWLEDGE;
- ack->ccb_h.flags = 0;
- ack->ccb_h.retry_count = 0;
- ack->ccb_h.cbfcnp = isptarg_done;
- ack->ccb_h.timeout = 0;
- ack->ccb_h.ccb_inot = inot;
- ack->tag_id = inot->tag_id;
- ack->seq_id = inot->seq_id;
- ack->initiator_id = inot->initiator_id;
- xpt_action(iccb);
-}
-
-static void
-isptargstart(struct cam_periph *periph, union ccb *iccb)
-{
- const uint8_t niliqd[SHORT_INQUIRY_LENGTH] = {
- 0x7f, 0x0, 0x5, 0x2, 32, 0, 0, 0x32,
- 'F', 'R', 'E', 'E', 'B', 'S', 'D', ' ',
- 'S', 'C', 'S', 'I', ' ', 'N', 'U', 'L',
- 'L', ' ', 'D', 'E', 'V', 'I', 'C', 'E',
- '0', '0', '0', '1'
- };
- const uint8_t iqd[SHORT_INQUIRY_LENGTH] = {
- 0, 0x0, 0x5, 0x2, 32, 0, 0, 0x32,
- 'F', 'R', 'E', 'E', 'B', 'S', 'D', ' ',
- 'S', 'C', 'S', 'I', ' ', 'M', 'E', 'M',
- 'O', 'R', 'Y', ' ', 'D', 'I', 'S', 'K',
- '0', '0', '0', '1'
- };
- int r, i, more = 0, last, is_data_cmd = 0, is_write;
- char *queue;
- struct isptarg_softc *softc = periph->softc;
- struct ccb_scsiio *csio;
- lun_id_t return_lun;
- struct ccb_accept_tio *atio;
- uint8_t *cdb, *ptr, status;
- uint8_t *data_ptr;
- uint32_t data_len, flags;
- struct ccb_hdr *ccbh;
-
- mtx_assert(periph->sim->mtx, MA_OWNED);
- ISP_PATH_PRT(softc->isp, ISP_LOGTDEBUG1, iccb->ccb_h.path, "%s: function code 0x%x INOTQ=%c WORKQ=%c REWORKQ=%c\n", __func__, iccb->ccb_h.func_code,
- TAILQ_FIRST(&softc->inot_queue)? 'y' : 'n', TAILQ_FIRST(&softc->work_queue)? 'y' : 'n', TAILQ_FIRST(&softc->rework_queue)? 'y' : 'n');
- /*
- * Check for immediate notifies first
- */
- ccbh = TAILQ_FIRST(&softc->inot_queue);
- if (ccbh) {
- TAILQ_REMOVE(&softc->inot_queue, ccbh, periph_links.tqe);
- if (TAILQ_FIRST(&softc->inot_queue) || TAILQ_FIRST(&softc->work_queue) || TAILQ_FIRST(&softc->rework_queue)) {
- xpt_schedule(periph, 1);
- }
- isptargnotify(softc->isp, iccb, (struct ccb_immediate_notify *)ccbh);
- return;
- }
-
- /*
- * Check the rework (continuation) work queue first.
- */
- ccbh = TAILQ_FIRST(&softc->rework_queue);
- if (ccbh) {
- atio = (struct ccb_accept_tio *)ccbh;
- TAILQ_REMOVE(&softc->rework_queue, ccbh, periph_links.tqe);
- more = TAILQ_FIRST(&softc->work_queue) || TAILQ_FIRST(&softc->rework_queue);
- queue = "rework";
- } else {
- ccbh = TAILQ_FIRST(&softc->work_queue);
- if (ccbh == NULL) {
- xpt_release_ccb(iccb);
- return;
- }
- atio = (struct ccb_accept_tio *)ccbh;
- TAILQ_REMOVE(&softc->work_queue, ccbh, periph_links.tqe);
- more = TAILQ_FIRST(&softc->work_queue) != NULL;
- queue = "work";
- }
- ATIO_PPD(atio)->on_queue = 0;
-
- if (atio->tag_id == 0xffffffff || atio->ccb_h.func_code != XPT_ACCEPT_TARGET_IO) {
- panic("BAD ATIO");
- }
-
- data_len = is_write = 0;
- data_ptr = NULL;
- csio = &iccb->csio;
- status = SCSI_STATUS_OK;
- flags = CAM_SEND_STATUS;
- memset(&atio->sense_data, 0, sizeof (atio->sense_data));
- cdb = atio->cdb_io.cdb_bytes;
- ISP_PATH_PRT(softc->isp, ISP_LOGTDEBUG0, ccbh->path, "%s: [0x%x] processing ATIO from %s queue initiator 0x%x CDB=0x%x data_offset=%u\n", __func__, atio->tag_id,
- queue, atio->init_id, cdb[0], ATIO_PPD(atio)->offset);
-
- return_lun = XS_LUN(atio);
- if (return_lun != 0) {
- xpt_print(atio->ccb_h.path, "[0x%x] Non-Zero Lun %d: cdb0=0x%x\n", atio->tag_id, return_lun, cdb[0]);
- if (cdb[0] != INQUIRY && cdb[0] != REPORT_LUNS && cdb[0] != REQUEST_SENSE) {
- status = SCSI_STATUS_CHECK_COND;
- SDFIXED(atio->sense_data)->error_code = SSD_ERRCODE_VALID|SSD_CURRENT_ERROR;
- SDFIXED(atio->sense_data)->flags = SSD_KEY_ILLEGAL_REQUEST;
- SDFIXED(atio->sense_data)->add_sense_code = 0x25; /* LOGICAL UNIT NOT SUPPORTED */
- atio->sense_len = SSD_MIN_SIZE;
- }
- return_lun = CAM_LUN_WILDCARD;
- }
-
- switch (cdb[0]) {
- case REQUEST_SENSE:
- flags |= CAM_DIR_IN;
- data_len = sizeof (atio->sense_data);
- junk_data[0] = SSD_ERRCODE_VALID|SSD_CURRENT_ERROR|SSD_KEY_NO_SENSE;
- memset(junk_data+1, 0, data_len-1);
- if (data_len > cdb[4]) {
- data_len = cdb[4];
- }
- if (data_len) {
- data_ptr = junk_data;
- }
- break;
- case WRITE_6:
- case WRITE_10:
- case WRITE_12:
- case WRITE_16:
- is_write = 1;
- /* FALLTHROUGH */
- case READ_6:
- case READ_10:
- case READ_12:
- case READ_16:
- is_data_cmd = 1;
- r = isptarg_rwparm(cdb, disk_data, disk_size, ATIO_PPD(atio)->offset, &data_ptr, &data_len, &last);
- if (r != 0) {
- status = SCSI_STATUS_CHECK_COND;
- SDFIXED(atio->sense_data)->error_code = SSD_ERRCODE_VALID|SSD_CURRENT_ERROR;
- SDFIXED(atio->sense_data)->flags = SSD_KEY_ILLEGAL_REQUEST;
- if (r == -1) {
- SDFIXED(atio->sense_data)->add_sense_code = 0x21; /* LOGICAL BLOCK ADDRESS OUT OF RANGE */
- } else {
- SDFIXED(atio->sense_data)->add_sense_code = 0x20; /* INVALID COMMAND OPERATION CODE */
- }
- atio->sense_len = SSD_MIN_SIZE;
- } else {
-#ifdef ISP_SEPARATE_STATUS
- if (last && data_len) {
- last = 0;
- }
-#endif
- if (last == 0) {
- flags &= ~CAM_SEND_STATUS;
- }
- if (data_len) {
- ATIO_PPD(atio)->offset += data_len;
- if (is_write)
- flags |= CAM_DIR_OUT;
- else
- flags |= CAM_DIR_IN;
- } else {
- flags |= CAM_DIR_NONE;
- }
- }
- break;
- case INQUIRY:
- flags |= CAM_DIR_IN;
- if (cdb[1] || cdb[2] || cdb[3]) {
- status = SCSI_STATUS_CHECK_COND;
- SDFIXED(atio->sense_data)->error_code = SSD_ERRCODE_VALID|SSD_CURRENT_ERROR;
- SDFIXED(atio->sense_data)->flags = SSD_KEY_UNIT_ATTENTION;
- SDFIXED(atio->sense_data)->add_sense_code = 0x24; /* INVALID FIELD IN CDB */
- atio->sense_len = SSD_MIN_SIZE;
- break;
- }
- data_len = sizeof (iqd);
- if (data_len > cdb[4]) {
- data_len = cdb[4];
- }
- if (data_len) {
- if (XS_LUN(iccb) != 0) {
- memcpy(junk_data, niliqd, sizeof (iqd));
- } else {
- memcpy(junk_data, iqd, sizeof (iqd));
- }
- data_ptr = junk_data;
- }
- break;
- case TEST_UNIT_READY:
- flags |= CAM_DIR_NONE;
- if (ca) {
- ca = 0;
- status = SCSI_STATUS_CHECK_COND;
- SDFIXED(atio->sense_data)->error_code = SSD_ERRCODE_VALID|SSD_CURRENT_ERROR;
- SDFIXED(atio->sense_data)->flags = SSD_KEY_UNIT_ATTENTION;
- SDFIXED(atio->sense_data)->add_sense_code = 0x29; /* POWER ON, RESET, OR BUS DEVICE RESET OCCURRED */
- atio->sense_len = SSD_MIN_SIZE;
- }
- break;
- case SYNCHRONIZE_CACHE:
- case START_STOP:
- case RESERVE:
- case RELEASE:
- case VERIFY_10:
- flags |= CAM_DIR_NONE;
- break;
-
- case READ_CAPACITY:
- flags |= CAM_DIR_IN;
- if (cdb[2] || cdb[3] || cdb[4] || cdb[5]) {
- status = SCSI_STATUS_CHECK_COND;
- SDFIXED(atio->sense_data)->error_code = SSD_ERRCODE_VALID|SSD_CURRENT_ERROR;
- SDFIXED(atio->sense_data)->flags = SSD_KEY_ILLEGAL_REQUEST;
- SDFIXED(atio->sense_data)->add_sense_code = 0x24; /* INVALID FIELD IN CDB */
- atio->sense_len = SSD_MIN_SIZE;
- break;
- }
- if (cdb[8] & 0x1) { /* PMI */
- junk_data[0] = 0xff;
- junk_data[1] = 0xff;
- junk_data[2] = 0xff;
- junk_data[3] = 0xff;
- } else {
- uint64_t last_blk = (disk_size >> DISK_SHIFT) - 1;
- if (last_blk < 0xffffffffULL) {
- junk_data[0] = (last_blk >> 24) & 0xff;
- junk_data[1] = (last_blk >> 16) & 0xff;
- junk_data[2] = (last_blk >> 8) & 0xff;
- junk_data[3] = (last_blk) & 0xff;
- } else {
- junk_data[0] = 0xff;
- junk_data[1] = 0xff;
- junk_data[2] = 0xff;
- junk_data[3] = 0xff;
- }
- }
- junk_data[4] = ((1 << DISK_SHIFT) >> 24) & 0xff;
- junk_data[5] = ((1 << DISK_SHIFT) >> 16) & 0xff;
- junk_data[6] = ((1 << DISK_SHIFT) >> 8) & 0xff;
- junk_data[7] = ((1 << DISK_SHIFT)) & 0xff;
- data_ptr = junk_data;
- data_len = 8;
- break;
- case REPORT_LUNS:
- flags |= CAM_DIR_IN;
- memset(junk_data, 0, JUNK_SIZE);
- junk_data[0] = (1 << 3) >> 24;
- junk_data[1] = (1 << 3) >> 16;
- junk_data[2] = (1 << 3) >> 8;
- junk_data[3] = (1 << 3);
- ptr = NULL;
- for (i = 0; i < 1; i++) {
- ptr = &junk_data[8 + (i << 3)];
- if (i >= 256) {
- ptr[0] = 0x40 | ((i >> 8) & 0x3f);
- }
- ptr[1] = i;
- }
- data_ptr = junk_data;
- data_len = (ptr + 8) - junk_data;
- break;
-
- default:
- flags |= CAM_DIR_NONE;
- status = SCSI_STATUS_CHECK_COND;
- SDFIXED(atio->sense_data)->error_code = SSD_ERRCODE_VALID|SSD_CURRENT_ERROR;
- SDFIXED(atio->sense_data)->flags = SSD_KEY_ILLEGAL_REQUEST;
- SDFIXED(atio->sense_data)->add_sense_code = 0x20; /* INVALID COMMAND OPERATION CODE */
- atio->sense_len = SSD_MIN_SIZE;
- break;
- }
-
- /*
- * If we are done with the transaction, tell the
- * controller to send status and perform a CMD_CMPLT.
- * If we have associated sense data, see if we can
- * send that too.
- */
- if (status == SCSI_STATUS_CHECK_COND) {
- flags |= CAM_SEND_SENSE;
- csio->sense_len = atio->sense_len;
- csio->sense_data = atio->sense_data;
- flags &= ~CAM_DIR_MASK;
- data_len = 0;
- data_ptr = NULL;
- }
- cam_fill_ctio(csio, 0, isptarg_done, flags, MSG_SIMPLE_Q_TAG, atio->tag_id, atio->init_id, status, data_ptr, data_len, 30 * hz);
- iccb->ccb_h.target_id = atio->ccb_h.target_id;
- iccb->ccb_h.target_lun = return_lun;
- iccb->ccb_h.ccb_atio = atio;
- CTIO_SEQ(iccb) = ATIO_PPD(atio)->sequence++;
- ATIO_PPD(atio)->ctio_cnt++;
- if (flags & CAM_SEND_STATUS) {
- KASSERT((ATIO_PPD(atio)->status_sent == 0), ("we have already sent status for 0x%x in %s", atio->tag_id, __func__));
- ATIO_PPD(atio)->status_sent = 1;
- }
- ISP_PATH_PRT(softc->isp, ISP_LOGTDEBUG0, atio->ccb_h.path, "%s: sending downstream for 0x%x sequence %u len %u flags %x\n", __func__, atio->tag_id, CTIO_SEQ(iccb), data_len, flags);
- xpt_action(iccb);
-
- if ((atio->ccb_h.status & CAM_DEV_QFRZN) != 0) {
- cam_release_devq(periph->path, 0, 0, 0, 0);
- atio->ccb_h.status &= ~CAM_DEV_QFRZN;
- }
-#ifdef ISP_MULTI_CCBS
- if (is_data_cmd && ATIO_PPD(atio)->status_sent == 0 && ATIO_PPD(atio)->ctio_cnt < MULTI_CCB_DATA_CNT && ATIO_PPD(atio)->on_queue == 0) {
- ISP_PATH_PRT(softc->isp, ISP_LOGTDEBUG0, atio->ccb_h.path, "%s: more still to do for 0x%x\n", __func__, atio->tag_id);
- TAILQ_INSERT_TAIL(&softc->rework_queue, &atio->ccb_h, periph_links.tqe);
- ATIO_PPD(atio)->on_queue = 1;
- more = 1;
- }
-#endif
- if (more) {
- xpt_schedule(periph, 1);
- }
-}
-
-static cam_status
-isptargctor(struct cam_periph *periph, void *arg)
-{
- struct isptarg_softc *softc;
-
- softc = (struct isptarg_softc *)arg;
- periph->softc = softc;
- softc->periph = periph;
- softc->path = periph->path;
- ISP_PATH_PRT(softc->isp, ISP_LOGTDEBUG1, periph->path, "%s called\n", __func__);
- return (CAM_REQ_CMP);
-}
-
-static void
-isptargdtor(struct cam_periph *periph)
-{
- struct isptarg_softc *softc;
- softc = (struct isptarg_softc *)periph->softc;
- ISP_PATH_PRT(softc->isp, ISP_LOGTDEBUG1, periph->path, "%s called\n", __func__);
- softc->periph = NULL;
- softc->path = NULL;
- periph->softc = NULL;
-}
-
-static void
-isptarg_done(struct cam_periph *periph, union ccb *ccb)
-{
- struct isptarg_softc *softc;
- ispsoftc_t *isp;
- uint32_t newoff;
- struct ccb_accept_tio *atio;
- struct ccb_immediate_notify *inot;
- cam_status status;
-
- softc = (struct isptarg_softc *)periph->softc;
- isp = softc->isp;
- status = ccb->ccb_h.status & CAM_STATUS_MASK;
-
- switch (ccb->ccb_h.func_code) {
- case XPT_ACCEPT_TARGET_IO:
- atio = (struct ccb_accept_tio *) ccb;
- ISP_PATH_PRT(isp, ISP_LOGTDEBUG0, ccb->ccb_h.path, "[0x%x] ATIO seen in %s\n", atio->tag_id, __func__);
- memset(ATIO_PPD(atio), 0, sizeof (ppd_t));
- TAILQ_INSERT_TAIL(&softc->work_queue, &ccb->ccb_h, periph_links.tqe);
- ATIO_PPD(atio)->on_queue = 1;
- xpt_schedule(periph, 1);
- break;
- case XPT_IMMEDIATE_NOTIFY:
- inot = (struct ccb_immediate_notify *) ccb;
- ISP_PATH_PRT(isp, ISP_LOGTDEBUG0, ccb->ccb_h.path, "[0x%x] INOT for 0x%x seen in %s\n", inot->tag_id, inot->seq_id, __func__);
- TAILQ_INSERT_TAIL(&softc->inot_queue, &ccb->ccb_h, periph_links.tqe);
- xpt_schedule(periph, 1);
- break;
- case XPT_CONT_TARGET_IO:
- atio = ccb->ccb_h.ccb_atio;
- KASSERT((ATIO_PPD(atio)->ctio_cnt != 0), ("ctio zero when finishing a CTIO"));
- ATIO_PPD(atio)->ctio_cnt--;
- if ((ccb->ccb_h.status & CAM_STATUS_MASK) != CAM_REQ_CMP) {
- switch (ccb->ccb_h.status & CAM_STATUS_MASK) {
- case CAM_MESSAGE_RECV:
- newoff = (ccb->csio.msg_ptr[3] << 24) | (ccb->csio.msg_ptr[4] << 16) | (ccb->csio.msg_ptr[5] << 8) | (ccb->csio.msg_ptr[6]);
- ISP_PATH_PRT(isp, ISP_LOGWARN, ccb->ccb_h.path, "[0x%x] got message to return to reset offset to 0x%x at sequence %u\n", atio->tag_id, newoff, CTIO_SEQ(ccb));
- ATIO_PPD(atio)->offset = newoff;
- ATIO_PPD(atio)->status_sent = 0;
- if (ATIO_PPD(atio)->on_queue == 0) {
- TAILQ_INSERT_TAIL(&softc->rework_queue, &atio->ccb_h, periph_links.tqe);
- ATIO_PPD(atio)->on_queue = 1;
- }
- xpt_schedule(periph, 1);
- break;
- default:
- cam_error_print(ccb, CAM_ESF_ALL, CAM_EPF_ALL);
- xpt_action((union ccb *)atio);
- break;
- }
- } else if ((ccb->ccb_h.flags & CAM_SEND_STATUS) == 0) {
- ISP_PATH_PRT(isp, ISP_LOGTDEBUG0, ccb->ccb_h.path, "[0x%x] MID CTIO sequence %u seen in %s\n", atio->tag_id, CTIO_SEQ(ccb), __func__);
- if (ATIO_PPD(atio)->status_sent == 0 && ATIO_PPD(atio)->on_queue == 0) {
- TAILQ_INSERT_TAIL(&softc->rework_queue, &atio->ccb_h, periph_links.tqe);
- ATIO_PPD(atio)->on_queue = 1;
- }
- xpt_schedule(periph, 1);
- } else {
- KASSERT((ATIO_PPD(atio)->ctio_cnt == 0), ("ctio count still %d when we think we've sent the STATUS ctio", ATIO_PPD(atio)->ctio_cnt));
- ISP_PATH_PRT(isp, ISP_LOGTDEBUG0, ccb->ccb_h.path, "[0x%x] FINAL CTIO sequence %u seen in %s\n", atio->tag_id, CTIO_SEQ(ccb), __func__);
- xpt_action((union ccb *)atio);
- }
- if ((ccb->ccb_h.status & CAM_DEV_QFRZN) != 0) {
- cam_release_devq(ccb->ccb_h.path, 0, 0, 0, 0);
- ccb->ccb_h.status &= ~CAM_DEV_QFRZN;
- }
- xpt_release_ccb(ccb);
- break;
- case XPT_NOTIFY_ACKNOWLEDGE:
- if ((ccb->ccb_h.status & CAM_DEV_QFRZN) != 0) {
- cam_release_devq(ccb->ccb_h.path, 0, 0, 0, 0);
- ccb->ccb_h.status &= ~CAM_DEV_QFRZN;
- }
- inot = ccb->ccb_h.ccb_inot;
- ISP_PATH_PRT(isp, ISP_LOGTDEBUG1, inot->ccb_h.path, "[0x%x] recycle notify for tag 0x%x\n", inot->tag_id, inot->seq_id);
- xpt_release_ccb(ccb);
- xpt_action((union ccb *)inot);
- break;
- default:
- xpt_print(ccb->ccb_h.path, "unexpected code 0x%x\n", ccb->ccb_h.func_code);
- break;
- }
-}
-
-static void
-isptargasync(void *callback_arg, u_int32_t code, struct cam_path *path, void *arg)
-{
- struct ac_contract *acp = arg;
- struct ac_device_changed *fc = (struct ac_device_changed *) acp->contract_data;
-
- if (code != AC_CONTRACT) {
- return;
- }
- xpt_print(path, "0x%016llx Port ID 0x%06x %s\n", (unsigned long long) fc->wwpn, fc->port, fc->arrived? "arrived" : "departed");
-}
-
-static void
-isp_target_thread(ispsoftc_t *isp, int chan)
-{
- union ccb *ccb = NULL;
- int i;
- void *wchan;
- cam_status status;
- struct isptarg_softc *softc = NULL;
- struct cam_periph *periph = NULL, *wperiph = NULL;
- struct cam_path *path, *wpath;
- struct cam_sim *sim;
-
- if (disk_data == NULL) {
- disk_size = roundup2(vm_kmem_size >> 1, (1ULL << 20));
- if (disk_size < (50 << 20)) {
- disk_size = 50 << 20;
- }
- disk_data = malloc(disk_size, M_ISPTARG, M_WAITOK | M_ZERO);
- if (disk_data == NULL) {
- isp_prt(isp, ISP_LOGERR, "%s: could not allocate disk data", __func__);
- goto out;
- }
- isp_prt(isp, ISP_LOGINFO, "allocated a %ju MiB disk", (uintmax_t) (disk_size >> 20));
- }
- junk_data = malloc(JUNK_SIZE, M_ISPTARG, M_WAITOK | M_ZERO);
- if (junk_data == NULL) {
- isp_prt(isp, ISP_LOGERR, "%s: could not allocate junk", __func__);
- goto out;
- }
-
-
- softc = malloc(sizeof (*softc), M_ISPTARG, M_WAITOK | M_ZERO);
- if (softc == NULL) {
- isp_prt(isp, ISP_LOGERR, "%s: could not allocate softc", __func__);
- goto out;
- }
- TAILQ_INIT(&softc->work_queue);
- TAILQ_INIT(&softc->rework_queue);
- TAILQ_INIT(&softc->running_queue);
- TAILQ_INIT(&softc->inot_queue);
- softc->isp = isp;
-
- periphdriver_register(&isptargdriver);
- ISP_GET_PC(isp, chan, sim, sim);
- ISP_GET_PC(isp, chan, path, path);
- status = xpt_create_path(&wpath, NULL, cam_sim_path(sim), CAM_TARGET_WILDCARD, CAM_LUN_WILDCARD);
- if (status != CAM_REQ_CMP) {
- isp_prt(isp, ISP_LOGERR, "%s: could not allocate wildcard path", __func__);
- return;
- }
- status = xpt_create_path(&path, NULL, cam_sim_path(sim), 0, 0);
- if (status != CAM_REQ_CMP) {
- xpt_free_path(wpath);
- isp_prt(isp, ISP_LOGERR, "%s: could not allocate path", __func__);
- return;
- }
-
- ISP_LOCK(isp);
- status = cam_periph_alloc(isptargctor, NULL, isptargdtor, isptargstart, "isptarg", CAM_PERIPH_BIO, wpath, NULL, 0, softc);
- if (status != CAM_REQ_CMP) {
- ISP_UNLOCK(isp);
- isp_prt(isp, ISP_LOGERR, "%s: cam_periph_alloc for wildcard failed", __func__);
- goto out;
- }
- wperiph = cam_periph_find(wpath, "isptarg");
- if (wperiph == NULL) {
- ISP_UNLOCK(isp);
- isp_prt(isp, ISP_LOGERR, "%s: wildcard periph already allocated but doesn't exist", __func__);
- goto out;
- }
-
- status = cam_periph_alloc(isptargctor, NULL, isptargdtor, isptargstart, "isptarg", CAM_PERIPH_BIO, path, NULL, 0, softc);
- if (status != CAM_REQ_CMP) {
- ISP_UNLOCK(isp);
- isp_prt(isp, ISP_LOGERR, "%s: cam_periph_alloc failed", __func__);
- goto out;
- }
-
- periph = cam_periph_find(path, "isptarg");
- if (periph == NULL) {
- ISP_UNLOCK(isp);
- isp_prt(isp, ISP_LOGERR, "%s: periph already allocated but doesn't exist", __func__);
- goto out;
- }
-
- status = xpt_register_async(AC_CONTRACT, isptargasync, isp, wpath);
- if (status != CAM_REQ_CMP) {
- ISP_UNLOCK(isp);
- isp_prt(isp, ISP_LOGERR, "%s: xpt_register_async failed", __func__);
- goto out;
- }
-
- ISP_UNLOCK(isp);
-
- ccb = xpt_alloc_ccb();
-
- /*
- * Make sure role is none.
- */
- xpt_setup_ccb(&ccb->ccb_h, periph->path, 10);
- ccb->ccb_h.func_code = XPT_SET_SIM_KNOB;
- ccb->knob.xport_specific.fc.role = KNOB_ROLE_NONE;
- ccb->knob.xport_specific.fc.valid = KNOB_VALID_ROLE;
-
- ISP_LOCK(isp);
- xpt_action(ccb);
- ISP_UNLOCK(isp);
-
- /*
- * Now enable luns
- */
- xpt_setup_ccb(&ccb->ccb_h, periph->path, 10);
- ccb->ccb_h.func_code = XPT_EN_LUN;
- ccb->cel.enable = 1;
- ISP_LOCK(isp);
- xpt_action(ccb);
- ISP_UNLOCK(isp);
- if (ccb->ccb_h.status != CAM_REQ_CMP) {
- xpt_free_ccb(ccb);
- xpt_print(periph->path, "failed to enable lun (0x%x)\n", ccb->ccb_h.status);
- goto out;
- }
-
- xpt_setup_ccb(&ccb->ccb_h, wperiph->path, 10);
- ccb->ccb_h.func_code = XPT_EN_LUN;
- ccb->cel.enable = 1;
- ISP_LOCK(isp);
- xpt_action(ccb);
- ISP_UNLOCK(isp);
- if (ccb->ccb_h.status != CAM_REQ_CMP) {
- xpt_free_ccb(ccb);
- xpt_print(wperiph->path, "failed to enable lun (0x%x)\n", ccb->ccb_h.status);
- goto out;
- }
- xpt_free_ccb(ccb);
-
- /*
- * Add resources
- */
- ISP_GET_PC(isp, chan, target_proc, wchan);
- for (i = 0; i < 4; i++) {
- ccb = malloc(sizeof (*ccb), M_ISPTARG, M_WAITOK | M_ZERO);
- xpt_setup_ccb(&ccb->ccb_h, wperiph->path, 1);
- ccb->ccb_h.func_code = XPT_ACCEPT_TARGET_IO;
- ccb->ccb_h.cbfcnp = isptarg_done;
- ccb->ccb_h.ppriv_ptr0 = malloc(sizeof (ppd_t), M_ISPTARG, M_WAITOK | M_ZERO);
- ISP_LOCK(isp);
- xpt_action(ccb);
- ISP_UNLOCK(isp);
- }
- for (i = 0; i < NISP_TARG_CMDS; i++) {
- ccb = malloc(sizeof (*ccb), M_ISPTARG, M_WAITOK | M_ZERO);
- xpt_setup_ccb(&ccb->ccb_h, periph->path, 1);
- ccb->ccb_h.func_code = XPT_ACCEPT_TARGET_IO;
- ccb->ccb_h.cbfcnp = isptarg_done;
- ccb->ccb_h.ppriv_ptr0 = malloc(sizeof (ppd_t), M_ISPTARG, M_WAITOK | M_ZERO);
- ISP_LOCK(isp);
- xpt_action(ccb);
- ISP_UNLOCK(isp);
- }
- for (i = 0; i < 4; i++) {
- ccb = malloc(sizeof (*ccb), M_ISPTARG, M_WAITOK | M_ZERO);
- xpt_setup_ccb(&ccb->ccb_h, wperiph->path, 1);
- ccb->ccb_h.func_code = XPT_IMMEDIATE_NOTIFY;
- ccb->ccb_h.cbfcnp = isptarg_done;
- ISP_LOCK(isp);
- xpt_action(ccb);
- ISP_UNLOCK(isp);
- }
- for (i = 0; i < NISP_TARG_NOTIFIES; i++) {
- ccb = malloc(sizeof (*ccb), M_ISPTARG, M_WAITOK | M_ZERO);
- xpt_setup_ccb(&ccb->ccb_h, periph->path, 1);
- ccb->ccb_h.func_code = XPT_IMMEDIATE_NOTIFY;
- ccb->ccb_h.cbfcnp = isptarg_done;
- ISP_LOCK(isp);
- xpt_action(ccb);
- ISP_UNLOCK(isp);
- }
-
- /*
- * Now turn it all back on
- */
- xpt_setup_ccb(&ccb->ccb_h, periph->path, 10);
- ccb->ccb_h.func_code = XPT_SET_SIM_KNOB;
- ccb->knob.xport_specific.fc.valid = KNOB_VALID_ROLE;
- ccb->knob.xport_specific.fc.role = KNOB_ROLE_TARGET;
- ISP_LOCK(isp);
- xpt_action(ccb);
- ISP_UNLOCK(isp);
-
- /*
- * Okay, while things are still active, sleep...
- */
- ISP_LOCK(isp);
- for (;;) {
- ISP_GET_PC(isp, chan, proc_active, i);
- if (i == 0) {
- break;
- }
- msleep(wchan, &isp->isp_lock, PUSER, "tsnooze", 0);
- }
- ISP_UNLOCK(isp);
-
-out:
- if (wperiph) {
- cam_periph_invalidate(wperiph);
- }
- if (periph) {
- cam_periph_invalidate(periph);
- }
- if (junk_data) {
- free(junk_data, M_ISPTARG);
- }
- if (disk_data) {
- free(disk_data, M_ISPTARG);
- }
- if (softc) {
- free(softc, M_ISPTARG);
- }
- xpt_free_path(path);
- xpt_free_path(wpath);
-}
-
-static void
-isp_target_thread_pi(void *arg)
-{
- struct isp_spi *pi = arg;
- ispsoftc_t *isp = cam_sim_softc(pi->sim);
- int chan = cam_sim_bus(pi->sim);
-
- isp_target_thread(isp, chan);
- ISP_SPI_PC(isp, chan)->num_threads -= 1;
- kthread_exit();
-}
-
-static void
-isp_target_thread_fc(void *arg)
-{
- struct isp_fc *fc = arg;
- ispsoftc_t *isp = cam_sim_softc(pi->sim);
- int chan = cam_sim_bus(pi->sim);
-
- isp_target_thread(isp, chan);
- ISP_FC_PC(isp, chan)->num_threads -= 1;
- kthread_exit();
-}
-
-static int
-isptarg_rwparm(uint8_t *cdb, uint8_t *dp, uint64_t dl, uint32_t offset, uint8_t **kp, uint32_t *tl, int *lp)
-{
- uint32_t cnt, curcnt;
- uint64_t lba;
-
- switch (cdb[0]) {
- case WRITE_16:
- case READ_16:
- cnt = (((uint32_t)cdb[10]) << 24) |
- (((uint32_t)cdb[11]) << 16) |
- (((uint32_t)cdb[12]) << 8) |
- ((uint32_t)cdb[13]);
-
- lba = (((uint64_t)cdb[2]) << 56) |
- (((uint64_t)cdb[3]) << 48) |
- (((uint64_t)cdb[4]) << 40) |
- (((uint64_t)cdb[5]) << 32) |
- (((uint64_t)cdb[6]) << 24) |
- (((uint64_t)cdb[7]) << 16) |
- (((uint64_t)cdb[8]) << 8) |
- ((uint64_t)cdb[9]);
- break;
- case WRITE_12:
- case READ_12:
- cnt = (((uint32_t)cdb[6]) << 16) |
- (((uint32_t)cdb[7]) << 8) |
- ((u_int32_t)cdb[8]);
-
- lba = (((uint32_t)cdb[2]) << 24) |
- (((uint32_t)cdb[3]) << 16) |
- (((uint32_t)cdb[4]) << 8) |
- ((uint32_t)cdb[5]);
- break;
- case WRITE_10:
- case READ_10:
- cnt = (((uint32_t)cdb[7]) << 8) |
- ((u_int32_t)cdb[8]);
-
- lba = (((uint32_t)cdb[2]) << 24) |
- (((uint32_t)cdb[3]) << 16) |
- (((uint32_t)cdb[4]) << 8) |
- ((uint32_t)cdb[5]);
- break;
- case WRITE_6:
- case READ_6:
- cnt = cdb[4];
- if (cnt == 0) {
- cnt = 256;
- }
- lba = (((uint32_t)cdb[1] & 0x1f) << 16) |
- (((uint32_t)cdb[2]) << 8) |
- ((uint32_t)cdb[3]);
- break;
- default:
- return (-1);
- }
-
- cnt <<= DISK_SHIFT;
- lba <<= DISK_SHIFT;
-
- if (offset == cnt) {
- *lp = 1;
- return (0);
- }
-
- if (lba + cnt > dl) {
- return (-2);
- }
-
- curcnt = MAX_ISP_TARG_TRANSFER;
- if (offset + curcnt >= cnt) {
- curcnt = cnt - offset;
- *lp = 1;
- } else {
- *lp = 0;
- }
-#ifdef ISP_MULTI_CCBS
- if (curcnt > MULTI_CCB_DATA_LIM)
- curcnt = MULTI_CCB_DATA_LIM;
-#endif
- *tl = curcnt;
- *kp = &dp[lba + offset];
- return (0);
-}
-
-#endif
#endif
static void
@@ -4514,12 +3639,10 @@ static void
isp_poll(struct cam_sim *sim)
{
ispsoftc_t *isp = cam_sim_softc(sim);
- uint32_t isr;
- uint16_t sema, mbox;
+ uint16_t isr, sema, info;
- if (ISP_READ_ISR(isp, &isr, &sema, &mbox)) {
- isp_intr(isp, isr, sema, mbox);
- }
+ if (ISP_READ_ISR(isp, &isr, &sema, &info))
+ isp_intr(isp, isr, sema, info);
}
@@ -4538,11 +3661,9 @@ isp_watchdog(void *arg)
* Hand crank the interrupt code just to be sure the command isn't stuck somewhere.
*/
if (handle != ISP_HANDLE_FREE) {
- uint32_t isr;
- uint16_t sema, mbox;
- if (ISP_READ_ISR(isp, &isr, &sema, &mbox) != 0) {
- isp_intr(isp, isr, sema, mbox);
- }
+ uint16_t isr, sema, info;
+ if (ISP_READ_ISR(isp, &isr, &sema, &info) != 0)
+ isp_intr(isp, isr, sema, info);
ohandle = handle;
handle = isp_find_handle(isp, xs);
}
@@ -4600,10 +3721,6 @@ isp_make_here(ispsoftc_t *isp, fcportdb_t *fcp, int chan, int tgt)
union ccb *ccb;
struct isp_fc *fc = ISP_FC_PC(isp, chan);
- if (isp_autoconfig == 0) {
- return;
- }
-
/*
* Allocate a CCB, create a wildcard path for this target and schedule a rescan.
*/
@@ -4627,9 +3744,6 @@ isp_make_gone(ispsoftc_t *isp, fcportdb_t *fcp, int chan, int tgt)
struct cam_path *tp;
struct isp_fc *fc = ISP_FC_PC(isp, chan);
- if (isp_autoconfig == 0) {
- return;
- }
if (xpt_create_path(&tp, NULL, cam_sim_path(fc->sim), tgt, CAM_LUN_WILDCARD) == CAM_REQ_CMP) {
xpt_async(AC_LOST_DEVICE, tp, NULL);
xpt_free_path(tp);
@@ -4760,8 +3874,9 @@ isp_ldt_task(void *arg, int pending)
if (dbidx != XS_TGT(xs)) {
continue;
}
- isp_prt(isp, ISP_LOGWARN, "command handle 0x%x for %d.%d.%d orphaned by loop down timeout",
- isp->isp_xflist[i].handle, chan, XS_TGT(xs), XS_LUN(xs));
+ isp_prt(isp, ISP_LOGWARN, "command handle 0x%x for %d.%d.%jx orphaned by loop down timeout",
+ isp->isp_xflist[i].handle, chan, XS_TGT(xs),
+ (uintmax_t)XS_LUN(xs));
}
isp_prt(isp, ISP_LOGCONFIG, prom3, chan, dbidx, lp->portid, "Loop Down Timeout");
@@ -4917,19 +4032,6 @@ isp_action(struct cam_sim *sim, union ccb *ccb)
isp_prt(isp, ISP_LOGDEBUG2, "isp_action code %x", ccb->ccb_h.func_code);
ISP_PCMD(ccb) = NULL;
- if (isp->isp_state != ISP_RUNSTATE && ccb->ccb_h.func_code == XPT_SCSI_IO) {
- isp_init(isp);
- if (isp->isp_state != ISP_INITSTATE) {
- /*
- * Lie. Say it was a selection timeout.
- */
- ccb->ccb_h.status = CAM_SEL_TIMEOUT;
- isp_done((struct ccb_scsiio *) ccb);
- return;
- }
- isp->isp_state = ISP_RUNSTATE;
- }
-
switch (ccb->ccb_h.func_code) {
case XPT_SCSI_IO: /* Execute the requested I/O operation */
bus = XS_CHANNEL(ccb);
@@ -4945,10 +4047,11 @@ isp_action(struct cam_sim *sim, union ccb *ccb)
}
ccb->csio.req_map = NULL;
#ifdef DIAGNOSTIC
- if (ccb->ccb_h.target_id > (ISP_MAX_TARGETS(isp) - 1)) {
+ if (ccb->ccb_h.target_id >= ISP_MAX_TARGETS(isp)) {
xpt_print(ccb->ccb_h.path, "invalid target\n");
ccb->ccb_h.status = CAM_PATH_INVALID;
- } else if (ccb->ccb_h.target_lun > (ISP_MAX_LUNS(isp) - 1)) {
+ } else if (ISP_MAX_LUNS(isp) > 0 &&
+ ccb->ccb_h.target_lun >= ISP_MAX_LUNS(isp)) {
xpt_print(ccb->ccb_h.path, "invalid lun\n");
ccb->ccb_h.status = CAM_PATH_INVALID;
}
@@ -4991,15 +4094,23 @@ isp_action(struct cam_sim *sim, union ccb *ccb)
lim = ISP_FC_PC(isp, bus)->loop_down_limit;
if (FCPARAM(isp, bus)->loop_seen_once == 0 || ISP_FC_PC(isp, bus)->loop_down_time >= lim) {
if (FCPARAM(isp, bus)->loop_seen_once == 0) {
- isp_prt(isp, ISP_LOGDEBUG0, "%d.%d loop not seen yet @ %lu", XS_TGT(ccb), XS_LUN(ccb), (unsigned long) time_uptime);
+ isp_prt(isp, ISP_LOGDEBUG0,
+ "%d.%jx loop not seen yet @ %lu",
+ XS_TGT(ccb), (uintmax_t)XS_LUN(ccb),
+ (unsigned long) time_uptime);
} else {
- isp_prt(isp, ISP_LOGDEBUG0, "%d.%d downtime (%d) > lim (%d)", XS_TGT(ccb), XS_LUN(ccb), ISP_FC_PC(isp, bus)->loop_down_time, lim);
+ isp_prt(isp, ISP_LOGDEBUG0,
+ "%d.%jx downtime (%d) > lim (%d)",
+ XS_TGT(ccb), (uintmax_t)XS_LUN(ccb),
+ ISP_FC_PC(isp, bus)->loop_down_time,
+ lim);
}
ccb->ccb_h.status = CAM_SEL_TIMEOUT;
isp_done((struct ccb_scsiio *) ccb);
break;
}
- isp_prt(isp, ISP_LOGDEBUG0, "%d.%d retry later", XS_TGT(ccb), XS_LUN(ccb));
+ isp_prt(isp, ISP_LOGDEBUG0, "%d.%jx retry later",
+ XS_TGT(ccb), (uintmax_t)XS_LUN(ccb));
cam_freeze_devq(ccb->ccb_h.path);
cam_release_devq(ccb->ccb_h.path, RELSIM_RELEASE_AFTER_TIMEOUT, 0, 1000, 0);
ccb->ccb_h.status = CAM_REQUEUE_REQ;
@@ -5502,7 +4613,8 @@ isp_action(struct cam_sim *sim, union ccb *ccb)
#endif
cpi->hba_eng_cnt = 0;
cpi->max_target = ISP_MAX_TARGETS(isp) - 1;
- cpi->max_lun = ISP_MAX_LUNS(isp) - 1;
+ cpi->max_lun = ISP_MAX_LUNS(isp) == 0 ?
+ 255 : ISP_MAX_LUNS(isp) - 1;
cpi->bus_id = cam_sim_bus(sim);
if (isp->isp_osinfo.sixtyfourbit)
cpi->maxio = (ISP_NSEG64_MAX - 1) * PAGE_SIZE;
@@ -5514,6 +4626,12 @@ isp_action(struct cam_sim *sim, union ccb *ccb)
fcparam *fcp = FCPARAM(isp, bus);
cpi->hba_misc = PIM_NOBUSRESET | PIM_UNMAPPED;
+#if __FreeBSD_version >= 1000700
+ cpi->hba_misc |= PIM_EXTLUNS;
+#endif
+#if __FreeBSD_version >= 1000039
+ cpi->hba_misc |= PIM_NOSCAN;
+#endif
/*
* Because our loop ID can shift from time to time,
@@ -5590,7 +4708,10 @@ isp_done(XS_T *sccb)
status = sccb->ccb_h.status & CAM_STATUS_MASK;
if (status != CAM_REQ_CMP) {
if (status != CAM_SEL_TIMEOUT)
- isp_prt(isp, ISP_LOGDEBUG0, "target %d lun %d CAM status 0x%x SCSI status 0x%x", XS_TGT(sccb), XS_LUN(sccb), sccb->ccb_h.status, sccb->scsi_status);
+ isp_prt(isp, ISP_LOGDEBUG0,
+ "target %d lun %jx CAM status 0x%x SCSI status 0x%x",
+ XS_TGT(sccb), (uintmax_t)XS_LUN(sccb),
+ sccb->ccb_h.status, sccb->scsi_status);
else if ((IS_FC(isp))
&& (XS_TGT(sccb) < MAX_FC_TARG)) {
fcparam *fcp;
@@ -5701,20 +4822,17 @@ isp_async(ispsoftc_t *isp, ispasync_t cmd, ...)
break;
}
case ISPASYNC_LIP:
- if (msg == NULL) {
+ if (msg == NULL)
msg = "LIP Received";
- }
/* FALLTHROUGH */
case ISPASYNC_LOOP_RESET:
- if (msg == NULL) {
+ if (msg == NULL)
msg = "LOOP Reset";
- }
/* FALLTHROUGH */
case ISPASYNC_LOOP_DOWN:
{
- if (msg == NULL) {
+ if (msg == NULL)
msg = "LOOP Down";
- }
va_start(ap, cmd);
bus = va_arg(ap, int);
va_end(ap);
@@ -5873,11 +4991,11 @@ changed:
fc = ISP_FC_PC(isp, bus);
if (evt == ISPASYNC_CHANGE_PDB) {
- msg = "Chan %d Port Database Changed";
+ msg = "Port Database Changed";
} else if (evt == ISPASYNC_CHANGE_SNS) {
- msg = "Chan %d Name Server Database Changed";
+ msg = "Name Server Database Changed";
} else {
- msg = "Chan %d Other Change Notify";
+ msg = "Other Change Notify";
}
/*
@@ -5887,7 +5005,7 @@ changed:
isp_prt(isp, ISP_LOG_SANCFG|ISP_LOGDEBUG0, "Stopping Loop Down Timer @ %lu", (unsigned long) time_uptime);
callout_stop(&fc->ldt);
}
- isp_prt(isp, ISP_LOGINFO, msg, bus);
+ isp_prt(isp, ISP_LOGINFO, "Chan %d %s", bus, msg);
if (FCPARAM(isp, bus)->role & ISP_ROLE_INITIATOR) {
isp_freeze_loopdown(isp, bus, msg);
}
@@ -5908,6 +5026,8 @@ changed:
case NT_CLEAR_TASK_SET:
case NT_LUN_RESET:
case NT_TARGET_RESET:
+ case NT_QUERY_TASK_SET:
+ case NT_QUERY_ASYNC_EVENT:
/*
* These are task management functions.
*/
@@ -6269,13 +5389,12 @@ isp_mbox_wait_complete(ispsoftc_t *isp, mbreg_t *mbp)
} else {
for (olim = 0; olim < max; olim++) {
for (ilim = 0; ilim < usecs; ilim += 100) {
- uint32_t isr;
- uint16_t sema, mbox;
+ uint16_t isr, sema, info;
if (isp->isp_osinfo.mboxcmd_done) {
break;
}
- if (ISP_READ_ISR(isp, &isr, &sema, &mbox)) {
- isp_intr(isp, isr, sema, mbox);
+ if (ISP_READ_ISR(isp, &isr, &sema, &info)) {
+ isp_intr(isp, isr, sema, info);
if (isp->isp_osinfo.mboxcmd_done) {
break;
}
@@ -6343,16 +5462,14 @@ void
isp_platform_intr(void *arg)
{
ispsoftc_t *isp = arg;
- uint32_t isr;
- uint16_t sema, mbox;
+ uint16_t isr, sema, info;
ISP_LOCK(isp);
isp->isp_intcnt++;
- if (ISP_READ_ISR(isp, &isr, &sema, &mbox) == 0) {
+ if (ISP_READ_ISR(isp, &isr, &sema, &info))
+ isp_intr(isp, isr, sema, info);
+ else
isp->isp_intbogus++;
- } else {
- isp_intr(isp, isr, sema, mbox);
- }
ISP_UNLOCK(isp);
}
@@ -6397,7 +5514,8 @@ isp_fcp_reset_crn(struct isp_fc *fc, uint32_t tgt, int tgt_set)
int
isp_fcp_next_crn(ispsoftc_t *isp, uint8_t *crnp, XS_T *cmd)
{
- uint32_t chan, tgt, lun;
+ lun_id_t lun;
+ uint32_t chan, tgt;
struct isp_fc *fc;
struct isp_nexus *nxp;
int idx;
diff --git a/sys/dev/isp/isp_freebsd.h b/sys/dev/isp/isp_freebsd.h
index bca0f7c..1d66521 100644
--- a/sys/dev/isp/isp_freebsd.h
+++ b/sys/dev/isp/isp_freebsd.h
@@ -207,12 +207,10 @@ struct isp_pcmd {
* Per nexus info.
*/
struct isp_nexus {
- struct isp_nexus * next;
- uint32_t
- crnseed : 8; /* next command reference number */
- uint32_t
- tgt : 16, /* TGT for target */
- lun : 16; /* LUN for target */
+ uint64_t lun; /* LUN for target */
+ uint32_t tgt; /* TGT for target */
+ uint8_t crnseed; /* next command reference number */
+ struct isp_nexus *next;
};
#define NEXUS_HASH_WIDTH 32
#define INITIAL_NEXUS_COUNT MAX_FC_TARG
@@ -242,9 +240,6 @@ struct isp_fc {
struct isp_nexus *nexus_free_list;
uint32_t
#ifdef ISP_TARGET_MODE
-#ifdef ISP_INTERNAL_TARGET
- proc_active : 1,
-#endif
tm_luns_enabled : 1,
tm_enable_defer : 1,
tm_enabled : 1,
@@ -263,9 +258,6 @@ struct isp_fc {
struct task gtask;
#ifdef ISP_TARGET_MODE
struct tslist lun_hash[LUN_HASH_SIZE];
-#ifdef ISP_INTERNAL_TARGET
- struct proc * target_proc;
-#endif
#if defined(DEBUG)
unsigned int inject_lost_data_frame;
#endif
@@ -278,9 +270,6 @@ struct isp_spi {
struct cam_path *path;
uint32_t
#ifdef ISP_TARGET_MODE
-#ifdef ISP_INTERNAL_TARGET
- proc_active : 1,
-#endif
tm_luns_enabled : 1,
tm_enable_defer : 1,
tm_enabled : 1,
@@ -290,9 +279,6 @@ struct isp_spi {
iid : 4;
#ifdef ISP_TARGET_MODE
struct tslist lun_hash[LUN_HASH_SIZE];
-#ifdef ISP_INTERNAL_TARGET
- struct proc * target_proc;
-#endif
#endif
int num_threads;
};
@@ -544,7 +530,7 @@ default: \
#define XS_ISP(ccb) cam_sim_softc(xpt_path_sim((ccb)->ccb_h.path))
#define XS_CHANNEL(ccb) cam_sim_bus(xpt_path_sim((ccb)->ccb_h.path))
#define XS_TGT(ccb) (ccb)->ccb_h.target_id
-#define XS_LUN(ccb) (uint32_t)((ccb)->ccb_h.target_lun)
+#define XS_LUN(ccb) (ccb)->ccb_h.target_lun
#define XS_CDBP(ccb) \
(((ccb)->ccb_h.flags & CAM_CDB_POINTER)? \
@@ -734,7 +720,6 @@ extern int isp_fabric_hysteresis;
extern int isp_loop_down_limit;
extern int isp_gone_device_time;
extern int isp_quickboot_time;
-extern int isp_autoconfig;
/*
* Platform private flags
diff --git a/sys/dev/isp/isp_library.c b/sys/dev/isp/isp_library.c
index f7ee7bb..fa1fa8f 100644
--- a/sys/dev/isp/isp_library.c
+++ b/sys/dev/isp/isp_library.c
@@ -581,6 +581,136 @@ isp_fc_toponame(fcparam *fcp)
}
}
+static int
+isp_fc_enable_vp(ispsoftc_t *isp, int chan)
+{
+ fcparam *fcp = FCPARAM(isp, chan);
+ mbreg_t mbs;
+ vp_modify_t *vp;
+ uint8_t qe[QENTRY_LEN], *scp;
+
+ ISP_MEMZERO(qe, QENTRY_LEN);
+ if (FC_SCRATCH_ACQUIRE(isp, chan)) {
+ return (EBUSY);
+ }
+ scp = fcp->isp_scratch;
+
+ /*
+ * Build a VP MODIFY command in memory
+ */
+ vp = (vp_modify_t *) qe;
+ vp->vp_mod_hdr.rqs_entry_type = RQSTYPE_VP_MODIFY;
+ vp->vp_mod_hdr.rqs_entry_count = 1;
+ vp->vp_mod_cnt = 1;
+ vp->vp_mod_idx0 = chan;
+ vp->vp_mod_cmd = VP_MODIFY_ENA;
+ vp->vp_mod_ports[0].options = ICB2400_VPOPT_ENABLED;
+ if (fcp->role & ISP_ROLE_INITIATOR) {
+ vp->vp_mod_ports[0].options |= ICB2400_VPOPT_INI_ENABLE;
+ }
+ if ((fcp->role & ISP_ROLE_TARGET) == 0) {
+ vp->vp_mod_ports[0].options |= ICB2400_VPOPT_TGT_DISABLE;
+ }
+ if (fcp->isp_loopid < LOCAL_LOOP_LIM) {
+ vp->vp_mod_ports[0].loopid = fcp->isp_loopid;
+ if (isp->isp_confopts & ISP_CFG_OWNLOOPID)
+ vp->vp_mod_ports[0].options |=
+ ICB2400_VPOPT_HARD_ADDRESS;
+ else
+ vp->vp_mod_ports[0].options |=
+ ICB2400_VPOPT_PREV_ADDRESS;
+ }
+ MAKE_NODE_NAME_FROM_WWN(vp->vp_mod_ports[0].wwpn, fcp->isp_wwpn);
+ MAKE_NODE_NAME_FROM_WWN(vp->vp_mod_ports[0].wwnn, fcp->isp_wwnn);
+ isp_put_vp_modify(isp, vp, (vp_modify_t *) scp);
+
+ /*
+ * Build a EXEC IOCB A64 command that points to the VP MODIFY command
+ */
+ MBSINIT(&mbs, MBOX_EXEC_COMMAND_IOCB_A64, MBLOGALL, 0);
+ mbs.param[1] = QENTRY_LEN;
+ mbs.param[2] = DMA_WD1(fcp->isp_scdma);
+ mbs.param[3] = DMA_WD0(fcp->isp_scdma);
+ mbs.param[6] = DMA_WD3(fcp->isp_scdma);
+ mbs.param[7] = DMA_WD2(fcp->isp_scdma);
+ MEMORYBARRIER(isp, SYNC_SFORDEV, 0, 2 * QENTRY_LEN, chan);
+ isp_control(isp, ISPCTL_RUN_MBOXCMD, &mbs);
+ if (mbs.param[0] != MBOX_COMMAND_COMPLETE) {
+ FC_SCRATCH_RELEASE(isp, chan);
+ return (EIO);
+ }
+ MEMORYBARRIER(isp, SYNC_SFORCPU, QENTRY_LEN, QENTRY_LEN, chan);
+ isp_get_vp_modify(isp, (vp_modify_t *)&scp[QENTRY_LEN], vp);
+
+ FC_SCRATCH_RELEASE(isp, chan);
+
+ if (vp->vp_mod_status != VP_STS_OK) {
+ isp_prt(isp, ISP_LOGERR, "%s: VP_MODIFY of Chan %d failed with status %d", __func__, chan, vp->vp_mod_status);
+ return (EIO);
+ }
+ return (0);
+}
+
+static int
+isp_fc_disable_vp(ispsoftc_t *isp, int chan)
+{
+ fcparam *fcp = FCPARAM(isp, chan);
+ mbreg_t mbs;
+ vp_ctrl_info_t *vp;
+ uint8_t qe[QENTRY_LEN], *scp;
+
+ ISP_MEMZERO(qe, QENTRY_LEN);
+ if (FC_SCRATCH_ACQUIRE(isp, chan)) {
+ return (EBUSY);
+ }
+ scp = fcp->isp_scratch;
+
+ /*
+ * Build a VP CTRL command in memory
+ */
+ vp = (vp_ctrl_info_t *) qe;
+ vp->vp_ctrl_hdr.rqs_entry_type = RQSTYPE_VP_CTRL;
+ vp->vp_ctrl_hdr.rqs_entry_count = 1;
+ if (ISP_CAP_VP0(isp)) {
+ vp->vp_ctrl_status = 1;
+ } else {
+ vp->vp_ctrl_status = 0;
+ chan--; /* VP0 can not be controlled in this case. */
+ }
+ vp->vp_ctrl_command = VP_CTRL_CMD_DISABLE_VP_LOGO_ALL;
+ vp->vp_ctrl_vp_count = 1;
+ vp->vp_ctrl_idmap[chan / 16] |= (1 << chan % 16);
+ isp_put_vp_ctrl_info(isp, vp, (vp_ctrl_info_t *) scp);
+
+ /*
+ * Build a EXEC IOCB A64 command that points to the VP CTRL command
+ */
+ MBSINIT(&mbs, MBOX_EXEC_COMMAND_IOCB_A64, MBLOGALL, 0);
+ mbs.param[1] = QENTRY_LEN;
+ mbs.param[2] = DMA_WD1(fcp->isp_scdma);
+ mbs.param[3] = DMA_WD0(fcp->isp_scdma);
+ mbs.param[6] = DMA_WD3(fcp->isp_scdma);
+ mbs.param[7] = DMA_WD2(fcp->isp_scdma);
+ MEMORYBARRIER(isp, SYNC_SFORDEV, 0, 2 * QENTRY_LEN, chan);
+ isp_control(isp, ISPCTL_RUN_MBOXCMD, &mbs);
+ if (mbs.param[0] != MBOX_COMMAND_COMPLETE) {
+ FC_SCRATCH_RELEASE(isp, chan);
+ return (EIO);
+ }
+ MEMORYBARRIER(isp, SYNC_SFORCPU, QENTRY_LEN, QENTRY_LEN, chan);
+ isp_get_vp_ctrl_info(isp, (vp_ctrl_info_t *)&scp[QENTRY_LEN], vp);
+
+ FC_SCRATCH_RELEASE(isp, chan);
+
+ if (vp->vp_ctrl_status != 0) {
+ isp_prt(isp, ISP_LOGERR,
+ "%s: VP_CTRL of Chan %d failed with status %d %d",
+ __func__, chan, vp->vp_ctrl_status, vp->vp_ctrl_index_fail);
+ return (EIO);
+ }
+ return (0);
+}
+
/*
* Change Roles
*/
@@ -588,74 +718,28 @@ int
isp_fc_change_role(ispsoftc_t *isp, int chan, int new_role)
{
fcparam *fcp = FCPARAM(isp, chan);
+ int i, was, res = 0;
if (chan >= isp->isp_nchan) {
isp_prt(isp, ISP_LOGWARN, "%s: bad channel %d", __func__, chan);
return (ENXIO);
}
- if (chan == 0) {
+ if (fcp->role == new_role)
+ return (0);
+ for (was = 0, i = 0; i < isp->isp_nchan; i++) {
+ if (FCPARAM(isp, i)->role != ISP_ROLE_NONE)
+ was++;
+ }
+ if (was == 0 || (was == 1 && fcp->role != ISP_ROLE_NONE)) {
fcp->role = new_role;
return (isp_reinit(isp, 0));
- } else if (ISP_CAP_MULTI_ID(isp)) {
- mbreg_t mbs;
- vp_modify_t *vp;
- uint8_t qe[QENTRY_LEN], *scp;
-
- ISP_MEMZERO(qe, QENTRY_LEN);
- if (FC_SCRATCH_ACQUIRE(isp, chan)) {
- return (EBUSY);
- }
- scp = fcp->isp_scratch;
-
- /*
- * Build a VP MODIFY command in memory
- */
- vp = (vp_modify_t *) qe;
- vp->vp_mod_hdr.rqs_entry_type = RQSTYPE_VP_MODIFY;
- vp->vp_mod_hdr.rqs_entry_count = 1;
- vp->vp_mod_cnt = 1;
- vp->vp_mod_idx0 = chan;
- vp->vp_mod_cmd = VP_MODIFY_ENA;
- vp->vp_mod_ports[0].options = ICB2400_VPOPT_ENABLED;
- if (new_role & ISP_ROLE_INITIATOR) {
- vp->vp_mod_ports[0].options |= ICB2400_VPOPT_INI_ENABLE;
- }
- if ((new_role & ISP_ROLE_TARGET) == 0) {
- vp->vp_mod_ports[0].options |= ICB2400_VPOPT_TGT_DISABLE;
- }
- MAKE_NODE_NAME_FROM_WWN(vp->vp_mod_ports[0].wwpn, fcp->isp_wwpn);
- MAKE_NODE_NAME_FROM_WWN(vp->vp_mod_ports[0].wwnn, fcp->isp_wwnn);
- isp_put_vp_modify(isp, vp, (vp_modify_t *) scp);
-
- /*
- * Build a EXEC IOCB A64 command that points to the VP MODIFY command
- */
- MBSINIT(&mbs, MBOX_EXEC_COMMAND_IOCB_A64, MBLOGALL, 0);
- mbs.param[1] = QENTRY_LEN;
- mbs.param[2] = DMA_WD1(fcp->isp_scdma);
- mbs.param[3] = DMA_WD0(fcp->isp_scdma);
- mbs.param[6] = DMA_WD3(fcp->isp_scdma);
- mbs.param[7] = DMA_WD2(fcp->isp_scdma);
- MEMORYBARRIER(isp, SYNC_SFORDEV, 0, 2 * QENTRY_LEN, chan);
- isp_control(isp, ISPCTL_RUN_MBOXCMD, &mbs);
- if (mbs.param[0] != MBOX_COMMAND_COMPLETE) {
- FC_SCRATCH_RELEASE(isp, chan);
- return (EIO);
- }
- MEMORYBARRIER(isp, SYNC_SFORCPU, QENTRY_LEN, QENTRY_LEN, chan);
- isp_get_vp_modify(isp, (vp_modify_t *)&scp[QENTRY_LEN], vp);
-
- FC_SCRATCH_RELEASE(isp, chan);
-
- if (vp->vp_mod_status != VP_STS_OK) {
- isp_prt(isp, ISP_LOGERR, "%s: VP_MODIFY of Chan %d failed with status %d", __func__, chan, vp->vp_mod_status);
- return (EIO);
- }
- fcp->role = new_role;
- return (0);
- } else {
- return (EINVAL);
}
+ if (fcp->role != ISP_ROLE_NONE)
+ res = isp_fc_disable_vp(isp, chan);
+ fcp->role = new_role;
+ if (fcp->role != ISP_ROLE_NONE)
+ res = isp_fc_enable_vp(isp, chan);
+ return (res);
}
void
@@ -1071,6 +1155,7 @@ isp_put_24xx_abrt(ispsoftc_t *isp, isp24xx_abrt_t *src, isp24xx_abrt_t *dst)
ISP_IOXPUT_16(isp, src->abrt_nphdl, &dst->abrt_nphdl);
ISP_IOXPUT_16(isp, src->abrt_options, &dst->abrt_options);
ISP_IOXPUT_32(isp, src->abrt_cmd_handle, &dst->abrt_cmd_handle);
+ ISP_IOXPUT_16(isp, src->abrt_queue_number, &dst->abrt_queue_number);
for (i = 0; i < ASIZE(src->abrt_reserved); i++) {
ISP_IOXPUT_8(isp, src->abrt_reserved[i], &dst->abrt_reserved[i]);
}
@@ -1158,7 +1243,7 @@ isp_get_24xx_response(ispsoftc_t *isp, isp24xx_statusreq_t *src, isp24xx_statusr
ISP_IOXGET_32(isp, &src->req_resid, dst->req_resid);
ISP_IOXGET_16(isp, &src->req_reserved0, dst->req_reserved0);
ISP_IOXGET_16(isp, &src->req_state_flags, dst->req_state_flags);
- ISP_IOXGET_16(isp, &src->req_reserved1, dst->req_reserved1);
+ ISP_IOXGET_16(isp, &src->req_retry_delay, dst->req_retry_delay);
ISP_IOXGET_16(isp, &src->req_scsi_status, dst->req_scsi_status);
ISP_IOXGET_32(isp, &src->req_fcp_residual, dst->req_fcp_residual);
ISP_IOXGET_32(isp, &src->req_sense_len, dst->req_sense_len);
@@ -1179,6 +1264,7 @@ isp_get_24xx_abrt(ispsoftc_t *isp, isp24xx_abrt_t *src, isp24xx_abrt_t *dst)
ISP_IOXGET_16(isp, &src->abrt_nphdl, dst->abrt_nphdl);
ISP_IOXGET_16(isp, &src->abrt_options, dst->abrt_options);
ISP_IOXGET_32(isp, &src->abrt_cmd_handle, dst->abrt_cmd_handle);
+ ISP_IOXGET_16(isp, &src->abrt_queue_number, dst->abrt_queue_number);
for (i = 0; i < ASIZE(src->abrt_reserved); i++) {
ISP_IOXGET_8(isp, &src->abrt_reserved[i], dst->abrt_reserved[i]);
}
@@ -1398,8 +1484,9 @@ isp_put_vp_ctrl_info(ispsoftc_t *isp, vp_ctrl_info_t *src, vp_ctrl_info_t *dst)
ISP_IOXPUT_16(isp, src->vp_ctrl_idmap[i], &dst->vp_ctrl_idmap[i]);
}
for (i = 0; i < ASIZE(src->vp_ctrl_reserved); i++) {
- ISP_IOXPUT_8(isp, src->vp_ctrl_reserved[i], &dst->vp_ctrl_reserved[i]);
+ ISP_IOXPUT_16(isp, src->vp_ctrl_reserved[i], &dst->vp_ctrl_reserved[i]);
}
+ ISP_IOXPUT_16(isp, src->vp_ctrl_fcf_index, &dst->vp_ctrl_fcf_index);
}
void
@@ -1416,8 +1503,9 @@ isp_get_vp_ctrl_info(ispsoftc_t *isp, vp_ctrl_info_t *src, vp_ctrl_info_t *dst)
ISP_IOXGET_16(isp, &src->vp_ctrl_idmap[i], dst->vp_ctrl_idmap[i]);
}
for (i = 0; i < ASIZE(src->vp_ctrl_reserved); i++) {
- ISP_IOXGET_8(isp, &src->vp_ctrl_reserved[i], dst->vp_ctrl_reserved[i]);
+ ISP_IOXGET_16(isp, &src->vp_ctrl_reserved[i], dst->vp_ctrl_reserved[i]);
}
+ ISP_IOXGET_16(isp, &src->vp_ctrl_fcf_index, dst->vp_ctrl_fcf_index);
}
void
@@ -1558,6 +1646,44 @@ isp_get_pdb_24xx(ispsoftc_t *isp, isp_pdb_24xx_t *src, isp_pdb_24xx_t *dst)
}
}
+void
+isp_get_pnhle_21xx(ispsoftc_t *isp, isp_pnhle_21xx_t *src, isp_pnhle_21xx_t *dst)
+{
+
+ ISP_IOXGET_16(isp, &src->pnhle_port_id_lo, dst->pnhle_port_id_lo);
+ ISP_IOXGET_16(isp, &src->pnhle_port_id_hi_handle, dst->pnhle_port_id_hi_handle);
+}
+
+void
+isp_get_pnhle_23xx(ispsoftc_t *isp, isp_pnhle_23xx_t *src, isp_pnhle_23xx_t *dst)
+{
+
+ ISP_IOXGET_16(isp, &src->pnhle_port_id_lo, dst->pnhle_port_id_lo);
+ ISP_IOXGET_16(isp, &src->pnhle_port_id_hi, dst->pnhle_port_id_hi);
+ ISP_IOXGET_16(isp, &src->pnhle_handle, dst->pnhle_handle);
+}
+
+void
+isp_get_pnhle_24xx(ispsoftc_t *isp, isp_pnhle_24xx_t *src, isp_pnhle_24xx_t *dst)
+{
+
+ ISP_IOXGET_16(isp, &src->pnhle_port_id_lo, dst->pnhle_port_id_lo);
+ ISP_IOXGET_16(isp, &src->pnhle_port_id_hi, dst->pnhle_port_id_hi);
+ ISP_IOXGET_16(isp, &src->pnhle_handle, dst->pnhle_handle);
+ ISP_IOXGET_16(isp, &src->pnhle_reserved, dst->pnhle_reserved);
+}
+
+void
+isp_get_pnnle(ispsoftc_t *isp, isp_pnnle_t *src, isp_pnnle_t *dst)
+{
+ int i;
+
+ for (i = 0; i < 8; i++)
+ ISP_IOXGET_8(isp, &src->pnnle_name[i], dst->pnnle_name[i]);
+ ISP_IOXGET_16(isp, &src->pnnle_handle, dst->pnnle_handle);
+ ISP_IOXGET_16(isp, &src->pnnle_reserved, dst->pnnle_reserved);
+}
+
/*
* PLOGI/LOGO IOCB canonicalization
*/
@@ -2421,7 +2547,8 @@ isp_find_chan_by_did(ispsoftc_t *isp, uint32_t did, uint16_t *cp)
* Add an initiator device to the port database
*/
void
-isp_add_wwn_entry(ispsoftc_t *isp, int chan, uint64_t ini, uint16_t nphdl, uint32_t s_id, uint16_t prli_params)
+isp_add_wwn_entry(ispsoftc_t *isp, int chan, uint64_t wwpn, uint64_t wwnn,
+ uint16_t nphdl, uint32_t s_id, uint16_t prli_params)
{
char buf[64];
fcparam *fcp;
@@ -2432,7 +2559,7 @@ isp_add_wwn_entry(ispsoftc_t *isp, int chan, uint64_t ini, uint16_t nphdl, uint3
if (nphdl >= MAX_NPORT_HANDLE) {
isp_prt(isp, ISP_LOGTINFO|ISP_LOGWARN, "Chan %d WWPN 0x%016llx "
"PortID 0x%06x handle 0x%x -- bad handle",
- chan, (unsigned long long) ini, s_id, nphdl);
+ chan, (unsigned long long) wwpn, s_id, nphdl);
return;
}
@@ -2441,7 +2568,7 @@ isp_add_wwn_entry(ispsoftc_t *isp, int chan, uint64_t ini, uint16_t nphdl, uint3
* with new parameters. Some cases of update can be suspicious,
* so log them verbosely and dump the whole port database.
*/
- if ((VALID_INI(ini) && isp_find_pdb_by_wwn(isp, chan, ini, &lp)) ||
+ if ((VALID_INI(wwpn) && isp_find_pdb_by_wwn(isp, chan, wwpn, &lp)) ||
(s_id != PORT_NONE && isp_find_pdb_by_sid(isp, chan, s_id, &lp))) {
change = 0;
lp->new_portid = lp->portid;
@@ -2465,24 +2592,42 @@ isp_add_wwn_entry(ispsoftc_t *isp, int chan, uint64_t ini, uint16_t nphdl, uint3
lp->new_portid = s_id;
change++;
}
- if (VALID_INI(ini) && lp->port_wwn != ini) {
+ if (VALID_INI(wwpn) && lp->port_wwn != wwpn) {
if (!VALID_INI(lp->port_wwn)) {
isp_prt(isp, ISP_LOGTINFO,
"Chan %d PortID 0x%06x handle 0x%x "
- "gets WWN 0x%016llxx",
+ "gets WWPN 0x%016llxx",
chan, lp->portid, nphdl,
- (unsigned long long) ini);
- } else if (lp->port_wwn != ini) {
+ (unsigned long long) wwpn);
+ } else if (lp->port_wwn != wwpn) {
isp_prt(isp, ISP_LOGTINFO|ISP_LOGWARN,
"Chan %d PortID 0x%06x handle 0x%x "
- "changes WWN 0x%016llx to 0x%016llx",
+ "changes WWPN 0x%016llx to 0x%016llx",
chan, lp->portid, nphdl,
(unsigned long long) lp->port_wwn,
- (unsigned long long) ini);
+ (unsigned long long) wwpn);
if (isp->isp_dblev & (ISP_LOGTINFO|ISP_LOGWARN))
isp_dump_portdb(isp, chan);
}
- lp->port_wwn = ini;
+ lp->port_wwn = wwpn;
+ change++;
+ }
+ if (VALID_INI(wwnn) && lp->node_wwn != wwnn) {
+ if (!VALID_INI(lp->node_wwn)) {
+ isp_prt(isp, ISP_LOGTINFO,
+ "Chan %d PortID 0x%06x handle 0x%x "
+ "gets WWNN 0x%016llxx",
+ chan, lp->portid, nphdl,
+ (unsigned long long) wwnn);
+ } else if (lp->port_wwn != wwnn) {
+ isp_prt(isp, ISP_LOGTINFO,
+ "Chan %d PortID 0x%06x handle 0x%x "
+ "changes WWNN 0x%016llx to 0x%016llx",
+ chan, lp->portid, nphdl,
+ (unsigned long long) lp->node_wwn,
+ (unsigned long long) wwnn);
+ }
+ lp->node_wwn = wwnn;
change++;
}
if (prli_params != 0 && lp->prli_word3 != prli_params) {
@@ -2531,7 +2676,7 @@ isp_add_wwn_entry(ispsoftc_t *isp, int chan, uint64_t ini, uint16_t nphdl, uint3
isp_prt(isp, ISP_LOGTINFO|ISP_LOGWARN,
"Chan %d WWPN 0x%016llx PortID 0x%06x handle 0x%x "
"-- no room in port database",
- chan, (unsigned long long) ini, s_id, nphdl);
+ chan, (unsigned long long) wwpn, s_id, nphdl);
if (isp->isp_dblev & (ISP_LOGTINFO|ISP_LOGWARN))
isp_dump_portdb(isp, chan);
return;
@@ -2542,14 +2687,15 @@ isp_add_wwn_entry(ispsoftc_t *isp, int chan, uint64_t ini, uint16_t nphdl, uint3
ISP_MEMZERO(lp, sizeof (fcportdb_t));
lp->handle = nphdl;
lp->portid = s_id;
- lp->port_wwn = ini;
+ lp->port_wwn = wwpn;
+ lp->node_wwn = wwnn;
lp->prli_word3 = (prli_params != 0) ? prli_params : PRLI_WD3_INITIATOR_FUNCTION;
lp->state = FC_PORTDB_STATE_VALID;
isp_gen_role_str(buf, sizeof (buf), lp->prli_word3);
isp_prt(isp, ISP_LOGTINFO, "Chan %d WWPN 0x%016llx "
"PortID 0x%06x handle 0x%x vtgt %d %s added", chan,
- (unsigned long long) ini, s_id, nphdl, i, buf);
+ (unsigned long long) wwpn, s_id, nphdl, i, buf);
/* Notify above levels about new port arrival. */
isp_async(isp, ISPASYNC_DEV_ARRIVED, chan, lp);
@@ -2559,21 +2705,21 @@ isp_add_wwn_entry(ispsoftc_t *isp, int chan, uint64_t ini, uint16_t nphdl, uint3
* Remove a target device to the port database
*/
void
-isp_del_wwn_entry(ispsoftc_t *isp, int chan, uint64_t ini, uint16_t nphdl, uint32_t s_id)
+isp_del_wwn_entry(ispsoftc_t *isp, int chan, uint64_t wwpn, uint16_t nphdl, uint32_t s_id)
{
fcparam *fcp;
fcportdb_t *lp;
if (nphdl >= MAX_NPORT_HANDLE) {
isp_prt(isp, ISP_LOGWARN, "Chan %d WWPN 0x%016llx PortID 0x%06x bad handle 0x%x",
- chan, (unsigned long long) ini, s_id, nphdl);
+ chan, (unsigned long long) wwpn, s_id, nphdl);
return;
}
fcp = FCPARAM(isp, chan);
if (isp_find_pdb_by_handle(isp, chan, nphdl, &lp) == 0) {
isp_prt(isp, ISP_LOGWARN, "Chan %d WWPN 0x%016llx PortID 0x%06x handle 0x%x cannot be found to be deleted",
- chan, (unsigned long long) ini, s_id, nphdl);
+ chan, (unsigned long long) wwpn, s_id, nphdl);
isp_dump_portdb(isp, chan);
return;
}
@@ -3468,7 +3614,7 @@ isp_put_notify_24xx(ispsoftc_t *isp, in_fcentry_24xx_t *src, in_fcentry_24xx_t *
ISP_IOXPUT_16(isp, src->in_srr_rxid, &dst->in_srr_rxid);
ISP_IOXPUT_16(isp, src->in_status, &dst->in_status);
ISP_IOXPUT_8(isp, src->in_status_subcode, &dst->in_status_subcode);
- ISP_IOXPUT_16(isp, src->in_reserved2, &dst->in_reserved2);
+ ISP_IOXPUT_8(isp, src->in_fwhandle, &dst->in_fwhandle);
ISP_IOXPUT_32(isp, src->in_rxid, &dst->in_rxid);
ISP_IOXPUT_16(isp, src->in_srr_reloff_hi, &dst->in_srr_reloff_hi);
ISP_IOXPUT_16(isp, src->in_srr_reloff_lo, &dst->in_srr_reloff_lo);
@@ -3531,7 +3677,7 @@ isp_get_notify_24xx(ispsoftc_t *isp, in_fcentry_24xx_t *src, in_fcentry_24xx_t *
ISP_IOXGET_16(isp, &src->in_srr_rxid, dst->in_srr_rxid);
ISP_IOXGET_16(isp, &src->in_status, dst->in_status);
ISP_IOXGET_8(isp, &src->in_status_subcode, dst->in_status_subcode);
- ISP_IOXGET_16(isp, &src->in_reserved2, dst->in_reserved2);
+ ISP_IOXGET_8(isp, &src->in_fwhandle, dst->in_fwhandle);
ISP_IOXGET_32(isp, &src->in_rxid, dst->in_rxid);
ISP_IOXGET_16(isp, &src->in_srr_reloff_hi, dst->in_srr_reloff_hi);
ISP_IOXGET_16(isp, &src->in_srr_reloff_lo, dst->in_srr_reloff_lo);
@@ -3650,7 +3796,7 @@ isp_put_notify_24xx_ack(ispsoftc_t *isp, na_fcentry_24xx_t *src, na_fcentry_24xx
ISP_IOXPUT_16(isp, src->na_srr_rxid, &dst->na_srr_rxid);
ISP_IOXPUT_16(isp, src->na_status, &dst->na_status);
ISP_IOXPUT_8(isp, src->na_status_subcode, &dst->na_status_subcode);
- ISP_IOXPUT_16(isp, src->na_reserved2, &dst->na_reserved2);
+ ISP_IOXPUT_8(isp, src->na_fwhandle, &dst->na_fwhandle);
ISP_IOXPUT_32(isp, src->na_rxid, &dst->na_rxid);
ISP_IOXPUT_16(isp, src->na_srr_reloff_hi, &dst->na_srr_reloff_hi);
ISP_IOXPUT_16(isp, src->na_srr_reloff_lo, &dst->na_srr_reloff_lo);
@@ -3721,7 +3867,7 @@ isp_get_notify_ack_24xx(ispsoftc_t *isp, na_fcentry_24xx_t *src, na_fcentry_24xx
ISP_IOXGET_16(isp, &src->na_srr_rxid, dst->na_srr_rxid);
ISP_IOXGET_16(isp, &src->na_status, dst->na_status);
ISP_IOXGET_8(isp, &src->na_status_subcode, dst->na_status_subcode);
- ISP_IOXGET_16(isp, &src->na_reserved2, dst->na_reserved2);
+ ISP_IOXGET_8(isp, &src->na_fwhandle, dst->na_fwhandle);
ISP_IOXGET_32(isp, &src->na_rxid, dst->na_rxid);
ISP_IOXGET_16(isp, &src->na_srr_reloff_hi, dst->na_srr_reloff_hi);
ISP_IOXGET_16(isp, &src->na_srr_reloff_lo, dst->na_srr_reloff_lo);
diff --git a/sys/dev/isp/isp_library.h b/sys/dev/isp/isp_library.h
index cc0cfaa..2e575b2 100644
--- a/sys/dev/isp/isp_library.h
+++ b/sys/dev/isp/isp_library.h
@@ -123,6 +123,10 @@ void isp_put_vp_modify(ispsoftc_t *, vp_modify_t *, vp_modify_t *);
void isp_get_vp_modify(ispsoftc_t *, vp_modify_t *, vp_modify_t *);
void isp_get_pdb_21xx(ispsoftc_t *, isp_pdb_21xx_t *, isp_pdb_21xx_t *);
void isp_get_pdb_24xx(ispsoftc_t *, isp_pdb_24xx_t *, isp_pdb_24xx_t *);
+void isp_get_pnhle_21xx(ispsoftc_t *, isp_pnhle_21xx_t *, isp_pnhle_21xx_t *);
+void isp_get_pnhle_23xx(ispsoftc_t *, isp_pnhle_23xx_t *, isp_pnhle_23xx_t *);
+void isp_get_pnhle_24xx(ispsoftc_t *, isp_pnhle_24xx_t *, isp_pnhle_24xx_t *);
+void isp_get_pnnle(ispsoftc_t *, isp_pnnle_t *, isp_pnnle_t *);
void isp_get_ridacq(ispsoftc_t *, isp_ridacq_t *, isp_ridacq_t *);
void isp_get_plogx(ispsoftc_t *, isp_plogx_t *, isp_plogx_t *);
void isp_put_plogx(ispsoftc_t *, isp_plogx_t *, isp_plogx_t *);
@@ -171,7 +175,7 @@ int isp_find_pdb_by_wwn(ispsoftc_t *, int, uint64_t, fcportdb_t **);
int isp_find_pdb_by_handle(ispsoftc_t *, int, uint32_t, fcportdb_t **);
int isp_find_pdb_by_sid(ispsoftc_t *, int, uint32_t, fcportdb_t **);
void isp_find_chan_by_did(ispsoftc_t *, uint32_t, uint16_t *);
-void isp_add_wwn_entry(ispsoftc_t *, int, uint64_t, uint16_t, uint32_t, uint16_t);
+void isp_add_wwn_entry(ispsoftc_t *, int, uint64_t, uint64_t, uint16_t, uint32_t, uint16_t);
void isp_del_wwn_entry(ispsoftc_t *, int, uint64_t, uint16_t, uint32_t);
void isp_del_all_wwn_entries(ispsoftc_t *, int);
void isp_del_wwn_entries(ispsoftc_t *, isp_notify_t *);
diff --git a/sys/dev/isp/isp_pci.c b/sys/dev/isp/isp_pci.c
index be4b215..cbc1994 100644
--- a/sys/dev/isp/isp_pci.c
+++ b/sys/dev/isp/isp_pci.c
@@ -59,9 +59,9 @@ static uint32_t isp_pci_rd_reg_1080(ispsoftc_t *, int);
static void isp_pci_wr_reg_1080(ispsoftc_t *, int, uint32_t);
static uint32_t isp_pci_rd_reg_2400(ispsoftc_t *, int);
static void isp_pci_wr_reg_2400(ispsoftc_t *, int, uint32_t);
-static int isp_pci_rd_isr(ispsoftc_t *, uint32_t *, uint16_t *, uint16_t *);
-static int isp_pci_rd_isr_2300(ispsoftc_t *, uint32_t *, uint16_t *, uint16_t *);
-static int isp_pci_rd_isr_2400(ispsoftc_t *, uint32_t *, uint16_t *, uint16_t *);
+static int isp_pci_rd_isr(ispsoftc_t *, uint16_t *, uint16_t *, uint16_t *);
+static int isp_pci_rd_isr_2300(ispsoftc_t *, uint16_t *, uint16_t *, uint16_t *);
+static int isp_pci_rd_isr_2400(ispsoftc_t *, uint16_t *, uint16_t *, uint16_t *);
static int isp_pci_mbxdma(ispsoftc_t *);
static int isp_pci_dmasetup(ispsoftc_t *, XS_T *, void *);
@@ -489,9 +489,6 @@ isp_get_generic_options(device_t dev, ispsoftc_t *isp)
if (tval > 0 && tval < 127) {
isp_nvports = tval;
}
- tval = 1;
- (void) resource_int_value(device_get_name(dev), device_get_unit(dev), "autoconfig", &tval);
- isp_autoconfig = tval;
tval = 7;
(void) resource_int_value(device_get_name(dev), device_get_unit(dev), "quickboot_time", &tval);
isp_quickboot_time = tval;
@@ -899,9 +896,6 @@ isp_pci_attach(device_t dev)
if (IS_SCSI(isp) && (ISP_SPI_PC(isp, 0)->def_role & ISP_ROLE_TARGET)) {
snprintf(fwname, sizeof (fwname), "isp_%04x_it", did);
isp->isp_osinfo.fw = firmware_get(fwname);
- } else if (IS_24XX(isp)) {
- snprintf(fwname, sizeof (fwname), "isp_%04x_multi", did);
- isp->isp_osinfo.fw = firmware_get(fwname);
}
if (isp->isp_osinfo.fw == NULL) {
snprintf(fwname, sizeof (fwname), "isp_%04x", did);
@@ -997,15 +991,10 @@ isp_pci_attach(device_t dev)
* Make sure we're in reset state.
*/
ISP_LOCK(isp);
- isp_reset(isp, 1);
- if (isp->isp_state != ISP_RESETSTATE) {
+ if (isp_reinit(isp, 1) != 0) {
ISP_UNLOCK(isp);
goto bad;
}
- isp_init(isp);
- if (isp->isp_state == ISP_INITSTATE) {
- isp->isp_state = ISP_RUNSTATE;
- }
ISP_UNLOCK(isp);
if (isp_attach(isp)) {
ISP_LOCK(isp);
@@ -1115,7 +1104,7 @@ isp_pci_rd_debounced(ispsoftc_t *isp, int off, uint16_t *rp)
}
static int
-isp_pci_rd_isr(ispsoftc_t *isp, uint32_t *isrp, uint16_t *semap, uint16_t *mbp)
+isp_pci_rd_isr(ispsoftc_t *isp, uint16_t *isrp, uint16_t *semap, uint16_t *info)
{
uint16_t isr, sema;
@@ -1139,21 +1128,20 @@ isp_pci_rd_isr(ispsoftc_t *isp, uint32_t *isrp, uint16_t *semap, uint16_t *mbp)
*isrp = isr;
if ((*semap = sema) != 0) {
if (IS_2100(isp)) {
- if (isp_pci_rd_debounced(isp, OUTMAILBOX0, mbp)) {
+ if (isp_pci_rd_debounced(isp, OUTMAILBOX0, info)) {
return (0);
}
} else {
- *mbp = BXR2(isp, IspVirt2Off(isp, OUTMAILBOX0));
+ *info = BXR2(isp, IspVirt2Off(isp, OUTMAILBOX0));
}
}
return (1);
}
static int
-isp_pci_rd_isr_2300(ispsoftc_t *isp, uint32_t *isrp, uint16_t *semap, uint16_t *mbox0p)
+isp_pci_rd_isr_2300(ispsoftc_t *isp, uint16_t *isrp, uint16_t *semap, uint16_t *info)
{
- uint32_t hccr;
- uint32_t r2hisr;
+ uint32_t hccr, r2hisr;
if (!(BXR2(isp, IspVirt2Off(isp, BIU_ISR) & BIU2100_ISR_RISC_INT))) {
*isrp = 0;
@@ -1165,36 +1153,29 @@ isp_pci_rd_isr_2300(ispsoftc_t *isp, uint32_t *isrp, uint16_t *semap, uint16_t *
*isrp = 0;
return (0);
}
- switch (r2hisr & BIU_R2HST_ISTAT_MASK) {
+ switch ((*isrp = r2hisr & BIU_R2HST_ISTAT_MASK)) {
case ISPR2HST_ROM_MBX_OK:
case ISPR2HST_ROM_MBX_FAIL:
case ISPR2HST_MBX_OK:
case ISPR2HST_MBX_FAIL:
case ISPR2HST_ASYNC_EVENT:
- *isrp = r2hisr & 0xffff;
- *mbox0p = (r2hisr >> 16);
*semap = 1;
- return (1);
+ break;
case ISPR2HST_RIO_16:
- *isrp = r2hisr & 0xffff;
- *mbox0p = ASYNC_RIO16_1;
+ *info = ASYNC_RIO16_1;
*semap = 1;
return (1);
case ISPR2HST_FPOST:
- *isrp = r2hisr & 0xffff;
- *mbox0p = ASYNC_CMD_CMPLT;
+ *info = ASYNC_CMD_CMPLT;
*semap = 1;
return (1);
case ISPR2HST_FPOST_CTIO:
- *isrp = r2hisr & 0xffff;
- *mbox0p = ASYNC_CTIO_DONE;
+ *info = ASYNC_CTIO_DONE;
*semap = 1;
return (1);
case ISPR2HST_RSPQ_UPDATE:
- *isrp = r2hisr & 0xffff;
- *mbox0p = 0;
*semap = 0;
- return (1);
+ break;
default:
hccr = ISP_READ(isp, HCCR);
if (hccr & HCCR_PAUSE) {
@@ -1206,41 +1187,43 @@ isp_pci_rd_isr_2300(ispsoftc_t *isp, uint32_t *isrp, uint16_t *semap, uint16_t *
}
return (0);
}
+ *info = (r2hisr >> 16);
+ return (1);
}
static int
-isp_pci_rd_isr_2400(ispsoftc_t *isp, uint32_t *isrp, uint16_t *semap, uint16_t *mbox0p)
+isp_pci_rd_isr_2400(ispsoftc_t *isp, uint16_t *isrp, uint16_t *semap, uint16_t *info)
{
uint32_t r2hisr;
r2hisr = BXR4(isp, IspVirt2Off(isp, BIU2400_R2HSTSLO));
isp_prt(isp, ISP_LOGDEBUG3, "RISC2HOST ISR 0x%x", r2hisr);
- if ((r2hisr & BIU2400_R2HST_INTR) == 0) {
+ if ((r2hisr & BIU_R2HST_INTR) == 0) {
*isrp = 0;
return (0);
}
- switch (r2hisr & BIU2400_R2HST_ISTAT_MASK) {
- case ISP2400R2HST_ROM_MBX_OK:
- case ISP2400R2HST_ROM_MBX_FAIL:
- case ISP2400R2HST_MBX_OK:
- case ISP2400R2HST_MBX_FAIL:
- case ISP2400R2HST_ASYNC_EVENT:
- *isrp = r2hisr & 0xffff;
- *mbox0p = (r2hisr >> 16);
+ switch ((*isrp = r2hisr & BIU_R2HST_ISTAT_MASK)) {
+ case ISPR2HST_ROM_MBX_OK:
+ case ISPR2HST_ROM_MBX_FAIL:
+ case ISPR2HST_MBX_OK:
+ case ISPR2HST_MBX_FAIL:
+ case ISPR2HST_ASYNC_EVENT:
*semap = 1;
- return (1);
- case ISP2400R2HST_RSPQ_UPDATE:
- case ISP2400R2HST_ATIO_RSPQ_UPDATE:
- case ISP2400R2HST_ATIO_RQST_UPDATE:
- *isrp = r2hisr & 0xffff;
- *mbox0p = 0;
+ break;
+ case ISPR2HST_RSPQ_UPDATE:
+ case ISPR2HST_RSPQ_UPDATE2:
+ case ISPR2HST_ATIO_UPDATE:
+ case ISPR2HST_ATIO_RSPQ_UPDATE:
+ case ISPR2HST_ATIO_UPDATE2:
*semap = 0;
- return (1);
+ break;
default:
ISP_WRITE(isp, BIU2400_HCCR, HCCR_2400_CMD_CLEAR_RISC_INT);
isp_prt(isp, ISP_LOGERR, "unknown interrupt 0x%x\n", r2hisr);
return (0);
}
+ *info = (r2hisr >> 16);
+ return (1);
}
static uint32_t
diff --git a/sys/dev/isp/isp_sbus.c b/sys/dev/isp/isp_sbus.c
index 9afcc8e..cebfe8b 100644
--- a/sys/dev/isp/isp_sbus.c
+++ b/sys/dev/isp/isp_sbus.c
@@ -53,7 +53,7 @@ __FBSDID("$FreeBSD$");
static uint32_t isp_sbus_rd_reg(ispsoftc_t *, int);
static void isp_sbus_wr_reg(ispsoftc_t *, int, uint32_t);
-static int isp_sbus_rd_isr(ispsoftc_t *, uint32_t *, uint16_t *, uint16_t *);
+static int isp_sbus_rd_isr(ispsoftc_t *, uint16_t *, uint16_t *, uint16_t *);
static int isp_sbus_mbxdma(ispsoftc_t *);
static int isp_sbus_dmasetup(ispsoftc_t *, XS_T *, void *);
@@ -313,16 +313,11 @@ isp_sbus_attach(device_t dev)
* Make sure we're in reset state.
*/
ISP_LOCK(isp);
- isp_reset(isp, 1);
- if (isp->isp_state != ISP_RESETSTATE) {
+ if (isp_reinit(isp, 1) != 0) {
isp_uninit(isp);
ISP_UNLOCK(isp);
goto bad;
}
- isp_init(isp);
- if (isp->isp_state == ISP_INITSTATE) {
- isp->isp_state = ISP_RUNSTATE;
- }
ISP_UNLOCK(isp);
if (isp_attach(isp)) {
ISP_LOCK(isp);
@@ -388,7 +383,7 @@ isp_sbus_detach(device_t dev)
bus_space_read_2(isp->isp_bus_tag, isp->isp_bus_handle, off)
static int
-isp_sbus_rd_isr(ispsoftc_t *isp, uint32_t *isrp, uint16_t *semap, uint16_t *mbp)
+isp_sbus_rd_isr(ispsoftc_t *isp, uint16_t *isrp, uint16_t *semap, uint16_t *info)
{
uint16_t isr, sema;
@@ -401,9 +396,8 @@ isp_sbus_rd_isr(ispsoftc_t *isp, uint32_t *isrp, uint16_t *semap, uint16_t *mbp)
return (0);
}
*isrp = isr;
- if ((*semap = sema) != 0) {
- *mbp = BXR2(sbc, IspVirt2Off(isp, OUTMAILBOX0));
- }
+ if ((*semap = sema) != 0)
+ *info = BXR2(sbc, IspVirt2Off(isp, OUTMAILBOX0));
return (1);
}
diff --git a/sys/dev/isp/isp_stds.h b/sys/dev/isp/isp_stds.h
index e53f005..daa199c 100644
--- a/sys/dev/isp/isp_stds.h
+++ b/sys/dev/isp/isp_stds.h
@@ -97,8 +97,10 @@ typedef struct {
#define FCP_CMND_TMF_CLEAR_ACA 0x40
#define FCP_CMND_TMF_TGT_RESET 0x20
#define FCP_CMND_TMF_LUN_RESET 0x10
+#define FCP_CMND_TMF_QUERY_ASYNC_EVENT 0x08
#define FCP_CMND_TMF_CLEAR_TASK_SET 0x04
#define FCP_CMND_TMF_ABORT_TASK_SET 0x02
+#define FCP_CMND_TMF_QUERY_TASK_SET 0x01
/*
* Basic CT IU Header
diff --git a/sys/dev/isp/isp_target.c b/sys/dev/isp/isp_target.c
index aa34622..cf35501 100644
--- a/sys/dev/isp/isp_target.c
+++ b/sys/dev/isp/isp_target.c
@@ -953,6 +953,9 @@ isp_got_msg_fc(ispsoftc_t *isp, in_fcentry_t *inp)
/* nt_tgt set in outer layers */
if (ISP_CAP_SCCFW(isp)) {
notify.nt_lun = inp->in_scclun;
+#if __FreeBSD_version < 1000700
+ notify.nt_lun &= 0x3fff;
+#endif
} else {
notify.nt_lun = inp->in_lun;
}
@@ -1024,12 +1027,18 @@ isp_got_tmf_24xx(ispsoftc_t *isp, at7_entry_t *aep)
notify.nt_sid = sid;
notify.nt_did = did;
notify.nt_channel = chan;
- if (aep->at_cmnd.fcp_cmnd_task_management & FCP_CMND_TMF_ABORT_TASK_SET) {
+ if (aep->at_cmnd.fcp_cmnd_task_management & FCP_CMND_TMF_QUERY_TASK_SET) {
+ isp_prt(isp, ISP_LOGINFO, f1, "QUERY TASK SET", sid, notify.nt_lun, aep->at_rxid);
+ notify.nt_ncode = NT_QUERY_TASK_SET;
+ } else if (aep->at_cmnd.fcp_cmnd_task_management & FCP_CMND_TMF_ABORT_TASK_SET) {
isp_prt(isp, ISP_LOGINFO, f1, "ABORT TASK SET", sid, notify.nt_lun, aep->at_rxid);
notify.nt_ncode = NT_ABORT_TASK_SET;
} else if (aep->at_cmnd.fcp_cmnd_task_management & FCP_CMND_TMF_CLEAR_TASK_SET) {
isp_prt(isp, ISP_LOGINFO, f1, "CLEAR TASK SET", sid, notify.nt_lun, aep->at_rxid);
notify.nt_ncode = NT_CLEAR_TASK_SET;
+ } else if (aep->at_cmnd.fcp_cmnd_task_management & FCP_CMND_TMF_QUERY_ASYNC_EVENT) {
+ isp_prt(isp, ISP_LOGINFO, f1, "QUERY ASYNC EVENT", sid, notify.nt_lun, aep->at_rxid);
+ notify.nt_ncode = NT_QUERY_ASYNC_EVENT;
} else if (aep->at_cmnd.fcp_cmnd_task_management & FCP_CMND_TMF_LUN_RESET) {
isp_prt(isp, ISP_LOGINFO, f1, "LUN RESET", sid, notify.nt_lun, aep->at_rxid);
notify.nt_ncode = NT_LUN_RESET;
@@ -1079,6 +1088,7 @@ isp_notify_ack(ispsoftc_t *isp, void *arg)
na->na_flags = in->in_flags;
na->na_status = in->in_status;
na->na_status_subcode = in->in_status_subcode;
+ na->na_fwhandle = in->in_fwhandle;
na->na_rxid = in->in_rxid;
na->na_oxid = in->in_oxid;
na->na_vpidx = in->in_vpidx;
@@ -1323,6 +1333,9 @@ isp_handle_atio2(ispsoftc_t *isp, at2_entry_t *aep)
if (ISP_CAP_SCCFW(isp)) {
lun = aep->at_scclun;
+#if __FreeBSD_version < 1000700
+ lun &= 0x3fff;
+#endif
} else {
lun = aep->at_lun;
}
@@ -1350,7 +1363,7 @@ isp_handle_atio2(ispsoftc_t *isp, at2_entry_t *aep)
/*
* ATIO rejected by the firmware due to disabled lun.
*/
- isp_prt(isp, ISP_LOGERR, "rejected ATIO2 for disabled lun %d", lun);
+ isp_prt(isp, ISP_LOGERR, "rejected ATIO2 for disabled lun %x", lun);
break;
case AT_NOCAP:
/*
@@ -1358,7 +1371,7 @@ isp_handle_atio2(ispsoftc_t *isp, at2_entry_t *aep)
* We sent an ATIO that overflowed the firmware's
* command resource count.
*/
- isp_prt(isp, ISP_LOGERR, "rejected ATIO2 for lun %d- command count overflow", lun);
+ isp_prt(isp, ISP_LOGERR, "rejected ATIO2 for lun %x- command count overflow", lun);
break;
case AT_BDR_MSG:
@@ -1395,7 +1408,7 @@ isp_handle_atio2(ispsoftc_t *isp, at2_entry_t *aep)
default:
- isp_prt(isp, ISP_LOGERR, "Unknown ATIO2 status 0x%x from loopid %d for lun %d", aep->at_status, iid, lun);
+ isp_prt(isp, ISP_LOGERR, "Unknown ATIO2 status 0x%x from loopid %d for lun %x", aep->at_status, iid, lun);
(void) isp_target_put_atio(isp, aep);
break;
}
@@ -1876,6 +1889,8 @@ isp_handle_24xx_inotify(ispsoftc_t *isp, in_fcentry_24xx_t *inot_24xx)
}
isp_prt(isp, ISP_LOGTDEBUG1, "%s: Immediate Notify Channels %d..%d status=0x%x seqid=0x%x", __func__, lochan, hichan-1, inot_24xx->in_status, inot_24xx->in_rxid);
for (chan = lochan; chan < hichan; chan++) {
+ if (FCPARAM(isp, chan)->role == ISP_ROLE_NONE)
+ continue;
switch (inot_24xx->in_status) {
case IN24XX_LIP_RESET:
case IN24XX_LINK_RESET:
diff --git a/sys/dev/isp/isp_target.h b/sys/dev/isp/isp_target.h
index 8922a33..a75d73b 100644
--- a/sys/dev/isp/isp_target.h
+++ b/sys/dev/isp/isp_target.h
@@ -51,7 +51,9 @@ typedef enum {
NT_LOGOUT,
NT_GLOBAL_LOGOUT,
NT_CHANGED,
- NT_HBA_RESET
+ NT_HBA_RESET,
+ NT_QUERY_TASK_SET,
+ NT_QUERY_ASYNC_EVENT
} isp_ncode_t;
typedef struct isp_notify {
diff --git a/sys/dev/isp/ispmbox.h b/sys/dev/isp/ispmbox.h
index d2a29b2..25b57d5 100644
--- a/sys/dev/isp/ispmbox.h
+++ b/sys/dev/isp/ispmbox.h
@@ -156,6 +156,8 @@
#define MBOX_SEND_CHANGE_REQUEST 0x0070
#define MBOX_FABRIC_LOGOUT 0x0071
#define MBOX_INIT_LIP_LOGIN 0x0072
+#define MBOX_GET_PORT_NODE_NAME_LIST 0x0075
+#define MBOX_GET_ID_LIST 0x007C
#define MBOX_LUN_RESET 0x007E
#define MBOX_DRIVER_HEARTBEAT 0x005B
@@ -189,13 +191,17 @@
#define MBOX_LOOP_ID_USED 0x4008
#define MBOX_ALL_IDS_USED 0x4009
#define MBOX_NOT_LOGGED_IN 0x400A
+#define MBOX_LINK_DOWN_ERROR 0x400B
+#define MBOX_LOOPBACK_ERROR 0x400C
+#define MBOX_CHECKSUM_ERROR 0x4010
+#define MBOX_INVALID_PRODUCT_KEY 0x4020
/* pseudo mailbox completion codes */
#define MBOX_REGS_BUSY 0x6000 /* registers in use */
#define MBOX_TIMEOUT 0x6001 /* command timed out */
-#define MBLOGALL 0x000f
-#define MBLOGNONE 0x0000
-#define MBLOGMASK(x) ((x) & 0xf)
+#define MBLOGALL 0xffffffff
+#define MBLOGNONE 0x00000000
+#define MBLOGMASK(x) (1 << (((x) - 1) & 0x1f))
/*
* Asynchronous event status codes
@@ -574,7 +580,8 @@ typedef struct {
uint16_t abrt_nphdl;
uint16_t abrt_options;
uint32_t abrt_cmd_handle;
- uint8_t abrt_reserved[32];
+ uint16_t abrt_queue_number;
+ uint8_t abrt_reserved[30];
uint16_t abrt_tidlo;
uint8_t abrt_tidhi;
uint8_t abrt_vpidx;
@@ -632,7 +639,7 @@ typedef struct {
uint32_t req_resid;
uint16_t req_reserved0;
uint16_t req_state_flags;
- uint16_t req_reserved1;
+ uint16_t req_retry_delay; /* aka Status Qualifier */
uint16_t req_scsi_status;
uint32_t req_fcp_residual;
uint32_t req_sense_len;
@@ -644,11 +651,12 @@ typedef struct {
* For Qlogic 2X00, the high order byte of SCSI status has
* additional meaning.
*/
-#define RQCS_RU 0x800 /* Residual Under */
-#define RQCS_RO 0x400 /* Residual Over */
+#define RQCS_CR 0x1000 /* Confirmation Request */
+#define RQCS_RU 0x0800 /* Residual Under */
+#define RQCS_RO 0x0400 /* Residual Over */
#define RQCS_RESID (RQCS_RU|RQCS_RO)
-#define RQCS_SV 0x200 /* Sense Length Valid */
-#define RQCS_RV 0x100 /* FCP Response Length Valid */
+#define RQCS_SV 0x0200 /* Sense Length Valid */
+#define RQCS_RV 0x0100 /* FCP Response Length Valid */
/*
* CT Passthru IOCB
@@ -820,9 +828,21 @@ typedef struct {
#define ISP2400_FW_ATTR_SB2 0x0008
#define ISP2400_FW_ATTR_T10CRC 0x0010
#define ISP2400_FW_ATTR_VI 0x0020
+#define ISP2400_FW_ATTR_MQ 0x0040
+#define ISP2400_FW_ATTR_MSIX 0x0080
+#define ISP2400_FW_ATTR_FCOE 0x0800
#define ISP2400_FW_ATTR_VP0 0x1000
#define ISP2400_FW_ATTR_EXPFW 0x2000
+#define ISP2400_FW_ATTR_HOTFW 0x4000
#define ISP2400_FW_ATTR_EXTNDED 0x8000
+#define ISP2400_FW_ATTR_EXTVP 0x00010000
+#define ISP2400_FW_ATTR_VN2VN 0x00040000
+#define ISP2400_FW_ATTR_EXMOFF 0x00080000
+#define ISP2400_FW_ATTR_NPMOFF 0x00100000
+#define ISP2400_FW_ATTR_DIFCHOP 0x00400000
+#define ISP2400_FW_ATTR_SRIOV 0x02000000
+#define ISP2400_FW_ATTR_ASICTMP 0x0200000000
+#define ISP2400_FW_ATTR_ATIOMQ 0x0400000000
/*
* These are either manifestly true or are dependent on f/w attributes
@@ -841,6 +861,8 @@ typedef struct {
(IS_24XX(isp)? (isp->isp_fwattr & ISP2400_FW_ATTR_MULTIID) : 0)
#define ISP_GET_VPIDX(isp, tag) \
(ISP_CAP_MULTI_ID(isp) ? tag : 0)
+#define ISP_CAP_VP0(isp) \
+ (IS_24XX(isp)? (isp->isp_fwattr & ISP2400_FW_ATTR_VP0) : 0)
/*
* This is true manifestly or is dependent on a f/w attribute
@@ -914,7 +936,7 @@ typedef struct {
#define ICBOPT_BOTH_WWNS 0x4000
#define ICBOPT_FULL_LOGIN 0x2000
#define ICBOPT_STOP_ON_QFULL 0x1000 /* 2200/2100 only */
-#define ICBOPT_PREVLOOP 0x0800
+#define ICBOPT_PREV_ADDRESS 0x0800
#define ICBOPT_SRCHDOWN 0x0400
#define ICBOPT_NOLIP 0x0200
#define ICBOPT_PDBCHANGE_AE 0x0100
@@ -968,7 +990,7 @@ typedef struct {
/* 2400 F/W options */
#define ICB2400_OPT1_BOTH_WWNS 0x00004000
#define ICB2400_OPT1_FULL_LOGIN 0x00002000
-#define ICB2400_OPT1_PREVLOOP 0x00000800
+#define ICB2400_OPT1_PREV_ADDRESS 0x00000800
#define ICB2400_OPT1_SRCHDOWN 0x00000400
#define ICB2400_OPT1_NOLIP 0x00000200
#define ICB2400_OPT1_INI_DISABLE 0x00000020
@@ -977,6 +999,13 @@ typedef struct {
#define ICB2400_OPT1_FAIRNESS 0x00000002
#define ICB2400_OPT1_HARD_ADDRESS 0x00000001
+#define ICB2400_OPT2_ENA_ATIOMQ 0x08000000
+#define ICB2400_OPT2_ENA_IHA 0x04000000
+#define ICB2400_OPT2_QOS 0x02000000
+#define ICB2400_OPT2_IOCBS 0x01000000
+#define ICB2400_OPT2_ENA_IHR 0x00400000
+#define ICB2400_OPT2_ENA_VMS 0x00200000
+#define ICB2400_OPT2_ENA_TA 0x00100000
#define ICB2400_OPT2_TPRLIC 0x00004000
#define ICB2400_OPT2_FCTAPE 0x00001000
#define ICB2400_OPT2_FCSP 0x00000800
@@ -991,14 +1020,20 @@ typedef struct {
#define ICB2400_OPT2_ZIO 0x00000005
#define ICB2400_OPT2_ZIO1 0x00000006
-#define ICB2400_OPT3_75_OHM 0x00010000
+#define ICB2400_OPT3_NO_CTXDIS 0x40000000
+#define ICB2400_OPT3_ENA_ETH_RESP 0x08000000
+#define ICB2400_OPT3_ENA_ETH_ATIO 0x04000000
+#define ICB2400_OPT3_ENA_MFCF 0x00020000
+#define ICB2400_OPT3_SKIP_FOURGB 0x00010000
#define ICB2400_OPT3_RATE_MASK 0x0000E000
#define ICB2400_OPT3_RATE_ONEGB 0x00000000
#define ICB2400_OPT3_RATE_TWOGB 0x00002000
-#define ICB2400_OPT3_RATE_AUTO 0x00004000
+#define ICB2400_OPT3_RATE_AUTO 0x00004000
#define ICB2400_OPT3_RATE_FOURGB 0x00006000
#define ICB2400_OPT3_RATE_EIGHTGB 0x00008000
+#define ICB2400_OPT3_RATE_SIXTEENGB 0x0000A000
#define ICB2400_OPT3_ENA_OOF_XFRDY 0x00000200
+#define ICB2400_OPT3_NO_N2N_LOGI 0x00000100
#define ICB2400_OPT3_NO_LOCAL_PLOGI 0x00000080
#define ICB2400_OPT3_ENA_OOF 0x00000040
/* note that a response size flag of zero is reserved! */
@@ -1043,8 +1078,10 @@ typedef struct {
uint16_t icb_prqstqlen;
uint16_t icb_rqstaddr[4];
uint16_t icb_respaddr[4];
- uint16_t icb_priaddr[4];
- uint16_t icb_reserved1[4];
+ uint16_t icb_priaddr[4];
+ uint16_t icb_msixresp;
+ uint16_t icb_msixatio;
+ uint16_t icb_reserved1[2];
uint16_t icb_atio_in;
uint16_t icb_atioqlen;
uint16_t icb_atioqaddr[4];
@@ -1053,7 +1090,11 @@ typedef struct {
uint32_t icb_fwoptions1;
uint32_t icb_fwoptions2;
uint32_t icb_fwoptions3;
- uint16_t icb_reserved2[12];
+ uint16_t icb_qos;
+ uint16_t icb_reserved2[3];
+ uint16_t icb_enodemac[3];
+ uint16_t icb_disctime;
+ uint16_t icb_reserved3[4];
} isp_icb_2400_t;
#define RQRSP_ADDR0015 0
@@ -1106,12 +1147,13 @@ typedef struct {
uint16_t vp_port_portid_hi; /* not present when trailing icb */
} vp_port_info_t;
-#define ICB2400_VPOPT_TGT_DISABLE 0x00000020 /* disable target mode */
-#define ICB2400_VPOPT_INI_ENABLE 0x00000010 /* enable initiator mode */
-#define ICB2400_VPOPT_ENABLED 0x00000008
-#define ICB2400_VPOPT_NOPLAY 0x00000004
-#define ICB2400_VPOPT_PREVLOOP 0x00000002
-#define ICB2400_VPOPT_HARD_ADDRESS 0x00000001
+#define ICB2400_VPOPT_ENA_SNSLOGIN 0x00000040 /* Enable SNS Login and SCR for Virtual Ports */
+#define ICB2400_VPOPT_TGT_DISABLE 0x00000020 /* Target Mode Disabled */
+#define ICB2400_VPOPT_INI_ENABLE 0x00000010 /* Initiator Mode Enabled */
+#define ICB2400_VPOPT_ENABLED 0x00000008 /* VP Enabled */
+#define ICB2400_VPOPT_NOPLAY 0x00000004 /* ID Not Acquired */
+#define ICB2400_VPOPT_PREV_ADDRESS 0x00000002 /* Previously Assigned ID */
+#define ICB2400_VPOPT_HARD_ADDRESS 0x00000001 /* Hard Assigned ID */
#define ICB2400_VPOPT_WRITE_SIZE 20
@@ -1127,12 +1169,14 @@ typedef struct {
#define ICB2400_VPINFO_OFF 0x80 /* offset from start of ICB */
#define ICB2400_VPINFO_PORT_OFF(chan) \
- ICB2400_VPINFO_OFF + \
- sizeof (isp_icb_2400_vpinfo_t) + ((chan - 1) * ICB2400_VPOPT_WRITE_SIZE)
+ (ICB2400_VPINFO_OFF + \
+ sizeof (isp_icb_2400_vpinfo_t) + (chan * ICB2400_VPOPT_WRITE_SIZE))
#define ICB2400_VPGOPT_FCA 0x01 /* Assume Clean Address bit in FLOGI ACC set (works only in static configurations) */
#define ICB2400_VPGOPT_MID_DISABLE 0x02 /* when set, connection mode2 will work with NPIV-capable switched */
#define ICB2400_VPGOPT_VP0_DECOUPLE 0x04 /* Allow VP0 decoupling if firmware supports it */
+#define ICB2400_VPGOPT_SUSP_FDISK 0x10 /* Suspend FDISC for Enabled VPs */
+#define ICB2400_VPGOPT_GEN_RIDA 0x20 /* Generate RIDA if FLOGI Fails */
typedef struct {
isphdr_t vp_ctrl_hdr;
@@ -1141,14 +1185,16 @@ typedef struct {
uint16_t vp_ctrl_status;
uint16_t vp_ctrl_command;
uint16_t vp_ctrl_vp_count;
- uint16_t vp_ctrl_idmap[8];
- uint8_t vp_ctrl_reserved[32];
+ uint16_t vp_ctrl_idmap[16];
+ uint16_t vp_ctrl_reserved[7];
+ uint16_t vp_ctrl_fcf_index;
} vp_ctrl_info_t;
-#define VP_CTRL_CMD_ENABLE_VP 0
-#define VP_CTRL_CMD_DISABLE_VP 8
-#define VP_CTRL_CMD_DISABLE_VP_REINIT_LINK 9
-#define VP_CTRL_CMD_DISABLE_VP_LOGO 0xA
+#define VP_CTRL_CMD_ENABLE_VP 0x00
+#define VP_CTRL_CMD_DISABLE_VP 0x08
+#define VP_CTRL_CMD_DISABLE_VP_REINIT_LINK 0x09
+#define VP_CTRL_CMD_DISABLE_VP_LOGO 0x0A
+#define VP_CTRL_CMD_DISABLE_VP_LOGO_ALL 0x0B
/*
* We can use this structure for modifying either one or two VP ports after initialization
@@ -1179,8 +1225,10 @@ typedef struct {
#define VP_IDX_ERR 0x04
#define VP_STS_BSY 0x05
-#define VP_MODIFY_VP 0x00
+#define VP_MODIFY 0x00
#define VP_MODIFY_ENA 0x01
+#define VP_MODIFY_OPT 0x02
+#define VP_RESUME 0x03
/*
* Port Data Base Element
@@ -1300,6 +1348,40 @@ typedef struct {
} isp_pdb_t;
/*
+ * Port/Node Name List Element
+ */
+typedef struct {
+ uint8_t pnnle_name[8];
+ uint16_t pnnle_handle;
+ uint16_t pnnle_reserved;
+} isp_pnnle_t;
+
+#define PNNL_OPTIONS_NODE_NAMES (1<<0)
+#define PNNL_OPTIONS_PORT_DATA (1<<2)
+#define PNNL_OPTIONS_INITIATORS (1<<3)
+
+/*
+ * Port and N-Port Handle List Element
+ */
+typedef struct {
+ uint16_t pnhle_port_id_lo;
+ uint16_t pnhle_port_id_hi_handle;
+} isp_pnhle_21xx_t;
+
+typedef struct {
+ uint16_t pnhle_port_id_lo;
+ uint16_t pnhle_port_id_hi;
+ uint16_t pnhle_handle;
+} isp_pnhle_23xx_t;
+
+typedef struct {
+ uint16_t pnhle_port_id_lo;
+ uint16_t pnhle_port_id_hi;
+ uint16_t pnhle_handle;
+ uint16_t pnhle_reserved;
+} isp_pnhle_24xx_t;
+
+/*
* Port Database Changed Async Event information for 24XX cards
*/
#define PDB24XX_AE_OK 0x00
@@ -1369,7 +1451,7 @@ typedef struct {
#define PLOGX_IOCBERR_FAILED 0x04 /* further info in IOPARM 1 */
#define PLOGX_IOCBERR_NOFABRIC 0x05
#define PLOGX_IOCBERR_NOTREADY 0x07
-#define PLOGX_IOCBERR_NOLOGIN 0x08 /* further info in IOPARM 1 */
+#define PLOGX_IOCBERR_NOLOGIN 0x09 /* further info in IOPARM 1 */
#define PLOGX_IOCBERR_NOPCB 0x0a
#define PLOGX_IOCBERR_REJECT 0x18 /* further info in IOPARM 1 */
#define PLOGX_IOCBERR_EINVAL 0x19 /* further info in IOPARM 1 */
@@ -1776,7 +1858,7 @@ typedef struct {
uint16_t in_srr_rxid;
uint16_t in_status;
uint8_t in_status_subcode;
- uint8_t in_reserved2;
+ uint8_t in_fwhandle;
uint32_t in_rxid;
uint16_t in_srr_reloff_lo;
uint16_t in_srr_reloff_hi;
@@ -1809,6 +1891,8 @@ typedef struct {
#define IN24XX_FLAG_PUREX_IOCB 0x1
#define IN24XX_FLAG_GLOBAL_LOGOUT 0x2
#define IN24XX_FLAG_NPHDL_VALID 0x4
+#define IN24XX_FLAG_N2N_PRLI 0x8
+#define IN24XX_FLAG_PN_NN_VALID 0x10
#define IN24XX_LIP_RESET 0x0E
#define IN24XX_LINK_RESET 0x0F
@@ -1826,6 +1910,8 @@ typedef struct {
* the WWNN/WWPN if the ELS is PLOGI, PDISC or ADISC. The WWN is in
* Big Endian format.
*/
+#define IN24XX_PRLI_WWNN_OFF 0x18
+#define IN24XX_PRLI_WWPN_OFF 0x28
#define IN24XX_PLOGI_WWNN_OFF 0x20
#define IN24XX_PLOGI_WWPN_OFF 0x28
@@ -1929,7 +2015,7 @@ typedef struct {
uint16_t na_srr_rxid;
uint16_t na_status;
uint8_t na_status_subcode;
- uint8_t na_reserved2;
+ uint8_t na_fwhandle;
uint32_t na_rxid;
uint16_t na_srr_reloff_lo;
uint16_t na_srr_reloff_hi;
diff --git a/sys/dev/isp/ispreg.h b/sys/dev/isp/ispreg.h
index 1fe12fb..46d74eb 100644
--- a/sys/dev/isp/ispreg.h
+++ b/sys/dev/isp/ispreg.h
@@ -125,17 +125,20 @@
#define BIU_R2HST_INTR (1 << 15) /* RISC to Host Interrupt */
#define BIU_R2HST_PAUSED (1 << 8) /* RISC paused */
-#define BIU_R2HST_ISTAT_MASK 0x3f /* intr information && status */
+#define BIU_R2HST_ISTAT_MASK 0xff /* intr information && status */
#define ISPR2HST_ROM_MBX_OK 0x1 /* ROM mailbox cmd done ok */
#define ISPR2HST_ROM_MBX_FAIL 0x2 /* ROM mailbox cmd done fail */
#define ISPR2HST_MBX_OK 0x10 /* mailbox cmd done ok */
#define ISPR2HST_MBX_FAIL 0x11 /* mailbox cmd done fail */
#define ISPR2HST_ASYNC_EVENT 0x12 /* Async Event */
#define ISPR2HST_RSPQ_UPDATE 0x13 /* Response Queue Update */
-#define ISPR2HST_RQST_UPDATE 0x14 /* Resquest Queue Update */
+#define ISPR2HST_RSPQ_UPDATE2 0x14 /* Response Queue Update */
#define ISPR2HST_RIO_16 0x15 /* RIO 1-16 */
#define ISPR2HST_FPOST 0x16 /* Low 16 bits fast post */
#define ISPR2HST_FPOST_CTIO 0x17 /* Low 16 bits fast post ctio */
+#define ISPR2HST_ATIO_UPDATE 0x1C /* ATIO Queue Update */
+#define ISPR2HST_ATIO_RSPQ_UPDATE 0x1D /* ATIO & Request Update */
+#define ISPR2HST_ATIO_UPDATE2 0x1E /* ATIO Queue Update */
/* fifo command stuff- mostly for SPI */
#define DFIFO_COMMAND (BIU_BLOCK+0x60) /* RW : Command FIFO Port */
@@ -246,11 +249,6 @@
#define BIU2100_ISR_RXDMA_INT_PENDING 0x0002 /* Global interrupt pending */
#define BIU2100_ISR_TXDMA_INT_PENDING 0x0001 /* Global interrupt pending */
-#define INT_PENDING(isp, isr) \
- IS_FC(isp)? \
- (IS_24XX(isp)? (isr & BIU2400_ISR_RISC_INT) : (isr & BIU2100_ISR_RISC_INT)) :\
- (isr & BIU_ISR_RISC_INT)
-
#define INT_PENDING_MASK(isp) \
(IS_FC(isp)? (IS_24XX(isp)? BIU2400_ISR_RISC_INT : BIU2100_ISR_RISC_INT) : \
(BIU_ISR_RISC_INT))
@@ -398,19 +396,6 @@
/* BIU2400_ISR definitions */
#define BIU2400_ISR_RISC_INT 0x8
-#define BIU2400_R2HST_INTR BIU_R2HST_INTR
-#define BIU2400_R2HST_PAUSED BIU_R2HST_PAUSED
-#define BIU2400_R2HST_ISTAT_MASK 0x1f
-/* interrupt status meanings */
-#define ISP2400R2HST_ROM_MBX_OK 0x1 /* ROM mailbox cmd done ok */
-#define ISP2400R2HST_ROM_MBX_FAIL 0x2 /* ROM mailbox cmd done fail */
-#define ISP2400R2HST_MBX_OK 0x10 /* mailbox cmd done ok */
-#define ISP2400R2HST_MBX_FAIL 0x11 /* mailbox cmd done fail */
-#define ISP2400R2HST_ASYNC_EVENT 0x12 /* Async Event */
-#define ISP2400R2HST_RSPQ_UPDATE 0x13 /* Response Queue Update */
-#define ISP2400R2HST_ATIO_RSPQ_UPDATE 0x1C /* ATIO Response Queue Update */
-#define ISP2400R2HST_ATIO_RQST_UPDATE 0x1D /* ATIO Request Queue Update */
-
/* BIU2400_HCCR definitions */
#define HCCR_2400_CMD_NOP 0x00000000
@@ -468,11 +453,9 @@ typedef struct {
uint32_t obits; /* bits to add for register copyout */
uint32_t ibitm; /* bits to mask for register copyin */
uint32_t obitm; /* bits to mask for register copyout */
- uint32_t
- lineno : 16,
- : 12,
- logval : 4;
+ uint32_t logval; /* Bitmask of status codes to log */
uint32_t timeout;
+ uint32_t lineno;
const char *func;
} mbreg_t;
#define MBSINIT(mbxp, code, loglev, timo) \
diff --git a/sys/dev/isp/ispvar.h b/sys/dev/isp/ispvar.h
index 5fd1129..233c88c 100644
--- a/sys/dev/isp/ispvar.h
+++ b/sys/dev/isp/ispvar.h
@@ -58,7 +58,7 @@
*/
typedef struct ispsoftc ispsoftc_t;
struct ispmdvec {
- int (*dv_rd_isr) (ispsoftc_t *, uint32_t *, uint16_t *, uint16_t *);
+ int (*dv_rd_isr) (ispsoftc_t *, uint16_t *, uint16_t *, uint16_t *);
uint32_t (*dv_rd_reg) (ispsoftc_t *, int);
void (*dv_wr_reg) (ispsoftc_t *, int, uint32_t);
int (*dv_mbxdma) (ispsoftc_t *);
@@ -86,8 +86,8 @@ struct ispmdvec {
* Macros to access ISP registers through bus specific layers-
* mostly wrappers to vector through the mdvec structure.
*/
-#define ISP_READ_ISR(isp, isrp, semap, mbox0p) \
- (*(isp)->isp_mdvec->dv_rd_isr)(isp, isrp, semap, mbox0p)
+#define ISP_READ_ISR(isp, isrp, semap, info) \
+ (*(isp)->isp_mdvec->dv_rd_isr)(isp, isrp, semap, info)
#define ISP_READ(isp, reg) \
(*(isp)->isp_mdvec->dv_rd_reg)((isp), (reg))
@@ -244,16 +244,13 @@ typedef struct {
#define SNS_ID 0x80 /* SNS Server Special ID */
#define NPH_MAX 0xfe
-/* Use this handle for the base for multi-id firmware SNS logins */
-#define NPH_SNS_HDLBASE 0x400
-
/* These are for 2K Login Firmware cards */
#define NPH_RESERVED 0x7F0 /* begin of reserved N-port handles */
#define NPH_MGT_ID 0x7FA /* Management Server Special ID */
#define NPH_SNS_ID 0x7FC /* SNS Server Special ID */
#define NPH_FABRIC_CTLR 0x7FD /* Fabric Controller (0xFFFFFD) */
#define NPH_FL_ID 0x7FE /* F Port Special ID (0xFFFFFE) */
-#define NPH_IP_BCST 0x7ff /* IP Broadcast Special ID (0xFFFFFF) */
+#define NPH_IP_BCST 0x7FF /* IP Broadcast Special ID (0xFFFFFF) */
#define NPH_MAX_2K 0x800
/*
@@ -829,7 +826,7 @@ int isp_reinit(ispsoftc_t *, int);
* semaphore register and first mailbox register (if appropriate). This also
* means that most spurious/bogus interrupts not for us can be filtered first.
*/
-void isp_intr(ispsoftc_t *, uint32_t, uint16_t, uint16_t);
+void isp_intr(ispsoftc_t *, uint16_t, uint16_t, uint16_t);
/*
diff --git a/sys/dev/ispfw/asm_2400.h b/sys/dev/ispfw/asm_2400.h
index 8891f47..4527e30 100644
--- a/sys/dev/ispfw/asm_2400.h
+++ b/sys/dev/ispfw/asm_2400.h
@@ -1,6 +1,6 @@
/* $FreeBSD$ */
/*-
- * Copyright (C) 2005-2010 by Qlogic, Inc.
+ * Copyright (C) 2005-2014 by Qlogic, Inc.
* All rights reserved.
*
* Redistribution and use in source and binary forms are permitted provided
@@ -25,23 +25,23 @@
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
/*
- * Firmware Version 5.05.00 (15:31 Dec 14, 2010)
+ * Firmware Version 7.03.00 (Apr 14, 2014)
*/
#ifdef ISP_2400
static const uint32_t isp_2400_risc_code[] = {
- 0x0401f195, 0x00110000, 0x00100000, 0x0000afb1,
- 0x00000005, 0x00000005, 0x00000000, 0x00008482,
+ 0x0401f195, 0x00112000, 0x00100000, 0x0000c798,
+ 0x00000007, 0x00000003, 0x00000000, 0x00009496,
0x00000003, 0x00000000, 0x20434f50, 0x59524947,
0x48542032, 0x30303720, 0x514c4f47, 0x49432043,
0x4f52504f, 0x52415449, 0x4f4e2020, 0x20495350,
0x32347878, 0x20466972, 0x6d776172, 0x65202020,
- 0x56657273, 0x696f6e20, 0x2020352e, 0x30352e30,
+ 0x56657273, 0x696f6e20, 0x2020372e, 0x30332e30,
0x30202024, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x42001800, 0x0010014c, 0x42002000, 0x0010bdc7,
+ 0x42001800, 0x0010014c, 0x42002000, 0x0010e36f,
0x500c0800, 0x800c1800, 0x500c1000, 0x800c1800,
0x54042000, 0x80102000, 0x80040800, 0x80081040,
0x040207fc, 0x500c0800, 0x800409c0, 0x040207f6,
@@ -124,23 +124,23 @@ static const uint32_t isp_2400_risc_code[] = {
0x00006150, 0x00000010, 0x00006170, 0x00000010,
0x00006190, 0x00000010, 0x000061b0, 0x00000010,
0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x00000000, 0x00100000, 0x00100000, 0x0000afb1,
- 0xffffffff, 0x00110004, 0x00020000, 0x00000b53,
- 0xffffffff, 0x00110b57, 0x0010d700, 0x00001ac0,
- 0xffffffff, 0x00112617, 0x0000c000, 0x000007e8,
- 0x00ffffff, 0x00112dff, 0x00008000, 0x000005e5,
+ 0x00000000, 0x00100000, 0x00100000, 0x0000c798,
+ 0xffffffff, 0x00112004, 0x00020000, 0x00000c50,
+ 0xffffffff, 0x00112c54, 0x0010fd00, 0x00001b58,
+ 0xffffffff, 0x001147ac, 0x0000c000, 0x000008b1,
+ 0x00ffffff, 0x0011505d, 0x00008000, 0x00000696,
0x00ffffff, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x4203f000, 0x00021fff, 0x40000000,
0x4203e000, 0x90000100, 0x40000000, 0x42000800,
- 0x00020b54, 0x4202f000, 0x00000000, 0x42000000,
+ 0x00020c51, 0x4202f000, 0x00000000, 0x42000000,
0x00007023, 0x50000000, 0x8c000500, 0x04020003,
0x42000800, 0x00020000, 0x45780800, 0x80040800,
0x82040580, 0x00022000, 0x040207fc, 0x4178a000,
- 0x4200a800, 0x0010afb1, 0x42000800, 0x0010d700,
- 0x40540000, 0x8004b480, 0x0201f800, 0x0010aeeb,
- 0x0401fac9, 0x0401fa00, 0x4803c856, 0x42000000,
+ 0x4200a800, 0x0010c798, 0x42000800, 0x0010fd00,
+ 0x40540000, 0x8004b480, 0x0201f800, 0x0010c5e6,
+ 0x0401fade, 0x0401fa0a, 0x4803c856, 0x42000000,
0x00001000, 0x50000000, 0x82000480, 0x24320002,
- 0x0402000d, 0x0201f800, 0x0010af26, 0x04000008,
+ 0x0402000d, 0x0201f800, 0x0010c62d, 0x04000008,
0x42000800, 0x00007a17, 0x50040000, 0x8c00050e,
0x04020003, 0x8400054e, 0x44000800, 0x4a030000,
0x00000000, 0x4a03c020, 0x00000004, 0x4203e000,
@@ -148,14743 +148,177 @@ static const uint32_t isp_2400_risc_code[] = {
0x00000003, 0x59e00023, 0x8c000500, 0x04020027,
0x42002800, 0x0010017d, 0x58140800, 0x4817c857,
0x4807c857, 0x800409c0, 0x0400000b, 0x58142002,
- 0x4813c857, 0x58141003, 0x4c140000, 0x0401fa95,
+ 0x4813c857, 0x58141003, 0x4c140000, 0x0401faaa,
0x5c002800, 0x0402002a, 0x82142c00, 0x00000004,
0x0401f7f2, 0x42002800, 0x0010017d, 0x5814a000,
0x4817c857, 0x4853c857, 0x8050a1c0, 0x0400000f,
0x4c140000, 0x5814a801, 0x4857c857, 0x40500000,
0x80540480, 0x04000005, 0x5814b002, 0x485bc857,
- 0x0201f800, 0x0010aee2, 0x5c002800, 0x82142c00,
+ 0x0201f800, 0x0010c5dd, 0x5c002800, 0x82142c00,
0x00000004, 0x0401f7ee, 0x42002800, 0x0010017d,
0x58140801, 0x4817c857, 0x4807c857, 0x800409c0,
0x04000018, 0x58142002, 0x4813c857, 0x58141003,
- 0x4c140000, 0x0401fa6f, 0x04020005, 0x5c002800,
+ 0x4c140000, 0x0401fa84, 0x04020005, 0x5c002800,
0x82142c00, 0x00000004, 0x0401f7f2, 0x4803c856,
0x4a03c020, 0x00004010, 0x4a03c011, 0x40100011,
0x04006000, 0x4203e000, 0x40000000, 0x4a03c017,
0x00000000, 0x4203e000, 0x30000001, 0x0401f000,
- 0x4803c856, 0x0201f800, 0x0010d704, 0x0401faf6,
- 0x4a03c014, 0x001c001c, 0x42002000, 0x0010f1c0,
- 0x0201f800, 0x0010aef3, 0x42000000, 0x00001000,
- 0x50000000, 0x82000480, 0x24220001, 0x04000906,
+ 0x4803c856, 0x0201f800, 0x0010fd04, 0x0401fb0b,
+ 0x4a03c014, 0x001c001c, 0x42002000, 0x00111858,
+ 0x0201f800, 0x0010c5ee, 0x42000000, 0x00001000,
+ 0x50000000, 0x82000480, 0x24220001, 0x04000908,
0x42000000, 0x00001000, 0x50000000, 0x82000480,
- 0x24320001, 0x04000900, 0x59c40000, 0x82000500,
+ 0x24320001, 0x04000902, 0x59c40000, 0x82000500,
0xffff0000, 0x80000120, 0x82000580, 0x00002422,
- 0x04020005, 0x59a8006d, 0x84000540, 0x4803506d,
+ 0x04020005, 0x59a8007e, 0x84000540, 0x4803507e,
0x0401f00a, 0x59e00003, 0x82000500, 0x00030000,
- 0x82000580, 0x00010000, 0x04020004, 0x59a8006d,
- 0x84000542, 0x4803506d, 0x4c140000, 0x0201f800,
- 0x0010a6a0, 0x5c002800, 0x42000800, 0x00001100,
+ 0x82000580, 0x00010000, 0x04020004, 0x59a8007e,
+ 0x84000542, 0x4803507e, 0x4c140000, 0x0201f800,
+ 0x0010bd98, 0x5c002800, 0x42000800, 0x00001100,
0x42001800, 0x00000100, 0x82141480, 0x0017ffff,
0x0402100d, 0x42000800, 0x00000900, 0x82141480,
- 0x0013ffff, 0x04021008, 0x42000800, 0x00000480,
- 0x42001800, 0x00000080, 0x82141480, 0x0011ffff,
- 0x040018d5, 0x4807500d, 0x480f5251, 0x42001000,
- 0x00000024, 0x0201f800, 0x00105fef, 0x82040c00,
- 0x0010f694, 0x4807500b, 0x4a03c810, 0x00100000,
- 0x4a03c811, 0x0010afb1, 0x4a03c812, 0x0010d700,
- 0x4a03c813, 0x0010f1bf, 0x4a03c829, 0x00000004,
+ 0x0013ffff, 0x04021008, 0x42000800, 0x00000240,
+ 0x42001800, 0x00000040, 0x82141480, 0x0011ffff,
+ 0x040018d7, 0x48075013, 0x480f5257, 0x42001000,
+ 0x0000002c, 0x0201f800, 0x00106fe1, 0x82040c00,
+ 0x00111d44, 0x4807500b, 0x4a03c810, 0x00100000,
+ 0x4a03c811, 0x0010c798, 0x4a03c812, 0x0010fd00,
+ 0x4a03c813, 0x00111857, 0x4a03c829, 0x00000004,
0x59e40001, 0x82000540, 0x0003403f, 0x4803c801,
- 0x42001000, 0x0000001c, 0x0401f9f0, 0x4202c000,
- 0x0010f694, 0x59aab00b, 0x59aaa00b, 0x59aaa80b,
- 0x59aac80d, 0x49675050, 0x59a8000b, 0x4803500c,
- 0x0201f800, 0x00107133, 0x0401fac4, 0x0401fb14,
- 0x0201f800, 0x001017f9, 0x0201f800, 0x001010ea,
- 0x0401fbdb, 0x0201f800, 0x00100ca5, 0x0201f800,
- 0x0010602f, 0x0401f85c, 0x0201f800, 0x00101c0f,
- 0x0201f800, 0x00104bce, 0x0201f800, 0x001044e5,
- 0x0201f800, 0x00105acd, 0x0201f800, 0x001057ce,
- 0x0201f800, 0x0010118f, 0x0201f800, 0x00100ff2,
- 0x4203e000, 0xf0000001, 0x0201f800, 0x0010af45,
- 0x4a03c018, 0x00000000, 0x4203e000, 0x20000511,
- 0x4203e000, 0x50010000, 0x4a03c020, 0x00000000,
- 0x04027010, 0x59e00020, 0x82000580, 0x00000002,
- 0x0402000c, 0x4a03c020, 0x00004000, 0x4a03c011,
- 0x40000010, 0x04006000, 0x4203e000, 0x40000000,
- 0x4a03c017, 0x00000000, 0x4203e000, 0x30000001,
- 0x4202d800, 0x00000000, 0x4203e000, 0xb0600000,
- 0x59a80071, 0x4003f800, 0x0201f000, 0x00020004,
- 0x4df00000, 0x4203e000, 0x50000000, 0x416c0000,
- 0x82000c80, 0x00000008, 0x0402186b, 0x0c01f804,
- 0x5c03e000, 0x0201f000, 0x00020008, 0x001002d0,
- 0x0010f007, 0x0010ef4c, 0x001002cf, 0x0010ef18,
- 0x001002cf, 0x001002cf, 0x001002e2, 0x0401f85e,
- 0x42000800, 0x0010b8fa, 0x5804001e, 0x8c000500,
- 0x0400000d, 0x84000500, 0x4800081e, 0x4202d800,
- 0x00000004, 0x0401f97b, 0x49f3c857, 0x5c000800,
- 0x5c000000, 0x82000540, 0x00003e00, 0x4c000000,
- 0x4c040000, 0x1c01f000, 0x4a038805, 0x000000f0,
- 0x1c01f000, 0x4a035048, 0x00000005, 0x4a035049,
- 0x00000005, 0x4a03504a, 0x00000000, 0x4a03504b,
- 0x00008482, 0x0201f800, 0x00104b98, 0x4a03541b,
- 0x0000ffff, 0x4a03500f, 0x00ffffff, 0x0201f800,
- 0x00108c7d, 0x4a03501f, 0x20200000, 0x4a035020,
- 0x88000200, 0x4a035021, 0x00ff001f, 0x4a035022,
- 0x000007d0, 0x4a035023, 0x80000000, 0x4a035024,
- 0x00000200, 0x4a035025, 0x00ff0000, 0x4a035026,
- 0x00010000, 0x4a03502d, 0x514c4f47, 0x4a03502e,
- 0x49432020, 0x1c01f000, 0x4d440000, 0x417a8800,
- 0x4c5c0000, 0x4178b800, 0x0201f800, 0x00020319,
- 0x04020005, 0x0201f800, 0x00104181, 0x04020002,
- 0x805cb800, 0x81468800, 0x83440580, 0x000007f0,
- 0x040207f6, 0x405c0800, 0x5c00b800, 0x5c028800,
- 0x1c01f000, 0x4803c857, 0x5c000000, 0x4c000000,
- 0x4803c857, 0x0401f80c, 0x485fc857, 0x4203e000,
- 0x50000000, 0x5c000000, 0x4d780000, 0x4200b800,
- 0x00008002, 0x0401f009, 0x486bc857, 0x486fc857,
- 0x4873c857, 0x485fc857, 0x4203e000, 0x50000000,
- 0x4200b800, 0x00008002, 0x04006000, 0x4c000000,
- 0x4c040000, 0x59bc00ea, 0x4803c857, 0x82000500,
- 0x00000007, 0x82000580, 0x00000001, 0x04020005,
- 0x42000800, 0x00000000, 0x0201f800, 0x001061cb,
- 0x59b800ea, 0x4803c857, 0x4a0370e8, 0x00000004,
- 0x5c000800, 0x4807c025, 0x80040920, 0x4807c026,
- 0x5c000000, 0x4803c023, 0x80000120, 0x4803c024,
- 0x5c000000, 0x4803c857, 0x4803c021, 0x80000120,
- 0x4803c022, 0x41f80000, 0x4803c029, 0x80000120,
- 0x4803c02a, 0x42000000, 0x00001000, 0x50000000,
- 0x82000480, 0x24320001, 0x4803c857, 0x0400104b,
- 0x0201f800, 0x0010af26, 0x04000046, 0x42000800,
- 0x0010c626, 0x46000800, 0xfaceface, 0x80040800,
- 0x4c080000, 0x4c0c0000, 0x42001000, 0x00007a00,
- 0x58080013, 0x44000800, 0x80040800, 0x58080019,
- 0x44000800, 0x80040800, 0x5808001a, 0x44000800,
- 0x80040800, 0x5808001b, 0x44000800, 0x80040800,
- 0x5808001c, 0x44000800, 0x80040800, 0x5808001f,
- 0x44000800, 0x80040800, 0x42001000, 0x00007a40,
- 0x42001800, 0x0000000b, 0x50080000, 0x44000800,
- 0x80081000, 0x80040800, 0x800c1840, 0x040207fb,
- 0x42001800, 0x00000003, 0x42001000, 0x00007b00,
- 0x480c1003, 0x58080005, 0x44000800, 0x80040800,
- 0x800c1840, 0x040217fb, 0x42001000, 0x00007c00,
- 0x58080002, 0x44000800, 0x80040800, 0x58080003,
- 0x44000800, 0x80040800, 0x58080020, 0x44000800,
- 0x80040800, 0x58080021, 0x44000800, 0x80040800,
- 0x58080022, 0x44000800, 0x80040800, 0x58080023,
- 0x44000800, 0x80040800, 0x5c001800, 0x5c001000,
- 0x4a030000, 0x00000000, 0x485fc020, 0x905cb9c0,
- 0x825cbd40, 0x00000012, 0x485fc011, 0x4203e000,
- 0x40000000, 0x4202d800, 0x00000005, 0x4a03c017,
- 0x00000000, 0x4203e000, 0x30000001, 0x0401f847,
- 0x0401f7ff, 0x42000000, 0x00000004, 0x0401f80c,
- 0x4a03c855, 0x0001eb5a, 0x59e40001, 0x82000540,
- 0x00000700, 0x4803c801, 0x42000000, 0x0010bdb1,
- 0x49780003, 0x49780004, 0x1c01f000, 0x42000800,
- 0x0010bdb3, 0x44000800, 0x59e40801, 0x82041500,
- 0xfff3c0ff, 0x480bc801, 0x8c040d24, 0x0400000c,
- 0x4c000000, 0x59e41052, 0x59e40054, 0x800000d4,
- 0x82000400, 0x0010c642, 0x80081480, 0x480bc853,
- 0x4a03c800, 0x00000040, 0x5c000000, 0x4a03c850,
- 0x0010c642, 0x800000d4, 0x82002400, 0x0010c641,
- 0x4813c851, 0x4a03c853, 0x00000400, 0x42000000,
- 0x0010c642, 0x82001400, 0x00001000, 0x45780000,
- 0x80000000, 0x80081d80, 0x040207fd, 0x4807c801,
- 0x1c01f000, 0x42002000, 0x0010bdb1, 0x59e41801,
- 0x58100c01, 0x82040500, 0x00003800, 0x820c1d00,
- 0xffffc7ff, 0x800c1d40, 0x480fc801, 0x1c01f000,
- 0x5c036000, 0x4db00000, 0x49b3c857, 0x4803c857,
- 0x1c01f000, 0x1c01f000, 0x59a80059, 0x8c000530,
- 0x040207fe, 0x4c080000, 0x42001000, 0x00000004,
- 0x0401f862, 0x5c001000, 0x4201d000, 0x00028b0a,
- 0x0201f800, 0x001059d2, 0x4c080000, 0x42001000,
- 0x00000008, 0x0401f859, 0x5c001000, 0x4201d000,
- 0x00028b0a, 0x0201f800, 0x001059d2, 0x4c080000,
- 0x42001000, 0x00000010, 0x0401f850, 0x5c001000,
- 0x4201d000, 0x00028b0a, 0x0201f800, 0x001059d2,
- 0x0401f7e2, 0x8c00050c, 0x59a80859, 0x04020003,
- 0x84040d30, 0x0401f006, 0x84040d70, 0x48075059,
- 0x42001000, 0x00000000, 0x0401f040, 0x48075059,
- 0x836c0500, 0x00000007, 0x0c01f001, 0x00100461,
- 0x00100447, 0x00100447, 0x0010042f, 0x00100454,
- 0x00100447, 0x00100447, 0x00100454, 0x59a8006d,
- 0x8c000502, 0x04020013, 0x59c40801, 0x82040d00,
- 0x00018000, 0x82040580, 0x00010000, 0x0400000a,
- 0x82040580, 0x00008000, 0x04000004, 0x42001000,
- 0x42004000, 0x0401f006, 0x42001000, 0x22002000,
- 0x0401f003, 0x42001000, 0x12001000, 0x0401f025,
- 0x42001000, 0x00001004, 0x0401f022, 0x59a8006d,
- 0x8c000502, 0x04020008, 0x59a80059, 0x8c000534,
- 0x04020004, 0x42001000, 0x74057005, 0x0401f819,
- 0x1c01f000, 0x42001000, 0x00002008, 0x0401f7fc,
- 0x59a80059, 0x8c000534, 0x0402000a, 0x59a8006d,
- 0x8c000502, 0x04000004, 0x42001000, 0x24052005,
- 0x0401f00c, 0x42001000, 0x74057005, 0x0401f009,
- 0x1c01f000, 0x1c01f000, 0x82081500, 0x0000001c,
- 0x82081540, 0x001c0000, 0x480bc013, 0x1c01f000,
- 0x59a80059, 0x8c000530, 0x04000002, 0x84081570,
- 0x480b5059, 0x8c000530, 0x04020005, 0x82081500,
- 0x00007000, 0x80081114, 0x0401fff0, 0x1c01f000,
- 0x41780000, 0x50041800, 0x800c0400, 0x80040800,
- 0x80102040, 0x040207fc, 0x80080500, 0x80000540,
- 0x1c01f000, 0x4202f000, 0x00000000, 0x41780000,
- 0x41780800, 0x41781000, 0x41781800, 0x41782000,
- 0x41782800, 0x41783000, 0x41783800, 0x41784000,
- 0x41784800, 0x41785000, 0x41785800, 0x41786000,
- 0x41786800, 0x41787000, 0x41787800, 0x41788000,
- 0x41788800, 0x41789000, 0x41789800, 0x4178a000,
- 0x4178a800, 0x4178b000, 0x4178b800, 0x4178c000,
- 0x4178c800, 0x4178d000, 0x4178d800, 0x4178e000,
- 0x4178e800, 0x4178f000, 0x4178f800, 0x41790000,
- 0x41790800, 0x41791000, 0x41791800, 0x41792000,
- 0x41792800, 0x41793000, 0x41793800, 0x41794000,
- 0x41794800, 0x41795000, 0x41795800, 0x41796000,
- 0x41796800, 0x41797000, 0x41797800, 0x41798000,
- 0x41798800, 0x42019000, 0x0010b989, 0x42019800,
- 0x0010b960, 0x4179a000, 0x4179a800, 0x4179b000,
- 0x4179b800, 0x4179c800, 0x4179c000, 0x4179d000,
- 0x4179d800, 0x4179e000, 0x4179e800, 0x4179f000,
- 0x4179f800, 0x417a0000, 0x417a0800, 0x417a1000,
- 0x417a1800, 0x417a2000, 0x42022800, 0x00006100,
- 0x417a3000, 0x417a3800, 0x417a4000, 0x417a4800,
- 0x417a5000, 0x417a5800, 0x417a6000, 0x417a6800,
- 0x417a7000, 0x417a7800, 0x417a8000, 0x417a8800,
- 0x417a9000, 0x417a9800, 0x417ae800, 0x417af800,
- 0x42030000, 0x00007c00, 0x42031000, 0x0010bc5a,
- 0x42031800, 0x0000bf1d, 0x42032000, 0x0000bf32,
- 0x42032800, 0x0010bc22, 0x42033000, 0x00020b5d,
- 0x42034000, 0x0010b8fa, 0x42033800, 0x0010b919,
- 0x42034800, 0x0010b998, 0x42035000, 0x0010b880,
- 0x42035800, 0x0010b080, 0x42030800, 0x0010b95b,
- 0x417b6000, 0x42036800, 0x00006f00, 0x4203c800,
- 0x00003000, 0x42037000, 0x0000ff00, 0x42037800,
- 0x0000bf00, 0x42038000, 0x00007700, 0x42038800,
- 0x00004000, 0x42039000, 0x00006000, 0x42039800,
- 0x0010c35e, 0x4203a000, 0x00007600, 0x4203a800,
- 0x00007400, 0x4203b000, 0x00007200, 0x4203b800,
- 0x00007100, 0x4203c000, 0x00007000, 0x4203d000,
- 0x00000000, 0x4203e800, 0x0002018e, 0x417bd800,
- 0x1c01f000, 0x42000800, 0x00100000, 0x50040000,
- 0x4c000000, 0x42000000, 0x0000aaaa, 0x44000800,
- 0x42001800, 0x00005555, 0x42002000, 0x00010000,
- 0x82102400, 0x00010000, 0x40100000, 0x80042c00,
- 0x440c2800, 0x42003000, 0x0000000a, 0x80183040,
- 0x040207ff, 0x50140000, 0x800c0580, 0x04020004,
- 0x50040000, 0x800c0580, 0x040207f2, 0x5c000000,
- 0x44000800, 0x80142840, 0x4817c861, 0x4817500a,
- 0x1c01f000, 0x40681800, 0x59a80819, 0x800409c0,
- 0x04020008, 0x49781c0c, 0x4a001a0c, 0x00000002,
- 0x4a001804, 0x00000007, 0x59a8000f, 0x48001805,
- 0x0401fdce, 0x800409c0, 0x04020002, 0x80040800,
- 0x48041806, 0x1c01f000, 0x59a8080c, 0x4006d000,
- 0x4202b800, 0x00000001, 0x59a8180a, 0x480fc857,
- 0x82041400, 0x00000015, 0x82082400, 0x00000015,
- 0x40100000, 0x800c0480, 0x04001006, 0x44080800,
- 0x40080800, 0x40101000, 0x815eb800, 0x0401f7f7,
- 0x45780800, 0x495f501a, 0x1c01f000, 0x0401f803,
- 0x412d8800, 0x1c01f000, 0x835c0480, 0x00000020,
- 0x0400100a, 0x496bc857, 0x815eb840, 0x416a5800,
- 0x592ed000, 0x497a5800, 0x497a5801, 0x497a5805,
- 0x812e59c0, 0x1c01f000, 0x42000000, 0x0010bd0f,
- 0x0201f800, 0x0010ae10, 0x417a5800, 0x0401f7f9,
- 0x0401f803, 0x412d8800, 0x1c01f000, 0x815eb840,
- 0x04001009, 0x416a5800, 0x492fc857, 0x592ed000,
- 0x497a5800, 0x497a5801, 0x497a5805, 0x812e59c0,
- 0x1c01f000, 0x42000000, 0x0010bd0f, 0x0201f800,
- 0x0010ae10, 0x417ab800, 0x417a5800, 0x0401f7f8,
- 0x492fc857, 0x496a5800, 0x412ed000, 0x815eb800,
- 0x59c80000, 0x82000540, 0x00001200, 0x48039000,
- 0x1c01f000, 0x492fc857, 0x812e59c0, 0x04000007,
- 0x592c0001, 0x497a5801, 0x4c000000, 0x0401fff1,
- 0x5c025800, 0x0401f7f9, 0x1c01f000, 0x4807c856,
- 0x42007000, 0x00020b54, 0x4a007000, 0x00000000,
- 0x59e00003, 0x82000540, 0x00008080, 0x4803c003,
- 0x4a03b805, 0x90000001, 0x59dc0006, 0x4a03b805,
- 0x70000000, 0x59dc0006, 0x4a03b805, 0x30000000,
- 0x59dc0006, 0x4a03b805, 0x80000000, 0x4200b000,
- 0x00000020, 0x497bb807, 0x8058b040, 0x040207fe,
- 0x4a03b805, 0x30000000, 0x59dc0006, 0x4a03b805,
- 0x60000001, 0x59dc0006, 0x4a03b805, 0x70000001,
- 0x59dc0006, 0x4a03b805, 0x30000002, 0x4200b000,
- 0x00000020, 0x497bb807, 0x8058b040, 0x040207fe,
- 0x4a03b805, 0x30000000, 0x59dc0006, 0x4a03b805,
- 0x60000001, 0x4803c856, 0x0401ff98, 0x04000d6a,
- 0x42001000, 0x0010bc55, 0x452c1000, 0x4a025801,
- 0x00000001, 0x4a025802, 0x00000100, 0x4a025808,
- 0x00106826, 0x497a5809, 0x497a580a, 0x497a580b,
- 0x0401ff8a, 0x04000d5c, 0x42001000, 0x0010bc56,
- 0x452c1000, 0x4a025801, 0x00000000, 0x4a025802,
- 0x00000100, 0x4a025808, 0x00100f2f, 0x497a5803,
- 0x497a5806, 0x497a5807, 0x497a5809, 0x59a8006d,
- 0x8c000500, 0x04000006, 0x4a03b805, 0xe0000001,
- 0x59dc0006, 0x8c000522, 0x040007fc, 0x1c01f000,
- 0x40681000, 0x0201f800, 0x00020016, 0x1c01f000,
- 0x42001000, 0x00020026, 0x0201f800, 0x0010587d,
- 0x0201f800, 0x00108d64, 0x0201f800, 0x0010a32a,
- 0x04000014, 0x4a03b805, 0x30000002, 0x59dc0006,
- 0x4807b800, 0x480bb801, 0x42007000, 0x00020b54,
- 0x4a007002, 0x00000040, 0x480c7008, 0x58380007,
- 0x82000400, 0x00000005, 0x48007003, 0x4a007000,
- 0x00000003, 0x4803b803, 0x0201f000, 0x00020050,
- 0x42000000, 0x0010bc77, 0x0201f800, 0x0010ae10,
- 0x0201f800, 0x00108d7c, 0x42000800, 0x00000001,
- 0x42001000, 0x00020026, 0x0201f800, 0x00105856,
- 0x42007000, 0x00020b54, 0x0201f000, 0x00020030,
- 0x58380802, 0x42001000, 0x0000ff00, 0x82040480,
- 0x0000ff00, 0x04021003, 0x40041000, 0x80000580,
- 0x48007002, 0x480bb802, 0x59dc0006, 0x4a03b805,
- 0x10000000, 0x1c01f000, 0x4a03b805, 0x30000001,
- 0x58386001, 0x58301008, 0x4807c857, 0x4803c857,
- 0x4833c857, 0x4a006002, 0x00000200, 0x4a007000,
- 0x00000000, 0x800811c0, 0x02000000, 0x0002002c,
- 0x0201f000, 0x00020092, 0x59dc0006, 0x8c000520,
- 0x0400000a, 0x02004800, 0x0002090c, 0x59dc0006,
- 0x82000500, 0x00006000, 0x04000004, 0x82000580,
- 0x00006000, 0x040207f8, 0x1c01f000, 0x41781800,
- 0x58382005, 0x40300000, 0x80100580, 0x04000007,
- 0x40101800, 0x58102000, 0x801021c0, 0x040207fa,
- 0x4803c856, 0x0401f011, 0x4833c857, 0x58302000,
- 0x49786000, 0x800c19c0, 0x04020008, 0x801021c0,
- 0x04000003, 0x48107005, 0x0401f008, 0x49787005,
- 0x49787004, 0x0401f005, 0x48101800, 0x801021c0,
- 0x04020002, 0x480c7004, 0x1c01f000, 0x4803c856,
- 0x4dc00000, 0x42007000, 0x0010bc58, 0x4a007400,
- 0x00000000, 0x49787001, 0x42038000, 0x00007720,
- 0x4a038006, 0x60000001, 0x4a038009, 0xf4f60000,
- 0x42038000, 0x00007700, 0x4a038006, 0x60000001,
- 0x4a038009, 0xf4f60000, 0x4a03c822, 0x00000010,
- 0x4a0370e8, 0x00000000, 0x0401f809, 0x4a0370e9,
- 0x00003a0f, 0x4a0370e8, 0x00000000, 0x4a0370e8,
- 0x00000001, 0x5c038000, 0x1c01f000, 0x4c5c0000,
- 0x4178b800, 0x0401f80a, 0x5c00b800, 0x1c01f000,
- 0x4803c856, 0x4c5c0000, 0x825cbd40, 0x00000001,
- 0x0401f803, 0x5c00b800, 0x1c01f000, 0x4803c856,
- 0x4dc00000, 0x4c500000, 0x4c580000, 0x4c540000,
- 0x4a0370e8, 0x00000000, 0x805cb9c0, 0x0400000b,
- 0x4a038807, 0x00000004, 0x4a0370e5, 0x00080000,
- 0x59b800ea, 0x8c000510, 0x04000004, 0x59b800e0,
- 0x0401f879, 0x0401f7fb, 0x42038000, 0x00007720,
- 0x0201f800, 0x00100c07, 0x59c00007, 0x4a038006,
- 0x20000000, 0x59c00007, 0x4a038006, 0x8000000a,
- 0x59c00007, 0x4a038006, 0x8000000b, 0x59c00007,
- 0x4a038006, 0x40000001, 0x83c00580, 0x00007700,
- 0x04000004, 0x42038000, 0x00007700, 0x0401f7ed,
- 0x42038000, 0x00007720, 0x42000800, 0x00000800,
- 0x59c00007, 0x8c00051e, 0x04000006, 0x4a038006,
- 0x90000001, 0x80040840, 0x040207fa, 0x0401fc6e,
- 0x83c00580, 0x00007700, 0x04000004, 0x42038000,
- 0x00007700, 0x0401f7f1, 0x4178a000, 0x805cb9c0,
- 0x0402001d, 0x4200b000, 0x00000020, 0x83b8ac00,
- 0x00000020, 0x0201f800, 0x0010aeeb, 0x4a0370fb,
- 0x00000001, 0x4a037020, 0x00100e3a, 0x59a8002c,
- 0x82000500, 0x0000ffff, 0x48037021, 0x4a037035,
- 0x0010c2a4, 0x4a037030, 0x0010b88f, 0x4a037031,
- 0x0010b080, 0x4a037032, 0x0010b96b, 0x4a037036,
- 0x0010b976, 0x59840002, 0x48037034, 0x4a037038,
- 0x00100e31, 0x4a0370fb, 0x00000001, 0x4200b000,
- 0x00000020, 0x83b8ac00, 0x00000000, 0x0201f800,
- 0x0010aeeb, 0x4200b000, 0x00000040, 0x83b8ac00,
- 0x00000040, 0x0201f800, 0x0010aeeb, 0x805cb9c0,
- 0x04020004, 0x4a0370e4, 0xaaaaaaaa, 0x0401f003,
- 0x4a0370e4, 0xa2aa2a82, 0x4a0370e5, 0xaaaaaaaa,
- 0x4a0370e6, 0xaaaaaaaa, 0x4a0370fb, 0x00000000,
- 0x4a0370e6, 0xaaaaaaaa, 0x42038000, 0x00007720,
- 0x4a038006, 0x90000000, 0x59c00007, 0x8c00051e,
- 0x04020c25, 0x42038000, 0x00007700, 0x4a038006,
- 0x90000000, 0x59c00007, 0x8c00051e, 0x04020c1e,
- 0x5c00a800, 0x5c00b000, 0x5c00a000, 0x5c038000,
- 0x1c01f000, 0x4d300000, 0x4d380000, 0x40026000,
- 0x82000500, 0x7f000000, 0x82000580, 0x60000000,
- 0x04020012, 0x83326500, 0x00ffffff, 0x0201f800,
- 0x00109291, 0x0402000d, 0x59300203, 0x82000580,
- 0x00000004, 0x04020009, 0x59300c07, 0x82040580,
- 0x00000009, 0x04020005, 0x42027000, 0x00000047,
- 0x0201f800, 0x00020a34, 0x5c027000, 0x5c026000,
- 0x1c01f000, 0x4d300000, 0x4d2c0000, 0x4d340000,
- 0x4d400000, 0x4cfc0000, 0x4d380000, 0x4d3c0000,
- 0x4d440000, 0x4d4c0000, 0x4d480000, 0x4c5c0000,
- 0x4c600000, 0x4c640000, 0x4d040000, 0x4cc80000,
- 0x4ccc0000, 0x4cf40000, 0x4cf80000, 0x0201f800,
- 0x00020095, 0x5c01f000, 0x5c01e800, 0x5c019800,
- 0x5c019000, 0x5c020800, 0x5c00c800, 0x5c00c000,
- 0x5c00b800, 0x5c029000, 0x5c029800, 0x5c028800,
- 0x5c027800, 0x5c027000, 0x5c01f800, 0x5c028000,
- 0x5c026800, 0x5c025800, 0x5c026000, 0x1c01f000,
- 0x493bc857, 0x0201f000, 0x000200bc, 0x83300500,
- 0x000000ff, 0x82000c80, 0x00000007, 0x02021800,
- 0x0010032d, 0x0c01f025, 0x1c01f000, 0x82000d00,
- 0xc0000038, 0x02020800, 0x00100322, 0x0201f800,
- 0x0010032d, 0x00000000, 0x00000048, 0x00000054,
- 0x00000053, 0x00100784, 0x001007a8, 0x001007a3,
- 0x001007c7, 0x0010078f, 0x0010079b, 0x00100784,
- 0x001007c2, 0x0010080e, 0x00100784, 0x00100811,
- 0x00100784, 0x00100784, 0x00100814, 0x0010081a,
- 0x00100837, 0x0010084c, 0x00100784, 0x00100855,
- 0x00100861, 0x00100784, 0x00100784, 0x00100784,
- 0x0201f800, 0x0010032d, 0x0010078d, 0x001008f8,
- 0x001007d4, 0x001007fd, 0x0010078d, 0x0010078d,
- 0x0010078d, 0x0201f800, 0x0010032d, 0x4803c856,
- 0x59300004, 0x8c00053e, 0x04020005, 0x42027000,
- 0x00000055, 0x0201f000, 0x00020a34, 0x0201f800,
- 0x001064f2, 0x040007fa, 0x1c01f000, 0x4803c856,
- 0x0401f8c7, 0x40002800, 0x41782000, 0x42027000,
- 0x00000056, 0x0201f000, 0x00020a34, 0x4803c856,
- 0x42027000, 0x00000057, 0x0201f000, 0x00020a34,
- 0x4803c856, 0x59325809, 0x812e59c0, 0x04000016,
- 0x59300008, 0x8c00051a, 0x0402000d, 0x592c0409,
- 0x8c00051c, 0x04020003, 0x4a026012, 0xffffffff,
- 0x59300004, 0x8c00053e, 0x04020008, 0x42027000,
- 0x00000048, 0x0201f000, 0x00020a34, 0x4a025a07,
- 0x00000007, 0x0401f7f5, 0x0201f800, 0x001064f2,
- 0x040007f7, 0x1c01f000, 0x4803c856, 0x83300500,
- 0x00ffffff, 0x0201f000, 0x00105e17, 0x1c01f000,
- 0x4c040000, 0x59b808ea, 0x82040d00, 0x00000007,
- 0x82040580, 0x00000003, 0x04000004, 0x42000000,
- 0x60000000, 0x0401f8c6, 0x5c000800, 0x1c01f000,
- 0x0401f914, 0x0400001b, 0x59325809, 0x812e59c0,
- 0x04000018, 0x592c0205, 0x82000500, 0x000000ff,
- 0x82000d80, 0x00000029, 0x04020012, 0x59300203,
- 0x82000580, 0x00000003, 0x0400000b, 0x59300808,
- 0x84040d26, 0x48066008, 0x0201f800, 0x00020111,
- 0x4a03900d, 0x00000040, 0x4a0370e5, 0x00000008,
- 0x1c01f000, 0x0201f800, 0x001064f2, 0x040007f4,
- 0x42000000, 0x0010bd15, 0x0201f800, 0x0010ae10,
- 0x5988014a, 0x80000000, 0x4803114a, 0x4a03900d,
- 0x00000040, 0x42000000, 0xc0000000, 0x0201f000,
- 0x00020105, 0x4c5c0000, 0x4c600000, 0x4c640000,
- 0x4200c800, 0x0010c2ab, 0x4200b800, 0x00003000,
- 0x4200c000, 0x00000105, 0x0201f800, 0x00105655,
- 0x4a0370e4, 0x02000000, 0x5c00c800, 0x5c00c000,
- 0x5c00b800, 0x1c01f000, 0x4933c857, 0x0201f000,
- 0x00020a10, 0x4933c857, 0x0401fbfd, 0x1c01f000,
- 0x41300800, 0x800409c0, 0x02020800, 0x0010032d,
- 0x0201f800, 0x00100322, 0x42000000, 0x0010bd15,
- 0x0201f800, 0x0010ae10, 0x4933c857, 0x813261c0,
- 0x02000800, 0x0010032d, 0x0401f841, 0x40002800,
- 0x0201f800, 0x0010ad79, 0x4c140000, 0x59a8006a,
- 0x80000540, 0x04000004, 0x8c142d2a, 0x04000002,
- 0x0401fbe3, 0x5c002800, 0x0401f8ae, 0x04000007,
- 0x5932680a, 0x59340200, 0x8c00050e, 0x59300415,
- 0x02020800, 0x00108c33, 0x1c01f000, 0x42000000,
- 0x0010bd15, 0x0201f800, 0x0010ae10, 0x4933c857,
- 0x813261c0, 0x02000800, 0x0010032d, 0x0401f89d,
- 0x0400000b, 0x0201f800, 0x00108953, 0x04000008,
- 0x59325809, 0x592c0209, 0x8400054e, 0x48025a09,
- 0x417a7800, 0x0201f800, 0x0010853c, 0x1c01f000,
- 0x485fc857, 0x5c000000, 0x4d780000, 0x4203e000,
- 0x50000000, 0x4200b800, 0x00008005, 0x0201f000,
- 0x00100332, 0x4933c857, 0x83300480, 0x00000020,
- 0x02021800, 0x0010032d, 0x83300c00, 0x0010bd88,
- 0x50040000, 0x80000000, 0x04001002, 0x44000800,
- 0x1c01f000, 0x4933c857, 0x0401f7f4, 0x4807c856,
- 0x59b800ea, 0x8c000510, 0x040007fd, 0x59b800e0,
- 0x4803c857, 0x1c01f000, 0x4803c856, 0x42000000,
- 0x10000000, 0x41300800, 0x0401f029, 0x8c000510,
- 0x02000000, 0x0002010b, 0x4c040000, 0x0401f80b,
- 0x5c000800, 0x82100480, 0x00000008, 0x02001000,
- 0x0002010b, 0x4c040000, 0x0401feb7, 0x5c000800,
- 0x0201f000, 0x0002010b, 0x59b800e2, 0x59b820e2,
- 0x80100580, 0x040207fd, 0x80102114, 0x0401f001,
- 0x40101800, 0x800c190a, 0x82100500, 0x0000001f,
- 0x820c1d00, 0x0000001f, 0x800c2480, 0x82102500,
- 0x0000001f, 0x1c01f000, 0x40680000, 0x406c0800,
- 0x0401f807, 0x42018800, 0x00000001, 0x04020003,
- 0x42018800, 0x00000000, 0x1c01f000, 0x82000500,
- 0xf0000000, 0x82040d00, 0x0fffffff, 0x80040d40,
- 0x4807c857, 0x42001000, 0x0010bc59, 0x50080000,
- 0x80000540, 0x04020005, 0x4a0370e5, 0x00000003,
- 0x4a0370e4, 0x00000300, 0x80000000, 0x44001000,
- 0x42001000, 0x00000400, 0x59b800ea, 0x8c000510,
- 0x0400000c, 0x0401ffd1, 0x82100480, 0x00000008,
- 0x04001007, 0x4c040000, 0x4c080000, 0x0401fe7e,
- 0x5c001000, 0x5c000800, 0x0401f020, 0x59b800ea,
- 0x8c000516, 0x0402001d, 0x4a0370e4, 0x00300000,
- 0x480770e1, 0x42001000, 0x0000ff00, 0x80081040,
- 0x04000012, 0x59b808e4, 0x8c040d28, 0x040207fc,
- 0x42001000, 0x0010bc59, 0x50080000, 0x80000040,
- 0x04020005, 0x4a0370e5, 0x00000002, 0x4a0370e4,
- 0x00000200, 0x02001800, 0x0010032d, 0x44001000,
- 0x8c040d2c, 0x1c01f000, 0x41f80000, 0x50000000,
- 0x0201f800, 0x0010032d, 0x80081040, 0x040207d3,
- 0x41f80000, 0x50000000, 0x0201f800, 0x0010032d,
- 0x4d380000, 0x59300c07, 0x82040580, 0x00000009,
- 0x04020006, 0x42027000, 0x00000047, 0x0201f800,
- 0x00020a34, 0x80000580, 0x5c027000, 0x1c01f000,
- 0x4c500000, 0x4a03900d, 0x00000001, 0x59c8a020,
- 0x4a03900d, 0x00000002, 0x59c80820, 0x8c50a52e,
- 0x04000002, 0x900409c0, 0x82040d00, 0x0000ffff,
- 0x0201f800, 0x00105617, 0x5c00a000, 0x1c01f000,
- 0x42000000, 0x0010bd0c, 0x0201f800, 0x0010ae10,
- 0x0401ffec, 0x0400004e, 0x4933c857, 0x59300407,
- 0x82000580, 0x00000000, 0x04000049, 0x59c82021,
- 0x4a03900d, 0x00000001, 0x59c82821, 0x82142d00,
- 0x0000ffff, 0x59325809, 0x812e59c0, 0x04000040,
- 0x5932680a, 0x0201f800, 0x001040c4, 0x02020800,
- 0x00108c1b, 0x599c0019, 0x8c00050c, 0x04020018,
- 0x0201f800, 0x001040c4, 0x04020015, 0x59300812,
- 0x4807c857, 0x592c0409, 0x8c00051c, 0x0402000e,
- 0x8400055c, 0x48025c09, 0x592c0a05, 0x82040d00,
- 0x000000ff, 0x82040580, 0x00000048, 0x04000004,
- 0x82040580, 0x00000018, 0x04020003, 0x59300812,
- 0x48065803, 0x4a026012, 0x7fffffff, 0x48166014,
- 0x0201f800, 0x001040c4, 0x04000004, 0x59300415,
- 0x8c00051c, 0x04000004, 0x599c0019, 0x8c00050c,
- 0x04000017, 0x0201f800, 0x00100e5a, 0x04020014,
- 0x0401fa2f, 0x40280000, 0x4802600e, 0x04000005,
- 0x4832600c, 0x50200000, 0x4802600b, 0x4822600d,
- 0x59300415, 0x8c00051c, 0x04020004, 0x599c0019,
- 0x8c00050c, 0x04020885, 0x4a03900d, 0x00000040,
- 0x4a0370e5, 0x00000008, 0x1c01f000, 0x42000000,
- 0x0010bd15, 0x0201f800, 0x0010ae10, 0x5988014c,
- 0x80000000, 0x4803114c, 0x4a03900d, 0x00000040,
- 0x42000000, 0xc0000000, 0x0201f000, 0x00020105,
- 0x4cf80000, 0x58f40000, 0x8001f540, 0x0401f820,
- 0x41781800, 0x0401f8f9, 0x04020014, 0x44140800,
- 0x0401f82a, 0x04000011, 0x40043800, 0x42001800,
- 0x00000001, 0x40142000, 0x0401f8f0, 0x0402000b,
- 0x801c3800, 0x501c0000, 0x44000800, 0x0401f810,
- 0x801c0580, 0x04000004, 0x44103800, 0x801c3840,
- 0x44143800, 0x0401f819, 0x5c01f000, 0x1c01f000,
- 0x80f9f1c0, 0x04020003, 0x58f41202, 0x0401f003,
- 0x42001000, 0x00000007, 0x1c01f000, 0x80f9f1c0,
- 0x04020006, 0x58f40401, 0x82000480, 0x00000002,
- 0x80f40400, 0x0401f005, 0x58f80401, 0x82000480,
- 0x00000002, 0x80f80400, 0x50002800, 0x80000000,
- 0x50002000, 0x1c01f000, 0x80f9f1c0, 0x04020008,
- 0x58f40401, 0x82000480, 0x00000002, 0x02001800,
- 0x0010032d, 0x4801ec01, 0x0401f00b, 0x58f80401,
- 0x82000480, 0x00000002, 0x02001800, 0x0010032d,
- 0x4801f401, 0x82000580, 0x00000002, 0x04020002,
- 0x0401f81b, 0x58f40202, 0x80000040, 0x4801ea02,
- 0x02000800, 0x0010032d, 0x82000580, 0x00000001,
- 0x1c01f000, 0x82f40580, 0xffffffff, 0x0400000f,
- 0x58f40201, 0x82000580, 0x0000dcb3, 0x02020800,
- 0x0010032d, 0x58f40000, 0x8001f540, 0x04000006,
- 0x58f80201, 0x82000580, 0x0000ddb9, 0x02020800,
- 0x0010032d, 0x0401f80a, 0x1c01f000, 0x4d2c0000,
- 0x40fa5800, 0x0201f800, 0x00100580, 0x4979e800,
- 0x4179f000, 0x5c025800, 0x1c01f000, 0x80f5e9c0,
- 0x04000009, 0x80f9f1c0, 0x04020ff5, 0x4d2c0000,
- 0x40f65800, 0x0201f800, 0x00100580, 0x4179e800,
- 0x5c025800, 0x1c01f000, 0x4cf40000, 0x0201f800,
- 0x001040c4, 0x04020036, 0x59300808, 0x82040500,
- 0x00013100, 0x04020032, 0x8c040d22, 0x04000032,
- 0x59300020, 0x8001ed40, 0x02000800, 0x0010032d,
- 0x82000580, 0xffffffff, 0x04000029, 0x58f40201,
- 0x82000580, 0x0000dcb3, 0x02020800, 0x0010032d,
- 0x58f40a02, 0x82040500, 0x0000fffe, 0x04000003,
- 0x0401ff74, 0x58f40a02, 0x82040480, 0x0000000f,
- 0x04021059, 0x80040800, 0x4805ea02, 0x82040580,
- 0x00000008, 0x0400005d, 0x82040480, 0x00000008,
- 0x0400100a, 0x58f40000, 0x8001ed40, 0x02000800,
- 0x0010032d, 0x58f40201, 0x82000580, 0x0000ddb9,
- 0x02020800, 0x0010032d, 0x58f40401, 0x82000c00,
- 0x00000002, 0x4805ec01, 0x80f40400, 0x59300813,
- 0x44040000, 0x80000000, 0x45780000, 0x5c01e800,
- 0x1c01f000, 0x42001000, 0x00000400, 0x59b800e4,
- 0x8c000524, 0x04020023, 0x4a0370e4, 0x00030000,
- 0x40000000, 0x59b800e4, 0x8c000524, 0x0402001b,
- 0x59300808, 0x84040d62, 0x48066008, 0x4a0370e4,
- 0x00020000, 0x4d2c0000, 0x0201f800, 0x0010055a,
- 0x04000025, 0x492e6020, 0x4a025a01, 0x0000dcb3,
- 0x59300009, 0x80001d40, 0x02000800, 0x0010032d,
- 0x580c0810, 0x48065803, 0x59301812, 0x40040000,
- 0x800c0580, 0x0402000d, 0x497a5a02, 0x4a025c01,
- 0x00000004, 0x0401f011, 0x4a0370e4, 0x00020000,
- 0x40000000, 0x40000000, 0x80081040, 0x02000800,
- 0x0010032d, 0x0401f7d6, 0x4a025a02, 0x00000001,
- 0x4a025c01, 0x00000006, 0x497a5804, 0x400c0000,
- 0x80040480, 0x48025805, 0x412de800, 0x5c025800,
- 0x0401f7a9, 0x5c025800, 0x4a026020, 0xffffffff,
- 0x0401f7c3, 0x4d2c0000, 0x58f65800, 0x0201f800,
- 0x00100580, 0x40f65800, 0x0201f800, 0x00100580,
- 0x5c025800, 0x0401f7f5, 0x4d2c0000, 0x0201f800,
- 0x0010055a, 0x040007f8, 0x4a025a01, 0x0000ddb9,
- 0x4a025c01, 0x00000002, 0x492de800, 0x412de800,
- 0x5c025800, 0x0401f7a5, 0x0401ff1e, 0x82f40400,
- 0x00000004, 0x800c0400, 0x40000800, 0x50040000,
- 0x80100580, 0x04000016, 0x82040c00, 0x00000002,
- 0x80081040, 0x040207fa, 0x80f9f1c0, 0x04000011,
- 0x58f41202, 0x82081480, 0x00000007, 0x82f80400,
- 0x00000002, 0x800c0400, 0x40000800, 0x50040000,
- 0x80100580, 0x04000006, 0x82040c00, 0x00000002,
- 0x80081040, 0x040207fa, 0x0401f002, 0x1c01f000,
- 0x82000540, 0x00000001, 0x0401f7fd, 0x4cf40000,
- 0x4cf80000, 0x4001e800, 0x812e59c0, 0x04000024,
- 0x592c0a07, 0x800409c0, 0x04020021, 0x82f40580,
- 0xffffffff, 0x0400001b, 0x58f40201, 0x82000580,
- 0x0000dcb3, 0x02020800, 0x0010032d, 0x58f40000,
- 0x8001f540, 0x04000006, 0x58f80201, 0x82000580,
- 0x0000ddb9, 0x02020800, 0x0010032d, 0x41783800,
- 0x58f44003, 0x0401f839, 0x04020009, 0x0401ff2c,
- 0x497a6020, 0x59300808, 0x84040d22, 0x48066008,
- 0x5c01f000, 0x5c01e800, 0x1c01f000, 0x0401ff24,
- 0x4a025a07, 0x00000011, 0x0401f7f6, 0x0401ff06,
- 0x0401f7f4, 0x4cf40000, 0x4cf80000, 0x4001e800,
- 0x82040580, 0x00000001, 0x04020020, 0x82f40580,
- 0xffffffff, 0x0400001a, 0x58f40201, 0x82000580,
- 0x0000dcb3, 0x02020800, 0x0010032d, 0x58f40000,
- 0x8001f540, 0x04000006, 0x58f80201, 0x82000580,
- 0x0000ddb9, 0x02020800, 0x0010032d, 0x41783800,
- 0x58f44003, 0x0401f811, 0x04020008, 0x0401ff04,
- 0x42000800, 0x00000001, 0x497a6020, 0x5c01f000,
- 0x5c01e800, 0x1c01f000, 0x0401fefd, 0x42000800,
- 0x00000011, 0x0401f7f9, 0x4c040000, 0x0401fede,
- 0x5c000800, 0x0401f7f5, 0x4803c856, 0x401c2000,
- 0x41781800, 0x4c200000, 0x0401ff88, 0x5c004000,
- 0x0402002a, 0x40202000, 0x42001800, 0x00000001,
- 0x0401ff82, 0x04020025, 0x0401fe9e, 0x40082800,
- 0x82f43400, 0x00000004, 0x50182000, 0x40100000,
- 0x801c0580, 0x04000005, 0x42001800, 0x00000001,
- 0x0401ff76, 0x04020019, 0x82183400, 0x00000002,
- 0x80142840, 0x040207f5, 0x80f9f1c0, 0x04000012,
- 0x58f42a02, 0x82142c80, 0x00000007, 0x82f83400,
- 0x00000002, 0x50182000, 0x40100000, 0x801c0580,
- 0x04000005, 0x42001800, 0x00000001, 0x0401ff63,
- 0x04020006, 0x82183400, 0x00000002, 0x80142840,
- 0x040207f5, 0x1c01f000, 0x82000540, 0x00000001,
- 0x0401f7fd, 0x0201f800, 0x0010032d, 0x58380a05,
- 0x82040d00, 0x000000ff, 0x82040580, 0x0000001b,
- 0x04000004, 0x82040580, 0x0000002b, 0x040207f6,
- 0x50200000, 0x80387c00, 0x583c2800, 0x583c2001,
- 0x583c1002, 0x592c0a08, 0x58383010, 0x59303808,
- 0x497a6013, 0x497a6014, 0x0201f000, 0x00020149,
- 0x58380208, 0x8c000502, 0x040007e7, 0x50200000,
- 0x80387c00, 0x583c2800, 0x583c2001, 0x58380405,
- 0x80001540, 0x04020002, 0x58381408, 0x58c83401,
- 0x58380c09, 0x59303808, 0x497a6013, 0x497a6014,
- 0x0201f000, 0x00020149, 0x592c0409, 0x8c000502,
- 0x040007d5, 0x592c040a, 0x80000540, 0x040007d2,
- 0x82000c80, 0x00000002, 0x04001011, 0x58380001,
- 0x80007540, 0x02000800, 0x0010032d, 0x58380205,
- 0x82000500, 0x0000000f, 0x82000400, 0x00100e3a,
- 0x50004000, 0x40040000, 0x800409c0, 0x04000005,
- 0x82040c80, 0x00000005, 0x040217f1, 0x80204400,
- 0x50200000, 0x80387c00, 0x583c2800, 0x583c2001,
- 0x583c1002, 0x592c0a08, 0x592c4c09, 0x592c300e,
- 0x59303808, 0x497a6013, 0x497a6014, 0x4816600f,
- 0x48126010, 0x480a6011, 0x481a6012, 0x80040840,
- 0x4806600e, 0x02000000, 0x00020151, 0x80204000,
- 0x50201800, 0x800c19c0, 0x0402000c, 0x58380001,
- 0x80007540, 0x02000800, 0x0010032d, 0x58380205,
- 0x82000500, 0x0000000f, 0x82000400, 0x00100e3a,
- 0x50004000, 0x50201800, 0x483a600c, 0x480e600b,
- 0x4822600d, 0x0201f000, 0x00020151, 0x4803c856,
- 0x592c0209, 0x8c00051e, 0x04020017, 0x50200000,
- 0x80306c00, 0x40240000, 0x0c01f001, 0x00100b7f,
- 0x00100b7f, 0x00100b88, 0x00100b7f, 0x00100b7f,
- 0x00100b7f, 0x00100b7f, 0x00100b7f, 0x00100b88,
- 0x00100b7f, 0x00100b88, 0x00100b7f, 0x00100b7f,
- 0x00100b88, 0x00100b7f, 0x00100b7f, 0x0201f800,
- 0x0010032d, 0x8400051e, 0x48025a09, 0x50200000,
- 0x80306c00, 0x58343801, 0x481e6010, 0x0401f007,
- 0x58341802, 0x58342800, 0x58343801, 0x480e6011,
- 0x4816600f, 0x481e6010, 0x0401f28a, 0x4933c857,
- 0x5931f809, 0x59301006, 0x800811c0, 0x0400000b,
- 0x41780800, 0x42000000, 0x0000000a, 0x0201f800,
- 0x0010600e, 0x80080102, 0x04020002, 0x84001542,
- 0x80081040, 0x4809fc07, 0x4a026006, 0x00000002,
- 0x592c040a, 0x82000500, 0x00000008, 0x0400000b,
- 0x0401f831, 0x59300203, 0x82000580, 0x00000004,
- 0x04020005, 0x42027000, 0x00000048, 0x0201f800,
- 0x00020a34, 0x1c01f000, 0x4cfc0000, 0x58fc0205,
- 0x82000500, 0x000000ff, 0x82000580, 0x00000048,
- 0x04020009, 0x58fc0409, 0x8c000500, 0x04000006,
- 0x58fc080c, 0x8c040d16, 0x04000017, 0x58fc0008,
- 0x0401f00a, 0x58fc0409, 0x8c000512, 0x04020014,
- 0x58fc0c0a, 0x8c040d16, 0x04020003, 0x5c01f800,
- 0x1c01f000, 0x58fc000b, 0x59300812, 0x80040580,
- 0x04020009, 0x59300008, 0x84000500, 0x48026008,
- 0x42027000, 0x00000048, 0x5c01f800, 0x0201f000,
- 0x00020a34, 0x5c01f800, 0x1c01f000, 0x58fdf80a,
- 0x0401f7ec, 0x5c000000, 0x4c000000, 0x4803c857,
- 0x4933c857, 0x59b808ea, 0x82040d00, 0x00000007,
- 0x82040580, 0x00000000, 0x04000025, 0x82040580,
- 0x00000003, 0x04000022, 0x59300407, 0x4c000000,
- 0x4a026407, 0x00000000, 0x42003000, 0x00000041,
- 0x4a0370e5, 0x00003000, 0x42000000, 0x50000000,
- 0x41300800, 0x4c180000, 0x0401fca9, 0x5c003000,
- 0x0400000e, 0x42000000, 0x0000001e, 0x80000040,
- 0x040207ff, 0x80183040, 0x040207f4, 0x42000000,
- 0x40000000, 0x41300800, 0x0401fc9d, 0x59880146,
- 0x80000000, 0x48031146, 0x4a0370e5, 0x00002000,
- 0x5c000000, 0x48026407, 0x1c01f000, 0x59300008,
- 0x84000500, 0x48026008, 0x0401f7fc, 0x59c00007,
- 0x4a038006, 0x30000000, 0x40000000, 0x59c00007,
- 0x8c00050a, 0x040207fe, 0x1c01f000, 0x5c000000,
- 0x4c000000, 0x4803c857, 0x42000800, 0x00000001,
- 0x0201f800, 0x00101994, 0x4dc00000, 0x4a0370e8,
- 0x00000000, 0x42038000, 0x00007720, 0x0401ffec,
- 0x42038000, 0x00007700, 0x0401ffe9, 0x0201f800,
- 0x00104755, 0x04020017, 0x4a038891, 0x0000ffff,
- 0x497b8880, 0x4ce80000, 0x4201d000, 0x00000016,
- 0x0201f800, 0x001059d2, 0x497b8892, 0x4201d000,
- 0x00000016, 0x0201f800, 0x001059d2, 0x5c01d000,
- 0x42000000, 0x0010bd60, 0x0201f800, 0x0010ae10,
- 0x0401f812, 0x5c038000, 0x0201f000, 0x00104879,
- 0x0401f830, 0x4c080000, 0x4c140000, 0x42000000,
- 0x0010bd61, 0x0201f800, 0x0010ae10, 0x0401f807,
- 0x5c002800, 0x5c001000, 0x48178892, 0x480b8880,
- 0x5c038000, 0x1c01f000, 0x496fc857, 0x836c0580,
- 0x00000003, 0x0402000b, 0x4c080000, 0x4c0c0000,
- 0x42001000, 0x00008048, 0x42001800, 0x0000ffff,
- 0x0201f800, 0x001031f5, 0x5c001800, 0x5c001000,
- 0x42000800, 0x0000003c, 0x0201f800, 0x001010db,
- 0x59a8006a, 0x80000540, 0x04000005, 0x59a8106b,
- 0x800811c0, 0x02020800, 0x001018ff, 0x4a038891,
- 0x0000ffff, 0x4a03900d, 0x00000040, 0x0201f800,
- 0x00100684, 0x4a0370e8, 0x00000001, 0x1c01f000,
- 0x5c000000, 0x4c000000, 0x4803c857, 0x59c41080,
- 0x497b8880, 0x4ce80000, 0x4201d000, 0x00000016,
- 0x4c080000, 0x0201f800, 0x001059d2, 0x5c001000,
- 0x5c01d000, 0x59c42892, 0x497b8892, 0x0201f800,
- 0x00104755, 0x04020002, 0x1c01f000, 0x42002000,
- 0x00000260, 0x59c418a4, 0x820c1d00, 0x0000000f,
- 0x820c0580, 0x00000000, 0x04000010, 0x59c41805,
- 0x820c1d00, 0x00000001, 0x0402000e, 0x59c418a4,
- 0x820c1d00, 0x0000000f, 0x820c0480, 0x00000007,
- 0x04001004, 0x820c0480, 0x0000000c, 0x04001003,
- 0x80102040, 0x040207ec, 0x497b8891, 0x1c01f000,
- 0x4c100000, 0x42002000, 0x00000019, 0x4a038805,
- 0x00000001, 0x0201f800, 0x00101731, 0x59c41805,
- 0x820c1d00, 0x00000001, 0x04000005, 0x80102040,
- 0x040207f7, 0x5c002000, 0x0401f7f0, 0x5c002000,
- 0x0401f7ec, 0x4803c856, 0x1c01f000, 0x00100cb7,
- 0x00100cb7, 0x00100cb7, 0x00100cdb, 0x00100cb7,
- 0x00100cb7, 0x00100cb7, 0x00100cb7, 0x00100cb7,
- 0x00100cdb, 0x00100cb7, 0x00100cb9, 0x00100cb7,
- 0x00100cb7, 0x00100cb7, 0x00100cb7, 0x0201f800,
- 0x0010032d, 0x82040580, 0x0000001b, 0x0400001a,
- 0x82040580, 0x0000002b, 0x04000017, 0x82040580,
- 0x0000003b, 0x02020800, 0x0010032d, 0x592c020b,
- 0x8c000500, 0x04000073, 0x592c1a08, 0x82040500,
- 0x0000000f, 0x82000400, 0x00100e3a, 0x50001000,
- 0x50080000, 0x59302014, 0x4802600b, 0x492e600c,
- 0x480a600d, 0x480e600e, 0x48126013, 0x5c025800,
- 0x1c01f000, 0x592c0010, 0x48026012, 0x592c0011,
- 0x48026014, 0x592c1a08, 0x0401f7ed, 0x82040500,
- 0x0000000f, 0x82000400, 0x00100e3a, 0x50001000,
- 0x50080000, 0x592c1a08, 0x4802600b, 0x492e600c,
- 0x480a600d, 0x480e600e, 0x497a6013, 0x0401f7ec,
- 0x8c040d00, 0x0402004f, 0x82040d00, 0x00000080,
- 0x0400004c, 0x0201f000, 0x00020164, 0x59300014,
- 0x59301013, 0x80080580, 0x0402000c, 0x42007800,
- 0x80000005, 0x592c1209, 0x82080500, 0xffff7fff,
- 0x48025a09, 0x8c08151e, 0x0402003b, 0x823c7d40,
- 0x00000020, 0x0401f038, 0x480bc857, 0x42000000,
- 0x0010bd0d, 0x0201f800, 0x0010ae10, 0x59302014,
- 0x59300415, 0x4803c857, 0x8c000514, 0x04020011,
- 0x599c1819, 0x8c0c1d12, 0x0400000b, 0x592c0810,
- 0x59300016, 0x80040c80, 0x04000005, 0x04001004,
- 0x80040000, 0x80140480, 0x0400100a, 0x0201f800,
- 0x001071c7, 0x820c1d40, 0x00000001, 0x0401f020,
- 0x84000514, 0x48026415, 0x48126016, 0x4813c857,
- 0x0401f93e, 0x0402001a, 0x42007800, 0x80000005,
- 0x5930500e, 0x592c0209, 0x4803c857, 0x8c00051e,
- 0x04020005, 0x823c7d40, 0x00000020, 0x5930400d,
- 0x0401f004, 0x8400051e, 0x48025a09, 0x0401f8ed,
- 0x50201800, 0x480e600b, 0x4832600c, 0x4822600d,
- 0x482a600e, 0x480fc857, 0x4833c857, 0x4823c857,
- 0x482bc857, 0x80000580, 0x483e6004, 0x1c01f000,
- 0x0201f800, 0x0010032d, 0x4933c857, 0x4d2c0000,
- 0x59900004, 0x81300580, 0x02020800, 0x0010032d,
- 0x0201f800, 0x00108953, 0x02000800, 0x0010032d,
- 0x59325809, 0x4d3c0000, 0x4d400000, 0x59300004,
- 0x4803c857, 0x4c000000, 0x0201f800, 0x00106346,
- 0x0201f800, 0x001060e2, 0x5c000000, 0x8c000516,
- 0x04000011, 0x592c0010, 0x4803c857, 0x48025808,
- 0x41780800, 0x42028000, 0x00000002, 0x0201f800,
- 0x00104543, 0x4a025c07, 0x0000ffff, 0x492fc857,
- 0x0201f800, 0x000203ab, 0x0201f800, 0x00107144,
- 0x0401f015, 0x4a026203, 0x00000002, 0x592c0209,
- 0x8400054e, 0x48025a09, 0x59300407, 0x82000580,
- 0x00000006, 0x04020009, 0x811800ca, 0x81c80c00,
- 0x58040939, 0x592c000e, 0x80040480, 0x592c0810,
- 0x80040480, 0x4802580c, 0x417a7800, 0x0201f800,
- 0x0010853c, 0x5c028000, 0x5c027800, 0x5c025800,
- 0x1c01f000, 0x4933c857, 0x4d2c0000, 0x59900004,
- 0x81300580, 0x02020800, 0x0010032d, 0x0201f800,
- 0x00108953, 0x02000800, 0x0010032d, 0x59325809,
- 0x592c0209, 0x84000540, 0x48025a09, 0x0401f7be,
- 0x491bc857, 0x4dd00000, 0x4c580000, 0x41780800,
- 0x8007a0ca, 0x83d3a400, 0x00007600, 0x4200b000,
- 0x000007d0, 0x599c0019, 0x8c000506, 0x04020003,
- 0x4200b000, 0x000003e8, 0x4a03a005, 0x80000002,
- 0x0402400d, 0x4c040000, 0x02004800, 0x0002090c,
- 0x5c000800, 0x42000000, 0x00001000, 0x50000000,
- 0x82000480, 0x24320001, 0x04001003, 0x8058b040,
- 0x04000016, 0x59d01006, 0x82080500, 0x00006000,
- 0x82000580, 0x00006000, 0x04000007, 0x8c08151e,
- 0x040007ec, 0x59d01006, 0x82080500, 0x00006000,
- 0x040207e8, 0x83d3a400, 0x00000020, 0x80040800,
- 0x82040480, 0x00000005, 0x040017d9, 0x5c00b000,
- 0x5c03a000, 0x1c01f000, 0x41180000, 0x80040580,
- 0x04000008, 0x42003000, 0x0010b995, 0x58180401,
- 0x8c000504, 0x040007f0, 0x850e1d6e, 0x0401f7ee,
- 0x4a03a005, 0x30000000, 0x59d00006, 0x4a03a005,
- 0x30000000, 0x59d00006, 0x497ba003, 0x497ba007,
- 0x4a03a005, 0xf0000001, 0x42001800, 0x00008000,
- 0x59d00006, 0x8c00050a, 0x04000005, 0x800c1840,
- 0x040207fc, 0x0201f800, 0x0010032d, 0x4a03a005,
- 0xf0000000, 0x59d00006, 0x850e1d2e, 0x800410c8,
- 0x82081400, 0x0000bf32, 0x58081804, 0x800c19c0,
- 0x040007d1, 0x580c0004, 0x84000576, 0x48001804,
- 0x4933c857, 0x0401f7cc, 0x4803c856, 0x4dd00000,
- 0x41780800, 0x8007a0ca, 0x83d3a400, 0x00007600,
- 0x4a03a005, 0x80000001, 0x59d00006, 0x83d3a400,
- 0x00000020, 0x80040800, 0x82040480, 0x00000005,
- 0x040017f8, 0x5c03a000, 0x1c01f000, 0x59d00006,
- 0x8c00053e, 0x0400001e, 0x59902804, 0x4817c857,
- 0x801429c0, 0x04000013, 0x5990000a, 0x5990080b,
- 0x5990100c, 0x5990180d, 0x4800280b, 0x4804280c,
- 0x4808280d, 0x480c280e, 0x59d00000, 0x59d00801,
- 0x59d01002, 0x59d01803, 0x59d02004, 0x4800280f,
- 0x48042810, 0x48082811, 0x480c2812, 0x48102813,
- 0x59900006, 0x82000500, 0xffff0000, 0x48032006,
- 0x4a03a005, 0x30000000, 0x59d00006, 0x1c01f000,
- 0x4803c856, 0x80204000, 0x50200000, 0x80000540,
- 0x04000003, 0x80285040, 0x1c01f000, 0x58300001,
- 0x80000540, 0x0400000e, 0x4802600c, 0x40006000,
- 0x58300205, 0x82000500, 0x0000000f, 0x82000400,
- 0x00100e3a, 0x50004000, 0x802041c0, 0x02000800,
- 0x0010032d, 0x80285040, 0x1c01f000, 0x40005000,
- 0x1c01f000, 0x00000006, 0x00000009, 0x0000000c,
- 0x0000000f, 0x00000012, 0x00000000, 0x00000000,
- 0x0000000c, 0x00000000, 0x00000000, 0x00000000,
- 0x00100e35, 0x00100e34, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x00100e35, 0x00100e34,
- 0x00100e31, 0x00100e35, 0x00100e34, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x00100e35, 0x00000000, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x00100e35, 0x00100e35,
- 0x00100e35, 0x00000000, 0x00100e35, 0x00000000,
- 0x00000000, 0x00000000, 0x4813c857, 0x492fc857,
- 0x4933c857, 0x48126013, 0x592c5208, 0x802851c0,
- 0x0400004a, 0x412c6000, 0x0401f84b, 0x04000009,
- 0x82240580, 0x00000002, 0x04020003, 0x5830000e,
- 0x80102480, 0x50200000, 0x80004540, 0x0400003f,
- 0x50200000, 0x80000540, 0x0400000b, 0x80301400,
- 0x58080002, 0x80102480, 0x0400101e, 0x801021c0,
- 0x04000009, 0x80285040, 0x04000034, 0x80204000,
- 0x0401f7f4, 0x58300001, 0x80006540, 0x0400002f,
- 0x0401f7e6, 0x80285040, 0x0400002c, 0x80204000,
- 0x50200000, 0x80000540, 0x0402000a, 0x58300001,
- 0x80006540, 0x04000025, 0x58300205, 0x82004d00,
- 0x0000000f, 0x82244400, 0x00100e3a, 0x50204000,
- 0x592c0209, 0x8400051e, 0x48025a09, 0x0401f013,
- 0x80102080, 0x80102000, 0x48126011, 0x4813c857,
- 0x58080802, 0x40100000, 0x80042480, 0x02001800,
- 0x0010032d, 0x58080000, 0x58081801, 0x80102400,
- 0x4812600f, 0x480e6010, 0x4813c857, 0x592c0209,
- 0x8400055e, 0x48025a09, 0x4833c857, 0x4823c857,
- 0x482bc857, 0x4832600c, 0x4822600d, 0x482a600e,
- 0x80000580, 0x0401f003, 0x82000540, 0x00000001,
- 0x1c01f000, 0x58300205, 0x82004d00, 0x0000000f,
- 0x82244400, 0x00100e3a, 0x82000500, 0x000000ff,
- 0x82000580, 0x00000029, 0x0402001b, 0x50204000,
- 0x592c040a, 0x80000540, 0x02000800, 0x0010032d,
- 0x82000c80, 0x00000002, 0x04001011, 0x58300001,
- 0x80006540, 0x02000800, 0x0010032d, 0x58300205,
- 0x82000500, 0x0000000f, 0x82000400, 0x00100e3a,
- 0x50004000, 0x40040000, 0x800409c0, 0x04000006,
- 0x82040c80, 0x00000005, 0x040217f1, 0x80204400,
- 0x80000580, 0x1c01f000, 0x4c5c0000, 0x59e4b800,
- 0x485fc857, 0x825c0500, 0x0000001f, 0x04000004,
- 0x59e40862, 0x0201f800, 0x0010032d, 0x825c0500,
- 0x000000e0, 0x02000800, 0x0010032d, 0x8c5cbd0e,
- 0x04020807, 0x8c5cbd0c, 0x04020809, 0x8c5cbd0a,
- 0x04020873, 0x5c00b800, 0x1c01f000, 0x4803c856,
- 0x4a03c800, 0x00000080, 0x1c01f000, 0x4d2c0000,
- 0x42007800, 0x0010bdb1, 0x583c0003, 0x583c0804,
- 0x80040540, 0x0400003a, 0x42000800, 0x0010bc56,
- 0x50065800, 0x592c0002, 0x82000580, 0x00000000,
- 0x04000033, 0x59e40050, 0x59e40852, 0x80040480,
- 0x82000500, 0xfffffc00, 0x04020005, 0x59e40050,
- 0x59e40851, 0x80040800, 0x80040480, 0x82000c80,
- 0x00000400, 0x59e40050, 0x80041400, 0x480bc857,
- 0x50080000, 0x58080801, 0x80040540, 0x04000020,
- 0x480bc857, 0x480a5803, 0x583c1009, 0x583c000a,
- 0x80080580, 0x04020005, 0x583c0000, 0x84000550,
- 0x48007800, 0x41781000, 0x82080400, 0x00001000,
- 0x4803c857, 0x48007809, 0x583c0003, 0x80081400,
- 0x480bc857, 0x583c0804, 0x4a025801, 0x00000000,
- 0x4a025808, 0x00100f2f, 0x480a5806, 0x48065807,
- 0x59e40053, 0x800000c4, 0x48025805, 0x412c1000,
- 0x492fc857, 0x0201f800, 0x00020016, 0x5c025800,
- 0x4a03c800, 0x00000040, 0x1c01f000, 0x42007800,
- 0x0010bc56, 0x503c7800, 0x4a007802, 0x00000100,
- 0x42007800, 0x0010bdb1, 0x583c0000, 0x84000552,
- 0x48007800, 0x583c100c, 0x480bc857, 0x80081000,
- 0x4808780c, 0x583c180b, 0x800c19c0, 0x04000017,
- 0x82080500, 0x00000003, 0x04020014, 0x583c0007,
- 0x4803c857, 0x583c2008, 0x4813c857, 0x80102000,
- 0x80100580, 0x04020002, 0x41782000, 0x48107808,
- 0x400c0000, 0x80080580, 0x04020008, 0x4978780c,
- 0x42001800, 0x00000001, 0x42001000, 0x00008028,
- 0x0201f800, 0x001031f5, 0x1c01f000, 0x4a03c800,
- 0x00000020, 0x0201f800, 0x0010ae08, 0x59e40000,
- 0x1c01f000, 0x42000000, 0x00001000, 0x50000000,
- 0x82000480, 0x24320001, 0x0400100d, 0x0201f800,
- 0x0010af26, 0x04000008, 0x42000000, 0x00007a42,
- 0x50007000, 0x8c387520, 0x04020003, 0x84387560,
- 0x44380000, 0x4a030000, 0x00000000, 0x1c01f000,
- 0x4d2c0000, 0x4a007000, 0x00000000, 0x82040d00,
- 0x43000f80, 0x02020800, 0x0010032d, 0x58380008,
- 0x4803c00f, 0x4a0370e4, 0x00003000, 0x0201f800,
- 0x00108d7c, 0x583a5807, 0x592c0000, 0x48007007,
- 0x800001c0, 0x04020002, 0x49787006, 0x0201f800,
- 0x00100580, 0x5c025800, 0x42007000, 0x00020b54,
- 0x0201f000, 0x0002002c, 0x4803c856, 0x4c3c0000,
- 0x4d2c0000, 0x4d300000, 0x58300009, 0x80025d40,
- 0x02000800, 0x0010032d, 0x592e6009, 0x4c300000,
- 0x0201f800, 0x00108d9b, 0x5c006000, 0x02000800,
- 0x0010032d, 0x58300002, 0x82000580, 0x00000100,
- 0x0402000f, 0x5930780c, 0x583c0001, 0x80007d40,
- 0x0400000e, 0x4802600c, 0x82000400, 0x00000002,
- 0x48006003, 0x583c0000, 0x48006005, 0x40301000,
- 0x0201f800, 0x00020016, 0x0401f00c, 0x4a025a07,
- 0x00000002, 0x492fc857, 0x4c300000, 0x0201f800,
- 0x000203ab, 0x5c025800, 0x0201f800, 0x00100580,
- 0x0201f800, 0x00020a10, 0x5c026000, 0x5c025800,
- 0x5c007800, 0x1c01f000, 0x4803c856, 0x4d2c0000,
- 0x4d300000, 0x42007000, 0x00020b54, 0x58380800,
- 0x82040580, 0x00000002, 0x04020011, 0x58386001,
- 0x58300009, 0x812c0580, 0x0402000d, 0x59e00004,
- 0x8c00050e, 0x040007fe, 0x59dc0006, 0x4803c857,
- 0x4a03b805, 0x20000000, 0x8c00053e, 0x040007f8,
- 0x4a007000, 0x00000000, 0x0401f019, 0x58386005,
- 0x40305000, 0x803061c0, 0x02000800, 0x0010032d,
- 0x58300009, 0x812c0580, 0x04000004, 0x40305000,
- 0x58306000, 0x0401f7f8, 0x40280000, 0x80300580,
- 0x58300000, 0x04000006, 0x48005000, 0x800001c0,
- 0x04020007, 0x48287004, 0x0401f005, 0x800001c0,
- 0x04020002, 0x48007004, 0x48007005, 0x40325800,
- 0x0201f800, 0x00100580, 0x5c026000, 0x5c025800,
- 0x0201f000, 0x00020026, 0x4803c856, 0x42000800,
- 0x0000003c, 0x48079000, 0x59c80000, 0x80040500,
- 0x040207fe, 0x497b9005, 0x4a039035, 0x00880200,
- 0x59a8000d, 0x800000e0, 0x4803900e, 0x4a039011,
- 0x00000024, 0x4a03900f, 0x0010f694, 0x4a039010,
- 0x0010f694, 0x4a039015, 0x0000007f, 0x4a03900d,
- 0x00000040, 0x4a039000, 0x00001600, 0x1c01f000,
- 0x59c80007, 0x8c000508, 0x040208c9, 0x59c80800,
- 0x8c040d16, 0x04020004, 0x82000500, 0x00000006,
- 0x0c01f005, 0x4807c857, 0x82000500, 0x0000000e,
- 0x0c01f001, 0x0010102b, 0x00101029, 0x00105150,
- 0x00101029, 0x0010102d, 0x00101029, 0x0010102d,
- 0x0010102d, 0x00101029, 0x00101029, 0x00101029,
- 0x00101029, 0x0010102d, 0x00101029, 0x0010102d,
- 0x00101029, 0x0201f800, 0x0010032d, 0x4803c857,
- 0x1c01f000, 0x59c8080c, 0x4807c857, 0x82040500,
- 0x00006000, 0x04000004, 0x0201f800, 0x0010adcb,
- 0x0401f006, 0x82040500, 0x007f0000, 0x04000006,
- 0x0201f800, 0x0010ad9d, 0x0201f800, 0x00106452,
- 0x0401f03c, 0x82040500, 0x00000014, 0x04000014,
- 0x0201f800, 0x0010adfa, 0x836c0580, 0x00000003,
- 0x0400000d, 0x0201f800, 0x00104755, 0x04000004,
- 0x0201f800, 0x00103908, 0x0401f007, 0x4a035014,
- 0x00000001, 0x4202d800, 0x00000001, 0x0201f800,
- 0x001046af, 0x0401f828, 0x0401f026, 0x82040500,
- 0x00001c00, 0x04000005, 0x0201f800, 0x0010add9,
- 0x0401f821, 0x0401f01f, 0x82040500, 0x00000140,
- 0x04000005, 0x0201f800, 0x0010adec, 0x0401f81a,
- 0x0401f018, 0x82040500, 0x00008000, 0x04000015,
- 0x0201f800, 0x00104755, 0x0400000f, 0x59c400a4,
- 0x82000500, 0x0000000f, 0x82000580, 0x0000000b,
- 0x04020009, 0x4c040000, 0x0201f800, 0x00103924,
- 0x42000000, 0x0000001e, 0x80000040, 0x040207ff,
- 0x5c000800, 0x0201f800, 0x0010adc4, 0x0401f802,
- 0x1c01f000, 0x4c0c0000, 0x4c100000, 0x4c140000,
- 0x0201f800, 0x00100c0f, 0x5c002800, 0x5c002000,
- 0x5c001800, 0x1c01f000, 0x4803c856, 0x59a80804,
- 0x59a80020, 0x82000500, 0xfffff000, 0x80040540,
- 0x48035020, 0x59a80024, 0x82000500, 0xfffff000,
- 0x80040540, 0x48035024, 0x48078882, 0x82041c00,
- 0x0000000f, 0x800c1908, 0x820c1c00, 0x00000004,
- 0x400c2000, 0x901029c0, 0x82040480, 0x000001e4,
- 0x04021005, 0x42001000, 0x00000008, 0x801020c6,
- 0x0401f031, 0x82040480, 0x00000230, 0x04021009,
- 0x42001000, 0x00000007, 0x801000c2, 0x800000c2,
- 0x80100400, 0x80100400, 0x80102400, 0x0401f026,
- 0x82040480, 0x00000298, 0x04021008, 0x42001000,
- 0x00000006, 0x801000c2, 0x800000c2, 0x80100400,
- 0x80102400, 0x0401f01c, 0x82040480, 0x00000328,
- 0x04021007, 0x42001000, 0x00000005, 0x801000c2,
- 0x800000c2, 0x80102400, 0x0401f013, 0x82040480,
- 0x00000404, 0x04021005, 0x42001000, 0x00000004,
- 0x801020c4, 0x0401f00c, 0x82040480, 0x0000056c,
- 0x04021006, 0x42001000, 0x00000003, 0x801000c2,
- 0x80102400, 0x0401f004, 0x42001000, 0x00000002,
- 0x801020c2, 0x82100480, 0x00000110, 0x80000080,
- 0x80002000, 0x800800d0, 0x80140540, 0x80100540,
- 0x48039035, 0x48035072, 0x1c01f000, 0x59c80815,
- 0x0201f800, 0x00100322, 0x40680800, 0x82040d00,
- 0x0000007c, 0x48079000, 0x59c80000, 0x80040500,
- 0x040207fe, 0x8c040d04, 0x04000003, 0x59c80035,
- 0x48039035, 0x59c80000, 0x82000540, 0x00001200,
- 0x48039000, 0x1c01f000, 0x4803c856, 0x497b88a9,
- 0x4a038807, 0x00000001, 0x497b8807, 0x59c40005,
- 0x48038805, 0x0201f800, 0x00101617, 0x4201d000,
- 0x000001f4, 0x0201f800, 0x001059d2, 0x497b880e,
- 0x4200b000, 0x000001f4, 0x42000000, 0x00000001,
- 0x42000800, 0x00000014, 0x0201f800, 0x00101740,
- 0x42000800, 0x00000014, 0x0201f800, 0x00101738,
- 0x8c040d00, 0x04000005, 0x8058b040, 0x040207f3,
- 0x0201f800, 0x0010032d, 0x4200b000, 0x00000032,
- 0x42000000, 0x00000001, 0x42000800, 0x000000b4,
- 0x0201f800, 0x00101740, 0x42000800, 0x000000b4,
- 0x0201f800, 0x00101738, 0x8c040d00, 0x04000005,
- 0x8058b040, 0x040207f3, 0x0201f800, 0x0010032d,
- 0x59c40005, 0x48038805, 0x42000000, 0x00000083,
- 0x59e00803, 0x82040d00, 0x00030000, 0x82040d80,
- 0x00020000, 0x04020003, 0x42000000, 0x00000089,
- 0x800008d0, 0x4a035044, 0x00008900, 0x4a035045,
- 0x00008900, 0x48075046, 0x42000800, 0x000000e0,
- 0x0201f800, 0x00101740, 0x42000800, 0x000000f4,
- 0x0201f800, 0x00101738, 0x82040500, 0xffffffd1,
- 0x82000540, 0x00000002, 0x42000800, 0x000000f4,
- 0x0201f800, 0x00101740, 0x42000800, 0x000000a0,
- 0x0201f800, 0x00101738, 0x82040540, 0x00000001,
- 0x42000800, 0x000000a0, 0x0201f800, 0x00101740,
- 0x42000800, 0x00000000, 0x0201f800, 0x00101738,
- 0x82040540, 0x00000001, 0x42000800, 0x00000000,
- 0x0201f800, 0x00101740, 0x4201d000, 0x0001d4c0,
- 0x0201f800, 0x001059d2, 0x0401fa68, 0x4a0388a7,
- 0x0000f7f7, 0x4a0388a3, 0x8000403c, 0x4a0388ae,
- 0x000061a8, 0x4a038801, 0x00032063, 0x4a038810,
- 0x00410108, 0x4a038811, 0x00520608, 0x4a038812,
- 0x00450320, 0x4a038813, 0x00440405, 0x4a03881c,
- 0x004132e1, 0x4a03881d, 0x004001fe, 0x4a038850,
- 0x80000108, 0x4a038860, 0x00000008, 0x4a038870,
- 0x00000008, 0x4a038851, 0x80000508, 0x4a038861,
- 0x00800000, 0x4a038871, 0x00800000, 0x4a038852,
- 0x80000708, 0x4a038862, 0x00800000, 0x4a038872,
- 0x00800000, 0x4a038853, 0x80000608, 0x497b8863,
- 0x4a038873, 0x00800000, 0x4a038882, 0x00000840,
- 0x4a0388a5, 0x000000fe, 0x4a0388a6, 0x0000001e,
- 0x4a0388b0, 0x00007530, 0x4a038802, 0x0000ffff,
- 0x4a038806, 0xc0e00800, 0x1c01f000, 0x850e1d4e,
- 0x42000800, 0x00000040, 0x0201f800, 0x00101738,
- 0x82040500, 0xffffffaf, 0x82000540, 0x00000000,
- 0x42000800, 0x00000040, 0x0201f800, 0x00101740,
- 0x42000800, 0x000000f4, 0x0201f800, 0x00101738,
- 0x4c040000, 0x40040000, 0x84000548, 0x42000800,
- 0x000000f4, 0x0201f800, 0x00101740, 0x42000800,
- 0x00000000, 0x0201f800, 0x00101738, 0x82040500,
- 0xffffffc1, 0x82000540, 0x00000038, 0x42000800,
- 0x00000000, 0x0201f800, 0x00101740, 0x5c000000,
- 0x42000800, 0x000000f4, 0x0201f000, 0x00101740,
- 0x59c40805, 0x59c40006, 0x80040d00, 0x02000800,
- 0x0010032d, 0x82040500, 0x00e00800, 0x04020004,
- 0x8c040d3e, 0x040208f9, 0x0401f007, 0x82040500,
- 0x00800800, 0x02020800, 0x00100322, 0x0201f800,
- 0x0010032d, 0x4c5c0000, 0x4c600000, 0x59c4b805,
- 0x59c40006, 0x8c000500, 0x04000003, 0x8c5cbd00,
- 0x040200a2, 0x485fc857, 0x0201f800, 0x00104755,
- 0x0400001e, 0x59c40005, 0x82000500, 0x000000c0,
- 0x04000054, 0x0201f800, 0x00104780, 0x04020051,
- 0x59c40006, 0x82000500, 0x000000f0, 0x04020004,
- 0x4a038805, 0x000000c0, 0x0401f04a, 0x59a80015,
- 0x84000506, 0x48035015, 0x42006000, 0xff203fff,
- 0x42006800, 0x40000000, 0x0201f800, 0x00103a7d,
- 0x42000800, 0x00000010, 0x42001000, 0x001039ed,
- 0x0201f800, 0x001059c7, 0x8c5cbd34, 0x04020039,
- 0x4a035013, 0x0000aaaa, 0x59c40005, 0x8c00050c,
- 0x04020012, 0x8c00050e, 0x0402001c, 0x8c00050a,
- 0x04020026, 0x8c000508, 0x0400000b, 0x59a80011,
- 0x82000580, 0x00000009, 0x04020007, 0x42000000,
- 0x0010bc72, 0x0201f800, 0x0010ae10, 0x0201f800,
- 0x00104993, 0x0401f067, 0x42000000, 0x0010bc80,
- 0x0201f800, 0x0010ae10, 0x41781800, 0x42002000,
- 0x00000001, 0x0201f800, 0x001019fb, 0x4a035014,
- 0x00000000, 0x0401f014, 0x42000000, 0x0010bc81,
- 0x0201f800, 0x0010ae10, 0x41781800, 0x42002000,
- 0x00000002, 0x0201f800, 0x001019fb, 0x4a035014,
- 0x00000002, 0x0401f008, 0x42000000, 0x0010bc74,
- 0x0201f800, 0x0010ae10, 0x0201f800, 0x00104921,
- 0x0401f048, 0x0201f800, 0x001049fe, 0x0401f045,
- 0x8c5cbd34, 0x04000041, 0x59c40005, 0x8c00053a,
- 0x04020005, 0x42000000, 0x0010bc68, 0x0201f800,
- 0x0010ae10, 0x4a038805, 0x20000000, 0x0201f800,
- 0x00104755, 0x04020015, 0x4a038805, 0x04000000,
- 0x59c418a8, 0x42002000, 0x00000000, 0x0201f800,
- 0x001019fb, 0x0201f800, 0x00104771, 0x04020008,
- 0x4a035014, 0x00000001, 0x4202d800, 0x00000001,
- 0x0201f800, 0x001046af, 0x0401f06d, 0x41780000,
- 0x0201f800, 0x00104726, 0x0201f800, 0x001017f2,
- 0x4000c000, 0x0201f800, 0x0010175f, 0x836c1580,
- 0x00000004, 0x0402000c, 0x8c5cbd00, 0x04020017,
- 0x8d0e1d06, 0x04020005, 0x59c410a3, 0x82081540,
- 0x00000008, 0x480b88a3, 0x59c41006, 0x84081540,
- 0x480b8806, 0x4a038805, 0x04000000, 0x4202d800,
- 0x00000001, 0x497b5010, 0x8d0e1d18, 0x04020005,
- 0x4803c856, 0x850e1d06, 0x0201f800, 0x00103929,
- 0x0201f800, 0x0010331d, 0x8c5cbd3c, 0x04020866,
- 0x8c5cbd00, 0x04000043, 0x42000000, 0x0010bd85,
- 0x0201f800, 0x0010ae10, 0x4a038805, 0x00000001,
- 0x4200b000, 0x00000352, 0x4201d000, 0x00000064,
- 0x4c580000, 0x0201f800, 0x001059d2, 0x0201f800,
- 0x001016ef, 0x5c00b000, 0x04000004, 0x8058b040,
- 0x040207f6, 0x0401f004, 0x4a038805, 0x00000001,
- 0x0401f02c, 0x59c40006, 0x84000500, 0x48038806,
- 0x59a80873, 0x8c040d3e, 0x04000005, 0x82040d40,
- 0x0000000b, 0x48075073, 0x850e1d48, 0x0201f800,
- 0x00106480, 0x497b8880, 0x59c4000d, 0x8c000506,
- 0x04000006, 0x42002000, 0x00000005, 0x0201f800,
- 0x00104a49, 0x0401f005, 0x42002000, 0x00000006,
- 0x0201f800, 0x00104a49, 0x59c400a3, 0x82000500,
- 0xfcf8ffff, 0x480388a3, 0x4a035058, 0x00000002,
- 0x4202d800, 0x00000004, 0x4a038805, 0x00000001,
- 0x0201f800, 0x00100454, 0x0401fb69, 0x497b5036,
- 0x4a035043, 0x00000001, 0x0201f800, 0x0010ef18,
- 0x825cbd00, 0xbbfffffe, 0x485f8805, 0x5c00c000,
- 0x5c00b800, 0x1c01f000, 0x4d180000, 0x59c41004,
- 0x480bc857, 0x8c081500, 0x04000006, 0x4803c856,
- 0x497b2807, 0x0201f800, 0x00106544, 0x0401f009,
- 0x82080500, 0x000001f0, 0x04000006, 0x4803c856,
- 0x0201f800, 0x0010676a, 0x02020800, 0x00106569,
- 0x4a038805, 0x80000000, 0x5c023000, 0x1c01f000,
- 0x59c408a3, 0x4807c857, 0x84040d40, 0x480788a3,
- 0x1c01f000, 0x4d900000, 0x4dd00000, 0x4da40000,
- 0x4d140000, 0x4a038805, 0x40000000, 0x42000000,
- 0x0010bc7a, 0x0201f800, 0x0010ae10, 0x0201f800,
- 0x001061b2, 0x59c41004, 0x8c081500, 0x04000055,
- 0x598e600f, 0x497b2807, 0x813261c0, 0x04000032,
- 0x59300403, 0x82000580, 0x00000032, 0x0402002e,
- 0x5930001d, 0x48038833, 0x4a038807, 0x00018000,
- 0x4201d000, 0x00000002, 0x0201f800, 0x001059d2,
- 0x497b8807, 0x4201d000, 0x00000002, 0x0201f800,
- 0x001059d2, 0x0201f800, 0x001063aa, 0x4201d000,
- 0x00007530, 0x0201f800, 0x001059d2, 0x59c408a4,
- 0x82040d00, 0x0000000f, 0x82040d80, 0x00000000,
- 0x04000005, 0x42000000, 0x00200000, 0x0201f800,
- 0x00101745, 0x0201f800, 0x00106102, 0x59300009,
- 0x80000540, 0x02000800, 0x0010032d, 0x40025800,
- 0x4a025a05, 0x00000103, 0x5931d822, 0x58ef400a,
- 0x58ec0008, 0x0801f800, 0x0201f800, 0x00020a10,
- 0x0401f046, 0x598c0011, 0x82001c80, 0x000000c8,
- 0x04021010, 0x80000000, 0x48031811, 0x59c400a4,
- 0x82000500, 0x0000000f, 0x82000580, 0x00000002,
- 0x04020005, 0x42000000, 0x00200000, 0x0201f800,
- 0x00101745, 0x0201f800, 0x0010596e, 0x0401f033,
- 0x4933c857, 0x0201f800, 0x001063aa, 0x813261c0,
- 0x0400002e, 0x4a026203, 0x00000001, 0x42027000,
- 0x00000027, 0x0201f800, 0x00020a34, 0x0401f027,
- 0x0201f800, 0x0010676a, 0x04000024, 0x0201f800,
- 0x001067aa, 0x0201f800, 0x00105999, 0x59926004,
- 0x813261c0, 0x04000012, 0x42001800, 0x000000c8,
- 0x0201f800, 0x0010675e, 0x0402000d, 0x59c400a4,
- 0x82000500, 0x0000000f, 0x82000580, 0x00000002,
- 0x04020004, 0x42000000, 0x00200000, 0x0401fbf6,
- 0x0201f800, 0x00105973, 0x0401f00c, 0x4933c857,
- 0x0201f800, 0x00106346, 0x813261c0, 0x04000007,
- 0x42027000, 0x0000004f, 0x4a026203, 0x00000003,
- 0x0201f800, 0x00020a34, 0x5c022800, 0x5c034800,
- 0x5c03a000, 0x5c032000, 0x0201f000, 0x0010619f,
- 0x40680000, 0x810c0d80, 0x8c040d0e, 0x0400004f,
- 0x4803c857, 0x8d0e1d0e, 0x04000023, 0x850e1d0e,
- 0x497b5058, 0x42000000, 0x0010bc61, 0x0201f800,
- 0x0010ae10, 0x0201f800, 0x0010aec4, 0x42001000,
- 0x00008011, 0x59c40001, 0x82000500, 0x00018000,
- 0x82001d80, 0x00000000, 0x04000009, 0x82001d80,
- 0x00008000, 0x04000009, 0x82001d80, 0x00010000,
- 0x04000009, 0x0201f800, 0x0010032d, 0x42001800,
- 0x00000000, 0x0401f006, 0x42001800, 0x00000001,
- 0x0401f003, 0x42001800, 0x00000003, 0x0201f000,
- 0x001031f5, 0x850e1d4e, 0x59a80858, 0x800409c0,
- 0x04020007, 0x59c4000d, 0x8c000520, 0x04000004,
- 0x42001800, 0x00000003, 0x0401f002, 0x40041800,
- 0x0201f800, 0x0010aea8, 0x42001000, 0x00008012,
- 0x59a82873, 0x8c142d3e, 0x04000006, 0x82142d00,
- 0x00000003, 0x0201f800, 0x001031f6, 0x0401f003,
- 0x0201f800, 0x001031f5, 0x0201f800, 0x00100454,
- 0x0201f800, 0x0010af17, 0x0402000c, 0x0401f84c,
- 0x4d400000, 0x4d3c0000, 0x42028000, 0x00000028,
- 0x42027800, 0x00000008, 0x0201f800, 0x0010dfe1,
- 0x5c027800, 0x5c028000, 0x1c01f000, 0x4803c857,
- 0x82000400, 0x00101b0f, 0x50000800, 0x82040d00,
- 0x000000ff, 0x1c01f000, 0x4803c856, 0x4c580000,
- 0x4200b000, 0x00000010, 0x497b88ac, 0x497b88ad,
- 0x8058b040, 0x040207fe, 0x5c00b000, 0x1c01f000,
- 0x40680800, 0x4807c857, 0x4807500f, 0x80041108,
- 0x4200b000, 0x00000010, 0x497b88ac, 0x80000580,
- 0x800811c0, 0x04020006, 0x82040500, 0x0000000f,
- 0x82000400, 0x0010af34, 0x50000000, 0x480388ad,
- 0x80081040, 0x8058b040, 0x040207f5, 0x1c01f000,
- 0x4803c857, 0x4c080000, 0x4c040000, 0x4c000000,
- 0x59c40892, 0x4807c857, 0x80041580, 0x04000010,
- 0x80041480, 0x04021007, 0x80081080, 0x80081000,
- 0x4008b000, 0x42000000, 0x00000201, 0x0401f004,
- 0x4008b000, 0x42000000, 0x00000210, 0x48038886,
- 0x8058b040, 0x040207fe, 0x497b8886, 0x5c000000,
- 0x5c000800, 0x5c001000, 0x1c01f000, 0x4803c856,
- 0x8d0e1d20, 0x04000005, 0x42028000, 0x0000002e,
- 0x0201f000, 0x0010a01b, 0x1c01f000, 0x0401f803,
- 0x40058800, 0x1c01f000, 0x59a8086d, 0x82040500,
- 0x00000010, 0x04000004, 0x42000800, 0x00000002,
- 0x0401f010, 0x82040500, 0x00000020, 0x42000800,
- 0x00000002, 0x0402000b, 0x59c80835, 0x82040d00,
- 0x00001f00, 0x80040910, 0x80040800, 0x59a8006a,
- 0x80000540, 0x04000003, 0x42000800, 0x0000025a,
- 0x4807c857, 0x1c01f000, 0x0401f807, 0x42018800,
- 0x00000001, 0x04000003, 0x42018800, 0x00000000,
- 0x1c01f000, 0x4c000000, 0x59a80037, 0x4803c857,
- 0x82000580, 0x00000000, 0x5c000000, 0x1c01f000,
- 0x0401f807, 0x42018800, 0x00000001, 0x04000003,
- 0x42018800, 0x00000000, 0x1c01f000, 0x4c000000,
- 0x59a80037, 0x4803c857, 0x82000580, 0x00000001,
- 0x5c000000, 0x1c01f000, 0x0401f807, 0x42018800,
- 0x00000001, 0x04000003, 0x42018800, 0x00000000,
- 0x1c01f000, 0x4c000000, 0x59a80037, 0x4803c857,
- 0x82000580, 0x00000003, 0x5c000000, 0x1c01f000,
- 0x0401f807, 0x42018800, 0x00000001, 0x04000003,
- 0x42018800, 0x00000000, 0x1c01f000, 0x4c000000,
- 0x59a80037, 0x82000580, 0x00000002, 0x5c000000,
- 0x1c01f000, 0x4c000000, 0x4c040000, 0x4c080000,
- 0x4c380000, 0x59a8003a, 0x82000c80, 0x00000007,
- 0x02021800, 0x0010032d, 0x0c01f806, 0x5c007000,
- 0x5c001000, 0x5c000800, 0x5c000000, 0x1c01f000,
- 0x00101467, 0x0010147a, 0x0010148e, 0x00101490,
- 0x001014b8, 0x001014ba, 0x001014bc, 0x4803c856,
- 0x4a03503c, 0x00000000, 0x42000000, 0x00000002,
- 0x0401fa32, 0x42000000, 0x00000002, 0x0401f9b5,
- 0x0401fab1, 0x4803c856, 0x4a03503a, 0x00000006,
- 0x42000800, 0x0000001e, 0x42001000, 0x001014bd,
- 0x0201f000, 0x001059a9, 0x497b503f, 0x4a035034,
- 0x00000036, 0x4a035033, 0x0000002a, 0x4803c856,
- 0x4a03503c, 0x00000001, 0x42000000, 0x00000002,
- 0x0401f9a0, 0x4803c856, 0x4a03503a, 0x00000006,
- 0x42000800, 0x0000001e, 0x42001000, 0x001014bd,
- 0x0201f000, 0x001059a9, 0x0201f800, 0x0010032d,
- 0x4a035034, 0x00000036, 0x4803c856, 0x4a03503c,
- 0x00000003, 0x42000800, 0x00000000, 0x0401faa1,
- 0x82040d00, 0x00000090, 0x82040580, 0x00000090,
- 0x04000009, 0x82040580, 0x00000010, 0x04000009,
- 0x82040580, 0x00000000, 0x04000009, 0x0201f800,
- 0x0010032d, 0x42000000, 0x00000001, 0x0401f006,
- 0x42000000, 0x00000000, 0x0401f003, 0x42000000,
- 0x00000002, 0x0401f977, 0x497b5040, 0x4803c856,
- 0x4a03503a, 0x00000006, 0x42000800, 0x0000001e,
- 0x42001000, 0x001014bd, 0x0201f000, 0x001059a9,
- 0x0201f800, 0x0010032d, 0x0201f800, 0x0010032d,
- 0x1c01f000, 0x4c000000, 0x4c040000, 0x4c080000,
- 0x4c380000, 0x59a8003c, 0x82000c80, 0x00000007,
- 0x02021800, 0x0010032d, 0x0c01f806, 0x5c007000,
- 0x5c001000, 0x5c000800, 0x5c000000, 0x1c01f000,
- 0x001014d3, 0x001014f2, 0x00101547, 0x0010155e,
- 0x00101575, 0x0010157e, 0x00101580, 0x0401fa1c,
- 0x0402001b, 0x59a81042, 0x42000800, 0x00000000,
- 0x0401fa60, 0x82040d00, 0x00000090, 0x82040580,
- 0x00000090, 0x04000009, 0x82040580, 0x00000010,
- 0x04000008, 0x82040580, 0x00000000, 0x04000007,
- 0x0201f800, 0x0010032d, 0x84081540, 0x0401f004,
- 0x84081542, 0x0401f002, 0x84081544, 0x480b5042,
- 0x4a03503a, 0x00000001, 0x0401f003, 0x0401f8ce,
- 0x0401ff81, 0x1c01f000, 0x0401f890, 0x04000053,
- 0x0401f9fb, 0x0402002a, 0x42000800, 0x00000000,
- 0x0401fa40, 0x82040d00, 0x00000090, 0x82040580,
- 0x00000000, 0x04000045, 0x82040580, 0x00000010,
- 0x04000006, 0x82040580, 0x00000090, 0x04000009,
- 0x0201f800, 0x0010032d, 0x59c40801, 0x82040d00,
- 0x00018000, 0x82040580, 0x00000000, 0x04000037,
- 0x42000800, 0x00000000, 0x0401fa2a, 0x82040d00,
- 0x00000090, 0x82040580, 0x00000010, 0x04000006,
- 0x82040580, 0x00000090, 0x04000006, 0x02020800,
- 0x0010032d, 0x59a80042, 0x84000542, 0x0401f003,
- 0x59a80042, 0x84000540, 0x48035042, 0x59a8003f,
- 0x80000000, 0x4803503f, 0x82000580, 0x00000005,
- 0x04000003, 0x0401f862, 0x0401f01f, 0x497b503f,
- 0x59c40801, 0x82040d00, 0x00018000, 0x82040580,
- 0x00000000, 0x04000009, 0x82040580, 0x00008000,
- 0x04000009, 0x82040580, 0x00010000, 0x04000009,
- 0x0201f800, 0x0010032d, 0x42000000, 0x00000001,
- 0x0401f006, 0x42000000, 0x00000000, 0x0401f003,
- 0x42000000, 0x00000002, 0x0401f960, 0x4a03503c,
- 0x00000002, 0x0401f004, 0x4a03503a, 0x00000003,
- 0x0401f002, 0x0401ff40, 0x1c01f000, 0x0401f83b,
- 0x04000015, 0x59a80033, 0x80000040, 0x48035033,
- 0x0401f9a3, 0x04020005, 0x4a03503a, 0x00000003,
- 0x497b503b, 0x0401f00c, 0x59a80033, 0x80000540,
- 0x04020003, 0x0401f8a2, 0x0401f002, 0x0401f84c,
- 0x0401f82f, 0x497b503f, 0x4a03503c, 0x00000001,
- 0x0401ff29, 0x1c01f000, 0x0401f824, 0x04000015,
- 0x0401f98f, 0x0402000f, 0x59a80040, 0x80000000,
- 0x48035040, 0x82000580, 0x00000007, 0x0402000c,
- 0x4a035036, 0x0000000a, 0x497b5043, 0x59a80042,
- 0x8400055e, 0x48035042, 0x4803c857, 0x0401f005,
- 0x0401f817, 0x4a03503c, 0x00000004, 0x0401ff3c,
- 0x1c01f000, 0x0401f80d, 0x04000007, 0x0401f978,
- 0x04020003, 0x0401ff19, 0x0401f003, 0x0401f80c,
- 0x0401ff33, 0x1c01f000, 0x0201f800, 0x0010032d,
- 0x0201f800, 0x0010032d, 0x59a80034, 0x80000040,
- 0x48035034, 0x04000892, 0x1c01f000, 0x4c040000,
- 0x42000800, 0x00000000, 0x0401f9ae, 0x82040d00,
- 0x00000090, 0x82040580, 0x00000090, 0x04000009,
- 0x82040580, 0x00000010, 0x04000009, 0x82040580,
- 0x00000000, 0x04000009, 0x0201f800, 0x0010032d,
- 0x42000000, 0x00000002, 0x0401f006, 0x42000000,
- 0x00000001, 0x0401f003, 0x42000000, 0x00000000,
- 0x0401f8fe, 0x5c000800, 0x1c01f000, 0x4c040000,
- 0x59c40801, 0x82040d00, 0x00018000, 0x82040580,
- 0x00000000, 0x04000009, 0x82040580, 0x00008000,
- 0x04000009, 0x82040580, 0x00010000, 0x04000009,
- 0x0201f800, 0x0010032d, 0x42000000, 0x00000002,
- 0x0401f006, 0x42000000, 0x00000001, 0x0401f003,
- 0x42000000, 0x00000000, 0x0401f86a, 0x5c000800,
- 0x1c01f000, 0x4c040000, 0x59a8003f, 0x80000000,
- 0x4803503f, 0x82000580, 0x00000005, 0x04020019,
- 0x497b503f, 0x59c40801, 0x82040d00, 0x00018000,
- 0x82040580, 0x00000000, 0x04000009, 0x82040580,
- 0x00008000, 0x04000009, 0x82040580, 0x00010000,
- 0x04000009, 0x0201f800, 0x0010032d, 0x42000000,
- 0x00000002, 0x0401f006, 0x42000000, 0x00000001,
- 0x0401f003, 0x42000000, 0x00000000, 0x0401f849,
- 0x42000800, 0x00000000, 0x0401f95a, 0x82040d00,
- 0x00000090, 0x82040580, 0x00000090, 0x04000009,
- 0x82040580, 0x00000010, 0x04000009, 0x82040580,
- 0x00000000, 0x04000009, 0x0201f800, 0x0010032d,
- 0x42000000, 0x00000002, 0x0401f006, 0x42000000,
- 0x00000001, 0x0401f003, 0x42000000, 0x00000000,
- 0x0401f8aa, 0x5c000800, 0x1c01f000, 0x4c200000,
- 0x59a80042, 0x82000500, 0x00007fff, 0x02000800,
- 0x0010032d, 0x59a84041, 0x80204102, 0x02001800,
- 0x0010032d, 0x48235041, 0x80204500, 0x040007fa,
- 0x8c000504, 0x04020007, 0x8c000502, 0x04020008,
- 0x8c000500, 0x04020009, 0x0201f800, 0x0010032d,
- 0x42000000, 0x00000002, 0x0401f006, 0x42000000,
- 0x00000000, 0x0401f003, 0x42000000, 0x00000001,
- 0x0401f810, 0x5c004000, 0x1c01f000, 0x04011000,
- 0x4a03c840, 0x0010b8ba, 0x4a03c842, 0x00000009,
- 0x40000000, 0x040117ff, 0x4a035041, 0x00000004,
- 0x4a035038, 0x00000000, 0x1c01f000, 0x40680000,
- 0x59a80873, 0x8c040d3e, 0x0402000c, 0x59a80847,
- 0x82040d80, 0x01391077, 0x04020008, 0x59e00813,
- 0x8c040d00, 0x04000005, 0x82000d80, 0x00000002,
- 0x04020002, 0x41780000, 0x59a80847, 0x82040d80,
- 0x015b1077, 0x0402000b, 0x4a03c014, 0x00200020,
- 0x82000d80, 0x00000001, 0x42000800, 0x00200000,
- 0x04000003, 0x42000800, 0x00200020, 0x4807c013,
- 0x800001c0, 0x04000040, 0x82000d80, 0x00000001,
- 0x0402001d, 0x42000800, 0x000000a0, 0x0401f8f1,
- 0x82040540, 0x00000004, 0x42000800, 0x000000a0,
- 0x0401f8f4, 0x42000800, 0x000000c0, 0x0401f8e9,
- 0x82040540, 0x00000020, 0x42000800, 0x000000c0,
- 0x0401f8ec, 0x59c40001, 0x82000500, 0xfffe7fff,
- 0x82000540, 0x00000000, 0x48038801, 0x59a80044,
- 0x80000110, 0x42000800, 0x000000e0, 0x0401f8e1,
- 0x0401f03c, 0x82000d80, 0x00000002, 0x02020800,
- 0x0010032d, 0x42000800, 0x000000a0, 0x0401f8d1,
- 0x82040500, 0xfffffffb, 0x42000800, 0x000000a0,
- 0x0401f8d4, 0x42000800, 0x000000c0, 0x0401f8c9,
- 0x82040500, 0xffffffdf, 0x42000800, 0x000000c0,
- 0x0401f8cc, 0x59c40001, 0x82000500, 0xfffe7fff,
- 0x82000540, 0x00010000, 0x48038801, 0x59a80046,
- 0x80000110, 0x42000800, 0x000000e0, 0x0401f8c1,
- 0x0401f01c, 0x42000800, 0x000000a0, 0x0401f8b5,
- 0x82040540, 0x00000004, 0x42000800, 0x000000a0,
- 0x0401f8b8, 0x42000800, 0x000000c0, 0x0401f8ad,
- 0x82040500, 0xffffffdf, 0x42000800, 0x000000c0,
- 0x0401f8b0, 0x59c40001, 0x82000500, 0xfffe7fff,
- 0x82000540, 0x00008000, 0x48038801, 0x59a80045,
- 0x80000110, 0x42000800, 0x000000e0, 0x0401f8a5,
- 0x1c01f000, 0x40680000, 0x4803c857, 0x59a80873,
- 0x8c040d3e, 0x0402000c, 0x59a80847, 0x82040d80,
- 0x01391077, 0x04020008, 0x59e00813, 0x8c040d00,
- 0x04000005, 0x82000d80, 0x00000002, 0x04020002,
- 0x41780000, 0x4c000000, 0x0401f934, 0x5c000000,
- 0x800001c0, 0x04000026, 0x82000d80, 0x00000001,
- 0x04020010, 0x59a8006a, 0x80000540, 0x04000004,
- 0x42001000, 0x00000000, 0x0401fa45, 0x42000800,
- 0x00000000, 0x0401f87b, 0x82040540, 0x00000090,
- 0x42000800, 0x00000000, 0x0401f87e, 0x0401f024,
- 0x82000d80, 0x00000002, 0x02020800, 0x0010032d,
- 0x59a8006a, 0x80000540, 0x04000004, 0x42001000,
- 0x00010000, 0x0401fa32, 0x42000800, 0x00000000,
- 0x0401f868, 0x82040500, 0xffffff6f, 0x42000800,
- 0x00000000, 0x0401f86b, 0x0401f011, 0x59a8006a,
- 0x80000540, 0x04000004, 0x42001000, 0x00008000,
- 0x0401fa23, 0x42000800, 0x00000000, 0x0401f859,
- 0x82040500, 0xffffff6f, 0x82000540, 0x00000010,
- 0x42000800, 0x00000000, 0x0401f85a, 0x0401f103,
- 0x0401f807, 0x42018800, 0x00000001, 0x04000003,
- 0x42018800, 0x00000000, 0x1c01f000, 0x4c580000,
- 0x4200b000, 0x00000014, 0x8058b040, 0x0400002a,
- 0x59c4000d, 0x8c000520, 0x040207fc, 0x0401f83a,
- 0x59c4000d, 0x8c000520, 0x040207f8, 0x59c40808,
- 0x82040d40, 0x00000100, 0x48078808, 0x4200b000,
- 0x000000c8, 0x8058b040, 0x040207ff, 0x4200b000,
- 0x00000014, 0x8058b040, 0x04000017, 0x59c4000d,
- 0x8c000520, 0x04020014, 0x0401f827, 0x59c4000d,
- 0x8c000520, 0x04020010, 0x4200b000, 0x0000000a,
- 0x8058b040, 0x04000003, 0x0401f81f, 0x0401f7fd,
- 0x4200b000, 0x00000064, 0x59c4000d, 0x8c00051e,
- 0x04000005, 0x8058b040, 0x040207fc, 0x80000580,
- 0x0401f003, 0x82000540, 0x00000001, 0x5c00b000,
- 0x1c01f000, 0x42000800, 0x000000a0, 0x0401f815,
- 0x82040500, 0xfffffffe, 0x42000800, 0x000000a0,
- 0x0401f818, 0x42000800, 0x00000000, 0x0401f80d,
- 0x82040500, 0xfffffffe, 0x42000800, 0x00000000,
- 0x0401f010, 0x40000000, 0x40000000, 0x40000000,
- 0x40000000, 0x40000000, 0x1c01f000, 0x40680800,
- 0x4807880e, 0x59c4080f, 0x82040d00, 0x000000ff,
- 0x40058800, 0x1c01f000, 0x40680800, 0x406c0000,
- 0x900001c0, 0x80040d40, 0x84040d40, 0x4807880e,
- 0x1c01f000, 0x82000d80, 0x00200000, 0x04000009,
- 0x82000d80, 0x02000000, 0x04000006, 0x82000d80,
- 0x01000000, 0x04000006, 0x59c408a3, 0x0401f006,
- 0x59c408a3, 0x84040d30, 0x0401f003, 0x59c408a3,
- 0x84040d32, 0x80040540, 0x480388a3, 0x480788a3,
- 0x1c01f000, 0x59c400a3, 0x84000556, 0x480388a3,
- 0x84000516, 0x480388a3, 0x1c01f000, 0x485fc857,
- 0x4863c857, 0x4c640000, 0x4d3c0000, 0x4d400000,
- 0x0201f800, 0x00106480, 0x48635009, 0x40601800,
- 0x42002000, 0x00000000, 0x0401fa91, 0x42000000,
- 0x0010bc7f, 0x0201f800, 0x0010ae10, 0x82600500,
- 0x0000ff00, 0x82000580, 0x0000f700, 0x04020005,
- 0x42000000, 0x0010bc67, 0x0201f800, 0x0010ae10,
- 0x0201f800, 0x0010af17, 0x04020063, 0x82600d00,
- 0x0000ff00, 0x800409c0, 0x0400000c, 0x4200c800,
- 0x00000001, 0x59a8000f, 0x82000500, 0x000000ff,
- 0x80041110, 0x80081580, 0x0400001f, 0x82041580,
- 0x0000ff00, 0x0400000a, 0x59c410a3, 0x82081500,
- 0x00008000, 0x04000009, 0x59c410a7, 0x82081500,
- 0x0000ff00, 0x82081580, 0x0000ff00, 0x4200c800,
- 0x00000000, 0x04000010, 0x8d0e1d02, 0x04020007,
- 0x8d0e1d00, 0x0402000c, 0x599c1017, 0x8c08151a,
- 0x04000037, 0x850e1d42, 0x4200c800, 0x00000002,
- 0x42028000, 0x00000004, 0x42027800, 0x00000008,
- 0x0401f005, 0x850e1d40, 0x42028000, 0x00000004,
- 0x417a7800, 0x59a80005, 0x8c000502, 0x04020004,
- 0x8d0e1d0a, 0x04020030, 0x850e1d4a, 0x42000000,
- 0x0010bc66, 0x0201f800, 0x0010ae10, 0x59a81809,
- 0x42001000, 0x00008013, 0x0201f800, 0x001031f5,
- 0x8d0e1d20, 0x04000015, 0x4d400000, 0x82600500,
- 0x000000ff, 0x42028800, 0x0000ffff, 0x40643000,
- 0x42028000, 0x0000000e, 0x0201f800, 0x0010a018,
- 0x42000800, 0x00000001, 0x42001000, 0x00000100,
- 0x0201f800, 0x00105ac4, 0x5c028000, 0x599c0817,
- 0x8c040d0a, 0x04020010, 0x493fc857, 0x4943c857,
- 0x0201f800, 0x0010dfe1, 0x0401f00b, 0x8d0e1d20,
- 0x04000009, 0x42028000, 0x0000000f, 0x42028800,
- 0x0000ffff, 0x42003000, 0x00000000, 0x0201f800,
- 0x0010a01b, 0x497b8880, 0x5c028000, 0x5c027800,
- 0x5c00c800, 0x1c01f000, 0x42000800, 0x00000000,
- 0x0401ff54, 0x82040540, 0x00000002, 0x42000800,
- 0x00000000, 0x0401f757, 0x42000800, 0x00000000,
- 0x0401ff4c, 0x82040500, 0xfffffffd, 0x42000800,
- 0x00000000, 0x0401f74f, 0x59c408a8, 0x0401ff3e,
- 0x0401ff3d, 0x59c400a8, 0x80040d80, 0x040207fb,
- 0x1c01f000, 0x4803c856, 0x4a038807, 0x00000001,
- 0x497b8807, 0x59c40005, 0x48038805, 0x497b506a,
- 0x497b506b, 0x59e00024, 0x8c000510, 0x04020038,
- 0x41785800, 0x42006000, 0x00000001, 0x42006800,
- 0x00000003, 0x0401f87c, 0x0401f887, 0x40400000,
- 0x4803c857, 0x82408580, 0x00000000, 0x0402002c,
- 0x41785800, 0x42006000, 0x00000004, 0x42006800,
- 0x00000006, 0x0401f870, 0x0401f87b, 0x40400000,
- 0x4803c857, 0x82408580, 0x0000001a, 0x04020020,
- 0x42005800, 0x00000001, 0x42006000, 0x0000001e,
- 0x42006800, 0x00000014, 0x0401f863, 0x0401f86e,
- 0x40400000, 0x4803c857, 0x82408580, 0x0000ffff,
- 0x04020013, 0x4a03506a, 0x00000001, 0x4803c856,
- 0x42001800, 0x001200f5, 0x0401f9b3, 0x42001800,
- 0x003a0001, 0x0401f9b0, 0x42001800, 0x000200f5,
- 0x0401f9ad, 0x42001800, 0x00020001, 0x0401f9aa,
- 0x42001800, 0x00000001, 0x0401f9a7, 0x1c01f000,
- 0x42005800, 0x00000000, 0x42006000, 0x0000001e,
- 0x40006800, 0x0401f844, 0x0401f84f, 0x40400000,
- 0x1c01f000, 0x59a8006a, 0x80000540, 0x0400003d,
- 0x5c036000, 0x4db00000, 0x49b3c857, 0x4c5c0000,
- 0x4c600000, 0x42000800, 0x00000001, 0x0401f945,
- 0x42000000, 0x0000000a, 0x0401ffea, 0x4000b800,
- 0x825c0480, 0x00000005, 0x02021800, 0x0010032d,
- 0x4200c000, 0x00000008, 0x825c0480, 0x00000004,
- 0x04001003, 0x4200c000, 0x00000004, 0x59c8000b,
- 0x4803c857, 0x59c4009e, 0x82000d80, 0x00000003,
- 0x0402001e, 0x825c0d80, 0x00000003, 0x0400001b,
- 0x485fc857, 0x42000000, 0x00000015, 0x0401ffd1,
- 0x80600540, 0x4c000000, 0x41785800, 0x42006000,
- 0x0000001e, 0x42006800, 0x00000015, 0x0401f812,
- 0x5c000000, 0x40006800, 0x0401f815, 0x82600580,
- 0x00000004, 0x04000003, 0x805cb800, 0x0401f7ea,
- 0x805cb840, 0x825c0580, 0x00000003, 0x02020800,
- 0x0010032d, 0x0401f7e4, 0x5c00c000, 0x5c00b800,
- 0x1c01f000, 0x41785000, 0x0401f812, 0x0401f838,
- 0x40347000, 0x40340800, 0x0401f03d, 0x42005000,
- 0x00000001, 0x0401f80b, 0x0401f831, 0x40340800,
- 0x0401f037, 0x42005000, 0x00000002, 0x0401f805,
- 0x0401f81d, 0x0401f835, 0x40048000, 0x1c01f000,
- 0x0401f808, 0x0401f814, 0x40280800, 0x0401f826,
- 0x402c0800, 0x0401f827, 0x40300800, 0x0401f025,
- 0x42000800, 0x0000ffff, 0x42001000, 0x00000001,
- 0x0401f829, 0x42001000, 0x00000010, 0x0401f826,
- 0x42000800, 0x0000ffff, 0x42001000, 0x00000010,
- 0x0401f021, 0x41780800, 0x42001000, 0x00000002,
- 0x0401f01d, 0x0401f946, 0x4a03d000, 0x00050004,
- 0x0401f943, 0x4a03d000, 0x00050005, 0x0401f940,
- 0x4a03d000, 0x00050004, 0x42000800, 0x00000001,
- 0x42001000, 0x00000001, 0x0401f00f, 0x42000800,
- 0x00000002, 0x42001000, 0x00000002, 0x0401f00a,
- 0x42001000, 0x00000005, 0x0401f007, 0x42001000,
- 0x00000010, 0x0401f004, 0x42001000, 0x00000010,
- 0x0401f01b, 0x0401f92a, 0x82082c00, 0x0010af34,
- 0x50142800, 0x82081500, 0xffffffff, 0x04000013,
- 0x0401f923, 0x80081040, 0x80142902, 0x40040000,
- 0x80140500, 0x04000007, 0x4a03d000, 0x00070006,
- 0x0401f91b, 0x4a03d000, 0x00070007, 0x0401f006,
- 0x4a03d000, 0x00070004, 0x0401f915, 0x4a03d000,
- 0x00070005, 0x0401f7ec, 0x1c01f000, 0x41780800,
- 0x82082c00, 0x0010af34, 0x50142800, 0x82081500,
- 0xffffffff, 0x04000010, 0x0401f909, 0x4a03d000,
- 0x00050001, 0x0401f906, 0x59e81800, 0x80081040,
- 0x80142902, 0x8c0c1d06, 0x04000004, 0x40140000,
- 0x80040d40, 0x0401f8fe, 0x4a03d000, 0x00070000,
- 0x0401f7ef, 0x1c01f000, 0x40681000, 0x4c5c0000,
- 0x4c080000, 0x42000000, 0x00000014, 0x0401ff39,
- 0x4000b800, 0x42000800, 0x00000001, 0x0401f88d,
- 0x5c001000, 0x480bc857, 0x480b506b, 0x59c40001,
- 0x82000500, 0xffffefff, 0x48038801, 0x41781800,
- 0x0401f8d1, 0x41785800, 0x42006000, 0x0000001e,
- 0x42006800, 0x00000004, 0x0401ff6f, 0x42006800,
- 0x0000003c, 0x0401ff72, 0x41785800, 0x42006000,
- 0x0000001e, 0x42006800, 0x00000004, 0x0401ff66,
- 0x41786800, 0x0401ff6a, 0x41785800, 0x42006000,
- 0x0000001e, 0x41786800, 0x0401ff5f, 0x42006800,
- 0x00000002, 0x0401ff62, 0x42006800, 0x00000001,
- 0x0401ff59, 0x42006800, 0x000000f5, 0x0401ff5c,
- 0x41785800, 0x42006000, 0x0000001e, 0x42006800,
- 0x00000004, 0x0401ff50, 0x42006800, 0x00000020,
- 0x0401ff53, 0x59a8106b, 0x0401f872, 0x42001800,
- 0x000200f5, 0x0401f8a4, 0x59a8106b, 0x0401f886,
- 0x41785800, 0x42006000, 0x0000001e, 0x42006800,
- 0x00000004, 0x0401ff40, 0x41786800, 0x0401ff44,
- 0x42000000, 0x00000015, 0x0401fef2, 0x82000540,
- 0x00000002, 0x4c000000, 0x41785800, 0x42006000,
- 0x0000001e, 0x42006800, 0x00000015, 0x0401ff32,
- 0x5c000000, 0x40006800, 0x0401ff35, 0x42000000,
- 0x00000015, 0x0401fee3, 0x82000500, 0x0000fffd,
- 0x4c000000, 0x41785800, 0x42006000, 0x0000001e,
- 0x42006800, 0x00000015, 0x0401ff23, 0x5c000000,
- 0x40006800, 0x0401ff26, 0x42000000, 0x00000014,
- 0x0401fed4, 0x82000540, 0x00000040, 0x4c000000,
- 0x41785800, 0x42006000, 0x0000001e, 0x42006800,
- 0x00000014, 0x0401ff14, 0x5c000000, 0x40006800,
- 0x0401ff17, 0x42000000, 0x00000014, 0x0401fec5,
- 0x82000500, 0x0000ffbf, 0x4c000000, 0x41785800,
- 0x42006000, 0x0000001e, 0x42006800, 0x00000014,
- 0x0401ff05, 0x5c000000, 0x40006800, 0x0401ff08,
- 0x4a038886, 0x00002020, 0x41780800, 0x8c5cbd06,
- 0x04000003, 0x42000800, 0x00000001, 0x0401f809,
- 0x59c40001, 0x82000540, 0x00001000, 0x48038801,
- 0x0401f867, 0x0401feb4, 0x5c00b800, 0x1c01f000,
- 0x59a8006a, 0x80000540, 0x04000015, 0x4807c857,
- 0x42000000, 0x00000014, 0x4c040000, 0x0401fea1,
- 0x5c000800, 0x84000546, 0x800409c0, 0x04020002,
- 0x84000506, 0x4c000000, 0x41785800, 0x42006000,
- 0x0000001e, 0x42006800, 0x00000014, 0x0401fede,
- 0x5c000000, 0x40006800, 0x0401fee1, 0x1c01f000,
- 0x480bc857, 0x82080580, 0x00010000, 0x04020007,
- 0x82040d40, 0x00010000, 0x42001800, 0x00000001,
- 0x0401f82d, 0x0401f00f, 0x82080580, 0x00008000,
- 0x04000007, 0x82040d40, 0x00000000, 0x42001800,
- 0x00900001, 0x0401f824, 0x0401f006, 0x82040d40,
- 0x00008000, 0x42001800, 0x00100001, 0x0401f81e,
- 0x1c01f000, 0x480bc857, 0x82080580, 0x00010000,
- 0x04020008, 0x42001800, 0x000000a1, 0x0401f816,
- 0x42001800, 0x000000c1, 0x0401f813, 0x0401f011,
- 0x82080580, 0x00008000, 0x04000008, 0x42001800,
- 0x000400a1, 0x0401f80c, 0x42001800, 0x002000c1,
- 0x0401f809, 0x0401f007, 0x42001800, 0x000400a1,
- 0x0401f805, 0x42001800, 0x000000c1, 0x0401f802,
- 0x1c01f000, 0x480fc857, 0x41785800, 0x42006000,
- 0x0000001e, 0x41786800, 0x0401fe9f, 0x400c6800,
- 0x80346960, 0x0401fea2, 0x42006800, 0x00000001,
- 0x0401fe99, 0x400c6800, 0x0401fe9d, 0x42006800,
- 0x00000003, 0x0401fe94, 0x0401fe9f, 0x40400000,
- 0x8c000504, 0x040207fc, 0x1c01f000, 0x40000000,
- 0x40000000, 0x40000000, 0x1c01f000, 0x59a80005,
- 0x8c000500, 0x0400000a, 0x59a80008, 0x8c000500,
- 0x04020007, 0x84000540, 0x48035008, 0x42001000,
- 0x00008016, 0x0201f800, 0x001031f5, 0x1c01f000,
- 0x4803c856, 0x59a80006, 0x8c00051e, 0x0402000a,
- 0x42028800, 0x000007fc, 0x42003000, 0x00fffffc,
- 0x0201f800, 0x00103de1, 0x04020008, 0x0401f809,
- 0x04000006, 0x4a03501c, 0x0000ffff, 0x82000540,
- 0x00000001, 0x1c01f000, 0x80000580, 0x0401f7fe,
- 0x4937c857, 0x0201f800, 0x00107188, 0x04000016,
- 0x4936600a, 0x4a026407, 0x00000001, 0x417a7800,
- 0x0201f800, 0x00103d92, 0x42000800, 0x00000003,
- 0x0201f800, 0x00103d9d, 0x59a8001d, 0x80000000,
- 0x4803501d, 0x599c0208, 0x48026c12, 0x42027000,
- 0x00000002, 0x0201f800, 0x00020a34, 0x82000540,
- 0x00000001, 0x1c01f000, 0x40681000, 0x0401f807,
- 0x42018800, 0x00000000, 0x04000003, 0x42018800,
- 0x00000001, 0x1c01f000, 0x480bc857, 0x492fc857,
- 0x4c5c0000, 0x4008b800, 0x42028800, 0x000007fd,
- 0x42003000, 0x00fffffd, 0x0201f800, 0x00103de1,
- 0x0402001e, 0x5934000a, 0x84000544, 0x4802680a,
- 0x0201f800, 0x00107188, 0x04000018, 0x4936600a,
- 0x812e59c0, 0x04000006, 0x592c0405, 0x8c00051e,
- 0x04000003, 0x48ee6022, 0x0401f004, 0x59a8021b,
- 0x8400055c, 0x4803521b, 0x492e6009, 0x4a026407,
- 0x00000001, 0x485e601d, 0x42027000, 0x00000022,
- 0x0201f800, 0x00020a34, 0x82000540, 0x00000001,
- 0x5c00b800, 0x1c01f000, 0x80000580, 0x0401f7fd,
- 0x4933c857, 0x59a8021b, 0x8c000508, 0x04020012,
- 0x5930500a, 0x482bc857, 0x836c0580, 0x00000002,
- 0x0402000d, 0x0401f817, 0x0402000b, 0x58280403,
- 0x82000580, 0x000007fc, 0x04000008, 0x59a80016,
- 0x80000040, 0x4803c857, 0x02001800, 0x0010032d,
- 0x48035016, 0x1c01f000, 0x5930041e, 0x82000580,
- 0x00000021, 0x040007fc, 0x59a8001d, 0x80000040,
- 0x4803c857, 0x040017f8, 0x4803501d, 0x1c01f000,
- 0x59300009, 0x800001c0, 0x04020009, 0x59300403,
- 0x82000580, 0x00000001, 0x04020004, 0x82000540,
- 0x00000001, 0x0401f002, 0x80000580, 0x1c01f000,
- 0x4933c857, 0x493fc857, 0x4947c857, 0x4d400000,
- 0x4d340000, 0x4d440000, 0x4c580000, 0x0201f800,
- 0x001061b2, 0x4df00000, 0x8060c1c0, 0x04020004,
- 0x4200b000, 0x00000001, 0x0401f004, 0x4200b000,
- 0x000007f0, 0x417a8800, 0x41440000, 0x81ac0400,
- 0x50000000, 0x80026d40, 0x0400001a, 0x4d3c0000,
- 0x42027800, 0x00000001, 0x0201f800, 0x001040ef,
- 0x5c027800, 0x42028000, 0x00000029, 0x0201f800,
- 0x0010e5d8, 0x0201f800, 0x0010e6a9, 0x0201f800,
- 0x0010e742, 0x0201f800, 0x00104181, 0x04020005,
- 0x4937c857, 0x4a026c00, 0x00000404, 0x0401f003,
- 0x0201f800, 0x001041bc, 0x0201f800, 0x0010eb5d,
- 0x81468800, 0x8058b040, 0x040207e0, 0x5c03e000,
- 0x02000800, 0x0010619f, 0x5c00b000, 0x5c028800,
- 0x5c026800, 0x5c028000, 0x1c01f000, 0x0401f807,
- 0x42018800, 0x00000001, 0x04000003, 0x42018800,
- 0x00000000, 0x1c01f000, 0x4937c857, 0x4947c857,
- 0x4c5c0000, 0x4c600000, 0x4c640000, 0x59a80056,
- 0x8c000500, 0x0400001f, 0x599c0017, 0x8c00050a,
- 0x0402001c, 0x5934ba02, 0x825cbd00, 0x000000ff,
- 0x485fc857, 0x4178c000, 0x4178c800, 0x82600400,
- 0x0010c2c7, 0x50002000, 0x8060c1c0, 0x04000008,
- 0x82100500, 0x000000ff, 0x82002d80, 0x000000ff,
- 0x0400000c, 0x805c0580, 0x0400000d, 0x80102110,
- 0x8064c800, 0x82640580, 0x00000004, 0x040207f5,
- 0x8060c000, 0x82600580, 0x00000020, 0x040207eb,
- 0x4813c857, 0x82000540, 0x00000001, 0x5c00c800,
- 0x5c00c000, 0x5c00b800, 0x1c01f000, 0x0401f807,
- 0x42018800, 0x00000001, 0x04020003, 0x42018800,
- 0x00000000, 0x1c01f000, 0x59a8021b, 0x8c000512,
- 0x02020800, 0x001003f4, 0x1c01f000, 0x00007eef,
- 0x00007de8, 0x00007ce4, 0x000080e2, 0x00007be1,
- 0x000080e0, 0x000080dc, 0x000080da, 0x00007ad9,
- 0x000080d6, 0x000080d5, 0x000080d4, 0x000080d3,
- 0x000080d2, 0x000080d1, 0x000079ce, 0x000078cd,
- 0x000080cc, 0x000080cb, 0x000080ca, 0x000080c9,
- 0x000080c7, 0x000080c6, 0x000077c5, 0x000076c3,
- 0x000080bc, 0x000080ba, 0x000075b9, 0x000080b6,
- 0x000074b5, 0x000073b4, 0x000072b3, 0x000080b2,
- 0x000080b1, 0x000080ae, 0x000071ad, 0x000080ac,
- 0x000070ab, 0x00006faa, 0x00006ea9, 0x000080a7,
- 0x00006da6, 0x00006ca5, 0x00006ba3, 0x00006a9f,
- 0x0000699e, 0x0000689d, 0x0000809b, 0x00008098,
- 0x00006797, 0x00006690, 0x0000658f, 0x00006488,
- 0x00006384, 0x00006282, 0x00008081, 0x00008080,
- 0x0000617c, 0x0000607a, 0x00008079, 0x00005f76,
- 0x00008075, 0x00008074, 0x00008073, 0x00008072,
- 0x00008071, 0x0000806e, 0x00005e6d, 0x0000806c,
- 0x00005d6b, 0x00005c6a, 0x00005b69, 0x00008067,
- 0x00005a66, 0x00005965, 0x00005863, 0x0000575c,
- 0x0000565a, 0x00005559, 0x00008056, 0x00008055,
- 0x00005454, 0x00005353, 0x00005252, 0x00005151,
- 0x0000504e, 0x00004f4d, 0x0000804c, 0x0000804b,
- 0x00004e4a, 0x00004d49, 0x00008047, 0x00004c46,
- 0x00008045, 0x00008043, 0x0000803c, 0x0000803a,
- 0x00008039, 0x00008036, 0x00004b35, 0x00008034,
- 0x00004a33, 0x00004932, 0x00004831, 0x0000802e,
- 0x0000472d, 0x0000462c, 0x0000452b, 0x0000442a,
- 0x00004329, 0x00004227, 0x00008026, 0x00008025,
- 0x00004123, 0x0000401f, 0x00003f1e, 0x00003e1d,
- 0x00003d1b, 0x00003c18, 0x00008017, 0x00008010,
- 0x00003b0f, 0x00003a08, 0x00008004, 0x00003902,
- 0x00008001, 0x00008000, 0x00008000, 0x00003800,
- 0x00003700, 0x00003600, 0x00008000, 0x00003500,
- 0x00008000, 0x00008000, 0x00008000, 0x00003400,
- 0x00008000, 0x00008000, 0x00008000, 0x00008000,
- 0x00008000, 0x00008000, 0x00003300, 0x00003200,
- 0x00008000, 0x00008000, 0x00008000, 0x00008000,
- 0x00008000, 0x00008000, 0x00003100, 0x00003000,
- 0x00008000, 0x00008000, 0x00002f00, 0x00008000,
- 0x00002e00, 0x00002d00, 0x00002c00, 0x00008000,
- 0x00008000, 0x00008000, 0x00002b00, 0x00008000,
- 0x00002a00, 0x00002900, 0x00002800, 0x00008000,
- 0x00002700, 0x00002600, 0x00002500, 0x00002400,
- 0x00002300, 0x00002200, 0x00008000, 0x00008000,
- 0x00002100, 0x00002000, 0x00001f00, 0x00001e00,
- 0x00001d00, 0x00001c00, 0x00008000, 0x00008000,
- 0x00001b00, 0x00001a00, 0x00008000, 0x00001900,
- 0x00008000, 0x00008000, 0x00008000, 0x00008000,
- 0x00008000, 0x00008000, 0x00001800, 0x00008000,
- 0x00001700, 0x00001600, 0x00001500, 0x00008000,
- 0x00001400, 0x00001300, 0x00001200, 0x00001100,
- 0x00001000, 0x00000f00, 0x00008000, 0x00008000,
- 0x00000e00, 0x00000d00, 0x00000c00, 0x00000b00,
- 0x00000a00, 0x00000900, 0x00008000, 0x00008000,
- 0x00000800, 0x00000700, 0x00008000, 0x00000600,
- 0x00008000, 0x00008000, 0x00008000, 0x00000500,
- 0x00000400, 0x00000300, 0x00008000, 0x00000200,
- 0x00008000, 0x00008000, 0x00008000, 0x00000100,
- 0x00008000, 0x00008000, 0x00008000, 0x00008000,
- 0x00008000, 0x00008000, 0x00000000, 0x00008000,
- 0x00008000, 0x00008000, 0x00008000, 0x00008000,
- 0x00008000, 0x00008000, 0x00008000, 0x00008000,
- 0x00008000, 0x00008000, 0x00008000, 0x00008000,
- 0x00008000, 0x00008000, 0x00008000, 0x0201f800,
- 0x0010055a, 0x02000800, 0x0010032d, 0x492f4017,
- 0x1c01f000, 0x83a0ac00, 0x00000007, 0x83a00580,
- 0x0010b8fa, 0x0400000c, 0x492fc857, 0x812e59c0,
- 0x02000800, 0x0010032d, 0x832ca400, 0x00000007,
- 0x4200b000, 0x0000000d, 0x0201f800, 0x0010aee2,
- 0x0401f00f, 0x4200b000, 0x00000010, 0x83e0a400,
- 0x00000020, 0x50500000, 0x8050a000, 0x50500800,
- 0x900409c0, 0x80040540, 0x4400a800, 0x8050a000,
- 0x8054a800, 0x8058b040, 0x040207f7, 0x1c01f000,
- 0x59a00207, 0x82000c80, 0x0000007f, 0x040210bf,
- 0x0c01f001, 0x00101cbf, 0x00101cf6, 0x00101cf6,
- 0x00101d45, 0x00101d61, 0x00101cf6, 0x00101cbf,
- 0x00101d7d, 0x00101d8e, 0x00101cf6, 0x00101cf6,
- 0x00101da0, 0x00101db8, 0x00101dd0, 0x00101cf6,
- 0x00101df7, 0x00101e21, 0x00101cf6, 0x00101e4a,
- 0x00101cf6, 0x00101f11, 0x00101cf6, 0x00101cf6,
- 0x00101cf6, 0x00101cf6, 0x00101f3c, 0x00101f9f,
- 0x00101cf6, 0x00101cf6, 0x00101cf6, 0x00101cf6,
- 0x00101cf6, 0x00101ff7, 0x00101cf6, 0x00102049,
- 0x00101cf6, 0x00101cf6, 0x00101cf6, 0x00101cf6,
- 0x0010204e, 0x001020df, 0x00101cf6, 0x001020e7,
- 0x00101cf6, 0x00101cf6, 0x00101cf6, 0x00101cf6,
- 0x00101cf6, 0x001020e9, 0x00102172, 0x0010234d,
- 0x00101cf6, 0x00101cf6, 0x00101cf6, 0x00101cf6,
- 0x00101cf6, 0x0010235c, 0x00101cf6, 0x00102379,
- 0x00101cf6, 0x00101cf6, 0x00101cf6, 0x00101cf6,
- 0x00101cf6, 0x001023a4, 0x001023f7, 0x00102453,
- 0x0010246a, 0x0010d814, 0x0010ddf5, 0x001024b6,
- 0x00101cf6, 0x00101cf6, 0x00101cf6, 0x00101cf6,
- 0x00101cf6, 0x00101cf6, 0x00101cf6, 0x00101cf6,
- 0x00101cf6, 0x00101cf6, 0x00101cf6, 0x00101cf6,
- 0x0010260d, 0x00102681, 0x00101cf6, 0x00101cf6,
- 0x001026ef, 0x00101cf6, 0x0010278e, 0x0010283e,
- 0x00101cf6, 0x00101cf6, 0x001028d0, 0x0010293a,
- 0x00101cf6, 0x00102992, 0x00102b15, 0x00101cf6,
- 0x00102b29, 0x00102bb4, 0x00101cf6, 0x00101cf6,
- 0x00101cf6, 0x00101cf6, 0x00102c24, 0x00102c36,
- 0x00102c55, 0x00101cf6, 0x00102cf7, 0x00101cf6,
- 0x00101cf6, 0x00102d3b, 0x00101cf6, 0x00102d6a,
- 0x00101cf6, 0x00101cf6, 0x00102dd1, 0x00102f2a,
- 0x00102f87, 0x00101cf6, 0x00102fe9, 0x00101cf6,
- 0x00101cf6, 0x0010303e, 0x001030d0, 0x00101cf6,
- 0x48efc857, 0x4031d800, 0x58ef400a, 0x58ec0002,
- 0x82000580, 0x00000200, 0x0400003c, 0x48efc857,
- 0x4a034207, 0x00004000, 0x0201f800, 0x001031c4,
- 0x83a00580, 0x0010b8fa, 0x0400000e, 0x58ee5809,
- 0x4d2c0000, 0x0401f84d, 0x41a25800, 0x0201f800,
- 0x00100580, 0x40ee5800, 0x0201f800, 0x00100580,
- 0x5c025800, 0x492fc857, 0x0201f000, 0x000203ab,
- 0x04026007, 0x59a0001e, 0x84000542, 0x4803401e,
- 0x4a01d808, 0x00101cd4, 0x1c01f000, 0x59a00207,
- 0x82000d80, 0x00004000, 0x04000006, 0x900001c0,
- 0x82000540, 0x00000011, 0x4803c011, 0x0401f005,
- 0x900001c0, 0x82000540, 0x00000010, 0x4803c011,
- 0x0401f841, 0x4a03c017, 0x00000000, 0x4203e000,
- 0x30000001, 0x4203e000, 0x40000000, 0x40ee5800,
- 0x0201f800, 0x00100580, 0x59a0001e, 0x84000504,
- 0x4803401e, 0x1c01f000, 0x4803c856, 0x4a034207,
- 0x00004001, 0x0401f7c9, 0x4803c856, 0x4a034207,
- 0x00004002, 0x0401f7c5, 0x4803c856, 0x4a034207,
- 0x00004003, 0x0401f7c1, 0x4803c856, 0x4a034207,
- 0x00004005, 0x0401f7bd, 0x4803c856, 0x4a034207,
- 0x00004006, 0x0401f7b9, 0x4803c856, 0x4a034207,
- 0x0000400b, 0x0401f7b5, 0x4803c856, 0x4a034207,
- 0x0000400c, 0x0401f7b1, 0x4803c856, 0x4a034207,
- 0x0000400c, 0x0401f7ad, 0x4c580000, 0x4c500000,
- 0x4c540000, 0x58eca809, 0x8054a9c0, 0x02000800,
- 0x0010032d, 0x83a0a400, 0x00000007, 0x8254ac00,
- 0x00000007, 0x4200b000, 0x0000000d, 0x0201f800,
- 0x0010aee2, 0x5c00a800, 0x5c00a000, 0x5c00b000,
- 0x1c01f000, 0x4c580000, 0x4c500000, 0x4c540000,
- 0x59a00007, 0x4803c857, 0x59a00008, 0x4803c857,
- 0x59a00009, 0x4803c857, 0x83e0ac00, 0x00000020,
- 0x83a0a400, 0x00000007, 0x4200b000, 0x00000010,
- 0x50500000, 0x4400a800, 0x8054a800, 0x900001c0,
- 0x4400a800, 0x8054a800, 0x8050a000, 0x8058b040,
- 0x040207f8, 0x5c00a800, 0x5c00a000, 0x5c00b000,
- 0x1c01f000, 0x59a00407, 0x800000c2, 0x59a00a08,
- 0x900409c0, 0x80040540, 0x84000540, 0x59a00c08,
- 0x8c040d00, 0x04000012, 0x59a8086d, 0x8c040d00,
- 0x040207b6, 0x4c000000, 0x0201f800, 0x0010af26,
- 0x5c000000, 0x04000005, 0x48030004, 0x4a030000,
- 0x00000000, 0x0401f766, 0x4a030000, 0x00000000,
- 0x4a034407, 0x00000004, 0x040007a4, 0x4803880e,
- 0x0401f75f, 0x59a00407, 0x800000c2, 0x59a00c08,
- 0x8c040d00, 0x04000014, 0x59a8086d, 0x8c040d00,
- 0x0402079e, 0x4c000000, 0x0201f800, 0x0010af26,
- 0x5c000000, 0x04000007, 0x48030004, 0x59800805,
- 0x48074407, 0x4a030000, 0x00000000, 0x0401f74c,
- 0x4a030000, 0x00000000, 0x4a034407, 0x00000004,
- 0x0400078a, 0x4803880e, 0x59c4080f, 0x48074407,
- 0x0401f743, 0x59a01c07, 0x59a00208, 0x900c19c0,
- 0x800c1d40, 0x580c0803, 0x80000580, 0x500c1000,
- 0x80080400, 0x800c1800, 0x80040840, 0x040207fc,
- 0x48034407, 0x900001c0, 0x48034208, 0x800001c0,
- 0x04000733, 0x0401f771, 0x4a034407, 0x00000005,
- 0x4a034208, 0x00000005, 0x4a034408, 0x00000000,
- 0x59a8000a, 0x48034209, 0x900001c0, 0x48034409,
- 0x42000000, 0x00008482, 0x4803420a, 0x900001c0,
- 0x4803440e, 0x4a03400f, 0x00000000, 0x0401f720,
- 0x59a00408, 0x59a01208, 0x900811c0, 0x80081540,
- 0x59a0040a, 0x59a01a0a, 0x900c19c0, 0x800c1d40,
- 0x59a00a09, 0x59a00409, 0x900409c0, 0x80040d40,
- 0x59a0020b, 0x82002480, 0x00000010, 0x04001757,
- 0x59a02407, 0x900001c0, 0x80100540, 0x59a8280a,
- 0x80142480, 0x04001751, 0x0201f000, 0x001031d3,
- 0x59a00408, 0x59a01208, 0x900811c0, 0x80081540,
- 0x59a0040a, 0x59a01a0a, 0x900c19c0, 0x800c1d40,
- 0x59a00a09, 0x59a00409, 0x900409c0, 0x80040d40,
- 0x59a0020b, 0x82002480, 0x00000010, 0x0400173f,
- 0x59a02407, 0x900001c0, 0x80100540, 0x59a8280a,
- 0x80142480, 0x04001739, 0x0201f000, 0x001031dc,
- 0x59a02408, 0x59a00208, 0x901021c0, 0x80102540,
- 0x59a01a0b, 0x59a00407, 0x900c19c0, 0x800c1d40,
- 0x41781000, 0x42000000, 0x00001000, 0x50000000,
- 0x82000480, 0x24320001, 0x0400100e, 0x820c0580,
- 0x00007c00, 0x0400000b, 0x820c0480, 0x00007a00,
- 0x04001008, 0x820c0480, 0x00007cff, 0x04021005,
- 0x0201f800, 0x0010af26, 0x04000008, 0x80081000,
- 0x44101800, 0x800811c0, 0x040006d1, 0x4a030000,
- 0x00000000, 0x0401f6ce, 0x4a030000, 0x00000000,
- 0x4a034407, 0x00000004, 0x0401f70c, 0x59a01a0b,
- 0x59a00407, 0x900c19c0, 0x800c1d40, 0x41781000,
- 0x42000000, 0x00001000, 0x50000000, 0x82000480,
- 0x24320001, 0x0400100e, 0x820c0580, 0x00007c00,
- 0x0400000b, 0x820c0480, 0x00007a00, 0x04001008,
- 0x820c0480, 0x00007cff, 0x04021005, 0x0201f800,
- 0x0010af26, 0x0400000f, 0x80081000, 0x500c0000,
- 0x82000d00, 0x0000ffff, 0x48074208, 0x82000d00,
- 0xffff0000, 0x900409c0, 0x48074408, 0x800811c0,
- 0x040006a7, 0x4a030000, 0x00000000, 0x0401f6a4,
- 0x4a030000, 0x00000000, 0x4a034407, 0x00000004,
- 0x0401f6e2, 0x59a00407, 0x8c000500, 0x04000020,
- 0x59a01208, 0x59a01c08, 0x59a02209, 0x480b5044,
- 0x480f5045, 0x48135046, 0x59c40801, 0x82040d00,
- 0x00018000, 0x82040580, 0x00000000, 0x04000009,
- 0x82040580, 0x00008000, 0x04000008, 0x82040580,
- 0x00010000, 0x04000007, 0x0201f800, 0x0010032d,
- 0x40080000, 0x0401f004, 0x400c0000, 0x0401f002,
- 0x40100000, 0x80000110, 0x42000800, 0x000000e0,
- 0x0201f800, 0x00101740, 0x0401f007, 0x59a81044,
- 0x59a81845, 0x59a82046, 0x480b4208, 0x480f4408,
- 0x48134209, 0x0401f676, 0x4d2c0000, 0x4d340000,
- 0x4d300000, 0x4d440000, 0x59a28c07, 0x0201f800,
- 0x00020319, 0x04000006, 0x5c028800, 0x5c026000,
- 0x5c026800, 0x5c025800, 0x0401f6b0, 0x4937c857,
- 0x59a04408, 0x59a00208, 0x900001c0, 0x80204540,
- 0x4823c857, 0x0401f88a, 0x04000009, 0x4a034209,
- 0x00000001, 0x4a034407, 0x0000ffff, 0x4a034208,
- 0x0000ffff, 0x497b4408, 0x0401f04b, 0x497b4407,
- 0x0401f88b, 0x0400004d, 0x59300402, 0x48034407,
- 0x59300202, 0x48034208, 0x59300006, 0x48034408,
- 0x59a0020c, 0x8c000500, 0x0400003d, 0x4933c857,
- 0x0201f800, 0x00104194, 0x04000004, 0x4a034407,
- 0x00000009, 0x0401f03d, 0x8d0e1d0e, 0x04000004,
- 0x4a034407, 0x00000001, 0x0401f038, 0x836c0580,
- 0x00000003, 0x04000004, 0x4a034407, 0x00000007,
- 0x0401f032, 0x59340200, 0x8c00050e, 0x04000004,
- 0x4a034407, 0x00000020, 0x0401f02c, 0x59300407,
- 0x82000d80, 0x00000003, 0x04020009, 0x59300804,
- 0x82040500, 0x0000001f, 0x82000580, 0x00000004,
- 0x04020003, 0x8c040d3e, 0x04020019, 0x0201f800,
- 0x001031af, 0x04020004, 0x4a034407, 0x00000002,
- 0x0401f01a, 0x492fc857, 0x4a025c05, 0x00008000,
- 0x497a5a05, 0x497a5806, 0x0201f800, 0x001092c1,
- 0x04020004, 0x4a034407, 0x00000003, 0x0401f00f,
- 0x4a01d808, 0x00101ebb, 0x5c028800, 0x5c026000,
- 0x5c026800, 0x5c025800, 0x1c01f000, 0x4a034209,
- 0x00000002, 0x5c028800, 0x5c026000, 0x5c026800,
- 0x5c025800, 0x0401f60a, 0x5c028800, 0x5c026000,
- 0x5c026800, 0x5c025800, 0x0401f648, 0x492fc857,
- 0x4933c857, 0x497a601f, 0x592c0006, 0x82000580,
- 0x01000000, 0x04020004, 0x4a034407, 0x00000004,
- 0x0401f63e, 0x4d2c0000, 0x832e5c00, 0x00000007,
- 0x592c0000, 0x82000580, 0x02000000, 0x04020012,
- 0x4803c856, 0x4a034209, 0x00000004, 0x592c0804,
- 0x82040500, 0x0000ffff, 0x48034409, 0x80040920,
- 0x4807420a, 0x592c0805, 0x82040500, 0x0000ffff,
- 0x4803440a, 0x80040920, 0x4807420b, 0x5c025800,
- 0x0401f5e3, 0x4803c856, 0x4a034209, 0x00000005,
- 0x592c0801, 0x82040500, 0x0000ffff, 0x48034409,
- 0x80040920, 0x4807420a, 0x0401f7f5, 0x4937c857,
- 0x4823c857, 0x5934000f, 0x80001d40, 0x04000005,
- 0x580c0006, 0x80200580, 0x04020003, 0x81780000,
- 0x1c01f000, 0x580c0000, 0x0401f7f8, 0x4823c857,
- 0x4d2c0000, 0x42026000, 0x0010f694, 0x59300407,
- 0x82000d80, 0x00000003, 0x04000004, 0x82000d80,
- 0x00000006, 0x04020007, 0x59325809, 0x812e59c0,
- 0x04000004, 0x592c0006, 0x80200580, 0x0400000a,
- 0x83326400, 0x00000024, 0x59a8000b, 0x81300480,
- 0x040017ef, 0x417a6000, 0x80000580, 0x5c025800,
- 0x1c01f000, 0x82000540, 0x00000001, 0x5c025800,
- 0x1c01f000, 0x83a00580, 0x0010b8fa, 0x040205e3,
- 0x59a8006d, 0x8c000500, 0x04020003, 0x4a030000,
- 0x00000000, 0x4a034207, 0x00004000, 0x4a03c011,
- 0x40000010, 0x0401fe0c, 0x4a03c017, 0x00000000,
- 0x59e00002, 0x8c00051e, 0x04020008, 0x42000000,
- 0x00001000, 0x50000000, 0x82000480, 0x24320002,
- 0x02000000, 0x00020238, 0x59a80073, 0x8c00053e,
- 0x0400000b, 0x42000800, 0x000000a0, 0x0201f800,
- 0x00101738, 0x82040540, 0x00000001, 0x42000800,
- 0x000000a0, 0x0201f800, 0x00101740, 0x4203e000,
- 0x30000001, 0x4203e000, 0x40000000, 0x0401f000,
- 0x59a00c07, 0x800409c0, 0x04000007, 0x836c0580,
- 0x00000000, 0x04000004, 0x4a034407, 0x0000001a,
- 0x0401f5be, 0x42007000, 0x0010b995, 0x58381c01,
- 0x58382201, 0x58383202, 0x8c040d00, 0x0400000b,
- 0x59a01208, 0x82080500, 0x0000f003, 0x040205b7,
- 0x82080480, 0x00000841, 0x040215b4, 0x82080480,
- 0x00000100, 0x040015b1, 0x40040000, 0x800c0540,
- 0x82000500, 0x00000028, 0x82000580, 0x00000028,
- 0x040005aa, 0x8c040d0a, 0x04000008, 0x59a03c08,
- 0x821c0480, 0x00000006, 0x040215a4, 0x821c0480,
- 0x00000001, 0x040015a1, 0x8c040d06, 0x04000003,
- 0x4a0378e4, 0x000c0000, 0x8c040d04, 0x04000004,
- 0x59e00002, 0x84000548, 0x4803c002, 0x8c040d02,
- 0x04000005, 0x42002800, 0x00007600, 0x4a002805,
- 0xd0000000, 0x40040000, 0x800c0540, 0x48007401,
- 0x8c040d00, 0x04000002, 0x48087201, 0x8c040d0a,
- 0x0400001f, 0x481c7202, 0x4c0c0000, 0x4c100000,
- 0x4c180000, 0x0201f800, 0x001061b2, 0x4df00000,
- 0x58383a02, 0x481fc857, 0x41780000, 0x801c3840,
- 0x800010c8, 0x82081400, 0x0000bf32, 0x4a001001,
- 0x00000000, 0x801c1c80, 0x04021003, 0x4a001001,
- 0x00000002, 0x80000000, 0x82001c80, 0x00000005,
- 0x040017f4, 0x5c03e000, 0x02000800, 0x0010619f,
- 0x5c003000, 0x5c002000, 0x5c001800, 0x480f4407,
- 0x48134208, 0x481b4408, 0x0401f521, 0x4d440000,
- 0x4d340000, 0x59a28c07, 0x0201f800, 0x00020319,
- 0x04020009, 0x0201f800, 0x00104194, 0x04000009,
- 0x4a034407, 0x00000009, 0x5c026800, 0x5c028800,
- 0x0401f556, 0x5c026800, 0x5c028800, 0x0401f557,
- 0x59a01208, 0x59a01c08, 0x5934400a, 0x82203d00,
- 0x0000e000, 0x801c391a, 0x8c081500, 0x04000024,
- 0x820c0d00, 0x00000007, 0x82040580, 0x00000000,
- 0x04000010, 0x82040580, 0x00000001, 0x0400000d,
- 0x82040580, 0x00000003, 0x0400000a, 0x82040580,
- 0x00000004, 0x04000007, 0x82040580, 0x00000013,
- 0x04000004, 0x4937c857, 0x42000800, 0x00000003,
- 0x82204500, 0xffff1fff, 0x800400da, 0x80200540,
- 0x4802680a, 0x4c080000, 0x4c1c0000, 0x0201f800,
- 0x001061b2, 0x0201f800, 0x0010446b, 0x0201f800,
- 0x0010619f, 0x5c003800, 0x5c001000, 0x481f4408,
- 0x5934400a, 0x82203d00, 0x0f000000, 0x801c3930,
- 0x8c081504, 0x04020012, 0x8c081502, 0x0400000c,
- 0x4823c857, 0x82204500, 0xf0ffffff, 0x59a01a09,
- 0x820c0d00, 0x0000000f, 0x800400f0, 0x8400056e,
- 0x80200540, 0x4802680a, 0x4803c857, 0x481f4209,
- 0x5c026800, 0x5c028800, 0x0401f4cd, 0x82204500,
- 0xf07fffff, 0x4822680a, 0x0401f7f9, 0x8d0e1d0e,
- 0x04000004, 0x4a034407, 0x00000001, 0x0401f507,
- 0x836c0580, 0x00000003, 0x04020010, 0x59a8000f,
- 0x497b4407, 0x0201f800, 0x00104755, 0x0400000f,
- 0x82000d00, 0x00ffff00, 0x0402000c, 0x82000c00,
- 0x00101b0f, 0x50040800, 0x80040910, 0x82041580,
- 0x00000080, 0x04020004, 0x4a034407, 0x00000007,
- 0x0401f4f2, 0x48074407, 0x82000d00, 0x0000ffff,
- 0x48074208, 0x80000120, 0x48034408, 0x59a8021b,
- 0x82001500, 0x00002100, 0x480b440a, 0x8c000502,
- 0x0400001f, 0x8c000506, 0x04000009, 0x82000d00,
- 0x0000000a, 0x82040d80, 0x0000000a, 0x04020004,
- 0x4a03420a, 0x00000001, 0x0401f022, 0x8c00050a,
- 0x04000009, 0x82000d00, 0x00000022, 0x82040d80,
- 0x00000022, 0x04020004, 0x4a03420a, 0x00000003,
- 0x0401f018, 0x8c000508, 0x04000009, 0x82000d00,
- 0x00000012, 0x82040d80, 0x00000012, 0x04020004,
- 0x4a03420a, 0x00000002, 0x0401f00e, 0x0201f800,
- 0x00104755, 0x04020004, 0x4a03420a, 0x00000004,
- 0x0401f47f, 0x8c000506, 0x04000004, 0x4a034407,
- 0x00000005, 0x0401f4bd, 0x4a03420a, 0x00000000,
- 0x0401f477, 0x59a8002a, 0x48034408, 0x59a8002b,
- 0x4803420a, 0x0401f472, 0x42007800, 0x0010bdb1,
- 0x59a00407, 0x4803c857, 0x82000c80, 0x0000000a,
- 0x040214b2, 0x0c01f001, 0x001020d1, 0x00102069,
- 0x00102077, 0x0010208a, 0x001020ab, 0x001020d3,
- 0x00102061, 0x00102061, 0x00102061, 0x00102061,
- 0x00102062, 0x0401f4a5, 0x59a00208, 0x48007c01,
- 0x59a00408, 0x48007a01, 0x0201f800, 0x001003e9,
- 0x0401f069, 0x836c0580, 0x00000000, 0x04000497,
- 0x59a00a08, 0x59a00408, 0x900001c0, 0x80040d40,
- 0x4807c857, 0x59a00a09, 0x59a00409, 0x900001c0,
- 0x80040d40, 0x4807c857, 0x0401f05b, 0x836c0580,
- 0x00000000, 0x04000489, 0x59a00408, 0x59a01208,
- 0x900001c0, 0x80081540, 0x59a00409, 0x59a01a09,
- 0x900001c0, 0x800c1d40, 0x42000000, 0x0010c642,
- 0x480fc857, 0x480bc857, 0x42000800, 0x00001000,
- 0x0201f000, 0x001031dc, 0x59a00a08, 0x59a00408,
- 0x900001c0, 0x80041d40, 0x820c0c80, 0x0010afb1,
- 0x04021476, 0x820c0c80, 0x00100000, 0x04001473,
- 0x480fc857, 0x823c7c00, 0x0000000d, 0x503c0800,
- 0x800409c0, 0x04000006, 0x823c0580, 0x00000011,
- 0x0400046a, 0x803c7800, 0x0401f7f9, 0x59e41001,
- 0x82080d00, 0xfffeffcf, 0x4807c801, 0x440c7800,
- 0x46001800, 0x0201f800, 0x800c1800, 0x46001800,
- 0x0010031d, 0x480bc801, 0x0401f027, 0x59a01a08,
- 0x59a00408, 0x900001c0, 0x800c1d40, 0x480c7803,
- 0x59a02209, 0x59a00409, 0x900001c0, 0x80102540,
- 0x48107804, 0x59a0020a, 0x40001000, 0x48007807,
- 0x80000040, 0x0400144d, 0x48007808, 0x42000800,
- 0x00004000, 0x0201f800, 0x00105fef, 0x80000540,
- 0x04000002, 0x0401f445, 0x40040000, 0x800c1c00,
- 0x04001442, 0x4800780a, 0x480c7805, 0x48107806,
- 0x4978780c, 0x59a0040a, 0x800000c4, 0x4800780b,
- 0x59e40001, 0x4803c857, 0x82000540, 0x00040000,
- 0x4803c801, 0x0201f000, 0x00101cbf, 0x49787803,
- 0x49787804, 0x49787808, 0x49787807, 0x49787803,
- 0x49787805, 0x49787806, 0x4978780c, 0x4978780b,
- 0x59e40001, 0x84000524, 0x0401f7f2, 0x59a80005,
- 0x48034407, 0x59a80006, 0x48034208, 0x59a80007,
- 0x48034408, 0x0201f000, 0x00101cbf, 0x0201f800,
- 0x0010032d, 0x4803c856, 0x4a03c013, 0x03800300,
- 0x4a03c014, 0x03800380, 0x59a00c07, 0x82040580,
- 0x000000a0, 0x04000004, 0x82040580, 0x000000a2,
- 0x04020021, 0x59a0140b, 0x82080480, 0x00000100,
- 0x0402101d, 0x59a0020c, 0x8c000500, 0x04020026,
- 0x59a00a0b, 0x800409c0, 0x04000017, 0x82040480,
- 0x00000041, 0x04021014, 0x0201f800, 0x001031af,
- 0x0400000b, 0x59a01008, 0x900811c0, 0x59a0180a,
- 0x900c19c0, 0x59a00a0b, 0x0201f800, 0x001031d6,
- 0x4a01d808, 0x00102119, 0x1c01f000, 0x4a034407,
- 0x00000002, 0x4a03c014, 0x03800000, 0x0201f000,
- 0x00101d02, 0x4a03c014, 0x03800000, 0x0201f000,
- 0x00101d06, 0x4031d800, 0x58ef400a, 0x58ee580c,
- 0x58ec0002, 0x82000580, 0x00000200, 0x02000000,
- 0x00101cfa, 0x59a00c07, 0x59a0140b, 0x59a0020c,
- 0x8c000500, 0x04020039, 0x832e5c00, 0x00000005,
- 0x4178c000, 0x59a0ba0b, 0x40600000, 0x812c0400,
- 0x5000c800, 0x82641d00, 0x000000ff, 0x4c040000,
- 0x4c080000, 0x0401f8c9, 0x5c001000, 0x5c000800,
- 0x04000038, 0x805cb840, 0x04000032, 0x80081000,
- 0x82641d00, 0x0000ff00, 0x800c1910, 0x4c040000,
- 0x4c080000, 0x0401f8bd, 0x5c001000, 0x5c000800,
- 0x0400002c, 0x805cb840, 0x04000026, 0x80081000,
- 0x82641d00, 0x00ff0000, 0x800c1920, 0x4c040000,
- 0x4c080000, 0x0401f8b1, 0x5c001000, 0x5c000800,
- 0x04000020, 0x805cb840, 0x0400001a, 0x80081000,
- 0x82641d00, 0xff000000, 0x800c1930, 0x4c040000,
- 0x4c080000, 0x0401f8a5, 0x5c001000, 0x5c000800,
- 0x04000014, 0x805cb840, 0x0400000e, 0x80081000,
- 0x8060c000, 0x0401f7cd, 0x59a0020b, 0x82000500,
- 0x000000ff, 0x40001800, 0x4c040000, 0x4c080000,
- 0x0401f896, 0x5c001000, 0x5c000800, 0x04000005,
- 0x4a03c014, 0x03800000, 0x0201f000, 0x00101cbf,
- 0x4a03c014, 0x03800000, 0x4a034407, 0x00000004,
- 0x0201f000, 0x00101d02, 0x4803c856, 0x59a80873,
- 0x8c040d3e, 0x04020005, 0x4a03c013, 0x03800300,
- 0x4a03c014, 0x03800380, 0x59a00c07, 0x82040580,
- 0x000000a0, 0x04000004, 0x82040580, 0x000000a2,
- 0x04020076, 0x59a0140b, 0x82080480, 0x00000100,
- 0x04021072, 0x59a0020c, 0x8c000500, 0x0402005d,
- 0x59a01a0b, 0x800c19c0, 0x0400006c, 0x820c0480,
- 0x00000041, 0x04021069, 0x0201f800, 0x001031af,
- 0x0402000b, 0x4a034407, 0x00000002, 0x59a80873,
- 0x8c040d3e, 0x04020003, 0x4a03c014, 0x03800000,
- 0x4803c857, 0x0201f000, 0x00101d02, 0x59a80073,
- 0x8c00053e, 0x02020000, 0x0010a7eb, 0x832e5c00,
- 0x00000005, 0x4178c000, 0x59a0ba0b, 0x4803c857,
- 0x40600000, 0x812c0400, 0x4000c800, 0x4c040000,
- 0x4c080000, 0x0401f887, 0x5c001000, 0x5c000800,
- 0x04000044, 0x4414c800, 0x805cb840, 0x0400002b,
- 0x80081000, 0x4c040000, 0x4c080000, 0x0401f87d,
- 0x5c001000, 0x5c000800, 0x0400003a, 0x50640000,
- 0x801428d0, 0x80140540, 0x4400c800, 0x805cb840,
- 0x0400001e, 0x80081000, 0x4c040000, 0x4c080000,
- 0x0401f870, 0x5c001000, 0x5c000800, 0x0400002d,
- 0x50640000, 0x801428e0, 0x80140540, 0x4400c800,
- 0x805cb840, 0x04000011, 0x80081000, 0x4c040000,
- 0x4c080000, 0x0401f863, 0x5c001000, 0x5c000800,
- 0x04000020, 0x50640000, 0x801428f0, 0x80140540,
- 0x4400c800, 0x805cb840, 0x04000004, 0x80081000,
- 0x8060c000, 0x0401f7ca, 0x59a00a0b, 0x59a01008,
- 0x900811c0, 0x59a0180a, 0x900c19c0, 0x4a03c014,
- 0x03800000, 0x412c0000, 0x0201f000, 0x001031d9,
- 0x4803c857, 0x59a80073, 0x8c00053e, 0x02020000,
- 0x00101d06, 0x0401f847, 0x04000006, 0x48174407,
- 0x4a03c014, 0x03800000, 0x0201f000, 0x00101cbf,
- 0x4a03c014, 0x03800000, 0x4a034407, 0x00000004,
- 0x0201f000, 0x00101d02, 0x4a03c014, 0x03800000,
- 0x0201f000, 0x00101d06, 0x4c5c0000, 0x4c600000,
- 0x4c640000, 0x4004b800, 0x4008c000, 0x400cc800,
- 0x0401f87a, 0x04000012, 0x0401f8b2, 0x04020014,
- 0x4060b800, 0x0401f8af, 0x04020011, 0x4064b800,
- 0x0401f8ac, 0x0402000e, 0x0401f896, 0x4ce80000,
- 0x4201d000, 0x00001388, 0x0201f800, 0x001059d2,
- 0x5c01d000, 0x82000540, 0x00000001, 0x5c00c800,
- 0x5c00c000, 0x5c00b800, 0x1c01f000, 0x0401f889,
- 0x80000580, 0x0401f7fa, 0x4c5c0000, 0x485fc857,
- 0x0401f85e, 0x0400000a, 0x825cbd40, 0x00000001,
- 0x0401f894, 0x0402000a, 0x0401f8dc, 0x0401f916,
- 0x0401f87c, 0x82000540, 0x00000001, 0x4803c857,
- 0x4867c857, 0x5c00b800, 0x1c01f000, 0x0401f875,
- 0x80000580, 0x4803c857, 0x485fc857, 0x0401f7f8,
- 0x4c5c0000, 0x4c600000, 0x4c640000, 0x4807c857,
- 0x480bc857, 0x4004b800, 0x4008c000, 0x0401f843,
- 0x0400000d, 0x0401f87b, 0x04020010, 0x4c5c0000,
- 0x4060b800, 0x0401f877, 0x5c00b800, 0x0402000b,
- 0x0401ffda, 0x04000004, 0x0401f85e, 0x82000540,
- 0x00000001, 0x40642800, 0x5c00c800, 0x5c00c000,
- 0x5c00b800, 0x1c01f000, 0x0401f856, 0x80000580,
- 0x4803c857, 0x4867c857, 0x0401f7f7, 0x4ce80000,
- 0x4c580000, 0x4803c856, 0x4200b000, 0x0000000c,
- 0x4201d000, 0x0000000a, 0x0201f800, 0x001059d2,
- 0x4a03c013, 0x02000200, 0x4201d000, 0x0000000a,
- 0x0201f800, 0x001059d2, 0x4a03c013, 0x02000000,
- 0x8058b040, 0x040207f3, 0x42000800, 0x000003e8,
- 0x4a03c013, 0x03800300, 0x80040840, 0x04000010,
- 0x4a03c014, 0x03800000, 0x59e00013, 0x4a03c014,
- 0x03800380, 0x82000500, 0x00000300, 0x82000580,
- 0x00000300, 0x040207f3, 0x82000540, 0x00000001,
- 0x5c00b000, 0x5c01d000, 0x1c01f000, 0x4803c857,
- 0x80000580, 0x0401f7fb, 0x4ce80000, 0x4803c856,
- 0x42000800, 0x000003e8, 0x4a03c013, 0x03800300,
- 0x80040840, 0x0400001b, 0x4a03c014, 0x03800000,
- 0x59e00013, 0x4a03c014, 0x03800380, 0x82000500,
- 0x00000300, 0x82000580, 0x00000300, 0x040207f3,
- 0x4201d000, 0x0000000a, 0x0201f800, 0x001059d2,
- 0x4a03c013, 0x01000000, 0x4201d000, 0x0000000a,
- 0x0201f800, 0x001059d2, 0x4a03c013, 0x02000000,
- 0x82000540, 0x00000001, 0x5c01d000, 0x1c01f000,
- 0x4803c857, 0x0401ffb2, 0x040207ee, 0x0401f7fb,
- 0x4803c856, 0x4a03c013, 0x01000000, 0x4ce80000,
- 0x4201d000, 0x0000000a, 0x0201f800, 0x001059d2,
- 0x5c01d000, 0x4a03c013, 0x02000200, 0x4ce80000,
- 0x4201d000, 0x0000000a, 0x0201f800, 0x001059d2,
- 0x5c01d000, 0x4a03c013, 0x01000100, 0x1c01f000,
- 0x4c5c0000, 0x4c600000, 0x485fc857, 0x4200c000,
- 0x00000008, 0x825c0500, 0x00000080, 0x800000c2,
- 0x82000540, 0x01000000, 0x4803c013, 0x4ce80000,
- 0x4201d000, 0x0000000a, 0x0201f800, 0x001059d2,
- 0x5c01d000, 0x4a03c013, 0x02000200, 0x4ce80000,
- 0x4201d000, 0x0000000a, 0x0201f800, 0x001059d2,
- 0x5c01d000, 0x4a03c013, 0x02000000, 0x805cb8c2,
- 0x8060c040, 0x040207e8, 0x4a03c013, 0x01000100,
- 0x4ce80000, 0x4201d000, 0x0000000a, 0x0201f800,
- 0x001059d2, 0x5c01d000, 0x4a03c013, 0x02000200,
- 0x4ce80000, 0x4201d000, 0x0000000a, 0x0201f800,
- 0x001059d2, 0x5c01d000, 0x4a03c014, 0x03800000,
- 0x42000800, 0x000003e8, 0x59e0b813, 0x825cbd00,
- 0x00000100, 0x80040840, 0x04000004, 0x405c0000,
- 0x80000540, 0x040207f9, 0x4a03c014, 0x03800380,
- 0x4a03c013, 0x02000000, 0x4ce80000, 0x4201d000,
- 0x0000000a, 0x0201f800, 0x001059d2, 0x5c01d000,
- 0x485fc857, 0x405c0000, 0x80000540, 0x5c00c000,
- 0x5c00b800, 0x1c01f000, 0x4c600000, 0x4803c856,
- 0x4a03c013, 0x01000100, 0x4200c000, 0x00000008,
- 0x4200c800, 0x000003e8, 0x4ce80000, 0x4201d000,
- 0x0000000a, 0x0201f800, 0x001059d2, 0x5c01d000,
- 0x4a03c013, 0x02000200, 0x4a03c014, 0x03800000,
- 0x59e00013, 0x4a03c014, 0x03800380, 0x82000500,
- 0x00000200, 0x04020003, 0x8064c840, 0x040207f7,
- 0x4178c800, 0x0401f009, 0x4ce80000, 0x4201d000,
- 0x0000000a, 0x0201f800, 0x001059d2, 0x5c01d000,
- 0x4a03c013, 0x02000200, 0x4ce80000, 0x4201d000,
- 0x0000000a, 0x0201f800, 0x001059d2, 0x5c01d000,
- 0x4a03c014, 0x03800000, 0x59e00013, 0x4a03c014,
- 0x03800380, 0x82000500, 0x00000100, 0x80000110,
- 0x8064c8c2, 0x8064cd40, 0x4a03c013, 0x02000000,
- 0x8060c040, 0x040207e5, 0x4867c857, 0x5c00c000,
- 0x1c01f000, 0x4803c856, 0x4a03c013, 0x01000100,
- 0x4ce80000, 0x4201d000, 0x0000000a, 0x0201f800,
- 0x001059d2, 0x5c01d000, 0x4a03c013, 0x02000200,
- 0x4ce80000, 0x4201d000, 0x0000000a, 0x0201f800,
- 0x001059d2, 0x5c01d000, 0x4a03c013, 0x02000000,
- 0x1c01f000, 0x59a00408, 0x59a8082a, 0x4803502a,
- 0x48074408, 0x59a00a0a, 0x82040480, 0x00000014,
- 0x04021003, 0x42000800, 0x000007d0, 0x59a8002b,
- 0x4807502b, 0x4803420a, 0x0201f000, 0x00101cbf,
- 0x836c0580, 0x00000000, 0x0400000e, 0x59a80005,
- 0x59a00c07, 0x80041580, 0x82081500, 0x00000040,
- 0x02000000, 0x00101cbf, 0x80080580, 0x48035005,
- 0x0201f800, 0x00100419, 0x0201f000, 0x00101cbf,
- 0x59a00407, 0x59a80805, 0x48035005, 0x80040d80,
- 0x8c040d0c, 0x02020800, 0x00100419, 0x59a00208,
- 0x48035006, 0x59a00408, 0x48035007, 0x0201f000,
- 0x00101cbf, 0x59a80073, 0x8c00053e, 0x02000000,
- 0x00101cf6, 0x59a00c07, 0x8c040d00, 0x04000021,
- 0x4a034407, 0x00000001, 0x8c000506, 0x02020000,
- 0x00101d02, 0x4a034407, 0x00000009, 0x59aa6874,
- 0x0201f800, 0x00104187, 0x02020000, 0x00101d02,
- 0x4a034407, 0x00000003, 0x0201f800, 0x000209ee,
- 0x02000000, 0x00101d02, 0x48ee6022, 0x4a01d808,
- 0x0010239c, 0x4a026407, 0x00000012, 0x4936600a,
- 0x42027000, 0x000000d7, 0x0201f000, 0x00020a34,
- 0x59a00407, 0x800001c0, 0x02020000, 0x00101d02,
- 0x0201f800, 0x0010a709, 0x0201f000, 0x00101cbf,
- 0x8d0e1d0e, 0x04000005, 0x4a034407, 0x00000001,
- 0x0201f000, 0x00101d02, 0x0201f800, 0x00104755,
- 0x04020005, 0x4a034407, 0x00000016, 0x0201f000,
- 0x00101d02, 0x836c0580, 0x00000003, 0x04000005,
- 0x4a034407, 0x00000007, 0x0201f000, 0x00101d02,
- 0x59a00c07, 0x82040500, 0xffffff00, 0x02020000,
- 0x00101d06, 0x82041580, 0x000000ff, 0x04020007,
- 0x59a8000f, 0x82000500, 0x000000ff, 0x82001540,
- 0x0000ff00, 0x0401f011, 0x82040400, 0x00101b0f,
- 0x50000000, 0x80000110, 0x82000580, 0x00000080,
- 0x02000000, 0x00101d06, 0x59a8000f, 0x82000500,
- 0x000000ff, 0x80041580, 0x02000000, 0x00101d06,
- 0x840409c0, 0x80041540, 0x0201f800, 0x00107188,
- 0x04020005, 0x4a034407, 0x00000003, 0x0201f000,
- 0x00101d02, 0x48ee6022, 0x480a621d, 0x4a02641d,
- 0x0000bc09, 0x4a026407, 0x00000001, 0x0201f800,
- 0x001031af, 0x04020007, 0x0201f800, 0x00020a10,
- 0x4a034407, 0x00000002, 0x0201f000, 0x00101d02,
- 0x497a5a05, 0x497a5806, 0x4a025c05, 0x00008000,
- 0x4a01d808, 0x0010244a, 0x492e6009, 0x42027000,
- 0x00000032, 0x0201f000, 0x00020a34, 0x8d0e1d0e,
- 0x04000005, 0x4a034407, 0x00000001, 0x0201f000,
- 0x00101d02, 0x0201f800, 0x00104755, 0x04020005,
- 0x4a034407, 0x00000016, 0x0201f000, 0x00101d02,
- 0x836c0580, 0x00000003, 0x04000005, 0x4a034407,
- 0x00000007, 0x0201f000, 0x00101d02, 0x59a00c07,
- 0x82040500, 0xffffff00, 0x02020000, 0x00101d06,
- 0x82041580, 0x000000ff, 0x04020007, 0x59a8000f,
- 0x82000500, 0x000000ff, 0x82001540, 0x0000ff00,
- 0x0401f011, 0x82040400, 0x00101b0f, 0x50000000,
- 0x80000110, 0x82000580, 0x00000080, 0x02000000,
- 0x00101d06, 0x59a8000f, 0x82000500, 0x000000ff,
- 0x80041580, 0x02000000, 0x00101d06, 0x840409c0,
- 0x80041540, 0x0201f800, 0x00107188, 0x04020005,
- 0x4a034407, 0x00000003, 0x0201f000, 0x00101d02,
- 0x48ee6022, 0x480a621d, 0x4a02641d, 0x0000bc05,
- 0x4a026407, 0x00000001, 0x0201f800, 0x001031af,
- 0x04020007, 0x0201f800, 0x00020a10, 0x4a034407,
- 0x00000002, 0x0201f000, 0x00101d02, 0x497a5a05,
- 0x497a5806, 0x4a025c05, 0x00008000, 0x4a01d808,
- 0x0010244a, 0x492e6009, 0x42027000, 0x00000032,
- 0x0201f000, 0x00020a34, 0x592c0006, 0x82000580,
- 0x01000000, 0x02020000, 0x00101cbf, 0x4a034407,
- 0x00000004, 0x0201f000, 0x00101d02, 0x497b4407,
- 0x497b4208, 0x8d0e1d20, 0x04000008, 0x59a8004d,
- 0x59a8084e, 0x80040480, 0x59a8084f, 0x48074407,
- 0x80041480, 0x480b4208, 0x0201f800, 0x001032f0,
- 0x48034408, 0x59a8100d, 0x59a80251, 0x80080480,
- 0x4803420a, 0x495f440a, 0x59a8001a, 0x4803420c,
- 0x0201f000, 0x00101cbf, 0x8d0e1d0e, 0x04000005,
- 0x4a034407, 0x00000001, 0x0201f000, 0x00101d02,
- 0x59a00407, 0x8c000500, 0x0402000f, 0x59a80050,
- 0x81640480, 0x04001008, 0x59a8000b, 0x81500580,
- 0x04000009, 0x59a8004e, 0x59a8104d, 0x80080580,
- 0x04000005, 0x4a034407, 0x00000018, 0x0201f000,
- 0x00101d02, 0x850e1d58, 0x4803c856, 0x850e1d46,
- 0x0201f800, 0x00103474, 0x0201f000, 0x00101cbf,
- 0x599c0201, 0x48035061, 0x41780800, 0x42001000,
- 0x00003b10, 0x0201f800, 0x0010600e, 0x480b5062,
- 0x1c01f000, 0x0401f807, 0x42018800, 0x00000000,
- 0x04020003, 0x42018800, 0x00000001, 0x1c01f000,
- 0x82000540, 0x00000001, 0x0402500d, 0x4203e000,
- 0x80000000, 0x40e81000, 0x41780800, 0x42000000,
- 0x00000064, 0x0201f800, 0x0010600e, 0x5994002e,
- 0x80080400, 0x4803282e, 0x80000580, 0x1c01f000,
- 0x4d900000, 0x4dd00000, 0x4da40000, 0x4d140000,
- 0x417a3000, 0x0201f800, 0x001067aa, 0x0201f800,
- 0x00106346, 0x5c022800, 0x5c034800, 0x5c03a000,
- 0x5c032000, 0x1c01f000, 0x42000800, 0x0000007c,
- 0x0201f800, 0x001010db, 0x4a03902c, 0x00200000,
- 0x4200b000, 0x000001f4, 0x59c8002c, 0x8c00052c,
- 0x04000007, 0x8058b040, 0x040207fc, 0x42000000,
- 0x00004003, 0x41781000, 0x0401f131, 0x4a035068,
- 0x00000002, 0x42006000, 0x0010260b, 0x50301000,
- 0x41784800, 0x4a03902d, 0x00008000, 0x4200b000,
- 0x000001f4, 0x59c8002c, 0x8c000534, 0x04000007,
- 0x8058b040, 0x040207fc, 0x42000000, 0x00004003,
- 0x41781000, 0x0401f11e, 0x0401f8a2, 0x80244800,
- 0x82240580, 0x000003b1, 0x040207fc, 0x0401f927,
- 0x41784800, 0x0401f8c8, 0x80244800, 0x82240580,
- 0x000003b1, 0x040207fc, 0x80306000, 0x82300580,
- 0x0010260d, 0x040207e2, 0x59a80867, 0x800409c0,
- 0x04000007, 0x42000000, 0x00004004, 0x42001000,
- 0x00000002, 0x59a81866, 0x0401f105, 0x42006000,
- 0x0010260b, 0x4a035068, 0x00000010, 0x50301000,
- 0x41784800, 0x4a03902d, 0x00000800, 0x0401f881,
- 0x80244800, 0x82240580, 0x00000018, 0x040207fc,
- 0x0401f906, 0x41784800, 0x0401f8a7, 0x80244800,
- 0x82240580, 0x00000018, 0x040207fc, 0x80306000,
- 0x82300580, 0x0010260d, 0x040207ed, 0x59a80867,
- 0x800409c0, 0x04000007, 0x42000000, 0x00004004,
- 0x42001000, 0x00000010, 0x59a81866, 0x0401f0e4,
- 0x42006000, 0x0010260b, 0x4a035068, 0x00000008,
- 0x50301000, 0x41784800, 0x4a03902d, 0x00000400,
- 0x0401f860, 0x80244800, 0x82240580, 0x00000088,
- 0x040207fc, 0x0401f8e5, 0x41784800, 0x0401f886,
- 0x80244800, 0x82240580, 0x00000088, 0x040207fc,
- 0x80306000, 0x82300580, 0x0010260d, 0x040207ed,
- 0x59a80867, 0x800409c0, 0x04000007, 0x42000000,
- 0x00004004, 0x42001000, 0x00000008, 0x59a81866,
- 0x0401f0c3, 0x42006000, 0x0010260b, 0x4a035068,
- 0x00000020, 0x50301000, 0x41784800, 0x4a03902d,
- 0x00002000, 0x4200b000, 0x000001f4, 0x59c8002c,
- 0x8c000530, 0x04000007, 0x8058b040, 0x040207fc,
- 0x42000000, 0x00004003, 0x41781000, 0x0401f0b0,
- 0x59c8002c, 0x82000500, 0xffe0ffff, 0x82080d00,
- 0x001f0000, 0x80040540, 0x4803902c, 0x0401f82d,
- 0x80244800, 0x82240580, 0x00000110, 0x040207fc,
- 0x0401f8b2, 0x41784800, 0x0401f853, 0x59c80034,
- 0x82080d00, 0x001f0000, 0x82000500, 0x001f0000,
- 0x80040580, 0x04000006, 0x59a80067, 0x80000000,
- 0x48035067, 0x40240000, 0x48035066, 0x80244800,
- 0x82240580, 0x00000110, 0x040207f0, 0x80306000,
- 0x82300580, 0x0010260d, 0x040207cf, 0x59a80867,
- 0x800409c0, 0x04000006, 0x42000000, 0x00004004,
- 0x42001000, 0x00000020, 0x59a81866, 0x59c8002c,
- 0x8400052a, 0x4803902c, 0x42000800, 0x0000007c,
- 0x0201f800, 0x001010db, 0x0201f000, 0x00101cbf,
- 0x59c8002c, 0x82000500, 0xffff0000, 0x82080d00,
- 0x0000ffff, 0x80040540, 0x4803902c, 0x480b9028,
- 0x480b9029, 0x59a80068, 0x82004580, 0x00000004,
- 0x04000003, 0x480b902a, 0x480b902b, 0x59c8002d,
- 0x82000500, 0xfffffc00, 0x80240540, 0x4803902d,
- 0x4200b000, 0x000001f4, 0x59c8002c, 0x82000500,
- 0x18000000, 0x04000007, 0x8058b040, 0x040207fb,
- 0x42000000, 0x00004003, 0x41781000, 0x0401f05c,
- 0x4a03902e, 0x00000001, 0x4200b000, 0x000001f4,
- 0x59c8002e, 0x8c000500, 0x04000006, 0x8058b040,
- 0x040207fc, 0x42000000, 0x00004003, 0x0401f050,
- 0x1c01f000, 0x41783800, 0x59c8002d, 0x82000500,
- 0xfffffc00, 0x80240d40, 0x4807902d, 0x4200b000,
- 0x000001f4, 0x59c8002c, 0x82000500, 0x18000000,
- 0x04000007, 0x8058b040, 0x040207fb, 0x42000000,
- 0x00004003, 0x41781000, 0x0401f03d, 0x59c81830,
- 0x59c80030, 0x800c0d80, 0x040207fd, 0x80080d80,
- 0x04000002, 0x801c3800, 0x59c82031, 0x59c80031,
- 0x80100d80, 0x040207fd, 0x80080d80, 0x04000002,
- 0x801c3800, 0x59a80068, 0x82004580, 0x00000004,
- 0x0400001b, 0x42004000, 0x0000ffff, 0x59c82832,
- 0x59c80032, 0x80140d80, 0x040207fd, 0x80080d80,
- 0x04000002, 0x801c3800, 0x59c83033, 0x59c80033,
- 0x80180d80, 0x040207fd, 0x80080d80, 0x04000002,
- 0x801c3800, 0x59c80034, 0x59c80834, 0x80040d80,
- 0x040207fd, 0x80080d80, 0x40200000, 0x80040d00,
- 0x0400000c, 0x801c3800, 0x0401f00a, 0x59c80034,
- 0x59c80834, 0x80040d80, 0x040207fd, 0x80080d80,
- 0x82040d00, 0x000000ff, 0x04000002, 0x801c3800,
- 0x801c39c0, 0x04000005, 0x59a80067, 0x801c0400,
- 0x48035067, 0x48275066, 0x1c01f000, 0x48034207,
- 0x48074407, 0x480b4208, 0x480f4408, 0x48134209,
- 0x48174409, 0x59c8002c, 0x8400052a, 0x4803902c,
- 0x42000800, 0x0000007c, 0x0201f800, 0x001010db,
- 0x0201f000, 0x00101cc2, 0x42000000, 0x00600000,
- 0x80000040, 0x040207ff, 0x1c01f000, 0x5a5a5a5a,
- 0xa5a5a5a5, 0x59a00c0b, 0x800409c0, 0x02000000,
- 0x00101d06, 0x82040480, 0x00000021, 0x02021000,
- 0x00101d06, 0x82040480, 0x00000011, 0x04001003,
- 0x42000800, 0x00000010, 0x59a00209, 0x59a01408,
- 0x900811c0, 0x80081540, 0x59a00208, 0x59a01c07,
- 0x900c19c0, 0x800c1d40, 0x0201f800, 0x001031af,
- 0x04000006, 0x0201f800, 0x001031d3, 0x4a01d808,
- 0x0010262e, 0x1c01f000, 0x4a034407, 0x00000002,
- 0x0201f000, 0x00101d02, 0x4031d800, 0x58ef400a,
- 0x58ec0002, 0x82000580, 0x00000200, 0x02000000,
- 0x00101cfa, 0x59a00c0b, 0x82040480, 0x00000011,
- 0x04001003, 0x42000800, 0x00000010, 0x59a0040c,
- 0x59a0120c, 0x900811c0, 0x80081540, 0x59a0020a,
- 0x59a01c09, 0x900c19c0, 0x800c1d40, 0x58ec0003,
- 0x0201f800, 0x001031dc, 0x4a01d808, 0x00102649,
- 0x1c01f000, 0x4031d800, 0x58ef400a, 0x58ec0002,
- 0x82000580, 0x00000200, 0x02000000, 0x00101cfa,
- 0x59a00c0b, 0x82040480, 0x00000011, 0x02001000,
- 0x00101cbf, 0x82040c80, 0x00000010, 0x59a00209,
- 0x59a01408, 0x900811c0, 0x80081540, 0x59a00208,
- 0x59a01c07, 0x900c19c0, 0x800c1d40, 0x82081400,
- 0x00000040, 0x58ec0003, 0x0201f800, 0x001031d3,
- 0x4a01d808, 0x00102667, 0x1c01f000, 0x4031d800,
- 0x58ef400a, 0x58ec0002, 0x82000580, 0x00000200,
- 0x02000000, 0x00101cfa, 0x59a0040b, 0x82000c80,
- 0x00000010, 0x59a0040c, 0x59a0120c, 0x900811c0,
- 0x80081540, 0x59a0020a, 0x59a01c09, 0x900c19c0,
- 0x800c1d40, 0x82081400, 0x00000040, 0x58ec0003,
- 0x0201f800, 0x001031dc, 0x4a01d808, 0x00101cb8,
- 0x1c01f000, 0x48efc857, 0x59a00208, 0x59a01408,
- 0x900001c0, 0x80081540, 0x59a0020a, 0x59a01c0a,
- 0x900001c0, 0x800c1d40, 0x59a00407, 0x48034000,
- 0x480b4001, 0x480f4002, 0x0201f800, 0x001031af,
- 0x04020005, 0x4a034407, 0x00000002, 0x0201f000,
- 0x00101d02, 0x42000800, 0x00000010, 0x0201f800,
- 0x001031d3, 0x4a01d808, 0x0010269c, 0x1c01f000,
- 0x4031d800, 0x58ef400a, 0x58ee580c, 0x58ec0002,
- 0x82000580, 0x00000200, 0x02000000, 0x00101cfa,
- 0x48efc857, 0x49a3c857, 0x492fc857, 0x592c0a05,
- 0x80040910, 0x04020005, 0x4a034407, 0x00000019,
- 0x0201f000, 0x00101d02, 0x4805d80b, 0x0401f00a,
- 0x4031d800, 0x58ef400a, 0x58ec0002, 0x82000580,
- 0x00000200, 0x02000000, 0x00101cfa, 0x48efc857,
- 0x49a3c857, 0x48efc857, 0x49a3c857, 0x58ec000b,
- 0x80000040, 0x04000012, 0x4801d80b, 0x0201f800,
- 0x001031af, 0x04020005, 0x4a034407, 0x00000002,
- 0x0201f000, 0x00101d02, 0x42000800, 0x00000010,
- 0x58ec1006, 0x58ec1807, 0x0201f800, 0x001031d3,
- 0x4a01d808, 0x001026b0, 0x1c01f000, 0x58ee580c,
- 0x48efc857, 0x49a3c857, 0x492fc857, 0x492f3004,
- 0x592c0405, 0x8400055e, 0x48025c05, 0x4a01d808,
- 0x001026da, 0x1c01f000, 0x4d2c0000, 0x58ee580c,
- 0x48efc857, 0x49a3c857, 0x492fc857, 0x592c0405,
- 0x8400051e, 0x48025c05, 0x59a00000, 0x59a01001,
- 0x59a01802, 0x80081400, 0x820c1c40, 0x00000000,
- 0x832c0400, 0x00000005, 0x42000800, 0x00000010,
- 0x5c025800, 0x0201f000, 0x001031dc, 0x8d0e1d0e,
- 0x04000005, 0x4a034407, 0x00000001, 0x0201f000,
- 0x00101d02, 0x836c0580, 0x00000003, 0x04000005,
- 0x4a034407, 0x00000007, 0x0201f000, 0x00101d02,
- 0x59a0320c, 0x82183500, 0x000000ff, 0x59a28c07,
- 0x0201f800, 0x00020319, 0x02020000, 0x00101d06,
- 0x83440580, 0x000007fd, 0x04000008, 0x0201f800,
- 0x00104181, 0x04000005, 0x4a034407, 0x00000009,
- 0x0201f000, 0x00101d02, 0x0201f800, 0x001031af,
- 0x04020005, 0x4a034407, 0x00000002, 0x0201f000,
- 0x00101d02, 0x801831c0, 0x0400000a, 0x412c0800,
- 0x0201f800, 0x001031af, 0x04020005, 0x4a034407,
- 0x00000002, 0x0201f000, 0x00101d02, 0x40065800,
- 0x4a025c05, 0x00008000, 0x497a5a05, 0x0201f800,
- 0x00108a2b, 0x04020005, 0x4a034407, 0x00000003,
- 0x0201f000, 0x00101d02, 0x4a01d808, 0x0010272d,
- 0x1c01f000, 0x592c0006, 0x82000580, 0x01000000,
- 0x04020005, 0x4a034407, 0x00000004, 0x0201f000,
- 0x00101d02, 0x592c0407, 0x82002d00, 0x0000ff00,
- 0x82000500, 0x000000ff, 0x80000904, 0x80040800,
- 0x82040480, 0x00000006, 0x04001003, 0x42000800,
- 0x00000005, 0x4c500000, 0x4c540000, 0x4c580000,
- 0x832ca400, 0x00000007, 0x4050a800, 0x4004b000,
- 0x0201f800, 0x0010af0c, 0x59a00408, 0x59a01208,
- 0x900811c0, 0x80081540, 0x59a0040a, 0x59a01a0a,
- 0x900c19c0, 0x800c1d40, 0x832c0400, 0x00000007,
- 0x4c140000, 0x0201f800, 0x001031dc, 0x5c002800,
- 0x801429c0, 0x04000003, 0x4a01d808, 0x00102760,
- 0x5c00b000, 0x5c00a800, 0x5c00a000, 0x1c01f000,
- 0x4031d800, 0x58ef400a, 0x58ee580c, 0x58ec0002,
- 0x82000580, 0x00000200, 0x02000000, 0x00101cfa,
- 0x812e59c0, 0x02000800, 0x0010032d, 0x592c0007,
- 0x82000500, 0xff000000, 0x80000904, 0x800409c0,
- 0x02000000, 0x00101cbf, 0x4807c857, 0x82040480,
- 0x0000000e, 0x04001003, 0x42000800, 0x0000000d,
- 0x592e5801, 0x812e59c0, 0x02000800, 0x0010032d,
- 0x4c500000, 0x4c540000, 0x4c580000, 0x832ca400,
- 0x00000006, 0x4050a800, 0x4004b000, 0x0201f800,
- 0x0010af0c, 0x5c00b000, 0x5c00a800, 0x5c00a000,
- 0x58ec1006, 0x58ec1807, 0x832c0400, 0x00000006,
- 0x0201f000, 0x001031dc, 0x0201f800, 0x001031af,
- 0x04020005, 0x4a034407, 0x00000002, 0x0201f000,
- 0x00101d02, 0x59a00c07, 0x82040500, 0x0000ff00,
- 0x840001c0, 0x82001480, 0x00000007, 0x02021000,
- 0x00101d06, 0x0c01f001, 0x001027a5, 0x001027ac,
- 0x001027b3, 0x001027b3, 0x001027b3, 0x001027b5,
- 0x001027ba, 0x42000800, 0x0000000d, 0x42003800,
- 0x001027ce, 0x4a034000, 0x0010b941, 0x0401f013,
- 0x42000800, 0x0000000d, 0x42003800, 0x001027ce,
- 0x4a034000, 0x0010b94e, 0x0401f00c, 0x0201f000,
- 0x00101d06, 0x42000800, 0x00000008, 0x42003800,
- 0x001027e1, 0x0401f005, 0x42000800, 0x00000004,
- 0x42003800, 0x0010282b, 0x59a00208, 0x59a01408,
- 0x900001c0, 0x80081540, 0x59a0020a, 0x59a01c0a,
- 0x900001c0, 0x800c1d40, 0x832c0400, 0x00000006,
- 0x4c1c0000, 0x0201f800, 0x001031d3, 0x5c003800,
- 0x481dd808, 0x1c01f000, 0x4031d800, 0x58ef400a,
- 0x58ee580c, 0x58ec0002, 0x82000580, 0x00000200,
- 0x02000000, 0x00101cfa, 0x4a035019, 0x00000001,
- 0x4200b000, 0x0000000d, 0x59a0a800, 0x832ca400,
- 0x00000006, 0x0201f800, 0x0010af0c, 0x0201f000,
- 0x00101cbf, 0x4031d800, 0x58ef400a, 0x58ee580c,
- 0x58ec0002, 0x82000580, 0x00000200, 0x02000000,
- 0x00101cfa, 0x832ca400, 0x00000006, 0x50500000,
- 0x82001500, 0x000c0016, 0x02020000, 0x00101d06,
- 0x82500c00, 0x00000003, 0x50040000, 0x82001500,
- 0x00000001, 0x02020000, 0x00101d06, 0x50500000,
- 0x82001500, 0x00000028, 0x0400001d, 0x82081580,
- 0x00000028, 0x02020000, 0x00101d06, 0x80500800,
- 0x50040000, 0x82001500, 0x00000013, 0x82081580,
- 0x00000013, 0x02020000, 0x00101d06, 0x80040800,
- 0x50040000, 0x82001500, 0x00050000, 0x82081580,
- 0x00050000, 0x02020000, 0x00101d06, 0x836c0580,
- 0x00000000, 0x04000012, 0x599c0019, 0x8c00050e,
- 0x0402000f, 0x0201f000, 0x00101d06, 0x80500800,
- 0x50040000, 0x82001500, 0x00000013, 0x02020000,
- 0x00101d06, 0x80040800, 0x50040000, 0x82001500,
- 0x00050000, 0x02020000, 0x00101d06, 0x4200b000,
- 0x00000008, 0x4200a800, 0x0010b939, 0x0201f800,
- 0x0010aee2, 0x0201f000, 0x00101cbf, 0x4031d800,
- 0x58ef400a, 0x58ee580c, 0x58ec0002, 0x82000580,
- 0x00000200, 0x02000000, 0x00101cfa, 0x4200b000,
- 0x00000004, 0x4200a800, 0x0010bdc3, 0x832ca400,
- 0x00000006, 0x0201f800, 0x0010aee2, 0x850e1d50,
- 0x0201f000, 0x00101cbf, 0x0201f800, 0x001031af,
- 0x04020005, 0x4a034407, 0x00000002, 0x0201f000,
- 0x00101d02, 0x832cac00, 0x00000006, 0x59a00c07,
- 0x82040500, 0x0000ff00, 0x840001c0, 0x82001480,
- 0x00000008, 0x02021000, 0x00101d06, 0x0c01f001,
- 0x00102858, 0x0010285b, 0x0010285e, 0x0010285e,
- 0x0010285e, 0x00102860, 0x0010285e, 0x00102868,
- 0x4200a000, 0x0010b941, 0x0401f055, 0x4200a000,
- 0x0010b94e, 0x0401f052, 0x0201f000, 0x00101d06,
- 0x4200b000, 0x00000008, 0x40580800, 0x4200a000,
- 0x0010b939, 0x0201f800, 0x0010aee2, 0x0401f04d,
- 0x59a00a0b, 0x4a03420b, 0x0000001c, 0x82040480,
- 0x0000001c, 0x02001000, 0x00101d06, 0x4200b000,
- 0x0000000f, 0x4178a000, 0x0201f800, 0x0010aeeb,
- 0x832cac00, 0x00000006, 0x4200b000, 0x00000004,
- 0x83a8a400, 0x0000001f, 0x0201f800, 0x0010aee2,
- 0x836c0580, 0x00000000, 0x04000007, 0x4200b000,
- 0x00000004, 0x83a8a400, 0x00000000, 0x0201f800,
- 0x0010aee2, 0x492f4000, 0x0201f800, 0x001031af,
- 0x04020005, 0x4a034407, 0x00000002, 0x0201f000,
- 0x00101d02, 0x832cac00, 0x00000006, 0x4200b000,
- 0x0000000f, 0x4178a000, 0x0201f800, 0x0010aeeb,
- 0x832cac00, 0x00000007, 0x4200b000, 0x00000004,
- 0x83a8a400, 0x00000023, 0x0201f800, 0x0010aee2,
- 0x492f4001, 0x59a25800, 0x59a00208, 0x59a01408,
- 0x900001c0, 0x80081540, 0x59a0020a, 0x59a01c0a,
- 0x900001c0, 0x800c1d40, 0x832c0400, 0x00000006,
- 0x42000800, 0x0000000f, 0x0201f800, 0x001031dc,
- 0x4a01d808, 0x001028c0, 0x1c01f000, 0x4200b000,
- 0x0000000d, 0x40580800, 0x0201f800, 0x0010af0c,
- 0x59a00208, 0x59a01408, 0x900001c0, 0x80081540,
- 0x59a0020a, 0x59a01c0a, 0x900001c0, 0x800c1d40,
- 0x832c0400, 0x00000006, 0x0201f000, 0x001031dc,
- 0x4031d800, 0x58ef400a, 0x58ec0002, 0x82000580,
- 0x00000200, 0x02000000, 0x00101cfa, 0x59a25801,
- 0x58ec1006, 0x58ec1807, 0x832c0400, 0x00000006,
- 0x42000800, 0x0000000d, 0x0201f000, 0x001031dc,
- 0x836c0580, 0x00000000, 0x04020005, 0x4a034407,
- 0x00000007, 0x0201f000, 0x00101d02, 0x59a01407,
- 0x800811c0, 0x04020017, 0x59c40801, 0x82040d00,
- 0x00018000, 0x82040580, 0x00000000, 0x04020004,
- 0x4a034407, 0x00000000, 0x0401f056, 0x82040580,
- 0x00008000, 0x04020004, 0x4a034407, 0x00000001,
- 0x0401f050, 0x82040580, 0x00010000, 0x02020800,
- 0x0010032d, 0x4a034407, 0x00000003, 0x0401f049,
- 0x59a80073, 0x8c00053e, 0x0400000d, 0x59a00a08,
- 0x82040580, 0x00000003, 0x04000005, 0x82040580,
- 0x00000002, 0x02020000, 0x00101d06, 0x42000000,
- 0x00000003, 0x40000800, 0x0401f00b, 0x59a8006d,
- 0x8c000508, 0x04000005, 0x42000000, 0x00000001,
- 0x40000800, 0x0401f004, 0x59a00208, 0x48034002,
- 0x59a80837, 0x48035037, 0x599c7819, 0x823c7d00,
- 0xffff1fff, 0x800000da, 0x803c7d40, 0x483f3819,
- 0x0201f800, 0x00101421, 0x0400000d, 0x0201f800,
- 0x0010142f, 0x0400000a, 0x0201f800, 0x0010143d,
- 0x04000007, 0x0201f800, 0x0010144b, 0x04000004,
- 0x48075037, 0x0201f000, 0x00101d06, 0x82080580,
- 0x00000002, 0x04020017, 0x59c40006, 0x84000500,
- 0x48038806, 0x0201f800, 0x00106480, 0x497b8880,
- 0x42000000, 0x0010bd85, 0x0201f800, 0x0010ae10,
- 0x4803c856, 0x850e1d48, 0x4a038808, 0x00000000,
- 0x4202d800, 0x00000004, 0x4a038805, 0x00000001,
- 0x4a035043, 0x00000001, 0x0201f800, 0x00100454,
- 0x0201f000, 0x00101cbf, 0x8d0e1d0e, 0x04000005,
- 0x4a034407, 0x00000001, 0x0201f000, 0x00101d02,
- 0x836c0580, 0x00000003, 0x04000005, 0x4a034407,
- 0x00000007, 0x0201f000, 0x00101d02, 0x59a28c07,
- 0x59a0320c, 0x82183500, 0x000000ff, 0x0201f800,
- 0x00020319, 0x02020000, 0x00101d06, 0x83440580,
- 0x000007fd, 0x04000008, 0x0201f800, 0x00104181,
- 0x04000005, 0x42000800, 0x00000009, 0x0201f000,
- 0x00101d02, 0x0201f800, 0x001031af, 0x04020005,
- 0x4a034407, 0x00000002, 0x0201f000, 0x00101d02,
- 0x497a5a05, 0x4a025c05, 0x00008000, 0x0201f800,
- 0x00108a40, 0x04020005, 0x4a034407, 0x00000003,
- 0x0201f000, 0x00101d02, 0x4a01d808, 0x0010296d,
- 0x1c01f000, 0x592c0006, 0x82000d00, 0x0000ffff,
- 0x82000500, 0xffff0000, 0x82000580, 0x01000000,
- 0x04020005, 0x4a034407, 0x00000004, 0x0201f000,
- 0x00101d02, 0x80040904, 0x4c500000, 0x4c540000,
- 0x4c580000, 0x832ca400, 0x00000006, 0x4050a800,
- 0x4004b000, 0x0201f800, 0x0010af0c, 0x5c00b000,
- 0x5c00a800, 0x5c00a000, 0x59a00208, 0x59a01408,
- 0x900001c0, 0x80081540, 0x59a0020a, 0x59a01c0a,
- 0x900001c0, 0x800c1d40, 0x832c0400, 0x00000006,
- 0x0201f000, 0x001031dc, 0x496fc857, 0x836c0580,
- 0x00000000, 0x04000005, 0x4a034407, 0x0000001a,
- 0x0201f000, 0x00101d02, 0x0201f800, 0x00104755,
- 0x02020800, 0x00103929, 0x42000800, 0x00000020,
- 0x59a00408, 0x59a01208, 0x900811c0, 0x80081540,
- 0x59a0040a, 0x59a01a0a, 0x900c19c0, 0x800c1d40,
- 0x419c0000, 0x49a3c857, 0x0201f800, 0x001031d3,
- 0x4a01d808, 0x001029af, 0x1c01f000, 0x4833c857,
- 0x59a80073, 0x8c00053e, 0x02020800, 0x0010a6b4,
- 0x4031d800, 0x58ef400a, 0x58ec0002, 0x82000580,
- 0x00000200, 0x02000000, 0x00101cfa, 0x599c0200,
- 0x800001c0, 0x02000000, 0x00101d06, 0x59a8006d,
- 0x8c000504, 0x04020003, 0x8c000506, 0x04000004,
- 0x599c0019, 0x8400050c, 0x48033819, 0x0201f800,
- 0x00109161, 0x59a8006d, 0x8c000502, 0x04000004,
- 0x599c0017, 0x84000508, 0x48033817, 0x850e1d20,
- 0x599c0017, 0x8c000508, 0x04000003, 0x850e1d60,
- 0x0401f008, 0x8c00050a, 0x02020000, 0x00101d06,
- 0x59a80806, 0x8c040d16, 0x02020000, 0x00101d06,
- 0x4803c857, 0x8c000504, 0x04020004, 0x59c408a3,
- 0x84040d7a, 0x480788a3, 0x8c000502, 0x04020004,
- 0x59c408a3, 0x84040d08, 0x480788a3, 0x599c0c02,
- 0x8c000500, 0x04020004, 0x8c000516, 0x04000012,
- 0x0401f001, 0x82041480, 0x0000007f, 0x02021000,
- 0x00101d06, 0x82041400, 0x00101b0f, 0x50081000,
- 0x82081500, 0x000000ff, 0x8c000500, 0x04020006,
- 0x480b500f, 0x42000800, 0x00000003, 0x0201f800,
- 0x001061d9, 0x599c0019, 0x42000800, 0x00001000,
- 0x50040800, 0x82040c80, 0x24320001, 0x04001003,
- 0x84000546, 0x48033819, 0x8c000506, 0x0400000f,
- 0x4a03b805, 0x90000000, 0x59a81007, 0x8c081516,
- 0x0402000a, 0x42000800, 0x00007600, 0x4a000805,
- 0xd0000000, 0x42000800, 0x0010b995, 0x58041401,
- 0x84081542, 0x48080c01, 0x8c00050e, 0x04020007,
- 0x4c000000, 0x0201f800, 0x00103314, 0x5c000000,
- 0x02020000, 0x00101d06, 0x82000500, 0x00000030,
- 0x04000003, 0x80000108, 0x0401f003, 0x42000000,
- 0x00000002, 0x48039040, 0x42000800, 0x00000002,
- 0x82000400, 0x00102b11, 0x50001000, 0x0201f800,
- 0x001061d9, 0x599c0201, 0x82000c80, 0x00000100,
- 0x02001000, 0x00101d06, 0x82000c80, 0x00000841,
- 0x02021000, 0x00101d06, 0x82000500, 0x00000007,
- 0x02020000, 0x00101d06, 0x599c0401, 0x80000540,
- 0x02000000, 0x00101d06, 0x599c0409, 0x599c0c07,
- 0x80040c80, 0x02021000, 0x00101d06, 0x80000040,
- 0x02000000, 0x00101d06, 0x599c0209, 0x599c0a07,
- 0x80040c80, 0x02021000, 0x00101d06, 0x80000040,
- 0x02000000, 0x00101d06, 0x0201f800, 0x00104bdd,
- 0x0201f800, 0x001044ff, 0x599c0201, 0x48035004,
- 0x0201f800, 0x00101082, 0x599c020a, 0x800001c0,
- 0x04000003, 0x48035031, 0x0401f003, 0x4a035031,
- 0x000000c8, 0x8d0e1d20, 0x04000004, 0x0201f800,
- 0x00105a18, 0x417a5000, 0x599c0003, 0x599c0804,
- 0x9c0001c0, 0x9c0409c0, 0x48035002, 0x48075003,
- 0x599c1017, 0x8c08151c, 0x04000006, 0x599c0005,
- 0x599c0806, 0x9c0001c0, 0x9c0409c0, 0x0401f003,
- 0x82000500, 0xf0ffffff, 0x48035000, 0x48075001,
- 0x42001000, 0x0010b941, 0x48001000, 0x48041001,
- 0x42001000, 0x0010b94e, 0x48001000, 0x48041001,
- 0x59a8006d, 0x8c000508, 0x04020017, 0x8c00050a,
- 0x04020023, 0x599c1019, 0x82081500, 0x0000e000,
- 0x82080580, 0x00000000, 0x0402000c, 0x4a035037,
- 0x00000000, 0x42000000, 0x00000001, 0x0201f800,
- 0x0010169e, 0x42000000, 0x00000001, 0x0201f800,
- 0x00101624, 0x0401f030, 0x82080580, 0x00002000,
- 0x0402000c, 0x4a035037, 0x00000001, 0x42000000,
- 0x00000000, 0x0201f800, 0x0010169e, 0x42000000,
- 0x00000000, 0x0201f800, 0x00101624, 0x0401f022,
- 0x82080580, 0x00004000, 0x04020006, 0x4a035037,
- 0x00000002, 0x4a035043, 0x00000001, 0x0401f01a,
- 0x82080580, 0x00006000, 0x02020000, 0x00101d06,
- 0x59a80873, 0x8c040d3e, 0x04020009, 0x59a80847,
- 0x82040d80, 0x01391077, 0x04020005, 0x59e00813,
- 0x8c040d00, 0x02020000, 0x00101d06, 0x4a035037,
- 0x00000003, 0x42000000, 0x00000002, 0x0201f800,
- 0x0010169e, 0x42000000, 0x00000002, 0x0201f800,
- 0x00101624, 0x599c1019, 0x82081500, 0x0000e000,
- 0x599c0019, 0x8c000520, 0x0400000d, 0x42000000,
- 0x00000004, 0x42000800, 0x00000040, 0x0201f800,
- 0x00101740, 0x42000000, 0x00000010, 0x42000800,
- 0x000000c0, 0x0201f800, 0x00101740, 0x4a035013,
- 0x0000aaaa, 0x599c1018, 0x82081500, 0x00000030,
- 0x59a8006a, 0x80000540, 0x0400000c, 0x82080580,
- 0x00000000, 0x02000000, 0x00101d06, 0x599c1018,
- 0x82081500, 0xffffffcf, 0x82081540, 0x00000010,
- 0x480b3818, 0x0401f010, 0x82080d80, 0x00000000,
- 0x04000007, 0x82080d80, 0x00000010, 0x0400000a,
- 0x82080d80, 0x00000020, 0x04020002, 0x48075013,
- 0x0201f800, 0x00103276, 0x04000008, 0x4803c856,
- 0x850e1d46, 0x0201f800, 0x00101402, 0x59a8001f,
- 0x80040540, 0x4803501f, 0x49f3c857, 0x42001000,
- 0x00104671, 0x0201f800, 0x00105872, 0x42001000,
- 0x00104660, 0x0201f800, 0x001059bf, 0x4a038805,
- 0xffffffff, 0x4a03c014, 0x00400040, 0x4a03c013,
- 0x00400000, 0x0201f800, 0x001040ac, 0x59a0001e,
- 0x84000540, 0x4803401e, 0x49f3c857, 0x0201f000,
- 0x00101cbf, 0x00000018, 0x0000000c, 0x00000018,
- 0x00000020, 0x836c0580, 0x00000000, 0x04020005,
- 0x42000800, 0x00000007, 0x0201f000, 0x00101d02,
- 0x42000800, 0x00000020, 0x59a00408, 0x59a01208,
- 0x900811c0, 0x80081540, 0x59a0040a, 0x59a01a0a,
- 0x900c19c0, 0x800c1d40, 0x419c0000, 0x0201f000,
- 0x001031dc, 0x8d0e1d0e, 0x04000005, 0x4a034407,
- 0x00000001, 0x0201f000, 0x00101d02, 0x0201f800,
- 0x00104755, 0x04020005, 0x4a034407, 0x00000016,
- 0x0201f000, 0x00101d02, 0x59a80056, 0x8c000500,
- 0x04000011, 0x4a034407, 0x00000000, 0x42000800,
- 0x00000020, 0x59a00408, 0x59a01208, 0x900811c0,
- 0x80081540, 0x59a0040a, 0x59a01a0a, 0x900c19c0,
- 0x800c1d40, 0x42000000, 0x0010c2c7, 0x0201f000,
- 0x001031dc, 0x4a034407, 0x00000001, 0x4200b000,
- 0x00000020, 0x4200a800, 0x0010c2c7, 0x4200a000,
- 0xffffffff, 0x4450a800, 0x8054a800, 0x8058b040,
- 0x040207fd, 0x4d440000, 0x4d340000, 0x42028800,
- 0xffffffff, 0x42002000, 0xffffffff, 0x42003000,
- 0x00000001, 0x42003800, 0x00000001, 0x42001800,
- 0x0010c2c7, 0x59a8100f, 0x82081500, 0x000000ff,
- 0x40180000, 0x0c01f001, 0x00102b6a, 0x00102b6d,
- 0x00102b71, 0x00102b75, 0x82102500, 0xffffff00,
- 0x0401f014, 0x82102500, 0xffff00ff, 0x840811c0,
- 0x0401f010, 0x82102500, 0xff00ffff, 0x900811c0,
- 0x0401f00c, 0x82102500, 0x00ffffff, 0x9c0801c0,
- 0x80102540, 0x44101800, 0x42003000, 0xffffffff,
- 0x42002000, 0xffffffff, 0x800c1800, 0x0401f003,
- 0x40080000, 0x80102540, 0x81468800, 0x83442c80,
- 0x0000007f, 0x04021014, 0x4c080000, 0x4c0c0000,
- 0x4c180000, 0x4c1c0000, 0x0201f800, 0x00020319,
- 0x5c003800, 0x5c003000, 0x5c001800, 0x5c001000,
- 0x040207f2, 0x0201f800, 0x00104194, 0x040207ef,
- 0x80183000, 0x801c3800, 0x59341202, 0x40180000,
- 0x0c01f7ce, 0x82100580, 0xffffffff, 0x04000002,
- 0x44101800, 0x42001800, 0x0010c2c7, 0x500c0000,
- 0x82000500, 0xffffff00, 0x801c0540, 0x44001800,
- 0x5c026800, 0x5c028800, 0x42000800, 0x00000020,
- 0x59a00408, 0x59a01208, 0x900811c0, 0x80081540,
- 0x59a0040a, 0x59a01a0a, 0x900c19c0, 0x800c1d40,
- 0x42000000, 0x0010c2c7, 0x0201f000, 0x001031dc,
- 0x59a28c07, 0x59a0020c, 0x8c000500, 0x0400000e,
- 0x59a01209, 0x59a00409, 0x82000500, 0x000000ff,
- 0x900001c0, 0x80081540, 0x41784000, 0x0201f800,
- 0x00104112, 0x04000008, 0x48034407, 0x0201f000,
- 0x00101d06, 0x0201f800, 0x00020319, 0x02020000,
- 0x00101d06, 0x0201f800, 0x001031af, 0x04020005,
- 0x4a034407, 0x00000002, 0x0201f000, 0x00101d02,
- 0x59a0020c, 0x8c000500, 0x04000005, 0x0201f800,
- 0x00104194, 0x02020000, 0x00103280, 0x59a0020c,
- 0x8c000502, 0x04000019, 0x83440480, 0x000007f0,
- 0x04021016, 0x0201f800, 0x0010419d, 0x04020013,
- 0x497a5a05, 0x4a025c05, 0x00008000, 0x0201f800,
- 0x00108a11, 0x04020005, 0x4a034407, 0x00000003,
- 0x0201f000, 0x00101d02, 0x4a01d808, 0x00102bed,
- 0x1c01f000, 0x59a28c07, 0x0201f800, 0x00020319,
- 0x02020000, 0x00101d06, 0x4c580000, 0x4c500000,
- 0x4c540000, 0x4200b000, 0x0000000a, 0x4134a000,
- 0x832e5c00, 0x00000002, 0x412ca800, 0x0201f800,
- 0x0010aee2, 0x832cac00, 0x00000006, 0x4054a000,
- 0x4200b000, 0x00000004, 0x0201f800, 0x0010af0c,
- 0x5c00a800, 0x5c00a000, 0x5c00b000, 0x592c0802,
- 0x82040500, 0x00ff00ff, 0x900001c0, 0x82041500,
- 0xff00ff00, 0x80080540, 0x48025802, 0x592c0801,
- 0x82040500, 0x00ff00ff, 0x900001c0, 0x82041500,
- 0xff00ff00, 0x80080540, 0x48025801, 0x42000800,
- 0x0000000a, 0x59a00408, 0x59a01208, 0x900811c0,
- 0x80081540, 0x59a0040a, 0x59a01a0a, 0x900c19c0,
- 0x800c1d40, 0x412c0000, 0x0201f000, 0x001031dc,
- 0x496fc857, 0x496f4407, 0x59a80873, 0x8c040d3e,
- 0x02000000, 0x00101cbf, 0x59a81073, 0x82081500,
- 0x00000097, 0x59a81874, 0x59340400, 0x82000580,
- 0x00000404, 0x04020002, 0x84081546, 0x480b4408,
- 0x0201f000, 0x00101cbf, 0x59a28c07, 0x0201f800,
- 0x00020319, 0x02020000, 0x00101d06, 0x836c0580,
- 0x00000003, 0x04000005, 0x4a034407, 0x00000007,
- 0x0201f000, 0x00101d02, 0x83340c00, 0x00000006,
- 0x59a0020c, 0x8c000500, 0x04000003, 0x83340c00,
- 0x00000008, 0x58040001, 0x4803440a, 0x900001c0,
- 0x4803420a, 0x50040000, 0x48034408, 0x900001c0,
- 0x48034208, 0x59340200, 0x48034407, 0x0201f000,
- 0x00101cbf, 0x8d0e1d0e, 0x04000005, 0x4a034407,
- 0x00000001, 0x0201f000, 0x00101d02, 0x59a0220c,
- 0x8c102500, 0x0402002e, 0x8c102506, 0x04020006,
- 0x59a03209, 0x82180480, 0x00000003, 0x02021000,
- 0x00101d06, 0x59a28c07, 0x0201f800, 0x00020319,
- 0x02020000, 0x00101d06, 0x0201f800, 0x00104181,
- 0x04000005, 0x4a034407, 0x00000009, 0x0201f000,
- 0x00101d02, 0x0201f800, 0x001031af, 0x04020005,
- 0x4a034407, 0x00000002, 0x0201f000, 0x00101d02,
- 0x59a0220c, 0x8c102506, 0x04000004, 0x59343002,
- 0x82183500, 0x00ffffff, 0x497a5a05, 0x4a025c05,
- 0x00008000, 0x0201f800, 0x001089d3, 0x04020005,
- 0x4a034407, 0x00000003, 0x0201f000, 0x00101d02,
- 0x4a01d808, 0x00102ce1, 0x1c01f000, 0x59a28c07,
- 0x0201f800, 0x00020319, 0x02020000, 0x00101d06,
- 0x0201f800, 0x00104181, 0x04000005, 0x4a034407,
- 0x00000009, 0x0201f000, 0x00101d02, 0x0201f800,
- 0x001031af, 0x04020005, 0x4a034407, 0x00000002,
- 0x0201f000, 0x00101d02, 0x497a5a05, 0x4a025c05,
- 0x00008000, 0x0201f800, 0x001031af, 0x04020005,
- 0x4a034407, 0x00000002, 0x0201f000, 0x00101d02,
- 0x592e5800, 0x0201f800, 0x001089e8, 0x04020005,
- 0x4a034407, 0x00000003, 0x0201f000, 0x00101d02,
- 0x4a01d808, 0x00102cb3, 0x1c01f000, 0x592c2806,
- 0x82140d80, 0x01000000, 0x04020005, 0x4a034407,
- 0x00000004, 0x0201f000, 0x00101d02, 0x42000800,
- 0x00000008, 0x59a00208, 0x59a01408, 0x900001c0,
- 0x80081540, 0x59a0020a, 0x59a01c0a, 0x900001c0,
- 0x800c1d40, 0x832c0400, 0x00000006, 0x0201f800,
- 0x001031dc, 0x8c142d00, 0x04000003, 0x4a01d808,
- 0x00102cce, 0x1c01f000, 0x4031d800, 0x58ef400a,
- 0x58ee580d, 0x58ec0002, 0x82000580, 0x00000200,
- 0x02000000, 0x00101cfa, 0x812e59c0, 0x02000800,
- 0x0010032d, 0x42000800, 0x00000008, 0x832c0400,
- 0x00000006, 0x58ec1006, 0x58ec1807, 0x0201f000,
- 0x001031dc, 0x592c0006, 0x82000580, 0x01000000,
- 0x04020005, 0x4a034407, 0x00000004, 0x0201f000,
- 0x00101d02, 0x59a00208, 0x59a01408, 0x900001c0,
- 0x80081540, 0x59a0020a, 0x59a01c0a, 0x900001c0,
- 0x800c1d40, 0x42000800, 0x00000006, 0x832c0400,
- 0x00000007, 0x0201f000, 0x001031dc, 0x59a00a0b,
- 0x800409c0, 0x02000000, 0x00101d06, 0x82040480,
- 0x00000081, 0x04001003, 0x42000800, 0x00000080,
- 0x59c40085, 0x59881004, 0x80081400, 0x480b1004,
- 0x497b8885, 0x59c400b1, 0x48031022, 0x59c400b2,
- 0x48031021, 0x59c400a2, 0x48031023, 0x598810b7,
- 0x598800b8, 0x80081400, 0x598800b9, 0x80081400,
- 0x598800ba, 0x80081400, 0x5988011d, 0x80081400,
- 0x598800bb, 0x80081400, 0x480b1024, 0x59a00208,
- 0x59a01408, 0x900001c0, 0x80081540, 0x59a0020a,
- 0x59a01c0a, 0x900001c0, 0x800c1d40, 0x83880400,
- 0x00000000, 0x0201f800, 0x001031dc, 0x4a01d808,
- 0x00102d26, 0x1c01f000, 0x4031d800, 0x58ef400a,
- 0x58ec0002, 0x82000580, 0x00000200, 0x02000000,
- 0x00101cfa, 0x59a0020c, 0x8c000500, 0x04000008,
- 0x83880400, 0x00000000, 0x4803c840, 0x4a03c842,
- 0x00000006, 0x04011000, 0x497b8885, 0x4a034208,
- 0x00000080, 0x0201f000, 0x00101cbf, 0x8d0e1d0e,
- 0x04000005, 0x4a034407, 0x00000001, 0x0201f000,
- 0x00101d02, 0x0201f800, 0x001031af, 0x04020005,
- 0x4a034407, 0x00000002, 0x0201f000, 0x00101d02,
- 0x497a5a05, 0x4a025c05, 0x00008000, 0x59a00407,
- 0x800001c0, 0x02000000, 0x00101d06, 0x82001580,
- 0x000000ff, 0x04000005, 0x82001480, 0x00000004,
- 0x02021000, 0x00101d06, 0x40001000, 0x0201f800,
- 0x00101a3e, 0x04020005, 0x4a034407, 0x00000003,
- 0x0201f000, 0x00101d02, 0x4a01d808, 0x00102d61,
- 0x1c01f000, 0x592c0006, 0x82000580, 0x01000000,
- 0x02020000, 0x00101cbf, 0x4a034407, 0x00000004,
- 0x0201f000, 0x00101d02, 0x59a01407, 0x8c081508,
- 0x04020007, 0x8d0e1d0e, 0x04000005, 0x4a034407,
- 0x00000001, 0x0201f000, 0x00101d02, 0x59a01c08,
- 0x820c0480, 0x00001000, 0x02021000, 0x00101d06,
- 0x497b2804, 0x497b2805, 0x497b2826, 0x497b2827,
- 0x497b2829, 0x497b282a, 0x497b282c, 0x497b282d,
- 0x4803c856, 0x850e1d06, 0x8c081500, 0x04000005,
- 0x4803c856, 0x830e1d40, 0x00000011, 0x0401f004,
- 0x8c081506, 0x04000002, 0x850e1d42, 0x850e1d0a,
- 0x4202d800, 0x00000001, 0x82081500, 0x000000e0,
- 0x8008010a, 0x0c020038, 0x0201f800, 0x00104755,
- 0x0402000b, 0x4a035014, 0x00000001, 0x4a035013,
- 0x0000aaaa, 0x0201f800, 0x001046af, 0x0401f01f,
- 0x4a035014, 0x00000000, 0x0401f7f9, 0x497b5013,
- 0x0201f800, 0x00103929, 0x0201f800, 0x001061b2,
- 0x0201f800, 0x00106480, 0x0201f800, 0x0010619f,
- 0x59a00a08, 0x480788a7, 0x59c400a3, 0x82000500,
- 0xfeffffff, 0x82000540, 0x80018000, 0x40000800,
- 0x84040d20, 0x480388a3, 0x480788a3, 0x497b5032,
- 0x42000800, 0x0000002d, 0x42001000, 0x001039b1,
- 0x0201f800, 0x00105849, 0x59a00408, 0x800000c2,
- 0x800008c4, 0x8005d400, 0x42000000, 0x0000ffff,
- 0x0201f800, 0x00104755, 0x04000003, 0x59a00208,
- 0x80000110, 0x0201f800, 0x001032b7, 0x0201f000,
- 0x00101cbf, 0x00102d92, 0x00102d95, 0x00102d9f,
- 0x00101d06, 0x00102d9c, 0x00101d06, 0x00101d06,
- 0x00101d06, 0x836c0580, 0x00000003, 0x04000005,
- 0x4a034407, 0x00000007, 0x0201f000, 0x00101d02,
- 0x59a00408, 0x59a00a08, 0x900409c0, 0x80040d40,
- 0x4805d806, 0x59a0040a, 0x59a00a0a, 0x900409c0,
- 0x80040d40, 0x4805d807, 0x4a01d801, 0x00000000,
- 0x0401fbcb, 0x04020005, 0x4a034407, 0x00000002,
- 0x0201f000, 0x00101d02, 0x417a8800, 0x497b4001,
- 0x832c0400, 0x00000006, 0x48034002, 0x59a00407,
- 0x8c000504, 0x0402009a, 0x4c5c0000, 0x4c600000,
- 0x4c640000, 0x4178b800, 0x59a0c407, 0x59a0c802,
- 0x0201f800, 0x00020319, 0x0402002c, 0x0201f800,
- 0x00104181, 0x04000004, 0x0201f800, 0x001040d5,
- 0x04020026, 0x8c60c53e, 0x04020022, 0x8c60c500,
- 0x04000008, 0x59340009, 0x4400c800, 0x8064c800,
- 0x59340008, 0x4400c800, 0x8064c800, 0x0401f007,
- 0x59340007, 0x4400c800, 0x8064c800, 0x59340006,
- 0x4400c800, 0x8064c800, 0x83440580, 0x000007fe,
- 0x0400000d, 0x83440580, 0x000007fc, 0x0400000a,
- 0x0201f800, 0x00104194, 0x04000003, 0x85468d5e,
- 0x0401f005, 0x0201f800, 0x001040a1, 0x04020002,
- 0x85468d5e, 0x4544c800, 0x85468d1e, 0x8064c800,
- 0x825cbc00, 0x0000000c, 0x81468800, 0x83440480,
- 0x000007f0, 0x0400100e, 0x8c60c506, 0x04000029,
- 0x83440580, 0x000007f0, 0x04020004, 0x42028800,
- 0x000007fe, 0x0401f006, 0x83440580, 0x000007ff,
- 0x04020020, 0x42028800, 0x000007fc, 0x825c0580,
- 0x0000003c, 0x040207bf, 0x59a00001, 0x805c0400,
- 0x48034001, 0x8c60c53e, 0x04020007, 0x59a00a0b,
- 0x800409c0, 0x04000006, 0x80040480, 0x04021004,
- 0x8460c57e, 0x4178b800, 0x0401f7b2, 0x49474000,
- 0x485dd805, 0x59a00002, 0x4801d803, 0x40ec1000,
- 0x0201f800, 0x00020016, 0x4a01d808, 0x00102e82,
- 0x5c00c800, 0x5c00c000, 0x5c00b800, 0x1c01f000,
- 0x8c60c53e, 0x0402001a, 0x805cb9c0, 0x04000024,
- 0x59a00001, 0x805c0400, 0x48034001, 0x59a00a0b,
- 0x800409c0, 0x04000005, 0x80040480, 0x04021003,
- 0x4178b800, 0x0401f00e, 0x59a00801, 0x48074407,
- 0x485dd805, 0x59a00002, 0x4801d803, 0x4a01d808,
- 0x00101cb8, 0x40ec1000, 0x5c00c800, 0x5c00c000,
- 0x5c00b800, 0x0201f000, 0x00020016, 0x59a00001,
- 0x805c0c00, 0x59a0020b, 0x80040480, 0x48034208,
- 0x4a034407, 0x0000000a, 0x5c00c800, 0x5c00c000,
- 0x5c00b800, 0x0201f000, 0x00101d02, 0x59a00801,
- 0x48074407, 0x5c00c800, 0x5c00c000, 0x5c00b800,
- 0x0201f000, 0x00101cbf, 0x4031d800, 0x58ef400a,
- 0x58ec0002, 0x82000580, 0x00000200, 0x02000000,
- 0x00101cfa, 0x59a28800, 0x0401f768, 0x4c5c0000,
- 0x4c600000, 0x4c640000, 0x4178b800, 0x59a0c407,
- 0x59a0c802, 0x0201f800, 0x00020319, 0x04020031,
- 0x0201f800, 0x00104181, 0x04000004, 0x0201f800,
- 0x001040d5, 0x0402002b, 0x8c60c53e, 0x04020027,
- 0x83440580, 0x000007fe, 0x04000011, 0x83440580,
- 0x000007fc, 0x0400000e, 0x0201f800, 0x00104194,
- 0x04000005, 0x59340403, 0x8400055e, 0x48026c03,
- 0x0401f007, 0x0201f800, 0x001040a1, 0x04020004,
- 0x59340403, 0x8400055e, 0x48026c03, 0x4134a000,
- 0x4064a800, 0x4200b000, 0x00000006, 0x0201f800,
- 0x0010aee2, 0x59340007, 0x4400a800, 0x59340006,
- 0x4800a801, 0x59340009, 0x4800a802, 0x59340008,
- 0x4800a803, 0x59340403, 0x8400051e, 0x48026c03,
- 0x8264cc00, 0x0000000a, 0x825cbc00, 0x00000028,
- 0x81468800, 0x83440480, 0x000007f0, 0x0400100e,
- 0x8c60c506, 0x0400002a, 0x83440580, 0x000007f0,
- 0x04020004, 0x42028800, 0x000007fe, 0x0401f006,
- 0x83440580, 0x000007ff, 0x04020021, 0x42028800,
- 0x000007fc, 0x825c0580, 0x00000028, 0x04000002,
- 0x0401f7b9, 0x59a00001, 0x805c0400, 0x48034001,
- 0x8c60c53e, 0x04020007, 0x59a00a0b, 0x800409c0,
- 0x04000006, 0x80040480, 0x04021004, 0x8460c57e,
- 0x4178b800, 0x0401f7ac, 0x49474000, 0x485dd805,
- 0x59a00002, 0x4801d803, 0x40ec1000, 0x0201f800,
- 0x00020016, 0x4a01d808, 0x00102f21, 0x5c00c800,
- 0x5c00c000, 0x5c00b800, 0x1c01f000, 0x8c60c53e,
- 0x0402001a, 0x805cb9c0, 0x04000024, 0x59a00001,
- 0x805c0400, 0x48034001, 0x59a00a0b, 0x800409c0,
- 0x04000005, 0x80040480, 0x04021003, 0x4178b800,
- 0x0401f00e, 0x59a00801, 0x48074407, 0x485dd805,
- 0x59a00002, 0x4801d803, 0x4a01d808, 0x00101cb8,
- 0x40ec1000, 0x5c00c800, 0x5c00c000, 0x5c00b800,
- 0x0201f000, 0x00020016, 0x59a00001, 0x805c0c00,
- 0x59a0020b, 0x80040480, 0x48034208, 0x4a034407,
- 0x0000000a, 0x5c00c800, 0x5c00c000, 0x5c00b800,
- 0x0201f000, 0x00101d02, 0x59a00801, 0x48074407,
- 0x5c00c800, 0x5c00c000, 0x5c00b800, 0x0201f000,
- 0x00101cbf, 0x4031d800, 0x58ef400a, 0x58ec0002,
- 0x82000580, 0x00000200, 0x02000000, 0x00101cfa,
- 0x59a28800, 0x0401f762, 0x42002800, 0x0000007e,
- 0x59a00c07, 0x59a01208, 0x59a01c08, 0x59a0220a,
- 0x82040500, 0x0000ff00, 0x840001c0, 0x82003480,
- 0x00000020, 0x02001000, 0x00101d06, 0x80140480,
- 0x02001000, 0x00101d06, 0x82040500, 0x000000ff,
- 0x82003480, 0x00000020, 0x02001000, 0x00101d06,
- 0x80140480, 0x02001000, 0x00101d06, 0x82080500,
- 0x0000ff00, 0x840001c0, 0x82003480, 0x00000020,
- 0x02001000, 0x00101d06, 0x80140480, 0x02001000,
- 0x00101d06, 0x82080500, 0x000000ff, 0x82003480,
- 0x00000020, 0x02001000, 0x00101d06, 0x80140480,
- 0x02001000, 0x00101d06, 0x820c0500, 0x0000ff00,
- 0x840001c0, 0x82003480, 0x00000020, 0x02001000,
- 0x00101d06, 0x80140480, 0x02001000, 0x00101d06,
- 0x820c0500, 0x000000ff, 0x82003480, 0x00000020,
- 0x02001000, 0x00101d06, 0x80140480, 0x02001000,
- 0x00101d06, 0x82100500, 0x0000ff00, 0x840001c0,
- 0x82003480, 0x00000020, 0x02001000, 0x00101d06,
- 0x80140480, 0x02001000, 0x00101d06, 0x82100500,
- 0x000000ff, 0x82003480, 0x00000020, 0x02001000,
- 0x00101d06, 0x80140480, 0x02001000, 0x00101d06,
- 0x900401c0, 0x80080d40, 0x900c01c0, 0x80101d40,
- 0x83a83400, 0x0000002d, 0x44043000, 0x80183000,
- 0x440c3000, 0x0201f000, 0x00101cbf, 0x0401fa28,
- 0x04020005, 0x4a034407, 0x00000002, 0x0201f000,
- 0x00101d02, 0x42000800, 0x0000000c, 0x0401f84f,
- 0x4a01d808, 0x00102f93, 0x1c01f000, 0x4031d800,
- 0x58ee580c, 0x58ef400a, 0x58ec0002, 0x82000580,
- 0x00000200, 0x02000000, 0x00101cfa, 0x832ca400,
- 0x00000005, 0x4200b000, 0x0000000c, 0x40c8a800,
- 0x0201f800, 0x0010aee2, 0x58c80200, 0x80000540,
- 0x04000030, 0x58c80400, 0x82000500, 0xfffffffb,
- 0x0402002c, 0x58c80401, 0x80000540, 0x04000029,
- 0x82000480, 0x0000ff01, 0x04021026, 0x58c80202,
- 0x82000480, 0x0000005c, 0x04001022, 0x0201f800,
- 0x00105ce2, 0x58c80c08, 0x58c80204, 0x80040480,
- 0x0400101c, 0x58c80204, 0x82000480, 0x00000005,
- 0x04021018, 0x58c80205, 0x58c80c08, 0x80040902,
- 0x80040480, 0x04001013, 0x58c80c08, 0x0201f800,
- 0x00105c31, 0x04000017, 0x0201f800, 0x00105af2,
- 0x0402000e, 0x4979940b, 0x59c408a3, 0x82040d40,
- 0x00000002, 0x480788a3, 0x58c80202, 0x48030804,
- 0x0201f800, 0x00105ad4, 0x0201f000, 0x00101cbf,
- 0x0201f000, 0x00101d06, 0x0201f800, 0x00105d34,
- 0x0201f800, 0x00105d41, 0x0201f800, 0x00105c24,
- 0x0201f000, 0x00101d02, 0x4c000000, 0x59a01208,
- 0x59a00408, 0x900811c0, 0x80081540, 0x59a01a0a,
- 0x59a0040a, 0x900c19c0, 0x800c1d40, 0x5c000000,
- 0x0401f1eb, 0x59840000, 0x82000580, 0x00000000,
- 0x04000050, 0x59840002, 0x8c000504, 0x0400004d,
- 0x84000546, 0x48030802, 0x0201f800, 0x00105c24,
- 0x59c408a3, 0x82040d00, 0xfffffffd, 0x480788a3,
- 0x4c5c0000, 0x4200b800, 0x0010b080, 0x505e6800,
- 0x813669c0, 0x04000008, 0x5936600e, 0x813261c0,
- 0x04000005, 0x0201f800, 0x00105c15, 0x02000800,
- 0x00105ded, 0x805cb800, 0x825c0580, 0x0010b870,
- 0x040207f3, 0x59866003, 0x813261c0, 0x0400000b,
- 0x59300407, 0x82000580, 0x00000009, 0x02020800,
- 0x0010032d, 0x5930b800, 0x0201f800, 0x00105bfa,
- 0x405e6000, 0x0401f7f5, 0x497b0803, 0x4200b800,
- 0x0010b96d, 0x505e6000, 0x813261c0, 0x04000011,
- 0x59300407, 0x82000580, 0x00000009, 0x0402000d,
- 0x59300203, 0x82000580, 0x00000004, 0x04020009,
- 0x5932680a, 0x813669c0, 0x02020800, 0x0010032d,
- 0x0201f800, 0x00100bd5, 0x0201f800, 0x00105bfa,
- 0x4578b800, 0x805cb800, 0x825c0580, 0x0010b975,
- 0x040207e9, 0x42000800, 0x0010b96b, 0x49780801,
- 0x49780800, 0x0201f800, 0x00105d34, 0x0201f800,
- 0x00105d41, 0x5c00b800, 0x0201f800, 0x00105aed,
- 0x0201f000, 0x00101cbf, 0x836c0580, 0x00000003,
- 0x04000005, 0x4a034407, 0x00000007, 0x0201f000,
- 0x00101d02, 0x59a00408, 0x59a00a08, 0x900409c0,
- 0x80040d40, 0x4805d806, 0x59a0040a, 0x59a00a0a,
- 0x900409c0, 0x80040d40, 0x4805d807, 0x4a01d801,
- 0x00000000, 0x0401f95e, 0x04020005, 0x4a034407,
- 0x00000002, 0x0201f000, 0x00101d02, 0x417a8800,
- 0x497b4001, 0x832c0400, 0x00000005, 0x48034002,
- 0x4c5c0000, 0x4c600000, 0x4c640000, 0x4178b800,
- 0x4178c800, 0x59a0c002, 0x41440000, 0x81ac0400,
- 0x50026800, 0x813669c0, 0x0400000d, 0x0201f800,
- 0x00104181, 0x0402000a, 0x8c64cd3e, 0x04020006,
- 0x59340002, 0x4800c000, 0x4944c001, 0x8260c400,
- 0x00000002, 0x825cbc00, 0x00000008, 0x81468800,
- 0x83440480, 0x00000800, 0x04021021, 0x825c0480,
- 0x00000040, 0x04021002, 0x0401f7e8, 0x59a00001,
- 0x805c0400, 0x48034001, 0x8c64cd3e, 0x04000003,
- 0x4178b800, 0x0401f7e1, 0x59a00a0b, 0x800409c0,
- 0x04000006, 0x80040480, 0x04021004, 0x4178b800,
- 0x8464cd7e, 0x0401f7d9, 0x49474000, 0x485dd805,
- 0x59a00002, 0x4801d803, 0x40ec1000, 0x0201f800,
- 0x00020016, 0x4a01d808, 0x001030c7, 0x5c00c800,
- 0x5c00c000, 0x5c00b800, 0x1c01f000, 0x8c64cd3e,
- 0x0402001b, 0x805cb9c0, 0x04000025, 0x59a00001,
- 0x805c0400, 0x48034001, 0x59a00a0b, 0x800409c0,
- 0x04000005, 0x80040480, 0x04021003, 0x4178b800,
- 0x0401f00f, 0x59a00801, 0x80040906, 0x48074407,
- 0x485dd805, 0x59a00002, 0x4801d803, 0x4a01d808,
- 0x00101cb8, 0x40ec1000, 0x5c00c800, 0x5c00c000,
- 0x5c00b800, 0x0201f000, 0x00020016, 0x59a00001,
- 0x805c0c00, 0x59a0020b, 0x80040480, 0x48034208,
- 0x4a034407, 0x0000000a, 0x5c00c800, 0x5c00c000,
- 0x5c00b800, 0x0201f000, 0x00101d02, 0x59a00801,
- 0x80040906, 0x48074407, 0x5c00c800, 0x5c00c000,
- 0x5c00b800, 0x0201f000, 0x00101cbf, 0x4031d800,
- 0x58ef400a, 0x58ec0002, 0x82000580, 0x00000200,
- 0x02000000, 0x00101cfa, 0x59a28800, 0x0401f78d,
- 0x8d0e1d0e, 0x04000005, 0x4a034407, 0x00000001,
- 0x0201f000, 0x00101d02, 0x59a8021b, 0x8c00050a,
- 0x04020007, 0x8c000506, 0x04020005, 0x4a034407,
- 0x00000016, 0x0201f000, 0x00101d02, 0x0401f8d0,
- 0x04020005, 0x4a034407, 0x00000002, 0x0201f000,
- 0x00101d02, 0x59a00c07, 0x80040902, 0x59a00408,
- 0x59a01208, 0x900811c0, 0x80081540, 0x59a0040a,
- 0x59a01a0a, 0x900c19c0, 0x800c1d40, 0x832c0400,
- 0x00000006, 0x0401f8e2, 0x4a01d808, 0x001030f5,
- 0x1c01f000, 0x4031d800, 0x58ef400a, 0x58ee580c,
- 0x58ec0002, 0x82000580, 0x00000200, 0x02000000,
- 0x00101cfa, 0x592c000a, 0x0201f800, 0x001054fb,
- 0x02000800, 0x00103de1, 0x02020000, 0x00101d06,
- 0x49474001, 0x481a6802, 0x592c000b, 0x82001d80,
- 0x70000000, 0x04020007, 0x0401f8a5, 0x04020011,
- 0x4a034407, 0x00000002, 0x0201f000, 0x00101d02,
- 0x82001d80, 0x72000000, 0x02020000, 0x00101d06,
- 0x0401f89b, 0x0402089a, 0x04020899, 0x04020005,
- 0x4a034407, 0x00000002, 0x0201f000, 0x00101d02,
- 0x58ee580c, 0x4a025c05, 0x00008000, 0x497a5a05,
- 0x592c3209, 0x80183102, 0x592c1801, 0x4a001806,
- 0x01000000, 0x0201f800, 0x001089fc, 0x04020005,
- 0x4a034407, 0x00000003, 0x0201f000, 0x00101d02,
- 0x4a01d808, 0x0010312f, 0x1c01f000, 0x592c4000,
- 0x592c0006, 0x82000580, 0x01000000, 0x04020005,
- 0x4a034407, 0x00000004, 0x0201f000, 0x00101d02,
- 0x4c580000, 0x4c500000, 0x4c540000, 0x832c3c00,
- 0x00000006, 0x401ca000, 0x401ca800, 0x5820280b,
- 0x4200b000, 0x00000002, 0x82143580, 0x70000000,
- 0x04000003, 0x4200b000, 0x0000000f, 0x0201f800,
- 0x0010af0c, 0x5c00a800, 0x5c00a000, 0x5c00b000,
- 0x401c0000, 0x58201007, 0x58201808, 0x58202206,
- 0x80102102, 0x82143580, 0x70000000, 0x04020008,
- 0x82103480, 0x00000002, 0x02001000, 0x00101d06,
- 0x42000800, 0x00000002, 0x0401f082, 0x82143580,
- 0x72000000, 0x02020000, 0x00101d06, 0x82103480,
- 0x0000002a, 0x02001000, 0x00101d06, 0x42000800,
- 0x0000000f, 0x0401f877, 0x4a01d808, 0x00103169,
- 0x1c01f000, 0x4031d800, 0x58ef400a, 0x58ee580d,
- 0x58ec0002, 0x82000580, 0x00000200, 0x02000000,
- 0x00101cfa, 0x592e5800, 0x832c0c00, 0x00000006,
- 0x4c580000, 0x4c500000, 0x4c540000, 0x4004a000,
- 0x4004a800, 0x4200b000, 0x0000000f, 0x0201f800,
- 0x0010af0c, 0x5c00a800, 0x5c00a000, 0x5c00b000,
- 0x40ec1000, 0x4a001001, 0x00000000, 0x4a001005,
- 0x0000003c, 0x48041003, 0x0201f800, 0x00020016,
- 0x4a01d808, 0x0010318b, 0x1c01f000, 0x4031d800,
- 0x58ef400a, 0x58ee580d, 0x58ec0002, 0x82000580,
- 0x00000200, 0x02000000, 0x00101cfa, 0x832c0c00,
- 0x00000006, 0x4c580000, 0x4c500000, 0x4c540000,
- 0x4004a000, 0x4004a800, 0x4200b000, 0x0000000c,
- 0x0201f800, 0x0010af0c, 0x5c00a800, 0x5c00a000,
- 0x5c00b000, 0x40ec1000, 0x4a001001, 0x00000000,
- 0x4a001005, 0x00000030, 0x48041003, 0x0201f800,
- 0x00020016, 0x4a01d808, 0x00101cb8, 0x1c01f000,
- 0x0401f803, 0x412d8800, 0x1c01f000, 0x0201f800,
- 0x0010056f, 0x04000010, 0x497a5800, 0x58ec000c,
- 0x80000540, 0x04020004, 0x492dd80c, 0x492dd80d,
- 0x0401f007, 0x58ec000d, 0x48025800, 0x82000400,
- 0x00000001, 0x452c0000, 0x492dd80d, 0x832c0400,
- 0x00000005, 0x492fc857, 0x4803c857, 0x1c01f000,
- 0x4d2c0000, 0x58ec400c, 0x802041c0, 0x04000008,
- 0x4823c857, 0x40225800, 0x592c4001, 0x497a5801,
- 0x0201f800, 0x00100580, 0x0401f7f8, 0x4979d80c,
- 0x4979d80d, 0x5c025800, 0x1c01f000, 0x42003000,
- 0x00000001, 0x0401f009, 0x42003000, 0x00000001,
- 0x0401f007, 0x42003000, 0x00000000, 0x0401f004,
- 0x42003000, 0x00000000, 0x800408c4, 0x800409c0,
- 0x02000800, 0x0010032d, 0x4803c857, 0x4807c857,
- 0x480bc857, 0x480fc857, 0x481bc857, 0x48efc857,
- 0x4819d801, 0x4801d803, 0x4809d806, 0x480dd807,
- 0x4805d805, 0x40ec1000, 0x0201f800, 0x00020016,
- 0x4a01d808, 0x00101cb8, 0x1c01f000, 0x40681000,
- 0x406c1800, 0x80002d80, 0x480bc857, 0x480fc857,
- 0x4813c857, 0x4817c857, 0x8d0e1d20, 0x04000005,
- 0x59a80005, 0x8c000516, 0x02020000, 0x0010a082,
- 0x4d2c0000, 0x4da00000, 0x42034000, 0x0010b8fa,
- 0x59a00018, 0x800001c0, 0x0402000f, 0x0400600e,
- 0x480bc020, 0x480fc021, 0x4813c022, 0x4817c023,
- 0x900811c0, 0x82081540, 0x00000012, 0x480bc011,
- 0x4a03c017, 0x00000000, 0x4203e000, 0x30000001,
- 0x0401f050, 0x4c040000, 0x4c1c0000, 0x80000800,
- 0x48074018, 0x59a0381b, 0x481fc857, 0x801c39c0,
- 0x04020027, 0x82000480, 0x0000000a, 0x04021010,
- 0x59a00019, 0x80000000, 0x48034019, 0x59a0021a,
- 0x82000400, 0x00000002, 0x82000c80, 0x00000014,
- 0x4803421a, 0x04001003, 0x497b421a, 0x41780000,
- 0x59a03817, 0x801c3c00, 0x0401f030, 0x4803c856,
- 0x0201f800, 0x0010056f, 0x04000007, 0x492f401b,
- 0x492f401c, 0x412c3800, 0x497b421d, 0x497a5814,
- 0x0401f026, 0x5988001e, 0x80000000, 0x4803101e,
- 0x59a00018, 0x80000040, 0x48034018, 0x59a0021a,
- 0x59a03817, 0x801c3c00, 0x0401f01c, 0x59a0021d,
- 0x82000400, 0x00000002, 0x82000c80, 0x00000013,
- 0x04021004, 0x4803421d, 0x801c3c00, 0x0401f013,
- 0x0201f800, 0x0010056f, 0x0402000b, 0x5988001e,
- 0x80000000, 0x4803101e, 0x59a00018, 0x80000040,
- 0x48034018, 0x4803c856, 0x59a0021d, 0x801c3c00,
- 0x0401f006, 0x492f401b, 0x492c3814, 0x412c3800,
- 0x497b421d, 0x497a5814, 0x48083c00, 0x480c3a00,
- 0x48103c01, 0x48143a01, 0x5c003800, 0x5c000800,
- 0x5c034000, 0x5c025800, 0x1c01f000, 0x40681800,
- 0x406c2000, 0x40703000, 0x480fc857, 0x4813c857,
- 0x481bc857, 0x42000000, 0x0010bcda, 0x0201f800,
- 0x0010ae10, 0x801800d0, 0x40002800, 0x42001000,
- 0x00008014, 0x0401f781, 0x4c000000, 0x599c0017,
- 0x8c000512, 0x5c000000, 0x1c01f000, 0x4c000000,
- 0x599c0018, 0x8c00050e, 0x5c000000, 0x1c01f000,
- 0x8d0e1d0e, 0x04000005, 0x4a034407, 0x00000001,
- 0x0201f000, 0x00101d02, 0x836c0580, 0x00000003,
- 0x04000005, 0x4a034407, 0x00000007, 0x0201f000,
- 0x00101d02, 0x599c0017, 0x8c00050a, 0x04000005,
- 0x4a034407, 0x00000008, 0x0201f000, 0x00101d02,
- 0x59340405, 0x8c000508, 0x04020004, 0x8c00050a,
- 0x02020000, 0x00102bd7, 0x497a5a05, 0x497a5806,
- 0x4a025c05, 0x00008000, 0x0201f800, 0x00108aab,
- 0x04020005, 0x4a034407, 0x00000003, 0x0201f000,
- 0x00101d02, 0x4a01d808, 0x001032a8, 0x1c01f000,
- 0x592c0006, 0x82000580, 0x01000000, 0x04020005,
- 0x4a034407, 0x00000004, 0x0201f000, 0x00101d02,
- 0x59a28c07, 0x0201f800, 0x00020319, 0x02020000,
- 0x00101d06, 0x0201f000, 0x00102bd7, 0x82001580,
- 0x0000ffff, 0x04000009, 0x0201f800, 0x001054fb,
- 0x02000800, 0x00020319, 0x0402000c, 0x0201f800,
- 0x0010588d, 0x0401f009, 0x42028800, 0x000007ef,
- 0x0201f800, 0x00020319, 0x02000800, 0x0010588d,
- 0x81468840, 0x040217fb, 0x1c01f000, 0x4803c856,
- 0x4c0c0000, 0x4d340000, 0x4d440000, 0x42028800,
- 0x000007fe, 0x0201f800, 0x00020319, 0x04020009,
- 0x5934180a, 0x820c1d00, 0x00000001, 0x820c1d80,
- 0x00000001, 0x42001000, 0x0000801b, 0x0401ff1a,
- 0x5c028800, 0x5c026800, 0x5c001800, 0x1c01f000,
- 0x48efc857, 0x04011000, 0x48efc840, 0x4a03c842,
- 0x0000000f, 0x40000000, 0x040117ff, 0x4a01d80e,
- 0xbeefbeef, 0x1c01f000, 0x497b4000, 0x497b4001,
- 0x497b4002, 0x497b4003, 0x497b4004, 0x1c01f000,
- 0x42002000, 0x0010f694, 0x41580000, 0x41781000,
- 0x58100c07, 0x800409c0, 0x04000011, 0x82041d80,
- 0x00000003, 0x0400000e, 0x82041c80, 0x00000006,
- 0x0400100a, 0x82041d80, 0x0000000a, 0x04000007,
- 0x82041c80, 0x0000000f, 0x04001005, 0x82041c80,
- 0x00000012, 0x04021002, 0x80081000, 0x82102400,
- 0x00000024, 0x80100c80, 0x040017ea, 0x40080000,
- 0x59a81251, 0x80080480, 0x04021002, 0x41780000,
- 0x81640480, 0x04021002, 0x41780000, 0x1c01f000,
- 0x59a80005, 0x8c000514, 0x04000006, 0x42000000,
- 0x0010b939, 0x50000000, 0x82000500, 0x00000028,
- 0x1c01f000, 0x59c400a4, 0x4c580000, 0x4c500000,
- 0x4c540000, 0x82000500, 0x0000000f, 0x82000480,
- 0x00000007, 0x0400100a, 0x82006c80, 0x00000007,
- 0x02021800, 0x0010032d, 0x0c01f807, 0x5c00a800,
- 0x5c00a000, 0x5c00b000, 0x1c01f000, 0x0401f915,
- 0x0401f7fb, 0x00103338, 0x0010333e, 0x00103363,
- 0x00103385, 0x0010344d, 0x00103337, 0x1c01f000,
- 0x59c40806, 0x8c040d00, 0x04020003, 0x84040d40,
- 0x48078806, 0x1c01f000, 0x59c40005, 0x8c000534,
- 0x02020000, 0x00103a9e, 0x4a038805, 0xffffffff,
- 0x42006000, 0x00020000, 0x0201f800, 0x00103a83,
- 0x59a80015, 0x82000500, 0xfffffffa, 0x84000542,
- 0x48035015, 0x497b521b, 0x42000800, 0x0010c2c7,
- 0x45780800, 0x497b5056, 0x42006000, 0xffefffff,
- 0x42006800, 0x40000000, 0x0201f800, 0x00103a7d,
- 0x59c40006, 0x82000500, 0xffffff0f, 0x48038806,
- 0x42000800, 0x00000010, 0x42001000, 0x001039e8,
- 0x0201f800, 0x00105865, 0x0401f001, 0x42006000,
- 0xffffffff, 0x42006800, 0x00800000, 0x0201f800,
- 0x00103a7d, 0x4200b000, 0x000000c8, 0x59c400a4,
- 0x82000500, 0x0000000f, 0x82000580, 0x0000000a,
- 0x0400000f, 0x8058b040, 0x040207f9, 0x497b5010,
- 0x42006000, 0xbf7fffff, 0x42006800, 0x00018000,
- 0x0201f800, 0x00103a7d, 0x42006000, 0xfffeffff,
- 0x41786800, 0x0201f000, 0x00103a7d, 0x497b5010,
- 0x4a035055, 0x00000000, 0x80000580, 0x0201f000,
- 0x00103a8a, 0x4a038805, 0xffffffff, 0x59a80055,
- 0x82000c80, 0x00000004, 0x02021800, 0x0010032d,
- 0x0c01f001, 0x00103390, 0x001033c0, 0x00103443,
- 0x4803c856, 0x59c400a3, 0x8400051e, 0x480388a3,
- 0x4a035055, 0x00000001, 0x59c40008, 0x82000540,
- 0x00000080, 0x48038808, 0x0201f800, 0x00103a61,
- 0x42007800, 0x0010b9a0, 0x4a007806, 0x11010000,
- 0x4200a000, 0x0010b882, 0x4200a800, 0x0010b9a7,
- 0x4200b000, 0x00000002, 0x0201f800, 0x0010aee2,
- 0x59c40802, 0x84040d0c, 0x48078802, 0x42000800,
- 0x00000003, 0x497b505e, 0x0201f800, 0x0010395b,
- 0x4a03505e, 0x00000001, 0x497b505a, 0x0201f800,
- 0x00103a91, 0x42006000, 0xffffffff, 0x42006800,
- 0x00080000, 0x0201f800, 0x00103a7d, 0x42006000,
- 0xfff7ffff, 0x41786800, 0x0201f000, 0x00103a7d,
- 0x59a8005a, 0x497b505a, 0x80002540, 0x04000070,
- 0x59c40004, 0x82000500, 0x00000003, 0x0402007b,
- 0x59a80815, 0x8c040d02, 0x04000055, 0x82100580,
- 0x0000000c, 0x04020059, 0x82100400, 0x00000018,
- 0x8000b104, 0x41cc1000, 0x42001800, 0x0010b9a0,
- 0x50080800, 0x500c0000, 0x80040580, 0x04020021,
- 0x80081000, 0x800c1800, 0x8058b040, 0x040207f9,
- 0x0201f800, 0x00103a91, 0x59c80015, 0x84000508,
- 0x48039015, 0x42006000, 0xffffffff, 0x42006800,
- 0x00500000, 0x0201f800, 0x00103a7d, 0x4a035055,
- 0x00000002, 0x4a035010, 0x00000002, 0x0201f800,
- 0x001013be, 0x42000800, 0x000007d0, 0x42001000,
- 0x0010392f, 0x0201f800, 0x001059a9, 0x59a80015,
- 0x84000506, 0x48035015, 0x0201f000, 0x00103a61,
- 0x59cc0806, 0x82040d80, 0x11010000, 0x0402002b,
- 0x59cc0800, 0x82040500, 0x00ffffff, 0x0400001a,
- 0x82000580, 0x000000ef, 0x04020017, 0x59cc0801,
- 0x82040500, 0x00ffffff, 0x82000580, 0x000000ef,
- 0x04020011, 0x83cca400, 0x00000007, 0x4200a800,
- 0x0010b882, 0x4200b000, 0x00000002, 0x50500800,
- 0x50540000, 0x80040480, 0x04001007, 0x04020013,
- 0x8050a000, 0x8054a800, 0x8058b040, 0x040207f8,
- 0x0401f00e, 0x59a80015, 0x84000502, 0x48035015,
- 0x59c80015, 0x84000508, 0x48039015, 0x41cca000,
- 0x4200a800, 0x0010b9a0, 0x4200b000, 0x00000009,
- 0x0201f800, 0x0010aee2, 0x0201f800, 0x00103a91,
- 0x42006000, 0xffffffff, 0x42006800, 0x00080000,
- 0x0201f800, 0x00103a7d, 0x42006000, 0xfff7ffff,
- 0x41786800, 0x0201f800, 0x00103a7d, 0x42006000,
- 0xffffffff, 0x42006800, 0x00004000, 0x0201f800,
- 0x00103a7d, 0x59c40004, 0x82000500, 0x00000003,
- 0x04020006, 0x497b505a, 0x42000800, 0x00000003,
- 0x0201f000, 0x0010395b, 0x1c01f000, 0x1c01f000,
- 0x59a80010, 0x82006d80, 0x0000000f, 0x04000005,
- 0x82000580, 0x0000001b, 0x02020800, 0x00103924,
- 0x1c01f000, 0x59a80015, 0x84000506, 0x48035015,
- 0x497b505e, 0x59a80010, 0x82000c80, 0x0000001e,
- 0x02021800, 0x0010032d, 0x0c01f001, 0x0010348b,
- 0x001034a2, 0x001034cb, 0x001034e6, 0x00103509,
- 0x00103539, 0x0010355b, 0x0010358e, 0x001035b0,
- 0x001035d2, 0x0010360e, 0x00103635, 0x0010364b,
- 0x0010365d, 0x00103675, 0x0010368c, 0x00103691,
- 0x001036b9, 0x001036dc, 0x00103702, 0x00103725,
- 0x00103759, 0x0010379b, 0x001037c3, 0x001037db,
- 0x0010381b, 0x00103834, 0x00103847, 0x00103848,
- 0x4803c856, 0x4202d800, 0x00000007, 0x0201f800,
- 0x00104755, 0x04000007, 0x42006000, 0xffffffd7,
- 0x41786800, 0x0201f800, 0x00103a7d, 0x0401f00b,
- 0x59c40006, 0x82000500, 0xffffff0f, 0x48038806,
- 0x4a038805, 0x000000f0, 0x0201f800, 0x00104b8f,
- 0x0201f800, 0x001046a4, 0x1c01f000, 0x4803c856,
- 0x42006000, 0xbf7fffff, 0x42006800, 0x00400000,
- 0x0201f800, 0x00103a7d, 0x0201f800, 0x001013be,
- 0x4a035010, 0x00000001, 0x42001000, 0x001039e8,
- 0x0201f800, 0x00105885, 0x0201f800, 0x001039f1,
- 0x42000800, 0x000007d0, 0x42001000, 0x0010392f,
- 0x0201f000, 0x001059a9, 0x59a8005a, 0x82000580,
- 0x00000014, 0x04020023, 0x4803c857, 0x42006000,
- 0xffbfffff, 0x41786800, 0x0201f800, 0x00103a7d,
- 0x59c40004, 0x82000500, 0x00000003, 0x04020019,
- 0x42001000, 0x0010392f, 0x0201f800, 0x00105872,
- 0x59cc1006, 0x82081580, 0x11020000, 0x04020012,
- 0x59cc1007, 0x8c08153e, 0x0400000b, 0x59a80015,
- 0x8c000504, 0x04020008, 0x42000000, 0x0010bc6b,
- 0x0201f800, 0x0010ae10, 0x59a80015, 0x84000544,
- 0x48035015, 0x4a035010, 0x00000010, 0x0401f1ca,
- 0x1c01f000, 0x0201f000, 0x00103924, 0x4803c856,
- 0x4a035010, 0x00000003, 0x42006000, 0xbf3fffff,
- 0x42006800, 0x00100000, 0x0201f800, 0x00103a7d,
- 0x42001000, 0x001039e8, 0x0201f800, 0x00105885,
- 0x0201f800, 0x001039f1, 0x42001000, 0x0010392f,
- 0x0201f800, 0x00105872, 0x42007800, 0x0010b9a6,
- 0x46007800, 0x11020000, 0x42000800, 0x00000005,
- 0x0201f000, 0x0010395b, 0x59a8005a, 0x80000540,
- 0x0400001e, 0x4803c857, 0x42001000, 0x0010392f,
- 0x0201f800, 0x00105872, 0x59a8005a, 0x82000580,
- 0x00000014, 0x04020016, 0x59cc1006, 0x82081580,
- 0x11020000, 0x04020012, 0x59cc1007, 0x8c08153e,
- 0x0400000b, 0x59a80015, 0x8c000504, 0x04020008,
- 0x42000000, 0x0010bc6b, 0x0201f800, 0x0010ae10,
- 0x59a80015, 0x84000544, 0x48035015, 0x4a035010,
- 0x00000004, 0x0401f004, 0x1c01f000, 0x0201f000,
- 0x00103924, 0x4803c856, 0x4a035010, 0x00000005,
- 0x83cca400, 0x00000006, 0x4200a800, 0x0010b9a6,
- 0x4200b000, 0x00000005, 0x0201f800, 0x0010aee2,
- 0x42007800, 0x0010b9a6, 0x46007800, 0x11030000,
- 0x8d0e1d06, 0x04020014, 0x59a80015, 0x8c000500,
- 0x04020011, 0x59a8080f, 0x82040580, 0x00ffffff,
- 0x0400000d, 0x82040d00, 0x000000ff, 0x82040400,
- 0x00101b0f, 0x50000800, 0x80040910, 0x42001000,
- 0x00000004, 0x0401fb92, 0x0400000b, 0x0201f800,
- 0x00103a0b, 0x4200b000, 0x00000004, 0x83cca400,
- 0x00000007, 0x4200a800, 0x0010b9a7, 0x0201f800,
- 0x0010aee2, 0x42000800, 0x00000005, 0x0201f000,
- 0x0010395b, 0x59a8005a, 0x80000540, 0x0400001e,
- 0x4803c857, 0x42001000, 0x0010392f, 0x0201f800,
- 0x00105872, 0x59a8005a, 0x82000580, 0x00000014,
- 0x04020016, 0x59cc1006, 0x82081580, 0x11030000,
- 0x04020012, 0x59cc1007, 0x8c08153e, 0x0400000b,
- 0x59a80015, 0x8c000504, 0x04020008, 0x42000000,
- 0x0010bc6b, 0x0201f800, 0x0010ae10, 0x59a80015,
- 0x84000544, 0x48035015, 0x4a035010, 0x00000006,
- 0x0401f003, 0x1c01f000, 0x0401f3ca, 0x4803c856,
- 0x4a035010, 0x00000007, 0x83cca400, 0x00000006,
- 0x4200a800, 0x0010b9a6, 0x4200b000, 0x00000005,
- 0x0201f800, 0x0010aee2, 0x42007800, 0x0010b9a6,
- 0x46007800, 0x11040000, 0x8d0e1d06, 0x04020020,
- 0x59a80015, 0x8c000500, 0x0402001d, 0x599c0017,
- 0x8c000500, 0x0400001a, 0x599c1402, 0x82080480,
- 0x0000007f, 0x02021800, 0x0010032d, 0x4c080000,
- 0x82081400, 0x00101b0f, 0x50081000, 0x82081500,
- 0x000000ff, 0x480b500f, 0x42000800, 0x00000003,
- 0x0201f800, 0x001061d9, 0x5c000800, 0x42001000,
- 0x00000004, 0x0401fb36, 0x04000005, 0x0401fcf4,
- 0x04000003, 0x4803c856, 0x850e1d46, 0x42000800,
- 0x00000005, 0x0401f3ce, 0x59a8005a, 0x80000540,
- 0x0400001e, 0x4803c857, 0x42001000, 0x0010392f,
- 0x0201f800, 0x00105872, 0x59a8005a, 0x82000580,
- 0x00000014, 0x04020016, 0x59cc1006, 0x82081580,
- 0x11040000, 0x04020012, 0x59cc1007, 0x8c08153e,
- 0x0400000b, 0x59a80015, 0x8c000504, 0x04020008,
- 0x42000000, 0x0010bc6b, 0x0201f800, 0x0010ae10,
- 0x59a80015, 0x84000544, 0x48035015, 0x4a035010,
- 0x00000008, 0x0401f003, 0x1c01f000, 0x0401f375,
- 0x4803c856, 0x4a035010, 0x00000009, 0x83cca400,
- 0x00000006, 0x4200a800, 0x0010b9a6, 0x4200b000,
- 0x00000005, 0x0201f800, 0x0010aee2, 0x42007800,
- 0x0010b9a6, 0x46007800, 0x11050100, 0x8d0e1d06,
- 0x04020008, 0x59a80015, 0x8c000500, 0x04020005,
- 0x0401fa85, 0x04020003, 0x4803c856, 0x850e1d46,
- 0x42000800, 0x00000005, 0x0401fb91, 0x4d3c0000,
- 0x42027800, 0x00000001, 0x0201f800, 0x001091ff,
- 0x5c027800, 0x1c01f000, 0x59a8005a, 0x80000540,
- 0x04000038, 0x4803c857, 0x42001000, 0x0010392f,
- 0x0201f800, 0x00105872, 0x59a8005a, 0x82000580,
- 0x00000014, 0x04020030, 0x59cc1006, 0x82080500,
- 0x11050000, 0x82000580, 0x11050000, 0x0402002a,
- 0x8c081510, 0x04000014, 0x59cc1007, 0x8c08153e,
- 0x0400000b, 0x59a80015, 0x8c000504, 0x04020008,
- 0x42000000, 0x0010bc6b, 0x0201f800, 0x0010ae10,
- 0x59a80015, 0x84000544, 0x48035015, 0x4a035056,
- 0x00000001, 0x4a035010, 0x0000000a, 0x0401f817,
- 0x0401f014, 0x80000540, 0x04020013, 0x59cc1007,
- 0x8c08153e, 0x0400000b, 0x59a80015, 0x8c000504,
- 0x04020008, 0x42000000, 0x0010bc6b, 0x0201f800,
- 0x0010ae10, 0x59a80015, 0x84000544, 0x48035015,
- 0x497b5056, 0x4a035010, 0x0000000e, 0x0401f06a,
- 0x1c01f000, 0x0401f317, 0x4803c856, 0x4a035010,
- 0x0000000b, 0x42001000, 0x0010b9a7, 0x4008a800,
- 0x4200b000, 0x00000020, 0x4600a800, 0xffffffff,
- 0x8054a800, 0x8058b040, 0x040207fc, 0x42007800,
- 0x0010b9a6, 0x46007800, 0x11060000, 0x42001000,
- 0x0010b9a7, 0x8d0e1d06, 0x04000005, 0x50080000,
- 0x46001000, 0x00ffffff, 0x0401f00c, 0x50080800,
- 0x82040d00, 0x0000ffff, 0x59a8000f, 0x82000500,
- 0x000000ff, 0x82000540, 0x00000100, 0x800000e0,
- 0x80040d40, 0x44041000, 0x42000800, 0x00000021,
- 0x0401f327, 0x59a8005a, 0x80000540, 0x04000012,
- 0x4803c857, 0x59a8005a, 0x42001000, 0x0010392f,
- 0x0201f800, 0x00105872, 0x59a8005a, 0x82000580,
- 0x00000084, 0x04020009, 0x59cc1006, 0x82081580,
- 0x11060000, 0x04020005, 0x4a035010, 0x0000000c,
- 0x0401f003, 0x1c01f000, 0x0401f2da, 0x4803c856,
- 0x4a035010, 0x0000000d, 0x83cca400, 0x00000006,
- 0x4200a800, 0x0010b9a6, 0x4200b000, 0x00000021,
- 0x0201f800, 0x0010aee2, 0x42007800, 0x0010b9a6,
- 0x46007800, 0x11070000, 0x42000800, 0x00000021,
- 0x0401f2ff, 0x59a8005a, 0x80000540, 0x04000014,
- 0x4803c857, 0x59a8005a, 0x42001000, 0x0010392f,
- 0x0201f800, 0x00105872, 0x82000580, 0x00000084,
- 0x0402000c, 0x59cc1006, 0x82081580, 0x11070000,
- 0x04020008, 0x4a035056, 0x00000001, 0x0401fa90,
- 0x4a035010, 0x0000000e, 0x0401f003, 0x1c01f000,
- 0x0401f2b0, 0x4803c856, 0x82040d40, 0x00000001,
- 0x0201f800, 0x00103a8a, 0x4a035010, 0x0000000f,
- 0x497b505a, 0x42006000, 0xffffffff, 0x42006800,
- 0x00300000, 0x0401fbfc, 0x42006000, 0xffdfffff,
- 0x41786800, 0x0401fbf8, 0x42000800, 0x000007d0,
- 0x42001000, 0x0010392f, 0x0201f000, 0x00105849,
- 0x4803c856, 0x59a8005a, 0x80000540, 0x04020295,
- 0x1c01f000, 0x4803c856, 0x4a035010, 0x00000011,
- 0x83cca400, 0x00000006, 0x4200a800, 0x0010b9a6,
- 0x4200b000, 0x00000005, 0x0201f800, 0x0010aee2,
- 0x4200a800, 0x0010b9a6, 0x4600a800, 0x11020000,
- 0x8d0e1d06, 0x04020015, 0x59a8000f, 0x82000d00,
- 0xffff0000, 0x04000011, 0x82000500, 0x000000ff,
- 0x0400000e, 0x82000c00, 0x00101b0f, 0x50040800,
- 0x80040910, 0x82040580, 0x0000007e, 0x04000007,
- 0x82040580, 0x00000080, 0x04000004, 0x42001000,
- 0x00000004, 0x0401fa06, 0x42000800, 0x00000005,
- 0x0401f2a3, 0x59a8005a, 0x80000540, 0x04000020,
- 0x4803c857, 0x42001000, 0x0010392f, 0x0201f800,
- 0x00105872, 0x59a8005a, 0x82000580, 0x00000014,
- 0x04020016, 0x59cc1006, 0x82081580, 0x11030000,
- 0x04020012, 0x59cc1007, 0x8c08153e, 0x0400000b,
- 0x59a80015, 0x8c000504, 0x04020008, 0x42000000,
- 0x0010bc6b, 0x0201f800, 0x0010ae10, 0x59a80015,
- 0x84000544, 0x48035015, 0x4a035010, 0x00000012,
- 0x0401f804, 0x0401f002, 0x0401fa4a, 0x1c01f000,
- 0x4803c856, 0x4a035010, 0x00000013, 0x83cca400,
- 0x00000006, 0x4200a800, 0x0010b9a6, 0x4200b000,
- 0x00000005, 0x0201f800, 0x0010aee2, 0x4200a800,
- 0x0010b9a6, 0x4600a800, 0x11030000, 0x8d0e1d06,
- 0x04020013, 0x59a80015, 0x8c000500, 0x04020010,
- 0x59a8080f, 0x82040580, 0x00ffffff, 0x0400000c,
- 0x82040d00, 0x000000ff, 0x82040400, 0x00101b0f,
- 0x50000800, 0x80040910, 0x42001000, 0x00000004,
- 0x0401f9bf, 0x04000002, 0x0401fb0d, 0x42000800,
- 0x00000005, 0x0401f25a, 0x59a8005a, 0x80000540,
- 0x04000020, 0x4803c857, 0x42001000, 0x0010392f,
- 0x0201f800, 0x00105872, 0x59a8005a, 0x82000580,
- 0x00000014, 0x04020016, 0x59cc1006, 0x82081580,
- 0x11040000, 0x04020012, 0x59cc1007, 0x8c08153e,
- 0x0400000b, 0x59a80015, 0x8c000504, 0x04020008,
- 0x42000000, 0x0010bc6b, 0x0201f800, 0x0010ae10,
- 0x59a80015, 0x84000544, 0x48035015, 0x4a035010,
- 0x00000014, 0x0401f804, 0x0401f002, 0x0401fa01,
- 0x1c01f000, 0x4803c856, 0x4a035010, 0x00000015,
- 0x83cca400, 0x00000006, 0x4200a800, 0x0010b9a6,
- 0x4200b000, 0x00000005, 0x0201f800, 0x0010aee2,
- 0x4200a800, 0x0010b9a6, 0x4600a800, 0x11040000,
- 0x8d0e1d06, 0x04020021, 0x59a80015, 0x8c000500,
- 0x0402001e, 0x599c0017, 0x8c000500, 0x0400001b,
- 0x599c1402, 0x82080480, 0x0000007f, 0x02021800,
- 0x0010032d, 0x4c080000, 0x82081400, 0x00101b0f,
- 0x50081000, 0x82081500, 0x000000ff, 0x480b500f,
- 0x42000800, 0x00000003, 0x0201f800, 0x001061d9,
- 0x5c000800, 0x42001000, 0x00000004, 0x0401f96c,
- 0x04000006, 0x0201f800, 0x0010327b, 0x04000003,
- 0x4803c856, 0x850e1d46, 0x42000800, 0x00000005,
- 0x0401f203, 0x59a8005a, 0x80000540, 0x0400003f,
- 0x4803c857, 0x42001000, 0x0010392f, 0x0201f800,
- 0x00105872, 0x59a8005a, 0x82000580, 0x00000014,
- 0x04020035, 0x59cc1006, 0x82080500, 0x11050000,
- 0x82000580, 0x11050000, 0x0402002f, 0x8c081510,
- 0x04000010, 0x0401fb1d, 0x59cc1007, 0x8c08153e,
- 0x0400000b, 0x59a80015, 0x8c000504, 0x04020008,
- 0x42000000, 0x0010bc6b, 0x0201f800, 0x0010ae10,
- 0x59a80015, 0x84000544, 0x48035015, 0x0401f013,
- 0x59cc1007, 0x8c08153e, 0x0400000b, 0x59a80015,
- 0x8c000504, 0x04020008, 0x42000000, 0x0010bc6b,
- 0x0201f800, 0x0010ae10, 0x59a80015, 0x84000544,
- 0x48035015, 0x82000540, 0x00000001, 0x0401faff,
- 0x497b5056, 0x0401f003, 0x4a035056, 0x00000001,
- 0x59cc1007, 0x8c08153c, 0x04000003, 0x4a03521b,
- 0x00000008, 0x4a035010, 0x00000016, 0x0401f804,
- 0x0401f002, 0x0401f98b, 0x1c01f000, 0x4803c856,
- 0x83cca400, 0x00000006, 0x4200a800, 0x0010b9a6,
- 0x4200b000, 0x00000005, 0x0201f800, 0x0010aee2,
- 0x4a035010, 0x00000017, 0x59a80056, 0x8c000500,
- 0x04000006, 0x42001000, 0x0010b9a6, 0x46001000,
- 0x11050100, 0x0401f003, 0x4a035010, 0x0000001b,
- 0x8d0e1d06, 0x04020008, 0x59a80015, 0x8c000500,
- 0x04020005, 0x0401f894, 0x04020003, 0x4803c856,
- 0x850e1d46, 0x42000800, 0x00000005, 0x0401f9a0,
- 0x4d3c0000, 0x42027800, 0x00000001, 0x0201f800,
- 0x001091ff, 0x5c027800, 0x1c01f000, 0x59a8005a,
- 0x80000540, 0x04000015, 0x4803c857, 0x42001000,
- 0x0010392f, 0x0201f800, 0x00105872, 0x59a8005a,
- 0x82000580, 0x00000084, 0x0402000b, 0x59cc1006,
- 0x82081580, 0x11060000, 0x04020007, 0x80000580,
- 0x0401fab6, 0x4a035010, 0x00000018, 0x0401f804,
- 0x0401f002, 0x0401f94b, 0x1c01f000, 0x4803c856,
- 0x4a035010, 0x00000019, 0x83cca400, 0x00000006,
- 0x4200a800, 0x0010b9a6, 0x4200b000, 0x00000021,
- 0x0201f800, 0x0010aee2, 0x42003800, 0x0010b9a7,
- 0x8d0e1d06, 0x04020018, 0x401c2800, 0x50141000,
- 0x80080130, 0x80000000, 0x40001800, 0x82081500,
- 0x00ffffff, 0x800000f0, 0x80080540, 0x44002800,
- 0x59a8080f, 0x82040d00, 0x000000ff, 0x400c1000,
- 0x80081104, 0x82082400, 0x0010b9a7, 0x50101000,
- 0x820c0500, 0x00000003, 0x0c01f806, 0x80081540,
- 0x44082000, 0x42000800, 0x00000021, 0x0401f158,
- 0x00103808, 0x0010380d, 0x00103812, 0x00103817,
- 0x800408f0, 0x40040000, 0x82081500, 0x00ffffff,
- 0x1c01f000, 0x800408e0, 0x40040000, 0x82081500,
- 0xff00ffff, 0x1c01f000, 0x800408d0, 0x40040000,
- 0x82081500, 0xffff00ff, 0x1c01f000, 0x40040000,
- 0x82081500, 0xffffff00, 0x1c01f000, 0x59a8005a,
- 0x80000540, 0x04000016, 0x4803c857, 0x42001000,
- 0x0010392f, 0x0201f800, 0x00105872, 0x59a8005a,
- 0x82000580, 0x00000084, 0x0402000c, 0x59cc1006,
- 0x82081580, 0x11070000, 0x04020008, 0x4a035056,
- 0x00000001, 0x0401f8d2, 0x4a035010, 0x0000001a,
- 0x0401f804, 0x0401f002, 0x0401f8f2, 0x1c01f000,
- 0x82000540, 0x00000001, 0x0401fa54, 0x4a035010,
- 0x0000001b, 0x83cca400, 0x00000006, 0x4200a800,
- 0x0010b9a6, 0x59a8205a, 0x40100000, 0x8000b104,
- 0x40580800, 0x5450a800, 0x8050a000, 0x8054a800,
- 0x8058b040, 0x040207fc, 0x0401f115, 0x1c01f000,
- 0x1c01f000, 0x4803c856, 0x42003000, 0x00000004,
- 0x42004000, 0x0010b9a7, 0x599c2817, 0x8c142d14,
- 0x0402001f, 0x42001000, 0x00000003, 0x40200000,
- 0x80080400, 0x50000800, 0x82042580, 0xffffffff,
- 0x04020005, 0x80081040, 0x80183040, 0x040207f8,
- 0x0401f05e, 0x800811c0, 0x04020006, 0x82042580,
- 0x3fffffff, 0x04000058, 0x82040d40, 0xc0000000,
- 0x4200b000, 0x00000020, 0x42001800, 0x00000001,
- 0x40042000, 0x80102102, 0x04021021, 0x800c18c2,
- 0x8058b040, 0x040207fc, 0x0401f04b, 0x41781000,
- 0x40200000, 0x80080400, 0x50000800, 0x82042580,
- 0xffffffff, 0x04020005, 0x80081000, 0x80183040,
- 0x040207f8, 0x0401f040, 0x800811c0, 0x04020003,
- 0x82040d40, 0xc0000000, 0x4200b000, 0x00000001,
- 0x42001800, 0x80000000, 0x40042000, 0x801020c2,
- 0x04021007, 0x800c1902, 0x8058b000, 0x82580480,
- 0x00000021, 0x040017fa, 0x0401f02f, 0x40200000,
- 0x80082400, 0x50100000, 0x800c0540, 0x44002000,
- 0x59a80015, 0x84000540, 0x48035015, 0x40580000,
- 0x42002800, 0x00000020, 0x80142c80, 0x40080000,
- 0x42003800, 0x00000003, 0x801c0480, 0x800000ca,
- 0x80142d40, 0x82144c00, 0x00101b0f, 0x50242800,
- 0x82142d00, 0x000000ff, 0x4817500f, 0x4c040000,
- 0x40140800, 0x0201f800, 0x001013c9, 0x5c000800,
- 0x40001800, 0x500c0000, 0x80100540, 0x44001800,
- 0x59a80015, 0x84000540, 0x48035015, 0x4200a800,
- 0x0010b9a7, 0x4020a000, 0x4200b000, 0x00000004,
- 0x0201f800, 0x0010aee2, 0x82000540, 0x00000001,
- 0x0401f002, 0x80000580, 0x1c01f000, 0x4807c857,
- 0x480bc857, 0x4008b000, 0x83cca400, 0x00000007,
- 0x4200a800, 0x0010b9a7, 0x40541000, 0x0201f800,
- 0x0010aee2, 0x40041800, 0x41782000, 0x42000000,
- 0x00000003, 0x820c1c80, 0x00000020, 0x04001004,
- 0x80102000, 0x80000040, 0x0401f7fb, 0x40041800,
- 0x801021c0, 0x04000005, 0x820c1c80, 0x00000020,
- 0x80102040, 0x040207fd, 0x42002000, 0x00000001,
- 0x800c19c0, 0x04000004, 0x801020c2, 0x800c1840,
- 0x040207fe, 0x80083c00, 0x83cc2c00, 0x00000007,
- 0x80142c00, 0x50140000, 0x80102d00, 0x04020012,
- 0x80100540, 0x44003800, 0x82042400, 0x00101b0f,
- 0x50102800, 0x82142d00, 0x000000ff, 0x4817500f,
- 0x4c040000, 0x40140800, 0x0201f800, 0x001013c9,
- 0x5c000800, 0x59a80015, 0x84000540, 0x48035015,
- 0x80000580, 0x1c01f000, 0x4807c856, 0x42001000,
- 0x00008017, 0x59a81832, 0x0201f800, 0x0010ae1a,
- 0x0201f800, 0x001031f5, 0x1c01f000, 0x4807c856,
- 0x4200b000, 0x00000020, 0x83cca400, 0x00000007,
- 0x4200a800, 0x0010c2c7, 0x0201f000, 0x0010af0c,
- 0x4807c856, 0x0201f800, 0x00106480, 0x42000800,
- 0x000000f7, 0x0401f8f1, 0x497b2804, 0x497b2805,
- 0x497b2826, 0x497b2827, 0x4202d800, 0x00000001,
- 0x42006000, 0xbe7fffff, 0x42006800, 0x00018000,
- 0x0401f965, 0x42006000, 0xfffeffff, 0x41786800,
- 0x0401f961, 0x497b5032, 0x42000800, 0x0000002d,
- 0x42001000, 0x001039b1, 0x0201f000, 0x00105849,
- 0x4807c856, 0x0401ffe3, 0x497b5010, 0x497b505a,
- 0x1c01f000, 0x4807c856, 0x42006000, 0xffffffff,
- 0x42006800, 0x00000028, 0x0401f14f, 0x4807c856,
- 0x0401ffc6, 0x0201f800, 0x001061b2, 0x4df00000,
- 0x0201f800, 0x001063aa, 0x5c03e000, 0x02000800,
- 0x0010619f, 0x59c400a4, 0x82000500, 0x0000000f,
- 0x82000580, 0x00000002, 0x0402000a, 0x42006000,
- 0xffffffff, 0x42006800, 0x00200000, 0x0401f93a,
- 0x42006000, 0xffdfffff, 0x41786800, 0x0401f936,
- 0x497b5010, 0x42000800, 0x000000f7, 0x0401f8b3,
- 0x59c400a3, 0x82000500, 0xbf20bfff, 0x82000540,
- 0x0001c000, 0x480388a3, 0x84000520, 0x480388a3,
- 0x497b5032, 0x42000800, 0x0000002d, 0x42001000,
- 0x001039b1, 0x0201f000, 0x00105849, 0x497b505a,
- 0x59b400f5, 0x8c000500, 0x04020004, 0x82000540,
- 0x00000001, 0x480368f5, 0x800400c4, 0x82000400,
- 0x00002000, 0x4803910a, 0x59b400f6, 0x82000500,
- 0x00000018, 0x040207fd, 0x4a0368f0, 0x0010b99f,
- 0x42000000, 0x0010b9a6, 0x4c040000, 0x50000800,
- 0x82040d80, 0x11010000, 0x04000003, 0x50000800,
- 0x4807c857, 0x5c000800, 0x480368f1, 0x82040400,
- 0x0000dc00, 0x480368f3, 0x59c400a4, 0x82000500,
- 0x0000000f, 0x82000580, 0x00000008, 0x04020017,
- 0x4c5c0000, 0x4c600000, 0x59c4b805, 0x8c5cbd3a,
- 0x04020005, 0x42000000, 0x0010bc68, 0x0201f800,
- 0x0010ae10, 0x4a038805, 0x20000000, 0x0201f800,
- 0x001017f2, 0x4000c000, 0x0201f800, 0x0010175f,
- 0x4202d800, 0x00000001, 0x497b5010, 0x5c00c000,
- 0x5c00b800, 0x1c01f000, 0x59c8010b, 0x8c000502,
- 0x040007e2, 0x59c408a4, 0x82040d00, 0x0000000f,
- 0x82040d80, 0x0000000b, 0x04020005, 0x59a80810,
- 0x82040d40, 0x00002000, 0x0401f004, 0x59a80855,
- 0x82040d40, 0x00001000, 0x48075032, 0x59a8085e,
- 0x800409c0, 0x04020007, 0x42000800, 0x000007d0,
- 0x42001000, 0x0010392f, 0x0201f800, 0x001059a9,
- 0x1c01f000, 0x4807c856, 0x0401ff44, 0x0201f800,
- 0x001061b2, 0x4df00000, 0x0201f800, 0x001063aa,
- 0x5c03e000, 0x02000800, 0x0010619f, 0x59c400a4,
- 0x82000500, 0x0000000f, 0x82000580, 0x00000002,
- 0x0402000a, 0x42006000, 0xffffffff, 0x42006800,
- 0x00200000, 0x0401f8b8, 0x42006000, 0xffdfffff,
- 0x41786800, 0x0401f8b4, 0x0201f800, 0x00104762,
- 0x04000014, 0x0201f800, 0x00104780, 0x04020011,
- 0x4a035013, 0x0000aaaa, 0x4c040000, 0x0201f800,
- 0x00101402, 0x59a8001f, 0x82000500, 0xffff0000,
- 0x80040540, 0x4803501f, 0x5c000800, 0x4a035014,
- 0x00000000, 0x0201f800, 0x001046af, 0x0401f008,
- 0x4a035058, 0x00000005, 0x42000000, 0x00000080,
- 0x0201f800, 0x00101365, 0x0401ff22, 0x1c01f000,
- 0x0401f809, 0x42006000, 0xbf7f7fff, 0x41786800,
- 0x0401f091, 0x42006000, 0xbf7f7fff, 0x41786800,
- 0x0401f08d, 0x0201f800, 0x00104780, 0x04020009,
- 0x59c40006, 0x82000540, 0x000000f0, 0x48038806,
- 0x42006000, 0xbfffffff, 0x41786800, 0x0401f882,
- 0x1c01f000, 0x40680800, 0x800408d0, 0x59a80015,
- 0x8c000506, 0x04000006, 0x59a8000f, 0x82000500,
- 0x000000ff, 0x80040540, 0x0401f003, 0x82040540,
- 0x000000f7, 0x480388a7, 0x1c01f000, 0x4807c856,
- 0x42000000, 0x0010bd00, 0x0201f800, 0x0010ae10,
- 0x42003000, 0x00000005, 0x4d3c0000, 0x4c180000,
- 0x42003000, 0x0000000d, 0x42027800, 0x00000002,
- 0x0401f038, 0x4807c856, 0x42000000, 0x0010bd25,
- 0x0201f800, 0x0010ae10, 0x42003000, 0x00000000,
- 0x4d3c0000, 0x4c180000, 0x42003000, 0x0000000f,
- 0x42027800, 0x00000002, 0x0401f02a, 0x4807c856,
- 0x42000000, 0x0010bd23, 0x0201f800, 0x0010ae10,
- 0x42003000, 0x00000003, 0x4d3c0000, 0x4c180000,
- 0x42003000, 0x0000000e, 0x42027800, 0x00000202,
- 0x0401f01c, 0x4807c856, 0x42000000, 0x0010bd22,
- 0x0201f800, 0x0010ae10, 0x42003000, 0x00000004,
- 0x4d3c0000, 0x4c180000, 0x42003000, 0x00000010,
- 0x42027800, 0x00000202, 0x0401f00e, 0x4807c856,
- 0x42000000, 0x0010bc6a, 0x0201f800, 0x0010ae10,
- 0x42003000, 0x00000001, 0x4d3c0000, 0x4c180000,
- 0x42003000, 0x0000000c, 0x42027800, 0x00000002,
- 0x42001800, 0x0000ffff, 0x42002000, 0x00000007,
- 0x0201f800, 0x0010326a, 0x5c003000, 0x4d400000,
- 0x0201f800, 0x0010a5b4, 0x42028000, 0x0000002a,
- 0x0201f800, 0x0010dfe1, 0x5c028000, 0x5c027800,
- 0x1c01f000, 0x4807c856, 0x04011000, 0x4a03c840,
- 0x0010b99f, 0x4a03c842, 0x00000040, 0x40000000,
- 0x040117ff, 0x42007800, 0x0010b99f, 0x46007800,
- 0x00000011, 0x803c7800, 0x4a007800, 0x220000ef,
- 0x4a007801, 0x000000ef, 0x4a007802, 0x01380000,
- 0x4a007803, 0x00000000, 0x4a007804, 0xffffffff,
- 0x4a007805, 0x00000000, 0x1c01f000, 0x40686000,
- 0x406c6800, 0x59c400a3, 0x80300500, 0x80340540,
- 0x480388a3, 0x1c01f000, 0x40686000, 0x4833c857,
- 0x59c400a3, 0x80300540, 0x480388a3, 0x80300580,
- 0x480388a3, 0x1c01f000, 0x4803c856, 0x04000004,
- 0x4a03505f, 0x00000001, 0x0401f002, 0x497b505f,
- 0x1c01f000, 0x59c80002, 0x80000540, 0x0400000a,
- 0x80000040, 0x04000008, 0x4a039005, 0x00000140,
- 0x42000000, 0x00000006, 0x80000040, 0x040207ff,
- 0x0401f7f5, 0x1c01f000, 0x4c5c0000, 0x4c600000,
- 0x59c4b805, 0x485fc856, 0x8c5cbd3a, 0x04020005,
- 0x42000000, 0x0010bc68, 0x0201f800, 0x0010ae10,
- 0x4a038805, 0x20000000, 0x0201f800, 0x001017f2,
- 0x4000c000, 0x0201f800, 0x0010175f, 0x4a038805,
- 0x04000000, 0x5c00c000, 0x5c00b800, 0x1c01f000,
- 0x497a6a00, 0x4a026c00, 0x00000707, 0x497a6801,
- 0x497a6808, 0x497a6809, 0x497a6806, 0x497a6807,
- 0x497a6c0b, 0x497a680c, 0x8d0e1d20, 0x04020006,
- 0x5934080f, 0x59340010, 0x80040540, 0x02020800,
- 0x0010032d, 0x4a026a04, 0x00000100, 0x497a6a03,
- 0x59340402, 0x82000500, 0x000000ff, 0x48026c02,
- 0x497a6c04, 0x497a6a05, 0x497a6c05, 0x497a6811,
- 0x4d2c0000, 0x5934000d, 0x49466c03, 0x80025d40,
- 0x04000004, 0x0201f800, 0x00100589, 0x497a680d,
- 0x5c025800, 0x59a8006d, 0x8c000502, 0x42000000,
- 0x00000010, 0x04020002, 0x599c0401, 0x48026a0b,
- 0x599c0208, 0x48026c12, 0x4a02680a, 0x00006000,
- 0x0201f000, 0x00104435, 0x42000000, 0x00000005,
- 0x80000d80, 0x0401f02c, 0x0201f800, 0x001041b1,
- 0x04020017, 0x59a8021b, 0x8c00050a, 0x04020010,
- 0x59340212, 0x82000500, 0x0000ff00, 0x4803c857,
- 0x0400000b, 0x59340a00, 0x8c040d1e, 0x02000000,
- 0x000202a3, 0x42000000, 0x00000029, 0x42000800,
- 0x00001000, 0x492fc857, 0x0401f017, 0x492fc857,
- 0x42000000, 0x00000028, 0x0401f011, 0x8d0e1d02,
- 0x04020003, 0x8d0e1d00, 0x04000004, 0x42000000,
- 0x00000004, 0x0401f00a, 0x42000000, 0x00000029,
- 0x59340a00, 0x8c040d1e, 0x04000005, 0x492fc857,
- 0x42000800, 0x00001000, 0x0401f003, 0x492fc857,
- 0x80000d80, 0x4803c857, 0x80028540, 0x1c01f000,
- 0x490fc857, 0x8d0e1d00, 0x040207ed, 0x0201f800,
- 0x00104181, 0x040207e6, 0x59340200, 0x8c00050e,
- 0x040007e3, 0x0201f000, 0x000202a3, 0x4d480000,
- 0x4d4c0000, 0x592e9009, 0x592e980a, 0x0201f800,
- 0x00104053, 0x5c029800, 0x5c029000, 0x040007bb,
- 0x0201f000, 0x000202a7, 0x592c0207, 0x492fc857,
- 0x82000d80, 0x000007ff, 0x04020006, 0x4a025c0b,
- 0x00000030, 0x42026800, 0x0010b976, 0x0401f021,
- 0x82000c80, 0x000007f0, 0x04021045, 0x81ac0400,
- 0x50000000, 0x80026d40, 0x04000038, 0x0201f800,
- 0x001040d5, 0x04020038, 0x592c040b, 0x8c00050a,
- 0x04020014, 0x592e600a, 0x83300480, 0x0010f694,
- 0x0400103a, 0x41580000, 0x81300480, 0x04021037,
- 0x59300c07, 0x82040580, 0x00000009, 0x04020036,
- 0x4a025a07, 0x00000000, 0x497a5800, 0x59300009,
- 0x80000540, 0x04020018, 0x492e6009, 0x0401f010,
- 0x0201f800, 0x000209ee, 0x04000019, 0x592c0207,
- 0x4936600a, 0x492e6009, 0x4a026407, 0x00000009,
- 0x497a6016, 0x4932580a, 0x82000d80, 0x000007ff,
- 0x04020003, 0x4a026016, 0x00008000, 0x42027000,
- 0x00000043, 0x0201f800, 0x00020a34, 0x80000580,
- 0x0401f01f, 0x40000800, 0x58040000, 0x80000540,
- 0x040207fd, 0x492c0800, 0x0401f019, 0x42000000,
- 0x0000002c, 0x0401f015, 0x42000000, 0x00000028,
- 0x0401f012, 0x830c0500, 0x00000003, 0x04000004,
- 0x42000000, 0x00000004, 0x0401f00c, 0x42000000,
- 0x00000029, 0x0401f009, 0x42000000, 0x00000008,
- 0x0401f006, 0x82040580, 0x00000007, 0x040207fb,
- 0x42000000, 0x00000005, 0x80000540, 0x1c01f000,
- 0x492fc857, 0x592e8c07, 0x83440d80, 0x000007fc,
- 0x04000004, 0x83440480, 0x000007f0, 0x04021014,
- 0x0201f800, 0x00020319, 0x04020011, 0x0201f800,
- 0x00104194, 0x04020011, 0x0201f800, 0x00107188,
- 0x0400001b, 0x4936600a, 0x492e6009, 0x4a026407,
- 0x0000000a, 0x42027000, 0x00000040, 0x0201f800,
- 0x00020a34, 0x80000580, 0x0401f010, 0x42000000,
- 0x00000028, 0x0401f00c, 0x0201f800, 0x001041b1,
- 0x040007fb, 0x830c0d00, 0x00000003, 0x04000004,
- 0x42000000, 0x00000004, 0x0401f003, 0x42000000,
- 0x00000029, 0x80000540, 0x1c01f000, 0x42000000,
- 0x0000002c, 0x0401f7fc, 0x492fc857, 0x592e8c07,
- 0x4947c857, 0x83440c80, 0x00000800, 0x42000000,
- 0x0000000a, 0x0402119b, 0x592c4208, 0x4823c857,
- 0x82200500, 0x0000000f, 0x0c01f001, 0x00103bdb,
- 0x00103c63, 0x00103cb3, 0x00103cbe, 0x00103cc9,
- 0x00103bd7, 0x00103bd7, 0x00103bd7, 0x00103cd6,
- 0x00103d36, 0x00103d5b, 0x00103bd7, 0x00103bd7,
- 0x00103bd7, 0x00103bd7, 0x00103bd7, 0x4803c857,
- 0x42000000, 0x0000000c, 0x0401f182, 0x592c1009,
- 0x82081500, 0x00ffffff, 0x59a8000f, 0x80084d80,
- 0x42000000, 0x00000010, 0x0400017a, 0x0201f800,
- 0x00104112, 0x04000036, 0x4803c857, 0x82004d80,
- 0x0000001d, 0x0402001a, 0x0201f800, 0x00104f93,
- 0x59340405, 0x4c000000, 0x0201f800, 0x00104181,
- 0x5c000000, 0x04000004, 0x8c20450a, 0x04000028,
- 0x80000580, 0x44002800, 0x59340008, 0x48002802,
- 0x59340009, 0x48002801, 0x59340006, 0x48002804,
- 0x59340007, 0x48002803, 0x4200b000, 0x00000005,
- 0x0201f800, 0x00108ede, 0x0401f18b, 0x4803c857,
- 0x82004d80, 0x0000001a, 0x04020003, 0x40101000,
- 0x0401f15b, 0x4803c857, 0x82004d80, 0x0000001b,
- 0x04020003, 0x40181000, 0x0401f155, 0x4803c857,
- 0x82004d80, 0x0000001c, 0x04000156, 0x82004d80,
- 0x00000019, 0x42000000, 0x0000000a, 0x04000145,
- 0x42000000, 0x0000000a, 0x0402015c, 0x59a8006d,
- 0x8c000502, 0x0400001b, 0x0201f800, 0x00104181,
- 0x04000018, 0x59340212, 0x82000500, 0x0000ff00,
- 0x42001000, 0x00000010, 0x0402000c, 0x42001000,
- 0x00000008, 0x59a8021b, 0x8c000506, 0x04020009,
- 0x59340002, 0x82000500, 0x00ff0000, 0x82000580,
- 0x00ff0000, 0x04000007, 0x0201f800, 0x00104448,
- 0x42000000, 0x0000001c, 0x40181000, 0x0402012c,
- 0x0201f800, 0x00107188, 0x04000136, 0x4936600a,
- 0x492e6009, 0x4a026407, 0x00000001, 0x8c20450a,
- 0x04000004, 0x592c0405, 0x8400055c, 0x48025c05,
- 0x4c200000, 0x4d3c0000, 0x42027800, 0x00001800,
- 0x0201f800, 0x0010e06f, 0x5c027800, 0x5c004000,
- 0x8c204512, 0x0400000b, 0x599c0018, 0x8c000518,
- 0x04000008, 0x592c000a, 0x82000500, 0x00000380,
- 0x5934080a, 0x80040d40, 0x84040d54, 0x4806680a,
- 0x417a7800, 0x0401f939, 0x42000800, 0x00000003,
- 0x0401f941, 0x42027000, 0x00000002, 0x0201f800,
- 0x00020a34, 0x80000580, 0x0401f12f, 0x0201f800,
- 0x00020319, 0x04020111, 0x0201f800, 0x00104187,
- 0x0400000c, 0x0201f800, 0x00104181, 0x04020111,
- 0x4c600000, 0x4178c000, 0x42027800, 0x00001800,
- 0x417a6000, 0x0201f800, 0x00101a94, 0x5c00c000,
- 0x59a8006d, 0x8c000502, 0x0400001b, 0x0201f800,
- 0x00104181, 0x04000018, 0x59340212, 0x82000500,
- 0x0000ff00, 0x42001000, 0x00000010, 0x0402000c,
- 0x42001000, 0x00000008, 0x59a8021b, 0x8c000506,
- 0x04020009, 0x59340002, 0x82000500, 0x00ff0000,
- 0x82000580, 0x00ff0000, 0x04000007, 0x0201f800,
- 0x00104448, 0x42000000, 0x0000001c, 0x40181000,
- 0x040200d3, 0x0201f800, 0x00107188, 0x040000dd,
- 0x5934080a, 0x8c204512, 0x0400000c, 0x599c0018,
- 0x8c000518, 0x04000009, 0x592c000a, 0x82000500,
- 0x00000380, 0x82041500, 0xfffffc7f, 0x80080d40,
- 0x84040d54, 0x0401f002, 0x84040d14, 0x4806680a,
- 0x4936600a, 0x492e6009, 0x4a026407, 0x00000001,
- 0x417a7800, 0x0401f8e9, 0x42000800, 0x00000005,
- 0x0401f8f1, 0x42027000, 0x00000003, 0x0201f800,
- 0x00020a34, 0x80000580, 0x0401f0df, 0x0201f800,
- 0x00020319, 0x040200c1, 0x0201f800, 0x0010419d,
- 0x040200c4, 0x0201f800, 0x00108e97, 0x040000b5,
- 0x80000580, 0x0401f0d4, 0x0201f800, 0x00020319,
- 0x040200b6, 0x0201f800, 0x0010419d, 0x040200b9,
- 0x0201f800, 0x00108a11, 0x040000aa, 0x80000580,
- 0x0401f0c9, 0x0201f800, 0x00020319, 0x040200ab,
- 0x83444d80, 0x000007fe, 0x42000000, 0x0000000a,
- 0x0402008c, 0x0201f800, 0x00108eaf, 0x0400009d,
- 0x80000580, 0x0401f0bc, 0x82200500, 0x00000070,
- 0x04020005, 0x8c20450e, 0x42000000, 0x0000000c,
- 0x04020080, 0x8c20450a, 0x0400000e, 0x4d3c0000,
- 0x42027800, 0x00005000, 0x8c20450e, 0x04020003,
- 0x853e7d56, 0x853e7d1c, 0x82200500, 0x000004a0,
- 0x0201f800, 0x00104147, 0x5c027800, 0x0401f0a2,
- 0x8c204508, 0x04020024, 0x592c1009, 0x82081500,
- 0x00ffffff, 0x59a8000f, 0x80084d80, 0x42000000,
- 0x00000010, 0x04000067, 0x0201f800, 0x00104112,
- 0x0400002c, 0x4803c857, 0x82004d80, 0x0000001a,
- 0x04020003, 0x40101000, 0x0401f065, 0x4803c857,
- 0x82004d80, 0x0000001b, 0x04020003, 0x40181000,
- 0x0401f05f, 0x4803c857, 0x82004d80, 0x0000001c,
- 0x04000060, 0x82004d80, 0x00000019, 0x42000000,
- 0x0000000a, 0x0400004f, 0x42000000, 0x0000000a,
- 0x0401f066, 0x0201f800, 0x00020319, 0x04020063,
- 0x4d3c0000, 0x42027800, 0x00005000, 0x8c20450e,
- 0x04020003, 0x853e7d56, 0x853e7d1c, 0x82200500,
- 0x00000090, 0x0201f800, 0x0010412f, 0x5c027800,
- 0x42000000, 0x0000000a, 0x0402003a, 0x0401f06a,
- 0x836c0580, 0x00000003, 0x42000800, 0x00000007,
- 0x04020006, 0x0201f800, 0x00108e42, 0x04000007,
- 0x80000580, 0x0401f064, 0x0201f800, 0x001041ca,
- 0x04000059, 0x0401f05c, 0x0201f800, 0x001041ca,
- 0x0400003c, 0x0401f058, 0x0201f800, 0x00020319,
- 0x0402003e, 0x836c0580, 0x00000003, 0x04020048,
- 0x8c204508, 0x0400000a, 0x4c600000, 0x4178c000,
- 0x42027800, 0x00001800, 0x417a6000, 0x0201f800,
- 0x00101a94, 0x5c00c000, 0x0401f047, 0x0201f800,
- 0x00104187, 0x0400000c, 0x0201f800, 0x00104181,
- 0x04020030, 0x4c600000, 0x4178c000, 0x42027800,
- 0x00001800, 0x417a6000, 0x0201f800, 0x00101a94,
- 0x5c00c000, 0x480bc856, 0x0201f800, 0x00108ca0,
- 0x04000018, 0x80000580, 0x0401f037, 0x0401f7db,
- 0x480bc857, 0x42000800, 0x00000019, 0x40001000,
- 0x4200b000, 0x00000002, 0x0401f00a, 0x480bc857,
- 0x40000800, 0x4200b000, 0x00000002, 0x0401f005,
- 0x480bc857, 0x40000800, 0x4200b000, 0x00000001,
- 0x480bc857, 0x42028000, 0x00000031, 0x0401f020,
- 0x480bc857, 0x42000800, 0x00000003, 0x4200b000,
- 0x00000001, 0x0401f7f7, 0x480bc857, 0x42000800,
- 0x0000000a, 0x4200b000, 0x00000001, 0x0401f7f1,
- 0x480bc857, 0x42000800, 0x00000009, 0x40001000,
- 0x4200b000, 0x00000002, 0x0401f7ea, 0x480bc857,
- 0x42000800, 0x00000007, 0x4200b000, 0x00000001,
- 0x0401f7e4, 0x480bc857, 0x4200b000, 0x00000001,
- 0x0401f7e0, 0x80028580, 0x4178b000, 0x82000540,
- 0x00000001, 0x1c01f000, 0x4937c857, 0x5932680a,
- 0x59341200, 0x813e79c0, 0x04000003, 0x84081540,
- 0x0401f002, 0x84081500, 0x480a6a00, 0x1c01f000,
- 0x40680800, 0x5932680a, 0x5c000000, 0x4c000000,
- 0x4803c857, 0x4937c857, 0x83340580, 0x0010c2b2,
- 0x04000030, 0x82040580, 0x00000006, 0x04020004,
- 0x42000000, 0x00000606, 0x0401f021, 0x82040580,
- 0x00000004, 0x04020004, 0x42000000, 0x00000404,
- 0x0401f01b, 0x82040580, 0x00000007, 0x42000000,
- 0x00000707, 0x04000016, 0x82040580, 0x00000003,
- 0x42000000, 0x00000703, 0x04000011, 0x82040580,
- 0x00000005, 0x42000000, 0x00000405, 0x0400000c,
- 0x82040580, 0x00000009, 0x42000000, 0x00000409,
- 0x04000007, 0x82040580, 0x0000000b, 0x42000000,
- 0x0000070b, 0x02020800, 0x0010032d, 0x4803c857,
- 0x48026c00, 0x82040d80, 0x00000006, 0x04020005,
- 0x59341404, 0x800811c0, 0x02000800, 0x0010032d,
- 0x1c01f000, 0x40683000, 0x0401f80b, 0x41358800,
- 0x04000002, 0x41798800, 0x1c01f000, 0x40683000,
- 0x0401f80a, 0x41358800, 0x04000002, 0x41798800,
- 0x1c01f000, 0x5c000000, 0x4c000000, 0x4803c857,
- 0x4947c857, 0x481bc857, 0x83440480, 0x00000800,
- 0x0402103a, 0x83441400, 0x0010b080, 0x50080000,
- 0x80026d40, 0x04020011, 0x4c180000, 0x4d2c0000,
- 0x0201f800, 0x0010055a, 0x412e6800, 0x5c025800,
- 0x5c003000, 0x0400002d, 0x45341000, 0x497a680d,
- 0x497a6810, 0x497a680f, 0x497a680e, 0x4c180000,
- 0x0401fcb8, 0x5c003000, 0x59340a12, 0x4c040000,
- 0x0201f800, 0x00104755, 0x5c000800, 0x04000009,
- 0x82180500, 0x00ffff00, 0x04000008, 0x59a8100f,
- 0x82081500, 0x00ffff00, 0x80080580, 0x04000003,
- 0x80000580, 0x0401f004, 0x82180500, 0x000000ff,
- 0x800000d0, 0x80040d80, 0x04000003, 0x4803c857,
- 0x48026a12, 0x83440580, 0x000007fe, 0x04020004,
- 0x4a026802, 0x00fffffe, 0x0401f006, 0x59340002,
- 0x80180580, 0x04000003, 0x481bc857, 0x481a6802,
- 0x80000580, 0x1c01f000, 0x4803c856, 0x82000540,
- 0x00000001, 0x0401f7fc, 0x0401f807, 0x42018800,
- 0x00000001, 0x04020003, 0x42018800, 0x00000000,
- 0x1c01f000, 0x4947c857, 0x83440480, 0x00000800,
- 0x04021010, 0x83441400, 0x0010b080, 0x50080000,
- 0x80026d40, 0x0400000a, 0x0401fb4b, 0x04020009,
- 0x8d0e1d02, 0x04000004, 0x59340200, 0x8c00050e,
- 0x04000004, 0x82000540, 0x00000001, 0x1c01f000,
- 0x80000580, 0x0401f7fe, 0x5c000000, 0x4c000000,
- 0x4803c857, 0x4947c857, 0x0401f807, 0x42018800,
- 0x00000001, 0x04000003, 0x42018800, 0x00000000,
- 0x1c01f000, 0x4d2c0000, 0x4d300000, 0x83440480,
- 0x00000800, 0x04021024, 0x83441400, 0x0010b080,
- 0x50080000, 0x80026d40, 0x0400001b, 0x45781000,
- 0x5934000d, 0x80025d40, 0x02020800, 0x00100589,
- 0x59366011, 0x813261c0, 0x0400000e, 0x4c640000,
- 0x5930c800, 0x59325809, 0x0201f800, 0x00108953,
- 0x02020800, 0x00100589, 0x0201f800, 0x00020a10,
- 0x82666540, 0x00000000, 0x040207f6, 0x5c00c800,
- 0x0201f800, 0x00104435, 0x41365800, 0x0201f800,
- 0x00100581, 0x80000580, 0x5c026000, 0x5c025800,
- 0x1c01f000, 0x82000540, 0x00000001, 0x0401f7fb,
- 0x0201f800, 0x00020319, 0x41358800, 0x04000002,
- 0x41798800, 0x1c01f000, 0x4c580000, 0x59cc0001,
- 0x4937c857, 0x82000500, 0x00ffffff, 0x48026802,
- 0x497a6c01, 0x497a6a01, 0x59340200, 0x82000500,
- 0xffffdffd, 0x48026a00, 0x0201f800, 0x00104755,
- 0x0402001a, 0x59340403, 0x82000580, 0x000007fe,
- 0x04000005, 0x59a8021b, 0x8c00050a, 0x04020013,
- 0x0401f008, 0x59cc0408, 0x8c000518, 0x0400000f,
- 0x59cc0009, 0x48035028, 0x59cc000a, 0x48035029,
- 0x59a80873, 0x8c040d3e, 0x04020008, 0x59cc0207,
- 0x80000540, 0x04020003, 0x42000000, 0x00000001,
- 0x48038893, 0x48035012, 0x59cc0a09, 0x82040d00,
- 0x00000010, 0x59cc0408, 0x82000500, 0x00000020,
- 0x04000005, 0x84040d40, 0x59a8121b, 0x8408155a,
- 0x480b521b, 0x5934000a, 0x82000500, 0xffffffee,
- 0x80040540, 0x4802680a, 0x83cca400, 0x0000000b,
- 0x8334ac00, 0x00000006, 0x4200b000, 0x00000002,
- 0x0201f800, 0x0010aee2, 0x83cca400, 0x0000000d,
- 0x8334ac00, 0x00000008, 0x4200b000, 0x00000002,
- 0x0201f800, 0x0010aee2, 0x59cc0a18, 0x59a80006,
- 0x8c00050c, 0x04020015, 0x82040480, 0x00000800,
- 0x0402100c, 0x82040480, 0x00000400, 0x04001004,
- 0x42000800, 0x00000400, 0x0401f006, 0x82040480,
- 0x00000200, 0x04001003, 0x42000800, 0x00000200,
- 0x42001000, 0x0010b995, 0x58080201, 0x80041480,
- 0x04001002, 0x40000800, 0x48066a04, 0x59340403,
- 0x82000580, 0x000007fe, 0x04020003, 0x59cc0a08,
- 0x48066a04, 0x0201f800, 0x0010446b, 0x5c00b000,
- 0x1c01f000, 0x59a8021b, 0x4937c857, 0x8c000508,
- 0x04000008, 0x84000556, 0x4803c857, 0x4803521b,
- 0x42001000, 0x0010ebc8, 0x0201f800, 0x00105872,
- 0x59cc0207, 0x4803c857, 0x48026a05, 0x59cc020a,
- 0x4803c857, 0x48026c05, 0x59341200, 0x599c0818,
- 0x5934180a, 0x4807c857, 0x480bc857, 0x480fc857,
- 0x59cc2006, 0x82102500, 0xff000000, 0x82102580,
- 0x02000000, 0x04000007, 0x8c00050e, 0x04000009,
- 0x8c0c1d14, 0x04000003, 0x8c0c1d0e, 0x04000005,
- 0x8c040d18, 0x04000003, 0x8408154a, 0x0401f002,
- 0x8408150a, 0x8c000510, 0x04000009, 0x8c0c1d14,
- 0x04000003, 0x8c0c1d10, 0x04000005, 0x8c040d18,
- 0x04000003, 0x8408154e, 0x0401f002, 0x8408150e,
- 0x8c000512, 0x04000009, 0x8c0c1d14, 0x04000003,
- 0x8c0c1d12, 0x04000005, 0x8c040d18, 0x04000003,
- 0x8408155c, 0x0401f002, 0x8408151c, 0x480a6a00,
- 0x1c01f000, 0x4803c856, 0x4c5c0000, 0x4d2c0000,
- 0x4c580000, 0x5934000d, 0x80025d40, 0x04000029,
- 0x592c0003, 0x82000480, 0x00000008, 0x0400100b,
- 0x412cb800, 0x592c0001, 0x80025d40, 0x040207f9,
- 0x0201f800, 0x0010056f, 0x04000037, 0x492fc857,
- 0x492cb801, 0x0401f020, 0x832c0c00, 0x00000004,
- 0x4200b000, 0x00000008, 0x50040000, 0x82000580,
- 0xffffffff, 0x04020006, 0x80041000, 0x50080000,
- 0x82000580, 0xffffffff, 0x04000007, 0x82040c00,
- 0x00000002, 0x8058b040, 0x040207f4, 0x0201f800,
- 0x0010032d, 0x45480800, 0x454c1000, 0x592c1803,
- 0x800c1800, 0x480e5803, 0x480fc857, 0x0401f014,
- 0x0201f800, 0x0010056f, 0x04000017, 0x492fc857,
- 0x492e680d, 0x497a5802, 0x4a025803, 0x00000001,
- 0x494a5804, 0x494e5805, 0x832c0c00, 0x00000006,
- 0x4200b000, 0x0000000e, 0x46000800, 0xffffffff,
- 0x80040800, 0x8058b040, 0x040207fc, 0x82000540,
- 0x00000001, 0x5c00b000, 0x5c025800, 0x5c00b800,
- 0x1c01f000, 0x80000580, 0x0401f7fb, 0x4803c856,
- 0x4d3c0000, 0x4d2c0000, 0x5934000d, 0x80025d40,
- 0x0400001f, 0x592c0002, 0x80000540, 0x0402001f,
- 0x412e7800, 0x0401f8d6, 0x0402001c, 0x46000800,
- 0xffffffff, 0x46001000, 0xffffffff, 0x4813c857,
- 0x480fc857, 0x580c0003, 0x82000c80, 0x00000002,
- 0x04021014, 0x480fc857, 0x400c0000, 0x812c0580,
- 0x04020004, 0x580c0001, 0x4802680d, 0x0401f003,
- 0x580c0001, 0x48002001, 0x400e5800, 0x0201f800,
- 0x00100580, 0x82000540, 0x00000001, 0x5c025800,
- 0x5c027800, 0x1c01f000, 0x80000580, 0x0401f7fc,
- 0x80000040, 0x48001803, 0x4803c857, 0x0401f7f6,
- 0x0201f800, 0x00020111, 0x59300008, 0x8400054e,
- 0x48026008, 0x592c1a05, 0x820c1d00, 0x000000ff,
- 0x820c0580, 0x00000048, 0x04000013, 0x0201f000,
- 0x00020360, 0x8c000500, 0x02020800, 0x00020179,
- 0x4a026203, 0x00000002, 0x592c1a05, 0x820c1d00,
- 0x000000ff, 0x820c0580, 0x00000018, 0x02000000,
- 0x00020360, 0x820c0580, 0x00000048, 0x02020000,
- 0x00020360, 0x42000800, 0x80000804, 0x0201f800,
- 0x000209a3, 0x0201f000, 0x00020369, 0x4a025a07,
- 0x00000008, 0x0201f000, 0x000203ab, 0x4a025a07,
- 0x00000029, 0x0201f000, 0x000203ab, 0x4a025a07,
- 0x0000002a, 0x0201f000, 0x000203ab, 0x4a025a07,
- 0x00000028, 0x0201f000, 0x000203ab, 0x4a025a07,
- 0x0000000e, 0x0201f000, 0x000203ab, 0x4943c857,
- 0x4d440000, 0x4d340000, 0x4d2c0000, 0x4c580000,
- 0x4200b000, 0x000007f0, 0x417a8800, 0x0201f800,
- 0x00020319, 0x04020007, 0x8d3e7d06, 0x04000004,
- 0x59340200, 0x8c00050e, 0x04020002, 0x0401f813,
- 0x81468800, 0x8058b040, 0x040207f5, 0x83440480,
- 0x00000800, 0x04021008, 0x8d3e7d02, 0x04000006,
- 0x42028800, 0x000007f0, 0x4200b000, 0x00000010,
- 0x0401f7eb, 0x5c00b000, 0x5c025800, 0x5c026800,
- 0x5c028800, 0x1c01f000, 0x4d2c0000, 0x4c600000,
- 0x4c5c0000, 0x4178b800, 0x5936580f, 0x812e59c0,
- 0x04000029, 0x592c0205, 0x82000500, 0x000000ff,
- 0x82000580, 0x00000012, 0x04000020, 0x8d3e7d00,
- 0x04000003, 0x0401f844, 0x0402001c, 0x592cc000,
- 0x497a5800, 0x805cb9c0, 0x04020009, 0x59340010,
- 0x812c0580, 0x04020004, 0x497a680f, 0x497a6810,
- 0x0401f008, 0x4862680f, 0x0401f006, 0x4860b800,
- 0x59340010, 0x812c0580, 0x04020002, 0x485e6810,
- 0x4a025a05, 0x00000103, 0x49425a07, 0x497a580a,
- 0x0201f800, 0x00108afb, 0x0201f800, 0x000203ab,
- 0x40625800, 0x0401f7da, 0x412cb800, 0x592e5800,
- 0x0401f7d7, 0x5c00b800, 0x5c00c000, 0x5c025800,
- 0x1c01f000, 0x4803c856, 0x41781800, 0x5934000f,
- 0x80025d40, 0x04000016, 0x592c0006, 0x80200580,
- 0x592c0000, 0x04000003, 0x412c1800, 0x0401f7f9,
- 0x592c0a05, 0x82040d00, 0x000000ff, 0x82040d80,
- 0x00000012, 0x040007f9, 0x497a5800, 0x800c19c0,
- 0x04000008, 0x48001800, 0x80000540, 0x04020004,
- 0x480e6810, 0x82000540, 0x00000001, 0x1c01f000,
- 0x4802680f, 0x80000540, 0x040207fd, 0x497a6810,
- 0x0401f7f9, 0x592c0009, 0x81480580, 0x04020003,
- 0x592c000a, 0x814c0580, 0x1c01f000, 0x4803c856,
- 0x4c580000, 0x413c1800, 0x400c2000, 0x593c0002,
- 0x80000540, 0x04020018, 0x4200b000, 0x00000008,
- 0x820c0c00, 0x00000004, 0x50040000, 0x81480580,
- 0x04020005, 0x80041000, 0x50080000, 0x814c0580,
- 0x0400000d, 0x82040c00, 0x00000002, 0x8058b040,
- 0x040207f6, 0x400c2000, 0x580c0001, 0x80001d40,
- 0x040207ee, 0x82000540, 0x00000001, 0x5c00b000,
- 0x1c01f000, 0x80000580, 0x0401f7fd, 0x4937c857,
- 0x4c580000, 0x4d2c0000, 0x5934000d, 0x80025d40,
- 0x04020016, 0x0201f800, 0x0010056f, 0x04000010,
- 0x492e680d, 0x4a025802, 0x00000001, 0x497a5803,
- 0x832c0c00, 0x00000004, 0x4200b000, 0x00000010,
- 0x46000800, 0xffffffff, 0x80040800, 0x8058b040,
- 0x040207fc, 0x82000540, 0x00000001, 0x5c025800,
- 0x5c00b000, 0x1c01f000, 0x4d2c0000, 0x592e5801,
- 0x0201f800, 0x00100589, 0x5c025800, 0x497a5801,
- 0x0401f7e9, 0x4d2c0000, 0x5936580d, 0x812e59c0,
- 0x04000007, 0x4937c857, 0x497a680d, 0x0201f800,
- 0x00100589, 0x82000540, 0x00000001, 0x5c025800,
- 0x1c01f000, 0x59340405, 0x4937c857, 0x4803c857,
- 0x8c000508, 0x1c01f000, 0x4933c857, 0x5930380a,
- 0x581c0200, 0x8400051a, 0x48003a00, 0x1c01f000,
- 0x42026800, 0x0010b976, 0x497a680e, 0x42028800,
- 0x000007ff, 0x0201f800, 0x00103ab4, 0x4937c857,
- 0x4a026c00, 0x00000606, 0x4a026802, 0x00ffffff,
- 0x4a026a04, 0x00000200, 0x4a026c04, 0x00000002,
- 0x1c01f000, 0x0401f807, 0x42018800, 0x00000001,
- 0x04020003, 0x42018800, 0x00000000, 0x1c01f000,
- 0x5930000a, 0x50000000, 0x4933c857, 0x4803c857,
- 0x8c00050e, 0x1c01f000, 0x5930000a, 0x50000000,
- 0x8c00050a, 0x1c01f000, 0x0401f807, 0x42018800,
- 0x00000001, 0x04000003, 0x42018800, 0x00000000,
- 0x1c01f000, 0x4933c856, 0x0401f8be, 0x04000006,
- 0x59340400, 0x82000d00, 0x000000ff, 0x82041580,
- 0x00000005, 0x1c01f000, 0x0401f807, 0x42018800,
- 0x00000001, 0x04020003, 0x42018800, 0x00000000,
- 0x1c01f000, 0x4d340000, 0x83ac0400, 0x000007fe,
- 0x50000000, 0x80026d40, 0x04000003, 0x59340200,
- 0x8c00051a, 0x5c026800, 0x1c01f000, 0x4937c857,
- 0x493fc857, 0x59340403, 0x81ac0400, 0x50000000,
- 0x81340580, 0x02020800, 0x0010032d, 0x59341200,
- 0x813e79c0, 0x04000003, 0x8408155e, 0x0401f002,
- 0x8408151e, 0x480a6a00, 0x1c01f000, 0x4937c857,
- 0x0201f800, 0x00101b0a, 0x04000006, 0x59a80828,
- 0x42001000, 0x00104109, 0x0201f800, 0x001059a9,
- 0x1c01f000, 0x4937c857, 0x42001000, 0x00104109,
- 0x0201f800, 0x00105872, 0x59a8121b, 0x84081512,
- 0x480b521b, 0x1c01f000, 0x4008d000, 0x4020d800,
- 0x829d3c80, 0x00000004, 0x409ce000, 0x0201f800,
- 0x0010ecc2, 0x589c0000, 0x589c2001, 0x589c2802,
- 0x589c3003, 0x829d3c00, 0x00000004, 0x800001c0,
- 0x1c01f000, 0x4d340000, 0x406a6800, 0x0401f803,
- 0x5c026800, 0x1c01f000, 0x5934000f, 0x5934140b,
- 0x80081040, 0x04001002, 0x480a6c0b, 0x80000540,
- 0x02020800, 0x00020327, 0x1c01f000, 0x4803c857,
- 0x4947c857, 0x4c300000, 0x82006500, 0x00000030,
- 0x04000006, 0x4c000000, 0x0201f800, 0x00108da8,
- 0x5c000000, 0x0402000b, 0x8c00050e, 0x04000006,
- 0x0201f800, 0x00020319, 0x04020006, 0x4937c857,
- 0x0401fd02, 0x80000580, 0x5c006000, 0x1c01f000,
- 0x82000540, 0x00000001, 0x0401f7fc, 0x4803c857,
- 0x4c580000, 0x4d440000, 0x40001000, 0x80000d80,
- 0x4200b000, 0x000007f0, 0x4c040000, 0x40068800,
- 0x4c080000, 0x40080000, 0x0401ffdf, 0x5c001000,
- 0x5c000800, 0x80040800, 0x8058b040, 0x040207f7,
- 0x8c081514, 0x04000007, 0x84081514, 0x4200b000,
- 0x00000001, 0x42000800, 0x000007fc, 0x0401f7ef,
- 0x4d300000, 0x4d400000, 0x0401fb63, 0x42028800,
- 0x0000ffff, 0x42026000, 0x0010f64c, 0x4a02600a,
- 0x0010c2b2, 0x42028000, 0x00000029, 0x0201f800,
- 0x001061b2, 0x4df00000, 0x0201f800, 0x0010e5d8,
- 0x0201f800, 0x0010eb5d, 0x5c03e000, 0x02000800,
- 0x0010619f, 0x5c028000, 0x5c026000, 0x5c028800,
- 0x5c00b000, 0x1c01f000, 0x0401f807, 0x42018800,
- 0x00000001, 0x04000003, 0x42018800, 0x00000000,
- 0x1c01f000, 0x4c5c0000, 0x59340400, 0x8200bd80,
- 0x00000606, 0x5c00b800, 0x1c01f000, 0x4c5c0000,
- 0x59340400, 0x8200bd80, 0x00000404, 0x5c00b800,
- 0x1c01f000, 0x0401f807, 0x42018800, 0x00000001,
- 0x04000003, 0x42018800, 0x00000000, 0x1c01f000,
- 0x4c5c0000, 0x59340400, 0x8200bd80, 0x00000404,
- 0x04000003, 0x8200bd80, 0x00000606, 0x5c00b800,
- 0x1c01f000, 0x4c5c0000, 0x4c600000, 0x59340400,
- 0x8200bd00, 0x0000ff00, 0x825cc580, 0x00000400,
- 0x04000003, 0x825cc580, 0x00000600, 0x5c00c000,
- 0x5c00b800, 0x1c01f000, 0x0401f807, 0x42018800,
- 0x00000001, 0x04000003, 0x42018800, 0x00000000,
- 0x1c01f000, 0x4c5c0000, 0x59340400, 0x82000500,
- 0x000000ff, 0x8200bd80, 0x00000003, 0x04000003,
- 0x8200bd80, 0x00000005, 0x5c00b800, 0x1c01f000,
- 0x5c000000, 0x4c000000, 0x4803c857, 0x4c5c0000,
- 0x59340400, 0x82000500, 0x0000ff00, 0x8400b9c0,
- 0x805c0580, 0x4937c857, 0x4803c857, 0x48026c00,
- 0x5c00b800, 0x1c01f000, 0x4c040000, 0x4c080000,
- 0x592c0208, 0x8c00050c, 0x0400000f, 0x592e8c07,
- 0x82000500, 0x00000080, 0x84000548, 0x4d3c0000,
- 0x42027800, 0x00001000, 0x0401ff59, 0x5c027800,
- 0x82000540, 0x00000001, 0x5c001000, 0x5c000800,
- 0x1c01f000, 0x80000580, 0x0401f7fc, 0x592c040c,
- 0x82000500, 0x0000e000, 0x82000580, 0x00006000,
- 0x04000020, 0x836c0580, 0x00000003, 0x04000016,
- 0x836c0580, 0x00000002, 0x04020116, 0x59a8021b,
- 0x82000d00, 0x00000038, 0x04020005, 0x59a80813,
- 0x800409c0, 0x0400000c, 0x0401f10e, 0x82000d00,
- 0x00000003, 0x82040d80, 0x00000003, 0x04020109,
- 0x82000d00, 0x00000028, 0x04020003, 0x8c00050c,
- 0x04000104, 0x592c100b, 0x82080500, 0xff000000,
- 0x040200e2, 0x59a8000f, 0x80080580, 0x040000dc,
- 0x592c0c0c, 0x82040d00, 0x0000e000, 0x82040480,
- 0x00008000, 0x040210dc, 0x592e8c07, 0x83440480,
- 0x00000800, 0x04001016, 0x83440580, 0x0000ffff,
- 0x040200c3, 0x800409c0, 0x0402010e, 0x592c240a,
- 0x82100500, 0xffffff00, 0x040200c6, 0x480bc857,
- 0x4813c857, 0x592c000e, 0x82000480, 0x00000841,
- 0x040210cc, 0x42027000, 0x00000053, 0x0401faa6,
- 0x42026800, 0x0010c2b2, 0x0401f099, 0x800409c0,
- 0x040200fc, 0x41784000, 0x0401feec, 0x040200e3,
- 0x59342204, 0x592c000e, 0x80100480, 0x040010bd,
- 0x42027000, 0x00000053, 0x592c240a, 0x82100500,
- 0xffffff00, 0x040200ab, 0x4813c857, 0x592c000d,
- 0x800001c0, 0x04000083, 0x82100580, 0x00000004,
- 0x040000a1, 0x82100580, 0x00000051, 0x0400009e,
- 0x82100580, 0x00000003, 0x04000016, 0x82100580,
- 0x00000020, 0x0400004b, 0x82100580, 0x00000024,
- 0x04000042, 0x82100580, 0x00000021, 0x04000042,
- 0x82100580, 0x00000050, 0x04000037, 0x82100580,
- 0x00000052, 0x04000031, 0x82100580, 0x00000005,
- 0x0402006b, 0x42027000, 0x00000001, 0x0401f01b,
- 0x42027000, 0x00000002, 0x59a8006d, 0x8c000502,
- 0x04000016, 0x0401ff28, 0x04000014, 0x59340212,
- 0x82000500, 0x0000ff00, 0x42001000, 0x00000010,
- 0x0402000c, 0x59a8021b, 0x8c000506, 0x04020070,
- 0x42001000, 0x00000008, 0x59340002, 0x82000500,
- 0x00ff0000, 0x82000580, 0x00ff0000, 0x04000003,
- 0x0401f9dc, 0x04020066, 0x0201f800, 0x00107188,
- 0x04000082, 0x4a026407, 0x00000010, 0x4936600a,
- 0x42000800, 0x00000003, 0x83380580, 0x00000002,
- 0x04000003, 0x42000800, 0x0000000b, 0x0201f800,
- 0x00103d9d, 0x0401f044, 0x42027000, 0x00000000,
- 0x0401f003, 0x42027000, 0x00000004, 0x0401ff1a,
- 0x04020075, 0x0401f036, 0x42027000, 0x00000033,
- 0x0401f006, 0x42027000, 0x00000005, 0x0401f003,
- 0x42027000, 0x00000003, 0x0401ff06, 0x0402006a,
- 0x59a8006d, 0x8c000502, 0x04000016, 0x0401feee,
- 0x04000014, 0x59340212, 0x82000500, 0x0000ff00,
- 0x42001000, 0x00000010, 0x0402000c, 0x59a8021b,
- 0x8c000506, 0x04020036, 0x42001000, 0x00000008,
- 0x59340002, 0x82000500, 0x00ff0000, 0x82000580,
- 0x00ff0000, 0x04000003, 0x0401f9a2, 0x0402002c,
- 0x0201f800, 0x00107188, 0x04000048, 0x4a026407,
- 0x00000010, 0x4936600a, 0x42000800, 0x00000005,
- 0x83380580, 0x00000003, 0x04000003, 0x42000800,
- 0x00000009, 0x0201f800, 0x00103d9d, 0x0401f00a,
- 0x82102580, 0x00000011, 0x04020031, 0x0201f800,
- 0x00107188, 0x04000035, 0x4a026407, 0x00000010,
- 0x4936600a, 0x492e6009, 0x49325809, 0x83340580,
- 0x0010c2b2, 0x04000007, 0x592c0c0c, 0x8c040d18,
- 0x04000004, 0x59340200, 0x84000514, 0x48026a00,
- 0x0201f800, 0x00020a34, 0x80000580, 0x1c01f000,
- 0x82000540, 0x00000001, 0x0401f7fd, 0x42001000,
- 0x0000000a, 0x0401f018, 0x42001000, 0x00000010,
- 0x0401f015, 0x42001000, 0x00000016, 0x0401f012,
- 0x42001000, 0x00000017, 0x0401f00f, 0x42001000,
- 0x00000018, 0x0401f00c, 0x42001000, 0x0000001b,
- 0x0401f009, 0x42001000, 0x0000001e, 0x0401f006,
- 0x42001000, 0x00000024, 0x0401f003, 0x42001000,
- 0x00000020, 0x42000800, 0x00000019, 0x42028000,
- 0x00000031, 0x0401f7df, 0x42000800, 0x00000003,
- 0x0401f003, 0x42000800, 0x0000000a, 0x41781000,
- 0x0401f7f7, 0x42000800, 0x00000009, 0x59341400,
- 0x0401f7f3, 0x42028000, 0x00000008, 0x0401f005,
- 0x42000800, 0x00000007, 0x416c1000, 0x0401f7ec,
- 0x41780800, 0x41781000, 0x0401f7ca, 0x42028000,
- 0x00000000, 0x0401f7fb, 0x82004d80, 0x0000001d,
- 0x02000800, 0x0010032d, 0x82004d80, 0x0000001a,
- 0x04020004, 0x40101000, 0x40000800, 0x0401f7dc,
- 0x82004d80, 0x0000001b, 0x04020003, 0x40181000,
- 0x0401f7fa, 0x82004d80, 0x0000001c, 0x040007f7,
- 0x82004d80, 0x00000019, 0x040007b5, 0x0401f7d6,
- 0x592e6009, 0x0201f800, 0x00108d9b, 0x040007b3,
- 0x59300c07, 0x82040580, 0x00000011, 0x040207d6,
- 0x592c0c0c, 0x82041500, 0x0000e000, 0x82080580,
- 0x00006000, 0x04000024, 0x83440580, 0x0000ffff,
- 0x04020008, 0x5932680a, 0x83340580, 0x0010c2b2,
- 0x040207c9, 0x42000800, 0x00000840, 0x0401f00f,
- 0x592c100b, 0x82081500, 0x00ffffff, 0x41784000,
- 0x0401fdd6, 0x040207cd, 0x5930000a, 0x82000d80,
- 0x0010c2b2, 0x04000003, 0x81340580, 0x040207ba,
- 0x4936600a, 0x59340a04, 0x592c000e, 0x80040480,
- 0x040017a0, 0x59300a03, 0x82040580, 0x00000007,
- 0x040207b1, 0x492e6009, 0x42027000, 0x00000054,
- 0x0401f773, 0x0201f800, 0x0010a532, 0x040007b4,
- 0x0401f7a9, 0x492fc857, 0x592e6009, 0x83300580,
- 0xffffffff, 0x04020045, 0x592c0208, 0x8c000500,
- 0x04020081, 0x8d0e1d0e, 0x04020067, 0x592e8c07,
- 0x83440480, 0x00000800, 0x04021039, 0x41784000,
- 0x592c100a, 0x82081500, 0x00ffffff, 0x0401fdab,
- 0x04020060, 0x592e6014, 0x4933c857, 0x83300580,
- 0xffffffff, 0x0400001b, 0x0201f800, 0x00108d9b,
- 0x0400003a, 0x591c1407, 0x800811c0, 0x04000015,
- 0x592c040e, 0x591c0a02, 0x80040580, 0x04020011,
- 0x591c000a, 0x800001c0, 0x04020007, 0x591c081f,
- 0x59340002, 0x80040580, 0x82000500, 0x00ffffff,
- 0x0401f002, 0x81340580, 0x04020006, 0x82080580,
- 0x00000007, 0x0402003d, 0x4a023c03, 0x00000024,
- 0x59a8000f, 0x592c100b, 0x82081500, 0x00ffffff,
- 0x80081580, 0x0402001a, 0x592c080a, 0x82041500,
- 0x00ffffff, 0x80081580, 0x0400000f, 0x80040932,
- 0x82040580, 0x00000042, 0x0402000e, 0x49365803,
- 0x0401f910, 0x80000580, 0x1c01f000, 0x42001000,
- 0x0000000a, 0x0401f00f, 0x42001000, 0x00000010,
- 0x0401f00c, 0x42001000, 0x00000014, 0x0401f009,
- 0x42001000, 0x00000017, 0x0401f006, 0x42001000,
- 0x00000018, 0x0401f003, 0x42001000, 0x0000003c,
- 0x492fc857, 0x480bc857, 0x42000800, 0x00000019,
- 0x42028000, 0x00000031, 0x82000540, 0x00000001,
- 0x0401f7e6, 0x492fc857, 0x4803c857, 0x480bc857,
- 0x40000800, 0x0401f7f7, 0x492fc857, 0x42000800,
- 0x0000000a, 0x41781000, 0x0401f7f2, 0x41780800,
- 0x41781000, 0x0401f7f1, 0x42000800, 0x0000001e,
- 0x0401f7f9, 0x42000800, 0x00000001, 0x0401f7f6,
- 0x82004d80, 0x0000001d, 0x02000800, 0x0010032d,
- 0x82004d80, 0x0000001a, 0x04020003, 0x40101000,
- 0x0401f7e5, 0x82004d80, 0x0000001b, 0x04020003,
- 0x40181000, 0x0401f7e0, 0x82004d80, 0x0000001c,
- 0x040007dd, 0x82004d80, 0x00000019, 0x040007da,
- 0x0401f7de, 0x0201f800, 0x0010a61e, 0x42028000,
- 0x00000000, 0x0401f7de, 0x5c000000, 0x4c000000,
- 0x4803c857, 0x5930200a, 0x801021c0, 0x04000035,
- 0x58101400, 0x4813c857, 0x480bc857, 0x82081d00,
- 0x000000ff, 0x59300c03, 0x82040580, 0x00000008,
- 0x04000022, 0x82040580, 0x0000000a, 0x04000017,
- 0x82040580, 0x0000000c, 0x04000010, 0x82040580,
- 0x00000002, 0x04000019, 0x82040580, 0x00000001,
- 0x04000012, 0x82040580, 0x00000003, 0x0400000b,
- 0x82040580, 0x00000005, 0x04000004, 0x82040580,
- 0x00000033, 0x04020017, 0x820c0580, 0x00000009,
- 0x0400000d, 0x0401f013, 0x820c0580, 0x00000005,
- 0x04000009, 0x0401f00f, 0x820c0580, 0x0000000b,
- 0x04000005, 0x0401f00b, 0x820c0580, 0x00000003,
- 0x04020008, 0x82081d00, 0xffffff00, 0x840c01c0,
- 0x800c0540, 0x4807c857, 0x4803c857, 0x48002400,
- 0x1c01f000, 0x0401f807, 0x42018800, 0x00000001,
- 0x04020003, 0x42018800, 0x00000000, 0x1c01f000,
- 0x599c0017, 0x8c00050a, 0x04000003, 0x80000580,
- 0x1c01f000, 0x59a8021b, 0x82000500, 0x00000028,
- 0x04000008, 0x42028800, 0x000007fd, 0x0201f800,
- 0x00020319, 0x04020003, 0x5934000a, 0x8c000504,
- 0x1c01f000, 0x4d300000, 0x5934000e, 0x80026540,
- 0x04000006, 0x0201f800, 0x00105c15, 0x02000800,
- 0x00105ded, 0x497a680e, 0x5c026000, 0x1c01f000,
- 0x40681000, 0x0401f807, 0x42018800, 0x00000001,
- 0x04020003, 0x42018800, 0x00000000, 0x1c01f000,
- 0x4d440000, 0x4d340000, 0x80000580, 0x40001800,
- 0x40028800, 0x82080580, 0x00000008, 0x04020003,
- 0x42001800, 0x00000001, 0x0201f800, 0x00020319,
- 0x0402000a, 0x0401fd2c, 0x04020008, 0x800c19c0,
- 0x04000004, 0x59340405, 0x8c000508, 0x04000003,
- 0x80081040, 0x04000009, 0x81468800, 0x83440480,
- 0x00000800, 0x040017f1, 0x80000580, 0x5c026800,
- 0x5c028800, 0x1c01f000, 0x82000540, 0x00000001,
- 0x5c026800, 0x5c028800, 0x1c01f000, 0x42000800,
- 0x00000008, 0x59bc00e4, 0x8c000524, 0x0402002e,
- 0x59a8021b, 0x8c000508, 0x0402002b, 0x5934100a,
- 0x82081500, 0x0000e000, 0x41781800, 0x82080580,
- 0x00000000, 0x04000006, 0x800c1800, 0x82080580,
- 0x00002000, 0x04000002, 0x800c1800, 0x42007000,
- 0x0010b995, 0x58380401, 0x8c000504, 0x04000007,
- 0x820c2c80, 0x00000003, 0x04021017, 0x820c0400,
- 0x0010449f, 0x0401f013, 0x41782000, 0x59342a04,
- 0x82140480, 0x00000800, 0x04021006, 0x80102000,
- 0x82140480, 0x00000400, 0x04021002, 0x80102000,
- 0x800c00c2, 0x800c0400, 0x80100400, 0x82002c80,
- 0x00000006, 0x04021004, 0x82000400, 0x001044a2,
- 0x50000800, 0x48066c04, 0x1c01f000, 0x00000002,
- 0x00000004, 0x00000008, 0x00002802, 0x00001402,
- 0x00000a02, 0x00001402, 0x00000a02, 0x00000502,
- 0x59a80853, 0x800409c0, 0x04020005, 0x492f5052,
- 0x492f5053, 0x0201f000, 0x001070bc, 0x492c0800,
- 0x492f5053, 0x1c01f000, 0x5934000f, 0x41784000,
- 0x80001540, 0x0400000d, 0x58080205, 0x82000500,
- 0x000000ff, 0x82000580, 0x00000012, 0x04020004,
- 0x5808020d, 0x80040580, 0x04000006, 0x58080000,
- 0x40084000, 0x0401f7f3, 0x82000540, 0x00000001,
- 0x1c01f000, 0x42000000, 0x0010c2b2, 0x4a000400,
- 0x00000707, 0x4a000204, 0x00000840, 0x4a000403,
- 0x0000ffff, 0x49780200, 0x1c01f000, 0x4d340000,
- 0x4d440000, 0x4c580000, 0x4200b000, 0x000007f0,
- 0x4803c856, 0x417a8800, 0x0201f800, 0x00020319,
- 0x04020006, 0x59340200, 0x8c00051a, 0x04000003,
- 0x8400051a, 0x48026a00, 0x81468800, 0x8058b040,
- 0x040207f6, 0x5c00b000, 0x5c028800, 0x5c026800,
- 0x1c01f000, 0x4a033011, 0x00000000, 0x4a03b104,
- 0x80000000, 0x4a03b104, 0x60000001, 0x497b3016,
- 0x497b3017, 0x1c01f000, 0x599c0018, 0x4803c856,
- 0x497b3014, 0x497b3015, 0x82000500, 0x0000000f,
- 0x48033012, 0x04000009, 0x599c0216, 0x82000500,
- 0x0000ffff, 0x04020003, 0x42000000, 0x00000002,
- 0x48033013, 0x850e1d62, 0x1c01f000, 0x0401ffef,
- 0x4a03c826, 0x00000004, 0x599c0209, 0x80000540,
- 0x0400001e, 0x599c0207, 0x80000540, 0x04000007,
- 0x800000cc, 0x599c080d, 0x80040400, 0x4803b100,
- 0x497bb102, 0x59d80101, 0x599c000d, 0x4803b100,
- 0x599c000e, 0x4803b101, 0x599c0207, 0x80000540,
- 0x04020002, 0x497bb102, 0x599c0a09, 0x82040540,
- 0x00400000, 0x4803b103, 0x4a03b109, 0x00000005,
- 0x4a03b104, 0x10000001, 0x8d0e1d22, 0x04020004,
- 0x4a033011, 0x00000001, 0x1c01f000, 0x8d0e1d20,
- 0x04020004, 0x4a033011, 0x00000002, 0x0401f7fb,
- 0x4a033011, 0x00000003, 0x0401f7f8, 0x592c0205,
- 0x492fc857, 0x80000540, 0x04000008, 0x42034000,
- 0x0010b8fa, 0x59a1d806, 0x80edd9c0, 0x02000800,
- 0x0010032d, 0x0401f007, 0x0201f800, 0x00109291,
- 0x02020800, 0x0010032d, 0x5931d822, 0x58ef400a,
- 0x58ec0008, 0x800001c0, 0x02000800, 0x0010032d,
- 0x0801f800, 0x1c01f000, 0x40680800, 0x5c000000,
- 0x4c000000, 0x4803c857, 0x492fc857, 0x4943c857,
- 0x4807c857, 0x4a025a05, 0x00000103, 0x49425a07,
- 0x48065a09, 0x4a025c07, 0x0000ffff, 0x813261c0,
- 0x04000003, 0x59300402, 0x48025c07, 0x832c0400,
- 0x0000000a, 0x04011000, 0x4803c840, 0x4a03c842,
- 0x0000000b, 0x04011000, 0x1c01f000, 0x59a80011,
- 0x82000c80, 0x0000000a, 0x02021800, 0x0010032d,
- 0x0c01f809, 0x4a038805, 0x000000f0, 0x59c400a3,
- 0x82000500, 0x02870000, 0x02020800, 0x0010032d,
- 0x1c01f000, 0x00104602, 0x00104574, 0x00104593,
- 0x001045c7, 0x001045f2, 0x0010032d, 0x0010032d,
- 0x00104593, 0x0010032d, 0x00104573, 0x1c01f000,
- 0x42002000, 0x00000003, 0x0201f800, 0x00104a49,
- 0x4a038808, 0x00000004, 0x0201f800, 0x00104a30,
- 0x59c40805, 0x8c040d0e, 0x04020014, 0x8c040d0a,
- 0x0402000b, 0x8c040d0c, 0x04020006, 0x8c040d08,
- 0x0400000e, 0x4a035011, 0x00000003, 0x0401f00a,
- 0x4a035011, 0x00000000, 0x0401f007, 0x42000000,
- 0x0010bc72, 0x0201f800, 0x0010ae10, 0x4a035011,
- 0x00000002, 0x0401f8c4, 0x1c01f000, 0x59a80073,
- 0x8c00053e, 0x04020018, 0x42002000, 0x00000000,
- 0x0201f800, 0x00104a49, 0x4a038808, 0x00000002,
- 0x59c40805, 0x8c040d08, 0x04020025, 0x8c040d0c,
- 0x04020020, 0x8c040d0e, 0x0402001b, 0x82040500,
- 0x000000f0, 0x04020021, 0x0201f800, 0x00104a30,
- 0x4a038808, 0x00000080, 0x59c40002, 0x8400050c,
- 0x48038802, 0x0401f9db, 0x4d3c0000, 0x42027800,
- 0x00000001, 0x0201f800, 0x001091ff, 0x5c027800,
- 0x4a038808, 0x00000080, 0x42002000, 0x00000002,
- 0x0201f800, 0x00104a49, 0x4a035011, 0x00000009,
- 0x0401f00a, 0x4a035011, 0x00000001, 0x0401f006,
- 0x4a035011, 0x00000000, 0x0401f003, 0x4a035011,
- 0x00000003, 0x0401f890, 0x1c01f000, 0x42002000,
- 0x00000001, 0x0201f800, 0x00104a49, 0x4a038808,
- 0x00000080, 0x59c40805, 0x8c040d0a, 0x0402001f,
- 0x8c040d0c, 0x0402001a, 0x8c040d0e, 0x04020015,
- 0x82040500, 0x000000f0, 0x0402001b, 0x59c40002,
- 0x8400050c, 0x48038802, 0x0401f9ae, 0x4d3c0000,
- 0x42027800, 0x00000001, 0x0201f800, 0x001091ff,
- 0x5c027800, 0x42002000, 0x00000002, 0x0201f800,
- 0x00104a49, 0x4a035011, 0x00000009, 0x0401f00a,
- 0x4a035011, 0x00000001, 0x0401f006, 0x4a035011,
- 0x00000000, 0x0401f003, 0x4a035011, 0x00000002,
- 0x0401f865, 0x1c01f000, 0x0201f800, 0x00104b7d,
- 0x4a038808, 0x00000008, 0x59c40805, 0x8c040d0c,
- 0x04020006, 0x8c040d0e, 0x04000007, 0x4a035011,
- 0x00000001, 0x0401f003, 0x4a035011, 0x00000000,
- 0x0401f855, 0x1c01f000, 0x42002000, 0x00000004,
- 0x0201f800, 0x00104a49, 0x0401f89e, 0x59c40805,
- 0x8c040d0c, 0x0402000b, 0x8c040d0a, 0x04020006,
- 0x8c040d0e, 0x04000007, 0x4a035011, 0x00000001,
- 0x0401f003, 0x4a035011, 0x00000002, 0x0401f842,
- 0x1c01f000, 0x0401f940, 0x02020800, 0x0010032d,
- 0x59a80873, 0x8c040d3e, 0x04000004, 0x4a035014,
- 0x00000001, 0x0401f037, 0x42002000, 0x00000007,
- 0x0201f800, 0x00104a49, 0x8d0e1d0c, 0x04000014,
- 0x850e1d0c, 0x4a038805, 0x00000010, 0x0201f800,
- 0x00101731, 0x59c40005, 0x8c000508, 0x04000008,
- 0x4a038808, 0x00000008, 0x4a035014, 0x00000001,
- 0x4202d800, 0x00000001, 0x0401f022, 0x59c40006,
- 0x84000548, 0x48038806, 0x0401f01e, 0x59a80011,
- 0x82000580, 0x00000001, 0x04020018, 0x42000000,
- 0x0010bc72, 0x0201f800, 0x0010ae10, 0x4ce80000,
- 0x4201d000, 0x000003e8, 0x0201f800, 0x001059d2,
- 0x59c40005, 0x82000500, 0x00000030, 0x0400000a,
- 0x8c00050a, 0x04000005, 0x42002000, 0x00000000,
- 0x0401fbfd, 0x0401f004, 0x42002000, 0x00000001,
- 0x0401fbf9, 0x5c01d000, 0x4a035011, 0x00000004,
- 0x1c01f000, 0x4c040000, 0x4c080000, 0x42000800,
- 0x00000064, 0x42001000, 0x00104660, 0x0201f800,
- 0x001059b4, 0x5c001000, 0x5c000800, 0x1c01f000,
- 0x4803c856, 0x4c040000, 0x0201f800, 0x001061b2,
- 0x4df00000, 0x0201f800, 0x001063aa, 0x5c03e000,
- 0x02000800, 0x0010619f, 0x42000000, 0x0010bc71,
- 0x0201f800, 0x0010ae10, 0x0401ffa7, 0x5c000800,
- 0x1c01f000, 0x4803c856, 0x4c040000, 0x4c080000,
- 0x0201f800, 0x001061b2, 0x4df00000, 0x0201f800,
- 0x001063aa, 0x5c03e000, 0x02000800, 0x0010619f,
- 0x59c40006, 0x84000500, 0x48038806, 0x0201f800,
- 0x00106480, 0x497b8880, 0x42000000, 0x0010bc70,
- 0x0201f800, 0x0010ae10, 0x0201f800, 0x00101617,
- 0x4a035058, 0x00000004, 0x4202d800, 0x00000004,
- 0x4a038805, 0x00000001, 0x42001000, 0x00104660,
- 0x0201f800, 0x001059bf, 0x0201f800, 0x00100454,
- 0x0401f8dd, 0x04000006, 0x42006000, 0xfeffffff,
- 0x41786800, 0x0201f800, 0x00103a7d, 0x0201f800,
- 0x0010ef18, 0x42000000, 0x00000080, 0x0201f800,
- 0x00101365, 0x5c001000, 0x5c000800, 0x1c01f000,
- 0x59c40008, 0x82000580, 0x00000010, 0x04000007,
- 0x4a038808, 0x00000010, 0x4201d000, 0x00001388,
- 0x0201f800, 0x001059d2, 0x1c01f000, 0x4c040000,
- 0x59a80814, 0x82040580, 0x00000000, 0x0400000b,
- 0x82040580, 0x00000001, 0x0400000b, 0x82040580,
- 0x00000002, 0x04000013, 0x82040580, 0x00000003,
- 0x04000013, 0x0401f05d, 0x4a035011, 0x00000000,
- 0x0401f011, 0x59a80873, 0x8c040d3e, 0x04000006,
- 0x4a035011, 0x00000003, 0x4a035014, 0x00000004,
- 0x0401f052, 0x4a035011, 0x00000004, 0x0401f006,
- 0x4a035011, 0x00000001, 0x0401f003, 0x4a035011,
- 0x00000007, 0x497b8880, 0x4a038893, 0x00000001,
- 0x41780000, 0x0201f800, 0x001013dc, 0x0201f800,
- 0x00106480, 0x836c0d80, 0x00000004, 0x04000008,
- 0x59c40006, 0x82000500, 0xffffff0f, 0x82000540,
- 0x04000001, 0x48038806, 0x0401f007, 0x59c40006,
- 0x82000500, 0xffffff0f, 0x82000540, 0x04000000,
- 0x48038806, 0x0401f888, 0x04020005, 0x59c40806,
- 0x82040d00, 0xfbffff0f, 0x48078806, 0x59c40005,
- 0x8c000534, 0x04020033, 0x42006000, 0xfc18ffff,
- 0x42006800, 0x01000000, 0x0201f800, 0x00103a7d,
- 0x0201f800, 0x00101731, 0x59c408a4, 0x82040d00,
- 0x0000000f, 0x82040d80, 0x0000000c, 0x040208b7,
- 0x0401f871, 0x04000006, 0x42006000, 0xfeffffff,
- 0x41786800, 0x0201f800, 0x00103a7d, 0x836c0d80,
- 0x00000004, 0x0400000f, 0x0401ff4b, 0x5994102e,
- 0x41780800, 0x42000000, 0x0000000a, 0x0201f800,
- 0x0010600e, 0x40080000, 0x59a80831, 0x80040c00,
- 0x42001000, 0x00104671, 0x0201f800, 0x001059a9,
- 0x4a035014, 0x00000004, 0x0401fe41, 0x0401f856,
- 0x04020008, 0x59c408a4, 0x82040d00, 0x0000000f,
- 0x82040580, 0x0000000c, 0x02020800, 0x0010032d,
- 0x5c000800, 0x1c01f000, 0x4803c856, 0x4c000000,
- 0x0201f800, 0x001059e2, 0x4a03500f, 0x00ffffff,
- 0x497b5013, 0x59a8001f, 0x82000500, 0xffff0000,
- 0x4803501f, 0x497b8880, 0x497b8893, 0x41780000,
- 0x0201f800, 0x001013dc, 0x59c40001, 0x82000500,
- 0xfffffcff, 0x48038801, 0x42006000, 0xfc18ffff,
- 0x41786800, 0x0201f800, 0x00103a7d, 0x4a038808,
- 0x00000000, 0x5c000000, 0x800001c0, 0x02020800,
- 0x00103908, 0x4a038805, 0x040000f0, 0x59c40006,
- 0x82000500, 0xffffffcf, 0x82000540, 0x440000c1,
- 0x48038806, 0x1c01f000, 0x0401f807, 0x42018800,
- 0x00000001, 0x04000003, 0x42018800, 0x00000000,
- 0x1c01f000, 0x4c5c0000, 0x59a8b813, 0x825cbd80,
- 0x0000aaaa, 0x5c00b800, 0x1c01f000, 0x0401f807,
- 0x42018800, 0x00000001, 0x04000003, 0x42018800,
- 0x00000000, 0x1c01f000, 0x4c5c0000, 0x599cb818,
- 0x825cbd00, 0x00000030, 0x825cbd80, 0x00000000,
- 0x5c00b800, 0x1c01f000, 0x0401f807, 0x42018800,
- 0x00000001, 0x04000003, 0x42018800, 0x00000000,
- 0x1c01f000, 0x4c5c0000, 0x599cb818, 0x825cbd00,
- 0x00000030, 0x825cbd80, 0x00000010, 0x5c00b800,
- 0x1c01f000, 0x0401f807, 0x42018800, 0x00000001,
- 0x04000003, 0x42018800, 0x00000000, 0x1c01f000,
- 0x4c5c0000, 0x599cb818, 0x825cbd00, 0x00000030,
- 0x825cbd80, 0x00000020, 0x5c00b800, 0x1c01f000,
- 0x490fc857, 0x830c0d00, 0x00000013, 0x04000022,
- 0x599c1017, 0x4d3c0000, 0x830c0500, 0x00000011,
- 0x04000005, 0x417a7800, 0x8d0e1d20, 0x04020009,
- 0x0401f011, 0x42027800, 0x00000008, 0x8d0e1d20,
- 0x0400000d, 0x42003000, 0x00000003, 0x0401f003,
- 0x42003000, 0x00000004, 0x42028000, 0x0000000e,
- 0x0201f800, 0x0010a01b, 0x599c1017, 0x8c08150a,
- 0x04020007, 0x42028000, 0x00000004, 0x0201f800,
- 0x0010dfe1, 0x4803c856, 0x850e1d08, 0x5c027800,
- 0x0401f009, 0x8d0e1d20, 0x04000007, 0x42028000,
- 0x0000000f, 0x42003000, 0x00000001, 0x0201f800,
- 0x0010a01b, 0x1c01f000, 0x4803c856, 0x4c580000,
- 0x42000000, 0x0010bd86, 0x0201f800, 0x0010ae10,
- 0x42000800, 0x0010c574, 0x59c40003, 0x44000800,
- 0x59c40004, 0x48000801, 0x59c4000b, 0x48000802,
- 0x59c4008e, 0x48000803, 0x59c4008f, 0x48000804,
- 0x59c40090, 0x48000805, 0x59c40091, 0x48000806,
- 0x59c40092, 0x48000807, 0x59c40093, 0x48000808,
- 0x59c40099, 0x48000809, 0x59c4009e, 0x4800080a,
- 0x59c400aa, 0x4800080b, 0x59c400af, 0x4800080c,
- 0x59c400b2, 0x4800080d, 0x59c400b1, 0x4800080e,
- 0x82040c00, 0x0000000f, 0x41c41800, 0x4200b000,
- 0x00000030, 0x580c0050, 0x44000800, 0x80040800,
- 0x800c1800, 0x8058b040, 0x040207fb, 0x41c41800,
- 0x4200b000, 0x00000020, 0x580c0010, 0x44000800,
- 0x80040800, 0x800c1800, 0x8058b040, 0x040207fb,
- 0x497b8830, 0x4200b000, 0x00000040, 0x59c40031,
- 0x44000800, 0x80040800, 0x8058b040, 0x040207fc,
- 0x497b88ac, 0x4200b000, 0x00000010, 0x59c400ad,
- 0x44000800, 0x80040800, 0x8058b040, 0x040207fc,
- 0x59c41001, 0x4c080000, 0x8408150c, 0x480b8801,
- 0x4a0370e4, 0x00000300, 0x4a0370e5, 0xb0000000,
- 0x42000800, 0x00000800, 0x80040840, 0x02000800,
- 0x0010032d, 0x59b800e5, 0x8c000538, 0x040207fb,
- 0x4a0370e4, 0x00000200, 0x42006000, 0xffffffff,
- 0x42006800, 0x80000000, 0x0201f800, 0x00103a7d,
- 0x4a038807, 0x00000001, 0x497b8807, 0x0401fb74,
- 0x4a038808, 0x00000010, 0x42006000, 0xfcf8ffff,
- 0x42006800, 0x01000000, 0x0201f800, 0x00103a7d,
- 0x5c001000, 0x480b8801, 0x42000800, 0x0010c574,
- 0x50040000, 0x48038803, 0x58040001, 0x48038804,
- 0x58040002, 0x4803880b, 0x58040003, 0x4803888e,
- 0x58040004, 0x4803888f, 0x58040005, 0x48038890,
- 0x58040006, 0x48038891, 0x58040007, 0x48038892,
- 0x58040008, 0x48038893, 0x58040009, 0x48038899,
- 0x5804000a, 0x4803889e, 0x5804000b, 0x480388aa,
- 0x5804000c, 0x480388af, 0x5804000d, 0x480388b2,
- 0x5804000e, 0x480388b1, 0x82040c00, 0x0000000f,
- 0x41c41800, 0x4200b000, 0x00000030, 0x50040000,
- 0x48001850, 0x80040800, 0x800c1800, 0x8058b040,
- 0x040207fb, 0x41c41800, 0x4200b000, 0x00000020,
- 0x50040000, 0x48001810, 0x80040800, 0x800c1800,
- 0x8058b040, 0x040207fb, 0x497b8830, 0x4200b000,
- 0x00000040, 0x50040000, 0x48038831, 0x80040800,
- 0x8058b040, 0x040207fc, 0x497b88ac, 0x4200b000,
- 0x00000010, 0x50040000, 0x480388ad, 0x80040800,
- 0x8058b040, 0x040207fc, 0x497b8880, 0x41780000,
- 0x0201f800, 0x001013dc, 0x59c408a4, 0x82040d00,
- 0x0000000f, 0x82040580, 0x0000000c, 0x02020800,
- 0x0010032d, 0x4a038805, 0x04000000, 0x5c00b000,
- 0x1c01f000, 0x4803c856, 0x42000800, 0x00000001,
- 0x0201f800, 0x00101994, 0x4c580000, 0x4ce80000,
- 0x42000000, 0x0010bc73, 0x0201f800, 0x0010ae10,
- 0x59c41008, 0x4c080000, 0x82081500, 0xffffff7f,
- 0x480b8808, 0x59c40004, 0x82000500, 0x00003e02,
- 0x04000005, 0x4201d000, 0x00000014, 0x0201f800,
- 0x001059d2, 0x59c40006, 0x82000500, 0xffffff0f,
- 0x48038806, 0x0401faf1, 0x59a8006a, 0x80000540,
- 0x04000014, 0x4a038805, 0x00000001, 0x4c580000,
- 0x4200b000, 0x000006a4, 0x4201d000, 0x00000064,
- 0x4c580000, 0x0201f800, 0x001059d2, 0x0201f800,
- 0x001016ef, 0x5c00b000, 0x04000005, 0x8058b040,
- 0x040207f6, 0x5c00b000, 0x0401f011, 0x5c00b000,
- 0x4a038805, 0x00000010, 0x4a038808, 0x00000004,
- 0x4200b000, 0x00000065, 0x59c40005, 0x8c000508,
- 0x0402001d, 0x4201d000, 0x000003e8, 0x0201f800,
- 0x001059d2, 0x8058b040, 0x040207f8, 0x42002000,
- 0x00000007, 0x0401f98c, 0x0401fabf, 0x0201f800,
- 0x00106480, 0x4803c856, 0x59a80073, 0x8c00053e,
- 0x04000004, 0x0201f800, 0x0010a709, 0x0401f003,
- 0x4a038808, 0x00000008, 0x4a035014, 0x00000001,
- 0x4202d800, 0x00000001, 0x82000540, 0x00000001,
- 0x0401f048, 0x42002000, 0x00000001, 0x0401f976,
- 0x0201f800, 0x001007c8, 0x42000000, 0x0010bd62,
- 0x0201f800, 0x0010ae10, 0x0201f800, 0x00100c46,
- 0x497b8880, 0x59a8001f, 0x82000500, 0x0000ffff,
- 0x4c000000, 0x0201f800, 0x001013dc, 0x5c000000,
- 0x48038880, 0x41780800, 0x0201f800, 0x00101994,
- 0x4a038808, 0x00000000, 0x4a038805, 0x00000008,
- 0x4200b000, 0x00000065, 0x4a038805, 0x000000f0,
- 0x59a8006a, 0x80000540, 0x04000005, 0x4201d000,
- 0x00000002, 0x0201f800, 0x001059d2, 0x0201f800,
- 0x00101731, 0x42000800, 0x000000f0, 0x59c40005,
- 0x80040d00, 0x04000008, 0x4201d000, 0x000003e8,
- 0x0201f800, 0x001059d2, 0x8058b040, 0x040207eb,
- 0x0401f7b7, 0x59a8006a, 0x80000540, 0x04000004,
- 0x59c40005, 0x8c000506, 0x040007f4, 0x42002000,
- 0x00000002, 0x0401f93c, 0x59c40006, 0x82000540,
- 0x000000f0, 0x48038806, 0x59a80012, 0x80000540,
- 0x04020002, 0x80000000, 0x48038893, 0x80000580,
- 0x4df00000, 0x0201f800, 0x00101759, 0x5c03e000,
- 0x5c001000, 0x480b8808, 0x5c01d000, 0x5c00b000,
- 0x1c01f000, 0x4803c856, 0x42000800, 0x00000001,
- 0x0201f800, 0x00101994, 0x4c580000, 0x4ce80000,
- 0x59c41008, 0x4c080000, 0x82081500, 0xffffff7f,
- 0x480b8808, 0x59c40004, 0x82000500, 0x00003e02,
- 0x04000005, 0x4201d000, 0x00000014, 0x0201f800,
- 0x001059d2, 0x0201f800, 0x001007c8, 0x42000000,
- 0x0010bd63, 0x0201f800, 0x0010ae10, 0x0201f800,
- 0x00100c46, 0x42002000, 0x00000000, 0x0401f90a,
- 0x4a038808, 0x00000002, 0x80000580, 0x48038880,
- 0x48038893, 0x0201f800, 0x001013dc, 0x4200b000,
- 0x00000384, 0x4a038805, 0x000000f0, 0x0201f800,
- 0x00101731, 0x42000800, 0x000000f0, 0x59c40005,
- 0x80040d00, 0x04000024, 0x82000500, 0x000000d0,
- 0x04020024, 0x4201d000, 0x00000067, 0x0201f800,
- 0x001059d2, 0x8058b040, 0x040207ef, 0x42002000,
- 0x00000007, 0x0401f8ec, 0x0201f800, 0x00106480,
- 0x0401fa1d, 0x59a80073, 0x8c00053e, 0x04000004,
- 0x0201f800, 0x0010a709, 0x0401f003, 0x4a038808,
- 0x00000008, 0x4a035014, 0x00000001, 0x4202d800,
- 0x00000001, 0x59c40006, 0x8400050a, 0x48038806,
- 0x4a038805, 0x00000020, 0x82000540, 0x00000001,
- 0x0401f016, 0x42002000, 0x00000002, 0x0401f8d2,
- 0x497b8880, 0x59a80012, 0x80000540, 0x04020002,
- 0x80000000, 0x48038893, 0x59a8001f, 0x82000500,
- 0x0000ffff, 0x4c000000, 0x0201f800, 0x001013dc,
- 0x5c000000, 0x48038880, 0x41780800, 0x0201f800,
- 0x00101994, 0x80000580, 0x4df00000, 0x0201f800,
- 0x00101759, 0x5c03e000, 0x5c001000, 0x480b8808,
- 0x5c01d000, 0x5c00b000, 0x1c01f000, 0x4803c856,
- 0x42000800, 0x00000001, 0x0201f800, 0x00101994,
- 0x42002000, 0x00000001, 0x0401f8af, 0x59c40004,
- 0x82000500, 0x00003e02, 0x0400000b, 0x0201f800,
- 0x00106480, 0x0401f9dc, 0x4a038808, 0x00000008,
- 0x4a035014, 0x00000001, 0x4202d800, 0x00000001,
- 0x0401f055, 0x0201f800, 0x001007c8, 0x42000000,
- 0x0010bd64, 0x0201f800, 0x0010ae10, 0x0201f800,
- 0x00100c46, 0x59c40006, 0x84000508, 0x48038806,
- 0x4a038805, 0x00000010, 0x850e1d4c, 0x42000800,
- 0x00000064, 0x42001000, 0x00104660, 0x0201f800,
- 0x001059b4, 0x41780800, 0x0201f800, 0x00101994,
- 0x4a038808, 0x00000000, 0x497b8880, 0x4a038805,
- 0x000000f0, 0x0201f800, 0x00101731, 0x42000800,
- 0x000000f0, 0x59c40005, 0x80040d00, 0x0400000e,
- 0x82000500, 0x000000e0, 0x0402000e, 0x4201d000,
- 0x000003e8, 0x0201f800, 0x001059d2, 0x0201f800,
- 0x001057ee, 0x59940004, 0x80000540, 0x040207ec,
- 0x0401f025, 0x42002000, 0x00000002, 0x0401f86e,
- 0x4c080000, 0x42001000, 0x00104660, 0x0201f800,
- 0x001059bf, 0x5c001000, 0x497b8880, 0x59a80012,
- 0x80000540, 0x04020002, 0x80000000, 0x48038893,
- 0x59a8001f, 0x82000500, 0x0000ffff, 0x4c000000,
- 0x0201f800, 0x001013dc, 0x5c000000, 0x48038880,
- 0x850e1d0c, 0x59c40006, 0x84000548, 0x48038806,
- 0x0201f800, 0x00101759, 0x41780800, 0x0201f800,
- 0x00101994, 0x59c40008, 0x82000540, 0x00000080,
- 0x48038808, 0x1c01f000, 0x4803c856, 0x4d400000,
- 0x4d3c0000, 0x0201f800, 0x00106480, 0x0201f800,
- 0x0010af17, 0x04020024, 0x599c1017, 0x8d0e1d00,
- 0x0402000b, 0x8c08151a, 0x0400001f, 0x850e1d42,
- 0x42028000, 0x00000004, 0x42027800, 0x00000008,
- 0x8d0e1d20, 0x04020007, 0x0401f013, 0x42028000,
- 0x00000004, 0x417a7800, 0x8d0e1d20, 0x0400000e,
- 0x4d400000, 0x42028000, 0x0000000e, 0x42003000,
- 0x00000003, 0x42028800, 0x0000ffff, 0x0201f800,
- 0x0010a018, 0x5c028000, 0x599c0817, 0x8c040d0a,
- 0x04020005, 0x4943c857, 0x493fc857, 0x0201f800,
- 0x0010dfe1, 0x497b8880, 0x4202d800, 0x00000001,
- 0x0401fc83, 0x5c027800, 0x5c028000, 0x1c01f000,
- 0x42000800, 0x00000001, 0x0201f800, 0x00101994,
- 0x0201f800, 0x001007c8, 0x42000000, 0x0010bd65,
- 0x0201f800, 0x0010ae10, 0x0201f800, 0x00100c46,
- 0x42000000, 0x00000001, 0x0201f800, 0x001013dc,
- 0x4a038880, 0x00000001, 0x59c80835, 0x59a80072,
- 0x80040d80, 0x04000002, 0x48039035, 0x0201f000,
- 0x00101759, 0x42000800, 0x0010b8f6, 0x48100802,
- 0x82101480, 0x00000008, 0x04001009, 0x58040001,
- 0x4803c857, 0x4813c857, 0x58040003, 0x80000000,
- 0x48000803, 0x42002000, 0x00000002, 0x58040001,
- 0x82001480, 0x0000000b, 0x04001008, 0x4803c857,
- 0x4813c857, 0x58040003, 0x80000000, 0x48000803,
- 0x42000000, 0x00000000, 0x48000800, 0x59c428a4,
- 0x82142d00, 0x0000000f, 0x82142d80, 0x0000000c,
- 0x0c000002, 0x0401f136, 0x00104a75, 0x00104a95,
- 0x00104ab6, 0x00104ad7, 0x00104af8, 0x00104b13,
- 0x00104b24, 0x00104b3b, 0x00104b52, 0x00104b69,
- 0x00104b6c, 0x40100000, 0x0c01f001, 0x00104a7f,
- 0x00104a82, 0x00104a85, 0x00104a86, 0x00104a89,
- 0x00104a8c, 0x00104a90, 0x00104a93, 0x4a000801,
- 0x00000002, 0x1c01f000, 0x4a000801, 0x00000003,
- 0x0401f0e9, 0x1c01f000, 0x4a000801, 0x00000007,
- 0x1c01f000, 0x4a000801, 0x00000004, 0x0401f0e6,
- 0x4a000801, 0x00000005, 0x0401f8eb, 0x0401f0e6,
- 0x4a000801, 0x00000005, 0x0401f0e7, 0x4813c857,
- 0x1c01f000, 0x40100000, 0x0c01f001, 0x00104a9f,
- 0x00104aa2, 0x00104aa5, 0x00104aa6, 0x00104aa9,
- 0x00104aac, 0x00104ab0, 0x00104ab3, 0x4a000801,
- 0x00000002, 0x1c01f000, 0x4a000801, 0x00000003,
- 0x1c01f000, 0x1c01f000, 0x4a000801, 0x00000007,
- 0x1c01f000, 0x4a000801, 0x00000004, 0x0401f0c6,
- 0x4a000801, 0x00000005, 0x0401f8cb, 0x0401f0c6,
- 0x4a000801, 0x00000005, 0x1c01f000, 0x4a000801,
- 0x00000005, 0x0401f0bc, 0x40100000, 0x0c01f001,
- 0x00104ac0, 0x00104ac1, 0x00104ac4, 0x00104ac7,
- 0x00104aca, 0x00104acd, 0x00104ad1, 0x00104ad4,
- 0x1c01f000, 0x4a000801, 0x00000003, 0x1c01f000,
- 0x4a000801, 0x00000000, 0x1c01f000, 0x4a000801,
- 0x00000007, 0x1c01f000, 0x4a000801, 0x00000004,
- 0x0401f0a5, 0x4a000801, 0x00000005, 0x0401f8aa,
- 0x0401f0a5, 0x4a000801, 0x00000005, 0x1c01f000,
- 0x4a000801, 0x00000005, 0x0401f09b, 0x40100000,
- 0x0c01f001, 0x00104ae1, 0x00104ae4, 0x00104ae5,
- 0x00104ae8, 0x00104aeb, 0x00104aee, 0x00104af2,
- 0x00104af5, 0x4a000801, 0x00000002, 0x1c01f000,
- 0x1c01f000, 0x4a000801, 0x00000000, 0x1c01f000,
- 0x4a000801, 0x00000007, 0x1c01f000, 0x4a000801,
- 0x00000004, 0x0401f084, 0x4a000801, 0x00000005,
- 0x0401f889, 0x0401f084, 0x4a000801, 0x00000005,
- 0x1c01f000, 0x4a000801, 0x00000005, 0x0401f07a,
- 0x40100000, 0x0c01f001, 0x00104b02, 0x00104b05,
- 0x00104b05, 0x00104b06, 0x00104b05, 0x00104b09,
- 0x00104b0d, 0x00104b10, 0x4a000801, 0x00000002,
- 0x1c01f000, 0x1c01f000, 0x4a000801, 0x00000007,
- 0x1c01f000, 0x4a000801, 0x00000005, 0x0401f86e,
- 0x0401f069, 0x4a000801, 0x00000005, 0x1c01f000,
- 0x4a000801, 0x00000005, 0x0401f05f, 0x40100000,
- 0x0c01f001, 0x00104b23, 0x00104b23, 0x00104b23,
- 0x00104b1d, 0x00104b20, 0x00104b23, 0x00104b23,
- 0x00104b23, 0x4a000801, 0x00000007, 0x1c01f000,
- 0x4a000801, 0x00000004, 0x1c01f000, 0x1c01f000,
- 0x40100000, 0x0c01f001, 0x00104b2e, 0x00104b31,
- 0x00104b31, 0x00104b32, 0x00104b35, 0x00104b38,
- 0x00104b38, 0x00104b38, 0x4a000801, 0x00000002,
- 0x1c01f000, 0x1c01f000, 0x4a000801, 0x00000007,
- 0x1c01f000, 0x4a000801, 0x00000004, 0x0401f03a,
- 0x4a000801, 0x00000008, 0x1c01f000, 0x40100000,
- 0x0c01f001, 0x00104b45, 0x00104b48, 0x00104b4b,
- 0x00104b4b, 0x00104b4c, 0x00104b4f, 0x00104b4f,
- 0x00104b4f, 0x4a000801, 0x00000002, 0x1c01f000,
- 0x4a000801, 0x00000003, 0x1c01f000, 0x1c01f000,
- 0x4a000801, 0x00000004, 0x0401f023, 0x4a000801,
- 0x00000008, 0x1c01f000, 0x40100000, 0x0c01f001,
- 0x00104b5c, 0x00104b5c, 0x00104b5f, 0x00104b60,
- 0x00104b63, 0x00104b5f, 0x00104b66, 0x00104b5f,
- 0x4a000801, 0x00000005, 0x0401f00f, 0x1c01f000,
- 0x4a000801, 0x00000007, 0x1c01f000, 0x4a000801,
- 0x00000004, 0x1c01f000, 0x4a000801, 0x00000008,
- 0x1c01f000, 0x4a000801, 0x00000009, 0x1c01f000,
- 0x1c01f000, 0x42000000, 0x0010bc5d, 0x0201f000,
- 0x0010ae10, 0x42000000, 0x0010bc5a, 0x0201f000,
- 0x0010ae10, 0x42000000, 0x0010bc5c, 0x0201f000,
- 0x0010ae10, 0x42000000, 0x0010bc5b, 0x0201f000,
- 0x0010ae10, 0x42000800, 0x0010b8f6, 0x58040001,
- 0x48000800, 0x4a000801, 0x00000005, 0x4a000802,
- 0x00000008, 0x1c01f000, 0x42000800, 0x0010b8f6,
- 0x58040001, 0x48000800, 0x4a000801, 0x00000001,
- 0x4a000802, 0x0000000a, 0x1c01f000, 0x42000800,
- 0x0010b8f6, 0x58040001, 0x48000800, 0x4a000801,
- 0x00000006, 0x4a000802, 0x00000009, 0x1c01f000,
- 0x42000800, 0x0010b8f6, 0x4a000801, 0x0000000a,
- 0x4a000800, 0x0000000a, 0x1c01f000, 0x496fc857,
- 0x4813c857, 0x40100000, 0x0c01f001, 0x00104bb9,
- 0x00104bb9, 0x00104bb9, 0x00104bb9, 0x00104bab,
- 0x00104bb3, 0x00104bb7, 0x00104bb9, 0x59a8021b,
- 0x8c000506, 0x04000003, 0x8c000502, 0x0400000a,
- 0x0401f80a, 0x040207c0, 0x0401f007, 0x0401f807,
- 0x04000005, 0x0401ffc0, 0x0401f7c3, 0x0401f803,
- 0x040207c1, 0x1c01f000, 0x496fc857, 0x416c0000,
- 0x82000c80, 0x00000008, 0x02021800, 0x0010032d,
- 0x0c01f001, 0x00104bc9, 0x00104bcb, 0x00104bcb,
- 0x00104bcb, 0x00104bc9, 0x00104bc9, 0x00104bc9,
- 0x00104bcb, 0x80000580, 0x1c01f000, 0x82000540,
- 0x00000001, 0x1c01f000, 0x4202e000, 0x00000000,
- 0x497b3004, 0x4a03b004, 0x60000001, 0x59d80005,
- 0x4a03b004, 0x90000001, 0x4a03a804, 0x60000001,
- 0x59d40005, 0x4a03a804, 0x90000001, 0x0201f000,
- 0x00105117, 0x4a03c825, 0x00000004, 0x4a03c827,
- 0x00000004, 0x599c0409, 0x80000d40, 0x04000020,
- 0x599c0407, 0x80000540, 0x04000007, 0x800000cc,
- 0x599c100b, 0x80080400, 0x4803b000, 0x497bb002,
- 0x59d80001, 0x599c000b, 0x4803b000, 0x599c000c,
- 0x4803b001, 0x599c0407, 0x80000540, 0x04020002,
- 0x497bb002, 0x599c0c09, 0x82040540, 0x00400000,
- 0x4803b003, 0x4a03b009, 0x00000005, 0x4a03b004,
- 0x10000001, 0x59e00803, 0x82040d00, 0xfffffeff,
- 0x82040d40, 0x00008000, 0x4807c003, 0x599c040a,
- 0x80000540, 0x04000020, 0x599c0408, 0x80000540,
- 0x04000007, 0x800000cc, 0x599c100f, 0x80080400,
- 0x4803a800, 0x497ba802, 0x59d40001, 0x599c000f,
- 0x4803a800, 0x599c0010, 0x4803a801, 0x599c0408,
- 0x80000540, 0x04020002, 0x497ba802, 0x599c0c0a,
- 0x82040540, 0x00400000, 0x4803a803, 0x4a03a809,
- 0x00000005, 0x4a03a804, 0x10000001, 0x59e00803,
- 0x82040d00, 0xfffffbff, 0x82040d40, 0x00008000,
- 0x4807c003, 0x800409c0, 0x04000007, 0x4202e000,
- 0x00000001, 0x0200b800, 0x00020713, 0x0200f000,
- 0x00020728, 0x1c01f000, 0x0201f800, 0x0010032d,
- 0x1c01f000, 0x0401f852, 0x5c03e000, 0x0201f000,
- 0x0002067a, 0x0201f800, 0x000206b1, 0x0401f7fb,
- 0x00104c83, 0x00104c83, 0x00104c83, 0x00104c83,
- 0x00104c93, 0x00104c83, 0x00104c83, 0x00104c83,
- 0x00104c83, 0x00104c83, 0x000206a8, 0x00104c83,
- 0x00104c83, 0x00104c93, 0x00104c93, 0x00104c83,
- 0x00104c83, 0x00104c83, 0x00104c83, 0x00104c83,
- 0x00104c83, 0x00104c83, 0x00104c83, 0x00104c83,
- 0x00104c83, 0x00104c83, 0x00104c83, 0x00104c83,
- 0x00104c83, 0x00104c83, 0x00104c83, 0x00104c83,
- 0x00104c83, 0x00104c83, 0x00104c83, 0x00104c83,
- 0x00104c83, 0x00104c83, 0x00104c83, 0x00104c83,
- 0x00104c83, 0x00104c83, 0x00104c83, 0x00104c83,
- 0x00104c83, 0x00104c83, 0x00104c83, 0x00104c83,
- 0x00104c83, 0x00104c83, 0x00104c83, 0x00104c83,
- 0x00104c83, 0x00104c83, 0x00104c83, 0x00104c83,
- 0x00104c83, 0x00104c83, 0x00104c83, 0x00104c83,
- 0x00104c83, 0x00104c83, 0x00104c83, 0x00104c83,
- 0x00104c83, 0x00104c83, 0x00104c83, 0x00104c83,
- 0x00104c83, 0x00104c83, 0x00104c83, 0x00104c83,
- 0x00104c83, 0x00104c83, 0x00104c83, 0x492fc857,
- 0x42000000, 0x0010bd18, 0x0201f800, 0x0010ae10,
- 0x42000000, 0x00000400, 0x0401f019, 0x492fc857,
- 0x42000000, 0x0010bd17, 0x0201f800, 0x0010ae10,
- 0x42000000, 0x00001000, 0x0401f011, 0x492fc857,
- 0x42000000, 0x0010bd16, 0x0201f800, 0x0010ae10,
- 0x42000000, 0x00002000, 0x0401f009, 0x492fc857,
- 0x42000000, 0x0010bd19, 0x0201f800, 0x0010ae10,
- 0x42000000, 0x00000800, 0x0401f001, 0x4803c857,
- 0x592c0c05, 0x82040d00, 0xffff80ff, 0x80040540,
- 0x59980803, 0x800409c0, 0x04000002, 0x8400051e,
- 0x48025c05, 0x0201f800, 0x000203ab, 0x83700580,
- 0x00000003, 0x4202e000, 0x00000001, 0x04000002,
- 0x1c01f000, 0x599a5801, 0x812e59c0, 0x040207dc,
- 0x0201f800, 0x0010032d, 0x492fc857, 0x80140110,
- 0x80000040, 0x04000033, 0x040017cd, 0x4a033006,
- 0x00104cf0, 0x0201f000, 0x00020684, 0x492fc857,
- 0x80140110, 0x040007c6, 0x80000040, 0x04000044,
- 0x4a033006, 0x00104d0b, 0x0201f000, 0x00020684,
- 0x492fc857, 0x0201f800, 0x0010af17, 0x02020000,
- 0x00020692, 0x492fc856, 0x83440400, 0x0010b080,
- 0x50000000, 0x80026d40, 0x04000006, 0x4937c857,
- 0x59340200, 0x8c00050e, 0x02020000, 0x00020692,
- 0x42028000, 0x00000028, 0x41780800, 0x417a6000,
- 0x0201f800, 0x00104543, 0x0201f800, 0x00108afb,
- 0x0201f000, 0x000203ab, 0x82000500, 0x0f000000,
- 0x8000012a, 0x592c0c0b, 0x82040d00, 0x0000ff87,
- 0x80040540, 0x48025c0b, 0x0201f000, 0x000206a3,
- 0x592c0a0b, 0x8c040d02, 0x04020015, 0x492fc857,
- 0x8d0e1d0e, 0x0402000f, 0x592c0208, 0x80000540,
- 0x04000005, 0x0201f800, 0x00103b2e, 0x04020004,
- 0x1c01f000, 0x42000000, 0x00000000, 0x592c0a07,
- 0x48065c07, 0x48025a07, 0x0201f000, 0x000203ab,
- 0x42000000, 0x00000028, 0x0401f7f9, 0x42000800,
- 0x00000009, 0x0201f000, 0x00105fc9, 0x492fc857,
- 0x592c0409, 0x80000540, 0x0402078d, 0x8d0e1d0e,
- 0x04020009, 0x592c0208, 0x80000540, 0x04000788,
- 0x497a5a07, 0x0201f800, 0x00103b8c, 0x04020004,
- 0x1c01f000, 0x42000000, 0x00000028, 0x48025a07,
- 0x0201f000, 0x000203ab, 0x592e8a07, 0x592c0407,
- 0x4947c857, 0x4803c857, 0x82000500, 0x000000ff,
- 0x4200b800, 0x00000001, 0x82000d80, 0x00000001,
- 0x04000015, 0x417a8800, 0x4200b800, 0x000007f0,
- 0x82000d80, 0x00000002, 0x0400000f, 0x80000540,
- 0x02020000, 0x000203ab, 0x592e8a07, 0x0201f800,
- 0x00020319, 0x02020000, 0x000203ab, 0x592e9009,
- 0x592e980a, 0x0201f800, 0x00103f73, 0x0201f000,
- 0x000203ab, 0x850e1d00, 0x0201f800, 0x00020319,
- 0x02000800, 0x00104095, 0x81468800, 0x805cb840,
- 0x040207fa, 0x0201f000, 0x000203ab, 0x592c0a09,
- 0x4807c857, 0x82040580, 0x0000000e, 0x0400006a,
- 0x82040580, 0x0000002a, 0x04000025, 0x82040580,
- 0x0000000f, 0x040003dc, 0x82040580, 0x0000002e,
- 0x040003d9, 0x82040580, 0x00000046, 0x04000062,
- 0x82040580, 0x00000045, 0x0400001b, 0x82040580,
- 0x00000049, 0x040003d0, 0x82040580, 0x00000029,
- 0x040203d3, 0x592e8a07, 0x42026800, 0x0010c2b2,
- 0x83440580, 0x0000ffff, 0x04000007, 0x0201f800,
- 0x00020319, 0x040203c4, 0x59340200, 0x84000518,
- 0x48026a00, 0x592e600a, 0x4933c857, 0x83300580,
- 0xffffffff, 0x0402004d, 0x0401f3bb, 0x850e1d04,
- 0x0401f3b9, 0x592c1408, 0x480bc857, 0x0201f800,
- 0x00108d91, 0x411e6000, 0x04020003, 0x4803c856,
- 0x0401f3b7, 0x59300c07, 0x82040580, 0x00000004,
- 0x04000003, 0x4803c856, 0x0401f3b1, 0x592c0208,
- 0x8c000506, 0x0400000f, 0x0201f800, 0x001061b2,
- 0x4df00000, 0x0201f800, 0x0010609c, 0x0201f800,
- 0x0010e3bd, 0x80c40040, 0x5c03e000, 0x02000800,
- 0x0010619f, 0x0201f800, 0x00107144, 0x0401f39a,
- 0x592e380a, 0x591c1415, 0x8c081516, 0x0400039c,
- 0x59300009, 0x800001c0, 0x02020800, 0x0010032d,
- 0x84081554, 0x480a3c15, 0x4a026403, 0x0000003a,
- 0x592c040c, 0x80000540, 0x04000007, 0x4a026403,
- 0x0000003b, 0x592c020d, 0x4802641b, 0x592c040d,
- 0x4802621b, 0x4a026203, 0x00000001, 0x42000800,
- 0x80000040, 0x0401fb8f, 0x04000004, 0x492e6009,
- 0x0201f000, 0x000209b1, 0x0201f800, 0x000209b1,
- 0x0401f379, 0x59a80069, 0x84000510, 0x48035069,
- 0x0401f375, 0x592c1208, 0x8c081500, 0x04020372,
- 0x592e8a07, 0x592e600a, 0x0201f800, 0x00108d9b,
- 0x04020003, 0x4803c856, 0x0401f371, 0x59300c07,
- 0x82040580, 0x00000004, 0x04000003, 0x4803c856,
- 0x0401f36b, 0x59300a03, 0x82040580, 0x00000007,
- 0x04000003, 0x4803c856, 0x0401f365, 0x59300c03,
- 0x82040580, 0x00000001, 0x0400001f, 0x82040580,
- 0x00000002, 0x04000014, 0x82040580, 0x00000008,
- 0x04000016, 0x82040580, 0x0000000a, 0x04000007,
- 0x82040580, 0x0000000c, 0x04020026, 0x42000800,
- 0x00000009, 0x0401f021, 0x5932680a, 0x0201f800,
- 0x0010419d, 0x0402001f, 0x42000800, 0x00000005,
- 0x0401f01a, 0x417a7800, 0x0201f800, 0x0010e06f,
- 0x4a026407, 0x00000001, 0x42000800, 0x00000003,
- 0x0401f012, 0x83340580, 0x0010c2b2, 0x04020008,
- 0x5930000a, 0x82000580, 0x0010c2b2, 0x0402033c,
- 0x4a026407, 0x00000001, 0x0401f00a, 0x417a7800,
- 0x0201f800, 0x0010e06f, 0x4a026407, 0x00000001,
- 0x42000800, 0x0000000b, 0x0201f800, 0x00103d9d,
- 0x4a026203, 0x00000001, 0x0401fb36, 0x04000004,
- 0x492e6009, 0x0201f000, 0x0010608d, 0x0201f800,
- 0x0010608d, 0x0401f320, 0x59300415, 0x8c000518,
- 0x02020000, 0x0010a247, 0x0401f0a9, 0x40000800,
- 0x58040000, 0x80000540, 0x040207fd, 0x492c0800,
- 0x1c01f000, 0x492fc857, 0x59300c07, 0x82040580,
- 0x00000006, 0x04020099, 0x59340400, 0x82000580,
- 0x00000606, 0x04020005, 0x59340200, 0x8c00051a,
- 0x02000000, 0x000206f7, 0x59340200, 0x8c00050e,
- 0x0400008e, 0x59300203, 0x42027800, 0x00000001,
- 0x82000580, 0x00000007, 0x02020000, 0x000206f7,
- 0x4a026203, 0x00000002, 0x0201f000, 0x000206f7,
- 0x42028000, 0x00000002, 0x4a026006, 0x00000014,
- 0x4d2c0000, 0x0201f800, 0x00109e4a, 0x5c025800,
- 0x59300c07, 0x4807c857, 0x82040580, 0x00000007,
- 0x0402005d, 0x492fc857, 0x4a025a07, 0x00000001,
- 0x0201f000, 0x000203ab, 0x83300580, 0xffffffff,
- 0x04020055, 0x592c240b, 0x492fc857, 0x4813c857,
- 0x8c10251c, 0x04020018, 0x8c10251a, 0x04000003,
- 0x8c10250a, 0x0400006a, 0x59340a00, 0x8c040d0e,
- 0x04000003, 0x8c10251e, 0x04000065, 0x0201f800,
- 0x000209ee, 0x04000073, 0x592c240b, 0x592c020d,
- 0x48026202, 0x4936600a, 0x4932580a, 0x4a026407,
- 0x00000006, 0x4a026203, 0x00000007, 0x0201f000,
- 0x000206f0, 0x592c0a0d, 0x4c040000, 0x0201f800,
- 0x001044b2, 0x5c000800, 0x04020077, 0x58080000,
- 0x49781000, 0x802041c0, 0x04000006, 0x48004000,
- 0x80000540, 0x04020007, 0x48226810, 0x0401f005,
- 0x4802680f, 0x80000540, 0x04020002, 0x497a6810,
- 0x4d2c0000, 0x400a5800, 0x4a025a07, 0x00000002,
- 0x0201f800, 0x000203ab, 0x5c025800, 0x0401f7c2,
- 0x8c10251c, 0x04000017, 0x592c0207, 0x82000580,
- 0x0000ffff, 0x04020013, 0x592e600a, 0x83300580,
- 0xffffffff, 0x040007b8, 0x0201f800, 0x00109291,
- 0x04020011, 0x592c220d, 0x59300202, 0x80100580,
- 0x0402000d, 0x59300009, 0x800001c0, 0x04020005,
- 0x59300203, 0x82000580, 0x00000007, 0x0400079d,
- 0x492fc857, 0x4a025a07, 0x00000029, 0x0201f000,
- 0x000203ab, 0x492fc857, 0x4a025a07, 0x00000008,
- 0x0201f000, 0x000203ab, 0x4803c857, 0x8c000514,
- 0x04000008, 0x42000000, 0x0010bd07, 0x0201f800,
- 0x0010ae10, 0x492fc857, 0x492e6009, 0x1c01f000,
- 0x492fc857, 0x4a025a07, 0x00000045, 0x0201f000,
- 0x000203ab, 0x492fc857, 0x4a025a07, 0x0000002a,
- 0x0201f000, 0x000203ab, 0x492fc857, 0x4a025a07,
- 0x00000028, 0x0201f000, 0x000203ab, 0x492fc857,
- 0x4a025a07, 0x00000006, 0x0201f000, 0x000203ab,
- 0x492fc857, 0x4a025a07, 0x0000000e, 0x0201f000,
- 0x000203ab, 0x82040580, 0x00000007, 0x040207d6,
- 0x4a025a07, 0x00000002, 0x0201f000, 0x000203ab,
- 0x592c0407, 0x800000c2, 0x800008c4, 0x80040400,
- 0x48025804, 0x59340010, 0x492e6810, 0x492fc857,
- 0x80000d40, 0x04000003, 0x492c0800, 0x1c01f000,
- 0x59340203, 0x492e680f, 0x492fc857, 0x4803c857,
- 0x80000540, 0x04020003, 0x4a026a03, 0x00000001,
- 0x1c01f000, 0x59a8000d, 0x81640480, 0x0402175e,
- 0x42026000, 0x0010f694, 0x59300407, 0x82000580,
- 0x00000006, 0x04020007, 0x5930000a, 0x81340580,
- 0x04020004, 0x59300202, 0x80040580, 0x04000745,
- 0x83326400, 0x00000024, 0x41580000, 0x81300480,
- 0x040017f2, 0x0401f74c, 0x492fc857, 0x592c0205,
- 0x80000112, 0x04020592, 0x592e8a07, 0x0201f800,
- 0x00020319, 0x0402005b, 0x0201f800, 0x00104181,
- 0x0402005b, 0x592e780b, 0x493fc857, 0x8d3e7d3e,
- 0x04020006, 0x8d0e1d0e, 0x04020052, 0x0201f800,
- 0x001040a1, 0x04000592, 0x833c1d00, 0x0000001f,
- 0x0400058f, 0x592c0208, 0x82000c80, 0x00001000,
- 0x0402158b, 0x800000c2, 0x800008c4, 0x8005d400,
- 0x592e9009, 0x592e980a, 0x5934080d, 0x800409c0,
- 0x04000004, 0x58041802, 0x800c19c0, 0x04020037,
- 0x833c1d00, 0x0000001f, 0x81780040, 0x80000000,
- 0x800c1902, 0x040217fe, 0x04020579, 0x0c01f001,
- 0x00104f29, 0x00104f2c, 0x00104f39, 0x00104f3c,
- 0x00104f3f, 0x0201f800, 0x00108963, 0x0401f023,
- 0x0201f800, 0x00104073, 0x04000027, 0x80e9d1c0,
- 0x02020800, 0x0010588d, 0x42028000, 0x00000005,
- 0x417a9000, 0x417a9800, 0x0201f800, 0x00108973,
- 0x0401f016, 0x42027000, 0x0000004d, 0x0401f006,
- 0x42027000, 0x0000004e, 0x0401f003, 0x42027000,
- 0x00000052, 0x5934080d, 0x800409c0, 0x04000007,
- 0x4d3c0000, 0x40067800, 0x0201f800, 0x00104053,
- 0x5c027800, 0x04000009, 0x0201f800, 0x00103f29,
- 0x02020800, 0x001089a6, 0x04000007, 0x8d3e7d3e,
- 0x0402000e, 0x1c01f000, 0x4a025a07, 0x00000030,
- 0x0401f00d, 0x4a025a07, 0x0000002c, 0x0401f00a,
- 0x4a025a07, 0x00000028, 0x0401f007, 0x4a025a07,
- 0x00000029, 0x0401f004, 0x497a580a, 0x4a025a07,
- 0x00000000, 0x4a025a05, 0x00000103, 0x0201f000,
- 0x000203ab, 0x492fc857, 0x80140110, 0x80000040,
- 0x04000002, 0x0401f522, 0x592c0208, 0x82000500,
- 0x000003ff, 0x48025a08, 0x8c000506, 0x04000004,
- 0x82000500, 0x00000070, 0x04020003, 0x8d0e1d0e,
- 0x04020018, 0x4a025a07, 0x0000dead, 0x592c0409,
- 0x82000500, 0x0000f0ff, 0x48025c09, 0x0201f800,
- 0x00103bba, 0x04020002, 0x1c01f000, 0x49425a07,
- 0x8058b1c0, 0x04000009, 0x0201f800, 0x00108ede,
- 0x0401f80f, 0x44042800, 0x82580580, 0x00000002,
- 0x04020002, 0x48082801, 0x0201f000, 0x000203ab,
- 0x42028000, 0x00000031, 0x42000800, 0x00000001,
- 0x4200b000, 0x00000001, 0x0401f7ed, 0x592c0409,
- 0x80000118, 0x832c2c00, 0x0000000a, 0x80142c00,
- 0x1c01f000, 0x492fc857, 0x4a025a09, 0x00000006,
- 0x0201f000, 0x000203ab, 0x492fc857, 0x4a025a09,
- 0x00000001, 0x0201f000, 0x000203ab, 0x492fc857,
- 0x592c040b, 0x82000500, 0x00000003, 0x04000020,
- 0x0201f800, 0x00107188, 0x04000021, 0x592c0205,
- 0x492e6009, 0x82000500, 0x000000ff, 0x82000580,
- 0x00000045, 0x0400000e, 0x592c000c, 0x0201f800,
- 0x001054fb, 0x02000800, 0x00020319, 0x04020018,
- 0x42027000, 0x00000041, 0x4936600a, 0x4a026407,
- 0x00000001, 0x0201f000, 0x00020a34, 0x59300016,
- 0x8400055e, 0x48026016, 0x42026800, 0x0010b976,
- 0x42027000, 0x00000040, 0x0401f7f4, 0x4a025a07,
- 0x00000101, 0x0201f000, 0x000203ab, 0x4a025a07,
- 0x0000002c, 0x0201f000, 0x000203ab, 0x4a025a07,
- 0x00000028, 0x0201f800, 0x000203ab, 0x0201f000,
- 0x00020a10, 0x492fc857, 0x0201f800, 0x00105c21,
- 0x0400000b, 0x592c0205, 0x80000110, 0x80000040,
- 0x040204af, 0x592c0c07, 0x800409c0, 0x04000009,
- 0x42000000, 0x00000102, 0x0401f003, 0x42000000,
- 0x00000104, 0x48025a07, 0x0201f000, 0x000203ab,
- 0x592c0c08, 0x800409c0, 0x04000020, 0x82040480,
- 0x00000005, 0x0402101d, 0x4c040000, 0x80040800,
- 0x0201f800, 0x00105c46, 0x5c001000, 0x04020014,
- 0x832c0400, 0x00000009, 0x4000a000, 0x0201f800,
- 0x00105c6f, 0x0402000e, 0x592c1208, 0x58c80c0b,
- 0x84040d00, 0x84040d02, 0x8c081500, 0x04000002,
- 0x84040d5e, 0x4805940b, 0x42000000, 0x00000000,
- 0x48025a07, 0x0201f000, 0x000203ab, 0x42000000,
- 0x00000103, 0x0401f7fb, 0x42000000, 0x00000102,
- 0x0401f7f8, 0x492fc857, 0x592e7c07, 0x833c0500,
- 0xfffffffe, 0x0402004a, 0x592c4008, 0x42026000,
- 0x0010f694, 0x41581800, 0x400c0000, 0x81300480,
- 0x04021029, 0x59300203, 0x82000580, 0x00000000,
- 0x04000007, 0x59300009, 0x80000d40, 0x04000004,
- 0x58040006, 0x80200580, 0x04000004, 0x83326400,
- 0x00000024, 0x0401f7f1, 0x58040205, 0x82000500,
- 0x000000ff, 0x82000d80, 0x00000053, 0x0400000d,
- 0x82000d80, 0x00000048, 0x0400000a, 0x82000d80,
- 0x00000018, 0x04000007, 0x82000d80, 0x00000029,
- 0x04000004, 0x82000d80, 0x00000014, 0x040207ec,
- 0x4d2c0000, 0x0201f800, 0x0010853c, 0x5c025800,
- 0x0400001f, 0x4a025a07, 0x00000000, 0x0201f000,
- 0x000203ab, 0x592e8a07, 0x83440480, 0x000007f0,
- 0x04021017, 0x83440400, 0x0010b080, 0x50000000,
- 0x80026d40, 0x04000012, 0x4d2c0000, 0x0201f800,
- 0x0010402d, 0x0400000d, 0x42028000, 0x00000005,
- 0x592c0a09, 0x417a6000, 0x0201f800, 0x00104543,
- 0x0201f800, 0x00108b01, 0x0201f800, 0x000203ab,
- 0x5c025800, 0x0401f7e4, 0x5c025800, 0x4a025a07,
- 0x00000031, 0x0201f000, 0x000203ab, 0x492fc857,
- 0x4d2c0000, 0x0201f800, 0x0010056f, 0x04000017,
- 0x492fc857, 0x412f4000, 0x0201f800, 0x0010056f,
- 0x0400000f, 0x492fc857, 0x412dd800, 0x0201f800,
- 0x001032e0, 0x0201f800, 0x001032ea, 0x49a1d80a,
- 0x5c025800, 0x492dd809, 0x48ef4006, 0x0201f800,
- 0x00101c15, 0x0201f000, 0x00101c34, 0x41a25800,
- 0x0201f800, 0x00100580, 0x5c025800, 0x4a025a07,
- 0x00004005, 0x4a025c07, 0x00000002, 0x0201f000,
- 0x000203ab, 0x4807c857, 0x485fc857, 0x4200b800,
- 0x00000001, 0x5c000800, 0x4c5c0000, 0x0401f005,
- 0x4807c857, 0x485fc857, 0x5c000800, 0x4d780000,
- 0x4803c857, 0x492fc857, 0x8c00050e, 0x02020800,
- 0x00100322, 0x4203e000, 0x50000000, 0x4200b800,
- 0x00008003, 0x0201f000, 0x00100332, 0x80140110,
- 0x80000040, 0x02020000, 0x00104c8b, 0x599c0019,
- 0x8c000510, 0x0402000d, 0x0201f800, 0x001041df,
- 0x04020002, 0x1c01f000, 0x49425a07, 0x4806580e,
- 0x480a580f, 0x4943c857, 0x4807c857, 0x480bc857,
- 0x0201f000, 0x000203ab, 0x592c040c, 0x82000500,
- 0x0000e000, 0x82000580, 0x00006000, 0x040007ef,
- 0x59a8021b, 0x8c000508, 0x040007ec, 0x592c120c,
- 0x592c080b, 0x82040500, 0xff000000, 0x80040d80,
- 0x80000110, 0x80081540, 0x04000004, 0x4806580b,
- 0x0401f883, 0x0401f7e1, 0x42001000, 0x0000001c,
- 0x42000800, 0x00000019, 0x42028000, 0x00000031,
- 0x0401f7de, 0x80140110, 0x80000040, 0x02020000,
- 0x00104c8b, 0x0201f800, 0x00104355, 0x04020002,
- 0x1c01f000, 0x49425a07, 0x48065812, 0x480a5813,
- 0x0201f000, 0x000203ab, 0x80140110, 0x02000000,
- 0x00104c8b, 0x80000040, 0x0402000d, 0x4202e000,
- 0x00000001, 0x592c020b, 0x8c000504, 0x02000000,
- 0x0002068a, 0x592c0208, 0x82000c80, 0x00001001,
- 0x02021000, 0x00104c9b, 0x0401f005, 0x4a033006,
- 0x0002068a, 0x0201f000, 0x00020684, 0x592c1014,
- 0x82080500, 0xffff0003, 0x02020000, 0x00104c9b,
- 0x4202e000, 0x00000002, 0x42000000, 0x0010c35d,
- 0x50007000, 0x592c0012, 0x592c0813, 0x48007006,
- 0x48047007, 0x492c700a, 0x4978700d, 0x4978700b,
- 0x0401f001, 0x4978700c, 0x82080480, 0x00000180,
- 0x4803c857, 0x04001007, 0x4800700e, 0x4a007005,
- 0x00000180, 0x4a007004, 0x00000060, 0x0401f005,
- 0x4978700e, 0x48087005, 0x80081104, 0x48087004,
- 0x58380009, 0x48007003, 0x40381000, 0x0201f000,
- 0x00020016, 0x4df00000, 0x4203e000, 0x50000000,
- 0x0201f800, 0x0010055a, 0x04000003, 0x59980005,
- 0x0801f800, 0x5c03e000, 0x1c01f000, 0x0201f800,
- 0x0010055a, 0x02000800, 0x0010032d, 0x4a025809,
- 0x0010c2fc, 0x42000800, 0x0010c35d, 0x452c0800,
- 0x497a580a, 0x497a580b, 0x497a580c, 0x497a580d,
- 0x497a580e, 0x4a025808, 0x0002073d, 0x497a580f,
- 0x4a025802, 0x00000100, 0x4a025801, 0x00000001,
- 0x1c01f000, 0x0401f80c, 0x04000670, 0x4a025a09,
- 0x00000001, 0x0201f000, 0x0010a4d8, 0x0401f806,
- 0x04000665, 0x4a025a09, 0x00000006, 0x0201f000,
- 0x0010a4d8, 0x59a80005, 0x8c00051a, 0x1c01f000,
- 0x59a80005, 0x8c00051c, 0x1c01f000, 0x59a8000f,
- 0x80080580, 0x04020002, 0x1c01f000, 0x480bc857,
- 0x480b500f, 0x497b8830, 0x82080d40, 0x01000000,
- 0x48078832, 0x59c40002, 0x8400054c, 0x48038802,
- 0x42000800, 0x00000003, 0x0201f000, 0x001061d9,
- 0x59c80007, 0x8c000502, 0x0400004f, 0x835c2c80,
- 0x00000005, 0x02001000, 0x00105790, 0x59c82817,
- 0x4817506c, 0x497b9005, 0x82140500, 0x00e00000,
- 0x04020040, 0x82140500, 0x000003ff, 0x82001c00,
- 0x00000006, 0x41cc2000, 0x42003000, 0x00006080,
- 0x820c0480, 0x00000040, 0x04001006, 0x42001000,
- 0x00000040, 0x820c1c80, 0x00000040, 0x0401f003,
- 0x400c1000, 0x41781800, 0x54182000, 0x80102000,
- 0x80183000, 0x80081040, 0x040207fc, 0x800c19c0,
- 0x04000005, 0x59c80005, 0x80000000, 0x48039005,
- 0x0401f7ea, 0x82140500, 0x000003ff, 0x800018c4,
- 0x8c142d14, 0x04000005, 0x59cc0002, 0x82000500,
- 0x00000003, 0x800c1c80, 0x480f505a, 0x82140500,
- 0x01f60000, 0x04020010, 0x0201f800, 0x00105795,
- 0x04020008, 0x4a039005, 0x00000140, 0x82140500,
- 0x0e000000, 0x80000132, 0x0c01f815, 0x1c01f000,
- 0x800001c0, 0x0402000b, 0x4a039005, 0x00000140,
- 0x0401f00d, 0x4817c857, 0x82140500, 0x00f60000,
- 0x04020004, 0x0201f800, 0x00105683, 0x040207eb,
- 0x0201f800, 0x001057b9, 0x4a039005, 0x00000140,
- 0x0401f03f, 0x4803c856, 0x1c01f000, 0x001051b1,
- 0x00105505, 0x001051ab, 0x001051ab, 0x001051ab,
- 0x001051ab, 0x001051ab, 0x001051ab, 0x4803c857,
- 0x42000000, 0x0010bd14, 0x0201f800, 0x0010ae10,
- 0x1c01f000, 0x59cc0002, 0x82000500, 0xff000000,
- 0x82000580, 0xfe000000, 0x04020004, 0x0201f800,
- 0x0010a824, 0x0401f025, 0x59cc0400, 0x82000d00,
- 0x0000ff00, 0x82041500, 0x0000f000, 0x840409c0,
- 0x82080580, 0x00002000, 0x04020013, 0x836c0580,
- 0x00000001, 0x0402000e, 0x59cc0006, 0x82000500,
- 0xff000000, 0x82000580, 0x11000000, 0x02020800,
- 0x001003f4, 0x04020011, 0x0201f800, 0x0010331d,
- 0x0201f800, 0x001057ee, 0x0401f00c, 0x0401f81f,
- 0x0401f00a, 0x82080580, 0x00003000, 0x04020003,
- 0x0401faa7, 0x0401f005, 0x82080580, 0x00008000,
- 0x04020002, 0x0401fb8e, 0x1c01f000, 0x4817c857,
- 0x42000000, 0x0010bd13, 0x0201f800, 0x0010ae10,
- 0x836c0580, 0x00000003, 0x0402000b, 0x4c080000,
- 0x4c0c0000, 0x42001000, 0x00008048, 0x40141800,
- 0x80142120, 0x0201f800, 0x001031f5, 0x5c001800,
- 0x5c001000, 0x1c01f000, 0x59cc0002, 0x82000500,
- 0xff000000, 0x82001580, 0x01000000, 0x04000006,
- 0x82001580, 0x23000000, 0x02020800, 0x001003f4,
- 0x04020226, 0x59a8005a, 0x82000480, 0x00000004,
- 0x04001222, 0x82040580, 0x00000023, 0x04020052,
- 0x59cc0004, 0x4803c857, 0x59cc0006, 0x82000500,
- 0xff000000, 0x59cc0801, 0x82040d00, 0x00ffffff,
- 0x80040540, 0x4803c857, 0x0201f800, 0x00105616,
- 0x02000800, 0x001003f4, 0x04000210, 0x59300c07,
- 0x82040580, 0x00000010, 0x0400000f, 0x82040580,
- 0x00000011, 0x0400000c, 0x82040580, 0x00000001,
- 0x04000009, 0x82040580, 0x00000004, 0x04000006,
- 0x82040580, 0x00000008, 0x02020800, 0x001003f4,
- 0x040201fe, 0x59300004, 0x82000500, 0x80010000,
- 0x04000006, 0x0201f800, 0x001064f2, 0x02020800,
- 0x001003f4, 0x040201f5, 0x59cc0a04, 0x48066202,
- 0x59cc0006, 0x82000500, 0xffff0000, 0x82000d80,
- 0x02000000, 0x04020005, 0x42027000, 0x00000015,
- 0x0201f000, 0x00020a34, 0x82000d80, 0x02140000,
- 0x040007fa, 0x82000d80, 0x02100000, 0x040007f7,
- 0x82000d80, 0x02100000, 0x040007f4, 0x82000d80,
- 0x01000000, 0x02020800, 0x001003f4, 0x040201db,
- 0x59cc0006, 0x82000500, 0x0000ffff, 0x02020800,
- 0x001003f4, 0x040201d5, 0x59a8005a, 0x82000480,
- 0x00000008, 0x040011d1, 0x42027000, 0x00000016,
- 0x0401f7e4, 0x82040580, 0x00000022, 0x02020800,
- 0x001003f4, 0x040201c9, 0x59cc0004, 0x4803c857,
- 0x59cc0006, 0x4803c857, 0x59cc0001, 0x4803c857,
- 0x59a8005a, 0x800001c0, 0x02000800, 0x001003f4,
- 0x040001be, 0x59a80805, 0x8c040d14, 0x0400002f,
- 0x0401f9e0, 0x0402002d, 0x0401f9f9, 0x0400002b,
- 0x42027000, 0x0000004c, 0x59cc0001, 0x82000500,
- 0x00ffffff, 0x0201f800, 0x0010575c, 0x04000008,
- 0x42028800, 0x0000ffff, 0x42026800, 0x0010c2b2,
- 0x0201f800, 0x001044c5, 0x481a6802, 0x599c0019,
- 0x8c000510, 0x0400018f, 0x59a8021b, 0x8c000508,
- 0x0400018c, 0x59cc1006, 0x82081500, 0xffff0000,
- 0x82081580, 0x03000000, 0x04020186, 0x83641480,
- 0x00000010, 0x0400119e, 0x8400054c, 0x4803521b,
- 0x59cc1000, 0x82081500, 0x00ffffff, 0x0401feb0,
- 0x59cc0007, 0x82000500, 0x0000ffff, 0x48038893,
- 0x48035012, 0x0401f177, 0x59cc0006, 0x82000500,
- 0xffff0000, 0x82000d80, 0x03000000, 0x04020029,
- 0x59a8021b, 0x8c000508, 0x04000020, 0x8400054c,
- 0x4803521b, 0x59cc0800, 0x82040d00, 0x00ffffff,
- 0x4807500f, 0x497b8830, 0x84040d70, 0x48078832,
- 0x59c40802, 0x84040d4c, 0x48078802, 0x59cc0007,
- 0x82000500, 0x0000ffff, 0x48038893, 0x48035012,
- 0x42000800, 0x00000003, 0x59a8100f, 0x0201f800,
- 0x001061d9, 0x59cc0006, 0x82000500, 0x0000ffff,
- 0x02020800, 0x001003f4, 0x04020168, 0x42027000,
- 0x00000017, 0x0401f10b, 0x0201f800, 0x00104755,
- 0x040207f5, 0x8c000502, 0x040207f3, 0x0401f15f,
- 0x82000d80, 0x04000000, 0x04020018, 0x59cc0006,
- 0x82000500, 0x0000ffff, 0x02020800, 0x001003f4,
- 0x04020156, 0x0201f800, 0x00104755, 0x04000002,
- 0x0401f0f6, 0x497b5064, 0x42001000, 0x0010ebc8,
- 0x0201f800, 0x00105872, 0x0201f800, 0x001044cf,
- 0x59a8021b, 0x84000548, 0x4803521b, 0x42027000,
- 0x00000030, 0x0401f0eb, 0x82000d80, 0x05000000,
- 0x0402000a, 0x59cc0006, 0x82000500, 0x0000ffff,
- 0x02020800, 0x001003f4, 0x0402013c, 0x42027000,
- 0x00000018, 0x0401f0df, 0x82000d80, 0x20100000,
- 0x04020004, 0x42027000, 0x00000019, 0x0401f0d9,
- 0x82000d80, 0x21100000, 0x04020004, 0x42027000,
- 0x0000001a, 0x0401f0d3, 0x82000d80, 0x52000000,
- 0x0402000a, 0x59cc0006, 0x82000500, 0x0000ffff,
- 0x02020800, 0x001003f4, 0x04020124, 0x42027000,
- 0x0000001b, 0x0401f0c7, 0x82000d80, 0x50000000,
- 0x0402000a, 0x59cc0006, 0x82000500, 0x0000ffff,
- 0x02020800, 0x001003f4, 0x04020118, 0x42027000,
- 0x0000001c, 0x0401f0bb, 0x82000d80, 0x13000000,
- 0x04020004, 0x42027000, 0x00000034, 0x0401f0b5,
- 0x82000d80, 0x12000000, 0x0402000a, 0x59cc0006,
- 0x82000500, 0x0000ffff, 0x02020800, 0x001003f4,
- 0x04020106, 0x42027000, 0x00000024, 0x0401f0a9,
- 0x82000d00, 0xff000000, 0x82040d80, 0x24000000,
- 0x04020004, 0x42027000, 0x0000002d, 0x0401f0a1,
- 0x82000d00, 0xff000000, 0x82040d80, 0x53000000,
- 0x04020004, 0x42027000, 0x0000002a, 0x0401f099,
- 0x82000d80, 0x0f000000, 0x04020004, 0x42027000,
- 0x00000020, 0x0401f093, 0x82000d80, 0x61040000,
- 0x0402004b, 0x4c5c0000, 0x4c600000, 0x4c640000,
- 0x4c580000, 0x83ccc400, 0x00000006, 0x8060b800,
- 0x50600000, 0x82000500, 0x0000ffff, 0x82001480,
- 0x00000401, 0x04021036, 0x82001500, 0x00000003,
- 0x04020033, 0x59a8105a, 0x80081480, 0x04001030,
- 0x82000480, 0x00000004, 0x8000b104, 0x8058b1c0,
- 0x0400002b, 0x505cc800, 0x8264c500, 0x03000000,
- 0x8060c130, 0x42000000, 0x0010bcde, 0x82602580,
- 0x00000000, 0x04020004, 0x42000000, 0x0010bcdb,
- 0x0401f00c, 0x82602580, 0x00000001, 0x04020004,
- 0x42000000, 0x0010bcdc, 0x0401f006, 0x82602580,
- 0x00000002, 0x04020003, 0x42000000, 0x0010bcdd,
- 0x0201f800, 0x0010ae10, 0x42001000, 0x00008015,
- 0x82642500, 0x0000ffff, 0x80641920, 0x0201f800,
- 0x001031f5, 0x805cb800, 0x8058b040, 0x040207de,
- 0x5c00b000, 0x5c00c800, 0x5c00c000, 0x5c00b800,
- 0x42027000, 0x00000023, 0x0401f04e, 0x5c00b000,
- 0x5c00c800, 0x5c00c000, 0x5c00b800, 0x42000000,
- 0x0010bd11, 0x0201f000, 0x0010ae10, 0x82000d80,
- 0x60000000, 0x04020004, 0x42027000, 0x0000003f,
- 0x0401f040, 0x82000d80, 0x54000000, 0x04020008,
- 0x0401fb80, 0x02020800, 0x001003f4, 0x04020093,
- 0x42027000, 0x00000046, 0x0401f036, 0x82000d80,
- 0x55000000, 0x04020009, 0x0401fb9e, 0x04020004,
- 0x42027000, 0x00000041, 0x0401f02e, 0x42027000,
- 0x00000042, 0x0401f02b, 0x82000d80, 0x78000000,
- 0x04020004, 0x42027000, 0x00000045, 0x0401f025,
- 0x82000d80, 0x10000000, 0x04020004, 0x42027000,
- 0x0000004e, 0x0401f01f, 0x82000d80, 0x63000000,
- 0x04020004, 0x42027000, 0x0000004a, 0x0401f019,
- 0x82000d00, 0xff000000, 0x82040d80, 0x56000000,
- 0x04020004, 0x42027000, 0x0000004f, 0x0401f011,
- 0x82000d00, 0xff000000, 0x82040d80, 0x57000000,
- 0x04020004, 0x42027000, 0x00000050, 0x0401f009,
- 0x82000d80, 0x7d000000, 0x04020004, 0x42027000,
- 0x00000056, 0x0401f003, 0x42027000, 0x0000001d,
- 0x59cc3800, 0x821c3d00, 0x00ffffff, 0x821c0580,
- 0x00fffffe, 0x59cc0001, 0x04020005, 0x40003000,
- 0x42028800, 0x000007fe, 0x0401f01c, 0x0401f929,
- 0x02020800, 0x001003f4, 0x0402004c, 0x83440480,
- 0x000007f0, 0x04001001, 0x0201f800, 0x00103314,
- 0x04000012, 0x4c180000, 0x0201f800, 0x00020319,
- 0x5c003000, 0x04000012, 0x4c180000, 0x0401f865,
- 0x5c003000, 0x04020009, 0x0201f800, 0x001044c5,
- 0x42026800, 0x0010c2b2, 0x481a6802, 0x42028800,
- 0x0000ffff, 0x0401f006, 0x0201f800, 0x00103de6,
- 0x02020800, 0x001003f4, 0x04020030, 0x83380580,
- 0x00000046, 0x04020006, 0x59a8000f, 0x80180580,
- 0x02000800, 0x001003f4, 0x04000028, 0x59340200,
- 0x8c000514, 0x0400000f, 0x83380580, 0x00000030,
- 0x0400000c, 0x83380580, 0x0000003f, 0x04000009,
- 0x83380580, 0x00000034, 0x04000006, 0x83380580,
- 0x00000024, 0x04000003, 0x42027000, 0x0000004c,
- 0x0201f800, 0x00107188, 0x04000019, 0x4936600a,
- 0x4a026407, 0x00000004, 0x83340580, 0x0010c2b2,
- 0x04020005, 0x59cc0001, 0x82000500, 0x00ffffff,
- 0x4802601f, 0x59cc0c04, 0x48066202, 0x83380580,
- 0x0000004c, 0x04020003, 0x4a026407, 0x00000011,
- 0x0201f000, 0x00020a34, 0x598800b7, 0x4803c857,
- 0x80000000, 0x480310b7, 0x1c01f000, 0x42001000,
- 0x00008049, 0x59cc1806, 0x800c1930, 0x0201f800,
- 0x001031f5, 0x0201f800, 0x00107192, 0x02000800,
- 0x001003f4, 0x040007f1, 0x4936600a, 0x83340580,
- 0x0010c2b2, 0x04020005, 0x59cc0001, 0x82000500,
- 0x00ffffff, 0x4802601f, 0x4a026407, 0x00000004,
- 0x59cc0c04, 0x48066202, 0x4a026403, 0x00000009,
- 0x4a02641b, 0x00000009, 0x4a02621b, 0x00002900,
- 0x4a026203, 0x00000001, 0x0201f000, 0x0010608d,
- 0x59a8021b, 0x4803c857, 0x8c000508, 0x04000013,
- 0x599c0019, 0x8c000510, 0x04020010, 0x59cc0006,
- 0x82000500, 0xff000000, 0x82000d80, 0x03000000,
- 0x0400000c, 0x82000d80, 0x20000000, 0x04000009,
- 0x82000d80, 0x05000000, 0x04000006, 0x82000d80,
- 0x21000000, 0x04000003, 0x80000580, 0x1c01f000,
- 0x82000540, 0x00000001, 0x0401f7fd, 0x59cc2006,
- 0x82102500, 0xff000000, 0x9c1021c0, 0x0401f807,
- 0x820c1c00, 0x0010b939, 0x500c1800, 0x800c0500,
- 0x4803c857, 0x1c01f000, 0x40100800, 0x41781800,
- 0x82040480, 0x00000020, 0x04001004, 0x800c1800,
- 0x40000800, 0x0401f7fb, 0x82040500, 0x0000000f,
- 0x82000400, 0x0010af34, 0x50000000, 0x8c040d08,
- 0x04000002, 0x900001c0, 0x1c01f000, 0x4803c856,
- 0x0401faff, 0x0402000a, 0x0201f800, 0x00101b0a,
- 0x04020007, 0x59cc0002, 0x82000500, 0xff000000,
- 0x82000d80, 0x08000000, 0x04000802, 0x1c01f000,
- 0x4803c856, 0x59cc0400, 0x82000d00, 0x0000ff00,
- 0x840409c0, 0x82040580, 0x00000033, 0x04020027,
- 0x0401f982, 0x04000062, 0x59cc0a04, 0x48066202,
- 0x59a8005a, 0x82000480, 0x00000004, 0x0400105c,
- 0x59cc0006, 0x4803c857, 0x82000500, 0xffff0000,
- 0x82000d80, 0x02000000, 0x04020009, 0x59cc0006,
- 0x82000500, 0x0000ffff, 0x04020051, 0x42027000,
- 0x00000015, 0x0201f000, 0x00020a34, 0x82000d80,
- 0x01000000, 0x0402004a, 0x59cc0006, 0x82000500,
- 0x0000ffff, 0x04020046, 0x59a8005a, 0x82000480,
- 0x00000008, 0x04001042, 0x42027000, 0x00000016,
- 0x0201f000, 0x00020a34, 0x82040580, 0x00000032,
- 0x0402003b, 0x59cc0006, 0x82000500, 0xffff0000,
- 0x82000d80, 0x14000000, 0x04020035, 0x59a8005a,
- 0x82000480, 0x00000010, 0x04001031, 0x42027000,
- 0x00000038, 0x59cc0001, 0x0401f831, 0x0402002c,
- 0x83440480, 0x000007f0, 0x04001001, 0x0201f800,
- 0x00103314, 0x04000012, 0x4c180000, 0x0201f800,
- 0x00020319, 0x5c003000, 0x04000010, 0x4c180000,
- 0x0401ff70, 0x5c003000, 0x04020009, 0x0201f800,
- 0x001044c5, 0x42026800, 0x0010c2b2, 0x481a6802,
- 0x42028800, 0x0000ffff, 0x0401f004, 0x0201f800,
- 0x00103de1, 0x04020012, 0x0201f800, 0x00107188,
- 0x0400000f, 0x4936600a, 0x83340580, 0x0010c2b2,
- 0x04020005, 0x59cc0001, 0x82000500, 0x00ffffff,
- 0x4802601f, 0x4a026407, 0x00000004, 0x59cc0c04,
- 0x48066202, 0x0201f000, 0x00020a34, 0x42000000,
- 0x0010bd11, 0x0201f000, 0x0010ae10, 0x4803c857,
- 0x4000d000, 0x82003500, 0x00ffffff, 0x0201f800,
- 0x0010f133, 0x40c40000, 0x82000580, 0x00000001,
- 0x1c01f000, 0x59a8021b, 0x8c00050e, 0x04000003,
- 0x8c000502, 0x04000006, 0x59cc0c00, 0x80040910,
- 0x82040500, 0x0000000f, 0x0c01f002, 0x1c01f000,
- 0x00105520, 0x00105520, 0x00105520, 0x00105624,
- 0x00105520, 0x00105522, 0x00105547, 0x0010554a,
- 0x00105520, 0x00105520, 0x00105520, 0x00105520,
- 0x00105520, 0x00105520, 0x00105520, 0x00105520,
- 0x4803c856, 0x1c01f000, 0x0401f8f4, 0x0400001e,
- 0x59a8005a, 0x82000480, 0x0000000c, 0x0400101a,
- 0x59300407, 0x82000580, 0x00000003, 0x04020016,
- 0x59cc0001, 0x5932680a, 0x813669c0, 0x04000012,
- 0x59340802, 0x80040580, 0x82000500, 0x00ffffff,
- 0x0402000d, 0x59cc0a04, 0x59300202, 0x82001580,
- 0x0000ffff, 0x04000003, 0x80040580, 0x04020006,
- 0x48066202, 0x42027000, 0x00000046, 0x0201f000,
- 0x00020a34, 0x59cc0004, 0x4803c857, 0x42000000,
- 0x0010bd12, 0x0201f000, 0x0010ae10, 0x59cc0004,
- 0x4803c857, 0x1c01f000, 0x0401f8cc, 0x0400001a,
- 0x59a8005a, 0x82000480, 0x0000000c, 0x04001016,
- 0x59300407, 0x82000580, 0x00000003, 0x04020012,
- 0x59cc0001, 0x82000500, 0x00ffffff, 0x5932680a,
- 0x813669c0, 0x0400000c, 0x59340802, 0x82040d00,
- 0x00ffffff, 0x80040580, 0x04020007, 0x59cc0a04,
- 0x48066202, 0x42027000, 0x00000045, 0x0201f000,
- 0x00020a34, 0x59cc0004, 0x4803c857, 0x42000000,
- 0x0010bd12, 0x0201f000, 0x0010ae10, 0x59cc0004,
- 0x4803c857, 0x59cc0000, 0x82000500, 0xff000000,
- 0x59cc1001, 0x82081500, 0x00ffffff, 0x80080540,
- 0x4803c857, 0x4817c857, 0x0401fa09, 0x02020800,
- 0x001003f4, 0x04020016, 0x0201f800, 0x00101b0a,
- 0x02020800, 0x001003f4, 0x04020011, 0x59cc0002,
- 0x82000500, 0xff000000, 0x82000580, 0x00000000,
- 0x02020800, 0x001003f4, 0x04020009, 0x82040500,
- 0x0000000f, 0x82000c80, 0x00000006, 0x02021800,
- 0x001003f4, 0x04021002, 0x0c01f003, 0x4803c856,
- 0x1c01f000, 0x00105597, 0x00105599, 0x00105597,
- 0x00105597, 0x001055ed, 0x001055fc, 0x4803c856,
- 0x1c01f000, 0x59a8005a, 0x800001c0, 0x02020800,
- 0x001003f4, 0x040207fa, 0x59cc0802, 0x4807c856,
- 0x8c040d2e, 0x0402001b, 0x42026000, 0x0010f64c,
- 0x59cc0001, 0x0401ff56, 0x0402000d, 0x0201f800,
- 0x00020319, 0x0402000a, 0x4a026407, 0x00000005,
- 0x4a026203, 0x00000008, 0x4936600a, 0x42027000,
- 0x00000088, 0x0201f000, 0x00020a34, 0x4803c857,
- 0x42028800, 0x0000ffff, 0x417a6800, 0x59cc0001,
- 0x82000500, 0x00ffffff, 0x4802601f, 0x0401f7ef,
- 0x59cc0001, 0x4803c857, 0x0401ff3d, 0x02020800,
- 0x001003f4, 0x040207d6, 0x0201f800, 0x00103de1,
- 0x02020800, 0x001003f4, 0x040207d1, 0x59cc0005,
- 0x8c000500, 0x04020006, 0x59340200, 0x8c00050e,
- 0x02020800, 0x001003f4, 0x040207c9, 0x0201f800,
- 0x00104194, 0x04020010, 0x0401f844, 0x02000800,
- 0x001003f4, 0x040007c2, 0x42026000, 0x0010f64c,
- 0x4936600a, 0x4a026407, 0x00000002, 0x4a026203,
- 0x00000008, 0x42027000, 0x00000088, 0x0201f000,
- 0x00020a34, 0x0201f800, 0x00107188, 0x040007b4,
- 0x4936600a, 0x4a026407, 0x00000004, 0x59cc0c04,
- 0x48066202, 0x42027000, 0x00000001, 0x0201f000,
- 0x00020a34, 0x59cc0802, 0x8c040d2e, 0x0400000b,
- 0x0401f826, 0x04000009, 0x0401f997, 0x04020007,
- 0x59cc0a04, 0x48066202, 0x42027000, 0x00000089,
- 0x0201f000, 0x00020a34, 0x4933c857, 0x1c01f000,
- 0x59cc0004, 0x4803c857, 0x59a8005a, 0x82000480,
- 0x00000004, 0x0400100e, 0x59cc0802, 0x8c040d2e,
- 0x0400000b, 0x0401f811, 0x04000009, 0x0401f982,
- 0x04020007, 0x59cc0a04, 0x48066202, 0x42027000,
- 0x0000008a, 0x0201f000, 0x00020a34, 0x4933c857,
- 0x42000000, 0x0010bd11, 0x0201f000, 0x0010ae10,
- 0x59cc0a04, 0x0401f002, 0x59cc0c04, 0x59a8000d,
- 0x59a8104f, 0x80080400, 0x80040480, 0x04021007,
- 0x800400c4, 0x800408ca, 0x80040c00, 0x82066400,
- 0x0010f694, 0x1c01f000, 0x80000580, 0x0401f7fe,
- 0x59cc0802, 0x8c040d2e, 0x04020019, 0x0401ffed,
- 0x04000017, 0x59300407, 0x82000580, 0x00000006,
- 0x04020013, 0x59cc0001, 0x82000500, 0x00ffffff,
- 0x5932680a, 0x813669c0, 0x0400000d, 0x59340802,
- 0x82040d00, 0x00ffffff, 0x80040580, 0x04020008,
- 0x59a8005a, 0x800001c0, 0x04020005, 0x42027000,
- 0x00000051, 0x0201f000, 0x00020a34, 0x59cc0004,
- 0x4803c857, 0x42000000, 0x0010bd12, 0x0201f000,
- 0x0010ae10, 0x4803c856, 0x42003000, 0x00000105,
- 0x0401f001, 0x481bc857, 0x4c5c0000, 0x4c600000,
- 0x4c640000, 0x41ccc800, 0x4014b800, 0x4018c000,
- 0x0401f805, 0x5c00c800, 0x5c00c000, 0x5c00b800,
- 0x1c01f000, 0x4803c856, 0x4c580000, 0x58640400,
- 0x82000500, 0x0000f000, 0x82000580, 0x0000c000,
- 0x04000022, 0x0201f800, 0x00107188, 0x0400001f,
- 0x58640001, 0x0401fe9a, 0x0402001e, 0x0201f800,
- 0x00103de1, 0x0402001b, 0x4936600a, 0x0201f800,
- 0x0010056f, 0x04000017, 0x492e6018, 0x497a5800,
- 0x497a5a05, 0x485e5c05, 0x832cac00, 0x00000006,
- 0x4200b000, 0x00000007, 0x4064a000, 0x0201f800,
- 0x0010aee2, 0x4862641b, 0x4a026403, 0x0000003e,
- 0x4a026407, 0x00000001, 0x4a026203, 0x00000001,
- 0x0201f800, 0x0010608d, 0x5c00b000, 0x1c01f000,
- 0x0201f800, 0x00020a10, 0x0401f7fc, 0x4803c856,
- 0x59cc0400, 0x82000d00, 0x0000ff00, 0x82040500,
- 0x0000f000, 0x840409c0, 0x82000580, 0x00002000,
- 0x0402004c, 0x82040580, 0x00000022, 0x04020040,
- 0x59c400a4, 0x82000500, 0x0000000f, 0x82000c80,
- 0x00000007, 0x04001004, 0x82000480, 0x0000000c,
- 0x04001061, 0x59cc0006, 0x82000500, 0xffff0000,
- 0x82000d80, 0x04000000, 0x0400005b, 0x82000d80,
- 0x60000000, 0x04000058, 0x82000d80, 0x54000000,
- 0x04000055, 0x82000d80, 0x03000000, 0x0402001b,
- 0x59a80a1b, 0x8c040d02, 0x0402004f, 0x8c040d08,
- 0x0402004d, 0x82000d80, 0x03000000, 0x04020004,
- 0x0201f800, 0x00104755, 0x04000047, 0x0201f800,
- 0x001040e5, 0x04000047, 0x59a80018, 0x800000d0,
- 0x59a8080f, 0x82040d00, 0x000000ff, 0x80040540,
- 0x59cc0800, 0x82040d00, 0x00ffffff, 0x80040580,
- 0x04020018, 0x0401f038, 0x59c40802, 0x8c040d0c,
- 0x04020014, 0x82000d80, 0x52000000, 0x040007ec,
- 0x82000d80, 0x05000000, 0x040007e9, 0x82000d80,
- 0x50000000, 0x040007e6, 0x0401f00a, 0x82040580,
- 0x00000023, 0x04020007, 0x0401ff44, 0x04000005,
- 0x59300c03, 0x82040580, 0x00000002, 0x04000022,
- 0x59a80073, 0x8c00053e, 0x0400001d, 0x59cc0800,
- 0x82040d00, 0x00ffffff, 0x82040580, 0x0000fc0e,
- 0x04000019, 0x4c040000, 0x42000000, 0x0010bdaa,
- 0x0201f800, 0x0010ae10, 0x0201f800, 0x000209ee,
- 0x5c000800, 0x0400000e, 0x59aa6874, 0x4936600a,
- 0x4a026407, 0x00000012, 0x42027000, 0x000000d2,
- 0x48066019, 0x4a02601a, 0x00000000, 0x4a02601b,
- 0x00000000, 0x0201f800, 0x00020a34, 0x80000580,
- 0x0401f003, 0x82000540, 0x00000001, 0x1c01f000,
- 0x59cc0006, 0x82000500, 0xffff0000, 0x82000d80,
- 0x03000000, 0x04000004, 0x82000d80, 0x52000000,
- 0x040207d4, 0x59a8021b, 0x82000500, 0x00000009,
- 0x82000580, 0x00000008, 0x040007ef, 0x0401f7cd,
- 0x4803c856, 0x4c5c0000, 0x4c580000, 0x59a8005a,
- 0x82000580, 0x0000004c, 0x0402001f, 0x59ccb807,
- 0x9c5cb9c0, 0x825cbd00, 0x00000007, 0x8c5cbd00,
- 0x0400000a, 0x4200b000, 0x00000002, 0x83a81c00,
- 0x00000002, 0x83cc1400, 0x0000000d, 0x0201f800,
- 0x00107df9, 0x04020010, 0x8c5cbd02, 0x0400000a,
- 0x4200b000, 0x00000002, 0x83a81c00, 0x00000000,
- 0x83cc1400, 0x0000000f, 0x0201f800, 0x00107df9,
- 0x04020005, 0x8c5cbd04, 0x04000003, 0x82000540,
- 0x00000001, 0x5c00b000, 0x5c00b800, 0x1c01f000,
- 0x4803c856, 0x4c5c0000, 0x4c580000, 0x59a8005a,
- 0x82000580, 0x0000004c, 0x0402001f, 0x59ccb807,
- 0x9c5cb9c0, 0x825cbd00, 0x00000007, 0x8c5cbd00,
- 0x0400000a, 0x4200b000, 0x00000002, 0x83a81c00,
- 0x00000002, 0x83cc1400, 0x00000009, 0x0201f800,
- 0x00107df9, 0x04020010, 0x8c5cbd02, 0x0400000a,
- 0x4200b000, 0x00000002, 0x83a81c00, 0x00000000,
- 0x83cc1400, 0x0000000b, 0x0201f800, 0x00107df9,
- 0x04020005, 0x8c5cbd04, 0x04000003, 0x82000540,
- 0x00000001, 0x5c00b000, 0x5c00b800, 0x1c01f000,
- 0x4803c857, 0x4c580000, 0x40003000, 0x42002000,
- 0x000007f0, 0x4200b000, 0x00000010, 0x83ac7400,
- 0x000007f0, 0x50380000, 0x80026d40, 0x04000006,
- 0x59340002, 0x82000500, 0x00ffffff, 0x80180580,
- 0x04000010, 0x80102000, 0x80387000, 0x8058b040,
- 0x040207f5, 0x82100480, 0x00000800, 0x42002000,
- 0x00000000, 0x4200b000, 0x000007f0, 0x41ac7000,
- 0x040217ed, 0x82000540, 0x00000001, 0x0401f002,
- 0x40128800, 0x5c00b000, 0x1c01f000, 0x59a8021b,
- 0x8c00050e, 0x04000004, 0x8c000502, 0x04000003,
- 0x80000580, 0x1c01f000, 0x82000540, 0x00000001,
- 0x0401f7fd, 0x59300c07, 0x82040580, 0x00000002,
- 0x04000003, 0x82040580, 0x00000005, 0x1c01f000,
- 0x59c80000, 0x84000558, 0x84000512, 0x48039000,
- 0x1c01f000, 0x82140500, 0x0000f000, 0x04000006,
- 0x82000c80, 0x00002000, 0x0402100a, 0x80000580,
- 0x1c01f000, 0x59cc0400, 0x82000500, 0x0000ff00,
- 0x82000580, 0x00008100, 0x040007fa, 0x0401f014,
- 0x4817c857, 0x82140500, 0x000003ff, 0x04020007,
- 0x59cc0400, 0x82000500, 0x0000ff00, 0x82000580,
- 0x00008100, 0x0402000a, 0x42000000, 0x0010bd77,
- 0x0201f800, 0x0010ae10, 0x0401fe93, 0x4803c856,
- 0x82000540, 0x00000001, 0x0401f7e6, 0x41780000,
- 0x0401f7e4, 0x0201f800, 0x00104755, 0x04000010,
- 0x59c400a4, 0x4803c857, 0x82000500, 0x0000000f,
- 0x82000580, 0x0000000a, 0x04020009, 0x497b505a,
- 0x59c400a3, 0x82000540, 0x00080000, 0x480388a3,
- 0x82000500, 0xfff7ffff, 0x480388a3, 0x4817c856,
- 0x0201f000, 0x0010ad55, 0x4a032824, 0x000003e8,
- 0x4a032802, 0x0010f694, 0x4a032800, 0x00000000,
- 0x4a032808, 0x001066e2, 0x42000000, 0x00000005,
- 0x83947c00, 0x00000009, 0x49787801, 0x4a007804,
- 0x001065a5, 0x823c7c00, 0x00000005, 0x80000040,
- 0x040207fa, 0x4a032823, 0xffff0000, 0x4201d000,
- 0x00000064, 0x0401fa0f, 0x4201d000, 0x000186a0,
- 0x0401f21e, 0x00000000, 0x00000005, 0x0000000a,
- 0x0000000f, 0x00000014, 0x4d300000, 0x4d2c0000,
- 0x4d340000, 0x4d400000, 0x4cfc0000, 0x4d380000,
- 0x4d3c0000, 0x4d440000, 0x4d4c0000, 0x4d480000,
- 0x4c5c0000, 0x4c600000, 0x4c640000, 0x4cc80000,
- 0x4ccc0000, 0x0201f800, 0x00020814, 0x5c019800,
- 0x5c019000, 0x5c00c800, 0x5c00c000, 0x5c00b800,
- 0x5c029000, 0x5c029800, 0x5c028800, 0x5c027800,
- 0x5c027000, 0x5c01f800, 0x5c028000, 0x5c026800,
- 0x5c025800, 0x5c026000, 0x1c01f000, 0x59940031,
- 0x59940832, 0x80040480, 0x48032832, 0x04001002,
- 0x04020034, 0x59bc00e4, 0x8c000530, 0x04000009,
- 0x4a030000, 0x00000000, 0x4803c856, 0x4a0378e4,
- 0x02000000, 0x4a032832, 0x000004b0, 0x0401f029,
- 0x42000800, 0x00000100, 0x80040840, 0x040007f5,
- 0x0201f800, 0x0010af26, 0x040007fc, 0x0201f800,
- 0x001061b2, 0x4df00000, 0x4d180000, 0x42023000,
- 0x00000005, 0x0201f800, 0x00100d88, 0x5c023000,
- 0x0201f800, 0x00100636, 0x42000800, 0x00007a00,
- 0x58040015, 0x82000500, 0xffff8fff, 0x59a81075,
- 0x80080540, 0x48000815, 0x4a030000, 0x00000000,
- 0x497b2832, 0x4a0378e4, 0x02800000, 0x0201f800,
- 0x00100de6, 0x5c03e000, 0x02000800, 0x0010619f,
- 0x42000000, 0x0010bdb0, 0x0201f800, 0x0010ae10,
- 0x1c01f000, 0x59940004, 0x80000540, 0x0402000a,
- 0x5994002f, 0x80040400, 0x02001800, 0x0010032d,
- 0x48032804, 0x480b2805, 0x4a032803, 0x0000000a,
- 0x80000580, 0x1c01f000, 0x59940029, 0x80000540,
- 0x0402000a, 0x5994002f, 0x80040400, 0x02001800,
- 0x0010032d, 0x48032829, 0x480b282a, 0x4a032828,
- 0x00000001, 0x80000580, 0x1c01f000, 0x40680800,
- 0x406c1000, 0x5994002c, 0x80000540, 0x0402000a,
- 0x5994002f, 0x80040400, 0x02001800, 0x0010032d,
- 0x4803282c, 0x480b282d, 0x4a03282b, 0x0000000a,
- 0x80000580, 0x1c01f000, 0x4c000000, 0x59940005,
- 0x80080580, 0x04020003, 0x497b2804, 0x497b2805,
- 0x5c000000, 0x1c01f000, 0x40681000, 0x0401fff7,
- 0x1c01f000, 0x4c000000, 0x5994002a, 0x80080580,
- 0x04020003, 0x497b2829, 0x497b282a, 0x5c000000,
- 0x1c01f000, 0x4c000000, 0x5994002d, 0x80080580,
- 0x04020003, 0x497b282c, 0x497b282d, 0x5c000000,
- 0x1c01f000, 0x4937c857, 0x48ebc857, 0x59340203,
- 0x80e80480, 0x04001002, 0x48ea6a03, 0x1c01f000,
- 0x4d440000, 0x42007800, 0x00000010, 0x59968801,
- 0x0201f800, 0x00020319, 0x04020056, 0x59341a03,
- 0x800c1840, 0x04001017, 0x59940031, 0x800c0480,
- 0x04000003, 0x48026a03, 0x04021012, 0x5934000f,
- 0x497a6a03, 0x80000540, 0x0400004a, 0x5934000b,
- 0x80001120, 0x82000500, 0x0000ffff, 0x80080480,
- 0x04001004, 0x4a026a03, 0x00000001, 0x0401f005,
- 0x4c3c0000, 0x0201f800, 0x00020327, 0x5c007800,
- 0x4d2c0000, 0x41781800, 0x5934000f, 0x80025d40,
- 0x04000037, 0x592c0004, 0x80000d40, 0x04000006,
- 0x59940031, 0x80040480, 0x48025804, 0x04001007,
- 0x04000006, 0x412c1800, 0x592c0000, 0x80025d40,
- 0x0400002b, 0x0401f7f4, 0x592c2000, 0x497a5800,
- 0x800c19c0, 0x04020009, 0x59340010, 0x812c0580,
- 0x04020004, 0x497a680f, 0x497a6810, 0x0401f008,
- 0x4812680f, 0x0401f006, 0x48101800, 0x59340010,
- 0x812c0580, 0x04020002, 0x480e6810, 0x592c0205,
- 0x82000500, 0x000000ff, 0x82000580, 0x00000012,
- 0x04020004, 0x4a025a07, 0x0000000b, 0x0401f008,
- 0x4a025a05, 0x00000103, 0x4a025a07, 0x00000006,
- 0x497a580a, 0x4a025c07, 0x0000ffff, 0x4c0c0000,
- 0x4c100000, 0x0201f800, 0x000203ab, 0x5c002000,
- 0x5c001800, 0x40100000, 0x0401f7d5, 0x5c025800,
- 0x81468800, 0x83440480, 0x00000800, 0x04021007,
- 0x803c7840, 0x040207a3, 0x49472801, 0x5c028800,
- 0x5c03e000, 0x1c01f000, 0x4a032800, 0x00000002,
- 0x497b2801, 0x0401f7fa, 0x42007800, 0x00000010,
- 0x59966002, 0x59300205, 0x80000d40, 0x04000006,
- 0x59940031, 0x80040480, 0x48026205, 0x0400102d,
- 0x0400002c, 0x59300006, 0x80000d40, 0x04000014,
- 0x59b800e4, 0x8c000524, 0x04020011, 0x4a0370e4,
- 0x00030000, 0x40000000, 0x59b800e4, 0x8c000524,
- 0x04000004, 0x4a0370e4, 0x00020000, 0x0401f008,
- 0x59940031, 0x80040480, 0x48026006, 0x4a0370e4,
- 0x00020000, 0x0400101c, 0x0400001b, 0x83326400,
- 0x00000024, 0x49332802, 0x41540000, 0x81300480,
- 0x04021005, 0x803c7840, 0x040207db, 0x5c03e000,
- 0x1c01f000, 0x59940030, 0x48032831, 0x4a032802,
- 0x0010f694, 0x497b2830, 0x80000540, 0x0400000f,
- 0x4a032800, 0x00000001, 0x5c03e000, 0x1c01f000,
- 0x4c3c0000, 0x0201f800, 0x00108b30, 0x5c007800,
- 0x0401f7d1, 0x4c3c0000, 0x0201f800, 0x001086e5,
- 0x5c007800, 0x0401f7e2, 0x4a032800, 0x00000000,
- 0x5c03e000, 0x1c01f000, 0x59a80859, 0x8c040d30,
- 0x04020029, 0x8c040d32, 0x0400000f, 0x59a80050,
- 0x81640480, 0x04001019, 0x59a8000b, 0x81500580,
- 0x04000005, 0x59a8004e, 0x59a8104d, 0x80080580,
- 0x04020012, 0x900411c0, 0x82081500, 0x00007000,
- 0x0401f012, 0x82040500, 0x0000001f, 0x04000016,
- 0x80040840, 0x82040500, 0x0000001f, 0x04000003,
- 0x48075059, 0x0401f010, 0x900401c0, 0x82000500,
- 0x0000001f, 0x80040d40, 0x900401c0, 0x80040580,
- 0x82001500, 0x00007000, 0x82040500, 0xffff8fff,
- 0x80080540, 0x48035059, 0x80081114, 0x0201f800,
- 0x00100462, 0x1c01f000, 0x4a032807, 0x000007d0,
- 0x4a032806, 0x0000000a, 0x1c01f000, 0x42000800,
- 0x00000004, 0x83180480, 0x00000005, 0x02021800,
- 0x0010032d, 0x83947c00, 0x00000009, 0x83180400,
- 0x001057e9, 0x50000000, 0x803c7c00, 0x4a007801,
- 0x000001f4, 0x48047802, 0x4a007800, 0x0000000a,
- 0x49787803, 0x1c01f000, 0x83180480, 0x00000005,
- 0x02021800, 0x0010032d, 0x83947c00, 0x00000009,
- 0x83180400, 0x001057e9, 0x50000000, 0x803c7c00,
- 0x583c0002, 0x80000040, 0x48007802, 0x04000005,
- 0x4a007801, 0x000001f4, 0x4a007800, 0x0000000a,
- 0x1c01f000, 0x83180480, 0x00000005, 0x02021800,
- 0x0010032d, 0x83947c00, 0x00000009, 0x83180400,
- 0x001057e9, 0x50000000, 0x803c7c00, 0x49787801,
- 0x1c01f000, 0x40680800, 0x406c1000, 0x0401f802,
- 0x1c01f000, 0x4807c857, 0x480bc857, 0x5994002f,
- 0x80040400, 0x02001800, 0x0010032d, 0x48032804,
- 0x480b2805, 0x4a032803, 0x0000000a, 0x1c01f000,
- 0x4807c857, 0x480bc857, 0x5994002f, 0x80040400,
- 0x02001800, 0x0010032d, 0x48032826, 0x480b2827,
- 0x4a032825, 0x0000000a, 0x1c01f000, 0x4c000000,
- 0x59940027, 0x80080580, 0x04020003, 0x48032826,
- 0x48032827, 0x5c000000, 0x1c01f000, 0x4807c857,
- 0x480bc857, 0x5994002f, 0x80040400, 0x02001800,
- 0x0010032d, 0x4803282c, 0x480b282d, 0x4a03282b,
- 0x0000000a, 0x1c01f000, 0x80e9d1c0, 0x0400000e,
- 0x0401f832, 0x04025000, 0x4203e000, 0x80000000,
- 0x40e81000, 0x41780800, 0x42000000, 0x00000064,
- 0x0201f800, 0x0010600e, 0x5994002e, 0x80080400,
- 0x4803282e, 0x1c01f000, 0x42001000, 0x00104671,
- 0x0401fe8e, 0x42001000, 0x00104660, 0x0401ffd8,
- 0x42001000, 0x0010392f, 0x0401fe88, 0x42001000,
- 0x001039b1, 0x0401fe85, 0x42001000, 0x00103908,
- 0x0401fe82, 0x42001000, 0x001039e8, 0x0401f692,
- 0x4203e000, 0x70000000, 0x4203e000, 0xb0300000,
- 0x40ebf800, 0x42000000, 0x0000003c, 0x04004004,
- 0x80000040, 0x040207fe, 0x0401f007, 0x4203e000,
- 0x70000000, 0x42000000, 0x0010bd38, 0x0201f800,
- 0x0010ae10, 0x1c01f000, 0x4203e000, 0x80000000,
- 0x4203e000, 0xb0400000, 0x40ebf800, 0x42000000,
- 0x0000003c, 0x04005004, 0x80000040, 0x040207fe,
- 0x0401f007, 0x4203e000, 0x80000000, 0x42000000,
- 0x0010bd39, 0x0201f800, 0x0010ae10, 0x1c01f000,
- 0x59a8080d, 0x59a80251, 0x80040480, 0x599c0a02,
- 0x800409c0, 0x04020002, 0x80040800, 0x80041480,
- 0x04001002, 0x40000800, 0x4807504f, 0x59a8100d,
- 0x40040000, 0x800acc80, 0x4967500d, 0x49675050,
- 0x59aaa80b, 0x41640800, 0x42001000, 0x00000024,
- 0x0201f800, 0x00105fef, 0x8206a400, 0x0010f694,
- 0x4953504c, 0x4152b000, 0x42006000, 0x0010c2e7,
- 0x4a006005, 0x0000012c, 0x4a006006, 0xda10da10,
- 0x4a006009, 0x00000012, 0x4a00600a, 0x0010c2e7,
- 0x4a00600b, 0x00100e35, 0x599c0014, 0x48006012,
- 0x599c0015, 0x48006013, 0x42006000, 0x0010f604,
- 0x4a006203, 0x00000008, 0x4a006407, 0x00000006,
- 0x4a006002, 0xffff0000, 0x4a006009, 0x0010c2e7,
- 0x4a006015, 0x0010c2e7, 0x599c0014, 0x48006016,
- 0x599c0015, 0x48006017, 0x599c0413, 0x48006018,
- 0x49506019, 0x4954601a, 0x59a8004f, 0x4800601b,
- 0x4a00601c, 0x0010b8cc, 0x4a00601d, 0x0010b8cd,
- 0x4a00601e, 0x0010b8ce, 0x42000000, 0xb0000000,
- 0x42000800, 0x0010f604, 0x0201f800, 0x00020105,
- 0x1c01f000, 0x82000d00, 0x000000c0, 0x04000004,
- 0x82040d80, 0x000000c0, 0x04020055, 0x82000d00,
- 0x00002020, 0x59300415, 0x84000512, 0x82040d80,
- 0x00002020, 0x0400000b, 0x8c000514, 0x0402000f,
- 0x48026415, 0x813e79c0, 0x02020000, 0x0002094c,
- 0x42027000, 0x00000043, 0x0201f000, 0x00020a34,
- 0x5932680a, 0x59340a00, 0x8c040d0a, 0x040007f3,
- 0x84000552, 0x0401f7f1, 0x84000514, 0x592c080e,
- 0x48066016, 0x0401f7ef, 0x5932680a, 0x59340a00,
- 0x8c040d0a, 0x02000000, 0x0002095f, 0x59300c15,
- 0x84040d52, 0x48066415, 0x0201f000, 0x0002095f,
- 0x0201f800, 0x00020111, 0x813e79c0, 0x02020000,
- 0x0002094c, 0x0201f000, 0x0002096d, 0x8c00051e,
- 0x02000000, 0x00020979, 0x82000d00, 0x00002020,
- 0x82040d80, 0x00002020, 0x04000014, 0x82000500,
- 0x000000c0, 0x82000d80, 0x00000080, 0x04000008,
- 0x813e79c0, 0x02020000, 0x0002094c, 0x42027000,
- 0x00000041, 0x0201f000, 0x00020a34, 0x813e79c0,
- 0x02020000, 0x0002094c, 0x42027000, 0x00000043,
- 0x0201f000, 0x00020a34, 0x5932680a, 0x59340a00,
- 0x8c040d0a, 0x040007ea, 0x59300c15, 0x84040d52,
- 0x48066415, 0x0401f7e6, 0x492fc857, 0x42000800,
- 0x00000006, 0x0201f000, 0x00020974, 0x492fc857,
- 0x42000800, 0x00000004, 0x0201f000, 0x00020974,
- 0x4807c856, 0x59a80069, 0x800409c0, 0x04000003,
- 0x80080540, 0x0401f002, 0x80080500, 0x48035069,
- 0x1c01f000, 0x4a030800, 0x00000000, 0x4a030802,
- 0x00000001, 0x497b0803, 0x497b0804, 0x1c01f000,
- 0x59840002, 0x8c000500, 0x04000004, 0x84000500,
- 0x4a030800, 0x00000001, 0x84000544, 0x84000506,
- 0x48030802, 0x82000d00, 0x0fffffff, 0x42000000,
- 0x90000000, 0x0201f800, 0x00100897, 0x59a80050,
- 0x82000480, 0x00000007, 0x48035050, 0x80000580,
- 0x42000800, 0x0010b96b, 0x48000800, 0x48000801,
- 0x1c01f000, 0x59a80050, 0x82000400, 0x00000007,
- 0x48035050, 0x1c01f000, 0x83640480, 0x00000008,
- 0x0400101b, 0x58c80a03, 0x80000580, 0x82000400,
- 0x00000008, 0x80040840, 0x040207fd, 0x815c0480,
- 0x04001013, 0x4200b000, 0x00000007, 0x0201f800,
- 0x000209ee, 0x4a026203, 0x00000004, 0x4a026407,
- 0x00000009, 0x4a026203, 0x00000004, 0x4a026008,
- 0x00000101, 0x0401f809, 0x0401f880, 0x8058b040,
- 0x040207f3, 0x80000580, 0x1c01f000, 0x82000540,
- 0x00000001, 0x0401f7fd, 0x0201f800, 0x0010056f,
- 0x492e6009, 0x58c80a03, 0x4a025a05, 0x0000002c,
- 0x497a5800, 0x497a5801, 0x497a5c05, 0x497a5c07,
- 0x497a5806, 0x4a025a09, 0x00000005, 0x4a025a08,
- 0x00000002, 0x58c80201, 0x48025c05, 0x58c80202,
- 0x48025c08, 0x58c80204, 0x48025c09, 0x4a02580e,
- 0x0000ffff, 0x80040840, 0x0400000c, 0x412c2000,
- 0x0201f800, 0x0010056f, 0x4a025a05, 0x0000000a,
- 0x497a5c05, 0x48125800, 0x492c2001, 0x412c2000,
- 0x80040840, 0x040207f7, 0x1c01f000, 0x4d7c0000,
- 0x4202f800, 0x00000010, 0x4df00000, 0x4203e000,
- 0x50000000, 0x59847803, 0x803c79c0, 0x0400001e,
- 0x4c5c0000, 0x583cb809, 0x585c3409, 0x801831c0,
- 0x0400000b, 0x0401f84a, 0x04000016, 0x42001000,
- 0x0010b96b, 0x0401f87f, 0x04000012, 0x0201f800,
- 0x0010055a, 0x0400000f, 0x492cb806, 0x585c0006,
- 0x80000540, 0x02000800, 0x0010032d, 0x0401f830,
- 0x585c5409, 0x0401f80b, 0x5c00b800, 0x5c03e000,
- 0x817ef840, 0x040207e1, 0x5c02f800, 0x1c01f000,
- 0x5c00b800, 0x5c03e000, 0x5c02f800, 0x1c01f000,
- 0x4803c856, 0x405c6000, 0x802851c0, 0x04000018,
- 0x585c0205, 0x82000d00, 0x0000000f, 0x82040c00,
- 0x00100e3a, 0x50044000, 0x4c600000, 0x4c640000,
- 0x4d040000, 0x4020c000, 0x40320800, 0x5984c804,
- 0x4c280000, 0x0401f93b, 0x5c005000, 0x40604000,
- 0x41046000, 0x0201f800, 0x00100e18, 0x040207f6,
- 0x5c020800, 0x5c00c800, 0x5c00c000, 0x58c80204,
- 0x4800bc09, 0x0201f800, 0x00020111, 0x4a026008,
- 0x00000101, 0x497a600a, 0x0401f055, 0x4803c856,
- 0x59840003, 0x80026540, 0x04000003, 0x59300000,
- 0x48030803, 0x1c01f000, 0x4803c856, 0x59840003,
- 0x48026000, 0x49330803, 0x1c01f000, 0x58cc0805,
- 0x40180000, 0x80040480, 0x0400100d, 0x82cc0580,
- 0x0010b960, 0x02020800, 0x0010032d, 0x58c80205,
- 0x80040480, 0x0400101d, 0x82000540, 0x00000001,
- 0x1c01f000, 0x80003580, 0x0401f7fe, 0x82cc0580,
- 0x0010b960, 0x02020800, 0x0010032d, 0x58c80400,
- 0x8c000504, 0x040007f8, 0x58c8040b, 0x8c00051e,
- 0x040007f5, 0x8c000500, 0x040207f3, 0x84000540,
- 0x4801940b, 0x42000000, 0x0010bcff, 0x0201f800,
- 0x0010ae10, 0x42001000, 0x00008026, 0x0201f800,
- 0x001031f5, 0x0401f7e8, 0x58c8040b, 0x8c00051e,
- 0x040007e2, 0x8c000502, 0x040207e0, 0x84000542,
- 0x4801940b, 0x42000000, 0x0010bcfe, 0x0201f800,
- 0x0010ae10, 0x42001000, 0x00008025, 0x42001800,
- 0x00000000, 0x0201f800, 0x001031f5, 0x0401f7d3,
- 0x4803c856, 0x58080000, 0x42001800, 0x00000007,
- 0x58080801, 0x80040480, 0x04020004, 0x400c0000,
- 0x80000540, 0x0401f005, 0x04001003, 0x800c0480,
- 0x0401f002, 0x80000080, 0x1c01f000, 0x4803c856,
- 0x59300009, 0x80000d40, 0x02000800, 0x0010032d,
- 0x58040006, 0x80000540, 0x02000800, 0x0010032d,
- 0x59300008, 0x82000500, 0x00000101, 0x82000580,
- 0x00000101, 0x02020800, 0x0010032d, 0x42001000,
- 0x0010b96b, 0x58080801, 0x82040400, 0x0010b96d,
- 0x497a6415, 0x4a026016, 0x0000ffff, 0x45300000,
- 0x80040800, 0x82040480, 0x00000008, 0x04001002,
- 0x80000d80, 0x48041001, 0x82040400, 0x0010b96d,
- 0x45780000, 0x1c01f000, 0x4933c857, 0x59300809,
- 0x800409c0, 0x02000800, 0x0010032d, 0x4d2c0000,
- 0x58065806, 0x812e59c0, 0x02020800, 0x00100580,
- 0x49780806, 0x40065800, 0x0201f800, 0x00100589,
- 0x5c025800, 0x4d300000, 0x0201f800, 0x00020a10,
- 0x5c026000, 0x1c01f000, 0x0401f807, 0x42018800,
- 0x00000001, 0x04000003, 0x42018800, 0x00000000,
- 0x1c01f000, 0x59300407, 0x82000580, 0x00000009,
- 0x04020006, 0x59300008, 0x8c000510, 0x04000003,
- 0x80000580, 0x1c01f000, 0x82000540, 0x00000001,
- 0x1c01f000, 0x59840802, 0x8c040d04, 0x1c01f000,
- 0x4803c856, 0x59840802, 0x84040d04, 0x84040d40,
- 0x4a030800, 0x00000000, 0x48070802, 0x82040d00,
- 0x0fffffff, 0x42000000, 0x90000000, 0x0201f000,
- 0x00100897, 0x4807c857, 0x4805980a, 0x49799801,
- 0x49799803, 0x49799806, 0x49799807, 0x49799808,
- 0x49799805, 0x49799809, 0x0401f8c8, 0x0400000a,
- 0x0401f8ea, 0x04000008, 0x48359800, 0x48359802,
- 0x48359806, 0x4a019804, 0x00000001, 0x4a019807,
- 0x00000006, 0x1c01f000, 0x4807c857, 0x58cc1007,
- 0x40040000, 0x80080480, 0x04021020, 0x4c040000,
- 0x4c080000, 0x0401f8d9, 0x5c001000, 0x5c000800,
- 0x0400001c, 0x58cc0006, 0x80006540, 0x0402000b,
- 0x48359800, 0x48359802, 0x48359806, 0x49799801,
- 0x49799803, 0x49786801, 0x49786800, 0x49799804,
- 0x49799807, 0x0401f005, 0x48306801, 0x48346000,
- 0x48359806, 0x49786800, 0x58cc0004, 0x58cc1007,
- 0x80000000, 0x82081400, 0x00000006, 0x48019804,
- 0x48099807, 0x0401f7df, 0x80000580, 0x1c01f000,
- 0x82000540, 0x00000001, 0x1c01f000, 0x480bc857,
- 0x4c500000, 0x4c540000, 0x4c580000, 0x40083000,
- 0x58cc0801, 0x82040480, 0x00000006, 0x02021800,
- 0x0010032d, 0x82040400, 0x00105d57, 0x50000000,
- 0x58cca800, 0x8054ac00, 0x42001800, 0x00000006,
- 0x40040000, 0x800c0480, 0x80082480, 0x04021002,
- 0x40080000, 0x8000b0c2, 0x8058b400, 0x5450a800,
- 0x8050a000, 0x8054a800, 0x8058b040, 0x040207fc,
- 0x40001000, 0x58cc2805, 0x58cc0807, 0x58cc2001,
- 0x80142c00, 0x80040c80, 0x80102400, 0x48159805,
- 0x48059807, 0x48119801, 0x82100580, 0x00000006,
- 0x0400000c, 0x48119801, 0x40080000, 0x80181480,
- 0x40083000, 0x04000003, 0x040217d6, 0x80000580,
- 0x5c00b000, 0x5c00a800, 0x5c00a000, 0x1c01f000,
- 0x58cc0800, 0x800409c0, 0x02000800, 0x0010032d,
- 0x58040800, 0x48059800, 0x41782000, 0x0401f7ee,
- 0x0401f812, 0x50600000, 0x81041c00, 0x585c0205,
- 0x4803c857, 0x82000580, 0x0000002c, 0x02020800,
- 0x0010032d, 0x58040202, 0x800000e0, 0x80640540,
- 0x48001802, 0x58040000, 0x48001800, 0x58040001,
- 0x48001801, 0x1c01f000, 0x4807c856, 0x58cc0005,
- 0x80000040, 0x02001800, 0x0010032d, 0x48019805,
- 0x58cc1003, 0x82080480, 0x00000006, 0x02021800,
- 0x0010032d, 0x82080400, 0x00105d57, 0x50000000,
- 0x58cc0802, 0x80040c00, 0x80081000, 0x82080480,
- 0x00000006, 0x0402000f, 0x58cc2002, 0x58100000,
- 0x80006d40, 0x04000009, 0x4c340000, 0x0401f858,
- 0x5c006800, 0x49786801, 0x48359802, 0x58cc0004,
- 0x80000040, 0x48019804, 0x49799803, 0x0401f002,
- 0x48099803, 0x1c01f000, 0x4807c856, 0x41781800,
- 0x58c80201, 0x80000540, 0x04000002, 0x800c1800,
- 0x58c80c01, 0x80040c80, 0x0400100a, 0x04000009,
- 0x800c1800, 0x58c80202, 0x80041480, 0x04001005,
- 0x04000004, 0x800c1800, 0x40080800, 0x0401f7fb,
- 0x480d9204, 0x400c0000, 0x42002000, 0x00000001,
- 0x80000040, 0x04000007, 0x04001006, 0x80102000,
- 0x82000480, 0x00000005, 0x04000002, 0x040217fc,
- 0x48119203, 0x1c01f000, 0x4807c856, 0x4d2c0000,
- 0x58cc000a, 0x80000540, 0x02000800, 0x0010032d,
- 0x82002400, 0x00000006, 0x0201f800, 0x0010055a,
- 0x04000012, 0x492d9809, 0x497a5800, 0x497a5801,
- 0x0201f800, 0x0010055a, 0x0400000c, 0x58cc0009,
- 0x48025800, 0x497a5801, 0x492d9809, 0x82102480,
- 0x00000006, 0x040217f7, 0x82000540, 0x00000001,
- 0x5c025800, 0x1c01f000, 0x58cc0009, 0x80025d40,
- 0x040007fc, 0x592c2000, 0x0201f800, 0x00100580,
- 0x40100000, 0x0401f7fa, 0x58cc0009, 0x48cfc857,
- 0x80006d40, 0x04000005, 0x50340000, 0x48019809,
- 0x49786800, 0x49786801, 0x1c01f000, 0x4813c857,
- 0x58cc0009, 0x48002000, 0x48119809, 0x1c01f000,
- 0x4807c856, 0x4d2c0000, 0x58cc0009, 0x80025d40,
- 0x04000007, 0x592c0000, 0x4c000000, 0x0201f800,
- 0x00100580, 0x5c000000, 0x0401f7f9, 0x5c025800,
- 0x1c01f000, 0x4807c856, 0x4d2c0000, 0x58cc0002,
- 0x80025d40, 0x04000007, 0x592c0000, 0x4c000000,
- 0x0201f800, 0x00100580, 0x5c000000, 0x0401f7f9,
- 0x49799800, 0x49799802, 0x49799801, 0x49799803,
- 0x49799806, 0x49799807, 0x49799808, 0x49799809,
- 0x4979980a, 0x5c025800, 0x1c01f000, 0x00000003,
- 0x00000006, 0x00000009, 0x0000000c, 0x0000000f,
- 0x00000012, 0x4803c856, 0x0401f858, 0x4a00c205,
- 0x0000003c, 0x5930100a, 0x82080580, 0x0010b976,
- 0x04000013, 0x58080802, 0x82040d00, 0x00ffffff,
- 0x58080403, 0x4804c006, 0x4800c407, 0x4a00c208,
- 0x00000003, 0x59300812, 0x585c0405, 0x4978c207,
- 0x4804c408, 0x80000540, 0x0400000d, 0x58600207,
- 0x84000540, 0x4800c207, 0x0401f009, 0x585c080b,
- 0x82040d00, 0x00ffffff, 0x4804c006, 0x4a00c407,
- 0x000007ff, 0x4978c208, 0x0401f7ef, 0x82603c00,
- 0x00000009, 0x58605405, 0x40282000, 0x405c6000,
- 0x585c0a05, 0x82040d00, 0x0000000f, 0x82040c00,
- 0x00100e3a, 0x50044000, 0x80004d80, 0x50200000,
- 0x80307400, 0x58380402, 0x8c244d00, 0x04020003,
- 0x48003a00, 0x0401f003, 0x48003c00, 0x801c3800,
- 0x80244800, 0x80102040, 0x04000006, 0x0201f800,
- 0x00100e18, 0x02000800, 0x0010032d, 0x0401f7f0,
- 0x1c01f000, 0x4803c856, 0x4d340000, 0x5930000a,
- 0x80026d40, 0x02000800, 0x0010032d, 0x59340212,
- 0x82000500, 0x0000ff00, 0x0402000e, 0x59840000,
- 0x80000540, 0x0400000b, 0x836c0580, 0x00000003,
- 0x04020008, 0x59341c03, 0x42002000, 0x00000004,
- 0x42003000, 0x00000004, 0x0201f800, 0x0010326a,
- 0x5c026800, 0x1c01f000, 0x4803c856, 0x80001580,
- 0x58c80c01, 0x59300012, 0x80040c80, 0x48066012,
- 0x58c80201, 0x80000540, 0x04000005, 0x80081000,
- 0x80040c80, 0x04001007, 0x04000006, 0x58c80202,
- 0x80081000, 0x80040c80, 0x04001002, 0x040207fd,
- 0x4808bc09, 0x4808c405, 0x1c01f000, 0x4803c856,
- 0x4a0370e5, 0x00020000, 0x59b800e5, 0x8c000524,
- 0x040207fc, 0x4a0370e5, 0x00030000, 0x40000000,
- 0x40000000, 0x59b800e5, 0x8c000524, 0x040207f5,
- 0x5934000e, 0x80006d40, 0x04000010, 0x81300580,
- 0x04020004, 0x58340000, 0x4802680e, 0x0401f00a,
- 0x40347800, 0x58340000, 0x80006d40, 0x02000800,
- 0x0010032d, 0x81300580, 0x040207fa, 0x58340000,
- 0x48007800, 0x497a6000, 0x4a0370e5, 0x00020000,
- 0x1c01f000, 0x4803c856, 0x4d300000, 0x4d2c0000,
- 0x42000800, 0x000003ff, 0x4a0370e5, 0x00020000,
- 0x59b800e5, 0x8c000524, 0x04000005, 0x80040840,
- 0x040207fa, 0x0201f800, 0x0010032d, 0x4a0370e5,
- 0x00030000, 0x40000000, 0x40000000, 0x59b800e5,
- 0x8c000524, 0x040207f1, 0x5934000e, 0x80026540,
- 0x0400000e, 0x4933c857, 0x59300000, 0x4802680e,
- 0x4a026203, 0x00000004, 0x497a6006, 0x497a600a,
- 0x4a026008, 0x00000101, 0x59325809, 0x497a5c09,
- 0x0401fd7a, 0x0401f7f1, 0x4a0370e5, 0x00020000,
- 0x5c025800, 0x5c026000, 0x1c01f000, 0x4803c856,
- 0x4c000000, 0x0201f800, 0x001054fb, 0x04020011,
- 0x0201f800, 0x00103de1, 0x02020800, 0x0010032d,
- 0x5c000000, 0x48026802, 0x0201f800, 0x00107188,
- 0x04000009, 0x4936600a, 0x4a026407, 0x00000001,
- 0x42027000, 0x00000001, 0x0201f000, 0x00020a34,
- 0x5c000000, 0x1c01f000, 0x59300203, 0x82000c80,
- 0x0000000e, 0x02021800, 0x0010032d, 0x4803c857,
- 0x0c01f001, 0x00105e43, 0x00105e43, 0x00105e43,
- 0x00105e45, 0x00105eb2, 0x00105e43, 0x00105e43,
- 0x00105f04, 0x00105f05, 0x00105e43, 0x00105e43,
- 0x00105e43, 0x00105e43, 0x00105e43, 0x0201f800,
- 0x0010032d, 0x493bc857, 0x83380480, 0x00000050,
- 0x02021800, 0x0010032d, 0x83380480, 0x00000049,
- 0x02001800, 0x0010032d, 0x0c01f001, 0x00105e58,
- 0x00105e89, 0x00105e56, 0x00105e56, 0x00105e56,
- 0x00105e56, 0x00105e97, 0x0201f800, 0x0010032d,
- 0x4d2c0000, 0x59325809, 0x592c0207, 0x48025c07,
- 0x4a025a07, 0x00000000, 0x4c5c0000, 0x592cbc0b,
- 0x592c0000, 0x48026009, 0x0201f800, 0x000203ab,
- 0x59300c15, 0x59300009, 0x80000540, 0x0400000b,
- 0x8c040d18, 0x04020014, 0x4a026203, 0x00000007,
- 0x42027000, 0x00000043, 0x497a6415, 0x5c00b800,
- 0x5c025800, 0x0401f093, 0x8c040d18, 0x04020010,
- 0x8c5cbd08, 0x04020011, 0x4a026203, 0x00000007,
- 0x497a6415, 0x497a6006, 0x5c00b800, 0x5c025800,
- 0x1c01f000, 0x4d400000, 0x59325809, 0x42028000,
- 0x00000005, 0x0401f922, 0x5c028000, 0x0201f800,
- 0x00107144, 0x0401f7f5, 0x0201f800, 0x00020a10,
- 0x0401f7f2, 0x0401fa59, 0x4d2c0000, 0x59325809,
- 0x0201f800, 0x00108953, 0x04000006, 0x4d400000,
- 0x42028000, 0x00000001, 0x0401f911, 0x5c028000,
- 0x5c025800, 0x0201f000, 0x00020a10, 0x0401fa4b,
- 0x4d3c0000, 0x417a7800, 0x0201f800, 0x0010e06f,
- 0x5c027800, 0x42003000, 0x00000014, 0x0201f800,
- 0x0010a5a1, 0x42000000, 0x0010bd1d, 0x0201f800,
- 0x0010ae10, 0x4d2c0000, 0x59325809, 0x0201f800,
- 0x00108953, 0x04000006, 0x4d400000, 0x42028000,
- 0x00000029, 0x0401f8f6, 0x5c028000, 0x5c025800,
- 0x0201f000, 0x00020a10, 0x493bc857, 0x497a6006,
- 0x83380480, 0x00000054, 0x02021800, 0x0010032d,
- 0x83380480, 0x00000047, 0x02001800, 0x0010032d,
- 0x0c01f001, 0x00105f03, 0x00105ecc, 0x00105eca,
- 0x00105eca, 0x00105eca, 0x00105eca, 0x00105eca,
- 0x00105eca, 0x00105eca, 0x00105eca, 0x00105eca,
- 0x00105eca, 0x00105ed0, 0x0201f800, 0x0010032d,
- 0x59300012, 0x82000500, 0xffff0000, 0x04020034,
- 0x59840802, 0x8c040d04, 0x04000025, 0x5930000a,
- 0x80026d40, 0x0400001f, 0x4c5c0000, 0x4c600000,
- 0x497a6006, 0x5930b809, 0x585c0006, 0x8000c540,
- 0x02000800, 0x0010032d, 0x0401fe7f, 0x40625800,
- 0x0201f800, 0x000203af, 0x4978b806, 0x0401fee8,
- 0x497a600a, 0x585c3409, 0x0401fca9, 0x0400000e,
- 0x42001000, 0x0010b96b, 0x0401fcde, 0x0400000a,
- 0x0201f800, 0x0010056f, 0x04000007, 0x492cb806,
- 0x585c5409, 0x0401fc6f, 0x5c00c000, 0x5c00b800,
- 0x1c01f000, 0x0401fc95, 0x0401f7fc, 0x8c040d06,
- 0x040207fc, 0x5930000a, 0x80026d40, 0x04000006,
- 0x5934000e, 0x80000540, 0x02020800, 0x0010032d,
- 0x497a600a, 0x0401fcf9, 0x0401f7f2, 0x0401f088,
- 0x4803c856, 0x4803c856, 0x83380580, 0x00000043,
- 0x02020800, 0x0010032d, 0x4a026203, 0x00000003,
- 0x493a6403, 0x59325809, 0x592c0010, 0x48026012,
- 0x497a6014, 0x592c0407, 0x800000c2, 0x800010c4,
- 0x80081400, 0x480a6006, 0x0201f800, 0x00020154,
- 0x42000800, 0x80000060, 0x0201f000, 0x000209a3,
- 0x42000000, 0x0010bd2f, 0x0201f800, 0x0010ae10,
- 0x59300203, 0x82000c80, 0x0000000e, 0x02021800,
- 0x0010032d, 0x4803c857, 0x82000d80, 0x00000003,
- 0x04000006, 0x82000d80, 0x00000004, 0x0400005d,
- 0x0201f800, 0x0010032d, 0x4d400000, 0x42028000,
- 0x00000006, 0x0401f82d, 0x5c028000, 0x1c01f000,
- 0x4803c856, 0x59300203, 0x82000c80, 0x0000000e,
- 0x02021800, 0x0010032d, 0x82000d80, 0x00000002,
- 0x0400000f, 0x82000d80, 0x00000003, 0x04000006,
- 0x82000d80, 0x00000004, 0x04000046, 0x0201f800,
- 0x0010032d, 0x4d400000, 0x42028000, 0x00000005,
- 0x0401f816, 0x5c028000, 0x1c01f000, 0x4933c857,
- 0x4d2c0000, 0x59325809, 0x812e59c0, 0x02000800,
- 0x0010032d, 0x592c1a09, 0x8c0c1d0e, 0x02000800,
- 0x0010032d, 0x4d400000, 0x42028000, 0x00000001,
- 0x0401f84b, 0x0201f800, 0x00107144, 0x5c028000,
- 0x5c025800, 0x1c01f000, 0x4933c857, 0x4943c857,
- 0x0401fa52, 0x4df00000, 0x59300004, 0x8c00053e,
- 0x04020006, 0x0201f800, 0x001064f2, 0x02020800,
- 0x0010032d, 0x0401f01b, 0x0201f800, 0x00108659,
- 0x04020007, 0x59300415, 0x84000558, 0x48026415,
- 0x0201f800, 0x001063f6, 0x04020012, 0x0201f800,
- 0x0010e2da, 0x80c40040, 0x04000005, 0x0401f946,
- 0x02020800, 0x0010032d, 0x0401f00a, 0x59325809,
- 0x0401f827, 0x0201f800, 0x00107144, 0x5c03e000,
- 0x04000a1f, 0x82000540, 0x00000001, 0x1c01f000,
- 0x5c03e000, 0x04000a1a, 0x80000580, 0x1c01f000,
- 0x4933c857, 0x0201f800, 0x00100bd5, 0x4933c857,
- 0x4c5c0000, 0x4d340000, 0x497a6006, 0x5930b809,
- 0x5930000a, 0x80026d40, 0x04020e39, 0x42001000,
- 0x0010b96b, 0x0401fc33, 0x04000009, 0x58c80204,
- 0x4800bc09, 0x41785000, 0x0201f800, 0x00105b60,
- 0x5c026800, 0x5c00b800, 0x1c01f000, 0x4978bc09,
- 0x0201f800, 0x00105b8a, 0x0401f7fa, 0x4803c856,
- 0x0201f800, 0x00108953, 0x0400000f, 0x592c0000,
- 0x80000d40, 0x04000009, 0x497a5800, 0x49425a07,
- 0x4c040000, 0x0201f800, 0x000203ab, 0x5c000800,
- 0x40065800, 0x0401f7f6, 0x49425a07, 0x0201f800,
- 0x000203ab, 0x1c01f000, 0x0401f807, 0x42018800,
- 0x00000001, 0x04000003, 0x42018800, 0x00000000,
- 0x1c01f000, 0x4933c857, 0x59300c07, 0x82040580,
- 0x0000000e, 0x04000004, 0x82040580, 0x00000009,
- 0x04020004, 0x0401ffde, 0x497a6009, 0x80000580,
- 0x1c01f000, 0x592e600a, 0x83300480, 0x0010f694,
- 0x04001016, 0x41580000, 0x81300480, 0x04021013,
- 0x40040000, 0x59300c07, 0x80040580, 0x04020012,
- 0x59300a03, 0x82040580, 0x00000007, 0x02020800,
- 0x0010032d, 0x59300009, 0x80000540, 0x02020800,
- 0x0010032d, 0x0201f800, 0x00020a10, 0x42000000,
- 0x00000000, 0x0401f009, 0x42000000, 0x00000008,
- 0x0401f006, 0x82040580, 0x00000007, 0x040207fb,
- 0x42000000, 0x00000005, 0x592c0a07, 0x48065c07,
- 0x48025a07, 0x0201f000, 0x000203ab, 0x4c0c0000,
- 0x4c100000, 0x4c140000, 0x4c180000, 0x80001d80,
- 0x80002580, 0x42003000, 0x00000020, 0x82040500,
- 0x00000001, 0x04000003, 0x40080000, 0x800c1c00,
- 0x400c2800, 0x800c1902, 0x80102102, 0x82140500,
- 0x00000001, 0x04000003, 0x82102540, 0x80000000,
- 0x80040902, 0x80183040, 0x040207f1, 0x40100800,
- 0x400c0000, 0x5c003000, 0x5c002800, 0x5c002000,
- 0x5c001800, 0x1c01f000, 0x4c580000, 0x4200b000,
- 0x00000020, 0x80000540, 0x04000018, 0x80041c80,
- 0x04021016, 0x800810c2, 0x80040982, 0x04001006,
- 0x80041c80, 0x04021005, 0x8058b040, 0x040207fa,
- 0x0401f006, 0x80041c80, 0x400c0800, 0x80081000,
- 0x8058b040, 0x040207f4, 0x4c000000, 0x41f00000,
- 0x82000500, 0xf7ffffff, 0x4003e000, 0x5c000000,
- 0x5c00b000, 0x1c01f000, 0x4c000000, 0x41f00000,
- 0x82000540, 0x08000000, 0x0401f7f8, 0x42007000,
- 0x0010b995, 0x4a007000, 0x00000005, 0x4a007401,
- 0x00000000, 0x4a007201, 0x00000840, 0x4a007202,
- 0x00000005, 0x4a0378e8, 0x00000000, 0x4a03c821,
- 0x00000010, 0x4a03c823, 0x00000004, 0x0401f81e,
- 0x4a0378e9, 0x00003a0d, 0x4a0378e8, 0x00000001,
- 0x41780800, 0x4203a000, 0x00007600, 0x4a03a005,
- 0xd0000001, 0x59d00006, 0x4a03a005, 0x90000001,
- 0x83d3a400, 0x00000020, 0x80040800, 0x82040480,
- 0x00000005, 0x040017f8, 0x59e00003, 0x82000500,
- 0xffffffe0, 0x82000540, 0x00008000, 0x4803c003,
- 0x59c40006, 0x82000500, 0xfffcffff, 0x48038806,
- 0x1c01f000, 0x4d900000, 0x4d180000, 0x4a0378e7,
- 0xaaaaaaaa, 0x4a0378e6, 0xaaaaaaaa, 0x4a0378e5,
- 0xaaaaaaaa, 0x4a0378e4, 0xaaaaaaaa, 0x4a03781a,
- 0x0010bc28, 0x4a03781b, 0x00100e3a, 0x4a03781c,
- 0x00100e4a, 0x4a031800, 0x00000000, 0x4a031801,
- 0x0010b998, 0x4a031802, 0x0010b99f, 0x42000800,
- 0x0010bc2b, 0x417a3000, 0x811b20c8, 0x83932400,
- 0x0000bf32, 0x48072000, 0x4a032001, 0x00000000,
- 0x83180400, 0x001067bc, 0x50000000, 0x48032002,
- 0x82040c00, 0x00000005, 0x811a3000, 0x83180480,
- 0x00000005, 0x040017f1, 0x5c023000, 0x5c032000,
- 0x1c01f000, 0x40680800, 0x0201f800, 0x000209b1,
- 0x1c01f000, 0x4933c857, 0x59300804, 0x82040d00,
- 0x00000100, 0x82040d40, 0x80000040, 0x48066004,
- 0x497a6000, 0x59bc00ea, 0x8c000516, 0x040207fe,
- 0x83300400, 0x60000000, 0x480378e1, 0x1c01f000,
- 0x598c000f, 0x81300580, 0x04000003, 0x497a6008,
- 0x1c01f000, 0x59c40004, 0x82000500, 0x0000000c,
- 0x04000005, 0x4a038804, 0x0000000c, 0x497b2807,
- 0x0401f00a, 0x0401fb01, 0x59300403, 0x82000d80,
- 0x00000040, 0x04000004, 0x82000580, 0x00000042,
- 0x04020002, 0x497a6008, 0x0201f800, 0x00106782,
- 0x80000580, 0x1c01f000, 0x0401f807, 0x42018800,
- 0x00000001, 0x04000003, 0x42018800, 0x00000000,
- 0x1c01f000, 0x59300804, 0x8c040d20, 0x04020004,
- 0x82000540, 0x00000001, 0x1c01f000, 0x4933c857,
- 0x4d380000, 0x59300804, 0x84040d20, 0x48066004,
- 0x42027000, 0x00000049, 0x59300203, 0x82000580,
- 0x00000003, 0x04000003, 0x42027000, 0x00000013,
- 0x0201f800, 0x00020a34, 0x80000580, 0x5c027000,
- 0x1c01f000, 0x0401f807, 0x42018800, 0x00000001,
- 0x04000003, 0x42018800, 0x00000000, 0x1c01f000,
- 0x59300018, 0x81480580, 0x04020003, 0x59300019,
- 0x814c0580, 0x1c01f000, 0x4d2c0000, 0x4d300000,
- 0x0401f8ce, 0x4df00000, 0x0201f800, 0x00105999,
- 0x59900001, 0x82000500, 0x00000003, 0x0c01f001,
- 0x001060fd, 0x001060f2, 0x001060f0, 0x001060f0,
- 0x0201f800, 0x0010032d, 0x59926004, 0x0401f88a,
- 0x813261c0, 0x04000008, 0x59300004, 0x8c000516,
- 0x04000004, 0x59325809, 0x497a5809, 0x497a580a,
- 0x0401f88a, 0x5c03e000, 0x040008a1, 0x5c026000,
- 0x5c025800, 0x1c01f000, 0x5c000000, 0x4c000000,
- 0x4803c857, 0x4d300000, 0x497b2807, 0x0401f8ab,
- 0x4df00000, 0x598c0000, 0x82000500, 0x0000000f,
- 0x4803c857, 0x0c01f001, 0x00106143, 0x00106120,
- 0x00106129, 0x00106130, 0x0010613e, 0x00106143,
- 0x0010611e, 0x0010612d, 0x00106143, 0x0010611e,
- 0x0010611e, 0x0010611e, 0x0010611e, 0x0010611e,
- 0x0010611e, 0x0010611e, 0x0201f800, 0x0010032d,
- 0x598c000f, 0x80026540, 0x04000004, 0x0401f824,
- 0x02020800, 0x0010032d, 0x0201f800, 0x00106782,
- 0x0401f01b, 0x0401f82d, 0x0201f800, 0x00106782,
- 0x0401f017, 0x0201f800, 0x0010a8b9, 0x0401f7f7,
- 0x598c000f, 0x80026540, 0x04000011, 0x0401f83b,
- 0x04000007, 0x0401f812, 0x04000005, 0x0401f81f,
- 0x04000003, 0x0201f800, 0x0010a8b9, 0x0201f800,
- 0x00106782, 0x0401f006, 0x0401f830, 0x02020800,
- 0x0010032d, 0x0201f800, 0x00106782, 0x5c03e000,
- 0x0400085b, 0x5c026000, 0x1c01f000, 0x598c0009,
- 0x81300580, 0x0402000c, 0x0401f84e, 0x0401f83b,
- 0x59300000, 0x800001c0, 0x04000004, 0x48031809,
- 0x497a6000, 0x0401f003, 0x497b1809, 0x497b1808,
- 0x80000580, 0x1c01f000, 0x4d2c0000, 0x59300407,
- 0x82000580, 0x00000003, 0x04020012, 0x598c000b,
- 0x81300580, 0x0402000f, 0x0401f83a, 0x59325809,
- 0x497a5809, 0x497a580a, 0x0401f824, 0x59300000,
- 0x800001c0, 0x04000004, 0x4803180b, 0x497a6000,
- 0x0401f003, 0x497b180a, 0x497b180b, 0x80000580,
- 0x5c025800, 0x1c01f000, 0x598c0005, 0x81300580,
- 0x0402000c, 0x0401f827, 0x0401f814, 0x59300000,
- 0x800001c0, 0x04000004, 0x48031805, 0x497a6000,
- 0x0401f003, 0x497b1805, 0x497b1804, 0x80000580,
- 0x1c01f000, 0x4a032001, 0x00000000, 0x497b2004,
- 0x497b2005, 0x59900006, 0x82000500, 0x0000ffff,
- 0x48032006, 0x1c01f000, 0x4c040000, 0x59300004,
- 0x82000500, 0x7ffeffff, 0x48026004, 0x59bc00e4,
- 0x8c000514, 0x04000009, 0x42000800, 0x0000bf00,
- 0x58040012, 0x81300580, 0x04020004, 0x49780812,
- 0x4a0378e4, 0x00000800, 0x5c000800, 0x1c01f000,
- 0x4803c856, 0x598c000e, 0x80000540, 0x04000003,
- 0x80000040, 0x4803180e, 0x1c01f000, 0x59bc00ea,
- 0x82000500, 0x00000007, 0x82000580, 0x00000003,
- 0x04020006, 0x4803c856, 0x4a0378e8, 0x00000001,
- 0x4a0370e4, 0x00000800, 0x1c01f000, 0x0401f807,
- 0x42018800, 0x00000001, 0x04000003, 0x42018800,
- 0x00000000, 0x1c01f000, 0x59bc00ea, 0x82000500,
- 0x00000007, 0x82000580, 0x00000001, 0x04020013,
- 0x4803c856, 0x42000800, 0x00000000, 0x0401f810,
- 0x4a0370e4, 0x00000c00, 0x42000800, 0x00001000,
- 0x59bc00ea, 0x82000500, 0x00000007, 0x82000580,
- 0x00000003, 0x04000005, 0x80040840, 0x040207f9,
- 0x0201f800, 0x0010032d, 0x1c01f000, 0x59bc00ea,
- 0x82000500, 0x00000007, 0x82000580, 0x00000001,
- 0x02020800, 0x0010032d, 0x59bc00ea, 0x8c000516,
- 0x040207fe, 0x480778e1, 0x1c01f000, 0x40681000,
- 0x406c0800, 0x59bc00ea, 0x8c000516, 0x040207fe,
- 0x480778e1, 0x59bc00ea, 0x8c000516, 0x040207fe,
- 0x480b78e1, 0x1c01f000, 0x4a0378e4, 0x00002000,
- 0x59a8006d, 0x82000500, 0x0000000c, 0x04020008,
- 0x42007000, 0x0010b995, 0x58380401, 0x8c000506,
- 0x04020003, 0x4a0378e4, 0x00080000, 0x1c01f000,
- 0x82000d00, 0x80000018, 0x02020800, 0x00100322,
- 0x0201f800, 0x0010032d, 0x00106206, 0x001062ab,
- 0x001062c6, 0x00106206, 0x00106208, 0x00106229,
- 0x00106248, 0x0010627c, 0x00106206, 0x001062a9,
- 0x00106206, 0x00106206, 0x00106206, 0x00106206,
- 0x00106206, 0x00106206, 0x0201f800, 0x0010032d,
- 0x4d300000, 0x4d900000, 0x4dd00000, 0x4da40000,
- 0x4d140000, 0x0201f800, 0x001067aa, 0x59bc00ea,
- 0x8c000510, 0x040007fe, 0x59be60e0, 0x59300004,
- 0x8c000520, 0x04000011, 0x82000500, 0xfffefeff,
- 0x48026004, 0x4a026203, 0x00000003, 0x0401ff97,
- 0x0201f800, 0x00100d3a, 0x5c022800, 0x5c034800,
- 0x5c03a000, 0x5c032000, 0x5c026000, 0x4a0378e4,
- 0x00000008, 0x0401f77a, 0x84000510, 0x48026004,
- 0x0401f7f6, 0x4d300000, 0x4d900000, 0x4dd00000,
- 0x4da40000, 0x4d140000, 0x0201f800, 0x001067aa,
- 0x59bc00ea, 0x8c000510, 0x040007fe, 0x59be60e0,
- 0x59300004, 0x8c000520, 0x0400000f, 0x82000500,
- 0xfffefeff, 0x48026004, 0x0401ff78, 0x0201f800,
- 0x00100d79, 0x5c022800, 0x5c034800, 0x5c03a000,
- 0x5c032000, 0x5c026000, 0x4a0378e4, 0x00000008,
- 0x0401f75b, 0x84000510, 0x48026004, 0x0401f7f6,
- 0x4d300000, 0x4d2c0000, 0x4d340000, 0x4da40000,
- 0x4cd00000, 0x59bc00ea, 0x8c000510, 0x040007fe,
- 0x59be60e0, 0x813261c0, 0x02000800, 0x0010032d,
- 0x59300004, 0x8c000520, 0x0400001e, 0x82000500,
- 0xfffefeff, 0x48026004, 0x5932680a, 0x42034800,
- 0x0010b998, 0x04011000, 0x4a03c840, 0x0010b99f,
- 0x4a03c842, 0x00000012, 0x04011000, 0x4a03c840,
- 0x0010b9b1, 0x4a03c842, 0x000000ff, 0x04011000,
- 0x4a03c840, 0x0010bab0, 0x4a03c842, 0x000000ff,
- 0x0201f800, 0x001067c1, 0x5c01a000, 0x5c034800,
- 0x5c026800, 0x5c025800, 0x5c026000, 0x1c01f000,
- 0x84000510, 0x48026004, 0x5c01a000, 0x5c034800,
- 0x5c026800, 0x5c025800, 0x5c026000, 0x1c01f000,
- 0x4d300000, 0x4d2c0000, 0x4d340000, 0x4cd00000,
- 0x4d900000, 0x4dd00000, 0x4da40000, 0x4d140000,
- 0x0201f800, 0x001067aa, 0x59bc00ea, 0x8c000510,
- 0x040007fe, 0x59be60e0, 0x813261c0, 0x02000800,
- 0x0010032d, 0x59300004, 0x8c000520, 0x0400000f,
- 0x82000500, 0xfffefeff, 0x48026004, 0x0201f800,
- 0x00106f82, 0x5c022800, 0x5c034800, 0x5c03a000,
- 0x5c032000, 0x5c01a000, 0x5c026800, 0x5c025800,
- 0x5c026000, 0x1c01f000, 0x84000510, 0x48026004,
- 0x5c022800, 0x5c034800, 0x5c03a000, 0x5c032000,
- 0x5c01a000, 0x5c026800, 0x5c025800, 0x5c026000,
- 0x1c01f000, 0x0201f800, 0x0010032d, 0x4d300000,
- 0x4d380000, 0x42000000, 0x0010bd7e, 0x0201f800,
- 0x0010ae10, 0x0401ff01, 0x598e600f, 0x59c40004,
- 0x8c000506, 0x04000004, 0x0401f8f4, 0x4a038804,
- 0x00000008, 0x813261c0, 0x04000007, 0x0201f800,
- 0x001067a4, 0x42027000, 0x00000014, 0x0201f800,
- 0x00020a34, 0x4a0378e4, 0x00000002, 0x5c027000,
- 0x5c026000, 0x0401f6da, 0x4d180000, 0x4d300000,
- 0x4d380000, 0x4d900000, 0x4dd00000, 0x4da40000,
- 0x4d140000, 0x0401fee5, 0x417a3000, 0x59c40804,
- 0x83180400, 0x00106754, 0x50000000, 0x80040500,
- 0x0400001c, 0x42000000, 0x0010bd7f, 0x0201f800,
- 0x0010ae10, 0x0201f800, 0x001067aa, 0x59926004,
- 0x0401f86a, 0x83180400, 0x00106754, 0x50000000,
- 0x48038804, 0x813261c0, 0x0400000a, 0x59300004,
- 0x8c00050c, 0x04020003, 0x4a026203, 0x00000003,
- 0x42027000, 0x0000004a, 0x0201f800, 0x00020a34,
- 0x59c40004, 0x82000500, 0x00f80000, 0x04000005,
- 0x811a3000, 0x83180480, 0x00000005, 0x040017dc,
- 0x4a0378e4, 0x00000008, 0x5c022800, 0x5c034800,
- 0x5c03a000, 0x5c032000, 0x5c027000, 0x5c026000,
- 0x5c023000, 0x0401f6a2, 0x4d2c0000, 0x4d340000,
- 0x5932680a, 0x598c0800, 0x82040580, 0x00000004,
- 0x04020006, 0x838c1400, 0x00000005, 0x838c1c00,
- 0x00000004, 0x0401f010, 0x82040580, 0x00000001,
- 0x04020006, 0x838c1400, 0x00000009, 0x838c1c00,
- 0x00000008, 0x0401f008, 0x82040580, 0x00000002,
- 0x04020028, 0x838c1400, 0x0000000b, 0x838c1c00,
- 0x0000000a, 0x41306800, 0x58340000, 0x80007d40,
- 0x04000020, 0x583c000a, 0x81340580, 0x04020006,
- 0x403c6800, 0x583c0000, 0x80007d40, 0x040207fa,
- 0x0401f018, 0x4933c857, 0x483fc857, 0x583c0000,
- 0x48006800, 0x49307800, 0x443c1000, 0x500c0000,
- 0x803c0580, 0x04020002, 0x44341800, 0x80000580,
- 0x4803180f, 0x48031811, 0x598c0000, 0x82000580,
- 0x00000003, 0x04000003, 0x4a031800, 0x00000000,
- 0x80000580, 0x5c026800, 0x5c025800, 0x1c01f000,
- 0x82000540, 0x00000001, 0x0401f7fb, 0x0401f807,
- 0x42018800, 0x00000000, 0x04000003, 0x42018800,
- 0x00000001, 0x1c01f000, 0x491bc857, 0x59b400f6,
- 0x82000500, 0x00000038, 0x040207fd, 0x59c80840,
- 0x82040540, 0x00000010, 0x48039040, 0x59c41008,
- 0x4c040000, 0x4c080000, 0x82081500, 0xffffff7f,
- 0x480b8808, 0x0401fbe1, 0x04020007, 0x0401fbe5,
- 0x04000024, 0x48038804, 0x0201f800, 0x00100df7,
- 0x0401f044, 0x4a038803, 0x00000008, 0x59c40003,
- 0x82000500, 0x00000003, 0x040007fd, 0x8c000502,
- 0x04020007, 0x0401fbd7, 0x04000016, 0x48038804,
- 0x0201f800, 0x00100df7, 0x0401f036, 0x0401fbd7,
- 0x04020007, 0x59c80040, 0x8400056a, 0x48039040,
- 0x59c80040, 0x8c00052a, 0x040207fe, 0x59c40005,
- 0x82000500, 0xc0000000, 0x04000006, 0x59c400a3,
- 0x84000540, 0x480388a3, 0x4a038805, 0xc0000000,
- 0x0201f800, 0x00100d88, 0x4a03a005, 0x30000000,
- 0x59d00006, 0x4a03a005, 0x30000000, 0x59900006,
- 0x82000500, 0xffff0000, 0x48032006, 0x59d00005,
- 0x8c000504, 0x040207fe, 0x42000800, 0x00007600,
- 0x83180540, 0x60000000, 0x480008a1, 0x811800dc,
- 0x59c80840, 0x80040540, 0x48039040, 0x82000540,
- 0x00003000, 0x48039040, 0x59c80040, 0x82000500,
- 0x00003000, 0x040207fd, 0x0201f800, 0x00100de6,
- 0x83180400, 0x00106754, 0x50000000, 0x48038804,
- 0x80000580, 0x4df00000, 0x0201f800, 0x00105999,
- 0x5c03e000, 0x5c001000, 0x5c000800, 0x480b8808,
- 0x48079040, 0x1c01f000, 0x4803c856, 0x59b400f6,
- 0x82000500, 0x00000038, 0x040207fd, 0x59c80840,
- 0x82040540, 0x00000010, 0x48039040, 0x59c41008,
- 0x4c040000, 0x4c080000, 0x82081500, 0xffffff7f,
- 0x480b8808, 0x59c40004, 0x82000500, 0x00000003,
- 0x04020010, 0x59c40004, 0x82000500, 0x0000000c,
- 0x04000005, 0x4a038804, 0x0000000c, 0x8c000504,
- 0x0401f025, 0x59c80040, 0x8400056e, 0x48039040,
- 0x59c80040, 0x8c00052e, 0x040207fe, 0x0401f01e,
- 0x4a038803, 0x00000008, 0x59c40003, 0x82000500,
- 0x00000003, 0x040007fd, 0x8c000502, 0x04020006,
- 0x59c40004, 0x4a038804, 0x0000000c, 0x8c000504,
- 0x0401f011, 0x59c80040, 0x8400056a, 0x48039040,
- 0x59c80040, 0x8c00052a, 0x040207fe, 0x59c40005,
- 0x82000500, 0xc0000000, 0x04000007, 0x59c400a3,
- 0x84000540, 0x480388a3, 0x4a038805, 0xc0000000,
- 0x80000580, 0x497b2807, 0x5c001000, 0x5c000800,
- 0x480b8808, 0x48079040, 0x1c01f000, 0x0401f807,
- 0x42018800, 0x00000001, 0x04000003, 0x42018800,
- 0x00000000, 0x1c01f000, 0x5c000000, 0x4c000000,
- 0x4803c857, 0x491bc857, 0x4933c857, 0x4d900000,
- 0x4dd00000, 0x4da40000, 0x4d140000, 0x0401fdb3,
- 0x4df00000, 0x0401fba9, 0x59900004, 0x800001c0,
- 0x04000011, 0x81300580, 0x0402000f, 0x59300004,
- 0x84000520, 0x48026004, 0x0401ff3c, 0x04020009,
- 0x5c03e000, 0x04000d92, 0x80000580, 0x5c022800,
- 0x5c034800, 0x5c03a000, 0x5c032000, 0x1c01f000,
- 0x0401fcce, 0x42027000, 0x00000049, 0x59300004,
- 0x84000520, 0x48026004, 0x8c00050c, 0x02020800,
- 0x00020a34, 0x5c03e000, 0x04000d81, 0x82000540,
- 0x00000001, 0x5c022800, 0x5c034800, 0x5c03a000,
- 0x5c032000, 0x1c01f000, 0x0401f807, 0x42018800,
- 0x00000001, 0x04000003, 0x42018800, 0x00000000,
- 0x1c01f000, 0x4933c857, 0x0401fd84, 0x4df00000,
- 0x598c000f, 0x80026540, 0x04000012, 0x59300004,
- 0x84000520, 0x48026004, 0x0401ff74, 0x04000017,
- 0x0401fcca, 0x42027000, 0x00000013, 0x59300004,
- 0x8c00050c, 0x02020800, 0x00020a34, 0x5c03e000,
- 0x04000d5f, 0x82000540, 0x00000001, 0x1c01f000,
- 0x836c1580, 0x00000001, 0x040007f9, 0x836c1580,
- 0x00000004, 0x040007f6, 0x42001000, 0x0010392f,
- 0x0201f800, 0x00105872, 0x5c03e000, 0x04000d50,
- 0x80000580, 0x1c01f000, 0x4d300000, 0x4d180000,
- 0x4d3c0000, 0x0401fd5d, 0x4df00000, 0x4a0378e4,
- 0x0000000f, 0x0401fb29, 0x417a3000, 0x811808c8,
- 0x82040c00, 0x0000bf32, 0x58066004, 0x813261c0,
- 0x04000010, 0x417a7800, 0x0201f800, 0x001040c4,
- 0x0400000a, 0x59300c07, 0x82040580, 0x00000003,
- 0x04000004, 0x82040580, 0x00000006, 0x04020003,
- 0x42027800, 0x00000002, 0x0201f800, 0x0010853c,
- 0x811a3000, 0x83180480, 0x00000005, 0x040017e8,
- 0x42000800, 0x00000040, 0x0201f800, 0x001010db,
- 0x4a0378e4, 0x0000000a, 0x5c03e000, 0x04000d24,
- 0x5c027800, 0x5c023000, 0x5c026000, 0x1c01f000,
- 0x4803c856, 0x4d300000, 0x0401fd30, 0x4df00000,
- 0x59c80840, 0x84040d74, 0x82040540, 0x00000010,
- 0x48039040, 0x59c41008, 0x4c040000, 0x4c080000,
- 0x82081500, 0xffffff7f, 0x480b8808, 0x42001000,
- 0x00000003, 0x0401fae4, 0x598e600f, 0x813261c0,
- 0x04020f99, 0x04000aed, 0x497b2807, 0x0401f809,
- 0x5c001000, 0x5c000800, 0x480b8808, 0x48079040,
- 0x5c03e000, 0x04000d02, 0x5c026000, 0x1c01f000,
- 0x4d380000, 0x4d180000, 0x4d300000, 0x4d900000,
- 0x4dd00000, 0x4da40000, 0x4d140000, 0x417a3000,
- 0x0201f800, 0x00105999, 0x811a3000, 0x83180580,
- 0x00000005, 0x040207fb, 0x0401fabc, 0x04020009,
- 0x5c022800, 0x5c034800, 0x5c03a000, 0x5c032000,
- 0x5c026000, 0x5c023000, 0x5c027000, 0x1c01f000,
- 0x0401faf2, 0x59926004, 0x4933c857, 0x0401fe8b,
- 0x813261c0, 0x040007f3, 0x42027000, 0x0000004a,
- 0x4a026203, 0x00000003, 0x0201f800, 0x00020a34,
- 0x0401f7ec, 0x4d300000, 0x4d180000, 0x4d900000,
- 0x0401fcea, 0x42001000, 0x00000000, 0x598c0800,
- 0x82040580, 0x00000005, 0x04000003, 0x82040580,
- 0x00000008, 0x04000aa4, 0x417a3000, 0x811b20c8,
- 0x83932400, 0x0000bf32, 0x59900001, 0x82000580,
- 0x00000001, 0x0402000d, 0x42000800, 0x00000004,
- 0x59926004, 0x59300012, 0x82000500, 0xfff00000,
- 0x80000540, 0x04000003, 0x42000800, 0x0000000e,
- 0x0201f800, 0x00105975, 0x811a3000, 0x83180480,
- 0x00000005, 0x040017ea, 0x59c81040, 0x84081534,
- 0x480b9040, 0x0401fcb2, 0x5c032000, 0x5c023000,
- 0x5c026000, 0x1c01f000, 0x4933c857, 0x4d900000,
- 0x4dd00000, 0x4da40000, 0x4d140000, 0x4d380000,
- 0x0401fcba, 0x4df00000, 0x59300004, 0x8c00053e,
- 0x04020007, 0x8c000520, 0x04000027, 0x0201f800,
- 0x001060bd, 0x04000024, 0x0401f02c, 0x598c000f,
- 0x81300580, 0x04000012, 0x0201f800, 0x00108659,
- 0x04020026, 0x0401fa33, 0x04000024, 0x48038804,
- 0x0401fa9e, 0x0201f800, 0x00100df7, 0x0201f800,
- 0x001060e2, 0x42027000, 0x00000049, 0x59300004,
- 0x8c00050c, 0x0402000e, 0x0401f00f, 0x59c40004,
- 0x8c000504, 0x04000015, 0x4a038804, 0x00000004,
- 0x0201f800, 0x00106102, 0x42027000, 0x00000013,
- 0x59300004, 0x8c00050c, 0x04000003, 0x0201f800,
- 0x00020a34, 0x5c03e000, 0x04000c79, 0x5c027000,
- 0x5c022800, 0x5c034800, 0x5c03a000, 0x5c032000,
- 0x80000580, 0x1c01f000, 0x5c03e000, 0x04000c70,
- 0x5c027000, 0x5c022800, 0x5c034800, 0x5c03a000,
- 0x5c032000, 0x82000540, 0x00000001, 0x1c01f000,
- 0x59300407, 0x82000580, 0x00000003, 0x04020008,
- 0x0201f800, 0x00108953, 0x04000005, 0x59301009,
- 0x58080409, 0x84000550, 0x48001409, 0x1c01f000,
- 0x497b2807, 0x0401fc6d, 0x59c400af, 0x800001c0,
- 0x04020004, 0x0401fc56, 0x0201f000, 0x001012d0,
- 0x598c0011, 0x82001480, 0x00000002, 0x04021007,
- 0x80000000, 0x48031811, 0x80000580, 0x0201f800,
- 0x0010596e, 0x04000011, 0x0401fed7, 0x0402000f,
- 0x0401ffe0, 0x42000000, 0x0010bd36, 0x0201f800,
- 0x0010ae10, 0x0401fda1, 0x04000008, 0x0401fa45,
- 0x4d380000, 0x42027000, 0x00000014, 0x0201f800,
- 0x00020a34, 0x5c027000, 0x0401fc39, 0x0201f000,
- 0x001012d0, 0x4d900000, 0x4dd00000, 0x4da40000,
- 0x4d140000, 0x4d300000, 0x0201f800, 0x00105999,
- 0x0401fc42, 0x59c400af, 0x800001c0, 0x0400002a,
- 0x0401fa36, 0x59926004, 0x4933c857, 0x59300004,
- 0x8c000516, 0x0400000b, 0x0401fe7c, 0x04020022,
- 0x0201f800, 0x001060e2, 0x0401fc21, 0x42000800,
- 0x80000804, 0x0201f800, 0x000209a3, 0x0401f01a,
- 0x42001800, 0x00007530, 0x0401f9d8, 0x04020004,
- 0x0201f800, 0x00105973, 0x0401f013, 0x0401fe6b,
- 0x04020011, 0x0401ffab, 0x42000000, 0x0010bd37,
- 0x0201f800, 0x0010ae10, 0x59300004, 0x8c00050c,
- 0x04020003, 0x4a026203, 0x00000003, 0x4d380000,
- 0x42027000, 0x0000004a, 0x0201f800, 0x00020a34,
- 0x5c027000, 0x0401fc02, 0x5c026000, 0x5c022800,
- 0x5c034800, 0x5c03a000, 0x5c032000, 0x0201f000,
- 0x001012d0, 0x4c600000, 0x4d900000, 0x4dd00000,
- 0x4da40000, 0x4d140000, 0x4d300000, 0x4d2c0000,
- 0x0401fc06, 0x0401f9fd, 0x59926004, 0x813261c0,
- 0x04000091, 0x0201f800, 0x00104755, 0x04020007,
- 0x4178c000, 0x0201f800, 0x001070dd, 0x04000003,
- 0x4200c000, 0x00000001, 0x42000000, 0x00001000,
- 0x50000000, 0x82000480, 0x24320001, 0x04001038,
- 0x0201f800, 0x00100d88, 0x59303004, 0x8c183536,
- 0x0400002f, 0x42003000, 0x00001000, 0x80183040,
- 0x04000014, 0x0201f800, 0x0010af26, 0x040007fc,
- 0x0201f800, 0x00100636, 0x42003000, 0x00007a15,
- 0x50183800, 0x821c0500, 0x00007000, 0x04000009,
- 0x48035075, 0x821c0500, 0xffff8fff, 0x44003000,
- 0x4a032832, 0x000004b0, 0x4a0378e4, 0x02c00000,
- 0x4a030000, 0x00000000, 0x0201f800, 0x00100de6,
- 0x850e1d2e, 0x42000000, 0x0010bdaf, 0x0201f800,
- 0x0010ae10, 0x59325809, 0x812e59c0, 0x02000800,
- 0x0010032d, 0x0401f861, 0x04000057, 0x59303004,
- 0x84183536, 0x481a6004, 0x0401f032, 0x0201f800,
- 0x00105986, 0x0400002c, 0x0401f04f, 0x0201f800,
- 0x00100de6, 0x8d0e1d2e, 0x040207f9, 0x0201f800,
- 0x00104755, 0x04020006, 0x8060c1c0, 0x04000004,
- 0x0201f800, 0x00107107, 0x0401f043, 0x0201f800,
- 0x00105986, 0x04020040, 0x4933c857, 0x0401f93f,
- 0x04020019, 0x0201f800, 0x00105999, 0x813261c0,
- 0x04000039, 0x59325809, 0x812e59c0, 0x02000800,
- 0x0010032d, 0x0201f800, 0x00104755, 0x04020022,
- 0x59c40093, 0x4803c857, 0x800001c0, 0x0402000a,
- 0x592c0209, 0x84000550, 0x48025a09, 0x0201f800,
- 0x00104879, 0x04020028, 0x592c0209, 0x84000510,
- 0x48025a09, 0x0201f800, 0x00105973, 0x0401f022,
- 0x42000000, 0x0010bd37, 0x0201f800, 0x0010ae10,
- 0x0401fd22, 0x592c0209, 0x84000550, 0x48025a09,
- 0x4d380000, 0x42027000, 0x0000004a, 0x4a026203,
- 0x00000003, 0x0201f800, 0x00020a34, 0x5c027000,
- 0x0401f011, 0x59900006, 0x82000500, 0xffff0000,
- 0x040207ec, 0x59c408af, 0x82040480, 0x000003e8,
- 0x040217e8, 0x59900006, 0x82000400, 0x00010000,
- 0x48032006, 0x0201f800, 0x00105973, 0x0201f800,
- 0x00103908, 0x5c025800, 0x5c026000, 0x5c022800,
- 0x5c034800, 0x5c03a000, 0x5c032000, 0x5c00c000,
- 0x0201f000, 0x0010619f, 0x4c5c0000, 0x4c640000,
- 0x5930bc07, 0x5930c804, 0x825c0580, 0x00000003,
- 0x04000004, 0x825c0580, 0x00000006, 0x0402002f,
- 0x0201f800, 0x001040c4, 0x0402002c, 0x0401fcef,
- 0x0201f800, 0x001060e2, 0x825c0580, 0x00000003,
- 0x04020005, 0x8c64cd16, 0x0400000c, 0x8464cd36,
- 0x0401f01b, 0x82640500, 0x0000001f, 0x82000580,
- 0x00000005, 0x04000005, 0x0201f800, 0x0002015e,
- 0x8464cd4a, 0x0401f7f6, 0x0401f820, 0x04020017,
- 0x48166012, 0x0201f800, 0x00100e5a, 0x04020013,
- 0x8264cd00, 0xfff7ffdf, 0x592c0209, 0x8c00051e,
- 0x04020011, 0x8464cd4a, 0x50201800, 0x480e600b,
- 0x4832600c, 0x4822600d, 0x482a600e, 0x8464cd7e,
- 0x48666004, 0x0401f835, 0x80000580, 0x5c00c800,
- 0x5c00b800, 0x1c01f000, 0x82000540, 0x00000001,
- 0x0401f7fb, 0x8400051e, 0x48025a09, 0x0201f800,
- 0x00100e18, 0x0401f7ed, 0x59302013, 0x811808c2,
- 0x82040c00, 0x00006000, 0x58040101, 0x82000500,
- 0xffff0000, 0x800001c0, 0x0400000b, 0x811808ca,
- 0x82040c00, 0x00006000, 0x58040138, 0x58042139,
- 0x81a41000, 0x58081403, 0x800810e0, 0x80081540,
- 0x480a601b, 0x59300013, 0x80100480, 0x04001010,
- 0x59902808, 0x59303016, 0x80140480, 0x0400100c,
- 0x40002800, 0x80180480, 0x04001009, 0x48026016,
- 0x8464cd36, 0x59300014, 0x80100580, 0x04000003,
- 0x8464cd76, 0x80000580, 0x1c01f000, 0x82000540,
- 0x00000001, 0x1c01f000, 0x59bc00ea, 0x82000500,
- 0x00000007, 0x82000580, 0x00000001, 0x02000800,
- 0x0010032d, 0x5930080a, 0x5804100c, 0x480bc857,
- 0x800811c0, 0x04020003, 0x4930080c, 0x0401f01b,
- 0x59bc1031, 0x40081800, 0x800811c0, 0x02000800,
- 0x0010032d, 0x5808000a, 0x80040580, 0x04000004,
- 0x40081800, 0x58081000, 0x0401f7f8, 0x58082000,
- 0x49781000, 0x480a6001, 0x400c0000, 0x80080580,
- 0x04020006, 0x49337831, 0x48126000, 0x801021c0,
- 0x0402000d, 0x0401f00b, 0x48101800, 0x801021c0,
- 0x04020002, 0x480f7830, 0x59bc0831, 0x4807c857,
- 0x48066000, 0x49337831, 0x800409c0, 0x04020002,
- 0x49337830, 0x1c01f000, 0x4d300000, 0x4d2c0000,
- 0x0201f800, 0x001061b2, 0x598e600f, 0x4933c857,
- 0x813261c0, 0x04000049, 0x59c41004, 0x480bc857,
- 0x8c081500, 0x0400000a, 0x0201f800, 0x00104755,
- 0x04020015, 0x0201f800, 0x00104879, 0x0402003f,
- 0x0201f800, 0x0010596e, 0x0401f03c, 0x82080500,
- 0x000001fe, 0x040207fb, 0x59c8010b, 0x4803c857,
- 0x8c000500, 0x040007f7, 0x42000000, 0x0010bd80,
- 0x0201f800, 0x0010ae10, 0x0401fd2b, 0x0400087f,
- 0x0401f02e, 0x598c0011, 0x80000540, 0x04020011,
- 0x59c408af, 0x82040480, 0x000003e8, 0x0402100d,
- 0x598c0811, 0x80040800, 0x48071811, 0x0201f800,
- 0x0010596e, 0x42000000, 0x0010bc75, 0x0201f800,
- 0x0010ae10, 0x0201f800, 0x00103908, 0x0401f01b,
- 0x42000000, 0x0010bd36, 0x0201f800, 0x0010ae10,
- 0x0401fc8e, 0x813261c0, 0x04020003, 0x0401f863,
- 0x0401f012, 0x59300407, 0x82000580, 0x00000003,
- 0x04020007, 0x59325809, 0x812e59c0, 0x04000004,
- 0x592c0209, 0x84000550, 0x48025a09, 0x0401f879,
- 0x4d380000, 0x42027000, 0x00000014, 0x0201f800,
- 0x00020a34, 0x5c027000, 0x5c025800, 0x5c026000,
- 0x0201f000, 0x0010619f, 0x59c40804, 0x83180400,
- 0x0010674a, 0x50000000, 0x80040500, 0x1c01f000,
- 0x59c40804, 0x83180400, 0x0010674f, 0x50000000,
- 0x80040500, 0x1c01f000, 0x59c80840, 0x82040d00,
- 0x000e0000, 0x83180400, 0x00106759, 0x50000000,
- 0x80040580, 0x1c01f000, 0x00000210, 0x00000420,
- 0x00000840, 0x00001080, 0x00002100, 0x00004000,
- 0x00008000, 0x00010000, 0x00020000, 0x00040000,
- 0x00080000, 0x00100000, 0x00200000, 0x00400000,
- 0x00800000, 0x00000000, 0x00020000, 0x00040000,
- 0x00060000, 0x00080000, 0x59900806, 0x80040120,
- 0x800c0480, 0x04021004, 0x82000540, 0x00000001,
- 0x0401f005, 0x82040c00, 0x00010000, 0x48072006,
- 0x80000580, 0x1c01f000, 0x417a3000, 0x0401ffd7,
- 0x04000006, 0x811a3000, 0x83180580, 0x00000005,
- 0x040207fb, 0x1c01f000, 0x81780080, 0x1c01f000,
- 0x40681000, 0x480bc857, 0x0201f800, 0x001061b2,
- 0x4df00000, 0x598c0800, 0x82040d80, 0x00000007,
- 0x04000002, 0x480b1800, 0x5c03e000, 0x02000800,
- 0x0010619f, 0x1c01f000, 0x4803c856, 0x0201f800,
- 0x001061b2, 0x4df00000, 0x497b180f, 0x497b1803,
- 0x497b1810, 0x497b1811, 0x497b1812, 0x598c0000,
- 0x82000580, 0x00000003, 0x04000012, 0x59a80073,
- 0x8c00053e, 0x04000007, 0x59bc00e4, 0x8c000534,
- 0x04000004, 0x4a031800, 0x00000008, 0x0401f009,
- 0x836c0580, 0x00000002, 0x04020004, 0x4a031800,
- 0x00000005, 0x0401f003, 0x4a031800, 0x00000000,
- 0x5c03e000, 0x02000800, 0x0010619f, 0x1c01f000,
- 0x59300004, 0x8c00050c, 0x04020003, 0x4a026203,
- 0x00000001, 0x1c01f000, 0x83180480, 0x00000005,
- 0x02021800, 0x0010032d, 0x491bc857, 0x811b20c8,
- 0x83932400, 0x0000bf32, 0x811ba0ca, 0x83d3a400,
- 0x00007600, 0x83180400, 0x001067bc, 0x50034800,
- 0x811a28c2, 0x83162c00, 0x00006100, 0x1c01f000,
- 0x0010bbaf, 0x0010bbc6, 0x0010bbdd, 0x0010bbf4,
- 0x0010bc0b, 0x4933c857, 0x59300407, 0x82000c80,
- 0x00000014, 0x04021017, 0x04011000, 0x0c01f001,
- 0x001067dc, 0x00106880, 0x00106bfc, 0x00106c56,
- 0x00106880, 0x00106bfc, 0x00106c56, 0x001067dc,
- 0x00106880, 0x001067dc, 0x001067dc, 0x001067dc,
- 0x001067dc, 0x001067dc, 0x001067dc, 0x001067dc,
- 0x001067e3, 0x001067e3, 0x0010a914, 0x0010a9e3,
- 0x4803c857, 0x0201f800, 0x001061b2, 0x0201f800,
- 0x00106102, 0x0201f000, 0x0010619f, 0x42001000,
- 0x0010bc55, 0x50081000, 0x4930100b, 0x58080002,
- 0x82000580, 0x00000100, 0x0402003b, 0x59325809,
- 0x812e59c0, 0x02000800, 0x0010032d, 0x492fc856,
- 0x5932680a, 0x83340580, 0x0010c2b2, 0x04000022,
- 0x592c040c, 0x82000500, 0x0000e000, 0x04000003,
- 0x0401fbfd, 0x0401f002, 0x0401fbed, 0x592c000e,
- 0x82000500, 0x00000003, 0x04000007, 0x82000580,
- 0x00000003, 0x80000000, 0x58d00802, 0x80040540,
- 0x4801a002, 0x42001000, 0x0010bc55, 0x50081000,
- 0x4930100a, 0x492c1009, 0x82d00400, 0x00000006,
- 0x48001003, 0x592c000e, 0x48001005, 0x592c000f,
- 0x48001006, 0x592c0010, 0x48001007, 0x0201f000,
- 0x00020016, 0x592c080b, 0x48066802, 0x82040500,
- 0x00ffff00, 0x04000007, 0x497a6a12, 0x59a8100f,
- 0x82081500, 0x00ffff00, 0x80080580, 0x040207d5,
- 0x82040d00, 0x000000ff, 0x800408d0, 0x48066a12,
- 0x0401f7d0, 0x1c01f000, 0x4d2c0000, 0x4d300000,
- 0x4c580000, 0x4c540000, 0x4c500000, 0x58325809,
- 0x812e59c0, 0x02000800, 0x0010032d, 0x58300002,
- 0x82000580, 0x00000100, 0x04020022, 0x5830000a,
- 0x5832600b, 0x81300d80, 0x04020012, 0x0401f834,
- 0x04020016, 0x592c080e, 0x82040c00, 0x00000003,
- 0x80040904, 0x4004b000, 0x4200a000, 0x0010b99f,
- 0x4050a800, 0x0201f800, 0x0010af0c, 0x42001000,
- 0x0000dc00, 0x0201f800, 0x00107000, 0x0401f007,
- 0x4803c857, 0x4933c857, 0x813261c0, 0x04000003,
- 0x0401f81f, 0x04000f96, 0x5c00a000, 0x5c00a800,
- 0x5c00b000, 0x5c026000, 0x5c025800, 0x1c01f000,
- 0x5830000a, 0x5832600b, 0x4a006002, 0x00000100,
- 0x4803c857, 0x4933c857, 0x81300d80, 0x040207ed,
- 0x0401f80f, 0x040207f1, 0x4803c857, 0x0201f800,
- 0x0010e453, 0x80c40040, 0x02020800, 0x0010032d,
- 0x4a025a07, 0x00000002, 0x0201f800, 0x000203ab,
- 0x0201f800, 0x00107144, 0x0401f7e4, 0x0201f800,
- 0x001061b2, 0x4df00000, 0x598c000f, 0x81300580,
- 0x04020009, 0x598c0005, 0x81300580, 0x04020006,
- 0x5c03e000, 0x02000800, 0x0010619f, 0x80000580,
- 0x1c01f000, 0x4803c857, 0x5c03e000, 0x02000800,
- 0x0010619f, 0x82000540, 0x00000001, 0x1c01f000,
- 0x59300403, 0x82000c80, 0x00000058, 0x02021800,
- 0x0010032d, 0x83340d80, 0x0010c2b2, 0x0402000a,
- 0x5930081f, 0x48066802, 0x82041500, 0x00ffff00,
- 0x04020004, 0x800408d0, 0x48066a12, 0x0401f002,
- 0x497a6a12, 0x4803c857, 0x0c01f001, 0x00106a13,
- 0x00106a2f, 0x00106a40, 0x00106b52, 0x00106b14,
- 0x00106b18, 0x00106b27, 0x00106b3b, 0x00106b30,
- 0x00106b3b, 0x00106b7b, 0x00106b3b, 0x00106bc2,
- 0x00106b3b, 0x00106bd0, 0x00106b3b, 0x00106b30,
- 0x00106b3b, 0x00106bd4, 0x001068f3, 0x001068f3,
- 0x001068f3, 0x001068f3, 0x001068f3, 0x001068f3,
- 0x001068f3, 0x001068f3, 0x001068f3, 0x001068f3,
- 0x001068f3, 0x00106c74, 0x00106c8b, 0x00106c95,
- 0x001068f3, 0x00106cae, 0x00106b27, 0x001068f3,
- 0x00106b27, 0x00106b3b, 0x001068f3, 0x00106a40,
- 0x00106b52, 0x001068f3, 0x00106cfe, 0x00106b3b,
- 0x001068f3, 0x00106d0e, 0x00106b3b, 0x001068f3,
- 0x00106b30, 0x00106a04, 0x001068f5, 0x001068f3,
- 0x00106d25, 0x00106d64, 0x00106de9, 0x001068f3,
- 0x00106df9, 0x00106b25, 0x00106dec, 0x001068f3,
- 0x00106cba, 0x00106e48, 0x001068f3, 0x00106e7d,
- 0x00106ed0, 0x001068f3, 0x0010690a, 0x0010697e,
- 0x0010698b, 0x001068f3, 0x00106b27, 0x001068f3,
- 0x001069ca, 0x001069d5, 0x001068f3, 0x001068f3,
- 0x0010691e, 0x00106951, 0x00106f0f, 0x00106f50,
- 0x00106f76, 0x001068f3, 0x001068f3, 0x001068f3,
- 0x00106f44, 0x00106e12, 0x00106d25, 0x001068f3,
- 0x001068f3, 0x001068f3, 0x001068f3, 0x001068f3,
- 0x001068f3, 0x001068f3, 0x001068f3, 0x0201f800,
- 0x0010032d, 0x0401faf2, 0x59325809, 0x592c000a,
- 0x4801a006, 0x592c000b, 0x4801a007, 0x592c000c,
- 0x4801a008, 0x592c000d, 0x4801a009, 0x592c000e,
- 0x4801a00a, 0x4979a00b, 0x592c080a, 0x82040d00,
- 0x00000fff, 0x80040904, 0x42001000, 0x0000dc00,
- 0x0201f000, 0x00107000, 0x4a026202, 0x0000ffff,
- 0x0401fadb, 0x4d2c0000, 0x4a01a006, 0x05000000,
- 0x59325809, 0x592c000a, 0x4801a007, 0x592c000b,
- 0x4801a008, 0x592c000c, 0x4801a009, 0x5c025800,
- 0x42000800, 0x00000004, 0x42001000, 0x0000dc00,
- 0x0201f000, 0x00107000, 0x4c580000, 0x4c500000,
- 0x4c540000, 0x4d2c0000, 0x0401fac5, 0x5930040b,
- 0x82000500, 0x00000003, 0x04000007, 0x82000580,
- 0x00000003, 0x80000000, 0x58d00802, 0x80040540,
- 0x4801a002, 0x59325809, 0x4200a800, 0x0010b99f,
- 0x592cb206, 0x8258b400, 0x00000003, 0x8058b104,
- 0x832ca400, 0x00000007, 0x0201f800, 0x0010aee2,
- 0x40580000, 0x8054ac00, 0x592c0001, 0x80000540,
- 0x04000003, 0x40025800, 0x0401f7f2, 0x4200a000,
- 0x0010b99f, 0x4050a800, 0x5930b40b, 0x8258b400,
- 0x00000003, 0x8058b104, 0x40580800, 0x0201f800,
- 0x0010af0c, 0x42001000, 0x0000dc00, 0x5c025800,
- 0x5c00a800, 0x5c00a000, 0x5c00b000, 0x0201f000,
- 0x00107000, 0x4c580000, 0x4c500000, 0x4c540000,
- 0x4d2c0000, 0x42034800, 0x0010b998, 0x0401fa9e,
- 0x59325809, 0x592c0802, 0x4807c857, 0x40041000,
- 0x80040904, 0x82081500, 0x00000003, 0x04000008,
- 0x80040800, 0x82081580, 0x00000003, 0x80081000,
- 0x58d00002, 0x80080540, 0x4801a002, 0x4a025806,
- 0x02000000, 0x82d0ac00, 0x00000006, 0x592cb011,
- 0x832ca400, 0x00000006, 0x0201f800, 0x0010aee2,
- 0x40580000, 0x8054ac00, 0x592e5801, 0x41780000,
- 0x812e5d40, 0x040207f6, 0x42001000, 0x0000dc00,
- 0x5c025800, 0x5c00a800, 0x5c00a000, 0x5c00b000,
- 0x0201f000, 0x00107000, 0x0401fa69, 0x4a01a006,
- 0x78000000, 0x5930001d, 0x840001c0, 0x4801a407,
- 0x4979a207, 0x42000800, 0x00000002, 0x42001000,
- 0x0000dc00, 0x0201f000, 0x00107000, 0x4c580000,
- 0x4c540000, 0x4c500000, 0x0401fa67, 0x4a01a006,
- 0x02000000, 0x59a80002, 0x4801a008, 0x59a80003,
- 0x4801a009, 0x59a80000, 0x4801a00a, 0x59a80001,
- 0x4801a00b, 0x5930001d, 0x82000d80, 0x0000e000,
- 0x04000012, 0x82000d80, 0x0000df00, 0x04000006,
- 0x4a01a407, 0x00000010, 0x42000800, 0x00000006,
- 0x0401f01f, 0x42001800, 0x0010b941, 0x0201f800,
- 0x00100532, 0x42000000, 0x0000df00, 0x4200a000,
- 0x0010b941, 0x0401f009, 0x42001800, 0x0010b94e,
- 0x0201f800, 0x00100532, 0x42000000, 0x0000e000,
- 0x4200a000, 0x0010b94e, 0x82000540, 0x00000010,
- 0x4801a407, 0x4a01a207, 0x00000034, 0x4200b000,
- 0x0000000d, 0x82d0ac00, 0x0000000c, 0x0201f800,
- 0x0010aee2, 0x42000800, 0x00000013, 0x42001000,
- 0x0000dc00, 0x5c00a000, 0x5c00a800, 0x5c00b000,
- 0x0201f000, 0x00107000, 0x0401fa1d, 0x4a01a006,
- 0x63000028, 0x5930001d, 0x4801a007, 0x42000800,
- 0x00000002, 0x42001000, 0x0000dc00, 0x0201f000,
- 0x00107000, 0x0401fa20, 0x41780000, 0x41780800,
- 0x42002000, 0x00080000, 0x0c01f81b, 0x80000000,
- 0x80040800, 0x42001000, 0x0000000c, 0x59841802,
- 0x8c0c1d00, 0x04020008, 0x42002000, 0x00050000,
- 0x0c01f811, 0x80000000, 0x80040800, 0x82081400,
- 0x00000004, 0x82080540, 0x02000000, 0x4801a006,
- 0x800408e0, 0x5930001d, 0x80040540, 0x4801a007,
- 0x80080904, 0x42001000, 0x0000dc00, 0x0201f000,
- 0x00107000, 0x001069fa, 0x001069fc, 0x001069fe,
- 0x00106a00, 0x00106a02, 0x4811a008, 0x1c01f000,
- 0x4811a009, 0x1c01f000, 0x4811a00a, 0x1c01f000,
- 0x4811a00b, 0x1c01f000, 0x4811a00c, 0x1c01f000,
- 0x4a02600a, 0x0010c2b2, 0x59a8000f, 0x82000500,
- 0x000000ff, 0x800000d0, 0x42026800, 0x0010c2b2,
- 0x48026a12, 0x0401fa3c, 0x41780800, 0x42001000,
- 0x00005c00, 0x0201f000, 0x00107000, 0x0401f9d4,
- 0x4a01a006, 0x52000000, 0x4979a007, 0x599c0017,
- 0x82000500, 0x00000801, 0x04000005, 0x599c0402,
- 0x0201f800, 0x001013b7, 0x4805a007, 0x59a80002,
- 0x4801a008, 0x59a80003, 0x4801a009, 0x59a80000,
- 0x4801a00a, 0x59a80001, 0x4801a00b, 0x59a8000f,
- 0x4801a00c, 0x42000800, 0x00000007, 0x42001000,
- 0x0000dc00, 0x0201f000, 0x00107000, 0x4a026202,
- 0x0000ffff, 0x0401f9b6, 0x4a01a006, 0x05000000,
- 0x59a8000f, 0x4801a007, 0x59a80002, 0x59a80803,
- 0x4801a008, 0x4805a009, 0x42000800, 0x00000004,
- 0x42001000, 0x0000dc00, 0x0201f000, 0x00107000,
- 0x4a026202, 0x0000ffff, 0x0401f9a5, 0x4d3c0000,
- 0x417a7800, 0x0201f800, 0x001040ef, 0x5c027800,
- 0x4a01a006, 0x03000000, 0x59340403, 0x82000580,
- 0x000007fe, 0x04020079, 0x4a01a006, 0x04000000,
- 0x81a40800, 0x4a000800, 0x22fffffe, 0x5934000a,
- 0x84000500, 0x4802680a, 0x59a8021b, 0x8c000508,
- 0x04000010, 0x59a8001f, 0x4801a007, 0x59a80020,
- 0x82000500, 0x07deffff, 0x599c0818, 0x8c040d16,
- 0x04000002, 0x8400056a, 0x4801a008, 0x4a01a009,
- 0x00002710, 0x59a80022, 0x4801a00a, 0x0401f047,
- 0x59a8001f, 0x59a8121b, 0x8c081506, 0x04000003,
- 0x82000500, 0xffff0000, 0x4801a007, 0x0201f800,
- 0x00104755, 0x04020013, 0x59a80873, 0x8c040d3e,
- 0x04020010, 0x59300c03, 0x82041580, 0x00000051,
- 0x0400000c, 0x497b8880, 0x82000500, 0x0000ffff,
- 0x4c000000, 0x0201f800, 0x001013dc, 0x5c000000,
- 0x48038880, 0x41780800, 0x0201f800, 0x00101994,
- 0x59a80020, 0x0201f800, 0x00104755, 0x04020004,
- 0x82000500, 0x37ffffff, 0x0401f003, 0x82000500,
- 0x3fffffff, 0x599c0818, 0x8c040d16, 0x04000002,
- 0x8400056a, 0x8d0e1d10, 0x04000019, 0x59300c03,
- 0x82041580, 0x00000051, 0x04000015, 0x82041580,
- 0x00000031, 0x04000012, 0x4c580000, 0x4c500000,
- 0x4c540000, 0x4200b000, 0x00000004, 0x4200a000,
- 0x0010bdc3, 0x82d0ac00, 0x0000001f, 0x4c000000,
- 0x0201f800, 0x0010aee2, 0x5c000000, 0x5c00a800,
- 0x5c00a000, 0x5c00b000, 0x8400057a, 0x4801a008,
- 0x4979a009, 0x4979a00a, 0x59a80002, 0x59a80803,
- 0x4801a00b, 0x4805a00c, 0x59a80000, 0x59a80801,
- 0x4801a00d, 0x4805a00e, 0x4979a00f, 0x4979a010,
- 0x4979a011, 0x4979a012, 0x4979a013, 0x4979a014,
- 0x4979a015, 0x4979a016, 0x59a80023, 0x84000576,
- 0x4801a017, 0x59a80024, 0x4801a018, 0x4979a019,
- 0x4979a01a, 0x0401f049, 0x59a8021b, 0x8c000508,
- 0x0400000d, 0x59a8001f, 0x82000500, 0x0000ffff,
- 0x59c40880, 0x80040d80, 0x04000007, 0x497b8880,
- 0x4c000000, 0x0201f800, 0x001013dc, 0x5c000000,
- 0x48038880, 0x59a8001f, 0x4801a007, 0x4c640000,
- 0x4d2c0000, 0x59a8c820, 0x0201f800, 0x00108953,
- 0x0400000e, 0x0201f800, 0x00108f1d, 0x0402000b,
- 0x592c0208, 0x8c00050e, 0x04000008, 0x8264cd00,
- 0x0000ffff, 0x592c000a, 0x82000500, 0xffff0000,
- 0x8064cd40, 0x0401f006, 0x59a80a1b, 0x82040d00,
- 0x00000030, 0x04000002, 0x8464cd36, 0x4865a008,
- 0x5c025800, 0x5c00c800, 0x59a80021, 0x4801a009,
- 0x59a80022, 0x4801a00a, 0x59a80002, 0x59a80803,
- 0x4801a00b, 0x4805a00c, 0x59a80000, 0x59a80801,
- 0x4801a00d, 0x4805a00e, 0x4979a00f, 0x4979a010,
- 0x4979a011, 0x4979a012, 0x4979a013, 0x4979a014,
- 0x4979a015, 0x4979a016, 0x59a80023, 0x4801a017,
- 0x59a80024, 0x4801a018, 0x59a80025, 0x4801a019,
- 0x59a80026, 0x4801a01a, 0x42000800, 0x0000001d,
- 0x42001000, 0x0000dc00, 0x0201f000, 0x00107000,
- 0x0401f8d3, 0x4a01a006, 0x50000000, 0x0401f7af,
- 0x0401f8cf, 0x4a01a006, 0x21100014, 0x4979a007,
- 0x4979a008, 0x4979a009, 0x4979a00a, 0x42000800,
- 0x00000005, 0x42001000, 0x0000dc00, 0x0201f000,
- 0x00107000, 0x0401f8c9, 0x0401f002, 0x0401f8ce,
- 0x4a01a006, 0x02000000, 0x42000800, 0x00000001,
- 0x42001000, 0x0000dc00, 0x0201f000, 0x00107000,
- 0x0401f8c5, 0x4a01a006, 0x02000000, 0x59300403,
- 0x82000580, 0x00000031, 0x04020790, 0x81a40800,
- 0x4a000801, 0x00fffffe, 0x0401f71c, 0x0401f8ba,
- 0x4a01a006, 0x01000000, 0x5930041b, 0x80000540,
- 0x04000003, 0x4801a407, 0x0401f003, 0x4a01a407,
- 0x00000003, 0x5930021b, 0x80000540, 0x04000003,
- 0x4801a207, 0x0401f003, 0x4a01a207, 0x00002a00,
- 0x42000800, 0x00000002, 0x42001000, 0x0000dc00,
- 0x0201f000, 0x00107000, 0x4a026202, 0x0000ffff,
- 0x0401f893, 0x4a01a406, 0x00002010, 0x4a01a206,
- 0x00000014, 0x4a01a407, 0x00000800, 0x4a01a207,
- 0x00002000, 0x42000000, 0x00000400, 0x59a80807,
- 0x8c040d0c, 0x04000002, 0x80000580, 0x599c0817,
- 0x8c040d0a, 0x04020003, 0x82000540, 0x00000020,
- 0x8c040d08, 0x04000003, 0x82000540, 0x00000010,
- 0x82000540, 0x00000002, 0x5934080a, 0x8c040d14,
- 0x04000005, 0x82040d00, 0x00000380, 0x80040540,
- 0x0401f006, 0x599c0818, 0x8c040d18, 0x04000003,
- 0x82000540, 0x00000380, 0x0401f041, 0x0401f87a,
- 0x4a01a406, 0x00000210, 0x4a01a206, 0x00000014,
- 0x4a01a407, 0x00000800, 0x5934000a, 0x8c000516,
- 0x04000014, 0x59340c05, 0x82040500, 0x00000030,
- 0x04000013, 0x59340a05, 0x82040500, 0x0000c000,
- 0x04020009, 0x8c040d1a, 0x04000004, 0x4a01a207,
- 0x00002100, 0x0401f00c, 0x4a01a207, 0x00000100,
- 0x0401f009, 0x4a01a207, 0x00000400, 0x0401f006,
- 0x4a01a207, 0x00000700, 0x0401f003, 0x4a01a207,
- 0x00000800, 0x42000000, 0x00000400, 0x59a80807,
- 0x8c040d0c, 0x04000002, 0x80000580, 0x599c0817,
- 0x8c040d0a, 0x04020003, 0x82000540, 0x00000020,
- 0x8c040d08, 0x04000003, 0x82000540, 0x00000010,
- 0x82000540, 0x00000002, 0x59340a00, 0x8c040d0e,
- 0x0400000b, 0x84000550, 0x599c1017, 0x8c08150a,
- 0x04020004, 0x8c040d0a, 0x04000002, 0x8400054e,
- 0x8c040d1c, 0x04000002, 0x84000552, 0x4801a20a,
- 0x42000800, 0x00000005, 0x42001000, 0x0000dc00,
- 0x0201f000, 0x00107000, 0x0401f833, 0x4a01a006,
- 0x02100014, 0x4a01a007, 0x00000100, 0x4979a008,
- 0x4979a009, 0x4979a00a, 0x42000800, 0x00000005,
- 0x42001000, 0x0000dc00, 0x0201f000, 0x00107000,
- 0x0401f825, 0x4a01a006, 0x02000000, 0x0401f643,
- 0x4933c857, 0x0401f820, 0x4a01a006, 0x01000000,
- 0x4a01a407, 0x0000000b, 0x42000800, 0x00000002,
- 0x42001000, 0x0000dc00, 0x0201f000, 0x00107000,
- 0x42005000, 0x32000000, 0x42006000, 0x08290000,
- 0x41786800, 0x41787800, 0x0401f3f3, 0x42005000,
- 0x22000000, 0x42006000, 0x01290000, 0x41786800,
- 0x41787800, 0x0401f3ec, 0x42005000, 0x33000000,
- 0x42006000, 0x08980000, 0x41786800, 0x41787800,
- 0x0401f3e5, 0x42005000, 0x23000000, 0x42006000,
- 0x01980000, 0x41786800, 0x41787800, 0x0401f3de,
- 0x59300403, 0x82000c80, 0x00000085, 0x02001800,
- 0x0010032d, 0x82000c80, 0x00000093, 0x02021800,
- 0x0010032d, 0x82000480, 0x00000085, 0x0c01f001,
- 0x00106c16, 0x00106c16, 0x00106c16, 0x00106c16,
- 0x00106c16, 0x00106c16, 0x00106c16, 0x00106c16,
- 0x00106c16, 0x00106c16, 0x00106c16, 0x00106c16,
- 0x00106c16, 0x00106c18, 0x0201f800, 0x0010032d,
- 0x4d2c0000, 0x59325809, 0x4933c857, 0x492fc857,
- 0x812e59c0, 0x02000800, 0x0010032d, 0x59340a12,
- 0x82040d00, 0x0000ff00, 0x592c000b, 0x82000500,
- 0x000000ff, 0x900001c0, 0x80040540, 0x82000540,
- 0x00000011, 0x44034800, 0x81a5a000, 0x42001000,
- 0x00000009, 0x42000800, 0x00000003, 0x592c000a,
- 0x82000500, 0xff000000, 0x82001d80, 0x84000000,
- 0x04000009, 0x82001d80, 0x85000000, 0x02020800,
- 0x0010032d, 0x42001000, 0x00000007, 0x42000800,
- 0x00000001, 0x832c1c00, 0x0000000a, 0x500c0000,
- 0x4401a000, 0x800c1800, 0x80d1a000, 0x80081040,
- 0x040207fb, 0x42001000, 0x0000dc00, 0x5c025800,
- 0x0401f3b8, 0x42005000, 0x81000000, 0x42006000,
- 0x00090000, 0x41786800, 0x41787800, 0x59301407,
- 0x82081580, 0x00000005, 0x04020003, 0x42006000,
- 0x00890000, 0x0401f384, 0x59300403, 0x82000c80,
- 0x00000053, 0x02021800, 0x0010032d, 0x82000480,
- 0x0000004b, 0x02001800, 0x0010032d, 0x5932680a,
- 0x59368c03, 0x4803c857, 0x0c01f001, 0x00106cd5,
- 0x00106cdd, 0x00106ce5, 0x00106ced, 0x00106c6b,
- 0x00106c6b, 0x00106c6b, 0x00106ccd, 0x0201f800,
- 0x0010032d, 0x42005000, 0x06000000, 0x42006000,
- 0x08290000, 0x41786800, 0x41787800, 0x0401f366,
- 0x4933c857, 0x0401ff72, 0x4a01a006, 0x12000000,
- 0x59300407, 0x82000580, 0x00000004, 0x04020003,
- 0x59340002, 0x0401f002, 0x59a8000f, 0x82000500,
- 0x00ffffff, 0x4801a007, 0x5930041a, 0x4801a408,
- 0x5930021a, 0x4801a208, 0x42000800, 0x00000003,
- 0x42001000, 0x0000dc00, 0x0401f376, 0x0401ff5c,
- 0x4a01a006, 0x0f000000, 0x5930001d, 0x4801a007,
- 0x42000800, 0x00000002, 0x42001000, 0x0000dc00,
- 0x0401f36c, 0x0401ff60, 0x4a01a006, 0x02000000,
- 0x59c40085, 0x59880804, 0x80040c00, 0x48071004,
- 0x497b8885, 0x59880000, 0x4801a007, 0x59880001,
- 0x4801a008, 0x59880002, 0x4801a009, 0x59880003,
- 0x4801a00a, 0x59880004, 0x4801a00b, 0x59880005,
- 0x4801a00c, 0x42000800, 0x00000007, 0x42001000,
- 0x0000dc00, 0x0401f353, 0x4a026202, 0x0000ffff,
- 0x0401ff37, 0x4a01a006, 0x62000000, 0x5930001d,
- 0x4801a007, 0x42000800, 0x00000002, 0x42001000,
- 0x0000dc00, 0x0401f347, 0x0401ff2d, 0x59300809,
- 0x4c500000, 0x4c540000, 0x4c580000, 0x8204a400,
- 0x0000000b, 0x5930b01d, 0x82d0ac00, 0x00000006,
- 0x0201f800, 0x0010aee2, 0x5930081d, 0x42001000,
- 0x0000dc00, 0x5c00b000, 0x5c00a800, 0x5c00a000,
- 0x0401f334, 0x0401ffa0, 0x59300018, 0x4801a006,
- 0x59300019, 0x4801a007, 0x4a01a008, 0x00001000,
- 0x0401f020, 0x0401ff98, 0x59300018, 0x4801a006,
- 0x59300019, 0x4801a007, 0x4a01a008, 0x00004000,
- 0x0401f018, 0x0401ff90, 0x59300018, 0x4801a006,
- 0x59300019, 0x4801a007, 0x4a01a008, 0x00002000,
- 0x0401f010, 0x0401ff88, 0x59300018, 0x4801a006,
- 0x59300019, 0x4801a007, 0x4a01a008, 0x00000400,
- 0x0401f008, 0x0401ff80, 0x59300018, 0x4801a006,
- 0x59300019, 0x4801a007, 0x4a01a008, 0x00000200,
- 0x4979a009, 0x4979a00a, 0x4979a00b, 0x4979a00c,
- 0x4979a00d, 0x42000800, 0x00000008, 0x42001000,
- 0x0000dc00, 0x0401f303, 0x0401fef7, 0x4a01a006,
- 0x02000014, 0x4979a407, 0x4979a207, 0x59a8002d,
- 0x4801a008, 0x59a8002e, 0x4801a009, 0x4a01a00a,
- 0x00047878, 0x42000800, 0x00000005, 0x42001000,
- 0x0000dc00, 0x0401f2f3, 0x0401fee7, 0x4a01a006,
- 0x02140018, 0x4a01a407, 0x00000800, 0x5930001d,
- 0x82000d00, 0xff000000, 0x900409c0, 0x4805a207,
- 0x82000500, 0x00ffffff, 0x4801a00a, 0x4979a408,
- 0x4979a208, 0x4979a409, 0x4979a209, 0x4979a00b,
- 0x42000800, 0x00000006, 0x42001000, 0x0000dc00,
- 0x0401f2dc, 0x4933c857, 0x4937c857, 0x4d1c0000,
- 0x42000800, 0x00000035, 0x0201f800, 0x00108d34,
- 0x04020025, 0x0401feba, 0x4a01a006, 0x13000000,
- 0x5932381f, 0x59300403, 0x82000580, 0x00000057,
- 0x04000005, 0x591c0415, 0x8c000502, 0x02000800,
- 0x0010032d, 0x591c001a, 0x4801a005, 0x591c0407,
- 0x82000580, 0x00000003, 0x04000007, 0x5930080a,
- 0x58040002, 0x82000500, 0x00ffffff, 0x4801a007,
- 0x0401f003, 0x59a8000f, 0x4801a007, 0x5930041a,
- 0x4801a408, 0x5930021a, 0x4801a208, 0x42000800,
- 0x00000003, 0x42001000, 0x0000dc00, 0x5c023800,
- 0x0401f2b0, 0x4803c856, 0x0201f800, 0x001061b2,
- 0x598c000f, 0x81300580, 0x02020800, 0x0010032d,
- 0x0201f800, 0x00106102, 0x59300403, 0x82000580,
- 0x00000057, 0x02000800, 0x001078e7, 0x0201f800,
- 0x00020a10, 0x5c023800, 0x0201f000, 0x0010619f,
- 0x4803c856, 0x4d2c0000, 0x4d1c0000, 0x5932381f,
- 0x811e39c0, 0x02000800, 0x0010032d, 0x831c0580,
- 0xffffffff, 0x0400003d, 0x591c0c07, 0x82040580,
- 0x00000006, 0x0400000d, 0x82040580, 0x00000003,
- 0x0400003b, 0x4a026403, 0x00000037, 0x4a02641b,
- 0x00000003, 0x4a02621b, 0x00001700, 0x5c023800,
- 0x5c025800, 0x0401f06c, 0x0401f850, 0x42001000,
- 0x40000000, 0x591c0203, 0x591c0804, 0x8c040d3e,
- 0x04020023, 0x82000c80, 0x0000000e, 0x0c001003,
- 0x0201f800, 0x0010032d, 0x00106d9b, 0x00106da7,
- 0x00106d9d, 0x00106da7, 0x00106da3, 0x00106d9b,
- 0x00106d9b, 0x00106da7, 0x00106da7, 0x00106d9b,
- 0x00106d9b, 0x00106d9b, 0x00106d9b, 0x00106d9b,
- 0x00106da7, 0x00106d9b, 0x00106da7, 0x0201f800,
- 0x0010032d, 0x591c0415, 0x4803c857, 0x8c000518,
- 0x04000003, 0x8c000512, 0x04000003, 0x80001580,
- 0x0401f003, 0x42001000, 0x20000000, 0x591c0016,
- 0x4801a00a, 0x0401f01d, 0x0401f824, 0x42001000,
- 0x40000000, 0x41780000, 0x0401f7fa, 0x0401f81f,
- 0x591e5809, 0x812e59c0, 0x02000800, 0x0010032d,
- 0x592c1010, 0x591c0012, 0x80080480, 0x4801a00a,
- 0x591c0203, 0x591c0804, 0x8c040d3e, 0x04020007,
- 0x82000d80, 0x00000002, 0x04000007, 0x82000d80,
- 0x00000004, 0x04000004, 0x42001000, 0x40000000,
- 0x0401f002, 0x80001580, 0x4809a00b, 0x42000800,
- 0x00000006, 0x42001000, 0x0000dc00, 0x5c023800,
- 0x5c025800, 0x0401f233, 0x4803c856, 0x0401fe26,
- 0x4a01a006, 0x02000000, 0x59300c1a, 0x4805a407,
- 0x59300a1a, 0x4805a207, 0x59a8100f, 0x5930080a,
- 0x58041802, 0x820c1d00, 0x00ffffff, 0x5930081f,
- 0x82040580, 0xffffffff, 0x04000008, 0x58040407,
- 0x82000580, 0x00000003, 0x04020004, 0x4809a008,
- 0x480da009, 0x0401f003, 0x480da008, 0x4809a009,
- 0x1c01f000, 0x4803c856, 0x0401fe0b, 0x0401f003,
- 0x4803c856, 0x0401fe01, 0x4a01a006, 0x01000000,
- 0x5930041b, 0x4801a407, 0x5930021b, 0x4801a207,
- 0x42000800, 0x00000002, 0x42001000, 0x0000dc00,
- 0x0401f208, 0x4803c856, 0x4d1c0000, 0x0401fde5,
- 0x4a01a006, 0x14000000, 0x5932381f, 0x591c001a,
- 0x4801a005, 0x5930041a, 0x4801a407, 0x5930021a,
- 0x4801a207, 0x59300016, 0x4801a008, 0x59300217,
- 0x82000500, 0x000000ff, 0x840001c0, 0x4801a409,
- 0x42000800, 0x00000004, 0x42001000, 0x0000dc00,
- 0x5c023800, 0x0401f1ef, 0x4803c856, 0x0401fde2,
- 0x4a01a006, 0x02000001, 0x42001000, 0xe0000000,
- 0x59a80873, 0x8c040d3e, 0x04000004, 0x42001000,
- 0x20000000, 0x0401f010, 0x59a8006d, 0x8c000508,
- 0x04000004, 0x82081500, 0xdfffffff, 0x0401f00a,
- 0x59a80847, 0x82040d80, 0x01391077, 0x04020006,
- 0x59e00813, 0x8c040d00, 0x04000003, 0x82081500,
- 0xdfffffff, 0x59c40801, 0x82040d00, 0x00018000,
- 0x82040580, 0x00000000, 0x42000000, 0x00008000,
- 0x0400000d, 0x82040580, 0x00008000, 0x42000000,
- 0x00004000, 0x04000008, 0x82040580, 0x00010000,
- 0x42000000, 0x00002000, 0x04000003, 0x42000000,
- 0x00000002, 0x80080540, 0x4801a007, 0x42000800,
- 0x00000002, 0x42001000, 0x0000dc00, 0x0401f1b9,
- 0x4803c856, 0x0401f80b, 0x5930041b, 0x900001c0,
- 0x4801a005, 0x0401f9f0, 0x41780800, 0x42001000,
- 0x00005c00, 0x0401f9af, 0x0201f000, 0x0010596e,
- 0x4803c856, 0x59300818, 0x82041c00, 0x00000006,
- 0x46034800, 0x00000021, 0x58040405, 0x82000500,
- 0x0000f000, 0x82000580, 0x00003000, 0x04000003,
- 0x46034800, 0x00000041, 0x81a5a000, 0x580c0001,
- 0x82000d00, 0x00ffffff, 0x82040d40, 0xc2000000,
- 0x4805a000, 0x580c0800, 0x82041500, 0x00ffffff,
- 0x82000500, 0xff000000, 0x80080540, 0x4801a001,
- 0x580c0002, 0x82000580, 0x00c00000, 0x82000500,
- 0x00fd0300, 0x4801a002, 0x580c0003, 0x4801a003,
- 0x580c0404, 0x4801a404, 0x580c0204, 0x4801a204,
- 0x1c01f000, 0x4803c856, 0x59a8021b, 0x82000500,
- 0x00000028, 0x04020009, 0x59a8021b, 0x82000500,
- 0x00000028, 0x04000003, 0x497a6a12, 0x0401f003,
- 0x4a026a12, 0x0000ff00, 0x42005000, 0x22000000,
- 0x42006000, 0x01380000, 0x41786800, 0x41787800,
- 0x0401f949, 0x59301009, 0x4a01a006, 0x54000000,
- 0x59a8000f, 0x82000500, 0x00ffffff, 0x58080c0b,
- 0x800408f0, 0x80040540, 0x4801a007, 0x5808000b,
- 0x82000500, 0xff000000, 0x4801a008, 0x59a80002,
- 0x4801a009, 0x59a80003, 0x4801a00a, 0x59a80000,
- 0x4801a00b, 0x59a80001, 0x4801a00c, 0x5808000d,
- 0x9c0001c0, 0x4801a00d, 0x5808000e, 0x9c0001c0,
- 0x4801a00e, 0x5808000f, 0x9c0001c0, 0x4801a00f,
- 0x58080010, 0x9c0001c0, 0x4801a010, 0x58080011,
- 0x9c0001c0, 0x4801a011, 0x58080012, 0x9c0001c0,
- 0x4801a012, 0x58080013, 0x9c0001c0, 0x4801a013,
- 0x58080014, 0x9c0001c0, 0x4801a014, 0x58080011,
- 0x9c0001c0, 0x4801a015, 0x58080012, 0x9c0001c0,
- 0x4801a016, 0x58080013, 0x9c0001c0, 0x4801a017,
- 0x58080014, 0x9c0001c0, 0x4801a018, 0x42000800,
- 0x00000013, 0x42001000, 0x0000dc00, 0x0401f131,
- 0x4803c856, 0x42005000, 0x22000000, 0x42006000,
- 0x01290000, 0x41786800, 0x41787800, 0x0401f902,
- 0x59301009, 0x4a01a006, 0x55000000, 0x5808000c,
- 0x82000500, 0x00ffffff, 0x58080c0b, 0x800408f0,
- 0x80040540, 0x4801a007, 0x5808080b, 0x82040d00,
- 0xff000000, 0x59a8000f, 0x82000500, 0x00ffffff,
- 0x80040540, 0x4801a008, 0x5808000d, 0x9c0001c0,
- 0x4801a009, 0x5808000e, 0x9c0001c0, 0x4801a00a,
- 0x5808000f, 0x9c0001c0, 0x4801a00b, 0x58080010,
- 0x9c0001c0, 0x4801a00c, 0x59a80002, 0x4801a00d,
- 0x59a80003, 0x4801a00e, 0x59a80000, 0x4801a00f,
- 0x59a80001, 0x4801a010, 0x58080011, 0x4801a011,
- 0x58080012, 0x4801a012, 0x58080013, 0x4801a013,
- 0x58080014, 0x4801a014, 0x4979a015, 0x4979a016,
- 0x4979a017, 0x4979a018, 0x42000800, 0x00000013,
- 0x42001000, 0x0000dc00, 0x0401f0f2, 0x0401fce6,
- 0x5930001d, 0x800001c0, 0x04000008, 0x4a01a006,
- 0x01000000, 0x4a01a407, 0x00000003, 0x42000800,
- 0x00000002, 0x0401f028, 0x4a01a006, 0x02000000,
- 0x41780800, 0x836c0580, 0x00000004, 0x04020003,
- 0x84040d42, 0x0401f00d, 0x0201f800, 0x00104755,
- 0x04020003, 0x84040d4a, 0x0401f002, 0x84040d48,
- 0x59a8021b, 0x8c000506, 0x04020003, 0x8c00050a,
- 0x04000002, 0x84040d46, 0x4805a207, 0x59c40085,
- 0x48031004, 0x4c580000, 0x4c500000, 0x4c540000,
- 0x4200b000, 0x00000006, 0x8388a400, 0x00000000,
- 0x82d0ac00, 0x00000008, 0x0201f800, 0x0010aee2,
- 0x5c00a800, 0x5c00a000, 0x5c00b000, 0x42000800,
- 0x00000008, 0x42001000, 0x0000dc00, 0x0401f0bd,
- 0x0401fca3, 0x4a01a006, 0x56000000, 0x59340006,
- 0x4801a007, 0x59340007, 0x4801a008, 0x42000800,
- 0x00000003, 0x42001000, 0x0000dc00, 0x0401f0b1,
- 0x4803c856, 0x0401fca4, 0x5930081d, 0x800409c0,
- 0x0400000e, 0x82040580, 0x0000ffff, 0x04000004,
- 0x82040480, 0x00000007, 0x04021008, 0x4a01a006,
- 0x01000000, 0x4a01a407, 0x00000003, 0x42000800,
- 0x00000002, 0x0401f012, 0x4a01a006, 0x0200001c,
- 0x4a01a007, 0x00000001, 0x42001000, 0x0010b946,
- 0x50080000, 0x9c0001c0, 0x4801a009, 0x59a8000f,
- 0x4801a00a, 0x59a80002, 0x59a80803, 0x4801a00b,
- 0x4805a00c, 0x42000800, 0x00000007, 0x42001000,
- 0x0000dc00, 0x0401f08b, 0x4d2c0000, 0x0401fc70,
- 0x59325809, 0x592c0009, 0x82000500, 0x00ffffff,
- 0x4801a001, 0x4a01a006, 0x51000000, 0x5c025800,
- 0x0201f000, 0x00106a56, 0x4803c856, 0x59325809,
- 0x5932680a, 0x59300407, 0x4803c857, 0x82000d80,
- 0x00000009, 0x0400000a, 0x82000d80, 0x0000000a,
- 0x04000032, 0x82000d80, 0x00000012, 0x02000000,
- 0x0010aa24, 0x0201f800, 0x0010032d, 0x59300016,
- 0x8c00051e, 0x04020020, 0x42005000, 0x04000000,
- 0x42006000, 0x05000000, 0x592c040b, 0x82000500,
- 0x00000030, 0x800000e0, 0x80306540, 0x5934000a,
- 0x8c000508, 0x04000002, 0x84306546, 0x41786800,
- 0x41787800, 0x0401f831, 0x59300c17, 0x80040000,
- 0x48026417, 0x40040000, 0x800000d0, 0x82000540,
- 0x00000020, 0x4801a403, 0x83180d40, 0x00000038,
- 0x42001000, 0x0000c920, 0x0401f86d, 0x0201f000,
- 0x00105973, 0x59a8021b, 0x82000500, 0x00000028,
- 0x04000003, 0x497a6a12, 0x0401f7dc, 0x4a026a12,
- 0x0000ff00, 0x0401f7d9, 0x42005000, 0x02000000,
- 0x42006000, 0x20290000, 0x41786800, 0x41787800,
- 0x0401f812, 0x83180d40, 0x00000038, 0x42001000,
- 0x0000c9a0, 0x0401f856, 0x42000800, 0x00000004,
- 0x59300012, 0x82000500, 0xfff00000, 0x80000540,
- 0x02000000, 0x00105975, 0x42000800, 0x0000000e,
- 0x0201f000, 0x00105975, 0x4201a000, 0x00000000,
- 0x0401f003, 0x4201a000, 0x00000011, 0x59340a12,
- 0x82040d00, 0x0000ff00, 0x59a8000f, 0x82000500,
- 0x000000ff, 0x900001c0, 0x80040540, 0x80d00540,
- 0x44034800, 0x81a5a000, 0x59340002, 0x82000500,
- 0x00ffffff, 0x59300c03, 0x82040d80, 0x00000031,
- 0x04020002, 0x41780000, 0x80280540, 0x4801a000,
- 0x59a8000f, 0x4801a001, 0x4831a002, 0x82340540,
- 0x00000000, 0x4801a003, 0x59300402, 0x4801a404,
- 0x59300a02, 0x4805a204, 0x8c30652e, 0x04000003,
- 0x4805a404, 0x4801a204, 0x483da005, 0x1c01f000,
- 0x4807c857, 0x4c040000, 0x0401f82a, 0x5c000800,
- 0x40040000, 0x80081540, 0x800000c4, 0x82000540,
- 0x00002000, 0x4803910a, 0x59b400f6, 0x82000500,
- 0x00000018, 0x040207fd, 0x42001800, 0x0010b999,
- 0x580c0004, 0x4803c857, 0x580c0006, 0x4803c857,
- 0x580c1800, 0x480fc857, 0x4a0368f0, 0x0010b998,
- 0x4a0368f1, 0x0010b99f, 0x480b68f3, 0x4a0378e4,
- 0x00008000, 0x0201f000, 0x0010596e, 0x4807c857,
- 0x480a2800, 0x4c040000, 0x0401f80a, 0x5c000800,
- 0x59b400f6, 0x8c00050a, 0x040207fe, 0x49a768f2,
- 0x480768f4, 0x4a0378e4, 0x00008000, 0x1c01f000,
- 0x4a0378e4, 0x0000c000, 0x59bc00e4, 0x8c000520,
- 0x0400000c, 0x4a0378e4, 0x00008000, 0x42007000,
- 0x000003e8, 0x59bc00e4, 0x8c000520, 0x040007f5,
- 0x80387040, 0x02000800, 0x0010032d, 0x0401f7fa,
- 0x1c01f000, 0x82000500, 0xffff0000, 0x82000580,
- 0x01050000, 0x0402000d, 0x599c0818, 0x8c040d10,
- 0x0400000a, 0x59a80806, 0x8c040d0a, 0x04000007,
- 0x42001000, 0x0000804f, 0x41781800, 0x41782000,
- 0x0201f800, 0x001031f5, 0x1c01f000, 0x1c01f000,
- 0x59a80052, 0x800001c0, 0x0400004d, 0x4d2c0000,
- 0x4d300000, 0x4c5c0000, 0x4c600000, 0x4c640000,
- 0x40025800, 0x4000c000, 0x4000c800, 0x42026000,
- 0x0010f628, 0x592c0407, 0x81440580, 0x04020035,
- 0x592c0205, 0x82000580, 0x00000055, 0x04000005,
- 0x8d3e7d18, 0x0400002f, 0x8d3e7d16, 0x0402002d,
- 0x40640000, 0x812c0580, 0x0402001b, 0x59300203,
- 0x82000580, 0x00000000, 0x04000013, 0x59300009,
- 0x800001c0, 0x04000010, 0x0201f800, 0x001061b2,
- 0x4df00000, 0x0201f800, 0x0010609c, 0x0201f800,
- 0x0010e3bd, 0x80c40040, 0x04020003, 0x4a026203,
- 0x00000000, 0x5c03e000, 0x02000800, 0x0010619f,
- 0x497a6009, 0x592cc800, 0x4064c000, 0x4064b800,
- 0x0401f003, 0x592cb800, 0x485cc000, 0x497a5800,
- 0x592c0205, 0x82000580, 0x00000155, 0x04000004,
- 0x0201f800, 0x00100580, 0x0401f004, 0x49425a07,
- 0x0201f800, 0x000203ab, 0x405e5800, 0x0401f003,
- 0x412cc000, 0x592e5800, 0x812e59c0, 0x040207c6,
- 0x48675052, 0x48635053, 0x5c00c800, 0x5c00c000,
- 0x5c00b800, 0x5c026000, 0x5c025800, 0x1c01f000,
- 0x4943c857, 0x4d440000, 0x4d340000, 0x4c580000,
- 0x4200b000, 0x000007f0, 0x417a8800, 0x0201f800,
- 0x00020319, 0x04020002, 0x0401ffa6, 0x81468800,
- 0x8058b040, 0x040207fa, 0x83440480, 0x00000800,
- 0x04021008, 0x8d3e7d02, 0x04000006, 0x42028800,
- 0x000007f0, 0x4200b000, 0x00000010, 0x0401f7f0,
- 0x5c00b000, 0x5c026800, 0x5c028800, 0x1c01f000,
- 0x4d300000, 0x59a81052, 0x800811c0, 0x0400001c,
- 0x42026000, 0x0010f628, 0x59300203, 0x82000580,
- 0x00000000, 0x04020016, 0x58080803, 0x4806600a,
- 0x480a6009, 0x4a026407, 0x00000005, 0x4a026203,
- 0x00000001, 0x4a026403, 0x00000092, 0x41780800,
- 0x58080205, 0x82000580, 0x00000055, 0x04000003,
- 0x42000800, 0x00000001, 0x48066421, 0x42000800,
- 0x80000040, 0x0201f800, 0x000209b1, 0x5c026000,
- 0x1c01f000, 0x4d900000, 0x4dd00000, 0x4da40000,
- 0x4d140000, 0x4d180000, 0x4803c856, 0x417a3000,
- 0x0201f800, 0x001067aa, 0x59900804, 0x800409c0,
- 0x04000015, 0x83947c00, 0x00000009, 0x83180400,
- 0x001057e9, 0x50000000, 0x803c7c00, 0x583c0003,
- 0x811808ca, 0x82040c00, 0x00006139, 0x50040800,
- 0x80040580, 0x04000008, 0x42000000, 0x0010bd81,
- 0x0201f800, 0x0010ae10, 0x82000540, 0x00000001,
- 0x0401f005, 0x811a3000, 0x83180580, 0x00000005,
- 0x040207e4, 0x5c023000, 0x5c022800, 0x5c034800,
- 0x5c03a000, 0x5c032000, 0x1c01f000, 0x4d900000,
- 0x4dd00000, 0x4da40000, 0x4d140000, 0x4d180000,
- 0x4803c856, 0x598c080f, 0x800409c0, 0x04000003,
- 0x0201f800, 0x0010596e, 0x417a3000, 0x0201f800,
- 0x001067aa, 0x59900804, 0x800409c0, 0x04000012,
- 0x83947c00, 0x00000009, 0x83180400, 0x001057e9,
- 0x50000000, 0x803c7c00, 0x811808ca, 0x82040c00,
- 0x00006139, 0x50040800, 0x48047803, 0x4a007801,
- 0x000001f4, 0x4a007800, 0x0000000a, 0x4a007802,
- 0x00000004, 0x811a3000, 0x83180580, 0x00000005,
- 0x040207e7, 0x5c023000, 0x5c022800, 0x5c034800,
- 0x5c03a000, 0x5c032000, 0x1c01f000, 0x41781000,
- 0x42026000, 0x0010f694, 0x59a8180d, 0x480a6402,
- 0x4a026202, 0x0000ffff, 0x80081000, 0x800c1840,
- 0x04000004, 0x83326400, 0x00000024, 0x0401f7f8,
- 0x1c01f000, 0x0201f800, 0x00020a10, 0x1c01f000,
- 0x5c036000, 0x4db00000, 0x49b3c857, 0x4933c857,
- 0x813261c0, 0x0400003b, 0x59300203, 0x82000580,
- 0x00000000, 0x04000037, 0x59300004, 0x8c00053e,
- 0x02020800, 0x0010032d, 0x59300407, 0x4803c857,
- 0x82000d80, 0x00000004, 0x04000011, 0x82000d80,
- 0x00000001, 0x0400000e, 0x82000d80, 0x00000003,
- 0x04000006, 0x82000d80, 0x00000006, 0x04020019,
- 0x0201f800, 0x0010a26a, 0x5930001d, 0x800001c0,
- 0x02020800, 0x001091d8, 0x0401f012, 0x5930000a,
- 0x82000580, 0x0010c2b2, 0x0400000e, 0x5930081f,
- 0x4807c857, 0x4d300000, 0x40066000, 0x0201f800,
- 0x00109291, 0x5c026000, 0x04020006, 0x5804001d,
- 0x4803c857, 0x81300580, 0x04020002, 0x4978081d,
- 0x4a026407, 0x00000007, 0x497a6009, 0x4a026004,
- 0x00004000, 0x59a8002a, 0x82000c80, 0x00000051,
- 0x04001002, 0x80000102, 0x48026006, 0x497a6205,
- 0x1c01f000, 0x0401f803, 0x41318800, 0x1c01f000,
- 0x83640480, 0x00000010, 0x04021008, 0x42000000,
- 0x0010bd10, 0x0201f800, 0x0010ae10, 0x4967c857,
- 0x80026580, 0x1c01f000, 0x8166c9c0, 0x0400001c,
- 0x41626000, 0x41580000, 0x59300a03, 0x82040d80,
- 0x00000000, 0x04000008, 0x83326400, 0x00000024,
- 0x81300c80, 0x040017f9, 0x42026000, 0x0010f694,
- 0x0401f7f6, 0x4933c857, 0x8166c840, 0x83300c00,
- 0x00000024, 0x80040480, 0x04021006, 0x4006c000,
- 0x4a026203, 0x00000008, 0x813261c0, 0x1c01f000,
- 0x4202c000, 0x0010f694, 0x0401f7fa, 0x42000000,
- 0x0010bd10, 0x0201f800, 0x0010ae10, 0x4933c856,
- 0x417a6000, 0x0401f7f5, 0x0201f800, 0x00020a34,
- 0x1c01f000, 0x4933c857, 0x83380580, 0x00000013,
- 0x0402000b, 0x59300004, 0x8c00053e, 0x04000007,
- 0x0201f800, 0x001061b2, 0x0201f800, 0x00106102,
- 0x0201f800, 0x0010619f, 0x1c01f000, 0x4933c857,
- 0x598800b7, 0x80000000, 0x480310b7, 0x1c01f000,
- 0x4933c857, 0x59300203, 0x82003480, 0x0000000e,
- 0x02021800, 0x0010032d, 0x4d2c0000, 0x0c01f803,
- 0x5c025800, 0x1c01f000, 0x001071e4, 0x001077b4,
- 0x00107919, 0x001071e4, 0x00107991, 0x0010736c,
- 0x001071e4, 0x001071e4, 0x00107740, 0x001071e4,
- 0x001071e4, 0x001071e4, 0x001071e4, 0x001071e4,
- 0x0201f800, 0x0010032d, 0x4933c857, 0x59300203,
- 0x82003480, 0x0000000e, 0x02021800, 0x0010032d,
- 0x0c01f001, 0x001071fb, 0x00108352, 0x001071fb,
- 0x001071fb, 0x001071fb, 0x001071fb, 0x001071fb,
- 0x001071fb, 0x001082ee, 0x0010837c, 0x001083f2,
- 0x0010837c, 0x001083f2, 0x001071fb, 0x0201f800,
- 0x0010032d, 0x0201f800, 0x0010032d, 0x4933c857,
- 0x4d2c0000, 0x59325809, 0x59300203, 0x82003480,
- 0x0000000e, 0x02021800, 0x0010032d, 0x0c01f803,
- 0x5c025800, 0x1c01f000, 0x00107218, 0x00107218,
- 0x00107218, 0x00107234, 0x00107280, 0x00107218,
- 0x00107218, 0x00107218, 0x0010721a, 0x00107218,
- 0x00107218, 0x00107218, 0x00107218, 0x00107218,
- 0x0201f800, 0x0010032d, 0x4933c857, 0x83380580,
- 0x00000040, 0x02020800, 0x0010032d, 0x4a026008,
- 0x00082000, 0x4a026203, 0x00000003, 0x493a6403,
- 0x4a025c09, 0x00000001, 0x592c000e, 0x48026012,
- 0x497a6014, 0x592c0209, 0x800000c2, 0x800010c4,
- 0x80081400, 0x480a6006, 0x0201f800, 0x00020154,
- 0x42000800, 0x80000060, 0x0201f000, 0x000209a3,
- 0x4933c857, 0x83380480, 0x00000050, 0x02021800,
- 0x0010032d, 0x83380480, 0x00000049, 0x02001800,
- 0x0010032d, 0x0c01f001, 0x00107247, 0x00107252,
- 0x00107245, 0x00107245, 0x00107245, 0x00107245,
- 0x0010725d, 0x0201f800, 0x0010032d, 0x4a026203,
- 0x00000004, 0x4a025c09, 0x00000002, 0x592c0208,
- 0x48025c0a, 0x592c020a, 0x48025a08, 0x592c000d,
- 0x4802580e, 0x1c01f000, 0x0201f800, 0x001060e2,
- 0x0201f800, 0x00108953, 0x04000005, 0x4a025a07,
- 0x00000006, 0x0201f800, 0x000203ab, 0x0201f000,
- 0x00020a10, 0x0201f800, 0x001060e2, 0x4d3c0000,
- 0x417a7800, 0x0201f800, 0x0010e06f, 0x5c027800,
- 0x42003000, 0x00000014, 0x41782800, 0x42002000,
- 0x00000002, 0x4d400000, 0x4d440000, 0x59368c03,
- 0x42028000, 0x00000029, 0x0201f800, 0x001091ea,
- 0x5c028800, 0x5c028000, 0x42000000, 0x0010bd1d,
- 0x0201f800, 0x0010ae10, 0x0201f800, 0x00108953,
- 0x02000000, 0x00020a10, 0x4a025a07, 0x00000029,
- 0x0201f800, 0x000203ab, 0x0201f000, 0x00020a10,
- 0x4933c857, 0x83380580, 0x00000048, 0x04000005,
- 0x83380580, 0x00000053, 0x02020800, 0x0010032d,
- 0x592c0207, 0x82000580, 0x00000007, 0x04000009,
- 0x59300012, 0x80000540, 0x04000006, 0x592c080d,
- 0x80040480, 0x4802580d, 0x4a025a07, 0x00000015,
- 0x592c0207, 0x80000540, 0x04020003, 0x4a025a07,
- 0x00000000, 0x0201f800, 0x000203ab, 0x0201f000,
- 0x00020a10, 0x4933c857, 0x4d2c0000, 0x4c500000,
- 0x4c540000, 0x4c580000, 0x4c5c0000, 0x4c600000,
- 0x4c640000, 0x4c100000, 0x0201f800, 0x0010056f,
- 0x02000800, 0x0010032d, 0x497a5a07, 0x59a8006c,
- 0x82000500, 0x0000f000, 0x48025c08, 0x59a8085a,
- 0x82040c00, 0x00000018, 0x48065a08, 0x412cb800,
- 0x4d2c0000, 0x41cca000, 0x4200c000, 0x00000001,
- 0x4200c800, 0x0000002c, 0x82040480, 0x0000002d,
- 0x04021006, 0x832cac00, 0x0000000a, 0x0201f800,
- 0x001084c8, 0x0401f030, 0x40043000, 0x42000800,
- 0x0000002c, 0x832cac00, 0x0000000a, 0x0201f800,
- 0x001084c8, 0x82183480, 0x0000002c, 0x4c180000,
- 0x0201f800, 0x0010056f, 0x5c003000, 0x0400001a,
- 0x8060c000, 0x4a025805, 0x00000110, 0x492cb801,
- 0x82180c80, 0x0000003d, 0x04021007, 0x40180800,
- 0x832cac00, 0x00000006, 0x0201f800, 0x001084c8,
- 0x0401f015, 0x8264cc00, 0x0000003c, 0x82183480,
- 0x0000003c, 0x42000800, 0x0000003c, 0x412cb800,
- 0x832cac00, 0x00000006, 0x0201f800, 0x001084c8,
- 0x0401f7e3, 0x5c025800, 0x592c0207, 0x8400055e,
- 0x48025a07, 0x592c0408, 0x80640540, 0x48025c08,
- 0x0401f002, 0x5c025800, 0x5c002000, 0x813669c0,
- 0x04000003, 0x59343403, 0x0401f003, 0x42003000,
- 0x0000ffff, 0x49325809, 0x481a5c07, 0x82100580,
- 0x00000054, 0x04020013, 0x4a025809, 0xffffffff,
- 0x491e5814, 0x41781000, 0x831c0580, 0xffffffff,
- 0x0400000b, 0x591c0009, 0x80000d40, 0x04000008,
- 0x58040205, 0x82000500, 0x000000ff, 0x82000580,
- 0x00000012, 0x04020002, 0x58041006, 0x480a5806,
- 0x846001c0, 0x80100540, 0x48025805, 0x0201f800,
- 0x0010af31, 0x04020011, 0x592c0001, 0x497a5801,
- 0x4c000000, 0x0201f800, 0x000203ab, 0x5c025800,
- 0x812e59c0, 0x040207f6, 0x5c00c800, 0x5c00c000,
- 0x5c00b800, 0x5c00b000, 0x5c00a800, 0x5c00a000,
- 0x5c025800, 0x1c01f000, 0x0201f800, 0x0010a4d8,
- 0x0401f7f6, 0x4803c856, 0x4c5c0000, 0x4d2c0000,
- 0x4c500000, 0x4c540000, 0x4c580000, 0x412cb800,
- 0x592c040c, 0x8c000516, 0x04000003, 0x41cca000,
- 0x0401f003, 0x83cca400, 0x00000006, 0x4008b000,
- 0x41781000, 0x82580480, 0x0000004c, 0x04001004,
- 0x4200b000, 0x0000004c, 0x40001000, 0x4c080000,
- 0x4d2c0000, 0x0201f800, 0x0010056f, 0x04000026,
- 0x5c001800, 0x492c1801, 0x485a5800, 0x8258b400,
- 0x00000003, 0x8058b104, 0x832cac00, 0x00000002,
- 0x0201f800, 0x0010af0c, 0x585c040c, 0x8c000500,
- 0x0400000e, 0x832c1400, 0x00000002, 0x8c000516,
- 0x04000003, 0x82081400, 0x00000006, 0x46001000,
- 0x00000001, 0x80081000, 0x46001000, 0x00000900,
- 0x84000500, 0x4800bc0c, 0x5c001000, 0x800811c0,
- 0x040207d7, 0x82000540, 0x00000001, 0x5c00b000,
- 0x5c00a800, 0x5c00a000, 0x5c025800, 0x5c00b800,
- 0x1c01f000, 0x5c025800, 0x5c001000, 0x0401f7f8,
- 0x4933c857, 0x83380d80, 0x00000015, 0x04020003,
- 0x0201f000, 0x00020a10, 0x83380d80, 0x00000016,
- 0x02020800, 0x0010032d, 0x0201f000, 0x00020a10,
- 0x4933c857, 0x4d2c0000, 0x4c500000, 0x4c540000,
- 0x4c580000, 0x59325809, 0x83cca400, 0x00000006,
- 0x59cc1806, 0x820c0580, 0x01000000, 0x04020004,
- 0x4200b000, 0x00000002, 0x0401f00f, 0x4200b000,
- 0x00000008, 0x832cac00, 0x00000006, 0x0201f800,
- 0x0010aee2, 0x8c0c1d00, 0x0400000b, 0x4200b000,
- 0x00000008, 0x592e5801, 0x812e59c0, 0x02000800,
- 0x0010032d, 0x832cac00, 0x00000006, 0x0201f800,
- 0x0010aee2, 0x0401f816, 0x5c00b000, 0x5c00a800,
- 0x5c00a000, 0x5c025800, 0x1c01f000, 0x4933c857,
- 0x4c500000, 0x4c540000, 0x4c580000, 0x83cca400,
- 0x00000006, 0x5930a809, 0x8254ac00, 0x00000006,
- 0x4200b000, 0x00000007, 0x0201f800, 0x0010aee2,
- 0x5c00b000, 0x5c00a800, 0x5c00a000, 0x4933c857,
- 0x0201f800, 0x00108953, 0x02000000, 0x00020a10,
- 0x4d2c0000, 0x0201f800, 0x00108f1d, 0x0402000b,
- 0x41780800, 0x4d400000, 0x42028000, 0x00000000,
- 0x0201f800, 0x00108db8, 0x5c028000, 0x5c025800,
- 0x0201f000, 0x00020a10, 0x5931d822, 0x58ef400a,
- 0x58ee580c, 0x4a025a05, 0x00000103, 0x58ec0008,
- 0x0801f800, 0x5c025800, 0x0201f000, 0x00020a10,
- 0x4933c857, 0x59cc1806, 0x820c0580, 0x02000000,
- 0x04020020, 0x4a026802, 0x00fffffd, 0x5934000a,
- 0x84000504, 0x4802680a, 0x59300c1e, 0x82040580,
- 0x00000021, 0x04020009, 0x42001800, 0x0000ffff,
- 0x42002000, 0x00000004, 0x42003000, 0x00000012,
- 0x0201f800, 0x0010326a, 0x59300809, 0x800409c0,
- 0x02000000, 0x00020a10, 0x4a000a05, 0x00000103,
- 0x480c0806, 0x5931d822, 0x58ef400a, 0x58ee580c,
- 0x58ec0008, 0x0801f800, 0x0201f000, 0x00020a10,
- 0x42000000, 0x0010bd26, 0x0201f800, 0x0010ae10,
- 0x4c0c0000, 0x0401f804, 0x5c001800, 0x040207eb,
- 0x1c01f000, 0x4933c857, 0x4d2c0000, 0x59325809,
- 0x812e59c0, 0x04020009, 0x497a6006, 0x497a6205,
- 0x4d380000, 0x42027000, 0x00000022, 0x0401fbab,
- 0x5c027000, 0x80000580, 0x5c025800, 0x1c01f000,
- 0x4933c857, 0x4d2c0000, 0x4c500000, 0x4c540000,
- 0x4c580000, 0x59325809, 0x592e5801, 0x832cac00,
- 0x00000006, 0x83cca400, 0x00000006, 0x59a8086c,
- 0x82040d00, 0x000003ff, 0x82041480, 0x0000000f,
- 0x0400101b, 0x4200b000, 0x0000000f, 0x0201f800,
- 0x0010aee2, 0x592e5801, 0x832cac00, 0x00000006,
- 0x82080c80, 0x0000000f, 0x0400100d, 0x4200b000,
- 0x0000000f, 0x0201f800, 0x0010aee2, 0x592e5801,
- 0x832cac00, 0x00000006, 0x82041480, 0x0000000f,
- 0x04001007, 0x42001000, 0x0000000f, 0x4008b000,
- 0x0201f800, 0x0010aee2, 0x0401f004, 0x4004b000,
- 0x0201f800, 0x0010aee2, 0x5931d822, 0x58ef400a,
- 0x58ee580c, 0x4a025a05, 0x00000103, 0x592e5801,
- 0x58ec0008, 0x0801f800, 0x0201f800, 0x00020a10,
- 0x5c00b000, 0x5c00a800, 0x5c00a000, 0x5c025800,
- 0x1c01f000, 0x4933c857, 0x4d2c0000, 0x4c500000,
- 0x4c540000, 0x4c580000, 0x59cc0006, 0x82000d80,
- 0x01000000, 0x0400002d, 0x59cc0007, 0x9000b1c0,
- 0x8258b500, 0x000000ff, 0x8058b104, 0x8258b400,
- 0x00000002, 0x82580c80, 0x00000007, 0x04001003,
- 0x4200b000, 0x00000006, 0x83cca400, 0x00000006,
- 0x59301009, 0x800811c0, 0x02000800, 0x0010032d,
- 0x8208ac00, 0x00000006, 0x0201f800, 0x0010aee2,
- 0x82000d00, 0xff000000, 0x800409c0, 0x0400001a,
- 0x8200b500, 0x000000ff, 0x04000017, 0x8058b104,
- 0x82580c80, 0x0000000e, 0x04001003, 0x4200b000,
- 0x0000000d, 0x58081001, 0x800811c0, 0x02000800,
- 0x0010032d, 0x8208ac00, 0x00000006, 0x0201f800,
- 0x0010aee2, 0x0401f008, 0x59301009, 0x800811c0,
- 0x02000800, 0x0010032d, 0x48001006, 0x59cc0007,
- 0x48001007, 0x0401ff2e, 0x5c00b000, 0x5c00a800,
- 0x5c00a000, 0x5c025800, 0x1c01f000, 0x4933c857,
- 0x42000800, 0x00000000, 0x59cc0006, 0x82000580,
- 0x02000000, 0x04000003, 0x42000800, 0x00000001,
- 0x4d2c0000, 0x59325809, 0x812e59c0, 0x02000800,
- 0x0010032d, 0x48065a07, 0x0201f800, 0x000203ab,
- 0x5c025800, 0x0201f000, 0x00020a10, 0x4933c857,
- 0x4d2c0000, 0x4c500000, 0x4c540000, 0x4c580000,
- 0x4200b000, 0x00000002, 0x59cc0806, 0x82040580,
- 0x01000000, 0x04000004, 0x8204b500, 0x0000ffff,
- 0x8058b104, 0x83cca400, 0x00000006, 0x59300009,
- 0x8200ac00, 0x00000006, 0x0201f800, 0x0010aee2,
- 0x0401feff, 0x5c00b000, 0x5c00a800, 0x5c00a000,
- 0x5c025800, 0x1c01f000, 0x4933c857, 0x4803c857,
- 0x4807c857, 0x480bc857, 0x480fc857, 0x4813c857,
- 0x481bc857, 0x492fc857, 0x4d2c0000, 0x4c000000,
- 0x0201f800, 0x0010055a, 0x5c000000, 0x0400000f,
- 0x48025803, 0x481a5801, 0x48125808, 0x48065805,
- 0x480a5806, 0x480e5807, 0x5c001000, 0x4c080000,
- 0x480a5809, 0x412c1000, 0x0201f800, 0x00020016,
- 0x82000540, 0x00000001, 0x5c025800, 0x1c01f000,
- 0x4933c857, 0x4937c857, 0x4d1c0000, 0x0201f800,
- 0x0010577f, 0x04020025, 0x59cc0001, 0x82000500,
- 0x00ffffff, 0x59341002, 0x82081500, 0x00ffffff,
- 0x80080580, 0x0402001d, 0x497a6205, 0x42000800,
- 0x00000035, 0x0201f800, 0x00108d34, 0x04020012,
- 0x591c001d, 0x800001c0, 0x0400000f, 0x497a381d,
- 0x591c0415, 0x8c000502, 0x02000800, 0x0010032d,
- 0x84000502, 0x48023c15, 0x591c1407, 0x82080580,
- 0x00000003, 0x04000006, 0x82080580, 0x00000006,
- 0x04000005, 0x0401fc4b, 0x0401f004, 0x0401f805,
- 0x0401f002, 0x0401f8d2, 0x5c023800, 0x1c01f000,
- 0x4d2c0000, 0x591e5809, 0x4933c857, 0x491fc857,
- 0x493bc857, 0x492fc857, 0x83380580, 0x00000015,
- 0x040000c5, 0x83380580, 0x00000016, 0x040200c0,
- 0x4d300000, 0x411e6000, 0x59cc0207, 0x4803c857,
- 0x82000d00, 0x0000ff00, 0x82040580, 0x00001700,
- 0x04000004, 0x82040580, 0x00000300, 0x04020063,
- 0x591c0203, 0x4803c857, 0x82000580, 0x0000000d,
- 0x04000044, 0x812e59c0, 0x040000ac, 0x591c0202,
- 0x4803c857, 0x82000580, 0x0000ffff, 0x0402008f,
- 0x592c020b, 0x4803c857, 0x82000500, 0x00000003,
- 0x82000580, 0x00000002, 0x04020007, 0x592c0810,
- 0x591c0012, 0x4803c857, 0x4807c857, 0x80040580,
- 0x04020082, 0x591c0415, 0x4803c857, 0x8c000500,
- 0x0402007e, 0x42000000, 0x0010bd03, 0x0201f800,
- 0x0010ae10, 0x41780800, 0x591c1006, 0x42000000,
- 0x0000000a, 0x0201f800, 0x0010600e, 0x592c0407,
- 0x4803c857, 0x800001c0, 0x0400000c, 0x80080c80,
- 0x04001004, 0x02020800, 0x0010032d, 0x80001040,
- 0x480a5c07, 0x800811c0, 0x04020004, 0x0201f800,
- 0x0010ea61, 0x0401f079, 0x0201f800, 0x00108a55,
- 0x591c0818, 0x591c0019, 0x48065809, 0x4802580a,
- 0x59300008, 0x8c000500, 0x02020800, 0x00100bd5,
- 0x497a3809, 0x0201f800, 0x0002029a, 0x04020057,
- 0x411e6000, 0x0201f800, 0x00107144, 0x0401f067,
- 0x0401fc28, 0x04000016, 0x591c0006, 0x48026006,
- 0x4936600a, 0x4a026407, 0x00000003, 0x492e6009,
- 0x591c0818, 0x591c1019, 0x48066018, 0x480a6019,
- 0x4d380000, 0x591e7403, 0x4d300000, 0x411e6000,
- 0x0201f800, 0x00107144, 0x5c026000, 0x0201f800,
- 0x00020a34, 0x5c027000, 0x0401f050, 0x59a8002c,
- 0x48023a05, 0x0401f04d, 0x59cc0407, 0x82000580,
- 0x0000000b, 0x0402002e, 0x59340a00, 0x84040d0e,
- 0x48066a00, 0x592c0a05, 0x82040d00, 0x000000ff,
- 0x82040d80, 0x00000014, 0x04000003, 0x4a02621e,
- 0x00000003, 0x59300008, 0x8c000500, 0x02020800,
- 0x00100bd5, 0x4d400000, 0x497a5c0a, 0x42028000,
- 0x00000003, 0x592c0a09, 0x0201f800, 0x00104543,
- 0x0201f800, 0x0010af23, 0x04020009, 0x0201f800,
- 0x000203ab, 0x59300a1e, 0x82040d80, 0x00000003,
- 0x02000800, 0x00108a55, 0x497a6009, 0x5c028000,
- 0x4a026403, 0x00000085, 0x4a026203, 0x00000009,
- 0x4a026407, 0x00000002, 0x42000800, 0x8000404b,
- 0x0201f800, 0x000209b1, 0x0401f01c, 0x59cc0207,
- 0x82000580, 0x00002a00, 0x04020004, 0x59a8002c,
- 0x48023a05, 0x0401f015, 0x812e59c0, 0x02000800,
- 0x0010032d, 0x4a025a05, 0x00000103, 0x591c0008,
- 0x8c000500, 0x02020800, 0x00100bd5, 0x591c0402,
- 0x48025c07, 0x4a025a07, 0x00000003, 0x497a5c0a,
- 0x0201f800, 0x000203ab, 0x0201f800, 0x00107144,
- 0x0201f800, 0x00104126, 0x5c026000, 0x0201f800,
- 0x00020a10, 0x0401f002, 0x5c026000, 0x5c025800,
- 0x1c01f000, 0x0401f819, 0x0401f7fd, 0x4933c857,
- 0x83380580, 0x00000015, 0x04020004, 0x59a8002c,
- 0x48023a05, 0x0401f00d, 0x83380580, 0x00000016,
- 0x0402000d, 0x4d300000, 0x411e6000, 0x0201f800,
- 0x0010a26a, 0x0201f800, 0x00020979, 0x0201f800,
- 0x00020a10, 0x5c026000, 0x497a381d, 0x0201f800,
- 0x00020a10, 0x1c01f000, 0x4c5c0000, 0x591c0415,
- 0x84000540, 0x48023c15, 0x59ccb80b, 0x4933c857,
- 0x491fc857, 0x492fc857, 0x4803c857, 0x485fc857,
- 0x8c5cbd3c, 0x04000005, 0x59a8002c, 0x48023a05,
- 0x497a381d, 0x0401f057, 0x4d300000, 0x411e6000,
- 0x0201f800, 0x00108530, 0x5c026000, 0x591c0407,
- 0x82000580, 0x00000000, 0x0400004e, 0x591c0403,
- 0x82000580, 0x00000050, 0x0402000c, 0x4d300000,
- 0x411e6000, 0x4a026203, 0x00000001, 0x42000800,
- 0x80000043, 0x0201f800, 0x000209b1, 0x5c026000,
- 0x497a381d, 0x0401f03f, 0x591c0203, 0x82000580,
- 0x0000000d, 0x0400001f, 0x812e59c0, 0x02000800,
- 0x0010032d, 0x592c020b, 0x4803c857, 0x8c000500,
- 0x0402001f, 0x8c000502, 0x04000016, 0x591c0415,
- 0x8c00051c, 0x04020007, 0x591c0012, 0x4803c857,
- 0x800001c0, 0x0400000f, 0x591c0013, 0x48023817,
- 0x4a023813, 0x0fffffff, 0x592c0209, 0x8400051e,
- 0x48025a09, 0x42000000, 0x0010bd05, 0x0201f800,
- 0x0010ae10, 0x4a023a15, 0x00000001, 0x0401f01a,
- 0x42000000, 0x0010bd06, 0x0201f800, 0x0010ae10,
- 0x4a023a15, 0x00000007, 0x0401f013, 0x8c5cbd3a,
- 0x040207f8, 0x59cc000a, 0x592c1810, 0x4803c857,
- 0x480fc857, 0x800c0580, 0x040007f2, 0x59cc000a,
- 0x4803c857, 0x48023817, 0x48023816, 0x42000000,
- 0x0010bd04, 0x0201f800, 0x0010ae10, 0x4a023a15,
- 0x00000005, 0x5c00b800, 0x0201f000, 0x00108bba,
- 0x5c00b800, 0x0201f000, 0x00020a10, 0x4933c857,
- 0x4d1c0000, 0x0201f800, 0x0010577f, 0x04020053,
- 0x59cc0001, 0x59341002, 0x80080580, 0x82000500,
- 0x00ffffff, 0x0402004a, 0x5930141a, 0x0201f800,
- 0x00108d91, 0x02000800, 0x0010032d, 0x591c1407,
- 0x82080580, 0x00000007, 0x04000041, 0x82080580,
- 0x00000002, 0x0400003e, 0x82080580, 0x00000000,
- 0x0400003b, 0x591c0202, 0x82000d80, 0x0000ffff,
- 0x04000004, 0x59301a1a, 0x800c0580, 0x04020034,
- 0x83380580, 0x00000015, 0x0400002f, 0x4d300000,
- 0x4d2c0000, 0x411e6000, 0x59325809, 0x0201f800,
- 0x00108953, 0x02000800, 0x0010032d, 0x592c0205,
- 0x82000500, 0x000000ff, 0x82000580, 0x00000014,
- 0x04000003, 0x4a02621e, 0x00000003, 0x497a5c0a,
- 0x42028000, 0x00000003, 0x592c0a09, 0x0201f800,
- 0x00104543, 0x0201f800, 0x0010af23, 0x04020009,
- 0x0201f800, 0x000203ab, 0x59300a1e, 0x82040d80,
- 0x00000003, 0x02000800, 0x00108a55, 0x497a6009,
- 0x5c025800, 0x4a026403, 0x00000085, 0x4a026203,
- 0x00000009, 0x4a026407, 0x00000002, 0x42000800,
- 0x8000404b, 0x0201f800, 0x000209b1, 0x5c026000,
- 0x0401f003, 0x59a8002c, 0x48023a05, 0x497a381d,
- 0x0201f800, 0x00020a10, 0x5c023800, 0x1c01f000,
- 0x4933c857, 0x4c580000, 0x4d2c0000, 0x59325809,
- 0x59342200, 0x82102500, 0xffffdffd, 0x48126a00,
- 0x83383580, 0x00000015, 0x0400000d, 0x0201f800,
- 0x00108953, 0x04000064, 0x0201f800, 0x00108f1d,
- 0x04020005, 0x4200b000, 0x00000002, 0x0201f800,
- 0x00108efc, 0x0401fa2a, 0x0401f07b, 0x83cc1400,
- 0x00000008, 0x4200b000, 0x00000002, 0x83341c00,
- 0x00000006, 0x0201f800, 0x00107df9, 0x04020014,
- 0x83cc1400, 0x0000000a, 0x4200b000, 0x00000002,
- 0x83341c00, 0x00000008, 0x0201f800, 0x00107df9,
- 0x0402000b, 0x0201f800, 0x00101a68, 0x59342200,
- 0x59cc1007, 0x800811c0, 0x04000003, 0x480a6801,
- 0x84102542, 0x48126a00, 0x0401f062, 0x4d3c0000,
- 0x417a7800, 0x0201f800, 0x0010e06f, 0x5c027800,
- 0x42000000, 0x0010bd1d, 0x0201f800, 0x0010ae10,
- 0x59340200, 0x84000558, 0x48026a00, 0x4d300000,
- 0x0201f800, 0x00107188, 0x02000800, 0x0010032d,
- 0x4936600a, 0x497a6009, 0x4a026407, 0x00000001,
- 0x4a026403, 0x00000001, 0x42003000, 0x00000003,
- 0x0201f800, 0x0010a5a1, 0x8d0e1d20, 0x04000011,
- 0x41782800, 0x42003000, 0x00000001, 0x4d400000,
- 0x42028000, 0x00000029, 0x0201f800, 0x0010a00e,
- 0x5c028000, 0x4a026407, 0x00000004, 0x4a026203,
- 0x00000007, 0x4a026421, 0x00000001, 0x0401f009,
- 0x4a026203, 0x00000001, 0x42000800, 0x0000000b,
- 0x0201f800, 0x00103d9d, 0x0201f800, 0x0010608d,
- 0x5c026000, 0x0201f800, 0x00108953, 0x04000026,
- 0x0201f800, 0x00108f1d, 0x04020026, 0x0401f9d0,
- 0x0401f021, 0x42000000, 0x0010bd20, 0x0201f800,
- 0x0010ae10, 0x4d3c0000, 0x417a7800, 0x0201f800,
- 0x0010e06f, 0x42000000, 0x0010bd1d, 0x0201f800,
- 0x0010ae10, 0x59340200, 0x84000558, 0x48026a00,
- 0x42003000, 0x00000003, 0x41782800, 0x42002000,
- 0x00000005, 0x4d400000, 0x4d440000, 0x59368c03,
- 0x42028000, 0x00000029, 0x0201f800, 0x001091ea,
- 0x5c028800, 0x5c028000, 0x5c027800, 0x0201f800,
- 0x00101a68, 0x0201f800, 0x00020a10, 0x0401f002,
- 0x0401fc73, 0x5c025800, 0x5c00b000, 0x1c01f000,
- 0x4933c857, 0x41380000, 0x83383480, 0x00000058,
- 0x02021800, 0x0010032d, 0x0c01f001, 0x001077ae,
- 0x001077a9, 0x001077ae, 0x001077ae, 0x001077ae,
- 0x001077ae, 0x001077a7, 0x001077a7, 0x001077a7,
- 0x001077a7, 0x001077a7, 0x001077a7, 0x001077a7,
- 0x001077a7, 0x001077a7, 0x001077a7, 0x001077a7,
- 0x001077a7, 0x001077a7, 0x001077a7, 0x001077a7,
- 0x001077a7, 0x001077a7, 0x001077a7, 0x001077a7,
- 0x001077a7, 0x001077a7, 0x001077a7, 0x001077a7,
- 0x001077a7, 0x001077a7, 0x001077ae, 0x001077a7,
- 0x001077ae, 0x001077ae, 0x001077a7, 0x001077a7,
- 0x001077a7, 0x001077a7, 0x001077a7, 0x001077ae,
- 0x001077a7, 0x001077a7, 0x001077a7, 0x001077a7,
- 0x001077a7, 0x001077a7, 0x001077a7, 0x001077a7,
- 0x001077a7, 0x001077ae, 0x001077ae, 0x001077a7,
- 0x001077a7, 0x001077a7, 0x001077a7, 0x001077a7,
- 0x001077a7, 0x001077a7, 0x001077a7, 0x001077a7,
- 0x001077ae, 0x001077a7, 0x001077a7, 0x001077ae,
- 0x001077ae, 0x001077a7, 0x001077ae, 0x001077ae,
- 0x001077a7, 0x001077a7, 0x001077a7, 0x001077a7,
- 0x001077ae, 0x001077a7, 0x001077a7, 0x001077a7,
- 0x001077ae, 0x001077a7, 0x001077a7, 0x001077a7,
- 0x001077ae, 0x001077a7, 0x001077a7, 0x001077a7,
- 0x001077ae, 0x001077a7, 0x001077ae, 0x001077a7,
- 0x001077a7, 0x001077a7, 0x001077a7, 0x001077a7,
- 0x001077a7, 0x001077a7, 0x001077a7, 0x0201f800,
- 0x0010032d, 0x4a026203, 0x00000001, 0x493a6403,
- 0x0201f000, 0x0010608d, 0x4933c857, 0x4a026203,
- 0x00000001, 0x493a6403, 0x0201f000, 0x0010608d,
- 0x59300403, 0x82003480, 0x00000058, 0x02021800,
- 0x0010032d, 0x83383580, 0x00000013, 0x04000099,
- 0x83383580, 0x00000027, 0x0402004e, 0x4933c857,
- 0x0201f800, 0x00106102, 0x0201f800, 0x0010a684,
- 0x0201f800, 0x00108a68, 0x0400000b, 0x0201f800,
- 0x00108a83, 0x04000041, 0x59300403, 0x82000d80,
- 0x00000022, 0x04020038, 0x0401fc2b, 0x0400003a,
- 0x0401f03a, 0x0201f800, 0x00101a68, 0x42000800,
- 0x00000007, 0x0201f800, 0x00103d9d, 0x0401f910,
- 0x4d440000, 0x59368c03, 0x83440580, 0x000007fe,
- 0x04020008, 0x59a8121b, 0x84081540, 0x0201f800,
- 0x00104755, 0x04020002, 0x8408154a, 0x480b521b,
- 0x42028000, 0x00000029, 0x4d3c0000, 0x417a7800,
- 0x0201f800, 0x0010e06f, 0x5c027800, 0x836c0580,
- 0x00000003, 0x0400000c, 0x5932680a, 0x59340008,
- 0x800001c0, 0x04020008, 0x59368c03, 0x4933c857,
- 0x4937c857, 0x4947c857, 0x0201f800, 0x00103e42,
- 0x0401f00c, 0x42000000, 0x0010bd1d, 0x0201f800,
- 0x0010ae10, 0x42003000, 0x00000015, 0x41782800,
- 0x42002000, 0x00000003, 0x0201f800, 0x001091ea,
- 0x5c028800, 0x0201f800, 0x00108c94, 0x0201f000,
- 0x00020a10, 0x1c01f000, 0x0401f8dd, 0x0401f7fa,
- 0x83380580, 0x00000014, 0x0400000c, 0x4933c857,
- 0x0201f800, 0x001064f2, 0x02020000, 0x001071c7,
- 0x59300203, 0x82000580, 0x00000002, 0x04000102,
- 0x0201f800, 0x0010032d, 0x4933c857, 0x0201f800,
- 0x00106102, 0x0201f800, 0x0010a684, 0x4d3c0000,
- 0x417a7800, 0x0201f800, 0x0010e06f, 0x5c027800,
- 0x42003000, 0x00000016, 0x41782800, 0x4d400000,
- 0x4d440000, 0x59368c03, 0x42002000, 0x00000009,
- 0x42028000, 0x00000029, 0x0201f800, 0x001091ea,
- 0x5c028800, 0x5c028000, 0x42000000, 0x0010bd1d,
- 0x0201f800, 0x0010ae10, 0x0201f800, 0x00108a68,
- 0x0402000c, 0x0201f800, 0x00101a68, 0x0401f8ac,
- 0x59340c03, 0x82040580, 0x000007fe, 0x040207c6,
- 0x59a80a1b, 0x84040d40, 0x4807521b, 0x0401f7c2,
- 0x0201f800, 0x00108a83, 0x04020003, 0x0401f8a0,
- 0x0401f7bd, 0x59300403, 0x82000d80, 0x00000032,
- 0x04020004, 0x0201f800, 0x00101d02, 0x0401f7b6,
- 0x82000d80, 0x00000022, 0x04000895, 0x0401f7b2,
- 0x4933c857, 0x4803c857, 0x0c01f001, 0x001078c0,
- 0x001078c0, 0x001078c0, 0x001078c0, 0x001078c0,
- 0x001078c0, 0x001078b7, 0x001078b7, 0x001078b7,
- 0x001078b7, 0x001078b7, 0x001078b7, 0x001078b7,
- 0x001078b7, 0x001078b7, 0x001078b7, 0x001078b7,
- 0x001078b7, 0x001078b7, 0x001078b7, 0x001078b7,
- 0x001078b7, 0x001078b7, 0x001078b7, 0x001078b7,
- 0x001078b7, 0x001078b7, 0x001078b7, 0x001078b7,
- 0x001078b7, 0x001078c4, 0x001078e1, 0x001078b7,
- 0x001078e1, 0x001078e1, 0x001078b7, 0x001078b7,
- 0x001078b7, 0x001078b7, 0x001078b7, 0x001078e1,
- 0x001078e1, 0x001078b7, 0x001078b7, 0x001078b7,
- 0x001078b7, 0x001078b7, 0x001078b7, 0x001078b7,
- 0x001078b7, 0x001078d2, 0x001078e1, 0x001078b7,
- 0x001078cb, 0x001078b7, 0x001078b7, 0x001078b7,
- 0x001078cb, 0x001078b7, 0x001078b7, 0x001078b7,
- 0x001078e1, 0x001078ce, 0x001078b7, 0x001078b9,
- 0x001078e1, 0x001078b7, 0x001078e1, 0x001078e1,
- 0x001078b7, 0x001078b7, 0x001078b7, 0x001078b7,
- 0x001078e1, 0x001078b7, 0x001078b7, 0x001078b7,
- 0x001078e1, 0x001078b7, 0x001078b7, 0x001078b7,
- 0x001078e1, 0x001078b7, 0x001078b7, 0x001078b7,
- 0x001078e1, 0x001078b7, 0x001078e1, 0x001078b7,
- 0x001078b7, 0x001078b7, 0x001078b7, 0x001078b7,
- 0x001078b7, 0x001078b7, 0x001078b7, 0x0201f800,
- 0x0010032d, 0x4d2c0000, 0x59325809, 0x0201f800,
- 0x000203ab, 0x5c025800, 0x0201f000, 0x00020a10,
- 0x4a026203, 0x00000002, 0x0201f000, 0x00108b06,
- 0x4a026203, 0x00000005, 0x59a8002c, 0x48026205,
- 0x59a8002a, 0x48026006, 0x1c01f000, 0x5930081f,
- 0x49780a05, 0x0401f014, 0x0201f800, 0x00108c94,
- 0x0201f000, 0x00020a10, 0x0201f800, 0x00101d02,
- 0x0201f800, 0x001061b2, 0x04000005, 0x0201f800,
- 0x00106102, 0x0201f000, 0x00020a10, 0x0201f800,
- 0x00106102, 0x0201f800, 0x00020a10, 0x0201f000,
- 0x0010619f, 0x4933c857, 0x4a026203, 0x00000002,
- 0x59a8002a, 0x48026006, 0x1c01f000, 0x4933c857,
- 0x0201f800, 0x00108953, 0x0400002e, 0x4d2c0000,
- 0x0201f800, 0x00108f1d, 0x0402000a, 0x4d400000,
- 0x42028000, 0x00000031, 0x42000800, 0x00000004,
- 0x0201f800, 0x00108db8, 0x5c028000, 0x0401f020,
- 0x59300c07, 0x82040580, 0x00000010, 0x04000004,
- 0x82040580, 0x00000011, 0x0402000a, 0x4a025a07,
- 0x00000031, 0x4a02580e, 0x00000004, 0x4a02580f,
- 0x000000ff, 0x0201f800, 0x000203ab, 0x0401f010,
- 0x592c0405, 0x8c00051e, 0x0400000d, 0x4a025a05,
- 0x00000103, 0x4a025806, 0x01000000, 0x4da00000,
- 0x4cec0000, 0x5931d822, 0x58ef400a, 0x58ec0008,
- 0x0801f800, 0x5c01d800, 0x5c034000, 0x5c025800,
- 0x1c01f000, 0x4933c857, 0x83340580, 0x0010c2b2,
- 0x0402000c, 0x83380d80, 0x00000015, 0x04000005,
- 0x83380d80, 0x00000016, 0x02020000, 0x001071c7,
- 0x0201f800, 0x0010a687, 0x0201f000, 0x00020a10,
- 0x59340400, 0x82000500, 0x000000ff, 0x82003480,
- 0x0000000c, 0x02021800, 0x0010032d, 0x59303403,
- 0x82180d80, 0x0000004d, 0x02000000, 0x00108d00,
- 0x82180d80, 0x00000033, 0x02000000, 0x00108cb7,
- 0x82180d80, 0x00000028, 0x02000000, 0x00108ac4,
- 0x82180d80, 0x00000029, 0x02000000, 0x00108ad8,
- 0x82180d80, 0x00000057, 0x02000000, 0x001092ed,
- 0x82180d80, 0x0000001f, 0x02000000, 0x0010739f,
- 0x82180d80, 0x00000055, 0x02000000, 0x00107378,
- 0x82180d80, 0x00000000, 0x0400055a, 0x82180d80,
- 0x00000022, 0x02000000, 0x001073cc, 0x82180d80,
- 0x00000035, 0x02000000, 0x001074d4, 0x82180d80,
- 0x00000039, 0x040004f6, 0x82180d80, 0x0000003d,
- 0x02000000, 0x00107408, 0x82180d80, 0x00000044,
- 0x02000000, 0x00107445, 0x82180d80, 0x00000049,
- 0x02000000, 0x0010749b, 0x82180d80, 0x00000041,
- 0x02000000, 0x00107487, 0x82180d80, 0x00000043,
- 0x02000000, 0x00108e59, 0x82180d80, 0x00000004,
- 0x04020003, 0x42000000, 0x00000001, 0x83380d80,
- 0x00000015, 0x04000006, 0x83380d80, 0x00000016,
- 0x02020000, 0x001071c7, 0x0401f25e, 0x4c000000,
- 0x0201f800, 0x0010a687, 0x5c000000, 0x4d2c0000,
- 0x4d3c0000, 0x0c01f804, 0x5c027800, 0x5c025800,
- 0x1c01f000, 0x00107999, 0x0010799d, 0x00107999,
- 0x00107a10, 0x00107999, 0x00107b51, 0x00107beb,
- 0x00107999, 0x00107999, 0x00107bb4, 0x00107999,
- 0x00107bc6, 0x4933c857, 0x497a6008, 0x59300809,
- 0x58040000, 0x4a000a05, 0x00000103, 0x0201f000,
- 0x00020a10, 0x4933c857, 0x40000000, 0x40000000,
- 0x1c01f000, 0x4933c857, 0x0201f800, 0x001040a6,
- 0x59a8005a, 0x82000580, 0x00000074, 0x04020059,
- 0x0201f800, 0x00109f8a, 0x04020014, 0x0401f859,
- 0x0201f800, 0x00108953, 0x0400000c, 0x0201f800,
- 0x00108f1d, 0x04020009, 0x41780800, 0x4d400000,
- 0x42028000, 0x00000000, 0x0201f800, 0x00108db8,
- 0x5c028000, 0x0401f003, 0x0201f800, 0x00101a68,
- 0x0201f000, 0x00020a10, 0x0201f800, 0x00108953,
- 0x04000007, 0x0201f800, 0x00108f1d, 0x04020004,
- 0x0401ff27, 0x0201f000, 0x00020a10, 0x417a7800,
- 0x0201f800, 0x0010e06f, 0x42000000, 0x0010bd1d,
- 0x0201f800, 0x0010ae10, 0x59340200, 0x84000558,
- 0x48026a00, 0x42003000, 0x00000003, 0x0201f800,
- 0x0010a5a1, 0x4d300000, 0x0201f800, 0x00107188,
- 0x02000800, 0x0010032d, 0x4936600a, 0x497a6009,
- 0x4a026407, 0x00000001, 0x4a026403, 0x00000001,
- 0x8d0e1d20, 0x04000011, 0x4a026407, 0x00000004,
- 0x4a026203, 0x00000007, 0x4a026421, 0x00000001,
- 0x42003000, 0x00000001, 0x4d400000, 0x42028000,
- 0x00000029, 0x41782800, 0x0201f800, 0x0010a00e,
- 0x5c028000, 0x0401f009, 0x42000800, 0x0000000b,
- 0x0201f800, 0x00103d9d, 0x4a026203, 0x00000001,
- 0x0201f800, 0x0010608d, 0x5c026000, 0x0401fef0,
- 0x0201f800, 0x00101a68, 0x0201f000, 0x00020a10,
- 0x0401feeb, 0x42000000, 0x00000001, 0x0401f112,
- 0x4933c857, 0x59340200, 0x8c000500, 0x0400000c,
- 0x4d3c0000, 0x417a7800, 0x0201f800, 0x00103d92,
- 0x5c027800, 0x8d0e1d20, 0x04000005, 0x42000800,
- 0x00000006, 0x0201f800, 0x00103d9d, 0x1c01f000,
- 0x4933c857, 0x59a8085a, 0x82040580, 0x00000074,
- 0x0400000e, 0x4807c857, 0x82040580, 0x00000100,
- 0x040200df, 0x59cc0408, 0x4803c857, 0x8c000500,
- 0x040000db, 0x59341403, 0x82080580, 0x000007fe,
- 0x04000006, 0x0401f0d6, 0x59341403, 0x82080580,
- 0x000007fe, 0x0402001a, 0x59a8021b, 0x8c000506,
- 0x04000015, 0x59cc0000, 0x82000500, 0x000000ff,
- 0x59a8080f, 0x82040d00, 0x000000ff, 0x80040580,
- 0x0400000d, 0x0201f800, 0x00101a68, 0x0201f800,
- 0x00020a10, 0x42000000, 0x0010bd0e, 0x0201f800,
- 0x0010ae10, 0x4202d800, 0x00000001, 0x0201f000,
- 0x00103908, 0x0401fad8, 0x0401f062, 0x0201f800,
- 0x00103e7e, 0x59341403, 0x82080580, 0x000007fc,
- 0x04020035, 0x4a026802, 0x00fffffc, 0x0201f800,
- 0x00108953, 0x04000012, 0x0201f800, 0x00108f1d,
- 0x0402000f, 0x0401f8de, 0x41780800, 0x4d400000,
- 0x42028000, 0x00000000, 0x0201f800, 0x00108db8,
- 0x5c028000, 0x42000800, 0x00000004, 0x0201f800,
- 0x00103d9d, 0x0201f000, 0x00020a10, 0x42000800,
- 0x00000004, 0x0201f800, 0x00103d9d, 0x0201f800,
- 0x00101a68, 0x59300c1e, 0x82040580, 0x00000021,
- 0x04000003, 0x0201f000, 0x00020a10, 0x42028800,
- 0x000007fd, 0x42003000, 0x00fffffd, 0x0201f800,
- 0x00103de1, 0x02020800, 0x0010032d, 0x4936600a,
- 0x497a6c12, 0x4a02601d, 0x00000003, 0x4a026203,
- 0x00000001, 0x4a026403, 0x00000022, 0x0201f000,
- 0x0010608d, 0x59a8006d, 0x8c000502, 0x04000011,
- 0x0201f800, 0x00104755, 0x42001000, 0x00000010,
- 0x04020009, 0x59340002, 0x82000500, 0x00ff0000,
- 0x82000580, 0x00ff0000, 0x04000006, 0x42001000,
- 0x00000008, 0x0201f800, 0x00104448, 0x0402006c,
- 0x0201f800, 0x00108953, 0x0400006d, 0x0201f800,
- 0x00108f1d, 0x04020005, 0x592c0405, 0x8c00051c,
- 0x040207b3, 0x0401f896, 0x42000800, 0x00000005,
- 0x0201f800, 0x00103d9d, 0x4a026203, 0x00000001,
- 0x4a026403, 0x00000003, 0x0201f000, 0x0010608d,
- 0x59cc0408, 0x8c000518, 0x0400001a, 0x0201f800,
- 0x00108c53, 0x0201f800, 0x00104755, 0x04000009,
- 0x59cc0408, 0x8c000516, 0x04000006, 0x5930041e,
- 0x82000580, 0x00000021, 0x04020799, 0x1c01f000,
- 0x59a8021b, 0x8400054a, 0x4803521b, 0x4803541b,
- 0x59a8000f, 0x84000570, 0x48038832, 0x5930041e,
- 0x82000580, 0x00000021, 0x0402078d, 0x1c01f000,
- 0x42001000, 0x000000ef, 0x59a80073, 0x8c00053e,
- 0x04000005, 0x59a8021b, 0x8c000516, 0x04000002,
- 0x59a8100f, 0x480b500f, 0x497b8830, 0x84081570,
- 0x480b8832, 0x0201f800, 0x00108c7d, 0x59a8021b,
- 0x84000548, 0x4803521b, 0x4803541b, 0x0201f800,
- 0x00109fe3, 0x04020776, 0x599c0019, 0x8c000510,
- 0x0402003b, 0x59a8021b, 0x8400054c, 0x4803521b,
- 0x42000800, 0x00000007, 0x0201f800, 0x00103d9d,
- 0x417a7800, 0x0201f800, 0x00103d92, 0x42000000,
- 0x000000e8, 0x0201f800, 0x001054fb, 0x02000800,
- 0x00103de1, 0x02020800, 0x0010032d, 0x4936600a,
- 0x59340200, 0x8400051a, 0x48026a00, 0x42000800,
- 0x00000003, 0x0201f800, 0x00103d9d, 0x4a026407,
- 0x00000001, 0x4a026203, 0x00000001, 0x4a026403,
- 0x00000002, 0x0201f000, 0x0010608d, 0x0401fdf0,
- 0x42000000, 0x00000001, 0x0401f017, 0x599c0017,
- 0x8c00050a, 0x04000799, 0x42000800, 0x00000004,
- 0x0201f800, 0x00103d9d, 0x49375064, 0x59a8021b,
- 0x8c000508, 0x0400000a, 0x599c0018, 0x8c00051c,
- 0x04000007, 0x42000800, 0x000003e8, 0x42001000,
- 0x0010ebc8, 0x0201f800, 0x001059a9, 0x0201f000,
- 0x00020a10, 0x4933c857, 0x80003540, 0x04000005,
- 0x42000800, 0x00000007, 0x0201f800, 0x00103d9d,
- 0x801831c0, 0x0402000e, 0x59302009, 0x801021c0,
- 0x04000004, 0x58100405, 0x8c00051e, 0x04020008,
- 0x59341c03, 0x42002000, 0x00000004, 0x42003000,
- 0x00000012, 0x0201f800, 0x0010326a, 0x0201f800,
- 0x00101a68, 0x0201f000, 0x00020a10, 0x4c5c0000,
- 0x4d2c0000, 0x59325809, 0x0201f800, 0x00104f93,
- 0x5c025800, 0x59cc0008, 0x48002805, 0x59cc0009,
- 0x48002806, 0x49782807, 0x49782808, 0x49782809,
- 0x4978280a, 0x59cc0013, 0x8c00053e, 0x04000009,
- 0x59cc0414, 0x900001c0, 0x59ccbc15, 0x805c0540,
- 0x48002807, 0x59cc0416, 0x900001c0, 0x48002808,
- 0x59cc0017, 0x8c00053e, 0x04000009, 0x59cc0418,
- 0x900001c0, 0x59ccbc19, 0x805c0540, 0x48002809,
- 0x59cc041a, 0x900001c0, 0x4800280a, 0x5c00b800,
- 0x1c01f000, 0x4933c857, 0x59a8005a, 0x82000580,
- 0x00000014, 0x04020048, 0x59a8006d, 0x8c000502,
- 0x04000015, 0x0201f800, 0x00104755, 0x42001000,
- 0x00000010, 0x04020009, 0x59340002, 0x82000500,
- 0x00ff0000, 0x82000580, 0x00ff0000, 0x0400000a,
- 0x42001000, 0x00000008, 0x0201f800, 0x00104448,
- 0x04000005, 0x59a8006d, 0x8400054c, 0x4803506d,
- 0x0401f031, 0x836c0580, 0x00000003, 0x0402000b,
- 0x59300009, 0x80000540, 0x04020008, 0x59341c03,
- 0x42002000, 0x00000006, 0x42003000, 0x00000013,
- 0x0201f800, 0x0010326a, 0x0201f800, 0x00103ee9,
- 0x0401fe84, 0x0401fa61, 0x0402001f, 0x59340404,
- 0x80000540, 0x0400001c, 0x42000800, 0x00000006,
- 0x0201f800, 0x00103d9d, 0x0201f800, 0x00108953,
- 0x04000011, 0x0201f800, 0x00108f1d, 0x0402000a,
- 0x41780800, 0x4d400000, 0x42028000, 0x00000000,
- 0x0201f800, 0x00108db8, 0x5c028000, 0x0201f000,
- 0x00020a10, 0x4a025a05, 0x00000103, 0x4a025806,
- 0x02000000, 0x0201f800, 0x00101a68, 0x0201f000,
- 0x00020a10, 0x0201f800, 0x001043e2, 0x0201f800,
- 0x00108953, 0x04000007, 0x0201f800, 0x00108f1d,
- 0x04020004, 0x0401fd42, 0x0201f000, 0x00020a10,
- 0x0401fd3f, 0x0201f800, 0x0010a687, 0x80000580,
- 0x59a8006d, 0x8c00050c, 0x04000005, 0x8400050c,
- 0x4803506d, 0x82000540, 0x00000001, 0x0401f75e,
- 0x4933c857, 0x59a8005a, 0x82000580, 0x00000014,
- 0x0402000b, 0x42000800, 0x0000000b, 0x0201f800,
- 0x00103d9d, 0x4a026203, 0x00000001, 0x4a026403,
- 0x00000001, 0x0201f000, 0x0010608d, 0x42000000,
- 0x00000001, 0x0401f74c, 0x4933c857, 0x40003000,
- 0x59a8005a, 0x82000580, 0x00000004, 0x0402000a,
- 0x82183580, 0x0000000b, 0x04020005, 0x42000800,
- 0x00000007, 0x0201f800, 0x00103d9d, 0x0201f000,
- 0x00020a10, 0x42000000, 0x00000001, 0x0401f73a,
- 0x4803c857, 0x4d2c0000, 0x4d3c0000, 0x0c01f804,
- 0x5c027800, 0x5c025800, 0x1c01f000, 0x00107999,
- 0x00107bfa, 0x00107999, 0x00107c56, 0x00107999,
- 0x00107cbd, 0x00107beb, 0x00107999, 0x00107999,
- 0x00107cdf, 0x00107999, 0x00107cf1, 0x4933c857,
- 0x4d1c0000, 0x59301403, 0x82080580, 0x00000003,
- 0x04000008, 0x82081580, 0x0000001e, 0x04020003,
- 0x0201f800, 0x00020a10, 0x5c023800, 0x1c01f000,
- 0x0401ff59, 0x0401f7fd, 0x4933c857, 0x42000000,
- 0x0010bd21, 0x0201f800, 0x0010ae10, 0x0201f800,
- 0x0010a687, 0x0201f800, 0x001040a6, 0x0201f800,
- 0x00108953, 0x0400000b, 0x0201f800, 0x00108f1d,
- 0x04020008, 0x4200b000, 0x00000002, 0x0201f800,
- 0x00108efc, 0x0401fcda, 0x0201f000, 0x00020a10,
- 0x0401f8f3, 0x0402002f, 0x417a7800, 0x0201f800,
- 0x00103d92, 0x417a7800, 0x0201f800, 0x0010e06f,
- 0x42000000, 0x0010bd1d, 0x0201f800, 0x0010ae10,
- 0x59340200, 0x84000558, 0x48026a00, 0x4a026403,
- 0x00000002, 0x42003000, 0x00000003, 0x0201f800,
- 0x0010a5a1, 0x8d0e1d20, 0x04000011, 0x4d400000,
- 0x41782800, 0x42003000, 0x00000005, 0x42028000,
- 0x00000029, 0x0201f800, 0x0010a00e, 0x5c028000,
- 0x4a026203, 0x00000007, 0x4a026407, 0x00000004,
- 0x4a026421, 0x00000001, 0x1c01f000, 0x42000800,
- 0x00000003, 0x0201f800, 0x00103d9d, 0x4a026203,
- 0x00000001, 0x0201f800, 0x0010608d, 0x0401f7f7,
- 0x59cc0407, 0x82000580, 0x00000009, 0x0402000a,
- 0x59340412, 0x82000500, 0x000000ff, 0x0400000c,
- 0x80000040, 0x48026c12, 0x4a026006, 0x0000000a,
- 0x0401f7ea, 0x59cc0207, 0x82000500, 0x0000ff00,
- 0x82000580, 0x00001900, 0x040007c3, 0x0401fc94,
- 0x80000580, 0x0401f6bc, 0x4933c857, 0x0201f800,
- 0x00108953, 0x04000011, 0x0201f800, 0x00108f1d,
- 0x0402000e, 0x4c580000, 0x4200b000, 0x00000002,
- 0x0201f800, 0x00108efc, 0x5c00b000, 0x0401fc84,
- 0x42000800, 0x00000007, 0x0201f800, 0x00103d9d,
- 0x0201f000, 0x00020a10, 0x0401fc7d, 0x59cc3407,
- 0x82183500, 0x000000ff, 0x82180580, 0x00000005,
- 0x04000020, 0x82180580, 0x0000000b, 0x04000018,
- 0x59cc0207, 0x82000500, 0x0000ff00, 0x04020004,
- 0x82180580, 0x00000009, 0x04000016, 0x82000580,
- 0x00001900, 0x0402000e, 0x82180580, 0x00000009,
- 0x04000010, 0x42000800, 0x00000004, 0x0201f800,
- 0x00103d9d, 0x0201f800, 0x00101a68, 0x0201f800,
- 0x0010a687, 0x0201f000, 0x00020a10, 0x0201f800,
- 0x0010a687, 0x42000000, 0x00000001, 0x0401f682,
- 0x0201f800, 0x00108953, 0x59325809, 0x04000008,
- 0x592c0205, 0x82000580, 0x00000139, 0x040007f4,
- 0x592c0405, 0x8c00051e, 0x040207f1, 0x59340412,
- 0x800001c0, 0x04000008, 0x80000040, 0x48026c12,
- 0x4a026006, 0x0000000a, 0x4a026403, 0x00000016,
- 0x1c01f000, 0x59340403, 0x82000580, 0x000007fe,
- 0x04020007, 0x59a8021b, 0x84000540, 0x4803521b,
- 0x0201f800, 0x00103a27, 0x0401f7dd, 0x0201f800,
- 0x0010a687, 0x417a7800, 0x0201f800, 0x0010e06f,
- 0x42003000, 0x00000005, 0x0201f800, 0x0010a5a1,
- 0x42000000, 0x0010bd1d, 0x0201f800, 0x0010ae10,
- 0x0401f7d1, 0x4933c857, 0x0401f853, 0x0402000b,
- 0x42000800, 0x00000005, 0x0201f800, 0x00103d9d,
- 0x4a026203, 0x00000001, 0x4a026403, 0x00000003,
- 0x0201f000, 0x0010608d, 0x42000800, 0x00000004,
- 0x0201f800, 0x00103d9d, 0x0201f800, 0x00108f1d,
- 0x0402000a, 0x4c580000, 0x4200b000, 0x00000002,
- 0x0201f800, 0x00108efc, 0x5c00b000, 0x0401fc10,
- 0x0201f000, 0x00020a10, 0x0401fc0d, 0x0201f800,
- 0x0010a687, 0x80000580, 0x0401f633, 0x4933c857,
- 0x0401f831, 0x0402000b, 0x42000800, 0x00000009,
- 0x0201f800, 0x00103d9d, 0x4a026203, 0x00000001,
- 0x4a026403, 0x00000005, 0x0201f000, 0x0010608d,
- 0x0201f800, 0x0010a687, 0x42000000, 0x00000001,
- 0x0401f621, 0x4933c857, 0x0401f81f, 0x0402000b,
- 0x42000800, 0x0000000b, 0x0201f800, 0x00103d9d,
- 0x4a026203, 0x00000001, 0x4a026403, 0x00000001,
- 0x0201f000, 0x0010608d, 0x0201f800, 0x0010a687,
- 0x42000000, 0x00000001, 0x0401f60f, 0x4933c857,
- 0x59cc0407, 0x82000580, 0x00000003, 0x04020009,
- 0x59cc0207, 0x82000500, 0x0000ff00, 0x82000d80,
- 0x00002a00, 0x04000003, 0x82000d80, 0x00001e00,
- 0x1c01f000, 0x4933c857, 0x82000540, 0x00000001,
- 0x1c01f000, 0x4933c857, 0x4d400000, 0x4c580000,
- 0x59a8021b, 0x82000540, 0x00000003, 0x4803521b,
- 0x0401f861, 0x04000005, 0x4d300000, 0x4d340000,
- 0x4d440000, 0x0401f022, 0x0401f893, 0x04000031,
- 0x4d300000, 0x4d340000, 0x4d440000, 0x59cc0408,
- 0x8c00051e, 0x04020004, 0x59a8021b, 0x84000552,
- 0x4803521b, 0x8d0e1d20, 0x04000009, 0x42028000,
- 0x0000002a, 0x42028800, 0x0000ffff, 0x42003000,
- 0x00000002, 0x0201f800, 0x0010a5b4, 0x42028000,
- 0x0000002a, 0x4d3c0000, 0x42027800, 0x00000200,
- 0x0201f800, 0x0010dfe1, 0x5c027800, 0x42000000,
- 0x0010bd1d, 0x0201f800, 0x0010ae10, 0x0201f800,
- 0x0010e25a, 0x4200b000, 0x00000010, 0x42028800,
- 0x000007f0, 0x83440580, 0x000007fe, 0x04000003,
- 0x0201f800, 0x00103e42, 0x81468800, 0x8058b040,
- 0x040207f9, 0x5c028800, 0x5c026800, 0x5c026000,
- 0x0201f800, 0x00103e7e, 0x59cc0800, 0x82040d00,
- 0x00ffffff, 0x4807500f, 0x80040110, 0x48035018,
- 0x48038881, 0x59a80a1b, 0x84040d50, 0x59cc0013,
- 0x8c00053e, 0x04000003, 0x8c000536, 0x04000004,
- 0x59cc0017, 0x8c000536, 0x04020002, 0x84040d10,
- 0x4807521b, 0x4807541b, 0x59cc0408, 0x8c000518,
- 0x04000005, 0x4c040000, 0x0201f800, 0x00109378,
- 0x5c000800, 0x0201f800, 0x00104755, 0x04000007,
- 0x59cc0009, 0x48035028, 0x59cc000a, 0x48035029,
- 0x0201f800, 0x00108c53, 0x5c00b000, 0x5c028000,
- 0x1c01f000, 0x4933c857, 0x59a8141b, 0x82080580,
- 0x0000ffff, 0x0400000c, 0x4c080000, 0x0201f800,
- 0x00104755, 0x5c001000, 0x0402000b, 0x59cc0408,
- 0x8c000518, 0x04000005, 0x8c08150a, 0x0400000b,
- 0x80000580, 0x1c01f000, 0x8c081508, 0x040207fd,
- 0x0401f006, 0x82080500, 0x00000030, 0x04020003,
- 0x8c081506, 0x040207f7, 0x4a03541b, 0x0000ffff,
- 0x42000000, 0x0010bc6a, 0x0201f800, 0x0010ae10,
- 0x42003000, 0x0000000c, 0x42001800, 0x0000ffff,
- 0x42002000, 0x00000007, 0x0201f800, 0x0010326a,
- 0x4d400000, 0x4d3c0000, 0x42003000, 0x00000001,
- 0x0201f800, 0x0010a5b4, 0x42028000, 0x0000002a,
- 0x42027800, 0x00000200, 0x0201f800, 0x0010dfe1,
- 0x5c028000, 0x5c027800, 0x82000540, 0x00000001,
- 0x1c01f000, 0x4933c857, 0x4c580000, 0x59a80018,
- 0x800001c0, 0x04000023, 0x59cc1000, 0x82081500,
- 0x00ffff00, 0x80081110, 0x80080580, 0x04000004,
- 0x42000000, 0x0010bd00, 0x0401f016, 0x83cc1400,
- 0x0000000b, 0x4200b000, 0x00000002, 0x83341c00,
- 0x00000006, 0x0401f830, 0x04000004, 0x42000000,
- 0x0010bd01, 0x0401f00b, 0x83cc1400, 0x0000000d,
- 0x4200b000, 0x00000002, 0x83341c00, 0x00000008,
- 0x0401f825, 0x04000007, 0x42000000, 0x0010bd02,
- 0x0201f800, 0x0010ae10, 0x82000540, 0x00000001,
- 0x5c00b000, 0x1c01f000, 0x4933c857, 0x59cc0206,
- 0x82000580, 0x00000014, 0x04020016, 0x59cc0407,
- 0x82000580, 0x00000800, 0x04020012, 0x59cc0207,
- 0x8c00051a, 0x0400000d, 0x82000500, 0x00000f00,
- 0x82000580, 0x00000100, 0x04020008, 0x59cc020a,
- 0x8c000508, 0x04020003, 0x8c00050a, 0x04000003,
- 0x80000580, 0x1c01f000, 0x82000540, 0x00000001,
- 0x1c01f000, 0x5c000000, 0x4c000000, 0x4803c857,
- 0x480bc857, 0x480fc857, 0x485bc857, 0x50080800,
- 0x500c0000, 0x80042580, 0x04020007, 0x80081000,
- 0x800c1800, 0x8058b040, 0x040207f9, 0x80000580,
- 0x1c01f000, 0x4803c857, 0x4807c857, 0x480bc857,
- 0x480fc857, 0x80040480, 0x04001006, 0x42000000,
- 0x00000001, 0x82040d40, 0x00000001, 0x1c01f000,
- 0x41780000, 0x0401f7fc, 0x83380480, 0x00000053,
- 0x02021800, 0x0010032d, 0x83380480, 0x0000004b,
- 0x02001800, 0x0010032d, 0x0c01f001, 0x00107e29,
- 0x00107e29, 0x00107e29, 0x00107e29, 0x00107e27,
- 0x00107e27, 0x00107e27, 0x00107e29, 0x0201f800,
- 0x0010032d, 0x493bc857, 0x4a026203, 0x0000000d,
- 0x493a6403, 0x42000800, 0x80000000, 0x0201f000,
- 0x000209b1, 0x83380580, 0x00000013, 0x04020008,
- 0x59300403, 0x82000580, 0x00000050, 0x02020800,
- 0x0010032d, 0x0201f000, 0x00020a10, 0x4933c857,
- 0x83380580, 0x00000027, 0x04020030, 0x4933c857,
- 0x0201f800, 0x00106102, 0x4d3c0000, 0x417a7800,
- 0x0201f800, 0x0010e06f, 0x5c027800, 0x42000000,
- 0x0010bd1d, 0x0201f800, 0x0010ae10, 0x4d2c0000,
- 0x59325809, 0x0201f800, 0x00108953, 0x492fc857,
- 0x0400000d, 0x4a025a05, 0x00000103, 0x59300c02,
- 0x48065c07, 0x4a025a07, 0x00000029, 0x497a580a,
- 0x592c0c09, 0x84040d50, 0x48065c09, 0x0201f800,
- 0x000203ab, 0x5c025800, 0x42003000, 0x00000015,
- 0x41782800, 0x42002000, 0x00000003, 0x4d400000,
- 0x4d440000, 0x59368c03, 0x42028000, 0x00000029,
- 0x0201f800, 0x001091ea, 0x5c028800, 0x5c028000,
- 0x0201f000, 0x00020a10, 0x83380580, 0x00000014,
- 0x0402000d, 0x59300403, 0x82000c80, 0x00000053,
- 0x02021800, 0x0010032d, 0x82000480, 0x00000040,
- 0x02001800, 0x0010032d, 0x4933c857, 0x4803c857,
- 0x0c01f00e, 0x83380580, 0x00000053, 0x0400000a,
- 0x83380580, 0x00000048, 0x02020800, 0x0010032d,
- 0x59300403, 0x82000580, 0x00000050, 0x02020800,
- 0x0010032d, 0x1c01f000, 0x00107e9f, 0x00107e9d,
- 0x00107e9d, 0x00107e9d, 0x00107e9d, 0x00107e9d,
- 0x00107e9d, 0x00107e9d, 0x00107e9d, 0x00107e9d,
- 0x00107e9d, 0x00107eb6, 0x00107eb6, 0x00107eb6,
- 0x00107eb6, 0x00107e9d, 0x00107eb6, 0x00107e9d,
- 0x00107eb6, 0x0201f800, 0x0010032d, 0x4933c857,
- 0x0201f800, 0x00106102, 0x0201f800, 0x00108953,
- 0x02000000, 0x00020a10, 0x4d2c0000, 0x59325809,
- 0x4a025a05, 0x00000103, 0x59300402, 0x48025c07,
- 0x4a025a07, 0x00000006, 0x497a580a, 0x0201f800,
- 0x000203ab, 0x5c025800, 0x0201f800, 0x00108a55,
- 0x0201f000, 0x00020a10, 0x4933c857, 0x0201f800,
- 0x00106102, 0x0201f000, 0x00020a10, 0x0201f800,
- 0x0010032d, 0x5930001d, 0x800001c0, 0x02020800,
- 0x001091d8, 0x59300004, 0x8c00053e, 0x0402002f,
- 0x0201f800, 0x0010929b, 0x040200c3, 0x59325809,
- 0x592c0c09, 0x59cc2808, 0x82141d00, 0x00000c00,
- 0x04000002, 0x59cc1809, 0x84040d58, 0x48065c09,
- 0x82143500, 0x00000fff, 0x0402002a, 0x59340200,
- 0x8c00050e, 0x040200a9, 0x0201f800, 0x00020abe,
- 0x04020006, 0x4a025a07, 0x00000000, 0x59300812,
- 0x800409c0, 0x04020990, 0x4a025a05, 0x00000103,
- 0x48065808, 0x480e580b, 0x901409c0, 0x4806580a,
- 0x59300c02, 0x48065c07, 0x0201f800, 0x00108f22,
- 0x0201f800, 0x000203ab, 0x0201f800, 0x00104126,
- 0x59cc0008, 0x8c000518, 0x02020000, 0x00108b26,
- 0x0201f000, 0x00020a10, 0x0201f800, 0x001064f2,
- 0x040007d0, 0x4d3c0000, 0x42027800, 0x00000002,
- 0x0201f800, 0x0010853c, 0x5c027800, 0x0401f7c9,
- 0x4817c857, 0x480fc857, 0x82180500, 0x000000ff,
- 0x0400000e, 0x592c0205, 0x82000500, 0x000000ff,
- 0x82000580, 0x00000048, 0x04020008, 0x592c0408,
- 0x800001c0, 0x04000005, 0x0201f800, 0x001090c6,
- 0x0201f000, 0x0010910a, 0x82180d00, 0x00000c00,
- 0x04000004, 0x59340200, 0x8c00050e, 0x04020058,
- 0x4a025a07, 0x00000000, 0x41782000, 0x8c183510,
- 0x04000009, 0x59cc200b, 0x801021c0, 0x04000006,
- 0x59cc000c, 0x82000500, 0x000000ff, 0x04000002,
- 0x4803c857, 0x4812580d, 0x41780000, 0x8c183512,
- 0x04000002, 0x59cc000a, 0x4802580c, 0x80100c00,
- 0x040007ae, 0x82041480, 0x0000001d, 0x04001006,
- 0x592c0405, 0x8c00051e, 0x04000022, 0x42000800,
- 0x0000001c, 0x4c040000, 0x4c0c0000, 0x4c140000,
- 0x0201f800, 0x00020abe, 0x04020006, 0x4a025a07,
- 0x00000000, 0x59300812, 0x800409c0, 0x04020932,
- 0x5c002800, 0x5c001800, 0x4a025a05, 0x00000103,
- 0x48065808, 0x480e580b, 0x901409c0, 0x4806580a,
- 0x5c000800, 0x4c500000, 0x4c540000, 0x83cca400,
- 0x0000000c, 0x832cac00, 0x0000000e, 0x0201f800,
- 0x001084d1, 0x5c00a800, 0x5c00a000, 0x0401f795,
- 0x4c040000, 0x4c0c0000, 0x4c140000, 0x0201f800,
- 0x00020abe, 0x04020006, 0x4a025a07, 0x00000000,
- 0x59300812, 0x800409c0, 0x04020913, 0x48065808,
- 0x5c002800, 0x5c001800, 0x59301402, 0x480a5c07,
- 0x480e580b, 0x901401c0, 0x4802580a, 0x0201f800,
- 0x00108f22, 0x5c000800, 0x0201f800, 0x0010847b,
- 0x0201f800, 0x001084b6, 0x0401f780, 0x592c020b,
- 0x8c000502, 0x040007a7, 0x592c0209, 0x8c00050e,
- 0x040207a4, 0x59300012, 0x800c0d80, 0x040007a1,
- 0x4803c857, 0x480fc857, 0x8c183514, 0x02000000,
- 0x00108b66, 0x80000540, 0x0400079a, 0x4807c856,
- 0x0201f000, 0x00108b66, 0x592c020b, 0x8c000502,
- 0x04000756, 0x59300012, 0x800001c0, 0x04000756,
- 0x592c0209, 0x8c00050e, 0x04020753, 0x0201f000,
- 0x00108b66, 0x1c01f000, 0x59cc2006, 0x59cc2807,
- 0x0401f040, 0x0401f03f, 0x1c01f000, 0x4933c857,
- 0x59300004, 0x8c00053e, 0x04020035, 0x5930001d,
- 0x800001c0, 0x02020800, 0x001091d8, 0x59325809,
- 0x592c0c09, 0x41782800, 0x41781800, 0x84040d58,
- 0x48065c09, 0x41783000, 0x59340200, 0x8c00050e,
- 0x0402001b, 0x0201f800, 0x00020abe, 0x04020007,
- 0x4a025a07, 0x00000000, 0x59300812, 0x4807c857,
- 0x800409c0, 0x040208c4, 0x4a025a05, 0x00000103,
- 0x48065808, 0x480e580b, 0x901409c0, 0x4806580a,
- 0x4933c857, 0x59300c02, 0x48065c07, 0x0201f800,
- 0x00108f22, 0x0201f800, 0x000203ab, 0x0201f800,
- 0x00104126, 0x0201f000, 0x00020a10, 0x592c020b,
- 0x8c000502, 0x040007e4, 0x59300012, 0x4803c857,
- 0x800001c0, 0x040007e3, 0x592c0209, 0x8c00050e,
- 0x040207e0, 0x0201f000, 0x00108b66, 0x0201f800,
- 0x001064f2, 0x040007ca, 0x4933c857, 0x1c01f000,
- 0x4c5c0000, 0x4c600000, 0x4010b800, 0x4014c000,
- 0x5930001d, 0x800001c0, 0x4c140000, 0x02020800,
- 0x001091d8, 0x5c002800, 0x59325809, 0x592c020b,
- 0x8c000502, 0x04020026, 0x8c000500, 0x0400002b,
- 0x4a026203, 0x00000002, 0x4a026403, 0x00000043,
- 0x405c0000, 0x592c0810, 0x80040c80, 0x40600000,
- 0x80040480, 0x0400101e, 0x8060c1c0, 0x04000014,
- 0x59300004, 0x8c00053e, 0x0402000c, 0x485e6014,
- 0x48626012, 0x497a6205, 0x5c00c000, 0x5c00b800,
- 0x0201f800, 0x00100cef, 0x0402000f, 0x59300804,
- 0x0201f000, 0x000209a3, 0x4c140000, 0x0201f800,
- 0x001064f2, 0x5c002800, 0x040007f1, 0x5c00c000,
- 0x5c00b800, 0x0201f000, 0x001071c7, 0x5c00c000,
- 0x5c00b800, 0x4933c857, 0x1c01f000, 0x4807c857,
- 0x4004c000, 0x0401f7e1, 0x4803c857, 0x0401f7f4,
- 0x83380480, 0x00000058, 0x04021005, 0x83380480,
- 0x00000040, 0x04001002, 0x0c01f002, 0x1c01f000,
- 0x00108028, 0x00108028, 0x00108028, 0x00108028,
- 0x00108028, 0x00108028, 0x00108028, 0x00108028,
- 0x00108028, 0x00108028, 0x0010802a, 0x00108028,
- 0x00108028, 0x00108028, 0x00108028, 0x00108037,
- 0x00108028, 0x00108028, 0x00108028, 0x00108028,
- 0x00108065, 0x00108028, 0x00108028, 0x00108028,
- 0x0201f800, 0x0010032d, 0x4933c857, 0x0201f800,
- 0x00106346, 0x4a026203, 0x00000002, 0x59a8002c,
- 0x48026205, 0x59300012, 0x59300816, 0x80040c80,
- 0x48066016, 0x0201f000, 0x001060e2, 0x4933c857,
- 0x0201f800, 0x001060e2, 0x4d3c0000, 0x417a7800,
- 0x0201f800, 0x0010e06f, 0x5c027800, 0x42000000,
- 0x0010bd1d, 0x0201f800, 0x0010ae10, 0x0201f800,
- 0x00108953, 0x04000010, 0x4d2c0000, 0x59325809,
- 0x4a025a05, 0x00000103, 0x59300402, 0x48025c07,
- 0x4a025a07, 0x00000029, 0x497a580a, 0x592c0c09,
- 0x84040d50, 0x48065c09, 0x0201f800, 0x000203ab,
- 0x5c025800, 0x42003000, 0x00000014, 0x41782800,
- 0x4d400000, 0x4d440000, 0x59368c03, 0x42002000,
- 0x00000002, 0x42028000, 0x00000029, 0x0201f800,
- 0x001091ea, 0x5c028800, 0x5c028000, 0x0201f000,
- 0x00020a10, 0x4933c857, 0x59300809, 0x4978080a,
- 0x4978080b, 0x58041409, 0x84081558, 0x48080c09,
- 0x1c01f000, 0x4807c857, 0x8c040d3e, 0x04020024,
- 0x497a5a07, 0x59300020, 0x80000540, 0x04000018,
- 0x497a5a07, 0x4c040000, 0x4c080000, 0x4c0c0000,
- 0x4c100000, 0x4c140000, 0x40002800, 0x58141003,
- 0x40040000, 0x80081480, 0x48082803, 0x40140000,
- 0x0201f800, 0x00100a77, 0x5c002800, 0x5c002000,
- 0x5c001800, 0x5c001000, 0x5c000800, 0x592c0207,
- 0x80000540, 0x04020009, 0x0401f005, 0x592c0409,
- 0x8c00051c, 0x04000002, 0x592c0803, 0x4807c857,
- 0x4a025a07, 0x00000015, 0x1c01f000, 0x59300020,
- 0x80000540, 0x04000009, 0x4a025a07, 0x00000011,
- 0x59300020, 0x4c040000, 0x0201f800, 0x00100a77,
- 0x5c000800, 0x0401f7f5, 0x4807c856, 0x4a025a07,
- 0x00000007, 0x1c01f000, 0x83380480, 0x00000058,
- 0x04021007, 0x83380480, 0x00000040, 0x04001004,
- 0x4d2c0000, 0x0c01f803, 0x5c025800, 0x1c01f000,
- 0x001080c4, 0x001080c4, 0x001080c4, 0x001080c4,
- 0x001080c4, 0x001080c7, 0x001080c6, 0x001080c4,
- 0x0010814c, 0x001080c4, 0x001080c4, 0x001080c4,
- 0x001080c4, 0x001080c4, 0x001080c4, 0x001080c4,
- 0x001080c4, 0x001080c4, 0x001080c4, 0x00108218,
- 0x00108243, 0x00108220, 0x001080c6, 0x0010824f,
- 0x0201f800, 0x0010032d, 0x1c01f000, 0x5930001d,
- 0x800001c0, 0x02020800, 0x001091d8, 0x59300008,
- 0x8c00050e, 0x0400007e, 0x8c000500, 0x04000070,
- 0x8c00051c, 0x04000009, 0x84000500, 0x48026008,
- 0x59325809, 0x592c3c09, 0x841c3d58, 0x481e5c09,
- 0x0201f000, 0x00020a70, 0x59325809, 0x592c3c09,
- 0x841c3d58, 0x59300008, 0x8c00051c, 0x040207f3,
- 0x481e5c09, 0x42000000, 0x00000005, 0x40000000,
- 0x80000040, 0x040207fe, 0x59300008, 0x8c00051c,
- 0x040207ea, 0x59cc0808, 0x592c0205, 0x82000500,
- 0x000000ff, 0x82000580, 0x00000048, 0x0402000c,
- 0x497a580c, 0x82040500, 0x000000ff, 0x04000008,
- 0x592c0408, 0x800001c0, 0x04000005, 0x0201f800,
- 0x001090c6, 0x0201f000, 0x00100b8f, 0x900421c0,
- 0x4812580a, 0x41782000, 0x82040500, 0x00000c00,
- 0x04000002, 0x59cc2009, 0x82043500, 0x00000fff,
- 0x04020027, 0x481e5c09, 0x4a025a07, 0x00000000,
- 0x801831c0, 0x02000000, 0x00100b8f, 0x41782000,
- 0x8c183510, 0x04000002, 0x59cc200b, 0x4812580d,
- 0x41780000, 0x8c183512, 0x04000002, 0x59cc000a,
- 0x4802580c, 0x80100c00, 0x02001800, 0x0010032d,
- 0x02000000, 0x00100b8f, 0x82041480, 0x0000001d,
- 0x0402100c, 0x4c500000, 0x4c540000, 0x83cca400,
- 0x0000000c, 0x832cac00, 0x0000000e, 0x0401fbae,
- 0x5c00a800, 0x5c00a000, 0x0201f000, 0x00100b8f,
- 0x0401fb53, 0x0201f000, 0x00100b8f, 0x412c7800,
- 0x0201f800, 0x0010056f, 0x02000800, 0x0010032d,
- 0x492c780a, 0x841c3d52, 0x481c7c09, 0x4a025a05,
- 0x00000103, 0x4812580b, 0x900401c0, 0x4802580a,
- 0x583c0405, 0x583c1006, 0x583c2209, 0x48025c05,
- 0x480a5806, 0x48125a09, 0x0401f7c7, 0x8c000524,
- 0x04000792, 0x59325809, 0x4c000000, 0x592c0409,
- 0x8c00051c, 0x5c000000, 0x04020003, 0x4a026012,
- 0xffffffff, 0x84000524, 0x0401f788, 0x1c01f000,
- 0x59a8002c, 0x48026205, 0x59325809, 0x4a026203,
- 0x00000002, 0x592c2409, 0x59300808, 0x4933c857,
- 0x4807c857, 0x592c0205, 0x82000500, 0x000000ff,
- 0x82000580, 0x00000048, 0x04020004, 0x8c102500,
- 0x02020000, 0x0010910a, 0x4a025a07, 0x00000000,
- 0x8c040d1e, 0x04000027, 0x41780800, 0x497a580a,
- 0x592c1c0a, 0x59300012, 0x59341200, 0x497a6205,
- 0x8c08150e, 0x04020070, 0x4807c857, 0x4806580b,
- 0x80000d40, 0x04020f00, 0x59300402, 0x48025c07,
- 0x48065808, 0x4a025a05, 0x00000103, 0x4c040000,
- 0x4c0c0000, 0x4c100000, 0x0201f800, 0x00108f22,
- 0x5c002000, 0x5c001800, 0x5c000800, 0x8c102512,
- 0x0402001a, 0x4c0c0000, 0x0201f800, 0x000203ab,
- 0x0201f800, 0x00104126, 0x5c001800, 0x8c0c1d18,
- 0x02000000, 0x00020a10, 0x0201f000, 0x00108b26,
- 0x4813c857, 0x8c102518, 0x0400004d, 0x41780800,
- 0x592c1c0a, 0x820c0580, 0x00001000, 0x040007d6,
- 0x8c102512, 0x040007d4, 0x592c780a, 0x583c080b,
- 0x583c1c0a, 0x0401f7d0, 0x4807c857, 0x592c780a,
- 0x59300402, 0x592c1405, 0x8c08151e, 0x0402000d,
- 0x592c1207, 0x48007c07, 0x48047808, 0x48087a07,
- 0x84102512, 0x48107c09, 0x4c0c0000, 0x0201f800,
- 0x00100589, 0x403e5800, 0x0401fb10, 0x0401f7d9,
- 0x48025c07, 0x48065808, 0x583c080d, 0x583c000c,
- 0x80040c00, 0x82041480, 0x0000001d, 0x04001006,
- 0x583c1001, 0x480a5801, 0x49787801, 0x42000800,
- 0x0000001c, 0x82040c00, 0x00000014, 0x4c0c0000,
- 0x4c500000, 0x4c540000, 0x823ca400, 0x00000009,
- 0x832cac00, 0x00000009, 0x4c100000, 0x4c3c0000,
- 0x0401fb11, 0x5c007800, 0x5c002000, 0x5c00a800,
- 0x5c00a000, 0x84102512, 0x48125c09, 0x403e5800,
- 0x0201f800, 0x00100589, 0x0201f800, 0x00108f22,
- 0x42034000, 0x0010b8fa, 0x59a1d806, 0x80edd9c0,
- 0x02000800, 0x0010032d, 0x48efc857, 0x58ec0008,
- 0x4803c857, 0x0801f800, 0x0401f7aa, 0x4933c857,
- 0x1c01f000, 0x59301415, 0x480bc857, 0x8c08151c,
- 0x0402000e, 0x80000540, 0x4803c857, 0x0400078b,
- 0x80042c80, 0x04021789, 0x8c081514, 0x04020005,
- 0x592c0810, 0x4807c857, 0x80040480, 0x48026017,
- 0x8408155c, 0x480a6415, 0x59301008, 0x8408151e,
- 0x480a6008, 0x4c100000, 0x4c3c0000, 0x4d400000,
- 0x592e8207, 0x4a025a07, 0x00000001, 0x0201f800,
- 0x00108f22, 0x49425a07, 0x5c028000, 0x5c007800,
- 0x5c002000, 0x497a580a, 0x8c102512, 0x04000006,
- 0x4d2c0000, 0x403e5800, 0x0201f800, 0x00100589,
- 0x5c025800, 0x82102500, 0xffffedff, 0x48125c09,
- 0x59301006, 0x800811c0, 0x02000000, 0x00108b66,
- 0x59a8002c, 0x80080480, 0x02021000, 0x00108b66,
- 0x4a025a05, 0x00000103, 0x4a025a07, 0x00000006,
- 0x497a5c0a, 0x492fc857, 0x0201f800, 0x000203ab,
- 0x0201f800, 0x00104126, 0x0201f000, 0x00020a10,
- 0x59325809, 0x592c0409, 0x8c000518, 0x04000004,
- 0x412df800, 0x0201f000, 0x00100bae, 0x1c01f000,
- 0x4933c857, 0x59325809, 0x497a580a, 0x4a025a07,
- 0x00000000, 0x4a025a05, 0x00000103, 0x59300812,
- 0x4807c857, 0x800409c0, 0x0402000c, 0x48065808,
- 0x59300c02, 0x48065c07, 0x0201f800, 0x00108f22,
- 0x0201f800, 0x000203ab, 0x0201f800, 0x00104126,
- 0x0201f000, 0x00020a10, 0x59340200, 0x8c00050e,
- 0x04020005, 0x59300812, 0x0401fe33, 0x48065808,
- 0x0401f7f0, 0x592c0209, 0x8c00050e, 0x040207fa,
- 0x4933c857, 0x0201f000, 0x00108b66, 0x4933c857,
- 0x59325809, 0x812e59c0, 0x02000800, 0x0010032d,
- 0x592c020b, 0x8c000502, 0x02000800, 0x0010032d,
- 0x4a026006, 0x00000002, 0x1c01f000, 0x5930001d,
- 0x800001c0, 0x02020800, 0x001091d8, 0x59300008,
- 0x4933c857, 0x4803c857, 0x8c00050e, 0x04000037,
- 0x8c000500, 0x04000029, 0x8c00051c, 0x0400000a,
- 0x84000500, 0x48026008, 0x59325809, 0x592c3c09,
- 0x481fc857, 0x841c3d58, 0x481e5c09, 0x0201f000,
- 0x00020a70, 0x59325809, 0x592c3c09, 0x841c3d58,
- 0x59300008, 0x8c00051c, 0x040207f2, 0x481e5c09,
- 0x42000000, 0x00000005, 0x40000000, 0x80000040,
- 0x040207fe, 0x59300008, 0x8c00051c, 0x040207e9,
- 0x592c0205, 0x82000500, 0x000000ff, 0x82000580,
- 0x00000048, 0x04020003, 0x497a580c, 0x0401f002,
- 0x497a580a, 0x481e5c09, 0x4a025a07, 0x00000000,
- 0x0201f000, 0x00100b8f, 0x8c000524, 0x040007d9,
- 0x59325809, 0x4c000000, 0x592c0409, 0x8c00051c,
- 0x5c000000, 0x04020003, 0x4a026012, 0xffffffff,
- 0x84000524, 0x0401f7cf, 0x1c01f000, 0x4933c857,
- 0x41780800, 0x83380480, 0x00000058, 0x0402100b,
- 0x83380480, 0x00000040, 0x04001008, 0x4d2c0000,
- 0x59325809, 0x812e59c0, 0x0c020806, 0x5c025800,
- 0x0201f000, 0x00020a10, 0x493bc857, 0x1c01f000,
- 0x001082b8, 0x001082b8, 0x001082b8, 0x001082b8,
- 0x001082b8, 0x001082ba, 0x001082b8, 0x001082b8,
- 0x001082b8, 0x001082b8, 0x001082b8, 0x001082b8,
- 0x001082b8, 0x001082b8, 0x001082b8, 0x001082b8,
- 0x001082b8, 0x001082b8, 0x001082b8, 0x001082b8,
- 0x001082bd, 0x001082b8, 0x001082b8, 0x001082b8,
- 0x0201f800, 0x0010032d, 0x59cc0808, 0x497a5808,
- 0x4807c857, 0x59300402, 0x48025c07, 0x4a025a05,
- 0x00000103, 0x900401c0, 0x4802580a, 0x4a025a07,
- 0x00000000, 0x800409c0, 0x02000000, 0x000203ab,
- 0x59cc0009, 0x4802580b, 0x82042500, 0x00000100,
- 0x04000002, 0x59cc200b, 0x4812580d, 0x82040500,
- 0x00000200, 0x04000002, 0x59cc000a, 0x4802580c,
- 0x80100c00, 0x02001800, 0x0010032d, 0x02000000,
- 0x000203ab, 0x82041480, 0x0000001d, 0x04001006,
- 0x592c0405, 0x8c00051e, 0x0400000e, 0x42000800,
- 0x0000001c, 0x4c500000, 0x4c540000, 0x83cca400,
- 0x0000000c, 0x832cac00, 0x0000000e, 0x0401f9ea,
- 0x5c00a800, 0x5c00a000, 0x0201f000, 0x000203ab,
- 0x0401f98f, 0x0401f1c9, 0x83380480, 0x00000093,
- 0x02021800, 0x0010032d, 0x83380480, 0x00000085,
- 0x02001800, 0x0010032d, 0x0c01f001, 0x00108306,
- 0x00108304, 0x00108304, 0x0010830d, 0x00108304,
- 0x00108304, 0x00108304, 0x00108304, 0x00108304,
- 0x00108304, 0x00108304, 0x00108304, 0x00108304,
- 0x0201f800, 0x0010032d, 0x4a026203, 0x00000001,
- 0x493a6403, 0x42000800, 0x80000040, 0x0201f000,
- 0x000209b1, 0x83300580, 0x0010f64c, 0x02020800,
- 0x0010032d, 0x4933c857, 0x59cc1404, 0x0201f800,
- 0x00108d91, 0x04000025, 0x591c0203, 0x82000580,
- 0x00000000, 0x04000021, 0x591c000a, 0x81340580,
- 0x0402001e, 0x59cc1204, 0x82080580, 0x0000ffff,
- 0x04000007, 0x591c0202, 0x82000d80, 0x0000ffff,
- 0x04000003, 0x80080580, 0x04020014, 0x4d300000,
- 0x4d1c0000, 0x411e6000, 0x0401fa06, 0x5c023800,
- 0x5c026000, 0x0400000b, 0x59cc0005, 0x8c000500,
- 0x04020003, 0x0401f9a9, 0x0401f003, 0x4a023a03,
- 0x00000002, 0x4a026403, 0x00000086, 0x0401f005,
- 0x0401f9ea, 0x040007f5, 0x4a026403, 0x00000087,
- 0x4d2c0000, 0x0201f800, 0x0010a5eb, 0x0201f800,
- 0x001044a8, 0x5c025800, 0x59340200, 0x8c00050e,
- 0x0400000d, 0x59cc1404, 0x0201f800, 0x00108d91,
- 0x04000009, 0x591c0415, 0x8c00051a, 0x04000006,
- 0x4d300000, 0x411e6000, 0x0201f800, 0x00108b7b,
- 0x5c026000, 0x1c01f000, 0x83380580, 0x00000013,
- 0x0402000b, 0x59300403, 0x4803c857, 0x82000d80,
- 0x00000086, 0x04000020, 0x82000d80, 0x00000087,
- 0x02020800, 0x0010032d, 0x0401f01b, 0x83380580,
- 0x00000027, 0x04000005, 0x83380580, 0x00000014,
- 0x02020800, 0x0010032d, 0x493bc857, 0x0201f800,
- 0x00106102, 0x0201f800, 0x00108953, 0x02000000,
- 0x00107144, 0x4d2c0000, 0x59325809, 0x0201f800,
- 0x000203ab, 0x59300a1e, 0x82040d80, 0x00000003,
- 0x02000800, 0x00108a55, 0x5c025800, 0x0201f000,
- 0x00107144, 0x4933c857, 0x0201f000, 0x00020a10,
- 0x83380580, 0x00000013, 0x04020006, 0x59300403,
- 0x4803c857, 0x82000480, 0x00000085, 0x0c01f053,
- 0x83380580, 0x00000027, 0x04020047, 0x4933c857,
- 0x0201f800, 0x00106102, 0x4d3c0000, 0x417a7800,
- 0x0201f800, 0x0010e06f, 0x5c027800, 0x42003000,
- 0x00000015, 0x41782800, 0x42002000, 0x00000003,
- 0x42028000, 0x00000029, 0x4d400000, 0x4d440000,
- 0x59368c03, 0x0201f800, 0x001091ea, 0x5c028800,
- 0x5c028000, 0x42000000, 0x0010bd1d, 0x0201f800,
- 0x0010ae10, 0x0201f800, 0x00108953, 0x02000000,
- 0x00020a10, 0x4d2c0000, 0x59325809, 0x592c0205,
- 0x82000500, 0x000000ff, 0x82000580, 0x00000014,
- 0x02020800, 0x00108a55, 0x4a025a05, 0x00000103,
- 0x59300402, 0x48025c07, 0x497a580a, 0x49425a07,
- 0x0201f800, 0x000203ab, 0x5c025800, 0x0201f000,
- 0x00020a10, 0x83380580, 0x00000089, 0x04000005,
- 0x83380580, 0x0000008a, 0x02020000, 0x001071c7,
- 0x0201f800, 0x001064f2, 0x02020000, 0x001071c7,
- 0x59300a03, 0x82040580, 0x0000000a, 0x0400002a,
- 0x82040580, 0x0000000c, 0x04000027, 0x0201f800,
- 0x0010032d, 0x83380580, 0x00000014, 0x040207ea,
- 0x4933c857, 0x0201f800, 0x00106102, 0x42028000,
- 0x00000006, 0x0401f7cc, 0x001083e5, 0x001083e3,
- 0x001083e3, 0x001083e3, 0x001083e3, 0x001083e3,
- 0x001083eb, 0x001083e3, 0x001083e3, 0x001083e3,
- 0x001083e3, 0x001083e3, 0x001083e3, 0x0201f800,
- 0x0010032d, 0x4933c857, 0x59a8002a, 0x48026006,
- 0x4a026203, 0x0000000a, 0x1c01f000, 0x4933c857,
- 0x59a8002a, 0x48026006, 0x4a026203, 0x0000000c,
- 0x1c01f000, 0x5932680a, 0x83380580, 0x00000089,
- 0x04000008, 0x83380580, 0x0000008a, 0x04000029,
- 0x4933c857, 0x493bc857, 0x0201f000, 0x001071c7,
- 0x4933c857, 0x59325809, 0x59300a1e, 0x82040580,
- 0x00000003, 0x0402000a, 0x0201f800, 0x00108953,
- 0x04000012, 0x0201f800, 0x000203ab, 0x0201f800,
- 0x00104126, 0x497a6009, 0x0401f00c, 0x5930021e,
- 0x82000580, 0x00000001, 0x04020008, 0x59300c17,
- 0x82040580, 0x00000039, 0x0400001d, 0x82040580,
- 0x00000035, 0x0400001a, 0x59cc0c07, 0x4806641a,
- 0x59cc0a07, 0x4806621a, 0x59300203, 0x4802641e,
- 0x4a026203, 0x00000011, 0x0201f000, 0x00107144,
- 0x4933c857, 0x5930021e, 0x82000580, 0x00000001,
- 0x04020048, 0x59300c17, 0x82040580, 0x00000035,
- 0x04000007, 0x82040580, 0x0000001e, 0x04000004,
- 0x82040580, 0x00000039, 0x0402003e, 0x4933c857,
- 0x4c5c0000, 0x4c600000, 0x4d1c0000, 0x4130b800,
- 0x4004c000, 0x0201f800, 0x00108d34, 0x0402002f,
- 0x82600580, 0x00000035, 0x04020004, 0x591c0c15,
- 0x8c040d02, 0x04000029, 0x0201f800, 0x00107188,
- 0x04000026, 0x491fc857, 0x4933c857, 0x82600580,
- 0x00000035, 0x04000004, 0x82600580, 0x00000039,
- 0x04020002, 0x4932381d, 0x48626403, 0x4a026203,
- 0x00000001, 0x4a026407, 0x00000001, 0x585c080a,
- 0x4807c857, 0x4806600a, 0x585c0c16, 0x4807c857,
- 0x48066416, 0x585c0a16, 0x4807c857, 0x48066216,
- 0x585c0a17, 0x4807c857, 0x48066217, 0x585c0c1a,
- 0x4807c857, 0x4806641a, 0x585c0a1a, 0x4807c857,
- 0x4806621a, 0x491e601f, 0x42000800, 0x80000040,
- 0x0201f800, 0x000209b1, 0x405e6000, 0x5c023800,
- 0x5c00c000, 0x5c00b800, 0x0201f000, 0x00020a10,
- 0x0201f800, 0x00108953, 0x0400000b, 0x4d2c0000,
- 0x59325809, 0x0201f800, 0x000203ab, 0x5930021e,
- 0x82000580, 0x00000003, 0x02000800, 0x00104126,
- 0x5c025800, 0x0201f000, 0x00020a10, 0x4803c856,
- 0x4c500000, 0x4c540000, 0x412c7800, 0x4c3c0000,
- 0x42002800, 0x00000001, 0x82040480, 0x00000101,
- 0x04001003, 0x42000800, 0x00000100, 0x40043000,
- 0x42000800, 0x0000001c, 0x83cca400, 0x0000000c,
- 0x832cac00, 0x0000000e, 0x0401f843, 0x82183480,
- 0x0000001c, 0x592e5801, 0x812e59c0, 0x02020800,
- 0x00100589, 0x0201f800, 0x0010056f, 0x04000016,
- 0x80142800, 0x4a025805, 0x00000110, 0x492c7801,
- 0x82180c80, 0x0000003d, 0x04021006, 0x40180800,
- 0x832cac00, 0x00000006, 0x0401f82f, 0x0401f00a,
- 0x82183480, 0x0000003c, 0x42000800, 0x0000003c,
- 0x412c7800, 0x832cac00, 0x00000006, 0x0401f826,
- 0x0401f7e9, 0x5c007800, 0x841429c0, 0x82142d40,
- 0x00000003, 0x48147a05, 0x403e5800, 0x5c00a800,
- 0x5c00a000, 0x1c01f000, 0x492fc857, 0x812e59c0,
- 0x0400000f, 0x4d2c0000, 0x4c3c0000, 0x592c7801,
- 0x803c79c0, 0x04000006, 0x497a5801, 0x0201f800,
- 0x000203ab, 0x403e5800, 0x0401f7f9, 0x5c007800,
- 0x0201f800, 0x000203ab, 0x5c025800, 0x1c01f000,
- 0x4803c856, 0x4c580000, 0x82040400, 0x00000003,
- 0x8000b104, 0x0201f800, 0x0010aee2, 0x5c00b000,
- 0x1c01f000, 0x4803c856, 0x4c580000, 0x82040c00,
- 0x00000003, 0x8004b104, 0x0201f800, 0x0010aee2,
- 0x5c00b000, 0x1c01f000, 0x591c0c07, 0x82040580,
- 0x00000003, 0x04000007, 0x82040580, 0x00000002,
- 0x04000004, 0x82040580, 0x0000000a, 0x0402002d,
- 0x4d300000, 0x4d2c0000, 0x411e6000, 0x59325809,
- 0x0201f800, 0x00108953, 0x04000022, 0x59300c07,
- 0x82040580, 0x0000000a, 0x04000023, 0x82040580,
- 0x00000003, 0x04020009, 0x592c0a05, 0x82040d00,
- 0x000000ff, 0x82040d80, 0x00000014, 0x04000003,
- 0x4a02621e, 0x00000003, 0x0401f81c, 0x4d400000,
- 0x42028000, 0x00000013, 0x592c0a09, 0x84040d54,
- 0x0201f800, 0x00104543, 0x5c028000, 0x0201f800,
- 0x00108f22, 0x0201f800, 0x000203ab, 0x5930021e,
- 0x82000580, 0x00000003, 0x02000800, 0x00108a55,
- 0x0201f800, 0x00107144, 0x5c025800, 0x5c026000,
- 0x1c01f000, 0x4a025a07, 0x00000013, 0x4a02621e,
- 0x0000000a, 0x0401f7ee, 0x592c0409, 0x8c000512,
- 0x04000009, 0x84000512, 0x48025c09, 0x4d2c0000,
- 0x592e580a, 0x0201f800, 0x00100589, 0x5c025800,
- 0x497a580a, 0x1c01f000, 0x59cc0005, 0x8c000500,
- 0x0402000b, 0x591c0407, 0x82000580, 0x00000002,
- 0x04020007, 0x591c0c03, 0x82040580, 0x00000085,
- 0x04000003, 0x82040580, 0x0000008b, 0x1c01f000,
- 0x4933c857, 0x4d3c0000, 0x42027800, 0x00000002,
- 0x59300407, 0x82000c80, 0x00000014, 0x02021800,
- 0x0010032d, 0x0c01f80a, 0x5c027800, 0x1c01f000,
- 0x4933c857, 0x59300407, 0x82000c80, 0x00000014,
- 0x02021800, 0x0010032d, 0x0c01f001, 0x0010855c,
- 0x00108559, 0x00108559, 0x0010858d, 0x00108557,
- 0x00108559, 0x00108574, 0x00108559, 0x00108557,
- 0x00105f34, 0x0010931f, 0x00108559, 0x00108559,
- 0x00108557, 0x00108557, 0x00108557, 0x0010867f,
- 0x00108559, 0x0010ac8b, 0x0010ac8b, 0x0201f800,
- 0x0010032d, 0x4803c856, 0x80000580, 0x1c01f000,
- 0x4803c856, 0x8d3e7d02, 0x04020015, 0x0401fbf4,
- 0x0400000f, 0x59325809, 0x41780800, 0x4d400000,
- 0x42028000, 0x00000005, 0x0201f800, 0x00104543,
- 0x5c028000, 0x0201f800, 0x00108f22, 0x0201f800,
- 0x00108b01, 0x0201f800, 0x000203ab, 0x0201f800,
- 0x00107144, 0x82000540, 0x00000001, 0x1c01f000,
- 0x4933c857, 0x0201f800, 0x001040c4, 0x0400000b,
- 0x59300415, 0x84000556, 0x48026415, 0x0401f812,
- 0x4df00000, 0x59300415, 0x84000516, 0x48026415,
- 0x5c03e000, 0x1c01f000, 0x4d400000, 0x42028000,
- 0x00000010, 0x0201f800, 0x00109e4a, 0x4a026407,
- 0x00000006, 0x4a026203, 0x00000007, 0x5c028000,
- 0x1c01f000, 0x4933c857, 0x0201f800, 0x001061b2,
- 0x4df00000, 0x0401f8da, 0x82000c80, 0x0000000e,
- 0x02021800, 0x0010032d, 0x0c01f001, 0x001085a7,
- 0x0010862a, 0x001085be, 0x0010863e, 0x00108625,
- 0x001085a5, 0x001085a7, 0x001085a7, 0x001085ab,
- 0x001085a7, 0x001085a7, 0x001085a7, 0x001085a7,
- 0x001085be, 0x0201f800, 0x0010032d, 0x5c03e000,
- 0x02000800, 0x0010619f, 0x0401f7af, 0x5c03e000,
- 0x02000800, 0x0010619f, 0x59300407, 0x82000580,
- 0x00000003, 0x040207ab, 0x59300203, 0x82000580,
- 0x0000000d, 0x040007a7, 0x8d3e7d02, 0x040207a5,
- 0x4d340000, 0x5932680a, 0x0201f800, 0x00104126,
- 0x5c026800, 0x0401f79f, 0x0201f800, 0x00109391,
- 0x59300004, 0x8400055c, 0x48026004, 0x0201f800,
- 0x0010619f, 0x59300407, 0x82000580, 0x00000006,
- 0x04000057, 0x8d3e7d02, 0x04020055, 0x497a621e,
- 0x59300203, 0x82000580, 0x0000000d, 0x04000003,
- 0x4a02621e, 0x00000003, 0x0401fb81, 0x04020004,
- 0x8d3e7d00, 0x04000040, 0x0401f034, 0x4d2c0000,
- 0x4d400000, 0x59325809, 0x0201f800, 0x00108b01,
- 0x592c0409, 0x8c000512, 0x04000009, 0x4d2c0000,
- 0x84000512, 0x48025c09, 0x592c080a, 0x40065800,
- 0x0201f800, 0x00100589, 0x5c025800, 0x4d400000,
- 0x42028000, 0x00000005, 0x592c0a09, 0x8c040d0e,
- 0x04000004, 0x42028000, 0x00000002, 0x0401f001,
- 0x0201f800, 0x00104543, 0x5c028000, 0x0201f800,
- 0x00108f22, 0x8d3e7d00, 0x04020004, 0x0201f800,
- 0x0010af23, 0x04020004, 0x0201f800, 0x000203ab,
- 0x497a6009, 0x5c028000, 0x5c025800, 0x8d3e7d00,
- 0x0400000d, 0x59300a1e, 0x82040d80, 0x00000003,
- 0x04020006, 0x4d340000, 0x5932680a, 0x0201f800,
- 0x00104126, 0x5c026800, 0x0201f800, 0x00107144,
- 0x0401f013, 0x0201f800, 0x0010af23, 0x04020006,
- 0x59300a1e, 0x82040d80, 0x00000003, 0x02000800,
- 0x00108a55, 0x4a026403, 0x00000085, 0x4a026203,
- 0x00000009, 0x4a026407, 0x00000002, 0x42000800,
- 0x8000404b, 0x0201f800, 0x000209b1, 0x5c03e000,
- 0x02020800, 0x001061b2, 0x82000540, 0x00000001,
- 0x1c01f000, 0x0201f800, 0x0010619f, 0x0201f800,
- 0x00100bd5, 0x0401f795, 0x598c000f, 0x81300580,
- 0x04020004, 0x0201f800, 0x0010642d, 0x0402001d,
- 0x0201f800, 0x0010e453, 0x80c40040, 0x04020006,
- 0x59300c03, 0x82040580, 0x00000040, 0x04000774,
- 0x0401f786, 0x0201f800, 0x001060bd, 0x04000011,
- 0x0201f800, 0x0010032d, 0x0401f81b, 0x04020004,
- 0x0201f800, 0x001063f6, 0x0402000a, 0x0201f800,
- 0x0010e2da, 0x80c40040, 0x040207f3, 0x59300c03,
- 0x82040580, 0x00000040, 0x04000761, 0x0401f773,
- 0x59300203, 0x82000c80, 0x0000000e, 0x02021800,
- 0x0010032d, 0x0c01f746, 0x0401f807, 0x42018800,
- 0x00000001, 0x04000003, 0x42018800, 0x00000000,
- 0x1c01f000, 0x417a3000, 0x42032000, 0x0000bf32,
- 0x59900004, 0x81300580, 0x04000009, 0x83932400,
- 0x00000010, 0x811a3000, 0x83180480, 0x00000005,
- 0x040017f8, 0x82000540, 0x00000001, 0x1c01f000,
- 0x0401f803, 0x40018800, 0x1c01f000, 0x59300004,
- 0x8c00053e, 0x04000010, 0x8c00050c, 0x0402000e,
- 0x8c000516, 0x04020006, 0x82000d00, 0x0000001f,
- 0x82040580, 0x00000005, 0x04020004, 0x42000000,
- 0x00000003, 0x0401f005, 0x42000000, 0x00000001,
- 0x0401f002, 0x59300203, 0x1c01f000, 0x4933c857,
- 0x0201f800, 0x001061b2, 0x4df00000, 0x59300203,
- 0x82000c80, 0x0000000e, 0x02021800, 0x0010032d,
- 0x0c01f001, 0x00108699, 0x001086b6, 0x0010869d,
- 0x00108697, 0x00108697, 0x00108697, 0x00108697,
- 0x00108697, 0x00108697, 0x00108697, 0x00108697,
- 0x00108697, 0x00108697, 0x00108697, 0x0201f800,
- 0x0010032d, 0x5c03e000, 0x02000800, 0x0010619f,
- 0x0401f6bd, 0x5c03e000, 0x02000800, 0x0010619f,
- 0x4d2c0000, 0x59325809, 0x59300403, 0x82000580,
- 0x00000052, 0x02000800, 0x00100fba, 0x0401faac,
- 0x02000800, 0x0010032d, 0x4a025a07, 0x00000005,
- 0x0201f800, 0x000203ab, 0x0201f800, 0x001043e2,
- 0x0201f800, 0x00107144, 0x5c025800, 0x82000540,
- 0x00000001, 0x1c01f000, 0x598c000f, 0x81300580,
- 0x0402001b, 0x59300004, 0x8c000520, 0x04000004,
- 0x84000520, 0x48026004, 0x0401f01b, 0x42001000,
- 0x0010bc55, 0x50081000, 0x58080002, 0x82000580,
- 0x00000100, 0x0400000b, 0x5808000b, 0x81300580,
- 0x02020800, 0x0010032d, 0x0201f800, 0x0010e453,
- 0x80c40040, 0x02020800, 0x0010032d, 0x0401f7ce,
- 0x0201f800, 0x0010642d, 0x0402000d, 0x59300004,
- 0x8c000520, 0x04000004, 0x84000520, 0x48026004,
- 0x0401f7c5, 0x0201f800, 0x0010e453, 0x80c40040,
- 0x040007c1, 0x0201f800, 0x0010032d, 0x59300203,
- 0x82000c80, 0x0000000e, 0x02021800, 0x0010032d,
- 0x0c01f7a5, 0x4d340000, 0x5932680a, 0x59300407,
- 0x4933c857, 0x4803c857, 0x82000c80, 0x00000014,
- 0x02021800, 0x0010032d, 0x0c01f803, 0x5c026800,
- 0x1c01f000, 0x0010870a, 0x00108736, 0x00108880,
- 0x0010ea61, 0x00108873, 0x0010887b, 0x00109e39,
- 0x00108716, 0x0010886e, 0x00105f1c, 0x001088ee,
- 0x00108705, 0x00108705, 0x00108705, 0x00108705,
- 0x00020a10, 0x00109071, 0x00109071, 0x0010ac9b,
- 0x0010ac9b, 0x0201f800, 0x0010032d, 0x0401fb7c,
- 0x02000000, 0x001078e7, 0x1c01f000, 0x0201f800,
- 0x001061b2, 0x0201f800, 0x00106102, 0x0201f800,
- 0x0010619f, 0x0201f000, 0x00020a10, 0x4a026006,
- 0x00000001, 0x1c01f000, 0x4d340000, 0x4c5c0000,
- 0x59300203, 0x82000580, 0x00000011, 0x04020016,
- 0x5932680a, 0x4130b800, 0x0201f800, 0x000209ee,
- 0x04000010, 0x4a026203, 0x00000001, 0x4a026403,
- 0x0000001e, 0x585c041a, 0x4802641a, 0x585c021a,
- 0x4802621a, 0x4936600a, 0x4a026407, 0x00000001,
- 0x42000800, 0x80000040, 0x0201f800, 0x000209b1,
- 0x405e6000, 0x0201f800, 0x00020a10, 0x5c00b800,
- 0x5c026800, 0x1c01f000, 0x42000000, 0x0010bd28,
- 0x0201f800, 0x0010ae10, 0x0201f800, 0x0010a681,
- 0x59300203, 0x82000c80, 0x0000000e, 0x02021800,
- 0x0010032d, 0x4803c857, 0x0c01f001, 0x00108751,
- 0x00108713, 0x00108753, 0x00108751, 0x00108753,
- 0x00108753, 0x0010870b, 0x00108751, 0x00108707,
- 0x00108751, 0x00108751, 0x00108751, 0x00108751,
- 0x00108751, 0x0201f800, 0x0010032d, 0x83340580,
- 0x0010c2b2, 0x02000000, 0x00107144, 0x4d2c0000,
- 0x59340400, 0x82000500, 0x000000ff, 0x82000c80,
- 0x0000000c, 0x02021800, 0x0010032d, 0x59303403,
- 0x82180d80, 0x00000004, 0x04020004, 0x42000000,
- 0x00000001, 0x0401f006, 0x82180d80, 0x00000000,
- 0x04020003, 0x42000000, 0x00000001, 0x4803c857,
- 0x0c01f803, 0x5c025800, 0x1c01f000, 0x0010877b,
- 0x0010881b, 0x0010877d, 0x001087b2, 0x0010877d,
- 0x00108838, 0x0010877d, 0x00108787, 0x0010877b,
- 0x00108838, 0x0010877b, 0x00108796, 0x0201f800,
- 0x0010032d, 0x59300403, 0x82000d80, 0x00000016,
- 0x0400002e, 0x82000d80, 0x00000004, 0x0400002b,
- 0x82000d80, 0x00000002, 0x04000028, 0x0401fafc,
- 0x04000026, 0x59300403, 0x82000d80, 0x00000022,
- 0x040000af, 0x82000d80, 0x00000039, 0x040000b4,
- 0x82000d80, 0x00000035, 0x040000b1, 0x82000d80,
- 0x0000001e, 0x0400001b, 0x0401f9bd, 0x04000007,
- 0x0201f800, 0x00108f1d, 0x04020004, 0x0201f800,
- 0x001041bc, 0x0401f011, 0x59300403, 0x82000d80,
- 0x00000001, 0x04020004, 0x0201f800, 0x00104181,
- 0x0400000a, 0x4d3c0000, 0x417a7800, 0x0201f800,
- 0x0010e06f, 0x5c027800, 0x42000000, 0x0010bd1d,
- 0x0201f800, 0x0010ae10, 0x0201f800, 0x001078e7,
- 0x0201f000, 0x00107144, 0x0401f9a1, 0x04000004,
- 0x0201f800, 0x00108f1d, 0x040000a6, 0x59300c03,
- 0x82040580, 0x00000016, 0x04000057, 0x82040580,
- 0x00000002, 0x0402002f, 0x59a8021b, 0x8c000502,
- 0x04020016, 0x59a81073, 0x8c08153e, 0x04020013,
- 0x0201f800, 0x00104755, 0x04020010, 0x0201f800,
- 0x00104780, 0x04020006, 0x42000000, 0x00000001,
- 0x0201f800, 0x00104726, 0x0401f08e, 0x4a035014,
- 0x00000001, 0x4202d800, 0x00000001, 0x0201f800,
- 0x001046af, 0x0401f087, 0x59340412, 0x82000500,
- 0x000000ff, 0x04000013, 0x80000040, 0x48026c12,
- 0x497a6205, 0x4d300000, 0x0201f800, 0x00107188,
- 0x5c000000, 0x0400000a, 0x49780009, 0x4a000407,
- 0x00000007, 0x4a000006, 0x00000398, 0x4936600a,
- 0x4a026407, 0x00000001, 0x0401f027, 0x40026000,
- 0x59300403, 0x82000d80, 0x00000002, 0x04020010,
- 0x59340403, 0x82000580, 0x000007fe, 0x0402000c,
- 0x59a81073, 0x8c08153e, 0x04020004, 0x59a8021b,
- 0x84000540, 0x4803521b, 0x0201f800, 0x00103a35,
- 0x0201f800, 0x001078e7, 0x0401f00c, 0x0201f800,
- 0x001078e7, 0x4d3c0000, 0x417a7800, 0x0201f800,
- 0x0010e06f, 0x5c027800, 0x42000000, 0x0010bd1d,
- 0x0201f800, 0x0010ae10, 0x59a81073, 0x8c08153e,
- 0x04020003, 0x0201f800, 0x00101a68, 0x0201f000,
- 0x00107144, 0x42000800, 0x00000003, 0x0201f800,
- 0x00103d9d, 0x4a026203, 0x00000001, 0x4a026403,
- 0x00000002, 0x0201f000, 0x0010608d, 0x0401f938,
- 0x04020792, 0x0201f800, 0x00101a68, 0x4d3c0000,
- 0x417a7800, 0x0201f800, 0x0010e06f, 0x5c027800,
- 0x42000000, 0x0010bd1d, 0x0201f800, 0x0010ae10,
- 0x42003000, 0x00000018, 0x41782800, 0x42002000,
- 0x00000000, 0x4d400000, 0x4d440000, 0x59368c03,
- 0x42028000, 0x00000029, 0x0201f800, 0x001091ea,
- 0x5c028800, 0x5c028000, 0x0201f000, 0x00107144,
- 0x0201f800, 0x001041bc, 0x0401f7c5, 0x42000000,
- 0x0010bd27, 0x0201f800, 0x0010ae10, 0x0201f800,
- 0x001073f9, 0x040207be, 0x1c01f000, 0x59300c03,
- 0x0201f800, 0x00108d34, 0x02020000, 0x00020a10,
- 0x836c0580, 0x00000003, 0x04000004, 0x4a026006,
- 0x00000002, 0x1c01f000, 0x59300403, 0x48026417,
- 0x4a02621e, 0x00000001, 0x4a026403, 0x00000085,
- 0x4a026203, 0x00000009, 0x4a026407, 0x00000002,
- 0x42000800, 0x8000004b, 0x0201f000, 0x000209b1,
- 0x0201f800, 0x001078e7, 0x4d3c0000, 0x417a7800,
- 0x0201f800, 0x0010e06f, 0x5c027800, 0x42000000,
- 0x0010bd1d, 0x0201f800, 0x0010ae10, 0x497a6009,
- 0x4a026407, 0x00000007, 0x4a026006, 0x00000398,
- 0x497a6205, 0x1c01f000, 0x42000000, 0x0010bd2e,
- 0x0201f800, 0x0010ae10, 0x0401f6c4, 0x42000000,
- 0x0010bd29, 0x0201f800, 0x0010ae10, 0x0201f800,
- 0x0010a681, 0x0201f000, 0x00107144, 0x42000000,
- 0x0010bd2b, 0x0201f800, 0x0010ae10, 0x1c01f000,
- 0x42000000, 0x0010bd2a, 0x0201f800, 0x0010ae10,
- 0x59300203, 0x82000c80, 0x0000000e, 0x02021800,
- 0x0010032d, 0x4803c857, 0x0c01f001, 0x00108899,
- 0x00108713, 0x00108899, 0x00108899, 0x00108899,
- 0x00108899, 0x00108899, 0x00108899, 0x00108899,
- 0x00108713, 0x0010889b, 0x00108713, 0x001088a3,
- 0x00108899, 0x0201f800, 0x0010032d, 0x4a026403,
- 0x0000008b, 0x4a026203, 0x0000000b, 0x42000800,
- 0x8000404b, 0x0201f000, 0x000209b1, 0x59300a1e,
- 0x0401f8af, 0x0400000f, 0x4d2c0000, 0x59325809,
- 0x4a025a07, 0x00000006, 0x497a5c0a, 0x0201f800,
- 0x000203ab, 0x59300a1e, 0x82040d80, 0x00000003,
- 0x02000800, 0x00104126, 0x5c025800, 0x497a6009,
- 0x4d3c0000, 0x417a7800, 0x0201f800, 0x0010e06f,
- 0x5c027800, 0x42003000, 0x00000011, 0x0201f800,
- 0x0010a5a1, 0x42000000, 0x0010bd1d, 0x0201f800,
- 0x0010ae10, 0x4c5c0000, 0x4130b800, 0x0201f800,
- 0x00107188, 0x04000008, 0x4936600a, 0x4d300000,
- 0x405e6000, 0x0201f800, 0x00107144, 0x5c026000,
- 0x0401f002, 0x405e6000, 0x5c00b800, 0x497a6009,
- 0x4a026407, 0x00000001, 0x4a026403, 0x00000001,
- 0x8d0e1d20, 0x04000011, 0x4a026407, 0x00000004,
- 0x4a026203, 0x00000007, 0x4a026421, 0x00000001,
- 0x42003000, 0x00000004, 0x4d400000, 0x42028000,
- 0x00000029, 0x41782800, 0x0201f800, 0x0010a00e,
- 0x5c028000, 0x1c01f000, 0x42000800, 0x0000000b,
- 0x0201f800, 0x00103d9d, 0x4a026203, 0x00000001,
- 0x0201f000, 0x0010608d, 0x42000000, 0x0010bd30,
- 0x0201f800, 0x0010ae10, 0x59300203, 0x82000c80,
- 0x0000000e, 0x02021800, 0x0010032d, 0x4803c857,
- 0x0c01f001, 0x0010891f, 0x00108907, 0x0010890b,
- 0x00108920, 0x00108909, 0x00108907, 0x00108907,
- 0x00108907, 0x00108907, 0x00108907, 0x00108907,
- 0x00108907, 0x00108907, 0x00108907, 0x0201f800,
- 0x0010032d, 0x0201f800, 0x00100bd5, 0x4d2c0000,
- 0x59325809, 0x4a025a07, 0x00000006, 0x0201f800,
- 0x000203ab, 0x5c025800, 0x497a6009, 0x4a02621e,
- 0x0000000a, 0x4a026403, 0x00000085, 0x4a026203,
- 0x00000009, 0x4a026407, 0x00000002, 0x42000800,
- 0x8000404b, 0x0201f000, 0x000209b1, 0x1c01f000,
- 0x0201f800, 0x001061b2, 0x4df00000, 0x0401fd36,
- 0x04020004, 0x0201f800, 0x001063f6, 0x0402000d,
- 0x0201f800, 0x0010e2da, 0x80c40040, 0x04020005,
- 0x5c03e000, 0x0201f800, 0x0010619f, 0x0401f7dc,
- 0x0201f800, 0x001060bd, 0x02020800, 0x0010032d,
- 0x5c03e000, 0x0201f800, 0x0010619f, 0x59300203,
- 0x82000d80, 0x00000003, 0x02000800, 0x0010032d,
- 0x82000c80, 0x0000000e, 0x02021800, 0x0010032d,
- 0x0c01f7b9, 0x59a8000d, 0x59a8084f, 0x80040400,
- 0x80080480, 0x04021004, 0x82000540, 0x00000001,
- 0x1c01f000, 0x480bc857, 0x80000580, 0x1c01f000,
- 0x0401f807, 0x42018800, 0x00000000, 0x04000003,
- 0x42018800, 0x00000001, 0x1c01f000, 0x4c040000,
- 0x59300809, 0x59a8000c, 0x80040480, 0x04001007,
- 0x59a8000a, 0x80040480, 0x04021004, 0x800409c0,
- 0x5c000800, 0x1c01f000, 0x800409c0, 0x02020800,
- 0x0010032d, 0x4803c856, 0x0401f7fa, 0x4803c856,
- 0x4d300000, 0x0201f800, 0x000209ee, 0x0400000a,
- 0x0401f832, 0x4d380000, 0x42027000, 0x0000004b,
- 0x0201f800, 0x00020a34, 0x5c027000, 0x82000540,
- 0x00000001, 0x5c026000, 0x1c01f000, 0x4803c856,
- 0x4d300000, 0x0201f800, 0x00107188, 0x0400001e,
- 0x0401f822, 0x4d300000, 0x0201f800, 0x001061b2,
- 0x4df00000, 0x4d3c0000, 0x42027800, 0x00002000,
- 0x0201f800, 0x0010e6a9, 0x0201f800, 0x0010e742,
- 0x0201f800, 0x0010eb5d, 0x5c027800, 0x5c03e000,
- 0x02000800, 0x0010619f, 0x5c026000, 0x8d3e7d3e,
- 0x0402000b, 0x4d380000, 0x42027000, 0x0000004c,
- 0x0201f800, 0x00020a34, 0x5c027000, 0x82000540,
- 0x00000001, 0x5c026000, 0x1c01f000, 0x0201f800,
- 0x00020a10, 0x0401f7fa, 0x592c0408, 0x494a6018,
- 0x494e6019, 0x4936600a, 0x492e6009, 0x4a026407,
- 0x00000003, 0x800000c2, 0x800008c4, 0x80040400,
- 0x48026006, 0x1c01f000, 0x493bc857, 0x4d300000,
- 0x0201f800, 0x000209ee, 0x0400000d, 0x0401ffef,
- 0x4d400000, 0x42028000, 0x00000005, 0x0401f80d,
- 0x5c028000, 0x8d3e7d3e, 0x04020007, 0x0201f800,
- 0x00020a34, 0x82000540, 0x00000001, 0x5c026000,
- 0x1c01f000, 0x0201f800, 0x00020a10, 0x0401f7fa,
- 0x4803c856, 0x0201f800, 0x001061b2, 0x4df00000,
- 0x4d3c0000, 0x4d440000, 0x59368c03, 0x42027800,
- 0x00002001, 0x0201f800, 0x0010e624, 0x0201f800,
- 0x0010e66e, 0x0201f800, 0x0010e742, 0x0201f800,
- 0x0010eb5d, 0x5c028800, 0x5c027800, 0x5c03e000,
- 0x02000000, 0x0010619f, 0x1c01f000, 0x4803c856,
- 0x4d300000, 0x0201f800, 0x00107188, 0x0400000f,
- 0x481a601d, 0x48ee6022, 0x4936600a, 0x4a026407,
- 0x00000001, 0x492e6009, 0x4d380000, 0x42027000,
- 0x0000001f, 0x0201f800, 0x00020a34, 0x5c027000,
- 0x82000540, 0x00000001, 0x5c026000, 0x1c01f000,
- 0x4803c856, 0x4d300000, 0x0201f800, 0x00107188,
- 0x0400000e, 0x48ee6022, 0x4936600a, 0x4a026407,
- 0x00000001, 0x492e6009, 0x4d380000, 0x42027000,
- 0x00000055, 0x0201f800, 0x00020a34, 0x5c027000,
- 0x82000540, 0x00000001, 0x5c026000, 0x1c01f000,
- 0x4803c856, 0x4d300000, 0x0201f800, 0x00107188,
- 0x0400000f, 0x481a601d, 0x48ee6022, 0x4936600a,
- 0x4a026407, 0x00000001, 0x492e6009, 0x4d380000,
- 0x42027000, 0x0000003d, 0x0201f800, 0x00020a34,
- 0x5c027000, 0x82000540, 0x00000001, 0x5c026000,
- 0x1c01f000, 0x4803c856, 0x4d300000, 0x0201f800,
- 0x00107188, 0x04000014, 0x4936600a, 0x492fc857,
- 0x4933c857, 0x592c0405, 0x8c00051e, 0x04000003,
- 0x48efc857, 0x48ee6022, 0x4a026407, 0x00000001,
- 0x492e6009, 0x4d380000, 0x42027000, 0x00000000,
- 0x0201f800, 0x00020a34, 0x5c027000, 0x82000540,
- 0x00000001, 0x5c026000, 0x1c01f000, 0x4803c856,
- 0x4d300000, 0x0201f800, 0x00107188, 0x0400000f,
- 0x48ee6022, 0x481a601d, 0x4936600a, 0x4a026407,
- 0x00000001, 0x492e6009, 0x4d380000, 0x42027000,
- 0x00000044, 0x0201f800, 0x00020a34, 0x5c027000,
- 0x82000540, 0x00000001, 0x5c026000, 0x1c01f000,
- 0x4803c856, 0x4d300000, 0x0201f800, 0x00107188,
- 0x0400000f, 0x481a601d, 0x48ee6022, 0x4936600a,
- 0x4a026407, 0x00000001, 0x492e6009, 0x4d380000,
- 0x42027000, 0x00000049, 0x0201f800, 0x00020a34,
- 0x5c027000, 0x82000540, 0x00000001, 0x5c026000,
- 0x1c01f000, 0x5930000a, 0x80001540, 0x02000800,
- 0x0010032d, 0x5808040b, 0x4803c856, 0x80000040,
- 0x04001003, 0x4800140b, 0x04020009, 0x58080010,
- 0x80000540, 0x04000006, 0x58080203, 0x80000540,
- 0x04020003, 0x4a001203, 0x00000001, 0x1c01f000,
- 0x4803c856, 0x59300403, 0x82000d80, 0x00000002,
- 0x0400000f, 0x82000d80, 0x00000003, 0x0400000c,
- 0x82000d80, 0x00000004, 0x04000009, 0x599c0819,
- 0x8c040d0e, 0x04000004, 0x82000d80, 0x00000000,
- 0x04000003, 0x82000540, 0x00000001, 0x1c01f000,
- 0x0401f807, 0x42018800, 0x00000001, 0x04000003,
- 0x42018800, 0x00000000, 0x1c01f000, 0x4803c856,
- 0x4c000000, 0x4d2c0000, 0x59300407, 0x82000580,
- 0x00000004, 0x0400001d, 0x59300009, 0x80025d40,
- 0x800001c0, 0x04000019, 0x0201f800, 0x00108f1d,
- 0x04000014, 0x59300407, 0x82004580, 0x00000010,
- 0x04000010, 0x82004580, 0x00000011, 0x0400000d,
- 0x82004580, 0x00000003, 0x0400000c, 0x82004580,
- 0x00000002, 0x04000009, 0x82004580, 0x0000000a,
- 0x04000006, 0x592c0405, 0x8c00051e, 0x04000003,
- 0x80000580, 0x0401f003, 0x82000540, 0x00000001,
- 0x5c025800, 0x5c000000, 0x1c01f000, 0x4803c856,
- 0x4d300000, 0x0201f800, 0x00107188, 0x04000013,
- 0x4936600a, 0x48ee6022, 0x4a026407, 0x00000001,
- 0x492e6009, 0x4d3c0000, 0x417a7800, 0x0201f800,
- 0x0010e06f, 0x5c027800, 0x4d380000, 0x42027000,
- 0x00000028, 0x0201f800, 0x00020a34, 0x5c027000,
- 0x82000540, 0x00000001, 0x5c026000, 0x1c01f000,
- 0x4803c856, 0x83380580, 0x00000015, 0x0402000d,
- 0x59a8005a, 0x82000580, 0x00000074, 0x04020009,
- 0x0201f800, 0x00103e7e, 0x4a026203, 0x00000001,
- 0x4a026403, 0x00000029, 0x0201f000, 0x0010608d,
- 0x0201f800, 0x001078e7, 0x0201f000, 0x00020a10,
- 0x4803c856, 0x83380580, 0x00000016, 0x04020007,
- 0x42000800, 0x00000004, 0x0201f800, 0x00103d9d,
- 0x0201f000, 0x001073af, 0x83380580, 0x00000015,
- 0x04020013, 0x59a8005a, 0x82000580, 0x00000014,
- 0x0402000f, 0x0201f800, 0x00103ee9, 0x0201f800,
- 0x00107dde, 0x0402000a, 0x59340404, 0x80000540,
- 0x04000007, 0x42000800, 0x00000006, 0x0201f800,
- 0x00103d9d, 0x0201f000, 0x001073af, 0x0201f800,
- 0x001078e7, 0x0201f000, 0x00020a10, 0x4803c856,
- 0x592c0207, 0x82000580, 0x00000005, 0x04000002,
- 0x1c01f000, 0x4803c856, 0x592c0209, 0x8400054a,
- 0x48025a09, 0x1c01f000, 0x59300809, 0x800409c0,
- 0x04000008, 0x58040205, 0x82000580, 0x00000152,
- 0x04020004, 0x59a8082a, 0x48066006, 0x1c01f000,
- 0x599c0416, 0x800001c0, 0x04000008, 0x82000c80,
- 0x00000004, 0x04001005, 0x800000c2, 0x800008c4,
- 0x80040c00, 0x0401f7f5, 0x59300403, 0x82000580,
- 0x00000002, 0x040207f0, 0x5930080a, 0x58040403,
- 0x82000580, 0x000007fe, 0x040207eb, 0x42000800,
- 0x00000028, 0x0401f7e9, 0x497a6205, 0x497a6009,
- 0x4a026203, 0x00000001, 0x4a026403, 0x00000050,
- 0x42000800, 0x80000043, 0x0201f000, 0x000209b1,
- 0x4933c857, 0x4d340000, 0x5932680a, 0x59340200,
- 0x8c00050e, 0x04000006, 0x59300407, 0x82000c80,
- 0x00000014, 0x04021004, 0x0c01f806, 0x5c026800,
- 0x1c01f000, 0x0201f800, 0x0010870a, 0x0401f7fc,
- 0x0010870a, 0x00108b54, 0x00108b58, 0x00108b5b,
- 0x0010a11f, 0x0010a13c, 0x0010a140, 0x0010870a,
- 0x0010870a, 0x0010870a, 0x0010870a, 0x0010870a,
- 0x0010870a, 0x0010870a, 0x0010870a, 0x0010870a,
- 0x0010870a, 0x0010870a, 0x0010870a, 0x0010870a,
- 0x4803c856, 0x40000000, 0x40000000, 0x1c01f000,
- 0x40000000, 0x40000000, 0x1c01f000, 0x5930001d,
- 0x4803c857, 0x59300415, 0x4933c857, 0x4803c857,
- 0x8c000502, 0x04000005, 0x4803c857, 0x84000540,
- 0x48026415, 0x1c01f000, 0x42000000, 0xd0000000,
- 0x41300800, 0x0201f800, 0x00100897, 0x0401f810,
- 0x0402000e, 0x59300c15, 0x59300403, 0x82000580,
- 0x00000040, 0x04000003, 0x84040d40, 0x0401f005,
- 0x59a8002a, 0x82000400, 0x0000000a, 0x48026205,
- 0x84040d42, 0x48066415, 0x1c01f000, 0x4933c857,
- 0x4d340000, 0x5932680a, 0x59340a00, 0x8c040d0e,
- 0x02000800, 0x0010032d, 0x5930001d, 0x80000540,
- 0x04020033, 0x59300403, 0x4803c857, 0x82000580,
- 0x00000040, 0x04000003, 0x8d0e1d0e, 0x0402002a,
- 0x4d1c0000, 0x41323800, 0x0201f800, 0x00107188,
- 0x04000023, 0x4932381d, 0x591c0415, 0x84000542,
- 0x48023c15, 0x4936600a, 0x591c0407, 0x82000580,
- 0x00000003, 0x04000006, 0x591c0202, 0x4802641a,
- 0x591c0402, 0x4802621a, 0x0401f005, 0x591c0202,
- 0x4802621a, 0x591c0402, 0x4802641a, 0x491e601f,
- 0x4a026407, 0x00000001, 0x4a026403, 0x00000035,
- 0x4a026203, 0x00000001, 0x42000800, 0x80000040,
- 0x0201f800, 0x000209b1, 0x411e6000, 0x5c023800,
- 0x80000580, 0x5c026800, 0x1c01f000, 0x411e6000,
- 0x5c023800, 0x59a8002c, 0x48026205, 0x82000540,
- 0x00000001, 0x0401f7f8, 0x4933c857, 0x4d2c0000,
- 0x4932381d, 0x4a026202, 0x0000ffff, 0x591e5809,
- 0x591c0008, 0x8c00051e, 0x04000005, 0x8400051e,
- 0x48023808, 0x497a580a, 0x0401f018, 0x592c0409,
- 0x8c000518, 0x04000015, 0x84000518, 0x48025c09,
- 0x4d400000, 0x592e8207, 0x4a025a07, 0x00000001,
- 0x0401fb52, 0x49425a07, 0x5c028000, 0x497a580a,
- 0x592c0409, 0x8c000512, 0x04000008, 0x4d2c0000,
- 0x84000512, 0x48025c09, 0x592e580a, 0x0201f800,
- 0x00100589, 0x5c025800, 0x59a8002c, 0x48026205,
- 0x591c0215, 0x48026217, 0x82000d80, 0x00000001,
- 0x04000008, 0x4a023a03, 0x00000002, 0x82000580,
- 0x00000005, 0x04000008, 0x497a6016, 0x0401f01e,
- 0x591c0008, 0x84000540, 0x48023808, 0x4a023a03,
- 0x00000004, 0x591c0415, 0x4803c857, 0x8400051c,
- 0x84000554, 0x48023c15, 0x592c0010, 0x40001000,
- 0x591c0817, 0x80040480, 0x040217f0, 0x591c0017,
- 0x82000500, 0xfffffffc, 0x48026016, 0x48023817,
- 0x591c0a15, 0x4807c857, 0x82040d80, 0x00000005,
- 0x04020005, 0x480bc857, 0x4803c857, 0x4a023813,
- 0xffffffff, 0x591c0402, 0x4802641a, 0x591c0202,
- 0x4802621a, 0x591e680a, 0x4936600a, 0x4a026407,
- 0x00000001, 0x4a026403, 0x00000039, 0x4a026203,
- 0x00000001, 0x42000800, 0x80000040, 0x0201f800,
- 0x000209b1, 0x5c025800, 0x1c01f000, 0x4933c857,
- 0x59300415, 0x8c000514, 0x04000015, 0x8c00051c,
- 0x04020012, 0x59300017, 0x80100480, 0x04001006,
- 0x04000005, 0x59300415, 0x84000514, 0x8400055c,
- 0x0401f009, 0x48126017, 0x48126013, 0x40100000,
- 0x592c1810, 0x800c0480, 0x48026012, 0x59300415,
- 0x84000514, 0x48026415, 0x1c01f000, 0x4933c857,
- 0x8c00051c, 0x04020008, 0x59300013, 0x4803c857,
- 0x48026017, 0x59300415, 0x8400055c, 0x4803c857,
- 0x48026415, 0x1c01f000, 0x0401f807, 0x42018800,
- 0x00000001, 0x04000003, 0x42018800, 0x00000000,
- 0x1c01f000, 0x59300c03, 0x4933c857, 0x4807c857,
- 0x82040480, 0x00000034, 0x04001006, 0x82040480,
- 0x0000003c, 0x04021003, 0x80000580, 0x1c01f000,
- 0x82000540, 0x00000001, 0x0401f7fd, 0x41780800,
- 0x59a81028, 0x42000000, 0x00000032, 0x0201f800,
- 0x0010600e, 0x800811c0, 0x04020003, 0x42001000,
- 0x00000014, 0x480b502a, 0x59a81029, 0x480b5022,
- 0x41780800, 0x42000000, 0x00000064, 0x0201f800,
- 0x0010600e, 0x800811c0, 0x04020003, 0x42001000,
- 0x00000014, 0x480b502b, 0x82081400, 0x0000000a,
- 0x480b502c, 0x42000800, 0x00000001, 0x0201f800,
- 0x001061d9, 0x42000000, 0x30000000, 0x40080800,
- 0x0201f800, 0x00020105, 0x42000800, 0x00000003,
- 0x59a8100f, 0x0201f800, 0x001061d9, 0x0201f000,
- 0x001040ff, 0x4a03502a, 0x00000028, 0x4a03502b,
- 0x00000014, 0x4a035022, 0x000007d0, 0x42001000,
- 0x0000001e, 0x480b502c, 0x42000800, 0x00000001,
- 0x0201f800, 0x001061d9, 0x42000000, 0x30000000,
- 0x40080800, 0x0201f800, 0x00020105, 0x42000800,
- 0x00000003, 0x59a8100f, 0x0201f000, 0x001061d9,
- 0x4933c857, 0x4d2c0000, 0x59300403, 0x82000580,
- 0x0000003e, 0x04020005, 0x59325818, 0x812e59c0,
- 0x02020800, 0x00100580, 0x5c025800, 0x1c01f000,
- 0x4937c857, 0x4d300000, 0x0201f800, 0x00107188,
- 0x04000011, 0x4936600a, 0x4a026407, 0x00000001,
- 0x492e6009, 0x42000800, 0x00000009, 0x0201f800,
- 0x00103d9d, 0x4d380000, 0x42027000, 0x00000033,
- 0x0201f800, 0x00020a34, 0x5c027000, 0x82000540,
- 0x00000001, 0x5c026000, 0x1c01f000, 0x4933c857,
- 0x4d2c0000, 0x4c580000, 0x4d3c0000, 0x59325809,
- 0x83380580, 0x00000015, 0x04020025, 0x59a8b05a,
- 0x82580c80, 0x00000019, 0x04001003, 0x4200b000,
- 0x00000018, 0x8058b104, 0x0401fa18, 0x80000580,
- 0x0401fa28, 0x832cac00, 0x0000000a, 0x83cca400,
- 0x00000006, 0x0201f800, 0x0010aee2, 0x4c600000,
- 0x4200c000, 0x00000001, 0x592c100b, 0x8c081518,
- 0x04020006, 0x59a8000f, 0x592c100e, 0x80080580,
- 0x04020007, 0x4178c000, 0x5930100a, 0x58081403,
- 0x417a7800, 0x0201f800, 0x00101a94, 0x5c00c000,
- 0x0201f800, 0x001073af, 0x0401f008, 0x4200b000,
- 0x00000002, 0x0401fa17, 0x0201f800, 0x001078e7,
- 0x0201f800, 0x00020a10, 0x5c027800, 0x5c00b000,
- 0x5c025800, 0x1c01f000, 0x4933c856, 0x42018800,
- 0x00000000, 0x4936600a, 0x4a026407, 0x00000001,
- 0x492e6009, 0x4d380000, 0x42027000, 0x0000004d,
- 0x0201f800, 0x00020a34, 0x5c027000, 0x82000540,
- 0x00000001, 0x42018800, 0x00000001, 0x1c01f000,
- 0x4803c856, 0x4d2c0000, 0x83380580, 0x00000015,
- 0x0402002c, 0x59a8085a, 0x59325809, 0x5930040b,
- 0x80040580, 0x04020027, 0x4c500000, 0x4c540000,
- 0x4c580000, 0x83cca400, 0x00000006, 0x4050a800,
- 0x5930b40b, 0x8258b400, 0x00000003, 0x8058b104,
- 0x0201f800, 0x0010af0c, 0x83cca400, 0x00000006,
- 0x592cb206, 0x8258b400, 0x00000003, 0x8058b104,
- 0x832cac00, 0x00000007, 0x0201f800, 0x0010aee2,
- 0x592e5801, 0x812e59c0, 0x040207f6, 0x5931d822,
- 0x58ef400a, 0x58ee580c, 0x4a025a05, 0x00000103,
- 0x58ec0008, 0x0801f800, 0x59300402, 0x5c00b000,
- 0x5c00a800, 0x5c00a000, 0x5c025800, 0x1c01f000,
- 0x0201f800, 0x001078e7, 0x5c025800, 0x1c01f000,
- 0x4933c857, 0x82040d80, 0x00000035, 0x04000005,
- 0x5930141a, 0x0401f858, 0x04000027, 0x0401f006,
- 0x4d300000, 0x5932601f, 0x0401f85d, 0x5c026000,
- 0x04000020, 0x591c0c07, 0x82040580, 0x00000003,
- 0x04000004, 0x82040580, 0x00000006, 0x0402001c,
- 0x591c0c02, 0x5930041a, 0x80040580, 0x04000009,
- 0x5930021a, 0x80040580, 0x04020015, 0x591c0a02,
- 0x5930041a, 0x80040580, 0x04020011, 0x0401f009,
- 0x59300a1a, 0x82040580, 0x0000ffff, 0x04000005,
- 0x591c0202, 0x59300a1a, 0x80040580, 0x04020008,
- 0x591c000a, 0x5930080a, 0x80040580, 0x1c01f000,
- 0x417a3800, 0x82000540, 0x00000001, 0x1c01f000,
- 0x4803c856, 0x59b800e4, 0x8c000538, 0x02020800,
- 0x0010032d, 0x42000800, 0x0000ff00, 0x4a0370e4,
- 0x20000000, 0x59b800e4, 0x80040840, 0x02000800,
- 0x0010032d, 0x8c00053c, 0x040207f9, 0x4a0370e4,
- 0x30000000, 0x40000000, 0x40000000, 0x40000000,
- 0x59b800e4, 0x8c00053c, 0x040207f1, 0x1c01f000,
- 0x4803c856, 0x4a0370e4, 0x20000000, 0x40000000,
- 0x59b800e4, 0x8c000538, 0x040207fb, 0x1c01f000,
- 0x0401f807, 0x42018800, 0x00000001, 0x04020003,
- 0x42018800, 0x00000000, 0x1c01f000, 0x59300808,
- 0x8c040d1e, 0x592c0c09, 0x04020002, 0x8c040d18,
- 0x1c01f000, 0x0201f800, 0x00108941, 0x04000007,
- 0x800800c4, 0x800808ca, 0x80040c00, 0x82063c00,
- 0x0010f694, 0x491fc857, 0x1c01f000, 0x0201f800,
- 0x00109291, 0x04020007, 0x59301402, 0x0401fff2,
- 0x04000007, 0x411c0000, 0x81300580, 0x04000003,
- 0x81780500, 0x0401f002, 0x81300540, 0x1c01f000,
- 0x4d300000, 0x0201f800, 0x00020319, 0x0402000a,
- 0x42026000, 0x0010f64c, 0x4936600a, 0x492e6009,
- 0x0201f800, 0x0010e06f, 0x80000580, 0x5c026000,
- 0x1c01f000, 0x82000540, 0x00000001, 0x0401f7fc,
- 0x4933c857, 0x0201f800, 0x00108953, 0x02000800,
- 0x0010032d, 0x4d2c0000, 0x4d340000, 0x4d440000,
- 0x4c580000, 0x59325809, 0x5932680a, 0x49425a07,
- 0x0201f800, 0x00104f93, 0x592e8c07, 0x592c4208,
- 0x82200500, 0x0000000f, 0x0c01f806, 0x5c00b000,
- 0x5c028800, 0x5c026800, 0x5c025800, 0x1c01f000,
- 0x00108de3, 0x00108e05, 0x00108e0c, 0x00108e10,
- 0x00108e19, 0x00108de0, 0x00108de0, 0x00108de0,
- 0x00108e1d, 0x00108e29, 0x00108e29, 0x00108de0,
- 0x00108de0, 0x00108de0, 0x00108de0, 0x00108de0,
- 0x4803c857, 0x0201f800, 0x0010032d, 0x814281c0,
- 0x04020012, 0x41785800, 0x592c0405, 0x8c00051c,
- 0x04020002, 0x59345c05, 0x442c2800, 0x59340008,
- 0x48002802, 0x59340009, 0x48002801, 0x59340006,
- 0x48002804, 0x59340007, 0x48002803, 0x4200b000,
- 0x0000000b, 0x0401f037, 0x592c0208, 0x8c00051e,
- 0x4200b000, 0x00000002, 0x04020032, 0x8204b540,
- 0x00000000, 0x0400002f, 0x44042800, 0x5932680a,
- 0x59340400, 0x48002801, 0x4200b000, 0x00000002,
- 0x0401f028, 0x814281c0, 0x040207f0, 0x59345c05,
- 0x442c2800, 0x4200b000, 0x00000001, 0x0401f021,
- 0x8340b540, 0x00000000, 0x0400001e, 0x0401f027,
- 0x814281c0, 0x04020025, 0x59340200, 0x44002800,
- 0x59340001, 0x48002801, 0x4200b000, 0x00000002,
- 0x0401f014, 0x8340b540, 0x00000000, 0x0402001b,
- 0x0401f010, 0x8340b540, 0x00000000, 0x0400000d,
- 0x0201f800, 0x001041ca, 0x04000014, 0x8c20450e,
- 0x04000002, 0x497a600a, 0x4178b000, 0x497a5a07,
- 0x0401f004, 0x8340b540, 0x00000000, 0x0402000b,
- 0x592c0405, 0x8400051c, 0x48025c05, 0x592c0208,
- 0x8400051e, 0x48025a08, 0x0401f8ac, 0x497a6009,
- 0x0201f000, 0x000203ab, 0x592c0208, 0x8c00051e,
- 0x4200b000, 0x00000002, 0x040207f2, 0x8204b540,
- 0x00000000, 0x040007ef, 0x44042800, 0x4200b000,
- 0x00000001, 0x0401f7eb, 0x4937c857, 0x4d300000,
- 0x0201f800, 0x00107188, 0x04000011, 0x4936600a,
- 0x4a026407, 0x00000001, 0x492e6009, 0x42000800,
- 0x0000000b, 0x0201f800, 0x00103d9d, 0x4d380000,
- 0x42027000, 0x00000043, 0x0201f800, 0x00020a34,
- 0x5c027000, 0x82000540, 0x00000001, 0x5c026000,
- 0x1c01f000, 0x4937c857, 0x4d2c0000, 0x59325809,
- 0x83380580, 0x00000015, 0x04020028, 0x59a8005a,
- 0x82000580, 0x00000004, 0x04020024, 0x59a8000f,
- 0x592c100a, 0x80080580, 0x04020013, 0x4d440000,
- 0x592e8c07, 0x592c0208, 0x4803c856, 0x82000500,
- 0x00000080, 0x84000548, 0x4d3c0000, 0x42027800,
- 0x00001000, 0x8c00050e, 0x04000002, 0x853e7d5c,
- 0x0201f800, 0x0010412f, 0x5c027800, 0x5c028800,
- 0x0401f004, 0x4803c856, 0x0201f800, 0x001041ca,
- 0x0201f800, 0x00108953, 0x04000017, 0x4d400000,
- 0x42028000, 0x00000000, 0x41780800, 0x0401ff35,
- 0x5c028000, 0x0401f00e, 0x0201f800, 0x001041ca,
- 0x040207f4, 0x0201f800, 0x00108953, 0x0400000a,
- 0x4c580000, 0x4200b000, 0x00000002, 0x0401f86d,
- 0x5c00b000, 0x0201f800, 0x001078e7, 0x0201f800,
- 0x00020a10, 0x5c025800, 0x1c01f000, 0x4937c857,
- 0x4d300000, 0x0201f800, 0x00107188, 0x04000012,
- 0x4936600a, 0x4a026407, 0x00000001, 0x4d3c0000,
- 0x4d380000, 0x417a7800, 0x0201f800, 0x00103d92,
- 0x492e6009, 0x42027000, 0x00000004, 0x0201f800,
- 0x00020a34, 0x5c027000, 0x5c027800, 0x82000540,
- 0x00000001, 0x5c026000, 0x1c01f000, 0x4937c857,
- 0x4d300000, 0x0201f800, 0x00107188, 0x04000011,
- 0x4936600a, 0x42000800, 0x00000003, 0x0201f800,
- 0x00103d9d, 0x4a026407, 0x00000001, 0x492e6009,
- 0x4d380000, 0x42027000, 0x00000051, 0x0201f800,
- 0x00020a34, 0x5c027000, 0x82000540, 0x00000001,
- 0x5c026000, 0x1c01f000, 0x4933c857, 0x42028800,
- 0x000007fc, 0x42003000, 0x00fffffc, 0x0201f800,
- 0x00103de1, 0x02020800, 0x0010032d, 0x4936600a,
- 0x417a7800, 0x0201f800, 0x00103d92, 0x42000800,
- 0x00000003, 0x0201f800, 0x00103d9d, 0x497a6c12,
- 0x4a026203, 0x00000001, 0x4a026403, 0x00000002,
- 0x0201f000, 0x0010608d, 0x492fc857, 0x4c580000,
- 0x4c000000, 0x8058b1c0, 0x0400000b, 0x82580500,
- 0xfffffff0, 0x02020800, 0x0010032d, 0x8058b0d0,
- 0x592c0409, 0x82000500, 0xfffff0ff, 0x80580540,
- 0x48025c09, 0x5c000000, 0x5c00b000, 0x1c01f000,
- 0x492fc857, 0x4c000000, 0x4c040000, 0x800000d8,
- 0x592c0c09, 0x82040d00, 0xffff0fff, 0x80040540,
- 0x48025c09, 0x5c000800, 0x5c000000, 0x1c01f000,
- 0x4933c857, 0x4d2c0000, 0x59325809, 0x592c0208,
- 0x8400055e, 0x48025a08, 0x4c500000, 0x4c540000,
- 0x4c580000, 0x0401ffd9, 0x0201f800, 0x00104f93,
- 0x46002800, 0x00000018, 0x80142800, 0x8058b040,
- 0x83cca400, 0x00000007, 0x4014a800, 0x0201f800,
- 0x0010aee2, 0x5c00b000, 0x5c00a800, 0x5c00a000,
- 0x5c025800, 0x1c01f000, 0x0401f807, 0x42018800,
- 0x00000001, 0x04000003, 0x42018800, 0x00000000,
- 0x1c01f000, 0x59325809, 0x592c0205, 0x82000580,
- 0x00000152, 0x1c01f000, 0x59300020, 0x80000540,
- 0x02020800, 0x00100a77, 0x1c01f000, 0x4d2c0000,
- 0x59325809, 0x59300203, 0x4933c857, 0x492fc857,
- 0x493bc857, 0x4803c857, 0x82003480, 0x0000000e,
- 0x02021800, 0x0010032d, 0x0c01f803, 0x5c025800,
- 0x1c01f000, 0x00108f43, 0x00108f4e, 0x00108f8c,
- 0x00108f43, 0x00108f43, 0x00108f43, 0x00108f43,
- 0x00108f43, 0x00108f45, 0x00108f43, 0x00108f43,
- 0x00108f43, 0x00108f43, 0x00108f43, 0x0201f800,
- 0x0010032d, 0x83383480, 0x00000058, 0x02021800,
- 0x0010032d, 0x493a6403, 0x4a026203, 0x00000001,
- 0x0201f000, 0x0010608d, 0x83380580, 0x00000013,
- 0x04020010, 0x492fc857, 0x592c000d, 0x800001c0,
- 0x04000006, 0x4a026203, 0x00000002, 0x59a8002a,
- 0x48026006, 0x1c01f000, 0x4a025a07, 0x00000000,
- 0x0201f800, 0x000203ab, 0x0201f000, 0x00020a10,
- 0x83380580, 0x00000027, 0x0400001b, 0x83380580,
- 0x00000014, 0x04000012, 0x83380580, 0x00000015,
- 0x04000005, 0x83380580, 0x00000016, 0x02020800,
- 0x0010032d, 0x0201f800, 0x001064f2, 0x02020000,
- 0x001071c7, 0x59300203, 0x82000580, 0x00000002,
- 0x02020800, 0x0010032d, 0x0401f016, 0x4937c857,
- 0x0201f800, 0x00106102, 0x4a02580f, 0x00000011,
- 0x0401f006, 0x4937c857, 0x0201f800, 0x00106102,
- 0x4a02580f, 0x00000010, 0x4a025a07, 0x00000031,
- 0x4a02580e, 0x00000004, 0x0201f800, 0x000203ab,
- 0x0201f800, 0x001043e2, 0x0201f000, 0x00107144,
- 0x59341400, 0x82081d00, 0x000000ff, 0x59300c03,
- 0x480bc857, 0x4807c857, 0x82040580, 0x00000053,
- 0x0400002e, 0x82040580, 0x00000002, 0x04000016,
- 0x82040580, 0x00000001, 0x04000017, 0x82040580,
- 0x00000003, 0x0400001c, 0x82040580, 0x00000005,
- 0x0400001d, 0x82040580, 0x00000033, 0x0400001a,
- 0x82040580, 0x00000000, 0x0400001b, 0x82040580,
- 0x00000004, 0x02020800, 0x0010032d, 0x0401f89e,
- 0x0401f016, 0x820c0580, 0x00000003, 0x04000849,
- 0x0401f012, 0x820c0580, 0x0000000b, 0x0402000f,
- 0x42000800, 0x00000007, 0x0201f800, 0x00103d9d,
- 0x0401f00a, 0x820c0580, 0x00000005, 0x04000861,
- 0x0401f006, 0x820c0580, 0x00000009, 0x04000886,
- 0x0401f002, 0x0401f890, 0x4a026403, 0x00000052,
- 0x59a8105a, 0x592c040c, 0x8c000500, 0x04000003,
- 0x42001000, 0x00000008, 0x592c040c, 0x8c000516,
- 0x04000003, 0x82081400, 0x00000018, 0x592c000d,
- 0x497a580e, 0x497a580f, 0x80080c80, 0x04000009,
- 0x04001005, 0x4a025a07, 0x00000007, 0x40001000,
- 0x0401f006, 0x4a025a07, 0x00000015, 0x0401f003,
- 0x4a025a07, 0x00000000, 0x480a580d, 0x0201f800,
- 0x00107329, 0x04000010, 0x592c1001, 0x480a600c,
- 0x58080800, 0x82080400, 0x00000002, 0x592c1012,
- 0x592c1813, 0x42003000, 0x00000000, 0x42002000,
- 0x00100f8a, 0x0201f800, 0x001074b6, 0x04000002,
- 0x1c01f000, 0x4a025a07, 0x0000002c, 0x497a580d,
- 0x0201f800, 0x000203ab, 0x0201f000, 0x00020a10,
- 0x83380580, 0x00000015, 0x0402000a, 0x59a8006d,
- 0x8c000502, 0x0402000b, 0x0201f800, 0x00103e7e,
- 0x42000800, 0x00000004, 0x0201f000, 0x00103d9d,
- 0x42000800, 0x00000007, 0x0201f000, 0x00103d9d,
- 0x0201f800, 0x00104755, 0x42001000, 0x00000010,
- 0x04020009, 0x59340002, 0x82000500, 0x00ff0000,
- 0x82000580, 0x00ff0000, 0x040007ec, 0x42001000,
- 0x00000008, 0x0201f800, 0x00104448, 0x040007e7,
- 0x592c040c, 0x84000540, 0x48025c0c, 0x0401f7e9,
- 0x83380580, 0x00000015, 0x0402000f, 0x59a8006d,
- 0x8c000502, 0x04020010, 0x0201f800, 0x00103ee9,
- 0x4d3c0000, 0x417a7800, 0x0201f800, 0x00103d92,
- 0x5c027800, 0x42000800, 0x00000006, 0x0201f000,
- 0x00103d9d, 0x42000800, 0x00000004, 0x0201f000,
- 0x00103d9d, 0x0201f800, 0x00104755, 0x42001000,
- 0x00000010, 0x04020009, 0x59340002, 0x82000500,
- 0x00ff0000, 0x82000580, 0x00ff0000, 0x040007e7,
- 0x42001000, 0x00000008, 0x0201f800, 0x00104448,
- 0x040007e2, 0x592c040c, 0x84000540, 0x48025c0c,
- 0x0401f7e9, 0x42000800, 0x00000004, 0x0201f000,
- 0x00103d9d, 0x83380580, 0x00000015, 0x04020005,
- 0x0201f800, 0x00109f8a, 0x02000800, 0x001040a6,
- 0x1c01f000, 0x83380580, 0x00000015, 0x0402001d,
- 0x4c580000, 0x83cc1400, 0x00000008, 0x4200b000,
- 0x00000002, 0x83341c00, 0x00000006, 0x0201f800,
- 0x00107df9, 0x04020012, 0x83cc1400, 0x0000000a,
- 0x4200b000, 0x00000002, 0x83341c00, 0x00000008,
- 0x0201f800, 0x00107df9, 0x04020009, 0x59342200,
- 0x59cc1007, 0x800811c0, 0x04000003, 0x480a6801,
- 0x84102542, 0x8410251a, 0x48126a00, 0x5c00b000,
- 0x1c01f000, 0x42000000, 0x0010bd35, 0x0201f800,
- 0x0010ae10, 0x0201f800, 0x001061b2, 0x59300203,
- 0x4933c857, 0x4803c857, 0x82000c80, 0x0000000e,
- 0x02021800, 0x0010032d, 0x0c01f803, 0x0201f000,
- 0x0010619f, 0x00109091, 0x001090a0, 0x00109092,
- 0x0010908f, 0x0010908f, 0x0010908f, 0x0010908f,
- 0x0010908f, 0x0010908f, 0x0010908f, 0x0010908f,
- 0x0010908f, 0x0010908f, 0x0010908f, 0x0201f800,
- 0x0010032d, 0x1c01f000, 0x59300403, 0x82000580,
- 0x00000052, 0x02000000, 0x00108713, 0x0201f800,
- 0x001043e2, 0x59325809, 0x4a025a07, 0x00000006,
- 0x0201f800, 0x000203ab, 0x0201f000, 0x00107144,
- 0x59301804, 0x840c0520, 0x48026004, 0x598c000f,
- 0x81300580, 0x04020010, 0x8c0c1d20, 0x04020010,
- 0x42001000, 0x0010bc55, 0x50081000, 0x58080002,
- 0x82000580, 0x00000100, 0x0400000f, 0x5808000b,
- 0x81300580, 0x02020800, 0x0010032d, 0x4978100b,
- 0x0401f003, 0x8c0c1d20, 0x040207dc, 0x0201f800,
- 0x0010e453, 0x80c40040, 0x040007d8, 0x0201f800,
- 0x0010032d, 0x0201f800, 0x0010642d, 0x040007f8,
- 0x59300203, 0x82000c80, 0x0000000e, 0x02021800,
- 0x0010032d, 0x0c01f7bc, 0x4933c857, 0x4c500000,
- 0x4c540000, 0x4c580000, 0x592c0c08, 0x48065814,
- 0x59cc0809, 0x48065808, 0x59cc0808, 0x4806580c,
- 0x59a8086c, 0x82040500, 0x000003ff, 0x800010c4,
- 0x8c040d14, 0x04000005, 0x59cc0002, 0x82000500,
- 0x00000003, 0x80081480, 0x480a621b, 0x412c0800,
- 0x0201f800, 0x0010055a, 0x02000800, 0x0010032d,
- 0x492c080a, 0x58040409, 0x84000552, 0x84000540,
- 0x48000c09, 0x82081400, 0x00000003, 0x80081104,
- 0x83cca400, 0x00000006, 0x832cac00, 0x00000005,
- 0x42000800, 0x00000010, 0x82080480, 0x00000010,
- 0x04021003, 0x40080800, 0x80000580, 0x4004b000,
- 0x4c000000, 0x0201f800, 0x0010af0c, 0x5c000000,
- 0x800001c0, 0x0400000d, 0x412c1000, 0x4c000000,
- 0x0201f800, 0x0010055a, 0x02000800, 0x0010032d,
- 0x492c1001, 0x832cac00, 0x00000005, 0x5c000000,
- 0x40001000, 0x0401f7e9, 0x5c00b000, 0x5c00a800,
- 0x5c00a000, 0x1c01f000, 0x4933c857, 0x4d2c0000,
- 0x4c380000, 0x59325809, 0x5930021b, 0x48025a09,
- 0x59301012, 0x4a026203, 0x00000002, 0x592c020b,
- 0x8c000500, 0x04000004, 0x59300016, 0x592c1010,
- 0x80081480, 0x800811c0, 0x04020008, 0x4a025a07,
- 0x00000000, 0x592c000c, 0x82000500, 0x00000c00,
- 0x0400000b, 0x0401f00b, 0x8c08153e, 0x04000006,
- 0x4a025a07, 0x00000007, 0x80081080, 0x80081000,
- 0x0401f003, 0x4a025a07, 0x00000015, 0x480a5808,
- 0x42000000, 0x0010c35c, 0x50007000, 0x5838000a,
- 0x80000540, 0x04020008, 0x4930700b, 0x4930700a,
- 0x58380002, 0x82000580, 0x00000000, 0x04020809,
- 0x0401f005, 0x82001400, 0x00000000, 0x45301000,
- 0x4930700a, 0x5c007000, 0x5c025800, 0x1c01f000,
- 0x4933c857, 0x592c000a, 0x40001000, 0x48007009,
- 0x82080400, 0x00000005, 0x48007003, 0x592c000e,
- 0x592c100f, 0x48007006, 0x48087007, 0x592c0014,
- 0x592c1209, 0x80080c80, 0x04001002, 0x40001000,
- 0x82081400, 0x00000003, 0x80081104, 0x82080480,
- 0x00000010, 0x04021003, 0x80000580, 0x0401f003,
- 0x42001000, 0x00000010, 0x4800700c, 0x48087004,
- 0x800810c4, 0x48087005, 0x40381000, 0x0201f000,
- 0x00020016, 0x4d2c0000, 0x0201f800, 0x0010055a,
- 0x02000800, 0x0010032d, 0x42000800, 0x0010c35c,
- 0x452c0800, 0x497a580a, 0x497a580b, 0x497a580c,
- 0x4a025808, 0x00109174, 0x4a025802, 0x00000100,
- 0x4a025801, 0x00000000, 0x5c025800, 0x1c01f000,
- 0x4833c857, 0x4d300000, 0x4d2c0000, 0x4c5c0000,
- 0x4030b800, 0x585c0009, 0x80025d40, 0x04020004,
- 0x585c000b, 0x4c000000, 0x0401f044, 0x585c0002,
- 0x82000580, 0x00000100, 0x04020022, 0x592c0801,
- 0x4c040000, 0x0201f800, 0x00100580, 0x5c000800,
- 0x800409c0, 0x0400001c, 0x4804b809, 0x585c100c,
- 0x800811c0, 0x04020005, 0x40065800, 0x0201f800,
- 0x00100589, 0x0401f014, 0x82080480, 0x00000010,
- 0x04021003, 0x80000580, 0x0401f003, 0x42001000,
- 0x00000010, 0x4800b80c, 0x4808b804, 0x800810c4,
- 0x4808b805, 0x82040400, 0x00000005, 0x4800b803,
- 0x405c1000, 0x0201f800, 0x00020016, 0x0401f025,
- 0x0401f828, 0x585c000b, 0x80026540, 0x59300000,
- 0x80000d40, 0x04020002, 0x4800b80a, 0x4800b80b,
- 0x497a6000, 0x4c000000, 0x4978b809, 0x59325809,
- 0x4a025a05, 0x00000103, 0x59300402, 0x48025c07,
- 0x592c100c, 0x4c080000, 0x0201f800, 0x000203ab,
- 0x0201f800, 0x00108a55, 0x5c001000, 0x8c081518,
- 0x04000004, 0x0201f800, 0x00108b26, 0x0401f003,
- 0x0201f800, 0x00020a10, 0x405c7000, 0x5c000000,
- 0x80026540, 0x04000003, 0x59325809, 0x0401ff79,
- 0x5c00b800, 0x5c025800, 0x5c026000, 0x1c01f000,
- 0x483bc857, 0x58380009, 0x40025800, 0x0201f800,
- 0x00100589, 0x5838000b, 0x80026540, 0x59300009,
- 0x80025d40, 0x4a025a07, 0x00000002, 0x1c01f000,
- 0x4803c857, 0x4933c857, 0x4d1c0000, 0x497a601d,
- 0x41323800, 0x40026000, 0x4d3c0000, 0x42027800,
- 0x00000005, 0x0401f840, 0x5c027800, 0x411e6000,
- 0x4933c857, 0x59300415, 0x84000502, 0x48026415,
- 0x5c023800, 0x1c01f000, 0x481bc857, 0x4933c857,
- 0x4c5c0000, 0x4c600000, 0x4010b800, 0x4014c000,
- 0x0201f800, 0x0010a5a1, 0x8d0e1d20, 0x04000008,
- 0x40602800, 0x405c3000, 0x0201f800, 0x0010a018,
- 0x82000540, 0x00000001, 0x0401f002, 0x80000580,
- 0x5c00c000, 0x5c00b800, 0x1c01f000, 0x4803c856,
- 0x4d300000, 0x42026000, 0x0010f694, 0x59a8000d,
- 0x81640580, 0x0400001a, 0x59300c07, 0x82040580,
- 0x00000001, 0x0400000d, 0x82040580, 0x00000004,
- 0x04000006, 0x82040580, 0x00000010, 0x02000800,
- 0x0010867f, 0x0401f009, 0x59300203, 0x82000d80,
- 0x00000007, 0x04000005, 0x4807c857, 0x0201f800,
- 0x00108c45, 0x04020808, 0x83326400, 0x00000024,
- 0x41580000, 0x81300480, 0x040017e5, 0x5c026000,
- 0x1c01f000, 0x4933c857, 0x59300403, 0x4803c857,
- 0x0201f800, 0x001061b2, 0x4df00000, 0x59300407,
- 0x4803c857, 0x82000d80, 0x00000002, 0x04000018,
- 0x82000d80, 0x00000001, 0x04000009, 0x82000d80,
- 0x00000004, 0x04000006, 0x4933c856, 0x5c03e000,
- 0x02000800, 0x0010619f, 0x0401f04b, 0x59300203,
- 0x82000d80, 0x00000001, 0x04000018, 0x82000d80,
- 0x00000002, 0x04000035, 0x82000d80, 0x00000005,
- 0x04000032, 0x0201f800, 0x0010032d, 0x59300203,
- 0x82000d80, 0x00000009, 0x0400000c, 0x82000d80,
- 0x0000000b, 0x04000009, 0x82000d80, 0x0000000a,
- 0x04000026, 0x82000d80, 0x0000000c, 0x04000023,
- 0x0201f800, 0x0010032d, 0x598c000f, 0x81300580,
- 0x04020004, 0x0201f800, 0x0010642d, 0x0402001b,
- 0x59300004, 0x4803c857, 0x8c000520, 0x04000004,
- 0x84000520, 0x48026004, 0x0401f014, 0x0201f800,
- 0x0010e453, 0x80c40040, 0x02020800, 0x0010032d,
- 0x5c03e000, 0x02000800, 0x0010619f, 0x59300407,
- 0x82000d80, 0x00000002, 0x04000017, 0x0201f800,
- 0x001043e2, 0x0201f800, 0x00108a83, 0x02000800,
- 0x001078e7, 0x0401f010, 0x5c03e000, 0x02000800,
- 0x0010619f, 0x59300407, 0x82000d80, 0x00000002,
- 0x04000009, 0x0201f800, 0x001043e2, 0x0201f800,
- 0x00108a83, 0x02000800, 0x001078e7, 0x8d3e7d00,
- 0x04000005, 0x0201f800, 0x0010a684, 0x0201f000,
- 0x00107144, 0x4a02621e, 0x00000001, 0x4a026403,
- 0x00000085, 0x4a026203, 0x00000009, 0x4a026407,
- 0x00000002, 0x42000800, 0x8000004b, 0x0201f000,
- 0x000209b1, 0x83300480, 0x0010f628, 0x04001006,
- 0x41540000, 0x81300480, 0x04021003, 0x80000580,
- 0x1c01f000, 0x81780080, 0x1c01f000, 0x59a8085a,
- 0x59cc2808, 0x82140500, 0x00000c00, 0x04000004,
- 0x82040480, 0x00000010, 0x04001018, 0x80001580,
- 0x8c142d12, 0x04000005, 0x82040480, 0x00000014,
- 0x04001012, 0x59cc100a, 0x80000580, 0x8c142d10,
- 0x04000005, 0x82040480, 0x00000018, 0x0400100b,
- 0x59cc000b, 0x80080400, 0x04001008, 0x04000006,
- 0x82000400, 0x00000018, 0x80040480, 0x04001003,
- 0x80000580, 0x1c01f000, 0x42000000, 0x0010bd12,
- 0x0201f800, 0x0010ae10, 0x82000540, 0x00000001,
- 0x0401f7f9, 0x4933c857, 0x4937c857, 0x492fc857,
- 0x48efc857, 0x4d1c0000, 0x4d300000, 0x41323800,
- 0x0201f800, 0x00107188, 0x04000020, 0x48ee6022,
- 0x4936600a, 0x591c0407, 0x82000580, 0x00000003,
- 0x04000008, 0x591c0202, 0x4803c857, 0x4802641a,
- 0x591c0402, 0x4802621a, 0x4803c857, 0x0401f007,
- 0x591c0202, 0x4803c857, 0x4802621a, 0x591c0402,
- 0x4802641a, 0x4803c857, 0x491e601f, 0x4a026407,
- 0x00000001, 0x492e6009, 0x4d380000, 0x42027000,
- 0x00000057, 0x0201f800, 0x00020a34, 0x5c027000,
- 0x82000540, 0x00000001, 0x5c026000, 0x5c023800,
- 0x1c01f000, 0x4933c857, 0x493bc857, 0x4937c857,
- 0x4d2c0000, 0x4c500000, 0x4c540000, 0x4c580000,
- 0x59325809, 0x0201f800, 0x00108953, 0x04000023,
- 0x83cca400, 0x00000006, 0x832cac00, 0x00000007,
- 0x83380580, 0x00000016, 0x04020009, 0x59a8005a,
- 0x82000580, 0x00000008, 0x04020014, 0x492fc857,
- 0x4200b000, 0x00000002, 0x0401f00b, 0x83380580,
- 0x00000015, 0x0402000d, 0x492fc857, 0x59a8005a,
- 0x82000580, 0x00000018, 0x04020008, 0x4200b000,
- 0x00000006, 0x0201f800, 0x0010aee2, 0x0201f800,
- 0x001073af, 0x0401f005, 0x0201f800, 0x001078e7,
- 0x0201f800, 0x00020a10, 0x5c00b000, 0x5c00a800,
- 0x5c00a000, 0x5c025800, 0x1c01f000, 0x4933c857,
- 0x0201f800, 0x001061b2, 0x4df00000, 0x59300203,
- 0x82000c80, 0x0000000e, 0x02021800, 0x0010032d,
- 0x0c01f001, 0x00109339, 0x00109337, 0x00109340,
- 0x00109360, 0x0010933e, 0x00109337, 0x00109337,
- 0x00109337, 0x00109337, 0x00109337, 0x00109337,
- 0x00109337, 0x00109337, 0x00109337, 0x0201f800,
- 0x0010032d, 0x5c03e000, 0x02000800, 0x0010619f,
- 0x80000580, 0x1c01f000, 0x0201f800, 0x00100bd5,
- 0x5c03e000, 0x02000800, 0x0010619f, 0x8d3e7d02,
- 0x04020017, 0x4d2c0000, 0x59325809, 0x4a025a07,
- 0x00000005, 0x0201f800, 0x000203ab, 0x5c025800,
- 0x497a6009, 0x8d3e7d00, 0x0402000f, 0x4a02621e,
- 0x0000000a, 0x4a026403, 0x00000085, 0x4a026203,
- 0x00000009, 0x4a026407, 0x00000002, 0x42000800,
- 0x8000404b, 0x0201f800, 0x000209b1, 0x81780080,
- 0x1c01f000, 0x0201f800, 0x00107144, 0x0401f7fc,
- 0x0201f800, 0x00108659, 0x04020004, 0x0201f800,
- 0x001063f6, 0x04020009, 0x0201f800, 0x0010e2da,
- 0x80c40040, 0x040007d7, 0x0201f800, 0x001060bd,
- 0x02020800, 0x0010032d, 0x59300203, 0x82000d80,
- 0x00000003, 0x02000800, 0x0010032d, 0x82000c80,
- 0x0000000e, 0x02021800, 0x0010032d, 0x0c01f7b2,
- 0x4933c857, 0x4d340000, 0x836c0580, 0x00000003,
- 0x04020013, 0x599c0018, 0x8c000516, 0x04000004,
- 0x0201f800, 0x001032cb, 0x0401f00d, 0x42000800,
- 0x00000004, 0x0201f800, 0x00103d9d, 0x4a02641e,
- 0x00000021, 0x0201f800, 0x00108ec6, 0x82000540,
- 0x00000001, 0x5c026800, 0x1c01f000, 0x80000580,
- 0x0401f7fd, 0x59303009, 0x58181a05, 0x820c1d00,
- 0x000000ff, 0x820c0580, 0x00000048, 0x04000004,
- 0x820c0580, 0x0000006a, 0x04020046, 0x58180409,
- 0x8c000500, 0x04000043, 0x42000000, 0x0010c35c,
- 0x50006000, 0x41781800, 0x5830200b, 0x41300000,
- 0x80100580, 0x04000006, 0x40101800, 0x580c2000,
- 0x801021c0, 0x040207fa, 0x0401f036, 0x4933c857,
- 0x59302000, 0x497a6000, 0x800c19c0, 0x0402001f,
- 0x4933c856, 0x42007000, 0x00020b54, 0x58300009,
- 0x800001c0, 0x04000019, 0x49786009, 0x58380001,
- 0x80300580, 0x04020008, 0x4933c856, 0x49787002,
- 0x4810600b, 0x801021c0, 0x0402001e, 0x4978600a,
- 0x0401f01c, 0x4933c856, 0x4810600b, 0x801021c0,
- 0x04020002, 0x4978600a, 0x4c180000, 0x4c300000,
- 0x0201f800, 0x00100643, 0x5c006000, 0x0401fda9,
- 0x5c003000, 0x0401f00f, 0x4933c856, 0x800c19c0,
- 0x04020008, 0x801021c0, 0x04000003, 0x4810600b,
- 0x0401f008, 0x4978600b, 0x4978600a, 0x0401f005,
- 0x48101800, 0x801021c0, 0x04020002, 0x480c600a,
- 0x58180409, 0x84000500, 0x48003409, 0x49783209,
- 0x1c01f000, 0x4933c857, 0x59368c03, 0x4c180000,
- 0x59300203, 0x82003480, 0x0000000e, 0x02021800,
- 0x0010032d, 0x0c01f803, 0x5c003000, 0x1c01f000,
- 0x001093fa, 0x00109996, 0x00109ad3, 0x001093fa,
- 0x001093fa, 0x001093fa, 0x001093fa, 0x001093fa,
- 0x0010941d, 0x001093fa, 0x001093fa, 0x001093fa,
- 0x001093fa, 0x001093fa, 0x0201f800, 0x0010032d,
- 0x4933c857, 0x42028800, 0x0000ffff, 0x813669c0,
- 0x04000002, 0x59368c03, 0x4c180000, 0x59300203,
- 0x82003480, 0x0000000e, 0x02021800, 0x0010032d,
- 0x0c01f803, 0x5c003000, 0x1c01f000, 0x00109419,
- 0x00109db8, 0x00109419, 0x00109419, 0x00109419,
- 0x00109419, 0x00109419, 0x00109419, 0x00109cfa,
- 0x0010a1ba, 0x0010a1f0, 0x0010a1ba, 0x0010a1f0,
- 0x00109419, 0x0201f800, 0x0010032d, 0x0201f800,
- 0x0010032d, 0x83383480, 0x00000057, 0x02021800,
- 0x0010032d, 0x41380000, 0x493bc857, 0x4d1c0000,
- 0x4d400000, 0x0c01f804, 0x5c028000, 0x5c023800,
- 0x1c01f000, 0x00109489, 0x001096b3, 0x00109489,
- 0x00109489, 0x00109489, 0x001096be, 0x00109489,
- 0x00109489, 0x00109489, 0x00109489, 0x00109489,
- 0x00109489, 0x00109489, 0x00109489, 0x00109489,
- 0x00109489, 0x00109489, 0x00109489, 0x00109489,
- 0x00109489, 0x00109489, 0x00109489, 0x00109489,
- 0x001094c2, 0x00109513, 0x0010952d, 0x001095ac,
- 0x0010960a, 0x0010964e, 0x0010967f, 0x00109489,
- 0x00109489, 0x001096c6, 0x00109489, 0x00109489,
- 0x001096d4, 0x001096dd, 0x00109489, 0x00109489,
- 0x00109489, 0x00109489, 0x00109489, 0x0010977d,
- 0x00109489, 0x00109489, 0x001095ea, 0x00109489,
- 0x00109489, 0x0010973c, 0x00109489, 0x00109489,
- 0x00109489, 0x0010978b, 0x00109489, 0x00109489,
- 0x00109489, 0x001097d4, 0x00109489, 0x00109489,
- 0x00109489, 0x00109489, 0x00109489, 0x00109489,
- 0x00109841, 0x00109489, 0x00109871, 0x0010987c,
- 0x00109489, 0x00109489, 0x0010948b, 0x00109887,
- 0x00109489, 0x00109489, 0x00109489, 0x0010949c,
- 0x00109489, 0x00109489, 0x00109489, 0x0010988e,
- 0x00109896, 0x001098b7, 0x00109489, 0x00109489,
- 0x00109489, 0x00109489, 0x00109489, 0x001094b0,
- 0x00109489, 0x00109489, 0x00109489, 0x00109489,
- 0x00109489, 0x00109489, 0x00109489, 0x00109489,
- 0x00109489, 0x0201f800, 0x0010032d, 0x4933c857,
- 0x0201f800, 0x0010a220, 0x02020000, 0x001098c5,
- 0x0201f800, 0x00101b0a, 0x02020000, 0x001098c5,
- 0x59cc0407, 0x4802601d, 0x4a026403, 0x00000045,
- 0x4a026203, 0x00000001, 0x0201f000, 0x0010608d,
- 0x4933c857, 0x0201f800, 0x0010a220, 0x02020000,
- 0x001098c5, 0x0201f800, 0x00101b0a, 0x02020000,
- 0x001098c5, 0x0201f800, 0x00109906, 0x040201e7,
- 0x59cc0007, 0x4802601d, 0x4a026403, 0x0000004a,
- 0x4a026203, 0x00000001, 0x0201f000, 0x0010608d,
- 0x4933c857, 0x0201f800, 0x0010a220, 0x02020000,
- 0x001098c5, 0x0201f800, 0x00101b0a, 0x02020000,
- 0x001098c5, 0x0201f800, 0x00109906, 0x040201d3,
- 0x4a026403, 0x00000056, 0x4a026203, 0x00000001,
- 0x0201f000, 0x0010608d, 0x4933c857, 0x0201f800,
- 0x00101b0a, 0x0402000d, 0x0201f800, 0x001040e5,
- 0x0402000a, 0x59a8021b, 0x8c000500, 0x0402000e,
- 0x8c000506, 0x04020005, 0x0201f800, 0x00104755,
- 0x04020009, 0x0401f3f4, 0x4a026403, 0x00000009,
- 0x4a02641b, 0x00000009, 0x4a02621b, 0x00000000,
- 0x0401f1e2, 0x0201f800, 0x001041b1, 0x04000029,
- 0x59340200, 0x8c00051a, 0x04000004, 0x5934000a,
- 0x84000560, 0x4802680a, 0x0201f800, 0x00109f1a,
- 0x0402002a, 0x42028000, 0x00000029, 0x4d3c0000,
- 0x417a7800, 0x0201f800, 0x0010e06f, 0x5c027800,
- 0x42000000, 0x0010bd1f, 0x0201f800, 0x0010ae10,
- 0x0201f800, 0x00103e7e, 0x4a026403, 0x00000008,
- 0x42003000, 0x00000003, 0x8d0e1d20, 0x040001c3,
- 0x59cc400b, 0x59cc380c, 0x59cc180d, 0x59cc080e,
- 0x9c2041c0, 0x9c1c39c0, 0x9c0c19c0, 0x9c0409c0,
- 0x4a026203, 0x00000007, 0x41782800, 0x0401f1aa,
- 0x0201f800, 0x00109fe3, 0x040207dc, 0x4a026403,
- 0x00000009, 0x4a02641b, 0x0000000e, 0x4a02621b,
- 0x00001900, 0x0401f1ad, 0x4a026403, 0x00000009,
- 0x4a02641b, 0x00000003, 0x0401f1a8, 0x4933c857,
- 0x0201f800, 0x00101b0a, 0x040203af, 0x0201f800,
- 0x001040e5, 0x040203ac, 0x493a6403, 0x0201f800,
- 0x00109eb4, 0x04020009, 0x4a026403, 0x00000006,
- 0x8d0e1d20, 0x04000199, 0x4a026203, 0x00000007,
- 0x0201f000, 0x0010a5c8, 0x4a026403, 0x00000007,
- 0x4a02641b, 0x00000009, 0x4a02621b, 0x00000000,
- 0x0401f18e, 0x4933c857, 0x0201f800, 0x001040e5,
- 0x04020395, 0x5934000a, 0x82000500, 0x00010000,
- 0x82000580, 0x00010000, 0x02020800, 0x0010a220,
- 0x02000800, 0x00101b0a, 0x0402038b, 0x59cc0001,
- 0x82000500, 0x00ffff00, 0x82000580, 0x00fffc00,
- 0x04020006, 0x59a80006, 0x8c00050e, 0x04000003,
- 0x8d0e1d20, 0x04000047, 0x0201f800, 0x001041b1,
- 0x04020005, 0x42027800, 0x00000001, 0x0201f800,
- 0x00103d92, 0x0201f800, 0x0010419d, 0x04000004,
- 0x82000580, 0x00000703, 0x04020041, 0x59cc0206,
- 0x82003500, 0x00000003, 0x04020044, 0x82003480,
- 0x00000014, 0x04001041, 0x59a8305a, 0x80183480,
- 0x0400103e, 0x5934300a, 0x84183516, 0x82000580,
- 0x00000014, 0x04020002, 0x84183556, 0x481a680a,
- 0x59cc0406, 0x82000500, 0x00000003, 0x04020033,
- 0x0201f800, 0x00109f67, 0x0402003b, 0x0201f800,
- 0x00104181, 0x04020007, 0x4c600000, 0x4178c000,
- 0x417a7800, 0x0201f800, 0x00101a94, 0x5c00c000,
- 0x836c0580, 0x00000003, 0x04020009, 0x42003000,
- 0x00000006, 0x0201f800, 0x0010a599, 0x42000000,
- 0x0010bd1e, 0x0201f800, 0x0010ae10, 0x0201f800,
- 0x00103ee9, 0x4a026403, 0x0000000a, 0x42003000,
- 0x00000020, 0x59cc1a0a, 0x41780800, 0x41784000,
- 0x41783800, 0x8d0e1d20, 0x04000130, 0x0401f775,
- 0x4a026403, 0x0000000b, 0x4a02641b, 0x0000000b,
- 0x4a02621b, 0x00002c00, 0x0401f128, 0x4a026403,
- 0x0000000b, 0x4a02641b, 0x00000009, 0x4a02621b,
- 0x00001e00, 0x0401f121, 0x42000000, 0x0010bc79,
- 0x0201f800, 0x0010ae10, 0x4a026403, 0x0000000b,
- 0x4a02641b, 0x00000007, 0x4a02621b, 0x00000000,
- 0x0401f116, 0x4a026403, 0x0000000b, 0x4a02641b,
- 0x00000003, 0x4a02621b, 0x00000000, 0x0401f10f,
- 0x4933c857, 0x0201f800, 0x001040e5, 0x04020316,
- 0x0201f800, 0x0010a220, 0x04020313, 0x0201f800,
- 0x00101b0a, 0x04020310, 0x59cc0206, 0x82003500,
- 0x00000003, 0x04020023, 0x82003480, 0x00000014,
- 0x04001020, 0x59a8305a, 0x80180480, 0x0400101d,
- 0x59cc0406, 0x82000500, 0x00000003, 0x04020019,
- 0x59340400, 0x82000580, 0x00000707, 0x0400001c,
- 0x417a7800, 0x4c600000, 0x4178c000, 0x0201f800,
- 0x00101a94, 0x5c00c000, 0x42003000, 0x0000000a,
- 0x0201f800, 0x0010a599, 0x42000000, 0x0010bd1b,
- 0x0201f800, 0x0010ae10, 0x4a026403, 0x0000000c,
- 0x41782800, 0x42003000, 0x00000021, 0x0401f7ae,
- 0x4a026403, 0x0000000d, 0x4a02641b, 0x00000007,
- 0x4a02621b, 0x00000000, 0x0401f0d8, 0x4a026403,
- 0x0000000d, 0x4a02641b, 0x00000009, 0x4a02621b,
- 0x00001e00, 0x0401f0d1, 0x4933c857, 0x0201f800,
- 0x001040e5, 0x040202d8, 0x0201f800, 0x0010a220,
- 0x040202d5, 0x0201f800, 0x00101b0a, 0x040202d2,
- 0x0401fb12, 0x0402000e, 0x493a6403, 0x0401fb19,
- 0x04020004, 0x4a026403, 0x0000002e, 0x0401f725,
- 0x4a026403, 0x0000000d, 0x4a02641b, 0x00000007,
- 0x4a02621b, 0x00000000, 0x0401f0b8, 0x4a026403,
- 0x0000000d, 0x4a02641b, 0x00000009, 0x4a02621b,
- 0x00001e00, 0x0401f0b1, 0x4933c857, 0x0201f800,
- 0x001040e5, 0x040206c5, 0x59a8021b, 0x8c000500,
- 0x04020006, 0x8c000506, 0x040206c0, 0x0201f800,
- 0x00104755, 0x040002b0, 0x0201f800, 0x0010419d,
- 0x04020031, 0x0201f800, 0x00109f6f, 0x0402000c,
- 0x4a026403, 0x0000000e, 0x8d0e1d20, 0x0400009b,
- 0x42003000, 0x00000052, 0x59cc4008, 0x59cc3809,
- 0x59cc180a, 0x59cc080b, 0x0401f6d6, 0x4933c857,
- 0x42003000, 0x00000003, 0x0201f800, 0x0010a5a1,
- 0x4d3c0000, 0x417a7800, 0x0201f800, 0x0010e06f,
- 0x5c027800, 0x42000000, 0x0010bd1d, 0x0201f800,
- 0x0010ae10, 0x59340200, 0x84000558, 0x48026a00,
- 0x42000800, 0x0000000b, 0x0201f800, 0x00103d9d,
- 0x8d0e1d20, 0x04000076, 0x42003000, 0x00000007,
- 0x0401f064, 0x4933c857, 0x4a026403, 0x0000000f,
- 0x4a02641b, 0x00000003, 0x4a02621b, 0x00001e00,
- 0x0401f072, 0x59340400, 0x82000580, 0x00000703,
- 0x040007f5, 0x0401f041, 0x4933c857, 0x0201f800,
- 0x001040e5, 0x04020274, 0x59a8021b, 0x8c000500,
- 0x04020006, 0x8c000506, 0x0402026f, 0x0201f800,
- 0x00104755, 0x0400026c, 0x0201f800, 0x00104194,
- 0x0402002e, 0x0201f800, 0x00109f8a, 0x02000800,
- 0x00109f1a, 0x04020006, 0x4a026403, 0x00000010,
- 0x42003000, 0x00000050, 0x0401f690, 0x4d3c0000,
- 0x417a7800, 0x0201f800, 0x0010e06f, 0x5c027800,
- 0x42003000, 0x00000003, 0x0201f800, 0x0010a5a1,
- 0x42000000, 0x0010bd1d, 0x0201f800, 0x0010ae10,
- 0x59340200, 0x84000558, 0x48026a00, 0x0401f7c5,
- 0x4a026403, 0x00000011, 0x4a02641b, 0x00000003,
- 0x4a02621b, 0x00001e00, 0x0401f03c, 0x4933c857,
- 0x0201f800, 0x00101b0a, 0x02000800, 0x0010a220,
- 0x04020241, 0x0401fa81, 0x04020008, 0x4a026403,
- 0x00000012, 0x0401f031, 0x59340400, 0x82000580,
- 0x00000703, 0x040007eb, 0x83340580, 0x0010c2b2,
- 0x0400000c, 0x4d3c0000, 0x417a7800, 0x42028000,
- 0x00000029, 0x0201f800, 0x0010e06f, 0x5c027800,
- 0x42003000, 0x00000017, 0x0201f800, 0x0010a5a1,
- 0x42000000, 0x0010bd1d, 0x0201f800, 0x0010ae10,
- 0x8d0e1d20, 0x04000012, 0x42003000, 0x00000006,
- 0x42028000, 0x00000029, 0x4933c857, 0x4a026403,
- 0x00000001, 0x4a026203, 0x00000007, 0x41782800,
- 0x0401f003, 0x42028000, 0x00000046, 0x0201f800,
- 0x0010a00e, 0x0201f000, 0x0010a5c8, 0x4933c857,
- 0x4a026403, 0x00000001, 0x42000800, 0x0000000b,
- 0x0201f800, 0x00103d9d, 0x4a026203, 0x00000001,
- 0x0201f000, 0x0010608d, 0x4933c857, 0x42000800,
- 0x00000009, 0x0201f800, 0x00103d9d, 0x4a026403,
- 0x00000005, 0x0401f7f5, 0x0201f800, 0x0010a220,
- 0x040201fd, 0x0201f800, 0x00101b0a, 0x040201fa,
- 0x0401fa3a, 0x040207c1, 0x4a026403, 0x00000020,
- 0x4a026203, 0x00000001, 0x0201f000, 0x0010608d,
- 0x0201f800, 0x00101b0a, 0x040201ef, 0x4a026403,
- 0x00000023, 0x4a026203, 0x00000001, 0x0201f000,
- 0x0010608d, 0x0201f800, 0x0010a220, 0x02000800,
- 0x00101b0a, 0x040201e4, 0x0401fa24, 0x040207ab,
- 0x59cc0807, 0x82040500, 0x00ffff00, 0x04020009,
- 0x59340212, 0x82000500, 0x0000ff00, 0x04000005,
- 0x59a8000f, 0x82000500, 0x000000ff, 0x0401f002,
- 0x59a8000f, 0x82040d00, 0x00ffffff, 0x80040580,
- 0x04020014, 0x59cc1408, 0x0201f800, 0x00108d91,
- 0x04000025, 0x591c0202, 0x82001580, 0x0000ffff,
- 0x04000004, 0x59cc1208, 0x80080580, 0x0402001e,
- 0x591c000a, 0x81340580, 0x0402001b, 0x591c0407,
- 0x82000580, 0x00000007, 0x04020017, 0x0401f027,
- 0x59cc1208, 0x82080580, 0x0000ffff, 0x0400000c,
- 0x0201f800, 0x00108d91, 0x0400000f, 0x59cc1408,
- 0x591c0202, 0x80080580, 0x04020024, 0x591c000a,
- 0x81340580, 0x04020021, 0x0401f010, 0x59cc1408,
- 0x41780000, 0x0201f800, 0x00109d60, 0x040207f8,
- 0x0401f017, 0x4a026403, 0x00000026, 0x4a02621b,
- 0x00001700, 0x59cc1208, 0x82081580, 0x0000ffff,
- 0x04020796, 0x0401f00e, 0x591c0407, 0x82000580,
- 0x00000007, 0x040207f4, 0x591c0403, 0x82000580,
- 0x00000024, 0x04020006, 0x4d300000, 0x411e6000,
- 0x0201f800, 0x00020a10, 0x5c026000, 0x4a026403,
- 0x00000025, 0x0401f785, 0x59cc1408, 0x41780000,
- 0x0201f800, 0x00109d60, 0x040207e3, 0x0401f7f8,
- 0x4933c857, 0x4d3c0000, 0x42027800, 0x00000001,
- 0x0201f800, 0x00103d92, 0x5c027800, 0x4c580000,
- 0x4200b000, 0x00000002, 0x83a81c00, 0x00000002,
- 0x83cc1400, 0x0000000b, 0x0201f800, 0x00107df9,
- 0x5c00b000, 0x04000004, 0x4a026403, 0x00000031,
- 0x0401f76a, 0x0201f800, 0x00020a10, 0x4200b000,
- 0x00000002, 0x83a81c00, 0x00000000, 0x83cc1400,
- 0x0000000d, 0x0201f800, 0x00107df9, 0x04020010,
- 0x0201f800, 0x00105616, 0x0400000d, 0x59300407,
- 0x82000580, 0x00000001, 0x04020009, 0x59300403,
- 0x82000580, 0x00000002, 0x04020005, 0x5930000a,
- 0x81340580, 0x02000800, 0x00020a10, 0x0201f800,
- 0x00104755, 0x0402000f, 0x0201f800, 0x00104771,
- 0x04020008, 0x4a035014, 0x00000001, 0x4202d800,
- 0x00000001, 0x0201f800, 0x001046af, 0x0401f005,
- 0x42000000, 0x00000001, 0x0201f800, 0x00104726,
- 0x1c01f000, 0x0201f800, 0x00101b0a, 0x04020146,
- 0x0401f986, 0x0402070d, 0x493a6403, 0x0401f9ea,
- 0x04020004, 0x4a026403, 0x0000002b, 0x0401f733,
- 0x4a026403, 0x0000002c, 0x0401f730, 0x4933c857,
- 0x0201f800, 0x0010577f, 0x04020137, 0x0201f800,
- 0x00101b0a, 0x04020134, 0x0201f800, 0x00104181,
- 0x040206fa, 0x59cc0408, 0x4802641a, 0x59cc0208,
- 0x4802621a, 0x59cc0807, 0x59340002, 0x82000500,
- 0x00ffffff, 0x80040580, 0x04000015, 0x59a8000f,
- 0x80040580, 0x04020025, 0x59cc1408, 0x0201f800,
- 0x00108d91, 0x04000027, 0x831c0580, 0xffffffff,
- 0x04000007, 0x0201f800, 0x0010a14e, 0x04000021,
- 0x0201f800, 0x0010a580, 0x0400001e, 0x491e601f,
- 0x4a026403, 0x00000036, 0x0401f10d, 0x59cc1208,
- 0x82080580, 0x0000ffff, 0x04000009, 0x0201f800,
- 0x00108d91, 0x04000013, 0x591c0202, 0x59cc0c08,
- 0x80040580, 0x0402000f, 0x0401f7e8, 0x59cc1408,
- 0x42000000, 0x00000001, 0x0201f800, 0x00109d60,
- 0x04000008, 0x0401f7e1, 0x4803c856, 0x4a02641b,
- 0x00000009, 0x4a02621b, 0x00001500, 0x0401f006,
- 0x4803c856, 0x4a02641b, 0x00000003, 0x4a02621b,
- 0x00001700, 0x4a026403, 0x00000037, 0x0401f0ec,
- 0x4933c857, 0x0201f800, 0x0010577f, 0x040200ee,
- 0x0201f800, 0x00101b0a, 0x040200eb, 0x0201f800,
- 0x00104181, 0x040206b1, 0x0201f800, 0x001040c4,
- 0x04000055, 0x59cc0407, 0x4802641a, 0x59cc1207,
- 0x480a621a, 0x82080580, 0x0000ffff, 0x04000005,
- 0x0201f800, 0x00108d91, 0x04000043, 0x0401f00a,
- 0x59cc1407, 0x42000000, 0x00000001, 0x0201f800,
- 0x00109d60, 0x0400003c, 0x831c0580, 0xffffffff,
- 0x04000039, 0x59cc0c07, 0x591c0202, 0x80040580,
- 0x04020035, 0x0201f800, 0x0010a580, 0x04000032,
- 0x591c0415, 0x8c000516, 0x0402003d, 0x4d300000,
- 0x411e6000, 0x0201f800, 0x00108530, 0x5c026000,
- 0x4a023a03, 0x00000007, 0x59cc0c09, 0x82040d00,
- 0x0000ff00, 0x840409c0, 0x82040580, 0x00000001,
- 0x0400000c, 0x82040580, 0x00000005, 0x0400000e,
- 0x82040580, 0x00000007, 0x04020015, 0x42000000,
- 0x0010bd0a, 0x0201f800, 0x0010ae10, 0x0401f00a,
- 0x42000000, 0x0010bd09, 0x0201f800, 0x0010ae10,
- 0x0401f008, 0x42000000, 0x0010bd08, 0x0201f800,
- 0x0010ae10, 0x591c0009, 0x80000540, 0x04000004,
- 0x59cc2808, 0x0201f000, 0x0010a162, 0x4803c856,
- 0x4a02641b, 0x00000009, 0x4a02621b, 0x00002a00,
- 0x0401f006, 0x4803c856, 0x4a02641b, 0x00000003,
- 0x4a02621b, 0x00000300, 0x4a026403, 0x0000003b,
- 0x0401f08b, 0x4803c856, 0x4a02641b, 0x0000000b,
- 0x4a02621b, 0x00000000, 0x0401f7f8, 0x4803c856,
- 0x4a02641b, 0x00000007, 0x4a02621b, 0x00000000,
- 0x0401f7f2, 0x59cc0001, 0x82000580, 0x00fffffe,
- 0x04020081, 0x4c080000, 0x0201f800, 0x001040e5,
- 0x04000026, 0x0201f800, 0x001040a6, 0x0201f800,
- 0x0010a28d, 0x0402001e, 0x59a8021b, 0x82000540,
- 0x00000003, 0x4803521b, 0x59a80018, 0x800000d0,
- 0x59a8080f, 0x82040d00, 0x000000ff, 0x80041540,
- 0x480b500f, 0x42000800, 0x00000003, 0x0201f800,
- 0x001061d9, 0x497b501d, 0x8d0e1d20, 0x04000006,
- 0x4a032804, 0x000007d0, 0x599c0017, 0x8c00050a,
- 0x0402000a, 0x0201f800, 0x00020a10, 0x0201f800,
- 0x0010e25a, 0x5c001000, 0x1c01f000, 0x0201f800,
- 0x0010a2af, 0x0401f7fc, 0x5c001000, 0x0201f000,
- 0x00020a10, 0x0201f800, 0x00101b0a, 0x04020052,
- 0x0201f800, 0x0010a2b5, 0x4a026403, 0x00000047,
- 0x4a026203, 0x00000001, 0x0201f000, 0x0010608d,
- 0x0201f800, 0x00101b0a, 0x04020047, 0x0201f800,
- 0x0010a2b5, 0x4a026403, 0x00000047, 0x4a026203,
- 0x00000001, 0x0201f000, 0x0010608d, 0x0201f800,
- 0x00101b0a, 0x0402003c, 0x0201f800, 0x0010a2b5,
- 0x0201f000, 0x00020a10, 0x0401f83a, 0x04000036,
- 0x4a026403, 0x0000004e, 0x4a026203, 0x00000001,
- 0x0201f000, 0x0010608d, 0x0201f800, 0x00104194,
- 0x040205f6, 0x4a026403, 0x0000004f, 0x497a601d,
- 0x59cc0a06, 0x82040d00, 0x000000ff, 0x800409c0,
- 0x0400061a, 0x82040580, 0x00000001, 0x04020005,
- 0x59cc0808, 0x59a80005, 0x80040580, 0x04000613,
- 0x82040580, 0x00000002, 0x0402000a, 0x83cc1400,
- 0x0000000b, 0x4200b000, 0x00000002, 0x83341c00,
- 0x00000006, 0x0201f800, 0x00107df9, 0x04000607,
- 0x4a02601d, 0x00000001, 0x0401f604, 0x0201f800,
- 0x00104194, 0x040205d5, 0x4a026403, 0x00000050,
- 0x59cc0207, 0x4802601d, 0x0401f5fc, 0x4a026203,
- 0x00000001, 0x42000800, 0x80000040, 0x0201f000,
- 0x000209b1, 0x4803c857, 0x0201f000, 0x00020a10,
- 0x4d2c0000, 0x4c500000, 0x4c580000, 0x4c540000,
- 0x59a8005a, 0x82000c80, 0x00000841, 0x0402102d,
- 0x0201f800, 0x0010055a, 0x0400002a, 0x492e6009,
- 0x59a8005a, 0x48025802, 0x82000400, 0x00000003,
- 0x80000104, 0x83cca400, 0x00000006, 0x82000c80,
- 0x0000000a, 0x04001015, 0x4a025811, 0x0000000a,
- 0x4200b000, 0x0000000a, 0x832c0400, 0x00000006,
- 0x4000a800, 0x0201f800, 0x0010aee2, 0x412c7000,
- 0x800409c0, 0x04020003, 0x49787001, 0x0401f00e,
- 0x0201f800, 0x0010055a, 0x0400000e, 0x492c7001,
- 0x40040000, 0x0401f7ea, 0x48025811, 0x4000b000,
- 0x832c0400, 0x00000006, 0x4000a800, 0x0201f800,
- 0x0010aee2, 0x82000540, 0x00000001, 0x0401f006,
- 0x497b505a, 0x59325809, 0x0201f800, 0x00100589,
- 0x80000580, 0x5c00a800, 0x5c00b000, 0x5c00a000,
- 0x5c025800, 0x1c01f000, 0x4d340000, 0x5932680a,
- 0x59343400, 0x4933c857, 0x4937c857, 0x481bc857,
- 0x0201f800, 0x00104194, 0x5c026800, 0x1c01f000,
- 0x4933c857, 0x4c600000, 0x4d3c0000, 0x4d440000,
- 0x4d340000, 0x0401f864, 0x0402004e, 0x59cc0207,
- 0x82000d00, 0x0000ff00, 0x900411c0, 0x59cc000a,
- 0x82000500, 0x00ffffff, 0x80081540, 0x480a601d,
- 0x8c040d18, 0x04000019, 0x42003000, 0x00000008,
- 0x0201f800, 0x0010a591, 0x42000000, 0x0010bd1c,
- 0x0201f800, 0x0010ae10, 0x8d0e1d20, 0x04000009,
- 0x42002800, 0x00000002, 0x42003000, 0x00000024,
- 0x42028000, 0x00000046, 0x0201f800, 0x0010a00e,
- 0x4200c000, 0x00000001, 0x417a7800, 0x0201f800,
- 0x00101a94, 0x0401f02e, 0x8c040d1a, 0x04000029,
- 0x59cc000a, 0x0201f800, 0x001054fb, 0x02000800,
- 0x00020319, 0x04020023, 0x5930000a, 0x4c000000,
- 0x8d0e1d20, 0x0400000f, 0x59340c03, 0x59341802,
- 0x820c1d00, 0x00ffffff, 0x58002403, 0x42002800,
- 0x00000004, 0x42003000, 0x00000024, 0x42028000,
- 0x00000046, 0x41301000, 0x0201f800, 0x0010a01e,
- 0x4936600a, 0x42003000, 0x00000009, 0x0201f800,
- 0x0010a599, 0x42000000, 0x0010bd1c, 0x0201f800,
- 0x0010ae10, 0x417a7800, 0x4178c000, 0x0201f800,
- 0x00101a94, 0x5c000000, 0x4802600a, 0x0401f004,
- 0x82000540, 0x00000001, 0x0401f002, 0x80000580,
- 0x5c026800, 0x5c028800, 0x5c027800, 0x5c00c000,
- 0x1c01f000, 0x4933c857, 0x59cc0206, 0x82000480,
- 0x00000010, 0x04021006, 0x4a02621b, 0x00000000,
- 0x82000540, 0x00000001, 0x0401f002, 0x80000580,
- 0x1c01f000, 0x4933c857, 0x4a02621b, 0x00000000,
- 0x59cc0407, 0x82000500, 0x0000ff00, 0x82000580,
- 0x00000800, 0x0402000d, 0x59cc0206, 0x59a8085a,
- 0x80040480, 0x0400100a, 0x59cc0006, 0x82000500,
- 0x00ff0000, 0x82000d80, 0x00140000, 0x04000003,
- 0x82000d80, 0x00100000, 0x1c01f000, 0x42000000,
- 0x0010bd11, 0x0201f800, 0x0010ae10, 0x82000540,
- 0x00000001, 0x0401f7f9, 0x59300403, 0x82003480,
- 0x00000057, 0x02021800, 0x0010032d, 0x83383580,
- 0x00000013, 0x04020007, 0x4803c857, 0x4c000000,
- 0x0201f800, 0x0010a687, 0x5c000000, 0x0c01f018,
- 0x4933c857, 0x493bc857, 0x83383580, 0x00000027,
- 0x04000005, 0x83383580, 0x00000014, 0x02020800,
- 0x0010032d, 0x493bc857, 0x4937c857, 0x0201f800,
- 0x0010a684, 0x0201f800, 0x001040a6, 0x42000800,
- 0x00000007, 0x0201f800, 0x00103d9d, 0x0201f800,
- 0x00106102, 0x0201f000, 0x00107144, 0x00109a1b,
- 0x00109a24, 0x00109a1b, 0x00109a1b, 0x00109a1b,
- 0x00109a24, 0x00109a2f, 0x00109ac3, 0x00109a7e,
- 0x00109ac3, 0x00109a99, 0x00109ac3, 0x00109aa0,
- 0x00109ac3, 0x00109aa5, 0x00109ac3, 0x00109aa5,
- 0x00109ac3, 0x00109ac3, 0x00109a1b, 0x00109a1b,
- 0x00109a1b, 0x00109a1b, 0x00109a1b, 0x00109a1b,
- 0x00109a1b, 0x00109a1b, 0x00109a1b, 0x00109a1b,
- 0x00109a1b, 0x00109a24, 0x00109a1b, 0x00109ac3,
- 0x00109a1b, 0x00109a1b, 0x00109ac3, 0x00109a1b,
- 0x00109ac3, 0x00109ac3, 0x00109a1b, 0x00109a1b,
- 0x00109a1b, 0x00109a1b, 0x00109ac3, 0x00109ac3,
- 0x00109a1b, 0x00109ac3, 0x00109ac3, 0x00109a1b,
- 0x00109a29, 0x00109a1b, 0x00109a1b, 0x00109a1b,
- 0x00109a1b, 0x00109aa8, 0x00109ac3, 0x00109a1b,
- 0x00109a1b, 0x00109aa9, 0x00109ac3, 0x00109a1b,
- 0x00109a1b, 0x00109a1b, 0x00109a1b, 0x00109a1b,
- 0x00109a1b, 0x00109a1b, 0x00109a1b, 0x00109a1b,
- 0x00109a1d, 0x00109a1b, 0x00109a1d, 0x00109a1b,
- 0x00109a1b, 0x00109a1d, 0x00109a1b, 0x00109a1b,
- 0x00109a1b, 0x00109a1d, 0x00109a1d, 0x00109a1d,
- 0x00109a1b, 0x00109a1b, 0x00109a1b, 0x00109a1b,
- 0x00109a1b, 0x00109a1d, 0x00109a1b, 0x00109a1b,
- 0x00109a1b, 0x00109a1b, 0x00109a1b, 0x00109a1b,
- 0x00109a1b, 0x00109a1b, 0x00109a1b, 0x0201f800,
- 0x0010032d, 0x4d2c0000, 0x59325809, 0x0201f800,
- 0x00100589, 0x5c025800, 0x0201f000, 0x00020a10,
- 0x59a8002a, 0x48026006, 0x4a026203, 0x00000002,
- 0x1c01f000, 0x4d3c0000, 0x417a7800, 0x0201f800,
- 0x00103d92, 0x5c027800, 0x0401f095, 0x0201f800,
- 0x0010419d, 0x04000092, 0x59a8021b, 0x8c000508,
- 0x04000012, 0x5932680a, 0x4c580000, 0x4200b000,
- 0x00000002, 0x83a81c00, 0x00000002, 0x83341400,
- 0x00000006, 0x0201f800, 0x00107df9, 0x80000540,
- 0x5c00b000, 0x04020082, 0x59340200, 0x8400051a,
- 0x48026a00, 0x0401f026, 0x599c0017, 0x8c00050a,
- 0x0402000a, 0x4d3c0000, 0x417a7800, 0x0201f800,
- 0x00103d92, 0x5c027800, 0x42000800, 0x00000007,
- 0x0201f800, 0x00103d9d, 0x59340212, 0x82000500,
- 0x0000ff00, 0x04020009, 0x83440d80, 0x000007fe,
- 0x0402006b, 0x4d300000, 0x02000800, 0x0010e0f9,
- 0x5c026000, 0x0401f066, 0x599c0017, 0x8c00050a,
- 0x04020063, 0x599c0019, 0x8c00050e, 0x04020060,
- 0x416c0000, 0x82000580, 0x00000002, 0x04020004,
- 0x59a80016, 0x80000000, 0x48035016, 0x42000800,
- 0x00000003, 0x0201f800, 0x00103d9d, 0x4a026407,
- 0x00000001, 0x4a026203, 0x00000001, 0x4a026403,
- 0x00000002, 0x0201f800, 0x0010608d, 0x4ce80000,
- 0x4201d000, 0x00000001, 0x0201f800, 0x0010588d,
- 0x5c01d000, 0x1c01f000, 0x59340200, 0x8400051a,
- 0x48026a00, 0x0201f800, 0x00104194, 0x04000040,
- 0x0201f800, 0x00105d9d, 0x42000800, 0x00000004,
- 0x0201f800, 0x00103d9d, 0x0201f800, 0x0010a5be,
- 0x04020037, 0x42000800, 0x00000005, 0x0201f800,
- 0x00103d9d, 0x4a026407, 0x00000001, 0x4a026203,
- 0x00000001, 0x4a026403, 0x00000003, 0x0201f000,
- 0x0010608d, 0x0201f800, 0x0010419d, 0x04020028,
- 0x42000800, 0x00000006, 0x0401f827, 0x0401f024,
- 0x42000800, 0x00000004, 0x0201f800, 0x00103d9d,
- 0x0401f78e, 0x0201f800, 0x001040a6, 0x0401f01c,
- 0x0401f01b, 0x5930081f, 0x4807c857, 0x800409c0,
- 0x04000017, 0x5804001d, 0x81300580, 0x04020014,
- 0x4978081d, 0x58041415, 0x8c081516, 0x04000010,
- 0x8c081514, 0x0400000e, 0x84081516, 0x48080c15,
- 0x58065809, 0x812e59c0, 0x04000009, 0x492fc857,
- 0x4d300000, 0x40066000, 0x417a7800, 0x0201f800,
- 0x00020912, 0x5c026000, 0x0401f001, 0x0201f000,
- 0x00020a10, 0x4933c857, 0x4807c857, 0x0201f800,
- 0x00103d9d, 0x4d3c0000, 0x417a7800, 0x0201f800,
- 0x00103d92, 0x5c027800, 0x5934000a, 0x84000520,
- 0x4802680a, 0x0201f000, 0x001040a6, 0x59340400,
- 0x4803c857, 0x80000110, 0x82003480, 0x0000000c,
- 0x02021800, 0x0010032d, 0x83383580, 0x00000015,
- 0x04020002, 0x0c01f006, 0x83383580, 0x00000016,
- 0x02020800, 0x0010032d, 0x0c01f00d, 0x00107999,
- 0x00107999, 0x00107999, 0x00107999, 0x00107999,
- 0x00107999, 0x00109b26, 0x00109afb, 0x00107999,
- 0x00107999, 0x00107999, 0x00107999, 0x00107999,
- 0x00107999, 0x00107999, 0x00107999, 0x00107999,
- 0x00107999, 0x00109b26, 0x00109b2d, 0x00107999,
- 0x00107999, 0x00107999, 0x00107999, 0x4933c857,
- 0x599c0017, 0x8c00050a, 0x0402001b, 0x813669c0,
- 0x04000019, 0x59340212, 0x82000500, 0x0000ff00,
- 0x04000015, 0x599c0019, 0x8c00050e, 0x04020012,
- 0x4d3c0000, 0x417a7800, 0x0201f800, 0x00103d92,
- 0x5c027800, 0x42000800, 0x00000003, 0x0201f800,
- 0x00103d9d, 0x4a026407, 0x00000001, 0x4a026203,
- 0x00000001, 0x4a026403, 0x00000002, 0x0201f000,
- 0x0010608d, 0x59cc0001, 0x59340802, 0x80040580,
- 0x82000500, 0x00ffffff, 0x02020000, 0x00020a10,
- 0x59345002, 0x0201f800, 0x00103ab4, 0x482a6802,
- 0x0201f000, 0x00020a10, 0x4933c857, 0x59303403,
- 0x82183580, 0x0000001e, 0x02000000, 0x00020a10,
- 0x1c01f000, 0x4933c857, 0x0201f800, 0x00107d11,
- 0x02020000, 0x00020a10, 0x4a026203, 0x00000001,
- 0x4a026403, 0x00000001, 0x0201f000, 0x0010608d,
- 0x493bc857, 0x83380580, 0x00000051, 0x0402000b,
- 0x0201f800, 0x001064f2, 0x02020000, 0x001071c7,
- 0x59300203, 0x82000580, 0x00000002, 0x0400006e,
- 0x0201f800, 0x0010032d, 0x83380580, 0x00000027,
- 0x04000014, 0x83380580, 0x00000048, 0x04000006,
- 0x83380580, 0x00000014, 0x0400000e, 0x02020800,
- 0x0010032d, 0x0201f800, 0x001064f2, 0x02020000,
- 0x001071c7, 0x59300203, 0x82000580, 0x00000004,
- 0x02000000, 0x00020b01, 0x0201f800, 0x0010032d,
- 0x4933c857, 0x59300403, 0x82000c80, 0x00000044,
- 0x02021800, 0x0010032d, 0x82000480, 0x00000040,
- 0x02001800, 0x0010032d, 0x40027000, 0x4803c857,
- 0x0c01f001, 0x00109b6d, 0x00109b6f, 0x00109b6f,
- 0x00109b8a, 0x0201f800, 0x0010032d, 0x0201f800,
- 0x00106102, 0x59325809, 0x812e59c0, 0x04000016,
- 0x832c0500, 0x00ff0000, 0x04000013, 0x4a026203,
- 0x00000002, 0x5932680a, 0x59340200, 0x8c00050e,
- 0x0402000d, 0x42028000, 0x00000004, 0x0201f800,
- 0x00109ff8, 0x497a6009, 0x59300006, 0x80000540,
- 0x04020003, 0x59a8002b, 0x48026006, 0x4a026203,
- 0x00000007, 0x1c01f000, 0x0201f800, 0x00106102,
- 0x0201f800, 0x00108953, 0x02000000, 0x00107144,
- 0x59325809, 0x0201f800, 0x00100580, 0x0201f000,
- 0x00107144, 0x0201f800, 0x0010032d, 0x59325809,
- 0x592c040b, 0x8c000502, 0x04000007, 0x4a026203,
- 0x00000007, 0x42027000, 0x00000043, 0x0201f000,
- 0x00020a34, 0x4a026203, 0x00000004, 0x1c01f000,
- 0x0201f800, 0x0010a226, 0x02000000, 0x00020aff,
- 0x1c01f000, 0x4a026203, 0x00000001, 0x4a026403,
- 0x00000041, 0x42027800, 0x80002042, 0x0201f000,
- 0x000209b1, 0x83380580, 0x00000051, 0x04000006,
- 0x83380580, 0x00000041, 0x02020800, 0x0010032d,
- 0x1c01f000, 0x0201f800, 0x00020979, 0x0201f800,
- 0x0010a26a, 0x0201f000, 0x00020a10, 0x83380480,
- 0x00000052, 0x02021800, 0x0010032d, 0x83380480,
- 0x00000049, 0x02001800, 0x0010032d, 0x0c01f001,
- 0x00109bd3, 0x00109bfd, 0x00109bd1, 0x00109bd1,
- 0x00109bd1, 0x00109bd1, 0x00109bfd, 0x00109bd1,
- 0x00109c1e, 0x0201f800, 0x0010032d, 0x59325809,
- 0x592c040b, 0x8c00051e, 0x04000013, 0x82000d00,
- 0x000000c0, 0x82040d80, 0x00000080, 0x04000016,
- 0x59300804, 0x8c040d18, 0x04020013, 0x59300415,
- 0x8c000516, 0x04000004, 0x4a026203, 0x00000007,
- 0x0401f018, 0x42027000, 0x00000041, 0x0201f000,
- 0x00020b20, 0x4a026203, 0x00000007, 0x497a6006,
- 0x59300415, 0x8c000516, 0x0402000e, 0x0201f000,
- 0x00020979, 0x59325809, 0x592c0c0b, 0x8c040d1a,
- 0x04020005, 0x0201f800, 0x00020979, 0x0201f000,
- 0x00020a10, 0x0201f800, 0x0010a226, 0x040007fa,
- 0x1c01f000, 0x0201f800, 0x001060e2, 0x59325809,
- 0x5932680a, 0x59340200, 0x8c00050e, 0x0400000e,
- 0x592c040b, 0x82000500, 0x000000c0, 0x82000580,
- 0x00000080, 0x04000005, 0x592c0010, 0x59301816,
- 0x800c1c80, 0x480e6016, 0x4a026203, 0x00000002,
- 0x0401f00d, 0x42028000, 0x00000004, 0x0401fbe5,
- 0x59300006, 0x80000540, 0x04020004, 0x59a8002b,
- 0x800000c2, 0x48026006, 0x497a6009, 0x4a026203,
- 0x00000007, 0x1c01f000, 0x4933c857, 0x0201f800,
- 0x001064f2, 0x02020800, 0x0010032d, 0x59300203,
- 0x82000580, 0x00000002, 0x0400078b, 0x0201f800,
- 0x0010032d, 0x4a026203, 0x00000007, 0x497a6006,
- 0x0201f000, 0x00020979, 0x4a026203, 0x00000007,
- 0x497a6006, 0x0201f000, 0x00020974, 0x59300415,
- 0x8c00051c, 0x02020000, 0x00020b11, 0x59325809,
- 0x592c2010, 0x40080000, 0x80102480, 0x59300016,
- 0x80102400, 0x48126016, 0x0201f000, 0x00020b11,
- 0x8c040d0e, 0x0402000a, 0x4a026203, 0x00000006,
- 0x0401f823, 0x59300020, 0x80000540, 0x02020800,
- 0x00100aa1, 0x0201f000, 0x00020974, 0x4a026203,
- 0x00000002, 0x1c01f000, 0x42000800, 0x00000001,
- 0x0201f800, 0x00100aa1, 0x82040580, 0x00000001,
- 0x02000000, 0x00020b18, 0x0401f7d8, 0x59300415,
- 0x8c00051c, 0x04000006, 0x0201f800, 0x0010086a,
- 0x02000000, 0x00020b0a, 0x1c01f000, 0x59300012,
- 0x80000540, 0x04020005, 0x0201f800, 0x0010086a,
- 0x02000000, 0x00020b0a, 0x1c01f000, 0x492fc857,
- 0x480bc857, 0x8c08153e, 0x04000006, 0x80081080,
- 0x80081000, 0x42000800, 0x00000009, 0x0401f003,
- 0x42000800, 0x00000015, 0x480a580c, 0x1c01f000,
- 0x83380580, 0x00000013, 0x04000005, 0x83380580,
- 0x00000014, 0x02020800, 0x0010032d, 0x59300415,
- 0x8c000516, 0x02000800, 0x0010032d, 0x1c01f000,
- 0x0201f800, 0x0010032d, 0x59300009, 0x80000540,
- 0x02020800, 0x0010032d, 0x1c01f000, 0x59300415,
- 0x8c000516, 0x02000800, 0x0010032d, 0x1c01f000,
- 0x4a026203, 0x00000004, 0x493a6403, 0x42000800,
- 0x80002001, 0x0201f000, 0x000209b1, 0x4a026203,
- 0x00000003, 0x493a6403, 0x0201f800, 0x0002015e,
- 0x59325809, 0x592c040b, 0x8c00051e, 0x04000012,
- 0x82000500, 0x000000c0, 0x82000580, 0x00000080,
- 0x04000011, 0x59300415, 0x8c000512, 0x0402000a,
- 0x8c000510, 0x04020008, 0x592c040d, 0x80000540,
- 0x04020005, 0x82080d40, 0x80003065, 0x0201f000,
- 0x000209a3, 0x82080d40, 0x80002065, 0x0201f000,
- 0x000209a3, 0x82080d40, 0x80002042, 0x0201f000,
- 0x000209a3, 0x4933c857, 0x493bc857, 0x83380480,
- 0x00000044, 0x02021800, 0x0010032d, 0x83380480,
- 0x00000041, 0x02001800, 0x0010032d, 0x0c01f001,
- 0x00109cc3, 0x00109cd3, 0x00109ce8, 0x59325809,
- 0x592c040b, 0x8c00051e, 0x0400001d, 0x82001d00,
- 0x000000c0, 0x820c1d80, 0x000000c0, 0x04000018,
- 0x4a026203, 0x00000001, 0x493a6403, 0x42000800,
- 0x80002042, 0x0201f000, 0x000209b1, 0x59325809,
- 0x592c040b, 0x8c00051e, 0x0400000d, 0x82001d00,
- 0x000000c0, 0x820c1d80, 0x000000c0, 0x04000008,
- 0x4a026203, 0x00000001, 0x493a6403, 0x42000800,
- 0x80002001, 0x0201f000, 0x000209b1, 0x497a6009,
- 0x497a6006, 0x42028000, 0x00000004, 0x0401f311,
- 0x59325809, 0x592c040b, 0x8c00051e, 0x040007f8,
- 0x82001d00, 0x000000c0, 0x820c1d80, 0x000000c0,
- 0x040007f3, 0x4a026203, 0x00000003, 0x493a6403,
- 0x0201f800, 0x0002015e, 0x82080d40, 0x80002065,
- 0x0201f000, 0x000209a3, 0x4933c857, 0x493bc857,
- 0x83380580, 0x00000085, 0x04000006, 0x83380580,
- 0x00000088, 0x0400000a, 0x0201f800, 0x0010032d,
- 0x4a026203, 0x00000009, 0x493a6403, 0x42000800,
- 0x8000004b, 0x0201f000, 0x000209b1, 0x83300580,
- 0x0010f64c, 0x02020800, 0x0010032d, 0x4d1c0000,
- 0x813669c0, 0x04000004, 0x0201f800, 0x0010a220,
- 0x0402004a, 0x59cc1404, 0x41780000, 0x0401f849,
- 0x0400001a, 0x59cc0204, 0x82001580, 0x0000ffff,
- 0x04000004, 0x591c1402, 0x80080580, 0x04020013,
- 0x591c0407, 0x82000500, 0x0000001f, 0x82002580,
- 0x00000006, 0x04000007, 0x82002580, 0x00000004,
- 0x04000028, 0x82002580, 0x00000011, 0x04020007,
- 0x497a3a05, 0x42002000, 0x00000054, 0x0201f800,
- 0x0010729d, 0x0401f02d, 0x8d0e1d20, 0x04000004,
- 0x42023800, 0xffffffff, 0x0401f7f7, 0x813669c0,
- 0x04020009, 0x59cc0001, 0x0201f800, 0x001054fb,
- 0x04020022, 0x0201f800, 0x00103de1, 0x0402001f,
- 0x4936600a, 0x4a026403, 0x00000087, 0x59cc1204,
- 0x82081580, 0x0000ffff, 0x04020003, 0x4a026403,
- 0x00000086, 0x4d2c0000, 0x0201f800, 0x0010a5eb,
- 0x0201f800, 0x001044a8, 0x5c025800, 0x0401f00f,
- 0x591c0403, 0x82000580, 0x00000038, 0x040007da,
- 0x591c0203, 0x82000580, 0x00000007, 0x040207db,
- 0x4d300000, 0x411e6000, 0x0201f800, 0x00107144,
- 0x5c026000, 0x0401f7d5, 0x5c023800, 0x1c01f000,
- 0x4933c857, 0x480bc857, 0x4c5c0000, 0x4000b800,
- 0x42002800, 0x0010f694, 0x41300000, 0x80140580,
- 0x0400001f, 0x58140203, 0x82000580, 0x00000000,
- 0x0400001b, 0x58140202, 0x80080580, 0x04020018,
- 0x58141c07, 0x820c0580, 0x00000005, 0x04000014,
- 0x8c5cbd00, 0x04000004, 0x820c0580, 0x00000007,
- 0x0400000f, 0x820c0580, 0x00000009, 0x04000039,
- 0x5930200a, 0x5814000a, 0x800001c0, 0x0400000e,
- 0x82001d80, 0x0010c2b2, 0x0400000b, 0x801021c0,
- 0x04000003, 0x80100580, 0x04000012, 0x82142c00,
- 0x00000024, 0x41540000, 0x80140480, 0x0402101e,
- 0x0401f7da, 0x5814001f, 0x801021c0, 0x04000005,
- 0x58102002, 0x82102500, 0x00ffffff, 0x0401f7f2,
- 0x8c5cbd00, 0x040207f2, 0x5930201f, 0x0401f7ee,
- 0x40163800, 0x8c5cbd00, 0x04000008, 0x4c080000,
- 0x4c140000, 0x0201f800, 0x0010a580, 0x5c002800,
- 0x5c001000, 0x040007e6, 0x591c000a, 0x800001c0,
- 0x04020003, 0x5930000a, 0x4802380a, 0x81300540,
- 0x0401f00a, 0x8c5cbd00, 0x04000008, 0x40080800,
- 0x42023800, 0xffffffff, 0x0201f800, 0x001044b2,
- 0x040007f2, 0x80000580, 0x5c00b800, 0x1c01f000,
- 0x58141808, 0x8c0c1d10, 0x040207d1, 0x0401f7c5,
- 0x4933c857, 0x83300580, 0x0010f628, 0x0402003e,
- 0x4a026203, 0x00000000, 0x83380580, 0x00000013,
- 0x0402002d, 0x59300403, 0x82000580, 0x00000092,
- 0x02020800, 0x0010032d, 0x59a80052, 0x59325809,
- 0x812e59c0, 0x04000006, 0x812c0580, 0x02020800,
- 0x0010032d, 0x592c0000, 0x497a5800, 0x800001c0,
- 0x04000005, 0x48035052, 0x0201f800, 0x001070bc,
- 0x0401f003, 0x497b5052, 0x497b5053, 0x812e59c0,
- 0x04000020, 0x592c0205, 0x82000580, 0x00000055,
- 0x02000000, 0x00100580, 0x83380580, 0x00000013,
- 0x04020005, 0x4a025a07, 0x00000000, 0x0201f000,
- 0x000203ab, 0x4a025a07, 0x00000031, 0x4a025812,
- 0x00000004, 0x4a025813, 0x000000ff, 0x0201f000,
- 0x000203ab, 0x83380580, 0x00000027, 0x04000005,
- 0x83380580, 0x00000014, 0x02020800, 0x0010032d,
- 0x493bc857, 0x0201f800, 0x00106102, 0x0401f7ca,
- 0x1c01f000, 0x4933c857, 0x83380580, 0x00000013,
- 0x0402000e, 0x59300403, 0x4803c857, 0x82000c80,
- 0x00000085, 0x02001800, 0x0010032d, 0x82000c80,
- 0x00000093, 0x02021800, 0x0010032d, 0x82000480,
- 0x00000085, 0x0c01f019, 0x83380580, 0x00000027,
- 0x04000005, 0x83380580, 0x00000014, 0x02020000,
- 0x001071c7, 0x493bc857, 0x0201f800, 0x00106102,
- 0x59325809, 0x812e59c0, 0x02000000, 0x00107144,
- 0x4a025a07, 0x00000031, 0x4a025812, 0x00000004,
- 0x4a025813, 0x000000ff, 0x0201f800, 0x000203ab,
- 0x0201f000, 0x00107144, 0x00109e30, 0x00109e37,
- 0x00109e37, 0x00109e30, 0x00109e30, 0x00109e30,
- 0x00109e30, 0x00109e30, 0x00109e30, 0x00109e30,
- 0x00109e30, 0x00109e30, 0x00109e30, 0x00109e32,
- 0x0201f800, 0x0010032d, 0x59325809, 0x4a025a07,
- 0x00000000, 0x0201f800, 0x000203ab, 0x0201f000,
- 0x00020a10, 0x4933c857, 0x42000000, 0x0010bd2d,
- 0x0201f800, 0x0010ae10, 0x0201f800, 0x0010a26a,
- 0x497a6205, 0x42028000, 0x0000000b, 0x0401f807,
- 0x4a026407, 0x00000006, 0x4a026203, 0x00000007,
- 0x497a6006, 0x1c01f000, 0x4933c857, 0x4943c857,
- 0x59300407, 0x82000580, 0x00000007, 0x04020002,
- 0x1c01f000, 0x0201f800, 0x001061b2, 0x4df00000,
- 0x0201f800, 0x00108953, 0x0400000a, 0x59300809,
- 0x58040000, 0x80001540, 0x04000006, 0x49780800,
- 0x4d2c0000, 0x400a5800, 0x0401f99a, 0x5c025800,
- 0x0201f800, 0x0010866b, 0x82000c80, 0x0000000e,
- 0x02021800, 0x0010032d, 0x0c01f001, 0x00109e8a,
- 0x00109e8e, 0x00109e75, 0x00109e9d, 0x00109eb1,
- 0x00109e75, 0x00109e75, 0x00109e75, 0x00109e75,
- 0x00109e75, 0x00109e75, 0x00109e75, 0x00109e75,
- 0x00109e75, 0x4d400000, 0x59300020, 0x80000540,
- 0x04000005, 0x41400800, 0x0201f800, 0x00100aa1,
- 0x40068000, 0x4d2c0000, 0x59325809, 0x0201f800,
- 0x00108953, 0x04020977, 0x4c5c0000, 0x5930b80a,
- 0x0201f800, 0x00107144, 0x485e600a, 0x5c00b800,
- 0x5c025800, 0x5c028000, 0x5c03e000, 0x02000000,
- 0x0010619f, 0x1c01f000, 0x598c000f, 0x81300580,
- 0x04020004, 0x0201f800, 0x0010642d, 0x04020018,
- 0x0201f800, 0x0010e453, 0x80c40040, 0x040007de,
- 0x0201f800, 0x001060bd, 0x04000011, 0x0201f800,
- 0x0010032d, 0x0201f800, 0x00108659, 0x04020004,
- 0x0201f800, 0x001063f6, 0x04020009, 0x0201f800,
- 0x0010e2da, 0x80c40040, 0x040007cf, 0x0201f800,
- 0x001060bd, 0x02020800, 0x0010032d, 0x59300203,
- 0x82000c80, 0x0000000e, 0x02021800, 0x0010032d,
- 0x0c01f7b7, 0x0201f800, 0x00100bd5, 0x0401f7c2,
- 0x4933c857, 0x4d440000, 0x4d340000, 0x59cc3800,
- 0x821c3d00, 0x00ffffff, 0x59cc0007, 0x4c000000,
- 0x59cc0001, 0x82000500, 0x00ffffff, 0x82000d80,
- 0x00fffffe, 0x5c000000, 0x04020005, 0x801c0d80,
- 0x04020053, 0x42000000, 0x00fffffe, 0x0201f800,
- 0x001054fb, 0x02000800, 0x00020319, 0x0402004c,
- 0x5930000a, 0x4c000000, 0x8d0e1d20, 0x04000014,
- 0x81342d80, 0x04000003, 0x42002800, 0x00000004,
- 0x58002403, 0x59340c03, 0x59341802, 0x820c1d00,
- 0x00ffffff, 0x42003000, 0x00000005, 0x59cc4008,
- 0x59cc3809, 0x9c2041c0, 0x9c1c39c0, 0x42028000,
- 0x00000046, 0x41301000, 0x0401f93c, 0x4936600a,
- 0x83440d80, 0x000007fe, 0x04020014, 0x42003000,
- 0x0000001a, 0x0201f800, 0x0010a5a1, 0x42000000,
- 0x0010bd1a, 0x0201f800, 0x0010ae10, 0x4d3c0000,
- 0x4d400000, 0x42028000, 0x00000029, 0x42027800,
- 0x0000020a, 0x0201f800, 0x0010dfe1, 0x5c028000,
- 0x5c027800, 0x0401f012, 0x42003000, 0x0000000b,
- 0x0201f800, 0x0010a5a1, 0x42000000, 0x0010bd1a,
- 0x0201f800, 0x0010ae10, 0x4d3c0000, 0x4d400000,
- 0x42028000, 0x00000029, 0x417a7800, 0x0201f800,
- 0x0010e06f, 0x5c028000, 0x5c027800, 0x5c000000,
- 0x4802600a, 0x59cc0007, 0x83440d80, 0x000007fe,
- 0x04020005, 0x42000000, 0x00fffffe, 0x4a026c00,
- 0x00000707, 0x48026802, 0x80000580, 0x5c026800,
- 0x5c028800, 0x1c01f000, 0x4933c857, 0x4c040000,
- 0x59a8005a, 0x82000580, 0x00000074, 0x04020040,
- 0x59cc0a08, 0x82040480, 0x00000100, 0x04001033,
- 0x59cc0c08, 0x82040500, 0x00008000, 0x04000035,
- 0x59a80013, 0x80000540, 0x04020009, 0x5930100a,
- 0x58080212, 0x82000500, 0x0000ff00, 0x04000004,
- 0x82040500, 0x00000800, 0x0400002a, 0x59cc0c09,
- 0x80040840, 0x04001024, 0x59a80a1b, 0x8c040d06,
- 0x04000004, 0x59cc0c0f, 0x8c040d1e, 0x04020012,
- 0x59cc0a17, 0x800409c0, 0x04020012, 0x59cc0a18,
- 0x82040480, 0x00000100, 0x04001014, 0x59cc0c18,
- 0x800409c0, 0x0402000e, 0x59cc0c19, 0x80040840,
- 0x04001011, 0x59cc0c1a, 0x80040840, 0x04001011,
- 0x0401f018, 0x4a02621b, 0x00000100, 0x0401f012,
- 0x4a02621b, 0x00000300, 0x0401f00f, 0x4a02621b,
- 0x00000500, 0x0401f00c, 0x4a02621b, 0x00000700,
- 0x0401f009, 0x4a02621b, 0x00000900, 0x0401f006,
- 0x4a02621b, 0x00000f00, 0x0401f003, 0x4a02621b,
- 0x00002d00, 0x82000540, 0x00000001, 0x0401f002,
- 0x80000580, 0x5c000800, 0x1c01f000, 0x59cc0407,
- 0x4803c857, 0x82000580, 0x00000800, 0x04000003,
- 0x4a02621b, 0x00000000, 0x1c01f000, 0x4933c857,
- 0x4c580000, 0x59cc000c, 0x59340802, 0x82040d00,
- 0x00ffffff, 0x80040580, 0x04020012, 0x83cc1400,
- 0x00000008, 0x4200b000, 0x00000002, 0x83341c00,
- 0x00000006, 0x0201f800, 0x00107df9, 0x04020009,
- 0x83cc1400, 0x0000000a, 0x4200b000, 0x00000002,
- 0x83341c00, 0x00000008, 0x0201f800, 0x00107df9,
- 0x5c00b000, 0x1c01f000, 0x4933c857, 0x4c580000,
- 0x83cc1400, 0x0000000b, 0x4200b000, 0x00000002,
- 0x83341c00, 0x00000006, 0x0201f800, 0x00107df9,
- 0x0402000c, 0x83cc1400, 0x0000000d, 0x4200b000,
- 0x00000002, 0x83341c00, 0x00000008, 0x0201f800,
- 0x00107df9, 0x04000014, 0x4933c856, 0x4933c856,
- 0x4933c857, 0x59340009, 0x4803c857, 0x5934000e,
- 0x4803c857, 0x59340008, 0x4803c857, 0x5934000d,
- 0x4803c857, 0x59340007, 0x4803c857, 0x5934000c,
- 0x4803c857, 0x59340006, 0x4803c857, 0x5934000b,
- 0x4803c857, 0x5c00b000, 0x1c01f000, 0x4933c857,
- 0x813261c0, 0x0400002d, 0x83300d80, 0x0010f64c,
- 0x0400002a, 0x8d3e7d06, 0x04020028, 0x59300c07,
- 0x82040580, 0x00000001, 0x0400000a, 0x82040580,
- 0x00000002, 0x04020021, 0x5930021e, 0x82000580,
- 0x00000001, 0x0402001d, 0x59300c17, 0x0401f002,
- 0x59300c03, 0x82040580, 0x00000039, 0x04000004,
- 0x82040580, 0x00000035, 0x04020014, 0x4d300000,
- 0x4d1c0000, 0x5932601f, 0x4933c857, 0x0201f800,
- 0x00108d9b, 0x02000800, 0x0010032d, 0x591c001d,
- 0x497a381d, 0x591c0c15, 0x84040d02, 0x48063c15,
- 0x5c023800, 0x5c026000, 0x81300580, 0x02020800,
- 0x0010032d, 0x497a601f, 0x1c01f000, 0x5c000000,
- 0x4c000000, 0x4803c857, 0x4d3c0000, 0x42027800,
- 0x00000001, 0x0201f800, 0x00103d92, 0x5c027800,
- 0x4c580000, 0x4200b000, 0x00000002, 0x83a81c00,
- 0x00000002, 0x83cc1400, 0x0000000b, 0x0201f800,
- 0x00107df9, 0x5c00b000, 0x80000540, 0x1c01f000,
- 0x492fc857, 0x4943c857, 0x59a8000c, 0x812c0480,
- 0x04001011, 0x59a8000a, 0x812c0480, 0x0402100e,
- 0x592c0000, 0x80005d40, 0x04000008, 0x497a5800,
- 0x49425a07, 0x4c2c0000, 0x0201f800, 0x000203ab,
- 0x5c025800, 0x0401f7f7, 0x49425a07, 0x0201f000,
- 0x000203ab, 0x1c01f000, 0x42002000, 0x0000ffff,
- 0x5930100a, 0x800811c0, 0x04000002, 0x58082403,
- 0x41301000, 0x0401f009, 0x40682800, 0x406c3000,
- 0x41781000, 0x41442000, 0x0401f004, 0x41781000,
- 0x42002000, 0x0000ffff, 0x5c000000, 0x4c000000,
- 0x4803c857, 0x480bc857, 0x4813c857, 0x492fc857,
- 0x4943c857, 0x4d2c0000, 0x4c040000, 0x4c080000,
- 0x4c0c0000, 0x4c100000, 0x4c140000, 0x4c180000,
- 0x4c1c0000, 0x4c200000, 0x0201f800, 0x0010056f,
- 0x02000800, 0x0010032d, 0x5c004000, 0x5c003800,
- 0x5c003000, 0x5c002800, 0x5c002000, 0x5c001800,
- 0x5c001000, 0x5c000800, 0x4a025805, 0x0000010d,
- 0x800811c0, 0x0400001f, 0x83400580, 0x00000029,
- 0x04020018, 0x82180580, 0x00000002, 0x0400000d,
- 0x82180580, 0x00000003, 0x0400000a, 0x82180580,
- 0x00000008, 0x04000007, 0x82180580, 0x00000006,
- 0x04000007, 0x82180580, 0x00000009, 0x04020009,
- 0x4a02580a, 0xffffffff, 0x0401f007, 0x5808280a,
- 0x58140002, 0x82000500, 0x00ffffff, 0x48025813,
- 0x480a580a, 0x58080202, 0x48025c14, 0x0401f005,
- 0x4a02580a, 0xffffffff, 0x4a025c14, 0x0000ffff,
- 0x83400580, 0x00000046, 0x04000002, 0x41782800,
- 0x480e580d, 0x4806580e, 0x4822580f, 0x481e5810,
- 0x48165a08, 0x481a5c09, 0x49425a09, 0x48125a07,
- 0x82100580, 0x0000ffff, 0x0400000e, 0x4d440000,
- 0x4d340000, 0x40128800, 0x0201f800, 0x00020319,
- 0x02020800, 0x0010032d, 0x59340002, 0x82000500,
- 0x00ffffff, 0x48025813, 0x5c026800, 0x5c028800,
- 0x497a5800, 0x497a5c05, 0x0201f800, 0x0010a4d8,
- 0x5c025800, 0x1c01f000, 0x5c000000, 0x4c000000,
- 0x4803c857, 0x480bc857, 0x480fc857, 0x4813c857,
- 0x4817c857, 0x4d2c0000, 0x4c080000, 0x4c0c0000,
- 0x4c100000, 0x4c140000, 0x0201f800, 0x0010056f,
- 0x02000800, 0x0010032d, 0x5c002800, 0x5c002000,
- 0x5c001800, 0x5c001000, 0x04011000, 0x832c0400,
- 0x00000005, 0x4803c840, 0x4a03c842, 0x00000010,
- 0x40000000, 0x040117ff, 0x4a025805, 0x0000010d,
- 0x4a025a09, 0x00000049, 0x480a5a0b, 0x480e5c0b,
- 0x48125a0c, 0x48165c0c, 0x82080580, 0x00008014,
- 0x04020064, 0x820c0580, 0x0000ffff, 0x04020061,
- 0x82100580, 0x00000006, 0x0402005e, 0x59a8000f,
- 0x0201f800, 0x00104755, 0x04000009, 0x82000d00,
- 0x00ffff00, 0x04020006, 0x82000c00, 0x00101b0f,
- 0x50040800, 0x80040910, 0x48065a0d, 0x82000d00,
- 0x0000ffff, 0x48065c0d, 0x80000120, 0x48025a0e,
- 0x59a8021b, 0x82001500, 0x00002100, 0x480a5a0f,
- 0x8c000502, 0x0400001f, 0x8c000506, 0x04000009,
- 0x82000d00, 0x0000000a, 0x82040d80, 0x0000000a,
- 0x04020004, 0x4a025c0e, 0x00000001, 0x0401f022,
- 0x8c00050a, 0x04000009, 0x82000d00, 0x00000022,
- 0x82040d80, 0x00000022, 0x04020004, 0x4a025c0e,
- 0x00000003, 0x0401f018, 0x8c000508, 0x04000009,
- 0x82000d00, 0x00000012, 0x82040d80, 0x00000012,
- 0x04020004, 0x4a025c0e, 0x00000002, 0x0401f00e,
- 0x0201f800, 0x00104755, 0x04020004, 0x4a025c0e,
- 0x00000004, 0x0401f008, 0x8c000506, 0x04000004,
- 0x4a025c0e, 0x00000005, 0x0401f003, 0x4a025c0e,
- 0x00000000, 0x59a8002a, 0x48025c0f, 0x59a8002b,
- 0x48025a10, 0x59c40801, 0x82040d00, 0x00018000,
- 0x82040580, 0x00000000, 0x04020004, 0x4a025c10,
- 0x00000000, 0x0401f00f, 0x82040580, 0x00008000,
- 0x04020004, 0x4a025c10, 0x00000001, 0x0401f009,
- 0x82040580, 0x00010000, 0x04020004, 0x4a025c10,
- 0x00000003, 0x0401f003, 0x4a025c10, 0x00000004,
- 0x0401fbcc, 0x5c025800, 0x1c01f000, 0x0401f807,
- 0x42018800, 0x00000001, 0x04000003, 0x42018800,
- 0x00000000, 0x1c01f000, 0x5930080a, 0x800409c0,
- 0x04000004, 0x58040403, 0x81440580, 0x1c01f000,
- 0x82000540, 0x00000001, 0x0401f7fd, 0x4933c857,
- 0x4c040000, 0x59300403, 0x82000d80, 0x0000001e,
- 0x04020016, 0x800000d0, 0x59300a17, 0x82040d00,
- 0x000000ff, 0x80040540, 0x4803c857, 0x48026417,
- 0x4a026403, 0x00000085, 0x4a026203, 0x00000009,
- 0x4a026407, 0x00000005, 0x4a02621e, 0x00000004,
- 0x59a8002b, 0x48026006, 0x42000800, 0x8000004b,
- 0x0201f800, 0x000209b1, 0x5c000800, 0x1c01f000,
- 0x4933c857, 0x40000000, 0x40000000, 0x1c01f000,
- 0x59300415, 0x4933c857, 0x4803c857, 0x8c000518,
- 0x04000009, 0x8c000512, 0x02020000, 0x00108b7b,
- 0x0401f922, 0x0201f800, 0x00020979, 0x0201f800,
- 0x00020a10, 0x1c01f000, 0x591c0407, 0x4803c857,
- 0x82000c80, 0x00000009, 0x0402100b, 0x0c01f001,
- 0x0010a15d, 0x0010a15d, 0x0010a15d, 0x0010a15f,
- 0x0010a15d, 0x0010a15f, 0x0010a15f, 0x0010a15d,
- 0x0010a15f, 0x80000580, 0x1c01f000, 0x82000540,
- 0x00000001, 0x1c01f000, 0x591c0407, 0x82000500,
- 0x0000001f, 0x82000580, 0x00000006, 0x0400000e,
- 0x4803c857, 0x4a026403, 0x0000003b, 0x4a02641b,
- 0x00000009, 0x4a02621b, 0x00002a00, 0x4a026203,
- 0x00000001, 0x42000800, 0x80000040, 0x0201f000,
- 0x000209b1, 0x4803c856, 0x4c040000, 0x4c140000,
- 0x4d300000, 0x411e6000, 0x0401f8f0, 0x497a6205,
- 0x59300415, 0x4803c857, 0x82000500, 0xffffadff,
- 0x48026415, 0x497a6405, 0x5c026000, 0x0201f800,
- 0x0010056f, 0x02000800, 0x0010032d, 0x5c002800,
- 0x5c000800, 0x4a025805, 0x0000010d, 0x497a5800,
- 0x497a5c05, 0x4a025a09, 0x00000045, 0x491e580a,
- 0x59300402, 0x48025c08, 0x5930041a, 0x48025c0c,
- 0x591c0415, 0x84000556, 0x48023c15, 0x591c180a,
- 0x580c0403, 0x48025a07, 0x580c0002, 0x82000500,
- 0x00ffffff, 0x48025813, 0x59cc0404, 0x48025c14,
- 0x497a5a08, 0x4816580b, 0x48065a0c, 0x0401fb35,
- 0x493a6403, 0x4d400000, 0x42028000, 0x00000045,
- 0x591c0202, 0x4c000000, 0x4d300000, 0x411e6000,
- 0x0401fc9e, 0x5c026000, 0x5c000000, 0x48023a02,
- 0x5c028000, 0x491e601f, 0x4932381d, 0x4a023c07,
- 0x00000006, 0x4a023a03, 0x00000007, 0x497a3806,
- 0x497a3a05, 0x1c01f000, 0x4933c857, 0x83380580,
- 0x00000013, 0x0402000b, 0x59300403, 0x4803c857,
- 0x82000d80, 0x00000085, 0x0400002b, 0x82000d80,
- 0x0000008b, 0x04000028, 0x0201f800, 0x0010032d,
- 0x83380580, 0x00000027, 0x0402000c, 0x0201f800,
- 0x00106102, 0x4d2c0000, 0x4d400000, 0x59325809,
- 0x42028000, 0x00000004, 0x0401fe26, 0x5c028000,
- 0x5c025800, 0x1c01f000, 0x83380580, 0x00000014,
- 0x040007f3, 0x83380580, 0x00000089, 0x04000005,
- 0x83380580, 0x0000008a, 0x02020000, 0x001071c7,
- 0x0201f800, 0x001064f2, 0x02020000, 0x001071c7,
- 0x59300a03, 0x82040580, 0x0000000a, 0x04000009,
- 0x82040580, 0x0000000c, 0x04000006, 0x0201f800,
- 0x0010032d, 0x4a026203, 0x0000000a, 0x1c01f000,
- 0x83380480, 0x00000093, 0x0402100c, 0x83380480,
- 0x00000085, 0x04001009, 0x83380580, 0x00000089,
- 0x0400000a, 0x83380580, 0x0000008a, 0x04000022,
- 0x0201f800, 0x0010032d, 0x493bc857, 0x4933c857,
- 0x0201f000, 0x001071c7, 0x4933c857, 0x4c340000,
- 0x41306800, 0x0201f800, 0x00107188, 0x04000011,
- 0x4a026203, 0x00000001, 0x4a026403, 0x0000001e,
- 0x59cc0c07, 0x4806641a, 0x59cc0a07, 0x4806621a,
- 0x5834080a, 0x4806600a, 0x4a026407, 0x00000004,
- 0x42000800, 0x80000040, 0x0201f800, 0x000209b1,
- 0x40366000, 0x0201f800, 0x00020a10, 0x5c006800,
- 0x1c01f000, 0x4933c857, 0x0201f000, 0x00020a10,
- 0x5930080a, 0x58040200, 0x8c00051a, 0x02020800,
- 0x001003f4, 0x1c01f000, 0x0201f800, 0x001040ca,
- 0x0400001e, 0x4a026203, 0x00000002, 0x59300415,
- 0x84000558, 0x48026415, 0x8c000512, 0x04000004,
- 0x59a8002c, 0x48026205, 0x0401f007, 0x59a8082c,
- 0x59a8002a, 0x80040400, 0x82000400, 0x0000001e,
- 0x48026205, 0x5930000a, 0x82000c00, 0x00000011,
- 0x50040000, 0x80000540, 0x04000004, 0x82000c00,
- 0x00000000, 0x0401f7fb, 0x45300800, 0x497a6000,
- 0x82000540, 0x00000001, 0x1c01f000, 0x82100500,
- 0xfffffeef, 0x0402001c, 0x4d2c0000, 0x4937c857,
- 0x59340811, 0x83341400, 0x00000011, 0x800409c0,
- 0x0400000e, 0x40040000, 0x81300580, 0x04000005,
- 0x82041400, 0x00000000, 0x58040800, 0x0401f7f8,
- 0x59300800, 0x497a6000, 0x44041000, 0x0201f800,
- 0x00020979, 0x0401f002, 0x4933c857, 0x5c025800,
- 0x492e6009, 0x0201f800, 0x00020979, 0x0201f000,
- 0x00020a10, 0x492fc857, 0x4a025a07, 0x00000006,
- 0x0201f000, 0x000203ab, 0x4c340000, 0x5930000a,
- 0x800001c0, 0x04000011, 0x82006c00, 0x00000011,
- 0x50340000, 0x80000540, 0x0400000a, 0x81300580,
- 0x04000005, 0x50340000, 0x82006c00, 0x00000000,
- 0x0401f7f8, 0x59300000, 0x44006800, 0x497a6000,
- 0x5c006800, 0x1c01f000, 0x59300c07, 0x82040580,
- 0x00000005, 0x040007fb, 0x82040580, 0x00000011,
- 0x040007f8, 0x82040580, 0x00000006, 0x040007f5,
- 0x82040580, 0x00000001, 0x040007f2, 0x0201f800,
- 0x0010032d, 0x4933c857, 0x4c080000, 0x4c0c0000,
- 0x4c580000, 0x59a81018, 0x59cc1807, 0x820c1d00,
- 0x00ffffff, 0x800c0110, 0x80083580, 0x04020014,
- 0x83cc1400, 0x00000008, 0x4200b000, 0x00000002,
- 0x5930000a, 0x82001c00, 0x00000006, 0x0201f800,
- 0x00107df9, 0x0402000a, 0x83cc1400, 0x0000000a,
- 0x4200b000, 0x00000002, 0x5930000a, 0x82001c00,
- 0x00000008, 0x0201f800, 0x00107df9, 0x5c00b000,
- 0x5c001800, 0x5c001000, 0x1c01f000, 0x4933c856,
- 0x493a6403, 0x0201f800, 0x00103a19, 0x0201f000,
- 0x0010e25a, 0x493bc857, 0x4d2c0000, 0x0201f800,
- 0x0010056f, 0x02000800, 0x0010032d, 0x832cac00,
- 0x00000006, 0x4c580000, 0x4c540000, 0x4200b000,
- 0x00000006, 0x4578a800, 0x8054a800, 0x8058b040,
- 0x040207fd, 0x83380580, 0x00000046, 0x04020004,
- 0x4a025805, 0x00000144, 0x0401f008, 0x4a025805,
- 0x00000146, 0x83380580, 0x00000041, 0x04000003,
- 0x4a025a07, 0x00000001, 0x59cc0007, 0x82000500,
- 0xff000000, 0x80000110, 0x59cc1008, 0x82081500,
- 0xff000000, 0x80081540, 0x480a580b, 0x83380580,
- 0x00000046, 0x04020006, 0x59cc0007, 0x82000500,
- 0x00ffffff, 0x4802580c, 0x0401f005, 0x59cc0008,
- 0x82000500, 0x00ffffff, 0x4802580c, 0x83380580,
- 0x00000046, 0x04020004, 0x83cc1400, 0x00000009,
- 0x0401f003, 0x83cc1400, 0x0000000d, 0x50080000,
- 0x9c0001c0, 0x4802580d, 0x80081000, 0x50080000,
- 0x9c0001c0, 0x4802580e, 0x83380580, 0x00000046,
- 0x04020008, 0x59cc000b, 0x9c0001c0, 0x4802580f,
- 0x59cc000c, 0x9c0001c0, 0x48025810, 0x0401f007,
- 0x59cc000f, 0x9c0001c0, 0x4802580f, 0x59cc0010,
- 0x9c0001c0, 0x48025810, 0x83380580, 0x00000046,
- 0x04020004, 0x83cc1400, 0x00000011, 0x0401f003,
- 0x83cc1400, 0x00000015, 0x412c3000, 0x82183400,
- 0x00000011, 0x4200b000, 0x00000004, 0x50080000,
- 0x9c0001c0, 0x44003000, 0x80081000, 0x80183000,
- 0x8058b040, 0x040207fa, 0x5c00a800, 0x5c00b000,
- 0x0201f800, 0x000203ab, 0x5c025800, 0x1c01f000,
- 0x4933c857, 0x492fc857, 0x5930080a, 0x58040200,
- 0x8c00051e, 0x04000004, 0x592c0209, 0x84000558,
- 0x48025a09, 0x1c01f000, 0x59e0180f, 0x599c0413,
- 0x800c1000, 0x80080580, 0x04020002, 0x41781000,
- 0x59e00010, 0x59e00810, 0x80040d80, 0x040207fd,
- 0x80080580, 0x0400000b, 0x4c080000, 0x599c0814,
- 0x599c1015, 0x800c00cc, 0x80040c00, 0x82081440,
- 0x00000000, 0x5c001800, 0x82000540, 0x00000001,
- 0x4803c857, 0x1c01f000, 0x59300203, 0x4933c857,
- 0x4937c857, 0x493bc857, 0x4803c857, 0x82003480,
- 0x0000000e, 0x02021800, 0x0010032d, 0x0c01f001,
- 0x0010a35a, 0x0010a473, 0x0010a35a, 0x0010a35a,
- 0x0010a35a, 0x0010a35a, 0x0010a35a, 0x0010a3d7,
- 0x0010a35c, 0x0010a35a, 0x0010a35a, 0x0010a35a,
- 0x0010a35a, 0x0010a35a, 0x0201f800, 0x0010032d,
- 0x83380580, 0x0000004c, 0x02020800, 0x0010032d,
- 0x0201f800, 0x001040e5, 0x04020021, 0x59a80a1b,
- 0x82040500, 0x00000009, 0x82000580, 0x00000008,
- 0x0400001b, 0x8c040d12, 0x04000032, 0x59cc0806,
- 0x82040d00, 0xff000000, 0x82040580, 0x03000000,
- 0x04000020, 0x82040580, 0x50000000, 0x04000005,
- 0x82040580, 0x52000000, 0x02020000, 0x00020a10,
- 0x83340580, 0x0010c2b2, 0x04000006, 0x4d3c0000,
- 0x417a7800, 0x0201f800, 0x0010e06f, 0x5c027800,
- 0x4a026403, 0x00000001, 0x0401f014, 0x59cc0806,
- 0x82040d00, 0xff000000, 0x82040580, 0x03000000,
- 0x04000008, 0x82040580, 0x50000000, 0x04000005,
- 0x82040580, 0x52000000, 0x02020000, 0x00020a10,
- 0x4a026403, 0x00000009, 0x4a02641b, 0x00000009,
- 0x4a02621b, 0x00000000, 0x4a026407, 0x00000004,
- 0x4a026203, 0x00000001, 0x0201f000, 0x0010608d,
- 0x8d0e1d20, 0x04000023, 0x0201f800, 0x0010af31,
- 0x04020020, 0x59cc0806, 0x4807c857, 0x82040d00,
- 0xff000000, 0x82040580, 0x03000000, 0x04000013,
- 0x82040580, 0x20000000, 0x04000010, 0x82040580,
- 0x21000000, 0x0400000d, 0x82040580, 0x24000000,
- 0x0400000a, 0x82040580, 0x50000000, 0x04000007,
- 0x82040580, 0x52000000, 0x04000004, 0x82040580,
- 0x05000000, 0x0402000a, 0x9c0431c0, 0x42028000,
- 0x00000046, 0x42002800, 0x00000001, 0x0401fc4f,
- 0x0401f924, 0x02000800, 0x0010032d, 0x42002000,
- 0x00000051, 0x0201f800, 0x0010729d, 0x59cc0000,
- 0x82000500, 0x00ffffff, 0x82000580, 0x00ffffff,
- 0x04000005, 0x4a026203, 0x00000007, 0x493a6403,
- 0x1c01f000, 0x59325818, 0x812e59c0, 0x02020800,
- 0x00100589, 0x0201f000, 0x00020a10, 0x4d2c0000,
- 0x4c580000, 0x4c500000, 0x4c540000, 0x41385000,
- 0x83380580, 0x00000054, 0x02020800, 0x0010032d,
- 0x59325809, 0x592c0c0c, 0x82040d00, 0x0000e000,
- 0x82040580, 0x00002000, 0x04020077, 0x59300818,
- 0x800409c0, 0x04000016, 0x58041405, 0x41cca800,
- 0x8204a400, 0x00000006, 0x82080480, 0x00000010,
- 0x04021005, 0x4008b000, 0x0201f800, 0x0010aee2,
- 0x0401f00b, 0x40001000, 0x4200b000, 0x0000000f,
- 0x0201f800, 0x0010aee2, 0x58040801, 0x800409c0,
- 0x040207f0, 0x0201f800, 0x0010032d, 0x83340580,
- 0x0010c2b2, 0x0400005c, 0x59344c00, 0x592c0c0a,
- 0x4807c857, 0x4827c857, 0x82040d00, 0x000000ff,
- 0x82040580, 0x00000003, 0x0400002a, 0x82040580,
- 0x00000005, 0x04000030, 0x82040580, 0x00000020,
- 0x04000034, 0x82040580, 0x00000052, 0x04000040,
- 0x82040580, 0x00000050, 0x04000040, 0x82040580,
- 0x00000021, 0x04000004, 0x82040580, 0x00000024,
- 0x04020041, 0x82240500, 0x0000ff00, 0x82000580,
- 0x00000700, 0x04000008, 0x42000800, 0x00000009,
- 0x0201f800, 0x00103d9d, 0x42005000, 0x0000000c,
- 0x0401f035, 0x4a025a07, 0x00000031, 0x4a02580e,
- 0x00000009, 0x59340400, 0x4802580f, 0x0201f800,
- 0x000203ab, 0x0201f800, 0x00107144, 0x0401f03b,
- 0x0201f800, 0x00103e7e, 0x42000800, 0x00000003,
- 0x0201f800, 0x00103d9d, 0x42005000, 0x00000008,
- 0x0401f021, 0x59cc0007, 0x0201f800, 0x0010575c,
- 0x0402001d, 0x4a026c00, 0x00000707, 0x0401f01a,
- 0x82240500, 0x0000ff00, 0x82000580, 0x00000700,
- 0x040007e1, 0x82240500, 0x000000ff, 0x82000580,
- 0x00000009, 0x040007dc, 0x0201f800, 0x00103ee9,
- 0x42005000, 0x0000000a, 0x0401f00b, 0x42005000,
- 0x0000000e, 0x0401f003, 0x42005000, 0x00000010,
- 0x82240500, 0x0000ff00, 0x82000580, 0x00000700,
- 0x040007cd, 0x482a6403, 0x4a026203, 0x00000001,
- 0x592c000e, 0x48026012, 0x497a6014, 0x59a8002b,
- 0x48026006, 0x417a7800, 0x0201f800, 0x0010608d,
- 0x59325818, 0x812e59c0, 0x04000004, 0x0201f800,
- 0x00100589, 0x497a6018, 0x5c00a800, 0x5c00a000,
- 0x5c00b000, 0x5c025800, 0x1c01f000, 0x4d2c0000,
- 0x59325809, 0x83380580, 0x00000013, 0x0402003c,
- 0x492fc857, 0x59300c03, 0x82040580, 0x00000054,
- 0x04000030, 0x82040580, 0x00000010, 0x0400002a,
- 0x82040580, 0x0000000e, 0x04000027, 0x59341400,
- 0x82081d00, 0x0000ff00, 0x82081500, 0x000000ff,
- 0x82040580, 0x00000008, 0x04000013, 0x82040580,
- 0x0000000c, 0x04000013, 0x82040580, 0x0000000a,
- 0x02020800, 0x0010032d, 0x820c0580, 0x00000700,
- 0x04000018, 0x82080580, 0x00000009, 0x04000015,
- 0x42000800, 0x00000006, 0x0201f800, 0x00103d9d,
- 0x0401f010, 0x42000000, 0x00000003, 0x0401f003,
- 0x42000000, 0x00000009, 0x80080580, 0x04020009,
- 0x42000800, 0x00000004, 0x0201f800, 0x00103d9d,
- 0x0401f004, 0x59340200, 0x8400051a, 0x48026a00,
- 0x4a025a07, 0x00000000, 0x0201f800, 0x000203ab,
- 0x0201f800, 0x00020a10, 0x0401f024, 0x83380580,
- 0x00000027, 0x0400000f, 0x83380580, 0x00000014,
- 0x02020800, 0x0010032d, 0x492fc857, 0x0201f800,
- 0x00106102, 0x42028000, 0x00000031, 0x42000800,
- 0x00000004, 0x42001000, 0x000000ff, 0x0401f00a,
- 0x492fc857, 0x0201f800, 0x00106102, 0x42028000,
- 0x00000031, 0x42000800, 0x00000004, 0x42001000,
- 0x00000010, 0x49425a07, 0x4806580e, 0x480a580f,
- 0x0201f800, 0x000203ab, 0x0201f800, 0x001043e2,
- 0x0201f800, 0x00107144, 0x5c025800, 0x1c01f000,
- 0x492fc857, 0x42007000, 0x00020b54, 0x58380806,
- 0x492c7006, 0x800409c0, 0x04020004, 0x492c7007,
- 0x0201f000, 0x00020026, 0x492c0800, 0x1c01f000,
- 0x4d2c0000, 0x4c580000, 0x4c500000, 0x4c540000,
- 0x4933c857, 0x4937c857, 0x59cc0806, 0x4807c857,
- 0x82040d00, 0xff000000, 0x82040580, 0x03000000,
- 0x0400000d, 0x82040580, 0x05000000, 0x0400000a,
- 0x82040580, 0x21000000, 0x04000032, 0x82040580,
- 0x24000000, 0x0400002f, 0x82040580, 0x20000000,
- 0x04020031, 0x0201f800, 0x0010056f, 0x0400002e,
- 0x492fc857, 0x492e6018, 0x59a8b05a, 0x8258b400,
- 0x0000001b, 0x8258b500, 0xfffffffc, 0x8058b104,
- 0x485a5c05, 0x412c7800, 0x41cca000, 0x82580480,
- 0x00000010, 0x04021006, 0x832cac00, 0x00000006,
- 0x0201f800, 0x0010aee2, 0x0401f016, 0x40580800,
- 0x4200b000, 0x0000000f, 0x832cac00, 0x00000006,
- 0x0201f800, 0x0010aee2, 0x8204b480, 0x0000000f,
- 0x0201f800, 0x0010056f, 0x04000004, 0x492c7801,
- 0x412c7800, 0x0401f7ea, 0x59325818, 0x0201f800,
- 0x00100589, 0x497a6018, 0x80000580, 0x0401f006,
- 0x59340200, 0x84000554, 0x48026a00, 0x82000540,
- 0x00000001, 0x5c00a800, 0x5c00a000, 0x5c00b000,
- 0x5c025800, 0x1c01f000, 0x4933c857, 0x492fc857,
- 0x4d2c0000, 0x59300a03, 0x82040580, 0x00000007,
- 0x04000037, 0x82040580, 0x00000001, 0x02020800,
- 0x0010032d, 0x0201f800, 0x001061b2, 0x4df00000,
- 0x598c000f, 0x81300580, 0x04020016, 0x59300004,
- 0x8c000520, 0x04000004, 0x84000520, 0x48026004,
- 0x0401f016, 0x42001000, 0x0010bc55, 0x50081000,
- 0x58080002, 0x82000580, 0x00000100, 0x04000006,
- 0x5808000b, 0x81300580, 0x02020800, 0x0010032d,
- 0x0401f00a, 0x0201f800, 0x0010642d, 0x04020021,
- 0x59300004, 0x8c000520, 0x04000004, 0x84000520,
- 0x48026004, 0x0401f004, 0x0201f800, 0x0010e453,
- 0x80c40040, 0x5c03e000, 0x02000800, 0x0010619f,
- 0x0201f800, 0x00108953, 0x02000800, 0x0010032d,
- 0x59325809, 0x4a025a07, 0x00000005, 0x0201f800,
- 0x000203ab, 0x0201f800, 0x001043e2, 0x59325818,
- 0x812e59c0, 0x02020800, 0x00100589, 0x0201f800,
- 0x00107144, 0x80000580, 0x5c025800, 0x1c01f000,
- 0x5c03e000, 0x02000800, 0x0010619f, 0x59300c07,
- 0x82040580, 0x00000011, 0x040007b7, 0x0401f7f7,
- 0x4c040000, 0x59340200, 0x4803c857, 0x8c00051c,
- 0x04000009, 0x59cc0805, 0x591c001a, 0x4803c857,
- 0x80040580, 0x04000004, 0x80000580, 0x4803c856,
- 0x0401f003, 0x82000540, 0x00000001, 0x5c000800,
- 0x1c01f000, 0x4c000000, 0x4c0c0000, 0x4c100000,
- 0x42001800, 0x0000ffff, 0x42002000, 0x00000004,
- 0x0401f013, 0x4c000000, 0x4c0c0000, 0x4c100000,
- 0x5930200a, 0x58101c03, 0x42002000, 0x00000004,
- 0x0401f00b, 0x4c000000, 0x4c0c0000, 0x4c100000,
- 0x5930200a, 0x801021c0, 0x02000800, 0x0010032d,
- 0x58101c03, 0x42002000, 0x00000007, 0x480fc857,
- 0x4813c857, 0x481bc857, 0x0201f800, 0x0010326a,
- 0x5c002000, 0x5c001800, 0x5c000000, 0x1c01f000,
- 0x8d0e1d20, 0x04000008, 0x4d400000, 0x850e1d44,
- 0x42028000, 0x0000002a, 0x0201f800, 0x0010a01b,
- 0x5c028000, 0x1c01f000, 0x59a8021b, 0x8c000508,
- 0x04000005, 0x599c0017, 0x8c00050a, 0x04020002,
- 0x1c01f000, 0x82000540, 0x00000001, 0x1c01f000,
- 0x59300421, 0x84000540, 0x48026421, 0x1c01f000,
- 0x4c640000, 0x0201f800, 0x00108d64, 0x59300203,
- 0x82000580, 0x00000008, 0x04020015, 0x4200c800,
- 0x00000032, 0x42000000, 0x20000000, 0x41300800,
- 0x0201f800, 0x00100897, 0x0400000d, 0x59300203,
- 0x82000580, 0x00000008, 0x04020009, 0x42000000,
- 0x0000001e, 0x80000040, 0x040207ff, 0x8064c840,
- 0x040207f1, 0x0201f800, 0x0010032d, 0x0201f800,
- 0x00108d7c, 0x5c00c800, 0x1c01f000, 0x0201f800,
- 0x0010056f, 0x02000800, 0x0010032d, 0x59340403,
- 0x49365803, 0x4a025a05, 0x00000055, 0x48025c07,
- 0x4a025c08, 0x00001000, 0x59340802, 0x82040d00,
- 0x00ffffff, 0x59300403, 0x82000580, 0x00000086,
- 0x42000000, 0x85000000, 0x04020003, 0x42000000,
- 0x84000000, 0x80040540, 0x4802580a, 0x59a8000f,
- 0x4802580b, 0x42000000, 0x00990000, 0x59300c07,
- 0x82040d80, 0x00000005, 0x04000002, 0x8400052e,
- 0x4802580c, 0x497a580d, 0x59cc0004, 0x4802580e,
- 0x497a580f, 0x42000800, 0x00030300, 0x59300403,
- 0x82000580, 0x00000086, 0x04020006, 0x59cc0004,
- 0x48025811, 0x4a025812, 0x0000ffff, 0x41780800,
- 0x48065810, 0x1c01f000, 0x492fc857, 0x59a82852,
- 0x801429c0, 0x0400005f, 0x4c5c0000, 0x4c600000,
- 0x4c640000, 0x4d2c0000, 0x4d300000, 0x42026000,
- 0x0010f628, 0x592c0c07, 0x592c100a, 0x82081500,
- 0x00ffffff, 0x592c180b, 0x592c200e, 0x40165800,
- 0x4014c000, 0x4014c800, 0x592c0205, 0x82000580,
- 0x00000155, 0x0402003e, 0x592c0407, 0x80040580,
- 0x0402003b, 0x592c000a, 0x82000500, 0x00ffffff,
- 0x80080580, 0x04020036, 0x592c000b, 0x82000500,
- 0x00ffffff, 0x800c0580, 0x04020031, 0x592c000e,
- 0x80100580, 0x0402002e, 0x4c040000, 0x4c080000,
- 0x4c0c0000, 0x4c100000, 0x40640000, 0x812c0580,
- 0x0402001b, 0x59300203, 0x82000580, 0x00000000,
- 0x04000013, 0x59300009, 0x800001c0, 0x04000010,
- 0x0201f800, 0x001061b2, 0x4df00000, 0x0201f800,
- 0x0010609c, 0x0201f800, 0x0010e3bd, 0x80c40040,
- 0x04020003, 0x4a026203, 0x00000000, 0x5c03e000,
- 0x02000800, 0x0010619f, 0x497a6009, 0x592cc800,
- 0x4064c000, 0x4064b800, 0x0401f003, 0x592cb800,
- 0x485cc000, 0x4a025a07, 0x00000005, 0x0201f800,
- 0x000203ab, 0x405e5800, 0x5c002000, 0x5c001800,
- 0x5c001000, 0x5c000800, 0x0401f003, 0x412cc000,
- 0x592e5800, 0x812e59c0, 0x040207bc, 0x48675052,
- 0x48635053, 0x0201f800, 0x001070bc, 0x5c026000,
- 0x5c025800, 0x5c00c800, 0x5c00c000, 0x5c00b800,
- 0x1c01f000, 0x42000800, 0x0000000b, 0x0401f006,
- 0x42000800, 0x00000004, 0x0401f003, 0x42000800,
- 0x00000001, 0x4d2c0000, 0x59325809, 0x812e59c0,
- 0x04000012, 0x592c0205, 0x82000500, 0x000000ff,
- 0x82000580, 0x0000000e, 0x0402000c, 0x592c0000,
- 0x48026009, 0x497a5800, 0x48065a09, 0x0201f800,
- 0x00105139, 0x04000003, 0x0401fe3e, 0x0401f003,
- 0x0201f800, 0x000203ab, 0x5c025800, 0x1c01f000,
- 0x42001000, 0x00001000, 0x80081040, 0x04000010,
- 0x0201f800, 0x0010af26, 0x040007fc, 0x42001000,
- 0x00007b00, 0x5808081c, 0x4a030000, 0x00000000,
- 0x82040d00, 0xffff0000, 0x82040580, 0x84320000,
- 0x04020003, 0x4a035073, 0x8000001b, 0x1c01f000,
- 0x4d340000, 0x4d440000, 0x599c0018, 0x82000500,
- 0xffffffcf, 0x82000540, 0x00000010, 0x48033818,
- 0x599c0019, 0x82000500, 0xffff1fff, 0x82000540,
- 0x00006000, 0x48033819, 0x42003000, 0x0000fc0e,
- 0x417a8800, 0x0201f800, 0x00103de6, 0x42003000,
- 0x0010b080, 0x45783000, 0x49375074, 0x4a026c03,
- 0x0000ffff, 0x497a6806, 0x497a6807, 0x4a026c08,
- 0x000004b0, 0x4a026a08, 0x00000014, 0x497a6809,
- 0x4a026c04, 0x00000008, 0x5c028800, 0x5c026800,
- 0x1c01f000, 0x4a038893, 0x00000001, 0x59340400,
- 0x82000500, 0x000000ff, 0x82000580, 0x00000003,
- 0x04000017, 0x0201f800, 0x00107192, 0x04000014,
- 0x4933c857, 0x59aa6874, 0x4936600a, 0x4a026407,
- 0x00000012, 0x42000800, 0x00000003, 0x0201f800,
- 0x00103d9d, 0x42001000, 0x00000008, 0x0201f800,
- 0x00106775, 0x4a0378e4, 0x0c000000, 0x42027000,
- 0x000000d0, 0x0201f800, 0x00020a34, 0x1c01f000,
- 0x4d400000, 0x4d340000, 0x0201f800, 0x001061b2,
- 0x4df00000, 0x59aa6874, 0x42028000, 0x00000029,
- 0x0401f9cc, 0x4a026c00, 0x00000707, 0x5c03e000,
- 0x02000800, 0x0010619f, 0x5c026800, 0x5c028000,
- 0x1c01f000, 0x4a03c013, 0x00010001, 0x4a03c014,
- 0x00010001, 0x4a03c013, 0x00010000, 0x42000000,
- 0x0000000f, 0x80000040, 0x040207ff, 0x4a03c013,
- 0x00010001, 0x1c01f000, 0x4803c856, 0x592c0a07,
- 0x8c040d1e, 0x04020008, 0x80140110, 0x80000040,
- 0x04000022, 0x4a033006, 0x0010a73e, 0x0201f000,
- 0x00020684, 0x80140110, 0x80000040, 0x02020000,
- 0x00104c8b, 0x592c0208, 0x82000c80, 0x00001001,
- 0x04001003, 0x0201f000, 0x00104c9b, 0x592c1014,
- 0x82080500, 0xffff0003, 0x02020000, 0x00104c9b,
- 0x4202e000, 0x00000002, 0x42000000, 0x0010c35d,
- 0x50007000, 0x592c0012, 0x592c0813, 0x48007006,
- 0x48047007, 0x492c700a, 0x4978700d, 0x4978700b,
- 0x0201f000, 0x001050f9, 0x59a80873, 0x8c040d3e,
- 0x02000000, 0x00104c83, 0x59aa6874, 0x59340400,
- 0x82000580, 0x00000404, 0x04020053, 0x59a80073,
- 0x8c000506, 0x0402004c, 0x592c080a, 0x48066809,
- 0x592c1207, 0x59341806, 0x8c081506, 0x04000002,
- 0x59341807, 0x480e580a, 0x8c081502, 0x04020005,
- 0x40040000, 0x800c0480, 0x0400102d, 0x0401f02f,
- 0x592c0810, 0x82040500, 0x00000003, 0x0402004a,
- 0x592c0011, 0x80000540, 0x04020011, 0x592c000f,
- 0x82000500, 0x00000003, 0x04020043, 0x0201f800,
- 0x000209ee, 0x04000038, 0x4932580b, 0x4a026407,
- 0x00000012, 0x492e6009, 0x4936600a, 0x42027000,
- 0x000000d1, 0x0201f000, 0x00020a34, 0x592e600b,
- 0x0201f800, 0x00108d9b, 0x0400002f, 0x59300407,
- 0x82000580, 0x00000012, 0x0402002b, 0x59300809,
- 0x800409c0, 0x04020015, 0x59300203, 0x82000580,
- 0x00000007, 0x04020024, 0x492e6009, 0x42027000,
- 0x000000d9, 0x0201f000, 0x00020a34, 0x8c081500,
- 0x040007d4, 0x480e580a, 0x59a80073, 0x8400054c,
- 0x84000508, 0x48035073, 0x4a025a07, 0x00000000,
- 0x0201f000, 0x000203ab, 0x58041000, 0x800811c0,
- 0x04000003, 0x40080800, 0x0401f7fc, 0x492c0800,
- 0x1c01f000, 0x4a025a07, 0x00000028, 0x0201f000,
- 0x000203ab, 0x4a025a07, 0x00000029, 0x0201f000,
- 0x000203ab, 0x4a025a07, 0x0000002c, 0x0201f000,
- 0x000203ab, 0x4a025a07, 0x00000008, 0x0201f000,
- 0x000203ab, 0x4a025a07, 0x00000003, 0x4a025c07,
- 0x00000002, 0x0201f000, 0x000203ab, 0x4803c856,
- 0x80140110, 0x80000040, 0x04000005, 0x4a033006,
- 0x0010a7b3, 0x0201f000, 0x00020684, 0x59a80873,
- 0x8c040d3e, 0x02000000, 0x00104c83, 0x592c0a07,
- 0x82040480, 0x00000004, 0x02021000, 0x00104c9b,
- 0x59a80073, 0x8c000506, 0x0402001d, 0x59aa6874,
- 0x59340400, 0x82000580, 0x00000404, 0x0402001c,
- 0x0201f800, 0x000209ee, 0x0400001d, 0x4a026407,
- 0x00000012, 0x492e6009, 0x4936600a, 0x592c0a07,
- 0x82040580, 0x00000002, 0x04000004, 0x592c0010,
- 0x800001c0, 0x04000016, 0x82040400, 0x0010a7d7,
- 0x50027000, 0x0201f000, 0x00020a34, 0x000000d4,
- 0x000000d5, 0x000000d3, 0x000000d6, 0x4a025a07,
- 0x00000028, 0x0201f000, 0x000203ab, 0x4a025a07,
- 0x00000029, 0x0201f000, 0x000203ab, 0x4a025a07,
- 0x0000002c, 0x0201f000, 0x000203ab, 0x0201f800,
- 0x00020a10, 0x0201f000, 0x00104c9b, 0x492fc857,
- 0x59a80873, 0x8c040d3e, 0x42000800, 0x00004001,
- 0x040000b6, 0x59a80073, 0x8c000506, 0x42000800,
- 0x00000028, 0x040200b1, 0x59aa6874, 0x59340400,
- 0x82000580, 0x00000404, 0x42000800, 0x00000029,
- 0x040200aa, 0x4a025a05, 0x0000012b, 0x4a025806,
- 0xaa00feed, 0x4a025a07, 0x00000004, 0x4a025a08,
- 0x00000001, 0x59a0020b, 0x48025810, 0x48025814,
- 0x48025a0a, 0x59a00408, 0x59a01208, 0x900811c0,
- 0x80081540, 0x480a5812, 0x59a0040a, 0x59a0120a,
- 0x900811c0, 0x80081540, 0x480a5813, 0x59a00407,
- 0x48025a0b, 0x59a0040b, 0x48025c0b, 0x0201f800,
- 0x000209ee, 0x42000800, 0x0000002c, 0x0400008b,
- 0x4a026407, 0x00000012, 0x492e6009, 0x4936600a,
- 0x42027000, 0x000000de, 0x0201f000, 0x00020a34,
- 0x59cc0801, 0x82040d00, 0x00ffffff, 0x82040580,
- 0x0000fc0e, 0x04020014, 0x59cc0800, 0x82040d00,
- 0x00ffffff, 0x82040580, 0x0000fc0e, 0x04020010,
- 0x59cc0c00, 0x80040910, 0x82040580, 0x00000022,
- 0x04000011, 0x82040580, 0x00000023, 0x04000027,
- 0x82040580, 0x00000005, 0x0400004e, 0x4807c857,
- 0x0401f008, 0x4807c857, 0x0401f006, 0x4807c857,
- 0x42000000, 0x0010bdac, 0x0201f800, 0x0010ae10,
- 0x1c01f000, 0x59cc0806, 0x59a80073, 0x8c00050a,
- 0x04020010, 0x82040580, 0x05000000, 0x0402000d,
- 0x42027000, 0x000000da, 0x0201f800, 0x00107192,
- 0x59aa6874, 0x4936600a, 0x4a026407, 0x00000013,
- 0x59cc0404, 0x48026202, 0x0201f000, 0x00020a34,
- 0x4807c857, 0x42000000, 0x0010bdac, 0x0201f800,
- 0x0010ae10, 0x1c01f000, 0x0201f800, 0x00105616,
- 0x0400001f, 0x59300c07, 0x82040580, 0x00000012,
- 0x02020800, 0x001003f4, 0x0402001c, 0x5932680a,
- 0x59cc0a04, 0x48066202, 0x59300004, 0x8c00053e,
- 0x02020800, 0x001064f2, 0x04020014, 0x42027000,
- 0x000000dc, 0x59cc0806, 0x82040580, 0x02000000,
- 0x02000000, 0x00020a34, 0x82040580, 0x01000000,
- 0x02020800, 0x001003f4, 0x04020008, 0x42027000,
- 0x000000dd, 0x0201f000, 0x00020a34, 0x59cc0c04,
- 0x4807c857, 0x0401f002, 0x4933c857, 0x42000000,
- 0x0010bdac, 0x0201f800, 0x0010ae10, 0x1c01f000,
- 0x0201f800, 0x00105616, 0x04000013, 0x59300c07,
- 0x82040580, 0x00000012, 0x02020800, 0x001003f4,
- 0x04020010, 0x5932680a, 0x59cc0a04, 0x48066202,
- 0x59300004, 0x8c00053e, 0x02020800, 0x001064f2,
- 0x04020008, 0x42027000, 0x000000db, 0x0201f000,
- 0x00020a34, 0x59cc0c04, 0x4807c857, 0x0401f002,
- 0x4933c857, 0x42000000, 0x0010bdac, 0x0201f800,
- 0x0010ae10, 0x1c01f000, 0x492fc857, 0x4807c857,
- 0x82040580, 0x00000000, 0x02000000, 0x00101cbf,
- 0x4a034207, 0x00004005, 0x48074407, 0x0201f000,
- 0x00101cc2, 0x48066004, 0x59bc00ea, 0x8c000516,
- 0x040207fe, 0x83300400, 0xc0000000, 0x480378e1,
- 0x1c01f000, 0x4d300000, 0x598c000d, 0x80026540,
- 0x0400000e, 0x0201f800, 0x00106198, 0x0201f800,
- 0x00106186, 0x59300000, 0x800001c0, 0x04000004,
- 0x4803180d, 0x497a6000, 0x0401f003, 0x497b180d,
- 0x497b180c, 0x80000580, 0x5c026000, 0x1c01f000,
- 0x4d2c0000, 0x4d300000, 0x4d340000, 0x4c5c0000,
- 0x4178b800, 0x598e600d, 0x813261c0, 0x0400000b,
- 0x0201f800, 0x0010609c, 0x59300000, 0x4c000000,
- 0x405c3000, 0x0401f826, 0x0201f800, 0x0010e46f,
- 0x5c026000, 0x0401f7f5, 0x5c00b800, 0x5c026800,
- 0x5c026000, 0x5c025800, 0x1c01f000, 0x4933c857,
- 0x4c5c0000, 0x813261c0, 0x02000800, 0x0010032d,
- 0x41300000, 0x598cb80d, 0x41783000, 0x805cb9c0,
- 0x0400000f, 0x805c0d80, 0x04000004, 0x405c3000,
- 0x5818b800, 0x0401f7fa, 0x0401f80d, 0x598c000f,
- 0x81300580, 0x02000800, 0x00106782, 0x497a6008,
- 0x80000580, 0x5c00b800, 0x1c01f000, 0x82000540,
- 0x00000001, 0x5c00b800, 0x1c01f000, 0x59300800,
- 0x497a6000, 0x0201f800, 0x00106186, 0x801831c0,
- 0x04020009, 0x598c000c, 0x81300580, 0x04020004,
- 0x4803180c, 0x4803180d, 0x0401f008, 0x4807180d,
- 0x0401f006, 0x48043000, 0x598c000c, 0x81300580,
- 0x04020002, 0x481b180c, 0x0201f000, 0x00106198,
- 0x59325809, 0x59300c03, 0x82040480, 0x000000df,
- 0x04021004, 0x82040480, 0x000000d0, 0x0401f002,
- 0x81780040, 0x04001002, 0x0c01f008, 0x4933c857,
- 0x493bc857, 0x42000000, 0x0010bdae, 0x0201f800,
- 0x0010ae10, 0x1c01f000, 0x0010a948, 0x0010a95f,
- 0x0010a97c, 0x0010a98d, 0x0010a99e, 0x0010a9b1,
- 0x0010a9c4, 0x0010a9d8, 0x0010a91f, 0x0010a91f,
- 0x0010a91f, 0x0010a91f, 0x0010a91f, 0x0010a91f,
- 0x0010a935, 0x42000800, 0x00000022, 0x0401f8d1,
- 0x592c0a0a, 0x4805a207, 0x592c0a0b, 0x4805a208,
- 0x592c0c0b, 0x4805a408, 0x4a01a006, 0x0c000000,
- 0x59340408, 0x48026006, 0x42000800, 0x00000003,
- 0x42001000, 0x0000dc00, 0x0201f000, 0x00107000,
- 0x42000800, 0x00000022, 0x0401f8be, 0x497b8880,
- 0x59a8001f, 0x82000500, 0x0000ffff, 0x4c000000,
- 0x0201f800, 0x001013dc, 0x5c000000, 0x48038880,
- 0x4a01a006, 0x03000000, 0x4801a207, 0x59a80004,
- 0x4801a407, 0x42000800, 0x00000002, 0x42001000,
- 0x0000dc00, 0x0201f000, 0x00107000, 0x42000800,
- 0x00000022, 0x0401f8a7, 0x592c0a07, 0x592c100f,
- 0x592c0010, 0x80080580, 0x82000500, 0x00000003,
- 0x0402008c, 0x82080500, 0x00000003, 0x04020089,
- 0x42001800, 0x00000002, 0x8c040d06, 0x04020003,
- 0x42001800, 0x00000001, 0x4a01a006, 0x04000000,
- 0x4809a007, 0x480da008, 0x42000800, 0x00000003,
- 0x42001000, 0x0000dc00, 0x0201f000, 0x00107000,
- 0x42000800, 0x00000022, 0x0401f88a, 0x59300819,
- 0x5930101a, 0x5930181b, 0x4a01a006, 0x06000000,
- 0x4805a007, 0x4809a008, 0x480da009, 0x42000800,
- 0x00000004, 0x42001000, 0x0000dc00, 0x0201f000,
- 0x00107000, 0x42000800, 0x00000022, 0x0401f879,
- 0x592c0a0a, 0x592c100b, 0x592c180c, 0x4a01a006,
- 0x07000000, 0x4805a207, 0x480da008, 0x4809a009,
- 0x42000800, 0x00000004, 0x42001000, 0x0000dc00,
- 0x0201f000, 0x00107000, 0x42000800, 0x00000022,
- 0x0401f868, 0x592c080a, 0x592c1010, 0x82080500,
- 0xfffc0003, 0x0402004f, 0x80081104, 0x4a01a006,
- 0x08000000, 0x4805a007, 0x4809a008, 0x42000800,
- 0x00000003, 0x42001000, 0x0000dc00, 0x0201f000,
- 0x00107000, 0x42000800, 0x00000022, 0x0401f855,
- 0x592c080a, 0x592c1010, 0x82080500, 0xfffc0003,
- 0x0402003c, 0x80081104, 0x4a01a006, 0x09000000,
- 0x4805a007, 0x4809a008, 0x42000800, 0x00000003,
- 0x42001000, 0x0000dc00, 0x0201f000, 0x00107000,
- 0x42000800, 0x00000022, 0x0401f842, 0x592c080a,
- 0x592c1010, 0x592c180b, 0x82080500, 0xffff0000,
- 0x04020028, 0x4a01a006, 0x0a000000, 0x4805a207,
- 0x480da407, 0x4809a008, 0x42000800, 0x00000003,
- 0x42001000, 0x0000dc00, 0x0201f000, 0x00107000,
- 0x42000800, 0x00000022, 0x0401f82e, 0x4a01a006,
- 0x0b000000, 0x42000800, 0x00000001, 0x42001000,
- 0x0000dc00, 0x0201f000, 0x00107000, 0x59300c03,
- 0x82040580, 0x000000d8, 0x04000003, 0x0201f800,
- 0x0010032d, 0x42000800, 0x00000023, 0x0401f81d,
- 0x4a01a006, 0x02000000, 0x42000800, 0x00000001,
- 0x42001000, 0x0000dc00, 0x0201f000, 0x00107000,
- 0x592c0006, 0x4803c857, 0x480bc857, 0x0201f800,
- 0x00106102, 0x4a025a07, 0x00000003, 0x4a025c07,
- 0x00000002, 0x592c0205, 0x82000500, 0x000000ff,
- 0x82000580, 0x0000002b, 0x04020002, 0x480a5808,
- 0x0201f800, 0x000203ab, 0x0201f000, 0x00020a10,
- 0x81a5a000, 0x4a01a001, 0x0000fc0e, 0x4979a005,
- 0x4979a003, 0x4a034800, 0x00000011, 0x59307002,
- 0x82040580, 0x00000022, 0x04020007, 0x4a01a000,
- 0x2200fc0e, 0x4a01a002, 0xfe290000, 0x4839a004,
- 0x1c01f000, 0x82040580, 0x00000023, 0x02020800,
- 0x0010032d, 0x4a01a000, 0x2300fc0e, 0x4a01a002,
- 0xfe980000, 0x903871c0, 0x4839a004, 0x1c01f000,
- 0x4a034800, 0x00000011, 0x81a5a000, 0x4a01a000,
- 0x0100fc0e, 0x4a01a001, 0x0000fc0e, 0x4a01a002,
- 0xfe000008, 0x41781000, 0x42000800, 0x01000000,
- 0x592c0205, 0x82000500, 0x000000ff, 0x82000580,
- 0x0000001b, 0x04020006, 0x592c1011, 0x592c0207,
- 0x8c00051c, 0x04020002, 0x41780800, 0x4805a003,
- 0x59300002, 0x4801a004, 0x4809a005, 0x59340c08,
- 0x42001000, 0x00000100, 0x0201f800, 0x00105fef,
- 0x0201f800, 0x00105975, 0x83180d40, 0x00000038,
- 0x42001000, 0x0000c920, 0x0201f000, 0x0010701f,
- 0x59300a03, 0x82040480, 0x00000009, 0x04021004,
- 0x82040480, 0x00000001, 0x0401f002, 0x81780040,
- 0x0c021002, 0x0401f22c, 0x0010aa5e, 0x0010aa7b,
- 0x0010aadb, 0x0010ab1d, 0x0010ac81, 0x0010ac81,
- 0x0010ab7d, 0x0010aba6, 0x83380580, 0x00000013,
- 0x04000015, 0x83380580, 0x00000014, 0x0402021e,
- 0x59300c03, 0x4807c857, 0x0201f800, 0x00106102,
- 0x0201f800, 0x00108953, 0x04000009, 0x4d2c0000,
- 0x59325809, 0x4a025a07, 0x00000001, 0x497a5c07,
- 0x0201f800, 0x000203ab, 0x5c025800, 0x0201f000,
- 0x00107144, 0x59300c03, 0x82040580, 0x000000d8,
- 0x04020209, 0x0201f000, 0x00020a10, 0x83380480,
- 0x000000de, 0x04021004, 0x83380480, 0x000000db,
- 0x0401f002, 0x81780040, 0x040011ff, 0x0c01f001,
- 0x0010aa87, 0x0010aa9d, 0x0010aaa7, 0x59300c03,
- 0x82040580, 0x000000d1, 0x0400000c, 0x82040580,
- 0x000000d5, 0x040201f4, 0x42000800, 0x80000000,
- 0x4a026203, 0x00000002, 0x4a026403, 0x000000d9,
- 0x0201f000, 0x000209a3, 0x59340408, 0x48026006,
- 0x42000800, 0x80000040, 0x4a026203, 0x00000003,
- 0x0401f7f6, 0x59300c03, 0x82040480, 0x000000da,
- 0x04021004, 0x82040480, 0x000000d0, 0x0401f002,
- 0x81780040, 0x0c02101b, 0x0401f1db, 0x0201f800,
- 0x00108953, 0x0402000a, 0x59300c03, 0x82040580,
- 0x000000d2, 0x040201d4, 0x42000000, 0x0010bdab,
- 0x0401fb60, 0x0201f000, 0x00020a10, 0x4933c857,
- 0x59cc1207, 0x80081110, 0x4d2c0000, 0x59325809,
- 0x4a025a07, 0x00000003, 0x480a5c07, 0x0201f800,
- 0x000203ab, 0x5c025800, 0x0201f000, 0x00020a10,
- 0x0010abd5, 0x0010ac81, 0x0010aace, 0x0010aace,
- 0x0010ac81, 0x0010aace, 0x0010ac81, 0x0010aaca,
- 0x0010ac81, 0x0010ac15, 0x41780800, 0x0401fa83,
- 0x0201f000, 0x00020a10, 0x0201f800, 0x00108953,
- 0x04000009, 0x4d2c0000, 0x59325809, 0x4a025a07,
- 0x00000000, 0x497a5c07, 0x0201f800, 0x000203ab,
- 0x5c025800, 0x0201f000, 0x00020a10, 0x0201f800,
- 0x00108953, 0x0400003e, 0x83380580, 0x0000004a,
- 0x0400002c, 0x83380580, 0x00000049, 0x0402019e,
- 0x4d2c0000, 0x59325809, 0x592c0a05, 0x82040500,
- 0x000000ff, 0x82000580, 0x0000001b, 0x04020019,
- 0x592c0207, 0x8c00051c, 0x0402000f, 0x4a025a07,
- 0x00000040, 0x497a5c07, 0x592c0000, 0x48026009,
- 0x0201f800, 0x000203ab, 0x5c025800, 0x4a026203,
- 0x00000007, 0x59300009, 0x800001c0, 0x04020082,
- 0x1c01f000, 0x59a80073, 0x8400050a, 0x48035073,
- 0x4a026203, 0x00000002, 0x5c025800, 0x1c01f000,
- 0x4a025a07, 0x00000000, 0x497a5c07, 0x0201f800,
- 0x000203ab, 0x5c025800, 0x0201f000, 0x00020a10,
- 0x4933c857, 0x0201f800, 0x00106346, 0x0201f800,
- 0x001060e2, 0x4d2c0000, 0x59325809, 0x4a025a07,
- 0x00000001, 0x497a5c07, 0x0201f800, 0x000203ab,
- 0x5c025800, 0x0201f000, 0x00020a10, 0x4803c856,
- 0x0401f165, 0x0201f800, 0x00108953, 0x0400002c,
- 0x83380480, 0x00000054, 0x04021004, 0x83380480,
- 0x00000047, 0x0401f002, 0x81780040, 0x04001006,
- 0x4d2c0000, 0x59325809, 0x0c01f823, 0x5c025800,
- 0x1c01f000, 0x83380580, 0x000000dd, 0x04020152,
- 0x4933c857, 0x0201f800, 0x00100bd5, 0x0201f800,
- 0x00108953, 0x04000016, 0x592c0a07, 0x82040580,
- 0x00000004, 0x04020006, 0x42000800, 0x00000001,
- 0x0401fd6a, 0x0201f000, 0x00020a10, 0x4d2c0000,
- 0x59325809, 0x59cc1207, 0x80081110, 0x4a025a07,
- 0x00000003, 0x480a5c07, 0x0201f800, 0x000203ab,
- 0x5c025800, 0x0201f000, 0x00020a10, 0x4803c856,
- 0x0401f135, 0x0010ab79, 0x0010ab5a, 0x0010ac81,
- 0x0010ac81, 0x0010ac81, 0x0010ac81, 0x0010ac81,
- 0x0010ac81, 0x0010ac81, 0x0010ac81, 0x0010ac81,
- 0x0010ac81, 0x0010ab5a, 0x59300812, 0x82040500,
- 0xffff0000, 0x0402001c, 0x42001000, 0x00000000,
- 0x592c0a07, 0x82040580, 0x00000004, 0x0402000e,
- 0x82080580, 0x00000007, 0x04000007, 0x59300812,
- 0x800409c0, 0x04000004, 0x4807c857, 0x42001000,
- 0x00000015, 0x40080800, 0x0401fd38, 0x0201f000,
- 0x00020a10, 0x59300812, 0x48065808, 0x480a5a07,
- 0x497a5c07, 0x0201f800, 0x000203ab, 0x0201f000,
- 0x00020a10, 0x4803c856, 0x42001000, 0x00000007,
- 0x0401f7e4, 0x0201f800, 0x00108953, 0x0400001b,
- 0x83380580, 0x000000d9, 0x040200ff, 0x59340408,
- 0x48026006, 0x4a026403, 0x000000d9, 0x0201f800,
- 0x00020154, 0x59306809, 0x58340207, 0x8c00051c,
- 0x04020006, 0x42000800, 0x80000040, 0x4a026203,
- 0x00000003, 0x0401f005, 0x42000800, 0x80000000,
- 0x4a026203, 0x00000002, 0x4a026403, 0x000000d9,
- 0x0201f000, 0x000209a3, 0x4803c856, 0x83380580,
- 0x000000dd, 0x040200e4, 0x42001000, 0x0000800f,
- 0x42001800, 0x00000005, 0x59cc2207, 0x80102110,
- 0x0201f000, 0x001031f5, 0x83380480, 0x000000df,
- 0x04021004, 0x83380480, 0x000000d0, 0x0401f002,
- 0x81780040, 0x040010d4, 0x4933c857, 0x493bc857,
- 0x59340a08, 0x48066006, 0x0c01f001, 0x0010abc7,
- 0x0010abc3, 0x0010abc7, 0x0010abc7, 0x0010abcd,
- 0x0010abc5, 0x0010abcd, 0x0010abc7, 0x0010abc2,
- 0x0010abc2, 0x0010abc2, 0x0010abc2, 0x0010abc2,
- 0x0010abc2, 0x0010abcd, 0x0401f0bf, 0x59340408,
- 0x48026006, 0x0201f800, 0x00020154, 0x4a026203,
- 0x00000002, 0x493a6403, 0x42000800, 0x80000000,
- 0x0401f4e5, 0x0201f800, 0x00020111, 0x4a026203,
- 0x00000004, 0x493a6403, 0x42000800, 0x80000000,
- 0x0401f4dd, 0x59cc0207, 0x59cc0c07, 0x59cc1008,
- 0x59cc1809, 0x59cc220a, 0x59cc2c0a, 0x59cc300b,
- 0x4a026c00, 0x00000404, 0x48026c04, 0x48038893,
- 0x48035012, 0x48066a04, 0x480a6806, 0x480e6807,
- 0x48126a08, 0x48166c08, 0x8c183500, 0x0400000d,
- 0x59cc200d, 0x59cc280d, 0x4813c857, 0x4817c857,
- 0x59cc200c, 0x42001000, 0x0000800f, 0x42001800,
- 0x00000001, 0x901029c0, 0x0201f800, 0x001031f6,
- 0x59a80873, 0x42001800, 0x00000003, 0x84040d4e,
- 0x59342007, 0x8c183502, 0x0402000c, 0x82040d00,
- 0xffffff7b, 0x8c183504, 0x04020004, 0x42001800,
- 0x00000002, 0x0401f004, 0x42001800, 0x00000004,
- 0x84040d44, 0x59342006, 0x48075073, 0x42001000,
- 0x0000800f, 0x82102d00, 0xffff0000, 0x80142920,
- 0x82102500, 0x0000ffff, 0x0201f800, 0x001031f6,
- 0x59c80040, 0x84000534, 0x48039040, 0x0201f000,
- 0x00020a10, 0x0201f800, 0x00108953, 0x04000023,
- 0x4d2c0000, 0x59325809, 0x592c0a05, 0x82040d00,
- 0x000000ff, 0x82040580, 0x0000001b, 0x04020019,
- 0x592c0a07, 0x8c040d04, 0x04020003, 0x0201f800,
- 0x0010a709, 0x59340009, 0x4802580a, 0x8c040d06,
- 0x04020007, 0x48026806, 0x59a80073, 0x8400054c,
- 0x84000508, 0x48035073, 0x0401f002, 0x48026807,
- 0x4a025a07, 0x00000000, 0x497a5c07, 0x0201f800,
- 0x000203ab, 0x5c025800, 0x0201f000, 0x00020a10,
- 0x497a5808, 0x0401f7f7, 0x4803c856, 0x0401f046,
- 0x59300a03, 0x82040480, 0x00000009, 0x04021004,
- 0x82040480, 0x00000001, 0x0401f002, 0x81780040,
- 0x0c021002, 0x0401f03c, 0x0010ac4e, 0x0010ac81,
- 0x0010ac81, 0x0010ac81, 0x0010ac81, 0x0010ac81,
- 0x0010ac81, 0x0010ac5a, 0x83380580, 0x00000013,
- 0x04000008, 0x83380580, 0x00000014, 0x0402002e,
- 0x59300c03, 0x4807c857, 0x0201f800, 0x00106102,
- 0x0201f000, 0x00020a10, 0x83380580, 0x000000da,
- 0x04020025, 0x4933c857, 0x493bc857, 0x59cc0808,
- 0x59cc1007, 0x59a81873, 0x820c1d00, 0xfffffffc,
- 0x82040580, 0x00000000, 0x04020002, 0x840c1d42,
- 0x82080580, 0x00000000, 0x04020002, 0x840c1d40,
- 0x480f5073, 0x480fc857, 0x836c0580, 0x00000001,
- 0x0400000a, 0x4202d800, 0x00000004, 0x4a035038,
- 0x00000000, 0x497b5058, 0x42000000, 0x00000080,
- 0x0201f800, 0x00101365, 0x4a026403, 0x000000d8,
- 0x4a026203, 0x00000001, 0x42000800, 0x80000040,
- 0x0401f431, 0x4933c857, 0x493bc857, 0x59300203,
- 0x4803c857, 0x59300403, 0x4803c857, 0x42000000,
- 0x0010bdad, 0x0401f987, 0x1c01f000, 0x4933c857,
- 0x4d2c0000, 0x4d3c0000, 0x417a5800, 0x417a7800,
- 0x0201f800, 0x00108953, 0x04000003, 0x59325809,
- 0x592e7a09, 0x0401f81a, 0x82000540, 0x00000001,
- 0x5c027800, 0x5c025800, 0x1c01f000, 0x4933c857,
- 0x4d2c0000, 0x4d3c0000, 0x42027800, 0x00000040,
- 0x42000000, 0x0010bda8, 0x0401f96e, 0x417a5800,
- 0x0201f800, 0x00108953, 0x04000005, 0x59325809,
- 0x592e7a09, 0x853e7d4c, 0x493e5a09, 0x0401f804,
- 0x5c027800, 0x5c025800, 0x1c01f000, 0x0201f800,
- 0x001061b2, 0x4df00000, 0x0401f88b, 0x4803c857,
- 0x82000c80, 0x00000009, 0x04021006, 0x0c01f808,
- 0x5c03e000, 0x02000800, 0x0010619f, 0x1c01f000,
- 0x42000000, 0x00000006, 0x0401f7f9, 0x0010ad14,
- 0x0010ad15, 0x0010acce, 0x0010ad2b, 0x0010ad36,
- 0x0010acc8, 0x0010acc8, 0x0010acc8, 0x0010ad14,
- 0x4d380000, 0x417a7000, 0x0401ffb7, 0x5c027000,
- 0x0201f000, 0x00107144, 0x812e59c0, 0x04000021,
- 0x42001000, 0x00000002, 0x833c0500, 0x00000081,
- 0x04020007, 0x42001000, 0x00000006, 0x8d3e7d0c,
- 0x04020003, 0x42001000, 0x00000004, 0x592c0a07,
- 0x82040580, 0x00000004, 0x04020006, 0x40080800,
- 0x0201f800, 0x0010a8a6, 0x0201f000, 0x00107144,
- 0x480a5a07, 0x0201f800, 0x000203ab, 0x59300403,
- 0x82000580, 0x000000d0, 0x04020004, 0x5930100a,
- 0x4a001400, 0x00000707, 0x0201f000, 0x00107144,
- 0x59300c03, 0x82040580, 0x000000d7, 0x04020005,
- 0x42000800, 0x00000004, 0x0401f858, 0x0401f7f0,
- 0x8d3e7d0c, 0x040007ee, 0x5932680a, 0x59300816,
- 0x59340412, 0x80040580, 0x04020007, 0x42000000,
- 0x0010bda9, 0x0401f90f, 0x0201f800, 0x0010a709,
- 0x0401f7e3, 0x4933c857, 0x80040800, 0x48066016,
- 0x4d380000, 0x59327403, 0x83380580, 0x000000d0,
- 0x04020003, 0x4a038893, 0x00000001, 0x4a026203,
- 0x00000008, 0x0201f800, 0x00020a34, 0x5c027000,
- 0x1c01f000, 0x8d3e7d0c, 0x04000006, 0x59300407,
- 0x82000580, 0x00000013, 0x02000000, 0x0010870a,
- 0x598c000f, 0x4803c857, 0x81300580, 0x04020004,
- 0x0201f800, 0x0010642d, 0x040207ac, 0x0201f800,
- 0x0010a8e3, 0x040007a9, 0x4803c856, 0x0201f800,
- 0x001060bd, 0x040007a5, 0x0401f79e, 0x0201f800,
- 0x00108659, 0x04020004, 0x0201f800, 0x001063f6,
- 0x0402079e, 0x0201f800, 0x0010e2da, 0x80c40040,
- 0x040207f2, 0x0401f799, 0x812e59c0, 0x04000006,
- 0x0201f800, 0x0010619f, 0x0201f800, 0x00100bd5,
- 0x0401f792, 0x59300004, 0x8c00053e, 0x0400000d,
- 0x8c00050c, 0x0402000b, 0x59306c03, 0x82340580,
- 0x000000d9, 0x04020004, 0x42000000, 0x00000003,
- 0x0401f005, 0x42000000, 0x00000001, 0x0401f002,
- 0x59300203, 0x1c01f000, 0x5931d822, 0x58ef400a,
- 0x58ee580c, 0x58ec0008, 0x48074407, 0x0801f800,
- 0x1c01f000, 0x4817c857, 0x4c000000, 0x4c040000,
- 0x8c142d2a, 0x04000004, 0x5988011e, 0x80000000,
- 0x4803111e, 0x8c142d2e, 0x04000004, 0x5988011f,
- 0x80000000, 0x4803111f, 0x8c142d2c, 0x04000013,
- 0x40140000, 0x82000500, 0x00070000, 0x82000d80,
- 0x00030000, 0x0400000d, 0x82000d80, 0x00040000,
- 0x0400000a, 0x82000d80, 0x00050000, 0x04000007,
- 0x59880005, 0x80000000, 0x48031005, 0x59880120,
- 0x80000000, 0x48031120, 0x5c000800, 0x5c000000,
- 0x1c01f000, 0x4817c857, 0x4c000000, 0x4c040000,
- 0x8c142d2a, 0x04000004, 0x59880121, 0x80000000,
- 0x48031121, 0x8c142d2e, 0x04000004, 0x59880122,
- 0x80000000, 0x48031122, 0x8c142d2c, 0x04000013,
- 0x40140000, 0x82000500, 0x00070000, 0x82000d80,
- 0x00030000, 0x0400000d, 0x82000d80, 0x00040000,
- 0x0400000a, 0x82000d80, 0x00050000, 0x04000007,
- 0x59880005, 0x80000000, 0x48031005, 0x59880123,
- 0x80000000, 0x48031123, 0x5c000800, 0x5c000000,
- 0x1c01f000, 0x4807c857, 0x4c000000, 0x8c040d2c,
- 0x04000004, 0x5988010c, 0x80000000, 0x4803110c,
- 0x8c040d2a, 0x04000004, 0x5988010d, 0x80000000,
- 0x4803110d, 0x8c040d28, 0x04000004, 0x5988010e,
- 0x80000000, 0x4803110e, 0x8c040d26, 0x04000004,
- 0x5988010f, 0x80000000, 0x4803110f, 0x8c040d24,
- 0x04000004, 0x59880110, 0x80000000, 0x48031110,
- 0x8c040d22, 0x04000004, 0x59880111, 0x80000000,
- 0x48031111, 0x8c040d20, 0x04000004, 0x59880112,
- 0x80000000, 0x48031112, 0x5c000000, 0x1c01f000,
- 0x4807c857, 0x4c000000, 0x59880113, 0x80000000,
- 0x48031113, 0x5c000000, 0x1c01f000, 0x4807c857,
- 0x4c000000, 0x8c040d1c, 0x04000004, 0x59880114,
- 0x80000000, 0x48031114, 0x8c040d1a, 0x04000004,
- 0x59880115, 0x80000000, 0x48031115, 0x5c000000,
- 0x1c01f000, 0x4807c857, 0x4c000000, 0x8c040d18,
- 0x04000004, 0x59880116, 0x80000000, 0x48031116,
- 0x8c040d16, 0x04000004, 0x59880117, 0x80000000,
- 0x48031117, 0x8c040d14, 0x04000004, 0x59880118,
- 0x80000000, 0x48031118, 0x5c000000, 0x1c01f000,
- 0x4807c857, 0x4c000000, 0x8c040d10, 0x04000004,
- 0x59880119, 0x80000000, 0x48031119, 0x8c040d0c,
- 0x04000004, 0x5988011a, 0x80000000, 0x4803111a,
- 0x5c000000, 0x1c01f000, 0x4807c857, 0x4c000000,
- 0x8c040d08, 0x04000004, 0x5988011b, 0x80000000,
- 0x4803111b, 0x8c040d04, 0x04000004, 0x5988011c,
- 0x80000000, 0x4803111c, 0x5c000000, 0x1c01f000,
- 0x4807c856, 0x4c000000, 0x598800e5, 0x80000000,
- 0x480310e5, 0x5c000000, 0x1c01f000, 0x40680000,
- 0x5c036000, 0x4db00000, 0x49b3c857, 0x4c040000,
- 0x50000800, 0x80040800, 0x04001002, 0x44040000,
- 0x5c000800, 0x1c01f000, 0x480fc857, 0x4c000000,
- 0x820c0580, 0x00000000, 0x04020004, 0x42000000,
- 0x0010bcdf, 0x0401f014, 0x820c0580, 0x00001001,
- 0x04020004, 0x42000000, 0x0010bce0, 0x0401f00e,
- 0x820c0580, 0x00001002, 0x04020004, 0x42000000,
- 0x0010bce1, 0x0401f008, 0x820c0c80, 0x0000201c,
- 0x02021800, 0x0010032d, 0x820c0500, 0x0000001f,
- 0x0c01f804, 0x0401ffdb, 0x5c000000, 0x1c01f000,
- 0x0010ae54, 0x0010ae57, 0x0010ae5a, 0x0010ae5d,
- 0x0010ae60, 0x0010ae63, 0x0010ae66, 0x0010ae69,
- 0x0010ae6c, 0x0010ae6f, 0x0010ae72, 0x0010ae75,
- 0x0010ae78, 0x0010ae7b, 0x0010ae7e, 0x0010ae81,
- 0x0010ae84, 0x0010ae87, 0x0010ae8a, 0x0010ae8d,
- 0x0010ae90, 0x0010ae93, 0x0010ae96, 0x0010ae99,
- 0x0010ae9c, 0x0010ae9f, 0x0010aea2, 0x0010aea5,
- 0x42000000, 0x0010bce2, 0x1c01f000, 0x42000000,
- 0x0010bce3, 0x1c01f000, 0x42000000, 0x0010bce4,
- 0x1c01f000, 0x42000000, 0x0010bce5, 0x1c01f000,
- 0x42000000, 0x0010bce6, 0x1c01f000, 0x42000000,
- 0x0010bce7, 0x1c01f000, 0x42000000, 0x0010bce8,
- 0x1c01f000, 0x42000000, 0x0010bce9, 0x1c01f000,
- 0x42000000, 0x0010bcea, 0x1c01f000, 0x42000000,
- 0x0010bceb, 0x1c01f000, 0x42000000, 0x0010bcec,
- 0x1c01f000, 0x42000000, 0x0010bced, 0x1c01f000,
- 0x42000000, 0x0010bcee, 0x1c01f000, 0x42000000,
- 0x0010bcef, 0x1c01f000, 0x42000000, 0x0010bcf0,
- 0x1c01f000, 0x42000000, 0x0010bcf1, 0x1c01f000,
- 0x42000000, 0x0010bcf2, 0x1c01f000, 0x42000000,
- 0x0010bcf3, 0x1c01f000, 0x42000000, 0x0010bcf4,
- 0x1c01f000, 0x42000000, 0x0010bcf5, 0x1c01f000,
- 0x42000000, 0x0010bcf6, 0x1c01f000, 0x42000000,
- 0x0010bcf7, 0x1c01f000, 0x42000000, 0x0010bcf8,
- 0x1c01f000, 0x42000000, 0x0010bcf9, 0x1c01f000,
- 0x42000000, 0x0010bcfa, 0x1c01f000, 0x42000000,
- 0x0010bcfb, 0x1c01f000, 0x42000000, 0x0010bcfc,
- 0x1c01f000, 0x42000000, 0x0010bcfd, 0x1c01f000,
- 0x480fc857, 0x4c000000, 0x820c0580, 0x00000001,
- 0x04020004, 0x42000000, 0x0010bc62, 0x0401f012,
- 0x820c0580, 0x00000002, 0x04020004, 0x42000000,
- 0x0010bc63, 0x0401f00c, 0x820c0580, 0x00000003,
- 0x04020004, 0x42000000, 0x0010bc64, 0x0401f006,
- 0x820c0580, 0x00000004, 0x04020004, 0x42000000,
- 0x0010bc65, 0x0401ff4f, 0x5c000000, 0x1c01f000,
- 0x4c000000, 0x59a8021b, 0x4803c857, 0x8c000502,
- 0x04000010, 0x8c000506, 0x04000004, 0x42000000,
- 0x0010bc6d, 0x0401f012, 0x8c00050a, 0x04000004,
- 0x42000000, 0x0010bc6c, 0x0401f00d, 0x8c000508,
- 0x04000004, 0x42000000, 0x0010bc6f, 0x0401f008,
- 0x0201f800, 0x00104755, 0x04000006, 0x8c000506,
- 0x04020004, 0x42000000, 0x0010bc6e, 0x0401ff31,
- 0x5c000000, 0x1c01f000, 0x8058b1c0, 0x02000800,
- 0x0010032d, 0x5450a800, 0x8050a000, 0x8054a800,
- 0x8058b040, 0x040207fc, 0x1c01f000, 0x8058b1c0,
- 0x02000800, 0x0010032d, 0x4450a800, 0x8054a800,
- 0x8058b040, 0x040207fd, 0x1c01f000, 0x4813c857,
- 0x4817c857, 0x40140000, 0x80100480, 0x02021800,
- 0x0010032d, 0x497bc841, 0x42007800, 0x000000ff,
- 0x40100000, 0x80140480, 0x82006d00, 0xffffff00,
- 0x04020002, 0x40007800, 0x4813c840, 0x483fc842,
- 0x04011000, 0x40100000, 0x803c2400, 0x40100000,
- 0x80140580, 0x040207f3, 0x45782800, 0x1c01f000,
- 0x8058b1c0, 0x02000800, 0x0010032d, 0x50500000,
- 0x9c0001c0, 0x4400a800, 0x8050a000, 0x8054a800,
- 0x8058b040, 0x040207fa, 0x1c01f000, 0x4c000000,
- 0x59a80007, 0x8c00051c, 0x5c000000, 0x1c01f000,
- 0x0401f807, 0x42018800, 0x00000001, 0x04020003,
- 0x42018800, 0x00000000, 0x1c01f000, 0x59a80007,
- 0x8c000518, 0x1c01f000, 0x42006800, 0x00000064,
- 0x80346840, 0x04000007, 0x4a030000, 0x00000001,
- 0x40000000, 0x59807000, 0x8c387500, 0x040007f9,
- 0x1c01f000, 0x59a80006, 0x8c000516, 0x1c01f000,
- 0x00000001, 0x00000002, 0x00000004, 0x00000008,
- 0x00000010, 0x00000020, 0x00000040, 0x00000080,
- 0x00000100, 0x00000200, 0x00000400, 0x00000800,
- 0x00001000, 0x00002000, 0x00004000, 0x00008000,
- 0x00010000, 0x4a03506e, 0x00000026, 0x4a03506f,
- 0x0000001d, 0x4a035070, 0x00000001, 0x4a035071,
- 0x00000000, 0x59e00002, 0x8c00051e, 0x42000000,
- 0x7ffe00fe, 0x04000003, 0x42000000, 0x7ffe01fe,
- 0x50000800, 0x48075047, 0x80040920, 0x82040580,
- 0x0000013e, 0x0402000b, 0x59a8006d, 0x84000548,
- 0x4803506d, 0x4a03506e, 0x0000005a, 0x4a03506f,
- 0x00000058, 0x4a035071, 0x0000000f, 0x0401f045,
- 0x82040580, 0x0000013f, 0x0400000a, 0x82040580,
- 0x0000014e, 0x04000007, 0x82040580, 0x00000155,
- 0x04000004, 0x82040580, 0x00000156, 0x0402000b,
- 0x59a8006d, 0x8400054a, 0x4803506d, 0x4a03506e,
- 0x00000055, 0x4a03506f, 0x00000052, 0x4a035071,
- 0x00000009, 0x0401f02f, 0x59e00003, 0x82000500,
- 0x00030000, 0x82000580, 0x00000000, 0x04020029,
- 0x82040580, 0x00000147, 0x04000019, 0x82040580,
- 0x0000012c, 0x04000016, 0x82040580, 0x0000012a,
- 0x04000007, 0x82040580, 0x0000012b, 0x04000004,
- 0x82040580, 0x00000145, 0x0402001a, 0x59a8006d,
- 0x84000546, 0x4803506d, 0x4a03506e, 0x00000043,
- 0x4a03506f, 0x0000003e, 0x4a035070, 0x00000025,
- 0x4a035071, 0x00000001, 0x0401f00c, 0x59a8006d,
- 0x84000544, 0x4803506d, 0x4a03506e, 0x00000043,
- 0x4a03506f, 0x0000003e, 0x4a035070, 0x00000025,
- 0x4a035071, 0x00000001, 0x4a0378e4, 0x000c0000,
- 0x59a8006d, 0x8c000502, 0x04000005, 0x82000500,
- 0x00000030, 0x02000800, 0x0010032d, 0x1c01f000,
- 0x2d884b25,
- 0x00000000, 0x00000000, 0x00110000, 0x000033e5,
- 0x00000000, 0x00000000, 0x00020000, 0x00000b53,
- 0x836c0580, 0x00000003, 0x02020000, 0x001002bc,
- 0x42000000, 0x0010b912, 0x50000000, 0x800001c0,
- 0x04020a37, 0x0401f9e1, 0x0201f800, 0x0002058a,
- 0x0401fbb7, 0x0201f800, 0x0002099a, 0x0201f800,
- 0x00020814, 0x0401f7ef, 0x42007000, 0x00020b54,
- 0x58380004, 0x49781000, 0x4a001002, 0x00000000,
- 0x48087004, 0x80000d40, 0x04020006, 0x48087005,
- 0x58380000, 0x80000540, 0x0400000a, 0x1c01f000,
- 0x48080800, 0x0401f7fb, 0x42007000, 0x00020b54,
- 0x58380000, 0x80000540, 0x04000002, 0x1c01f000,
- 0x58380807, 0x800409c0, 0x02020000, 0x001005ec,
- 0x58380005, 0x80006d40, 0x04020002, 0x1c01f000,
- 0x58340000, 0x48347001, 0x80000540, 0x04020002,
- 0x48007004, 0x48007005, 0x4a03b805, 0x30000002,
- 0x58340006, 0x59dc0806, 0x4803b800, 0x58340007,
- 0x4803b801, 0x58340805, 0x58341003, 0x58340001,
- 0x48047002, 0x48087003, 0x480bb803, 0x8c000500,
- 0x04020004, 0x4a007000, 0x00000002, 0x0401f005,
- 0x4a007000, 0x00000001, 0x0201f000, 0x00100618,
- 0x58380802, 0x42001000, 0x0000ff00, 0x82040480,
- 0x0000ff00, 0x04021003, 0x40041000, 0x80000580,
- 0x48007002, 0x480bb802, 0x4a03b805, 0x10000002,
- 0x1c01f000, 0x59dc0806, 0x4a03b805, 0x20000000,
- 0x8c040d3e, 0x0400000c, 0x8c040d08, 0x02020800,
- 0x0010032d, 0x42007000, 0x00020b54, 0x58380000,
- 0x82001480, 0x00000004, 0x0c001004, 0x0201f800,
- 0x0010032d, 0x1c01f000, 0x0002002c, 0x00020072,
- 0x0002007b, 0x00100f70, 0x82040d00, 0x43000f80,
- 0x02020000, 0x00100626, 0x58380002, 0x80000540,
- 0x0400000a, 0x0201f000, 0x00100618, 0x82040d00,
- 0x43000f80, 0x02020000, 0x00100626, 0x58380002,
- 0x80000540, 0x040207cf, 0x58386001, 0x58300008,
- 0x4a006002, 0x00000100, 0x4a007000, 0x00000000,
- 0x80001540, 0x040007a3, 0x58300006, 0x58300805,
- 0x80040400, 0x58300807, 0x48006006, 0x82040c40,
- 0x00000000, 0x48046007, 0x4030d000, 0x0809f800,
- 0x0401f792, 0x59b800ea, 0x82000d00, 0xf0000038,
- 0x02020000, 0x00100763, 0x8c000510, 0x02000000,
- 0x00100762, 0x59ba60e0, 0x81300182, 0x04021042,
- 0x04002028, 0x8532653e, 0x59300407, 0x82000580,
- 0x00000003, 0x04020020, 0x59300203, 0x82000580,
- 0x00000004, 0x0402001c, 0x59325809, 0x59300004,
- 0x4a025a05, 0x00000103, 0x497a580a, 0x8c00053e,
- 0x04020010, 0x0401fafa, 0x5932680a, 0x0201f800,
- 0x00020a10, 0x5934000f, 0x5934140b, 0x80081040,
- 0x04001002, 0x480a6c0b, 0x80000540, 0x04020a6c,
- 0x59b800ea, 0x8c000510, 0x040207df, 0x1c01f000,
- 0x0201f800, 0x001064f2, 0x040007ef, 0x0201f000,
- 0x00100758, 0x42027000, 0x00000055, 0x0401f022,
- 0x83326500, 0x3fffffff, 0x59300407, 0x82000580,
- 0x00000003, 0x04020011, 0x59325809, 0x5932680a,
- 0x4a025a05, 0x00000103, 0x497a580a, 0x0401fad8,
- 0x0201f800, 0x00020a10, 0x5934000f, 0x5934140b,
- 0x80081040, 0x04001002, 0x480a6c0b, 0x80000540,
- 0x04020a4b, 0x0401f7df, 0x42027000, 0x00000054,
- 0x0401f009, 0x83300500, 0x60000000, 0x04000016,
- 0x81326580, 0x8000013a, 0x82000400, 0x00100769,
- 0x50027000, 0x59300c07, 0x82040580, 0x00000002,
- 0x02000000, 0x00100758, 0x59300004, 0x8c00053e,
- 0x04020004, 0x0201f800, 0x00020a34, 0x0401f7c9,
- 0x0201f800, 0x001064f2, 0x040007fb, 0x0201f000,
- 0x00100758, 0x83300500, 0x1f000000, 0x02000000,
- 0x0010075b, 0x81326580, 0x80000130, 0x82000c80,
- 0x00000014, 0x02021800, 0x0010032d, 0x1201f000,
- 0x0010076d, 0x82000500, 0xf0000000, 0x82040d00,
- 0x0fffffff, 0x80040d40, 0x4807c857, 0x59b800ea,
- 0x8c000516, 0x02020000, 0x0010086f, 0x480770e1,
- 0x1c01f000, 0x59325809, 0x412c7000, 0x58380a05,
- 0x82040500, 0x0000000f, 0x82000c00, 0x00100e3a,
- 0x50044000, 0x0c01f001, 0x00100afd, 0x00100afd,
- 0x0002012a, 0x00100afd, 0x00100afd, 0x00100afd,
- 0x00100afd, 0x00100afd, 0x0002013a, 0x00100b26,
- 0x00100afd, 0x00100aff, 0x00100b14, 0x00100afd,
- 0x00100afd, 0x00100afd, 0x5838040b, 0x8c000500,
- 0x02000800, 0x0010032d, 0x50200000, 0x80387c00,
- 0x583c1002, 0x583c2800, 0x583c2001, 0x58380a08,
- 0x58383010, 0x59303808, 0x58384c09, 0x5838000e,
- 0x48026013, 0x0401f010, 0x5838020b, 0x8c000502,
- 0x02000000, 0x00100afd, 0x50200000, 0x80387c00,
- 0x583c2800, 0x583c2001, 0x583c1002, 0x592c0a08,
- 0x592c4c09, 0x592c3010, 0x59303808, 0x497a6013,
- 0x497a6014, 0x4816600f, 0x48126010, 0x480a6011,
- 0x481a6012, 0x80040840, 0x4806600e, 0x02020000,
- 0x00100b53, 0x841c3d40, 0x481e6008, 0x1c01f000,
- 0x4d2c0000, 0x59325809, 0x592c0a05, 0x4807c857,
- 0x82040d00, 0x000000ff, 0x82040500, 0x0000000f,
- 0x1201f000, 0x00100ca7, 0x41787800, 0x59325809,
- 0x592c0c0b, 0x8c040d02, 0x02000000, 0x00100ce8,
- 0x592c000e, 0x592c1010, 0x592c0a05, 0x480a6012,
- 0x48026013, 0x48026014, 0x412c3000, 0x82040500,
- 0x0000000f, 0x82000400, 0x00100e3a, 0x50003800,
- 0x501c0000, 0x592c1a08, 0x4802600b, 0x481a600c,
- 0x481e600d, 0x480e600e, 0x843c7d4a, 0x403c1000,
- 0x1c01f000, 0x592c0a05, 0x497a6013, 0x41787800,
- 0x592c1a08, 0x82040500, 0x0000000f, 0x82000400,
- 0x00100e3a, 0x50004000, 0x50200000, 0x4802600b,
- 0x492e600c, 0x4822600d, 0x480e600e, 0x483e6004,
- 0x80000580, 0x1c01f000, 0x59e00004, 0x8c00050e,
- 0x040206d1, 0x1c01f000, 0x000201e1, 0x000201ce,
- 0x000201ce, 0x000201ce, 0x000201ce, 0x000201ce,
- 0x000201ce, 0x000201ce, 0x000201ce, 0x000201ce,
- 0x000201ce, 0x000201ce, 0x000201ce, 0x000201ce,
- 0x000201ce, 0x000201ce, 0x000201ce, 0x000201ce,
- 0x000201ce, 0x000201ce, 0x000201ce, 0x000201ce,
- 0x000201ce, 0x000201ce, 0x000201ce, 0x000201ce,
- 0x000201ce, 0x000201ce, 0x000201ce, 0x000201ce,
- 0x000201ce, 0x000201ce, 0x000201ce, 0x000201ce,
- 0x000201ce, 0x000201ce, 0x000201ce, 0x000201ce,
- 0x000201ce, 0x000201ce, 0x000201ce, 0x000201ce,
- 0x000201ce, 0x000201ce, 0x000201ce, 0x000201ce,
- 0x000201ce, 0x000201ce, 0x000201ce, 0x000201ce,
- 0x000201ce, 0x000201ce, 0x000201ce, 0x000201ce,
- 0x000201ce, 0x000201ce, 0x000201ce, 0x000201ce,
- 0x000201ce, 0x000201ce, 0x000201ce, 0x000201ce,
- 0x000201ce, 0x000201ce, 0x4c000000, 0x4df00000,
- 0x4203e000, 0xb0100000, 0x41f00000, 0x81fe1500,
- 0x8d0a1512, 0x02020800, 0x001011b8, 0x8d0a1518,
- 0x02020800, 0x000209bd, 0x8d0a151a, 0x04020eba,
- 0x83080500, 0x00000d00, 0x04020804, 0x5c03e000,
- 0x5c000000, 0x1801f000, 0x8d0a1516, 0x02020800,
- 0x0010100c, 0x8d0a1514, 0x04020fa4, 0x8d0a1508,
- 0x02020800, 0x00100ed2, 0x8d0a1500, 0x02020000,
- 0x0002090c, 0x1c01f000, 0x42000000, 0x0010b918,
- 0x50000000, 0x8c000504, 0x04000014, 0x42000000,
- 0x0010b918, 0x50000000, 0x8c000502, 0x04020002,
- 0x1c01f000, 0x4df00000, 0x4203e000, 0x50000000,
- 0x42034000, 0x0010b8fa, 0x59a0001e, 0x59a1d806,
- 0x84000502, 0x4803401e, 0x58ec0008, 0x0801f800,
- 0x5c03e000, 0x1c01f000, 0x04027002, 0x04026002,
- 0x1c01f000, 0x4df00000, 0x4203e000, 0x50000000,
- 0x59e00020, 0x82000d80, 0x00000045, 0x04000004,
- 0x82000d80, 0x00000044, 0x04020008, 0x4803c857,
- 0x42000800, 0x00020b54, 0x58040800, 0x82040d80,
- 0x00000000, 0x0402001d, 0x0201f800, 0x0010056f,
- 0x0400001a, 0x412dd800, 0x48efc857, 0x0201f800,
- 0x001032e0, 0x42034000, 0x0010b8fa, 0x49a1d80a,
- 0x48ef4006, 0x59a0001e, 0x84000544, 0x4803401e,
- 0x59e00020, 0x4803c857, 0x59e00021, 0x4803c857,
- 0x59e00022, 0x4803c857, 0x59e00023, 0x4803c857,
- 0x59e00024, 0x4803c857, 0x0201f800, 0x00101c15,
- 0x0201f800, 0x00101c34, 0x5c03e000, 0x1c01f000,
- 0x0201f800, 0x0010af26, 0x040007fe, 0x4203e000,
- 0x30000001, 0x4203e000, 0x40000000, 0x42000800,
- 0x00007a12, 0x45780800, 0x0401f7ff, 0x4da00000,
- 0x4df00000, 0x4203e000, 0x50000000, 0x04006050,
- 0x42034000, 0x0010b8fa, 0x59a01018, 0x59a01819,
- 0x800c19c0, 0x0402000a, 0x59a0381c, 0x801c39c0,
- 0x02000800, 0x0010032d, 0x49a3c857, 0x481fc857,
- 0x59a0041d, 0x801c3c00, 0x0401f00c, 0x59a0041a,
- 0x82000400, 0x00000002, 0x4803441a, 0x82000c80,
- 0x00000014, 0x04001003, 0x497b441a, 0x41780000,
- 0x59a03817, 0x801c3c00, 0x80081040, 0x480b4018,
- 0x581c0200, 0x4803c021, 0x581c0401, 0x4803c022,
- 0x581c0201, 0x4803c023, 0x581c0400, 0x4803c020,
- 0x900001c0, 0x82000540, 0x00000012, 0x4803c011,
- 0x4a03c017, 0x00000000, 0x4203e000, 0x30000001,
- 0x800c19c0, 0x04000007, 0x800c1840, 0x480f4019,
- 0x0402001f, 0x497b441a, 0x497b421a, 0x0401f01c,
- 0x800811c0, 0x0402000b, 0x4d2c0000, 0x59a2581c,
- 0x0201f800, 0x00100580, 0x5c025800, 0x497b401c,
- 0x497b401b, 0x497b441d, 0x497b421d, 0x0401f010,
- 0x59a0041d, 0x82000400, 0x00000002, 0x82000c80,
- 0x00000013, 0x4803441d, 0x04001009, 0x4d2c0000,
- 0x59a2581c, 0x592c3814, 0x481f401c, 0x497b441d,
- 0x0201f800, 0x00100580, 0x5c025800, 0x5c03e000,
- 0x5c034000, 0x1c01f000, 0x830c0500, 0x00000003,
- 0x02020000, 0x00103b18, 0x59340400, 0x82000580,
- 0x00000606, 0x02020000, 0x00103aea, 0x5934000d,
- 0x80027d40, 0x02020000, 0x00103b23, 0x0401f803,
- 0x80000580, 0x1c01f000, 0x5934000f, 0x59341203,
- 0x80080540, 0x0402005f, 0x5934000b, 0x80001120,
- 0x82000500, 0x0000ffff, 0x80080480, 0x04021059,
- 0x0201f800, 0x000209ee, 0x04000052, 0x592c0407,
- 0x4936600a, 0x492e6009, 0x4a026407, 0x00000003,
- 0x4a026403, 0x00000040, 0x80081000, 0x480a6c0b,
- 0x800000c2, 0x800010c4, 0x80081400, 0x592c0809,
- 0x592c180a, 0x592c020b, 0x480a6006, 0x48066018,
- 0x480e6019, 0x8c000502, 0x0400002a, 0x4a026203,
- 0x00000004, 0x592c0208, 0x80000040, 0x0402001a,
- 0x59a8006e, 0x80000040, 0x040207ff, 0x592c0205,
- 0x82000500, 0x000000ff, 0x82000580, 0x00000018,
- 0x04020011, 0x592c1810, 0x59300008, 0x82000540,
- 0x00000091, 0x480e6012, 0x48026008, 0x42000000,
- 0x80080004, 0x48026004, 0x59bc00ea, 0x8c000516,
- 0x040207fe, 0x83300400, 0x20000000, 0x480378e1,
- 0x1c01f000, 0x0401fe28, 0x59300008, 0x8400054e,
- 0x48026008, 0x592c1a05, 0x820c1d00, 0x000000ff,
- 0x820c0580, 0x00000048, 0x04000012, 0x0401f7ec,
- 0x8c000500, 0x04020e84, 0x4a026203, 0x00000002,
- 0x59a8006f, 0x80000040, 0x040207ff, 0x592c1a05,
- 0x820c1d00, 0x000000ff, 0x820c0580, 0x00000018,
- 0x040007df, 0x820c0580, 0x00000048, 0x040207dc,
- 0x42000800, 0x80000804, 0x0201f000, 0x000209a3,
- 0x800811c0, 0x04020003, 0x4a026a03, 0x00000001,
- 0x59340010, 0x492e6810, 0x80000d40, 0x04020008,
- 0x492e680f, 0x592c0407, 0x800000c2, 0x800018c4,
- 0x800c0400, 0x48025804, 0x1c01f000, 0x492c0800,
- 0x0401f7f9, 0x83440c80, 0x00000800, 0x04021009,
- 0x83440400, 0x0010b080, 0x50000000, 0x80000540,
- 0x04000004, 0x40026800, 0x80000580, 0x1c01f000,
- 0x82000540, 0x00000001, 0x1c01f000, 0x59340203,
- 0x80000540, 0x0402004b, 0x4d300000, 0x4d2c0000,
- 0x5934000f, 0x80025d40, 0x04000044, 0x0201f800,
- 0x000209ee, 0x0400003f, 0x592c0000, 0x4802680f,
- 0x80000540, 0x04020002, 0x48026810, 0x592c2a05,
- 0x4936600a, 0x82142d00, 0x000000ff, 0x82140580,
- 0x00000012, 0x04000038, 0x492e6009, 0x80081000,
- 0x480a6c0b, 0x4a026407, 0x00000003, 0x4a026403,
- 0x00000040, 0x592c0004, 0x497a5804, 0x48026006,
- 0x592c0809, 0x592c180a, 0x592c020b, 0x48066018,
- 0x480e6019, 0x8c000502, 0x02000000, 0x00103fad,
- 0x4a026203, 0x00000004, 0x592c0208, 0x80000040,
- 0x02020000, 0x00103fa0, 0x82140580, 0x00000018,
- 0x02020000, 0x00103fa0, 0x592c1810, 0x59300008,
- 0x82000540, 0x00000091, 0x480e6012, 0x48026008,
- 0x42000000, 0x80080004, 0x48026004, 0x59bc00ea,
- 0x8c000516, 0x040207fe, 0x83300400, 0x20000000,
- 0x480378e1, 0x5934000b, 0x80001120, 0x82000500,
- 0x0000ffff, 0x80080480, 0x040017be, 0x0401f003,
- 0x4a026a03, 0x00000001, 0x5c025800, 0x5c026000,
- 0x1c01f000, 0x497a5800, 0x4932580a, 0x4a026407,
- 0x00000006, 0x4a026203, 0x00000007, 0x0401f802,
- 0x0401f7ed, 0x592c020d, 0x48026202, 0x59a80069,
- 0x8c000510, 0x02020000, 0x00103fd3, 0x8d0e1d0e,
- 0x02020000, 0x00103fcf, 0x8d0e1d04, 0x02020000,
- 0x00103fcb, 0x59340200, 0x8c000518, 0x02020000,
- 0x00103fc7, 0x4a025a07, 0x00000000, 0x8c000508,
- 0x02020000, 0x00103fc3, 0x492e6009, 0x4d3c0000,
- 0x417a7800, 0x0201f800, 0x00020912, 0x5c027800,
- 0x1c01f000, 0x58040001, 0x49680800, 0x49780801,
- 0x815eb800, 0x4006d000, 0x80000d40, 0x040207fa,
- 0x497a5801, 0x59c80000, 0x82000540, 0x00001200,
- 0x48039000, 0x1c01f000, 0x59980013, 0x48032823,
- 0x59d8010b, 0x48033014, 0x1c01f000, 0x592c0405,
- 0x8c00051e, 0x02020000, 0x0010452b, 0x497a5800,
- 0x8d0e1d26, 0x0402000e, 0x0402d007, 0x592c0001,
- 0x492fb107, 0x80000d40, 0x04020fe3, 0x0400e0cd,
- 0x1c01f000, 0x0400e8cb, 0x0400d7f9, 0x42000000,
- 0x0010bc76, 0x0201f800, 0x0010ae13, 0x0401f916,
- 0x0400d921, 0x0400e0c3, 0x59d80105, 0x82000d00,
- 0x00018780, 0x04020130, 0x1c01f000, 0x59980011,
- 0x0c01f001, 0x000203cd, 0x000203ce, 0x000203d9,
- 0x00020411, 0x1c01f000, 0x4df00000, 0x4203e000,
- 0x50000000, 0x0402692f, 0x04006003, 0x8d0e1d20,
- 0x0402099a, 0x8d0e1d26, 0x0402090b, 0x5c03e000,
- 0x1c01f000, 0x4df00000, 0x4203e000, 0x50000000,
- 0x59940023, 0x80000540, 0x04002013, 0x04000008,
- 0x59980012, 0x82000580, 0x00000005, 0x0400000e,
- 0x59a80050, 0x81640580, 0x0402000b, 0x59d8010b,
- 0x59d8110a, 0x80080d80, 0x0400001f, 0x59980814,
- 0x80040d80, 0x04000013, 0x59980813, 0x48072823,
- 0x48033014, 0x0400e947, 0x8d0e1d24, 0x04020005,
- 0x8d0e1d26, 0x040208ec, 0x5c03e000, 0x1c01f000,
- 0x59d8110a, 0x59d8010a, 0x80080580, 0x040207fd,
- 0x59d8010b, 0x80080580, 0x0400000b, 0x040067f5,
- 0x0400600e, 0x800810e0, 0x82081540, 0x00000013,
- 0x480bc011, 0x4a03c017, 0x00000001, 0x4203e000,
- 0x30000001, 0x4a032823, 0xffff0000, 0x850e1d24,
- 0x0400e92c, 0x0401f7e7, 0x850e1d64, 0x0400e929,
- 0x0401f7e4, 0x4df00000, 0x4203e000, 0x50000000,
- 0x59b800e4, 0x8c000518, 0x0402001c, 0x830c0500,
- 0x00140000, 0x0402001c, 0x59940023, 0x80000540,
- 0x0400200d, 0x04000018, 0x59980012, 0x82000580,
- 0x00000005, 0x04000008, 0x59a80050, 0x81640580,
- 0x04020005, 0x59a8004e, 0x59a8084d, 0x80040580,
- 0x0400000c, 0x0400e90f, 0x04006004, 0x8d0e1d24,
- 0x0402000a, 0x0401f923, 0x8d0e1d26, 0x040208b2,
- 0x5c03e000, 0x1c01f000, 0x4a0370e4, 0x00002000,
- 0x850e1d68, 0x04006041, 0x59d8090a, 0x59d8010a,
- 0x80041580, 0x040207fd, 0x59d8190b, 0x800c1580,
- 0x59981014, 0x480f3014, 0x0400002a, 0x0401f839,
- 0x59980015, 0x483b3015, 0x0400000d, 0x8d0e1d28,
- 0x0402001e, 0x80380580, 0x04020004, 0x40080000,
- 0x800c0580, 0x04000019, 0x59980013, 0x48032823,
- 0x830e1d00, 0xffebffff, 0x0401f7e0, 0x8d0e1d28,
- 0x04020004, 0x40080000, 0x800c0580, 0x040207f7,
- 0x800408e0, 0x82040d40, 0x00000013, 0x42001000,
- 0x00000001, 0x4807c011, 0x480bc017, 0x4203e000,
- 0x30000001, 0x4a032823, 0xffff0000, 0x830e1d00,
- 0xffebffff, 0x0401f7cd, 0x800408e0, 0x82040d40,
- 0x0000001d, 0x42001000, 0x00000000, 0x0401f7f2,
- 0x0401f810, 0x59980015, 0x483b3015, 0x040007f2,
- 0x80380580, 0x04000003, 0x8d0e1d28, 0x040007db,
- 0x912801c0, 0x82000d40, 0x0000001c, 0x42001000,
- 0x00000000, 0x0401f7e4, 0x850e1d64, 0x0401f7b2,
- 0x59e0000f, 0x59e0680f, 0x80346d80, 0x040207fd,
- 0x40025000, 0x59e00010, 0x59e07010, 0x80387580,
- 0x040207fd, 0x40007000, 0x81280580, 0x1c01f000,
- 0x59d81108, 0x835c0480, 0x00000020, 0x0400100f,
- 0x0402b00d, 0x480bb007, 0x0400e7fa, 0x59d80105,
- 0x82000500, 0x00018780, 0x04020067, 0x8d0e1d22,
- 0x04000012, 0x59940023, 0x80000540, 0x04002713,
- 0x1c01f000, 0x0400f00a, 0x49681000, 0x400ad000,
- 0x815eb800, 0x59c80000, 0x82000540, 0x00001200,
- 0x48039000, 0x0402e7ee, 0x0401f7e6, 0x480ba807,
- 0x0402e7eb, 0x0401f7e3, 0x04006014, 0x850e1d24,
- 0x59d8010a, 0x59d8090a, 0x80040580, 0x040207fd,
- 0x59d8010b, 0x80040580, 0x0400000b, 0x800408e0,
- 0x8d0e1d20, 0x0402000b, 0x82040d40, 0x00000013,
- 0x4807c011, 0x4a03c017, 0x00000001, 0x4203e000,
- 0x30000001, 0x1c01f000, 0x850e1d64, 0x1c01f000,
- 0x59e0000f, 0x59b818e4, 0x59e0100f, 0x80081580,
- 0x040207fc, 0x8c0c1d0c, 0x040207fa, 0x81281580,
- 0x0400000e, 0x40025000, 0x820c0500, 0x04000000,
- 0x850e1d34, 0x810e1d40, 0x82040d40, 0x0000001d,
- 0x4807c011, 0x4a03c017, 0x00000000, 0x4203e000,
- 0x30000001, 0x1c01f000, 0x40001000, 0x400c0000,
- 0x810c0580, 0x8c000534, 0x40080000, 0x040207ee,
- 0x0401f7da, 0x59980816, 0x592c0001, 0x492f3016,
- 0x800409c0, 0x04000005, 0x492c0800, 0x80000d40,
- 0x040206bd, 0x1c01f000, 0x492f3017, 0x850e1d66,
- 0x0401f7fb, 0x0402d00c, 0x59980817, 0x58040000,
- 0x4807b107, 0x80000d40, 0x04020005, 0x48033016,
- 0x850e1d26, 0x48033017, 0x1c01f000, 0x0400d7f8,
- 0x0401f7fd, 0x59d80105, 0x82000500, 0x00018780,
- 0x04020005, 0x42000000, 0x0010bc76, 0x0201f000,
- 0x0010ae13, 0x4803c857, 0x485fc857, 0x8c00050e,
- 0x02020800, 0x00100322, 0x4203e000, 0x50000000,
- 0x4200b800, 0x00008004, 0x0201f000, 0x00100332,
- 0x0400e784, 0x59d80105, 0x82000500, 0x00018780,
- 0x040207f1, 0x8d0e1d24, 0x04020002, 0x1c01f000,
- 0x59d8010a, 0x59d8090a, 0x80040580, 0x040207fd,
- 0x850e1d24, 0x59d8010b, 0x80040580, 0x0400000b,
- 0x800408e0, 0x8d0e1d20, 0x04020009, 0x82040d40,
- 0x00000013, 0x4807c011, 0x4a03c017, 0x00000001,
- 0x4203e000, 0x30000001, 0x1c01f000, 0x59e0000f,
- 0x59b818e4, 0x59e0100f, 0x80081580, 0x040207fc,
- 0x8c0c1d0c, 0x040207fa, 0x81281580, 0x0400000e,
- 0x40025000, 0x820c0500, 0x04000000, 0x850e1d34,
- 0x810e1d40, 0x82040d40, 0x0000001d, 0x4807c011,
- 0x4a03c017, 0x00000000, 0x4203e000, 0x30000001,
- 0x1c01f000, 0x40001000, 0x400c0000, 0x810c0580,
- 0x8c000534, 0x40080000, 0x040207ee, 0x0401f7dc,
- 0x59da5908, 0x496a5800, 0x412ed000, 0x815eb800,
- 0x0400e7fc, 0x59c80000, 0x82000540, 0x00001200,
- 0x48039000, 0x59d8090b, 0x59980014, 0x48073014,
- 0x80040480, 0x04020004, 0x59940023, 0x80000540,
- 0x04022003, 0x59980813, 0x48072823, 0x59d80105,
- 0x82000500, 0x00018780, 0x040207a7, 0x1c01f000,
- 0x59981015, 0x59e00010, 0x59e00810, 0x80041d80,
- 0x040207fd, 0x80080580, 0x0400000d, 0x48073015,
- 0x59e0000f, 0x59e0100f, 0x80081d80, 0x040207fd,
- 0x81280580, 0x0400000d, 0x400a5000, 0x40080000,
- 0x80040580, 0x04020645, 0x1c01f000, 0x59e0000f,
- 0x59e0100f, 0x80081d80, 0x040207fd, 0x81280580,
- 0x040007fa, 0x400a5000, 0x59940023, 0x80000540,
- 0x040027f3, 0x1c01f000, 0x59e0000f, 0x59b818e4,
- 0x59e0100f, 0x80080d80, 0x040207fc, 0x8c0c1d0c,
- 0x040207fa, 0x81280580, 0x04020006, 0x400c0000,
- 0x810c0580, 0x8c000534, 0x04020002, 0x1c01f000,
- 0x820c0500, 0x04000000, 0x850e1d34, 0x810e1d40,
- 0x400a5000, 0x900811c0, 0x82081540, 0x0000001c,
- 0x480bc011, 0x4a03c017, 0x00000000, 0x4203e000,
- 0x30000001, 0x1c01f000, 0x41700000, 0x0c01f001,
- 0x00104c30, 0x00020595, 0x00104c30, 0x0002065b,
- 0x00104c2e, 0x00104c2e, 0x00104c2e, 0x00104c2e,
- 0x0010510d, 0x04010036, 0x59980004, 0x80000540,
- 0x0402003b, 0x0402c01c, 0x4202f800, 0x00000010,
- 0x4df00000, 0x4203e000, 0x50000000, 0x49db3003,
- 0x59da5808, 0x592c2a05, 0x497a5800, 0x497a5801,
- 0x82140500, 0x000000ff, 0x82000c80, 0x0000007a,
- 0x04021035, 0x0c01f838, 0x5c03e000, 0x817ef840,
- 0x04000009, 0x836c0580, 0x00000003, 0x04020006,
- 0x83700580, 0x00000001, 0x04020010, 0x0401001a,
- 0x0400c7e8, 0x0400f973, 0x0400b15d, 0x59d40005,
- 0x82000500, 0x43018780, 0x02020000, 0x00105081,
- 0x59d80005, 0x82000500, 0x43018780, 0x02020000,
- 0x00105088, 0x1c01f000, 0x83700580, 0x00000003,
- 0x04000897, 0x83700580, 0x00000001, 0x040207ee,
- 0x04010005, 0x0400c7d3, 0x0401f7eb, 0x4202f800,
- 0x00000010, 0x4df00000, 0x4203e000, 0x50000000,
- 0x49d73003, 0x59d65808, 0x0401f7cf, 0x4df00000,
- 0x4203e000, 0x50000000, 0x40025800, 0x592c2a05,
- 0x497b3003, 0x497b3004, 0x4202f800, 0x00000010,
- 0x0401f7c8, 0x0201f800, 0x00104c83, 0x5c03e000,
- 0x0401f7d5, 0x00104c83, 0x00104c83, 0x00104c83,
- 0x00104c83, 0x00104d1e, 0x00104c83, 0x00104c83,
- 0x00104c83, 0x00104c83, 0x00104c83, 0x00104c93,
- 0x00104c83, 0x00104c83, 0x00104c83, 0x00104d47,
- 0x00104c83, 0x00104c83, 0x00104c83, 0x000206b7,
- 0x00104c83, 0x00104ef6, 0x00104c83, 0x00104c83,
- 0x00104c83, 0x0002067d, 0x00104c83, 0x00104c83,
- 0x0010a716, 0x00104c83, 0x00104c83, 0x00104c83,
- 0x00104c83, 0x00104c83, 0x00104c83, 0x00104c83,
- 0x00104c83, 0x00104c83, 0x00104c83, 0x00104c83,
- 0x00104c83, 0x00104c83, 0x00104cc3, 0x00104c83,
- 0x0010a7ab, 0x00104c83, 0x00104c83, 0x00104c83,
- 0x00104c83, 0x00104c83, 0x00104c83, 0x00104c83,
- 0x0010500d, 0x00104c83, 0x00104c83, 0x00104c83,
- 0x00104c83, 0x00104c83, 0x0010505f, 0x00104c83,
- 0x00104cba, 0x00104c83, 0x00104fd5, 0x00104c83,
- 0x00104c83, 0x00104c83, 0x00104c83, 0x00104c83,
- 0x00104c83, 0x00104c83, 0x00104fa3, 0x00104c83,
- 0x00104fa3, 0x001050d2, 0x00104c83, 0x00104c83,
- 0x00104c83, 0x00104c83, 0x00104c83, 0x00104c83,
- 0x00104c83, 0x00104c83, 0x00104c83, 0x00104f65,
- 0x00105097, 0x00104c83, 0x001050c5, 0x00104c83,
- 0x00104c83, 0x00104c83, 0x00104c83, 0x00104c83,
- 0x00104c83, 0x00104c83, 0x00104c83, 0x00104c83,
- 0x00104c83, 0x00104c83, 0x00104c83, 0x00104c83,
- 0x00104c83, 0x00104c83, 0x00104c83, 0x00104c83,
- 0x00104c83, 0x00104c83, 0x00104c83, 0x00104c83,
- 0x00104c83, 0x00104c83, 0x00104c83, 0x00104c83,
- 0x00104c83, 0x00104c83, 0x00104c83, 0x00104c83,
- 0x00104c83, 0x00104c83, 0x00104c83, 0x00104c83,
- 0x00104c83, 0x00104c83, 0x00104c83, 0x4df00000,
- 0x4203e000, 0x50000000, 0x59981003, 0x800811c0,
- 0x02000000, 0x00104c35, 0x58080005, 0x82000d00,
- 0x43018780, 0x02020000, 0x00105088, 0x8c000508,
- 0x02000000, 0x00104c32, 0x580a5808, 0x592c0205,
- 0x497a5800, 0x497a5801, 0x82000500, 0x000000ff,
- 0x82000c80, 0x0000004b, 0x02021000, 0x00104c31,
- 0x1201f800, 0x00104c38, 0x5c03e000, 0x83700580,
- 0x00000003, 0x040007e2, 0x0400f8ae, 0x0400b098,
- 0x1c01f000, 0x80140110, 0x80000040, 0x0400000b,
- 0x02001000, 0x00104c8b, 0x4a033006, 0x0002068a,
- 0x48033000, 0x492f3001, 0x492f3002, 0x4202e000,
- 0x00000003, 0x1c01f000, 0x592e8a07, 0x83440c80,
- 0x000007f0, 0x02021000, 0x00104c9b, 0x8d0e1d0e,
- 0x02020000, 0x00104ccc, 0x83440400, 0x0010b080,
- 0x50000000, 0x80026d40, 0x02000000, 0x00104cdc,
- 0x59340002, 0x592c0811, 0x80040580, 0x82000500,
- 0x00ffffff, 0x02020000, 0x00104c9b, 0x5934000a,
- 0x8c00052e, 0x02020000, 0x00104ce6, 0x0201f800,
- 0x0002029a, 0x02020000, 0x00104cdf, 0x1c01f000,
- 0x59980802, 0x59980000, 0x48065800, 0x492c0801,
- 0x492f3002, 0x80000040, 0x48033000, 0x04000002,
- 0x1c01f000, 0x599a5801, 0x59980006, 0x4202e000,
- 0x00000001, 0x0801f800, 0x1c01f000, 0x80140110,
- 0x02000000, 0x00104c8b, 0x80000040, 0x0402000b,
- 0x592c240b, 0x8c102504, 0x0400000c, 0x592c0208,
- 0x82000c80, 0x00001001, 0x02021000, 0x00104c9b,
- 0x0201f000, 0x001050e7, 0x4a033006, 0x000206c9,
- 0x0401f7bc, 0x592c240b, 0x592e8a07, 0x417a7800,
- 0x83440480, 0x00000800, 0x02021000, 0x00104e80,
- 0x83440400, 0x0010b080, 0x50000000, 0x80026d40,
- 0x02000000, 0x00104e80, 0x59340002, 0x592c0809,
- 0x80040580, 0x82000500, 0x00ffffff, 0x02020000,
- 0x00104c9b, 0x592e600a, 0x497a5809, 0x83300480,
- 0x0010f694, 0x02001000, 0x00104e9d, 0x41540000,
- 0x81300480, 0x02021000, 0x00104e46, 0x592c0a0d,
- 0x59300202, 0x80040580, 0x02020000, 0x00104e9d,
- 0x4936600a, 0x8c10251c, 0x02020000, 0x00104e34,
- 0x59a80069, 0x8c000510, 0x02020000, 0x00104ec0,
- 0x8d0e1d0e, 0x02020000, 0x00104e19, 0x8d0e1d04,
- 0x02020000, 0x00104eb1, 0x59340200, 0x8c000518,
- 0x02020000, 0x00104e98, 0x59300c07, 0x82040580,
- 0x00000006, 0x02020000, 0x00104ec5, 0x8c102508,
- 0x02020000, 0x00104e0e, 0x59300809, 0x497a5804,
- 0x4a025a07, 0x00000000, 0x800409c0, 0x02020000,
- 0x00104e14, 0x59300415, 0x8c000516, 0x02020000,
- 0x00104ea2, 0x492e6009, 0x0401f200, 0x4df00000,
- 0x4203e000, 0x50000000, 0x0402b00b, 0x835c0480,
- 0x00000020, 0x0400100d, 0x815eb840, 0x416a5800,
- 0x592ed000, 0x492fb007, 0x497a5800, 0x497a5801,
- 0x0400b7f7, 0x59d80005, 0x82000500, 0x43018780,
- 0x02020000, 0x00105088, 0x5c03e000, 0x1c01f000,
- 0x4df00000, 0x4203e000, 0x50000000, 0x0402f00b,
- 0x835c0480, 0x00000020, 0x0400100d, 0x815eb840,
- 0x416a5800, 0x592ed000, 0x492fa807, 0x497a5800,
- 0x497a5801, 0x0400f7f7, 0x59d40005, 0x82000500,
- 0x43018780, 0x02020000, 0x00105081, 0x5c03e000,
- 0x1c01f000, 0x40307000, 0x5838000a, 0x80025d40,
- 0x04000021, 0x58380002, 0x82000580, 0x00000100,
- 0x04000023, 0x4c380000, 0x592c0a05, 0x82040d00,
- 0x000000ff, 0x82040580, 0x00000012, 0x04000012,
- 0x82040580, 0x0000001b, 0x0400000c, 0x592c0209,
- 0x8400054e, 0x48025a09, 0x497a5c09, 0x497a5c0a,
- 0x4a025a07, 0x00000002, 0x4a025a05, 0x00000103,
- 0x0401fc53, 0x0401f007, 0x4a025a07, 0x00000002,
- 0x0401f003, 0x4a025a07, 0x00000010, 0x0401fc4c,
- 0x5c007000, 0x4202e000, 0x00000001, 0x4a007002,
- 0x00000100, 0x4978700f, 0x1c01f000, 0x58380004,
- 0x82000480, 0x00000003, 0x04000088, 0x5838000f,
- 0x8c000500, 0x04020019, 0x4200b000, 0x00000003,
- 0x832cac00, 0x00000012, 0x58380009, 0x5838100c,
- 0x8008a400, 0x4c380000, 0x0201f800, 0x0010aee2,
- 0x5c007000, 0x5838000c, 0x82000400, 0x00000003,
- 0x4800700c, 0x4a00700f, 0x00000001, 0x58380004,
- 0x82000480, 0x00000003, 0x48007004, 0x82000580,
- 0x00000003, 0x0400006d, 0x5838000d, 0x80001d40,
- 0x04020020, 0x4c380000, 0x0201f800, 0x0010055a,
- 0x5c007000, 0x04000010, 0x4a025a05, 0x0000010a,
- 0x42001800, 0x00000006, 0x480c700d, 0x5838000b,
- 0x80000540, 0x04020002, 0x5838000a, 0x40000800,
- 0x492c0801, 0x492c700b, 0x42000800, 0x0000000f,
- 0x0401f011, 0x4202e000, 0x00000008, 0x4a033005,
- 0x000207a2, 0x1c01f000, 0x4202e000, 0x00000002,
- 0x42000000, 0x0010c35d, 0x50007000, 0x0401f7e7,
- 0x583a580b, 0x400c0000, 0x42000800, 0x00000015,
- 0x80040c80, 0x58381004, 0x5838000e, 0x41783000,
- 0x80000540, 0x04020005, 0x84183540, 0x82081480,
- 0x00000003, 0x0400003d, 0x40080000, 0x80040480,
- 0x04001002, 0x40080800, 0x4004b000, 0x412c0000,
- 0x800c0400, 0x4000a800, 0x58380009, 0x5838100c,
- 0x8008a400, 0x4c080000, 0x4c040000, 0x4c0c0000,
- 0x4c380000, 0x0201f800, 0x0010aee2, 0x5c007000,
- 0x5c001800, 0x5c000800, 0x40040000, 0x58381004,
- 0x80080480, 0x48007004, 0x82000580, 0x00000003,
- 0x04000002, 0x84183500, 0x5c000000, 0x80041400,
- 0x82080480, 0x00000060, 0x04020003, 0x84183542,
- 0x41781000, 0x400c0000, 0x80041c00, 0x820c0480,
- 0x00000015, 0x04020003, 0x84183544, 0x40001800,
- 0x40080800, 0x4804700c, 0x480c700d, 0x40180000,
- 0x0c01f001, 0x000207ed, 0x000207f2, 0x000207ef,
- 0x000207ed, 0x00020789, 0x000207f2, 0x000207ef,
- 0x000207ed, 0x0201f800, 0x0010032d, 0x5838100e,
- 0x0201f000, 0x001050f9, 0x5838080c, 0x82040400,
- 0x00000002, 0x58381009, 0x80080400, 0x50001000,
- 0x800811c0, 0x04020011, 0x4202e000, 0x00000001,
- 0x583a580a, 0x4978700a, 0x4978700f, 0x592c0a05,
- 0x82040d00, 0x000000ff, 0x82040580, 0x00000012,
- 0x040006c5, 0x82040580, 0x0000001b, 0x02000000,
- 0x0010a73e, 0x0401f681, 0x58380009, 0x80040c00,
- 0x82381c00, 0x00000006, 0x54041800, 0x80040800,
- 0x800c1800, 0x54041800, 0x0201f000, 0x001050f9,
- 0x4df00000, 0x4203e000, 0x50000000, 0x5994002e,
- 0x80000540, 0x040000ec, 0x4c000000, 0x8d0e1d32,
- 0x02020800, 0x00100f5d, 0x59e00002, 0x8c00051e,
- 0x04020013, 0x42000000, 0x00001000, 0x50000000,
- 0x82000480, 0x24320002, 0x0402000d, 0x0201f800,
- 0x0010af26, 0x04000008, 0x42000800, 0x00007a17,
- 0x50040000, 0x8c00050e, 0x04020003, 0x8400054e,
- 0x44000800, 0x4a030000, 0x00000000, 0x5c000000,
- 0x59947824, 0x4803282f, 0x803c0480, 0x04001004,
- 0x04000003, 0x48032824, 0x0401f026, 0x41787800,
- 0x803c7800, 0x82000400, 0x000003e8, 0x040027fd,
- 0x48032824, 0x59a8005c, 0x803c1400, 0x480b505c,
- 0x803c0040, 0x04000002, 0x483fc857, 0x59e40852,
- 0x59a8005d, 0x80040580, 0x04000004, 0x480bc857,
- 0x59e40052, 0x4803505d, 0x59940030, 0x803c0400,
- 0x48032830, 0x0201f800, 0x00105942, 0x59940000,
- 0x82000580, 0x00000000, 0x04020006, 0x59940030,
- 0x48032831, 0x497b2830, 0x4a032800, 0x00000001,
- 0x59bc00e4, 0x8c00052c, 0x02020800, 0x0010580f,
- 0x4c0c0000, 0x59940007, 0x80000d40, 0x04000013,
- 0x59941006, 0x5994002f, 0x80081c80, 0x04001004,
- 0x04000003, 0x480f2806, 0x0401f00c, 0x80040840,
- 0x48072807, 0x04020004, 0x59940008, 0x0801f800,
- 0x0401f006, 0x400c0000, 0x820c1c00, 0x0000000a,
- 0x040027f7, 0x480f2806, 0x5c001800, 0x4d180000,
- 0x59c80040, 0x8c000534, 0x04020027, 0x850e1d32,
- 0x417a3000, 0x83947c00, 0x00000009, 0x583c0001,
- 0x80000d40, 0x04020008, 0x823c7c00, 0x00000005,
- 0x811a3000, 0x83180580, 0x00000005, 0x040207f8,
- 0x0401f019, 0x850e1d72, 0x583c1000, 0x5994002f,
- 0x80080480, 0x04001005, 0x04000004, 0x48007800,
- 0x80000040, 0x040217f1, 0x80040840, 0x48047801,
- 0x04000008, 0x82000400, 0x0000000a, 0x48007800,
- 0x040027fa, 0x82040500, 0x0000007f, 0x0401f7e7,
- 0x583c0004, 0x4c3c0000, 0x0801f800, 0x5c007800,
- 0x0401f7e2, 0x5c023000, 0x59940023, 0x80001540,
- 0x04000007, 0x04002006, 0x5994002f, 0x80080480,
- 0x04021002, 0x80000580, 0x48032823, 0x59940026,
- 0x80000d40, 0x04000013, 0x59941025, 0x5994002f,
- 0x80080480, 0x04001005, 0x04000004, 0x48032825,
- 0x80000040, 0x0402100b, 0x80040840, 0x48072826,
- 0x04020004, 0x59940027, 0x0801f800, 0x0401f005,
- 0x82000400, 0x0000000a, 0x48032825, 0x040027f7,
- 0x59940004, 0x80000d40, 0x04000013, 0x59941003,
- 0x5994002f, 0x80080480, 0x04001005, 0x04000004,
- 0x48032803, 0x80000040, 0x0402100b, 0x80040840,
- 0x48072804, 0x04020004, 0x59940005, 0x0801f800,
- 0x0401f005, 0x82000400, 0x0000000a, 0x48032803,
- 0x040027f7, 0x59940029, 0x80000d40, 0x04000013,
- 0x59941028, 0x5994002f, 0x80080480, 0x04001005,
- 0x04000004, 0x48032828, 0x80000040, 0x0402100b,
- 0x80040840, 0x48072829, 0x04020004, 0x5994002a,
- 0x0801f800, 0x0401f005, 0x82000400, 0x00000001,
- 0x48032828, 0x040027f7, 0x5994002c, 0x80000d40,
- 0x04000013, 0x5994102b, 0x5994002f, 0x80080480,
- 0x04001005, 0x04000004, 0x4803282b, 0x80000040,
- 0x0402100b, 0x80040840, 0x4807282c, 0x04020004,
- 0x5994002d, 0x0801f800, 0x0401f005, 0x82000400,
- 0x0000000a, 0x4803282b, 0x040027f7, 0x5994082e,
- 0x5994002f, 0x80040480, 0x02001800, 0x0010032d,
- 0x4803282e, 0x59940000, 0x0c01f001, 0x0002090a,
- 0x00105894, 0x001058fe, 0x5c03e000, 0x1c01f000,
- 0x5994002e, 0x80000000, 0x4803282e, 0x4203e000,
- 0x70000000, 0x1c01f000, 0x592c0004, 0x497a5804,
- 0x80000d40, 0x04020005, 0x592c0407, 0x800000c2,
- 0x800008c4, 0x80040c00, 0x592c040b, 0x48066006,
- 0x82000d00, 0x00000003, 0x02000000, 0x00105a97,
- 0x8c000500, 0x0402002c, 0x59a80870, 0x80040840,
- 0x040207ff, 0x8c00051e, 0x02000000, 0x00105a72,
- 0x82000d00, 0x000000c0, 0x02020000, 0x00105a68,
- 0x82000d00, 0x00002020, 0x02020000, 0x00105a65,
- 0x813e79c0, 0x02020000, 0x00105a65, 0x592c0c0d,
- 0x800409c0, 0x02020000, 0x00105a65, 0x59300a03,
- 0x82040d80, 0x00000007, 0x02020000, 0x00105a65,
- 0x4a026203, 0x00000003, 0x4a026403, 0x00000043,
- 0x0201f800, 0x0002015e, 0x82080d40, 0x80003465,
- 0x48066004, 0x497a6000, 0x59bc00ea, 0x8c000516,
- 0x040207fe, 0x83300400, 0xa0000000, 0x480378e1,
- 0x1c01f000, 0x8c000502, 0x02020000, 0x00105aba,
- 0x8c00051e, 0x0400000e, 0x82000d00, 0x000000c0,
- 0x04000005, 0x82040d80, 0x000000c0, 0x02020000,
- 0x00105abf, 0x82000d00, 0x00002020, 0x82040d80,
- 0x00002020, 0x02000000, 0x00105a86, 0x592c0208,
- 0x80000040, 0x02020000, 0x00105a90, 0x592c180e,
- 0x800c19c0, 0x02020000, 0x00105a90, 0x592c1810,
- 0x59300008, 0x82000540, 0x00000011, 0x480e6012,
- 0x48026008, 0x4a026203, 0x00000004, 0x4a026403,
- 0x00000042, 0x42000800, 0x80002001, 0x0401f03e,
- 0x5c000000, 0x4c000000, 0x4803c857, 0x4807c857,
- 0x0401f003, 0x42000800, 0x00000001, 0x59325809,
- 0x832c0500, 0x00ff0000, 0x0400000d, 0x592c1000,
- 0x592c040b, 0x480a6009, 0x8c000510, 0x04020009,
- 0x48065a07, 0x0201f800, 0x000203ab, 0x417a7800,
- 0x59300009, 0x80025d40, 0x04020788, 0x1c01f000,
- 0x456a5800, 0x412ed000, 0x815eb800, 0x592c0001,
- 0x80000d40, 0x04020006, 0x59c80000, 0x82000540,
- 0x00001200, 0x48039000, 0x0401f7f1, 0x0201f800,
- 0x00020399, 0x0401f7ee, 0x59840000, 0x80000540,
- 0x04020002, 0x1c01f000, 0x59840003, 0x80000540,
- 0x02020000, 0x00105b37, 0x1c01f000, 0x48066004,
- 0x497a6000, 0x497a6001, 0x8d0e1d32, 0x02000800,
- 0x00100f5d, 0x850e1d72, 0x59bc00ea, 0x8c000516,
- 0x040207fe, 0x83300400, 0xa0000000, 0x480378e1,
- 0x1c01f000, 0x59300004, 0x82000500, 0x00000100,
- 0x80040d40, 0x48066004, 0x59bc00ea, 0x8c000516,
- 0x040207fe, 0x83300400, 0x40000000, 0x480378e1,
- 0x1c01f000, 0x59bc00ea, 0x82001500, 0xb0000018,
- 0x02020000, 0x001061f0, 0x8c000510, 0x0400002a,
- 0x59bc10e0, 0x82080500, 0xfffff000, 0x0402000a,
- 0x80080108, 0x820a3500, 0x0000000f, 0x4803c857,
- 0x1201f000, 0x001061f6, 0x84000510, 0x48026004,
- 0x0401f016, 0x840a653e, 0x59300004, 0x8c000520,
- 0x040007fa, 0x82000500, 0xfffefeff, 0x48026004,
- 0x8c08153e, 0x04020005, 0x42027000, 0x00000013,
- 0x0401f858, 0x0401f009, 0x59300004, 0x8c000514,
- 0x04000003, 0x0401ff98, 0x0401f02e, 0x42027000,
- 0x00000049, 0x0401f84f, 0x59bc00ea, 0x82001500,
- 0xb0000018, 0x02020000, 0x001061f0, 0x8c000510,
- 0x040207d8, 0x1c01f000, 0x59a80251, 0x81640480,
- 0x04001019, 0x41626000, 0x41580000, 0x59300a03,
- 0x82040d80, 0x00000000, 0x04020009, 0x4a026203,
- 0x00000008, 0x8166c840, 0x8332c400, 0x00000024,
- 0x81600480, 0x04021009, 0x1c01f000, 0x83326400,
- 0x00000024, 0x81300c80, 0x040017f1, 0x42026000,
- 0x0010f694, 0x0401f7ee, 0x837ac540, 0x0010f694,
- 0x1c01f000, 0x42000000, 0x0010bd10, 0x0201f800,
- 0x0010ae10, 0x4967c857, 0x80026580, 0x1c01f000,
- 0x83300480, 0x0010f694, 0x02001800, 0x0010032d,
- 0x41580000, 0x81300480, 0x0402100c, 0x457a6000,
- 0x4a026202, 0x0000ffff, 0x04011000, 0x83300400,
- 0x00000003, 0x4803c840, 0x4a03c842, 0x00000021,
- 0x8166c800, 0x1c01f000, 0x41540000, 0x81300480,
- 0x02021800, 0x0010032d, 0x59a8004d, 0x4933504c,
- 0x80000000, 0x4803504d, 0x457a6000, 0x4a026202,
- 0x0000ffff, 0x04011000, 0x83300400, 0x00000003,
- 0x4803c840, 0x4a03c842, 0x00000021, 0x1c01f000,
- 0x4d340000, 0x5932680a, 0x59300407, 0x82000500,
- 0x0000001f, 0x0c01f803, 0x5c026800, 0x1c01f000,
- 0x001071b9, 0x001071cc, 0x001071e6, 0x00020a5c,
- 0x001093e1, 0x001093fc, 0x00020ad1, 0x001071b9,
- 0x001071cc, 0x00105e2e, 0x001071ff, 0x001071b9,
- 0x001071b9, 0x001071b9, 0x001071b9, 0x001071b9,
- 0x00108f27, 0x0010a342, 0x0010aa4c, 0x0010ac3c,
- 0x001071b9, 0x001071b9, 0x001071b9, 0x001071b9,
- 0x001071b9, 0x001071b9, 0x001071b9, 0x001071b9,
- 0x001071b9, 0x001071b9, 0x001071b9, 0x001071b9,
- 0x59300203, 0x82000c80, 0x0000000e, 0x02021800,
- 0x0010032d, 0x0c01f001, 0x001071fd, 0x00107e31,
- 0x00020a70, 0x00108008, 0x001080a2, 0x001071fd,
- 0x001071fd, 0x001071fd, 0x00107e16, 0x001071fd,
- 0x001071fd, 0x001071fd, 0x001071fd, 0x0010828f,
- 0x83380480, 0x00000058, 0x04021007, 0x83380480,
- 0x00000040, 0x04001004, 0x4d2c0000, 0x0c01f803,
- 0x5c025800, 0x1c01f000, 0x00107ebb, 0x00107ebb,
- 0x00107ebb, 0x00107ebb, 0x00107ebb, 0x00107ebd,
- 0x00107f8a, 0x00107ebb, 0x00107ebb, 0x00107ebb,
- 0x00107ebb, 0x00107ebb, 0x00107ebb, 0x00107ebb,
- 0x00107ebb, 0x00107ebb, 0x00107ebb, 0x00107ebb,
- 0x00107ebb, 0x00107f8e, 0x00020a92, 0x00107ebb,
- 0x00107f8d, 0x00107f8f, 0x59325809, 0x59300812,
- 0x59301402, 0x59340200, 0x8c00050e, 0x0402001c,
- 0x0401f826, 0x04000005, 0x4a025a05, 0x00000103,
- 0x497a580a, 0x0401f009, 0x4a025a05, 0x00000103,
- 0x4a025a07, 0x00000000, 0x497a580a, 0x800409c0,
- 0x02020800, 0x0010806d, 0x48065808, 0x480a5c07,
- 0x0201f800, 0x000203ab, 0x5934000f, 0x5934140b,
- 0x80081040, 0x04001002, 0x480a6c0b, 0x80000540,
- 0x02020800, 0x00020327, 0x0401f75e, 0x592c020b,
- 0x8c000502, 0x040007e3, 0x800409c0, 0x040007e7,
- 0x592c0209, 0x8c00050e, 0x040207e4, 0x4933c857,
- 0x0201f000, 0x00108b66, 0x592c020b, 0x8c000500,
- 0x04000010, 0x59300016, 0x592c3810, 0x801c3c80,
- 0x0400000c, 0x4a025a07, 0x00000015, 0x8c1c3d3e,
- 0x04000005, 0x4a025a07, 0x00000007, 0x801c3880,
- 0x801c3800, 0x481fc857, 0x821c0d40, 0x00000000,
- 0x1c01f000, 0x59300203, 0x82003480, 0x0000000e,
- 0x02021800, 0x0010032d, 0x0c01f001, 0x0010941b,
- 0x00020ae5, 0x00109bb1, 0x00109bbf, 0x00020b01,
- 0x0010941b, 0x00109cb5, 0x00020b20, 0x0010941b,
- 0x0010941b, 0x0010941b, 0x0010941b, 0x0010941b,
- 0x0010941b, 0x83380580, 0x00000013, 0x02020000,
- 0x00109b38, 0x59300403, 0x82027480, 0x00000044,
- 0x02021800, 0x0010032d, 0x82000480, 0x00000040,
- 0x02001800, 0x0010032d, 0x0c01f001, 0x00109b95,
- 0x00020af7, 0x00109b97, 0x00109ba9, 0x59325809,
- 0x832c0500, 0x00ff0000, 0x04000005, 0x592c0c0b,
- 0x8c040d1a, 0x02020000, 0x00109ba4, 0x0401fe7a,
- 0x0401f710, 0x83380580, 0x00000048, 0x04000007,
- 0x83380580, 0x00000053, 0x02000000, 0x00109c57,
- 0x0201f800, 0x0010032d, 0x59300020, 0x59301012,
- 0x5930080a, 0x58040a00, 0x8c040d0e, 0x02020000,
- 0x00109c33, 0x800811c0, 0x02020000, 0x00109c40,
- 0x59300020, 0x80000540, 0x02020000, 0x00109c4e,
- 0x59325809, 0x592c040b, 0x8c00051e, 0x02000000,
- 0x00109c29, 0x42027000, 0x00000041, 0x0401f001,
- 0x83380480, 0x00000054, 0x02021800, 0x0010032d,
- 0x83380480, 0x00000040, 0x02001000, 0x00109c74,
- 0x0c01f001, 0x00109c80, 0x00020b3d, 0x00109c8c,
- 0x00109c93, 0x00109c80, 0x00109c80, 0x00109c80,
- 0x00109c80, 0x00109c82, 0x00109c87, 0x00109c87,
- 0x00109c80, 0x00109c80, 0x00109c80, 0x00109c80,
- 0x00109c87, 0x00109c80, 0x00109c87, 0x00109c80,
- 0x00109c82, 0x4a026203, 0x00000001, 0x493a6403,
- 0x42000800, 0x80002042, 0x0401f66f, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x6bc6a178, 0x00000000,
- 0x00000000, 0x0010d700, 0x00001ac0, 0x42000000,
- 0x0010f200, 0x42001000, 0x0010f1f1, 0x48001000,
- 0x42013800, 0x0010f600, 0x42000000, 0x0010f1f0,
- 0x489c0000, 0x409d4000, 0x409d6800, 0x1c01f000,
- 0x4200d000, 0x0000000d, 0x42000000, 0x00000002,
- 0x4800d000, 0x0401f7fb, 0x4200d000, 0x0000000d,
- 0x42000000, 0x00000001, 0x4800d000, 0x0401f7fb,
- 0x1c01f000, 0x809d3840, 0x48813800, 0x4933c857,
- 0x5931040b, 0x82817480, 0x00000038, 0x0400000d,
- 0x0400100c, 0x82810480, 0x00000038, 0x4a025a06,
- 0x00000038, 0x0201f800, 0x001031ac, 0x40c65800,
- 0x80c589c0, 0x040207f4, 0x4178d000, 0x0401f004,
- 0x48825a06, 0x4200d000, 0x00000001, 0x40698800,
- 0x589d0000, 0x809d3800, 0x1c01f000, 0x42038000,
- 0x00007700, 0x4a038006, 0x30000000, 0x59c0d007,
- 0x8268e500, 0x00000020, 0x8c68d50a, 0x040207fc,
- 0x59c0d006, 0x59a0d20a, 0x59a0dc0a, 0x806c00e0,
- 0x8068d540, 0x486b8001, 0x59a0d20f, 0x59a0dc0f,
- 0x806c00e0, 0x8068d540, 0x486b8000, 0x59a0d20c,
- 0x486b8002, 0x59a0d20c, 0x486b8003, 0x59a0d20c,
- 0x486b8005, 0x48739009, 0x59e0d003, 0x8268d540,
- 0x00008060, 0x486bc003, 0x1c01f000, 0x59a17002,
- 0x48bbc857, 0x59a0d002, 0x8068d1c0, 0x04020032,
- 0x59a8d80f, 0x826ce500, 0x000000ff, 0x59a97062,
- 0x48bb8880, 0x59c4d0a3, 0x8268d540, 0x00002008,
- 0x8468d53a, 0x486b88a3, 0x59c4d008, 0x8468d54e,
- 0x8268d500, 0xffffffe1, 0x486b8808, 0x59c8d040,
- 0x8468d534, 0x486b9040, 0x59a0d207, 0x82697480,
- 0x00000044, 0x0400001d, 0x8070d0d0, 0x807000e0,
- 0x8068d540, 0x486b9120, 0x8270d540, 0x01000000,
- 0x486b9121, 0x4a039123, 0x08210008, 0x48739122,
- 0x497b9124, 0x59a8d463, 0x8068d000, 0x486b5463,
- 0x59a8d463, 0x8068d0e0, 0x8268d540, 0x0000aaaa,
- 0x486b9125, 0x497b9126, 0x497b9127, 0x59a0d207,
- 0x82697480, 0x00000044, 0x04000011, 0x4a039100,
- 0x0000e9a0, 0x0401f010, 0x806cd0d0, 0x8268d540,
- 0x00000011, 0x486b9120, 0x826cdd00, 0x00ffffff,
- 0x826cd540, 0x32000000, 0x486b9121, 0x4a039123,
- 0xe1290008, 0x486f9122, 0x0401f7e2, 0x4a039100,
- 0x0000e980, 0x1c01f000, 0x59c8d007, 0x8c68d500,
- 0x04000003, 0x4a03900d, 0x00000030, 0x1c01f000,
- 0x0201f800, 0x0010619f, 0x59b8d0ea, 0x8268d500,
- 0x00000007, 0x82697480, 0x00000003, 0x04000002,
- 0x0401f003, 0x4a0370e8, 0x00000001, 0x1c01f000,
- 0x4a038805, 0x00020000, 0x4200d000, 0x0000003c,
- 0x0201f800, 0x001010da, 0x4a038891, 0x0000ffff,
- 0x59c97035, 0x48bb9035, 0x4a03900d, 0x00000040,
- 0x42038000, 0x00007700, 0x0201f800, 0x00100c07,
- 0x4a038006, 0x20000000, 0x42038000, 0x00007720,
- 0x0201f800, 0x00100c07, 0x4a038006, 0x20000000,
- 0x4a03a005, 0x20000000, 0x4a03a005, 0x30000000,
- 0x4a03b805, 0x30000001, 0x4a03b805, 0x20000000,
- 0x59d0d006, 0x8c68d50a, 0x040207fe, 0x59dcd006,
- 0x8c68d50a, 0x040207fb, 0x1c01f000, 0x4203a000,
- 0x00007600, 0x4200d000, 0x00000040, 0x0201f800,
- 0x001010da, 0x4a03a00a, 0x00000001, 0x4a03a005,
- 0x20000000, 0x59d0d006, 0x4a03a005, 0x30000000,
- 0x59d0d006, 0x8c68d50a, 0x040207fe, 0x59d0d005,
- 0x59a0d211, 0x59a0dc11, 0x806c00e0, 0x8068d540,
- 0x486ba001, 0x59a0d20e, 0x59a0dc0e, 0x806c00e0,
- 0x8068d540, 0x486ba000, 0x59a0d20c, 0x486ba003,
- 0x59a0d20c, 0x486ba002, 0x59a0d20c, 0x486ba008,
- 0x1c01f000, 0x58ed7003, 0x48bbc857, 0x58ed7005,
- 0x48bbc857, 0x58ed7006, 0x48bbc857, 0x58ed7007,
- 0x48bbc857, 0x58ed7001, 0x48bbc857, 0x48efc857,
- 0x58ed7008, 0x48bbc857, 0x58ecd005, 0x8068d1c0,
- 0x04000005, 0x40ecd000, 0x0201f800, 0x001005e8,
- 0x0401f006, 0x58ecd003, 0x58ecd806, 0x58ece001,
- 0x0201f800, 0x0010032a, 0x1c01f000, 0x829d3c80,
- 0x00000006, 0x48813800, 0x48853801, 0x48893802,
- 0x488d3803, 0x48913804, 0x48953805, 0x59a10407,
- 0x4883c857, 0x59a0da0e, 0x59a0d40e, 0x806800e0,
- 0x806d2d40, 0x59a0da11, 0x59a0d411, 0x806800e0,
- 0x806d2540, 0x59a10a0c, 0x830d1500, 0x00000080,
- 0x8d0e1d0e, 0x04020020, 0x59a8d21b, 0x8c68d50a,
- 0x04000018, 0x599cd201, 0x40840000, 0x80697480,
- 0x040010c5, 0x82811d00, 0x00008000, 0x040200c6,
- 0x59a8d00d, 0x41640000, 0x80697480, 0x04000015,
- 0x4967c857, 0x59a9704f, 0x48bbc857, 0x59a9704e,
- 0x48bbc857, 0x59a9704d, 0x48bbc857, 0x4a034407,
- 0x00000018, 0x0201f800, 0x00101d02, 0x0401f12b,
- 0x4a034407, 0x00000005, 0x0201f800, 0x00101d02,
- 0x0401f126, 0x0201f800, 0x00101d0a, 0x0401f123,
- 0x59a8d04e, 0x59a8004d, 0x80697480, 0x040207e9,
- 0x0201f800, 0x001061ab, 0x598e600f, 0x0201f800,
- 0x00106426, 0x0201f800, 0x001061ab, 0x408e3000,
- 0x0201f800, 0x001067aa, 0x59926004, 0x813261c0,
- 0x0400000d, 0x0201f800, 0x0010633f, 0x0201f800,
- 0x0010617d, 0x0201f800, 0x00106186, 0x42027800,
- 0x00001000, 0x42028000, 0x0000002e, 0x0201f800,
- 0x0010e46f, 0x811a3000, 0x83197480, 0x00000004,
- 0x040007ec, 0x040017eb, 0x0201f800, 0x001007c8,
- 0x0201f800, 0x00102488, 0x497b5060, 0x497b4408,
- 0x4201d000, 0x003d0900, 0x0201f800, 0x00105a06,
- 0x59c50880, 0x59c510a3, 0x497b4002, 0x0401febc,
- 0x0401ff5b, 0x4a03a005, 0x10000000, 0x59c4d005,
- 0x8268d540, 0x000000f0, 0x486b8805, 0x0401fed4,
- 0x0201f800, 0x00102491, 0x40c50000, 0x80c589c0,
- 0x04020020, 0x59c8d001, 0x8068d1c0, 0x0402001d,
- 0x59dcd006, 0x8268d500, 0x43000f80, 0x0400000a,
- 0x59dcd006, 0x82697480, 0x00000000, 0x83f17500,
- 0x0c000000, 0x04000004, 0x82b97580, 0x0c000000,
- 0x0402000e, 0x59d0d006, 0x8268d500, 0x43040700,
- 0x040007e8, 0x59d0d006, 0x82697480, 0x00000000,
- 0x83f17500, 0x0c000000, 0x040007e2, 0x82b97480,
- 0x0c000000, 0x040007df, 0x4a034408, 0x0000dddd,
- 0x808101c0, 0x04020090, 0x59a0d408, 0x82697480,
- 0x0000dddd, 0x0400008c, 0x59c0d008, 0x8268d500,
- 0x0fffffff, 0x59c8d818, 0x826c0500, 0xf0000000,
- 0x8068d540, 0x486b8008, 0x0201f800, 0x00100c07,
- 0x59c0d806, 0x4a038006, 0x10000000, 0x59c0d809,
- 0x4883900d, 0x59c8d020, 0x8068e130, 0x59c8d020,
- 0x82690500, 0x00ffffff, 0x59c8d021, 0x8268fd00,
- 0x00ffffff, 0x4a03900d, 0x00000001, 0x59c8d020,
- 0x8068e930, 0x59c4f005, 0x826cd500, 0x00e00000,
- 0x04020004, 0x82717480, 0x00000032, 0x04000073,
- 0x486fc857, 0x4873c857, 0x4877c857, 0x4883c857,
- 0x487fc857, 0x487bc857, 0x59a9700f, 0x48bbc857,
- 0x0201f800, 0x001024a8, 0x4a035060, 0x00000001,
- 0x4200d000, 0x00000064, 0x0401f004, 0x8068d1c0,
- 0x04000070, 0x8068d040, 0x59c0d807, 0x8c6cdd04,
- 0x040007fb, 0x0401fecb, 0x0201f800, 0x001064c5,
- 0x0401febc, 0x4201d000, 0x000186a0, 0x0201f800,
- 0x00105a06, 0x488b88a3, 0x48878880, 0x59a8d060,
- 0x8068d1c0, 0x0402004e, 0x0201f800, 0x00101cbf,
- 0x0401f07a, 0x4887c857, 0x0201f800, 0x00101d06,
- 0x0401f076, 0x0201f800, 0x00107185, 0x40c66000,
- 0x80c589c0, 0x0400003f, 0x0201f800, 0x001031ac,
- 0x40c65800, 0x80c589c0, 0x04000020, 0x48898a05,
- 0x48898c05, 0x4882620b, 0x4886640b, 0x59a0d40f,
- 0x8068d0e0, 0x59a0da0f, 0x406c0000, 0x8068d540,
- 0x486a600c, 0x59a0d40a, 0x8068d0e0, 0x59a0da0a,
- 0x406c0000, 0x8068d540, 0x486a600d, 0x59a0d40e,
- 0x8068d0e0, 0x59a0da0e, 0x406c0000, 0x8068d540,
- 0x486a600e, 0x59a0d411, 0x8068d0e0, 0x59a0da11,
- 0x406c0000, 0x8068d540, 0x486a600f, 0x0401fdfe,
- 0x80c589c0, 0x04020006, 0x0201f800, 0x00107141,
- 0x4a034407, 0x00000002, 0x0401f720, 0x48ee6022,
- 0x58ee580c, 0x4a01d801, 0x00000001, 0x592cd206,
- 0x4869d805, 0x832cd400, 0x00000007, 0x4869d803,
- 0x4895d806, 0x4891d807, 0x4a01d808, 0x0010d99e,
- 0x4a034000, 0x00000001, 0x49334001, 0x0401fec2,
- 0x0401f036, 0x4a035060, 0x00000001, 0x0401f7aa,
- 0x4a034407, 0x00000003, 0x0401f708, 0x0201f800,
- 0x00101d0e, 0x0401f02d, 0x82757480, 0x000000e1,
- 0x0402078c, 0x407c0000, 0x80817480, 0x04020789,
- 0x59a8d00f, 0x80697480, 0x04020786, 0x8278d500,
- 0x000000f0, 0x04020783, 0x0401fe50, 0x0401f78d,
- 0x4a035060, 0x00000001, 0x0201f800, 0x001016e8,
- 0x80c589c0, 0x04000008, 0x59c4d005, 0x8268d500,
- 0x000000f0, 0x04000007, 0x4a034408, 0x0000bbbb,
- 0x0401f789, 0x4a034408, 0x0000aaaa, 0x0401f786,
- 0x0201f800, 0x00102491, 0x80c57040, 0x04000008,
- 0x59c0d007, 0x8268d500, 0x000501c0, 0x0400077e,
- 0x4a034408, 0x0000dddd, 0x0401f77b, 0x4a034408,
- 0x0000cccc, 0x0401f778, 0x589d2805, 0x589d2004,
- 0x589d1803, 0x589d1002, 0x589d0801, 0x589d0000,
- 0x829d3c00, 0x00000006, 0x1c01f000, 0x809d3840,
- 0x48813800, 0x592cd006, 0x82697480, 0x01000000,
- 0x04000016, 0x41310000, 0x59a26001, 0x48ee6022,
- 0x58ee580c, 0x4979d801, 0x592cd206, 0x4869d805,
- 0x832cd400, 0x00000007, 0x4869d803, 0x5931700c,
- 0x48b9d806, 0x5931700d, 0x48b9d807, 0x4a01d808,
- 0x0010d99e, 0x4a034000, 0x00000001, 0x40826000,
- 0x0401fe69, 0x0401f009, 0x41310000, 0x59a26001,
- 0x4933c857, 0x0201f800, 0x00107144, 0x40826000,
- 0x0201f800, 0x00101d0e, 0x589d0000, 0x809d3800,
- 0x1c01f000, 0x829d3c80, 0x00000005, 0x48813800,
- 0x48853801, 0x48893802, 0x488d3803, 0x48913804,
- 0x412d1000, 0x41310800, 0x59a26001, 0x4069d800,
- 0x586b400a, 0x5868d002, 0x82697480, 0x00000200,
- 0x0400003c, 0x58ee580c, 0x59a0d800, 0x806cd000,
- 0x486b4000, 0x592d0001, 0x0401f005, 0x40825800,
- 0x806cd840, 0x04000004, 0x58810001, 0x808101c0,
- 0x040207fb, 0x808101c0, 0x04000012, 0x58ed000c,
- 0x832cd400, 0x00000007, 0x4869d803, 0x592cd206,
- 0x4869d805, 0x5880d205, 0x8268d580, 0x00000103,
- 0x8068d080, 0x8068d000, 0x8068d13e, 0x4869d801,
- 0x0401fe31, 0x40866000, 0x40825800, 0x0401f03b,
- 0x58ee580c, 0x592cd205, 0x82697480, 0x00000103,
- 0x04000030, 0x41351800, 0x41452000, 0x592cd405,
- 0x8468d55e, 0x486a5c05, 0x42028800, 0x000007fd,
- 0x4200d000, 0x00fffffd, 0x0201f800, 0x00103dd5,
- 0x40c66800, 0x80c589c0, 0x04000010, 0x0201f800,
- 0x00108cee, 0x80c589c0, 0x04000018, 0x40866000,
- 0x4881d801, 0x4a01d808, 0x0010d978, 0x0401f00f,
- 0x0201f800, 0x00101cfa, 0x0201f800, 0x00107141,
- 0x40866000, 0x0401f019, 0x59a26001, 0x0201f800,
- 0x00107141, 0x40866000, 0x4a034407, 0x00000002,
- 0x0201f800, 0x00101d02, 0x408a5800, 0x408e6800,
- 0x40928800, 0x0401f00d, 0x0201f800, 0x00107141,
- 0x40866000, 0x4a034407, 0x00000004, 0x0401f7f5,
- 0x0201f800, 0x00107141, 0x40866000, 0x0201f800,
- 0x00101cbf, 0x408a5800, 0x589d2004, 0x589d1803,
- 0x589d1002, 0x589d0801, 0x589d0000, 0x829d3c00,
- 0x00000005, 0x1c01f000, 0x829d3c80, 0x00000004,
- 0x48813800, 0x48853801, 0x48893802, 0x488d3803,
- 0x40690800, 0x497bc856, 0x59a0d20d, 0x8068d1c0,
- 0x0400001e, 0x5884d001, 0x4178d800, 0x82697480,
- 0x00000002, 0x04000051, 0x59a26001, 0x5930d00e,
- 0x4068d800, 0x8068d1c0, 0x0400004c, 0x8068d040,
- 0x486a600e, 0x5932580c, 0x5930d80b, 0x586d1800,
- 0x586d1001, 0x586cd002, 0x82690500, 0xfffffffc,
- 0x5930d00d, 0x8068d000, 0x486a600d, 0x82697480,
- 0x00000005, 0x04000034, 0x826cd400, 0x00000003,
- 0x486a600b, 0x0401f012, 0x59a0d40c, 0x8068d0e0,
- 0x59a0da0c, 0x826c0500, 0x0000fffc, 0x80690540,
- 0x4883a003, 0x59a0d40e, 0x8068d0e0, 0x59a0da0e,
- 0x406c0000, 0x80691d40, 0x59a0d411, 0x8068d0e0,
- 0x59a0da11, 0x406c0000, 0x80691540, 0x4201d000,
- 0x00003a98, 0x0201f800, 0x00105a06, 0x4883a002,
- 0x59a97061, 0x48bba008, 0x488fa000, 0x488ba001,
- 0x59d0d005, 0x4a03a005, 0x10000000, 0x4178d000,
- 0x04025002, 0x8068d000, 0x8068d1c0, 0x04020007,
- 0x5884d001, 0x8068d000, 0x48690801, 0x4200d800,
- 0x00000001, 0x0401f011, 0x4200d000, 0x0010da0f,
- 0x4084d800, 0x4178e000, 0x0201f800, 0x0010032a,
- 0x0401f7f4, 0x497a600d, 0x592e5801, 0x812e59c0,
- 0x040007df, 0x492e600c, 0x832cdc00, 0x00000006,
- 0x486e600b, 0x0401f7da, 0x406d8800, 0x589d1803,
- 0x589d1002, 0x589d0801, 0x589d0000, 0x829d3c00,
- 0x00000004, 0x1c01f000, 0x809d3840, 0x48813800,
- 0x40690000, 0x59d0d006, 0x8268d500, 0x43040700,
- 0x0400000a, 0x59d0d006, 0x82697480, 0x00000000,
- 0x83f17500, 0x0c000000, 0x04000004, 0x82b97580,
- 0x0c000000, 0x0402003d, 0x59a0d20d, 0x8068d1c0,
- 0x0400000f, 0x59d17006, 0x48bbc857, 0x59d0d006,
- 0x8c68d504, 0x0400000a, 0x59d0d006, 0x82697480,
- 0x00000000, 0x83f17500, 0x0c000000, 0x04000004,
- 0x82b97580, 0x0c000000, 0x04020010, 0x0401f033,
- 0x4200d000, 0x0010da77, 0x4080e000, 0x0201f800,
- 0x0010032a, 0x59d0d006, 0x82697480, 0x00000000,
- 0x83f17500, 0x0c000000, 0x040007f5, 0x82b97480,
- 0x0c000000, 0x040007f2, 0x4a03a005, 0x20000000,
- 0x59d0d006, 0x8268d500, 0x43040700, 0x04020017,
- 0x5880d801, 0x806d7040, 0x04000017, 0x826d7480,
- 0x00000002, 0x040207e7, 0x4a010001, 0x00000001,
- 0x59d17006, 0x48bbc857, 0x59d0d006, 0x82697480,
- 0x00000000, 0x83f17500, 0x0c000000, 0x04000004,
- 0x82b97580, 0x0c000000, 0x040207df, 0x4080d000,
- 0x0401ff4e, 0x0401f009, 0x4a034408, 0x0000dddd,
- 0x0401f006, 0x48690001, 0x4080d000, 0x0401ff47,
- 0x80c589c0, 0x040207f6, 0x589d0000, 0x809d3800,
- 0x1c01f000, 0x0201f800, 0x001016e8, 0x80c589c0,
- 0x04020002, 0x0401f009, 0x4a034407, 0x00000017,
- 0x0201f800, 0x00101d02, 0x4203e000, 0x50000000,
- 0x497bc856, 0x0401f000, 0x1c01f000, 0x4068d800,
- 0x59c17009, 0x48bbc857, 0x59c0e009, 0x8270d500,
- 0x00e00000, 0x04000019, 0x586cd000, 0x486b4210,
- 0x586cd000, 0x8068d120, 0x486b4410, 0x8c70e52e,
- 0x0402000e, 0x8c70e52c, 0x04000004, 0x586cd00b,
- 0x8068d000, 0x4868d80b, 0x8c70e52a, 0x04000004,
- 0x586cd00d, 0x8068d000, 0x4868d80d, 0x4200d000,
- 0x00000001, 0x0401f005, 0x586cd00c, 0x8068d000,
- 0x4868d80c, 0x0401f7f0, 0x40698800, 0x1c01f000,
- 0x4068e000, 0x58697003, 0x48bbc857, 0x59a0d40d,
- 0x8068d1c0, 0x04000034, 0x5870d002, 0x4178d800,
- 0x82697480, 0x00000002, 0x04000050, 0x59a26000,
- 0x5930d00e, 0x4068d800, 0x8068d1c0, 0x0400004b,
- 0x8068d040, 0x486a600e, 0x5932580c, 0x5930d80b,
- 0x586cf800, 0x586cf001, 0x586cd002, 0x8268ed00,
- 0xfffffffc, 0x5930d00d, 0x8068d000, 0x486a600d,
- 0x82697480, 0x00000005, 0x04000033, 0x826cd400,
- 0x00000003, 0x486a600b, 0x487f8000, 0x487b8001,
- 0x48778002, 0x59c0d008, 0x8268d500, 0x0fffffff,
- 0x59c8d818, 0x826c0500, 0xf0000000, 0x8068d540,
- 0x486b8008, 0x59c0d006, 0x58717003, 0x48bb8006,
- 0x5870d002, 0x8068d000, 0x4868e002, 0x5870d004,
- 0x8468d540, 0x4868e004, 0x4200d800, 0x00000001,
- 0x0401f022, 0x5870d003, 0x4200d800, 0x00000001,
- 0x82697480, 0x10000000, 0x0402001c, 0x59a0d40f,
- 0x8068d0e0, 0x59a0da0f, 0x406c0000, 0x8068fd40,
- 0x59a0d40a, 0x8068d0e0, 0x59a0da0a, 0x406c0000,
- 0x8068f540, 0x59a0d40c, 0x8068d0e0, 0x59a0da0c,
- 0x826c0500, 0x0000fffc, 0x8068ed40, 0x48778003,
- 0x0401f7d2, 0x497a600d, 0x592e5801, 0x812e59c0,
- 0x040007ce, 0x492e600c, 0x832cdc00, 0x00000006,
- 0x486e600b, 0x0401f7c9, 0x406d8800, 0x1c01f000,
- 0x809d3840, 0x48813800, 0x40690000, 0x59c0d007,
- 0x8268d500, 0x000507c0, 0x0400000a, 0x59c0d007,
- 0x82697480, 0x00000000, 0x83f17500, 0x0c000000,
- 0x04000004, 0x82b97580, 0x0c000000, 0x0402003c,
- 0x59a0d40d, 0x8068d1c0, 0x0400000c, 0x59c17007,
- 0x48bbc857, 0x59c0d007, 0x82697480, 0x00000000,
- 0x83f17500, 0x0c000000, 0x04000004, 0x82b97580,
- 0x0c000000, 0x04020010, 0x0401f035, 0x4200d000,
- 0x0010db59, 0x4080e000, 0x0201f800, 0x0010032a,
- 0x59c0d007, 0x82697480, 0x00000000, 0x83f17500,
- 0x0c000000, 0x040007f5, 0x82b97480, 0x0c000000,
- 0x040007f2, 0x4a038006, 0x20000000, 0x59c0d007,
- 0x8268d500, 0x000507c0, 0x04020019, 0x4a010003,
- 0x10000004, 0x5880d802, 0x806d7040, 0x04000017,
- 0x826d7480, 0x00000002, 0x040207e5, 0x4a010002,
- 0x00000001, 0x59c17007, 0x48bbc857, 0x59c0d007,
- 0x82697480, 0x00000000, 0x83f17500, 0x0c000000,
- 0x04000004, 0x82b97580, 0x0c000000, 0x040207dd,
- 0x4080d000, 0x0401ff5b, 0x0401f009, 0x4a034408,
- 0x0000dddd, 0x0401f006, 0x48690002, 0x4080d000,
- 0x0401ff54, 0x80c589c0, 0x040207f6, 0x589d0000,
- 0x809d3800, 0x1c01f000, 0x59a26000, 0x813261c0,
- 0x04000009, 0x59325809, 0x812e59c0, 0x04000005,
- 0x0201f800, 0x00107141, 0x0201f800, 0x00100589,
- 0x497b4000, 0x59a26001, 0x813261c0, 0x04000009,
- 0x59325809, 0x812e59c0, 0x04000005, 0x0201f800,
- 0x00107141, 0x0201f800, 0x00100589, 0x497b4001,
- 0x1c01f000, 0x809d3840, 0x48813800, 0x40690000,
- 0x0201f800, 0x001024a8, 0x0201f800, 0x0010d7b1,
- 0x5880d00b, 0x8068d1c0, 0x04020004, 0x5880d00c,
- 0x8068d1c0, 0x04000007, 0x59a0d00d, 0x8068d1c0,
- 0x0402000a, 0x4200d000, 0x00000001, 0x0401f009,
- 0x5880d00d, 0x8068d1c0, 0x04000006, 0x59a0d00d,
- 0x8068d1c0, 0x040007f8, 0x0401ffd0, 0x0401f7f6,
- 0x40698800, 0x589d0000, 0x809d3800, 0x1c01f000,
- 0x829d3c80, 0x00000003, 0x48813800, 0x48853801,
- 0x48893802, 0x40690000, 0x492fc857, 0x5868a808,
- 0x58690805, 0x4a03b805, 0x20000000, 0x59dcd006,
- 0x4a03b805, 0x30000000, 0x58817006, 0x48bbb800,
- 0x58817007, 0x48bbb801, 0x5881700a, 0x48bbb802,
- 0x4857b803, 0x4a03b805, 0x30000002, 0x59dcd006,
- 0x4a03b805, 0x70000001, 0x59dcd006, 0x4a03b805,
- 0x10000000, 0x59dcd006, 0x82697480, 0x00000000,
- 0x83f17500, 0x0c000000, 0x040007fb, 0x82b97480,
- 0x0c000000, 0x040007f8, 0x4a03b805, 0x20000000,
- 0x59dcd006, 0x8268d500, 0x43000f80, 0x04000005,
- 0x4a034408, 0x0000dddd, 0x4178d000, 0x0401f01a,
- 0x59dd7000, 0x48b90006, 0x59dd7001, 0x48b90007,
- 0x4084d000, 0x808509c0, 0x04000013, 0x412d1000,
- 0x0201f800, 0x0010056c, 0x40c65800, 0x80c589c0,
- 0x04000007, 0x4a025a05, 0x0000000a, 0x492d1001,
- 0x4200d000, 0x00000001, 0x0401f007, 0x4080d000,
- 0x4088d800, 0x4084e000, 0x0201f800, 0x0010032a,
- 0x0401f7f5, 0x40698800, 0x589d1002, 0x589d0801,
- 0x589d0000, 0x829d3c00, 0x00000003, 0x1c01f000,
- 0x809d3840, 0x48813800, 0x40690000, 0x497bc856,
- 0x4203a000, 0x00007600, 0x4200d000, 0x00000040,
- 0x0201f800, 0x001010da, 0x4a03a00a, 0x00000001,
- 0x4a03a005, 0x20000000, 0x59d0d006, 0x4a03a005,
- 0x30000000, 0x59d0d006, 0x8c68d50a, 0x040207fe,
- 0x59a0d20d, 0x48690005, 0x8068d1c0, 0x04020002,
- 0x0401f06d, 0x59a0d411, 0x8068d0e0, 0x59a0da11,
- 0x406c0000, 0x8068d540, 0x48690007, 0x59a0d40e,
- 0x8068d0e0, 0x59a0da0e, 0x406c0000, 0x8068d540,
- 0x48690006, 0x59a0d40c, 0x8068d0e0, 0x59a0da0c,
- 0x826c0500, 0x0000fffc, 0x8068d540, 0x48690009,
- 0x486ba003, 0x0201f800, 0x00107185, 0x40c66000,
- 0x80c589c0, 0x0400004c, 0x49334001, 0x0201f800,
- 0x0010056c, 0x40c65800, 0x80c589c0, 0x0400003e,
- 0x4a025a05, 0x00000018, 0x4a025806, 0x00abcdef,
- 0x492e6009, 0x492e600c, 0x58817005, 0x48ba600e,
- 0x4a02600d, 0x00000004, 0x832cd400, 0x00000012,
- 0x486a600b, 0x48690008, 0x4a01000a, 0x0000000c,
- 0x5880d005, 0x8068d040, 0x48690005, 0x4080d000,
- 0x0401ff64, 0x59a0d408, 0x82697480, 0x0000dddd,
- 0x040007c8, 0x5880d005, 0x8068d1c0, 0x040007c5,
- 0x82697480, 0x00000004, 0x04000014, 0x04001013,
- 0x8268d480, 0x00000005, 0x48690005, 0x4a01000a,
- 0x0000003c, 0x832cd400, 0x00000006, 0x48690008,
- 0x4080d000, 0x0401ff4f, 0x80c589c0, 0x040007b5,
- 0x5880d005, 0x82697480, 0x00000004, 0x83f17500,
- 0x03000000, 0x040007ef, 0x4979000a, 0x4178e000,
- 0x8270e400, 0x0000000c, 0x8068d840, 0x406cd000,
- 0x806cd9c0, 0x040207fb, 0x4871000a, 0x486d0005,
- 0x0401f7e9, 0x4200d000, 0x0010dc35, 0x4200d800,
- 0x0010056c, 0x4080e000, 0x0201f800, 0x0010032a,
- 0x0401f7bc, 0x4200d000, 0x0010dc35, 0x4200d800,
- 0x00107185, 0x4080e000, 0x0201f800, 0x0010032a,
- 0x0401f7ae, 0x589d0000, 0x809d3800, 0x1c01f000,
- 0x809d3840, 0x48813800, 0x40690000, 0x497bc856,
- 0x42038000, 0x00007700, 0x0201f800, 0x00100c07,
- 0x59c0d006, 0x59a0d40d, 0x48690005, 0x8068d1c0,
- 0x04020009, 0x497b9009, 0x59e0d003, 0x8268d540,
- 0x00008060, 0x486bc003, 0x4a038009, 0x00e00000,
- 0x0401f07a, 0x59a0d40a, 0x8068d0e0, 0x59a0da0a,
- 0x406c0000, 0x8068d540, 0x48690007, 0x59a0d40f,
- 0x8068d0e0, 0x59a0da0f, 0x406c0000, 0x8068d540,
- 0x48690006, 0x59a0d40c, 0x8068d0e0, 0x59a0da0c,
- 0x826c0500, 0x0000fffc, 0x8068d540, 0x48690009,
- 0x486bc857, 0x58817009, 0x48bb8003, 0x0201f800,
- 0x00107185, 0x40c66000, 0x80c589c0, 0x04000057,
- 0x49334000, 0x0201f800, 0x0010056c, 0x40c65800,
- 0x80c589c0, 0x04000049, 0x4a025a05, 0x00000018,
- 0x4a025806, 0x00abcdef, 0x492e6009, 0x492e600c,
- 0x58817005, 0x48ba600e, 0x4a02600d, 0x00000004,
- 0x832cd400, 0x00000012, 0x486a600b, 0x48690008,
- 0x4a01000a, 0x0000000c, 0x5880d005, 0x8068d040,
- 0x48690005, 0x4080d000, 0x0401fede, 0x59a0d408,
- 0x82697480, 0x0000dddd, 0x040007c6, 0x5880d005,
- 0x8068d1c0, 0x040007bc, 0x82697480, 0x00000004,
- 0x04000014, 0x04001013, 0x8268d480, 0x00000005,
- 0x48690005, 0x4a01000a, 0x0000003c, 0x832cd400,
- 0x00000006, 0x48690008, 0x4080d000, 0x0401fec9,
- 0x80c589c0, 0x04000018, 0x5880d005, 0x82697480,
- 0x00000004, 0x83f17500, 0x03000000, 0x040007ef,
- 0x4979000a, 0x4178e000, 0x8270e400, 0x0000000c,
- 0x8068d840, 0x406cd000, 0x806cd9c0, 0x040207fb,
- 0x4871000a, 0x486d0005, 0x832cd400, 0x00000006,
- 0x48690008, 0x4080d000, 0x0401feb2, 0x80c589c0,
- 0x040207ea, 0x59a0d408, 0x82697480, 0x0000dddd,
- 0x04020791, 0x0401f011, 0x4200d000, 0x0010dcbd,
- 0x4200d800, 0x0010056c, 0x4080e000, 0x0201f800,
- 0x0010032a, 0x0401f7b1, 0x4200d000, 0x0010dcbd,
- 0x4200d800, 0x00107185, 0x4080e000, 0x0201f800,
- 0x0010032a, 0x0401f7a3, 0x589d0000, 0x809d3800,
- 0x1c01f000, 0x829d3c80, 0x00000002, 0x48813800,
- 0x48853801, 0x40690800, 0x406d0000, 0x0201f800,
- 0x00101737, 0x40800000, 0x4084d000, 0x80c4dd00,
- 0x0201f800, 0x0010173e, 0x589d0801, 0x589d0000,
- 0x829d3c00, 0x00000002, 0x1c01f000, 0x829d3c80,
- 0x00000002, 0x48813800, 0x48853801, 0x40690800,
- 0x406d0000, 0x0201f800, 0x00101737, 0x40800000,
- 0x4084d000, 0x80c4dd40, 0x0201f800, 0x0010173e,
- 0x589d0801, 0x589d0000, 0x829d3c00, 0x00000002,
- 0x1c01f000, 0x809d3840, 0x48813800, 0x4200d000,
- 0x000000ef, 0x0201f800, 0x001013c8, 0x59c4d0a3,
- 0x8468d55a, 0x8468d53a, 0x486b88a3, 0x0201f800,
- 0x0010141a, 0x80c589c0, 0x04000043, 0x4200d000,
- 0x00000001, 0x0201f800, 0x0010169d, 0x4200d000,
- 0x00000001, 0x0201f800, 0x00101623, 0x4178d000,
- 0x4200d800, 0x00000004, 0x0401ffd5, 0x4201d000,
- 0x00000014, 0x0201f800, 0x001059d2, 0x59c4d008,
- 0x8468d54e, 0x8268d500, 0xffffffe1, 0x486b8808,
- 0x4a0388a7, 0x0000f7f7, 0x4a038805, 0x04000001,
- 0x4200d000, 0xbe20bfff, 0x4200d800, 0x80018000,
- 0x0201f800, 0x00103a7b, 0x4200d000, 0xfffeffff,
- 0x4178d800, 0x0201f800, 0x00103a7b, 0x42010000,
- 0x00001387, 0x0401f008, 0x80817040, 0x04000048,
- 0x80810040, 0x42000000, 0xffffffff, 0x80817480,
- 0x04000009, 0x4201d000, 0x00000014, 0x0201f800,
- 0x001059d2, 0x0201f800, 0x001016e8, 0x80c589c0,
- 0x040007f2, 0x59c4d005, 0x8268dd00, 0x04000000,
- 0x8c68d534, 0x04020018, 0x59c4d0a4, 0x8268d500,
- 0x0000000f, 0x82697480, 0x00000008, 0x04020031,
- 0x0401f011, 0x0201f800, 0x00101428, 0x80c589c0,
- 0x04000006, 0x4178d000, 0x0201f800, 0x0010169d,
- 0x4178d000, 0x0401f7bc, 0x4200d000, 0x00000002,
- 0x0201f800, 0x0010169d, 0x4200d000, 0x00000002,
- 0x0401f7b5, 0x4200d000, 0x00020000, 0x0201f800,
- 0x00103a82, 0x4201d000, 0x00000064, 0x0201f800,
- 0x001059d2, 0x4200d000, 0xfeffffff, 0x4200d800,
- 0x02000000, 0x0201f800, 0x00103a7b, 0x4200d000,
- 0xfdffffff, 0x4178d800, 0x0201f800, 0x00103a7b,
- 0x4a038805, 0x04000001, 0x59c4d0a4, 0x8268d500,
- 0x0000000f, 0x4178d800, 0x8068d1c0, 0x04020005,
- 0x4200d800, 0x00000001, 0x0401f002, 0x40c4d800,
- 0x406d8800, 0x589d0000, 0x809d3800, 0x1c01f000,
- 0x809d3840, 0x48a13800, 0x829d3c80, 0x0000000f,
- 0x409d4000, 0x829d3c80, 0x00000006, 0x48813800,
- 0x48853801, 0x48893802, 0x488d3803, 0x48913804,
- 0x48953805, 0x490fc857, 0x59c91040, 0x59a9080f,
- 0x59c518a3, 0x59c52008, 0x59c52880, 0x8d0e1d0e,
- 0x0402000e, 0x59a0d407, 0x82690500, 0x00000007,
- 0x82817480, 0x00000002, 0x04000015, 0x808101c0,
- 0x04000023, 0x80817040, 0x040000e0, 0x0201f800,
- 0x00101d06, 0x0401f18d, 0x0201f800, 0x00101444,
- 0x80c589c0, 0x040007f0, 0x4200d000, 0x00000002,
- 0x0201f800, 0x0010169d, 0x4200d000, 0x00000002,
- 0x0201f800, 0x00101623, 0x0401f7e7, 0x8d0e1d0e,
- 0x0402000c, 0x0201f800, 0x0010474e, 0x80c589c0,
- 0x04020170, 0x836d7480, 0x00000003, 0x04020005,
- 0x59c4d0a4, 0x8268d500, 0x0000000f, 0x04000010,
- 0x0201f800, 0x00101d0a, 0x0401f170, 0x4200d000,
- 0x000000c0, 0x4200d800, 0x00000002, 0x0401ff28,
- 0x4080d000, 0x4200d800, 0x00000008, 0x0401ff24,
- 0x0401ff35, 0x80c589c0, 0x040000bb, 0x59a0d410,
- 0x8068d0e0, 0x59a0da10, 0x406c0000, 0x8068d540,
- 0x48694000, 0x497b4408, 0x4979400b, 0x4979400c,
- 0x4979400d, 0x49794002, 0x49794001, 0x0201f800,
- 0x00102488, 0x0201f800, 0x001061ab, 0x598e600f,
- 0x0201f800, 0x00106426, 0x0201f800, 0x001061ab,
- 0x417a3000, 0x0201f800, 0x001067aa, 0x59926004,
- 0x813261c0, 0x0400000d, 0x0201f800, 0x0010633f,
- 0x0201f800, 0x0010617d, 0x0201f800, 0x00106186,
- 0x42027800, 0x00001000, 0x42028000, 0x0000002e,
- 0x0201f800, 0x0010e46f, 0x811a3000, 0x83197480,
- 0x00000004, 0x040007ec, 0x040017eb, 0x0201f800,
- 0x001007c8, 0x59a8d06a, 0x8068d1c0, 0x0402007f,
- 0x49794004, 0x497b4002, 0x40a0d000, 0x0401fe49,
- 0x59a0d408, 0x82697480, 0x0000dddd, 0x04000126,
- 0x40a0d000, 0x0401fdbb, 0x59a0d408, 0x82697480,
- 0x0000dddd, 0x04000120, 0x59a0d00d, 0x8068d1c0,
- 0x040200ef, 0x4979400e, 0x40a0d000, 0x0201f800,
- 0x0010da0f, 0x0201f800, 0x0010d758, 0x58a0d004,
- 0x8068d1c0, 0x04000053, 0x58a0e00e, 0x80717040,
- 0x0400007c, 0x59c8d001, 0x8068d1c0, 0x04020070,
- 0x59a0d002, 0x42000000, 0xfeedbeef, 0x80697480,
- 0x040000d8, 0x4a014003, 0x10000000, 0x40a0d000,
- 0x0401fc64, 0x4a034002, 0xfeedbeef, 0x40a0d000,
- 0x0201f800, 0x0010da77, 0x59a0d408, 0x82697480,
- 0x0000dddd, 0x04000028, 0x40a0d000, 0x0401fcb5,
- 0x59a0d408, 0x82697480, 0x0000dddd, 0x04000022,
- 0x0201f800, 0x0010d79f, 0x59c4d005, 0x8c68d534,
- 0x040200cf, 0x0201f800, 0x00102491, 0x80c589c0,
- 0x040200ce, 0x59a0d00d, 0x8068d1c0, 0x04000016,
- 0x59a26000, 0x59a0d40d, 0x8068d1c0, 0x04000004,
- 0x5930d00e, 0x8068d1c0, 0x040207c7, 0x59a26001,
- 0x59a0d20d, 0x8068d1c0, 0x04000004, 0x5930d00e,
- 0x8068d1c0, 0x040207c0, 0x58a0d002, 0x8068d1c0,
- 0x040207bd, 0x58a0d001, 0x8068d1c0, 0x040207ba,
- 0x0401fce6, 0x58a0e00e, 0x58a0d000, 0x8068d040,
- 0x48694000, 0x4200d800, 0x00030d40, 0x80717040,
- 0x04020042, 0x40a0d000, 0x0401fcf3, 0x80c589c0,
- 0x04020051, 0x58a0d000, 0x8068d1c0, 0x04020047,
- 0x0401f04d, 0x59c8d001, 0x8068d1c0, 0x040207af,
- 0x40a0d000, 0x0201f800, 0x0010da77, 0x59a0d408,
- 0x82697480, 0x0000dddd, 0x040007a8, 0x0201f800,
- 0x00102491, 0x80c589c0, 0x040007f3, 0x0201f800,
- 0x0010dace, 0x4a01400d, 0x0000aaaa, 0x4a01400e,
- 0x00000001, 0x0401f79d, 0x59c4d001, 0x8468d518,
- 0x486b8801, 0x0401f77f, 0x4200d000, 0x000000c0,
- 0x4080d800, 0x0401fe6a, 0x0401fe7b, 0x80c589c0,
- 0x04020747, 0x4088d000, 0x408cd800, 0x4090e000,
- 0x0201f800, 0x0010032a, 0x0401f741, 0x40a0d000,
- 0x0201f800, 0x0010dadc, 0x80c589c0, 0x0400078d,
- 0x4a01400e, 0x00000001, 0x4200e000, 0x00000001,
- 0x58a0d000, 0x8068d040, 0x48694000, 0x4200d800,
- 0x00030d40, 0x80717040, 0x04020004, 0x0401f7c2,
- 0x806cd840, 0x04000004, 0x59c0d007, 0x8c68d504,
- 0x040007fc, 0x59c0d007, 0x8c68d504, 0x0402005f,
- 0x59c0d007, 0x8268d500, 0x000501c0, 0x04000058,
- 0x4a01400d, 0x0000dddd, 0x40a0d000, 0x0401fca6,
- 0x80c589c0, 0x04020004, 0x58a0d000, 0x8068d1c0,
- 0x0402074c, 0x0201f800, 0x001064c5, 0x0201f800,
- 0x0010d7a5, 0x4201d000, 0x000186a0, 0x48978880,
- 0x48938808, 0x488f88a3, 0x4887500f, 0x488b9040,
- 0x42038000, 0x00007700, 0x4a038009, 0xf4f60000,
- 0x4a038891, 0x0000ffff, 0x4a03900d, 0x00000040,
- 0x0201f800, 0x00100684, 0x4a0370e8, 0x00000001,
- 0x59a8d06a, 0x8068d1c0, 0x04020048, 0x59a0d407,
- 0x8268d500, 0x00000003, 0x82697480, 0x00000002,
- 0x04000013, 0x4200d000, 0x000000c0, 0x4200d800,
- 0xfffffffc, 0x0401fe04, 0x4178d000, 0x4200d800,
- 0xfffffff7, 0x0401fe00, 0x4178d000, 0x4200d800,
- 0xfffffffb, 0x0401fdfc, 0x0201f800, 0x0010476a,
- 0x40c50000, 0x80c589c0, 0x04000034, 0x59a0d408,
- 0x82697480, 0x0000dddd, 0x0400000f, 0x58a0d80b,
- 0x806cd9c0, 0x04020007, 0x58a0d00c, 0x8068d1c0,
- 0x04020004, 0x58a0d00d, 0x8068d1c0, 0x0400003d,
- 0x486f4407, 0x58a0d00c, 0x486b4208, 0x58a0d00d,
- 0x486b4408, 0x0201f800, 0x00101d12, 0x0401f037,
- 0x4a014003, 0x10000004, 0x0401f729, 0x40a0d000,
- 0x0201f800, 0x0010da0f, 0x0401f70f, 0x0201f800,
- 0x0010dace, 0x0401f7a7, 0x40a0d000, 0x0401fc4e,
- 0x80c589c0, 0x040007a5, 0x0401f7ab, 0x4a01400d,
- 0x0000bbbb, 0x0401f787, 0x4a01400d, 0x0000cccc,
- 0x58a0d000, 0x486b4210, 0x58a0d000, 0x8068d120,
- 0x486b4410, 0x0401f77f, 0x59a8d06b, 0x0201f800,
- 0x001018fe, 0x0401f7b6, 0x4a0388a7, 0x0000f7f7,
- 0x4200d000, 0xbeffffff, 0x4200d800, 0x80018000,
- 0x0201f800, 0x00103a7b, 0x4200d000, 0xfffeffff,
- 0x4080d800, 0x0201f800, 0x00103a7b, 0x0401f7c0,
- 0x4a034407, 0x00000016, 0x0201f800, 0x00101d02,
- 0x0401f006, 0x40a0d000, 0x0401fc27, 0x0401f786,
- 0x0201f800, 0x00101cbf, 0x589d2805, 0x589d2004,
- 0x589d1803, 0x589d1002, 0x589d0801, 0x589d0000,
- 0x829d3c00, 0x00000015, 0x589d4000, 0x809d3800,
- 0x1c01f000, 0x4937c857, 0x5934d200, 0x8468d502,
- 0x486a6a00, 0x1c01f000, 0x829d3c80, 0x00000002,
- 0x48813800, 0x48853801, 0x59a8d006, 0x82690d00,
- 0x00004000, 0x4178d800, 0x8c68d51c, 0x0402001f,
- 0x4937c857, 0x42010000, 0x00000001, 0x0201f800,
- 0x00107185, 0x40c66000, 0x80c589c0, 0x04020003,
- 0x4080d800, 0x0401f015, 0x4935880a, 0x48818c07,
- 0x40867800, 0x0201f800, 0x00103d92, 0x59a8d016,
- 0x8068d000, 0x486b5016, 0x599cd019, 0x40867000,
- 0x8c68d50e, 0x04020003, 0x42027000, 0x00000004,
- 0x0201f800, 0x001071b6, 0x599cd208, 0x486a6c12,
- 0x41790000, 0x4080d800, 0x406d8800, 0x589d0801,
- 0x589d0000, 0x829d3c00, 0x00000002, 0x1c01f000,
- 0x829d3c80, 0x00000004, 0x48813800, 0x48853801,
- 0x48893802, 0x488d3803, 0x41350800, 0x41451000,
- 0x412d1800, 0x4943c857, 0x493fc857, 0x0201f800,
- 0x001061ab, 0x40c50000, 0x59a8d073, 0x82697480,
- 0x00000000, 0x83f17500, 0x0c000000, 0x04000004,
- 0x82b97580, 0x0c000000, 0x04020069, 0x0201f800,
- 0x0010e718, 0x0201f800, 0x0010e708, 0x0201f800,
- 0x0010e7b0, 0x0201f800, 0x0010e913, 0x808101c0,
- 0x04000003, 0x0201f800, 0x0010619f, 0x417a8800,
- 0x0401f00a, 0x58c4d200, 0x8c68d50e, 0x0400000e,
- 0x81468800, 0x83457480, 0x000007ef, 0x83f17500,
- 0x03000000, 0x04000027, 0x0201f800, 0x00103e78,
- 0x40c66800, 0x80c589c0, 0x040007f6, 0x8d3e7d06,
- 0x040207f1, 0x497a6c0b, 0x8d3e7d18, 0x0400003f,
- 0x5935000f, 0x0401f007, 0x49410207, 0x40825800,
- 0x58810000, 0x492fc857, 0x0201f800, 0x000203ab,
- 0x808101c0, 0x040207f9, 0x497a680f, 0x497a6810,
- 0x4937c857, 0x4a026c00, 0x00000707, 0x497a6a03,
- 0x497a6811, 0x599cd401, 0x486a6a0b, 0x5934d402,
- 0x8268d500, 0x000000ff, 0x486a6c02, 0x81468800,
- 0x83457480, 0x000007ef, 0x040007dc, 0x040017db,
- 0x8d3e7d02, 0x0400002f, 0x497b5018, 0x42028800,
- 0x000007f0, 0x0401f007, 0x81468800, 0x83457480,
- 0x000007ff, 0x83f17500, 0x03000000, 0x04000025,
- 0x0201f800, 0x00103e78, 0x40c66800, 0x80c589c0,
- 0x040007f6, 0x48c7c857, 0x4a018c00, 0x00000707,
- 0x58c4d00c, 0x8068d1c0, 0x040207f0, 0x58c4d00f,
- 0x8068d1c0, 0x040207ed, 0x0201f800, 0x00103ab4,
- 0x81468800, 0x83457480, 0x000007ff, 0x040007ed,
- 0x040017ec, 0x0401f00f, 0x4937c857, 0x8d0e1d20,
- 0x04000004, 0x4a026c00, 0x00000707, 0x0401f7ad,
- 0x0201f800, 0x00103ab4, 0x0401f7aa, 0x8c68d506,
- 0x04000797, 0x0201f800, 0x0010a6f8, 0x0401f794,
- 0x40866800, 0x408a8800, 0x408e5800, 0x589d1803,
- 0x589d1002, 0x589d0801, 0x589d0000, 0x829d3c00,
- 0x00000004, 0x1c01f000, 0x829d3c80, 0x00000006,
- 0x48813800, 0x48853801, 0x48893802, 0x488d3803,
- 0x48913804, 0x48953805, 0x41352800, 0x41412000,
- 0x41451800, 0x412d1000, 0x4933c857, 0x493fc857,
- 0x0201f800, 0x001061ab, 0x40c50800, 0x5932680a,
- 0x813669c0, 0x0400002b, 0x5934d403, 0x406a8800,
- 0x42028000, 0x00000029, 0x0201f800, 0x0010e5d8,
- 0x0201f800, 0x0010e6a9, 0x0201f800, 0x0010e742,
- 0x0201f800, 0x0010eb5d, 0x4937c857, 0x8d3e7d06,
- 0x0402001f, 0x497a6c0b, 0x8d3e7d18, 0x04000022,
- 0x5935000f, 0x808101c0, 0x0400000b, 0x49410207,
- 0x40825800, 0x58810000, 0x492fc857, 0x0201f800,
- 0x000203ab, 0x808101c0, 0x040207f9, 0x4882680f,
- 0x48826810, 0x4937c857, 0x4a026c00, 0x00000707,
- 0x497a6a03, 0x497a6811, 0x599cd401, 0x486a6a0b,
- 0x5934d402, 0x8268d500, 0x000000ff, 0x486a6c02,
- 0x808509c0, 0x04000014, 0x0401f00d, 0x5934d200,
- 0x8c68d50e, 0x040207fb, 0x497a6c0b, 0x8d3e7d18,
- 0x040207e0, 0x8d0e1d20, 0x04000008, 0x4a026c00,
- 0x00000707, 0x808509c0, 0x04000007, 0x0201f800,
- 0x0010619f, 0x0401f004, 0x0201f800, 0x00103ab4,
- 0x0401f7ec, 0x408a5800, 0x408e8800, 0x40928000,
- 0x40966800, 0x589d2805, 0x589d2004, 0x589d1803,
- 0x589d1002, 0x589d0801, 0x589d0000, 0x829d3c00,
- 0x00000006, 0x1c01f000, 0x809d3840, 0x48813800,
- 0x4937c857, 0x42010000, 0x00000001, 0x0201f800,
- 0x00107185, 0x40c66000, 0x80c589c0, 0x0400001d,
- 0x4935880a, 0x5934d403, 0x82697480, 0x000007fe,
- 0x04000003, 0x417a7800, 0x0401ff90, 0x48826407,
- 0x417a7800, 0x0201f800, 0x00103d92, 0x4200d000,
- 0x00000003, 0x0201f800, 0x00103d9c, 0x836d7480,
- 0x00000003, 0x04000004, 0x59a8d016, 0x8068d000,
- 0x486b5016, 0x42027000, 0x00000002, 0x0201f800,
- 0x001071b6, 0x599cd208, 0x486a6c12, 0x41790000,
- 0x40818800, 0x589d0000, 0x809d3800, 0x1c01f000,
- 0x829d3c80, 0x00000002, 0x48813800, 0x48853801,
- 0x497bc856, 0x42010000, 0x00000001, 0x48835017,
- 0x42028800, 0x000007fe, 0x4200d000, 0x00fffffe,
- 0x0201f800, 0x00103dd5, 0x40c66800, 0x80c589c0,
- 0x04000012, 0x0401fea4, 0x0401ffc4, 0x40c50800,
- 0x80c589c0, 0x0402000d, 0x599cd208, 0x486a6c12,
- 0x59a8d21b, 0x8268d500, 0xffffdefc, 0x486b521b,
- 0x59a8d21b, 0x8468d54e, 0x486b521b, 0x0201f800,
- 0x00108c7d, 0x40850000, 0x40818800, 0x589d0801,
- 0x589d0000, 0x829d3c00, 0x00000002, 0x1c01f000,
- 0x829d3c80, 0x00000005, 0x48813800, 0x48853801,
- 0x48893802, 0x488d3803, 0x48913804, 0x41791000,
- 0x59a8d817, 0x59a8d00f, 0x82691d00, 0x000000ff,
- 0x486fc857, 0x826d7480, 0x0000ffff, 0x04000059,
- 0x826d7480, 0x0000007e, 0x83f17500, 0x03000000,
- 0x04000044, 0x406d1000, 0x497bc856, 0x406c0000,
- 0x4200d000, 0x0000007e, 0x8068b480, 0x8058b1c0,
- 0x0400003c, 0x42012000, 0x00101b0f, 0x0401f014,
- 0x42010800, 0x00000001, 0x0201f800, 0x00104435,
- 0x0201f800, 0x0010417a, 0x80c57040, 0x04000034,
- 0x59a8d056, 0x8c68d502, 0x04020041, 0x4937c857,
- 0x599cd019, 0x8c68d50e, 0x04000066, 0x8058b040,
- 0x80891000, 0x8058b1c0, 0x04000026, 0x40880000,
- 0x8090d400, 0x5868d000, 0x82690500, 0x000000ff,
- 0x408c0000, 0x80817480, 0x040007f5, 0x4080d000,
- 0x0201f800, 0x0010f133, 0x80c589c0, 0x0400005e,
- 0x59a8d06d, 0x8c68d502, 0x04000007, 0x4200d000,
- 0x00000010, 0x0201f800, 0x00104440, 0x80c57040,
- 0x04000010, 0x41790800, 0x0201f800, 0x00103e78,
- 0x80c589c0, 0x040207d3, 0x599cd019, 0x8c68d50e,
- 0x040207df, 0x4080d000, 0x0201f800, 0x00103ddb,
- 0x80c589c0, 0x040207cd, 0x488b5017, 0x0401f048,
- 0x4a035017, 0x0000ffff, 0x0401f045, 0x8d0e1d02,
- 0x04020034, 0x59a8d056, 0x8c68d500, 0x04000005,
- 0x0201f800, 0x00101acf, 0x80c57040, 0x040007cc,
- 0x0401fe2e, 0x80c57040, 0x040207c9, 0x0401f7ef,
- 0x4200b000, 0x0000007e, 0x0401f7b1, 0x0201f800,
- 0x001041aa, 0x40c50000, 0x80c589c0, 0x040207c0,
- 0x808509c0, 0x04000029, 0x0201f800, 0x00101acf,
- 0x80c57040, 0x040007ba, 0x42026000, 0x0010f64c,
- 0x4936600a, 0x48826009, 0x40827800, 0x0401fed3,
- 0x4200d000, 0x0010bd1d, 0x0201f800, 0x0010ae0f,
- 0x8d0e1d20, 0x040007ae, 0x41450000, 0x41410800,
- 0x5934d403, 0x406a8800, 0x42028000, 0x00000029,
- 0x4178d000, 0x4200d800, 0x00000008, 0x0201f800,
- 0x0010a016, 0x40828800, 0x40868000, 0x0401f7a0,
- 0x5934d200, 0x8c68d50e, 0x04000796, 0x0401f7ca,
- 0x0401fdf9, 0x0401ff19, 0x80c57040, 0x04020798,
- 0x488b5017, 0x0401f796, 0x0201f800, 0x00103e46,
- 0x0401f793, 0x4937c857, 0x0401f7b8, 0x589d2004,
- 0x589d1803, 0x589d1002, 0x589d0801, 0x589d0000,
- 0x829d3c00, 0x00000005, 0x1c01f000, 0x829d3c80,
- 0x00000005, 0x48813800, 0x48853801, 0x48893802,
- 0x488d3803, 0x48913804, 0x59a8d00f, 0x82691d00,
- 0x000000ff, 0x59a90817, 0x82857480, 0x0000ffff,
- 0x0400006a, 0x41791000, 0x42012000, 0x0010c2c7,
- 0x80840104, 0x8090d400, 0x5868d000, 0x8284dd00,
- 0x00000003, 0x826d7480, 0x00000002, 0x04000057,
- 0x826d7480, 0x00000002, 0x83f17500, 0x03000000,
- 0x04000030, 0x806d7040, 0x04000052, 0x82690500,
- 0x000000ff, 0x82817480, 0x000000ff, 0x04000032,
- 0x40800000, 0x4200d000, 0x00101b0f, 0x8068d400,
- 0x5868d000, 0x8068d110, 0x82697480, 0x00000080,
- 0x0400001c, 0x408c0000, 0x80817480, 0x04000019,
- 0x808101c0, 0x04000017, 0x59a8d06d, 0x8c68d502,
- 0x04000007, 0x4200d000, 0x00000010, 0x0201f800,
- 0x00104440, 0x80c57040, 0x0400003f, 0x417a8800,
- 0x4080d000, 0x0201f800, 0x0010f1ac, 0x80c589c0,
- 0x0400002c, 0x0201f800, 0x00103e26, 0x80c589c0,
- 0x0402002e, 0x599cd019, 0x8c68d50e, 0x0400001a,
- 0x80850800, 0x80897040, 0x040207c6, 0x0401f030,
- 0x826d7480, 0x00000003, 0x040207d1, 0x8068d130,
- 0x82690500, 0x000000ff, 0x82817480, 0x000000ff,
- 0x040207d0, 0x830cd500, 0x00000003, 0x04020022,
- 0x59a8d056, 0x8468d542, 0x486b5056, 0x4a035017,
- 0x0000ffff, 0x0401fefb, 0x42011000, 0x00000001,
- 0x0401f7e9, 0x4080d000, 0x0201f800, 0x00103dd5,
- 0x80c589c0, 0x04000007, 0x0201f800, 0x00104435,
- 0x0401fd7d, 0x0401fe9d, 0x80c589c0, 0x040007dd,
- 0x48875017, 0x0401f00e, 0x8068d120, 0x0401f7b0,
- 0x8068d110, 0x0401f7ae, 0x0201f800, 0x00104435,
- 0x0401fd76, 0x0401f7f5, 0x42010800, 0x00000001,
- 0x0401f795, 0x4a035017, 0x0000ffff, 0x589d2004,
- 0x589d1803, 0x589d1002, 0x589d0801, 0x589d0000,
- 0x829d3c00, 0x00000005, 0x1c01f000, 0x8c68d504,
- 0x04000004, 0x4a035017, 0x0000ffff, 0x0401f009,
- 0x59a8d056, 0x8c68d500, 0x04000003, 0x8c68d502,
- 0x04000003, 0x0401fecb, 0x0401f002, 0x0401ff70,
- 0x1c01f000, 0x809d3840, 0x48813800, 0x59a9021b,
- 0x0201f800, 0x001040de, 0x80c589c0, 0x04000002,
- 0x0401f01d, 0x0201f800, 0x0010474e, 0x80c589c0,
- 0x04000007, 0x8c810500, 0x0402000a, 0x8c81050e,
- 0x040207f8, 0x0401fe8f, 0x0401f013, 0x8c810506,
- 0x040207f9, 0x4080d000, 0x0401ffdd, 0x0401f00e,
- 0x0201f800, 0x00101b03, 0x80c589c0, 0x040207ed,
- 0x0201f800, 0x0010474e, 0x80c589c0, 0x04000004,
- 0x4a035017, 0x0000ffff, 0x0401f003, 0x4080d000,
- 0x0401ffcf, 0x589d0000, 0x809d3800, 0x1c01f000,
- 0x829d3c80, 0x00000003, 0x48813800, 0x48853801,
- 0x48893802, 0x40690800, 0x406d1000, 0x41bd0000,
- 0x0201f800, 0x00106186, 0x5880d031, 0x41300000,
- 0x80697480, 0x04000018, 0x5880d030, 0x41300000,
- 0x80697480, 0x0400001f, 0x5930d800, 0x806cd9c0,
- 0x04020008, 0x59317001, 0x48b91001, 0x5930d001,
- 0x8068d1c0, 0x04020025, 0x488a680c, 0x0401f038,
- 0x5930d801, 0x806cd9c0, 0x04000022, 0x59317000,
- 0x48b8d800, 0x486d0800, 0x497a6001, 0x497a6000,
- 0x0401f02f, 0x5930d801, 0x806cd9c0, 0x04000010,
- 0x5930d000, 0x8068d1c0, 0x04020025, 0x486d0030,
- 0x59317001, 0x48b90031, 0x497a6001, 0x0401f024,
- 0x5930d001, 0x8068d1c0, 0x04020013, 0x48850030,
- 0x48690800, 0x486a680c, 0x0401f01d, 0x5930d000,
- 0x8068d1c0, 0x04020012, 0x486d0031, 0x486d0030,
- 0x497a680c, 0x0401f016, 0x486e6001, 0x0401f014,
- 0x59317000, 0x48b90800, 0x486e680c, 0x497a6000,
- 0x0401f00f, 0x59317001, 0x48b90030, 0x59317001,
- 0x48b90800, 0x497a6001, 0x0401f009, 0x59317000,
- 0x48b90031, 0x486e6000, 0x0401f7ee, 0x59317000,
- 0x48b8d800, 0x497a6000, 0x0401f7da, 0x589d1002,
- 0x589d0801, 0x589d0000, 0x829d3c00, 0x00000003,
- 0x1c01f000, 0x809d3840, 0x48a13800, 0x829d3c80,
- 0x00000004, 0x409d4000, 0x829d3c80, 0x00000005,
- 0x48813800, 0x48853801, 0x48893802, 0x488d3803,
- 0x48913804, 0x41790800, 0x40850000, 0x4933c857,
- 0x0201f800, 0x001061ab, 0x40c52000, 0x41351800,
- 0x41191000, 0x49914003, 0x49d14000, 0x49a54001,
- 0x49154002, 0x5932680a, 0x59bce031, 0x4070d800,
- 0x8070e1c0, 0x04020008, 0x0401f01e, 0x406ce000,
- 0x586cd800, 0x806cd9c0, 0x0400001a, 0x808509c0,
- 0x04020018, 0x41300000, 0x806d7480, 0x04000011,
- 0x586cd00a, 0x41340000, 0x80697480, 0x040207f4,
- 0x406d0000, 0x586cd801, 0x806cd9c0, 0x040007f2,
- 0x41300000, 0x0401f005, 0x406d0000, 0x586cd801,
- 0x806cd9c0, 0x040007ec, 0x806d7480, 0x040207fb,
- 0x42010800, 0x00000001, 0x806cd9c0, 0x040207e8,
- 0x80857040, 0x04000029, 0x417a3000, 0x0201f800,
- 0x001067aa, 0x5990d004, 0x41300000, 0x80697480,
- 0x0400000f, 0x811a3000, 0x83197480, 0x00000004,
- 0x040007f7, 0x040017f6, 0x408a3000, 0x408e6800,
- 0x58a32003, 0x58a3a000, 0x58a34801, 0x58a22802,
- 0x80917040, 0x04020019, 0x0401f011, 0x42010800,
- 0x00000001, 0x0201f800, 0x0010633f, 0x0201f800,
- 0x0010617d, 0x0201f800, 0x00106186, 0x408a3000,
- 0x408e6800, 0x58a32003, 0x58a3a000, 0x58a34801,
- 0x58a22802, 0x80917040, 0x04020008, 0x0201f800,
- 0x0010619f, 0x0401f005, 0x4070d000, 0x4080d800,
- 0x0401ff40, 0x0401f7e1, 0x40858800, 0x589d2004,
- 0x589d1803, 0x589d1002, 0x589d0801, 0x589d0000,
- 0x829d3c00, 0x00000009, 0x589d4000, 0x809d3800,
- 0x1c01f000, 0x829d3c80, 0x00000002, 0x48813800,
- 0x48853801, 0x40690000, 0x59310800, 0x497a6000,
- 0x0201f800, 0x00106186, 0x808101c0, 0x04000008,
- 0x48850000, 0x598cd00a, 0x41300000, 0x80697480,
- 0x0402000b, 0x4883180a, 0x0401f009, 0x598cd00a,
- 0x41300000, 0x80697480, 0x04000003, 0x4887180b,
- 0x0401f003, 0x4883180a, 0x4883180b, 0x0201f800,
- 0x00106198, 0x589d0801, 0x589d0000, 0x829d3c00,
- 0x00000002, 0x1c01f000, 0x829d3c80, 0x00000002,
- 0x48813800, 0x48853801, 0x598d000b, 0x41790800,
- 0x4933c857, 0x813261c0, 0x04020007, 0x0401f00a,
- 0x41300000, 0x80817480, 0x0400000e, 0x40810800,
- 0x58810000, 0x808101c0, 0x040207fa, 0x4178d000,
- 0x0401f015, 0x4200d000, 0x000005aa, 0x4080d800,
- 0x4084e000, 0x0201f800, 0x0010032a, 0x0401f7f6,
- 0x4084d000, 0x0401ffc4, 0x598cd00f, 0x41300000,
- 0x80697480, 0x04000005, 0x497a6008, 0x4200d000,
- 0x00000001, 0x0401f004, 0x0201f800, 0x00106782,
- 0x0401f7fa, 0x40698800, 0x589d0801, 0x589d0000,
- 0x829d3c00, 0x00000002, 0x1c01f000, 0x829d3c80,
- 0x00000002, 0x48813800, 0x48853801, 0x40690000,
- 0x59310800, 0x497a6000, 0x0201f800, 0x00106186,
- 0x808101c0, 0x04000008, 0x48850000, 0x598cd008,
- 0x41300000, 0x80697480, 0x0402000b, 0x48831808,
- 0x0401f009, 0x598cd008, 0x41300000, 0x80697480,
- 0x04000003, 0x48871809, 0x0401f003, 0x48831808,
- 0x48831809, 0x0201f800, 0x00106198, 0x589d0801,
- 0x589d0000, 0x829d3c00, 0x00000002, 0x1c01f000,
- 0x829d3c80, 0x00000002, 0x48813800, 0x48853801,
- 0x598d0009, 0x41790800, 0x4933c857, 0x813261c0,
- 0x04020007, 0x0401f017, 0x41300000, 0x80817480,
- 0x04000007, 0x40810800, 0x58810000, 0x808101c0,
- 0x040207fa, 0x4178d000, 0x0401f01a, 0x4084d000,
- 0x0401ffcb, 0x598cd00f, 0x41300000, 0x80697480,
- 0x04000011, 0x5930d403, 0x82697480, 0x00000042,
- 0x0400000b, 0x4200d000, 0x00000001, 0x0401f00d,
- 0x4200d000, 0x00000561, 0x4080d800, 0x4084e000,
- 0x0201f800, 0x0010032a, 0x0401f7e9, 0x497a6008,
- 0x0401f7f5, 0x0201f800, 0x00106782, 0x0401f7ee,
- 0x40698800, 0x589d0801, 0x589d0000, 0x829d3c00,
- 0x00000002, 0x1c01f000, 0x829d3c80, 0x00000002,
- 0x48813800, 0x48853801, 0x40690000, 0x59310800,
- 0x497a6000, 0x0201f800, 0x00106186, 0x808101c0,
- 0x04000008, 0x48850000, 0x598cd004, 0x41300000,
- 0x80697480, 0x0402000b, 0x48831804, 0x0401f009,
- 0x598cd004, 0x41300000, 0x80697480, 0x04000003,
- 0x48871805, 0x0401f003, 0x48831804, 0x48831805,
- 0x0201f800, 0x00106198, 0x589d0801, 0x589d0000,
- 0x829d3c00, 0x00000002, 0x1c01f000, 0x829d3c80,
- 0x00000002, 0x48813800, 0x48853801, 0x598d0005,
- 0x40810800, 0x4933c857, 0x813261c0, 0x04020007,
- 0x0401f022, 0x41300000, 0x80817480, 0x04000007,
- 0x40810800, 0x58810000, 0x808101c0, 0x040207fa,
- 0x4178d000, 0x0401f02b, 0x598cd00f, 0x80697480,
- 0x04000025, 0x0201f800, 0x00106186, 0x598cd005,
- 0x40800000, 0x80697480, 0x04000017, 0x598cd004,
- 0x80697480, 0x04000009, 0x58817000, 0x48b90800,
- 0x49790000, 0x0201f800, 0x00106198, 0x4200d000,
- 0x00000001, 0x0401f017, 0x48871804, 0x49790000,
- 0x49790800, 0x0401f7f8, 0x4200d000, 0x000005ed,
- 0x4080d800, 0x4080e000, 0x0201f800, 0x0010032a,
- 0x0401f7de, 0x58817000, 0x48bb1805, 0x49790000,
- 0x598cd004, 0x80697480, 0x040207eb, 0x497b1804,
- 0x0401f7e9, 0x0201f800, 0x00106782, 0x0401f7da,
- 0x40698800, 0x589d0801, 0x589d0000, 0x829d3c00,
- 0x00000002, 0x1c01f000, 0x829d3c80, 0x00000002,
- 0x48813800, 0x48853801, 0x41790000, 0x0201f800,
- 0x001061ab, 0x40c50800, 0x0401ff62, 0x80c57040,
- 0x04000007, 0x0401ff11, 0x80c57040, 0x04000004,
- 0x0401ffaf, 0x80c57040, 0x04020002, 0x40c50000,
- 0x80857040, 0x04020003, 0x0201f800, 0x0010619f,
- 0x40818800, 0x589d0801, 0x589d0000, 0x829d3c00,
- 0x00000002, 0x1c01f000, 0x829d3c80, 0x00000002,
- 0x48813800, 0x48853801, 0x5c00d000, 0x4c680000,
- 0x486bc857, 0x41350000, 0x412d0800, 0x5932680a,
- 0x59325809, 0x4933c857, 0x4943c857, 0x493fc857,
- 0x5930d407, 0x486bc857, 0x5930dc07, 0x806c0040,
- 0x4000d000, 0x82697480, 0x00000012, 0x83f17500,
- 0x03000000, 0x04000015, 0x0c01f001, 0x0010e4cc,
- 0x0010e4a8, 0x0010e4b2, 0x0010e4cc, 0x0010e4d5,
- 0x0010e4e2, 0x0010e49b, 0x0010e49b, 0x0010e4ec,
- 0x0010e4f3, 0x0010e49b, 0x0010e49b, 0x0010e49b,
- 0x0010e49b, 0x0010e49b, 0x0010e4fc, 0x0010e4fc,
- 0x0010e4a1, 0x0010e4a1, 0x4200d000, 0x00000a7f,
- 0x4130e000, 0x0201f800, 0x0010032a, 0x0401f0a1,
- 0x0201f800, 0x0010894c, 0x80c589c0, 0x04020077,
- 0x0201f800, 0x00107144, 0x0401f09a, 0x0201f800,
- 0x0010894c, 0x80c589c0, 0x04020066, 0x0201f800,
- 0x00107144, 0x8d3e7d1c, 0x04000092, 0x497a600a,
- 0x0401f090, 0x5930d008, 0x8c68d500, 0x04020053,
- 0x0201f800, 0x0010894c, 0x80c589c0, 0x040007f4,
- 0x592cd205, 0x8268d500, 0x000000ff, 0x82697480,
- 0x00000014, 0x04000003, 0x0201f800, 0x00108a55,
- 0x4a025a05, 0x00000103, 0x49425a07, 0x497a580a,
- 0x0201f800, 0x00108afb, 0x0201f800, 0x0010a320,
- 0x0201f800, 0x000203ab, 0x0401f7e1, 0x0201f800,
- 0x0010e81e, 0x80c589c0, 0x04020035, 0x0201f800,
- 0x00108c94, 0x0201f800, 0x001078e7, 0x0401f7d8,
- 0x42000000, 0x0010f628, 0x81317480, 0x0400004a,
- 0x0201f800, 0x0010894c, 0x80c589c0, 0x040007d0,
- 0x4200d000, 0x000009c8, 0x412cd800, 0x4130e000,
- 0x0401f7bd, 0x5930d008, 0x8c68d500, 0x0402002a,
- 0x0201f800, 0x0010894c, 0x80c589c0, 0x040007c4,
- 0x0201f800, 0x00109ff8, 0x0401f7c1, 0x0201f800,
- 0x0010894c, 0x80c589c0, 0x040007bd, 0x0201f800,
- 0x00105fb6, 0x0401f7ba, 0x0201f800, 0x0010894c,
- 0x80c589c0, 0x040007b6, 0x49425a07, 0x497a5c0a,
- 0x0201f800, 0x000203ab, 0x0401f7b1, 0x0201f800,
- 0x0010894c, 0x80c589c0, 0x0402000b, 0x59325818,
- 0x0201f800, 0x00100589, 0x0401f7a9, 0x0201f800,
- 0x00101a68, 0x0401f7ca, 0x0201f800, 0x00100bd5,
- 0x0401f7ac, 0x49425a07, 0x0201f800, 0x000203ab,
- 0x0401f7f3, 0x0201f800, 0x00100bd5, 0x0401f7d5,
- 0x49425a07, 0x0201f800, 0x000203ab, 0x5930d21e,
- 0x82697480, 0x00000003, 0x04020795, 0x0201f800,
- 0x00108a55, 0x0401f792, 0x49425a07, 0x497a5c07,
- 0x0201f800, 0x000203ab, 0x0201f800, 0x00107144,
- 0x0401f020, 0x0201f800, 0x0010894c, 0x80c589c0,
- 0x04000016, 0x59a8e052, 0x412c0000, 0x80717480,
- 0x04000005, 0x4200d000, 0x000009e1, 0x412cd800,
- 0x0401f771, 0x592d7000, 0x48bb5052, 0x592cd000,
- 0x8068d1c0, 0x04020002, 0x486b5053, 0x592cd205,
- 0x82697480, 0x00000055, 0x04000007, 0x49425a07,
- 0x0201f800, 0x000203ab, 0x497a6203, 0x497a6009,
- 0x0401f004, 0x0201f800, 0x00100580, 0x0401f7fb,
- 0x40826800, 0x40865800, 0x589d0801, 0x589d0000,
- 0x829d3c00, 0x00000002, 0x1c01f000, 0x809d3840,
- 0x48813800, 0x5930dc07, 0x406c0000, 0x826d7480,
- 0x00000013, 0x83f17500, 0x03000000, 0x04000016,
- 0x0c01f001, 0x0010e5a8, 0x0010e57f, 0x0010e58f,
- 0x0010e59b, 0x0010e56e, 0x0010e571, 0x0010e5b9,
- 0x0010e5a8, 0x0010e5a8, 0x0010e5a8, 0x0010e5a8,
- 0x0010e566, 0x0010e566, 0x0010e5a8, 0x0010e566,
- 0x0010e5a8, 0x0010e5a8, 0x0010e5ac, 0x0010e5c4,
- 0x0010e5c4, 0x4200d000, 0x00000b72, 0x4130e000,
- 0x0201f800, 0x0010032a, 0x4200d800, 0x00000001,
- 0x0401f067, 0x4178d800, 0x8d3e7d1a, 0x04020064,
- 0x833ce500, 0x00000001, 0x4178d800, 0x8d3e7d00,
- 0x0402005f, 0x8d3e7d18, 0x04000003, 0x8d3e7d16,
- 0x040007f2, 0x5930d421, 0x4070d800, 0x8c68d500,
- 0x04020057, 0x0401f7ed, 0x8d3e7d1a, 0x04020019,
- 0x8d3e7d00, 0x04020017, 0x833d0500, 0x00001000,
- 0x8d3e7d18, 0x040207e5, 0x8d3e7d06, 0x040007e3,
- 0x0201f800, 0x00108c3e, 0x4080d800, 0x80c589c0,
- 0x04020047, 0x0401f7dd, 0x8d3e7d00, 0x040007db,
- 0x5930d21e, 0x82697480, 0x00000003, 0x04020005,
- 0x0201f800, 0x001060d5, 0x80c589c0, 0x040207d3,
- 0x4178d800, 0x0401f03a, 0x8d3e7d00, 0x04020033,
- 0x5930d00a, 0x833cdd00, 0x00001000, 0x8d3e7d18,
- 0x040207ca, 0x8d3e7d06, 0x040007c8, 0x5868d200,
- 0x8c68d50e, 0x0402002e, 0x0401f7c4, 0x4178d800,
- 0x8d3e7d00, 0x0402002a, 0x0401f7c0, 0x833cd500,
- 0x00000001, 0x4178d800, 0x8d3e7d00, 0x04020024,
- 0x8d3e7d18, 0x04000005, 0x4200d800, 0x00000001,
- 0x8d3e7d16, 0x0400001e, 0x4068d800, 0x0401f01c,
- 0x4178d800, 0x8d3e7d00, 0x04020019, 0x833cd500,
- 0x00001000, 0x4200d800, 0x00000001, 0x8d3e7d18,
- 0x04020013, 0x4068d800, 0x0401f011, 0x59a8d074,
- 0x5868d400, 0x8268d580, 0x00000707, 0x8068d080,
- 0x8068d000, 0x8068013e, 0x4200d000, 0x00000001,
- 0x8068dc80, 0x0401f006, 0x0201f800, 0x001060d5,
- 0x40c4d800, 0x80c589c0, 0x040207ca, 0x406d8800,
- 0x589d0000, 0x809d3800, 0x1c01f000, 0x829d3c80,
- 0x00000006, 0x48813800, 0x48853801, 0x48893802,
- 0x488d3803, 0x48913804, 0x48953805, 0x4933c857,
- 0x0201f800, 0x001061ab, 0x40c52800, 0x41352000,
- 0x41311000, 0x412d1800, 0x41790800, 0x598e6005,
- 0x0401f00a, 0x5932680a, 0x813669c0, 0x04000005,
- 0x5934d403, 0x41440000, 0x80697480, 0x0400000b,
- 0x41310800, 0x59326000, 0x813261c0, 0x040207f6,
- 0x408a6000, 0x408e5800, 0x40926800, 0x80957040,
- 0x04000015, 0x0401f021, 0x0401ff4d, 0x80c589c0,
- 0x040007f4, 0x42010000, 0x00000001, 0x0201f800,
- 0x0010894c, 0x80c589c0, 0x0402000e, 0x808101c0,
- 0x040007ec, 0x0201f800, 0x0010609c, 0x59310000,
- 0x4084d000, 0x0401fde5, 0x0401fe64, 0x40826000,
- 0x0401f7e6, 0x0201f800, 0x0010619f, 0x0401f00b,
- 0x0201f800, 0x00108f16, 0x80c589c0, 0x040007f0,
- 0x5930d403, 0x82697480, 0x00000043, 0x040207ec,
- 0x41790000, 0x0401f7ea, 0x589d2805, 0x589d2004,
- 0x589d1803, 0x589d1002, 0x589d0801, 0x589d0000,
- 0x829d3c00, 0x00000006, 0x1c01f000, 0x829d3c80,
- 0x00000006, 0x48813800, 0x48853801, 0x48893802,
- 0x488d3803, 0x48913804, 0x48953805, 0x412d1800,
- 0x41312000, 0x41352800, 0x41790800, 0x0201f800,
- 0x001061ab, 0x40c51000, 0x0201f800, 0x00103e78,
- 0x40c66800, 0x80c589c0, 0x04000027, 0x598e600b,
- 0x0401f003, 0x41310800, 0x59326000, 0x813261c0,
- 0x04000011, 0x5930d00a, 0x41340000, 0x80697480,
- 0x040207f9, 0x0401ff06, 0x80c589c0, 0x040007f6,
- 0x0201f800, 0x0010609c, 0x59310000, 0x4084d000,
- 0x0401fd05, 0x0401fe25, 0x40826000, 0x813261c0,
- 0x040207f1, 0x8d3e7d06, 0x04000004, 0x5934d200,
- 0x8c68d50e, 0x04020003, 0x0201f800, 0x00103ffa,
- 0x408e5800, 0x40926000, 0x40966800, 0x80897040,
- 0x04000002, 0x0401f00b, 0x0201f800, 0x0010619f,
- 0x0401f008, 0x4200d000, 0x00000714, 0x40c4d800,
- 0x4144e000, 0x0201f800, 0x0010032a, 0x0401f7d4,
- 0x589d2805, 0x589d2004, 0x589d1803, 0x589d1002,
- 0x589d0801, 0x589d0000, 0x829d3c00, 0x00000006,
- 0x1c01f000, 0x829d3c80, 0x00000006, 0x48813800,
- 0x48853801, 0x48893802, 0x488d3803, 0x48913804,
- 0x48953805, 0x41311800, 0x41352000, 0x412d2800,
- 0x41790800, 0x0201f800, 0x001061ab, 0x40c51000,
- 0x598e6009, 0x0401f003, 0x41310800, 0x59326000,
- 0x813261c0, 0x04000012, 0x5932680a, 0x5934d403,
- 0x41440000, 0x80697480, 0x040207f8, 0x0401fec0,
- 0x80c589c0, 0x040007f5, 0x59310000, 0x0201f800,
- 0x0010609c, 0x4084d000, 0x0401fd0d, 0x0401fddf,
- 0x40826000, 0x813261c0, 0x040207f0, 0x0201f800,
- 0x00107050, 0x0201f800, 0x001070bc, 0x408e6000,
- 0x40926800, 0x40965800, 0x80897040, 0x04000002,
- 0x0401f003, 0x0201f800, 0x0010619f, 0x589d2805,
- 0x589d2004, 0x589d1803, 0x589d1002, 0x589d0801,
- 0x589d0000, 0x829d3c00, 0x00000006, 0x1c01f000,
- 0x829d3c80, 0x00000002, 0x48813800, 0x48853801,
- 0x4947c857, 0x0201f800, 0x001061ab, 0x40c50800,
- 0x413d0000, 0x853e7d00, 0x0401ffbb, 0x0401ff70,
- 0x40827800, 0x80857040, 0x04000002, 0x0401f003,
- 0x0201f800, 0x0010619f, 0x589d0801, 0x589d0000,
- 0x829d3c00, 0x00000002, 0x1c01f000, 0x829d3c80,
- 0x00000003, 0x48813800, 0x48853801, 0x48893802,
- 0x41311000, 0x41790800, 0x598e600b, 0x813261c0,
- 0x04000011, 0x0401fe7e, 0x80c589c0, 0x04020006,
- 0x41310800, 0x59326000, 0x813261c0, 0x040207fa,
- 0x0401f009, 0x0201f800, 0x0010609c, 0x59310000,
- 0x4084d000, 0x0401fc78, 0x0401fd98, 0x40826000,
- 0x0401f7ef, 0x0201f800, 0x00103fd7, 0x408a6000,
- 0x589d1002, 0x589d0801, 0x589d0000, 0x829d3c00,
- 0x00000003, 0x1c01f000, 0x829d3c80, 0x00000003,
- 0x48813800, 0x48853801, 0x48893802, 0x41311000,
- 0x41790800, 0x598e6009, 0x813261c0, 0x04000011,
- 0x0401fe5b, 0x80c589c0, 0x04020006, 0x41310800,
- 0x59326000, 0x813261c0, 0x040207fa, 0x0401f009,
- 0x59310000, 0x0201f800, 0x0010609c, 0x4084d000,
- 0x0401fca3, 0x0401fd75, 0x40826000, 0x0401f7ef,
- 0x0201f800, 0x001070a0, 0x0201f800, 0x001070bc,
- 0x408a6000, 0x589d1002, 0x589d0801, 0x589d0000,
- 0x829d3c00, 0x00000003, 0x1c01f000, 0x809d3840,
- 0x48813800, 0x4943c857, 0x0201f800, 0x001061ab,
- 0x40c50000, 0x0401ffd5, 0x0401ffb1, 0x80817040,
- 0x04000002, 0x0401f003, 0x0201f800, 0x0010619f,
- 0x589d0000, 0x809d3800, 0x1c01f000, 0x829d3c80,
- 0x00000004, 0x48813800, 0x48853801, 0x48893802,
- 0x488d3803, 0x0201f800, 0x001061ab, 0x40c51800,
- 0x41311000, 0x41790800, 0x598e6005, 0x813261c0,
- 0x04000008, 0x0401fe22, 0x80c589c0, 0x04020009,
- 0x41310800, 0x59326000, 0x813261c0, 0x040207fa,
- 0x408a6000, 0x808d7040, 0x0400000a, 0x0401f00b,
- 0x0201f800, 0x0010609c, 0x59310000, 0x4084d000,
- 0x0401fcba, 0x0401fd39, 0x40826000, 0x0401f7ec,
- 0x0201f800, 0x0010619f, 0x589d1803, 0x589d1002,
- 0x589d0801, 0x589d0000, 0x829d3c00, 0x00000004,
- 0x1c01f000, 0x809d3840, 0x48a13800, 0x829d3c80,
- 0x00000005, 0x409d4000, 0x829d3c80, 0x00000007,
- 0x48813800, 0x48853801, 0x48893802, 0x488d3803,
- 0x48913804, 0x48953805, 0x48993806, 0x41791000,
- 0x0201f800, 0x001061ab, 0x48c54004, 0x41311800,
- 0x41352800, 0x41193000, 0x412d2000, 0x49914003,
- 0x49d14000, 0x49a54001, 0x49154002, 0x59be6031,
- 0x813261c0, 0x0400000e, 0x41310800, 0x59310000,
- 0x5932680a, 0x5934d403, 0x41440000, 0x80697480,
- 0x04000027, 0x808101c0, 0x04000003, 0x41310800,
- 0x40826000, 0x808101c0, 0x040207f5, 0x417a3000,
- 0x0201f800, 0x001067aa, 0x59926004, 0x813261c0,
- 0x04000006, 0x5932680a, 0x5934d403, 0x41440000,
- 0x80697480, 0x04000023, 0x811a3000, 0x83197480,
- 0x00000004, 0x040007f3, 0x040017f2, 0x408e6000,
- 0x40966800, 0x409a3000, 0x40925800, 0x58a32003,
- 0x58a3a000, 0x58a34801, 0x58a22802, 0x58a0d004,
- 0x80697040, 0x04000010, 0x0401f01d, 0x41311000,
- 0x40826000, 0x808101c0, 0x040007e1, 0x59310001,
- 0x0401fdbb, 0x80c589c0, 0x040007f9, 0x4084d000,
- 0x4088d800, 0x0201f800, 0x0010e281, 0x0401fcdb,
- 0x0401f7f4, 0x0201f800, 0x0010619f, 0x0401f00c,
- 0x0401fdaf, 0x80c589c0, 0x040007dc, 0x0201f800,
- 0x0010633f, 0x0201f800, 0x0010617d, 0x0201f800,
- 0x00106186, 0x0401fccd, 0x0401f7d4, 0x589d3006,
- 0x589d2805, 0x589d2004, 0x589d1803, 0x589d1002,
- 0x589d0801, 0x589d0000, 0x829d3c00, 0x0000000c,
- 0x589d4000, 0x809d3800, 0x1c01f000, 0x809d3840,
- 0x48a13800, 0x829d3c80, 0x00000007, 0x409d4000,
- 0x829d3c80, 0x00000007, 0x48813800, 0x48853801,
- 0x48893802, 0x488d3803, 0x48913804, 0x48953805,
- 0x48993806, 0x41791800, 0x0201f800, 0x001061ab,
- 0x40c52800, 0x41313000, 0x49354005, 0x492d4004,
- 0x49194006, 0x49914003, 0x49d14000, 0x49a54001,
- 0x49154002, 0x59be6031, 0x813261c0, 0x04000023,
- 0x41312000, 0x408d0800, 0x59311000, 0x5932680a,
- 0x0401f009, 0x41311800, 0x808509c0, 0x04000010,
- 0x808101c0, 0x04000002, 0x40826000, 0x808101c0,
- 0x0400000d, 0x59310001, 0x0401fd6d, 0x80c589c0,
- 0x040007f5, 0x4090d000, 0x408cd800, 0x0201f800,
- 0x0010e281, 0x0401fc8d, 0x0401f7f2, 0x41310800,
- 0x0401f7f0, 0x808911c0, 0x04000006, 0x408a6000,
- 0x808509c0, 0x04000003, 0x40852000, 0x40810800,
- 0x808911c0, 0x040207e1, 0x417a3000, 0x0201f800,
- 0x001067aa, 0x59926004, 0x813261c0, 0x04000004,
- 0x0401fd53, 0x80c589c0, 0x04020011, 0x811a3000,
- 0x83197480, 0x00000004, 0x040007f5, 0x040017f4,
- 0x409a6000, 0x58a26805, 0x58a25804, 0x58a23006,
- 0x58a32003, 0x58a3a000, 0x58a34801, 0x58a22802,
- 0x80957040, 0x0400000a, 0x0401f00b, 0x0201f800,
- 0x0010633f, 0x0201f800, 0x0010617d, 0x0201f800,
- 0x00106186, 0x0401fc61, 0x0401f7e9, 0x0201f800,
- 0x0010619f, 0x589d3006, 0x589d2805, 0x589d2004,
- 0x589d1803, 0x589d1002, 0x589d0801, 0x589d0000,
- 0x829d3c00, 0x0000000e, 0x589d4000, 0x809d3800,
- 0x1c01f000, 0x4178e000, 0x497bc856, 0x5930dc03,
- 0x826cd480, 0x00000002, 0x82697480, 0x00000002,
- 0x04000007, 0x04001006, 0x599cd019, 0x8c68d50e,
- 0x04000005, 0x806cd9c0, 0x04020003, 0x4200e000,
- 0x00000001, 0x40718800, 0x1c01f000, 0x829d3c80,
- 0x00000004, 0x48813800, 0x48853801, 0x48893802,
- 0x488d3803, 0x412d0800, 0x41351000, 0x41391800,
- 0x0201f800, 0x0010e548, 0x80c589c0, 0x040000cd,
- 0x5932680a, 0x5930d407, 0x40680000, 0x82697480,
- 0x00000013, 0x83f17500, 0x03000000, 0x04000028,
- 0x0c01f001, 0x0010e909, 0x0010e8b6, 0x0010e8c6,
- 0x0010e87b, 0x0010e8b6, 0x0010e8c6, 0x0010e89e,
- 0x0010e8af, 0x0010e873, 0x0010e8d6, 0x0010e85d,
- 0x0010e873, 0x0010e873, 0x0010e873, 0x0010e873,
- 0x0010e909, 0x0010e85d, 0x0010e85a, 0x0010e873,
- 0x0010e873, 0x59325818, 0x0201f800, 0x00100589,
- 0x5930d203, 0x82697480, 0x00000004, 0x04000090,
- 0x59325809, 0x0201f800, 0x0010894c, 0x80c589c0,
- 0x04020083, 0x0201f800, 0x00107144, 0x8d3e7d1c,
- 0x040000a0, 0x497a600a, 0x0401f09e, 0x4200d000,
- 0x0000030f, 0x4000d800, 0x4130e000, 0x0201f800,
- 0x0010032a, 0x0401f097, 0x59325809, 0x0201f800,
- 0x0010894c, 0x80c589c0, 0x0402006a, 0x0201f800,
- 0x00107144, 0x0401f08f, 0x813669c0, 0x04000077,
- 0x0201f800, 0x00109391, 0x5930d203, 0x82697480,
- 0x00000004, 0x04000081, 0x59325809, 0x0201f800,
- 0x0010894c, 0x80c589c0, 0x040007df, 0x592cd205,
- 0x8268d500, 0x000000ff, 0x82697480, 0x00000014,
- 0x04000003, 0x0201f800, 0x00108a55, 0x4a025a05,
- 0x00000103, 0x5930d402, 0x486a5c07, 0x592cd409,
- 0x8c68d512, 0x04020067, 0x49425a07, 0x497a580a,
- 0x0201f800, 0x00108f22, 0x0201f800, 0x000203ab,
- 0x0401f7c9, 0x5930d203, 0x82697480, 0x00000004,
- 0x04000065, 0x59325809, 0x0201f800, 0x0010894c,
- 0x80c589c0, 0x040007c0, 0x49425a07, 0x813669c0,
- 0x040007f0, 0x0201f800, 0x0010a320, 0x0201f800,
- 0x00108f22, 0x0401f7ed, 0x5930d203, 0x82697480,
- 0x00000011, 0x04020057, 0x5930d41e, 0x486a6203,
- 0x0401f054, 0x5930d403, 0x82697480, 0x00000043,
- 0x04000050, 0x0201f800, 0x0010a684, 0x0401ff62,
- 0x80c589c0, 0x0402003c, 0x0201f800, 0x00108a7c,
- 0x80c589c0, 0x040007a4, 0x0201f800, 0x001078e7,
- 0x0401f7a1, 0x59325809, 0x0201f800, 0x0010894c,
- 0x80c589c0, 0x0400079c, 0x49425a07, 0x497a5c0a,
- 0x0201f800, 0x000203ab, 0x5930d21e, 0x82697480,
- 0x00000003, 0x04020794, 0x0201f800, 0x00108a55,
- 0x0401f791, 0x5930d203, 0x82697480, 0x00000004,
- 0x04020013, 0x5930d006, 0x8068d1c0, 0x0400002d,
- 0x5930d415, 0x8468d558, 0x486a6415, 0x0401f029,
- 0x49425a07, 0x497a5c07, 0x0201f800, 0x000203ab,
- 0x0201f800, 0x00107144, 0x0401f022, 0x49425a07,
- 0x0201f800, 0x000203ab, 0x0401f77b, 0x59325809,
- 0x0201f800, 0x00105fa3, 0x0401f777, 0x0201f800,
- 0x00100bd5, 0x0401f76f, 0x4200d000, 0x00000182,
- 0x4134d800, 0x4130e000, 0x0201f800, 0x0010032a,
- 0x0401f784, 0x0201f800, 0x00101a68, 0x0401f7c3,
- 0x412d0000, 0x592e580a, 0x0201f800, 0x00100589,
- 0x40825800, 0x0401f795, 0x0201f800, 0x00100bd5,
- 0x0401f77e, 0x0201f800, 0x00100bd5, 0x0401f79a,
- 0x40865800, 0x408a6800, 0x408e7000, 0x589d1803,
- 0x589d1002, 0x589d0801, 0x589d0000, 0x829d3c00,
- 0x00000004, 0x1c01f000, 0x829d3c80, 0x00000002,
- 0x48813800, 0x48853801, 0x41310800, 0x4933c857,
- 0x4943c857, 0x493fc857, 0x42010000, 0x0010f694,
- 0x59a8d00d, 0x41640000, 0x80697480, 0x04000010,
- 0x41580000, 0x80817480, 0x0402100d, 0x40826000,
- 0x8d3e7d12, 0x04000004, 0x40800000, 0x80857480,
- 0x04000002, 0x0401ff06, 0x82810400, 0x00000024,
- 0x41580000, 0x80817480, 0x040017f5, 0x41510000,
- 0x41540000, 0x80817480, 0x04021019, 0x8d3e7d18,
- 0x04000017, 0x59a8d04d, 0x59a8004e, 0x80697480,
- 0x04000013, 0x40826000, 0x5880d00a, 0x8068d1c0,
- 0x04020005, 0x5880d203, 0x82697480, 0x00000008,
- 0x04000008, 0x0401feee, 0x82810400, 0x00000024,
- 0x41540000, 0x80817480, 0x040017ed, 0x0401f004,
- 0x0201f800, 0x0010a5cc, 0x0401f7f7, 0x40866000,
- 0x589d0801, 0x589d0000, 0x829d3c00, 0x00000002,
- 0x1c01f000, 0x497a621e, 0x812e59c0, 0x0400003d,
- 0x592cd205, 0x486bc857, 0x592cd205, 0x8268d500,
- 0x000000ff, 0x82697480, 0x00000014, 0x04000003,
- 0x4a02621e, 0x00000003, 0x592cd409, 0x8c68d510,
- 0x0402001d, 0x592cd209, 0x0201f800, 0x00104542,
- 0x0201f800, 0x00108f22, 0x0201f800, 0x0010af1c,
- 0x80c589c0, 0x0400001f, 0x4a026403, 0x00000085,
- 0x4a026203, 0x00000009, 0x4a026407, 0x00000002,
- 0x5930d004, 0x8268d500, 0x00000100, 0x8268d540,
- 0x8000404b, 0x486a6004, 0x0201f800, 0x0010619f,
- 0x4200d000, 0x8000404b, 0x0201f800, 0x00106089,
- 0x0401f01f, 0x592cd209, 0x0201f800, 0x00104542,
- 0x4a025c09, 0x00000100, 0x0201f800, 0x00108f22,
- 0x0201f800, 0x0010af1c, 0x80c589c0, 0x040207e3,
- 0x0201f800, 0x000203ab, 0x5930d21e, 0x82697480,
- 0x00000003, 0x0400000a, 0x497a6009, 0x0401f7db,
- 0x4200d000, 0x00000527, 0x4130d800, 0x412ce000,
- 0x0201f800, 0x0010032a, 0x0401f005, 0x0201f800,
- 0x00108a55, 0x497a6009, 0x0401f7d0, 0x1c01f000,
- 0x0201f800, 0x0010619f, 0x812e59c0, 0x0400001b,
- 0x592cd409, 0x8c68d510, 0x04020012, 0x592cd209,
- 0x0201f800, 0x00104542, 0x0201f800, 0x00108f22,
- 0x0201f800, 0x000203ab, 0x5930d203, 0x82697480,
- 0x0000000d, 0x0400000d, 0x0201f800, 0x0010619f,
- 0x5930d00a, 0x0201f800, 0x00104121, 0x0401f007,
- 0x592cd209, 0x0201f800, 0x00104542, 0x4a025c09,
- 0x00000100, 0x0401f7ed, 0x0201f800, 0x00107144,
- 0x1c01f000, 0x829d3c80, 0x00000002, 0x48813800,
- 0x48853801, 0x41790000, 0x0201f800, 0x00108668,
- 0x40c50800, 0x48c7c857, 0x40840000, 0x82857480,
- 0x0000000d, 0x83f17500, 0x03000000, 0x0400002b,
- 0x0c01f001, 0x0010e9ef, 0x0010ea27, 0x0010ea05,
- 0x0010e9dc, 0x0010ea07, 0x0010e9f7, 0x0010e9ef,
- 0x0010e9ef, 0x0010e9ef, 0x0010e9f7, 0x0010e9f7,
- 0x0010e9f7, 0x0010e9f7, 0x0010ea05, 0x0201f800,
- 0x00108652, 0x80c589c0, 0x04000005, 0x0201f800,
- 0x001063ef, 0x80c589c0, 0x04000055, 0x0201f800,
- 0x0010e2da, 0x80c589c0, 0x04000017, 0x5930d403,
- 0x486bc857, 0x5930d403, 0x82697480, 0x00000040,
- 0x04020018, 0x0401ffaf, 0x42010000, 0x00000001,
- 0x0401f069, 0x40840000, 0x82857480, 0x0000000d,
- 0x040007d8, 0x040017d7, 0x4200d000, 0x000004b7,
- 0x4130d800, 0x4084e000, 0x0201f800, 0x0010032a,
- 0x0401f05d, 0x497bc856, 0x0201f800, 0x001060b6,
- 0x80c589c0, 0x04020036, 0x59317004, 0x48bbc857,
- 0x0401ff4d, 0x0401f7e9, 0x812e59c0, 0x0400004c,
- 0x0201f800, 0x00108d84, 0x80c589c0, 0x04000030,
- 0x0201f800, 0x0010619f, 0x592cd209, 0x8468d50c,
- 0x486a5a09, 0x592cdc07, 0x806cd0c6, 0x406c0000,
- 0x8068d400, 0x8068d400, 0x486a6006, 0x4200d000,
- 0x10000000, 0x4130d800, 0x0201f800, 0x0010088e,
- 0x80c589c0, 0x0400002b, 0x592cd209, 0x8c68d51c,
- 0x04020024, 0x8468d55c, 0x486a5a09, 0x4a026006,
- 0x00000002, 0x0401f7c9, 0x598d700f, 0x48bbc857,
- 0x40b8d000, 0x41300000, 0x80697480, 0x04000014,
- 0x0201f800, 0x0010e453, 0x80c589c0, 0x040207be,
- 0x497bc856, 0x0201f800, 0x001060b6, 0x4200d000,
- 0x000003f5, 0x80c589c0, 0x040007c2, 0x5930d203,
- 0x486bc857, 0x59310a03, 0x0401f01f, 0x0201f800,
- 0x00100bd5, 0x0401ff14, 0x0401f7b0, 0x0201f800,
- 0x00106426, 0x80c589c0, 0x040007f5, 0x0401f7e9,
- 0x41310000, 0x0201f800, 0x00101079, 0x40826000,
- 0x5930d203, 0x82697480, 0x00000004, 0x040207a3,
- 0x41390000, 0x42027000, 0x00000048, 0x0201f800,
- 0x001071b6, 0x40827000, 0x0401f79c, 0x4200d000,
- 0x000004a7, 0x4130d800, 0x412ce000, 0x0201f800,
- 0x0010032a, 0x808101c0, 0x04000797, 0x589d0801,
- 0x589d0000, 0x829d3c00, 0x00000002, 0x1c01f000,
- 0x829d3c80, 0x00000002, 0x48813800, 0x48853801,
- 0x412d0800, 0x41410000, 0x4200d000, 0x0010bd2c,
- 0x0201f800, 0x0010ae0f, 0x417a5800, 0x0201f800,
- 0x0010894c, 0x80c589c0, 0x04000009, 0x0201f800,
- 0x00109391, 0x59325809, 0x592cd209, 0x8468d54c,
- 0x486a5a09, 0x42028000, 0x00000006, 0x0201f800,
- 0x001061ab, 0x0401ff44, 0x0201f800, 0x0010619f,
- 0x40828000, 0x40865800, 0x589d0801, 0x589d0000,
- 0x829d3c00, 0x00000002, 0x1c01f000, 0x829d3c80,
- 0x00000002, 0x48813800, 0x48853801, 0x412d0800,
- 0x0201f800, 0x0010e548, 0x80c589c0, 0x040000c3,
- 0x5930d407, 0x40680000, 0x82697480, 0x00000013,
- 0x83f17500, 0x03000000, 0x04000025, 0x0c01f001,
- 0x0010eb4f, 0x0010eaf3, 0x0010eb09, 0x0010ead0,
- 0x0010eaf3, 0x0010eb09, 0x0010eb19, 0x0010eb02,
- 0x0010eb2e, 0x0010eaa9, 0x0010eabf, 0x0010eb2e,
- 0x0010eb2e, 0x0010eb2e, 0x0010eb2e, 0x0010eb4f,
- 0x0010eac5, 0x0010eb2a, 0x0010eb2e, 0x0010eb2e,
- 0x0201f800, 0x00105c0e, 0x80c589c0, 0x04000090,
- 0x5930d203, 0x82697480, 0x00000004, 0x0402009f,
- 0x5930d006, 0x8068d1c0, 0x0400009c, 0x5930d415,
- 0x8468d558, 0x486a6415, 0x0401f098, 0x4200d000,
- 0x00000328, 0x4000d800, 0x4130e000, 0x0201f800,
- 0x0010032a, 0x0401f091, 0x5930d203, 0x82697480,
- 0x00000004, 0x04020003, 0x0201f800, 0x00100bd5,
- 0x59325809, 0x0201f800, 0x0010894c, 0x80c589c0,
- 0x0402006f, 0x0201f800, 0x00107144, 0x8d3e7d1c,
- 0x04000082, 0x497a600a, 0x0401f080, 0x0201f800,
- 0x00109391, 0x5930d203, 0x82697480, 0x00000004,
- 0x04000074, 0x59325809, 0x0201f800, 0x0010894c,
- 0x80c589c0, 0x040007f0, 0x592cd205, 0x8268d500,
- 0x000000ff, 0x82697480, 0x00000014, 0x04000003,
- 0x0201f800, 0x00108a55, 0x4a025a05, 0x00000103,
- 0x592cd409, 0x8c68d512, 0x0402005c, 0x49425a07,
- 0x497a580a, 0x0201f800, 0x0010a320, 0x0201f800,
- 0x00108f22, 0x0201f800, 0x00108afb, 0x0201f800,
- 0x000203ab, 0x0401f7d8, 0x5930d403, 0x82697480,
- 0x00000043, 0x04000059, 0x0201f800, 0x0010e81e,
- 0x80c589c0, 0x04020046, 0x0201f800, 0x00108a7c,
- 0x80c589c0, 0x040007cc, 0x0201f800, 0x001078e7,
- 0x0401f7c9, 0x5930d203, 0x82697480, 0x00000011,
- 0x0402004a, 0x5930d41e, 0x486a6203, 0x0401f047,
- 0x59325809, 0x0201f800, 0x0010894c, 0x80c589c0,
- 0x040007bd, 0x49425a07, 0x497a5c0a, 0x0201f800,
- 0x000203ab, 0x5930d21e, 0x82697480, 0x00000003,
- 0x040207b5, 0x0201f800, 0x00108a55, 0x0401f7b2,
- 0x5930d203, 0x82697480, 0x00000004, 0x04000030,
- 0x59325809, 0x0201f800, 0x0010894c, 0x80c589c0,
- 0x040007a9, 0x49425a07, 0x0201f800, 0x0010a320,
- 0x0201f800, 0x00108f22, 0x0201f800, 0x000203ab,
- 0x0401f7a1, 0x59325818, 0x0201f800, 0x00100589,
- 0x0401f798, 0x59325809, 0x0201f800, 0x0010894c,
- 0x80c589c0, 0x04000798, 0x49425a07, 0x497a5c07,
- 0x0201f800, 0x000203ab, 0x0401f793, 0x49425a07,
- 0x0201f800, 0x000203ab, 0x0401f78f, 0x59325809,
- 0x0201f800, 0x00105fa3, 0x0401f78b, 0x0201f800,
- 0x00101a68, 0x0401f7b9, 0x412d0000, 0x592e580a,
- 0x0201f800, 0x00100589, 0x40825800, 0x0401f7a0,
- 0x0201f800, 0x00100bd5, 0x0401f78b, 0x0201f800,
- 0x00100bd5, 0x0401f7cf, 0x40865800, 0x589d0801,
- 0x589d0000, 0x829d3c00, 0x00000002, 0x1c01f000,
- 0x0201f800, 0x0010a10f, 0x80c589c0, 0x04020002,
- 0x0401f003, 0x5932680a, 0x0401ff29, 0x1c01f000,
- 0x829d3c80, 0x00000005, 0x48813800, 0x48853801,
- 0x48893802, 0x488d3803, 0x48913804, 0x41311000,
- 0x41352000, 0x4933c857, 0x4947c857, 0x4943c857,
- 0x0201f800, 0x001061ab, 0x40c51800, 0x0201f800,
- 0x00109fb3, 0x41310800, 0x813261c0, 0x04000048,
- 0x42000000, 0x0010f64c, 0x81317480, 0x04000044,
- 0x59a8d00d, 0x8068d040, 0x42010000, 0x0010f694,
- 0x40680000, 0x81657480, 0x0400000f, 0x41580000,
- 0x80817480, 0x0402100c, 0x40826000, 0x40800000,
- 0x80857480, 0x04000003, 0x4084d000, 0x0401ffd1,
- 0x82810400, 0x00000024, 0x41580000, 0x80817480,
- 0x040017f6, 0x41510000, 0x41540000, 0x80817480,
- 0x04021012, 0x8d3e7d18, 0x04000010, 0x59a8d04d,
- 0x59a8004e, 0x80697480, 0x0400000c, 0x40826000,
- 0x5880d00a, 0x8068d1c0, 0x0400000d, 0x4084d000,
- 0x0401ffbc, 0x82810400, 0x00000024, 0x41540000,
- 0x80817480, 0x040017f0, 0x408a6000, 0x40926800,
- 0x808d7040, 0x04000018, 0x0401f01d, 0x0201f800,
- 0x00103e78, 0x40c66800, 0x80c589c0, 0x040007f2,
- 0x58c4d002, 0x5930d81f, 0x82680500, 0x00ffffff,
- 0x806d7480, 0x040207ec, 0x5930d203, 0x82697480,
- 0x00000008, 0x0400000b, 0x4936600a, 0x0401fed0,
- 0x82810400, 0x00000024, 0x0401f7e5, 0x59a8d00d,
- 0x0401f7be, 0x0201f800, 0x0010619f, 0x0401f004,
- 0x0201f800, 0x0010a5cc, 0x0401f7f4, 0x589d2004,
- 0x589d1803, 0x589d1002, 0x589d0801, 0x589d0000,
- 0x829d3c00, 0x00000005, 0x1c01f000, 0x829d3c80,
- 0x00000007, 0x48813800, 0x48853801, 0x48893802,
- 0x488d3803, 0x48913804, 0x48953805, 0x48993806,
- 0x42010000, 0x00000001, 0x41790800, 0x497bc856,
- 0x41311000, 0x41351800, 0x41452000, 0x413d2800,
- 0x40593000, 0x4200d000, 0x0010ebc8, 0x0201f800,
- 0x0010587a, 0x59a8d21b, 0x8c68d508, 0x0400001d,
- 0x8c68d516, 0x0402001b, 0x59aa6864, 0x813669c0,
- 0x0400007a, 0x5934d400, 0x82697480, 0x00000404,
- 0x04020076, 0x0201f800, 0x00107185, 0x40c66000,
- 0x80c589c0, 0x0400006b, 0x48818c07, 0x4935880a,
- 0x40867800, 0x0201f800, 0x00103d92, 0x4200d000,
- 0x00000005, 0x0201f800, 0x00103d9c, 0x42027000,
- 0x00000003, 0x0201f800, 0x001071b6, 0x0401f063,
- 0x8c68d506, 0x04020003, 0x8c68d50a, 0x04000014,
- 0x0201f800, 0x001040de, 0x80c589c0, 0x0400000a,
- 0x83acd400, 0x000007fe, 0x586a6800, 0x5934d200,
- 0x8468d51a, 0x486a6a00, 0x59a8d21b, 0x8c68d506,
- 0x0402003c, 0x808509c0, 0x04000005, 0x8d0e1d20,
- 0x0402003c, 0x0201f800, 0x0010e25a, 0x80817040,
- 0x0402004a, 0x4200b000, 0x000007f0, 0x417a8800,
- 0x0401f01c, 0x826cd540, 0x00001000, 0x486a6a00,
- 0x5934d200, 0x8468d51a, 0x486a6a00, 0x4937c857,
- 0x4a026c00, 0x00000707, 0x0201f800, 0x001061ab,
- 0x40c50000, 0x417a6000, 0x0201f800, 0x0010e5d8,
- 0x0201f800, 0x0010e6a9, 0x417a7800, 0x0201f800,
- 0x0010e742, 0x0201f800, 0x0010eb5d, 0x80817040,
- 0x04000025, 0x81468800, 0x8058b040, 0x0400002b,
- 0x0201f800, 0x00103e78, 0x80c589c0, 0x040007fa,
- 0x5934da00, 0x8c6cdd1a, 0x040007f7, 0x5934d403,
- 0x406a8800, 0x417a7800, 0x42028000, 0x00000029,
- 0x8d0e1d20, 0x040007d8, 0x413cd000, 0x413cd800,
- 0x0201f800, 0x0010a016, 0x5934da00, 0x0401f7d2,
- 0x41790000, 0x42010800, 0x00000001, 0x0401f7c2,
- 0x4200d000, 0x000007d0, 0x4200d800, 0x0010ebc8,
- 0x0201f800, 0x001059a5, 0x0201f800, 0x0010e25a,
- 0x0401f7bf, 0x0201f800, 0x0010619f, 0x0401f7da,
- 0x4200d000, 0x000000a0, 0x40c4d800, 0x4134e000,
- 0x0201f800, 0x0010032a, 0x408a6000, 0x408e6800,
- 0x40928800, 0x40967800, 0x4098b000, 0x589d3006,
- 0x589d2805, 0x589d2004, 0x589d1803, 0x589d1002,
- 0x589d0801, 0x589d0000, 0x829d3c00, 0x00000007,
- 0x1c01f000, 0x497bc856, 0x0201f800, 0x0010474e,
- 0x80c589c0, 0x0402002e, 0x59a8d015, 0x8c68d504,
- 0x04000034, 0x8d0e1d20, 0x04020004, 0x59a8d006,
- 0x8c68d51c, 0x0400001c, 0x4200b000, 0x000007f0,
- 0x417a8800, 0x0401f004, 0x81468800, 0x8058b040,
- 0x04000015, 0x0201f800, 0x00103e78, 0x80c589c0,
- 0x040007fa, 0x0201f800, 0x0010418d, 0x80c589c0,
- 0x040007f6, 0x59a8d00f, 0x59340002, 0x8068d580,
- 0x8268d500, 0x00ffff00, 0x040207f0, 0x5934d200,
- 0x8468d55a, 0x486a6a00, 0x81468800, 0x8058b040,
- 0x040207ed, 0x0201f800, 0x001040de, 0x80c589c0,
- 0x04000020, 0x59a8d029, 0x4200d800, 0x0010ebc8,
- 0x0201f800, 0x001059a5, 0x0401f022, 0x83acd400,
- 0x000007fe, 0x586a6800, 0x813669c0, 0x040007d2,
- 0x5934d200, 0x8468d51a, 0x486a6a00, 0x0401f7ce,
- 0x59a8d21b, 0x8c68d506, 0x040007cb, 0x83acd400,
- 0x000007fe, 0x586a6800, 0x813669c0, 0x040007c6,
- 0x0201f800, 0x0010418d, 0x80c589c0, 0x040007c2,
- 0x5934d200, 0x8468d55a, 0x486a6a00, 0x0401f7be,
- 0x8d0e1d20, 0x04020004, 0x59a8d006, 0x8c68d51c,
- 0x040007e2, 0x4200d000, 0x000007d0, 0x0401f7db,
- 0x1c01f000, 0x829d3c80, 0x00000003, 0x48813800,
- 0x48853801, 0x48893802, 0x40691000, 0x40710800,
- 0x4978e000, 0x83457480, 0x000007ff, 0x83f17500,
- 0x03000000, 0x04000047, 0x4978e002, 0x4944e001,
- 0x4144e800, 0x42010000, 0x0010b080, 0x4200b000,
- 0x000007f0, 0x83457480, 0x000007ef, 0x04000039,
- 0x04001038, 0x4200b000, 0x00000010, 0x8058b1c0,
- 0x04000017, 0x40740000, 0x8080d400, 0x5868f000,
- 0x8078f1c0, 0x04020043, 0x5884e001, 0x41440000,
- 0x80717480, 0x0400005b, 0x8070d000, 0x8074e800,
- 0x83457480, 0x000007ef, 0x0400004d, 0x0400104c,
- 0x82697480, 0x00000800, 0x0400002e, 0x48690801,
- 0x8058b040, 0x8058b1c0, 0x040207eb, 0x5884d802,
- 0x806cd9c0, 0x04000065, 0x412d0000, 0x4088d000,
- 0x0201f800, 0x00103dd5, 0x4947c857, 0x4937c857,
- 0x40825800, 0x813669c0, 0x04000062, 0x497a6a12,
- 0x59a8d21b, 0x8c68d50a, 0x0402000a, 0x8288dd00,
- 0x00ffff00, 0x04000050, 0x59a8d00f, 0x8268d500,
- 0x00ffff00, 0x406c0000, 0x80697480, 0x0400004a,
- 0x488a6802, 0x4200d000, 0x00000001, 0x0401f079,
- 0x82697480, 0x00fffffb, 0x040007c9, 0x040017c8,
- 0x4947c857, 0x488bc857, 0x58857001, 0x48bbc857,
- 0x4a010800, 0x00000019, 0x4178d000, 0x0401f06d,
- 0x4a010801, 0x000007f0, 0x4200e800, 0x000007f0,
- 0x42010000, 0x0010b080, 0x8058b040, 0x0401f7ce,
- 0x5878d002, 0x8268e500, 0x00ffffff, 0x48710803,
- 0x40880000, 0x80717480, 0x04000049, 0x5884e001,
- 0x41440000, 0x80717480, 0x040207b8, 0x58797002,
- 0x48b90803, 0x4947c857, 0x58857003, 0x48bbc857,
- 0x4a010800, 0x0000001b, 0x0401f7e4, 0x82697480,
- 0x000007f0, 0x040207b6, 0x49790801, 0x42010000,
- 0x0010b080, 0x4178e800, 0x8058b040, 0x0401f7b2,
- 0x49450802, 0x83457480, 0x000007ef, 0x0400000e,
- 0x0400100d, 0x83457480, 0x000007fc, 0x04000028,
- 0x83457480, 0x000007fd, 0x0400001a, 0x83457480,
- 0x000007ff, 0x0402001a, 0x82897480, 0x00ffffff,
- 0x04020017, 0x5884d002, 0x8468d55e, 0x48690802,
- 0x0401f792, 0x8288d500, 0x000000ff, 0x8068d0d0,
- 0x486a6a12, 0x0401f7b3, 0x4200d000, 0x0000044d,
- 0x4084e000, 0x0201f800, 0x0010032a, 0x0401f797,
- 0x4947c857, 0x4a010800, 0x0000000a, 0x0401f7b7,
- 0x82897480, 0x00fffffd, 0x040007eb, 0x4947c857,
- 0x488bc857, 0x58857001, 0x48bbc857, 0x4a010800,
- 0x00000019, 0x4078d000, 0x0401f01a, 0x82897480,
- 0x00fffffc, 0x040007e0, 0x0401f7f5, 0x5884d001,
- 0x41440000, 0x80697480, 0x04000007, 0x4947c857,
- 0x4873c857, 0x486fc857, 0x4a010800, 0x0000001a,
- 0x0401f79e, 0x407a6800, 0x8c6cdd08, 0x0400078e,
- 0x0201f800, 0x001040ce, 0x80c589c0, 0x0400078a,
- 0x4947c857, 0x4a010800, 0x0000001d, 0x0401f793,
- 0x40698800, 0x589d1002, 0x589d0801, 0x589d0000,
- 0x829d3c00, 0x00000003, 0x1c01f000, 0x4200d000,
- 0x00000080, 0x0201f800, 0x00101364, 0x0201f800,
- 0x001059e2, 0x59c4d0a3, 0x8468d506, 0x486b88a3,
- 0x0201f800, 0x0010475b, 0x80c589c0, 0x04020005,
- 0x0201f800, 0x00104779, 0x80c589c0, 0x0400006c,
- 0x59c4d0a3, 0x8268d500, 0xbe7fffff, 0x486b88a3,
- 0x4200d000, 0x000000f8, 0x0201f800, 0x001039fd,
- 0x59c4d0a3, 0x8268d540, 0x00018000, 0x8468d51c,
- 0x486b88a3, 0x59c4d0a3, 0x8468d520, 0x486b88a3,
- 0x497b8808, 0x59c4d006, 0x8268d500, 0xfbffff0e,
- 0x486b8806, 0x497b282c, 0x497b282d, 0x4200d000,
- 0x000001f4, 0x4200d800, 0x0010ef4a, 0x0201f800,
- 0x00105863, 0x4a038805, 0x00000001, 0x0201f800,
- 0x0010141a, 0x80c589c0, 0x04020023, 0x0201f800,
- 0x00101428, 0x80c589c0, 0x04000035, 0x4178d000,
- 0x0201f800, 0x0010169d, 0x4178d000, 0x0201f800,
- 0x00101623, 0x0201f800, 0x00101721, 0x4a035038,
- 0x00000001, 0x0201f800, 0x0010475b, 0x80c589c0,
- 0x04000018, 0x59c4d0a4, 0x8268d500, 0x0000000f,
- 0x82697480, 0x00000008, 0x04000003, 0x4a038805,
- 0x04000000, 0x59c4d0a3, 0x8268d540, 0x0001c000,
- 0x486b88a3, 0x59c4d0a3, 0x8468d520, 0x486b88a3,
- 0x0401f050, 0x4200d000, 0x00000001, 0x0201f800,
- 0x0010169d, 0x4200d000, 0x00000001, 0x0401f7e0,
- 0x0201f800, 0x00104779, 0x80c589c0, 0x040207e6,
- 0x0201f800, 0x0010476a, 0x4200d000, 0x000001a9,
- 0x80c589c0, 0x04020033, 0x599cd818, 0x40c4e000,
- 0x0201f800, 0x0010032a, 0x0401f03a, 0x0201f800,
- 0x00101436, 0x80c589c0, 0x04020023, 0x0201f800,
- 0x00101444, 0x80c589c0, 0x0400002e, 0x59a8d043,
- 0x8068d1c0, 0x040007c8, 0x0201f800, 0x00101451,
- 0x4a035038, 0x00000001, 0x0401f02a, 0x0201f800,
- 0x0010476a, 0x80c589c0, 0x0400001f, 0x59c4d0a3,
- 0x8468d570, 0x8468d532, 0x486b88a3, 0x59a8d073,
- 0x82697480, 0x00000000, 0x83f17500, 0x0c000000,
- 0x04000004, 0x82b97580, 0x0c000000, 0x04020796,
- 0x0201f800, 0x00104b7d, 0x4a038808, 0x00000008,
- 0x0401f791, 0x4200d000, 0x00000002, 0x0201f800,
- 0x0010169d, 0x4200d000, 0x00000002, 0x0401f7a4,
- 0x4a035014, 0x00000001, 0x0201f800, 0x001046af,
- 0x0401f008, 0x4200d000, 0x00000156, 0x0401f7c7,
- 0x4200d000, 0x0000018a, 0x59a8d837, 0x0401f7c4,
- 0x1c01f000, 0x5994d02c, 0x8068d1c0, 0x04020006,
- 0x5994d02d, 0x4200d800, 0x00000001, 0x8068d1c0,
- 0x04000002, 0x4178d800, 0x406d8800, 0x1c01f000,
- 0x0201f800, 0x00101617, 0x4a035038, 0x00000002,
- 0x497b5043, 0x59c4d0a3, 0x8468d520, 0x486b88a3,
- 0x0201f800, 0x0010476a, 0x80c589c0, 0x04000002,
- 0x0401f009, 0x48c7282c, 0x48c7282d, 0x4200d000,
- 0x0000002d, 0x4200d800, 0x0010ef4a, 0x0201f800,
- 0x00105863, 0x1c01f000, 0x0401ffdf, 0x80c589c0,
- 0x04000004, 0x4a035038, 0x00000003, 0x0401f01f,
- 0x0201f800, 0x00101444, 0x80c589c0, 0x04000004,
- 0x59a8d043, 0x8068d1c0, 0x04020008, 0x0201f800,
- 0x001016e8, 0x80c589c0, 0x04020002, 0x0401f013,
- 0x0401ffd8, 0x0401f011, 0x0201f800, 0x00101451,
- 0x59a8d042, 0x8c68d51e, 0x040007f9, 0x0201f800,
- 0x0010476a, 0x80c589c0, 0x04020003, 0x0401ffcd,
- 0x0401f006, 0x4a035014, 0x00000001, 0x0201f800,
- 0x001046af, 0x0401f7fa, 0x1c01f000, 0x4202d800,
- 0x00000001, 0x497b5038, 0x4a038805, 0x00000001,
- 0x497b282c, 0x497b282d, 0x497b8885, 0x1c01f000,
- 0x59a8d073, 0x82697480, 0x00000000, 0x83f17500,
- 0x0c000000, 0x04000004, 0x82b97580, 0x0c000000,
- 0x04020007, 0x59c4d005, 0x8268d500, 0x000000c0,
- 0x04020005, 0x486b8885, 0x0401f008, 0x8468d506,
- 0x486b5073, 0x59c4d006, 0x8268d540, 0x000000f1,
- 0x486b8806, 0x0401ffe2, 0x1c01f000, 0x0201f800,
- 0x00104779, 0x80c589c0, 0x04000005, 0x59a8d013,
- 0x82697480, 0x0000aaaa, 0x0400000c, 0x497b5013,
- 0x59c4d006, 0x8268d540, 0x04000001, 0x486b8806,
- 0x8d0e1d06, 0x04020008, 0x59c4d0a3, 0x8468d546,
- 0x486b88a3, 0x0401f004, 0x4a03500f, 0x00ffffff,
- 0x0401f7f3, 0x0401ffca, 0x1c01f000, 0x809d3840,
- 0x48813800, 0x0401ff80, 0x80c589c0, 0x04000005,
- 0x4a035038, 0x00000003, 0x497b8885, 0x0401f03e,
- 0x4a038805, 0x000000f0, 0x0201f800, 0x001016e8,
- 0x80c589c0, 0x0400002d, 0x0201f800, 0x0010476a,
- 0x80c589c0, 0x04020033, 0x59c4d0a4, 0x8268d500,
- 0x0000000f, 0x82697480, 0x00000008, 0x0400002b,
- 0x59c4d005, 0x82690500, 0x04000000, 0x8c68d534,
- 0x04020026, 0x5994d02c, 0x82697480, 0x00000002,
- 0x83f17500, 0x03000000, 0x040007e4, 0x0201f800,
- 0x00104779, 0x80c589c0, 0x040007e0, 0x4a038805,
- 0x000000f0, 0x0201f800, 0x001047b6, 0x4a035013,
- 0x0000aaaa, 0x48835014, 0x59c4d0a3, 0x8468d546,
- 0x486b88a3, 0x4202d800, 0x00000001, 0x48835038,
- 0x4a038805, 0x00000001, 0x4883282c, 0x4883282d,
- 0x0401ff98, 0x0401f7cd, 0x0201f800, 0x00101444,
- 0x80c589c0, 0x040007c9, 0x59a8d043, 0x8068d1c0,
- 0x040007c6, 0x0401f7c3, 0x0401ffa5, 0x0401f7c3,
- 0x0401ff8c, 0x589d0000, 0x809d3800, 0x1c01f000,
- 0x497bc856, 0x4200d000, 0x00000080, 0x0201f800,
- 0x00101364, 0x497b5038, 0x0201f800, 0x00101444,
- 0x80c589c0, 0x0400000e, 0x59a8d036, 0x8068d1c0,
- 0x04020008, 0x8068d1c0, 0x04020009, 0x4a035036,
- 0x0000000a, 0x4a035043, 0x00000001, 0x0401f004,
- 0x8068d040, 0x486b5036, 0x0401f7f7, 0x497b8885,
- 0x0201f800, 0x001003f9, 0x1c01f000, 0x59a8d873,
- 0x826d7480, 0x00000000, 0x83f17500, 0x0c000000,
- 0x04000004, 0x82b97580, 0x0c000000, 0x04020011,
- 0x4200e000, 0x00000003, 0x59a80038, 0x80717480,
- 0x04001006, 0x0c01f001, 0x0010ef44, 0x0010ef46,
- 0x0010ef48, 0x0010ef42, 0x4200d000, 0x000000cb,
- 0x4000d800, 0x0201f800, 0x0010032a, 0x0401f019,
- 0x826cd500, 0x00000008, 0x8c6cdd06, 0x040207ed,
- 0x4202d800, 0x00000001, 0x486b5038, 0x486b282c,
- 0x486b282d, 0x59a8d073, 0x8468d506, 0x486b5073,
- 0x4a035014, 0x00000001, 0x0201f800, 0x001046af,
- 0x0401f008, 0x0401ffbb, 0x0401f006, 0x0401fe4c,
- 0x0401f004, 0x0401ff11, 0x0401f002, 0x0401ff6c,
- 0x1c01f000, 0x497b282d, 0x1c01f000, 0x59a8d017,
- 0x82697480, 0x0000ffff, 0x04000004, 0x0201f800,
- 0x0010e25a, 0x0401f0b4, 0x59a8da1b, 0x826cd500,
- 0x00000028, 0x04000025, 0x8c6cdd00, 0x04000023,
- 0x4a038802, 0x0000ffbf, 0x59a8da1b, 0x8c6cdd02,
- 0x0400001e, 0x599ce018, 0x8c70e516, 0x04020012,
- 0x59a8d01c, 0x82697480, 0x0000ffff, 0x0400000e,
- 0x0201f800, 0x00101a08, 0x59a8d21b, 0x8268dd00,
- 0x00000004, 0x8c68d504, 0x04020059, 0x406e5800,
- 0x4200d000, 0x00000003, 0x0201f800, 0x00101a36,
- 0x0401f095, 0x8c70e516, 0x04020005, 0x59a8d01c,
- 0x82697480, 0x0000ffff, 0x04000087, 0x59a8d01d,
- 0x8068d1c0, 0x0402004a, 0x8c6cdd08, 0x04000049,
- 0x599cd019, 0x8c68d510, 0x0400004a, 0x0201f800,
- 0x001040de, 0x80c589c0, 0x04020041, 0x599cd019,
- 0x8c68d510, 0x04000004, 0x59a8d21b, 0x8c68d508,
- 0x0402000a, 0x599cd018, 0x8c68d516, 0x04000059,
- 0x599cd017, 0x8c68d50a, 0x0402003d, 0x59a8d006,
- 0x8c68d51c, 0x0402003a, 0x4a038802, 0x0000ffff,
- 0x4200d000, 0x0010b941, 0x0201f800, 0x00100531,
- 0x4200d000, 0x0010b94e, 0x0201f800, 0x00100531,
- 0x850e1d02, 0x4a0378e4, 0x00000080, 0x4202d800,
- 0x00000003, 0x4a035017, 0x0000ffff, 0x0201f800,
- 0x0010042f, 0x4178d000, 0x0201f800, 0x00101364,
- 0x59a8d21b, 0x8c68d506, 0x04000042, 0x599cd018,
- 0x8268e500, 0x00000800, 0x8c68d516, 0x0402003a,
- 0x599cd019, 0x8c68d510, 0x04000004, 0x59a8d21b,
- 0x8c68d508, 0x0402003e, 0x4200d000, 0x0000ffff,
- 0x4200d800, 0x00000006, 0x4178e000, 0x0201f800,
- 0x00103267, 0x0201f800, 0x00104779, 0x80c589c0,
- 0x0400001a, 0x0201f800, 0x001064c5, 0x0401f042,
- 0x59a8d016, 0x8068d1c0, 0x040007b9, 0x0401f03e,
- 0x8c6cdd16, 0x040207b6, 0x0401f03b, 0x4200b000,
- 0x000007f0, 0x417a8800, 0x0401f004, 0x81468800,
- 0x8058b040, 0x040007c1, 0x0201f800, 0x00103e78,
- 0x80c589c0, 0x040007fa, 0x5934d200, 0x8c68d51a,
- 0x040007f7, 0x0401f02c, 0x0201f800, 0x0010474e,
- 0x80c589c0, 0x0400001b, 0x59c4d006, 0x8468d534,
- 0x486b8806, 0x0201f800, 0x001064c5, 0x0401f7e0,
- 0x0201f800, 0x0010441d, 0x80c589c0, 0x040007a5,
- 0x0401f01d, 0x0201f800, 0x001032cb, 0x0401f7d2,
- 0x0201f800, 0x0010474e, 0x80c589c0, 0x040207bc,
- 0x59a8d21b, 0x486b541b, 0x0401f7b9, 0x4200d000,
- 0x000007fe, 0x4200d800, 0x00000004, 0x0401f7c4,
- 0x59c4d006, 0x8268d500, 0xffffff0f, 0x486b8806,
- 0x0401f7e5, 0x8c6cdd04, 0x04020779, 0x826cd500,
- 0x00004000, 0x8c6cdd1c, 0x04020775, 0x406a5800,
- 0x0401f768, 0x1c01f000, 0x59c4d00d, 0x8c68d51e,
- 0x04020004, 0x59c4d005, 0x8c68d500, 0x0400000c,
- 0x0201f800, 0x00100447, 0x0201f800, 0x0010474e,
- 0x80c589c0, 0x0400000f, 0x0201f800, 0x001046af,
- 0x816d7040, 0x040000a3, 0x0401f11b, 0x4a035043,
- 0x00000001, 0x4202d800, 0x00000004, 0x4200d000,
- 0x0010bd87, 0x0201f800, 0x0010ae0f, 0x0401f112,
- 0x0201f800, 0x00104779, 0x80c589c0, 0x0402008b,
- 0x0201f800, 0x0010331d, 0x59c4d0a4, 0x8268d500,
- 0x0000000f, 0x82697480, 0x00000006, 0x83f17500,
- 0x03000000, 0x040007e9, 0x0201f800, 0x001059e2,
- 0x59c4d0a3, 0x8468d528, 0x486b88a3, 0x59a8d05f,
- 0x8068d1c0, 0x040000c5, 0x59a8e072, 0x8270d500,
- 0x00001f00, 0x8068d910, 0x826d7480, 0x00000002,
- 0x83f17500, 0x03000000, 0x040000a9, 0x59a8d015,
- 0x8468d546, 0x486b5015, 0x0201f800, 0x0010475b,
- 0x80c589c0, 0x040000a9, 0x59c4d006, 0x8268d540,
- 0x44000001, 0x486b8806, 0x59c4d006, 0x8268d500,
- 0xffffff0f, 0x486b8806, 0x497b9005, 0x4a038802,
- 0x0000ffff, 0x4a0378e4, 0x00003000, 0x4200d000,
- 0x0010b996, 0x5868d400, 0x8c68d508, 0x04020003,
- 0x4a0378e4, 0x000c0000, 0x4200d000, 0x0010bc60,
- 0x0201f800, 0x0010ae0f, 0x59a8d00f, 0x4200d800,
- 0x00000003, 0x0201f800, 0x001061d7, 0x4200d000,
- 0x00008010, 0x59a8d809, 0x0201f800, 0x001031f3,
- 0x59c8d015, 0x8468d548, 0x486b9015, 0x0201f800,
- 0x00101617, 0x59a8d008, 0x8468d500, 0x486b5008,
- 0x850e1d0a, 0x0201f800, 0x0010ec6e, 0x0201f800,
- 0x0010474e, 0x80c589c0, 0x04020003, 0x8d0e1d06,
- 0x0402008f, 0x0201f800, 0x001040de, 0x80c589c0,
- 0x04000081, 0x59c4d002, 0x8468d50c, 0x486b8802,
- 0x497b501d, 0x497b501c, 0x497b5057, 0x0201f800,
- 0x0010474e, 0x80c589c0, 0x0400006c, 0x497b521b,
- 0x0201f800, 0x001013ff, 0x59a8d01f, 0x82680500,
- 0xffff0000, 0x80c4d540, 0x486b501f, 0x599cd017,
- 0x8c68d50a, 0x04000004, 0x59a8d21b, 0x8468d544,
- 0x486b521b, 0x4200d000, 0x00000005, 0x0201f800,
- 0x00106774, 0x497b501d, 0x497b5016, 0x4a035017,
- 0x0000ffff, 0x4a0378e4, 0x080000c0, 0x4202d800,
- 0x00000002, 0x0201f800, 0x0010474e, 0x80c589c0,
- 0x04020007, 0x59a8d21b, 0x8268d500, 0x0000000c,
- 0x82697480, 0x00000004, 0x0400076c, 0x0201f800,
- 0x0010e25a, 0x0401f084, 0x5994d02d, 0x42000000,
- 0x001039e8, 0x80697480, 0x04000031, 0x59c4d006,
- 0x8268d540, 0x000000c0, 0x486b8806, 0x0401f76d,
- 0x59a8d011, 0x82697480, 0x00000009, 0x0402075b,
- 0x497b500f, 0x4a038805, 0x000000f0, 0x0201f800,
- 0x0010476a, 0x80c589c0, 0x0400004b, 0x59c4d006,
- 0x8268d540, 0x000000f1, 0x486b8806, 0x59c4d006,
- 0x8268d500, 0xbbffffff, 0x486b8806, 0x0201f800,
- 0x001059e2, 0x0201f800, 0x001061e2, 0x59a8d873,
- 0x826d7480, 0x00000000, 0x83f17500, 0x0c000000,
- 0x04000004, 0x82b97580, 0x0c000000, 0x0402004d,
- 0x4a038893, 0x00000001, 0x4200d000, 0x0010bc69,
- 0x0201f800, 0x0010ae0f, 0x497b5056, 0x4200d000,
- 0x00008030, 0x4178d800, 0x0401f784, 0x5994d02c,
- 0x8068d1c0, 0x0402073f, 0x0401f7cd, 0x806cd840,
- 0x8270d500, 0x00ff0000, 0x806c00d0, 0x8068d540,
- 0x486b9035, 0x0401f752, 0x59c4d006, 0x8268d540,
- 0x440000f1, 0x0401f75c, 0x59a8d01f, 0x8268d500,
- 0xffff0000, 0x486b501f, 0x0201f800, 0x001013ff,
- 0x48c78880, 0x0401f796, 0x0201f800, 0x00103924,
- 0x0401f035, 0x0201f800, 0x0010474e, 0x80c589c0,
- 0x04000011, 0x59a8d018, 0x8068d1c0, 0x0402077d,
- 0x0201f800, 0x00108c7d, 0x0401f77a, 0x4a035056,
- 0x00000001, 0x850e1d0e, 0x0201f800, 0x00103474,
- 0x0401f025, 0x59c4d006, 0x8268d540, 0x440000f1,
- 0x0401f7ba, 0x0201f800, 0x00108c7d, 0x59a8d21b,
- 0x8c68d506, 0x0402076b, 0x59a8d018, 0x8068d1c0,
- 0x04020007, 0x59a8d41b, 0x8c68d508, 0x04000765,
- 0x82697480, 0x0000ffff, 0x04000762, 0x4a03541b,
- 0x0000ffff, 0x0201f800, 0x00103a43, 0x0401f75d,
- 0x59aa6874, 0x5934d400, 0x82697480, 0x00000404,
- 0x04020007, 0x8c6cdd0c, 0x040006ec, 0x826cd500,
- 0x00000003, 0x040007ad, 0x0401f003, 0x0201f800,
- 0x0010a6d9, 0x1c01f000, 0x829d3c80, 0x00000005,
- 0x48813800, 0x48853801, 0x48893802, 0x488d3803,
- 0x48913804, 0x42011800, 0x00000001, 0x41791000,
- 0x40890800, 0x40592000, 0x8268f500, 0x00ffffff,
- 0x8278d500, 0x00ff0000, 0x82697480, 0x00ff0000,
- 0x0400003b, 0x41790000, 0x4200b000, 0x000007f0,
- 0x41ace000, 0x4080e800, 0x8278fd00, 0x00ffff00,
- 0x0401f00e, 0x807cf9c0, 0x0400001f, 0x59a8d00f,
- 0x8268d500, 0x00ffff00, 0x407c0000, 0x80697480,
- 0x04000019, 0x41790800, 0x8070e000, 0x8074e800,
- 0x8058b040, 0x04000010, 0x5870d800, 0x806cd9c0,
- 0x04000017, 0x586cd212, 0x8268d500, 0x0000ff00,
- 0x040207ed, 0x586cd002, 0x8268d500, 0x00ffffff,
- 0x40780000, 0x80697480, 0x040207f0, 0x42010800,
- 0x00000001, 0x808509c0, 0x04000011, 0x40768800,
- 0x0401f035, 0x586cd002, 0x8268d500, 0x000000ff,
- 0x82780500, 0x000000ff, 0x0401f7f3, 0x808101c0,
- 0x040207e2, 0x808911c0, 0x040207e0, 0x40750000,
- 0x42011000, 0x00000001, 0x0401f7dc, 0x808911c0,
- 0x04000018, 0x40828800, 0x0401f023, 0x82797480,
- 0x00fffffb, 0x040007c4, 0x040017c3, 0x82797480,
- 0x00ffffff, 0x040007c0, 0x82797480, 0x00fffffd,
- 0x04000014, 0x82797480, 0x00fffffd, 0x83f17500,
- 0x03000000, 0x0400000a, 0x82797480, 0x00fffffc,
- 0x0402000a, 0x42028800, 0x000007fc, 0x0401f00e,
- 0x487bc857, 0x40891800, 0x0401f00b, 0x82797480,
- 0x00fffffe, 0x04000006, 0x41791800, 0x0401f006,
- 0x42028800, 0x000007fd, 0x0401f003, 0x42028800,
- 0x000007fe, 0x4090b000, 0x408d8800, 0x589d2004,
- 0x589d1803, 0x589d1002, 0x589d0801, 0x589d0000,
- 0x829d3c00, 0x00000005, 0x1c01f000, 0x486bc857,
- 0x0401ff86, 0x1c01f000, 0x00000000, 0x00000001,
- 0x00000002, 0x00000003, 0x00000004, 0x00000005,
- 0x00000006, 0x00000007, 0x00000008, 0x00000009,
- 0x0000000a, 0x0000000b, 0x0000000c, 0x0000000d,
- 0x0000000e, 0x0000000f, 0xf500c489, 0x02800004,
- 0x00000000, 0x0000c000, 0x000007e8, 0x073fca5a,
- 0x0705a5a5, 0x01928009, 0x070ff0e1, 0x03800006,
- 0x04958010, 0x05308000, 0x05008000, 0x0600902f,
- 0x07a00582, 0x0202f051, 0x042e4020, 0x008f026b,
- 0x033e5000, 0x03020000, 0x068d0020, 0x05930496,
- 0x00920498, 0x050fb056, 0x040010e6, 0x002fb008,
- 0x060ff0e6, 0x00580401, 0x054880ff, 0x0781001e,
- 0x038c0371, 0x028a0370, 0x068b036e, 0x048e8010,
- 0x0678aae5, 0x06000051, 0x06818194, 0x040010e6,
- 0x0448e0e6, 0x04818010, 0x002fb008, 0x0448e0e6,
- 0x04818010, 0x060ff0e6, 0x00580401, 0x054880ff,
- 0x04818010, 0x022a5001, 0x030430d4, 0x06780043,
- 0x030e0000, 0x030450ff, 0x06780043, 0x03019000,
- 0x0481868a, 0x027c0045, 0x03020000, 0x0781003f,
- 0x027c0045, 0x03040000, 0x078100e1, 0x027c0045,
- 0x03080000, 0x068106fb, 0x0590803f, 0x03910688,
- 0x010410a6, 0x0379ff41, 0x037fffff, 0x072d6000,
- 0x07601441, 0x050f80ff, 0x032fa009, 0x07f00000,
- 0x05600400, 0x050f80ff, 0x056c04ff, 0x068106ad,
- 0x073fa009, 0x06000001, 0x0279ff02, 0x0700ffff,
- 0x070ff0d1, 0x0179feff, 0x0700ffff, 0x045c0402,
- 0x048186ad, 0x060ff0d0, 0x0179feff, 0x0700ffff,
- 0x057dfeff, 0x0700ffff, 0x06810680, 0x05601041,
- 0x050f80ff, 0x032fa069, 0x07480000, 0x0781069f,
- 0x06780043, 0x070000f0, 0x06810068, 0x037c00ff,
- 0x06000010, 0x06810068, 0x0280069b, 0x0379ff00,
- 0x070fffff, 0x06780043, 0x07f00000, 0x075a0000,
- 0x020ef001, 0x0286069d, 0x05484000, 0x02a181e9,
- 0x062d6001, 0x002fb001, 0x070ff069, 0x0186807b,
- 0x060ff079, 0x055c0441, 0x06810010, 0x012fb000,
- 0x060560fb, 0x03800081, 0x060ff079, 0x028681d3,
- 0x070ff069, 0x055c0441, 0x06810010, 0x060560fb,
- 0x0400d0d0, 0x062d6002, 0x0648300d, 0x0681008f,
- 0x070ff0d1, 0x062d6001, 0x045c040b, 0x06810092,
- 0x05488000, 0x0481808f, 0x072e500c, 0x00208001,
- 0x07a00587, 0x02800010, 0x062d6001, 0x07f00000,
- 0x07f00000, 0x070ff0d1, 0x0179feff, 0x070000ff,
- 0x055c040c, 0x048180d5, 0x0007b001, 0x03079041,
- 0x0307a000, 0x06600a79, 0x050f80ff, 0x053fa80a,
- 0x06000010, 0x068d009e, 0x0307c003, 0x0007d004,
- 0x0107e005, 0x0307f006, 0x02080007, 0x00081008,
- 0x01082009, 0x0308300a, 0x018680aa, 0x0448d07a,
- 0x078106a6, 0x072d5003, 0x0049107a, 0x078100b4,
- 0x070ff009, 0x0154040a, 0x048280b3, 0x068d00b0,
- 0x0108200a, 0x032ff000, 0x010770ff, 0x0008400b,
- 0x0308500c, 0x068d00b6, 0x0678007a, 0x07f00000,
- 0x010880ff, 0x03386000, 0x03010000, 0x072e6300,
- 0x020ef07f, 0x02860010, 0x070ff07d, 0x0450047c,
- 0x050f80ff, 0x002fa819, 0x078d00c3, 0x02080001,
- 0x00081002, 0x0678007a, 0x04000201, 0x078100cf,
- 0x0448807a, 0x068100cd, 0x0379ff03, 0x070000ff,
- 0x0049107a, 0x03a181e2, 0x01082003, 0x068d00d0,
- 0x02386004, 0x03010000, 0x072e6c00, 0x02800010,
- 0x06780043, 0x070000f0, 0x068106a8, 0x050020ff,
- 0x027c0002, 0x06000010, 0x078100dd, 0x028006a8,
- 0x0700c0d1, 0x0379ff0c, 0x070000ff, 0x02800097,
- 0x0204a051, 0x06780043, 0x070000f0, 0x037c00ff,
- 0x06000010, 0x0681818a, 0x072d6000, 0x01948684,
- 0x050fb056, 0x044880e6, 0x04818010, 0x060ff0d0,
- 0x0179feff, 0x0700ffff, 0x057dfeff, 0x0700ffff,
- 0x06810680, 0x0349c0e4, 0x0681813e, 0x013e4000,
- 0x070c0000, 0x07f00000, 0x0349c0e4, 0x0681813e,
- 0x070ff093, 0x045a0201, 0x070ff093, 0x045c0401,
- 0x058180f9, 0x02046092, 0x04002046, 0x060ff002,
- 0x045c0401, 0x0703a0ff, 0x04600202, 0x00540401,
- 0x06828107, 0x04500425, 0x070060ff, 0x0730ffff,
- 0x0700000f, 0x0742000f, 0x048101cb, 0x06a00668,
- 0x0648a002, 0x0781810a, 0x00047089, 0x070ff047,
- 0x045c0443, 0x077800ff, 0x07f00000, 0x078181c9,
- 0x07780047, 0x0500e000, 0x0581866f, 0x070ff006,
- 0x00860138, 0x0179fe47, 0x0700000f, 0x010480ff,
- 0x056c7048, 0x06818123, 0x007a0d4a, 0x04003801,
- 0x0220f001, 0x01800130, 0x07608e48, 0x034a60ff,
- 0x0700f0ff, 0x074b88ff, 0x037000ff, 0x07000600,
- 0x05500448, 0x074d00ff, 0x045a044a, 0x0304a0ff,
- 0x070ff00f, 0x01540406, 0x04820138, 0x04950140,
- 0x05a00209, 0x02868143, 0x0134bfff, 0x070fffff,
- 0x0104102e, 0x050fd041, 0x00800145, 0x0495013e,
- 0x05a00209, 0x0086013e, 0x0202f00e, 0x052e4030,
- 0x040fd02f, 0x04a00268, 0x02800010, 0x0400e02f,
- 0x042e4020, 0x0202f051, 0x0004100e, 0x0004b00e,
- 0x024a6c46, 0x04500423, 0x050070ff, 0x03620024,
- 0x050080ff, 0x04004046, 0x0700500f, 0x03206000,
- 0x05601048, 0x0700a0ff, 0x0700900a, 0x070ff005,
- 0x04500446, 0x00540425, 0x04820176, 0x07601822,
- 0x050f80ff, 0x063fa032, 0x06000002, 0x03203000,
- 0x01204000, 0x03205000, 0x0120b000, 0x0320c000,
- 0x05601641, 0x050f80ff, 0x043fa852, 0x06000001,
- 0x070ff056, 0x056c02ff, 0x050fb0ff, 0x070560ff,
- 0x03079041, 0x05601041, 0x050f80ff, 0x073fa011,
- 0x0600003d, 0x06780043, 0x07f00000, 0x065a007a,
- 0x010880ff, 0x04a00202, 0x058d016f, 0x0208a04a,
- 0x0108b04b, 0x02386001, 0x03010000, 0x072e6300,
- 0x038000bd, 0x0500d00a, 0x05500405, 0x014a68ff,
- 0x070090ff, 0x0154040a, 0x0700c0ff, 0x0600a023,
- 0x0500b024, 0x02206001, 0x07601822, 0x050f80ff,
- 0x063fa04a, 0x06000002, 0x07f00000, 0x07601222,
- 0x050f80ff, 0x043fa819, 0x06000001, 0x0600a00d,
- 0x0080015b, 0x06780043, 0x070000f0, 0x050010ff,
- 0x027c0001, 0x07000030, 0x06810676, 0x027c0001,
- 0x06000020, 0x06810676, 0x0280069b, 0x074860ff,
- 0x068181b0, 0x054880ff, 0x06810010, 0x070ff056,
- 0x050fb0ff, 0x044880e5, 0x0581019f, 0x044880e6,
- 0x04818010, 0x018001a5, 0x056c02ff, 0x050fb0ff,
- 0x070560ff, 0x072e5300, 0x044880e6, 0x04818010,
- 0x072d5003, 0x06780043, 0x07f00000, 0x010880ff,
- 0x058d01a9, 0x03386005, 0x03010000, 0x033e6000,
- 0x0700000c, 0x052e5200, 0x02800010, 0x0448e0e6,
- 0x04818010, 0x002fb008, 0x0448e0e6, 0x04818010,
- 0x05301fff, 0x0700000f, 0x06420001, 0x048101cb,
- 0x06a00668, 0x0648a002, 0x078181b7, 0x062e5080,
- 0x04001089, 0x040fd002, 0x040fd001, 0x02499001,
- 0x058101db, 0x070ff0d4, 0x050fd0ff, 0x045c0401,
- 0x077800ff, 0x07f00000, 0x078181db, 0x02800010,
- 0x012091c9, 0x0280058a, 0x002091cb, 0x0280058a,
- 0x002091cd, 0x0280058a, 0x03209000, 0x0280058a,
- 0x012091d1, 0x0280058a, 0x002091d3, 0x0280058a,
- 0x06780075, 0x06000c07, 0x068105c7, 0x002091d5,
- 0x070fc0ff, 0x06a00575, 0x070fc0ff, 0x05308000,
- 0x0700a000, 0x07a00587, 0x033e5000, 0x0700000c,
- 0x02800010, 0x070ff003, 0x01540477, 0x078281e7,
- 0x07003077, 0x060ff051, 0x010770ff, 0x07c00000,
- 0x04602001, 0x050f80ff, 0x063fa029, 0x06000008,
- 0x02015010, 0x02016051, 0x00017051, 0x00011051,
- 0x05601c41, 0x050f80ff, 0x053fa83a, 0x06000008,
- 0x07f00000, 0x05601041, 0x050f80ff, 0x01464000,
- 0x032fa00a, 0x07006011, 0x05007012, 0x04008013,
- 0x07009014, 0x0600a015, 0x0400b016, 0x0700c017,
- 0x07c00000, 0x072d5003, 0x04601679, 0x050f80ff,
- 0x058d0205, 0x063fa051, 0x0600003e, 0x07c00000,
- 0x06005051, 0x0400e02c, 0x0660060e, 0x050f80ff,
- 0x032fa009, 0x0379ff00, 0x070000ff, 0x076c0000,
- 0x0581022b, 0x0660480e, 0x0500e0ff, 0x034000ff,
- 0x01540427, 0x05820255, 0x03400005, 0x070ff005,
- 0x055c0428, 0x04810257, 0x056c0805, 0x0681820b,
- 0x040f8029, 0x053fa809, 0x07000024, 0x07f00000,
- 0x06600649, 0x050f80ff, 0x032fa009, 0x0379ff00,
- 0x070000ff, 0x076c0000, 0x0681820b, 0x04a0025b,
- 0x0400e049, 0x0080022c, 0x04a0025b, 0x072d6000,
- 0x0460040e, 0x050f80ff, 0x0004d0d0, 0x0379ff4d,
- 0x0700ffff, 0x0104e0d1, 0x0379ff4e, 0x0700ffff,
- 0x062d6002, 0x032fa009, 0x0204f0d0, 0x064b004f,
- 0x07780000, 0x07ffff00, 0x045a044f, 0x070000ff,
- 0x00201008, 0x04002051, 0x06003051, 0x01204000,
- 0x07305000, 0x07000060, 0x03206009, 0x05007022,
- 0x0460040e, 0x050f80ff, 0x032fa042, 0x07f00000,
- 0x06603c0e, 0x050f80ff, 0x053fa812, 0x06000026,
- 0x050010d1, 0x0460340e, 0x050f80ff, 0x012fa80a,
- 0x060ff00e, 0x055c042e, 0x05810259, 0x07c00000,
- 0x0400e026, 0x01800217, 0x0500e02e, 0x0080022c,
- 0x0400e051, 0x00800254, 0x0340002d, 0x050f802b,
- 0x053fa80a, 0x06000016, 0x07f00000, 0x0660480e,
- 0x0302c0ff, 0x034000ff, 0x01540427, 0x05820266,
- 0x07c00000, 0x0202c026, 0x01800265, 0x013e4000,
- 0x03080000, 0x07c00000, 0x077800e4, 0x07000005,
- 0x0581835f, 0x022a5002, 0x0790826f, 0x009102f8,
- 0x030400a6, 0x0678aae5, 0x06000051, 0x01a186de,
- 0x04600e40, 0x050f80ff, 0x032fa021, 0x07f00000,
- 0x074b0000, 0x076c0600, 0x078182fa, 0x060ff002,
- 0x01580403, 0x07810305, 0x05600403, 0x050f80ff,
- 0x073fa009, 0x06000002, 0x0279ff04, 0x0700ffff,
- 0x010440d7, 0x0179fe44, 0x0700ffff, 0x045c0404,
- 0x078182fc, 0x0349f044, 0x04818307, 0x02495001,
- 0x068182fe, 0x060ff079, 0x045c0440, 0x06818292,
- 0x0644f07a, 0x002fb008, 0x060ff079, 0x045c0440,
- 0x06818297, 0x0644f07a, 0x002fb008, 0x0648f001,
- 0x068182ef, 0x04601040, 0x050f80ff, 0x06480001,
- 0x048102b6, 0x0448e001, 0x058102db, 0x02460001,
- 0x0644f001, 0x012fa80a, 0x04008040, 0x00491001,
- 0x078182f3, 0x06a00594, 0x038682f3, 0x070050d8,
- 0x05780105, 0x07ffff00, 0x04600e02, 0x050f80ff,
- 0x053fa812, 0x06000002, 0x07a0057e, 0x062da001,
- 0x013e4000, 0x06000080, 0x06930013, 0x02920013,
- 0x02800010, 0x0644f001, 0x012fa80a, 0x020ef002,
- 0x018602dd, 0x04600840, 0x050f80ff, 0x053fa809,
- 0x06000002, 0x05780105, 0x00800440, 0x017c0105,
- 0x05000400, 0x078182dd, 0x04602002, 0x050f80ff,
- 0x053fa809, 0x06000002, 0x07f00000, 0x04602c40,
- 0x050f80ff, 0x070ff005, 0x053fa809, 0x06000002,
- 0x055c0405, 0x078182dd, 0x070050d8, 0x05780105,
- 0x07ffff00, 0x06006051, 0x04600e02, 0x050f80ff,
- 0x053fa812, 0x06000002, 0x04008040, 0x0045e008,
- 0x07a0057e, 0x008002b0, 0x0644f001, 0x012fa80a,
- 0x050020d8, 0x04600440, 0x050f80ff, 0x073fa00a,
- 0x06000001, 0x06480001, 0x068182e9, 0x05308000,
- 0x03040000, 0x06009040, 0x07a00582, 0x008002b0,
- 0x07a006de, 0x03200003, 0x06600c40, 0x050f80ff,
- 0x032fa00a, 0x008002b0, 0x013e4000, 0x06000080,
- 0x002092ef, 0x0280058a, 0x06009008, 0x05308000,
- 0x05004000, 0x07a00582, 0x008002b0, 0x02209002,
- 0x03800350, 0x03209000, 0x03800350, 0x02209004,
- 0x03800350, 0x06a00368, 0x062da001, 0x05308000,
- 0x05002000, 0x06009040, 0x07a00582, 0x018002b1,
- 0x02209008, 0x03800350, 0x013e4000, 0x06000080,
- 0x02495001, 0x04818346, 0x04600840, 0x050f80ff,
- 0x053fa809, 0x06000001, 0x0721f000, 0x0349f003,
- 0x06810313, 0x0245f01f, 0x06000002, 0x05601600,
- 0x050f80ff, 0x012fa809, 0x06480001, 0x06810346,
- 0x04481001, 0x04818346, 0x04602640, 0x050f80ff,
- 0x012fa809, 0x020ef001, 0x00868346, 0x029b0346,
- 0x050020d8, 0x062da001, 0x06303002, 0x05000430,
- 0x04600440, 0x050f80ff, 0x073fa012, 0x06000001,
- 0x008f8329, 0x050040d8, 0x062da001, 0x05602000,
- 0x050f80ff, 0x073fa009, 0x06000001, 0x060ff004,
- 0x00540402, 0x07820344, 0x06005051, 0x06006051,
- 0x06602440, 0x050f80ff, 0x063fa01a, 0x06000002,
- 0x07f00000, 0x06600a40, 0x050f80ff, 0x073fa00a,
- 0x07000003, 0x060ff040, 0x045a041f, 0x010eb0ff,
- 0x06930013, 0x02920013, 0x02800010, 0x04004002,
- 0x03800333, 0x06a00368, 0x062da001, 0x05308000,
- 0x07005000, 0x06009040, 0x07a00582, 0x050080d8,
- 0x07a00587, 0x062da001, 0x02800013, 0x050fd009,
- 0x040fd040, 0x013e4000, 0x06000080, 0x05308000,
- 0x03013000, 0x07a00582, 0x010440d7, 0x0349f044,
- 0x0681035d, 0x062da001, 0x028f035d, 0x03e00000,
- 0x062da001, 0x02800013, 0x0249c0e5, 0x06810013,
- 0x062da001, 0x07f00000, 0x07f00000, 0x033e5000,
- 0x070c0000, 0x028f0361, 0x03800011, 0x050020d8,
- 0x04600440, 0x050f80ff, 0x073fa00a, 0x06000001,
- 0x07c00000, 0x002fb001, 0x03800371, 0x012fb000,
- 0x03075087, 0x078d0372, 0x03386000, 0x03020000,
- 0x04482075, 0x068103c2, 0x0648a0e6, 0x078103b7,
- 0x0642007f, 0x068103b5, 0x0340007e, 0x060ff038,
- 0x0154047e, 0x02d003a4, 0x0560027d, 0x050f80ff,
- 0x032fa009, 0x030ef000, 0x028605c2, 0x0107d000,
- 0x07600a00, 0x050f80ff, 0x032fa009, 0x03681e00,
- 0x04500420, 0x050f80ff, 0x073fa009, 0x0700003f,
- 0x0280037c, 0x070ff07d, 0x0450047c, 0x050f80ff,
- 0x002fa819, 0x068d0392, 0x02080001, 0x00081002,
- 0x0678007a, 0x04000201, 0x0681039e, 0x0448807a,
- 0x0781039c, 0x0379ff03, 0x070000ff, 0x0049107a,
- 0x03a181e2, 0x01082003, 0x078d039f, 0x02386004,
- 0x03010000, 0x072e6c00, 0x028003c2, 0x038003aa,
- 0x038003ac, 0x028003ae, 0x028003b0, 0x038003b2,
- 0x038003b4, 0x0727c006, 0x0380038e, 0x0727c009,
- 0x0380038e, 0x0727c00c, 0x0380038e, 0x0727c00f,
- 0x0380038e, 0x0727c012, 0x0380038e, 0x0280037f,
- 0x052e6800, 0x028003c2, 0x044880e6, 0x078105f3,
- 0x052e6200, 0x070ff088, 0x0179feff, 0x070fffff,
- 0x058185b8, 0x060ff083, 0x008683e0, 0x033e6000,
- 0x07000003, 0x068d03c2, 0x07286000, 0x07f00000,
- 0x078d03c5, 0x038c0371, 0x0648c0e6, 0x048183e5,
- 0x0448e0e6, 0x078103dd, 0x022093cb, 0x02490075,
- 0x078181db, 0x004920e6, 0x078103d8, 0x06a00631,
- 0x05001088, 0x00700101, 0x03100000, 0x00088001,
- 0x033e6000, 0x07000088, 0x03800622, 0x02386001,
- 0x07030000, 0x033e6000, 0x06000008, 0x0080046d,
- 0x02799075, 0x0700050f, 0x06810010, 0x04601679,
- 0x050080ff, 0x06309052, 0x0600003e, 0x028003e9,
- 0x06602479, 0x050080ff, 0x05309812, 0x07000041,
- 0x0648007a, 0x068103f1, 0x04488075, 0x048183f1,
- 0x040f8008, 0x070fa009, 0x0049107a, 0x03a1846f,
- 0x00798075, 0x06000507, 0x058185de, 0x0448b075,
- 0x068103f8, 0x02493075, 0x068105da, 0x0648c0e6,
- 0x0681840b, 0x078d03fa, 0x02386001, 0x07030000,
- 0x0049107a, 0x04810401, 0x020ef083, 0x0086040b,
- 0x06483075, 0x0481046b, 0x0678007a, 0x07000035,
- 0x00a18575, 0x05308000, 0x07060000, 0x06009079,
- 0x07a00582, 0x0080046b, 0x06483075, 0x0781059f,
- 0x048d040d, 0x02386001, 0x07030000, 0x0444e07a,
- 0x0648307a, 0x0781843f, 0x0448707a, 0x05810466,
- 0x0648f07a, 0x04810429, 0x06a00575, 0x04008079,
- 0x06a00594, 0x0386843a, 0x0049107a, 0x0781843a,
- 0x04600408, 0x050f80ff, 0x053fa809, 0x06000002,
- 0x05780105, 0x07ffff00, 0x05600e7b, 0x050f80ff,
- 0x053fa812, 0x06000002, 0x07a0057e, 0x0080046b,
- 0x0760127b, 0x050f80ff, 0x032fa009, 0x0349c000,
- 0x06818438, 0x04601079, 0x050f80ff, 0x073fa00a,
- 0x0600003d, 0x07f00000, 0x06600a79, 0x050f80ff,
- 0x053fa80a, 0x06000010, 0x0080046b, 0x0046e07a,
- 0x01800466, 0x06009008, 0x05308000, 0x05004000,
- 0x07a00582, 0x0080046b, 0x0760187b, 0x050f80ff,
- 0x032fa011, 0x070ff000, 0x04500401, 0x030460ff,
- 0x060ff025, 0x00540446, 0x05820453, 0x030460ff,
- 0x052e40c0, 0x04092046, 0x0349a0e4, 0x07818450,
- 0x003e4080, 0x0700c000, 0x00800454, 0x003e4080,
- 0x05008000, 0x00800454, 0x04092046, 0x070ff03a,
- 0x02868458, 0x013e4000, 0x07000003, 0x04a00268,
- 0x06600679, 0x050f80ff, 0x00201007, 0x012fa80a,
- 0x0046047a, 0x034630ff, 0x050020ff, 0x06003051,
- 0x04601079, 0x050f80ff, 0x073fa012, 0x06000001,
- 0x0080046b, 0x06a00575, 0x05308000, 0x03020000,
- 0x06009079, 0x07a00582, 0x033e6a00, 0x0700000a,
- 0x02079051, 0x02800010, 0x04604079, 0x050f80ff,
- 0x032fa009, 0x070ff000, 0x01860488, 0x057dfeff,
- 0x07ffffff, 0x05810488, 0x050f8000, 0x012fa811,
- 0x0079fe02, 0x070000ff, 0x077d66ff, 0x060000dc,
- 0x07818488, 0x060ff001, 0x02868489, 0x064b0002,
- 0x06420002, 0x060ff002, 0x05500400, 0x050f80ff,
- 0x05004084, 0x073fa00a, 0x06000002, 0x07c00000,
- 0x04600201, 0x050f80ff, 0x073fa009, 0x06000001,
- 0x0079fe02, 0x070000ff, 0x077d72ff, 0x070000dd,
- 0x07818488, 0x064b0002, 0x06420002, 0x06000001,
- 0x01800482, 0x0605004c, 0x0180049a, 0x05930496,
- 0x07a0057b, 0x054bc450, 0x0481049d, 0x00d0049e,
- 0x0080049d, 0x008004ae, 0x008004b0, 0x0380053a,
- 0x0380054d, 0x018004bd, 0x008004b0, 0x02800504,
- 0x008004ae, 0x008004ae, 0x02800551, 0x008004ae,
- 0x03800555, 0x0380056a, 0x02800526, 0x008004ae,
- 0x008004ae, 0x002094ae, 0x0280058a, 0x073c3fff,
- 0x0700000f, 0x0379ff50, 0x070fffff, 0x060ff079,
- 0x055c0450, 0x0681054a, 0x002fb008, 0x060ff079,
- 0x055c0450, 0x06810549, 0x06a0056d, 0x03800542,
- 0x0179fe50, 0x070fffff, 0x070050ff, 0x060ff079,
- 0x055c0405, 0x048104c7, 0x002fb008, 0x060ff079,
- 0x055c0405, 0x04818546, 0x073c3fff, 0x0700000f,
- 0x070ff087, 0x017980ff, 0x06000507, 0x068184d6,
- 0x02203040, 0x05002087, 0x0049d002, 0x068184d6,
- 0x002fb008, 0x07006087, 0x002fb008, 0x0149d006,
- 0x048104fe, 0x059304db, 0x01257000, 0x052e4003,
- 0x072e5030, 0x0304c050, 0x02400057, 0x06740057,
- 0x06000004, 0x06820016, 0x0049107a, 0x03a1846f,
- 0x04002083, 0x07003084, 0x04004085, 0x06602479,
- 0x050f80ff, 0x063fa01a, 0x06000001, 0x06a00575,
- 0x07a0063a, 0x033e6a00, 0x0700000a, 0x062e5020,
- 0x06a00668, 0x02798102, 0x070000ff, 0x007c8002,
- 0x07000055, 0x048104fb, 0x072e50c0, 0x0648a002,
- 0x048104fb, 0x058d04f6, 0x03386006, 0x03010000,
- 0x033e6000, 0x0700000c, 0x003e4002, 0x07000a00,
- 0x0080046d, 0x07420003, 0x068184ce, 0x00798002,
- 0x06000507, 0x068184d6, 0x008004df, 0x0693050b,
- 0x01257000, 0x073c3fff, 0x0700000f, 0x052e4003,
- 0x072e5030, 0x0304c050, 0x067800e6, 0x07000041,
- 0x06810510, 0x06a00643, 0x0581851b, 0x002fb008,
- 0x067800e6, 0x07000041, 0x06810516, 0x06a00643,
- 0x0581851b, 0x062e5020, 0x003e4002, 0x07000a00,
- 0x03e00000, 0x02800010, 0x06740057, 0x07000018,
- 0x06820016, 0x07a0063a, 0x033e6a00, 0x0700000a,
- 0x002fb008, 0x07a0063a, 0x033e6a00, 0x0700000a,
- 0x02800516, 0x0379ff50, 0x070fffff, 0x060ff079,
- 0x055c0450, 0x0481852c, 0x0245507a, 0x002fb008,
- 0x060ff079, 0x055c0450, 0x04818531, 0x0245507a,
- 0x002fb008, 0x05601050, 0x050f80ff, 0x012fa809,
- 0x02455001, 0x05601050, 0x050f80ff, 0x012fa80a,
- 0x02800543, 0x0495854a, 0x0179fe50, 0x070fffff,
- 0x045c042f, 0x0481854a, 0x0202f051, 0x042e4020,
- 0x02800543, 0x002fb008, 0x003e4002, 0x07000a00,
- 0x02800016, 0x04938549, 0x062e5020, 0x042e4002,
- 0x002fb008, 0x013e4000, 0x05000e00, 0x02800016,
- 0x0179fe50, 0x070fffff, 0x010210ff, 0x02800016,
- 0x0179fe50, 0x070fffff, 0x050340ff, 0x02800543,
- 0x0179fe50, 0x070fffff, 0x0102e0ff, 0x05602a2e,
- 0x050f80ff, 0x05222000, 0x07223000, 0x05224000,
- 0x07225000, 0x07226000, 0x05227000, 0x05228000,
- 0x07229000, 0x0722a000, 0x0522b000, 0x063fa051,
- 0x07000011, 0x0202c026, 0x0522d000, 0x052e400c,
- 0x02800016, 0x030430d4, 0x062e5008, 0x00800198,
- 0x05601050, 0x050f80ff, 0x032fa009, 0x03460000,
- 0x03800578, 0x0246007a, 0x0045207a, 0x02800576,
- 0x0246007a, 0x0600007a, 0x04601079, 0x050f80ff,
- 0x032fa00a, 0x07c00000, 0x0192857b, 0x070500e1,
- 0x07c00000, 0x0245f008, 0x0684057f, 0x020e0008,
- 0x07c00000, 0x070ff009, 0x065a0008, 0x07840584,
- 0x020e0008, 0x07c00000, 0x07840587, 0x020e0008,
- 0x07c00000, 0x05308000, 0x0500d000, 0x07a00582,
- 0x06a0058f, 0x02800010, 0x052e4300, 0x072e500c,
- 0x073c3fff, 0x0700000f, 0x07c00000, 0x06602408,
- 0x050f80ff, 0x032fa011, 0x076a0000, 0x0481859d,
- 0x066a0001, 0x0681059d, 0x06006051, 0x07c00000,
- 0x02206001, 0x07c00000, 0x0678007a, 0x07000021,
- 0x048185a7, 0x0049107a, 0x068105a7, 0x073c3fff,
- 0x0700000f, 0x0080040d, 0x040fd079, 0x0648307a,
- 0x078105ac, 0x06a006d5, 0x038005b1, 0x07a00572,
- 0x05308000, 0x05001000, 0x06009079, 0x07a00582,
- 0x078d05b1, 0x033e6a00, 0x0600000e, 0x02079051,
- 0x03386006, 0x03010000, 0x02800010, 0x0648307a,
- 0x068105bc, 0x06a006d5, 0x03800622, 0x07a00572,
- 0x05308000, 0x05001000, 0x06009079, 0x07a00582,
- 0x03800622, 0x0648307a, 0x078181d1, 0x06a00575,
- 0x022095c2, 0x0280058a, 0x04002089, 0x04780102,
- 0x07f00000, 0x05001088, 0x04740101, 0x03100000,
- 0x04780101, 0x07f00000, 0x060ff002, 0x045c0401,
- 0x048185dc, 0x00088001, 0x033e6000, 0x070000c0,
- 0x0220901a, 0x05308000, 0x01012000, 0x07a00582,
- 0x0380061e, 0x022095da, 0x0280058a, 0x022095dc,
- 0x008001d9, 0x040fd075, 0x040fd07a, 0x040fd079,
- 0x0648307a, 0x078105e7, 0x06780075, 0x06000007,
- 0x058185ee, 0x06a006d5, 0x06486075, 0x078181cf,
- 0x02490075, 0x068181d5, 0x04487075, 0x058185f6,
- 0x038005ff, 0x05308000, 0x03010000, 0x06009079,
- 0x07a00582, 0x02800010, 0x0448e0e6, 0x048183c2,
- 0x008001cd, 0x0648307a, 0x0581861e, 0x05308000,
- 0x0500e000, 0x06009079, 0x07a00582, 0x04008089,
- 0x07a00587, 0x0380061e, 0x07a00572, 0x05308000,
- 0x0700f000, 0x06009079, 0x07000088, 0x06a00607,
- 0x07a00582, 0x02800010, 0x03386000, 0x07030000,
- 0x07f00000, 0x078d060a, 0x033e6a00, 0x0600000e,
- 0x02079051, 0x0448b075, 0x06810615, 0x02493075,
- 0x06810615, 0x05301005, 0x03010000, 0x03800617,
- 0x05301006, 0x03010000, 0x05002087, 0x06485002,
- 0x05818617, 0x0744c000, 0x01088000, 0x02086001,
- 0x07c00000, 0x05001088, 0x06a00631, 0x0644c001,
- 0x00088001, 0x033e6a00, 0x0600000e, 0x004920e6,
- 0x05818627, 0x02079051, 0x078d0627, 0x060ff089,
- 0x034990ff, 0x0781062e, 0x03386005, 0x03010000,
- 0x02800010, 0x03386006, 0x03010000, 0x02800010,
- 0x068d0631, 0x03386000, 0x07030000, 0x07f00000,
- 0x078d0635, 0x070ff087, 0x074850ff, 0x05818636,
- 0x07c00000, 0x078d063a, 0x02386001, 0x07030000,
- 0x07f00000, 0x068d063e, 0x070ff087, 0x074850ff,
- 0x0581863f, 0x07c00000, 0x05002087, 0x0049d002,
- 0x04818652, 0x002fb008, 0x067800e6, 0x07000041,
- 0x002fb008, 0x04818652, 0x06a00668, 0x0448e002,
- 0x07810655, 0x0648a002, 0x0581865f, 0x06486002,
- 0x07810659, 0x02400057, 0x056a02ff, 0x07c00000,
- 0x06a00668, 0x06788102, 0x06000004, 0x04818652,
- 0x04002089, 0x070ff0d4, 0x045c0402, 0x077800ff,
- 0x07f00000, 0x04818652, 0x00202010, 0x028c0652,
- 0x07f00000, 0x06420002, 0x05818660, 0x07a0063a,
- 0x033e6a00, 0x0700000a, 0x07c00000, 0x07f00000,
- 0x060ff0a2, 0x045a0202, 0x060ff0a2, 0x045c0402,
- 0x05818669, 0x07c00000, 0x04a00268, 0x03495047,
- 0x07810674, 0x0320901d, 0x038006d1, 0x0220901f,
- 0x038006d1, 0x014980e4, 0x04818010, 0x013e4000,
- 0x07003000, 0x05600e35, 0x050f80ff, 0x04a007cb,
- 0x01208003, 0x07a00587, 0x0280069b, 0x066c0045,
- 0x078106ee, 0x03209009, 0x038006d1, 0x03209011,
- 0x038006d1, 0x02209007, 0x038006d1, 0x03209003,
- 0x038006d1, 0x00497043, 0x04818686, 0x00494043,
- 0x07810690, 0x02209001, 0x038006d1, 0x072d6000,
- 0x027c0045, 0x03080000, 0x04818680, 0x060ff0d0,
- 0x0179feff, 0x0700ffff, 0x057dfeff, 0x0700ffff,
- 0x078106fc, 0x02800680, 0x0220900d, 0x038006d1,
- 0x0320900f, 0x038006d1, 0x03493000, 0x068106a4,
- 0x027c0045, 0x070a0000, 0x078106af, 0x0220900b,
- 0x038006d1, 0x0320900c, 0x038006a9, 0x02209013,
- 0x05308000, 0x01012000, 0x07a00582, 0x018001a5,
- 0x03209005, 0x038006d1, 0x072e500c, 0x00208002,
- 0x07a00587, 0x02800010, 0x02209015, 0x038006d1,
- 0x05308000, 0x05007000, 0x070090d1, 0x0379ff09,
- 0x0700ffff, 0x07a00582, 0x03209017, 0x038006d1,
- 0x033e5000, 0x06000080, 0x02209019, 0x038006d1,
- 0x033e5000, 0x06000080, 0x060ff0d0, 0x0179feff,
- 0x0700ffff, 0x057dfeff, 0x0700ffff, 0x04818010,
- 0x02400058, 0x00642058, 0x06820010, 0x033e5000,
- 0x06000080, 0x04058051, 0x0320901b, 0x038006d1,
- 0x05308000, 0x01012000, 0x07a00582, 0x00800198,
- 0x04a00268, 0x070ff02e, 0x045c0479, 0x078106dd,
- 0x05308000, 0x05008000, 0x06009079, 0x07a00582,
- 0x07c00000, 0x034900e4, 0x058186e8, 0x013e4000,
- 0x070000c0, 0x07f00000, 0x034900e4, 0x048186e6,
- 0x07c00000, 0x013e4000, 0x06000080, 0x07f00000,
- 0x07f00000, 0x07f00000, 0x034900e4, 0x068106e0,
- 0x038006e8, 0x072d6000, 0x070ff0d1, 0x0179feff,
- 0x0700ffff, 0x017c1cff, 0x070000fc, 0x048186ad,
- 0x059086f5, 0x03910688, 0x010410a6, 0x0379ff41,
- 0x037fffff, 0x0380005c, 0x072d6000, 0x04a007ab,
- 0x020ef004, 0x028606b5, 0x06600004, 0x050f80ff,
- 0x032fa009, 0x07f00000, 0x074b0000, 0x05002000,
- 0x0769ff00, 0x01640800, 0x068206b5, 0x01640e00,
- 0x048286b5, 0x070ff036, 0x045c0404, 0x06818716,
- 0x050f8030, 0x032fa009, 0x0379ff00, 0x0700ffff,
- 0x070ff0d1, 0x0179feff, 0x0700ffff, 0x055c0400,
- 0x068106b3, 0x04482034, 0x078106cc, 0x06483034,
- 0x058186cc, 0x070ff0d4, 0x077800ff, 0x070000f0,
- 0x037c00ff, 0x06000010, 0x05810747, 0x024900e5,
- 0x07818727, 0x033e5000, 0x070000c0, 0x07f00000,
- 0x024900e5, 0x0481072a, 0x033e5000, 0x06000080,
- 0x02800010, 0x04601c04, 0x050f80ff, 0x053fa809,
- 0x06000020, 0x030ef041, 0x038606bd, 0x062d6002,
- 0x05602c41, 0x050f80ff, 0x012fa809, 0x060ff0d0,
- 0x074b00ff, 0x045c0401, 0x06818745, 0x062d6001,
- 0x07602e41, 0x050f80ff, 0x053fa809, 0x06000001,
- 0x070ff0d1, 0x054b80ff, 0x074b0003, 0x055c0403,
- 0x06818745, 0x033e5000, 0x06000080, 0x018007dd,
- 0x07600041, 0x0180072b, 0x024900e5, 0x0781874e,
- 0x033e5000, 0x070000c0, 0x07f00000, 0x024900e5,
- 0x04810751, 0x033e5000, 0x06000080, 0x02800010,
- 0x05a00796, 0x030ef041, 0x028606c1, 0x04058051,
- 0x072d6000, 0x07601241, 0x050f80ff, 0x012fa809,
- 0x0600a0d0, 0x0500b0d1, 0x062d6001, 0x07f00000,
- 0x07f00000, 0x0600c0d0, 0x0500d0d1, 0x062d6002,
- 0x0279ff0d, 0x07ff0000, 0x044d800d, 0x060ff0d0,
- 0x074b00ff, 0x065a000d, 0x06601401, 0x050f80ff,
- 0x073fa022, 0x07000005, 0x0079fe0d, 0x070000ff,
- 0x050020ff, 0x05602c41, 0x050f80ff, 0x073fa00a,
- 0x06000001, 0x020ef004, 0x01860793, 0x04601c04,
- 0x050f80ff, 0x053fa809, 0x06000001, 0x050f80ff,
- 0x053fa80a, 0x06000020, 0x07f00000, 0x07602e41,
- 0x050f80ff, 0x073fa009, 0x06000001, 0x0279ff02,
- 0x070000ff, 0x0678000d, 0x0700ff00, 0x065a0002,
- 0x07602e41, 0x050f80ff, 0x073fa00a, 0x06000001,
- 0x07f00000, 0x07600041, 0x050f80ff, 0x053fa80a,
- 0x06000001, 0x07f00000, 0x07601441, 0x050f80ff,
- 0x073fa00a, 0x06000002, 0x033e5000, 0x06000080,
- 0x018007dd, 0x040f8032, 0x073fa011, 0x06000001,
- 0x060ff002, 0x055c0403, 0x0681879e, 0x00041051,
- 0x07c00000, 0x04600402, 0x04500432, 0x050f80ff,
- 0x053fa809, 0x06000020, 0x07f00000, 0x00400402,
- 0x01680eff, 0x070030ff, 0x040f8032, 0x053fa80a,
- 0x06000001, 0x07c00000, 0x05004036, 0x060000d0,
- 0x0179fe00, 0x0700ffff, 0x057dfeff, 0x0700ffff,
- 0x058107ca, 0x070000d1, 0x0379ff00, 0x0700ffff,
- 0x06005051, 0x060ff031, 0x05500405, 0x050f80ff,
- 0x073fa009, 0x06000002, 0x020ef004, 0x008607c4,
- 0x04600404, 0x050f80ff, 0x012fa809, 0x0079fe01,
- 0x0700ffff, 0x055c0400, 0x058107ca, 0x01400405,
- 0x070050ff, 0x057de0ff, 0x06000007, 0x068187b6,
- 0x04004051, 0x07c00000, 0x072d6000, 0x07f00000,
- 0x07f00000, 0x000110d0, 0x010120d1, 0x062d6001,
- 0x07f00000, 0x07f00000, 0x020130d0, 0x010140d1,
- 0x062d6002, 0x010170d4, 0x07f00000, 0x020150d0,
- 0x030160d1, 0x053fa83a, 0x06000008, 0x07c00000,
- 0x07600c41, 0x050f80ff, 0x01202003, 0x073fa00a,
- 0x06000001, 0x07f00000, 0x05601041, 0x050f80ff,
- 0x032fa069, 0x0380005c, 0x565d6811, 0x02800004,
- 0x00000000, 0x00008000, 0x000005e5, 0x040f801f,
- 0x012fa8c9, 0x040f801f, 0x063fa091, 0x06000010,
- 0x03200005, 0x07420000, 0x050fb000, 0x040f801f,
- 0x073fa011, 0x06000038, 0x040f801f, 0x053fa859,
- 0x0700003a, 0x050fe000, 0x0581800a, 0x0684004a,
- 0x04958019, 0x030e0011, 0x072e4200, 0x03800014,
- 0x0291001f, 0x050010c0, 0x04482001, 0x0781811e,
- 0x06483001, 0x078181a6, 0x02920029, 0x068b0029,
- 0x008a01ab, 0x050010c0, 0x06780001, 0x050007c0,
- 0x06818291, 0x06780001, 0x0500f800, 0x078182db,
- 0x0291003e, 0x050fe02b, 0x0286003e, 0x03681e1d,
- 0x03d0002e, 0x008002ef, 0x0280003e, 0x0280003e,
- 0x0280003e, 0x0280003e, 0x0380031d, 0x0280003e,
- 0x0280003e, 0x02800332, 0x0280003e, 0x0280003e,
- 0x0280003e, 0x0280003e, 0x0280003e, 0x0280003e,
- 0x0280003e, 0x039200cf, 0x040fe031, 0x0286004a,
- 0x06000013, 0x050fb000, 0x066c0073, 0x05810441,
- 0x014920e4, 0x0481804a, 0x03400000, 0x076c0a00,
- 0x05818042, 0x0696004c, 0x03b900f3, 0x05908014,
- 0x010170e1, 0x07780017, 0x03e00000, 0x068100b5,
- 0x050010ff, 0x0179fe17, 0x031fffff, 0x070000ff,
- 0x05600800, 0x050f80ff, 0x073fa009, 0x06000001,
- 0x06780002, 0x02800040, 0x037c00ff, 0x03800000,
- 0x0681006b, 0x0249f002, 0x068100ce, 0x0448e002,
- 0x0681006b, 0x05600e00, 0x050f80ff, 0x073fa009,
- 0x06000001, 0x06780002, 0x07ffff00, 0x037c00ff,
- 0x05000200, 0x048180ce, 0x064bd401, 0x02d0006d,
- 0x038000cc, 0x02800075, 0x0280007f, 0x02800089,
- 0x03800093, 0x0280009d, 0x028000ab, 0x038000cc,
- 0x050fe027, 0x00868079, 0x01028000, 0x0280007c,
- 0x07600027, 0x050f80ff, 0x032fa00a, 0x01027000,
- 0x0340002b, 0x028000ce, 0x040fe025, 0x00868083,
- 0x03026000, 0x02800086, 0x06600025, 0x050f80ff,
- 0x032fa00a, 0x03025000, 0x0340002b, 0x028000ce,
- 0x050fe021, 0x0186808d, 0x01022000, 0x03800090,
- 0x07600021, 0x050f80ff, 0x032fa00a, 0x01021000,
- 0x0340002b, 0x028000ce, 0x040fe023, 0x00868097,
- 0x01024000, 0x0380009a, 0x06600023, 0x050f80ff,
- 0x032fa00a, 0x03023000, 0x0340002b, 0x028000ce,
- 0x05600800, 0x050f80ff, 0x012fa839, 0x0448e001,
- 0x058180a9, 0x06780004, 0x07ffff00, 0x037c00ff,
- 0x05000700, 0x078100a9, 0x04a00107, 0x028000ce,
- 0x050fd000, 0x028000ce, 0x040fe029, 0x018680af,
- 0x0302a000, 0x038000b2, 0x06600029, 0x050f80ff,
- 0x032fa00a, 0x03029000, 0x0340002b, 0x028000ce,
- 0x01640817, 0x058280cc, 0x070ff017, 0x02d000b9,
- 0x028000c1, 0x038000c3, 0x038000c6, 0x038000c9,
- 0x038000cc, 0x038000cc, 0x038000cc, 0x038000cc,
- 0x03e00000, 0x03800014, 0x059080c3, 0x030160e1,
- 0x028000ce, 0x059080c6, 0x030150e1, 0x028000ce,
- 0x059080c9, 0x010140e1, 0x028000ce, 0x060fc013,
- 0x07a005dd, 0x03800014, 0x014940e4, 0x01a180d2,
- 0x0280004a, 0x02681e0d, 0x050fb0ff, 0x04600876,
- 0x050f80ff, 0x053fa809, 0x06000001, 0x05488003,
- 0x058180e1, 0x0400800d, 0x0120d000, 0x013e4000,
- 0x05000200, 0x06009076, 0x04002075, 0x07a005c9,
- 0x07c00000, 0x072e4800, 0x07000012, 0x018680e7,
- 0x060fc013, 0x07c00000, 0x00012013, 0x0747f000,
- 0x05600800, 0x050f80ff, 0x012fa839, 0x0249f001,
- 0x078100f9, 0x01012000, 0x052e4c00, 0x07c00000,
- 0x050fd000, 0x07c00000, 0x070000eb, 0x0349f000,
- 0x058180e8, 0x05600800, 0x050f80ff, 0x012fa839,
- 0x06780004, 0x07ffff00, 0x037c00ff, 0x07000300,
- 0x048180f1, 0x0448e001, 0x048180f1, 0x0079c101,
- 0x07ffffff, 0x027a4b01, 0x03800000, 0x05600800,
- 0x050f80ff, 0x012fa80a, 0x07f00000, 0x06601807,
- 0x070030ff, 0x050f80ff, 0x012fa809, 0x050f8003,
- 0x032fa00a, 0x040fe001, 0x01860114, 0x04600201,
- 0x050f80ff, 0x032fa00a, 0x07c00000, 0x050fe030,
- 0x02868119, 0x07030000, 0x05031000, 0x0180011d,
- 0x07600030, 0x050f80ff, 0x032fa00a, 0x07030000,
- 0x07c00000, 0x022c0004, 0x056c041d, 0x04810134,
- 0x056c021d, 0x0481014c, 0x056c081d, 0x04810180,
- 0x056c0e1d, 0x0481015e, 0x076c061d, 0x0581019a,
- 0x0521d000, 0x0002e013, 0x0202c013, 0x02020013,
- 0x0460021a, 0x050f80ff, 0x053fa80a, 0x07000009,
- 0x03b600e2, 0x0484801f, 0x0280004a, 0x040fe02c,
- 0x0086012a, 0x06000013, 0x04001013, 0x0760122d,
- 0x050f80ff, 0x032fa012, 0x07f00000, 0x0742002b,
- 0x0660002c, 0x050f80ff, 0x053fa809, 0x06000001,
- 0x050fe003, 0x00860149, 0x01028003, 0x0660002c,
- 0x050f80ff, 0x053fa80a, 0x07000009, 0x0080019b,
- 0x00028013, 0x00027013, 0x0080019b, 0x040fe02c,
- 0x00860129, 0x0742002b, 0x0660002c, 0x050f80ff,
- 0x053fa809, 0x06000001, 0x050fe003, 0x0086015b,
- 0x03026003, 0x0660002c, 0x050f80ff, 0x053fa80a,
- 0x07000009, 0x0080019b, 0x02026013, 0x02025013,
- 0x0080019b, 0x040fe02c, 0x00860129, 0x0742002b,
- 0x0660002c, 0x050f80ff, 0x053fa809, 0x06000001,
- 0x050fe003, 0x0086016d, 0x0302a003, 0x0660002c,
- 0x050f80ff, 0x053fa80a, 0x07000009, 0x0180016f,
- 0x0202a013, 0x02029013, 0x0647f020, 0x06486020,
- 0x07818174, 0x04a002e0, 0x00800179, 0x007a0120,
- 0x04000101, 0x04a002e0, 0x0400802c, 0x06a005c2,
- 0x0349a0e4, 0x0581017d, 0x0421d008, 0x0080012a,
- 0x02948129, 0x0521d005, 0x0080012a, 0x040fe02c,
- 0x00860129, 0x0742002b, 0x0660002c, 0x050f80ff,
- 0x053fa809, 0x06000001, 0x050fe003, 0x0086018f,
- 0x01022003, 0x0660002c, 0x050f80ff, 0x053fa80a,
- 0x07000009, 0x00800191, 0x00022013, 0x00021013,
- 0x0647f020, 0x007a0120, 0x04000101, 0x04a002e0,
- 0x0400802c, 0x06a005c2, 0x02948129, 0x0521d005,
- 0x0080012a, 0x00800132, 0x0647f020, 0x06486020,
- 0x078181a0, 0x04a002e0, 0x00800129, 0x007a0120,
- 0x04000101, 0x04a002e0, 0x0400802c, 0x06a005c2,
- 0x00800129, 0x040fd02c, 0x052e4003, 0x00208010,
- 0x06a005c2, 0x00800132, 0x00018098, 0x07480018,
- 0x068181bc, 0x05481018, 0x068181ba, 0x05482018,
- 0x078181b8, 0x07483018, 0x068181b6, 0x002fb004,
- 0x018001bd, 0x012fb003, 0x018001bd, 0x002fb002,
- 0x018001bd, 0x002fb001, 0x018001bd, 0x012fb000,
- 0x0179fe78, 0x070000ff, 0x030190ff, 0x00017086,
- 0x048b01c1, 0x03385000, 0x03020000, 0x07780017,
- 0x00430407, 0x06818251, 0x046c0419, 0x048101fd,
- 0x046c0219, 0x048101cd, 0x07219000, 0x018001e1,
- 0x07219000, 0x07483017, 0x058101e7, 0x05482017,
- 0x058101ee, 0x0448b075, 0x078181e1, 0x04601676,
- 0x050f80ff, 0x073fa022, 0x0600003e, 0x06000080,
- 0x05001081, 0x05002082, 0x06003083, 0x05004084,
- 0x06601e76, 0x050f80ff, 0x022fa02a, 0x07219000,
- 0x07780078, 0x07ffff00, 0x045a0419, 0x010780ff,
- 0x0484801f, 0x0280004a, 0x040fe07f, 0x018601f6,
- 0x04a00216, 0x019201e1, 0x040fe07f, 0x06a68216,
- 0x018001e1, 0x0760127b, 0x050f80ff, 0x032fa009,
- 0x0744f000, 0x0760127b, 0x050f80ff, 0x032fa00a,
- 0x018001d4, 0x052e400c, 0x040080fb, 0x046aa108,
- 0x06009076, 0x04002075, 0x07a005c9, 0x018001e1,
- 0x06219001, 0x05482017, 0x0581020a, 0x058b0200,
- 0x060ff086, 0x0349f0ff, 0x078181c0, 0x07483017,
- 0x04810207, 0x050fd0ff, 0x040fe07f, 0x06a68216,
- 0x018001e1, 0x05004084, 0x04a00273, 0x019201e1,
- 0x070ff07d, 0x0450047c, 0x056004ff, 0x050f80ff,
- 0x032fa009, 0x070ff000, 0x00540479, 0x030790ff,
- 0x018001ee, 0x060ff079, 0x0054047a, 0x0482024a,
- 0x0481024a, 0x070ff07d, 0x0450047c, 0x050f80ff,
- 0x002fa819, 0x058b021e, 0x034960e4, 0x05810227,
- 0x02681e01, 0x06818225, 0x03642203, 0x07828227,
- 0x013e4000, 0x07003000, 0x02080001, 0x00081002,
- 0x01082003, 0x048b022a, 0x03385000, 0x03010000,
- 0x02400019, 0x070ff003, 0x04500479, 0x030790ff,
- 0x0340007e, 0x0642007f, 0x0481024a, 0x070ff07e,
- 0x050f80ff, 0x032fa009, 0x050fe000, 0x02868249,
- 0x070ff07d, 0x056002ff, 0x050f80ff, 0x032fa009,
- 0x0107d000, 0x0186024b, 0x07600a7d, 0x050f80ff,
- 0x032fa009, 0x03681e00, 0x0550041b, 0x050f80ff,
- 0x032fa009, 0x0107e000, 0x070ff07e, 0x01800235,
- 0x0307c000, 0x07c00000, 0x052e400c, 0x040080fb,
- 0x046aa108, 0x06009076, 0x04002075, 0x038005c9,
- 0x040fd076, 0x050fd017, 0x060ff086, 0x077800ff,
- 0x07000060, 0x037c00ff, 0x07000060, 0x07818253,
- 0x07780078, 0x07ffff00, 0x045a0419, 0x010780ff,
- 0x04601676, 0x050f80ff, 0x073fa022, 0x0600003e,
- 0x052e400c, 0x04600876, 0x050f80ff, 0x053fa809,
- 0x06000001, 0x05488003, 0x0481026d, 0x0400d0fb,
- 0x066a810d, 0x013e4000, 0x07000300, 0x02800029,
- 0x040080fb, 0x066a8108, 0x06009076, 0x04002075,
- 0x07a005c9, 0x02800029, 0x0240007f, 0x0742007e,
- 0x050f807e, 0x032fa009, 0x050fe000, 0x0386828d,
- 0x070ff07d, 0x055c047b, 0x05810282, 0x0760007d,
- 0x050f80ff, 0x032fa009, 0x050fe000, 0x03868282,
- 0x070ff07b, 0x0107d0ff, 0x07600a7d, 0x050f80ff,
- 0x032fa009, 0x03681e00, 0x0450041c, 0x0107e0ff,
- 0x050f80ff, 0x032fa009, 0x050fe000, 0x0086028f,
- 0x0307c000, 0x07c00000, 0x040fd076, 0x038005dd,
- 0x010180c0, 0x0548e018, 0x078182aa, 0x0748f018,
- 0x078182a6, 0x03490018, 0x068182a2, 0x01491018,
- 0x0681829e, 0x073c0000, 0x06000040, 0x02200004,
- 0x008002ad, 0x073c0000, 0x06000020, 0x03200003,
- 0x008002ad, 0x073c0000, 0x06000010, 0x02200002,
- 0x008002ad, 0x073c0000, 0x06000008, 0x02200001,
- 0x008002ad, 0x073c0000, 0x06000004, 0x06000013,
- 0x050fb000, 0x040fe076, 0x008602d0, 0x046c0273,
- 0x068182bc, 0x0448b075, 0x058102c3, 0x06000013,
- 0x04001013, 0x0760127b, 0x050f80ff, 0x032fa012,
- 0x0046b075, 0x03b600e2, 0x008002c4, 0x066c0073,
- 0x048102c1, 0x040fd076, 0x07a005dd, 0x03800014,
- 0x040fd076, 0x008002c4, 0x00452075, 0x00077013,
- 0x0647f075, 0x06486075, 0x078182ca, 0x04a002e6,
- 0x008002d0, 0x007a0175, 0x04000101, 0x04a002e6,
- 0x04008076, 0x0245f008, 0x06a005c2, 0x07273000,
- 0x05600272, 0x050f80ff, 0x053fa80a, 0x07000009,
- 0x0379ff78, 0x070000ff, 0x02076013, 0x02075013,
- 0x0484801f, 0x0280004a, 0x070fc0ff, 0x052e400c,
- 0x00208020, 0x06a005c2, 0x008002d9, 0x06000020,
- 0x04001016, 0x0460082c, 0x050f80ff, 0x032fa012,
- 0x07c00000, 0x06000075, 0x040010a2, 0x044b0801,
- 0x060ff016, 0x065a0001, 0x04600876, 0x050f80ff,
- 0x032fa012, 0x07c00000, 0x040fe02a, 0x018602f5,
- 0x0421d007, 0x0202c02a, 0x07a00339, 0x03800311,
- 0x050fe022, 0x03860300, 0x0421d004, 0x0302c022,
- 0x07a00339, 0x04488020, 0x07810311, 0x040fd02c,
- 0x0521d000, 0x0202c013, 0x02020013, 0x040fe026,
- 0x03860317, 0x0421d001, 0x0202c026, 0x07a00339,
- 0x00683e20, 0x070060ff, 0x056c0206, 0x0681036b,
- 0x056c0406, 0x07810382, 0x076c0606, 0x068103f8,
- 0x04488020, 0x04818313, 0x056c1606, 0x05810406,
- 0x06a005b9, 0x0380032b, 0x040fd02c, 0x0521d000,
- 0x0202c013, 0x02020013, 0x050fe028, 0x0386032b,
- 0x0302c028, 0x0421d002, 0x07a00339, 0x02800340,
- 0x040fe02a, 0x02860323, 0x0421d007, 0x0202c02a,
- 0x07a00339, 0x0280032a, 0x050fe022, 0x0386032b,
- 0x0421d004, 0x0302c022, 0x07a00339, 0x04488020,
- 0x0581832d, 0x06a005b9, 0x0484803e, 0x0280004a,
- 0x040fd02c, 0x0521d000, 0x0202c013, 0x02020013,
- 0x0380032b, 0x040fe02a, 0x0386032b, 0x0421d007,
- 0x0202c02a, 0x07a00339, 0x06a005b9, 0x0380032b,
- 0x0460082c, 0x050f80ff, 0x032fa039, 0x03020000,
- 0x0102d005, 0x01018006, 0x07c00000, 0x0400702c,
- 0x05a00439, 0x007a0101, 0x07060000, 0x07303000,
- 0x07008290, 0x07600018, 0x050f80ff, 0x053fa809,
- 0x07000003, 0x0448e007, 0x0581834e, 0x06006013,
- 0x03800355, 0x02400010, 0x0781034e, 0x06006010,
- 0x0460342c, 0x050f80ff, 0x073fa00a, 0x07000003,
- 0x050f801e, 0x032fa03a, 0x063aa020, 0x06000002,
- 0x013e4000, 0x07000030, 0x0298035b, 0x070ff0f6,
- 0x036830ff, 0x0581835c, 0x070f001e, 0x0760122d,
- 0x050f10ff, 0x063f3c08, 0x0600000d, 0x013e4000,
- 0x06000020, 0x040f801a, 0x0320000a, 0x022017d0,
- 0x032fa012, 0x0380032b, 0x04007013, 0x05a00439,
- 0x007a0101, 0x07050000, 0x07303000, 0x07008890,
- 0x074d0005, 0x06006013, 0x050f801e, 0x032fa03a,
- 0x07f00000, 0x05601c2d, 0x050f80ff, 0x022fa019,
- 0x04001002, 0x04002013, 0x040f801f, 0x022fa01a,
- 0x073aa00c, 0x06000002, 0x07300c03, 0x0600000d,
- 0x00800426, 0x04007013, 0x05a00439, 0x007a0101,
- 0x03070000, 0x04602a2c, 0x050f80ff, 0x073fa009,
- 0x06000004, 0x02499008, 0x0681038f, 0x07303000,
- 0x07008890, 0x02800391, 0x07303000, 0x04008980,
- 0x05007003, 0x074d0005, 0x06006013, 0x050f801e,
- 0x032fa03a, 0x07f00000, 0x0560162d, 0x050f80ff,
- 0x032fa021, 0x07f00000, 0x064b0002, 0x02499008,
- 0x0781039f, 0x0644c002, 0x054b0400, 0x050040ff,
- 0x06698104, 0x058183b4, 0x06000013, 0x04001013,
- 0x04780102, 0x06000010, 0x06003013, 0x04004013,
- 0x06005013, 0x06006013, 0x04007013, 0x00644015,
- 0x068203b0, 0x04448002, 0x02205008, 0x040f801f,
- 0x032fa042, 0x04008015, 0x038003f0, 0x046c8004,
- 0x048183c2, 0x01208018, 0x06780002, 0x07000003,
- 0x058183c5, 0x06003001, 0x06000013, 0x04001013,
- 0x04004013, 0x06005013, 0x040f801f, 0x022fa032,
- 0x038003f0, 0x040fd02c, 0x07a005dd, 0x03800014,
- 0x0379ff03, 0x070000ff, 0x04488002, 0x078103cc,
- 0x070ff003, 0x04500408, 0x050080ff, 0x0379ff00,
- 0x070000ff, 0x06489002, 0x068103d3, 0x070ff000,
- 0x04500408, 0x050080ff, 0x07005003, 0x05004000,
- 0x06003001, 0x06000013, 0x04001013, 0x040f801f,
- 0x022fa032, 0x07f00000, 0x07601e2d, 0x050f80ff,
- 0x022fa031, 0x07f00000, 0x06600c1f, 0x050f80ff,
- 0x022fa032, 0x02680608, 0x078103f0, 0x016408ff,
- 0x057dfeff, 0x07ffffff, 0x034000ff, 0x045a0407,
- 0x070000ff, 0x0760061e, 0x050f80ff, 0x032fa00a,
- 0x07f00000, 0x06600908, 0x0669f908, 0x027a0008,
- 0x06000020, 0x070aa0ff, 0x024a2408, 0x037a00ff,
- 0x060000dc, 0x070000ff, 0x00800426, 0x04007013,
- 0x05a00439, 0x007a0101, 0x07030000, 0x07303000,
- 0x07008190, 0x06006013, 0x050f801e, 0x032fa03a,
- 0x073aa000, 0x06000002, 0x07300c00, 0x07000005,
- 0x00800426, 0x04007013, 0x05a00439, 0x007a0101,
- 0x07810000, 0x07303000, 0x07000090, 0x06006013,
- 0x04600e2c, 0x050f80ff, 0x053fa809, 0x07000003,
- 0x04780107, 0x07ffff00, 0x007c0107, 0x07000500,
- 0x06818419, 0x07303000, 0x05000890, 0x074d0005,
- 0x04602a2c, 0x050f80ff, 0x053fa809, 0x07000003,
- 0x0049d007, 0x04810420, 0x02206001, 0x050f801e,
- 0x032fa03a, 0x073aa000, 0x06000002, 0x07300c00,
- 0x07000005, 0x013e4000, 0x07000030, 0x01980428,
- 0x070ff0f6, 0x036830ff, 0x06818429, 0x070f001e,
- 0x040f101f, 0x070f3000, 0x013e4000, 0x06000020,
- 0x040f801a, 0x0320000a, 0x022017d0, 0x032fa012,
- 0x0380032b, 0x03200000, 0x06006076, 0x0080043b,
- 0x03200011, 0x0600602c, 0x04a004ef, 0x05600406,
- 0x050f80ff, 0x053fa809, 0x06000002, 0x07c00000,
- 0x02076031, 0x04600876, 0x050f80ff, 0x032fa039,
- 0x03075000, 0x0107b005, 0x01018006, 0x06600076,
- 0x050020ff, 0x050f80ff, 0x032fa011, 0x05031000,
- 0x02868458, 0x04031001, 0x03868456, 0x06030013,
- 0x07601818, 0x050f80ff, 0x053fa80a, 0x07000009,
- 0x0080045e, 0x06030001, 0x0080045e, 0x040fe001,
- 0x00860451, 0x07600030, 0x050f80ff, 0x012fa80a,
- 0x06030001, 0x06000013, 0x04001013, 0x040f8002,
- 0x032fa012, 0x06273001, 0x0448b075, 0x07818469,
- 0x06602276, 0x050f80ff, 0x053fa811, 0x0700003c,
- 0x0179fe78, 0x070000ff, 0x030190ff, 0x03868471,
- 0x04a00485, 0x00078019, 0x01920484, 0x018004e8,
- 0x040fd076, 0x040fd019, 0x04600276, 0x050020ff,
- 0x050f80ff, 0x032fa009, 0x040f8002, 0x053fa80a,
- 0x07000009, 0x050fe000, 0x03868481, 0x07601818,
- 0x050f80ff, 0x053fa80a, 0x07000009, 0x01800482,
- 0x05a00114, 0x07273000, 0x02076013, 0x0280004a,
- 0x048b0485, 0x03385000, 0x07030000, 0x05600818,
- 0x050f80ff, 0x032fa009, 0x07f00000, 0x054b0400,
- 0x0308a0ff, 0x0179fe00, 0x070000ff, 0x010880ff,
- 0x0448b075, 0x048104a8, 0x0560167b, 0x050f80ff,
- 0x002fa819, 0x02080002, 0x01081003, 0x064b0001,
- 0x00082001, 0x034960e4, 0x048104a2, 0x02681e02,
- 0x078184a0, 0x02642201, 0x068284a2, 0x013e4000,
- 0x07003000, 0x02083001, 0x02079001, 0x0207a001,
- 0x00084013, 0x0207f013, 0x008004e0, 0x06485075,
- 0x048104c8, 0x02465075, 0x04601676, 0x050f80ff,
- 0x073fa021, 0x0600003e, 0x070ff07d, 0x0450047c,
- 0x050f80ff, 0x002fa819, 0x048b04b3, 0x034960e4,
- 0x048104bc, 0x02681e01, 0x068184ba, 0x03642203,
- 0x068284bc, 0x013e4000, 0x07003000, 0x02080001,
- 0x00081002, 0x01082003, 0x03079003, 0x0208307a,
- 0x0340007e, 0x0642007f, 0x058104db, 0x070ff07e,
- 0x05a00235, 0x039284db, 0x018004e7, 0x048b04c8,
- 0x04601676, 0x050f80ff, 0x073fa041, 0x0600003e,
- 0x07f00000, 0x034960e4, 0x058104db, 0x014980e4,
- 0x078184db, 0x06601e76, 0x050f80ff, 0x022fa019,
- 0x03681e00, 0x068184d9, 0x02642202, 0x078284db,
- 0x013e4000, 0x07003000, 0x04602676, 0x050f80ff,
- 0x073fa009, 0x06000007, 0x0008400e, 0x048b04e0,
- 0x03385000, 0x03010000, 0x06219001, 0x040fe07f,
- 0x018604e7, 0x00800216, 0x07c00000, 0x00683e75,
- 0x058104ed, 0x0448d075, 0x0681051a, 0x02800552,
- 0x07a005bd, 0x01800484, 0x039784fa, 0x07602418,
- 0x050f80ff, 0x012fa809, 0x06780001, 0x070000ff,
- 0x075a0000, 0x070ff014, 0x0569feff, 0x054b08ff,
- 0x075a0000, 0x05600418, 0x050f80ff, 0x012fa809,
- 0x040fe007, 0x00868501, 0x01204000, 0x02800516,
- 0x05600e06, 0x050f80ff, 0x073fa009, 0x06000002,
- 0x07f00000, 0x064d0004, 0x00700104, 0x03010000,
- 0x06780004, 0x07ff0000, 0x076c00ff, 0x0581850f,
- 0x00700104, 0x03010000, 0x064d0004, 0x05600e06,
- 0x050f80ff, 0x073fa00a, 0x06000002, 0x07f00000,
- 0x044b0804, 0x0279ff01, 0x0700ffff, 0x05002014,
- 0x07c00000, 0x04007076, 0x0448b075, 0x06810534,
- 0x03200011, 0x06006076, 0x04a0043b, 0x007a0101,
- 0x07060000, 0x07303000, 0x07008290, 0x07600018,
- 0x050f80ff, 0x053fa809, 0x07000003, 0x0448e007,
- 0x0481852c, 0x06006013, 0x0380054d, 0x02400010,
- 0x0681052c, 0x06006010, 0x04603476, 0x050f80ff,
- 0x073fa00a, 0x07000003, 0x0380054d, 0x0600007a,
- 0x02493075, 0x0481853d, 0x04602c76, 0x050f80ff,
- 0x032fa009, 0x060ff07a, 0x05500400, 0x070000ff,
- 0x06473075, 0x04602c76, 0x050f80ff, 0x032fa00a,
- 0x05a00436, 0x007a0101, 0x03010000, 0x06303008,
- 0x05008000, 0x0049b075, 0x0681054c, 0x06603676,
- 0x050f80ff, 0x073fa009, 0x06000002, 0x0600600e,
- 0x050f8074, 0x032fa03a, 0x053079a0, 0x0700000c,
- 0x03800599, 0x00683e75, 0x076c0aff, 0x0781056f,
- 0x04007013, 0x03200011, 0x06006076, 0x04a0043b,
- 0x007a0101, 0x03070000, 0x04602a76, 0x050f80ff,
- 0x053fa809, 0x06000001, 0x03499003, 0x07810566,
- 0x07303000, 0x07008890, 0x053079a0, 0x0700000c,
- 0x0380056a, 0x07303000, 0x04008980, 0x04307920,
- 0x0700000c, 0x074d0005, 0x06006013, 0x050f8074,
- 0x032fa03a, 0x03800599, 0x04602c76, 0x050f80ff,
- 0x032fa009, 0x060ff07a, 0x05500400, 0x070000ff,
- 0x06473075, 0x04602c76, 0x050f80ff, 0x032fa00a,
- 0x04007076, 0x05a00436, 0x007a0101, 0x03010000,
- 0x06303008, 0x07008800, 0x074d0005, 0x0049b075,
- 0x07810587, 0x06603676, 0x050f80ff, 0x073fa009,
- 0x06000002, 0x0280058f, 0x06600a76, 0x050f80ff,
- 0x073fa009, 0x07000003, 0x07f00000, 0x054b0406,
- 0x045a0404, 0x050040ff, 0x0600600e, 0x050f8074,
- 0x032fa03a, 0x0648c075, 0x06810597, 0x06307d20,
- 0x0700000c, 0x03800599, 0x04307920, 0x0700000c,
- 0x0049b075, 0x068105a1, 0x0447b075, 0x04600876,
- 0x050f80ff, 0x053fa80a, 0x0700003a, 0x0246f007,
- 0x013e4000, 0x07000030, 0x039805a3, 0x070ff0f6,
- 0x074850ff, 0x048185a4, 0x050f2074, 0x060a0007,
- 0x040070fb, 0x046a7007, 0x050f40ff, 0x013e4000,
- 0x06000020, 0x0320000a, 0x022011f4, 0x00202004,
- 0x06003013, 0x0678007a, 0x07fff000, 0x068105b6,
- 0x0020200e, 0x050f8072, 0x032fa022, 0x01800484,
- 0x01208060, 0x0600902c, 0x04002020, 0x038005c9,
- 0x040080fb, 0x066ae108, 0x06009076, 0x04002075,
- 0x038005c9, 0x03201100, 0x048485c7, 0x06420001,
- 0x058185c3, 0x028005e0, 0x020e0008, 0x07c00000,
- 0x050fd009, 0x040fd008, 0x03201100, 0x048485d0,
- 0x06420001, 0x058185cc, 0x028005e0, 0x007a0102,
- 0x04000101, 0x05600809, 0x050f80ff, 0x073fa00a,
- 0x06000001, 0x020e0008, 0x068405da, 0x030e0009,
- 0x07c00000, 0x01011009, 0x052e4300, 0x07c00000,
- 0x052e400f, 0x01208090, 0x028005c2, 0x070fc0ff,
- 0x040f8013, 0x032fa009, 0x028005e3, 0x780356f6,
- 0xffeecc1b
-};
-#endif
-#ifdef ISP_2400_MULTI
-static const uint32_t isp_2400_multi_risc_code[] = {
- 0x0401f195, 0x00112000, 0x00100000, 0x0000c1f9,
- 0x00000005, 0x00000005, 0x00000000, 0x00009496,
- 0x00000003, 0x00000000, 0x20434f50, 0x59524947,
- 0x48542032, 0x30303720, 0x514c4f47, 0x49432043,
- 0x4f52504f, 0x52415449, 0x4f4e2020, 0x20495350,
- 0x32347878, 0x20466972, 0x6d776172, 0x65202020,
- 0x56657273, 0x696f6e20, 0x2020352e, 0x30352e30,
- 0x30202024, 0x00000000, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x42001800, 0x0010014c, 0x42002000, 0x0010dd51,
- 0x500c0800, 0x800c1800, 0x500c1000, 0x800c1800,
- 0x54042000, 0x80102000, 0x80040800, 0x80081040,
- 0x040207fc, 0x500c0800, 0x800409c0, 0x040207f6,
- 0x44002000, 0x80102000, 0x40100000, 0x44040000,
- 0x80000000, 0x44080000, 0x80000000, 0x440c0000,
- 0x80000000, 0x44100000, 0x80000000, 0x44140000,
- 0x80000000, 0x44180000, 0x80000000, 0x441c0000,
- 0x80000000, 0x44200000, 0x80000000, 0x44240000,
- 0x80000000, 0x44280000, 0x80000000, 0x442c0000,
- 0x80000000, 0x44300000, 0x80000000, 0x44340000,
- 0x80000000, 0x44380000, 0x80000000, 0x443c0000,
- 0x80000000, 0x44400000, 0x80000000, 0x44440000,
- 0x80000000, 0x44480000, 0x80000000, 0x444c0000,
- 0x80000000, 0x44500000, 0x80000000, 0x44540000,
- 0x80000000, 0x44580000, 0x80000000, 0x445c0000,
- 0x80000000, 0x44600000, 0x80000000, 0x44640000,
- 0x80000000, 0x44680000, 0x80000000, 0x446c0000,
- 0x80000000, 0x44700000, 0x80000000, 0x44740000,
- 0x80000000, 0x44780000, 0x80000000, 0x447c0000,
- 0x80000000, 0x44800000, 0x80000000, 0x44840000,
- 0x80000000, 0x44880000, 0x80000000, 0x448c0000,
- 0x80000000, 0x44900000, 0x80000000, 0x44940000,
- 0x80000000, 0x44980000, 0x80000000, 0x449c0000,
- 0x80000000, 0x44a00000, 0x80000000, 0x44a40000,
- 0x80000000, 0x44a80000, 0x80000000, 0x44ac0000,
- 0x80000000, 0x44b00000, 0x80000000, 0x44b40000,
- 0x80000000, 0x44b80000, 0x80000000, 0x44bc0000,
- 0x80000000, 0x44c00000, 0x80000000, 0x44c40000,
- 0x80000000, 0x44c80000, 0x80000000, 0x44cc0000,
- 0x80000000, 0x44d00000, 0x80000000, 0x44d40000,
- 0x80000000, 0x44d80000, 0x80000000, 0x44dc0000,
- 0x80000000, 0x44e00000, 0x80000000, 0x44e40000,
- 0x80000000, 0x44e80000, 0x80000000, 0x44ec0000,
- 0x80000000, 0x44f00000, 0x80000000, 0x44f40000,
- 0x80000000, 0x44f80000, 0x80000000, 0x44fc0000,
- 0x80000000, 0x45000000, 0x80000000, 0x45040000,
- 0x80000000, 0x45080000, 0x80000000, 0x450c0000,
- 0x80000000, 0x45100000, 0x80000000, 0x45140000,
- 0x80000000, 0x45180000, 0x80000000, 0x451c0000,
- 0x80000000, 0x45200000, 0x80000000, 0x45240000,
- 0x80000000, 0x45280000, 0x80000000, 0x452c0000,
- 0x80000000, 0x45300000, 0x80000000, 0x45340000,
- 0x80000000, 0x45380000, 0x80000000, 0x453c0000,
- 0x80000000, 0x45400000, 0x80000000, 0x45440000,
- 0x80000000, 0x45480000, 0x80000000, 0x454c0000,
- 0x80000000, 0x45500000, 0x80000000, 0x45540000,
- 0x80000000, 0x45580000, 0x80000000, 0x455c0000,
- 0x80000000, 0x45600000, 0x80000000, 0x45640000,
- 0x80000000, 0x45680000, 0x80000000, 0x456c0000,
- 0x80000000, 0x45700000, 0x80000000, 0x45740000,
- 0x80000000, 0x45780000, 0x80000000, 0x457c0000,
- 0x80000000, 0x45800000, 0x80000000, 0x45840000,
- 0x80000000, 0x45880000, 0x80000000, 0x458c0000,
- 0x80000000, 0x45900000, 0x80000000, 0x45940000,
- 0x80000000, 0x45980000, 0x80000000, 0x459c0000,
- 0x80000000, 0x45a00000, 0x80000000, 0x45a40000,
- 0x80000000, 0x45a80000, 0x80000000, 0x45ac0000,
- 0x80000000, 0x45b00000, 0x80000000, 0x45b40000,
- 0x80000000, 0x45b80000, 0x80000000, 0x45bc0000,
- 0x80000000, 0x45c00000, 0x80000000, 0x45c40000,
- 0x80000000, 0x45c80000, 0x80000000, 0x45cc0000,
- 0x80000000, 0x45d00000, 0x80000000, 0x45d40000,
- 0x80000000, 0x45d80000, 0x80000000, 0x45dc0000,
- 0x80000000, 0x45e00000, 0x80000000, 0x45e40000,
- 0x80000000, 0x45e80000, 0x80000000, 0x45ec0000,
- 0x80000000, 0x45f00000, 0x80000000, 0x45f40000,
- 0x80000000, 0x45f80000, 0x80000000, 0x45fc0000,
- 0x4a03c020, 0x00004000, 0x4a03c011, 0x40000010,
- 0x04006000, 0x4203e000, 0x40000000, 0x4a03c017,
- 0x00000000, 0x4203e000, 0x30000001, 0x0401f000,
- 0x0000bf00, 0x00000080, 0x0000bfe0, 0x00000020,
- 0x0000ff00, 0x00000080, 0x0000ffd0, 0x00000030,
- 0x00007100, 0x00000010, 0x00007200, 0x00000008,
- 0x00007209, 0x00000007, 0x00007300, 0x00000008,
- 0x00007309, 0x00000007, 0x00007400, 0x00000008,
- 0x00007409, 0x00000007, 0x00007600, 0x000000b0,
- 0x00007700, 0x00000040, 0x00003000, 0x00000070,
- 0x00004000, 0x000000c0, 0x00006000, 0x00000050,
- 0x00006100, 0x00000010, 0x00006130, 0x00000010,
- 0x00006150, 0x00000010, 0x00006170, 0x00000010,
- 0x00006190, 0x00000010, 0x000061b0, 0x00000010,
- 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x00000000, 0x00100000, 0x00100000, 0x0000c1f9,
- 0xffffffff, 0x00112004, 0x00020000, 0x00000cef,
- 0xffffffff, 0x00112cf3, 0x0010f600, 0x00001a9a,
- 0xffffffff, 0x0011478d, 0x0000c000, 0x000008a0,
- 0x00ffffff, 0x0011502d, 0x00008000, 0x0000068c,
- 0x00ffffff, 0x00000000, 0x00000000, 0x00000000,
- 0x00000000, 0x4203f000, 0x00021fff, 0x40000000,
- 0x4203e000, 0x90000100, 0x40000000, 0x42000800,
- 0x00020cf0, 0x4202f000, 0x00000000, 0x42000000,
- 0x00007023, 0x50000000, 0x8c000500, 0x04020003,
- 0x42000800, 0x00020000, 0x45780800, 0x80040800,
- 0x82040580, 0x00022000, 0x040207fc, 0x4178a000,
- 0x4200a800, 0x0010c1f9, 0x42000800, 0x0010f600,
- 0x40540000, 0x8004b480, 0x0201f800, 0x0010c08f,
- 0x0401faca, 0x0401fa01, 0x4803c856, 0x42000000,
- 0x00001000, 0x50000000, 0x82000480, 0x24320002,
- 0x0402000d, 0x0201f800, 0x0010c0d6, 0x04000008,
- 0x42000800, 0x00007a17, 0x50040000, 0x8c00050e,
- 0x04020003, 0x8400054e, 0x44000800, 0x4a030000,
- 0x00000000, 0x4a03c020, 0x00000004, 0x4203e000,
- 0x6000000f, 0x4a0370e8, 0x00000003, 0x4a0378e8,
- 0x00000003, 0x59e00023, 0x8c000500, 0x04020027,
- 0x42002800, 0x0010017d, 0x58140800, 0x4817c857,
- 0x4807c857, 0x800409c0, 0x0400000b, 0x58142002,
- 0x4813c857, 0x58141003, 0x4c140000, 0x0401fa96,
- 0x5c002800, 0x0402002a, 0x82142c00, 0x00000004,
- 0x0401f7f2, 0x42002800, 0x0010017d, 0x5814a000,
- 0x4817c857, 0x4853c857, 0x8050a1c0, 0x0400000f,
- 0x4c140000, 0x5814a801, 0x4857c857, 0x40500000,
- 0x80540480, 0x04000005, 0x5814b002, 0x485bc857,
- 0x0201f800, 0x0010c086, 0x5c002800, 0x82142c00,
- 0x00000004, 0x0401f7ee, 0x42002800, 0x0010017d,
- 0x58140801, 0x4817c857, 0x4807c857, 0x800409c0,
- 0x04000018, 0x58142002, 0x4813c857, 0x58141003,
- 0x4c140000, 0x0401fa70, 0x04020005, 0x5c002800,
- 0x82142c00, 0x00000004, 0x0401f7f2, 0x4803c856,
- 0x4a03c020, 0x00004010, 0x4a03c011, 0x40100011,
- 0x04006000, 0x4203e000, 0x40000000, 0x4a03c017,
- 0x00000000, 0x4203e000, 0x30000001, 0x0401f000,
- 0x4803c856, 0x0201f800, 0x0010f604, 0x0401faf7,
- 0x4a03c014, 0x001c001c, 0x42002000, 0x0011109a,
- 0x0201f800, 0x0010c097, 0x42000000, 0x00001000,
- 0x50000000, 0x82000480, 0x24220001, 0x04000907,
- 0x42000000, 0x00001000, 0x50000000, 0x82000480,
- 0x24320001, 0x04000901, 0x59c40000, 0x82000500,
- 0xffff0000, 0x80000120, 0x82000580, 0x00002422,
- 0x04020005, 0x59a80070, 0x84000540, 0x48035070,
- 0x0401f00a, 0x59e00003, 0x82000500, 0x00030000,
- 0x82000580, 0x00010000, 0x04020004, 0x59a80070,
- 0x84000542, 0x48035070, 0x4c140000, 0x0201f800,
- 0x0010b843, 0x5c002800, 0x42000800, 0x00001100,
- 0x42001800, 0x00000100, 0x82141480, 0x0017ffff,
- 0x0402100d, 0x42000800, 0x00000900, 0x82141480,
- 0x0013ffff, 0x04021008, 0x42000800, 0x00000480,
- 0x42001800, 0x00000080, 0x82141480, 0x0011ffff,
- 0x040018d6, 0x4807500d, 0x480f5251, 0x42001000,
- 0x0000002c, 0x0201f800, 0x00106c7e, 0x82040c00,
- 0x00111584, 0x4807500b, 0x4a03c810, 0x00100000,
- 0x4a03c811, 0x0010c1f9, 0x4a03c812, 0x0010f600,
- 0x4a03c813, 0x00111099, 0x4a03c829, 0x00000004,
- 0x59e40001, 0x82000540, 0x0003403f, 0x4803c801,
- 0x42001000, 0x0000001c, 0x0401f9f1, 0x4202c000,
- 0x00111584, 0x59aab00b, 0x59aaa00b, 0x59aaa80b,
- 0x59aac80d, 0x49675050, 0x59a8000b, 0x4803500c,
- 0x0401fac7, 0x0201f800, 0x00107ea3, 0x0401fad7,
- 0x0401fb27, 0x0201f800, 0x00101a44, 0x0201f800,
- 0x001012e1, 0x0401fbee, 0x0201f800, 0x00100d46,
- 0x0201f800, 0x00106cbe, 0x0401f85c, 0x0201f800,
- 0x00102216, 0x0201f800, 0x0010558d, 0x0201f800,
- 0x00104dbc, 0x0201f800, 0x0010675c, 0x0201f800,
- 0x0010645a, 0x0201f800, 0x00101386, 0x0201f800,
- 0x001011e9, 0x4203e000, 0xf0000001, 0x0201f800,
- 0x0010c18d, 0x4a03c018, 0x00000000, 0x4203e000,
- 0x20000511, 0x4203e000, 0x50010000, 0x4a03c020,
- 0x00000000, 0x04027010, 0x59e00020, 0x82000580,
- 0x00000002, 0x0402000c, 0x4a03c020, 0x00004000,
- 0x4a03c011, 0x40000010, 0x04006000, 0x4203e000,
- 0x40000000, 0x4a03c017, 0x00000000, 0x4203e000,
- 0x30000001, 0x4202d800, 0x00000000, 0x4203e000,
- 0xb0600000, 0x59a80074, 0x4003f800, 0x0201f000,
- 0x00020004, 0x4df00000, 0x4203e000, 0x50000000,
- 0x416c0000, 0x82000c80, 0x00000008, 0x0402186b,
- 0x0c01f804, 0x5c03e000, 0x0201f000, 0x00020008,
- 0x001002d1, 0x00110e96, 0x00110da1, 0x001002d0,
- 0x00110d6d, 0x001002d0, 0x001002d0, 0x001002e3,
- 0x0401f85e, 0x42000800, 0x0010caff, 0x5804001e,
- 0x8c000500, 0x0400000d, 0x84000500, 0x4800081e,
- 0x4202d800, 0x00000004, 0x0401f97b, 0x49f3c857,
- 0x5c000800, 0x5c000000, 0x82000540, 0x00003e00,
- 0x4c000000, 0x4c040000, 0x1c01f000, 0x4a038805,
- 0x000000f0, 0x1c01f000, 0x4a035048, 0x00000005,
- 0x4a035049, 0x00000005, 0x4a03504a, 0x00000000,
- 0x4a03504b, 0x00009496, 0x0201f800, 0x00105557,
- 0x4a03541b, 0x0000ffff, 0x4a03500f, 0x00ffffff,
- 0x0201f800, 0x00109be2, 0x4a03501f, 0x20200000,
- 0x4a035020, 0x88000200, 0x4a035021, 0x00ff001f,
- 0x4a035022, 0x000007d0, 0x4a035023, 0x80000000,
- 0x4a035024, 0x00000200, 0x4a035025, 0x00ff0000,
- 0x4a035026, 0x00010000, 0x4a03502d, 0x514c4f47,
- 0x4a03502e, 0x49432020, 0x1c01f000, 0x4d440000,
- 0x417a8800, 0x4c5c0000, 0x4178b800, 0x0201f800,
- 0x0002034c, 0x04020005, 0x0201f800, 0x00104a1c,
- 0x04020002, 0x805cb800, 0x81468800, 0x83440580,
- 0x000007f0, 0x040207f6, 0x405c0800, 0x5c00b800,
- 0x5c028800, 0x1c01f000, 0x4803c857, 0x5c000000,
- 0x4c000000, 0x4803c857, 0x0401f80c, 0x485fc857,
- 0x4203e000, 0x50000000, 0x5c000000, 0x4d780000,
- 0x4200b800, 0x00008002, 0x0401f009, 0x486bc857,
- 0x486fc857, 0x4873c857, 0x485fc857, 0x4203e000,
- 0x50000000, 0x4200b800, 0x00008002, 0x04006000,
- 0x4c000000, 0x4c040000, 0x59bc00ea, 0x4803c857,
- 0x82000500, 0x00000007, 0x82000580, 0x00000001,
- 0x04020005, 0x42000800, 0x00000000, 0x0201f800,
- 0x00106e5a, 0x59b800ea, 0x4803c857, 0x4a0370e8,
- 0x00000004, 0x5c000800, 0x4807c025, 0x80040920,
- 0x4807c026, 0x5c000000, 0x4803c023, 0x80000120,
- 0x4803c024, 0x5c000000, 0x4803c857, 0x4803c021,
- 0x80000120, 0x4803c022, 0x41f80000, 0x4803c029,
- 0x80000120, 0x4803c02a, 0x42000000, 0x00001000,
- 0x50000000, 0x82000480, 0x24320001, 0x4803c857,
- 0x0400104b, 0x0201f800, 0x0010c0d6, 0x04000046,
- 0x42000800, 0x0010e5b0, 0x46000800, 0xfaceface,
- 0x80040800, 0x4c080000, 0x4c0c0000, 0x42001000,
- 0x00007a00, 0x58080013, 0x44000800, 0x80040800,
- 0x58080019, 0x44000800, 0x80040800, 0x5808001a,
- 0x44000800, 0x80040800, 0x5808001b, 0x44000800,
- 0x80040800, 0x5808001c, 0x44000800, 0x80040800,
- 0x5808001f, 0x44000800, 0x80040800, 0x42001000,
- 0x00007a40, 0x42001800, 0x0000000b, 0x50080000,
- 0x44000800, 0x80081000, 0x80040800, 0x800c1840,
- 0x040207fb, 0x42001800, 0x00000003, 0x42001000,
- 0x00007b00, 0x480c1003, 0x58080005, 0x44000800,
- 0x80040800, 0x800c1840, 0x040217fb, 0x42001000,
- 0x00007c00, 0x58080002, 0x44000800, 0x80040800,
- 0x58080003, 0x44000800, 0x80040800, 0x58080020,
- 0x44000800, 0x80040800, 0x58080021, 0x44000800,
- 0x80040800, 0x58080022, 0x44000800, 0x80040800,
- 0x58080023, 0x44000800, 0x80040800, 0x5c001800,
- 0x5c001000, 0x4a030000, 0x00000000, 0x485fc020,
- 0x905cb9c0, 0x825cbd40, 0x00000012, 0x485fc011,
- 0x4203e000, 0x40000000, 0x4202d800, 0x00000005,
- 0x4a03c017, 0x00000000, 0x4203e000, 0x30000001,
- 0x0401f847, 0x0401f7ff, 0x42000000, 0x00000004,
- 0x0401f80c, 0x4a03c855, 0x0001eb5a, 0x59e40001,
- 0x82000540, 0x00000700, 0x4803c801, 0x42000000,
- 0x0010cfb9, 0x49780003, 0x49780004, 0x1c01f000,
- 0x42000800, 0x0010cfbb, 0x44000800, 0x59e40801,
- 0x82041500, 0xfff3c0ff, 0x480bc801, 0x8c040d24,
- 0x0400000c, 0x4c000000, 0x59e41052, 0x59e40054,
- 0x800000d4, 0x82000400, 0x0010e5cc, 0x80081480,
- 0x480bc853, 0x4a03c800, 0x00000040, 0x5c000000,
- 0x4a03c850, 0x0010e5cc, 0x800000d4, 0x82002400,
- 0x0010e5cb, 0x4813c851, 0x4a03c853, 0x00000400,
- 0x42000000, 0x0010e5cc, 0x82001400, 0x00001000,
- 0x45780000, 0x80000000, 0x80081d80, 0x040207fd,
- 0x4807c801, 0x1c01f000, 0x42002000, 0x0010cfb9,
- 0x59e41801, 0x58100c01, 0x82040500, 0x00003800,
- 0x820c1d00, 0xffffc7ff, 0x800c1d40, 0x480fc801,
- 0x1c01f000, 0x5c036000, 0x4db00000, 0x49b3c857,
- 0x4803c857, 0x1c01f000, 0x1c01f000, 0x59a80059,
- 0x8c000530, 0x040207fe, 0x4c080000, 0x42001000,
- 0x00000004, 0x0401f862, 0x5c001000, 0x4201d000,
- 0x00028b0a, 0x0201f800, 0x00106661, 0x4c080000,
- 0x42001000, 0x00000008, 0x0401f859, 0x5c001000,
- 0x4201d000, 0x00028b0a, 0x0201f800, 0x00106661,
- 0x4c080000, 0x42001000, 0x00000010, 0x0401f850,
+ 0x42001000, 0x0000001c, 0x0401f9fa, 0x4202c000,
+ 0x00111d44, 0x59aab00b, 0x59aaa00b, 0x59aaa80b,
+ 0x59aac813, 0x49675056, 0x59a8000b, 0x4803500c,
+ 0x0401fadd, 0x0201f800, 0x00108242, 0x0401faed,
+ 0x0401fb3d, 0x0201f800, 0x00101ab2, 0x0201f800,
+ 0x0010133c, 0x0201f800, 0x00100691, 0x0201f800,
+ 0x00100d6b, 0x0201f800, 0x00107023, 0x0401f85c,
+ 0x0201f800, 0x001022a6, 0x0201f800, 0x0010576d,
+ 0x0201f800, 0x00104f33, 0x0201f800, 0x00106abc,
+ 0x0201f800, 0x001067bd, 0x0201f800, 0x001013e1,
+ 0x0201f800, 0x00101243, 0x4203e000, 0xf0000001,
+ 0x0201f800, 0x0010c72c, 0x4a03c018, 0x00000000,
+ 0x4203e000, 0x20000511, 0x4203e000, 0x50010000,
+ 0x4a03c020, 0x00000000, 0x04027010, 0x59e00020,
+ 0x82000580, 0x00000002, 0x0402000c, 0x4a03c020,
+ 0x00004000, 0x4a03c011, 0x40000010, 0x04006000,
+ 0x4203e000, 0x40000000, 0x4a03c017, 0x00000000,
+ 0x4203e000, 0x30000001, 0x4202d800, 0x00000000,
+ 0x4203e000, 0xb0600000, 0x59a80082, 0x4003f800,
+ 0x0201f000, 0x00020004, 0x4df00000, 0x4203e000,
+ 0x50000000, 0x416c0000, 0x82000c80, 0x00000008,
+ 0x0402186b, 0x0c01f804, 0x5c03e000, 0x0201f000,
+ 0x00020008, 0x001002d2, 0x00111729, 0x001114e2,
+ 0x001002d1, 0x001114ae, 0x001002d1, 0x001002d1,
+ 0x001002e4, 0x0401f85e, 0x42000800, 0x0010d115,
+ 0x5804001e, 0x8c000500, 0x0400000d, 0x84000500,
+ 0x4800081e, 0x4202d800, 0x00000004, 0x0401f983,
+ 0x49f3c857, 0x5c000800, 0x5c000000, 0x82000540,
+ 0x00003e00, 0x4c000000, 0x4c040000, 0x1c01f000,
+ 0x4a038805, 0x000000f0, 0x1c01f000, 0x4a03504e,
+ 0x00000007, 0x4a03504f, 0x00000003, 0x4a035050,
+ 0x00000000, 0x4a035051, 0x00009496, 0x0201f800,
+ 0x00105706, 0x4a035421, 0x0000ffff, 0x4a035015,
+ 0x00ffffff, 0x0201f800, 0x00109f94, 0x4a035025,
+ 0x20200000, 0x4a035026, 0x88000200, 0x4a035027,
+ 0x00ff001f, 0x4a035028, 0x000007d0, 0x4a035029,
+ 0x80000000, 0x4a03502a, 0x00000200, 0x4a03502b,
+ 0x00ff0000, 0x4a03502c, 0x00010000, 0x4a035033,
+ 0x514c4f47, 0x4a035034, 0x49432020, 0x1c01f000,
+ 0x4d440000, 0x417a8800, 0x4c5c0000, 0x4178b800,
+ 0x0201f800, 0x00020353, 0x04020005, 0x0201f800,
+ 0x00104b75, 0x04020002, 0x805cb800, 0x81468800,
+ 0x83440580, 0x000007f0, 0x040207f6, 0x405c0800,
+ 0x5c00b800, 0x5c028800, 0x1c01f000, 0x4803c857,
+ 0x5c000000, 0x4c000000, 0x4803c857, 0x0401f80c,
+ 0x485fc857, 0x4203e000, 0x50000000, 0x5c000000,
+ 0x4d780000, 0x4200b800, 0x00008002, 0x0401f009,
+ 0x486bc857, 0x486fc857, 0x4873c857, 0x485fc857,
+ 0x4203e000, 0x50000000, 0x4200b800, 0x00008002,
+ 0x04006000, 0x4c000000, 0x4c040000, 0x59bc00ea,
+ 0x4803c857, 0x82000500, 0x00000007, 0x82000580,
+ 0x00000001, 0x04020005, 0x42000800, 0x00000000,
+ 0x0201f800, 0x001071c9, 0x59b800ea, 0x4803c857,
+ 0x4a0370e8, 0x00000004, 0x5c000800, 0x4807c025,
+ 0x80040920, 0x4807c026, 0x5c000000, 0x4803c023,
+ 0x80000120, 0x4803c024, 0x5c000000, 0x4803c857,
+ 0x4803c021, 0x80000120, 0x4803c022, 0x41f80000,
+ 0x4803c029, 0x80000120, 0x4803c02a, 0x41780800,
+ 0x59a80006, 0x8c000504, 0x04000004, 0x8d0e1d2e,
+ 0x04000002, 0x84040d48, 0x4807c027, 0x42000000,
+ 0x00001000, 0x50000000, 0x82000480, 0x24320001,
+ 0x4803c857, 0x0400104b, 0x0201f800, 0x0010c62d,
+ 0x04000046, 0x42000800, 0x0010ebce, 0x46000800,
+ 0xfaceface, 0x80040800, 0x4c080000, 0x4c0c0000,
+ 0x42001000, 0x00007a00, 0x58080013, 0x44000800,
+ 0x80040800, 0x58080019, 0x44000800, 0x80040800,
+ 0x5808001a, 0x44000800, 0x80040800, 0x5808001b,
+ 0x44000800, 0x80040800, 0x5808001c, 0x44000800,
+ 0x80040800, 0x5808001f, 0x44000800, 0x80040800,
+ 0x42001000, 0x00007a40, 0x42001800, 0x0000000b,
+ 0x50080000, 0x44000800, 0x80081000, 0x80040800,
+ 0x800c1840, 0x040207fb, 0x42001800, 0x00000003,
+ 0x42001000, 0x00007b00, 0x480c1003, 0x58080005,
+ 0x44000800, 0x80040800, 0x800c1840, 0x040217fb,
+ 0x42001000, 0x00007c00, 0x58080002, 0x44000800,
+ 0x80040800, 0x58080003, 0x44000800, 0x80040800,
+ 0x58080020, 0x44000800, 0x80040800, 0x58080021,
+ 0x44000800, 0x80040800, 0x58080022, 0x44000800,
+ 0x80040800, 0x58080023, 0x44000800, 0x80040800,
+ 0x5c001800, 0x5c001000, 0x4a030000, 0x00000000,
+ 0x485fc020, 0x905cb9c0, 0x825cbd40, 0x00000012,
+ 0x485fc011, 0x4203e000, 0x40000000, 0x4202d800,
+ 0x00000005, 0x4a03c017, 0x00000000, 0x4203e000,
+ 0x30000001, 0x0401f847, 0x0401f7ff, 0x42000000,
+ 0x00000004, 0x0401f80c, 0x4a03c855, 0x0001eb5a,
+ 0x59e40001, 0x82000540, 0x00000700, 0x4803c801,
+ 0x42000000, 0x0010d5d7, 0x49780003, 0x49780004,
+ 0x1c01f000, 0x42000800, 0x0010d5d9, 0x44000800,
+ 0x59e40801, 0x82041500, 0xfff3c0ff, 0x480bc801,
+ 0x8c040d24, 0x0400000c, 0x4c000000, 0x59e41052,
+ 0x59e40054, 0x800000d4, 0x82000400, 0x0010ebea,
+ 0x80081480, 0x480bc853, 0x4a03c800, 0x00000040,
+ 0x5c000000, 0x4a03c850, 0x0010ebea, 0x800000d4,
+ 0x82002400, 0x0010ebe9, 0x4813c851, 0x4a03c853,
+ 0x00000400, 0x42000000, 0x0010ebea, 0x82001400,
+ 0x00001000, 0x45780000, 0x80000000, 0x80081d80,
+ 0x040207fd, 0x4807c801, 0x1c01f000, 0x42002000,
+ 0x0010d5d7, 0x59e41801, 0x58100c01, 0x82040500,
+ 0x00003800, 0x820c1d00, 0xffffc7ff, 0x800c1d40,
+ 0x480fc801, 0x1c01f000, 0x5c036000, 0x4db00000,
+ 0x49b3c857, 0x4803c857, 0x1c01f000, 0x1c01f000,
+ 0x59a80067, 0x8c000530, 0x040207fe, 0x4c080000,
+ 0x42001000, 0x00000004, 0x0401f862, 0x5c001000,
+ 0x4201d000, 0x00028b0a, 0x0201f800, 0x001069c8,
+ 0x4c080000, 0x42001000, 0x00000008, 0x0401f859,
0x5c001000, 0x4201d000, 0x00028b0a, 0x0201f800,
- 0x00106661, 0x0401f7e2, 0x8c00050c, 0x59a80859,
- 0x04020003, 0x84040d30, 0x0401f006, 0x84040d70,
- 0x48075059, 0x42001000, 0x00000000, 0x0401f040,
- 0x48075059, 0x836c0500, 0x00000007, 0x0c01f001,
- 0x00100462, 0x00100448, 0x00100448, 0x00100430,
- 0x00100455, 0x00100448, 0x00100448, 0x00100455,
- 0x59a80070, 0x8c000502, 0x04020013, 0x59c40801,
- 0x82040d00, 0x00018000, 0x82040580, 0x00010000,
- 0x0400000a, 0x82040580, 0x00008000, 0x04000004,
- 0x42001000, 0x42004000, 0x0401f006, 0x42001000,
- 0x22002000, 0x0401f003, 0x42001000, 0x12001000,
- 0x0401f025, 0x42001000, 0x00001004, 0x0401f022,
- 0x59a80070, 0x8c000502, 0x04020008, 0x59a80059,
- 0x8c000534, 0x04020004, 0x42001000, 0x74057005,
- 0x0401f819, 0x1c01f000, 0x42001000, 0x00002008,
- 0x0401f7fc, 0x59a80059, 0x8c000534, 0x0402000a,
- 0x59a80070, 0x8c000502, 0x04000004, 0x42001000,
- 0x24052005, 0x0401f00c, 0x42001000, 0x74057005,
- 0x0401f009, 0x1c01f000, 0x1c01f000, 0x82081500,
- 0x0000001c, 0x82081540, 0x001c0000, 0x480bc013,
- 0x1c01f000, 0x59a80059, 0x8c000530, 0x04000002,
- 0x84081570, 0x480b5059, 0x8c000530, 0x04020005,
- 0x82081500, 0x00007000, 0x80081114, 0x0401fff0,
+ 0x001069c8, 0x4c080000, 0x42001000, 0x00000010,
+ 0x0401f850, 0x5c001000, 0x4201d000, 0x00028b0a,
+ 0x0201f800, 0x001069c8, 0x0401f7e2, 0x8c00050c,
+ 0x59a80867, 0x04020003, 0x84040d30, 0x0401f006,
+ 0x84040d70, 0x48075067, 0x42001000, 0x00000000,
+ 0x0401f040, 0x48075067, 0x836c0500, 0x00000007,
+ 0x0c01f001, 0x0010046b, 0x00100451, 0x00100451,
+ 0x00100439, 0x0010045e, 0x00100451, 0x00100451,
+ 0x0010045e, 0x59a8007e, 0x8c000502, 0x04020013,
+ 0x59c40801, 0x82040d00, 0x00018000, 0x82040580,
+ 0x00010000, 0x0400000a, 0x82040580, 0x00008000,
+ 0x04000004, 0x42001000, 0x42004000, 0x0401f006,
+ 0x42001000, 0x22002000, 0x0401f003, 0x42001000,
+ 0x12001000, 0x0401f025, 0x42001000, 0x00001004,
+ 0x0401f022, 0x59a8007e, 0x8c000502, 0x04020008,
+ 0x59a80067, 0x8c000534, 0x04020004, 0x42001000,
+ 0x74057005, 0x0401f819, 0x1c01f000, 0x42001000,
+ 0x00002008, 0x0401f7fc, 0x59a80067, 0x8c000534,
+ 0x0402000a, 0x59a8007e, 0x8c000502, 0x04000004,
+ 0x42001000, 0x24052005, 0x0401f00c, 0x42001000,
+ 0x74057005, 0x0401f009, 0x1c01f000, 0x1c01f000,
+ 0x82081500, 0x0000001c, 0x82081540, 0x001c0000,
+ 0x480bc013, 0x1c01f000, 0x59a80067, 0x8c000530,
+ 0x04000002, 0x84081570, 0x480b5067, 0x8c000530,
+ 0x04020005, 0x82081500, 0x00007000, 0x80081114,
+ 0x0401fff0, 0x1c01f000, 0x40001800, 0x800c18c2,
+ 0x800c0400, 0x800c18c6, 0x800c0400, 0x800c18c2,
+ 0x800c0400, 0x800c190e, 0x800c0400, 0x80000112,
0x1c01f000, 0x41780000, 0x50041800, 0x800c0400,
0x80040800, 0x80102040, 0x040207fc, 0x80080500,
0x80000540, 0x1c01f000, 0x4202f000, 0x00000000,
@@ -14900,8 +334,8 @@ static const uint32_t isp_2400_multi_risc_code[] = {
0x41792000, 0x41792800, 0x41793000, 0x41793800,
0x41794000, 0x41794800, 0x41795000, 0x41795800,
0x41796000, 0x41796800, 0x41797000, 0x41797800,
- 0x41798000, 0x41798800, 0x42019000, 0x0010cb8f,
- 0x42019800, 0x0010cb65, 0x4179a000, 0x4179a800,
+ 0x41798000, 0x41798800, 0x42019000, 0x0010d1a5,
+ 0x42019800, 0x0010d17b, 0x4179a000, 0x4179a800,
0x4179b000, 0x4179b800, 0x4179c800, 0x4179c000,
0x4179d000, 0x4179d800, 0x4179e000, 0x4179e800,
0x4179f000, 0x4179f800, 0x417a0000, 0x417a0800,
@@ -14911,19 +345,19 @@ static const uint32_t isp_2400_multi_risc_code[] = {
0x417a6800, 0x417a7000, 0x417a7800, 0x417a8000,
0x417a8800, 0x417a9000, 0x417a9800, 0x417ae800,
0x417af800, 0x42030000, 0x00007c00, 0x42031000,
- 0x0010ce60, 0x42031800, 0x0000bf1d, 0x42032000,
- 0x0000bf32, 0x42032800, 0x0010ce28, 0x42033000,
- 0x00020cf9, 0x42034000, 0x0010caff, 0x42033800,
- 0x0010cb1e, 0x42034800, 0x0010cb9e, 0x42035000,
- 0x0010ca80, 0x42035800, 0x0010c280, 0x42030800,
- 0x0010cb60, 0x417b6000, 0x42036800, 0x00006f00,
+ 0x0010d476, 0x42031800, 0x0000bf1d, 0x42032000,
+ 0x0000bf32, 0x42032800, 0x0010d43e, 0x42033000,
+ 0x00020c5a, 0x42034000, 0x0010d115, 0x42033800,
+ 0x0010d134, 0x42034800, 0x0010d1b4, 0x42035000,
+ 0x0010d080, 0x42035800, 0x0010c880, 0x42030800,
+ 0x0010d176, 0x417b6000, 0x42036800, 0x00006f00,
0x4203c800, 0x00003000, 0x42037000, 0x0000ff00,
0x42037800, 0x0000bf00, 0x42038000, 0x00007700,
0x42038800, 0x00004000, 0x42039000, 0x00006000,
- 0x42039800, 0x0010e2e8, 0x4203a000, 0x00007600,
+ 0x42039800, 0x0010e906, 0x4203a000, 0x00007600,
0x4203a800, 0x00007400, 0x4203b000, 0x00007200,
0x4203b800, 0x00007100, 0x4203c000, 0x00007000,
- 0x4203d000, 0x00000000, 0x4203e800, 0x000201b5,
+ 0x4203d000, 0x00000000, 0x4203e800, 0x000201ba,
0x417bd800, 0x1c01f000, 0x42000800, 0x00100000,
0x50040000, 0x4c000000, 0x42000000, 0x0000aaaa,
0x44000800, 0x42001800, 0x00005555, 0x42002000,
@@ -14932,1676 +366,1705 @@ static const uint32_t isp_2400_multi_risc_code[] = {
0x80183040, 0x040207ff, 0x50140000, 0x800c0580,
0x04020004, 0x50040000, 0x800c0580, 0x040207f2,
0x5c000000, 0x44000800, 0x80142840, 0x4817c861,
- 0x4817500a, 0x1c01f000, 0x40681800, 0x59a80819,
+ 0x4817500a, 0x1c01f000, 0x40681800, 0x59a8081f,
0x800409c0, 0x04020008, 0x49781c0c, 0x4a001a0c,
- 0x00000002, 0x4a001804, 0x00000007, 0x59a8000f,
- 0x48001805, 0x0401fdce, 0x800409c0, 0x04020002,
- 0x80040800, 0x48041806, 0x1c01f000, 0x4200b000,
- 0x00000080, 0x59a80078, 0x8c00053e, 0x04000003,
- 0x4200b000, 0x00000040, 0x42024800, 0x0010cfd1,
- 0x42000000, 0x0010d551, 0x48024809, 0x82000400,
- 0x00000010, 0x83264c00, 0x0000000b, 0x8058b040,
- 0x040207fa, 0x1c01f000, 0x59a8080c, 0x4006d000,
- 0x4202b800, 0x00000001, 0x59a8180a, 0x480fc857,
- 0x82041400, 0x00000015, 0x82082400, 0x00000015,
- 0x40100000, 0x800c0480, 0x04001006, 0x44080800,
- 0x40080800, 0x40101000, 0x815eb800, 0x0401f7f7,
- 0x45780800, 0x495f501a, 0x1c01f000, 0x0401f803,
- 0x412d8800, 0x1c01f000, 0x835c0480, 0x00000020,
- 0x0400100a, 0x496bc857, 0x815eb840, 0x416a5800,
- 0x592ed000, 0x497a5800, 0x497a5801, 0x497a5805,
- 0x812e59c0, 0x1c01f000, 0x42000000, 0x0010cf15,
- 0x0201f800, 0x0010bfb3, 0x417a5800, 0x0401f7f9,
- 0x0401f803, 0x412d8800, 0x1c01f000, 0x815eb840,
- 0x04001009, 0x416a5800, 0x492fc857, 0x592ed000,
- 0x497a5800, 0x497a5801, 0x497a5805, 0x812e59c0,
- 0x1c01f000, 0x42000000, 0x0010cf15, 0x0201f800,
- 0x0010bfb3, 0x417ab800, 0x417a5800, 0x0401f7f8,
- 0x492fc857, 0x496a5800, 0x412ed000, 0x815eb800,
- 0x59c80000, 0x82000540, 0x00001200, 0x48039000,
- 0x1c01f000, 0x492fc857, 0x812e59c0, 0x04000007,
- 0x592c0001, 0x497a5801, 0x4c000000, 0x0401fff1,
- 0x5c025800, 0x0401f7f9, 0x1c01f000, 0x4807c856,
- 0x42007000, 0x00020cf0, 0x4a007000, 0x00000000,
- 0x59e00003, 0x82000540, 0x00008080, 0x4803c003,
- 0x4a03b805, 0x90000001, 0x59dc0006, 0x4a03b805,
- 0x70000000, 0x59dc0006, 0x4a03b805, 0x30000000,
- 0x59dc0006, 0x4a03b805, 0x80000000, 0x4200b000,
- 0x00000020, 0x497bb807, 0x8058b040, 0x040207fe,
+ 0x00000002, 0x4a001804, 0x00000007, 0x59a80015,
+ 0x48001805, 0x4c0c0000, 0x0401fdba, 0x5c001800,
+ 0x800409c0, 0x04020002, 0x80040800, 0x48041806,
+ 0x1c01f000, 0x4200b000, 0x00000080, 0x59a80086,
+ 0x8c00053e, 0x04000003, 0x4200b000, 0x00000040,
+ 0x42024800, 0x0010d5ef, 0x42000000, 0x0010db6f,
+ 0x48024809, 0x82000400, 0x00000010, 0x83264c00,
+ 0x0000000b, 0x8058b040, 0x040207fa, 0x1c01f000,
+ 0x59a8080c, 0x4006d000, 0x4202b800, 0x00000001,
+ 0x59a8180a, 0x480fc857, 0x82041400, 0x00000015,
+ 0x82082400, 0x00000015, 0x40100000, 0x800c0480,
+ 0x04001006, 0x44080800, 0x40080800, 0x40101000,
+ 0x815eb800, 0x0401f7f7, 0x45780800, 0x495f5020,
+ 0x1c01f000, 0x0401f803, 0x412d8800, 0x1c01f000,
+ 0x835c0480, 0x00000104, 0x0400100a, 0x496bc857,
+ 0x815eb840, 0x416a5800, 0x592ed000, 0x497a5800,
+ 0x497a5801, 0x497a5805, 0x812e59c0, 0x1c01f000,
+ 0x42000000, 0x0010d52b, 0x0201f800, 0x0010c50a,
+ 0x417a5800, 0x0401f7f9, 0x0401f803, 0x412d8800,
+ 0x1c01f000, 0x815eb840, 0x04001009, 0x416a5800,
+ 0x492fc857, 0x592ed000, 0x497a5800, 0x497a5801,
+ 0x497a5805, 0x812e59c0, 0x1c01f000, 0x42000000,
+ 0x0010d52b, 0x0201f800, 0x0010c50a, 0x417ab800,
+ 0x417a5800, 0x0401f7f8, 0x492fc857, 0x496a5800,
+ 0x412ed000, 0x815eb800, 0x59c80000, 0x82000540,
+ 0x00001200, 0x48039000, 0x1c01f000, 0x492fc857,
+ 0x812e59c0, 0x04000007, 0x592c0001, 0x497a5801,
+ 0x4c000000, 0x0401fff1, 0x5c025800, 0x0401f7f9,
+ 0x1c01f000, 0x4807c856, 0x42007000, 0x00020c51,
+ 0x4a007000, 0x00000000, 0x59e00003, 0x82000540,
+ 0x00008080, 0x4803c003, 0x4a03b805, 0x90000001,
+ 0x59dc0006, 0x4a03b805, 0x70000000, 0x59dc0006,
0x4a03b805, 0x30000000, 0x59dc0006, 0x4a03b805,
- 0x60000001, 0x59dc0006, 0x4a03b805, 0x70000001,
- 0x59dc0006, 0x4a03b805, 0x30000002, 0x4200b000,
- 0x00000020, 0x497bb807, 0x8058b040, 0x040207fe,
- 0x4a03b805, 0x30000000, 0x59dc0006, 0x4a03b805,
- 0x60000001, 0x4803c856, 0x0401ff98, 0x04000d57,
- 0x42001000, 0x0010ce5b, 0x452c1000, 0x4a025801,
- 0x00000001, 0x4a025802, 0x00000100, 0x4a025808,
- 0x00107573, 0x497a5809, 0x497a580a, 0x497a580b,
- 0x0401ff8a, 0x04000d49, 0x42001000, 0x0010ce5c,
- 0x452c1000, 0x4a025801, 0x00000000, 0x4a025802,
- 0x00000100, 0x4a025808, 0x0010102b, 0x497a5803,
- 0x497a5806, 0x497a5807, 0x497a5809, 0x59a80070,
- 0x8c000500, 0x04000006, 0x4a03b805, 0xe0000001,
- 0x59dc0006, 0x8c000522, 0x040007fc, 0x1c01f000,
- 0x40681000, 0x0201f800, 0x00020016, 0x1c01f000,
- 0x42001000, 0x00020026, 0x0201f800, 0x00106509,
- 0x0201f800, 0x00109ccc, 0x0201f800, 0x0010b4ba,
- 0x04000014, 0x4a03b805, 0x30000002, 0x59dc0006,
- 0x4807b800, 0x480bb801, 0x42007000, 0x00020cf0,
- 0x4a007002, 0x00000040, 0x480c7008, 0x58380007,
- 0x82000400, 0x00000005, 0x48007003, 0x4a007000,
- 0x00000003, 0x4803b803, 0x0201f000, 0x00020050,
- 0x42000000, 0x0010ce7d, 0x0201f800, 0x0010bfb3,
- 0x0201f800, 0x00109ce4, 0x42000800, 0x00000001,
- 0x42001000, 0x00020026, 0x0201f800, 0x001064e2,
- 0x42007000, 0x00020cf0, 0x0201f000, 0x00020030,
- 0x58380802, 0x42001000, 0x0000ff00, 0x82040480,
- 0x0000ff00, 0x04021003, 0x40041000, 0x80000580,
- 0x48007002, 0x480bb802, 0x59dc0006, 0x4a03b805,
- 0x10000000, 0x1c01f000, 0x4a03b805, 0x30000001,
- 0x58386001, 0x58301008, 0x4807c857, 0x4803c857,
- 0x4833c857, 0x4a006002, 0x00000200, 0x4a007000,
- 0x00000000, 0x800811c0, 0x02000000, 0x0002002c,
- 0x0201f000, 0x00020092, 0x59dc0006, 0x8c000520,
- 0x0400000a, 0x02004800, 0x00020a80, 0x59dc0006,
- 0x82000500, 0x00006000, 0x04000004, 0x82000580,
- 0x00006000, 0x040207f8, 0x1c01f000, 0x41781800,
- 0x58382005, 0x40300000, 0x80100580, 0x04000007,
- 0x40101800, 0x58102000, 0x801021c0, 0x040207fa,
- 0x4803c856, 0x0401f011, 0x4833c857, 0x58302000,
- 0x49786000, 0x800c19c0, 0x04020008, 0x801021c0,
- 0x04000003, 0x48107005, 0x0401f008, 0x49787005,
- 0x49787004, 0x0401f005, 0x48101800, 0x801021c0,
- 0x04020002, 0x480c7004, 0x1c01f000, 0x4803c856,
- 0x4dc00000, 0x42007000, 0x0010ce5e, 0x4a007400,
- 0x00000000, 0x49787001, 0x42038000, 0x00007720,
+ 0x80000000, 0x4200b000, 0x00000020, 0x497bb807,
+ 0x8058b040, 0x040207fe, 0x4a03b805, 0x30000000,
+ 0x59dc0006, 0x4a03b805, 0x60000001, 0x59dc0006,
+ 0x4a03b805, 0x70000001, 0x59dc0006, 0x4a03b805,
+ 0x30000002, 0x4200b000, 0x00000020, 0x497bb807,
+ 0x8058b040, 0x040207fe, 0x4a03b805, 0x30000000,
+ 0x59dc0006, 0x4a03b805, 0x60000001, 0x4803c856,
+ 0x0401ffad, 0x04000d42, 0x42001000, 0x0010d471,
+ 0x452c1000, 0x4a025801, 0x00000001, 0x4a025802,
+ 0x00000100, 0x4a025808, 0x001078f8, 0x497a5809,
+ 0x497a580a, 0x497a580b, 0x0401ff9f, 0x04000d34,
+ 0x42001000, 0x0010d472, 0x452c1000, 0x4a025801,
+ 0x00000000, 0x4a025802, 0x00000100, 0x4a025808,
+ 0x0010105c, 0x497a5803, 0x497a5806, 0x497a5807,
+ 0x497a5809, 0x59a8007e, 0x8c000500, 0x04000006,
+ 0x4a03b805, 0xe0000001, 0x59dc0006, 0x8c000522,
+ 0x040007fc, 0x1c01f000, 0x40681000, 0x0201f800,
+ 0x00020017, 0x1c01f000, 0x42001000, 0x00020027,
+ 0x0201f800, 0x0010687a, 0x0201f800, 0x0010a07e,
+ 0x58380807, 0x42002000, 0x00000001, 0x58040801,
+ 0x800409c0, 0x04000003, 0x80102000, 0x0401f7fc,
+ 0x0201f800, 0x0010b9e9, 0x04020011, 0x42000000,
+ 0x0010d493, 0x0201f800, 0x0010c50a, 0x0201f800,
+ 0x0010a096, 0x42000800, 0x00000001, 0x42001000,
+ 0x00020027, 0x0201f800, 0x00106844, 0x42007000,
+ 0x00020c51, 0x0201f000, 0x00020031, 0x4a03b805,
+ 0x30000002, 0x59dc0006, 0x4807b800, 0x480bb801,
+ 0x42007000, 0x00020c51, 0x4a007002, 0x00000040,
+ 0x480c7008, 0x58380007, 0x82000400, 0x00000005,
+ 0x48007003, 0x4a007000, 0x00000003, 0x4803b803,
+ 0x0201f000, 0x00020051, 0x58380802, 0x42001000,
+ 0x0000ff00, 0x82040480, 0x0000ff00, 0x04021003,
+ 0x40041000, 0x80000580, 0x48007002, 0x480bb802,
+ 0x59dc0006, 0x4a03b805, 0x10000000, 0x1c01f000,
+ 0x4a03b805, 0x30000001, 0x58386001, 0x58301008,
+ 0x4807c857, 0x4803c857, 0x4833c857, 0x4a006002,
+ 0x00000200, 0x4a007000, 0x00000000, 0x800811c0,
+ 0x02000000, 0x0002002d, 0x0201f000, 0x00020093,
+ 0x59dc0006, 0x8c000520, 0x0400000a, 0x02004800,
+ 0x000209db, 0x59dc0006, 0x82000500, 0x00006000,
+ 0x04000004, 0x82000580, 0x00006000, 0x040207f8,
+ 0x1c01f000, 0x41781800, 0x58382005, 0x40300000,
+ 0x80100580, 0x04000007, 0x40101800, 0x58102000,
+ 0x801021c0, 0x040207fa, 0x4803c856, 0x0401f011,
+ 0x4833c857, 0x58302000, 0x49786000, 0x800c19c0,
+ 0x04020008, 0x801021c0, 0x04000003, 0x48107005,
+ 0x0401f008, 0x49787005, 0x49787004, 0x0401f005,
+ 0x48101800, 0x801021c0, 0x04020002, 0x480c7004,
+ 0x1c01f000, 0x4803c856, 0x4dc00000, 0x42007000,
+ 0x0010d474, 0x4a007400, 0x00000000, 0x49787001,
+ 0x42038000, 0x00007720, 0x4a038006, 0x60000001,
+ 0x4a038009, 0xf4f60000, 0x42038000, 0x00007700,
0x4a038006, 0x60000001, 0x4a038009, 0xf4f60000,
- 0x42038000, 0x00007700, 0x4a038006, 0x60000001,
- 0x4a038009, 0xf4f60000, 0x4a03c822, 0x00000010,
- 0x4a0370e8, 0x00000000, 0x0401f809, 0x4a0370e9,
- 0x00003a0f, 0x4a0370e8, 0x00000000, 0x4a0370e8,
- 0x00000001, 0x5c038000, 0x1c01f000, 0x4c5c0000,
- 0x4178b800, 0x0401f80a, 0x5c00b800, 0x1c01f000,
- 0x4803c856, 0x4c5c0000, 0x825cbd40, 0x00000001,
- 0x0401f803, 0x5c00b800, 0x1c01f000, 0x4803c856,
- 0x4dc00000, 0x4c500000, 0x4c580000, 0x4c540000,
- 0x4a0370e8, 0x00000000, 0x805cb9c0, 0x0400000b,
- 0x4a038807, 0x00000004, 0x4a0370e5, 0x00080000,
- 0x59b800ea, 0x8c000510, 0x04000004, 0x59b800e0,
- 0x0401f87b, 0x0401f7fb, 0x42038000, 0x00007720,
- 0x0201f800, 0x00100ca8, 0x59c00007, 0x4a038006,
- 0x20000000, 0x59c00007, 0x4a038006, 0x8000000a,
- 0x59c00007, 0x4a038006, 0x8000000b, 0x59c00007,
- 0x4a038006, 0x40000001, 0x83c00580, 0x00007700,
- 0x04000004, 0x42038000, 0x00007700, 0x0401f7ed,
- 0x42038000, 0x00007720, 0x42000800, 0x00000800,
- 0x59c00007, 0x8c00051e, 0x04000006, 0x4a038006,
- 0x90000001, 0x80040840, 0x040207fa, 0x0401fc5b,
+ 0x4a03c822, 0x00000010, 0x4a0370e8, 0x00000000,
+ 0x0401f809, 0x4a0370e9, 0x00003a0f, 0x4a0370e8,
+ 0x00000000, 0x4a0370e8, 0x00000001, 0x5c038000,
+ 0x1c01f000, 0x4c5c0000, 0x4178b800, 0x0401f80a,
+ 0x5c00b800, 0x1c01f000, 0x4803c856, 0x4c5c0000,
+ 0x825cbd40, 0x00000001, 0x0401f803, 0x5c00b800,
+ 0x1c01f000, 0x4803c856, 0x4dc00000, 0x4c500000,
+ 0x4c580000, 0x4c540000, 0x4a0370e8, 0x00000000,
+ 0x805cb9c0, 0x0400000b, 0x4a038807, 0x00000004,
+ 0x4a0370e5, 0x00080000, 0x59b800ea, 0x8c000510,
+ 0x04000004, 0x59b800e0, 0x0401f87d, 0x0401f7fb,
+ 0x42038000, 0x00007720, 0x0201f800, 0x00100ccd,
+ 0x59c00007, 0x4a038006, 0x20000000, 0x59c00007,
+ 0x4a038006, 0x8000000a, 0x59c00007, 0x4a038006,
+ 0x8000000b, 0x59c00007, 0x4a038006, 0x40000001,
0x83c00580, 0x00007700, 0x04000004, 0x42038000,
- 0x00007700, 0x0401f7f1, 0x4178a000, 0x805cb9c0,
- 0x0402001d, 0x4200b000, 0x00000020, 0x83b8ac00,
- 0x00000020, 0x0201f800, 0x0010c08f, 0x4a0370fb,
- 0x00000001, 0x4a037020, 0x00100f0b, 0x59a8002c,
- 0x82000500, 0x0000ffff, 0x48037021, 0x4a037035,
- 0x0010e22e, 0x4a037030, 0x0010ca8f, 0x4a037031,
- 0x0010c280, 0x4a037032, 0x0010cb70, 0x4a037036,
- 0x0010cb7b, 0x59840002, 0x48037034, 0x4a037038,
- 0x00100f02, 0x4a0370fb, 0x00000001, 0x4200b000,
- 0x00000020, 0x83b8ac00, 0x00000000, 0x0201f800,
- 0x0010c08f, 0x4200b000, 0x00000040, 0x83b8ac00,
- 0x00000040, 0x0201f800, 0x0010c08f, 0x805cb9c0,
- 0x04020006, 0x4a0370e4, 0xaaaaaaaa, 0x4a0370e5,
- 0xaaaaaaaa, 0x0401f005, 0x4a0370e4, 0xa2aa2a82,
- 0x4a0370e5, 0xaaaaa2aa, 0x4a0370e6, 0xaaaaaaaa,
- 0x4a0370fb, 0x00000000, 0x4a0370e6, 0xaaaaaaaa,
- 0x42038000, 0x00007720, 0x4a038006, 0x90000000,
- 0x59c00007, 0x8c00051e, 0x04020c10, 0x42038000,
- 0x00007700, 0x4a038006, 0x90000000, 0x59c00007,
- 0x8c00051e, 0x04020c09, 0x5c00a800, 0x5c00b000,
+ 0x00007700, 0x0401f7ed, 0x42038000, 0x00007720,
+ 0x42000800, 0x00000800, 0x59c00007, 0x8c00051e,
+ 0x04000006, 0x4a038006, 0x90000001, 0x80040840,
+ 0x040207fa, 0x0401fc3e, 0x83c00580, 0x00007700,
+ 0x04000004, 0x42038000, 0x00007700, 0x0401f7f1,
+ 0x4178a000, 0x805cb9c0, 0x0402001d, 0x4200b000,
+ 0x00000020, 0x83b8ac00, 0x00000020, 0x0201f800,
+ 0x0010c5e6, 0x4a0370fb, 0x00000001, 0x4a037020,
+ 0x00100f3c, 0x59a80032, 0x82000500, 0x0000ffff,
+ 0x48037021, 0x4a037035, 0x0010e84c, 0x4a037030,
+ 0x0010d095, 0x4a037031, 0x0010c880, 0x4a037032,
+ 0x0010d186, 0x4a037036, 0x0010d191, 0x59840002,
+ 0x48037034, 0x4a037038, 0x00100f33, 0x4a0370fb,
+ 0x00000001, 0x4200b000, 0x00000020, 0x83b8ac00,
+ 0x00000000, 0x0201f800, 0x0010c5e6, 0x4200b000,
+ 0x00000040, 0x83b8ac00, 0x00000040, 0x0201f800,
+ 0x0010c5e6, 0x805cb9c0, 0x04020006, 0x4a0370e4,
+ 0xaaaaaaaa, 0x4a0370e5, 0xaaaaaaaa, 0x0401f005,
+ 0x4a0370e4, 0xa2aa2a82, 0x4a0370e5, 0xaaaaa2aa,
+ 0x4a0370e6, 0xaaaaaaaa, 0x4a0370fb, 0x00000000,
+ 0x4a0370e6, 0xaaaaaaaa, 0x42038000, 0x00007720,
+ 0x4a038006, 0x90000000, 0x59c00007, 0x8c00051e,
+ 0x02020800, 0x0010032f, 0x42038000, 0x00007700,
+ 0x4a038006, 0x90000000, 0x59c00007, 0x8c00051e,
+ 0x02020800, 0x0010032f, 0x5c00a800, 0x5c00b000,
0x5c00a000, 0x5c038000, 0x1c01f000, 0x4d300000,
0x4d380000, 0x40026000, 0x82000500, 0x7f000000,
0x82000580, 0x60000000, 0x04020012, 0x83326500,
- 0x00ffffff, 0x0201f800, 0x0010a2d8, 0x0402000d,
+ 0x00ffffff, 0x0201f800, 0x0010a6dc, 0x0402000d,
0x59300203, 0x82000580, 0x00000004, 0x04020009,
0x59300c07, 0x82040580, 0x00000009, 0x04020005,
- 0x42027000, 0x00000047, 0x0201f800, 0x00020bc1,
+ 0x42027000, 0x00000047, 0x0201f800, 0x00020b22,
0x5c027000, 0x5c026000, 0x1c01f000, 0x4d300000,
0x4d2c0000, 0x4d340000, 0x4d400000, 0x4cfc0000,
0x4d380000, 0x4d3c0000, 0x4d440000, 0x4d4c0000,
0x4d480000, 0x4c5c0000, 0x4c600000, 0x4c640000,
0x4d040000, 0x4cc80000, 0x4ccc0000, 0x4cf40000,
- 0x4cf80000, 0x0201f800, 0x00020095, 0x5c01f000,
+ 0x4cf80000, 0x0201f800, 0x00020096, 0x5c01f000,
0x5c01e800, 0x5c019800, 0x5c019000, 0x5c020800,
0x5c00c800, 0x5c00c000, 0x5c00b800, 0x5c029000,
0x5c029800, 0x5c028800, 0x5c027800, 0x5c027000,
0x5c01f800, 0x5c028000, 0x5c026800, 0x5c025800,
0x5c026000, 0x1c01f000, 0x493bc857, 0x0201f000,
- 0x000200c2, 0x83300500, 0x000000ff, 0x82000c80,
- 0x00000007, 0x02021800, 0x0010032e, 0x0c01f025,
+ 0x000200c3, 0x83300500, 0x000000ff, 0x82000c80,
+ 0x00000007, 0x02021800, 0x0010032f, 0x0c01f025,
0x1c01f000, 0x82000d00, 0xc0000038, 0x02020800,
- 0x00100323, 0x0201f800, 0x0010032e, 0x00000000,
- 0x00000048, 0x00000054, 0x00000053, 0x0010079a,
- 0x001007be, 0x001007b9, 0x001007dd, 0x001007a5,
- 0x001007b1, 0x0010079a, 0x001007d8, 0x0010083c,
- 0x0010079a, 0x0010083f, 0x0010079a, 0x0010079a,
- 0x00100843, 0x00100849, 0x00100867, 0x0010087c,
- 0x001007de, 0x00100885, 0x00100891, 0x0010079a,
- 0x0010079a, 0x0010079a, 0x0201f800, 0x0010032e,
- 0x001007a3, 0x00100928, 0x00100802, 0x0010082b,
- 0x001007a3, 0x001007a3, 0x001007a3, 0x0201f800,
- 0x0010032e, 0x4803c856, 0x59300004, 0x8c00053e,
- 0x04020005, 0x42027000, 0x00000055, 0x0201f000,
- 0x00020bc1, 0x0201f800, 0x00107226, 0x040007fa,
- 0x1c01f000, 0x4803c856, 0x0401f8e1, 0x40002800,
- 0x41782000, 0x42027000, 0x00000056, 0x0201f000,
- 0x00020bc1, 0x4803c856, 0x42027000, 0x00000057,
- 0x0201f000, 0x00020bc1, 0x4803c856, 0x59325809,
- 0x812e59c0, 0x04000016, 0x59300008, 0x8c00051a,
- 0x0402000d, 0x592c0409, 0x8c00051c, 0x04020003,
- 0x4a026012, 0xffffffff, 0x59300004, 0x8c00053e,
- 0x04020008, 0x42027000, 0x00000048, 0x0201f000,
- 0x00020bc1, 0x4a025a07, 0x00000007, 0x0401f7f5,
- 0x0201f800, 0x00107226, 0x040007f7, 0x1c01f000,
- 0x4803c856, 0x83300500, 0x00ffffff, 0x0201f000,
- 0x00106aa6, 0x1c01f000, 0x4803c856, 0x813261c0,
- 0x02000800, 0x0010032e, 0x0201f800, 0x0010989f,
- 0x0400000d, 0x59325809, 0x592c0209, 0x84000552,
- 0x48025a09, 0x0201f800, 0x001010ee, 0x59300004,
- 0x8c00053e, 0x04020005, 0x417a7800, 0x0201f800,
- 0x00109425, 0x1c01f000, 0x0201f800, 0x00107226,
- 0x040007fa, 0x1c01f000, 0x4c040000, 0x59b808ea,
- 0x82040d00, 0x00000007, 0x82040580, 0x00000003,
- 0x04000004, 0x42000000, 0x60000000, 0x0401f8c8,
- 0x5c000800, 0x1c01f000, 0x0401f916, 0x0400001b,
- 0x59325809, 0x812e59c0, 0x04000018, 0x592c0205,
- 0x82000500, 0x000000ff, 0x82000d80, 0x00000029,
- 0x04020012, 0x59300203, 0x82000580, 0x00000003,
- 0x0400000b, 0x59300808, 0x84040d26, 0x48066008,
- 0x0201f800, 0x0002011a, 0x4a03900d, 0x00000040,
- 0x4a0370e5, 0x00000008, 0x1c01f000, 0x0201f800,
- 0x00107226, 0x040007f4, 0x42000000, 0x0010cf1b,
- 0x0201f800, 0x0010bfb3, 0x5988014a, 0x80000000,
- 0x4803114a, 0x4a03900d, 0x00000040, 0x42000000,
- 0xc0000000, 0x0201f000, 0x0002010e, 0x4c5c0000,
- 0x4c600000, 0x4c640000, 0x4200c800, 0x0010e235,
- 0x4200b800, 0x00003000, 0x4200c000, 0x00000105,
- 0x0201f800, 0x001062aa, 0x4a0370e4, 0x02000000,
- 0x5c00c800, 0x5c00c000, 0x5c00b800, 0x1c01f000,
- 0x4933c857, 0x0201f000, 0x00020b9d, 0x4933c857,
- 0x0201f800, 0x00100cb0, 0x1c01f000, 0x41300800,
- 0x800409c0, 0x02020800, 0x0010032e, 0x0201f800,
- 0x00100323, 0x42000000, 0x0010cf1b, 0x0201f800,
- 0x0010bfb3, 0x4933c857, 0x813261c0, 0x02000800,
- 0x0010032e, 0x0401f842, 0x40002800, 0x0201f800,
- 0x0010bf1c, 0x4c140000, 0x59a8006d, 0x80000540,
- 0x04000005, 0x8c142d2a, 0x04000003, 0x0201f800,
- 0x00100cb0, 0x5c002800, 0x0401f8ae, 0x04000007,
- 0x5932680a, 0x59340200, 0x8c00050e, 0x59300415,
- 0x02020800, 0x00109b98, 0x1c01f000, 0x42000000,
- 0x0010cf1b, 0x0201f800, 0x0010bfb3, 0x4933c857,
- 0x813261c0, 0x02000800, 0x0010032e, 0x0401f89d,
- 0x0400000b, 0x0201f800, 0x0010989f, 0x04000008,
- 0x59325809, 0x592c0209, 0x8400054e, 0x48025a09,
- 0x417a7800, 0x0201f800, 0x00109425, 0x1c01f000,
- 0x485fc857, 0x5c000000, 0x4d780000, 0x4203e000,
- 0x50000000, 0x4200b800, 0x00008005, 0x0201f000,
- 0x00100333, 0x4933c857, 0x83300480, 0x00000020,
- 0x02021800, 0x0010032e, 0x83300c00, 0x0010cf8e,
- 0x50040000, 0x80000000, 0x04001002, 0x44000800,
- 0x1c01f000, 0x4933c857, 0x0401f7f4, 0x4807c856,
- 0x59b800ea, 0x8c000510, 0x040007fd, 0x59b800e0,
- 0x4803c857, 0x1c01f000, 0x4803c856, 0x42000000,
- 0x10000000, 0x41300800, 0x0401f029, 0x8c000510,
- 0x02000000, 0x00020114, 0x4c040000, 0x0401f80b,
- 0x5c000800, 0x82100480, 0x00000008, 0x02001000,
- 0x00020114, 0x4c040000, 0x0401fe9d, 0x5c000800,
- 0x0201f000, 0x00020114, 0x59b800e2, 0x59b820e2,
- 0x80100580, 0x040207fd, 0x80102114, 0x0401f001,
- 0x40101800, 0x800c190a, 0x82100500, 0x0000001f,
- 0x820c1d00, 0x0000001f, 0x800c2480, 0x82102500,
- 0x0000001f, 0x1c01f000, 0x40680000, 0x406c0800,
- 0x0401f807, 0x42018800, 0x00000001, 0x04020003,
- 0x42018800, 0x00000000, 0x1c01f000, 0x82000500,
- 0xf0000000, 0x82040d00, 0x0fffffff, 0x80040d40,
- 0x4807c857, 0x42001000, 0x0010ce5f, 0x50080000,
- 0x80000540, 0x04020005, 0x4a0370e5, 0x00000003,
- 0x4a0370e4, 0x00000300, 0x80000000, 0x44001000,
- 0x42001000, 0x00000400, 0x59b800ea, 0x8c000510,
- 0x0400000c, 0x0401ffd1, 0x82100480, 0x00000008,
- 0x04001007, 0x4c040000, 0x4c080000, 0x0401fe64,
- 0x5c001000, 0x5c000800, 0x0401f020, 0x59b800ea,
- 0x8c000516, 0x0402001d, 0x4a0370e4, 0x00300000,
- 0x480770e1, 0x42001000, 0x0000ff00, 0x80081040,
- 0x04000012, 0x59b808e4, 0x8c040d28, 0x040207fc,
- 0x42001000, 0x0010ce5f, 0x50080000, 0x80000040,
- 0x04020005, 0x4a0370e5, 0x00000002, 0x4a0370e4,
- 0x00000200, 0x02001800, 0x0010032e, 0x44001000,
- 0x8c040d2c, 0x1c01f000, 0x41f80000, 0x50000000,
- 0x0201f800, 0x0010032e, 0x80081040, 0x040207d3,
- 0x41f80000, 0x50000000, 0x0201f800, 0x0010032e,
- 0x4d380000, 0x59300c07, 0x82040580, 0x00000009,
- 0x04020006, 0x42027000, 0x00000047, 0x0201f800,
- 0x00020bc1, 0x80000580, 0x5c027000, 0x1c01f000,
- 0x4c500000, 0x4a03900d, 0x00000001, 0x59c8a020,
- 0x4a03900d, 0x00000002, 0x59c80820, 0x8c50a52e,
- 0x04000002, 0x900409c0, 0x82040d00, 0x0000ffff,
- 0x0201f800, 0x00106269, 0x5c00a000, 0x1c01f000,
- 0x42000000, 0x0010cf12, 0x0201f800, 0x0010bfb3,
- 0x0401ffec, 0x04000057, 0x4933c857, 0x59300407,
- 0x82000580, 0x00000000, 0x04000052, 0x59c82021,
- 0x4a03900d, 0x00000001, 0x59c82821, 0x82142d00,
- 0x0000ffff, 0x59325809, 0x812e59c0, 0x04000049,
- 0x5932680a, 0x0201f800, 0x0010493c, 0x02020800,
- 0x00109b80, 0x599c0019, 0x8c00050c, 0x0402001e,
- 0x0201f800, 0x0010493c, 0x0402001b, 0x59300812,
- 0x4807c857, 0x592c0409, 0x8c00051c, 0x04020014,
- 0x8400055c, 0x48025c09, 0x592c0a05, 0x82040d00,
- 0x000000ff, 0x82040580, 0x00000048, 0x04000007,
- 0x82040580, 0x00000018, 0x04000004, 0x82040580,
- 0x00000068, 0x04020006, 0x59300012, 0x0201f800,
- 0x0010a2e2, 0x80000d40, 0x48065803, 0x4a026012,
- 0x7fffffff, 0x59300008, 0x8c000516, 0x04020021,
- 0x48166014, 0x0201f800, 0x0010493c, 0x04000004,
- 0x59300415, 0x8c00051c, 0x04000004, 0x599c0019,
- 0x8c00050c, 0x04000017, 0x0201f800, 0x00100f2b,
- 0x04020014, 0x0401fa8f, 0x40280000, 0x4802600e,
- 0x04000005, 0x4832600c, 0x50200000, 0x4802600b,
- 0x4822600d, 0x59300415, 0x8c00051c, 0x04020004,
- 0x599c0019, 0x8c00050c, 0x04020885, 0x4a03900d,
+ 0x00100324, 0x0201f800, 0x0010032f, 0x00000000,
+ 0x00000048, 0x00000054, 0x00000053, 0x001007ba,
+ 0x001007df, 0x001007da, 0x001007fe, 0x001007c6,
+ 0x001007d2, 0x001007ba, 0x001007f9, 0x0010085d,
+ 0x001007ba, 0x00100860, 0x001007ba, 0x001007ba,
+ 0x00100864, 0x0010086a, 0x00100888, 0x0010089d,
+ 0x001007ff, 0x001008a6, 0x001008b2, 0x001007ba,
+ 0x001007ba, 0x001007ba, 0x0201f800, 0x0010032f,
+ 0x001007c4, 0x00100949, 0x00100823, 0x0010084c,
+ 0x001007c4, 0x001007c4, 0x001007c4, 0x001007c4,
+ 0x0201f800, 0x0010032f, 0x4803c856, 0x59300004,
+ 0x8c00053e, 0x04020005, 0x42027000, 0x00000055,
+ 0x0201f000, 0x00020b22, 0x0201f800, 0x00107595,
+ 0x040007fa, 0x1c01f000, 0x4803c856, 0x0401f8e1,
+ 0x40002800, 0x41782000, 0x42027000, 0x00000056,
+ 0x0201f000, 0x00020b22, 0x4803c856, 0x42027000,
+ 0x00000057, 0x0201f000, 0x00020b22, 0x4803c856,
+ 0x59325809, 0x812e59c0, 0x04000016, 0x59300008,
+ 0x8c00051a, 0x0402000d, 0x592c0409, 0x8c00051c,
+ 0x04020003, 0x4a026012, 0xffffffff, 0x59300004,
+ 0x8c00053e, 0x04020008, 0x42027000, 0x00000048,
+ 0x0201f000, 0x00020b22, 0x4a025a07, 0x00000007,
+ 0x0401f7f5, 0x0201f800, 0x00107595, 0x040007f7,
+ 0x1c01f000, 0x4803c856, 0x83300500, 0x00ffffff,
+ 0x0201f000, 0x00106e06, 0x1c01f000, 0x4803c856,
+ 0x813261c0, 0x02000800, 0x0010032f, 0x0201f800,
+ 0x00109c4d, 0x0400000d, 0x59325809, 0x592c0209,
+ 0x84000552, 0x48025a09, 0x0201f800, 0x001010f7,
+ 0x59300004, 0x8c00053e, 0x04020005, 0x417a7800,
+ 0x0201f800, 0x001097a0, 0x1c01f000, 0x0201f800,
+ 0x00107595, 0x040007fa, 0x1c01f000, 0x4c040000,
+ 0x59b808ea, 0x82040d00, 0x00000007, 0x82040580,
+ 0x00000003, 0x04000004, 0x42000000, 0x60000000,
+ 0x0401f8c8, 0x5c000800, 0x1c01f000, 0x0401f916,
+ 0x0400001b, 0x59325809, 0x812e59c0, 0x04000018,
+ 0x592c0205, 0x82000500, 0x000000ff, 0x82000d80,
+ 0x00000029, 0x04020012, 0x59300203, 0x82000580,
+ 0x00000003, 0x0400000b, 0x59300808, 0x84040d26,
+ 0x48066008, 0x0201f800, 0x0002011f, 0x4a03900d,
0x00000040, 0x4a0370e5, 0x00000008, 0x1c01f000,
- 0x42000000, 0x0010cf1b, 0x0201f800, 0x0010bfb3,
- 0x5988014c, 0x80000000, 0x4803114c, 0x4a03900d,
- 0x00000040, 0x42000000, 0xc0000000, 0x0201f000,
- 0x0002010e, 0x4cf80000, 0x58f40000, 0x8001f540,
- 0x0401f820, 0x41781800, 0x0401f935, 0x04020014,
- 0x44140800, 0x0401f82a, 0x04000011, 0x40043800,
- 0x42001800, 0x00000001, 0x40142000, 0x0401f92c,
- 0x0402000b, 0x801c3800, 0x501c0000, 0x44000800,
- 0x0401f810, 0x801c0580, 0x04000004, 0x44103800,
- 0x801c3840, 0x44143800, 0x0401f819, 0x5c01f000,
- 0x1c01f000, 0x80f9f1c0, 0x04020003, 0x58f41202,
- 0x0401f003, 0x42001000, 0x00000007, 0x1c01f000,
- 0x80f9f1c0, 0x04020006, 0x58f40401, 0x82000480,
- 0x00000002, 0x80f40400, 0x0401f005, 0x58f80401,
- 0x82000480, 0x00000002, 0x80f80400, 0x50002800,
- 0x80000000, 0x50002000, 0x1c01f000, 0x80f9f1c0,
- 0x04020008, 0x58f40401, 0x82000480, 0x00000002,
- 0x02001800, 0x0010032e, 0x4801ec01, 0x0401f00b,
- 0x58f80401, 0x82000480, 0x00000002, 0x02001800,
- 0x0010032e, 0x4801f401, 0x82000580, 0x00000002,
- 0x04020002, 0x0401f81b, 0x58f40202, 0x80000040,
- 0x4801ea02, 0x02000800, 0x0010032e, 0x82000580,
- 0x00000001, 0x1c01f000, 0x82f40580, 0xffffffff,
- 0x0400000f, 0x58f40201, 0x82000580, 0x0000dcb3,
- 0x02020800, 0x0010032e, 0x58f40000, 0x8001f540,
- 0x04000006, 0x58f80201, 0x82000580, 0x0000ddb9,
- 0x02020800, 0x0010032e, 0x0401f80a, 0x1c01f000,
- 0x4d2c0000, 0x40fa5800, 0x0201f800, 0x00100594,
- 0x4979e800, 0x4179f000, 0x5c025800, 0x1c01f000,
- 0x80f5e9c0, 0x04000009, 0x80f9f1c0, 0x04020ff5,
- 0x4d2c0000, 0x40f65800, 0x0201f800, 0x00100594,
- 0x4179e800, 0x5c025800, 0x1c01f000, 0x4cf40000,
- 0x0201f800, 0x0010493c, 0x04020036, 0x59300808,
- 0x82040500, 0x00013100, 0x04020032, 0x8c040d22,
- 0x04000032, 0x59300028, 0x8001ed40, 0x02000800,
- 0x0010032e, 0x82000580, 0xffffffff, 0x04000029,
+ 0x0201f800, 0x00107595, 0x040007f4, 0x42000000,
+ 0x0010d536, 0x0201f800, 0x0010c50a, 0x59880151,
+ 0x80000000, 0x48031151, 0x4a03900d, 0x00000040,
+ 0x42000000, 0xc0000000, 0x0201f000, 0x00020113,
+ 0x4c5c0000, 0x4c600000, 0x4c640000, 0x4200c800,
+ 0x0010e853, 0x4200b800, 0x00003000, 0x4200c000,
+ 0x00000105, 0x0201f800, 0x001065fd, 0x4a0370e4,
+ 0x02000000, 0x5c00c800, 0x5c00c000, 0x5c00b800,
+ 0x1c01f000, 0x4933c857, 0x0201f000, 0x00020afe,
+ 0x4933c857, 0x0201f800, 0x00100cd5, 0x1c01f000,
+ 0x41300800, 0x800409c0, 0x02020800, 0x0010032f,
+ 0x0201f800, 0x00100324, 0x42000000, 0x0010d536,
+ 0x0201f800, 0x0010c50a, 0x4933c857, 0x813261c0,
+ 0x02000800, 0x0010032f, 0x0401f842, 0x40002800,
+ 0x0201f800, 0x0010c473, 0x4c140000, 0x59a8007b,
+ 0x80000540, 0x04000005, 0x8c142d2a, 0x04000003,
+ 0x0201f800, 0x00100cd5, 0x5c002800, 0x0401f8ae,
+ 0x04000007, 0x5932680a, 0x59340200, 0x8c00050e,
+ 0x59300415, 0x02020800, 0x00109f4a, 0x1c01f000,
+ 0x42000000, 0x0010d536, 0x0201f800, 0x0010c50a,
+ 0x4933c857, 0x813261c0, 0x02000800, 0x0010032f,
+ 0x0401f89d, 0x0400000b, 0x0201f800, 0x00109c4d,
+ 0x04000008, 0x59325809, 0x592c0209, 0x8400054e,
+ 0x48025a09, 0x417a7800, 0x0201f800, 0x001097a0,
+ 0x1c01f000, 0x485fc857, 0x5c000000, 0x4d780000,
+ 0x4203e000, 0x50000000, 0x4200b800, 0x00008005,
+ 0x0201f000, 0x00100334, 0x4933c857, 0x83300480,
+ 0x00000020, 0x02021800, 0x0010032f, 0x83300c00,
+ 0x0010d5ab, 0x50040000, 0x80000000, 0x04001002,
+ 0x44000800, 0x1c01f000, 0x4933c857, 0x0401f7f4,
+ 0x4807c856, 0x59b800ea, 0x8c000510, 0x040007fd,
+ 0x59b800e0, 0x4803c857, 0x1c01f000, 0x4803c856,
+ 0x42000000, 0x10000000, 0x41300800, 0x0401f029,
+ 0x8c000510, 0x02000000, 0x00020119, 0x4c040000,
+ 0x0401f80b, 0x5c000800, 0x82100480, 0x00000008,
+ 0x02001000, 0x00020119, 0x4c040000, 0x0401fe9c,
+ 0x5c000800, 0x0201f000, 0x00020119, 0x59b800e2,
+ 0x59b820e2, 0x80100580, 0x040207fd, 0x80102114,
+ 0x0401f001, 0x40101800, 0x800c190a, 0x82100500,
+ 0x0000001f, 0x820c1d00, 0x0000001f, 0x800c2480,
+ 0x82102500, 0x0000001f, 0x1c01f000, 0x40680000,
+ 0x406c0800, 0x0401f807, 0x42018800, 0x00000001,
+ 0x04020003, 0x42018800, 0x00000000, 0x1c01f000,
+ 0x82000500, 0xf0000000, 0x82040d00, 0x0fffffff,
+ 0x80040d40, 0x4807c857, 0x42001000, 0x0010d475,
+ 0x50080000, 0x80000540, 0x04020005, 0x4a0370e5,
+ 0x00000003, 0x4a0370e4, 0x00000300, 0x80000000,
+ 0x44001000, 0x42001000, 0x00000400, 0x59b800ea,
+ 0x8c000510, 0x0400000c, 0x0401ffd1, 0x82100480,
+ 0x00000008, 0x04001007, 0x4c040000, 0x4c080000,
+ 0x0401fe63, 0x5c001000, 0x5c000800, 0x0401f020,
+ 0x59b800ea, 0x8c000516, 0x0402001d, 0x4a0370e4,
+ 0x00300000, 0x480770e1, 0x42001000, 0x0000ff00,
+ 0x80081040, 0x04000012, 0x59b808e4, 0x8c040d28,
+ 0x040207fc, 0x42001000, 0x0010d475, 0x50080000,
+ 0x80000040, 0x04020005, 0x4a0370e5, 0x00000002,
+ 0x4a0370e4, 0x00000200, 0x02001800, 0x0010032f,
+ 0x44001000, 0x8c040d2c, 0x1c01f000, 0x41f80000,
+ 0x50000000, 0x0201f800, 0x0010032f, 0x80081040,
+ 0x040207d3, 0x41f80000, 0x50000000, 0x0201f800,
+ 0x0010032f, 0x4d380000, 0x59300c07, 0x82040580,
+ 0x00000009, 0x04020006, 0x42027000, 0x00000047,
+ 0x0201f800, 0x00020b22, 0x80000580, 0x5c027000,
+ 0x1c01f000, 0x4c500000, 0x4a03900d, 0x00000001,
+ 0x59c8a020, 0x4a03900d, 0x00000002, 0x59c80820,
+ 0x8c50a52e, 0x04000002, 0x900409c0, 0x82040d00,
+ 0x0000ffff, 0x0201f800, 0x001065bc, 0x5c00a000,
+ 0x1c01f000, 0x42000000, 0x0010d528, 0x0201f800,
+ 0x0010c50a, 0x0401ffec, 0x0400005b, 0x4933c857,
+ 0x59300407, 0x82000580, 0x00000000, 0x04000056,
+ 0x59c82021, 0x4a03900d, 0x00000001, 0x59c82821,
+ 0x82142d00, 0x0000ffff, 0x59325809, 0x812e59c0,
+ 0x0400004d, 0x5932680a, 0x0201f800, 0x00104a92,
+ 0x02020800, 0x00109f32, 0x599c0019, 0x8c00050c,
+ 0x04020022, 0x0201f800, 0x00104a92, 0x0402001f,
+ 0x59300812, 0x4807c857, 0x592c0409, 0x8c00051c,
+ 0x04020018, 0x8400055c, 0x48025c09, 0x42000000,
+ 0x0010d4a4, 0x0201f800, 0x0010c50a, 0x592c0a05,
+ 0x82040d00, 0x000000ff, 0x82040580, 0x00000048,
+ 0x04000007, 0x82040580, 0x00000018, 0x04000004,
+ 0x82040580, 0x00000068, 0x04020006, 0x59300012,
+ 0x0201f800, 0x0010a6e6, 0x80000d40, 0x48065803,
+ 0x4a026012, 0x7fffffff, 0x59300008, 0x8c000516,
+ 0x04020021, 0x48166014, 0x0201f800, 0x00104a92,
+ 0x04000004, 0x59300415, 0x8c00051c, 0x04000004,
+ 0x599c0019, 0x8c00050c, 0x04000017, 0x0201f800,
+ 0x00100f5c, 0x04020014, 0x0401fa8f, 0x40280000,
+ 0x4802600e, 0x04000005, 0x4832600c, 0x50200000,
+ 0x4802600b, 0x4822600d, 0x59300415, 0x8c00051c,
+ 0x04020004, 0x599c0019, 0x8c00050c, 0x04020885,
+ 0x4a03900d, 0x00000040, 0x4a0370e5, 0x00000008,
+ 0x1c01f000, 0x42000000, 0x0010d536, 0x0201f800,
+ 0x0010c50a, 0x59880153, 0x80000000, 0x48031153,
+ 0x4a03900d, 0x00000040, 0x42000000, 0xc0000000,
+ 0x0201f000, 0x00020113, 0x4cf80000, 0x58f40000,
+ 0x8001f540, 0x0401f820, 0x41781800, 0x0401f935,
+ 0x04020014, 0x44140800, 0x0401f82a, 0x04000011,
+ 0x40043800, 0x42001800, 0x00000001, 0x40142000,
+ 0x0401f92c, 0x0402000b, 0x801c3800, 0x501c0000,
+ 0x44000800, 0x0401f810, 0x801c0580, 0x04000004,
+ 0x44103800, 0x801c3840, 0x44143800, 0x0401f819,
+ 0x5c01f000, 0x1c01f000, 0x80f9f1c0, 0x04020003,
+ 0x58f41202, 0x0401f003, 0x42001000, 0x00000007,
+ 0x1c01f000, 0x80f9f1c0, 0x04020006, 0x58f40401,
+ 0x82000480, 0x00000002, 0x80f40400, 0x0401f005,
+ 0x58f80401, 0x82000480, 0x00000002, 0x80f80400,
+ 0x50002800, 0x80000000, 0x50002000, 0x1c01f000,
+ 0x80f9f1c0, 0x04020008, 0x58f40401, 0x82000480,
+ 0x00000002, 0x02001800, 0x0010032f, 0x4801ec01,
+ 0x0401f00b, 0x58f80401, 0x82000480, 0x00000002,
+ 0x02001800, 0x0010032f, 0x4801f401, 0x82000580,
+ 0x00000002, 0x04020002, 0x0401f81b, 0x58f40202,
+ 0x80000040, 0x4801ea02, 0x02000800, 0x0010032f,
+ 0x82000580, 0x00000001, 0x1c01f000, 0x82f40580,
+ 0xffffffff, 0x0400000f, 0x58f40201, 0x82000580,
+ 0x0000dcb3, 0x02020800, 0x0010032f, 0x58f40000,
+ 0x8001f540, 0x04000006, 0x58f80201, 0x82000580,
+ 0x0000ddb9, 0x02020800, 0x0010032f, 0x0401f80a,
+ 0x1c01f000, 0x4d2c0000, 0x40fa5800, 0x0201f800,
+ 0x001005aa, 0x4979e800, 0x4179f000, 0x5c025800,
+ 0x1c01f000, 0x80f5e9c0, 0x04000009, 0x80f9f1c0,
+ 0x04020ff5, 0x4d2c0000, 0x40f65800, 0x0201f800,
+ 0x001005aa, 0x4179e800, 0x5c025800, 0x1c01f000,
+ 0x4cf40000, 0x0201f800, 0x00104a92, 0x04020036,
+ 0x59300808, 0x82040500, 0x00013100, 0x04020032,
+ 0x8c040d22, 0x04000032, 0x59300028, 0x8001ed40,
+ 0x02000800, 0x0010032f, 0x82000580, 0xffffffff,
+ 0x04000029, 0x58f40201, 0x82000580, 0x0000dcb3,
+ 0x02020800, 0x0010032f, 0x58f40a02, 0x82040500,
+ 0x0000fffe, 0x04000003, 0x0401ff74, 0x58f40a02,
+ 0x82040480, 0x0000000f, 0x04021095, 0x80040800,
+ 0x4805ea02, 0x82040580, 0x00000008, 0x04000099,
+ 0x82040480, 0x00000008, 0x0400100a, 0x58f40000,
+ 0x8001ed40, 0x02000800, 0x0010032f, 0x58f40201,
+ 0x82000580, 0x0000ddb9, 0x02020800, 0x0010032f,
+ 0x58f40401, 0x82000c00, 0x00000002, 0x4805ec01,
+ 0x80f40400, 0x59300813, 0x44040000, 0x80000000,
+ 0x45780000, 0x5c01e800, 0x1c01f000, 0x42001000,
+ 0x00000400, 0x59b800e4, 0x8c000524, 0x0402005f,
+ 0x4a0370e4, 0x00030000, 0x40000000, 0x59b800e4,
+ 0x8c000524, 0x04020057, 0x59300808, 0x84040d62,
+ 0x48066008, 0x4a0370e4, 0x00020000, 0x4d2c0000,
+ 0x0201f800, 0x00100584, 0x04000061, 0x492e6028,
+ 0x4a025a01, 0x0000dcb3, 0x59300009, 0x80001d40,
+ 0x02000800, 0x0010032f, 0x580c0810, 0x48065803,
+ 0x580c0205, 0x82000500, 0x000000ff, 0x82000580,
+ 0x00000068, 0x04020037, 0x580c1801, 0x800c19c0,
+ 0x02000800, 0x0010032f, 0x580c0c06, 0x82040d00,
+ 0x00000003, 0x82040580, 0x00000002, 0x04020003,
+ 0x592c0803, 0x0401f02b, 0x580c2a07, 0x580c0008,
+ 0x59301812, 0x800c0580, 0x0400002a, 0x82040580,
+ 0x00000000, 0x04000012, 0x40140000, 0x4c080000,
+ 0x400c1000, 0x41780800, 0x0201f800, 0x00107000,
+ 0x800409c0, 0x02020800, 0x0010032f, 0x82140c00,
+ 0x00000008, 0x0201f800, 0x00106fe1, 0x5c001000,
+ 0x40041800, 0x592c0803, 0x0401f022, 0x82140400,
+ 0x00000008, 0x4c080000, 0x400c1000, 0x41780800,
+ 0x0201f800, 0x00107000, 0x800409c0, 0x02020800,
+ 0x0010032f, 0x40140800, 0x0201f800, 0x00106fe1,
+ 0x5c001000, 0x40041800, 0x592c0803, 0x0401f011,
+ 0x59301812, 0x40040000, 0x800c0580, 0x0402000d,
+ 0x497a5a02, 0x4a025c01, 0x00000004, 0x0401f011,
+ 0x4a0370e4, 0x00020000, 0x40000000, 0x40000000,
+ 0x80081040, 0x02000800, 0x0010032f, 0x0401f79a,
+ 0x4a025a02, 0x00000001, 0x4a025c01, 0x00000006,
+ 0x497a5804, 0x400c0000, 0x80040480, 0x48025805,
+ 0x412de800, 0x5c025800, 0x0401f76d, 0x5c025800,
+ 0x4a026028, 0xffffffff, 0x0401f787, 0x4d2c0000,
+ 0x58f65800, 0x0201f800, 0x001005aa, 0x40f65800,
+ 0x0201f800, 0x001005aa, 0x5c025800, 0x0401f7f5,
+ 0x4d2c0000, 0x0201f800, 0x00100584, 0x040007f8,
+ 0x4a025a01, 0x0000ddb9, 0x4a025c01, 0x00000002,
+ 0x492de800, 0x412de800, 0x5c025800, 0x0401f769,
+ 0x0401fee2, 0x82f40400, 0x00000004, 0x800c0400,
+ 0x40000800, 0x50040000, 0x80100580, 0x04000016,
+ 0x82040c00, 0x00000002, 0x80081040, 0x040207fa,
+ 0x80f9f1c0, 0x04000011, 0x58f41202, 0x82081480,
+ 0x00000007, 0x82f80400, 0x00000002, 0x800c0400,
+ 0x40000800, 0x50040000, 0x80100580, 0x04000006,
+ 0x82040c00, 0x00000002, 0x80081040, 0x040207fa,
+ 0x0401f002, 0x1c01f000, 0x82000540, 0x00000001,
+ 0x0401f7fd, 0x4cf40000, 0x4cf80000, 0x4001e800,
+ 0x812e59c0, 0x04000024, 0x592c0a07, 0x800409c0,
+ 0x04020021, 0x82f40580, 0xffffffff, 0x0400001b,
0x58f40201, 0x82000580, 0x0000dcb3, 0x02020800,
- 0x0010032e, 0x58f40a02, 0x82040500, 0x0000fffe,
- 0x04000003, 0x0401ff74, 0x58f40a02, 0x82040480,
- 0x0000000f, 0x04021095, 0x80040800, 0x4805ea02,
- 0x82040580, 0x00000008, 0x04000099, 0x82040480,
- 0x00000008, 0x0400100a, 0x58f40000, 0x8001ed40,
- 0x02000800, 0x0010032e, 0x58f40201, 0x82000580,
- 0x0000ddb9, 0x02020800, 0x0010032e, 0x58f40401,
- 0x82000c00, 0x00000002, 0x4805ec01, 0x80f40400,
- 0x59300813, 0x44040000, 0x80000000, 0x45780000,
- 0x5c01e800, 0x1c01f000, 0x42001000, 0x00000400,
- 0x59b800e4, 0x8c000524, 0x0402005f, 0x4a0370e4,
- 0x00030000, 0x40000000, 0x59b800e4, 0x8c000524,
- 0x04020057, 0x59300808, 0x84040d62, 0x48066008,
- 0x4a0370e4, 0x00020000, 0x4d2c0000, 0x0201f800,
- 0x0010056e, 0x04000061, 0x492e6028, 0x4a025a01,
- 0x0000dcb3, 0x59300009, 0x80001d40, 0x02000800,
- 0x0010032e, 0x580c0810, 0x48065803, 0x580c0205,
- 0x82000500, 0x000000ff, 0x82000580, 0x00000068,
- 0x04020037, 0x580c1801, 0x800c19c0, 0x02000800,
- 0x0010032e, 0x580c0c06, 0x82040d00, 0x00000003,
- 0x82040580, 0x00000002, 0x04020003, 0x592c0803,
- 0x0401f02b, 0x580c2a07, 0x580c0008, 0x59301812,
- 0x800c0580, 0x0400002a, 0x82040580, 0x00000000,
- 0x04000012, 0x40140000, 0x4c080000, 0x400c1000,
- 0x41780800, 0x0201f800, 0x00106c9d, 0x800409c0,
- 0x02020800, 0x0010032e, 0x82140c00, 0x00000008,
- 0x0201f800, 0x00106c7e, 0x5c001000, 0x40041800,
- 0x592c0803, 0x0401f022, 0x82140400, 0x00000008,
- 0x4c080000, 0x400c1000, 0x41780800, 0x0201f800,
- 0x00106c9d, 0x800409c0, 0x02020800, 0x0010032e,
- 0x40140800, 0x0201f800, 0x00106c7e, 0x5c001000,
- 0x40041800, 0x592c0803, 0x0401f011, 0x59301812,
- 0x40040000, 0x800c0580, 0x0402000d, 0x497a5a02,
- 0x4a025c01, 0x00000004, 0x0401f011, 0x4a0370e4,
- 0x00020000, 0x40000000, 0x40000000, 0x80081040,
- 0x02000800, 0x0010032e, 0x0401f79a, 0x4a025a02,
- 0x00000001, 0x4a025c01, 0x00000006, 0x497a5804,
- 0x400c0000, 0x80040480, 0x48025805, 0x412de800,
- 0x5c025800, 0x0401f76d, 0x5c025800, 0x4a026028,
- 0xffffffff, 0x0401f787, 0x4d2c0000, 0x58f65800,
- 0x0201f800, 0x00100594, 0x40f65800, 0x0201f800,
- 0x00100594, 0x5c025800, 0x0401f7f5, 0x4d2c0000,
- 0x0201f800, 0x0010056e, 0x040007f8, 0x4a025a01,
- 0x0000ddb9, 0x4a025c01, 0x00000002, 0x492de800,
- 0x412de800, 0x5c025800, 0x0401f769, 0x0401fee2,
- 0x82f40400, 0x00000004, 0x800c0400, 0x40000800,
- 0x50040000, 0x80100580, 0x04000016, 0x82040c00,
- 0x00000002, 0x80081040, 0x040207fa, 0x80f9f1c0,
- 0x04000011, 0x58f41202, 0x82081480, 0x00000007,
- 0x82f80400, 0x00000002, 0x800c0400, 0x40000800,
- 0x50040000, 0x80100580, 0x04000006, 0x82040c00,
- 0x00000002, 0x80081040, 0x040207fa, 0x0401f002,
- 0x1c01f000, 0x82000540, 0x00000001, 0x0401f7fd,
- 0x4cf40000, 0x4cf80000, 0x4001e800, 0x812e59c0,
- 0x04000024, 0x592c0a07, 0x800409c0, 0x04020021,
- 0x82f40580, 0xffffffff, 0x0400001b, 0x58f40201,
- 0x82000580, 0x0000dcb3, 0x02020800, 0x0010032e,
- 0x58f40000, 0x8001f540, 0x04000006, 0x58f80201,
- 0x82000580, 0x0000ddb9, 0x02020800, 0x0010032e,
- 0x41783800, 0x58f44003, 0x0401f839, 0x04020009,
- 0x0401fef0, 0x497a6028, 0x59300808, 0x84040d22,
- 0x48066008, 0x5c01f000, 0x5c01e800, 0x1c01f000,
- 0x0401fee8, 0x4a025a07, 0x00000011, 0x0401f7f6,
- 0x0401feca, 0x0401f7f4, 0x4cf40000, 0x4cf80000,
- 0x4001e800, 0x82040580, 0x00000001, 0x04020020,
- 0x82f40580, 0xffffffff, 0x0400001a, 0x58f40201,
- 0x82000580, 0x0000dcb3, 0x02020800, 0x0010032e,
- 0x58f40000, 0x8001f540, 0x04000006, 0x58f80201,
- 0x82000580, 0x0000ddb9, 0x02020800, 0x0010032e,
- 0x41783800, 0x58f44003, 0x0401f811, 0x04020008,
- 0x0401fec8, 0x42000800, 0x00000001, 0x497a6028,
- 0x5c01f000, 0x5c01e800, 0x1c01f000, 0x0401fec1,
- 0x42000800, 0x00000011, 0x0401f7f9, 0x4c040000,
- 0x0401fea2, 0x5c000800, 0x0401f7f5, 0x4803c856,
- 0x401c2000, 0x41781800, 0x4c200000, 0x0401ff88,
- 0x5c004000, 0x0402002a, 0x40202000, 0x42001800,
- 0x00000001, 0x0401ff82, 0x04020025, 0x0401fe62,
- 0x40082800, 0x82f43400, 0x00000004, 0x50182000,
+ 0x0010032f, 0x58f40000, 0x8001f540, 0x04000006,
+ 0x58f80201, 0x82000580, 0x0000ddb9, 0x02020800,
+ 0x0010032f, 0x41783800, 0x58f44003, 0x0401f839,
+ 0x04020009, 0x0401fef0, 0x497a6028, 0x59300808,
+ 0x84040d22, 0x48066008, 0x5c01f000, 0x5c01e800,
+ 0x1c01f000, 0x0401fee8, 0x4a025a07, 0x00000011,
+ 0x0401f7f6, 0x0401feca, 0x0401f7f4, 0x4cf40000,
+ 0x4cf80000, 0x4001e800, 0x82040580, 0x00000001,
+ 0x04020020, 0x82f40580, 0xffffffff, 0x0400001a,
+ 0x58f40201, 0x82000580, 0x0000dcb3, 0x02020800,
+ 0x0010032f, 0x58f40000, 0x8001f540, 0x04000006,
+ 0x58f80201, 0x82000580, 0x0000ddb9, 0x02020800,
+ 0x0010032f, 0x41783800, 0x58f44003, 0x0401f811,
+ 0x04020008, 0x0401fec8, 0x42000800, 0x00000001,
+ 0x497a6028, 0x5c01f000, 0x5c01e800, 0x1c01f000,
+ 0x0401fec1, 0x42000800, 0x00000011, 0x0401f7f9,
+ 0x4c040000, 0x0401fea2, 0x5c000800, 0x0401f7f5,
+ 0x4803c856, 0x401c2000, 0x41781800, 0x4c200000,
+ 0x0401ff88, 0x5c004000, 0x0402002a, 0x40202000,
+ 0x42001800, 0x00000001, 0x0401ff82, 0x04020025,
+ 0x0401fe62, 0x40082800, 0x82f43400, 0x00000004,
+ 0x50182000, 0x40100000, 0x801c0580, 0x04000005,
+ 0x42001800, 0x00000001, 0x0401ff76, 0x04020019,
+ 0x82183400, 0x00000002, 0x80142840, 0x040207f5,
+ 0x80f9f1c0, 0x04000012, 0x58f42a02, 0x82142c80,
+ 0x00000007, 0x82f83400, 0x00000002, 0x50182000,
0x40100000, 0x801c0580, 0x04000005, 0x42001800,
- 0x00000001, 0x0401ff76, 0x04020019, 0x82183400,
- 0x00000002, 0x80142840, 0x040207f5, 0x80f9f1c0,
- 0x04000012, 0x58f42a02, 0x82142c80, 0x00000007,
- 0x82f83400, 0x00000002, 0x50182000, 0x40100000,
- 0x801c0580, 0x04000005, 0x42001800, 0x00000001,
- 0x0401ff63, 0x04020006, 0x82183400, 0x00000002,
- 0x80142840, 0x040207f5, 0x1c01f000, 0x82000540,
- 0x00000001, 0x0401f7fd, 0x0201f800, 0x0010032e,
- 0x58380a05, 0x82040d00, 0x000000ff, 0x82040580,
- 0x0000001b, 0x04000004, 0x82040580, 0x0000002b,
- 0x040207f6, 0x50200000, 0x80387c00, 0x583c2800,
- 0x583c2001, 0x583c1002, 0x592c0a08, 0x58383010,
- 0x59303808, 0x497a6013, 0x497a6014, 0x0201f000,
- 0x0002015d, 0x592c020b, 0x8c000502, 0x040007e7,
- 0x497a6013, 0x0201f800, 0x00101105, 0x412c7000,
- 0x59300008, 0x84000556, 0x48026008, 0x82040500,
- 0x0000000f, 0x82000c00, 0x00100f0b, 0x50044000,
- 0x80204000, 0x50200000, 0x80187c00, 0x583c2800,
- 0x583c2001, 0x583c1002, 0x58380a08, 0x58384c09,
- 0x40187000, 0x58183008, 0x59303808, 0x497a6014,
- 0x0201f000, 0x0002015d, 0x592c040b, 0x8c000500,
- 0x02000800, 0x0010032e, 0x592c000e, 0x48026013,
- 0x0401f7e1, 0x58380208, 0x8c000502, 0x040007c3,
- 0x50200000, 0x80387c00, 0x583c2800, 0x583c2001,
- 0x58380405, 0x80001540, 0x04020002, 0x58381408,
- 0x58c83401, 0x58380c09, 0x59303808, 0x497a6013,
- 0x497a6014, 0x0201f000, 0x0002015d, 0x592c0409,
- 0x8c000502, 0x040007b1, 0x592c040a, 0x80000540,
- 0x040007ae, 0x82000c80, 0x00000002, 0x04001011,
- 0x58380001, 0x80007540, 0x02000800, 0x0010032e,
- 0x58380205, 0x82000500, 0x0000000f, 0x82000400,
- 0x00100f0b, 0x50004000, 0x40040000, 0x800409c0,
- 0x04000005, 0x82040c80, 0x00000005, 0x040217f1,
- 0x80204400, 0x50200000, 0x80387c00, 0x583c2800,
- 0x583c2001, 0x583c1002, 0x592c0a08, 0x592c4c09,
- 0x592c300e, 0x59303808, 0x497a6013, 0x497a6014,
- 0x4816600f, 0x48126010, 0x480a6011, 0x481a6012,
- 0x80040840, 0x4806600e, 0x02000000, 0x00020165,
- 0x80204000, 0x50201800, 0x800c19c0, 0x0402000c,
- 0x58380001, 0x80007540, 0x02000800, 0x0010032e,
- 0x58380205, 0x82000500, 0x0000000f, 0x82000400,
- 0x00100f0b, 0x50004000, 0x50201800, 0x483a600c,
- 0x480e600b, 0x4822600d, 0x0201f000, 0x00020165,
- 0x4803c856, 0x592c0209, 0x8c00051e, 0x04020017,
- 0x50200000, 0x80306c00, 0x40240000, 0x0c01f001,
- 0x00100c18, 0x00100c18, 0x00100c21, 0x00100c18,
- 0x00100c18, 0x00100c18, 0x00100c18, 0x00100c18,
- 0x00100c21, 0x00100c18, 0x00100c21, 0x00100c18,
- 0x00100c18, 0x00100c21, 0x00100c18, 0x00100c18,
- 0x0201f800, 0x0010032e, 0x8400051e, 0x48025a09,
- 0x50200000, 0x80306c00, 0x58343801, 0x481e6010,
- 0x0401f007, 0x58341802, 0x58342800, 0x58343801,
- 0x480e6011, 0x4816600f, 0x481e6010, 0x0401f2c2,
- 0x4933c857, 0x5931f809, 0x59301006, 0x800811c0,
- 0x0400000b, 0x41780800, 0x42000000, 0x0000000a,
- 0x0201f800, 0x00106c9d, 0x80080102, 0x04020002,
- 0x84001542, 0x80081040, 0x4809fc07, 0x4a026006,
- 0x00000002, 0x592c040a, 0x82000500, 0x00000008,
- 0x0400000b, 0x0401f839, 0x59300203, 0x82000580,
- 0x00000004, 0x04020005, 0x42027000, 0x00000048,
- 0x0201f800, 0x00020bc1, 0x1c01f000, 0x4cfc0000,
- 0x58fc0205, 0x82000500, 0x000000ff, 0x82000580,
- 0x00000048, 0x04020009, 0x58fc0409, 0x8c000500,
- 0x04000006, 0x58fc080c, 0x8c040d16, 0x0400001f,
- 0x58fc0008, 0x0401f00a, 0x58fc0409, 0x8c000512,
- 0x0402001c, 0x58fc0c0a, 0x8c040d16, 0x04020003,
- 0x5c01f800, 0x1c01f000, 0x58fc000b, 0x4c000000,
- 0x4d2c0000, 0x40fe5800, 0x59300012, 0x0201f800,
- 0x0010a2e2, 0x5c025800, 0x80000d40, 0x5c000000,
- 0x80040580, 0x04020009, 0x59300008, 0x84000500,
- 0x48026008, 0x42027000, 0x00000048, 0x5c01f800,
- 0x0201f000, 0x00020bc1, 0x5c01f800, 0x1c01f000,
- 0x58fdf80a, 0x0401f7e4, 0x5c000000, 0x4c000000,
- 0x4803c857, 0x4933c857, 0x59b808ea, 0x82040d00,
- 0x00000007, 0x82040580, 0x00000000, 0x04000025,
- 0x82040580, 0x00000003, 0x04000022, 0x59300407,
- 0x4c000000, 0x4a026407, 0x00000000, 0x42003000,
- 0x00000041, 0x4a0370e5, 0x00003000, 0x42000000,
- 0x50000000, 0x41300800, 0x4c180000, 0x0401fc38,
- 0x5c003000, 0x0400000e, 0x42000000, 0x0000001e,
- 0x80000040, 0x040207ff, 0x80183040, 0x040207f4,
- 0x42000000, 0x40000000, 0x41300800, 0x0401fc2c,
- 0x59880146, 0x80000000, 0x48031146, 0x4a0370e5,
- 0x00002000, 0x5c000000, 0x48026407, 0x1c01f000,
- 0x59300008, 0x84000500, 0x48026008, 0x0401f7fc,
- 0x59c00007, 0x4a038006, 0x30000000, 0x40000000,
- 0x59c00007, 0x8c00050a, 0x040207fe, 0x1c01f000,
- 0x5c000000, 0x4c000000, 0x4803c857, 0x42000800,
- 0x00000001, 0x0201f800, 0x00101bdf, 0x4dc00000,
- 0x4a0370e8, 0x00000000, 0x42038000, 0x00007720,
- 0x0401ffec, 0x42038000, 0x00007700, 0x0401ffe9,
- 0x0201f800, 0x001050f7, 0x04020017, 0x4a038891,
- 0x0000ffff, 0x497b8880, 0x4ce80000, 0x4201d000,
- 0x00000016, 0x0201f800, 0x00106661, 0x497b8892,
- 0x4201d000, 0x00000016, 0x0201f800, 0x00106661,
- 0x5c01d000, 0x42000000, 0x0010cf66, 0x0201f800,
- 0x0010bfb3, 0x0401f812, 0x5c038000, 0x0201f000,
- 0x00105223, 0x0401f830, 0x4c080000, 0x4c140000,
- 0x42000000, 0x0010cf67, 0x0201f800, 0x0010bfb3,
- 0x0401f807, 0x5c002800, 0x5c001000, 0x48178892,
- 0x480b8880, 0x5c038000, 0x1c01f000, 0x496fc857,
- 0x836c0580, 0x00000003, 0x0402000b, 0x4c080000,
- 0x4c0c0000, 0x42001000, 0x00008048, 0x42001800,
- 0x0000ffff, 0x0201f800, 0x001039ac, 0x5c001800,
- 0x5c001000, 0x42000800, 0x0000003c, 0x0201f800,
- 0x001012d2, 0x59a8006d, 0x80000540, 0x04000005,
- 0x59a8106e, 0x800811c0, 0x02020800, 0x00101b4a,
- 0x4a038891, 0x0000ffff, 0x4a03900d, 0x00000040,
- 0x0201f800, 0x00100698, 0x4a0370e8, 0x00000001,
+ 0x00000001, 0x0401ff63, 0x04020006, 0x82183400,
+ 0x00000002, 0x80142840, 0x040207f5, 0x1c01f000,
+ 0x82000540, 0x00000001, 0x0401f7fd, 0x0201f800,
+ 0x0010032f, 0x58380a05, 0x82040d00, 0x000000ff,
+ 0x82040580, 0x0000001b, 0x04000004, 0x82040580,
+ 0x0000002b, 0x040207f6, 0x50200000, 0x80387c00,
+ 0x583c2800, 0x583c2001, 0x583c1002, 0x592c0a08,
+ 0x58383010, 0x59303808, 0x497a6013, 0x497a6014,
+ 0x0201f000, 0x00020162, 0x592c020b, 0x8c000502,
+ 0x040007e7, 0x497a6013, 0x0201f800, 0x0010110e,
+ 0x412c7000, 0x59300008, 0x84000556, 0x48026008,
+ 0x82040500, 0x0000000f, 0x82000c00, 0x00100f3c,
+ 0x50044000, 0x80204000, 0x50200000, 0x80187c00,
+ 0x583c2800, 0x583c2001, 0x583c1002, 0x58380a08,
+ 0x58384c09, 0x40187000, 0x58183008, 0x59303808,
+ 0x497a6014, 0x0201f000, 0x00020162, 0x592c040b,
+ 0x8c000500, 0x02000800, 0x0010032f, 0x592c000e,
+ 0x48026013, 0x0401f7e1, 0x58380208, 0x8c000502,
+ 0x040007c3, 0x50200000, 0x80387c00, 0x583c2800,
+ 0x583c2001, 0x58380405, 0x80001540, 0x04020002,
+ 0x58381408, 0x58c83401, 0x58380c09, 0x59303808,
+ 0x497a6013, 0x497a6014, 0x0201f000, 0x00020162,
+ 0x592c0409, 0x8c000502, 0x040007b1, 0x592c040a,
+ 0x80000540, 0x040007ae, 0x82000c80, 0x00000002,
+ 0x04001011, 0x58380001, 0x80007540, 0x02000800,
+ 0x0010032f, 0x58380205, 0x82000500, 0x0000000f,
+ 0x82000400, 0x00100f3c, 0x50004000, 0x40040000,
+ 0x800409c0, 0x04000005, 0x82040c80, 0x00000005,
+ 0x040217f1, 0x80204400, 0x50200000, 0x80387c00,
+ 0x583c2800, 0x583c2001, 0x583c1002, 0x592c0a08,
+ 0x592c4c09, 0x592c300e, 0x59303808, 0x497a6013,
+ 0x497a6014, 0x4816600f, 0x48126010, 0x480a6011,
+ 0x481a6012, 0x80040840, 0x4806600e, 0x02000000,
+ 0x0002016a, 0x80204000, 0x50201800, 0x800c19c0,
+ 0x0402000c, 0x58380001, 0x80007540, 0x02000800,
+ 0x0010032f, 0x58380205, 0x82000500, 0x0000000f,
+ 0x82000400, 0x00100f3c, 0x50004000, 0x50201800,
+ 0x483a600c, 0x480e600b, 0x4822600d, 0x0201f000,
+ 0x0002016a, 0x4803c856, 0x592c0209, 0x8c00051e,
+ 0x04020017, 0x50200000, 0x80306c00, 0x40240000,
+ 0x0c01f001, 0x00100c3d, 0x00100c3d, 0x00100c46,
+ 0x00100c3d, 0x00100c3d, 0x00100c3d, 0x00100c3d,
+ 0x00100c3d, 0x00100c46, 0x00100c3d, 0x00100c46,
+ 0x00100c3d, 0x00100c3d, 0x00100c46, 0x00100c3d,
+ 0x00100c3d, 0x0201f800, 0x0010032f, 0x8400051e,
+ 0x48025a09, 0x50200000, 0x80306c00, 0x58343801,
+ 0x481e6010, 0x0401f007, 0x58341802, 0x58342800,
+ 0x58343801, 0x480e6011, 0x4816600f, 0x481e6010,
+ 0x0401f2ce, 0x4933c857, 0x5931f809, 0x59301006,
+ 0x800811c0, 0x0400000b, 0x41780800, 0x42000000,
+ 0x0000000a, 0x0201f800, 0x00107000, 0x80080102,
+ 0x04020002, 0x84001542, 0x80081040, 0x4809fc07,
+ 0x4a026006, 0x00000002, 0x592c040a, 0x82000500,
+ 0x00000008, 0x0400000b, 0x0401f839, 0x59300203,
+ 0x82000580, 0x00000004, 0x04020005, 0x42027000,
+ 0x00000048, 0x0201f800, 0x00020b22, 0x1c01f000,
+ 0x4cfc0000, 0x58fc0205, 0x82000500, 0x000000ff,
+ 0x82000580, 0x00000048, 0x04020009, 0x58fc0409,
+ 0x8c000500, 0x04000006, 0x58fc080c, 0x8c040d16,
+ 0x0400001f, 0x58fc0008, 0x0401f00a, 0x58fc0409,
+ 0x8c000512, 0x0402001c, 0x58fc0c0a, 0x8c040d16,
+ 0x04020003, 0x5c01f800, 0x1c01f000, 0x58fc000b,
+ 0x4c000000, 0x4d2c0000, 0x40fe5800, 0x59300012,
+ 0x0201f800, 0x0010a6e6, 0x5c025800, 0x80000d40,
+ 0x5c000000, 0x80040580, 0x04020009, 0x59300008,
+ 0x84000500, 0x48026008, 0x42027000, 0x00000048,
+ 0x5c01f800, 0x0201f000, 0x00020b22, 0x5c01f800,
+ 0x1c01f000, 0x58fdf80a, 0x0401f7e4, 0x5c000000,
+ 0x4c000000, 0x4803c857, 0x4933c857, 0x59b808ea,
+ 0x82040d00, 0x00000007, 0x82040580, 0x00000000,
+ 0x04000025, 0x82040580, 0x00000003, 0x04000022,
+ 0x59300407, 0x4c000000, 0x4a026407, 0x00000000,
+ 0x42003000, 0x00000041, 0x4a0370e5, 0x00003000,
+ 0x42000000, 0x50000000, 0x41300800, 0x4c180000,
+ 0x0401fc34, 0x5c003000, 0x0400000e, 0x42000000,
+ 0x0000001e, 0x80000040, 0x040207ff, 0x80183040,
+ 0x040207f4, 0x42000000, 0x40000000, 0x41300800,
+ 0x0401fc28, 0x5988014d, 0x80000000, 0x4803114d,
+ 0x4a0370e5, 0x00002000, 0x5c000000, 0x48026407,
+ 0x1c01f000, 0x59300008, 0x84000500, 0x48026008,
+ 0x0401f7fc, 0x59c00007, 0x4a038006, 0x30000000,
+ 0x40000000, 0x59c00007, 0x8c00050a, 0x040207fe,
0x1c01f000, 0x5c000000, 0x4c000000, 0x4803c857,
- 0x59c41080, 0x497b8880, 0x4ce80000, 0x4201d000,
- 0x00000016, 0x4c080000, 0x0201f800, 0x00106661,
- 0x5c001000, 0x5c01d000, 0x59c42892, 0x497b8892,
- 0x0201f800, 0x001050f7, 0x04020002, 0x1c01f000,
- 0x42002000, 0x00000260, 0x59c418a4, 0x820c1d00,
- 0x0000000f, 0x820c0580, 0x00000000, 0x04000010,
- 0x59c41805, 0x820c1d00, 0x00000001, 0x0402000e,
- 0x59c418a4, 0x820c1d00, 0x0000000f, 0x820c0480,
- 0x00000007, 0x04001004, 0x820c0480, 0x0000000c,
- 0x04001003, 0x80102040, 0x040207ec, 0x497b8891,
- 0x1c01f000, 0x4c100000, 0x42002000, 0x00000019,
- 0x4a038805, 0x00000001, 0x0201f800, 0x0010193a,
- 0x59c41805, 0x820c1d00, 0x00000001, 0x04000005,
- 0x80102040, 0x040207f7, 0x5c002000, 0x0401f7f0,
- 0x5c002000, 0x0401f7ec, 0x4803c856, 0x1c01f000,
- 0x00100d58, 0x00100d58, 0x00100d58, 0x00100d7c,
- 0x00100d58, 0x00100d58, 0x00100d58, 0x00100d58,
- 0x00100d58, 0x00100d7c, 0x00100d58, 0x00100d5a,
- 0x00100d58, 0x00100d58, 0x00100d58, 0x00100d58,
- 0x0201f800, 0x0010032e, 0x82040580, 0x0000001b,
- 0x0400001a, 0x82040580, 0x0000002b, 0x04000017,
- 0x82040580, 0x0000003b, 0x02020800, 0x0010032e,
- 0x592c020b, 0x8c000500, 0x0400008d, 0x592c1a08,
- 0x82040500, 0x0000000f, 0x82000400, 0x00100f0b,
- 0x50001000, 0x50080000, 0x59302014, 0x4802600b,
- 0x492e600c, 0x480a600d, 0x480e600e, 0x48126013,
- 0x5c025800, 0x1c01f000, 0x592c0010, 0x48026012,
- 0x592c0011, 0x48026014, 0x592c1a08, 0x0401f7ed,
- 0x82040500, 0x0000000f, 0x82000400, 0x00100f0b,
- 0x50001000, 0x50080000, 0x592c1a08, 0x4802600b,
- 0x492e600c, 0x480a600d, 0x480e600e, 0x497a6013,
- 0x0401f7ec, 0x8c040d00, 0x04020069, 0x82040d00,
- 0x00000080, 0x04000066, 0x0201f000, 0x00020178,
- 0x0401fb75, 0x843c7d4e, 0x0201f000, 0x00020185,
- 0x0401fb71, 0x843c7d4e, 0x0201f000, 0x000201a0,
- 0x59300014, 0x59301013, 0x80080580, 0x04020018,
- 0x59300004, 0x8c00050e, 0x0400000a, 0x59300014,
- 0x80000540, 0x04020004, 0x42007800, 0x800000a5,
- 0x0401f04c, 0x42007800, 0x80000085, 0x0401f003,
- 0x42007800, 0x80000005, 0x592c1209, 0x82080500,
- 0xffff7fff, 0x48025a09, 0x8c08151e, 0x04020041,
- 0x823c7d40, 0x00000020, 0x0401f03e, 0x480bc857,
- 0x42000000, 0x0010cf13, 0x0201f800, 0x0010bfb3,
- 0x59302014, 0x59300415, 0x4803c857, 0x8c000514,
- 0x04020011, 0x599c1819, 0x8c0c1d12, 0x0400000b,
- 0x592c0810, 0x59300016, 0x80040c80, 0x04000005,
- 0x04001004, 0x80040000, 0x80140480, 0x0400100a,
- 0x0201f800, 0x00107f37, 0x820c1d40, 0x00000001,
- 0x0401f026, 0x84000514, 0x48026415, 0x48126016,
- 0x4813c857, 0x0401f95a, 0x04020020, 0x59300004,
- 0x8c00050e, 0x04000004, 0x42007800, 0x80000085,
- 0x0401f003, 0x42007800, 0x80000005, 0x5930500e,
- 0x592c0209, 0x4803c857, 0x8c00051e, 0x04020005,
- 0x823c7d40, 0x00000020, 0x5930400d, 0x0401f004,
- 0x8400051e, 0x48025a09, 0x0401f903, 0x50201800,
- 0x480e600b, 0x4832600c, 0x4822600d, 0x482a600e,
- 0x480fc857, 0x4833c857, 0x4823c857, 0x482bc857,
- 0x80000580, 0x483e6004, 0x1c01f000, 0x0201f800,
- 0x0010032e, 0x4933c857, 0x4d2c0000, 0x59900004,
- 0x81300580, 0x02020800, 0x0010032e, 0x0201f800,
- 0x0010989f, 0x02000800, 0x0010032e, 0x59325809,
- 0x4d3c0000, 0x4d400000, 0x59300004, 0x4803c857,
- 0x4c000000, 0x0201f800, 0x0010707a, 0x0201f800,
- 0x00106d71, 0x5c000000, 0x8c000516, 0x04000011,
- 0x592c0010, 0x4803c857, 0x48025808, 0x41780800,
- 0x42028000, 0x00000002, 0x0201f800, 0x00104e1a,
- 0x4a025c07, 0x0000ffff, 0x492fc857, 0x0201f800,
- 0x000203ef, 0x0201f800, 0x00107eb4, 0x0401f018,
- 0x4a026203, 0x00000002, 0x592c0209, 0x8c000512,
- 0x04020004, 0x592c0209, 0x8400054e, 0x48025a09,
- 0x59300407, 0x82000580, 0x00000006, 0x04020009,
- 0x811800ca, 0x81c80c00, 0x58040939, 0x592c000e,
- 0x80040480, 0x592c0810, 0x80040480, 0x4802580c,
- 0x417a7800, 0x0201f800, 0x00109425, 0x5c028000,
- 0x5c027800, 0x5c025800, 0x1c01f000, 0x4933c857,
- 0x4d2c0000, 0x59900004, 0x81300580, 0x02020800,
- 0x0010032e, 0x0201f800, 0x0010989f, 0x02000800,
- 0x0010032e, 0x59325809, 0x592c0209, 0x84000540,
- 0x48025a09, 0x0401f7bb, 0x491bc857, 0x4dd00000,
- 0x4c580000, 0x41780800, 0x8007a0ca, 0x83d3a400,
- 0x00007600, 0x4200b000, 0x000007d0, 0x599c0019,
- 0x8c000506, 0x04020003, 0x4200b000, 0x000003e8,
- 0x4a03a005, 0x80000002, 0x0402400d, 0x4c040000,
- 0x02004800, 0x00020a80, 0x5c000800, 0x42000000,
- 0x00001000, 0x50000000, 0x82000480, 0x24320001,
- 0x04001003, 0x8058b040, 0x04000016, 0x59d01006,
- 0x82080500, 0x00006000, 0x82000580, 0x00006000,
- 0x04000007, 0x8c08151e, 0x040007ec, 0x59d01006,
- 0x82080500, 0x00006000, 0x040207e8, 0x83d3a400,
- 0x00000020, 0x80040800, 0x82040480, 0x00000005,
- 0x040017d9, 0x5c00b000, 0x5c03a000, 0x1c01f000,
- 0x41180000, 0x80040580, 0x04000008, 0x42003000,
- 0x0010cb9b, 0x58180401, 0x8c000504, 0x040007f0,
- 0x850e1d6e, 0x0401f7ee, 0x4a03a005, 0x30000000,
- 0x59d00006, 0x4a03a005, 0x30000000, 0x59d00006,
- 0x497ba003, 0x497ba007, 0x4a03a005, 0xf0000001,
- 0x42001800, 0x00008000, 0x59d00006, 0x8c00050a,
- 0x04000005, 0x800c1840, 0x040207fc, 0x0201f800,
- 0x0010032e, 0x4a03a005, 0xf0000000, 0x59d00006,
- 0x850e1d2e, 0x800410c8, 0x82081400, 0x0000bf32,
- 0x58081804, 0x800c19c0, 0x040007d1, 0x580c0004,
- 0x84000576, 0x48001804, 0x4933c857, 0x0401f7cc,
- 0x4803c856, 0x4dd00000, 0x41780800, 0x8007a0ca,
- 0x83d3a400, 0x00007600, 0x4a03a005, 0x80000001,
- 0x59d00006, 0x83d3a400, 0x00000020, 0x80040800,
- 0x82040480, 0x00000005, 0x040017f8, 0x5c03a000,
- 0x1c01f000, 0x59d00006, 0x8c00053e, 0x04000031,
- 0x59902804, 0x4817c857, 0x801429c0, 0x04000026,
- 0x5990000a, 0x5990080b, 0x5990100c, 0x5990180d,
- 0x4800280b, 0x4804280c, 0x4808280d, 0x480c280e,
- 0x59d00000, 0x59d00801, 0x59d01002, 0x59d01803,
- 0x59d02004, 0x4800280f, 0x48042810, 0x48082811,
- 0x480c2812, 0x48102813, 0x58140004, 0x8c00050e,
- 0x04000011, 0x59d0000b, 0x59d0080c, 0x59d0100d,
- 0x59d0180e, 0x4800281e, 0x4804281f, 0x48082820,
- 0x480c2821, 0x59d0000f, 0x59d00810, 0x59d01011,
- 0x59d01812, 0x48002c22, 0x48042823, 0x48082824,
- 0x480c2825, 0x59900006, 0x82000500, 0xffff0000,
- 0x48032006, 0x4a03a005, 0x30000000, 0x59d00006,
- 0x1c01f000, 0x4803c856, 0x80204000, 0x50200000,
- 0x80000540, 0x04000003, 0x80285040, 0x1c01f000,
- 0x58300001, 0x80000540, 0x0400000e, 0x4802600c,
- 0x40006000, 0x58300205, 0x82000500, 0x0000000f,
- 0x82000400, 0x00100f0b, 0x50004000, 0x802041c0,
- 0x02000800, 0x0010032e, 0x80285040, 0x1c01f000,
- 0x40005000, 0x1c01f000, 0x00000006, 0x00000009,
- 0x0000000c, 0x0000000f, 0x00000012, 0x00000000,
- 0x00000000, 0x0000000c, 0x00000000, 0x00000000,
- 0x00000000, 0x00100f06, 0x00100f05, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x00100f06,
- 0x00100f05, 0x00100f02, 0x00100f06, 0x00100f05,
+ 0x42000800, 0x00000001, 0x0201f800, 0x00101c4d,
+ 0x4dc00000, 0x4a0370e8, 0x00000000, 0x42038000,
+ 0x00007720, 0x0401ffec, 0x42038000, 0x00007700,
+ 0x0401ffe9, 0x0201f800, 0x001052aa, 0x04020017,
+ 0x4a038891, 0x0000ffff, 0x497b8880, 0x4ce80000,
+ 0x4201d000, 0x00000016, 0x0201f800, 0x001069c8,
+ 0x497b8892, 0x4201d000, 0x00000016, 0x0201f800,
+ 0x001069c8, 0x5c01d000, 0x42000000, 0x0010d581,
+ 0x0201f800, 0x0010c50a, 0x0401f812, 0x5c038000,
+ 0x0201f000, 0x001053d2, 0x0401f830, 0x4c080000,
+ 0x4c140000, 0x42000000, 0x0010d582, 0x0201f800,
+ 0x0010c50a, 0x0401f807, 0x5c002800, 0x5c001000,
+ 0x48178892, 0x480b8880, 0x5c038000, 0x1c01f000,
+ 0x496fc857, 0x836c0580, 0x00000003, 0x0402000b,
+ 0x4c080000, 0x4c0c0000, 0x42001000, 0x00008048,
+ 0x42001800, 0x0000ffff, 0x0201f800, 0x00103a4e,
+ 0x5c001800, 0x5c001000, 0x42000800, 0x0000003c,
+ 0x0201f800, 0x0010132c, 0x59a8007b, 0x80000540,
+ 0x04000005, 0x59a8107c, 0x800811c0, 0x02020800,
+ 0x00101bb8, 0x4a038891, 0x0000ffff, 0x4a03900d,
+ 0x00000040, 0x0201f800, 0x001006b6, 0x4a0370e8,
+ 0x00000001, 0x1c01f000, 0x5c000000, 0x4c000000,
+ 0x4803c857, 0x59c41080, 0x497b8880, 0x4ce80000,
+ 0x4201d000, 0x00000016, 0x4c080000, 0x0201f800,
+ 0x001069c8, 0x5c001000, 0x5c01d000, 0x59c42892,
+ 0x497b8892, 0x0201f800, 0x001052aa, 0x04020002,
+ 0x1c01f000, 0x42002000, 0x00000260, 0x59c418a4,
+ 0x820c1d00, 0x0000000f, 0x820c0580, 0x00000000,
+ 0x04000010, 0x59c41805, 0x820c1d00, 0x00000001,
+ 0x0402000e, 0x59c418a4, 0x820c1d00, 0x0000000f,
+ 0x820c0480, 0x00000007, 0x04001004, 0x820c0480,
+ 0x0000000c, 0x04001003, 0x80102040, 0x040207ec,
+ 0x497b8891, 0x1c01f000, 0x4c100000, 0x42002000,
+ 0x00000019, 0x4a038805, 0x00000001, 0x0201f800,
+ 0x001019a8, 0x59c41805, 0x820c1d00, 0x00000001,
+ 0x04000005, 0x80102040, 0x040207f7, 0x5c002000,
+ 0x0401f7f0, 0x5c002000, 0x0401f7ec, 0x4803c856,
+ 0x1c01f000, 0x00100d7d, 0x00100d7d, 0x00100d7d,
+ 0x00100da1, 0x00100d7d, 0x00100d7d, 0x00100d7d,
+ 0x00100d7d, 0x00100d7d, 0x00100da1, 0x00100d7d,
+ 0x00100d7f, 0x00100d7d, 0x00100d7d, 0x00100d7d,
+ 0x00100d7d, 0x0201f800, 0x0010032f, 0x82040580,
+ 0x0000001b, 0x0400001a, 0x82040580, 0x0000002b,
+ 0x04000017, 0x82040580, 0x0000003b, 0x02020800,
+ 0x0010032f, 0x592c020b, 0x8c000500, 0x0400008d,
+ 0x592c1a08, 0x82040500, 0x0000000f, 0x82000400,
+ 0x00100f3c, 0x50001000, 0x50080000, 0x59302014,
+ 0x4802600b, 0x492e600c, 0x480a600d, 0x480e600e,
+ 0x48126013, 0x5c025800, 0x1c01f000, 0x592c0010,
+ 0x48026012, 0x592c0011, 0x48026014, 0x592c1a08,
+ 0x0401f7ed, 0x82040500, 0x0000000f, 0x82000400,
+ 0x00100f3c, 0x50001000, 0x50080000, 0x592c1a08,
+ 0x4802600b, 0x492e600c, 0x480a600d, 0x480e600e,
+ 0x497a6013, 0x0401f7ec, 0x8c040d00, 0x04020069,
+ 0x82040d00, 0x00000080, 0x04000066, 0x0201f000,
+ 0x0002017d, 0x0401fb59, 0x843c7d4e, 0x0201f000,
+ 0x0002018a, 0x0401fb55, 0x843c7d4e, 0x0201f000,
+ 0x000201a5, 0x59300014, 0x59301013, 0x80080580,
+ 0x04020018, 0x59300004, 0x8c00050e, 0x0400000a,
+ 0x59300014, 0x80000540, 0x04020004, 0x42007800,
+ 0x800000a5, 0x0401f04c, 0x42007800, 0x80000085,
+ 0x0401f003, 0x42007800, 0x80000005, 0x592c1209,
+ 0x82080500, 0xffff7fff, 0x48025a09, 0x8c08151e,
+ 0x04020041, 0x823c7d40, 0x00000020, 0x0401f03e,
+ 0x480bc857, 0x42000000, 0x0010d529, 0x0201f800,
+ 0x0010c50a, 0x59302014, 0x59300415, 0x4803c857,
+ 0x8c000514, 0x04020011, 0x599c1819, 0x8c0c1d12,
+ 0x0400000b, 0x592c0810, 0x59300016, 0x80040c80,
+ 0x04000005, 0x04001004, 0x80040000, 0x80140480,
+ 0x0400100a, 0x0201f800, 0x001082d6, 0x820c1d40,
+ 0x00000001, 0x0401f026, 0x84000514, 0x48026415,
+ 0x48126016, 0x4813c857, 0x0401f966, 0x04020020,
+ 0x59300004, 0x8c00050e, 0x04000004, 0x42007800,
+ 0x80000085, 0x0401f003, 0x42007800, 0x80000005,
+ 0x5930500e, 0x592c0209, 0x4803c857, 0x8c00051e,
+ 0x04020005, 0x823c7d40, 0x00000020, 0x5930400d,
+ 0x0401f004, 0x8400051e, 0x48025a09, 0x0401f90f,
+ 0x50201800, 0x480e600b, 0x4832600c, 0x4822600d,
+ 0x482a600e, 0x480fc857, 0x4833c857, 0x4823c857,
+ 0x482bc857, 0x80000580, 0x483e6004, 0x1c01f000,
+ 0x0201f800, 0x0010032f, 0x4933c857, 0x4d2c0000,
+ 0x59900004, 0x81300580, 0x02020800, 0x0010032f,
+ 0x0201f800, 0x00109c4d, 0x02000800, 0x0010032f,
+ 0x59325809, 0x4d3c0000, 0x4d400000, 0x59300004,
+ 0x4803c857, 0x4c000000, 0x0201f800, 0x001073e9,
+ 0x0201f800, 0x001070dc, 0x5c000000, 0x8c000516,
+ 0x04000011, 0x592c0010, 0x4803c857, 0x48025808,
+ 0x41780800, 0x42028000, 0x00000002, 0x0201f800,
+ 0x00104f92, 0x4a025c07, 0x0000ffff, 0x492fc857,
+ 0x0201f800, 0x00020401, 0x0201f800, 0x00108253,
+ 0x0401f01e, 0x4a026203, 0x00000002, 0x592c0209,
+ 0x8c000512, 0x04020004, 0x592c0209, 0x8400054e,
+ 0x48025a09, 0x59300407, 0x82000580, 0x00000006,
+ 0x0402000f, 0x592c080e, 0x59140001, 0x82000500,
+ 0xffff0000, 0x04000004, 0x811800ca, 0x81c80c00,
+ 0x58040939, 0x48066016, 0x592c000e, 0x80040480,
+ 0x592c0810, 0x80040480, 0x4802580c, 0x417a7800,
+ 0x0201f800, 0x001097a0, 0x5c028000, 0x5c027800,
+ 0x5c025800, 0x1c01f000, 0x4933c857, 0x4d2c0000,
+ 0x59900004, 0x81300580, 0x02020800, 0x0010032f,
+ 0x0201f800, 0x00109c4d, 0x02000800, 0x0010032f,
+ 0x59325809, 0x592c0209, 0x84000540, 0x48025a09,
+ 0x0401f7b5, 0x491bc857, 0x4dd00000, 0x4c580000,
+ 0x41780800, 0x8007a0ca, 0x83d3a400, 0x00007600,
+ 0x4200b000, 0x000007d0, 0x599c0019, 0x8c000506,
+ 0x04020003, 0x4200b000, 0x000003e8, 0x4a03a005,
+ 0x80000002, 0x0402400d, 0x4c040000, 0x02004800,
+ 0x000209db, 0x5c000800, 0x42000000, 0x00001000,
+ 0x50000000, 0x82000480, 0x24320001, 0x04001003,
+ 0x8058b040, 0x04000016, 0x59d01006, 0x82080500,
+ 0x00006000, 0x82000580, 0x00006000, 0x04000007,
+ 0x8c08151e, 0x040007ec, 0x59d01006, 0x82080500,
+ 0x00006000, 0x040207e8, 0x83d3a400, 0x00000020,
+ 0x80040800, 0x82040480, 0x00000005, 0x040017d9,
+ 0x5c00b000, 0x5c03a000, 0x1c01f000, 0x59a80006,
+ 0x8c000504, 0x04000004, 0x850e1d6e, 0x0201f800,
+ 0x0010032f, 0x41180000, 0x80040580, 0x04000008,
+ 0x42003000, 0x0010d1b1, 0x58180401, 0x8c000504,
+ 0x040007ea, 0x850e1d6e, 0x0401f7e8, 0x4a03a005,
+ 0x30000000, 0x59d00006, 0x4a03a005, 0x30000000,
+ 0x59d00006, 0x497ba003, 0x497ba007, 0x4a03a005,
+ 0xf0000001, 0x42001800, 0x00008000, 0x59d00006,
+ 0x8c00050a, 0x04000005, 0x800c1840, 0x040207fc,
+ 0x0201f800, 0x0010032f, 0x4a03a005, 0xf0000000,
+ 0x59d00006, 0x850e1d2e, 0x800410c8, 0x82081400,
+ 0x0000bf32, 0x58081804, 0x800c19c0, 0x040007cb,
+ 0x580c0004, 0x84000576, 0x48001804, 0x4933c857,
+ 0x0401f7c6, 0x4803c856, 0x4dd00000, 0x41780800,
+ 0x8007a0ca, 0x83d3a400, 0x00007600, 0x4a03a005,
+ 0x80000001, 0x59d00006, 0x83d3a400, 0x00000020,
+ 0x80040800, 0x82040480, 0x00000005, 0x040017f8,
+ 0x5c03a000, 0x1c01f000, 0x59d00006, 0x8c00053e,
+ 0x04000031, 0x59902804, 0x4817c857, 0x801429c0,
+ 0x04000026, 0x5990000a, 0x5990080b, 0x5990100c,
+ 0x5990180d, 0x4800280b, 0x4804280c, 0x4808280d,
+ 0x480c280e, 0x59d00000, 0x59d00801, 0x59d01002,
+ 0x59d01803, 0x59d02004, 0x4800280f, 0x48042810,
+ 0x48082811, 0x480c2812, 0x48102813, 0x58140004,
+ 0x8c00050e, 0x04000011, 0x59d0000b, 0x59d0080c,
+ 0x59d0100d, 0x59d0180e, 0x4800281e, 0x4804281f,
+ 0x48082820, 0x480c2821, 0x59d0000f, 0x59d00810,
+ 0x59d01011, 0x59d01812, 0x48002c22, 0x48042823,
+ 0x48082824, 0x480c2825, 0x59900006, 0x82000500,
+ 0xffff0000, 0x48032006, 0x4a03a005, 0x30000000,
+ 0x59d00006, 0x1c01f000, 0x4803c856, 0x80204000,
+ 0x50200000, 0x80000540, 0x04000003, 0x80285040,
+ 0x1c01f000, 0x58300001, 0x80000540, 0x0400000e,
+ 0x4802600c, 0x40006000, 0x58300205, 0x82000500,
+ 0x0000000f, 0x82000400, 0x00100f3c, 0x50004000,
+ 0x802041c0, 0x02000800, 0x0010032f, 0x80285040,
+ 0x1c01f000, 0x40005000, 0x1c01f000, 0x00000006,
+ 0x00000009, 0x0000000c, 0x0000000f, 0x00000012,
+ 0x00000000, 0x00000000, 0x0000000c, 0x00000000,
+ 0x00000000, 0x00000000, 0x00100f37, 0x00100f36,
0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x00000000, 0x00100f06, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x00100f06,
- 0x00100f06, 0x00100f06, 0x00000000, 0x00100f06,
- 0x00000000, 0x00000000, 0x00000000, 0x4813c857,
- 0x492fc857, 0x4933c857, 0x48126013, 0x592c5208,
- 0x802851c0, 0x04000075, 0x59300008, 0x8c000516,
- 0x04000020, 0x592c0205, 0x82000500, 0x0000000f,
- 0x82000580, 0x00000002, 0x04020003, 0x592c000e,
- 0x80102480, 0x801021c0, 0x41781000, 0x04000012,
- 0x592c6001, 0x58300406, 0x58300a07, 0x82000500,
- 0x00000003, 0x82000580, 0x00000000, 0x04000003,
- 0x82040c00, 0x00000008, 0x40040000, 0x40101000,
- 0x41780800, 0x0201f800, 0x00106c9d, 0x800409c0,
- 0x04020056, 0x0401f9e3, 0x0400004c, 0x0401f053,
- 0x59300004, 0x8c00050e, 0x04000007, 0x0401fa73,
- 0x0402004e, 0x592c6001, 0x42004000, 0x00100f03,
- 0x0401f00c, 0x412c6000, 0x0401f84b, 0x04000009,
- 0x82240580, 0x00000002, 0x04020003, 0x5830000e,
- 0x80102480, 0x50200000, 0x80004540, 0x0400003f,
- 0x50200000, 0x80000540, 0x0400000b, 0x80301400,
- 0x58080002, 0x80102480, 0x0400101e, 0x801021c0,
- 0x04000009, 0x80285040, 0x04000034, 0x80204000,
- 0x0401f7f4, 0x58300001, 0x80006540, 0x0400002f,
- 0x0401f7e6, 0x80285040, 0x0400002c, 0x80204000,
- 0x50200000, 0x80000540, 0x0402000a, 0x58300001,
- 0x80006540, 0x04000025, 0x58300205, 0x82004d00,
- 0x0000000f, 0x82244400, 0x00100f0b, 0x50204000,
- 0x592c0209, 0x8400051e, 0x48025a09, 0x0401f013,
- 0x80102080, 0x80102000, 0x48126011, 0x4813c857,
- 0x58080802, 0x40100000, 0x80042480, 0x02001800,
- 0x0010032e, 0x58080000, 0x58081801, 0x80102400,
- 0x4812600f, 0x480e6010, 0x4813c857, 0x592c0209,
- 0x8400055e, 0x48025a09, 0x4833c857, 0x4823c857,
- 0x482bc857, 0x4832600c, 0x4822600d, 0x482a600e,
- 0x80000580, 0x0401f003, 0x82000540, 0x00000001,
- 0x1c01f000, 0x58300205, 0x82004d00, 0x0000000f,
- 0x82244400, 0x00100f0b, 0x82000500, 0x000000ff,
- 0x82000580, 0x00000029, 0x0402001b, 0x50204000,
- 0x592c040a, 0x80000540, 0x02000800, 0x0010032e,
- 0x82000c80, 0x00000002, 0x04001011, 0x58300001,
- 0x80006540, 0x02000800, 0x0010032e, 0x58300205,
- 0x82000500, 0x0000000f, 0x82000400, 0x00100f0b,
- 0x50004000, 0x40040000, 0x800409c0, 0x04000006,
- 0x82040c80, 0x00000005, 0x040217f1, 0x80204400,
- 0x80000580, 0x1c01f000, 0x4c5c0000, 0x59e4b800,
- 0x485fc857, 0x825c0500, 0x0000001f, 0x04000004,
- 0x59e40862, 0x0201f800, 0x0010032e, 0x825c0500,
- 0x000000e0, 0x02000800, 0x0010032e, 0x8c5cbd0e,
- 0x04020807, 0x8c5cbd0c, 0x04020809, 0x8c5cbd0a,
- 0x04020873, 0x5c00b800, 0x1c01f000, 0x4803c856,
- 0x4a03c800, 0x00000080, 0x1c01f000, 0x4d2c0000,
- 0x42007800, 0x0010cfb9, 0x583c0003, 0x583c0804,
- 0x80040540, 0x0400003a, 0x42000800, 0x0010ce5c,
- 0x50065800, 0x592c0002, 0x82000580, 0x00000000,
- 0x04000033, 0x59e40050, 0x59e40852, 0x80040480,
- 0x82000500, 0xfffffc00, 0x04020005, 0x59e40050,
- 0x59e40851, 0x80040800, 0x80040480, 0x82000c80,
- 0x00000400, 0x59e40050, 0x80041400, 0x480bc857,
- 0x50080000, 0x58080801, 0x80040540, 0x04000020,
- 0x480bc857, 0x480a5803, 0x583c1009, 0x583c000a,
- 0x80080580, 0x04020005, 0x583c0000, 0x84000550,
- 0x48007800, 0x41781000, 0x82080400, 0x00001000,
- 0x4803c857, 0x48007809, 0x583c0003, 0x80081400,
- 0x480bc857, 0x583c0804, 0x4a025801, 0x00000000,
- 0x4a025808, 0x0010102b, 0x480a5806, 0x48065807,
- 0x59e40053, 0x800000c4, 0x48025805, 0x412c1000,
- 0x492fc857, 0x0201f800, 0x00020016, 0x5c025800,
- 0x4a03c800, 0x00000040, 0x1c01f000, 0x42007800,
- 0x0010ce5c, 0x503c7800, 0x4a007802, 0x00000100,
- 0x42007800, 0x0010cfb9, 0x583c0000, 0x84000552,
- 0x48007800, 0x583c100c, 0x480bc857, 0x80081000,
- 0x4808780c, 0x583c180b, 0x800c19c0, 0x04000017,
- 0x82080500, 0x00000003, 0x04020014, 0x583c0007,
- 0x4803c857, 0x583c2008, 0x4813c857, 0x80102000,
- 0x80100580, 0x04020002, 0x41782000, 0x48107808,
- 0x400c0000, 0x80080580, 0x04020008, 0x4978780c,
- 0x42001800, 0x00000001, 0x42001000, 0x00008028,
- 0x0201f800, 0x001039ac, 0x1c01f000, 0x4a03c800,
- 0x00000020, 0x0201f800, 0x0010bfab, 0x59e40000,
- 0x1c01f000, 0x42000000, 0x00001000, 0x50000000,
- 0x82000480, 0x24320001, 0x0400100d, 0x0201f800,
- 0x0010c0d6, 0x04000008, 0x42000000, 0x00007a42,
- 0x50007000, 0x8c387520, 0x04020003, 0x84387560,
- 0x44380000, 0x4a030000, 0x00000000, 0x1c01f000,
- 0x4d2c0000, 0x4a007000, 0x00000000, 0x82040d00,
- 0x43000f80, 0x02020800, 0x0010032e, 0x58380008,
- 0x4803c00f, 0x4a0370e4, 0x00003000, 0x0201f800,
- 0x00109ce4, 0x583a5807, 0x592c0000, 0x48007007,
- 0x800001c0, 0x04020002, 0x49787006, 0x0201f800,
- 0x00100594, 0x5c025800, 0x42007000, 0x00020cf0,
- 0x0201f000, 0x0002002c, 0x4803c856, 0x4c3c0000,
- 0x4d2c0000, 0x4d300000, 0x58300009, 0x80025d40,
- 0x02000800, 0x0010032e, 0x592e6009, 0x4c300000,
- 0x0201f800, 0x00109d04, 0x5c006000, 0x02000800,
- 0x0010032e, 0x58300002, 0x82000580, 0x00000100,
- 0x0402000f, 0x5930780c, 0x583c0001, 0x80007d40,
- 0x0400000e, 0x4802600c, 0x82000400, 0x00000002,
- 0x48006003, 0x583c0000, 0x48006005, 0x40301000,
- 0x0201f800, 0x00020016, 0x0401f00c, 0x4a025a07,
+ 0x00100f37, 0x00100f36, 0x00100f33, 0x00100f37,
+ 0x00100f36, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00100f37, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00100f37, 0x00100f37, 0x00100f37, 0x00000000,
+ 0x00100f37, 0x00000000, 0x00000000, 0x00000000,
+ 0x4813c857, 0x492fc857, 0x4933c857, 0x48126013,
+ 0x592c5208, 0x802851c0, 0x04000075, 0x59300008,
+ 0x8c000516, 0x04000020, 0x592c0205, 0x82000500,
+ 0x0000000f, 0x82000580, 0x00000002, 0x04020003,
+ 0x592c000e, 0x80102480, 0x801021c0, 0x41781000,
+ 0x04000012, 0x592c6001, 0x58300406, 0x58300a07,
+ 0x82000500, 0x00000003, 0x82000580, 0x00000000,
+ 0x04000003, 0x82040c00, 0x00000008, 0x40040000,
+ 0x40101000, 0x41780800, 0x0201f800, 0x00107000,
+ 0x800409c0, 0x04020056, 0x0401f9bb, 0x0400004c,
+ 0x0401f053, 0x59300004, 0x8c00050e, 0x04000007,
+ 0x0401fa4b, 0x0402004e, 0x592c6001, 0x42004000,
+ 0x00100f34, 0x0401f00c, 0x412c6000, 0x0401f84b,
+ 0x04000009, 0x82240580, 0x00000002, 0x04020003,
+ 0x5830000e, 0x80102480, 0x50200000, 0x80004540,
+ 0x0400003f, 0x50200000, 0x80000540, 0x0400000b,
+ 0x80301400, 0x58080002, 0x80102480, 0x0400101e,
+ 0x801021c0, 0x04000009, 0x80285040, 0x04000034,
+ 0x80204000, 0x0401f7f4, 0x58300001, 0x80006540,
+ 0x0400002f, 0x0401f7e6, 0x80285040, 0x0400002c,
+ 0x80204000, 0x50200000, 0x80000540, 0x0402000a,
+ 0x58300001, 0x80006540, 0x04000025, 0x58300205,
+ 0x82004d00, 0x0000000f, 0x82244400, 0x00100f3c,
+ 0x50204000, 0x592c0209, 0x8400051e, 0x48025a09,
+ 0x0401f013, 0x80102080, 0x80102000, 0x48126011,
+ 0x4813c857, 0x58080802, 0x40100000, 0x80042480,
+ 0x02001800, 0x0010032f, 0x58080000, 0x58081801,
+ 0x80102400, 0x4812600f, 0x480e6010, 0x4813c857,
+ 0x592c0209, 0x8400055e, 0x48025a09, 0x4833c857,
+ 0x4823c857, 0x482bc857, 0x4832600c, 0x4822600d,
+ 0x482a600e, 0x80000580, 0x0401f003, 0x82000540,
+ 0x00000001, 0x1c01f000, 0x58300205, 0x82004d00,
+ 0x0000000f, 0x82244400, 0x00100f3c, 0x82000500,
+ 0x000000ff, 0x82000580, 0x00000029, 0x0402001b,
+ 0x50204000, 0x592c040a, 0x80000540, 0x02000800,
+ 0x0010032f, 0x82000c80, 0x00000002, 0x04001011,
+ 0x58300001, 0x80006540, 0x02000800, 0x0010032f,
+ 0x58300205, 0x82000500, 0x0000000f, 0x82000400,
+ 0x00100f3c, 0x50004000, 0x40040000, 0x800409c0,
+ 0x04000006, 0x82040c80, 0x00000005, 0x040217f1,
+ 0x80204400, 0x80000580, 0x1c01f000, 0x4c5c0000,
+ 0x59e4b800, 0x485fc857, 0x825c0500, 0x0000001f,
+ 0x04000004, 0x59e40862, 0x0201f800, 0x0010032f,
+ 0x825c0500, 0x000000e0, 0x02000800, 0x0010032f,
+ 0x8c5cbd0e, 0x04020807, 0x8c5cbd0c, 0x04020809,
+ 0x8c5cbd0a, 0x04020873, 0x5c00b800, 0x1c01f000,
+ 0x4803c856, 0x4a03c800, 0x00000080, 0x1c01f000,
+ 0x4d2c0000, 0x42007800, 0x0010d5d7, 0x583c0003,
+ 0x583c0804, 0x80040540, 0x0400003a, 0x42000800,
+ 0x0010d472, 0x50065800, 0x592c0002, 0x82000580,
+ 0x00000000, 0x04000033, 0x59e40050, 0x59e40852,
+ 0x80040480, 0x82000500, 0xfffffc00, 0x04020005,
+ 0x59e40050, 0x59e40851, 0x80040800, 0x80040480,
+ 0x82000c80, 0x00000400, 0x59e40050, 0x80041400,
+ 0x480bc857, 0x50080000, 0x58080801, 0x80040540,
+ 0x04000020, 0x480bc857, 0x480a5803, 0x583c1009,
+ 0x583c000a, 0x80080580, 0x04020005, 0x583c0000,
+ 0x84000550, 0x48007800, 0x41781000, 0x82080400,
+ 0x00001000, 0x4803c857, 0x48007809, 0x583c0003,
+ 0x80081400, 0x480bc857, 0x583c0804, 0x4a025801,
+ 0x00000000, 0x4a025808, 0x0010105c, 0x480a5806,
+ 0x48065807, 0x59e40053, 0x800000c4, 0x48025805,
+ 0x412c1000, 0x492fc857, 0x0201f800, 0x00020017,
+ 0x5c025800, 0x4a03c800, 0x00000040, 0x1c01f000,
+ 0x42007800, 0x0010d472, 0x503c7800, 0x4a007802,
+ 0x00000100, 0x42007800, 0x0010d5d7, 0x583c0000,
+ 0x84000552, 0x48007800, 0x583c100c, 0x480bc857,
+ 0x80081000, 0x4808780c, 0x583c180b, 0x800c19c0,
+ 0x04000017, 0x82080500, 0x00000003, 0x04020014,
+ 0x583c0007, 0x4803c857, 0x583c2008, 0x4813c857,
+ 0x80102000, 0x80100580, 0x04020002, 0x41782000,
+ 0x48107808, 0x400c0000, 0x80080580, 0x04020008,
+ 0x4978780c, 0x42001800, 0x00000001, 0x42001000,
+ 0x00008028, 0x0201f800, 0x00103a4e, 0x1c01f000,
+ 0x4a03c800, 0x00000020, 0x0201f800, 0x0010c502,
+ 0x59e40000, 0x1c01f000, 0x42000000, 0x00001000,
+ 0x50000000, 0x82000480, 0x24320001, 0x0400100d,
+ 0x0201f800, 0x0010c62d, 0x04000008, 0x42000000,
+ 0x00007a42, 0x50007000, 0x8c387520, 0x04020003,
+ 0x84387560, 0x44380000, 0x4a030000, 0x00000000,
+ 0x1c01f000, 0x4d2c0000, 0x4a007000, 0x00000000,
+ 0x82040d00, 0x43000f80, 0x02020800, 0x0010032f,
+ 0x58380008, 0x4803c00f, 0x583a5807, 0x592c0801,
+ 0x800409c0, 0x04000013, 0x592c0000, 0x48000800,
+ 0x58380006, 0x812c0580, 0x04020002, 0x48047006,
+ 0x48047007, 0x42002000, 0x00000001, 0x0201f800,
+ 0x0010b9e9, 0x02000800, 0x0010032f, 0x0201f800,
+ 0x001005aa, 0x5c025800, 0x0201f000, 0x00100637,
+ 0x4a0370e4, 0x00003000, 0x0201f800, 0x0010a096,
+ 0x583a5807, 0x592c0000, 0x48007007, 0x800001c0,
+ 0x04020002, 0x49787006, 0x0201f800, 0x001005aa,
+ 0x5c025800, 0x42007000, 0x00020c51, 0x0201f000,
+ 0x0002002d, 0x4803c856, 0x4c3c0000, 0x4d2c0000,
+ 0x4d300000, 0x58300009, 0x80025d40, 0x04000020,
+ 0x592e6009, 0x4c300000, 0x0201f800, 0x0010a0b6,
+ 0x5c006000, 0x02000800, 0x0010032f, 0x58300002,
+ 0x82000580, 0x00000100, 0x04000004, 0x4a025a07,
0x00000002, 0x492fc857, 0x4c300000, 0x0201f800,
- 0x000203ef, 0x5c025800, 0x0201f800, 0x00100594,
- 0x0201f800, 0x00020b9d, 0x5c026000, 0x5c025800,
- 0x5c007800, 0x1c01f000, 0x4803c856, 0x4d2c0000,
- 0x4d300000, 0x42007000, 0x00020cf0, 0x58380800,
- 0x82040580, 0x00000002, 0x04020011, 0x58386001,
- 0x58300009, 0x812c0580, 0x0402000d, 0x59e00004,
- 0x8c00050e, 0x040007fe, 0x59dc0006, 0x4803c857,
- 0x4a03b805, 0x20000000, 0x8c00053e, 0x040007f8,
- 0x4a007000, 0x00000000, 0x0401f019, 0x58386005,
- 0x40305000, 0x803061c0, 0x02000800, 0x0010032e,
- 0x58300009, 0x812c0580, 0x04000004, 0x40305000,
- 0x58306000, 0x0401f7f8, 0x40280000, 0x80300580,
- 0x58300000, 0x04000006, 0x48005000, 0x800001c0,
- 0x04020007, 0x48287004, 0x0401f005, 0x800001c0,
- 0x04020002, 0x48007004, 0x48007005, 0x40325800,
- 0x0201f800, 0x00100594, 0x5c026000, 0x5c025800,
- 0x0201f000, 0x00020026, 0x59300024, 0x48025811,
- 0x59300025, 0x48025812, 0x59300a22, 0x8c040d0c,
- 0x04020007, 0x5930001f, 0x59300a20, 0x800408e0,
- 0x80040540, 0x5930081e, 0x0401f006, 0x5930081f,
- 0x59300220, 0x800408e0, 0x80040d40, 0x5930001e,
- 0x9c0001c0, 0x9c0409c0, 0x48025813, 0x48065814,
- 0x1c01f000, 0x592c0001, 0x80003540, 0x02000800,
- 0x0010032e, 0x58180a05, 0x82040d00, 0x000000ff,
- 0x82040580, 0x0000004a, 0x02020800, 0x0010032e,
- 0x592c1012, 0x592c1a13, 0x58182206, 0x592c2c13,
- 0x592c0014, 0x800000e0, 0x80142d40, 0x592c0014,
- 0x80003920, 0x58184406, 0x58180207, 0x800048e0,
- 0x80244d40, 0x58180008, 0x48026029, 0x8c20450c,
- 0x04020009, 0x901c51c0, 0x841401c0, 0x82003d00,
- 0x0000ffff, 0x80140120, 0x80280540, 0x9c0029c0,
- 0x0401f003, 0x9c1429c0, 0x841c39c0, 0x480a601e,
- 0x480e601f, 0x48126420, 0x48126220, 0x48166021,
- 0x481e6422, 0x48226222, 0x48266023, 0x1c01f000,
- 0x592c0001, 0x80006540, 0x02000800, 0x0010032e,
- 0x58300a05, 0x82040d00, 0x000000ff, 0x82040580,
- 0x0000004a, 0x02020800, 0x0010032e, 0x58302c06,
- 0x8c142d06, 0x58300206, 0x04000002, 0x80080400,
- 0x48026420, 0x48026220, 0x58300207, 0x800008e0,
- 0x80040540, 0x48026023, 0x8c142d0a, 0x04020004,
- 0x592c0012, 0x80080400, 0x4802601e, 0x82142d00,
- 0x00000003, 0x58303207, 0x82140580, 0x00000002,
- 0x04000011, 0x82140580, 0x00000001, 0x04000009,
- 0x40080800, 0x82180400, 0x00000008, 0x40001000,
- 0x0201f800, 0x00106c7e, 0x40042000, 0x0401f006,
- 0x40080800, 0x40181000, 0x0201f800, 0x00106c7e,
- 0x40042000, 0x4c100000, 0x0401fe43, 0x02000800,
- 0x0010032e, 0x5c002000, 0x50200000, 0x80004540,
- 0x0400005b, 0x58300a05, 0x82040d00, 0x000000ff,
- 0x82040580, 0x0000004a, 0x04020002, 0x80204000,
- 0x50200000, 0x80000540, 0x0400000b, 0x80301400,
- 0x58080002, 0x80102480, 0x0400101e, 0x801021c0,
- 0x04000009, 0x80285040, 0x04000049, 0x80204000,
- 0x0401f7f4, 0x58300001, 0x80006540, 0x04000044,
- 0x0401f7e1, 0x80285040, 0x04000041, 0x80204000,
- 0x50200000, 0x80000540, 0x0402000a, 0x58300001,
- 0x80006540, 0x0400003a, 0x58300205, 0x82004d00,
- 0x0000000f, 0x82244400, 0x00100f0b, 0x50204000,
- 0x592c0209, 0x8400051e, 0x48025a09, 0x0401f011,
- 0x80102080, 0x80102000, 0x48126011, 0x4813c857,
- 0x58080802, 0x40100000, 0x80042480, 0x02001800,
- 0x0010032e, 0x58080000, 0x80102400, 0x4812600f,
- 0x4813c857, 0x592c0209, 0x8400055e, 0x48025a09,
- 0x59300008, 0x8400052c, 0x48026008, 0x592c1001,
- 0x58080406, 0x82000500, 0x00000003, 0x82000580,
- 0x00000001, 0x04020014, 0x599c0019, 0x8c00050c,
- 0x04020011, 0x82280580, 0x00000001, 0x04020003,
- 0x59300811, 0x0401f008, 0x80280840, 0x58080207,
- 0x40001000, 0x0201f800, 0x00106c7e, 0x59300011,
- 0x80040c00, 0x48066012, 0x59300008, 0x8400056c,
- 0x48026008, 0x80000580, 0x0401f003, 0x82000540,
- 0x00000001, 0x1c01f000, 0x592c6801, 0x803469c0,
- 0x0400001a, 0x592c0205, 0x82000500, 0x000000ff,
- 0x82000580, 0x00000072, 0x04020003, 0x592c000e,
- 0x80102480, 0x58347802, 0x58347406, 0x82380500,
- 0x00000003, 0x0c01f001, 0x001011e1, 0x001011de,
- 0x001011e4, 0x001011e6, 0x803c00c6, 0x80102400,
- 0x0401f004, 0x803c00c6, 0x80102480, 0x04001003,
- 0x80000580, 0x1c01f000, 0x82000540, 0x00000001,
- 0x1c01f000, 0x4803c856, 0x42000800, 0x0000003c,
- 0x48079000, 0x59c80000, 0x80040500, 0x040207fe,
- 0x497b9005, 0x4a039035, 0x00880200, 0x59a8000d,
- 0x800000e0, 0x4803900e, 0x4a039011, 0x0000002c,
- 0x4a03900f, 0x00111584, 0x4a039010, 0x00111584,
- 0x4a039015, 0x0000007f, 0x4a03900d, 0x00000040,
- 0x4a039000, 0x00001600, 0x1c01f000, 0x59c80007,
- 0x8c000508, 0x040208c9, 0x59c80800, 0x8c040d16,
- 0x04020004, 0x82000500, 0x00000006, 0x0c01f005,
- 0x4807c857, 0x82000500, 0x0000000e, 0x0c01f001,
- 0x00101222, 0x00101220, 0x00105d55, 0x00101220,
- 0x00101224, 0x00101220, 0x00101224, 0x00101224,
- 0x00101220, 0x00101220, 0x00101220, 0x00101220,
- 0x00101224, 0x00101220, 0x00101224, 0x00101220,
- 0x0201f800, 0x0010032e, 0x4803c857, 0x1c01f000,
- 0x59c8080c, 0x4807c857, 0x82040500, 0x00006000,
- 0x04000004, 0x0201f800, 0x0010bf6e, 0x0401f006,
- 0x82040500, 0x007f0000, 0x04000006, 0x0201f800,
- 0x0010bf40, 0x0201f800, 0x00107186, 0x0401f03c,
- 0x82040500, 0x00000014, 0x04000014, 0x0201f800,
- 0x0010bf9d, 0x836c0580, 0x00000003, 0x0400000d,
- 0x0201f800, 0x001050f7, 0x04000004, 0x0201f800,
- 0x0010410a, 0x0401f007, 0x4a035014, 0x00000001,
- 0x4202d800, 0x00000001, 0x0201f800, 0x00105051,
- 0x0401f828, 0x0401f026, 0x82040500, 0x00001c00,
- 0x04000005, 0x0201f800, 0x0010bf7c, 0x0401f821,
- 0x0401f01f, 0x82040500, 0x00000140, 0x04000005,
- 0x0201f800, 0x0010bf8f, 0x0401f81a, 0x0401f018,
- 0x82040500, 0x00008000, 0x04000015, 0x0201f800,
- 0x001050f7, 0x0400000f, 0x59c400a4, 0x82000500,
- 0x0000000f, 0x82000580, 0x0000000b, 0x04020009,
- 0x4c040000, 0x0201f800, 0x00104126, 0x42000000,
- 0x0000001e, 0x80000040, 0x040207ff, 0x5c000800,
- 0x0201f800, 0x0010bf67, 0x0401f802, 0x1c01f000,
- 0x4c0c0000, 0x4c100000, 0x4c140000, 0x0201f800,
- 0x00100cb0, 0x5c002800, 0x5c002000, 0x5c001800,
- 0x1c01f000, 0x4803c856, 0x59a80804, 0x59a80020,
- 0x82000500, 0xfffff000, 0x80040540, 0x48035020,
- 0x59a80024, 0x82000500, 0xfffff000, 0x80040540,
- 0x48035024, 0x48078882, 0x82041c00, 0x0000000f,
- 0x800c1908, 0x820c1c00, 0x00000004, 0x400c2000,
- 0x901029c0, 0x82040480, 0x000001e4, 0x04021005,
- 0x42001000, 0x00000008, 0x801020c6, 0x0401f031,
- 0x82040480, 0x00000230, 0x04021009, 0x42001000,
- 0x00000007, 0x801000c2, 0x800000c2, 0x80100400,
- 0x80100400, 0x80102400, 0x0401f026, 0x82040480,
- 0x00000298, 0x04021008, 0x42001000, 0x00000006,
- 0x801000c2, 0x800000c2, 0x80100400, 0x80102400,
- 0x0401f01c, 0x82040480, 0x00000328, 0x04021007,
- 0x42001000, 0x00000005, 0x801000c2, 0x800000c2,
- 0x80102400, 0x0401f013, 0x82040480, 0x00000404,
- 0x04021005, 0x42001000, 0x00000004, 0x801020c4,
- 0x0401f00c, 0x82040480, 0x0000056c, 0x04021006,
- 0x42001000, 0x00000003, 0x801000c2, 0x80102400,
- 0x0401f004, 0x42001000, 0x00000002, 0x801020c2,
- 0x82100480, 0x00000110, 0x80000080, 0x80002000,
- 0x800800d0, 0x80140540, 0x80100540, 0x48039035,
- 0x48035075, 0x1c01f000, 0x59c80815, 0x0201f800,
- 0x00100323, 0x40680800, 0x82040d00, 0x0000007c,
- 0x48079000, 0x59c80000, 0x80040500, 0x040207fe,
- 0x8c040d04, 0x04000003, 0x59c80035, 0x48039035,
- 0x59c80000, 0x82000540, 0x00001200, 0x48039000,
- 0x1c01f000, 0x4803c856, 0x497b88a9, 0x4a038807,
- 0x00000001, 0x497b8807, 0x59c40005, 0x48038805,
- 0x0201f800, 0x00101820, 0x4201d000, 0x000001f4,
- 0x0201f800, 0x00106661, 0x497b880e, 0x4200b000,
- 0x000001f4, 0x42000000, 0x00000001, 0x42000800,
- 0x00000014, 0x0201f800, 0x00101949, 0x42000800,
- 0x00000014, 0x0201f800, 0x00101941, 0x8c040d00,
- 0x04000005, 0x8058b040, 0x040207f3, 0x0201f800,
- 0x0010032e, 0x4200b000, 0x00000032, 0x42000000,
- 0x00000001, 0x42000800, 0x000000b4, 0x0201f800,
- 0x00101949, 0x42000800, 0x000000b4, 0x0201f800,
- 0x00101941, 0x8c040d00, 0x04000005, 0x8058b040,
- 0x040207f3, 0x0201f800, 0x0010032e, 0x59c40005,
- 0x48038805, 0x42000000, 0x00000083, 0x59e00803,
- 0x82040d00, 0x00030000, 0x82040d80, 0x00020000,
- 0x04020003, 0x42000000, 0x00000089, 0x800008d0,
- 0x4a035044, 0x00008900, 0x4a035045, 0x00008900,
- 0x48075046, 0x42000800, 0x000000e0, 0x0201f800,
- 0x00101949, 0x42000800, 0x000000f4, 0x0201f800,
- 0x00101941, 0x82040500, 0xffffffd1, 0x82000540,
- 0x00000002, 0x42000800, 0x000000f4, 0x0201f800,
- 0x00101949, 0x42000800, 0x000000a0, 0x0201f800,
- 0x00101941, 0x82040540, 0x00000001, 0x42000800,
- 0x000000a0, 0x0201f800, 0x00101949, 0x42000800,
- 0x00000000, 0x0201f800, 0x00101941, 0x82040540,
- 0x00000001, 0x42000800, 0x00000000, 0x0201f800,
- 0x00101949, 0x4201d000, 0x0001d4c0, 0x0201f800,
- 0x00106661, 0x0401fa6d, 0x4a0388a7, 0x0000f7f7,
- 0x4a0388a3, 0x8000403c, 0x4a0388ae, 0x000061a8,
- 0x4a038801, 0x00032063, 0x4a038810, 0x00410108,
- 0x4a038811, 0x00520608, 0x4a038812, 0x00450320,
- 0x4a038813, 0x00440405, 0x4a03881c, 0x004132e1,
- 0x4a03881d, 0x004001fe, 0x4a038850, 0x80000108,
- 0x4a038860, 0x00000008, 0x4a038870, 0x00000008,
- 0x4a038851, 0x80000508, 0x4a038861, 0x00800000,
- 0x4a038871, 0x00800000, 0x4a038852, 0x80000708,
- 0x4a038862, 0x00800000, 0x4a038872, 0x00800000,
- 0x4a038853, 0x80000608, 0x497b8863, 0x4a038873,
- 0x00800000, 0x4a038882, 0x00000840, 0x4a0388a5,
- 0x000000fe, 0x4a0388a6, 0x0000001e, 0x4a0388b0,
- 0x00007530, 0x4a038802, 0x0000ffff, 0x4a038806,
- 0xc0e00800, 0x1c01f000, 0x850e1d4e, 0x42000800,
- 0x00000040, 0x0201f800, 0x00101941, 0x82040500,
- 0xffffffaf, 0x82000540, 0x00000000, 0x42000800,
- 0x00000040, 0x0201f800, 0x00101949, 0x42000800,
- 0x000000f4, 0x0201f800, 0x00101941, 0x4c040000,
- 0x40040000, 0x84000548, 0x42000800, 0x000000f4,
- 0x0201f800, 0x00101949, 0x42000800, 0x00000000,
- 0x0201f800, 0x00101941, 0x82040500, 0xffffffc1,
- 0x82000540, 0x00000038, 0x42000800, 0x00000000,
- 0x0201f800, 0x00101949, 0x5c000000, 0x42000800,
- 0x000000f4, 0x0201f000, 0x00101949, 0x59c40805,
- 0x59c40006, 0x80040d00, 0x02000800, 0x0010032e,
- 0x82040500, 0x00e00800, 0x04020004, 0x8c040d3e,
- 0x040208f9, 0x0401f007, 0x82040500, 0x00800800,
- 0x02020800, 0x00100323, 0x0201f800, 0x0010032e,
- 0x4c5c0000, 0x4c600000, 0x59c4b805, 0x59c40006,
- 0x8c000500, 0x04000003, 0x8c5cbd00, 0x040200a2,
- 0x485fc857, 0x0201f800, 0x001050f7, 0x0400001e,
- 0x59c40005, 0x82000500, 0x000000c0, 0x04000054,
- 0x0201f800, 0x00105122, 0x04020051, 0x59c40006,
- 0x82000500, 0x000000f0, 0x04020004, 0x4a038805,
- 0x000000c0, 0x0401f04a, 0x59a80015, 0x84000506,
- 0x48035015, 0x42006000, 0xff203fff, 0x42006800,
- 0x40000000, 0x0201f800, 0x001042a6, 0x42000800,
- 0x00000010, 0x42001000, 0x001041ef, 0x0201f800,
- 0x00106656, 0x8c5cbd34, 0x04020039, 0x4a035013,
- 0x0000aaaa, 0x59c40005, 0x8c00050c, 0x04020012,
- 0x8c00050e, 0x0402001c, 0x8c00050a, 0x04020026,
- 0x8c000508, 0x0400000b, 0x59a80011, 0x82000580,
- 0x00000009, 0x04020007, 0x42000000, 0x0010ce78,
- 0x0201f800, 0x0010bfb3, 0x0201f800, 0x0010533d,
- 0x0401f067, 0x42000000, 0x0010ce86, 0x0201f800,
- 0x0010bfb3, 0x41781800, 0x42002000, 0x00000001,
- 0x0201f800, 0x00101c46, 0x4a035014, 0x00000000,
- 0x0401f014, 0x42000000, 0x0010ce87, 0x0201f800,
- 0x0010bfb3, 0x41781800, 0x42002000, 0x00000002,
- 0x0201f800, 0x00101c46, 0x4a035014, 0x00000002,
- 0x0401f008, 0x42000000, 0x0010ce7a, 0x0201f800,
- 0x0010bfb3, 0x0201f800, 0x001052cb, 0x0401f048,
- 0x0201f800, 0x001053a8, 0x0401f045, 0x8c5cbd34,
- 0x04000041, 0x59c40005, 0x8c00053a, 0x04020005,
- 0x42000000, 0x0010ce6e, 0x0201f800, 0x0010bfb3,
- 0x4a038805, 0x20000000, 0x0201f800, 0x001050f7,
- 0x04020015, 0x4a038805, 0x04000000, 0x59c418a8,
- 0x42002000, 0x00000000, 0x0201f800, 0x00101c46,
- 0x0201f800, 0x00105113, 0x04020008, 0x4a035014,
- 0x00000001, 0x4202d800, 0x00000001, 0x0201f800,
- 0x00105051, 0x0401f06d, 0x41780000, 0x0201f800,
- 0x001050c8, 0x0201f800, 0x00101a3d, 0x4000c000,
- 0x0201f800, 0x00101968, 0x836c1580, 0x00000004,
- 0x0402000c, 0x8c5cbd00, 0x04020017, 0x8d0e1d06,
- 0x04020005, 0x59c410a3, 0x82081540, 0x00000008,
- 0x480b88a3, 0x59c41006, 0x84081540, 0x480b8806,
- 0x4a038805, 0x04000000, 0x4202d800, 0x00000001,
- 0x497b5010, 0x8d0e1d18, 0x04020005, 0x4803c856,
- 0x850e1d06, 0x0201f800, 0x0010412b, 0x0201f800,
- 0x00103ae4, 0x8c5cbd3c, 0x04020866, 0x8c5cbd00,
- 0x04000043, 0x42000000, 0x0010cf8b, 0x0201f800,
- 0x0010bfb3, 0x4a038805, 0x00000001, 0x4200b000,
- 0x00000352, 0x4201d000, 0x00000064, 0x4c580000,
- 0x0201f800, 0x00106661, 0x0201f800, 0x001018f8,
- 0x5c00b000, 0x04000004, 0x8058b040, 0x040207f6,
- 0x0401f004, 0x4a038805, 0x00000001, 0x0401f02c,
- 0x59c40006, 0x84000500, 0x48038806, 0x59a80878,
+ 0x00020401, 0x5c025800, 0x0201f800, 0x001005aa,
+ 0x0201f800, 0x00020afe, 0x59c80000, 0x82000540,
+ 0x00001200, 0x48039000, 0x850e1d1c, 0x5c026000,
+ 0x5c025800, 0x5c007800, 0x1c01f000, 0x40325800,
+ 0x0201f800, 0x001005aa, 0x0401f7f9, 0x59300024,
+ 0x48025811, 0x59300025, 0x48025812, 0x59300a22,
+ 0x8c040d0c, 0x04020007, 0x5930001f, 0x59300a20,
+ 0x800408e0, 0x80040540, 0x5930081e, 0x0401f006,
+ 0x5930081f, 0x59300220, 0x800408e0, 0x80040d40,
+ 0x5930001e, 0x9c0001c0, 0x9c0409c0, 0x48025813,
+ 0x48065814, 0x1c01f000, 0x592c0001, 0x80003540,
+ 0x02000800, 0x0010032f, 0x58180a05, 0x82040d00,
+ 0x000000ff, 0x82040580, 0x0000004a, 0x02020800,
+ 0x0010032f, 0x592c1012, 0x592c1a13, 0x58182206,
+ 0x592c2c13, 0x592c0014, 0x800000e0, 0x80142d40,
+ 0x592c0014, 0x80003920, 0x58184406, 0x58180207,
+ 0x800048e0, 0x80244d40, 0x58180008, 0x48026029,
+ 0x8c20450c, 0x04020009, 0x901c51c0, 0x841401c0,
+ 0x82003d00, 0x0000ffff, 0x80140120, 0x80280540,
+ 0x9c0029c0, 0x0401f003, 0x9c1429c0, 0x841c39c0,
+ 0x480a601e, 0x480e601f, 0x48126420, 0x48126220,
+ 0x48166021, 0x481e6422, 0x48226222, 0x48266023,
+ 0x1c01f000, 0x592c0001, 0x80006540, 0x02000800,
+ 0x0010032f, 0x58300a05, 0x82040d00, 0x000000ff,
+ 0x82040580, 0x0000004a, 0x02020800, 0x0010032f,
+ 0x58302c06, 0x8c142d06, 0x58300206, 0x04000002,
+ 0x80080400, 0x48026420, 0x48026220, 0x58300207,
+ 0x800008e0, 0x80040540, 0x48026023, 0x8c142d0a,
+ 0x04020004, 0x592c0012, 0x80080400, 0x4802601e,
+ 0x82142d00, 0x00000003, 0x58303207, 0x82140580,
+ 0x00000002, 0x04000011, 0x82140580, 0x00000001,
+ 0x04000009, 0x40080800, 0x82180400, 0x00000008,
+ 0x40001000, 0x0201f800, 0x00106fe1, 0x40042000,
+ 0x0401f006, 0x40080800, 0x40181000, 0x0201f800,
+ 0x00106fe1, 0x40042000, 0x4c100000, 0x0401fe6b,
+ 0x02000800, 0x0010032f, 0x5c002000, 0x50200000,
+ 0x80004540, 0x0400005b, 0x58300a05, 0x82040d00,
+ 0x000000ff, 0x82040580, 0x0000004a, 0x04020002,
+ 0x80204000, 0x50200000, 0x80000540, 0x0400000b,
+ 0x80301400, 0x58080002, 0x80102480, 0x0400101e,
+ 0x801021c0, 0x04000009, 0x80285040, 0x04000049,
+ 0x80204000, 0x0401f7f4, 0x58300001, 0x80006540,
+ 0x04000044, 0x0401f7e1, 0x80285040, 0x04000041,
+ 0x80204000, 0x50200000, 0x80000540, 0x0402000a,
+ 0x58300001, 0x80006540, 0x0400003a, 0x58300205,
+ 0x82004d00, 0x0000000f, 0x82244400, 0x00100f3c,
+ 0x50204000, 0x592c0209, 0x8400051e, 0x48025a09,
+ 0x0401f011, 0x80102080, 0x80102000, 0x48126011,
+ 0x4813c857, 0x58080802, 0x40100000, 0x80042480,
+ 0x02001800, 0x0010032f, 0x58080000, 0x80102400,
+ 0x4812600f, 0x4813c857, 0x592c0209, 0x8400055e,
+ 0x48025a09, 0x59300008, 0x8400052c, 0x48026008,
+ 0x592c1001, 0x58080406, 0x82000500, 0x00000003,
+ 0x82000580, 0x00000001, 0x04020014, 0x599c0019,
+ 0x8c00050c, 0x04020011, 0x82280580, 0x00000001,
+ 0x04020003, 0x59300811, 0x0401f008, 0x80280840,
+ 0x58080207, 0x40001000, 0x0201f800, 0x00106fe1,
+ 0x59300011, 0x80040c00, 0x48066012, 0x59300008,
+ 0x8400056c, 0x48026008, 0x80000580, 0x0401f003,
+ 0x82000540, 0x00000001, 0x1c01f000, 0x592c6801,
+ 0x803469c0, 0x0400001a, 0x592c0205, 0x82000500,
+ 0x000000ff, 0x82000580, 0x00000072, 0x04020003,
+ 0x592c000e, 0x80102480, 0x58347802, 0x58347406,
+ 0x82380500, 0x00000003, 0x0c01f001, 0x001011ea,
+ 0x001011e7, 0x001011ed, 0x001011ef, 0x803c00c6,
+ 0x80102400, 0x0401f004, 0x803c00c6, 0x80102480,
+ 0x04001003, 0x80000580, 0x1c01f000, 0x82000540,
+ 0x00000001, 0x1c01f000, 0x59300c03, 0x82040580,
+ 0x00000052, 0x0402003a, 0x59c80000, 0x82000540,
+ 0x00001200, 0x48039000, 0x850e1d1c, 0x4d2c0000,
+ 0x59325809, 0x42007000, 0x00020c51, 0x58380800,
+ 0x82040580, 0x00000002, 0x0402000c, 0x58386001,
+ 0x58300008, 0x82000580, 0x001010cd, 0x04020007,
+ 0x58300009, 0x812c0580, 0x04020004, 0x4933c857,
+ 0x49786009, 0x0401f020, 0x58386005, 0x40305000,
+ 0x803061c0, 0x0400001c, 0x58300008, 0x82000580,
+ 0x001010cd, 0x04020004, 0x58300009, 0x812c0580,
+ 0x04000004, 0x40305000, 0x58306000, 0x0401f7f5,
+ 0x4933c856, 0x40280000, 0x80300580, 0x58300000,
+ 0x04000006, 0x48005000, 0x800001c0, 0x04020007,
+ 0x48287004, 0x0401f005, 0x800001c0, 0x04020002,
+ 0x48007004, 0x48007005, 0x40325800, 0x0201f800,
+ 0x001005aa, 0x5c025800, 0x0401f011, 0x59300a03,
+ 0x82040580, 0x00000001, 0x0402000d, 0x42001000,
+ 0x0010d471, 0x50081000, 0x58080002, 0x82000580,
+ 0x00000100, 0x04000006, 0x5808000b, 0x81300580,
+ 0x04020003, 0x4933c856, 0x4978100b, 0x59300004,
+ 0x84000520, 0x48026004, 0x1c01f000, 0x4803c856,
+ 0x42000800, 0x0000003c, 0x48079000, 0x59c80000,
+ 0x80040500, 0x040207fe, 0x497b9005, 0x4a039035,
+ 0x00880200, 0x59a80013, 0x800000e0, 0x4803900e,
+ 0x4a039011, 0x0000002c, 0x4a03900f, 0x00111d44,
+ 0x4a039010, 0x00111d44, 0x4a039015, 0x0000007f,
+ 0x4a03900d, 0x00000040, 0x4a039000, 0x00001600,
+ 0x1c01f000, 0x59c80007, 0x8c000508, 0x040208c9,
+ 0x59c80800, 0x8c040d16, 0x04020004, 0x82000500,
+ 0x00000006, 0x0c01f005, 0x4807c857, 0x82000500,
+ 0x0000000e, 0x0c01f001, 0x0010127c, 0x0010127a,
+ 0x0010603d, 0x0010127a, 0x0010127e, 0x0010127a,
+ 0x0010127e, 0x0010127e, 0x0010127a, 0x0010127a,
+ 0x0010127a, 0x0010127a, 0x0010127e, 0x0010127a,
+ 0x0010127e, 0x0010127a, 0x0201f800, 0x0010032f,
+ 0x4803c857, 0x1c01f000, 0x59c8080c, 0x4807c857,
+ 0x82040500, 0x00006000, 0x04000004, 0x0201f800,
+ 0x0010c4c5, 0x0401f006, 0x82040500, 0x007f0000,
+ 0x04000006, 0x0201f800, 0x0010c497, 0x0201f800,
+ 0x001074f5, 0x0401f03c, 0x82040500, 0x00000014,
+ 0x04000014, 0x0201f800, 0x0010c4f4, 0x836c0580,
+ 0x00000003, 0x0400000d, 0x0201f800, 0x001052aa,
+ 0x04000004, 0x0201f800, 0x001041f5, 0x0401f007,
+ 0x4a03501a, 0x00000001, 0x4202d800, 0x00000001,
+ 0x0201f800, 0x00105204, 0x0401f828, 0x0401f026,
+ 0x82040500, 0x00001c00, 0x04000005, 0x0201f800,
+ 0x0010c4d3, 0x0401f821, 0x0401f01f, 0x82040500,
+ 0x00000140, 0x04000005, 0x0201f800, 0x0010c4e6,
+ 0x0401f81a, 0x0401f018, 0x82040500, 0x00008000,
+ 0x04000015, 0x0201f800, 0x001052aa, 0x0400000f,
+ 0x59c400a4, 0x82000500, 0x0000000f, 0x82000580,
+ 0x0000000b, 0x04020009, 0x4c040000, 0x0201f800,
+ 0x00104211, 0x42000000, 0x0000001e, 0x80000040,
+ 0x040207ff, 0x5c000800, 0x0201f800, 0x0010c4be,
+ 0x0401f802, 0x1c01f000, 0x4c0c0000, 0x4c100000,
+ 0x4c140000, 0x0201f800, 0x00100cd5, 0x5c002800,
+ 0x5c002000, 0x5c001800, 0x1c01f000, 0x4803c856,
+ 0x59a80804, 0x59a80026, 0x82000500, 0xfffff000,
+ 0x80040540, 0x48035026, 0x59a8002a, 0x82000500,
+ 0xfffff000, 0x80040540, 0x4803502a, 0x48078882,
+ 0x82041c00, 0x0000000f, 0x800c1908, 0x820c1c00,
+ 0x00000004, 0x400c2000, 0x901029c0, 0x82040480,
+ 0x000001e4, 0x04021005, 0x42001000, 0x00000008,
+ 0x801020c6, 0x0401f031, 0x82040480, 0x00000230,
+ 0x04021009, 0x42001000, 0x00000007, 0x801000c2,
+ 0x800000c2, 0x80100400, 0x80100400, 0x80102400,
+ 0x0401f026, 0x82040480, 0x00000298, 0x04021008,
+ 0x42001000, 0x00000006, 0x801000c2, 0x800000c2,
+ 0x80100400, 0x80102400, 0x0401f01c, 0x82040480,
+ 0x00000328, 0x04021007, 0x42001000, 0x00000005,
+ 0x801000c2, 0x800000c2, 0x80102400, 0x0401f013,
+ 0x82040480, 0x00000404, 0x04021005, 0x42001000,
+ 0x00000004, 0x801020c4, 0x0401f00c, 0x82040480,
+ 0x0000056c, 0x04021006, 0x42001000, 0x00000003,
+ 0x801000c2, 0x80102400, 0x0401f004, 0x42001000,
+ 0x00000002, 0x801020c2, 0x82100480, 0x00000110,
+ 0x80000080, 0x80002000, 0x800800d0, 0x80140540,
+ 0x80100540, 0x48039035, 0x48035083, 0x1c01f000,
+ 0x59c80815, 0x0201f800, 0x00100324, 0x40680800,
+ 0x4807c857, 0x82040d00, 0x0000007c, 0x48079000,
+ 0x59c80000, 0x80040500, 0x040207fe, 0x8c040d04,
+ 0x04000003, 0x59c80035, 0x48039035, 0x59c80000,
+ 0x82000540, 0x00001200, 0x48039000, 0x1c01f000,
+ 0x4803c856, 0x497b88a9, 0x4a038807, 0x00000001,
+ 0x497b8807, 0x59c40005, 0x48038805, 0x0201f800,
+ 0x0010188e, 0x4201d000, 0x000001f4, 0x0201f800,
+ 0x001069c8, 0x497b880e, 0x4200b000, 0x000001f4,
+ 0x42000000, 0x00000001, 0x42000800, 0x00000014,
+ 0x0201f800, 0x001019b7, 0x42000800, 0x00000014,
+ 0x0201f800, 0x001019af, 0x8c040d00, 0x04000005,
+ 0x8058b040, 0x040207f3, 0x0201f800, 0x0010032f,
+ 0x4200b000, 0x00000032, 0x42000000, 0x00000001,
+ 0x42000800, 0x000000b4, 0x0201f800, 0x001019b7,
+ 0x42000800, 0x000000b4, 0x0201f800, 0x001019af,
+ 0x8c040d00, 0x04000005, 0x8058b040, 0x040207f3,
+ 0x0201f800, 0x0010032f, 0x59c40005, 0x48038805,
+ 0x42000000, 0x00000083, 0x59e00803, 0x82040d00,
+ 0x00030000, 0x82040d80, 0x00020000, 0x04020003,
+ 0x42000000, 0x00000089, 0x800008d0, 0x4a03504a,
+ 0x00008900, 0x4a03504b, 0x00008900, 0x4807504c,
+ 0x42000800, 0x000000e0, 0x0201f800, 0x001019b7,
+ 0x42000800, 0x000000f4, 0x0201f800, 0x001019af,
+ 0x82040500, 0xffffffd1, 0x82000540, 0x00000002,
+ 0x42000800, 0x000000f4, 0x0201f800, 0x001019b7,
+ 0x42000800, 0x000000a0, 0x0201f800, 0x001019af,
+ 0x82040540, 0x00000001, 0x42000800, 0x000000a0,
+ 0x0201f800, 0x001019b7, 0x42000800, 0x00000000,
+ 0x0201f800, 0x001019af, 0x82040540, 0x00000001,
+ 0x42000800, 0x00000000, 0x0201f800, 0x001019b7,
+ 0x4201d000, 0x0001d4c0, 0x0201f800, 0x001069c8,
+ 0x0401fa80, 0x4a0388a7, 0x0000f7f7, 0x4a0388a3,
+ 0x8000403c, 0x4a0388ae, 0x000061a8, 0x4a038801,
+ 0x00032063, 0x4a038810, 0x00410108, 0x4a038811,
+ 0x00520608, 0x4a038812, 0x00450320, 0x4a038813,
+ 0x00440405, 0x4a03881c, 0x004132e1, 0x4a03881d,
+ 0x004001fe, 0x4a038850, 0x80000108, 0x4a038860,
+ 0x00000008, 0x4a038870, 0x00000008, 0x4a038851,
+ 0x80000508, 0x4a038861, 0x00800000, 0x4a038871,
+ 0x00800000, 0x4a038852, 0x80000708, 0x4a038862,
+ 0x00800000, 0x4a038872, 0x00800000, 0x4a038853,
+ 0x80000608, 0x497b8863, 0x4a038873, 0x00800000,
+ 0x4a038882, 0x00000840, 0x4a0388a5, 0x000000fe,
+ 0x4a0388a6, 0x0000001e, 0x4a0388b0, 0x00007530,
+ 0x4a038802, 0x0000ffff, 0x4a038806, 0xc0e00800,
+ 0x1c01f000, 0x850e1d4e, 0x42000800, 0x00000040,
+ 0x0201f800, 0x001019af, 0x82040500, 0xffffffaf,
+ 0x82000540, 0x00000000, 0x42000800, 0x00000040,
+ 0x0201f800, 0x001019b7, 0x42000800, 0x000000f4,
+ 0x0201f800, 0x001019af, 0x4c040000, 0x40040000,
+ 0x84000548, 0x42000800, 0x000000f4, 0x0201f800,
+ 0x001019b7, 0x42000800, 0x00000000, 0x0201f800,
+ 0x001019af, 0x82040500, 0xffffffc1, 0x82000540,
+ 0x00000038, 0x42000800, 0x00000000, 0x0201f800,
+ 0x001019b7, 0x5c000000, 0x42000800, 0x000000f4,
+ 0x0201f000, 0x001019b7, 0x59c40805, 0x59c40006,
+ 0x80040d00, 0x02000800, 0x0010032f, 0x82040500,
+ 0x00e00800, 0x04020004, 0x8c040d3e, 0x04020900,
+ 0x0401f007, 0x82040500, 0x00800800, 0x02020800,
+ 0x00100324, 0x0201f800, 0x0010032f, 0x4c5c0000,
+ 0x4c600000, 0x59c4b805, 0x485fc857, 0x59c40006,
+ 0x8c000500, 0x04000003, 0x8c5cbd00, 0x040200a4,
+ 0x0201f800, 0x001052aa, 0x04000021, 0x0201f800,
+ 0x001052c6, 0x0400001e, 0x59c40005, 0x82000500,
+ 0x000000c0, 0x04000054, 0x0201f800, 0x001052d5,
+ 0x04020051, 0x59c40006, 0x82000500, 0x000000f0,
+ 0x04020004, 0x4a038805, 0x000000c0, 0x0401f04a,
+ 0x59a8001b, 0x84000506, 0x4803501b, 0x42006000,
+ 0xff203fff, 0x42006800, 0x40000000, 0x0201f800,
+ 0x001043b7, 0x42000800, 0x00000010, 0x42001000,
+ 0x001042da, 0x0201f800, 0x001069c0, 0x8c5cbd34,
+ 0x04020039, 0x4a035019, 0x0000aaaa, 0x59c40005,
+ 0x8c00050c, 0x04020012, 0x8c00050e, 0x0402001c,
+ 0x8c00050a, 0x04020026, 0x8c000508, 0x0400000b,
+ 0x59a80017, 0x82000580, 0x00000009, 0x04020007,
+ 0x42000000, 0x0010d48e, 0x0201f800, 0x0010c50a,
+ 0x0201f800, 0x001054ec, 0x0401f067, 0x42000000,
+ 0x0010d49c, 0x0201f800, 0x0010c50a, 0x41781800,
+ 0x42002000, 0x00000001, 0x0201f800, 0x00101cb4,
+ 0x4a03501a, 0x00000000, 0x0401f014, 0x42000000,
+ 0x0010d49d, 0x0201f800, 0x0010c50a, 0x41781800,
+ 0x42002000, 0x00000002, 0x0201f800, 0x00101cb4,
+ 0x4a03501a, 0x00000002, 0x0401f008, 0x42000000,
+ 0x0010d490, 0x0201f800, 0x0010c50a, 0x0201f800,
+ 0x0010547a, 0x0401f048, 0x0201f800, 0x00105557,
+ 0x0401f045, 0x8c5cbd34, 0x04000041, 0x59c40005,
+ 0x8c00053a, 0x04020005, 0x42000000, 0x0010d484,
+ 0x0201f800, 0x0010c50a, 0x4a038805, 0x20000000,
+ 0x0201f800, 0x001052aa, 0x04020015, 0x4a038805,
+ 0x04000000, 0x59c418a8, 0x42002000, 0x00000000,
+ 0x0201f800, 0x00101cb4, 0x0201f800, 0x001052c6,
+ 0x04020008, 0x4a03501a, 0x00000001, 0x4202d800,
+ 0x00000001, 0x0201f800, 0x00105204, 0x0401f071,
+ 0x41780000, 0x0201f800, 0x0010527b, 0x0201f800,
+ 0x00101aab, 0x4000c000, 0x0201f800, 0x001019d6,
+ 0x836c1580, 0x00000004, 0x0402000c, 0x8c5cbd00,
+ 0x04020017, 0x8d0e1d06, 0x04020005, 0x59c410a3,
+ 0x82081540, 0x00000008, 0x480b88a3, 0x59c41006,
+ 0x84081540, 0x480b8806, 0x4a038805, 0x04000000,
+ 0x4202d800, 0x00000001, 0x497b5016, 0x8d0e1d18,
+ 0x04020005, 0x4803c856, 0x850e1d06, 0x0201f800,
+ 0x00104216, 0x0201f800, 0x00103bce, 0x8c5cbd3c,
+ 0x0402086a, 0x8c5cbd00, 0x04000047, 0x42000000,
+ 0x0010d5a6, 0x0201f800, 0x0010c50a, 0x4a038805,
+ 0x00000001, 0x4200b000, 0x00000352, 0x4201d000,
+ 0x00000064, 0x4c580000, 0x0201f800, 0x001069c8,
+ 0x0201f800, 0x00101966, 0x5c00b000, 0x04000004,
+ 0x8058b040, 0x040207f6, 0x0401f005, 0x485bc857,
+ 0x4a038805, 0x00000001, 0x0401f02f, 0x485bc857,
+ 0x59c40006, 0x84000500, 0x48038806, 0x59a80886,
0x8c040d3e, 0x04000005, 0x82040d40, 0x0000000b,
- 0x48075078, 0x850e1d48, 0x0201f800, 0x001071b4,
+ 0x48075086, 0x850e1d48, 0x0201f800, 0x00107523,
0x497b8880, 0x59c4000d, 0x8c000506, 0x04000006,
- 0x42002000, 0x00000005, 0x0201f800, 0x00105408,
+ 0x42002000, 0x00000005, 0x0201f800, 0x001055b7,
0x0401f005, 0x42002000, 0x00000006, 0x0201f800,
- 0x00105408, 0x59c400a3, 0x82000500, 0xfcf8ffff,
- 0x480388a3, 0x4a035058, 0x00000002, 0x4202d800,
- 0x00000004, 0x4a038805, 0x00000001, 0x0201f800,
- 0x00100455, 0x0401fb7b, 0x497b5036, 0x4a035043,
- 0x00000001, 0x0201f800, 0x00110d6d, 0x825cbd00,
- 0xbbfffffe, 0x485f8805, 0x5c00c000, 0x5c00b800,
- 0x1c01f000, 0x4d180000, 0x59c41004, 0x480bc857,
- 0x8c081500, 0x04000006, 0x4803c856, 0x497b2807,
- 0x0201f800, 0x0010727a, 0x0401f009, 0x82080500,
- 0x000001f0, 0x04000006, 0x4803c856, 0x0201f800,
- 0x001074b6, 0x02020800, 0x001072a2, 0x4a038805,
- 0x80000000, 0x5c023000, 0x1c01f000, 0x59c408a3,
- 0x4807c857, 0x84040d40, 0x480788a3, 0x1c01f000,
- 0x4d900000, 0x4dd00000, 0x4da40000, 0x4d140000,
- 0x4a038805, 0x40000000, 0x42000000, 0x0010ce80,
- 0x0201f800, 0x0010bfb3, 0x0201f800, 0x00106e41,
- 0x59c41004, 0x8c081500, 0x04000055, 0x598e600f,
- 0x497b2807, 0x813261c0, 0x04000032, 0x59300403,
- 0x82000580, 0x00000032, 0x0402002e, 0x5930001d,
- 0x48038833, 0x4a038807, 0x00018000, 0x4201d000,
- 0x00000002, 0x0201f800, 0x00106661, 0x497b8807,
- 0x4201d000, 0x00000002, 0x0201f800, 0x00106661,
- 0x0201f800, 0x001070de, 0x4201d000, 0x00007530,
- 0x0201f800, 0x00106661, 0x59c408a4, 0x82040d00,
- 0x0000000f, 0x82040d80, 0x00000000, 0x04000005,
- 0x42000000, 0x00200000, 0x0201f800, 0x0010194e,
- 0x0201f800, 0x00106d91, 0x59300009, 0x80000540,
- 0x02000800, 0x0010032e, 0x40025800, 0x4a025a05,
- 0x00000103, 0x5931d82a, 0x58ef400a, 0x58ec0008,
- 0x0801f800, 0x0201f800, 0x00020b9d, 0x0401f047,
- 0x598c0011, 0x82001c80, 0x000000c8, 0x04021010,
- 0x80000000, 0x48031811, 0x59c400a4, 0x82000500,
- 0x0000000f, 0x82000580, 0x00000002, 0x04020005,
- 0x42000000, 0x00200000, 0x0201f800, 0x0010194e,
- 0x0201f800, 0x001065fd, 0x0401f034, 0x4933c857,
- 0x0201f800, 0x001070de, 0x813261c0, 0x0400002f,
- 0x4a026203, 0x00000001, 0x42027000, 0x00000027,
- 0x0201f800, 0x00020bc1, 0x0401f028, 0x0201f800,
- 0x001074b6, 0x04000025, 0x0201f800, 0x001074f6,
- 0x0201f800, 0x00106628, 0x59926004, 0x813261c0,
- 0x04000013, 0x42001800, 0x000000c8, 0x0201f800,
- 0x001074aa, 0x0402000e, 0x59c400a4, 0x82000500,
- 0x0000000f, 0x82000580, 0x00000002, 0x04020005,
- 0x42000000, 0x00200000, 0x0201f800, 0x0010194e,
- 0x0201f800, 0x00106602, 0x0401f00c, 0x4933c857,
- 0x0201f800, 0x0010707a, 0x813261c0, 0x04000007,
- 0x42027000, 0x0000004f, 0x4a026203, 0x00000003,
- 0x0201f800, 0x00020bc1, 0x5c022800, 0x5c034800,
- 0x5c03a000, 0x5c032000, 0x0201f000, 0x00106e2e,
- 0x40680000, 0x810c0d80, 0x8c040d0e, 0x04000053,
- 0x4803c857, 0x8d0e1d0e, 0x04000023, 0x850e1d0e,
- 0x497b5058, 0x42000000, 0x0010ce67, 0x0201f800,
- 0x0010bfb3, 0x0201f800, 0x0010c067, 0x42001000,
- 0x00008011, 0x59c40001, 0x82000500, 0x00018000,
- 0x82001d80, 0x00000000, 0x04000009, 0x82001d80,
- 0x00008000, 0x04000009, 0x82001d80, 0x00010000,
- 0x04000009, 0x0201f800, 0x0010032e, 0x42001800,
- 0x00000000, 0x0401f006, 0x42001800, 0x00000001,
- 0x0401f003, 0x42001800, 0x00000003, 0x0201f000,
- 0x001039ac, 0x850e1d4e, 0x59a80858, 0x800409c0,
- 0x04020007, 0x59c4000d, 0x8c000520, 0x04000004,
- 0x42001800, 0x00000003, 0x0401f002, 0x40041800,
- 0x0201f800, 0x0010c04b, 0x42001000, 0x00008012,
- 0x59a82878, 0x8c142d3e, 0x04000006, 0x82142d00,
- 0x00000003, 0x0201f800, 0x001039ad, 0x0401f003,
- 0x0201f800, 0x001039ac, 0x0201f800, 0x00100455,
- 0x0201f800, 0x0010c0bb, 0x04020010, 0x4d200000,
- 0x42024000, 0x000000ff, 0x0401f85a, 0x5c024000,
- 0x4d400000, 0x4d3c0000, 0x42028000, 0x00000028,
- 0x42027800, 0x00000008, 0x0201f800, 0x0010fef2,
- 0x5c027800, 0x5c028000, 0x1c01f000, 0x4803c857,
- 0x82000400, 0x00102116, 0x50000800, 0x82040d00,
- 0x000000ff, 0x1c01f000, 0x4803c856, 0x4c580000,
- 0x4200b000, 0x00000010, 0x497b88ac, 0x497b88ad,
- 0x8058b040, 0x040207fe, 0x5c00b000, 0x1c01f000,
- 0x40680800, 0x4807c857, 0x80041908, 0x480f88ac,
- 0x82042500, 0x0000000f, 0x82102400, 0x0010c0fc,
- 0x50102000, 0x59c400ad, 0x80100540, 0x480f88ac,
- 0x480388ad, 0x0201f800, 0x0010c0e8, 0x04000002,
- 0x4807500f, 0x1c01f000, 0x4807c857, 0x80041908,
- 0x480f88ac, 0x82042500, 0x0000000f, 0x82102400,
- 0x0010c0fc, 0x50102000, 0x59c400ad, 0x80101500,
- 0x04000004, 0x80100580, 0x480f88ac, 0x480388ad,
- 0x1c01f000, 0x4803c857, 0x4c080000, 0x4c040000,
- 0x4c000000, 0x59c40892, 0x4807c857, 0x80041580,
- 0x04000010, 0x80041480, 0x04021007, 0x80081080,
- 0x80081000, 0x4008b000, 0x42000000, 0x00000201,
- 0x0401f004, 0x4008b000, 0x42000000, 0x00000210,
- 0x48038886, 0x8058b040, 0x040207fe, 0x497b8886,
- 0x5c000000, 0x5c000800, 0x5c001000, 0x1c01f000,
- 0x4803c856, 0x8d0e1d20, 0x04000005, 0x42028000,
- 0x0000002e, 0x0201f000, 0x0010b198, 0x1c01f000,
- 0x0401f803, 0x40058800, 0x1c01f000, 0x59a80870,
- 0x82040500, 0x00000010, 0x04000004, 0x42000800,
- 0x00000002, 0x0401f010, 0x82040500, 0x00000020,
- 0x42000800, 0x00000002, 0x0402000b, 0x59c80835,
- 0x82040d00, 0x00001f00, 0x80040910, 0x80040800,
- 0x59a8006d, 0x80000540, 0x04000003, 0x42000800,
- 0x0000025a, 0x4807c857, 0x1c01f000, 0x0401f807,
- 0x42018800, 0x00000001, 0x04000003, 0x42018800,
- 0x00000000, 0x1c01f000, 0x4c000000, 0x59a80037,
- 0x4803c857, 0x82000580, 0x00000000, 0x5c000000,
+ 0x001055b7, 0x59c400a3, 0x82000500, 0xfcf8ffff,
+ 0x480388a3, 0x4a035066, 0x00000002, 0x4202d800,
+ 0x00000004, 0x4a03503e, 0x00000000, 0x4a038805,
+ 0x00000001, 0x0201f800, 0x0010045e, 0x0401fb87,
+ 0x497b503c, 0x4a035049, 0x00000001, 0x0201f800,
+ 0x001114ae, 0x825cbd00, 0xbbfffffe, 0x485f8805,
+ 0x5c00c000, 0x5c00b800, 0x1c01f000, 0x4d180000,
+ 0x59c41004, 0x480bc857, 0x8c081500, 0x04000006,
+ 0x4803c856, 0x497b2807, 0x0201f800, 0x001075e8,
+ 0x0401f009, 0x82080500, 0x000001f0, 0x04000006,
+ 0x4803c856, 0x0201f800, 0x00107824, 0x02020800,
+ 0x00107610, 0x4a038805, 0x80000000, 0x5c023000,
+ 0x1c01f000, 0x59c408a3, 0x4807c857, 0x84040d40,
+ 0x480788a3, 0x1c01f000, 0x4d900000, 0x4dd00000,
+ 0x4da40000, 0x4d140000, 0x4a038805, 0x40000000,
+ 0x42000000, 0x0010d496, 0x0201f800, 0x0010c50a,
+ 0x0201f800, 0x001071b0, 0x59c41004, 0x8c081500,
+ 0x04000055, 0x598e600f, 0x497b2807, 0x813261c0,
+ 0x04000032, 0x59300403, 0x82000580, 0x00000032,
+ 0x0402002e, 0x5930001d, 0x48038833, 0x4a038807,
+ 0x00018000, 0x4201d000, 0x00000002, 0x0201f800,
+ 0x001069c8, 0x497b8807, 0x4201d000, 0x00000002,
+ 0x0201f800, 0x001069c8, 0x0201f800, 0x0010744d,
+ 0x4201d000, 0x00007530, 0x0201f800, 0x001069c8,
+ 0x59c408a4, 0x82040d00, 0x0000000f, 0x82040d80,
+ 0x00000000, 0x04000005, 0x42000000, 0x00200000,
+ 0x0201f800, 0x001019bc, 0x0201f800, 0x001070fc,
+ 0x59300009, 0x80000540, 0x02000800, 0x0010032f,
+ 0x40025800, 0x4a025a05, 0x00000103, 0x5931d82a,
+ 0x58ef400a, 0x58ec0008, 0x0801f800, 0x0201f800,
+ 0x00020afe, 0x0401f047, 0x598c0011, 0x82001c80,
+ 0x000000c8, 0x04021010, 0x80000000, 0x48031811,
+ 0x59c400a4, 0x82000500, 0x0000000f, 0x82000580,
+ 0x00000002, 0x04020005, 0x42000000, 0x00200000,
+ 0x0201f800, 0x001019bc, 0x0201f800, 0x0010696e,
+ 0x0401f034, 0x4933c857, 0x0201f800, 0x0010744d,
+ 0x813261c0, 0x0400002f, 0x4a026203, 0x00000001,
+ 0x42027000, 0x00000027, 0x0201f800, 0x00020b22,
+ 0x0401f028, 0x0201f800, 0x00107824, 0x04000025,
+ 0x0201f800, 0x00107864, 0x0201f800, 0x00106998,
+ 0x59926004, 0x813261c0, 0x04000013, 0x42001800,
+ 0x000000c8, 0x0201f800, 0x00107818, 0x0402000e,
+ 0x59c400a4, 0x82000500, 0x0000000f, 0x82000580,
+ 0x00000002, 0x04020005, 0x42000000, 0x00200000,
+ 0x0201f800, 0x001019bc, 0x0201f800, 0x00106973,
+ 0x0401f00c, 0x4933c857, 0x0201f800, 0x001073e9,
+ 0x813261c0, 0x04000007, 0x42027000, 0x0000004f,
+ 0x4a026203, 0x00000003, 0x0201f800, 0x00020b22,
+ 0x5c022800, 0x5c034800, 0x5c03a000, 0x5c032000,
+ 0x0201f000, 0x0010719d, 0x40680000, 0x810c0d80,
+ 0x8c040d0e, 0x04000057, 0x4803c857, 0x8d0e1d0e,
+ 0x04000024, 0x850e1d0e, 0x497b5066, 0x42000000,
+ 0x0010d47d, 0x0201f800, 0x0010c50a, 0x0201f800,
+ 0x0010c5be, 0x42001000, 0x00008011, 0x497b505b,
+ 0x59c40001, 0x82000500, 0x00018000, 0x82001d80,
+ 0x00000000, 0x04000009, 0x82001d80, 0x00008000,
+ 0x04000009, 0x82001d80, 0x00010000, 0x04000009,
+ 0x0201f800, 0x0010032f, 0x42001800, 0x00000000,
+ 0x0401f006, 0x42001800, 0x00000001, 0x0401f003,
+ 0x42001800, 0x00000003, 0x0201f000, 0x00103a4e,
+ 0x850e1d4e, 0x59a80866, 0x800409c0, 0x04020007,
+ 0x59c4000d, 0x8c000520, 0x04000004, 0x42001800,
+ 0x00000003, 0x0401f002, 0x40041800, 0x0201f800,
+ 0x0010c5a2, 0x4c0c0000, 0x42001000, 0x00008012,
+ 0x5c001800, 0x59a82886, 0x8c142d3e, 0x04000006,
+ 0x82142d00, 0x00000003, 0x0201f800, 0x00103a4f,
+ 0x0401f003, 0x0201f800, 0x00103a4e, 0x0201f800,
+ 0x0010045e, 0x0201f800, 0x0010c612, 0x04020010,
+ 0x4d200000, 0x42024000, 0x000000ff, 0x0401f863,
+ 0x5c024000, 0x4d400000, 0x4d3c0000, 0x42028000,
+ 0x00000028, 0x42027800, 0x00000008, 0x0201f800,
+ 0x001105fb, 0x5c027800, 0x5c028000, 0x1c01f000,
+ 0x80000540, 0x040007fe, 0x4d3c0000, 0x42027800,
+ 0x00000001, 0x0201f800, 0x0010a641, 0x5c027800,
+ 0x1c01f000, 0x4803c857, 0x82000400, 0x001021a6,
+ 0x50000800, 0x82040d00, 0x000000ff, 0x1c01f000,
+ 0x4803c856, 0x4c580000, 0x4200b000, 0x00000010,
+ 0x497b88ac, 0x497b88ad, 0x8058b040, 0x040207fe,
+ 0x5c00b000, 0x1c01f000, 0x40680800, 0x4807c857,
+ 0x80041908, 0x480f88ac, 0x82042500, 0x0000000f,
+ 0x82102400, 0x0010c69b, 0x50102000, 0x59c400ad,
+ 0x80100540, 0x480f88ac, 0x480388ad, 0x0201f800,
+ 0x0010c63f, 0x04000002, 0x48075015, 0x1c01f000,
+ 0x4807c857, 0x80041908, 0x480f88ac, 0x82042500,
+ 0x0000000f, 0x82102400, 0x0010c69b, 0x50102000,
+ 0x59c400ad, 0x80101500, 0x04000004, 0x80100580,
+ 0x480f88ac, 0x480388ad, 0x1c01f000, 0x4803c857,
+ 0x4c080000, 0x4c040000, 0x4c000000, 0x59c40892,
+ 0x4807c857, 0x80041580, 0x04000010, 0x80041480,
+ 0x04021007, 0x80081080, 0x80081000, 0x4008b000,
+ 0x42000000, 0x00000201, 0x0401f004, 0x4008b000,
+ 0x42000000, 0x00000210, 0x48038886, 0x8058b040,
+ 0x040207fe, 0x497b8886, 0x5c000000, 0x5c000800,
+ 0x5c001000, 0x1c01f000, 0x4803c856, 0x8d0e1d20,
+ 0x04000005, 0x42028000, 0x0000002e, 0x0201f000,
+ 0x0010b65e, 0x1c01f000, 0x0401f803, 0x40058800,
+ 0x1c01f000, 0x59a8087e, 0x82040500, 0x00000010,
+ 0x04000004, 0x42000800, 0x00000002, 0x0401f010,
+ 0x82040500, 0x00000020, 0x42000800, 0x00000002,
+ 0x0402000b, 0x59c80835, 0x82040d00, 0x00001f00,
+ 0x80040910, 0x80040800, 0x59a8007b, 0x80000540,
+ 0x04000003, 0x42000800, 0x0000025a, 0x4807c857,
0x1c01f000, 0x0401f807, 0x42018800, 0x00000001,
0x04000003, 0x42018800, 0x00000000, 0x1c01f000,
- 0x4c000000, 0x59a80037, 0x4803c857, 0x82000580,
- 0x00000001, 0x5c000000, 0x1c01f000, 0x0401f807,
+ 0x4c000000, 0x59a8003d, 0x4803c857, 0x82000580,
+ 0x00000000, 0x5c000000, 0x1c01f000, 0x0401f807,
0x42018800, 0x00000001, 0x04000003, 0x42018800,
- 0x00000000, 0x1c01f000, 0x4c000000, 0x59a80037,
- 0x4803c857, 0x82000580, 0x00000003, 0x5c000000,
+ 0x00000000, 0x1c01f000, 0x4c000000, 0x59a8003d,
+ 0x4803c857, 0x82000580, 0x00000001, 0x5c000000,
0x1c01f000, 0x0401f807, 0x42018800, 0x00000001,
0x04000003, 0x42018800, 0x00000000, 0x1c01f000,
- 0x4c000000, 0x59a80037, 0x82000580, 0x00000002,
- 0x5c000000, 0x1c01f000, 0x4c000000, 0x4c040000,
- 0x4c080000, 0x4c380000, 0x59a8003a, 0x82000c80,
- 0x00000007, 0x02021800, 0x0010032e, 0x0c01f806,
- 0x5c007000, 0x5c001000, 0x5c000800, 0x5c000000,
- 0x1c01f000, 0x00101670, 0x00101683, 0x00101697,
- 0x00101699, 0x001016c1, 0x001016c3, 0x001016c5,
- 0x4803c856, 0x4a03503c, 0x00000000, 0x42000000,
- 0x00000002, 0x0401fa32, 0x42000000, 0x00000002,
- 0x0401f9b5, 0x0401fab1, 0x4803c856, 0x4a03503a,
- 0x00000006, 0x42000800, 0x0000001e, 0x42001000,
- 0x001016c6, 0x0201f000, 0x00106638, 0x497b503f,
- 0x4a035034, 0x00000036, 0x4a035033, 0x0000002a,
- 0x4803c856, 0x4a03503c, 0x00000001, 0x42000000,
- 0x00000002, 0x0401f9a0, 0x4803c856, 0x4a03503a,
+ 0x4c000000, 0x59a8003d, 0x4803c857, 0x82000580,
+ 0x00000003, 0x5c000000, 0x1c01f000, 0x0401f807,
+ 0x42018800, 0x00000001, 0x04000003, 0x42018800,
+ 0x00000000, 0x1c01f000, 0x4c000000, 0x59a8003d,
+ 0x82000580, 0x00000002, 0x5c000000, 0x1c01f000,
+ 0x4c000000, 0x4c040000, 0x4c080000, 0x4c380000,
+ 0x59a80040, 0x82000c80, 0x00000007, 0x02021800,
+ 0x0010032f, 0x0c01f806, 0x5c007000, 0x5c001000,
+ 0x5c000800, 0x5c000000, 0x1c01f000, 0x001016de,
+ 0x001016f1, 0x00101705, 0x00101707, 0x0010172f,
+ 0x00101731, 0x00101733, 0x4803c856, 0x4a035042,
+ 0x00000000, 0x42000000, 0x00000002, 0x0401fa32,
+ 0x42000000, 0x00000002, 0x0401f9b5, 0x0401fab1,
+ 0x4803c856, 0x4a035040, 0x00000006, 0x42000800,
+ 0x0000001e, 0x42001000, 0x00101734, 0x0201f000,
+ 0x001069a8, 0x497b5045, 0x4a03503a, 0x00000036,
+ 0x4a035039, 0x0000002a, 0x4803c856, 0x4a035042,
+ 0x00000001, 0x42000000, 0x00000002, 0x0401f9a0,
+ 0x4803c856, 0x4a035040, 0x00000006, 0x42000800,
+ 0x0000001e, 0x42001000, 0x00101734, 0x0201f000,
+ 0x001069a8, 0x0201f800, 0x0010032f, 0x4a03503a,
+ 0x00000036, 0x4803c856, 0x4a035042, 0x00000003,
+ 0x42000800, 0x00000000, 0x0401faa1, 0x82040d00,
+ 0x00000090, 0x82040580, 0x00000090, 0x04000009,
+ 0x82040580, 0x00000010, 0x04000009, 0x82040580,
+ 0x00000000, 0x04000009, 0x0201f800, 0x0010032f,
+ 0x42000000, 0x00000001, 0x0401f006, 0x42000000,
+ 0x00000000, 0x0401f003, 0x42000000, 0x00000002,
+ 0x0401f977, 0x497b5046, 0x4803c856, 0x4a035040,
0x00000006, 0x42000800, 0x0000001e, 0x42001000,
- 0x001016c6, 0x0201f000, 0x00106638, 0x0201f800,
- 0x0010032e, 0x4a035034, 0x00000036, 0x4803c856,
- 0x4a03503c, 0x00000003, 0x42000800, 0x00000000,
- 0x0401faa1, 0x82040d00, 0x00000090, 0x82040580,
- 0x00000090, 0x04000009, 0x82040580, 0x00000010,
- 0x04000009, 0x82040580, 0x00000000, 0x04000009,
- 0x0201f800, 0x0010032e, 0x42000000, 0x00000001,
- 0x0401f006, 0x42000000, 0x00000000, 0x0401f003,
- 0x42000000, 0x00000002, 0x0401f977, 0x497b5040,
- 0x4803c856, 0x4a03503a, 0x00000006, 0x42000800,
- 0x0000001e, 0x42001000, 0x001016c6, 0x0201f000,
- 0x00106638, 0x0201f800, 0x0010032e, 0x0201f800,
- 0x0010032e, 0x1c01f000, 0x4c000000, 0x4c040000,
- 0x4c080000, 0x4c380000, 0x59a8003c, 0x82000c80,
- 0x00000007, 0x02021800, 0x0010032e, 0x0c01f806,
- 0x5c007000, 0x5c001000, 0x5c000800, 0x5c000000,
- 0x1c01f000, 0x001016dc, 0x001016fb, 0x00101750,
- 0x00101767, 0x0010177e, 0x00101787, 0x00101789,
- 0x0401fa1c, 0x0402001b, 0x59a81042, 0x42000800,
- 0x00000000, 0x0401fa60, 0x82040d00, 0x00000090,
+ 0x00101734, 0x0201f000, 0x001069a8, 0x0201f800,
+ 0x0010032f, 0x0201f800, 0x0010032f, 0x1c01f000,
+ 0x4c000000, 0x4c040000, 0x4c080000, 0x4c380000,
+ 0x59a80042, 0x82000c80, 0x00000007, 0x02021800,
+ 0x0010032f, 0x0c01f806, 0x5c007000, 0x5c001000,
+ 0x5c000800, 0x5c000000, 0x1c01f000, 0x0010174a,
+ 0x00101769, 0x001017be, 0x001017d5, 0x001017ec,
+ 0x001017f5, 0x001017f7, 0x0401fa1c, 0x0402001b,
+ 0x59a81048, 0x42000800, 0x00000000, 0x0401fa60,
+ 0x82040d00, 0x00000090, 0x82040580, 0x00000090,
+ 0x04000009, 0x82040580, 0x00000010, 0x04000008,
+ 0x82040580, 0x00000000, 0x04000007, 0x0201f800,
+ 0x0010032f, 0x84081540, 0x0401f004, 0x84081542,
+ 0x0401f002, 0x84081544, 0x480b5048, 0x4a035040,
+ 0x00000001, 0x0401f003, 0x0401f8ce, 0x0401ff81,
+ 0x1c01f000, 0x0401f890, 0x04000053, 0x0401f9fb,
+ 0x0402002a, 0x42000800, 0x00000000, 0x0401fa40,
+ 0x82040d00, 0x00000090, 0x82040580, 0x00000000,
+ 0x04000045, 0x82040580, 0x00000010, 0x04000006,
+ 0x82040580, 0x00000090, 0x04000009, 0x0201f800,
+ 0x0010032f, 0x59c40801, 0x82040d00, 0x00018000,
+ 0x82040580, 0x00000000, 0x04000037, 0x42000800,
+ 0x00000000, 0x0401fa2a, 0x82040d00, 0x00000090,
+ 0x82040580, 0x00000010, 0x04000006, 0x82040580,
+ 0x00000090, 0x04000006, 0x02020800, 0x0010032f,
+ 0x59a80048, 0x84000542, 0x0401f003, 0x59a80048,
+ 0x84000540, 0x48035048, 0x59a80045, 0x80000000,
+ 0x48035045, 0x82000580, 0x00000005, 0x04000003,
+ 0x0401f862, 0x0401f01f, 0x497b5045, 0x59c40801,
+ 0x82040d00, 0x00018000, 0x82040580, 0x00000000,
+ 0x04000009, 0x82040580, 0x00008000, 0x04000009,
+ 0x82040580, 0x00010000, 0x04000009, 0x0201f800,
+ 0x0010032f, 0x42000000, 0x00000001, 0x0401f006,
+ 0x42000000, 0x00000000, 0x0401f003, 0x42000000,
+ 0x00000002, 0x0401f960, 0x4a035042, 0x00000002,
+ 0x0401f004, 0x4a035040, 0x00000003, 0x0401f002,
+ 0x0401ff40, 0x1c01f000, 0x0401f83b, 0x04000015,
+ 0x59a80039, 0x80000040, 0x48035039, 0x0401f9a3,
+ 0x04020005, 0x4a035040, 0x00000003, 0x497b5041,
+ 0x0401f00c, 0x59a80039, 0x80000540, 0x04020003,
+ 0x0401f8a2, 0x0401f002, 0x0401f84c, 0x0401f82f,
+ 0x497b5045, 0x4a035042, 0x00000001, 0x0401ff29,
+ 0x1c01f000, 0x0401f824, 0x04000015, 0x0401f98f,
+ 0x0402000f, 0x59a80046, 0x80000000, 0x48035046,
+ 0x82000580, 0x00000007, 0x0402000c, 0x4a03503c,
+ 0x0000000a, 0x497b5049, 0x59a80048, 0x8400055e,
+ 0x48035048, 0x4803c857, 0x0401f005, 0x0401f817,
+ 0x4a035042, 0x00000004, 0x0401ff3c, 0x1c01f000,
+ 0x0401f80d, 0x04000007, 0x0401f978, 0x04020003,
+ 0x0401ff19, 0x0401f003, 0x0401f80c, 0x0401ff33,
+ 0x1c01f000, 0x0201f800, 0x0010032f, 0x0201f800,
+ 0x0010032f, 0x59a8003a, 0x80000040, 0x4803503a,
+ 0x04000892, 0x1c01f000, 0x4c040000, 0x42000800,
+ 0x00000000, 0x0401f9ae, 0x82040d00, 0x00000090,
0x82040580, 0x00000090, 0x04000009, 0x82040580,
- 0x00000010, 0x04000008, 0x82040580, 0x00000000,
- 0x04000007, 0x0201f800, 0x0010032e, 0x84081540,
- 0x0401f004, 0x84081542, 0x0401f002, 0x84081544,
- 0x480b5042, 0x4a03503a, 0x00000001, 0x0401f003,
- 0x0401f8ce, 0x0401ff81, 0x1c01f000, 0x0401f890,
- 0x04000053, 0x0401f9fb, 0x0402002a, 0x42000800,
- 0x00000000, 0x0401fa40, 0x82040d00, 0x00000090,
- 0x82040580, 0x00000000, 0x04000045, 0x82040580,
- 0x00000010, 0x04000006, 0x82040580, 0x00000090,
- 0x04000009, 0x0201f800, 0x0010032e, 0x59c40801,
+ 0x00000010, 0x04000009, 0x82040580, 0x00000000,
+ 0x04000009, 0x0201f800, 0x0010032f, 0x42000000,
+ 0x00000002, 0x0401f006, 0x42000000, 0x00000001,
+ 0x0401f003, 0x42000000, 0x00000000, 0x0401f8fe,
+ 0x5c000800, 0x1c01f000, 0x4c040000, 0x59c40801,
0x82040d00, 0x00018000, 0x82040580, 0x00000000,
- 0x04000037, 0x42000800, 0x00000000, 0x0401fa2a,
- 0x82040d00, 0x00000090, 0x82040580, 0x00000010,
- 0x04000006, 0x82040580, 0x00000090, 0x04000006,
- 0x02020800, 0x0010032e, 0x59a80042, 0x84000542,
- 0x0401f003, 0x59a80042, 0x84000540, 0x48035042,
- 0x59a8003f, 0x80000000, 0x4803503f, 0x82000580,
- 0x00000005, 0x04000003, 0x0401f862, 0x0401f01f,
- 0x497b503f, 0x59c40801, 0x82040d00, 0x00018000,
- 0x82040580, 0x00000000, 0x04000009, 0x82040580,
- 0x00008000, 0x04000009, 0x82040580, 0x00010000,
- 0x04000009, 0x0201f800, 0x0010032e, 0x42000000,
- 0x00000001, 0x0401f006, 0x42000000, 0x00000000,
- 0x0401f003, 0x42000000, 0x00000002, 0x0401f960,
- 0x4a03503c, 0x00000002, 0x0401f004, 0x4a03503a,
- 0x00000003, 0x0401f002, 0x0401ff40, 0x1c01f000,
- 0x0401f83b, 0x04000015, 0x59a80033, 0x80000040,
- 0x48035033, 0x0401f9a3, 0x04020005, 0x4a03503a,
- 0x00000003, 0x497b503b, 0x0401f00c, 0x59a80033,
- 0x80000540, 0x04020003, 0x0401f8a2, 0x0401f002,
- 0x0401f84c, 0x0401f82f, 0x497b503f, 0x4a03503c,
- 0x00000001, 0x0401ff29, 0x1c01f000, 0x0401f824,
- 0x04000015, 0x0401f98f, 0x0402000f, 0x59a80040,
- 0x80000000, 0x48035040, 0x82000580, 0x00000007,
- 0x0402000c, 0x4a035036, 0x0000000a, 0x497b5043,
- 0x59a80042, 0x8400055e, 0x48035042, 0x4803c857,
- 0x0401f005, 0x0401f817, 0x4a03503c, 0x00000004,
- 0x0401ff3c, 0x1c01f000, 0x0401f80d, 0x04000007,
- 0x0401f978, 0x04020003, 0x0401ff19, 0x0401f003,
- 0x0401f80c, 0x0401ff33, 0x1c01f000, 0x0201f800,
- 0x0010032e, 0x0201f800, 0x0010032e, 0x59a80034,
- 0x80000040, 0x48035034, 0x04000892, 0x1c01f000,
- 0x4c040000, 0x42000800, 0x00000000, 0x0401f9ae,
- 0x82040d00, 0x00000090, 0x82040580, 0x00000090,
- 0x04000009, 0x82040580, 0x00000010, 0x04000009,
- 0x82040580, 0x00000000, 0x04000009, 0x0201f800,
- 0x0010032e, 0x42000000, 0x00000002, 0x0401f006,
+ 0x04000009, 0x82040580, 0x00008000, 0x04000009,
+ 0x82040580, 0x00010000, 0x04000009, 0x0201f800,
+ 0x0010032f, 0x42000000, 0x00000002, 0x0401f006,
0x42000000, 0x00000001, 0x0401f003, 0x42000000,
- 0x00000000, 0x0401f8fe, 0x5c000800, 0x1c01f000,
- 0x4c040000, 0x59c40801, 0x82040d00, 0x00018000,
- 0x82040580, 0x00000000, 0x04000009, 0x82040580,
- 0x00008000, 0x04000009, 0x82040580, 0x00010000,
- 0x04000009, 0x0201f800, 0x0010032e, 0x42000000,
+ 0x00000000, 0x0401f86a, 0x5c000800, 0x1c01f000,
+ 0x4c040000, 0x59a80045, 0x80000000, 0x48035045,
+ 0x82000580, 0x00000005, 0x04020019, 0x497b5045,
+ 0x59c40801, 0x82040d00, 0x00018000, 0x82040580,
+ 0x00000000, 0x04000009, 0x82040580, 0x00008000,
+ 0x04000009, 0x82040580, 0x00010000, 0x04000009,
+ 0x0201f800, 0x0010032f, 0x42000000, 0x00000002,
+ 0x0401f006, 0x42000000, 0x00000001, 0x0401f003,
+ 0x42000000, 0x00000000, 0x0401f849, 0x42000800,
+ 0x00000000, 0x0401f95a, 0x82040d00, 0x00000090,
+ 0x82040580, 0x00000090, 0x04000009, 0x82040580,
+ 0x00000010, 0x04000009, 0x82040580, 0x00000000,
+ 0x04000009, 0x0201f800, 0x0010032f, 0x42000000,
0x00000002, 0x0401f006, 0x42000000, 0x00000001,
- 0x0401f003, 0x42000000, 0x00000000, 0x0401f86a,
- 0x5c000800, 0x1c01f000, 0x4c040000, 0x59a8003f,
- 0x80000000, 0x4803503f, 0x82000580, 0x00000005,
- 0x04020019, 0x497b503f, 0x59c40801, 0x82040d00,
- 0x00018000, 0x82040580, 0x00000000, 0x04000009,
- 0x82040580, 0x00008000, 0x04000009, 0x82040580,
- 0x00010000, 0x04000009, 0x0201f800, 0x0010032e,
- 0x42000000, 0x00000002, 0x0401f006, 0x42000000,
- 0x00000001, 0x0401f003, 0x42000000, 0x00000000,
- 0x0401f849, 0x42000800, 0x00000000, 0x0401f95a,
- 0x82040d00, 0x00000090, 0x82040580, 0x00000090,
- 0x04000009, 0x82040580, 0x00000010, 0x04000009,
- 0x82040580, 0x00000000, 0x04000009, 0x0201f800,
- 0x0010032e, 0x42000000, 0x00000002, 0x0401f006,
- 0x42000000, 0x00000001, 0x0401f003, 0x42000000,
- 0x00000000, 0x0401f8aa, 0x5c000800, 0x1c01f000,
- 0x4c200000, 0x59a80042, 0x82000500, 0x00007fff,
- 0x02000800, 0x0010032e, 0x59a84041, 0x80204102,
- 0x02001800, 0x0010032e, 0x48235041, 0x80204500,
- 0x040007fa, 0x8c000504, 0x04020007, 0x8c000502,
- 0x04020008, 0x8c000500, 0x04020009, 0x0201f800,
- 0x0010032e, 0x42000000, 0x00000002, 0x0401f006,
- 0x42000000, 0x00000000, 0x0401f003, 0x42000000,
- 0x00000001, 0x0401f810, 0x5c004000, 0x1c01f000,
- 0x04011000, 0x4a03c840, 0x0010caba, 0x4a03c842,
- 0x00000009, 0x40000000, 0x040117ff, 0x4a035041,
- 0x00000004, 0x4a035038, 0x00000000, 0x1c01f000,
- 0x40680000, 0x59a80878, 0x8c040d3e, 0x0402000c,
- 0x59a80847, 0x82040d80, 0x01391077, 0x04020008,
- 0x59e00813, 0x8c040d00, 0x04000005, 0x82000d80,
- 0x00000002, 0x04020002, 0x41780000, 0x59a80847,
- 0x82040d80, 0x015b1077, 0x0402000b, 0x4a03c014,
- 0x00200020, 0x82000d80, 0x00000001, 0x42000800,
- 0x00200000, 0x04000003, 0x42000800, 0x00200020,
- 0x4807c013, 0x800001c0, 0x04000040, 0x82000d80,
- 0x00000001, 0x0402001d, 0x42000800, 0x000000a0,
- 0x0401f8f1, 0x82040540, 0x00000004, 0x42000800,
- 0x000000a0, 0x0401f8f4, 0x42000800, 0x000000c0,
- 0x0401f8e9, 0x82040540, 0x00000020, 0x42000800,
- 0x000000c0, 0x0401f8ec, 0x59c40001, 0x82000500,
- 0xfffe7fff, 0x82000540, 0x00000000, 0x48038801,
- 0x59a80044, 0x80000110, 0x42000800, 0x000000e0,
- 0x0401f8e1, 0x0401f03c, 0x82000d80, 0x00000002,
- 0x02020800, 0x0010032e, 0x42000800, 0x000000a0,
- 0x0401f8d1, 0x82040500, 0xfffffffb, 0x42000800,
- 0x000000a0, 0x0401f8d4, 0x42000800, 0x000000c0,
- 0x0401f8c9, 0x82040500, 0xffffffdf, 0x42000800,
- 0x000000c0, 0x0401f8cc, 0x59c40001, 0x82000500,
- 0xfffe7fff, 0x82000540, 0x00010000, 0x48038801,
- 0x59a80046, 0x80000110, 0x42000800, 0x000000e0,
- 0x0401f8c1, 0x0401f01c, 0x42000800, 0x000000a0,
- 0x0401f8b5, 0x82040540, 0x00000004, 0x42000800,
- 0x000000a0, 0x0401f8b8, 0x42000800, 0x000000c0,
- 0x0401f8ad, 0x82040500, 0xffffffdf, 0x42000800,
- 0x000000c0, 0x0401f8b0, 0x59c40001, 0x82000500,
- 0xfffe7fff, 0x82000540, 0x00008000, 0x48038801,
- 0x59a80045, 0x80000110, 0x42000800, 0x000000e0,
- 0x0401f8a5, 0x1c01f000, 0x40680000, 0x4803c857,
- 0x59a80878, 0x8c040d3e, 0x0402000c, 0x59a80847,
- 0x82040d80, 0x01391077, 0x04020008, 0x59e00813,
- 0x8c040d00, 0x04000005, 0x82000d80, 0x00000002,
- 0x04020002, 0x41780000, 0x4c000000, 0x0401f976,
- 0x5c000000, 0x800001c0, 0x04000026, 0x82000d80,
- 0x00000001, 0x04020010, 0x59a8006d, 0x80000540,
- 0x04000004, 0x42001000, 0x00000000, 0x0401fa87,
- 0x42000800, 0x00000000, 0x0401f87b, 0x82040540,
- 0x00000090, 0x42000800, 0x00000000, 0x0401f87e,
- 0x0401f024, 0x82000d80, 0x00000002, 0x02020800,
- 0x0010032e, 0x59a8006d, 0x80000540, 0x04000004,
- 0x42001000, 0x00010000, 0x0401fa74, 0x42000800,
- 0x00000000, 0x0401f868, 0x82040500, 0xffffff6f,
- 0x42000800, 0x00000000, 0x0401f86b, 0x0401f011,
- 0x59a8006d, 0x80000540, 0x04000004, 0x42001000,
- 0x00008000, 0x0401fa65, 0x42000800, 0x00000000,
- 0x0401f859, 0x82040500, 0xffffff6f, 0x82000540,
- 0x00000010, 0x42000800, 0x00000000, 0x0401f85a,
- 0x0401f145, 0x0401f807, 0x42018800, 0x00000001,
- 0x04000003, 0x42018800, 0x00000000, 0x1c01f000,
- 0x4c580000, 0x4200b000, 0x00000014, 0x8058b040,
- 0x0400002a, 0x59c4000d, 0x8c000520, 0x040207fc,
- 0x0401f83a, 0x59c4000d, 0x8c000520, 0x040207f8,
- 0x59c40808, 0x82040d40, 0x00000100, 0x48078808,
- 0x4200b000, 0x000000c8, 0x8058b040, 0x040207ff,
- 0x4200b000, 0x00000014, 0x8058b040, 0x04000017,
- 0x59c4000d, 0x8c000520, 0x04020014, 0x0401f827,
- 0x59c4000d, 0x8c000520, 0x04020010, 0x4200b000,
- 0x0000000a, 0x8058b040, 0x04000003, 0x0401f81f,
- 0x0401f7fd, 0x4200b000, 0x00000064, 0x59c4000d,
- 0x8c00051e, 0x04000005, 0x8058b040, 0x040207fc,
- 0x80000580, 0x0401f003, 0x82000540, 0x00000001,
- 0x5c00b000, 0x1c01f000, 0x42000800, 0x000000a0,
- 0x0401f815, 0x82040500, 0xfffffffe, 0x42000800,
- 0x000000a0, 0x0401f818, 0x42000800, 0x00000000,
- 0x0401f80d, 0x82040500, 0xfffffffe, 0x42000800,
- 0x00000000, 0x0401f010, 0x40000000, 0x40000000,
- 0x40000000, 0x40000000, 0x40000000, 0x1c01f000,
- 0x40680800, 0x4807880e, 0x59c4080f, 0x82040d00,
- 0x000000ff, 0x40058800, 0x1c01f000, 0x40680800,
- 0x406c0000, 0x900001c0, 0x80040d40, 0x84040d40,
- 0x4807880e, 0x1c01f000, 0x82000d80, 0x00200000,
- 0x04000009, 0x82000d80, 0x02000000, 0x04000006,
- 0x82000d80, 0x01000000, 0x04000006, 0x59c408a3,
- 0x0401f006, 0x59c408a3, 0x84040d30, 0x0401f003,
- 0x59c408a3, 0x84040d32, 0x80040540, 0x480388a3,
- 0x480788a3, 0x1c01f000, 0x59c400a3, 0x84000556,
- 0x480388a3, 0x84000516, 0x480388a3, 0x1c01f000,
- 0x485fc857, 0x4863c857, 0x4c640000, 0x4d3c0000,
- 0x4d400000, 0x0201f800, 0x001071b4, 0x48635009,
- 0x40601800, 0x42002000, 0x00000000, 0x0401fad3,
- 0x42000000, 0x0010ce85, 0x0201f800, 0x0010bfb3,
- 0x82600500, 0x0000ff00, 0x82000580, 0x0000f700,
- 0x04020005, 0x42000000, 0x0010ce6d, 0x0201f800,
- 0x0010bfb3, 0x0201f800, 0x0010c0bb, 0x040200a5,
- 0x82600d00, 0x0000ff00, 0x42024000, 0x0000ffff,
- 0x800409c0, 0x0400001e, 0x82041580, 0x0000f700,
- 0x04000016, 0x82041580, 0x0000f800, 0x04000013,
- 0x82041580, 0x0000ff00, 0x4200c800, 0x00000000,
- 0x04000030, 0x840439c0, 0x0201f800, 0x00101fc9,
- 0x0402001b, 0x83200400, 0x0010c10d, 0x50024800,
- 0x59240200, 0x8c000500, 0x04000015, 0x4200c800,
- 0x00000001, 0x0401f023, 0x42024800, 0x0010cfd1,
- 0x59240200, 0x8c000502, 0x0400000d, 0x59c410a3,
- 0x82081500, 0x00008000, 0x04000009, 0x59c410a7,
- 0x82081500, 0x0000ff00, 0x82081580, 0x0000ff00,
- 0x4200c800, 0x00000000, 0x04000012, 0x8d0e1d02,
- 0x04020007, 0x8d0e1d00, 0x0402000e, 0x599c1017,
- 0x8c08151a, 0x04000065, 0x850e1d42, 0x42024000,
- 0x0000ffff, 0x4200c800, 0x00000002, 0x42028000,
- 0x00000004, 0x42027800, 0x00000008, 0x0401f005,
- 0x850e1d40, 0x42028000, 0x00000004, 0x417a7800,
- 0x59a80005, 0x8c000502, 0x04020004, 0x8d0e1d0a,
- 0x0402005c, 0x850e1d4a, 0x42000000, 0x0010ce6c,
- 0x0201f800, 0x0010bfb3, 0x59a81809, 0x42001000,
- 0x00008013, 0x0201f800, 0x001039ac, 0x83200580,
- 0x0000ffff, 0x0400001f, 0x59240400, 0x8c000508,
- 0x0400000a, 0x417a7800, 0x4d300000, 0x417a6000,
- 0x0201f800, 0x0010200c, 0x5c026000, 0x59240400,
- 0x8c00050a, 0x04020043, 0x4d400000, 0x82600500,
- 0x000000ff, 0x42028800, 0x0000ffff, 0x40643000,
- 0x42028000, 0x0000000e, 0x0201f800, 0x0010b195,
- 0x42000800, 0x00000001, 0x42001000, 0x00000100,
- 0x0201f800, 0x00106753, 0x5c028000, 0x0401f031,
- 0x8d0e1d20, 0x04000020, 0x4c580000, 0x42024800,
- 0x0010cfd1, 0x0201f800, 0x0010c0ca, 0x4d400000,
- 0x59240200, 0x8c000500, 0x04000007, 0x42000800,
- 0x00000001, 0x42001000, 0x00000100, 0x0201f800,
- 0x00106753, 0x83264c00, 0x0000000b, 0x8058b040,
- 0x040207f4, 0x42028000, 0x0000000e, 0x42028800,
- 0x0000ffff, 0x40643000, 0x0201f800, 0x0010b195,
- 0x5c028000, 0x5c00b000, 0x599c0817, 0x8c040d0a,
- 0x04020010, 0x493fc857, 0x4943c857, 0x0201f800,
- 0x0010fef2, 0x0401f00b, 0x8d0e1d20, 0x04000009,
- 0x42028000, 0x0000000f, 0x42028800, 0x0000ffff,
- 0x42003000, 0x00000000, 0x0201f800, 0x0010b198,
- 0x497b8880, 0x5c028000, 0x5c027800, 0x5c00c800,
- 0x1c01f000, 0x42000800, 0x00000000, 0x0401ff12,
- 0x82040540, 0x00000002, 0x42000800, 0x00000000,
- 0x0401f715, 0x42000800, 0x00000000, 0x0401ff0a,
- 0x82040500, 0xfffffffd, 0x42000800, 0x00000000,
- 0x0401f70d, 0x59c408a8, 0x0401fefc, 0x0401fefb,
- 0x59c400a8, 0x80040d80, 0x040207fb, 0x1c01f000,
- 0x4803c856, 0x4a038807, 0x00000001, 0x497b8807,
- 0x59c40005, 0x48038805, 0x497b506d, 0x497b506e,
- 0x59e00024, 0x8c000510, 0x04020038, 0x41785800,
- 0x42006000, 0x00000001, 0x42006800, 0x00000003,
- 0x0401f87c, 0x0401f887, 0x40400000, 0x4803c857,
- 0x82408580, 0x00000000, 0x0402002c, 0x41785800,
- 0x42006000, 0x00000004, 0x42006800, 0x00000006,
- 0x0401f870, 0x0401f87b, 0x40400000, 0x4803c857,
- 0x82408580, 0x0000001a, 0x04020020, 0x42005800,
- 0x00000001, 0x42006000, 0x0000001e, 0x42006800,
- 0x00000014, 0x0401f863, 0x0401f86e, 0x40400000,
- 0x4803c857, 0x82408580, 0x0000ffff, 0x04020013,
- 0x4a03506d, 0x00000001, 0x4803c856, 0x42001800,
- 0x001200f5, 0x0401f9b3, 0x42001800, 0x003a0001,
- 0x0401f9b0, 0x42001800, 0x000200f5, 0x0401f9ad,
- 0x42001800, 0x00020001, 0x0401f9aa, 0x42001800,
- 0x00000001, 0x0401f9a7, 0x1c01f000, 0x42005800,
- 0x00000000, 0x42006000, 0x0000001e, 0x40006800,
- 0x0401f844, 0x0401f84f, 0x40400000, 0x1c01f000,
- 0x59a8006d, 0x80000540, 0x0400003d, 0x5c036000,
- 0x4db00000, 0x49b3c857, 0x4c5c0000, 0x4c600000,
- 0x42000800, 0x00000001, 0x0401f945, 0x42000000,
- 0x0000000a, 0x0401ffea, 0x4000b800, 0x825c0480,
- 0x00000005, 0x02021800, 0x0010032e, 0x4200c000,
- 0x00000008, 0x825c0480, 0x00000004, 0x04001003,
- 0x4200c000, 0x00000004, 0x59c8000b, 0x4803c857,
- 0x59c4009e, 0x82000d80, 0x00000003, 0x0402001e,
- 0x825c0d80, 0x00000003, 0x0400001b, 0x485fc857,
- 0x42000000, 0x00000015, 0x0401ffd1, 0x80600540,
- 0x4c000000, 0x41785800, 0x42006000, 0x0000001e,
- 0x42006800, 0x00000015, 0x0401f812, 0x5c000000,
- 0x40006800, 0x0401f815, 0x82600580, 0x00000004,
- 0x04000003, 0x805cb800, 0x0401f7ea, 0x805cb840,
- 0x825c0580, 0x00000003, 0x02020800, 0x0010032e,
- 0x0401f7e4, 0x5c00c000, 0x5c00b800, 0x1c01f000,
- 0x41785000, 0x0401f812, 0x0401f838, 0x40347000,
- 0x40340800, 0x0401f03d, 0x42005000, 0x00000001,
- 0x0401f80b, 0x0401f831, 0x40340800, 0x0401f037,
- 0x42005000, 0x00000002, 0x0401f805, 0x0401f81d,
- 0x0401f835, 0x40048000, 0x1c01f000, 0x0401f808,
- 0x0401f814, 0x40280800, 0x0401f826, 0x402c0800,
- 0x0401f827, 0x40300800, 0x0401f025, 0x42000800,
- 0x0000ffff, 0x42001000, 0x00000001, 0x0401f829,
- 0x42001000, 0x00000010, 0x0401f826, 0x42000800,
- 0x0000ffff, 0x42001000, 0x00000010, 0x0401f021,
- 0x41780800, 0x42001000, 0x00000002, 0x0401f01d,
- 0x0401f946, 0x4a03d000, 0x00050004, 0x0401f943,
- 0x4a03d000, 0x00050005, 0x0401f940, 0x4a03d000,
- 0x00050004, 0x42000800, 0x00000001, 0x42001000,
- 0x00000001, 0x0401f00f, 0x42000800, 0x00000002,
- 0x42001000, 0x00000002, 0x0401f00a, 0x42001000,
- 0x00000005, 0x0401f007, 0x42001000, 0x00000010,
- 0x0401f004, 0x42001000, 0x00000010, 0x0401f01b,
- 0x0401f92a, 0x82082c00, 0x0010c0fc, 0x50142800,
- 0x82081500, 0xffffffff, 0x04000013, 0x0401f923,
- 0x80081040, 0x80142902, 0x40040000, 0x80140500,
- 0x04000007, 0x4a03d000, 0x00070006, 0x0401f91b,
- 0x4a03d000, 0x00070007, 0x0401f006, 0x4a03d000,
- 0x00070004, 0x0401f915, 0x4a03d000, 0x00070005,
- 0x0401f7ec, 0x1c01f000, 0x41780800, 0x82082c00,
- 0x0010c0fc, 0x50142800, 0x82081500, 0xffffffff,
- 0x04000010, 0x0401f909, 0x4a03d000, 0x00050001,
- 0x0401f906, 0x59e81800, 0x80081040, 0x80142902,
- 0x8c0c1d06, 0x04000004, 0x40140000, 0x80040d40,
- 0x0401f8fe, 0x4a03d000, 0x00070000, 0x0401f7ef,
- 0x1c01f000, 0x40681000, 0x4c5c0000, 0x4c080000,
- 0x42000000, 0x00000014, 0x0401ff39, 0x4000b800,
- 0x42000800, 0x00000001, 0x0401f88d, 0x5c001000,
- 0x480bc857, 0x480b506e, 0x59c40001, 0x82000500,
- 0xffffefff, 0x48038801, 0x41781800, 0x0401f8d1,
- 0x41785800, 0x42006000, 0x0000001e, 0x42006800,
- 0x00000004, 0x0401ff6f, 0x42006800, 0x0000003c,
- 0x0401ff72, 0x41785800, 0x42006000, 0x0000001e,
- 0x42006800, 0x00000004, 0x0401ff66, 0x41786800,
- 0x0401ff6a, 0x41785800, 0x42006000, 0x0000001e,
- 0x41786800, 0x0401ff5f, 0x42006800, 0x00000002,
- 0x0401ff62, 0x42006800, 0x00000001, 0x0401ff59,
- 0x42006800, 0x000000f5, 0x0401ff5c, 0x41785800,
- 0x42006000, 0x0000001e, 0x42006800, 0x00000004,
- 0x0401ff50, 0x42006800, 0x00000020, 0x0401ff53,
- 0x59a8106e, 0x0401f872, 0x42001800, 0x000200f5,
- 0x0401f8a4, 0x59a8106e, 0x0401f886, 0x41785800,
+ 0x0401f003, 0x42000000, 0x00000000, 0x0401f8aa,
+ 0x5c000800, 0x1c01f000, 0x4c200000, 0x59a80048,
+ 0x82000500, 0x00007fff, 0x02000800, 0x0010032f,
+ 0x59a84047, 0x80204102, 0x02001800, 0x0010032f,
+ 0x48235047, 0x80204500, 0x040007fa, 0x8c000504,
+ 0x04020007, 0x8c000502, 0x04020008, 0x8c000500,
+ 0x04020009, 0x0201f800, 0x0010032f, 0x42000000,
+ 0x00000002, 0x0401f006, 0x42000000, 0x00000000,
+ 0x0401f003, 0x42000000, 0x00000001, 0x0401f810,
+ 0x5c004000, 0x1c01f000, 0x04011000, 0x4a03c840,
+ 0x0010d0c0, 0x4a03c842, 0x00000009, 0x40000000,
+ 0x040117ff, 0x4a035047, 0x00000004, 0x4a03503e,
+ 0x00000000, 0x1c01f000, 0x40680000, 0x59a80886,
+ 0x8c040d3e, 0x0402000c, 0x59a8084d, 0x82040d80,
+ 0x01391077, 0x04020008, 0x59e00813, 0x8c040d00,
+ 0x04000005, 0x82000d80, 0x00000002, 0x04020002,
+ 0x41780000, 0x59a8084d, 0x82040d80, 0x015b1077,
+ 0x0402000b, 0x4a03c014, 0x00200020, 0x82000d80,
+ 0x00000001, 0x42000800, 0x00200000, 0x04000003,
+ 0x42000800, 0x00200020, 0x4807c013, 0x800001c0,
+ 0x04000040, 0x82000d80, 0x00000001, 0x0402001d,
+ 0x42000800, 0x000000a0, 0x0401f8f1, 0x82040540,
+ 0x00000004, 0x42000800, 0x000000a0, 0x0401f8f4,
+ 0x42000800, 0x000000c0, 0x0401f8e9, 0x82040540,
+ 0x00000020, 0x42000800, 0x000000c0, 0x0401f8ec,
+ 0x59c40001, 0x82000500, 0xfffe7fff, 0x82000540,
+ 0x00000000, 0x48038801, 0x59a8004a, 0x80000110,
+ 0x42000800, 0x000000e0, 0x0401f8e1, 0x0401f03c,
+ 0x82000d80, 0x00000002, 0x02020800, 0x0010032f,
+ 0x42000800, 0x000000a0, 0x0401f8d1, 0x82040500,
+ 0xfffffffb, 0x42000800, 0x000000a0, 0x0401f8d4,
+ 0x42000800, 0x000000c0, 0x0401f8c9, 0x82040500,
+ 0xffffffdf, 0x42000800, 0x000000c0, 0x0401f8cc,
+ 0x59c40001, 0x82000500, 0xfffe7fff, 0x82000540,
+ 0x00010000, 0x48038801, 0x59a8004c, 0x80000110,
+ 0x42000800, 0x000000e0, 0x0401f8c1, 0x0401f01c,
+ 0x42000800, 0x000000a0, 0x0401f8b5, 0x82040540,
+ 0x00000004, 0x42000800, 0x000000a0, 0x0401f8b8,
+ 0x42000800, 0x000000c0, 0x0401f8ad, 0x82040500,
+ 0xffffffdf, 0x42000800, 0x000000c0, 0x0401f8b0,
+ 0x59c40001, 0x82000500, 0xfffe7fff, 0x82000540,
+ 0x00008000, 0x48038801, 0x59a8004b, 0x80000110,
+ 0x42000800, 0x000000e0, 0x0401f8a5, 0x1c01f000,
+ 0x40680000, 0x4803c857, 0x59a80886, 0x8c040d3e,
+ 0x0402000c, 0x59a8084d, 0x82040d80, 0x01391077,
+ 0x04020008, 0x59e00813, 0x8c040d00, 0x04000005,
+ 0x82000d80, 0x00000002, 0x04020002, 0x41780000,
+ 0x4c000000, 0x0401f976, 0x5c000000, 0x800001c0,
+ 0x04000026, 0x82000d80, 0x00000001, 0x04020010,
+ 0x59a8007b, 0x80000540, 0x04000004, 0x42001000,
+ 0x00000000, 0x0401fa87, 0x42000800, 0x00000000,
+ 0x0401f87b, 0x82040540, 0x00000090, 0x42000800,
+ 0x00000000, 0x0401f87e, 0x0401f024, 0x82000d80,
+ 0x00000002, 0x02020800, 0x0010032f, 0x59a8007b,
+ 0x80000540, 0x04000004, 0x42001000, 0x00010000,
+ 0x0401fa74, 0x42000800, 0x00000000, 0x0401f868,
+ 0x82040500, 0xffffff6f, 0x42000800, 0x00000000,
+ 0x0401f86b, 0x0401f011, 0x59a8007b, 0x80000540,
+ 0x04000004, 0x42001000, 0x00008000, 0x0401fa65,
+ 0x42000800, 0x00000000, 0x0401f859, 0x82040500,
+ 0xffffff6f, 0x82000540, 0x00000010, 0x42000800,
+ 0x00000000, 0x0401f85a, 0x0401f145, 0x0401f807,
+ 0x42018800, 0x00000001, 0x04000003, 0x42018800,
+ 0x00000000, 0x1c01f000, 0x4c580000, 0x4200b000,
+ 0x00000014, 0x8058b040, 0x0400002a, 0x59c4000d,
+ 0x8c000520, 0x040207fc, 0x0401f83a, 0x59c4000d,
+ 0x8c000520, 0x040207f8, 0x59c40808, 0x82040d40,
+ 0x00000100, 0x48078808, 0x4200b000, 0x000000c8,
+ 0x8058b040, 0x040207ff, 0x4200b000, 0x00000014,
+ 0x8058b040, 0x04000017, 0x59c4000d, 0x8c000520,
+ 0x04020014, 0x0401f827, 0x59c4000d, 0x8c000520,
+ 0x04020010, 0x4200b000, 0x0000000a, 0x8058b040,
+ 0x04000003, 0x0401f81f, 0x0401f7fd, 0x4200b000,
+ 0x00000064, 0x59c4000d, 0x8c00051e, 0x04000005,
+ 0x8058b040, 0x040207fc, 0x80000580, 0x0401f003,
+ 0x82000540, 0x00000001, 0x5c00b000, 0x1c01f000,
+ 0x42000800, 0x000000a0, 0x0401f815, 0x82040500,
+ 0xfffffffe, 0x42000800, 0x000000a0, 0x0401f818,
+ 0x42000800, 0x00000000, 0x0401f80d, 0x82040500,
+ 0xfffffffe, 0x42000800, 0x00000000, 0x0401f010,
+ 0x40000000, 0x40000000, 0x40000000, 0x40000000,
+ 0x40000000, 0x1c01f000, 0x40680800, 0x4807880e,
+ 0x59c4080f, 0x82040d00, 0x000000ff, 0x40058800,
+ 0x1c01f000, 0x40680800, 0x406c0000, 0x900001c0,
+ 0x80040d40, 0x84040d40, 0x4807880e, 0x1c01f000,
+ 0x82000d80, 0x00200000, 0x04000009, 0x82000d80,
+ 0x02000000, 0x04000006, 0x82000d80, 0x01000000,
+ 0x04000006, 0x59c408a3, 0x0401f006, 0x59c408a3,
+ 0x84040d30, 0x0401f003, 0x59c408a3, 0x84040d32,
+ 0x80040540, 0x480388a3, 0x480788a3, 0x1c01f000,
+ 0x59c400a3, 0x84000556, 0x480388a3, 0x84000516,
+ 0x480388a3, 0x1c01f000, 0x485fc857, 0x4863c857,
+ 0x4c640000, 0x4d3c0000, 0x4d400000, 0x0201f800,
+ 0x00107523, 0x48635009, 0x40601800, 0x42002000,
+ 0x00000000, 0x0401fad3, 0x42000000, 0x0010d49b,
+ 0x0201f800, 0x0010c50a, 0x82600500, 0x0000ff00,
+ 0x82000580, 0x0000f700, 0x04020005, 0x42000000,
+ 0x0010d483, 0x0201f800, 0x0010c50a, 0x0201f800,
+ 0x0010c612, 0x040200a5, 0x82600d00, 0x0000ff00,
+ 0x42024000, 0x0000ffff, 0x800409c0, 0x0400001e,
+ 0x82041580, 0x0000f700, 0x04000016, 0x82041580,
+ 0x0000f800, 0x04000013, 0x82041580, 0x0000ff00,
+ 0x4200c800, 0x00000000, 0x04000030, 0x840439c0,
+ 0x0201f800, 0x00102051, 0x0402001b, 0x83200400,
+ 0x0010c6ac, 0x50024800, 0x59240200, 0x8c000500,
+ 0x04000015, 0x4200c800, 0x00000001, 0x0401f023,
+ 0x42024800, 0x0010d5ef, 0x59240200, 0x8c000502,
+ 0x0400000d, 0x59c410a3, 0x82081500, 0x00008000,
+ 0x04000009, 0x59c410a7, 0x82081500, 0x0000ff00,
+ 0x82081580, 0x0000ff00, 0x4200c800, 0x00000000,
+ 0x04000012, 0x8d0e1d02, 0x04020007, 0x8d0e1d00,
+ 0x0402000e, 0x599c1017, 0x8c08151a, 0x04000065,
+ 0x850e1d42, 0x42024000, 0x0000ffff, 0x4200c800,
+ 0x00000002, 0x42028000, 0x00000004, 0x42027800,
+ 0x00000008, 0x0401f005, 0x850e1d40, 0x42028000,
+ 0x00000004, 0x417a7800, 0x59a80005, 0x8c000502,
+ 0x04020004, 0x8d0e1d0a, 0x0402005c, 0x850e1d4a,
+ 0x42000000, 0x0010d482, 0x0201f800, 0x0010c50a,
+ 0x59a81809, 0x42001000, 0x00008013, 0x0201f800,
+ 0x00103a4e, 0x83200580, 0x0000ffff, 0x0400001f,
+ 0x59240400, 0x8c000508, 0x0400000a, 0x417a7800,
+ 0x4d300000, 0x417a6000, 0x0201f800, 0x00102094,
+ 0x5c026000, 0x59240400, 0x8c00050a, 0x04020043,
+ 0x4d400000, 0x82600500, 0x000000ff, 0x42028800,
+ 0x0000ffff, 0x40643000, 0x42028000, 0x0000000e,
+ 0x0201f800, 0x0010b65b, 0x42000800, 0x00000001,
+ 0x42001000, 0x00000100, 0x0201f800, 0x00106ab3,
+ 0x5c028000, 0x0401f031, 0x8d0e1d20, 0x04000020,
+ 0x4c580000, 0x42024800, 0x0010d5ef, 0x0201f800,
+ 0x0010c621, 0x4d400000, 0x59240200, 0x8c000500,
+ 0x04000007, 0x42000800, 0x00000001, 0x42001000,
+ 0x00000100, 0x0201f800, 0x00106ab3, 0x83264c00,
+ 0x0000000b, 0x8058b040, 0x040207f4, 0x42028000,
+ 0x0000000e, 0x42028800, 0x0000ffff, 0x40643000,
+ 0x0201f800, 0x0010b65b, 0x5c028000, 0x5c00b000,
+ 0x599c0817, 0x8c040d0a, 0x04020010, 0x493fc857,
+ 0x4943c857, 0x0201f800, 0x001105fb, 0x0401f00b,
+ 0x8d0e1d20, 0x04000009, 0x42028000, 0x0000000f,
+ 0x42028800, 0x0000ffff, 0x42003000, 0x00000000,
+ 0x0201f800, 0x0010b65e, 0x497b8880, 0x5c028000,
+ 0x5c027800, 0x5c00c800, 0x1c01f000, 0x42000800,
+ 0x00000000, 0x0401ff12, 0x82040540, 0x00000002,
+ 0x42000800, 0x00000000, 0x0401f715, 0x42000800,
+ 0x00000000, 0x0401ff0a, 0x82040500, 0xfffffffd,
+ 0x42000800, 0x00000000, 0x0401f70d, 0x59c408a8,
+ 0x0401fefc, 0x0401fefb, 0x59c400a8, 0x80040d80,
+ 0x040207fb, 0x1c01f000, 0x4803c856, 0x4a038807,
+ 0x00000001, 0x497b8807, 0x59c40005, 0x48038805,
+ 0x497b507b, 0x497b507c, 0x59e00024, 0x8c000510,
+ 0x04020038, 0x41785800, 0x42006000, 0x00000001,
+ 0x42006800, 0x00000003, 0x0401f87c, 0x0401f887,
+ 0x40400000, 0x4803c857, 0x82408580, 0x00000000,
+ 0x0402002c, 0x41785800, 0x42006000, 0x00000004,
+ 0x42006800, 0x00000006, 0x0401f870, 0x0401f87b,
+ 0x40400000, 0x4803c857, 0x82408580, 0x0000001a,
+ 0x04020020, 0x42005800, 0x00000001, 0x42006000,
+ 0x0000001e, 0x42006800, 0x00000014, 0x0401f863,
+ 0x0401f86e, 0x40400000, 0x4803c857, 0x82408580,
+ 0x0000ffff, 0x04020013, 0x4a03507b, 0x00000001,
+ 0x4803c856, 0x42001800, 0x001200f5, 0x0401f9b3,
+ 0x42001800, 0x003a0001, 0x0401f9b0, 0x42001800,
+ 0x000200f5, 0x0401f9ad, 0x42001800, 0x00020001,
+ 0x0401f9aa, 0x42001800, 0x00000001, 0x0401f9a7,
+ 0x1c01f000, 0x42005800, 0x00000000, 0x42006000,
+ 0x0000001e, 0x40006800, 0x0401f844, 0x0401f84f,
+ 0x40400000, 0x1c01f000, 0x59a8007b, 0x80000540,
+ 0x0400003d, 0x5c036000, 0x4db00000, 0x49b3c857,
+ 0x4c5c0000, 0x4c600000, 0x42000800, 0x00000001,
+ 0x0401f945, 0x42000000, 0x0000000a, 0x0401ffea,
+ 0x4000b800, 0x825c0480, 0x00000005, 0x02021800,
+ 0x0010032f, 0x4200c000, 0x00000008, 0x825c0480,
+ 0x00000004, 0x04001003, 0x4200c000, 0x00000004,
+ 0x59c8000b, 0x4803c857, 0x59c4009e, 0x82000d80,
+ 0x00000003, 0x0402001e, 0x825c0d80, 0x00000003,
+ 0x0400001b, 0x485fc857, 0x42000000, 0x00000015,
+ 0x0401ffd1, 0x80600540, 0x4c000000, 0x41785800,
+ 0x42006000, 0x0000001e, 0x42006800, 0x00000015,
+ 0x0401f812, 0x5c000000, 0x40006800, 0x0401f815,
+ 0x82600580, 0x00000004, 0x04000003, 0x805cb800,
+ 0x0401f7ea, 0x805cb840, 0x825c0580, 0x00000003,
+ 0x02020800, 0x0010032f, 0x0401f7e4, 0x5c00c000,
+ 0x5c00b800, 0x1c01f000, 0x41785000, 0x0401f812,
+ 0x0401f838, 0x40347000, 0x40340800, 0x0401f03d,
+ 0x42005000, 0x00000001, 0x0401f80b, 0x0401f831,
+ 0x40340800, 0x0401f037, 0x42005000, 0x00000002,
+ 0x0401f805, 0x0401f81d, 0x0401f835, 0x40048000,
+ 0x1c01f000, 0x0401f808, 0x0401f814, 0x40280800,
+ 0x0401f826, 0x402c0800, 0x0401f827, 0x40300800,
+ 0x0401f025, 0x42000800, 0x0000ffff, 0x42001000,
+ 0x00000001, 0x0401f829, 0x42001000, 0x00000010,
+ 0x0401f826, 0x42000800, 0x0000ffff, 0x42001000,
+ 0x00000010, 0x0401f021, 0x41780800, 0x42001000,
+ 0x00000002, 0x0401f01d, 0x0401f946, 0x4a03d000,
+ 0x00050004, 0x0401f943, 0x4a03d000, 0x00050005,
+ 0x0401f940, 0x4a03d000, 0x00050004, 0x42000800,
+ 0x00000001, 0x42001000, 0x00000001, 0x0401f00f,
+ 0x42000800, 0x00000002, 0x42001000, 0x00000002,
+ 0x0401f00a, 0x42001000, 0x00000005, 0x0401f007,
+ 0x42001000, 0x00000010, 0x0401f004, 0x42001000,
+ 0x00000010, 0x0401f01b, 0x0401f92a, 0x82082c00,
+ 0x0010c69b, 0x50142800, 0x82081500, 0xffffffff,
+ 0x04000013, 0x0401f923, 0x80081040, 0x80142902,
+ 0x40040000, 0x80140500, 0x04000007, 0x4a03d000,
+ 0x00070006, 0x0401f91b, 0x4a03d000, 0x00070007,
+ 0x0401f006, 0x4a03d000, 0x00070004, 0x0401f915,
+ 0x4a03d000, 0x00070005, 0x0401f7ec, 0x1c01f000,
+ 0x41780800, 0x82082c00, 0x0010c69b, 0x50142800,
+ 0x82081500, 0xffffffff, 0x04000010, 0x0401f909,
+ 0x4a03d000, 0x00050001, 0x0401f906, 0x59e81800,
+ 0x80081040, 0x80142902, 0x8c0c1d06, 0x04000004,
+ 0x40140000, 0x80040d40, 0x0401f8fe, 0x4a03d000,
+ 0x00070000, 0x0401f7ef, 0x1c01f000, 0x40681000,
+ 0x4c5c0000, 0x4c080000, 0x42000000, 0x00000014,
+ 0x0401ff39, 0x4000b800, 0x42000800, 0x00000001,
+ 0x0401f88d, 0x5c001000, 0x480bc857, 0x480b507c,
+ 0x59c40001, 0x82000500, 0xffffefff, 0x48038801,
+ 0x41781800, 0x0401f8d1, 0x41785800, 0x42006000,
+ 0x0000001e, 0x42006800, 0x00000004, 0x0401ff6f,
+ 0x42006800, 0x0000003c, 0x0401ff72, 0x41785800,
0x42006000, 0x0000001e, 0x42006800, 0x00000004,
- 0x0401ff40, 0x41786800, 0x0401ff44, 0x42000000,
- 0x00000015, 0x0401fef2, 0x82000540, 0x00000002,
+ 0x0401ff66, 0x41786800, 0x0401ff6a, 0x41785800,
+ 0x42006000, 0x0000001e, 0x41786800, 0x0401ff5f,
+ 0x42006800, 0x00000002, 0x0401ff62, 0x42006800,
+ 0x00000001, 0x0401ff59, 0x42006800, 0x000000f5,
+ 0x0401ff5c, 0x41785800, 0x42006000, 0x0000001e,
+ 0x42006800, 0x00000004, 0x0401ff50, 0x42006800,
+ 0x00000020, 0x0401ff53, 0x59a8107c, 0x0401f872,
+ 0x42001800, 0x000200f5, 0x0401f8a4, 0x59a8107c,
+ 0x0401f886, 0x41785800, 0x42006000, 0x0000001e,
+ 0x42006800, 0x00000004, 0x0401ff40, 0x41786800,
+ 0x0401ff44, 0x42000000, 0x00000015, 0x0401fef2,
+ 0x82000540, 0x00000002, 0x4c000000, 0x41785800,
+ 0x42006000, 0x0000001e, 0x42006800, 0x00000015,
+ 0x0401ff32, 0x5c000000, 0x40006800, 0x0401ff35,
+ 0x42000000, 0x00000015, 0x0401fee3, 0x82000500,
+ 0x0000fffd, 0x4c000000, 0x41785800, 0x42006000,
+ 0x0000001e, 0x42006800, 0x00000015, 0x0401ff23,
+ 0x5c000000, 0x40006800, 0x0401ff26, 0x42000000,
+ 0x00000014, 0x0401fed4, 0x82000540, 0x00000040,
0x4c000000, 0x41785800, 0x42006000, 0x0000001e,
- 0x42006800, 0x00000015, 0x0401ff32, 0x5c000000,
- 0x40006800, 0x0401ff35, 0x42000000, 0x00000015,
- 0x0401fee3, 0x82000500, 0x0000fffd, 0x4c000000,
+ 0x42006800, 0x00000014, 0x0401ff14, 0x5c000000,
+ 0x40006800, 0x0401ff17, 0x42000000, 0x00000014,
+ 0x0401fec5, 0x82000500, 0x0000ffbf, 0x4c000000,
0x41785800, 0x42006000, 0x0000001e, 0x42006800,
- 0x00000015, 0x0401ff23, 0x5c000000, 0x40006800,
- 0x0401ff26, 0x42000000, 0x00000014, 0x0401fed4,
- 0x82000540, 0x00000040, 0x4c000000, 0x41785800,
+ 0x00000014, 0x0401ff05, 0x5c000000, 0x40006800,
+ 0x0401ff08, 0x4a038886, 0x00002020, 0x41780800,
+ 0x8c5cbd06, 0x04000003, 0x42000800, 0x00000001,
+ 0x0401f809, 0x59c40001, 0x82000540, 0x00001000,
+ 0x48038801, 0x0401f867, 0x0401feb4, 0x5c00b800,
+ 0x1c01f000, 0x59a8007b, 0x80000540, 0x04000015,
+ 0x4807c857, 0x42000000, 0x00000014, 0x4c040000,
+ 0x0401fea1, 0x5c000800, 0x84000546, 0x800409c0,
+ 0x04020002, 0x84000506, 0x4c000000, 0x41785800,
0x42006000, 0x0000001e, 0x42006800, 0x00000014,
- 0x0401ff14, 0x5c000000, 0x40006800, 0x0401ff17,
- 0x42000000, 0x00000014, 0x0401fec5, 0x82000500,
- 0x0000ffbf, 0x4c000000, 0x41785800, 0x42006000,
- 0x0000001e, 0x42006800, 0x00000014, 0x0401ff05,
- 0x5c000000, 0x40006800, 0x0401ff08, 0x4a038886,
- 0x00002020, 0x41780800, 0x8c5cbd06, 0x04000003,
- 0x42000800, 0x00000001, 0x0401f809, 0x59c40001,
- 0x82000540, 0x00001000, 0x48038801, 0x0401f867,
- 0x0401feb4, 0x5c00b800, 0x1c01f000, 0x59a8006d,
- 0x80000540, 0x04000015, 0x4807c857, 0x42000000,
- 0x00000014, 0x4c040000, 0x0401fea1, 0x5c000800,
- 0x84000546, 0x800409c0, 0x04020002, 0x84000506,
- 0x4c000000, 0x41785800, 0x42006000, 0x0000001e,
- 0x42006800, 0x00000014, 0x0401fede, 0x5c000000,
- 0x40006800, 0x0401fee1, 0x1c01f000, 0x480bc857,
- 0x82080580, 0x00010000, 0x04020007, 0x82040d40,
- 0x00010000, 0x42001800, 0x00000001, 0x0401f82d,
- 0x0401f00f, 0x82080580, 0x00008000, 0x04000007,
- 0x82040d40, 0x00000000, 0x42001800, 0x00900001,
- 0x0401f824, 0x0401f006, 0x82040d40, 0x00008000,
- 0x42001800, 0x00100001, 0x0401f81e, 0x1c01f000,
- 0x480bc857, 0x82080580, 0x00010000, 0x04020008,
- 0x42001800, 0x000000a1, 0x0401f816, 0x42001800,
- 0x000000c1, 0x0401f813, 0x0401f011, 0x82080580,
- 0x00008000, 0x04000008, 0x42001800, 0x000400a1,
- 0x0401f80c, 0x42001800, 0x002000c1, 0x0401f809,
- 0x0401f007, 0x42001800, 0x000400a1, 0x0401f805,
- 0x42001800, 0x000000c1, 0x0401f802, 0x1c01f000,
- 0x480fc857, 0x41785800, 0x42006000, 0x0000001e,
- 0x41786800, 0x0401fe9f, 0x400c6800, 0x80346960,
- 0x0401fea2, 0x42006800, 0x00000001, 0x0401fe99,
- 0x400c6800, 0x0401fe9d, 0x42006800, 0x00000003,
- 0x0401fe94, 0x0401fe9f, 0x40400000, 0x8c000504,
- 0x040207fc, 0x1c01f000, 0x40000000, 0x40000000,
- 0x40000000, 0x1c01f000, 0x59a80005, 0x8c000500,
- 0x0400000a, 0x59a80008, 0x8c000500, 0x04020007,
- 0x84000540, 0x48035008, 0x42001000, 0x00008016,
- 0x0201f800, 0x001039ac, 0x1c01f000, 0x4803c856,
+ 0x0401fede, 0x5c000000, 0x40006800, 0x0401fee1,
+ 0x1c01f000, 0x480bc857, 0x82080580, 0x00010000,
+ 0x04020007, 0x82040d40, 0x00010000, 0x42001800,
+ 0x00000001, 0x0401f82d, 0x0401f00f, 0x82080580,
+ 0x00008000, 0x04000007, 0x82040d40, 0x00000000,
+ 0x42001800, 0x00900001, 0x0401f824, 0x0401f006,
+ 0x82040d40, 0x00008000, 0x42001800, 0x00100001,
+ 0x0401f81e, 0x1c01f000, 0x480bc857, 0x82080580,
+ 0x00010000, 0x04020008, 0x42001800, 0x000000a1,
+ 0x0401f816, 0x42001800, 0x000000c1, 0x0401f813,
+ 0x0401f011, 0x82080580, 0x00008000, 0x04000008,
+ 0x42001800, 0x000400a1, 0x0401f80c, 0x42001800,
+ 0x002000c1, 0x0401f809, 0x0401f007, 0x42001800,
+ 0x000400a1, 0x0401f805, 0x42001800, 0x000000c1,
+ 0x0401f802, 0x1c01f000, 0x480fc857, 0x41785800,
+ 0x42006000, 0x0000001e, 0x41786800, 0x0401fe9f,
+ 0x400c6800, 0x80346960, 0x0401fea2, 0x42006800,
+ 0x00000001, 0x0401fe99, 0x400c6800, 0x0401fe9d,
+ 0x42006800, 0x00000003, 0x0401fe94, 0x0401fe9f,
+ 0x40400000, 0x8c000504, 0x040207fc, 0x1c01f000,
+ 0x40000000, 0x40000000, 0x40000000, 0x1c01f000,
+ 0x59a80005, 0x8c000500, 0x0400000a, 0x59a80008,
+ 0x8c000500, 0x04020007, 0x84000540, 0x48035008,
+ 0x42001000, 0x00008016, 0x0201f800, 0x00103a4e,
+ 0x1c01f000, 0x59c468a4, 0x82346d00, 0x0000000f,
+ 0x82346d80, 0x00000002, 0x1c01f000, 0x59c468a4,
+ 0x82346d00, 0x0000000f, 0x82346d80, 0x00000001,
+ 0x1c01f000, 0x59c468a4, 0x82346d00, 0x0000000f,
+ 0x82346d80, 0x00000000, 0x1c01f000, 0x4803c856,
0x59a80006, 0x8c00051e, 0x0402000a, 0x42028800,
0x000007fc, 0x42003000, 0x00fffffc, 0x0201f800,
- 0x00104628, 0x04020008, 0x0401f809, 0x04000006,
- 0x4a03501c, 0x0000ffff, 0x82000540, 0x00000001,
+ 0x00104774, 0x04020008, 0x0401f809, 0x04000006,
+ 0x4a035022, 0x0000ffff, 0x82000540, 0x00000001,
0x1c01f000, 0x80000580, 0x0401f7fe, 0x4937c857,
- 0x0201f800, 0x00107ef8, 0x04000017, 0x4926601c,
+ 0x0201f800, 0x00108297, 0x04000017, 0x4926601c,
0x4936600a, 0x4a026407, 0x00000001, 0x417a7800,
- 0x0201f800, 0x001045df, 0x42000800, 0x00000003,
- 0x0201f800, 0x001045ea, 0x59a8001d, 0x80000000,
- 0x4803501d, 0x599c0208, 0x48026c12, 0x42027000,
- 0x00000002, 0x0201f800, 0x00020bc1, 0x82000540,
+ 0x0201f800, 0x0010472b, 0x42000800, 0x00000003,
+ 0x0201f800, 0x00104736, 0x59a80023, 0x80000000,
+ 0x48035023, 0x599c0208, 0x48026c12, 0x42027000,
+ 0x00000002, 0x0201f800, 0x00020b22, 0x82000540,
0x00000001, 0x1c01f000, 0x40681000, 0x0401f807,
0x42018800, 0x00000000, 0x04000003, 0x42018800,
0x00000001, 0x1c01f000, 0x480bc857, 0x492fc857,
0x4923c857, 0x4927c857, 0x4c5c0000, 0x4008b800,
0x42028800, 0x000007fd, 0x42003000, 0x00fffffd,
- 0x0201f800, 0x00104628, 0x0402001f, 0x5934000a,
- 0x84000544, 0x4802680a, 0x0201f800, 0x00107ef8,
+ 0x0201f800, 0x00104774, 0x0402001f, 0x5934000a,
+ 0x84000544, 0x4802680a, 0x0201f800, 0x00108297,
0x04000019, 0x4926601c, 0x4936600a, 0x812e59c0,
0x04000006, 0x592c0405, 0x8c00051e, 0x04000003,
- 0x48ee602a, 0x0401f004, 0x59a8021b, 0x8400055c,
- 0x4803521b, 0x492e6009, 0x4a026407, 0x00000001,
+ 0x48ee602a, 0x0401f004, 0x59a80221, 0x8400055c,
+ 0x48035221, 0x492e6009, 0x4a026407, 0x00000001,
0x485e601d, 0x42027000, 0x00000022, 0x0201f800,
- 0x00020bc1, 0x82000540, 0x00000001, 0x5c00b800,
+ 0x00020b22, 0x82000540, 0x00000001, 0x5c00b800,
0x1c01f000, 0x80000580, 0x0401f7fd, 0x4933c857,
- 0x59a8021b, 0x8c000508, 0x04020012, 0x5930500a,
- 0x482bc857, 0x836c0580, 0x00000002, 0x0402000d,
- 0x0401f817, 0x0402000b, 0x58280403, 0x82000580,
- 0x000007fc, 0x04000008, 0x59a80016, 0x80000040,
- 0x4803c857, 0x02001800, 0x0010032e, 0x48035016,
- 0x1c01f000, 0x59300426, 0x82000580, 0x00000021,
- 0x040007fc, 0x59a8001d, 0x80000040, 0x4803c857,
- 0x040017f8, 0x4803501d, 0x1c01f000, 0x59300009,
- 0x800001c0, 0x04020009, 0x59300403, 0x82000580,
- 0x00000001, 0x04020004, 0x82000540, 0x00000001,
- 0x0401f002, 0x80000580, 0x1c01f000, 0x4933c857,
- 0x493fc857, 0x4947c857, 0x4927c857, 0x4d400000,
- 0x4d340000, 0x4d440000, 0x4c580000, 0x0201f800,
- 0x00106e41, 0x4df00000, 0x8060c1c0, 0x04020004,
- 0x4200b000, 0x00000001, 0x0401f004, 0x4200b000,
- 0x000007f0, 0x417a8800, 0x41440000, 0x81ac0400,
- 0x50000000, 0x80026d40, 0x04000020, 0x59245005,
- 0x59340013, 0x82000500, 0x00ffffff, 0x80280580,
- 0x0402001a, 0x4d3c0000, 0x42027800, 0x00000001,
- 0x0201f800, 0x0010498c, 0x5c027800, 0x42028000,
- 0x00000029, 0x0201f800, 0x00110363, 0x0201f800,
- 0x00110447, 0x0201f800, 0x001104e0, 0x0201f800,
- 0x00104a1c, 0x04020005, 0x4937c857, 0x4a026c00,
- 0x00000404, 0x0401f003, 0x0201f800, 0x00104a50,
- 0x0201f800, 0x00110916, 0x81468800, 0x8058b040,
- 0x040207da, 0x5c03e000, 0x02000800, 0x00106e2e,
+ 0x59a80221, 0x8c000508, 0x04020015, 0x5930500a,
+ 0x482bc857, 0x836c0580, 0x00000002, 0x04020010,
+ 0x0401f81d, 0x0402000e, 0x58280403, 0x82004d80,
+ 0x000007fc, 0x0400000b, 0x82004d80, 0x000007fd,
+ 0x04000007, 0x59a8001c, 0x80000040, 0x4803c857,
+ 0x02001800, 0x0010032f, 0x4803501c, 0x1c01f000,
+ 0x59300426, 0x82004d80, 0x00000021, 0x040007f6,
+ 0x82000580, 0x00000051, 0x040007f9, 0x59a80023,
+ 0x80000040, 0x4803c857, 0x040017f5, 0x48035023,
+ 0x1c01f000, 0x59300009, 0x800001c0, 0x04020009,
+ 0x59300403, 0x82000580, 0x00000001, 0x04020004,
+ 0x82000540, 0x00000001, 0x0401f002, 0x80000580,
+ 0x1c01f000, 0x4933c857, 0x493fc857, 0x4947c857,
+ 0x4927c857, 0x4d400000, 0x4d340000, 0x4d440000,
+ 0x4c580000, 0x0201f800, 0x001071b0, 0x4df00000,
+ 0x8060c1c0, 0x04020004, 0x4200b000, 0x00000001,
+ 0x0401f004, 0x4200b000, 0x000007f0, 0x417a8800,
+ 0x41440000, 0x81ac0400, 0x50000000, 0x80026d40,
+ 0x04000022, 0x59245005, 0x59340013, 0x82000500,
+ 0x00ffffff, 0x80280580, 0x0402001c, 0x4d3c0000,
+ 0x42027800, 0x00000001, 0x0201f800, 0x00104ae2,
+ 0x5c027800, 0x42028000, 0x00000029, 0x0201f800,
+ 0x00110a68, 0x0201f800, 0x00110b49, 0x0201f800,
+ 0x00110be2, 0x0201f800, 0x00104b75, 0x04020005,
+ 0x4937c857, 0x4a026c00, 0x00000404, 0x0401f003,
+ 0x0201f800, 0x00104ba9, 0x0201f800, 0x00111028,
+ 0x0201f800, 0x00104a61, 0x81468800, 0x8058b040,
+ 0x040207d8, 0x5c03e000, 0x02000800, 0x0010719d,
0x5c00b000, 0x5c028800, 0x5c026800, 0x5c028000,
0x1c01f000, 0x4937c857, 0x4947c857, 0x4c5c0000,
- 0x4c600000, 0x4c640000, 0x59a80056, 0x8c000500,
+ 0x4c600000, 0x4c640000, 0x59a80064, 0x8c000500,
0x0400001f, 0x599c0017, 0x8c00050a, 0x0402001c,
0x5934ba02, 0x825cbd00, 0x000000ff, 0x485fc857,
- 0x4178c000, 0x4178c800, 0x82600400, 0x0010e251,
+ 0x4178c000, 0x4178c800, 0x82600400, 0x0010e86f,
0x50002000, 0x8060c1c0, 0x04000008, 0x82100500,
0x000000ff, 0x82002d80, 0x000000ff, 0x0400000c,
0x805c0580, 0x0400000d, 0x80102110, 0x8064c800,
0x82640580, 0x00000004, 0x040207f5, 0x8060c000,
0x82600580, 0x00000020, 0x040207eb, 0x4813c857,
0x82000540, 0x00000001, 0x5c00c800, 0x5c00c000,
- 0x5c00b800, 0x1c01f000, 0x59a8021b, 0x8c000512,
- 0x02020800, 0x001003f5, 0x1c01f000, 0x4c5c0000,
+ 0x5c00b800, 0x1c01f000, 0x59a80221, 0x8c000512,
+ 0x02020800, 0x001003fe, 0x1c01f000, 0x4c5c0000,
0x4c600000, 0x4c640000, 0x4c500000, 0x4200b000,
- 0x00000001, 0x42024800, 0x0010cfd1, 0x417a4000,
- 0x42028800, 0x000007fe, 0x0201f800, 0x0010c0e8,
- 0x04000022, 0x0201f800, 0x0010c0ca, 0x5924ba00,
- 0x8c5cbd00, 0x04000088, 0x59a8a21b, 0x8c50a506,
+ 0x00000001, 0x42024800, 0x0010d5ef, 0x417a4000,
+ 0x42028800, 0x000007fe, 0x0201f800, 0x0010c63f,
+ 0x04000022, 0x0201f800, 0x0010c621, 0x5924ba00,
+ 0x8c5cbd00, 0x04000088, 0x59a8a221, 0x8c50a506,
0x0400000d, 0x825c0500, 0x000000e0, 0x82000580,
- 0x000000e0, 0x04000080, 0x0401f88f, 0x59a80016,
- 0x4923c857, 0x4803c857, 0x80000000, 0x48035016,
+ 0x000000e0, 0x04000080, 0x0401f88f, 0x59a8001c,
+ 0x4923c857, 0x4803c857, 0x80000000, 0x4803501c,
0x0401f079, 0x8c5cbd1e, 0x04000077, 0x4927c856,
0x4200b000, 0x00000001, 0x825c0500, 0x000000e1,
0x48024a00, 0x485fc857, 0x825cc500, 0x000000e0,
- 0x04020023, 0x0401f01c, 0x0201f800, 0x001050f7,
- 0x04000003, 0x0201f800, 0x0010c0ce, 0x5924ba00,
- 0x8c5cbd00, 0x04000064, 0x0201f800, 0x0010c0e8,
- 0x04000005, 0x59a8021b, 0x8c00050e, 0x04020014,
- 0x0401f004, 0x83240d80, 0x0010cfd1, 0x04020010,
+ 0x04020023, 0x0401f01c, 0x0201f800, 0x001052aa,
+ 0x04000003, 0x0201f800, 0x0010c625, 0x5924ba00,
+ 0x8c5cbd00, 0x04000064, 0x0201f800, 0x0010c63f,
+ 0x04000005, 0x59a80221, 0x8c00050e, 0x04020014,
+ 0x0401f004, 0x83240d80, 0x0010d5ef, 0x04020010,
0x825cc500, 0x000000e0, 0x0402000d, 0x0201f800,
- 0x001050f7, 0x04000004, 0x42000800, 0xffffff1d,
- 0x0401fad8, 0x59a8021b, 0x82000500, 0xffffdafc,
- 0x8400054e, 0x4803521b, 0x0401f006, 0x82600580,
+ 0x001052aa, 0x04000004, 0x42000800, 0xffffff1d,
+ 0x0401fae2, 0x59a80221, 0x82000500, 0xffffdafc,
+ 0x8400054e, 0x48035221, 0x0401f006, 0x82600580,
0x000000e0, 0x04020053, 0x8c5cbd0e, 0x04020046,
0x5924c809, 0x82640400, 0x0000000e, 0x50000000,
0x4803c857, 0x80026d40, 0x04000012, 0x0201f800,
- 0x001050f7, 0x04000014, 0x59340200, 0x8c00051a,
+ 0x001052aa, 0x04000014, 0x59340200, 0x8c00051a,
0x04020039, 0x59240805, 0x80040910, 0x0400000e,
- 0x59a80018, 0x4803c857, 0x4807c857, 0x80040580,
+ 0x59a8001e, 0x4803c857, 0x4807c857, 0x80040580,
0x04000009, 0x4a026806, 0xdeaddead, 0x0401f006,
- 0x42003000, 0x00fffffe, 0x0201f800, 0x00104628,
- 0x04020034, 0x0201f800, 0x00107ef8, 0x04000031,
+ 0x42003000, 0x00fffffe, 0x0201f800, 0x00104774,
+ 0x04020034, 0x0201f800, 0x00108297, 0x04000031,
0x4936600a, 0x4926601c, 0x4a026407, 0x00000001,
- 0x417a7800, 0x0201f800, 0x001045df, 0x0201f800,
- 0x0010feed, 0x42000800, 0x00000003, 0x0201f800,
- 0x001045ea, 0x49235017, 0x4923c857, 0x59240005,
+ 0x417a7800, 0x0201f800, 0x0010472b, 0x0201f800,
+ 0x001105f6, 0x42000800, 0x00000003, 0x0201f800,
+ 0x00104736, 0x4923501d, 0x4923c857, 0x59240005,
0x82000500, 0x000000ff, 0x48024805, 0x836c0580,
- 0x00000003, 0x04000004, 0x59a80016, 0x80000000,
- 0x48035016, 0x599c0208, 0x48026c12, 0x42027000,
- 0x00000002, 0x0201f800, 0x00020bc1, 0x59240200,
+ 0x00000003, 0x04000004, 0x59a8001c, 0x80000000,
+ 0x4803501c, 0x599c0208, 0x48026c12, 0x42027000,
+ 0x00000002, 0x0201f800, 0x00020b22, 0x59240200,
0x82000500, 0xffffff9d, 0x8400054e, 0x8400055e,
0x48024a00, 0x81224000, 0x83264c00, 0x0000000b,
- 0x8058b040, 0x04000005, 0x0201f800, 0x0010c0e8,
- 0x0402076f, 0x0401f792, 0x4a035017, 0x0000ffff,
+ 0x8058b040, 0x04000005, 0x0201f800, 0x0010c63f,
+ 0x0402076f, 0x0401f792, 0x4a03501d, 0x0000ffff,
0x5c00a000, 0x5c00c800, 0x5c00c000, 0x5c00b800,
0x1c01f000, 0x4d300000, 0x4d440000, 0x4d340000,
0x42028800, 0x000007fe, 0x42003000, 0x00fffffe,
- 0x0201f800, 0x00104628, 0x04020022, 0x0201f800,
- 0x00107ef8, 0x0400001f, 0x4927c857, 0x4923c857,
+ 0x0201f800, 0x00104774, 0x04020022, 0x0201f800,
+ 0x00108297, 0x0400001f, 0x4927c857, 0x4923c857,
0x497a6009, 0x4936600a, 0x4926601c, 0x4a026407,
0x00000001, 0x42000800, 0x00000003, 0x0201f800,
- 0x001045ea, 0x599c0208, 0x48026c12, 0x42027000,
- 0x00000002, 0x0201f800, 0x00020bc1, 0x59a80a1b,
+ 0x00104736, 0x599c0208, 0x48026c12, 0x42027000,
+ 0x00000002, 0x0201f800, 0x00020b22, 0x59a80a21,
0x8c040d06, 0x04020002, 0x497a4805, 0x59240200,
0x82000500, 0xffffff9d, 0x8400054e, 0x48024a00,
0x5c026800, 0x5c028800, 0x5c026000, 0x1c01f000,
0x80000580, 0x0401f7fb, 0x4d200000, 0x4d240000,
0x4c580000, 0x4d340000, 0x4d300000, 0x4d3c0000,
- 0x4d380000, 0x4d440000, 0x0201f800, 0x0010496c,
- 0x0402000a, 0x0201f800, 0x001050f7, 0x04000004,
- 0x59a8121b, 0x8c081506, 0x04000003, 0x0401ff18,
+ 0x4d380000, 0x4d440000, 0x0201f800, 0x00104ac2,
+ 0x0402000a, 0x0201f800, 0x001052aa, 0x04000004,
+ 0x59a81221, 0x8c081506, 0x04000003, 0x0401ff18,
0x0401f002, 0x0401f80a, 0x5c028800, 0x5c027000,
0x5c027800, 0x5c026000, 0x5c026800, 0x5c00b000,
0x5c024800, 0x5c024000, 0x1c01f000, 0x4803c856,
- 0x4c600000, 0x0201f800, 0x0010c0ce, 0x4200c000,
- 0x0010cfcf, 0x50600000, 0x82024580, 0x0000ffff,
- 0x04020004, 0x42024800, 0x0010cfd1, 0x0401f008,
+ 0x4c600000, 0x0201f800, 0x0010c625, 0x4200c000,
+ 0x0010d5ed, 0x50600000, 0x82024580, 0x0000ffff,
+ 0x04020004, 0x42024800, 0x0010d5ef, 0x0401f008,
0x8058b480, 0x04000029, 0x04001028, 0x40024000,
- 0x82000400, 0x0010c10d, 0x50024800, 0x4520c000,
+ 0x82000400, 0x0010c6ac, 0x50024800, 0x4520c000,
0x59240005, 0x82000500, 0x000000ff, 0x48024805,
0x59240200, 0x82000500, 0x00000003, 0x82000580,
0x00000003, 0x0402000e, 0x59240400, 0x8c000508,
- 0x0400000b, 0x59a80056, 0x8c000500, 0x04000003,
- 0x0401f814, 0x0401f002, 0x0401f867, 0x59a80017,
+ 0x0400000b, 0x59a80064, 0x8c000500, 0x04000003,
+ 0x0401f814, 0x0401f002, 0x0401f867, 0x59a8001d,
0x82000580, 0x0000ffff, 0x0402000c, 0x81224000,
0x83264c00, 0x0000000b, 0x8058b040, 0x040207e4,
- 0x599c0019, 0x8c00050e, 0x04020004, 0x59a80056,
+ 0x599c0019, 0x8c00050e, 0x04020004, 0x59a80064,
0x8c000500, 0x04020890, 0x5c00c000, 0x1c01f000,
0x4927c857, 0x4923c857, 0x4c580000, 0x4c100000,
0x4c0c0000, 0x4c080000, 0x4c040000, 0x4d240000,
- 0x59243c08, 0x59a81817, 0x820c1580, 0x0000ffff,
+ 0x59243c08, 0x59a8181d, 0x820c1580, 0x0000ffff,
0x04020003, 0x42001800, 0x00000001, 0x800c1104,
- 0x82082400, 0x0010e251, 0x50102000, 0x820c0500,
- 0x00000003, 0x0c01f001, 0x00101e9e, 0x00101ea0,
- 0x00101ea2, 0x00101ea4, 0x40101000, 0x0401f006,
+ 0x82082400, 0x0010e86f, 0x50102000, 0x820c0500,
+ 0x00000003, 0x0c01f001, 0x00101f26, 0x00101f28,
+ 0x00101f2a, 0x00101f2c, 0x40101000, 0x0401f006,
0x80101110, 0x0401f004, 0x80101120, 0x0401f002,
0x80101130, 0x4c0c0000, 0x82080500, 0x000000ff,
0x801c0d80, 0x0400001f, 0x800001c0, 0x0400001d,
0x40000800, 0x82000580, 0x000000ff, 0x0400001d,
0x0401f949, 0x04000017, 0x40040000, 0x0201f800,
- 0x00106134, 0x04020021, 0x0201f800, 0x0010468a,
- 0x04000005, 0x0201f800, 0x0010febe, 0x0400001b,
+ 0x00106463, 0x04020021, 0x0201f800, 0x001047d6,
+ 0x04000005, 0x0201f800, 0x001105c7, 0x0400001b,
0x0401f00c, 0x599c0019, 0x8c00050e, 0x04020009,
- 0x0201f800, 0x00104628, 0x04020014, 0x0201f800,
- 0x0010feed, 0x0201f800, 0x0010ffe1, 0x0400000f,
- 0x5c001800, 0x480f5017, 0x800c1800, 0x0401f7c8,
- 0x5c001800, 0x4a035017, 0x0000ffff, 0x5c024800,
+ 0x0201f800, 0x00104774, 0x04020014, 0x0201f800,
+ 0x001105f6, 0x0201f800, 0x001106e2, 0x0400000f,
+ 0x5c001800, 0x480f501d, 0x800c1800, 0x0401f7c8,
+ 0x5c001800, 0x4a03501d, 0x0000ffff, 0x5c024800,
0x5c000800, 0x5c001000, 0x5c001800, 0x5c002000,
- 0x5c00b000, 0x1c01f000, 0x5c001800, 0x480f5017,
+ 0x5c00b000, 0x1c01f000, 0x5c001800, 0x480f501d,
0x0401f7f7, 0x4927c857, 0x4c5c0000, 0x4c580000,
0x4c540000, 0x4200b000, 0x0000007e, 0x59243c08,
- 0x59a80017, 0x82001580, 0x0000ffff, 0x04020003,
+ 0x59a8001d, 0x82001580, 0x0000ffff, 0x04020003,
0x4178a800, 0x0401f004, 0x8058b480, 0x04001024,
- 0x4000a800, 0x48575017, 0x8254bc00, 0x00102116,
+ 0x4000a800, 0x4857501d, 0x8254bc00, 0x001021a6,
0x505cb800, 0x825cbd00, 0x000000ff, 0x405c0800,
0x0401f909, 0x04000017, 0x405c0000, 0x0201f800,
- 0x00106134, 0x04020018, 0x0201f800, 0x0010468a,
- 0x04000005, 0x0201f800, 0x0010febe, 0x04000012,
+ 0x00106463, 0x04020018, 0x0201f800, 0x001047d6,
+ 0x04000005, 0x0201f800, 0x001105c7, 0x04000012,
0x0401f00c, 0x599c0019, 0x8c00050e, 0x04020009,
- 0x0201f800, 0x00104628, 0x0402000b, 0x0201f800,
- 0x0010feed, 0x0201f800, 0x0010ffe1, 0x04000006,
- 0x8054a800, 0x8058b040, 0x040207df, 0x4a035017,
+ 0x0201f800, 0x00104774, 0x0402000b, 0x0201f800,
+ 0x001105f6, 0x0201f800, 0x001106e2, 0x04000006,
+ 0x8054a800, 0x8058b040, 0x040207df, 0x4a03501d,
0x0000ffff, 0x5c00a800, 0x5c00b000, 0x5c00b800,
0x1c01f000, 0x4c580000, 0x4d440000, 0x4200b000,
- 0x000007f0, 0x80028d80, 0x0201f800, 0x0002034c,
+ 0x000007f0, 0x80028d80, 0x0201f800, 0x00020353,
0x0402001e, 0x0401fe0c, 0x0400001c, 0x4937c857,
- 0x0201f800, 0x00104a73, 0x42026000, 0x0011152c,
+ 0x0201f800, 0x00104bcc, 0x42026000, 0x00111cec,
0x4936600a, 0x497a6009, 0x4926601c, 0x417a7800,
- 0x0201f800, 0x0010ff80, 0x42000000, 0x0010cf23,
- 0x0201f800, 0x0010bfb3, 0x59240400, 0x8c00050a,
+ 0x0201f800, 0x00110684, 0x42000000, 0x0010d53e,
+ 0x0201f800, 0x0010c50a, 0x59240400, 0x8c00050a,
0x0402000a, 0x41782800, 0x42003000, 0x00000008,
0x4d400000, 0x42028000, 0x00000029, 0x0201f800,
- 0x0010b195, 0x5c028000, 0x81468800, 0x8058b040,
+ 0x0010b65b, 0x5c028000, 0x81468800, 0x8058b040,
0x040207de, 0x5c028800, 0x5c00b000, 0x1c01f000,
0x4927c857, 0x4c5c0000, 0x400cb800, 0x4d200000,
- 0x4d240000, 0x4c580000, 0x0201f800, 0x0010c0ca,
- 0x417a4000, 0x42024800, 0x0010cfd1, 0x59240200,
+ 0x4d240000, 0x4c580000, 0x0201f800, 0x0010c621,
+ 0x417a4000, 0x42024800, 0x0010d5ef, 0x59240200,
0x8c000500, 0x0400000f, 0x8c5cbd08, 0x04000004,
0x8400055a, 0x48024a00, 0x0401f00a, 0x82000500,
0x000000e0, 0x82000580, 0x000000e0, 0x04000005,
@@ -16610,9 +2073,9 @@ static const uint32_t isp_2400_multi_risc_code[] = {
0x040207eb, 0x5c00b000, 0x5c024800, 0x5c024000,
0x5c00b800, 0x1c01f000, 0x40681800, 0x4d200000,
0x4d240000, 0x4c580000, 0x4c5c0000, 0x400cb800,
- 0x485fc857, 0x0201f800, 0x0010c0ca, 0x8058b040,
+ 0x485fc857, 0x0201f800, 0x0010c621, 0x8058b040,
0x04000019, 0x42024000, 0x00000001, 0x42024800,
- 0x0010cfdc, 0x59a8021b, 0x8c000514, 0x04000017,
+ 0x0010d5fa, 0x59a80221, 0x8c000514, 0x04000017,
0x59241200, 0x8c081510, 0x0402000a, 0x8c081500,
0x04000008, 0x8c5cbd08, 0x04000004, 0x8408155a,
0x480a4a00, 0x0401f003, 0x0401f816, 0x04000006,
@@ -16621,21 +2084,21 @@ static const uint32_t isp_2400_multi_risc_code[] = {
0x5c024000, 0x1c01f000, 0x497a4805, 0x59240200,
0x82000500, 0x00000001, 0x48024a00, 0x83264c00,
0x0000000b, 0x8058b040, 0x040207f8, 0x0401f7f2,
- 0x4927c857, 0x4923c857, 0x59a8021b, 0x8c000514,
+ 0x4927c857, 0x4923c857, 0x59a80221, 0x8c000514,
0x0400001a, 0x42028800, 0x000007fe, 0x42003000,
- 0x00fffffe, 0x0201f800, 0x00104628, 0x04020013,
+ 0x00fffffe, 0x0201f800, 0x00104774, 0x04020013,
0x599c0208, 0x48026c12, 0x4d2c0000, 0x417a5800,
- 0x0201f800, 0x00109e27, 0x5c025800, 0x0400000b,
- 0x59a8005e, 0x80000000, 0x4803505e, 0x59240200,
- 0x84000550, 0x84000512, 0x48024a00, 0x82000540,
+ 0x0201f800, 0x0010a1dd, 0x5c025800, 0x0400000b,
+ 0x59a8006c, 0x80000000, 0x4803506c, 0x59240200,
+ 0x84000512, 0x84000550, 0x48024a00, 0x82000540,
0x00000001, 0x1c01f000, 0x80000580, 0x0401f7fe,
- 0x4c580000, 0x0201f800, 0x0010c0ca, 0x417a4000,
- 0x42000800, 0x0010cfd1, 0x5930001c, 0x80040580,
+ 0x4c580000, 0x0201f800, 0x0010c621, 0x417a4000,
+ 0x42000800, 0x0010d5ef, 0x5930001c, 0x80040580,
0x04000008, 0x81224000, 0x82040c00, 0x0000000b,
- 0x8058b040, 0x040207f9, 0x0201f800, 0x0010032e,
+ 0x8058b040, 0x040207f9, 0x0201f800, 0x0010032f,
0x4933c857, 0x4923c857, 0x5c00b000, 0x1c01f000,
- 0x40683800, 0x4c580000, 0x0201f800, 0x0010c0ca,
- 0x417a4000, 0x42024800, 0x0010cfd1, 0x59a8121b,
+ 0x40683800, 0x4c580000, 0x0201f800, 0x0010c621,
+ 0x417a4000, 0x42024800, 0x0010d5ef, 0x59a81221,
0x8c081508, 0x0400000a, 0x821c0d80, 0x00fffffe,
0x04000022, 0x8c08150c, 0x04000020, 0x59240005,
0x801c0580, 0x0400001d, 0x0401f017, 0x82080500,
@@ -16647,75 +2110,77 @@ static const uint32_t isp_2400_multi_risc_code[] = {
0x0401f7ee, 0x42024000, 0x0000ffff, 0x82000540,
0x00000001, 0x481fc856, 0x4923c857, 0x5c00b000,
0x1c01f000, 0x4807c857, 0x4c580000, 0x0201f800,
- 0x0010c0ca, 0x42006800, 0x0010cfd1, 0x58340005,
+ 0x0010c621, 0x42006800, 0x0010d5ef, 0x58340005,
0x82000500, 0x000000ff, 0x80040580, 0x04000007,
0x82346c00, 0x0000000b, 0x8058b040, 0x040207f8,
0x82000540, 0x00000001, 0x5c00b000, 0x1c01f000,
0x4923c857, 0x493fc857, 0x4c580000, 0x4d400000,
0x4d440000, 0x4d340000, 0x4c5c0000, 0x0201f800,
- 0x00106e41, 0x4df00000, 0x4200b000, 0x000007f0,
- 0x417a8800, 0x83440400, 0x0010c280, 0x50000000,
- 0x80026d40, 0x04000022, 0x59340013, 0x80000130,
- 0x81200580, 0x0402001e, 0x42028000, 0x00000029,
- 0x0201f800, 0x00110363, 0x0201f800, 0x00110447,
- 0x0201f800, 0x001104e0, 0x0201f800, 0x00110916,
+ 0x001071b0, 0x4df00000, 0x4200b000, 0x000007f0,
+ 0x417a8800, 0x83440400, 0x0010c880, 0x50000000,
+ 0x80026d40, 0x04000024, 0x59340013, 0x80000130,
+ 0x81200580, 0x04020020, 0x42028000, 0x00000029,
+ 0x0201f800, 0x00110a68, 0x0201f800, 0x00110b49,
+ 0x0201f800, 0x00110be2, 0x0201f800, 0x00111028,
0x8d3e7d1c, 0x04000005, 0x41240800, 0x0201f800,
- 0x00104a94, 0x0401f00e, 0x8d3e7d06, 0x04000004,
- 0x59340200, 0x8c00050e, 0x04020009, 0x4937c857,
- 0x497a6c0b, 0x4a026c00, 0x00000707, 0x59240400,
- 0x8c00050a, 0x02020800, 0x001042dd, 0x81468800,
- 0x8058b040, 0x040207d8, 0x8d3e7d02, 0x0400001b,
- 0x4200b000, 0x00000010, 0x5924b809, 0x505c0000,
- 0x80026d40, 0x04000012, 0x59368c03, 0x0201f800,
- 0x00110363, 0x0201f800, 0x00110447, 0x0201f800,
- 0x001104e0, 0x0201f800, 0x00110916, 0x8d3e7d1c,
- 0x04020004, 0x0201f800, 0x001042dd, 0x0401f004,
- 0x41240800, 0x0201f800, 0x00104a94, 0x805cb800,
- 0x8058b040, 0x040207ea, 0x4d300000, 0x42028800,
- 0x0000ffff, 0x42026000, 0x0011152c, 0x4a02600a,
- 0x0010e23c, 0x0201f800, 0x00104d9c, 0x4926601c,
- 0x42028000, 0x00000029, 0x0201f800, 0x00110363,
- 0x0201f800, 0x00110916, 0x5c026000, 0x5c03e000,
- 0x02000800, 0x00106e2e, 0x5c00b800, 0x5c026800,
- 0x5c028800, 0x5c028000, 0x5c00b000, 0x1c01f000,
- 0x4807c857, 0x4c580000, 0x0201f800, 0x0010c0ca,
- 0x42001000, 0x0010cfd1, 0x58080200, 0x80040500,
- 0x48001200, 0x82081400, 0x0000000b, 0x8058b040,
- 0x040207fa, 0x5c00b000, 0x1c01f000, 0x4803c856,
- 0x4d440000, 0x4d340000, 0x4c580000, 0x4c5c0000,
- 0x4200b000, 0x00000010, 0x42028800, 0x000007f0,
- 0x5924b809, 0x83440580, 0x000007fe, 0x04000006,
- 0x505e6800, 0x813669c0, 0x04000003, 0x0201f800,
- 0x001042dd, 0x81468800, 0x805cb800, 0x8058b040,
- 0x040207f5, 0x5c00b800, 0x5c00b000, 0x5c026800,
- 0x5c028800, 0x1c01f000, 0x4923c857, 0x42028800,
+ 0x00104bed, 0x0401f010, 0x8d3e7d06, 0x04000004,
+ 0x59340200, 0x8c00050e, 0x0402000b, 0x4937c857,
+ 0x0201f800, 0x00104a61, 0x497a6c0b, 0x4a026c00,
+ 0x00000707, 0x59240400, 0x8c00050a, 0x02020800,
+ 0x001043ee, 0x81468800, 0x8058b040, 0x040207d6,
+ 0x8d3e7d02, 0x04000023, 0x4200b000, 0x00000010,
+ 0x5924b809, 0x505c0000, 0x80026d40, 0x0400001a,
+ 0x59368c03, 0x0201f800, 0x00110a68, 0x0201f800,
+ 0x00110b49, 0x0201f800, 0x00110be2, 0x0201f800,
+ 0x00111028, 0x8d3e7d1c, 0x0402000c, 0x83440580,
+ 0x000007fe, 0x04020006, 0x59340813, 0x82040d00,
+ 0xff000000, 0x48066813, 0x0401f007, 0x0201f800,
+ 0x001043ee, 0x0401f004, 0x41240800, 0x0201f800,
+ 0x00104bed, 0x805cb800, 0x8058b040, 0x040207e2,
+ 0x4d300000, 0x42028800, 0x0000ffff, 0x42026000,
+ 0x00111cec, 0x4a02600a, 0x0010e85a, 0x0201f800,
+ 0x00104f07, 0x4926601c, 0x42028000, 0x00000029,
+ 0x0201f800, 0x00110a68, 0x0201f800, 0x00111028,
+ 0x5c026000, 0x5c03e000, 0x02000800, 0x0010719d,
+ 0x5c00b800, 0x5c026800, 0x5c028800, 0x5c028000,
+ 0x5c00b000, 0x1c01f000, 0x4807c857, 0x4c580000,
+ 0x0201f800, 0x0010c621, 0x42001000, 0x0010d5ef,
+ 0x58080200, 0x80040500, 0x48001200, 0x82081400,
+ 0x0000000b, 0x8058b040, 0x040207fa, 0x5c00b000,
+ 0x1c01f000, 0x4803c856, 0x4d440000, 0x4d340000,
+ 0x4c580000, 0x4c5c0000, 0x4200b000, 0x00000010,
+ 0x42028800, 0x000007f0, 0x5924b809, 0x83440580,
+ 0x000007fe, 0x04000006, 0x505e6800, 0x813669c0,
+ 0x04000003, 0x0201f800, 0x001043ee, 0x81468800,
+ 0x805cb800, 0x8058b040, 0x040207f5, 0x5c00b800,
+ 0x5c00b000, 0x5c026800, 0x5c028800, 0x1c01f000,
+ 0x4923c857, 0x42028800, 0x000007fe, 0x42003000,
+ 0x00fffffe, 0x0201f800, 0x00104774, 0x04020013,
+ 0x599c0208, 0x48026c12, 0x4d2c0000, 0x417a5800,
+ 0x0201f800, 0x0010a1dd, 0x5c025800, 0x0400000b,
+ 0x59a8006c, 0x80000000, 0x4803506c, 0x59240200,
+ 0x84000550, 0x84000512, 0x48024a00, 0x82000540,
+ 0x00000001, 0x1c01f000, 0x80000580, 0x0401f7fe,
+ 0x4923c857, 0x4d300000, 0x4d440000, 0x42028800,
0x000007fe, 0x42003000, 0x00fffffe, 0x0201f800,
- 0x00104628, 0x04020013, 0x599c0208, 0x48026c12,
- 0x4d2c0000, 0x417a5800, 0x0201f800, 0x00109e27,
- 0x5c025800, 0x0400000b, 0x59a8005e, 0x80000000,
- 0x4803505e, 0x59240200, 0x84000550, 0x84000512,
- 0x48024a00, 0x82000540, 0x00000001, 0x1c01f000,
- 0x80000580, 0x0401f7fe, 0x4923c857, 0x4d300000,
- 0x4d440000, 0x42028800, 0x000007fe, 0x42003000,
- 0x00fffffe, 0x0201f800, 0x00104628, 0x04020021,
- 0x0201f800, 0x00107ef8, 0x0400001e, 0x497a6009,
- 0x4936600a, 0x4926601c, 0x4a026407, 0x00000001,
- 0x42000800, 0x00000003, 0x0201f800, 0x001045ea,
- 0x599c0208, 0x48026c12, 0x42027000, 0x00000002,
- 0x0201f800, 0x00020bc1, 0x59240200, 0x4927c857,
- 0x82000500, 0xffffff9d, 0x8400054e, 0x48024a00,
- 0x59a8021b, 0x82000500, 0xffffdafc, 0x8400054e,
- 0x4803521b, 0x5c028800, 0x5c026000, 0x1c01f000,
- 0x80000580, 0x0401f7fc, 0x4c580000, 0x0201f800,
- 0x0010c0ca, 0x485bc857, 0x41782800, 0x42002000,
- 0x0010cfd1, 0x58100200, 0x82000500, 0x00000003,
- 0x82000580, 0x00000003, 0x04020004, 0x82000540,
- 0x00000001, 0x0401f006, 0x80142800, 0x82102400,
- 0x0000000b, 0x8058b040, 0x040207f3, 0x5c00b000,
- 0x1c01f000, 0x0401f807, 0x42018800, 0x00000000,
+ 0x00104774, 0x04020021, 0x0201f800, 0x00108297,
+ 0x0400001e, 0x497a6009, 0x4936600a, 0x4926601c,
+ 0x4a026407, 0x00000001, 0x42000800, 0x00000003,
+ 0x0201f800, 0x00104736, 0x599c0208, 0x48026c12,
+ 0x42027000, 0x00000002, 0x0201f800, 0x00020b22,
+ 0x59240200, 0x4927c857, 0x82000500, 0xffffff9d,
+ 0x8400054e, 0x48024a00, 0x59a80221, 0x82000500,
+ 0xffffdafc, 0x8400054e, 0x48035221, 0x5c028800,
+ 0x5c026000, 0x1c01f000, 0x80000580, 0x0401f7fc,
+ 0x4c580000, 0x4807c857, 0x0201f800, 0x0010c621,
+ 0x41782800, 0x42002000, 0x0010d5ef, 0x58100200,
+ 0x80040500, 0x80040580, 0x04000008, 0x80142800,
+ 0x82102400, 0x0000000b, 0x8058b040, 0x040207f8,
+ 0x5c00b000, 0x1c01f000, 0x82000540, 0x00000001,
+ 0x0401f7fc, 0x0401f807, 0x42018800, 0x00000000,
0x04000003, 0x42018800, 0x00000001, 0x1c01f000,
- 0x4c580000, 0x0201f800, 0x0010c0ca, 0x42001000,
- 0x0010cfd1, 0x58080200, 0x8c00051a, 0x04020005,
+ 0x4c580000, 0x0201f800, 0x0010c621, 0x42001000,
+ 0x0010d5ef, 0x58080200, 0x8c00051a, 0x04020005,
0x82081400, 0x0000000b, 0x8058b040, 0x040207fa,
0x5c00b000, 0x1c01f000, 0x00007eef, 0x00007de8,
0x00007ce4, 0x000080e2, 0x00007be1, 0x000080e0,
@@ -16781,154 +2246,155 @@ static const uint32_t isp_2400_multi_risc_code[] = {
0x00008000, 0x00008000, 0x00008000, 0x00008000,
0x00008000, 0x00008000, 0x00008000, 0x00008000,
0x00008000, 0x00008000, 0x00008000, 0x00008000,
- 0x00008000, 0x00008000, 0x0201f800, 0x0010056e,
- 0x02000800, 0x0010032e, 0x492f4017, 0x1c01f000,
- 0x83a0ac00, 0x00000007, 0x83a00580, 0x0010caff,
+ 0x00008000, 0x00008000, 0x0201f800, 0x00100584,
+ 0x02000800, 0x0010032f, 0x492f4017, 0x1c01f000,
+ 0x83a0ac00, 0x00000007, 0x83a00580, 0x0010d115,
0x0400000c, 0x492fc857, 0x812e59c0, 0x02000800,
- 0x0010032e, 0x832ca400, 0x00000007, 0x4200b000,
- 0x0000000d, 0x0201f800, 0x0010c086, 0x0401f00f,
+ 0x0010032f, 0x832ca400, 0x00000007, 0x4200b000,
+ 0x0000000d, 0x0201f800, 0x0010c5dd, 0x0401f00f,
0x4200b000, 0x00000010, 0x83e0a400, 0x00000020,
0x50500000, 0x8050a000, 0x50500800, 0x900409c0,
0x80040540, 0x4400a800, 0x8050a000, 0x8054a800,
- 0x8058b040, 0x040207f7, 0x1c01f000, 0x59a00207,
- 0x82000c80, 0x0000007f, 0x040210bf, 0x0c01f001,
- 0x001022c6, 0x001022fd, 0x001022fd, 0x0010234c,
- 0x00102368, 0x001022fd, 0x001022c6, 0x00102384,
- 0x00102395, 0x001022fd, 0x001022fd, 0x001023a7,
- 0x001023bf, 0x001023d7, 0x001022fd, 0x001023fe,
- 0x00102428, 0x001022fd, 0x00102451, 0x001022fd,
- 0x0010251d, 0x001022fd, 0x001022fd, 0x001022fd,
- 0x001022fd, 0x00102548, 0x001025ab, 0x001022fd,
- 0x001022fd, 0x001022fd, 0x001022fd, 0x001022fd,
- 0x00102606, 0x001022fd, 0x00102661, 0x001022fd,
- 0x001022fd, 0x001022fd, 0x001022fd, 0x00102666,
- 0x001026f7, 0x001022fd, 0x001026ff, 0x001022fd,
- 0x001022fd, 0x001022fd, 0x001022fd, 0x001022fd,
- 0x00102701, 0x0010278a, 0x00102965, 0x001022fd,
- 0x001022fd, 0x001022fd, 0x001022fd, 0x001022fd,
- 0x00102974, 0x001022fd, 0x00102991, 0x001022fd,
- 0x001022fd, 0x001022fd, 0x001022fd, 0x001022fd,
- 0x001029bc, 0x00102a0f, 0x00102a6b, 0x00102a89,
- 0x0010f714, 0x0010fd05, 0x00102ad5, 0x001022fd,
- 0x00103025, 0x00102c2c, 0x00102c73, 0x001022fd,
- 0x001022fd, 0x001022fd, 0x001022fd, 0x001022fd,
- 0x001022fd, 0x001022fd, 0x001022fd, 0x00102c98,
- 0x00102d0c, 0x001022fd, 0x001022fd, 0x00102d7a,
- 0x001022fd, 0x00102e1d, 0x00102ecd, 0x001022fd,
- 0x001022fd, 0x00102f5f, 0x00102fc9, 0x001022fd,
- 0x00103025, 0x001032be, 0x001022fd, 0x001032d2,
- 0x0010335d, 0x001022fd, 0x001022fd, 0x001022fd,
- 0x001022fd, 0x001033c3, 0x001033d5, 0x001033f8,
- 0x001022fd, 0x0010349a, 0x001022fd, 0x001022fd,
- 0x001034e2, 0x001022fd, 0x00103516, 0x001022fd,
- 0x001022fd, 0x0010357d, 0x001036dc, 0x00103739,
- 0x001022fd, 0x0010379b, 0x001022fd, 0x001022fd,
- 0x001037f0, 0x00103883, 0x001022fd, 0x48efc857,
- 0x4031d800, 0x58ef400a, 0x58ec0002, 0x82000580,
- 0x00000200, 0x0400003c, 0x48efc857, 0x4a034207,
- 0x00004000, 0x0201f800, 0x0010397b, 0x83a00580,
- 0x0010caff, 0x0400000e, 0x58ee5809, 0x4d2c0000,
- 0x0401f84d, 0x41a25800, 0x0201f800, 0x00100594,
- 0x40ee5800, 0x0201f800, 0x00100594, 0x5c025800,
- 0x492fc857, 0x0201f000, 0x000203ef, 0x04026007,
- 0x59a0001e, 0x84000542, 0x4803401e, 0x4a01d808,
- 0x001022db, 0x1c01f000, 0x59a00207, 0x82000d80,
- 0x00004000, 0x04000006, 0x900001c0, 0x82000540,
- 0x00000011, 0x4803c011, 0x0401f005, 0x900001c0,
- 0x82000540, 0x00000010, 0x4803c011, 0x0401f841,
- 0x4a03c017, 0x00000000, 0x4203e000, 0x30000001,
- 0x4203e000, 0x40000000, 0x40ee5800, 0x0201f800,
- 0x00100594, 0x59a0001e, 0x84000504, 0x4803401e,
- 0x1c01f000, 0x4803c856, 0x4a034207, 0x00004001,
- 0x0401f7c9, 0x4803c856, 0x4a034207, 0x00004002,
- 0x0401f7c5, 0x4803c856, 0x4a034207, 0x00004003,
- 0x0401f7c1, 0x4803c856, 0x4a034207, 0x00004005,
- 0x0401f7bd, 0x4803c856, 0x4a034207, 0x00004006,
- 0x0401f7b9, 0x4803c856, 0x4a034207, 0x0000400b,
- 0x0401f7b5, 0x4803c856, 0x4a034207, 0x0000400c,
- 0x0401f7b1, 0x4803c856, 0x4a034207, 0x0000400c,
- 0x0401f7ad, 0x4c580000, 0x4c500000, 0x4c540000,
- 0x58eca809, 0x8054a9c0, 0x02000800, 0x0010032e,
- 0x83a0a400, 0x00000007, 0x8254ac00, 0x00000007,
- 0x4200b000, 0x0000000d, 0x0201f800, 0x0010c086,
- 0x5c00a800, 0x5c00a000, 0x5c00b000, 0x1c01f000,
- 0x4c580000, 0x4c500000, 0x4c540000, 0x59a00007,
- 0x4803c857, 0x59a00008, 0x4803c857, 0x59a00009,
- 0x4803c857, 0x83e0ac00, 0x00000020, 0x83a0a400,
- 0x00000007, 0x4200b000, 0x00000010, 0x50500000,
- 0x4400a800, 0x8054a800, 0x900001c0, 0x4400a800,
- 0x8054a800, 0x8050a000, 0x8058b040, 0x040207f8,
- 0x5c00a800, 0x5c00a000, 0x5c00b000, 0x1c01f000,
- 0x59a00407, 0x800000c2, 0x59a00a08, 0x900409c0,
- 0x80040540, 0x84000540, 0x59a00c08, 0x8c040d00,
- 0x04000012, 0x59a80870, 0x8c040d00, 0x040207b6,
- 0x4c000000, 0x0201f800, 0x0010c0d6, 0x5c000000,
- 0x04000005, 0x48030004, 0x4a030000, 0x00000000,
- 0x0401f766, 0x4a030000, 0x00000000, 0x4a034407,
- 0x00000004, 0x040007a4, 0x4803880e, 0x0401f75f,
- 0x59a00407, 0x800000c2, 0x59a00c08, 0x8c040d00,
- 0x04000014, 0x59a80870, 0x8c040d00, 0x0402079e,
- 0x4c000000, 0x0201f800, 0x0010c0d6, 0x5c000000,
- 0x04000007, 0x48030004, 0x59800805, 0x48074407,
- 0x4a030000, 0x00000000, 0x0401f74c, 0x4a030000,
- 0x00000000, 0x4a034407, 0x00000004, 0x0400078a,
- 0x4803880e, 0x59c4080f, 0x48074407, 0x0401f743,
- 0x59a01c07, 0x59a00208, 0x900c19c0, 0x800c1d40,
- 0x580c0803, 0x80000580, 0x500c1000, 0x80080400,
- 0x800c1800, 0x80040840, 0x040207fc, 0x48034407,
- 0x900001c0, 0x48034208, 0x800001c0, 0x04000733,
- 0x0401f771, 0x4a034407, 0x00000005, 0x4a034208,
- 0x00000005, 0x4a034408, 0x00000000, 0x59a8000a,
- 0x48034209, 0x900001c0, 0x48034409, 0x42000000,
- 0x00009496, 0x4803420a, 0x900001c0, 0x4803440e,
- 0x4a03400f, 0x00000000, 0x0401f720, 0x59a00408,
+ 0x8058b040, 0x040207f7, 0x1c01f000, 0x42000000,
+ 0x0010d4a6, 0x0201f800, 0x0010c50d, 0x59a00207,
+ 0x82000c80, 0x0000007f, 0x040210bc, 0x0c01f001,
+ 0x00102357, 0x0010238e, 0x0010238e, 0x001023dd,
+ 0x001023f9, 0x0010238e, 0x00102357, 0x00102417,
+ 0x00102428, 0x0010238e, 0x0010238e, 0x0010243b,
+ 0x00102453, 0x0010246b, 0x0010238e, 0x00102492,
+ 0x001024bc, 0x0010238e, 0x001024e5, 0x0010238e,
+ 0x001025b1, 0x0010238e, 0x0010238e, 0x0010238e,
+ 0x0010238e, 0x001025dd, 0x00102640, 0x0010238e,
+ 0x0010238e, 0x0010238e, 0x0010238e, 0x0010238e,
+ 0x0010269e, 0x0010238e, 0x001026f9, 0x0010238e,
+ 0x0010238e, 0x0010238e, 0x0010238e, 0x001026fe,
+ 0x0010278f, 0x0010238e, 0x00102797, 0x0010238e,
+ 0x0010238e, 0x0010238e, 0x0010238e, 0x0010238e,
+ 0x00102799, 0x0010281b, 0x001029e8, 0x0010238e,
+ 0x0010238e, 0x0010238e, 0x0010238e, 0x0010238e,
+ 0x001029f7, 0x0010238e, 0x00102a19, 0x0010238e,
+ 0x0010238e, 0x0010238e, 0x0010238e, 0x0010238e,
+ 0x00102a44, 0x00102a9b, 0x00102afb, 0x00102b19,
+ 0x0010fe16, 0x00110407, 0x00102b65, 0x0010238e,
+ 0x001030bf, 0x00102ce7, 0x00102d2a, 0x0010238e,
+ 0x0010238e, 0x0010238e, 0x0010238e, 0x0010238e,
+ 0x0010238e, 0x0010238e, 0x0010238e, 0x00102d4f,
+ 0x00102db7, 0x0010238e, 0x0010238e, 0x00102e1d,
+ 0x0010238e, 0x00102ebc, 0x00102f62, 0x0010238e,
+ 0x0010238e, 0x00102ff9, 0x00103063, 0x0010238e,
+ 0x001030bf, 0x00103357, 0x0010238e, 0x0010336b,
+ 0x001033f6, 0x0010238e, 0x0010238e, 0x0010238e,
+ 0x0010238e, 0x0010346c, 0x0010347e, 0x001034a1,
+ 0x0010238e, 0x00103540, 0x0010238e, 0x0010238e,
+ 0x0010358d, 0x0010238e, 0x001035c1, 0x0010238e,
+ 0x0010238e, 0x0010362d, 0x00103786, 0x001037e3,
+ 0x0010238e, 0x00103842, 0x0010238e, 0x0010238e,
+ 0x00103897, 0x0010392a, 0x0010238e, 0x48efc857,
+ 0x0201f800, 0x00102ff3, 0x0400003c, 0x48efc857,
+ 0x4a034207, 0x00004000, 0x0201f800, 0x00103a19,
+ 0x83a00580, 0x0010d115, 0x0400000e, 0x58ee5809,
+ 0x4d2c0000, 0x0401f84d, 0x41a25800, 0x0201f800,
+ 0x001005aa, 0x40ee5800, 0x0201f800, 0x001005aa,
+ 0x5c025800, 0x492fc857, 0x0201f000, 0x00020401,
+ 0x04026007, 0x59a0001e, 0x84000542, 0x4803401e,
+ 0x4a01d808, 0x0010236c, 0x1c01f000, 0x59a00207,
+ 0x82000d80, 0x00004000, 0x04000006, 0x900001c0,
+ 0x82000540, 0x00000011, 0x4803c011, 0x0401f005,
+ 0x900001c0, 0x82000540, 0x00000010, 0x4803c011,
+ 0x0401f841, 0x4a03c017, 0x00000000, 0x4203e000,
+ 0x30000001, 0x4203e000, 0x40000000, 0x40ee5800,
+ 0x0201f800, 0x001005aa, 0x59a0001e, 0x84000504,
+ 0x4803401e, 0x1c01f000, 0x4803c856, 0x4a034207,
+ 0x00004001, 0x0401f7c9, 0x4803c856, 0x4a034207,
+ 0x00004002, 0x0401f7c5, 0x4803c856, 0x4a034207,
+ 0x00004003, 0x0401f7c1, 0x4803c856, 0x4a034207,
+ 0x00004005, 0x0401f7bd, 0x4803c856, 0x4a034207,
+ 0x00004006, 0x0401f7b9, 0x4803c856, 0x4a034207,
+ 0x0000400b, 0x0401f7b5, 0x4803c856, 0x4a034207,
+ 0x0000400c, 0x0401f7b1, 0x4803c856, 0x4a034207,
+ 0x0000400c, 0x0401f7ad, 0x4c580000, 0x4c500000,
+ 0x4c540000, 0x58eca809, 0x8054a9c0, 0x02000800,
+ 0x0010032f, 0x83a0a400, 0x00000007, 0x8254ac00,
+ 0x00000007, 0x4200b000, 0x0000000d, 0x0201f800,
+ 0x0010c5dd, 0x5c00a800, 0x5c00a000, 0x5c00b000,
+ 0x1c01f000, 0x4c580000, 0x4c500000, 0x4c540000,
+ 0x59a00007, 0x4803c857, 0x59a00008, 0x4803c857,
+ 0x59a00009, 0x4803c857, 0x83e0ac00, 0x00000020,
+ 0x83a0a400, 0x00000007, 0x4200b000, 0x00000010,
+ 0x50500000, 0x4400a800, 0x8054a800, 0x900001c0,
+ 0x4400a800, 0x8054a800, 0x8050a000, 0x8058b040,
+ 0x040207f8, 0x5c00a800, 0x5c00a000, 0x5c00b000,
+ 0x1c01f000, 0x59a00407, 0x800000c2, 0x59a00a08,
+ 0x900409c0, 0x80040540, 0x84000540, 0x59a00c08,
+ 0x8c040d00, 0x04000012, 0x59a8087e, 0x8c040d00,
+ 0x040207b6, 0x4c000000, 0x0201f800, 0x0010c62d,
+ 0x5c000000, 0x04000005, 0x48030004, 0x4a030000,
+ 0x00000000, 0x0401f766, 0x4a030000, 0x00000000,
+ 0x4a034407, 0x00000004, 0x040007a4, 0x4803880e,
+ 0x0401f75f, 0x59a00407, 0x800000c2, 0x59a00c08,
+ 0x8c040d00, 0x04000014, 0x59a8087e, 0x8c040d00,
+ 0x0402079e, 0x4c000000, 0x0201f800, 0x0010c62d,
+ 0x5c000000, 0x04000007, 0x48030004, 0x59800805,
+ 0x48074407, 0x4a030000, 0x00000000, 0x0401f74c,
+ 0x4a030000, 0x00000000, 0x4a034407, 0x00000004,
+ 0x0400078a, 0x4803880e, 0x59c4080f, 0x48074407,
+ 0x900409c0, 0x48074208, 0x0401f741, 0x59a01c07,
+ 0x59a00208, 0x900c19c0, 0x800c1d40, 0x580c0803,
+ 0x80000580, 0x500c1000, 0x80080400, 0x800c1800,
+ 0x80040840, 0x040207fc, 0x48034407, 0x900001c0,
+ 0x48034208, 0x800001c0, 0x04000731, 0x0401f76f,
+ 0x4a034407, 0x00000007, 0x4a034208, 0x00000003,
+ 0x4a034408, 0x00000000, 0x59a8000a, 0x48034209,
+ 0x900001c0, 0x48034409, 0x42000000, 0x00009496,
+ 0x4803420a, 0x900001c0, 0x4803440e, 0x42000000,
+ 0x00000000, 0x4803400f, 0x0401f71d, 0x59a00408,
0x59a01208, 0x900811c0, 0x80081540, 0x59a0040a,
0x59a01a0a, 0x900c19c0, 0x800c1d40, 0x59a00a09,
0x59a00409, 0x900409c0, 0x80040d40, 0x59a0020b,
- 0x82002480, 0x00000010, 0x04001757, 0x59a02407,
- 0x900001c0, 0x80100540, 0x59a8280a, 0x80142480,
- 0x04001751, 0x0201f000, 0x0010398a, 0x59a00408,
+ 0x59a02407, 0x900001c0, 0x80100540, 0x82002480,
+ 0x00100000, 0x04001751, 0x59a8280a, 0x80142480,
+ 0x0400174e, 0x0201f000, 0x00103a28, 0x59a00408,
0x59a01208, 0x900811c0, 0x80081540, 0x59a0040a,
0x59a01a0a, 0x900c19c0, 0x800c1d40, 0x59a00a09,
0x59a00409, 0x900409c0, 0x80040d40, 0x59a0020b,
- 0x82002480, 0x00000010, 0x0400173f, 0x59a02407,
- 0x900001c0, 0x80100540, 0x59a8280a, 0x80142480,
- 0x04001739, 0x0201f000, 0x00103993, 0x59a02408,
+ 0x59a02407, 0x900001c0, 0x80100540, 0x82002480,
+ 0x00100000, 0x04001739, 0x59a8280a, 0x80142480,
+ 0x04001736, 0x0201f000, 0x00103a35, 0x59a02408,
0x59a00208, 0x901021c0, 0x80102540, 0x59a01a0b,
0x59a00407, 0x900c19c0, 0x800c1d40, 0x41781000,
0x42000000, 0x00001000, 0x50000000, 0x82000480,
0x24320001, 0x0400100e, 0x820c0580, 0x00007c00,
0x0400000b, 0x820c0480, 0x00007a00, 0x04001008,
0x820c0480, 0x00007cff, 0x04021005, 0x0201f800,
- 0x0010c0d6, 0x04000008, 0x80081000, 0x44101800,
- 0x800811c0, 0x040006d1, 0x4a030000, 0x00000000,
- 0x0401f6ce, 0x4a030000, 0x00000000, 0x4a034407,
- 0x00000004, 0x0401f70c, 0x59a01a0b, 0x59a00407,
+ 0x0010c62d, 0x04000008, 0x80081000, 0x44101800,
+ 0x800811c0, 0x040006ce, 0x4a030000, 0x00000000,
+ 0x0401f6cb, 0x4a030000, 0x00000000, 0x4a034407,
+ 0x00000004, 0x0401f709, 0x59a01a0b, 0x59a00407,
0x900c19c0, 0x800c1d40, 0x41781000, 0x42000000,
0x00001000, 0x50000000, 0x82000480, 0x24320001,
0x0400100e, 0x820c0580, 0x00007c00, 0x0400000b,
0x820c0480, 0x00007a00, 0x04001008, 0x820c0480,
- 0x00007cff, 0x04021005, 0x0201f800, 0x0010c0d6,
+ 0x00007cff, 0x04021005, 0x0201f800, 0x0010c62d,
0x0400000f, 0x80081000, 0x500c0000, 0x82000d00,
0x0000ffff, 0x48074208, 0x82000d00, 0xffff0000,
- 0x900409c0, 0x48074408, 0x800811c0, 0x040006a7,
- 0x4a030000, 0x00000000, 0x0401f6a4, 0x4a030000,
- 0x00000000, 0x4a034407, 0x00000004, 0x0401f6e2,
+ 0x900409c0, 0x48074408, 0x800811c0, 0x040006a4,
+ 0x4a030000, 0x00000000, 0x0401f6a1, 0x4a030000,
+ 0x00000000, 0x4a034407, 0x00000004, 0x0401f6df,
0x59a00407, 0x8c000500, 0x04000020, 0x59a01208,
- 0x59a01c08, 0x59a02209, 0x480b5044, 0x480f5045,
- 0x48135046, 0x59c40801, 0x82040d00, 0x00018000,
+ 0x59a01c08, 0x59a02209, 0x480b504a, 0x480f504b,
+ 0x4813504c, 0x59c40801, 0x82040d00, 0x00018000,
0x82040580, 0x00000000, 0x04000009, 0x82040580,
0x00008000, 0x04000008, 0x82040580, 0x00010000,
- 0x04000007, 0x0201f800, 0x0010032e, 0x40080000,
+ 0x04000007, 0x0201f800, 0x0010032f, 0x40080000,
0x0401f004, 0x400c0000, 0x0401f002, 0x40100000,
0x80000110, 0x42000800, 0x000000e0, 0x0201f800,
- 0x00101949, 0x0401f007, 0x59a81044, 0x59a81845,
- 0x59a82046, 0x480b4208, 0x480f4408, 0x48134209,
- 0x0401f676, 0x4d2c0000, 0x4d340000, 0x4d300000,
- 0x4d440000, 0x0201f800, 0x00103a70, 0x04020007,
+ 0x001019b7, 0x0401f007, 0x59a8104a, 0x59a8184b,
+ 0x59a8204c, 0x480b4208, 0x480f4408, 0x48134209,
+ 0x0401f673, 0x4d2c0000, 0x4d340000, 0x4d300000,
+ 0x4d440000, 0x0201f800, 0x00103b10, 0x04020007,
0x4923c857, 0x4927c857, 0x59a28c07, 0x0201f800,
- 0x00104a7c, 0x04000006, 0x5c028800, 0x5c026000,
- 0x5c026800, 0x5c025800, 0x0401f6ab, 0x4937c857,
+ 0x00104bd5, 0x04000006, 0x5c028800, 0x5c026000,
+ 0x5c026800, 0x5c025800, 0x0401f6a8, 0x4937c857,
0x59a04408, 0x59a00208, 0x900001c0, 0x80204540,
0x4823c857, 0x0401f88a, 0x04000009, 0x4a034209,
0x00000001, 0x4a034407, 0x0000ffff, 0x4a034208,
@@ -16936,7 +2402,7 @@ static const uint32_t isp_2400_multi_risc_code[] = {
0x0401f88b, 0x0400004d, 0x59300402, 0x48034407,
0x59300202, 0x48034208, 0x59300006, 0x48034408,
0x59a0020c, 0x8c000500, 0x0400003d, 0x4933c857,
- 0x0201f800, 0x00104a2f, 0x04000004, 0x4a034407,
+ 0x0201f800, 0x00104b88, 0x04000004, 0x4a034407,
0x00000009, 0x0401f03d, 0x8d0e1d0e, 0x04000004,
0x4a034407, 0x00000001, 0x0401f038, 0x836c0580,
0x00000003, 0x04000004, 0x4a034407, 0x00000007,
@@ -16945,105 +2411,106 @@ static const uint32_t isp_2400_multi_risc_code[] = {
0x82000d80, 0x00000003, 0x04020009, 0x59300804,
0x82040500, 0x0000001f, 0x82000580, 0x00000004,
0x04020003, 0x8c040d3e, 0x04020019, 0x0201f800,
- 0x00103966, 0x04020004, 0x4a034407, 0x00000002,
+ 0x00103a04, 0x04020004, 0x4a034407, 0x00000002,
0x0401f01a, 0x492fc857, 0x4a025c05, 0x00008000,
- 0x497a5a05, 0x497a5806, 0x0201f800, 0x0010a313,
+ 0x497a5a05, 0x497a5806, 0x0201f800, 0x0010a717,
0x04020004, 0x4a034407, 0x00000003, 0x0401f00f,
- 0x4a01d808, 0x001024c7, 0x5c028800, 0x5c026000,
+ 0x4a01d808, 0x0010255b, 0x5c028800, 0x5c026000,
0x5c026800, 0x5c025800, 0x1c01f000, 0x4a034209,
0x00000002, 0x5c028800, 0x5c026000, 0x5c026800,
- 0x5c025800, 0x0401f605, 0x5c028800, 0x5c026000,
- 0x5c026800, 0x5c025800, 0x0401f643, 0x492fc857,
+ 0x5c025800, 0x0401f602, 0x5c028800, 0x5c026000,
+ 0x5c026800, 0x5c025800, 0x0401f640, 0x492fc857,
0x4933c857, 0x497a6027, 0x592c0006, 0x82000580,
0x01000000, 0x04020004, 0x4a034407, 0x00000004,
- 0x0401f639, 0x4d2c0000, 0x832e5c00, 0x00000007,
+ 0x0401f636, 0x4d2c0000, 0x832e5c00, 0x00000007,
0x592c0000, 0x82000580, 0x02000000, 0x04020012,
0x4803c856, 0x4a034209, 0x00000004, 0x592c0804,
0x82040500, 0x0000ffff, 0x48034409, 0x80040920,
0x4807420a, 0x592c0805, 0x82040500, 0x0000ffff,
0x4803440a, 0x80040920, 0x4807420b, 0x5c025800,
- 0x0401f5de, 0x4803c856, 0x4a034209, 0x00000005,
+ 0x0401f5db, 0x4803c856, 0x4a034209, 0x00000005,
0x592c0801, 0x82040500, 0x0000ffff, 0x48034409,
0x80040920, 0x4807420a, 0x0401f7f5, 0x4937c857,
0x4823c857, 0x5934000f, 0x80001d40, 0x04000005,
0x580c0006, 0x80200580, 0x04020003, 0x81780000,
0x1c01f000, 0x580c0000, 0x0401f7f8, 0x4823c857,
- 0x4d2c0000, 0x42026000, 0x00111584, 0x59300407,
+ 0x4d2c0000, 0x42026000, 0x00111d44, 0x59300407,
0x82000d80, 0x00000003, 0x04000004, 0x82000d80,
0x00000006, 0x04020007, 0x59325809, 0x812e59c0,
0x04000004, 0x592c0006, 0x80200580, 0x0400000a,
0x83326400, 0x0000002c, 0x59a8000b, 0x81300480,
0x040017ef, 0x417a6000, 0x80000580, 0x5c025800,
0x1c01f000, 0x82000540, 0x00000001, 0x5c025800,
- 0x1c01f000, 0x83a00580, 0x0010caff, 0x040205de,
- 0x59a80070, 0x8c000500, 0x04020003, 0x4a030000,
- 0x00000000, 0x4a034207, 0x00004000, 0x4a03c011,
- 0x40000010, 0x0401fe07, 0x4a03c017, 0x00000000,
- 0x59e00002, 0x8c00051e, 0x04020008, 0x42000000,
- 0x00001000, 0x50000000, 0x82000480, 0x24320002,
- 0x02000000, 0x0002025f, 0x59a80078, 0x8c00053e,
- 0x0400000b, 0x42000800, 0x000000a0, 0x0201f800,
- 0x00101941, 0x82040540, 0x00000001, 0x42000800,
- 0x000000a0, 0x0201f800, 0x00101949, 0x4203e000,
- 0x30000001, 0x4203e000, 0x40000000, 0x0401f000,
- 0x59a00c07, 0x800409c0, 0x04000007, 0x836c0580,
- 0x00000000, 0x04000004, 0x4a034407, 0x0000001a,
- 0x0401f5b9, 0x42007000, 0x0010cb9b, 0x58381c01,
- 0x58382201, 0x58383202, 0x8c040d00, 0x0400000b,
- 0x59a01208, 0x82080500, 0x0000f003, 0x040205b2,
- 0x82080480, 0x00000841, 0x040215af, 0x82080480,
- 0x00000100, 0x040015ac, 0x40040000, 0x800c0540,
- 0x82000500, 0x00000028, 0x82000580, 0x00000028,
- 0x040005a5, 0x8c040d0a, 0x04000008, 0x59a03c08,
- 0x821c0480, 0x00000006, 0x0402159f, 0x821c0480,
- 0x00000001, 0x0400159c, 0x8c040d06, 0x04000003,
- 0x4a0378e4, 0x000c0000, 0x8c040d04, 0x04000004,
- 0x59e00002, 0x84000548, 0x4803c002, 0x8c040d02,
- 0x04000005, 0x42002800, 0x00007600, 0x4a002805,
- 0xd0000000, 0x40040000, 0x800c0540, 0x48007401,
- 0x8c040d00, 0x04000002, 0x48087201, 0x8c040d0a,
- 0x0400001f, 0x481c7202, 0x4c0c0000, 0x4c100000,
- 0x4c180000, 0x0201f800, 0x00106e41, 0x4df00000,
- 0x58383a02, 0x481fc857, 0x41780000, 0x801c3840,
- 0x800010c8, 0x82081400, 0x0000bf32, 0x4a001001,
- 0x00000000, 0x801c1c80, 0x04021003, 0x4a001001,
- 0x00000002, 0x80000000, 0x82001c80, 0x00000005,
- 0x040017f4, 0x5c03e000, 0x02000800, 0x00106e2e,
- 0x5c003000, 0x5c002000, 0x5c001800, 0x480f4407,
- 0x48134208, 0x481b4408, 0x0401f51c, 0x4d440000,
- 0x4d340000, 0x59a28c07, 0x0201f800, 0x00103a70,
- 0x0402000c, 0x0201f800, 0x00104a7c, 0x04020009,
- 0x0201f800, 0x00104a2f, 0x04000009, 0x4a034407,
- 0x00000009, 0x5c026800, 0x5c028800, 0x0401f54e,
- 0x5c026800, 0x5c028800, 0x0401f54f, 0x59a01208,
- 0x59a01c08, 0x5934400a, 0x82203d00, 0x0000e000,
- 0x801c391a, 0x8c081500, 0x04000024, 0x820c0d00,
- 0x00000007, 0x82040580, 0x00000000, 0x04000010,
- 0x82040580, 0x00000001, 0x0400000d, 0x82040580,
- 0x00000003, 0x0400000a, 0x82040580, 0x00000004,
- 0x04000007, 0x82040580, 0x00000013, 0x04000004,
+ 0x1c01f000, 0x83a00580, 0x0010d115, 0x02020000,
+ 0x00103b88, 0x59a8007e, 0x8c000500, 0x04020003,
+ 0x4a030000, 0x00000000, 0x4a034207, 0x00004000,
+ 0x4a03c011, 0x40000010, 0x0401fe03, 0x4a03c017,
+ 0x00000000, 0x59e00002, 0x8c00051e, 0x04020008,
+ 0x42000000, 0x00001000, 0x50000000, 0x82000480,
+ 0x24320002, 0x02000000, 0x00020261, 0x59a80086,
+ 0x8c00053e, 0x0400000b, 0x42000800, 0x000000a0,
+ 0x0201f800, 0x001019af, 0x82040540, 0x00000001,
+ 0x42000800, 0x000000a0, 0x0201f800, 0x001019b7,
+ 0x4203e000, 0x30000001, 0x4203e000, 0x40000000,
+ 0x0401f000, 0x59a00c07, 0x800409c0, 0x04000007,
+ 0x836c0580, 0x00000000, 0x04000004, 0x4a034407,
+ 0x0000001a, 0x0401f5b5, 0x42007000, 0x0010d1b1,
+ 0x58381c01, 0x58382201, 0x58383202, 0x8c040d00,
+ 0x0400000b, 0x59a01208, 0x82080500, 0x0000f003,
+ 0x040205ae, 0x82080480, 0x00000841, 0x040215ab,
+ 0x82080480, 0x00000100, 0x040015a8, 0x40040000,
+ 0x800c0540, 0x82000500, 0x00000028, 0x82000580,
+ 0x00000028, 0x040005a1, 0x8c040d0a, 0x04000008,
+ 0x59a03c08, 0x821c0480, 0x00000006, 0x0402159b,
+ 0x821c0480, 0x00000001, 0x04001598, 0x8c040d06,
+ 0x04000003, 0x4a0378e4, 0x000c0000, 0x8c040d04,
+ 0x04000004, 0x59e00002, 0x84000548, 0x4803c002,
+ 0x8c040d02, 0x04000005, 0x42002800, 0x00007600,
+ 0x4a002805, 0xd0000000, 0x40040000, 0x800c0540,
+ 0x48007401, 0x8c040d00, 0x04000002, 0x48087201,
+ 0x8c040d0a, 0x0400001f, 0x481c7202, 0x4c0c0000,
+ 0x4c100000, 0x4c180000, 0x0201f800, 0x001071b0,
+ 0x4df00000, 0x58383a02, 0x481fc857, 0x41780000,
+ 0x801c3840, 0x800010c8, 0x82081400, 0x0000bf32,
+ 0x4a001001, 0x00000000, 0x801c1c80, 0x04021003,
+ 0x4a001001, 0x00000002, 0x80000000, 0x82001c80,
+ 0x00000005, 0x040017f4, 0x5c03e000, 0x02000800,
+ 0x0010719d, 0x5c003000, 0x5c002000, 0x5c001800,
+ 0x480f4407, 0x48134208, 0x481b4408, 0x0401f518,
+ 0x4d440000, 0x4d340000, 0x59a28c07, 0x0201f800,
+ 0x00103b10, 0x0402000c, 0x0201f800, 0x00104bd5,
+ 0x04020009, 0x0201f800, 0x00104b88, 0x04000009,
+ 0x4a034407, 0x00000009, 0x5c026800, 0x5c028800,
+ 0x0401f54a, 0x5c026800, 0x5c028800, 0x0401f54b,
+ 0x59a01208, 0x59a01c08, 0x5934400a, 0x82203d00,
+ 0x0002e000, 0x801c391a, 0x8c081500, 0x04000027,
+ 0x820c0d00, 0x00000017, 0x82040580, 0x00000000,
+ 0x04000013, 0x82040580, 0x00000001, 0x04000010,
+ 0x82040580, 0x00000003, 0x0400000d, 0x82040580,
+ 0x00000004, 0x0400000a, 0x82040580, 0x00000013,
+ 0x04000007, 0x82040580, 0x00000005, 0x04000004,
0x4937c857, 0x42000800, 0x00000003, 0x82204500,
- 0xffff1fff, 0x800400da, 0x80200540, 0x4802680a,
- 0x4c080000, 0x4c1c0000, 0x0201f800, 0x00106e41,
- 0x0201f800, 0x00104d3f, 0x0201f800, 0x00106e2e,
+ 0xfffd1fff, 0x800400da, 0x80200540, 0x4802680a,
+ 0x4c080000, 0x4c1c0000, 0x0201f800, 0x001071b0,
+ 0x0201f800, 0x00104eaa, 0x0201f800, 0x0010719d,
0x5c003800, 0x5c001000, 0x481f4408, 0x5934400a,
0x82203d00, 0x0f000000, 0x801c3930, 0x8c081504,
0x04020012, 0x8c081502, 0x0400000c, 0x4823c857,
0x82204500, 0xf0ffffff, 0x59a01a09, 0x820c0d00,
0x0000000f, 0x800400f0, 0x8400056e, 0x80200540,
0x4802680a, 0x4803c857, 0x481f4209, 0x5c026800,
- 0x5c028800, 0x0401f4c5, 0x82204500, 0xf07fffff,
+ 0x5c028800, 0x0401f4be, 0x82204500, 0xf07fffff,
0x4822680a, 0x0401f7f9, 0x8d0e1d0e, 0x04000004,
- 0x4a034407, 0x00000001, 0x0401f4ff, 0x836c0580,
- 0x00000003, 0x04020016, 0x0201f800, 0x00103a70,
- 0x040204fd, 0x59240200, 0x8c000502, 0x0400004b,
- 0x59240005, 0x497b4407, 0x0201f800, 0x001050f7,
+ 0x4a034407, 0x00000001, 0x0401f4f8, 0x836c0580,
+ 0x00000003, 0x04020016, 0x0201f800, 0x00103b10,
+ 0x040204f6, 0x59240200, 0x8c000502, 0x0400004b,
+ 0x59240005, 0x497b4407, 0x0201f800, 0x001052aa,
0x0400000f, 0x82000d00, 0x00ffff00, 0x0402000c,
- 0x82000c00, 0x00102116, 0x50040800, 0x80040910,
+ 0x82000c00, 0x001021a6, 0x50040800, 0x80040910,
0x82041580, 0x00000080, 0x04020004, 0x4a034407,
- 0x00000007, 0x0401f4e4, 0x48074407, 0x82000d00,
+ 0x00000007, 0x0401f4dd, 0x48074407, 0x82000d00,
0x0000ffff, 0x48074208, 0x80000120, 0x48034408,
- 0x59a8021b, 0x82001500, 0x00003500, 0x480b440a,
+ 0x59a80221, 0x82001500, 0x00003500, 0x480b440a,
0x8c000502, 0x0400001f, 0x8c000506, 0x04000009,
0x82000d00, 0x0000000a, 0x82040d80, 0x0000000a,
0x04020004, 0x4a03420a, 0x00000001, 0x0401f022,
@@ -17052,998 +2519,1004 @@ static const uint32_t isp_2400_multi_risc_code[] = {
0x00000003, 0x0401f018, 0x8c000508, 0x04000009,
0x82000d00, 0x00000012, 0x82040d80, 0x00000012,
0x04020004, 0x4a03420a, 0x00000002, 0x0401f00e,
- 0x0201f800, 0x001050f7, 0x04020004, 0x4a03420a,
- 0x00000004, 0x0401f471, 0x8c000506, 0x04000004,
- 0x4a034407, 0x00000005, 0x0401f4af, 0x4a03420a,
- 0x00000000, 0x0401f469, 0x4a034407, 0x0000001b,
- 0x0401f4a9, 0x59a8002a, 0x48034408, 0x59a8002b,
- 0x4803420a, 0x0401f461, 0x42007800, 0x0010cfb9,
- 0x59a00407, 0x4803c857, 0x82000c80, 0x0000000a,
- 0x040214a1, 0x0c01f001, 0x001026e9, 0x00102681,
- 0x0010268f, 0x001026a2, 0x001026c3, 0x001026eb,
- 0x00102679, 0x00102679, 0x00102679, 0x00102679,
- 0x0010267a, 0x0401f494, 0x59a00208, 0x48007c01,
- 0x59a00408, 0x48007a01, 0x0201f800, 0x001003ea,
- 0x0401f069, 0x836c0580, 0x00000000, 0x04000486,
+ 0x0201f800, 0x001052aa, 0x04020004, 0x4a03420a,
+ 0x00000004, 0x0401f46a, 0x8c000506, 0x04000004,
+ 0x4a034407, 0x00000005, 0x0401f4a8, 0x4a03420a,
+ 0x00000000, 0x0401f462, 0x4a034407, 0x0000001b,
+ 0x0401f4a2, 0x59a80030, 0x48034408, 0x59a80031,
+ 0x4803420a, 0x0401f45a, 0x42007800, 0x0010d5d7,
+ 0x59a00407, 0x4803c857, 0x82000c80, 0x0000000c,
+ 0x0402149a, 0x0c01f001, 0x00102781, 0x00102719,
+ 0x00102727, 0x0010273a, 0x0010275b, 0x00102783,
+ 0x00102711, 0x00102711, 0x00102711, 0x00102711,
+ 0x00102712, 0x0401f48d, 0x59a00208, 0x48007c01,
+ 0x59a00408, 0x48007a01, 0x0201f800, 0x001003f3,
+ 0x0401f069, 0x836c0580, 0x00000000, 0x0400047f,
0x59a00a08, 0x59a00408, 0x900001c0, 0x80040d40,
0x4807c857, 0x59a00a09, 0x59a00409, 0x900001c0,
0x80040d40, 0x4807c857, 0x0401f05b, 0x836c0580,
- 0x00000000, 0x04000478, 0x59a00408, 0x59a01208,
+ 0x00000000, 0x04000471, 0x59a00408, 0x59a01208,
0x900001c0, 0x80081540, 0x59a00409, 0x59a01a09,
- 0x900001c0, 0x800c1d40, 0x42000000, 0x0010e5cc,
+ 0x900001c0, 0x800c1d40, 0x42000000, 0x0010ebea,
0x480fc857, 0x480bc857, 0x42000800, 0x00001000,
- 0x0201f000, 0x00103993, 0x59a00a08, 0x59a00408,
- 0x900001c0, 0x80041d40, 0x820c0c80, 0x0010c1f9,
- 0x04021465, 0x820c0c80, 0x00100000, 0x04001462,
+ 0x0201f000, 0x00103a35, 0x59a00a08, 0x59a00408,
+ 0x900001c0, 0x80041d40, 0x820c0c80, 0x0010c798,
+ 0x0402145e, 0x820c0c80, 0x00100000, 0x0400145b,
0x480fc857, 0x823c7c00, 0x0000000d, 0x503c0800,
0x800409c0, 0x04000006, 0x823c0580, 0x00000011,
- 0x04000459, 0x803c7800, 0x0401f7f9, 0x59e41001,
+ 0x04000452, 0x803c7800, 0x0401f7f9, 0x59e41001,
0x82080d00, 0xfffeffcf, 0x4807c801, 0x440c7800,
0x46001800, 0x0201f800, 0x800c1800, 0x46001800,
- 0x0010031e, 0x480bc801, 0x0401f027, 0x59a01a08,
+ 0x0010031f, 0x480bc801, 0x0401f027, 0x59a01a08,
0x59a00408, 0x900001c0, 0x800c1d40, 0x480c7803,
0x59a02209, 0x59a00409, 0x900001c0, 0x80102540,
0x48107804, 0x59a0020a, 0x40001000, 0x48007807,
- 0x80000040, 0x0400143c, 0x48007808, 0x42000800,
- 0x00004000, 0x0201f800, 0x00106c7e, 0x80000540,
- 0x04000002, 0x0401f434, 0x40040000, 0x800c1c00,
- 0x04001431, 0x4800780a, 0x480c7805, 0x48107806,
+ 0x80000040, 0x04001435, 0x48007808, 0x42000800,
+ 0x00004000, 0x0201f800, 0x00106fe1, 0x80000540,
+ 0x04000002, 0x0401f42d, 0x40040000, 0x800c1c00,
+ 0x0400142a, 0x4800780a, 0x480c7805, 0x48107806,
0x4978780c, 0x59a0040a, 0x800000c4, 0x4800780b,
0x59e40001, 0x4803c857, 0x82000540, 0x00040000,
- 0x4803c801, 0x0201f000, 0x001022c6, 0x49787803,
+ 0x4803c801, 0x0201f000, 0x00102357, 0x49787803,
0x49787804, 0x49787808, 0x49787807, 0x49787803,
0x49787805, 0x49787806, 0x4978780c, 0x4978780b,
0x59e40001, 0x84000524, 0x0401f7f2, 0x59a80005,
0x48034407, 0x59a80006, 0x48034208, 0x59a80007,
- 0x48034408, 0x0201f000, 0x001022c6, 0x0201f800,
- 0x0010032e, 0x4803c856, 0x4a03c013, 0x03800300,
+ 0x48034408, 0x0201f000, 0x00102357, 0x0201f800,
+ 0x0010032f, 0x4803c856, 0x4a03c013, 0x03800300,
0x4a03c014, 0x03800380, 0x59a00c07, 0x82040580,
0x000000a0, 0x04000004, 0x82040580, 0x000000a2,
0x04020021, 0x59a0140b, 0x82080480, 0x00000100,
- 0x0402101d, 0x59a0020c, 0x8c000500, 0x04020026,
+ 0x0402101d, 0x59a0020c, 0x8c000500, 0x04020023,
0x59a00a0b, 0x800409c0, 0x04000017, 0x82040480,
- 0x00000041, 0x04021014, 0x0201f800, 0x00103966,
+ 0x00000041, 0x04021014, 0x0201f800, 0x00103a04,
0x0400000b, 0x59a01008, 0x900811c0, 0x59a0180a,
- 0x900c19c0, 0x59a00a0b, 0x0201f800, 0x0010398d,
- 0x4a01d808, 0x00102731, 0x1c01f000, 0x4a034407,
+ 0x900c19c0, 0x59a00a0b, 0x0201f800, 0x00103a2b,
+ 0x4a01d808, 0x001027c9, 0x1c01f000, 0x4a034407,
0x00000002, 0x4a03c014, 0x03800000, 0x0201f000,
- 0x00102309, 0x4a03c014, 0x03800000, 0x0201f000,
- 0x0010230d, 0x4031d800, 0x58ef400a, 0x58ee580c,
- 0x58ec0002, 0x82000580, 0x00000200, 0x02000000,
- 0x00102301, 0x59a00c07, 0x59a0140b, 0x59a0020c,
- 0x8c000500, 0x04020039, 0x832e5c00, 0x00000005,
- 0x4178c000, 0x59a0ba0b, 0x40600000, 0x812c0400,
- 0x5000c800, 0x82641d00, 0x000000ff, 0x4c040000,
- 0x4c080000, 0x0401f8c9, 0x5c001000, 0x5c000800,
- 0x04000038, 0x805cb840, 0x04000032, 0x80081000,
- 0x82641d00, 0x0000ff00, 0x800c1910, 0x4c040000,
- 0x4c080000, 0x0401f8bd, 0x5c001000, 0x5c000800,
- 0x0400002c, 0x805cb840, 0x04000026, 0x80081000,
- 0x82641d00, 0x00ff0000, 0x800c1920, 0x4c040000,
- 0x4c080000, 0x0401f8b1, 0x5c001000, 0x5c000800,
- 0x04000020, 0x805cb840, 0x0400001a, 0x80081000,
- 0x82641d00, 0xff000000, 0x800c1930, 0x4c040000,
- 0x4c080000, 0x0401f8a5, 0x5c001000, 0x5c000800,
- 0x04000014, 0x805cb840, 0x0400000e, 0x80081000,
- 0x8060c000, 0x0401f7cd, 0x59a0020b, 0x82000500,
- 0x000000ff, 0x40001800, 0x4c040000, 0x4c080000,
- 0x0401f896, 0x5c001000, 0x5c000800, 0x04000005,
- 0x4a03c014, 0x03800000, 0x0201f000, 0x001022c6,
- 0x4a03c014, 0x03800000, 0x4a034407, 0x00000004,
- 0x0201f000, 0x00102309, 0x4803c856, 0x59a80878,
- 0x8c040d3e, 0x04020005, 0x4a03c013, 0x03800300,
- 0x4a03c014, 0x03800380, 0x59a00c07, 0x82040580,
- 0x000000a0, 0x04000004, 0x82040580, 0x000000a2,
- 0x04020076, 0x59a0140b, 0x82080480, 0x00000100,
- 0x04021072, 0x59a0020c, 0x8c000500, 0x0402005d,
- 0x59a01a0b, 0x800c19c0, 0x0400006c, 0x820c0480,
- 0x00000041, 0x04021069, 0x0201f800, 0x00103966,
- 0x0402000b, 0x4a034407, 0x00000002, 0x59a80878,
- 0x8c040d3e, 0x04020003, 0x4a03c014, 0x03800000,
- 0x4803c857, 0x0201f000, 0x00102309, 0x59a80078,
- 0x8c00053e, 0x02020000, 0x0010b98e, 0x832e5c00,
- 0x00000005, 0x4178c000, 0x59a0ba0b, 0x4803c857,
- 0x40600000, 0x812c0400, 0x4000c800, 0x4c040000,
- 0x4c080000, 0x0401f887, 0x5c001000, 0x5c000800,
- 0x04000044, 0x4414c800, 0x805cb840, 0x0400002b,
- 0x80081000, 0x4c040000, 0x4c080000, 0x0401f87d,
- 0x5c001000, 0x5c000800, 0x0400003a, 0x50640000,
- 0x801428d0, 0x80140540, 0x4400c800, 0x805cb840,
- 0x0400001e, 0x80081000, 0x4c040000, 0x4c080000,
- 0x0401f870, 0x5c001000, 0x5c000800, 0x0400002d,
- 0x50640000, 0x801428e0, 0x80140540, 0x4400c800,
- 0x805cb840, 0x04000011, 0x80081000, 0x4c040000,
- 0x4c080000, 0x0401f863, 0x5c001000, 0x5c000800,
- 0x04000020, 0x50640000, 0x801428f0, 0x80140540,
- 0x4400c800, 0x805cb840, 0x04000004, 0x80081000,
- 0x8060c000, 0x0401f7ca, 0x59a00a0b, 0x59a01008,
- 0x900811c0, 0x59a0180a, 0x900c19c0, 0x4a03c014,
- 0x03800000, 0x412c0000, 0x0201f000, 0x00103990,
- 0x4803c857, 0x59a80078, 0x8c00053e, 0x02020000,
- 0x0010230d, 0x0401f847, 0x04000006, 0x48174407,
- 0x4a03c014, 0x03800000, 0x0201f000, 0x001022c6,
- 0x4a03c014, 0x03800000, 0x4a034407, 0x00000004,
- 0x0201f000, 0x00102309, 0x4a03c014, 0x03800000,
- 0x0201f000, 0x0010230d, 0x4c5c0000, 0x4c600000,
- 0x4c640000, 0x4004b800, 0x4008c000, 0x400cc800,
- 0x0401f87a, 0x04000012, 0x0401f8b2, 0x04020014,
- 0x4060b800, 0x0401f8af, 0x04020011, 0x4064b800,
- 0x0401f8ac, 0x0402000e, 0x0401f896, 0x4ce80000,
- 0x4201d000, 0x00001388, 0x0201f800, 0x00106661,
- 0x5c01d000, 0x82000540, 0x00000001, 0x5c00c800,
- 0x5c00c000, 0x5c00b800, 0x1c01f000, 0x0401f889,
- 0x80000580, 0x0401f7fa, 0x4c5c0000, 0x485fc857,
- 0x0401f85e, 0x0400000a, 0x825cbd40, 0x00000001,
- 0x0401f894, 0x0402000a, 0x0401f8dc, 0x0401f916,
- 0x0401f87c, 0x82000540, 0x00000001, 0x4803c857,
- 0x4867c857, 0x5c00b800, 0x1c01f000, 0x0401f875,
- 0x80000580, 0x4803c857, 0x485fc857, 0x0401f7f8,
- 0x4c5c0000, 0x4c600000, 0x4c640000, 0x4807c857,
- 0x480bc857, 0x4004b800, 0x4008c000, 0x0401f843,
- 0x0400000d, 0x0401f87b, 0x04020010, 0x4c5c0000,
- 0x4060b800, 0x0401f877, 0x5c00b800, 0x0402000b,
- 0x0401ffda, 0x04000004, 0x0401f85e, 0x82000540,
- 0x00000001, 0x40642800, 0x5c00c800, 0x5c00c000,
- 0x5c00b800, 0x1c01f000, 0x0401f856, 0x80000580,
- 0x4803c857, 0x4867c857, 0x0401f7f7, 0x4ce80000,
+ 0x0010239a, 0x4a03c014, 0x03800000, 0x0201f000,
+ 0x0010239e, 0x0201f800, 0x00102ff3, 0x02000000,
+ 0x00102392, 0x58ee580c, 0x59a00c07, 0x59a0140b,
+ 0x59a0020c, 0x8c000500, 0x04020039, 0x832e5c00,
+ 0x00000005, 0x4178c000, 0x59a0ba0b, 0x40600000,
+ 0x812c0400, 0x5000c800, 0x82641d00, 0x000000ff,
+ 0x4c040000, 0x4c080000, 0x0401f8c5, 0x5c001000,
+ 0x5c000800, 0x04000034, 0x805cb840, 0x0400002e,
+ 0x80081000, 0x82641d00, 0x0000ff00, 0x800c1910,
+ 0x4c040000, 0x4c080000, 0x0401f8b9, 0x5c001000,
+ 0x5c000800, 0x04000028, 0x805cb840, 0x04000022,
+ 0x80081000, 0x82641d00, 0x00ff0000, 0x800c1920,
+ 0x4c040000, 0x4c080000, 0x0401f8ad, 0x5c001000,
+ 0x5c000800, 0x0400001c, 0x805cb840, 0x04000016,
+ 0x80081000, 0x82641d00, 0xff000000, 0x800c1930,
+ 0x4c040000, 0x4c080000, 0x0401f8a1, 0x5c001000,
+ 0x5c000800, 0x04000010, 0x805cb840, 0x0400000a,
+ 0x80081000, 0x8060c000, 0x0401f7cd, 0x59a0020b,
+ 0x82000500, 0x000000ff, 0x40001800, 0x0401f894,
+ 0x04000005, 0x4a03c014, 0x03800000, 0x0201f000,
+ 0x00102357, 0x4a03c014, 0x03800000, 0x4a034407,
+ 0x00000004, 0x0201f000, 0x0010239a, 0x4803c856,
+ 0x59a80886, 0x8c040d3e, 0x04020005, 0x4a03c013,
+ 0x03800300, 0x4a03c014, 0x03800380, 0x59a00c07,
+ 0x82040580, 0x000000a0, 0x04000004, 0x82040580,
+ 0x000000a2, 0x04020076, 0x59a0140b, 0x82080480,
+ 0x00000100, 0x04021072, 0x59a0020c, 0x8c000500,
+ 0x0402005d, 0x59a01a0b, 0x800c19c0, 0x0400006c,
+ 0x820c0480, 0x00000041, 0x04021069, 0x0201f800,
+ 0x00103a04, 0x0402000b, 0x4a034407, 0x00000002,
+ 0x59a80886, 0x8c040d3e, 0x04020003, 0x4a03c014,
+ 0x03800000, 0x4803c857, 0x0201f000, 0x0010239a,
+ 0x59a80086, 0x8c00053e, 0x02020000, 0x0010bee3,
+ 0x832e5c00, 0x00000005, 0x4178c000, 0x59a0ba0b,
+ 0x4803c857, 0x40600000, 0x812c0400, 0x4000c800,
+ 0x4c040000, 0x4c080000, 0x0401f882, 0x5c001000,
+ 0x5c000800, 0x04000044, 0x4414c800, 0x805cb840,
+ 0x0400002b, 0x80081000, 0x4c040000, 0x4c080000,
+ 0x0401f878, 0x5c001000, 0x5c000800, 0x0400003a,
+ 0x50640000, 0x801428d0, 0x80140540, 0x4400c800,
+ 0x805cb840, 0x0400001e, 0x80081000, 0x4c040000,
+ 0x4c080000, 0x0401f86b, 0x5c001000, 0x5c000800,
+ 0x0400002d, 0x50640000, 0x801428e0, 0x80140540,
+ 0x4400c800, 0x805cb840, 0x04000011, 0x80081000,
+ 0x4c040000, 0x4c080000, 0x0401f85e, 0x5c001000,
+ 0x5c000800, 0x04000020, 0x50640000, 0x801428f0,
+ 0x80140540, 0x4400c800, 0x805cb840, 0x04000004,
+ 0x80081000, 0x8060c000, 0x0401f7ca, 0x59a00a0b,
+ 0x59a01008, 0x900811c0, 0x59a0180a, 0x900c19c0,
+ 0x4a03c014, 0x03800000, 0x412c0000, 0x0201f000,
+ 0x00103a2e, 0x4803c857, 0x59a80086, 0x8c00053e,
+ 0x02020000, 0x0010239e, 0x0401f842, 0x04000006,
+ 0x48174407, 0x4a03c014, 0x03800000, 0x0201f000,
+ 0x00102357, 0x4a03c014, 0x03800000, 0x4a034407,
+ 0x00000004, 0x0201f000, 0x0010239a, 0x4a03c014,
+ 0x03800000, 0x0201f000, 0x0010239e, 0x4c5c0000,
+ 0x4c600000, 0x4c640000, 0x4004b800, 0x4008c000,
+ 0x400cc800, 0x0401f870, 0x04000012, 0x0401f8a6,
+ 0x04020014, 0x4060b800, 0x0401f8a3, 0x04020011,
+ 0x4064b800, 0x0401f8a0, 0x0402000e, 0x0401f88b,
+ 0x4ce80000, 0x4201d000, 0x00001388, 0x0201f800,
+ 0x001069c8, 0x5c01d000, 0x82000540, 0x00000001,
+ 0x5c00c800, 0x5c00c000, 0x5c00b800, 0x1c01f000,
+ 0x0401f87e, 0x80000580, 0x0401f7fa, 0x4c5c0000,
+ 0x0401f855, 0x0400000a, 0x825cbd40, 0x00000001,
+ 0x0401f889, 0x04020008, 0x0401f8cf, 0x0401f909,
+ 0x0401f872, 0x82000540, 0x00000001, 0x5c00b800,
+ 0x1c01f000, 0x0401f86d, 0x80000580, 0x0401f7fc,
+ 0x4c5c0000, 0x4c600000, 0x4c640000, 0x4004b800,
+ 0x4008c000, 0x0401f840, 0x0400000d, 0x0401f876,
+ 0x04020010, 0x4c5c0000, 0x4060b800, 0x0401f872,
+ 0x5c00b800, 0x0402000b, 0x0401ffe1, 0x04000004,
+ 0x0401f85a, 0x82000540, 0x00000001, 0x40642800,
+ 0x5c00c800, 0x5c00c000, 0x5c00b800, 0x1c01f000,
+ 0x0401f852, 0x80000580, 0x0401f7f9, 0x4ce80000,
0x4c580000, 0x4803c856, 0x4200b000, 0x0000000c,
- 0x4201d000, 0x0000000a, 0x0201f800, 0x00106661,
+ 0x4201d000, 0x0000000a, 0x0201f800, 0x001069c8,
0x4a03c013, 0x02000200, 0x4201d000, 0x0000000a,
- 0x0201f800, 0x00106661, 0x4a03c013, 0x02000000,
+ 0x0201f800, 0x001069c8, 0x4a03c013, 0x02000000,
0x8058b040, 0x040207f3, 0x42000800, 0x000003e8,
0x4a03c013, 0x03800300, 0x80040840, 0x04000010,
0x4a03c014, 0x03800000, 0x59e00013, 0x4a03c014,
0x03800380, 0x82000500, 0x00000300, 0x82000580,
0x00000300, 0x040207f3, 0x82000540, 0x00000001,
- 0x5c00b000, 0x5c01d000, 0x1c01f000, 0x4803c857,
- 0x80000580, 0x0401f7fb, 0x4ce80000, 0x4803c856,
- 0x42000800, 0x000003e8, 0x4a03c013, 0x03800300,
- 0x80040840, 0x0400001b, 0x4a03c014, 0x03800000,
- 0x59e00013, 0x4a03c014, 0x03800380, 0x82000500,
- 0x00000300, 0x82000580, 0x00000300, 0x040207f3,
- 0x4201d000, 0x0000000a, 0x0201f800, 0x00106661,
- 0x4a03c013, 0x01000000, 0x4201d000, 0x0000000a,
- 0x0201f800, 0x00106661, 0x4a03c013, 0x02000000,
- 0x82000540, 0x00000001, 0x5c01d000, 0x1c01f000,
- 0x4803c857, 0x0401ffb2, 0x040207ee, 0x0401f7fb,
- 0x4803c856, 0x4a03c013, 0x01000000, 0x4ce80000,
- 0x4201d000, 0x0000000a, 0x0201f800, 0x00106661,
- 0x5c01d000, 0x4a03c013, 0x02000200, 0x4ce80000,
- 0x4201d000, 0x0000000a, 0x0201f800, 0x00106661,
- 0x5c01d000, 0x4a03c013, 0x01000100, 0x1c01f000,
- 0x4c5c0000, 0x4c600000, 0x485fc857, 0x4200c000,
+ 0x5c00b000, 0x5c01d000, 0x1c01f000, 0x80000580,
+ 0x0401f7fc, 0x4ce80000, 0x42000800, 0x000003e8,
+ 0x4a03c013, 0x03800300, 0x80040840, 0x0400001b,
+ 0x4a03c014, 0x03800000, 0x59e00013, 0x4a03c014,
+ 0x03800380, 0x82000500, 0x00000300, 0x82000580,
+ 0x00000300, 0x040207f3, 0x4201d000, 0x0000000a,
+ 0x0201f800, 0x001069c8, 0x4a03c013, 0x01000000,
+ 0x4201d000, 0x0000000a, 0x0201f800, 0x001069c8,
+ 0x4a03c013, 0x02000000, 0x82000540, 0x00000001,
+ 0x5c01d000, 0x1c01f000, 0x4803c857, 0x0401ffb4,
+ 0x040207ee, 0x0401f7fb, 0x4a03c013, 0x01000000,
+ 0x4ce80000, 0x4201d000, 0x0000000a, 0x0201f800,
+ 0x001069c8, 0x5c01d000, 0x4a03c013, 0x02000200,
+ 0x4ce80000, 0x4201d000, 0x0000000a, 0x0201f800,
+ 0x001069c8, 0x5c01d000, 0x4a03c013, 0x01000100,
+ 0x1c01f000, 0x4c5c0000, 0x4c600000, 0x4200c000,
0x00000008, 0x825c0500, 0x00000080, 0x800000c2,
0x82000540, 0x01000000, 0x4803c013, 0x4ce80000,
- 0x4201d000, 0x0000000a, 0x0201f800, 0x00106661,
+ 0x4201d000, 0x0000000a, 0x0201f800, 0x001069c8,
0x5c01d000, 0x4a03c013, 0x02000200, 0x4ce80000,
- 0x4201d000, 0x0000000a, 0x0201f800, 0x00106661,
+ 0x4201d000, 0x0000000a, 0x0201f800, 0x001069c8,
0x5c01d000, 0x4a03c013, 0x02000000, 0x805cb8c2,
0x8060c040, 0x040207e8, 0x4a03c013, 0x01000100,
0x4ce80000, 0x4201d000, 0x0000000a, 0x0201f800,
- 0x00106661, 0x5c01d000, 0x4a03c013, 0x02000200,
+ 0x001069c8, 0x5c01d000, 0x4a03c013, 0x02000200,
0x4ce80000, 0x4201d000, 0x0000000a, 0x0201f800,
- 0x00106661, 0x5c01d000, 0x4a03c014, 0x03800000,
+ 0x001069c8, 0x5c01d000, 0x4a03c014, 0x03800000,
0x42000800, 0x000003e8, 0x59e0b813, 0x825cbd00,
0x00000100, 0x80040840, 0x04000004, 0x405c0000,
0x80000540, 0x040207f9, 0x4a03c014, 0x03800380,
0x4a03c013, 0x02000000, 0x4ce80000, 0x4201d000,
- 0x0000000a, 0x0201f800, 0x00106661, 0x5c01d000,
- 0x485fc857, 0x405c0000, 0x80000540, 0x5c00c000,
- 0x5c00b800, 0x1c01f000, 0x4c600000, 0x4803c856,
- 0x4a03c013, 0x01000100, 0x4200c000, 0x00000008,
- 0x4200c800, 0x000003e8, 0x4ce80000, 0x4201d000,
- 0x0000000a, 0x0201f800, 0x00106661, 0x5c01d000,
- 0x4a03c013, 0x02000200, 0x4a03c014, 0x03800000,
- 0x59e00013, 0x4a03c014, 0x03800380, 0x82000500,
- 0x00000200, 0x04020003, 0x8064c840, 0x040207f7,
- 0x4178c800, 0x0401f009, 0x4ce80000, 0x4201d000,
- 0x0000000a, 0x0201f800, 0x00106661, 0x5c01d000,
- 0x4a03c013, 0x02000200, 0x4ce80000, 0x4201d000,
- 0x0000000a, 0x0201f800, 0x00106661, 0x5c01d000,
- 0x4a03c014, 0x03800000, 0x59e00013, 0x4a03c014,
- 0x03800380, 0x82000500, 0x00000100, 0x80000110,
- 0x8064c8c2, 0x8064cd40, 0x4a03c013, 0x02000000,
- 0x8060c040, 0x040207e5, 0x4867c857, 0x5c00c000,
- 0x1c01f000, 0x4803c856, 0x4a03c013, 0x01000100,
- 0x4ce80000, 0x4201d000, 0x0000000a, 0x0201f800,
- 0x00106661, 0x5c01d000, 0x4a03c013, 0x02000200,
- 0x4ce80000, 0x4201d000, 0x0000000a, 0x0201f800,
- 0x00106661, 0x5c01d000, 0x4a03c013, 0x02000000,
- 0x1c01f000, 0x59a00408, 0x59a8082a, 0x4803502a,
- 0x48074408, 0x59a00a0a, 0x82040480, 0x00000014,
- 0x04021003, 0x42000800, 0x000007d0, 0x59a8002b,
- 0x4807502b, 0x4803420a, 0x0201f000, 0x001022c6,
- 0x836c0580, 0x00000000, 0x0400000e, 0x59a80005,
- 0x59a00c07, 0x80041580, 0x82081500, 0x00000040,
- 0x02000000, 0x001022c6, 0x80080580, 0x48035005,
- 0x0201f800, 0x0010041a, 0x0201f000, 0x001022c6,
- 0x59a00407, 0x59a80805, 0x48035005, 0x80040d80,
- 0x8c040d0c, 0x02020800, 0x0010041a, 0x59a00208,
+ 0x0000000a, 0x0201f800, 0x001069c8, 0x5c01d000,
+ 0x405c0000, 0x80000540, 0x5c00c000, 0x5c00b800,
+ 0x1c01f000, 0x4c600000, 0x4803c856, 0x4a03c013,
+ 0x01000100, 0x4200c000, 0x00000008, 0x4200c800,
+ 0x000003e8, 0x4ce80000, 0x4201d000, 0x0000000a,
+ 0x0201f800, 0x001069c8, 0x5c01d000, 0x4a03c013,
+ 0x02000200, 0x4a03c014, 0x03800000, 0x59e00013,
+ 0x4a03c014, 0x03800380, 0x82000500, 0x00000200,
+ 0x04020003, 0x8064c840, 0x040207f7, 0x4178c800,
+ 0x0401f009, 0x4ce80000, 0x4201d000, 0x0000000a,
+ 0x0201f800, 0x001069c8, 0x5c01d000, 0x4a03c013,
+ 0x02000200, 0x4ce80000, 0x4201d000, 0x0000000a,
+ 0x0201f800, 0x001069c8, 0x5c01d000, 0x4a03c014,
+ 0x03800000, 0x59e00013, 0x4a03c014, 0x03800380,
+ 0x82000500, 0x00000100, 0x80000110, 0x8064c8c2,
+ 0x8064cd40, 0x4a03c013, 0x02000000, 0x8060c040,
+ 0x040207e5, 0x4867c857, 0x5c00c000, 0x1c01f000,
+ 0x4803c856, 0x4a03c013, 0x01000100, 0x4ce80000,
+ 0x4201d000, 0x0000000a, 0x0201f800, 0x001069c8,
+ 0x5c01d000, 0x4a03c013, 0x02000200, 0x4ce80000,
+ 0x4201d000, 0x0000000a, 0x0201f800, 0x001069c8,
+ 0x5c01d000, 0x4a03c013, 0x02000000, 0x1c01f000,
+ 0x59a00408, 0x59a80830, 0x48035030, 0x48074408,
+ 0x59a00a0a, 0x82040480, 0x00000014, 0x04021003,
+ 0x42000800, 0x000007d0, 0x59a80031, 0x48075031,
+ 0x4803420a, 0x0201f000, 0x00102357, 0x836c0580,
+ 0x00000000, 0x0400000e, 0x59a80005, 0x59a00c07,
+ 0x80041580, 0x82081500, 0x00000040, 0x02000000,
+ 0x00102357, 0x80080580, 0x48035005, 0x0201f800,
+ 0x00100423, 0x0201f000, 0x00102357, 0x59a00407,
+ 0x59a80805, 0x48035005, 0x80040d80, 0x8c040d12,
+ 0x04000004, 0x59c40001, 0x84000544, 0x48038801,
+ 0x8c040d0c, 0x02020800, 0x00100423, 0x59a00208,
0x48035006, 0x59a00408, 0x48035007, 0x0201f000,
- 0x001022c6, 0x59a80078, 0x8c00053e, 0x02000000,
- 0x001022fd, 0x59a00c07, 0x8c040d00, 0x04000021,
+ 0x00102357, 0x59a80086, 0x8c00053e, 0x02000000,
+ 0x0010238e, 0x59a00c07, 0x8c040d00, 0x04000021,
0x4a034407, 0x00000001, 0x8c000506, 0x02020000,
- 0x00102309, 0x4a034407, 0x00000009, 0x59aa6879,
- 0x0201f800, 0x00104a22, 0x02020000, 0x00102309,
- 0x4a034407, 0x00000003, 0x0201f800, 0x00020b7b,
- 0x02000000, 0x00102309, 0x48ee602a, 0x4a01d808,
- 0x001029b4, 0x4a026407, 0x00000012, 0x4936600a,
- 0x42027000, 0x000000d7, 0x0201f000, 0x00020bc1,
- 0x59a00407, 0x800001c0, 0x02020000, 0x00102309,
- 0x0201f800, 0x0010b8ac, 0x0201f000, 0x001022c6,
+ 0x0010239a, 0x4a034407, 0x00000009, 0x59aa6887,
+ 0x0201f800, 0x00104b7b, 0x02020000, 0x0010239a,
+ 0x4a034407, 0x00000003, 0x0201f800, 0x00020adc,
+ 0x02000000, 0x0010239a, 0x48ee602a, 0x4a01d808,
+ 0x00102a3c, 0x4a026407, 0x00000012, 0x4936600a,
+ 0x42027000, 0x000000d7, 0x0201f000, 0x00020b22,
+ 0x59a00407, 0x800001c0, 0x02020000, 0x0010239a,
+ 0x0201f800, 0x0010be01, 0x0201f000, 0x00102357,
0x8d0e1d0e, 0x04000005, 0x4a034407, 0x00000001,
- 0x0201f000, 0x00102309, 0x0201f800, 0x001050f7,
+ 0x0201f000, 0x0010239a, 0x0201f800, 0x001052aa,
0x04020005, 0x4a034407, 0x00000016, 0x0201f000,
- 0x00102309, 0x836c0580, 0x00000003, 0x04000005,
- 0x4a034407, 0x00000007, 0x0201f000, 0x00102309,
+ 0x0010239a, 0x836c0580, 0x00000003, 0x04000005,
+ 0x4a034407, 0x00000007, 0x0201f000, 0x0010239a,
0x59a00c07, 0x82040500, 0xffffff00, 0x02020000,
- 0x0010230d, 0x82041580, 0x000000ff, 0x04020007,
- 0x59a8000f, 0x82000500, 0x000000ff, 0x82001540,
- 0x0000ff00, 0x0401f011, 0x82040400, 0x00102116,
+ 0x0010239e, 0x82041580, 0x000000ff, 0x04020007,
+ 0x59a80015, 0x82000500, 0x000000ff, 0x82001540,
+ 0x0000ff00, 0x0401f011, 0x82040400, 0x001021a6,
0x50000000, 0x80000110, 0x82000580, 0x00000080,
- 0x02000000, 0x0010230d, 0x59a8000f, 0x82000500,
- 0x000000ff, 0x80041580, 0x02000000, 0x0010230d,
- 0x840409c0, 0x80041540, 0x0201f800, 0x00107ef8,
- 0x04020005, 0x4a034407, 0x00000003, 0x0201f000,
- 0x00102309, 0x48ee602a, 0x480a621d, 0x4a02641d,
- 0x0000bc09, 0x4a026407, 0x00000001, 0x0201f800,
- 0x00103966, 0x04020007, 0x0201f800, 0x00020b9d,
- 0x4a034407, 0x00000002, 0x0201f000, 0x00102309,
- 0x497a5a05, 0x497a5806, 0x4a025c05, 0x00008000,
- 0x4a01d808, 0x00102a62, 0x492e6009, 0x42027000,
- 0x00000032, 0x0201f000, 0x00020bc1, 0x8d0e1d0e,
+ 0x02000000, 0x0010239e, 0x59a80015, 0x82000500,
+ 0x000000ff, 0x80041580, 0x02000000, 0x0010239e,
+ 0x840409c0, 0x80041540, 0x4c080000, 0x0201f800,
+ 0x00108297, 0x5c001000, 0x04020005, 0x4a034407,
+ 0x00000003, 0x0201f000, 0x0010239a, 0x48ee602a,
+ 0x480a621d, 0x4a02641d, 0x0000bc09, 0x4a026407,
+ 0x00000001, 0x0201f800, 0x00103a04, 0x04020007,
+ 0x0201f800, 0x00020afe, 0x4a034407, 0x00000002,
+ 0x0201f000, 0x0010239a, 0x497a5a05, 0x4a02601c,
+ 0x0010d5ef, 0x497a5806, 0x4a025c05, 0x00008000,
+ 0x4a01d808, 0x00102af2, 0x492e6009, 0x42027000,
+ 0x00000032, 0x0201f000, 0x00020b22, 0x8d0e1d0e,
0x04000005, 0x4a034407, 0x00000001, 0x0201f000,
- 0x00102309, 0x0201f800, 0x001050f7, 0x04020005,
- 0x4a034407, 0x00000016, 0x0201f000, 0x00102309,
+ 0x0010239a, 0x0201f800, 0x001052aa, 0x04020005,
+ 0x4a034407, 0x00000016, 0x0201f000, 0x0010239a,
0x836c0580, 0x00000003, 0x04000005, 0x4a034407,
- 0x00000007, 0x0201f000, 0x00102309, 0x59a00c07,
- 0x82040500, 0xffffff00, 0x02020000, 0x0010230d,
- 0x82041580, 0x000000ff, 0x04020007, 0x59a8000f,
+ 0x00000007, 0x0201f000, 0x0010239a, 0x59a00c07,
+ 0x82040500, 0xffffff00, 0x02020000, 0x0010239e,
+ 0x82041580, 0x000000ff, 0x04020007, 0x59a80015,
0x82000500, 0x000000ff, 0x82001540, 0x0000ff00,
- 0x0401f011, 0x82040400, 0x00102116, 0x50000000,
+ 0x0401f011, 0x82040400, 0x001021a6, 0x50000000,
0x80000110, 0x82000580, 0x00000080, 0x02000000,
- 0x0010230d, 0x59a8000f, 0x82000500, 0x000000ff,
- 0x80041580, 0x02000000, 0x0010230d, 0x840409c0,
- 0x80041540, 0x0201f800, 0x00107ef8, 0x04020005,
- 0x4a034407, 0x00000003, 0x0201f000, 0x00102309,
- 0x48ee602a, 0x480a621d, 0x4a02641d, 0x0000bc05,
- 0x4a026407, 0x00000001, 0x0201f800, 0x00103966,
- 0x04020007, 0x0201f800, 0x00020b9d, 0x4a034407,
- 0x00000002, 0x0201f000, 0x00102309, 0x497a5a05,
+ 0x0010239e, 0x59a80015, 0x82000500, 0x000000ff,
+ 0x80041580, 0x02000000, 0x0010239e, 0x840409c0,
+ 0x80041540, 0x4c080000, 0x0201f800, 0x00108297,
+ 0x5c001000, 0x04020005, 0x4a034407, 0x00000003,
+ 0x0201f000, 0x0010239a, 0x48ee602a, 0x480a621d,
+ 0x4a02641d, 0x0000bc05, 0x4a026407, 0x00000001,
+ 0x0201f800, 0x00103a04, 0x04020007, 0x0201f800,
+ 0x00020afe, 0x4a034407, 0x00000002, 0x0201f000,
+ 0x0010239a, 0x497a5a05, 0x4a02601c, 0x0010d5ef,
0x497a5806, 0x4a025c05, 0x00008000, 0x4a01d808,
- 0x00102a62, 0x492e6009, 0x42027000, 0x00000032,
- 0x0201f000, 0x00020bc1, 0x592c0006, 0x82000580,
- 0x01000000, 0x02020000, 0x001022c6, 0x4a034407,
- 0x00000004, 0x0201f000, 0x00102309, 0x497b4407,
- 0x497b4208, 0x8d0e1d20, 0x04000008, 0x59a8004d,
- 0x59a8084e, 0x80040480, 0x59a8084f, 0x48074407,
- 0x80041480, 0x480b4208, 0x0201f800, 0x00103ab7,
- 0x48034408, 0x59a8100d, 0x59a80251, 0x80080480,
- 0x4803420a, 0x495f440a, 0x59a8001a, 0x4803420c,
- 0x4a03440c, 0x0000007f, 0x59a80078, 0x8c00053e,
+ 0x00102af2, 0x492e6009, 0x42027000, 0x00000032,
+ 0x0201f000, 0x00020b22, 0x592c0006, 0x82000580,
+ 0x01000000, 0x02020000, 0x00102357, 0x4a034407,
+ 0x00000004, 0x0201f000, 0x0010239a, 0x497b4407,
+ 0x497b4208, 0x8d0e1d20, 0x04000008, 0x59a80053,
+ 0x59a80854, 0x80040480, 0x59a80855, 0x48074407,
+ 0x80041480, 0x480b4208, 0x0201f800, 0x00103b57,
+ 0x48034408, 0x59a81013, 0x59a80257, 0x80080480,
+ 0x4803420a, 0x495f440a, 0x59a80020, 0x4803420c,
+ 0x4a03440c, 0x0000007f, 0x59a80086, 0x8c00053e,
0x04000003, 0x4a03440c, 0x0000003f, 0x0201f000,
- 0x001022c6, 0x8d0e1d0e, 0x04000005, 0x4a034407,
- 0x00000001, 0x0201f000, 0x00102309, 0x59a00407,
- 0x8c000500, 0x0402000f, 0x59a80050, 0x81640480,
+ 0x00102357, 0x8d0e1d0e, 0x04000005, 0x4a034407,
+ 0x00000001, 0x0201f000, 0x0010239a, 0x59a00407,
+ 0x8c000500, 0x0402000f, 0x59a80056, 0x81640480,
0x04001008, 0x59a8000b, 0x81500580, 0x04000009,
- 0x59a8004e, 0x59a8104d, 0x80080580, 0x04000005,
- 0x4a034407, 0x00000018, 0x0201f000, 0x00102309,
+ 0x59a80054, 0x59a81053, 0x80080580, 0x04000005,
+ 0x4a034407, 0x00000018, 0x0201f000, 0x0010239a,
0x850e1d58, 0x4803c856, 0x850e1d46, 0x0201f800,
- 0x00103c3f, 0x0201f000, 0x001022c6, 0x599c0201,
- 0x48035062, 0x41780800, 0x42001000, 0x00003b10,
- 0x0201f800, 0x00106c9d, 0x480b5063, 0x1c01f000,
+ 0x00103d29, 0x0201f000, 0x00102357, 0x599c0201,
+ 0x48035070, 0x41780800, 0x42001000, 0x00003b10,
+ 0x0201f800, 0x00107000, 0x480b5071, 0x1c01f000,
0x0401f807, 0x42018800, 0x00000000, 0x04020003,
0x42018800, 0x00000001, 0x1c01f000, 0x82000540,
0x00000001, 0x0402500d, 0x4203e000, 0x80000000,
0x40e81000, 0x41780800, 0x42000000, 0x00000064,
- 0x0201f800, 0x00106c9d, 0x5994002e, 0x80080400,
+ 0x0201f800, 0x00107000, 0x5994002e, 0x80080400,
0x4803282e, 0x80000580, 0x1c01f000, 0x4d900000,
0x4dd00000, 0x4da40000, 0x4d140000, 0x417a3000,
- 0x0201f800, 0x001074f6, 0x0201f800, 0x0010707a,
+ 0x0201f800, 0x00107864, 0x0201f800, 0x001073e9,
0x5c022800, 0x5c034800, 0x5c03a000, 0x5c032000,
- 0x1c01f000, 0x42000800, 0x0000007c, 0x0201f800,
- 0x001012d2, 0x4a03902c, 0x00200000, 0x4200b000,
- 0x000001f4, 0x59c8002c, 0x8c00052c, 0x04000007,
- 0x8058b040, 0x040207fc, 0x42000000, 0x00004003,
- 0x41781000, 0x0401f131, 0x4a03506b, 0x00000002,
- 0x42006000, 0x00102c2a, 0x50301000, 0x41784800,
- 0x4a03902d, 0x00008000, 0x4200b000, 0x000001f4,
- 0x59c8002c, 0x8c000534, 0x04000007, 0x8058b040,
- 0x040207fc, 0x42000000, 0x00004003, 0x41781000,
- 0x0401f11e, 0x0401f8a2, 0x80244800, 0x82240580,
- 0x000003b1, 0x040207fc, 0x0401f927, 0x41784800,
- 0x0401f8c8, 0x80244800, 0x82240580, 0x000003b1,
- 0x040207fc, 0x80306000, 0x82300580, 0x00102c2c,
- 0x040207e2, 0x59a8086a, 0x800409c0, 0x04000007,
- 0x42000000, 0x00004004, 0x42001000, 0x00000002,
- 0x59a81869, 0x0401f105, 0x42006000, 0x00102c2a,
- 0x4a03506b, 0x00000010, 0x50301000, 0x41784800,
- 0x4a03902d, 0x00000800, 0x0401f881, 0x80244800,
- 0x82240580, 0x00000018, 0x040207fc, 0x0401f906,
- 0x41784800, 0x0401f8a7, 0x80244800, 0x82240580,
- 0x00000018, 0x040207fc, 0x80306000, 0x82300580,
- 0x00102c2c, 0x040207ed, 0x59a8086a, 0x800409c0,
- 0x04000007, 0x42000000, 0x00004004, 0x42001000,
- 0x00000010, 0x59a81869, 0x0401f0e4, 0x42006000,
- 0x00102c2a, 0x4a03506b, 0x00000008, 0x50301000,
- 0x41784800, 0x4a03902d, 0x00000400, 0x0401f860,
- 0x80244800, 0x82240580, 0x00000088, 0x040207fc,
- 0x0401f8e5, 0x41784800, 0x0401f886, 0x80244800,
- 0x82240580, 0x00000088, 0x040207fc, 0x80306000,
- 0x82300580, 0x00102c2c, 0x040207ed, 0x59a8086a,
+ 0x1c01f000, 0x49cbc857, 0x42000800, 0x0000007c,
+ 0x0201f800, 0x0010132c, 0x4a03902c, 0x00200000,
+ 0x4200b000, 0x000001f4, 0x59c8002c, 0x8c00052c,
+ 0x04000007, 0x8058b040, 0x040207fc, 0x42000000,
+ 0x00004003, 0x41781000, 0x0401f15b, 0x4a035079,
+ 0x00000002, 0x42006000, 0x00102ce5, 0x50301000,
+ 0x480bc857, 0x41784800, 0x4a03902d, 0x00008000,
+ 0x4200b000, 0x000001f4, 0x59c8002c, 0x8c000534,
+ 0x04000007, 0x8058b040, 0x040207fc, 0x42000000,
+ 0x00004003, 0x41781000, 0x0401f147, 0x0401f8b9,
+ 0x80244800, 0x82081400, 0x02020202, 0x82240580,
+ 0x000003b1, 0x040207fa, 0x0401f94e, 0x41784800,
+ 0x50301000, 0x0401f8dc, 0x80244800, 0x82081400,
+ 0x02020202, 0x82240580, 0x000003b1, 0x040207fa,
+ 0x80306000, 0x82300580, 0x00102ce7, 0x040207dc,
+ 0x59a80878, 0x800409c0, 0x04000007, 0x42000000,
+ 0x00004004, 0x42001000, 0x00000002, 0x59a81877,
+ 0x0401f129, 0x42006000, 0x00102ce5, 0x4a035079,
+ 0x00000010, 0x50301000, 0x480bc857, 0x41784800,
+ 0x4a03902d, 0x00000800, 0x0401f892, 0x80244800,
+ 0x82081400, 0x02020202, 0x82240580, 0x00000018,
+ 0x040207fa, 0x0401f927, 0x41784800, 0x50301000,
+ 0x0401f8b5, 0x80244800, 0x82081400, 0x02020202,
+ 0x82240580, 0x00000018, 0x040207fa, 0x80306000,
+ 0x82300580, 0x00102ce7, 0x040207e7, 0x59a80878,
0x800409c0, 0x04000007, 0x42000000, 0x00004004,
- 0x42001000, 0x00000008, 0x59a81869, 0x0401f0c3,
- 0x42006000, 0x00102c2a, 0x4a03506b, 0x00000020,
- 0x50301000, 0x41784800, 0x4a03902d, 0x00002000,
+ 0x42001000, 0x00000010, 0x59a81877, 0x0401f102,
+ 0x42006000, 0x00102ce5, 0x4a035079, 0x00000008,
+ 0x50301000, 0x480bc857, 0x41784800, 0x4a03902d,
+ 0x00000400, 0x0401f86b, 0x80244800, 0x82081400,
+ 0x03030303, 0x82240580, 0x00000088, 0x040207fa,
+ 0x0401f900, 0x41784800, 0x50301000, 0x0401f88e,
+ 0x80244800, 0x82081400, 0x03030303, 0x82240580,
+ 0x00000088, 0x040207fa, 0x80306000, 0x82300580,
+ 0x00102ce7, 0x040207e7, 0x59a80878, 0x800409c0,
+ 0x04000007, 0x42000000, 0x00004004, 0x42001000,
+ 0x00000008, 0x59a81877, 0x0401f0db, 0x42006000,
+ 0x00102ce5, 0x4a035079, 0x00000020, 0x50301000,
+ 0x480bc857, 0x41784800, 0x4a03902d, 0x00002000,
0x4200b000, 0x000001f4, 0x59c8002c, 0x8c000530,
0x04000007, 0x8058b040, 0x040207fc, 0x42000000,
- 0x00004003, 0x41781000, 0x0401f0b0, 0x59c8002c,
+ 0x00004003, 0x41781000, 0x0401f0c7, 0x59c8002c,
0x82000500, 0xffe0ffff, 0x82080d00, 0x001f0000,
- 0x80040540, 0x4803902c, 0x0401f82d, 0x80244800,
- 0x82240580, 0x00000110, 0x040207fc, 0x0401f8b2,
- 0x41784800, 0x0401f853, 0x59c80034, 0x82080d00,
- 0x001f0000, 0x82000500, 0x001f0000, 0x80040580,
- 0x04000006, 0x59a8006a, 0x80000000, 0x4803506a,
- 0x40240000, 0x48035069, 0x80244800, 0x82240580,
- 0x00000110, 0x040207f0, 0x80306000, 0x82300580,
- 0x00102c2c, 0x040207cf, 0x59a8086a, 0x800409c0,
- 0x04000006, 0x42000000, 0x00004004, 0x42001000,
- 0x00000020, 0x59a81869, 0x59c8002c, 0x8400052a,
- 0x4803902c, 0x42000800, 0x0000007c, 0x0201f800,
- 0x001012d2, 0x0201f000, 0x001022c6, 0x59c8002c,
- 0x82000500, 0xffff0000, 0x82080d00, 0x0000ffff,
- 0x80040540, 0x4803902c, 0x480b9028, 0x480b9029,
- 0x59a8006b, 0x82004580, 0x00000004, 0x04000003,
- 0x480b902a, 0x480b902b, 0x59c8002d, 0x82000500,
- 0xfffffc00, 0x80240540, 0x4803902d, 0x4200b000,
+ 0x80040540, 0x4803902c, 0x0401f832, 0x80244800,
+ 0x82081400, 0x02020202, 0x82240580, 0x00000110,
+ 0x040207fa, 0x0401f8c7, 0x41784800, 0x50301000,
+ 0x0401f855, 0x59c80034, 0x82080d00, 0x001f0000,
+ 0x82000500, 0x001f0000, 0x80040580, 0x04000006,
+ 0x59a80078, 0x80000000, 0x48035078, 0x40240000,
+ 0x48035077, 0x80244800, 0x82081400, 0x02020202,
+ 0x82240580, 0x00000110, 0x040207ee, 0x80306000,
+ 0x82300580, 0x00102ce7, 0x040207c9, 0x59a80878,
+ 0x800409c0, 0x04000006, 0x42000000, 0x00004004,
+ 0x42001000, 0x00000020, 0x59a81877, 0x59c8002c,
+ 0x8400052a, 0x4803902c, 0x42000800, 0x0000007c,
+ 0x0201f800, 0x0010132c, 0x0201f000, 0x00102357,
+ 0x59c8002c, 0x82000500, 0xffff0000, 0x82080d00,
+ 0x0000ffff, 0x80040540, 0x4803902c, 0x480b9028,
+ 0x480b9029, 0x59a80079, 0x82004580, 0x00000004,
+ 0x04000003, 0x480b902a, 0x480b902b, 0x59c8002d,
+ 0x82000500, 0xfffffc00, 0x80240540, 0x4803902d,
+ 0x4200b000, 0x000001f4, 0x59c8002c, 0x82000500,
+ 0x18000000, 0x04000007, 0x8058b040, 0x040207fb,
+ 0x42000000, 0x00004003, 0x41781000, 0x0401f06e,
+ 0x4a03902e, 0x00000001, 0x4200b000, 0x000001f4,
+ 0x59c8002e, 0x8c000500, 0x04000006, 0x8058b040,
+ 0x040207fc, 0x42000000, 0x00004003, 0x0401f062,
+ 0x1c01f000, 0x41783800, 0x59c8002d, 0x82000500,
+ 0xfffffc00, 0x80240d40, 0x4807902d, 0x4200b000,
0x000001f4, 0x59c8002c, 0x82000500, 0x18000000,
0x04000007, 0x8058b040, 0x040207fb, 0x42000000,
- 0x00004003, 0x41781000, 0x0401f05c, 0x4a03902e,
- 0x00000001, 0x4200b000, 0x000001f4, 0x59c8002e,
- 0x8c000500, 0x04000006, 0x8058b040, 0x040207fc,
- 0x42000000, 0x00004003, 0x0401f050, 0x1c01f000,
- 0x41783800, 0x59c8002d, 0x82000500, 0xfffffc00,
- 0x80240d40, 0x4807902d, 0x4200b000, 0x000001f4,
- 0x59c8002c, 0x82000500, 0x18000000, 0x04000007,
- 0x8058b040, 0x040207fb, 0x42000000, 0x00004003,
- 0x41781000, 0x0401f03d, 0x59c81830, 0x59c80030,
- 0x800c0d80, 0x040207fd, 0x80080d80, 0x04000002,
+ 0x00004003, 0x41781000, 0x0401f04f, 0x59c81830,
+ 0x59c80030, 0x800c0d80, 0x040207fd, 0x80080d80,
+ 0x04000005, 0x4803c857, 0x480bc857, 0x4827c857,
0x801c3800, 0x59c82031, 0x59c80031, 0x80100d80,
- 0x040207fd, 0x80080d80, 0x04000002, 0x801c3800,
- 0x59a8006b, 0x82004580, 0x00000004, 0x0400001b,
- 0x42004000, 0x0000ffff, 0x59c82832, 0x59c80032,
- 0x80140d80, 0x040207fd, 0x80080d80, 0x04000002,
- 0x801c3800, 0x59c83033, 0x59c80033, 0x80180d80,
- 0x040207fd, 0x80080d80, 0x04000002, 0x801c3800,
- 0x59c80034, 0x59c80834, 0x80040d80, 0x040207fd,
- 0x80080d80, 0x40200000, 0x80040d00, 0x0400000c,
- 0x801c3800, 0x0401f00a, 0x59c80034, 0x59c80834,
+ 0x040207fd, 0x80080d80, 0x04000005, 0x4803c857,
+ 0x480bc857, 0x4827c857, 0x801c3800, 0x59a80079,
+ 0x82004580, 0x00000004, 0x04000024, 0x42004000,
+ 0x0000ffff, 0x59c82832, 0x59c80032, 0x80140d80,
+ 0x040207fd, 0x80080d80, 0x04000005, 0x4803c857,
+ 0x480bc857, 0x4827c857, 0x801c3800, 0x59c83033,
+ 0x59c80033, 0x80180d80, 0x040207fd, 0x80080d80,
+ 0x04000005, 0x4803c857, 0x480bc857, 0x4827c857,
+ 0x801c3800, 0x59c80034, 0x59c80834, 0x80040d80,
+ 0x040207fd, 0x80080d80, 0x40200000, 0x80040d00,
+ 0x04000012, 0x4803c857, 0x480bc857, 0x4827c857,
+ 0x801c3800, 0x0401f00d, 0x59c80034, 0x59c80834,
0x80040d80, 0x040207fd, 0x80080d80, 0x82040d00,
- 0x000000ff, 0x04000002, 0x801c3800, 0x801c39c0,
- 0x04000005, 0x59a8006a, 0x801c0400, 0x4803506a,
- 0x48275069, 0x1c01f000, 0x48034207, 0x48074407,
- 0x480b4208, 0x480f4408, 0x48134209, 0x48174409,
- 0x59c8002c, 0x8400052a, 0x4803902c, 0x42000800,
- 0x0000007c, 0x0201f800, 0x001012d2, 0x0201f000,
- 0x001022c9, 0x42000000, 0x00600000, 0x80000040,
- 0x040207ff, 0x1c01f000, 0x5a5a5a5a, 0xa5a5a5a5,
- 0x0201f800, 0x00103966, 0x04020005, 0x4a034407,
- 0x00000002, 0x0201f000, 0x00102309, 0x42005000,
- 0x0010cfd0, 0x50285000, 0x482b4000, 0x4200a000,
- 0x0010cfd1, 0x59a00408, 0x59a01208, 0x900811c0,
+ 0x000000ff, 0x04000005, 0x4803c857, 0x480bc857,
+ 0x4827c857, 0x801c3800, 0x801c39c0, 0x04000005,
+ 0x59a80078, 0x801c0400, 0x48035078, 0x48275077,
+ 0x1c01f000, 0x48034207, 0x48074407, 0x480b4208,
+ 0x480f4408, 0x48134209, 0x48174409, 0x59c8002c,
+ 0x8400052a, 0x4803902c, 0x42000800, 0x0000007c,
+ 0x0201f800, 0x0010132c, 0x0201f000, 0x0010235a,
+ 0x42000000, 0x00600000, 0x80000040, 0x040207ff,
+ 0x1c01f000, 0x11121111, 0x44454442, 0x0201f800,
+ 0x00103a04, 0x04020005, 0x4a034407, 0x00000002,
+ 0x0201f000, 0x0010239a, 0x42005000, 0x0010d5ee,
+ 0x50285000, 0x482b4000, 0x4200a000, 0x0010d5ef,
+ 0x59a00408, 0x59a01208, 0x900811c0, 0x80081540,
+ 0x59a0040a, 0x59a01a0a, 0x900c19c0, 0x800c1d40,
+ 0x42024800, 0x0010d5ef, 0x832cac00, 0x00000005,
+ 0x4200b000, 0x00000006, 0x82500400, 0x0000000b,
+ 0x48034001, 0x0201f800, 0x0010c5dd, 0x42000800,
+ 0x00000006, 0x800400c4, 0x80080c00, 0x48074002,
+ 0x820c0c40, 0x00000000, 0x48074003, 0x42000800,
+ 0x00000006, 0x832c0400, 0x00000005, 0x0201f800,
+ 0x00103a35, 0x4a01d808, 0x00102d18, 0x1c01f000,
+ 0x0401fadb, 0x02000000, 0x00102392, 0x59a0a001,
+ 0x59a01000, 0x80081040, 0x480b4000, 0x04000005,
+ 0x59a01002, 0x59a01803, 0x58ee580c, 0x0401f7db,
+ 0x42000800, 0x0010d5ee, 0x50040800, 0x48074407,
+ 0x0201f000, 0x00102357, 0x0201f800, 0x00103a04,
+ 0x04020005, 0x4a034407, 0x00000002, 0x0201f000,
+ 0x0010239a, 0x59a00c0b, 0x42000000, 0x0010d5ee,
+ 0x50000000, 0x80040480, 0x02021000, 0x0010239e,
+ 0x8204a400, 0x0010c6ac, 0x5050a000, 0x832cac00,
+ 0x00000005, 0x4200b000, 0x00000006, 0x0201f800,
+ 0x0010c5dd, 0x59a00408, 0x59a01208, 0x900811c0,
0x80081540, 0x59a0040a, 0x59a01a0a, 0x900c19c0,
- 0x800c1d40, 0x42024800, 0x0010cfd1, 0x832cac00,
- 0x00000005, 0x4200b000, 0x00000006, 0x82500400,
- 0x0000000b, 0x48034001, 0x0201f800, 0x0010c086,
- 0x42000800, 0x00000006, 0x800400c4, 0x80080c00,
- 0x48074002, 0x820c0c40, 0x00000000, 0x48074003,
- 0x42000800, 0x00000006, 0x832c0400, 0x00000005,
- 0x0201f800, 0x00103993, 0x4a01d808, 0x00102c5d,
- 0x1c01f000, 0x4031d800, 0x58ef400a, 0x58ec0002,
- 0x82000580, 0x00000200, 0x02000000, 0x00102301,
- 0x59a0a001, 0x59a01000, 0x80081040, 0x480b4000,
- 0x04000005, 0x59a01002, 0x59a01803, 0x58ee580c,
- 0x0401f7d7, 0x42000800, 0x0010cfd0, 0x50040800,
- 0x48074407, 0x0201f000, 0x001022c6, 0x0201f800,
- 0x00103966, 0x04020005, 0x4a034407, 0x00000002,
- 0x0201f000, 0x00102309, 0x59a00c0b, 0x42000000,
- 0x0010cfd0, 0x50000000, 0x80040480, 0x02021000,
- 0x0010230d, 0x8204a400, 0x0010c10d, 0x5050a000,
- 0x832cac00, 0x00000005, 0x4200b000, 0x00000006,
- 0x0201f800, 0x0010c086, 0x59a00408, 0x59a01208,
- 0x900811c0, 0x80081540, 0x59a0040a, 0x59a01a0a,
- 0x900c19c0, 0x800c1d40, 0x42000800, 0x00000006,
- 0x832c0400, 0x00000005, 0x0201f000, 0x00103993,
- 0x59a00c0b, 0x800409c0, 0x02000000, 0x0010230d,
- 0x82040480, 0x00000021, 0x02021000, 0x0010230d,
+ 0x800c1d40, 0x42000800, 0x00000006, 0x832c0400,
+ 0x00000005, 0x0201f000, 0x00103a35, 0x59a00c0b,
+ 0x800409c0, 0x02000000, 0x0010239e, 0x82040480,
+ 0x00000021, 0x02021000, 0x0010239e, 0x82040480,
+ 0x00000011, 0x04001003, 0x42000800, 0x00000010,
+ 0x59a00209, 0x59a01408, 0x900811c0, 0x80081540,
+ 0x59a00208, 0x59a01c07, 0x900c19c0, 0x800c1d40,
+ 0x0201f800, 0x00103a04, 0x04000006, 0x0201f800,
+ 0x00103a28, 0x4a01d808, 0x00102d70, 0x1c01f000,
+ 0x4a034407, 0x00000002, 0x0201f000, 0x0010239a,
+ 0x0401fa83, 0x02000000, 0x00102392, 0x59a00c0b,
0x82040480, 0x00000011, 0x04001003, 0x42000800,
+ 0x00000010, 0x59a0040c, 0x59a0120c, 0x900811c0,
+ 0x80081540, 0x59a0020a, 0x59a01c09, 0x900c19c0,
+ 0x800c1d40, 0x58ec0003, 0x0201f800, 0x00103a35,
+ 0x4a01d808, 0x00102d87, 0x1c01f000, 0x0401fa6c,
+ 0x02000000, 0x00102392, 0x59a00c0b, 0x82040480,
+ 0x00000011, 0x02001000, 0x00102357, 0x82040c80,
0x00000010, 0x59a00209, 0x59a01408, 0x900811c0,
0x80081540, 0x59a00208, 0x59a01c07, 0x900c19c0,
- 0x800c1d40, 0x0201f800, 0x00103966, 0x04000006,
- 0x0201f800, 0x0010398a, 0x4a01d808, 0x00102cb9,
- 0x1c01f000, 0x4a034407, 0x00000002, 0x0201f000,
- 0x00102309, 0x4031d800, 0x58ef400a, 0x58ec0002,
- 0x82000580, 0x00000200, 0x02000000, 0x00102301,
- 0x59a00c0b, 0x82040480, 0x00000011, 0x04001003,
- 0x42000800, 0x00000010, 0x59a0040c, 0x59a0120c,
- 0x900811c0, 0x80081540, 0x59a0020a, 0x59a01c09,
- 0x900c19c0, 0x800c1d40, 0x58ec0003, 0x0201f800,
- 0x00103993, 0x4a01d808, 0x00102cd4, 0x1c01f000,
- 0x4031d800, 0x58ef400a, 0x58ec0002, 0x82000580,
- 0x00000200, 0x02000000, 0x00102301, 0x59a00c0b,
- 0x82040480, 0x00000011, 0x02001000, 0x001022c6,
- 0x82040c80, 0x00000010, 0x59a00209, 0x59a01408,
- 0x900811c0, 0x80081540, 0x59a00208, 0x59a01c07,
- 0x900c19c0, 0x800c1d40, 0x82081400, 0x00000040,
- 0x58ec0003, 0x0201f800, 0x0010398a, 0x4a01d808,
- 0x00102cf2, 0x1c01f000, 0x4031d800, 0x58ef400a,
- 0x58ec0002, 0x82000580, 0x00000200, 0x02000000,
- 0x00102301, 0x59a0040b, 0x82000c80, 0x00000010,
- 0x59a0040c, 0x59a0120c, 0x900811c0, 0x80081540,
- 0x59a0020a, 0x59a01c09, 0x900c19c0, 0x800c1d40,
- 0x82081400, 0x00000040, 0x58ec0003, 0x0201f800,
- 0x00103993, 0x4a01d808, 0x001022bf, 0x1c01f000,
- 0x48efc857, 0x59a00208, 0x59a01408, 0x900001c0,
- 0x80081540, 0x59a0020a, 0x59a01c0a, 0x900001c0,
- 0x800c1d40, 0x59a00407, 0x48034000, 0x480b4001,
- 0x480f4002, 0x0201f800, 0x00103966, 0x04020005,
- 0x4a034407, 0x00000002, 0x0201f000, 0x00102309,
- 0x42000800, 0x00000010, 0x0201f800, 0x0010398a,
- 0x4a01d808, 0x00102d27, 0x1c01f000, 0x4031d800,
- 0x58ef400a, 0x58ee580c, 0x58ec0002, 0x82000580,
- 0x00000200, 0x02000000, 0x00102301, 0x48efc857,
- 0x49a3c857, 0x492fc857, 0x592c0a05, 0x80040910,
- 0x04020005, 0x4a034407, 0x00000019, 0x0201f000,
- 0x00102309, 0x4805d80b, 0x0401f00a, 0x4031d800,
+ 0x800c1d40, 0x82081400, 0x00000040, 0x58ec0003,
+ 0x0201f800, 0x00103a28, 0x4a01d808, 0x00102da1,
+ 0x1c01f000, 0x0401fa52, 0x02000000, 0x00102392,
+ 0x59a0040b, 0x82000c80, 0x00000010, 0x59a0040c,
+ 0x59a0120c, 0x900811c0, 0x80081540, 0x59a0020a,
+ 0x59a01c09, 0x900c19c0, 0x800c1d40, 0x82081400,
+ 0x00000040, 0x58ec0003, 0x0201f800, 0x00103a35,
+ 0x4a01d808, 0x00102353, 0x1c01f000, 0x48efc857,
+ 0x59a00208, 0x59a01408, 0x900001c0, 0x80081540,
+ 0x59a0020a, 0x59a01c0a, 0x900001c0, 0x800c1d40,
+ 0x59a00407, 0x48034000, 0x480b4001, 0x480f4002,
+ 0x0201f800, 0x00103a04, 0x04020005, 0x4a034407,
+ 0x00000002, 0x0201f000, 0x0010239a, 0x42000800,
+ 0x00000010, 0x0201f800, 0x00103a28, 0x4a01d808,
+ 0x00102dd2, 0x1c01f000, 0x0401fa21, 0x02000000,
+ 0x00102392, 0x58ee580c, 0x48efc857, 0x49a3c857,
+ 0x492fc857, 0x592c0a05, 0x80040910, 0x04020005,
+ 0x4a034407, 0x00000019, 0x0201f000, 0x0010239a,
+ 0x4805d80b, 0x0401f006, 0x0401fa11, 0x02000000,
+ 0x00102392, 0x48efc857, 0x49a3c857, 0x48efc857,
+ 0x49a3c857, 0x58ec000b, 0x80000040, 0x04000012,
+ 0x4801d80b, 0x0201f800, 0x00103a04, 0x04020005,
+ 0x4a034407, 0x00000002, 0x0201f000, 0x0010239a,
+ 0x42000800, 0x00000010, 0x58ec1006, 0x58ec1807,
+ 0x0201f800, 0x00103a28, 0x4a01d808, 0x00102de2,
+ 0x1c01f000, 0x58ee580c, 0x48efc857, 0x49a3c857,
+ 0x492fc857, 0x492f3004, 0x592c0405, 0x8400055e,
+ 0x48025c05, 0x4a01d808, 0x00102e08, 0x1c01f000,
+ 0x4d2c0000, 0x58ee580c, 0x48efc857, 0x49a3c857,
+ 0x492fc857, 0x592c0405, 0x8400051e, 0x48025c05,
+ 0x59a00000, 0x59a01001, 0x59a01802, 0x80081400,
+ 0x820c1c40, 0x00000000, 0x832c0400, 0x00000005,
+ 0x42000800, 0x00000010, 0x5c025800, 0x0201f000,
+ 0x00103a35, 0x8d0e1d0e, 0x04000005, 0x4a034407,
+ 0x00000001, 0x0201f000, 0x0010239a, 0x836c0580,
+ 0x00000003, 0x04000005, 0x4a034407, 0x00000007,
+ 0x0201f000, 0x0010239a, 0x59a0320c, 0x82183500,
+ 0x000000ff, 0x59a28c07, 0x0201f800, 0x00103b10,
+ 0x02020000, 0x0010239e, 0x0201f800, 0x00104bd5,
+ 0x02020000, 0x0010239e, 0x83440580, 0x000007fd,
+ 0x04000008, 0x0201f800, 0x00104b75, 0x04000005,
+ 0x4a034407, 0x00000009, 0x0201f000, 0x0010239a,
+ 0x0201f800, 0x00103a04, 0x04020005, 0x4a034407,
+ 0x00000002, 0x0201f000, 0x0010239a, 0x801831c0,
+ 0x0400000a, 0x412c0800, 0x0201f800, 0x00103a04,
+ 0x04020005, 0x4a034407, 0x00000002, 0x0201f000,
+ 0x0010239a, 0x40065800, 0x4a025c05, 0x00008000,
+ 0x497a5a05, 0x0201f800, 0x00109d34, 0x04020005,
+ 0x4a034407, 0x00000003, 0x0201f000, 0x0010239a,
+ 0x4a01d808, 0x00102e5f, 0x1c01f000, 0x592c0006,
+ 0x82000580, 0x01000000, 0x04020005, 0x4a034407,
+ 0x00000004, 0x0201f000, 0x0010239a, 0x592c0407,
+ 0x82002d00, 0x0000ff00, 0x82000500, 0x000000ff,
+ 0x80000904, 0x80040800, 0x82040480, 0x00000006,
+ 0x04001003, 0x42000800, 0x00000005, 0x4c500000,
+ 0x4c540000, 0x4c580000, 0x832ca400, 0x00000007,
+ 0x4050a800, 0x4004b000, 0x0201f800, 0x0010c607,
+ 0x59a00408, 0x59a01208, 0x900811c0, 0x80081540,
+ 0x59a0040a, 0x59a01a0a, 0x900c19c0, 0x800c1d40,
+ 0x832c0400, 0x00000007, 0x4c140000, 0x0201f800,
+ 0x00103a35, 0x5c002800, 0x801429c0, 0x04000003,
+ 0x4a01d808, 0x00102e92, 0x5c00b000, 0x5c00a800,
+ 0x5c00a000, 0x1c01f000, 0x0401f961, 0x02000000,
+ 0x00102392, 0x58ee580c, 0x812e59c0, 0x02000800,
+ 0x0010032f, 0x592c0007, 0x82000500, 0xff000000,
+ 0x80000904, 0x800409c0, 0x02000000, 0x00102357,
+ 0x4807c857, 0x82040480, 0x0000000e, 0x04001003,
+ 0x42000800, 0x0000000d, 0x592e5801, 0x812e59c0,
+ 0x02000800, 0x0010032f, 0x4c500000, 0x4c540000,
+ 0x4c580000, 0x832ca400, 0x00000006, 0x4050a800,
+ 0x4004b000, 0x0201f800, 0x0010c607, 0x5c00b000,
+ 0x5c00a800, 0x5c00a000, 0x58ec1006, 0x58ec1807,
+ 0x832c0400, 0x00000006, 0x0201f000, 0x00103a35,
+ 0x0201f800, 0x00103a04, 0x04020005, 0x4a034407,
+ 0x00000002, 0x0201f000, 0x0010239a, 0x59a00c07,
+ 0x82040500, 0x0000ff00, 0x840001c0, 0x82001480,
+ 0x0000000e, 0x02021000, 0x0010239e, 0x0c01f001,
+ 0x00102eda, 0x00102ee1, 0x00102ee8, 0x00102ee8,
+ 0x00102ee8, 0x00102eec, 0x00102ef1, 0x00102ee8,
+ 0x00102ee8, 0x00102ee8, 0x00102ee8, 0x00102ee8,
+ 0x00102ee8, 0x00102ee8, 0x42000800, 0x0000000d,
+ 0x42003800, 0x00102efe, 0x4a034000, 0x0010d15c,
+ 0x0401f015, 0x42000800, 0x0000000d, 0x42003800,
+ 0x00102efe, 0x4a034000, 0x0010d169, 0x0401f00e,
+ 0x0201f000, 0x0010239e, 0x0201f000, 0x0010239e,
+ 0x42000800, 0x00000008, 0x42003800, 0x00102f0d,
+ 0x0401f005, 0x42000800, 0x00000004, 0x42003800,
+ 0x00102f53, 0x0401f8f5, 0x832c0400, 0x00000006,
+ 0x4c1c0000, 0x0201f800, 0x00103a28, 0x5c003800,
+ 0x481dd808, 0x1c01f000, 0x0401f8f5, 0x02000000,
+ 0x00102392, 0x58ee580c, 0x4a03501f, 0x00000001,
+ 0x4200b000, 0x0000000d, 0x59a0a800, 0x832ca400,
+ 0x00000006, 0x0201f800, 0x0010c607, 0x0201f000,
+ 0x00102357, 0x0401f8e6, 0x02000000, 0x00102392,
+ 0x58ee580c, 0x832ca400, 0x00000006, 0x50500000,
+ 0x82001500, 0x000c0016, 0x02020000, 0x0010239e,
+ 0x82500c00, 0x00000003, 0x50040000, 0x82001500,
+ 0x00000001, 0x02020000, 0x0010239e, 0x50500000,
+ 0x82001500, 0x00000028, 0x0400001d, 0x82081580,
+ 0x00000028, 0x02020000, 0x0010239e, 0x80500800,
+ 0x50040000, 0x82001500, 0x00000013, 0x82081580,
+ 0x00000013, 0x02020000, 0x0010239e, 0x80040800,
+ 0x50040000, 0x82001500, 0x00050000, 0x82081580,
+ 0x00050000, 0x02020000, 0x0010239e, 0x836c0580,
+ 0x00000000, 0x04000012, 0x599c0019, 0x8c00050e,
+ 0x0402000f, 0x0201f000, 0x0010239e, 0x80500800,
+ 0x50040000, 0x82001500, 0x00000013, 0x02020000,
+ 0x0010239e, 0x80040800, 0x50040000, 0x82001500,
+ 0x00050000, 0x02020000, 0x0010239e, 0x4200b000,
+ 0x00000008, 0x4200a800, 0x0010d154, 0x0201f800,
+ 0x0010c5dd, 0x0201f000, 0x00102357, 0x0401f8a0,
+ 0x02000000, 0x00102392, 0x58ee580c, 0x4200b000,
+ 0x00000004, 0x4200a800, 0x0010d5e9, 0x832ca400,
+ 0x00000006, 0x0201f800, 0x0010c5dd, 0x850e1d50,
+ 0x0201f000, 0x00102357, 0x0201f800, 0x00103a04,
+ 0x04020005, 0x4a034407, 0x00000002, 0x0201f000,
+ 0x0010239a, 0x832cac00, 0x00000006, 0x59a00c07,
+ 0x82040500, 0x0000ff00, 0x840001c0, 0x82001480,
+ 0x0000000e, 0x02021000, 0x0010239e, 0x0c01f001,
+ 0x00102f82, 0x00102f85, 0x00102f88, 0x00102f88,
+ 0x00102f88, 0x00102f8c, 0x00102f88, 0x00102f94,
+ 0x00102f88, 0x00102f88, 0x00102f88, 0x00102f88,
+ 0x00102f88, 0x00102f88, 0x4200a000, 0x0010d15c,
+ 0x0401f050, 0x4200a000, 0x0010d169, 0x0401f04d,
+ 0x0201f000, 0x0010239e, 0x0201f000, 0x0010239e,
+ 0x4200b000, 0x00000008, 0x40580800, 0x4200a000,
+ 0x0010d154, 0x0201f800, 0x0010c5dd, 0x0401f046,
+ 0x59a00a0b, 0x4a03420b, 0x0000001c, 0x82040480,
+ 0x0000001c, 0x02001000, 0x0010239e, 0x4200b000,
+ 0x0000000f, 0x4178a000, 0x0201f800, 0x0010c5e6,
+ 0x832cac00, 0x00000006, 0x4200b000, 0x00000004,
+ 0x83a8a400, 0x00000025, 0x0201f800, 0x0010c5dd,
+ 0x836c0580, 0x00000000, 0x04000007, 0x4200b000,
+ 0x00000004, 0x83a8a400, 0x00000000, 0x0201f800,
+ 0x0010c5dd, 0x492f4000, 0x0201f800, 0x00103a04,
+ 0x04020005, 0x4a034407, 0x00000002, 0x0201f000,
+ 0x0010239a, 0x832cac00, 0x00000006, 0x4200b000,
+ 0x0000000f, 0x4178a000, 0x0201f800, 0x0010c5e6,
+ 0x832cac00, 0x00000007, 0x4200b000, 0x00000004,
+ 0x83a8a400, 0x00000029, 0x0201f800, 0x0010c5dd,
+ 0x0401f822, 0x492f4001, 0x59a25800, 0x832c0400,
+ 0x00000006, 0x42000800, 0x0000000f, 0x0201f800,
+ 0x00103a35, 0x4a01d808, 0x00102fde, 0x1c01f000,
+ 0x4200b000, 0x0000000d, 0x40580800, 0x0201f800,
+ 0x0010c607, 0x0401f811, 0x832c0400, 0x00000006,
+ 0x0201f000, 0x00103a35, 0x0401f815, 0x02000000,
+ 0x00102392, 0x59a25801, 0x58ec1006, 0x58ec1807,
+ 0x832c0400, 0x00000006, 0x42000800, 0x0000000d,
+ 0x0201f000, 0x00103a35, 0x59a00208, 0x59a01408,
+ 0x900001c0, 0x80081540, 0x59a0020a, 0x59a01c0a,
+ 0x900001c0, 0x800c1d40, 0x1c01f000, 0x4031d800,
0x58ef400a, 0x58ec0002, 0x82000580, 0x00000200,
- 0x02000000, 0x00102301, 0x48efc857, 0x49a3c857,
- 0x48efc857, 0x49a3c857, 0x58ec000b, 0x80000040,
- 0x04000012, 0x4801d80b, 0x0201f800, 0x00103966,
+ 0x1c01f000, 0x836c0580, 0x00000000, 0x04020005,
+ 0x4a034407, 0x00000007, 0x0201f000, 0x0010239a,
+ 0x59a01407, 0x800811c0, 0x04020017, 0x59c40801,
+ 0x82040d00, 0x00018000, 0x82040580, 0x00000000,
+ 0x04020004, 0x4a034407, 0x00000000, 0x0401f056,
+ 0x82040580, 0x00008000, 0x04020004, 0x4a034407,
+ 0x00000001, 0x0401f050, 0x82040580, 0x00010000,
+ 0x02020800, 0x0010032f, 0x4a034407, 0x00000003,
+ 0x0401f049, 0x59a80086, 0x8c00053e, 0x0400000d,
+ 0x59a00a08, 0x82040580, 0x00000003, 0x04000005,
+ 0x82040580, 0x00000002, 0x02020000, 0x0010239e,
+ 0x42000000, 0x00000003, 0x40000800, 0x0401f00b,
+ 0x59a8007e, 0x8c000508, 0x04000005, 0x42000000,
+ 0x00000001, 0x40000800, 0x0401f004, 0x59a00208,
+ 0x48034002, 0x59a8083d, 0x4803503d, 0x599c7819,
+ 0x823c7d00, 0xffff1fff, 0x800000da, 0x803c7d40,
+ 0x483f3819, 0x0201f800, 0x001016c2, 0x0400000d,
+ 0x0201f800, 0x00101698, 0x0400000a, 0x0201f800,
+ 0x001016a6, 0x04000007, 0x0201f800, 0x001016b4,
+ 0x04000004, 0x4807503d, 0x0201f000, 0x0010239e,
+ 0x82080580, 0x00000002, 0x04020017, 0x59c40006,
+ 0x84000500, 0x48038806, 0x0201f800, 0x00107523,
+ 0x497b8880, 0x42000000, 0x0010d5a6, 0x0201f800,
+ 0x0010c50a, 0x4803c856, 0x850e1d48, 0x4a038808,
+ 0x00000000, 0x4202d800, 0x00000004, 0x4a038805,
+ 0x00000001, 0x4a035049, 0x00000001, 0x0201f800,
+ 0x0010045e, 0x0201f000, 0x00102357, 0x8d0e1d0e,
+ 0x04000005, 0x4a034407, 0x00000001, 0x0201f000,
+ 0x0010239a, 0x836c0580, 0x00000003, 0x04000005,
+ 0x4a034407, 0x00000007, 0x0201f000, 0x0010239a,
+ 0x59a28c07, 0x59a0320c, 0x82183500, 0x000000ff,
+ 0x0201f800, 0x00103b10, 0x02020000, 0x0010239e,
+ 0x0201f800, 0x00104bd5, 0x02020000, 0x0010239e,
+ 0x83440580, 0x000007fd, 0x04000008, 0x0201f800,
+ 0x00104b75, 0x04000005, 0x42000800, 0x00000009,
+ 0x0201f000, 0x0010239a, 0x0201f800, 0x00103a04,
0x04020005, 0x4a034407, 0x00000002, 0x0201f000,
- 0x00102309, 0x42000800, 0x00000010, 0x58ec1006,
- 0x58ec1807, 0x0201f800, 0x0010398a, 0x4a01d808,
- 0x00102d3b, 0x1c01f000, 0x58ee580c, 0x48efc857,
- 0x49a3c857, 0x492fc857, 0x492f3004, 0x592c0405,
- 0x8400055e, 0x48025c05, 0x4a01d808, 0x00102d65,
- 0x1c01f000, 0x4d2c0000, 0x58ee580c, 0x48efc857,
- 0x49a3c857, 0x492fc857, 0x592c0405, 0x8400051e,
- 0x48025c05, 0x59a00000, 0x59a01001, 0x59a01802,
- 0x80081400, 0x820c1c40, 0x00000000, 0x832c0400,
- 0x00000005, 0x42000800, 0x00000010, 0x5c025800,
- 0x0201f000, 0x00103993, 0x8d0e1d0e, 0x04000005,
- 0x4a034407, 0x00000001, 0x0201f000, 0x00102309,
- 0x836c0580, 0x00000003, 0x04000005, 0x4a034407,
- 0x00000007, 0x0201f000, 0x00102309, 0x59a0320c,
- 0x82183500, 0x000000ff, 0x59a28c07, 0x0201f800,
- 0x00103a70, 0x02020000, 0x0010230d, 0x0201f800,
- 0x00104a7c, 0x02020000, 0x0010230d, 0x83440580,
- 0x000007fd, 0x04000008, 0x0201f800, 0x00104a1c,
- 0x04000005, 0x4a034407, 0x00000009, 0x0201f000,
- 0x00102309, 0x0201f800, 0x00103966, 0x04020005,
- 0x4a034407, 0x00000002, 0x0201f000, 0x00102309,
- 0x801831c0, 0x0400000a, 0x412c0800, 0x0201f800,
- 0x00103966, 0x04020005, 0x4a034407, 0x00000002,
- 0x0201f000, 0x00102309, 0x40065800, 0x4a025c05,
- 0x00008000, 0x497a5a05, 0x0201f800, 0x00109984,
- 0x04020005, 0x4a034407, 0x00000003, 0x0201f000,
- 0x00102309, 0x4a01d808, 0x00102dbc, 0x1c01f000,
- 0x592c0006, 0x82000580, 0x01000000, 0x04020005,
- 0x4a034407, 0x00000004, 0x0201f000, 0x00102309,
- 0x592c0407, 0x82002d00, 0x0000ff00, 0x82000500,
- 0x000000ff, 0x80000904, 0x80040800, 0x82040480,
- 0x00000006, 0x04001003, 0x42000800, 0x00000005,
- 0x4c500000, 0x4c540000, 0x4c580000, 0x832ca400,
- 0x00000007, 0x4050a800, 0x4004b000, 0x0201f800,
- 0x0010c0b0, 0x59a00408, 0x59a01208, 0x900811c0,
- 0x80081540, 0x59a0040a, 0x59a01a0a, 0x900c19c0,
- 0x800c1d40, 0x832c0400, 0x00000007, 0x4c140000,
- 0x0201f800, 0x00103993, 0x5c002800, 0x801429c0,
- 0x04000003, 0x4a01d808, 0x00102def, 0x5c00b000,
- 0x5c00a800, 0x5c00a000, 0x1c01f000, 0x4031d800,
- 0x58ef400a, 0x58ee580c, 0x58ec0002, 0x82000580,
- 0x00000200, 0x02000000, 0x00102301, 0x812e59c0,
- 0x02000800, 0x0010032e, 0x592c0007, 0x82000500,
- 0xff000000, 0x80000904, 0x800409c0, 0x02000000,
- 0x001022c6, 0x4807c857, 0x82040480, 0x0000000e,
- 0x04001003, 0x42000800, 0x0000000d, 0x592e5801,
- 0x812e59c0, 0x02000800, 0x0010032e, 0x4c500000,
+ 0x0010239a, 0x497a5a05, 0x4a025c05, 0x00008000,
+ 0x0201f800, 0x00109d4c, 0x04020005, 0x4a034407,
+ 0x00000003, 0x0201f000, 0x0010239a, 0x4a01d808,
+ 0x0010309a, 0x1c01f000, 0x592c0006, 0x82000d00,
+ 0x0000ffff, 0x82000500, 0xffff0000, 0x82000580,
+ 0x01000000, 0x04020005, 0x4a034407, 0x00000004,
+ 0x0201f000, 0x0010239a, 0x80040904, 0x4c500000,
0x4c540000, 0x4c580000, 0x832ca400, 0x00000006,
- 0x4050a800, 0x4004b000, 0x0201f800, 0x0010c0b0,
- 0x5c00b000, 0x5c00a800, 0x5c00a000, 0x58ec1006,
- 0x58ec1807, 0x832c0400, 0x00000006, 0x0201f000,
- 0x00103993, 0x0201f800, 0x00103966, 0x04020005,
- 0x4a034407, 0x00000002, 0x0201f000, 0x00102309,
- 0x59a00c07, 0x82040500, 0x0000ff00, 0x840001c0,
- 0x82001480, 0x00000007, 0x02021000, 0x0010230d,
- 0x0c01f001, 0x00102e34, 0x00102e3b, 0x00102e42,
- 0x00102e42, 0x00102e42, 0x00102e44, 0x00102e49,
- 0x42000800, 0x0000000d, 0x42003800, 0x00102e5d,
- 0x4a034000, 0x0010cb46, 0x0401f013, 0x42000800,
- 0x0000000d, 0x42003800, 0x00102e5d, 0x4a034000,
- 0x0010cb53, 0x0401f00c, 0x0201f000, 0x0010230d,
- 0x42000800, 0x00000008, 0x42003800, 0x00102e70,
- 0x0401f005, 0x42000800, 0x00000004, 0x42003800,
- 0x00102eba, 0x59a00208, 0x59a01408, 0x900001c0,
- 0x80081540, 0x59a0020a, 0x59a01c0a, 0x900001c0,
- 0x800c1d40, 0x832c0400, 0x00000006, 0x4c1c0000,
- 0x0201f800, 0x0010398a, 0x5c003800, 0x481dd808,
- 0x1c01f000, 0x4031d800, 0x58ef400a, 0x58ee580c,
- 0x58ec0002, 0x82000580, 0x00000200, 0x02000000,
- 0x00102301, 0x4a035019, 0x00000001, 0x4200b000,
- 0x0000000d, 0x59a0a800, 0x832ca400, 0x00000006,
- 0x0201f800, 0x0010c0b0, 0x0201f000, 0x001022c6,
- 0x4031d800, 0x58ef400a, 0x58ee580c, 0x58ec0002,
- 0x82000580, 0x00000200, 0x02000000, 0x00102301,
- 0x832ca400, 0x00000006, 0x50500000, 0x82001500,
- 0x000c0016, 0x02020000, 0x0010230d, 0x82500c00,
- 0x00000003, 0x50040000, 0x82001500, 0x00000001,
- 0x02020000, 0x0010230d, 0x50500000, 0x82001500,
- 0x00000028, 0x0400001d, 0x82081580, 0x00000028,
- 0x02020000, 0x0010230d, 0x80500800, 0x50040000,
- 0x82001500, 0x00000013, 0x82081580, 0x00000013,
- 0x02020000, 0x0010230d, 0x80040800, 0x50040000,
- 0x82001500, 0x00050000, 0x82081580, 0x00050000,
- 0x02020000, 0x0010230d, 0x836c0580, 0x00000000,
- 0x04000012, 0x599c0019, 0x8c00050e, 0x0402000f,
- 0x0201f000, 0x0010230d, 0x80500800, 0x50040000,
- 0x82001500, 0x00000013, 0x02020000, 0x0010230d,
- 0x80040800, 0x50040000, 0x82001500, 0x00050000,
- 0x02020000, 0x0010230d, 0x4200b000, 0x00000008,
- 0x4200a800, 0x0010cb3e, 0x0201f800, 0x0010c086,
- 0x0201f000, 0x001022c6, 0x4031d800, 0x58ef400a,
- 0x58ee580c, 0x58ec0002, 0x82000580, 0x00000200,
- 0x02000000, 0x00102301, 0x4200b000, 0x00000004,
- 0x4200a800, 0x0010cfcb, 0x832ca400, 0x00000006,
- 0x0201f800, 0x0010c086, 0x850e1d50, 0x0201f000,
- 0x001022c6, 0x0201f800, 0x00103966, 0x04020005,
- 0x4a034407, 0x00000002, 0x0201f000, 0x00102309,
- 0x832cac00, 0x00000006, 0x59a00c07, 0x82040500,
- 0x0000ff00, 0x840001c0, 0x82001480, 0x00000008,
- 0x02021000, 0x0010230d, 0x0c01f001, 0x00102ee7,
- 0x00102eea, 0x00102eed, 0x00102eed, 0x00102eed,
- 0x00102eef, 0x00102eed, 0x00102ef7, 0x4200a000,
- 0x0010cb46, 0x0401f055, 0x4200a000, 0x0010cb53,
- 0x0401f052, 0x0201f000, 0x0010230d, 0x4200b000,
- 0x00000008, 0x40580800, 0x4200a000, 0x0010cb3e,
- 0x0201f800, 0x0010c086, 0x0401f04d, 0x59a00a0b,
- 0x4a03420b, 0x0000001c, 0x82040480, 0x0000001c,
- 0x02001000, 0x0010230d, 0x4200b000, 0x0000000f,
- 0x4178a000, 0x0201f800, 0x0010c08f, 0x832cac00,
- 0x00000006, 0x4200b000, 0x00000004, 0x83a8a400,
- 0x0000001f, 0x0201f800, 0x0010c086, 0x836c0580,
- 0x00000000, 0x04000007, 0x4200b000, 0x00000004,
- 0x83a8a400, 0x00000000, 0x0201f800, 0x0010c086,
- 0x492f4000, 0x0201f800, 0x00103966, 0x04020005,
- 0x4a034407, 0x00000002, 0x0201f000, 0x00102309,
- 0x832cac00, 0x00000006, 0x4200b000, 0x0000000f,
- 0x4178a000, 0x0201f800, 0x0010c08f, 0x832cac00,
- 0x00000007, 0x4200b000, 0x00000004, 0x83a8a400,
- 0x00000023, 0x0201f800, 0x0010c086, 0x492f4001,
- 0x59a25800, 0x59a00208, 0x59a01408, 0x900001c0,
- 0x80081540, 0x59a0020a, 0x59a01c0a, 0x900001c0,
- 0x800c1d40, 0x832c0400, 0x00000006, 0x42000800,
- 0x0000000f, 0x0201f800, 0x00103993, 0x4a01d808,
- 0x00102f4f, 0x1c01f000, 0x4200b000, 0x0000000d,
- 0x40580800, 0x0201f800, 0x0010c0b0, 0x59a00208,
+ 0x4050a800, 0x4004b000, 0x0201f800, 0x0010c607,
+ 0x5c00b000, 0x5c00a800, 0x5c00a000, 0x59a00208,
0x59a01408, 0x900001c0, 0x80081540, 0x59a0020a,
0x59a01c0a, 0x900001c0, 0x800c1d40, 0x832c0400,
- 0x00000006, 0x0201f000, 0x00103993, 0x4031d800,
- 0x58ef400a, 0x58ec0002, 0x82000580, 0x00000200,
- 0x02000000, 0x00102301, 0x59a25801, 0x58ec1006,
- 0x58ec1807, 0x832c0400, 0x00000006, 0x42000800,
- 0x0000000d, 0x0201f000, 0x00103993, 0x836c0580,
- 0x00000000, 0x04020005, 0x4a034407, 0x00000007,
- 0x0201f000, 0x00102309, 0x59a01407, 0x800811c0,
- 0x04020017, 0x59c40801, 0x82040d00, 0x00018000,
- 0x82040580, 0x00000000, 0x04020004, 0x4a034407,
- 0x00000000, 0x0401f056, 0x82040580, 0x00008000,
- 0x04020004, 0x4a034407, 0x00000001, 0x0401f050,
- 0x82040580, 0x00010000, 0x02020800, 0x0010032e,
- 0x4a034407, 0x00000003, 0x0401f049, 0x59a80078,
- 0x8c00053e, 0x0400000d, 0x59a00a08, 0x82040580,
- 0x00000003, 0x04000005, 0x82040580, 0x00000002,
- 0x02020000, 0x0010230d, 0x42000000, 0x00000003,
- 0x40000800, 0x0401f00b, 0x59a80070, 0x8c000508,
- 0x04000005, 0x42000000, 0x00000001, 0x40000800,
- 0x0401f004, 0x59a00208, 0x48034002, 0x59a80837,
- 0x48035037, 0x599c7819, 0x823c7d00, 0xffff1fff,
- 0x800000da, 0x803c7d40, 0x483f3819, 0x0201f800,
- 0x0010162a, 0x0400000d, 0x0201f800, 0x00101638,
- 0x0400000a, 0x0201f800, 0x00101646, 0x04000007,
- 0x0201f800, 0x00101654, 0x04000004, 0x48075037,
- 0x0201f000, 0x0010230d, 0x82080580, 0x00000002,
- 0x04020017, 0x59c40006, 0x84000500, 0x48038806,
- 0x0201f800, 0x001071b4, 0x497b8880, 0x42000000,
- 0x0010cf8b, 0x0201f800, 0x0010bfb3, 0x4803c856,
- 0x850e1d48, 0x4a038808, 0x00000000, 0x4202d800,
- 0x00000004, 0x4a038805, 0x00000001, 0x4a035043,
- 0x00000001, 0x0201f800, 0x00100455, 0x0201f000,
- 0x001022c6, 0x8d0e1d0e, 0x04000005, 0x4a034407,
- 0x00000001, 0x0201f000, 0x00102309, 0x836c0580,
- 0x00000003, 0x04000005, 0x4a034407, 0x00000007,
- 0x0201f000, 0x00102309, 0x59a28c07, 0x59a0320c,
- 0x82183500, 0x000000ff, 0x0201f800, 0x00103a70,
- 0x02020000, 0x0010230d, 0x0201f800, 0x00104a7c,
- 0x02020000, 0x0010230d, 0x83440580, 0x000007fd,
- 0x04000008, 0x0201f800, 0x00104a1c, 0x04000005,
- 0x42000800, 0x00000009, 0x0201f000, 0x00102309,
- 0x0201f800, 0x00103966, 0x04020005, 0x4a034407,
- 0x00000002, 0x0201f000, 0x00102309, 0x497a5a05,
- 0x4a025c05, 0x00008000, 0x0201f800, 0x0010999c,
- 0x04020005, 0x4a034407, 0x00000003, 0x0201f000,
- 0x00102309, 0x4a01d808, 0x00103000, 0x1c01f000,
- 0x592c0006, 0x82000d00, 0x0000ffff, 0x82000500,
- 0xffff0000, 0x82000580, 0x01000000, 0x04020005,
- 0x4a034407, 0x00000004, 0x0201f000, 0x00102309,
- 0x80040904, 0x4c500000, 0x4c540000, 0x4c580000,
- 0x832ca400, 0x00000006, 0x4050a800, 0x4004b000,
- 0x0201f800, 0x0010c0b0, 0x5c00b000, 0x5c00a800,
- 0x5c00a000, 0x59a00208, 0x59a01408, 0x900001c0,
- 0x80081540, 0x59a0020a, 0x59a01c0a, 0x900001c0,
- 0x800c1d40, 0x832c0400, 0x00000006, 0x0201f000,
- 0x00103993, 0x496fc857, 0x836c0580, 0x00000000,
- 0x04000005, 0x4a034407, 0x0000001a, 0x0201f000,
- 0x00102309, 0x0201f800, 0x001050f7, 0x02020800,
- 0x0010412b, 0x42000800, 0x00000020, 0x59a00408,
- 0x59a01208, 0x900811c0, 0x80081540, 0x59a0040a,
- 0x59a01a0a, 0x900c19c0, 0x800c1d40, 0x419c0000,
- 0x49a3c857, 0x0201f800, 0x0010398a, 0x4a01d808,
- 0x00103042, 0x1c01f000, 0x4833c857, 0x59a80078,
- 0x8c00053e, 0x02020800, 0x0010b857, 0x4031d800,
- 0x58ef400a, 0x58ec0002, 0x82000580, 0x00000200,
- 0x02000000, 0x00102301, 0x599c0200, 0x800001c0,
- 0x02000000, 0x0010230d, 0x59a80070, 0x8c000504,
- 0x04020003, 0x8c000506, 0x04000004, 0x599c0019,
- 0x8400050c, 0x48033819, 0x0201f800, 0x0010a1a1,
- 0x59a80070, 0x8c000502, 0x04000004, 0x599c0017,
- 0x84000508, 0x48033817, 0x850e1d20, 0x599c0017,
- 0x8c000508, 0x04000003, 0x850e1d60, 0x0401f008,
- 0x8c00050a, 0x02020000, 0x0010230d, 0x59a80806,
- 0x8c040d16, 0x02020000, 0x0010230d, 0x42024800,
- 0x0010cfd1, 0x4a024a00, 0x00000004, 0x42000800,
- 0x0010cfd0, 0x46000800, 0x00000001, 0x42000800,
- 0x0010cfcf, 0x46000800, 0x0000ffff, 0x59240c00,
- 0x84040d46, 0x599c1017, 0x8c08150a, 0x04020002,
- 0x84040d48, 0x8c081508, 0x04020002, 0x84040d4a,
- 0x84040d4c, 0x48064c00, 0x59240a00, 0x84040d40,
- 0x48064a00, 0x4803c857, 0x8c000504, 0x04020004,
- 0x59c408a3, 0x84040d7a, 0x480788a3, 0x8c000502,
- 0x04020004, 0x59c408a3, 0x84040d08, 0x480788a3,
- 0x599c0c02, 0x8c000500, 0x0402000b, 0x8c000516,
- 0x04000023, 0x4c000000, 0x59240400, 0x84000542,
- 0x840411c0, 0x80081540, 0x480a4c00, 0x5c000000,
- 0x0401f008, 0x4c000000, 0x59240400, 0x84000540,
- 0x840411c0, 0x80081540, 0x480a4c00, 0x5c000000,
- 0x82041480, 0x0000007f, 0x02021000, 0x0010230d,
- 0x82041400, 0x00102116, 0x50081000, 0x82081500,
- 0x000000ff, 0x48064a08, 0x480a4805, 0x480a4c08,
- 0x8c000500, 0x04020006, 0x480b500f, 0x42000800,
- 0x00000003, 0x0201f800, 0x00106e68, 0x0201f800,
- 0x00103a32, 0x04000004, 0x59240400, 0x84000544,
- 0x48024c00, 0x599c0019, 0x42000800, 0x00001000,
- 0x50040800, 0x82040c80, 0x24320001, 0x04001003,
- 0x84000546, 0x48033819, 0x8c000506, 0x0400000f,
- 0x4a03b805, 0x90000000, 0x59a81007, 0x8c081516,
- 0x0402000a, 0x42000800, 0x00007600, 0x4a000805,
- 0xd0000000, 0x42000800, 0x0010cb9b, 0x58041401,
- 0x84081542, 0x48080c01, 0x8c00050e, 0x04020007,
- 0x4c000000, 0x0201f800, 0x00103adb, 0x5c000000,
- 0x02020000, 0x0010230d, 0x82000500, 0x00000030,
- 0x04000003, 0x80000108, 0x0401f003, 0x42000000,
- 0x00000002, 0x48039040, 0x42000800, 0x00000002,
- 0x82000400, 0x001032ba, 0x50001000, 0x0201f800,
- 0x00106e68, 0x599c0201, 0x82000c80, 0x00000100,
- 0x02001000, 0x0010230d, 0x82000c80, 0x00000841,
- 0x02021000, 0x0010230d, 0x82000500, 0x00000007,
- 0x02020000, 0x0010230d, 0x599c0401, 0x80000540,
- 0x02000000, 0x0010230d, 0x599c0409, 0x599c0c07,
- 0x80040c80, 0x02021000, 0x0010230d, 0x80000040,
- 0x02000000, 0x0010230d, 0x599c0209, 0x599c0a07,
- 0x80040c80, 0x02021000, 0x0010230d, 0x80000040,
- 0x02000000, 0x0010230d, 0x0201f800, 0x0010559c,
- 0x0201f800, 0x00104dd6, 0x599c0201, 0x48035004,
- 0x0201f800, 0x00101279, 0x599c020a, 0x800001c0,
- 0x04000003, 0x48035031, 0x0401f003, 0x4a035031,
- 0x000000c8, 0x8d0e1d20, 0x04000004, 0x0201f800,
- 0x001066a7, 0x417a5000, 0x599c0003, 0x599c0804,
- 0x9c0001c0, 0x9c0409c0, 0x48024801, 0x48064802,
- 0x48035002, 0x48075003, 0x599c1017, 0x8c08151c,
- 0x04000006, 0x599c0005, 0x599c0806, 0x9c0001c0,
- 0x9c0409c0, 0x0401f003, 0x82000500, 0xf0ffffff,
- 0x48024803, 0x48064804, 0x48035000, 0x48075001,
- 0x42001000, 0x0010cb46, 0x48001000, 0x48041001,
- 0x42001000, 0x0010cb53, 0x48001000, 0x48041001,
- 0x59a00207, 0x82000580, 0x00000048, 0x040200de,
- 0x0201f800, 0x00103966, 0x04020005, 0x4a034407,
- 0x00000002, 0x0201f000, 0x00102309, 0x42000800,
- 0x00000010, 0x59a00208, 0x59a01408, 0x900001c0,
- 0x80081540, 0x59a0020a, 0x59a01c0a, 0x900001c0,
- 0x800c1d40, 0x82081400, 0x00000080, 0x82083400,
- 0x00000040, 0x481b4002, 0x820c3440, 0x00000000,
- 0x481b4003, 0x832c0400, 0x00000005, 0x0201f800,
- 0x0010398a, 0x4a01d808, 0x00103168, 0x1c01f000,
- 0x4031d800, 0x58ef400a, 0x58ee580c, 0x58ec0002,
- 0x82000580, 0x00000200, 0x02000000, 0x00102301,
- 0x592c1005, 0x480bc857, 0x80080120, 0x42024800,
- 0x0010cfd1, 0x48024c06, 0x82081500, 0x0000ffff,
- 0x599c0818, 0x82040d00, 0x00000030, 0x82040580,
- 0x00000000, 0x04020006, 0x82080480, 0x0000007e,
- 0x02021000, 0x0010230d, 0x0401f007, 0x59a80078,
- 0x8c00053e, 0x04000004, 0x82080480, 0x00000040,
- 0x0401f01c, 0x0201f800, 0x0010c0e8, 0x04000017,
- 0x82080480, 0x00000081, 0x02021000, 0x0010230d,
- 0x42000000, 0x0010cfd0, 0x44080000, 0x800811c0,
- 0x02000000, 0x0010230d, 0x40080800, 0x42024800,
- 0x0010cfd1, 0x832e5c00, 0x00000006, 0x592c0400,
- 0x8c000506, 0x04020014, 0x59240200, 0x84000500,
- 0x48024a00, 0x0401f010, 0x82080480, 0x00000080,
- 0x02021000, 0x0010230d, 0x80080800, 0x42000000,
- 0x0010cfd0, 0x44040000, 0x800811c0, 0x0400007a,
- 0x42024800, 0x0010cfdc, 0x80040840, 0x832e5c00,
- 0x00000006, 0x42004000, 0x00000003, 0x592c0400,
- 0x8c000506, 0x04000012, 0x8c00050a, 0x04020004,
- 0x8d0e1d20, 0x02000000, 0x0010230d, 0x4a024a00,
- 0x00000005, 0x82001500, 0x00000003, 0x04000006,
- 0x840011c0, 0x82081500, 0x000000ff, 0x480a4a08,
- 0x0401f003, 0x82000500, 0x000000ff, 0x48024c00,
- 0x592c0001, 0x592c1002, 0x9c0001c0, 0x9c0811c0,
- 0x48024801, 0x480a4802, 0x599c1817, 0x8c0c1d1c,
- 0x04000006, 0x592c0003, 0x592c1004, 0x9c0001c0,
- 0x9c0811c0, 0x0401f003, 0x82000500, 0xf0ffffff,
- 0x48024803, 0x480a4804, 0x832e5c00, 0x00000005,
- 0x83264c00, 0x0000000b, 0x80040840, 0x04000024,
- 0x80204040, 0x040207d2, 0x48074000, 0x49274001,
- 0x42000800, 0x0000000f, 0x59a01002, 0x59a01803,
- 0x82083400, 0x0000003c, 0x481b4002, 0x820c3440,
- 0x00000000, 0x481b4003, 0x58ee580c, 0x832c0400,
- 0x00000005, 0x0201f800, 0x0010398a, 0x4a01d808,
- 0x001031f6, 0x1c01f000, 0x4031d800, 0x58ef400a,
- 0x58ec0002, 0x82000580, 0x00000200, 0x02000000,
- 0x00102301, 0x58ee580c, 0x832e5c00, 0x00000005,
- 0x59a00800, 0x59a24801, 0x0401f7af, 0x0201f800,
- 0x0010c0e8, 0x04000011, 0x42006800, 0x0010cfd1,
- 0x4200b000, 0x0010cfd0, 0x5058b000, 0x58340400,
- 0x8c000506, 0x04000005, 0x58340200, 0x8400055e,
- 0x48006a00, 0x0401f005, 0x82346c00, 0x0000000b,
- 0x8058b040, 0x040207f6, 0x42006800, 0x0010cfd1,
- 0x4200b000, 0x0010cfd0, 0x5058b000, 0x8058b040,
- 0x04000009, 0x42024800, 0x0010cfdc, 0x58340206,
- 0x48024a06, 0x83264c00, 0x0000000b, 0x8058b040,
- 0x040207fb, 0x59a80070, 0x8c000508, 0x04020017,
- 0x8c00050a, 0x04020023, 0x599c1019, 0x82081500,
- 0x0000e000, 0x82080580, 0x00000000, 0x0402000c,
- 0x4a035037, 0x00000000, 0x42000000, 0x00000001,
- 0x0201f800, 0x001018a7, 0x42000000, 0x00000001,
- 0x0201f800, 0x0010182d, 0x0401f030, 0x82080580,
- 0x00002000, 0x0402000c, 0x4a035037, 0x00000001,
- 0x42000000, 0x00000000, 0x0201f800, 0x001018a7,
- 0x42000000, 0x00000000, 0x0201f800, 0x0010182d,
- 0x0401f022, 0x82080580, 0x00004000, 0x04020006,
- 0x4a035037, 0x00000002, 0x4a035043, 0x00000001,
- 0x0401f01a, 0x82080580, 0x00006000, 0x02020000,
- 0x0010230d, 0x59a80878, 0x8c040d3e, 0x04020009,
- 0x59a80847, 0x82040d80, 0x01391077, 0x04020005,
- 0x59e00813, 0x8c040d00, 0x02020000, 0x0010230d,
- 0x4a035037, 0x00000003, 0x42000000, 0x00000002,
- 0x0201f800, 0x001018a7, 0x42000000, 0x00000002,
- 0x0201f800, 0x0010182d, 0x599c1019, 0x82081500,
- 0x0000e000, 0x599c0019, 0x8c000520, 0x0400000d,
- 0x42000000, 0x00000004, 0x42000800, 0x00000040,
- 0x0201f800, 0x00101949, 0x42000000, 0x00000010,
- 0x42000800, 0x000000c0, 0x0201f800, 0x00101949,
- 0x4a035013, 0x0000aaaa, 0x599c1018, 0x82081500,
- 0x00000030, 0x59a8006d, 0x80000540, 0x0400000c,
- 0x82080580, 0x00000000, 0x02000000, 0x0010230d,
- 0x599c1018, 0x82081500, 0xffffffcf, 0x82081540,
- 0x00000010, 0x480b3818, 0x0401f010, 0x82080d80,
- 0x00000000, 0x04000007, 0x82080d80, 0x00000010,
- 0x0400000a, 0x82080d80, 0x00000020, 0x04020002,
- 0x48075013, 0x0201f800, 0x00103a2d, 0x04000008,
- 0x4803c856, 0x850e1d46, 0x0201f800, 0x0010160b,
- 0x59a8001f, 0x80040540, 0x4803501f, 0x49f3c857,
- 0x42001000, 0x00105013, 0x0201f800, 0x001064fe,
- 0x42001000, 0x00105002, 0x0201f800, 0x0010664e,
- 0x4a038805, 0xffffffff, 0x4a03c014, 0x00400040,
- 0x4a03c013, 0x00400000, 0x0201f800, 0x00104922,
- 0x59a0001e, 0x84000540, 0x4803401e, 0x49f3c857,
- 0x0201f000, 0x001022c6, 0x00000018, 0x0000000c,
- 0x00000018, 0x00000020, 0x836c0580, 0x00000000,
- 0x04020005, 0x42000800, 0x00000007, 0x0201f000,
- 0x00102309, 0x42000800, 0x00000020, 0x59a00408,
- 0x59a01208, 0x900811c0, 0x80081540, 0x59a0040a,
- 0x59a01a0a, 0x900c19c0, 0x800c1d40, 0x419c0000,
- 0x0201f000, 0x00103993, 0x8d0e1d0e, 0x04000005,
- 0x4a034407, 0x00000001, 0x0201f000, 0x00102309,
- 0x0201f800, 0x001050f7, 0x04020005, 0x4a034407,
- 0x00000016, 0x0201f000, 0x00102309, 0x59a80056,
- 0x8c000500, 0x04000011, 0x4a034407, 0x00000000,
- 0x42000800, 0x00000020, 0x59a00408, 0x59a01208,
- 0x900811c0, 0x80081540, 0x59a0040a, 0x59a01a0a,
- 0x900c19c0, 0x800c1d40, 0x42000000, 0x0010e251,
- 0x0201f000, 0x00103993, 0x4a034407, 0x00000001,
- 0x4200b000, 0x00000020, 0x4200a800, 0x0010e251,
- 0x4200a000, 0xffffffff, 0x4450a800, 0x8054a800,
- 0x8058b040, 0x040207fd, 0x4d440000, 0x4d340000,
- 0x42028800, 0xffffffff, 0x42002000, 0xffffffff,
- 0x42003000, 0x00000001, 0x42003800, 0x00000001,
- 0x42001800, 0x0010e251, 0x59a8100f, 0x82081500,
- 0x000000ff, 0x40180000, 0x0c01f001, 0x00103313,
- 0x00103316, 0x0010331a, 0x0010331e, 0x82102500,
- 0xffffff00, 0x0401f014, 0x82102500, 0xffff00ff,
- 0x840811c0, 0x0401f010, 0x82102500, 0xff00ffff,
- 0x900811c0, 0x0401f00c, 0x82102500, 0x00ffffff,
- 0x9c0801c0, 0x80102540, 0x44101800, 0x42003000,
- 0xffffffff, 0x42002000, 0xffffffff, 0x800c1800,
- 0x0401f003, 0x40080000, 0x80102540, 0x81468800,
- 0x83442c80, 0x0000007f, 0x04021014, 0x4c080000,
- 0x4c0c0000, 0x4c180000, 0x4c1c0000, 0x0201f800,
- 0x0002034c, 0x5c003800, 0x5c003000, 0x5c001800,
- 0x5c001000, 0x040207f2, 0x0201f800, 0x00104a2f,
- 0x040207ef, 0x80183000, 0x801c3800, 0x59341202,
- 0x40180000, 0x0c01f7ce, 0x82100580, 0xffffffff,
- 0x04000002, 0x44101800, 0x42001800, 0x0010e251,
- 0x500c0000, 0x82000500, 0xffffff00, 0x801c0540,
- 0x44001800, 0x5c026800, 0x5c028800, 0x42000800,
+ 0x00000006, 0x0201f000, 0x00103a35, 0x496fc857,
+ 0x836c0580, 0x00000000, 0x04000005, 0x4a034407,
+ 0x0000001a, 0x0201f000, 0x0010239a, 0x0201f800,
+ 0x001052aa, 0x02020800, 0x00104216, 0x42000800,
0x00000020, 0x59a00408, 0x59a01208, 0x900811c0,
0x80081540, 0x59a0040a, 0x59a01a0a, 0x900c19c0,
- 0x800c1d40, 0x42000000, 0x0010e251, 0x0201f000,
- 0x00103993, 0x59a28c07, 0x0201f800, 0x00103a70,
- 0x02020000, 0x0010230d, 0x0201f800, 0x00104a7c,
- 0x02020000, 0x0010230d, 0x0201f800, 0x00103966,
+ 0x800c1d40, 0x419c0000, 0x49a3c857, 0x0201f800,
+ 0x00103a28, 0x4a01d808, 0x001030dc, 0x1c01f000,
+ 0x4833c857, 0x59a80086, 0x8c00053e, 0x02020800,
+ 0x0010bdac, 0x0401ff12, 0x02000000, 0x00102392,
+ 0x599c0200, 0x800001c0, 0x02000000, 0x0010239e,
+ 0x59a8007e, 0x8c000504, 0x04020003, 0x8c000506,
+ 0x04000004, 0x599c0019, 0x8400050c, 0x48033819,
+ 0x0201f800, 0x0010a59f, 0x59a8007e, 0x8c000502,
+ 0x04000004, 0x599c0017, 0x84000508, 0x48033817,
+ 0x850e1d20, 0x599c0017, 0x8c000508, 0x04000003,
+ 0x850e1d60, 0x0401f008, 0x8c00050a, 0x02020000,
+ 0x0010239e, 0x59a80806, 0x8c040d16, 0x02020000,
+ 0x0010239e, 0x42024800, 0x0010d5ef, 0x4a024a00,
+ 0x00000004, 0x42000800, 0x0010d5ee, 0x46000800,
+ 0x00000001, 0x42000800, 0x0010d5ed, 0x46000800,
+ 0x0000ffff, 0x59240c00, 0x84040d46, 0x599c1017,
+ 0x8c08150a, 0x04020002, 0x84040d48, 0x8c081508,
+ 0x04020002, 0x84040d4a, 0x84040d4c, 0x48064c00,
+ 0x59240a00, 0x84040d40, 0x48064a00, 0x4803c857,
+ 0x8c000504, 0x04020004, 0x59c408a3, 0x84040d7a,
+ 0x480788a3, 0x8c000502, 0x04020004, 0x59c408a3,
+ 0x84040d08, 0x480788a3, 0x599c0c02, 0x8c000500,
+ 0x0402000b, 0x8c000516, 0x04000023, 0x4c000000,
+ 0x59240400, 0x84000542, 0x840411c0, 0x80081540,
+ 0x480a4c00, 0x5c000000, 0x0401f008, 0x4c000000,
+ 0x59240400, 0x84000540, 0x840411c0, 0x80081540,
+ 0x480a4c00, 0x5c000000, 0x82041480, 0x0000007f,
+ 0x02021000, 0x0010239e, 0x82041400, 0x001021a6,
+ 0x50081000, 0x82081500, 0x000000ff, 0x48064a08,
+ 0x480a4805, 0x480a4c08, 0x8c000500, 0x04020006,
+ 0x480b5015, 0x42000800, 0x00000003, 0x0201f800,
+ 0x001071d7, 0x0201f800, 0x00103ad2, 0x04000004,
+ 0x59240400, 0x84000544, 0x48024c00, 0x599c0019,
+ 0x59a80806, 0x8c040d04, 0x04020009, 0x42000800,
+ 0x00001000, 0x50040800, 0x82040c80, 0x24320001,
+ 0x04001003, 0x84000546, 0x48033819, 0x8c000506,
+ 0x0400000f, 0x4a03b805, 0x90000000, 0x59a81007,
+ 0x8c081516, 0x0402000a, 0x42000800, 0x00007600,
+ 0x4a000805, 0xd0000000, 0x42000800, 0x0010d1b1,
+ 0x58041401, 0x84081542, 0x48080c01, 0x8c00050e,
+ 0x04020007, 0x4c000000, 0x0201f800, 0x00103b7b,
+ 0x5c000000, 0x02020000, 0x0010239e, 0x82000500,
+ 0x00000030, 0x04000003, 0x80000108, 0x0401f003,
+ 0x42000000, 0x00000002, 0x48039040, 0x42000800,
+ 0x00000002, 0x82000400, 0x00103353, 0x50001000,
+ 0x0201f800, 0x001071d7, 0x599c0201, 0x82000c80,
+ 0x00000100, 0x02001000, 0x0010239e, 0x82000c80,
+ 0x00000841, 0x02021000, 0x0010239e, 0x82000500,
+ 0x00000007, 0x02020000, 0x0010239e, 0x599c0401,
+ 0x80000540, 0x02000000, 0x0010239e, 0x599c0409,
+ 0x599c0c07, 0x80040c80, 0x02021000, 0x0010239e,
+ 0x80000040, 0x02000000, 0x0010239e, 0x599c0209,
+ 0x599c0a07, 0x80040c80, 0x02021000, 0x0010239e,
+ 0x80000040, 0x02000000, 0x0010239e, 0x0201f800,
+ 0x0010577d, 0x0201f800, 0x00104f4e, 0x599c0201,
+ 0x48035004, 0x0201f800, 0x001012d3, 0x599c020a,
+ 0x800001c0, 0x04000003, 0x48035037, 0x0401f003,
+ 0x4a035037, 0x000000c8, 0x8d0e1d20, 0x04000009,
+ 0x599c0413, 0x82000c80, 0x00000002, 0x02001000,
+ 0x0010239e, 0x0201f800, 0x00106a07, 0x417a5000,
+ 0x599c0003, 0x599c0804, 0x9c0001c0, 0x9c0409c0,
+ 0x48024801, 0x48064802, 0x48035002, 0x48075003,
+ 0x599c1017, 0x8c08151c, 0x04000006, 0x599c0005,
+ 0x599c0806, 0x9c0001c0, 0x9c0409c0, 0x0401f003,
+ 0x82000500, 0xf0ffffff, 0x48024803, 0x48064804,
+ 0x48035000, 0x48075001, 0x42001000, 0x0010d15c,
+ 0x48001000, 0x48041001, 0x42001000, 0x0010d169,
+ 0x48001000, 0x48041001, 0x59a00207, 0x82000580,
+ 0x00000048, 0x040200d6, 0x0201f800, 0x00103a04,
0x04020005, 0x4a034407, 0x00000002, 0x0201f000,
- 0x00102309, 0x59a0020c, 0x8c000500, 0x04000005,
- 0x0201f800, 0x00104a2f, 0x02020000, 0x00103a37,
- 0x59a0020c, 0x8c000502, 0x0400001b, 0x83440480,
- 0x000007f0, 0x04021018, 0x0201f800, 0x00104a38,
- 0x04020015, 0x497a5a05, 0x4a025c05, 0x00008000,
- 0x59a24805, 0x0201f800, 0x00109969, 0x04020005,
- 0x4a034407, 0x00000003, 0x0201f000, 0x00102309,
- 0x4a01d808, 0x0010338b, 0x1c01f000, 0x59a28c07,
- 0x59a2440b, 0x0201f800, 0x00104a7c, 0x02020000,
- 0x0010230d, 0x4c580000, 0x4c500000, 0x4c540000,
- 0x4200b000, 0x0000000a, 0x4134a000, 0x832e5c00,
- 0x00000002, 0x412ca800, 0x0201f800, 0x0010c086,
- 0x832cac00, 0x00000006, 0x4054a000, 0x4200b000,
- 0x00000004, 0x0201f800, 0x0010c0b0, 0x5c00a800,
- 0x5c00a000, 0x5c00b000, 0x592c0802, 0x82040500,
- 0x00ff00ff, 0x900001c0, 0x82041500, 0xff00ff00,
- 0x80080540, 0x48025802, 0x592c0801, 0x82040500,
- 0x00ff00ff, 0x900001c0, 0x82041500, 0xff00ff00,
- 0x80080540, 0x48025801, 0x42000800, 0x0000000a,
+ 0x0010239a, 0x42000800, 0x00000010, 0x59a00208,
+ 0x59a01408, 0x900001c0, 0x80081540, 0x59a0020a,
+ 0x59a01c0a, 0x900001c0, 0x800c1d40, 0x82081400,
+ 0x00000080, 0x82083400, 0x00000040, 0x481b4002,
+ 0x820c3440, 0x00000000, 0x481b4003, 0x832c0400,
+ 0x00000005, 0x0201f800, 0x00103a28, 0x4a01d808,
+ 0x00103206, 0x1c01f000, 0x0401fded, 0x02000000,
+ 0x00102392, 0x58ee580c, 0x592c1005, 0x480bc857,
+ 0x80080120, 0x42024800, 0x0010d5ef, 0x48024c06,
+ 0x82081500, 0x0000ffff, 0x599c0818, 0x82040d00,
+ 0x00000030, 0x82040580, 0x00000000, 0x04020006,
+ 0x82080480, 0x0000007e, 0x02021000, 0x0010239e,
+ 0x0401f007, 0x59a80086, 0x8c00053e, 0x04000004,
+ 0x82080480, 0x00000040, 0x0401f01c, 0x0201f800,
+ 0x0010c63f, 0x04000017, 0x82080480, 0x00000081,
+ 0x02021000, 0x0010239e, 0x42000000, 0x0010d5ee,
+ 0x44080000, 0x800811c0, 0x02000000, 0x0010239e,
+ 0x40080800, 0x42024800, 0x0010d5ef, 0x832e5c00,
+ 0x00000006, 0x592c0400, 0x8c000506, 0x04020014,
+ 0x59240200, 0x84000500, 0x48024a00, 0x0401f010,
+ 0x82080480, 0x00000080, 0x02021000, 0x0010239e,
+ 0x80080800, 0x42000000, 0x0010d5ee, 0x44040000,
+ 0x800811c0, 0x04000076, 0x42024800, 0x0010d5fa,
+ 0x80040840, 0x832e5c00, 0x00000006, 0x42004000,
+ 0x00000003, 0x592c0400, 0x8c000506, 0x04000012,
+ 0x8c00050a, 0x04020004, 0x8d0e1d20, 0x02000000,
+ 0x0010239e, 0x4a024a00, 0x00000005, 0x82001500,
+ 0x00000003, 0x04000006, 0x840011c0, 0x82081500,
+ 0x000000ff, 0x480a4a08, 0x0401f003, 0x82000500,
+ 0x000000ff, 0x48024c00, 0x592c0001, 0x592c1002,
+ 0x9c0001c0, 0x9c0811c0, 0x48024801, 0x480a4802,
+ 0x599c1817, 0x8c0c1d1c, 0x04000006, 0x592c0003,
+ 0x592c1004, 0x9c0001c0, 0x9c0811c0, 0x0401f003,
+ 0x82000500, 0xf0ffffff, 0x48024803, 0x480a4804,
+ 0x832e5c00, 0x00000005, 0x83264c00, 0x0000000b,
+ 0x80040840, 0x04000020, 0x80204040, 0x040207d2,
+ 0x48074000, 0x49274001, 0x42000800, 0x0000000f,
+ 0x59a01002, 0x59a01803, 0x82083400, 0x0000003c,
+ 0x481b4002, 0x820c3440, 0x00000000, 0x481b4003,
+ 0x58ee580c, 0x832c0400, 0x00000005, 0x0201f800,
+ 0x00103a28, 0x4a01d808, 0x00103290, 0x1c01f000,
+ 0x0401fd63, 0x02000000, 0x00102392, 0x58ee580c,
+ 0x832e5c00, 0x00000005, 0x59a00800, 0x59a24801,
+ 0x0401f7b3, 0x0201f800, 0x0010c63f, 0x04000011,
+ 0x42006800, 0x0010d5ef, 0x4200b000, 0x0010d5ee,
+ 0x5058b000, 0x58340400, 0x8c000506, 0x04000005,
+ 0x58340200, 0x8400055e, 0x48006a00, 0x0401f005,
+ 0x82346c00, 0x0000000b, 0x8058b040, 0x040207f6,
+ 0x42006800, 0x0010d5ef, 0x4200b000, 0x0010d5ee,
+ 0x5058b000, 0x8058b040, 0x04000009, 0x42024800,
+ 0x0010d5fa, 0x58340206, 0x48024a06, 0x83264c00,
+ 0x0000000b, 0x8058b040, 0x040207fb, 0x59a8007e,
+ 0x8c000508, 0x04020017, 0x8c00050a, 0x04020023,
+ 0x599c1019, 0x82081500, 0x0000e000, 0x82080580,
+ 0x00000000, 0x0402000c, 0x4a03503d, 0x00000000,
+ 0x42000000, 0x00000001, 0x0201f800, 0x00101915,
+ 0x42000000, 0x00000001, 0x0201f800, 0x0010189b,
+ 0x0401f030, 0x82080580, 0x00002000, 0x0402000c,
+ 0x4a03503d, 0x00000001, 0x42000000, 0x00000000,
+ 0x0201f800, 0x00101915, 0x42000000, 0x00000000,
+ 0x0201f800, 0x0010189b, 0x0401f022, 0x82080580,
+ 0x00004000, 0x04020006, 0x4a03503d, 0x00000002,
+ 0x4a035049, 0x00000001, 0x0401f01a, 0x82080580,
+ 0x00006000, 0x02020000, 0x0010239e, 0x59a80886,
+ 0x8c040d3e, 0x04020009, 0x59a8084d, 0x82040d80,
+ 0x01391077, 0x04020005, 0x59e00813, 0x8c040d00,
+ 0x02020000, 0x0010239e, 0x4a03503d, 0x00000003,
+ 0x42000000, 0x00000002, 0x0201f800, 0x00101915,
+ 0x42000000, 0x00000002, 0x0201f800, 0x0010189b,
+ 0x599c1019, 0x82081500, 0x0000e000, 0x599c0019,
+ 0x8c000520, 0x0400000d, 0x42000000, 0x00000004,
+ 0x42000800, 0x00000040, 0x0201f800, 0x001019b7,
+ 0x42000000, 0x00000010, 0x42000800, 0x000000c0,
+ 0x0201f800, 0x001019b7, 0x4a035019, 0x0000aaaa,
+ 0x599c1018, 0x82081500, 0x00000030, 0x59a8007b,
+ 0x80000540, 0x0400000c, 0x82080580, 0x00000000,
+ 0x02000000, 0x0010239e, 0x599c1018, 0x82081500,
+ 0xffffffcf, 0x82081540, 0x00000010, 0x480b3818,
+ 0x0401f010, 0x82080d80, 0x00000000, 0x04000007,
+ 0x82080d80, 0x00000010, 0x0400000a, 0x82080d80,
+ 0x00000020, 0x04020002, 0x48075019, 0x0201f800,
+ 0x00103acd, 0x04000008, 0x4803c856, 0x850e1d46,
+ 0x0201f800, 0x00101679, 0x59a80025, 0x80040540,
+ 0x48035025, 0x49f3c857, 0x42001000, 0x001051c6,
+ 0x0201f800, 0x0010686f, 0x42001000, 0x001051b5,
+ 0x0201f800, 0x001069b8, 0x4a038805, 0xffffffff,
+ 0x599c1019, 0x8c08153c, 0x04020005, 0x4a03c014,
+ 0x00400040, 0x4a03c013, 0x00400000, 0x0201f800,
+ 0x00104a78, 0x59a0001e, 0x84000540, 0x4803401e,
+ 0x49f3c857, 0x0201f000, 0x00102357, 0x00000018,
+ 0x0000000c, 0x00000018, 0x00000020, 0x836c0580,
+ 0x00000000, 0x04020005, 0x42000800, 0x00000007,
+ 0x0201f000, 0x0010239a, 0x42000800, 0x00000020,
0x59a00408, 0x59a01208, 0x900811c0, 0x80081540,
0x59a0040a, 0x59a01a0a, 0x900c19c0, 0x800c1d40,
- 0x412c0000, 0x0201f000, 0x00103993, 0x496fc857,
- 0x496f4407, 0x59a80878, 0x8c040d3e, 0x02000000,
- 0x001022c6, 0x59a81078, 0x82081500, 0x00000097,
- 0x59a81879, 0x59340400, 0x82000580, 0x00000404,
- 0x04020002, 0x84081546, 0x480b4408, 0x0201f000,
- 0x001022c6, 0x59a28c07, 0x0201f800, 0x00103a70,
- 0x02020000, 0x0010230d, 0x0201f800, 0x00104a7c,
- 0x02020000, 0x0010230d, 0x836c0580, 0x00000003,
- 0x04000005, 0x4a034407, 0x00000007, 0x0201f000,
- 0x00102309, 0x83340c00, 0x00000006, 0x59a0020c,
- 0x8c000500, 0x04000003, 0x83340c00, 0x00000008,
- 0x58040001, 0x4803440a, 0x900001c0, 0x4803420a,
- 0x50040000, 0x48034408, 0x900001c0, 0x48034208,
- 0x59340200, 0x48034407, 0x0201f000, 0x001022c6,
- 0x8d0e1d0e, 0x04000005, 0x4a034407, 0x00000001,
- 0x0201f000, 0x00102309, 0x59a0220c, 0x8c102500,
- 0x0402002e, 0x8c102506, 0x04020006, 0x59a03209,
- 0x82180480, 0x00000003, 0x02021000, 0x0010230d,
- 0x59a28c07, 0x0201f800, 0x0002034c, 0x02020000,
- 0x0010230d, 0x0201f800, 0x00104a1c, 0x04000005,
- 0x4a034407, 0x00000009, 0x0201f000, 0x00102309,
- 0x0201f800, 0x00103966, 0x04020005, 0x4a034407,
- 0x00000002, 0x0201f000, 0x00102309, 0x59a0220c,
- 0x8c102506, 0x04000004, 0x59343002, 0x82183500,
- 0x00ffffff, 0x497a5a05, 0x4a025c05, 0x00008000,
- 0x0201f800, 0x00109922, 0x04020005, 0x4a034407,
- 0x00000003, 0x0201f000, 0x00102309, 0x4a01d808,
- 0x00103484, 0x1c01f000, 0x59a28c07, 0x0201f800,
- 0x0002034c, 0x02020000, 0x0010230d, 0x0201f800,
- 0x00104a1c, 0x04000005, 0x4a034407, 0x00000009,
- 0x0201f000, 0x00102309, 0x0201f800, 0x00103966,
- 0x04020005, 0x4a034407, 0x00000002, 0x0201f000,
- 0x00102309, 0x497a5a05, 0x4a025c05, 0x00008000,
- 0x0201f800, 0x00103966, 0x04020005, 0x4a034407,
- 0x00000002, 0x0201f000, 0x00102309, 0x592e5800,
- 0x0201f800, 0x0010993a, 0x04020005, 0x4a034407,
- 0x00000003, 0x0201f000, 0x00102309, 0x4a01d808,
- 0x00103456, 0x1c01f000, 0x592c2806, 0x82140d80,
+ 0x419c0000, 0x0201f000, 0x00103a35, 0x8d0e1d0e,
+ 0x04000005, 0x4a034407, 0x00000001, 0x0201f000,
+ 0x0010239a, 0x0201f800, 0x001052aa, 0x04020005,
+ 0x4a034407, 0x00000016, 0x0201f000, 0x0010239a,
+ 0x59a80064, 0x8c000500, 0x04000011, 0x4a034407,
+ 0x00000000, 0x42000800, 0x00000020, 0x59a00408,
+ 0x59a01208, 0x900811c0, 0x80081540, 0x59a0040a,
+ 0x59a01a0a, 0x900c19c0, 0x800c1d40, 0x42000000,
+ 0x0010e86f, 0x0201f000, 0x00103a35, 0x4a034407,
+ 0x00000001, 0x4200b000, 0x00000020, 0x4200a800,
+ 0x0010e86f, 0x4200a000, 0xffffffff, 0x4450a800,
+ 0x8054a800, 0x8058b040, 0x040207fd, 0x4d440000,
+ 0x4d340000, 0x42028800, 0xffffffff, 0x42002000,
+ 0xffffffff, 0x42003000, 0x00000001, 0x42003800,
+ 0x00000001, 0x42001800, 0x0010e86f, 0x59a81015,
+ 0x82081500, 0x000000ff, 0x40180000, 0x0c01f001,
+ 0x001033ac, 0x001033af, 0x001033b3, 0x001033b7,
+ 0x82102500, 0xffffff00, 0x0401f014, 0x82102500,
+ 0xffff00ff, 0x840811c0, 0x0401f010, 0x82102500,
+ 0xff00ffff, 0x900811c0, 0x0401f00c, 0x82102500,
+ 0x00ffffff, 0x9c0801c0, 0x80102540, 0x44101800,
+ 0x42003000, 0xffffffff, 0x42002000, 0xffffffff,
+ 0x800c1800, 0x0401f003, 0x40080000, 0x80102540,
+ 0x81468800, 0x83442c80, 0x0000007f, 0x04021014,
+ 0x4c080000, 0x4c0c0000, 0x4c180000, 0x4c1c0000,
+ 0x0201f800, 0x00020353, 0x5c003800, 0x5c003000,
+ 0x5c001800, 0x5c001000, 0x040207f2, 0x0201f800,
+ 0x00104b88, 0x040207ef, 0x80183000, 0x801c3800,
+ 0x59341202, 0x40180000, 0x0c01f7ce, 0x82100580,
+ 0xffffffff, 0x04000002, 0x44101800, 0x42001800,
+ 0x0010e86f, 0x500c0000, 0x82000500, 0xffffff00,
+ 0x801c0540, 0x44001800, 0x5c026800, 0x5c028800,
+ 0x42000800, 0x00000020, 0x59a00408, 0x59a01208,
+ 0x900811c0, 0x80081540, 0x59a0040a, 0x59a01a0a,
+ 0x900c19c0, 0x800c1d40, 0x42000000, 0x0010e86f,
+ 0x0201f000, 0x00103a35, 0x59a28c07, 0x0201f800,
+ 0x00103b10, 0x02020000, 0x0010239e, 0x59a0020c,
+ 0x8c000500, 0x0400000e, 0x59a01209, 0x59a00409,
+ 0x82000500, 0x000000ff, 0x900001c0, 0x80081540,
+ 0x41784000, 0x0201f800, 0x00104aff, 0x04000008,
+ 0x48034407, 0x0201f000, 0x0010239e, 0x0201f800,
+ 0x00104bd5, 0x02020000, 0x0010239e, 0x0201f800,
+ 0x00103a04, 0x04020005, 0x4a034407, 0x00000002,
+ 0x0201f000, 0x0010239a, 0x59a0020c, 0x8c000500,
+ 0x04000005, 0x0201f800, 0x00104b88, 0x02020000,
+ 0x00103ad7, 0x59a0020c, 0x8c000502, 0x0400001b,
+ 0x83440480, 0x000007f0, 0x04021018, 0x0201f800,
+ 0x00104b91, 0x04020015, 0x497a5a05, 0x4a025c05,
+ 0x00008000, 0x59a24805, 0x0201f800, 0x00109d19,
+ 0x04020005, 0x4a034407, 0x00000003, 0x0201f000,
+ 0x0010239a, 0x4a01d808, 0x00103434, 0x1c01f000,
+ 0x59a28c07, 0x59a2440b, 0x0201f800, 0x00104bd5,
+ 0x02020000, 0x0010239e, 0x4c580000, 0x4c500000,
+ 0x4c540000, 0x4200b000, 0x0000000a, 0x4134a000,
+ 0x832e5c00, 0x00000002, 0x412ca800, 0x0201f800,
+ 0x0010c5dd, 0x832cac00, 0x00000006, 0x4054a000,
+ 0x4200b000, 0x00000004, 0x0201f800, 0x0010c607,
+ 0x5c00a800, 0x5c00a000, 0x5c00b000, 0x592c0802,
+ 0x82040500, 0x00ff00ff, 0x900001c0, 0x82041500,
+ 0xff00ff00, 0x80080540, 0x48025802, 0x592c0801,
+ 0x82040500, 0x00ff00ff, 0x900001c0, 0x82041500,
+ 0xff00ff00, 0x80080540, 0x48025801, 0x42000800,
+ 0x0000000a, 0x59a00408, 0x59a01208, 0x900811c0,
+ 0x80081540, 0x59a0040a, 0x59a01a0a, 0x900c19c0,
+ 0x800c1d40, 0x412c0000, 0x0201f000, 0x00103a35,
+ 0x496fc857, 0x496f4407, 0x59a80886, 0x8c040d3e,
+ 0x02000000, 0x00102357, 0x59a81086, 0x82081500,
+ 0x00000097, 0x59a81887, 0x59340400, 0x82000580,
+ 0x00000404, 0x04020002, 0x84081546, 0x480b4408,
+ 0x0201f000, 0x00102357, 0x59a28c07, 0x0201f800,
+ 0x00103b10, 0x02020000, 0x0010239e, 0x0201f800,
+ 0x00104bd5, 0x02020000, 0x0010239e, 0x836c0580,
+ 0x00000003, 0x04000005, 0x4a034407, 0x00000007,
+ 0x0201f000, 0x0010239a, 0x83340c00, 0x00000006,
+ 0x59a0020c, 0x8c000500, 0x04000003, 0x83340c00,
+ 0x00000008, 0x58040001, 0x4803440a, 0x900001c0,
+ 0x4803420a, 0x50040000, 0x48034408, 0x900001c0,
+ 0x48034208, 0x59340200, 0x48034407, 0x0201f000,
+ 0x00102357, 0x8d0e1d0e, 0x04000005, 0x4a034407,
+ 0x00000001, 0x0201f000, 0x0010239a, 0x59a0220c,
+ 0x8c102500, 0x0402002e, 0x8c102506, 0x04020006,
+ 0x59a03209, 0x82180480, 0x00000003, 0x02021000,
+ 0x0010239e, 0x59a28c07, 0x0201f800, 0x00020353,
+ 0x02020000, 0x0010239e, 0x0201f800, 0x00104b75,
+ 0x04000005, 0x4a034407, 0x00000009, 0x0201f000,
+ 0x0010239a, 0x0201f800, 0x00103a04, 0x04020005,
+ 0x4a034407, 0x00000002, 0x0201f000, 0x0010239a,
+ 0x59a0220c, 0x8c102506, 0x04000004, 0x59343002,
+ 0x82183500, 0x00ffffff, 0x497a5a05, 0x4a025c05,
+ 0x00008000, 0x0201f800, 0x00109cd2, 0x04020005,
+ 0x4a034407, 0x00000003, 0x0201f000, 0x0010239a,
+ 0x4a01d808, 0x0010352a, 0x1c01f000, 0x59a28c07,
+ 0x0201f800, 0x00020353, 0x02020000, 0x0010239e,
+ 0x0201f800, 0x00104b75, 0x04000005, 0x4a034407,
+ 0x00000009, 0x0201f000, 0x0010239a, 0x0201f800,
+ 0x00103a04, 0x04020005, 0x4a034407, 0x00000002,
+ 0x0201f000, 0x0010239a, 0x497a5a05, 0x4a025c05,
+ 0x00008000, 0x0201f800, 0x00103a04, 0x04020005,
+ 0x4a034407, 0x00000002, 0x0201f000, 0x0010239a,
+ 0x592e5800, 0x0201f800, 0x00109cea, 0x04020005,
+ 0x4a034407, 0x00000003, 0x0201f000, 0x0010239a,
+ 0x4a01d808, 0x001034ff, 0x1c01f000, 0x592c2806,
+ 0x82140d80, 0x01000000, 0x04020005, 0x4a034407,
+ 0x00000004, 0x0201f000, 0x0010239a, 0x42000800,
+ 0x00000008, 0x59a00208, 0x59a01408, 0x900001c0,
+ 0x80081540, 0x59a0020a, 0x59a01c0a, 0x900001c0,
+ 0x800c1d40, 0x832c0400, 0x00000006, 0x0201f800,
+ 0x00103a35, 0x8c142d00, 0x04000003, 0x4a01d808,
+ 0x0010351a, 0x1c01f000, 0x0201f800, 0x00102ff3,
+ 0x02000000, 0x00102392, 0x58ee580d, 0x812e59c0,
+ 0x02000800, 0x0010032f, 0x42000800, 0x00000008,
+ 0x832c0400, 0x00000006, 0x58ec1006, 0x58ec1807,
+ 0x0201f000, 0x00103a35, 0x592c0006, 0x82000580,
0x01000000, 0x04020005, 0x4a034407, 0x00000004,
- 0x0201f000, 0x00102309, 0x42000800, 0x00000008,
- 0x59a00208, 0x59a01408, 0x900001c0, 0x80081540,
- 0x59a0020a, 0x59a01c0a, 0x900001c0, 0x800c1d40,
- 0x832c0400, 0x00000006, 0x0201f800, 0x00103993,
- 0x8c142d00, 0x04000003, 0x4a01d808, 0x00103471,
- 0x1c01f000, 0x4031d800, 0x58ef400a, 0x58ee580d,
- 0x58ec0002, 0x82000580, 0x00000200, 0x02000000,
- 0x00102301, 0x812e59c0, 0x02000800, 0x0010032e,
- 0x42000800, 0x00000008, 0x832c0400, 0x00000006,
- 0x58ec1006, 0x58ec1807, 0x0201f000, 0x00103993,
- 0x592c0006, 0x82000580, 0x01000000, 0x04020005,
- 0x4a034407, 0x00000004, 0x0201f000, 0x00102309,
+ 0x0201f000, 0x0010239a, 0x59a00208, 0x59a01408,
+ 0x900001c0, 0x80081540, 0x59a0020a, 0x59a01c0a,
+ 0x900001c0, 0x800c1d40, 0x42000800, 0x00000006,
+ 0x832c0400, 0x00000007, 0x0201f000, 0x00103a35,
+ 0x59a00a0b, 0x800409c0, 0x02000000, 0x0010239e,
+ 0x82040480, 0x00000081, 0x04001003, 0x42000800,
+ 0x00000080, 0x59c40085, 0x59881004, 0x80081400,
+ 0x480b1004, 0x497b8885, 0x59c400b1, 0x59a8105c,
+ 0x80080400, 0x48031022, 0x59c400b2, 0x59a8105d,
+ 0x80080400, 0x48031021, 0x59c400a2, 0x82000500,
+ 0x0000ffff, 0x48031023, 0x598810bc, 0x598800bd,
+ 0x80081400, 0x598800be, 0x80081400, 0x598800bf,
+ 0x80081400, 0x59880122, 0x80081400, 0x598800c0,
+ 0x80081400, 0x5988013c, 0x80081400, 0x5988013a,
+ 0x80081400, 0x59880139, 0x80081400, 0x480b1024,
0x59a00208, 0x59a01408, 0x900001c0, 0x80081540,
0x59a0020a, 0x59a01c0a, 0x900001c0, 0x800c1d40,
- 0x42000800, 0x00000006, 0x832c0400, 0x00000007,
- 0x0201f000, 0x00103993, 0x59a00a0b, 0x800409c0,
- 0x02000000, 0x0010230d, 0x0201f800, 0x00103a70,
- 0x02020000, 0x0010230d, 0x82040480, 0x00000081,
- 0x04001003, 0x42000800, 0x00000080, 0x59c40085,
- 0x59881004, 0x80081400, 0x480b1004, 0x497b8885,
- 0x59c400b1, 0x48031022, 0x59c400b2, 0x48031021,
- 0x59c400a2, 0x48031023, 0x598810b7, 0x598800b8,
- 0x80081400, 0x598800b9, 0x80081400, 0x598800ba,
- 0x80081400, 0x5988011d, 0x80081400, 0x598800bb,
- 0x80081400, 0x480b1024, 0x59a00208, 0x59a01408,
- 0x900001c0, 0x80081540, 0x59a0020a, 0x59a01c0a,
- 0x900001c0, 0x800c1d40, 0x83880400, 0x00000000,
- 0x0201f800, 0x00103993, 0x4a01d808, 0x001034cd,
- 0x1c01f000, 0x4031d800, 0x58ef400a, 0x58ec0002,
- 0x82000580, 0x00000200, 0x02000000, 0x00102301,
- 0x59a0020c, 0x8c000500, 0x04000008, 0x83880400,
- 0x00000000, 0x4803c840, 0x4a03c842, 0x00000006,
- 0x04011000, 0x497b8885, 0x4a034208, 0x00000080,
- 0x0201f000, 0x001022c6, 0x8d0e1d0e, 0x04000005,
- 0x4a034407, 0x00000001, 0x0201f000, 0x00102309,
- 0x0201f800, 0x00103a70, 0x02020000, 0x0010230d,
- 0x0201f800, 0x00103966, 0x04020005, 0x4a034407,
- 0x00000002, 0x0201f000, 0x00102309, 0x497a5a05,
- 0x4a025c05, 0x00008000, 0x59a00407, 0x800001c0,
- 0x02000000, 0x0010230d, 0x82001580, 0x000000ff,
- 0x04000005, 0x82001480, 0x00000004, 0x02021000,
- 0x0010230d, 0x40001000, 0x59a24805, 0x0201f800,
- 0x00101c8a, 0x04020005, 0x4a034407, 0x00000003,
- 0x0201f000, 0x00102309, 0x4a01d808, 0x0010350d,
- 0x1c01f000, 0x592c0006, 0x82000580, 0x01000000,
- 0x02020000, 0x001022c6, 0x4a034407, 0x00000004,
- 0x0201f000, 0x00102309, 0x59a01407, 0x8c081508,
- 0x04020007, 0x8d0e1d0e, 0x04000005, 0x4a034407,
- 0x00000001, 0x0201f000, 0x00102309, 0x59a01c08,
- 0x820c0480, 0x00001000, 0x02021000, 0x0010230d,
- 0x497b2804, 0x497b2805, 0x497b2826, 0x497b2827,
- 0x497b2829, 0x497b282a, 0x497b282c, 0x497b282d,
- 0x4803c856, 0x850e1d06, 0x8c081500, 0x04000005,
- 0x4803c856, 0x830e1d40, 0x00000011, 0x0401f004,
- 0x8c081506, 0x04000002, 0x850e1d42, 0x850e1d0a,
- 0x4202d800, 0x00000001, 0x82081500, 0x000000e0,
- 0x8008010a, 0x0c020038, 0x0201f800, 0x001050f7,
- 0x0402000b, 0x4a035014, 0x00000001, 0x4a035013,
- 0x0000aaaa, 0x0201f800, 0x00105051, 0x0401f01f,
- 0x4a035014, 0x00000000, 0x0401f7f9, 0x497b5013,
- 0x0201f800, 0x0010412b, 0x0201f800, 0x00106e41,
- 0x0201f800, 0x001071b4, 0x0201f800, 0x00106e2e,
+ 0x83880400, 0x00000000, 0x0201f800, 0x00103a35,
+ 0x4a01d808, 0x0010357b, 0x1c01f000, 0x0201f800,
+ 0x00102ff3, 0x02000000, 0x00102392, 0x59a0020c,
+ 0x8c000500, 0x04000008, 0x83880400, 0x00000000,
+ 0x4803c840, 0x4a03c842, 0x00000006, 0x04011000,
+ 0x497b8885, 0x4a034208, 0x00000080, 0x0201f000,
+ 0x00102357, 0x8d0e1d0e, 0x04000005, 0x4a034407,
+ 0x00000001, 0x0201f000, 0x0010239a, 0x0201f800,
+ 0x00103b10, 0x02020000, 0x0010239e, 0x0201f800,
+ 0x00103a04, 0x04020005, 0x4a034407, 0x00000002,
+ 0x0201f000, 0x0010239a, 0x497a5a05, 0x4a025c05,
+ 0x00008000, 0x59a00407, 0x800001c0, 0x02000000,
+ 0x0010239e, 0x82001580, 0x000000ff, 0x04000005,
+ 0x82001480, 0x00000004, 0x02021000, 0x0010239e,
+ 0x40001000, 0x59a24805, 0x0201f800, 0x00101d0a,
+ 0x04020005, 0x4a034407, 0x00000003, 0x0201f000,
+ 0x0010239a, 0x4a01d808, 0x001035b8, 0x1c01f000,
+ 0x592c0006, 0x82000580, 0x01000000, 0x02020000,
+ 0x00102357, 0x4a034407, 0x00000004, 0x0201f000,
+ 0x0010239a, 0x59a01407, 0x8c081508, 0x04020007,
+ 0x8d0e1d0e, 0x04000005, 0x4a034407, 0x00000001,
+ 0x0201f000, 0x0010239a, 0x59a01c08, 0x820c0480,
+ 0x00001000, 0x02021000, 0x0010239e, 0x497b2804,
+ 0x497b2805, 0x497b2826, 0x497b2827, 0x497b2829,
+ 0x497b282a, 0x497b282c, 0x497b282d, 0x4803c856,
+ 0x850e1d06, 0x8c081500, 0x04000005, 0x4803c856,
+ 0x830e1d40, 0x00000011, 0x0401f004, 0x8c081506,
+ 0x04000002, 0x850e1d42, 0x850e1d0a, 0x4202d800,
+ 0x00000001, 0x82081500, 0x000000e0, 0x8008010a,
+ 0x0c02003d, 0x0201f800, 0x001052aa, 0x0402000b,
+ 0x4a03501a, 0x00000001, 0x4a035019, 0x0000aaaa,
+ 0x0201f800, 0x00105204, 0x0401f024, 0x4a03501a,
+ 0x00000000, 0x0401f7f9, 0x0201f800, 0x001052c6,
+ 0x040007f4, 0x0201f800, 0x00104216, 0x0201f800,
+ 0x00107523, 0x0201f800, 0x001052aa, 0x04020005,
+ 0x42000000, 0x00000000, 0x0201f800, 0x0010527b,
0x59a00a08, 0x480788a7, 0x59c400a3, 0x82000500,
0xfeffffff, 0x82000540, 0x80018000, 0x40000800,
- 0x84040d20, 0x480388a3, 0x480788a3, 0x497b5032,
- 0x42000800, 0x0000002d, 0x42001000, 0x001041b3,
- 0x0201f800, 0x001064d5, 0x59a00408, 0x800000c2,
+ 0x84040d20, 0x480388a3, 0x480788a3, 0x497b5038,
+ 0x42000800, 0x0000002d, 0x42001000, 0x0010429e,
+ 0x0201f800, 0x0010683a, 0x59a00408, 0x800000c2,
0x800008c4, 0x8005d400, 0x42000000, 0x0000ffff,
- 0x0201f800, 0x001050f7, 0x04000003, 0x59a00208,
- 0x80000110, 0x0201f800, 0x00103a86, 0x0201f000,
- 0x001022c6, 0x0010353e, 0x00103541, 0x0010354b,
- 0x0010230d, 0x00103548, 0x0010230d, 0x0010230d,
- 0x0010230d, 0x836c0580, 0x00000003, 0x04000005,
- 0x4a034407, 0x00000007, 0x0201f000, 0x00102309,
- 0x0201f800, 0x00103a70, 0x02020000, 0x0010230d,
+ 0x0201f800, 0x001052aa, 0x04000003, 0x59a00208,
+ 0x80000110, 0x0201f800, 0x00103b26, 0x0201f000,
+ 0x00102357, 0x001035e9, 0x001035ec, 0x001035f6,
+ 0x0010239e, 0x001035f3, 0x0010239e, 0x0010239e,
+ 0x0010239e, 0x836c0580, 0x00000003, 0x04000005,
+ 0x4a034407, 0x00000007, 0x0201f000, 0x0010239a,
+ 0x0201f800, 0x00103b10, 0x02020000, 0x0010239e,
0x59a00408, 0x59a00a08, 0x900409c0, 0x80040d40,
0x4805d806, 0x59a0040a, 0x59a00a0a, 0x900409c0,
0x80040d40, 0x4805d807, 0x4a01d801, 0x00000000,
- 0x0401fbd2, 0x04020005, 0x4a034407, 0x00000002,
- 0x0201f000, 0x00102309, 0x417a8800, 0x497b4001,
+ 0x0401fbc0, 0x04020005, 0x4a034407, 0x00000002,
+ 0x0201f000, 0x0010239a, 0x417a8800, 0x497b4001,
0x832c0400, 0x00000006, 0x48034002, 0x59a00407,
- 0x8c000504, 0x0402009b, 0x4c5c0000, 0x4c600000,
+ 0x8c000504, 0x04020098, 0x4c5c0000, 0x4c600000,
0x4c640000, 0x4178b800, 0x59a0c407, 0x59a0c802,
- 0x59a2440b, 0x0201f800, 0x00104a7c, 0x0402002c,
- 0x0201f800, 0x00104a1c, 0x04000004, 0x0201f800,
- 0x0010494d, 0x04020026, 0x8c60c53e, 0x04020022,
+ 0x59a2440b, 0x0201f800, 0x00104bd5, 0x0402002c,
+ 0x0201f800, 0x00104b75, 0x04000004, 0x0201f800,
+ 0x00104aa3, 0x04020026, 0x8c60c53e, 0x04020022,
0x8c60c500, 0x04000008, 0x59340009, 0x4400c800,
0x8064c800, 0x59340008, 0x4400c800, 0x8064c800,
0x0401f007, 0x59340007, 0x4400c800, 0x8064c800,
0x59340006, 0x4400c800, 0x8064c800, 0x83440580,
0x000007fe, 0x0400000d, 0x83440580, 0x000007fc,
- 0x0400000a, 0x0201f800, 0x00104a2f, 0x04000003,
- 0x85468d5e, 0x0401f005, 0x0201f800, 0x00104917,
+ 0x0400000a, 0x0201f800, 0x00104b88, 0x04000003,
+ 0x85468d5e, 0x0401f005, 0x0201f800, 0x00104a6d,
0x04020002, 0x85468d5e, 0x4544c800, 0x85468d1e,
0x8064c800, 0x825cbc00, 0x0000000c, 0x81468800,
0x83440480, 0x000007f0, 0x0400100e, 0x8c60c506,
@@ -18055,142 +3528,140 @@ static const uint32_t isp_2400_multi_risc_code[] = {
0x59a00a0b, 0x800409c0, 0x04000006, 0x80040480,
0x04021004, 0x8460c57e, 0x4178b800, 0x0401f7b2,
0x49474000, 0x485dd805, 0x59a00002, 0x4801d803,
- 0x40ec1000, 0x0201f800, 0x00020016, 0x4a01d808,
- 0x00103633, 0x5c00c800, 0x5c00c000, 0x5c00b800,
+ 0x40ec1000, 0x0201f800, 0x00020017, 0x4a01d808,
+ 0x001036e3, 0x5c00c800, 0x5c00c000, 0x5c00b800,
0x1c01f000, 0x8c60c53e, 0x0402001a, 0x805cb9c0,
0x04000024, 0x59a00001, 0x805c0400, 0x48034001,
0x59a00a0b, 0x800409c0, 0x04000005, 0x80040480,
0x04021003, 0x4178b800, 0x0401f00e, 0x59a00801,
0x48074407, 0x485dd805, 0x59a00002, 0x4801d803,
- 0x4a01d808, 0x001022bf, 0x40ec1000, 0x5c00c800,
- 0x5c00c000, 0x5c00b800, 0x0201f000, 0x00020016,
+ 0x4a01d808, 0x00102353, 0x40ec1000, 0x5c00c800,
+ 0x5c00c000, 0x5c00b800, 0x0201f000, 0x00020017,
0x59a00001, 0x805c0c00, 0x59a0020b, 0x80040480,
0x48034208, 0x4a034407, 0x0000000a, 0x5c00c800,
- 0x5c00c000, 0x5c00b800, 0x0201f000, 0x00102309,
+ 0x5c00c000, 0x5c00b800, 0x0201f000, 0x0010239a,
0x59a00801, 0x48074407, 0x5c00c800, 0x5c00c000,
- 0x5c00b800, 0x0201f000, 0x001022c6, 0x4031d800,
- 0x58ef400a, 0x58ec0002, 0x82000580, 0x00000200,
- 0x02000000, 0x00102301, 0x59a28800, 0x0401f767,
- 0x4c5c0000, 0x4c600000, 0x4c640000, 0x4178b800,
- 0x59a0c407, 0x59a0c802, 0x59a2440b, 0x0201f800,
- 0x00104a7c, 0x04020031, 0x0201f800, 0x00104a1c,
- 0x04000004, 0x0201f800, 0x0010494d, 0x0402002b,
- 0x8c60c53e, 0x04020027, 0x83440580, 0x000007fe,
- 0x04000011, 0x83440580, 0x000007fc, 0x0400000e,
- 0x0201f800, 0x00104a2f, 0x04000005, 0x59340403,
- 0x8400055e, 0x48026c03, 0x0401f007, 0x0201f800,
- 0x00104917, 0x04020004, 0x59340403, 0x8400055e,
- 0x48026c03, 0x4134a000, 0x4064a800, 0x4200b000,
- 0x00000006, 0x0201f800, 0x0010c086, 0x59340007,
- 0x4400a800, 0x59340006, 0x4800a801, 0x59340009,
- 0x4800a802, 0x59340008, 0x4800a803, 0x59340403,
- 0x8400051e, 0x48026c03, 0x8264cc00, 0x0000000a,
- 0x825cbc00, 0x00000028, 0x81468800, 0x83440480,
- 0x000007f0, 0x0400100e, 0x8c60c506, 0x0400002a,
- 0x83440580, 0x000007f0, 0x04020004, 0x42028800,
- 0x000007fe, 0x0401f006, 0x83440580, 0x000007ff,
- 0x04020021, 0x42028800, 0x000007fc, 0x825c0580,
- 0x00000028, 0x04000002, 0x0401f7b8, 0x59a00001,
- 0x805c0400, 0x48034001, 0x8c60c53e, 0x04020007,
- 0x59a00a0b, 0x800409c0, 0x04000006, 0x80040480,
- 0x04021004, 0x8460c57e, 0x4178b800, 0x0401f7ab,
- 0x49474000, 0x485dd805, 0x59a00002, 0x4801d803,
- 0x40ec1000, 0x0201f800, 0x00020016, 0x4a01d808,
- 0x001036d3, 0x5c00c800, 0x5c00c000, 0x5c00b800,
- 0x1c01f000, 0x8c60c53e, 0x0402001a, 0x805cb9c0,
- 0x04000024, 0x59a00001, 0x805c0400, 0x48034001,
- 0x59a00a0b, 0x800409c0, 0x04000005, 0x80040480,
- 0x04021003, 0x4178b800, 0x0401f00e, 0x59a00801,
- 0x48074407, 0x485dd805, 0x59a00002, 0x4801d803,
- 0x4a01d808, 0x001022bf, 0x40ec1000, 0x5c00c800,
- 0x5c00c000, 0x5c00b800, 0x0201f000, 0x00020016,
- 0x59a00001, 0x805c0c00, 0x59a0020b, 0x80040480,
- 0x48034208, 0x4a034407, 0x0000000a, 0x5c00c800,
- 0x5c00c000, 0x5c00b800, 0x0201f000, 0x00102309,
- 0x59a00801, 0x48074407, 0x5c00c800, 0x5c00c000,
- 0x5c00b800, 0x0201f000, 0x001022c6, 0x4031d800,
- 0x58ef400a, 0x58ec0002, 0x82000580, 0x00000200,
- 0x02000000, 0x00102301, 0x59a28800, 0x0401f761,
- 0x42002800, 0x0000007e, 0x59a00c07, 0x59a01208,
- 0x59a01c08, 0x59a0220a, 0x82040500, 0x0000ff00,
+ 0x5c00b800, 0x0201f000, 0x00102357, 0x0201f800,
+ 0x00102ff3, 0x02000000, 0x00102392, 0x59a28800,
+ 0x0401f76a, 0x4c5c0000, 0x4c600000, 0x4c640000,
+ 0x4178b800, 0x59a0c407, 0x59a0c802, 0x59a2440b,
+ 0x0201f800, 0x00104bd5, 0x04020031, 0x0201f800,
+ 0x00104b75, 0x04000004, 0x0201f800, 0x00104aa3,
+ 0x0402002b, 0x8c60c53e, 0x04020027, 0x83440580,
+ 0x000007fe, 0x04000011, 0x83440580, 0x000007fc,
+ 0x0400000e, 0x0201f800, 0x00104b88, 0x04000005,
+ 0x59340403, 0x8400055e, 0x48026c03, 0x0401f007,
+ 0x0201f800, 0x00104a6d, 0x04020004, 0x59340403,
+ 0x8400055e, 0x48026c03, 0x4134a000, 0x4064a800,
+ 0x4200b000, 0x00000006, 0x0201f800, 0x0010c5dd,
+ 0x59340007, 0x4400a800, 0x59340006, 0x4800a801,
+ 0x59340009, 0x4800a802, 0x59340008, 0x4800a803,
+ 0x59340403, 0x8400051e, 0x48026c03, 0x8264cc00,
+ 0x0000000a, 0x825cbc00, 0x00000028, 0x81468800,
+ 0x83440480, 0x000007f0, 0x0400100e, 0x8c60c506,
+ 0x0400002a, 0x83440580, 0x000007f0, 0x04020004,
+ 0x42028800, 0x000007fe, 0x0401f006, 0x83440580,
+ 0x000007ff, 0x04020021, 0x42028800, 0x000007fc,
+ 0x825c0580, 0x00000028, 0x04000002, 0x0401f7b8,
+ 0x59a00001, 0x805c0400, 0x48034001, 0x8c60c53e,
+ 0x04020007, 0x59a00a0b, 0x800409c0, 0x04000006,
+ 0x80040480, 0x04021004, 0x8460c57e, 0x4178b800,
+ 0x0401f7ab, 0x49474000, 0x485dd805, 0x59a00002,
+ 0x4801d803, 0x40ec1000, 0x0201f800, 0x00020017,
+ 0x4a01d808, 0x00103780, 0x5c00c800, 0x5c00c000,
+ 0x5c00b800, 0x1c01f000, 0x8c60c53e, 0x0402001a,
+ 0x805cb9c0, 0x04000024, 0x59a00001, 0x805c0400,
+ 0x48034001, 0x59a00a0b, 0x800409c0, 0x04000005,
+ 0x80040480, 0x04021003, 0x4178b800, 0x0401f00e,
+ 0x59a00801, 0x48074407, 0x485dd805, 0x59a00002,
+ 0x4801d803, 0x4a01d808, 0x00102353, 0x40ec1000,
+ 0x5c00c800, 0x5c00c000, 0x5c00b800, 0x0201f000,
+ 0x00020017, 0x59a00001, 0x805c0c00, 0x59a0020b,
+ 0x80040480, 0x48034208, 0x4a034407, 0x0000000a,
+ 0x5c00c800, 0x5c00c000, 0x5c00b800, 0x0201f000,
+ 0x0010239a, 0x59a00801, 0x48074407, 0x5c00c800,
+ 0x5c00c000, 0x5c00b800, 0x0201f000, 0x00102357,
+ 0x0201f800, 0x00102ff3, 0x02000000, 0x00102392,
+ 0x59a28800, 0x0401f764, 0x42002800, 0x0000007e,
+ 0x59a00c07, 0x59a01208, 0x59a01c08, 0x59a0220a,
+ 0x82040500, 0x0000ff00, 0x840001c0, 0x82003480,
+ 0x00000020, 0x02001000, 0x0010239e, 0x80140480,
+ 0x02001000, 0x0010239e, 0x82040500, 0x000000ff,
+ 0x82003480, 0x00000020, 0x02001000, 0x0010239e,
+ 0x80140480, 0x02001000, 0x0010239e, 0x82080500,
+ 0x0000ff00, 0x840001c0, 0x82003480, 0x00000020,
+ 0x02001000, 0x0010239e, 0x80140480, 0x02001000,
+ 0x0010239e, 0x82080500, 0x000000ff, 0x82003480,
+ 0x00000020, 0x02001000, 0x0010239e, 0x80140480,
+ 0x02001000, 0x0010239e, 0x820c0500, 0x0000ff00,
0x840001c0, 0x82003480, 0x00000020, 0x02001000,
- 0x0010230d, 0x80140480, 0x02001000, 0x0010230d,
- 0x82040500, 0x000000ff, 0x82003480, 0x00000020,
- 0x02001000, 0x0010230d, 0x80140480, 0x02001000,
- 0x0010230d, 0x82080500, 0x0000ff00, 0x840001c0,
- 0x82003480, 0x00000020, 0x02001000, 0x0010230d,
- 0x80140480, 0x02001000, 0x0010230d, 0x82080500,
+ 0x0010239e, 0x80140480, 0x02001000, 0x0010239e,
+ 0x820c0500, 0x000000ff, 0x82003480, 0x00000020,
+ 0x02001000, 0x0010239e, 0x80140480, 0x02001000,
+ 0x0010239e, 0x82100500, 0x0000ff00, 0x840001c0,
+ 0x82003480, 0x00000020, 0x02001000, 0x0010239e,
+ 0x80140480, 0x02001000, 0x0010239e, 0x82100500,
0x000000ff, 0x82003480, 0x00000020, 0x02001000,
- 0x0010230d, 0x80140480, 0x02001000, 0x0010230d,
- 0x820c0500, 0x0000ff00, 0x840001c0, 0x82003480,
- 0x00000020, 0x02001000, 0x0010230d, 0x80140480,
- 0x02001000, 0x0010230d, 0x820c0500, 0x000000ff,
- 0x82003480, 0x00000020, 0x02001000, 0x0010230d,
- 0x80140480, 0x02001000, 0x0010230d, 0x82100500,
- 0x0000ff00, 0x840001c0, 0x82003480, 0x00000020,
- 0x02001000, 0x0010230d, 0x80140480, 0x02001000,
- 0x0010230d, 0x82100500, 0x000000ff, 0x82003480,
- 0x00000020, 0x02001000, 0x0010230d, 0x80140480,
- 0x02001000, 0x0010230d, 0x900401c0, 0x80080d40,
- 0x900c01c0, 0x80101d40, 0x83a83400, 0x0000002d,
- 0x44043000, 0x80183000, 0x440c3000, 0x0201f000,
- 0x001022c6, 0x0401fa2d, 0x04020005, 0x4a034407,
- 0x00000002, 0x0201f000, 0x00102309, 0x42000800,
- 0x0000000c, 0x0401f84f, 0x4a01d808, 0x00103745,
- 0x1c01f000, 0x4031d800, 0x58ee580c, 0x58ef400a,
- 0x58ec0002, 0x82000580, 0x00000200, 0x02000000,
- 0x00102301, 0x832ca400, 0x00000005, 0x4200b000,
- 0x0000000c, 0x40c8a800, 0x0201f800, 0x0010c086,
- 0x58c80200, 0x80000540, 0x04000030, 0x58c80400,
- 0x82000500, 0xfffffffb, 0x0402002c, 0x58c80401,
- 0x80000540, 0x04000029, 0x82000480, 0x0000ff01,
- 0x04021026, 0x58c80202, 0x82000480, 0x0000005c,
- 0x04001022, 0x0201f800, 0x00106971, 0x58c80c08,
- 0x58c80204, 0x80040480, 0x0400101c, 0x58c80204,
- 0x82000480, 0x00000005, 0x04021018, 0x58c80205,
- 0x58c80c08, 0x80040902, 0x80040480, 0x04001013,
- 0x58c80c08, 0x0201f800, 0x001068c0, 0x04000017,
- 0x0201f800, 0x00106781, 0x0402000e, 0x4979940b,
- 0x59c408a3, 0x82040d40, 0x00000002, 0x480788a3,
- 0x58c80202, 0x48030804, 0x0201f800, 0x00106763,
- 0x0201f000, 0x001022c6, 0x0201f000, 0x0010230d,
- 0x0201f800, 0x001069c3, 0x0201f800, 0x001069d0,
- 0x0201f800, 0x001068b3, 0x0201f000, 0x00102309,
- 0x4c000000, 0x59a01208, 0x59a00408, 0x900811c0,
- 0x80081540, 0x59a01a0a, 0x59a0040a, 0x900c19c0,
- 0x800c1d40, 0x5c000000, 0x0401f1f0, 0x59840000,
- 0x82000580, 0x00000000, 0x04000050, 0x59840002,
- 0x8c000504, 0x0400004d, 0x84000546, 0x48030802,
- 0x0201f800, 0x001068b3, 0x59c408a3, 0x82040d00,
- 0xfffffffd, 0x480788a3, 0x4c5c0000, 0x4200b800,
- 0x0010c280, 0x505e6800, 0x813669c0, 0x04000008,
- 0x5936600e, 0x813261c0, 0x04000005, 0x0201f800,
- 0x001068a4, 0x02000800, 0x00106a7c, 0x805cb800,
- 0x825c0580, 0x0010ca70, 0x040207f3, 0x59866003,
- 0x813261c0, 0x0400000b, 0x59300407, 0x82000580,
- 0x00000009, 0x02020800, 0x0010032e, 0x5930b800,
- 0x0201f800, 0x00106889, 0x405e6000, 0x0401f7f5,
- 0x497b0803, 0x4200b800, 0x0010cb72, 0x505e6000,
- 0x813261c0, 0x04000011, 0x59300407, 0x82000580,
- 0x00000009, 0x0402000d, 0x59300203, 0x82000580,
- 0x00000004, 0x04020009, 0x5932680a, 0x813669c0,
- 0x02020800, 0x0010032e, 0x0201f800, 0x00100c76,
- 0x0201f800, 0x00106889, 0x4578b800, 0x805cb800,
- 0x825c0580, 0x0010cb7a, 0x040207e9, 0x42000800,
- 0x0010cb70, 0x49780801, 0x49780800, 0x0201f800,
- 0x001069c3, 0x0201f800, 0x001069d0, 0x5c00b800,
- 0x0201f800, 0x0010677c, 0x0201f000, 0x001022c6,
- 0x836c0580, 0x00000003, 0x04000005, 0x4a034407,
- 0x00000007, 0x0201f000, 0x00102309, 0x0401fa79,
- 0x02020000, 0x0010230d, 0x59a00408, 0x59a00a08,
+ 0x0010239e, 0x80140480, 0x02001000, 0x0010239e,
+ 0x900401c0, 0x80080d40, 0x900c01c0, 0x80101d40,
+ 0x83a83400, 0x00000033, 0x44043000, 0x80183000,
+ 0x440c3000, 0x0201f000, 0x00102357, 0x0401fa21,
+ 0x04020005, 0x4a034407, 0x00000002, 0x0201f000,
+ 0x0010239a, 0x42000800, 0x0000000c, 0x0401f84c,
+ 0x4a01d808, 0x001037ef, 0x1c01f000, 0x0201f800,
+ 0x00102ff3, 0x02000000, 0x00102392, 0x58ee580c,
+ 0x832ca400, 0x00000005, 0x4200b000, 0x0000000c,
+ 0x40c8a800, 0x0201f800, 0x0010c5dd, 0x58c80200,
+ 0x80000540, 0x04000030, 0x58c80400, 0x82000500,
+ 0xfffffffb, 0x0402002c, 0x58c80401, 0x80000540,
+ 0x04000029, 0x82000480, 0x0000ff01, 0x04021026,
+ 0x58c80202, 0x82000480, 0x0000005c, 0x04001022,
+ 0x0201f800, 0x00106cd1, 0x58c80c08, 0x58c80204,
+ 0x80040480, 0x0400101c, 0x58c80204, 0x82000480,
+ 0x00000005, 0x04021018, 0x58c80205, 0x58c80c08,
+ 0x80040902, 0x80040480, 0x04001013, 0x58c80c08,
+ 0x0201f800, 0x00106c20, 0x04000017, 0x0201f800,
+ 0x00106ae1, 0x0402000e, 0x4979940b, 0x59c408a3,
+ 0x82040d40, 0x00000002, 0x480788a3, 0x58c80202,
+ 0x48030804, 0x0201f800, 0x00106ac3, 0x0201f000,
+ 0x00102357, 0x0201f000, 0x0010239e, 0x0201f800,
+ 0x00106d23, 0x0201f800, 0x00106d30, 0x0201f800,
+ 0x00106c13, 0x0201f000, 0x0010239a, 0x4c000000,
+ 0x59a01208, 0x59a00408, 0x900811c0, 0x80081540,
+ 0x59a01a0a, 0x59a0040a, 0x900c19c0, 0x800c1d40,
+ 0x5c000000, 0x0401f1e7, 0x59840000, 0x82000580,
+ 0x00000000, 0x04000050, 0x59840002, 0x8c000504,
+ 0x0400004d, 0x84000546, 0x48030802, 0x0201f800,
+ 0x00106c13, 0x59c408a3, 0x82040d00, 0xfffffffd,
+ 0x480788a3, 0x4c5c0000, 0x4200b800, 0x0010c880,
+ 0x505e6800, 0x813669c0, 0x04000008, 0x5936600e,
+ 0x813261c0, 0x04000005, 0x0201f800, 0x00106c04,
+ 0x02000800, 0x00106ddc, 0x805cb800, 0x825c0580,
+ 0x0010d070, 0x040207f3, 0x59866003, 0x813261c0,
+ 0x0400000b, 0x59300407, 0x82000580, 0x00000009,
+ 0x02020800, 0x0010032f, 0x5930b800, 0x0201f800,
+ 0x00106be9, 0x405e6000, 0x0401f7f5, 0x497b0803,
+ 0x4200b800, 0x0010d188, 0x505e6000, 0x813261c0,
+ 0x04000011, 0x59300407, 0x82000580, 0x00000009,
+ 0x0402000d, 0x59300203, 0x82000580, 0x00000004,
+ 0x04020009, 0x5932680a, 0x813669c0, 0x02020800,
+ 0x0010032f, 0x0201f800, 0x00100c9b, 0x0201f800,
+ 0x00106be9, 0x4578b800, 0x805cb800, 0x825c0580,
+ 0x0010d190, 0x040207e9, 0x42000800, 0x0010d186,
+ 0x49780801, 0x49780800, 0x0201f800, 0x00106d23,
+ 0x0201f800, 0x00106d30, 0x5c00b800, 0x0201f800,
+ 0x00106adc, 0x0201f000, 0x00102357, 0x836c0580,
+ 0x00000003, 0x04000005, 0x4a034407, 0x00000007,
+ 0x0201f000, 0x0010239a, 0x0401fa72, 0x02020000,
+ 0x0010239e, 0x49234003, 0x59a00408, 0x59a00a08,
0x900409c0, 0x80040d40, 0x4805d806, 0x59a0040a,
0x59a00a0a, 0x900409c0, 0x80040d40, 0x4805d807,
- 0x4a01d801, 0x00000000, 0x0401f960, 0x04020005,
- 0x4a034407, 0x00000002, 0x0201f000, 0x00102309,
+ 0x4a01d801, 0x00000000, 0x0401f956, 0x04020005,
+ 0x4a034407, 0x00000002, 0x0201f000, 0x0010239a,
0x417a8800, 0x497b4001, 0x832c0400, 0x00000005,
0x48034002, 0x4c5c0000, 0x4c600000, 0x4c640000,
0x4178b800, 0x4178c800, 0x59a0c002, 0x0201f800,
- 0x00104a7c, 0x0402000d, 0x0201f800, 0x00104a1c,
+ 0x00104bd5, 0x0402000d, 0x0201f800, 0x00104b75,
0x0402000a, 0x8c64cd3e, 0x04020006, 0x59340002,
0x4800c000, 0x4944c001, 0x8260c400, 0x00000002,
0x825cbc00, 0x00000008, 0x81468800, 0x83440480,
@@ -18200,101 +3671,99 @@ static const uint32_t isp_2400_multi_risc_code[] = {
0x0401f7e3, 0x59a00a0b, 0x800409c0, 0x04000006,
0x80040480, 0x04021004, 0x4178b800, 0x8464cd7e,
0x0401f7db, 0x49474000, 0x485dd805, 0x59a00002,
- 0x4801d803, 0x40ec1000, 0x0201f800, 0x00020016,
- 0x4a01d808, 0x0010387a, 0x5c00c800, 0x5c00c000,
+ 0x4801d803, 0x40ec1000, 0x0201f800, 0x00020017,
+ 0x4a01d808, 0x00103922, 0x5c00c800, 0x5c00c000,
0x5c00b800, 0x1c01f000, 0x8c64cd3e, 0x0402001b,
0x805cb9c0, 0x04000025, 0x59a00001, 0x805c0400,
0x48034001, 0x59a00a0b, 0x800409c0, 0x04000005,
0x80040480, 0x04021003, 0x4178b800, 0x0401f00f,
0x59a00801, 0x80040906, 0x48074407, 0x485dd805,
- 0x59a00002, 0x4801d803, 0x4a01d808, 0x001022bf,
+ 0x59a00002, 0x4801d803, 0x4a01d808, 0x00102353,
0x40ec1000, 0x5c00c800, 0x5c00c000, 0x5c00b800,
- 0x0201f000, 0x00020016, 0x59a00001, 0x805c0c00,
+ 0x0201f000, 0x00020017, 0x59a00001, 0x805c0c00,
0x59a0020b, 0x80040480, 0x48034208, 0x4a034407,
0x0000000a, 0x5c00c800, 0x5c00c000, 0x5c00b800,
- 0x0201f000, 0x00102309, 0x59a00801, 0x80040906,
+ 0x0201f000, 0x0010239a, 0x59a00801, 0x80040906,
0x48074407, 0x5c00c800, 0x5c00c000, 0x5c00b800,
- 0x0201f000, 0x001022c6, 0x4031d800, 0x58ef400a,
- 0x58ec0002, 0x82000580, 0x00000200, 0x02000000,
- 0x00102301, 0x59a28800, 0x0401f78f, 0x8d0e1d0e,
- 0x04000005, 0x4a034407, 0x00000001, 0x0201f000,
- 0x00102309, 0x59a8021b, 0x8c00050a, 0x04020007,
- 0x8c000506, 0x04020005, 0x4a034407, 0x00000016,
- 0x0201f000, 0x00102309, 0x0401f9de, 0x02020000,
- 0x0010230d, 0x0401f8d1, 0x04020005, 0x4a034407,
- 0x00000002, 0x0201f000, 0x00102309, 0x59a00c07,
- 0x80040902, 0x59a00408, 0x59a01208, 0x900811c0,
- 0x80081540, 0x59a0040a, 0x59a01a0a, 0x900c19c0,
- 0x800c1d40, 0x832c0400, 0x00000006, 0x0401f8e3,
- 0x4a01d808, 0x001038ab, 0x1c01f000, 0x4031d800,
- 0x58ef400a, 0x58ee580c, 0x58ec0002, 0x82000580,
- 0x00000200, 0x02000000, 0x00102301, 0x592c000a,
- 0x59a8380f, 0x0201f800, 0x00106134, 0x02000800,
- 0x00104628, 0x02020000, 0x0010230d, 0x49474001,
+ 0x0201f000, 0x00102357, 0x0201f800, 0x00102ff3,
+ 0x02000000, 0x00102392, 0x59a28800, 0x59a24003,
+ 0x59a24805, 0x0401f790, 0x8d0e1d0e, 0x04000005,
+ 0x4a034407, 0x00000001, 0x0201f000, 0x0010239a,
+ 0x59a80221, 0x8c00050a, 0x04020007, 0x8c000506,
+ 0x04020005, 0x4a034407, 0x00000016, 0x0201f000,
+ 0x0010239a, 0x0401f9d7, 0x02020000, 0x0010239e,
+ 0x0401f8c8, 0x04020005, 0x4a034407, 0x00000002,
+ 0x0201f000, 0x0010239a, 0x59a00c07, 0x80040902,
+ 0x59a00408, 0x59a01208, 0x900811c0, 0x80081540,
+ 0x59a0040a, 0x59a01a0a, 0x900c19c0, 0x800c1d40,
+ 0x832c0400, 0x00000006, 0x0401f8da, 0x4a01d808,
+ 0x00103952, 0x1c01f000, 0x0201f800, 0x00102ff3,
+ 0x02000000, 0x00102392, 0x58ee580c, 0x592c000a,
+ 0x59a83815, 0x0201f800, 0x00106463, 0x02000800,
+ 0x00104774, 0x02020000, 0x0010239e, 0x49474001,
0x481a6802, 0x592c000b, 0x82001d80, 0x70000000,
- 0x04020007, 0x0401f8a5, 0x04020011, 0x4a034407,
- 0x00000002, 0x0201f000, 0x00102309, 0x82001d80,
- 0x72000000, 0x02020000, 0x0010230d, 0x0401f89b,
- 0x0402089a, 0x04020899, 0x04020005, 0x4a034407,
- 0x00000002, 0x0201f000, 0x00102309, 0x58ee580c,
+ 0x04020007, 0x0401f89f, 0x04020011, 0x4a034407,
+ 0x00000002, 0x0201f000, 0x0010239a, 0x82001d80,
+ 0x72000000, 0x02020000, 0x0010239e, 0x0401f895,
+ 0x04020894, 0x04020893, 0x04020005, 0x4a034407,
+ 0x00000002, 0x0201f000, 0x0010239a, 0x58ee580c,
0x4a025c05, 0x00008000, 0x497a5a05, 0x592c3209,
0x80183102, 0x592c1801, 0x4a001806, 0x01000000,
- 0x0201f800, 0x00109951, 0x04020005, 0x4a034407,
- 0x00000003, 0x0201f000, 0x00102309, 0x4a01d808,
- 0x001038e6, 0x1c01f000, 0x592c4000, 0x592c0006,
+ 0x0201f800, 0x00109d01, 0x04020005, 0x4a034407,
+ 0x00000003, 0x0201f000, 0x0010239a, 0x4a01d808,
+ 0x0010398a, 0x1c01f000, 0x592c4000, 0x592c0006,
0x82000580, 0x01000000, 0x04020005, 0x4a034407,
- 0x00000004, 0x0201f000, 0x00102309, 0x4c580000,
+ 0x00000004, 0x0201f000, 0x0010239a, 0x4c580000,
0x4c500000, 0x4c540000, 0x832c3c00, 0x00000006,
0x401ca000, 0x401ca800, 0x5820280b, 0x4200b000,
0x00000002, 0x82143580, 0x70000000, 0x04000003,
- 0x4200b000, 0x0000000f, 0x0201f800, 0x0010c0b0,
+ 0x4200b000, 0x0000000f, 0x0201f800, 0x0010c607,
0x5c00a800, 0x5c00a000, 0x5c00b000, 0x401c0000,
0x58201007, 0x58201808, 0x58202206, 0x80102102,
0x82143580, 0x70000000, 0x04020008, 0x82103480,
- 0x00000002, 0x02001000, 0x0010230d, 0x42000800,
- 0x00000002, 0x0401f082, 0x82143580, 0x72000000,
- 0x02020000, 0x0010230d, 0x82103480, 0x0000002a,
- 0x02001000, 0x0010230d, 0x42000800, 0x0000000f,
- 0x0401f877, 0x4a01d808, 0x00103920, 0x1c01f000,
- 0x4031d800, 0x58ef400a, 0x58ee580d, 0x58ec0002,
- 0x82000580, 0x00000200, 0x02000000, 0x00102301,
- 0x592e5800, 0x832c0c00, 0x00000006, 0x4c580000,
- 0x4c500000, 0x4c540000, 0x4004a000, 0x4004a800,
- 0x4200b000, 0x0000000f, 0x0201f800, 0x0010c0b0,
- 0x5c00a800, 0x5c00a000, 0x5c00b000, 0x40ec1000,
- 0x4a001001, 0x00000000, 0x4a001005, 0x0000003c,
- 0x48041003, 0x0201f800, 0x00020016, 0x4a01d808,
- 0x00103942, 0x1c01f000, 0x4031d800, 0x58ef400a,
- 0x58ee580d, 0x58ec0002, 0x82000580, 0x00000200,
- 0x02000000, 0x00102301, 0x832c0c00, 0x00000006,
+ 0x00000002, 0x02001000, 0x0010239e, 0x42000800,
+ 0x00000002, 0x0401f080, 0x82143580, 0x72000000,
+ 0x02020000, 0x0010239e, 0x82103480, 0x0000002a,
+ 0x02001000, 0x0010239e, 0x42000800, 0x0000000f,
+ 0x0401f875, 0x4a01d808, 0x001039c4, 0x1c01f000,
+ 0x0201f800, 0x00102ff3, 0x02000000, 0x00102392,
+ 0x58ee580d, 0x592e5800, 0x832c0c00, 0x00000006,
0x4c580000, 0x4c500000, 0x4c540000, 0x4004a000,
- 0x4004a800, 0x4200b000, 0x0000000c, 0x0201f800,
- 0x0010c0b0, 0x5c00a800, 0x5c00a000, 0x5c00b000,
+ 0x4004a800, 0x4200b000, 0x0000000f, 0x0201f800,
+ 0x0010c607, 0x5c00a800, 0x5c00a000, 0x5c00b000,
0x40ec1000, 0x4a001001, 0x00000000, 0x4a001005,
- 0x00000030, 0x48041003, 0x0201f800, 0x00020016,
- 0x4a01d808, 0x001022bf, 0x1c01f000, 0x0401f803,
- 0x412d8800, 0x1c01f000, 0x0201f800, 0x00100583,
- 0x04000010, 0x497a5800, 0x58ec000c, 0x80000540,
- 0x04020004, 0x492dd80c, 0x492dd80d, 0x0401f007,
- 0x58ec000d, 0x48025800, 0x82000400, 0x00000001,
- 0x452c0000, 0x492dd80d, 0x832c0400, 0x00000005,
- 0x492fc857, 0x4803c857, 0x1c01f000, 0x4d2c0000,
- 0x58ec400c, 0x802041c0, 0x04000008, 0x4823c857,
- 0x40225800, 0x592c4001, 0x497a5801, 0x0201f800,
- 0x00100594, 0x0401f7f8, 0x4979d80c, 0x4979d80d,
- 0x5c025800, 0x1c01f000, 0x42003000, 0x00000001,
- 0x0401f009, 0x42003000, 0x00000001, 0x0401f007,
- 0x42003000, 0x00000000, 0x0401f004, 0x42003000,
- 0x00000000, 0x800408c4, 0x800409c0, 0x02000800,
- 0x0010032e, 0x4803c857, 0x4807c857, 0x480bc857,
- 0x480fc857, 0x481bc857, 0x48efc857, 0x4819d801,
- 0x4801d803, 0x4809d806, 0x480dd807, 0x4805d805,
- 0x40ec1000, 0x0201f800, 0x00020016, 0x4a01d808,
- 0x001022bf, 0x1c01f000, 0x40681000, 0x406c1800,
- 0x80002d80, 0x480bc857, 0x480fc857, 0x4813c857,
- 0x4817c857, 0x8d0e1d20, 0x04000005, 0x59a80005,
- 0x8c000516, 0x02020000, 0x0010b207, 0x4d2c0000,
- 0x4da00000, 0x42034000, 0x0010caff, 0x59a00018,
+ 0x0000003c, 0x48041003, 0x0201f800, 0x00020017,
+ 0x4a01d808, 0x001039e3, 0x1c01f000, 0x0201f800,
+ 0x00102ff3, 0x02000000, 0x00102392, 0x58ee580d,
+ 0x832c0c00, 0x00000006, 0x4c580000, 0x4c500000,
+ 0x4c540000, 0x4004a000, 0x4004a800, 0x4200b000,
+ 0x0000000c, 0x0201f800, 0x0010c607, 0x5c00a800,
+ 0x5c00a000, 0x5c00b000, 0x40ec1000, 0x4a001001,
+ 0x00000000, 0x4a001005, 0x00000030, 0x48041003,
+ 0x0201f800, 0x00020017, 0x4a01d808, 0x00102353,
+ 0x1c01f000, 0x0401f803, 0x412d8800, 0x1c01f000,
+ 0x0201f800, 0x00100599, 0x04000010, 0x497a5800,
+ 0x58ec000c, 0x80000540, 0x04020004, 0x492dd80c,
+ 0x492dd80d, 0x0401f007, 0x58ec000d, 0x48025800,
+ 0x82000400, 0x00000001, 0x452c0000, 0x492dd80d,
+ 0x832c0400, 0x00000005, 0x492fc857, 0x4803c857,
+ 0x1c01f000, 0x4d2c0000, 0x58ec400c, 0x802041c0,
+ 0x04000008, 0x4823c857, 0x40225800, 0x592c4001,
+ 0x497a5801, 0x0201f800, 0x001005aa, 0x0401f7f8,
+ 0x4979d80c, 0x4979d80d, 0x5c025800, 0x1c01f000,
+ 0x42003000, 0x00000001, 0x0401f00d, 0x42003000,
+ 0x00000001, 0x0401f00b, 0x42003000, 0x00000000,
+ 0x0401f008, 0x42003000, 0x00000000, 0x800408c4,
+ 0x0401f00d, 0x42003000, 0x00000000, 0x800408c4,
+ 0x800409c0, 0x02000800, 0x0010032f, 0x4803c857,
+ 0x4807c857, 0x480bc857, 0x480fc857, 0x481bc857,
+ 0x48efc857, 0x4819d801, 0x4801d803, 0x4809d806,
+ 0x480dd807, 0x4805d805, 0x40ec1000, 0x0201f800,
+ 0x00020017, 0x4a01d808, 0x00102353, 0x1c01f000,
+ 0x40681000, 0x406c1800, 0x80002d80, 0x480bc857,
+ 0x480fc857, 0x4813c857, 0x4817c857, 0x0201f800,
+ 0x000202c3, 0x02020000, 0x0010b6f6, 0x4d2c0000,
+ 0x4da00000, 0x42034000, 0x0010d115, 0x59a00018,
0x800001c0, 0x0402000f, 0x0400600e, 0x480bc020,
0x480fc021, 0x4813c022, 0x4817c023, 0x900811c0,
0x82081540, 0x00000012, 0x480bc011, 0x4a03c017,
@@ -18306,758 +3775,801 @@ static const uint32_t isp_2400_multi_risc_code[] = {
0x00000002, 0x82000c80, 0x00000014, 0x4803421a,
0x04001003, 0x497b421a, 0x41780000, 0x59a03817,
0x801c3c00, 0x0401f030, 0x4803c856, 0x0201f800,
- 0x00100583, 0x04000007, 0x492f401b, 0x492f401c,
+ 0x00100599, 0x04000007, 0x492f401b, 0x492f401c,
0x412c3800, 0x497b421d, 0x497a5814, 0x0401f026,
0x5988001e, 0x80000000, 0x4803101e, 0x59a00018,
0x80000040, 0x48034018, 0x59a0021a, 0x59a03817,
0x801c3c00, 0x0401f01c, 0x59a0021d, 0x82000400,
0x00000002, 0x82000c80, 0x00000013, 0x04021004,
0x4803421d, 0x801c3c00, 0x0401f013, 0x0201f800,
- 0x00100583, 0x0402000b, 0x5988001e, 0x80000000,
+ 0x00100599, 0x0402000b, 0x5988001e, 0x80000000,
0x4803101e, 0x59a00018, 0x80000040, 0x48034018,
- 0x4803c856, 0x59a0021d, 0x801c3c00, 0x0401f006,
+ 0x4803c857, 0x59a0021d, 0x801c3c00, 0x0401f006,
0x492f401b, 0x492c3814, 0x412c3800, 0x497b421d,
0x497a5814, 0x48083c00, 0x480c3a00, 0x48103c01,
0x48143a01, 0x5c003800, 0x5c000800, 0x5c034000,
0x5c025800, 0x1c01f000, 0x40681800, 0x406c2000,
0x40703000, 0x480fc857, 0x4813c857, 0x481bc857,
- 0x42000000, 0x0010cee0, 0x0201f800, 0x0010bfb3,
+ 0x42000000, 0x0010d4f6, 0x0201f800, 0x0010c50a,
0x801800d0, 0x81202d40, 0x42001000, 0x00008014,
- 0x0401f781, 0x4c000000, 0x599c0017, 0x8c000512,
+ 0x0401f783, 0x4c000000, 0x599c0017, 0x8c000512,
0x5c000000, 0x1c01f000, 0x4c000000, 0x599c0018,
0x8c00050e, 0x5c000000, 0x1c01f000, 0x8d0e1d0e,
0x04000005, 0x4a034407, 0x00000001, 0x0201f000,
- 0x00102309, 0x836c0580, 0x00000003, 0x04000005,
- 0x4a034407, 0x00000007, 0x0201f000, 0x00102309,
+ 0x0010239a, 0x836c0580, 0x00000003, 0x04000005,
+ 0x4a034407, 0x00000007, 0x0201f000, 0x0010239a,
0x59a24805, 0x59240400, 0x8c000508, 0x04020005,
- 0x4a034407, 0x00000008, 0x0201f000, 0x00102309,
+ 0x4a034407, 0x00000008, 0x0201f000, 0x0010239a,
0x59340405, 0x8c000508, 0x04020004, 0x8c00050a,
- 0x02020000, 0x00103374, 0x497a5a05, 0x497a5806,
- 0x4a025c05, 0x00008000, 0x0201f800, 0x00109a0a,
+ 0x02020000, 0x0010341d, 0x497a5a05, 0x497a5806,
+ 0x4a025c05, 0x00008000, 0x0201f800, 0x00109dba,
0x04020005, 0x4a034407, 0x00000003, 0x0201f000,
- 0x00102309, 0x4a01d808, 0x00103a60, 0x1c01f000,
+ 0x0010239a, 0x4a01d808, 0x00103b00, 0x1c01f000,
0x592c0006, 0x82000580, 0x01000000, 0x04020005,
- 0x4a034407, 0x00000004, 0x0201f000, 0x00102309,
- 0x59a28c07, 0x59a2440b, 0x0201f800, 0x00104a7c,
- 0x02020000, 0x0010230d, 0x0201f000, 0x00103374,
- 0x4c040000, 0x59a2440b, 0x42000000, 0x0010cfd0,
+ 0x4a034407, 0x00000004, 0x0201f000, 0x0010239a,
+ 0x59a28c07, 0x59a2440b, 0x0201f800, 0x00104bd5,
+ 0x02020000, 0x0010239e, 0x0201f000, 0x0010341d,
+ 0x4c040000, 0x59a2440b, 0x42000000, 0x0010d5ee,
0x50000000, 0x81200480, 0x0402100d, 0x83200c00,
- 0x0010c10d, 0x50064800, 0x812649c0, 0x04000008,
+ 0x0010c6ac, 0x50064800, 0x812649c0, 0x04000008,
0x59240200, 0x8c000500, 0x04000005, 0x49274005,
0x80000580, 0x5c000800, 0x1c01f000, 0x82000540,
0x00000001, 0x0401f7fc, 0x42028800, 0x000007ef,
- 0x0201f800, 0x0002034c, 0x02000800, 0x00106519,
+ 0x0201f800, 0x00020353, 0x02000800, 0x0010688a,
0x81468840, 0x040217fb, 0x1c01f000, 0x4803c856,
0x4c0c0000, 0x4d340000, 0x4d440000, 0x42028800,
0x000007fe, 0x42024000, 0x00000000, 0x0201f800,
- 0x00104a7c, 0x04020009, 0x5934180a, 0x820c1d00,
+ 0x00104bd5, 0x04020009, 0x5934180a, 0x820c1d00,
0x00000001, 0x820c1d80, 0x00000001, 0x42001000,
- 0x0000801b, 0x0401ff0b, 0x5c028800, 0x5c026800,
+ 0x0000801b, 0x0401ff0d, 0x5c028800, 0x5c026800,
0x5c001800, 0x1c01f000, 0x48efc857, 0x04011000,
0x48efc840, 0x4a03c842, 0x0000000f, 0x40000000,
0x040117ff, 0x4a01d80e, 0xbeefbeef, 0x1c01f000,
0x497b4000, 0x497b4001, 0x497b4002, 0x497b4003,
0x497b4004, 0x497b4005, 0x1c01f000, 0x42002000,
- 0x00111584, 0x41580000, 0x41781000, 0x58100c07,
+ 0x00111d44, 0x41580000, 0x41781000, 0x58100c07,
0x800409c0, 0x04000011, 0x82041d80, 0x00000003,
0x0400000e, 0x82041c80, 0x00000006, 0x0400100a,
0x82041d80, 0x0000000a, 0x04000007, 0x82041c80,
0x0000000f, 0x04001005, 0x82041c80, 0x00000012,
0x04021002, 0x80081000, 0x82102400, 0x0000002c,
- 0x80100c80, 0x040017ea, 0x40080000, 0x59a81251,
+ 0x80100c80, 0x040017ea, 0x40080000, 0x59a81257,
0x80080480, 0x04021002, 0x41780000, 0x81640480,
0x04021002, 0x41780000, 0x1c01f000, 0x59a80005,
- 0x8c000514, 0x04000006, 0x42000000, 0x0010cb3e,
+ 0x8c000514, 0x04000006, 0x42000000, 0x0010d154,
0x50000000, 0x82000500, 0x00000028, 0x1c01f000,
- 0x59c400a4, 0x4c580000, 0x4c500000, 0x4c540000,
- 0x82000500, 0x0000000f, 0x82000480, 0x00000007,
- 0x0400100a, 0x82006c80, 0x00000007, 0x02021800,
- 0x0010032e, 0x0c01f807, 0x5c00a800, 0x5c00a000,
- 0x5c00b000, 0x1c01f000, 0x0401f919, 0x0401f7fb,
- 0x00103aff, 0x00103b05, 0x00103b2e, 0x00103b50,
- 0x00103c18, 0x00103afe, 0x1c01f000, 0x59c40806,
- 0x8c040d00, 0x04020003, 0x84040d40, 0x48078806,
- 0x1c01f000, 0x59c40005, 0x8c000534, 0x02020000,
- 0x001042c7, 0x4a038805, 0xffffffff, 0x42006000,
- 0x00020000, 0x0201f800, 0x001042ac, 0x59a80015,
- 0x82000500, 0xfffffffa, 0x84000542, 0x48035015,
- 0x497b521b, 0x42000800, 0x0010e251, 0x45780800,
- 0x497b5056, 0x42000000, 0x0010cfcf, 0x46000000,
- 0x0000ffff, 0x42006000, 0xffefffff, 0x42006800,
- 0x40000000, 0x0201f800, 0x001042a6, 0x59c40006,
- 0x82000500, 0xffffff0f, 0x48038806, 0x42000800,
- 0x00000010, 0x42001000, 0x001041ea, 0x0201f800,
- 0x001064f1, 0x0401f001, 0x42006000, 0xffffffff,
- 0x42006800, 0x00800000, 0x0201f800, 0x001042a6,
- 0x4200b000, 0x000000c8, 0x59c400a4, 0x82000500,
- 0x0000000f, 0x82000580, 0x0000000a, 0x0400000f,
- 0x8058b040, 0x040207f9, 0x497b5010, 0x42006000,
- 0xbf7fffff, 0x42006800, 0x00018000, 0x0201f800,
- 0x001042a6, 0x42006000, 0xfffeffff, 0x41786800,
- 0x0201f000, 0x001042a6, 0x497b5010, 0x4a035055,
- 0x00000000, 0x80000580, 0x0201f000, 0x001042b3,
- 0x4a038805, 0xffffffff, 0x59a80055, 0x82000c80,
- 0x00000004, 0x02021800, 0x0010032e, 0x0c01f001,
- 0x00103b5b, 0x00103b8b, 0x00103c0e, 0x4803c856,
- 0x59c400a3, 0x8400051e, 0x480388a3, 0x4a035055,
- 0x00000001, 0x59c40008, 0x82000540, 0x00000080,
- 0x48038808, 0x0201f800, 0x0010428a, 0x42007800,
- 0x0010cba6, 0x4a007806, 0x11010000, 0x4200a000,
- 0x0010cfd2, 0x4200a800, 0x0010cbad, 0x4200b000,
- 0x00000002, 0x0201f800, 0x0010c086, 0x59c40802,
- 0x84040d0c, 0x48078802, 0x42000800, 0x00000003,
- 0x497b505f, 0x0201f800, 0x0010415d, 0x4a03505f,
- 0x00000001, 0x497b505a, 0x0201f800, 0x001042ba,
- 0x42006000, 0xffffffff, 0x42006800, 0x00080000,
- 0x0201f800, 0x001042a6, 0x42006000, 0xfff7ffff,
- 0x41786800, 0x0201f000, 0x001042a6, 0x59a8005a,
- 0x497b505a, 0x80002540, 0x04000070, 0x59c40004,
- 0x82000500, 0x00000003, 0x0402007b, 0x59a80815,
- 0x8c040d02, 0x04000055, 0x82100580, 0x0000000c,
- 0x04020059, 0x82100400, 0x00000018, 0x8000b104,
- 0x41cc1000, 0x42001800, 0x0010cba6, 0x50080800,
- 0x500c0000, 0x80040580, 0x04020021, 0x80081000,
- 0x800c1800, 0x8058b040, 0x040207f9, 0x0201f800,
- 0x001042ba, 0x59c80015, 0x84000508, 0x48039015,
- 0x42006000, 0xffffffff, 0x42006800, 0x00500000,
- 0x0201f800, 0x001042a6, 0x4a035055, 0x00000002,
- 0x4a035010, 0x00000002, 0x0201f800, 0x001015ba,
- 0x42000800, 0x000007d0, 0x42001000, 0x00104131,
- 0x0201f800, 0x00106638, 0x59a80015, 0x84000506,
- 0x48035015, 0x0201f000, 0x0010428a, 0x59cc0806,
- 0x82040d80, 0x11010000, 0x0402002b, 0x59cc0800,
- 0x82040500, 0x00ffffff, 0x0400001a, 0x82000580,
- 0x000000ef, 0x04020017, 0x59cc0801, 0x82040500,
- 0x00ffffff, 0x82000580, 0x000000ef, 0x04020011,
- 0x83cca400, 0x00000007, 0x4200a800, 0x0010cfd2,
- 0x4200b000, 0x00000002, 0x50500800, 0x50540000,
- 0x80040480, 0x04001007, 0x04020013, 0x8050a000,
- 0x8054a800, 0x8058b040, 0x040207f8, 0x0401f00e,
- 0x59a80015, 0x84000502, 0x48035015, 0x59c80015,
- 0x84000508, 0x48039015, 0x41cca000, 0x4200a800,
- 0x0010cba6, 0x4200b000, 0x00000009, 0x0201f800,
- 0x0010c086, 0x0201f800, 0x001042ba, 0x42006000,
- 0xffffffff, 0x42006800, 0x00080000, 0x0201f800,
- 0x001042a6, 0x42006000, 0xfff7ffff, 0x41786800,
- 0x0201f800, 0x001042a6, 0x42006000, 0xffffffff,
- 0x42006800, 0x00004000, 0x0201f800, 0x001042a6,
- 0x59c40004, 0x82000500, 0x00000003, 0x04020006,
- 0x497b505a, 0x42000800, 0x00000003, 0x0201f000,
- 0x0010415d, 0x1c01f000, 0x1c01f000, 0x59a80010,
- 0x82006d80, 0x0000000f, 0x04000005, 0x82000580,
- 0x0000001b, 0x02020800, 0x00104126, 0x1c01f000,
- 0x59a80015, 0x84000506, 0x48035015, 0x497b505f,
- 0x59a80010, 0x82000c80, 0x0000001e, 0x02021800,
- 0x0010032e, 0x0c01f001, 0x00103c56, 0x00103c6d,
- 0x00103c96, 0x00103cb9, 0x00103cdc, 0x00103ce0,
- 0x00103ce4, 0x00103ce8, 0x00103cec, 0x00103d08,
- 0x00103d0c, 0x00103d65, 0x00103d69, 0x00103d7b,
- 0x00103d7f, 0x00103d98, 0x00103d9d, 0x00103df9,
- 0x00103e25, 0x00103ea9, 0x00103ed5, 0x00103f2d,
- 0x00103f7d, 0x00103fd7, 0x00103ff8, 0x00104041,
- 0x00104063, 0x00104076, 0x00104077, 0x4803c856,
- 0x4202d800, 0x00000007, 0x0201f800, 0x001050f7,
- 0x04000007, 0x42006000, 0xffffffd7, 0x41786800,
- 0x0201f800, 0x001042a6, 0x0401f00b, 0x59c40006,
- 0x82000500, 0xffffff0f, 0x48038806, 0x4a038805,
- 0x000000f0, 0x0201f800, 0x0010554e, 0x0201f800,
- 0x00105046, 0x1c01f000, 0x4803c856, 0x42006000,
- 0xbf7fffff, 0x42006800, 0x00400000, 0x0201f800,
- 0x001042a6, 0x0201f800, 0x001015ba, 0x4a035010,
- 0x00000001, 0x42001000, 0x001041ea, 0x0201f800,
- 0x00106511, 0x0201f800, 0x001041f3, 0x42000800,
- 0x000007d0, 0x42001000, 0x00104131, 0x0201f000,
- 0x00106638, 0x59a8005a, 0x82000580, 0x00000014,
- 0x04020023, 0x4803c857, 0x42006000, 0xffbfffff,
- 0x41786800, 0x0201f800, 0x001042a6, 0x59c40004,
- 0x82000500, 0x00000003, 0x04020019, 0x42001000,
- 0x00104131, 0x0201f800, 0x001064fe, 0x59cc1006,
- 0x82081580, 0x11020000, 0x04020012, 0x59cc1007,
- 0x8c08153e, 0x0400000b, 0x59a80015, 0x8c000504,
- 0x04020008, 0x42000000, 0x0010ce71, 0x0201f800,
- 0x0010bfb3, 0x59a80015, 0x84000544, 0x48035015,
- 0x4a035010, 0x00000010, 0x0401f10b, 0x1c01f000,
- 0x0201f000, 0x00104126, 0x4803c856, 0x4a035010,
- 0x00000003, 0x42006000, 0xbf3fffff, 0x42006800,
- 0x00100000, 0x0201f800, 0x001042a6, 0x42001000,
- 0x001041ea, 0x0201f800, 0x00106511, 0x0201f800,
- 0x001041f3, 0x42001000, 0x00104131, 0x0201f800,
- 0x001064fe, 0x59a8041b, 0x82000500, 0x00000028,
- 0x04000005, 0x42000800, 0xffffd815, 0x0201f800,
- 0x00102078, 0x42007800, 0x0010cbac, 0x46007800,
- 0x11020000, 0x42000800, 0x00000005, 0x0201f000,
- 0x0010415d, 0x59a8005a, 0x80000540, 0x0400001e,
- 0x4803c857, 0x42001000, 0x00104131, 0x0201f800,
- 0x001064fe, 0x59a8005a, 0x82000580, 0x00000014,
- 0x04020016, 0x59cc1006, 0x82081580, 0x11020000,
+ 0x4a034407, 0x00000007, 0x0201f000, 0x0010239a,
+ 0x4a034407, 0x0000003a, 0x0201f000, 0x0010239a,
+ 0x0201f800, 0x00107523, 0x497b8880, 0x59c400a3,
+ 0x82000500, 0xfcf8ffff, 0x480388a3, 0x0201f800,
+ 0x00101cc7, 0x04020005, 0x4201d000, 0x00000003,
+ 0x0201f800, 0x001069c8, 0x4d3c0000, 0x42027800,
+ 0x00000001, 0x0201f800, 0x0010a641, 0x5c027800,
+ 0x0201f800, 0x00101cc7, 0x0402000f, 0x59c408a3,
+ 0x84040d72, 0x480788a3, 0x4201d000, 0x00000002,
+ 0x0201f800, 0x001069c8, 0x0201f800, 0x00101ccd,
+ 0x02020800, 0x0010032f, 0x59c408a3, 0x84040d32,
+ 0x480788a3, 0x0201f800, 0x00101cc1, 0x0402001a,
+ 0x42000000, 0x00200000, 0x0201f800, 0x001019bc,
+ 0x4201d000, 0x00000003, 0x0201f800, 0x001069c8,
+ 0x0201f800, 0x00101ccd, 0x0400000f, 0x59c408a3,
+ 0x84040d72, 0x480788a3, 0x4201d000, 0x00000002,
+ 0x0201f800, 0x001069c8, 0x0201f800, 0x00101ccd,
+ 0x02020800, 0x0010032f, 0x59c408a3, 0x84040d32,
+ 0x480788a3, 0x1c01f000, 0x59c400a4, 0x4c580000,
+ 0x4c500000, 0x4c540000, 0x82000500, 0x0000000f,
+ 0x82000480, 0x00000007, 0x0400100a, 0x82006c80,
+ 0x00000007, 0x02021800, 0x0010032f, 0x0c01f807,
+ 0x5c00a800, 0x5c00a000, 0x5c00b000, 0x1c01f000,
+ 0x0401f919, 0x0401f7fb, 0x00103be9, 0x00103bef,
+ 0x00103c18, 0x00103c3a, 0x00103d02, 0x00103be8,
+ 0x1c01f000, 0x59c40806, 0x8c040d00, 0x04020003,
+ 0x84040d40, 0x48078806, 0x1c01f000, 0x59c40005,
+ 0x8c000534, 0x02020000, 0x001043d8, 0x4a038805,
+ 0xffffffff, 0x42006000, 0x00020000, 0x0201f800,
+ 0x001043bd, 0x59a8001b, 0x82000500, 0xfffffffa,
+ 0x84000542, 0x4803501b, 0x497b5221, 0x42000800,
+ 0x0010e86f, 0x45780800, 0x497b5064, 0x42000000,
+ 0x0010d5ed, 0x46000000, 0x0000ffff, 0x42006000,
+ 0xffefffff, 0x42006800, 0x40000000, 0x0201f800,
+ 0x001043b7, 0x59c40006, 0x82000500, 0xffffff0f,
+ 0x48038806, 0x42000800, 0x00000010, 0x42001000,
+ 0x001042d5, 0x0201f800, 0x00106857, 0x0401f001,
+ 0x42006000, 0xffffffff, 0x42006800, 0x00800000,
+ 0x0201f800, 0x001043b7, 0x4200b000, 0x000000c8,
+ 0x59c400a4, 0x82000500, 0x0000000f, 0x82000580,
+ 0x0000000a, 0x0400000f, 0x8058b040, 0x040207f9,
+ 0x497b5016, 0x42006000, 0xbf7fffff, 0x42006800,
+ 0x00018000, 0x0201f800, 0x001043b7, 0x42006000,
+ 0xfffeffff, 0x41786800, 0x0201f000, 0x001043b7,
+ 0x497b5016, 0x4a035063, 0x00000000, 0x80000580,
+ 0x0201f000, 0x001043c4, 0x4a038805, 0xffffffff,
+ 0x59a80063, 0x82000c80, 0x00000004, 0x02021800,
+ 0x0010032f, 0x0c01f001, 0x00103c45, 0x00103c75,
+ 0x00103cf8, 0x4803c856, 0x59c400a3, 0x8400051e,
+ 0x480388a3, 0x4a035063, 0x00000001, 0x59c40008,
+ 0x82000540, 0x00000080, 0x48038808, 0x0201f800,
+ 0x0010439b, 0x42007800, 0x0010d1bc, 0x4a007806,
+ 0x11010000, 0x4200a000, 0x0010d5f0, 0x4200a800,
+ 0x0010d1c3, 0x4200b000, 0x00000002, 0x0201f800,
+ 0x0010c5dd, 0x59c40802, 0x84040d0c, 0x48078802,
+ 0x42000800, 0x00000003, 0x497b506d, 0x0201f800,
+ 0x00104248, 0x4a03506d, 0x00000001, 0x497b5068,
+ 0x0201f800, 0x001043cb, 0x42006000, 0xffffffff,
+ 0x42006800, 0x00080000, 0x0201f800, 0x001043b7,
+ 0x42006000, 0xfff7ffff, 0x41786800, 0x0201f000,
+ 0x001043b7, 0x59a80068, 0x497b5068, 0x80002540,
+ 0x04000070, 0x59c40004, 0x82000500, 0x00000003,
+ 0x0402007b, 0x59a8081b, 0x8c040d02, 0x04000055,
+ 0x82100580, 0x0000000c, 0x04020059, 0x82100400,
+ 0x00000018, 0x8000b104, 0x41cc1000, 0x42001800,
+ 0x0010d1bc, 0x50080800, 0x500c0000, 0x80040580,
+ 0x04020021, 0x80081000, 0x800c1800, 0x8058b040,
+ 0x040207f9, 0x0201f800, 0x001043cb, 0x59c80015,
+ 0x84000508, 0x48039015, 0x42006000, 0xffffffff,
+ 0x42006800, 0x00500000, 0x0201f800, 0x001043b7,
+ 0x4a035063, 0x00000002, 0x4a035016, 0x00000002,
+ 0x0201f800, 0x00101628, 0x42000800, 0x000007d0,
+ 0x42001000, 0x0010421c, 0x0201f800, 0x001069a8,
+ 0x59a8001b, 0x84000506, 0x4803501b, 0x0201f000,
+ 0x0010439b, 0x59cc0806, 0x82040d80, 0x11010000,
+ 0x0402002b, 0x59cc0800, 0x82040500, 0x00ffffff,
+ 0x0400001a, 0x82000580, 0x000000ef, 0x04020017,
+ 0x59cc0801, 0x82040500, 0x00ffffff, 0x82000580,
+ 0x000000ef, 0x04020011, 0x83cca400, 0x00000007,
+ 0x4200a800, 0x0010d5f0, 0x4200b000, 0x00000002,
+ 0x50500800, 0x50540000, 0x80040480, 0x04001007,
+ 0x04020013, 0x8050a000, 0x8054a800, 0x8058b040,
+ 0x040207f8, 0x0401f00e, 0x59a8001b, 0x84000502,
+ 0x4803501b, 0x59c80015, 0x84000508, 0x48039015,
+ 0x41cca000, 0x4200a800, 0x0010d1bc, 0x4200b000,
+ 0x00000009, 0x0201f800, 0x0010c5dd, 0x0201f800,
+ 0x001043cb, 0x42006000, 0xffffffff, 0x42006800,
+ 0x00080000, 0x0201f800, 0x001043b7, 0x42006000,
+ 0xfff7ffff, 0x41786800, 0x0201f800, 0x001043b7,
+ 0x42006000, 0xffffffff, 0x42006800, 0x00004000,
+ 0x0201f800, 0x001043b7, 0x59c40004, 0x82000500,
+ 0x00000003, 0x04020006, 0x497b5068, 0x42000800,
+ 0x00000003, 0x0201f000, 0x00104248, 0x1c01f000,
+ 0x1c01f000, 0x59a80016, 0x82006d80, 0x0000000f,
+ 0x04000005, 0x82000580, 0x0000001b, 0x02020800,
+ 0x00104211, 0x1c01f000, 0x59a8001b, 0x84000506,
+ 0x4803501b, 0x497b506d, 0x59a80016, 0x82000c80,
+ 0x0000001e, 0x02021800, 0x0010032f, 0x0c01f001,
+ 0x00103d40, 0x00103d57, 0x00103d80, 0x00103da3,
+ 0x00103dc6, 0x00103dca, 0x00103dce, 0x00103dd2,
+ 0x00103dd6, 0x00103df2, 0x00103df6, 0x00103e4f,
+ 0x00103e53, 0x00103e65, 0x00103e69, 0x00103e82,
+ 0x00103e87, 0x00103ee3, 0x00103f0f, 0x00103f93,
+ 0x00103fbf, 0x00104017, 0x00104067, 0x001040c2,
+ 0x001040e3, 0x0010412c, 0x0010414e, 0x00104161,
+ 0x00104162, 0x4803c856, 0x4202d800, 0x00000007,
+ 0x0201f800, 0x001052aa, 0x04000007, 0x42006000,
+ 0xffffffd7, 0x41786800, 0x0201f800, 0x001043b7,
+ 0x0401f00b, 0x59c40006, 0x82000500, 0xffffff0f,
+ 0x48038806, 0x4a038805, 0x000000f0, 0x0201f800,
+ 0x001056fd, 0x0201f800, 0x001051f9, 0x1c01f000,
+ 0x4803c856, 0x42006000, 0xbf7fffff, 0x42006800,
+ 0x00400000, 0x0201f800, 0x001043b7, 0x0201f800,
+ 0x00101628, 0x4a035016, 0x00000001, 0x42001000,
+ 0x001042d5, 0x0201f800, 0x00106882, 0x0201f800,
+ 0x001042de, 0x42000800, 0x000007d0, 0x42001000,
+ 0x0010421c, 0x0201f000, 0x001069a8, 0x59a80068,
+ 0x82000580, 0x00000014, 0x04020023, 0x4803c857,
+ 0x42006000, 0xffbfffff, 0x41786800, 0x0201f800,
+ 0x001043b7, 0x59c40004, 0x82000500, 0x00000003,
+ 0x04020019, 0x42001000, 0x0010421c, 0x0201f800,
+ 0x0010686f, 0x59cc1006, 0x82081580, 0x11020000,
0x04020012, 0x59cc1007, 0x8c08153e, 0x0400000b,
- 0x59a80015, 0x8c000504, 0x04020008, 0x42000000,
- 0x0010ce71, 0x0201f800, 0x0010bfb3, 0x59a80015,
- 0x84000544, 0x48035015, 0x4a035010, 0x00000004,
- 0x0401f004, 0x1c01f000, 0x0201f000, 0x00104126,
- 0x4803c856, 0x4a035010, 0x00000005, 0x0401f149,
- 0x4c5c0000, 0x4200b800, 0x00000001, 0x0401f118,
- 0x4803c856, 0x4a035010, 0x00000007, 0x0401f1f1,
- 0x4c5c0000, 0x4200b800, 0x00000001, 0x0401f1c0,
- 0x4803c856, 0x4a035010, 0x00000009, 0x83cca400,
- 0x00000006, 0x4200a800, 0x0010cbac, 0x4200b000,
- 0x00000005, 0x0201f800, 0x0010c086, 0x42007800,
- 0x0010cbac, 0x46007800, 0x11050100, 0x8d0e1d06,
- 0x04000296, 0x42000800, 0x00000005, 0x0201f800,
- 0x0010415d, 0x4d3c0000, 0x42027800, 0x00000001,
- 0x0201f800, 0x0010a242, 0x5c027800, 0x1c01f000,
- 0x4c5c0000, 0x4200b800, 0x00000001, 0x0401f224,
- 0x4803c856, 0x4a035010, 0x0000000b, 0x42001000,
- 0x0010cbad, 0x4008a800, 0x4200b000, 0x00000020,
- 0x4600a800, 0xffffffff, 0x8054a800, 0x8058b040,
- 0x040207fc, 0x42007800, 0x0010cbac, 0x46007800,
- 0x11060000, 0x8d0e1d06, 0x04000005, 0x50080000,
- 0x46001000, 0x00ffffff, 0x0401f040, 0x42024800,
- 0x0010cfd1, 0x0201f800, 0x0010c0ce, 0x40083000,
- 0x41782800, 0x41781800, 0x41782000, 0x59240200,
- 0x8c000500, 0x04000012, 0x8c000502, 0x04000010,
- 0x801429c0, 0x04020002, 0x800c1800, 0x80142800,
- 0x59244408, 0x82204500, 0x000000ff, 0x400c0000,
- 0x50182000, 0x0c01f811, 0x80102540, 0x44103000,
- 0x800c19c0, 0x04020002, 0x80183000, 0x83264c00,
- 0x0000000b, 0x8058b040, 0x040207e9, 0x50080000,
- 0x82000500, 0x00ffffff, 0x801428f0, 0x80140540,
- 0x44001000, 0x0401f019, 0x00103d4e, 0x00103d53,
- 0x00103d58, 0x00103d5d, 0x802000f0, 0x82102500,
- 0x00ffffff, 0x800c1800, 0x1c01f000, 0x802000e0,
- 0x82102500, 0xff00ffff, 0x800c1800, 0x1c01f000,
- 0x802000d0, 0x82102500, 0xffff00ff, 0x800c1800,
- 0x1c01f000, 0x40200000, 0x82102500, 0xffffff00,
- 0x41781800, 0x1c01f000, 0x42000800, 0x00000021,
- 0x0401f3f9, 0x4c5c0000, 0x4200b800, 0x00000001,
- 0x0401f271, 0x4803c856, 0x4a035010, 0x0000000d,
- 0x83cca400, 0x00000006, 0x4200a800, 0x0010cbac,
- 0x4200b000, 0x00000021, 0x0201f800, 0x0010c086,
- 0x42007800, 0x0010cbac, 0x46007800, 0x11070000,
- 0x42000800, 0x00000021, 0x0401f3e3, 0x4c5c0000,
- 0x4200b800, 0x00000001, 0x0401f2c5, 0x4803c856,
- 0x82040d40, 0x00000001, 0x0201f800, 0x001042b3,
- 0x4a035010, 0x0000000f, 0x497b505a, 0x42006000,
- 0xffffffff, 0x42006800, 0x00300000, 0x0201f800,
- 0x001042a6, 0x42006000, 0xffdfffff, 0x41786800,
- 0x0201f800, 0x001042a6, 0x42000800, 0x000007d0,
- 0x42001000, 0x00104131, 0x0201f000, 0x001064d5,
- 0x4803c856, 0x59a8005a, 0x80000540, 0x0402038b,
- 0x1c01f000, 0x4803c856, 0x4a035010, 0x00000011,
- 0x83cca400, 0x00000006, 0x4200a800, 0x0010cbac,
- 0x4200b000, 0x00000005, 0x0201f800, 0x0010c086,
- 0x4200a800, 0x0010cbac, 0x4600a800, 0x11020000,
- 0x8d0e1d06, 0x04020049, 0x59a80c1b, 0x82040580,
- 0x0000ffff, 0x04000045, 0x82040d00, 0x00000030,
- 0x04000006, 0x42000800, 0xffffd815, 0x0201f800,
- 0x00102078, 0x0401f03d, 0x59cc0007, 0x8c00053c,
- 0x0400003a, 0x42024800, 0x0010cfd1, 0x0201f800,
- 0x0010c0ce, 0x59240200, 0x82000d00, 0x00000063,
- 0x82040d80, 0x00000063, 0x04020023, 0x59240a08,
- 0x42001000, 0x0010cbad, 0x0401fb08, 0x0400000a,
- 0x59240c08, 0x0201f800, 0x001015d6, 0x59240200,
- 0x84000502, 0x84000518, 0x84000544, 0x48024a00,
- 0x0401f015, 0x59240200, 0x82000540, 0x00001006,
- 0x84000506, 0x48024a00, 0x48064a08, 0x82042c00,
- 0x00102116, 0x50142800, 0x82142d00, 0x000000ff,
- 0x48164c08, 0x59240005, 0x82000500, 0x00ffff00,
- 0x80140d40, 0x48064805, 0x40140800, 0x0201f800,
- 0x001015c5, 0x83264c00, 0x0000000b, 0x8058b040,
- 0x040207d5, 0x42024800, 0x0010cfd1, 0x59242a00,
- 0x8c142d02, 0x04000005, 0x8c142d00, 0x04000003,
- 0x59242c08, 0x4817500f, 0x42000800, 0x00000005,
- 0x0401f365, 0x4c5c0000, 0x4178b800, 0x59a8005a,
- 0x80000540, 0x04000026, 0x4803c857, 0x42001000,
- 0x00104131, 0x0201f800, 0x001064fe, 0x59a8005a,
- 0x82000580, 0x00000014, 0x0402001c, 0x59cc1006,
- 0x82081580, 0x11030000, 0x04020018, 0x59cc1007,
- 0x8c08153e, 0x0400000b, 0x59a80015, 0x8c000504,
- 0x04020008, 0x42000000, 0x0010ce71, 0x0201f800,
- 0x0010bfb3, 0x59a80015, 0x84000544, 0x48035015,
- 0x805cb9c0, 0x04000005, 0x4a035010, 0x00000006,
- 0x0401fec8, 0x0401f006, 0x4a035010, 0x00000012,
- 0x0401f805, 0x0401f002, 0x0401fb04, 0x5c00b800,
- 0x1c01f000, 0x4803c856, 0x4a035010, 0x00000013,
- 0x83cca400, 0x00000007, 0x4200a800, 0x0010cbad,
- 0x4200b000, 0x00000004, 0x0201f800, 0x0010c086,
- 0x4200a800, 0x0010cbac, 0x4600a800, 0x11030000,
- 0x8d0e1d06, 0x04020071, 0x42024800, 0x0010cfd1,
- 0x0201f800, 0x0010c0ce, 0x4c600000, 0x4178c000,
- 0x59a8021b, 0x82000500, 0xfffffffc, 0x4803521b,
- 0x59240200, 0x40000800, 0x82040d00, 0xfffffb17,
- 0x48064a00, 0x8c000500, 0x0400004d, 0x8c000518,
- 0x0402004b, 0x8c000502, 0x04020004, 0x59240400,
- 0x8c000502, 0x04000046, 0x59240a08, 0x42001000,
- 0x0010cbad, 0x0401fa81, 0x0400002e, 0x59240005,
- 0x82000500, 0x00ffff00, 0x48024805, 0x59240200,
- 0x8c000502, 0x0400001c, 0x59240207, 0x82000500,
- 0x0000ffff, 0x04000018, 0x8060c000, 0x59240c08,
- 0x0201f800, 0x001015d6, 0x4c640000, 0x4c580000,
- 0x4d2c0000, 0x5924c809, 0x4200b000, 0x00000010,
- 0x50640000, 0x800001c0, 0x04000005, 0x4578c800,
- 0x40025800, 0x0201f800, 0x00100594, 0x8064c800,
- 0x8058b040, 0x040207f7, 0x5c025800, 0x5c00b000,
- 0x5c00c800, 0x59240200, 0x84000502, 0x84000544,
- 0x48024a00, 0x59240400, 0x8c000504, 0x04000018,
- 0x59240200, 0x84000546, 0x48024a00, 0x0401f014,
- 0x59240200, 0x82000540, 0x00000006, 0x84000506,
- 0x48024a00, 0x82042c00, 0x00102116, 0x50142800,
+ 0x59a8001b, 0x8c000504, 0x04020008, 0x42000000,
+ 0x0010d487, 0x0201f800, 0x0010c50a, 0x59a8001b,
+ 0x84000544, 0x4803501b, 0x4a035016, 0x00000010,
+ 0x0401f10b, 0x1c01f000, 0x0201f000, 0x00104211,
+ 0x4803c856, 0x4a035016, 0x00000003, 0x42006000,
+ 0xbf3fffff, 0x42006800, 0x00100000, 0x0201f800,
+ 0x001043b7, 0x42001000, 0x001042d5, 0x0201f800,
+ 0x00106882, 0x0201f800, 0x001042de, 0x42001000,
+ 0x0010421c, 0x0201f800, 0x0010686f, 0x59a80421,
+ 0x82000500, 0x00000028, 0x04000005, 0x42000800,
+ 0xffffd815, 0x0201f800, 0x0010210a, 0x42007800,
+ 0x0010d1c2, 0x46007800, 0x11020000, 0x42000800,
+ 0x00000005, 0x0201f000, 0x00104248, 0x59a80068,
+ 0x80000540, 0x0400001e, 0x4803c857, 0x42001000,
+ 0x0010421c, 0x0201f800, 0x0010686f, 0x59a80068,
+ 0x82000580, 0x00000014, 0x04020016, 0x59cc1006,
+ 0x82081580, 0x11020000, 0x04020012, 0x59cc1007,
+ 0x8c08153e, 0x0400000b, 0x59a8001b, 0x8c000504,
+ 0x04020008, 0x42000000, 0x0010d487, 0x0201f800,
+ 0x0010c50a, 0x59a8001b, 0x84000544, 0x4803501b,
+ 0x4a035016, 0x00000004, 0x0401f004, 0x1c01f000,
+ 0x0201f000, 0x00104211, 0x4803c856, 0x4a035016,
+ 0x00000005, 0x0401f149, 0x4c5c0000, 0x4200b800,
+ 0x00000001, 0x0401f118, 0x4803c856, 0x4a035016,
+ 0x00000007, 0x0401f1f1, 0x4c5c0000, 0x4200b800,
+ 0x00000001, 0x0401f1c0, 0x4803c856, 0x4a035016,
+ 0x00000009, 0x83cca400, 0x00000006, 0x4200a800,
+ 0x0010d1c2, 0x4200b000, 0x00000005, 0x0201f800,
+ 0x0010c5dd, 0x42007800, 0x0010d1c2, 0x46007800,
+ 0x11050100, 0x8d0e1d06, 0x04000296, 0x42000800,
+ 0x00000005, 0x0201f800, 0x00104248, 0x4d3c0000,
+ 0x42027800, 0x00000001, 0x0201f800, 0x0010a641,
+ 0x5c027800, 0x1c01f000, 0x4c5c0000, 0x4200b800,
+ 0x00000001, 0x0401f224, 0x4803c856, 0x4a035016,
+ 0x0000000b, 0x42001000, 0x0010d1c3, 0x4008a800,
+ 0x4200b000, 0x00000020, 0x4600a800, 0xffffffff,
+ 0x8054a800, 0x8058b040, 0x040207fc, 0x42007800,
+ 0x0010d1c2, 0x46007800, 0x11060000, 0x8d0e1d06,
+ 0x04000005, 0x50080000, 0x46001000, 0x00ffffff,
+ 0x0401f040, 0x42024800, 0x0010d5ef, 0x0201f800,
+ 0x0010c625, 0x40083000, 0x41782800, 0x41781800,
+ 0x41782000, 0x59240200, 0x8c000500, 0x04000012,
+ 0x8c000502, 0x04000010, 0x801429c0, 0x04020002,
+ 0x800c1800, 0x80142800, 0x59244408, 0x82204500,
+ 0x000000ff, 0x400c0000, 0x50182000, 0x0c01f811,
+ 0x80102540, 0x44103000, 0x800c19c0, 0x04020002,
+ 0x80183000, 0x83264c00, 0x0000000b, 0x8058b040,
+ 0x040207e9, 0x50080000, 0x82000500, 0x00ffffff,
+ 0x801428f0, 0x80140540, 0x44001000, 0x0401f019,
+ 0x00103e38, 0x00103e3d, 0x00103e42, 0x00103e47,
+ 0x802000f0, 0x82102500, 0x00ffffff, 0x800c1800,
+ 0x1c01f000, 0x802000e0, 0x82102500, 0xff00ffff,
+ 0x800c1800, 0x1c01f000, 0x802000d0, 0x82102500,
+ 0xffff00ff, 0x800c1800, 0x1c01f000, 0x40200000,
+ 0x82102500, 0xffffff00, 0x41781800, 0x1c01f000,
+ 0x42000800, 0x00000021, 0x0401f3fa, 0x4c5c0000,
+ 0x4200b800, 0x00000001, 0x0401f272, 0x4803c856,
+ 0x4a035016, 0x0000000d, 0x83cca400, 0x00000006,
+ 0x4200a800, 0x0010d1c2, 0x4200b000, 0x00000021,
+ 0x0201f800, 0x0010c5dd, 0x42007800, 0x0010d1c2,
+ 0x46007800, 0x11070000, 0x42000800, 0x00000021,
+ 0x0401f3e4, 0x4c5c0000, 0x4200b800, 0x00000001,
+ 0x0401f2c6, 0x4803c856, 0x82040d40, 0x00000001,
+ 0x0201f800, 0x001043c4, 0x4a035016, 0x0000000f,
+ 0x497b5068, 0x42006000, 0xffffffff, 0x42006800,
+ 0x00300000, 0x0201f800, 0x001043b7, 0x42006000,
+ 0xffdfffff, 0x41786800, 0x0201f800, 0x001043b7,
+ 0x42000800, 0x000007d0, 0x42001000, 0x0010421c,
+ 0x0201f000, 0x0010683a, 0x4803c856, 0x59a80068,
+ 0x80000540, 0x0402038c, 0x1c01f000, 0x4803c856,
+ 0x4a035016, 0x00000011, 0x83cca400, 0x00000006,
+ 0x4200a800, 0x0010d1c2, 0x4200b000, 0x00000005,
+ 0x0201f800, 0x0010c5dd, 0x4200a800, 0x0010d1c2,
+ 0x4600a800, 0x11020000, 0x8d0e1d06, 0x04020049,
+ 0x59a80c21, 0x82040580, 0x0000ffff, 0x04000045,
+ 0x82040d00, 0x00000030, 0x04000006, 0x42000800,
+ 0xffffd815, 0x0201f800, 0x0010210a, 0x0401f03d,
+ 0x59cc0007, 0x8c00053c, 0x0400003a, 0x42024800,
+ 0x0010d5ef, 0x0201f800, 0x0010c625, 0x59240200,
+ 0x82000d00, 0x00000063, 0x82040d80, 0x00000063,
+ 0x04020023, 0x59240a08, 0x42001000, 0x0010d1c3,
+ 0x0401fb09, 0x0400000a, 0x59240c08, 0x0201f800,
+ 0x00101644, 0x59240200, 0x84000502, 0x84000518,
+ 0x84000544, 0x48024a00, 0x0401f015, 0x59240200,
+ 0x82000540, 0x00001006, 0x84000506, 0x48024a00,
+ 0x48064a08, 0x82042c00, 0x001021a6, 0x50142800,
0x82142d00, 0x000000ff, 0x48164c08, 0x59240005,
0x82000500, 0x00ffff00, 0x80140d40, 0x48064805,
- 0x40140800, 0x0201f800, 0x001015c5, 0x59240200,
- 0x84000518, 0x48024a00, 0x83264c00, 0x0000000b,
- 0x8058b040, 0x040207a7, 0x8060c1c0, 0x04020b72,
- 0x5c00c000, 0x42024800, 0x0010cfd1, 0x59242a00,
- 0x8c142d02, 0x04000005, 0x8c142d00, 0x04000003,
- 0x59242c08, 0x4817500f, 0x42000800, 0x00000005,
- 0x0401f2b5, 0x4c5c0000, 0x4178b800, 0x59a8005a,
- 0x80000540, 0x04000026, 0x4803c857, 0x42001000,
- 0x00104131, 0x0201f800, 0x001064fe, 0x59a8005a,
- 0x82000580, 0x00000014, 0x0402001c, 0x59cc1006,
- 0x82081580, 0x11040000, 0x04020018, 0x59cc1007,
- 0x8c08153e, 0x0400000b, 0x59a80015, 0x8c000504,
- 0x04020008, 0x42000000, 0x0010ce71, 0x0201f800,
- 0x0010bfb3, 0x59a80015, 0x84000544, 0x48035015,
- 0x805cb9c0, 0x04000005, 0x4a035010, 0x00000008,
- 0x0401fe20, 0x0401f006, 0x4a035010, 0x00000014,
- 0x0401f805, 0x0401f002, 0x0401fa54, 0x5c00b800,
- 0x1c01f000, 0x4803c856, 0x4a035010, 0x00000015,
- 0x83cca400, 0x00000007, 0x4200a800, 0x0010cbad,
- 0x4200b000, 0x00000004, 0x0201f800, 0x0010c086,
- 0x4200a800, 0x0010cbac, 0x4600a800, 0x11040000,
- 0x8d0e1d06, 0x04020045, 0x42024800, 0x0010cfd1,
- 0x0201f800, 0x0010c0ce, 0x59240400, 0x8c000500,
- 0x04000031, 0x59240200, 0x8c000500, 0x0400002e,
- 0x8c000502, 0x0402002c, 0x59240c00, 0x80040910,
- 0x82040d00, 0x000000ff, 0x42001000, 0x0010cbad,
- 0x0401f9da, 0x04000010, 0x59240005, 0x82000500,
- 0x00ffff00, 0x48024805, 0x59240200, 0x84000502,
- 0x48024a00, 0x59242400, 0x8c102504, 0x0400001a,
- 0x84000546, 0x84000544, 0x48024a00, 0x8060c000,
- 0x0401f015, 0x59240200, 0x82000540, 0x00000006,
- 0x84000506, 0x48024a00, 0x48064a08, 0x82042c00,
- 0x00102116, 0x50142800, 0x82142d00, 0x000000ff,
+ 0x40140800, 0x0201f800, 0x00101633, 0x83264c00,
+ 0x0000000b, 0x8058b040, 0x040207d5, 0x42024800,
+ 0x0010d5ef, 0x59242a00, 0x8c142d02, 0x04000005,
+ 0x8c142d00, 0x04000003, 0x59242c08, 0x48175015,
+ 0x42000800, 0x00000005, 0x0401f366, 0x4c5c0000,
+ 0x4178b800, 0x59a80068, 0x80000540, 0x04000026,
+ 0x4803c857, 0x42001000, 0x0010421c, 0x0201f800,
+ 0x0010686f, 0x59a80068, 0x82000580, 0x00000014,
+ 0x0402001c, 0x59cc1006, 0x82081580, 0x11030000,
+ 0x04020018, 0x59cc1007, 0x8c08153e, 0x0400000b,
+ 0x59a8001b, 0x8c000504, 0x04020008, 0x42000000,
+ 0x0010d487, 0x0201f800, 0x0010c50a, 0x59a8001b,
+ 0x84000544, 0x4803501b, 0x805cb9c0, 0x04000005,
+ 0x4a035016, 0x00000006, 0x0401fec8, 0x0401f006,
+ 0x4a035016, 0x00000012, 0x0401f805, 0x0401f002,
+ 0x0401fb05, 0x5c00b800, 0x1c01f000, 0x4803c856,
+ 0x4a035016, 0x00000013, 0x83cca400, 0x00000007,
+ 0x4200a800, 0x0010d1c3, 0x4200b000, 0x00000004,
+ 0x0201f800, 0x0010c5dd, 0x4200a800, 0x0010d1c2,
+ 0x4600a800, 0x11030000, 0x8d0e1d06, 0x04020071,
+ 0x42024800, 0x0010d5ef, 0x0201f800, 0x0010c625,
+ 0x4c600000, 0x4178c000, 0x59a80221, 0x82000500,
+ 0xfffffffc, 0x48035221, 0x59240200, 0x40000800,
+ 0x82040d00, 0xfffffb17, 0x48064a00, 0x8c000500,
+ 0x0400004d, 0x8c000518, 0x0402004b, 0x8c000502,
+ 0x04020004, 0x59240400, 0x8c000502, 0x04000046,
+ 0x59240a08, 0x42001000, 0x0010d1c3, 0x0401fa82,
+ 0x0400002e, 0x59240005, 0x82000500, 0x00ffff00,
+ 0x48024805, 0x59240200, 0x8c000502, 0x0400001c,
+ 0x59240207, 0x82000500, 0x0000ffff, 0x04000018,
+ 0x8060c000, 0x59240c08, 0x0201f800, 0x00101644,
+ 0x4c640000, 0x4c580000, 0x4d2c0000, 0x5924c809,
+ 0x4200b000, 0x00000010, 0x50640000, 0x800001c0,
+ 0x04000005, 0x4578c800, 0x40025800, 0x0201f800,
+ 0x001005aa, 0x8064c800, 0x8058b040, 0x040207f7,
+ 0x5c025800, 0x5c00b000, 0x5c00c800, 0x59240200,
+ 0x84000502, 0x84000544, 0x48024a00, 0x59240400,
+ 0x8c000504, 0x04000018, 0x59240200, 0x84000546,
+ 0x48024a00, 0x0401f014, 0x59240200, 0x82000540,
+ 0x00000006, 0x84000506, 0x48024a00, 0x82042c00,
+ 0x001021a6, 0x50142800, 0x82142d00, 0x000000ff,
0x48164c08, 0x59240005, 0x82000500, 0x00ffff00,
0x80140d40, 0x48064805, 0x40140800, 0x0201f800,
- 0x001015c5, 0x83264c00, 0x0000000b, 0x8058b040,
- 0x040207ca, 0x42024800, 0x0010cfd1, 0x59242a00,
- 0x8c142d02, 0x04000005, 0x8c142d00, 0x04000003,
- 0x59242c08, 0x4817500f, 0x42000800, 0x00000005,
- 0x0401f231, 0x4c5c0000, 0x4178b800, 0x59a8005a,
- 0x80000540, 0x0400004a, 0x4803c857, 0x42001000,
- 0x00104131, 0x0201f800, 0x001064fe, 0x59a8005a,
- 0x82000580, 0x00000014, 0x04020040, 0x59cc1006,
- 0x82080500, 0x11050000, 0x82000580, 0x11050000,
- 0x0402003a, 0x8c081510, 0x04000015, 0x0401fb70,
- 0x59cc1007, 0x8c08153e, 0x0400000b, 0x59a80015,
- 0x8c000504, 0x04020008, 0x42000000, 0x0010ce71,
- 0x0201f800, 0x0010bfb3, 0x59a80015, 0x84000544,
- 0x48035015, 0x805cb9c0, 0x04000017, 0x4a035010,
- 0x0000000a, 0x0401fdb7, 0x0401f025, 0x59cc1007,
- 0x8c08153e, 0x0400000b, 0x59a80015, 0x8c000504,
- 0x04020008, 0x42000000, 0x0010ce71, 0x0201f800,
- 0x0010bfb3, 0x59a80015, 0x84000544, 0x48035015,
- 0x82000540, 0x00000001, 0x0401fb4d, 0x497b5056,
- 0x0401f003, 0x4a035056, 0x00000001, 0x59cc1007,
- 0x8c08153c, 0x04000003, 0x4a03521b, 0x00000008,
- 0x805cb9c0, 0x04020005, 0x4a035010, 0x00000016,
- 0x0401f809, 0x0401f006, 0x4a035010, 0x0000000e,
- 0x0401fe07, 0x0401f002, 0x0401f9ac, 0x5c00b800,
- 0x1c01f000, 0x4803c856, 0x83cca400, 0x00000006,
- 0x4200a800, 0x0010cbac, 0x4200b000, 0x00000005,
- 0x0201f800, 0x0010c086, 0x4a035010, 0x00000017,
- 0x59a80056, 0x8c000500, 0x04000006, 0x42001000,
- 0x0010cbac, 0x46001000, 0x11050100, 0x0401f003,
- 0x4a035010, 0x0000001b, 0x42024800, 0x0010cfd1,
- 0x0201f800, 0x0010c0ce, 0x599c2817, 0x59240200,
- 0x8c000500, 0x04000027, 0x8c000502, 0x04020025,
- 0x8c000506, 0x04020023, 0x4c580000, 0x0401f8d9,
- 0x5c00b000, 0x0402000b, 0x59240005, 0x82000500,
- 0x00ffff00, 0x48024805, 0x59240200, 0x84000502,
- 0x84000546, 0x84000544, 0x48024a00, 0x0401f015,
- 0x59240200, 0x82000540, 0x00000006, 0x84000506,
- 0x48024a00, 0x48064a08, 0x82042c00, 0x00102116,
- 0x50142800, 0x82142d00, 0x000000ff, 0x48164c08,
- 0x59240005, 0x82000500, 0x00ffff00, 0x80140d40,
- 0x48064805, 0x40140800, 0x0201f800, 0x001015c5,
- 0x83264c00, 0x0000000b, 0x8058b040, 0x040207d4,
- 0x42024800, 0x0010cfd1, 0x59242a00, 0x8c142d02,
- 0x04000005, 0x8c142d00, 0x04000003, 0x59242c08,
- 0x4817500f, 0x42000800, 0x00000005, 0x0401f98e,
- 0x4d3c0000, 0x42027800, 0x00000001, 0x0201f800,
- 0x0010a242, 0x5c027800, 0x1c01f000, 0x4c5c0000,
- 0x4178b800, 0x59a8005a, 0x80000540, 0x0400001b,
- 0x4803c857, 0x42001000, 0x00104131, 0x0201f800,
- 0x001064fe, 0x59a8005a, 0x82000580, 0x00000084,
- 0x04020011, 0x59cc1006, 0x82081580, 0x11060000,
- 0x0402000d, 0x80000580, 0x0401fac9, 0x805cb9c0,
- 0x04000005, 0x4a035010, 0x0000000c, 0x0401fd7a,
- 0x0401f006, 0x4a035010, 0x00000018, 0x0401f805,
- 0x0401f002, 0x0401f931, 0x5c00b800, 0x1c01f000,
- 0x4803c856, 0x4a035010, 0x00000019, 0x83cca400,
- 0x00000006, 0x4200a800, 0x0010cbac, 0x4200b000,
- 0x00000021, 0x0201f800, 0x0010c086, 0x42003800,
- 0x0010cbad, 0x42024800, 0x0010cfd1, 0x4200b000,
- 0x0010cfd0, 0x5058b000, 0x59240200, 0x8c000500,
- 0x0400001a, 0x8c000502, 0x04000018, 0x401c2800,
- 0x50141000, 0x80080130, 0x80000000, 0x40001800,
- 0x82081500, 0x00ffffff, 0x800000f0, 0x80080540,
- 0x44002800, 0x59244408, 0x82204500, 0x000000ff,
- 0x400c1000, 0x80081104, 0x82083400, 0x0010cbad,
- 0x50181000, 0x820c0500, 0x00000003, 0x0c01f80a,
- 0x80081540, 0x44083000, 0x83264c00, 0x0000000b,
- 0x8058b040, 0x040207e1, 0x42000800, 0x00000021,
- 0x0401f131, 0x00104031, 0x00104035, 0x00104039,
- 0x0010403d, 0x802000f0, 0x82081500, 0x00ffffff,
- 0x1c01f000, 0x802000e0, 0x82081500, 0xff00ffff,
- 0x1c01f000, 0x802000d0, 0x82081500, 0xffff00ff,
- 0x1c01f000, 0x40200000, 0x82081500, 0xffffff00,
- 0x1c01f000, 0x4c5c0000, 0x4178b800, 0x59a8005a,
- 0x80000540, 0x0400001c, 0x4803c857, 0x42001000,
- 0x00104131, 0x0201f800, 0x001064fe, 0x59a8005a,
- 0x82000580, 0x00000084, 0x04020012, 0x59cc1006,
- 0x82081580, 0x11070000, 0x0402000e, 0x4a035056,
- 0x00000001, 0x0401f8ac, 0x805cb9c0, 0x04000005,
- 0x4a035010, 0x0000000e, 0x0401fd25, 0x0401f006,
- 0x4a035010, 0x0000001a, 0x0401f805, 0x0401f002,
- 0x0401f8c6, 0x5c00b800, 0x1c01f000, 0x82000540,
- 0x00000001, 0x0401fa4e, 0x4a035010, 0x0000001b,
- 0x83cca400, 0x00000006, 0x4200a800, 0x0010cbac,
- 0x59a8205a, 0x40100000, 0x8000b104, 0x40580800,
- 0x5450a800, 0x8050a000, 0x8054a800, 0x8058b040,
- 0x040207fc, 0x0401f0e8, 0x1c01f000, 0x1c01f000,
- 0x4803c856, 0x42003000, 0x00000004, 0x42004000,
- 0x0010cbad, 0x599c2817, 0x8c142d14, 0x0402001f,
- 0x42001000, 0x00000003, 0x40200000, 0x80080400,
+ 0x00101633, 0x59240200, 0x84000518, 0x48024a00,
+ 0x83264c00, 0x0000000b, 0x8058b040, 0x040207a7,
+ 0x8060c1c0, 0x04020b73, 0x5c00c000, 0x42024800,
+ 0x0010d5ef, 0x59242a00, 0x8c142d02, 0x04000005,
+ 0x8c142d00, 0x04000003, 0x59242c08, 0x48175015,
+ 0x42000800, 0x00000005, 0x0401f2b6, 0x4c5c0000,
+ 0x4178b800, 0x59a80068, 0x80000540, 0x04000026,
+ 0x4803c857, 0x42001000, 0x0010421c, 0x0201f800,
+ 0x0010686f, 0x59a80068, 0x82000580, 0x00000014,
+ 0x0402001c, 0x59cc1006, 0x82081580, 0x11040000,
+ 0x04020018, 0x59cc1007, 0x8c08153e, 0x0400000b,
+ 0x59a8001b, 0x8c000504, 0x04020008, 0x42000000,
+ 0x0010d487, 0x0201f800, 0x0010c50a, 0x59a8001b,
+ 0x84000544, 0x4803501b, 0x805cb9c0, 0x04000005,
+ 0x4a035016, 0x00000008, 0x0401fe20, 0x0401f006,
+ 0x4a035016, 0x00000014, 0x0401f805, 0x0401f002,
+ 0x0401fa55, 0x5c00b800, 0x1c01f000, 0x4803c856,
+ 0x4a035016, 0x00000015, 0x83cca400, 0x00000007,
+ 0x4200a800, 0x0010d1c3, 0x4200b000, 0x00000004,
+ 0x0201f800, 0x0010c5dd, 0x4200a800, 0x0010d1c2,
+ 0x4600a800, 0x11040000, 0x8d0e1d06, 0x04020045,
+ 0x42024800, 0x0010d5ef, 0x0201f800, 0x0010c625,
+ 0x59240400, 0x8c000500, 0x04000031, 0x59240200,
+ 0x8c000500, 0x0400002e, 0x8c000502, 0x0402002c,
+ 0x59240c00, 0x80040910, 0x82040d00, 0x000000ff,
+ 0x42001000, 0x0010d1c3, 0x0401f9db, 0x04000010,
+ 0x59240005, 0x82000500, 0x00ffff00, 0x48024805,
+ 0x59240200, 0x84000502, 0x48024a00, 0x59242400,
+ 0x8c102504, 0x0400001a, 0x84000546, 0x84000544,
+ 0x48024a00, 0x8060c000, 0x0401f015, 0x59240200,
+ 0x82000540, 0x00000006, 0x84000506, 0x48024a00,
+ 0x48064a08, 0x82042c00, 0x001021a6, 0x50142800,
+ 0x82142d00, 0x000000ff, 0x48164c08, 0x59240005,
+ 0x82000500, 0x00ffff00, 0x80140d40, 0x48064805,
+ 0x40140800, 0x0201f800, 0x00101633, 0x83264c00,
+ 0x0000000b, 0x8058b040, 0x040207ca, 0x42024800,
+ 0x0010d5ef, 0x59242a00, 0x8c142d02, 0x04000005,
+ 0x8c142d00, 0x04000003, 0x59242c08, 0x48175015,
+ 0x42000800, 0x00000005, 0x0401f232, 0x4c5c0000,
+ 0x4178b800, 0x59a80068, 0x80000540, 0x0400004a,
+ 0x4803c857, 0x42001000, 0x0010421c, 0x0201f800,
+ 0x0010686f, 0x59a80068, 0x82000580, 0x00000014,
+ 0x04020040, 0x59cc1006, 0x82080500, 0x11050000,
+ 0x82000580, 0x11050000, 0x0402003a, 0x8c081510,
+ 0x04000015, 0x0401fb97, 0x59cc1007, 0x8c08153e,
+ 0x0400000b, 0x59a8001b, 0x8c000504, 0x04020008,
+ 0x42000000, 0x0010d487, 0x0201f800, 0x0010c50a,
+ 0x59a8001b, 0x84000544, 0x4803501b, 0x805cb9c0,
+ 0x04000017, 0x4a035016, 0x0000000a, 0x0401fdb7,
+ 0x0401f025, 0x59cc1007, 0x8c08153e, 0x0400000b,
+ 0x59a8001b, 0x8c000504, 0x04020008, 0x42000000,
+ 0x0010d487, 0x0201f800, 0x0010c50a, 0x59a8001b,
+ 0x84000544, 0x4803501b, 0x82000540, 0x00000001,
+ 0x0401fb74, 0x497b5064, 0x0401f003, 0x4a035064,
+ 0x00000001, 0x59cc1007, 0x8c08153c, 0x04000003,
+ 0x4a035221, 0x00000008, 0x805cb9c0, 0x04020005,
+ 0x4a035016, 0x00000016, 0x0401f809, 0x0401f006,
+ 0x4a035016, 0x0000000e, 0x0401fe07, 0x0401f002,
+ 0x0401f9ad, 0x5c00b800, 0x1c01f000, 0x4803c856,
+ 0x83cca400, 0x00000006, 0x4200a800, 0x0010d1c2,
+ 0x4200b000, 0x00000005, 0x0201f800, 0x0010c5dd,
+ 0x4a035016, 0x00000017, 0x59a80064, 0x8c000500,
+ 0x04000006, 0x42001000, 0x0010d1c2, 0x46001000,
+ 0x11050100, 0x0401f003, 0x4a035016, 0x0000001b,
+ 0x8d0e1d06, 0x0402003b, 0x42024800, 0x0010d5ef,
+ 0x0201f800, 0x0010c625, 0x59240200, 0x8c000500,
+ 0x04000027, 0x8c000502, 0x04020025, 0x8c000506,
+ 0x04020023, 0x4c580000, 0x0401f8d9, 0x5c00b000,
+ 0x0402000b, 0x59240005, 0x82000500, 0x00ffff00,
+ 0x48024805, 0x59240200, 0x84000502, 0x84000546,
+ 0x84000544, 0x48024a00, 0x0401f015, 0x59240200,
+ 0x82000540, 0x00000006, 0x84000506, 0x48024a00,
+ 0x48064a08, 0x82042c00, 0x001021a6, 0x50142800,
+ 0x82142d00, 0x000000ff, 0x48164c08, 0x59240005,
+ 0x82000500, 0x00ffff00, 0x80140d40, 0x48064805,
+ 0x40140800, 0x0201f800, 0x00101633, 0x83264c00,
+ 0x0000000b, 0x8058b040, 0x040207d4, 0x42024800,
+ 0x0010d5ef, 0x59242a00, 0x8c142d02, 0x04000005,
+ 0x8c142d00, 0x04000003, 0x59242c08, 0x48175015,
+ 0x42000800, 0x00000005, 0x0401f98e, 0x4d3c0000,
+ 0x42027800, 0x00000001, 0x0201f800, 0x0010a641,
+ 0x5c027800, 0x1c01f000, 0x4c5c0000, 0x4178b800,
+ 0x59a80068, 0x80000540, 0x0400001b, 0x4803c857,
+ 0x42001000, 0x0010421c, 0x0201f800, 0x0010686f,
+ 0x59a80068, 0x82000580, 0x00000084, 0x04020011,
+ 0x59cc1006, 0x82081580, 0x11060000, 0x0402000d,
+ 0x80000580, 0x0401faef, 0x805cb9c0, 0x04000005,
+ 0x4a035016, 0x0000000c, 0x0401fd79, 0x0401f006,
+ 0x4a035016, 0x00000018, 0x0401f805, 0x0401f002,
+ 0x0401f931, 0x5c00b800, 0x1c01f000, 0x4803c856,
+ 0x4a035016, 0x00000019, 0x83cca400, 0x00000006,
+ 0x4200a800, 0x0010d1c2, 0x4200b000, 0x00000021,
+ 0x0201f800, 0x0010c5dd, 0x42003800, 0x0010d1c3,
+ 0x42024800, 0x0010d5ef, 0x4200b000, 0x0010d5ee,
+ 0x5058b000, 0x59240200, 0x8c000500, 0x0400001a,
+ 0x8c000502, 0x04000018, 0x401c2800, 0x50141000,
+ 0x80080130, 0x80000000, 0x40001800, 0x82081500,
+ 0x00ffffff, 0x800000f0, 0x80080540, 0x44002800,
+ 0x59244408, 0x82204500, 0x000000ff, 0x400c1000,
+ 0x80081104, 0x82083400, 0x0010d1c3, 0x50181000,
+ 0x820c0500, 0x00000003, 0x0c01f80a, 0x80081540,
+ 0x44083000, 0x83264c00, 0x0000000b, 0x8058b040,
+ 0x040207e1, 0x42000800, 0x00000021, 0x0401f131,
+ 0x0010411c, 0x00104120, 0x00104124, 0x00104128,
+ 0x802000f0, 0x82081500, 0x00ffffff, 0x1c01f000,
+ 0x802000e0, 0x82081500, 0xff00ffff, 0x1c01f000,
+ 0x802000d0, 0x82081500, 0xffff00ff, 0x1c01f000,
+ 0x40200000, 0x82081500, 0xffffff00, 0x1c01f000,
+ 0x4c5c0000, 0x4178b800, 0x59a80068, 0x80000540,
+ 0x0400001c, 0x4803c857, 0x42001000, 0x0010421c,
+ 0x0201f800, 0x0010686f, 0x59a80068, 0x82000580,
+ 0x00000084, 0x04020012, 0x59cc1006, 0x82081580,
+ 0x11070000, 0x0402000e, 0x4a035064, 0x00000001,
+ 0x0401f8ac, 0x805cb9c0, 0x04000005, 0x4a035016,
+ 0x0000000e, 0x0401fd24, 0x0401f006, 0x4a035016,
+ 0x0000001a, 0x0401f805, 0x0401f002, 0x0401f8c6,
+ 0x5c00b800, 0x1c01f000, 0x82000540, 0x00000001,
+ 0x0401fa74, 0x4a035016, 0x0000001b, 0x83cca400,
+ 0x00000006, 0x4200a800, 0x0010d1c2, 0x59a82068,
+ 0x40100000, 0x8000b104, 0x40580800, 0x5450a800,
+ 0x8050a000, 0x8054a800, 0x8058b040, 0x040207fc,
+ 0x0401f0e8, 0x1c01f000, 0x1c01f000, 0x4803c856,
+ 0x42003000, 0x00000004, 0x42004000, 0x0010d1c3,
+ 0x599c2817, 0x8c142d14, 0x0402001f, 0x42001000,
+ 0x00000003, 0x40200000, 0x80080400, 0x50000800,
+ 0x82042580, 0xffffffff, 0x04020005, 0x80081040,
+ 0x80183040, 0x040207f8, 0x0401f046, 0x800811c0,
+ 0x04020006, 0x82042580, 0x3fffffff, 0x04000040,
+ 0x82040d40, 0xc0000000, 0x4200b000, 0x00000020,
+ 0x42001800, 0x00000001, 0x40042000, 0x80102102,
+ 0x04021021, 0x800c18c2, 0x8058b040, 0x040207fc,
+ 0x0401f033, 0x41781000, 0x40200000, 0x80080400,
0x50000800, 0x82042580, 0xffffffff, 0x04020005,
- 0x80081040, 0x80183040, 0x040207f8, 0x0401f046,
- 0x800811c0, 0x04020006, 0x82042580, 0x3fffffff,
- 0x04000040, 0x82040d40, 0xc0000000, 0x4200b000,
- 0x00000020, 0x42001800, 0x00000001, 0x40042000,
- 0x80102102, 0x04021021, 0x800c18c2, 0x8058b040,
- 0x040207fc, 0x0401f033, 0x41781000, 0x40200000,
- 0x80080400, 0x50000800, 0x82042580, 0xffffffff,
- 0x04020005, 0x80081000, 0x80183040, 0x040207f8,
- 0x0401f028, 0x800811c0, 0x04020003, 0x82040d40,
- 0xc0000000, 0x4200b000, 0x00000001, 0x42001800,
- 0x80000000, 0x40042000, 0x801020c2, 0x04021007,
- 0x800c1902, 0x8058b000, 0x82580480, 0x00000021,
- 0x040017fa, 0x0401f017, 0x40200000, 0x80082400,
- 0x50100000, 0x800c0540, 0x44002000, 0x59a80015,
- 0x84000540, 0x48035015, 0x40580000, 0x42002800,
- 0x00000020, 0x80142c80, 0x40080000, 0x42003800,
- 0x00000003, 0x801c0480, 0x800000ca, 0x80142d40,
- 0x40140800, 0x82000540, 0x00000001, 0x0401f002,
- 0x80000580, 0x1c01f000, 0x4807c857, 0x480bc857,
- 0x40041800, 0x41782000, 0x42000000, 0x00000003,
- 0x820c1c80, 0x00000020, 0x04001004, 0x80102000,
- 0x80000040, 0x0401f7fb, 0x40041800, 0x801021c0,
- 0x04000005, 0x820c1c80, 0x00000020, 0x80102040,
- 0x040207fd, 0x42002000, 0x00000001, 0x800c19c0,
- 0x04000004, 0x801020c2, 0x800c1840, 0x040207fe,
- 0x80083c00, 0x401c2800, 0x50140000, 0x80102d00,
- 0x04020007, 0x80100540, 0x44003800, 0x59a80015,
- 0x84000540, 0x48035015, 0x80000580, 0x1c01f000,
- 0x4807c856, 0x42001000, 0x00008017, 0x59a81832,
- 0x0201f800, 0x0010bfbd, 0x0201f800, 0x001039ac,
- 0x1c01f000, 0x4807c856, 0x4200b000, 0x00000020,
- 0x83cca400, 0x00000007, 0x4200a800, 0x0010e251,
- 0x0201f000, 0x0010c0b0, 0x4807c856, 0x0201f800,
- 0x001071b4, 0x42000800, 0x000000f7, 0x0401f8f1,
- 0x497b2804, 0x497b2805, 0x497b2826, 0x497b2827,
- 0x4202d800, 0x00000001, 0x42006000, 0xbe7fffff,
- 0x42006800, 0x00018000, 0x0401f98c, 0x42006000,
- 0xfffeffff, 0x41786800, 0x0401f988, 0x497b5032,
- 0x42000800, 0x0000002d, 0x42001000, 0x001041b3,
- 0x0201f000, 0x001064d5, 0x4807c856, 0x0401ffe3,
- 0x497b5010, 0x497b505a, 0x1c01f000, 0x4807c856,
- 0x42006000, 0xffffffff, 0x42006800, 0x00000028,
- 0x0401f176, 0x4807c856, 0x0401ffc6, 0x0201f800,
- 0x00106e41, 0x4df00000, 0x0201f800, 0x001070de,
- 0x5c03e000, 0x02000800, 0x00106e2e, 0x59c400a4,
- 0x82000500, 0x0000000f, 0x82000580, 0x00000002,
- 0x0402000a, 0x42006000, 0xffffffff, 0x42006800,
- 0x00200000, 0x0401f961, 0x42006000, 0xffdfffff,
- 0x41786800, 0x0401f95d, 0x497b5010, 0x42000800,
- 0x000000f7, 0x0401f8b3, 0x59c400a3, 0x82000500,
- 0xbf20bfff, 0x82000540, 0x0001c000, 0x480388a3,
- 0x84000520, 0x480388a3, 0x497b5032, 0x42000800,
- 0x0000002d, 0x42001000, 0x001041b3, 0x0201f000,
- 0x001064d5, 0x497b505a, 0x59b400f5, 0x8c000500,
- 0x04020004, 0x82000540, 0x00000001, 0x480368f5,
- 0x800400c4, 0x82000400, 0x00002000, 0x4803910a,
- 0x59b400f6, 0x82000500, 0x00000018, 0x040207fd,
- 0x4a0368f0, 0x0010cba5, 0x42000000, 0x0010cbac,
- 0x4c040000, 0x50000800, 0x82040d80, 0x11010000,
- 0x04000003, 0x50000800, 0x4807c857, 0x5c000800,
- 0x480368f1, 0x82040400, 0x0000dc00, 0x480368f3,
+ 0x80081000, 0x80183040, 0x040207f8, 0x0401f028,
+ 0x800811c0, 0x04020003, 0x82040d40, 0xc0000000,
+ 0x4200b000, 0x00000001, 0x42001800, 0x80000000,
+ 0x40042000, 0x801020c2, 0x04021007, 0x800c1902,
+ 0x8058b000, 0x82580480, 0x00000021, 0x040017fa,
+ 0x0401f017, 0x40200000, 0x80082400, 0x50100000,
+ 0x800c0540, 0x44002000, 0x59a8001b, 0x84000540,
+ 0x4803501b, 0x40580000, 0x42002800, 0x00000020,
+ 0x80142c80, 0x40080000, 0x42003800, 0x00000003,
+ 0x801c0480, 0x800000ca, 0x80142d40, 0x40140800,
+ 0x82000540, 0x00000001, 0x0401f002, 0x80000580,
+ 0x1c01f000, 0x4807c857, 0x480bc857, 0x40041800,
+ 0x41782000, 0x42000000, 0x00000003, 0x820c1c80,
+ 0x00000020, 0x04001004, 0x80102000, 0x80000040,
+ 0x0401f7fb, 0x40041800, 0x801021c0, 0x04000005,
+ 0x820c1c80, 0x00000020, 0x80102040, 0x040207fd,
+ 0x42002000, 0x00000001, 0x800c19c0, 0x04000004,
+ 0x801020c2, 0x800c1840, 0x040207fe, 0x80083c00,
+ 0x401c2800, 0x50140000, 0x80102d00, 0x04020007,
+ 0x80100540, 0x44003800, 0x59a8001b, 0x84000540,
+ 0x4803501b, 0x80000580, 0x1c01f000, 0x4807c856,
+ 0x42001000, 0x00008017, 0x59a81838, 0x0201f800,
+ 0x0010c514, 0x0201f800, 0x00103a4e, 0x1c01f000,
+ 0x4807c856, 0x4200b000, 0x00000020, 0x83cca400,
+ 0x00000007, 0x4200a800, 0x0010e86f, 0x0201f000,
+ 0x0010c607, 0x4807c856, 0x0201f800, 0x00107523,
+ 0x42000800, 0x000000f7, 0x0401f8f1, 0x497b2804,
+ 0x497b2805, 0x497b2826, 0x497b2827, 0x4202d800,
+ 0x00000001, 0x42006000, 0xbe7fffff, 0x42006800,
+ 0x00018000, 0x0401f9b2, 0x42006000, 0xfffeffff,
+ 0x41786800, 0x0401f9ae, 0x497b5038, 0x42000800,
+ 0x0000002d, 0x42001000, 0x0010429e, 0x0201f000,
+ 0x0010683a, 0x4807c856, 0x0401ffe3, 0x497b5016,
+ 0x497b5068, 0x1c01f000, 0x4807c856, 0x42006000,
+ 0xffffffff, 0x42006800, 0x00000028, 0x0401f19c,
+ 0x4807c856, 0x0401ffc6, 0x0201f800, 0x001071b0,
+ 0x4df00000, 0x0201f800, 0x0010744d, 0x5c03e000,
+ 0x02000800, 0x0010719d, 0x59c400a4, 0x82000500,
+ 0x0000000f, 0x82000580, 0x00000002, 0x0402000a,
+ 0x42006000, 0xffffffff, 0x42006800, 0x00200000,
+ 0x0401f987, 0x42006000, 0xffdfffff, 0x41786800,
+ 0x0401f983, 0x497b5016, 0x42000800, 0x000000f7,
+ 0x0401f8b3, 0x59c400a3, 0x82000500, 0xbf20bfff,
+ 0x82000540, 0x0001c000, 0x480388a3, 0x84000520,
+ 0x480388a3, 0x497b5038, 0x42000800, 0x0000002d,
+ 0x42001000, 0x0010429e, 0x0201f000, 0x0010683a,
+ 0x497b5068, 0x59b400f5, 0x8c000500, 0x04020004,
+ 0x82000540, 0x00000001, 0x480368f5, 0x800400c4,
+ 0x82000400, 0x00002000, 0x4803910a, 0x59b400f6,
+ 0x82000500, 0x00000018, 0x040207fd, 0x4a0368f0,
+ 0x0010d1bb, 0x42000000, 0x0010d1c2, 0x4c040000,
+ 0x50000800, 0x82040d80, 0x11010000, 0x04000003,
+ 0x50000800, 0x4807c857, 0x5c000800, 0x480368f1,
+ 0x82040400, 0x0000dc00, 0x480368f3, 0x59c408a4,
+ 0x82040d00, 0x0000000f, 0x82040580, 0x00000008,
+ 0x04020017, 0x4c5c0000, 0x4c600000, 0x59c4b805,
+ 0x8c5cbd3a, 0x04020005, 0x42000000, 0x0010d484,
+ 0x0201f800, 0x0010c50a, 0x4a038805, 0x20000000,
+ 0x0201f800, 0x00101aab, 0x4000c000, 0x0201f800,
+ 0x001019d6, 0x4202d800, 0x00000001, 0x497b5016,
+ 0x5c00c000, 0x5c00b800, 0x1c01f000, 0x82040580,
+ 0x0000000c, 0x04000018, 0x59c8010b, 0x8c000502,
+ 0x040007df, 0x82040d80, 0x0000000b, 0x04020005,
+ 0x59a80816, 0x82040d40, 0x00002000, 0x0401f004,
+ 0x59a80863, 0x82040d40, 0x00001000, 0x48075038,
+ 0x59a8086d, 0x800409c0, 0x04020007, 0x42000800,
+ 0x000007d0, 0x42001000, 0x0010421c, 0x0201f800,
+ 0x001069a8, 0x1c01f000, 0x4807c856, 0x0401ff44,
+ 0x0201f800, 0x001071b0, 0x4df00000, 0x0201f800,
+ 0x0010744d, 0x5c03e000, 0x02000800, 0x0010719d,
0x59c400a4, 0x82000500, 0x0000000f, 0x82000580,
- 0x00000008, 0x04020017, 0x4c5c0000, 0x4c600000,
- 0x59c4b805, 0x8c5cbd3a, 0x04020005, 0x42000000,
- 0x0010ce6e, 0x0201f800, 0x0010bfb3, 0x4a038805,
- 0x20000000, 0x0201f800, 0x00101a3d, 0x4000c000,
- 0x0201f800, 0x00101968, 0x4202d800, 0x00000001,
- 0x497b5010, 0x5c00c000, 0x5c00b800, 0x1c01f000,
- 0x59c8010b, 0x8c000502, 0x040007e2, 0x59c408a4,
- 0x82040d00, 0x0000000f, 0x82040d80, 0x0000000b,
- 0x04020005, 0x59a80810, 0x82040d40, 0x00002000,
- 0x0401f004, 0x59a80855, 0x82040d40, 0x00001000,
- 0x48075032, 0x59a8085f, 0x800409c0, 0x04020007,
- 0x42000800, 0x000007d0, 0x42001000, 0x00104131,
- 0x0201f800, 0x00106638, 0x1c01f000, 0x4807c856,
- 0x0401ff44, 0x0201f800, 0x00106e41, 0x4df00000,
- 0x0201f800, 0x001070de, 0x5c03e000, 0x02000800,
- 0x00106e2e, 0x59c400a4, 0x82000500, 0x0000000f,
- 0x82000580, 0x00000002, 0x0402000a, 0x42006000,
- 0xffffffff, 0x42006800, 0x00200000, 0x0401f8df,
- 0x42006000, 0xffdfffff, 0x41786800, 0x0401f8db,
- 0x0201f800, 0x00105104, 0x04000014, 0x0201f800,
- 0x00105122, 0x04020011, 0x4a035013, 0x0000aaaa,
- 0x4c040000, 0x0201f800, 0x0010160b, 0x59a8001f,
- 0x82000500, 0xffff0000, 0x80040540, 0x4803501f,
- 0x5c000800, 0x4a035014, 0x00000000, 0x0201f800,
- 0x00105051, 0x0401f008, 0x4a035058, 0x00000005,
- 0x42000000, 0x00000080, 0x0201f800, 0x0010155d,
- 0x0401ff22, 0x1c01f000, 0x0401f809, 0x42006000,
- 0xbf7f7fff, 0x41786800, 0x0401f0b8, 0x42006000,
- 0xbf7f7fff, 0x41786800, 0x0401f0b4, 0x0201f800,
- 0x00105122, 0x04020009, 0x59c40006, 0x82000540,
- 0x000000f0, 0x48038806, 0x42006000, 0xbfffffff,
- 0x41786800, 0x0401f8a9, 0x1c01f000, 0x40680800,
- 0x800408d0, 0x59a80015, 0x8c000506, 0x04000006,
- 0x59a8000f, 0x82000500, 0x000000ff, 0x80040540,
- 0x0401f003, 0x82040540, 0x000000f7, 0x480388a7,
- 0x1c01f000, 0x4807c856, 0x42000000, 0x0010cf06,
- 0x0201f800, 0x0010bfb3, 0x42003000, 0x00000005,
- 0x4d3c0000, 0x4c180000, 0x42003000, 0x0000000d,
- 0x42027800, 0x00000002, 0x0401f04e, 0x4807c856,
- 0x42000000, 0x0010cf2b, 0x0201f800, 0x0010bfb3,
- 0x42003000, 0x00000000, 0x4d3c0000, 0x4c180000,
- 0x42003000, 0x0000000f, 0x42001800, 0x0000ffff,
- 0x42002000, 0x00000007, 0x0201f800, 0x00103a21,
- 0x5c003000, 0x59240200, 0x84000556, 0x48024a00,
- 0x4d400000, 0x42028000, 0x0000002a, 0x59240400,
- 0x8c00050a, 0x02000800, 0x0010b198, 0x42027800,
- 0x00000002, 0x0201f800, 0x0010200c, 0x5c028000,
- 0x5c027800, 0x0201f000, 0x00020b9d, 0x4807c856,
- 0x42000000, 0x0010cf29, 0x0201f800, 0x0010bfb3,
- 0x42003000, 0x00000003, 0x4d3c0000, 0x4c180000,
- 0x42003000, 0x0000000e, 0x42027800, 0x00000202,
- 0x0401f01c, 0x4807c856, 0x42000000, 0x0010cf28,
- 0x0201f800, 0x0010bfb3, 0x42003000, 0x00000004,
- 0x4d3c0000, 0x4c180000, 0x42003000, 0x00000010,
- 0x42027800, 0x00000202, 0x0401f00e, 0x4807c856,
- 0x42000000, 0x0010ce70, 0x0201f800, 0x0010bfb3,
- 0x42003000, 0x00000001, 0x4d3c0000, 0x4c180000,
- 0x42003000, 0x0000000c, 0x42027800, 0x00000002,
- 0x42001800, 0x0000ffff, 0x42002000, 0x00000007,
- 0x4d200000, 0x417a4000, 0x0201f800, 0x00103a21,
- 0x5c024000, 0x5c003000, 0x4d400000, 0x0201f800,
- 0x0010b752, 0x42028000, 0x0000002a, 0x0201f800,
- 0x0010fef2, 0x4c580000, 0x0201f800, 0x0010c0ce,
- 0x42000800, 0x0010cfd1, 0x58040005, 0x82000500,
- 0x000000ff, 0x48000805, 0x82040c00, 0x0000000b,
- 0x8058b040, 0x040207f9, 0x5c00b000, 0x5c028000,
- 0x5c027800, 0x1c01f000, 0x4807c856, 0x04011000,
- 0x4a03c840, 0x0010cba5, 0x4a03c842, 0x00000040,
- 0x40000000, 0x040117ff, 0x42007800, 0x0010cba5,
- 0x46007800, 0x00000011, 0x803c7800, 0x4a007800,
- 0x220000ef, 0x4a007801, 0x000000ef, 0x4a007802,
- 0x01380000, 0x4a007803, 0x00000000, 0x4a007804,
- 0xffffffff, 0x4a007805, 0x00000000, 0x1c01f000,
- 0x40686000, 0x406c6800, 0x59c400a3, 0x80300500,
- 0x80340540, 0x480388a3, 0x1c01f000, 0x40686000,
- 0x4833c857, 0x59c400a3, 0x80300540, 0x480388a3,
- 0x80300580, 0x480388a3, 0x1c01f000, 0x4803c856,
- 0x04000004, 0x4a035060, 0x00000001, 0x0401f002,
- 0x497b5060, 0x1c01f000, 0x59c80002, 0x80000540,
- 0x0400000a, 0x80000040, 0x04000008, 0x4a039005,
- 0x00000140, 0x42000000, 0x00000006, 0x80000040,
- 0x040207ff, 0x0401f7f5, 0x1c01f000, 0x4c5c0000,
- 0x4c600000, 0x59c4b805, 0x485fc856, 0x8c5cbd3a,
- 0x04020005, 0x42000000, 0x0010ce6e, 0x0201f800,
- 0x0010bfb3, 0x4a038805, 0x20000000, 0x0201f800,
- 0x00101a3d, 0x4000c000, 0x0201f800, 0x00101968,
- 0x4a038805, 0x04000000, 0x5c00c000, 0x5c00b800,
- 0x1c01f000, 0x497a6a00, 0x4a026c00, 0x00000707,
- 0x497a6801, 0x497a6808, 0x497a6809, 0x497a6806,
- 0x497a6807, 0x497a6c0b, 0x497a680c, 0x59240400,
- 0x8c00050a, 0x04000006, 0x5934080f, 0x59340010,
- 0x80040540, 0x02020800, 0x0010032e, 0x4a026a04,
- 0x00000100, 0x497a6a03, 0x59340402, 0x82000500,
- 0x000000ff, 0x48026c02, 0x497a6c04, 0x497a6a05,
- 0x497a6c05, 0x497a6811, 0x4d2c0000, 0x5934000d,
- 0x49466c03, 0x80025d40, 0x04000004, 0x0201f800,
- 0x0010059d, 0x497a680d, 0x5c025800, 0x59a80070,
- 0x8c000502, 0x42000000, 0x00000010, 0x04020002,
- 0x599c0401, 0x48026a0b, 0x599c0208, 0x48026c12,
- 0x4a02680a, 0x00006000, 0x0201f000, 0x00104d11,
- 0x42000000, 0x00000005, 0x80000d80, 0x0401f02c,
- 0x0201f800, 0x00104a45, 0x04020017, 0x59a8021b,
- 0x8c00050a, 0x04020010, 0x59340212, 0x82000500,
- 0x0000ff00, 0x4803c857, 0x0400000b, 0x59340a00,
- 0x8c040d1e, 0x02000000, 0x000202ca, 0x42000000,
- 0x00000029, 0x42000800, 0x00001000, 0x492fc857,
- 0x0401f017, 0x492fc857, 0x42000000, 0x00000028,
- 0x0401f011, 0x8d0e1d02, 0x04020003, 0x8d0e1d00,
- 0x04000004, 0x42000000, 0x00000004, 0x0401f00a,
- 0x42000000, 0x00000029, 0x59340a00, 0x8c040d1e,
- 0x04000005, 0x492fc857, 0x42000800, 0x00001000,
- 0x0401f003, 0x492fc857, 0x80000d80, 0x4803c857,
- 0x80028540, 0x1c01f000, 0x490fc857, 0x8d0e1d00,
- 0x040207ed, 0x0201f800, 0x00104a1c, 0x040207e6,
- 0x59340200, 0x8c00050e, 0x040007e3, 0x0201f000,
- 0x000202ca, 0x4d480000, 0x4d4c0000, 0x592e9009,
- 0x592e980a, 0x0201f800, 0x001048c9, 0x5c029800,
- 0x5c029000, 0x040007bb, 0x0201f000, 0x000202ce,
- 0x592c0207, 0x492fc857, 0x82000d80, 0x000007ff,
- 0x04020006, 0x4a025c0b, 0x00000030, 0x42026800,
- 0x0010cb7b, 0x0401f021, 0x82000c80, 0x000007f0,
- 0x04021047, 0x81ac0400, 0x50000000, 0x80026d40,
- 0x0400003a, 0x0201f800, 0x0010494d, 0x0402003a,
- 0x592c040b, 0x8c00050a, 0x04020014, 0x592e600a,
- 0x83300480, 0x00111584, 0x0400103c, 0x41580000,
- 0x81300480, 0x04021039, 0x59300c07, 0x82040580,
- 0x00000009, 0x04020038, 0x4a025a07, 0x00000000,
- 0x497a5800, 0x59300009, 0x80000540, 0x0402001a,
- 0x492e6009, 0x0401f012, 0x0201f800, 0x00020b7b,
- 0x0400001b, 0x592c0207, 0x4936600a, 0x492e6009,
- 0x4a026407, 0x00000009, 0x497a6016, 0x4a02601c,
- 0x0010cfd1, 0x4932580a, 0x82000d80, 0x000007ff,
- 0x04020003, 0x4a026016, 0x00008000, 0x42027000,
- 0x00000043, 0x0201f800, 0x00020bc1, 0x80000580,
- 0x0401f01f, 0x40000800, 0x58040000, 0x80000540,
- 0x040207fd, 0x492c0800, 0x0401f019, 0x42000000,
- 0x0000002c, 0x0401f015, 0x42000000, 0x00000028,
- 0x0401f012, 0x830c0500, 0x00000003, 0x04000004,
- 0x42000000, 0x00000004, 0x0401f00c, 0x42000000,
- 0x00000029, 0x0401f009, 0x42000000, 0x00000008,
- 0x0401f006, 0x82040580, 0x00000007, 0x040207fb,
- 0x42000000, 0x00000005, 0x80000540, 0x1c01f000,
- 0x492fc857, 0x592e8c07, 0x83440d80, 0x000007fc,
- 0x04000004, 0x83440480, 0x000007f0, 0x0402101b,
- 0x592e4408, 0x0201f800, 0x00105c82, 0x02000800,
- 0x00104a7c, 0x04020015, 0x0201f800, 0x00104a2f,
- 0x04020015, 0x0201f800, 0x00107ef8, 0x0400001f,
- 0x83200400, 0x0010c10d, 0x50024800, 0x4926601c,
- 0x4936600a, 0x492e6009, 0x4a026407, 0x0000000a,
- 0x42027000, 0x00000040, 0x0201f800, 0x00020bc1,
- 0x80000580, 0x0401f010, 0x42000000, 0x00000028,
- 0x0401f00c, 0x0201f800, 0x00104a45, 0x040007fb,
- 0x830c0d00, 0x00000003, 0x04000004, 0x42000000,
- 0x00000004, 0x0401f003, 0x42000000, 0x00000029,
- 0x80000540, 0x1c01f000, 0x42000000, 0x0000002c,
- 0x0401f7fc, 0x492fc857, 0x592e4408, 0x4923c857,
- 0x0201f800, 0x00105c82, 0x592c4208, 0x0400000e,
- 0x42000000, 0x0000000e, 0x59240a00, 0x8c040d00,
- 0x040001b1, 0x82200d00, 0x0000000f, 0x82040d80,
- 0x00000008, 0x040201ac, 0x82200d00, 0x00000030,
- 0x040001a9, 0x592e8c07, 0x4947c857, 0x83440c80,
- 0x00000800, 0x42000000, 0x0000000a, 0x040211a2,
- 0x4823c857, 0x82200500, 0x0000000f, 0x0c01f001,
- 0x00104420, 0x001044ac, 0x001044fd, 0x00104508,
- 0x00104513, 0x0010441c, 0x0010441c, 0x0010441c,
- 0x00104520, 0x00104583, 0x001045a8, 0x0010441c,
- 0x0010441c, 0x0010441c, 0x0010441c, 0x0010441c,
- 0x4803c857, 0x42000000, 0x0000000c, 0x0401f18a,
- 0x592c1009, 0x82081500, 0x00ffffff, 0x59240005,
- 0x80084d80, 0x42000000, 0x00000010, 0x04000182,
- 0x0201f800, 0x001049a9, 0x04000039, 0x4803c857,
+ 0x00000002, 0x0402000a, 0x42006000, 0xffffffff,
+ 0x42006800, 0x00200000, 0x0401f905, 0x42006000,
+ 0xffdfffff, 0x41786800, 0x0401f901, 0x0201f800,
+ 0x001052b7, 0x04000014, 0x0201f800, 0x001052d5,
+ 0x04020011, 0x4a035019, 0x0000aaaa, 0x4c040000,
+ 0x0201f800, 0x00101679, 0x59a80025, 0x82000500,
+ 0xffff0000, 0x80040540, 0x48035025, 0x5c000800,
+ 0x4a03501a, 0x00000000, 0x0201f800, 0x00105204,
+ 0x0401f008, 0x4a035066, 0x00000005, 0x42000000,
+ 0x00000080, 0x0201f800, 0x001015bf, 0x0401ff22,
+ 0x1c01f000, 0x0401f809, 0x42006000, 0xbf7f7fff,
+ 0x41786800, 0x0401f0de, 0x42006000, 0xbf7f7fff,
+ 0x41786800, 0x0401f0da, 0x0201f800, 0x001052d5,
+ 0x04020009, 0x59c40006, 0x82000540, 0x000000f0,
+ 0x48038806, 0x42006000, 0xbfffffff, 0x41786800,
+ 0x0401f8cf, 0x1c01f000, 0x40680800, 0x800408d0,
+ 0x59a8001b, 0x8c000506, 0x04000006, 0x59a80015,
+ 0x82000500, 0x000000ff, 0x80040540, 0x0401f003,
+ 0x82040540, 0x000000f7, 0x480388a7, 0x1c01f000,
+ 0x4807c856, 0x42000000, 0x0010d51c, 0x0201f800,
+ 0x0010c50a, 0x42003000, 0x00000005, 0x4d3c0000,
+ 0x4c180000, 0x42003000, 0x0000000d, 0x42027800,
+ 0x00000002, 0x0401f074, 0x4807c856, 0x42000000,
+ 0x0010d546, 0x0201f800, 0x0010c50a, 0x42003000,
+ 0x00000000, 0x4d3c0000, 0x4c180000, 0x42003000,
+ 0x0000000f, 0x42001800, 0x0000ffff, 0x42002000,
+ 0x00000007, 0x0201f800, 0x00103ac1, 0x5c003000,
+ 0x59240200, 0x84000556, 0x48024a00, 0x4d400000,
+ 0x42028000, 0x0000002a, 0x59240400, 0x8c00050a,
+ 0x02000800, 0x0010b65e, 0x42027800, 0x00000002,
+ 0x0201f800, 0x00102094, 0x5c028000, 0x5c027800,
+ 0x0201f000, 0x00020afe, 0x4807c856, 0x0201f800,
+ 0x0010c664, 0x04000011, 0x4d400000, 0x4d200000,
+ 0x0201f800, 0x0010203c, 0x42028000, 0x00000001,
+ 0x42001800, 0x00000100, 0x42002800, 0x00000003,
+ 0x42000000, 0x00000001, 0x0201f800, 0x00104fae,
+ 0x5c024000, 0x5c028000, 0x42000000, 0x0010d544,
+ 0x0201f800, 0x0010c50a, 0x42003000, 0x00000003,
+ 0x4d3c0000, 0x4c180000, 0x42003000, 0x0000000e,
+ 0x42027800, 0x00000202, 0x0401f02f, 0x4807c856,
+ 0x0201f800, 0x0010c664, 0x04000011, 0x4d400000,
+ 0x4d200000, 0x0201f800, 0x0010203c, 0x42028000,
+ 0x00000001, 0x42001800, 0x00000100, 0x42002800,
+ 0x00000010, 0x42000000, 0x00000001, 0x0201f800,
+ 0x00104fae, 0x5c024000, 0x5c028000, 0x42000000,
+ 0x0010d543, 0x0201f800, 0x0010c50a, 0x42003000,
+ 0x00000004, 0x4d3c0000, 0x4c180000, 0x42003000,
+ 0x00000010, 0x42027800, 0x00000202, 0x0401f00e,
+ 0x4807c856, 0x42000000, 0x0010d486, 0x0201f800,
+ 0x0010c50a, 0x42003000, 0x00000001, 0x4d3c0000,
+ 0x4c180000, 0x42003000, 0x0000000c, 0x42027800,
+ 0x00000002, 0x42001800, 0x0000ffff, 0x42002000,
+ 0x00000007, 0x4d200000, 0x417a4000, 0x0201f800,
+ 0x00103ac1, 0x5c024000, 0x5c003000, 0x4d400000,
+ 0x0201f800, 0x0010bca7, 0x42028000, 0x0000002a,
+ 0x0201f800, 0x001105fb, 0x4c580000, 0x0201f800,
+ 0x0010c625, 0x42000800, 0x0010d5ef, 0x58040005,
+ 0x82000500, 0x000000ff, 0x48000805, 0x82040c00,
+ 0x0000000b, 0x8058b040, 0x040207f9, 0x5c00b000,
+ 0x5c028000, 0x5c027800, 0x1c01f000, 0x4807c856,
+ 0x04011000, 0x4a03c840, 0x0010d1bb, 0x4a03c842,
+ 0x00000040, 0x40000000, 0x040117ff, 0x42007800,
+ 0x0010d1bb, 0x46007800, 0x00000011, 0x803c7800,
+ 0x4a007800, 0x220000ef, 0x4a007801, 0x000000ef,
+ 0x4a007802, 0x01380000, 0x4a007803, 0x00000000,
+ 0x4a007804, 0xffffffff, 0x4a007805, 0x00000000,
+ 0x1c01f000, 0x40686000, 0x406c6800, 0x59c400a3,
+ 0x80300500, 0x80340540, 0x480388a3, 0x1c01f000,
+ 0x40686000, 0x4833c857, 0x59c400a3, 0x80300540,
+ 0x480388a3, 0x80300580, 0x480388a3, 0x1c01f000,
+ 0x4803c856, 0x04000004, 0x4a03506e, 0x00000001,
+ 0x0401f002, 0x497b506e, 0x1c01f000, 0x59c80002,
+ 0x80000540, 0x0400000a, 0x80000040, 0x04000008,
+ 0x4a039005, 0x00000140, 0x42000000, 0x0000000c,
+ 0x80000040, 0x040207ff, 0x0401f7f5, 0x1c01f000,
+ 0x4c5c0000, 0x4c600000, 0x59c4b805, 0x485fc856,
+ 0x8c5cbd3a, 0x04020005, 0x42000000, 0x0010d484,
+ 0x0201f800, 0x0010c50a, 0x4a038805, 0x20000000,
+ 0x0201f800, 0x00101aab, 0x4000c000, 0x0201f800,
+ 0x001019d6, 0x4a038805, 0x04000000, 0x5c00c000,
+ 0x5c00b800, 0x1c01f000, 0x497a6a00, 0x4a026c00,
+ 0x00000707, 0x497a6801, 0x497a6808, 0x497a6809,
+ 0x497a6806, 0x497a6807, 0x497a6c0b, 0x497a680c,
+ 0x59240400, 0x8c00050a, 0x04000006, 0x5934080f,
+ 0x59340010, 0x80040540, 0x02020800, 0x0010032f,
+ 0x4a026a04, 0x00000100, 0x497a6a03, 0x59340402,
+ 0x82000500, 0x000000ff, 0x48026c02, 0x497a6c04,
+ 0x497a6a05, 0x497a6c05, 0x497a6811, 0x4d2c0000,
+ 0x5934000d, 0x49466c03, 0x80025d40, 0x04000004,
+ 0x0201f800, 0x001005b3, 0x497a680d, 0x5c025800,
+ 0x59a8007e, 0x8c000502, 0x42000000, 0x00000010,
+ 0x04020002, 0x599c0401, 0x48026a0b, 0x599c0208,
+ 0x48026c12, 0x4a02680a, 0x00006000, 0x0201f000,
+ 0x00104e7c, 0x42000000, 0x00000005, 0x80000d80,
+ 0x0401f02c, 0x0201f800, 0x00104b9e, 0x04020017,
+ 0x59a80221, 0x8c00050a, 0x04020010, 0x59340212,
+ 0x82000500, 0x0000ff00, 0x4803c857, 0x0400000b,
+ 0x59340a00, 0x8c040d1e, 0x02000000, 0x000202d1,
+ 0x42000000, 0x00000029, 0x42000800, 0x00001000,
+ 0x492fc857, 0x0401f017, 0x492fc857, 0x42000000,
+ 0x00000028, 0x0401f011, 0x8d0e1d02, 0x04020003,
+ 0x8d0e1d00, 0x04000004, 0x42000000, 0x00000004,
+ 0x0401f00a, 0x42000000, 0x00000029, 0x59340a00,
+ 0x8c040d1e, 0x04000005, 0x492fc857, 0x42000800,
+ 0x00001000, 0x0401f003, 0x492fc857, 0x80000d80,
+ 0x4803c857, 0x80028540, 0x1c01f000, 0x490fc857,
+ 0x8d0e1d00, 0x040207ed, 0x0201f800, 0x00104b75,
+ 0x040207e6, 0x59340200, 0x8c00050e, 0x040007e3,
+ 0x0201f000, 0x000202d1, 0x4d480000, 0x4d4c0000,
+ 0x592e9009, 0x592e980a, 0x0201f800, 0x00104a1f,
+ 0x5c029800, 0x5c029000, 0x040007bb, 0x0201f000,
+ 0x000202d5, 0x592c0207, 0x492fc857, 0x82000d80,
+ 0x000007ff, 0x04020006, 0x4a025c0b, 0x00000030,
+ 0x42026800, 0x0010d191, 0x0401f021, 0x82000c80,
+ 0x000007f0, 0x04021047, 0x81ac0400, 0x50000000,
+ 0x80026d40, 0x0400003a, 0x0201f800, 0x00104aa3,
+ 0x0402003a, 0x592c040b, 0x8c00050a, 0x04020014,
+ 0x592e600a, 0x83300480, 0x00111d44, 0x0400103c,
+ 0x41580000, 0x81300480, 0x04021039, 0x59300c07,
+ 0x82040580, 0x00000009, 0x04020038, 0x4a025a07,
+ 0x00000000, 0x497a5800, 0x59300009, 0x80000540,
+ 0x0402001a, 0x492e6009, 0x0401f012, 0x0201f800,
+ 0x00020adc, 0x0400001b, 0x592c0207, 0x4936600a,
+ 0x492e6009, 0x4a026407, 0x00000009, 0x497a6016,
+ 0x4a02601c, 0x0010d5ef, 0x4932580a, 0x82000d80,
+ 0x000007ff, 0x04020003, 0x4a026016, 0x00008000,
+ 0x42027000, 0x00000043, 0x0201f800, 0x00020b22,
+ 0x80000580, 0x0401f01f, 0x40000800, 0x58040000,
+ 0x80000540, 0x040207fd, 0x492c0800, 0x0401f019,
+ 0x42000000, 0x0000002c, 0x0401f015, 0x42000000,
+ 0x00000028, 0x0401f012, 0x830c0500, 0x00000003,
+ 0x04000004, 0x42000000, 0x00000004, 0x0401f00c,
+ 0x42000000, 0x00000029, 0x0401f009, 0x42000000,
+ 0x00000008, 0x0401f006, 0x82040580, 0x00000007,
+ 0x040207fb, 0x42000000, 0x00000005, 0x80000540,
+ 0x1c01f000, 0x492fc857, 0x592e8c07, 0x83440d80,
+ 0x000007fc, 0x04000004, 0x83440480, 0x000007f0,
+ 0x0402101b, 0x592e4408, 0x0201f800, 0x00105f30,
+ 0x02000800, 0x00104bd5, 0x04020015, 0x0201f800,
+ 0x00104b88, 0x04020015, 0x0201f800, 0x00108297,
+ 0x0400001f, 0x83200400, 0x0010c6ac, 0x50024800,
+ 0x4926601c, 0x4936600a, 0x492e6009, 0x4a026407,
+ 0x0000000a, 0x42027000, 0x00000040, 0x0201f800,
+ 0x00020b22, 0x80000580, 0x0401f010, 0x42000000,
+ 0x00000028, 0x0401f00c, 0x0201f800, 0x00104b9e,
+ 0x040007fb, 0x830c0d00, 0x00000003, 0x04000004,
+ 0x42000000, 0x00000004, 0x0401f003, 0x42000000,
+ 0x00000029, 0x80000540, 0x1c01f000, 0x42000000,
+ 0x0000002c, 0x0401f7fc, 0x492fc857, 0x592e4408,
+ 0x4923c857, 0x0201f800, 0x00105f30, 0x592c4208,
+ 0x0400000e, 0x42000000, 0x0000000e, 0x59240a00,
+ 0x8c040d00, 0x040001ec, 0x82200d00, 0x0000000f,
+ 0x82040d80, 0x00000008, 0x040201e7, 0x82200d00,
+ 0x00000030, 0x040001e4, 0x592e8c07, 0x4947c857,
+ 0x83440c80, 0x00000800, 0x42000000, 0x0000000a,
+ 0x040211dd, 0x4823c857, 0x82200500, 0x0000000f,
+ 0x0c01f001, 0x00104531, 0x001045dc, 0x0010463a,
+ 0x00104645, 0x00104650, 0x0010452d, 0x0010452d,
+ 0x0010452d, 0x0010465d, 0x001046cf, 0x001046f4,
+ 0x0010452d, 0x0010452d, 0x0010452d, 0x0010452d,
+ 0x0010452d, 0x4803c857, 0x42000000, 0x0000000c,
+ 0x0401f1c5, 0x592c1009, 0x82081500, 0x00ffffff,
+ 0x0201f800, 0x00104aff, 0x04000039, 0x4803c857,
0x82004d80, 0x0000001d, 0x0402001a, 0x0201f800,
- 0x00020864, 0x59340405, 0x4c000000, 0x0201f800,
- 0x00104a1c, 0x5c000000, 0x04000004, 0x8c20450a,
+ 0x00105bbe, 0x59340405, 0x4c000000, 0x0201f800,
+ 0x00104b75, 0x5c000000, 0x04000004, 0x8c20450a,
0x0400002b, 0x80000580, 0x44002800, 0x59340008,
0x48002802, 0x59340009, 0x48002801, 0x59340006,
0x48002804, 0x59340007, 0x48002803, 0x4200b000,
- 0x00000005, 0x0201f800, 0x00109f12, 0x0401f193,
+ 0x00000005, 0x0201f800, 0x0010a2d5, 0x0401f1d3,
0x4803c857, 0x82004d80, 0x0000001a, 0x04020003,
- 0x40101000, 0x0401f163, 0x4803c857, 0x82004d80,
- 0x0000001b, 0x04020003, 0x40181000, 0x0401f15d,
- 0x4803c857, 0x82004d80, 0x0000001f, 0x0400015e,
- 0x82004d80, 0x0000001c, 0x0400015b, 0x82004d80,
- 0x00000019, 0x42000000, 0x0000000a, 0x0400014a,
- 0x42000000, 0x0000000a, 0x04020161, 0x59a80070,
- 0x8c000502, 0x0400001b, 0x0201f800, 0x00104a1c,
+ 0x40101000, 0x0401f1a3, 0x4803c857, 0x82004d80,
+ 0x0000001b, 0x04020003, 0x40181000, 0x0401f19d,
+ 0x4803c857, 0x82004d80, 0x0000001f, 0x0400019e,
+ 0x82004d80, 0x0000001c, 0x0400019b, 0x82004d80,
+ 0x00000019, 0x42000000, 0x0000000a, 0x0400018a,
+ 0x42000000, 0x0000000a, 0x040201a1, 0x59a8007e,
+ 0x8c000502, 0x0400001b, 0x0201f800, 0x00104b75,
0x04000018, 0x59340212, 0x82000500, 0x0000ff00,
0x42001000, 0x00000010, 0x0402000c, 0x42001000,
- 0x00000008, 0x59a8021b, 0x8c000506, 0x04020009,
+ 0x00000008, 0x59a80221, 0x8c000506, 0x04020009,
0x59340002, 0x82000500, 0x00ff0000, 0x82000580,
- 0x00ff0000, 0x04000007, 0x0201f800, 0x00104d1c,
- 0x42000000, 0x0000001c, 0x40181000, 0x04020131,
- 0x0201f800, 0x00107ef8, 0x0400013b, 0x4926601c,
+ 0x00ff0000, 0x04000007, 0x0201f800, 0x00104e87,
+ 0x42000000, 0x0000001c, 0x40181000, 0x04020171,
+ 0x0201f800, 0x00108297, 0x0400017b, 0x4926601c,
0x4936600a, 0x492e6009, 0x4a026407, 0x00000001,
0x8c20450a, 0x04000004, 0x592c0405, 0x8400055c,
0x48025c05, 0x4c200000, 0x4d3c0000, 0x42027800,
- 0x00001800, 0x0201f800, 0x0010ff80, 0x5c027800,
- 0x5c004000, 0x8c204512, 0x0400000b, 0x599c0018,
+ 0x00001800, 0x0201f800, 0x00110684, 0x5c027800,
+ 0x5c004000, 0x592c1009, 0x82081500, 0x00ffffff,
+ 0x59240005, 0x80081d80, 0x0402001f, 0x4a026c00,
+ 0x00000404, 0x497a6a05, 0x497a6c05, 0x8c20450a,
+ 0x04020007, 0x4a026c00, 0x00000606, 0x4a026a05,
+ 0x00002000, 0x4a026c05, 0x00000022, 0x59240001,
+ 0x59240802, 0x48026806, 0x48066807, 0x59240003,
+ 0x59240804, 0x48026808, 0x48066809, 0x59a80004,
+ 0x48026a04, 0x0201f800, 0x00104eaa, 0x0201f800,
+ 0x00020afe, 0x592c0405, 0x8400051c, 0x48025c05,
+ 0x0401f162, 0x8c204512, 0x0400000b, 0x599c0018,
0x8c000518, 0x04000008, 0x592c000a, 0x82000500,
0x00000380, 0x5934080a, 0x80040d40, 0x84040d54,
- 0x4806680a, 0x417a7800, 0x0401f93d, 0x42000800,
- 0x00000003, 0x0401f945, 0x42027000, 0x00000002,
- 0x0201f800, 0x00020bc1, 0x80000580, 0x0401f133,
- 0x0201f800, 0x00104a7c, 0x04020115, 0x0201f800,
- 0x00104a22, 0x0400000c, 0x0201f800, 0x00104a1c,
- 0x04020115, 0x4c600000, 0x4178c000, 0x42027800,
- 0x00001800, 0x417a6000, 0x0201f800, 0x00101ce3,
- 0x5c00c000, 0x59a80070, 0x8c000502, 0x0400001b,
- 0x0201f800, 0x00104a1c, 0x04000018, 0x59340212,
- 0x82000500, 0x0000ff00, 0x42001000, 0x00000010,
- 0x0402000c, 0x42001000, 0x00000008, 0x59a8021b,
- 0x8c000506, 0x04020009, 0x59340002, 0x82000500,
- 0x00ff0000, 0x82000580, 0x00ff0000, 0x04000007,
- 0x0201f800, 0x00104d1c, 0x42000000, 0x0000001c,
- 0x40181000, 0x040200d7, 0x0201f800, 0x00107ef8,
- 0x040000e1, 0x5934080a, 0x8c204512, 0x0400000c,
- 0x599c0018, 0x8c000518, 0x04000009, 0x592c000a,
- 0x82000500, 0x00000380, 0x82041500, 0xfffffc7f,
- 0x80080d40, 0x84040d54, 0x0401f002, 0x84040d14,
- 0x4806680a, 0x4926601c, 0x4936600a, 0x492e6009,
- 0x4a026407, 0x00000001, 0x417a7800, 0x0401f8ec,
- 0x42000800, 0x00000005, 0x0401f8f4, 0x42027000,
- 0x00000003, 0x0201f800, 0x00020bc1, 0x80000580,
- 0x0401f0e2, 0x0201f800, 0x00104a7c, 0x040200c4,
- 0x0201f800, 0x00104a38, 0x040200c7, 0x0201f800,
- 0x00109e0e, 0x040000b8, 0x80000580, 0x0401f0d7,
- 0x0201f800, 0x00104a7c, 0x040200b9, 0x0201f800,
- 0x00104a38, 0x040200bc, 0x0201f800, 0x00109969,
- 0x040000ad, 0x80000580, 0x0401f0cc, 0x0201f800,
- 0x00104a7c, 0x040200ae, 0x83444d80, 0x000007fe,
- 0x42000000, 0x0000000a, 0x0402008f, 0x0201f800,
- 0x00109e27, 0x040000a0, 0x80000580, 0x0401f0bf,
- 0x82200500, 0x00000070, 0x04020005, 0x8c20450e,
- 0x42000000, 0x0000000c, 0x04020083, 0x8c20450a,
- 0x0400000e, 0x4d3c0000, 0x42027800, 0x00005000,
- 0x8c20450e, 0x04020003, 0x853e7d56, 0x853e7d1c,
- 0x82200500, 0x000004a0, 0x0201f800, 0x001049de,
- 0x5c027800, 0x0401f0a5, 0x8c204508, 0x04020027,
- 0x592c1009, 0x82081500, 0x00ffffff, 0x59240005,
- 0x80084d80, 0x42000000, 0x00000010, 0x0400006a,
- 0x0201f800, 0x001049a9, 0x0400002f, 0x4803c857,
- 0x82004d80, 0x0000001a, 0x04020003, 0x40101000,
- 0x0401f068, 0x4803c857, 0x82004d80, 0x0000001b,
- 0x04020003, 0x40181000, 0x0401f062, 0x4803c857,
- 0x82004d80, 0x0000001f, 0x04000063, 0x82004d80,
- 0x0000001c, 0x04000060, 0x82004d80, 0x00000019,
- 0x42000000, 0x0000000a, 0x0400004f, 0x42000000,
- 0x0000000a, 0x0401f066, 0x0201f800, 0x00104a7c,
- 0x04020063, 0x4d3c0000, 0x42027800, 0x00005000,
- 0x8c20450e, 0x04020003, 0x853e7d56, 0x853e7d1c,
- 0x82200500, 0x00000090, 0x0201f800, 0x001049c6,
- 0x5c027800, 0x42000000, 0x0000000a, 0x0402003a,
- 0x0401f06a, 0x836c0580, 0x00000003, 0x42000800,
- 0x00000007, 0x04020006, 0x0201f800, 0x00109db4,
- 0x04000007, 0x80000580, 0x0401f064, 0x0201f800,
- 0x00104a5e, 0x04000059, 0x0401f05c, 0x0201f800,
- 0x00104a5e, 0x0400003c, 0x0401f058, 0x0201f800,
- 0x00104a7c, 0x0402003e, 0x836c0580, 0x00000003,
+ 0x4806680a, 0x417a7800, 0x0401f959, 0x42000800,
+ 0x00000003, 0x0401f961, 0x42027000, 0x00000002,
+ 0x0201f800, 0x00020b22, 0x80000580, 0x0401f14f,
+ 0x0201f800, 0x00104bd5, 0x04020131, 0x0201f800,
+ 0x00104b7b, 0x0400000c, 0x0201f800, 0x00104b75,
+ 0x04020131, 0x4c600000, 0x4178c000, 0x42027800,
+ 0x00001800, 0x417a6000, 0x0201f800, 0x00101d69,
+ 0x5c00c000, 0x592c1009, 0x82081500, 0x00ffffff,
+ 0x59240005, 0x80084d80, 0x04020008, 0x4a026c00,
+ 0x00000606, 0x4a026a05, 0x00002000, 0x4a026c05,
+ 0x00000022, 0x0401f12d, 0x59a8007e, 0x8c000502,
+ 0x0400001b, 0x0201f800, 0x00104b75, 0x04000018,
+ 0x59340212, 0x82000500, 0x0000ff00, 0x42001000,
+ 0x00000010, 0x0402000c, 0x42001000, 0x00000008,
+ 0x59a80221, 0x8c000506, 0x04020009, 0x59340002,
+ 0x82000500, 0x00ff0000, 0x82000580, 0x00ff0000,
+ 0x04000007, 0x0201f800, 0x00104e87, 0x42000000,
+ 0x0000001c, 0x40181000, 0x040200e6, 0x0201f800,
+ 0x00108297, 0x040000f0, 0x5934080a, 0x8c204512,
+ 0x0400000c, 0x599c0018, 0x8c000518, 0x04000009,
+ 0x592c000a, 0x82000500, 0x00000380, 0x82041500,
+ 0xfffffc7f, 0x80080d40, 0x84040d54, 0x0401f002,
+ 0x84040d14, 0x4806680a, 0x4926601c, 0x4936600a,
+ 0x492e6009, 0x4a026407, 0x00000001, 0x417a7800,
+ 0x0401f8fb, 0x42000800, 0x00000005, 0x0401f903,
+ 0x42027000, 0x00000003, 0x0201f800, 0x00020b22,
+ 0x80000580, 0x0401f0f1, 0x0201f800, 0x00104bd5,
+ 0x040200d3, 0x0201f800, 0x00104b91, 0x040200d6,
+ 0x0201f800, 0x0010a1c4, 0x040000c7, 0x80000580,
+ 0x0401f0e6, 0x0201f800, 0x00104bd5, 0x040200c8,
+ 0x0201f800, 0x00104b91, 0x040200cb, 0x0201f800,
+ 0x00109d19, 0x040000bc, 0x80000580, 0x0401f0db,
+ 0x0201f800, 0x00104bd5, 0x040200bd, 0x83444d80,
+ 0x000007fe, 0x42000000, 0x0000000a, 0x0402009e,
+ 0x0201f800, 0x0010a1dd, 0x040000af, 0x80000580,
+ 0x0401f0ce, 0x82200500, 0x00000070, 0x04020005,
+ 0x8c20450e, 0x42000000, 0x0000000c, 0x04020092,
+ 0x8c20450a, 0x04000011, 0x4d3c0000, 0x42027800,
+ 0x00005000, 0x8c20450e, 0x04020003, 0x853e7d56,
+ 0x853e7d1c, 0x82200500, 0x000004a0, 0x42026000,
+ 0x00111cec, 0x492e6009, 0x0201f800, 0x00104b37,
+ 0x5c027800, 0x0401f0b1, 0x8c204508, 0x04020022,
+ 0x592c1009, 0x82081500, 0x00ffffff, 0x0201f800,
+ 0x00104aff, 0x04000032, 0x4803c857, 0x82004d80,
+ 0x0000001a, 0x04020003, 0x40101000, 0x0401f079,
+ 0x4803c857, 0x82004d80, 0x0000001b, 0x04020003,
+ 0x40181000, 0x0401f073, 0x4803c857, 0x82004d80,
+ 0x0000001f, 0x04000074, 0x82004d80, 0x0000001c,
+ 0x04000071, 0x82004d80, 0x00000019, 0x42000000,
+ 0x0000000a, 0x04000060, 0x42000000, 0x0000000a,
+ 0x0401f077, 0x0201f800, 0x00104bd5, 0x04020074,
+ 0x4d3c0000, 0x42027800, 0x00005000, 0x8c20450e,
+ 0x04020003, 0x853e7d56, 0x853e7d1c, 0x82200500,
+ 0x00000090, 0x42026000, 0x00111cec, 0x492e6009,
+ 0x0201f800, 0x00104b1c, 0x5c027800, 0x42000000,
+ 0x0000000a, 0x04020048, 0x0401f078, 0x592c1009,
+ 0x82081500, 0x00ffffff, 0x59240005, 0x80084d80,
+ 0x04020003, 0x84204548, 0x0401f7e6, 0x836c0580,
+ 0x00000003, 0x42000800, 0x00000007, 0x04020006,
+ 0x0201f800, 0x0010a16a, 0x0400000a, 0x80000580,
+ 0x0401f06a, 0x42026000, 0x00111cec, 0x492e6009,
+ 0x0201f800, 0x00104bb7, 0x0400005c, 0x0401f05f,
+ 0x42026000, 0x00111cec, 0x492e6009, 0x0201f800,
+ 0x00104bb7, 0x0400003c, 0x0401f058, 0x0201f800,
+ 0x00104bd5, 0x0402003e, 0x836c0580, 0x00000003,
0x04020048, 0x8c204508, 0x0400000a, 0x4c600000,
0x4178c000, 0x42027800, 0x00001800, 0x417a6000,
- 0x0201f800, 0x00101ce3, 0x5c00c000, 0x0401f047,
- 0x0201f800, 0x00104a22, 0x0400000c, 0x0201f800,
- 0x00104a1c, 0x04020030, 0x4c600000, 0x4178c000,
+ 0x0201f800, 0x00101d69, 0x5c00c000, 0x0401f047,
+ 0x0201f800, 0x00104b7b, 0x0400000c, 0x0201f800,
+ 0x00104b75, 0x04020030, 0x4c600000, 0x4178c000,
0x42027800, 0x00001800, 0x417a6000, 0x0201f800,
- 0x00101ce3, 0x5c00c000, 0x480bc856, 0x0201f800,
- 0x00109c05, 0x04000018, 0x80000580, 0x0401f037,
+ 0x00101d69, 0x5c00c000, 0x480bc856, 0x0201f800,
+ 0x00109fb7, 0x04000018, 0x80000580, 0x0401f037,
0x0401f7db, 0x480bc857, 0x42000800, 0x00000019,
0x40001000, 0x4200b000, 0x00000002, 0x0401f00a,
0x480bc857, 0x40000800, 0x4200b000, 0x00000002,
@@ -19076,7 +4588,7 @@ static const uint32_t isp_2400_multi_risc_code[] = {
0x84081540, 0x0401f002, 0x84081500, 0x480a6a00,
0x1c01f000, 0x40680800, 0x5932680a, 0x5c000000,
0x4c000000, 0x4803c857, 0x4937c857, 0x83340580,
- 0x0010e23c, 0x04000030, 0x82040580, 0x00000006,
+ 0x0010e85a, 0x04000030, 0x82040580, 0x00000006,
0x04020004, 0x42000000, 0x00000606, 0x0401f021,
0x82040580, 0x00000004, 0x04020004, 0x42000000,
0x00000404, 0x0401f01b, 0x82040580, 0x00000007,
@@ -19085,26 +4597,26 @@ static const uint32_t isp_2400_multi_risc_code[] = {
0x82040580, 0x00000005, 0x42000000, 0x00000405,
0x0400000c, 0x82040580, 0x00000009, 0x42000000,
0x00000409, 0x04000007, 0x82040580, 0x0000000b,
- 0x42000000, 0x0000070b, 0x02020800, 0x0010032e,
+ 0x42000000, 0x0000070b, 0x02020800, 0x0010032f,
0x4803c857, 0x48026c00, 0x82040d80, 0x00000006,
0x04020005, 0x59341404, 0x800811c0, 0x02000800,
- 0x0010032e, 0x1c01f000, 0x40683000, 0x0401f805,
+ 0x0010032f, 0x1c01f000, 0x40683000, 0x0401f805,
0x41358800, 0x04000002, 0x41798800, 0x1c01f000,
0x5c000000, 0x4c000000, 0x4803c857, 0x4947c857,
0x481bc857, 0x83440480, 0x00000800, 0x04021057,
- 0x83200400, 0x0010c10d, 0x50024800, 0x59240009,
+ 0x83200400, 0x0010c6ac, 0x50024800, 0x59240009,
0x83441480, 0x000007f0, 0x04001003, 0x80081400,
- 0x0401f003, 0x83441400, 0x0010c280, 0x50080000,
+ 0x0401f003, 0x83441400, 0x0010c880, 0x50080000,
0x80026d40, 0x04000005, 0x59340013, 0x80000130,
0x81200580, 0x04000018, 0x4c180000, 0x4d2c0000,
- 0x0201f800, 0x0010056e, 0x412e6800, 0x5c025800,
+ 0x0201f800, 0x00100584, 0x412e6800, 0x5c025800,
0x5c003000, 0x0400003d, 0x59242005, 0x812000f0,
0x80102540, 0x48126813, 0x59242207, 0x80102000,
0x48124a07, 0x45341000, 0x497a680d, 0x497a6810,
- 0x497a680f, 0x497a680e, 0x4c180000, 0x0401fc86,
+ 0x497a680f, 0x497a680e, 0x4c180000, 0x0401fc4b,
0x5c003000, 0x59340a12, 0x4c040000, 0x0201f800,
- 0x001050f7, 0x5c000800, 0x04000009, 0x82180500,
- 0x00ffff00, 0x04000008, 0x59a8100f, 0x82081500,
+ 0x001052aa, 0x5c000800, 0x04000009, 0x82180500,
+ 0x00ffff00, 0x04000008, 0x59a81015, 0x82081500,
0x00ffff00, 0x80080580, 0x04000003, 0x80000580,
0x0401f004, 0x82180500, 0x000000ff, 0x800000d0,
0x80040d80, 0x04000003, 0x4803c857, 0x48026a12,
@@ -19115,467 +4627,478 @@ static const uint32_t isp_2400_multi_risc_code[] = {
0x80180580, 0x04000003, 0x481bc857, 0x481a6802,
0x80000580, 0x1c01f000, 0x4803c856, 0x82000540,
0x00000001, 0x0401f7fc, 0x4947c857, 0x83440480,
- 0x00000800, 0x04021019, 0x83200400, 0x0010c10d,
+ 0x00000800, 0x04021019, 0x83200400, 0x0010c6ac,
0x50024800, 0x59240009, 0x83441480, 0x000007f0,
0x04001003, 0x80081400, 0x0401f003, 0x83441400,
- 0x0010c280, 0x50080000, 0x80026d40, 0x0400000a,
- 0x0401fb80, 0x04020009, 0x8d0e1d02, 0x04000004,
+ 0x0010c880, 0x50080000, 0x80026d40, 0x0400000a,
+ 0x0401fb8d, 0x04020009, 0x8d0e1d02, 0x04000004,
0x59340200, 0x8c00050e, 0x04000004, 0x82000540,
0x00000001, 0x1c01f000, 0x80000580, 0x0401f7fe,
0x5c000000, 0x4c000000, 0x4803c857, 0x4947c857,
0x0401f807, 0x42018800, 0x00000001, 0x04000003,
0x42018800, 0x00000000, 0x1c01f000, 0x4d2c0000,
- 0x4d300000, 0x83440480, 0x00000800, 0x04021024,
- 0x83441400, 0x0010c280, 0x50080000, 0x80026d40,
- 0x0400001b, 0x45781000, 0x5934000d, 0x80025d40,
- 0x02020800, 0x0010059d, 0x59366011, 0x813261c0,
- 0x0400000e, 0x4c640000, 0x5930c800, 0x59325809,
- 0x0201f800, 0x0010989f, 0x02020800, 0x0010059d,
- 0x0201f800, 0x00020b9d, 0x82666540, 0x00000000,
- 0x040207f6, 0x5c00c800, 0x0201f800, 0x00104d11,
- 0x41365800, 0x0201f800, 0x00100595, 0x80000580,
- 0x5c026000, 0x5c025800, 0x1c01f000, 0x82000540,
- 0x00000001, 0x0401f7fb, 0x0201f800, 0x0002034c,
- 0x41358800, 0x04000002, 0x41798800, 0x1c01f000,
- 0x4c580000, 0x59cc0001, 0x4937c857, 0x82000500,
- 0x00ffffff, 0x48026802, 0x497a6c01, 0x497a6a01,
- 0x59340200, 0x82000500, 0xffffdffd, 0x48026a00,
- 0x4004b000, 0x0201f800, 0x001050f7, 0x0402001c,
- 0x59340403, 0x82000580, 0x000007fe, 0x04000005,
- 0x59a8021b, 0x8c00050a, 0x04020015, 0x0401f008,
- 0x59cc0408, 0x8c000518, 0x04000011, 0x59cc0009,
- 0x48035028, 0x59cc000a, 0x48035029, 0x59a80878,
- 0x8c040d3e, 0x0402000a, 0x8058b1c0, 0x04020008,
- 0x59cc0207, 0x80000540, 0x04020003, 0x42000000,
- 0x00000001, 0x48038893, 0x48035012, 0x59cc0a09,
- 0x82040d00, 0x00000010, 0x59cc0408, 0x82000500,
- 0x00000020, 0x04000005, 0x84040d40, 0x59a8121b,
- 0x8408155a, 0x480b521b, 0x5934000a, 0x82000500,
- 0xffffffee, 0x80040540, 0x4802680a, 0x83cca400,
- 0x0000000b, 0x8334ac00, 0x00000006, 0x4200b000,
- 0x00000002, 0x0201f800, 0x0010c086, 0x83cca400,
- 0x0000000d, 0x8334ac00, 0x00000008, 0x4200b000,
- 0x00000002, 0x0201f800, 0x0010c086, 0x59cc0a18,
- 0x59a80006, 0x8c00050c, 0x04020015, 0x82040480,
- 0x00000800, 0x0402100c, 0x82040480, 0x00000400,
- 0x04001004, 0x42000800, 0x00000400, 0x0401f006,
- 0x82040480, 0x00000200, 0x04001003, 0x42000800,
- 0x00000200, 0x42001000, 0x0010cb9b, 0x58080201,
- 0x80041480, 0x04001002, 0x40000800, 0x48066a04,
- 0x59340403, 0x82000580, 0x000007fe, 0x04020003,
- 0x59cc0a08, 0x48066a04, 0x0201f800, 0x00104d3f,
- 0x5c00b000, 0x1c01f000, 0x59a8021b, 0x4937c857,
- 0x8c000508, 0x04000008, 0x84000556, 0x4803c857,
- 0x4803521b, 0x42001000, 0x00110987, 0x0201f800,
- 0x001064fe, 0x59cc0207, 0x4803c857, 0x48026a05,
- 0x59cc020a, 0x4803c857, 0x48026c05, 0x59341200,
- 0x599c0818, 0x5934180a, 0x4807c857, 0x480bc857,
- 0x480fc857, 0x59cc2006, 0x82102500, 0xff000000,
- 0x82102580, 0x02000000, 0x04000007, 0x8c00050e,
- 0x04000009, 0x8c0c1d14, 0x04000003, 0x8c0c1d0e,
- 0x04000005, 0x8c040d18, 0x04000003, 0x8408154a,
- 0x0401f002, 0x8408150a, 0x8c000510, 0x04000009,
- 0x8c0c1d14, 0x04000003, 0x8c0c1d10, 0x04000005,
- 0x8c040d18, 0x04000003, 0x8408154e, 0x0401f002,
- 0x8408150e, 0x8c000512, 0x04000009, 0x8c0c1d14,
- 0x04000003, 0x8c0c1d12, 0x04000005, 0x8c040d18,
- 0x04000003, 0x8408155c, 0x0401f002, 0x8408151c,
- 0x480a6a00, 0x1c01f000, 0x4803c856, 0x4c5c0000,
- 0x4d2c0000, 0x4c580000, 0x5934000d, 0x80025d40,
- 0x04000029, 0x592c0003, 0x82000480, 0x00000008,
- 0x0400100b, 0x412cb800, 0x592c0001, 0x80025d40,
- 0x040207f9, 0x0201f800, 0x00100583, 0x04000037,
- 0x492fc857, 0x492cb801, 0x0401f020, 0x832c0c00,
- 0x00000004, 0x4200b000, 0x00000008, 0x50040000,
- 0x82000580, 0xffffffff, 0x04020006, 0x80041000,
- 0x50080000, 0x82000580, 0xffffffff, 0x04000007,
- 0x82040c00, 0x00000002, 0x8058b040, 0x040207f4,
- 0x0201f800, 0x0010032e, 0x45480800, 0x454c1000,
- 0x592c1803, 0x800c1800, 0x480e5803, 0x480fc857,
- 0x0401f014, 0x0201f800, 0x00100583, 0x04000017,
- 0x492fc857, 0x492e680d, 0x497a5802, 0x4a025803,
- 0x00000001, 0x494a5804, 0x494e5805, 0x832c0c00,
- 0x00000006, 0x4200b000, 0x0000000e, 0x46000800,
- 0xffffffff, 0x80040800, 0x8058b040, 0x040207fc,
- 0x82000540, 0x00000001, 0x5c00b000, 0x5c025800,
- 0x5c00b800, 0x1c01f000, 0x80000580, 0x0401f7fb,
- 0x4803c856, 0x4d3c0000, 0x4d2c0000, 0x5934000d,
- 0x80025d40, 0x0400001f, 0x592c0002, 0x80000540,
- 0x0402001f, 0x412e7800, 0x0401f8e3, 0x0402001c,
- 0x46000800, 0xffffffff, 0x46001000, 0xffffffff,
- 0x4813c857, 0x480fc857, 0x580c0003, 0x82000c80,
- 0x00000002, 0x04021014, 0x480fc857, 0x400c0000,
- 0x812c0580, 0x04020004, 0x580c0001, 0x4802680d,
- 0x0401f003, 0x580c0001, 0x48002001, 0x400e5800,
- 0x0201f800, 0x00100594, 0x82000540, 0x00000001,
- 0x5c025800, 0x5c027800, 0x1c01f000, 0x80000580,
- 0x0401f7fc, 0x80000040, 0x48001803, 0x4803c857,
- 0x0401f7f6, 0x0201f800, 0x0002011a, 0x59300008,
- 0x8400054e, 0x48026008, 0x592c1a05, 0x820c1d00,
- 0x000000ff, 0x820c0580, 0x00000048, 0x0400001a,
- 0x0201f000, 0x0002039c, 0x8c000500, 0x02020800,
- 0x00020196, 0x4a026203, 0x00000002, 0x592c1a05,
- 0x820c1d00, 0x000000ff, 0x820c0580, 0x00000018,
- 0x02000000, 0x0002039c, 0x820c0580, 0x00000048,
- 0x04000009, 0x820c0580, 0x00000068, 0x02020000,
- 0x0002039c, 0x42000000, 0x80080084, 0x0201f000,
- 0x0002039e, 0x42000800, 0x80000804, 0x0201f800,
- 0x00020b30, 0x0201f000, 0x000203a5, 0x4a025a07,
- 0x00000008, 0x0201f000, 0x000203ef, 0x4a025a07,
- 0x00000029, 0x0201f000, 0x000203ef, 0x4a025a07,
- 0x0000002a, 0x0201f000, 0x000203ef, 0x4a025a07,
- 0x00000028, 0x0201f000, 0x000203ef, 0x4a025a07,
- 0x0000000e, 0x0201f000, 0x000203ef, 0x4943c857,
- 0x4d440000, 0x4d340000, 0x4d2c0000, 0x4c580000,
- 0x4200b000, 0x000007f0, 0x417a8800, 0x0201f800,
- 0x0002034c, 0x04020007, 0x8d3e7d06, 0x04000004,
- 0x59340200, 0x8c00050e, 0x04020002, 0x0401f813,
- 0x81468800, 0x8058b040, 0x040207f5, 0x83440480,
- 0x00000800, 0x04021008, 0x8d3e7d02, 0x04000006,
- 0x42028800, 0x000007f0, 0x4200b000, 0x00000010,
- 0x0401f7eb, 0x5c00b000, 0x5c025800, 0x5c026800,
- 0x5c028800, 0x1c01f000, 0x4d2c0000, 0x4c600000,
- 0x4c5c0000, 0x4178b800, 0x5936580f, 0x812e59c0,
- 0x0400002c, 0x592c0205, 0x82000500, 0x000000ff,
- 0x82000580, 0x00000012, 0x04000023, 0x82000580,
- 0x00000060, 0x04000020, 0x8d3e7d00, 0x04000003,
- 0x0401f847, 0x0402001c, 0x592cc000, 0x497a5800,
- 0x805cb9c0, 0x04020009, 0x59340010, 0x812c0580,
- 0x04020004, 0x497a680f, 0x497a6810, 0x0401f008,
- 0x4862680f, 0x0401f006, 0x4860b800, 0x59340010,
- 0x812c0580, 0x04020002, 0x485e6810, 0x4a025a05,
- 0x00000103, 0x49425a07, 0x497a580a, 0x0201f800,
- 0x00109a5c, 0x0201f800, 0x000203ef, 0x40625800,
- 0x0401f7d7, 0x412cb800, 0x592e5800, 0x0401f7d4,
- 0x5c00b800, 0x5c00c000, 0x5c025800, 0x1c01f000,
- 0x4803c856, 0x41781800, 0x5934000f, 0x80025d40,
- 0x04000019, 0x592c0006, 0x80200580, 0x592c0000,
- 0x04000003, 0x412c1800, 0x0401f7f9, 0x592c0a05,
- 0x82040d00, 0x000000ff, 0x82040d80, 0x00000012,
- 0x040007f9, 0x82040d80, 0x00000060, 0x040007f6,
- 0x497a5800, 0x800c19c0, 0x04000008, 0x48001800,
- 0x80000540, 0x04020004, 0x480e6810, 0x82000540,
- 0x00000001, 0x1c01f000, 0x4802680f, 0x80000540,
- 0x040207fd, 0x497a6810, 0x0401f7f9, 0x592c0009,
- 0x81480580, 0x04020003, 0x592c000a, 0x814c0580,
- 0x1c01f000, 0x4803c856, 0x4c580000, 0x413c1800,
- 0x400c2000, 0x593c0002, 0x80000540, 0x04020018,
- 0x4200b000, 0x00000008, 0x820c0c00, 0x00000004,
- 0x50040000, 0x81480580, 0x04020005, 0x80041000,
- 0x50080000, 0x814c0580, 0x0400000d, 0x82040c00,
- 0x00000002, 0x8058b040, 0x040207f6, 0x400c2000,
- 0x580c0001, 0x80001d40, 0x040207ee, 0x82000540,
- 0x00000001, 0x5c00b000, 0x1c01f000, 0x80000580,
- 0x0401f7fd, 0x4937c857, 0x4c580000, 0x4d2c0000,
- 0x5934000d, 0x80025d40, 0x04020016, 0x0201f800,
- 0x00100583, 0x04000010, 0x492e680d, 0x4a025802,
- 0x00000001, 0x497a5803, 0x832c0c00, 0x00000004,
- 0x4200b000, 0x00000010, 0x46000800, 0xffffffff,
- 0x80040800, 0x8058b040, 0x040207fc, 0x82000540,
- 0x00000001, 0x5c025800, 0x5c00b000, 0x1c01f000,
- 0x4d2c0000, 0x592e5801, 0x0201f800, 0x0010059d,
- 0x5c025800, 0x497a5801, 0x0401f7e9, 0x4d2c0000,
- 0x5936580d, 0x812e59c0, 0x04000007, 0x4937c857,
- 0x497a680d, 0x0201f800, 0x0010059d, 0x82000540,
- 0x00000001, 0x5c025800, 0x1c01f000, 0x59340405,
- 0x4937c857, 0x4803c857, 0x8c000508, 0x1c01f000,
- 0x4933c857, 0x5930380a, 0x581c0200, 0x8400051a,
- 0x48003a00, 0x1c01f000, 0x42026800, 0x0010cb7b,
- 0x497a680e, 0x42028800, 0x000007ff, 0x0201f800,
- 0x001042dd, 0x4937c857, 0x4a026c00, 0x00000606,
- 0x4a026802, 0x00ffffff, 0x4a026813, 0x00ffffff,
- 0x4a026a04, 0x00000200, 0x4a026c04, 0x00000002,
- 0x1c01f000, 0x0401f807, 0x42018800, 0x00000001,
- 0x04020003, 0x42018800, 0x00000000, 0x1c01f000,
- 0x5930000a, 0x50000000, 0x4933c857, 0x4803c857,
- 0x8c00050e, 0x1c01f000, 0x5930000a, 0x50000000,
- 0x8c00050a, 0x1c01f000, 0x0401f807, 0x42018800,
+ 0x4d300000, 0x83440580, 0x0000ffff, 0x04000023,
+ 0x83440480, 0x00000800, 0x04021024, 0x83441400,
+ 0x0010c880, 0x50080000, 0x80026d40, 0x0400001b,
+ 0x45781000, 0x5934000d, 0x80025d40, 0x02020800,
+ 0x001005b3, 0x59366011, 0x813261c0, 0x0400000e,
+ 0x4c640000, 0x5930c800, 0x59325809, 0x0201f800,
+ 0x00109c4d, 0x02020800, 0x001005b3, 0x0201f800,
+ 0x00020afe, 0x82666540, 0x00000000, 0x040207f6,
+ 0x5c00c800, 0x0201f800, 0x00104e7c, 0x41365800,
+ 0x0201f800, 0x001005ab, 0x80000580, 0x5c026000,
+ 0x5c025800, 0x1c01f000, 0x82000540, 0x00000001,
+ 0x0401f7fb, 0x0201f800, 0x00020353, 0x41358800,
+ 0x04000002, 0x41798800, 0x1c01f000, 0x4c580000,
+ 0x59cc0001, 0x4937c857, 0x82000500, 0x00ffffff,
+ 0x48026802, 0x497a6c01, 0x497a6a01, 0x59340200,
+ 0x82000500, 0xffffdffd, 0x48026a00, 0x4004b000,
+ 0x0201f800, 0x001052aa, 0x0402001c, 0x59340403,
+ 0x82000580, 0x000007fe, 0x04000005, 0x59a80221,
+ 0x8c00050a, 0x04020015, 0x0401f008, 0x59cc0408,
+ 0x8c000518, 0x04000011, 0x59cc0009, 0x4803502e,
+ 0x59cc000a, 0x4803502f, 0x59a80886, 0x8c040d3e,
+ 0x0402000a, 0x8058b1c0, 0x04020008, 0x59cc0207,
+ 0x80000540, 0x04020003, 0x42000000, 0x00000001,
+ 0x48038893, 0x48035018, 0x59cc0a09, 0x82040d00,
+ 0x00000010, 0x59cc0408, 0x82000500, 0x00000020,
+ 0x04000005, 0x84040d40, 0x59a81221, 0x8408155a,
+ 0x480b5221, 0x5934000a, 0x82000500, 0xffffffee,
+ 0x80040540, 0x4802680a, 0x83cca400, 0x0000000b,
+ 0x8334ac00, 0x00000006, 0x4200b000, 0x00000002,
+ 0x0201f800, 0x0010c5dd, 0x83cca400, 0x0000000d,
+ 0x8334ac00, 0x00000008, 0x4200b000, 0x00000002,
+ 0x0201f800, 0x0010c5dd, 0x59cc0a18, 0x59a80006,
+ 0x8c00050c, 0x04020015, 0x82040480, 0x00000800,
+ 0x0402100c, 0x82040480, 0x00000400, 0x04001004,
+ 0x42000800, 0x00000400, 0x0401f006, 0x82040480,
+ 0x00000200, 0x04001003, 0x42000800, 0x00000200,
+ 0x42001000, 0x0010d1b1, 0x58080201, 0x80041480,
+ 0x04001002, 0x40000800, 0x48066a04, 0x59340403,
+ 0x82000580, 0x000007fe, 0x04020003, 0x59cc0a08,
+ 0x48066a04, 0x0201f800, 0x00104eaa, 0x5c00b000,
+ 0x1c01f000, 0x4937c857, 0x59cc0207, 0x4803c857,
+ 0x48026a05, 0x59cc020a, 0x4803c857, 0x48026c05,
+ 0x59cc2006, 0x59341200, 0x599c0818, 0x5934180a,
+ 0x4807c857, 0x480bc857, 0x480fc857, 0x82102500,
+ 0xff000000, 0x82102580, 0x02000000, 0x04000007,
+ 0x8c00050e, 0x04000009, 0x8c0c1d14, 0x04000003,
+ 0x8c0c1d0e, 0x04000005, 0x8c040d18, 0x04000003,
+ 0x8408154a, 0x0401f002, 0x8408150a, 0x8c000510,
+ 0x04000009, 0x8c0c1d14, 0x04000003, 0x8c0c1d10,
+ 0x04000005, 0x8c040d18, 0x04000003, 0x8408154e,
+ 0x0401f002, 0x8408150e, 0x8c000512, 0x04000009,
+ 0x8c0c1d14, 0x04000003, 0x8c0c1d12, 0x04000005,
+ 0x8c040d18, 0x04000003, 0x8408155c, 0x0401f002,
+ 0x8408151c, 0x480a6a00, 0x59a80221, 0x8c000508,
+ 0x04000008, 0x84000556, 0x4803c857, 0x48035221,
+ 0x42001000, 0x001110c2, 0x0201f800, 0x0010686f,
+ 0x1c01f000, 0x592c0012, 0x4803c857, 0x48026805,
+ 0x80000120, 0x42002000, 0x02000000, 0x0401f7c2,
+ 0x4803c856, 0x4c5c0000, 0x4d2c0000, 0x4c580000,
+ 0x5934000d, 0x80025d40, 0x04000029, 0x592c0003,
+ 0x82000480, 0x00000008, 0x0400100b, 0x412cb800,
+ 0x592c0001, 0x80025d40, 0x040207f9, 0x0201f800,
+ 0x00100599, 0x04000037, 0x492fc857, 0x492cb801,
+ 0x0401f020, 0x832c0c00, 0x00000004, 0x4200b000,
+ 0x00000008, 0x50040000, 0x82000580, 0xffffffff,
+ 0x04020006, 0x80041000, 0x50080000, 0x82000580,
+ 0xffffffff, 0x04000007, 0x82040c00, 0x00000002,
+ 0x8058b040, 0x040207f4, 0x0201f800, 0x0010032f,
+ 0x45480800, 0x454c1000, 0x592c1803, 0x800c1800,
+ 0x480e5803, 0x480fc857, 0x0401f014, 0x0201f800,
+ 0x00100599, 0x04000017, 0x492fc857, 0x492e680d,
+ 0x497a5802, 0x4a025803, 0x00000001, 0x494a5804,
+ 0x494e5805, 0x832c0c00, 0x00000006, 0x4200b000,
+ 0x0000000e, 0x46000800, 0xffffffff, 0x80040800,
+ 0x8058b040, 0x040207fc, 0x82000540, 0x00000001,
+ 0x5c00b000, 0x5c025800, 0x5c00b800, 0x1c01f000,
+ 0x80000580, 0x0401f7fb, 0x4803c856, 0x4d3c0000,
+ 0x4d2c0000, 0x5934000d, 0x80025d40, 0x0400001f,
+ 0x592c0002, 0x80000540, 0x0402001f, 0x412e7800,
+ 0x0401f8e3, 0x0402001c, 0x46000800, 0xffffffff,
+ 0x46001000, 0xffffffff, 0x4813c857, 0x480fc857,
+ 0x580c0003, 0x82000c80, 0x00000002, 0x04021014,
+ 0x480fc857, 0x400c0000, 0x812c0580, 0x04020004,
+ 0x580c0001, 0x4802680d, 0x0401f003, 0x580c0001,
+ 0x48002001, 0x400e5800, 0x0201f800, 0x001005aa,
+ 0x82000540, 0x00000001, 0x5c025800, 0x5c027800,
+ 0x1c01f000, 0x80000580, 0x0401f7fc, 0x80000040,
+ 0x48001803, 0x4803c857, 0x0401f7f6, 0x0201f800,
+ 0x0002011f, 0x59300008, 0x8400054e, 0x48026008,
+ 0x592c1a05, 0x820c1d00, 0x000000ff, 0x820c0580,
+ 0x00000048, 0x0400001a, 0x0201f000, 0x000203a0,
+ 0x8c000500, 0x02020800, 0x0002019b, 0x4a026203,
+ 0x00000002, 0x592c1a05, 0x820c1d00, 0x000000ff,
+ 0x820c0580, 0x00000018, 0x02000000, 0x000203a0,
+ 0x820c0580, 0x00000048, 0x04000009, 0x820c0580,
+ 0x00000068, 0x02020000, 0x000203a0, 0x42000000,
+ 0x80080084, 0x0201f000, 0x000203a2, 0x42000800,
+ 0x80000804, 0x0201f800, 0x00020a8e, 0x0201f000,
+ 0x000203a9, 0x4a025a07, 0x00000008, 0x0201f000,
+ 0x00020401, 0x4a025a07, 0x00000029, 0x0201f000,
+ 0x00020401, 0x4a025a07, 0x0000002a, 0x0201f000,
+ 0x00020401, 0x4a025a07, 0x00000028, 0x0201f000,
+ 0x00020401, 0x4a025a07, 0x0000000e, 0x0201f000,
+ 0x00020401, 0x4943c857, 0x4d440000, 0x4d340000,
+ 0x4d2c0000, 0x4c580000, 0x4200b000, 0x000007f0,
+ 0x417a8800, 0x0201f800, 0x00020353, 0x04020007,
+ 0x8d3e7d06, 0x04000004, 0x59340200, 0x8c00050e,
+ 0x04020002, 0x0401f813, 0x81468800, 0x8058b040,
+ 0x040207f5, 0x83440480, 0x00000800, 0x04021008,
+ 0x8d3e7d02, 0x04000006, 0x42028800, 0x000007f0,
+ 0x4200b000, 0x00000010, 0x0401f7eb, 0x5c00b000,
+ 0x5c025800, 0x5c026800, 0x5c028800, 0x1c01f000,
+ 0x4d2c0000, 0x4c600000, 0x4c5c0000, 0x4178b800,
+ 0x5936580f, 0x812e59c0, 0x0400002c, 0x592c0205,
+ 0x82000500, 0x000000ff, 0x82000580, 0x00000012,
+ 0x04000023, 0x82000580, 0x00000060, 0x04000020,
+ 0x8d3e7d00, 0x04000003, 0x0401f847, 0x0402001c,
+ 0x592cc000, 0x497a5800, 0x805cb9c0, 0x04020009,
+ 0x59340010, 0x812c0580, 0x04020004, 0x497a680f,
+ 0x497a6810, 0x0401f008, 0x4862680f, 0x0401f006,
+ 0x4860b800, 0x59340010, 0x812c0580, 0x04020002,
+ 0x485e6810, 0x4a025a05, 0x00000103, 0x49425a07,
+ 0x497a580a, 0x0201f800, 0x00109e0c, 0x0201f800,
+ 0x00020401, 0x40625800, 0x0401f7d7, 0x412cb800,
+ 0x592e5800, 0x0401f7d4, 0x5c00b800, 0x5c00c000,
+ 0x5c025800, 0x1c01f000, 0x4803c856, 0x41781800,
+ 0x5934000f, 0x80025d40, 0x04000019, 0x592c0006,
+ 0x80200580, 0x592c0000, 0x04000003, 0x412c1800,
+ 0x0401f7f9, 0x592c0a05, 0x82040d00, 0x000000ff,
+ 0x82040d80, 0x00000012, 0x040007f9, 0x82040d80,
+ 0x00000060, 0x040007f6, 0x497a5800, 0x800c19c0,
+ 0x04000008, 0x48001800, 0x80000540, 0x04020004,
+ 0x480e6810, 0x82000540, 0x00000001, 0x1c01f000,
+ 0x4802680f, 0x80000540, 0x040207fd, 0x497a6810,
+ 0x0401f7f9, 0x592c0009, 0x81480580, 0x04020003,
+ 0x592c000a, 0x814c0580, 0x1c01f000, 0x4803c856,
+ 0x4c580000, 0x413c1800, 0x400c2000, 0x593c0002,
+ 0x80000540, 0x04020018, 0x4200b000, 0x00000008,
+ 0x820c0c00, 0x00000004, 0x50040000, 0x81480580,
+ 0x04020005, 0x80041000, 0x50080000, 0x814c0580,
+ 0x0400000d, 0x82040c00, 0x00000002, 0x8058b040,
+ 0x040207f6, 0x400c2000, 0x580c0001, 0x80001d40,
+ 0x040207ee, 0x82000540, 0x00000001, 0x5c00b000,
+ 0x1c01f000, 0x80000580, 0x0401f7fd, 0x4937c857,
+ 0x4c580000, 0x4d2c0000, 0x5934000d, 0x80025d40,
+ 0x04020016, 0x0201f800, 0x00100599, 0x04000010,
+ 0x492e680d, 0x4a025802, 0x00000001, 0x497a5803,
+ 0x832c0c00, 0x00000004, 0x4200b000, 0x00000010,
+ 0x46000800, 0xffffffff, 0x80040800, 0x8058b040,
+ 0x040207fc, 0x82000540, 0x00000001, 0x5c025800,
+ 0x5c00b000, 0x1c01f000, 0x4d2c0000, 0x592e5801,
+ 0x0201f800, 0x001005b3, 0x5c025800, 0x497a5801,
+ 0x0401f7e9, 0x4d2c0000, 0x5936580d, 0x812e59c0,
+ 0x04000007, 0x4937c857, 0x497a680d, 0x0201f800,
+ 0x001005b3, 0x82000540, 0x00000001, 0x5c025800,
+ 0x1c01f000, 0x59340405, 0x4937c857, 0x4803c857,
+ 0x8c000508, 0x1c01f000, 0x4933c857, 0x5930380a,
+ 0x581c0200, 0x8400051a, 0x48003a00, 0x1c01f000,
+ 0x42026800, 0x0010d191, 0x497a680e, 0x42028800,
+ 0x000007ff, 0x0201f800, 0x001043ee, 0x4937c857,
+ 0x4a026c00, 0x00000606, 0x4a026802, 0x00ffffff,
+ 0x4a026813, 0x00ffffff, 0x4a026a04, 0x00000200,
+ 0x4a026c04, 0x00000002, 0x1c01f000, 0x0401f807,
+ 0x42018800, 0x00000001, 0x04020003, 0x42018800,
+ 0x00000000, 0x1c01f000, 0x5930000a, 0x50000000,
+ 0x4933c857, 0x4803c857, 0x8c00050e, 0x1c01f000,
+ 0x5930000a, 0x50000000, 0x8c00050a, 0x1c01f000,
+ 0x0401f807, 0x42018800, 0x00000001, 0x04000003,
+ 0x42018800, 0x00000000, 0x1c01f000, 0x4933c856,
+ 0x0401f8e4, 0x04000006, 0x59340400, 0x82000d00,
+ 0x000000ff, 0x82041580, 0x00000005, 0x1c01f000,
+ 0x4803c856, 0x59a80a21, 0x8c040d06, 0x0400000b,
+ 0x5930081c, 0x58040200, 0x8c000500, 0x04000007,
+ 0x58040009, 0x82000400, 0x0000000e, 0x50000800,
+ 0x58040200, 0x8c00051a, 0x1c01f000, 0x0401f807,
+ 0x42018800, 0x00000001, 0x04020003, 0x42018800,
+ 0x00000000, 0x1c01f000, 0x4d340000, 0x4c580000,
+ 0x59a80a21, 0x8c040d06, 0x04000019, 0x0201f800,
+ 0x0010c621, 0x42000800, 0x0010d5ef, 0x58041009,
+ 0x82080400, 0x0000000e, 0x50026800, 0x813669c0,
+ 0x0400000a, 0x58040200, 0x82000500, 0x00000003,
+ 0x82000580, 0x00000003, 0x04020004, 0x59340200,
+ 0x8c00051a, 0x04020006, 0x82040c00, 0x0000000b,
+ 0x8058b040, 0x040207ee, 0x80000580, 0x5c00b000,
+ 0x5c026800, 0x1c01f000, 0x4937c857, 0x493fc857,
+ 0x59341200, 0x813e79c0, 0x04000003, 0x8408155e,
+ 0x0401f002, 0x8408151e, 0x480a6a00, 0x1c01f000,
+ 0x4937c857, 0x0201f800, 0x00101dda, 0x04000006,
+ 0x59a8082e, 0x42001000, 0x00104af6, 0x0201f800,
+ 0x001069a8, 0x1c01f000, 0x4937c857, 0x42001000,
+ 0x00104af6, 0x0201f800, 0x0010686f, 0x59a81221,
+ 0x84081512, 0x480b5221, 0x1c01f000, 0x4008d000,
+ 0x4020d800, 0x829d3c80, 0x00000004, 0x409ce000,
+ 0x0201f800, 0x0011121d, 0x589c0000, 0x589c2001,
+ 0x589c2802, 0x589c3003, 0x829d3c00, 0x00000004,
+ 0x800001c0, 0x1c01f000, 0x4d340000, 0x406a6800,
+ 0x0401f803, 0x5c026800, 0x1c01f000, 0x5934000f,
+ 0x5934140b, 0x80081040, 0x04001002, 0x480a6c0b,
+ 0x80000540, 0x02020800, 0x00020361, 0x1c01f000,
+ 0x4803c857, 0x4947c857, 0x4c300000, 0x82006500,
+ 0x00000030, 0x04000006, 0x4c000000, 0x0201f800,
+ 0x0010a0c3, 0x5c000000, 0x0402000e, 0x8c00050e,
+ 0x04000009, 0x0401f8ac, 0x0402000a, 0x4937c857,
+ 0x592c0208, 0x8c00051c, 0x04020003, 0x41240800,
+ 0x0401f8bd, 0x80000580, 0x5c006000, 0x1c01f000,
+ 0x82000540, 0x00000001, 0x0401f7fc, 0x4803c857,
+ 0x4c580000, 0x4d440000, 0x40001000, 0x80000d80,
+ 0x4200b000, 0x000007f0, 0x4c040000, 0x40068800,
+ 0x4c080000, 0x40080000, 0x0401ffdc, 0x5c001000,
+ 0x5c000800, 0x80040800, 0x8058b040, 0x040207f7,
+ 0x8c081514, 0x04000007, 0x84081514, 0x4200b000,
+ 0x00000001, 0x42000800, 0x000007fc, 0x0401f7ef,
+ 0x4d300000, 0x4d400000, 0x4d240000, 0x0401fbb4,
+ 0x42028800, 0x0000ffff, 0x42026000, 0x00111cec,
+ 0x4a02600a, 0x0010e85a, 0x417a4800, 0x4926601c,
+ 0x42028000, 0x00000029, 0x0201f800, 0x001071b0,
+ 0x4df00000, 0x0201f800, 0x00110a68, 0x0201f800,
+ 0x00111028, 0x5c03e000, 0x02000800, 0x0010719d,
+ 0x5c024800, 0x5c028000, 0x5c026000, 0x5c028800,
+ 0x5c00b000, 0x1c01f000, 0x0401f807, 0x42018800,
0x00000001, 0x04000003, 0x42018800, 0x00000000,
- 0x1c01f000, 0x4933c856, 0x0401f8e1, 0x04000006,
- 0x59340400, 0x82000d00, 0x000000ff, 0x82041580,
- 0x00000005, 0x1c01f000, 0x4803c856, 0x59a80a1b,
- 0x8c040d06, 0x0400000b, 0x5930081c, 0x58040200,
- 0x8c000500, 0x04000007, 0x58040009, 0x82000400,
- 0x0000000e, 0x50000800, 0x58040200, 0x8c00051a,
- 0x1c01f000, 0x0401f807, 0x42018800, 0x00000001,
- 0x04020003, 0x42018800, 0x00000000, 0x1c01f000,
- 0x4d340000, 0x4c580000, 0x59a80a1b, 0x8c040d06,
- 0x04000019, 0x0201f800, 0x0010c0ca, 0x42000800,
- 0x0010cfd1, 0x58041009, 0x82080400, 0x0000000e,
- 0x50026800, 0x813669c0, 0x0400000a, 0x58040200,
- 0x82000500, 0x00000003, 0x82000580, 0x00000003,
- 0x04020004, 0x59340200, 0x8c00051a, 0x04020006,
- 0x82040c00, 0x0000000b, 0x8058b040, 0x040207ee,
- 0x80000580, 0x5c00b000, 0x5c026800, 0x1c01f000,
- 0x4937c857, 0x493fc857, 0x59341200, 0x813e79c0,
- 0x04000003, 0x8408155e, 0x0401f002, 0x8408151e,
- 0x480a6a00, 0x1c01f000, 0x4937c857, 0x0201f800,
- 0x00101d52, 0x04000006, 0x59a80828, 0x42001000,
- 0x001049a0, 0x0201f800, 0x00106638, 0x1c01f000,
- 0x4937c857, 0x42001000, 0x001049a0, 0x0201f800,
- 0x001064fe, 0x59a8121b, 0x84081512, 0x480b521b,
- 0x1c01f000, 0x4008d000, 0x4020d800, 0x829d3c80,
- 0x00000004, 0x409ce000, 0x0201f800, 0x00110ae2,
- 0x589c0000, 0x589c2001, 0x589c2802, 0x589c3003,
- 0x829d3c00, 0x00000004, 0x800001c0, 0x1c01f000,
- 0x4d340000, 0x406a6800, 0x0401f803, 0x5c026800,
- 0x1c01f000, 0x5934000f, 0x5934140b, 0x80081040,
- 0x04001002, 0x480a6c0b, 0x80000540, 0x02020800,
- 0x0002035a, 0x1c01f000, 0x4803c857, 0x4947c857,
- 0x4c300000, 0x82006500, 0x00000030, 0x04000006,
- 0x4c000000, 0x0201f800, 0x00109d11, 0x5c000000,
- 0x0402000b, 0x8c00050e, 0x04000006, 0x0401f8a9,
- 0x04020007, 0x4937c857, 0x41240800, 0x0401f8bd,
- 0x80000580, 0x5c006000, 0x1c01f000, 0x82000540,
- 0x00000001, 0x0401f7fc, 0x4803c857, 0x4c580000,
- 0x4d440000, 0x40001000, 0x80000d80, 0x4200b000,
- 0x000007f0, 0x4c040000, 0x40068800, 0x4c080000,
- 0x40080000, 0x0401ffdf, 0x5c001000, 0x5c000800,
- 0x80040800, 0x8058b040, 0x040207f7, 0x8c081514,
- 0x04000007, 0x84081514, 0x4200b000, 0x00000001,
- 0x42000800, 0x000007fc, 0x0401f7ef, 0x4d300000,
- 0x4d400000, 0x4d240000, 0x0401fba2, 0x42028800,
- 0x0000ffff, 0x42026000, 0x0011152c, 0x4a02600a,
- 0x0010e23c, 0x417a4800, 0x4926601c, 0x42028000,
- 0x00000029, 0x0201f800, 0x00106e41, 0x4df00000,
- 0x0201f800, 0x00110363, 0x0201f800, 0x00110916,
- 0x5c03e000, 0x02000800, 0x00106e2e, 0x5c024800,
- 0x5c028000, 0x5c026000, 0x5c028800, 0x5c00b000,
+ 0x1c01f000, 0x4c5c0000, 0x59340400, 0x8200bd80,
+ 0x00000606, 0x5c00b800, 0x1c01f000, 0x4c5c0000,
+ 0x59340400, 0x8200bd80, 0x00000404, 0x5c00b800,
0x1c01f000, 0x0401f807, 0x42018800, 0x00000001,
0x04000003, 0x42018800, 0x00000000, 0x1c01f000,
- 0x4c5c0000, 0x59340400, 0x8200bd80, 0x00000606,
+ 0x4c5c0000, 0x59340400, 0x8200bd80, 0x00000404,
+ 0x04000003, 0x8200bd80, 0x00000606, 0x5c00b800,
+ 0x1c01f000, 0x4c5c0000, 0x4c600000, 0x59340400,
+ 0x8200bd00, 0x0000ff00, 0x825cc580, 0x00000400,
+ 0x04000003, 0x825cc580, 0x00000600, 0x5c00c000,
0x5c00b800, 0x1c01f000, 0x4c5c0000, 0x59340400,
- 0x8200bd80, 0x00000404, 0x5c00b800, 0x1c01f000,
- 0x0401f807, 0x42018800, 0x00000001, 0x04000003,
- 0x42018800, 0x00000000, 0x1c01f000, 0x4c5c0000,
- 0x59340400, 0x8200bd80, 0x00000404, 0x04000003,
- 0x8200bd80, 0x00000606, 0x5c00b800, 0x1c01f000,
- 0x4c5c0000, 0x4c600000, 0x59340400, 0x8200bd00,
- 0x0000ff00, 0x825cc580, 0x00000400, 0x04000003,
- 0x825cc580, 0x00000600, 0x5c00c000, 0x5c00b800,
- 0x1c01f000, 0x4c5c0000, 0x59340400, 0x82000500,
- 0x000000ff, 0x8200bd80, 0x00000003, 0x04000003,
- 0x8200bd80, 0x00000005, 0x5c00b800, 0x1c01f000,
- 0x5c000000, 0x4c000000, 0x4803c857, 0x4c5c0000,
- 0x59340400, 0x82000500, 0x0000ff00, 0x8400b9c0,
- 0x805c0580, 0x4937c857, 0x4803c857, 0x48026c00,
- 0x5c00b800, 0x1c01f000, 0x4c040000, 0x4c080000,
- 0x592c0208, 0x8c00050c, 0x0400000f, 0x592e8c07,
- 0x82000500, 0x00000080, 0x84000548, 0x4d3c0000,
- 0x42027800, 0x00001000, 0x0401ff5c, 0x5c027800,
- 0x82000540, 0x00000001, 0x5c001000, 0x5c000800,
- 0x1c01f000, 0x80000580, 0x0401f7fc, 0x59340013,
- 0x80024130, 0x83224c00, 0x0010c10d, 0x51264800,
- 0x812649c0, 0x02000800, 0x0010032e, 0x1c01f000,
- 0x83440c80, 0x00000800, 0x04021013, 0x83200400,
- 0x0010c10d, 0x50024800, 0x59240009, 0x83440c80,
- 0x000007f0, 0x04001003, 0x80040c00, 0x0401f003,
- 0x83440c00, 0x0010c280, 0x50040000, 0x80026d40,
- 0x04000005, 0x59340013, 0x80000130, 0x81200580,
- 0x1c01f000, 0x82000540, 0x00000001, 0x0401f7fd,
- 0x4937c857, 0x4c580000, 0x4d440000, 0x59368c03,
- 0x83441480, 0x000007f0, 0x04021003, 0x0401fc0d,
- 0x0401f00d, 0x58040009, 0x80080c00, 0x50040000,
- 0x81340580, 0x02020800, 0x0010032e, 0x4d2c0000,
- 0x45780800, 0x41365800, 0x0201f800, 0x00100594,
- 0x5c025800, 0x80000580, 0x5c028800, 0x5c00b000,
- 0x1c01f000, 0x592c040c, 0x82000500, 0x0000e000,
- 0x82000580, 0x00006000, 0x04000026, 0x836c0580,
- 0x00000003, 0x04000016, 0x836c0580, 0x00000002,
- 0x04020122, 0x59a8021b, 0x82000d00, 0x00000038,
- 0x04020005, 0x59a80813, 0x800409c0, 0x0400000c,
- 0x0401f11a, 0x82000d00, 0x00000003, 0x82040d80,
- 0x00000003, 0x04020115, 0x82000d00, 0x00000028,
- 0x04020003, 0x8c00050c, 0x04000110, 0x592e4408,
- 0x83224500, 0x000000ff, 0x0201f800, 0x00105c82,
- 0x040200dd, 0x592c100b, 0x82080500, 0xff000000,
- 0x040200e8, 0x59240005, 0x80080580, 0x040000e2,
+ 0x82000500, 0x000000ff, 0x8200bd80, 0x00000003,
+ 0x04000003, 0x8200bd80, 0x00000005, 0x5c00b800,
+ 0x1c01f000, 0x5c000000, 0x4c000000, 0x4803c857,
+ 0x4c5c0000, 0x59340400, 0x82000500, 0x0000ff00,
+ 0x8400b9c0, 0x805c0580, 0x4937c857, 0x4803c857,
+ 0x48026c00, 0x5c00b800, 0x1c01f000, 0x4c040000,
+ 0x4c080000, 0x592c0208, 0x8c00050c, 0x0400000f,
+ 0x592e8c07, 0x82000500, 0x00000080, 0x84000548,
+ 0x4d3c0000, 0x42027800, 0x00001000, 0x0401ff59,
+ 0x5c027800, 0x82000540, 0x00000001, 0x5c001000,
+ 0x5c000800, 0x1c01f000, 0x80000580, 0x0401f7fc,
+ 0x59340013, 0x80024130, 0x83224c00, 0x0010c6ac,
+ 0x51264800, 0x812649c0, 0x02000800, 0x0010032f,
+ 0x1c01f000, 0x83440c80, 0x00000800, 0x04021013,
+ 0x83200400, 0x0010c6ac, 0x50024800, 0x59240009,
+ 0x83440c80, 0x000007f0, 0x04001003, 0x80040c00,
+ 0x0401f003, 0x83440c00, 0x0010c880, 0x50040000,
+ 0x80026d40, 0x04000005, 0x59340013, 0x80000130,
+ 0x81200580, 0x1c01f000, 0x82000540, 0x00000001,
+ 0x0401f7fd, 0x4937c857, 0x4c580000, 0x4d440000,
+ 0x59368c03, 0x83440580, 0x0000ffff, 0x04000013,
+ 0x83441480, 0x000007f0, 0x04021004, 0x0201f800,
+ 0x001047f4, 0x0401f00d, 0x58040009, 0x80080c00,
+ 0x50040000, 0x81340580, 0x02020800, 0x0010032f,
+ 0x4d2c0000, 0x45780800, 0x41365800, 0x0201f800,
+ 0x001005aa, 0x5c025800, 0x80000580, 0x5c028800,
+ 0x5c00b000, 0x1c01f000, 0x592c040c, 0x82000500,
+ 0x0000e000, 0x82000580, 0x00006000, 0x04000025,
+ 0x836c0580, 0x00000003, 0x04000016, 0x836c0580,
+ 0x00000002, 0x04020130, 0x59a80221, 0x82000d00,
+ 0x00000038, 0x04020005, 0x59a80819, 0x800409c0,
+ 0x0400000c, 0x0401f128, 0x82000d00, 0x00000003,
+ 0x82040d80, 0x00000003, 0x04020123, 0x82000d00,
+ 0x00000028, 0x04020003, 0x8c00050c, 0x0400011e,
+ 0x592e4408, 0x83224500, 0x000000ff, 0x0201f800,
+ 0x00105f30, 0x040200ee, 0x592c100b, 0x82081500,
+ 0x00ffffff, 0x59240005, 0x80080580, 0x040000f4,
0x592c0c0c, 0x82040d00, 0x0000e000, 0x82040480,
- 0x00008000, 0x040210e2, 0x592e8c07, 0x83440480,
+ 0x00008000, 0x040210f1, 0x592e8c07, 0x83440480,
0x00000800, 0x04001016, 0x83440580, 0x0000ffff,
- 0x040200c6, 0x800409c0, 0x04020114, 0x592c240a,
- 0x82100500, 0xffffff00, 0x040200cc, 0x480bc857,
+ 0x040200d8, 0x800409c0, 0x04020123, 0x592c240a,
+ 0x82100500, 0xffffff00, 0x040200de, 0x480bc857,
0x4813c857, 0x592c000e, 0x82000480, 0x00000841,
- 0x040210d2, 0x42027000, 0x00000053, 0x0401faa9,
- 0x42026800, 0x0010e23c, 0x0401f09b, 0x800409c0,
- 0x04020102, 0x41784000, 0x0401feaf, 0x040200e9,
- 0x59342204, 0x592c000e, 0x80100480, 0x040010c3,
- 0x42027000, 0x00000053, 0x592c240a, 0x82100500,
- 0xffffff00, 0x040200b1, 0x4813c857, 0x592c000d,
- 0x800001c0, 0x04000085, 0x82100580, 0x00000004,
- 0x040000a7, 0x82100580, 0x00000051, 0x040000a4,
- 0x82100580, 0x00000003, 0x04000016, 0x82100580,
- 0x00000020, 0x0400004c, 0x82100580, 0x00000024,
- 0x04000043, 0x82100580, 0x00000021, 0x04000043,
- 0x82100580, 0x00000050, 0x04000038, 0x82100580,
- 0x00000052, 0x04000032, 0x82100580, 0x00000005,
- 0x0402006d, 0x42027000, 0x00000001, 0x0401f01b,
- 0x42027000, 0x00000002, 0x59a80070, 0x8c000502,
- 0x04000016, 0x0401feef, 0x04000014, 0x59340212,
- 0x82000500, 0x0000ff00, 0x42001000, 0x00000010,
- 0x0402000c, 0x59a8021b, 0x8c000506, 0x04020073,
- 0x42001000, 0x00000008, 0x59340002, 0x82000500,
- 0x00ff0000, 0x82000580, 0x00ff0000, 0x04000003,
- 0x0401f9dc, 0x04020069, 0x0201f800, 0x00107ef8,
- 0x04000088, 0x4a026407, 0x00000010, 0x4926601c,
- 0x4936600a, 0x42000800, 0x00000003, 0x83380580,
- 0x00000002, 0x04000003, 0x42000800, 0x0000000b,
- 0x0201f800, 0x001045ea, 0x0401f046, 0x42027000,
- 0x00000000, 0x0401f003, 0x42027000, 0x00000004,
- 0x0401fee0, 0x0402007a, 0x0401f037, 0x42027000,
- 0x00000033, 0x0401f006, 0x42027000, 0x00000005,
- 0x0401f003, 0x42027000, 0x00000003, 0x0401fecc,
- 0x0402006f, 0x59a80070, 0x8c000502, 0x04000016,
- 0x0401feb4, 0x04000014, 0x59340212, 0x82000500,
- 0x0000ff00, 0x42001000, 0x00000010, 0x0402000c,
- 0x59a8021b, 0x8c000506, 0x04020038, 0x42001000,
- 0x00000008, 0x59340002, 0x82000500, 0x00ff0000,
- 0x82000580, 0x00ff0000, 0x04000003, 0x0401f9a1,
- 0x0402002e, 0x0201f800, 0x00107ef8, 0x0400004d,
- 0x4a026407, 0x00000010, 0x4926601c, 0x4936600a,
- 0x42000800, 0x00000005, 0x83380580, 0x00000003,
- 0x04000003, 0x42000800, 0x00000009, 0x0201f800,
- 0x001045ea, 0x0401f00b, 0x82102580, 0x00000011,
- 0x04020035, 0x0201f800, 0x00107ef8, 0x04000039,
- 0x4a026407, 0x00000010, 0x4926601c, 0x4936600a,
- 0x492e6009, 0x49325809, 0x83340580, 0x0010e23c,
- 0x04000007, 0x592c0c0c, 0x8c040d18, 0x04000004,
- 0x59340200, 0x84000514, 0x48026a00, 0x0201f800,
- 0x00020bc1, 0x80000580, 0x1c01f000, 0x82000540,
- 0x00000001, 0x0401f7fd, 0x42001000, 0x0000000a,
- 0x0401f01b, 0x42001000, 0x0000000e, 0x0401f018,
- 0x42001000, 0x00000010, 0x0401f015, 0x42001000,
- 0x00000016, 0x0401f012, 0x42001000, 0x00000017,
- 0x0401f00f, 0x42001000, 0x00000018, 0x0401f00c,
- 0x42001000, 0x0000001b, 0x0401f009, 0x42001000,
- 0x0000001e, 0x0401f006, 0x42001000, 0x00000024,
- 0x0401f003, 0x42001000, 0x00000020, 0x42000800,
- 0x00000019, 0x42028000, 0x00000031, 0x0401f7dc,
- 0x42000800, 0x00000003, 0x0401f003, 0x42000800,
- 0x0000000a, 0x41781000, 0x0401f7f7, 0x42000800,
- 0x00000009, 0x59341400, 0x0401f7f3, 0x42028000,
- 0x00000008, 0x0401f005, 0x42000800, 0x00000007,
- 0x416c1000, 0x0401f7ec, 0x41780800, 0x41781000,
- 0x0401f7c7, 0x42028000, 0x00000000, 0x0401f7fb,
- 0x82004d80, 0x0000001d, 0x02000800, 0x0010032e,
- 0x82004d80, 0x0000001a, 0x04020004, 0x40101000,
- 0x40000800, 0x0401f7dc, 0x82004d80, 0x0000001b,
- 0x04020003, 0x40181000, 0x0401f7fa, 0x82004d80,
- 0x0000001c, 0x040007f7, 0x82004d80, 0x00000019,
- 0x040007b2, 0x0401f7d6, 0x592e6009, 0x0201f800,
- 0x00109d04, 0x040007b3, 0x59300c07, 0x82040580,
- 0x00000011, 0x040207d6, 0x592c0c0c, 0x82041500,
- 0x0000e000, 0x82080580, 0x00006000, 0x04000024,
- 0x83440580, 0x0000ffff, 0x04020008, 0x5932680a,
- 0x83340580, 0x0010e23c, 0x040207c9, 0x42000800,
- 0x00000840, 0x0401f00f, 0x592c100b, 0x82081500,
- 0x00ffffff, 0x41784000, 0x0401fd93, 0x040207cd,
- 0x5930000a, 0x82000d80, 0x0010e23c, 0x04000003,
- 0x81340580, 0x040207ba, 0x4936600a, 0x59340a04,
- 0x592c000e, 0x80040480, 0x040017a0, 0x59300a03,
- 0x82040580, 0x00000007, 0x040207b1, 0x492e6009,
- 0x42027000, 0x00000054, 0x0401f770, 0x0201f800,
- 0x0010b6ce, 0x040007b4, 0x0401f7a9, 0x492fc857,
- 0x592e6009, 0x83300580, 0xffffffff, 0x04020047,
- 0x592c0208, 0x8c000500, 0x04020083, 0x8d0e1d0e,
- 0x04020069, 0x592e8c07, 0x83440480, 0x00000800,
- 0x0402103b, 0x592c380b, 0x821c3d00, 0x00ffffff,
- 0x0201f800, 0x00101fc9, 0x04020041, 0x49265802,
- 0x41784000, 0x592c100a, 0x82081500, 0x00ffffff,
- 0x0401fd61, 0x0402005b, 0x592e6014, 0x4933c857,
- 0x83300580, 0xffffffff, 0x0400001b, 0x0201f800,
- 0x00109d04, 0x04000035, 0x591c1407, 0x800811c0,
- 0x04000015, 0x592c040e, 0x591c0a02, 0x80040580,
- 0x04020011, 0x591c000a, 0x800001c0, 0x04020007,
- 0x591c0827, 0x59340002, 0x80040580, 0x82000500,
- 0x00ffffff, 0x0401f002, 0x81340580, 0x04020006,
- 0x82080580, 0x00000007, 0x04020038, 0x4a023c03,
- 0x00000024, 0x59240005, 0x592c080a, 0x82041500,
- 0x00ffffff, 0x80081580, 0x0400000f, 0x80040932,
- 0x82040580, 0x00000042, 0x0402000e, 0x49365803,
- 0x0401f908, 0x80000580, 0x1c01f000, 0x42001000,
- 0x0000000a, 0x0401f00f, 0x42001000, 0x00000010,
- 0x0401f00c, 0x42001000, 0x00000014, 0x0401f009,
- 0x42001000, 0x00000017, 0x0401f006, 0x42001000,
- 0x00000018, 0x0401f003, 0x42001000, 0x0000003c,
- 0x492fc857, 0x480bc857, 0x42000800, 0x00000019,
- 0x42028000, 0x00000031, 0x82000540, 0x00000001,
- 0x0401f7e6, 0x492fc857, 0x4803c857, 0x480bc857,
- 0x40000800, 0x0401f7f7, 0x492fc857, 0x42000800,
- 0x0000000a, 0x41781000, 0x0401f7f2, 0x41780800,
- 0x41781000, 0x0401f7f1, 0x42000800, 0x0000001e,
- 0x0401f7f9, 0x42000800, 0x00000001, 0x0401f7f6,
- 0x82004d80, 0x0000001d, 0x02000800, 0x0010032e,
- 0x82004d80, 0x0000001a, 0x04020003, 0x40101000,
- 0x0401f7e5, 0x82004d80, 0x0000001b, 0x04020003,
- 0x40181000, 0x0401f7e0, 0x82004d80, 0x0000001c,
- 0x040007dd, 0x82004d80, 0x00000019, 0x040007da,
- 0x0401f7de, 0x0201f800, 0x0010b7c1, 0x42028000,
- 0x00000000, 0x0401f7de, 0x5c000000, 0x4c000000,
- 0x4803c857, 0x5930200a, 0x801021c0, 0x04000035,
- 0x58101400, 0x4813c857, 0x480bc857, 0x82081d00,
- 0x000000ff, 0x59300c03, 0x82040580, 0x00000008,
- 0x04000022, 0x82040580, 0x0000000a, 0x04000017,
- 0x82040580, 0x0000000c, 0x04000010, 0x82040580,
- 0x00000002, 0x04000019, 0x82040580, 0x00000001,
- 0x04000012, 0x82040580, 0x00000003, 0x0400000b,
- 0x82040580, 0x00000005, 0x04000004, 0x82040580,
- 0x00000033, 0x04020017, 0x820c0580, 0x00000009,
- 0x0400000d, 0x0401f013, 0x820c0580, 0x00000005,
- 0x04000009, 0x0401f00f, 0x820c0580, 0x0000000b,
- 0x04000005, 0x0401f00b, 0x820c0580, 0x00000003,
- 0x04020008, 0x82081d00, 0xffffff00, 0x840c01c0,
- 0x800c0540, 0x4807c857, 0x4803c857, 0x48002400,
- 0x1c01f000, 0x0401f807, 0x42018800, 0x00000001,
- 0x04020003, 0x42018800, 0x00000000, 0x1c01f000,
- 0x599c0017, 0x8c00050a, 0x04000003, 0x80000580,
- 0x1c01f000, 0x59a8021b, 0x82000500, 0x00000028,
- 0x04000008, 0x42028800, 0x000007fd, 0x417a4000,
- 0x0401fd70, 0x04020003, 0x5934000a, 0x8c000504,
- 0x1c01f000, 0x4d300000, 0x5934000e, 0x80026540,
- 0x04000006, 0x0201f800, 0x001068a4, 0x02000800,
- 0x00106a7c, 0x497a680e, 0x5c026000, 0x1c01f000,
- 0x4d440000, 0x4d340000, 0x80000580, 0x40001800,
- 0x40028800, 0x82080580, 0x00000008, 0x04020003,
- 0x42001800, 0x00000001, 0x0201f800, 0x0002034c,
- 0x0402000a, 0x0401fcf3, 0x04020008, 0x800c19c0,
- 0x04000004, 0x59340405, 0x8c000508, 0x04000003,
- 0x80081040, 0x04000009, 0x81468800, 0x83440480,
- 0x00000800, 0x040017f1, 0x80000580, 0x5c026800,
- 0x5c028800, 0x1c01f000, 0x82000540, 0x00000001,
- 0x5c026800, 0x5c028800, 0x1c01f000, 0x42000800,
- 0x00000008, 0x59bc00e4, 0x8c000524, 0x0402002e,
- 0x59a8021b, 0x8c000508, 0x0402002b, 0x5934100a,
- 0x82081500, 0x0000e000, 0x41781800, 0x82080580,
- 0x00000000, 0x04000006, 0x800c1800, 0x82080580,
- 0x00002000, 0x04000002, 0x800c1800, 0x42007000,
- 0x0010cb9b, 0x58380401, 0x8c000504, 0x04000007,
- 0x820c2c80, 0x00000003, 0x04021017, 0x820c0400,
- 0x00104d73, 0x0401f013, 0x41782000, 0x59342a04,
- 0x82140480, 0x00000800, 0x04021006, 0x80102000,
- 0x82140480, 0x00000400, 0x04021002, 0x80102000,
- 0x800c00c2, 0x800c0400, 0x80100400, 0x82002c80,
- 0x00000006, 0x04021004, 0x82000400, 0x00104d76,
- 0x50000800, 0x48066c04, 0x1c01f000, 0x00000002,
- 0x00000004, 0x00000008, 0x00002802, 0x00001402,
- 0x00000a02, 0x00001402, 0x00000a02, 0x00000502,
- 0x59a80853, 0x800409c0, 0x04020005, 0x492f5052,
- 0x492f5053, 0x0201f000, 0x00107e2a, 0x492c0800,
- 0x492f5053, 0x1c01f000, 0x5934000f, 0x41784000,
- 0x80001540, 0x04000010, 0x58080205, 0x82000500,
- 0x000000ff, 0x82000580, 0x00000012, 0x04000004,
- 0x82000580, 0x00000060, 0x04020004, 0x5808020d,
- 0x80040580, 0x04000006, 0x58080000, 0x40084000,
- 0x0401f7f0, 0x82000540, 0x00000001, 0x1c01f000,
- 0x42000000, 0x0010e23c, 0x4a000400, 0x00000707,
- 0x4a000204, 0x00000840, 0x4a000403, 0x0000ffff,
- 0x49780200, 0x1c01f000, 0x4d340000, 0x4d440000,
- 0x4c580000, 0x4200b000, 0x000007f0, 0x4803c856,
- 0x417a8800, 0x0201f800, 0x0002034c, 0x04020006,
- 0x59340200, 0x8c00051a, 0x04000003, 0x8400051a,
- 0x48026a00, 0x81468800, 0x8058b040, 0x040207f6,
- 0x5c00b000, 0x5c028800, 0x5c026800, 0x1c01f000,
- 0x4a033011, 0x00000000, 0x4a03b104, 0x80000000,
+ 0x040210e1, 0x42027000, 0x00000053, 0x0401fab8,
+ 0x42026800, 0x0010e85a, 0x0401f0ad, 0x800409c0,
+ 0x04020111, 0x41784000, 0x0401fea9, 0x040200f8,
+ 0x592c240c, 0x8c102514, 0x04000010, 0x592c240a,
+ 0x82100500, 0xffffff00, 0x040200c6, 0x82100580,
+ 0x00000020, 0x040200c9, 0x0401ff19, 0x040200db,
+ 0x0401fc7d, 0x42000800, 0x00000006, 0x0201f800,
+ 0x0010473b, 0x0401f0e3, 0x59342204, 0x592c000e,
+ 0x80100480, 0x040010c0, 0x42027000, 0x00000053,
+ 0x592c240a, 0x82100500, 0xffffff00, 0x040200b1,
+ 0x4813c857, 0x592c000d, 0x800001c0, 0x04000085,
+ 0x82100580, 0x00000004, 0x040000a7, 0x82100580,
+ 0x00000051, 0x040000a4, 0x82100580, 0x00000003,
+ 0x04000016, 0x82100580, 0x00000020, 0x0400004c,
+ 0x82100580, 0x00000024, 0x04000043, 0x82100580,
+ 0x00000021, 0x04000043, 0x82100580, 0x00000050,
+ 0x04000038, 0x82100580, 0x00000052, 0x04000032,
+ 0x82100580, 0x00000005, 0x0402006d, 0x42027000,
+ 0x00000001, 0x0401f01b, 0x42027000, 0x00000002,
+ 0x59a8007e, 0x8c000502, 0x04000016, 0x0401feda,
+ 0x04000014, 0x59340212, 0x82000500, 0x0000ff00,
+ 0x42001000, 0x00000010, 0x0402000c, 0x59a80221,
+ 0x8c000506, 0x04020073, 0x42001000, 0x00000008,
+ 0x59340002, 0x82000500, 0x00ff0000, 0x82000580,
+ 0x00ff0000, 0x04000003, 0x0401f9d9, 0x04020069,
+ 0x0201f800, 0x00108297, 0x04000085, 0x4a026407,
+ 0x00000010, 0x4926601c, 0x4936600a, 0x42000800,
+ 0x00000003, 0x83380580, 0x00000002, 0x04000003,
+ 0x42000800, 0x0000000b, 0x0201f800, 0x00104736,
+ 0x0401f046, 0x42027000, 0x00000000, 0x0401f003,
+ 0x42027000, 0x00000004, 0x0401fecb, 0x04020077,
+ 0x0401f037, 0x42027000, 0x00000033, 0x0401f006,
+ 0x42027000, 0x00000005, 0x0401f003, 0x42027000,
+ 0x00000003, 0x0401feb7, 0x0402006c, 0x59a8007e,
+ 0x8c000502, 0x04000016, 0x0401fe9f, 0x04000014,
+ 0x59340212, 0x82000500, 0x0000ff00, 0x42001000,
+ 0x00000010, 0x0402000c, 0x59a80221, 0x8c000506,
+ 0x04020038, 0x42001000, 0x00000008, 0x59340002,
+ 0x82000500, 0x00ff0000, 0x82000580, 0x00ff0000,
+ 0x04000003, 0x0401f99e, 0x0402002e, 0x0201f800,
+ 0x00108297, 0x0400004a, 0x4a026407, 0x00000010,
+ 0x4926601c, 0x4936600a, 0x42000800, 0x00000005,
+ 0x83380580, 0x00000003, 0x04000003, 0x42000800,
+ 0x00000009, 0x0201f800, 0x00104736, 0x0401f00b,
+ 0x82102580, 0x00000011, 0x04020032, 0x0201f800,
+ 0x00108297, 0x04000036, 0x4a026407, 0x00000010,
+ 0x4926601c, 0x4936600a, 0x492e6009, 0x49325809,
+ 0x83340580, 0x0010e85a, 0x04000007, 0x592c0c0c,
+ 0x8c040d18, 0x04000004, 0x59340200, 0x84000514,
+ 0x48026a00, 0x0201f800, 0x00020b22, 0x80000580,
+ 0x1c01f000, 0x82000540, 0x00000001, 0x0401f7fd,
+ 0x42001000, 0x0000000a, 0x0401f018, 0x42001000,
+ 0x0000000e, 0x0401f015, 0x42001000, 0x00000010,
+ 0x0401f012, 0x42001000, 0x00000016, 0x0401f00f,
+ 0x42001000, 0x00000017, 0x0401f00c, 0x42001000,
+ 0x00000018, 0x0401f009, 0x42001000, 0x0000001e,
+ 0x0401f006, 0x42001000, 0x00000024, 0x0401f003,
+ 0x42001000, 0x00000020, 0x42000800, 0x00000019,
+ 0x42028000, 0x00000031, 0x0401f7df, 0x42000800,
+ 0x00000003, 0x0401f003, 0x42000800, 0x0000000a,
+ 0x41781000, 0x0401f7f7, 0x42000800, 0x00000009,
+ 0x59341400, 0x0401f7f3, 0x42028000, 0x00000008,
+ 0x0401f005, 0x42000800, 0x00000007, 0x416c1000,
+ 0x0401f7ec, 0x41780800, 0x41781000, 0x0401f7ca,
+ 0x42028000, 0x00000000, 0x0401f7fb, 0x82004d80,
+ 0x0000001d, 0x02000800, 0x0010032f, 0x82004d80,
+ 0x0000001a, 0x04020004, 0x40101000, 0x40000800,
+ 0x0401f7dc, 0x82004d80, 0x0000001b, 0x04020003,
+ 0x40181000, 0x0401f7fa, 0x82004d80, 0x0000001c,
+ 0x040007f7, 0x82004d80, 0x00000019, 0x040007b5,
+ 0x0401f7d6, 0x592e6009, 0x0201f800, 0x0010a0b6,
+ 0x040007b6, 0x59300c07, 0x82040580, 0x00000011,
+ 0x040207d6, 0x592c0c0c, 0x82041500, 0x0000e000,
+ 0x82080580, 0x00006000, 0x04000024, 0x83440580,
+ 0x0000ffff, 0x04020008, 0x5932680a, 0x83340580,
+ 0x0010e85a, 0x040207c9, 0x42000800, 0x00000840,
+ 0x0401f00f, 0x592c100b, 0x82081500, 0x00ffffff,
+ 0x41784000, 0x0401fd7e, 0x040207cd, 0x5930000a,
+ 0x82000d80, 0x0010e85a, 0x04000003, 0x81340580,
+ 0x040207ba, 0x4936600a, 0x59340a04, 0x592c000e,
+ 0x80040480, 0x040017a0, 0x59300a03, 0x82040580,
+ 0x00000007, 0x040207b1, 0x492e6009, 0x42027000,
+ 0x00000054, 0x0401f773, 0x0201f800, 0x0010bc1f,
+ 0x040007b4, 0x0401f7a9, 0x492fc857, 0x592e6009,
+ 0x83300580, 0xffffffff, 0x04020047, 0x592c0208,
+ 0x8c000500, 0x04020083, 0x8d0e1d0e, 0x04020069,
+ 0x592e8c07, 0x83440480, 0x00000800, 0x0402103b,
+ 0x592c380b, 0x821c3d00, 0x00ffffff, 0x0201f800,
+ 0x00102051, 0x04020041, 0x49265802, 0x41784000,
+ 0x592c100a, 0x82081500, 0x00ffffff, 0x0401fd4c,
+ 0x0402005b, 0x592e6014, 0x4933c857, 0x83300580,
+ 0xffffffff, 0x0400001b, 0x0201f800, 0x0010a0b6,
+ 0x04000035, 0x591c1407, 0x800811c0, 0x04000015,
+ 0x592c040e, 0x591c0a02, 0x80040580, 0x04020011,
+ 0x591c000a, 0x800001c0, 0x04020007, 0x591c0827,
+ 0x59340002, 0x80040580, 0x82000500, 0x00ffffff,
+ 0x0401f002, 0x81340580, 0x04020006, 0x82080580,
+ 0x00000007, 0x04020038, 0x4a023c03, 0x00000024,
+ 0x59240005, 0x592c080a, 0x82041500, 0x00ffffff,
+ 0x80081580, 0x0400000f, 0x80040932, 0x82040580,
+ 0x00000042, 0x0402000e, 0x49365803, 0x0401f908,
+ 0x80000580, 0x1c01f000, 0x42001000, 0x0000000a,
+ 0x0401f00f, 0x42001000, 0x00000010, 0x0401f00c,
+ 0x42001000, 0x00000014, 0x0401f009, 0x42001000,
+ 0x00000017, 0x0401f006, 0x42001000, 0x00000018,
+ 0x0401f003, 0x42001000, 0x0000003c, 0x492fc857,
+ 0x480bc857, 0x42000800, 0x00000019, 0x42028000,
+ 0x00000031, 0x82000540, 0x00000001, 0x0401f7e6,
+ 0x492fc857, 0x4803c857, 0x480bc857, 0x40000800,
+ 0x0401f7f7, 0x492fc857, 0x42000800, 0x0000000a,
+ 0x41781000, 0x0401f7f2, 0x41780800, 0x41781000,
+ 0x0401f7f1, 0x42000800, 0x0000001e, 0x0401f7f9,
+ 0x42000800, 0x00000001, 0x0401f7f6, 0x82004d80,
+ 0x0000001d, 0x02000800, 0x0010032f, 0x82004d80,
+ 0x0000001a, 0x04020003, 0x40101000, 0x0401f7e5,
+ 0x82004d80, 0x0000001b, 0x04020003, 0x40181000,
+ 0x0401f7e0, 0x82004d80, 0x0000001c, 0x040007dd,
+ 0x82004d80, 0x00000019, 0x040007da, 0x0401f7de,
+ 0x0201f800, 0x0010bd16, 0x42028000, 0x00000000,
+ 0x0401f7de, 0x5c000000, 0x4c000000, 0x4803c857,
+ 0x5930200a, 0x801021c0, 0x04000035, 0x58101400,
+ 0x4813c857, 0x480bc857, 0x82081d00, 0x000000ff,
+ 0x59300c03, 0x82040580, 0x00000008, 0x04000022,
+ 0x82040580, 0x0000000a, 0x04000017, 0x82040580,
+ 0x0000000c, 0x04000010, 0x82040580, 0x00000002,
+ 0x04000019, 0x82040580, 0x00000001, 0x04000012,
+ 0x82040580, 0x00000003, 0x0400000b, 0x82040580,
+ 0x00000005, 0x04000004, 0x82040580, 0x00000033,
+ 0x04020017, 0x820c0580, 0x00000009, 0x0400000d,
+ 0x0401f013, 0x820c0580, 0x00000005, 0x04000009,
+ 0x0401f00f, 0x820c0580, 0x0000000b, 0x04000005,
+ 0x0401f00b, 0x820c0580, 0x00000003, 0x04020008,
+ 0x82081d00, 0xffffff00, 0x840c01c0, 0x800c0540,
+ 0x4807c857, 0x4803c857, 0x48002400, 0x1c01f000,
+ 0x0401f807, 0x42018800, 0x00000001, 0x04020003,
+ 0x42018800, 0x00000000, 0x1c01f000, 0x599c0017,
+ 0x8c00050a, 0x04000003, 0x80000580, 0x1c01f000,
+ 0x59a80221, 0x82000500, 0x00000028, 0x04000008,
+ 0x42028800, 0x000007fd, 0x417a4000, 0x0401fd5e,
+ 0x04020003, 0x5934000a, 0x8c000504, 0x1c01f000,
+ 0x4d300000, 0x5934000e, 0x80026540, 0x04000006,
+ 0x0201f800, 0x00106c04, 0x02000800, 0x00106ddc,
+ 0x497a680e, 0x5c026000, 0x1c01f000, 0x4d440000,
+ 0x4d340000, 0x80000580, 0x40001800, 0x40028800,
+ 0x82080580, 0x00000008, 0x04020003, 0x42001800,
+ 0x00000001, 0x0201f800, 0x00020353, 0x0402000a,
+ 0x0401fce1, 0x04020008, 0x800c19c0, 0x04000004,
+ 0x59340405, 0x8c000508, 0x04000003, 0x80081040,
+ 0x04000009, 0x81468800, 0x83440480, 0x00000800,
+ 0x040017f1, 0x80000580, 0x5c026800, 0x5c028800,
+ 0x1c01f000, 0x82000540, 0x00000001, 0x5c026800,
+ 0x5c028800, 0x1c01f000, 0x42000800, 0x00000008,
+ 0x59bc00e4, 0x8c000524, 0x0402002e, 0x59a80221,
+ 0x8c000508, 0x0402002b, 0x5934100a, 0x82081500,
+ 0x0002e000, 0x41781800, 0x82080580, 0x00000000,
+ 0x04000006, 0x800c1800, 0x82080580, 0x00002000,
+ 0x04000002, 0x800c1800, 0x42007000, 0x0010d1b1,
+ 0x58380401, 0x8c000504, 0x04000007, 0x820c2c80,
+ 0x00000003, 0x04021017, 0x820c0400, 0x00104ede,
+ 0x0401f013, 0x41782000, 0x59342a04, 0x82140480,
+ 0x00000800, 0x04021006, 0x80102000, 0x82140480,
+ 0x00000400, 0x04021002, 0x80102000, 0x800c00c2,
+ 0x800c0400, 0x80100400, 0x82002c80, 0x00000006,
+ 0x04021004, 0x82000400, 0x00104ee1, 0x50000800,
+ 0x48066c04, 0x1c01f000, 0x00000002, 0x00000004,
+ 0x00000008, 0x00002802, 0x00001402, 0x00000a02,
+ 0x00001402, 0x00000a02, 0x00000502, 0x59a80859,
+ 0x800409c0, 0x04020005, 0x492f5058, 0x492f5059,
+ 0x0201f000, 0x001081c1, 0x492c0800, 0x492f5059,
+ 0x1c01f000, 0x5934000f, 0x41784000, 0x80001540,
+ 0x04000010, 0x58080205, 0x82000500, 0x000000ff,
+ 0x82000580, 0x00000012, 0x04000004, 0x82000580,
+ 0x00000060, 0x04020004, 0x5808020d, 0x80040580,
+ 0x04000006, 0x58080000, 0x40084000, 0x0401f7f0,
+ 0x82000540, 0x00000001, 0x1c01f000, 0x42000000,
+ 0x0010e85a, 0x4a000400, 0x00000707, 0x4a000204,
+ 0x00000840, 0x4a000403, 0x0000ffff, 0x49780200,
+ 0x1c01f000, 0x4d340000, 0x4d440000, 0x4c580000,
+ 0x4200b000, 0x000007f0, 0x4803c856, 0x417a8800,
+ 0x0201f800, 0x00020353, 0x04020006, 0x59340200,
+ 0x8c00051a, 0x04000003, 0x8400051a, 0x48026a00,
+ 0x81468800, 0x8058b040, 0x040207f6, 0x5c00b000,
+ 0x5c028800, 0x5c026800, 0x1c01f000, 0x592c2a05,
+ 0x82142d00, 0x000000ff, 0x82140580, 0x00000012,
+ 0x04000006, 0x82140580, 0x00000072, 0x04000003,
+ 0x82000540, 0x00000001, 0x1c01f000, 0x4a033011,
+ 0x00000000, 0x4a03b104, 0x80000000, 0x59d80105,
0x4a03b104, 0x60000001, 0x497b3016, 0x497b3017,
0x1c01f000, 0x599c0018, 0x4803c856, 0x497b3014,
0x497b3015, 0x82000500, 0x0000000f, 0x48033012,
@@ -19593,11 +5116,11 @@ static const uint32_t isp_2400_multi_risc_code[] = {
0x00000001, 0x1c01f000, 0x8d0e1d20, 0x04020004,
0x4a033011, 0x00000002, 0x0401f7fb, 0x4a033011,
0x00000003, 0x0401f7f8, 0x592c0205, 0x492fc857,
- 0x80000540, 0x04000008, 0x42034000, 0x0010caff,
- 0x59a1d806, 0x80edd9c0, 0x02000800, 0x0010032e,
- 0x0401f007, 0x0201f800, 0x0010a2d8, 0x02020800,
- 0x0010032e, 0x5931d82a, 0x58ef400a, 0x58ec0008,
- 0x800001c0, 0x02000800, 0x0010032e, 0x0801f800,
+ 0x80000540, 0x04000008, 0x42034000, 0x0010d115,
+ 0x59a1d806, 0x80edd9c0, 0x02000800, 0x0010032f,
+ 0x0401f007, 0x0201f800, 0x0010a6dc, 0x02020800,
+ 0x0010032f, 0x5931d82a, 0x58ef400a, 0x58ec0008,
+ 0x800001c0, 0x02000800, 0x0010032f, 0x0801f800,
0x1c01f000, 0x40680800, 0x5c000000, 0x4c000000,
0x4803c857, 0x492fc857, 0x4943c857, 0x4807c857,
0x4a025a05, 0x00000103, 0x49425a07, 0x48065a09,
@@ -19606,23 +5129,23 @@ static const uint32_t isp_2400_multi_risc_code[] = {
0x04020008, 0x832c0400, 0x0000000a, 0x04011000,
0x4803c840, 0x4a03c842, 0x0000000b, 0x04011000,
0x1c01f000, 0x40680000, 0x4c540000, 0x4c580000,
- 0x4c5c0000, 0x4d2c0000, 0x4000b800, 0x0201f800,
- 0x0010c0ca, 0x4178a800, 0x0201f800, 0x0010056e,
- 0x040000b3, 0x04011000, 0x485fc857, 0x4943c857,
- 0x4923c857, 0x832c0400, 0x00000005, 0x4803c840,
+ 0x4c5c0000, 0x4d2c0000, 0x4c600000, 0x400cc000,
+ 0x4000b800, 0x0201f800, 0x0010c621, 0x4178a800,
+ 0x0201f800, 0x00100584, 0x040000e8, 0x04011000,
+ 0x485fc857, 0x832c0400, 0x00000005, 0x4803c840,
0x4a03c842, 0x00000010, 0x40000000, 0x040117ff,
0x412c7000, 0x4a025805, 0x00000132, 0x497a5806,
0x805cb9c0, 0x04020074, 0x832e5c00, 0x00000008,
- 0x417a4000, 0x42024800, 0x0010cfd1, 0x41786800,
+ 0x417a4000, 0x42024800, 0x0010d5ef, 0x41786800,
0x59240a00, 0x82040500, 0x0000000f, 0x0c01f001,
- 0x00104e75, 0x00104e75, 0x00104e75, 0x00104e75,
- 0x00104e75, 0x00104e75, 0x00104e75, 0x00104e6c,
- 0x00104e75, 0x00104e75, 0x00104e75, 0x00104e75,
- 0x00104e75, 0x00104e75, 0x00104e75, 0x00104e75,
+ 0x00104fed, 0x00104fed, 0x00104fed, 0x00104fed,
+ 0x00104fed, 0x00104fed, 0x00104fed, 0x00104fe4,
+ 0x00104fed, 0x00104fed, 0x00104fed, 0x00104fed,
+ 0x00104fed, 0x00104fed, 0x00104fed, 0x00104fed,
0x8054a800, 0x812241c0, 0x04020007, 0x59240805,
0x805c00f0, 0x80040d40, 0x48065800, 0x812e5800,
0x0401f03f, 0x82340500, 0x00000003, 0x0c01f001,
- 0x00104e7c, 0x00104e87, 0x00104e93, 0x00104e9f,
+ 0x00104ff4, 0x00104fff, 0x0010500b, 0x00105017,
0x83200580, 0x00000001, 0x04020004, 0x42002000,
0x00000001, 0x0401f02a, 0x83200480, 0x00000020,
0x04001026, 0x80346800, 0x0401f024, 0x83200580,
@@ -19638,1581 +5161,1703 @@ static const uint32_t isp_2400_multi_risc_code[] = {
0x00000007, 0x82000580, 0x00000007, 0x04020004,
0x592c0000, 0x80100540, 0x48025800, 0x83264c00,
0x0000000b, 0x81224000, 0x8058b040, 0x040207a1,
- 0x8054a9c0, 0x403a5800, 0x04000037, 0x0201f800,
- 0x0010c0ca, 0x0201f800, 0x0010c0e8, 0x04020002,
+ 0x8054a9c0, 0x403a5800, 0x0400006e, 0x0201f800,
+ 0x0010c621, 0x0201f800, 0x0010c63f, 0x04020002,
0x8058b040, 0x805800d0, 0x80540540, 0x48025a07,
- 0x0401f024, 0x83400580, 0x00000001, 0x04020005,
- 0x48165a09, 0x82140580, 0x00000003, 0x04000023,
- 0x83400d00, 0x000000ff, 0x82040580, 0x00000004,
- 0x0400001e, 0x82040580, 0x00000006, 0x0400001b,
- 0x83400d00, 0x0000ff00, 0x04000003, 0x81400110,
- 0x4802580d, 0x814000d0, 0x81200540, 0x48025c07,
- 0x0201f800, 0x0010c0e8, 0x04020002, 0x8058b040,
- 0x805800d0, 0x82000540, 0x00000001, 0x48025a07,
- 0x59240805, 0x805c00f0, 0x80040d40, 0x48065808,
- 0x0201f800, 0x0010c0f9, 0x0402000e, 0x0201f800,
- 0x000203ef, 0x0401f006, 0x59cc0007, 0x4802580d,
- 0x0401f7e9, 0x0201f800, 0x00100594, 0x5c025800,
+ 0x0401f05b, 0x4943c857, 0x4923c857, 0x83400580,
+ 0x00000001, 0x04020005, 0x48165a09, 0x82140580,
+ 0x00000003, 0x04000058, 0x83400d00, 0x000000ff,
+ 0x82040580, 0x00000004, 0x04000053, 0x82040580,
+ 0x00000006, 0x04000050, 0x83400d00, 0x0000ff00,
+ 0x04000003, 0x81400110, 0x4802580d, 0x814000d0,
+ 0x81200540, 0x48025c07, 0x0201f800, 0x0010c63f,
+ 0x04020002, 0x8058b040, 0x805800d0, 0x82000540,
+ 0x00000001, 0x48025a07, 0x59240805, 0x805c00f0,
+ 0x80040d40, 0x48065808, 0x592c0209, 0x80600540,
+ 0x48025a09, 0x83400d80, 0x00000001, 0x04000030,
+ 0x4d340000, 0x4d440000, 0x42028800, 0x000007fe,
+ 0x0201f800, 0x00104bd5, 0x02020800, 0x0010032f,
+ 0x592c0209, 0x8400055a, 0x48025a09, 0x59340006,
+ 0x9c0001c0, 0x4802580f, 0x59340007, 0x9c0001c0,
+ 0x48025810, 0x59340008, 0x9c0001c0, 0x48025811,
+ 0x59340009, 0x9c0001c0, 0x48025812, 0x0401fa2b,
+ 0x04020007, 0x59a80221, 0x8c000508, 0x04020007,
+ 0x42000800, 0x00000600, 0x0401f009, 0x42000800,
+ 0x00000200, 0x0401f006, 0x592c0209, 0x84000558,
+ 0x48025a09, 0x42000800, 0x00000400, 0x592c0209,
+ 0x82000500, 0x0000f1ff, 0x80040540, 0x4803c857,
+ 0x48025a09, 0x5c028800, 0x5c026800, 0x0201f800,
+ 0x0010c669, 0x0402000f, 0x0201f800, 0x00020401,
+ 0x0401f006, 0x59cc0007, 0x4802580d, 0x0401f7b4,
+ 0x0201f800, 0x001005aa, 0x5c00c000, 0x5c025800,
0x5c00b800, 0x5c00b000, 0x5c00a800, 0x1c01f000,
- 0x0201f800, 0x0010b674, 0x0401f7f9, 0x59a80011,
- 0x82000c80, 0x0000000a, 0x02021800, 0x0010032e,
+ 0x0201f800, 0x0010bbc5, 0x0401f7f8, 0x59a80017,
+ 0x82000c80, 0x0000000a, 0x02021800, 0x0010032f,
0x0c01f809, 0x4a038805, 0x000000f0, 0x59c400a3,
- 0x82000500, 0x02870000, 0x02020800, 0x0010032e,
- 0x1c01f000, 0x00104fa2, 0x00104f14, 0x00104f33,
- 0x00104f67, 0x00104f92, 0x0010032e, 0x0010032e,
- 0x00104f33, 0x0010032e, 0x00104f13, 0x1c01f000,
- 0x42002000, 0x00000003, 0x0201f800, 0x00105408,
- 0x4a038808, 0x00000004, 0x0201f800, 0x001053ef,
+ 0x82000500, 0x02870000, 0x02020800, 0x0010032f,
+ 0x1c01f000, 0x00105153, 0x001050c4, 0x001050e3,
+ 0x00105118, 0x00105143, 0x0010032f, 0x0010032f,
+ 0x001050e3, 0x0010032f, 0x001050c3, 0x1c01f000,
+ 0x42002000, 0x00000003, 0x0201f800, 0x001055b7,
+ 0x4a038808, 0x00000004, 0x0201f800, 0x0010559e,
0x59c40805, 0x8c040d0e, 0x04020014, 0x8c040d0a,
0x0402000b, 0x8c040d0c, 0x04020006, 0x8c040d08,
- 0x0400000e, 0x4a035011, 0x00000003, 0x0401f00a,
- 0x4a035011, 0x00000000, 0x0401f007, 0x42000000,
- 0x0010ce78, 0x0201f800, 0x0010bfb3, 0x4a035011,
- 0x00000002, 0x0401f8c6, 0x1c01f000, 0x59a80078,
- 0x8c00053e, 0x04020018, 0x42002000, 0x00000000,
- 0x0201f800, 0x00105408, 0x4a038808, 0x00000002,
- 0x59c40805, 0x8c040d08, 0x04020025, 0x8c040d0c,
- 0x04020020, 0x8c040d0e, 0x0402001b, 0x82040500,
- 0x000000f0, 0x04020021, 0x0201f800, 0x001053ef,
- 0x4a038808, 0x00000080, 0x59c40002, 0x8400050c,
- 0x48038802, 0x0401f9dd, 0x4d3c0000, 0x42027800,
- 0x00000001, 0x0201f800, 0x0010a242, 0x5c027800,
- 0x4a038808, 0x00000080, 0x42002000, 0x00000002,
- 0x0201f800, 0x00105408, 0x4a035011, 0x00000009,
- 0x0401f00a, 0x4a035011, 0x00000001, 0x0401f006,
- 0x4a035011, 0x00000000, 0x0401f003, 0x4a035011,
- 0x00000003, 0x0401f892, 0x1c01f000, 0x42002000,
- 0x00000001, 0x0201f800, 0x00105408, 0x4a038808,
- 0x00000080, 0x59c40805, 0x8c040d0a, 0x0402001f,
- 0x8c040d0c, 0x0402001a, 0x8c040d0e, 0x04020015,
- 0x82040500, 0x000000f0, 0x0402001b, 0x59c40002,
- 0x8400050c, 0x48038802, 0x0401f9b0, 0x4d3c0000,
- 0x42027800, 0x00000001, 0x0201f800, 0x0010a242,
- 0x5c027800, 0x42002000, 0x00000002, 0x0201f800,
- 0x00105408, 0x4a035011, 0x00000009, 0x0401f00a,
- 0x4a035011, 0x00000001, 0x0401f006, 0x4a035011,
- 0x00000000, 0x0401f003, 0x4a035011, 0x00000002,
- 0x0401f867, 0x1c01f000, 0x0201f800, 0x0010553c,
- 0x4a038808, 0x00000008, 0x59c40805, 0x8c040d0c,
- 0x04020006, 0x8c040d0e, 0x04000007, 0x4a035011,
- 0x00000001, 0x0401f003, 0x4a035011, 0x00000000,
- 0x0401f857, 0x1c01f000, 0x42002000, 0x00000004,
- 0x0201f800, 0x00105408, 0x0401f8a0, 0x59c40805,
- 0x8c040d0c, 0x0402000b, 0x8c040d0a, 0x04020006,
- 0x8c040d0e, 0x04000007, 0x4a035011, 0x00000001,
- 0x0401f003, 0x4a035011, 0x00000002, 0x0401f844,
- 0x1c01f000, 0x0401f942, 0x02020800, 0x0010032e,
- 0x59a80878, 0x8c040d3e, 0x04000004, 0x4a035014,
- 0x00000001, 0x0401f039, 0x42002000, 0x00000007,
- 0x0201f800, 0x00105408, 0x8d0e1d0c, 0x04000014,
- 0x850e1d0c, 0x4a038805, 0x00000010, 0x0201f800,
- 0x0010193a, 0x59c40005, 0x8c000508, 0x04000008,
- 0x4a038808, 0x00000008, 0x4a035014, 0x00000001,
- 0x4202d800, 0x00000001, 0x0401f024, 0x59c40006,
- 0x84000548, 0x48038806, 0x0401f020, 0x59a80011,
- 0x82000580, 0x00000001, 0x0402001a, 0x42000000,
- 0x0010ce78, 0x0201f800, 0x0010bfb3, 0x4ce80000,
- 0x4201d000, 0x000003e8, 0x0201f800, 0x00106661,
- 0x59c40005, 0x82000500, 0x00000030, 0x0400000c,
- 0x8c00050a, 0x04000006, 0x42002000, 0x00000000,
- 0x0201f800, 0x00105408, 0x0401f005, 0x42002000,
- 0x00000001, 0x0201f800, 0x00105408, 0x5c01d000,
- 0x4a035011, 0x00000004, 0x1c01f000, 0x4c040000,
- 0x4c080000, 0x42000800, 0x00000064, 0x42001000,
- 0x00105002, 0x0201f800, 0x00106643, 0x5c001000,
+ 0x0400000e, 0x4a035017, 0x00000003, 0x0401f00a,
+ 0x4a035017, 0x00000000, 0x0401f007, 0x42000000,
+ 0x0010d48e, 0x0201f800, 0x0010c50a, 0x4a035017,
+ 0x00000002, 0x0401f8c9, 0x1c01f000, 0x59a80086,
+ 0x8c00053e, 0x04020019, 0x497b505b, 0x42002000,
+ 0x00000000, 0x0201f800, 0x001055b7, 0x4a038808,
+ 0x00000002, 0x59c40805, 0x8c040d08, 0x04020025,
+ 0x8c040d0c, 0x04020020, 0x8c040d0e, 0x0402001b,
+ 0x82040500, 0x000000f0, 0x04020021, 0x0201f800,
+ 0x0010559e, 0x4a038808, 0x00000080, 0x59c40002,
+ 0x8400050c, 0x48038802, 0x0401f9df, 0x4d3c0000,
+ 0x42027800, 0x00000001, 0x0201f800, 0x0010a641,
+ 0x5c027800, 0x4a038808, 0x00000080, 0x42002000,
+ 0x00000002, 0x0201f800, 0x001055b7, 0x4a035017,
+ 0x00000009, 0x0401f00a, 0x4a035017, 0x00000001,
+ 0x0401f006, 0x4a035017, 0x00000000, 0x0401f003,
+ 0x4a035017, 0x00000003, 0x0401f894, 0x1c01f000,
+ 0x42002000, 0x00000001, 0x0201f800, 0x001055b7,
+ 0x4a038808, 0x00000080, 0x59c40805, 0x8c040d0a,
+ 0x0402001f, 0x8c040d0c, 0x0402001a, 0x8c040d0e,
+ 0x04020015, 0x82040500, 0x000000f0, 0x0402001b,
+ 0x59c40002, 0x8400050c, 0x48038802, 0x0401f9b2,
+ 0x4d3c0000, 0x42027800, 0x00000001, 0x0201f800,
+ 0x0010a641, 0x5c027800, 0x42002000, 0x00000002,
+ 0x0201f800, 0x001055b7, 0x4a035017, 0x00000009,
+ 0x0401f00a, 0x4a035017, 0x00000001, 0x0401f006,
+ 0x4a035017, 0x00000000, 0x0401f003, 0x4a035017,
+ 0x00000002, 0x0401f869, 0x1c01f000, 0x0201f800,
+ 0x001056eb, 0x4a038808, 0x00000008, 0x59c40805,
+ 0x8c040d0c, 0x04020006, 0x8c040d0e, 0x04000007,
+ 0x4a035017, 0x00000001, 0x0401f003, 0x4a035017,
+ 0x00000000, 0x0401f859, 0x1c01f000, 0x42002000,
+ 0x00000004, 0x0201f800, 0x001055b7, 0x0401f8a2,
+ 0x59c40805, 0x8c040d0c, 0x0402000b, 0x8c040d0a,
+ 0x04020006, 0x8c040d0e, 0x04000007, 0x4a035017,
+ 0x00000001, 0x0401f003, 0x4a035017, 0x00000002,
+ 0x0401f846, 0x1c01f000, 0x0401f944, 0x02020800,
+ 0x0010032f, 0x59a80886, 0x8c040d3e, 0x04000004,
+ 0x4a03501a, 0x00000001, 0x0401f03b, 0x0201f800,
+ 0x0010573c, 0x42002000, 0x00000007, 0x0201f800,
+ 0x001055b7, 0x8d0e1d0c, 0x04000014, 0x850e1d0c,
+ 0x4a038805, 0x00000010, 0x0201f800, 0x001019a8,
+ 0x59c40005, 0x8c000508, 0x04000008, 0x4a038808,
+ 0x00000008, 0x4a03501a, 0x00000001, 0x4202d800,
+ 0x00000001, 0x0401f024, 0x59c40006, 0x84000548,
+ 0x48038806, 0x0401f020, 0x59a80017, 0x82000580,
+ 0x00000001, 0x0402001a, 0x42000000, 0x0010d48e,
+ 0x0201f800, 0x0010c50a, 0x4ce80000, 0x4201d000,
+ 0x000003e8, 0x0201f800, 0x001069c8, 0x59c40005,
+ 0x82000500, 0x00000030, 0x0400000c, 0x8c00050a,
+ 0x04000006, 0x42002000, 0x00000000, 0x0201f800,
+ 0x001055b7, 0x0401f005, 0x42002000, 0x00000001,
+ 0x0201f800, 0x001055b7, 0x5c01d000, 0x4a035017,
+ 0x00000004, 0x1c01f000, 0x4c040000, 0x4c080000,
+ 0x42000800, 0x00000064, 0x42001000, 0x001051b5,
+ 0x0201f800, 0x001069b0, 0x5c001000, 0x5c000800,
+ 0x1c01f000, 0x4803c856, 0x4c040000, 0x0201f800,
+ 0x001071b0, 0x4df00000, 0x0201f800, 0x0010744d,
+ 0x5c03e000, 0x02000800, 0x0010719d, 0x42000000,
+ 0x0010d48d, 0x0201f800, 0x0010c50a, 0x0401ffa3,
0x5c000800, 0x1c01f000, 0x4803c856, 0x4c040000,
- 0x0201f800, 0x00106e41, 0x4df00000, 0x0201f800,
- 0x001070de, 0x5c03e000, 0x02000800, 0x00106e2e,
- 0x42000000, 0x0010ce77, 0x0201f800, 0x0010bfb3,
- 0x0401ffa5, 0x5c000800, 0x1c01f000, 0x4803c856,
- 0x4c040000, 0x4c080000, 0x0201f800, 0x00106e41,
- 0x4df00000, 0x0201f800, 0x001070de, 0x5c03e000,
- 0x02000800, 0x00106e2e, 0x59c40006, 0x84000500,
- 0x48038806, 0x0201f800, 0x001071b4, 0x497b8880,
- 0x42000000, 0x0010ce76, 0x0201f800, 0x0010bfb3,
- 0x0201f800, 0x00101820, 0x4a035058, 0x00000004,
- 0x4202d800, 0x00000004, 0x4a038805, 0x00000001,
- 0x42001000, 0x00105002, 0x0201f800, 0x0010664e,
- 0x0201f800, 0x00100455, 0x0401f8dd, 0x04000006,
- 0x42006000, 0xfeffffff, 0x41786800, 0x0201f800,
- 0x001042a6, 0x0201f800, 0x00110d6d, 0x42000000,
- 0x00000080, 0x0201f800, 0x0010155d, 0x5c001000,
- 0x5c000800, 0x1c01f000, 0x59c40008, 0x82000580,
- 0x00000010, 0x04000007, 0x4a038808, 0x00000010,
- 0x4201d000, 0x00001388, 0x0201f800, 0x00106661,
- 0x1c01f000, 0x4c040000, 0x59a80814, 0x82040580,
- 0x00000000, 0x0400000b, 0x82040580, 0x00000001,
- 0x0400000b, 0x82040580, 0x00000002, 0x04000013,
- 0x82040580, 0x00000003, 0x04000013, 0x0401f05d,
- 0x4a035011, 0x00000000, 0x0401f011, 0x59a80878,
- 0x8c040d3e, 0x04000006, 0x4a035011, 0x00000003,
- 0x4a035014, 0x00000004, 0x0401f052, 0x4a035011,
- 0x00000004, 0x0401f006, 0x4a035011, 0x00000001,
- 0x0401f003, 0x4a035011, 0x00000007, 0x497b8880,
- 0x4a038893, 0x00000001, 0x41780000, 0x0201f800,
- 0x001015e5, 0x0201f800, 0x001071b4, 0x836c0d80,
- 0x00000004, 0x04000008, 0x59c40006, 0x82000500,
- 0xffffff0f, 0x82000540, 0x04000001, 0x48038806,
- 0x0401f007, 0x59c40006, 0x82000500, 0xffffff0f,
- 0x82000540, 0x04000000, 0x48038806, 0x0401f888,
- 0x04020005, 0x59c40806, 0x82040d00, 0xfbffff0f,
- 0x48078806, 0x59c40005, 0x8c000534, 0x04020033,
- 0x42006000, 0xfc18ffff, 0x42006800, 0x01000000,
- 0x0201f800, 0x001042a6, 0x0201f800, 0x0010193a,
- 0x59c408a4, 0x82040d00, 0x0000000f, 0x82040d80,
- 0x0000000c, 0x040208bf, 0x0401f871, 0x04000006,
- 0x42006000, 0xfeffffff, 0x41786800, 0x0201f800,
- 0x001042a6, 0x836c0d80, 0x00000004, 0x0400000f,
- 0x0401ff4b, 0x5994102e, 0x41780800, 0x42000000,
- 0x0000000a, 0x0201f800, 0x00106c9d, 0x40080000,
- 0x59a80831, 0x80040c00, 0x42001000, 0x00105013,
- 0x0201f800, 0x00106638, 0x4a035014, 0x00000004,
- 0x0401fe3f, 0x0401f856, 0x04020008, 0x59c408a4,
- 0x82040d00, 0x0000000f, 0x82040580, 0x0000000c,
- 0x02020800, 0x0010032e, 0x5c000800, 0x1c01f000,
- 0x4803c856, 0x4c000000, 0x0201f800, 0x00106671,
- 0x4a03500f, 0x00ffffff, 0x497b5013, 0x59a8001f,
- 0x82000500, 0xffff0000, 0x4803501f, 0x497b8880,
- 0x497b8893, 0x41780000, 0x0201f800, 0x001015e5,
- 0x59c40001, 0x82000500, 0xfffffcff, 0x48038801,
- 0x42006000, 0xfc18ffff, 0x41786800, 0x0201f800,
- 0x001042a6, 0x4a038808, 0x00000000, 0x5c000000,
- 0x800001c0, 0x02020800, 0x0010410a, 0x4a038805,
- 0x040000f0, 0x59c40006, 0x82000500, 0xffffffcf,
- 0x82000540, 0x440000c1, 0x48038806, 0x1c01f000,
- 0x0401f807, 0x42018800, 0x00000001, 0x04000003,
- 0x42018800, 0x00000000, 0x1c01f000, 0x4c5c0000,
- 0x59a8b813, 0x825cbd80, 0x0000aaaa, 0x5c00b800,
- 0x1c01f000, 0x0401f807, 0x42018800, 0x00000001,
- 0x04000003, 0x42018800, 0x00000000, 0x1c01f000,
- 0x4c5c0000, 0x599cb818, 0x825cbd00, 0x00000030,
- 0x825cbd80, 0x00000000, 0x5c00b800, 0x1c01f000,
+ 0x4c080000, 0x0201f800, 0x001071b0, 0x4df00000,
+ 0x0201f800, 0x0010744d, 0x5c03e000, 0x02000800,
+ 0x0010719d, 0x59c40006, 0x84000500, 0x48038806,
+ 0x0201f800, 0x00107523, 0x497b8880, 0x42000000,
+ 0x0010d48c, 0x0201f800, 0x0010c50a, 0x0201f800,
+ 0x0010188e, 0x4a035066, 0x00000004, 0x4202d800,
+ 0x00000004, 0x4a038805, 0x00000001, 0x42001000,
+ 0x001051b5, 0x0201f800, 0x001069b8, 0x0201f800,
+ 0x0010045e, 0x0401f8dd, 0x04000006, 0x42006000,
+ 0xfeffffff, 0x41786800, 0x0201f800, 0x001043b7,
+ 0x0201f800, 0x001114ae, 0x42000000, 0x00000080,
+ 0x0201f800, 0x001015bf, 0x5c001000, 0x5c000800,
+ 0x1c01f000, 0x59c40008, 0x82000580, 0x00000010,
+ 0x04000007, 0x4a038808, 0x00000010, 0x4201d000,
+ 0x00001388, 0x0201f800, 0x001069c8, 0x1c01f000,
+ 0x4c040000, 0x59a8081a, 0x82040580, 0x00000000,
+ 0x0400000b, 0x82040580, 0x00000001, 0x0400000b,
+ 0x82040580, 0x00000002, 0x04000013, 0x82040580,
+ 0x00000003, 0x04000013, 0x0401f05d, 0x4a035017,
+ 0x00000000, 0x0401f011, 0x59a80886, 0x8c040d3e,
+ 0x04000006, 0x4a035017, 0x00000003, 0x4a03501a,
+ 0x00000004, 0x0401f052, 0x4a035017, 0x00000004,
+ 0x0401f006, 0x4a035017, 0x00000001, 0x0401f003,
+ 0x4a035017, 0x00000007, 0x497b8880, 0x4a038893,
+ 0x00000001, 0x41780000, 0x0201f800, 0x00101653,
+ 0x0201f800, 0x00107523, 0x836c0d80, 0x00000004,
+ 0x04000008, 0x59c40006, 0x82000500, 0xffffff0f,
+ 0x82000540, 0x04000001, 0x48038806, 0x0401f007,
+ 0x59c40006, 0x82000500, 0xffffff0f, 0x82000540,
+ 0x04000000, 0x48038806, 0x0401f888, 0x04020005,
+ 0x59c40806, 0x82040d00, 0xfbffff0f, 0x48078806,
+ 0x59c40005, 0x8c000534, 0x04020033, 0x42006000,
+ 0xfc18ffff, 0x42006800, 0x01000000, 0x0201f800,
+ 0x001043b7, 0x0201f800, 0x001019a8, 0x59c408a4,
+ 0x82040d00, 0x0000000f, 0x82040d80, 0x0000000c,
+ 0x040208bf, 0x0401f871, 0x04000006, 0x42006000,
+ 0xfeffffff, 0x41786800, 0x0201f800, 0x001043b7,
+ 0x836c0d80, 0x00000004, 0x0400000f, 0x0401ff4b,
+ 0x5994102e, 0x41780800, 0x42000000, 0x0000000a,
+ 0x0201f800, 0x00107000, 0x40080000, 0x59a80837,
+ 0x80040c00, 0x42001000, 0x001051c6, 0x0201f800,
+ 0x001069a8, 0x4a03501a, 0x00000004, 0x0401fe3c,
+ 0x0401f856, 0x04020008, 0x59c408a4, 0x82040d00,
+ 0x0000000f, 0x82040580, 0x0000000c, 0x02020800,
+ 0x0010032f, 0x5c000800, 0x1c01f000, 0x4803c856,
+ 0x4c000000, 0x0201f800, 0x001069d1, 0x4a035015,
+ 0x00ffffff, 0x497b5019, 0x59a80025, 0x82000500,
+ 0xffff0000, 0x48035025, 0x497b8880, 0x497b8893,
+ 0x41780000, 0x0201f800, 0x00101653, 0x59c40001,
+ 0x82000500, 0xfffffcff, 0x48038801, 0x42006000,
+ 0xfc18ffff, 0x41786800, 0x0201f800, 0x001043b7,
+ 0x4a038808, 0x00000000, 0x5c000000, 0x800001c0,
+ 0x02020800, 0x001041f5, 0x4a038805, 0x040000f0,
+ 0x59c40006, 0x82000500, 0xffffffcf, 0x82000540,
+ 0x440000c1, 0x48038806, 0x1c01f000, 0x0401f807,
+ 0x42018800, 0x00000001, 0x04000003, 0x42018800,
+ 0x00000000, 0x1c01f000, 0x4c5c0000, 0x59a8b819,
+ 0x825cbd80, 0x0000aaaa, 0x5c00b800, 0x1c01f000,
0x0401f807, 0x42018800, 0x00000001, 0x04000003,
0x42018800, 0x00000000, 0x1c01f000, 0x4c5c0000,
0x599cb818, 0x825cbd00, 0x00000030, 0x825cbd80,
- 0x00000010, 0x5c00b800, 0x1c01f000, 0x0401f807,
+ 0x00000000, 0x5c00b800, 0x1c01f000, 0x0401f807,
0x42018800, 0x00000001, 0x04000003, 0x42018800,
0x00000000, 0x1c01f000, 0x4c5c0000, 0x599cb818,
- 0x825cbd00, 0x00000030, 0x825cbd80, 0x00000020,
- 0x5c00b800, 0x1c01f000, 0x490fc857, 0x830c0d00,
- 0x00000013, 0x04000026, 0x599c1017, 0x4d3c0000,
- 0x830c0500, 0x00000011, 0x04000005, 0x417a7800,
- 0x8d0e1d20, 0x04020009, 0x0401f015, 0x42027800,
- 0x00000008, 0x8d0e1d20, 0x04000011, 0x42003000,
- 0x00000003, 0x0401f003, 0x42003000, 0x00000004,
- 0x42028000, 0x0000000e, 0x4d200000, 0x42024000,
- 0x000000ff, 0x0201f800, 0x0010b198, 0x5c024000,
- 0x599c1017, 0x8c08150a, 0x04020007, 0x42028000,
- 0x00000004, 0x0201f800, 0x0010fef2, 0x4803c856,
- 0x850e1d08, 0x5c027800, 0x0401f00d, 0x8d0e1d20,
- 0x0400000b, 0x42028000, 0x0000000f, 0x42003000,
- 0x00000001, 0x4d200000, 0x42024000, 0x000000ff,
- 0x0201f800, 0x0010b198, 0x5c024000, 0x1c01f000,
- 0x4803c856, 0x4c580000, 0x42000000, 0x0010cf8c,
- 0x0201f800, 0x0010bfb3, 0x42000800, 0x0010e4fe,
- 0x59c40003, 0x44000800, 0x59c40004, 0x48000801,
- 0x59c4000b, 0x48000802, 0x59c4008e, 0x48000803,
- 0x59c4008f, 0x48000804, 0x59c40090, 0x48000805,
- 0x59c40091, 0x48000806, 0x59c40092, 0x48000807,
- 0x59c40093, 0x48000808, 0x59c40099, 0x48000809,
- 0x59c4009e, 0x4800080a, 0x59c400aa, 0x4800080b,
- 0x59c400af, 0x4800080c, 0x59c400b2, 0x4800080d,
- 0x59c400b1, 0x4800080e, 0x82040c00, 0x0000000f,
- 0x41c41800, 0x4200b000, 0x00000030, 0x580c0050,
- 0x44000800, 0x80040800, 0x800c1800, 0x8058b040,
- 0x040207fb, 0x41c41800, 0x4200b000, 0x00000020,
- 0x580c0010, 0x44000800, 0x80040800, 0x800c1800,
- 0x8058b040, 0x040207fb, 0x497b8830, 0x4200b000,
- 0x00000040, 0x59c40031, 0x44000800, 0x80040800,
- 0x8058b040, 0x040207fc, 0x497b88ac, 0x4200b000,
- 0x00000010, 0x59c400ad, 0x44000800, 0x80040800,
- 0x8058b040, 0x040207fc, 0x59c41001, 0x4c080000,
- 0x8408150c, 0x480b8801, 0x4a0370e4, 0x00000300,
- 0x4a0370e5, 0xb0000000, 0x42000800, 0x00000800,
- 0x80040840, 0x02000800, 0x0010032e, 0x59b800e5,
- 0x8c000538, 0x040207fb, 0x4a0370e4, 0x00000200,
- 0x42006000, 0xffffffff, 0x42006800, 0x80000000,
- 0x0201f800, 0x001042a6, 0x4a038807, 0x00000001,
- 0x497b8807, 0x0401fb89, 0x4a038808, 0x00000010,
- 0x42006000, 0xfcf8ffff, 0x42006800, 0x01000000,
- 0x0201f800, 0x001042a6, 0x5c001000, 0x480b8801,
- 0x42000800, 0x0010e4fe, 0x50040000, 0x48038803,
- 0x58040001, 0x48038804, 0x58040002, 0x4803880b,
- 0x58040003, 0x4803888e, 0x58040004, 0x4803888f,
- 0x58040005, 0x48038890, 0x58040006, 0x48038891,
- 0x58040007, 0x48038892, 0x58040008, 0x48038893,
- 0x58040009, 0x48038899, 0x5804000a, 0x4803889e,
- 0x5804000b, 0x480388aa, 0x5804000c, 0x480388af,
- 0x5804000d, 0x480388b2, 0x5804000e, 0x480388b1,
- 0x82040c00, 0x0000000f, 0x41c41800, 0x4200b000,
- 0x00000030, 0x50040000, 0x48001850, 0x80040800,
- 0x800c1800, 0x8058b040, 0x040207fb, 0x41c41800,
- 0x4200b000, 0x00000020, 0x50040000, 0x48001810,
- 0x80040800, 0x800c1800, 0x8058b040, 0x040207fb,
- 0x497b8830, 0x4200b000, 0x00000040, 0x50040000,
- 0x48038831, 0x80040800, 0x8058b040, 0x040207fc,
- 0x497b88ac, 0x4200b000, 0x00000010, 0x50040000,
- 0x480388ad, 0x80040800, 0x8058b040, 0x040207fc,
- 0x497b8880, 0x41780000, 0x0201f800, 0x001015e5,
- 0x59c408a4, 0x82040d00, 0x0000000f, 0x82040580,
- 0x0000000c, 0x02020800, 0x0010032e, 0x4a038805,
- 0x04000000, 0x5c00b000, 0x1c01f000, 0x4803c856,
- 0x42000800, 0x00000001, 0x0201f800, 0x00101bdf,
- 0x4c580000, 0x4ce80000, 0x42000000, 0x0010ce79,
- 0x0201f800, 0x0010bfb3, 0x59c41008, 0x4c080000,
- 0x82081500, 0xffffff7f, 0x480b8808, 0x59c40004,
- 0x82000500, 0x00003e02, 0x04000005, 0x4201d000,
- 0x00000014, 0x0201f800, 0x00106661, 0x59c40006,
- 0x82000500, 0xffffff0f, 0x48038806, 0x0401fb06,
- 0x59a8006d, 0x80000540, 0x04000014, 0x4a038805,
- 0x00000001, 0x4c580000, 0x4200b000, 0x000006a4,
- 0x4201d000, 0x00000064, 0x4c580000, 0x0201f800,
- 0x00106661, 0x0201f800, 0x001018f8, 0x5c00b000,
- 0x04000005, 0x8058b040, 0x040207f6, 0x5c00b000,
- 0x0401f011, 0x5c00b000, 0x4a038805, 0x00000010,
- 0x4a038808, 0x00000004, 0x4200b000, 0x00000065,
- 0x59c40005, 0x8c000508, 0x0402001d, 0x4201d000,
- 0x000003e8, 0x0201f800, 0x00106661, 0x8058b040,
- 0x040207f8, 0x42002000, 0x00000007, 0x0401f9a1,
- 0x0401fad4, 0x0201f800, 0x001071b4, 0x4803c856,
- 0x59a80078, 0x8c00053e, 0x04000004, 0x0201f800,
- 0x0010b8ac, 0x0401f003, 0x4a038808, 0x00000008,
- 0x4a035014, 0x00000001, 0x4202d800, 0x00000001,
- 0x82000540, 0x00000001, 0x0401f048, 0x42002000,
- 0x00000001, 0x0401f98b, 0x0201f800, 0x001007f6,
- 0x42000000, 0x0010cf68, 0x0201f800, 0x0010bfb3,
- 0x0201f800, 0x00100ce7, 0x497b8880, 0x59a8001f,
- 0x82000500, 0x0000ffff, 0x4c000000, 0x0201f800,
- 0x001015e5, 0x5c000000, 0x48038880, 0x41780800,
- 0x0201f800, 0x00101bdf, 0x4a038808, 0x00000000,
- 0x4a038805, 0x00000008, 0x4200b000, 0x00000065,
- 0x4a038805, 0x000000f0, 0x59a8006d, 0x80000540,
- 0x04000005, 0x4201d000, 0x00000002, 0x0201f800,
- 0x00106661, 0x0201f800, 0x0010193a, 0x42000800,
- 0x000000f0, 0x59c40005, 0x80040d00, 0x04000008,
- 0x4201d000, 0x000003e8, 0x0201f800, 0x00106661,
- 0x8058b040, 0x040207eb, 0x0401f7b7, 0x59a8006d,
- 0x80000540, 0x04000004, 0x59c40005, 0x8c000506,
- 0x040007f4, 0x42002000, 0x00000002, 0x0401f951,
- 0x59c40006, 0x82000540, 0x000000f0, 0x48038806,
- 0x59a80012, 0x80000540, 0x04020002, 0x80000000,
- 0x48038893, 0x80000580, 0x4df00000, 0x0201f800,
- 0x00101962, 0x5c03e000, 0x5c001000, 0x480b8808,
- 0x5c01d000, 0x5c00b000, 0x1c01f000, 0x4803c856,
- 0x42000800, 0x00000001, 0x0201f800, 0x00101bdf,
- 0x4c580000, 0x4ce80000, 0x59c41008, 0x4c080000,
- 0x82081500, 0xffffff7f, 0x480b8808, 0x59c40004,
- 0x82000500, 0x00003e02, 0x04000005, 0x4201d000,
- 0x00000014, 0x0201f800, 0x00106661, 0x0201f800,
- 0x001007f6, 0x42000000, 0x0010cf69, 0x0201f800,
- 0x0010bfb3, 0x0201f800, 0x00100ce7, 0x42002000,
- 0x00000000, 0x0401f91f, 0x4a038808, 0x00000002,
- 0x80000580, 0x48038880, 0x48038893, 0x0201f800,
- 0x001015e5, 0x4200b000, 0x00000384, 0x4a038805,
- 0x000000f0, 0x0201f800, 0x0010193a, 0x42000800,
- 0x000000f0, 0x59c40005, 0x80040d00, 0x04000024,
- 0x82000500, 0x000000d0, 0x04020024, 0x4201d000,
- 0x00000067, 0x0201f800, 0x00106661, 0x8058b040,
- 0x040207ef, 0x42002000, 0x00000007, 0x0401f901,
- 0x0201f800, 0x001071b4, 0x0401fa32, 0x59a80078,
- 0x8c00053e, 0x04000004, 0x0201f800, 0x0010b8ac,
- 0x0401f003, 0x4a038808, 0x00000008, 0x4a035014,
- 0x00000001, 0x4202d800, 0x00000001, 0x59c40006,
- 0x8400050a, 0x48038806, 0x4a038805, 0x00000020,
- 0x82000540, 0x00000001, 0x0401f016, 0x42002000,
- 0x00000002, 0x0401f8e7, 0x497b8880, 0x59a80012,
+ 0x825cbd00, 0x00000030, 0x825cbd80, 0x00000010,
+ 0x5c00b800, 0x1c01f000, 0x0401f807, 0x42018800,
+ 0x00000001, 0x04000003, 0x42018800, 0x00000000,
+ 0x1c01f000, 0x4c5c0000, 0x599cb818, 0x825cbd00,
+ 0x00000030, 0x825cbd80, 0x00000020, 0x5c00b800,
+ 0x1c01f000, 0x490fc857, 0x830c0d00, 0x00000013,
+ 0x04000026, 0x599c1017, 0x4d3c0000, 0x830c0500,
+ 0x00000011, 0x04000005, 0x417a7800, 0x8d0e1d20,
+ 0x04020009, 0x0401f015, 0x42027800, 0x00000008,
+ 0x8d0e1d20, 0x04000011, 0x42003000, 0x00000003,
+ 0x0401f003, 0x42003000, 0x00000004, 0x42028000,
+ 0x0000000e, 0x4d200000, 0x42024000, 0x000000ff,
+ 0x0201f800, 0x0010b65e, 0x5c024000, 0x599c1017,
+ 0x8c08150a, 0x04020007, 0x42028000, 0x00000004,
+ 0x0201f800, 0x001105fb, 0x4803c856, 0x850e1d08,
+ 0x5c027800, 0x0401f00d, 0x8d0e1d20, 0x0400000b,
+ 0x42028000, 0x0000000f, 0x42003000, 0x00000001,
+ 0x4d200000, 0x42024000, 0x000000ff, 0x0201f800,
+ 0x0010b65e, 0x5c024000, 0x1c01f000, 0x4803c856,
+ 0x4c580000, 0x42000000, 0x0010d5a7, 0x0201f800,
+ 0x0010c50a, 0x42000800, 0x0010eb1c, 0x59c40003,
+ 0x44000800, 0x59c40004, 0x48000801, 0x59c4000b,
+ 0x48000802, 0x59c4008e, 0x48000803, 0x59c4008f,
+ 0x48000804, 0x59c40090, 0x48000805, 0x59c40091,
+ 0x48000806, 0x59c40092, 0x48000807, 0x59c40093,
+ 0x48000808, 0x59c40099, 0x48000809, 0x59c4009e,
+ 0x4800080a, 0x59c400aa, 0x4800080b, 0x82040c00,
+ 0x0000000f, 0x41c41800, 0x4200b000, 0x00000030,
+ 0x580c0050, 0x44000800, 0x80040800, 0x800c1800,
+ 0x8058b040, 0x040207fb, 0x41c41800, 0x4200b000,
+ 0x00000020, 0x580c0010, 0x44000800, 0x80040800,
+ 0x800c1800, 0x8058b040, 0x040207fb, 0x497b8830,
+ 0x4200b000, 0x00000040, 0x59c40031, 0x44000800,
+ 0x80040800, 0x8058b040, 0x040207fc, 0x497b88ac,
+ 0x4200b000, 0x00000010, 0x59c400ad, 0x44000800,
+ 0x80040800, 0x8058b040, 0x040207fc, 0x59a8005c,
+ 0x59c410b1, 0x80080400, 0x4803505c, 0x59a8005d,
+ 0x59c410b2, 0x80080400, 0x4803505d, 0x59c41001,
+ 0x4c080000, 0x8408150c, 0x480b8801, 0x4a0370e4,
+ 0x00000300, 0x4a0370e5, 0xb0000000, 0x42000800,
+ 0x00000800, 0x80040840, 0x02000800, 0x0010032f,
+ 0x59b800e5, 0x8c000538, 0x040207fb, 0x4a0370e4,
+ 0x00000200, 0x42006000, 0xffffffff, 0x42006800,
+ 0x80000000, 0x0201f800, 0x001043b7, 0x4a038807,
+ 0x00000001, 0x497b8807, 0x0401fb83, 0x4a038808,
+ 0x00000010, 0x42006000, 0xfcf8ffff, 0x42006800,
+ 0x01000000, 0x0201f800, 0x001043b7, 0x5c001000,
+ 0x480b8801, 0x42000800, 0x0010eb1c, 0x50040000,
+ 0x48038803, 0x58040001, 0x48038804, 0x58040002,
+ 0x4803880b, 0x58040003, 0x4803888e, 0x58040004,
+ 0x4803888f, 0x58040005, 0x48038890, 0x58040006,
+ 0x48038891, 0x58040007, 0x48038892, 0x58040008,
+ 0x48038893, 0x58040009, 0x48038899, 0x5804000a,
+ 0x4803889e, 0x5804000b, 0x480388aa, 0x82040c00,
+ 0x0000000f, 0x41c41800, 0x4200b000, 0x00000030,
+ 0x50040000, 0x48001850, 0x80040800, 0x800c1800,
+ 0x8058b040, 0x040207fb, 0x41c41800, 0x4200b000,
+ 0x00000020, 0x50040000, 0x48001810, 0x80040800,
+ 0x800c1800, 0x8058b040, 0x040207fb, 0x497b8830,
+ 0x4200b000, 0x00000040, 0x50040000, 0x48038831,
+ 0x80040800, 0x8058b040, 0x040207fc, 0x497b88ac,
+ 0x4200b000, 0x00000010, 0x50040000, 0x480388ad,
+ 0x80040800, 0x8058b040, 0x040207fc, 0x497b8880,
+ 0x41780000, 0x0201f800, 0x00101653, 0x59c408a4,
+ 0x82040d00, 0x0000000f, 0x82040580, 0x0000000c,
+ 0x02020800, 0x0010032f, 0x4a038805, 0x04000000,
+ 0x5c00b000, 0x1c01f000, 0x4803c856, 0x42000800,
+ 0x00000001, 0x0201f800, 0x00101c4d, 0x4c580000,
+ 0x4ce80000, 0x42000000, 0x0010d48f, 0x0201f800,
+ 0x0010c50a, 0x59c41008, 0x4c080000, 0x82081500,
+ 0xffffff7f, 0x480b8808, 0x59c40004, 0x82000500,
+ 0x00003e02, 0x04000005, 0x4201d000, 0x00000014,
+ 0x0201f800, 0x001069c8, 0x59c40006, 0x82000500,
+ 0xffffff0f, 0x48038806, 0x0401fb06, 0x59a8007b,
+ 0x80000540, 0x04000014, 0x4a038805, 0x00000001,
+ 0x4c580000, 0x4200b000, 0x000006a4, 0x4201d000,
+ 0x00000064, 0x4c580000, 0x0201f800, 0x001069c8,
+ 0x0201f800, 0x00101966, 0x5c00b000, 0x04000005,
+ 0x8058b040, 0x040207f6, 0x5c00b000, 0x0401f011,
+ 0x5c00b000, 0x4a038805, 0x00000010, 0x4a038808,
+ 0x00000004, 0x4200b000, 0x00000065, 0x59c40005,
+ 0x8c000508, 0x0402001d, 0x4201d000, 0x000003e8,
+ 0x0201f800, 0x001069c8, 0x8058b040, 0x040207f8,
+ 0x42002000, 0x00000007, 0x0401f9a1, 0x0401fad4,
+ 0x0201f800, 0x00107523, 0x4803c856, 0x59a80086,
+ 0x8c00053e, 0x04000004, 0x0201f800, 0x0010be01,
+ 0x0401f003, 0x4a038808, 0x00000008, 0x4a03501a,
+ 0x00000001, 0x4202d800, 0x00000001, 0x82000540,
+ 0x00000001, 0x0401f048, 0x42002000, 0x00000001,
+ 0x0401f98b, 0x0201f800, 0x00100817, 0x42000000,
+ 0x0010d583, 0x0201f800, 0x0010c50a, 0x0201f800,
+ 0x00100d0c, 0x497b8880, 0x59a80025, 0x82000500,
+ 0x0000ffff, 0x4c000000, 0x0201f800, 0x00101653,
+ 0x5c000000, 0x48038880, 0x41780800, 0x0201f800,
+ 0x00101c4d, 0x4a038808, 0x00000000, 0x4a038805,
+ 0x00000008, 0x4200b000, 0x00000065, 0x4a038805,
+ 0x000000f0, 0x59a8007b, 0x80000540, 0x04000005,
+ 0x4201d000, 0x00000002, 0x0201f800, 0x001069c8,
+ 0x0201f800, 0x001019a8, 0x42000800, 0x000000f0,
+ 0x59c40005, 0x80040d00, 0x04000008, 0x4201d000,
+ 0x000003e8, 0x0201f800, 0x001069c8, 0x8058b040,
+ 0x040207eb, 0x0401f7b7, 0x59a8007b, 0x80000540,
+ 0x04000004, 0x59c40005, 0x8c000506, 0x040007f4,
+ 0x42002000, 0x00000002, 0x0401f951, 0x59c40006,
+ 0x82000540, 0x000000f0, 0x48038806, 0x59a80018,
0x80000540, 0x04020002, 0x80000000, 0x48038893,
- 0x59a8001f, 0x82000500, 0x0000ffff, 0x4c000000,
- 0x0201f800, 0x001015e5, 0x5c000000, 0x48038880,
- 0x41780800, 0x0201f800, 0x00101bdf, 0x80000580,
- 0x4df00000, 0x0201f800, 0x00101962, 0x5c03e000,
- 0x5c001000, 0x480b8808, 0x5c01d000, 0x5c00b000,
- 0x1c01f000, 0x4803c856, 0x42000800, 0x00000001,
- 0x0201f800, 0x00101bdf, 0x42002000, 0x00000001,
- 0x0401f8c4, 0x59c40004, 0x82000500, 0x00003e02,
- 0x0400000b, 0x0201f800, 0x001071b4, 0x0401f9f1,
- 0x4a038808, 0x00000008, 0x4a035014, 0x00000001,
- 0x4202d800, 0x00000001, 0x0401f055, 0x0201f800,
- 0x001007f6, 0x42000000, 0x0010cf6a, 0x0201f800,
- 0x0010bfb3, 0x0201f800, 0x00100ce7, 0x59c40006,
- 0x84000508, 0x48038806, 0x4a038805, 0x00000010,
- 0x850e1d4c, 0x42000800, 0x00000064, 0x42001000,
- 0x00105002, 0x0201f800, 0x00106643, 0x41780800,
- 0x0201f800, 0x00101bdf, 0x4a038808, 0x00000000,
- 0x497b8880, 0x4a038805, 0x000000f0, 0x0201f800,
- 0x0010193a, 0x42000800, 0x000000f0, 0x59c40005,
- 0x80040d00, 0x0400000e, 0x82000500, 0x000000e0,
- 0x0402000e, 0x4201d000, 0x000003e8, 0x0201f800,
- 0x00106661, 0x0201f800, 0x0010647a, 0x59940004,
- 0x80000540, 0x040207ec, 0x0401f025, 0x42002000,
- 0x00000002, 0x0401f883, 0x4c080000, 0x42001000,
- 0x00105002, 0x0201f800, 0x0010664e, 0x5c001000,
- 0x497b8880, 0x59a80012, 0x80000540, 0x04020002,
- 0x80000000, 0x48038893, 0x59a8001f, 0x82000500,
- 0x0000ffff, 0x4c000000, 0x0201f800, 0x001015e5,
- 0x5c000000, 0x48038880, 0x850e1d0c, 0x59c40006,
- 0x84000548, 0x48038806, 0x0201f800, 0x00101962,
- 0x41780800, 0x0201f800, 0x00101bdf, 0x59c40008,
- 0x82000540, 0x00000080, 0x48038808, 0x1c01f000,
- 0x4803c856, 0x4d400000, 0x4d3c0000, 0x0201f800,
- 0x001071b4, 0x0201f800, 0x0010c0bb, 0x04020039,
- 0x599c1017, 0x8d0e1d00, 0x0402000b, 0x8c08151a,
- 0x04000034, 0x850e1d42, 0x42028000, 0x00000004,
- 0x42027800, 0x00000008, 0x8d0e1d20, 0x04020007,
- 0x0401f028, 0x42028000, 0x00000004, 0x417a7800,
- 0x8d0e1d20, 0x04000023, 0x0201f800, 0x0010c0ca,
- 0x42024800, 0x0010cfd1, 0x59240200, 0x8c000500,
- 0x04000009, 0x4c580000, 0x42000800, 0x00000001,
- 0x42001000, 0x00000100, 0x0201f800, 0x00106753,
- 0x5c00b000, 0x83264c00, 0x0000000b, 0x8058b040,
- 0x040207f2, 0x42024000, 0x0000ffff, 0x4d400000,
- 0x42028000, 0x0000000e, 0x42003000, 0x00000003,
- 0x42028800, 0x0000ffff, 0x0201f800, 0x0010b195,
- 0x5c028000, 0x599c0817, 0x8c040d0a, 0x04020005,
- 0x4943c857, 0x493fc857, 0x0201f800, 0x0010fef2,
- 0x497b8880, 0x4202d800, 0x00000001, 0x0401fc66,
- 0x5c027800, 0x5c028000, 0x1c01f000, 0x42000800,
- 0x00000001, 0x0201f800, 0x00101bdf, 0x0201f800,
- 0x001007f6, 0x42000000, 0x0010cf6b, 0x0201f800,
- 0x0010bfb3, 0x0201f800, 0x00100ce7, 0x42000000,
- 0x00000001, 0x0201f800, 0x001015e5, 0x4a038880,
- 0x00000001, 0x59c80835, 0x59a80075, 0x80040d80,
- 0x04000002, 0x48039035, 0x0201f000, 0x00101962,
- 0x42000800, 0x0010cafb, 0x48100802, 0x82101480,
- 0x00000008, 0x04001009, 0x58040001, 0x4803c857,
- 0x4813c857, 0x58040003, 0x80000000, 0x48000803,
- 0x42002000, 0x00000002, 0x58040001, 0x82001480,
- 0x0000000b, 0x04001008, 0x4803c857, 0x4813c857,
- 0x58040003, 0x80000000, 0x48000803, 0x42000000,
- 0x00000000, 0x48000800, 0x59c428a4, 0x82142d00,
- 0x0000000f, 0x82142d80, 0x0000000c, 0x0c000002,
- 0x0401f136, 0x00105434, 0x00105454, 0x00105475,
- 0x00105496, 0x001054b7, 0x001054d2, 0x001054e3,
- 0x001054fa, 0x00105511, 0x00105528, 0x0010552b,
- 0x40100000, 0x0c01f001, 0x0010543e, 0x00105441,
- 0x00105444, 0x00105445, 0x00105448, 0x0010544b,
- 0x0010544f, 0x00105452, 0x4a000801, 0x00000002,
- 0x1c01f000, 0x4a000801, 0x00000003, 0x0401f0e9,
- 0x1c01f000, 0x4a000801, 0x00000007, 0x1c01f000,
- 0x4a000801, 0x00000004, 0x0401f0e6, 0x4a000801,
- 0x00000005, 0x0401f8eb, 0x0401f0e6, 0x4a000801,
- 0x00000005, 0x0401f0e7, 0x4813c857, 0x1c01f000,
- 0x40100000, 0x0c01f001, 0x0010545e, 0x00105461,
- 0x00105464, 0x00105465, 0x00105468, 0x0010546b,
- 0x0010546f, 0x00105472, 0x4a000801, 0x00000002,
- 0x1c01f000, 0x4a000801, 0x00000003, 0x1c01f000,
+ 0x80000580, 0x4df00000, 0x0201f800, 0x001019d0,
+ 0x5c03e000, 0x5c001000, 0x480b8808, 0x5c01d000,
+ 0x5c00b000, 0x1c01f000, 0x4803c856, 0x42000800,
+ 0x00000001, 0x0201f800, 0x00101c4d, 0x4c580000,
+ 0x4ce80000, 0x59c41008, 0x4c080000, 0x82081500,
+ 0xffffff7f, 0x480b8808, 0x59c40004, 0x82000500,
+ 0x00003e02, 0x04000005, 0x4201d000, 0x00000014,
+ 0x0201f800, 0x001069c8, 0x0201f800, 0x00100817,
+ 0x42000000, 0x0010d584, 0x0201f800, 0x0010c50a,
+ 0x0201f800, 0x00100d0c, 0x42002000, 0x00000000,
+ 0x0401f91f, 0x4a038808, 0x00000002, 0x80000580,
+ 0x48038880, 0x48038893, 0x0201f800, 0x00101653,
+ 0x4200b000, 0x00000384, 0x4a038805, 0x000000f0,
+ 0x0201f800, 0x001019a8, 0x42000800, 0x000000f0,
+ 0x59c40005, 0x80040d00, 0x04000024, 0x82000500,
+ 0x000000d0, 0x04020024, 0x4201d000, 0x00000067,
+ 0x0201f800, 0x001069c8, 0x8058b040, 0x040207ef,
+ 0x42002000, 0x00000007, 0x0401f901, 0x0201f800,
+ 0x00107523, 0x0401fa32, 0x59a80086, 0x8c00053e,
+ 0x04000004, 0x0201f800, 0x0010be01, 0x0401f003,
+ 0x4a038808, 0x00000008, 0x4a03501a, 0x00000001,
+ 0x4202d800, 0x00000001, 0x59c40006, 0x8400050a,
+ 0x48038806, 0x4a038805, 0x00000020, 0x82000540,
+ 0x00000001, 0x0401f016, 0x42002000, 0x00000002,
+ 0x0401f8e7, 0x497b8880, 0x59a80018, 0x80000540,
+ 0x04020002, 0x80000000, 0x48038893, 0x59a80025,
+ 0x82000500, 0x0000ffff, 0x4c000000, 0x0201f800,
+ 0x00101653, 0x5c000000, 0x48038880, 0x41780800,
+ 0x0201f800, 0x00101c4d, 0x80000580, 0x4df00000,
+ 0x0201f800, 0x001019d0, 0x5c03e000, 0x5c001000,
+ 0x480b8808, 0x5c01d000, 0x5c00b000, 0x1c01f000,
+ 0x4803c856, 0x42000800, 0x00000001, 0x0201f800,
+ 0x00101c4d, 0x42002000, 0x00000001, 0x0401f8c4,
+ 0x59c40004, 0x82000500, 0x00003e02, 0x0400000b,
+ 0x0201f800, 0x00107523, 0x0401f9f1, 0x4a038808,
+ 0x00000008, 0x4a03501a, 0x00000001, 0x4202d800,
+ 0x00000001, 0x0401f055, 0x0201f800, 0x00100817,
+ 0x42000000, 0x0010d585, 0x0201f800, 0x0010c50a,
+ 0x0201f800, 0x00100d0c, 0x59c40006, 0x84000508,
+ 0x48038806, 0x4a038805, 0x00000010, 0x850e1d4c,
+ 0x42000800, 0x00000064, 0x42001000, 0x001051b5,
+ 0x0201f800, 0x001069b0, 0x41780800, 0x0201f800,
+ 0x00101c4d, 0x4a038808, 0x00000000, 0x497b8880,
+ 0x4a038805, 0x000000f0, 0x0201f800, 0x001019a8,
+ 0x42000800, 0x000000f0, 0x59c40005, 0x80040d00,
+ 0x0400000e, 0x82000500, 0x000000e0, 0x0402000e,
+ 0x4201d000, 0x000003e8, 0x0201f800, 0x001069c8,
+ 0x0201f800, 0x001067dd, 0x59940004, 0x80000540,
+ 0x040207ec, 0x0401f025, 0x42002000, 0x00000002,
+ 0x0401f883, 0x4c080000, 0x42001000, 0x001051b5,
+ 0x0201f800, 0x001069b8, 0x5c001000, 0x497b8880,
+ 0x59a80018, 0x80000540, 0x04020002, 0x80000000,
+ 0x48038893, 0x59a80025, 0x82000500, 0x0000ffff,
+ 0x4c000000, 0x0201f800, 0x00101653, 0x5c000000,
+ 0x48038880, 0x850e1d0c, 0x59c40006, 0x84000548,
+ 0x48038806, 0x0201f800, 0x001019d0, 0x41780800,
+ 0x0201f800, 0x00101c4d, 0x59c40008, 0x82000540,
+ 0x00000080, 0x48038808, 0x1c01f000, 0x4803c856,
+ 0x4d400000, 0x4d3c0000, 0x0201f800, 0x00107523,
+ 0x0201f800, 0x0010c612, 0x04020039, 0x599c1017,
+ 0x8d0e1d00, 0x0402000b, 0x8c08151a, 0x04000034,
+ 0x850e1d42, 0x42028000, 0x00000004, 0x42027800,
+ 0x00000008, 0x8d0e1d20, 0x04020007, 0x0401f028,
+ 0x42028000, 0x00000004, 0x417a7800, 0x8d0e1d20,
+ 0x04000023, 0x0201f800, 0x0010c621, 0x42024800,
+ 0x0010d5ef, 0x59240200, 0x8c000500, 0x04000009,
+ 0x4c580000, 0x42000800, 0x00000001, 0x42001000,
+ 0x00000100, 0x0201f800, 0x00106ab3, 0x5c00b000,
+ 0x83264c00, 0x0000000b, 0x8058b040, 0x040207f2,
+ 0x42024000, 0x0000ffff, 0x4d400000, 0x42028000,
+ 0x0000000e, 0x42003000, 0x00000003, 0x42028800,
+ 0x0000ffff, 0x0201f800, 0x0010b65b, 0x5c028000,
+ 0x599c0817, 0x8c040d0a, 0x04020005, 0x4943c857,
+ 0x493fc857, 0x0201f800, 0x001105fb, 0x497b8880,
+ 0x4202d800, 0x00000001, 0x0401fc6a, 0x5c027800,
+ 0x5c028000, 0x1c01f000, 0x42000800, 0x00000001,
+ 0x0201f800, 0x00101c4d, 0x0201f800, 0x00100817,
+ 0x42000000, 0x0010d586, 0x0201f800, 0x0010c50a,
+ 0x0201f800, 0x00100d0c, 0x42000000, 0x00000001,
+ 0x0201f800, 0x00101653, 0x4a038880, 0x00000001,
+ 0x59c80835, 0x59a80083, 0x80040d80, 0x04000002,
+ 0x48039035, 0x0201f000, 0x001019d0, 0x42000800,
+ 0x0010d111, 0x48100802, 0x82101480, 0x00000008,
+ 0x04001009, 0x58040001, 0x4803c857, 0x4813c857,
+ 0x58040003, 0x80000000, 0x48000803, 0x42002000,
+ 0x00000002, 0x58040001, 0x82001480, 0x0000000b,
+ 0x04001008, 0x4803c857, 0x4813c857, 0x58040003,
+ 0x80000000, 0x48000803, 0x42000000, 0x00000000,
+ 0x48000800, 0x59c428a4, 0x82142d00, 0x0000000f,
+ 0x82142d80, 0x0000000c, 0x0c000002, 0x0401f136,
+ 0x001055e3, 0x00105603, 0x00105624, 0x00105645,
+ 0x00105666, 0x00105681, 0x00105692, 0x001056a9,
+ 0x001056c0, 0x001056d7, 0x001056da, 0x40100000,
+ 0x0c01f001, 0x001055ed, 0x001055f0, 0x001055f3,
+ 0x001055f4, 0x001055f7, 0x001055fa, 0x001055fe,
+ 0x00105601, 0x4a000801, 0x00000002, 0x1c01f000,
+ 0x4a000801, 0x00000003, 0x0401f0e9, 0x1c01f000,
+ 0x4a000801, 0x00000007, 0x1c01f000, 0x4a000801,
+ 0x00000004, 0x0401f0e6, 0x4a000801, 0x00000005,
+ 0x0401f8eb, 0x0401f0e6, 0x4a000801, 0x00000005,
+ 0x0401f0e7, 0x4813c857, 0x1c01f000, 0x40100000,
+ 0x0c01f001, 0x0010560d, 0x00105610, 0x00105613,
+ 0x00105614, 0x00105617, 0x0010561a, 0x0010561e,
+ 0x00105621, 0x4a000801, 0x00000002, 0x1c01f000,
+ 0x4a000801, 0x00000003, 0x1c01f000, 0x1c01f000,
+ 0x4a000801, 0x00000007, 0x1c01f000, 0x4a000801,
+ 0x00000004, 0x0401f0c6, 0x4a000801, 0x00000005,
+ 0x0401f8cb, 0x0401f0c6, 0x4a000801, 0x00000005,
+ 0x1c01f000, 0x4a000801, 0x00000005, 0x0401f0bc,
+ 0x40100000, 0x0c01f001, 0x0010562e, 0x0010562f,
+ 0x00105632, 0x00105635, 0x00105638, 0x0010563b,
+ 0x0010563f, 0x00105642, 0x1c01f000, 0x4a000801,
+ 0x00000003, 0x1c01f000, 0x4a000801, 0x00000000,
0x1c01f000, 0x4a000801, 0x00000007, 0x1c01f000,
- 0x4a000801, 0x00000004, 0x0401f0c6, 0x4a000801,
- 0x00000005, 0x0401f8cb, 0x0401f0c6, 0x4a000801,
+ 0x4a000801, 0x00000004, 0x0401f0a5, 0x4a000801,
+ 0x00000005, 0x0401f8aa, 0x0401f0a5, 0x4a000801,
0x00000005, 0x1c01f000, 0x4a000801, 0x00000005,
- 0x0401f0bc, 0x40100000, 0x0c01f001, 0x0010547f,
- 0x00105480, 0x00105483, 0x00105486, 0x00105489,
- 0x0010548c, 0x00105490, 0x00105493, 0x1c01f000,
- 0x4a000801, 0x00000003, 0x1c01f000, 0x4a000801,
+ 0x0401f09b, 0x40100000, 0x0c01f001, 0x0010564f,
+ 0x00105652, 0x00105653, 0x00105656, 0x00105659,
+ 0x0010565c, 0x00105660, 0x00105663, 0x4a000801,
+ 0x00000002, 0x1c01f000, 0x1c01f000, 0x4a000801,
0x00000000, 0x1c01f000, 0x4a000801, 0x00000007,
- 0x1c01f000, 0x4a000801, 0x00000004, 0x0401f0a5,
- 0x4a000801, 0x00000005, 0x0401f8aa, 0x0401f0a5,
+ 0x1c01f000, 0x4a000801, 0x00000004, 0x0401f084,
+ 0x4a000801, 0x00000005, 0x0401f889, 0x0401f084,
0x4a000801, 0x00000005, 0x1c01f000, 0x4a000801,
- 0x00000005, 0x0401f09b, 0x40100000, 0x0c01f001,
- 0x001054a0, 0x001054a3, 0x001054a4, 0x001054a7,
- 0x001054aa, 0x001054ad, 0x001054b1, 0x001054b4,
+ 0x00000005, 0x0401f07a, 0x40100000, 0x0c01f001,
+ 0x00105670, 0x00105673, 0x00105673, 0x00105674,
+ 0x00105673, 0x00105677, 0x0010567b, 0x0010567e,
0x4a000801, 0x00000002, 0x1c01f000, 0x1c01f000,
- 0x4a000801, 0x00000000, 0x1c01f000, 0x4a000801,
- 0x00000007, 0x1c01f000, 0x4a000801, 0x00000004,
- 0x0401f084, 0x4a000801, 0x00000005, 0x0401f889,
- 0x0401f084, 0x4a000801, 0x00000005, 0x1c01f000,
- 0x4a000801, 0x00000005, 0x0401f07a, 0x40100000,
- 0x0c01f001, 0x001054c1, 0x001054c4, 0x001054c4,
- 0x001054c5, 0x001054c4, 0x001054c8, 0x001054cc,
- 0x001054cf, 0x4a000801, 0x00000002, 0x1c01f000,
- 0x1c01f000, 0x4a000801, 0x00000007, 0x1c01f000,
- 0x4a000801, 0x00000005, 0x0401f86e, 0x0401f069,
- 0x4a000801, 0x00000005, 0x1c01f000, 0x4a000801,
- 0x00000005, 0x0401f05f, 0x40100000, 0x0c01f001,
- 0x001054e2, 0x001054e2, 0x001054e2, 0x001054dc,
- 0x001054df, 0x001054e2, 0x001054e2, 0x001054e2,
0x4a000801, 0x00000007, 0x1c01f000, 0x4a000801,
- 0x00000004, 0x1c01f000, 0x1c01f000, 0x40100000,
- 0x0c01f001, 0x001054ed, 0x001054f0, 0x001054f0,
- 0x001054f1, 0x001054f4, 0x001054f7, 0x001054f7,
- 0x001054f7, 0x4a000801, 0x00000002, 0x1c01f000,
- 0x1c01f000, 0x4a000801, 0x00000007, 0x1c01f000,
- 0x4a000801, 0x00000004, 0x0401f03a, 0x4a000801,
- 0x00000008, 0x1c01f000, 0x40100000, 0x0c01f001,
- 0x00105504, 0x00105507, 0x0010550a, 0x0010550a,
- 0x0010550b, 0x0010550e, 0x0010550e, 0x0010550e,
- 0x4a000801, 0x00000002, 0x1c01f000, 0x4a000801,
- 0x00000003, 0x1c01f000, 0x1c01f000, 0x4a000801,
- 0x00000004, 0x0401f023, 0x4a000801, 0x00000008,
- 0x1c01f000, 0x40100000, 0x0c01f001, 0x0010551b,
- 0x0010551b, 0x0010551e, 0x0010551f, 0x00105522,
- 0x0010551e, 0x00105525, 0x0010551e, 0x4a000801,
- 0x00000005, 0x0401f00f, 0x1c01f000, 0x4a000801,
+ 0x00000005, 0x0401f86e, 0x0401f069, 0x4a000801,
+ 0x00000005, 0x1c01f000, 0x4a000801, 0x00000005,
+ 0x0401f05f, 0x40100000, 0x0c01f001, 0x00105691,
+ 0x00105691, 0x00105691, 0x0010568b, 0x0010568e,
+ 0x00105691, 0x00105691, 0x00105691, 0x4a000801,
0x00000007, 0x1c01f000, 0x4a000801, 0x00000004,
- 0x1c01f000, 0x4a000801, 0x00000008, 0x1c01f000,
- 0x4a000801, 0x00000009, 0x1c01f000, 0x1c01f000,
- 0x42000000, 0x0010ce63, 0x0201f000, 0x0010bfb3,
- 0x42000000, 0x0010ce60, 0x0201f000, 0x0010bfb3,
- 0x42000000, 0x0010ce62, 0x0201f000, 0x0010bfb3,
- 0x42000000, 0x0010ce61, 0x0201f000, 0x0010bfb3,
- 0x42000800, 0x0010cafb, 0x58040001, 0x48000800,
- 0x4a000801, 0x00000005, 0x4a000802, 0x00000008,
- 0x1c01f000, 0x42000800, 0x0010cafb, 0x58040001,
- 0x48000800, 0x4a000801, 0x00000001, 0x4a000802,
- 0x0000000a, 0x1c01f000, 0x42000800, 0x0010cafb,
- 0x58040001, 0x48000800, 0x4a000801, 0x00000006,
- 0x4a000802, 0x00000009, 0x1c01f000, 0x42000800,
- 0x0010cafb, 0x4a000801, 0x0000000a, 0x4a000800,
- 0x0000000a, 0x1c01f000, 0x496fc857, 0x4813c857,
- 0x40100000, 0x0c01f001, 0x00105578, 0x00105578,
- 0x00105578, 0x00105578, 0x0010556a, 0x00105572,
- 0x00105576, 0x00105578, 0x59a8021b, 0x8c000506,
- 0x04000003, 0x8c000502, 0x0400000a, 0x0401f80a,
- 0x040207c0, 0x0401f007, 0x0401f807, 0x04000005,
- 0x0401ffc0, 0x0401f7c3, 0x0401f803, 0x040207c1,
- 0x1c01f000, 0x496fc857, 0x416c0000, 0x82000c80,
- 0x00000008, 0x02021800, 0x0010032e, 0x0c01f001,
- 0x00105588, 0x0010558a, 0x0010558a, 0x0010558a,
- 0x00105588, 0x00105588, 0x00105588, 0x0010558a,
- 0x80000580, 0x1c01f000, 0x82000540, 0x00000001,
- 0x1c01f000, 0x4202e000, 0x00000000, 0x497b3004,
+ 0x1c01f000, 0x1c01f000, 0x40100000, 0x0c01f001,
+ 0x0010569c, 0x0010569f, 0x0010569f, 0x001056a0,
+ 0x001056a3, 0x001056a6, 0x001056a6, 0x001056a6,
+ 0x4a000801, 0x00000002, 0x1c01f000, 0x1c01f000,
+ 0x4a000801, 0x00000007, 0x1c01f000, 0x4a000801,
+ 0x00000004, 0x0401f03a, 0x4a000801, 0x00000008,
+ 0x1c01f000, 0x40100000, 0x0c01f001, 0x001056b3,
+ 0x001056b6, 0x001056b9, 0x001056b9, 0x001056ba,
+ 0x001056bd, 0x001056bd, 0x001056bd, 0x4a000801,
+ 0x00000002, 0x1c01f000, 0x4a000801, 0x00000003,
+ 0x1c01f000, 0x1c01f000, 0x4a000801, 0x00000004,
+ 0x0401f023, 0x4a000801, 0x00000008, 0x1c01f000,
+ 0x40100000, 0x0c01f001, 0x001056ca, 0x001056ca,
+ 0x001056cd, 0x001056ce, 0x001056d1, 0x001056cd,
+ 0x001056d4, 0x001056cd, 0x4a000801, 0x00000005,
+ 0x0401f00f, 0x1c01f000, 0x4a000801, 0x00000007,
+ 0x1c01f000, 0x4a000801, 0x00000004, 0x1c01f000,
+ 0x4a000801, 0x00000008, 0x1c01f000, 0x4a000801,
+ 0x00000009, 0x1c01f000, 0x1c01f000, 0x42000000,
+ 0x0010d479, 0x0201f000, 0x0010c50a, 0x42000000,
+ 0x0010d476, 0x0201f000, 0x0010c50a, 0x42000000,
+ 0x0010d478, 0x0201f000, 0x0010c50a, 0x42000000,
+ 0x0010d477, 0x0201f000, 0x0010c50a, 0x42000800,
+ 0x0010d111, 0x58040001, 0x48000800, 0x4a000801,
+ 0x00000005, 0x4a000802, 0x00000008, 0x1c01f000,
+ 0x42000800, 0x0010d111, 0x58040001, 0x48000800,
+ 0x4a000801, 0x00000001, 0x4a000802, 0x0000000a,
+ 0x1c01f000, 0x42000800, 0x0010d111, 0x58040001,
+ 0x48000800, 0x4a000801, 0x00000006, 0x4a000802,
+ 0x00000009, 0x1c01f000, 0x42000800, 0x0010d111,
+ 0x4a000801, 0x0000000a, 0x4a000800, 0x0000000a,
+ 0x1c01f000, 0x496fc857, 0x4813c857, 0x40100000,
+ 0x0c01f001, 0x00105727, 0x00105727, 0x00105727,
+ 0x00105727, 0x00105719, 0x00105721, 0x00105725,
+ 0x00105727, 0x59a80221, 0x8c000506, 0x04000003,
+ 0x8c000502, 0x0400000a, 0x0401f80a, 0x040207c0,
+ 0x0401f007, 0x0401f807, 0x04000005, 0x0401ffc0,
+ 0x0401f7c3, 0x0401f803, 0x040207c1, 0x1c01f000,
+ 0x496fc857, 0x416c0000, 0x82000c80, 0x00000008,
+ 0x02021800, 0x0010032f, 0x0c01f001, 0x00105737,
+ 0x00105739, 0x00105739, 0x00105739, 0x00105737,
+ 0x00105737, 0x00105737, 0x00105739, 0x80000580,
+ 0x1c01f000, 0x82000540, 0x00000001, 0x1c01f000,
+ 0x59a80005, 0x8c000506, 0x04020002, 0x1c01f000,
+ 0x41781800, 0x42000800, 0x0010d111, 0x58040001,
+ 0x40002000, 0x0c01f001, 0x0010575c, 0x00105753,
+ 0x00105752, 0x00105751, 0x0010575d, 0x00105755,
+ 0x00105754, 0x00105762, 0x00105755, 0x00105752,
+ 0x0010575c, 0x800c1800, 0x800c1800, 0x800c1800,
+ 0x800c1800, 0x800c1800, 0x42001000, 0x00008037,
+ 0x0201f800, 0x00103a4e, 0x4813505b, 0x1c01f000,
+ 0x1c01f000, 0x59a8005b, 0x82000580, 0x00000004,
+ 0x040207f4, 0x0401f7fb, 0x59a8005b, 0x82000580,
+ 0x00000007, 0x040207ee, 0x0401f7f6, 0x4a03501a,
+ 0x00000001, 0x4a035019, 0x0000aaaa, 0x0201f000,
+ 0x00105204, 0x4202e000, 0x00000000, 0x497b3004,
0x4a03b004, 0x60000001, 0x59d80005, 0x4a03b004,
- 0x90000001, 0x4a03a804, 0x60000001, 0x59d40005,
- 0x4a03a804, 0x90000001, 0x0201f000, 0x00105d17,
- 0x4a03c825, 0x00000004, 0x4a03c827, 0x00000004,
- 0x599c0409, 0x80000d40, 0x04000020, 0x599c0407,
- 0x80000540, 0x04000007, 0x800000cc, 0x599c100b,
- 0x80080400, 0x4803b000, 0x497bb002, 0x59d80001,
- 0x599c000b, 0x4803b000, 0x599c000c, 0x4803b001,
- 0x599c0407, 0x80000540, 0x04020002, 0x497bb002,
- 0x599c0c09, 0x82040540, 0x00400000, 0x4803b003,
- 0x4a03b009, 0x00000005, 0x4a03b004, 0x10000001,
- 0x59e00803, 0x82040d00, 0xfffffeff, 0x82040d40,
- 0x00008000, 0x4807c003, 0x599c040a, 0x80000540,
- 0x04000020, 0x599c0408, 0x80000540, 0x04000007,
- 0x800000cc, 0x599c100f, 0x80080400, 0x4803a800,
- 0x497ba802, 0x59d40001, 0x599c000f, 0x4803a800,
- 0x599c0010, 0x4803a801, 0x599c0408, 0x80000540,
- 0x04020002, 0x497ba802, 0x599c0c0a, 0x82040540,
- 0x00400000, 0x4803a803, 0x4a03a809, 0x00000005,
- 0x4a03a804, 0x10000001, 0x59e00803, 0x82040d00,
- 0xfffffbff, 0x82040d40, 0x00008000, 0x4807c003,
- 0x800409c0, 0x04000007, 0x4202e000, 0x00000001,
- 0x0200b800, 0x00020874, 0x0200f000, 0x00020889,
- 0x1c01f000, 0x0201f800, 0x0010032e, 0x1c01f000,
- 0x0401f852, 0x5c03e000, 0x0201f000, 0x000206be,
- 0x0201f800, 0x00020705, 0x0401f7fb, 0x00105642,
- 0x00105642, 0x00105642, 0x00105642, 0x00105652,
- 0x00105642, 0x00105642, 0x00105642, 0x00105642,
- 0x00105642, 0x000206fc, 0x00105642, 0x00105642,
- 0x00105652, 0x00105652, 0x00105642, 0x00105642,
- 0x00105642, 0x00105642, 0x00105642, 0x00105642,
- 0x00105642, 0x00105642, 0x00105642, 0x00105642,
- 0x00105642, 0x00105642, 0x00105642, 0x00105642,
- 0x00105642, 0x00105642, 0x00105642, 0x00105642,
- 0x00105642, 0x00105642, 0x00105642, 0x00105642,
- 0x00105642, 0x00105642, 0x00105642, 0x00105642,
- 0x00105642, 0x00105642, 0x00105642, 0x00105642,
- 0x00105642, 0x00105642, 0x00105642, 0x00105642,
- 0x00105642, 0x00105642, 0x00105642, 0x00105642,
- 0x00105642, 0x00105642, 0x00105642, 0x00105642,
- 0x00105642, 0x00105642, 0x00105642, 0x00105642,
- 0x00105642, 0x00105642, 0x00105642, 0x00105642,
- 0x00105642, 0x00105642, 0x00105642, 0x00105642,
- 0x00105642, 0x00105642, 0x00105642, 0x00105642,
- 0x00105642, 0x000206fc, 0x492fc857, 0x42000000,
- 0x0010cf1e, 0x0201f800, 0x0010bfb3, 0x42000000,
+ 0x90000001, 0x59d80005, 0x4a03a804, 0x60000001,
+ 0x59d40005, 0x4a03a804, 0x90000001, 0x0201f000,
+ 0x00105fca, 0x4a03c825, 0x00000004, 0x4a03c827,
+ 0x00000004, 0x599c0409, 0x80000d40, 0x04000020,
+ 0x599c0407, 0x80000540, 0x04000007, 0x800000cc,
+ 0x599c100b, 0x80080400, 0x4803b000, 0x497bb002,
+ 0x59d80001, 0x599c000b, 0x4803b000, 0x599c000c,
+ 0x4803b001, 0x599c0407, 0x80000540, 0x04020002,
+ 0x497bb002, 0x599c0c09, 0x82040540, 0x00400000,
+ 0x4803b003, 0x4a03b009, 0x00000005, 0x4a03b004,
+ 0x10000001, 0x59e00803, 0x82040d00, 0xfffffeff,
+ 0x82040d40, 0x00008000, 0x4807c003, 0x599c040a,
+ 0x80000540, 0x04000020, 0x599c0408, 0x80000540,
+ 0x04000007, 0x800000cc, 0x599c100f, 0x80080400,
+ 0x4803a800, 0x497ba802, 0x59d40001, 0x599c000f,
+ 0x4803a800, 0x599c0010, 0x4803a801, 0x599c0408,
+ 0x80000540, 0x04020002, 0x497ba802, 0x599c0c0a,
+ 0x82040540, 0x00400000, 0x4803a803, 0x4a03a809,
+ 0x00000005, 0x4a03a804, 0x10000001, 0x59e00803,
+ 0x82040d00, 0xfffffbff, 0x82040d40, 0x00008000,
+ 0x4807c003, 0x800409c0, 0x04000007, 0x4202e000,
+ 0x00000001, 0x0200b800, 0x000207cc, 0x0200f000,
+ 0x000207e1, 0x1c01f000, 0x0201f800, 0x0010032f,
+ 0x1c01f000, 0x0401f855, 0x5c03e000, 0x0201f000,
+ 0x000206cb, 0x59980004, 0x80000540, 0x02000000,
+ 0x000206af, 0x0201f000, 0x00106008, 0x00105826,
+ 0x00105826, 0x00105826, 0x00105826, 0x00105836,
+ 0x00105826, 0x00105826, 0x00105826, 0x00105826,
+ 0x00105826, 0x00020709, 0x00105826, 0x00105826,
+ 0x00105836, 0x00105836, 0x00105826, 0x00105826,
+ 0x00105826, 0x00105826, 0x00105826, 0x00105826,
+ 0x00105826, 0x00105826, 0x00105826, 0x00105826,
+ 0x00105826, 0x00105826, 0x00105826, 0x00105826,
+ 0x00105826, 0x00105826, 0x00105826, 0x00105826,
+ 0x00105826, 0x00105826, 0x00105826, 0x00105826,
+ 0x00105826, 0x00105826, 0x00105826, 0x00105826,
+ 0x00105826, 0x00105826, 0x00105826, 0x00105826,
+ 0x00105826, 0x00105826, 0x00105826, 0x00105826,
+ 0x00105826, 0x00105826, 0x00105826, 0x00105826,
+ 0x00105826, 0x00105826, 0x00105826, 0x00105826,
+ 0x00105826, 0x00105826, 0x00105826, 0x00105826,
+ 0x00105826, 0x00105826, 0x00105826, 0x00105826,
+ 0x00105826, 0x00105826, 0x00105826, 0x00105826,
+ 0x00105826, 0x00105826, 0x00105826, 0x00105826,
+ 0x00105826, 0x00020709, 0x492fc857, 0x42000000,
+ 0x0010d539, 0x0201f800, 0x0010c50a, 0x42000000,
0x00000400, 0x0401f019, 0x492fc857, 0x42000000,
- 0x0010cf1d, 0x0201f800, 0x0010bfb3, 0x42000000,
+ 0x0010d538, 0x0201f800, 0x0010c50a, 0x42000000,
0x00001000, 0x0401f011, 0x492fc857, 0x42000000,
- 0x0010cf1c, 0x0201f800, 0x0010bfb3, 0x42000000,
+ 0x0010d537, 0x0201f800, 0x0010c50a, 0x42000000,
0x00002000, 0x0401f009, 0x492fc857, 0x42000000,
- 0x0010cf1f, 0x0201f800, 0x0010bfb3, 0x42000000,
+ 0x0010d53a, 0x0201f800, 0x0010c50a, 0x42000000,
0x00000800, 0x0401f001, 0x4803c857, 0x592c0c05,
0x82040d00, 0xffff80ff, 0x80040540, 0x59980803,
0x800409c0, 0x04000002, 0x8400051e, 0x48025c05,
- 0x0201f800, 0x000203ef, 0x83700580, 0x00000003,
+ 0x0201f800, 0x00020401, 0x83700580, 0x00000003,
0x4202e000, 0x00000001, 0x04000002, 0x1c01f000,
0x599a5801, 0x812e59c0, 0x040207dc, 0x0201f800,
- 0x0010032e, 0x492fc857, 0x80140110, 0x80000040,
- 0x04000039, 0x040017cd, 0x4a033006, 0x001056b5,
- 0x0201f000, 0x000206d1, 0x492fc857, 0x80140110,
+ 0x0010032f, 0x492fc857, 0x80140110, 0x80000040,
+ 0x04000039, 0x040017cd, 0x4a033006, 0x00105899,
+ 0x0201f000, 0x000206de, 0x492fc857, 0x80140110,
0x040007c6, 0x80000040, 0x0400004a, 0x4a033006,
- 0x001056d0, 0x0201f000, 0x000206d1, 0x492fc857,
- 0x0201f800, 0x0010c0bb, 0x02020000, 0x000206e1,
- 0x492fc856, 0x83440400, 0x0010c280, 0x50000000,
+ 0x001058b4, 0x0201f000, 0x000206de, 0x492fc857,
+ 0x0201f800, 0x0010c612, 0x02020000, 0x000206ee,
+ 0x492fc856, 0x83440400, 0x0010c880, 0x50000000,
0x80026d40, 0x0400000c, 0x592e4411, 0x81224110,
0x59340013, 0x80000130, 0x81200580, 0x04020006,
0x4937c857, 0x59340200, 0x8c00050e, 0x02020000,
- 0x000206e1, 0x42028000, 0x00000028, 0x41780800,
- 0x417a6000, 0x0201f800, 0x00104e1a, 0x0201f800,
- 0x00109a5c, 0x0201f000, 0x000203ef, 0x82000500,
+ 0x000206ee, 0x42028000, 0x00000028, 0x41780800,
+ 0x417a6000, 0x0201f800, 0x00104f92, 0x0201f800,
+ 0x00109e0c, 0x0201f000, 0x00020401, 0x82000500,
0x0f000000, 0x8000012a, 0x592c0c0b, 0x82040d00,
0x0000ff87, 0x80040540, 0x48025c0b, 0x0201f000,
- 0x000206f7, 0x592c0a0b, 0x8c040d02, 0x04020015,
+ 0x00020704, 0x592c0a0b, 0x8c040d02, 0x04020015,
0x492fc857, 0x8d0e1d0e, 0x0402000f, 0x592c0208,
- 0x80000540, 0x04000005, 0x0201f800, 0x00104358,
+ 0x80000540, 0x04000005, 0x0201f800, 0x00104469,
0x04020004, 0x1c01f000, 0x42000000, 0x00000000,
0x592c0a07, 0x48065c07, 0x48025a07, 0x0201f000,
- 0x000203ef, 0x42000000, 0x00000028, 0x0401f7f9,
- 0x42000800, 0x00000009, 0x0201f000, 0x00106c58,
+ 0x00020401, 0x42000000, 0x00000028, 0x0401f7f9,
+ 0x42000800, 0x00000009, 0x0201f000, 0x00106fbb,
0x492fc857, 0x592c0409, 0x80000540, 0x04020787,
0x8d0e1d0e, 0x04020009, 0x592c0208, 0x80000540,
- 0x04000782, 0x497a5a07, 0x0201f800, 0x001043b8,
+ 0x04000782, 0x497a5a07, 0x0201f800, 0x001044c9,
0x04020004, 0x1c01f000, 0x42000000, 0x00000028,
- 0x48025a07, 0x0201f000, 0x000203ef, 0x592e8a07,
+ 0x48025a07, 0x0201f000, 0x00020401, 0x592e8a07,
0x592c0407, 0x4947c857, 0x4803c857, 0x82000500,
0x000000ff, 0x4200b800, 0x00000001, 0x82000d80,
0x00000001, 0x04000015, 0x417a8800, 0x4200b800,
0x000007f0, 0x82000d80, 0x00000002, 0x0400000f,
- 0x80000540, 0x02020000, 0x000203ef, 0x592e8a07,
- 0x0201f800, 0x0002034c, 0x02020000, 0x000203ef,
- 0x592e9009, 0x592e980a, 0x0201f800, 0x001047dc,
- 0x0201f000, 0x000203ef, 0x850e1d00, 0x0201f800,
- 0x0002034c, 0x02000800, 0x0010490b, 0x81468800,
- 0x805cb840, 0x040207fa, 0x0201f000, 0x000203ef,
+ 0x80000540, 0x02020000, 0x00020401, 0x592e8a07,
+ 0x0201f800, 0x00020353, 0x02020000, 0x00020401,
+ 0x592e9009, 0x592e980a, 0x0201f800, 0x00104932,
+ 0x0201f000, 0x00020401, 0x850e1d00, 0x0201f800,
+ 0x00020353, 0x02000800, 0x00104a61, 0x81468800,
+ 0x805cb840, 0x040207fa, 0x0201f000, 0x00020401,
0x592c0a09, 0x4807c857, 0x592e4411, 0x81224110,
0x82040580, 0x0000000e, 0x04000096, 0x82040580,
0x0000002a, 0x04000031, 0x82040580, 0x0000000f,
- 0x02000000, 0x00105d2d, 0x82040580, 0x0000002e,
- 0x02000000, 0x00105d2d, 0x4c040000, 0x0201f800,
- 0x00105c82, 0x5c000800, 0x02020000, 0x00105d34,
- 0x82040580, 0x00000046, 0x040000a7, 0x82040580,
- 0x00000045, 0x04000039, 0x82040580, 0x00000049,
- 0x02000000, 0x00105d2d, 0x82040580, 0x00000029,
- 0x02020000, 0x00105d34, 0x592e8a07, 0x42026800,
- 0x0010e23c, 0x83440580, 0x0000ffff, 0x04000008,
- 0x0201f800, 0x00104a7c, 0x02020000, 0x00105d2d,
+ 0x02000000, 0x00105fe0, 0x82040580, 0x0000002e,
+ 0x02000000, 0x00105fe0, 0x82040580, 0x00000049,
+ 0x02000000, 0x00105fe0, 0x4c040000, 0x0201f800,
+ 0x00105f30, 0x5c000800, 0x02020000, 0x00105fe7,
+ 0x82040580, 0x00000046, 0x040000a1, 0x82040580,
+ 0x00000045, 0x04000035, 0x82040580, 0x00000029,
+ 0x02020000, 0x00105fe7, 0x592e8a07, 0x42026800,
+ 0x0010e85a, 0x83440580, 0x0000ffff, 0x04000008,
+ 0x0201f800, 0x00104bd5, 0x02020000, 0x00105fe0,
0x59340200, 0x84000518, 0x48026a00, 0x592e600a,
- 0x4933c857, 0x83300580, 0xffffffff, 0x04020090,
- 0x0201f000, 0x00105d2d, 0x83200580, 0x000000ff,
- 0x04000009, 0x83200400, 0x0010c10d, 0x50024800,
+ 0x4933c857, 0x83300580, 0xffffffff, 0x0402008e,
+ 0x0201f000, 0x00105fe0, 0x83200580, 0x000000ff,
+ 0x04000009, 0x83200400, 0x0010c6ac, 0x50024800,
0x59240a00, 0x84040d16, 0x48064a00, 0x0201f000,
- 0x00105d2d, 0x42024800, 0x0010cfd1, 0x0201f800,
- 0x0010c0ca, 0x59240200, 0x8c000500, 0x04000004,
+ 0x00105fe0, 0x42024800, 0x0010d5ef, 0x0201f800,
+ 0x0010c621, 0x59240200, 0x8c000500, 0x04000004,
0x59240200, 0x84000516, 0x48024a00, 0x83264c00,
0x0000000b, 0x8058b040, 0x040207f7, 0x850e1d04,
- 0x0201f000, 0x00105d2d, 0x592c1408, 0x480bc857,
- 0x0201f800, 0x00109cf9, 0x411e6000, 0x04020004,
- 0x4803c856, 0x0201f000, 0x00105d34, 0x59300c07,
+ 0x0201f000, 0x00105fe0, 0x592c1408, 0x480bc857,
+ 0x0201f800, 0x0010a0ab, 0x411e6000, 0x04020004,
+ 0x4803c856, 0x0201f000, 0x00105fe7, 0x59300c07,
0x82040580, 0x00000004, 0x04000004, 0x4803c856,
- 0x0201f000, 0x00105d34, 0x592c0208, 0x8c000506,
- 0x04000010, 0x0201f800, 0x00106e41, 0x4df00000,
- 0x0201f800, 0x00106d2b, 0x0201f800, 0x00110148,
- 0x80c40040, 0x5c03e000, 0x02000800, 0x00106e2e,
- 0x0201f800, 0x00107eb4, 0x0201f000, 0x00105d2d,
+ 0x0201f000, 0x00105fe7, 0x592c0208, 0x8c000506,
+ 0x04000010, 0x0201f800, 0x001071b0, 0x4df00000,
+ 0x0201f800, 0x0010708e, 0x0201f800, 0x00110849,
+ 0x80c40040, 0x5c03e000, 0x02000800, 0x0010719d,
+ 0x0201f800, 0x00108253, 0x0201f000, 0x00105fe0,
0x592e380a, 0x591c1415, 0x8c081516, 0x02000000,
- 0x00105d34, 0x59300009, 0x800001c0, 0x02020800,
- 0x0010032e, 0x84081554, 0x480a3c15, 0x4a026403,
+ 0x00105fe7, 0x59300009, 0x800001c0, 0x02020800,
+ 0x0010032f, 0x84081554, 0x480a3c15, 0x4a026403,
0x0000003a, 0x592c040c, 0x80000540, 0x04000007,
- 0x4a026403, 0x0000003b, 0x592c020d, 0x4802641b,
- 0x592c040d, 0x4802621b, 0x4a026203, 0x00000001,
- 0x42000800, 0x80000040, 0x0201f800, 0x00105d3e,
- 0x04000004, 0x492e6009, 0x0201f000, 0x00020b3e,
- 0x0201f800, 0x00020b3e, 0x0201f000, 0x00105d2d,
- 0x83200d80, 0x000000ff, 0x04000013, 0x42000000,
- 0x0010cfd0, 0x50000000, 0x81200480, 0x02021000,
- 0x0002086a, 0x83200400, 0x0010c10d, 0x50024800,
- 0x59240200, 0x8c000500, 0x02000000, 0x0002086a,
- 0x59240206, 0x84000510, 0x48024a06, 0x0201f000,
- 0x00105d2d, 0x42024800, 0x0010cfd1, 0x0201f800,
- 0x0010c0ca, 0x59240200, 0x8c000500, 0x04000004,
- 0x59240206, 0x84000510, 0x48024a06, 0x83264c00,
- 0x0000000b, 0x8058b040, 0x040207f7, 0x0201f000,
- 0x00105d2d, 0x592c1208, 0x8c081500, 0x02020000,
- 0x00105d2d, 0x592e8a07, 0x592e600a, 0x0201f800,
- 0x00109d04, 0x04020004, 0x4803c856, 0x0201f000,
- 0x00105d34, 0x59300c07, 0x82040580, 0x00000004,
- 0x04000004, 0x4803c856, 0x0201f000, 0x00105d34,
- 0x59300a03, 0x82040580, 0x00000007, 0x04000004,
- 0x4803c856, 0x0201f000, 0x00105d34, 0x59300c03,
- 0x82040580, 0x00000001, 0x0400001f, 0x82040580,
- 0x00000002, 0x04000014, 0x82040580, 0x00000008,
- 0x04000016, 0x82040580, 0x0000000a, 0x04000007,
- 0x82040580, 0x0000000c, 0x04020027, 0x42000800,
- 0x00000009, 0x0401f022, 0x5932680a, 0x0201f800,
- 0x00104a38, 0x04020020, 0x42000800, 0x00000005,
- 0x0401f01b, 0x417a7800, 0x0201f800, 0x0010ff80,
- 0x4a026407, 0x00000001, 0x42000800, 0x00000003,
- 0x0401f013, 0x83340580, 0x0010e23c, 0x04020009,
- 0x5930000a, 0x82000580, 0x0010e23c, 0x02020000,
- 0x00105d34, 0x4a026407, 0x00000001, 0x0401f00a,
- 0x417a7800, 0x0201f800, 0x0010ff80, 0x4a026407,
- 0x00000001, 0x42000800, 0x0000000b, 0x0201f800,
- 0x001045ea, 0x4a026203, 0x00000001, 0x0201f800,
- 0x00105d3e, 0x04000004, 0x492e6009, 0x0201f000,
- 0x00106d1c, 0x0201f800, 0x00106d1c, 0x0201f000,
- 0x00105d2d, 0x59300415, 0x8c000518, 0x02020000,
- 0x0010b3d7, 0x0401f0b8, 0x40000800, 0x58040000,
+ 0x4a026403, 0x0000003b, 0x592c0412, 0x4802641b,
+ 0x592c0212, 0x4802621b, 0x4a026203, 0x00000001,
+ 0x42000800, 0x80000040, 0x0201f800, 0x00105ff1,
+ 0x04000004, 0x492e6009, 0x0201f000, 0x00020a9f,
+ 0x0201f800, 0x00020a9f, 0x0201f000, 0x00105fe0,
+ 0x83200d80, 0x000000ff, 0x04000011, 0x42000000,
+ 0x0010d5ee, 0x50000000, 0x81200480, 0x04021231,
+ 0x83200400, 0x0010c6ac, 0x50024800, 0x59240200,
+ 0x8c000500, 0x0400022b, 0x59240206, 0x84000510,
+ 0x48024a06, 0x0201f000, 0x00105fe0, 0x42024800,
+ 0x0010d5ef, 0x0201f800, 0x0010c621, 0x59240200,
+ 0x8c000500, 0x04000004, 0x59240206, 0x84000510,
+ 0x48024a06, 0x83264c00, 0x0000000b, 0x8058b040,
+ 0x040207f7, 0x0201f000, 0x00105fe0, 0x592c1208,
+ 0x8c081500, 0x02020000, 0x00105fe0, 0x592e8a07,
+ 0x592e600a, 0x0201f800, 0x0010a0b6, 0x04020004,
+ 0x4803c856, 0x0201f000, 0x00105fe7, 0x59300c07,
+ 0x82040580, 0x00000004, 0x04000004, 0x4803c856,
+ 0x0201f000, 0x00105fe7, 0x59300a03, 0x82040580,
+ 0x00000007, 0x04000004, 0x4803c856, 0x0201f000,
+ 0x00105fe7, 0x59300c03, 0x82040580, 0x00000001,
+ 0x04000026, 0x82040580, 0x00000002, 0x04000014,
+ 0x82040580, 0x00000008, 0x04000017, 0x82040580,
+ 0x0000000a, 0x04000007, 0x82040580, 0x0000000c,
+ 0x0402002e, 0x42000800, 0x00000009, 0x0401f029,
+ 0x5932680a, 0x0201f800, 0x00104b91, 0x04020027,
+ 0x42000800, 0x00000005, 0x0401f022, 0x417a7800,
+ 0x0201f800, 0x00110684, 0x4a026407, 0x00000001,
+ 0x0401f007, 0x592c1208, 0x8c08150e, 0x04000004,
+ 0x0201f800, 0x0010c696, 0x04020024, 0x42000800,
+ 0x00000003, 0x0401f013, 0x83340580, 0x0010e85a,
+ 0x04020009, 0x5930000a, 0x82000580, 0x0010e85a,
+ 0x02020000, 0x00105fe7, 0x4a026407, 0x00000001,
+ 0x0401f00a, 0x417a7800, 0x0201f800, 0x00110684,
+ 0x4a026407, 0x00000001, 0x42000800, 0x0000000b,
+ 0x0201f800, 0x00104736, 0x4a026203, 0x00000001,
+ 0x0201f800, 0x00105ff1, 0x04000004, 0x492e6009,
+ 0x0201f000, 0x0010707f, 0x0201f800, 0x0010707f,
+ 0x0201f000, 0x00105fe0, 0x4a026403, 0x00000009,
+ 0x592c0212, 0x4802621b, 0x592c0412, 0x4802641b,
+ 0x0401f7ee, 0x59300415, 0x8c000518, 0x02020000,
+ 0x0010b8ce, 0x0401f0ba, 0x40000800, 0x58040000,
0x80000540, 0x040207fd, 0x492c0800, 0x1c01f000,
0x492fc857, 0x59300c07, 0x82040580, 0x00000006,
- 0x040200a8, 0x59340400, 0x82000580, 0x00000606,
+ 0x040200aa, 0x59340400, 0x82000580, 0x00000606,
0x04020005, 0x59340200, 0x8c00051a, 0x02000000,
- 0x00020762, 0x59340200, 0x8c00050e, 0x0400009d,
+ 0x00020772, 0x59340200, 0x8c00050e, 0x0400009f,
0x59300203, 0x42027800, 0x00000001, 0x82000580,
- 0x00000007, 0x02020000, 0x00020762, 0x4a026203,
- 0x00000002, 0x0201f000, 0x00020762, 0x42028000,
+ 0x00000007, 0x02020000, 0x00020772, 0x4a026203,
+ 0x00000002, 0x0201f000, 0x00020772, 0x42028000,
0x00000002, 0x4a026006, 0x00000014, 0x4d2c0000,
- 0x0201f800, 0x0010afbb, 0x5c025800, 0x59300c07,
- 0x4807c857, 0x82040580, 0x00000007, 0x0402006c,
+ 0x0201f800, 0x0010b464, 0x5c025800, 0x59300c07,
+ 0x4807c857, 0x82040580, 0x00000007, 0x0402006e,
0x492fc857, 0x4a025a07, 0x00000001, 0x0201f000,
- 0x000203ef, 0x83300580, 0xffffffff, 0x04020064,
+ 0x00020401, 0x83300580, 0xffffffff, 0x04020066,
0x592c240b, 0x492fc857, 0x4813c857, 0x8c10251c,
0x0402001a, 0x8c10251a, 0x04000003, 0x8c10250a,
- 0x04000079, 0x59340a00, 0x8c040d0e, 0x04000003,
- 0x8c10251e, 0x04000074, 0x0201f800, 0x00020b7b,
- 0x04000082, 0x592c240b, 0x59243a00, 0x592c020d,
+ 0x0400007b, 0x59340a00, 0x8c040d0e, 0x04000003,
+ 0x8c10251e, 0x04000076, 0x0201f800, 0x00020adc,
+ 0x04000084, 0x592c240b, 0x59243a00, 0x592c020d,
0x48026202, 0x4936600a, 0x4926601c, 0x4932580a,
- 0x4a026407, 0x00000006, 0x4a026203, 0x00000007,
- 0x0201f000, 0x0002075b, 0x592c0a0d, 0x4c040000,
- 0x0201f800, 0x00104d86, 0x5c000800, 0x04020084,
+ 0x4a026007, 0x00068000, 0x4a026203, 0x00000007,
+ 0x0201f000, 0x0002076b, 0x592c0a0d, 0x4c040000,
+ 0x0201f800, 0x00104ef1, 0x5c000800, 0x04020090,
0x58080000, 0x49781000, 0x802041c0, 0x04000006,
0x48004000, 0x80000540, 0x04020007, 0x48226810,
0x0401f005, 0x4802680f, 0x80000540, 0x04020002,
0x497a6810, 0x4d2c0000, 0x400a5800, 0x4a025a07,
- 0x00000002, 0x0201f800, 0x000203ef, 0x5c025800,
- 0x0401f7c0, 0x8c10251c, 0x02020000, 0x00020747,
- 0x0401f022, 0x0201f800, 0x00104a7c, 0x02000000,
- 0x00020739, 0x42000000, 0x0010cfd0, 0x50000000,
- 0x81200480, 0x04021037, 0x8c10251c, 0x04000017,
- 0x592c0207, 0x82000580, 0x0000ffff, 0x04020013,
- 0x592e600a, 0x83300580, 0xffffffff, 0x040007a9,
- 0x0201f800, 0x0010a2d8, 0x04020011, 0x592c220d,
- 0x59300202, 0x80100580, 0x0402000d, 0x59300009,
- 0x800001c0, 0x04020005, 0x59300203, 0x82000580,
- 0x00000007, 0x0400078e, 0x492fc857, 0x4a025a07,
- 0x00000029, 0x0201f000, 0x000203ef, 0x492fc857,
- 0x4a025a07, 0x00000008, 0x0201f000, 0x000203ef,
- 0x4803c857, 0x8c000514, 0x04000008, 0x42000000,
- 0x0010cf0d, 0x0201f800, 0x0010bfb3, 0x492fc857,
- 0x492e6009, 0x1c01f000, 0x492fc857, 0x4a025a07,
- 0x00000045, 0x0201f000, 0x000203ef, 0x492fc857,
- 0x4a025a07, 0x0000002a, 0x0201f000, 0x000203ef,
- 0x492fc857, 0x4a025a07, 0x00000028, 0x0201f000,
- 0x000203ef, 0x492fc857, 0x4a025a07, 0x00000006,
- 0x0201f000, 0x000203ef, 0x492fc857, 0x4a025a07,
- 0x0000000e, 0x0201f000, 0x000203ef, 0x82040580,
- 0x00000007, 0x040207d6, 0x4a025a07, 0x00000002,
- 0x0201f000, 0x000203ef, 0x592c0407, 0x800000c2,
+ 0x00000002, 0x0201f800, 0x00020401, 0x5c025800,
+ 0x0401f7c0, 0x8c10251c, 0x02020000, 0x00020757,
+ 0x0401f024, 0x4c100000, 0x0201f800, 0x00104bd5,
+ 0x5c002000, 0x02000000, 0x00020746, 0x42000000,
+ 0x0010d5ee, 0x50000000, 0x81200480, 0x04021037,
+ 0x8c10251c, 0x04000017, 0x592c0207, 0x82000580,
+ 0x0000ffff, 0x04020013, 0x592e600a, 0x83300580,
+ 0xffffffff, 0x040007a7, 0x0201f800, 0x0010a6dc,
+ 0x04020011, 0x592c220d, 0x59300202, 0x80100580,
+ 0x0402000d, 0x59300009, 0x800001c0, 0x04020005,
+ 0x59300203, 0x82000580, 0x00000007, 0x0400078c,
+ 0x492fc857, 0x4a025a07, 0x00000029, 0x0201f000,
+ 0x00020401, 0x492fc857, 0x4a025a07, 0x00000008,
+ 0x0201f000, 0x00020401, 0x4803c857, 0x8c000514,
+ 0x04000008, 0x42000000, 0x0010d523, 0x0201f800,
+ 0x0010c50a, 0x492fc857, 0x492e6009, 0x1c01f000,
+ 0x492fc857, 0x4a025a07, 0x00000045, 0x0201f000,
+ 0x00020401, 0x492fc857, 0x4a025a07, 0x0000002a,
+ 0x0201f000, 0x00020401, 0x492fc857, 0x4a025a07,
+ 0x00000028, 0x0201f000, 0x00020401, 0x492fc857,
+ 0x4a025a07, 0x00000006, 0x0201f000, 0x00020401,
+ 0x492fc857, 0x4a025a07, 0x0000000e, 0x0201f000,
+ 0x00020401, 0x82040580, 0x00000007, 0x040207d6,
+ 0x4a025a07, 0x00000002, 0x0201f000, 0x00020401,
+ 0x0201f800, 0x00104f27, 0x04020008, 0x42000000,
+ 0x0010d52f, 0x0201f800, 0x0010c50a, 0x0201f800,
+ 0x0010a944, 0x04020774, 0x592c0407, 0x800000c2,
0x800008c4, 0x80040400, 0x48025804, 0x59340010,
0x492e6810, 0x492fc857, 0x80000d40, 0x04000003,
0x492c0800, 0x1c01f000, 0x59340203, 0x492e680f,
0x492fc857, 0x4803c857, 0x80000540, 0x04020003,
- 0x4a026a03, 0x00000001, 0x1c01f000, 0x59a8000d,
- 0x81640480, 0x0402174f, 0x42026000, 0x00111584,
+ 0x4a026a03, 0x00000001, 0x1c01f000, 0x59a80013,
+ 0x81640480, 0x04021743, 0x42026000, 0x00111d44,
0x59300407, 0x82000580, 0x00000006, 0x04020007,
0x5930000a, 0x81340580, 0x04020004, 0x59300202,
- 0x80040580, 0x04000736, 0x83326400, 0x0000002c,
- 0x41580000, 0x81300480, 0x040017f2, 0x0401f73d,
- 0x492fc857, 0x592c040b, 0x82000500, 0x00000003,
- 0x04000024, 0x0201f800, 0x00107ef8, 0x04000025,
- 0x592c0205, 0x492e6009, 0x42024800, 0x0010cfd1,
- 0x4926601c, 0x82000500, 0x000000ff, 0x82000580,
- 0x00000045, 0x0400000f, 0x592c000c, 0x59243805,
- 0x0201f800, 0x00106134, 0x02000800, 0x0002034c,
- 0x04020018, 0x42027000, 0x00000041, 0x4936600a,
- 0x4a026407, 0x00000001, 0x0201f000, 0x00020bc1,
- 0x59300016, 0x8400055e, 0x48026016, 0x42026800,
- 0x0010cb7b, 0x42027000, 0x00000040, 0x0401f7f4,
- 0x4a025a07, 0x00000101, 0x0201f000, 0x000203ef,
- 0x4a025a07, 0x0000002c, 0x0201f000, 0x000203ef,
- 0x4a025a07, 0x00000028, 0x0201f800, 0x000203ef,
- 0x0201f000, 0x00020b9d, 0x492fc857, 0x0201f800,
- 0x001068b0, 0x0400000b, 0x592c0205, 0x80000110,
- 0x80000040, 0x040204ed, 0x592c0c07, 0x800409c0,
- 0x04000009, 0x42000000, 0x00000102, 0x0401f003,
- 0x42000000, 0x00000104, 0x48025a07, 0x0201f000,
- 0x000203ef, 0x592c0c08, 0x800409c0, 0x04000020,
- 0x82040480, 0x00000005, 0x0402101d, 0x4c040000,
- 0x80040800, 0x0201f800, 0x001068d5, 0x5c001000,
- 0x04020014, 0x832c0400, 0x00000009, 0x4000a000,
- 0x0201f800, 0x001068fe, 0x0402000e, 0x592c1208,
- 0x58c80c0b, 0x84040d00, 0x84040d02, 0x8c081500,
- 0x04000002, 0x84040d5e, 0x4805940b, 0x42000000,
- 0x00000000, 0x48025a07, 0x0201f000, 0x000203ef,
- 0x42000000, 0x00000103, 0x0401f7fb, 0x42000000,
- 0x00000102, 0x0401f7f8, 0x492fc857, 0x592e7c07,
- 0x833c0500, 0xfffffffe, 0x0402004d, 0x592c4008,
- 0x42026000, 0x00111584, 0x41581800, 0x400c0000,
- 0x81300480, 0x0402102c, 0x59300203, 0x82000580,
- 0x00000000, 0x04000007, 0x59300009, 0x80000d40,
- 0x04000004, 0x58040006, 0x80200580, 0x04000004,
- 0x83326400, 0x0000002c, 0x0401f7f1, 0x58040205,
- 0x82000500, 0x000000ff, 0x82000d80, 0x00000053,
- 0x04000010, 0x82000d80, 0x00000048, 0x0400000d,
- 0x82000d80, 0x00000018, 0x0400000a, 0x82000d80,
- 0x00000029, 0x04000007, 0x82000d80, 0x00000014,
- 0x04000004, 0x82000580, 0x00000068, 0x040207e9,
- 0x4d2c0000, 0x0201f800, 0x00109425, 0x5c025800,
- 0x0400001f, 0x4a025a07, 0x00000000, 0x0201f000,
- 0x000203ef, 0x592e8a07, 0x83440480, 0x000007f0,
- 0x04021017, 0x83440400, 0x0010c280, 0x50000000,
- 0x80026d40, 0x04000012, 0x4d2c0000, 0x0201f800,
- 0x001048a0, 0x0400000d, 0x42028000, 0x00000005,
- 0x592c0a09, 0x417a6000, 0x0201f800, 0x00104e1a,
- 0x0201f800, 0x00109a62, 0x0201f800, 0x000203ef,
- 0x5c025800, 0x0401f7e4, 0x5c025800, 0x4a025a07,
- 0x00000031, 0x0201f000, 0x000203ef, 0x492fc857,
- 0x4d2c0000, 0x0201f800, 0x00100583, 0x04000017,
- 0x492fc857, 0x412f4000, 0x0201f800, 0x00100583,
- 0x0400000f, 0x492fc857, 0x412dd800, 0x0201f800,
- 0x00103aa6, 0x0201f800, 0x00103ab0, 0x49a1d80a,
- 0x5c025800, 0x492dd809, 0x48ef4006, 0x0201f800,
- 0x0010221c, 0x0201f000, 0x0010223b, 0x41a25800,
- 0x0201f800, 0x00100594, 0x5c025800, 0x4a025a07,
- 0x00004005, 0x4a025c07, 0x00000002, 0x0201f000,
- 0x000203ef, 0x4807c857, 0x485fc857, 0x4200b800,
- 0x00000001, 0x5c000800, 0x4c5c0000, 0x0401f005,
- 0x4807c857, 0x485fc857, 0x5c000800, 0x4d780000,
- 0x4803c857, 0x492fc857, 0x8c00050e, 0x02020800,
- 0x00100323, 0x4203e000, 0x50000000, 0x4200b800,
- 0x00008003, 0x0201f000, 0x00100333, 0x4803c856,
- 0x4c5c0000, 0x4c600000, 0x4c640000, 0x4d040000,
- 0x836c0580, 0x00000000, 0x040000ff, 0x592c0208,
- 0x8200cd00, 0x000000ff, 0x592c0408, 0x8200c500,
- 0x000000ff, 0x040000fe, 0x42000000, 0x0010cfd0,
- 0x50000000, 0x4c000000, 0x0201f800, 0x0010c0e8,
+ 0x80040580, 0x0400072a, 0x83326400, 0x0000002c,
+ 0x41580000, 0x81300480, 0x040017f2, 0x0401f731,
+ 0x492fc857, 0x592e4411, 0x81224110, 0x0201f800,
+ 0x00105f30, 0x04020062, 0x592c0205, 0x80000112,
+ 0x0402050a, 0x592e8a07, 0x0201f800, 0x00104bd5,
+ 0x0402005b, 0x0201f800, 0x00104b75, 0x0402005b,
+ 0x592e780b, 0x493fc857, 0x8d3e7d3e, 0x04020006,
+ 0x8d0e1d0e, 0x04020052, 0x0201f800, 0x00104a6d,
+ 0x0400050a, 0x833c1d00, 0x0000001f, 0x04000507,
+ 0x592c0208, 0x82000c80, 0x00001000, 0x04021503,
+ 0x800000c2, 0x800008c4, 0x8005d400, 0x592e9009,
+ 0x592e980a, 0x5934080d, 0x800409c0, 0x04000004,
+ 0x58041802, 0x800c19c0, 0x04020037, 0x833c1d00,
+ 0x0000001f, 0x81780040, 0x80000000, 0x800c1902,
+ 0x040217fe, 0x040204f1, 0x0c01f001, 0x00105b54,
+ 0x00105b57, 0x00105b64, 0x00105b67, 0x00105b6a,
+ 0x0201f800, 0x00109c5d, 0x0401f023, 0x0201f800,
+ 0x00104a3f, 0x04000027, 0x80e9d1c0, 0x02020800,
+ 0x0010688a, 0x42028000, 0x00000005, 0x417a9000,
+ 0x417a9800, 0x0201f800, 0x00109c6d, 0x0401f016,
+ 0x42027000, 0x0000004d, 0x0401f006, 0x42027000,
+ 0x0000004e, 0x0401f003, 0x42027000, 0x00000052,
+ 0x5934080d, 0x800409c0, 0x04000007, 0x4d3c0000,
+ 0x40067800, 0x0201f800, 0x00104a1f, 0x5c027800,
+ 0x04000009, 0x0201f800, 0x001048e8, 0x02020800,
+ 0x00109ca5, 0x04000007, 0x8d3e7d3e, 0x0402000e,
+ 0x1c01f000, 0x4a025a07, 0x00000030, 0x0401f00d,
+ 0x4a025a07, 0x0000002c, 0x0401f00a, 0x4a025a07,
+ 0x00000028, 0x0401f007, 0x4a025a07, 0x00000029,
+ 0x0401f004, 0x497a580a, 0x4a025a07, 0x00000000,
+ 0x4a025a05, 0x00000103, 0x0201f000, 0x00020401,
+ 0x492fc857, 0x80140110, 0x80000040, 0x04000002,
+ 0x0401f49a, 0x592c0208, 0x82000500, 0x00003fff,
+ 0x48025a08, 0x8c000506, 0x04000004, 0x82000500,
+ 0x00000070, 0x04020003, 0x8d0e1d0e, 0x04020018,
+ 0x4a025a07, 0x0000dead, 0x592c0409, 0x82000500,
+ 0x0000f0ff, 0x48025c09, 0x0201f800, 0x001044fe,
+ 0x04020002, 0x1c01f000, 0x49425a07, 0x8058b1c0,
+ 0x04000009, 0x0201f800, 0x0010a2d5, 0x0401f80f,
+ 0x44042800, 0x82580580, 0x00000002, 0x04020002,
+ 0x48082801, 0x0201f000, 0x00020401, 0x42028000,
+ 0x00000031, 0x42000800, 0x00000001, 0x4200b000,
+ 0x00000001, 0x0401f7ed, 0x592c0409, 0x80000118,
+ 0x832c2c00, 0x0000000a, 0x80142c00, 0x1c01f000,
+ 0x492fc857, 0x4a025a09, 0x00000006, 0x0201f000,
+ 0x00020401, 0x492fc857, 0x4a025a09, 0x00000001,
+ 0x0201f000, 0x00020401, 0x492fc857, 0x592c040b,
+ 0x82000500, 0x00000003, 0x04000024, 0x0201f800,
+ 0x00108297, 0x04000025, 0x592c0205, 0x492e6009,
+ 0x42024800, 0x0010d5ef, 0x4926601c, 0x82000500,
+ 0x000000ff, 0x82000580, 0x00000045, 0x0400000f,
+ 0x592c000c, 0x59243805, 0x0201f800, 0x00106463,
+ 0x02000800, 0x00020353, 0x04020018, 0x42027000,
+ 0x00000041, 0x4936600a, 0x4a026407, 0x00000001,
+ 0x0201f000, 0x00020b22, 0x59300016, 0x8400055e,
+ 0x48026016, 0x42026800, 0x0010d191, 0x42027000,
+ 0x00000040, 0x0401f7f4, 0x4a025a07, 0x00000101,
+ 0x0201f000, 0x00020401, 0x4a025a07, 0x0000002c,
+ 0x0201f000, 0x00020401, 0x4a025a07, 0x00000028,
+ 0x0201f800, 0x00020401, 0x0201f000, 0x00020afe,
+ 0x492fc857, 0x0201f800, 0x00106c10, 0x0400000b,
+ 0x592c0205, 0x80000110, 0x80000040, 0x04020423,
+ 0x592c0c07, 0x800409c0, 0x04000009, 0x42000000,
+ 0x00000102, 0x0401f003, 0x42000000, 0x00000104,
+ 0x48025a07, 0x0201f000, 0x00020401, 0x592c0c08,
+ 0x800409c0, 0x04000020, 0x82040480, 0x00000005,
+ 0x0402101d, 0x4c040000, 0x80040800, 0x0201f800,
+ 0x00106c35, 0x5c001000, 0x04020014, 0x832c0400,
+ 0x00000009, 0x4000a000, 0x0201f800, 0x00106c5e,
+ 0x0402000e, 0x592c1208, 0x58c80c0b, 0x84040d00,
+ 0x84040d02, 0x8c081500, 0x04000002, 0x84040d5e,
+ 0x4805940b, 0x42000000, 0x00000000, 0x48025a07,
+ 0x0201f000, 0x00020401, 0x42000000, 0x00000103,
+ 0x0401f7fb, 0x42000000, 0x00000102, 0x0401f7f8,
+ 0x492fc857, 0x592e7c07, 0x833c0500, 0xfffffffe,
+ 0x0402004d, 0x592c4008, 0x42026000, 0x00111d44,
+ 0x41581800, 0x400c0000, 0x81300480, 0x0402102c,
+ 0x59300203, 0x82000580, 0x00000000, 0x04000007,
+ 0x59300009, 0x80000d40, 0x04000004, 0x58040006,
+ 0x80200580, 0x04000004, 0x83326400, 0x0000002c,
+ 0x0401f7f1, 0x58040205, 0x82000500, 0x000000ff,
+ 0x82000d80, 0x00000053, 0x04000010, 0x82000d80,
+ 0x00000048, 0x0400000d, 0x82000d80, 0x00000018,
+ 0x0400000a, 0x82000d80, 0x00000029, 0x04000007,
+ 0x82000d80, 0x00000014, 0x04000004, 0x82000580,
+ 0x00000068, 0x040207e9, 0x4d2c0000, 0x0201f800,
+ 0x001097a0, 0x5c025800, 0x0400001f, 0x4a025a07,
+ 0x00000000, 0x0201f000, 0x00020401, 0x592e8a07,
+ 0x83440480, 0x000007f0, 0x04021017, 0x83440400,
+ 0x0010c880, 0x50000000, 0x80026d40, 0x04000012,
+ 0x4d2c0000, 0x0201f800, 0x001049f6, 0x0400000d,
+ 0x42028000, 0x00000005, 0x592c0a09, 0x417a6000,
+ 0x0201f800, 0x00104f92, 0x0201f800, 0x00109e12,
+ 0x0201f800, 0x00020401, 0x5c025800, 0x0401f7e4,
+ 0x5c025800, 0x4a025a07, 0x00000031, 0x0201f000,
+ 0x00020401, 0x492fc857, 0x4d2c0000, 0x0201f800,
+ 0x00100599, 0x04000017, 0x492fc857, 0x412f4000,
+ 0x0201f800, 0x00100599, 0x0400000f, 0x492fc857,
+ 0x412dd800, 0x0201f800, 0x00103b46, 0x0201f800,
+ 0x00103b50, 0x49a1d80a, 0x5c025800, 0x492dd809,
+ 0x48ef4006, 0x0201f800, 0x001022ac, 0x0201f000,
+ 0x001022cb, 0x41a25800, 0x0201f800, 0x001005aa,
+ 0x5c025800, 0x4a025a07, 0x00004005, 0x4a025c07,
+ 0x00000002, 0x0201f000, 0x00020401, 0x4807c857,
+ 0x485fc857, 0x4200b800, 0x00000001, 0x5c000800,
+ 0x4c5c0000, 0x0401f005, 0x4807c857, 0x485fc857,
+ 0x5c000800, 0x4d780000, 0x4803c857, 0x492fc857,
+ 0x8c00050e, 0x02020800, 0x00100324, 0x4203e000,
+ 0x50000000, 0x4200b800, 0x00008003, 0x0201f000,
+ 0x00100334, 0x492fc857, 0x4c5c0000, 0x4c600000,
+ 0x4c640000, 0x4d040000, 0x417a4000, 0x836c0580,
+ 0x00000000, 0x0400010f, 0x592cca08, 0x592cc408,
+ 0x8060c1c0, 0x04000111, 0x42000000, 0x0010d5ee,
+ 0x50000000, 0x4c000000, 0x0201f800, 0x0010c63f,
0x5c000000, 0x04000002, 0x80000000, 0x80600480,
- 0x040210f3, 0x832c7c00, 0x00000009, 0x592c0407,
- 0x4803c857, 0x8c000500, 0x04000006, 0x0201f800,
- 0x0010c0e8, 0x040000ea, 0x417a4000, 0x0401f003,
- 0x42024000, 0x00000001, 0x42020800, 0x00000001,
- 0x4200b800, 0xffffffff, 0x59a80078, 0x8c00053e,
- 0x04000004, 0x83200580, 0x00000021, 0x0401f003,
- 0x83200580, 0x00000061, 0x04020003, 0x4200b800,
- 0x7fffffff, 0x503c0000, 0x805cbd00, 0x04020004,
- 0x83224400, 0x00000020, 0x0401f011, 0x805cb902,
- 0x0402100a, 0x83200400, 0x0010c10d, 0x50024800,
- 0x82640580, 0x00000000, 0x0400001e, 0x8c64cd06,
- 0x0402005c, 0x0401f0c6, 0x81060800, 0x81224000,
- 0x83040480, 0x00000021, 0x040017f1, 0x803c7800,
- 0x59a80078, 0x8c00053e, 0x04000004, 0x83200480,
- 0x00000041, 0x0401f003, 0x83200480, 0x00000081,
- 0x040017d2, 0x59a80078, 0x8c00053e, 0x04000004,
- 0x42024000, 0x0000003f, 0x0401f003, 0x42024000,
- 0x0000007f, 0x8060c1c0, 0x040200ad, 0x0401f084,
- 0x59240a00, 0x0201f800, 0x0010c0f4, 0x04000004,
- 0x8c040d00, 0x040200a6, 0x0401f006, 0x82040d00,
- 0x00000003, 0x82040d80, 0x00000003, 0x040000a0,
- 0x59240c00, 0x8c040d0a, 0x04020004, 0x8d0e1d20,
- 0x0400009b, 0x0401f003, 0x8c040d08, 0x04000098,
+ 0x04021106, 0x832c7c00, 0x00000009, 0x592c0407,
+ 0x4803c857, 0x8c000500, 0x04000005, 0x0201f800,
+ 0x0010c63f, 0x040000fd, 0x0401f003, 0x42024000,
+ 0x00000001, 0x42020800, 0x00000001, 0x4200b800,
+ 0xffffffff, 0x59a80086, 0x8c00053e, 0x04000004,
+ 0x83200580, 0x00000021, 0x0401f003, 0x83200580,
+ 0x00000061, 0x04020003, 0x4200b800, 0x7fffffff,
+ 0x503c0000, 0x805cbd00, 0x04020004, 0x83224400,
+ 0x00000020, 0x0401f011, 0x805cb902, 0x0402100a,
+ 0x83200400, 0x0010c6ac, 0x50024800, 0x82640580,
+ 0x00000000, 0x0400001e, 0x8c64cd06, 0x04020068,
+ 0x0401f0da, 0x81060800, 0x81224000, 0x83040480,
+ 0x00000021, 0x040017f1, 0x803c7800, 0x59a80086,
+ 0x8c00053e, 0x04000004, 0x83200480, 0x00000041,
+ 0x0401f003, 0x83200480, 0x00000081, 0x040017d2,
+ 0x59a80086, 0x8c00053e, 0x04000004, 0x42024000,
+ 0x0000003f, 0x0401f003, 0x42024000, 0x0000007f,
+ 0x8060c1c0, 0x040200c1, 0x0401f098, 0x59240a00,
+ 0x0201f800, 0x0010c65f, 0x04000004, 0x8c040d00,
+ 0x040200ba, 0x0401f006, 0x82040d00, 0x00000003,
+ 0x82040d80, 0x00000003, 0x040000b4, 0x59240c00,
+ 0x8c040d0a, 0x04020004, 0x8d0e1d20, 0x040000af,
+ 0x0401f003, 0x8c040d08, 0x040000ac, 0x4c3c0000,
0x4d3c0000, 0x4d300000, 0x42027800, 0x00005002,
- 0x417a6000, 0x0201f800, 0x0010200c, 0x5c026000,
+ 0x417a6000, 0x0201f800, 0x00102094, 0x5c026000,
0x5c027800, 0x59240206, 0x82000500, 0xfffffcff,
- 0x48024a06, 0x4a024a00, 0x00000005, 0x0201f800,
- 0x001050f7, 0x04020013, 0x59a8021b, 0x82000500,
- 0x00000082, 0x82000d80, 0x00000082, 0x0400000a,
- 0x8c00050e, 0x0402000b, 0x59240200, 0x8400055e,
- 0x48024a00, 0x0201f800, 0x001020be, 0x0400006d,
- 0x0401f004, 0x0201f800, 0x00101f94, 0x04000071,
- 0x81060800, 0x81224000, 0x8060c040, 0x040207a0,
- 0x0201f800, 0x001050f7, 0x04020045, 0x0401f057,
- 0x59240a00, 0x8c040d00, 0x04000069, 0x4c040000,
+ 0x48024a06, 0x42000800, 0x00000001, 0x0201f800,
+ 0x0010217c, 0x04020004, 0x4a024a00, 0x00008005,
+ 0x0401f003, 0x4a024a00, 0x00000005, 0x5c007800,
+ 0x0201f800, 0x001052aa, 0x04020015, 0x59a80221,
+ 0x82000500, 0x00000082, 0x82000d80, 0x00000082,
+ 0x0400000a, 0x8c00050e, 0x0402000d, 0x836c0580,
+ 0x00000003, 0x0402000a, 0x0201f800, 0x00102150,
+ 0x04000077, 0x0401f006, 0x4c3c0000, 0x0201f800,
+ 0x0010201c, 0x5c007800, 0x04000079, 0x81060800,
+ 0x81224000, 0x8060c040, 0x04020794, 0x0201f800,
+ 0x001052aa, 0x0402004d, 0x0401f05f, 0x59240a00,
+ 0x8c040d00, 0x04000071, 0x4c3c0000, 0x4c040000,
0x82040d00, 0xffffdffc, 0x84040d44, 0x48064a00,
- 0x0201f800, 0x0010c0e8, 0x04000012, 0x59240200,
- 0x8c00051e, 0x0400000f, 0x8400051e, 0x48024a00,
- 0x0201f800, 0x001020ea, 0x04000007, 0x4813c857,
- 0x4817c857, 0x58100200, 0x8400055e, 0x48002200,
- 0x0401f004, 0x59a8021b, 0x8400050e, 0x4803521b,
- 0x5c000800, 0x8c64cd02, 0x04020017, 0x59240c08,
- 0x0201f800, 0x001015d6, 0x4c5c0000, 0x4d3c0000,
+ 0x0201f800, 0x0010c63f, 0x04000014, 0x59240200,
+ 0x8c00051e, 0x04000011, 0x8400051e, 0x48024a00,
+ 0x42000800, 0x00000003, 0x0201f800, 0x0010217c,
+ 0x04000007, 0x4813c857, 0x4817c857, 0x58100200,
+ 0x8400055e, 0x48002200, 0x0401f004, 0x59a80221,
+ 0x8400050e, 0x48035221, 0x5c000800, 0x5c007800,
+ 0x8c64cd02, 0x04020019, 0x4c3c0000, 0x59240c08,
+ 0x0201f800, 0x00101644, 0x4c5c0000, 0x4d3c0000,
0x42027800, 0x00005002, 0x4d300000, 0x417a6000,
- 0x0201f800, 0x0010200c, 0x5c026000, 0x5c027800,
- 0x5c00b800, 0x81060800, 0x81224000, 0x8060c040,
- 0x0402076b, 0x82640580, 0x00000009, 0x04000010,
- 0x0401f022, 0x836c0580, 0x00000004, 0x040007e8,
- 0x82040d00, 0x00000003, 0x82040d80, 0x00000003,
- 0x040207e3, 0x0401f833, 0x81060800, 0x81224000,
- 0x8060c040, 0x0402075a, 0x0401f014, 0x836c0580,
- 0x00000004, 0x04000011, 0x0201f800, 0x001050f7,
- 0x0402000a, 0x4a035013, 0x0000aaaa, 0x4a035014,
- 0x00000001, 0x4202d800, 0x00000001, 0x0201f800,
- 0x00105051, 0x0401f005, 0x4202d800, 0x00000001,
- 0x0201f800, 0x0010410a, 0x497a5a07, 0x4a025c07,
- 0x00000000, 0x0201f800, 0x000203ef, 0x5c020800,
- 0x5c00c800, 0x5c00c000, 0x5c00b800, 0x1c01f000,
- 0x59240200, 0x82000500, 0xfffffffc, 0x48024a00,
- 0x0401f009, 0x42003000, 0x00000005, 0x0401f006,
- 0x42003000, 0x00000002, 0x0401f003, 0x42003000,
- 0x00000001, 0x49225a07, 0x481a5c07, 0x0401f7ea,
- 0x4923c857, 0x4d440000, 0x4d300000, 0x4d340000,
- 0x4c580000, 0x4d400000, 0x4d3c0000, 0x4c5c0000,
- 0x42028000, 0x00000029, 0x42027800, 0x00001002,
- 0x4200b000, 0x000007f0, 0x417a8800, 0x83440400,
- 0x0010c280, 0x50000000, 0x80026d40, 0x04000028,
- 0x59340013, 0x80000130, 0x81200580, 0x04020024,
- 0x4937c857, 0x4947c857, 0x0201f800, 0x00104a2f,
- 0x04020071, 0x0201f800, 0x00106e41, 0x4df00000,
- 0x0201f800, 0x00107f02, 0x02000800, 0x0010032e,
- 0x4a026407, 0x00000001, 0x4936600a, 0x4926601c,
- 0x0201f800, 0x00110363, 0x0201f800, 0x00110447,
- 0x0201f800, 0x001104e0, 0x0201f800, 0x00110916,
- 0x5c03e000, 0x02000800, 0x00106e2e, 0x42000800,
- 0x0000000b, 0x0201f800, 0x001045ea, 0x42027000,
- 0x00000001, 0x0201f800, 0x00020bc1, 0x81468800,
- 0x83440580, 0x0000ffff, 0x04000008, 0x8058b040,
- 0x040207cf, 0x42028800, 0x0000ffff, 0x42026800,
- 0x0010e23c, 0x0401f048, 0x82640580, 0x0000000b,
- 0x04020027, 0x42028800, 0x000007f0, 0x4200b000,
- 0x00000010, 0x5924b809, 0x505c0000, 0x80026d40,
- 0x0400001b, 0x0201f800, 0x00104a2f, 0x0402003a,
- 0x59340002, 0x82000500, 0x00ffffff, 0x4803c857,
- 0x82000580, 0x00fffffd, 0x04000011, 0x0201f800,
- 0x00107f02, 0x02000800, 0x0010032e, 0x4a026407,
- 0x00000001, 0x4936600a, 0x4926601c, 0x42000800,
- 0x0000000b, 0x0201f800, 0x001045ea, 0x42027000,
- 0x00000001, 0x0201f800, 0x00020bc1, 0x805cb800,
- 0x81468800, 0x8058b040, 0x040207e0, 0x59a80078,
- 0x8c00053e, 0x04000014, 0x0201f800, 0x00107f02,
- 0x02000800, 0x0010032e, 0x59aa6879, 0x4936600a,
- 0x4a026407, 0x00000012, 0x42027000, 0x000000d2,
- 0x59240005, 0x48026019, 0x4803c857, 0x59240001,
- 0x4802601a, 0x59240002, 0x4802601b, 0x0201f800,
- 0x00020bc1, 0x5c00b800, 0x5c027800, 0x5c028000,
- 0x5c00b000, 0x5c026800, 0x5c026000, 0x5c028800,
- 0x1c01f000, 0x4947c857, 0x0201f800, 0x00106e41,
- 0x4df00000, 0x417a6000, 0x0201f800, 0x00110363,
- 0x0201f800, 0x00110447, 0x0201f800, 0x001104e0,
- 0x0201f800, 0x00110916, 0x4a026c00, 0x00000707,
- 0x5c03e000, 0x02000800, 0x00106e2e, 0x83440580,
- 0x0000ffff, 0x040007a5, 0x83441480, 0x000007f0,
- 0x04001797, 0x0401f7c6, 0x4c640000, 0x4c600000,
- 0x836c0580, 0x00000000, 0x0400009b, 0x497a5c07,
- 0x592c2208, 0x8210c500, 0x000000ff, 0x80100110,
- 0x8200cd00, 0x000000ff, 0x0400008a, 0x82640480,
- 0x00000003, 0x04021087, 0x4d2c0000, 0x4d040000,
- 0x417a0800, 0x592c1408, 0x820a4500, 0x000000ff,
- 0x4923c857, 0x0201f800, 0x0010c0ca, 0x40580000,
- 0x81200480, 0x04021081, 0x83200400, 0x0010c10d,
- 0x50024800, 0x82600580, 0x00000003, 0x04020014,
- 0x59a8021b, 0x8c000514, 0x0400000d, 0x59240200,
- 0x82001d00, 0x00002001, 0x820c1d80, 0x00002001,
- 0x04020007, 0x8c000510, 0x04020005, 0x41781800,
- 0x0201f800, 0x00101f94, 0x0401f04b, 0x4803c857,
- 0x42003000, 0x00000006, 0x0401f074, 0x59240200,
- 0x8c000500, 0x0402005c, 0x592c0209, 0x8c00050a,
- 0x04020004, 0x8d0e1d20, 0x0400005d, 0x0401f003,
- 0x8c000508, 0x0400005a, 0x48024c00, 0x8c000502,
+ 0x0201f800, 0x00102094, 0x5c026000, 0x5c027800,
+ 0x5c00b800, 0x5c007800, 0x81060800, 0x81224000,
+ 0x8060c040, 0x04020759, 0x82640580, 0x00000009,
+ 0x04000012, 0x0401f024, 0x836c0580, 0x00000004,
+ 0x040007e6, 0x82040d00, 0x00000003, 0x82040d80,
+ 0x00000003, 0x040207e1, 0x4c3c0000, 0x0401f834,
+ 0x5c007800, 0x81060800, 0x81224000, 0x8060c040,
+ 0x04020746, 0x0401f014, 0x836c0580, 0x00000004,
+ 0x04000011, 0x0201f800, 0x001052aa, 0x0402000a,
+ 0x4a035019, 0x0000aaaa, 0x4a03501a, 0x00000001,
+ 0x4202d800, 0x00000001, 0x0201f800, 0x00105204,
+ 0x0401f005, 0x4202d800, 0x00000001, 0x0201f800,
+ 0x001041f5, 0x497a5a07, 0x4a025c07, 0x00000000,
+ 0x0201f800, 0x00020401, 0x5c020800, 0x5c00c800,
+ 0x5c00c000, 0x5c00b800, 0x1c01f000, 0x59240200,
+ 0x82000500, 0xfffffffc, 0x48024a00, 0x0401f009,
+ 0x42003000, 0x00000005, 0x0401f006, 0x42003000,
+ 0x00000002, 0x0401f003, 0x42003000, 0x00000001,
+ 0x49225a07, 0x481a5c07, 0x0401f7ea, 0x4923c857,
+ 0x4d440000, 0x4d300000, 0x4d340000, 0x4c580000,
+ 0x4d400000, 0x4d3c0000, 0x4c5c0000, 0x42028000,
+ 0x00000029, 0x42027800, 0x00001002, 0x4200b000,
+ 0x000007f0, 0x417a8800, 0x83440400, 0x0010c880,
+ 0x50000000, 0x80026d40, 0x04000005, 0x59340013,
+ 0x80000130, 0x81200580, 0x04000836, 0x81468800,
+ 0x8058b040, 0x040207f5, 0x42028800, 0x0000ffff,
+ 0x42026800, 0x0010e85a, 0x0401f82e, 0x82640580,
+ 0x0000000b, 0x0402000d, 0x42028800, 0x000007f0,
+ 0x4200b000, 0x00000010, 0x5924b809, 0x505c0000,
+ 0x80026d40, 0x04020823, 0x805cb800, 0x81468800,
+ 0x8058b040, 0x040207fa, 0x59a80086, 0x8c00053e,
+ 0x04000014, 0x0201f800, 0x001082a1, 0x02000800,
+ 0x0010032f, 0x59aa6887, 0x4936600a, 0x4a026407,
+ 0x00000012, 0x42027000, 0x000000d2, 0x59240005,
+ 0x48026019, 0x4803c857, 0x59240001, 0x4802601a,
+ 0x59240002, 0x4802601b, 0x0201f800, 0x00020b22,
+ 0x5c00b800, 0x5c027800, 0x5c028000, 0x5c00b000,
+ 0x5c026800, 0x5c026000, 0x5c028800, 0x1c01f000,
+ 0x4937c857, 0x4947c857, 0x0201f800, 0x001071b0,
+ 0x4df00000, 0x417a6000, 0x0201f800, 0x00110a68,
+ 0x0201f800, 0x00110b49, 0x0201f800, 0x00110be2,
+ 0x0201f800, 0x00111028, 0x83440580, 0x0000ffff,
+ 0x0400001c, 0x59340c00, 0x82040580, 0x00000707,
+ 0x04000018, 0x82000580, 0x0000070b, 0x04000015,
+ 0x4d300000, 0x4d380000, 0x0201f800, 0x001082a1,
+ 0x02000800, 0x0010032f, 0x4a026407, 0x00000001,
+ 0x4936600a, 0x4926601c, 0x42000800, 0x0000000b,
+ 0x0201f800, 0x00104736, 0x42027000, 0x00000001,
+ 0x0201f800, 0x00020b22, 0x5c027000, 0x5c026000,
+ 0x5c03e000, 0x02000800, 0x0010719d, 0x1c01f000,
+ 0x4c640000, 0x4c600000, 0x836c0580, 0x00000000,
+ 0x040000b3, 0x497a5c07, 0x592c2208, 0x8210c500,
+ 0x000000ff, 0x80100110, 0x8200cd00, 0x000000ff,
+ 0x040000a2, 0x82640480, 0x00000003, 0x0402109f,
+ 0x4d2c0000, 0x4d040000, 0x417a0800, 0x592c1408,
+ 0x820a4500, 0x000000ff, 0x4923c857, 0x0201f800,
+ 0x0010c621, 0x40580000, 0x81200480, 0x04021099,
+ 0x83200400, 0x0010c6ac, 0x50024800, 0x82600580,
+ 0x00000003, 0x04020014, 0x59a80221, 0x8c000514,
+ 0x0400000d, 0x59240200, 0x82001d00, 0x00002001,
+ 0x820c1d80, 0x00002001, 0x04020007, 0x8c000510,
+ 0x04020005, 0x41781800, 0x0201f800, 0x0010201c,
+ 0x0401f063, 0x4803c857, 0x42003000, 0x00000006,
+ 0x0401f08c, 0x82600580, 0x00000002, 0x04000004,
+ 0x59240200, 0x8c000500, 0x04020071, 0x592c0209,
+ 0x8c00050a, 0x04020004, 0x8d0e1d20, 0x04000072,
+ 0x0401f003, 0x8c000508, 0x0400006f, 0x48024c00,
+ 0x82601580, 0x00000002, 0x04000011, 0x8c000502,
0x04000003, 0x80001110, 0x480a4a08, 0x592c000a,
0x9c0001c0, 0x48024801, 0x592c000b, 0x9c0001c0,
0x48024802, 0x592c000c, 0x9c0001c0, 0x48024803,
0x592c000d, 0x9c0001c0, 0x48024804, 0x810609c0,
0x04000003, 0x832e5c80, 0x00000005, 0x592c0a08,
- 0x8c040d00, 0x04000024, 0x4d3c0000, 0x4d300000,
+ 0x8c040d00, 0x04000036, 0x4d3c0000, 0x4d300000,
0x42027800, 0x00005002, 0x417a6000, 0x0201f800,
- 0x0010200c, 0x5c026000, 0x5c027800, 0x59240206,
- 0x82000500, 0xfffffcff, 0x48024a06, 0x4a024a00,
- 0x00000005, 0x0201f800, 0x001050f7, 0x04020012,
- 0x0201f800, 0x001020ea, 0x0402000c, 0x59a8021b,
- 0x4803c857, 0x8c00050e, 0x0402000b, 0x59240200,
- 0x8400055e, 0x48024a00, 0x0201f800, 0x001020be,
- 0x0400002c, 0x0401f004, 0x0201f800, 0x00101f94,
- 0x04000028, 0x8064c840, 0x04000007, 0x592c1408,
- 0x80081110, 0x81060800, 0x832e5c00, 0x00000005,
- 0x0401f792, 0x5c020800, 0x5c025800, 0x0201f800,
- 0x001050f7, 0x04000024, 0x592c0a08, 0x8c040d00,
- 0x04000021, 0x836c0580, 0x00000004, 0x0400001e,
- 0x4202d800, 0x00000001, 0x0201f800, 0x0010410a,
- 0x0401f019, 0x42003000, 0x00000001, 0x0401f013,
- 0x42003000, 0x00000002, 0x0401f012, 0x42003000,
- 0x00000003, 0x0401f00d, 0x42003000, 0x00000004,
- 0x0401f00a, 0x42003000, 0x00000005, 0x0401f009,
- 0x42003000, 0x00000006, 0x59240200, 0x82000500,
- 0xfffffffc, 0x48024a00, 0x5c020800, 0x5c025800,
- 0x481a5c07, 0x0201f800, 0x000203ef, 0x5c00c000,
- 0x5c00c800, 0x1c01f000, 0x4c580000, 0x0201f800,
- 0x0010c0ca, 0x40580000, 0x81200480, 0x0402100b,
- 0x83200400, 0x0010c10d, 0x50024800, 0x59240200,
- 0x82000500, 0x00000003, 0x82000580, 0x00000003,
- 0x5c00b000, 0x1c01f000, 0x4923c857, 0x4927c857,
- 0x82000540, 0x00000001, 0x0401f7fa, 0x80140110,
- 0x80000040, 0x02020000, 0x0010564a, 0x599c0019,
- 0x8c000510, 0x0402000d, 0x0201f800, 0x00104aad,
- 0x04020002, 0x1c01f000, 0x49425a07, 0x4806580e,
- 0x480a580f, 0x4943c857, 0x4807c857, 0x480bc857,
- 0x0201f000, 0x000203ef, 0x592c040c, 0x82000500,
- 0x0000e000, 0x82000580, 0x00006000, 0x040007ef,
- 0x59a8021b, 0x8c000508, 0x040007ec, 0x592c120c,
+ 0x00102094, 0x5c026000, 0x5c027800, 0x59240206,
+ 0x82000500, 0xfffffcff, 0x48024a06, 0x42000800,
+ 0x00000001, 0x0201f800, 0x0010217c, 0x04020004,
+ 0x4a024a00, 0x00008005, 0x0401f003, 0x4a024a00,
+ 0x00000005, 0x42000800, 0x00000001, 0x0201f800,
+ 0x0010217c, 0x04020004, 0x59240200, 0x8400055e,
+ 0x48024a00, 0x0201f800, 0x001052aa, 0x04020014,
+ 0x42000800, 0x00000003, 0x0201f800, 0x0010217c,
+ 0x0402000c, 0x59a80221, 0x4803c857, 0x8c00050e,
+ 0x0402000b, 0x836c0580, 0x00000003, 0x04020008,
+ 0x0201f800, 0x00102150, 0x0400002c, 0x0401f004,
+ 0x0201f800, 0x0010201c, 0x04000028, 0x8064c840,
+ 0x04000007, 0x592c1408, 0x80081110, 0x81060800,
+ 0x832e5c00, 0x00000005, 0x0401f77a, 0x5c020800,
+ 0x5c025800, 0x0201f800, 0x001052aa, 0x04000024,
+ 0x592c0a08, 0x8c040d00, 0x04000021, 0x836c0580,
+ 0x00000004, 0x0400001e, 0x4202d800, 0x00000001,
+ 0x0201f800, 0x001041f5, 0x0401f019, 0x42003000,
+ 0x00000001, 0x0401f013, 0x42003000, 0x00000002,
+ 0x0401f012, 0x42003000, 0x00000003, 0x0401f00d,
+ 0x42003000, 0x00000004, 0x0401f00a, 0x42003000,
+ 0x00000005, 0x0401f009, 0x42003000, 0x00000006,
+ 0x59240200, 0x82000500, 0xfffffffc, 0x48024a00,
+ 0x5c020800, 0x5c025800, 0x481a5c07, 0x0201f800,
+ 0x00020401, 0x5c00c000, 0x5c00c800, 0x1c01f000,
+ 0x4c580000, 0x0201f800, 0x0010c621, 0x40580000,
+ 0x81200480, 0x0402100b, 0x83200400, 0x0010c6ac,
+ 0x50024800, 0x59240200, 0x82000500, 0x00000003,
+ 0x82000580, 0x00000003, 0x5c00b000, 0x1c01f000,
+ 0x4923c857, 0x4927c857, 0x82000540, 0x00000001,
+ 0x0401f7fa, 0x80140110, 0x80000040, 0x02020000,
+ 0x0010582e, 0x599c0019, 0x8c000510, 0x0402000d,
+ 0x0201f800, 0x00104c0a, 0x04020002, 0x1c01f000,
+ 0x49425a07, 0x4806580e, 0x480a580f, 0x4943c857,
+ 0x4807c857, 0x480bc857, 0x0201f000, 0x00020401,
+ 0x592c040c, 0x82000500, 0x0000e000, 0x82000580,
+ 0x00006000, 0x040007ef, 0x59a80221, 0x8c000508,
+ 0x040007ec, 0x592c040a, 0x82000500, 0x000000ff,
+ 0x82000580, 0x00000003, 0x040207e6, 0x592c120c,
0x592c080b, 0x82040500, 0xff000000, 0x80040d80,
0x80000110, 0x80081540, 0x04000004, 0x4806580b,
- 0x0401f885, 0x0401f7e1, 0x42001000, 0x0000001c,
+ 0x0401f884, 0x0401f7db, 0x42001000, 0x0000001c,
0x42000800, 0x00000019, 0x42028000, 0x00000031,
- 0x0401f7de, 0x80140110, 0x80000040, 0x02020000,
- 0x0010564a, 0x0201f800, 0x00104c2f, 0x04020002,
+ 0x0401f7d8, 0x80140110, 0x80000040, 0x02020000,
+ 0x0010582e, 0x0201f800, 0x00104d9a, 0x04020002,
0x1c01f000, 0x49425a07, 0x48065812, 0x480a5813,
- 0x0201f000, 0x000203ef, 0x80140110, 0x02000000,
- 0x0010564a, 0x80000040, 0x0402000d, 0x4202e000,
+ 0x0201f000, 0x00020401, 0x80140110, 0x02000000,
+ 0x0010582e, 0x80000040, 0x0402000d, 0x4202e000,
0x00000001, 0x592c020b, 0x8c000504, 0x02000000,
- 0x000206d7, 0x592c0208, 0x82000c80, 0x00001001,
- 0x02021000, 0x0010565a, 0x0401f005, 0x4a033006,
- 0x000206d7, 0x0201f000, 0x000206d1, 0x592c1014,
- 0x82080500, 0xffff0003, 0x02020000, 0x0010565a,
- 0x4202e000, 0x00000002, 0x42000000, 0x0010e2e7,
+ 0x000206e4, 0x592c0208, 0x82000c80, 0x00001001,
+ 0x02021000, 0x0010583e, 0x0401f005, 0x4a033006,
+ 0x000206e4, 0x0201f000, 0x000206de, 0x592c1014,
+ 0x82080500, 0xffff0003, 0x02020000, 0x0010583e,
+ 0x4202e000, 0x00000002, 0x42000000, 0x0010e905,
0x50007000, 0x592c0012, 0x592c0813, 0x48007006,
0x48047007, 0x492c700a, 0x4978700d, 0x4978700b,
0x0401f001, 0x4978700c, 0x82080480, 0x00000180,
- 0x4803c857, 0x04001007, 0x4800700e, 0x4a007005,
- 0x00000180, 0x4a007004, 0x00000060, 0x0401f005,
- 0x4978700e, 0x48087005, 0x80081104, 0x48087004,
- 0x58380009, 0x48007003, 0x40381000, 0x0201f000,
- 0x00020016, 0x4df00000, 0x4203e000, 0x50000000,
- 0x0201f800, 0x0010056e, 0x04000003, 0x59980005,
- 0x0801f800, 0x5c03e000, 0x1c01f000, 0x0201f800,
- 0x0010056e, 0x02000800, 0x0010032e, 0x4a025809,
- 0x0010e286, 0x42000800, 0x0010e2e7, 0x452c0800,
- 0x497a580a, 0x497a580b, 0x497a580c, 0x497a580d,
- 0x497a580e, 0x4a025808, 0x0002089e, 0x497a580f,
- 0x4a025802, 0x00000100, 0x4a025801, 0x00000001,
- 0x1c01f000, 0x0401f80e, 0x02000000, 0x0002086f,
- 0x4a025a09, 0x00000001, 0x0201f000, 0x0010b674,
- 0x0401f807, 0x02000000, 0x0002086a, 0x4a025a09,
- 0x00000006, 0x0201f000, 0x0010b674, 0x59a80005,
- 0x8c00051a, 0x1c01f000, 0x59a80005, 0x8c00051c,
- 0x1c01f000, 0x59a8000f, 0x80080580, 0x04020002,
- 0x1c01f000, 0x480bc857, 0x42024800, 0x0010cfd1,
- 0x480a4805, 0x480b500f, 0x497b8830, 0x82080d40,
- 0x01000000, 0x48078832, 0x59c40002, 0x8400054c,
- 0x48038802, 0x42000800, 0x00000003, 0x0201f000,
- 0x00106e68, 0x59c80007, 0x8c000502, 0x0400004f,
- 0x835c2c80, 0x00000005, 0x02001000, 0x00106416,
- 0x59c82817, 0x4817506f, 0x497b9005, 0x82140500,
- 0x00e00000, 0x04020040, 0x82140500, 0x000003ff,
- 0x82001c00, 0x00000006, 0x41cc2000, 0x42003000,
- 0x00006080, 0x820c0480, 0x00000040, 0x04001006,
- 0x42001000, 0x00000040, 0x820c1c80, 0x00000040,
- 0x0401f003, 0x400c1000, 0x41781800, 0x54182000,
- 0x80102000, 0x80183000, 0x80081040, 0x040207fc,
- 0x800c19c0, 0x04000005, 0x59c80005, 0x80000000,
- 0x48039005, 0x0401f7ea, 0x82140500, 0x000003ff,
- 0x800018c4, 0x8c142d14, 0x04000005, 0x59cc0002,
- 0x82000500, 0x00000003, 0x800c1c80, 0x480f505a,
- 0x82140500, 0x01f60000, 0x04020010, 0x0201f800,
- 0x00106421, 0x04020008, 0x4a039005, 0x00000140,
- 0x82140500, 0x0e000000, 0x80000132, 0x0c01f815,
- 0x1c01f000, 0x800001c0, 0x0402000b, 0x4a039005,
+ 0x04001007, 0x4800700e, 0x4a007005, 0x00000180,
+ 0x4a007004, 0x00000060, 0x0401f005, 0x4978700e,
+ 0x48087005, 0x80081104, 0x48087004, 0x58380009,
+ 0x48007003, 0x40381000, 0x0201f000, 0x00020017,
+ 0x4df00000, 0x4203e000, 0x50000000, 0x0201f800,
+ 0x00100584, 0x04000003, 0x59980005, 0x0801f800,
+ 0x5c03e000, 0x1c01f000, 0x0201f800, 0x00100584,
+ 0x02000800, 0x0010032f, 0x4a025809, 0x0010e8a4,
+ 0x42000800, 0x0010e905, 0x452c0800, 0x497a580a,
+ 0x497a580b, 0x497a580c, 0x497a580d, 0x497a580e,
+ 0x4a025808, 0x000207f6, 0x497a580f, 0x4a025802,
+ 0x00000100, 0x4a025801, 0x00000001, 0x1c01f000,
+ 0x0401f80e, 0x02000000, 0x00105bc9, 0x4a025a09,
+ 0x00000001, 0x0201f000, 0x0010bbc5, 0x0401f807,
+ 0x02000000, 0x00105bc4, 0x4a025a09, 0x00000006,
+ 0x0201f000, 0x0010bbc5, 0x59a80005, 0x8c00051a,
+ 0x1c01f000, 0x59a80005, 0x8c00051c, 0x1c01f000,
+ 0x59a80015, 0x80080580, 0x04020002, 0x1c01f000,
+ 0x480bc857, 0x42024800, 0x0010d5ef, 0x480a4805,
+ 0x480b5015, 0x497b8830, 0x82080d40, 0x01000000,
+ 0x48078832, 0x59c40002, 0x8400054c, 0x48038802,
+ 0x42000800, 0x00000003, 0x0201f000, 0x001071d7,
+ 0x4df00000, 0x4203e000, 0x50000000, 0x40025800,
+ 0x497b3004, 0x592c2a05, 0x82140500, 0x000000ff,
+ 0x82006c80, 0x0000007a, 0x04021028, 0x4c5c0000,
+ 0x4c600000, 0x4c640000, 0x4d040000, 0x4d700000,
+ 0x83706d80, 0x00000003, 0x04020005, 0x5998b801,
+ 0x5998c002, 0x5998c800, 0x599a0806, 0x59980803,
+ 0x4c040000, 0x497b3003, 0x4202e000, 0x00000001,
+ 0x1201f800, 0x00020631, 0x83700580, 0x00000003,
+ 0x02000800, 0x00020712, 0x5c000800, 0x48073003,
+ 0x5c02e000, 0x83700580, 0x00000003, 0x04020005,
+ 0x49073006, 0x48673000, 0x48633002, 0x485f3001,
+ 0x5c020800, 0x5c00c800, 0x5c00c000, 0x5c00b800,
+ 0x5c03e000, 0x1c01f000, 0x0201f800, 0x00105826,
+ 0x0401f7fc, 0x59c80007, 0x8c000502, 0x04000057,
+ 0x8d0e1d1c, 0x02020000, 0x00106771, 0x835c2c80,
+ 0x000000ff, 0x02001000, 0x00106771, 0x59c82817,
+ 0x4817507d, 0x497b9005, 0x82140500, 0x00e00000,
+ 0x04020045, 0x82140500, 0x000003ff, 0x82001c00,
+ 0x00000006, 0x41cc2000, 0x42003000, 0x00006080,
+ 0x820c0480, 0x00000040, 0x04001006, 0x42001000,
+ 0x00000040, 0x820c1c80, 0x00000040, 0x0401f003,
+ 0x400c1000, 0x41781800, 0x54182000, 0x80102000,
+ 0x80183000, 0x80081040, 0x040207fc, 0x800c19c0,
+ 0x04000005, 0x59c80005, 0x80000000, 0x48039005,
+ 0x0401f7ea, 0x82140500, 0x000003ff, 0x800018c4,
+ 0x8c142d14, 0x04000005, 0x59cc0002, 0x82000500,
+ 0x00000003, 0x800c1c80, 0x480f5068, 0x59c40002,
+ 0x8c00050c, 0x04020004, 0x0201f800, 0x0010c66c,
+ 0x04020012, 0x82140500, 0x01f60000, 0x0402000f,
+ 0x0201f800, 0x0010677e, 0x04020007, 0x4a039005,
+ 0x00000140, 0x82140500, 0x0e000000, 0x80000132,
+ 0x0c01f014, 0x800001c0, 0x0402000b, 0x4a039005,
0x00000140, 0x0401f00d, 0x4817c857, 0x82140500,
- 0x00f60000, 0x04020004, 0x0201f800, 0x001062e1,
- 0x040207eb, 0x0201f800, 0x00106445, 0x4a039005,
- 0x00000140, 0x0401f03f, 0x4803c856, 0x1c01f000,
- 0x00105db6, 0x0010613f, 0x00105db0, 0x00105db0,
- 0x00105db0, 0x00105db0, 0x00105db0, 0x00105db0,
- 0x4803c857, 0x42000000, 0x0010cf1a, 0x0201f800,
- 0x0010bfb3, 0x1c01f000, 0x59cc0002, 0x82000500,
+ 0x00f60000, 0x04020004, 0x0201f800, 0x0010663c,
+ 0x040207ec, 0x0201f800, 0x001067a2, 0x4a039005,
+ 0x00000140, 0x0401f062, 0x4803c856, 0x1c01f000,
+ 0x001060a6, 0x0010646e, 0x001060a0, 0x001060a0,
+ 0x001060a0, 0x001060a0, 0x001060a0, 0x001060a0,
+ 0x4803c857, 0x42000000, 0x0010d535, 0x0201f800,
+ 0x0010c50a, 0x1c01f000, 0x59cc0002, 0x82000500,
0xff000000, 0x82000580, 0xfe000000, 0x04020004,
- 0x0201f800, 0x0010b9c7, 0x0401f025, 0x59cc0400,
+ 0x0201f800, 0x0010bf1c, 0x0401f048, 0x59cc0003,
+ 0x82000500, 0x00ff0000, 0x04020040, 0x59cc0400,
0x82000d00, 0x0000ff00, 0x82041500, 0x0000f000,
- 0x840409c0, 0x82080580, 0x00002000, 0x04020013,
- 0x836c0580, 0x00000001, 0x0402000e, 0x59cc0006,
+ 0x840409c0, 0x82080580, 0x00002000, 0x0402002f,
+ 0x836c0580, 0x00000001, 0x0402002a, 0x0201f800,
+ 0x001052aa, 0x0402001a, 0x4c040000, 0x59a80817,
+ 0x4807c857, 0x82040580, 0x00000009, 0x0400000a,
+ 0x82040580, 0x00000003, 0x0402000f, 0x0201f800,
+ 0x00105118, 0x59a80817, 0x82040580, 0x00000009,
+ 0x04020009, 0x81780000, 0x0201f800, 0x001115f8,
+ 0x836c0580, 0x00000002, 0x04020003, 0x5c000800,
+ 0x0401f010, 0x5c000800, 0x0401f01c, 0x59cc0006,
0x82000500, 0xff000000, 0x82000580, 0x11000000,
- 0x02020800, 0x001003f5, 0x04020011, 0x0201f800,
- 0x00103ae4, 0x0201f800, 0x0010647a, 0x0401f00c,
- 0x0401f81f, 0x0401f00a, 0x82080580, 0x00003000,
- 0x04020003, 0x0401fad2, 0x0401f005, 0x82080580,
- 0x00008000, 0x04020002, 0x0401fbc7, 0x1c01f000,
- 0x4817c857, 0x42000000, 0x0010cf19, 0x0201f800,
- 0x0010bfb3, 0x836c0580, 0x00000003, 0x0402000b,
- 0x4c080000, 0x4c0c0000, 0x42001000, 0x00008048,
- 0x40141800, 0x80142120, 0x0201f800, 0x001039ac,
- 0x5c001800, 0x5c001000, 0x1c01f000, 0x59cc0002,
- 0x82000500, 0xff000000, 0x82001580, 0x01000000,
- 0x04000006, 0x82001580, 0x23000000, 0x02020800,
- 0x001003f5, 0x04020250, 0x59a8005a, 0x82000480,
- 0x00000004, 0x0400124c, 0x82040580, 0x00000023,
- 0x04020052, 0x59cc0004, 0x4803c857, 0x59cc0006,
- 0x82000500, 0xff000000, 0x59cc0801, 0x82040d00,
- 0x00ffffff, 0x80040540, 0x4803c857, 0x0201f800,
- 0x00106268, 0x02000800, 0x001003f5, 0x0400023a,
- 0x59300c07, 0x82040580, 0x00000010, 0x0400000f,
- 0x82040580, 0x00000011, 0x0400000c, 0x82040580,
- 0x00000001, 0x04000009, 0x82040580, 0x00000004,
- 0x04000006, 0x82040580, 0x00000008, 0x02020800,
- 0x001003f5, 0x04020228, 0x59300004, 0x82000500,
- 0x80010000, 0x04000006, 0x0201f800, 0x00107226,
- 0x02020800, 0x001003f5, 0x0402021f, 0x59cc0a04,
- 0x48066202, 0x59cc0006, 0x82000500, 0xffff0000,
- 0x82000d80, 0x02000000, 0x04020005, 0x42027000,
- 0x00000015, 0x0201f000, 0x00020bc1, 0x82000d80,
- 0x02140000, 0x040007fa, 0x82000d80, 0x02100000,
- 0x040007f7, 0x82000d80, 0x02100000, 0x040007f4,
- 0x82000d80, 0x01000000, 0x02020800, 0x001003f5,
- 0x04020205, 0x59cc0006, 0x82000500, 0x0000ffff,
- 0x02020800, 0x001003f5, 0x040201ff, 0x59a8005a,
- 0x82000480, 0x00000008, 0x040011fb, 0x42027000,
- 0x00000016, 0x0401f7e4, 0x82040580, 0x00000022,
- 0x02020800, 0x001003f5, 0x040201f3, 0x59cc0004,
- 0x4803c857, 0x59cc0006, 0x4803c857, 0x59cc0001,
- 0x4803c857, 0x59a8005a, 0x800001c0, 0x02000800,
- 0x001003f5, 0x040001e8, 0x59a80805, 0x8c040d14,
- 0x0400003a, 0x0401fa0b, 0x04020038, 0x0401fa24,
+ 0x02020800, 0x001003fe, 0x04020014, 0x0201f800,
+ 0x00103bce, 0x0201f800, 0x001067dd, 0x0401f00f,
+ 0x0401f822, 0x0401f00d, 0x82080580, 0x00003000,
+ 0x04020003, 0x0401fae9, 0x0401f008, 0x82080580,
+ 0x00008000, 0x040003f5, 0x42000000, 0x0010d534,
+ 0x0201f000, 0x0010c50a, 0x1c01f000, 0x4817c857,
+ 0x42000000, 0x0010d534, 0x0201f800, 0x0010c50a,
+ 0x836c0580, 0x00000003, 0x0402000b, 0x4c080000,
+ 0x4c0c0000, 0x42001000, 0x00008048, 0x40141800,
+ 0x80142120, 0x0201f800, 0x00103a4e, 0x5c001800,
+ 0x5c001000, 0x1c01f000, 0x59cc0002, 0x82000500,
+ 0xff000000, 0x82001580, 0x01000000, 0x04000006,
+ 0x82001580, 0x23000000, 0x02020800, 0x001003fe,
+ 0x04020258, 0x59a80068, 0x82000480, 0x00000004,
+ 0x04001254, 0x82040580, 0x00000023, 0x04020052,
+ 0x59cc0004, 0x4803c857, 0x59cc0006, 0x82000500,
+ 0xff000000, 0x59cc0801, 0x82040d00, 0x00ffffff,
+ 0x80040540, 0x4803c857, 0x0201f800, 0x001065bb,
+ 0x02000800, 0x001003fe, 0x04000242, 0x59300c07,
+ 0x82040580, 0x00000010, 0x0400000f, 0x82040580,
+ 0x00000011, 0x0400000c, 0x82040580, 0x00000001,
+ 0x04000009, 0x82040580, 0x00000004, 0x04000006,
+ 0x82040580, 0x00000008, 0x02020800, 0x001003fe,
+ 0x04020230, 0x59300004, 0x82000500, 0x80010000,
+ 0x04000006, 0x0201f800, 0x00107595, 0x02020800,
+ 0x001003fe, 0x04020227, 0x59cc0a04, 0x48066202,
+ 0x59cc0006, 0x82000500, 0xffff0000, 0x82000d80,
+ 0x02000000, 0x04020005, 0x42027000, 0x00000015,
+ 0x0201f000, 0x00020b22, 0x82000d80, 0x02140000,
+ 0x040007fa, 0x82000d80, 0x02100000, 0x040007f7,
+ 0x82000d80, 0x02100000, 0x040007f4, 0x82000d80,
+ 0x01000000, 0x02020800, 0x001003fe, 0x0402020d,
+ 0x59cc0006, 0x82000500, 0x0000ffff, 0x02020800,
+ 0x001003fe, 0x04020207, 0x59a80068, 0x82000480,
+ 0x00000008, 0x04001203, 0x42027000, 0x00000016,
+ 0x0401f7e4, 0x82040580, 0x00000022, 0x02020800,
+ 0x001003fe, 0x040201fb, 0x59cc0004, 0x4803c857,
+ 0x59cc0006, 0x4803c857, 0x59cc0001, 0x4803c857,
+ 0x59a80068, 0x800001c0, 0x02000800, 0x001003fe,
+ 0x040001f0, 0x59a80221, 0x8c000508, 0x04000003,
+ 0x8c000502, 0x040001eb, 0x59a80805, 0x8c040d14,
+ 0x0400003a, 0x0401fa1a, 0x04020038, 0x0401fa33,
0x04000036, 0x42027000, 0x0000004c, 0x59cc3800,
0x821c3d00, 0x00ffffff, 0x4c1c0000, 0x0201f800,
- 0x00101fc9, 0x5c003800, 0x04000004, 0x0201f800,
- 0x001003f5, 0x0401f1d4, 0x59cc0001, 0x82000500,
- 0x00ffffff, 0x0201f800, 0x001063d6, 0x04000008,
- 0x42028800, 0x0000ffff, 0x42026800, 0x0010e23c,
- 0x0201f800, 0x00104d9c, 0x481a6802, 0x599c0019,
- 0x8c000510, 0x040001ad, 0x59a8021b, 0x8c000508,
- 0x040001aa, 0x59cc1006, 0x82081500, 0xffff0000,
- 0x82081580, 0x03000000, 0x040201a4, 0x83641480,
- 0x00000010, 0x040011bd, 0x8400054c, 0x4803521b,
- 0x59cc1000, 0x82081500, 0x00ffffff, 0x0401fea2,
+ 0x00102051, 0x5c003800, 0x04000004, 0x0201f800,
+ 0x001003fe, 0x0401f1d7, 0x59cc0001, 0x82000500,
+ 0x00ffffff, 0x0201f800, 0x00106731, 0x04000008,
+ 0x42028800, 0x0000ffff, 0x42026800, 0x0010e85a,
+ 0x0201f800, 0x00104f07, 0x481a6802, 0x599c0019,
+ 0x8c000510, 0x040001b0, 0x59a80221, 0x8c000508,
+ 0x040001ad, 0x59cc1006, 0x82081500, 0xffff0000,
+ 0x82081580, 0x03000000, 0x040201a7, 0x83641480,
+ 0x00000010, 0x040011ca, 0x8400054c, 0x48035221,
+ 0x59cc1000, 0x82081500, 0x00ffffff, 0x0401fe3d,
0x59cc0007, 0x82000500, 0x0000ffff, 0x48038893,
- 0x48035012, 0x0401f195, 0x59cc0006, 0x82000500,
+ 0x48035018, 0x0401f198, 0x59cc0006, 0x82000500,
0xffff0000, 0x82000d80, 0x03000000, 0x0402002d,
- 0x59a8021b, 0x8c000508, 0x04000024, 0x8400054c,
- 0x4803521b, 0x59cc0800, 0x82040d00, 0x00ffffff,
- 0x42024800, 0x0010cfd1, 0x4807c857, 0x48064805,
- 0x4807500f, 0x497b8830, 0x84040d70, 0x48078832,
+ 0x59a80221, 0x8c000508, 0x04000024, 0x8400054c,
+ 0x48035221, 0x59cc0800, 0x82040d00, 0x00ffffff,
+ 0x42024800, 0x0010d5ef, 0x4807c857, 0x48064805,
+ 0x48075015, 0x497b8830, 0x84040d70, 0x48078832,
0x59c40802, 0x84040d4c, 0x48078802, 0x59cc0007,
- 0x82000500, 0x0000ffff, 0x48038893, 0x48035012,
- 0x42000800, 0x00000003, 0x59a8100f, 0x0201f800,
- 0x00106e68, 0x59cc0006, 0x82000500, 0x0000ffff,
- 0x02020800, 0x001003f5, 0x04020183, 0x42027000,
- 0x00000017, 0x0401f11e, 0x0201f800, 0x001050f7,
- 0x040207f5, 0x8c000502, 0x040207f3, 0x0401f17a,
+ 0x82000500, 0x0000ffff, 0x48038893, 0x48035018,
+ 0x42000800, 0x00000003, 0x59a81015, 0x0201f800,
+ 0x001071d7, 0x59cc0006, 0x82000500, 0x0000ffff,
+ 0x02020800, 0x001003fe, 0x04020186, 0x42027000,
+ 0x00000017, 0x0401f120, 0x0201f800, 0x001052aa,
+ 0x040207f5, 0x8c000502, 0x040207f3, 0x0401f17d,
0x82000d80, 0x04000000, 0x04020018, 0x59cc0006,
- 0x82000500, 0x0000ffff, 0x02020800, 0x001003f5,
- 0x04020171, 0x0201f800, 0x001050f7, 0x04000002,
- 0x0401f109, 0x497b5065, 0x42001000, 0x00110987,
- 0x0201f800, 0x001064fe, 0x0201f800, 0x00104da6,
- 0x59a8021b, 0x84000548, 0x4803521b, 0x42027000,
- 0x00000030, 0x0401f0fe, 0x82000d80, 0x05000000,
+ 0x82000500, 0x0000ffff, 0x02020800, 0x001003fe,
+ 0x04020174, 0x0201f800, 0x001052aa, 0x04000002,
+ 0x0401f10b, 0x497b5073, 0x42001000, 0x001110c2,
+ 0x0201f800, 0x0010686f, 0x0201f800, 0x00104f11,
+ 0x59a80221, 0x84000548, 0x48035221, 0x42027000,
+ 0x00000030, 0x0401f100, 0x82000d80, 0x05000000,
0x0402000a, 0x59cc0006, 0x82000500, 0x0000ffff,
- 0x02020800, 0x001003f5, 0x04020157, 0x42027000,
- 0x00000018, 0x0401f0f2, 0x82000d80, 0x20100000,
- 0x04020004, 0x42027000, 0x00000019, 0x0401f0ec,
+ 0x02020800, 0x001003fe, 0x0402015a, 0x42027000,
+ 0x00000018, 0x0401f0f4, 0x82000d80, 0x20100000,
+ 0x04020004, 0x42027000, 0x00000019, 0x0401f0ee,
0x82000d80, 0x21100000, 0x04020004, 0x42027000,
- 0x0000001a, 0x0401f0e6, 0x82000d80, 0x52000000,
+ 0x0000001a, 0x0401f0e8, 0x82000d80, 0x52000000,
0x0402000a, 0x59cc0006, 0x82000500, 0x0000ffff,
- 0x02020800, 0x001003f5, 0x0402013f, 0x42027000,
- 0x0000001b, 0x0401f0da, 0x82000d80, 0x50000000,
+ 0x02020800, 0x001003fe, 0x04020142, 0x42027000,
+ 0x0000001b, 0x0401f0dc, 0x82000d80, 0x50000000,
0x0402000a, 0x59cc0006, 0x82000500, 0x0000ffff,
- 0x02020800, 0x001003f5, 0x04020133, 0x42027000,
- 0x0000001c, 0x0401f0ce, 0x82000d80, 0x13000000,
- 0x04020004, 0x42027000, 0x00000034, 0x0401f0c8,
+ 0x02020800, 0x001003fe, 0x04020136, 0x42027000,
+ 0x0000001c, 0x0401f0d0, 0x82000d80, 0x13000000,
+ 0x04020004, 0x42027000, 0x00000034, 0x0401f0ca,
0x82000d80, 0x12000000, 0x0402000a, 0x59cc0006,
- 0x82000500, 0x0000ffff, 0x02020800, 0x001003f5,
- 0x04020121, 0x42027000, 0x00000024, 0x0401f0bc,
+ 0x82000500, 0x0000ffff, 0x02020800, 0x001003fe,
+ 0x04020124, 0x42027000, 0x00000024, 0x0401f0be,
0x82000d00, 0xff000000, 0x82040d80, 0x24000000,
- 0x04020004, 0x42027000, 0x0000002d, 0x0401f0b4,
+ 0x04020004, 0x42027000, 0x0000002d, 0x0401f0b6,
0x82000d00, 0xff000000, 0x82040d80, 0x53000000,
- 0x04020004, 0x42027000, 0x0000002a, 0x0401f0ac,
+ 0x04020004, 0x42027000, 0x0000002a, 0x0401f0ae,
0x82000d80, 0x0f000000, 0x04020004, 0x42027000,
- 0x00000020, 0x0401f0a6, 0x82000d80, 0x61040000,
+ 0x00000020, 0x0401f0a8, 0x82000d80, 0x61040000,
0x04020056, 0x4c5c0000, 0x4c600000, 0x4c640000,
0x4c580000, 0x83ccc400, 0x00000006, 0x8060b800,
0x50600000, 0x82000500, 0x0000ffff, 0x82001480,
0x00000401, 0x04021041, 0x82001500, 0x00000003,
- 0x0402003e, 0x59a8105a, 0x80081480, 0x0400103b,
+ 0x0402003e, 0x59a81068, 0x80081480, 0x0400103b,
0x82000480, 0x00000004, 0x8000b104, 0x8058b1c0,
0x04000036, 0x59cc3800, 0x821c3d00, 0x00ffffff,
- 0x4d200000, 0x0201f800, 0x00101fc9, 0x04000003,
+ 0x4d200000, 0x0201f800, 0x00102051, 0x04000003,
0x5c024000, 0x0401f02d, 0x505cc800, 0x8264c500,
- 0x03000000, 0x8060c130, 0x42000000, 0x0010cee4,
+ 0x03000000, 0x8060c130, 0x42000000, 0x0010d4fa,
0x82602580, 0x00000000, 0x04020004, 0x42000000,
- 0x0010cee1, 0x0401f00c, 0x82602580, 0x00000001,
- 0x04020004, 0x42000000, 0x0010cee2, 0x0401f006,
+ 0x0010d4f7, 0x0401f00c, 0x82602580, 0x00000001,
+ 0x04020004, 0x42000000, 0x0010d4f8, 0x0401f006,
0x82602580, 0x00000002, 0x04020003, 0x42000000,
- 0x0010cee3, 0x0201f800, 0x0010bfb3, 0x42001000,
+ 0x0010d4f9, 0x0201f800, 0x0010c50a, 0x42001000,
0x00008015, 0x82642500, 0x0000ffff, 0x80641920,
- 0x41202800, 0x0201f800, 0x001039ad, 0x805cb800,
+ 0x41202800, 0x0201f800, 0x00103a4f, 0x805cb800,
0x8058b040, 0x040207dd, 0x5c024000, 0x5c00b000,
0x5c00c800, 0x5c00c000, 0x5c00b800, 0x42027000,
- 0x00000023, 0x0401f056, 0x5c00b000, 0x5c00c800,
- 0x5c00c000, 0x5c00b800, 0x42000000, 0x0010cf17,
- 0x0201f000, 0x0010bfb3, 0x82000d80, 0x60000000,
- 0x04020004, 0x42027000, 0x0000003f, 0x0401f048,
- 0x82000d80, 0x54000000, 0x04020010, 0x0401fbdb,
- 0x02020800, 0x001003f5, 0x040200a3, 0x42027000,
- 0x00000046, 0x42000000, 0x0010cfd6, 0x50000000,
- 0x59cc3800, 0x821c3d00, 0xff000000, 0x801c0540,
- 0x48039800, 0x0401f036, 0x82000d80, 0x55000000,
- 0x04020009, 0x0401fbf1, 0x04020004, 0x42027000,
- 0x00000041, 0x0401f02e, 0x42027000, 0x00000042,
- 0x0401f02b, 0x82000d80, 0x78000000, 0x04020004,
- 0x42027000, 0x00000045, 0x0401f025, 0x82000d80,
- 0x10000000, 0x04020004, 0x42027000, 0x0000004e,
- 0x0401f01f, 0x82000d80, 0x63000000, 0x04020004,
- 0x42027000, 0x0000004a, 0x0401f019, 0x82000d00,
- 0xff000000, 0x82040d80, 0x56000000, 0x04020004,
- 0x42027000, 0x0000004f, 0x0401f011, 0x82000d00,
- 0xff000000, 0x82040d80, 0x57000000, 0x04020004,
- 0x42027000, 0x00000050, 0x0401f009, 0x82000d80,
- 0x7d000000, 0x04020004, 0x42027000, 0x00000056,
- 0x0401f003, 0x42027000, 0x0000001d, 0x59cc3800,
- 0x821c3d00, 0x00ffffff, 0x821c0580, 0x00fffffe,
- 0x59cc0001, 0x04020005, 0x40003000, 0x42028800,
- 0x000007fe, 0x0401f00a, 0x59cc3800, 0x821c3d00,
- 0x00ffffff, 0x4c1c0000, 0x0401f937, 0x5c003800,
- 0x02020800, 0x001003f5, 0x0402004f, 0x0201f800,
- 0x00101fc9, 0x83440480, 0x000007f0, 0x04001001,
- 0x0201f800, 0x00103adb, 0x04000012, 0x4c180000,
- 0x0201f800, 0x00104a7c, 0x5c003000, 0x04000012,
- 0x4c180000, 0x0401f867, 0x5c003000, 0x04020009,
- 0x0201f800, 0x00104d9c, 0x42026800, 0x0010e23c,
- 0x481a6802, 0x42028800, 0x0000ffff, 0x0401f006,
- 0x0201f800, 0x0010462d, 0x02020800, 0x001003f5,
- 0x04020031, 0x83380580, 0x00000046, 0x04020006,
- 0x59a8000f, 0x80180580, 0x02000800, 0x001003f5,
- 0x04000029, 0x59340200, 0x8c000514, 0x0400000f,
- 0x83380580, 0x00000030, 0x0400000c, 0x83380580,
- 0x0000003f, 0x04000009, 0x83380580, 0x00000034,
- 0x04000006, 0x83380580, 0x00000024, 0x04000003,
- 0x42027000, 0x0000004c, 0x0201f800, 0x00107ef8,
- 0x0400001a, 0x4926601c, 0x4936600a, 0x4a026407,
- 0x00000004, 0x83340580, 0x0010e23c, 0x04020005,
- 0x59cc0001, 0x82000500, 0x00ffffff, 0x48026027,
- 0x59cc0c04, 0x48066202, 0x83380580, 0x0000004c,
- 0x04020003, 0x4a026407, 0x00000011, 0x0201f000,
- 0x00020bc1, 0x598800b7, 0x4803c857, 0x80000000,
- 0x480310b7, 0x1c01f000, 0x42001000, 0x00008049,
- 0x59cc1806, 0x800c1930, 0x0201f800, 0x001039ac,
- 0x0201f800, 0x00107f02, 0x02000800, 0x001003f5,
- 0x040007f1, 0x4926601c, 0x4936600a, 0x83340580,
- 0x0010e23c, 0x04020005, 0x59cc0001, 0x82000500,
- 0x00ffffff, 0x48026027, 0x4a026407, 0x00000004,
- 0x59cc0c04, 0x48066202, 0x4a026403, 0x00000009,
- 0x4a02641b, 0x00000009, 0x4a02621b, 0x00002900,
- 0x4a026203, 0x00000001, 0x0201f000, 0x00106d1c,
- 0x59a8021b, 0x4803c857, 0x8c000508, 0x04000013,
- 0x599c0019, 0x8c000510, 0x04020010, 0x59cc0006,
- 0x82000500, 0xff000000, 0x82000d80, 0x03000000,
- 0x0400000c, 0x82000d80, 0x20000000, 0x04000009,
- 0x82000d80, 0x05000000, 0x04000006, 0x82000d80,
- 0x21000000, 0x04000003, 0x80000580, 0x1c01f000,
- 0x82000540, 0x00000001, 0x0401f7fd, 0x59cc2006,
- 0x82102500, 0xff000000, 0x9c1021c0, 0x0401f807,
- 0x820c1c00, 0x0010cb3e, 0x500c1800, 0x800c0500,
- 0x4803c857, 0x1c01f000, 0x40100800, 0x41781800,
- 0x82040480, 0x00000020, 0x04001004, 0x800c1800,
- 0x40000800, 0x0401f7fb, 0x82040500, 0x0000000f,
- 0x82000400, 0x0010c0fc, 0x50000000, 0x8c040d08,
- 0x04000002, 0x900001c0, 0x1c01f000, 0x4803c856,
- 0x0401fb55, 0x0402000a, 0x0201f800, 0x00101d52,
- 0x04020007, 0x59cc0002, 0x82000500, 0xff000000,
- 0x82000d80, 0x08000000, 0x04000802, 0x1c01f000,
- 0x4803c856, 0x59cc0400, 0x82000d00, 0x0000ff00,
- 0x840409c0, 0x82040580, 0x00000033, 0x04020027,
- 0x0401f9a4, 0x0400006b, 0x59cc0a04, 0x48066202,
- 0x59a8005a, 0x82000480, 0x00000004, 0x04001065,
- 0x59cc0006, 0x4803c857, 0x82000500, 0xffff0000,
- 0x82000d80, 0x02000000, 0x04020009, 0x59cc0006,
- 0x82000500, 0x0000ffff, 0x0402005a, 0x42027000,
- 0x00000015, 0x0201f000, 0x00020bc1, 0x82000d80,
- 0x01000000, 0x04020053, 0x59cc0006, 0x82000500,
- 0x0000ffff, 0x0402004f, 0x59a8005a, 0x82000480,
- 0x00000008, 0x0400104b, 0x42027000, 0x00000016,
- 0x0201f000, 0x00020bc1, 0x82040580, 0x00000032,
- 0x04020044, 0x59cc0006, 0x82000500, 0xffff0000,
- 0x82000d80, 0x14000000, 0x0402003e, 0x59a8005a,
- 0x82000480, 0x00000010, 0x0400103a, 0x42027000,
- 0x00000038, 0x59cc0001, 0x59cc3800, 0x821c3d00,
- 0x00ffffff, 0x4c1c0000, 0x0401f836, 0x5c003800,
- 0x04020030, 0x0201f800, 0x00101fc9, 0x0402002d,
+ 0x00000023, 0x0401f058, 0x5c00b000, 0x5c00c800,
+ 0x5c00c000, 0x5c00b800, 0x42000000, 0x0010d532,
+ 0x0201f000, 0x0010c50a, 0x82000d80, 0x60000000,
+ 0x04020004, 0x42027000, 0x0000003f, 0x0401f04a,
+ 0x82000d80, 0x54000000, 0x04020011, 0x0201f800,
+ 0x001066e1, 0x02020800, 0x001003fe, 0x040200a5,
+ 0x42027000, 0x00000046, 0x42000000, 0x0010d5f4,
+ 0x50000000, 0x59cc3800, 0x821c3d00, 0xff000000,
+ 0x801c0540, 0x48039800, 0x0401f037, 0x82000d80,
+ 0x55000000, 0x0402000a, 0x0201f800, 0x00106709,
+ 0x04020004, 0x42027000, 0x00000041, 0x0401f02e,
+ 0x42027000, 0x00000042, 0x0401f02b, 0x82000d80,
+ 0x78000000, 0x04020004, 0x42027000, 0x00000045,
+ 0x0401f025, 0x82000d80, 0x10000000, 0x04020004,
+ 0x42027000, 0x0000004e, 0x0401f01f, 0x82000d80,
+ 0x63000000, 0x04020004, 0x42027000, 0x0000004a,
+ 0x0401f019, 0x82000d00, 0xff000000, 0x82040d80,
+ 0x56000000, 0x04020004, 0x42027000, 0x0000004f,
+ 0x0401f011, 0x82000d00, 0xff000000, 0x82040d80,
+ 0x57000000, 0x04020004, 0x42027000, 0x00000050,
+ 0x0401f009, 0x82000d80, 0x7d000000, 0x04020004,
+ 0x42027000, 0x00000056, 0x0401f003, 0x42027000,
+ 0x0000001d, 0x59cc3800, 0x821c3d00, 0x00ffffff,
+ 0x821c0580, 0x00fffffe, 0x59cc0001, 0x04020005,
+ 0x40003000, 0x42028800, 0x000007fe, 0x0401f00a,
+ 0x59cc3800, 0x821c3d00, 0x00ffffff, 0x4c1c0000,
+ 0x0401f94c, 0x5c003800, 0x02020800, 0x001003fe,
+ 0x04020055, 0x0201f800, 0x00102051, 0x0402004d,
0x83440480, 0x000007f0, 0x04001001, 0x0201f800,
- 0x00103adb, 0x04000012, 0x4c180000, 0x0201f800,
- 0x00104a7c, 0x5c003000, 0x04000010, 0x4c180000,
- 0x0401ff68, 0x5c003000, 0x04020009, 0x0201f800,
- 0x00104d9c, 0x42026800, 0x0010e23c, 0x481a6802,
- 0x42028800, 0x0000ffff, 0x0401f004, 0x0201f800,
- 0x00104628, 0x04020013, 0x0201f800, 0x00107ef8,
- 0x04000010, 0x4926601c, 0x4936600a, 0x83340580,
- 0x0010e23c, 0x04020005, 0x59cc0001, 0x82000500,
- 0x00ffffff, 0x48026027, 0x4a026407, 0x00000004,
- 0x59cc0c04, 0x48066202, 0x0201f000, 0x00020bc1,
- 0x42000000, 0x0010cf17, 0x0201f000, 0x0010bfb3,
- 0x4803c857, 0x4000d000, 0x401cd800, 0x82003500,
- 0x00ffffff, 0x0201f800, 0x00110fd6, 0x40c40000,
- 0x82000580, 0x00000001, 0x1c01f000, 0x59a8021b,
- 0x8c00050e, 0x04000003, 0x8c000502, 0x04000006,
- 0x59cc0c00, 0x80040910, 0x82040500, 0x0000000f,
- 0x0c01f002, 0x1c01f000, 0x0010615a, 0x0010615a,
- 0x0010615a, 0x00106277, 0x0010615a, 0x0010615c,
- 0x00106183, 0x00106186, 0x0010615a, 0x0010615a,
- 0x0010615a, 0x0010615a, 0x0010615a, 0x0010615a,
- 0x0010615a, 0x0010615a, 0x4803c856, 0x1c01f000,
- 0x0401f90c, 0x04000020, 0x59a8005a, 0x82000480,
- 0x0000000c, 0x0400101c, 0x59300407, 0x82000580,
- 0x00000003, 0x04020018, 0x59cc0001, 0x5932680a,
- 0x813669c0, 0x04000014, 0x59340802, 0x80040580,
- 0x82000500, 0x00ffffff, 0x0402000f, 0x0401faac,
- 0x0402000d, 0x59cc0a04, 0x59300202, 0x82001580,
- 0x0000ffff, 0x04000003, 0x80040580, 0x04020006,
- 0x48066202, 0x42027000, 0x00000046, 0x0201f000,
- 0x00020bc1, 0x59cc0004, 0x4803c857, 0x42000000,
- 0x0010cf18, 0x0201f000, 0x0010bfb3, 0x59cc0004,
- 0x4803c857, 0x1c01f000, 0x0401f8e2, 0x0400001c,
- 0x59a8005a, 0x82000480, 0x0000000c, 0x04001018,
- 0x59300407, 0x82000580, 0x00000003, 0x04020014,
- 0x59cc0001, 0x82000500, 0x00ffffff, 0x5932680a,
- 0x813669c0, 0x0400000e, 0x59340802, 0x82040d00,
- 0x00ffffff, 0x80040580, 0x04020009, 0x0401fa80,
- 0x04020007, 0x59cc0a04, 0x48066202, 0x42027000,
- 0x00000045, 0x0201f000, 0x00020bc1, 0x59cc0004,
- 0x4803c857, 0x42000000, 0x0010cf18, 0x0201f000,
- 0x0010bfb3, 0x59cc0004, 0x4803c857, 0x59cc0000,
- 0x82000500, 0xff000000, 0x59cc1001, 0x82081500,
- 0x00ffffff, 0x80080540, 0x4803c857, 0x4817c857,
- 0x0401fa51, 0x02020800, 0x001003f5, 0x04020016,
- 0x0201f800, 0x00101d52, 0x02020800, 0x001003f5,
- 0x04020011, 0x59cc0002, 0x82000500, 0xff000000,
- 0x82000580, 0x00000000, 0x02020800, 0x001003f5,
- 0x04020009, 0x82040500, 0x0000000f, 0x82000c80,
- 0x00000006, 0x02021800, 0x001003f5, 0x04021002,
- 0x0c01f003, 0x4803c856, 0x1c01f000, 0x001061d5,
- 0x001061d7, 0x001061d5, 0x001061d5, 0x0010623f,
- 0x0010624e, 0x4803c856, 0x1c01f000, 0x59a8005a,
- 0x800001c0, 0x02020800, 0x001003f5, 0x040207fa,
- 0x59cc0802, 0x4807c856, 0x8c040d2e, 0x04020023,
- 0x42026000, 0x0011152c, 0x59cc0001, 0x59cc3800,
- 0x0401ff50, 0x04020014, 0x0201f800, 0x0002034c,
- 0x04020011, 0x59cc3800, 0x821c3d00, 0x00ffffff,
- 0x0201f800, 0x00101fc9, 0x040207e7, 0x4926601c,
- 0x4a026407, 0x00000005, 0x4a026203, 0x00000008,
- 0x4936600a, 0x42027000, 0x00000088, 0x0201f000,
- 0x00020bc1, 0x4803c857, 0x42028800, 0x0000ffff,
- 0x417a6800, 0x59cc0001, 0x82000500, 0x00ffffff,
- 0x48026027, 0x0401f7e8, 0x59cc0001, 0x4803c857,
+ 0x00103b7b, 0x04000012, 0x4c180000, 0x0201f800,
+ 0x00104bd5, 0x5c003000, 0x04000012, 0x4c180000,
+ 0x0401f873, 0x5c003000, 0x04020009, 0x0201f800,
+ 0x00104f07, 0x42026800, 0x0010e85a, 0x481a6802,
+ 0x42028800, 0x0000ffff, 0x0401f006, 0x0201f800,
+ 0x00104779, 0x02020800, 0x001003fe, 0x04020031,
+ 0x83380580, 0x00000046, 0x04020006, 0x59a80015,
+ 0x80180580, 0x02000800, 0x001003fe, 0x04000029,
+ 0x59340200, 0x8c000514, 0x0400000f, 0x83380580,
+ 0x00000030, 0x0400000c, 0x83380580, 0x0000003f,
+ 0x04000009, 0x83380580, 0x00000034, 0x04000006,
+ 0x83380580, 0x00000024, 0x04000003, 0x42027000,
+ 0x0000004c, 0x0201f800, 0x00108297, 0x04000024,
+ 0x4926601c, 0x4936600a, 0x4a026407, 0x00000004,
+ 0x83340580, 0x0010e85a, 0x04020005, 0x59cc0001,
+ 0x82000500, 0x00ffffff, 0x48026027, 0x59cc0c04,
+ 0x48066202, 0x83380580, 0x0000004c, 0x04020003,
+ 0x4a026407, 0x00000011, 0x0201f000, 0x00020b22,
+ 0x598800bc, 0x4803c857, 0x80000000, 0x480310bc,
+ 0x1c01f000, 0x0201f800, 0x00102051, 0x040207f9,
+ 0x42000000, 0x0010d4a7, 0x0201f800, 0x0010c50a,
+ 0x42026800, 0x0010e85a, 0x0401f003, 0x0201f800,
+ 0x001067b7, 0x42001000, 0x00008049, 0x59cc1806,
+ 0x800c1930, 0x0201f800, 0x00103a4e, 0x0201f800,
+ 0x001082a1, 0x02000800, 0x001003fe, 0x040007e5,
+ 0x4926601c, 0x4936600a, 0x83340580, 0x0010e85a,
+ 0x04020005, 0x59cc0001, 0x82000500, 0x00ffffff,
+ 0x48026027, 0x4a026407, 0x00000004, 0x59cc0c04,
+ 0x48066202, 0x4a026403, 0x00000009, 0x4a02641b,
+ 0x00000009, 0x4a02621b, 0x00002900, 0x4a026203,
+ 0x00000001, 0x0201f000, 0x0010707f, 0x59a80221,
+ 0x4803c857, 0x8c000508, 0x04000013, 0x599c0019,
+ 0x8c000510, 0x04020010, 0x59cc0006, 0x82000500,
+ 0xff000000, 0x82000d80, 0x03000000, 0x0400000c,
+ 0x82000d80, 0x20000000, 0x04000009, 0x82000d80,
+ 0x05000000, 0x04000006, 0x82000d80, 0x21000000,
+ 0x04000003, 0x80000580, 0x1c01f000, 0x82000540,
+ 0x00000001, 0x0401f7fd, 0x59cc2006, 0x82102500,
+ 0xff000000, 0x9c1021c0, 0x0401f807, 0x820c1c00,
+ 0x0010d154, 0x500c1800, 0x800c0500, 0x4803c857,
+ 0x1c01f000, 0x40100800, 0x41781800, 0x82040480,
+ 0x00000020, 0x04001004, 0x800c1800, 0x40000800,
+ 0x0401f7fb, 0x82040500, 0x0000000f, 0x82000400,
+ 0x0010c69b, 0x50000000, 0x8c040d08, 0x04000002,
+ 0x900001c0, 0x1c01f000, 0x4803c856, 0x0401fb89,
+ 0x0402000e, 0x0201f800, 0x00101dda, 0x0402000b,
+ 0x59cc0002, 0x82000500, 0xff000000, 0x82000d80,
+ 0x08000000, 0x04000009, 0x42000000, 0x0010d535,
+ 0x0201f000, 0x0010c50a, 0x42000000, 0x0010d532,
+ 0x0201f000, 0x0010c50a, 0x4803c856, 0x59cc0400,
+ 0x82000d00, 0x0000ff00, 0x840409c0, 0x82040580,
+ 0x00000033, 0x04020027, 0x0401f9c9, 0x0400006c,
+ 0x59cc0a04, 0x48066202, 0x59a80068, 0x82000480,
+ 0x00000004, 0x04001066, 0x59cc0006, 0x4803c857,
+ 0x82000500, 0xffff0000, 0x82000d80, 0x02000000,
+ 0x04020009, 0x59cc0006, 0x82000500, 0x0000ffff,
+ 0x0402005b, 0x42027000, 0x00000015, 0x0201f000,
+ 0x00020b22, 0x82000d80, 0x01000000, 0x04020054,
+ 0x59cc0006, 0x82000500, 0x0000ffff, 0x04020050,
+ 0x59a80068, 0x82000480, 0x00000008, 0x0400104c,
+ 0x42027000, 0x00000016, 0x0201f000, 0x00020b22,
+ 0x82040580, 0x00000032, 0x04020045, 0x59cc0006,
+ 0x82000500, 0xffff0000, 0x82000d80, 0x14000000,
+ 0x0402003f, 0x59a80068, 0x82000480, 0x00000010,
+ 0x0400103b, 0x42027000, 0x00000038, 0x59cc0001,
0x59cc3800, 0x821c3d00, 0x00ffffff, 0x4c1c0000,
- 0x0401ff2c, 0x5c003800, 0x02020800, 0x001003f5,
- 0x040207c9, 0x0201f800, 0x00101fc9, 0x02020800,
- 0x001003f5, 0x040207c4, 0x0201f800, 0x00104628,
- 0x02020800, 0x001003f5, 0x040207bf, 0x59cc0005,
- 0x8c000500, 0x04020006, 0x59340200, 0x8c00050e,
- 0x02020800, 0x001003f5, 0x040207b7, 0x0201f800,
- 0x00104a2f, 0x04020011, 0x0401f846, 0x02000800,
- 0x001003f5, 0x040007b0, 0x42026000, 0x0011152c,
- 0x4926601c, 0x4936600a, 0x4a026407, 0x00000002,
- 0x4a026203, 0x00000008, 0x42027000, 0x00000088,
- 0x0201f000, 0x00020bc1, 0x0201f800, 0x00107ef8,
- 0x040007a1, 0x4926601c, 0x4936600a, 0x4a026407,
+ 0x0401f837, 0x5c003800, 0x04020031, 0x0201f800,
+ 0x00102051, 0x0402002e, 0x83440480, 0x000007f0,
+ 0x04001001, 0x0201f800, 0x00103b7b, 0x04000012,
+ 0x4c180000, 0x0201f800, 0x00104bd5, 0x5c003000,
+ 0x04000010, 0x4c180000, 0x0401ff61, 0x5c003000,
+ 0x04020009, 0x0201f800, 0x00104f07, 0x42026800,
+ 0x0010e85a, 0x481a6802, 0x42028800, 0x0000ffff,
+ 0x0401f004, 0x0201f800, 0x00104774, 0x04020014,
+ 0x0201f800, 0x00108297, 0x04000b69, 0x04000010,
+ 0x4926601c, 0x4936600a, 0x83340580, 0x0010e85a,
+ 0x04020005, 0x59cc0001, 0x82000500, 0x00ffffff,
+ 0x48026027, 0x4a026407, 0x00000004, 0x59cc0c04,
+ 0x48066202, 0x0201f000, 0x00020b22, 0x42000000,
+ 0x0010d532, 0x0201f000, 0x0010c50a, 0x4803c857,
+ 0x4000d000, 0x401cd800, 0x82003500, 0x00ffffff,
+ 0x0201f800, 0x0011174b, 0x40c40000, 0x82000580,
+ 0x00000001, 0x1c01f000, 0x59a80221, 0x8c00050e,
+ 0x04000003, 0x8c000502, 0x0400000a, 0x59cc0003,
+ 0x82000500, 0x00ff0000, 0x04020006, 0x59cc0c00,
+ 0x80040910, 0x82040500, 0x0000000f, 0x0c01f005,
+ 0x42000000, 0x0010d534, 0x0201f000, 0x0010c50a,
+ 0x00106490, 0x00106490, 0x00106490, 0x001065ca,
+ 0x00106490, 0x00106495, 0x001064bc, 0x001064c3,
+ 0x00106490, 0x00106490, 0x00106490, 0x00106490,
+ 0x00106490, 0x00106490, 0x00106490, 0x00106490,
+ 0x4803c856, 0x42000000, 0x0010d534, 0x0201f000,
+ 0x0010c50a, 0x0401f926, 0x04000020, 0x59a80068,
+ 0x82000480, 0x0000000c, 0x0400101c, 0x59300407,
+ 0x82000580, 0x00000003, 0x04020018, 0x59cc0001,
+ 0x5932680a, 0x813669c0, 0x04000014, 0x59340802,
+ 0x80040580, 0x82000500, 0x00ffffff, 0x0402000f,
+ 0x0401face, 0x0402000d, 0x59cc0a04, 0x59300202,
+ 0x82001580, 0x0000ffff, 0x04000003, 0x80040580,
+ 0x04020006, 0x48066202, 0x42027000, 0x00000046,
+ 0x0201f000, 0x00020b22, 0x59cc0004, 0x4803c857,
+ 0x42000000, 0x0010d533, 0x0201f000, 0x0010c50a,
+ 0x59cc0004, 0x4803c857, 0x42000000, 0x0010d533,
+ 0x0201f800, 0x0010c50a, 0x1c01f000, 0x0401f8f8,
+ 0x0400001c, 0x59a80068, 0x82000480, 0x0000000c,
+ 0x04001018, 0x59300407, 0x82000580, 0x00000003,
+ 0x04020014, 0x59cc0001, 0x82000500, 0x00ffffff,
+ 0x5932680a, 0x813669c0, 0x0400000e, 0x59340802,
+ 0x82040d00, 0x00ffffff, 0x80040580, 0x04020009,
+ 0x0401fa9e, 0x04020007, 0x59cc0a04, 0x48066202,
+ 0x42027000, 0x00000045, 0x0201f000, 0x00020b22,
+ 0x59cc0004, 0x4803c857, 0x42000000, 0x0010d533,
+ 0x0201f000, 0x0010c50a, 0x59cc0004, 0x4803c857,
+ 0x59cc0000, 0x82000500, 0xff000000, 0x59cc1001,
+ 0x82081500, 0x00ffffff, 0x80080540, 0x4803c857,
+ 0x4817c857, 0x0401fa6f, 0x02020800, 0x001003fe,
+ 0x04020016, 0x0201f800, 0x00101dda, 0x02020800,
+ 0x001003fe, 0x04020011, 0x59cc0002, 0x82000500,
+ 0xff000000, 0x82000580, 0x00000000, 0x02020800,
+ 0x001003fe, 0x0402000e, 0x82040500, 0x0000000f,
+ 0x82000c80, 0x00000006, 0x02021800, 0x001003fe,
+ 0x04021002, 0x0c01f00a, 0x4803c856, 0x42000000,
+ 0x0010d534, 0x0201f000, 0x0010c50a, 0x42000000,
+ 0x0010d535, 0x0201f000, 0x0010c50a, 0x00106519,
+ 0x0010651e, 0x00106519, 0x00106519, 0x0010658f,
+ 0x001065a1, 0x4803c856, 0x42000000, 0x0010d534,
+ 0x0201f000, 0x0010c50a, 0x59a80068, 0x800001c0,
+ 0x02020800, 0x001003fe, 0x040207f7, 0x59cc0802,
+ 0x4807c857, 0x8c040d2e, 0x04020027, 0x42026000,
+ 0x00111cec, 0x59cc0001, 0x59cc3800, 0x0401ff38,
+ 0x04020018, 0x0201f800, 0x00020353, 0x04020015,
+ 0x59cc3800, 0x821c3d00, 0x00ffffff, 0x0201f800,
+ 0x00102051, 0x040207e4, 0x4926601c, 0x4a026407,
+ 0x00000005, 0x4a026203, 0x00000008, 0x4936600a,
+ 0x42027000, 0x00000088, 0x42000000, 0x0010d4a3,
+ 0x0201f800, 0x0010c50a, 0x0201f000, 0x00020b22,
+ 0x4803c857, 0x42028800, 0x0000ffff, 0x417a6800,
+ 0x59cc0001, 0x82000500, 0x00ffffff, 0x48026027,
+ 0x0401f7e4, 0x59cc0001, 0x4803c857, 0x59cc3800,
+ 0x821c3d00, 0x00ffffff, 0x4c1c0000, 0x0401ff10,
+ 0x5c003800, 0x02020800, 0x001003fe, 0x040207c2,
+ 0x0201f800, 0x00102051, 0x02020800, 0x001003fe,
+ 0x040207bd, 0x0201f800, 0x00104774, 0x02020800,
+ 0x001003fe, 0x040207b8, 0x59cc0005, 0x8c000500,
+ 0x04020006, 0x59340200, 0x8c00050e, 0x02020800,
+ 0x001003fe, 0x040207b0, 0x0201f800, 0x00104b88,
+ 0x04020015, 0x0401f84e, 0x02000800, 0x001003fe,
+ 0x040007a9, 0x42026000, 0x00111cec, 0x4926601c,
+ 0x4936600a, 0x4a026407, 0x00000002, 0x4a026203,
+ 0x00000008, 0x42027000, 0x00000088, 0x42000000,
+ 0x0010d4a3, 0x0201f800, 0x0010c50a, 0x0201f000,
+ 0x00020b22, 0x0201f800, 0x00108297, 0x04000a34,
+ 0x04000795, 0x4926601c, 0x4936600a, 0x4a026407,
0x00000004, 0x59cc0c04, 0x48066202, 0x42027000,
- 0x00000001, 0x0201f000, 0x00020bc1, 0x59cc0802,
- 0x8c040d2e, 0x0400000b, 0x0401f826, 0x04000009,
- 0x0401f9cb, 0x04020007, 0x59cc0a04, 0x48066202,
- 0x42027000, 0x00000089, 0x0201f000, 0x00020bc1,
- 0x4933c857, 0x1c01f000, 0x59cc0004, 0x4803c857,
- 0x59a8005a, 0x82000480, 0x00000004, 0x0400100e,
- 0x59cc0802, 0x8c040d2e, 0x0400000b, 0x0401f811,
- 0x04000009, 0x0401f9b6, 0x04020007, 0x59cc0a04,
- 0x48066202, 0x42027000, 0x0000008a, 0x0201f000,
- 0x00020bc1, 0x4933c857, 0x42000000, 0x0010cf17,
- 0x0201f000, 0x0010bfb3, 0x59cc0a04, 0x0401f002,
- 0x59cc0c04, 0x59a8000d, 0x59a8104f, 0x80080400,
- 0x80040480, 0x04021008, 0x42001000, 0x0000002c,
- 0x0201f800, 0x00106c7e, 0x82066400, 0x00111584,
- 0x1c01f000, 0x80000580, 0x0401f7fe, 0x59cc0802,
- 0x8c040d2e, 0x0402001b, 0x0401ffec, 0x04000019,
- 0x59300407, 0x82000580, 0x00000006, 0x04020015,
- 0x59cc0001, 0x82000500, 0x00ffffff, 0x5932680a,
- 0x813669c0, 0x0400000f, 0x59340802, 0x82040d00,
- 0x00ffffff, 0x80040580, 0x0402000a, 0x0401f990,
- 0x04020008, 0x59a8005a, 0x800001c0, 0x04020005,
- 0x42027000, 0x00000051, 0x0201f000, 0x00020bc1,
- 0x59cc0004, 0x4803c857, 0x42000000, 0x0010cf18,
- 0x0201f000, 0x0010bfb3, 0x4803c856, 0x42003000,
- 0x00000105, 0x0401f001, 0x481bc857, 0x4c5c0000,
- 0x4c600000, 0x4c640000, 0x41ccc800, 0x4014b800,
- 0x4018c000, 0x0401f805, 0x5c00c800, 0x5c00c000,
- 0x5c00b800, 0x1c01f000, 0x4803c856, 0x4c580000,
- 0x58640400, 0x82000500, 0x0000f000, 0x82000580,
- 0x0000c000, 0x0400002b, 0x0201f800, 0x00107ef8,
- 0x04000028, 0x58640001, 0x58643800, 0x821c3d00,
- 0x00ffffff, 0x4c1c0000, 0x0401fe7a, 0x5c003800,
- 0x04020022, 0x0201f800, 0x00101fc9, 0x0402001f,
- 0x0201f800, 0x00104628, 0x0402001c, 0x4936600a,
- 0x0201f800, 0x00100583, 0x04000018, 0x4926601c,
- 0x492e6018, 0x497a5800, 0x497a5a05, 0x485e5c05,
- 0x832cac00, 0x00000006, 0x4200b000, 0x00000007,
- 0x4064a000, 0x0201f800, 0x0010c086, 0x4862641b,
- 0x4a026403, 0x0000003e, 0x4a026407, 0x00000001,
- 0x4a026203, 0x00000001, 0x0201f800, 0x00106d1c,
- 0x5c00b000, 0x1c01f000, 0x0201f800, 0x00020b9d,
- 0x0401f7fc, 0x4803c856, 0x59cc0400, 0x82000d00,
- 0x0000ff00, 0x82040500, 0x0000f000, 0x840409c0,
- 0x82000580, 0x00002000, 0x04020050, 0x82040580,
- 0x00000022, 0x04020040, 0x59c400a4, 0x82000500,
- 0x0000000f, 0x82000c80, 0x00000007, 0x04001004,
- 0x82000480, 0x0000000c, 0x0400107d, 0x59cc0006,
- 0x82000500, 0xffff0000, 0x82000d80, 0x04000000,
- 0x04000077, 0x82000d80, 0x60000000, 0x04000074,
- 0x82000d80, 0x54000000, 0x04000071, 0x82000d80,
- 0x03000000, 0x0402001b, 0x59a80a1b, 0x8c040d02,
- 0x0402006b, 0x8c040d08, 0x04020069, 0x82000d80,
- 0x03000000, 0x04020004, 0x0201f800, 0x001050f7,
- 0x04000063, 0x0201f800, 0x0010496c, 0x04000063,
- 0x59a80018, 0x800000d0, 0x59a8080f, 0x82040d00,
- 0x000000ff, 0x80040540, 0x59cc0800, 0x82040d00,
- 0x00ffffff, 0x80040580, 0x04020034, 0x0401f054,
- 0x59c40802, 0x8c040d0c, 0x04020018, 0x82000d80,
- 0x52000000, 0x040007ec, 0x82000d80, 0x05000000,
- 0x040007e9, 0x82000d80, 0x50000000, 0x040007e6,
- 0x0401f026, 0x82040580, 0x00000023, 0x04020023,
- 0x0401ff38, 0x04000021, 0x59300c03, 0x82040580,
- 0x00000002, 0x0400003e, 0x82040580, 0x00000051,
- 0x0400003b, 0x0401f001, 0x59a8021b, 0x8c000514,
- 0x04000016, 0x4c580000, 0x0201f800, 0x0010c0ca,
- 0x82582480, 0x00000041, 0x5c00b000, 0x0400100f,
- 0x59cc0800, 0x82040d00, 0x00ffffff, 0x42001000,
- 0x0010d291, 0x58080005, 0x80040580, 0x04000028,
- 0x801021c0, 0x04000005, 0x80102040, 0x82081400,
- 0x0000000b, 0x0401f7f8, 0x59a80078, 0x8c00053e,
- 0x0400001d, 0x59cc0800, 0x82040d00, 0x00ffffff,
- 0x82040580, 0x0000fc0e, 0x04000019, 0x4c040000,
- 0x42000000, 0x0010cfb0, 0x0201f800, 0x0010bfb3,
- 0x0201f800, 0x00020b7b, 0x5c000800, 0x0400000e,
- 0x59aa6879, 0x4936600a, 0x4a026407, 0x00000012,
- 0x42027000, 0x000000d2, 0x48066019, 0x4a02601a,
- 0x00000000, 0x4a02601b, 0x00000000, 0x0201f800,
- 0x00020bc1, 0x80000580, 0x0401f003, 0x82000540,
- 0x00000001, 0x1c01f000, 0x59cc0006, 0x82000500,
- 0xffff0000, 0x82000d80, 0x03000000, 0x04000004,
- 0x82000d80, 0x52000000, 0x040207d4, 0x59a8021b,
- 0x82000500, 0x00000009, 0x82000580, 0x00000008,
- 0x040007ef, 0x0401f7cd, 0x4803c856, 0x4c5c0000,
- 0x4c580000, 0x59a8005a, 0x82000580, 0x0000004c,
- 0x0402001f, 0x59ccb807, 0x9c5cb9c0, 0x825cbd00,
- 0x00000007, 0x8c5cbd00, 0x0400000a, 0x4200b000,
- 0x00000002, 0x83a81c00, 0x00000002, 0x83cc1400,
- 0x0000000d, 0x0201f800, 0x00108c57, 0x04020010,
- 0x8c5cbd02, 0x0400000a, 0x4200b000, 0x00000002,
- 0x83a81c00, 0x00000000, 0x83cc1400, 0x0000000f,
- 0x0201f800, 0x00108c57, 0x04020005, 0x8c5cbd04,
- 0x04000003, 0x82000540, 0x00000001, 0x5c00b000,
- 0x5c00b800, 0x1c01f000, 0x4803c856, 0x4c5c0000,
- 0x4c580000, 0x59a8005a, 0x82000580, 0x0000004c,
- 0x0402001f, 0x59ccb807, 0x9c5cb9c0, 0x825cbd00,
- 0x00000007, 0x8c5cbd00, 0x0400000a, 0x4200b000,
- 0x00000002, 0x83a81c00, 0x00000002, 0x83cc1400,
- 0x00000009, 0x0201f800, 0x00108c57, 0x04020010,
- 0x8c5cbd02, 0x0400000a, 0x4200b000, 0x00000002,
- 0x83a81c00, 0x00000000, 0x83cc1400, 0x0000000b,
- 0x0201f800, 0x00108c57, 0x04020005, 0x8c5cbd04,
- 0x04000003, 0x82000540, 0x00000001, 0x5c00b000,
- 0x5c00b800, 0x1c01f000, 0x4803c857, 0x4c580000,
- 0x40003000, 0x42002000, 0x000007f0, 0x4200b000,
- 0x00000010, 0x59247009, 0x50380000, 0x80026d40,
- 0x04000013, 0x59340002, 0x82000500, 0x00ffffff,
- 0x80180580, 0x0402000e, 0x59341013, 0x80080130,
- 0x81200580, 0x0402000a, 0x82080500, 0x00ffffff,
- 0x59240805, 0x80040580, 0x04000014, 0x812000f0,
- 0x80040d40, 0x48066813, 0x0401f010, 0x80102000,
- 0x80387000, 0x8058b040, 0x040207e8, 0x82100480,
- 0x00000800, 0x42002000, 0x00000000, 0x4200b000,
- 0x000007f0, 0x41ac7000, 0x040217e0, 0x82000540,
- 0x00000001, 0x0401f002, 0x40128800, 0x5c00b000,
- 0x1c01f000, 0x59a8021b, 0x8c00050e, 0x04000004,
- 0x8c000502, 0x04000003, 0x80000580, 0x1c01f000,
- 0x82000540, 0x00000001, 0x0401f7fd, 0x59300c07,
- 0x82040580, 0x00000002, 0x04000003, 0x82040580,
- 0x00000005, 0x1c01f000, 0x59c80000, 0x84000558,
- 0x84000512, 0x48039000, 0x1c01f000, 0x59cc0800,
- 0x59340013, 0x80040580, 0x82000500, 0x00ffffff,
- 0x1c01f000, 0x82140500, 0x0000f000, 0x04000006,
- 0x82000c80, 0x00002000, 0x0402100a, 0x80000580,
- 0x1c01f000, 0x59cc0400, 0x82000500, 0x0000ff00,
- 0x82000580, 0x00008100, 0x040007fa, 0x0401f014,
- 0x4817c857, 0x82140500, 0x000003ff, 0x04020007,
- 0x59cc0400, 0x82000500, 0x0000ff00, 0x82000580,
- 0x00008100, 0x0402000a, 0x42000000, 0x0010cf7d,
- 0x0201f800, 0x0010bfb3, 0x0401fe5c, 0x4803c856,
- 0x82000540, 0x00000001, 0x0401f7e6, 0x41780000,
- 0x0401f7e4, 0x0201f800, 0x001050f7, 0x04000010,
- 0x59c400a4, 0x4803c857, 0x82000500, 0x0000000f,
- 0x82000580, 0x0000000a, 0x04020009, 0x497b505a,
- 0x59c400a3, 0x82000540, 0x00080000, 0x480388a3,
- 0x82000500, 0xfff7ffff, 0x480388a3, 0x4817c856,
- 0x0201f000, 0x0010bef8, 0x4a032824, 0x000003e8,
- 0x4a032802, 0x00111584, 0x4a032800, 0x00000000,
- 0x4a032808, 0x0010742e, 0x42000000, 0x00000005,
- 0x83947c00, 0x00000009, 0x49787801, 0x4a007804,
- 0x001072e1, 0x823c7c00, 0x00000005, 0x80000040,
- 0x040207fa, 0x4a032823, 0xffff0000, 0x4201d000,
- 0x00000064, 0x0401fa12, 0x4201d000, 0x000186a0,
- 0x0401f221, 0x00000000, 0x00000005, 0x0000000a,
- 0x0000000f, 0x00000014, 0x4d300000, 0x4d2c0000,
- 0x4d340000, 0x4d400000, 0x4cfc0000, 0x4d380000,
- 0x4d3c0000, 0x4d440000, 0x4d4c0000, 0x4d480000,
- 0x4c5c0000, 0x4c600000, 0x4c640000, 0x4cc80000,
- 0x4ccc0000, 0x0201f800, 0x00020988, 0x5c019800,
- 0x5c019000, 0x5c00c800, 0x5c00c000, 0x5c00b800,
- 0x5c029000, 0x5c029800, 0x5c028800, 0x5c027800,
- 0x5c027000, 0x5c01f800, 0x5c028000, 0x5c026800,
- 0x5c025800, 0x5c026000, 0x1c01f000, 0x59940031,
- 0x59940832, 0x80040480, 0x48032832, 0x04001002,
- 0x04020034, 0x59bc00e4, 0x8c000530, 0x04000009,
- 0x4a030000, 0x00000000, 0x4803c856, 0x4a0378e4,
- 0x02000000, 0x4a032832, 0x000004b0, 0x0401f029,
- 0x42000800, 0x00000100, 0x80040840, 0x040007f5,
- 0x0201f800, 0x0010c0d6, 0x040007fc, 0x0201f800,
- 0x00106e41, 0x4df00000, 0x4d180000, 0x42023000,
- 0x00000005, 0x0201f800, 0x00100e46, 0x5c023000,
- 0x0201f800, 0x0010064a, 0x42000800, 0x00007a00,
- 0x58040015, 0x82000500, 0xffff8fff, 0x59a8107a,
- 0x80080540, 0x48000815, 0x4a030000, 0x00000000,
- 0x497b2832, 0x4a0378e4, 0x02800000, 0x0201f800,
- 0x00100ea4, 0x5c03e000, 0x02000800, 0x00106e2e,
- 0x42000000, 0x0010cfb6, 0x0201f800, 0x0010bfb3,
- 0x1c01f000, 0x59940004, 0x80000540, 0x0402000a,
- 0x5994002f, 0x80040400, 0x02001800, 0x0010032e,
- 0x48032804, 0x480b2805, 0x4a032803, 0x0000000a,
- 0x80000580, 0x1c01f000, 0x59940029, 0x80000540,
- 0x0402000a, 0x5994002f, 0x80040400, 0x02001800,
- 0x0010032e, 0x48032829, 0x480b282a, 0x4a032828,
- 0x00000001, 0x80000580, 0x1c01f000, 0x40680800,
- 0x406c1000, 0x5994002c, 0x80000540, 0x0402000a,
- 0x5994002f, 0x80040400, 0x02001800, 0x0010032e,
- 0x4803282c, 0x480b282d, 0x4a03282b, 0x0000000a,
- 0x80000580, 0x1c01f000, 0x4c000000, 0x59940005,
- 0x80080580, 0x04020003, 0x497b2804, 0x497b2805,
- 0x5c000000, 0x1c01f000, 0x40681000, 0x0401fff7,
- 0x1c01f000, 0x4c000000, 0x5994002a, 0x80080580,
- 0x04020003, 0x497b2829, 0x497b282a, 0x5c000000,
- 0x1c01f000, 0x4c000000, 0x5994002d, 0x80080580,
- 0x04020003, 0x497b282c, 0x497b282d, 0x5c000000,
- 0x1c01f000, 0x4937c857, 0x48ebc857, 0x59340203,
- 0x80e80480, 0x04001002, 0x48ea6a03, 0x1c01f000,
- 0x4d440000, 0x42007800, 0x00000010, 0x59968801,
- 0x0201f800, 0x0002034c, 0x04020059, 0x59341a03,
- 0x800c1840, 0x04001017, 0x59940031, 0x800c0480,
- 0x04000003, 0x48026a03, 0x04021012, 0x5934000f,
- 0x497a6a03, 0x80000540, 0x0400004d, 0x5934000b,
- 0x80001120, 0x82000500, 0x0000ffff, 0x80080480,
- 0x04001004, 0x4a026a03, 0x00000001, 0x0401f005,
- 0x4c3c0000, 0x0201f800, 0x0002035a, 0x5c007800,
- 0x4d2c0000, 0x41781800, 0x5934000f, 0x80025d40,
- 0x0400003a, 0x592c0004, 0x80000d40, 0x04000006,
- 0x59940031, 0x80040480, 0x48025804, 0x04001007,
- 0x04000006, 0x412c1800, 0x592c0000, 0x80025d40,
- 0x0400002e, 0x0401f7f4, 0x592c2000, 0x497a5800,
- 0x800c19c0, 0x04020009, 0x59340010, 0x812c0580,
- 0x04020004, 0x497a680f, 0x497a6810, 0x0401f008,
- 0x4812680f, 0x0401f006, 0x48101800, 0x59340010,
- 0x812c0580, 0x04020002, 0x480e6810, 0x592c0205,
- 0x82000500, 0x000000ff, 0x82000580, 0x00000012,
- 0x04000004, 0x82000580, 0x00000060, 0x04020004,
- 0x4a025a07, 0x0000000b, 0x0401f008, 0x4a025a05,
- 0x00000103, 0x4a025a07, 0x00000006, 0x497a580a,
- 0x4a025c07, 0x0000ffff, 0x4c0c0000, 0x4c100000,
- 0x0201f800, 0x000203ef, 0x5c002000, 0x5c001800,
- 0x40100000, 0x0401f7d2, 0x5c025800, 0x81468800,
- 0x83440480, 0x00000800, 0x04021007, 0x803c7840,
- 0x040207a0, 0x49472801, 0x5c028800, 0x5c03e000,
- 0x1c01f000, 0x4a032800, 0x00000002, 0x497b2801,
- 0x0401f7fa, 0x42007800, 0x00000010, 0x59966002,
- 0x59300205, 0x80000d40, 0x04000006, 0x59940031,
- 0x80040480, 0x48026205, 0x0400102d, 0x0400002c,
- 0x59300006, 0x80000d40, 0x04000014, 0x59b800e4,
- 0x8c000524, 0x04020011, 0x4a0370e4, 0x00030000,
- 0x40000000, 0x59b800e4, 0x8c000524, 0x04000004,
- 0x4a0370e4, 0x00020000, 0x0401f008, 0x59940031,
- 0x80040480, 0x48026006, 0x4a0370e4, 0x00020000,
- 0x0400101c, 0x0400001b, 0x83326400, 0x0000002c,
- 0x49332802, 0x41540000, 0x81300480, 0x04021005,
- 0x803c7840, 0x040207db, 0x5c03e000, 0x1c01f000,
- 0x59940030, 0x48032831, 0x4a032802, 0x00111584,
- 0x497b2830, 0x80000540, 0x0400000f, 0x4a032800,
- 0x00000001, 0x5c03e000, 0x1c01f000, 0x4c3c0000,
- 0x0201f800, 0x00109a91, 0x5c007800, 0x0401f7d1,
- 0x4c3c0000, 0x0201f800, 0x001095de, 0x5c007800,
- 0x0401f7e2, 0x4a032800, 0x00000000, 0x5c03e000,
- 0x1c01f000, 0x59a80859, 0x8c040d30, 0x04020029,
- 0x8c040d32, 0x0400000f, 0x59a80050, 0x81640480,
- 0x04001019, 0x59a8000b, 0x81500580, 0x04000005,
- 0x59a8004e, 0x59a8104d, 0x80080580, 0x04020012,
- 0x900411c0, 0x82081500, 0x00007000, 0x0401f012,
- 0x82040500, 0x0000001f, 0x04000016, 0x80040840,
- 0x82040500, 0x0000001f, 0x04000003, 0x48075059,
- 0x0401f010, 0x900401c0, 0x82000500, 0x0000001f,
- 0x80040d40, 0x900401c0, 0x80040580, 0x82001500,
- 0x00007000, 0x82040500, 0xffff8fff, 0x80080540,
- 0x48035059, 0x80081114, 0x0201f800, 0x00100463,
- 0x1c01f000, 0x4a032807, 0x000007d0, 0x4a032806,
- 0x0000000a, 0x1c01f000, 0x42000800, 0x00000004,
- 0x83180480, 0x00000005, 0x02021800, 0x0010032e,
- 0x83947c00, 0x00000009, 0x83180400, 0x00106475,
- 0x50000000, 0x803c7c00, 0x4a007801, 0x000001f4,
- 0x48047802, 0x4a007800, 0x0000000a, 0x49787803,
+ 0x00000001, 0x0201f000, 0x00020b22, 0x59cc0802,
+ 0x8c040d2e, 0x0400000b, 0x0401f829, 0x04000009,
+ 0x0401f9d6, 0x04020007, 0x59cc0a04, 0x48066202,
+ 0x42027000, 0x00000089, 0x0201f000, 0x00020b22,
+ 0x4933c857, 0x42000000, 0x0010d532, 0x0201f000,
+ 0x0010c50a, 0x59cc0004, 0x4803c857, 0x59a80068,
+ 0x82000480, 0x00000004, 0x0400100e, 0x59cc0802,
+ 0x8c040d2e, 0x0400000b, 0x0401f811, 0x04000009,
+ 0x0401f9be, 0x04020007, 0x59cc0a04, 0x48066202,
+ 0x42027000, 0x0000008a, 0x0201f000, 0x00020b22,
+ 0x4933c857, 0x42000000, 0x0010d532, 0x0201f000,
+ 0x0010c50a, 0x59cc0a04, 0x0401f002, 0x59cc0c04,
+ 0x59a80013, 0x59a81055, 0x80080400, 0x80040480,
+ 0x04021008, 0x42001000, 0x0000002c, 0x0201f800,
+ 0x00106fe1, 0x82066400, 0x00111d44, 0x1c01f000,
+ 0x80000580, 0x0401f7fe, 0x59cc0802, 0x8c040d2e,
+ 0x0402001b, 0x0401ffec, 0x04000019, 0x59300407,
+ 0x82000580, 0x00000006, 0x04020015, 0x59cc0001,
+ 0x82000500, 0x00ffffff, 0x5932680a, 0x813669c0,
+ 0x0400000f, 0x59340802, 0x82040d00, 0x00ffffff,
+ 0x80040580, 0x0402000a, 0x0401f998, 0x04020008,
+ 0x59a80068, 0x800001c0, 0x04020005, 0x42027000,
+ 0x00000051, 0x0201f000, 0x00020b22, 0x59cc0004,
+ 0x4803c857, 0x42000000, 0x0010d533, 0x0201f000,
+ 0x0010c50a, 0x4803c856, 0x42003000, 0x00000105,
+ 0x0401f001, 0x481bc857, 0x4c5c0000, 0x4c600000,
+ 0x4c640000, 0x41ccc800, 0x4014b800, 0x4018c000,
+ 0x0401f805, 0x5c00c800, 0x5c00c000, 0x5c00b800,
+ 0x1c01f000, 0x4803c856, 0x4c580000, 0x58640400,
+ 0x82000500, 0x0000f000, 0x82000580, 0x0000c000,
+ 0x0400002f, 0x0201f800, 0x00108297, 0x04000030,
+ 0x58640001, 0x58643800, 0x821c3d00, 0x00ffffff,
+ 0x4c1c0000, 0x0401fe56, 0x5c003800, 0x04020026,
+ 0x0201f800, 0x00102051, 0x04020023, 0x0201f800,
+ 0x00104774, 0x04020020, 0x4936600a, 0x0201f800,
+ 0x00100599, 0x0400001c, 0x4926601c, 0x492e6018,
+ 0x497a5800, 0x497a5a05, 0x485e5c05, 0x832cac00,
+ 0x00000006, 0x4200b000, 0x00000007, 0x4064a000,
+ 0x0201f800, 0x0010c5dd, 0x42000000, 0x0010d4a1,
+ 0x0201f800, 0x0010c50a, 0x4862641b, 0x4a026403,
+ 0x0000003e, 0x4a026407, 0x00000001, 0x4a026203,
+ 0x00000001, 0x0201f800, 0x0010707f, 0x5c00b000,
+ 0x1c01f000, 0x0201f800, 0x00020afe, 0x42000000,
+ 0x0010d532, 0x0201f800, 0x0010c50a, 0x0401f7f8,
+ 0x4803c856, 0x59cc0400, 0x82000d00, 0x0000ff00,
+ 0x82040500, 0x0000f000, 0x840409c0, 0x82000580,
+ 0x00002000, 0x04020050, 0x82040580, 0x00000022,
+ 0x04020040, 0x59c400a4, 0x82000500, 0x0000000f,
+ 0x82000c80, 0x00000007, 0x04001004, 0x82000480,
+ 0x0000000c, 0x0400107d, 0x59cc0006, 0x82000500,
+ 0xffff0000, 0x82000d80, 0x04000000, 0x04000077,
+ 0x82000d80, 0x60000000, 0x04000074, 0x82000d80,
+ 0x54000000, 0x04000071, 0x82000d80, 0x03000000,
+ 0x0402001b, 0x59a80a21, 0x8c040d02, 0x0402006b,
+ 0x8c040d08, 0x04020069, 0x82000d80, 0x03000000,
+ 0x04020004, 0x0201f800, 0x001052aa, 0x04000063,
+ 0x0201f800, 0x00104ac2, 0x04000063, 0x59a8001e,
+ 0x800000d0, 0x59a80815, 0x82040d00, 0x000000ff,
+ 0x80040540, 0x59cc0800, 0x82040d00, 0x00ffffff,
+ 0x80040580, 0x04020034, 0x0401f054, 0x59c40802,
+ 0x8c040d0c, 0x04020018, 0x82000d80, 0x52000000,
+ 0x040007ec, 0x82000d80, 0x05000000, 0x040007e9,
+ 0x82000d80, 0x50000000, 0x040007e6, 0x0401f026,
+ 0x82040580, 0x00000023, 0x04020023, 0x0401ff30,
+ 0x04000021, 0x59300c03, 0x82040580, 0x00000002,
+ 0x0400003e, 0x82040580, 0x00000051, 0x0400003b,
+ 0x0401f001, 0x59a80221, 0x8c000514, 0x04000016,
+ 0x4c580000, 0x0201f800, 0x0010c621, 0x82582480,
+ 0x00000041, 0x5c00b000, 0x0400100f, 0x59cc0800,
+ 0x82040d00, 0x00ffffff, 0x42001000, 0x0010d8af,
+ 0x58080005, 0x80040580, 0x04000028, 0x801021c0,
+ 0x04000005, 0x80102040, 0x82081400, 0x0000000b,
+ 0x0401f7f8, 0x59a80086, 0x8c00053e, 0x0400001d,
+ 0x59cc0800, 0x82040d00, 0x00ffffff, 0x82040580,
+ 0x0000fc0e, 0x04000019, 0x4c040000, 0x42000000,
+ 0x0010d5cd, 0x0201f800, 0x0010c50a, 0x0201f800,
+ 0x00020adc, 0x5c000800, 0x0400000e, 0x59aa6887,
+ 0x4936600a, 0x4a026407, 0x00000012, 0x42027000,
+ 0x000000d2, 0x48066019, 0x4a02601a, 0x00000000,
+ 0x4a02601b, 0x00000000, 0x0201f800, 0x00020b22,
+ 0x80000580, 0x0401f003, 0x82000540, 0x00000001,
+ 0x1c01f000, 0x59cc0006, 0x82000500, 0xffff0000,
+ 0x82000d80, 0x03000000, 0x04000004, 0x82000d80,
+ 0x52000000, 0x040207d4, 0x59a80221, 0x82000500,
+ 0x00000009, 0x82000580, 0x00000008, 0x040007ef,
+ 0x0401f7cd, 0x4803c856, 0x4c5c0000, 0x4c580000,
+ 0x59a80068, 0x82000580, 0x0000004c, 0x0402001f,
+ 0x59ccb807, 0x9c5cb9c0, 0x825cbd00, 0x00000007,
+ 0x8c5cbd00, 0x0400000a, 0x4200b000, 0x00000002,
+ 0x83a81c00, 0x00000002, 0x83cc1400, 0x0000000d,
+ 0x0201f800, 0x00108fc3, 0x04020010, 0x8c5cbd02,
+ 0x0400000a, 0x4200b000, 0x00000002, 0x83a81c00,
+ 0x00000000, 0x83cc1400, 0x0000000f, 0x0201f800,
+ 0x00108fc3, 0x04020005, 0x8c5cbd04, 0x04000003,
+ 0x82000540, 0x00000001, 0x5c00b000, 0x5c00b800,
+ 0x1c01f000, 0x4803c856, 0x4c5c0000, 0x4c580000,
+ 0x59a80068, 0x82000580, 0x0000004c, 0x0402001f,
+ 0x59ccb807, 0x9c5cb9c0, 0x825cbd00, 0x00000007,
+ 0x8c5cbd00, 0x0400000a, 0x4200b000, 0x00000002,
+ 0x83a81c00, 0x00000002, 0x83cc1400, 0x00000009,
+ 0x0201f800, 0x00108fc3, 0x04020010, 0x8c5cbd02,
+ 0x0400000a, 0x4200b000, 0x00000002, 0x83a81c00,
+ 0x00000000, 0x83cc1400, 0x0000000b, 0x0201f800,
+ 0x00108fc3, 0x04020005, 0x8c5cbd04, 0x04000003,
+ 0x82000540, 0x00000001, 0x5c00b000, 0x5c00b800,
+ 0x1c01f000, 0x4803c857, 0x4c580000, 0x40003000,
+ 0x42002000, 0x000007f0, 0x4200b000, 0x00000010,
+ 0x59247009, 0x50380000, 0x80026d40, 0x04000013,
+ 0x59340002, 0x82000500, 0x00ffffff, 0x80180580,
+ 0x0402000e, 0x59341013, 0x80080130, 0x81200580,
+ 0x0402000a, 0x82080500, 0x00ffffff, 0x59240805,
+ 0x80040580, 0x04000014, 0x812000f0, 0x80040d40,
+ 0x48066813, 0x0401f010, 0x80102000, 0x80387000,
+ 0x8058b040, 0x040207e8, 0x82100480, 0x00000800,
+ 0x42002000, 0x00000000, 0x4200b000, 0x000007f0,
+ 0x41ac7000, 0x040217e0, 0x82000540, 0x00000001,
+ 0x0401f002, 0x40128800, 0x5c00b000, 0x1c01f000,
+ 0x59a80221, 0x8c00050e, 0x04000004, 0x8c000502,
+ 0x04000003, 0x80000580, 0x1c01f000, 0x82000540,
+ 0x00000001, 0x0401f7fd, 0x59300c07, 0x82040580,
+ 0x00000002, 0x04000003, 0x82040580, 0x00000005,
+ 0x1c01f000, 0x59c80000, 0x84000558, 0x84000512,
+ 0x48039000, 0x1c01f000, 0x59cc0800, 0x59340013,
+ 0x82000500, 0x00ffffff, 0x80040580, 0x82000500,
+ 0x00ffffff, 0x1c01f000, 0x82140500, 0x0000f000,
+ 0x04000006, 0x82000c80, 0x00002000, 0x0402100a,
+ 0x80000580, 0x1c01f000, 0x59cc0400, 0x82000500,
+ 0x0000ff00, 0x82000580, 0x00008100, 0x040007fa,
+ 0x0401f014, 0x4817c857, 0x82140500, 0x000003ff,
+ 0x04020007, 0x59cc0400, 0x82000500, 0x0000ff00,
+ 0x82000580, 0x00008100, 0x0402000a, 0x42000000,
+ 0x0010d598, 0x0201f800, 0x0010c50a, 0x0401fe52,
+ 0x4803c856, 0x82000540, 0x00000001, 0x0401f7e6,
+ 0x41780000, 0x0401f7e4, 0x0201f800, 0x001052aa,
+ 0x04000010, 0x59c400a4, 0x4803c857, 0x82000500,
+ 0x0000000f, 0x82000580, 0x0000000a, 0x04020009,
+ 0x497b5068, 0x59c400a3, 0x82000540, 0x00080000,
+ 0x480388a3, 0x82000500, 0xfff7ffff, 0x480388a3,
+ 0x4817c856, 0x0201f000, 0x0010c44f, 0x42000000,
+ 0x0010d4a2, 0x0201f800, 0x0010c50a, 0x80000580,
+ 0x1c01f000, 0x4a032824, 0x000003e8, 0x4a032802,
+ 0x00111d44, 0x4a032800, 0x00000000, 0x4a032808,
+ 0x0010779c, 0x42000000, 0x00000005, 0x83947c00,
+ 0x00000009, 0x49787801, 0x4a007804, 0x0010764f,
+ 0x823c7c00, 0x00000005, 0x80000040, 0x040207fa,
+ 0x4a032823, 0xffff0000, 0x4201d000, 0x00000064,
+ 0x0401fa0f, 0x4201d000, 0x000186a0, 0x0401f21e,
+ 0x00000000, 0x00000005, 0x0000000a, 0x0000000f,
+ 0x00000014, 0x4d300000, 0x4d2c0000, 0x4d340000,
+ 0x4d400000, 0x4cfc0000, 0x4d380000, 0x4d3c0000,
+ 0x4d440000, 0x4d4c0000, 0x4d480000, 0x4c5c0000,
+ 0x4c600000, 0x4c640000, 0x4d040000, 0x4cc80000,
+ 0x4ccc0000, 0x0201f800, 0x000208e0, 0x5c019800,
+ 0x5c019000, 0x5c020800, 0x5c00c800, 0x5c00c000,
+ 0x5c00b800, 0x5c029000, 0x5c029800, 0x5c028800,
+ 0x5c027800, 0x5c027000, 0x5c01f800, 0x5c028000,
+ 0x5c026800, 0x5c025800, 0x5c026000, 0x1c01f000,
+ 0x59940031, 0x59940832, 0x80040480, 0x48032832,
+ 0x04001002, 0x04020034, 0x59bc00e4, 0x8c000530,
+ 0x04000009, 0x4a030000, 0x00000000, 0x4803c856,
+ 0x4a0378e4, 0x02000000, 0x4a032832, 0x000004b0,
+ 0x0401f029, 0x42000800, 0x00000100, 0x80040840,
+ 0x040007f5, 0x0201f800, 0x0010c62d, 0x040007fc,
+ 0x0201f800, 0x001071b0, 0x4df00000, 0x4d180000,
+ 0x42023000, 0x00000005, 0x0201f800, 0x00100e71,
+ 0x5c023000, 0x0201f800, 0x00100668, 0x42000800,
+ 0x00007a00, 0x58040015, 0x82000500, 0xffff8fff,
+ 0x59a81088, 0x80080540, 0x48000815, 0x4a030000,
+ 0x00000000, 0x497b2832, 0x4a0378e4, 0x02800000,
+ 0x0201f800, 0x00100ed5, 0x5c03e000, 0x02000800,
+ 0x0010719d, 0x42000000, 0x0010d5d3, 0x0201f800,
+ 0x0010c50a, 0x1c01f000, 0x59940004, 0x80000540,
+ 0x04020007, 0x480b2805, 0x0401f823, 0x48032804,
+ 0x4a032803, 0x0000000a, 0x80000580, 0x1c01f000,
+ 0x59940029, 0x80000540, 0x0402000e, 0x5994002f,
+ 0x80040400, 0x02001800, 0x0010032f, 0x5994082e,
+ 0x80040400, 0x02001800, 0x0010032f, 0x48032829,
+ 0x480b282a, 0x4a032828, 0x00000001, 0x80000580,
+ 0x1c01f000, 0x40680800, 0x406c1000, 0x5994002c,
+ 0x80000540, 0x04020007, 0x480b282d, 0x0401f806,
+ 0x4803282c, 0x4a03282b, 0x0000000a, 0x80000580,
+ 0x1c01f000, 0x4c0c0000, 0x5994182f, 0x5994002e,
+ 0x800c0400, 0x02001800, 0x0010032f, 0x04000005,
+ 0x4c040000, 0x0201f800, 0x0010047e, 0x5c000800,
+ 0x80040400, 0x5c001800, 0x1c01f000, 0x4c000000,
+ 0x59940005, 0x80080580, 0x04020003, 0x497b2804,
+ 0x497b2805, 0x5c000000, 0x1c01f000, 0x40681000,
+ 0x0401fff7, 0x1c01f000, 0x4c000000, 0x5994002a,
+ 0x80080580, 0x04020003, 0x497b2829, 0x497b282a,
+ 0x5c000000, 0x1c01f000, 0x4c000000, 0x5994002d,
+ 0x80080580, 0x04020003, 0x497b282c, 0x497b282d,
+ 0x5c000000, 0x1c01f000, 0x4937c857, 0x48ebc857,
+ 0x59340203, 0x80e80480, 0x04001002, 0x48ea6a03,
+ 0x1c01f000, 0x4d440000, 0x42007800, 0x00000010,
+ 0x59968801, 0x0201f800, 0x00020353, 0x04020059,
+ 0x59341a03, 0x800c1840, 0x04001017, 0x59940031,
+ 0x800c0480, 0x04000003, 0x48026a03, 0x04021012,
+ 0x5934000f, 0x497a6a03, 0x80000540, 0x0400004d,
+ 0x5934000b, 0x80001120, 0x82000500, 0x0000ffff,
+ 0x80080480, 0x04001004, 0x4a026a03, 0x00000001,
+ 0x0401f005, 0x4c3c0000, 0x0201f800, 0x00020361,
+ 0x5c007800, 0x4d2c0000, 0x41781800, 0x5934000f,
+ 0x80025d40, 0x0400003a, 0x592c0004, 0x80000d40,
+ 0x04000006, 0x59940031, 0x80040480, 0x48025804,
+ 0x04001007, 0x04000006, 0x412c1800, 0x592c0000,
+ 0x80025d40, 0x0400002e, 0x0401f7f4, 0x592c2000,
+ 0x497a5800, 0x800c19c0, 0x04020009, 0x59340010,
+ 0x812c0580, 0x04020004, 0x497a680f, 0x497a6810,
+ 0x0401f008, 0x4812680f, 0x0401f006, 0x48101800,
+ 0x59340010, 0x812c0580, 0x04020002, 0x480e6810,
+ 0x592c0205, 0x82000500, 0x000000ff, 0x82000580,
+ 0x00000012, 0x04000004, 0x82000580, 0x00000060,
+ 0x04020004, 0x4a025a07, 0x0000000b, 0x0401f008,
+ 0x4a025a05, 0x00000103, 0x4a025a07, 0x00000006,
+ 0x497a580a, 0x4a025c07, 0x0000ffff, 0x4c0c0000,
+ 0x4c100000, 0x0201f800, 0x00020401, 0x5c002000,
+ 0x5c001800, 0x40100000, 0x0401f7d2, 0x5c025800,
+ 0x81468800, 0x83440480, 0x00000800, 0x04021007,
+ 0x803c7840, 0x040207a0, 0x49472801, 0x5c028800,
+ 0x5c03e000, 0x1c01f000, 0x4a032800, 0x00000002,
+ 0x497b2801, 0x0401f7fa, 0x42007800, 0x00000010,
+ 0x59966002, 0x59300205, 0x80000d40, 0x04000006,
+ 0x59940031, 0x80040480, 0x48026205, 0x0400102d,
+ 0x0400002c, 0x59300006, 0x80000d40, 0x04000014,
+ 0x59b800e4, 0x8c000524, 0x04020011, 0x4a0370e4,
+ 0x00030000, 0x40000000, 0x59b800e4, 0x8c000524,
+ 0x04000004, 0x4a0370e4, 0x00020000, 0x0401f008,
+ 0x59940031, 0x80040480, 0x48026006, 0x4a0370e4,
+ 0x00020000, 0x0400101c, 0x0400001b, 0x83326400,
+ 0x0000002c, 0x49332802, 0x41540000, 0x81300480,
+ 0x04021005, 0x803c7840, 0x040207db, 0x5c03e000,
+ 0x1c01f000, 0x59940030, 0x48032831, 0x4a032802,
+ 0x00111d44, 0x497b2830, 0x80000540, 0x0400000f,
+ 0x4a032800, 0x00000001, 0x5c03e000, 0x1c01f000,
+ 0x4c3c0000, 0x0201f800, 0x00109e41, 0x5c007800,
+ 0x0401f7d1, 0x4c3c0000, 0x0201f800, 0x00109959,
+ 0x5c007800, 0x0401f7e2, 0x4a032800, 0x00000000,
+ 0x5c03e000, 0x1c01f000, 0x59a80867, 0x8c040d30,
+ 0x04020029, 0x8c040d32, 0x0400000f, 0x59a80056,
+ 0x81640480, 0x04001019, 0x59a8000b, 0x81500580,
+ 0x04000005, 0x59a80054, 0x59a81053, 0x80080580,
+ 0x04020012, 0x900411c0, 0x82081500, 0x00007000,
+ 0x0401f012, 0x82040500, 0x0000001f, 0x04000016,
+ 0x80040840, 0x82040500, 0x0000001f, 0x04000003,
+ 0x48075067, 0x0401f010, 0x900401c0, 0x82000500,
+ 0x0000001f, 0x80040d40, 0x900401c0, 0x80040580,
+ 0x82001500, 0x00007000, 0x82040500, 0xffff8fff,
+ 0x80080540, 0x48035067, 0x80081114, 0x0201f800,
+ 0x0010046c, 0x1c01f000, 0x4a032807, 0x000007d0,
+ 0x4a032806, 0x0000000a, 0x1c01f000, 0x42000800,
+ 0x00000004, 0x83180480, 0x00000005, 0x02021800,
+ 0x0010032f, 0x83947c00, 0x00000009, 0x83180400,
+ 0x001067d8, 0x50000000, 0x803c7c00, 0x4a007801,
+ 0x000001f4, 0x48047802, 0x4a007800, 0x0000000a,
0x1c01f000, 0x83180480, 0x00000005, 0x02021800,
- 0x0010032e, 0x83947c00, 0x00000009, 0x83180400,
- 0x00106475, 0x50000000, 0x803c7c00, 0x583c0002,
+ 0x0010032f, 0x83947c00, 0x00000009, 0x83180400,
+ 0x001067d8, 0x50000000, 0x803c7c00, 0x583c0002,
0x80000040, 0x48007802, 0x04000005, 0x4a007801,
0x000001f4, 0x4a007800, 0x0000000a, 0x1c01f000,
- 0x83180480, 0x00000005, 0x02021800, 0x0010032e,
- 0x83947c00, 0x00000009, 0x83180400, 0x00106475,
+ 0x83180480, 0x00000005, 0x02021800, 0x0010032f,
+ 0x83947c00, 0x00000009, 0x83180400, 0x001067d8,
0x50000000, 0x803c7c00, 0x49787801, 0x1c01f000,
0x40680800, 0x406c1000, 0x0401f802, 0x1c01f000,
- 0x4807c857, 0x480bc857, 0x5994002f, 0x80040400,
- 0x02001800, 0x0010032e, 0x48032804, 0x480b2805,
- 0x4a032803, 0x0000000a, 0x1c01f000, 0x4807c857,
- 0x480bc857, 0x5994002f, 0x80040400, 0x02001800,
- 0x0010032e, 0x48032826, 0x480b2827, 0x4a032825,
- 0x0000000a, 0x1c01f000, 0x4c000000, 0x59940027,
- 0x80080580, 0x04020003, 0x48032826, 0x48032827,
- 0x5c000000, 0x1c01f000, 0x4807c857, 0x480bc857,
- 0x5994002f, 0x80040400, 0x02001800, 0x0010032e,
- 0x4803282c, 0x480b282d, 0x4a03282b, 0x0000000a,
- 0x1c01f000, 0x80e9d1c0, 0x0400000e, 0x0401f832,
- 0x04025000, 0x4203e000, 0x80000000, 0x40e81000,
- 0x41780800, 0x42000000, 0x00000064, 0x0201f800,
- 0x00106c9d, 0x5994002e, 0x80080400, 0x4803282e,
- 0x1c01f000, 0x42001000, 0x00105013, 0x0401fe8b,
- 0x42001000, 0x00105002, 0x0401ffd8, 0x42001000,
- 0x00104131, 0x0401fe85, 0x42001000, 0x001041b3,
- 0x0401fe82, 0x42001000, 0x0010410a, 0x0401fe7f,
- 0x42001000, 0x001041ea, 0x0401f68f, 0x4203e000,
+ 0x4807c857, 0x480bc857, 0x480b2805, 0x0401feb6,
+ 0x48032804, 0x4a032803, 0x0000000a, 0x1c01f000,
+ 0x4807c857, 0x480bc857, 0x480b2827, 0x0401feae,
+ 0x48032826, 0x4a032825, 0x0000000a, 0x1c01f000,
+ 0x4c000000, 0x59940027, 0x80080580, 0x04020003,
+ 0x48032826, 0x48032827, 0x5c000000, 0x1c01f000,
+ 0x4807c857, 0x480bc857, 0x480b282d, 0x0401fe9e,
+ 0x4803282c, 0x4a03282b, 0x0000000a, 0x1c01f000,
+ 0x80e9d1c0, 0x04000007, 0x0401f82b, 0x02004800,
+ 0x000209db, 0x040257fe, 0x4203e000, 0x80000000,
+ 0x1c01f000, 0x42001000, 0x001051c6, 0x0401fe9c,
+ 0x42001000, 0x001051b5, 0x0401ffe2, 0x42001000,
+ 0x0010421c, 0x0401fe96, 0x42001000, 0x0010429e,
+ 0x0401fe93, 0x42001000, 0x001041f5, 0x0401fe90,
+ 0x42001000, 0x001042d5, 0x0401f6a0, 0x4203e000,
0x70000000, 0x4203e000, 0xb0300000, 0x40ebf800,
0x42000000, 0x0000003c, 0x04004004, 0x80000040,
0x040207fe, 0x0401f007, 0x4203e000, 0x70000000,
- 0x42000000, 0x0010cf3e, 0x0201f800, 0x0010bfb3,
+ 0x42000000, 0x0010d559, 0x0201f800, 0x0010c50a,
0x1c01f000, 0x4203e000, 0x80000000, 0x4203e000,
0xb0400000, 0x40ebf800, 0x42000000, 0x0000003c,
0x04005004, 0x80000040, 0x040207fe, 0x0401f007,
- 0x4203e000, 0x80000000, 0x42000000, 0x0010cf3f,
- 0x0201f800, 0x0010bfb3, 0x1c01f000, 0x59a8080d,
- 0x59a80251, 0x80040480, 0x599c0a02, 0x800409c0,
+ 0x4203e000, 0x80000000, 0x42000000, 0x0010d55a,
+ 0x0201f800, 0x0010c50a, 0x1c01f000, 0x59a80813,
+ 0x59a80257, 0x80040480, 0x599c0a02, 0x800409c0,
0x04020002, 0x80040800, 0x80041480, 0x04001002,
- 0x40000800, 0x4807504f, 0x59a8100d, 0x40040000,
- 0x800acc80, 0x4967500d, 0x49675050, 0x59aaa80b,
+ 0x40000800, 0x48075055, 0x59a81013, 0x40040000,
+ 0x800acc80, 0x49675013, 0x49675056, 0x59aaa80b,
0x41640800, 0x42001000, 0x0000002c, 0x0201f800,
- 0x00106c7e, 0x8206a400, 0x00111584, 0x4953504c,
- 0x4152b000, 0x42006000, 0x0010e271, 0x4a006005,
+ 0x00106fe1, 0x8206a400, 0x00111d44, 0x49535052,
+ 0x4152b000, 0x42006000, 0x0010e88f, 0x4a006005,
0x0000012c, 0x4a006006, 0xda10da10, 0x4a006009,
- 0x00000012, 0x4a00600a, 0x0010e271, 0x4a00600b,
- 0x00100f06, 0x599c0014, 0x48006012, 0x599c0015,
- 0x48006013, 0x42006000, 0x001114d4, 0x4a006203,
+ 0x00000012, 0x4a00600a, 0x0010e88f, 0x4a00600b,
+ 0x00100f37, 0x599c0014, 0x48006012, 0x599c0015,
+ 0x48006013, 0x42006000, 0x00111c94, 0x4a006203,
0x00000008, 0x4a006407, 0x00000006, 0x4a006002,
- 0xffff0000, 0x4a006009, 0x0010e271, 0x4a006015,
- 0x0010e271, 0x599c0014, 0x48006016, 0x599c0015,
+ 0xffff0000, 0x4a006009, 0x0010e88f, 0x4a006015,
+ 0x0010e88f, 0x599c0014, 0x48006016, 0x599c0015,
0x48006017, 0x599c0413, 0x48006018, 0x49506019,
- 0x4954601a, 0x59a8004f, 0x4800601b, 0x4a00601c,
- 0x0010cacc, 0x4a00601d, 0x0010cacd, 0x4a00601e,
- 0x0010cace, 0x42000000, 0xb0000000, 0x42000800,
- 0x001114d4, 0x0201f800, 0x0002010e, 0x1c01f000,
+ 0x4954601a, 0x59a80055, 0x4800601b, 0x4a00601c,
+ 0x0010d0d2, 0x4a00601d, 0x0010d0d3, 0x4a00601e,
+ 0x0010d0d4, 0x42000000, 0xb0000000, 0x42000800,
+ 0x00111c94, 0x0201f800, 0x00020113, 0x1c01f000,
0x82000d00, 0x000000c0, 0x04000004, 0x82040d80,
0x000000c0, 0x04020055, 0x82000d00, 0x00002020,
0x59300415, 0x84000512, 0x82040d80, 0x00002020,
0x0400000b, 0x8c000514, 0x0402000f, 0x48026415,
- 0x813e79c0, 0x02020000, 0x00020ac9, 0x42027000,
- 0x00000043, 0x0201f000, 0x00020bc1, 0x5932680a,
+ 0x813e79c0, 0x02020000, 0x00020a24, 0x42027000,
+ 0x00000043, 0x0201f000, 0x00020b22, 0x5932680a,
0x59340a00, 0x8c040d0a, 0x040007f3, 0x84000552,
0x0401f7f1, 0x84000514, 0x592c080e, 0x48066016,
0x0401f7ef, 0x5932680a, 0x59340a00, 0x8c040d0a,
- 0x02000000, 0x00020adc, 0x59300c15, 0x84040d52,
- 0x48066415, 0x0201f000, 0x00020adc, 0x0201f800,
- 0x0002011a, 0x813e79c0, 0x02020000, 0x00020ac9,
- 0x0201f000, 0x00020af1, 0x8c00051e, 0x02000000,
- 0x00020afd, 0x82000d00, 0x00002020, 0x82040d80,
+ 0x02000000, 0x00020a37, 0x59300c15, 0x84040d52,
+ 0x48066415, 0x0201f000, 0x00020a37, 0x0201f800,
+ 0x0002011f, 0x813e79c0, 0x02020000, 0x00020a24,
+ 0x0201f000, 0x00020a4c, 0x8c00051e, 0x02000000,
+ 0x00020a58, 0x82000d00, 0x00002020, 0x82040d80,
0x00002020, 0x04000014, 0x82000500, 0x000000c0,
0x82000d80, 0x00000080, 0x04000008, 0x813e79c0,
- 0x02020000, 0x00020ac9, 0x42027000, 0x00000041,
- 0x0201f000, 0x00020bc1, 0x813e79c0, 0x02020000,
- 0x00020ac9, 0x42027000, 0x00000043, 0x0201f000,
- 0x00020bc1, 0x5932680a, 0x59340a00, 0x8c040d0a,
+ 0x02020000, 0x00020a24, 0x42027000, 0x00000041,
+ 0x0201f000, 0x00020b22, 0x813e79c0, 0x02020000,
+ 0x00020a24, 0x42027000, 0x00000043, 0x0201f000,
+ 0x00020b22, 0x5932680a, 0x59340a00, 0x8c040d0a,
0x040007ea, 0x59300c15, 0x84040d52, 0x48066415,
0x0401f7e6, 0x492fc857, 0x42000800, 0x00000006,
- 0x0201f000, 0x00020af8, 0x492fc857, 0x42000800,
- 0x00000004, 0x0201f000, 0x00020af8, 0x4807c856,
+ 0x0201f000, 0x00020a53, 0x492fc857, 0x42000800,
+ 0x00000004, 0x0201f000, 0x00020a53, 0x4807c856,
0x59240206, 0x800409c0, 0x04000003, 0x80080540,
0x0401f002, 0x80080500, 0x48024a06, 0x1c01f000,
0x4a030800, 0x00000000, 0x4a030802, 0x00000001,
@@ -21220,81 +6865,81 @@ static const uint32_t isp_2400_multi_risc_code[] = {
0x8c000500, 0x04000004, 0x84000500, 0x4a030800,
0x00000001, 0x84000544, 0x84000506, 0x48030802,
0x82000d00, 0x0fffffff, 0x42000000, 0x90000000,
- 0x0201f800, 0x001008c7, 0x59a80050, 0x82000480,
- 0x00000007, 0x48035050, 0x80000580, 0x42000800,
- 0x0010cb70, 0x48000800, 0x48000801, 0x1c01f000,
- 0x59a80050, 0x82000400, 0x00000007, 0x48035050,
+ 0x0201f800, 0x001008e8, 0x59a80056, 0x82000480,
+ 0x00000007, 0x48035056, 0x80000580, 0x42000800,
+ 0x0010d186, 0x48000800, 0x48000801, 0x1c01f000,
+ 0x59a80056, 0x82000400, 0x00000007, 0x48035056,
0x1c01f000, 0x83640480, 0x00000008, 0x0400101b,
0x58c80a03, 0x80000580, 0x82000400, 0x00000008,
0x80040840, 0x040207fd, 0x815c0480, 0x04001013,
- 0x4200b000, 0x00000007, 0x0201f800, 0x00020b7b,
+ 0x4200b000, 0x00000007, 0x0201f800, 0x00020adc,
0x4a026203, 0x00000004, 0x4a026407, 0x00000009,
0x4a026203, 0x00000004, 0x4a026008, 0x00000101,
0x0401f809, 0x0401f880, 0x8058b040, 0x040207f3,
0x80000580, 0x1c01f000, 0x82000540, 0x00000001,
- 0x0401f7fd, 0x0201f800, 0x00100583, 0x492e6009,
+ 0x0401f7fd, 0x0201f800, 0x00100599, 0x492e6009,
0x58c80a03, 0x4a025a05, 0x0000002c, 0x497a5800,
0x497a5801, 0x497a5c05, 0x497a5c07, 0x497a5806,
0x4a025a09, 0x00000005, 0x4a025a08, 0x00000002,
0x58c80201, 0x48025c05, 0x58c80202, 0x48025c08,
0x58c80204, 0x48025c09, 0x4a02580e, 0x0000ffff,
0x80040840, 0x0400000c, 0x412c2000, 0x0201f800,
- 0x00100583, 0x4a025a05, 0x0000000a, 0x497a5c05,
+ 0x00100599, 0x4a025a05, 0x0000000a, 0x497a5c05,
0x48125800, 0x492c2001, 0x412c2000, 0x80040840,
0x040207f7, 0x1c01f000, 0x4d7c0000, 0x4202f800,
0x00000010, 0x4df00000, 0x4203e000, 0x50000000,
0x59847803, 0x803c79c0, 0x0400001e, 0x4c5c0000,
0x583cb809, 0x585c3409, 0x801831c0, 0x0400000b,
- 0x0401f84a, 0x04000016, 0x42001000, 0x0010cb70,
- 0x0401f87f, 0x04000012, 0x0201f800, 0x0010056e,
+ 0x0401f84a, 0x04000016, 0x42001000, 0x0010d186,
+ 0x0401f87f, 0x04000012, 0x0201f800, 0x00100584,
0x0400000f, 0x492cb806, 0x585c0006, 0x80000540,
- 0x02000800, 0x0010032e, 0x0401f830, 0x585c5409,
+ 0x02000800, 0x0010032f, 0x0401f830, 0x585c5409,
0x0401f80b, 0x5c00b800, 0x5c03e000, 0x817ef840,
0x040207e1, 0x5c02f800, 0x1c01f000, 0x5c00b800,
0x5c03e000, 0x5c02f800, 0x1c01f000, 0x4803c856,
0x405c6000, 0x802851c0, 0x04000018, 0x585c0205,
- 0x82000d00, 0x0000000f, 0x82040c00, 0x00100f0b,
+ 0x82000d00, 0x0000000f, 0x82040c00, 0x00100f3c,
0x50044000, 0x4c600000, 0x4c640000, 0x4d040000,
0x4020c000, 0x40320800, 0x5984c804, 0x4c280000,
0x0401f93b, 0x5c005000, 0x40604000, 0x41046000,
- 0x0201f800, 0x00100ee9, 0x040207f6, 0x5c020800,
+ 0x0201f800, 0x00100f1a, 0x040207f6, 0x5c020800,
0x5c00c800, 0x5c00c000, 0x58c80204, 0x4800bc09,
- 0x0201f800, 0x0002011a, 0x4a026008, 0x00000101,
+ 0x0201f800, 0x0002011f, 0x4a026008, 0x00000101,
0x497a600a, 0x0401f055, 0x4803c856, 0x59840003,
0x80026540, 0x04000003, 0x59300000, 0x48030803,
0x1c01f000, 0x4803c856, 0x59840003, 0x48026000,
0x49330803, 0x1c01f000, 0x58cc0805, 0x40180000,
- 0x80040480, 0x0400100d, 0x82cc0580, 0x0010cb65,
- 0x02020800, 0x0010032e, 0x58c80205, 0x80040480,
+ 0x80040480, 0x0400100d, 0x82cc0580, 0x0010d17b,
+ 0x02020800, 0x0010032f, 0x58c80205, 0x80040480,
0x0400101d, 0x82000540, 0x00000001, 0x1c01f000,
- 0x80003580, 0x0401f7fe, 0x82cc0580, 0x0010cb65,
- 0x02020800, 0x0010032e, 0x58c80400, 0x8c000504,
+ 0x80003580, 0x0401f7fe, 0x82cc0580, 0x0010d17b,
+ 0x02020800, 0x0010032f, 0x58c80400, 0x8c000504,
0x040007f8, 0x58c8040b, 0x8c00051e, 0x040007f5,
0x8c000500, 0x040207f3, 0x84000540, 0x4801940b,
- 0x42000000, 0x0010cf05, 0x0201f800, 0x0010bfb3,
- 0x42001000, 0x00008026, 0x0201f800, 0x001039ac,
+ 0x42000000, 0x0010d51b, 0x0201f800, 0x0010c50a,
+ 0x42001000, 0x00008026, 0x0201f800, 0x00103a4e,
0x0401f7e8, 0x58c8040b, 0x8c00051e, 0x040007e2,
0x8c000502, 0x040207e0, 0x84000542, 0x4801940b,
- 0x42000000, 0x0010cf04, 0x0201f800, 0x0010bfb3,
+ 0x42000000, 0x0010d51a, 0x0201f800, 0x0010c50a,
0x42001000, 0x00008025, 0x42001800, 0x00000000,
- 0x0201f800, 0x001039ac, 0x0401f7d3, 0x4803c856,
+ 0x0201f800, 0x00103a4e, 0x0401f7d3, 0x4803c856,
0x58080000, 0x42001800, 0x00000007, 0x58080801,
0x80040480, 0x04020004, 0x400c0000, 0x80000540,
0x0401f005, 0x04001003, 0x800c0480, 0x0401f002,
0x80000080, 0x1c01f000, 0x4803c856, 0x59300009,
- 0x80000d40, 0x02000800, 0x0010032e, 0x58040006,
- 0x80000540, 0x02000800, 0x0010032e, 0x59300008,
+ 0x80000d40, 0x02000800, 0x0010032f, 0x58040006,
+ 0x80000540, 0x02000800, 0x0010032f, 0x59300008,
0x82000500, 0x00000101, 0x82000580, 0x00000101,
- 0x02020800, 0x0010032e, 0x42001000, 0x0010cb70,
- 0x58080801, 0x82040400, 0x0010cb72, 0x497a6415,
+ 0x02020800, 0x0010032f, 0x42001000, 0x0010d186,
+ 0x58080801, 0x82040400, 0x0010d188, 0x497a6415,
0x4a026016, 0x0000ffff, 0x45300000, 0x80040800,
0x82040480, 0x00000008, 0x04001002, 0x80000d80,
- 0x48041001, 0x82040400, 0x0010cb72, 0x45780000,
+ 0x48041001, 0x82040400, 0x0010d188, 0x45780000,
0x1c01f000, 0x4933c857, 0x59300809, 0x800409c0,
- 0x02000800, 0x0010032e, 0x4d2c0000, 0x58065806,
- 0x812e59c0, 0x02020800, 0x00100594, 0x49780806,
- 0x40065800, 0x0201f800, 0x0010059d, 0x5c025800,
- 0x4d300000, 0x0201f800, 0x00020b9d, 0x5c026000,
+ 0x02000800, 0x0010032f, 0x4d2c0000, 0x58065806,
+ 0x812e59c0, 0x02020800, 0x001005aa, 0x49780806,
+ 0x40065800, 0x0201f800, 0x001005b3, 0x5c025800,
+ 0x4d300000, 0x0201f800, 0x00020afe, 0x5c026000,
0x1c01f000, 0x0401f807, 0x42018800, 0x00000001,
0x04000003, 0x42018800, 0x00000000, 0x1c01f000,
0x59300407, 0x82000580, 0x00000009, 0x04020006,
@@ -21303,7 +6948,7 @@ static const uint32_t isp_2400_multi_risc_code[] = {
0x59840802, 0x8c040d04, 0x1c01f000, 0x4803c856,
0x59840802, 0x84040d04, 0x84040d40, 0x4a030800,
0x00000000, 0x48070802, 0x82040d00, 0x0fffffff,
- 0x42000000, 0x90000000, 0x0201f000, 0x001008c7,
+ 0x42000000, 0x90000000, 0x0201f000, 0x001008e8,
0x4807c857, 0x4805980a, 0x49799801, 0x49799803,
0x49799806, 0x49799807, 0x49799808, 0x49799805,
0x49799809, 0x0401f8c8, 0x0400000a, 0x0401f8ea,
@@ -21321,8 +6966,8 @@ static const uint32_t isp_2400_multi_risc_code[] = {
0x0401f7df, 0x80000580, 0x1c01f000, 0x82000540,
0x00000001, 0x1c01f000, 0x480bc857, 0x4c500000,
0x4c540000, 0x4c580000, 0x40083000, 0x58cc0801,
- 0x82040480, 0x00000006, 0x02021800, 0x0010032e,
- 0x82040400, 0x001069e6, 0x50000000, 0x58cca800,
+ 0x82040480, 0x00000006, 0x02021800, 0x0010032f,
+ 0x82040400, 0x00106d46, 0x50000000, 0x58cca800,
0x8054ac00, 0x42001800, 0x00000006, 0x40040000,
0x800c0480, 0x80082480, 0x04021002, 0x40080000,
0x8000b0c2, 0x8058b400, 0x5450a800, 0x8050a000,
@@ -21333,16 +6978,16 @@ static const uint32_t isp_2400_multi_risc_code[] = {
0x48119801, 0x40080000, 0x80181480, 0x40083000,
0x04000003, 0x040217d6, 0x80000580, 0x5c00b000,
0x5c00a800, 0x5c00a000, 0x1c01f000, 0x58cc0800,
- 0x800409c0, 0x02000800, 0x0010032e, 0x58040800,
+ 0x800409c0, 0x02000800, 0x0010032f, 0x58040800,
0x48059800, 0x41782000, 0x0401f7ee, 0x0401f812,
0x50600000, 0x81041c00, 0x585c0205, 0x4803c857,
- 0x82000580, 0x0000002c, 0x02020800, 0x0010032e,
+ 0x82000580, 0x0000002c, 0x02020800, 0x0010032f,
0x58040202, 0x800000e0, 0x80640540, 0x48001802,
0x58040000, 0x48001800, 0x58040001, 0x48001801,
0x1c01f000, 0x4807c856, 0x58cc0005, 0x80000040,
- 0x02001800, 0x0010032e, 0x48019805, 0x58cc1003,
- 0x82080480, 0x00000006, 0x02021800, 0x0010032e,
- 0x82080400, 0x001069e6, 0x50000000, 0x58cc0802,
+ 0x02001800, 0x0010032f, 0x48019805, 0x58cc1003,
+ 0x82080480, 0x00000006, 0x02021800, 0x0010032f,
+ 0x82080400, 0x00106d46, 0x50000000, 0x58cc0802,
0x80040c00, 0x80081000, 0x82080480, 0x00000006,
0x0402000f, 0x58cc2002, 0x58100000, 0x80006d40,
0x04000009, 0x4c340000, 0x0401f858, 0x5c006800,
@@ -21357,30 +7002,30 @@ static const uint32_t isp_2400_multi_risc_code[] = {
0x04000007, 0x04001006, 0x80102000, 0x82000480,
0x00000005, 0x04000002, 0x040217fc, 0x48119203,
0x1c01f000, 0x4807c856, 0x4d2c0000, 0x58cc000a,
- 0x80000540, 0x02000800, 0x0010032e, 0x82002400,
- 0x00000006, 0x0201f800, 0x0010056e, 0x04000012,
+ 0x80000540, 0x02000800, 0x0010032f, 0x82002400,
+ 0x00000006, 0x0201f800, 0x00100584, 0x04000012,
0x492d9809, 0x497a5800, 0x497a5801, 0x0201f800,
- 0x0010056e, 0x0400000c, 0x58cc0009, 0x48025800,
+ 0x00100584, 0x0400000c, 0x58cc0009, 0x48025800,
0x497a5801, 0x492d9809, 0x82102480, 0x00000006,
0x040217f7, 0x82000540, 0x00000001, 0x5c025800,
0x1c01f000, 0x58cc0009, 0x80025d40, 0x040007fc,
- 0x592c2000, 0x0201f800, 0x00100594, 0x40100000,
+ 0x592c2000, 0x0201f800, 0x001005aa, 0x40100000,
0x0401f7fa, 0x58cc0009, 0x48cfc857, 0x80006d40,
0x04000005, 0x50340000, 0x48019809, 0x49786800,
0x49786801, 0x1c01f000, 0x4813c857, 0x58cc0009,
0x48002000, 0x48119809, 0x1c01f000, 0x4807c856,
0x4d2c0000, 0x58cc0009, 0x80025d40, 0x04000007,
- 0x592c0000, 0x4c000000, 0x0201f800, 0x00100594,
+ 0x592c0000, 0x4c000000, 0x0201f800, 0x001005aa,
0x5c000000, 0x0401f7f9, 0x5c025800, 0x1c01f000,
0x4807c856, 0x4d2c0000, 0x58cc0002, 0x80025d40,
0x04000007, 0x592c0000, 0x4c000000, 0x0201f800,
- 0x00100594, 0x5c000000, 0x0401f7f9, 0x49799800,
+ 0x001005aa, 0x5c000000, 0x0401f7f9, 0x49799800,
0x49799802, 0x49799801, 0x49799803, 0x49799806,
0x49799807, 0x49799808, 0x49799809, 0x4979980a,
0x5c025800, 0x1c01f000, 0x00000003, 0x00000006,
0x00000009, 0x0000000c, 0x0000000f, 0x00000012,
0x4803c856, 0x0401f858, 0x4a00c205, 0x0000003c,
- 0x5930100a, 0x82080580, 0x0010cb7b, 0x04000013,
+ 0x5930100a, 0x82080580, 0x0010d191, 0x04000013,
0x58080802, 0x82040d00, 0x00ffffff, 0x58080403,
0x4804c006, 0x4800c407, 0x4a00c208, 0x00000003,
0x59300812, 0x585c0405, 0x4978c207, 0x4804c408,
@@ -21389,18 +7034,18 @@ static const uint32_t isp_2400_multi_risc_code[] = {
0x00ffffff, 0x4804c006, 0x4a00c407, 0x000007ff,
0x4978c208, 0x0401f7ef, 0x82603c00, 0x00000009,
0x58605405, 0x40282000, 0x405c6000, 0x585c0a05,
- 0x82040d00, 0x0000000f, 0x82040c00, 0x00100f0b,
+ 0x82040d00, 0x0000000f, 0x82040c00, 0x00100f3c,
0x50044000, 0x80004d80, 0x50200000, 0x80307400,
0x58380402, 0x8c244d00, 0x04020003, 0x48003a00,
0x0401f003, 0x48003c00, 0x801c3800, 0x80244800,
- 0x80102040, 0x04000006, 0x0201f800, 0x00100ee9,
- 0x02000800, 0x0010032e, 0x0401f7f0, 0x1c01f000,
+ 0x80102040, 0x04000006, 0x0201f800, 0x00100f1a,
+ 0x02000800, 0x0010032f, 0x0401f7f0, 0x1c01f000,
0x4803c856, 0x4d340000, 0x5930000a, 0x80026d40,
- 0x02000800, 0x0010032e, 0x59340212, 0x82000500,
+ 0x02000800, 0x0010032f, 0x59340212, 0x82000500,
0x0000ff00, 0x0402000e, 0x59840000, 0x80000540,
0x0400000b, 0x836c0580, 0x00000003, 0x04020008,
0x59341c03, 0x42002000, 0x00000004, 0x42003000,
- 0x00000004, 0x0201f800, 0x00103a21, 0x5c026800,
+ 0x00000004, 0x0201f800, 0x00103ac1, 0x5c026800,
0x1c01f000, 0x4803c856, 0x80001580, 0x58c80c01,
0x59300012, 0x80040c80, 0x48066012, 0x58c80201,
0x80000540, 0x04000005, 0x80081000, 0x80040c80,
@@ -21412,13 +7057,13 @@ static const uint32_t isp_2400_multi_risc_code[] = {
0x59b800e5, 0x8c000524, 0x040207f5, 0x5934000e,
0x80006d40, 0x04000010, 0x81300580, 0x04020004,
0x58340000, 0x4802680e, 0x0401f00a, 0x40347800,
- 0x58340000, 0x80006d40, 0x02000800, 0x0010032e,
+ 0x58340000, 0x80006d40, 0x02000800, 0x0010032f,
0x81300580, 0x040207fa, 0x58340000, 0x48007800,
0x497a6000, 0x4a0370e5, 0x00020000, 0x1c01f000,
0x4803c856, 0x4d300000, 0x4d2c0000, 0x42000800,
0x000003ff, 0x4a0370e5, 0x00020000, 0x59b800e5,
0x8c000524, 0x04000005, 0x80040840, 0x040207fa,
- 0x0201f800, 0x0010032e, 0x4a0370e5, 0x00030000,
+ 0x0201f800, 0x0010032f, 0x4a0370e5, 0x00030000,
0x40000000, 0x40000000, 0x59b800e5, 0x8c000524,
0x040207f1, 0x5934000e, 0x80026540, 0x0400000e,
0x4933c857, 0x59300000, 0x4802680e, 0x4a026203,
@@ -21426,25 +7071,25 @@ static const uint32_t isp_2400_multi_risc_code[] = {
0x00000101, 0x59325809, 0x497a5c09, 0x0401fd7a,
0x0401f7f1, 0x4a0370e5, 0x00020000, 0x5c025800,
0x5c026000, 0x1c01f000, 0x4803c856, 0x4c000000,
- 0x0201f800, 0x00106134, 0x04020011, 0x0201f800,
- 0x00104628, 0x02020800, 0x0010032e, 0x5c000000,
- 0x48026802, 0x0201f800, 0x00107ef8, 0x04000009,
+ 0x0201f800, 0x00106463, 0x04020011, 0x0201f800,
+ 0x00104774, 0x02020800, 0x0010032f, 0x5c000000,
+ 0x48026802, 0x0201f800, 0x00108297, 0x04000009,
0x4936600a, 0x4a026407, 0x00000001, 0x42027000,
- 0x00000001, 0x0201f000, 0x00020bc1, 0x5c000000,
+ 0x00000001, 0x0201f000, 0x00020b22, 0x5c000000,
0x1c01f000, 0x59300203, 0x82000c80, 0x0000000e,
- 0x02021800, 0x0010032e, 0x4803c857, 0x0c01f001,
- 0x00106ad2, 0x00106ad2, 0x00106ad2, 0x00106ad4,
- 0x00106b41, 0x00106ad2, 0x00106ad2, 0x00106b93,
- 0x00106b94, 0x00106ad2, 0x00106ad2, 0x00106ad2,
- 0x00106ad2, 0x00106ad2, 0x0201f800, 0x0010032e,
+ 0x02021800, 0x0010032f, 0x4803c857, 0x0c01f001,
+ 0x00106e32, 0x00106e32, 0x00106e32, 0x00106e34,
+ 0x00106ea1, 0x00106e32, 0x00106e32, 0x00106ef3,
+ 0x00106ef4, 0x00106e32, 0x00106e32, 0x00106e32,
+ 0x00106e32, 0x00106e32, 0x0201f800, 0x0010032f,
0x493bc857, 0x83380480, 0x00000050, 0x02021800,
- 0x0010032e, 0x83380480, 0x00000049, 0x02001800,
- 0x0010032e, 0x0c01f001, 0x00106ae7, 0x00106b18,
- 0x00106ae5, 0x00106ae5, 0x00106ae5, 0x00106ae5,
- 0x00106b26, 0x0201f800, 0x0010032e, 0x4d2c0000,
+ 0x0010032f, 0x83380480, 0x00000049, 0x02001800,
+ 0x0010032f, 0x0c01f001, 0x00106e47, 0x00106e78,
+ 0x00106e45, 0x00106e45, 0x00106e45, 0x00106e45,
+ 0x00106e86, 0x0201f800, 0x0010032f, 0x4d2c0000,
0x59325809, 0x592c0207, 0x48025c07, 0x4a025a07,
0x00000000, 0x4c5c0000, 0x592cbc0b, 0x592c0000,
- 0x48026009, 0x0201f800, 0x000203ef, 0x59300c15,
+ 0x48026009, 0x0201f800, 0x00020401, 0x59300c15,
0x59300009, 0x80000540, 0x0400000b, 0x8c040d18,
0x04020014, 0x4a026203, 0x00000007, 0x42027000,
0x00000043, 0x497a6415, 0x5c00b800, 0x5c025800,
@@ -21452,1924 +7097,1914 @@ static const uint32_t isp_2400_multi_risc_code[] = {
0x04020011, 0x4a026203, 0x00000007, 0x497a6415,
0x497a6006, 0x5c00b800, 0x5c025800, 0x1c01f000,
0x4d400000, 0x59325809, 0x42028000, 0x00000005,
- 0x0401f922, 0x5c028000, 0x0201f800, 0x00107eb4,
- 0x0401f7f5, 0x0201f800, 0x00020b9d, 0x0401f7f2,
- 0x0401fa59, 0x4d2c0000, 0x59325809, 0x0201f800,
- 0x0010989f, 0x04000006, 0x4d400000, 0x42028000,
- 0x00000001, 0x0401f911, 0x5c028000, 0x5c025800,
- 0x0201f000, 0x00020b9d, 0x0401fa4b, 0x4d3c0000,
- 0x417a7800, 0x0201f800, 0x0010ff80, 0x5c027800,
- 0x42003000, 0x00000014, 0x0201f800, 0x0010b73d,
- 0x42000000, 0x0010cf23, 0x0201f800, 0x0010bfb3,
- 0x4d2c0000, 0x59325809, 0x0201f800, 0x0010989f,
+ 0x0401f925, 0x5c028000, 0x0201f800, 0x00108253,
+ 0x0401f7f5, 0x0201f800, 0x00020afe, 0x0401f7f2,
+ 0x0401fa64, 0x4d2c0000, 0x59325809, 0x0201f800,
+ 0x00109c4d, 0x04000006, 0x4d400000, 0x42028000,
+ 0x00000001, 0x0401f914, 0x5c028000, 0x5c025800,
+ 0x0201f000, 0x00020afe, 0x0401fa56, 0x4d3c0000,
+ 0x417a7800, 0x0201f800, 0x00110684, 0x5c027800,
+ 0x42003000, 0x00000014, 0x0201f800, 0x0010bc92,
+ 0x42000000, 0x0010d53e, 0x0201f800, 0x0010c50a,
+ 0x4d2c0000, 0x59325809, 0x0201f800, 0x00109c4d,
0x04000006, 0x4d400000, 0x42028000, 0x00000029,
- 0x0401f8f6, 0x5c028000, 0x5c025800, 0x0201f000,
- 0x00020b9d, 0x493bc857, 0x497a6006, 0x83380480,
- 0x00000054, 0x02021800, 0x0010032e, 0x83380480,
- 0x00000047, 0x02001800, 0x0010032e, 0x0c01f001,
- 0x00106b92, 0x00106b5b, 0x00106b59, 0x00106b59,
- 0x00106b59, 0x00106b59, 0x00106b59, 0x00106b59,
- 0x00106b59, 0x00106b59, 0x00106b59, 0x00106b59,
- 0x00106b5f, 0x0201f800, 0x0010032e, 0x59300012,
+ 0x0401f8f9, 0x5c028000, 0x5c025800, 0x0201f000,
+ 0x00020afe, 0x493bc857, 0x497a6006, 0x83380480,
+ 0x00000054, 0x02021800, 0x0010032f, 0x83380480,
+ 0x00000047, 0x02001800, 0x0010032f, 0x0c01f001,
+ 0x00106ef2, 0x00106ebb, 0x00106eb9, 0x00106eb9,
+ 0x00106eb9, 0x00106eb9, 0x00106eb9, 0x00106eb9,
+ 0x00106eb9, 0x00106eb9, 0x00106eb9, 0x00106eb9,
+ 0x00106ebf, 0x0201f800, 0x0010032f, 0x59300012,
0x82000500, 0xffff0000, 0x04020034, 0x59840802,
0x8c040d04, 0x04000025, 0x5930000a, 0x80026d40,
0x0400001f, 0x4c5c0000, 0x4c600000, 0x497a6006,
0x5930b809, 0x585c0006, 0x8000c540, 0x02000800,
- 0x0010032e, 0x0401fe7f, 0x40625800, 0x0201f800,
- 0x000203f3, 0x4978b806, 0x0401fee8, 0x497a600a,
+ 0x0010032f, 0x0401fe7f, 0x40625800, 0x0201f800,
+ 0x00020405, 0x4978b806, 0x0401fee8, 0x497a600a,
0x585c3409, 0x0401fca9, 0x0400000e, 0x42001000,
- 0x0010cb70, 0x0401fcde, 0x0400000a, 0x0201f800,
- 0x00100583, 0x04000007, 0x492cb806, 0x585c5409,
+ 0x0010d186, 0x0401fcde, 0x0400000a, 0x0201f800,
+ 0x00100599, 0x04000007, 0x492cb806, 0x585c5409,
0x0401fc6f, 0x5c00c000, 0x5c00b800, 0x1c01f000,
0x0401fc95, 0x0401f7fc, 0x8c040d06, 0x040207fc,
0x5930000a, 0x80026d40, 0x04000006, 0x5934000e,
- 0x80000540, 0x02020800, 0x0010032e, 0x497a600a,
- 0x0401fcf9, 0x0401f7f2, 0x0401f088, 0x4803c856,
+ 0x80000540, 0x02020800, 0x0010032f, 0x497a600a,
+ 0x0401fcf9, 0x0401f7f2, 0x0401f08b, 0x4803c856,
0x4803c856, 0x83380580, 0x00000043, 0x02020800,
- 0x0010032e, 0x4a026203, 0x00000003, 0x493a6403,
+ 0x0010032f, 0x4a026203, 0x00000003, 0x493a6403,
0x59325809, 0x592c0010, 0x48026012, 0x497a6014,
0x592c0407, 0x800000c2, 0x800010c4, 0x80081400,
- 0x480a6006, 0x0201f800, 0x00020168, 0x42000800,
- 0x80000060, 0x0201f000, 0x00020b30, 0x42000000,
- 0x0010cf35, 0x0201f800, 0x0010bfb3, 0x59300203,
- 0x82000c80, 0x0000000e, 0x02021800, 0x0010032e,
+ 0x480a6006, 0x0201f800, 0x0002016d, 0x42000800,
+ 0x80000060, 0x0201f000, 0x00020a8e, 0x42000000,
+ 0x0010d550, 0x0201f800, 0x0010c50a, 0x59300203,
+ 0x82000c80, 0x0000000e, 0x02021800, 0x0010032f,
0x4803c857, 0x82000d80, 0x00000003, 0x04000006,
- 0x82000d80, 0x00000004, 0x0400005d, 0x0201f800,
- 0x0010032e, 0x4d400000, 0x42028000, 0x00000006,
+ 0x82000d80, 0x00000004, 0x04000060, 0x0201f800,
+ 0x0010032f, 0x4d400000, 0x42028000, 0x00000006,
0x0401f82d, 0x5c028000, 0x1c01f000, 0x4803c856,
0x59300203, 0x82000c80, 0x0000000e, 0x02021800,
- 0x0010032e, 0x82000d80, 0x00000002, 0x0400000f,
+ 0x0010032f, 0x82000d80, 0x00000002, 0x0400000f,
0x82000d80, 0x00000003, 0x04000006, 0x82000d80,
- 0x00000004, 0x04000046, 0x0201f800, 0x0010032e,
+ 0x00000004, 0x04000049, 0x0201f800, 0x0010032f,
0x4d400000, 0x42028000, 0x00000005, 0x0401f816,
0x5c028000, 0x1c01f000, 0x4933c857, 0x4d2c0000,
- 0x59325809, 0x812e59c0, 0x02000800, 0x0010032e,
- 0x592c1a09, 0x8c0c1d0e, 0x02000800, 0x0010032e,
- 0x4d400000, 0x42028000, 0x00000001, 0x0401f84b,
- 0x0201f800, 0x00107eb4, 0x5c028000, 0x5c025800,
- 0x1c01f000, 0x4933c857, 0x4943c857, 0x0401fa52,
- 0x4df00000, 0x59300004, 0x8c00053e, 0x04020006,
- 0x0201f800, 0x00107226, 0x02020800, 0x0010032e,
- 0x0401f01b, 0x0201f800, 0x00109552, 0x04020007,
+ 0x59325809, 0x812e59c0, 0x02000800, 0x0010032f,
+ 0x592c1a09, 0x8c0c1d0e, 0x02000800, 0x0010032f,
+ 0x4d400000, 0x42028000, 0x00000001, 0x0401f84e,
+ 0x0201f800, 0x00108253, 0x5c028000, 0x5c025800,
+ 0x1c01f000, 0x4933c857, 0x4943c857, 0x0401fa61,
+ 0x4df00000, 0x59300004, 0x8c00053e, 0x04020009,
0x59300415, 0x84000558, 0x48026415, 0x0201f800,
- 0x0010712a, 0x04020012, 0x0201f800, 0x00110065,
- 0x80c40040, 0x04000005, 0x0401f946, 0x02020800,
- 0x0010032e, 0x0401f00a, 0x59325809, 0x0401f827,
- 0x0201f800, 0x00107eb4, 0x5c03e000, 0x04000a1f,
- 0x82000540, 0x00000001, 0x1c01f000, 0x5c03e000,
- 0x04000a1a, 0x80000580, 0x1c01f000, 0x4933c857,
- 0x0201f800, 0x00100c76, 0x4933c857, 0x4c5c0000,
- 0x4d340000, 0x497a6006, 0x5930b809, 0x5930000a,
- 0x80026d40, 0x04020e39, 0x42001000, 0x0010cb70,
- 0x0401fc33, 0x04000009, 0x58c80204, 0x4800bc09,
- 0x41785000, 0x0201f800, 0x001067ef, 0x5c026800,
- 0x5c00b800, 0x1c01f000, 0x4978bc09, 0x0201f800,
- 0x00106819, 0x0401f7fa, 0x4803c856, 0x0201f800,
- 0x0010989f, 0x0400000f, 0x592c0000, 0x80000d40,
- 0x04000009, 0x497a5800, 0x49425a07, 0x4c040000,
- 0x0201f800, 0x000203ef, 0x5c000800, 0x40065800,
- 0x0401f7f6, 0x49425a07, 0x0201f800, 0x000203ef,
- 0x1c01f000, 0x0401f807, 0x42018800, 0x00000001,
- 0x04000003, 0x42018800, 0x00000000, 0x1c01f000,
- 0x4933c857, 0x59300c07, 0x82040580, 0x0000000e,
- 0x04000004, 0x82040580, 0x00000009, 0x04020004,
- 0x0401ffde, 0x497a6009, 0x80000580, 0x1c01f000,
- 0x592e600a, 0x83300480, 0x00111584, 0x04001016,
- 0x41580000, 0x81300480, 0x04021013, 0x40040000,
- 0x59300c07, 0x80040580, 0x04020012, 0x59300a03,
- 0x82040580, 0x00000007, 0x02020800, 0x0010032e,
- 0x59300009, 0x80000540, 0x02020800, 0x0010032e,
- 0x0201f800, 0x00020b9d, 0x42000000, 0x00000000,
- 0x0401f009, 0x42000000, 0x00000008, 0x0401f006,
- 0x82040580, 0x00000007, 0x040207fb, 0x42000000,
- 0x00000005, 0x592c0a07, 0x48065c07, 0x48025a07,
- 0x0201f000, 0x000203ef, 0x4c0c0000, 0x4c100000,
- 0x4c140000, 0x4c180000, 0x80001d80, 0x80002580,
- 0x42003000, 0x00000020, 0x82040500, 0x00000001,
- 0x04000003, 0x40080000, 0x800c1c00, 0x400c2800,
- 0x800c1902, 0x80102102, 0x82140500, 0x00000001,
- 0x04000003, 0x82102540, 0x80000000, 0x80040902,
- 0x80183040, 0x040207f1, 0x40100800, 0x400c0000,
- 0x5c003000, 0x5c002800, 0x5c002000, 0x5c001800,
- 0x1c01f000, 0x4c580000, 0x4200b000, 0x00000020,
- 0x80000540, 0x04000018, 0x80041c80, 0x04021016,
+ 0x00107595, 0x02020800, 0x0010032f, 0x0401f01b,
+ 0x0201f800, 0x001098d2, 0x04020007, 0x59300415,
+ 0x84000558, 0x48026415, 0x0201f800, 0x00107499,
+ 0x04020012, 0x0201f800, 0x00110766, 0x80c40040,
+ 0x04000005, 0x0401f946, 0x02020800, 0x0010032f,
+ 0x0401f00a, 0x59325809, 0x0401f827, 0x0201f800,
+ 0x00108253, 0x5c03e000, 0x04000a2b, 0x82000540,
+ 0x00000001, 0x1c01f000, 0x5c03e000, 0x04000a26,
+ 0x80000580, 0x1c01f000, 0x4933c857, 0x0201f800,
+ 0x00100c9b, 0x4933c857, 0x4c5c0000, 0x4d340000,
+ 0x497a6006, 0x5930b809, 0x5930000a, 0x80026d40,
+ 0x04020e36, 0x42001000, 0x0010d186, 0x0401fc30,
+ 0x04000009, 0x58c80204, 0x4800bc09, 0x41785000,
+ 0x0201f800, 0x00106b4f, 0x5c026800, 0x5c00b800,
+ 0x1c01f000, 0x4978bc09, 0x0201f800, 0x00106b79,
+ 0x0401f7fa, 0x4803c856, 0x0201f800, 0x00109c4d,
+ 0x0400000f, 0x592c0000, 0x80000d40, 0x04000009,
+ 0x497a5800, 0x49425a07, 0x4c040000, 0x0201f800,
+ 0x00020401, 0x5c000800, 0x40065800, 0x0401f7f6,
+ 0x49425a07, 0x0201f800, 0x00020401, 0x1c01f000,
+ 0x0401f807, 0x42018800, 0x00000001, 0x04000003,
+ 0x42018800, 0x00000000, 0x1c01f000, 0x4933c857,
+ 0x59300c07, 0x82040580, 0x0000000e, 0x04000004,
+ 0x82040580, 0x00000009, 0x04020004, 0x0401ffde,
+ 0x497a6009, 0x80000580, 0x1c01f000, 0x592e600a,
+ 0x83300480, 0x00111d44, 0x04001016, 0x41580000,
+ 0x81300480, 0x04021013, 0x40040000, 0x59300c07,
+ 0x80040580, 0x04020012, 0x59300a03, 0x82040580,
+ 0x00000007, 0x02020800, 0x0010032f, 0x59300009,
+ 0x80000540, 0x02020800, 0x0010032f, 0x0201f800,
+ 0x00020afe, 0x42000000, 0x00000000, 0x0401f009,
+ 0x42000000, 0x00000008, 0x0401f006, 0x82040580,
+ 0x00000007, 0x040207fb, 0x42000000, 0x00000005,
+ 0x592c0a07, 0x48065c07, 0x48025a07, 0x0201f000,
+ 0x00020401, 0x4c0c0000, 0x4c100000, 0x4c140000,
+ 0x4c180000, 0x80001d80, 0x80002580, 0x42003000,
+ 0x00000020, 0x82040500, 0x00000001, 0x04000003,
+ 0x40080000, 0x800c1c00, 0x400c2800, 0x800c1902,
+ 0x80102102, 0x82140500, 0x00000001, 0x04000003,
+ 0x82102540, 0x80000000, 0x80040902, 0x80183040,
+ 0x040207f1, 0x40100800, 0x400c0000, 0x5c003000,
+ 0x5c002800, 0x5c002000, 0x5c001800, 0x1c01f000,
+ 0x4c0c0000, 0x4c580000, 0x4200b000, 0x00000020,
+ 0x80000540, 0x04000019, 0x80041c80, 0x04021017,
0x800810c2, 0x80040982, 0x04001006, 0x80041c80,
0x04021005, 0x8058b040, 0x040207fa, 0x0401f006,
0x80041c80, 0x400c0800, 0x80081000, 0x8058b040,
0x040207f4, 0x4c000000, 0x41f00000, 0x82000500,
0xf7ffffff, 0x4003e000, 0x5c000000, 0x5c00b000,
- 0x1c01f000, 0x4c000000, 0x41f00000, 0x82000540,
- 0x08000000, 0x0401f7f8, 0x42007000, 0x0010cb9b,
- 0x4a007000, 0x00000005, 0x4a007401, 0x00000000,
- 0x4a007201, 0x00000840, 0x4a007202, 0x00000005,
- 0x4a0378e8, 0x00000000, 0x4a03c821, 0x00000010,
- 0x4a03c823, 0x00000004, 0x0401f81e, 0x4a0378e9,
- 0x00003a0d, 0x4a0378e8, 0x00000001, 0x41780800,
- 0x4203a000, 0x00007600, 0x4a03a005, 0xd0000001,
- 0x59d00006, 0x4a03a005, 0x90000001, 0x83d3a400,
- 0x00000020, 0x80040800, 0x82040480, 0x00000005,
- 0x040017f8, 0x59e00003, 0x82000500, 0xffffffe0,
- 0x82000540, 0x00008000, 0x4803c003, 0x59c40006,
- 0x82000500, 0xfffcffff, 0x48038806, 0x1c01f000,
- 0x4d900000, 0x4d180000, 0x4a0378e7, 0xaaaaaaaa,
- 0x4a0378e6, 0xaaaaaaaa, 0x4a0378e5, 0xaaaaaaaa,
- 0x4a0378e4, 0xaaaaaaaa, 0x4a03781a, 0x0010ce2e,
- 0x4a03781b, 0x00100f0b, 0x4a03781c, 0x00100f1b,
- 0x4a031800, 0x00000000, 0x4a031801, 0x0010cb9e,
- 0x4a031802, 0x0010cba5, 0x42000800, 0x0010ce31,
- 0x417a3000, 0x811b20c8, 0x83932400, 0x0000bf32,
- 0x48072000, 0x4a032001, 0x00000000, 0x83180400,
- 0x00107508, 0x50000000, 0x48032002, 0x82040c00,
- 0x00000005, 0x811a3000, 0x83180480, 0x00000005,
- 0x040017f1, 0x5c023000, 0x5c032000, 0x1c01f000,
- 0x40680800, 0x0201f800, 0x00020b3e, 0x1c01f000,
- 0x4933c857, 0x59300804, 0x82040d00, 0x00000100,
- 0x82040d40, 0x80000040, 0x48066004, 0x497a6000,
- 0x59bc00ea, 0x8c000516, 0x040207fe, 0x83300400,
- 0x60000000, 0x480378e1, 0x1c01f000, 0x598c000f,
- 0x81300580, 0x04000003, 0x497a6008, 0x1c01f000,
- 0x59c40004, 0x82000500, 0x0000000c, 0x04000005,
- 0x4a038804, 0x0000000c, 0x497b2807, 0x0401f00a,
- 0x0401fba6, 0x59300403, 0x82000d80, 0x00000040,
- 0x04000004, 0x82000580, 0x00000042, 0x04020002,
- 0x497a6008, 0x0201f800, 0x001074ce, 0x80000580,
+ 0x5c001800, 0x1c01f000, 0x4c000000, 0x41f00000,
+ 0x82000540, 0x08000000, 0x0401f7f7, 0x42007000,
+ 0x0010d1b1, 0x4a007000, 0x00000005, 0x4a007401,
+ 0x00000000, 0x4a007201, 0x00000840, 0x4a007202,
+ 0x00000005, 0x4a0378e8, 0x00000000, 0x4a03c821,
+ 0x00000010, 0x4a03c823, 0x00000004, 0x0401f81e,
+ 0x4a0378e9, 0x00003a0d, 0x4a0378e8, 0x00000001,
+ 0x41780800, 0x4203a000, 0x00007600, 0x4a03a005,
+ 0xd0000001, 0x59d00006, 0x4a03a005, 0x90000001,
+ 0x83d3a400, 0x00000020, 0x80040800, 0x82040480,
+ 0x00000005, 0x040017f8, 0x59e00003, 0x82000500,
+ 0xffffffe0, 0x82000540, 0x00008000, 0x4803c003,
+ 0x59c40006, 0x82000500, 0xfffcffff, 0x48038806,
+ 0x1c01f000, 0x4d900000, 0x4d180000, 0x4a0378e7,
+ 0xaaaaaaaa, 0x4a0378e6, 0xaaaaaaaa, 0x4a0378e5,
+ 0xaaaaaaaa, 0x4a03781a, 0x0010d444, 0x4a03781b,
+ 0x00100f3c, 0x4a03781c, 0x00100f4c, 0x4a031800,
+ 0x00000000, 0x4a031801, 0x0010d1b4, 0x4a031802,
+ 0x0010d1bb, 0x42000800, 0x0010d447, 0x417a3000,
+ 0x811b20c8, 0x83932400, 0x0000bf32, 0x48072000,
+ 0x4a032001, 0x00000000, 0x83180400, 0x00107876,
+ 0x50000000, 0x48032002, 0x82040c00, 0x00000005,
+ 0x811a3000, 0x83180480, 0x00000005, 0x040017f1,
+ 0x5c023000, 0x5c032000, 0x1c01f000, 0x40680800,
+ 0x0201f800, 0x00020a9f, 0x1c01f000, 0x4933c857,
+ 0x59300804, 0x82040d00, 0x00000100, 0x82040d40,
+ 0x80000040, 0x48066004, 0x497a6000, 0x59bc00ea,
+ 0x8c000516, 0x040207fe, 0x83300400, 0x60000000,
+ 0x480378e1, 0x1c01f000, 0x598c000f, 0x81300580,
+ 0x04000003, 0x497a6008, 0x1c01f000, 0x59c40004,
+ 0x82000500, 0x0000000c, 0x04000005, 0x4a038804,
+ 0x0000000c, 0x497b2807, 0x0401f00a, 0x0401fbb2,
+ 0x59300403, 0x82000d80, 0x00000040, 0x04000004,
+ 0x82000580, 0x00000042, 0x04020002, 0x497a6008,
+ 0x0201f800, 0x0010783c, 0x80000580, 0x1c01f000,
+ 0x0401f807, 0x42018800, 0x00000001, 0x04000003,
+ 0x42018800, 0x00000000, 0x1c01f000, 0x59300804,
+ 0x8c040d20, 0x04020004, 0x82000540, 0x00000001,
+ 0x1c01f000, 0x4933c857, 0x59300804, 0x84040d20,
+ 0x48066004, 0x4a026203, 0x00000002, 0x80000580,
+ 0x1c01f000, 0x4933c857, 0x4d380000, 0x59300804,
+ 0x84040d20, 0x48066004, 0x42027000, 0x00000049,
+ 0x59300203, 0x82000580, 0x00000003, 0x04000003,
+ 0x42027000, 0x00000013, 0x0201f800, 0x00020b22,
+ 0x80000580, 0x5c027000, 0x1c01f000, 0x0401f807,
+ 0x42018800, 0x00000001, 0x04000003, 0x42018800,
+ 0x00000000, 0x1c01f000, 0x59300018, 0x81480580,
+ 0x04020003, 0x59300019, 0x814c0580, 0x1c01f000,
+ 0x4d2c0000, 0x4d300000, 0x0401f8d2, 0x4df00000,
+ 0x0201f800, 0x00106998, 0x59900001, 0x82000500,
+ 0x00000003, 0x0c01f001, 0x001070f7, 0x001070ec,
+ 0x001070ea, 0x001070ea, 0x0201f800, 0x0010032f,
+ 0x59926004, 0x0401f88a, 0x813261c0, 0x04000008,
+ 0x59300004, 0x8c000516, 0x04000004, 0x59325809,
+ 0x497a5809, 0x497a580a, 0x0401f88a, 0x5c03e000,
+ 0x040008a5, 0x5c026000, 0x5c025800, 0x1c01f000,
+ 0x5c000000, 0x4c000000, 0x4803c857, 0x4d300000,
+ 0x497b2807, 0x0401f8af, 0x4df00000, 0x598c0000,
+ 0x82000500, 0x0000000f, 0x4803c857, 0x0c01f001,
+ 0x0010713d, 0x0010711a, 0x00107123, 0x0010712a,
+ 0x00107138, 0x0010713d, 0x00107118, 0x00107127,
+ 0x0010713d, 0x00107118, 0x00107118, 0x00107118,
+ 0x00107118, 0x00107118, 0x00107118, 0x00107118,
+ 0x0201f800, 0x0010032f, 0x598c000f, 0x80026540,
+ 0x04000004, 0x0401f824, 0x02020800, 0x0010032f,
+ 0x0201f800, 0x0010783c, 0x0401f01b, 0x0401f82d,
+ 0x0201f800, 0x0010783c, 0x0401f017, 0x0201f800,
+ 0x0010bfb1, 0x0401f7f7, 0x598c000f, 0x80026540,
+ 0x04000011, 0x0401f83b, 0x04000007, 0x0401f812,
+ 0x04000005, 0x0401f81f, 0x04000003, 0x0201f800,
+ 0x0010bfb1, 0x0201f800, 0x0010783c, 0x0401f006,
+ 0x0401f830, 0x02020800, 0x0010032f, 0x0201f800,
+ 0x0010783c, 0x5c03e000, 0x0400085f, 0x5c026000,
+ 0x1c01f000, 0x598c0009, 0x81300580, 0x0402000c,
+ 0x0401f852, 0x0401f83b, 0x59300000, 0x800001c0,
+ 0x04000004, 0x48031809, 0x497a6000, 0x0401f003,
+ 0x497b1809, 0x497b1808, 0x80000580, 0x1c01f000,
+ 0x4d2c0000, 0x59300407, 0x82000580, 0x00000003,
+ 0x04020012, 0x598c000b, 0x81300580, 0x0402000f,
+ 0x0401f83e, 0x59325809, 0x497a5809, 0x497a580a,
+ 0x0401f824, 0x59300000, 0x800001c0, 0x04000004,
+ 0x4803180b, 0x497a6000, 0x0401f003, 0x497b180a,
+ 0x497b180b, 0x80000580, 0x5c025800, 0x1c01f000,
+ 0x598c0005, 0x81300580, 0x0402000c, 0x0401f82b,
+ 0x0401f814, 0x59300000, 0x800001c0, 0x04000004,
+ 0x48031805, 0x497a6000, 0x0401f003, 0x497b1805,
+ 0x497b1804, 0x80000580, 0x1c01f000, 0x4a032001,
+ 0x00000000, 0x497b2004, 0x497b2005, 0x59900006,
+ 0x82000500, 0x0000ffff, 0x48032006, 0x1c01f000,
+ 0x4c040000, 0x59300004, 0x8c000516, 0x04020003,
+ 0x82000500, 0xffd7ffff, 0x82000500, 0x7ffef7ff,
+ 0x48026004, 0x59bc00e4, 0x8c000514, 0x04000009,
+ 0x42000800, 0x0000bf00, 0x58040012, 0x81300580,
+ 0x04020004, 0x49780812, 0x4a0378e4, 0x00000800,
+ 0x5c000800, 0x1c01f000, 0x4803c856, 0x598c000e,
+ 0x80000540, 0x04000003, 0x80000040, 0x4803180e,
+ 0x1c01f000, 0x59bc00ea, 0x82000500, 0x00000007,
+ 0x82000580, 0x00000003, 0x04020006, 0x4803c856,
+ 0x4a0378e8, 0x00000001, 0x4a0370e4, 0x00000800,
0x1c01f000, 0x0401f807, 0x42018800, 0x00000001,
0x04000003, 0x42018800, 0x00000000, 0x1c01f000,
- 0x59300804, 0x8c040d20, 0x04020004, 0x82000540,
- 0x00000001, 0x1c01f000, 0x4933c857, 0x4d380000,
- 0x59300804, 0x84040d20, 0x48066004, 0x42027000,
- 0x00000049, 0x59300203, 0x82000580, 0x00000003,
- 0x04000003, 0x42027000, 0x00000013, 0x0201f800,
- 0x00020bc1, 0x80000580, 0x5c027000, 0x1c01f000,
- 0x0401f807, 0x42018800, 0x00000001, 0x04000003,
- 0x42018800, 0x00000000, 0x1c01f000, 0x59300018,
- 0x81480580, 0x04020003, 0x59300019, 0x814c0580,
- 0x1c01f000, 0x4d2c0000, 0x4d300000, 0x0401f8ce,
- 0x4df00000, 0x0201f800, 0x00106628, 0x59900001,
- 0x82000500, 0x00000003, 0x0c01f001, 0x00106d8c,
- 0x00106d81, 0x00106d7f, 0x00106d7f, 0x0201f800,
- 0x0010032e, 0x59926004, 0x0401f88a, 0x813261c0,
- 0x04000008, 0x59300004, 0x8c000516, 0x04000004,
- 0x59325809, 0x497a5809, 0x497a580a, 0x0401f88a,
- 0x5c03e000, 0x040008a1, 0x5c026000, 0x5c025800,
- 0x1c01f000, 0x5c000000, 0x4c000000, 0x4803c857,
- 0x4d300000, 0x497b2807, 0x0401f8ab, 0x4df00000,
- 0x598c0000, 0x82000500, 0x0000000f, 0x4803c857,
- 0x0c01f001, 0x00106dd2, 0x00106daf, 0x00106db8,
- 0x00106dbf, 0x00106dcd, 0x00106dd2, 0x00106dad,
- 0x00106dbc, 0x00106dd2, 0x00106dad, 0x00106dad,
- 0x00106dad, 0x00106dad, 0x00106dad, 0x00106dad,
- 0x00106dad, 0x0201f800, 0x0010032e, 0x598c000f,
- 0x80026540, 0x04000004, 0x0401f824, 0x02020800,
- 0x0010032e, 0x0201f800, 0x001074ce, 0x0401f01b,
- 0x0401f82d, 0x0201f800, 0x001074ce, 0x0401f017,
- 0x0201f800, 0x0010ba5c, 0x0401f7f7, 0x598c000f,
- 0x80026540, 0x04000011, 0x0401f83b, 0x04000007,
- 0x0401f812, 0x04000005, 0x0401f81f, 0x04000003,
- 0x0201f800, 0x0010ba5c, 0x0201f800, 0x001074ce,
- 0x0401f006, 0x0401f830, 0x02020800, 0x0010032e,
- 0x0201f800, 0x001074ce, 0x5c03e000, 0x0400085b,
- 0x5c026000, 0x1c01f000, 0x598c0009, 0x81300580,
- 0x0402000c, 0x0401f84e, 0x0401f83b, 0x59300000,
- 0x800001c0, 0x04000004, 0x48031809, 0x497a6000,
- 0x0401f003, 0x497b1809, 0x497b1808, 0x80000580,
- 0x1c01f000, 0x4d2c0000, 0x59300407, 0x82000580,
- 0x00000003, 0x04020012, 0x598c000b, 0x81300580,
- 0x0402000f, 0x0401f83a, 0x59325809, 0x497a5809,
- 0x497a580a, 0x0401f824, 0x59300000, 0x800001c0,
- 0x04000004, 0x4803180b, 0x497a6000, 0x0401f003,
- 0x497b180a, 0x497b180b, 0x80000580, 0x5c025800,
- 0x1c01f000, 0x598c0005, 0x81300580, 0x0402000c,
- 0x0401f827, 0x0401f814, 0x59300000, 0x800001c0,
- 0x04000004, 0x48031805, 0x497a6000, 0x0401f003,
- 0x497b1805, 0x497b1804, 0x80000580, 0x1c01f000,
- 0x4a032001, 0x00000000, 0x497b2004, 0x497b2005,
- 0x59900006, 0x82000500, 0x0000ffff, 0x48032006,
- 0x1c01f000, 0x4c040000, 0x59300004, 0x82000500,
- 0x7ffeffff, 0x48026004, 0x59bc00e4, 0x8c000514,
- 0x04000009, 0x42000800, 0x0000bf00, 0x58040012,
- 0x81300580, 0x04020004, 0x49780812, 0x4a0378e4,
- 0x00000800, 0x5c000800, 0x1c01f000, 0x4803c856,
- 0x598c000e, 0x80000540, 0x04000003, 0x80000040,
- 0x4803180e, 0x1c01f000, 0x59bc00ea, 0x82000500,
- 0x00000007, 0x82000580, 0x00000003, 0x04020006,
- 0x4803c856, 0x4a0378e8, 0x00000001, 0x4a0370e4,
- 0x00000800, 0x1c01f000, 0x0401f807, 0x42018800,
- 0x00000001, 0x04000003, 0x42018800, 0x00000000,
+ 0x59bc00ea, 0x82000500, 0x00000007, 0x82000580,
+ 0x00000001, 0x04020013, 0x4803c856, 0x42000800,
+ 0x00000000, 0x0401f810, 0x4a0370e4, 0x00000c00,
+ 0x42000800, 0x00010000, 0x59bc00ea, 0x82000500,
+ 0x00000007, 0x82000580, 0x00000003, 0x04000005,
+ 0x80040840, 0x040207f9, 0x0201f800, 0x0010032f,
0x1c01f000, 0x59bc00ea, 0x82000500, 0x00000007,
- 0x82000580, 0x00000001, 0x04020013, 0x4803c856,
- 0x42000800, 0x00000000, 0x0401f810, 0x4a0370e4,
- 0x00000c00, 0x42000800, 0x00001000, 0x59bc00ea,
- 0x82000500, 0x00000007, 0x82000580, 0x00000003,
- 0x04000005, 0x80040840, 0x040207f9, 0x0201f800,
- 0x0010032e, 0x1c01f000, 0x59bc00ea, 0x82000500,
- 0x00000007, 0x82000580, 0x00000001, 0x02020800,
- 0x0010032e, 0x59bc00ea, 0x8c000516, 0x040207fe,
- 0x480778e1, 0x1c01f000, 0x40681000, 0x406c0800,
+ 0x82000580, 0x00000001, 0x02020800, 0x0010032f,
0x59bc00ea, 0x8c000516, 0x040207fe, 0x480778e1,
- 0x59bc00ea, 0x8c000516, 0x040207fe, 0x480b78e1,
- 0x1c01f000, 0x4a0378e4, 0x00002000, 0x59a80070,
- 0x82000500, 0x0000000c, 0x04020008, 0x42007000,
- 0x0010cb9b, 0x58380401, 0x8c000506, 0x04020003,
- 0x4a0378e4, 0x00080000, 0x1c01f000, 0x82000d00,
- 0x80000018, 0x02020800, 0x00100323, 0x0201f800,
- 0x0010032e, 0x00106e95, 0x00106f74, 0x00106f8f,
- 0x00106e95, 0x00106e97, 0x00106eea, 0x00106f09,
- 0x00106f41, 0x00106e95, 0x00106f72, 0x00106eb8,
- 0x00106e95, 0x00106e95, 0x00106e95, 0x00106e95,
- 0x00106e95, 0x0201f800, 0x0010032e, 0x4d300000,
- 0x4d900000, 0x4dd00000, 0x4da40000, 0x4d140000,
- 0x0201f800, 0x001074f6, 0x59bc00ea, 0x8c000510,
- 0x040007fe, 0x59be60e0, 0x59300004, 0x8c000520,
- 0x04000011, 0x82000500, 0xfffefeff, 0x48026004,
- 0x4a026203, 0x00000003, 0x0401ff97, 0x0201f800,
- 0x00100df5, 0x5c022800, 0x5c034800, 0x5c03a000,
- 0x5c032000, 0x5c026000, 0x4a0378e4, 0x00000008,
- 0x0401f77a, 0x84000510, 0x48026004, 0x0401f7f6,
- 0x4d300000, 0x4d2c0000, 0x4d900000, 0x4dd00000,
- 0x4da40000, 0x4d140000, 0x0201f800, 0x001074f6,
- 0x59bc00ea, 0x8c000510, 0x040007fe, 0x59be60e0,
- 0x59300004, 0x8c000520, 0x04000021, 0x82000500,
- 0xfffefeff, 0x48026004, 0x4a026203, 0x00000003,
- 0x59325809, 0x812e59c0, 0x02000800, 0x0010032e,
- 0x42000000, 0x0010cf46, 0x0201f800, 0x0010bfb3,
- 0x0401f8f3, 0x04000009, 0x592c0209, 0x84000552,
- 0x48025a09, 0x0201f800, 0x001010ee, 0x0401ff66,
- 0x0201f800, 0x00100df5, 0x5c022800, 0x5c034800,
- 0x5c03a000, 0x5c032000, 0x5c025800, 0x5c026000,
- 0x4a0378e4, 0x00000008, 0x0401f748, 0x84000510,
- 0x48026004, 0x0401f7f5, 0x4d300000, 0x4d900000,
+ 0x1c01f000, 0x40681000, 0x406c0800, 0x59bc00ea,
+ 0x8c000516, 0x040207fe, 0x480778e1, 0x59bc00ea,
+ 0x8c000516, 0x040207fe, 0x480b78e1, 0x1c01f000,
+ 0x4a0378e4, 0x00002000, 0x59a8007e, 0x82000500,
+ 0x0000000c, 0x04020008, 0x42007000, 0x0010d1b1,
+ 0x58380401, 0x8c000506, 0x04020003, 0x4a0378e4,
+ 0x00080000, 0x1c01f000, 0x82000d00, 0x80000018,
+ 0x02020800, 0x00100324, 0x0201f800, 0x0010032f,
+ 0x00107204, 0x001072e3, 0x001072fe, 0x00107204,
+ 0x00107206, 0x00107259, 0x00107278, 0x001072b0,
+ 0x00107204, 0x001072e1, 0x00107227, 0x00107204,
+ 0x00107204, 0x00107204, 0x00107204, 0x00107204,
+ 0x0201f800, 0x0010032f, 0x4d300000, 0x4d900000,
0x4dd00000, 0x4da40000, 0x4d140000, 0x0201f800,
- 0x001074f6, 0x59bc00ea, 0x8c000510, 0x040007fe,
- 0x59be60e0, 0x59300004, 0x8c000520, 0x0400000f,
- 0x82000500, 0xfffefeff, 0x48026004, 0x0401ff46,
- 0x0201f800, 0x00100e37, 0x5c022800, 0x5c034800,
- 0x5c03a000, 0x5c032000, 0x5c026000, 0x4a0378e4,
- 0x00000008, 0x0401f729, 0x84000510, 0x48026004,
- 0x0401f7f6, 0x4d300000, 0x4d2c0000, 0x4d340000,
- 0x4da40000, 0x4cd00000, 0x4d240000, 0x59bc00ea,
- 0x8c000510, 0x040007fe, 0x59be60e0, 0x813261c0,
- 0x02000800, 0x0010032e, 0x59300004, 0x8c000520,
- 0x04000020, 0x82000500, 0xfffefeff, 0x48026004,
- 0x5932680a, 0x42034800, 0x0010cb9e, 0x5932481c,
- 0x04011000, 0x4a03c840, 0x0010cba5, 0x4a03c842,
- 0x00000012, 0x04011000, 0x4a03c840, 0x0010cbb7,
- 0x4a03c842, 0x000000ff, 0x04011000, 0x4a03c840,
- 0x0010ccb6, 0x4a03c842, 0x000000ff, 0x0201f800,
- 0x0010750d, 0x5c024800, 0x5c01a000, 0x5c034800,
- 0x5c026800, 0x5c025800, 0x5c026000, 0x1c01f000,
- 0x84000510, 0x48026004, 0x5c024800, 0x5c01a000,
- 0x5c034800, 0x5c026800, 0x5c025800, 0x5c026000,
- 0x1c01f000, 0x4d300000, 0x4d2c0000, 0x4d340000,
- 0x4cd00000, 0x4d240000, 0x4d900000, 0x4dd00000,
- 0x4da40000, 0x4d140000, 0x0201f800, 0x001074f6,
- 0x59bc00ea, 0x8c000510, 0x040007fe, 0x59be60e0,
- 0x813261c0, 0x02000800, 0x0010032e, 0x59300004,
- 0x8c000520, 0x04000011, 0x82000500, 0xfffefeff,
- 0x48026004, 0x5932481c, 0x0201f800, 0x00107ce7,
- 0x5c022800, 0x5c034800, 0x5c03a000, 0x5c032000,
- 0x5c024800, 0x5c01a000, 0x5c026800, 0x5c025800,
- 0x5c026000, 0x1c01f000, 0x84000510, 0x48026004,
+ 0x00107864, 0x59bc00ea, 0x8c000510, 0x040007fe,
+ 0x59be60e0, 0x59300004, 0x8c000520, 0x04000011,
+ 0x82000500, 0xfffefeff, 0x48026004, 0x4a026203,
+ 0x00000003, 0x0401ff97, 0x0201f800, 0x00100e1a,
0x5c022800, 0x5c034800, 0x5c03a000, 0x5c032000,
- 0x5c024800, 0x5c01a000, 0x5c026800, 0x5c025800,
- 0x5c026000, 0x1c01f000, 0x0201f800, 0x0010032e,
- 0x4d300000, 0x4d380000, 0x42000000, 0x0010cf84,
- 0x0201f800, 0x0010bfb3, 0x0401fec7, 0x598e600f,
- 0x59c40004, 0x8c000506, 0x04000004, 0x0401f95f,
- 0x4a038804, 0x00000008, 0x813261c0, 0x04000007,
- 0x0201f800, 0x001074f0, 0x42027000, 0x00000014,
- 0x0201f800, 0x00020bc1, 0x4a0378e4, 0x00000002,
- 0x5c027000, 0x5c026000, 0x0401f6a0, 0x4d180000,
- 0x4d300000, 0x4d380000, 0x4d900000, 0x4dd00000,
- 0x4da40000, 0x4d140000, 0x0401feab, 0x417a3000,
- 0x59c40804, 0x83180400, 0x001074a0, 0x50000000,
- 0x80040500, 0x0400001c, 0x42000000, 0x0010cf85,
- 0x0201f800, 0x0010bfb3, 0x0201f800, 0x001074f6,
- 0x59926004, 0x0401f8d5, 0x83180400, 0x001074a0,
- 0x50000000, 0x48038804, 0x813261c0, 0x0400000a,
- 0x59300004, 0x8c00050c, 0x04020003, 0x4a026203,
- 0x00000003, 0x42027000, 0x0000004a, 0x0201f800,
- 0x00020bc1, 0x59c40004, 0x82000500, 0x00f80000,
- 0x04000005, 0x811a3000, 0x83180480, 0x00000005,
- 0x040017dc, 0x4a0378e4, 0x00000008, 0x5c022800,
- 0x5c034800, 0x5c03a000, 0x5c032000, 0x5c027000,
- 0x5c026000, 0x5c023000, 0x0401f668, 0x59300004,
- 0x8c000538, 0x04020066, 0x59300222, 0x82000500,
- 0x00000003, 0x82000580, 0x00000001, 0x04020060,
- 0x42000000, 0x0010cfb7, 0x0201f800, 0x0010bfb3,
- 0x0401fe6d, 0x4df00000, 0x4c640000, 0x0401f8a3,
- 0x0401fd99, 0x5930c804, 0x8464cd78, 0x59d00011,
- 0x59d02012, 0x4803c857, 0x4813c857, 0x0401fbea,
- 0x04020041, 0x48166012, 0x4c100000, 0x4c5c0000,
- 0x4c600000, 0x4a026203, 0x00000002, 0x592c0a05,
- 0x82040d00, 0x000000ff, 0x82040580, 0x00000072,
- 0x04020005, 0x4a026203, 0x00000003, 0x592c000e,
- 0x80102480, 0x4010b800, 0x4014c000, 0x42000000,
- 0x00000001, 0x1201f800, 0x00108e7f, 0x40602800,
- 0x5c00c000, 0x5c00b800, 0x5c002000, 0x04000026,
- 0x42000000, 0xd0000000, 0x41300800, 0x0201f800,
- 0x001008c7, 0x59300008, 0x4c000000, 0x4a026008,
- 0x00200000, 0x0201f800, 0x00100f2b, 0x5c000000,
- 0x48026008, 0x04020018, 0x8464cd26, 0x592c0209,
- 0x8c00051e, 0x0402000c, 0x8464cd4a, 0x50201800,
- 0x480e600b, 0x8464cd7e, 0x48666004, 0x0401fbeb,
- 0x5c00c800, 0x5c03e000, 0x04000e18, 0x80000580,
- 0x1c01f000, 0x8400051e, 0x48025a09, 0x0201f800,
- 0x00100ee9, 0x4832600c, 0x4822600d, 0x482a600e,
- 0x0401f7ef, 0x42000000, 0x0010cfb8, 0x0201f800,
- 0x0010bfb3, 0x4a026203, 0x00000003, 0x49332004,
- 0x8464cd7e, 0x48666004, 0x4a032001, 0x00000001,
- 0x5c00c800, 0x5c03e000, 0x04000e00, 0x82000540,
- 0x00000001, 0x0401f7e7, 0x4d2c0000, 0x4d340000,
- 0x5932680a, 0x598c0800, 0x82040580, 0x00000004,
- 0x04020006, 0x838c1400, 0x00000005, 0x838c1c00,
- 0x00000004, 0x0401f010, 0x82040580, 0x00000001,
- 0x04020006, 0x838c1400, 0x00000009, 0x838c1c00,
- 0x00000008, 0x0401f008, 0x82040580, 0x00000002,
- 0x04020028, 0x838c1400, 0x0000000b, 0x838c1c00,
- 0x0000000a, 0x41306800, 0x58340000, 0x80007d40,
- 0x04000020, 0x583c000a, 0x81340580, 0x04020006,
- 0x403c6800, 0x583c0000, 0x80007d40, 0x040207fa,
- 0x0401f018, 0x4933c857, 0x483fc857, 0x583c0000,
- 0x48006800, 0x49307800, 0x443c1000, 0x500c0000,
- 0x803c0580, 0x04020002, 0x44341800, 0x80000580,
- 0x4803180f, 0x48031811, 0x598c0000, 0x82000580,
- 0x00000003, 0x04000003, 0x4a031800, 0x00000000,
- 0x80000580, 0x5c026800, 0x5c025800, 0x1c01f000,
- 0x82000540, 0x00000001, 0x0401f7fb, 0x0401f807,
- 0x42018800, 0x00000000, 0x04000003, 0x42018800,
- 0x00000001, 0x1c01f000, 0x491bc857, 0x59b400f6,
- 0x82000500, 0x00000038, 0x040207fd, 0x59c80840,
- 0x82040540, 0x00000010, 0x48039040, 0x59c41008,
- 0x4c040000, 0x4c080000, 0x82081500, 0xffffff7f,
- 0x480b8808, 0x0401fbf9, 0x04020007, 0x0401fbfd,
- 0x04000024, 0x48038804, 0x0201f800, 0x00100eb5,
- 0x0401f044, 0x4a038803, 0x00000008, 0x59c40003,
- 0x82000500, 0x00000003, 0x040007fd, 0x8c000502,
- 0x04020007, 0x0401fbef, 0x04000016, 0x48038804,
- 0x0201f800, 0x00100eb5, 0x0401f036, 0x0401fbef,
- 0x04020007, 0x59c80040, 0x8400056a, 0x48039040,
- 0x59c80040, 0x8c00052a, 0x040207fe, 0x59c40005,
- 0x82000500, 0xc0000000, 0x04000006, 0x59c400a3,
- 0x84000540, 0x480388a3, 0x4a038805, 0xc0000000,
- 0x0201f800, 0x00100e46, 0x4a03a005, 0x30000000,
- 0x59d00006, 0x4a03a005, 0x30000000, 0x59900006,
- 0x82000500, 0xffff0000, 0x48032006, 0x59d00005,
- 0x8c000504, 0x040207fe, 0x42000800, 0x00007600,
- 0x83180540, 0x60000000, 0x480008a1, 0x811800dc,
- 0x59c80840, 0x80040540, 0x48039040, 0x82000540,
- 0x00003000, 0x48039040, 0x59c80040, 0x82000500,
- 0x00003000, 0x040207fd, 0x0201f800, 0x00100ea4,
- 0x83180400, 0x001074a0, 0x50000000, 0x48038804,
- 0x80000580, 0x4df00000, 0x0201f800, 0x00106628,
- 0x5c03e000, 0x5c001000, 0x5c000800, 0x480b8808,
- 0x48079040, 0x1c01f000, 0x4803c856, 0x59b400f6,
- 0x82000500, 0x00000038, 0x040207fd, 0x59c80840,
- 0x82040540, 0x00000010, 0x48039040, 0x59c41008,
- 0x4c040000, 0x4c080000, 0x82081500, 0xffffff7f,
- 0x480b8808, 0x59c40004, 0x82000500, 0x00000003,
- 0x04020010, 0x59c40004, 0x82000500, 0x0000000c,
- 0x04000005, 0x4a038804, 0x0000000c, 0x8c000504,
- 0x0401f025, 0x59c80040, 0x8400056e, 0x48039040,
- 0x59c80040, 0x8c00052e, 0x040207fe, 0x0401f01e,
+ 0x5c026000, 0x4a0378e4, 0x00000008, 0x0401f77a,
+ 0x84000510, 0x48026004, 0x0401f7f6, 0x4d300000,
+ 0x4d2c0000, 0x4d900000, 0x4dd00000, 0x4da40000,
+ 0x4d140000, 0x0201f800, 0x00107864, 0x59bc00ea,
+ 0x8c000510, 0x040007fe, 0x59be60e0, 0x59300004,
+ 0x8c000520, 0x04000021, 0x82000500, 0xfffefeff,
+ 0x48026004, 0x4a026203, 0x00000003, 0x59325809,
+ 0x812e59c0, 0x02000800, 0x0010032f, 0x42000000,
+ 0x0010d561, 0x0201f800, 0x0010c50a, 0x0401f8f3,
+ 0x04000009, 0x592c0209, 0x84000552, 0x48025a09,
+ 0x0201f800, 0x001010f7, 0x0401ff66, 0x0201f800,
+ 0x00100e1a, 0x5c022800, 0x5c034800, 0x5c03a000,
+ 0x5c032000, 0x5c025800, 0x5c026000, 0x4a0378e4,
+ 0x00000008, 0x0401f748, 0x84000510, 0x48026004,
+ 0x0401f7f5, 0x4d300000, 0x4d900000, 0x4dd00000,
+ 0x4da40000, 0x4d140000, 0x0201f800, 0x00107864,
+ 0x59bc00ea, 0x8c000510, 0x040007fe, 0x59be60e0,
+ 0x59300004, 0x8c000520, 0x0400000f, 0x82000500,
+ 0xfffefeff, 0x48026004, 0x0401ff46, 0x0201f800,
+ 0x00100e62, 0x5c022800, 0x5c034800, 0x5c03a000,
+ 0x5c032000, 0x5c026000, 0x4a0378e4, 0x00000008,
+ 0x0401f729, 0x84000510, 0x48026004, 0x0401f7f6,
+ 0x4d300000, 0x4d2c0000, 0x4d340000, 0x4da40000,
+ 0x4cd00000, 0x4d240000, 0x59bc00ea, 0x8c000510,
+ 0x040007fe, 0x59be60e0, 0x813261c0, 0x02000800,
+ 0x0010032f, 0x59300004, 0x8c000520, 0x04000020,
+ 0x82000500, 0xfffefeff, 0x48026004, 0x5932680a,
+ 0x42034800, 0x0010d1b4, 0x5932481c, 0x04011000,
+ 0x4a03c840, 0x0010d1bb, 0x4a03c842, 0x00000012,
+ 0x04011000, 0x4a03c840, 0x0010d1cd, 0x4a03c842,
+ 0x000000ff, 0x04011000, 0x4a03c840, 0x0010d2cc,
+ 0x4a03c842, 0x000000ff, 0x0201f800, 0x0010787b,
+ 0x5c024800, 0x5c01a000, 0x5c034800, 0x5c026800,
+ 0x5c025800, 0x5c026000, 0x1c01f000, 0x84000510,
+ 0x48026004, 0x5c024800, 0x5c01a000, 0x5c034800,
+ 0x5c026800, 0x5c025800, 0x5c026000, 0x1c01f000,
+ 0x4d300000, 0x4d2c0000, 0x4d340000, 0x4cd00000,
+ 0x4d240000, 0x4d900000, 0x4dd00000, 0x4da40000,
+ 0x4d140000, 0x0201f800, 0x00107864, 0x59bc00ea,
+ 0x8c000510, 0x040007fe, 0x59be60e0, 0x813261c0,
+ 0x02000800, 0x0010032f, 0x59300004, 0x8c000520,
+ 0x04000011, 0x82000500, 0xfffefeff, 0x48026004,
+ 0x5932481c, 0x0201f800, 0x0010807c, 0x5c022800,
+ 0x5c034800, 0x5c03a000, 0x5c032000, 0x5c024800,
+ 0x5c01a000, 0x5c026800, 0x5c025800, 0x5c026000,
+ 0x1c01f000, 0x84000510, 0x48026004, 0x5c022800,
+ 0x5c034800, 0x5c03a000, 0x5c032000, 0x5c024800,
+ 0x5c01a000, 0x5c026800, 0x5c025800, 0x5c026000,
+ 0x1c01f000, 0x0201f800, 0x0010032f, 0x4d300000,
+ 0x4d380000, 0x42000000, 0x0010d59f, 0x0201f800,
+ 0x0010c50a, 0x0401fec7, 0x598e600f, 0x59c40004,
+ 0x8c000506, 0x04000004, 0x0401f95f, 0x4a038804,
+ 0x00000008, 0x813261c0, 0x04000007, 0x0201f800,
+ 0x0010785e, 0x42027000, 0x00000014, 0x0201f800,
+ 0x00020b22, 0x4a0378e4, 0x00000002, 0x5c027000,
+ 0x5c026000, 0x0401f6a0, 0x4d180000, 0x4d300000,
+ 0x4d380000, 0x4d900000, 0x4dd00000, 0x4da40000,
+ 0x4d140000, 0x0401feab, 0x417a3000, 0x59c40804,
+ 0x83180400, 0x0010780e, 0x50000000, 0x80040500,
+ 0x0400001c, 0x42000000, 0x0010d5a0, 0x0201f800,
+ 0x0010c50a, 0x0201f800, 0x00107864, 0x59926004,
+ 0x0401f8d5, 0x83180400, 0x0010780e, 0x50000000,
+ 0x48038804, 0x813261c0, 0x0400000a, 0x59300004,
+ 0x8c00050c, 0x04020003, 0x4a026203, 0x00000003,
+ 0x42027000, 0x0000004a, 0x0201f800, 0x00020b22,
+ 0x59c40004, 0x82000500, 0x00f80000, 0x04000005,
+ 0x811a3000, 0x83180480, 0x00000005, 0x040017dc,
+ 0x4a0378e4, 0x00000008, 0x5c022800, 0x5c034800,
+ 0x5c03a000, 0x5c032000, 0x5c027000, 0x5c026000,
+ 0x5c023000, 0x0401f668, 0x59300004, 0x8c000538,
+ 0x04020066, 0x59300222, 0x82000500, 0x00000003,
+ 0x82000580, 0x00000001, 0x04020060, 0x42000000,
+ 0x0010d5d4, 0x0201f800, 0x0010c50a, 0x0401fe6d,
+ 0x4df00000, 0x4c640000, 0x0401f8a3, 0x0401fd95,
+ 0x5930c804, 0x8464cd78, 0x59d00011, 0x59d02012,
+ 0x4803c857, 0x4813c857, 0x0401fbe9, 0x04020041,
+ 0x48166012, 0x4c100000, 0x4c5c0000, 0x4c600000,
+ 0x4a026203, 0x00000002, 0x592c0a05, 0x82040d00,
+ 0x000000ff, 0x82040580, 0x00000072, 0x04020005,
+ 0x4a026203, 0x00000003, 0x592c000e, 0x80102480,
+ 0x4010b800, 0x4014c000, 0x42000000, 0x00000001,
+ 0x1201f800, 0x001091eb, 0x40602800, 0x5c00c000,
+ 0x5c00b800, 0x5c002000, 0x04000026, 0x42000000,
+ 0xd0000000, 0x41300800, 0x0201f800, 0x001008e8,
+ 0x59300008, 0x4c000000, 0x4a026008, 0x00200000,
+ 0x0201f800, 0x00100f5c, 0x5c000000, 0x48026008,
+ 0x04020018, 0x8464cd26, 0x592c0209, 0x8c00051e,
+ 0x0402000c, 0x8464cd4a, 0x50201800, 0x480e600b,
+ 0x8464cd7e, 0x48666004, 0x0401fbea, 0x5c00c800,
+ 0x5c03e000, 0x04000e18, 0x80000580, 0x1c01f000,
+ 0x8400051e, 0x48025a09, 0x0201f800, 0x00100f1a,
+ 0x4832600c, 0x4822600d, 0x482a600e, 0x0401f7ef,
+ 0x42000000, 0x0010d5d5, 0x0201f800, 0x0010c50a,
+ 0x4a026203, 0x00000003, 0x49332004, 0x8464cd7e,
+ 0x48666004, 0x4a032001, 0x00000001, 0x5c00c800,
+ 0x5c03e000, 0x04000e00, 0x82000540, 0x00000001,
+ 0x0401f7e7, 0x4d2c0000, 0x4d340000, 0x5932680a,
+ 0x598c0800, 0x82040580, 0x00000004, 0x04020006,
+ 0x838c1400, 0x00000005, 0x838c1c00, 0x00000004,
+ 0x0401f010, 0x82040580, 0x00000001, 0x04020006,
+ 0x838c1400, 0x00000009, 0x838c1c00, 0x00000008,
+ 0x0401f008, 0x82040580, 0x00000002, 0x04020028,
+ 0x838c1400, 0x0000000b, 0x838c1c00, 0x0000000a,
+ 0x41306800, 0x58340000, 0x80007d40, 0x04000020,
+ 0x583c000a, 0x81340580, 0x04020006, 0x403c6800,
+ 0x583c0000, 0x80007d40, 0x040207fa, 0x0401f018,
+ 0x4933c857, 0x483fc857, 0x583c0000, 0x48006800,
+ 0x49307800, 0x443c1000, 0x500c0000, 0x803c0580,
+ 0x04020002, 0x44341800, 0x80000580, 0x4803180f,
+ 0x48031811, 0x598c0000, 0x82000580, 0x00000003,
+ 0x04000003, 0x4a031800, 0x00000000, 0x80000580,
+ 0x5c026800, 0x5c025800, 0x1c01f000, 0x82000540,
+ 0x00000001, 0x0401f7fb, 0x0401f807, 0x42018800,
+ 0x00000000, 0x04000003, 0x42018800, 0x00000001,
+ 0x1c01f000, 0x491bc857, 0x59b400f6, 0x82000500,
+ 0x00000038, 0x040207fd, 0x59c80840, 0x82040540,
+ 0x00000010, 0x48039040, 0x59c41008, 0x4c040000,
+ 0x4c080000, 0x82081500, 0xffffff7f, 0x480b8808,
+ 0x0401fbf8, 0x04020007, 0x0401fbfc, 0x04000024,
+ 0x48038804, 0x0201f800, 0x00100ee6, 0x0401f044,
0x4a038803, 0x00000008, 0x59c40003, 0x82000500,
- 0x00000003, 0x040007fd, 0x8c000502, 0x04020006,
- 0x59c40004, 0x4a038804, 0x0000000c, 0x8c000504,
- 0x0401f011, 0x59c80040, 0x8400056a, 0x48039040,
- 0x59c80040, 0x8c00052a, 0x040207fe, 0x59c40005,
- 0x82000500, 0xc0000000, 0x04000007, 0x59c400a3,
- 0x84000540, 0x480388a3, 0x4a038805, 0xc0000000,
- 0x80000580, 0x497b2807, 0x5c001000, 0x5c000800,
- 0x480b8808, 0x48079040, 0x1c01f000, 0x0401f807,
- 0x42018800, 0x00000001, 0x04000003, 0x42018800,
- 0x00000000, 0x1c01f000, 0x5c000000, 0x4c000000,
- 0x4803c857, 0x491bc857, 0x4933c857, 0x4d900000,
- 0x4dd00000, 0x4da40000, 0x4d140000, 0x0401fd0e,
- 0x4df00000, 0x0401fbc1, 0x59900004, 0x800001c0,
- 0x04000011, 0x81300580, 0x0402000f, 0x59300004,
- 0x84000520, 0x48026004, 0x0401ff3c, 0x04020009,
- 0x5c03e000, 0x04000ced, 0x80000580, 0x5c022800,
- 0x5c034800, 0x5c03a000, 0x5c032000, 0x1c01f000,
- 0x0401fc29, 0x42027000, 0x00000049, 0x59300004,
- 0x84000520, 0x48026004, 0x8c00050c, 0x02020800,
- 0x00020bc1, 0x5c03e000, 0x04000cdc, 0x82000540,
- 0x00000001, 0x5c022800, 0x5c034800, 0x5c03a000,
- 0x5c032000, 0x1c01f000, 0x0401f807, 0x42018800,
- 0x00000001, 0x04000003, 0x42018800, 0x00000000,
- 0x1c01f000, 0x4933c857, 0x0401fcdf, 0x4df00000,
- 0x598c000f, 0x80026540, 0x04000012, 0x59300004,
- 0x84000520, 0x48026004, 0x0401ff74, 0x04000017,
- 0x0401fc25, 0x42027000, 0x00000013, 0x59300004,
- 0x8c00050c, 0x02020800, 0x00020bc1, 0x5c03e000,
- 0x04000cba, 0x82000540, 0x00000001, 0x1c01f000,
- 0x836c1580, 0x00000001, 0x040007f9, 0x836c1580,
- 0x00000004, 0x040007f6, 0x42001000, 0x00104131,
- 0x0201f800, 0x001064fe, 0x5c03e000, 0x04000cab,
- 0x80000580, 0x1c01f000, 0x4d300000, 0x4d180000,
- 0x4d3c0000, 0x0401fcb8, 0x4df00000, 0x4a0378e4,
- 0x0000000f, 0x0401fb41, 0x417a3000, 0x811808c8,
- 0x82040c00, 0x0000bf32, 0x58066004, 0x813261c0,
- 0x04000010, 0x417a7800, 0x0201f800, 0x0010493c,
- 0x0400000a, 0x59300c07, 0x82040580, 0x00000003,
- 0x04000004, 0x82040580, 0x00000006, 0x04020003,
- 0x42027800, 0x00000002, 0x0201f800, 0x00109425,
- 0x811a3000, 0x83180480, 0x00000005, 0x040017e8,
- 0x42000800, 0x00000040, 0x0201f800, 0x001012d2,
- 0x4a0378e4, 0x0000000a, 0x5c03e000, 0x04000c7f,
- 0x5c027800, 0x5c023000, 0x5c026000, 0x1c01f000,
- 0x4803c856, 0x4d300000, 0x0401fc8b, 0x4df00000,
- 0x59c80840, 0x84040d74, 0x82040540, 0x00000010,
- 0x48039040, 0x59c41008, 0x4c040000, 0x4c080000,
- 0x82081500, 0xffffff7f, 0x480b8808, 0x42001000,
- 0x00000003, 0x0401fafc, 0x598e600f, 0x813261c0,
- 0x04020f99, 0x04000b05, 0x497b2807, 0x0401f809,
+ 0x00000003, 0x040007fd, 0x8c000502, 0x04020007,
+ 0x0401fbee, 0x04000016, 0x48038804, 0x0201f800,
+ 0x00100ee6, 0x0401f036, 0x0401fbee, 0x04020007,
+ 0x59c80040, 0x8400056a, 0x48039040, 0x59c80040,
+ 0x8c00052a, 0x040207fe, 0x59c40005, 0x82000500,
+ 0xc0000000, 0x04000006, 0x59c400a3, 0x84000540,
+ 0x480388a3, 0x4a038805, 0xc0000000, 0x0201f800,
+ 0x00100e71, 0x4a03a005, 0x30000000, 0x59d00006,
+ 0x4a03a005, 0x30000000, 0x59900006, 0x82000500,
+ 0xffff0000, 0x48032006, 0x59d00005, 0x8c000504,
+ 0x040207fe, 0x42000800, 0x00007600, 0x83180540,
+ 0x60000000, 0x480008a1, 0x811800dc, 0x59c80840,
+ 0x80040540, 0x48039040, 0x82000540, 0x00003000,
+ 0x48039040, 0x59c80040, 0x82000500, 0x00003000,
+ 0x040207fd, 0x0201f800, 0x00100ed5, 0x83180400,
+ 0x0010780e, 0x50000000, 0x48038804, 0x80000580,
+ 0x4df00000, 0x0201f800, 0x00106998, 0x5c03e000,
0x5c001000, 0x5c000800, 0x480b8808, 0x48079040,
- 0x5c03e000, 0x04000c5d, 0x5c026000, 0x1c01f000,
- 0x4d380000, 0x4d180000, 0x4d300000, 0x4d900000,
- 0x4dd00000, 0x4da40000, 0x4d140000, 0x417a3000,
- 0x0201f800, 0x00106628, 0x811a3000, 0x83180580,
- 0x00000005, 0x040207fb, 0x0401fad4, 0x04020009,
+ 0x1c01f000, 0x4803c856, 0x59b400f6, 0x82000500,
+ 0x00000038, 0x040207fd, 0x59c80840, 0x82040540,
+ 0x00000010, 0x48039040, 0x59c41008, 0x4c040000,
+ 0x4c080000, 0x82081500, 0xffffff7f, 0x480b8808,
+ 0x59c40004, 0x82000500, 0x00000003, 0x04020010,
+ 0x59c40004, 0x82000500, 0x0000000c, 0x04000005,
+ 0x4a038804, 0x0000000c, 0x8c000504, 0x0401f025,
+ 0x59c80040, 0x8400056e, 0x48039040, 0x59c80040,
+ 0x8c00052e, 0x040207fe, 0x0401f01e, 0x4a038803,
+ 0x00000008, 0x59c40003, 0x82000500, 0x00000003,
+ 0x040007fd, 0x8c000502, 0x04020006, 0x59c40004,
+ 0x4a038804, 0x0000000c, 0x8c000504, 0x0401f011,
+ 0x59c80040, 0x8400056a, 0x48039040, 0x59c80040,
+ 0x8c00052a, 0x040207fe, 0x59c40005, 0x82000500,
+ 0xc0000000, 0x04000007, 0x59c400a3, 0x84000540,
+ 0x480388a3, 0x4a038805, 0xc0000000, 0x80000580,
+ 0x497b2807, 0x5c001000, 0x5c000800, 0x480b8808,
+ 0x48079040, 0x1c01f000, 0x0401f807, 0x42018800,
+ 0x00000001, 0x04000003, 0x42018800, 0x00000000,
+ 0x1c01f000, 0x5c000000, 0x4c000000, 0x4803c857,
+ 0x491bc857, 0x4933c857, 0x4d900000, 0x4dd00000,
+ 0x4da40000, 0x4d140000, 0x0401fd0e, 0x4df00000,
+ 0x0401fbc0, 0x59900004, 0x800001c0, 0x04000011,
+ 0x81300580, 0x0402000f, 0x59300004, 0x84000520,
+ 0x48026004, 0x0401ff3c, 0x04020009, 0x5c03e000,
+ 0x04000ced, 0x80000580, 0x5c022800, 0x5c034800,
+ 0x5c03a000, 0x5c032000, 0x1c01f000, 0x0401fc25,
+ 0x42027000, 0x00000049, 0x59300004, 0x84000520,
+ 0x48026004, 0x8c00050c, 0x02020800, 0x00020b22,
+ 0x5c03e000, 0x04000cdc, 0x82000540, 0x00000001,
0x5c022800, 0x5c034800, 0x5c03a000, 0x5c032000,
- 0x5c026000, 0x5c023000, 0x5c027000, 0x1c01f000,
- 0x0401fb0a, 0x59926004, 0x4933c857, 0x0401fe8b,
- 0x813261c0, 0x040007f3, 0x42027000, 0x0000004a,
- 0x4a026203, 0x00000003, 0x0201f800, 0x00020bc1,
- 0x0401f7ec, 0x4d300000, 0x4d180000, 0x4d900000,
- 0x0401fc45, 0x42001000, 0x00000000, 0x598c0800,
- 0x82040580, 0x00000005, 0x04000003, 0x82040580,
- 0x00000008, 0x04000abc, 0x417a3000, 0x811b20c8,
- 0x83932400, 0x0000bf32, 0x59900001, 0x82000580,
- 0x00000001, 0x0402000d, 0x42000800, 0x00000004,
- 0x59926004, 0x59300012, 0x82000500, 0xfff00000,
- 0x80000540, 0x04000003, 0x42000800, 0x0000000e,
- 0x0201f800, 0x00106604, 0x811a3000, 0x83180480,
- 0x00000005, 0x040017ea, 0x59c81040, 0x84081534,
- 0x480b9040, 0x0401fc0d, 0x5c032000, 0x5c023000,
- 0x5c026000, 0x1c01f000, 0x4933c857, 0x4d900000,
- 0x4dd00000, 0x4da40000, 0x4d140000, 0x4d380000,
- 0x0401fc15, 0x4df00000, 0x59300004, 0x8c00053e,
- 0x04020007, 0x8c000520, 0x04000027, 0x0201f800,
- 0x00106d4c, 0x04000024, 0x0401f02d, 0x598c000f,
- 0x81300580, 0x04000012, 0x0201f800, 0x00109552,
- 0x04020027, 0x0401fa4b, 0x04000025, 0x48038804,
- 0x0401fab6, 0x0201f800, 0x00100eb5, 0x0201f800,
- 0x00106d71, 0x42027000, 0x00000049, 0x59300004,
- 0x8c00050c, 0x0402000e, 0x0401f00f, 0x59c40004,
- 0x8c000504, 0x04000016, 0x4a038804, 0x00000004,
- 0x0201f800, 0x00106d91, 0x42027000, 0x00000013,
- 0x59300004, 0x8c00050c, 0x04000003, 0x0201f800,
- 0x00020bc1, 0x5c03e000, 0x02000800, 0x00106e2e,
+ 0x1c01f000, 0x0401f807, 0x42018800, 0x00000001,
+ 0x04000003, 0x42018800, 0x00000000, 0x1c01f000,
+ 0x4933c857, 0x0401fcdf, 0x4df00000, 0x598c000f,
+ 0x80026540, 0x04000012, 0x59300004, 0x84000520,
+ 0x48026004, 0x0401ff74, 0x04000017, 0x0401fc21,
+ 0x42027000, 0x00000013, 0x59300004, 0x8c00050c,
+ 0x02020800, 0x00020b22, 0x5c03e000, 0x04000cba,
+ 0x82000540, 0x00000001, 0x1c01f000, 0x836c1580,
+ 0x00000001, 0x040007f9, 0x836c1580, 0x00000004,
+ 0x040007f6, 0x42001000, 0x0010421c, 0x0201f800,
+ 0x0010686f, 0x5c03e000, 0x04000cab, 0x80000580,
+ 0x1c01f000, 0x4d300000, 0x4d180000, 0x4d3c0000,
+ 0x0401fcb8, 0x4df00000, 0x4a0378e4, 0x0000000f,
+ 0x0401fb40, 0x417a3000, 0x811808c8, 0x82040c00,
+ 0x0000bf32, 0x58066004, 0x813261c0, 0x04000010,
+ 0x417a7800, 0x0201f800, 0x00104a92, 0x0400000a,
+ 0x59300c07, 0x82040580, 0x00000003, 0x04000004,
+ 0x82040580, 0x00000006, 0x04020003, 0x42027800,
+ 0x00000002, 0x0201f800, 0x001097a0, 0x811a3000,
+ 0x83180480, 0x00000005, 0x040017e8, 0x42000800,
+ 0x00000040, 0x0201f800, 0x0010132c, 0x4a0378e4,
+ 0x0000000a, 0x5c03e000, 0x04000c7f, 0x5c027800,
+ 0x5c023000, 0x5c026000, 0x1c01f000, 0x4803c856,
+ 0x4d300000, 0x0401fc8b, 0x4df00000, 0x59c80840,
+ 0x84040d74, 0x82040540, 0x00000010, 0x48039040,
+ 0x59c41008, 0x4c040000, 0x4c080000, 0x82081500,
+ 0xffffff7f, 0x480b8808, 0x42001000, 0x00000003,
+ 0x0401fafb, 0x598e600f, 0x813261c0, 0x04020f99,
+ 0x04000b04, 0x497b2807, 0x0401f809, 0x5c001000,
+ 0x5c000800, 0x480b8808, 0x48079040, 0x5c03e000,
+ 0x04000c5d, 0x5c026000, 0x1c01f000, 0x4d380000,
+ 0x4d180000, 0x4d300000, 0x4d900000, 0x4dd00000,
+ 0x4da40000, 0x4d140000, 0x417a3000, 0x0201f800,
+ 0x00106998, 0x811a3000, 0x83180580, 0x00000005,
+ 0x040207fb, 0x0401fad3, 0x04020009, 0x5c022800,
+ 0x5c034800, 0x5c03a000, 0x5c032000, 0x5c026000,
+ 0x5c023000, 0x5c027000, 0x1c01f000, 0x0401fb09,
+ 0x59926004, 0x4933c857, 0x0401fe8b, 0x813261c0,
+ 0x040007f3, 0x42027000, 0x0000004a, 0x4a026203,
+ 0x00000003, 0x0201f800, 0x00020b22, 0x0401f7ec,
+ 0x4d300000, 0x4d180000, 0x4d900000, 0x0401fc45,
+ 0x42001000, 0x00000000, 0x598c0800, 0x82040580,
+ 0x00000005, 0x04000003, 0x82040580, 0x00000008,
+ 0x04000abb, 0x417a3000, 0x811b20c8, 0x83932400,
+ 0x0000bf32, 0x59900001, 0x82000580, 0x00000001,
+ 0x0402000d, 0x42000800, 0x00000004, 0x59926004,
+ 0x59300012, 0x82000500, 0xfff00000, 0x80000540,
+ 0x04000003, 0x42000800, 0x0000000e, 0x0201f800,
+ 0x00106975, 0x811a3000, 0x83180480, 0x00000005,
+ 0x040017ea, 0x59c81040, 0x84081534, 0x480b9040,
+ 0x0401fc0d, 0x5c032000, 0x5c023000, 0x5c026000,
+ 0x1c01f000, 0x4933c857, 0x4d900000, 0x4dd00000,
+ 0x4da40000, 0x4d140000, 0x4d380000, 0x0401fc15,
+ 0x4df00000, 0x59300004, 0x8c00053e, 0x04020006,
+ 0x8c000520, 0x04000026, 0x0201f800, 0x001070bd,
+ 0x0401f023, 0x598c000f, 0x81300580, 0x04000012,
+ 0x0201f800, 0x001098d2, 0x04020027, 0x0401fa4b,
+ 0x04000025, 0x48038804, 0x0401fab6, 0x0201f800,
+ 0x00100ee6, 0x0201f800, 0x001070dc, 0x42027000,
+ 0x00000049, 0x59300004, 0x8c00050c, 0x0402000e,
+ 0x0401f00f, 0x59c40004, 0x8c000504, 0x04000016,
+ 0x4a038804, 0x00000004, 0x0201f800, 0x001070fc,
+ 0x42027000, 0x00000013, 0x59300004, 0x8c00050c,
+ 0x04000003, 0x0201f800, 0x00020b22, 0x5c03e000,
+ 0x02000800, 0x0010719d, 0x5c027000, 0x5c022800,
+ 0x5c034800, 0x5c03a000, 0x5c032000, 0x80000580,
+ 0x1c01f000, 0x5c03e000, 0x02000800, 0x0010719d,
0x5c027000, 0x5c022800, 0x5c034800, 0x5c03a000,
- 0x5c032000, 0x80000580, 0x1c01f000, 0x5c03e000,
- 0x02000800, 0x00106e2e, 0x5c027000, 0x5c022800,
- 0x5c034800, 0x5c03a000, 0x5c032000, 0x82000540,
- 0x00000001, 0x1c01f000, 0x59300407, 0x82000580,
- 0x00000003, 0x04020008, 0x0201f800, 0x0010989f,
- 0x04000005, 0x59301009, 0x58080409, 0x84000550,
- 0x48001409, 0x1c01f000, 0x497b2807, 0x0201f800,
- 0x00106e41, 0x59c400af, 0x800001c0, 0x04020005,
- 0x0201f800, 0x00106e2e, 0x0201f000, 0x001014c7,
- 0x598c0011, 0x82001480, 0x00000002, 0x04021007,
- 0x80000000, 0x48031811, 0x80000580, 0x0201f800,
- 0x001065fd, 0x04000011, 0x0401fed3, 0x0402000f,
- 0x0401ffde, 0x42000000, 0x0010cf3c, 0x0201f800,
- 0x0010bfb3, 0x0401fd9d, 0x04000008, 0x0401fa59,
- 0x4d380000, 0x42027000, 0x00000014, 0x0201f800,
- 0x00020bc1, 0x5c027000, 0x0201f800, 0x00106e2e,
- 0x0201f000, 0x001014c7, 0x4d900000, 0x4dd00000,
- 0x4da40000, 0x4d140000, 0x4d300000, 0x0201f800,
- 0x00106628, 0x0201f800, 0x00106e41, 0x59c400af,
- 0x800001c0, 0x0400002b, 0x0401fa48, 0x59926004,
- 0x4933c857, 0x59300004, 0x8c000516, 0x0400000c,
- 0x0401fe76, 0x04020023, 0x0201f800, 0x00106d71,
- 0x0201f800, 0x00106e2e, 0x42000800, 0x80000804,
- 0x0201f800, 0x00020b30, 0x0401f01a, 0x42001800,
- 0x00007530, 0x0401f9e9, 0x04020004, 0x0201f800,
- 0x00106602, 0x0401f013, 0x0401fe64, 0x04020011,
- 0x0401ffa6, 0x42000000, 0x0010cf3d, 0x0201f800,
- 0x0010bfb3, 0x59300004, 0x8c00050c, 0x04020003,
- 0x4a026203, 0x00000003, 0x4d380000, 0x42027000,
- 0x0000004a, 0x0201f800, 0x00020bc1, 0x5c027000,
- 0x0201f800, 0x00106e2e, 0x5c026000, 0x5c022800,
- 0x5c034800, 0x5c03a000, 0x5c032000, 0x0201f000,
- 0x001014c7, 0x4c600000, 0x4d900000, 0x4dd00000,
- 0x4da40000, 0x4d140000, 0x4d300000, 0x4d2c0000,
- 0x0201f800, 0x00106e41, 0x0401fa0c, 0x59926004,
- 0x813261c0, 0x04000091, 0x0201f800, 0x001050f7,
- 0x04020007, 0x4178c000, 0x0201f800, 0x00107e4d,
- 0x04000003, 0x4200c000, 0x00000001, 0x42000000,
- 0x00001000, 0x50000000, 0x82000480, 0x24320001,
- 0x04001038, 0x0201f800, 0x00100e46, 0x59303004,
- 0x8c183536, 0x0400002f, 0x42003000, 0x00001000,
- 0x80183040, 0x04000014, 0x0201f800, 0x0010c0d6,
- 0x040007fc, 0x0201f800, 0x0010064a, 0x42003000,
- 0x00007a15, 0x50183800, 0x821c0500, 0x00007000,
- 0x04000009, 0x4803507a, 0x821c0500, 0xffff8fff,
- 0x44003000, 0x4a032832, 0x000004b0, 0x4a0378e4,
- 0x02c00000, 0x4a030000, 0x00000000, 0x0201f800,
- 0x00100ea4, 0x850e1d2e, 0x42000000, 0x0010cfb5,
- 0x0201f800, 0x0010bfb3, 0x59325809, 0x812e59c0,
- 0x02000800, 0x0010032e, 0x0401f861, 0x04000057,
- 0x59303004, 0x84183536, 0x481a6004, 0x0401f032,
- 0x0201f800, 0x00106615, 0x0400002c, 0x0401f04f,
- 0x0201f800, 0x00100ea4, 0x8d0e1d2e, 0x040207f9,
- 0x0201f800, 0x001050f7, 0x04020006, 0x8060c1c0,
- 0x04000004, 0x0201f800, 0x00107e77, 0x0401f043,
- 0x0201f800, 0x00106615, 0x04020040, 0x4933c857,
- 0x0401f94e, 0x04020019, 0x0201f800, 0x00106628,
- 0x813261c0, 0x04000039, 0x59325809, 0x812e59c0,
- 0x02000800, 0x0010032e, 0x0201f800, 0x001050f7,
- 0x04020022, 0x59c40093, 0x4803c857, 0x800001c0,
- 0x0402000a, 0x592c0209, 0x84000550, 0x48025a09,
- 0x0201f800, 0x00105223, 0x04020028, 0x592c0209,
- 0x84000510, 0x48025a09, 0x0201f800, 0x00106602,
- 0x0401f022, 0x42000000, 0x0010cf3d, 0x0201f800,
- 0x0010bfb3, 0x0401fd19, 0x592c0209, 0x84000550,
- 0x48025a09, 0x4d380000, 0x42027000, 0x0000004a,
- 0x4a026203, 0x00000003, 0x0201f800, 0x00020bc1,
- 0x5c027000, 0x0401f011, 0x59900006, 0x82000500,
- 0xffff0000, 0x040207ec, 0x59c408af, 0x82040480,
- 0x000003e8, 0x040217e8, 0x59900006, 0x82000400,
- 0x00010000, 0x48032006, 0x0201f800, 0x00106602,
- 0x0201f800, 0x0010410a, 0x5c025800, 0x5c026000,
- 0x5c022800, 0x5c034800, 0x5c03a000, 0x5c032000,
- 0x5c00c000, 0x0201f000, 0x00106e2e, 0x4c5c0000,
- 0x4c640000, 0x5930bc07, 0x5930c804, 0x825c0580,
- 0x00000003, 0x04000004, 0x825c0580, 0x00000006,
- 0x04020031, 0x0201f800, 0x0010493c, 0x0402002e,
- 0x8c64cd0e, 0x0402002c, 0x0401fce4, 0x0201f800,
- 0x00106d71, 0x825c0580, 0x00000003, 0x04020005,
- 0x8c64cd16, 0x0400000c, 0x8464cd36, 0x0401f01b,
- 0x82640500, 0x0000001f, 0x82000580, 0x00000005,
- 0x04000005, 0x0201f800, 0x00020172, 0x8464cd4a,
- 0x0401f7f6, 0x0401f820, 0x04020017, 0x48166012,
- 0x0201f800, 0x00100f2b, 0x04020013, 0x8264cd00,
- 0xfff7ffdf, 0x592c0209, 0x8c00051e, 0x04020011,
- 0x8464cd4a, 0x50201800, 0x480e600b, 0x4832600c,
- 0x4822600d, 0x482a600e, 0x8464cd7e, 0x48666004,
- 0x0401f842, 0x80000580, 0x5c00c800, 0x5c00b800,
- 0x1c01f000, 0x82000540, 0x00000001, 0x0401f7fb,
- 0x8400051e, 0x48025a09, 0x0201f800, 0x00100ee9,
- 0x0401f7ed, 0x59302013, 0x811808c2, 0x82040c00,
- 0x00006000, 0x58040101, 0x82000500, 0xffff0000,
- 0x800001c0, 0x0400000b, 0x811808ca, 0x82040c00,
- 0x00006000, 0x58040138, 0x58042139, 0x81a41000,
- 0x58081403, 0x800810e0, 0x80081540, 0x480a601b,
- 0x59300013, 0x80100480, 0x0400101d, 0x8c64cd0e,
- 0x0400000c, 0x40101000, 0x41780800, 0x4c000000,
- 0x59300223, 0x4c100000, 0x0201f800, 0x00106c9d,
- 0x5c002000, 0x5c000000, 0x800409c0, 0x04020010,
- 0x59902808, 0x59303016, 0x80140480, 0x0400100c,
- 0x40002800, 0x80180480, 0x04001009, 0x48026016,
- 0x8464cd36, 0x59300014, 0x80100580, 0x04000003,
- 0x8464cd76, 0x80000580, 0x1c01f000, 0x82000540,
- 0x00000001, 0x1c01f000, 0x59bc00ea, 0x82000500,
- 0x00000007, 0x82000580, 0x00000001, 0x02000800,
- 0x0010032e, 0x5930080a, 0x5804100c, 0x480bc857,
- 0x800811c0, 0x04020003, 0x4930080c, 0x0401f01b,
- 0x59bc1031, 0x40081800, 0x800811c0, 0x02000800,
- 0x0010032e, 0x5808000a, 0x80040580, 0x04000004,
- 0x40081800, 0x58081000, 0x0401f7f8, 0x58082000,
- 0x49781000, 0x480a6001, 0x400c0000, 0x80080580,
- 0x04020006, 0x49337831, 0x48126000, 0x801021c0,
- 0x0402000d, 0x0401f00b, 0x48101800, 0x801021c0,
- 0x04020002, 0x480f7830, 0x59bc0831, 0x4807c857,
- 0x48066000, 0x49337831, 0x800409c0, 0x04020002,
- 0x49337830, 0x1c01f000, 0x4d300000, 0x4d2c0000,
- 0x0201f800, 0x00106e41, 0x598e600f, 0x4933c857,
- 0x813261c0, 0x04000049, 0x59c41004, 0x480bc857,
- 0x8c081500, 0x0400000a, 0x0201f800, 0x001050f7,
- 0x04020015, 0x0201f800, 0x00105223, 0x0402003f,
- 0x0201f800, 0x001065fd, 0x0401f03c, 0x82080500,
- 0x000001fe, 0x040207fb, 0x59c8010b, 0x4803c857,
- 0x8c000500, 0x040007f7, 0x42000000, 0x0010cf86,
- 0x0201f800, 0x0010bfb3, 0x0401fd13, 0x0400087f,
- 0x0401f02e, 0x598c0011, 0x80000540, 0x04020011,
- 0x59c408af, 0x82040480, 0x000003e8, 0x0402100d,
- 0x598c0811, 0x80040800, 0x48071811, 0x0201f800,
- 0x001065fd, 0x42000000, 0x0010ce7b, 0x0201f800,
- 0x0010bfb3, 0x0201f800, 0x0010410a, 0x0401f01b,
- 0x42000000, 0x0010cf3c, 0x0201f800, 0x0010bfb3,
- 0x0401fc76, 0x813261c0, 0x04020003, 0x0401f863,
- 0x0401f012, 0x59300407, 0x82000580, 0x00000003,
- 0x04020007, 0x59325809, 0x812e59c0, 0x04000004,
- 0x592c0209, 0x84000550, 0x48025a09, 0x0401f879,
- 0x4d380000, 0x42027000, 0x00000014, 0x0201f800,
- 0x00020bc1, 0x5c027000, 0x5c025800, 0x5c026000,
- 0x0201f000, 0x00106e2e, 0x59c40804, 0x83180400,
- 0x00107496, 0x50000000, 0x80040500, 0x1c01f000,
- 0x59c40804, 0x83180400, 0x0010749b, 0x50000000,
- 0x80040500, 0x1c01f000, 0x59c80840, 0x82040d00,
- 0x000e0000, 0x83180400, 0x001074a5, 0x50000000,
- 0x80040580, 0x1c01f000, 0x00000210, 0x00000420,
- 0x00000840, 0x00001080, 0x00002100, 0x00004000,
- 0x00008000, 0x00010000, 0x00020000, 0x00040000,
- 0x00080000, 0x00100000, 0x00200000, 0x00400000,
- 0x00800000, 0x00000000, 0x00020000, 0x00040000,
- 0x00060000, 0x00080000, 0x59900806, 0x80040120,
- 0x800c0480, 0x04021004, 0x82000540, 0x00000001,
- 0x0401f005, 0x82040c00, 0x00010000, 0x48072006,
- 0x80000580, 0x1c01f000, 0x417a3000, 0x0401ffd7,
- 0x04000006, 0x811a3000, 0x83180580, 0x00000005,
- 0x040207fb, 0x1c01f000, 0x81780080, 0x1c01f000,
- 0x40681000, 0x480bc857, 0x0201f800, 0x00106e41,
- 0x4df00000, 0x598c0800, 0x82040d80, 0x00000007,
- 0x04000002, 0x480b1800, 0x5c03e000, 0x02000800,
- 0x00106e2e, 0x1c01f000, 0x4803c856, 0x0201f800,
- 0x00106e41, 0x4df00000, 0x497b180f, 0x497b1803,
- 0x497b1810, 0x497b1811, 0x497b1812, 0x598c0000,
- 0x82000580, 0x00000003, 0x04000012, 0x59a80078,
- 0x8c00053e, 0x04000007, 0x59bc00e4, 0x8c000534,
- 0x04000004, 0x4a031800, 0x00000008, 0x0401f009,
- 0x836c0580, 0x00000002, 0x04020004, 0x4a031800,
- 0x00000005, 0x0401f003, 0x4a031800, 0x00000000,
- 0x5c03e000, 0x02000800, 0x00106e2e, 0x1c01f000,
- 0x59300004, 0x8c00050c, 0x04020003, 0x4a026203,
- 0x00000001, 0x1c01f000, 0x83180480, 0x00000005,
- 0x02021800, 0x0010032e, 0x491bc857, 0x811b20c8,
- 0x83932400, 0x0000bf32, 0x811ba0ca, 0x83d3a400,
- 0x00007600, 0x83180400, 0x00107508, 0x50034800,
- 0x811a28c2, 0x83162c00, 0x00006100, 0x1c01f000,
- 0x0010cdb5, 0x0010cdcc, 0x0010cde3, 0x0010cdfa,
- 0x0010ce11, 0x4933c857, 0x59300407, 0x82000c80,
- 0x00000014, 0x04021017, 0x04011000, 0x0c01f001,
- 0x00107528, 0x001075cd, 0x00107957, 0x001079b1,
- 0x001075cd, 0x00107957, 0x001079b1, 0x00107528,
- 0x001075cd, 0x00107528, 0x00107528, 0x00107528,
- 0x00107528, 0x00107528, 0x00107528, 0x00107528,
- 0x0010752f, 0x0010752f, 0x0010bab7, 0x0010bb86,
- 0x4803c857, 0x0201f800, 0x00106e41, 0x0201f800,
- 0x00106d91, 0x0201f000, 0x00106e2e, 0x42001000,
- 0x0010ce5b, 0x50081000, 0x4930100b, 0x58080002,
- 0x82000580, 0x00000100, 0x0402003c, 0x59325809,
- 0x812e59c0, 0x02000800, 0x0010032e, 0x492fc856,
- 0x5932680a, 0x83340580, 0x0010e23c, 0x04000023,
- 0x592c040c, 0x82000500, 0x0000e000, 0x04000004,
- 0x0201f800, 0x00107950, 0x0401f002, 0x0401fbfb,
- 0x592c000e, 0x82000500, 0x00000003, 0x04000007,
- 0x82000580, 0x00000003, 0x80000000, 0x58d00802,
- 0x80040540, 0x4801a002, 0x42001000, 0x0010ce5b,
- 0x50081000, 0x4930100a, 0x492c1009, 0x82d00400,
- 0x00000006, 0x48001003, 0x592c000e, 0x48001005,
- 0x592c000f, 0x48001006, 0x592c0010, 0x48001007,
- 0x0201f000, 0x00020016, 0x592c080b, 0x48066802,
- 0x82040500, 0x00ffff00, 0x04000007, 0x497a6a12,
- 0x59a8100f, 0x82081500, 0x00ffff00, 0x80080580,
- 0x040207d4, 0x82040d00, 0x000000ff, 0x800408d0,
- 0x48066a12, 0x0401f7cf, 0x1c01f000, 0x4d2c0000,
- 0x4d300000, 0x4c580000, 0x4c540000, 0x4c500000,
- 0x58325809, 0x812e59c0, 0x02000800, 0x0010032e,
- 0x58300002, 0x82000580, 0x00000100, 0x04020022,
- 0x5830000a, 0x5832600b, 0x81300d80, 0x04020012,
- 0x0401f834, 0x04020016, 0x592c080e, 0x82040c00,
- 0x00000003, 0x80040904, 0x4004b000, 0x4200a000,
- 0x0010cba5, 0x4050a800, 0x0201f800, 0x0010c0b0,
- 0x42001000, 0x0000dc00, 0x0201f800, 0x00107d64,
- 0x0401f007, 0x4803c857, 0x4933c857, 0x813261c0,
- 0x04000003, 0x0401f81f, 0x04000f95, 0x5c00a000,
- 0x5c00a800, 0x5c00b000, 0x5c026000, 0x5c025800,
- 0x1c01f000, 0x5830000a, 0x5832600b, 0x4a006002,
- 0x00000100, 0x4803c857, 0x4933c857, 0x81300d80,
- 0x040207ed, 0x0401f80f, 0x040207f1, 0x4803c857,
- 0x0201f800, 0x001101de, 0x80c40040, 0x02020800,
- 0x0010032e, 0x4a025a07, 0x00000002, 0x0201f800,
- 0x000203ef, 0x0201f800, 0x00107eb4, 0x0401f7e4,
- 0x0201f800, 0x00106e41, 0x4df00000, 0x598c000f,
- 0x81300580, 0x04020009, 0x598c0005, 0x81300580,
- 0x04020006, 0x5c03e000, 0x02000800, 0x00106e2e,
- 0x80000580, 0x1c01f000, 0x4803c857, 0x5c03e000,
- 0x02000800, 0x00106e2e, 0x82000540, 0x00000001,
- 0x1c01f000, 0x59300403, 0x82000c80, 0x00000058,
- 0x02021800, 0x0010032e, 0x83340d80, 0x0010e23c,
- 0x0402000a, 0x59300827, 0x48066802, 0x82041500,
- 0x00ffff00, 0x04020004, 0x800408d0, 0x48066a12,
- 0x0401f002, 0x497a6a12, 0x4803c857, 0x0c01f001,
- 0x00107761, 0x0010777f, 0x00107791, 0x001078ab,
- 0x0010786d, 0x00107871, 0x00107880, 0x00107894,
- 0x00107889, 0x00107894, 0x001078d5, 0x00107894,
- 0x0010791d, 0x00107894, 0x0010792b, 0x00107894,
- 0x00107889, 0x00107894, 0x0010792f, 0x00107640,
- 0x00107640, 0x00107640, 0x00107640, 0x00107640,
- 0x00107640, 0x00107640, 0x00107640, 0x00107640,
- 0x00107640, 0x00107640, 0x001079cf, 0x001079e7,
- 0x001079f1, 0x00107640, 0x00107a0a, 0x00107880,
- 0x00107640, 0x00107880, 0x00107894, 0x00107640,
- 0x00107791, 0x001078ab, 0x00107640, 0x00107a5a,
- 0x00107894, 0x00107640, 0x00107a6a, 0x00107894,
- 0x00107640, 0x00107889, 0x00107752, 0x00107642,
- 0x00107640, 0x00107a81, 0x00107ac1, 0x00107b47,
- 0x00107640, 0x00107b57, 0x0010787e, 0x00107b4a,
- 0x00107640, 0x00107a16, 0x00107ba6, 0x00107640,
- 0x00107bdb, 0x00107c2f, 0x00107640, 0x00107657,
- 0x001076cb, 0x001076d8, 0x00107640, 0x00107880,
- 0x00107640, 0x00107718, 0x00107723, 0x00107640,
- 0x00107640, 0x0010766b, 0x0010769e, 0x00107c6f,
- 0x00107cb0, 0x00107cd7, 0x00107640, 0x00107640,
- 0x00107640, 0x00107ca4, 0x00107b70, 0x00107a81,
- 0x00107640, 0x00107640, 0x00107640, 0x00107640,
- 0x00107640, 0x00107640, 0x00107640, 0x00107640,
- 0x0201f800, 0x0010032e, 0x0401fb00, 0x59325809,
- 0x592c000a, 0x4801a006, 0x592c000b, 0x4801a007,
- 0x592c000c, 0x4801a008, 0x592c000d, 0x4801a009,
- 0x592c000e, 0x4801a00a, 0x4979a00b, 0x592c080a,
- 0x82040d00, 0x00000fff, 0x80040904, 0x42001000,
- 0x0000dc00, 0x0201f000, 0x00107d64, 0x4a026202,
- 0x0000ffff, 0x0401fae9, 0x4d2c0000, 0x4a01a006,
- 0x05000000, 0x59325809, 0x592c000a, 0x4801a007,
- 0x592c000b, 0x4801a008, 0x592c000c, 0x4801a009,
- 0x5c025800, 0x42000800, 0x00000004, 0x42001000,
- 0x0000dc00, 0x0201f000, 0x00107d64, 0x4c580000,
- 0x4c500000, 0x4c540000, 0x4d2c0000, 0x0401fad3,
- 0x5930040b, 0x82000500, 0x00000003, 0x04000007,
- 0x82000580, 0x00000003, 0x80000000, 0x58d00802,
- 0x80040540, 0x4801a002, 0x59325809, 0x4200a800,
- 0x0010cba5, 0x592cb206, 0x8258b400, 0x00000003,
- 0x8058b104, 0x832ca400, 0x00000007, 0x0201f800,
- 0x0010c086, 0x40580000, 0x8054ac00, 0x592c0001,
- 0x80000540, 0x04000003, 0x40025800, 0x0401f7f2,
- 0x4200a000, 0x0010cba5, 0x4050a800, 0x5930b40b,
- 0x8258b400, 0x00000003, 0x8058b104, 0x40580800,
- 0x0201f800, 0x0010c0b0, 0x42001000, 0x0000dc00,
- 0x5c025800, 0x5c00a800, 0x5c00a000, 0x5c00b000,
- 0x0201f000, 0x00107d64, 0x4c580000, 0x4c500000,
- 0x4c540000, 0x4d2c0000, 0x42034800, 0x0010cb9e,
- 0x0401faac, 0x59325809, 0x592c0802, 0x4807c857,
- 0x40041000, 0x80040904, 0x82081500, 0x00000003,
- 0x04000008, 0x80040800, 0x82081580, 0x00000003,
- 0x80081000, 0x58d00002, 0x80080540, 0x4801a002,
- 0x4a025806, 0x02000000, 0x82d0ac00, 0x00000006,
- 0x592cb011, 0x832ca400, 0x00000006, 0x0201f800,
- 0x0010c086, 0x40580000, 0x8054ac00, 0x592e5801,
- 0x41780000, 0x812e5d40, 0x040207f6, 0x42001000,
+ 0x5c032000, 0x82000540, 0x00000001, 0x1c01f000,
+ 0x59300407, 0x82000580, 0x00000003, 0x04020008,
+ 0x0201f800, 0x00109c4d, 0x04000005, 0x59301009,
+ 0x58080409, 0x84000550, 0x48001409, 0x1c01f000,
+ 0x497b2807, 0x0201f800, 0x001071b0, 0x59c400af,
+ 0x800001c0, 0x04020005, 0x0201f800, 0x0010719d,
+ 0x0201f000, 0x00101529, 0x598c0011, 0x82001480,
+ 0x00000002, 0x04021007, 0x80000000, 0x48031811,
+ 0x80000580, 0x0201f800, 0x0010696e, 0x04000011,
+ 0x0401fed4, 0x0402000f, 0x0401ffde, 0x42000000,
+ 0x0010d557, 0x0201f800, 0x0010c50a, 0x0401fd9e,
+ 0x04000008, 0x0401fa59, 0x4d380000, 0x42027000,
+ 0x00000014, 0x0201f800, 0x00020b22, 0x5c027000,
+ 0x0201f800, 0x0010719d, 0x0201f000, 0x00101529,
+ 0x4d900000, 0x4dd00000, 0x4da40000, 0x4d140000,
+ 0x4d300000, 0x0201f800, 0x00106998, 0x0201f800,
+ 0x001071b0, 0x59c400af, 0x800001c0, 0x0400002b,
+ 0x0401fa48, 0x59926004, 0x4933c857, 0x59300004,
+ 0x8c000516, 0x0400000c, 0x0401fe77, 0x04020023,
+ 0x0201f800, 0x001070dc, 0x0201f800, 0x0010719d,
+ 0x42000800, 0x80000804, 0x0201f800, 0x00020a8e,
+ 0x0401f01a, 0x42001800, 0x00007530, 0x0401f9e9,
+ 0x04020004, 0x0201f800, 0x00106973, 0x0401f013,
+ 0x0401fe65, 0x04020011, 0x0401ffa6, 0x42000000,
+ 0x0010d558, 0x0201f800, 0x0010c50a, 0x59300004,
+ 0x8c00050c, 0x04020003, 0x4a026203, 0x00000003,
+ 0x4d380000, 0x42027000, 0x0000004a, 0x0201f800,
+ 0x00020b22, 0x5c027000, 0x0201f800, 0x0010719d,
+ 0x5c026000, 0x5c022800, 0x5c034800, 0x5c03a000,
+ 0x5c032000, 0x0201f000, 0x00101529, 0x4c600000,
+ 0x4d900000, 0x4dd00000, 0x4da40000, 0x4d140000,
+ 0x4d300000, 0x4d2c0000, 0x0201f800, 0x001071b0,
+ 0x0401fa0c, 0x59926004, 0x813261c0, 0x04000091,
+ 0x0201f800, 0x001052aa, 0x04020007, 0x4178c000,
+ 0x0201f800, 0x001081e4, 0x04000003, 0x4200c000,
+ 0x00000001, 0x42000000, 0x00001000, 0x50000000,
+ 0x82000480, 0x24320001, 0x04001038, 0x0201f800,
+ 0x00100e71, 0x59303004, 0x8c183536, 0x0400002f,
+ 0x42003000, 0x00001000, 0x80183040, 0x04000014,
+ 0x0201f800, 0x0010c62d, 0x040007fc, 0x0201f800,
+ 0x00100668, 0x42003000, 0x00007a15, 0x50183800,
+ 0x821c0500, 0x00007000, 0x04000009, 0x48035088,
+ 0x821c0500, 0xffff8fff, 0x44003000, 0x4a032832,
+ 0x000004b0, 0x4a0378e4, 0x02c00000, 0x4a030000,
+ 0x00000000, 0x0201f800, 0x00100ed5, 0x850e1d2e,
+ 0x42000000, 0x0010d5d2, 0x0201f800, 0x0010c50a,
+ 0x59325809, 0x812e59c0, 0x02000800, 0x0010032f,
+ 0x0401f861, 0x04000057, 0x59303004, 0x84183536,
+ 0x481a6004, 0x0401f032, 0x0201f800, 0x00106985,
+ 0x0400002c, 0x0401f04f, 0x0201f800, 0x00100ed5,
+ 0x8d0e1d2e, 0x040207f9, 0x0201f800, 0x001052aa,
+ 0x04020006, 0x8060c1c0, 0x04000004, 0x0201f800,
+ 0x0010820e, 0x0401f043, 0x0201f800, 0x00106985,
+ 0x04020040, 0x4933c857, 0x0401f94e, 0x04020019,
+ 0x0201f800, 0x00106998, 0x813261c0, 0x04000039,
+ 0x59325809, 0x812e59c0, 0x02000800, 0x0010032f,
+ 0x0201f800, 0x001052aa, 0x04020022, 0x59c40093,
+ 0x4803c857, 0x800001c0, 0x0402000a, 0x592c0209,
+ 0x84000550, 0x48025a09, 0x0201f800, 0x001053d2,
+ 0x04020028, 0x592c0209, 0x84000510, 0x48025a09,
+ 0x0201f800, 0x00106973, 0x0401f022, 0x42000000,
+ 0x0010d558, 0x0201f800, 0x0010c50a, 0x0401fd1a,
+ 0x592c0209, 0x84000550, 0x48025a09, 0x4d380000,
+ 0x42027000, 0x0000004a, 0x4a026203, 0x00000003,
+ 0x0201f800, 0x00020b22, 0x5c027000, 0x0401f011,
+ 0x59900006, 0x82000500, 0xffff0000, 0x040207ec,
+ 0x59c408af, 0x82040480, 0x000003e8, 0x040217e8,
+ 0x59900006, 0x82000400, 0x00010000, 0x48032006,
+ 0x0201f800, 0x00106973, 0x0201f800, 0x001041f5,
+ 0x5c025800, 0x5c026000, 0x5c022800, 0x5c034800,
+ 0x5c03a000, 0x5c032000, 0x5c00c000, 0x0201f000,
+ 0x0010719d, 0x4c5c0000, 0x4c640000, 0x5930bc07,
+ 0x5930c804, 0x825c0580, 0x00000003, 0x04000004,
+ 0x825c0580, 0x00000006, 0x04020031, 0x0201f800,
+ 0x00104a92, 0x0402002e, 0x8c64cd0e, 0x0402002c,
+ 0x0401fce5, 0x0201f800, 0x001070dc, 0x825c0580,
+ 0x00000003, 0x04020005, 0x8c64cd16, 0x0400000c,
+ 0x8464cd36, 0x0401f01b, 0x82640500, 0x0000001f,
+ 0x82000580, 0x00000005, 0x04000005, 0x0201f800,
+ 0x00020177, 0x8464cd4a, 0x0401f7f6, 0x0401f820,
+ 0x04020017, 0x48166012, 0x0201f800, 0x00100f5c,
+ 0x04020013, 0x8264cd00, 0xfff7ffdf, 0x592c0209,
+ 0x8c00051e, 0x04020011, 0x8464cd4a, 0x50201800,
+ 0x480e600b, 0x4832600c, 0x4822600d, 0x482a600e,
+ 0x8464cd7e, 0x48666004, 0x0401f842, 0x80000580,
+ 0x5c00c800, 0x5c00b800, 0x1c01f000, 0x82000540,
+ 0x00000001, 0x0401f7fb, 0x8400051e, 0x48025a09,
+ 0x0201f800, 0x00100f1a, 0x0401f7ed, 0x59302013,
+ 0x811808c2, 0x82040c00, 0x00006000, 0x58040101,
+ 0x82000500, 0xffff0000, 0x800001c0, 0x0400000b,
+ 0x811808ca, 0x82040c00, 0x00006000, 0x58040138,
+ 0x58042139, 0x81a41000, 0x58081403, 0x800810e0,
+ 0x80081540, 0x480a601b, 0x59300013, 0x80100480,
+ 0x0400101d, 0x8c64cd0e, 0x0400000c, 0x40101000,
+ 0x41780800, 0x4c000000, 0x59300223, 0x4c100000,
+ 0x0201f800, 0x00107000, 0x5c002000, 0x5c000000,
+ 0x800409c0, 0x04020010, 0x59902808, 0x59303016,
+ 0x80140480, 0x0400100c, 0x40002800, 0x80180480,
+ 0x04001009, 0x48026016, 0x8464cd36, 0x59300014,
+ 0x80100580, 0x04000003, 0x8464cd76, 0x80000580,
+ 0x1c01f000, 0x82000540, 0x00000001, 0x1c01f000,
+ 0x59bc00ea, 0x82000500, 0x00000007, 0x82000580,
+ 0x00000001, 0x02000800, 0x0010032f, 0x5930080a,
+ 0x5804100c, 0x480bc857, 0x800811c0, 0x04020003,
+ 0x4930080c, 0x0401f01b, 0x59bc1031, 0x40081800,
+ 0x800811c0, 0x02000800, 0x0010032f, 0x5808000a,
+ 0x80040580, 0x04000004, 0x40081800, 0x58081000,
+ 0x0401f7f8, 0x58082000, 0x49781000, 0x480a6001,
+ 0x400c0000, 0x80080580, 0x04020006, 0x49337831,
+ 0x48126000, 0x801021c0, 0x0402000d, 0x0401f00b,
+ 0x48101800, 0x801021c0, 0x04020002, 0x480f7830,
+ 0x59bc0831, 0x4807c857, 0x48066000, 0x49337831,
+ 0x800409c0, 0x04020002, 0x49337830, 0x1c01f000,
+ 0x4d300000, 0x4d2c0000, 0x0201f800, 0x001071b0,
+ 0x598e600f, 0x4933c857, 0x813261c0, 0x04000049,
+ 0x59c41004, 0x480bc857, 0x8c081500, 0x0400000a,
+ 0x0201f800, 0x001052aa, 0x04020015, 0x0201f800,
+ 0x001053d2, 0x0402003f, 0x0201f800, 0x0010696e,
+ 0x0401f03c, 0x82080500, 0x000001fe, 0x040207fb,
+ 0x59c8010b, 0x4803c857, 0x8c000500, 0x040007f7,
+ 0x42000000, 0x0010d5a1, 0x0201f800, 0x0010c50a,
+ 0x0401fd14, 0x0400087f, 0x0401f02e, 0x598c0011,
+ 0x80000540, 0x04020011, 0x59c408af, 0x82040480,
+ 0x000003e8, 0x0402100d, 0x598c0811, 0x80040800,
+ 0x48071811, 0x0201f800, 0x0010696e, 0x42000000,
+ 0x0010d491, 0x0201f800, 0x0010c50a, 0x0201f800,
+ 0x001041f5, 0x0401f01b, 0x42000000, 0x0010d557,
+ 0x0201f800, 0x0010c50a, 0x0401fc77, 0x813261c0,
+ 0x04020003, 0x0401f863, 0x0401f012, 0x59300407,
+ 0x82000580, 0x00000003, 0x04020007, 0x59325809,
+ 0x812e59c0, 0x04000004, 0x592c0209, 0x84000550,
+ 0x48025a09, 0x0401f879, 0x4d380000, 0x42027000,
+ 0x00000014, 0x0201f800, 0x00020b22, 0x5c027000,
+ 0x5c025800, 0x5c026000, 0x0201f000, 0x0010719d,
+ 0x59c40804, 0x83180400, 0x00107804, 0x50000000,
+ 0x80040500, 0x1c01f000, 0x59c40804, 0x83180400,
+ 0x00107809, 0x50000000, 0x80040500, 0x1c01f000,
+ 0x59c80840, 0x82040d00, 0x000e0000, 0x83180400,
+ 0x00107813, 0x50000000, 0x80040580, 0x1c01f000,
+ 0x00000210, 0x00000420, 0x00000840, 0x00001080,
+ 0x00002100, 0x00004000, 0x00008000, 0x00010000,
+ 0x00020000, 0x00040000, 0x00080000, 0x00100000,
+ 0x00200000, 0x00400000, 0x00800000, 0x00000000,
+ 0x00020000, 0x00040000, 0x00060000, 0x00080000,
+ 0x59900806, 0x80040120, 0x800c0480, 0x04021004,
+ 0x82000540, 0x00000001, 0x0401f005, 0x82040c00,
+ 0x00010000, 0x48072006, 0x80000580, 0x1c01f000,
+ 0x417a3000, 0x0401ffd7, 0x04000006, 0x811a3000,
+ 0x83180580, 0x00000005, 0x040207fb, 0x1c01f000,
+ 0x81780080, 0x1c01f000, 0x40681000, 0x480bc857,
+ 0x0201f800, 0x001071b0, 0x4df00000, 0x598c0800,
+ 0x82040d80, 0x00000007, 0x04000002, 0x480b1800,
+ 0x5c03e000, 0x02000800, 0x0010719d, 0x1c01f000,
+ 0x4803c856, 0x0201f800, 0x001071b0, 0x4df00000,
+ 0x497b180f, 0x497b1803, 0x497b1810, 0x497b1811,
+ 0x497b1812, 0x598c0000, 0x82000580, 0x00000003,
+ 0x04000012, 0x59a80086, 0x8c00053e, 0x04000007,
+ 0x59bc00e4, 0x8c000534, 0x04000004, 0x4a031800,
+ 0x00000008, 0x0401f009, 0x836c0580, 0x00000002,
+ 0x04020004, 0x4a031800, 0x00000005, 0x0401f003,
+ 0x4a031800, 0x00000000, 0x5c03e000, 0x02000800,
+ 0x0010719d, 0x1c01f000, 0x59300004, 0x8c00050c,
+ 0x04020003, 0x4a026203, 0x00000001, 0x1c01f000,
+ 0x83180480, 0x00000005, 0x02021800, 0x0010032f,
+ 0x491bc857, 0x811b20c8, 0x83932400, 0x0000bf32,
+ 0x811ba0ca, 0x83d3a400, 0x00007600, 0x83180400,
+ 0x00107876, 0x50034800, 0x811a28c2, 0x83162c00,
+ 0x00006100, 0x1c01f000, 0x0010d3cb, 0x0010d3e2,
+ 0x0010d3f9, 0x0010d410, 0x0010d427, 0x4933c857,
+ 0x59300407, 0x82000c80, 0x00000014, 0x04021017,
+ 0x04011000, 0x0c01f001, 0x00107896, 0x00107952,
+ 0x00107cd2, 0x00107d2c, 0x00107952, 0x00107cd2,
+ 0x00107d2c, 0x00107896, 0x00107952, 0x00107896,
+ 0x00107896, 0x00107896, 0x00107896, 0x00107896,
+ 0x00107896, 0x00107896, 0x0010789d, 0x0010789d,
+ 0x0010c00c, 0x0010c0db, 0x4803c857, 0x0201f800,
+ 0x001071b0, 0x0201f800, 0x001070fc, 0x0201f000,
+ 0x0010719d, 0x42001000, 0x0010d471, 0x50081000,
+ 0x4930100b, 0x58080002, 0x82000580, 0x00000100,
+ 0x04020043, 0x59325809, 0x812e59c0, 0x02000800,
+ 0x0010032f, 0x492fc856, 0x5932680a, 0x83340580,
+ 0x0010e85a, 0x0400002a, 0x592c040c, 0x82000500,
+ 0x0000e000, 0x04000004, 0x0201f800, 0x00107cca,
+ 0x0401f003, 0x0201f800, 0x00107cba, 0x592c040a,
+ 0x82000500, 0x000000ff, 0x82000580, 0x00000003,
+ 0x0400082c, 0x592c000e, 0x82000500, 0x00000003,
+ 0x04000007, 0x82000580, 0x00000003, 0x80000000,
+ 0x58d00802, 0x80040540, 0x4801a002, 0x42001000,
+ 0x0010d471, 0x50081000, 0x4930100a, 0x492c1009,
+ 0x82d00400, 0x00000006, 0x48001003, 0x592c000e,
+ 0x48001005, 0x592c000f, 0x48001006, 0x592c0010,
+ 0x48001007, 0x0201f000, 0x00020017, 0x592c080b,
+ 0x48066802, 0x82040500, 0x00ffff00, 0x04000007,
+ 0x497a6a12, 0x59a81015, 0x82081500, 0x00ffff00,
+ 0x80080580, 0x040207cd, 0x82040d00, 0x000000ff,
+ 0x800408d0, 0x48066a12, 0x0401f7c8, 0x1c01f000,
+ 0x59a80221, 0x8c000508, 0x0400000d, 0x59a80025,
+ 0x82000500, 0x0000ffff, 0x59c40880, 0x80040d80,
+ 0x04000007, 0x497b8880, 0x4c000000, 0x0201f800,
+ 0x00101653, 0x5c000000, 0x48038880, 0x1c01f000,
+ 0x4d2c0000, 0x4d300000, 0x4c580000, 0x4c540000,
+ 0x4c500000, 0x58325809, 0x812e59c0, 0x02000800,
+ 0x0010032f, 0x58300002, 0x82000580, 0x00000100,
+ 0x04020022, 0x5830000a, 0x5832600b, 0x81300d80,
+ 0x04020012, 0x0401f834, 0x04020016, 0x592c080e,
+ 0x82040c00, 0x00000003, 0x80040904, 0x4004b000,
+ 0x4200a000, 0x0010d1bb, 0x4050a800, 0x0201f800,
+ 0x0010c607, 0x42001000, 0x0000dc00, 0x0201f800,
+ 0x001080fb, 0x0401f007, 0x4803c857, 0x4933c857,
+ 0x813261c0, 0x04000003, 0x0401f81f, 0x04000f7e,
+ 0x5c00a000, 0x5c00a800, 0x5c00b000, 0x5c026000,
+ 0x5c025800, 0x1c01f000, 0x5830000a, 0x5832600b,
+ 0x4a006002, 0x00000100, 0x4803c857, 0x4933c857,
+ 0x81300d80, 0x040207ed, 0x0401f80f, 0x040207f1,
+ 0x4803c857, 0x0201f800, 0x001108df, 0x80c40040,
+ 0x02020800, 0x0010032f, 0x4a025a07, 0x00000002,
+ 0x0201f800, 0x00020401, 0x0201f800, 0x00108253,
+ 0x0401f7e4, 0x0201f800, 0x001071b0, 0x4df00000,
+ 0x598c000f, 0x81300580, 0x04020009, 0x598c0005,
+ 0x81300580, 0x04020006, 0x5c03e000, 0x02000800,
+ 0x0010719d, 0x80000580, 0x1c01f000, 0x4803c857,
+ 0x5c03e000, 0x02000800, 0x0010719d, 0x82000540,
+ 0x00000001, 0x1c01f000, 0x59300403, 0x82000c80,
+ 0x00000058, 0x02021800, 0x0010032f, 0x83340d80,
+ 0x0010e85a, 0x0402000a, 0x59300827, 0x48066802,
+ 0x82041500, 0x00ffff00, 0x04020004, 0x800408d0,
+ 0x48066a12, 0x0401f002, 0x497a6a12, 0x4803c857,
+ 0x0c01f001, 0x00107ae6, 0x00107b04, 0x00107b16,
+ 0x00107c22, 0x00107be4, 0x00107be8, 0x00107bf7,
+ 0x00107c0b, 0x00107c00, 0x00107c0b, 0x00107c4c,
+ 0x00107c0b, 0x00107c94, 0x00107c0b, 0x00107ca2,
+ 0x00107c0b, 0x00107c00, 0x00107c0b, 0x00107ca6,
+ 0x001079c5, 0x001079c5, 0x001079c5, 0x001079c5,
+ 0x001079c5, 0x001079c5, 0x001079c5, 0x001079c5,
+ 0x001079c5, 0x001079c5, 0x001079c5, 0x00107d4a,
+ 0x00107d62, 0x00107d6c, 0x001079c5, 0x00107d85,
+ 0x00107bf7, 0x001079c5, 0x00107bf7, 0x00107c0b,
+ 0x001079c5, 0x00107b16, 0x00107c22, 0x001079c5,
+ 0x00107dd5, 0x00107c0b, 0x001079c5, 0x00107de5,
+ 0x00107c0b, 0x001079c5, 0x00107c00, 0x00107ad7,
+ 0x001079c7, 0x001079c5, 0x00107e04, 0x00107e48,
+ 0x00107edc, 0x001079c5, 0x00107eec, 0x00107bf5,
+ 0x00107edf, 0x001079c5, 0x00107d91, 0x00107f3b,
+ 0x001079c5, 0x00107f70, 0x00107fc4, 0x001079c5,
+ 0x001079dc, 0x00107a50, 0x00107a5d, 0x001079c5,
+ 0x00107bf7, 0x001079c5, 0x00107a9d, 0x00107aa8,
+ 0x001079c5, 0x001079c5, 0x001079f0, 0x00107a23,
+ 0x00108004, 0x00108045, 0x0010806c, 0x001079c5,
+ 0x001079c5, 0x001079c5, 0x00108039, 0x00107f05,
+ 0x00107e04, 0x001079c5, 0x001079c5, 0x001079c5,
+ 0x001079c5, 0x001079c5, 0x001079c5, 0x001079c5,
+ 0x001079c5, 0x0201f800, 0x0010032f, 0x0401faf3,
+ 0x59325809, 0x592c000a, 0x4801a006, 0x592c000b,
+ 0x4801a007, 0x592c000c, 0x4801a008, 0x592c000d,
+ 0x4801a009, 0x592c000e, 0x4801a00a, 0x4979a00b,
+ 0x592c080a, 0x82040d00, 0x00000fff, 0x80040904,
+ 0x42001000, 0x0000dc00, 0x0201f000, 0x001080fb,
+ 0x4a026202, 0x0000ffff, 0x0401fadc, 0x4d2c0000,
+ 0x4a01a006, 0x05000000, 0x59325809, 0x592c000a,
+ 0x4801a007, 0x592c000b, 0x4801a008, 0x592c000c,
+ 0x4801a009, 0x5c025800, 0x42000800, 0x00000004,
+ 0x42001000, 0x0000dc00, 0x0201f000, 0x001080fb,
+ 0x4c580000, 0x4c500000, 0x4c540000, 0x4d2c0000,
+ 0x0401fac6, 0x5930040b, 0x82000500, 0x00000003,
+ 0x04000007, 0x82000580, 0x00000003, 0x80000000,
+ 0x58d00802, 0x80040540, 0x4801a002, 0x59325809,
+ 0x4200a800, 0x0010d1bb, 0x592cb206, 0x8258b400,
+ 0x00000003, 0x8058b104, 0x832ca400, 0x00000007,
+ 0x0201f800, 0x0010c5dd, 0x40580000, 0x8054ac00,
+ 0x592c0001, 0x80000540, 0x04000003, 0x40025800,
+ 0x0401f7f2, 0x4200a000, 0x0010d1bb, 0x4050a800,
+ 0x5930b40b, 0x8258b400, 0x00000003, 0x8058b104,
+ 0x40580800, 0x0201f800, 0x0010c607, 0x42001000,
0x0000dc00, 0x5c025800, 0x5c00a800, 0x5c00a000,
- 0x5c00b000, 0x0201f000, 0x00107d64, 0x0401fa77,
- 0x4a01a006, 0x78000000, 0x5930001d, 0x840001c0,
- 0x4801a407, 0x4979a207, 0x42000800, 0x00000002,
- 0x42001000, 0x0000dc00, 0x0201f000, 0x00107d64,
- 0x4c580000, 0x4c540000, 0x4c500000, 0x0401fa75,
- 0x4a01a006, 0x02000000, 0x5932481c, 0x59240001,
- 0x4801a008, 0x59240002, 0x4801a009, 0x59240003,
- 0x4801a00a, 0x59240004, 0x4801a00b, 0x5930001d,
- 0x82000d80, 0x0000e000, 0x04000012, 0x82000d80,
- 0x0000df00, 0x04000006, 0x4a01a407, 0x00000010,
- 0x42000800, 0x00000006, 0x0401f01f, 0x42001800,
- 0x0010cb46, 0x0201f800, 0x00100533, 0x42000000,
- 0x0000df00, 0x4200a000, 0x0010cb46, 0x0401f009,
- 0x42001800, 0x0010cb53, 0x0201f800, 0x00100533,
- 0x42000000, 0x0000e000, 0x4200a000, 0x0010cb53,
- 0x82000540, 0x00000010, 0x4801a407, 0x4a01a207,
- 0x00000034, 0x4200b000, 0x0000000d, 0x82d0ac00,
- 0x0000000c, 0x0201f800, 0x0010c086, 0x42000800,
- 0x00000013, 0x42001000, 0x0000dc00, 0x5c00a000,
- 0x5c00a800, 0x5c00b000, 0x0201f000, 0x00107d64,
- 0x0401fa2a, 0x4a01a006, 0x63000028, 0x5930001d,
- 0x4801a007, 0x42000800, 0x00000002, 0x42001000,
- 0x0000dc00, 0x0201f000, 0x00107d64, 0x0401fa2d,
- 0x41780000, 0x41780800, 0x42002000, 0x00080000,
- 0x0c01f81b, 0x80000000, 0x80040800, 0x42001000,
- 0x0000000c, 0x59841802, 0x8c0c1d00, 0x04020008,
- 0x42002000, 0x00050000, 0x0c01f811, 0x80000000,
- 0x80040800, 0x82081400, 0x00000004, 0x82080540,
- 0x02000000, 0x4801a006, 0x800408e0, 0x5930001d,
- 0x80040540, 0x4801a007, 0x80080904, 0x42001000,
- 0x0000dc00, 0x0201f000, 0x00107d64, 0x00107748,
- 0x0010774a, 0x0010774c, 0x0010774e, 0x00107750,
- 0x4811a008, 0x1c01f000, 0x4811a009, 0x1c01f000,
- 0x4811a00a, 0x1c01f000, 0x4811a00b, 0x1c01f000,
- 0x4811a00c, 0x1c01f000, 0x4a02600a, 0x0010e23c,
- 0x59a8000f, 0x82000500, 0x000000ff, 0x800000d0,
- 0x42026800, 0x0010e23c, 0x48026a12, 0x0401fa49,
- 0x41780800, 0x42001000, 0x00005c00, 0x0201f000,
- 0x00107d64, 0x0401f9e1, 0x4a01a006, 0x52000000,
- 0x4979a007, 0x5932481c, 0x59240400, 0x82000500,
- 0x00000003, 0x04000006, 0x59240400, 0x80000110,
- 0x0201f800, 0x001015b3, 0x4805a007, 0x59240001,
- 0x4801a008, 0x59240002, 0x4801a009, 0x59240003,
- 0x4801a00a, 0x59240004, 0x4801a00b, 0x59240005,
- 0x4801a00c, 0x42000800, 0x00000007, 0x42001000,
- 0x0000dc00, 0x0201f000, 0x00107d64, 0x4a026202,
- 0x0000ffff, 0x0401f9c1, 0x4a01a006, 0x05000000,
- 0x5932481c, 0x59240005, 0x4801a007, 0x59240001,
- 0x59240802, 0x4801a008, 0x4805a009, 0x42000800,
- 0x00000004, 0x42001000, 0x0000dc00, 0x0201f000,
- 0x00107d64, 0x4a026202, 0x0000ffff, 0x0401f9af,
- 0x4d3c0000, 0x417a7800, 0x0201f800, 0x0010498c,
- 0x5c027800, 0x4a01a006, 0x03000000, 0x59340403,
- 0x82000580, 0x000007fe, 0x04020081, 0x4a01a006,
- 0x04000000, 0x59a8021b, 0x8c000506, 0x04000004,
- 0x5930081c, 0x58040408, 0x4801a001, 0x81a40800,
- 0x4a000800, 0x22fffffe, 0x5934000a, 0x84000500,
- 0x4802680a, 0x59a8021b, 0x8c000508, 0x04000010,
- 0x59a8001f, 0x4801a007, 0x59a80020, 0x82000500,
- 0x07deffff, 0x599c0818, 0x8c040d16, 0x04000002,
- 0x8400056a, 0x4801a008, 0x4a01a009, 0x00002710,
- 0x59a80022, 0x4801a00a, 0x0401f049, 0x59a8001f,
- 0x59a8121b, 0x8c081506, 0x04000003, 0x82000500,
- 0xffff0000, 0x4801a007, 0x0201f800, 0x001050f7,
- 0x04020013, 0x59a80878, 0x8c040d3e, 0x04020010,
- 0x59300c03, 0x82041580, 0x00000051, 0x0400000c,
- 0x497b8880, 0x82000500, 0x0000ffff, 0x4c000000,
- 0x0201f800, 0x001015e5, 0x5c000000, 0x48038880,
- 0x41780800, 0x0201f800, 0x00101bdf, 0x59a80020,
- 0x0201f800, 0x001050f7, 0x04020006, 0x82000500,
- 0xb7ffffff, 0x82000540, 0x80000000, 0x0401f003,
- 0x82000500, 0x3fffffff, 0x599c0818, 0x8c040d16,
- 0x04000002, 0x8400056a, 0x8d0e1d10, 0x04000019,
- 0x59300c03, 0x82041580, 0x00000051, 0x04000015,
- 0x82041580, 0x00000031, 0x04000012, 0x4c580000,
- 0x4c500000, 0x4c540000, 0x4200b000, 0x00000004,
- 0x4200a000, 0x0010cfcb, 0x82d0ac00, 0x0000001f,
- 0x4c000000, 0x0201f800, 0x0010c086, 0x5c000000,
- 0x5c00a800, 0x5c00a000, 0x5c00b000, 0x8400057a,
- 0x4801a008, 0x4979a009, 0x4979a00a, 0x59240001,
- 0x59240802, 0x4801a00b, 0x4805a00c, 0x59240003,
- 0x59240804, 0x4801a00d, 0x4805a00e, 0x4979a00f,
- 0x4979a010, 0x4979a011, 0x4979a012, 0x4979a013,
- 0x4979a014, 0x4979a015, 0x4979a016, 0x59a80023,
- 0x84000576, 0x4801a017, 0x59a80024, 0x4801a018,
- 0x4979a019, 0x4979a01a, 0x0401f049, 0x59a8021b,
- 0x8c000508, 0x0400000d, 0x59a8001f, 0x82000500,
- 0x0000ffff, 0x59c40880, 0x80040d80, 0x04000007,
- 0x497b8880, 0x4c000000, 0x0201f800, 0x001015e5,
- 0x5c000000, 0x48038880, 0x59a8001f, 0x4801a007,
- 0x4c640000, 0x4d2c0000, 0x59a8c820, 0x0201f800,
- 0x0010989f, 0x0400000e, 0x0201f800, 0x00109f51,
- 0x0402000b, 0x592c0208, 0x8c00050e, 0x04000008,
- 0x8264cd00, 0x0000ffff, 0x592c000a, 0x82000500,
- 0xffff0000, 0x8064cd40, 0x0401f006, 0x59a80a1b,
- 0x82040d00, 0x00000030, 0x04000002, 0x8464cd36,
- 0x4865a008, 0x5c025800, 0x5c00c800, 0x59a80021,
- 0x4801a009, 0x59a80022, 0x4801a00a, 0x59240001,
- 0x59240802, 0x4801a00b, 0x4805a00c, 0x59240003,
- 0x59240804, 0x4801a00d, 0x4805a00e, 0x4979a00f,
- 0x4979a010, 0x4979a011, 0x4979a012, 0x4979a013,
- 0x4979a014, 0x4979a015, 0x4979a016, 0x59a80023,
- 0x4801a017, 0x59a80024, 0x4801a018, 0x59a80025,
- 0x4801a019, 0x59a80026, 0x4801a01a, 0x42000800,
- 0x0000001d, 0x42001000, 0x0000dc00, 0x0201f000,
- 0x00107d64, 0x0401f8d5, 0x4a01a006, 0x50000000,
- 0x0401f7af, 0x0401f8d1, 0x4a01a006, 0x21100014,
- 0x4979a007, 0x4979a008, 0x4979a009, 0x4979a00a,
- 0x42000800, 0x00000005, 0x42001000, 0x0000dc00,
- 0x0201f000, 0x00107d64, 0x0401f8cb, 0x0401f002,
- 0x0401f8d0, 0x4a01a006, 0x02000000, 0x42000800,
- 0x00000001, 0x42001000, 0x0000dc00, 0x0201f000,
- 0x00107d64, 0x0401f8c7, 0x4a01a006, 0x02000000,
- 0x59300403, 0x82000580, 0x00000031, 0x04020790,
- 0x81a40800, 0x4a000801, 0x00fffffe, 0x0401f71a,
- 0x0401f8bc, 0x4a01a006, 0x01000000, 0x5930041b,
- 0x80000540, 0x04000003, 0x4801a407, 0x0401f003,
- 0x4a01a407, 0x00000003, 0x5930021b, 0x80000540,
- 0x04000003, 0x4801a207, 0x0401f003, 0x4a01a207,
- 0x00002a00, 0x42000800, 0x00000002, 0x42001000,
- 0x0000dc00, 0x0201f000, 0x00107d64, 0x4a026202,
- 0x0000ffff, 0x0401f895, 0x4a01a406, 0x00002010,
- 0x4a01a206, 0x00000014, 0x4a01a407, 0x00000800,
- 0x4a01a207, 0x00002000, 0x42000000, 0x00000400,
+ 0x5c00b000, 0x0201f000, 0x001080fb, 0x4c580000,
+ 0x4c500000, 0x4c540000, 0x4d2c0000, 0x42034800,
+ 0x0010d1b4, 0x0401faa1, 0x59325809, 0x592c0802,
+ 0x4807c857, 0x40041000, 0x80040904, 0x82081500,
+ 0x00000003, 0x04000008, 0x80040800, 0x82081580,
+ 0x00000003, 0x80081000, 0x58d00002, 0x80080540,
+ 0x4801a002, 0x4a025806, 0x02000000, 0x82d0ac00,
+ 0x00000006, 0x592cb011, 0x832ca400, 0x00000006,
+ 0x0201f800, 0x0010c5dd, 0x40580000, 0x8054ac00,
+ 0x592e5801, 0x41780000, 0x812e5d40, 0x040207f6,
+ 0x42001000, 0x0000dc00, 0x5c025800, 0x5c00a800,
+ 0x5c00a000, 0x5c00b000, 0x0201f000, 0x001080fb,
+ 0x0401fa6a, 0x4a01a006, 0x78000000, 0x5930001d,
+ 0x840001c0, 0x4801a407, 0x4979a207, 0x42000800,
+ 0x00000002, 0x42001000, 0x0000dc00, 0x0201f000,
+ 0x001080fb, 0x4c580000, 0x4c540000, 0x4c500000,
+ 0x0401fa6a, 0x4a01a006, 0x02000000, 0x5932481c,
+ 0x59240001, 0x4801a008, 0x59240002, 0x4801a009,
+ 0x59240003, 0x4801a00a, 0x59240004, 0x4801a00b,
+ 0x5930001d, 0x82000d80, 0x0000e000, 0x04000012,
+ 0x82000d80, 0x0000df00, 0x04000006, 0x4a01a407,
+ 0x00000010, 0x42000800, 0x00000006, 0x0401f01f,
+ 0x42001800, 0x0010d15c, 0x0201f800, 0x00100547,
+ 0x42000000, 0x0000df00, 0x4200a000, 0x0010d15c,
+ 0x0401f009, 0x42001800, 0x0010d169, 0x0201f800,
+ 0x00100547, 0x42000000, 0x0000e000, 0x4200a000,
+ 0x0010d169, 0x82000540, 0x00000010, 0x4801a407,
+ 0x4a01a207, 0x00000034, 0x4200b000, 0x0000000d,
+ 0x82d0ac00, 0x0000000c, 0x0201f800, 0x0010c5dd,
+ 0x42000800, 0x00000013, 0x42001000, 0x0000dc00,
+ 0x5c00a000, 0x5c00a800, 0x5c00b000, 0x0201f000,
+ 0x001080fb, 0x0401fa1d, 0x4a01a006, 0x63000028,
+ 0x5930001d, 0x4801a007, 0x42000800, 0x00000002,
+ 0x42001000, 0x0000dc00, 0x0201f000, 0x001080fb,
+ 0x0401fa22, 0x41780000, 0x41780800, 0x42002000,
+ 0x00080000, 0x0c01f81b, 0x80000000, 0x80040800,
+ 0x42001000, 0x0000000c, 0x59841802, 0x8c0c1d00,
+ 0x04020008, 0x42002000, 0x00050000, 0x0c01f811,
+ 0x80000000, 0x80040800, 0x82081400, 0x00000004,
+ 0x82080540, 0x02000000, 0x4801a006, 0x800408e0,
+ 0x5930001d, 0x80040540, 0x4801a007, 0x80080904,
+ 0x42001000, 0x0000dc00, 0x0201f000, 0x001080fb,
+ 0x00107acd, 0x00107acf, 0x00107ad1, 0x00107ad3,
+ 0x00107ad5, 0x4811a008, 0x1c01f000, 0x4811a009,
+ 0x1c01f000, 0x4811a00a, 0x1c01f000, 0x4811a00b,
+ 0x1c01f000, 0x4811a00c, 0x1c01f000, 0x4a02600a,
+ 0x0010e85a, 0x59a80015, 0x82000500, 0x000000ff,
+ 0x800000d0, 0x42026800, 0x0010e85a, 0x48026a12,
+ 0x0401fa3f, 0x41780800, 0x42001000, 0x00005c00,
+ 0x0201f000, 0x001080fb, 0x0401f9d4, 0x4a01a006,
+ 0x52000000, 0x4979a007, 0x5932481c, 0x59240400,
+ 0x82000500, 0x00000003, 0x04000006, 0x59240400,
+ 0x80000110, 0x0201f800, 0x00101621, 0x4805a007,
+ 0x59240001, 0x4801a008, 0x59240002, 0x4801a009,
+ 0x59240003, 0x4801a00a, 0x59240004, 0x4801a00b,
+ 0x59240005, 0x4801a00c, 0x42000800, 0x00000007,
+ 0x42001000, 0x0000dc00, 0x0201f000, 0x001080fb,
+ 0x4a026202, 0x0000ffff, 0x0401f9b4, 0x4a01a006,
+ 0x05000000, 0x5932481c, 0x59240005, 0x4801a007,
+ 0x59240001, 0x59240802, 0x4801a008, 0x4805a009,
+ 0x42000800, 0x00000004, 0x42001000, 0x0000dc00,
+ 0x0201f000, 0x001080fb, 0x4a026202, 0x0000ffff,
+ 0x0401f9a2, 0x4d3c0000, 0x417a7800, 0x0201f800,
+ 0x00104ae2, 0x5c027800, 0x4a01a006, 0x03000000,
+ 0x59340403, 0x82000580, 0x000007fe, 0x04020081,
+ 0x4a01a006, 0x04000000, 0x59a80221, 0x8c000506,
+ 0x04000004, 0x5930081c, 0x58040408, 0x4801a001,
+ 0x81a40800, 0x4a000800, 0x22fffffe, 0x5934000a,
+ 0x84000500, 0x4802680a, 0x59a80221, 0x8c000508,
+ 0x04000010, 0x59a80025, 0x4801a007, 0x59a80026,
+ 0x82000500, 0x07deffff, 0x599c0818, 0x8c040d16,
+ 0x04000002, 0x8400056a, 0x4801a008, 0x4a01a009,
+ 0x00002710, 0x59a80028, 0x4801a00a, 0x0401f049,
+ 0x59a80025, 0x59a81221, 0x8c081506, 0x04000003,
+ 0x82000500, 0xffff0000, 0x4801a007, 0x0201f800,
+ 0x001052aa, 0x04020013, 0x59a80886, 0x8c040d3e,
+ 0x04020010, 0x59300c03, 0x82041580, 0x00000051,
+ 0x0400000c, 0x497b8880, 0x82000500, 0x0000ffff,
+ 0x4c000000, 0x0201f800, 0x00101653, 0x5c000000,
+ 0x48038880, 0x41780800, 0x0201f800, 0x00101c4d,
+ 0x59a80026, 0x0201f800, 0x001052aa, 0x04020006,
+ 0x82000500, 0xb7ffffff, 0x82000540, 0x80000000,
+ 0x0401f003, 0x82000500, 0x3fffffff, 0x599c0818,
+ 0x8c040d16, 0x04000002, 0x8400056a, 0x8d0e1d10,
+ 0x04000019, 0x59300c03, 0x82041580, 0x00000051,
+ 0x04000015, 0x82041580, 0x00000031, 0x04000012,
+ 0x4c580000, 0x4c500000, 0x4c540000, 0x4200b000,
+ 0x00000004, 0x4200a000, 0x0010d5e9, 0x82d0ac00,
+ 0x0000001f, 0x4c000000, 0x0201f800, 0x0010c5dd,
+ 0x5c000000, 0x5c00a800, 0x5c00a000, 0x5c00b000,
+ 0x8400057a, 0x4801a008, 0x4979a009, 0x4979a00a,
+ 0x59240001, 0x59240802, 0x4801a00b, 0x4805a00c,
+ 0x59240003, 0x59240804, 0x4801a00d, 0x4805a00e,
+ 0x4979a00f, 0x4979a010, 0x4979a011, 0x4979a012,
+ 0x4979a013, 0x4979a014, 0x4979a015, 0x4979a016,
+ 0x59a80029, 0x84000576, 0x4801a017, 0x59a8002a,
+ 0x4801a018, 0x4979a019, 0x4979a01a, 0x0401f03b,
+ 0x0401fd44, 0x59a80025, 0x4801a007, 0x4c640000,
+ 0x4d2c0000, 0x59a8c826, 0x0201f800, 0x00109c4d,
+ 0x0400000e, 0x0201f800, 0x0010a314, 0x0402000b,
+ 0x592c0208, 0x8c00050e, 0x04000008, 0x8264cd00,
+ 0x0000ffff, 0x592c000a, 0x82000500, 0xffff0000,
+ 0x8064cd40, 0x0401f006, 0x59a80a21, 0x82040d00,
+ 0x00000030, 0x04000002, 0x8464cd36, 0x4865a008,
+ 0x5c025800, 0x5c00c800, 0x59a80027, 0x4801a009,
+ 0x59a80028, 0x4801a00a, 0x59240001, 0x59240802,
+ 0x4801a00b, 0x4805a00c, 0x59240003, 0x59240804,
+ 0x4801a00d, 0x4805a00e, 0x4979a00f, 0x4979a010,
+ 0x4979a011, 0x4979a012, 0x4979a013, 0x4979a014,
+ 0x4979a015, 0x4979a016, 0x59a80029, 0x4801a017,
+ 0x59a8002a, 0x4801a018, 0x59a8002b, 0x4801a019,
+ 0x59a8002c, 0x4801a01a, 0x42000800, 0x0000001d,
+ 0x42001000, 0x0000dc00, 0x0201f000, 0x001080fb,
+ 0x0401f8d6, 0x4a01a006, 0x50000000, 0x0401f7bd,
+ 0x0401f8d2, 0x4a01a006, 0x21100014, 0x4979a007,
+ 0x4979a008, 0x4979a009, 0x4979a00a, 0x42000800,
+ 0x00000005, 0x42001000, 0x0000dc00, 0x0201f000,
+ 0x001080fb, 0x0401f8cd, 0x0401f002, 0x0401f8d3,
+ 0x4a01a006, 0x02000000, 0x42000800, 0x00000001,
+ 0x42001000, 0x0000dc00, 0x0201f000, 0x001080fb,
+ 0x0401f8ca, 0x4a01a006, 0x02000000, 0x59300403,
+ 0x82000580, 0x00000031, 0x0402079e, 0x81a40800,
+ 0x4a000801, 0x00fffffe, 0x0401f728, 0x0401f8bf,
+ 0x4a01a006, 0x01000000, 0x5930041b, 0x80000540,
+ 0x04000003, 0x4801a407, 0x0401f003, 0x4a01a407,
+ 0x00000003, 0x5930021b, 0x80000540, 0x04000003,
+ 0x4801a207, 0x0401f003, 0x4a01a207, 0x00002a00,
+ 0x42000800, 0x00000002, 0x42001000, 0x0000dc00,
+ 0x0201f000, 0x001080fb, 0x4a026202, 0x0000ffff,
+ 0x0401f896, 0x4a01a406, 0x00002010, 0x4a01a206,
+ 0x00000014, 0x4a01a407, 0x00000800, 0x4a01a207,
+ 0x00002000, 0x42000000, 0x00000400, 0x59a80807,
+ 0x8c040d0c, 0x04000002, 0x80000580, 0x5932481c,
+ 0x59240c00, 0x8c040d08, 0x04000005, 0x82000540,
+ 0x00000020, 0x8c040d0a, 0x04020003, 0x82000540,
+ 0x00000010, 0x82000540, 0x00000002, 0x5934080a,
+ 0x8c040d14, 0x04000005, 0x82040d00, 0x00000380,
+ 0x80040540, 0x0401f006, 0x599c0818, 0x8c040d18,
+ 0x04000003, 0x82000540, 0x00000380, 0x0401f042,
+ 0x0401f87e, 0x4a01a406, 0x00000210, 0x4a01a206,
+ 0x00000014, 0x4a01a407, 0x00000800, 0x5934000a,
+ 0x8c000516, 0x04000014, 0x59340c05, 0x82040500,
+ 0x00000030, 0x04000013, 0x59340a05, 0x82040500,
+ 0x0000c000, 0x04020009, 0x8c040d1a, 0x04000004,
+ 0x4a01a207, 0x00002100, 0x0401f00c, 0x4a01a207,
+ 0x00000100, 0x0401f009, 0x4a01a207, 0x00000400,
+ 0x0401f006, 0x4a01a207, 0x00000700, 0x0401f003,
+ 0x4a01a207, 0x00000800, 0x42000000, 0x00000400,
0x59a80807, 0x8c040d0c, 0x04000002, 0x80000580,
0x5932481c, 0x59240c00, 0x8c040d08, 0x04000005,
0x82000540, 0x00000020, 0x8c040d0a, 0x04020003,
0x82000540, 0x00000010, 0x82000540, 0x00000002,
- 0x5934080a, 0x8c040d14, 0x04000005, 0x82040d00,
- 0x00000380, 0x80040540, 0x0401f006, 0x599c0818,
- 0x8c040d18, 0x04000003, 0x82000540, 0x00000380,
- 0x0401f042, 0x0401f87b, 0x4a01a406, 0x00000210,
- 0x4a01a206, 0x00000014, 0x4a01a407, 0x00000800,
- 0x5934000a, 0x8c000516, 0x04000014, 0x59340c05,
- 0x82040500, 0x00000030, 0x04000013, 0x59340a05,
- 0x82040500, 0x0000c000, 0x04020009, 0x8c040d1a,
- 0x04000004, 0x4a01a207, 0x00002100, 0x0401f00c,
- 0x4a01a207, 0x00000100, 0x0401f009, 0x4a01a207,
- 0x00000400, 0x0401f006, 0x4a01a207, 0x00000700,
- 0x0401f003, 0x4a01a207, 0x00000800, 0x42000000,
- 0x00000400, 0x59a80807, 0x8c040d0c, 0x04000002,
- 0x80000580, 0x5932481c, 0x59240c00, 0x8c040d08,
- 0x04000005, 0x82000540, 0x00000020, 0x8c040d0a,
- 0x04020003, 0x82000540, 0x00000010, 0x82000540,
- 0x00000002, 0x59340a00, 0x8c040d0e, 0x0400000b,
- 0x84000550, 0x599c1017, 0x8c08150a, 0x04020004,
- 0x8c040d0a, 0x04000002, 0x8400054e, 0x8c040d1c,
- 0x04000002, 0x84000552, 0x4801a20a, 0x42000800,
- 0x00000005, 0x42001000, 0x0000dc00, 0x0201f000,
- 0x00107d64, 0x0401f833, 0x4a01a006, 0x02100014,
- 0x4a01a007, 0x00000100, 0x4979a008, 0x4979a009,
- 0x4979a00a, 0x42000800, 0x00000005, 0x42001000,
- 0x0000dc00, 0x0201f000, 0x00107d64, 0x0401f825,
- 0x4a01a006, 0x02000000, 0x0401f636, 0x4933c857,
- 0x0401f820, 0x4a01a006, 0x01000000, 0x4a01a407,
- 0x0000000b, 0x42000800, 0x00000002, 0x42001000,
- 0x0000dc00, 0x0201f000, 0x00107d64, 0x42005000,
- 0x32000000, 0x42006000, 0x08290000, 0x41786800,
- 0x41787800, 0x0401f3fd, 0x42005000, 0x22000000,
+ 0x59340a00, 0x8c040d0e, 0x0400000b, 0x84000550,
+ 0x599c1017, 0x8c08150a, 0x04020004, 0x8c040d0a,
+ 0x04000002, 0x8400054e, 0x8c040d1c, 0x04000002,
+ 0x84000552, 0x4801a20a, 0x42000800, 0x00000005,
+ 0x42001000, 0x0000dc00, 0x0201f000, 0x001080fb,
+ 0x0401f836, 0x4a01a006, 0x02100014, 0x4a01a007,
+ 0x00000100, 0x4979a008, 0x4979a009, 0x4979a00a,
+ 0x42000800, 0x00000005, 0x42001000, 0x0000dc00,
+ 0x0201f000, 0x001080fb, 0x0401f828, 0x4a01a006,
+ 0x02000000, 0x0401f644, 0x4933c857, 0x0401f823,
+ 0x4a01a006, 0x01000000, 0x4a01a407, 0x0000000b,
+ 0x42000800, 0x00000002, 0x42001000, 0x0000dc00,
+ 0x0201f000, 0x001080fb, 0x42005000, 0x32000000,
+ 0x42006000, 0x08290000, 0x41786800, 0x41787800,
+ 0x0201f000, 0x001080d5, 0x42005000, 0x22000000,
0x42006000, 0x01290000, 0x41786800, 0x41787800,
- 0x0401f3f6, 0x42005000, 0x33000000, 0x42006000,
- 0x08980000, 0x41786800, 0x41787800, 0x0401f3ef,
- 0x42005000, 0x23000000, 0x42006000, 0x01980000,
- 0x41786800, 0x41787800, 0x0401f3e8, 0x59300403,
- 0x82000c80, 0x00000085, 0x02001800, 0x0010032e,
- 0x82000c80, 0x00000093, 0x02021800, 0x0010032e,
- 0x82000480, 0x00000085, 0x0c01f001, 0x00107971,
- 0x00107971, 0x00107971, 0x00107971, 0x00107971,
- 0x00107971, 0x00107971, 0x00107971, 0x00107971,
- 0x00107971, 0x00107971, 0x00107971, 0x00107971,
- 0x00107973, 0x0201f800, 0x0010032e, 0x4d2c0000,
- 0x59325809, 0x4933c857, 0x492fc857, 0x812e59c0,
- 0x02000800, 0x0010032e, 0x59340a12, 0x82040d00,
- 0x0000ff00, 0x592c000b, 0x82000500, 0x000000ff,
- 0x900001c0, 0x80040540, 0x82000540, 0x00000011,
- 0x44034800, 0x81a5a000, 0x42001000, 0x00000009,
- 0x42000800, 0x00000003, 0x592c000a, 0x82000500,
- 0xff000000, 0x82001d80, 0x84000000, 0x04000009,
- 0x82001d80, 0x85000000, 0x02020800, 0x0010032e,
- 0x42001000, 0x00000007, 0x42000800, 0x00000001,
- 0x832c1c00, 0x0000000a, 0x500c0000, 0x4401a000,
- 0x800c1800, 0x80d1a000, 0x80081040, 0x040207fb,
- 0x42001000, 0x0000dc00, 0x5c025800, 0x0401f3c1,
- 0x42005000, 0x81000000, 0x42006000, 0x00090000,
- 0x41786800, 0x41787800, 0x59301407, 0x82081580,
- 0x00000005, 0x04020003, 0x42006000, 0x00890000,
- 0x0401f38e, 0x59300403, 0x82000c80, 0x00000053,
- 0x02021800, 0x0010032e, 0x82000480, 0x0000004b,
- 0x02001800, 0x0010032e, 0x5932680a, 0x59368c03,
- 0x4803c857, 0x0c01f001, 0x00107a31, 0x00107a39,
- 0x00107a41, 0x00107a49, 0x001079c6, 0x001079c6,
- 0x001079c6, 0x00107a29, 0x0201f800, 0x0010032e,
- 0x42005000, 0x06000000, 0x42006000, 0x08290000,
- 0x41786800, 0x41787800, 0x0401f370, 0x4933c857,
- 0x0401ff72, 0x4a01a006, 0x12000000, 0x59300407,
- 0x82000580, 0x00000004, 0x04020003, 0x59340002,
- 0x0401f003, 0x5932481c, 0x59240005, 0x82000500,
- 0x00ffffff, 0x4801a007, 0x5930041a, 0x4801a408,
- 0x5930021a, 0x4801a208, 0x42000800, 0x00000003,
- 0x42001000, 0x0000dc00, 0x0401f37e, 0x0401ff5b,
- 0x4a01a006, 0x0f000000, 0x5930001d, 0x4801a007,
+ 0x0201f000, 0x001080d5, 0x42005000, 0x33000000,
+ 0x42006000, 0x08980000, 0x41786800, 0x41787800,
+ 0x0201f000, 0x001080d5, 0x42005000, 0x23000000,
+ 0x42006000, 0x01980000, 0x41786800, 0x41787800,
+ 0x0201f000, 0x001080d5, 0x59300403, 0x82000c80,
+ 0x00000085, 0x02001800, 0x0010032f, 0x82000c80,
+ 0x00000093, 0x02021800, 0x0010032f, 0x82000480,
+ 0x00000085, 0x0c01f001, 0x00107cec, 0x00107cec,
+ 0x00107cec, 0x00107cec, 0x00107cec, 0x00107cec,
+ 0x00107cec, 0x00107cec, 0x00107cec, 0x00107cec,
+ 0x00107cec, 0x00107cec, 0x00107cec, 0x00107cee,
+ 0x0201f800, 0x0010032f, 0x4d2c0000, 0x59325809,
+ 0x4933c857, 0x492fc857, 0x812e59c0, 0x02000800,
+ 0x0010032f, 0x59340a12, 0x82040d00, 0x0000ff00,
+ 0x592c000b, 0x82000500, 0x000000ff, 0x900001c0,
+ 0x80040540, 0x82000540, 0x00000011, 0x44034800,
+ 0x81a5a000, 0x42001000, 0x00000009, 0x42000800,
+ 0x00000003, 0x592c000a, 0x82000500, 0xff000000,
+ 0x82001d80, 0x84000000, 0x04000009, 0x82001d80,
+ 0x85000000, 0x02020800, 0x0010032f, 0x42001000,
+ 0x00000007, 0x42000800, 0x00000001, 0x832c1c00,
+ 0x0000000a, 0x500c0000, 0x4401a000, 0x800c1800,
+ 0x80d1a000, 0x80081040, 0x040207fb, 0x42001000,
+ 0x0000dc00, 0x5c025800, 0x0401f3dd, 0x42005000,
+ 0x81000000, 0x42006000, 0x00090000, 0x41786800,
+ 0x41787800, 0x59301407, 0x82081580, 0x00000005,
+ 0x04020003, 0x42006000, 0x00890000, 0x0401f3aa,
+ 0x59300403, 0x82000c80, 0x00000053, 0x02021800,
+ 0x0010032f, 0x82000480, 0x0000004b, 0x02001800,
+ 0x0010032f, 0x5932680a, 0x59368c03, 0x4803c857,
+ 0x0c01f001, 0x00107dac, 0x00107db4, 0x00107dbc,
+ 0x00107dc4, 0x00107d41, 0x00107d41, 0x00107d41,
+ 0x00107da4, 0x0201f800, 0x0010032f, 0x42005000,
+ 0x06000000, 0x42006000, 0x08290000, 0x41786800,
+ 0x41787800, 0x0401f38c, 0x4933c857, 0x0401ff6f,
+ 0x4a01a006, 0x12000000, 0x59300407, 0x82000580,
+ 0x00000004, 0x04020003, 0x59340002, 0x0401f003,
+ 0x5932481c, 0x59240005, 0x82000500, 0x00ffffff,
+ 0x4801a007, 0x5930041a, 0x4801a408, 0x5930021a,
+ 0x4801a208, 0x42000800, 0x00000003, 0x42001000,
+ 0x0000dc00, 0x0401f39a, 0x0401ff58, 0x4a01a006,
+ 0x0f000000, 0x5930001d, 0x4801a007, 0x42000800,
+ 0x00000002, 0x42001000, 0x0000dc00, 0x0401f390,
+ 0x0401ff5e, 0x4a01a006, 0x02000000, 0x59c40085,
+ 0x59880804, 0x80040c00, 0x48071004, 0x497b8885,
+ 0x59880000, 0x4801a007, 0x59880001, 0x4801a008,
+ 0x59880002, 0x4801a009, 0x59880003, 0x4801a00a,
+ 0x59880004, 0x4801a00b, 0x59880005, 0x4801a00c,
+ 0x42000800, 0x00000007, 0x42001000, 0x0000dc00,
+ 0x0401f377, 0x4a026202, 0x0000ffff, 0x0401ff33,
+ 0x4a01a006, 0x62000000, 0x5930001d, 0x4801a007,
0x42000800, 0x00000002, 0x42001000, 0x0000dc00,
- 0x0401f374, 0x0401ff5f, 0x4a01a006, 0x02000000,
- 0x59c40085, 0x59880804, 0x80040c00, 0x48071004,
- 0x497b8885, 0x59880000, 0x4801a007, 0x59880001,
- 0x4801a008, 0x59880002, 0x4801a009, 0x59880003,
- 0x4801a00a, 0x59880004, 0x4801a00b, 0x59880005,
- 0x4801a00c, 0x42000800, 0x00000007, 0x42001000,
- 0x0000dc00, 0x0401f35b, 0x4a026202, 0x0000ffff,
- 0x0401ff36, 0x4a01a006, 0x62000000, 0x5930001d,
- 0x4801a007, 0x42000800, 0x00000002, 0x42001000,
- 0x0000dc00, 0x0401f34f, 0x0401ff2c, 0x59300809,
- 0x4c500000, 0x4c540000, 0x4c580000, 0x8204a400,
- 0x0000000b, 0x5930b01d, 0x82d0ac00, 0x00000006,
- 0x0201f800, 0x0010c086, 0x5930081d, 0x42001000,
- 0x0000dc00, 0x5c00b000, 0x5c00a800, 0x5c00a000,
- 0x0401f33c, 0x0401ff9f, 0x59300018, 0x4801a006,
- 0x59300019, 0x4801a007, 0x4a01a008, 0x00001000,
- 0x0401f020, 0x0401ff97, 0x59300018, 0x4801a006,
- 0x59300019, 0x4801a007, 0x4a01a008, 0x00004000,
- 0x0401f018, 0x0401ff8f, 0x59300018, 0x4801a006,
- 0x59300019, 0x4801a007, 0x4a01a008, 0x00002000,
- 0x0401f010, 0x0401ff87, 0x59300018, 0x4801a006,
- 0x59300019, 0x4801a007, 0x4a01a008, 0x00000400,
- 0x0401f008, 0x0401ff7f, 0x59300018, 0x4801a006,
- 0x59300019, 0x4801a007, 0x4a01a008, 0x00000200,
- 0x4979a009, 0x4979a00a, 0x4979a00b, 0x4979a00c,
- 0x4979a00d, 0x42000800, 0x00000008, 0x42001000,
- 0x0000dc00, 0x0401f30b, 0x0401fef6, 0x4a01a006,
- 0x02000014, 0x4979a407, 0x4979a207, 0x59a8002d,
- 0x4801a008, 0x59a8002e, 0x4801a009, 0x4a01a00a,
- 0x00047878, 0x42000800, 0x00000005, 0x42001000,
- 0x0000dc00, 0x0401f2fb, 0x0401fee6, 0x4a01a006,
- 0x02140018, 0x4a01a407, 0x00000800, 0x5930001d,
- 0x82000d00, 0xff000000, 0x900409c0, 0x4805a207,
- 0x82000500, 0x00ffffff, 0x4801a00a, 0x4979a408,
- 0x4979a208, 0x4979a409, 0x4979a209, 0x4979a00b,
- 0x42000800, 0x00000006, 0x42001000, 0x0000dc00,
- 0x0401f2e4, 0x4933c857, 0x4937c857, 0x4d1c0000,
- 0x42000800, 0x00000035, 0x0201f800, 0x00109c9c,
- 0x04020026, 0x0401feb9, 0x4a01a006, 0x13000000,
- 0x59323827, 0x59300403, 0x82000580, 0x00000057,
- 0x04000005, 0x591c0415, 0x8c000502, 0x02000800,
- 0x0010032e, 0x591c001a, 0x4801a005, 0x591c0407,
- 0x82000580, 0x00000003, 0x04000007, 0x5930080a,
- 0x58040002, 0x82000500, 0x00ffffff, 0x4801a007,
- 0x0401f004, 0x5932481c, 0x59240005, 0x4801a007,
- 0x5930041a, 0x4801a408, 0x5930021a, 0x4801a208,
- 0x42000800, 0x00000003, 0x42001000, 0x0000dc00,
- 0x5c023800, 0x0401f2b7, 0x4803c856, 0x0201f800,
- 0x00106e41, 0x598c000f, 0x81300580, 0x02020800,
- 0x0010032e, 0x0201f800, 0x00106d91, 0x59300403,
- 0x82000580, 0x00000057, 0x02000800, 0x001086a8,
- 0x0201f800, 0x00020b9d, 0x5c023800, 0x0201f000,
- 0x00106e2e, 0x4803c856, 0x4d2c0000, 0x4d1c0000,
- 0x59323827, 0x811e39c0, 0x02000800, 0x0010032e,
- 0x831c0580, 0xffffffff, 0x0400003d, 0x591c0c07,
- 0x82040580, 0x00000006, 0x0400000d, 0x82040580,
- 0x00000003, 0x0400003b, 0x4a026403, 0x00000037,
- 0x4a02641b, 0x00000003, 0x4a02621b, 0x00001700,
- 0x5c023800, 0x5c025800, 0x0401f06d, 0x0401f850,
- 0x42001000, 0x40000000, 0x591c0203, 0x591c0804,
- 0x8c040d3e, 0x04020023, 0x82000c80, 0x0000000e,
- 0x0c001003, 0x0201f800, 0x0010032e, 0x00107af8,
- 0x00107b04, 0x00107afa, 0x00107b04, 0x00107b00,
- 0x00107af8, 0x00107af8, 0x00107b04, 0x00107b04,
- 0x00107af8, 0x00107af8, 0x00107af8, 0x00107af8,
- 0x00107af8, 0x00107b04, 0x00107af8, 0x00107b04,
- 0x0201f800, 0x0010032e, 0x591c0415, 0x4803c857,
- 0x8c000518, 0x04000003, 0x8c000512, 0x04000003,
- 0x80001580, 0x0401f003, 0x42001000, 0x20000000,
- 0x591c0016, 0x4801a00a, 0x0401f01d, 0x0401f824,
- 0x42001000, 0x40000000, 0x41780000, 0x0401f7fa,
- 0x0401f81f, 0x591e5809, 0x812e59c0, 0x02000800,
- 0x0010032e, 0x592c1010, 0x591c0012, 0x80080480,
- 0x4801a00a, 0x591c0203, 0x591c0804, 0x8c040d3e,
- 0x04020007, 0x82000d80, 0x00000002, 0x04000007,
- 0x82000d80, 0x00000004, 0x04000004, 0x42001000,
- 0x40000000, 0x0401f002, 0x80001580, 0x4809a00b,
- 0x42000800, 0x00000006, 0x42001000, 0x0000dc00,
- 0x5c023800, 0x5c025800, 0x0401f23a, 0x4803c856,
- 0x0401fe24, 0x4a01a006, 0x02000000, 0x59300c1a,
- 0x4805a407, 0x59300a1a, 0x4805a207, 0x5932481c,
- 0x59241005, 0x5930080a, 0x58041802, 0x820c1d00,
- 0x00ffffff, 0x59300827, 0x82040580, 0xffffffff,
- 0x04000008, 0x58040407, 0x82000580, 0x00000003,
- 0x04020004, 0x4809a008, 0x480da009, 0x0401f003,
- 0x480da008, 0x4809a009, 0x1c01f000, 0x4803c856,
- 0x0401fe08, 0x0401f003, 0x4803c856, 0x0401fdfe,
- 0x4a01a006, 0x01000000, 0x5930041b, 0x4801a407,
- 0x5930021b, 0x4801a207, 0x42000800, 0x00000002,
- 0x42001000, 0x0000dc00, 0x0401f20e, 0x4803c856,
- 0x4d1c0000, 0x0401fde2, 0x4a01a006, 0x14000000,
- 0x59323827, 0x591c001a, 0x4801a005, 0x5930041a,
- 0x4801a407, 0x5930021a, 0x4801a207, 0x59300016,
- 0x4801a008, 0x59300217, 0x82000500, 0x000000ff,
- 0x840001c0, 0x4801a409, 0x42000800, 0x00000004,
- 0x42001000, 0x0000dc00, 0x5c023800, 0x0401f1f5,
- 0x4803c856, 0x0401fddf, 0x4a01a006, 0x02000001,
- 0x42001000, 0xe0000000, 0x59a80878, 0x8c040d3e,
- 0x04000004, 0x42001000, 0x20000000, 0x0401f010,
- 0x59a80070, 0x8c000508, 0x04000004, 0x82081500,
- 0xdfffffff, 0x0401f00a, 0x59a80847, 0x82040d80,
- 0x01391077, 0x04020006, 0x59e00813, 0x8c040d00,
- 0x04000003, 0x82081500, 0xdfffffff, 0x59c40801,
- 0x82040d00, 0x00018000, 0x82040580, 0x00000000,
- 0x42000000, 0x00008000, 0x0400000d, 0x82040580,
- 0x00008000, 0x42000000, 0x00004000, 0x04000008,
- 0x82040580, 0x00010000, 0x42000000, 0x00002000,
- 0x04000003, 0x42000000, 0x00000002, 0x80080540,
- 0x4801a007, 0x42000800, 0x00000002, 0x42001000,
- 0x0000dc00, 0x0401f1bf, 0x4803c856, 0x0401f80b,
- 0x5930041b, 0x900001c0, 0x4801a005, 0x0401f9f6,
- 0x41780800, 0x42001000, 0x00005c00, 0x0401f9b5,
- 0x0201f000, 0x001065fd, 0x4803c856, 0x59300818,
- 0x82041c00, 0x00000006, 0x46034800, 0x00000021,
- 0x58040405, 0x82000500, 0x0000f000, 0x82000580,
- 0x00003000, 0x04000003, 0x46034800, 0x00000041,
- 0x81a5a000, 0x580c0001, 0x82000d00, 0x00ffffff,
- 0x82040d40, 0xc2000000, 0x4805a000, 0x580c0800,
- 0x82041500, 0x00ffffff, 0x82000500, 0xff000000,
- 0x80080540, 0x4801a001, 0x580c0002, 0x82000580,
- 0x00c00000, 0x82000500, 0x00fd0300, 0x4801a002,
- 0x580c0003, 0x4801a003, 0x580c0404, 0x4801a404,
- 0x580c0204, 0x4801a204, 0x1c01f000, 0x4803c856,
- 0x59a8021b, 0x82000500, 0x00000028, 0x04020009,
- 0x59a8021b, 0x82000500, 0x00000028, 0x04000003,
- 0x497a6a12, 0x0401f003, 0x4a026a12, 0x0000ff00,
- 0x42005000, 0x22000000, 0x42006000, 0x01380000,
- 0x41786800, 0x41787800, 0x0401f950, 0x59301009,
- 0x4a01a006, 0x54000000, 0x5932481c, 0x59240005,
+ 0x0401f36b, 0x0401ff29, 0x59300809, 0x4c500000,
+ 0x4c540000, 0x4c580000, 0x8204a400, 0x0000000b,
+ 0x5930b01d, 0x82d0ac00, 0x00000006, 0x0201f800,
+ 0x0010c5dd, 0x5930081d, 0x42001000, 0x0000dc00,
+ 0x5c00b000, 0x5c00a800, 0x5c00a000, 0x0401f358,
+ 0x0401ff9f, 0x59300018, 0x4801a006, 0x59300019,
+ 0x4801a007, 0x4a01a008, 0x00001000, 0x0401f020,
+ 0x0401ff97, 0x59300018, 0x4801a006, 0x59300019,
+ 0x4801a007, 0x4a01a008, 0x00004000, 0x0401f018,
+ 0x0401ff8f, 0x59300018, 0x4801a006, 0x59300019,
+ 0x4801a007, 0x4a01a008, 0x00002000, 0x0401f010,
+ 0x0401ff87, 0x59300018, 0x4801a006, 0x59300019,
+ 0x4801a007, 0x4a01a008, 0x00000400, 0x0401f008,
+ 0x0401ff7f, 0x59300018, 0x4801a006, 0x59300019,
+ 0x4801a007, 0x4a01a008, 0x00000200, 0x4979a009,
+ 0x4979a00a, 0x4979a00b, 0x4979a00c, 0x4979a00d,
+ 0x42000800, 0x00000008, 0x42001000, 0x0000dc00,
+ 0x0401f327, 0x0401fef5, 0x4a01a006, 0x02000014,
+ 0x4979a407, 0x4979a207, 0x59a80033, 0x4801a008,
+ 0x59a80034, 0x4801a009, 0x4a01a00a, 0x00047878,
+ 0x42000800, 0x00000005, 0x42001000, 0x0000dc00,
+ 0x0401f317, 0x0401fee5, 0x4a01a006, 0x02140018,
+ 0x4a01a407, 0x00000800, 0x5930001d, 0x82000d00,
+ 0xff000000, 0x900409c0, 0x4805a207, 0x82000500,
+ 0x00ffffff, 0x4801a00a, 0x4979a408, 0x4979a208,
+ 0x4979a409, 0x4979a209, 0x59a80006, 0x8c000500,
+ 0x04000006, 0x4a01a006, 0x02100014, 0x42000800,
+ 0x00000005, 0x0401f004, 0x4979a00b, 0x42000800,
+ 0x00000006, 0x42001000, 0x0000dc00, 0x0401f2f8,
+ 0x4933c857, 0x4937c857, 0x4d1c0000, 0x42000800,
+ 0x00000035, 0x0201f800, 0x0010a04e, 0x0402002a,
+ 0x59300016, 0x591c0816, 0x80040580, 0x04020026,
+ 0x0401feaa, 0x4a01a006, 0x13000000, 0x59323827,
+ 0x59300403, 0x82000580, 0x00000057, 0x04000005,
+ 0x591c0415, 0x8c000502, 0x02000800, 0x0010032f,
+ 0x591c001a, 0x4801a005, 0x591c0407, 0x82000580,
+ 0x00000003, 0x04000007, 0x5930080a, 0x58040002,
+ 0x82000500, 0x00ffffff, 0x4801a007, 0x0401f004,
+ 0x5932481c, 0x59240005, 0x4801a007, 0x5930041a,
+ 0x4801a408, 0x5930021a, 0x4801a208, 0x42000800,
+ 0x00000003, 0x42001000, 0x0000dc00, 0x5c023800,
+ 0x0401f2c7, 0x4803c856, 0x0201f800, 0x001071b0,
+ 0x598c000f, 0x81300580, 0x02020800, 0x0010032f,
+ 0x0201f800, 0x001070fc, 0x59300403, 0x82000580,
+ 0x00000057, 0x02000800, 0x001089ef, 0x0201f800,
+ 0x00020afe, 0x5c023800, 0x0201f000, 0x0010719d,
+ 0x4803c856, 0x4d2c0000, 0x4d1c0000, 0x59323827,
+ 0x811e39c0, 0x02000800, 0x0010032f, 0x831c0580,
+ 0xffffffff, 0x0400004b, 0x591c0c07, 0x82040580,
+ 0x00000006, 0x0400000d, 0x82040580, 0x00000003,
+ 0x04000049, 0x4a026403, 0x00000037, 0x4a02641b,
+ 0x00000003, 0x4a02621b, 0x00001700, 0x5c023800,
+ 0x5c025800, 0x0401f07b, 0x0401f85e, 0x42001000,
+ 0x40000000, 0x591c0203, 0x591c0804, 0x8c040d3e,
+ 0x04020027, 0x82000c80, 0x0000000e, 0x0c001003,
+ 0x0201f800, 0x0010032f, 0x00107e7f, 0x00107e8f,
+ 0x00107e81, 0x00107e8f, 0x00107e89, 0x00107e7f,
+ 0x00107e8f, 0x00107e8f, 0x00107e8f, 0x00107e7f,
+ 0x00107e7f, 0x00107e7f, 0x00107e7f, 0x00107e7f,
+ 0x00107e8f, 0x00107e7f, 0x00107e8f, 0x0201f800,
+ 0x0010032f, 0x591c0415, 0x4803c857, 0x8c000518,
+ 0x04000003, 0x8c000512, 0x04000007, 0x80001580,
+ 0x0401f007, 0x80001580, 0x591c0013, 0x4803c857,
+ 0x0401f00e, 0x42001000, 0x20000000, 0x591c0012,
+ 0x4803c857, 0x8c00053c, 0x04000003, 0x80000580,
+ 0x0401f006, 0x591c0013, 0x4803c857, 0x800001c0,
+ 0x04020002, 0x591c0016, 0x4801a00a, 0x0401f01d,
+ 0x0401f824, 0x42001000, 0x40000000, 0x41780000,
+ 0x0401f7fa, 0x0401f81f, 0x591e5809, 0x812e59c0,
+ 0x02000800, 0x0010032f, 0x592c1010, 0x591c0012,
+ 0x80080480, 0x4801a00a, 0x591c0203, 0x591c0804,
+ 0x8c040d3e, 0x04020007, 0x82000d80, 0x00000002,
+ 0x04000007, 0x82000d80, 0x00000004, 0x04000004,
+ 0x42001000, 0x40000000, 0x0401f002, 0x80001580,
+ 0x4809a00b, 0x42000800, 0x00000006, 0x42001000,
+ 0x0000dc00, 0x5c023800, 0x5c025800, 0x0401f23c,
+ 0x4803c856, 0x0401fe09, 0x4a01a006, 0x02000000,
+ 0x59300c1a, 0x4805a407, 0x59300a1a, 0x4805a207,
+ 0x5932481c, 0x59241005, 0x5930080a, 0x58041802,
+ 0x820c1d00, 0x00ffffff, 0x59300827, 0x82040580,
+ 0xffffffff, 0x04000008, 0x58040407, 0x82000580,
+ 0x00000003, 0x04020004, 0x4809a008, 0x480da009,
+ 0x0401f003, 0x480da008, 0x4809a009, 0x1c01f000,
+ 0x4803c856, 0x0401fded, 0x0401f003, 0x4803c856,
+ 0x0401fde2, 0x4a01a006, 0x01000000, 0x5930041b,
+ 0x4801a407, 0x5930021b, 0x4801a207, 0x42000800,
+ 0x00000002, 0x42001000, 0x0000dc00, 0x0401f210,
+ 0x4803c856, 0x4d1c0000, 0x0401fdc4, 0x4a01a006,
+ 0x14000000, 0x59323827, 0x591c001a, 0x4801a005,
+ 0x5930041a, 0x4801a407, 0x5930021a, 0x4801a207,
+ 0x59300016, 0x4801a008, 0x59300217, 0x82000500,
+ 0x000000ff, 0x840001c0, 0x4801a409, 0x42000800,
+ 0x00000004, 0x42001000, 0x0000dc00, 0x5c023800,
+ 0x0401f1f7, 0x4803c856, 0x0401fdc4, 0x4a01a006,
+ 0x02000001, 0x42001000, 0xe0000000, 0x59a80886,
+ 0x8c040d3e, 0x04000004, 0x42001000, 0x20000000,
+ 0x0401f010, 0x59a8007e, 0x8c000508, 0x04000004,
+ 0x82081500, 0xdfffffff, 0x0401f00a, 0x59a8084d,
+ 0x82040d80, 0x01391077, 0x04020006, 0x59e00813,
+ 0x8c040d00, 0x04000003, 0x82081500, 0xdfffffff,
+ 0x59c40801, 0x82040d00, 0x00018000, 0x82040580,
+ 0x00000000, 0x42000000, 0x00008000, 0x0400000d,
+ 0x82040580, 0x00008000, 0x42000000, 0x00004000,
+ 0x04000008, 0x82040580, 0x00010000, 0x42000000,
+ 0x00002000, 0x04000003, 0x42000000, 0x00000002,
+ 0x80080540, 0x4801a007, 0x42000800, 0x00000002,
+ 0x42001000, 0x0000dc00, 0x0401f1c1, 0x4803c856,
+ 0x0401f80b, 0x5930041b, 0x900001c0, 0x4801a005,
+ 0x0401f9f8, 0x41780800, 0x42001000, 0x00005c00,
+ 0x0401f9b7, 0x0201f000, 0x0010696e, 0x4803c856,
+ 0x59300818, 0x82041c00, 0x00000006, 0x46034800,
+ 0x00000021, 0x58040405, 0x82000500, 0x0000f000,
+ 0x82000580, 0x00003000, 0x04000003, 0x46034800,
+ 0x00000041, 0x81a5a000, 0x580c0001, 0x82000d00,
+ 0x00ffffff, 0x82040d40, 0xc2000000, 0x4805a000,
+ 0x580c0800, 0x82041500, 0x00ffffff, 0x82000500,
+ 0xff000000, 0x80080540, 0x4801a001, 0x580c0002,
+ 0x82000580, 0x00c00000, 0x82000500, 0x00fd0300,
+ 0x4801a002, 0x580c0003, 0x4801a003, 0x580c0404,
+ 0x4801a404, 0x580c0204, 0x4801a204, 0x1c01f000,
+ 0x4803c856, 0x59a80221, 0x82000500, 0x00000028,
+ 0x04020009, 0x59a80221, 0x82000500, 0x00000028,
+ 0x04000003, 0x497a6a12, 0x0401f003, 0x4a026a12,
+ 0x0000ff00, 0x42005000, 0x22000000, 0x42006000,
+ 0x01380000, 0x41786800, 0x41787800, 0x0401f952,
+ 0x59301009, 0x4a01a006, 0x54000000, 0x5932481c,
+ 0x59240005, 0x82000500, 0x00ffffff, 0x58080c0b,
+ 0x800408f0, 0x80040540, 0x4801a007, 0x5808000b,
+ 0x82000500, 0xff000000, 0x4801a008, 0x59a80002,
+ 0x4801a009, 0x59a80003, 0x4801a00a, 0x59a80000,
+ 0x4801a00b, 0x59a80001, 0x4801a00c, 0x5808000d,
+ 0x9c0001c0, 0x4801a00d, 0x5808000e, 0x9c0001c0,
+ 0x4801a00e, 0x5808000f, 0x9c0001c0, 0x4801a00f,
+ 0x58080010, 0x9c0001c0, 0x4801a010, 0x58080011,
+ 0x9c0001c0, 0x4801a011, 0x58080012, 0x9c0001c0,
+ 0x4801a012, 0x58080013, 0x9c0001c0, 0x4801a013,
+ 0x58080014, 0x9c0001c0, 0x4801a014, 0x58080011,
+ 0x9c0001c0, 0x4801a015, 0x58080012, 0x9c0001c0,
+ 0x4801a016, 0x58080013, 0x9c0001c0, 0x4801a017,
+ 0x58080014, 0x9c0001c0, 0x4801a018, 0x42000800,
+ 0x00000013, 0x42001000, 0x0000dc00, 0x0401f138,
+ 0x4803c856, 0x42005000, 0x22000000, 0x42006000,
+ 0x01290000, 0x41786800, 0x41787800, 0x0401f90a,
+ 0x59301009, 0x4a01a006, 0x55000000, 0x5808000c,
0x82000500, 0x00ffffff, 0x58080c0b, 0x800408f0,
- 0x80040540, 0x4801a007, 0x5808000b, 0x82000500,
- 0xff000000, 0x4801a008, 0x59a80002, 0x4801a009,
- 0x59a80003, 0x4801a00a, 0x59a80000, 0x4801a00b,
- 0x59a80001, 0x4801a00c, 0x5808000d, 0x9c0001c0,
- 0x4801a00d, 0x5808000e, 0x9c0001c0, 0x4801a00e,
- 0x5808000f, 0x9c0001c0, 0x4801a00f, 0x58080010,
- 0x9c0001c0, 0x4801a010, 0x58080011, 0x9c0001c0,
- 0x4801a011, 0x58080012, 0x9c0001c0, 0x4801a012,
- 0x58080013, 0x9c0001c0, 0x4801a013, 0x58080014,
- 0x9c0001c0, 0x4801a014, 0x58080011, 0x9c0001c0,
- 0x4801a015, 0x58080012, 0x9c0001c0, 0x4801a016,
- 0x58080013, 0x9c0001c0, 0x4801a017, 0x58080014,
- 0x9c0001c0, 0x4801a018, 0x42000800, 0x00000013,
- 0x42001000, 0x0000dc00, 0x0401f136, 0x4803c856,
- 0x42005000, 0x22000000, 0x42006000, 0x01290000,
- 0x41786800, 0x41787800, 0x0401f908, 0x59301009,
- 0x4a01a006, 0x55000000, 0x5808000c, 0x82000500,
- 0x00ffffff, 0x58080c0b, 0x800408f0, 0x80040540,
- 0x4801a007, 0x5808080b, 0x82040d00, 0xff000000,
- 0x5932481c, 0x59240005, 0x82000500, 0x00ffffff,
- 0x80040540, 0x4801a008, 0x5808000d, 0x9c0001c0,
- 0x4801a009, 0x5808000e, 0x9c0001c0, 0x4801a00a,
- 0x5808000f, 0x9c0001c0, 0x4801a00b, 0x58080010,
- 0x9c0001c0, 0x4801a00c, 0x59a80002, 0x4801a00d,
- 0x59a80003, 0x4801a00e, 0x59a80000, 0x4801a00f,
- 0x59a80001, 0x4801a010, 0x58080011, 0x4801a011,
- 0x58080012, 0x4801a012, 0x58080013, 0x4801a013,
- 0x58080014, 0x4801a014, 0x4979a015, 0x4979a016,
- 0x4979a017, 0x4979a018, 0x42000800, 0x00000013,
- 0x42001000, 0x0000dc00, 0x0401f0f6, 0x0401fce1,
- 0x5930001d, 0x800001c0, 0x04000008, 0x4a01a006,
- 0x01000000, 0x4a01a407, 0x00000003, 0x42000800,
- 0x00000002, 0x0401f028, 0x4a01a006, 0x02000000,
- 0x41780800, 0x836c0580, 0x00000004, 0x04020003,
- 0x84040d42, 0x0401f00d, 0x0201f800, 0x001050f7,
- 0x04020003, 0x84040d4a, 0x0401f002, 0x84040d48,
- 0x59a8021b, 0x8c000506, 0x04020003, 0x8c00050a,
- 0x04000002, 0x84040d46, 0x4805a207, 0x59c40085,
- 0x48031004, 0x4c580000, 0x4c500000, 0x4c540000,
- 0x4200b000, 0x00000006, 0x8388a400, 0x00000000,
- 0x82d0ac00, 0x00000008, 0x0201f800, 0x0010c086,
- 0x5c00a800, 0x5c00a000, 0x5c00b000, 0x42000800,
- 0x00000008, 0x42001000, 0x0000dc00, 0x0401f0c1,
- 0x0401fc9e, 0x4a01a006, 0x56000000, 0x59340006,
- 0x4801a007, 0x59340007, 0x4801a008, 0x42000800,
- 0x00000003, 0x42001000, 0x0000dc00, 0x0401f0b5,
- 0x4803c856, 0x0401fc9f, 0x5930081d, 0x800409c0,
- 0x0400000e, 0x82040580, 0x0000ffff, 0x04000004,
- 0x82040480, 0x00000007, 0x04021008, 0x4a01a006,
- 0x01000000, 0x4a01a407, 0x00000003, 0x42000800,
- 0x00000002, 0x0401f013, 0x4a01a006, 0x0200001c,
- 0x4a01a007, 0x00000001, 0x42001000, 0x0010cb4b,
- 0x50080000, 0x9c0001c0, 0x4801a009, 0x5932481c,
- 0x59240005, 0x4801a00a, 0x59240001, 0x59240802,
- 0x4801a00b, 0x4805a00c, 0x42000800, 0x00000007,
- 0x42001000, 0x0000dc00, 0x0401f08e, 0x4d2c0000,
- 0x0401fc6a, 0x59325809, 0x812e59c0, 0x04020003,
- 0x4979a001, 0x0401f005, 0x592c0009, 0x82000500,
- 0x00ffffff, 0x4801a001, 0x4a01a006, 0x51000000,
- 0x5c025800, 0x0201f000, 0x001077ad, 0x4803c856,
- 0x59325809, 0x5932680a, 0x59300407, 0x4803c857,
- 0x82000d80, 0x00000009, 0x0400000a, 0x82000d80,
- 0x0000000a, 0x04000032, 0x82000d80, 0x00000012,
- 0x02000000, 0x0010bbc7, 0x0201f800, 0x0010032e,
- 0x59300016, 0x8c00051e, 0x04020020, 0x42005000,
- 0x04000000, 0x42006000, 0x05000000, 0x592c040b,
- 0x82000500, 0x00000030, 0x800000e0, 0x80306540,
- 0x5934000a, 0x8c000508, 0x04000002, 0x84306546,
- 0x41786800, 0x41787800, 0x0401f831, 0x59300c17,
- 0x80040000, 0x48026417, 0x40040000, 0x800000d0,
- 0x82000540, 0x00000020, 0x4801a403, 0x83180d40,
- 0x00000038, 0x42001000, 0x0000c920, 0x0401f86c,
- 0x0201f000, 0x00106602, 0x59a8021b, 0x82000500,
- 0x00000028, 0x04000003, 0x497a6a12, 0x0401f7dc,
- 0x4a026a12, 0x0000ff00, 0x0401f7d9, 0x42005000,
- 0x02000000, 0x42006000, 0x20290000, 0x41786800,
- 0x41787800, 0x0401f812, 0x83180d40, 0x00000038,
- 0x42001000, 0x0000c9a0, 0x0401f855, 0x42000800,
- 0x00000004, 0x59300012, 0x82000500, 0xfff00000,
- 0x80000540, 0x02000000, 0x00106604, 0x42000800,
- 0x0000000e, 0x0201f000, 0x00106604, 0x4201a000,
- 0x00000000, 0x0401f003, 0x4201a000, 0x00000011,
- 0x59340a12, 0x82040d00, 0x0000ff00, 0x5932481c,
- 0x59240408, 0x900001c0, 0x80040540, 0x80d00540,
- 0x44034800, 0x81a5a000, 0x59340002, 0x82000500,
- 0x00ffffff, 0x59300c03, 0x82040d80, 0x00000031,
- 0x04020002, 0x41780000, 0x80280540, 0x4801a000,
- 0x59240005, 0x4801a001, 0x4831a002, 0x82340540,
- 0x00000000, 0x4801a003, 0x59300402, 0x4801a404,
- 0x59300a02, 0x4805a204, 0x8c30652e, 0x04000003,
- 0x4805a404, 0x4801a204, 0x483da005, 0x1c01f000,
- 0x4807c857, 0x4c040000, 0x0401f82a, 0x5c000800,
- 0x40040000, 0x80081540, 0x800000c4, 0x82000540,
- 0x00002000, 0x4803910a, 0x59b400f6, 0x82000500,
- 0x00000018, 0x040207fd, 0x42001800, 0x0010cb9f,
- 0x580c0004, 0x4803c857, 0x580c0006, 0x4803c857,
- 0x580c1800, 0x480fc857, 0x4a0368f0, 0x0010cb9e,
- 0x4a0368f1, 0x0010cba5, 0x480b68f3, 0x4a0378e4,
- 0x00008000, 0x0201f000, 0x001065fd, 0x4807c857,
- 0x480a2800, 0x4c040000, 0x0401f80a, 0x5c000800,
- 0x59b400f6, 0x8c00050a, 0x040207fe, 0x49a768f2,
- 0x480768f4, 0x4a0378e4, 0x00008000, 0x1c01f000,
- 0x4a0378e4, 0x0000c000, 0x59bc00e4, 0x8c000520,
- 0x0400000c, 0x4a0378e4, 0x00008000, 0x42007000,
- 0x000003e8, 0x59bc00e4, 0x8c000520, 0x040007f5,
- 0x80387040, 0x02000800, 0x0010032e, 0x0401f7fa,
- 0x1c01f000, 0x82000500, 0xffff0000, 0x82000580,
- 0x01050000, 0x0402000d, 0x599c0818, 0x8c040d10,
- 0x0400000a, 0x59a80806, 0x8c040d0a, 0x04000007,
- 0x42001000, 0x0000804f, 0x41781800, 0x41782000,
- 0x0201f800, 0x001039ac, 0x1c01f000, 0x1c01f000,
- 0x59a80052, 0x800001c0, 0x04000053, 0x4d2c0000,
- 0x4d300000, 0x4c5c0000, 0x4c600000, 0x4c640000,
- 0x40025800, 0x4000c000, 0x4000c800, 0x42026000,
- 0x00111500, 0x592c0407, 0x81440580, 0x0402003b,
- 0x83240580, 0xffffffff, 0x04000004, 0x592c0002,
- 0x81240580, 0x04020035, 0x592c0205, 0x82000580,
- 0x00000055, 0x04000005, 0x8d3e7d18, 0x0400002f,
- 0x8d3e7d16, 0x0402002d, 0x40640000, 0x812c0580,
- 0x0402001b, 0x59300203, 0x82000580, 0x00000000,
- 0x04000013, 0x59300009, 0x800001c0, 0x04000010,
- 0x0201f800, 0x00106e41, 0x4df00000, 0x0201f800,
- 0x00106d2b, 0x0201f800, 0x00110148, 0x80c40040,
- 0x04020003, 0x4a026203, 0x00000000, 0x5c03e000,
- 0x02000800, 0x00106e2e, 0x497a6009, 0x592cc800,
- 0x4064c000, 0x4064b800, 0x0401f003, 0x592cb800,
- 0x485cc000, 0x497a5800, 0x592c0205, 0x82000580,
- 0x00000155, 0x04000004, 0x0201f800, 0x00100594,
- 0x0401f004, 0x49425a07, 0x0201f800, 0x000203ef,
- 0x405e5800, 0x0401f003, 0x412cc000, 0x592e5800,
- 0x812e59c0, 0x040207c0, 0x48675052, 0x48635053,
- 0x5c00c800, 0x5c00c000, 0x5c00b800, 0x5c026000,
- 0x5c025800, 0x1c01f000, 0x4943c857, 0x4d440000,
- 0x4d340000, 0x4c580000, 0x4d240000, 0x42024800,
- 0xffffffff, 0x4200b000, 0x000007f0, 0x417a8800,
- 0x0201f800, 0x0002034c, 0x04020002, 0x0401ff9d,
- 0x81468800, 0x8058b040, 0x040207fa, 0x83440480,
- 0x00000800, 0x04021008, 0x8d3e7d02, 0x04000006,
- 0x42028800, 0x000007f0, 0x4200b000, 0x00000010,
- 0x0401f7f0, 0x5c024800, 0x5c00b000, 0x5c026800,
- 0x5c028800, 0x1c01f000, 0x4d300000, 0x59a81052,
- 0x800811c0, 0x0400001e, 0x42026000, 0x00111500,
- 0x59300203, 0x82000580, 0x00000000, 0x04020018,
- 0x58080803, 0x58080002, 0x4802601c, 0x4806600a,
- 0x480a6009, 0x4a026407, 0x00000005, 0x4a026203,
- 0x00000001, 0x4a026403, 0x00000092, 0x41780800,
- 0x58080205, 0x82000580, 0x00000055, 0x04000003,
- 0x42000800, 0x00000001, 0x48066429, 0x42000800,
- 0x80000040, 0x0201f800, 0x00020b3e, 0x5c026000,
- 0x1c01f000, 0x4d900000, 0x4dd00000, 0x4da40000,
- 0x4d140000, 0x4d180000, 0x4803c856, 0x417a3000,
- 0x0201f800, 0x001074f6, 0x59900804, 0x800409c0,
- 0x04000015, 0x83947c00, 0x00000009, 0x83180400,
- 0x00106475, 0x50000000, 0x803c7c00, 0x583c0003,
- 0x811808ca, 0x82040c00, 0x00006139, 0x50040800,
- 0x80040580, 0x04000008, 0x42000000, 0x0010cf87,
- 0x0201f800, 0x0010bfb3, 0x82000540, 0x00000001,
- 0x0401f005, 0x811a3000, 0x83180580, 0x00000005,
- 0x040207e4, 0x5c023000, 0x5c022800, 0x5c034800,
- 0x5c03a000, 0x5c032000, 0x1c01f000, 0x4d900000,
- 0x4dd00000, 0x4da40000, 0x4d140000, 0x4d180000,
- 0x4803c856, 0x598c080f, 0x800409c0, 0x04000003,
- 0x0201f800, 0x001065fd, 0x417a3000, 0x0201f800,
- 0x001074f6, 0x59900804, 0x800409c0, 0x04000012,
- 0x83947c00, 0x00000009, 0x83180400, 0x00106475,
- 0x50000000, 0x803c7c00, 0x811808ca, 0x82040c00,
- 0x00006139, 0x50040800, 0x48047803, 0x4a007801,
- 0x000001f4, 0x4a007800, 0x0000000a, 0x4a007802,
- 0x00000004, 0x811a3000, 0x83180580, 0x00000005,
- 0x040207e7, 0x5c023000, 0x5c022800, 0x5c034800,
- 0x5c03a000, 0x5c032000, 0x1c01f000, 0x41781000,
- 0x42026000, 0x00111584, 0x59a8180d, 0x480a6402,
- 0x4a026202, 0x0000ffff, 0x80081000, 0x800c1840,
- 0x04000004, 0x83326400, 0x0000002c, 0x0401f7f8,
- 0x1c01f000, 0x0201f800, 0x00020b9d, 0x1c01f000,
- 0x5c036000, 0x4db00000, 0x49b3c857, 0x4933c857,
- 0x813261c0, 0x0400003b, 0x59300203, 0x82000580,
- 0x00000000, 0x04000037, 0x59300004, 0x8c00053e,
- 0x02020800, 0x0010032e, 0x59300407, 0x4803c857,
- 0x82000d80, 0x00000004, 0x04000011, 0x82000d80,
- 0x00000001, 0x0400000e, 0x82000d80, 0x00000003,
- 0x04000006, 0x82000d80, 0x00000006, 0x04020019,
- 0x0201f800, 0x0010b3fa, 0x5930001d, 0x800001c0,
- 0x02020800, 0x0010a218, 0x0401f012, 0x5930000a,
- 0x82000580, 0x0010e23c, 0x0400000e, 0x59300827,
- 0x4807c857, 0x4d300000, 0x40066000, 0x0201f800,
- 0x0010a2d8, 0x5c026000, 0x04020006, 0x5804001d,
- 0x4803c857, 0x81300580, 0x04020002, 0x4978081d,
- 0x4a026407, 0x00000007, 0x497a6009, 0x4a026004,
- 0x00004000, 0x59a8002a, 0x82000c80, 0x00000051,
- 0x04001002, 0x80000102, 0x48026006, 0x497a6205,
- 0x1c01f000, 0x0401f803, 0x41318800, 0x1c01f000,
- 0x83640480, 0x00000010, 0x04021008, 0x42000000,
- 0x0010cf16, 0x0201f800, 0x0010bfb3, 0x4967c857,
- 0x80026580, 0x1c01f000, 0x8166c9c0, 0x0400001c,
- 0x41626000, 0x41580000, 0x59300a03, 0x82040d80,
- 0x00000000, 0x04000008, 0x83326400, 0x0000002c,
- 0x81300c80, 0x040017f9, 0x42026000, 0x00111584,
- 0x0401f7f6, 0x4933c857, 0x8166c840, 0x83300c00,
- 0x0000002c, 0x80040480, 0x04021006, 0x4006c000,
- 0x4a026203, 0x00000008, 0x813261c0, 0x1c01f000,
- 0x4202c000, 0x00111584, 0x0401f7fa, 0x42000000,
- 0x0010cf16, 0x0201f800, 0x0010bfb3, 0x4933c856,
- 0x417a6000, 0x0401f7f5, 0x0201f800, 0x00020bc1,
- 0x1c01f000, 0x4933c857, 0x83380580, 0x00000013,
- 0x0402000b, 0x59300004, 0x8c00053e, 0x04000007,
- 0x0201f800, 0x00106e41, 0x0201f800, 0x00106d91,
- 0x0201f800, 0x00106e2e, 0x1c01f000, 0x4933c857,
- 0x598800b7, 0x80000000, 0x480310b7, 0x1c01f000,
- 0x4933c857, 0x59300203, 0x82003480, 0x0000000e,
- 0x02021800, 0x0010032e, 0x4d2c0000, 0x0c01f803,
- 0x5c025800, 0x1c01f000, 0x00107f54, 0x00108564,
- 0x001086da, 0x00107f54, 0x00108756, 0x001080e4,
- 0x00107f54, 0x00107f54, 0x001084f0, 0x00107f54,
- 0x00107f54, 0x00107f54, 0x00107f54, 0x00107f54,
- 0x0201f800, 0x0010032e, 0x4933c857, 0x59300203,
- 0x82003480, 0x0000000e, 0x02021800, 0x0010032e,
- 0x0c01f001, 0x00107f6b, 0x00109239, 0x00107f6b,
- 0x00107f6b, 0x00107f6b, 0x00107f6b, 0x00107f6b,
- 0x00107f6b, 0x001091d5, 0x00109263, 0x001092d9,
- 0x00109263, 0x001092d9, 0x00107f6b, 0x0201f800,
- 0x0010032e, 0x0201f800, 0x0010032e, 0x4933c857,
- 0x4d2c0000, 0x59325809, 0x59300203, 0x82003480,
- 0x0000000e, 0x02021800, 0x0010032e, 0x0c01f803,
- 0x5c025800, 0x1c01f000, 0x00107f88, 0x00107f88,
- 0x00107f88, 0x00107fa4, 0x00107ff0, 0x00107f88,
- 0x00107f88, 0x00107f88, 0x00107f8a, 0x00107f88,
- 0x00107f88, 0x00107f88, 0x00107f88, 0x00107f88,
- 0x0201f800, 0x0010032e, 0x4933c857, 0x83380580,
- 0x00000040, 0x02020800, 0x0010032e, 0x4a026008,
- 0x00082000, 0x4a026203, 0x00000003, 0x493a6403,
- 0x4a025c09, 0x00000001, 0x592c000e, 0x48026012,
- 0x497a6014, 0x592c0209, 0x800000c2, 0x800010c4,
- 0x80081400, 0x480a6006, 0x0201f800, 0x00020168,
- 0x42000800, 0x80000060, 0x0201f000, 0x00020b30,
- 0x4933c857, 0x83380480, 0x00000050, 0x02021800,
- 0x0010032e, 0x83380480, 0x00000049, 0x02001800,
- 0x0010032e, 0x0c01f001, 0x00107fb7, 0x00107fc2,
- 0x00107fb5, 0x00107fb5, 0x00107fb5, 0x00107fb5,
- 0x00107fcd, 0x0201f800, 0x0010032e, 0x4a026203,
- 0x00000004, 0x4a025c09, 0x00000002, 0x592c0208,
- 0x48025c0a, 0x592c020a, 0x48025a08, 0x592c000d,
- 0x4802580e, 0x1c01f000, 0x0201f800, 0x00106d71,
- 0x0201f800, 0x0010989f, 0x04000005, 0x4a025a07,
- 0x00000006, 0x0201f800, 0x000203ef, 0x0201f000,
- 0x00020b9d, 0x0201f800, 0x00106d71, 0x4d3c0000,
- 0x417a7800, 0x0201f800, 0x0010ff80, 0x5c027800,
- 0x42003000, 0x00000014, 0x41782800, 0x42002000,
- 0x00000002, 0x4d400000, 0x4d440000, 0x59368c03,
- 0x42028000, 0x00000029, 0x0201f800, 0x0010a22a,
- 0x5c028800, 0x5c028000, 0x42000000, 0x0010cf23,
- 0x0201f800, 0x0010bfb3, 0x0201f800, 0x0010989f,
- 0x02000000, 0x00020b9d, 0x4a025a07, 0x00000029,
- 0x0201f800, 0x000203ef, 0x0201f000, 0x00020b9d,
- 0x4933c857, 0x83380580, 0x00000048, 0x04000005,
- 0x83380580, 0x00000053, 0x02020800, 0x0010032e,
- 0x592c0207, 0x82000580, 0x00000007, 0x04000009,
- 0x59300012, 0x80000540, 0x04000006, 0x592c080d,
- 0x80040480, 0x4802580d, 0x4a025a07, 0x00000015,
- 0x592c0207, 0x80000540, 0x04020003, 0x4a025a07,
- 0x00000000, 0x0201f800, 0x000203ef, 0x0201f000,
- 0x00020b9d, 0x4933c857, 0x4d2c0000, 0x4c500000,
- 0x4c540000, 0x4c580000, 0x4c5c0000, 0x4c600000,
- 0x4c640000, 0x4c100000, 0x0201f800, 0x00100583,
- 0x02000800, 0x0010032e, 0x497a5a07, 0x59a8006f,
- 0x82000500, 0x0000f000, 0x48025c08, 0x59a8085a,
- 0x82040c00, 0x00000018, 0x48065a08, 0x412cb800,
- 0x4d2c0000, 0x41cca000, 0x4200c000, 0x00000001,
- 0x4200c800, 0x0000002c, 0x82040480, 0x0000002d,
- 0x04021006, 0x832cac00, 0x0000000a, 0x0201f800,
- 0x001093b1, 0x0401f030, 0x40043000, 0x42000800,
- 0x0000002c, 0x832cac00, 0x0000000a, 0x0201f800,
- 0x001093b1, 0x82183480, 0x0000002c, 0x4c180000,
- 0x0201f800, 0x00100583, 0x5c003000, 0x0400001a,
- 0x8060c000, 0x4a025805, 0x00000110, 0x492cb801,
- 0x82180c80, 0x0000003d, 0x04021007, 0x40180800,
- 0x832cac00, 0x00000006, 0x0201f800, 0x001093b1,
- 0x0401f015, 0x8264cc00, 0x0000003c, 0x82183480,
- 0x0000003c, 0x42000800, 0x0000003c, 0x412cb800,
- 0x832cac00, 0x00000006, 0x0201f800, 0x001093b1,
- 0x0401f7e3, 0x5c025800, 0x592c0207, 0x8400055e,
- 0x48025a07, 0x592c0408, 0x80640540, 0x48025c08,
- 0x0401f002, 0x5c025800, 0x5c002000, 0x813669c0,
- 0x04000003, 0x59343403, 0x0401f003, 0x42003000,
- 0x0000ffff, 0x49325809, 0x481a5c07, 0x82100580,
- 0x00000054, 0x0402001a, 0x4a025809, 0xffffffff,
- 0x491e5814, 0x41781000, 0x831c0580, 0xffffffff,
- 0x0400000e, 0x591c0009, 0x80000d40, 0x0400000b,
- 0x58040205, 0x82000500, 0x000000ff, 0x82000580,
- 0x00000012, 0x04000004, 0x82000580, 0x00000060,
- 0x04020002, 0x58041006, 0x480a5806, 0x592c0408,
- 0x81200540, 0x48025c08, 0x0401f002, 0x49225c06,
- 0x846001c0, 0x80100540, 0x48025805, 0x0201f800,
- 0x0010c0f9, 0x04020011, 0x592c0001, 0x497a5801,
- 0x4c000000, 0x0201f800, 0x000203ef, 0x5c025800,
- 0x812e59c0, 0x040207f6, 0x5c00c800, 0x5c00c000,
- 0x5c00b800, 0x5c00b000, 0x5c00a800, 0x5c00a000,
- 0x5c025800, 0x1c01f000, 0x0201f800, 0x0010b674,
- 0x0401f7f6, 0x4803c856, 0x4c5c0000, 0x4d2c0000,
- 0x4c500000, 0x4c540000, 0x4c580000, 0x412cb800,
- 0x592c040c, 0x8c000516, 0x04000003, 0x41cca000,
- 0x0401f003, 0x83cca400, 0x00000006, 0x4008b000,
- 0x41781000, 0x82580480, 0x0000004c, 0x04001004,
- 0x4200b000, 0x0000004c, 0x40001000, 0x4c080000,
- 0x4d2c0000, 0x0201f800, 0x00100583, 0x04000026,
- 0x5c001800, 0x492c1801, 0x485a5800, 0x8258b400,
- 0x00000003, 0x8058b104, 0x832cac00, 0x00000002,
- 0x0201f800, 0x0010c0b0, 0x585c040c, 0x8c000500,
- 0x0400000e, 0x832c1400, 0x00000002, 0x8c000516,
- 0x04000003, 0x82081400, 0x00000006, 0x46001000,
- 0x00000001, 0x80081000, 0x46001000, 0x00000900,
- 0x84000500, 0x4800bc0c, 0x5c001000, 0x800811c0,
- 0x040207d7, 0x82000540, 0x00000001, 0x5c00b000,
- 0x5c00a800, 0x5c00a000, 0x5c025800, 0x5c00b800,
- 0x1c01f000, 0x5c025800, 0x5c001000, 0x0401f7f8,
+ 0x80040540, 0x4801a007, 0x5808080b, 0x82040d00,
+ 0xff000000, 0x5932481c, 0x59240005, 0x82000500,
+ 0x00ffffff, 0x80040540, 0x4801a008, 0x5808000d,
+ 0x9c0001c0, 0x4801a009, 0x5808000e, 0x9c0001c0,
+ 0x4801a00a, 0x5808000f, 0x9c0001c0, 0x4801a00b,
+ 0x58080010, 0x9c0001c0, 0x4801a00c, 0x59a80002,
+ 0x4801a00d, 0x59a80003, 0x4801a00e, 0x59a80000,
+ 0x4801a00f, 0x59a80001, 0x4801a010, 0x58080011,
+ 0x4801a011, 0x58080012, 0x4801a012, 0x58080013,
+ 0x4801a013, 0x58080014, 0x4801a014, 0x4979a015,
+ 0x4979a016, 0x4979a017, 0x4979a018, 0x42000800,
+ 0x00000013, 0x42001000, 0x0000dc00, 0x0401f0f8,
+ 0x0401fcc6, 0x5930001d, 0x800001c0, 0x04000008,
+ 0x4a01a006, 0x01000000, 0x4a01a407, 0x00000003,
+ 0x42000800, 0x00000002, 0x0401f028, 0x4a01a006,
+ 0x02000000, 0x41780800, 0x836c0580, 0x00000004,
+ 0x04020003, 0x84040d42, 0x0401f00d, 0x0201f800,
+ 0x001052aa, 0x04020003, 0x84040d4a, 0x0401f002,
+ 0x84040d48, 0x59a80221, 0x8c000506, 0x04020003,
+ 0x8c00050a, 0x04000002, 0x84040d46, 0x4805a207,
+ 0x59c40085, 0x48031004, 0x4c580000, 0x4c500000,
+ 0x4c540000, 0x4200b000, 0x00000006, 0x8388a400,
+ 0x00000000, 0x82d0ac00, 0x00000008, 0x0201f800,
+ 0x0010c5dd, 0x5c00a800, 0x5c00a000, 0x5c00b000,
+ 0x42000800, 0x00000008, 0x42001000, 0x0000dc00,
+ 0x0401f0c3, 0x0401fc81, 0x4a01a006, 0x56000000,
+ 0x59340006, 0x4801a007, 0x59340007, 0x4801a008,
+ 0x42000800, 0x00000003, 0x42001000, 0x0000dc00,
+ 0x0401f0b7, 0x4803c856, 0x0401fc84, 0x5930081d,
+ 0x800409c0, 0x0400000e, 0x82040580, 0x0000ffff,
+ 0x04000004, 0x82040480, 0x00000007, 0x04021008,
+ 0x4a01a006, 0x01000000, 0x4a01a407, 0x00000003,
+ 0x42000800, 0x00000002, 0x0401f013, 0x4a01a006,
+ 0x0200001c, 0x4a01a007, 0x00000001, 0x42001000,
+ 0x0010d161, 0x50080000, 0x9c0001c0, 0x4801a009,
+ 0x5932481c, 0x59240005, 0x4801a00a, 0x59240001,
+ 0x59240802, 0x4801a00b, 0x4805a00c, 0x42000800,
+ 0x00000007, 0x42001000, 0x0000dc00, 0x0401f090,
+ 0x4d2c0000, 0x0401fc4d, 0x59325809, 0x812e59c0,
+ 0x04020003, 0x4979a001, 0x0401f005, 0x592c0009,
+ 0x82000500, 0x00ffffff, 0x4801a001, 0x4a01a006,
+ 0x51000000, 0x5c025800, 0x0201f000, 0x00107b32,
+ 0x4803c856, 0x59325809, 0x5932680a, 0x59300407,
+ 0x4803c857, 0x82000d80, 0x00000009, 0x0400000a,
+ 0x82000d80, 0x0000000a, 0x04000033, 0x82000d80,
+ 0x00000012, 0x02000000, 0x0010c11c, 0x0201f800,
+ 0x0010032f, 0x59300016, 0x8c00051e, 0x04020021,
+ 0x42005000, 0x04000000, 0x42006000, 0x05000000,
+ 0x592c040b, 0x82000500, 0x00000030, 0x800000e0,
+ 0x80306540, 0x5934000a, 0x8c000508, 0x04000002,
+ 0x84306546, 0x41786800, 0x41787800, 0x0401f833,
+ 0x59300c17, 0x80040000, 0x48026417, 0x40040000,
+ 0x800000d0, 0x82000540, 0x00000020, 0x4801a403,
+ 0x83180d40, 0x00000038, 0x42001000, 0x0000c920,
+ 0x0401f86e, 0x0401f98d, 0x0201f000, 0x00106973,
+ 0x59a80221, 0x82000500, 0x00000028, 0x04000003,
+ 0x497a6a12, 0x0401f7db, 0x4a026a12, 0x0000ff00,
+ 0x0401f7d8, 0x42005000, 0x02000000, 0x42006000,
+ 0x20290000, 0x41786800, 0x41787800, 0x0401f813,
+ 0x83180d40, 0x00000038, 0x42001000, 0x0000c9a0,
+ 0x0401f856, 0x0401f975, 0x42000800, 0x00000004,
+ 0x59300012, 0x82000500, 0xfff00000, 0x80000540,
+ 0x02000000, 0x00106975, 0x42000800, 0x0000000e,
+ 0x0201f000, 0x00106975, 0x4201a000, 0x00000000,
+ 0x0401f003, 0x4201a000, 0x00000011, 0x59340a12,
+ 0x82040d00, 0x0000ff00, 0x5932481c, 0x59240408,
+ 0x900001c0, 0x80040540, 0x80d00540, 0x44034800,
+ 0x81a5a000, 0x59340002, 0x82000500, 0x00ffffff,
+ 0x59300c03, 0x82040d80, 0x00000031, 0x04020002,
+ 0x41780000, 0x80280540, 0x4801a000, 0x59240005,
+ 0x4801a001, 0x4831a002, 0x82340540, 0x00000000,
+ 0x4801a003, 0x59300402, 0x4801a404, 0x59300a02,
+ 0x4805a204, 0x8c30652e, 0x04000003, 0x4805a404,
+ 0x4801a204, 0x483da005, 0x1c01f000, 0x4807c857,
+ 0x4c040000, 0x0401f82a, 0x5c000800, 0x40040000,
+ 0x80081540, 0x800000c4, 0x82000540, 0x00002000,
+ 0x4803910a, 0x59b400f6, 0x82000500, 0x00000018,
+ 0x040207fd, 0x42001800, 0x0010d1b5, 0x580c0004,
+ 0x4803c857, 0x580c0006, 0x4803c857, 0x580c1800,
+ 0x480fc857, 0x4a0368f0, 0x0010d1b4, 0x4a0368f1,
+ 0x0010d1bb, 0x480b68f3, 0x4a0378e4, 0x00008000,
+ 0x0201f000, 0x0010696e, 0x4807c857, 0x480a2800,
+ 0x4c040000, 0x0401f80a, 0x5c000800, 0x59b400f6,
+ 0x8c00050a, 0x040207fe, 0x49a768f2, 0x480768f4,
+ 0x4a0378e4, 0x00008000, 0x1c01f000, 0x4a0378e4,
+ 0x0000c000, 0x59bc00e4, 0x8c000520, 0x0400000c,
+ 0x4a0378e4, 0x00008000, 0x42007000, 0x000003e8,
+ 0x59bc00e4, 0x8c000520, 0x040007f5, 0x80387040,
+ 0x02000800, 0x0010032f, 0x0401f7fa, 0x1c01f000,
+ 0x82000500, 0xffff0000, 0x82000580, 0x01050000,
+ 0x0402000d, 0x599c0818, 0x8c040d10, 0x0400000a,
+ 0x59a80806, 0x8c040d0a, 0x04000007, 0x42001000,
+ 0x0000804f, 0x41781800, 0x41782000, 0x0201f800,
+ 0x00103a4e, 0x1c01f000, 0x1c01f000, 0x59a80058,
+ 0x800001c0, 0x04000053, 0x4d2c0000, 0x4d300000,
+ 0x4c5c0000, 0x4c600000, 0x4c640000, 0x40025800,
+ 0x4000c000, 0x4000c800, 0x42026000, 0x00111cc0,
+ 0x592c0407, 0x81440580, 0x0402003b, 0x83240580,
+ 0xffffffff, 0x04000004, 0x592c0002, 0x81240580,
+ 0x04020035, 0x592c0205, 0x82000580, 0x00000055,
+ 0x04000005, 0x8d3e7d18, 0x0400002f, 0x8d3e7d16,
+ 0x0402002d, 0x40640000, 0x812c0580, 0x0402001b,
+ 0x59300203, 0x82000580, 0x00000000, 0x04000013,
+ 0x59300009, 0x800001c0, 0x04000010, 0x0201f800,
+ 0x001071b0, 0x4df00000, 0x0201f800, 0x0010708e,
+ 0x0201f800, 0x00110849, 0x80c40040, 0x04020003,
+ 0x4a026203, 0x00000000, 0x5c03e000, 0x02000800,
+ 0x0010719d, 0x497a6009, 0x592cc800, 0x4064c000,
+ 0x4064b800, 0x0401f003, 0x592cb800, 0x485cc000,
+ 0x497a5800, 0x592c0205, 0x82000580, 0x00000155,
+ 0x04000004, 0x0201f800, 0x001005aa, 0x0401f004,
+ 0x49425a07, 0x0201f800, 0x00020401, 0x405e5800,
+ 0x0401f003, 0x412cc000, 0x592e5800, 0x812e59c0,
+ 0x040207c0, 0x48675058, 0x48635059, 0x5c00c800,
+ 0x5c00c000, 0x5c00b800, 0x5c026000, 0x5c025800,
+ 0x1c01f000, 0x4943c857, 0x4d440000, 0x4d340000,
+ 0x4c580000, 0x4d240000, 0x42024800, 0xffffffff,
+ 0x4200b000, 0x000007f0, 0x417a8800, 0x0201f800,
+ 0x00020353, 0x04020002, 0x0401ff9d, 0x81468800,
+ 0x8058b040, 0x040207fa, 0x83440480, 0x00000800,
+ 0x04021008, 0x8d3e7d02, 0x04000006, 0x42028800,
+ 0x000007f0, 0x4200b000, 0x00000010, 0x0401f7f0,
+ 0x5c024800, 0x5c00b000, 0x5c026800, 0x5c028800,
+ 0x1c01f000, 0x4d300000, 0x59a81058, 0x800811c0,
+ 0x0400001e, 0x42026000, 0x00111cc0, 0x59300203,
+ 0x82000580, 0x00000000, 0x04020018, 0x58080803,
+ 0x58080002, 0x4802601c, 0x4806600a, 0x480a6009,
+ 0x4a026407, 0x00000005, 0x4a026203, 0x00000001,
+ 0x4a026403, 0x00000092, 0x41780800, 0x58080205,
+ 0x82000580, 0x00000055, 0x04000003, 0x42000800,
+ 0x00000001, 0x48066429, 0x42000800, 0x80000040,
+ 0x0201f800, 0x00020a9f, 0x5c026000, 0x1c01f000,
+ 0x4d900000, 0x4dd00000, 0x4da40000, 0x4d140000,
+ 0x4d180000, 0x4803c856, 0x417a3000, 0x0201f800,
+ 0x00107864, 0x59900804, 0x800409c0, 0x04000015,
+ 0x83947c00, 0x00000009, 0x83180400, 0x001067d8,
+ 0x50000000, 0x803c7c00, 0x583c0003, 0x811808ca,
+ 0x82040c00, 0x00006139, 0x50040800, 0x80040580,
+ 0x04000008, 0x42000000, 0x0010d5a2, 0x0201f800,
+ 0x0010c50a, 0x82000540, 0x00000001, 0x0401f005,
+ 0x811a3000, 0x83180580, 0x00000005, 0x040207e4,
+ 0x5c023000, 0x5c022800, 0x5c034800, 0x5c03a000,
+ 0x5c032000, 0x1c01f000, 0x4d900000, 0x4dd00000,
+ 0x4da40000, 0x4d140000, 0x4d180000, 0x4803c856,
+ 0x598c080f, 0x800409c0, 0x04000003, 0x0201f800,
+ 0x0010696e, 0x417a3000, 0x0201f800, 0x00107864,
+ 0x59900804, 0x800409c0, 0x04000012, 0x83947c00,
+ 0x00000009, 0x83180400, 0x001067d8, 0x50000000,
+ 0x803c7c00, 0x811808ca, 0x82040c00, 0x00006139,
+ 0x50040800, 0x48047803, 0x4a007801, 0x000001f4,
+ 0x4a007800, 0x0000000a, 0x4a007802, 0x00000004,
+ 0x811a3000, 0x83180580, 0x00000005, 0x040207e7,
+ 0x5c023000, 0x5c022800, 0x5c034800, 0x5c03a000,
+ 0x5c032000, 0x1c01f000, 0x83947c00, 0x00000009,
+ 0x83180400, 0x001067d8, 0x50000000, 0x803c7c00,
+ 0x49787803, 0x1c01f000, 0x41781000, 0x42026000,
+ 0x00111d44, 0x59a81813, 0x480a6402, 0x4a026202,
+ 0x0000ffff, 0x80081000, 0x800c1840, 0x04000004,
+ 0x83326400, 0x0000002c, 0x0401f7f8, 0x1c01f000,
+ 0x0201f800, 0x00020afe, 0x1c01f000, 0x5c036000,
+ 0x4db00000, 0x49b3c857, 0x4933c857, 0x813261c0,
+ 0x0400003b, 0x59300203, 0x82000580, 0x00000000,
+ 0x04000037, 0x59300004, 0x8c00053e, 0x02020800,
+ 0x0010032f, 0x59300407, 0x4803c857, 0x82000d80,
+ 0x00000004, 0x04000011, 0x82000d80, 0x00000001,
+ 0x0400000e, 0x82000d80, 0x00000003, 0x04000006,
+ 0x82000d80, 0x00000006, 0x04020019, 0x0201f800,
+ 0x0010b914, 0x5930001d, 0x800001c0, 0x02020800,
+ 0x0010a616, 0x0401f012, 0x5930000a, 0x82000580,
+ 0x0010e85a, 0x0400000e, 0x59300827, 0x4807c857,
+ 0x4d300000, 0x40066000, 0x0201f800, 0x0010a6dc,
+ 0x5c026000, 0x04020006, 0x5804001d, 0x4803c857,
+ 0x81300580, 0x04020002, 0x4978081d, 0x4a026407,
+ 0x00000007, 0x497a6009, 0x4a026004, 0x00004000,
+ 0x59a80030, 0x82000c80, 0x00000051, 0x04001002,
+ 0x80000102, 0x48026006, 0x497a6205, 0x1c01f000,
+ 0x0401f803, 0x41318800, 0x1c01f000, 0x83640480,
+ 0x00000010, 0x04021008, 0x42000000, 0x0010d52c,
+ 0x0201f800, 0x0010c50a, 0x4967c857, 0x80026580,
+ 0x1c01f000, 0x8166c9c0, 0x0400001c, 0x41626000,
+ 0x41580000, 0x59300a03, 0x82040d80, 0x00000000,
+ 0x04000008, 0x83326400, 0x0000002c, 0x81300c80,
+ 0x040017f9, 0x42026000, 0x00111d44, 0x0401f7f6,
+ 0x4933c857, 0x8166c840, 0x83300c00, 0x0000002c,
+ 0x80040480, 0x04021006, 0x4006c000, 0x4a026203,
+ 0x00000008, 0x813261c0, 0x1c01f000, 0x4202c000,
+ 0x00111d44, 0x0401f7fa, 0x42000000, 0x0010d52c,
+ 0x0201f800, 0x0010c50a, 0x4933c856, 0x417a6000,
+ 0x0401f7f5, 0x0201f800, 0x00020b22, 0x1c01f000,
+ 0x4933c857, 0x83380580, 0x00000013, 0x0402000b,
+ 0x59300004, 0x8c00053e, 0x04000007, 0x0201f800,
+ 0x001071b0, 0x0201f800, 0x001070fc, 0x0201f800,
+ 0x0010719d, 0x1c01f000, 0x4933c857, 0x598800bc,
+ 0x80000000, 0x480310bc, 0x1c01f000, 0x4933c857,
+ 0x59300203, 0x82003480, 0x0000000e, 0x02021800,
+ 0x0010032f, 0x4d2c0000, 0x0c01f803, 0x5c025800,
+ 0x1c01f000, 0x001082f3, 0x001088ad, 0x00108a21,
+ 0x001082f3, 0x00108a9d, 0x00108440, 0x001082f3,
+ 0x001082f3, 0x00108839, 0x001082f3, 0x001082f3,
+ 0x001082f3, 0x001082f3, 0x001082f3, 0x0201f800,
+ 0x0010032f, 0x4933c857, 0x59300203, 0x82003480,
+ 0x0000000e, 0x02021800, 0x0010032f, 0x0c01f001,
+ 0x0010830a, 0x001095ab, 0x0010830a, 0x0010830a,
+ 0x0010830a, 0x0010830a, 0x0010830a, 0x0010830a,
+ 0x00109547, 0x001095d5, 0x0010964b, 0x001095d5,
+ 0x0010964b, 0x0010830a, 0x0201f800, 0x0010032f,
+ 0x0201f800, 0x0010032f, 0x4933c857, 0x4d2c0000,
+ 0x59325809, 0x59300203, 0x82003480, 0x0000000e,
+ 0x02021800, 0x0010032f, 0x0c01f803, 0x5c025800,
+ 0x1c01f000, 0x00108327, 0x00108327, 0x00108327,
+ 0x00108343, 0x0010838f, 0x00108327, 0x00108327,
+ 0x00108327, 0x00108329, 0x00108327, 0x00108327,
+ 0x00108327, 0x00108327, 0x00108327, 0x0201f800,
+ 0x0010032f, 0x4933c857, 0x83380580, 0x00000040,
+ 0x02020800, 0x0010032f, 0x4a026008, 0x00082000,
+ 0x4a026203, 0x00000003, 0x493a6403, 0x4a025c09,
+ 0x00000001, 0x592c000e, 0x48026012, 0x497a6014,
+ 0x592c0209, 0x800000c2, 0x800010c4, 0x80081400,
+ 0x480a6006, 0x0201f800, 0x0002016d, 0x42000800,
+ 0x80000060, 0x0201f000, 0x00020a8e, 0x4933c857,
+ 0x83380480, 0x00000050, 0x02021800, 0x0010032f,
+ 0x83380480, 0x00000049, 0x02001800, 0x0010032f,
+ 0x0c01f001, 0x00108356, 0x00108361, 0x00108354,
+ 0x00108354, 0x00108354, 0x00108354, 0x0010836c,
+ 0x0201f800, 0x0010032f, 0x4a026203, 0x00000004,
+ 0x4a025c09, 0x00000002, 0x592c0208, 0x48025c0a,
+ 0x592c020a, 0x48025a08, 0x592c000d, 0x4802580e,
+ 0x1c01f000, 0x0201f800, 0x001070dc, 0x0201f800,
+ 0x00109c4d, 0x04000005, 0x4a025a07, 0x00000006,
+ 0x0201f800, 0x00020401, 0x0201f000, 0x00020afe,
+ 0x0201f800, 0x001070dc, 0x4d3c0000, 0x417a7800,
+ 0x0201f800, 0x00110684, 0x5c027800, 0x42003000,
+ 0x00000014, 0x41782800, 0x42002000, 0x00000002,
+ 0x4d400000, 0x4d440000, 0x59368c03, 0x42028000,
+ 0x00000029, 0x0201f800, 0x0010a628, 0x5c028800,
+ 0x5c028000, 0x42000000, 0x0010d53e, 0x0201f800,
+ 0x0010c50a, 0x0201f800, 0x00109c4d, 0x02000000,
+ 0x00020afe, 0x4a025a07, 0x00000029, 0x0201f800,
+ 0x00020401, 0x0201f000, 0x00020afe, 0x4933c857,
+ 0x83380580, 0x00000048, 0x04000005, 0x83380580,
+ 0x00000053, 0x02020800, 0x0010032f, 0x592c0207,
+ 0x82000580, 0x00000007, 0x04000009, 0x59300012,
+ 0x80000540, 0x04000006, 0x592c080d, 0x80040480,
+ 0x4802580d, 0x4a025a07, 0x00000015, 0x592c0207,
+ 0x80000540, 0x04020003, 0x4a025a07, 0x00000000,
+ 0x0201f800, 0x00020401, 0x0201f000, 0x00020afe,
+ 0x4933c857, 0x4d2c0000, 0x4c500000, 0x4c540000,
+ 0x4c580000, 0x4c5c0000, 0x4c600000, 0x4c640000,
+ 0x4c100000, 0x0201f800, 0x00100599, 0x02000800,
+ 0x0010032f, 0x497a5a07, 0x59a8007d, 0x82000500,
+ 0x0000f000, 0x48025c08, 0x59a80868, 0x82040c00,
+ 0x00000018, 0x48065a08, 0x412cb800, 0x4d2c0000,
+ 0x41cca000, 0x4200c000, 0x00000001, 0x4200c800,
+ 0x0000002c, 0x82040480, 0x0000002d, 0x04021006,
+ 0x832cac00, 0x0000000a, 0x0201f800, 0x00109729,
+ 0x0401f030, 0x40043000, 0x42000800, 0x0000002c,
+ 0x832cac00, 0x0000000a, 0x0201f800, 0x00109729,
+ 0x82183480, 0x0000002c, 0x4c180000, 0x0201f800,
+ 0x00100599, 0x5c003000, 0x0400001a, 0x8060c000,
+ 0x4a025805, 0x00000110, 0x492cb801, 0x82180c80,
+ 0x0000003d, 0x04021007, 0x40180800, 0x832cac00,
+ 0x00000006, 0x0201f800, 0x00109729, 0x0401f015,
+ 0x8264cc00, 0x0000003c, 0x82183480, 0x0000003c,
+ 0x42000800, 0x0000003c, 0x412cb800, 0x832cac00,
+ 0x00000006, 0x0201f800, 0x00109729, 0x0401f7e3,
+ 0x5c025800, 0x592c0207, 0x8400055e, 0x48025a07,
+ 0x592c0408, 0x80640540, 0x48025c08, 0x0401f002,
+ 0x5c025800, 0x5c002000, 0x813669c0, 0x04000003,
+ 0x59343403, 0x0401f003, 0x42003000, 0x0000ffff,
+ 0x49325809, 0x481a5c07, 0x82100580, 0x00000054,
+ 0x0402001a, 0x4a025809, 0xffffffff, 0x491e5814,
+ 0x41781000, 0x831c0580, 0xffffffff, 0x0400000e,
+ 0x591c0009, 0x80000d40, 0x0400000b, 0x58040205,
+ 0x82000500, 0x000000ff, 0x82000580, 0x00000012,
+ 0x04000004, 0x82000580, 0x00000060, 0x04020002,
+ 0x58041006, 0x480a5806, 0x592c0408, 0x81200540,
+ 0x48025c08, 0x0401f002, 0x49225c06, 0x846001c0,
+ 0x80100540, 0x48025805, 0x0201f800, 0x0010c669,
+ 0x04020011, 0x592c0001, 0x497a5801, 0x4c000000,
+ 0x0201f800, 0x00020401, 0x5c025800, 0x812e59c0,
+ 0x040207f6, 0x5c00c800, 0x5c00c000, 0x5c00b800,
+ 0x5c00b000, 0x5c00a800, 0x5c00a000, 0x5c025800,
+ 0x1c01f000, 0x0201f800, 0x0010bbc5, 0x0401f7f6,
0x4933c857, 0x83380d80, 0x00000015, 0x04020003,
- 0x0201f000, 0x00020b9d, 0x83380d80, 0x00000016,
- 0x02020800, 0x0010032e, 0x0201f000, 0x00020b9d,
+ 0x0201f000, 0x00020afe, 0x83380d80, 0x00000016,
+ 0x02020800, 0x0010032f, 0x0201f000, 0x00020afe,
0x4933c857, 0x4d2c0000, 0x4c500000, 0x4c540000,
0x4c580000, 0x59325809, 0x83cca400, 0x00000006,
0x59cc1806, 0x820c0580, 0x01000000, 0x04020004,
0x4200b000, 0x00000002, 0x0401f00f, 0x4200b000,
0x00000008, 0x832cac00, 0x00000006, 0x0201f800,
- 0x0010c086, 0x8c0c1d00, 0x0400000b, 0x4200b000,
+ 0x0010c5dd, 0x8c0c1d00, 0x0400000b, 0x4200b000,
0x00000008, 0x592e5801, 0x812e59c0, 0x02000800,
- 0x0010032e, 0x832cac00, 0x00000006, 0x0201f800,
- 0x0010c086, 0x0401f816, 0x5c00b000, 0x5c00a800,
+ 0x0010032f, 0x832cac00, 0x00000006, 0x0201f800,
+ 0x0010c5dd, 0x0401f816, 0x5c00b000, 0x5c00a800,
0x5c00a000, 0x5c025800, 0x1c01f000, 0x4933c857,
0x4c500000, 0x4c540000, 0x4c580000, 0x83cca400,
0x00000006, 0x5930a809, 0x8254ac00, 0x00000006,
- 0x4200b000, 0x00000007, 0x0201f800, 0x0010c086,
+ 0x4200b000, 0x00000007, 0x0201f800, 0x0010c5dd,
0x5c00b000, 0x5c00a800, 0x5c00a000, 0x4933c857,
- 0x0201f800, 0x0010989f, 0x02000000, 0x00020b9d,
- 0x4d2c0000, 0x0201f800, 0x00109f51, 0x0402000b,
+ 0x0201f800, 0x00109c4d, 0x02000000, 0x00020afe,
+ 0x4d2c0000, 0x0201f800, 0x0010a314, 0x0402000b,
0x41780800, 0x4d400000, 0x42028000, 0x00000000,
- 0x0201f800, 0x00109d2a, 0x5c028000, 0x5c025800,
- 0x0201f000, 0x00020b9d, 0x5931d82a, 0x58ef400a,
+ 0x0201f800, 0x0010a0d9, 0x5c028000, 0x5c025800,
+ 0x0201f000, 0x00020afe, 0x5931d82a, 0x58ef400a,
0x58ee580c, 0x4a025a05, 0x00000103, 0x58ec0008,
- 0x0801f800, 0x5c025800, 0x0201f000, 0x00020b9d,
+ 0x0801f800, 0x5c025800, 0x0201f000, 0x00020afe,
0x4933c857, 0x59cc1806, 0x820c0580, 0x02000000,
- 0x04020027, 0x4a026802, 0x00fffffd, 0x5934000a,
+ 0x04020029, 0x4a026802, 0x00fffffd, 0x5934000a,
0x84000504, 0x4802680a, 0x42000000, 0x00000000,
- 0x4c0c0000, 0x0401f82d, 0x5c001800, 0x59300c26,
- 0x82040580, 0x00000021, 0x0402000b, 0x0201f800,
- 0x00101fb4, 0x42001800, 0x0000ffff, 0x42002000,
- 0x00000004, 0x42003000, 0x00000012, 0x0201f800,
- 0x00103a21, 0x59300809, 0x800409c0, 0x02000000,
- 0x00020b9d, 0x4a000a05, 0x00000103, 0x480c0806,
- 0x5931d82a, 0x58ef400a, 0x58ee580c, 0x58ec0008,
- 0x0801f800, 0x0201f000, 0x00020b9d, 0x42000000,
- 0x0010cf2c, 0x0201f800, 0x0010bfb3, 0x42000000,
- 0x00000006, 0x4c0c0000, 0x0401f808, 0x5c001800,
- 0x040007e9, 0x4c0c0000, 0x0401f827, 0x5c001800,
- 0x040207e5, 0x1c01f000, 0x4933c857, 0x4d400000,
- 0x4d240000, 0x4d200000, 0x5932481c, 0x40028000,
- 0x59300426, 0x82000d80, 0x00000051, 0x04000004,
- 0x82000d80, 0x00000021, 0x04020011, 0x0201f800,
- 0x00101fb4, 0x0201f800, 0x0010c0e8, 0x04020006,
+ 0x4c0c0000, 0x0401f82f, 0x5c001800, 0x02000000,
+ 0x00020afe, 0x59300c26, 0x82040580, 0x00000021,
+ 0x0402000b, 0x0201f800, 0x0010203c, 0x42001800,
+ 0x0000ffff, 0x42002000, 0x00000004, 0x42003000,
+ 0x00000012, 0x0201f800, 0x00103ac1, 0x59300809,
+ 0x800409c0, 0x02000000, 0x00020afe, 0x4a000a05,
+ 0x00000103, 0x480c0806, 0x5931d82a, 0x58ef400a,
+ 0x58ee580c, 0x58ec0008, 0x0801f800, 0x0201f000,
+ 0x00020afe, 0x42000000, 0x0010d547, 0x0201f800,
+ 0x0010c50a, 0x42000000, 0x00000006, 0x4c0c0000,
+ 0x0401f808, 0x5c001800, 0x040007e9, 0x4c0c0000,
+ 0x0401f82e, 0x5c001800, 0x040207e5, 0x1c01f000,
+ 0x4933c857, 0x4d400000, 0x4d240000, 0x4d200000,
+ 0x5932481c, 0x40028000, 0x59300426, 0x82000d80,
+ 0x00000051, 0x04000004, 0x82000d80, 0x00000021,
+ 0x04020018, 0x0201f800, 0x0010203c, 0x42001800,
+ 0x00000100, 0x0201f800, 0x0010c63f, 0x04020006,
0x59300426, 0x82000580, 0x00000021, 0x02000800,
- 0x00101cb7, 0x42000000, 0x00000001, 0x0201f800,
- 0x00104e36, 0x80000580, 0x0401f003, 0x82000540,
- 0x00000001, 0x5c024000, 0x5c024800, 0x5c028000,
- 0x1c01f000, 0x4933c857, 0x4d2c0000, 0x59325809,
- 0x812e59c0, 0x04020009, 0x497a6006, 0x497a6205,
- 0x4d380000, 0x42027000, 0x00000022, 0x0401fbb3,
- 0x5c027000, 0x80000580, 0x5c025800, 0x1c01f000,
- 0x4933c857, 0x4d2c0000, 0x4c500000, 0x4c540000,
- 0x4c580000, 0x59325809, 0x592e5801, 0x832cac00,
- 0x00000006, 0x83cca400, 0x00000006, 0x59a8086f,
- 0x82040d00, 0x000003ff, 0x82041480, 0x0000000f,
- 0x0400101b, 0x4200b000, 0x0000000f, 0x0201f800,
- 0x0010c086, 0x592e5801, 0x832cac00, 0x00000006,
- 0x82080c80, 0x0000000f, 0x0400100d, 0x4200b000,
- 0x0000000f, 0x0201f800, 0x0010c086, 0x592e5801,
- 0x832cac00, 0x00000006, 0x82041480, 0x0000000f,
- 0x04001007, 0x42001000, 0x0000000f, 0x4008b000,
- 0x0201f800, 0x0010c086, 0x0401f004, 0x4004b000,
- 0x0201f800, 0x0010c086, 0x5931d82a, 0x58ef400a,
- 0x58ee580c, 0x4a025a05, 0x00000103, 0x592e5801,
- 0x58ec0008, 0x0801f800, 0x0201f800, 0x00020b9d,
- 0x5c00b000, 0x5c00a800, 0x5c00a000, 0x5c025800,
+ 0x00101d37, 0x59300426, 0x82000580, 0x00000051,
+ 0x04020002, 0x41781800, 0x42000000, 0x00000001,
+ 0x0201f800, 0x00104fae, 0x80000580, 0x0401f003,
+ 0x82000540, 0x00000001, 0x5c024000, 0x5c024800,
+ 0x5c028000, 0x1c01f000, 0x4933c857, 0x4d2c0000,
+ 0x59325809, 0x812e59c0, 0x04020009, 0x497a6006,
+ 0x497a6205, 0x4d380000, 0x42027000, 0x00000022,
+ 0x0401fb97, 0x5c027000, 0x80000580, 0x5c025800,
0x1c01f000, 0x4933c857, 0x4d2c0000, 0x4c500000,
- 0x4c540000, 0x4c580000, 0x59cc0006, 0x82000d80,
- 0x01000000, 0x0400002d, 0x59cc0007, 0x9000b1c0,
- 0x8258b500, 0x000000ff, 0x8058b104, 0x8258b400,
- 0x00000002, 0x82580c80, 0x00000007, 0x04001003,
- 0x4200b000, 0x00000006, 0x83cca400, 0x00000006,
- 0x59301009, 0x800811c0, 0x02000800, 0x0010032e,
- 0x8208ac00, 0x00000006, 0x0201f800, 0x0010c086,
- 0x82000d00, 0xff000000, 0x800409c0, 0x0400001a,
- 0x8200b500, 0x000000ff, 0x04000017, 0x8058b104,
- 0x82580c80, 0x0000000e, 0x04001003, 0x4200b000,
- 0x0000000d, 0x58081001, 0x800811c0, 0x02000800,
- 0x0010032e, 0x8208ac00, 0x00000006, 0x0201f800,
- 0x0010c086, 0x0401f008, 0x59301009, 0x800811c0,
- 0x02000800, 0x0010032e, 0x48001006, 0x59cc0007,
- 0x48001007, 0x0401fefe, 0x5c00b000, 0x5c00a800,
+ 0x4c540000, 0x4c580000, 0x59325809, 0x592e5801,
+ 0x832cac00, 0x00000006, 0x83cca400, 0x00000006,
+ 0x59a8087d, 0x82040d00, 0x000003ff, 0x82041480,
+ 0x0000000f, 0x0400101b, 0x4200b000, 0x0000000f,
+ 0x0201f800, 0x0010c5dd, 0x592e5801, 0x832cac00,
+ 0x00000006, 0x82080c80, 0x0000000f, 0x0400100d,
+ 0x4200b000, 0x0000000f, 0x0201f800, 0x0010c5dd,
+ 0x592e5801, 0x832cac00, 0x00000006, 0x82041480,
+ 0x0000000f, 0x04001007, 0x42001000, 0x0000000f,
+ 0x4008b000, 0x0201f800, 0x0010c5dd, 0x0401f004,
+ 0x4004b000, 0x0201f800, 0x0010c5dd, 0x5931d82a,
+ 0x58ef400a, 0x58ee580c, 0x4a025a05, 0x00000103,
+ 0x592e5801, 0x58ec0008, 0x0801f800, 0x0201f800,
+ 0x00020afe, 0x5c00b000, 0x5c00a800, 0x5c00a000,
+ 0x5c025800, 0x1c01f000, 0x4933c857, 0x4d2c0000,
+ 0x4c500000, 0x4c540000, 0x4c580000, 0x59cc0006,
+ 0x82000d80, 0x01000000, 0x0400002d, 0x59cc0007,
+ 0x9000b1c0, 0x8258b500, 0x000000ff, 0x8058b104,
+ 0x8258b400, 0x00000002, 0x82580c80, 0x00000007,
+ 0x04001003, 0x4200b000, 0x00000006, 0x83cca400,
+ 0x00000006, 0x59301009, 0x800811c0, 0x02000800,
+ 0x0010032f, 0x8208ac00, 0x00000006, 0x0201f800,
+ 0x0010c5dd, 0x82000d00, 0xff000000, 0x800409c0,
+ 0x0400001a, 0x8200b500, 0x000000ff, 0x04000017,
+ 0x8058b104, 0x82580c80, 0x0000000e, 0x04001003,
+ 0x4200b000, 0x0000000d, 0x58081001, 0x800811c0,
+ 0x02000800, 0x0010032f, 0x8208ac00, 0x00000006,
+ 0x0201f800, 0x0010c5dd, 0x0401f008, 0x59301009,
+ 0x800811c0, 0x02000800, 0x0010032f, 0x48001006,
+ 0x59cc0007, 0x48001007, 0x0401fef5, 0x5c00b000,
+ 0x5c00a800, 0x5c00a000, 0x5c025800, 0x1c01f000,
+ 0x4933c857, 0x42000800, 0x00000000, 0x59cc0006,
+ 0x82000580, 0x02000000, 0x04000003, 0x42000800,
+ 0x00000001, 0x4d2c0000, 0x59325809, 0x812e59c0,
+ 0x02000800, 0x0010032f, 0x48065a07, 0x0201f800,
+ 0x00020401, 0x5c025800, 0x0201f000, 0x00020afe,
+ 0x4933c857, 0x4d2c0000, 0x4c500000, 0x4c540000,
+ 0x4c580000, 0x4200b000, 0x00000002, 0x59cc0806,
+ 0x82040580, 0x01000000, 0x04000004, 0x8204b500,
+ 0x0000ffff, 0x8058b104, 0x83cca400, 0x00000006,
+ 0x59300009, 0x8200ac00, 0x00000006, 0x0201f800,
+ 0x0010c5dd, 0x0401fec6, 0x5c00b000, 0x5c00a800,
0x5c00a000, 0x5c025800, 0x1c01f000, 0x4933c857,
- 0x42000800, 0x00000000, 0x59cc0006, 0x82000580,
- 0x02000000, 0x04000003, 0x42000800, 0x00000001,
- 0x4d2c0000, 0x59325809, 0x812e59c0, 0x02000800,
- 0x0010032e, 0x48065a07, 0x0201f800, 0x000203ef,
- 0x5c025800, 0x0201f000, 0x00020b9d, 0x4933c857,
- 0x4d2c0000, 0x4c500000, 0x4c540000, 0x4c580000,
- 0x4200b000, 0x00000002, 0x59cc0806, 0x82040580,
- 0x01000000, 0x04000004, 0x8204b500, 0x0000ffff,
- 0x8058b104, 0x83cca400, 0x00000006, 0x59300009,
- 0x8200ac00, 0x00000006, 0x0201f800, 0x0010c086,
- 0x0401fecf, 0x5c00b000, 0x5c00a800, 0x5c00a000,
- 0x5c025800, 0x1c01f000, 0x4933c857, 0x4803c857,
- 0x4807c857, 0x480bc857, 0x480fc857, 0x4813c857,
- 0x481bc857, 0x492fc857, 0x4d2c0000, 0x4c000000,
- 0x0201f800, 0x0010056e, 0x5c000000, 0x0400000f,
- 0x48025803, 0x481a5801, 0x48125808, 0x48065805,
- 0x480a5806, 0x480e5807, 0x5c001000, 0x4c080000,
- 0x480a5809, 0x412c1000, 0x0201f800, 0x00020016,
- 0x82000540, 0x00000001, 0x5c025800, 0x1c01f000,
- 0x4933c857, 0x4937c857, 0x4d1c0000, 0x0201f800,
- 0x00106405, 0x04020025, 0x59cc0001, 0x82000500,
- 0x00ffffff, 0x59341002, 0x82081500, 0x00ffffff,
- 0x80080580, 0x0402001d, 0x497a6205, 0x42000800,
- 0x00000035, 0x0201f800, 0x00109c9c, 0x04020012,
- 0x591c001d, 0x800001c0, 0x0400000f, 0x497a381d,
- 0x591c0415, 0x8c000502, 0x02000800, 0x0010032e,
- 0x84000502, 0x48023c15, 0x591c1407, 0x82080580,
- 0x00000003, 0x04000006, 0x82080580, 0x00000006,
- 0x04000005, 0x0401fc13, 0x0401f004, 0x0401f805,
- 0x0401f002, 0x0401f8d6, 0x5c023800, 0x1c01f000,
- 0x4d2c0000, 0x591e5809, 0x4933c857, 0x491fc857,
- 0x493bc857, 0x492fc857, 0x83380580, 0x00000015,
- 0x040000c9, 0x83380580, 0x00000016, 0x040200c4,
- 0x4d300000, 0x411e6000, 0x59cc0207, 0x4803c857,
- 0x82000d00, 0x0000ff00, 0x82040580, 0x00001700,
- 0x04000004, 0x82040580, 0x00000300, 0x04020067,
- 0x591c0203, 0x4803c857, 0x82000580, 0x0000000d,
- 0x04000046, 0x812e59c0, 0x040000b0, 0x591c0202,
- 0x4803c857, 0x82000580, 0x0000ffff, 0x04020093,
- 0x592c020b, 0x4803c857, 0x82000500, 0x00000003,
- 0x82000580, 0x00000002, 0x04020007, 0x592c0810,
- 0x591c0012, 0x4803c857, 0x4807c857, 0x80040580,
- 0x04020086, 0x591c0415, 0x4803c857, 0x8c000500,
- 0x04020082, 0x42000000, 0x0010cf09, 0x0201f800,
- 0x0010bfb3, 0x41780800, 0x591c1006, 0x42000000,
- 0x0000000a, 0x0201f800, 0x00106c9d, 0x592c0407,
- 0x4803c857, 0x800001c0, 0x0400000c, 0x80080c80,
- 0x04001004, 0x02020800, 0x0010032e, 0x80001040,
- 0x480a5c07, 0x800811c0, 0x04020004, 0x0201f800,
- 0x00110814, 0x0401f07d, 0x0201f800, 0x001099b4,
- 0x591c0818, 0x591c0019, 0x48065809, 0x4802580a,
- 0x592e4411, 0x81224110, 0x59300008, 0x8c000500,
- 0x02020800, 0x00100c76, 0x497a3809, 0x0201f800,
- 0x000202c1, 0x04020059, 0x411e6000, 0x0201f800,
- 0x00107eb4, 0x0401f069, 0x0201f800, 0x00107ef8,
- 0x04000017, 0x591c0006, 0x48026006, 0x4926601c,
- 0x4936600a, 0x4a026407, 0x00000003, 0x492e6009,
- 0x591c0818, 0x591c1019, 0x48066018, 0x480a6019,
- 0x4d380000, 0x591e7403, 0x4d300000, 0x411e6000,
- 0x0201f800, 0x00107eb4, 0x5c026000, 0x0201f800,
- 0x00020bc1, 0x5c027000, 0x0401f050, 0x59a8002c,
- 0x48023a05, 0x0401f04d, 0x59cc0407, 0x82000580,
- 0x0000000b, 0x0402002e, 0x59340a00, 0x84040d0e,
- 0x48066a00, 0x592c0a05, 0x82040d00, 0x000000ff,
- 0x82040d80, 0x00000014, 0x04000003, 0x4a026226,
- 0x00000003, 0x59300008, 0x8c000500, 0x02020800,
- 0x00100c76, 0x4d400000, 0x497a5c0a, 0x42028000,
- 0x00000003, 0x592c0a09, 0x0201f800, 0x00104e1a,
- 0x0201f800, 0x0010c0c7, 0x04020009, 0x0201f800,
- 0x000203ef, 0x59300a26, 0x82040d80, 0x00000003,
- 0x02000800, 0x001099b4, 0x497a6009, 0x5c028000,
- 0x4a026403, 0x00000085, 0x4a026203, 0x00000009,
- 0x4a026407, 0x00000002, 0x42000800, 0x8000404b,
- 0x0201f800, 0x00020b3e, 0x0401f01c, 0x59cc0207,
- 0x82000580, 0x00002a00, 0x04020004, 0x59a8002c,
- 0x48023a05, 0x0401f015, 0x812e59c0, 0x02000800,
- 0x0010032e, 0x4a025a05, 0x00000103, 0x591c0008,
- 0x8c000500, 0x02020800, 0x00100c76, 0x591c0402,
- 0x48025c07, 0x4a025a07, 0x00000003, 0x497a5c0a,
- 0x0201f800, 0x000203ef, 0x0201f800, 0x00107eb4,
- 0x0201f800, 0x001049bd, 0x5c026000, 0x0201f800,
- 0x00020b9d, 0x0401f002, 0x5c026000, 0x5c025800,
- 0x1c01f000, 0x0401f819, 0x0401f7fd, 0x4933c857,
- 0x83380580, 0x00000015, 0x04020004, 0x59a8002c,
- 0x48023a05, 0x0401f00d, 0x83380580, 0x00000016,
- 0x0402000d, 0x4d300000, 0x411e6000, 0x0201f800,
- 0x0010b3fa, 0x0201f800, 0x00020afd, 0x0201f800,
- 0x00020b9d, 0x5c026000, 0x497a381d, 0x0201f800,
- 0x00020b9d, 0x1c01f000, 0x4c5c0000, 0x591c0415,
- 0x84000540, 0x48023c15, 0x59ccb80b, 0x4933c857,
- 0x491fc857, 0x492fc857, 0x4803c857, 0x485fc857,
- 0x8c5cbd3c, 0x04000005, 0x59a8002c, 0x48023a05,
- 0x497a381d, 0x0401f057, 0x4d300000, 0x411e6000,
- 0x0201f800, 0x00109419, 0x5c026000, 0x591c0407,
- 0x82000580, 0x00000000, 0x0400004e, 0x591c0403,
- 0x82000580, 0x00000050, 0x0402000c, 0x4d300000,
- 0x411e6000, 0x4a026203, 0x00000001, 0x42000800,
- 0x80000043, 0x0201f800, 0x00020b3e, 0x5c026000,
- 0x497a381d, 0x0401f03f, 0x591c0203, 0x82000580,
- 0x0000000d, 0x0400001f, 0x812e59c0, 0x02000800,
- 0x0010032e, 0x592c020b, 0x4803c857, 0x8c000500,
- 0x0402001f, 0x8c000502, 0x04000016, 0x591c0415,
- 0x8c00051c, 0x04020007, 0x591c0012, 0x4803c857,
- 0x800001c0, 0x0400000f, 0x591c0013, 0x48023817,
- 0x4a023813, 0x0fffffff, 0x592c0209, 0x8400051e,
- 0x48025a09, 0x42000000, 0x0010cf0b, 0x0201f800,
- 0x0010bfb3, 0x4a023a15, 0x00000001, 0x0401f01a,
- 0x42000000, 0x0010cf0c, 0x0201f800, 0x0010bfb3,
- 0x4a023a15, 0x00000007, 0x0401f013, 0x8c5cbd3a,
- 0x040207f8, 0x59cc000a, 0x592c1810, 0x4803c857,
- 0x480fc857, 0x800c0580, 0x040007f2, 0x59cc000a,
- 0x4803c857, 0x48023817, 0x48023816, 0x42000000,
- 0x0010cf0a, 0x0201f800, 0x0010bfb3, 0x4a023a15,
- 0x00000005, 0x5c00b800, 0x0201f000, 0x00109b1e,
- 0x5c00b800, 0x0201f000, 0x00020b9d, 0x4933c857,
- 0x4d1c0000, 0x0201f800, 0x00106405, 0x04020053,
- 0x59cc0001, 0x59341002, 0x80080580, 0x82000500,
- 0x00ffffff, 0x0402004a, 0x5930141a, 0x0201f800,
- 0x00109cf9, 0x02000800, 0x0010032e, 0x591c1407,
- 0x82080580, 0x00000007, 0x04000041, 0x82080580,
- 0x00000002, 0x0400003e, 0x82080580, 0x00000000,
- 0x0400003b, 0x591c0202, 0x82000d80, 0x0000ffff,
- 0x04000004, 0x59301a1a, 0x800c0580, 0x04020034,
- 0x83380580, 0x00000015, 0x0400002f, 0x4d300000,
- 0x4d2c0000, 0x411e6000, 0x59325809, 0x0201f800,
- 0x0010989f, 0x02000800, 0x0010032e, 0x592c0205,
- 0x82000500, 0x000000ff, 0x82000580, 0x00000014,
- 0x04000003, 0x4a026226, 0x00000003, 0x497a5c0a,
+ 0x4937c857, 0x4d1c0000, 0x0201f800, 0x00106760,
+ 0x04020025, 0x59cc0001, 0x82000500, 0x00ffffff,
+ 0x59341002, 0x82081500, 0x00ffffff, 0x80080580,
+ 0x0402001d, 0x497a6205, 0x42000800, 0x00000035,
+ 0x0201f800, 0x0010a04e, 0x04020012, 0x591c001d,
+ 0x800001c0, 0x0400000f, 0x497a381d, 0x591c0415,
+ 0x8c000502, 0x02000800, 0x0010032f, 0x84000502,
+ 0x48023c15, 0x591c1407, 0x82080580, 0x00000003,
+ 0x04000006, 0x82080580, 0x00000006, 0x04000005,
+ 0x0401fc6b, 0x0401f004, 0x0401f805, 0x0401f002,
+ 0x0401f8d4, 0x5c023800, 0x1c01f000, 0x4d2c0000,
+ 0x591e5809, 0x4933c857, 0x491fc857, 0x493bc857,
+ 0x492fc857, 0x83380580, 0x00000015, 0x040000c7,
+ 0x83380580, 0x00000016, 0x040200c2, 0x4d300000,
+ 0x411e6000, 0x59cc0207, 0x4803c857, 0x82000d00,
+ 0x0000ff00, 0x82040580, 0x00001700, 0x04000004,
+ 0x82040580, 0x00000300, 0x04020065, 0x591c0203,
+ 0x4803c857, 0x82000580, 0x0000000d, 0x04000045,
+ 0x812e59c0, 0x040000ae, 0x591c0202, 0x4803c857,
+ 0x82000580, 0x0000ffff, 0x04020091, 0x592c020b,
+ 0x4803c857, 0x82000500, 0x00000003, 0x82000580,
+ 0x00000002, 0x04020007, 0x592c0810, 0x591c0012,
+ 0x4803c857, 0x4807c857, 0x80040580, 0x04020084,
+ 0x591c0415, 0x4803c857, 0x8c000500, 0x04020080,
+ 0x42000000, 0x0010d51f, 0x0201f800, 0x0010c50a,
+ 0x41780800, 0x591c1006, 0x42000000, 0x0000000a,
+ 0x0201f800, 0x00107000, 0x592c0407, 0x4803c857,
+ 0x800001c0, 0x0400000c, 0x80080c80, 0x04001004,
+ 0x02020800, 0x0010032f, 0x80001040, 0x480a5c07,
+ 0x800811c0, 0x04020004, 0x0201f800, 0x00110f21,
+ 0x0401f07b, 0x0201f800, 0x00109d64, 0x591c0818,
+ 0x591c0019, 0x48065809, 0x4802580a, 0x592e4411,
+ 0x81224110, 0x59300008, 0x8c000500, 0x02020800,
+ 0x00100c9b, 0x497a3809, 0x0201f800, 0x000202c8,
+ 0x04020057, 0x411e6000, 0x0401fc05, 0x0401f068,
+ 0x0401fc47, 0x04000017, 0x591c0006, 0x48026006,
+ 0x4926601c, 0x4936600a, 0x4a026407, 0x00000003,
+ 0x492e6009, 0x591c0818, 0x591c1019, 0x48066018,
+ 0x480a6019, 0x4d380000, 0x591e7403, 0x4d300000,
+ 0x411e6000, 0x0201f800, 0x00108253, 0x5c026000,
+ 0x0201f800, 0x00020b22, 0x5c027000, 0x0401f050,
+ 0x59a80032, 0x48023a05, 0x0401f04d, 0x59cc0407,
+ 0x82000580, 0x0000000b, 0x0402002e, 0x59340a00,
+ 0x84040d0e, 0x48066a00, 0x592c0a05, 0x82040d00,
+ 0x000000ff, 0x82040d80, 0x00000014, 0x04000003,
+ 0x4a026226, 0x00000003, 0x59300008, 0x8c000500,
+ 0x02020800, 0x00100c9b, 0x4d400000, 0x497a5c0a,
0x42028000, 0x00000003, 0x592c0a09, 0x0201f800,
- 0x00104e1a, 0x0201f800, 0x0010c0c7, 0x04020009,
- 0x0201f800, 0x000203ef, 0x59300a26, 0x82040d80,
- 0x00000003, 0x02000800, 0x001099b4, 0x497a6009,
- 0x5c025800, 0x4a026403, 0x00000085, 0x4a026203,
+ 0x00104f92, 0x0201f800, 0x0010c61e, 0x04020009,
+ 0x0201f800, 0x00020401, 0x59300a26, 0x82040d80,
+ 0x00000003, 0x02000800, 0x00109d64, 0x497a6009,
+ 0x5c028000, 0x4a026403, 0x00000085, 0x4a026203,
0x00000009, 0x4a026407, 0x00000002, 0x42000800,
- 0x8000404b, 0x0201f800, 0x00020b3e, 0x5c026000,
- 0x0401f003, 0x59a8002c, 0x48023a05, 0x497a381d,
- 0x0201f800, 0x00020b9d, 0x5c023800, 0x1c01f000,
- 0x4933c857, 0x4c580000, 0x4d2c0000, 0x59325809,
- 0x59342200, 0x82102500, 0xffffdffd, 0x48126a00,
- 0x83383580, 0x00000015, 0x0400000d, 0x0201f800,
- 0x0010989f, 0x04000068, 0x0201f800, 0x00109f51,
- 0x04020005, 0x4200b000, 0x00000002, 0x0201f800,
- 0x00109f30, 0x0401fa3f, 0x0401f07f, 0x83cc1400,
- 0x00000008, 0x4200b000, 0x00000002, 0x83341c00,
- 0x00000006, 0x0201f800, 0x00108c57, 0x04020014,
- 0x83cc1400, 0x0000000a, 0x4200b000, 0x00000002,
- 0x83341c00, 0x00000008, 0x0201f800, 0x00108c57,
- 0x0402000b, 0x0201f800, 0x00101cb7, 0x59342200,
- 0x59cc1007, 0x800811c0, 0x04000003, 0x480a6801,
- 0x84102542, 0x48126a00, 0x0401f066, 0x4d3c0000,
- 0x417a7800, 0x0201f800, 0x0010ff80, 0x5c027800,
- 0x42000000, 0x0010cf23, 0x0201f800, 0x0010bfb3,
- 0x59340200, 0x84000558, 0x48026a00, 0x4d300000,
- 0x0201f800, 0x00107ef8, 0x02000800, 0x0010032e,
- 0x4926601c, 0x4936600a, 0x497a6009, 0x4a026407,
- 0x00000001, 0x4a026403, 0x00000001, 0x42003000,
- 0x00000003, 0x0201f800, 0x0010b73d, 0x0201f800,
- 0x00101fb4, 0x59240400, 0x8c00050a, 0x04020011,
- 0x41782800, 0x42003000, 0x00000001, 0x4d400000,
- 0x42028000, 0x00000029, 0x0201f800, 0x0010b18b,
- 0x5c028000, 0x4a026407, 0x00000004, 0x4a026203,
- 0x00000007, 0x4a026429, 0x00000001, 0x0401f009,
- 0x4a026203, 0x00000001, 0x42000800, 0x0000000b,
- 0x0201f800, 0x001045ea, 0x0201f800, 0x00106d1c,
- 0x5c026000, 0x0201f800, 0x0010989f, 0x04000026,
- 0x0201f800, 0x00109f51, 0x04020026, 0x0401f9e1,
- 0x0401f021, 0x42000000, 0x0010cf26, 0x0201f800,
- 0x0010bfb3, 0x4d3c0000, 0x417a7800, 0x0201f800,
- 0x0010ff80, 0x42000000, 0x0010cf23, 0x0201f800,
- 0x0010bfb3, 0x59340200, 0x84000558, 0x48026a00,
- 0x42003000, 0x00000003, 0x41782800, 0x42002000,
- 0x00000005, 0x4d400000, 0x4d440000, 0x59368c03,
- 0x42028000, 0x00000029, 0x0201f800, 0x0010a22a,
- 0x5c028800, 0x5c028000, 0x5c027800, 0x0201f800,
- 0x00101cb7, 0x0201f800, 0x00020b9d, 0x0401f002,
- 0x0401fc3b, 0x5c025800, 0x5c00b000, 0x1c01f000,
- 0x4933c857, 0x41380000, 0x83383480, 0x00000058,
- 0x02021800, 0x0010032e, 0x0c01f001, 0x0010855e,
- 0x00108559, 0x0010855e, 0x0010855e, 0x0010855e,
- 0x0010855e, 0x00108557, 0x00108557, 0x00108557,
- 0x00108557, 0x00108557, 0x00108557, 0x00108557,
- 0x00108557, 0x00108557, 0x00108557, 0x00108557,
- 0x00108557, 0x00108557, 0x00108557, 0x00108557,
- 0x00108557, 0x00108557, 0x00108557, 0x00108557,
- 0x00108557, 0x00108557, 0x00108557, 0x00108557,
- 0x00108557, 0x00108557, 0x0010855e, 0x00108557,
- 0x0010855e, 0x0010855e, 0x00108557, 0x00108557,
- 0x00108557, 0x00108557, 0x00108557, 0x0010855e,
- 0x00108557, 0x00108557, 0x00108557, 0x00108557,
- 0x00108557, 0x00108557, 0x00108557, 0x00108557,
- 0x00108557, 0x0010855e, 0x0010855e, 0x00108557,
- 0x00108557, 0x00108557, 0x00108557, 0x00108557,
- 0x00108557, 0x00108557, 0x00108557, 0x00108557,
- 0x0010855e, 0x00108557, 0x00108557, 0x0010855e,
- 0x0010855e, 0x00108557, 0x0010855e, 0x0010855e,
- 0x00108557, 0x00108557, 0x00108557, 0x00108557,
- 0x0010855e, 0x00108557, 0x00108557, 0x00108557,
- 0x0010855e, 0x00108557, 0x00108557, 0x00108557,
- 0x0010855e, 0x00108557, 0x00108557, 0x00108557,
- 0x0010855e, 0x00108557, 0x0010855e, 0x00108557,
- 0x00108557, 0x00108557, 0x00108557, 0x00108557,
- 0x00108557, 0x00108557, 0x00108557, 0x0201f800,
- 0x0010032e, 0x4a026203, 0x00000001, 0x493a6403,
- 0x0201f000, 0x00106d1c, 0x4933c857, 0x4a026203,
- 0x00000001, 0x493a6403, 0x0201f000, 0x00106d1c,
- 0x59300403, 0x82003480, 0x00000058, 0x02021800,
- 0x0010032e, 0x83383580, 0x00000013, 0x040000aa,
- 0x83383580, 0x00000027, 0x04020058, 0x4933c857,
- 0x0201f800, 0x00106d91, 0x0201f800, 0x0010b827,
- 0x0201f800, 0x001099c7, 0x04000010, 0x0201f800,
- 0x001099e2, 0x0400004b, 0x59300403, 0x82000d80,
- 0x00000022, 0x04020042, 0x42000000, 0x00000205,
- 0x0201f800, 0x0010817e, 0x0400003d, 0x0401fc1e,
- 0x0400003f, 0x0401f03f, 0x42000000, 0x00000203,
- 0x0201f800, 0x0010817e, 0x04000035, 0x0201f800,
- 0x00101cb7, 0x42000800, 0x00000007, 0x0201f800,
- 0x001045ea, 0x0401f917, 0x4d440000, 0x59368c03,
- 0x83440580, 0x000007fe, 0x04020008, 0x59a8121b,
- 0x84081540, 0x0201f800, 0x001050f7, 0x04020002,
- 0x8408154a, 0x480b521b, 0x42028000, 0x00000029,
- 0x4d3c0000, 0x417a7800, 0x0201f800, 0x0010ff80,
- 0x5c027800, 0x836c0580, 0x00000003, 0x0400000c,
- 0x5932680a, 0x59340008, 0x800001c0, 0x04020008,
- 0x59368c03, 0x4933c857, 0x4937c857, 0x4947c857,
- 0x0201f800, 0x001046a8, 0x0401f00c, 0x42000000,
- 0x0010cf23, 0x0201f800, 0x0010bfb3, 0x42003000,
- 0x00000015, 0x41782800, 0x42002000, 0x00000003,
- 0x0201f800, 0x0010a22a, 0x5c028800, 0x0201f800,
- 0x00109bf9, 0x0201f000, 0x00020b9d, 0x1c01f000,
- 0x0401f8e4, 0x0401f7fa, 0x83380580, 0x00000014,
- 0x0400000c, 0x4933c857, 0x0201f800, 0x00107226,
- 0x02020000, 0x00107f37, 0x59300203, 0x82000580,
- 0x00000002, 0x04000109, 0x0201f800, 0x0010032e,
- 0x4933c857, 0x0201f800, 0x00106d91, 0x0201f800,
- 0x0010b827, 0x42002800, 0x00000002, 0x59300403,
- 0x82000580, 0x00000051, 0x02000000, 0x0010a3f8,
- 0x4d3c0000, 0x417a7800, 0x0201f800, 0x0010ff80,
- 0x5c027800, 0x42003000, 0x00000016, 0x41782800,
- 0x4d400000, 0x4d440000, 0x59368c03, 0x42002000,
- 0x00000009, 0x42028000, 0x00000029, 0x0201f800,
- 0x0010a22a, 0x5c028800, 0x5c028000, 0x42000000,
- 0x0010cf23, 0x0201f800, 0x0010bfb3, 0x0201f800,
- 0x001099c7, 0x0402000c, 0x0201f800, 0x00101cb7,
- 0x0401f8ac, 0x59340c03, 0x82040580, 0x000007fe,
- 0x040207bf, 0x59a80a1b, 0x84040d40, 0x4807521b,
- 0x0401f7bb, 0x0201f800, 0x001099e2, 0x04020003,
- 0x0401f8a0, 0x0401f7b6, 0x59300403, 0x82000d80,
- 0x00000032, 0x04020004, 0x0201f800, 0x00102309,
- 0x0401f7af, 0x82000d80, 0x00000022, 0x04000895,
- 0x0401f7ab, 0x4933c857, 0x4803c857, 0x0c01f001,
- 0x00108681, 0x00108681, 0x00108681, 0x00108681,
- 0x00108681, 0x00108681, 0x00108678, 0x00108678,
- 0x00108678, 0x00108678, 0x00108678, 0x00108678,
- 0x00108678, 0x00108678, 0x00108678, 0x00108678,
- 0x00108678, 0x00108678, 0x00108678, 0x00108678,
- 0x00108678, 0x00108678, 0x00108678, 0x00108678,
- 0x00108678, 0x00108678, 0x00108678, 0x00108678,
- 0x00108678, 0x00108678, 0x00108685, 0x001086a2,
- 0x00108678, 0x001086a2, 0x001086a2, 0x00108678,
- 0x00108678, 0x00108678, 0x00108678, 0x00108678,
- 0x001086a2, 0x001086a2, 0x00108678, 0x00108678,
- 0x00108678, 0x00108678, 0x00108678, 0x00108678,
- 0x00108678, 0x00108678, 0x00108693, 0x001086a2,
- 0x00108678, 0x0010868c, 0x00108678, 0x00108678,
- 0x00108678, 0x0010868c, 0x00108678, 0x00108678,
- 0x00108678, 0x001086a2, 0x0010868f, 0x00108678,
- 0x0010867a, 0x001086a2, 0x00108678, 0x001086a2,
- 0x001086a2, 0x00108678, 0x00108678, 0x00108678,
- 0x00108678, 0x001086a2, 0x00108678, 0x00108678,
- 0x00108678, 0x001086a2, 0x00108678, 0x00108678,
- 0x00108678, 0x001086a2, 0x00108678, 0x00108678,
- 0x00108678, 0x001086a2, 0x00108678, 0x001086a2,
- 0x00108678, 0x00108678, 0x00108678, 0x00108678,
- 0x00108678, 0x00108678, 0x00108678, 0x00108678,
- 0x0201f800, 0x0010032e, 0x4d2c0000, 0x59325809,
- 0x0201f800, 0x000203ef, 0x5c025800, 0x0201f000,
- 0x00020b9d, 0x4a026203, 0x00000002, 0x0201f000,
- 0x00109a67, 0x4a026203, 0x00000005, 0x59a8002c,
- 0x48026205, 0x59a8002a, 0x48026006, 0x1c01f000,
- 0x59300827, 0x49780a05, 0x0401f014, 0x0201f800,
- 0x00109bf9, 0x0201f000, 0x00020b9d, 0x0201f800,
- 0x00102309, 0x0201f800, 0x00106e41, 0x04000005,
- 0x0201f800, 0x00106d91, 0x0201f000, 0x00020b9d,
- 0x0201f800, 0x00106d91, 0x0201f800, 0x00020b9d,
- 0x0201f000, 0x00106e2e, 0x4933c857, 0x4a026203,
- 0x00000002, 0x59a8002a, 0x48026006, 0x1c01f000,
- 0x4933c857, 0x0201f800, 0x0010989f, 0x0400002e,
- 0x4d2c0000, 0x0201f800, 0x00109f51, 0x0402000a,
- 0x4d400000, 0x42028000, 0x00000031, 0x42000800,
- 0x00000004, 0x0201f800, 0x00109d2a, 0x5c028000,
- 0x0401f020, 0x59300c07, 0x82040580, 0x00000010,
- 0x04000004, 0x82040580, 0x00000011, 0x0402000a,
- 0x4a025a07, 0x00000031, 0x4a02580e, 0x00000004,
- 0x4a02580f, 0x000000ff, 0x0201f800, 0x000203ef,
- 0x0401f010, 0x592c0405, 0x8c00051e, 0x0400000d,
- 0x4a025a05, 0x00000103, 0x4a025806, 0x01000000,
- 0x4da00000, 0x4cec0000, 0x5931d82a, 0x58ef400a,
- 0x58ec0008, 0x0801f800, 0x5c01d800, 0x5c034000,
- 0x5c025800, 0x1c01f000, 0x4933c857, 0x83340580,
- 0x0010e23c, 0x0402000c, 0x83380d80, 0x00000015,
- 0x04000005, 0x83380d80, 0x00000016, 0x02020000,
- 0x00107f37, 0x0201f800, 0x0010b82a, 0x0201f000,
- 0x00020b9d, 0x59340400, 0x82000500, 0x000000ff,
- 0x82003480, 0x0000000c, 0x02021800, 0x0010032e,
- 0x59303403, 0x82180d80, 0x0000004d, 0x02000000,
- 0x00109c68, 0x82180d80, 0x00000033, 0x02000000,
- 0x00109c1d, 0x82180d80, 0x00000028, 0x02000000,
- 0x00109a24, 0x82180d80, 0x00000029, 0x02000000,
- 0x00109a39, 0x82180d80, 0x00000057, 0x02000000,
- 0x0010a342, 0x82180d80, 0x0000001f, 0x02000000,
- 0x00108117, 0x82180d80, 0x00000055, 0x02000000,
- 0x001080f0, 0x82180d80, 0x00000000, 0x04000545,
- 0x82180d80, 0x00000022, 0x02000000, 0x00108144,
- 0x82180d80, 0x00000035, 0x02000000, 0x0010827c,
- 0x82180d80, 0x00000039, 0x040004e1, 0x82180d80,
- 0x0000003d, 0x02000000, 0x001081b0, 0x82180d80,
- 0x00000044, 0x02000000, 0x001081ed, 0x82180d80,
- 0x00000049, 0x02000000, 0x00108243, 0x82180d80,
- 0x00000041, 0x02000000, 0x0010822f, 0x82180d80,
- 0x00000043, 0x02000000, 0x00109dcc, 0x82180d80,
- 0x00000051, 0x02000000, 0x00109e3f, 0x82180d80,
- 0x00000004, 0x04020003, 0x42000000, 0x00000001,
- 0x83380d80, 0x00000015, 0x04000006, 0x83380d80,
- 0x00000016, 0x02020000, 0x00107f37, 0x0401f28d,
- 0x4c000000, 0x0201f800, 0x0010b82a, 0x5c000000,
- 0x4d2c0000, 0x4d3c0000, 0x0c01f804, 0x5c027800,
- 0x5c025800, 0x1c01f000, 0x0010875e, 0x00108762,
- 0x0010875e, 0x001087d7, 0x0010875e, 0x00108929,
- 0x001089df, 0x0010875e, 0x0010875e, 0x00108990,
- 0x0010875e, 0x001089a2, 0x4933c857, 0x497a6008,
- 0x59300809, 0x58040000, 0x4a000a05, 0x00000103,
- 0x0201f000, 0x00020b9d, 0x4933c857, 0x40000000,
- 0x40000000, 0x1c01f000, 0x4933c857, 0x0201f800,
- 0x0010491c, 0x59a8005a, 0x82000580, 0x00000074,
- 0x0402005b, 0x0201f800, 0x0010b107, 0x04020014,
- 0x0401f85b, 0x0201f800, 0x0010989f, 0x0400000c,
- 0x0201f800, 0x00109f51, 0x04020009, 0x41780800,
+ 0x8000404b, 0x0201f800, 0x00020a9f, 0x0401f01c,
+ 0x59cc0207, 0x82000580, 0x00002a00, 0x04020004,
+ 0x59a80032, 0x48023a05, 0x0401f015, 0x812e59c0,
+ 0x02000800, 0x0010032f, 0x4a025a05, 0x00000103,
+ 0x591c0008, 0x8c000500, 0x02020800, 0x00100c9b,
+ 0x591c0402, 0x48025c07, 0x4a025a07, 0x00000003,
+ 0x497a5c0a, 0x0201f800, 0x00020401, 0x0201f800,
+ 0x00108253, 0x0201f800, 0x00104b13, 0x5c026000,
+ 0x0201f800, 0x00020afe, 0x0401f002, 0x5c026000,
+ 0x5c025800, 0x1c01f000, 0x0401f819, 0x0401f7fd,
+ 0x4933c857, 0x83380580, 0x00000015, 0x04020004,
+ 0x59a80032, 0x48023a05, 0x0401f00d, 0x83380580,
+ 0x00000016, 0x0402000d, 0x4d300000, 0x411e6000,
+ 0x0201f800, 0x0010b8f1, 0x0201f800, 0x00020a58,
+ 0x0201f800, 0x00020afe, 0x5c026000, 0x497a381d,
+ 0x0201f800, 0x00020afe, 0x1c01f000, 0x4c5c0000,
+ 0x591c0415, 0x84000540, 0x48023c15, 0x59ccb80b,
+ 0x4933c857, 0x491fc857, 0x492fc857, 0x4803c857,
+ 0x485fc857, 0x8c5cbd3c, 0x04000005, 0x59a80032,
+ 0x48023a05, 0x497a381d, 0x0401f05b, 0x4d300000,
+ 0x411e6000, 0x0201f800, 0x00109794, 0x5c026000,
+ 0x591c0407, 0x82000580, 0x00000000, 0x04000052,
+ 0x591c0403, 0x82000580, 0x00000050, 0x0402000c,
+ 0x4d300000, 0x411e6000, 0x4a026203, 0x00000001,
+ 0x42000800, 0x80000043, 0x0201f800, 0x00020a9f,
+ 0x5c026000, 0x497a381d, 0x0401f043, 0x591c0203,
+ 0x82000580, 0x0000000d, 0x0400001f, 0x812e59c0,
+ 0x02000800, 0x0010032f, 0x592c020b, 0x4803c857,
+ 0x8c000500, 0x0402001f, 0x8c000502, 0x04000016,
+ 0x591c0415, 0x8c00051c, 0x04020007, 0x591c0012,
+ 0x4803c857, 0x800001c0, 0x0400000f, 0x591c0013,
+ 0x48023817, 0x4a023813, 0x0fffffff, 0x592c0209,
+ 0x8400051e, 0x48025a09, 0x42000000, 0x0010d521,
+ 0x0201f800, 0x0010c50a, 0x4a023a15, 0x00000001,
+ 0x0401f01e, 0x42000000, 0x0010d522, 0x0201f800,
+ 0x0010c50a, 0x4a023a15, 0x00000007, 0x0401f017,
+ 0x59300016, 0x591c0816, 0x80040580, 0x04020016,
+ 0x8c5cbd3a, 0x040207f4, 0x59cc000a, 0x592c1810,
+ 0x4803c857, 0x480fc857, 0x800c0580, 0x040007ee,
+ 0x59cc000a, 0x4803c857, 0x48023817, 0x48023816,
+ 0x42000000, 0x0010d520, 0x0201f800, 0x0010c50a,
+ 0x4a023a15, 0x00000005, 0x5c00b800, 0x0201f000,
+ 0x00109ed0, 0x5c00b800, 0x0201f000, 0x00020afe,
+ 0x4933c857, 0x4d1c0000, 0x0201f800, 0x00106760,
+ 0x04020053, 0x59cc0001, 0x59341002, 0x80080580,
+ 0x82000500, 0x00ffffff, 0x0402004a, 0x5930141a,
+ 0x0201f800, 0x0010a0ab, 0x02000800, 0x0010032f,
+ 0x591c1407, 0x82080580, 0x00000007, 0x04000041,
+ 0x82080580, 0x00000002, 0x0400003e, 0x82080580,
+ 0x00000000, 0x0400003b, 0x591c0202, 0x82000d80,
+ 0x0000ffff, 0x04000004, 0x59301a1a, 0x800c0580,
+ 0x04020034, 0x83380580, 0x00000015, 0x0400002f,
+ 0x4d300000, 0x4d2c0000, 0x411e6000, 0x59325809,
+ 0x0201f800, 0x00109c4d, 0x02000800, 0x0010032f,
+ 0x592c0205, 0x82000500, 0x000000ff, 0x82000580,
+ 0x00000014, 0x04000003, 0x4a026226, 0x00000003,
+ 0x497a5c0a, 0x42028000, 0x00000003, 0x592c0a09,
+ 0x0201f800, 0x00104f92, 0x0201f800, 0x0010c61e,
+ 0x04020009, 0x0201f800, 0x00020401, 0x59300a26,
+ 0x82040d80, 0x00000003, 0x02000800, 0x00109d64,
+ 0x497a6009, 0x5c025800, 0x4a026403, 0x00000085,
+ 0x4a026203, 0x00000009, 0x4a026407, 0x00000002,
+ 0x42000800, 0x8000404b, 0x0201f800, 0x00020a9f,
+ 0x5c026000, 0x0401f003, 0x59a80032, 0x48023a05,
+ 0x497a381d, 0x0201f800, 0x00020afe, 0x5c023800,
+ 0x1c01f000, 0x4933c857, 0x4c580000, 0x4d2c0000,
+ 0x59325809, 0x59342200, 0x82102500, 0xffffdffd,
+ 0x48126a00, 0x83383580, 0x00000015, 0x0400000d,
+ 0x0201f800, 0x00109c4d, 0x04000068, 0x0201f800,
+ 0x0010a314, 0x04020005, 0x4200b000, 0x00000002,
+ 0x0201f800, 0x0010a2f3, 0x0401fa3d, 0x0401f07f,
+ 0x83cc1400, 0x00000008, 0x4200b000, 0x00000002,
+ 0x83341c00, 0x00000006, 0x0201f800, 0x00108fc3,
+ 0x04020014, 0x83cc1400, 0x0000000a, 0x4200b000,
+ 0x00000002, 0x83341c00, 0x00000008, 0x0201f800,
+ 0x00108fc3, 0x0402000b, 0x0201f800, 0x00101d37,
+ 0x59342200, 0x59cc1007, 0x800811c0, 0x04000003,
+ 0x480a6801, 0x84102542, 0x48126a00, 0x0401f066,
+ 0x4d3c0000, 0x417a7800, 0x0201f800, 0x00110684,
+ 0x5c027800, 0x42000000, 0x0010d53e, 0x0201f800,
+ 0x0010c50a, 0x59340200, 0x84000558, 0x48026a00,
+ 0x4d300000, 0x0201f800, 0x00108297, 0x02000800,
+ 0x0010032f, 0x4926601c, 0x4936600a, 0x497a6009,
+ 0x4a026407, 0x00000001, 0x4a026403, 0x00000001,
+ 0x42003000, 0x00000003, 0x0201f800, 0x0010bc92,
+ 0x0201f800, 0x0010203c, 0x59240400, 0x8c00050a,
+ 0x04020011, 0x41782800, 0x42003000, 0x00000001,
+ 0x4d400000, 0x42028000, 0x00000029, 0x0201f800,
+ 0x0010b651, 0x5c028000, 0x4a026407, 0x00000004,
+ 0x4a026203, 0x00000007, 0x4a026429, 0x00000001,
+ 0x0401f009, 0x4a026203, 0x00000001, 0x42000800,
+ 0x0000000b, 0x0201f800, 0x00104736, 0x0201f800,
+ 0x0010707f, 0x5c026000, 0x0201f800, 0x00109c4d,
+ 0x04000026, 0x0201f800, 0x0010a314, 0x04020026,
+ 0x0401f9df, 0x0401f021, 0x42000000, 0x0010d541,
+ 0x0201f800, 0x0010c50a, 0x4d3c0000, 0x417a7800,
+ 0x0201f800, 0x00110684, 0x42000000, 0x0010d53e,
+ 0x0201f800, 0x0010c50a, 0x59340200, 0x84000558,
+ 0x48026a00, 0x42003000, 0x00000003, 0x41782800,
+ 0x42002000, 0x00000005, 0x4d400000, 0x4d440000,
+ 0x59368c03, 0x42028000, 0x00000029, 0x0201f800,
+ 0x0010a628, 0x5c028800, 0x5c028000, 0x5c027800,
+ 0x0201f800, 0x00101d37, 0x0201f800, 0x00020afe,
+ 0x0401f002, 0x0401fc4e, 0x5c025800, 0x5c00b000,
+ 0x1c01f000, 0x4933c857, 0x41380000, 0x83383480,
+ 0x00000058, 0x02021800, 0x0010032f, 0x0c01f001,
+ 0x001088a7, 0x001088a2, 0x001088a7, 0x001088a7,
+ 0x001088a7, 0x001088a7, 0x001088a0, 0x001088a0,
+ 0x001088a0, 0x001088a0, 0x001088a0, 0x001088a0,
+ 0x001088a0, 0x001088a0, 0x001088a0, 0x001088a0,
+ 0x001088a0, 0x001088a0, 0x001088a0, 0x001088a0,
+ 0x001088a0, 0x001088a0, 0x001088a0, 0x001088a0,
+ 0x001088a0, 0x001088a0, 0x001088a0, 0x001088a0,
+ 0x001088a0, 0x001088a0, 0x001088a0, 0x001088a7,
+ 0x001088a0, 0x001088a7, 0x001088a7, 0x001088a0,
+ 0x001088a0, 0x001088a0, 0x001088a0, 0x001088a0,
+ 0x001088a7, 0x001088a0, 0x001088a0, 0x001088a0,
+ 0x001088a0, 0x001088a0, 0x001088a0, 0x001088a0,
+ 0x001088a0, 0x001088a0, 0x001088a7, 0x001088a7,
+ 0x001088a0, 0x001088a0, 0x001088a0, 0x001088a0,
+ 0x001088a0, 0x001088a0, 0x001088a0, 0x001088a0,
+ 0x001088a0, 0x001088a7, 0x001088a0, 0x001088a0,
+ 0x001088a7, 0x001088a7, 0x001088a0, 0x001088a7,
+ 0x001088a7, 0x001088a0, 0x001088a0, 0x001088a0,
+ 0x001088a0, 0x001088a7, 0x001088a0, 0x001088a0,
+ 0x001088a0, 0x001088a7, 0x001088a0, 0x001088a0,
+ 0x001088a0, 0x001088a7, 0x001088a0, 0x001088a0,
+ 0x001088a0, 0x001088a7, 0x001088a0, 0x001088a7,
+ 0x001088a0, 0x001088a0, 0x001088a0, 0x001088a0,
+ 0x001088a0, 0x001088a0, 0x001088a0, 0x001088a0,
+ 0x0201f800, 0x0010032f, 0x4a026203, 0x00000001,
+ 0x493a6403, 0x0201f000, 0x0010707f, 0x4933c857,
+ 0x4a026203, 0x00000001, 0x493a6403, 0x0201f000,
+ 0x0010707f, 0x59300403, 0x82003480, 0x00000058,
+ 0x02021800, 0x0010032f, 0x83383580, 0x00000013,
+ 0x040000a8, 0x83383580, 0x00000027, 0x04020056,
+ 0x4933c857, 0x0201f800, 0x001070fc, 0x0201f800,
+ 0x0010bd7c, 0x0201f800, 0x00109d77, 0x0400000f,
+ 0x0201f800, 0x00109d92, 0x04000049, 0x59300403,
+ 0x82000d80, 0x00000022, 0x04020040, 0x42000000,
+ 0x00000205, 0x0401fc13, 0x0400003c, 0x0401fc3b,
+ 0x0400003e, 0x0401f03e, 0x42000000, 0x00000203,
+ 0x0401fc0c, 0x04000035, 0x0201f800, 0x00101d37,
+ 0x42000800, 0x00000007, 0x0201f800, 0x00104736,
+ 0x0401f917, 0x4d440000, 0x59368c03, 0x83440580,
+ 0x000007fe, 0x04020008, 0x59a81221, 0x84081540,
+ 0x0201f800, 0x001052aa, 0x04020002, 0x8408154a,
+ 0x480b5221, 0x42028000, 0x00000029, 0x4d3c0000,
+ 0x417a7800, 0x0201f800, 0x00110684, 0x5c027800,
+ 0x836c0580, 0x00000003, 0x0400000c, 0x5932680a,
+ 0x59340008, 0x800001c0, 0x04020008, 0x59368c03,
+ 0x4933c857, 0x4937c857, 0x4947c857, 0x0201f800,
+ 0x001047f4, 0x0401f00c, 0x42000000, 0x0010d53e,
+ 0x0201f800, 0x0010c50a, 0x42003000, 0x00000015,
+ 0x41782800, 0x42002000, 0x00000003, 0x0201f800,
+ 0x0010a628, 0x5c028800, 0x0201f800, 0x00109fab,
+ 0x0201f000, 0x00020afe, 0x1c01f000, 0x0401f8e4,
+ 0x0401f7fa, 0x83380580, 0x00000014, 0x0400000c,
+ 0x4933c857, 0x0201f800, 0x00107595, 0x02020000,
+ 0x001082d6, 0x59300203, 0x82000580, 0x00000002,
+ 0x04000109, 0x0201f800, 0x0010032f, 0x4933c857,
+ 0x0201f800, 0x001070fc, 0x0201f800, 0x0010bd7c,
+ 0x42002800, 0x00000002, 0x59300403, 0x82000580,
+ 0x00000051, 0x02000000, 0x0010a7fe, 0x4d3c0000,
+ 0x417a7800, 0x0201f800, 0x00110684, 0x5c027800,
+ 0x42003000, 0x00000016, 0x41782800, 0x4d400000,
+ 0x4d440000, 0x59368c03, 0x42002000, 0x00000009,
+ 0x42028000, 0x00000029, 0x0201f800, 0x0010a628,
+ 0x5c028800, 0x5c028000, 0x42000000, 0x0010d53e,
+ 0x0201f800, 0x0010c50a, 0x0201f800, 0x00109d77,
+ 0x0402000c, 0x0201f800, 0x00101d37, 0x0401f8ac,
+ 0x59340c03, 0x82040580, 0x000007fe, 0x040207bf,
+ 0x59a80a21, 0x84040d40, 0x48075221, 0x0401f7bb,
+ 0x0201f800, 0x00109d92, 0x04020003, 0x0401f8a0,
+ 0x0401f7b6, 0x59300403, 0x82000d80, 0x00000032,
+ 0x04020004, 0x0201f800, 0x0010239a, 0x0401f7af,
+ 0x82000d80, 0x00000022, 0x04000895, 0x0401f7ab,
+ 0x4933c857, 0x4803c857, 0x0c01f001, 0x001089c8,
+ 0x001089c8, 0x001089c8, 0x001089c8, 0x001089c8,
+ 0x001089c8, 0x001089bf, 0x001089bf, 0x001089bf,
+ 0x001089bf, 0x001089bf, 0x001089bf, 0x001089bf,
+ 0x001089bf, 0x001089bf, 0x001089bf, 0x001089bf,
+ 0x001089bf, 0x001089bf, 0x001089bf, 0x001089bf,
+ 0x001089bf, 0x001089bf, 0x001089bf, 0x001089bf,
+ 0x001089bf, 0x001089bf, 0x001089bf, 0x001089bf,
+ 0x001089bf, 0x001089cc, 0x001089e9, 0x001089bf,
+ 0x001089e9, 0x001089e9, 0x001089bf, 0x001089bf,
+ 0x001089bf, 0x001089bf, 0x001089bf, 0x001089e9,
+ 0x001089e9, 0x001089bf, 0x001089bf, 0x001089bf,
+ 0x001089bf, 0x001089bf, 0x001089bf, 0x001089bf,
+ 0x001089bf, 0x001089da, 0x001089e9, 0x001089bf,
+ 0x001089d3, 0x001089bf, 0x001089bf, 0x001089bf,
+ 0x001089d3, 0x001089bf, 0x001089bf, 0x001089bf,
+ 0x001089e9, 0x001089d6, 0x001089bf, 0x001089c1,
+ 0x001089e9, 0x001089bf, 0x001089e9, 0x001089e9,
+ 0x001089bf, 0x001089bf, 0x001089bf, 0x001089bf,
+ 0x001089e9, 0x001089bf, 0x001089bf, 0x001089bf,
+ 0x001089e9, 0x001089bf, 0x001089bf, 0x001089bf,
+ 0x001089e9, 0x001089bf, 0x001089bf, 0x001089bf,
+ 0x001089e9, 0x001089bf, 0x001089e9, 0x001089bf,
+ 0x001089bf, 0x001089bf, 0x001089bf, 0x001089bf,
+ 0x001089bf, 0x001089bf, 0x001089bf, 0x0201f800,
+ 0x0010032f, 0x4d2c0000, 0x59325809, 0x0201f800,
+ 0x00020401, 0x5c025800, 0x0201f000, 0x00020afe,
+ 0x4a026203, 0x00000002, 0x0201f000, 0x00109e17,
+ 0x4a026203, 0x00000005, 0x59a80032, 0x48026205,
+ 0x59a80030, 0x48026006, 0x1c01f000, 0x59300827,
+ 0x49780a05, 0x0401f014, 0x0201f800, 0x00109fab,
+ 0x0201f000, 0x00020afe, 0x0201f800, 0x0010239a,
+ 0x0201f800, 0x001071b0, 0x04000005, 0x0201f800,
+ 0x001070fc, 0x0201f000, 0x00020afe, 0x0201f800,
+ 0x001070fc, 0x0201f800, 0x00020afe, 0x0201f000,
+ 0x0010719d, 0x4933c857, 0x4a026203, 0x00000002,
+ 0x59a80030, 0x48026006, 0x1c01f000, 0x4933c857,
+ 0x0201f800, 0x00109c4d, 0x0400002e, 0x4d2c0000,
+ 0x0201f800, 0x0010a314, 0x0402000a, 0x4d400000,
+ 0x42028000, 0x00000031, 0x42000800, 0x00000004,
+ 0x0201f800, 0x0010a0d9, 0x5c028000, 0x0401f020,
+ 0x59300c07, 0x82040580, 0x00000010, 0x04000004,
+ 0x82040580, 0x00000011, 0x0402000a, 0x4a025a07,
+ 0x00000031, 0x4a02580e, 0x00000004, 0x4a02580f,
+ 0x000000ff, 0x0201f800, 0x00020401, 0x0401f010,
+ 0x592c0405, 0x8c00051e, 0x0400000d, 0x4a025a05,
+ 0x00000103, 0x4a025806, 0x01000000, 0x4da00000,
+ 0x4cec0000, 0x5931d82a, 0x58ef400a, 0x58ec0008,
+ 0x0801f800, 0x5c01d800, 0x5c034000, 0x5c025800,
+ 0x1c01f000, 0x4933c857, 0x83340580, 0x0010e85a,
+ 0x0402000c, 0x83380d80, 0x00000015, 0x04000005,
+ 0x83380d80, 0x00000016, 0x02020000, 0x001082d6,
+ 0x0201f800, 0x0010bd7f, 0x0201f000, 0x00020afe,
+ 0x59340400, 0x82000500, 0x000000ff, 0x82003480,
+ 0x0000000c, 0x02021800, 0x0010032f, 0x59303403,
+ 0x82180d80, 0x0000004d, 0x02000000, 0x0010a01a,
+ 0x82180d80, 0x00000033, 0x02000000, 0x00109fcf,
+ 0x82180d80, 0x00000028, 0x02000000, 0x00109dd4,
+ 0x82180d80, 0x00000029, 0x02000000, 0x00109de9,
+ 0x82180d80, 0x00000057, 0x02000000, 0x0010a748,
+ 0x82180d80, 0x0000001f, 0x02000000, 0x00108473,
+ 0x82180d80, 0x00000055, 0x02000000, 0x0010844c,
+ 0x82180d80, 0x00000000, 0x04000547, 0x82180d80,
+ 0x00000022, 0x02000000, 0x001084a0, 0x82180d80,
+ 0x00000035, 0x02000000, 0x001085c3, 0x82180d80,
+ 0x00000039, 0x040004e3, 0x82180d80, 0x0000003d,
+ 0x02000000, 0x00108515, 0x82180d80, 0x00000044,
+ 0x02000000, 0x00108552, 0x82180d80, 0x00000049,
+ 0x02000000, 0x001085a8, 0x82180d80, 0x00000041,
+ 0x02000000, 0x00108594, 0x82180d80, 0x00000043,
+ 0x02000000, 0x0010a182, 0x82180d80, 0x00000051,
+ 0x02000000, 0x0010a1f5, 0x82180d80, 0x00000004,
+ 0x04020003, 0x42000000, 0x00000001, 0x83380d80,
+ 0x00000015, 0x04000006, 0x83380d80, 0x00000016,
+ 0x02020000, 0x001082d6, 0x0401f27e, 0x4c000000,
+ 0x0201f800, 0x0010bd7f, 0x5c000000, 0x4d2c0000,
+ 0x4d3c0000, 0x0c01f804, 0x5c027800, 0x5c025800,
+ 0x1c01f000, 0x00108aa5, 0x00108aa9, 0x00108aa5,
+ 0x00108b1e, 0x00108aa5, 0x00108c61, 0x00108d17,
+ 0x00108aa5, 0x00108aa5, 0x00108cc8, 0x00108aa5,
+ 0x00108cda, 0x4933c857, 0x497a6008, 0x59300809,
+ 0x58040000, 0x4a000a05, 0x00000103, 0x0201f000,
+ 0x00020afe, 0x4933c857, 0x40000000, 0x40000000,
+ 0x1c01f000, 0x4933c857, 0x0201f800, 0x00104a72,
+ 0x59a80068, 0x82000580, 0x00000074, 0x0402005b,
+ 0x0201f800, 0x0010b5c5, 0x04020014, 0x0401f85b,
+ 0x0201f800, 0x00109c4d, 0x0400000c, 0x0201f800,
+ 0x0010a314, 0x04020009, 0x41780800, 0x4d400000,
+ 0x42028000, 0x00000000, 0x0201f800, 0x0010a0d9,
+ 0x5c028000, 0x0401f003, 0x0201f800, 0x00101d37,
+ 0x0201f000, 0x00020afe, 0x0201f800, 0x00109c4d,
+ 0x04000007, 0x0201f800, 0x0010a314, 0x04020004,
+ 0x0401ff23, 0x0201f000, 0x00020afe, 0x417a7800,
+ 0x0201f800, 0x00110684, 0x42000000, 0x0010d53e,
+ 0x0201f800, 0x0010c50a, 0x59340200, 0x84000558,
+ 0x48026a00, 0x42003000, 0x00000003, 0x0201f800,
+ 0x0010bc92, 0x4d300000, 0x0201f800, 0x00108297,
+ 0x02000800, 0x0010032f, 0x4926601c, 0x4936600a,
+ 0x497a6009, 0x4a026407, 0x00000001, 0x4a026403,
+ 0x00000001, 0x59240400, 0x8c00050a, 0x04020011,
+ 0x4a026407, 0x00000004, 0x4a026203, 0x00000007,
+ 0x4a026429, 0x00000001, 0x42003000, 0x00000001,
+ 0x4d400000, 0x42028000, 0x00000029, 0x41782800,
+ 0x0201f800, 0x0010b651, 0x5c028000, 0x0401f009,
+ 0x42000800, 0x0000000b, 0x0201f800, 0x00104736,
+ 0x4a026203, 0x00000001, 0x0201f800, 0x0010707f,
+ 0x5c026000, 0x0401feea, 0x0201f800, 0x00101d37,
+ 0x0201f000, 0x00020afe, 0x0401fee5, 0x42000000,
+ 0x00000001, 0x0401f110, 0x4933c857, 0x59340200,
+ 0x8c000500, 0x0400000c, 0x4d3c0000, 0x417a7800,
+ 0x0201f800, 0x0010472b, 0x5c027800, 0x8d0e1d20,
+ 0x04000005, 0x42000800, 0x00000006, 0x0201f800,
+ 0x00104736, 0x1c01f000, 0x4933c857, 0x59a80868,
+ 0x82040580, 0x00000074, 0x0400000e, 0x4807c857,
+ 0x82040580, 0x00000100, 0x040200dd, 0x59cc0408,
+ 0x4803c857, 0x8c000500, 0x040000d9, 0x59341403,
+ 0x82080580, 0x000007fe, 0x04000006, 0x0401f0d4,
+ 0x59341403, 0x82080580, 0x000007fe, 0x0402001c,
+ 0x59a80221, 0x8c000506, 0x04000013, 0x59cc0000,
+ 0x82000500, 0x000000ff, 0x59240c08, 0x80040580,
+ 0x0400000d, 0x0201f800, 0x00101d37, 0x0201f800,
+ 0x00020afe, 0x42000000, 0x0010d52a, 0x0201f800,
+ 0x0010c50a, 0x4202d800, 0x00000001, 0x0201f000,
+ 0x001041f5, 0x0201f800, 0x0010c63f, 0x02020000,
+ 0x0010a87e, 0x0401fb29, 0x0401f056, 0x41780800,
+ 0x0201f800, 0x00104833, 0x59341403, 0x82080580,
+ 0x000007fc, 0x04020028, 0x4a026802, 0x00fffffc,
+ 0x0201f800, 0x00109c4d, 0x04000012, 0x0201f800,
+ 0x0010a314, 0x0402000f, 0x0401f8dd, 0x41780800,
0x4d400000, 0x42028000, 0x00000000, 0x0201f800,
- 0x00109d2a, 0x5c028000, 0x0401f003, 0x0201f800,
- 0x00101cb7, 0x0201f000, 0x00020b9d, 0x0201f800,
- 0x0010989f, 0x04000007, 0x0201f800, 0x00109f51,
- 0x04020004, 0x0401ff23, 0x0201f000, 0x00020b9d,
- 0x417a7800, 0x0201f800, 0x0010ff80, 0x42000000,
- 0x0010cf23, 0x0201f800, 0x0010bfb3, 0x59340200,
- 0x84000558, 0x48026a00, 0x42003000, 0x00000003,
- 0x0201f800, 0x0010b73d, 0x4d300000, 0x0201f800,
- 0x00107ef8, 0x02000800, 0x0010032e, 0x4926601c,
- 0x4936600a, 0x497a6009, 0x4a026407, 0x00000001,
- 0x4a026403, 0x00000001, 0x59240400, 0x8c00050a,
- 0x04020011, 0x4a026407, 0x00000004, 0x4a026203,
- 0x00000007, 0x4a026429, 0x00000001, 0x42003000,
- 0x00000001, 0x4d400000, 0x42028000, 0x00000029,
- 0x41782800, 0x0201f800, 0x0010b18b, 0x5c028000,
- 0x0401f009, 0x42000800, 0x0000000b, 0x0201f800,
- 0x001045ea, 0x4a026203, 0x00000001, 0x0201f800,
- 0x00106d1c, 0x5c026000, 0x0401feea, 0x0201f800,
- 0x00101cb7, 0x0201f000, 0x00020b9d, 0x0401fee5,
- 0x42000000, 0x00000001, 0x0401f11f, 0x4933c857,
- 0x59340200, 0x8c000500, 0x0400000c, 0x4d3c0000,
- 0x417a7800, 0x0201f800, 0x001045df, 0x5c027800,
- 0x8d0e1d20, 0x04000005, 0x42000800, 0x00000006,
- 0x0201f800, 0x001045ea, 0x1c01f000, 0x4933c857,
- 0x59a8085a, 0x82040580, 0x00000074, 0x0400000e,
- 0x4807c857, 0x82040580, 0x00000100, 0x040200ec,
- 0x59cc0408, 0x4803c857, 0x8c000500, 0x040000e8,
- 0x59341403, 0x82080580, 0x000007fe, 0x04000006,
- 0x0401f0e3, 0x59341403, 0x82080580, 0x000007fe,
- 0x0402001c, 0x59a8021b, 0x8c000506, 0x04000013,
- 0x59cc0000, 0x82000500, 0x000000ff, 0x59240c08,
- 0x80040580, 0x0400000d, 0x0201f800, 0x00101cb7,
- 0x0201f800, 0x00020b9d, 0x42000000, 0x0010cf14,
- 0x0201f800, 0x0010bfb3, 0x4202d800, 0x00000001,
- 0x0201f000, 0x0010410a, 0x0201f800, 0x0010c0e8,
- 0x02020000, 0x0010a474, 0x0401fb20, 0x0401f067,
- 0x41780800, 0x0201f800, 0x001046e4, 0x59341403,
- 0x82080580, 0x000007fc, 0x04020039, 0x4a026802,
- 0x00fffffc, 0x0201f800, 0x0010989f, 0x04000012,
- 0x0201f800, 0x00109f51, 0x0402000f, 0x0401f8ec,
- 0x41780800, 0x4d400000, 0x42028000, 0x00000000,
- 0x0201f800, 0x00109d2a, 0x5c028000, 0x42000800,
- 0x00000004, 0x0201f800, 0x001045ea, 0x0201f000,
- 0x00020b9d, 0x42000800, 0x00000004, 0x0201f800,
- 0x001045ea, 0x0201f800, 0x00101cb7, 0x59300c26,
- 0x82040580, 0x00000021, 0x04000005, 0x82040580,
- 0x00000051, 0x02020000, 0x00020b9d, 0x0201f800,
- 0x00101fb4, 0x42028800, 0x000007fd, 0x42003000,
- 0x00fffffd, 0x0201f800, 0x00104628, 0x02020800,
- 0x0010032e, 0x4936600a, 0x497a6c12, 0x4a02601d,
- 0x00000003, 0x4a026203, 0x00000001, 0x4a026403,
- 0x00000022, 0x0201f000, 0x00106d1c, 0x59a80070,
- 0x8c000502, 0x04000011, 0x0201f800, 0x001050f7,
- 0x42001000, 0x00000010, 0x04020009, 0x59340002,
- 0x82000500, 0x00ff0000, 0x82000580, 0x00ff0000,
- 0x04000006, 0x42001000, 0x00000008, 0x0201f800,
- 0x00104d1c, 0x04020072, 0x0201f800, 0x0010989f,
- 0x04000073, 0x0201f800, 0x00109f51, 0x04020005,
- 0x592c0405, 0x8c00051c, 0x040207af, 0x0401f8a0,
- 0x42000800, 0x00000005, 0x0201f800, 0x001045ea,
- 0x4a026203, 0x00000001, 0x4a026403, 0x00000003,
- 0x0201f000, 0x00106d1c, 0x59cc0408, 0x8c000518,
- 0x0400001b, 0x0201f800, 0x00109bb8, 0x0201f800,
- 0x001050f7, 0x04000009, 0x59cc0408, 0x8c000516,
- 0x04000006, 0x59300426, 0x82000580, 0x00000021,
- 0x04020795, 0x1c01f000, 0x59a8021b, 0x8400054a,
- 0x4803521b, 0x4803541b, 0x59a8000f, 0x497b8830,
- 0x84000570, 0x48038832, 0x59300426, 0x82000580,
- 0x00000021, 0x04020788, 0x1c01f000, 0x42001000,
- 0x000000ef, 0x59a80078, 0x8c00053e, 0x04000005,
- 0x59a8021b, 0x8c000516, 0x04000002, 0x59a8100f,
- 0x42024800, 0x0010cfd1, 0x480a4805, 0x480b500f,
- 0x497b8830, 0x84081570, 0x480b8832, 0x0201f800,
- 0x00109be2, 0x59a8021b, 0x84000548, 0x4803521b,
- 0x4803541b, 0x0201f800, 0x0010b160, 0x0402076e,
- 0x599c0019, 0x8c000510, 0x0402003d, 0x59a8021b,
- 0x8400054c, 0x4803521b, 0x42000800, 0x00000007,
- 0x0201f800, 0x001045ea, 0x417a7800, 0x0201f800,
- 0x001045df, 0x42003800, 0x000000ef, 0x42000000,
- 0x000000e8, 0x0201f800, 0x00106134, 0x02000800,
- 0x00104628, 0x02020800, 0x0010032e, 0x4936600a,
+ 0x0010a0d9, 0x5c028000, 0x42000800, 0x00000004,
+ 0x0201f800, 0x00104736, 0x0201f000, 0x00020afe,
+ 0x42000800, 0x00000004, 0x0201f800, 0x00104736,
+ 0x0201f800, 0x00101d37, 0x59300c26, 0x82040580,
+ 0x00000021, 0x02000000, 0x0010a97e, 0x82040580,
+ 0x00000051, 0x02020000, 0x00020afe, 0x0201f000,
+ 0x0010a97e, 0x59a8007e, 0x8c000502, 0x04000011,
+ 0x0201f800, 0x001052aa, 0x42001000, 0x00000010,
+ 0x04020009, 0x59340002, 0x82000500, 0x00ff0000,
+ 0x82000580, 0x00ff0000, 0x04000006, 0x42001000,
+ 0x00000008, 0x0201f800, 0x00104e87, 0x04020074,
+ 0x0201f800, 0x00109c4d, 0x04000075, 0x0201f800,
+ 0x0010a314, 0x04020005, 0x592c0405, 0x8c00051c,
+ 0x040207c0, 0x0401f8a2, 0x42000800, 0x00000005,
+ 0x0201f800, 0x00104736, 0x4a026203, 0x00000001,
+ 0x4a026403, 0x00000003, 0x0201f000, 0x0010707f,
+ 0x59cc0408, 0x8c000518, 0x0400001b, 0x0201f800,
+ 0x00109f6a, 0x0201f800, 0x001052aa, 0x04000009,
+ 0x59cc0408, 0x8c000516, 0x04000006, 0x59300426,
+ 0x82000580, 0x00000021, 0x040207a6, 0x1c01f000,
+ 0x59a80221, 0x8400054a, 0x48035221, 0x48035421,
+ 0x59a80015, 0x497b8830, 0x84000570, 0x48038832,
+ 0x59300426, 0x82000580, 0x00000021, 0x04020799,
+ 0x1c01f000, 0x42001000, 0x000000ef, 0x59a80086,
+ 0x8c00053e, 0x04000005, 0x59a80221, 0x8c000516,
+ 0x04000002, 0x59a81015, 0x42024800, 0x0010d5ef,
+ 0x480a4805, 0x480b5015, 0x497b8830, 0x84081570,
+ 0x480b8832, 0x0201f800, 0x00109f94, 0x59a80221,
+ 0x84000548, 0x48035221, 0x48035421, 0x0201f800,
+ 0x0010b61e, 0x0402077f, 0x599c0019, 0x8c000510,
+ 0x0402003f, 0x59a80221, 0x8400054c, 0x48035221,
+ 0x42000800, 0x00000007, 0x0201f800, 0x00104736,
+ 0x417a7800, 0x0201f800, 0x0010472b, 0x42003800,
+ 0x000000ef, 0x42000000, 0x000000e8, 0x0201f800,
+ 0x00106463, 0x02000800, 0x00104774, 0x02020800,
+ 0x0010032f, 0x4936600a, 0x599c0208, 0x48026c12,
0x59340200, 0x8400051a, 0x48026a00, 0x42000800,
- 0x00000003, 0x0201f800, 0x001045ea, 0x4a026407,
+ 0x00000003, 0x0201f800, 0x00104736, 0x4a026407,
0x00000001, 0x4a026203, 0x00000001, 0x4a026403,
- 0x00000002, 0x0201f000, 0x00106d1c, 0x0401fddd,
+ 0x00000002, 0x0201f000, 0x0010707f, 0x0401fdec,
0x42000000, 0x00000001, 0x0401f017, 0x599c0017,
- 0x8c00050a, 0x04000793, 0x42000800, 0x00000004,
- 0x0201f800, 0x001045ea, 0x49375065, 0x59a8021b,
+ 0x8c00050a, 0x04000791, 0x42000800, 0x00000004,
+ 0x0201f800, 0x00104736, 0x49375073, 0x59a80221,
0x8c000508, 0x0400000a, 0x599c0018, 0x8c00051c,
0x04000007, 0x42000800, 0x000003e8, 0x42001000,
- 0x00110987, 0x0201f800, 0x00106638, 0x0201f000,
- 0x00020b9d, 0x4933c857, 0x80003540, 0x04000005,
- 0x42000800, 0x00000007, 0x0201f800, 0x001045ea,
+ 0x001110c2, 0x0201f800, 0x001069a8, 0x0201f000,
+ 0x00020afe, 0x4933c857, 0x80003540, 0x04000005,
+ 0x42000800, 0x00000007, 0x0201f800, 0x00104736,
0x801831c0, 0x04020012, 0x59302009, 0x801021c0,
0x04000004, 0x58100405, 0x8c00051e, 0x0402000c,
0x59341c03, 0x42002000, 0x00000004, 0x42003000,
0x00000012, 0x4d200000, 0x59364013, 0x81224130,
- 0x0201f800, 0x00103a21, 0x5c024000, 0x0201f800,
- 0x00101cb7, 0x0201f000, 0x00020b9d, 0x4c5c0000,
- 0x4d2c0000, 0x59325809, 0x0201f800, 0x00020864,
+ 0x0201f800, 0x00103ac1, 0x5c024000, 0x0201f800,
+ 0x00101d37, 0x0201f000, 0x00020afe, 0x4c5c0000,
+ 0x4d2c0000, 0x59325809, 0x0201f800, 0x00105bbe,
0x5c025800, 0x59cc0008, 0x48002805, 0x59cc0009,
0x48002806, 0x49782807, 0x49782808, 0x49782809,
0x4978280a, 0x59cc0013, 0x8c00053e, 0x04000009,
@@ -23378,202 +9013,215 @@ static const uint32_t isp_2400_multi_risc_code[] = {
0x59cc0017, 0x8c00053e, 0x04000009, 0x59cc0418,
0x900001c0, 0x59ccbc19, 0x805c0540, 0x48002809,
0x59cc041a, 0x900001c0, 0x4800280a, 0x5c00b800,
- 0x1c01f000, 0x4933c857, 0x59a8005a, 0x82000580,
- 0x00000014, 0x0402004c, 0x59a80070, 0x8c000502,
- 0x04000015, 0x0201f800, 0x001050f7, 0x42001000,
+ 0x1c01f000, 0x4933c857, 0x59a80068, 0x82000580,
+ 0x00000014, 0x0402004c, 0x59a8007e, 0x8c000502,
+ 0x04000015, 0x0201f800, 0x001052aa, 0x42001000,
0x00000010, 0x04020009, 0x59340002, 0x82000500,
0x00ff0000, 0x82000580, 0x00ff0000, 0x0400000a,
- 0x42001000, 0x00000008, 0x0201f800, 0x00104d1c,
- 0x04000005, 0x59a80070, 0x8400054c, 0x48035070,
+ 0x42001000, 0x00000008, 0x0201f800, 0x00104e87,
+ 0x04000005, 0x59a8007e, 0x8400054c, 0x4803507e,
0x0401f035, 0x836c0580, 0x00000003, 0x0402000f,
0x59300009, 0x80000540, 0x0402000c, 0x59341c03,
0x42002000, 0x00000006, 0x42003000, 0x00000013,
0x4d200000, 0x59364013, 0x81224130, 0x0201f800,
- 0x00103a21, 0x5c024000, 0x0201f800, 0x00104752,
- 0x0401fe6f, 0x0401fae3, 0x0402001f, 0x59340404,
+ 0x00103ac1, 0x5c024000, 0x0201f800, 0x001048a1,
+ 0x0401fe7e, 0x0401fb17, 0x0402001f, 0x59340404,
0x80000540, 0x0400001c, 0x42000800, 0x00000006,
- 0x0201f800, 0x001045ea, 0x0201f800, 0x0010989f,
- 0x04000011, 0x0201f800, 0x00109f51, 0x0402000a,
+ 0x0201f800, 0x00104736, 0x0201f800, 0x00109c4d,
+ 0x04000011, 0x0201f800, 0x0010a314, 0x0402000a,
0x41780800, 0x4d400000, 0x42028000, 0x00000000,
- 0x0201f800, 0x00109d2a, 0x5c028000, 0x0201f000,
- 0x00020b9d, 0x4a025a05, 0x00000103, 0x4a025806,
- 0x02000000, 0x0201f800, 0x00101cb7, 0x0201f000,
- 0x00020b9d, 0x0201f800, 0x00104cbe, 0x0201f800,
- 0x0010989f, 0x04000007, 0x0201f800, 0x00109f51,
- 0x04020004, 0x0401fd27, 0x0201f000, 0x00020b9d,
- 0x0401fd24, 0x0201f800, 0x0010b82a, 0x80000580,
- 0x59a80070, 0x8c00050c, 0x04000005, 0x8400050c,
- 0x48035070, 0x82000540, 0x00000001, 0x0401f756,
- 0x4933c857, 0x59a8005a, 0x82000580, 0x00000014,
+ 0x0201f800, 0x0010a0d9, 0x5c028000, 0x0201f000,
+ 0x00020afe, 0x4a025a05, 0x00000103, 0x4a025806,
+ 0x02000000, 0x0201f800, 0x00101d37, 0x0201f000,
+ 0x00020afe, 0x0201f800, 0x00104e29, 0x0201f800,
+ 0x00109c4d, 0x04000007, 0x0201f800, 0x0010a314,
+ 0x04020004, 0x0401fd36, 0x0201f000, 0x00020afe,
+ 0x0401fd33, 0x0201f800, 0x0010bd7f, 0x80000580,
+ 0x59a8007e, 0x8c00050c, 0x04000005, 0x8400050c,
+ 0x4803507e, 0x82000540, 0x00000001, 0x0401f756,
+ 0x4933c857, 0x59a80068, 0x82000580, 0x00000014,
0x0402000b, 0x42000800, 0x0000000b, 0x0201f800,
- 0x001045ea, 0x4a026203, 0x00000001, 0x4a026403,
- 0x00000001, 0x0201f000, 0x00106d1c, 0x42000000,
+ 0x00104736, 0x4a026203, 0x00000001, 0x4a026403,
+ 0x00000001, 0x0201f000, 0x0010707f, 0x42000000,
0x00000001, 0x0401f744, 0x4933c857, 0x40003000,
- 0x59a8005a, 0x82000580, 0x00000004, 0x04020022,
+ 0x59a80068, 0x82000580, 0x00000004, 0x04020022,
0x82183580, 0x0000000b, 0x0402001d, 0x5930081c,
- 0x58040200, 0x8c000500, 0x02000000, 0x0010a3f1,
+ 0x58040200, 0x8c000500, 0x02000000, 0x0010a7f7,
0x58040200, 0x8c000508, 0x04000011, 0x84000508,
0x48000a00, 0x42000800, 0x00000003, 0x0201f800,
- 0x001045ea, 0x5930080a, 0x49780806, 0x4a026202,
+ 0x00104736, 0x5930080a, 0x49780806, 0x4a026202,
0x0000ffff, 0x4a026203, 0x00000001, 0x4a026403,
- 0x00000051, 0x0201f000, 0x00106d1c, 0x42000800,
- 0x00000007, 0x0201f800, 0x001045ea, 0x0201f000,
- 0x00020b9d, 0x42000000, 0x00000001, 0x0401f71a,
+ 0x00000051, 0x0201f000, 0x0010707f, 0x42000800,
+ 0x00000007, 0x0201f800, 0x00104736, 0x0201f000,
+ 0x00020afe, 0x42000000, 0x00000001, 0x0401f71a,
0x4803c857, 0x4d2c0000, 0x4d3c0000, 0x0c01f804,
- 0x5c027800, 0x5c025800, 0x1c01f000, 0x0010875e,
- 0x001089ee, 0x0010875e, 0x00108a4b, 0x0010875e,
- 0x00108abc, 0x001089df, 0x0010875e, 0x0010875e,
- 0x00108ae0, 0x0010875e, 0x00108af2, 0x4933c857,
+ 0x5c027800, 0x5c025800, 0x1c01f000, 0x00108aa5,
+ 0x00108d26, 0x00108aa5, 0x00108d83, 0x00108aa5,
+ 0x00108e0c, 0x00108d17, 0x00108aa5, 0x00108aa5,
+ 0x00108e30, 0x00108aa5, 0x00108e42, 0x4933c857,
0x4d1c0000, 0x59301403, 0x82080580, 0x00000003,
0x04000008, 0x82081580, 0x0000001e, 0x04020003,
- 0x0201f800, 0x00020b9d, 0x5c023800, 0x1c01f000,
+ 0x0201f800, 0x00020afe, 0x5c023800, 0x1c01f000,
0x0401ff3d, 0x0401f7fd, 0x4933c857, 0x42000000,
- 0x0010cf27, 0x0201f800, 0x0010bfb3, 0x0201f800,
- 0x0010b82a, 0x0201f800, 0x0010491c, 0x0201f800,
- 0x0010989f, 0x0400000b, 0x0201f800, 0x00109f51,
+ 0x0010d542, 0x0201f800, 0x0010c50a, 0x0201f800,
+ 0x0010bd7f, 0x0201f800, 0x00104a72, 0x0201f800,
+ 0x00109c4d, 0x0400000b, 0x0201f800, 0x0010a314,
0x04020008, 0x4200b000, 0x00000002, 0x0201f800,
- 0x00109f30, 0x0401fca7, 0x0201f000, 0x00020b9d,
- 0x0401f910, 0x04020030, 0x417a7800, 0x0201f800,
- 0x001045df, 0x417a7800, 0x0201f800, 0x0010ff80,
- 0x42000000, 0x0010cf23, 0x0201f800, 0x0010bfb3,
+ 0x0010a2f3, 0x0401fcb6, 0x0201f000, 0x00020afe,
+ 0x0401f928, 0x04020030, 0x417a7800, 0x0201f800,
+ 0x0010472b, 0x417a7800, 0x0201f800, 0x00110684,
+ 0x42000000, 0x0010d53e, 0x0201f800, 0x0010c50a,
0x59340200, 0x84000558, 0x48026a00, 0x4a026403,
0x00000002, 0x42003000, 0x00000003, 0x0201f800,
- 0x0010b73d, 0x59240400, 0x8c00050a, 0x04020011,
+ 0x0010bc92, 0x59240400, 0x8c00050a, 0x04020011,
0x4d400000, 0x41782800, 0x42003000, 0x00000005,
- 0x42028000, 0x00000029, 0x0201f800, 0x0010b18b,
+ 0x42028000, 0x00000029, 0x0201f800, 0x0010b651,
0x5c028000, 0x4a026203, 0x00000007, 0x4a026407,
0x00000004, 0x4a026429, 0x00000001, 0x1c01f000,
- 0x42000800, 0x00000003, 0x0201f800, 0x001045ea,
- 0x4a026203, 0x00000001, 0x0201f800, 0x00106d1c,
+ 0x42000800, 0x00000003, 0x0201f800, 0x00104736,
+ 0x4a026203, 0x00000001, 0x0201f800, 0x0010707f,
0x0401f7f7, 0x59cc0407, 0x82000580, 0x00000009,
0x0402000a, 0x59340412, 0x82000500, 0x000000ff,
0x0400000c, 0x80000040, 0x48026c12, 0x4a026006,
0x0000000a, 0x0401f7ea, 0x59cc0207, 0x82000500,
0x0000ff00, 0x82000580, 0x00001900, 0x040007c2,
- 0x0401fc60, 0x80000580, 0x0401f69b, 0x4933c857,
- 0x0201f800, 0x0010989f, 0x04000011, 0x0201f800,
- 0x00109f51, 0x0402000e, 0x4c580000, 0x4200b000,
- 0x00000002, 0x0201f800, 0x00109f30, 0x5c00b000,
- 0x0401fc50, 0x42000800, 0x00000007, 0x0201f800,
- 0x001045ea, 0x0201f000, 0x00020b9d, 0x59340403,
- 0x82000580, 0x000007fc, 0x04020007, 0x42000000,
- 0x00000004, 0x0201f800, 0x0010817e, 0x04000023,
- 0x0401f032, 0x0401fc3f, 0x59cc3407, 0x82183500,
- 0x000000ff, 0x82180580, 0x00000005, 0x04000020,
- 0x82180580, 0x0000000b, 0x04000018, 0x59cc0207,
- 0x82000500, 0x0000ff00, 0x04020004, 0x82180580,
- 0x00000009, 0x04000016, 0x82000580, 0x00001900,
- 0x0402000e, 0x82180580, 0x00000009, 0x04000010,
- 0x42000800, 0x00000004, 0x0201f800, 0x001045ea,
- 0x0201f800, 0x00101cb7, 0x0201f800, 0x0010b82a,
- 0x0201f000, 0x00020b9d, 0x0201f800, 0x0010b82a,
- 0x42000000, 0x00000001, 0x0401f657, 0x0201f800,
- 0x0010989f, 0x59325809, 0x04000008, 0x592c0205,
- 0x82000580, 0x00000139, 0x040007f4, 0x592c0405,
- 0x8c00051e, 0x040207f1, 0x59340412, 0x800001c0,
- 0x04000008, 0x80000040, 0x48026c12, 0x4a026006,
- 0x0000000a, 0x4a026403, 0x00000016, 0x1c01f000,
- 0x59340403, 0x82000580, 0x000007fe, 0x04020007,
- 0x59a8021b, 0x84000540, 0x4803521b, 0x0201f800,
- 0x0010423f, 0x0401f7dd, 0x0201f800, 0x0010b82a,
- 0x417a7800, 0x0201f800, 0x0010ff80, 0x42003000,
- 0x00000005, 0x0201f800, 0x0010b73d, 0x42000000,
- 0x0010cf23, 0x0201f800, 0x0010bfb3, 0x0401f7d1,
+ 0x0401fc6f, 0x80000580, 0x0401f69b, 0x4933c857,
+ 0x0201f800, 0x00109c4d, 0x04000011, 0x0201f800,
+ 0x0010a314, 0x0402000e, 0x4c580000, 0x4200b000,
+ 0x00000002, 0x0201f800, 0x0010a2f3, 0x5c00b000,
+ 0x0401fc5f, 0x42000800, 0x00000007, 0x0201f800,
+ 0x00104736, 0x0201f000, 0x00020afe, 0x59340403,
+ 0x82000580, 0x000007fc, 0x0402000c, 0x42000000,
+ 0x00000004, 0x0201f800, 0x001084dc, 0x04020040,
+ 0x42000800, 0x00000007, 0x0201f800, 0x00104736,
+ 0x0201f000, 0x00020afe, 0x0401fc49, 0x59cc3407,
+ 0x82183500, 0x000000ff, 0x82180580, 0x00000005,
+ 0x04000028, 0x82180580, 0x0000000b, 0x0400001c,
+ 0x59cc0207, 0x82000500, 0x0000ff00, 0x04020004,
+ 0x82180580, 0x00000009, 0x0400001e, 0x82000580,
+ 0x00001900, 0x04020012, 0x82180580, 0x00000009,
+ 0x04000018, 0x59340403, 0x82000580, 0x000007fe,
+ 0x0400002d, 0x42000800, 0x00000004, 0x0201f800,
+ 0x00104736, 0x0201f800, 0x00101d37, 0x0201f800,
+ 0x0010bd7f, 0x0201f000, 0x00020afe, 0x59340403,
+ 0x82000580, 0x000007fe, 0x0400001f, 0x0201f800,
+ 0x0010bd7f, 0x42000000, 0x00000001, 0x0401f64a,
+ 0x0201f800, 0x00109c4d, 0x59325809, 0x04000008,
+ 0x592c0205, 0x82000580, 0x00000139, 0x040007f4,
+ 0x592c0405, 0x8c00051e, 0x040207f1, 0x59340412,
+ 0x800001c0, 0x04000008, 0x80000040, 0x48026c12,
+ 0x4a026006, 0x0000000a, 0x4a026403, 0x00000016,
+ 0x1c01f000, 0x59340403, 0x82000580, 0x000007fe,
+ 0x0402000d, 0x59a80221, 0x84000540, 0x48035221,
+ 0x8c000506, 0x04000005, 0x4a03501d, 0x0000ffff,
+ 0x0201f800, 0x0010a9a6, 0x0201f800, 0x0010432a,
+ 0x0401f7d7, 0x0201f800, 0x0010bd7f, 0x417a7800,
+ 0x0201f800, 0x00110684, 0x42003000, 0x00000005,
+ 0x0201f800, 0x0010bc92, 0x42000000, 0x0010d53e,
+ 0x0201f800, 0x0010c50a, 0x59300426, 0x82000580,
+ 0x00000021, 0x02000000, 0x0010a97e, 0x0401f7c6,
0x4933c857, 0x0401f865, 0x0402000b, 0x42000800,
- 0x00000005, 0x0201f800, 0x001045ea, 0x4a026203,
+ 0x00000005, 0x0201f800, 0x00104736, 0x4a026203,
0x00000001, 0x4a026403, 0x00000003, 0x0201f000,
- 0x00106d1c, 0x42000800, 0x00000004, 0x0201f800,
- 0x001045ea, 0x0201f800, 0x00109f51, 0x0402000b,
+ 0x0010707f, 0x42000800, 0x00000004, 0x0201f800,
+ 0x00104736, 0x0201f800, 0x0010a314, 0x0402000b,
0x4c580000, 0x4200b000, 0x00000002, 0x0201f800,
- 0x00109f30, 0x5c00b000, 0x0201f800, 0x001086a8,
- 0x0201f000, 0x00020b9d, 0x0201f800, 0x001086a8,
- 0x0201f800, 0x0010b82a, 0x80000580, 0x0401f606,
+ 0x0010a2f3, 0x5c00b000, 0x0201f800, 0x001089ef,
+ 0x0201f000, 0x00020afe, 0x0201f800, 0x001089ef,
+ 0x0201f800, 0x0010bd7f, 0x80000580, 0x0401f5ee,
0x4933c857, 0x0401f841, 0x0402000b, 0x42000800,
- 0x00000009, 0x0201f800, 0x001045ea, 0x4a026203,
+ 0x00000009, 0x0201f800, 0x00104736, 0x4a026203,
0x00000001, 0x4a026403, 0x00000005, 0x0201f000,
- 0x00106d1c, 0x0201f800, 0x0010b82a, 0x42000000,
- 0x00000001, 0x0401f5f4, 0x4933c857, 0x5930081c,
- 0x58040200, 0x8c000500, 0x02000000, 0x0010a3f1,
+ 0x0010707f, 0x0201f800, 0x0010bd7f, 0x42000000,
+ 0x00000001, 0x0401f5dc, 0x4933c857, 0x5930081c,
+ 0x58040200, 0x8c000500, 0x02000000, 0x0010a7f7,
0x0401f82a, 0x0402000b, 0x42000800, 0x0000000b,
- 0x0201f800, 0x001045ea, 0x4a026203, 0x00000001,
- 0x4a026403, 0x00000001, 0x0201f000, 0x00106d1c,
+ 0x0201f800, 0x00104736, 0x4a026203, 0x00000001,
+ 0x4a026403, 0x00000001, 0x0201f000, 0x0010707f,
0x5930080a, 0x58040403, 0x82000580, 0x000007fe,
0x04020007, 0x42002800, 0x00000003, 0x0201f800,
- 0x0010a3f8, 0x0201f000, 0x00020b9d, 0x0201f800,
- 0x0010b82a, 0x42000000, 0x00000001, 0x0401f5d2,
+ 0x0010a7fe, 0x0201f000, 0x00020afe, 0x0201f800,
+ 0x0010bd7f, 0x42000000, 0x00000001, 0x0401f5ba,
0x4933c857, 0x59cc0407, 0x82000580, 0x00000003,
0x04020009, 0x59cc0207, 0x82000500, 0x0000ff00,
0x82000d80, 0x00002a00, 0x04000003, 0x82000d80,
0x00001e00, 0x1c01f000, 0x4933c857, 0x82000540,
0x00000001, 0x1c01f000, 0x4933c857, 0x4d400000,
0x4c580000, 0x42028000, 0x00000000, 0x0201f800,
- 0x00101fb4, 0x59a8021b, 0x82000540, 0x00000003,
- 0x4803521b, 0x0401f8a1, 0x04000005, 0x4d300000,
- 0x4d340000, 0x4d440000, 0x0401f02b, 0x0401f8d6,
- 0x04000032, 0x4d300000, 0x4d340000, 0x4d440000,
- 0x83240580, 0x0010cfd1, 0x04020025, 0x59cc0408,
- 0x8c00051e, 0x04020009, 0x42000800, 0x0010cfd1,
- 0x58040406, 0x8c000500, 0x04020004, 0x59a8021b,
- 0x84000552, 0x4803521b, 0x59240400, 0x8c00050a,
- 0x04020009, 0x42028000, 0x0000002a, 0x42028800,
- 0x0000ffff, 0x42003000, 0x00000002, 0x0201f800,
- 0x0010b752, 0x42028000, 0x0000002a, 0x4d3c0000,
- 0x42027800, 0x00000200, 0x0201f800, 0x0010fef2,
- 0x5c027800, 0x42000000, 0x0010cf23, 0x0201f800,
- 0x0010bfb3, 0x0201f800, 0x00101e2e, 0x0201f800,
- 0x00102087, 0x42028000, 0x00000002, 0x5c028800,
- 0x5c026800, 0x5c026000, 0x41780800, 0x0201f800,
- 0x001046e4, 0x59cc0800, 0x82040d00, 0x00ffffff,
- 0x59240200, 0x82000540, 0x00000066, 0x48024a00,
- 0x48064805, 0x812000f0, 0x80040540, 0x48026813,
- 0x812241c0, 0x04020007, 0x4c040000, 0x42000000,
- 0x00000001, 0x0201f800, 0x00104e36, 0x5c000800,
- 0x4927c857, 0x83240580, 0x0010cfd1, 0x0402001e,
- 0x59a8121b, 0x59cc0408, 0x8c00051a, 0x04020005,
+ 0x0010203c, 0x59a80221, 0x82000540, 0x00000003,
+ 0x48035221, 0x0401f8b3, 0x04000005, 0x4d300000,
+ 0x4d340000, 0x4d440000, 0x0401f02e, 0x0401f8e8,
+ 0x04000035, 0x4d300000, 0x4d340000, 0x4d440000,
+ 0x83240580, 0x0010d5ef, 0x04020028, 0x59cc0408,
+ 0x8c00051e, 0x0402000c, 0x42000800, 0x0010d5ef,
+ 0x58040406, 0x8c000500, 0x04020007, 0x59cc0408,
+ 0x8c000518, 0x04000004, 0x59a80221, 0x84000552,
+ 0x48035221, 0x59240400, 0x8c00050a, 0x04020009,
+ 0x42028000, 0x0000002a, 0x42028800, 0x0000ffff,
+ 0x42003000, 0x00000002, 0x0201f800, 0x0010bca7,
+ 0x42028000, 0x0000002a, 0x4d3c0000, 0x42027800,
+ 0x00000200, 0x0201f800, 0x001105fb, 0x5c027800,
+ 0x42000000, 0x0010d53e, 0x0201f800, 0x0010c50a,
+ 0x0201f800, 0x00101eb6, 0x0201f800, 0x00102119,
+ 0x42028000, 0x00000002, 0x5c028800, 0x5c026800,
+ 0x5c026000, 0x0201f800, 0x0010a938, 0x41780800,
+ 0x0201f800, 0x00104833, 0x59cc0800, 0x82040d00,
+ 0x00ffffff, 0x59240200, 0x82000540, 0x00000066,
+ 0x48024a00, 0x48064805, 0x812000f0, 0x80040540,
+ 0x48026813, 0x812241c0, 0x04020012, 0x59cc0408,
+ 0x8c000518, 0x04020007, 0x599c0019, 0x8c000510,
+ 0x0400000c, 0x59a80221, 0x84000548, 0x48035221,
+ 0x4c040000, 0x42001800, 0x00000100, 0x42000000,
+ 0x00000001, 0x0201f800, 0x00104fae, 0x5c000800,
+ 0x4927c857, 0x83240580, 0x0010d5ef, 0x0402001e,
+ 0x59a81221, 0x59cc0408, 0x8c00051a, 0x04020005,
0x84081514, 0x4a0370e5, 0x00000800, 0x0401f004,
- 0x84081554, 0x4a0370e5, 0x00000c00, 0x480b521b,
- 0x4807500f, 0x80040110, 0x48035018, 0x48038881,
- 0x59a80a1b, 0x84040d50, 0x59cc0013, 0x8c00053e,
+ 0x84081554, 0x4a0370e5, 0x00000c00, 0x480b5221,
+ 0x48075015, 0x80040110, 0x4803501e, 0x48038881,
+ 0x59a80a21, 0x84040d50, 0x59cc0013, 0x8c00053e,
0x04000003, 0x8c000536, 0x04000004, 0x59cc0017,
- 0x8c000536, 0x04020002, 0x84040d10, 0x4807521b,
- 0x4807541b, 0x59cc0408, 0x8c000518, 0x04000023,
- 0x59a8021b, 0x8c000506, 0x04000016, 0x836c0580,
- 0x00000003, 0x04000004, 0x83240580, 0x0010cfd1,
- 0x0400001a, 0x59240400, 0x8c00050c, 0x04020008,
- 0x4c040000, 0x42000000, 0x00000001, 0x0201f800,
- 0x00104e36, 0x5c000800, 0x0401f010, 0x4a026426,
- 0x00000021, 0x0201f800, 0x00109efa, 0x0401f00b,
- 0x0201f800, 0x0010c0f4, 0x04020008, 0x4c040000,
- 0x0201f800, 0x0010a3cd, 0x41781800, 0x0201f800,
- 0x00101f63, 0x5c000800, 0x0201f800, 0x001050f7,
- 0x04000007, 0x59cc0009, 0x48035028, 0x59cc000a,
- 0x48035029, 0x0201f800, 0x00109bb8, 0x5c00b000,
- 0x5c028000, 0x1c01f000, 0x4933c857, 0x59a8141b,
- 0x82080580, 0x0000ffff, 0x0400000c, 0x4c080000,
- 0x0201f800, 0x001050f7, 0x5c001000, 0x0402000b,
- 0x59cc0408, 0x8c000518, 0x04000005, 0x8c08150a,
- 0x0400000b, 0x80000580, 0x1c01f000, 0x8c081508,
- 0x040207fd, 0x0401f006, 0x82080500, 0x00000030,
- 0x04020003, 0x8c081506, 0x040207f7, 0x4a03541b,
- 0x0000ffff, 0x42000000, 0x0010ce70, 0x0201f800,
- 0x0010bfb3, 0x42003000, 0x0000000c, 0x42001800,
- 0x0000ffff, 0x42002000, 0x00000007, 0x4d200000,
- 0x417a4000, 0x0201f800, 0x00103a21, 0x5c024000,
- 0x4d400000, 0x4d3c0000, 0x42003000, 0x00000001,
- 0x0201f800, 0x0010b752, 0x42028000, 0x0000002a,
- 0x42027800, 0x00000200, 0x0201f800, 0x0010fef2,
- 0x5c028000, 0x5c027800, 0x82000540, 0x00000001,
- 0x1c01f000, 0x4933c857, 0x4c580000, 0x59a80018,
- 0x800001c0, 0x04000029, 0x59341806, 0x800c19c0,
- 0x04000026, 0x820c1d80, 0xdeaddead, 0x04000021,
- 0x59cc1000, 0x82081500, 0x00ffff00, 0x80081110,
- 0x80080580, 0x04000004, 0x42000000, 0x0010cf06,
- 0x0401f016, 0x83cc1400, 0x0000000b, 0x4200b000,
+ 0x8c000536, 0x04020002, 0x84040d10, 0x48075221,
+ 0x48075421, 0x59cc0408, 0x8c000518, 0x04000025,
+ 0x59a80221, 0x8c000506, 0x04000018, 0x836c0580,
+ 0x00000003, 0x04000004, 0x83240580, 0x0010d5ef,
+ 0x0400001c, 0x59240400, 0x8c00050c, 0x0402000a,
+ 0x4c040000, 0x42000000, 0x00000001, 0x42001800,
+ 0x00000100, 0x0201f800, 0x00104fae, 0x5c000800,
+ 0x0401f010, 0x4a026426, 0x00000021, 0x0201f800,
+ 0x0010a2b7, 0x0401f00b, 0x0201f800, 0x0010c65f,
+ 0x04020008, 0x4c040000, 0x0201f800, 0x0010a7d3,
+ 0x41781800, 0x0201f800, 0x00101feb, 0x5c000800,
+ 0x0201f800, 0x001052aa, 0x04000007, 0x59cc0009,
+ 0x4803502e, 0x59cc000a, 0x4803502f, 0x0201f800,
+ 0x00109f6a, 0x5c00b000, 0x5c028000, 0x1c01f000,
+ 0x4933c857, 0x59a81421, 0x82080580, 0x0000ffff,
+ 0x0400000c, 0x4c080000, 0x0201f800, 0x001052aa,
+ 0x5c001000, 0x0402000b, 0x59cc0408, 0x8c000518,
+ 0x04000005, 0x8c08150a, 0x0400000b, 0x80000580,
+ 0x1c01f000, 0x8c081508, 0x040207fd, 0x0401f006,
+ 0x82080500, 0x00000030, 0x04020003, 0x8c081506,
+ 0x040207f7, 0x4a035421, 0x0000ffff, 0x42000000,
+ 0x0010d486, 0x0201f800, 0x0010c50a, 0x42003000,
+ 0x0000000c, 0x42001800, 0x0000ffff, 0x42002000,
+ 0x00000007, 0x4d200000, 0x417a4000, 0x0201f800,
+ 0x00103ac1, 0x5c024000, 0x4d400000, 0x4d3c0000,
+ 0x42003000, 0x00000001, 0x0201f800, 0x0010bca7,
+ 0x42028000, 0x0000002a, 0x42027800, 0x00000200,
+ 0x0201f800, 0x001105fb, 0x5c028000, 0x5c027800,
+ 0x82000540, 0x00000001, 0x1c01f000, 0x4933c857,
+ 0x4c580000, 0x59cc0408, 0x8c000518, 0x04020006,
+ 0x59a80421, 0x82000580, 0x0000ffff, 0x0400002f,
+ 0x0401f011, 0x59a8001e, 0x4803c857, 0x800001c0,
+ 0x0400002a, 0x59cc1000, 0x59340013, 0x82000500,
+ 0x00ffffff, 0x04000025, 0x82081500, 0x00ffffff,
+ 0x80080580, 0x04000004, 0x42000000, 0x0010d51c,
+ 0x0401f01a, 0x59341806, 0x480fc857, 0x800c19c0,
+ 0x0400001a, 0x83cc1400, 0x0000000b, 0x4200b000,
0x00000002, 0x83341c00, 0x00000006, 0x0401f830,
- 0x04000004, 0x42000000, 0x0010cf07, 0x0401f00b,
+ 0x04000004, 0x42000000, 0x0010d51d, 0x0401f00b,
0x83cc1400, 0x0000000d, 0x4200b000, 0x00000002,
0x83341c00, 0x00000008, 0x0401f825, 0x04000007,
- 0x42000000, 0x0010cf08, 0x0201f800, 0x0010bfb3,
+ 0x42000000, 0x0010d51e, 0x0201f800, 0x0010c50a,
0x82000540, 0x00000001, 0x5c00b000, 0x1c01f000,
0x4933c857, 0x59cc0206, 0x82000580, 0x00000014,
0x04020016, 0x59cc0407, 0x82000580, 0x00000800,
@@ -23589,69 +9237,69 @@ static const uint32_t isp_2400_multi_risc_code[] = {
0x4807c857, 0x480bc857, 0x480fc857, 0x80040480,
0x04001006, 0x42000000, 0x00000001, 0x82040d40,
0x00000001, 0x1c01f000, 0x41780000, 0x0401f7fc,
- 0x83380480, 0x00000053, 0x02021800, 0x0010032e,
- 0x83380480, 0x0000004b, 0x02001800, 0x0010032e,
- 0x0c01f001, 0x00108c87, 0x00108c87, 0x00108c87,
- 0x00108c87, 0x00108c85, 0x00108c85, 0x00108c85,
- 0x00108c87, 0x0201f800, 0x0010032e, 0x493bc857,
+ 0x83380480, 0x00000053, 0x02021800, 0x0010032f,
+ 0x83380480, 0x0000004b, 0x02001800, 0x0010032f,
+ 0x0c01f001, 0x00108ff3, 0x00108ff3, 0x00108ff3,
+ 0x00108ff3, 0x00108ff1, 0x00108ff1, 0x00108ff1,
+ 0x00108ff3, 0x0201f800, 0x0010032f, 0x493bc857,
0x4a026203, 0x0000000d, 0x493a6403, 0x42000800,
- 0x80000000, 0x0201f000, 0x00020b3e, 0x83380580,
+ 0x80000000, 0x0201f000, 0x00020a9f, 0x83380580,
0x00000013, 0x04020008, 0x59300403, 0x82000580,
- 0x00000050, 0x02020800, 0x0010032e, 0x0201f000,
- 0x00020b9d, 0x4933c857, 0x83380580, 0x00000027,
- 0x04020030, 0x4933c857, 0x0201f800, 0x00106d91,
- 0x4d3c0000, 0x417a7800, 0x0201f800, 0x0010ff80,
- 0x5c027800, 0x42000000, 0x0010cf23, 0x0201f800,
- 0x0010bfb3, 0x4d2c0000, 0x59325809, 0x0201f800,
- 0x0010989f, 0x492fc857, 0x0400000d, 0x4a025a05,
+ 0x00000050, 0x02020800, 0x0010032f, 0x0201f000,
+ 0x00020afe, 0x4933c857, 0x83380580, 0x00000027,
+ 0x04020030, 0x4933c857, 0x0201f800, 0x001070fc,
+ 0x4d3c0000, 0x417a7800, 0x0201f800, 0x00110684,
+ 0x5c027800, 0x42000000, 0x0010d53e, 0x0201f800,
+ 0x0010c50a, 0x4d2c0000, 0x59325809, 0x0201f800,
+ 0x00109c4d, 0x492fc857, 0x0400000d, 0x4a025a05,
0x00000103, 0x59300c02, 0x48065c07, 0x4a025a07,
0x00000029, 0x497a580a, 0x592c0c09, 0x84040d50,
- 0x48065c09, 0x0201f800, 0x000203ef, 0x5c025800,
+ 0x48065c09, 0x0201f800, 0x00020401, 0x5c025800,
0x42003000, 0x00000015, 0x41782800, 0x42002000,
0x00000003, 0x4d400000, 0x4d440000, 0x59368c03,
- 0x42028000, 0x00000029, 0x0201f800, 0x0010a22a,
- 0x5c028800, 0x5c028000, 0x0201f000, 0x00020b9d,
+ 0x42028000, 0x00000029, 0x0201f800, 0x0010a628,
+ 0x5c028800, 0x5c028000, 0x0201f000, 0x00020afe,
0x83380580, 0x00000014, 0x0402000d, 0x59300403,
- 0x82000c80, 0x00000053, 0x02021800, 0x0010032e,
- 0x82000480, 0x00000040, 0x02001800, 0x0010032e,
+ 0x82000c80, 0x00000053, 0x02021800, 0x0010032f,
+ 0x82000480, 0x00000040, 0x02001800, 0x0010032f,
0x4933c857, 0x4803c857, 0x0c01f00e, 0x83380580,
0x00000053, 0x0400000a, 0x83380580, 0x00000048,
- 0x02020800, 0x0010032e, 0x59300403, 0x82000580,
- 0x00000050, 0x02020800, 0x0010032e, 0x1c01f000,
- 0x00108cfd, 0x00108cfb, 0x00108cfb, 0x00108cfb,
- 0x00108cfb, 0x00108cfb, 0x00108cfb, 0x00108cfb,
- 0x00108cfb, 0x00108cfb, 0x00108cfb, 0x00108d14,
- 0x00108d14, 0x00108d14, 0x00108d14, 0x00108cfb,
- 0x00108d14, 0x00108cfb, 0x00108d14, 0x0201f800,
- 0x0010032e, 0x4933c857, 0x0201f800, 0x00106d91,
- 0x0201f800, 0x0010989f, 0x02000000, 0x00020b9d,
+ 0x02020800, 0x0010032f, 0x59300403, 0x82000580,
+ 0x00000050, 0x02020800, 0x0010032f, 0x1c01f000,
+ 0x00109069, 0x00109067, 0x00109067, 0x00109067,
+ 0x00109067, 0x00109067, 0x00109067, 0x00109067,
+ 0x00109067, 0x00109067, 0x00109067, 0x00109080,
+ 0x00109080, 0x00109080, 0x00109080, 0x00109067,
+ 0x00109080, 0x00109067, 0x00109080, 0x0201f800,
+ 0x0010032f, 0x4933c857, 0x0201f800, 0x001070fc,
+ 0x0201f800, 0x00109c4d, 0x02000000, 0x00020afe,
0x4d2c0000, 0x59325809, 0x4a025a05, 0x00000103,
0x59300402, 0x48025c07, 0x4a025a07, 0x00000006,
- 0x497a580a, 0x0201f800, 0x000203ef, 0x5c025800,
- 0x0201f800, 0x001099b4, 0x0201f000, 0x00020b9d,
- 0x4933c857, 0x0201f800, 0x00106d91, 0x0201f000,
- 0x00020b9d, 0x0201f800, 0x0010032e, 0x5930001d,
- 0x800001c0, 0x02020800, 0x0010a218, 0x59300004,
- 0x8c00053e, 0x04020033, 0x0201f800, 0x0010a2ed,
+ 0x497a580a, 0x0201f800, 0x00020401, 0x5c025800,
+ 0x0201f800, 0x00109d64, 0x0201f000, 0x00020afe,
+ 0x4933c857, 0x0201f800, 0x001070fc, 0x0201f000,
+ 0x00020afe, 0x0201f800, 0x0010032f, 0x5930001d,
+ 0x800001c0, 0x02020800, 0x0010a616, 0x59300004,
+ 0x8c00053e, 0x04020033, 0x0201f800, 0x0010a6f1,
0x040200ce, 0x59325809, 0x592c0c09, 0x59cc2808,
0x82141d00, 0x00000c00, 0x04000002, 0x59cc1809,
0x84040d58, 0x48065c09, 0x82143500, 0x00000fff,
0x0402002e, 0x59340200, 0x8c00050e, 0x040200b4,
- 0x0201f800, 0x00020c5a, 0x04020008, 0x4a025a07,
- 0x00000000, 0x59300012, 0x0201f800, 0x0010a2e2,
+ 0x0201f800, 0x00020bbb, 0x04020008, 0x4a025a07,
+ 0x00000000, 0x59300012, 0x0201f800, 0x0010a6e6,
0x80000d40, 0x04020a02, 0x4a025a05, 0x00000103,
0x48065808, 0x480e580b, 0x901409c0, 0x4806580a,
- 0x59300c02, 0x48065c07, 0x0201f800, 0x00109f56,
- 0x0201f800, 0x00109f5b, 0x0201f800, 0x000203ef,
- 0x0201f800, 0x001049bd, 0x59cc0008, 0x8c000518,
- 0x02020000, 0x00109a87, 0x0201f000, 0x00020b9d,
- 0x0201f800, 0x00107226, 0x040007cc, 0x4d3c0000,
- 0x42027800, 0x00000002, 0x0201f800, 0x00109425,
+ 0x59300c02, 0x48065c07, 0x0201f800, 0x0010a31e,
+ 0x0201f800, 0x0010a323, 0x0201f800, 0x00020401,
+ 0x0201f800, 0x00104b13, 0x59cc0008, 0x8c000518,
+ 0x02020000, 0x00109e37, 0x0201f000, 0x00020afe,
+ 0x0201f800, 0x00107595, 0x040007cc, 0x4d3c0000,
+ 0x42027800, 0x00000002, 0x0201f800, 0x001097a0,
0x5c027800, 0x0401f7c5, 0x4817c857, 0x480fc857,
0x82180500, 0x000000ff, 0x0400000e, 0x592c0205,
0x82000500, 0x000000ff, 0x82000580, 0x00000048,
0x04020008, 0x592c0408, 0x800001c0, 0x04000005,
- 0x0201f800, 0x0010a104, 0x0201f000, 0x0010a148,
+ 0x0201f800, 0x0010a502, 0x0201f000, 0x0010a546,
0x82180d00, 0x00000c00, 0x04000004, 0x59340200,
0x8c00050e, 0x0402005f, 0x4a025a07, 0x00000000,
0x41782000, 0x8c183510, 0x04000009, 0x59cc200b,
@@ -23661,80 +9309,80 @@ static const uint32_t isp_2400_multi_risc_code[] = {
0x4802580c, 0x80100c00, 0x040007aa, 0x82041480,
0x0000001d, 0x04001006, 0x592c0405, 0x8c00051e,
0x04000027, 0x42000800, 0x0000001c, 0x4c040000,
- 0x4c0c0000, 0x4c140000, 0x0201f800, 0x00020c5a,
+ 0x4c0c0000, 0x4c140000, 0x0201f800, 0x00020bbb,
0x04020008, 0x4a025a07, 0x00000000, 0x59300012,
- 0x0201f800, 0x0010a2e2, 0x80000d40, 0x040209a0,
+ 0x0201f800, 0x0010a6e6, 0x80000d40, 0x040209a0,
0x5c002800, 0x5c001800, 0x4a025a05, 0x00000103,
0x48065808, 0x480e580b, 0x901409c0, 0x4806580a,
0x5c000800, 0x4c500000, 0x4c540000, 0x83cca400,
0x0000000c, 0x832cac00, 0x0000000e, 0x0201f800,
- 0x001093ba, 0x5c00a800, 0x5c00a000, 0x59300008,
+ 0x00109732, 0x5c00a800, 0x5c00a000, 0x59300008,
0x84000534, 0x48026008, 0x0401f78e, 0x4c040000,
- 0x4c0c0000, 0x4c140000, 0x0201f800, 0x00020c5a,
+ 0x4c0c0000, 0x4c140000, 0x0201f800, 0x00020bbb,
0x04020008, 0x4a025a07, 0x00000000, 0x59300012,
- 0x0201f800, 0x0010a2e2, 0x80000d40, 0x0402097c,
+ 0x0201f800, 0x0010a6e6, 0x80000d40, 0x0402097c,
0x48065808, 0x5c002800, 0x5c001800, 0x59301402,
0x480a5c07, 0x480e580b, 0x901401c0, 0x4802580a,
- 0x0201f800, 0x00109f56, 0x5c000800, 0x0201f800,
- 0x00109364, 0x0201f800, 0x0010939f, 0x0401f779,
+ 0x0201f800, 0x0010a31e, 0x5c000800, 0x0201f800,
+ 0x001096d6, 0x0201f800, 0x00109716, 0x0401f779,
0x592c020b, 0x8c000502, 0x040007a0, 0x592c0209,
0x8c00050e, 0x0402079d, 0x59300012, 0x800c0d80,
0x0400079a, 0x4803c857, 0x480fc857, 0x8c183514,
- 0x02000000, 0x00109ac7, 0x80000540, 0x04000793,
- 0x4807c856, 0x0201f000, 0x00109ac7, 0x592c020b,
+ 0x02000000, 0x00109e77, 0x80000540, 0x04000793,
+ 0x4807c856, 0x0201f000, 0x00109e77, 0x592c020b,
0x8c000502, 0x0400074b, 0x59300012, 0x800001c0,
0x0400074b, 0x592c0209, 0x8c00050e, 0x04020748,
- 0x0201f000, 0x00109ac7, 0x1c01f000, 0x59cc2006,
+ 0x0201f000, 0x00109e77, 0x1c01f000, 0x59cc2006,
0x59cc2807, 0x0401f044, 0x0401f043, 0x1c01f000,
0x4933c857, 0x59300004, 0x8c00053e, 0x04020039,
- 0x5930001d, 0x800001c0, 0x02020800, 0x0010a218,
+ 0x5930001d, 0x800001c0, 0x02020800, 0x0010a616,
0x59325809, 0x592c0c09, 0x41782800, 0x41781800,
0x84040d58, 0x48065c09, 0x41783000, 0x59340200,
- 0x8c00050e, 0x0402001f, 0x0201f800, 0x00020c5a,
+ 0x8c00050e, 0x0402001f, 0x0201f800, 0x00020bbb,
0x04020009, 0x4a025a07, 0x00000000, 0x59300012,
- 0x0201f800, 0x0010a2e2, 0x80000d40, 0x4807c857,
+ 0x0201f800, 0x0010a6e6, 0x80000d40, 0x4807c857,
0x0402092b, 0x4a025a05, 0x00000103, 0x48065808,
0x480e580b, 0x901409c0, 0x4806580a, 0x4933c857,
- 0x59300c02, 0x48065c07, 0x0201f800, 0x00109f56,
- 0x0201f800, 0x00109f5b, 0x0201f800, 0x000203ef,
- 0x0201f800, 0x001049bd, 0x0201f000, 0x00020b9d,
+ 0x59300c02, 0x48065c07, 0x0201f800, 0x0010a31e,
+ 0x0201f800, 0x0010a323, 0x0201f800, 0x00020401,
+ 0x0201f800, 0x00104b13, 0x0201f000, 0x00020afe,
0x592c020b, 0x8c000502, 0x040007e0, 0x59300012,
0x4803c857, 0x800001c0, 0x040007df, 0x592c0209,
- 0x8c00050e, 0x040207dc, 0x0201f000, 0x00109ac7,
- 0x0201f800, 0x00107226, 0x040007c6, 0x4933c857,
+ 0x8c00050e, 0x040207dc, 0x0201f000, 0x00109e77,
+ 0x0201f800, 0x00107595, 0x040007c6, 0x4933c857,
0x1c01f000, 0x4c5c0000, 0x4c600000, 0x4010b800,
0x4014c000, 0x5930001d, 0x800001c0, 0x4c140000,
- 0x02020800, 0x0010a218, 0x5c002800, 0x59325809,
+ 0x02020800, 0x0010a616, 0x5c002800, 0x59325809,
0x592c020b, 0x8c000502, 0x04020030, 0x8c000500,
0x04000035, 0x4a026203, 0x00000002, 0x4a026403,
0x00000043, 0x405c0000, 0x592c0810, 0x80040c80,
0x40600000, 0x80040480, 0x04001028, 0x8060c1c0,
- 0x0400001e, 0x59300004, 0x8c00050e, 0x04000008,
- 0x59300a22, 0x82040500, 0x00000003, 0x4c140000,
- 0x0c01f823, 0x5c002800, 0x04000014, 0x59300004,
- 0x8c00053e, 0x0402000c, 0x485e6014, 0x48626012,
+ 0x0400001e, 0x59300004, 0x8c00053e, 0x04020016,
+ 0x59300004, 0x8c00050e, 0x04000008, 0x59300a22,
+ 0x82040500, 0x00000003, 0x4c140000, 0x0c01f820,
+ 0x5c002800, 0x04000011, 0x485e6014, 0x48626012,
0x497a6205, 0x5c00c000, 0x5c00b800, 0x0201f800,
- 0x00100d98, 0x0402000f, 0x59300804, 0x0201f000,
- 0x00020b30, 0x4c140000, 0x0201f800, 0x00107226,
- 0x5c002800, 0x040007f1, 0x5c00c000, 0x5c00b800,
- 0x0201f000, 0x00107f37, 0x5c00c000, 0x5c00b800,
+ 0x00100dbd, 0x0402000f, 0x59300804, 0x0201f000,
+ 0x00020a8e, 0x4c140000, 0x0201f800, 0x00107595,
+ 0x5c002800, 0x040007e7, 0x5c00c000, 0x5c00b800,
+ 0x0201f000, 0x001082d6, 0x5c00c000, 0x5c00b800,
0x4933c857, 0x1c01f000, 0x4807c857, 0x4004c000,
- 0x0401f7d7, 0x4803c857, 0x0401f7f4, 0x00108e85,
- 0x00108e8b, 0x00108e91, 0x00108e83, 0x0201f800,
- 0x0010032e, 0x59300223, 0x48035077, 0x82000400,
- 0x00000008, 0x48035076, 0x0401f00c, 0x59300223,
- 0x48035076, 0x82000400, 0x00000008, 0x48035077,
+ 0x0401f7d7, 0x4803c857, 0x0401f7f4, 0x001091f1,
+ 0x001091f7, 0x001091fd, 0x001091ef, 0x0201f800,
+ 0x0010032f, 0x59300223, 0x48035085, 0x82000400,
+ 0x00000008, 0x48035084, 0x0401f00c, 0x59300223,
+ 0x48035084, 0x82000400, 0x00000008, 0x48035085,
0x0401f006, 0x59300223, 0x82000400, 0x00000008,
- 0x48035076, 0x48035077, 0x405c1000, 0x41780800,
- 0x59a80076, 0x0201f800, 0x00106c9d, 0x800409c0,
+ 0x48035084, 0x48035085, 0x405c1000, 0x41780800,
+ 0x59a80084, 0x0201f800, 0x00107000, 0x800409c0,
0x0402003c, 0x40085000, 0x592c1001, 0x800811c0,
0x04000038, 0x58080205, 0x82000500, 0x000000ff,
0x82000580, 0x0000004a, 0x04020032, 0x48281002,
- 0x59a80076, 0x40601000, 0x41780800, 0x4c280000,
- 0x0201f800, 0x00106c9d, 0x5c005000, 0x800409c0,
- 0x0402001f, 0x40041800, 0x59a80077, 0x800c1c00,
+ 0x59a80084, 0x40601000, 0x41780800, 0x4c280000,
+ 0x0201f800, 0x00107000, 0x5c005000, 0x800409c0,
+ 0x0402001f, 0x40041800, 0x59a80085, 0x800c1c00,
0x80081040, 0x040207fe, 0x480e6029, 0x592c4801,
- 0x802449c0, 0x02000800, 0x0010032e, 0x58240a06,
+ 0x802449c0, 0x02000800, 0x0010032f, 0x58240a06,
0x592c1812, 0x59303022, 0x8c183506, 0x04000003,
0x40280000, 0x80040c00, 0x800400e0, 0x80040540,
0x48026020, 0x8c18350a, 0x04020003, 0x40280000,
@@ -23744,417 +9392,422 @@ static const uint32_t isp_2400_multi_risc_code[] = {
0x4933c857, 0x485fc857, 0x4863c857, 0x480fc857,
0x80000580, 0x1c01f000, 0x83380480, 0x00000058,
0x04021005, 0x83380480, 0x00000040, 0x04001002,
- 0x0c01f002, 0x1c01f000, 0x00108efa, 0x00108efa,
- 0x00108efa, 0x00108efa, 0x00108efa, 0x00108efa,
- 0x00108efa, 0x00108efa, 0x00108efa, 0x00108efa,
- 0x00108efc, 0x00108efa, 0x00108efa, 0x00108efa,
- 0x00108efa, 0x00108f09, 0x00108efa, 0x00108efa,
- 0x00108efa, 0x00108efa, 0x00108f37, 0x00108efa,
- 0x00108efa, 0x00108efa, 0x0201f800, 0x0010032e,
- 0x4933c857, 0x0201f800, 0x0010707a, 0x4a026203,
- 0x00000002, 0x59a8002c, 0x48026205, 0x59300012,
+ 0x0c01f002, 0x1c01f000, 0x00109266, 0x00109266,
+ 0x00109266, 0x00109266, 0x00109266, 0x00109266,
+ 0x00109266, 0x00109266, 0x00109266, 0x00109266,
+ 0x00109268, 0x00109266, 0x00109266, 0x00109266,
+ 0x00109266, 0x00109275, 0x00109266, 0x00109266,
+ 0x00109266, 0x00109266, 0x001092a3, 0x00109266,
+ 0x00109266, 0x00109266, 0x0201f800, 0x0010032f,
+ 0x4933c857, 0x0201f800, 0x001073e9, 0x4a026203,
+ 0x00000002, 0x59a80032, 0x48026205, 0x59300012,
0x59300816, 0x80040c80, 0x48066016, 0x0201f000,
- 0x00106d71, 0x4933c857, 0x0201f800, 0x00106d71,
- 0x4d3c0000, 0x417a7800, 0x0201f800, 0x0010ff80,
- 0x5c027800, 0x42000000, 0x0010cf23, 0x0201f800,
- 0x0010bfb3, 0x0201f800, 0x0010989f, 0x04000010,
+ 0x001070dc, 0x4933c857, 0x0201f800, 0x001070dc,
+ 0x4d3c0000, 0x417a7800, 0x0201f800, 0x00110684,
+ 0x5c027800, 0x42000000, 0x0010d53e, 0x0201f800,
+ 0x0010c50a, 0x0201f800, 0x00109c4d, 0x04000010,
0x4d2c0000, 0x59325809, 0x4a025a05, 0x00000103,
0x59300402, 0x48025c07, 0x4a025a07, 0x00000029,
0x497a580a, 0x592c0c09, 0x84040d50, 0x48065c09,
- 0x0201f800, 0x000203ef, 0x5c025800, 0x42003000,
+ 0x0201f800, 0x00020401, 0x5c025800, 0x42003000,
0x00000014, 0x41782800, 0x4d400000, 0x4d440000,
0x59368c03, 0x42002000, 0x00000002, 0x42028000,
- 0x00000029, 0x0201f800, 0x0010a22a, 0x5c028800,
- 0x5c028000, 0x0201f000, 0x00020b9d, 0x4933c857,
+ 0x00000029, 0x0201f800, 0x0010a628, 0x5c028800,
+ 0x5c028000, 0x0201f000, 0x00020afe, 0x4933c857,
0x59300809, 0x4978080a, 0x4978080b, 0x58041409,
0x84081558, 0x48080c09, 0x1c01f000, 0x4807c857,
- 0x8c040d3e, 0x04020024, 0x497a5a07, 0x59300028,
- 0x80000540, 0x04000018, 0x497a5a07, 0x4c040000,
- 0x4c080000, 0x4c0c0000, 0x4c100000, 0x4c140000,
- 0x40002800, 0x58141003, 0x40040000, 0x80081480,
- 0x48082803, 0x40140000, 0x0201f800, 0x00100aec,
- 0x5c002800, 0x5c002000, 0x5c001800, 0x5c001000,
- 0x5c000800, 0x592c0207, 0x80000540, 0x04020009,
- 0x0401f005, 0x592c0409, 0x8c00051c, 0x04000002,
- 0x592c0803, 0x4807c857, 0x4a025a07, 0x00000015,
- 0x1c01f000, 0x59300028, 0x80000540, 0x04000009,
- 0x4a025a07, 0x00000011, 0x59300028, 0x4c040000,
- 0x0201f800, 0x00100aec, 0x5c000800, 0x0401f7f5,
- 0x4807c856, 0x4a025a07, 0x00000007, 0x1c01f000,
- 0x83380480, 0x00000058, 0x04021007, 0x83380480,
- 0x00000040, 0x04001004, 0x4d2c0000, 0x0c01f803,
- 0x5c025800, 0x1c01f000, 0x00108f96, 0x00108f96,
- 0x00108f96, 0x00108f96, 0x00108f96, 0x00108f99,
- 0x00108f98, 0x00108f96, 0x0010901e, 0x00108f96,
- 0x00108f96, 0x00108f96, 0x00108f96, 0x00108f96,
- 0x00108f96, 0x00108f96, 0x00108f96, 0x00108f96,
- 0x00108f96, 0x001090fa, 0x0010912a, 0x00109102,
- 0x00108f98, 0x00109136, 0x0201f800, 0x0010032e,
- 0x1c01f000, 0x5930001d, 0x800001c0, 0x02020800,
- 0x0010a218, 0x59300008, 0x8c00050e, 0x0400007e,
- 0x8c000500, 0x04000070, 0x8c00051c, 0x04000009,
- 0x84000500, 0x48026008, 0x59325809, 0x592c3c09,
- 0x841c3d58, 0x481e5c09, 0x0201f000, 0x00020c00,
- 0x59325809, 0x592c3c09, 0x841c3d58, 0x59300008,
- 0x8c00051c, 0x040207f3, 0x481e5c09, 0x42000000,
- 0x00000005, 0x40000000, 0x80000040, 0x040207fe,
- 0x59300008, 0x8c00051c, 0x040207ea, 0x59cc0808,
- 0x592c0205, 0x82000500, 0x000000ff, 0x82000580,
- 0x00000048, 0x0402000c, 0x497a580c, 0x82040500,
- 0x000000ff, 0x04000008, 0x592c0408, 0x800001c0,
- 0x04000005, 0x0201f800, 0x0010a104, 0x0201f000,
- 0x00100c28, 0x900421c0, 0x4812580a, 0x41782000,
- 0x82040500, 0x00000c00, 0x04000002, 0x59cc2009,
- 0x82043500, 0x00000fff, 0x04020027, 0x481e5c09,
- 0x4a025a07, 0x00000000, 0x801831c0, 0x02000000,
- 0x00100c28, 0x41782000, 0x8c183510, 0x04000002,
- 0x59cc200b, 0x4812580d, 0x41780000, 0x8c183512,
- 0x04000002, 0x59cc000a, 0x4802580c, 0x80100c00,
- 0x02001800, 0x0010032e, 0x02000000, 0x00100c28,
- 0x82041480, 0x0000001d, 0x0402100c, 0x4c500000,
- 0x4c540000, 0x83cca400, 0x0000000c, 0x832cac00,
- 0x0000000e, 0x0401fbc5, 0x5c00a800, 0x5c00a000,
- 0x0201f000, 0x00100c28, 0x0401fb6a, 0x0201f000,
- 0x00100c28, 0x412c7800, 0x0201f800, 0x00100583,
- 0x02000800, 0x0010032e, 0x492c780a, 0x841c3d52,
- 0x481c7c09, 0x4a025a05, 0x00000103, 0x4812580b,
- 0x900401c0, 0x4802580a, 0x583c0405, 0x583c1006,
- 0x583c2209, 0x48025c05, 0x480a5806, 0x48125a09,
- 0x0401f7c7, 0x8c000524, 0x04000792, 0x59325809,
- 0x4c000000, 0x592c0409, 0x8c00051c, 0x5c000000,
- 0x04020003, 0x4a026012, 0xffffffff, 0x84000524,
- 0x0401f788, 0x1c01f000, 0x59a8002c, 0x48026205,
- 0x59325809, 0x4a026203, 0x00000002, 0x592c2409,
- 0x59300808, 0x4933c857, 0x4807c857, 0x592c0205,
+ 0x8c040d3e, 0x04020027, 0x497a5a07, 0x59300028,
+ 0x80000540, 0x0400001b, 0x0201f800, 0x0010a99d,
+ 0x04000023, 0x497a5a07, 0x4c040000, 0x4c080000,
+ 0x4c0c0000, 0x4c100000, 0x4c140000, 0x40002800,
+ 0x58141003, 0x40040000, 0x80081480, 0x48082803,
+ 0x40140000, 0x0201f800, 0x00100b11, 0x5c002800,
+ 0x5c002000, 0x5c001800, 0x5c001000, 0x5c000800,
+ 0x592c0207, 0x80000540, 0x04020009, 0x0401f005,
+ 0x592c0409, 0x8c00051c, 0x04000002, 0x592c0803,
+ 0x4807c857, 0x4a025a07, 0x00000015, 0x1c01f000,
+ 0x59300028, 0x80000540, 0x04000009, 0x4a025a07,
+ 0x00000011, 0x59300028, 0x4c040000, 0x0201f800,
+ 0x00100b11, 0x5c000800, 0x0401f7f5, 0x4807c856,
+ 0x4a025a07, 0x00000007, 0x1c01f000, 0x83380480,
+ 0x00000058, 0x04021007, 0x83380480, 0x00000040,
+ 0x04001004, 0x4d2c0000, 0x0c01f803, 0x5c025800,
+ 0x1c01f000, 0x00109305, 0x00109305, 0x00109305,
+ 0x00109305, 0x00109305, 0x00109308, 0x00109307,
+ 0x00109305, 0x0010938d, 0x00109305, 0x00109305,
+ 0x00109305, 0x00109305, 0x00109305, 0x00109305,
+ 0x00109305, 0x00109305, 0x00109305, 0x00109305,
+ 0x0010946c, 0x0010949c, 0x00109474, 0x00109307,
+ 0x001094a8, 0x0201f800, 0x0010032f, 0x1c01f000,
+ 0x5930001d, 0x800001c0, 0x02020800, 0x0010a616,
+ 0x59300008, 0x8c00050e, 0x0400007e, 0x8c000500,
+ 0x04000070, 0x8c00051c, 0x04000009, 0x84000500,
+ 0x48026008, 0x59325809, 0x592c3c09, 0x841c3d58,
+ 0x481e5c09, 0x0201f000, 0x00020b61, 0x59325809,
+ 0x592c3c09, 0x841c3d58, 0x59300008, 0x8c00051c,
+ 0x040207f3, 0x481e5c09, 0x42000000, 0x00000005,
+ 0x40000000, 0x80000040, 0x040207fe, 0x59300008,
+ 0x8c00051c, 0x040207ea, 0x59cc0808, 0x592c0205,
0x82000500, 0x000000ff, 0x82000580, 0x00000048,
- 0x04020004, 0x8c102500, 0x02020000, 0x0010a148,
- 0x4a025a07, 0x00000000, 0x8c040d1e, 0x04000037,
- 0x41780800, 0x497a580a, 0x592c1c0a, 0x59300008,
- 0x8c00052c, 0x04000003, 0x4a026012, 0x7fffffff,
- 0x59300012, 0x59341200, 0x497a6205, 0x8c08150e,
- 0x0402007b, 0x4807c857, 0x4806580b, 0x0201f800,
- 0x0010a2e2, 0x80000d40, 0x04020ef9, 0x59300402,
+ 0x0402000c, 0x497a580c, 0x82040500, 0x000000ff,
+ 0x04000008, 0x592c0408, 0x800001c0, 0x04000005,
+ 0x0201f800, 0x0010a502, 0x0201f000, 0x00100c4d,
+ 0x900421c0, 0x4812580a, 0x41782000, 0x82040500,
+ 0x00000c00, 0x04000002, 0x59cc2009, 0x82043500,
+ 0x00000fff, 0x04020027, 0x481e5c09, 0x4a025a07,
+ 0x00000000, 0x801831c0, 0x02000000, 0x00100c4d,
+ 0x41782000, 0x8c183510, 0x04000002, 0x59cc200b,
+ 0x4812580d, 0x41780000, 0x8c183512, 0x04000002,
+ 0x59cc000a, 0x4802580c, 0x80100c00, 0x02001800,
+ 0x0010032f, 0x02000000, 0x00100c4d, 0x82041480,
+ 0x0000001d, 0x0402100c, 0x4c500000, 0x4c540000,
+ 0x83cca400, 0x0000000c, 0x832cac00, 0x0000000e,
+ 0x0401fbce, 0x5c00a800, 0x5c00a000, 0x0201f000,
+ 0x00100c4d, 0x0401fb6d, 0x0201f000, 0x00100c4d,
+ 0x412c7800, 0x0201f800, 0x00100599, 0x02000800,
+ 0x0010032f, 0x492c780a, 0x841c3d52, 0x481c7c09,
+ 0x4a025a05, 0x00000103, 0x4812580b, 0x900401c0,
+ 0x4802580a, 0x583c0405, 0x583c1006, 0x583c2209,
+ 0x48025c05, 0x480a5806, 0x48125a09, 0x0401f7c7,
+ 0x8c000524, 0x04000792, 0x59325809, 0x4c000000,
+ 0x592c0409, 0x8c00051c, 0x5c000000, 0x04020003,
+ 0x4a026012, 0xffffffff, 0x84000524, 0x0401f788,
+ 0x1c01f000, 0x59a80032, 0x48026205, 0x59325809,
+ 0x4a026203, 0x00000002, 0x592c2409, 0x59300808,
+ 0x4933c857, 0x4807c857, 0x592c0205, 0x82000500,
+ 0x000000ff, 0x82000580, 0x00000048, 0x04020004,
+ 0x8c102500, 0x02020000, 0x0010a546, 0x4a025a07,
+ 0x00000000, 0x8c040d1e, 0x04000038, 0x41780800,
+ 0x497a580a, 0x592c1c0a, 0x59300008, 0x8c00052c,
+ 0x04000003, 0x4a026012, 0x7fffffff, 0x59300012,
+ 0x59341200, 0x497a6205, 0x8c08150e, 0x0402007e,
+ 0x4807c857, 0x40041000, 0x0201f800, 0x0010a6e6,
+ 0x480a580b, 0x80000d40, 0x04020ef5, 0x59300402,
0x48025c07, 0x48065808, 0x4a025a05, 0x00000103,
0x4c040000, 0x592c0a09, 0x8c040d12, 0x04000003,
0x4a025a07, 0x0000000c, 0x5c000800, 0x4c040000,
- 0x4c0c0000, 0x4c100000, 0x0201f800, 0x00109f56,
+ 0x4c0c0000, 0x4c100000, 0x0201f800, 0x0010a31e,
0x5c002000, 0x5c001800, 0x5c000800, 0x8c102512,
- 0x0402001c, 0x4c0c0000, 0x0201f800, 0x00109f5b,
- 0x0201f800, 0x000203ef, 0x0201f800, 0x001049bd,
- 0x5c001800, 0x8c0c1d18, 0x02000000, 0x00020b9d,
- 0x0201f000, 0x00109a87, 0x4813c857, 0x8c102518,
- 0x0400004d, 0x41780800, 0x592c1c0a, 0x820c0580,
- 0x00001000, 0x040007c6, 0x8c102512, 0x040007c4,
- 0x592c780a, 0x583c080b, 0x583c1c0a, 0x0401f7c0,
+ 0x0402001c, 0x4c0c0000, 0x0201f800, 0x0010a323,
+ 0x0201f800, 0x00020401, 0x0201f800, 0x00104b13,
+ 0x5c001800, 0x8c0c1d18, 0x02000000, 0x00020afe,
+ 0x0201f000, 0x00109e37, 0x4813c857, 0x8c102518,
+ 0x0400004f, 0x41780800, 0x592c1c0a, 0x820c0580,
+ 0x00001000, 0x040007c5, 0x8c102512, 0x040007c3,
+ 0x592c780a, 0x583c080b, 0x583c1c0a, 0x0401f7bf,
0x4807c857, 0x592c780a, 0x59300402, 0x592c1405,
- 0x8c08151e, 0x0402000d, 0x592c1207, 0x48007c07,
+ 0x8c08151e, 0x0402000f, 0x592c1207, 0x48007c07,
0x48047808, 0x48087a07, 0x84102512, 0x48107c09,
- 0x4c0c0000, 0x0201f800, 0x0010059d, 0x403e5800,
- 0x0401fb17, 0x0401f7d9, 0x48025c07, 0x48065808,
- 0x583c080d, 0x583c000c, 0x80040c00, 0x82041480,
- 0x0000001d, 0x04001006, 0x583c1001, 0x480a5801,
- 0x49787801, 0x42000800, 0x0000001c, 0x82040c00,
- 0x00000014, 0x4c0c0000, 0x4c500000, 0x4c540000,
- 0x823ca400, 0x00000009, 0x832cac00, 0x00000009,
- 0x4c100000, 0x4c3c0000, 0x0401fb18, 0x5c007800,
- 0x5c002000, 0x5c00a800, 0x5c00a000, 0x84102512,
- 0x48125c09, 0x403e5800, 0x0201f800, 0x0010059d,
- 0x0201f800, 0x00109f56, 0x42034000, 0x0010caff,
- 0x59a1d806, 0x80edd9c0, 0x02000800, 0x0010032e,
- 0x48efc857, 0x58ec0008, 0x4803c857, 0x0801f800,
- 0x0401f7aa, 0x4933c857, 0x1c01f000, 0x59301415,
- 0x480bc857, 0x8c08151c, 0x0402000e, 0x80000540,
- 0x4803c857, 0x04000780, 0x80042c80, 0x0402177e,
- 0x8c081514, 0x04020005, 0x592c0810, 0x4807c857,
- 0x80040480, 0x48026017, 0x8408155c, 0x480a6415,
- 0x59301008, 0x8408151e, 0x480a6008, 0x4c100000,
- 0x4c3c0000, 0x4d400000, 0x592e8207, 0x4a025a07,
- 0x00000001, 0x0201f800, 0x00109f56, 0x49425a07,
- 0x5c028000, 0x5c007800, 0x5c002000, 0x497a580a,
- 0x8c102512, 0x04000006, 0x4d2c0000, 0x403e5800,
- 0x0201f800, 0x0010059d, 0x5c025800, 0x82102500,
- 0xffffedff, 0x48125c09, 0x59301006, 0x800811c0,
- 0x02000000, 0x00109ac7, 0x59a8002c, 0x80080480,
- 0x02021000, 0x00109ac7, 0x4a025a05, 0x00000103,
- 0x4a025a07, 0x00000006, 0x497a5c0a, 0x492fc857,
- 0x0201f800, 0x000203ef, 0x0201f800, 0x001049bd,
- 0x0201f000, 0x00020b9d, 0x59325809, 0x592c0409,
- 0x8c000518, 0x04000004, 0x412df800, 0x0201f000,
- 0x00100c47, 0x1c01f000, 0x4933c857, 0x59325809,
- 0x497a580a, 0x4a025a07, 0x00000000, 0x4a025a05,
- 0x00000103, 0x59300812, 0x4807c857, 0x800409c0,
- 0x0402000e, 0x48065808, 0x59300c02, 0x48065c07,
- 0x0201f800, 0x00109f56, 0x0201f800, 0x00109f5b,
- 0x0201f800, 0x000203ef, 0x0201f800, 0x001049bd,
- 0x0201f000, 0x00020b9d, 0x59340200, 0x8c00050e,
- 0x04020008, 0x59300012, 0x0201f800, 0x0010a2e2,
- 0x80000d40, 0x0401fe1e, 0x48065808, 0x0401f7eb,
- 0x592c0209, 0x8c00050e, 0x040207f7, 0x4933c857,
- 0x0201f000, 0x00109ac7, 0x4933c857, 0x59325809,
- 0x812e59c0, 0x02000800, 0x0010032e, 0x592c020b,
- 0x8c000502, 0x02000800, 0x0010032e, 0x4a026006,
- 0x00000002, 0x1c01f000, 0x5930001d, 0x800001c0,
- 0x02020800, 0x0010a218, 0x59300008, 0x4933c857,
- 0x4803c857, 0x8c00050e, 0x04000037, 0x8c000500,
- 0x04000029, 0x8c00051c, 0x0400000a, 0x84000500,
- 0x48026008, 0x59325809, 0x592c3c09, 0x481fc857,
- 0x841c3d58, 0x481e5c09, 0x0201f000, 0x00020c00,
- 0x59325809, 0x592c3c09, 0x841c3d58, 0x59300008,
- 0x8c00051c, 0x040207f2, 0x481e5c09, 0x42000000,
- 0x00000005, 0x40000000, 0x80000040, 0x040207fe,
- 0x59300008, 0x8c00051c, 0x040207e9, 0x592c0205,
- 0x82000500, 0x000000ff, 0x82000580, 0x00000048,
- 0x04020003, 0x497a580c, 0x0401f002, 0x497a580a,
- 0x481e5c09, 0x4a025a07, 0x00000000, 0x0201f000,
- 0x00100c28, 0x8c000524, 0x040007d9, 0x59325809,
- 0x4c000000, 0x592c0409, 0x8c00051c, 0x5c000000,
- 0x04020003, 0x4a026012, 0xffffffff, 0x84000524,
- 0x0401f7cf, 0x1c01f000, 0x4933c857, 0x41780800,
- 0x83380480, 0x00000058, 0x0402100b, 0x83380480,
- 0x00000040, 0x04001008, 0x4d2c0000, 0x59325809,
- 0x812e59c0, 0x0c020806, 0x5c025800, 0x0201f000,
- 0x00020b9d, 0x493bc857, 0x1c01f000, 0x0010919f,
- 0x0010919f, 0x0010919f, 0x0010919f, 0x0010919f,
- 0x001091a1, 0x0010919f, 0x0010919f, 0x0010919f,
- 0x0010919f, 0x0010919f, 0x0010919f, 0x0010919f,
- 0x0010919f, 0x0010919f, 0x0010919f, 0x0010919f,
- 0x0010919f, 0x0010919f, 0x0010919f, 0x001091a4,
- 0x0010919f, 0x0010919f, 0x0010919f, 0x0201f800,
- 0x0010032e, 0x59cc0808, 0x497a5808, 0x4807c857,
- 0x59300402, 0x48025c07, 0x4a025a05, 0x00000103,
- 0x900401c0, 0x4802580a, 0x4a025a07, 0x00000000,
- 0x800409c0, 0x02000000, 0x000203ef, 0x59cc0009,
- 0x4802580b, 0x82042500, 0x00000100, 0x04000002,
- 0x59cc200b, 0x4812580d, 0x82040500, 0x00000200,
- 0x04000002, 0x59cc000a, 0x4802580c, 0x80100c00,
- 0x02001800, 0x0010032e, 0x02000000, 0x000203ef,
- 0x82041480, 0x0000001d, 0x04001006, 0x592c0405,
- 0x8c00051e, 0x0400000e, 0x42000800, 0x0000001c,
- 0x4c500000, 0x4c540000, 0x83cca400, 0x0000000c,
- 0x832cac00, 0x0000000e, 0x0401f9ec, 0x5c00a800,
- 0x5c00a000, 0x0201f000, 0x000203ef, 0x0401f991,
- 0x0401f1cb, 0x83380480, 0x00000093, 0x02021800,
- 0x0010032e, 0x83380480, 0x00000085, 0x02001800,
- 0x0010032e, 0x0c01f001, 0x001091ed, 0x001091eb,
- 0x001091eb, 0x001091f4, 0x001091eb, 0x001091eb,
- 0x001091eb, 0x001091eb, 0x001091eb, 0x001091eb,
- 0x001091eb, 0x001091eb, 0x001091eb, 0x0201f800,
- 0x0010032e, 0x4a026203, 0x00000001, 0x493a6403,
- 0x42000800, 0x80000040, 0x0201f000, 0x00020b3e,
- 0x83300580, 0x0011152c, 0x02020800, 0x0010032e,
- 0x4933c857, 0x59cc1404, 0x0201f800, 0x00109cf9,
- 0x04000025, 0x591c0203, 0x82000580, 0x00000000,
- 0x04000021, 0x591c000a, 0x81340580, 0x0402001e,
- 0x59cc1204, 0x82080580, 0x0000ffff, 0x04000007,
- 0x591c0202, 0x82000d80, 0x0000ffff, 0x04000003,
- 0x80080580, 0x04020014, 0x4d300000, 0x4d1c0000,
- 0x411e6000, 0x0401fa08, 0x5c023800, 0x5c026000,
- 0x0400000b, 0x59cc0005, 0x8c000500, 0x04020003,
- 0x0401f9ab, 0x0401f003, 0x4a023a03, 0x00000002,
- 0x4a026403, 0x00000086, 0x0401f005, 0x0401f9ec,
- 0x040007f5, 0x4a026403, 0x00000087, 0x4d2c0000,
- 0x0201f800, 0x0010b78d, 0x0201f800, 0x00104d7c,
- 0x5c025800, 0x59340200, 0x8c00050e, 0x0400000d,
- 0x59cc1404, 0x0201f800, 0x00109cf9, 0x04000009,
- 0x591c0415, 0x8c00051a, 0x04000006, 0x4d300000,
- 0x411e6000, 0x0201f800, 0x00109adc, 0x5c026000,
- 0x1c01f000, 0x83380580, 0x00000013, 0x0402000b,
- 0x59300403, 0x4803c857, 0x82000d80, 0x00000086,
- 0x04000020, 0x82000d80, 0x00000087, 0x02020800,
- 0x0010032e, 0x0401f01b, 0x83380580, 0x00000027,
- 0x04000005, 0x83380580, 0x00000014, 0x02020800,
- 0x0010032e, 0x493bc857, 0x0201f800, 0x00106d91,
- 0x0201f800, 0x0010989f, 0x02000000, 0x00107eb4,
- 0x4d2c0000, 0x59325809, 0x0201f800, 0x000203ef,
- 0x59300a26, 0x82040d80, 0x00000003, 0x02000800,
- 0x001099b4, 0x5c025800, 0x0201f000, 0x00107eb4,
- 0x4933c857, 0x0201f000, 0x00020b9d, 0x83380580,
- 0x00000013, 0x04020006, 0x59300403, 0x4803c857,
- 0x82000480, 0x00000085, 0x0c01f053, 0x83380580,
- 0x00000027, 0x04020047, 0x4933c857, 0x0201f800,
- 0x00106d91, 0x4d3c0000, 0x417a7800, 0x0201f800,
- 0x0010ff80, 0x5c027800, 0x42003000, 0x00000015,
- 0x41782800, 0x42002000, 0x00000003, 0x42028000,
- 0x00000029, 0x4d400000, 0x4d440000, 0x59368c03,
- 0x0201f800, 0x0010a22a, 0x5c028800, 0x5c028000,
- 0x42000000, 0x0010cf23, 0x0201f800, 0x0010bfb3,
- 0x0201f800, 0x0010989f, 0x02000000, 0x00020b9d,
- 0x4d2c0000, 0x59325809, 0x592c0205, 0x82000500,
- 0x000000ff, 0x82000580, 0x00000014, 0x02020800,
- 0x001099b4, 0x4a025a05, 0x00000103, 0x59300402,
- 0x48025c07, 0x497a580a, 0x49425a07, 0x0201f800,
- 0x000203ef, 0x5c025800, 0x0201f000, 0x00020b9d,
- 0x83380580, 0x00000089, 0x04000005, 0x83380580,
- 0x0000008a, 0x02020000, 0x00107f37, 0x0201f800,
- 0x00107226, 0x02020000, 0x00107f37, 0x59300a03,
- 0x82040580, 0x0000000a, 0x0400002a, 0x82040580,
- 0x0000000c, 0x04000027, 0x0201f800, 0x0010032e,
- 0x83380580, 0x00000014, 0x040207ea, 0x4933c857,
- 0x0201f800, 0x00106d91, 0x42028000, 0x00000006,
- 0x0401f7cc, 0x001092cc, 0x001092ca, 0x001092ca,
- 0x001092ca, 0x001092ca, 0x001092ca, 0x001092d2,
- 0x001092ca, 0x001092ca, 0x001092ca, 0x001092ca,
- 0x001092ca, 0x001092ca, 0x0201f800, 0x0010032e,
- 0x4933c857, 0x59a8002a, 0x48026006, 0x4a026203,
- 0x0000000a, 0x1c01f000, 0x4933c857, 0x59a8002a,
- 0x48026006, 0x4a026203, 0x0000000c, 0x1c01f000,
- 0x5932680a, 0x83380580, 0x00000089, 0x04000008,
- 0x83380580, 0x0000008a, 0x04000029, 0x4933c857,
- 0x493bc857, 0x0201f000, 0x00107f37, 0x4933c857,
- 0x59325809, 0x59300a26, 0x82040580, 0x00000003,
- 0x0402000a, 0x0201f800, 0x0010989f, 0x04000012,
- 0x0201f800, 0x000203ef, 0x0201f800, 0x001049bd,
- 0x497a6009, 0x0401f00c, 0x59300226, 0x82000580,
- 0x00000001, 0x04020008, 0x59300c17, 0x82040580,
- 0x00000039, 0x0400001d, 0x82040580, 0x00000035,
- 0x0400001a, 0x59cc0c07, 0x4806641a, 0x59cc0a07,
- 0x4806621a, 0x59300203, 0x48026426, 0x4a026203,
- 0x00000011, 0x0201f000, 0x00107eb4, 0x4933c857,
- 0x59300226, 0x82000580, 0x00000001, 0x0402004a,
- 0x59300c17, 0x82040580, 0x00000035, 0x04000007,
- 0x82040580, 0x0000001e, 0x04000004, 0x82040580,
- 0x00000039, 0x04020040, 0x4933c857, 0x4c5c0000,
- 0x4c600000, 0x4d1c0000, 0x4130b800, 0x4004c000,
- 0x0201f800, 0x00109c9c, 0x04020031, 0x82600580,
- 0x00000035, 0x04020004, 0x591c0c15, 0x8c040d02,
- 0x0400002b, 0x0201f800, 0x00107ef8, 0x04000028,
- 0x491fc857, 0x4933c857, 0x82600580, 0x00000035,
- 0x04000004, 0x82600580, 0x00000039, 0x04020002,
- 0x4932381d, 0x585c081c, 0x4806601c, 0x48626403,
- 0x4a026203, 0x00000001, 0x4a026407, 0x00000001,
- 0x585c080a, 0x4807c857, 0x4806600a, 0x585c0c16,
- 0x4807c857, 0x48066416, 0x585c0a16, 0x4807c857,
- 0x48066216, 0x585c0a17, 0x4807c857, 0x48066217,
- 0x585c0c1a, 0x4807c857, 0x4806641a, 0x585c0a1a,
- 0x4807c857, 0x4806621a, 0x491e6027, 0x42000800,
- 0x80000040, 0x0201f800, 0x00020b3e, 0x405e6000,
- 0x5c023800, 0x5c00c000, 0x5c00b800, 0x0201f000,
- 0x00020b9d, 0x0201f800, 0x0010989f, 0x0400000b,
- 0x4d2c0000, 0x59325809, 0x0201f800, 0x000203ef,
- 0x59300226, 0x82000580, 0x00000003, 0x02000800,
- 0x001049bd, 0x5c025800, 0x0201f000, 0x00020b9d,
- 0x4803c856, 0x4c500000, 0x4c540000, 0x412c7800,
- 0x4c3c0000, 0x42002800, 0x00000001, 0x82040480,
- 0x00000101, 0x04001003, 0x42000800, 0x00000100,
- 0x40043000, 0x42000800, 0x0000001c, 0x83cca400,
- 0x0000000c, 0x832cac00, 0x0000000e, 0x0401f843,
- 0x82183480, 0x0000001c, 0x592e5801, 0x812e59c0,
- 0x02020800, 0x0010059d, 0x0201f800, 0x00100583,
- 0x04000016, 0x80142800, 0x4a025805, 0x00000110,
- 0x492c7801, 0x82180c80, 0x0000003d, 0x04021006,
- 0x40180800, 0x832cac00, 0x00000006, 0x0401f82f,
- 0x0401f00a, 0x82183480, 0x0000003c, 0x42000800,
- 0x0000003c, 0x412c7800, 0x832cac00, 0x00000006,
- 0x0401f826, 0x0401f7e9, 0x5c007800, 0x841429c0,
- 0x82142d40, 0x00000003, 0x48147a05, 0x403e5800,
- 0x5c00a800, 0x5c00a000, 0x1c01f000, 0x492fc857,
- 0x812e59c0, 0x0400000f, 0x4d2c0000, 0x4c3c0000,
- 0x592c7801, 0x803c79c0, 0x04000006, 0x497a5801,
- 0x0201f800, 0x000203ef, 0x403e5800, 0x0401f7f9,
- 0x5c007800, 0x0201f800, 0x000203ef, 0x5c025800,
+ 0x4c0c0000, 0x4c3c0000, 0x0201f800, 0x001005b3,
+ 0x5c007800, 0x403e5800, 0x0401fb1c, 0x0401f7d7,
+ 0x48025c07, 0x48065808, 0x583c080d, 0x583c000c,
+ 0x80040c00, 0x82041480, 0x0000001d, 0x04001006,
+ 0x583c1001, 0x480a5801, 0x49787801, 0x42000800,
+ 0x0000001c, 0x82040c00, 0x00000014, 0x4c0c0000,
+ 0x4c500000, 0x4c540000, 0x823ca400, 0x00000009,
+ 0x832cac00, 0x00000009, 0x4c100000, 0x4c3c0000,
+ 0x0401fb1e, 0x5c007800, 0x5c002000, 0x5c00a800,
+ 0x5c00a000, 0x84102512, 0x48125c09, 0x403e5800,
+ 0x0201f800, 0x001005b3, 0x0201f800, 0x0010a31e,
+ 0x42034000, 0x0010d115, 0x59a1d806, 0x80edd9c0,
+ 0x02000800, 0x0010032f, 0x48efc857, 0x58ec0008,
+ 0x4803c857, 0x0801f800, 0x0401f7a8, 0x4933c857,
+ 0x1c01f000, 0x59301415, 0x480bc857, 0x8c08151c,
+ 0x0402000e, 0x80000540, 0x4803c857, 0x0400077d,
+ 0x80042c80, 0x0402177b, 0x8c081514, 0x04020005,
+ 0x592c0810, 0x4807c857, 0x80040480, 0x48026017,
+ 0x8408155c, 0x480a6415, 0x59301008, 0x8408151e,
+ 0x480a6008, 0x4c100000, 0x4c3c0000, 0x4d400000,
+ 0x592e8207, 0x4a025a07, 0x00000001, 0x0201f800,
+ 0x0010a31e, 0x49425a07, 0x5c028000, 0x5c007800,
+ 0x5c002000, 0x497a580a, 0x8c102512, 0x04000006,
+ 0x4d2c0000, 0x403e5800, 0x0201f800, 0x001005b3,
+ 0x5c025800, 0x82102500, 0xffffedff, 0x48125c09,
+ 0x59301006, 0x800811c0, 0x02000000, 0x00109e77,
+ 0x59a80032, 0x80080480, 0x02021000, 0x00109e77,
+ 0x4a025a05, 0x00000103, 0x4a025a07, 0x00000006,
+ 0x497a5c0a, 0x492fc857, 0x0201f800, 0x00020401,
+ 0x0201f800, 0x00104b13, 0x0201f000, 0x00020afe,
+ 0x59325809, 0x592c0409, 0x8c000518, 0x04000004,
+ 0x412df800, 0x0201f000, 0x00100c6c, 0x1c01f000,
+ 0x4933c857, 0x59325809, 0x497a580a, 0x4a025a07,
+ 0x00000000, 0x4a025a05, 0x00000103, 0x59300812,
+ 0x4807c857, 0x800409c0, 0x0402000e, 0x48065808,
+ 0x59300c02, 0x48065c07, 0x0201f800, 0x0010a31e,
+ 0x0201f800, 0x0010a323, 0x0201f800, 0x00020401,
+ 0x0201f800, 0x00104b13, 0x0201f000, 0x00020afe,
+ 0x59340200, 0x8c00050e, 0x04020008, 0x59300012,
+ 0x0201f800, 0x0010a6e6, 0x80000d40, 0x0401fe18,
+ 0x48065808, 0x0401f7eb, 0x592c0209, 0x8c00050e,
+ 0x040207f7, 0x4933c857, 0x0201f000, 0x00109e77,
+ 0x4933c857, 0x59325809, 0x812e59c0, 0x02000800,
+ 0x0010032f, 0x592c020b, 0x8c000502, 0x02000800,
+ 0x0010032f, 0x4a026006, 0x00000002, 0x1c01f000,
+ 0x5930001d, 0x800001c0, 0x02020800, 0x0010a616,
+ 0x59300008, 0x4933c857, 0x4803c857, 0x8c00050e,
+ 0x04000037, 0x8c000500, 0x04000029, 0x8c00051c,
+ 0x0400000a, 0x84000500, 0x48026008, 0x59325809,
+ 0x592c3c09, 0x481fc857, 0x841c3d58, 0x481e5c09,
+ 0x0201f000, 0x00020b61, 0x59325809, 0x592c3c09,
+ 0x841c3d58, 0x59300008, 0x8c00051c, 0x040207f2,
+ 0x481e5c09, 0x42000000, 0x00000005, 0x40000000,
+ 0x80000040, 0x040207fe, 0x59300008, 0x8c00051c,
+ 0x040207e9, 0x592c0205, 0x82000500, 0x000000ff,
+ 0x82000580, 0x00000048, 0x04020003, 0x497a580c,
+ 0x0401f002, 0x497a580a, 0x481e5c09, 0x4a025a07,
+ 0x00000000, 0x0201f000, 0x00100c4d, 0x8c000524,
+ 0x040007d9, 0x59325809, 0x4c000000, 0x592c0409,
+ 0x8c00051c, 0x5c000000, 0x04020003, 0x4a026012,
+ 0xffffffff, 0x84000524, 0x0401f7cf, 0x1c01f000,
+ 0x4933c857, 0x41780800, 0x83380480, 0x00000058,
+ 0x0402100b, 0x83380480, 0x00000040, 0x04001008,
+ 0x4d2c0000, 0x59325809, 0x812e59c0, 0x0c020806,
+ 0x5c025800, 0x0201f000, 0x00020afe, 0x493bc857,
+ 0x1c01f000, 0x00109511, 0x00109511, 0x00109511,
+ 0x00109511, 0x00109511, 0x00109513, 0x00109511,
+ 0x00109511, 0x00109511, 0x00109511, 0x00109511,
+ 0x00109511, 0x00109511, 0x00109511, 0x00109511,
+ 0x00109511, 0x00109511, 0x00109511, 0x00109511,
+ 0x00109511, 0x00109516, 0x00109511, 0x00109511,
+ 0x00109511, 0x0201f800, 0x0010032f, 0x59cc0808,
+ 0x497a5808, 0x4807c857, 0x59300402, 0x48025c07,
+ 0x4a025a05, 0x00000103, 0x900401c0, 0x4802580a,
+ 0x4a025a07, 0x00000000, 0x800409c0, 0x02000000,
+ 0x00020401, 0x59cc0009, 0x4802580b, 0x82042500,
+ 0x00000100, 0x04000002, 0x59cc200b, 0x4812580d,
+ 0x82040500, 0x00000200, 0x04000002, 0x59cc000a,
+ 0x4802580c, 0x80100c00, 0x02001800, 0x0010032f,
+ 0x02000000, 0x00020401, 0x82041480, 0x0000001d,
+ 0x04001006, 0x592c0405, 0x8c00051e, 0x0400000e,
+ 0x42000800, 0x0000001c, 0x4c500000, 0x4c540000,
+ 0x83cca400, 0x0000000c, 0x832cac00, 0x0000000e,
+ 0x0401f9f2, 0x5c00a800, 0x5c00a000, 0x0201f000,
+ 0x00020401, 0x0401f991, 0x0401f1d0, 0x83380480,
+ 0x00000093, 0x02021800, 0x0010032f, 0x83380480,
+ 0x00000085, 0x02001800, 0x0010032f, 0x0c01f001,
+ 0x0010955f, 0x0010955d, 0x0010955d, 0x00109566,
+ 0x0010955d, 0x0010955d, 0x0010955d, 0x0010955d,
+ 0x0010955d, 0x0010955d, 0x0010955d, 0x0010955d,
+ 0x0010955d, 0x0201f800, 0x0010032f, 0x4a026203,
+ 0x00000001, 0x493a6403, 0x42000800, 0x80000040,
+ 0x0201f000, 0x00020a9f, 0x83300580, 0x00111cec,
+ 0x02020800, 0x0010032f, 0x4933c857, 0x59cc1404,
+ 0x0201f800, 0x0010a0ab, 0x04000025, 0x591c0203,
+ 0x82000580, 0x00000000, 0x04000021, 0x591c000a,
+ 0x81340580, 0x0402001e, 0x59cc1204, 0x82080580,
+ 0x0000ffff, 0x04000007, 0x591c0202, 0x82000d80,
+ 0x0000ffff, 0x04000003, 0x80080580, 0x04020014,
+ 0x4d300000, 0x4d1c0000, 0x411e6000, 0x0401fa11,
+ 0x5c023800, 0x5c026000, 0x0400000b, 0x59cc0005,
+ 0x8c000500, 0x04020003, 0x0401f9b1, 0x0401f003,
+ 0x4a023a03, 0x00000002, 0x4a026403, 0x00000086,
+ 0x0401f005, 0x0401f9f2, 0x040007f5, 0x4a026403,
+ 0x00000087, 0x4d2c0000, 0x0201f800, 0x0010bce2,
+ 0x0201f800, 0x00104ee7, 0x5c025800, 0x59340200,
+ 0x8c00050e, 0x0400000d, 0x59cc1404, 0x0201f800,
+ 0x0010a0ab, 0x04000009, 0x591c0415, 0x8c00051a,
+ 0x04000006, 0x4d300000, 0x411e6000, 0x0201f800,
+ 0x00109e8c, 0x5c026000, 0x1c01f000, 0x83380580,
+ 0x00000013, 0x0402000b, 0x59300403, 0x4803c857,
+ 0x82000d80, 0x00000086, 0x04000020, 0x82000d80,
+ 0x00000087, 0x02020800, 0x0010032f, 0x0401f01b,
+ 0x83380580, 0x00000027, 0x04000005, 0x83380580,
+ 0x00000014, 0x02020800, 0x0010032f, 0x493bc857,
+ 0x0201f800, 0x001070fc, 0x0201f800, 0x00109c4d,
+ 0x02000000, 0x00108253, 0x4d2c0000, 0x59325809,
+ 0x0201f800, 0x00020401, 0x59300a26, 0x82040d80,
+ 0x00000003, 0x02000800, 0x00109d64, 0x5c025800,
+ 0x0201f000, 0x00108253, 0x4933c857, 0x0201f000,
+ 0x00020afe, 0x83380580, 0x00000013, 0x04020006,
+ 0x59300403, 0x4803c857, 0x82000480, 0x00000085,
+ 0x0c01f053, 0x83380580, 0x00000027, 0x04020047,
+ 0x4933c857, 0x0201f800, 0x001070fc, 0x4d3c0000,
+ 0x417a7800, 0x0201f800, 0x00110684, 0x5c027800,
+ 0x42003000, 0x00000015, 0x41782800, 0x42002000,
+ 0x00000003, 0x42028000, 0x00000029, 0x4d400000,
+ 0x4d440000, 0x59368c03, 0x0201f800, 0x0010a628,
+ 0x5c028800, 0x5c028000, 0x42000000, 0x0010d53e,
+ 0x0201f800, 0x0010c50a, 0x0201f800, 0x00109c4d,
+ 0x02000000, 0x00020afe, 0x4d2c0000, 0x59325809,
+ 0x592c0205, 0x82000500, 0x000000ff, 0x82000580,
+ 0x00000014, 0x02020800, 0x00109d64, 0x4a025a05,
+ 0x00000103, 0x59300402, 0x48025c07, 0x497a580a,
+ 0x49425a07, 0x0201f800, 0x00020401, 0x5c025800,
+ 0x0201f000, 0x00020afe, 0x83380580, 0x00000089,
+ 0x04000005, 0x83380580, 0x0000008a, 0x02020000,
+ 0x001082d6, 0x0201f800, 0x00107595, 0x02020000,
+ 0x001082d6, 0x59300a03, 0x82040580, 0x0000000a,
+ 0x0400002a, 0x82040580, 0x0000000c, 0x04000027,
+ 0x0201f800, 0x0010032f, 0x83380580, 0x00000014,
+ 0x040207ea, 0x4933c857, 0x0201f800, 0x001070fc,
+ 0x42028000, 0x00000006, 0x0401f7cc, 0x0010963e,
+ 0x0010963c, 0x0010963c, 0x0010963c, 0x0010963c,
+ 0x0010963c, 0x00109644, 0x0010963c, 0x0010963c,
+ 0x0010963c, 0x0010963c, 0x0010963c, 0x0010963c,
+ 0x0201f800, 0x0010032f, 0x4933c857, 0x59a80030,
+ 0x48026006, 0x4a026203, 0x0000000a, 0x1c01f000,
+ 0x4933c857, 0x59a80030, 0x48026006, 0x4a026203,
+ 0x0000000c, 0x1c01f000, 0x5932680a, 0x83380580,
+ 0x00000089, 0x04000008, 0x83380580, 0x0000008a,
+ 0x04000029, 0x4933c857, 0x493bc857, 0x0201f000,
+ 0x001082d6, 0x4933c857, 0x59325809, 0x59300a26,
+ 0x82040580, 0x00000003, 0x0402000a, 0x0201f800,
+ 0x00109c4d, 0x04000012, 0x0201f800, 0x00020401,
+ 0x0201f800, 0x00104b13, 0x497a6009, 0x0401f00c,
+ 0x59300226, 0x82000580, 0x00000001, 0x04020008,
+ 0x59300c17, 0x82040580, 0x00000039, 0x0400001d,
+ 0x82040580, 0x00000035, 0x0400001a, 0x59cc0c07,
+ 0x4806641a, 0x59cc0a07, 0x4806621a, 0x59300203,
+ 0x48026426, 0x4a026203, 0x00000011, 0x0201f000,
+ 0x00108253, 0x4933c857, 0x59300226, 0x82000580,
+ 0x00000001, 0x0402004a, 0x59300c17, 0x82040580,
+ 0x00000035, 0x04000007, 0x82040580, 0x0000001e,
+ 0x04000004, 0x82040580, 0x00000039, 0x04020040,
+ 0x4933c857, 0x4c5c0000, 0x4c600000, 0x4d1c0000,
+ 0x4130b800, 0x4004c000, 0x0201f800, 0x0010a04e,
+ 0x04020031, 0x82600580, 0x00000035, 0x04020004,
+ 0x591c0c15, 0x8c040d02, 0x0400002b, 0x0201f800,
+ 0x00108297, 0x04000028, 0x491fc857, 0x4933c857,
+ 0x82600580, 0x00000035, 0x04000004, 0x82600580,
+ 0x00000039, 0x04020002, 0x4932381d, 0x585c081c,
+ 0x4806601c, 0x48626403, 0x4a026203, 0x00000001,
+ 0x4a026407, 0x00000001, 0x585c080a, 0x4807c857,
+ 0x4806600a, 0x585c0c16, 0x4807c857, 0x48066416,
+ 0x585c0a16, 0x4807c857, 0x48066216, 0x585c0a17,
+ 0x4807c857, 0x48066217, 0x585c0c1a, 0x4807c857,
+ 0x4806641a, 0x585c0a1a, 0x4807c857, 0x4806621a,
+ 0x491e6027, 0x42000800, 0x80000040, 0x0201f800,
+ 0x00020a9f, 0x405e6000, 0x5c023800, 0x5c00c000,
+ 0x5c00b800, 0x0201f000, 0x00020afe, 0x0201f800,
+ 0x00109c4d, 0x0400000b, 0x4d2c0000, 0x59325809,
+ 0x0201f800, 0x00020401, 0x59300226, 0x82000580,
+ 0x00000003, 0x02000800, 0x00104b13, 0x5c025800,
+ 0x0201f000, 0x00020afe, 0x4803c856, 0x4c5c0000,
+ 0x4c600000, 0x4c640000, 0x4c500000, 0x4c540000,
+ 0x412cb800, 0x4d2c0000, 0x4200c000, 0x00000001,
+ 0x82040480, 0x00000101, 0x04001003, 0x42000800,
+ 0x00000100, 0x4004c800, 0x42000800, 0x0000001c,
+ 0x83cca400, 0x0000000c, 0x832cac00, 0x0000000e,
+ 0x0401f846, 0x8264cc80, 0x0000001c, 0x592e5801,
+ 0x812e59c0, 0x02020800, 0x001005b3, 0x0201f800,
+ 0x00100599, 0x04000016, 0x8060c000, 0x4a025805,
+ 0x00000110, 0x492cb801, 0x82640c80, 0x0000003d,
+ 0x04021006, 0x40640800, 0x832cac00, 0x00000006,
+ 0x0401f832, 0x0401f00a, 0x8264cc80, 0x0000003c,
+ 0x42000800, 0x0000003c, 0x412cb800, 0x832cac00,
+ 0x00000006, 0x0401f829, 0x0401f7e9, 0x5c025800,
+ 0x8460c1c0, 0x8260c540, 0x00000003, 0x48625a05,
+ 0x5c00a800, 0x5c00a000, 0x5c00c800, 0x5c00c000,
+ 0x5c00b800, 0x1c01f000, 0x492fc857, 0x812e59c0,
+ 0x04000010, 0x4d2c0000, 0x4c3c0000, 0x592c7801,
+ 0x803c79c0, 0x04000007, 0x497a5801, 0x4c3c0000,
+ 0x0201f800, 0x00020401, 0x5c025800, 0x0401f7f8,
+ 0x5c007800, 0x0201f800, 0x00020401, 0x5c025800,
0x1c01f000, 0x4803c856, 0x4c580000, 0x82040400,
- 0x00000003, 0x8000b104, 0x0201f800, 0x0010c086,
+ 0x00000003, 0x8000b104, 0x0201f800, 0x0010c5dd,
0x5c00b000, 0x1c01f000, 0x4803c856, 0x4c580000,
0x82040c00, 0x00000003, 0x8004b104, 0x0201f800,
- 0x0010c086, 0x5c00b000, 0x1c01f000, 0x591c0c07,
+ 0x0010c5dd, 0x5c00b000, 0x1c01f000, 0x591c0c07,
0x82040580, 0x00000003, 0x04000007, 0x82040580,
0x00000002, 0x04000004, 0x82040580, 0x0000000a,
0x0402002d, 0x4d300000, 0x4d2c0000, 0x411e6000,
- 0x59325809, 0x0201f800, 0x0010989f, 0x04000022,
+ 0x59325809, 0x0201f800, 0x00109c4d, 0x04000022,
0x59300c07, 0x82040580, 0x0000000a, 0x04000023,
0x82040580, 0x00000003, 0x04020009, 0x592c0a05,
0x82040d00, 0x000000ff, 0x82040d80, 0x00000014,
0x04000003, 0x4a026226, 0x00000003, 0x0401f81c,
0x4d400000, 0x42028000, 0x00000013, 0x592c0a09,
- 0x84040d54, 0x0201f800, 0x00104e1a, 0x5c028000,
- 0x0201f800, 0x00109f56, 0x0201f800, 0x000203ef,
+ 0x84040d54, 0x0201f800, 0x00104f92, 0x5c028000,
+ 0x0201f800, 0x0010a31e, 0x0201f800, 0x00020401,
0x59300226, 0x82000580, 0x00000003, 0x02000800,
- 0x001099b4, 0x0201f800, 0x00107eb4, 0x5c025800,
+ 0x00109d64, 0x0201f800, 0x00108253, 0x5c025800,
0x5c026000, 0x1c01f000, 0x4a025a07, 0x00000013,
0x4a026226, 0x0000000a, 0x0401f7ee, 0x592c0409,
0x8c000512, 0x04000009, 0x84000512, 0x48025c09,
- 0x4d2c0000, 0x592e580a, 0x0201f800, 0x0010059d,
+ 0x4d2c0000, 0x592e580a, 0x0201f800, 0x001005b3,
0x5c025800, 0x497a580a, 0x1c01f000, 0x59cc0005,
- 0x8c000500, 0x0402000b, 0x591c0407, 0x82000580,
- 0x00000002, 0x04020007, 0x591c0c03, 0x82040580,
- 0x00000085, 0x04000003, 0x82040580, 0x0000008b,
- 0x1c01f000, 0x4933c857, 0x4d3c0000, 0x42027800,
- 0x00000002, 0x59300407, 0x82000c80, 0x00000014,
- 0x02021800, 0x0010032e, 0x0c01f80a, 0x5c027800,
- 0x1c01f000, 0x4933c857, 0x59300407, 0x82000c80,
- 0x00000014, 0x02021800, 0x0010032e, 0x0c01f001,
- 0x00109445, 0x00109442, 0x00109442, 0x00109482,
- 0x00109440, 0x00109442, 0x0010945e, 0x00109442,
- 0x00109440, 0x00106bc3, 0x0010a374, 0x00109442,
- 0x00109442, 0x00109440, 0x00109440, 0x00109440,
- 0x00109578, 0x00109442, 0x0010be2e, 0x0010be2e,
- 0x0201f800, 0x0010032e, 0x4803c856, 0x80000580,
- 0x1c01f000, 0x4803c856, 0x8d3e7d02, 0x04020016,
- 0x0201f800, 0x0010989f, 0x0400000f, 0x59325809,
- 0x41780800, 0x4d400000, 0x42028000, 0x00000005,
- 0x0201f800, 0x00104e1a, 0x5c028000, 0x0201f800,
- 0x00109f56, 0x0201f800, 0x00109a62, 0x0201f800,
- 0x000203ef, 0x0201f800, 0x00107eb4, 0x82000540,
- 0x00000001, 0x1c01f000, 0x4933c857, 0x0201f800,
- 0x0010989f, 0x04000009, 0x59300809, 0x58040209,
- 0x8c000512, 0x04000005, 0x4d400000, 0x42028000,
- 0x0000000c, 0x0401f011, 0x0201f800, 0x0010493c,
- 0x0400000b, 0x59300415, 0x84000556, 0x48026415,
- 0x0401f812, 0x4df00000, 0x59300415, 0x84000516,
- 0x48026415, 0x5c03e000, 0x1c01f000, 0x4d400000,
- 0x42028000, 0x00000010, 0x0201f800, 0x0010afbb,
- 0x4a026407, 0x00000006, 0x4a026203, 0x00000007,
- 0x5c028000, 0x1c01f000, 0x4933c857, 0x0201f800,
- 0x00106e41, 0x4df00000, 0x0401f8de, 0x82000c80,
- 0x0000000e, 0x02021800, 0x0010032e, 0x0c01f001,
- 0x0010949c, 0x00109523, 0x001094b3, 0x00109537,
- 0x0010951e, 0x0010949a, 0x0010949c, 0x0010949c,
- 0x001094a0, 0x0010949c, 0x0010949c, 0x0010949c,
- 0x0010949c, 0x001094b3, 0x0201f800, 0x0010032e,
- 0x5c03e000, 0x02000800, 0x00106e2e, 0x0401f7a3,
- 0x5c03e000, 0x02000800, 0x00106e2e, 0x59300407,
- 0x82000580, 0x00000003, 0x0402079f, 0x59300203,
- 0x82000580, 0x0000000d, 0x0400079b, 0x8d3e7d02,
- 0x04020799, 0x4d340000, 0x5932680a, 0x0201f800,
- 0x001049bd, 0x5c026800, 0x0401f793, 0x0201f800,
- 0x0010a424, 0x59300004, 0x8400055c, 0x48026004,
- 0x0201f800, 0x00106e2e, 0x59300407, 0x82000580,
- 0x00000006, 0x0400005b, 0x8d3e7d02, 0x04020059,
- 0x497a6226, 0x59300203, 0x82000580, 0x0000000d,
- 0x04000003, 0x4a026226, 0x00000003, 0x0401fbd8,
- 0x04020004, 0x8d3e7d00, 0x04000044, 0x0401f038,
- 0x4d2c0000, 0x4d400000, 0x59325809, 0x0201f800,
- 0x00109a62, 0x592c0409, 0x8c000512, 0x04000009,
- 0x4d2c0000, 0x84000512, 0x48025c09, 0x592c080a,
- 0x40065800, 0x0201f800, 0x0010059d, 0x5c025800,
- 0x4d400000, 0x42028000, 0x00000005, 0x592c0a09,
- 0x8c040d0e, 0x04000004, 0x42028000, 0x00000002,
- 0x0401f005, 0x8c040d12, 0x04000003, 0x42028000,
- 0x0000000c, 0x0201f800, 0x00104e1a, 0x5c028000,
- 0x0201f800, 0x00109f56, 0x8d3e7d00, 0x04020004,
- 0x0201f800, 0x0010c0c7, 0x04020004, 0x0201f800,
- 0x000203ef, 0x497a6009, 0x5c028000, 0x5c025800,
- 0x8d3e7d00, 0x0400000d, 0x59300a26, 0x82040d80,
- 0x00000003, 0x04020006, 0x4d340000, 0x5932680a,
- 0x0201f800, 0x001049bd, 0x5c026800, 0x0201f800,
- 0x00107eb4, 0x0401f013, 0x0201f800, 0x0010c0c7,
- 0x04020006, 0x59300a26, 0x82040d80, 0x00000003,
- 0x02000800, 0x001099b4, 0x4a026403, 0x00000085,
- 0x4a026203, 0x00000009, 0x4a026407, 0x00000002,
- 0x42000800, 0x8000404b, 0x0201f800, 0x00020b3e,
- 0x5c03e000, 0x02020800, 0x00106e41, 0x82000540,
- 0x00000001, 0x1c01f000, 0x0201f800, 0x00106e2e,
- 0x0201f800, 0x00100c76, 0x0401f791, 0x598c000f,
- 0x81300580, 0x04020004, 0x0201f800, 0x00107161,
- 0x0402001d, 0x0201f800, 0x001101de, 0x80c40040,
+ 0x8c000500, 0x0402000e, 0x591c0407, 0x82000580,
+ 0x00000002, 0x0402000a, 0x591c0004, 0x8c00053e,
+ 0x04020007, 0x591c0c03, 0x82040580, 0x00000085,
+ 0x04000003, 0x82040580, 0x0000008b, 0x1c01f000,
+ 0x4933c857, 0x4d3c0000, 0x42027800, 0x00000002,
+ 0x59300407, 0x82000c80, 0x00000014, 0x02021800,
+ 0x0010032f, 0x0c01f80a, 0x5c027800, 0x1c01f000,
+ 0x4933c857, 0x59300407, 0x82000c80, 0x00000014,
+ 0x02021800, 0x0010032f, 0x0c01f001, 0x001097c0,
+ 0x001097bd, 0x001097bd, 0x00109803, 0x001097bb,
+ 0x001097bd, 0x001097d9, 0x001097bd, 0x001097bb,
+ 0x00106f23, 0x0010a77a, 0x001097bd, 0x001097bd,
+ 0x001097bb, 0x001097bb, 0x001097bb, 0x001098f8,
+ 0x001097bd, 0x0010c385, 0x0010c385, 0x0201f800,
+ 0x0010032f, 0x4803c856, 0x80000580, 0x1c01f000,
+ 0x4803c856, 0x8d3e7d02, 0x04020016, 0x0201f800,
+ 0x00109c4d, 0x0400000f, 0x59325809, 0x41780800,
+ 0x4d400000, 0x42028000, 0x00000005, 0x0201f800,
+ 0x00104f92, 0x5c028000, 0x0201f800, 0x0010a31e,
+ 0x0201f800, 0x00109e12, 0x0201f800, 0x00020401,
+ 0x0201f800, 0x00108253, 0x82000540, 0x00000001,
+ 0x1c01f000, 0x4933c857, 0x0201f800, 0x00109c4d,
+ 0x04000009, 0x59300809, 0x58040209, 0x8c000512,
+ 0x04000005, 0x4d400000, 0x42028000, 0x0000000c,
+ 0x0401f011, 0x0201f800, 0x00104a92, 0x0400000b,
+ 0x59300415, 0x84000556, 0x48026415, 0x0401f818,
+ 0x4df00000, 0x59300415, 0x84000516, 0x48026415,
+ 0x5c03e000, 0x1c01f000, 0x4d400000, 0x42028000,
+ 0x00000010, 0x0201f800, 0x0010b464, 0x4a026407,
+ 0x00000006, 0x4a026203, 0x00000007, 0x83400580,
+ 0x0000000c, 0x04020004, 0x4a026203, 0x00000006,
+ 0x497a6006, 0x5c028000, 0x1c01f000, 0x4933c857,
+ 0x0201f800, 0x001071b0, 0x4df00000, 0x0401f8dd,
+ 0x82000c80, 0x0000000e, 0x02021800, 0x0010032f,
+ 0x0c01f001, 0x0010981d, 0x001098a3, 0x00109834,
+ 0x001098b7, 0x0010989e, 0x0010981b, 0x0010981d,
+ 0x0010981d, 0x00109821, 0x0010981d, 0x0010981d,
+ 0x0010981d, 0x0010981d, 0x00109834, 0x0201f800,
+ 0x0010032f, 0x5c03e000, 0x02000800, 0x0010719d,
+ 0x0401f79d, 0x5c03e000, 0x02000800, 0x0010719d,
+ 0x59300407, 0x82000580, 0x00000003, 0x04020799,
+ 0x59300203, 0x82000580, 0x0000000d, 0x04000795,
+ 0x8d3e7d02, 0x04020793, 0x4d340000, 0x5932680a,
+ 0x0201f800, 0x00104b13, 0x5c026800, 0x0401f78d,
+ 0x0201f800, 0x0010a82b, 0x59300004, 0x8400055c,
+ 0x48026004, 0x0201f800, 0x0010719d, 0x59300407,
+ 0x82000580, 0x00000006, 0x0400005a, 0x8d3e7d02,
+ 0x04020058, 0x497a6226, 0x59300203, 0x82000580,
+ 0x0000000d, 0x04000003, 0x4a026226, 0x00000003,
+ 0x0201f800, 0x00109c4d, 0x04020004, 0x8d3e7d00,
+ 0x04000044, 0x0401f038, 0x4d2c0000, 0x4d400000,
+ 0x59325809, 0x0201f800, 0x00109e12, 0x592c0409,
+ 0x8c000512, 0x04000009, 0x4d2c0000, 0x84000512,
+ 0x48025c09, 0x592c080a, 0x40065800, 0x0201f800,
+ 0x001005b3, 0x5c025800, 0x4d400000, 0x42028000,
+ 0x00000005, 0x592c0a09, 0x8c040d0e, 0x04000004,
+ 0x42028000, 0x00000002, 0x0401f005, 0x8c040d12,
+ 0x04000003, 0x42028000, 0x0000000c, 0x0201f800,
+ 0x00104f92, 0x5c028000, 0x0201f800, 0x0010a31e,
+ 0x8d3e7d00, 0x04020004, 0x0201f800, 0x0010c61e,
+ 0x04020004, 0x0201f800, 0x00020401, 0x497a6009,
+ 0x5c028000, 0x5c025800, 0x8d3e7d00, 0x0400000d,
+ 0x59300a26, 0x82040d80, 0x00000003, 0x04020006,
+ 0x4d340000, 0x5932680a, 0x0201f800, 0x00104b13,
+ 0x5c026800, 0x0201f800, 0x00108253, 0x0401f011,
+ 0x0201f800, 0x0010c61e, 0x04020006, 0x59300a26,
+ 0x82040d80, 0x00000003, 0x02000800, 0x00109d64,
+ 0x4a026407, 0x00000002, 0x42000800, 0x8000404b,
+ 0x4a026003, 0x00850009, 0x0201f800, 0x00020a9f,
+ 0x5c03e000, 0x02020800, 0x001071b0, 0x82000540,
+ 0x00000001, 0x1c01f000, 0x0201f800, 0x0010719d,
+ 0x0201f800, 0x00100c9b, 0x0401f792, 0x598c000f,
+ 0x81300580, 0x04020004, 0x0201f800, 0x001074d0,
+ 0x0402001d, 0x0201f800, 0x001108df, 0x80c40040,
0x04020006, 0x59300c03, 0x82040580, 0x00000040,
- 0x04000770, 0x0401f782, 0x0201f800, 0x00106d4c,
- 0x04000011, 0x0201f800, 0x0010032e, 0x0401f81b,
- 0x04020004, 0x0201f800, 0x0010712a, 0x0402000a,
- 0x0201f800, 0x00110065, 0x80c40040, 0x040207f3,
- 0x59300c03, 0x82040580, 0x00000040, 0x0400075d,
- 0x0401f76f, 0x59300203, 0x82000c80, 0x0000000e,
- 0x02021800, 0x0010032e, 0x0c01f742, 0x0401f807,
+ 0x04000771, 0x0401f783, 0x0201f800, 0x001070af,
+ 0x04000011, 0x0201f800, 0x0010032f, 0x0401f81b,
+ 0x04020004, 0x0201f800, 0x00107499, 0x0402000a,
+ 0x0201f800, 0x00110766, 0x80c40040, 0x040207f3,
+ 0x59300c03, 0x82040580, 0x00000040, 0x0400075e,
+ 0x0401f770, 0x59300203, 0x82000c80, 0x0000000e,
+ 0x02021800, 0x0010032f, 0x0c01f743, 0x0401f807,
0x42018800, 0x00000001, 0x04000003, 0x42018800,
0x00000000, 0x1c01f000, 0x417a3000, 0x42032000,
0x0000bf32, 0x59900004, 0x81300580, 0x04000009,
@@ -24166,278 +9819,290 @@ static const uint32_t isp_2400_multi_risc_code[] = {
0x0000001f, 0x82040580, 0x00000005, 0x04020004,
0x42000000, 0x00000003, 0x0401f005, 0x42000000,
0x00000001, 0x0401f002, 0x59300203, 0x1c01f000,
- 0x4933c857, 0x0201f800, 0x00106e41, 0x4df00000,
- 0x59300203, 0x82000c80, 0x0000000e, 0x02021800,
- 0x0010032e, 0x0c01f001, 0x00109592, 0x001095af,
- 0x00109596, 0x00109590, 0x00109590, 0x00109590,
- 0x00109590, 0x00109590, 0x00109590, 0x00109590,
- 0x00109590, 0x00109590, 0x00109590, 0x00109590,
- 0x0201f800, 0x0010032e, 0x5c03e000, 0x02000800,
- 0x00106e2e, 0x0401f6ad, 0x5c03e000, 0x02000800,
- 0x00106e2e, 0x4d2c0000, 0x59325809, 0x59300403,
- 0x82000580, 0x00000052, 0x02000800, 0x001010b6,
- 0x0401faff, 0x02000800, 0x0010032e, 0x4a025a07,
- 0x00000005, 0x0201f800, 0x000203ef, 0x0201f800,
- 0x00104cbe, 0x0201f800, 0x00107eb4, 0x5c025800,
- 0x82000540, 0x00000001, 0x1c01f000, 0x598c000f,
- 0x81300580, 0x0402001b, 0x59300004, 0x8c000520,
- 0x04000004, 0x84000520, 0x48026004, 0x0401f01b,
- 0x42001000, 0x0010ce5b, 0x50081000, 0x58080002,
- 0x82000580, 0x00000100, 0x0400000b, 0x5808000b,
- 0x81300580, 0x02020800, 0x0010032e, 0x0201f800,
- 0x001101de, 0x80c40040, 0x02020800, 0x0010032e,
- 0x0401f7ce, 0x0201f800, 0x00107161, 0x0402000d,
- 0x59300004, 0x8c000520, 0x04000004, 0x84000520,
- 0x48026004, 0x0401f7c5, 0x0201f800, 0x001101de,
- 0x80c40040, 0x040007c1, 0x0201f800, 0x0010032e,
+ 0x4933c857, 0x0201f800, 0x001071b0, 0x4df00000,
0x59300203, 0x82000c80, 0x0000000e, 0x02021800,
- 0x0010032e, 0x0c01f7a5, 0x4d340000, 0x4d240000,
- 0x5932481c, 0x5932680a, 0x59300407, 0x4933c857,
- 0x4803c857, 0x82000c80, 0x00000014, 0x02021800,
- 0x0010032e, 0x0c01f804, 0x5c024800, 0x5c026800,
- 0x1c01f000, 0x00109606, 0x00109634, 0x001097ca,
- 0x00110814, 0x001097bd, 0x001097c5, 0x0010afaa,
- 0x00109612, 0x001097b8, 0x00106bab, 0x0010983a,
- 0x00109601, 0x00109601, 0x00109601, 0x00109601,
- 0x00020b9d, 0x0010a0af, 0x0010a0af, 0x0010be3e,
- 0x0010be3e, 0x0201f800, 0x0010032e, 0x0401fbdf,
- 0x02000000, 0x001086a8, 0x1c01f000, 0x0201f800,
- 0x00106e41, 0x0201f800, 0x00106d91, 0x0201f800,
- 0x00106e2e, 0x0201f000, 0x00020b9d, 0x4a026006,
+ 0x0010032f, 0x0c01f001, 0x00109912, 0x0010992c,
+ 0x00109916, 0x00109910, 0x00109910, 0x00109910,
+ 0x00109910, 0x00109910, 0x00109910, 0x00109910,
+ 0x00109910, 0x00109910, 0x00109910, 0x00109910,
+ 0x0201f800, 0x0010032f, 0x5c03e000, 0x02000800,
+ 0x0010719d, 0x0401f6a8, 0x5c03e000, 0x02000800,
+ 0x0010719d, 0x4d2c0000, 0x0201f800, 0x001011f2,
+ 0x59325809, 0x0401fb30, 0x02000800, 0x0010032f,
+ 0x4a025a07, 0x00000005, 0x0201f800, 0x00020401,
+ 0x0201f800, 0x00104e29, 0x0201f800, 0x00108253,
+ 0x5c025800, 0x82000540, 0x00000001, 0x1c01f000,
+ 0x598c000f, 0x81300580, 0x04020019, 0x59300004,
+ 0x8c000520, 0x04000004, 0x84000520, 0x48026004,
+ 0x0401f019, 0x42001000, 0x0010d471, 0x50081000,
+ 0x58080002, 0x82000580, 0x00000100, 0x04000009,
+ 0x0201f800, 0x001011f2, 0x0201f800, 0x001108df,
+ 0x80c40040, 0x02020800, 0x0010032f, 0x0401f7d3,
+ 0x0201f800, 0x001074d0, 0x0402000d, 0x59300004,
+ 0x8c000520, 0x04000004, 0x84000520, 0x48026004,
+ 0x0401f7ca, 0x0201f800, 0x001108df, 0x80c40040,
+ 0x040007c6, 0x0201f800, 0x0010032f, 0x59300203,
+ 0x82000c80, 0x0000000e, 0x02021800, 0x0010032f,
+ 0x0c01f7aa, 0x4d340000, 0x4d240000, 0x5932481c,
+ 0x5932680a, 0x59300407, 0x4933c857, 0x4803c857,
+ 0x82000c80, 0x00000014, 0x02021800, 0x0010032f,
+ 0x0c01f804, 0x5c024800, 0x5c026800, 0x1c01f000,
+ 0x00109982, 0x001099b0, 0x00109b78, 0x00110f21,
+ 0x00109b61, 0x00109b73, 0x0010b453, 0x0010998e,
+ 0x00109b5c, 0x00106f0b, 0x00109be8, 0x0010997c,
+ 0x0010997c, 0x0010997c, 0x0010997c, 0x00020afe,
+ 0x0010a4ad, 0x0010a4ad, 0x0010c395, 0x0010c395,
+ 0x0201f800, 0x0010032f, 0x0201f800, 0x00109d92,
+ 0x02000000, 0x001089ef, 0x1c01f000, 0x0201f800,
+ 0x001071b0, 0x0201f800, 0x001070fc, 0x0201f800,
+ 0x0010719d, 0x0201f000, 0x00020afe, 0x4a026006,
0x00000001, 0x1c01f000, 0x4d340000, 0x4c5c0000,
0x59300203, 0x82000580, 0x00000011, 0x04020018,
- 0x5932680a, 0x4130b800, 0x0201f800, 0x00020b7b,
+ 0x5932680a, 0x4130b800, 0x0201f800, 0x00020adc,
0x04000012, 0x4a026203, 0x00000001, 0x4a026403,
0x0000001e, 0x585c041a, 0x4802641a, 0x585c021a,
0x4802621a, 0x4936600a, 0x585c001c, 0x4802601c,
0x4a026407, 0x00000001, 0x42000800, 0x80000040,
- 0x0201f800, 0x00020b3e, 0x405e6000, 0x0201f800,
- 0x00020b9d, 0x5c00b800, 0x5c026800, 0x1c01f000,
- 0x42000000, 0x0010cf2e, 0x0201f800, 0x0010bfb3,
- 0x0201f800, 0x0010b824, 0x59300203, 0x82000c80,
- 0x0000000e, 0x02021800, 0x0010032e, 0x4803c857,
- 0x0c01f001, 0x0010964f, 0x0010960f, 0x00109651,
- 0x0010964f, 0x00109651, 0x00109651, 0x00109607,
- 0x0010964f, 0x00109603, 0x0010964f, 0x0010964f,
- 0x0010964f, 0x0010964f, 0x0010964f, 0x0201f800,
- 0x0010032e, 0x83340580, 0x0010e23c, 0x02000000,
- 0x00107eb4, 0x4d2c0000, 0x59340400, 0x82000500,
+ 0x0201f800, 0x00020a9f, 0x405e6000, 0x0201f800,
+ 0x00020afe, 0x5c00b800, 0x5c026800, 0x1c01f000,
+ 0x42000000, 0x0010d549, 0x0201f800, 0x0010c50a,
+ 0x0201f800, 0x0010bd79, 0x59300203, 0x82000c80,
+ 0x0000000e, 0x02021800, 0x0010032f, 0x4803c857,
+ 0x0c01f001, 0x001099cb, 0x0010998b, 0x001099cd,
+ 0x001099cb, 0x001099cd, 0x001099cd, 0x00109983,
+ 0x001099cb, 0x0010997e, 0x001099cb, 0x001099cb,
+ 0x001099cb, 0x001099cb, 0x001099cb, 0x0201f800,
+ 0x0010032f, 0x83340580, 0x0010e85a, 0x02000000,
+ 0x00108253, 0x4d2c0000, 0x59340400, 0x82000500,
0x000000ff, 0x82000c80, 0x0000000c, 0x02021800,
- 0x0010032e, 0x59303403, 0x82180d80, 0x00000051,
+ 0x0010032f, 0x59303403, 0x82180d80, 0x00000051,
0x04000010, 0x82180d80, 0x00000004, 0x04020004,
0x42000000, 0x00000001, 0x0401f006, 0x82180d80,
0x00000000, 0x04020003, 0x42000000, 0x00000001,
0x4803c857, 0x0c01f82d, 0x5c025800, 0x1c01f000,
- 0x42000000, 0x0010cf2a, 0x0201f800, 0x0010bfb3,
- 0x0201f800, 0x00101fb4, 0x59340412, 0x82000500,
+ 0x42000000, 0x0010d545, 0x0201f800, 0x0010c50a,
+ 0x0201f800, 0x0010203c, 0x59340412, 0x82000500,
0x000000ff, 0x0400001c, 0x80000040, 0x48026c12,
- 0x4d300000, 0x0201f800, 0x00107ef8, 0x5c000000,
+ 0x4d300000, 0x0201f800, 0x00108297, 0x5c000000,
0x04000014, 0x4a000407, 0x00000007, 0x4a000006,
0x00000398, 0x49238830, 0x4a038832, 0xffffffff,
0x4926601c, 0x497a6009, 0x4936600a, 0x4a026407,
0x00000001, 0x4a026203, 0x00000001, 0x4a026403,
- 0x00000051, 0x5c025800, 0x0201f000, 0x00106d1c,
+ 0x00000051, 0x5c025800, 0x0201f000, 0x0010707f,
0x40026000, 0x5c025800, 0x42002800, 0x00000001,
- 0x0201f000, 0x0010a3f8, 0x001096a6, 0x00109760,
- 0x001096a8, 0x001096f1, 0x001096a8, 0x0010977d,
- 0x001096a8, 0x001096b2, 0x001096a6, 0x0010977d,
- 0x001096a6, 0x001096c1, 0x0201f800, 0x0010032e,
+ 0x0201f000, 0x0010a7fe, 0x00109a22, 0x00109af1,
+ 0x00109a24, 0x00109a6d, 0x00109a24, 0x00109b0e,
+ 0x00109a24, 0x00109a2e, 0x00109a22, 0x00109b0e,
+ 0x00109a22, 0x00109a3d, 0x0201f800, 0x0010032f,
0x59300403, 0x82000d80, 0x00000016, 0x04000042,
0x82000d80, 0x00000004, 0x0400003f, 0x82000d80,
- 0x00000002, 0x0400003c, 0x0401fb30, 0x0400003a,
- 0x59300403, 0x82000d80, 0x00000022, 0x040000c9,
- 0x82000d80, 0x00000039, 0x040000d3, 0x82000d80,
- 0x00000035, 0x040000d0, 0x82000d80, 0x0000001e,
- 0x0400002f, 0x0401f9de, 0x04000007, 0x0201f800,
- 0x00109f51, 0x04020004, 0x0201f800, 0x00104a50,
+ 0x00000002, 0x0400003c, 0x0401fb64, 0x0400003a,
+ 0x59300403, 0x82000d80, 0x00000022, 0x040000de,
+ 0x82000d80, 0x00000039, 0x040000e8, 0x82000d80,
+ 0x00000035, 0x040000e5, 0x82000d80, 0x0000001e,
+ 0x0400002f, 0x0401fa10, 0x04000007, 0x0201f800,
+ 0x0010a314, 0x04020004, 0x0201f800, 0x00104ba9,
0x0401f025, 0x59300403, 0x82000d80, 0x00000001,
0x04020014, 0x5930081c, 0x58040200, 0x8c000500,
- 0x02000000, 0x0010a3f1, 0x5930080a, 0x58040403,
+ 0x02000000, 0x0010a7f7, 0x5930080a, 0x58040403,
0x82000580, 0x000007fe, 0x04020007, 0x42002800,
- 0x00000001, 0x0201f800, 0x0010a3f8, 0x0201f000,
- 0x00020b9d, 0x0201f800, 0x00104a1c, 0x0400000e,
+ 0x00000001, 0x0201f800, 0x0010a7fe, 0x0201f000,
+ 0x00020afe, 0x0201f800, 0x00104b75, 0x0400000e,
0x59340403, 0x82000480, 0x000007f0, 0x0402100c,
- 0x4d3c0000, 0x417a7800, 0x0201f800, 0x0010ff80,
- 0x5c027800, 0x42000000, 0x0010cf23, 0x0201f800,
- 0x0010bfb3, 0x0201f800, 0x001086a8, 0x0201f000,
- 0x00107eb4, 0x0401f9ae, 0x04000004, 0x0201f800,
- 0x00109f51, 0x040000b1, 0x59300c03, 0x82040580,
- 0x00000016, 0x0400005d, 0x82040580, 0x00000002,
- 0x04020031, 0x59a8021b, 0x8c000502, 0x04020016,
- 0x59a81078, 0x8c08153e, 0x04020013, 0x0201f800,
- 0x001050f7, 0x04020010, 0x0201f800, 0x00105122,
- 0x04020006, 0x42000000, 0x00000001, 0x0201f800,
- 0x001050c8, 0x0401f099, 0x4a035014, 0x00000001,
- 0x4202d800, 0x00000001, 0x0201f800, 0x00105051,
- 0x0401f092, 0x59340412, 0x82000500, 0x000000ff,
- 0x04000015, 0x80000040, 0x48026c12, 0x5932481c,
- 0x497a6205, 0x4d300000, 0x0201f800, 0x00107ef8,
- 0x5c000000, 0x0400000b, 0x49780009, 0x4a000407,
- 0x00000007, 0x4a000006, 0x00000398, 0x4926601c,
- 0x4936600a, 0x4a026407, 0x00000001, 0x0401f02b,
- 0x40026000, 0x59300403, 0x82000d80, 0x00000002,
- 0x04020014, 0x59340403, 0x82000580, 0x000007fe,
- 0x0402000c, 0x59a81078, 0x8c08153e, 0x04020004,
- 0x59a8021b, 0x84000540, 0x4803521b, 0x0201f800,
- 0x0010424d, 0x0201f800, 0x001086a8, 0x0401f010,
- 0x42000000, 0x00000103, 0x0201f800, 0x0010817e,
- 0x0201f800, 0x001086a8, 0x4d3c0000, 0x417a7800,
- 0x0201f800, 0x0010ff80, 0x5c027800, 0x42000000,
- 0x0010cf23, 0x0201f800, 0x0010bfb3, 0x59a81078,
- 0x8c08153e, 0x04020003, 0x0201f800, 0x00101cb7,
- 0x0201f000, 0x00107eb4, 0x42000800, 0x00000003,
- 0x0201f800, 0x001045ea, 0x4a026203, 0x00000001,
- 0x4a026403, 0x00000002, 0x0201f000, 0x00106d1c,
- 0x0401f93f, 0x0402078c, 0x0201f800, 0x00101cb7,
- 0x4d3c0000, 0x417a7800, 0x0201f800, 0x0010ff80,
- 0x5c027800, 0x42000000, 0x0010cf23, 0x0201f800,
- 0x0010bfb3, 0x42003000, 0x00000018, 0x41782800,
- 0x42002000, 0x00000000, 0x4d400000, 0x4d440000,
- 0x59368c03, 0x42028000, 0x00000029, 0x0201f800,
- 0x0010a22a, 0x5c028800, 0x5c028000, 0x0201f000,
- 0x00107eb4, 0x0201f800, 0x00104a50, 0x0401f7c5,
- 0x42000000, 0x0010cf2d, 0x0201f800, 0x0010bfb3,
- 0x42000000, 0x00000105, 0x0201f800, 0x0010817e,
- 0x040007bc, 0x0201f800, 0x001081a1, 0x040207b9,
- 0x1c01f000, 0x59300c03, 0x0201f800, 0x00109c9c,
- 0x02020000, 0x00020b9d, 0x836c0580, 0x00000003,
- 0x04000004, 0x4a026006, 0x00000002, 0x1c01f000,
- 0x59300403, 0x48026417, 0x4a026226, 0x00000001,
- 0x4a026403, 0x00000085, 0x4a026203, 0x00000009,
- 0x4a026407, 0x00000002, 0x42000800, 0x8000004b,
- 0x0201f000, 0x00020b3e, 0x0201f800, 0x001086a8,
- 0x4d3c0000, 0x417a7800, 0x0201f800, 0x0010ff80,
- 0x5c027800, 0x42000000, 0x0010cf23, 0x0201f800,
- 0x0010bfb3, 0x497a6009, 0x4a026407, 0x00000007,
- 0x4a026006, 0x00000398, 0x497a6205, 0x1c01f000,
- 0x42000000, 0x0010cf34, 0x0201f800, 0x0010bfb3,
- 0x0401f678, 0x42000000, 0x0010cf2f, 0x0201f800,
- 0x0010bfb3, 0x0201f800, 0x0010b824, 0x0201f000,
- 0x00107eb4, 0x42000000, 0x0010cf31, 0x0201f800,
- 0x0010bfb3, 0x1c01f000, 0x42000000, 0x0010cf30,
- 0x0201f800, 0x0010bfb3, 0x59300203, 0x82000c80,
- 0x0000000e, 0x02021800, 0x0010032e, 0x4803c857,
- 0x0c01f001, 0x001097e3, 0x0010960f, 0x001097e3,
- 0x001097e3, 0x001097e3, 0x001097e3, 0x001097e3,
- 0x001097e3, 0x001097e3, 0x0010960f, 0x001097e5,
- 0x0010960f, 0x001097ed, 0x001097e3, 0x0201f800,
- 0x0010032e, 0x4a026403, 0x0000008b, 0x4a026203,
- 0x0000000b, 0x42000800, 0x8000404b, 0x0201f000,
- 0x00020b3e, 0x59300a26, 0x0401f8b1, 0x0400000f,
- 0x4d2c0000, 0x59325809, 0x4a025a07, 0x00000006,
- 0x497a5c0a, 0x0201f800, 0x000203ef, 0x59300a26,
- 0x82040d80, 0x00000003, 0x02000800, 0x001049bd,
- 0x5c025800, 0x497a6009, 0x4d3c0000, 0x417a7800,
- 0x0201f800, 0x0010ff80, 0x5c027800, 0x42003000,
- 0x00000011, 0x0201f800, 0x0010b73d, 0x42000000,
- 0x0010cf23, 0x0201f800, 0x0010bfb3, 0x4c5c0000,
- 0x4130b800, 0x0201f800, 0x00107ef8, 0x04000009,
- 0x4936600a, 0x4926601c, 0x4d300000, 0x405e6000,
- 0x0201f800, 0x00107eb4, 0x5c026000, 0x0401f002,
- 0x405e6000, 0x5c00b800, 0x497a6009, 0x4a026407,
- 0x00000001, 0x4a026403, 0x00000001, 0x59240400,
- 0x8c00050a, 0x04020011, 0x4a026407, 0x00000004,
- 0x4a026203, 0x00000007, 0x4a026429, 0x00000001,
- 0x42003000, 0x00000004, 0x4d400000, 0x42028000,
- 0x00000029, 0x41782800, 0x0201f800, 0x0010b18b,
- 0x5c028000, 0x1c01f000, 0x42000800, 0x0000000b,
- 0x0201f800, 0x001045ea, 0x4a026203, 0x00000001,
- 0x0201f000, 0x00106d1c, 0x42000000, 0x0010cf36,
- 0x0201f800, 0x0010bfb3, 0x59300203, 0x82000c80,
- 0x0000000e, 0x02021800, 0x0010032e, 0x4803c857,
- 0x0c01f001, 0x0010986b, 0x00109853, 0x00109857,
- 0x0010986c, 0x00109855, 0x00109853, 0x00109853,
- 0x00109853, 0x00109853, 0x00109853, 0x00109853,
- 0x00109853, 0x00109853, 0x00109853, 0x0201f800,
- 0x0010032e, 0x0201f800, 0x00100c76, 0x4d2c0000,
- 0x59325809, 0x4a025a07, 0x00000006, 0x0201f800,
- 0x000203ef, 0x5c025800, 0x497a6009, 0x4a026226,
- 0x0000000a, 0x4a026403, 0x00000085, 0x4a026203,
+ 0x4d3c0000, 0x417a7800, 0x0201f800, 0x00110684,
+ 0x5c027800, 0x42000000, 0x0010d53e, 0x0201f800,
+ 0x0010c50a, 0x0201f800, 0x001089ef, 0x0201f000,
+ 0x00108253, 0x0401f9e0, 0x04000004, 0x0201f800,
+ 0x0010a314, 0x040000c6, 0x59300c03, 0x82040580,
+ 0x00000016, 0x04000072, 0x82040580, 0x00000002,
+ 0x04020038, 0x59a80221, 0x8c000502, 0x04020019,
+ 0x59a81086, 0x8c08153e, 0x04020016, 0x0201f800,
+ 0x001052aa, 0x04020013, 0x59a80006, 0x8c000506,
+ 0x04020010, 0x0201f800, 0x001052d5, 0x04020006,
+ 0x42000000, 0x00000001, 0x0201f800, 0x0010527b,
+ 0x0401f0ab, 0x4a03501a, 0x00000001, 0x4202d800,
+ 0x00000001, 0x0201f800, 0x00105204, 0x0401f0a4,
+ 0x59340412, 0x82000500, 0x000000ff, 0x04000019,
+ 0x80000040, 0x48026c12, 0x5932481c, 0x59300c26,
+ 0x4c040000, 0x497a6205, 0x4d300000, 0x0201f800,
+ 0x00108297, 0x5c000000, 0x5c000800, 0x0400000c,
+ 0x49780009, 0x4a000407, 0x00000007, 0x4a000006,
+ 0x00000398, 0x4926601c, 0x48066426, 0x4936600a,
+ 0x4a026407, 0x00000001, 0x0401f039, 0x40026000,
+ 0x59300403, 0x82000d80, 0x00000002, 0x0402001d,
+ 0x59340403, 0x82000580, 0x000007fe, 0x04020013,
+ 0x59a81086, 0x8c08153e, 0x04020004, 0x59a80221,
+ 0x84000540, 0x48035221, 0x0201f800, 0x001052aa,
+ 0x040007c5, 0x4a03501d, 0x0000ffff, 0x0201f800,
+ 0x0010a9a6, 0x0201f800, 0x0010434b, 0x0201f800,
+ 0x001089ef, 0x0401f017, 0x42000000, 0x00000103,
+ 0x0201f800, 0x001084dc, 0x02000000, 0x00108253,
+ 0x0201f800, 0x001089ef, 0x4d3c0000, 0x417a7800,
+ 0x0201f800, 0x00110684, 0x5c027800, 0x42000000,
+ 0x0010d53e, 0x0201f800, 0x0010c50a, 0x59300426,
+ 0x82000580, 0x00000021, 0x02000000, 0x0010a97e,
+ 0x59a81086, 0x8c08153e, 0x04020003, 0x0201f800,
+ 0x00101d37, 0x0201f000, 0x00108253, 0x42000800,
+ 0x00000003, 0x0201f800, 0x00104736, 0x4a026203,
+ 0x00000001, 0x4a026403, 0x00000002, 0x0201f000,
+ 0x0010707f, 0x0401f95c, 0x04020777, 0x0201f800,
+ 0x00101d37, 0x4d3c0000, 0x417a7800, 0x0201f800,
+ 0x00110684, 0x5c027800, 0x42000000, 0x0010d53e,
+ 0x0201f800, 0x0010c50a, 0x42003000, 0x00000018,
+ 0x41782800, 0x42002000, 0x00000000, 0x4d400000,
+ 0x4d440000, 0x59368c03, 0x42028000, 0x00000029,
+ 0x0201f800, 0x0010a628, 0x5c028800, 0x5c028000,
+ 0x0201f000, 0x00108253, 0x0201f800, 0x00104ba9,
+ 0x0401f7c0, 0x42000000, 0x0010d548, 0x0201f800,
+ 0x0010c50a, 0x42000000, 0x00000105, 0x0201f800,
+ 0x001084dc, 0x040007b7, 0x0201f800, 0x00108506,
+ 0x040207b4, 0x1c01f000, 0x59300c03, 0x0201f800,
+ 0x0010a04e, 0x02020000, 0x00020afe, 0x836c0580,
+ 0x00000003, 0x04000004, 0x4a026006, 0x00000002,
+ 0x1c01f000, 0x59300403, 0x48026417, 0x4a026226,
+ 0x00000001, 0x4a026403, 0x00000085, 0x4a026203,
0x00000009, 0x4a026407, 0x00000002, 0x42000800,
- 0x8000404b, 0x0201f000, 0x00020b3e, 0x1c01f000,
- 0x0201f800, 0x00106e41, 0x4df00000, 0x0401fce3,
- 0x04020004, 0x0201f800, 0x0010712a, 0x0402000d,
- 0x0201f800, 0x00110065, 0x80c40040, 0x04020005,
- 0x5c03e000, 0x0201f800, 0x00106e2e, 0x0401f7dc,
- 0x0201f800, 0x00106d4c, 0x02020800, 0x0010032e,
- 0x5c03e000, 0x0201f800, 0x00106e2e, 0x59300203,
- 0x82000d80, 0x00000003, 0x02000800, 0x0010032e,
- 0x82000c80, 0x0000000e, 0x02021800, 0x0010032e,
- 0x0c01f7b9, 0x59a8000d, 0x59a8084f, 0x80040400,
- 0x80080480, 0x04021004, 0x82000540, 0x00000001,
- 0x1c01f000, 0x480bc857, 0x80000580, 0x1c01f000,
- 0x0401f807, 0x42018800, 0x00000000, 0x04000003,
- 0x42018800, 0x00000001, 0x1c01f000, 0x4c040000,
- 0x59300809, 0x59a8000c, 0x80040480, 0x04001007,
- 0x59a8000a, 0x80040480, 0x04021004, 0x800409c0,
- 0x5c000800, 0x1c01f000, 0x800409c0, 0x02020800,
- 0x0010032e, 0x4803c856, 0x0401f7fa, 0x4803c856,
- 0x4d300000, 0x0201f800, 0x00020b7b, 0x0400000a,
- 0x0401f832, 0x4d380000, 0x42027000, 0x0000004b,
- 0x0201f800, 0x00020bc1, 0x5c027000, 0x82000540,
- 0x00000001, 0x5c026000, 0x1c01f000, 0x4803c856,
- 0x4d300000, 0x0201f800, 0x00107ef8, 0x0400001e,
- 0x0401f822, 0x4d300000, 0x0201f800, 0x00106e41,
- 0x4df00000, 0x4d3c0000, 0x42027800, 0x00002000,
- 0x0201f800, 0x00110447, 0x0201f800, 0x001104e0,
- 0x0201f800, 0x00110916, 0x5c027800, 0x5c03e000,
- 0x02000800, 0x00106e2e, 0x5c026000, 0x8d3e7d3e,
- 0x0402000b, 0x4d380000, 0x42027000, 0x0000004c,
- 0x0201f800, 0x00020bc1, 0x5c027000, 0x82000540,
- 0x00000001, 0x5c026000, 0x1c01f000, 0x0201f800,
- 0x00020b9d, 0x0401f7fa, 0x592c0408, 0x494a6018,
+ 0x8000004b, 0x0201f000, 0x00020a9f, 0x0201f800,
+ 0x0010c664, 0x04000011, 0x4d400000, 0x4d200000,
+ 0x0201f800, 0x0010203c, 0x42028000, 0x00000001,
+ 0x42001800, 0x00000100, 0x42002800, 0x00000001,
+ 0x42000000, 0x00000001, 0x0201f800, 0x00104fae,
+ 0x5c024000, 0x5c028000, 0x0201f800, 0x001089ef,
+ 0x4d3c0000, 0x417a7800, 0x0201f800, 0x00110684,
+ 0x5c027800, 0x42000000, 0x0010d53e, 0x0201f800,
+ 0x0010c50a, 0x497a6009, 0x4a026407, 0x00000007,
+ 0x4a026006, 0x00000398, 0x497a6205, 0x1c01f000,
+ 0x42000000, 0x0010d54f, 0x0201f800, 0x0010c50a,
+ 0x0401f650, 0x59300403, 0x82000580, 0x00000036,
+ 0x04020007, 0x4a026203, 0x00000001, 0x42000800,
+ 0x80000040, 0x0201f000, 0x00020a9f, 0x42000000,
+ 0x0010d54a, 0x0201f800, 0x0010c50a, 0x0201f800,
+ 0x0010bd79, 0x0201f000, 0x00108253, 0x42000000,
+ 0x0010d54c, 0x0201f800, 0x0010c50a, 0x1c01f000,
+ 0x42000000, 0x0010d54b, 0x0201f800, 0x0010c50a,
+ 0x59300203, 0x82000c80, 0x0000000e, 0x02021800,
+ 0x0010032f, 0x4803c857, 0x0c01f001, 0x00109b91,
+ 0x0010998b, 0x00109b91, 0x00109b91, 0x00109b91,
+ 0x00109b91, 0x00109b91, 0x00109b91, 0x00109b91,
+ 0x0010998b, 0x00109b93, 0x0010998b, 0x00109b9b,
+ 0x00109b91, 0x0201f800, 0x0010032f, 0x4a026403,
+ 0x0000008b, 0x4a026203, 0x0000000b, 0x42000800,
+ 0x8000404b, 0x0201f000, 0x00020a9f, 0x59300a26,
+ 0x0401f8b1, 0x0400000f, 0x4d2c0000, 0x59325809,
+ 0x4a025a07, 0x00000006, 0x497a5c0a, 0x0201f800,
+ 0x00020401, 0x59300a26, 0x82040d80, 0x00000003,
+ 0x02000800, 0x00104b13, 0x5c025800, 0x497a6009,
+ 0x4d3c0000, 0x417a7800, 0x0201f800, 0x00110684,
+ 0x5c027800, 0x42003000, 0x00000011, 0x0201f800,
+ 0x0010bc92, 0x42000000, 0x0010d53e, 0x0201f800,
+ 0x0010c50a, 0x4c5c0000, 0x4130b800, 0x0201f800,
+ 0x00108297, 0x04000009, 0x4936600a, 0x4926601c,
+ 0x4d300000, 0x405e6000, 0x0201f800, 0x00108253,
+ 0x5c026000, 0x0401f002, 0x405e6000, 0x5c00b800,
+ 0x497a6009, 0x4a026407, 0x00000001, 0x4a026403,
+ 0x00000001, 0x59240400, 0x8c00050a, 0x04020011,
+ 0x4a026407, 0x00000004, 0x4a026203, 0x00000007,
+ 0x4a026429, 0x00000001, 0x42003000, 0x00000004,
+ 0x4d400000, 0x42028000, 0x00000029, 0x41782800,
+ 0x0201f800, 0x0010b651, 0x5c028000, 0x1c01f000,
+ 0x42000800, 0x0000000b, 0x0201f800, 0x00104736,
+ 0x4a026203, 0x00000001, 0x0201f000, 0x0010707f,
+ 0x42000000, 0x0010d551, 0x0201f800, 0x0010c50a,
+ 0x59300203, 0x82000c80, 0x0000000e, 0x02021800,
+ 0x0010032f, 0x4803c857, 0x0c01f001, 0x00109c19,
+ 0x00109c01, 0x00109c05, 0x00109c1a, 0x00109c03,
+ 0x00109c01, 0x00109c01, 0x00109c01, 0x00109c01,
+ 0x00109c01, 0x00109c01, 0x00109c01, 0x00109c01,
+ 0x00109c01, 0x0201f800, 0x0010032f, 0x0201f800,
+ 0x00100c9b, 0x4d2c0000, 0x59325809, 0x4a025a07,
+ 0x00000006, 0x0201f800, 0x00020401, 0x5c025800,
+ 0x497a6009, 0x4a026226, 0x0000000a, 0x4a026403,
+ 0x00000085, 0x4a026203, 0x00000009, 0x4a026407,
+ 0x00000002, 0x42000800, 0x8000404b, 0x0201f000,
+ 0x00020a9f, 0x1c01f000, 0x0201f800, 0x001071b0,
+ 0x4df00000, 0x0401fcb5, 0x04020004, 0x0201f800,
+ 0x00107499, 0x0402000d, 0x0201f800, 0x00110766,
+ 0x80c40040, 0x04020005, 0x5c03e000, 0x0201f800,
+ 0x0010719d, 0x0401f7dc, 0x0201f800, 0x001070af,
+ 0x02020800, 0x0010032f, 0x5c03e000, 0x0201f800,
+ 0x0010719d, 0x59300203, 0x82000d80, 0x00000003,
+ 0x02000800, 0x0010032f, 0x82000c80, 0x0000000e,
+ 0x02021800, 0x0010032f, 0x0c01f7b9, 0x59a80013,
+ 0x59a80855, 0x80040400, 0x80080480, 0x04021004,
+ 0x82000540, 0x00000001, 0x1c01f000, 0x480bc857,
+ 0x80000580, 0x1c01f000, 0x0401f807, 0x42018800,
+ 0x00000000, 0x04000003, 0x42018800, 0x00000001,
+ 0x1c01f000, 0x4c040000, 0x59300809, 0x59a8000c,
+ 0x80040480, 0x04001007, 0x59a8000a, 0x80040480,
+ 0x04021004, 0x800409c0, 0x5c000800, 0x1c01f000,
+ 0x800409c0, 0x02020800, 0x0010032f, 0x4803c856,
+ 0x0401f7fa, 0x4803c856, 0x4d300000, 0x0201f800,
+ 0x00020adc, 0x0400000a, 0x0401f832, 0x4d380000,
+ 0x42027000, 0x0000004b, 0x0201f800, 0x00020b22,
+ 0x5c027000, 0x82000540, 0x00000001, 0x5c026000,
+ 0x1c01f000, 0x4803c856, 0x4d300000, 0x0201f800,
+ 0x00108297, 0x0400001e, 0x0401f822, 0x4d300000,
+ 0x0201f800, 0x001071b0, 0x4df00000, 0x4d3c0000,
+ 0x42027800, 0x00002000, 0x0201f800, 0x00110b49,
+ 0x0201f800, 0x00110be2, 0x0201f800, 0x00111028,
+ 0x5c027800, 0x5c03e000, 0x02000800, 0x0010719d,
+ 0x5c026000, 0x8d3e7d3e, 0x0402000b, 0x4d380000,
+ 0x42027000, 0x0000004c, 0x0201f800, 0x00020b22,
+ 0x5c027000, 0x82000540, 0x00000001, 0x5c026000,
+ 0x1c01f000, 0x0201f800, 0x00020afe, 0x0401f7fa,
+ 0x592c0408, 0x497a5809, 0x497a580a, 0x494a6018,
0x494e6019, 0x4936600a, 0x492e6009, 0x4a026407,
0x00000003, 0x800000c2, 0x800008c4, 0x80040400,
- 0x48026006, 0x0201f800, 0x00104a73, 0x4926601c,
+ 0x48026006, 0x0201f800, 0x00104bcc, 0x4926601c,
0x1c01f000, 0x493bc857, 0x4d300000, 0x0201f800,
- 0x00020b7b, 0x0400000d, 0x0401ffec, 0x4d400000,
+ 0x00020adc, 0x0400000d, 0x0401ffea, 0x4d400000,
0x42028000, 0x00000005, 0x0401f80d, 0x5c028000,
- 0x8d3e7d3e, 0x04020007, 0x0201f800, 0x00020bc1,
+ 0x8d3e7d3e, 0x04020007, 0x0201f800, 0x00020b22,
0x82000540, 0x00000001, 0x5c026000, 0x1c01f000,
- 0x0201f800, 0x00020b9d, 0x0401f7fa, 0x4803c856,
- 0x0201f800, 0x00106e41, 0x4df00000, 0x4d3c0000,
+ 0x0201f800, 0x00020afe, 0x0401f7fa, 0x4803c856,
+ 0x0201f800, 0x001071b0, 0x4df00000, 0x4d3c0000,
0x4d440000, 0x59368c03, 0x42027800, 0x00002001,
- 0x0201f800, 0x001103b6, 0x0201f800, 0x00110408,
- 0x0201f800, 0x001104e0, 0x0201f800, 0x00110916,
+ 0x0201f800, 0x00110ab8, 0x0201f800, 0x00110b0a,
+ 0x0201f800, 0x00110be2, 0x0201f800, 0x00111028,
0x5c028800, 0x5c027800, 0x5c03e000, 0x02000000,
- 0x00106e2e, 0x1c01f000, 0x4803c856, 0x4d300000,
- 0x0201f800, 0x00107ef8, 0x04000012, 0x481a601d,
- 0x48ee602a, 0x4936600a, 0x0201f800, 0x00104a73,
+ 0x0010719d, 0x1c01f000, 0x4803c856, 0x4d300000,
+ 0x0201f800, 0x00108297, 0x04000012, 0x481a601d,
+ 0x48ee602a, 0x4936600a, 0x0201f800, 0x00104bcc,
0x4926601c, 0x4a026407, 0x00000001, 0x492e6009,
0x4d380000, 0x42027000, 0x0000001f, 0x0201f800,
- 0x00020bc1, 0x5c027000, 0x82000540, 0x00000001,
+ 0x00020b22, 0x5c027000, 0x82000540, 0x00000001,
0x5c026000, 0x1c01f000, 0x4803c856, 0x4d300000,
- 0x0201f800, 0x00107ef8, 0x04000011, 0x48ee602a,
- 0x4936600a, 0x0201f800, 0x00104a73, 0x4926601c,
+ 0x0201f800, 0x00108297, 0x04000011, 0x48ee602a,
+ 0x4936600a, 0x0201f800, 0x00104bcc, 0x4926601c,
0x4a026407, 0x00000001, 0x492e6009, 0x4d380000,
- 0x42027000, 0x00000055, 0x0201f800, 0x00020bc1,
+ 0x42027000, 0x00000055, 0x0201f800, 0x00020b22,
0x5c027000, 0x82000540, 0x00000001, 0x5c026000,
0x1c01f000, 0x4803c856, 0x4d300000, 0x0201f800,
- 0x00107ef8, 0x04000012, 0x481a601d, 0x48ee602a,
- 0x4936600a, 0x0201f800, 0x00104a73, 0x4926601c,
+ 0x00108297, 0x04000012, 0x481a601d, 0x48ee602a,
+ 0x4936600a, 0x0201f800, 0x00104bcc, 0x4926601c,
0x4a026407, 0x00000001, 0x492e6009, 0x4d380000,
- 0x42027000, 0x0000003d, 0x0201f800, 0x00020bc1,
+ 0x42027000, 0x0000003d, 0x0201f800, 0x00020b22,
0x5c027000, 0x82000540, 0x00000001, 0x5c026000,
0x1c01f000, 0x4803c856, 0x4d300000, 0x0201f800,
- 0x00107ef8, 0x04000015, 0x4926601c, 0x4936600a,
+ 0x00108297, 0x04000015, 0x4926601c, 0x4936600a,
0x492fc857, 0x4933c857, 0x592c0405, 0x8c00051e,
0x04000003, 0x48efc857, 0x48ee602a, 0x4a026407,
0x00000001, 0x492e6009, 0x4d380000, 0x42027000,
- 0x00000000, 0x0201f800, 0x00020bc1, 0x5c027000,
+ 0x00000000, 0x0201f800, 0x00020b22, 0x5c027000,
0x82000540, 0x00000001, 0x5c026000, 0x1c01f000,
- 0x4803c856, 0x4d300000, 0x0201f800, 0x00107ef8,
+ 0x4803c856, 0x4d300000, 0x0201f800, 0x00108297,
0x04000012, 0x48ee602a, 0x481a601d, 0x4936600a,
- 0x0201f800, 0x00104a73, 0x4926601c, 0x4a026407,
+ 0x0201f800, 0x00104bcc, 0x4926601c, 0x4a026407,
0x00000001, 0x492e6009, 0x4d380000, 0x42027000,
- 0x00000044, 0x0201f800, 0x00020bc1, 0x5c027000,
+ 0x00000044, 0x0201f800, 0x00020b22, 0x5c027000,
0x82000540, 0x00000001, 0x5c026000, 0x1c01f000,
- 0x4803c856, 0x4d300000, 0x0201f800, 0x00107ef8,
+ 0x4803c856, 0x4d300000, 0x0201f800, 0x00108297,
0x04000012, 0x481a601d, 0x48ee602a, 0x4936600a,
- 0x0201f800, 0x00104a73, 0x4926601c, 0x4a026407,
+ 0x0201f800, 0x00104bcc, 0x4926601c, 0x4a026407,
0x00000001, 0x492e6009, 0x4d380000, 0x42027000,
- 0x00000049, 0x0201f800, 0x00020bc1, 0x5c027000,
+ 0x00000049, 0x0201f800, 0x00020b22, 0x5c027000,
0x82000540, 0x00000001, 0x5c026000, 0x1c01f000,
- 0x5930000a, 0x80001540, 0x02000800, 0x0010032e,
+ 0x5930000a, 0x80001540, 0x02000800, 0x0010032f,
0x5808040b, 0x4803c856, 0x80000040, 0x04001003,
0x4800140b, 0x04020009, 0x58080010, 0x80000540,
0x04000006, 0x58080203, 0x80000540, 0x04020003,
@@ -24451,7 +10116,7 @@ static const uint32_t isp_2400_multi_risc_code[] = {
0x00000000, 0x1c01f000, 0x4803c856, 0x4c000000,
0x4d2c0000, 0x59300407, 0x82000580, 0x00000004,
0x0400001d, 0x59300009, 0x80025d40, 0x800001c0,
- 0x04000019, 0x0201f800, 0x00109f51, 0x04000014,
+ 0x04000019, 0x0201f800, 0x0010a314, 0x04000014,
0x59300407, 0x82004580, 0x00000010, 0x04000010,
0x82004580, 0x00000011, 0x0400000d, 0x82004580,
0x00000003, 0x0400000c, 0x82004580, 0x00000002,
@@ -24459,31 +10124,31 @@ static const uint32_t isp_2400_multi_risc_code[] = {
0x592c0405, 0x8c00051e, 0x04000003, 0x80000580,
0x0401f003, 0x82000540, 0x00000001, 0x5c025800,
0x5c000000, 0x1c01f000, 0x4803c856, 0x4d300000,
- 0x0201f800, 0x00107ef8, 0x04000014, 0x4926601c,
+ 0x0201f800, 0x00108297, 0x04000014, 0x4926601c,
0x4936600a, 0x48ee602a, 0x4a026407, 0x00000001,
0x492e6009, 0x4d3c0000, 0x417a7800, 0x0201f800,
- 0x0010ff80, 0x5c027800, 0x4d380000, 0x42027000,
- 0x00000028, 0x0201f800, 0x00020bc1, 0x5c027000,
+ 0x00110684, 0x5c027800, 0x4d380000, 0x42027000,
+ 0x00000028, 0x0201f800, 0x00020b22, 0x5c027000,
0x82000540, 0x00000001, 0x5c026000, 0x1c01f000,
0x4803c856, 0x83380580, 0x00000015, 0x0402000e,
- 0x59a8005a, 0x82000580, 0x00000074, 0x0402000a,
- 0x41780800, 0x0201f800, 0x001046e4, 0x4a026203,
+ 0x59a80068, 0x82000580, 0x00000074, 0x0402000a,
+ 0x41780800, 0x0201f800, 0x00104833, 0x4a026203,
0x00000001, 0x4a026403, 0x00000029, 0x0201f000,
- 0x00106d1c, 0x0201f800, 0x001086a8, 0x0201f000,
- 0x00020b9d, 0x4803c856, 0x83380580, 0x00000016,
+ 0x0010707f, 0x0201f800, 0x001089ef, 0x0201f000,
+ 0x00020afe, 0x4803c856, 0x83380580, 0x00000016,
0x04020007, 0x42000800, 0x00000004, 0x0201f800,
- 0x001045ea, 0x0201f000, 0x00108127, 0x83380580,
- 0x00000015, 0x04020013, 0x59a8005a, 0x82000580,
- 0x00000014, 0x0402000f, 0x0201f800, 0x00104752,
- 0x0201f800, 0x00108c3c, 0x0402000a, 0x59340404,
+ 0x00104736, 0x0201f000, 0x00108483, 0x83380580,
+ 0x00000015, 0x04020013, 0x59a80068, 0x82000580,
+ 0x00000014, 0x0402000f, 0x0201f800, 0x001048a1,
+ 0x0201f800, 0x00108fa8, 0x0402000a, 0x59340404,
0x80000540, 0x04000007, 0x42000800, 0x00000006,
- 0x0201f800, 0x001045ea, 0x0201f000, 0x00108127,
- 0x0201f800, 0x001086a8, 0x0201f000, 0x00020b9d,
+ 0x0201f800, 0x00104736, 0x0201f000, 0x00108483,
+ 0x0201f800, 0x001089ef, 0x0201f000, 0x00020afe,
0x4803c856, 0x592c0207, 0x82000580, 0x00000005,
0x04000002, 0x1c01f000, 0x4803c856, 0x592c0209,
0x8400054a, 0x48025a09, 0x1c01f000, 0x59300809,
0x800409c0, 0x04000008, 0x58040205, 0x82000580,
- 0x00000152, 0x04020004, 0x59a8082a, 0x48066006,
+ 0x00000152, 0x04020004, 0x59a80830, 0x48066006,
0x1c01f000, 0x599c0416, 0x800001c0, 0x04000008,
0x82000c80, 0x00000004, 0x04001005, 0x800000c2,
0x800008c4, 0x80040c00, 0x0401f7f5, 0x59300403,
@@ -24492,542 +10157,563 @@ static const uint32_t isp_2400_multi_risc_code[] = {
0x42000800, 0x00000028, 0x0401f7e9, 0x497a6205,
0x497a6009, 0x4a026203, 0x00000001, 0x4a026403,
0x00000050, 0x42000800, 0x80000043, 0x0201f000,
- 0x00020b3e, 0x4933c857, 0x4d340000, 0x5932680a,
+ 0x00020a9f, 0x4933c857, 0x4d340000, 0x5932680a,
0x59340200, 0x8c00050e, 0x04000006, 0x59300407,
0x82000c80, 0x00000014, 0x04021004, 0x0c01f806,
- 0x5c026800, 0x1c01f000, 0x0201f800, 0x00109606,
- 0x0401f7fc, 0x00109606, 0x00109ab5, 0x00109ab9,
- 0x00109abc, 0x0010b2a8, 0x0010b2c5, 0x0010b2c9,
- 0x00109606, 0x00109606, 0x00109606, 0x00109606,
- 0x00109606, 0x00109606, 0x00109606, 0x00109606,
- 0x00109606, 0x00109606, 0x00109606, 0x00109606,
- 0x00109606, 0x4803c856, 0x40000000, 0x40000000,
+ 0x5c026800, 0x1c01f000, 0x0201f800, 0x00109982,
+ 0x0401f7fc, 0x00109982, 0x00109e65, 0x00109e69,
+ 0x00109e6c, 0x0010b798, 0x0010b7b5, 0x0010b7b9,
+ 0x00109982, 0x00109982, 0x00109982, 0x00109982,
+ 0x00109982, 0x00109982, 0x00109982, 0x00109982,
+ 0x00109982, 0x00109982, 0x00109982, 0x00109982,
+ 0x00109982, 0x4803c856, 0x40000000, 0x40000000,
0x1c01f000, 0x40000000, 0x40000000, 0x1c01f000,
0x5930001d, 0x4803c857, 0x59300415, 0x4933c857,
0x4803c857, 0x8c000502, 0x04000005, 0x4803c857,
0x84000540, 0x48026415, 0x1c01f000, 0x42000000,
- 0xd0000000, 0x41300800, 0x0201f800, 0x001008c7,
+ 0xd0000000, 0x41300800, 0x0201f800, 0x001008e8,
0x0401f810, 0x0402000e, 0x59300c15, 0x59300403,
0x82000580, 0x00000040, 0x04000003, 0x84040d40,
- 0x0401f005, 0x59a8002a, 0x82000400, 0x0000000a,
+ 0x0401f005, 0x59a80030, 0x82000400, 0x0000000a,
0x48026205, 0x84040d42, 0x48066415, 0x1c01f000,
0x4933c857, 0x4d340000, 0x5932680a, 0x59340a00,
- 0x8c040d0e, 0x02000800, 0x0010032e, 0x5930001d,
- 0x80000540, 0x04020036, 0x59300403, 0x4803c857,
+ 0x8c040d0e, 0x02000800, 0x0010032f, 0x5930001d,
+ 0x80000540, 0x04020038, 0x59300403, 0x4803c857,
0x82000580, 0x00000040, 0x04000003, 0x8d0e1d0e,
- 0x0402002d, 0x4d1c0000, 0x41323800, 0x0201f800,
- 0x00107ef8, 0x04000026, 0x4932381d, 0x591c0415,
+ 0x0402002f, 0x4d1c0000, 0x41323800, 0x0201f800,
+ 0x00108297, 0x04000028, 0x4932381d, 0x591c0415,
0x84000542, 0x48023c15, 0x4936600a, 0x0201f800,
- 0x00104a73, 0x4926601c, 0x591c0407, 0x82000580,
+ 0x00104bcc, 0x4926601c, 0x591c0407, 0x82000580,
0x00000003, 0x04000006, 0x591c0202, 0x4802641a,
0x591c0402, 0x4802621a, 0x0401f005, 0x591c0202,
- 0x4802621a, 0x591c0402, 0x4802641a, 0x491e6027,
- 0x4a026407, 0x00000001, 0x4a026403, 0x00000035,
- 0x4a026203, 0x00000001, 0x42000800, 0x80000040,
- 0x0201f800, 0x00020b3e, 0x411e6000, 0x5c023800,
- 0x80000580, 0x5c026800, 0x1c01f000, 0x411e6000,
- 0x5c023800, 0x59a8002c, 0x48026205, 0x82000540,
- 0x00000001, 0x0401f7f8, 0x4933c857, 0x4d2c0000,
- 0x4932381d, 0x4a026202, 0x0000ffff, 0x591e5809,
- 0x591c0008, 0x8c00051e, 0x04000005, 0x8400051e,
- 0x48023808, 0x497a580a, 0x0401f019, 0x592c0409,
- 0x8c000518, 0x04000016, 0x84000518, 0x48025c09,
- 0x4d400000, 0x592e8207, 0x4a025a07, 0x00000001,
- 0x0201f800, 0x00109f56, 0x49425a07, 0x5c028000,
- 0x497a580a, 0x592c0409, 0x8c000512, 0x04000008,
- 0x4d2c0000, 0x84000512, 0x48025c09, 0x592e580a,
- 0x0201f800, 0x0010059d, 0x5c025800, 0x59a8002c,
- 0x48026205, 0x591c0215, 0x48026217, 0x82000d80,
- 0x00000001, 0x04000008, 0x4a023a03, 0x00000002,
- 0x82000580, 0x00000005, 0x04000008, 0x497a6016,
- 0x0401f01e, 0x591c0008, 0x84000540, 0x48023808,
- 0x4a023a03, 0x00000004, 0x591c0415, 0x4803c857,
- 0x8400051c, 0x84000554, 0x48023c15, 0x592c0010,
- 0x40001000, 0x591c0817, 0x80040480, 0x040217f0,
- 0x591c0017, 0x82000500, 0xfffffffc, 0x48026016,
- 0x48023817, 0x591c0a15, 0x4807c857, 0x82040d80,
- 0x00000005, 0x04020005, 0x480bc857, 0x4803c857,
- 0x4a023813, 0xffffffff, 0x591c0402, 0x4802641a,
- 0x591c0202, 0x4802621a, 0x591e680a, 0x4936600a,
- 0x4a026407, 0x00000001, 0x4a026403, 0x00000039,
- 0x4a026203, 0x00000001, 0x42000800, 0x80000040,
- 0x0201f800, 0x00020b3e, 0x5c025800, 0x1c01f000,
- 0x4933c857, 0x59300415, 0x8c000514, 0x04000015,
- 0x8c00051c, 0x04020012, 0x59300017, 0x80100480,
- 0x04001006, 0x04000005, 0x59300415, 0x84000514,
- 0x8400055c, 0x0401f009, 0x48126017, 0x48126013,
- 0x40100000, 0x592c1810, 0x800c0480, 0x48026012,
- 0x59300415, 0x84000514, 0x48026415, 0x1c01f000,
- 0x4933c857, 0x8c00051c, 0x04020008, 0x59300013,
- 0x4803c857, 0x48026017, 0x59300415, 0x8400055c,
- 0x4803c857, 0x48026415, 0x1c01f000, 0x0401f807,
- 0x42018800, 0x00000001, 0x04000003, 0x42018800,
- 0x00000000, 0x1c01f000, 0x59300c03, 0x4933c857,
- 0x4807c857, 0x82040480, 0x00000034, 0x04001006,
- 0x82040480, 0x0000003c, 0x04021003, 0x80000580,
- 0x1c01f000, 0x82000540, 0x00000001, 0x0401f7fd,
- 0x41780800, 0x59a81028, 0x42000000, 0x00000032,
- 0x0201f800, 0x00106c9d, 0x800811c0, 0x04020003,
- 0x42001000, 0x00000014, 0x480b502a, 0x59a81029,
- 0x480b5022, 0x41780800, 0x42000000, 0x00000064,
- 0x0201f800, 0x00106c9d, 0x800811c0, 0x04020003,
- 0x42001000, 0x00000014, 0x480b502b, 0x82081400,
- 0x0000000a, 0x480b502c, 0x42000800, 0x00000001,
- 0x0201f800, 0x00106e68, 0x42000000, 0x30000000,
- 0x40080800, 0x0201f800, 0x0002010e, 0x42000800,
- 0x00000003, 0x59a8100f, 0x0201f800, 0x00106e68,
- 0x0201f000, 0x00104996, 0x4a03502a, 0x00000028,
- 0x4a03502b, 0x00000014, 0x4a035022, 0x000007d0,
- 0x42001000, 0x0000001e, 0x480b502c, 0x42000800,
- 0x00000001, 0x0201f800, 0x00106e68, 0x42000000,
- 0x30000000, 0x40080800, 0x0201f800, 0x0002010e,
- 0x42000800, 0x00000003, 0x59a8100f, 0x0201f000,
- 0x00106e68, 0x4933c857, 0x4d2c0000, 0x59300403,
- 0x82000580, 0x0000003e, 0x04020005, 0x59325818,
- 0x812e59c0, 0x02020800, 0x00100594, 0x5c025800,
+ 0x4802621a, 0x591c0402, 0x4802641a, 0x591c0016,
+ 0x48026016, 0x491e6027, 0x4a026407, 0x00000001,
+ 0x4a026403, 0x00000035, 0x4a026203, 0x00000001,
+ 0x42000800, 0x80000040, 0x0201f800, 0x00020a9f,
+ 0x411e6000, 0x5c023800, 0x80000580, 0x5c026800,
+ 0x1c01f000, 0x411e6000, 0x5c023800, 0x59a80032,
+ 0x48026205, 0x82000540, 0x00000001, 0x0401f7f8,
+ 0x4933c857, 0x4d2c0000, 0x4932381d, 0x4a026202,
+ 0x0000ffff, 0x591e5809, 0x591c0008, 0x8c00051e,
+ 0x04000005, 0x8400051e, 0x48023808, 0x497a580a,
+ 0x0401f019, 0x592c0409, 0x8c000518, 0x04000016,
+ 0x84000518, 0x48025c09, 0x4d400000, 0x592e8207,
+ 0x4a025a07, 0x00000001, 0x0201f800, 0x0010a31e,
+ 0x49425a07, 0x5c028000, 0x497a580a, 0x592c0409,
+ 0x8c000512, 0x04000008, 0x4d2c0000, 0x84000512,
+ 0x48025c09, 0x592e580a, 0x0201f800, 0x001005b3,
+ 0x5c025800, 0x59a80032, 0x48026205, 0x591c0215,
+ 0x48026217, 0x82000d80, 0x00000001, 0x04000008,
+ 0x4a023a03, 0x00000002, 0x82000580, 0x00000005,
+ 0x04000008, 0x497a6016, 0x0401f01e, 0x591c0008,
+ 0x84000540, 0x48023808, 0x4a023a03, 0x00000004,
+ 0x591c0415, 0x4803c857, 0x8400051c, 0x84000554,
+ 0x48023c15, 0x592c0010, 0x40001000, 0x591c0817,
+ 0x80040480, 0x040217f0, 0x591c0017, 0x82000500,
+ 0xfffffffc, 0x48026016, 0x48023817, 0x591c0a15,
+ 0x4807c857, 0x82040d80, 0x00000005, 0x04020005,
+ 0x480bc857, 0x4803c857, 0x4a023813, 0xffffffff,
+ 0x591c0402, 0x4802641a, 0x591c0202, 0x4802621a,
+ 0x591e680a, 0x4936600a, 0x4a026407, 0x00000001,
+ 0x4a026403, 0x00000039, 0x4a026203, 0x00000001,
+ 0x42000800, 0x80000040, 0x0201f800, 0x00020a9f,
+ 0x5c025800, 0x1c01f000, 0x4933c857, 0x59300415,
+ 0x8c000514, 0x04000015, 0x8c00051c, 0x04020012,
+ 0x59300017, 0x80100480, 0x04001006, 0x04000005,
+ 0x59300415, 0x84000514, 0x8400055c, 0x0401f009,
+ 0x48126017, 0x48126013, 0x40100000, 0x592c1810,
+ 0x800c0480, 0x48026012, 0x59300415, 0x84000514,
+ 0x48026415, 0x1c01f000, 0x4933c857, 0x8c00051c,
+ 0x04020008, 0x59300013, 0x4803c857, 0x48026017,
+ 0x59300415, 0x8400055c, 0x4803c857, 0x48026415,
+ 0x1c01f000, 0x0401f807, 0x42018800, 0x00000001,
+ 0x04000003, 0x42018800, 0x00000000, 0x1c01f000,
+ 0x59300c03, 0x4933c857, 0x4807c857, 0x82040480,
+ 0x00000034, 0x04001006, 0x82040480, 0x0000003c,
+ 0x04021003, 0x80000580, 0x1c01f000, 0x82000540,
+ 0x00000001, 0x0401f7fd, 0x41780800, 0x59a8102e,
+ 0x42000000, 0x00000032, 0x0201f800, 0x00107000,
+ 0x800811c0, 0x04020003, 0x42001000, 0x00000014,
+ 0x480b5030, 0x59a8102f, 0x480b5028, 0x41780800,
+ 0x42000000, 0x00000064, 0x0201f800, 0x00107000,
+ 0x800811c0, 0x04020003, 0x42001000, 0x00000014,
+ 0x480b5031, 0x82081400, 0x0000000a, 0x480b5032,
+ 0x42000800, 0x00000001, 0x0201f800, 0x001071d7,
+ 0x42000000, 0x30000000, 0x40080800, 0x0201f800,
+ 0x00020113, 0x42000800, 0x00000003, 0x59a81015,
+ 0x0201f800, 0x001071d7, 0x0201f000, 0x00104aec,
+ 0x4a035030, 0x00000028, 0x4a035031, 0x00000014,
+ 0x4a035028, 0x000007d0, 0x42001000, 0x0000001e,
+ 0x480b5032, 0x42000800, 0x00000001, 0x0201f800,
+ 0x001071d7, 0x42000000, 0x30000000, 0x40080800,
+ 0x0201f800, 0x00020113, 0x42000800, 0x00000003,
+ 0x59a81015, 0x0201f000, 0x001071d7, 0x4933c857,
+ 0x4d2c0000, 0x59300403, 0x82000580, 0x0000003e,
+ 0x04020005, 0x59325818, 0x812e59c0, 0x02020800,
+ 0x001005aa, 0x5c025800, 0x1c01f000, 0x4937c857,
+ 0x4d300000, 0x0201f800, 0x00108297, 0x04000012,
+ 0x4926601c, 0x4936600a, 0x4a026407, 0x00000001,
+ 0x492e6009, 0x42000800, 0x00000009, 0x0201f800,
+ 0x00104736, 0x4d380000, 0x42027000, 0x00000033,
+ 0x0201f800, 0x00020b22, 0x5c027000, 0x82000540,
+ 0x00000001, 0x5c026000, 0x1c01f000, 0x4933c857,
+ 0x4d2c0000, 0x4c580000, 0x4d3c0000, 0x59325809,
+ 0x83380580, 0x00000015, 0x04020025, 0x59a8b068,
+ 0x82580c80, 0x00000019, 0x04001003, 0x4200b000,
+ 0x00000018, 0x8058b104, 0x0401faf7, 0x80000580,
+ 0x0401fb07, 0x832cac00, 0x0000000a, 0x83cca400,
+ 0x00000006, 0x0201f800, 0x0010c5dd, 0x4c600000,
+ 0x4200c000, 0x00000001, 0x592c100b, 0x8c081518,
+ 0x04020006, 0x59240005, 0x592c100e, 0x80080580,
+ 0x04020007, 0x4178c000, 0x5930100a, 0x58081403,
+ 0x417a7800, 0x0201f800, 0x00101d69, 0x5c00c000,
+ 0x0201f800, 0x00108483, 0x0401f008, 0x4200b000,
+ 0x00000002, 0x0401faf6, 0x0201f800, 0x001089ef,
+ 0x0201f800, 0x00020afe, 0x5c027800, 0x5c00b000,
+ 0x5c025800, 0x1c01f000, 0x4933c856, 0x42018800,
+ 0x00000000, 0x4a02601c, 0x0010d5ef, 0x4936600a,
+ 0x4a026407, 0x00000001, 0x492e6009, 0x4d380000,
+ 0x42027000, 0x0000004d, 0x0201f800, 0x00020b22,
+ 0x5c027000, 0x82000540, 0x00000001, 0x42018800,
+ 0x00000001, 0x1c01f000, 0x4803c856, 0x4d2c0000,
+ 0x83380580, 0x00000015, 0x0402002c, 0x59a80868,
+ 0x59325809, 0x5930040b, 0x80040580, 0x04020027,
+ 0x4c500000, 0x4c540000, 0x4c580000, 0x83cca400,
+ 0x00000006, 0x4050a800, 0x5930b40b, 0x8258b400,
+ 0x00000003, 0x8058b104, 0x0201f800, 0x0010c607,
+ 0x83cca400, 0x00000006, 0x592cb206, 0x8258b400,
+ 0x00000003, 0x8058b104, 0x832cac00, 0x00000007,
+ 0x0201f800, 0x0010c5dd, 0x592e5801, 0x812e59c0,
+ 0x040207f6, 0x5931d82a, 0x58ef400a, 0x58ee580c,
+ 0x4a025a05, 0x00000103, 0x58ec0008, 0x0801f800,
+ 0x59300402, 0x5c00b000, 0x5c00a800, 0x5c00a000,
+ 0x5c025800, 0x1c01f000, 0x0201f800, 0x001089ef,
+ 0x5c025800, 0x1c01f000, 0x4933c857, 0x82040d80,
+ 0x00000035, 0x04000005, 0x5930141a, 0x0401f858,
+ 0x04000027, 0x0401f006, 0x4d300000, 0x59326027,
+ 0x0401f85e, 0x5c026000, 0x04000020, 0x591c0c07,
+ 0x82040580, 0x00000003, 0x04000004, 0x82040580,
+ 0x00000006, 0x0402001c, 0x591c0c02, 0x5930041a,
+ 0x80040580, 0x04000009, 0x5930021a, 0x80040580,
+ 0x04020015, 0x591c0a02, 0x5930041a, 0x80040580,
+ 0x04020011, 0x0401f009, 0x59300a1a, 0x82040580,
+ 0x0000ffff, 0x04000005, 0x591c0202, 0x59300a1a,
+ 0x80040580, 0x04020008, 0x591c000a, 0x5930080a,
+ 0x80040580, 0x1c01f000, 0x417a3800, 0x82000540,
+ 0x00000001, 0x1c01f000, 0x4803c856, 0x59b800e4,
+ 0x8c000538, 0x02020800, 0x0010032f, 0x42000800,
+ 0x0000ff00, 0x4a0370e4, 0x20000000, 0x59b800e4,
+ 0x80040840, 0x02000800, 0x0010032f, 0x8c00053c,
+ 0x040207f9, 0x4a0370e4, 0x30000000, 0x40000000,
+ 0x40000000, 0x40000000, 0x59b800e4, 0x8c00053c,
+ 0x040207f1, 0x1c01f000, 0x4803c856, 0x4a0370e4,
+ 0x20000000, 0x40000000, 0x59b800e4, 0x8c000538,
+ 0x040207fb, 0x1c01f000, 0x0401f807, 0x42018800,
+ 0x00000001, 0x04020003, 0x42018800, 0x00000000,
+ 0x1c01f000, 0x59300808, 0x8c040d1e, 0x592c0c09,
+ 0x04020002, 0x8c040d18, 0x1c01f000, 0x0201f800,
+ 0x00109c3b, 0x04000008, 0x42000800, 0x0000002c,
+ 0x0201f800, 0x00106fe1, 0x82063c00, 0x00111d44,
+ 0x491fc857, 0x1c01f000, 0x0201f800, 0x0010a6dc,
+ 0x04020007, 0x59301402, 0x0401fff1, 0x04000007,
+ 0x411c0000, 0x81300580, 0x04000003, 0x81780500,
+ 0x0401f002, 0x81300540, 0x1c01f000, 0x4d300000,
+ 0x83440480, 0x000007f0, 0x04001004, 0x0201f800,
+ 0x00104bd5, 0x0401f003, 0x0201f800, 0x00020353,
+ 0x0402000a, 0x4936600a, 0x0201f800, 0x00104bcc,
+ 0x4926601c, 0x0201f800, 0x00110684, 0x80000580,
+ 0x5c026000, 0x1c01f000, 0x82000540, 0x00000001,
+ 0x0401f7fc, 0x4933c857, 0x0201f800, 0x00109c4d,
+ 0x02000800, 0x0010032f, 0x4d2c0000, 0x4d340000,
+ 0x4d440000, 0x4c580000, 0x59325809, 0x5932680a,
+ 0x49425a07, 0x0201f800, 0x00105bbe, 0x592e8c07,
+ 0x592c4208, 0x82200500, 0x0000000f, 0x0c01f806,
+ 0x5c00b000, 0x5c028800, 0x5c026800, 0x5c025800,
+ 0x1c01f000, 0x0010a104, 0x0010a12a, 0x0010a131,
+ 0x0010a135, 0x0010a13e, 0x0010a101, 0x0010a101,
+ 0x0010a101, 0x0010a142, 0x0010a150, 0x0010a150,
+ 0x0010a101, 0x0010a101, 0x0010a101, 0x0010a101,
+ 0x0010a101, 0x4803c857, 0x0201f800, 0x0010032f,
+ 0x814281c0, 0x04020012, 0x41785800, 0x592c0405,
+ 0x8c00051c, 0x04020002, 0x59345c05, 0x442c2800,
+ 0x59340008, 0x48002802, 0x59340009, 0x48002801,
+ 0x59340006, 0x48002804, 0x59340007, 0x48002803,
+ 0x4200b000, 0x0000000b, 0x0401f03d, 0x592c0208,
+ 0x8c00051e, 0x4200b000, 0x00000002, 0x04020038,
+ 0x8204b540, 0x00000000, 0x04000035, 0x44042800,
+ 0x5932680a, 0x59340400, 0x48002801, 0x59340200,
+ 0x82000500, 0x00000001, 0x48002802, 0x4200b000,
+ 0x00000003, 0x0401f02a, 0x814281c0, 0x040207ec,
+ 0x59345c05, 0x442c2800, 0x4200b000, 0x00000001,
+ 0x0401f023, 0x8340b540, 0x00000000, 0x04000020,
+ 0x0401f02a, 0x814281c0, 0x04020028, 0x59340200,
+ 0x44002800, 0x59340001, 0x48002801, 0x4200b000,
+ 0x00000002, 0x0401f016, 0x8340b540, 0x00000000,
+ 0x0402001e, 0x0401f012, 0x8340b540, 0x00000000,
+ 0x0400000f, 0x8c20451c, 0x04020018, 0x0201f800,
+ 0x00104bb7, 0x04000015, 0x8c20450e, 0x04000002,
+ 0x497a600a, 0x4178b000, 0x497a5a07, 0x0401f004,
+ 0x8340b540, 0x00000000, 0x0402000c, 0x592c0405,
+ 0x8400051c, 0x48025c05, 0x592c0208, 0x82000500,
+ 0x00003fff, 0x48025a08, 0x0401f97b, 0x497a6009,
+ 0x0201f000, 0x00020401, 0x592c0208, 0x8c00051e,
+ 0x4200b000, 0x00000002, 0x040207f1, 0x8204b540,
+ 0x00000000, 0x040007ee, 0x44042800, 0x4200b000,
+ 0x00000001, 0x0401f7ea, 0x4937c857, 0x4d300000,
+ 0x0201f800, 0x00108297, 0x04000012, 0x4926601c,
+ 0x4936600a, 0x4a026407, 0x00000001, 0x492e6009,
+ 0x42000800, 0x0000000b, 0x0201f800, 0x00104736,
+ 0x4d380000, 0x42027000, 0x00000043, 0x0201f800,
+ 0x00020b22, 0x5c027000, 0x82000540, 0x00000001,
+ 0x5c026000, 0x1c01f000, 0x4937c857, 0x4d2c0000,
+ 0x4d200000, 0x59340013, 0x80024130, 0x59325809,
+ 0x83380580, 0x00000015, 0x04020028, 0x59a80068,
+ 0x82000580, 0x00000004, 0x04020024, 0x59240005,
+ 0x592c100a, 0x80080580, 0x04020013, 0x4d440000,
+ 0x592e8c07, 0x592c0208, 0x4803c856, 0x82000500,
+ 0x00000080, 0x84000548, 0x4d3c0000, 0x42027800,
+ 0x00001000, 0x8c00050e, 0x04000002, 0x853e7d5c,
+ 0x0201f800, 0x00104b1c, 0x5c027800, 0x5c028800,
+ 0x0401f004, 0x4803c856, 0x0201f800, 0x00104bb7,
+ 0x0201f800, 0x00109c4d, 0x04000017, 0x4d400000,
+ 0x42028000, 0x00000000, 0x41780800, 0x0401ff2a,
+ 0x5c028000, 0x0401f00e, 0x0201f800, 0x00104bb7,
+ 0x040207f4, 0x0201f800, 0x00109c4d, 0x0400000a,
+ 0x4c580000, 0x4200b000, 0x00000002, 0x0401f938,
+ 0x5c00b000, 0x0201f800, 0x001089ef, 0x0201f800,
+ 0x00020afe, 0x5c024000, 0x5c025800, 0x1c01f000,
+ 0x4937c857, 0x4d300000, 0x0201f800, 0x00108297,
+ 0x04000013, 0x4926601c, 0x4936600a, 0x4a026407,
+ 0x00000001, 0x4d3c0000, 0x4d380000, 0x417a7800,
+ 0x0201f800, 0x0010472b, 0x492e6009, 0x42027000,
+ 0x00000004, 0x0201f800, 0x00020b22, 0x5c027000,
+ 0x5c027800, 0x82000540, 0x00000001, 0x5c026000,
0x1c01f000, 0x4937c857, 0x4d300000, 0x0201f800,
- 0x00107ef8, 0x04000012, 0x4926601c, 0x4936600a,
- 0x4a026407, 0x00000001, 0x492e6009, 0x42000800,
- 0x00000009, 0x0201f800, 0x001045ea, 0x4d380000,
- 0x42027000, 0x00000033, 0x0201f800, 0x00020bc1,
+ 0x00108297, 0x04000012, 0x4926601c, 0x4936600a,
+ 0x42000800, 0x00000003, 0x0201f800, 0x00104736,
+ 0x4a026407, 0x00000001, 0x492e6009, 0x4d380000,
+ 0x42027000, 0x00000051, 0x0201f800, 0x00020b22,
0x5c027000, 0x82000540, 0x00000001, 0x5c026000,
- 0x1c01f000, 0x4933c857, 0x4d2c0000, 0x4c580000,
- 0x4d3c0000, 0x59325809, 0x83380580, 0x00000015,
- 0x04020025, 0x59a8b05a, 0x82580c80, 0x00000019,
- 0x04001003, 0x4200b000, 0x00000018, 0x8058b104,
- 0x0401fae6, 0x80000580, 0x0401faf6, 0x832cac00,
- 0x0000000a, 0x83cca400, 0x00000006, 0x0201f800,
- 0x0010c086, 0x4c600000, 0x4200c000, 0x00000001,
- 0x592c100b, 0x8c081518, 0x04020006, 0x59240005,
- 0x592c100e, 0x80080580, 0x04020007, 0x4178c000,
- 0x5930100a, 0x58081403, 0x417a7800, 0x0201f800,
- 0x00101ce3, 0x5c00c000, 0x0201f800, 0x00108127,
- 0x0401f008, 0x4200b000, 0x00000002, 0x0401fae5,
- 0x0201f800, 0x001086a8, 0x0201f800, 0x00020b9d,
- 0x5c027800, 0x5c00b000, 0x5c025800, 0x1c01f000,
- 0x4933c856, 0x42018800, 0x00000000, 0x4a02601c,
- 0x0010cfd1, 0x4936600a, 0x4a026407, 0x00000001,
- 0x492e6009, 0x4d380000, 0x42027000, 0x0000004d,
- 0x0201f800, 0x00020bc1, 0x5c027000, 0x82000540,
- 0x00000001, 0x42018800, 0x00000001, 0x1c01f000,
- 0x4803c856, 0x4d2c0000, 0x83380580, 0x00000015,
- 0x0402002c, 0x59a8085a, 0x59325809, 0x5930040b,
- 0x80040580, 0x04020027, 0x4c500000, 0x4c540000,
- 0x4c580000, 0x83cca400, 0x00000006, 0x4050a800,
- 0x5930b40b, 0x8258b400, 0x00000003, 0x8058b104,
- 0x0201f800, 0x0010c0b0, 0x83cca400, 0x00000006,
- 0x592cb206, 0x8258b400, 0x00000003, 0x8058b104,
- 0x832cac00, 0x00000007, 0x0201f800, 0x0010c086,
- 0x592e5801, 0x812e59c0, 0x040207f6, 0x5931d82a,
- 0x58ef400a, 0x58ee580c, 0x4a025a05, 0x00000103,
- 0x58ec0008, 0x0801f800, 0x59300402, 0x5c00b000,
- 0x5c00a800, 0x5c00a000, 0x5c025800, 0x1c01f000,
- 0x0201f800, 0x001086a8, 0x5c025800, 0x1c01f000,
- 0x4933c857, 0x82040d80, 0x00000035, 0x04000005,
- 0x5930141a, 0x0401f858, 0x04000027, 0x0401f006,
- 0x4d300000, 0x59326027, 0x0401f85e, 0x5c026000,
- 0x04000020, 0x591c0c07, 0x82040580, 0x00000003,
- 0x04000004, 0x82040580, 0x00000006, 0x0402001c,
- 0x591c0c02, 0x5930041a, 0x80040580, 0x04000009,
- 0x5930021a, 0x80040580, 0x04020015, 0x591c0a02,
- 0x5930041a, 0x80040580, 0x04020011, 0x0401f009,
- 0x59300a1a, 0x82040580, 0x0000ffff, 0x04000005,
- 0x591c0202, 0x59300a1a, 0x80040580, 0x04020008,
- 0x591c000a, 0x5930080a, 0x80040580, 0x1c01f000,
- 0x417a3800, 0x82000540, 0x00000001, 0x1c01f000,
- 0x4803c856, 0x59b800e4, 0x8c000538, 0x02020800,
- 0x0010032e, 0x42000800, 0x0000ff00, 0x4a0370e4,
- 0x20000000, 0x59b800e4, 0x80040840, 0x02000800,
- 0x0010032e, 0x8c00053c, 0x040207f9, 0x4a0370e4,
- 0x30000000, 0x40000000, 0x40000000, 0x40000000,
- 0x59b800e4, 0x8c00053c, 0x040207f1, 0x1c01f000,
- 0x4803c856, 0x4a0370e4, 0x20000000, 0x40000000,
- 0x59b800e4, 0x8c000538, 0x040207fb, 0x1c01f000,
- 0x0401f807, 0x42018800, 0x00000001, 0x04020003,
- 0x42018800, 0x00000000, 0x1c01f000, 0x59300808,
- 0x8c040d1e, 0x592c0c09, 0x04020002, 0x8c040d18,
- 0x1c01f000, 0x0201f800, 0x0010988d, 0x04000008,
- 0x42000800, 0x0000002c, 0x0201f800, 0x00106c7e,
- 0x82063c00, 0x00111584, 0x491fc857, 0x1c01f000,
- 0x0201f800, 0x0010a2d8, 0x04020007, 0x59301402,
- 0x0401fff1, 0x04000007, 0x411c0000, 0x81300580,
- 0x04000003, 0x81780500, 0x0401f002, 0x81300540,
- 0x1c01f000, 0x4d300000, 0x83440480, 0x000007f0,
- 0x04001004, 0x0201f800, 0x00104a7c, 0x0401f003,
- 0x0201f800, 0x0002034c, 0x0402000d, 0x42026000,
- 0x0011152c, 0x4936600a, 0x492e6009, 0x0201f800,
- 0x00104a73, 0x4926601c, 0x0201f800, 0x0010ff80,
- 0x80000580, 0x5c026000, 0x1c01f000, 0x82000540,
- 0x00000001, 0x0401f7fc, 0x4933c857, 0x0201f800,
- 0x0010989f, 0x02000800, 0x0010032e, 0x4d2c0000,
- 0x4d340000, 0x4d440000, 0x4c580000, 0x59325809,
- 0x5932680a, 0x49425a07, 0x0201f800, 0x00020864,
- 0x592e8c07, 0x592c4208, 0x82200500, 0x0000000f,
- 0x0c01f806, 0x5c00b000, 0x5c028800, 0x5c026800,
- 0x5c025800, 0x1c01f000, 0x00109d55, 0x00109d77,
- 0x00109d7e, 0x00109d82, 0x00109d8b, 0x00109d52,
- 0x00109d52, 0x00109d52, 0x00109d8f, 0x00109d9b,
- 0x00109d9b, 0x00109d52, 0x00109d52, 0x00109d52,
- 0x00109d52, 0x00109d52, 0x4803c857, 0x0201f800,
- 0x0010032e, 0x814281c0, 0x04020012, 0x41785800,
- 0x592c0405, 0x8c00051c, 0x04020002, 0x59345c05,
- 0x442c2800, 0x59340008, 0x48002802, 0x59340009,
- 0x48002801, 0x59340006, 0x48002804, 0x59340007,
- 0x48002803, 0x4200b000, 0x0000000b, 0x0401f037,
- 0x592c0208, 0x8c00051e, 0x4200b000, 0x00000002,
- 0x04020032, 0x8204b540, 0x00000000, 0x0400002f,
- 0x44042800, 0x5932680a, 0x59340400, 0x48002801,
- 0x4200b000, 0x00000002, 0x0401f028, 0x814281c0,
- 0x040207f0, 0x59345c05, 0x442c2800, 0x4200b000,
- 0x00000001, 0x0401f021, 0x8340b540, 0x00000000,
- 0x0400001e, 0x0401f027, 0x814281c0, 0x04020025,
- 0x59340200, 0x44002800, 0x59340001, 0x48002801,
- 0x4200b000, 0x00000002, 0x0401f014, 0x8340b540,
- 0x00000000, 0x0402001b, 0x0401f010, 0x8340b540,
- 0x00000000, 0x0400000d, 0x0201f800, 0x00104a5e,
- 0x04000014, 0x8c20450e, 0x04000002, 0x497a600a,
- 0x4178b000, 0x497a5a07, 0x0401f004, 0x8340b540,
- 0x00000000, 0x0402000b, 0x592c0405, 0x8400051c,
- 0x48025c05, 0x592c0208, 0x8400051e, 0x48025a08,
- 0x0401f96e, 0x497a6009, 0x0201f000, 0x000203ef,
- 0x592c0208, 0x8c00051e, 0x4200b000, 0x00000002,
- 0x040207f2, 0x8204b540, 0x00000000, 0x040007ef,
- 0x44042800, 0x4200b000, 0x00000001, 0x0401f7eb,
- 0x4937c857, 0x4d300000, 0x0201f800, 0x00107ef8,
- 0x04000012, 0x4926601c, 0x4936600a, 0x4a026407,
- 0x00000001, 0x492e6009, 0x42000800, 0x0000000b,
- 0x0201f800, 0x001045ea, 0x4d380000, 0x42027000,
- 0x00000043, 0x0201f800, 0x00020bc1, 0x5c027000,
- 0x82000540, 0x00000001, 0x5c026000, 0x1c01f000,
- 0x4937c857, 0x4d2c0000, 0x4d200000, 0x59340013,
- 0x80024130, 0x59325809, 0x83380580, 0x00000015,
- 0x04020028, 0x59a8005a, 0x82000580, 0x00000004,
- 0x04020024, 0x59240005, 0x592c100a, 0x80080580,
- 0x04020013, 0x4d440000, 0x592e8c07, 0x592c0208,
- 0x4803c856, 0x82000500, 0x00000080, 0x84000548,
- 0x4d3c0000, 0x42027800, 0x00001000, 0x8c00050e,
- 0x04000002, 0x853e7d5c, 0x0201f800, 0x001049c6,
- 0x5c027800, 0x5c028800, 0x0401f004, 0x4803c856,
- 0x0201f800, 0x00104a5e, 0x0201f800, 0x0010989f,
- 0x04000017, 0x4d400000, 0x42028000, 0x00000000,
- 0x41780800, 0x0401ff31, 0x5c028000, 0x0401f00e,
- 0x0201f800, 0x00104a5e, 0x040207f4, 0x0201f800,
- 0x0010989f, 0x0400000a, 0x4c580000, 0x4200b000,
- 0x00000002, 0x0401f92b, 0x5c00b000, 0x0201f800,
- 0x001086a8, 0x0201f800, 0x00020b9d, 0x5c024000,
- 0x5c025800, 0x1c01f000, 0x4937c857, 0x4d300000,
- 0x0201f800, 0x00107ef8, 0x04000013, 0x4926601c,
- 0x4936600a, 0x4a026407, 0x00000001, 0x4d3c0000,
- 0x4d380000, 0x417a7800, 0x0201f800, 0x001045df,
- 0x492e6009, 0x42027000, 0x00000004, 0x0201f800,
- 0x00020bc1, 0x5c027000, 0x5c027800, 0x82000540,
- 0x00000001, 0x5c026000, 0x1c01f000, 0x4937c857,
- 0x4d300000, 0x0201f800, 0x00107ef8, 0x04000012,
- 0x4926601c, 0x4936600a, 0x42000800, 0x00000003,
- 0x0201f800, 0x001045ea, 0x4a026407, 0x00000001,
- 0x492e6009, 0x4d380000, 0x42027000, 0x00000051,
- 0x0201f800, 0x00020bc1, 0x5c027000, 0x82000540,
- 0x00000001, 0x5c026000, 0x1c01f000, 0x4933c857,
- 0x4c580000, 0x4d240000, 0x4d200000, 0x4d400000,
- 0x4d440000, 0x4d3c0000, 0x5932481c, 0x59240a00,
- 0x8c040d00, 0x040000aa, 0x0201f800, 0x00101fb4,
- 0x59325809, 0x83383580, 0x00000015, 0x04020067,
- 0x42000800, 0x00000004, 0x0201f800, 0x001045ea,
- 0x42000800, 0x00000001, 0x0201f800, 0x001046e4,
- 0x812e59c0, 0x0402004d, 0x59a8005e, 0x80000040,
- 0x4803505e, 0x0201f800, 0x0010c0f4, 0x04000004,
- 0x59240200, 0x8400051a, 0x48024a00, 0x417a8000,
- 0x59cc0000, 0x82000500, 0x00ffffff, 0x59240805,
- 0x4803c857, 0x4807c857, 0x800409c0, 0x0400001d,
- 0x80041580, 0x0400001b, 0x4c000000, 0x42028000,
- 0x0000002a, 0x59240400, 0x8c00050a, 0x04020007,
- 0x42003000, 0x00000002, 0x42028800, 0x0000ffff,
- 0x0201f800, 0x0010b195, 0x417a7800, 0x0201f800,
- 0x0010200c, 0x0201f800, 0x00102087, 0x42028000,
- 0x00000002, 0x59cc0c08, 0x8c040d1e, 0x04020004,
- 0x59240a00, 0x84040d56, 0x48064a00, 0x5c000000,
- 0x48024805, 0x40000800, 0x812000f0, 0x80040540,
- 0x48026813, 0x40040000, 0x83200c80, 0x00000040,
- 0x04021004, 0x49238830, 0x84000570, 0x48038832,
- 0x59240200, 0x82000540, 0x00000206, 0x48024a00,
- 0x59240400, 0x8c00050c, 0x04000005, 0x4a026426,
- 0x00000051, 0x0401f85d, 0x0401f055, 0x42000000,
- 0x00000001, 0x0201f800, 0x00104e36, 0x0201f800,
- 0x00020b9d, 0x0401f04e, 0x592c0009, 0x82000500,
- 0x00ffffff, 0x0402000a, 0x0201f800, 0x00020864,
- 0x59cc0000, 0x82000500, 0x00ffffff, 0x44002800,
- 0x4200b000, 0x00000001, 0x0401f860, 0x0201f800,
- 0x00108127, 0x0401f03e, 0x812e59c0, 0x04020037,
- 0x59340412, 0x800001c0, 0x0400002f, 0x80000040,
- 0x48026c12, 0x59cc0c07, 0x82043500, 0x000000ff,
- 0x481bc857, 0x82180580, 0x00000003, 0x04020019,
- 0x59cc0207, 0x4803c857, 0x82000d00, 0x0000ff00,
- 0x4807c857, 0x82040580, 0x00000d00, 0x04020011,
- 0x59240a00, 0x84040d48, 0x48064a00, 0x42000800,
- 0x0000000b, 0x0201f800, 0x001045ea, 0x4a026407,
- 0x00000001, 0x4a026203, 0x00000001, 0x4a026403,
- 0x00000001, 0x0201f800, 0x00106d1c, 0x0401f018,
- 0x42000800, 0x00000003, 0x0201f800, 0x001045ea,
- 0x4a026202, 0x0000ffff, 0x4a026203, 0x00000001,
- 0x4a026403, 0x00000051, 0x0201f800, 0x00106d1c,
- 0x0401f00b, 0x42002800, 0x00000003, 0x0201f800,
- 0x0010a3f8, 0x0401f006, 0x4200b000, 0x00000002,
- 0x0401f840, 0x0201f800, 0x001086a8, 0x5c027800,
- 0x5c028800, 0x5c028000, 0x5c024000, 0x5c024800,
- 0x5c00b000, 0x1c01f000, 0x4933c857, 0x42028800,
- 0x000007fc, 0x42003000, 0x00fffffc, 0x0201f800,
- 0x00104628, 0x02020800, 0x0010032e, 0x4936600a,
- 0x417a7800, 0x0201f800, 0x001045df, 0x42000800,
- 0x00000003, 0x0201f800, 0x001045ea, 0x497a6c12,
- 0x4a026203, 0x00000001, 0x4a026403, 0x00000002,
- 0x0201f000, 0x00106d1c, 0x492fc857, 0x4c580000,
- 0x4c000000, 0x8058b1c0, 0x0400000b, 0x82580500,
- 0xfffffff0, 0x02020800, 0x0010032e, 0x8058b0d0,
- 0x592c0409, 0x82000500, 0xfffff0ff, 0x80580540,
- 0x48025c09, 0x5c000000, 0x5c00b000, 0x1c01f000,
- 0x492fc857, 0x4c000000, 0x4c040000, 0x800000d8,
- 0x592c0c09, 0x82040d00, 0xffff0fff, 0x80040540,
- 0x48025c09, 0x5c000800, 0x5c000000, 0x1c01f000,
- 0x4933c857, 0x4d2c0000, 0x59325809, 0x592c0208,
- 0x8400055e, 0x48025a08, 0x4c500000, 0x4c540000,
- 0x4c580000, 0x0401ffd9, 0x0201f800, 0x00020864,
- 0x46002800, 0x00000018, 0x80142800, 0x8058b040,
- 0x83cca400, 0x00000007, 0x4014a800, 0x0201f800,
- 0x0010c086, 0x5c00b000, 0x5c00a800, 0x5c00a000,
- 0x5c025800, 0x1c01f000, 0x0401f807, 0x42018800,
- 0x00000001, 0x04000003, 0x42018800, 0x00000000,
- 0x1c01f000, 0x59325809, 0x592c0205, 0x82000580,
- 0x00000152, 0x1c01f000, 0x59300028, 0x80000540,
- 0x02020800, 0x00100aec, 0x1c01f000, 0x59300008,
+ 0x1c01f000, 0x4933c857, 0x4c580000, 0x4d240000,
+ 0x4d200000, 0x4d400000, 0x4d440000, 0x4d3c0000,
+ 0x5932481c, 0x59240a00, 0x8c040d00, 0x040000b1,
+ 0x0201f800, 0x0010203c, 0x59325809, 0x83383580,
+ 0x00000015, 0x0402006a, 0x42000800, 0x00000004,
+ 0x0201f800, 0x00104736, 0x42000800, 0x00000001,
+ 0x0201f800, 0x00104833, 0x812e59c0, 0x04020050,
+ 0x59a8006c, 0x80000040, 0x4803506c, 0x0201f800,
+ 0x0010c65f, 0x04000004, 0x59240200, 0x8400051a,
+ 0x48024a00, 0x417a8000, 0x59cc0000, 0x82000500,
+ 0x00ffffff, 0x59240805, 0x4803c857, 0x4807c857,
+ 0x800409c0, 0x0400001d, 0x80041580, 0x0400001b,
+ 0x4c000000, 0x42028000, 0x0000002a, 0x59240400,
+ 0x8c00050a, 0x04020007, 0x42003000, 0x00000002,
+ 0x42028800, 0x0000ffff, 0x0201f800, 0x0010b65b,
+ 0x417a7800, 0x0201f800, 0x00102094, 0x0201f800,
+ 0x00102119, 0x42028000, 0x00000002, 0x59cc0c08,
+ 0x8c040d1e, 0x04020004, 0x59240a00, 0x84040d56,
+ 0x48064a00, 0x5c000000, 0x48024805, 0x40000800,
+ 0x812000f0, 0x80040540, 0x48026813, 0x40040000,
+ 0x83200c80, 0x00000040, 0x04021004, 0x49238830,
+ 0x84000570, 0x48038832, 0x59240200, 0x82000540,
+ 0x00000206, 0x48024a00, 0x59240400, 0x8c00050c,
+ 0x04000005, 0x4a026426, 0x00000051, 0x0401f864,
+ 0x0401f05c, 0x42000000, 0x00000001, 0x41781800,
+ 0x0201f800, 0x00104fae, 0x0201f800, 0x0010a938,
+ 0x0201f800, 0x00020afe, 0x0401f052, 0x592c0009,
+ 0x82000500, 0x00ffffff, 0x0402000a, 0x0201f800,
+ 0x00105bbe, 0x59cc0000, 0x82000500, 0x00ffffff,
+ 0x44002800, 0x4200b000, 0x00000001, 0x0401f86a,
+ 0x0201f800, 0x00108483, 0x0401f042, 0x812e59c0,
+ 0x0402003b, 0x59340412, 0x800001c0, 0x04000033,
+ 0x80000040, 0x48026c12, 0x59cc0c07, 0x82043500,
+ 0x000000ff, 0x481bc857, 0x82180580, 0x00000003,
+ 0x0402001d, 0x59cc0207, 0x4803c857, 0x82000d00,
+ 0x0000ff00, 0x4807c857, 0x82040580, 0x00000d00,
+ 0x04020015, 0x59240805, 0x82040d00, 0x00ffffff,
+ 0x04000011, 0x59240a00, 0x84040d48, 0x48064a00,
+ 0x42000800, 0x0000000b, 0x0201f800, 0x00104736,
+ 0x4a026407, 0x00000001, 0x4a026203, 0x00000001,
+ 0x4a026403, 0x00000001, 0x0201f800, 0x0010707f,
+ 0x0401f018, 0x42000800, 0x00000003, 0x0201f800,
+ 0x00104736, 0x4a026202, 0x0000ffff, 0x4a026203,
+ 0x00000001, 0x4a026403, 0x00000051, 0x0201f800,
+ 0x0010707f, 0x0401f00b, 0x42002800, 0x00000003,
+ 0x0201f800, 0x0010a7fe, 0x0401f006, 0x4200b000,
+ 0x00000002, 0x0401f846, 0x0201f800, 0x001089ef,
+ 0x5c027800, 0x5c028800, 0x5c028000, 0x5c024000,
+ 0x5c024800, 0x5c00b000, 0x1c01f000, 0x4933c857,
+ 0x42028800, 0x000007fc, 0x42003000, 0x00fffffc,
+ 0x0201f800, 0x00104774, 0x02020800, 0x0010032f,
+ 0x4936600a, 0x417a7800, 0x0201f800, 0x0010472b,
+ 0x42000800, 0x00000003, 0x0201f800, 0x00104736,
+ 0x497a6c12, 0x59300426, 0x82000580, 0x00000021,
+ 0x04020003, 0x599c0208, 0x48026c12, 0x4a026203,
+ 0x00000001, 0x4a026403, 0x00000002, 0x0201f000,
+ 0x0010707f, 0x492fc857, 0x4c580000, 0x4c000000,
+ 0x8058b1c0, 0x0400000b, 0x82580500, 0xfffffff0,
+ 0x02020800, 0x0010032f, 0x8058b0d0, 0x592c0409,
+ 0x82000500, 0xfffff0ff, 0x80580540, 0x48025c09,
+ 0x5c000000, 0x5c00b000, 0x1c01f000, 0x492fc857,
+ 0x4c000000, 0x4c040000, 0x800000d8, 0x592c0c09,
+ 0x82040d00, 0xffff0fff, 0x80040540, 0x48025c09,
+ 0x5c000800, 0x5c000000, 0x1c01f000, 0x4933c857,
+ 0x4d2c0000, 0x59325809, 0x592c0208, 0x8400055e,
+ 0x48025a08, 0x4c500000, 0x4c540000, 0x4c580000,
+ 0x0401ffd9, 0x0201f800, 0x00105bbe, 0x46002800,
+ 0x00000018, 0x80142800, 0x8058b040, 0x83cca400,
+ 0x00000007, 0x4014a800, 0x0201f800, 0x0010c5dd,
+ 0x5c00b000, 0x5c00a800, 0x5c00a000, 0x5c025800,
+ 0x1c01f000, 0x0401f807, 0x42018800, 0x00000001,
+ 0x04000003, 0x42018800, 0x00000000, 0x1c01f000,
+ 0x59325809, 0x592c0205, 0x82000580, 0x00000152,
+ 0x1c01f000, 0x59325809, 0x592c0208, 0x8400055c,
+ 0x48025a08, 0x1c01f000, 0x59300028, 0x80000540,
+ 0x02020800, 0x00100b11, 0x1c01f000, 0x59300008,
0x82000500, 0x04000800, 0x82000580, 0x04000800,
0x04020003, 0x59300220, 0x48025c10, 0x1c01f000,
0x4d2c0000, 0x59325809, 0x59300203, 0x4933c857,
0x492fc857, 0x493bc857, 0x4803c857, 0x82003480,
- 0x0000000e, 0x02021800, 0x0010032e, 0x0c01f803,
- 0x5c025800, 0x1c01f000, 0x00109f80, 0x00109f8b,
- 0x00109fc9, 0x00109f80, 0x00109f80, 0x00109f80,
- 0x00109f80, 0x00109f80, 0x00109f82, 0x00109f80,
- 0x00109f80, 0x00109f80, 0x00109f80, 0x00109f80,
- 0x0201f800, 0x0010032e, 0x83383480, 0x00000058,
- 0x02021800, 0x0010032e, 0x493a6403, 0x4a026203,
- 0x00000001, 0x0201f000, 0x00106d1c, 0x83380580,
+ 0x0000000e, 0x02021800, 0x0010032f, 0x0c01f803,
+ 0x5c025800, 0x1c01f000, 0x0010a348, 0x0010a353,
+ 0x0010a391, 0x0010a348, 0x0010a348, 0x0010a348,
+ 0x0010a348, 0x0010a348, 0x0010a34a, 0x0010a348,
+ 0x0010a348, 0x0010a348, 0x0010a348, 0x0010a348,
+ 0x0201f800, 0x0010032f, 0x83383480, 0x00000058,
+ 0x02021800, 0x0010032f, 0x493a6403, 0x4a026203,
+ 0x00000001, 0x0201f000, 0x0010707f, 0x83380580,
0x00000013, 0x04020010, 0x492fc857, 0x592c000d,
0x800001c0, 0x04000006, 0x4a026203, 0x00000002,
- 0x59a8002a, 0x48026006, 0x1c01f000, 0x4a025a07,
- 0x00000000, 0x0201f800, 0x000203ef, 0x0201f000,
- 0x00020b9d, 0x83380580, 0x00000027, 0x0400001b,
+ 0x59a80030, 0x48026006, 0x1c01f000, 0x4a025a07,
+ 0x00000000, 0x0201f800, 0x00020401, 0x0201f000,
+ 0x00020afe, 0x83380580, 0x00000027, 0x0400001b,
0x83380580, 0x00000014, 0x04000012, 0x83380580,
0x00000015, 0x04000005, 0x83380580, 0x00000016,
- 0x02020800, 0x0010032e, 0x0201f800, 0x00107226,
- 0x02020000, 0x00107f37, 0x59300203, 0x82000580,
- 0x00000002, 0x02020800, 0x0010032e, 0x0401f016,
- 0x4937c857, 0x0201f800, 0x00106d91, 0x4a02580f,
+ 0x02020800, 0x0010032f, 0x0201f800, 0x00107595,
+ 0x02020000, 0x001082d6, 0x59300203, 0x82000580,
+ 0x00000002, 0x02020800, 0x0010032f, 0x0401f016,
+ 0x4937c857, 0x0201f800, 0x001070fc, 0x4a02580f,
0x00000011, 0x0401f006, 0x4937c857, 0x0201f800,
- 0x00106d91, 0x4a02580f, 0x00000010, 0x4a025a07,
+ 0x001070fc, 0x4a02580f, 0x00000010, 0x4a025a07,
0x00000031, 0x4a02580e, 0x00000004, 0x0201f800,
- 0x000203ef, 0x0201f800, 0x00104cbe, 0x0201f000,
- 0x00107eb4, 0x59341400, 0x82081d00, 0x000000ff,
+ 0x00020401, 0x0201f800, 0x00104e29, 0x0201f000,
+ 0x00108253, 0x59341400, 0x82081d00, 0x000000ff,
0x59300c03, 0x480bc857, 0x4807c857, 0x82040580,
0x00000053, 0x0400002e, 0x82040580, 0x00000002,
0x04000016, 0x82040580, 0x00000001, 0x04000017,
0x82040580, 0x00000003, 0x0400001c, 0x82040580,
0x00000005, 0x0400001d, 0x82040580, 0x00000033,
0x0400001a, 0x82040580, 0x00000000, 0x0400001b,
- 0x82040580, 0x00000004, 0x02020800, 0x0010032e,
- 0x0401f89f, 0x0401f016, 0x820c0580, 0x00000003,
- 0x04000849, 0x0401f012, 0x820c0580, 0x0000000b,
+ 0x82040580, 0x00000004, 0x02020800, 0x0010032f,
+ 0x0401f8d5, 0x0401f016, 0x820c0580, 0x00000003,
+ 0x0400087f, 0x0401f012, 0x820c0580, 0x0000000b,
0x0402000f, 0x42000800, 0x00000007, 0x0201f800,
- 0x001045ea, 0x0401f00a, 0x820c0580, 0x00000005,
- 0x04000862, 0x0401f006, 0x820c0580, 0x00000009,
- 0x04000887, 0x0401f002, 0x0401f891, 0x4a026403,
- 0x00000052, 0x59a8105a, 0x592c040c, 0x8c000500,
+ 0x00104736, 0x0401f00a, 0x820c0580, 0x00000005,
+ 0x04000898, 0x0401f006, 0x820c0580, 0x00000009,
+ 0x040008bd, 0x0401f002, 0x0401f8c7, 0x4a026403,
+ 0x00000052, 0x59a81068, 0x592c040c, 0x8c000500,
0x04000003, 0x42001000, 0x00000008, 0x592c040c,
0x8c000516, 0x04000003, 0x82081400, 0x00000018,
0x592c000d, 0x497a580e, 0x497a580f, 0x80080c80,
0x04000009, 0x04001005, 0x4a025a07, 0x00000007,
0x40001000, 0x0401f006, 0x4a025a07, 0x00000015,
0x0401f003, 0x4a025a07, 0x00000000, 0x480a580d,
- 0x0201f800, 0x001080a1, 0x04000010, 0x592c1001,
- 0x480a600c, 0x58080800, 0x82080400, 0x00000002,
- 0x592c1012, 0x592c1813, 0x42003000, 0x00000000,
- 0x42002000, 0x00101086, 0x0201f800, 0x0010825e,
- 0x04000002, 0x1c01f000, 0x4a025a07, 0x0000002c,
- 0x497a580d, 0x0201f800, 0x000203ef, 0x0201f000,
- 0x00020b9d, 0x83380580, 0x00000015, 0x0402000b,
- 0x59a80070, 0x8c000502, 0x0402000c, 0x41780800,
- 0x0201f800, 0x001046e4, 0x42000800, 0x00000004,
- 0x0201f000, 0x001045ea, 0x42000800, 0x00000007,
- 0x0201f000, 0x001045ea, 0x0201f800, 0x001050f7,
- 0x42001000, 0x00000010, 0x04020009, 0x59340002,
- 0x82000500, 0x00ff0000, 0x82000580, 0x00ff0000,
- 0x040007eb, 0x42001000, 0x00000008, 0x0201f800,
- 0x00104d1c, 0x040007e6, 0x592c040c, 0x84000540,
- 0x48025c0c, 0x0401f7e9, 0x83380580, 0x00000015,
- 0x0402000f, 0x59a80070, 0x8c000502, 0x04020010,
- 0x0201f800, 0x00104752, 0x4d3c0000, 0x417a7800,
- 0x0201f800, 0x001045df, 0x5c027800, 0x42000800,
- 0x00000006, 0x0201f000, 0x001045ea, 0x42000800,
- 0x00000004, 0x0201f000, 0x001045ea, 0x0201f800,
- 0x001050f7, 0x42001000, 0x00000010, 0x04020009,
- 0x59340002, 0x82000500, 0x00ff0000, 0x82000580,
- 0x00ff0000, 0x040007e7, 0x42001000, 0x00000008,
- 0x0201f800, 0x00104d1c, 0x040007e2, 0x592c040c,
- 0x84000540, 0x48025c0c, 0x0401f7e9, 0x42000800,
- 0x00000004, 0x0201f000, 0x001045ea, 0x83380580,
- 0x00000015, 0x04020005, 0x0201f800, 0x0010b107,
- 0x02000800, 0x0010491c, 0x1c01f000, 0x83380580,
- 0x00000015, 0x0402001d, 0x4c580000, 0x83cc1400,
- 0x00000008, 0x4200b000, 0x00000002, 0x83341c00,
- 0x00000006, 0x0201f800, 0x00108c57, 0x04020012,
- 0x83cc1400, 0x0000000a, 0x4200b000, 0x00000002,
- 0x83341c00, 0x00000008, 0x0201f800, 0x00108c57,
- 0x04020009, 0x59342200, 0x59cc1007, 0x800811c0,
- 0x04000003, 0x480a6801, 0x84102542, 0x8410251a,
- 0x48126a00, 0x5c00b000, 0x1c01f000, 0x42000000,
- 0x0010cf3b, 0x0201f800, 0x0010bfb3, 0x0201f800,
- 0x00106e41, 0x59300203, 0x4933c857, 0x4803c857,
- 0x82000c80, 0x0000000e, 0x02021800, 0x0010032e,
- 0x0c01f803, 0x0201f000, 0x00106e2e, 0x0010a0cf,
- 0x0010a0de, 0x0010a0d0, 0x0010a0cd, 0x0010a0cd,
- 0x0010a0cd, 0x0010a0cd, 0x0010a0cd, 0x0010a0cd,
- 0x0010a0cd, 0x0010a0cd, 0x0010a0cd, 0x0010a0cd,
- 0x0010a0cd, 0x0201f800, 0x0010032e, 0x1c01f000,
- 0x59300403, 0x82000580, 0x00000052, 0x02000000,
- 0x0010960f, 0x0201f800, 0x00104cbe, 0x59325809,
- 0x4a025a07, 0x00000006, 0x0201f800, 0x000203ef,
- 0x0201f000, 0x00107eb4, 0x59301804, 0x840c0520,
- 0x48026004, 0x598c000f, 0x81300580, 0x04020010,
- 0x8c0c1d20, 0x04020010, 0x42001000, 0x0010ce5b,
- 0x50081000, 0x58080002, 0x82000580, 0x00000100,
- 0x0400000f, 0x5808000b, 0x81300580, 0x02020800,
- 0x0010032e, 0x4978100b, 0x0401f003, 0x8c0c1d20,
- 0x040207dc, 0x0201f800, 0x001101de, 0x80c40040,
- 0x040007d8, 0x0201f800, 0x0010032e, 0x0201f800,
- 0x00107161, 0x040007f8, 0x59300203, 0x82000c80,
- 0x0000000e, 0x02021800, 0x0010032e, 0x0c01f7bc,
- 0x4933c857, 0x4c500000, 0x4c540000, 0x4c580000,
- 0x592c0c08, 0x48065814, 0x59cc0809, 0x48065808,
- 0x59cc0808, 0x4806580c, 0x59a8086f, 0x82040500,
- 0x000003ff, 0x800010c4, 0x8c040d14, 0x04000005,
- 0x59cc0002, 0x82000500, 0x00000003, 0x80081480,
- 0x480a621b, 0x412c0800, 0x0201f800, 0x0010056e,
- 0x02000800, 0x0010032e, 0x492c080a, 0x58040409,
- 0x84000552, 0x84000540, 0x48000c09, 0x82081400,
- 0x00000003, 0x80081104, 0x83cca400, 0x00000006,
- 0x832cac00, 0x00000005, 0x42000800, 0x00000010,
- 0x82080480, 0x00000010, 0x04021003, 0x40080800,
- 0x80000580, 0x4004b000, 0x4c000000, 0x0201f800,
- 0x0010c0b0, 0x5c000000, 0x800001c0, 0x0400000d,
- 0x412c1000, 0x4c000000, 0x0201f800, 0x0010056e,
- 0x02000800, 0x0010032e, 0x492c1001, 0x832cac00,
- 0x00000005, 0x5c000000, 0x40001000, 0x0401f7e9,
- 0x5c00b000, 0x5c00a800, 0x5c00a000, 0x1c01f000,
- 0x4933c857, 0x4d2c0000, 0x4c380000, 0x59325809,
- 0x5930021b, 0x48025a09, 0x59301012, 0x4a026203,
- 0x00000002, 0x592c020b, 0x8c000500, 0x04000004,
- 0x59300016, 0x592c1010, 0x80081480, 0x40080000,
- 0x0401f98a, 0x80001540, 0x04020008, 0x4a025a07,
- 0x00000000, 0x592c000c, 0x82000500, 0x00000c00,
- 0x0400000b, 0x0401f00b, 0x8c08153e, 0x04000006,
- 0x4a025a07, 0x00000007, 0x80081080, 0x80081000,
- 0x0401f003, 0x4a025a07, 0x00000015, 0x480a5808,
- 0x42000000, 0x0010e2e6, 0x50007000, 0x5838000a,
- 0x80000540, 0x04020008, 0x4930700b, 0x4930700a,
- 0x58380002, 0x82000580, 0x00000000, 0x04020809,
- 0x0401f005, 0x82001400, 0x00000000, 0x45301000,
- 0x4930700a, 0x5c007000, 0x5c025800, 0x1c01f000,
- 0x4933c857, 0x592c000a, 0x40001000, 0x48007009,
- 0x82080400, 0x00000005, 0x48007003, 0x592c000e,
- 0x592c100f, 0x48007006, 0x48087007, 0x592c0014,
- 0x592c1209, 0x80080c80, 0x04001002, 0x40001000,
- 0x82081400, 0x00000003, 0x80081104, 0x82080480,
- 0x00000010, 0x04021003, 0x80000580, 0x0401f003,
- 0x42001000, 0x00000010, 0x4800700c, 0x48087004,
- 0x800810c4, 0x48087005, 0x40381000, 0x0201f000,
- 0x00020016, 0x4d2c0000, 0x0201f800, 0x0010056e,
- 0x02000800, 0x0010032e, 0x42000800, 0x0010e2e6,
- 0x452c0800, 0x497a580a, 0x497a580b, 0x497a580c,
- 0x4a025808, 0x0010a1b4, 0x4a025802, 0x00000100,
- 0x4a025801, 0x00000000, 0x5c025800, 0x1c01f000,
- 0x4833c857, 0x4d300000, 0x4d2c0000, 0x4c5c0000,
- 0x4030b800, 0x585c0009, 0x80025d40, 0x04020004,
- 0x585c000b, 0x4c000000, 0x0401f044, 0x585c0002,
- 0x82000580, 0x00000100, 0x04020022, 0x592c0801,
- 0x4c040000, 0x0201f800, 0x00100594, 0x5c000800,
- 0x800409c0, 0x0400001c, 0x4804b809, 0x585c100c,
- 0x800811c0, 0x04020005, 0x40065800, 0x0201f800,
- 0x0010059d, 0x0401f014, 0x82080480, 0x00000010,
- 0x04021003, 0x80000580, 0x0401f003, 0x42001000,
- 0x00000010, 0x4800b80c, 0x4808b804, 0x800810c4,
- 0x4808b805, 0x82040400, 0x00000005, 0x4800b803,
- 0x405c1000, 0x0201f800, 0x00020016, 0x0401f025,
- 0x0401f828, 0x585c000b, 0x80026540, 0x59300000,
- 0x80000d40, 0x04020002, 0x4800b80a, 0x4800b80b,
- 0x497a6000, 0x4c000000, 0x4978b809, 0x59325809,
- 0x4a025a05, 0x00000103, 0x59300402, 0x48025c07,
- 0x592c100c, 0x4c080000, 0x0201f800, 0x000203ef,
- 0x0201f800, 0x001099b4, 0x5c001000, 0x8c081518,
- 0x04000004, 0x0201f800, 0x00109a87, 0x0401f003,
- 0x0201f800, 0x00020b9d, 0x405c7000, 0x5c000000,
- 0x80026540, 0x04000003, 0x59325809, 0x0401ff79,
- 0x5c00b800, 0x5c025800, 0x5c026000, 0x1c01f000,
- 0x483bc857, 0x58380009, 0x40025800, 0x0201f800,
- 0x0010059d, 0x5838000b, 0x80026540, 0x59300009,
- 0x80025d40, 0x4a025a07, 0x00000002, 0x1c01f000,
- 0x4803c857, 0x4933c857, 0x4d1c0000, 0x497a601d,
- 0x41323800, 0x40026000, 0x4d3c0000, 0x42027800,
- 0x00000005, 0x0401f843, 0x5c027800, 0x411e6000,
- 0x4933c857, 0x59300415, 0x84000502, 0x48026415,
- 0x5c023800, 0x1c01f000, 0x481bc857, 0x4933c857,
- 0x4c5c0000, 0x4c600000, 0x4010b800, 0x4014c000,
- 0x0201f800, 0x0010b73d, 0x0201f800, 0x00101fb4,
- 0x59240400, 0x8c00050a, 0x04020008, 0x40602800,
- 0x405c3000, 0x0201f800, 0x0010b195, 0x82000540,
- 0x00000001, 0x0401f002, 0x80000580, 0x5c00c000,
- 0x5c00b800, 0x1c01f000, 0x4803c856, 0x4d300000,
- 0x42026000, 0x00111584, 0x59a8000d, 0x81640580,
- 0x0400001a, 0x59300c07, 0x82040580, 0x00000001,
- 0x0400000d, 0x82040580, 0x00000004, 0x04000006,
- 0x82040580, 0x00000010, 0x02000800, 0x00109578,
- 0x0401f009, 0x59300203, 0x82000d80, 0x00000007,
- 0x04000005, 0x4807c857, 0x0201f800, 0x00109baa,
- 0x04020808, 0x83326400, 0x0000002c, 0x41580000,
- 0x81300480, 0x040017e5, 0x5c026000, 0x1c01f000,
- 0x4933c857, 0x59300403, 0x4803c857, 0x0201f800,
- 0x00106e41, 0x4df00000, 0x59300407, 0x4803c857,
- 0x82000d80, 0x00000002, 0x04000018, 0x82000d80,
- 0x00000001, 0x04000009, 0x82000d80, 0x00000004,
+ 0x4d2c0000, 0x0201f800, 0x00100584, 0x04000044,
+ 0x5c001000, 0x41cc0800, 0x5808040c, 0x8c000516,
+ 0x04020003, 0x83cc0c00, 0x00000006, 0x5808180d,
+ 0x58082012, 0x58082813, 0x48065803, 0x480a5809,
+ 0x480e5805, 0x48125806, 0x48165807, 0x4a025801,
+ 0x00000000, 0x4a025808, 0x001010cd, 0x820c1c00,
+ 0x00000003, 0x800c1904, 0x50040000, 0x9c0001c0,
+ 0x44000800, 0x80040800, 0x800c1840, 0x040207fb,
+ 0x5808040c, 0x8c000500, 0x0400000d, 0x41cc0800,
+ 0x8c000516, 0x04000003, 0x83cc0c00, 0x00000006,
+ 0x46000800, 0x00000001, 0x80040800, 0x46000800,
+ 0x00000900, 0x84000500, 0x4800140c, 0x42007000,
+ 0x00020c51, 0x58380000, 0x82000580, 0x00000000,
+ 0x0402000d, 0x58380807, 0x58380005, 0x80040540,
+ 0x04020009, 0x412c1000, 0x0201f800, 0x00020017,
+ 0x59dc0806, 0x8c040d3e, 0x040007fe, 0x0201f000,
+ 0x0002005e, 0x412c1000, 0x0201f800, 0x00020017,
+ 0x850e1d5c, 0x0201f000, 0x00106771, 0x5c025800,
+ 0x4a025a07, 0x0000002c, 0x497a580d, 0x0201f800,
+ 0x00020401, 0x0201f000, 0x00020afe, 0x83380580,
+ 0x00000015, 0x0402000b, 0x59a8007e, 0x8c000502,
+ 0x0402000c, 0x41780800, 0x0201f800, 0x00104833,
+ 0x42000800, 0x00000004, 0x0201f000, 0x00104736,
+ 0x42000800, 0x00000007, 0x0201f000, 0x00104736,
+ 0x0201f800, 0x001052aa, 0x42001000, 0x00000010,
+ 0x04020009, 0x59340002, 0x82000500, 0x00ff0000,
+ 0x82000580, 0x00ff0000, 0x040007eb, 0x42001000,
+ 0x00000008, 0x0201f800, 0x00104e87, 0x040007e6,
+ 0x592c040c, 0x84000540, 0x48025c0c, 0x0401f7e9,
+ 0x83380580, 0x00000015, 0x0402000f, 0x59a8007e,
+ 0x8c000502, 0x04020010, 0x0201f800, 0x001048a1,
+ 0x4d3c0000, 0x417a7800, 0x0201f800, 0x0010472b,
+ 0x5c027800, 0x42000800, 0x00000006, 0x0201f000,
+ 0x00104736, 0x42000800, 0x00000004, 0x0201f000,
+ 0x00104736, 0x0201f800, 0x001052aa, 0x42001000,
+ 0x00000010, 0x04020009, 0x59340002, 0x82000500,
+ 0x00ff0000, 0x82000580, 0x00ff0000, 0x040007e7,
+ 0x42001000, 0x00000008, 0x0201f800, 0x00104e87,
+ 0x040007e2, 0x592c040c, 0x84000540, 0x48025c0c,
+ 0x0401f7e9, 0x42000800, 0x00000004, 0x0201f000,
+ 0x00104736, 0x83380580, 0x00000015, 0x04020005,
+ 0x0201f800, 0x0010b5c5, 0x02000800, 0x00104a72,
+ 0x1c01f000, 0x83380580, 0x00000015, 0x0402001d,
+ 0x4c580000, 0x83cc1400, 0x00000008, 0x4200b000,
+ 0x00000002, 0x83341c00, 0x00000006, 0x0201f800,
+ 0x00108fc3, 0x04020012, 0x83cc1400, 0x0000000a,
+ 0x4200b000, 0x00000002, 0x83341c00, 0x00000008,
+ 0x0201f800, 0x00108fc3, 0x04020009, 0x59342200,
+ 0x59cc1007, 0x800811c0, 0x04000003, 0x480a6801,
+ 0x84102542, 0x8410251a, 0x48126a00, 0x5c00b000,
+ 0x1c01f000, 0x42000000, 0x0010d556, 0x0201f800,
+ 0x0010c50a, 0x0201f800, 0x001071b0, 0x59300203,
+ 0x4933c857, 0x4803c857, 0x82000c80, 0x0000000e,
+ 0x02021800, 0x0010032f, 0x0c01f803, 0x0201f000,
+ 0x0010719d, 0x0010a4cd, 0x0010a4dc, 0x0010a4ce,
+ 0x0010a4cb, 0x0010a4cb, 0x0010a4cb, 0x0010a4cb,
+ 0x0010a4cb, 0x0010a4cb, 0x0010a4cb, 0x0010a4cb,
+ 0x0010a4cb, 0x0010a4cb, 0x0010a4cb, 0x0201f800,
+ 0x0010032f, 0x1c01f000, 0x59300403, 0x82000580,
+ 0x00000052, 0x02000000, 0x0010998b, 0x0201f800,
+ 0x00104e29, 0x59325809, 0x4a025a07, 0x00000006,
+ 0x0201f800, 0x00020401, 0x0201f000, 0x00108253,
+ 0x59301804, 0x840c0520, 0x48026004, 0x598c000f,
+ 0x81300580, 0x04020010, 0x8c0c1d20, 0x04020010,
+ 0x42001000, 0x0010d471, 0x50081000, 0x58080002,
+ 0x82000580, 0x00000100, 0x0400000f, 0x5808000b,
+ 0x81300580, 0x02020800, 0x0010032f, 0x4978100b,
+ 0x0401f003, 0x8c0c1d20, 0x040207dc, 0x0201f800,
+ 0x001108df, 0x80c40040, 0x040007d8, 0x0201f800,
+ 0x0010032f, 0x0201f800, 0x001074d0, 0x040007f8,
+ 0x59300203, 0x82000c80, 0x0000000e, 0x02021800,
+ 0x0010032f, 0x0c01f7bc, 0x4933c857, 0x4c500000,
+ 0x4c540000, 0x4c580000, 0x592c0c08, 0x48065814,
+ 0x59cc0809, 0x48065808, 0x59cc0808, 0x4806580c,
+ 0x59a8087d, 0x82040500, 0x000003ff, 0x800010c4,
+ 0x8c040d14, 0x04000005, 0x59cc0002, 0x82000500,
+ 0x00000003, 0x80081480, 0x480a621b, 0x412c0800,
+ 0x0201f800, 0x00100584, 0x02000800, 0x0010032f,
+ 0x492c080a, 0x58040409, 0x84000552, 0x84000540,
+ 0x48000c09, 0x82081400, 0x00000003, 0x80081104,
+ 0x83cca400, 0x00000006, 0x832cac00, 0x00000005,
+ 0x42000800, 0x00000010, 0x82080480, 0x00000010,
+ 0x04021003, 0x40080800, 0x80000580, 0x4004b000,
+ 0x4c000000, 0x0201f800, 0x0010c607, 0x5c000000,
+ 0x800001c0, 0x0400000d, 0x412c1000, 0x4c000000,
+ 0x0201f800, 0x00100584, 0x02000800, 0x0010032f,
+ 0x492c1001, 0x832cac00, 0x00000005, 0x5c000000,
+ 0x40001000, 0x0401f7e9, 0x5c00b000, 0x5c00a800,
+ 0x5c00a000, 0x1c01f000, 0x4933c857, 0x4d2c0000,
+ 0x4c380000, 0x59325809, 0x5930021b, 0x48025a09,
+ 0x59301012, 0x4a026203, 0x00000002, 0x592c020b,
+ 0x8c000500, 0x04000004, 0x59300016, 0x592c1010,
+ 0x80081480, 0x40080000, 0x0401f990, 0x80001540,
+ 0x04020008, 0x4a025a07, 0x00000000, 0x592c000c,
+ 0x82000500, 0x00000c00, 0x0400000b, 0x0401f00b,
+ 0x8c08153e, 0x04000006, 0x4a025a07, 0x00000007,
+ 0x80081080, 0x80081000, 0x0401f003, 0x4a025a07,
+ 0x00000015, 0x480a5808, 0x42000000, 0x0010e904,
+ 0x50007000, 0x5838000a, 0x80000540, 0x04020008,
+ 0x4930700b, 0x4930700a, 0x58380002, 0x82000580,
+ 0x00000000, 0x04020809, 0x0401f005, 0x82001400,
+ 0x00000000, 0x45301000, 0x4930700a, 0x5c007000,
+ 0x5c025800, 0x1c01f000, 0x4933c857, 0x592c000a,
+ 0x40001000, 0x48007009, 0x82080400, 0x00000005,
+ 0x48007003, 0x592c000e, 0x592c100f, 0x48007006,
+ 0x48087007, 0x592c0014, 0x592c1209, 0x80080c80,
+ 0x04001002, 0x40001000, 0x82081400, 0x00000003,
+ 0x80081104, 0x82080480, 0x00000010, 0x04021003,
+ 0x80000580, 0x0401f003, 0x42001000, 0x00000010,
+ 0x4800700c, 0x48087004, 0x800810c4, 0x48087005,
+ 0x40381000, 0x0201f000, 0x00020017, 0x4d2c0000,
+ 0x0201f800, 0x00100584, 0x02000800, 0x0010032f,
+ 0x42000800, 0x0010e904, 0x452c0800, 0x497a580a,
+ 0x497a580b, 0x497a580c, 0x4a025808, 0x0010a5b2,
+ 0x4a025802, 0x00000100, 0x4a025801, 0x00000000,
+ 0x5c025800, 0x1c01f000, 0x4833c857, 0x4d300000,
+ 0x4d2c0000, 0x4c5c0000, 0x4030b800, 0x585c0009,
+ 0x80025d40, 0x04020004, 0x585c000b, 0x4c000000,
+ 0x0401f044, 0x585c0002, 0x82000580, 0x00000100,
+ 0x04020022, 0x592c0801, 0x4c040000, 0x0201f800,
+ 0x001005aa, 0x5c000800, 0x800409c0, 0x0400001c,
+ 0x4804b809, 0x585c100c, 0x800811c0, 0x04020005,
+ 0x40065800, 0x0201f800, 0x001005b3, 0x0401f014,
+ 0x82080480, 0x00000010, 0x04021003, 0x80000580,
+ 0x0401f003, 0x42001000, 0x00000010, 0x4800b80c,
+ 0x4808b804, 0x800810c4, 0x4808b805, 0x82040400,
+ 0x00000005, 0x4800b803, 0x405c1000, 0x0201f800,
+ 0x00020017, 0x0401f025, 0x0401f828, 0x585c000b,
+ 0x80026540, 0x59300000, 0x80000d40, 0x04020002,
+ 0x4800b80a, 0x4800b80b, 0x497a6000, 0x4c000000,
+ 0x4978b809, 0x59325809, 0x4a025a05, 0x00000103,
+ 0x59300402, 0x48025c07, 0x592c100c, 0x4c080000,
+ 0x0201f800, 0x00020401, 0x0201f800, 0x00109d64,
+ 0x5c001000, 0x8c081518, 0x04000004, 0x0201f800,
+ 0x00109e37, 0x0401f003, 0x0201f800, 0x00020afe,
+ 0x405c7000, 0x5c000000, 0x80026540, 0x04000003,
+ 0x59325809, 0x0401ff79, 0x5c00b800, 0x5c025800,
+ 0x5c026000, 0x1c01f000, 0x483bc857, 0x58380009,
+ 0x40025800, 0x0201f800, 0x001005b3, 0x5838000b,
+ 0x80026540, 0x59300009, 0x80025d40, 0x4a025a07,
+ 0x00000002, 0x1c01f000, 0x4803c857, 0x4933c857,
+ 0x4d1c0000, 0x497a601d, 0x41323800, 0x40026000,
+ 0x4d3c0000, 0x42027800, 0x00000005, 0x0401f844,
+ 0x5c027800, 0x411e6000, 0x4933c857, 0x59300415,
+ 0x84000502, 0x48026415, 0x5c023800, 0x1c01f000,
+ 0x481bc857, 0x4933c857, 0x4c5c0000, 0x4c600000,
+ 0x4010b800, 0x4014c000, 0x0201f800, 0x0010bc92,
+ 0x0201f800, 0x0010203c, 0x59240400, 0x8c00050a,
+ 0x04020008, 0x40602800, 0x405c3000, 0x0201f800,
+ 0x0010b65b, 0x82000540, 0x00000001, 0x0401f002,
+ 0x80000580, 0x5c00c000, 0x5c00b800, 0x1c01f000,
+ 0x406a7800, 0x4803c856, 0x4d300000, 0x42026000,
+ 0x00111d44, 0x59a80013, 0x81640580, 0x0400001a,
+ 0x59300c07, 0x82040580, 0x00000001, 0x0400000d,
+ 0x82040580, 0x00000004, 0x04000006, 0x82040580,
+ 0x00000010, 0x02000800, 0x001098f8, 0x0401f009,
+ 0x59300203, 0x82000d80, 0x00000007, 0x04000005,
+ 0x4807c857, 0x0201f800, 0x00109f5c, 0x04020808,
+ 0x83326400, 0x0000002c, 0x41580000, 0x81300480,
+ 0x040017e5, 0x5c026000, 0x1c01f000, 0x4933c857,
+ 0x59300403, 0x4803c857, 0x0201f800, 0x001071b0,
+ 0x4df00000, 0x59301407, 0x59300203, 0x4803c857,
+ 0x82080d80, 0x00000002, 0x0400001d, 0x82080d80,
+ 0x00000001, 0x0400000f, 0x82080d80, 0x00000004,
0x04000006, 0x4933c856, 0x5c03e000, 0x02000800,
- 0x00106e2e, 0x0401f04f, 0x59300203, 0x82000d80,
- 0x00000001, 0x04000018, 0x82000d80, 0x00000002,
- 0x04000035, 0x82000d80, 0x00000005, 0x04000032,
- 0x0201f800, 0x0010032e, 0x59300203, 0x82000d80,
+ 0x0010719d, 0x0401f053, 0x82000d80, 0x00000008,
+ 0x0400003d, 0x82000d80, 0x00000007, 0x0400003a,
+ 0x82000d80, 0x00000001, 0x04000017, 0x82000d80,
+ 0x00000002, 0x04000034, 0x82000d80, 0x00000005,
+ 0x04000031, 0x0201f800, 0x0010032f, 0x82000d80,
0x00000009, 0x0400000c, 0x82000d80, 0x0000000b,
0x04000009, 0x82000d80, 0x0000000a, 0x04000026,
0x82000d80, 0x0000000c, 0x04000023, 0x0201f800,
- 0x0010032e, 0x598c000f, 0x81300580, 0x04020004,
- 0x0201f800, 0x00107161, 0x0402001b, 0x59300004,
+ 0x0010032f, 0x598c000f, 0x81300580, 0x04020004,
+ 0x0201f800, 0x001074d0, 0x0402001b, 0x59300004,
0x4803c857, 0x8c000520, 0x04000004, 0x84000520,
- 0x48026004, 0x0401f014, 0x0201f800, 0x001101de,
- 0x80c40040, 0x02020800, 0x0010032e, 0x5c03e000,
- 0x02000800, 0x00106e2e, 0x59300407, 0x82000d80,
- 0x00000002, 0x0400001b, 0x0201f800, 0x00104cbe,
- 0x0201f800, 0x001099e2, 0x02000800, 0x001086a8,
- 0x0401f014, 0x5c03e000, 0x02000800, 0x00106e2e,
+ 0x48026004, 0x0401f014, 0x0201f800, 0x001108df,
+ 0x80c40040, 0x02020800, 0x0010032f, 0x5c03e000,
+ 0x02000800, 0x0010719d, 0x59300407, 0x82000d80,
+ 0x00000002, 0x0400001b, 0x0201f800, 0x00104e29,
+ 0x0201f800, 0x00109d92, 0x02000800, 0x001089ef,
+ 0x0401f014, 0x5c03e000, 0x02000800, 0x0010719d,
0x59300407, 0x82000d80, 0x00000002, 0x0400000d,
- 0x5930081c, 0x58040200, 0x8c000500, 0x04000132,
- 0x0201f800, 0x00104cbe, 0x0201f800, 0x001099e2,
- 0x02000800, 0x001086a8, 0x8d3e7d00, 0x04000005,
- 0x0201f800, 0x0010b827, 0x0201f000, 0x00107eb4,
+ 0x5930081c, 0x58040200, 0x8c000500, 0x04000134,
+ 0x0201f800, 0x00104e29, 0x0201f800, 0x00109d92,
+ 0x02000800, 0x001089ef, 0x8d3e7d00, 0x04000005,
+ 0x0201f800, 0x0010bd7c, 0x0201f000, 0x00108253,
0x4a026226, 0x00000001, 0x4a026403, 0x00000085,
0x4a026203, 0x00000009, 0x4a026407, 0x00000002,
- 0x42000800, 0x8000004b, 0x0201f000, 0x00020b3e,
- 0x83300480, 0x00111500, 0x04001006, 0x41540000,
+ 0x42000800, 0x8000004b, 0x0201f000, 0x00020a9f,
+ 0x83300480, 0x00111cc0, 0x04001006, 0x41540000,
0x81300480, 0x04021003, 0x80000580, 0x1c01f000,
0x81780080, 0x1c01f000, 0x592c720b, 0x8c387500,
0x04020008, 0x59307008, 0x8c387516, 0x04000005,
0x59307009, 0x58387010, 0x59300013, 0x80380480,
- 0x1c01f000, 0x59a8085a, 0x59cc2808, 0x82140500,
+ 0x1c01f000, 0x59a80868, 0x59cc2808, 0x82140500,
0x00000c00, 0x04000004, 0x82040480, 0x00000010,
0x04001018, 0x80001580, 0x8c142d12, 0x04000005,
0x82040480, 0x00000014, 0x04001012, 0x59cc100a,
@@ -25035,1001 +10721,1060 @@ static const uint32_t isp_2400_multi_risc_code[] = {
0x00000018, 0x0400100b, 0x59cc000b, 0x80080400,
0x04001008, 0x04000006, 0x82000400, 0x00000018,
0x80040480, 0x04001003, 0x80000580, 0x1c01f000,
- 0x42000000, 0x0010cf18, 0x0201f800, 0x0010bfb3,
+ 0x42000000, 0x0010d533, 0x0201f800, 0x0010c50a,
0x82000540, 0x00000001, 0x0401f7f9, 0x4933c857,
0x4937c857, 0x4923c857, 0x4927c857, 0x492fc857,
0x48efc857, 0x4d1c0000, 0x4d300000, 0x41323800,
- 0x0201f800, 0x00107ef8, 0x04000021, 0x48ee602a,
+ 0x0201f800, 0x00108297, 0x04000023, 0x48ee602a,
0x4926601c, 0x4936600a, 0x591c0407, 0x82000580,
0x00000003, 0x04000008, 0x591c0202, 0x4803c857,
0x4802641a, 0x591c0402, 0x4802621a, 0x4803c857,
- 0x0401f007, 0x591c0202, 0x4803c857, 0x4802621a,
- 0x591c0402, 0x4802641a, 0x4803c857, 0x491e6027,
- 0x4a026407, 0x00000001, 0x492e6009, 0x4d380000,
- 0x42027000, 0x00000057, 0x0201f800, 0x00020bc1,
- 0x5c027000, 0x82000540, 0x00000001, 0x5c026000,
- 0x5c023800, 0x1c01f000, 0x4933c857, 0x493bc857,
- 0x4937c857, 0x4d2c0000, 0x4c500000, 0x4c540000,
- 0x4c580000, 0x59325809, 0x0201f800, 0x0010989f,
- 0x04000023, 0x83cca400, 0x00000006, 0x832cac00,
- 0x00000007, 0x83380580, 0x00000016, 0x04020009,
- 0x59a8005a, 0x82000580, 0x00000008, 0x04020014,
- 0x492fc857, 0x4200b000, 0x00000002, 0x0401f00b,
- 0x83380580, 0x00000015, 0x0402000d, 0x492fc857,
- 0x59a8005a, 0x82000580, 0x00000018, 0x04020008,
- 0x4200b000, 0x00000006, 0x0201f800, 0x0010c086,
- 0x0201f800, 0x00108127, 0x0401f005, 0x0201f800,
- 0x001086a8, 0x0201f800, 0x00020b9d, 0x5c00b000,
- 0x5c00a800, 0x5c00a000, 0x5c025800, 0x1c01f000,
- 0x4933c857, 0x0201f800, 0x00106e41, 0x4df00000,
- 0x59300203, 0x82000c80, 0x0000000e, 0x02021800,
- 0x0010032e, 0x0c01f001, 0x0010a38e, 0x0010a38c,
- 0x0010a395, 0x0010a3b5, 0x0010a393, 0x0010a38c,
- 0x0010a38c, 0x0010a38c, 0x0010a38c, 0x0010a38c,
- 0x0010a38c, 0x0010a38c, 0x0010a38c, 0x0010a38c,
- 0x0201f800, 0x0010032e, 0x5c03e000, 0x02000800,
- 0x00106e2e, 0x80000580, 0x1c01f000, 0x0201f800,
- 0x00100c76, 0x5c03e000, 0x02000800, 0x00106e2e,
- 0x8d3e7d02, 0x04020017, 0x4d2c0000, 0x59325809,
- 0x4a025a07, 0x00000005, 0x0201f800, 0x000203ef,
- 0x5c025800, 0x497a6009, 0x8d3e7d00, 0x0402000f,
- 0x4a026226, 0x0000000a, 0x4a026403, 0x00000085,
- 0x4a026203, 0x00000009, 0x4a026407, 0x00000002,
- 0x42000800, 0x8000404b, 0x0201f800, 0x00020b3e,
- 0x81780080, 0x1c01f000, 0x0201f800, 0x00107eb4,
- 0x0401f7fc, 0x0201f800, 0x00109552, 0x04020004,
- 0x0201f800, 0x0010712a, 0x04020009, 0x0201f800,
- 0x00110065, 0x80c40040, 0x040007d7, 0x0201f800,
- 0x00106d4c, 0x02020800, 0x0010032e, 0x59300203,
- 0x82000d80, 0x00000003, 0x02000800, 0x0010032e,
- 0x82000c80, 0x0000000e, 0x02021800, 0x0010032e,
- 0x0c01f7b2, 0x4933c857, 0x4d340000, 0x4d240000,
- 0x4d200000, 0x836c0580, 0x00000003, 0x0402001c,
- 0x599c0018, 0x8c000516, 0x04000004, 0x0201f800,
- 0x00103a8f, 0x0401f016, 0x42000800, 0x00000004,
- 0x0201f800, 0x001045ea, 0x59300426, 0x82000580,
- 0x00000021, 0x04000006, 0x59240400, 0x8c00050c,
- 0x04000007, 0x4a026426, 0x00000021, 0x0201f800,
- 0x00109efa, 0x82000540, 0x00000001, 0x5c024000,
- 0x5c024800, 0x5c026800, 0x1c01f000, 0x80000580,
- 0x0401f7fb, 0x4d340000, 0x5932680a, 0x0201f800,
- 0x00104a94, 0x5c026800, 0x0201f000, 0x00020b9d,
- 0x4803c856, 0x4c5c0000, 0x4d200000, 0x4014b800,
- 0x0201f800, 0x00101fb4, 0x59a8005e, 0x80000040,
- 0x4803505e, 0x836c0580, 0x00000002, 0x04020004,
- 0x59240200, 0x8400051a, 0x48024a00, 0x59240200,
- 0x82000500, 0xfffffeef, 0x84000546, 0x48024a00,
- 0x497a4805, 0x4d400000, 0x42028000, 0x00000001,
- 0x405c2800, 0x42000000, 0x00000001, 0x0201f800,
- 0x00104e36, 0x42028000, 0x0000002a, 0x4d3c0000,
- 0x42027800, 0x00000002, 0x0201f800, 0x0010200c,
- 0x5c027800, 0x5c028000, 0x5c024000, 0x5c00b800,
- 0x813261c0, 0x02020000, 0x00107eb4, 0x1c01f000,
- 0x59303009, 0x58181a05, 0x820c1d00, 0x000000ff,
- 0x820c0580, 0x00000048, 0x04000004, 0x820c0580,
- 0x0000006a, 0x04020046, 0x58180409, 0x8c000500,
- 0x04000043, 0x42000000, 0x0010e2e6, 0x50006000,
- 0x41781800, 0x5830200b, 0x41300000, 0x80100580,
- 0x04000006, 0x40101800, 0x580c2000, 0x801021c0,
- 0x040207fa, 0x0401f036, 0x4933c857, 0x59302000,
- 0x497a6000, 0x800c19c0, 0x0402001f, 0x4933c856,
- 0x42007000, 0x00020cf0, 0x58300009, 0x800001c0,
- 0x04000019, 0x49786009, 0x58380001, 0x80300580,
- 0x04020008, 0x4933c856, 0x49787002, 0x4810600b,
- 0x801021c0, 0x0402001e, 0x4978600a, 0x0401f01c,
- 0x4933c856, 0x4810600b, 0x801021c0, 0x04020002,
- 0x4978600a, 0x4c180000, 0x4c300000, 0x0201f800,
- 0x00100657, 0x5c006000, 0x0401fd56, 0x5c003000,
- 0x0401f00f, 0x4933c856, 0x800c19c0, 0x04020008,
- 0x801021c0, 0x04000003, 0x4810600b, 0x0401f008,
- 0x4978600b, 0x4978600a, 0x0401f005, 0x48101800,
- 0x801021c0, 0x04020002, 0x480c600a, 0x58180409,
- 0x84000500, 0x48003409, 0x49783209, 0x1c01f000,
- 0x4933c857, 0x4927c857, 0x59a8021b, 0x82000540,
- 0x00000003, 0x4803521b, 0x4c5c0000, 0x4d400000,
- 0x59ccb800, 0x825cbd00, 0x00ffffff, 0x42028000,
- 0x00000000, 0x0201f800, 0x00101fb4, 0x0201f800,
- 0x00108c0d, 0x485f500f, 0x04000024, 0x4d3c0000,
- 0x42028000, 0x0000002a, 0x59240400, 0x8c00050a,
- 0x04020008, 0x59240200, 0x84000556, 0x48024a00,
- 0x42003000, 0x00000002, 0x0201f800, 0x0010b18b,
- 0x42027800, 0x00000002, 0x0201f800, 0x0010200c,
- 0x42000000, 0x0010cf23, 0x0201f800, 0x0010bfb3,
- 0x59cc0408, 0x8c00051e, 0x04020009, 0x42000800,
- 0x0010cfd1, 0x58040406, 0x8c000500, 0x04020004,
- 0x59a8021b, 0x84000552, 0x4803521b, 0x42028000,
- 0x00000002, 0x5c027800, 0x41780800, 0x0201f800,
- 0x001046e4, 0x59240200, 0x4803c857, 0x4927c857,
- 0x82000540, 0x00000066, 0x48024a00, 0x485e4805,
- 0x812000f0, 0x805c0540, 0x48026813, 0x49238830,
- 0x84000570, 0x48038832, 0x59a8121b, 0x59cc0408,
- 0x8c00051a, 0x04020005, 0x84081514, 0x4a0370e5,
- 0x00000800, 0x0401f004, 0x84081554, 0x4a0370e5,
- 0x00000c00, 0x480b521b, 0x0201f800, 0x00109bb8,
- 0x59a8021b, 0x8400054a, 0x4803521b, 0x49238830,
- 0x845c0570, 0x48038832, 0x42000800, 0x00000004,
- 0x0201f800, 0x001045ea, 0x59a80a1b, 0x84040d50,
- 0x59cc0013, 0x8c00053e, 0x04000003, 0x8c000536,
- 0x04000004, 0x59cc0017, 0x8c000536, 0x04020002,
- 0x84040d10, 0x4807521b, 0x4807541b, 0x42001800,
- 0x0010e2e8, 0x59240400, 0x8c00050c, 0x04000006,
- 0x4a026426, 0x00000021, 0x0201f800, 0x00109efa,
- 0x0401f00b, 0x405c0800, 0x41781000, 0x42000000,
- 0x00000001, 0x42028000, 0x00000000, 0x0201f800,
- 0x00104e36, 0x0201f800, 0x00020b9d, 0x59a8021b,
+ 0x0401f009, 0x591c0016, 0x48026016, 0x591c0202,
+ 0x4803c857, 0x4802621a, 0x591c0402, 0x4802641a,
+ 0x4803c857, 0x491e6027, 0x4a026407, 0x00000001,
+ 0x492e6009, 0x4d380000, 0x42027000, 0x00000057,
+ 0x0201f800, 0x00020b22, 0x5c027000, 0x82000540,
+ 0x00000001, 0x5c026000, 0x5c023800, 0x1c01f000,
+ 0x4933c857, 0x493bc857, 0x4937c857, 0x4d2c0000,
+ 0x4c500000, 0x4c540000, 0x4c580000, 0x59325809,
+ 0x0201f800, 0x00109c4d, 0x04000023, 0x83cca400,
+ 0x00000006, 0x832cac00, 0x00000007, 0x83380580,
+ 0x00000016, 0x04020009, 0x59a80068, 0x82000580,
+ 0x00000008, 0x04020014, 0x492fc857, 0x4200b000,
+ 0x00000002, 0x0401f00b, 0x83380580, 0x00000015,
+ 0x0402000d, 0x492fc857, 0x59a80068, 0x82000580,
+ 0x00000018, 0x04020008, 0x4200b000, 0x00000006,
+ 0x0201f800, 0x0010c5dd, 0x0201f800, 0x00108483,
+ 0x0401f005, 0x0201f800, 0x001089ef, 0x0201f800,
+ 0x00020afe, 0x5c00b000, 0x5c00a800, 0x5c00a000,
+ 0x5c025800, 0x1c01f000, 0x4933c857, 0x0201f800,
+ 0x001071b0, 0x4df00000, 0x59300203, 0x82000c80,
+ 0x0000000e, 0x02021800, 0x0010032f, 0x0c01f001,
+ 0x0010a794, 0x0010a792, 0x0010a79b, 0x0010a7bb,
+ 0x0010a799, 0x0010a792, 0x0010a792, 0x0010a792,
+ 0x0010a792, 0x0010a792, 0x0010a792, 0x0010a792,
+ 0x0010a792, 0x0010a792, 0x0201f800, 0x0010032f,
+ 0x5c03e000, 0x02000800, 0x0010719d, 0x80000580,
+ 0x1c01f000, 0x0201f800, 0x00100c9b, 0x5c03e000,
+ 0x02000800, 0x0010719d, 0x8d3e7d02, 0x04020017,
+ 0x4d2c0000, 0x59325809, 0x4a025a07, 0x00000005,
+ 0x0201f800, 0x00020401, 0x5c025800, 0x497a6009,
+ 0x8d3e7d00, 0x0402000f, 0x4a026226, 0x0000000a,
+ 0x4a026403, 0x00000085, 0x4a026203, 0x00000009,
+ 0x4a026407, 0x00000002, 0x42000800, 0x8000404b,
+ 0x0201f800, 0x00020a9f, 0x81780080, 0x1c01f000,
+ 0x0201f800, 0x00108253, 0x0401f7fc, 0x0201f800,
+ 0x001098d2, 0x04020004, 0x0201f800, 0x00107499,
+ 0x04020009, 0x0201f800, 0x00110766, 0x80c40040,
+ 0x040007d7, 0x0201f800, 0x001070af, 0x02020800,
+ 0x0010032f, 0x59300203, 0x82000d80, 0x00000003,
+ 0x02000800, 0x0010032f, 0x82000c80, 0x0000000e,
+ 0x02021800, 0x0010032f, 0x0c01f7b2, 0x4933c857,
+ 0x4d340000, 0x4d240000, 0x4d200000, 0x836c0580,
+ 0x00000003, 0x0402001c, 0x599c0018, 0x8c000516,
+ 0x04000004, 0x0201f800, 0x00103b2f, 0x0401f016,
+ 0x42000800, 0x00000004, 0x0201f800, 0x00104736,
+ 0x59300426, 0x82000580, 0x00000021, 0x04000006,
+ 0x59240400, 0x8c00050c, 0x04000007, 0x4a026426,
+ 0x00000021, 0x0201f800, 0x0010a2b7, 0x82000540,
+ 0x00000001, 0x5c024000, 0x5c024800, 0x5c026800,
+ 0x1c01f000, 0x80000580, 0x0401f7fb, 0x4d340000,
+ 0x5932680a, 0x0201f800, 0x00104bed, 0x5c026800,
+ 0x0201f000, 0x00020afe, 0x4803c856, 0x4c5c0000,
+ 0x4d200000, 0x4014b800, 0x0201f800, 0x0010203c,
+ 0x59a8006c, 0x80000040, 0x4803506c, 0x836c0580,
+ 0x00000002, 0x04020004, 0x59240200, 0x8400051a,
+ 0x48024a00, 0x59240200, 0x82000500, 0xfffffeef,
+ 0x84000546, 0x48024a00, 0x497a4805, 0x4d400000,
+ 0x42028000, 0x00000001, 0x41781800, 0x405c2800,
+ 0x42000000, 0x00000001, 0x0201f800, 0x00104fae,
+ 0x42028000, 0x0000002a, 0x4d3c0000, 0x42027800,
+ 0x00000002, 0x0201f800, 0x00102094, 0x5c027800,
+ 0x5c028000, 0x5c024000, 0x5c00b800, 0x813261c0,
+ 0x02020000, 0x00108253, 0x1c01f000, 0x59303009,
+ 0x58181a05, 0x820c1d00, 0x000000ff, 0x820c0580,
+ 0x00000048, 0x04000004, 0x820c0580, 0x0000006a,
+ 0x04020049, 0x59300004, 0x8c000516, 0x04020046,
+ 0x58180409, 0x8c000500, 0x04000043, 0x42000000,
+ 0x0010e904, 0x50006000, 0x41781800, 0x5830200b,
+ 0x41300000, 0x80100580, 0x04000006, 0x40101800,
+ 0x580c2000, 0x801021c0, 0x040207fa, 0x0401f036,
+ 0x4933c857, 0x59302000, 0x497a6000, 0x800c19c0,
+ 0x0402001f, 0x4933c856, 0x42007000, 0x00020c51,
+ 0x58300009, 0x800001c0, 0x04000019, 0x49786009,
+ 0x58380001, 0x80300580, 0x04020008, 0x4933c856,
+ 0x49787002, 0x4810600b, 0x801021c0, 0x0402001e,
+ 0x4978600a, 0x0401f01c, 0x4933c856, 0x4810600b,
+ 0x801021c0, 0x04020002, 0x4978600a, 0x4c180000,
+ 0x4c300000, 0x0201f800, 0x00100675, 0x5c006000,
+ 0x0401fd4a, 0x5c003000, 0x0401f00f, 0x4933c856,
+ 0x800c19c0, 0x04020008, 0x801021c0, 0x04000003,
+ 0x4810600b, 0x0401f008, 0x4978600b, 0x4978600a,
+ 0x0401f005, 0x48101800, 0x801021c0, 0x04020002,
+ 0x480c600a, 0x58180409, 0x84000500, 0x48003409,
+ 0x49783209, 0x1c01f000, 0x4933c857, 0x4927c857,
+ 0x59a80221, 0x82000540, 0x00000003, 0x48035221,
+ 0x4c5c0000, 0x4d400000, 0x59ccb800, 0x825cbd00,
+ 0x00ffffff, 0x42028000, 0x00000000, 0x0201f800,
+ 0x0010203c, 0x0201f800, 0x00108f6f, 0x485f5015,
+ 0x04000024, 0x4d3c0000, 0x42028000, 0x0000002a,
+ 0x59240400, 0x8c00050a, 0x04020008, 0x59240200,
+ 0x84000556, 0x48024a00, 0x42003000, 0x00000002,
+ 0x0201f800, 0x0010b651, 0x42027800, 0x00000002,
+ 0x0201f800, 0x00102094, 0x42000000, 0x0010d53e,
+ 0x0201f800, 0x0010c50a, 0x59cc0408, 0x8c00051e,
+ 0x04020009, 0x42000800, 0x0010d5ef, 0x58040406,
+ 0x8c000500, 0x04020004, 0x59a80221, 0x84000552,
+ 0x48035221, 0x42028000, 0x00000002, 0x5c027800,
+ 0x41780800, 0x0201f800, 0x00104833, 0x59240200,
+ 0x4803c857, 0x4927c857, 0x82000540, 0x00000066,
+ 0x48024a00, 0x485e4805, 0x812000f0, 0x805c0540,
+ 0x48026813, 0x49238830, 0x84000570, 0x48038832,
+ 0x59a81221, 0x59cc0408, 0x8c00051a, 0x04020005,
+ 0x84081514, 0x4a0370e5, 0x00000800, 0x0401f004,
+ 0x84081554, 0x4a0370e5, 0x00000c00, 0x480b5221,
+ 0x0201f800, 0x00109f6a, 0x59cc0408, 0x8c000518,
+ 0x0400000b, 0x59a80221, 0x8400054a, 0x48035221,
+ 0x49238830, 0x845c0570, 0x48038832, 0x42000800,
+ 0x00000004, 0x0201f800, 0x00104736, 0x59a80a21,
+ 0x84040d50, 0x59cc0013, 0x8c00053e, 0x04000003,
+ 0x8c000536, 0x04000004, 0x59cc0017, 0x8c000536,
+ 0x04020002, 0x84040d10, 0x48075221, 0x48075421,
+ 0x42001800, 0x0010e906, 0x59240400, 0x8c00050c,
+ 0x04000006, 0x4a026426, 0x00000021, 0x0201f800,
+ 0x0010a2b7, 0x0401f00e, 0x405c0800, 0x41781000,
+ 0x42001800, 0x00000100, 0x42000000, 0x00000001,
+ 0x42028000, 0x00000000, 0x0201f800, 0x00104fae,
+ 0x0401f838, 0x0201f800, 0x00020afe, 0x59a80221,
0x4803c857, 0x8c000506, 0x04020009, 0x41781800,
- 0x0201f800, 0x0010c0f4, 0x04000003, 0x42001800,
- 0x00000010, 0x0201f800, 0x00101f3c, 0x805c0110,
- 0x48035018, 0x48038881, 0x59a80016, 0x80000040,
- 0x4803c857, 0x48035016, 0x04020018, 0x59a8021b,
- 0x8400050a, 0x4803521b, 0x4803541b, 0x4a038802,
- 0x0000ffff, 0x42001800, 0x0010cb46, 0x0201f800,
- 0x00100533, 0x42001800, 0x0010cb53, 0x0201f800,
- 0x00100533, 0x4a035017, 0x0000ffff, 0x0201f800,
- 0x001071f9, 0x4a0378e4, 0x00000080, 0x4a038802,
- 0x0000ffff, 0x850e1d02, 0x5c028000, 0x5c00b800,
- 0x1c01f000, 0x4933c857, 0x59368c03, 0x4c180000,
- 0x59300203, 0x82003480, 0x0000000e, 0x02021800,
- 0x0010032e, 0x0c01f803, 0x5c003000, 0x1c01f000,
- 0x0010a53a, 0x0010aaef, 0x0010ac3a, 0x0010a53a,
- 0x0010a53a, 0x0010a53a, 0x0010a53a, 0x0010a53a,
- 0x0010a55d, 0x0010a53a, 0x0010a53a, 0x0010a53a,
- 0x0010a53a, 0x0010a53a, 0x0201f800, 0x0010032e,
- 0x4933c857, 0x42028800, 0x0000ffff, 0x813669c0,
- 0x04000002, 0x59368c03, 0x4c180000, 0x59300203,
- 0x82003480, 0x0000000e, 0x02021800, 0x0010032e,
- 0x0c01f803, 0x5c003000, 0x1c01f000, 0x0010a559,
- 0x0010af29, 0x0010a559, 0x0010a559, 0x0010a559,
- 0x0010a559, 0x0010a559, 0x0010a559, 0x0010ae62,
- 0x0010b348, 0x0010b37e, 0x0010b348, 0x0010b37e,
- 0x0010a559, 0x0201f800, 0x0010032e, 0x0201f800,
- 0x0010032e, 0x83383480, 0x00000057, 0x02021800,
- 0x0010032e, 0x41380000, 0x493bc857, 0x4d1c0000,
- 0x4d400000, 0x0c01f804, 0x5c028000, 0x5c023800,
- 0x1c01f000, 0x0010a5c9, 0x0010a7fa, 0x0010a5c9,
- 0x0010a5c9, 0x0010a5c9, 0x0010a805, 0x0010a5c9,
- 0x0010a5c9, 0x0010a5c9, 0x0010a5c9, 0x0010a5c9,
- 0x0010a5c9, 0x0010a5c9, 0x0010a5c9, 0x0010a5c9,
- 0x0010a5c9, 0x0010a5c9, 0x0010a5c9, 0x0010a5c9,
- 0x0010a5c9, 0x0010a5c9, 0x0010a5c9, 0x0010a5c9,
- 0x0010a602, 0x0010a655, 0x0010a670, 0x0010a6f1,
- 0x0010a74f, 0x0010a793, 0x0010a7c3, 0x0010a5c9,
- 0x0010a5c9, 0x0010a80d, 0x0010a5c9, 0x0010a5c9,
- 0x0010a81b, 0x0010a824, 0x0010a5c9, 0x0010a5c9,
- 0x0010a5c9, 0x0010a5c9, 0x0010a5c9, 0x0010a8c6,
- 0x0010a5c9, 0x0010a5c9, 0x0010a72f, 0x0010a5c9,
- 0x0010a5c9, 0x0010a885, 0x0010a5c9, 0x0010a5c9,
- 0x0010a5c9, 0x0010a8d4, 0x0010a5c9, 0x0010a5c9,
- 0x0010a5c9, 0x0010a91e, 0x0010a5c9, 0x0010a5c9,
- 0x0010a5c9, 0x0010a5c9, 0x0010a5c9, 0x0010a5c9,
- 0x0010a98b, 0x0010a5c9, 0x0010a9be, 0x0010a9c9,
- 0x0010a5c9, 0x0010a5c9, 0x0010a5cb, 0x0010a9d4,
- 0x0010a5c9, 0x0010a5c9, 0x0010a5c9, 0x0010a5dc,
- 0x0010a5c9, 0x0010a5c9, 0x0010a5c9, 0x0010a9db,
- 0x0010a9e3, 0x0010aa04, 0x0010a5c9, 0x0010a5c9,
- 0x0010a5c9, 0x0010a5c9, 0x0010a5c9, 0x0010a5f0,
- 0x0010a5c9, 0x0010a5c9, 0x0010a5c9, 0x0010a5c9,
- 0x0010a5c9, 0x0010a5c9, 0x0010a5c9, 0x0010a5c9,
- 0x0010a5c9, 0x0201f800, 0x0010032e, 0x4933c857,
- 0x0201f800, 0x0010b3b0, 0x02020000, 0x0010aa12,
- 0x0201f800, 0x00101d52, 0x02020000, 0x0010aa12,
- 0x59cc0407, 0x4802601d, 0x4a026403, 0x00000045,
- 0x4a026203, 0x00000001, 0x0201f000, 0x00106d1c,
- 0x4933c857, 0x0201f800, 0x0010b3b0, 0x02020000,
- 0x0010aa12, 0x0201f800, 0x00101d52, 0x02020000,
- 0x0010aa12, 0x0201f800, 0x0010aa53, 0x040201eb,
- 0x59cc0007, 0x4802601d, 0x4a026403, 0x0000004a,
- 0x4a026203, 0x00000001, 0x0201f000, 0x00106d1c,
- 0x4933c857, 0x0201f800, 0x0010b3b0, 0x02020000,
- 0x0010aa12, 0x0201f800, 0x00101d52, 0x02020000,
- 0x0010aa12, 0x0201f800, 0x0010aa53, 0x040201d7,
- 0x4a026403, 0x00000056, 0x4a026203, 0x00000001,
- 0x0201f000, 0x00106d1c, 0x4933c857, 0x0201f800,
- 0x00101d52, 0x0402000d, 0x0201f800, 0x00104956,
- 0x0402000a, 0x5932481c, 0x59240200, 0x82000500,
- 0x00000003, 0x82000580, 0x00000003, 0x0400000a,
- 0x0201f000, 0x0010aa12, 0x4a026403, 0x00000009,
- 0x4a02641b, 0x00000009, 0x4a02621b, 0x00000000,
- 0x0401f1e9, 0x0201f800, 0x00104a45, 0x0400002b,
- 0x59340200, 0x8c00051a, 0x04000004, 0x5934000a,
- 0x84000560, 0x4802680a, 0x0201f800, 0x0010b097,
- 0x0402002c, 0x42028000, 0x00000029, 0x4d3c0000,
- 0x417a7800, 0x0201f800, 0x0010ff80, 0x5c027800,
- 0x42000000, 0x0010cf25, 0x0201f800, 0x0010bfb3,
- 0x41780800, 0x0201f800, 0x001046e4, 0x4a026403,
- 0x00000008, 0x42003000, 0x00000003, 0x59240400,
- 0x8c00050a, 0x040201c8, 0x59cc400b, 0x59cc380c,
- 0x59cc180d, 0x59cc080e, 0x9c2041c0, 0x9c1c39c0,
- 0x9c0c19c0, 0x9c0409c0, 0x4a026203, 0x00000007,
- 0x41782800, 0x0401f1af, 0x0201f800, 0x0010b160,
- 0x040207da, 0x4a026403, 0x00000009, 0x4a02641b,
- 0x0000000e, 0x4a02621b, 0x00001900, 0x0401f1b2,
- 0x4a026403, 0x00000009, 0x4a02641b, 0x00000003,
- 0x0401f1ad, 0x4933c857, 0x0201f800, 0x00101d52,
- 0x040203ba, 0x0201f800, 0x00104956, 0x040203b7,
- 0x493a6403, 0x0201f800, 0x0010b025, 0x0402000a,
- 0x4a026403, 0x00000006, 0x59240400, 0x8c00050a,
- 0x0402019d, 0x4a026203, 0x00000007, 0x0201f000,
- 0x0010b76a, 0x4a026403, 0x00000007, 0x4a02641b,
- 0x00000009, 0x4a02621b, 0x00000000, 0x0401f192,
- 0x4933c857, 0x0201f800, 0x00104956, 0x0402039f,
- 0x5934000a, 0x82000500, 0x00010000, 0x82000580,
- 0x00010000, 0x02020800, 0x0010b3b0, 0x02000800,
- 0x00101d52, 0x04020395, 0x59cc0001, 0x82000500,
- 0x00ffff00, 0x82000580, 0x00fffc00, 0x04020007,
- 0x59a80006, 0x8c00050e, 0x04000004, 0x59240400,
- 0x8c00050a, 0x04020048, 0x0201f800, 0x00104a45,
- 0x04020005, 0x42027800, 0x00000001, 0x0201f800,
- 0x001045df, 0x0201f800, 0x00104a38, 0x04000004,
- 0x82000580, 0x00000703, 0x04020042, 0x59cc0206,
- 0x82003500, 0x00000003, 0x04020045, 0x82003480,
- 0x00000014, 0x04001042, 0x59a8305a, 0x80183480,
- 0x0400103f, 0x5934300a, 0x84183516, 0x82000580,
- 0x00000014, 0x04020002, 0x84183556, 0x481a680a,
- 0x59cc0406, 0x82000500, 0x00000003, 0x04020034,
- 0x0201f800, 0x0010b0e4, 0x0402003c, 0x0201f800,
- 0x00104a1c, 0x04020007, 0x4c600000, 0x4178c000,
- 0x417a7800, 0x0201f800, 0x00101ce3, 0x5c00c000,
- 0x836c0580, 0x00000003, 0x04020009, 0x42003000,
- 0x00000006, 0x0201f800, 0x0010b735, 0x42000000,
- 0x0010cf24, 0x0201f800, 0x0010bfb3, 0x0201f800,
- 0x00104752, 0x4a026403, 0x0000000a, 0x42003000,
- 0x00000020, 0x59cc1a0a, 0x41780800, 0x41784000,
- 0x41783800, 0x59240400, 0x8c00050a, 0x04020132,
- 0x0401f772, 0x4a026403, 0x0000000b, 0x4a02641b,
- 0x0000000b, 0x4a02621b, 0x00002c00, 0x0401f12a,
- 0x4a026403, 0x0000000b, 0x4a02641b, 0x00000009,
- 0x4a02621b, 0x00001e00, 0x0401f123, 0x42000000,
- 0x0010ce7f, 0x0201f800, 0x0010bfb3, 0x4a026403,
- 0x0000000b, 0x4a02641b, 0x00000007, 0x4a02621b,
- 0x00000000, 0x0401f118, 0x4a026403, 0x0000000b,
- 0x4a02641b, 0x00000003, 0x4a02621b, 0x00000000,
- 0x0401f111, 0x4933c857, 0x0201f800, 0x00104956,
- 0x0402031e, 0x0201f800, 0x0010b3b0, 0x0402031b,
- 0x0201f800, 0x00101d52, 0x04020318, 0x59cc0206,
- 0x82003500, 0x00000003, 0x04020023, 0x82003480,
- 0x00000014, 0x04001020, 0x59a8305a, 0x80180480,
- 0x0400101d, 0x59cc0406, 0x82000500, 0x00000003,
- 0x04020019, 0x59340400, 0x82000580, 0x00000707,
- 0x0400001c, 0x417a7800, 0x4c600000, 0x4178c000,
- 0x0201f800, 0x00101ce3, 0x5c00c000, 0x42003000,
- 0x0000000a, 0x0201f800, 0x0010b735, 0x42000000,
- 0x0010cf21, 0x0201f800, 0x0010bfb3, 0x4a026403,
- 0x0000000c, 0x41782800, 0x42003000, 0x00000021,
- 0x0401f7ad, 0x4a026403, 0x0000000d, 0x4a02641b,
- 0x00000007, 0x4a02621b, 0x00000000, 0x0401f0da,
- 0x4a026403, 0x0000000d, 0x4a02641b, 0x00000009,
- 0x4a02621b, 0x00001e00, 0x0401f0d3, 0x4933c857,
- 0x0201f800, 0x00104956, 0x040202e0, 0x0201f800,
- 0x0010b3b0, 0x040202dd, 0x0201f800, 0x00101d52,
- 0x040202da, 0x0401fb1a, 0x0402000e, 0x493a6403,
- 0x0401fb21, 0x04020004, 0x4a026403, 0x0000002e,
- 0x0401f722, 0x4a026403, 0x0000000d, 0x4a02641b,
- 0x00000007, 0x4a02621b, 0x00000000, 0x0401f0ba,
- 0x4a026403, 0x0000000d, 0x4a02641b, 0x00000009,
- 0x4a02621b, 0x00001e00, 0x0401f0b3, 0x4933c857,
- 0x0201f800, 0x00104956, 0x040206c0, 0x59240200,
- 0x82000500, 0x00000003, 0x82000580, 0x00000003,
- 0x040202ba, 0x0201f800, 0x00104a38, 0x04020033,
- 0x0201f800, 0x0010b0ec, 0x0402000d, 0x4a026403,
- 0x0000000e, 0x59240400, 0x8c00050a, 0x0402009e,
- 0x42003000, 0x00000052, 0x59cc4008, 0x59cc3809,
- 0x59cc180a, 0x59cc080b, 0x0401f6d4, 0x4933c857,
- 0x42003000, 0x00000003, 0x0201f800, 0x0010b73d,
- 0x4d3c0000, 0x417a7800, 0x0201f800, 0x0010ff80,
- 0x5c027800, 0x42000000, 0x0010cf23, 0x0201f800,
- 0x0010bfb3, 0x59340200, 0x84000558, 0x48026a00,
- 0x42000800, 0x0000000b, 0x0201f800, 0x001045ea,
- 0x59240400, 0x8c00050a, 0x04020078, 0x42003000,
- 0x00000007, 0x0401f066, 0x4933c857, 0x4a026403,
- 0x0000000f, 0x4a02641b, 0x00000003, 0x4a02621b,
- 0x00001e00, 0x0401f074, 0x59340400, 0x82000580,
- 0x00000703, 0x040007f5, 0x0401f040, 0x4933c857,
- 0x0201f800, 0x00104956, 0x0402027c, 0x5932481c,
- 0x59240200, 0x82000500, 0x00000003, 0x82000580,
- 0x00000003, 0x04020275, 0x0201f800, 0x00104a2f,
- 0x0402002e, 0x0201f800, 0x0010b107, 0x02000800,
- 0x0010b097, 0x04020006, 0x4a026403, 0x00000010,
- 0x42003000, 0x00000050, 0x0401f68d, 0x4d3c0000,
- 0x417a7800, 0x0201f800, 0x0010ff80, 0x5c027800,
- 0x42003000, 0x00000003, 0x0201f800, 0x0010b73d,
- 0x42000000, 0x0010cf23, 0x0201f800, 0x0010bfb3,
- 0x59340200, 0x84000558, 0x48026a00, 0x0401f7c5,
- 0x4a026403, 0x00000011, 0x4a02641b, 0x00000003,
- 0x4a02621b, 0x00001e00, 0x0401f03f, 0x4933c857,
- 0x0201f800, 0x00101d52, 0x02000800, 0x0010b3b0,
- 0x0402024a, 0x0401fa8a, 0x04020008, 0x4a026403,
- 0x00000012, 0x0401f034, 0x59340400, 0x82000580,
- 0x00000703, 0x040007eb, 0x83340580, 0x0010e23c,
- 0x0400000c, 0x4d3c0000, 0x417a7800, 0x42028000,
- 0x00000029, 0x0201f800, 0x0010ff80, 0x5c027800,
- 0x42003000, 0x00000017, 0x0201f800, 0x0010b73d,
- 0x42000000, 0x0010cf23, 0x0201f800, 0x0010bfb3,
- 0x0201f800, 0x00101fb4, 0x59240400, 0x8c00050a,
- 0x04020012, 0x42003000, 0x00000006, 0x42028000,
- 0x00000029, 0x4933c857, 0x4a026403, 0x00000001,
- 0x4a026203, 0x00000007, 0x41782800, 0x0401f003,
- 0x42028000, 0x00000046, 0x0201f800, 0x0010b18b,
- 0x0201f000, 0x0010b76a, 0x4933c857, 0x4a026403,
- 0x00000001, 0x42000800, 0x0000000b, 0x0201f800,
- 0x001045ea, 0x4a026203, 0x00000001, 0x0201f000,
- 0x00106d1c, 0x4933c857, 0x42000800, 0x00000009,
- 0x0201f800, 0x001045ea, 0x4a026403, 0x00000005,
- 0x0401f7f5, 0x0201f800, 0x0010b3b0, 0x04020203,
- 0x0201f800, 0x00101d52, 0x04020200, 0x0401fa40,
- 0x040207be, 0x4a026403, 0x00000020, 0x4a026203,
- 0x00000001, 0x0201f000, 0x00106d1c, 0x0201f800,
- 0x00101d52, 0x040201f5, 0x4a026403, 0x00000023,
- 0x4a026203, 0x00000001, 0x0201f000, 0x00106d1c,
- 0x0201f800, 0x0010b3b0, 0x02000800, 0x00101d52,
- 0x040201ea, 0x0401fa2a, 0x040207a8, 0x59cc0807,
- 0x82040500, 0x00ffff00, 0x0402000a, 0x59340212,
- 0x82000500, 0x0000ff00, 0x04000006, 0x5932481c,
- 0x59240005, 0x82000500, 0x000000ff, 0x0401f003,
- 0x5932481c, 0x59240005, 0x82040d00, 0x00ffffff,
- 0x80040580, 0x04020014, 0x59cc1408, 0x0201f800,
- 0x00109cf9, 0x04000025, 0x591c0202, 0x82001580,
- 0x0000ffff, 0x04000004, 0x59cc1208, 0x80080580,
- 0x0402001e, 0x591c000a, 0x81340580, 0x0402001b,
- 0x591c0407, 0x82000580, 0x00000007, 0x04020017,
- 0x0401f027, 0x59cc1208, 0x82080580, 0x0000ffff,
- 0x0400000c, 0x0201f800, 0x00109cf9, 0x0400000f,
- 0x59cc1408, 0x591c0202, 0x80080580, 0x04020024,
- 0x591c000a, 0x81340580, 0x04020021, 0x0401f010,
- 0x59cc1408, 0x41780000, 0x0201f800, 0x0010aed1,
- 0x040207f8, 0x0401f017, 0x4a026403, 0x00000026,
- 0x4a02621b, 0x00001700, 0x59cc1208, 0x82081580,
- 0x0000ffff, 0x04020794, 0x0401f00e, 0x591c0407,
- 0x82000580, 0x00000007, 0x040207f4, 0x591c0403,
- 0x82000580, 0x00000024, 0x04020006, 0x4d300000,
- 0x411e6000, 0x0201f800, 0x00020b9d, 0x5c026000,
- 0x4a026403, 0x00000025, 0x0401f783, 0x59cc1408,
- 0x41780000, 0x0201f800, 0x0010aed1, 0x040207e3,
- 0x0401f7f8, 0x4933c857, 0x4d3c0000, 0x42027800,
- 0x00000001, 0x0201f800, 0x001045df, 0x5c027800,
- 0x4c580000, 0x4200b000, 0x00000002, 0x83a81c00,
- 0x00000002, 0x83cc1400, 0x0000000b, 0x0201f800,
- 0x00108c57, 0x5c00b000, 0x04000004, 0x4a026403,
- 0x00000031, 0x0401f768, 0x0201f800, 0x00020b9d,
- 0x4200b000, 0x00000002, 0x83a81c00, 0x00000000,
- 0x83cc1400, 0x0000000d, 0x0201f800, 0x00108c57,
- 0x04020010, 0x0201f800, 0x00106268, 0x0400000d,
- 0x59300407, 0x82000580, 0x00000001, 0x04020009,
- 0x59300403, 0x82000580, 0x00000002, 0x04020005,
- 0x5930000a, 0x81340580, 0x02000800, 0x00020b9d,
- 0x0201f800, 0x001050f7, 0x0402000f, 0x0201f800,
- 0x00105113, 0x04020008, 0x4a035014, 0x00000001,
- 0x4202d800, 0x00000001, 0x0201f800, 0x00105051,
- 0x0401f005, 0x42000000, 0x00000001, 0x0201f800,
- 0x001050c8, 0x1c01f000, 0x0201f800, 0x00101d52,
- 0x0402014a, 0x0401f98a, 0x04020708, 0x493a6403,
- 0x0401f9fa, 0x04020004, 0x4a026403, 0x0000002b,
- 0x0401f731, 0x4a026403, 0x0000002c, 0x0401f72e,
- 0x4933c857, 0x0201f800, 0x00106405, 0x0402013b,
- 0x0201f800, 0x00101d52, 0x04020138, 0x0201f800,
- 0x00104a1c, 0x040206f5, 0x59cc0408, 0x4802641a,
- 0x59cc0208, 0x4802621a, 0x59cc0807, 0x59340002,
- 0x82000500, 0x00ffffff, 0x80040580, 0x04000016,
- 0x5932481c, 0x59240005, 0x80040580, 0x04020025,
- 0x59cc1408, 0x0201f800, 0x00109cf9, 0x04000027,
- 0x831c0580, 0xffffffff, 0x04000007, 0x0201f800,
- 0x0010b2d7, 0x04000021, 0x0201f800, 0x0010b71c,
- 0x0400001e, 0x491e6027, 0x4a026403, 0x00000036,
- 0x0401f110, 0x59cc1208, 0x82080580, 0x0000ffff,
- 0x04000009, 0x0201f800, 0x00109cf9, 0x04000013,
- 0x591c0202, 0x59cc0c08, 0x80040580, 0x0402000f,
- 0x0401f7e8, 0x59cc1408, 0x42000000, 0x00000001,
- 0x0201f800, 0x0010aed1, 0x04000008, 0x0401f7e1,
- 0x4803c856, 0x4a02641b, 0x00000009, 0x4a02621b,
- 0x00001500, 0x0401f006, 0x4803c856, 0x4a02641b,
- 0x00000003, 0x4a02621b, 0x00001700, 0x4a026403,
- 0x00000037, 0x0401f0ef, 0x4933c857, 0x0201f800,
- 0x00106405, 0x040200f1, 0x0201f800, 0x00101d52,
- 0x040200ee, 0x0201f800, 0x00104a1c, 0x040206ab,
- 0x0201f800, 0x0010493c, 0x04000055, 0x59cc0407,
- 0x4802641a, 0x59cc1207, 0x480a621a, 0x82080580,
- 0x0000ffff, 0x04000005, 0x0201f800, 0x00109cf9,
- 0x04000043, 0x0401f00a, 0x59cc1407, 0x42000000,
- 0x00000001, 0x0201f800, 0x0010aed1, 0x0400003c,
- 0x831c0580, 0xffffffff, 0x04000039, 0x59cc0c07,
- 0x591c0202, 0x80040580, 0x04020035, 0x0201f800,
- 0x0010b71c, 0x04000032, 0x591c0415, 0x8c000516,
- 0x0402003d, 0x4d300000, 0x411e6000, 0x0201f800,
- 0x00109419, 0x5c026000, 0x4a023a03, 0x00000007,
- 0x59cc0c09, 0x82040d00, 0x0000ff00, 0x840409c0,
- 0x82040580, 0x00000001, 0x0400000c, 0x82040580,
- 0x00000005, 0x0400000e, 0x82040580, 0x00000007,
- 0x04020015, 0x42000000, 0x0010cf10, 0x0201f800,
- 0x0010bfb3, 0x0401f00a, 0x42000000, 0x0010cf0f,
- 0x0201f800, 0x0010bfb3, 0x0401f008, 0x42000000,
- 0x0010cf0e, 0x0201f800, 0x0010bfb3, 0x591c0009,
- 0x80000540, 0x04000004, 0x59cc2808, 0x0201f000,
- 0x0010b2eb, 0x4803c856, 0x4a02641b, 0x00000009,
- 0x4a02621b, 0x00002a00, 0x0401f006, 0x4803c856,
- 0x4a02641b, 0x00000003, 0x4a02621b, 0x00000300,
- 0x4a026403, 0x0000003b, 0x0401f08e, 0x4803c856,
- 0x4a02641b, 0x0000000b, 0x4a02621b, 0x00000000,
- 0x0401f7f8, 0x4803c856, 0x4a02641b, 0x00000007,
- 0x4a02621b, 0x00000000, 0x0401f7f2, 0x59cc0001,
- 0x82000580, 0x00fffffe, 0x04020084, 0x4c080000,
- 0x0201f800, 0x00104956, 0x04000029, 0x0201f800,
- 0x0010491c, 0x0201f800, 0x0010b41d, 0x04020021,
- 0x5932481c, 0x59240200, 0x82000540, 0x000000e0,
- 0x48024a00, 0x59a8021b, 0x82000540, 0x00000003,
- 0x4803521b, 0x59a80018, 0x800000d0, 0x59a8080f,
- 0x82040d00, 0x000000ff, 0x80041540, 0x480b500f,
- 0x42000800, 0x00000003, 0x0201f800, 0x00106e68,
- 0x497b501d, 0x8d0e1d20, 0x04000004, 0x4a032804,
- 0x000007d0, 0x0401f001, 0x0201f800, 0x00020b9d,
- 0x0201f800, 0x00101e2e, 0x5c001000, 0x1c01f000,
- 0x0201f800, 0x0010b43f, 0x0401f7fc, 0x5c001000,
- 0x0201f000, 0x00020b9d, 0x0201f800, 0x00101d52,
- 0x04020052, 0x0201f800, 0x0010b445, 0x4a026403,
- 0x00000047, 0x4a026203, 0x00000001, 0x0201f000,
- 0x00106d1c, 0x0201f800, 0x00101d52, 0x04020047,
- 0x0201f800, 0x0010b445, 0x4a026403, 0x00000047,
- 0x4a026203, 0x00000001, 0x0201f000, 0x00106d1c,
- 0x0201f800, 0x00101d52, 0x0402003c, 0x0201f800,
- 0x0010b445, 0x0201f000, 0x00020b9d, 0x0401f83a,
- 0x04000036, 0x4a026403, 0x0000004e, 0x4a026203,
- 0x00000001, 0x0201f000, 0x00106d1c, 0x0201f800,
- 0x00104a2f, 0x040205ed, 0x4a026403, 0x0000004f,
- 0x497a601d, 0x59cc0a06, 0x82040d00, 0x000000ff,
- 0x800409c0, 0x04000614, 0x82040580, 0x00000001,
- 0x04020005, 0x59cc0808, 0x59a80005, 0x80040580,
- 0x0400060d, 0x82040580, 0x00000002, 0x0402000a,
- 0x83cc1400, 0x0000000b, 0x4200b000, 0x00000002,
- 0x83341c00, 0x00000006, 0x0201f800, 0x00108c57,
- 0x04000601, 0x4a02601d, 0x00000001, 0x0401f5fe,
- 0x0201f800, 0x00104a2f, 0x040205cc, 0x4a026403,
- 0x00000050, 0x59cc0207, 0x4802601d, 0x0401f5f6,
- 0x4a026203, 0x00000001, 0x42000800, 0x80000040,
- 0x0201f000, 0x00020b3e, 0x4803c857, 0x0201f000,
- 0x00020b9d, 0x4d2c0000, 0x4c500000, 0x4c580000,
- 0x4c540000, 0x59a8005a, 0x82000c80, 0x00000841,
- 0x0402102d, 0x0201f800, 0x0010056e, 0x0400002a,
- 0x492e6009, 0x59a8005a, 0x48025802, 0x82000400,
- 0x00000003, 0x80000104, 0x83cca400, 0x00000006,
- 0x82000c80, 0x0000000a, 0x04001015, 0x4a025811,
- 0x0000000a, 0x4200b000, 0x0000000a, 0x832c0400,
- 0x00000006, 0x4000a800, 0x0201f800, 0x0010c086,
- 0x412c7000, 0x800409c0, 0x04020003, 0x49787001,
- 0x0401f00e, 0x0201f800, 0x0010056e, 0x0400000e,
- 0x492c7001, 0x40040000, 0x0401f7ea, 0x48025811,
- 0x4000b000, 0x832c0400, 0x00000006, 0x4000a800,
- 0x0201f800, 0x0010c086, 0x82000540, 0x00000001,
- 0x0401f006, 0x497b505a, 0x59325809, 0x0201f800,
- 0x0010059d, 0x80000580, 0x5c00a800, 0x5c00b000,
- 0x5c00a000, 0x5c025800, 0x1c01f000, 0x4d340000,
- 0x5932680a, 0x59343400, 0x4933c857, 0x4937c857,
- 0x481bc857, 0x0201f800, 0x00104a2f, 0x5c026800,
- 0x1c01f000, 0x4933c857, 0x4c600000, 0x4d3c0000,
- 0x4d440000, 0x4d340000, 0x0401f870, 0x0402005a,
- 0x59cc0207, 0x82000d00, 0x0000ff00, 0x900411c0,
- 0x59cc000a, 0x82000500, 0x00ffffff, 0x80081540,
- 0x480a601d, 0x8c040d18, 0x0400001a, 0x42003000,
- 0x00000008, 0x0201f800, 0x0010b72d, 0x42000000,
- 0x0010cf22, 0x0201f800, 0x0010bfb3, 0x59240400,
- 0x8c00050a, 0x04020009, 0x42002800, 0x00000002,
- 0x42003000, 0x00000024, 0x42028000, 0x00000046,
- 0x0201f800, 0x0010b18b, 0x4200c000, 0x00000001,
- 0x417a7800, 0x0201f800, 0x00101ce3, 0x0401f039,
- 0x8c040d1a, 0x04000034, 0x59cc000a, 0x59cc3800,
- 0x821c3d00, 0x00ffffff, 0x0201f800, 0x00106134,
- 0x02000800, 0x00104a7c, 0x0402002b, 0x5930001c,
- 0x4c000000, 0x0201f800, 0x00104a73, 0x4926601c,
- 0x5930000a, 0x4c000000, 0x59240c00, 0x8c040d0a,
- 0x0402000f, 0x59340c03, 0x59341802, 0x820c1d00,
- 0x00ffffff, 0x58002403, 0x42002800, 0x00000004,
- 0x42003000, 0x00000024, 0x42028000, 0x00000046,
- 0x41301000, 0x0201f800, 0x0010b19b, 0x4936600a,
- 0x42003000, 0x00000009, 0x0201f800, 0x0010b735,
- 0x42000000, 0x0010cf22, 0x0201f800, 0x0010bfb3,
- 0x417a7800, 0x4178c000, 0x0201f800, 0x00101ce3,
- 0x5c000000, 0x4802600a, 0x5c000000, 0x4802601c,
- 0x0401f004, 0x82000540, 0x00000001, 0x0401f002,
- 0x80000580, 0x5c026800, 0x5c028800, 0x5c027800,
- 0x5c00c000, 0x1c01f000, 0x4933c857, 0x59cc0206,
- 0x82000480, 0x00000010, 0x04021006, 0x4a02621b,
- 0x00000000, 0x82000540, 0x00000001, 0x0401f002,
- 0x80000580, 0x1c01f000, 0x4933c857, 0x4a02621b,
- 0x00000000, 0x59cc0407, 0x82000500, 0x0000ff00,
- 0x82000580, 0x00000800, 0x0402000d, 0x59cc0206,
- 0x59a8085a, 0x80040480, 0x0400100a, 0x59cc0006,
- 0x82000500, 0x00ff0000, 0x82000d80, 0x00140000,
- 0x04000003, 0x82000d80, 0x00100000, 0x1c01f000,
- 0x42000000, 0x0010cf17, 0x0201f800, 0x0010bfb3,
- 0x82000540, 0x00000001, 0x0401f7f9, 0x59300403,
- 0x82003480, 0x00000057, 0x02021800, 0x0010032e,
- 0x83383580, 0x00000013, 0x04020007, 0x4803c857,
- 0x4c000000, 0x0201f800, 0x0010b82a, 0x5c000000,
- 0x0c01f018, 0x4933c857, 0x493bc857, 0x83383580,
- 0x00000027, 0x04000005, 0x83383580, 0x00000014,
- 0x02020800, 0x0010032e, 0x493bc857, 0x4937c857,
- 0x0201f800, 0x0010b827, 0x0201f800, 0x0010491c,
- 0x42000800, 0x00000007, 0x0201f800, 0x001045ea,
- 0x0201f800, 0x00106d91, 0x0201f000, 0x00107eb4,
- 0x0010ab74, 0x0010ab7d, 0x0010ab74, 0x0010ab74,
- 0x0010ab74, 0x0010ab7d, 0x0010ab88, 0x0010ac2a,
- 0x0010abe5, 0x0010ac2a, 0x0010ac00, 0x0010ac2a,
- 0x0010ac07, 0x0010ac2a, 0x0010ac0c, 0x0010ac2a,
- 0x0010ac0c, 0x0010ac2a, 0x0010ac2a, 0x0010ab74,
- 0x0010ab74, 0x0010ab74, 0x0010ab74, 0x0010ab74,
- 0x0010ab74, 0x0010ab74, 0x0010ab74, 0x0010ab74,
- 0x0010ab74, 0x0010ab74, 0x0010ab7d, 0x0010ab74,
- 0x0010ac2a, 0x0010ab74, 0x0010ab74, 0x0010ac2a,
- 0x0010ab74, 0x0010ac2a, 0x0010ac2a, 0x0010ab74,
- 0x0010ab74, 0x0010ab74, 0x0010ab74, 0x0010ac2a,
- 0x0010ac2a, 0x0010ab74, 0x0010ac2a, 0x0010ac2a,
- 0x0010ab74, 0x0010ab82, 0x0010ab74, 0x0010ab74,
- 0x0010ab74, 0x0010ab74, 0x0010ac0f, 0x0010ac2a,
- 0x0010ab74, 0x0010ab74, 0x0010ac10, 0x0010ac2a,
- 0x0010ab74, 0x0010ab74, 0x0010ab74, 0x0010ab74,
- 0x0010ab74, 0x0010ab74, 0x0010ab74, 0x0010ab74,
- 0x0010ab74, 0x0010ab76, 0x0010ab74, 0x0010ab76,
- 0x0010ab74, 0x0010ab74, 0x0010ab76, 0x0010ab74,
- 0x0010ab74, 0x0010ab74, 0x0010ab76, 0x0010ab76,
- 0x0010ab76, 0x0010ab74, 0x0010ab74, 0x0010ab74,
- 0x0010ab74, 0x0010ab74, 0x0010ab76, 0x0010ab74,
- 0x0010ab74, 0x0010ab74, 0x0010ab74, 0x0010ab74,
- 0x0010ab74, 0x0010ab74, 0x0010ab74, 0x0010ab74,
- 0x0201f800, 0x0010032e, 0x4d2c0000, 0x59325809,
- 0x0201f800, 0x0010059d, 0x5c025800, 0x0201f000,
- 0x00020b9d, 0x59a8002a, 0x48026006, 0x4a026203,
- 0x00000002, 0x1c01f000, 0x4d3c0000, 0x417a7800,
- 0x0201f800, 0x001045df, 0x5c027800, 0x0401f0a3,
- 0x0201f800, 0x00104a38, 0x040000a0, 0x59a8021b,
- 0x8c000508, 0x04000012, 0x5932680a, 0x4c580000,
- 0x4200b000, 0x00000002, 0x83a81c00, 0x00000002,
- 0x83341400, 0x00000006, 0x0201f800, 0x00108c57,
- 0x80000540, 0x5c00b000, 0x04020090, 0x59340200,
- 0x8400051a, 0x48026a00, 0x0401f034, 0x599c0017,
- 0x8c00050a, 0x0402000a, 0x4d3c0000, 0x417a7800,
- 0x0201f800, 0x001045df, 0x5c027800, 0x42000800,
- 0x00000007, 0x0201f800, 0x001045ea, 0x59340212,
- 0x82000500, 0x0000ff00, 0x04020017, 0x83440d80,
- 0x000007fe, 0x04020079, 0x0201f800, 0x00101fb4,
- 0x59a8021b, 0x8c000514, 0x04000074, 0x83240580,
- 0x0010cfd1, 0x04020006, 0x4d300000, 0x0201f800,
- 0x00101e01, 0x5c026000, 0x0401f06c, 0x59a8221b,
- 0x8c102514, 0x04000069, 0x0201f800, 0x00101f94,
- 0x0401f066, 0x599c0017, 0x8c00050a, 0x04020063,
- 0x599c0019, 0x8c00050e, 0x04020060, 0x416c0000,
- 0x82000580, 0x00000002, 0x04020004, 0x59a80016,
- 0x80000000, 0x48035016, 0x42000800, 0x00000003,
- 0x0201f800, 0x001045ea, 0x4a026407, 0x00000001,
- 0x4a026203, 0x00000001, 0x4a026403, 0x00000002,
- 0x0201f800, 0x00106d1c, 0x4ce80000, 0x4201d000,
- 0x00000001, 0x0201f800, 0x00106519, 0x5c01d000,
- 0x1c01f000, 0x59340200, 0x8400051a, 0x48026a00,
- 0x0201f800, 0x00104a2f, 0x04000040, 0x0201f800,
- 0x00106a2c, 0x42000800, 0x00000004, 0x0201f800,
- 0x001045ea, 0x0201f800, 0x0010b760, 0x04020037,
- 0x42000800, 0x00000005, 0x0201f800, 0x001045ea,
+ 0x0201f800, 0x0010c65f, 0x04000003, 0x42001800,
+ 0x00000010, 0x0201f800, 0x00101fc4, 0x805c0110,
+ 0x4803501e, 0x48038881, 0x59a8001c, 0x80000040,
+ 0x4803c857, 0x04001003, 0x4803501c, 0x0402001e,
+ 0x59a80221, 0x8c000506, 0x04000004, 0x8400050a,
+ 0x48035221, 0x48035421, 0x42001800, 0x0010d15c,
+ 0x0201f800, 0x00100547, 0x42001800, 0x0010d169,
+ 0x0201f800, 0x00100547, 0x4a03501d, 0x0000ffff,
+ 0x0201f800, 0x00107568, 0x4a0378e4, 0x00000080,
+ 0x0201f800, 0x0010c686, 0x04000004, 0x4a038802,
+ 0x0000ffbf, 0x0401f003, 0x4a038802, 0x0000ffff,
+ 0x850e1d02, 0x5c028000, 0x5c00b800, 0x1c01f000,
+ 0x4d440000, 0x4d340000, 0x42028800, 0x000007fc,
+ 0x0201f800, 0x00104bd5, 0x04020003, 0x4a026c00,
+ 0x00000707, 0x5c026800, 0x5c028800, 0x1c01f000,
+ 0x0201f800, 0x0010a07e, 0x59a80053, 0x40002800,
+ 0x59a81854, 0x800c0480, 0x04000006, 0x59a80855,
+ 0x0400102d, 0x80040480, 0x04000022, 0x04001021,
+ 0x59aa6052, 0x41302000, 0x59300a03, 0x82040d80,
+ 0x00000000, 0x0402000f, 0x4a026203, 0x00000008,
+ 0x800c1800, 0x480f5054, 0x83301400, 0x0000002c,
+ 0x41540000, 0x80080480, 0x04021010, 0x480b5052,
+ 0x0201f800, 0x0010a096, 0x81300540, 0x1c01f000,
+ 0x83326400, 0x0000002c, 0x41540000, 0x81300c80,
+ 0x04001002, 0x41526000, 0x40100000, 0x81300580,
+ 0x04000004, 0x0401f7e5, 0x49535052, 0x0401f7f1,
+ 0x42000000, 0x0010d52d, 0x0201f800, 0x0010c50a,
+ 0x480fc857, 0x0201f800, 0x0010a096, 0x80026580,
+ 0x0401f7eb, 0x8c142d3e, 0x040207d3, 0x80000080,
+ 0x80000000, 0x0401f7d0, 0x4933c857, 0x4d340000,
+ 0x4d200000, 0x0201f800, 0x0010203c, 0x42028800,
+ 0x000007fd, 0x42003000, 0x00fffffd, 0x0201f800,
+ 0x00104774, 0x02020800, 0x0010032f, 0x4936600a,
+ 0x497a6c12, 0x59300426, 0x82000580, 0x00000021,
+ 0x04020003, 0x599c0208, 0x48026c12, 0x5c024000,
+ 0x5c026800, 0x4a02601d, 0x00000003, 0x4a026203,
+ 0x00000001, 0x4a026403, 0x00000022, 0x0201f000,
+ 0x0010707f, 0x59300028, 0x80000540, 0x04000006,
+ 0x82000580, 0xffffffff, 0x04000003, 0x82000580,
+ 0xffffffff, 0x1c01f000, 0x4927c857, 0x59240200,
+ 0x82000540, 0x00000042, 0x48024a00, 0x1c01f000,
+ 0x4933c857, 0x59368c03, 0x4c180000, 0x59300203,
+ 0x82003480, 0x0000000e, 0x02021800, 0x0010032f,
+ 0x0c01f803, 0x5c003000, 0x1c01f000, 0x0010a9c5,
+ 0x0010af91, 0x0010b0dc, 0x0010a9c5, 0x0010a9c5,
+ 0x0010a9c5, 0x0010a9c5, 0x0010a9c5, 0x0010a9e8,
+ 0x0010a9c5, 0x0010a9c5, 0x0010a9c5, 0x0010a9c5,
+ 0x0010a9c5, 0x0201f800, 0x0010032f, 0x4933c857,
+ 0x42028800, 0x0000ffff, 0x813669c0, 0x04000002,
+ 0x59368c03, 0x4c180000, 0x59300203, 0x82003480,
+ 0x0000000e, 0x02021800, 0x0010032f, 0x0c01f803,
+ 0x5c003000, 0x1c01f000, 0x0010a9e4, 0x0010b3d2,
+ 0x0010a9e4, 0x0010a9e4, 0x0010a9e4, 0x0010a9e4,
+ 0x0010a9e4, 0x0010a9e4, 0x0010b304, 0x0010b83f,
+ 0x0010b875, 0x0010b83f, 0x0010b875, 0x0010a9e4,
+ 0x0201f800, 0x0010032f, 0x0201f800, 0x0010032f,
+ 0x83383480, 0x00000057, 0x02021800, 0x0010032f,
+ 0x41380000, 0x493bc857, 0x4d1c0000, 0x4d400000,
+ 0x0c01f804, 0x5c028000, 0x5c023800, 0x1c01f000,
+ 0x0010aa54, 0x0010ac88, 0x0010aa54, 0x0010aa54,
+ 0x0010aa54, 0x0010ac93, 0x0010aa54, 0x0010aa54,
+ 0x0010aa54, 0x0010aa54, 0x0010aa54, 0x0010aa54,
+ 0x0010aa54, 0x0010aa54, 0x0010aa54, 0x0010aa54,
+ 0x0010aa54, 0x0010aa54, 0x0010aa54, 0x0010aa54,
+ 0x0010aa54, 0x0010aa54, 0x0010aa54, 0x0010aa8d,
+ 0x0010aae3, 0x0010aafe, 0x0010ab7f, 0x0010abdd,
+ 0x0010ac21, 0x0010ac51, 0x0010aa54, 0x0010aa54,
+ 0x0010ac9b, 0x0010aa54, 0x0010aa54, 0x0010aca9,
+ 0x0010acb2, 0x0010aa54, 0x0010aa54, 0x0010aa54,
+ 0x0010aa54, 0x0010aa54, 0x0010ad57, 0x0010aa54,
+ 0x0010aa54, 0x0010abbd, 0x0010aa54, 0x0010aa54,
+ 0x0010ad16, 0x0010aa54, 0x0010aa54, 0x0010aa54,
+ 0x0010ad65, 0x0010aa54, 0x0010aa54, 0x0010aa54,
+ 0x0010adbc, 0x0010aa54, 0x0010aa54, 0x0010aa54,
+ 0x0010aa54, 0x0010aa54, 0x0010aa54, 0x0010ae29,
+ 0x0010aa54, 0x0010ae5c, 0x0010ae67, 0x0010aa54,
+ 0x0010aa54, 0x0010aa56, 0x0010ae72, 0x0010aa54,
+ 0x0010aa54, 0x0010aa54, 0x0010aa67, 0x0010aa54,
+ 0x0010aa54, 0x0010aa54, 0x0010ae79, 0x0010ae81,
+ 0x0010aea2, 0x0010aa54, 0x0010aa54, 0x0010aa54,
+ 0x0010aa54, 0x0010aa54, 0x0010aa7b, 0x0010aa54,
+ 0x0010aa54, 0x0010aa54, 0x0010aa54, 0x0010aa54,
+ 0x0010aa54, 0x0010aa54, 0x0010aa54, 0x0010aa54,
+ 0x0201f800, 0x0010032f, 0x4933c857, 0x0201f800,
+ 0x0010b8a7, 0x02020000, 0x0010aeb0, 0x0201f800,
+ 0x00101dda, 0x02020000, 0x0010aeb0, 0x59cc0407,
+ 0x4802601d, 0x4a026403, 0x00000045, 0x4a026203,
+ 0x00000001, 0x0201f000, 0x0010707f, 0x4933c857,
+ 0x0201f800, 0x0010b8a7, 0x02020000, 0x0010aeb0,
+ 0x0201f800, 0x00101dda, 0x02020000, 0x0010aeb0,
+ 0x0201f800, 0x0010aef5, 0x040201ee, 0x59cc0007,
+ 0x4802601d, 0x4a026403, 0x0000004a, 0x4a026203,
+ 0x00000001, 0x0201f000, 0x0010707f, 0x4933c857,
+ 0x0201f800, 0x0010b8a7, 0x02020000, 0x0010aeb0,
+ 0x0201f800, 0x00101dda, 0x02020000, 0x0010aeb0,
+ 0x0201f800, 0x0010aef5, 0x040201da, 0x4a026403,
+ 0x00000056, 0x4a026203, 0x00000001, 0x0201f000,
+ 0x0010707f, 0x4933c857, 0x0201f800, 0x00101dda,
+ 0x0402000d, 0x0201f800, 0x00104aac, 0x0402000a,
+ 0x5932481c, 0x59240200, 0x82000500, 0x00000003,
+ 0x82000580, 0x00000003, 0x0400000a, 0x0201f000,
+ 0x0010aeb0, 0x4a026403, 0x00000009, 0x4a02641b,
+ 0x00000009, 0x4a02621b, 0x00000000, 0x0401f1ec,
+ 0x0201f800, 0x00104b9e, 0x0400002e, 0x59340200,
+ 0x8c00051a, 0x04000004, 0x5934000a, 0x84000560,
+ 0x4802680a, 0x0201f800, 0x0010b555, 0x0402002f,
+ 0x0201f800, 0x0010c696, 0x04020008, 0x42028000,
+ 0x00000029, 0x4d3c0000, 0x417a7800, 0x0201f800,
+ 0x00110684, 0x5c027800, 0x42000000, 0x0010d540,
+ 0x0201f800, 0x0010c50a, 0x41780800, 0x0201f800,
+ 0x00104833, 0x4a026403, 0x00000008, 0x42003000,
+ 0x00000003, 0x59240400, 0x8c00050a, 0x040201c8,
+ 0x59cc400b, 0x59cc380c, 0x59cc180d, 0x59cc080e,
+ 0x9c2041c0, 0x9c1c39c0, 0x9c0c19c0, 0x9c0409c0,
+ 0x4a026203, 0x00000007, 0x41782800, 0x0401f1af,
+ 0x0201f800, 0x0010b61e, 0x040207d7, 0x4a026403,
+ 0x00000009, 0x4a02641b, 0x0000000e, 0x4a02621b,
+ 0x00001900, 0x0401f1b2, 0x4a026403, 0x00000009,
+ 0x4a02641b, 0x00000003, 0x0401f1ad, 0x4933c857,
+ 0x0201f800, 0x00101dda, 0x040203ca, 0x0201f800,
+ 0x00104aac, 0x040203c7, 0x493a6403, 0x0201f800,
+ 0x0010b4d1, 0x0402000a, 0x4a026403, 0x00000006,
+ 0x59240400, 0x8c00050a, 0x0402019d, 0x4a026203,
+ 0x00000007, 0x0201f000, 0x0010bcbf, 0x4a026403,
+ 0x00000007, 0x4a02641b, 0x00000009, 0x4a02621b,
+ 0x00000000, 0x0401f192, 0x4933c857, 0x0201f800,
+ 0x00104aac, 0x040203af, 0x5934000a, 0x82000500,
+ 0x00010000, 0x82000580, 0x00010000, 0x02020800,
+ 0x0010b8a7, 0x02000800, 0x00101dda, 0x040203a5,
+ 0x59cc0001, 0x82000500, 0x00ffff00, 0x82000580,
+ 0x00fffc00, 0x04020007, 0x59a80006, 0x8c00050e,
+ 0x04000004, 0x59240400, 0x8c00050a, 0x04020048,
+ 0x0201f800, 0x00104b9e, 0x04020005, 0x42027800,
+ 0x00000001, 0x0201f800, 0x0010472b, 0x0201f800,
+ 0x00104b91, 0x04000004, 0x82000580, 0x00000703,
+ 0x04020042, 0x59cc0206, 0x82003500, 0x00000003,
+ 0x04020045, 0x82003480, 0x00000014, 0x04001042,
+ 0x59a83068, 0x80183480, 0x0400103f, 0x5934300a,
+ 0x84183516, 0x82000580, 0x00000014, 0x04020002,
+ 0x84183556, 0x481a680a, 0x59cc0406, 0x82000500,
+ 0x00000003, 0x04020034, 0x0201f800, 0x0010b5a2,
+ 0x0402003c, 0x0201f800, 0x00104b75, 0x04020007,
+ 0x4c600000, 0x4178c000, 0x417a7800, 0x0201f800,
+ 0x00101d69, 0x5c00c000, 0x836c0580, 0x00000003,
+ 0x04020009, 0x42003000, 0x00000006, 0x0201f800,
+ 0x0010bc8a, 0x42000000, 0x0010d53f, 0x0201f800,
+ 0x0010c50a, 0x0201f800, 0x001048a1, 0x4a026403,
+ 0x0000000a, 0x42003000, 0x00000020, 0x59cc1a0a,
+ 0x41780800, 0x41784000, 0x41783800, 0x59240400,
+ 0x8c00050a, 0x04020132, 0x0401f772, 0x4a026403,
+ 0x0000000b, 0x4a02641b, 0x0000000b, 0x4a02621b,
+ 0x00002c00, 0x0401f12a, 0x4a026403, 0x0000000b,
+ 0x4a02641b, 0x00000009, 0x4a02621b, 0x00001e00,
+ 0x0401f123, 0x42000000, 0x0010d495, 0x0201f800,
+ 0x0010c50a, 0x4a026403, 0x0000000b, 0x4a02641b,
+ 0x00000007, 0x4a02621b, 0x00000000, 0x0401f118,
+ 0x4a026403, 0x0000000b, 0x4a02641b, 0x00000003,
+ 0x4a02621b, 0x00000000, 0x0401f111, 0x4933c857,
+ 0x0201f800, 0x00104aac, 0x0402032e, 0x0201f800,
+ 0x0010b8a7, 0x0402032b, 0x0201f800, 0x00101dda,
+ 0x04020328, 0x59cc0206, 0x82003500, 0x00000003,
+ 0x04020023, 0x82003480, 0x00000014, 0x04001020,
+ 0x59a83068, 0x80180480, 0x0400101d, 0x59cc0406,
+ 0x82000500, 0x00000003, 0x04020019, 0x59340400,
+ 0x82000580, 0x00000707, 0x0400001c, 0x417a7800,
+ 0x4c600000, 0x4178c000, 0x0201f800, 0x00101d69,
+ 0x5c00c000, 0x42003000, 0x0000000a, 0x0201f800,
+ 0x0010bc8a, 0x42000000, 0x0010d53c, 0x0201f800,
+ 0x0010c50a, 0x4a026403, 0x0000000c, 0x41782800,
+ 0x42003000, 0x00000021, 0x0401f7ad, 0x4a026403,
+ 0x0000000d, 0x4a02641b, 0x00000007, 0x4a02621b,
+ 0x00000000, 0x0401f0da, 0x4a026403, 0x0000000d,
+ 0x4a02641b, 0x00000009, 0x4a02621b, 0x00001e00,
+ 0x0401f0d3, 0x4933c857, 0x0201f800, 0x00104aac,
+ 0x040202f0, 0x0201f800, 0x0010b8a7, 0x040202ed,
+ 0x0201f800, 0x00101dda, 0x040202ea, 0x0401fb2e,
+ 0x0402000e, 0x493a6403, 0x0401fb35, 0x04020004,
+ 0x4a026403, 0x0000002e, 0x0401f722, 0x4a026403,
+ 0x0000000d, 0x4a02641b, 0x00000007, 0x4a02621b,
+ 0x00000000, 0x0401f0ba, 0x4a026403, 0x0000000d,
+ 0x4a02641b, 0x00000009, 0x4a02621b, 0x00001e00,
+ 0x0401f0b3, 0x4933c857, 0x0201f800, 0x00104aac,
+ 0x040206bd, 0x59240200, 0x82000500, 0x00000003,
+ 0x82000580, 0x00000003, 0x040202ca, 0x0201f800,
+ 0x00104b91, 0x04020033, 0x0201f800, 0x0010b5aa,
+ 0x0402000d, 0x4a026403, 0x0000000e, 0x59240400,
+ 0x8c00050a, 0x0402009e, 0x42003000, 0x00000052,
+ 0x59cc4008, 0x59cc3809, 0x59cc180a, 0x59cc080b,
+ 0x0401f6d4, 0x4933c857, 0x42003000, 0x00000003,
+ 0x0201f800, 0x0010bc92, 0x4d3c0000, 0x417a7800,
+ 0x0201f800, 0x00110684, 0x5c027800, 0x42000000,
+ 0x0010d53e, 0x0201f800, 0x0010c50a, 0x59340200,
+ 0x84000558, 0x48026a00, 0x42000800, 0x0000000b,
+ 0x0201f800, 0x00104736, 0x59240400, 0x8c00050a,
+ 0x04020078, 0x42003000, 0x00000007, 0x0401f066,
+ 0x4933c857, 0x4a026403, 0x0000000f, 0x4a02641b,
+ 0x00000003, 0x4a02621b, 0x00001e00, 0x0401f074,
+ 0x59340400, 0x82000580, 0x00000703, 0x040007f5,
+ 0x0401f040, 0x4933c857, 0x0201f800, 0x00104aac,
+ 0x0402028c, 0x5932481c, 0x59240200, 0x82000500,
+ 0x00000003, 0x82000580, 0x00000003, 0x04020285,
+ 0x0201f800, 0x00104b88, 0x0402002e, 0x0201f800,
+ 0x0010b5c5, 0x02000800, 0x0010b555, 0x04020006,
+ 0x4a026403, 0x00000010, 0x42003000, 0x00000050,
+ 0x0401f68d, 0x4d3c0000, 0x417a7800, 0x0201f800,
+ 0x00110684, 0x5c027800, 0x42003000, 0x00000003,
+ 0x0201f800, 0x0010bc92, 0x42000000, 0x0010d53e,
+ 0x0201f800, 0x0010c50a, 0x59340200, 0x84000558,
+ 0x48026a00, 0x0401f7c5, 0x4a026403, 0x00000011,
+ 0x4a02641b, 0x00000003, 0x4a02621b, 0x00001e00,
+ 0x0401f03f, 0x4933c857, 0x0201f800, 0x00101dda,
+ 0x02000800, 0x0010b8a7, 0x0402025a, 0x0401fa9e,
+ 0x04020008, 0x4a026403, 0x00000012, 0x0401f034,
+ 0x59340400, 0x82000580, 0x00000703, 0x040007eb,
+ 0x83340580, 0x0010e85a, 0x0400000c, 0x4d3c0000,
+ 0x417a7800, 0x42028000, 0x00000029, 0x0201f800,
+ 0x00110684, 0x5c027800, 0x42003000, 0x00000017,
+ 0x0201f800, 0x0010bc92, 0x42000000, 0x0010d53e,
+ 0x0201f800, 0x0010c50a, 0x0201f800, 0x0010203c,
+ 0x59240400, 0x8c00050a, 0x04020012, 0x42003000,
+ 0x00000006, 0x42028000, 0x00000029, 0x4933c857,
+ 0x4a026403, 0x00000001, 0x4a026203, 0x00000007,
+ 0x41782800, 0x0401f003, 0x42028000, 0x00000046,
+ 0x0201f800, 0x0010b651, 0x0201f000, 0x0010bcbf,
+ 0x4933c857, 0x4a026403, 0x00000001, 0x42000800,
+ 0x0000000b, 0x0201f800, 0x00104736, 0x4a026203,
+ 0x00000001, 0x0201f000, 0x0010707f, 0x4933c857,
+ 0x42000800, 0x00000009, 0x0201f800, 0x00104736,
+ 0x4a026403, 0x00000005, 0x0401f7f5, 0x0201f800,
+ 0x0010b8a7, 0x04020213, 0x0201f800, 0x00101dda,
+ 0x04020210, 0x0401fa54, 0x040207be, 0x4a026403,
+ 0x00000020, 0x4a026203, 0x00000001, 0x0201f000,
+ 0x0010707f, 0x0201f800, 0x00101dda, 0x04020205,
+ 0x4a026403, 0x00000023, 0x4a026203, 0x00000001,
+ 0x0201f000, 0x0010707f, 0x0201f800, 0x0010b8a7,
+ 0x02000800, 0x00101dda, 0x040201fa, 0x0401fa3e,
+ 0x040207a8, 0x59cc0807, 0x82040500, 0x00ffff00,
+ 0x0402000a, 0x59340212, 0x82000500, 0x0000ff00,
+ 0x04000006, 0x5932481c, 0x59240005, 0x82000500,
+ 0x000000ff, 0x0401f003, 0x5932481c, 0x59240005,
+ 0x82040d00, 0x00ffffff, 0x80040580, 0x04020014,
+ 0x59cc1408, 0x0201f800, 0x0010a0ab, 0x04000028,
+ 0x591c0202, 0x82001580, 0x0000ffff, 0x04000004,
+ 0x59cc1208, 0x80080580, 0x04020021, 0x591c000a,
+ 0x81340580, 0x0402001e, 0x591c0407, 0x82000580,
+ 0x00000007, 0x0402001a, 0x0401f02a, 0x59cc1208,
+ 0x82080580, 0x0000ffff, 0x0400000f, 0x0201f800,
+ 0x0010a0ab, 0x04000012, 0x59cc1408, 0x591c0202,
+ 0x80080580, 0x04020027, 0x831c0580, 0xffffffff,
+ 0x04000021, 0x591c000a, 0x81340580, 0x04020021,
+ 0x0401f010, 0x59cc1408, 0x41780000, 0x0201f800,
+ 0x0010b377, 0x040207f5, 0x0401f017, 0x4a026403,
+ 0x00000026, 0x4a02621b, 0x00001700, 0x59cc1208,
+ 0x82081580, 0x0000ffff, 0x04020791, 0x0401f00e,
+ 0x591c0407, 0x82000580, 0x00000007, 0x040207f4,
+ 0x591c0403, 0x82000580, 0x00000024, 0x04020006,
+ 0x4d300000, 0x411e6000, 0x0201f800, 0x00020afe,
+ 0x5c026000, 0x4a026403, 0x00000025, 0x0401f780,
+ 0x59cc1408, 0x41780000, 0x0201f800, 0x0010b377,
+ 0x040207e3, 0x0401f7f8, 0x4933c857, 0x4d3c0000,
+ 0x42027800, 0x00000001, 0x0201f800, 0x0010472b,
+ 0x5c027800, 0x4c580000, 0x4200b000, 0x00000002,
+ 0x83a81c00, 0x00000002, 0x83cc1400, 0x0000000b,
+ 0x0201f800, 0x00108fc3, 0x5c00b000, 0x04000004,
+ 0x4a026403, 0x00000031, 0x0401f765, 0x0201f800,
+ 0x00020afe, 0x4200b000, 0x00000002, 0x83a81c00,
+ 0x00000000, 0x83cc1400, 0x0000000d, 0x0201f800,
+ 0x00108fc3, 0x04020010, 0x0201f800, 0x001065bb,
+ 0x0400000d, 0x59300407, 0x82000580, 0x00000001,
+ 0x04020009, 0x59300403, 0x82000580, 0x00000002,
+ 0x04020005, 0x5930000a, 0x81340580, 0x02000800,
+ 0x00020afe, 0x0201f800, 0x001052aa, 0x0402000f,
+ 0x0201f800, 0x001052c6, 0x04020008, 0x4a03501a,
+ 0x00000001, 0x4202d800, 0x00000001, 0x0201f800,
+ 0x00105204, 0x0401f005, 0x42000000, 0x00000001,
+ 0x0201f800, 0x0010527b, 0x1c01f000, 0x0201f800,
+ 0x00101dda, 0x04020157, 0x0401f99b, 0x04020705,
+ 0x493a6403, 0x0401fa0b, 0x04020004, 0x4a026403,
+ 0x0000002b, 0x0401f72e, 0x4a026403, 0x0000002c,
+ 0x0401f72b, 0x4933c857, 0x0201f800, 0x00106760,
+ 0x04020148, 0x0201f800, 0x00101dda, 0x04020145,
+ 0x0201f800, 0x00104b75, 0x040206f2, 0x59cc0408,
+ 0x4802641a, 0x59cc0208, 0x4802621a, 0x59cc0807,
+ 0x59340002, 0x82000500, 0x00ffffff, 0x80040580,
+ 0x04000023, 0x5932481c, 0x59240005, 0x80040580,
+ 0x04020032, 0x59cc1408, 0x0201f800, 0x0010a0ab,
+ 0x04000034, 0x831c0580, 0xffffffff, 0x04000007,
+ 0x0201f800, 0x0010b7c7, 0x0400002e, 0x0201f800,
+ 0x0010bc71, 0x0400002b, 0x491e6027, 0x4a026403,
+ 0x00000036, 0x59340200, 0x8c00050e, 0x0400000b,
+ 0x831c0580, 0xffffffff, 0x04000118, 0x591c0203,
+ 0x82001580, 0x00000004, 0x04020004, 0x4a026006,
+ 0x00000001, 0x1c01f000, 0x0401f110, 0x59cc1208,
+ 0x82080580, 0x0000ffff, 0x04000009, 0x0201f800,
+ 0x0010a0ab, 0x04000013, 0x591c0202, 0x59cc0c08,
+ 0x80040580, 0x0402000f, 0x0401f7db, 0x59cc1408,
+ 0x42000000, 0x00000001, 0x0201f800, 0x0010b377,
+ 0x04000008, 0x0401f7d4, 0x4803c856, 0x4a02641b,
+ 0x00000009, 0x4a02621b, 0x00001500, 0x0401f006,
+ 0x4803c856, 0x4a02641b, 0x00000003, 0x4a02621b,
+ 0x00001700, 0x4a026403, 0x00000037, 0x0401f0ef,
+ 0x4933c857, 0x0201f800, 0x00106760, 0x040200f1,
+ 0x0201f800, 0x00101dda, 0x040200ee, 0x0201f800,
+ 0x00104b75, 0x0402069b, 0x0201f800, 0x00104a92,
+ 0x04000055, 0x59cc0407, 0x4802641a, 0x59cc1207,
+ 0x480a621a, 0x82080580, 0x0000ffff, 0x04000005,
+ 0x0201f800, 0x0010a0ab, 0x04000043, 0x0401f00a,
+ 0x59cc1407, 0x42000000, 0x00000001, 0x0201f800,
+ 0x0010b377, 0x0400003c, 0x831c0580, 0xffffffff,
+ 0x04000039, 0x59cc0c07, 0x591c0202, 0x80040580,
+ 0x04020035, 0x0201f800, 0x0010bc71, 0x04000032,
+ 0x591c0415, 0x8c000516, 0x0402003d, 0x4d300000,
+ 0x411e6000, 0x0201f800, 0x00109794, 0x5c026000,
+ 0x4a023a03, 0x00000007, 0x59cc0c09, 0x82040d00,
+ 0x0000ff00, 0x840409c0, 0x82040580, 0x00000001,
+ 0x0400000c, 0x82040580, 0x00000005, 0x0400000e,
+ 0x82040580, 0x00000007, 0x04020015, 0x42000000,
+ 0x0010d526, 0x0201f800, 0x0010c50a, 0x0401f00a,
+ 0x42000000, 0x0010d525, 0x0201f800, 0x0010c50a,
+ 0x0401f008, 0x42000000, 0x0010d524, 0x0201f800,
+ 0x0010c50a, 0x591c0009, 0x80000540, 0x04000004,
+ 0x59cc2808, 0x0201f000, 0x0010b7db, 0x4803c856,
+ 0x4a02641b, 0x00000009, 0x4a02621b, 0x00002a00,
+ 0x0401f006, 0x4803c856, 0x4a02641b, 0x00000003,
+ 0x4a02621b, 0x00000300, 0x4a026403, 0x0000003b,
+ 0x0401f08e, 0x4803c856, 0x4a02641b, 0x0000000b,
+ 0x4a02621b, 0x00000000, 0x0401f7f8, 0x4803c856,
+ 0x4a02641b, 0x00000007, 0x4a02621b, 0x00000000,
+ 0x0401f7f2, 0x59cc0001, 0x82000580, 0x00fffffe,
+ 0x04020084, 0x4c080000, 0x0201f800, 0x00104aac,
+ 0x04000029, 0x0201f800, 0x00104a72, 0x0201f800,
+ 0x0010b94c, 0x04020021, 0x5932481c, 0x59240200,
+ 0x82000540, 0x000000e0, 0x48024a00, 0x59a80221,
+ 0x82000540, 0x00000003, 0x48035221, 0x59a8001e,
+ 0x800000d0, 0x59a80815, 0x82040d00, 0x000000ff,
+ 0x80041540, 0x480b5015, 0x42000800, 0x00000003,
+ 0x0201f800, 0x001071d7, 0x497b5023, 0x8d0e1d20,
+ 0x04000004, 0x4a032804, 0x000007d0, 0x0401f001,
+ 0x0201f800, 0x00020afe, 0x0201f800, 0x00101eb6,
+ 0x5c001000, 0x1c01f000, 0x0201f800, 0x0010b96e,
+ 0x0401f7fc, 0x5c001000, 0x0201f000, 0x00020afe,
+ 0x0201f800, 0x00101dda, 0x04020052, 0x0201f800,
+ 0x0010b974, 0x4a026403, 0x00000047, 0x4a026203,
+ 0x00000001, 0x0201f000, 0x0010707f, 0x0201f800,
+ 0x00101dda, 0x04020047, 0x0201f800, 0x0010b974,
+ 0x4a026403, 0x00000047, 0x4a026203, 0x00000001,
+ 0x0201f000, 0x0010707f, 0x0201f800, 0x00101dda,
+ 0x0402003c, 0x0201f800, 0x0010b974, 0x0201f000,
+ 0x00020afe, 0x0401f83e, 0x04000036, 0x4a026403,
+ 0x0000004e, 0x4a026203, 0x00000001, 0x0201f000,
+ 0x0010707f, 0x0201f800, 0x00104b88, 0x040205dd,
+ 0x4a026403, 0x0000004f, 0x497a601d, 0x59cc0a06,
+ 0x82040d00, 0x000000ff, 0x800409c0, 0x04000604,
+ 0x82040580, 0x00000001, 0x04020005, 0x59cc0808,
+ 0x59a80005, 0x80040580, 0x040005fd, 0x82040580,
+ 0x00000002, 0x0402000a, 0x83cc1400, 0x0000000b,
+ 0x4200b000, 0x00000002, 0x83341c00, 0x00000006,
+ 0x0201f800, 0x00108fc3, 0x040005f1, 0x4a02601d,
+ 0x00000001, 0x0401f5ee, 0x0201f800, 0x00104b88,
+ 0x040205bc, 0x4a026403, 0x00000050, 0x59cc0207,
+ 0x4802601d, 0x0401f5e6, 0x4a026203, 0x00000001,
+ 0x42000800, 0x80000040, 0x0201f000, 0x00020a9f,
+ 0x4803c857, 0x42000000, 0x0010d532, 0x0201f800,
+ 0x0010c50a, 0x0201f000, 0x00020afe, 0x4d2c0000,
+ 0x4c500000, 0x4c580000, 0x4c540000, 0x59a80068,
+ 0x82000c80, 0x00000841, 0x0402102d, 0x0201f800,
+ 0x00100584, 0x0400002a, 0x492e6009, 0x59a80068,
+ 0x48025802, 0x82000400, 0x00000003, 0x80000104,
+ 0x83cca400, 0x00000006, 0x82000c80, 0x0000000a,
+ 0x04001015, 0x4a025811, 0x0000000a, 0x4200b000,
+ 0x0000000a, 0x832c0400, 0x00000006, 0x4000a800,
+ 0x0201f800, 0x0010c5dd, 0x412c7000, 0x800409c0,
+ 0x04020003, 0x49787001, 0x0401f00e, 0x0201f800,
+ 0x00100584, 0x0400000e, 0x492c7001, 0x40040000,
+ 0x0401f7ea, 0x48025811, 0x4000b000, 0x832c0400,
+ 0x00000006, 0x4000a800, 0x0201f800, 0x0010c5dd,
+ 0x82000540, 0x00000001, 0x0401f006, 0x497b5068,
+ 0x59325809, 0x0201f800, 0x001005b3, 0x80000580,
+ 0x5c00a800, 0x5c00b000, 0x5c00a000, 0x5c025800,
+ 0x1c01f000, 0x4d340000, 0x5932680a, 0x59343400,
+ 0x4933c857, 0x4937c857, 0x481bc857, 0x0201f800,
+ 0x00104b88, 0x5c026800, 0x1c01f000, 0x4933c857,
+ 0x4c600000, 0x4d3c0000, 0x4d440000, 0x4d340000,
+ 0x0401f870, 0x0402005a, 0x59cc0207, 0x82000d00,
+ 0x0000ff00, 0x900411c0, 0x59cc000a, 0x82000500,
+ 0x00ffffff, 0x80081540, 0x480a601d, 0x8c040d18,
+ 0x0400001a, 0x42003000, 0x00000008, 0x0201f800,
+ 0x0010bc82, 0x42000000, 0x0010d53d, 0x0201f800,
+ 0x0010c50a, 0x59240400, 0x8c00050a, 0x04020009,
+ 0x42002800, 0x00000002, 0x42003000, 0x00000024,
+ 0x42028000, 0x00000046, 0x0201f800, 0x0010b651,
+ 0x4200c000, 0x00000001, 0x417a7800, 0x0201f800,
+ 0x00101d69, 0x0401f039, 0x8c040d1a, 0x04000034,
+ 0x59cc000a, 0x59cc3800, 0x821c3d00, 0x00ffffff,
+ 0x0201f800, 0x00106463, 0x02000800, 0x00104bd5,
+ 0x0402002b, 0x5930001c, 0x4c000000, 0x0201f800,
+ 0x00104bcc, 0x4926601c, 0x5930000a, 0x4c000000,
+ 0x59240c00, 0x8c040d0a, 0x0402000f, 0x59340c03,
+ 0x59341802, 0x820c1d00, 0x00ffffff, 0x58002403,
+ 0x42002800, 0x00000004, 0x42003000, 0x00000024,
+ 0x42028000, 0x00000046, 0x41301000, 0x0201f800,
+ 0x0010b661, 0x4936600a, 0x42003000, 0x00000009,
+ 0x0201f800, 0x0010bc8a, 0x42000000, 0x0010d53d,
+ 0x0201f800, 0x0010c50a, 0x417a7800, 0x4178c000,
+ 0x0201f800, 0x00101d69, 0x5c000000, 0x4802600a,
+ 0x5c000000, 0x4802601c, 0x0401f004, 0x82000540,
+ 0x00000001, 0x0401f002, 0x80000580, 0x5c026800,
+ 0x5c028800, 0x5c027800, 0x5c00c000, 0x1c01f000,
+ 0x4933c857, 0x59cc0206, 0x82000480, 0x00000010,
+ 0x04021006, 0x4a02621b, 0x00000000, 0x82000540,
+ 0x00000001, 0x0401f002, 0x80000580, 0x1c01f000,
+ 0x4933c857, 0x4a02621b, 0x00000000, 0x59cc0407,
+ 0x82000500, 0x0000ff00, 0x82000580, 0x00000800,
+ 0x0402000d, 0x59cc0206, 0x59a80868, 0x80040480,
+ 0x0400100a, 0x59cc0006, 0x82000500, 0x00ff0000,
+ 0x82000d80, 0x00140000, 0x04000003, 0x82000d80,
+ 0x00100000, 0x1c01f000, 0x42000000, 0x0010d532,
+ 0x0201f800, 0x0010c50a, 0x82000540, 0x00000001,
+ 0x0401f7f9, 0x59300403, 0x82003480, 0x00000057,
+ 0x02021800, 0x0010032f, 0x83383580, 0x00000013,
+ 0x04020007, 0x4803c857, 0x4c000000, 0x0201f800,
+ 0x0010bd7f, 0x5c000000, 0x0c01f018, 0x4933c857,
+ 0x493bc857, 0x83383580, 0x00000027, 0x04000005,
+ 0x83383580, 0x00000014, 0x02020800, 0x0010032f,
+ 0x493bc857, 0x4937c857, 0x0201f800, 0x0010bd7c,
+ 0x0201f800, 0x00104a72, 0x42000800, 0x00000007,
+ 0x0201f800, 0x00104736, 0x0201f800, 0x001070fc,
+ 0x0201f000, 0x00108253, 0x0010b016, 0x0010b01f,
+ 0x0010b016, 0x0010b016, 0x0010b016, 0x0010b01f,
+ 0x0010b02a, 0x0010b0cc, 0x0010b087, 0x0010b0cc,
+ 0x0010b0a2, 0x0010b0cc, 0x0010b0a9, 0x0010b0cc,
+ 0x0010b0ae, 0x0010b0cc, 0x0010b0ae, 0x0010b0cc,
+ 0x0010b0cc, 0x0010b016, 0x0010b016, 0x0010b016,
+ 0x0010b016, 0x0010b016, 0x0010b016, 0x0010b016,
+ 0x0010b016, 0x0010b016, 0x0010b016, 0x0010b016,
+ 0x0010b01f, 0x0010b016, 0x0010b0cc, 0x0010b016,
+ 0x0010b016, 0x0010b0cc, 0x0010b016, 0x0010b0cc,
+ 0x0010b0cc, 0x0010b016, 0x0010b016, 0x0010b016,
+ 0x0010b016, 0x0010b0cc, 0x0010b0cc, 0x0010b016,
+ 0x0010b0cc, 0x0010b0cc, 0x0010b016, 0x0010b024,
+ 0x0010b016, 0x0010b016, 0x0010b016, 0x0010b016,
+ 0x0010b0b1, 0x0010b0cc, 0x0010b016, 0x0010b016,
+ 0x0010b0b2, 0x0010b0cc, 0x0010b016, 0x0010b016,
+ 0x0010b016, 0x0010b016, 0x0010b016, 0x0010b016,
+ 0x0010b016, 0x0010b016, 0x0010b016, 0x0010b018,
+ 0x0010b016, 0x0010b018, 0x0010b016, 0x0010b016,
+ 0x0010b018, 0x0010b016, 0x0010b016, 0x0010b016,
+ 0x0010b018, 0x0010b018, 0x0010b018, 0x0010b016,
+ 0x0010b016, 0x0010b016, 0x0010b016, 0x0010b016,
+ 0x0010b018, 0x0010b016, 0x0010b016, 0x0010b016,
+ 0x0010b016, 0x0010b016, 0x0010b016, 0x0010b016,
+ 0x0010b016, 0x0010b016, 0x0201f800, 0x0010032f,
+ 0x4d2c0000, 0x59325809, 0x0201f800, 0x001005b3,
+ 0x5c025800, 0x0201f000, 0x00020afe, 0x59a80030,
+ 0x48026006, 0x4a026203, 0x00000002, 0x1c01f000,
+ 0x4d3c0000, 0x417a7800, 0x0201f800, 0x0010472b,
+ 0x5c027800, 0x0401f0a3, 0x0201f800, 0x00104b91,
+ 0x040000a0, 0x59a80221, 0x8c000508, 0x04000012,
+ 0x5932680a, 0x4c580000, 0x4200b000, 0x00000002,
+ 0x83a81c00, 0x00000002, 0x83341400, 0x00000006,
+ 0x0201f800, 0x00108fc3, 0x80000540, 0x5c00b000,
+ 0x04020090, 0x59340200, 0x8400051a, 0x48026a00,
+ 0x0401f034, 0x599c0017, 0x8c00050a, 0x0402000a,
+ 0x4d3c0000, 0x417a7800, 0x0201f800, 0x0010472b,
+ 0x5c027800, 0x42000800, 0x00000007, 0x0201f800,
+ 0x00104736, 0x59340212, 0x82000500, 0x0000ff00,
+ 0x04020017, 0x83440d80, 0x000007fe, 0x04020079,
+ 0x0201f800, 0x0010203c, 0x59a80221, 0x8c000514,
+ 0x04000074, 0x83240580, 0x0010d5ef, 0x04020006,
+ 0x4d300000, 0x0201f800, 0x00101e89, 0x5c026000,
+ 0x0401f06c, 0x59a82221, 0x8c102514, 0x04000069,
+ 0x0201f800, 0x0010201c, 0x0401f066, 0x599c0017,
+ 0x8c00050a, 0x04020063, 0x599c0019, 0x8c00050e,
+ 0x04020060, 0x416c0000, 0x82000580, 0x00000002,
+ 0x04020004, 0x59a8001c, 0x80000000, 0x4803501c,
+ 0x42000800, 0x00000003, 0x0201f800, 0x00104736,
0x4a026407, 0x00000001, 0x4a026203, 0x00000001,
- 0x4a026403, 0x00000003, 0x0201f000, 0x00106d1c,
- 0x0201f800, 0x00104a38, 0x04020028, 0x42000800,
- 0x00000006, 0x0401f827, 0x0401f024, 0x42000800,
- 0x00000004, 0x0201f800, 0x001045ea, 0x0401f780,
- 0x0201f800, 0x0010491c, 0x0401f01c, 0x0401f01b,
- 0x59300827, 0x4807c857, 0x800409c0, 0x04000017,
- 0x5804001d, 0x81300580, 0x04020014, 0x4978081d,
- 0x58041415, 0x8c081516, 0x04000010, 0x8c081514,
- 0x0400000e, 0x84081516, 0x48080c15, 0x58065809,
- 0x812e59c0, 0x04000009, 0x492fc857, 0x4d300000,
- 0x40066000, 0x417a7800, 0x0201f800, 0x00020a86,
- 0x5c026000, 0x0401f001, 0x0201f000, 0x00020b9d,
- 0x4933c857, 0x4807c857, 0x0201f800, 0x001045ea,
- 0x4d3c0000, 0x417a7800, 0x0201f800, 0x001045df,
- 0x5c027800, 0x5934000a, 0x84000520, 0x4802680a,
- 0x0201f000, 0x0010491c, 0x59340400, 0x4803c857,
- 0x80000110, 0x82003480, 0x0000000c, 0x02021800,
- 0x0010032e, 0x83383580, 0x00000015, 0x04020002,
- 0x0c01f006, 0x83383580, 0x00000016, 0x02020800,
- 0x0010032e, 0x0c01f00d, 0x0010875e, 0x0010875e,
- 0x0010875e, 0x0010875e, 0x0010875e, 0x0010875e,
- 0x0010ac8e, 0x0010ac62, 0x0010875e, 0x0010875e,
- 0x0010875e, 0x0010875e, 0x0010875e, 0x0010875e,
- 0x0010875e, 0x0010875e, 0x0010875e, 0x0010875e,
- 0x0010ac8e, 0x0010ac95, 0x0010875e, 0x0010875e,
- 0x0010875e, 0x0010875e, 0x4933c857, 0x5932481c,
- 0x59240400, 0x8c000508, 0x0400001b, 0x813669c0,
- 0x04000019, 0x59340212, 0x82000500, 0x0000ff00,
- 0x04000015, 0x599c0019, 0x8c00050e, 0x04020012,
- 0x4d3c0000, 0x417a7800, 0x0201f800, 0x001045df,
- 0x5c027800, 0x42000800, 0x00000003, 0x0201f800,
- 0x001045ea, 0x4a026407, 0x00000001, 0x4a026203,
- 0x00000001, 0x4a026403, 0x00000002, 0x0201f000,
- 0x00106d1c, 0x59cc0001, 0x59340802, 0x80040580,
- 0x82000500, 0x00ffffff, 0x02020000, 0x00020b9d,
- 0x59345002, 0x0201f800, 0x001042dd, 0x482a6802,
- 0x0201f000, 0x00020b9d, 0x4933c857, 0x59303403,
- 0x82183580, 0x0000001e, 0x02000000, 0x00020b9d,
- 0x1c01f000, 0x4933c857, 0x0201f800, 0x00108b22,
- 0x02020000, 0x00020b9d, 0x4a026203, 0x00000001,
- 0x4a026403, 0x00000001, 0x0201f000, 0x00106d1c,
- 0x493bc857, 0x83380580, 0x00000051, 0x0402000b,
- 0x0201f800, 0x00107226, 0x02020000, 0x00107f37,
- 0x59300203, 0x82000580, 0x00000002, 0x0400006e,
- 0x0201f800, 0x0010032e, 0x83380580, 0x00000027,
- 0x04000014, 0x83380580, 0x00000048, 0x04000006,
- 0x83380580, 0x00000014, 0x0400000e, 0x02020800,
- 0x0010032e, 0x0201f800, 0x00107226, 0x02020000,
- 0x00107f37, 0x59300203, 0x82000580, 0x00000004,
- 0x02000000, 0x00020c9d, 0x0201f800, 0x0010032e,
- 0x4933c857, 0x59300403, 0x82000c80, 0x00000044,
- 0x02021800, 0x0010032e, 0x82000480, 0x00000040,
- 0x02001800, 0x0010032e, 0x40027000, 0x4803c857,
- 0x0c01f001, 0x0010acd5, 0x0010acd7, 0x0010acd7,
- 0x0010acf2, 0x0201f800, 0x0010032e, 0x0201f800,
- 0x00106d91, 0x59325809, 0x812e59c0, 0x04000016,
- 0x832c0500, 0x00ff0000, 0x04000013, 0x4a026203,
- 0x00000002, 0x5932680a, 0x59340200, 0x8c00050e,
- 0x0402000d, 0x42028000, 0x00000004, 0x0201f800,
- 0x0010b175, 0x497a6009, 0x59300006, 0x80000540,
- 0x04020003, 0x59a8002b, 0x48026006, 0x4a026203,
- 0x00000007, 0x1c01f000, 0x0201f800, 0x00106d91,
- 0x0201f800, 0x0010989f, 0x02000000, 0x00107eb4,
- 0x59325809, 0x0201f800, 0x00100594, 0x0201f000,
- 0x00107eb4, 0x0201f800, 0x0010032e, 0x59325809,
- 0x592c040b, 0x8c000502, 0x04000007, 0x4a026203,
- 0x00000007, 0x42027000, 0x00000043, 0x0201f000,
- 0x00020bc1, 0x4a026203, 0x00000004, 0x1c01f000,
- 0x0201f800, 0x0010b3b6, 0x02000000, 0x00020c9b,
- 0x1c01f000, 0x4a026203, 0x00000001, 0x4a026403,
- 0x00000041, 0x42027800, 0x80002042, 0x0201f000,
- 0x00020b3e, 0x83380580, 0x00000051, 0x04000006,
- 0x83380580, 0x00000041, 0x02020800, 0x0010032e,
- 0x1c01f000, 0x0201f800, 0x00020afd, 0x0201f800,
- 0x0010b3fa, 0x0201f000, 0x00020b9d, 0x83380480,
- 0x00000052, 0x02021800, 0x0010032e, 0x83380480,
- 0x00000049, 0x02001800, 0x0010032e, 0x0c01f001,
- 0x0010ad3b, 0x0010ad65, 0x0010ad39, 0x0010ad39,
- 0x0010ad39, 0x0010ad39, 0x0010ad65, 0x0010ad39,
- 0x0010ad86, 0x0201f800, 0x0010032e, 0x59325809,
- 0x592c040b, 0x8c00051e, 0x04000013, 0x82000d00,
- 0x000000c0, 0x82040d80, 0x00000080, 0x04000016,
- 0x59300804, 0x8c040d18, 0x04020013, 0x59300415,
- 0x8c000516, 0x04000004, 0x4a026203, 0x00000007,
- 0x0401f018, 0x42027000, 0x00000041, 0x0201f000,
- 0x00020cbc, 0x4a026203, 0x00000007, 0x497a6006,
- 0x59300415, 0x8c000516, 0x0402000e, 0x0201f000,
- 0x00020afd, 0x59325809, 0x592c0c0b, 0x8c040d1a,
- 0x04020005, 0x0201f800, 0x00020afd, 0x0201f000,
- 0x00020b9d, 0x0201f800, 0x0010b3b6, 0x040007fa,
- 0x1c01f000, 0x0201f800, 0x00106d71, 0x59325809,
- 0x5932680a, 0x59340200, 0x8c00050e, 0x0400000e,
- 0x592c040b, 0x82000500, 0x000000c0, 0x82000580,
- 0x00000080, 0x04000005, 0x592c0010, 0x59301816,
- 0x800c1c80, 0x480e6016, 0x4a026203, 0x00000002,
- 0x0401f00d, 0x42028000, 0x00000004, 0x0401fbfa,
- 0x59300006, 0x80000540, 0x04020004, 0x59a8002b,
- 0x800000c2, 0x48026006, 0x497a6009, 0x4a026203,
- 0x00000007, 0x1c01f000, 0x4933c857, 0x0201f800,
- 0x00107226, 0x02020800, 0x0010032e, 0x59300203,
- 0x82000580, 0x00000002, 0x0400078b, 0x0201f800,
- 0x0010032e, 0x4a026203, 0x00000007, 0x497a6006,
- 0x0201f000, 0x00020afd, 0x4a026203, 0x00000007,
- 0x497a6006, 0x0201f000, 0x00020af8, 0x59300415,
- 0x8c00051c, 0x02020000, 0x00020cad, 0x59325809,
- 0x592c2010, 0x40080000, 0x80102480, 0x59300016,
- 0x80102400, 0x48126016, 0x0201f000, 0x00020cad,
- 0x8c040d0e, 0x0402000a, 0x4a026203, 0x00000006,
- 0x0401f823, 0x59300028, 0x80000540, 0x02020800,
- 0x00100b16, 0x0201f000, 0x00020af8, 0x4a026203,
- 0x00000002, 0x1c01f000, 0x42000800, 0x00000001,
- 0x0201f800, 0x00100b16, 0x82040580, 0x00000001,
- 0x02000000, 0x00020cb4, 0x0401f7d8, 0x59300415,
- 0x8c00051c, 0x04000006, 0x0201f800, 0x0010089a,
- 0x02000000, 0x00020ca6, 0x1c01f000, 0x59300012,
- 0x80000540, 0x04020005, 0x0201f800, 0x0010089a,
- 0x02000000, 0x00020ca6, 0x1c01f000, 0x492fc857,
- 0x480bc857, 0x8c08153e, 0x04000006, 0x80081080,
- 0x80081000, 0x42000800, 0x00000009, 0x0401f003,
- 0x42000800, 0x00000015, 0x480a580c, 0x1c01f000,
- 0x83380580, 0x00000013, 0x04000005, 0x83380580,
- 0x00000014, 0x02020800, 0x0010032e, 0x59300415,
- 0x8c000516, 0x02000800, 0x0010032e, 0x1c01f000,
- 0x0201f800, 0x0010032e, 0x59300009, 0x80000540,
- 0x02020800, 0x0010032e, 0x1c01f000, 0x59300415,
- 0x8c000516, 0x02000800, 0x0010032e, 0x1c01f000,
- 0x4a026203, 0x00000004, 0x493a6403, 0x42000800,
- 0x80002001, 0x0201f000, 0x00020b3e, 0x4a026203,
- 0x00000003, 0x493a6403, 0x0201f800, 0x00020172,
- 0x59325809, 0x592c040b, 0x8c00051e, 0x04000012,
- 0x82000500, 0x000000c0, 0x82000580, 0x00000080,
- 0x04000011, 0x59300415, 0x8c000512, 0x0402000a,
- 0x8c000510, 0x04020008, 0x592c040d, 0x80000540,
- 0x04020005, 0x82080d40, 0x80003065, 0x0201f000,
- 0x00020b30, 0x82080d40, 0x80002065, 0x0201f000,
- 0x00020b30, 0x82080d40, 0x80002042, 0x0201f000,
- 0x00020b30, 0x4933c857, 0x493bc857, 0x83380480,
- 0x00000044, 0x02021800, 0x0010032e, 0x83380480,
- 0x00000041, 0x02001800, 0x0010032e, 0x0c01f001,
- 0x0010ae2b, 0x0010ae3b, 0x0010ae50, 0x59325809,
- 0x592c040b, 0x8c00051e, 0x0400001d, 0x82001d00,
- 0x000000c0, 0x820c1d80, 0x000000c0, 0x04000018,
- 0x4a026203, 0x00000001, 0x493a6403, 0x42000800,
- 0x80002042, 0x0201f000, 0x00020b3e, 0x59325809,
- 0x592c040b, 0x8c00051e, 0x0400000d, 0x82001d00,
- 0x000000c0, 0x820c1d80, 0x000000c0, 0x04000008,
- 0x4a026203, 0x00000001, 0x493a6403, 0x42000800,
- 0x80002001, 0x0201f000, 0x00020b3e, 0x497a6009,
- 0x497a6006, 0x42028000, 0x00000004, 0x0401f326,
- 0x59325809, 0x592c040b, 0x8c00051e, 0x040007f8,
- 0x82001d00, 0x000000c0, 0x820c1d80, 0x000000c0,
- 0x040007f3, 0x4a026203, 0x00000003, 0x493a6403,
- 0x0201f800, 0x00020172, 0x82080d40, 0x80002065,
- 0x0201f000, 0x00020b30, 0x4933c857, 0x493bc857,
- 0x83380580, 0x00000085, 0x04000006, 0x83380580,
- 0x00000088, 0x0400000a, 0x0201f800, 0x0010032e,
- 0x4a026203, 0x00000009, 0x493a6403, 0x42000800,
- 0x8000004b, 0x0201f000, 0x00020b3e, 0x83300580,
- 0x0011152c, 0x02020800, 0x0010032e, 0x4d1c0000,
- 0x813669c0, 0x04000004, 0x0201f800, 0x0010b3b0,
- 0x04020053, 0x59cc1404, 0x41780000, 0x0401f852,
- 0x0400001a, 0x59cc0204, 0x82001580, 0x0000ffff,
- 0x04000004, 0x591c1402, 0x80080580, 0x04020013,
- 0x591c0407, 0x82000500, 0x0000001f, 0x82002580,
- 0x00000006, 0x04000007, 0x82002580, 0x00000004,
- 0x04000031, 0x82002580, 0x00000011, 0x04020007,
- 0x497a3a05, 0x42002000, 0x00000054, 0x0201f800,
- 0x0010800d, 0x0401f036, 0x59240400, 0x8c00050a,
- 0x04020004, 0x42023800, 0xffffffff, 0x0401f7f6,
- 0x813669c0, 0x04020011, 0x59cc0001, 0x59cc3800,
- 0x821c3d00, 0x00ffffff, 0x4c1c0000, 0x0201f800,
- 0x00106134, 0x5c003800, 0x04020025, 0x0201f800,
- 0x00101fc9, 0x0201f800, 0x00104628, 0x04020020,
- 0x4926601c, 0x4936600a, 0x4a026403, 0x00000087,
- 0x59cc1204, 0x82081580, 0x0000ffff, 0x04020003,
- 0x4a026403, 0x00000086, 0x4d2c0000, 0x0201f800,
- 0x0010b78d, 0x0201f800, 0x00104d7c, 0x5c025800,
- 0x0401f00f, 0x591c0403, 0x82000580, 0x00000038,
- 0x040007d1, 0x591c0203, 0x82000580, 0x00000007,
- 0x040207d2, 0x4d300000, 0x411e6000, 0x0201f800,
- 0x00107eb4, 0x5c026000, 0x0401f7cc, 0x5c023800,
- 0x1c01f000, 0x4933c857, 0x480bc857, 0x4c5c0000,
- 0x4000b800, 0x42002800, 0x00111584, 0x41300000,
- 0x80140580, 0x0400001f, 0x58140203, 0x82000580,
- 0x00000000, 0x0400001b, 0x58140202, 0x80080580,
- 0x04020018, 0x58141c07, 0x820c0580, 0x00000005,
- 0x04000014, 0x8c5cbd00, 0x04000004, 0x820c0580,
- 0x00000007, 0x0400000f, 0x820c0580, 0x00000009,
- 0x04000039, 0x5930200a, 0x5814000a, 0x800001c0,
- 0x0400000e, 0x82001d80, 0x0010e23c, 0x0400000b,
- 0x801021c0, 0x04000003, 0x80100580, 0x04000012,
- 0x82142c00, 0x0000002c, 0x41540000, 0x80140480,
- 0x0402101e, 0x0401f7da, 0x58140027, 0x801021c0,
- 0x04000005, 0x58102002, 0x82102500, 0x00ffffff,
- 0x0401f7f2, 0x8c5cbd00, 0x040207f2, 0x59302027,
- 0x0401f7ee, 0x40163800, 0x8c5cbd00, 0x04000008,
- 0x4c080000, 0x4c140000, 0x0201f800, 0x0010b71c,
- 0x5c002800, 0x5c001000, 0x040007e6, 0x591c000a,
- 0x800001c0, 0x04020003, 0x5930000a, 0x4802380a,
- 0x81300540, 0x0401f00a, 0x8c5cbd00, 0x04000008,
- 0x40080800, 0x42023800, 0xffffffff, 0x0201f800,
- 0x00104d86, 0x040007f2, 0x80000580, 0x5c00b800,
- 0x1c01f000, 0x58141808, 0x8c0c1d10, 0x040207d1,
- 0x0401f7c5, 0x4933c857, 0x83300580, 0x00111500,
- 0x0402003e, 0x4a026203, 0x00000000, 0x83380580,
- 0x00000013, 0x0402002d, 0x59300403, 0x82000580,
- 0x00000092, 0x02020800, 0x0010032e, 0x59a80052,
- 0x59325809, 0x812e59c0, 0x04000006, 0x812c0580,
- 0x02020800, 0x0010032e, 0x592c0000, 0x497a5800,
- 0x800001c0, 0x04000005, 0x48035052, 0x0201f800,
- 0x00107e2a, 0x0401f003, 0x497b5052, 0x497b5053,
- 0x812e59c0, 0x04000020, 0x592c0205, 0x82000580,
- 0x00000055, 0x02000000, 0x00100594, 0x83380580,
- 0x00000013, 0x04020005, 0x4a025a07, 0x00000000,
- 0x0201f000, 0x000203ef, 0x4a025a07, 0x00000031,
- 0x4a025812, 0x00000004, 0x4a025813, 0x000000ff,
- 0x0201f000, 0x000203ef, 0x83380580, 0x00000027,
+ 0x4a026403, 0x00000002, 0x0201f800, 0x0010707f,
+ 0x4ce80000, 0x4201d000, 0x00000001, 0x0201f800,
+ 0x0010688a, 0x5c01d000, 0x1c01f000, 0x59340200,
+ 0x8400051a, 0x48026a00, 0x0201f800, 0x00104b88,
+ 0x04000040, 0x0201f800, 0x00106d8c, 0x42000800,
+ 0x00000004, 0x0201f800, 0x00104736, 0x0201f800,
+ 0x0010bcb5, 0x04020037, 0x42000800, 0x00000005,
+ 0x0201f800, 0x00104736, 0x4a026407, 0x00000001,
+ 0x4a026203, 0x00000001, 0x4a026403, 0x00000003,
+ 0x0201f000, 0x0010707f, 0x0201f800, 0x00104b91,
+ 0x04020028, 0x42000800, 0x00000006, 0x0401f827,
+ 0x0401f024, 0x42000800, 0x00000004, 0x0201f800,
+ 0x00104736, 0x0401f780, 0x0201f800, 0x00104a72,
+ 0x0401f01c, 0x0401f01b, 0x59300827, 0x4807c857,
+ 0x800409c0, 0x04000017, 0x5804001d, 0x81300580,
+ 0x04020014, 0x4978081d, 0x58041415, 0x8c081516,
+ 0x04000010, 0x8c081514, 0x0400000e, 0x84081516,
+ 0x48080c15, 0x58065809, 0x812e59c0, 0x04000009,
+ 0x492fc857, 0x4d300000, 0x40066000, 0x417a7800,
+ 0x0201f800, 0x000209e1, 0x5c026000, 0x0401f001,
+ 0x0201f000, 0x00020afe, 0x4933c857, 0x4807c857,
+ 0x0201f800, 0x00104736, 0x4d3c0000, 0x417a7800,
+ 0x0201f800, 0x0010472b, 0x5c027800, 0x5934000a,
+ 0x84000520, 0x4802680a, 0x0201f000, 0x00104a72,
+ 0x59340400, 0x4803c857, 0x80000110, 0x82003480,
+ 0x0000000c, 0x02021800, 0x0010032f, 0x83383580,
+ 0x00000015, 0x04020002, 0x0c01f006, 0x83383580,
+ 0x00000016, 0x02020800, 0x0010032f, 0x0c01f00d,
+ 0x00108aa5, 0x00108aa5, 0x00108aa5, 0x00108aa5,
+ 0x00108aa5, 0x00108aa5, 0x0010b130, 0x0010b104,
+ 0x00108aa5, 0x00108aa5, 0x00108aa5, 0x00108aa5,
+ 0x00108aa5, 0x00108aa5, 0x00108aa5, 0x00108aa5,
+ 0x00108aa5, 0x00108aa5, 0x0010b130, 0x0010b137,
+ 0x00108aa5, 0x00108aa5, 0x00108aa5, 0x00108aa5,
+ 0x4933c857, 0x5932481c, 0x59240400, 0x8c000508,
+ 0x0400001b, 0x813669c0, 0x04000019, 0x59340212,
+ 0x82000500, 0x0000ff00, 0x04000015, 0x599c0019,
+ 0x8c00050e, 0x04020012, 0x4d3c0000, 0x417a7800,
+ 0x0201f800, 0x0010472b, 0x5c027800, 0x42000800,
+ 0x00000003, 0x0201f800, 0x00104736, 0x4a026407,
+ 0x00000001, 0x4a026203, 0x00000001, 0x4a026403,
+ 0x00000002, 0x0201f000, 0x0010707f, 0x59cc0001,
+ 0x59340802, 0x80040580, 0x82000500, 0x00ffffff,
+ 0x02020000, 0x00020afe, 0x59345002, 0x0201f800,
+ 0x001043ee, 0x482a6802, 0x0201f000, 0x00020afe,
+ 0x4933c857, 0x59303403, 0x82183580, 0x0000001e,
+ 0x02000000, 0x00020afe, 0x1c01f000, 0x4933c857,
+ 0x0201f800, 0x00108e72, 0x02020000, 0x00020afe,
+ 0x4a026203, 0x00000001, 0x4a026403, 0x00000001,
+ 0x0201f000, 0x0010707f, 0x493bc857, 0x83380580,
+ 0x00000051, 0x0402000b, 0x0201f800, 0x00107595,
+ 0x02020000, 0x001082d6, 0x59300203, 0x82000580,
+ 0x00000002, 0x0400006e, 0x0201f800, 0x0010032f,
+ 0x83380580, 0x00000027, 0x04000014, 0x83380580,
+ 0x00000048, 0x04000006, 0x83380580, 0x00000014,
+ 0x0400000e, 0x02020800, 0x0010032f, 0x0201f800,
+ 0x00107595, 0x02020000, 0x001082d6, 0x59300203,
+ 0x82000580, 0x00000004, 0x02000000, 0x00020bfe,
+ 0x0201f800, 0x0010032f, 0x4933c857, 0x59300403,
+ 0x82000c80, 0x00000044, 0x02021800, 0x0010032f,
+ 0x82000480, 0x00000040, 0x02001800, 0x0010032f,
+ 0x40027000, 0x4803c857, 0x0c01f001, 0x0010b177,
+ 0x0010b179, 0x0010b179, 0x0010b194, 0x0201f800,
+ 0x0010032f, 0x0201f800, 0x001070fc, 0x59325809,
+ 0x812e59c0, 0x04000016, 0x832c0500, 0x00ff0000,
+ 0x04000013, 0x4a026203, 0x00000002, 0x5932680a,
+ 0x59340200, 0x8c00050e, 0x0402000d, 0x42028000,
+ 0x00000004, 0x0201f800, 0x0010b634, 0x497a6009,
+ 0x59300006, 0x80000540, 0x04020003, 0x59a80031,
+ 0x48026006, 0x4a026203, 0x00000007, 0x1c01f000,
+ 0x0201f800, 0x001070fc, 0x0201f800, 0x00109c4d,
+ 0x02000000, 0x00108253, 0x59325809, 0x0201f800,
+ 0x001005aa, 0x0201f000, 0x00108253, 0x0201f800,
+ 0x0010032f, 0x59325809, 0x592c040b, 0x8c000502,
+ 0x04000007, 0x4a026203, 0x00000007, 0x42027000,
+ 0x00000043, 0x0201f000, 0x00020b22, 0x4a026203,
+ 0x00000004, 0x1c01f000, 0x0201f800, 0x0010b8ad,
+ 0x02000000, 0x00020bfc, 0x1c01f000, 0x4a026203,
+ 0x00000001, 0x4a026403, 0x00000041, 0x42027800,
+ 0x80002042, 0x0201f000, 0x00020a9f, 0x83380580,
+ 0x00000051, 0x04000006, 0x83380580, 0x00000041,
+ 0x02020800, 0x0010032f, 0x1c01f000, 0x0201f800,
+ 0x00020a58, 0x0201f800, 0x0010b8f1, 0x0201f000,
+ 0x00020afe, 0x83380480, 0x00000052, 0x02021800,
+ 0x0010032f, 0x83380480, 0x00000049, 0x02001800,
+ 0x0010032f, 0x0c01f001, 0x0010b1dd, 0x0010b207,
+ 0x0010b1db, 0x0010b1db, 0x0010b1db, 0x0010b1db,
+ 0x0010b207, 0x0010b1db, 0x0010b229, 0x0201f800,
+ 0x0010032f, 0x59325809, 0x592c040b, 0x8c00051e,
+ 0x04000013, 0x82000d00, 0x000000c0, 0x82040d80,
+ 0x00000080, 0x04000016, 0x59300804, 0x8c040d18,
+ 0x04020013, 0x59300415, 0x8c000516, 0x04000004,
+ 0x4a026203, 0x00000007, 0x0401f018, 0x42027000,
+ 0x00000041, 0x0201f000, 0x00020c1d, 0x4a026203,
+ 0x00000007, 0x497a6006, 0x59300415, 0x8c000516,
+ 0x0402000e, 0x0201f000, 0x00020a58, 0x59325809,
+ 0x592c0c0b, 0x8c040d1a, 0x04020005, 0x0201f800,
+ 0x00020a58, 0x0201f000, 0x00020afe, 0x0201f800,
+ 0x0010b8ad, 0x040007fa, 0x1c01f000, 0x0201f800,
+ 0x001070dc, 0x59325809, 0x5932680a, 0x59340200,
+ 0x8c00050e, 0x0400000e, 0x592c040b, 0x82000500,
+ 0x000000c0, 0x82000580, 0x00000080, 0x04000005,
+ 0x592c0010, 0x59301816, 0x800c1c80, 0x480e6016,
+ 0x4a026203, 0x00000002, 0x0401f00e, 0x42028000,
+ 0x00000004, 0x0201f800, 0x0010b634, 0x59300006,
+ 0x80000540, 0x04020004, 0x59a80031, 0x800000c2,
+ 0x48026006, 0x497a6009, 0x4a026203, 0x00000007,
+ 0x1c01f000, 0x4933c857, 0x0201f800, 0x00107595,
+ 0x02020800, 0x0010032f, 0x59300203, 0x82000580,
+ 0x00000002, 0x0400078a, 0x0201f800, 0x0010032f,
+ 0x4a026203, 0x00000007, 0x497a6006, 0x0201f000,
+ 0x00020a58, 0x4a026203, 0x00000007, 0x497a6006,
+ 0x0201f000, 0x00020a53, 0x59300415, 0x8c00051c,
+ 0x02020000, 0x00020c0e, 0x59325809, 0x592c2010,
+ 0x40080000, 0x80102480, 0x59300016, 0x80102400,
+ 0x48126016, 0x0201f000, 0x00020c0e, 0x8c040d0e,
+ 0x0402000a, 0x4a026203, 0x00000006, 0x0401f822,
+ 0x59300028, 0x80000540, 0x02020800, 0x00100b3b,
+ 0x0201f000, 0x00020a53, 0x4a026203, 0x00000002,
+ 0x1c01f000, 0x42000800, 0x00000001, 0x0201f800,
+ 0x00100b3b, 0x82040580, 0x00000001, 0x02000000,
+ 0x00020c15, 0x0401f7d8, 0x59300415, 0x8c00051c,
+ 0x04000008, 0x59300008, 0x8c000522, 0x02020800,
+ 0x001008bb, 0x02000000, 0x00020c07, 0x1c01f000,
+ 0x59300012, 0x80000540, 0x02000000, 0x00020c07,
+ 0x1c01f000, 0x492fc857, 0x480bc857, 0x8c08153e,
+ 0x04000006, 0x80081080, 0x80081000, 0x42000800,
+ 0x00000009, 0x0401f003, 0x42000800, 0x00000015,
+ 0x480a580c, 0x1c01f000, 0x83380580, 0x00000013,
0x04000005, 0x83380580, 0x00000014, 0x02020800,
- 0x0010032e, 0x493bc857, 0x0201f800, 0x00106d91,
- 0x0401f7ca, 0x1c01f000, 0x4933c857, 0x83380580,
- 0x00000013, 0x0402000e, 0x59300403, 0x4803c857,
- 0x82000c80, 0x00000085, 0x02001800, 0x0010032e,
- 0x82000c80, 0x00000093, 0x02021800, 0x0010032e,
- 0x82000480, 0x00000085, 0x0c01f019, 0x83380580,
+ 0x0010032f, 0x59300415, 0x8c000516, 0x02000800,
+ 0x0010032f, 0x1c01f000, 0x0201f800, 0x0010032f,
+ 0x59300009, 0x80000540, 0x02020800, 0x0010032f,
+ 0x1c01f000, 0x59300415, 0x8c000516, 0x02000800,
+ 0x0010032f, 0x1c01f000, 0x4a026203, 0x00000004,
+ 0x493a6403, 0x42000800, 0x80002001, 0x0201f000,
+ 0x00020a9f, 0x4a026203, 0x00000003, 0x493a6403,
+ 0x0201f800, 0x00020177, 0x59325809, 0x592c040b,
+ 0x8c00051e, 0x04000012, 0x82000500, 0x000000c0,
+ 0x82000580, 0x00000080, 0x04000011, 0x59300415,
+ 0x8c000512, 0x0402000a, 0x8c000510, 0x04020008,
+ 0x592c040d, 0x80000540, 0x04020005, 0x82080d40,
+ 0x80003065, 0x0201f000, 0x00020a8e, 0x82080d40,
+ 0x80002065, 0x0201f000, 0x00020a8e, 0x82080d40,
+ 0x80002042, 0x0201f000, 0x00020a8e, 0x4933c857,
+ 0x493bc857, 0x83380480, 0x00000044, 0x02021800,
+ 0x0010032f, 0x83380480, 0x00000041, 0x02001800,
+ 0x0010032f, 0x0c01f001, 0x0010b2cd, 0x0010b2dd,
+ 0x0010b2f2, 0x59325809, 0x592c040b, 0x8c00051e,
+ 0x0400001d, 0x82001d00, 0x000000c0, 0x820c1d80,
+ 0x000000c0, 0x04000018, 0x4a026203, 0x00000001,
+ 0x493a6403, 0x42000800, 0x80002042, 0x0201f000,
+ 0x00020a9f, 0x59325809, 0x592c040b, 0x8c00051e,
+ 0x0400000d, 0x82001d00, 0x000000c0, 0x820c1d80,
+ 0x000000c0, 0x04000008, 0x4a026203, 0x00000001,
+ 0x493a6403, 0x42000800, 0x80002001, 0x0201f000,
+ 0x00020a9f, 0x497a6009, 0x497a6006, 0x42028000,
+ 0x00000004, 0x0401f343, 0x59325809, 0x592c040b,
+ 0x8c00051e, 0x040007f8, 0x82001d00, 0x000000c0,
+ 0x820c1d80, 0x000000c0, 0x040007f3, 0x4a026203,
+ 0x00000003, 0x493a6403, 0x0201f800, 0x00020177,
+ 0x82080d40, 0x80002065, 0x0201f000, 0x00020a8e,
+ 0x4933c857, 0x493bc857, 0x83380580, 0x00000085,
+ 0x04000006, 0x83380580, 0x00000088, 0x0400000a,
+ 0x0201f800, 0x0010032f, 0x4a026203, 0x00000009,
+ 0x493a6403, 0x42000800, 0x8000004b, 0x0201f000,
+ 0x00020a9f, 0x83300580, 0x00111cec, 0x02020800,
+ 0x0010032f, 0x4d1c0000, 0x813669c0, 0x04000004,
+ 0x0201f800, 0x0010b8a7, 0x04020057, 0x59cc1404,
+ 0x41780000, 0x0401f856, 0x0400001d, 0x831c0580,
+ 0xffffffff, 0x0400001a, 0x59cc0204, 0x82001580,
+ 0x0000ffff, 0x04000004, 0x591c1402, 0x80080580,
+ 0x04020013, 0x591c0407, 0x82000500, 0x0000001f,
+ 0x82002580, 0x00000006, 0x04000007, 0x82002580,
+ 0x00000004, 0x04000032, 0x82002580, 0x00000011,
+ 0x04020007, 0x497a3a05, 0x42002000, 0x00000054,
+ 0x0201f800, 0x001083ac, 0x0401f037, 0x59240400,
+ 0x8c00050a, 0x04020004, 0x42023800, 0xffffffff,
+ 0x0401f7f6, 0x813669c0, 0x04020012, 0x59cc0001,
+ 0x59cc3800, 0x821c3d00, 0x00ffffff, 0x4c1c0000,
+ 0x0201f800, 0x00106463, 0x5c003800, 0x04020026,
+ 0x0201f800, 0x00102051, 0x04020023, 0x0201f800,
+ 0x00104774, 0x04020020, 0x4926601c, 0x4936600a,
+ 0x4a026403, 0x00000087, 0x59cc1204, 0x82081580,
+ 0x0000ffff, 0x04020003, 0x4a026403, 0x00000086,
+ 0x4d2c0000, 0x0201f800, 0x0010bce2, 0x0201f800,
+ 0x00104ee7, 0x5c025800, 0x0401f00f, 0x591c0403,
+ 0x82000580, 0x00000038, 0x040007d0, 0x591c0203,
+ 0x82000580, 0x00000007, 0x040207d1, 0x4d300000,
+ 0x411e6000, 0x0201f800, 0x00108253, 0x5c026000,
+ 0x0401f7cb, 0x5c023800, 0x1c01f000, 0x4933c857,
+ 0x480bc857, 0x4c5c0000, 0x4000b800, 0x42002800,
+ 0x00111d44, 0x41300000, 0x80140580, 0x0400001f,
+ 0x58140203, 0x82000580, 0x00000000, 0x0400001b,
+ 0x58140202, 0x80080580, 0x04020018, 0x58141c07,
+ 0x820c0580, 0x00000005, 0x04000014, 0x8c5cbd00,
+ 0x04000004, 0x820c0580, 0x00000007, 0x0400000f,
+ 0x820c0580, 0x00000009, 0x0400003c, 0x5930200a,
+ 0x5814000a, 0x800001c0, 0x0400000e, 0x82001d80,
+ 0x0010e85a, 0x0400000b, 0x801021c0, 0x04000003,
+ 0x80100580, 0x04000012, 0x82142c00, 0x0000002c,
+ 0x41540000, 0x80140480, 0x04021021, 0x0401f7da,
+ 0x58140027, 0x801021c0, 0x04000005, 0x58102002,
+ 0x82102500, 0x00ffffff, 0x0401f7f2, 0x8c5cbd00,
+ 0x040207f2, 0x59302027, 0x0401f7ee, 0x40163800,
+ 0x8c5cbd00, 0x04000008, 0x4c080000, 0x4c140000,
+ 0x0201f800, 0x0010bc71, 0x5c002800, 0x5c001000,
+ 0x040007e6, 0x831c0580, 0xffffffff, 0x04000006,
+ 0x591c000a, 0x800001c0, 0x04020003, 0x5930000a,
+ 0x4802380a, 0x81300540, 0x0401f00a, 0x8c5cbd00,
+ 0x04000008, 0x40080800, 0x42023800, 0xffffffff,
+ 0x0201f800, 0x00104ef1, 0x040007ef, 0x80000580,
+ 0x5c00b800, 0x1c01f000, 0x58141808, 0x8c0c1d10,
+ 0x040207ce, 0x0401f7c2, 0x4933c857, 0x83300580,
+ 0x00111cc0, 0x0402003e, 0x4a026203, 0x00000000,
+ 0x83380580, 0x00000013, 0x0402002d, 0x59300403,
+ 0x82000580, 0x00000092, 0x02020800, 0x0010032f,
+ 0x59a80058, 0x59325809, 0x812e59c0, 0x04000006,
+ 0x812c0580, 0x02020800, 0x0010032f, 0x592c0000,
+ 0x497a5800, 0x800001c0, 0x04000005, 0x48035058,
+ 0x0201f800, 0x001081c1, 0x0401f003, 0x497b5058,
+ 0x497b5059, 0x812e59c0, 0x04000020, 0x592c0205,
+ 0x82000580, 0x00000055, 0x02000000, 0x001005aa,
+ 0x83380580, 0x00000013, 0x04020005, 0x4a025a07,
+ 0x00000000, 0x0201f000, 0x00020401, 0x4a025a07,
+ 0x00000031, 0x4a025812, 0x00000004, 0x4a025813,
+ 0x000000ff, 0x0201f000, 0x00020401, 0x83380580,
0x00000027, 0x04000005, 0x83380580, 0x00000014,
- 0x02020000, 0x00107f37, 0x493bc857, 0x0201f800,
- 0x00106d91, 0x59325809, 0x812e59c0, 0x02000000,
- 0x00107eb4, 0x4a025a07, 0x00000031, 0x4a025812,
- 0x00000004, 0x4a025813, 0x000000ff, 0x0201f800,
- 0x000203ef, 0x0201f000, 0x00107eb4, 0x0010afa1,
- 0x0010afa8, 0x0010afa8, 0x0010afa1, 0x0010afa1,
- 0x0010afa1, 0x0010afa1, 0x0010afa1, 0x0010afa1,
- 0x0010afa1, 0x0010afa1, 0x0010afa1, 0x0010afa1,
- 0x0010afa3, 0x0201f800, 0x0010032e, 0x59325809,
- 0x4a025a07, 0x00000000, 0x0201f800, 0x000203ef,
- 0x0201f000, 0x00020b9d, 0x4933c857, 0x42000000,
- 0x0010cf33, 0x0201f800, 0x0010bfb3, 0x0201f800,
- 0x0010b3fa, 0x497a6205, 0x42028000, 0x0000000b,
- 0x0401f807, 0x4a026407, 0x00000006, 0x4a026203,
- 0x00000007, 0x497a6006, 0x1c01f000, 0x4933c857,
- 0x4943c857, 0x59300407, 0x82000580, 0x00000007,
- 0x04020002, 0x1c01f000, 0x0201f800, 0x00106e41,
- 0x4df00000, 0x0201f800, 0x0010989f, 0x0400000a,
+ 0x02020800, 0x0010032f, 0x493bc857, 0x0201f800,
+ 0x001070fc, 0x0401f7ca, 0x1c01f000, 0x4933c857,
+ 0x83380580, 0x00000013, 0x0402000e, 0x59300403,
+ 0x4803c857, 0x82000c80, 0x00000085, 0x02001800,
+ 0x0010032f, 0x82000c80, 0x00000093, 0x02021800,
+ 0x0010032f, 0x82000480, 0x00000085, 0x0c01f019,
+ 0x83380580, 0x00000027, 0x04000005, 0x83380580,
+ 0x00000014, 0x02020000, 0x001082d6, 0x493bc857,
+ 0x0201f800, 0x001070fc, 0x59325809, 0x812e59c0,
+ 0x02000000, 0x00108253, 0x4a025a07, 0x00000031,
+ 0x4a025812, 0x00000004, 0x4a025813, 0x000000ff,
+ 0x0201f800, 0x00020401, 0x0201f000, 0x00108253,
+ 0x0010b44a, 0x0010b451, 0x0010b451, 0x0010b44a,
+ 0x0010b44a, 0x0010b44a, 0x0010b44a, 0x0010b44a,
+ 0x0010b44a, 0x0010b44a, 0x0010b44a, 0x0010b44a,
+ 0x0010b44a, 0x0010b44c, 0x0201f800, 0x0010032f,
+ 0x59325809, 0x4a025a07, 0x00000000, 0x0201f800,
+ 0x00020401, 0x0201f000, 0x00020afe, 0x4933c857,
+ 0x42000000, 0x0010d54e, 0x0201f800, 0x0010c50a,
+ 0x0201f800, 0x0010b8f1, 0x497a6205, 0x42028000,
+ 0x0000000b, 0x0401f807, 0x4a026407, 0x00000006,
+ 0x4a026203, 0x00000007, 0x497a6006, 0x1c01f000,
+ 0x4933c857, 0x4943c857, 0x59300407, 0x82000580,
+ 0x00000007, 0x04020002, 0x1c01f000, 0x0201f800,
+ 0x001071b0, 0x4df00000, 0x0201f800, 0x00109c4d,
+ 0x0400000d, 0x83400580, 0x0000000c, 0x0400000a,
0x59300809, 0x58040000, 0x80001540, 0x04000006,
- 0x49780800, 0x4d2c0000, 0x400a5800, 0x0401f9a6,
- 0x5c025800, 0x0201f800, 0x00109564, 0x82000c80,
- 0x0000000e, 0x02021800, 0x0010032e, 0x0c01f001,
- 0x0010affb, 0x0010afff, 0x0010afe6, 0x0010b00e,
- 0x0010b022, 0x0010afe6, 0x0010afe6, 0x0010afe6,
- 0x0010afe6, 0x0010afe6, 0x0010afe6, 0x0010afe6,
- 0x0010afe6, 0x0010afe6, 0x4d400000, 0x59300028,
+ 0x49780800, 0x4d2c0000, 0x400a5800, 0x0401f9b9,
+ 0x5c025800, 0x0201f800, 0x001098e4, 0x82000c80,
+ 0x0000000e, 0x02021800, 0x0010032f, 0x0c01f001,
+ 0x0010b4a7, 0x0010b4ab, 0x0010b492, 0x0010b4ba,
+ 0x0010b4ce, 0x0010b492, 0x0010b492, 0x0010b492,
+ 0x0010b492, 0x0010b492, 0x0010b492, 0x0010b492,
+ 0x0010b492, 0x0010b492, 0x4d400000, 0x59300028,
0x80000540, 0x04000005, 0x41400800, 0x0201f800,
- 0x00100b16, 0x40068000, 0x4d2c0000, 0x59325809,
- 0x0201f800, 0x0010989f, 0x04020983, 0x4c5c0000,
- 0x5930b80a, 0x0201f800, 0x00107eb4, 0x485e600a,
+ 0x00100b3b, 0x40068000, 0x4d2c0000, 0x59325809,
+ 0x0201f800, 0x00109c4d, 0x04020996, 0x4c5c0000,
+ 0x5930b80a, 0x0201f800, 0x00108253, 0x485e600a,
0x5c00b800, 0x5c025800, 0x5c028000, 0x5c03e000,
- 0x02000000, 0x00106e2e, 0x1c01f000, 0x598c000f,
- 0x81300580, 0x04020004, 0x0201f800, 0x00107161,
- 0x04020018, 0x0201f800, 0x001101de, 0x80c40040,
- 0x040007de, 0x0201f800, 0x00106d4c, 0x04000011,
- 0x0201f800, 0x0010032e, 0x0201f800, 0x00109552,
- 0x04020004, 0x0201f800, 0x0010712a, 0x04020009,
- 0x0201f800, 0x00110065, 0x80c40040, 0x040007cf,
- 0x0201f800, 0x00106d4c, 0x02020800, 0x0010032e,
+ 0x02000000, 0x0010719d, 0x1c01f000, 0x598c000f,
+ 0x81300580, 0x04020004, 0x0201f800, 0x001074d0,
+ 0x04020018, 0x0201f800, 0x001108df, 0x80c40040,
+ 0x040007de, 0x0201f800, 0x001070af, 0x04000011,
+ 0x0201f800, 0x0010032f, 0x0201f800, 0x001098d2,
+ 0x04020004, 0x0201f800, 0x00107499, 0x04020009,
+ 0x0201f800, 0x00110766, 0x80c40040, 0x040007cf,
+ 0x0201f800, 0x001070af, 0x02020800, 0x0010032f,
0x59300203, 0x82000c80, 0x0000000e, 0x02021800,
- 0x0010032e, 0x0c01f7b7, 0x0201f800, 0x00100c76,
- 0x0401f7c2, 0x4933c857, 0x4d240000, 0x4d440000,
- 0x4d340000, 0x59cc3800, 0x821c3d00, 0x00ffffff,
- 0x59cc0007, 0x4c000000, 0x59cc0001, 0x82000500,
- 0x00ffffff, 0x82000d80, 0x00fffffe, 0x5c000000,
- 0x04020005, 0x801c0d80, 0x0402005d, 0x42000000,
- 0x00fffffe, 0x0201f800, 0x00106134, 0x02000800,
- 0x00104a7c, 0x04020056, 0x5930001c, 0x4c000000,
- 0x0201f800, 0x00104a73, 0x4926601c, 0x5930000a,
- 0x4c000000, 0x59242c00, 0x8c142d0a, 0x04020014,
- 0x81342d80, 0x04000003, 0x42002800, 0x00000004,
- 0x58002403, 0x59340c03, 0x59341802, 0x820c1d00,
- 0x00ffffff, 0x42003000, 0x00000005, 0x59cc4008,
- 0x59cc3809, 0x9c2041c0, 0x9c1c39c0, 0x42028000,
- 0x00000046, 0x41301000, 0x0401f941, 0x4936600a,
+ 0x0010032f, 0x0c01f7b7, 0x0201f800, 0x00100c9b,
+ 0x0401f7c2, 0x4933c857, 0x4d240000, 0x4c5c0000,
+ 0x4d440000, 0x4d340000, 0x4c580000, 0x59cc3800,
+ 0x821c3d00, 0x00ffffff, 0x59cc0007, 0x4c000000,
+ 0x59cc0001, 0x82000500, 0x00ffffff, 0x82000d80,
+ 0x00fffffe, 0x5c000000, 0x04020005, 0x801c0d80,
+ 0x0402006b, 0x42000000, 0x00fffffe, 0x0201f800,
+ 0x00106463, 0x02000800, 0x00104bd5, 0x04020064,
+ 0x4178b800, 0x83cc1400, 0x00000008, 0x4200b000,
+ 0x00000002, 0x83341c00, 0x00000006, 0x0201f800,
+ 0x00108fc3, 0x04000003, 0x4200b800, 0x00000001,
+ 0x5930001c, 0x4c000000, 0x0201f800, 0x00104bcc,
+ 0x4926601c, 0x5930000a, 0x4c000000, 0x59242c00,
+ 0x8c142d0a, 0x04020014, 0x81342d80, 0x04000003,
+ 0x42002800, 0x00000004, 0x58002403, 0x59340c03,
+ 0x59341802, 0x820c1d00, 0x00ffffff, 0x42003000,
+ 0x00000005, 0x59cc4008, 0x59cc3809, 0x9c2041c0,
+ 0x9c1c39c0, 0x42028000, 0x00000046, 0x41301000,
+ 0x0401f94d, 0x8c5cbd00, 0x0402002b, 0x4936600a,
0x83440d80, 0x000007fe, 0x04020016, 0x42003000,
- 0x0000001a, 0x0201f800, 0x0010b73d, 0x42000000,
- 0x0010cf20, 0x0201f800, 0x0010bfb3, 0x4d3c0000,
+ 0x0000001a, 0x0201f800, 0x0010bc92, 0x42000000,
+ 0x0010d53b, 0x0201f800, 0x0010c50a, 0x4d3c0000,
0x4d400000, 0x42028000, 0x00000029, 0x0201f800,
- 0x00101fb4, 0x42027800, 0x0000000a, 0x0201f800,
- 0x0010200c, 0x5c028000, 0x5c027800, 0x0401f012,
- 0x42003000, 0x0000000b, 0x0201f800, 0x0010b73d,
- 0x42000000, 0x0010cf20, 0x0201f800, 0x0010bfb3,
+ 0x0010203c, 0x42027800, 0x0000000a, 0x0201f800,
+ 0x00102094, 0x5c028000, 0x5c027800, 0x0401f012,
+ 0x42003000, 0x0000000b, 0x0201f800, 0x0010bc92,
+ 0x42000000, 0x0010d53b, 0x0201f800, 0x0010c50a,
0x4d3c0000, 0x4d400000, 0x42028000, 0x00000029,
- 0x417a7800, 0x0201f800, 0x0010ff80, 0x5c028000,
+ 0x417a7800, 0x0201f800, 0x00110684, 0x5c028000,
0x5c027800, 0x5c000000, 0x4802600a, 0x5c000000,
0x4802601c, 0x59cc0007, 0x83440d80, 0x000007fe,
0x04020005, 0x42000000, 0x00fffffe, 0x4a026c00,
- 0x00000707, 0x48026802, 0x80000580, 0x5c026800,
- 0x5c028800, 0x5c024800, 0x1c01f000, 0x4933c857,
- 0x4c040000, 0x59a8005a, 0x82000580, 0x00000074,
- 0x04020040, 0x59cc0a08, 0x82040480, 0x00000100,
- 0x04001033, 0x59cc0c08, 0x82040500, 0x00008000,
- 0x04000035, 0x59a80013, 0x80000540, 0x04020009,
- 0x5930100a, 0x58080212, 0x82000500, 0x0000ff00,
- 0x04000004, 0x82040500, 0x00000800, 0x0400002a,
- 0x59cc0c09, 0x80040840, 0x04001024, 0x59a80a1b,
- 0x8c040d06, 0x04000004, 0x59cc0c0f, 0x8c040d1e,
- 0x04020012, 0x59cc0a17, 0x800409c0, 0x04020012,
- 0x59cc0a18, 0x82040480, 0x00000100, 0x04001014,
- 0x59cc0c18, 0x800409c0, 0x0402000e, 0x59cc0c19,
- 0x80040840, 0x04001011, 0x59cc0c1a, 0x80040840,
- 0x04001011, 0x0401f018, 0x4a02621b, 0x00000100,
- 0x0401f012, 0x4a02621b, 0x00000300, 0x0401f00f,
- 0x4a02621b, 0x00000500, 0x0401f00c, 0x4a02621b,
- 0x00000700, 0x0401f009, 0x4a02621b, 0x00000900,
- 0x0401f006, 0x4a02621b, 0x00000f00, 0x0401f003,
- 0x4a02621b, 0x00002d00, 0x82000540, 0x00000001,
- 0x0401f002, 0x80000580, 0x5c000800, 0x1c01f000,
- 0x59cc0407, 0x4803c857, 0x82000580, 0x00000800,
- 0x04000003, 0x4a02621b, 0x00000000, 0x1c01f000,
- 0x4933c857, 0x4c580000, 0x59cc000c, 0x59340802,
- 0x82040d00, 0x00ffffff, 0x80040580, 0x04020012,
- 0x83cc1400, 0x00000008, 0x4200b000, 0x00000002,
- 0x83341c00, 0x00000006, 0x0201f800, 0x00108c57,
- 0x04020009, 0x83cc1400, 0x0000000a, 0x4200b000,
- 0x00000002, 0x83341c00, 0x00000008, 0x0201f800,
- 0x00108c57, 0x5c00b000, 0x1c01f000, 0x4933c857,
- 0x4c580000, 0x83cc1400, 0x0000000b, 0x4200b000,
- 0x00000002, 0x83341c00, 0x00000006, 0x0201f800,
- 0x00108c57, 0x0402000c, 0x83cc1400, 0x0000000d,
- 0x4200b000, 0x00000002, 0x83341c00, 0x00000008,
- 0x0201f800, 0x00108c57, 0x04000014, 0x4933c856,
- 0x4933c856, 0x4933c857, 0x59340009, 0x4803c857,
- 0x5934000e, 0x4803c857, 0x59340008, 0x4803c857,
- 0x5934000d, 0x4803c857, 0x59340007, 0x4803c857,
- 0x5934000c, 0x4803c857, 0x59340006, 0x4803c857,
- 0x5934000b, 0x4803c857, 0x5c00b000, 0x1c01f000,
- 0x4933c857, 0x813261c0, 0x0400002d, 0x83300d80,
- 0x0011152c, 0x0400002a, 0x8d3e7d06, 0x04020028,
- 0x59300c07, 0x82040580, 0x00000001, 0x0400000a,
- 0x82040580, 0x00000002, 0x04020021, 0x59300226,
- 0x82000580, 0x00000001, 0x0402001d, 0x59300c17,
- 0x0401f002, 0x59300c03, 0x82040580, 0x00000039,
- 0x04000004, 0x82040580, 0x00000035, 0x04020014,
- 0x4d300000, 0x4d1c0000, 0x59326027, 0x4933c857,
- 0x0201f800, 0x00109d04, 0x02000800, 0x0010032e,
- 0x591c001d, 0x497a381d, 0x591c0c15, 0x84040d02,
- 0x48063c15, 0x5c023800, 0x5c026000, 0x81300580,
- 0x02020800, 0x0010032e, 0x497a6027, 0x1c01f000,
- 0x5c000000, 0x4c000000, 0x4803c857, 0x4d3c0000,
- 0x42027800, 0x00000001, 0x0201f800, 0x001045df,
- 0x5c027800, 0x4c580000, 0x4200b000, 0x00000002,
- 0x83a81c00, 0x00000002, 0x83cc1400, 0x0000000b,
- 0x0201f800, 0x00108c57, 0x5c00b000, 0x80000540,
- 0x1c01f000, 0x492fc857, 0x4943c857, 0x59a8000c,
- 0x812c0480, 0x04001011, 0x59a8000a, 0x812c0480,
- 0x0402100e, 0x592c0000, 0x80005d40, 0x04000008,
+ 0x00000707, 0x48026802, 0x80000580, 0x5c00b000,
+ 0x5c026800, 0x5c028800, 0x5c00b800, 0x5c024800,
+ 0x1c01f000, 0x4933c857, 0x4c040000, 0x59a80068,
+ 0x82000580, 0x00000074, 0x04020040, 0x59cc0a08,
+ 0x82040480, 0x00000100, 0x04001033, 0x59cc0c08,
+ 0x82040500, 0x00008000, 0x04000035, 0x59a80019,
+ 0x80000540, 0x04020009, 0x5930100a, 0x58080212,
+ 0x82000500, 0x0000ff00, 0x04000004, 0x82040500,
+ 0x00000800, 0x0400002a, 0x59cc0c09, 0x80040840,
+ 0x04001024, 0x59a80a21, 0x8c040d06, 0x04000004,
+ 0x59cc0c0f, 0x8c040d1e, 0x04020012, 0x59cc0a17,
+ 0x800409c0, 0x04020012, 0x59cc0a18, 0x82040480,
+ 0x00000100, 0x04001014, 0x59cc0c18, 0x800409c0,
+ 0x0402000e, 0x59cc0c19, 0x80040840, 0x04001011,
+ 0x59cc0c1a, 0x80040840, 0x04001011, 0x0401f018,
+ 0x4a02621b, 0x00000100, 0x0401f012, 0x4a02621b,
+ 0x00000300, 0x0401f00f, 0x4a02621b, 0x00000500,
+ 0x0401f00c, 0x4a02621b, 0x00000700, 0x0401f009,
+ 0x4a02621b, 0x00000900, 0x0401f006, 0x4a02621b,
+ 0x00000f00, 0x0401f003, 0x4a02621b, 0x00002d00,
+ 0x82000540, 0x00000001, 0x0401f002, 0x80000580,
+ 0x5c000800, 0x1c01f000, 0x59cc0407, 0x4803c857,
+ 0x82000580, 0x00000800, 0x04000003, 0x4a02621b,
+ 0x00000000, 0x1c01f000, 0x4933c857, 0x4c580000,
+ 0x59cc000c, 0x59340802, 0x82040d00, 0x00ffffff,
+ 0x80040580, 0x04020012, 0x83cc1400, 0x00000008,
+ 0x4200b000, 0x00000002, 0x83341c00, 0x00000006,
+ 0x0201f800, 0x00108fc3, 0x04020009, 0x83cc1400,
+ 0x0000000a, 0x4200b000, 0x00000002, 0x83341c00,
+ 0x00000008, 0x0201f800, 0x00108fc3, 0x5c00b000,
+ 0x1c01f000, 0x4933c857, 0x4c580000, 0x83cc1400,
+ 0x0000000b, 0x4200b000, 0x00000002, 0x83341c00,
+ 0x00000006, 0x0201f800, 0x00108fc3, 0x0402000c,
+ 0x83cc1400, 0x0000000d, 0x4200b000, 0x00000002,
+ 0x83341c00, 0x00000008, 0x0201f800, 0x00108fc3,
+ 0x04000014, 0x4933c856, 0x4933c856, 0x4933c857,
+ 0x59340009, 0x4803c857, 0x5934000e, 0x4803c857,
+ 0x59340008, 0x4803c857, 0x5934000d, 0x4803c857,
+ 0x59340007, 0x4803c857, 0x5934000c, 0x4803c857,
+ 0x59340006, 0x4803c857, 0x5934000b, 0x4803c857,
+ 0x5c00b000, 0x1c01f000, 0x4933c857, 0x813261c0,
+ 0x0400002d, 0x83300d80, 0x00111cec, 0x0400002a,
+ 0x8d3e7d06, 0x04020028, 0x59300c07, 0x82040580,
+ 0x00000001, 0x0400000a, 0x82040580, 0x00000002,
+ 0x04020021, 0x59300226, 0x82000580, 0x00000001,
+ 0x0402001d, 0x59300c17, 0x0401f002, 0x59300c03,
+ 0x82040580, 0x00000039, 0x04000004, 0x82040580,
+ 0x00000035, 0x04020014, 0x4d300000, 0x4d1c0000,
+ 0x59326027, 0x4933c857, 0x0201f800, 0x0010a0b6,
+ 0x02000800, 0x0010032f, 0x591c001d, 0x497a381d,
+ 0x591c0c15, 0x84040d02, 0x48063c15, 0x5c023800,
+ 0x5c026000, 0x81300580, 0x02020800, 0x0010032f,
+ 0x497a6027, 0x1c01f000, 0x5c000000, 0x4c000000,
+ 0x4803c857, 0x4d3c0000, 0x42027800, 0x00000001,
+ 0x0201f800, 0x0010472b, 0x5c027800, 0x4c580000,
+ 0x4200b000, 0x00000002, 0x5930181c, 0x820c1c00,
+ 0x00000001, 0x83cc1400, 0x0000000b, 0x0201f800,
+ 0x00108fc3, 0x5c00b000, 0x80000540, 0x1c01f000,
+ 0x492fc857, 0x4943c857, 0x59a8000c, 0x812c0480,
+ 0x04001018, 0x59a8000a, 0x812c0480, 0x04021015,
+ 0x4d400000, 0x592c0000, 0x80005d40, 0x0400000d,
0x497a5800, 0x49425a07, 0x4c2c0000, 0x0201f800,
- 0x000203ef, 0x5c025800, 0x0401f7f7, 0x49425a07,
- 0x0201f000, 0x000203ef, 0x1c01f000, 0x42002000,
- 0x0000ffff, 0x5930100a, 0x800811c0, 0x04000002,
- 0x58082403, 0x41301000, 0x0401f009, 0x40682800,
- 0x406c3000, 0x41781000, 0x41442000, 0x0401f004,
- 0x41781000, 0x42002000, 0x0000ffff, 0x5c000000,
- 0x4c000000, 0x4803c857, 0x480bc857, 0x4813c857,
- 0x492fc857, 0x4943c857, 0x4d2c0000, 0x4c040000,
- 0x4c080000, 0x4c0c0000, 0x4c100000, 0x4c140000,
- 0x4c180000, 0x4c1c0000, 0x4c200000, 0x0201f800,
- 0x00100583, 0x02000800, 0x0010032e, 0x5c004000,
- 0x5c003800, 0x5c003000, 0x5c002800, 0x5c002000,
- 0x5c001800, 0x5c001000, 0x5c000800, 0x4a025805,
- 0x0000010d, 0x800811c0, 0x0400001f, 0x83400580,
- 0x00000029, 0x04020018, 0x82180580, 0x00000002,
- 0x0400000d, 0x82180580, 0x00000003, 0x0400000a,
- 0x82180580, 0x00000008, 0x04000007, 0x82180580,
- 0x00000006, 0x04000007, 0x82180580, 0x00000009,
- 0x04020009, 0x4a02580a, 0xffffffff, 0x0401f007,
- 0x5808280a, 0x58140002, 0x82000500, 0x00ffffff,
- 0x48025813, 0x480a580a, 0x58080202, 0x48025c14,
- 0x0401f005, 0x4a02580a, 0xffffffff, 0x4a025c14,
- 0x0000ffff, 0x83400580, 0x00000046, 0x04000002,
- 0x41782800, 0x480e580d, 0x4806580e, 0x4822580f,
- 0x481e5810, 0x48165a08, 0x481a5c09, 0x49425a09,
- 0x48125a07, 0x82100580, 0x0000ffff, 0x04000014,
- 0x4d440000, 0x4d340000, 0x40128800, 0x83440480,
- 0x000007f0, 0x04001004, 0x0201f800, 0x00104a7c,
- 0x0401f003, 0x0201f800, 0x0002034c, 0x02020800,
- 0x0010032e, 0x59340002, 0x82000500, 0x00ffffff,
- 0x48025813, 0x5c026800, 0x5c028800, 0x497a5800,
- 0x497a5c05, 0x812000d0, 0x48025c11, 0x0201f800,
- 0x0010b674, 0x5c025800, 0x1c01f000, 0x5c000000,
- 0x4c000000, 0x4803c857, 0x480bc857, 0x480fc857,
- 0x4813c857, 0x4817c857, 0x4d2c0000, 0x4c080000,
- 0x4c0c0000, 0x4c100000, 0x4c140000, 0x0201f800,
- 0x00100583, 0x02000800, 0x0010032e, 0x5c002800,
- 0x5c002000, 0x5c001800, 0x5c001000, 0x04011000,
- 0x832c0400, 0x00000005, 0x4803c840, 0x4a03c842,
- 0x00000010, 0x40000000, 0x040117ff, 0x4a025805,
- 0x0000010d, 0x4a025a09, 0x00000049, 0x480a5a0b,
- 0x480e5c0b, 0x48125a0c, 0x48165c0c, 0x82080580,
- 0x00008014, 0x04020068, 0x820c0580, 0x0000ffff,
- 0x04020065, 0x82100580, 0x00000006, 0x04020062,
- 0x4d240000, 0x42024800, 0x0010cfd1, 0x59240005,
- 0x5c024800, 0x0201f800, 0x001050f7, 0x04000009,
- 0x82000d00, 0x00ffff00, 0x04020006, 0x82000c00,
- 0x00102116, 0x50040800, 0x80040910, 0x48065a0d,
- 0x82000d00, 0x0000ffff, 0x48065c0d, 0x80000120,
- 0x48025a0e, 0x59a8021b, 0x82001500, 0x00003500,
- 0x480a5a0f, 0x8c000502, 0x0400001f, 0x8c000506,
- 0x04000009, 0x82000d00, 0x0000000a, 0x82040d80,
- 0x0000000a, 0x04020004, 0x4a025c0e, 0x00000001,
- 0x0401f022, 0x8c00050a, 0x04000009, 0x82000d00,
- 0x00000022, 0x82040d80, 0x00000022, 0x04020004,
- 0x4a025c0e, 0x00000003, 0x0401f018, 0x8c000508,
- 0x04000009, 0x82000d00, 0x00000012, 0x82040d80,
- 0x00000012, 0x04020004, 0x4a025c0e, 0x00000002,
- 0x0401f00e, 0x0201f800, 0x001050f7, 0x04020004,
- 0x4a025c0e, 0x00000004, 0x0401f008, 0x8c000506,
- 0x04000004, 0x4a025c0e, 0x00000005, 0x0401f003,
- 0x4a025c0e, 0x00000000, 0x59a8002a, 0x48025c0f,
- 0x59a8002b, 0x48025a10, 0x59c40801, 0x82040d00,
- 0x00018000, 0x82040580, 0x00000000, 0x04020004,
- 0x4a025c10, 0x00000000, 0x0401f00f, 0x82040580,
- 0x00008000, 0x04020004, 0x4a025c10, 0x00000001,
- 0x0401f009, 0x82040580, 0x00010000, 0x04020004,
- 0x4a025c10, 0x00000003, 0x0401f003, 0x4a025c10,
- 0x00000004, 0x0401fbdf, 0x5c025800, 0x1c01f000,
+ 0x00020401, 0x5c025800, 0x83400580, 0x0000000c,
+ 0x040207f5, 0x42028000, 0x00000004, 0x0401f7f2,
+ 0x49425a07, 0x5c028000, 0x0201f000, 0x00020401,
+ 0x1c01f000, 0x42002000, 0x0000ffff, 0x5930100a,
+ 0x800811c0, 0x04000002, 0x58082403, 0x41301000,
+ 0x0401f009, 0x40682800, 0x406c3000, 0x41781000,
+ 0x41442000, 0x0401f004, 0x41781000, 0x42002000,
+ 0x0000ffff, 0x5c000000, 0x4c000000, 0x4803c857,
+ 0x480bc857, 0x4813c857, 0x492fc857, 0x4943c857,
+ 0x4d2c0000, 0x4c040000, 0x4c080000, 0x4c0c0000,
+ 0x4c100000, 0x4c140000, 0x4c180000, 0x4c1c0000,
+ 0x4c200000, 0x0201f800, 0x00100599, 0x02000800,
+ 0x0010032f, 0x5c004000, 0x5c003800, 0x5c003000,
+ 0x5c002800, 0x5c002000, 0x5c001800, 0x5c001000,
+ 0x5c000800, 0x04011000, 0x832c0400, 0x00000005,
+ 0x4803c840, 0x4a03c842, 0x00000010, 0x40000000,
+ 0x040117ff, 0x4a025805, 0x0000010d, 0x800811c0,
+ 0x0400001f, 0x83400580, 0x00000029, 0x04020018,
+ 0x82180580, 0x00000002, 0x0400000d, 0x82180580,
+ 0x00000003, 0x0400000a, 0x82180580, 0x00000008,
+ 0x04000007, 0x82180580, 0x00000006, 0x04000007,
+ 0x82180580, 0x00000009, 0x04020009, 0x4a02580a,
+ 0xffffffff, 0x0401f007, 0x5808280a, 0x58140002,
+ 0x82000500, 0x00ffffff, 0x48025813, 0x480a580a,
+ 0x58080202, 0x48025c14, 0x0401f005, 0x4a02580a,
+ 0xffffffff, 0x4a025c14, 0x0000ffff, 0x83400580,
+ 0x00000046, 0x04000002, 0x41782800, 0x480e580d,
+ 0x4806580e, 0x4822580f, 0x481e5810, 0x481a5c09,
+ 0x83400580, 0x00000046, 0x04020008, 0x82180580,
+ 0x00000020, 0x04020005, 0x59a80221, 0x8c000508,
+ 0x04000002, 0x84142d46, 0x49425a09, 0x48125a07,
+ 0x82100580, 0x0000ffff, 0x0400002b, 0x4d440000,
+ 0x4d340000, 0x4c140000, 0x4c180000, 0x40128800,
+ 0x83440480, 0x000007f0, 0x04001004, 0x0201f800,
+ 0x00104bd5, 0x0401f003, 0x0201f800, 0x00020353,
+ 0x02020800, 0x0010032f, 0x59340002, 0x82000500,
+ 0x00ffffff, 0x48025813, 0x5c003000, 0x5c002800,
+ 0x83400580, 0x00000046, 0x04020011, 0x82180580,
+ 0x00000020, 0x0402000e, 0x84142d48, 0x59344006,
+ 0x59343807, 0x59341808, 0x59340809, 0x9c2041c0,
+ 0x9c1c39c0, 0x9c0c19c0, 0x9c0409c0, 0x480e580b,
+ 0x4806580c, 0x4822580f, 0x481e5810, 0x5c026800,
+ 0x5c028800, 0x48165a08, 0x497a5800, 0x497a5c05,
+ 0x812000d0, 0x48025c11, 0x0201f800, 0x0010bbc5,
+ 0x5c025800, 0x1c01f000, 0x5c000000, 0x4c000000,
+ 0x4803c857, 0x480bc857, 0x480fc857, 0x4813c857,
+ 0x4817c857, 0x4d2c0000, 0x4c080000, 0x4c0c0000,
+ 0x4c100000, 0x4c140000, 0x0201f800, 0x00100599,
+ 0x02000800, 0x0010032f, 0x5c002800, 0x5c002000,
+ 0x5c001800, 0x5c001000, 0x04011000, 0x832c0400,
+ 0x00000005, 0x4803c840, 0x4a03c842, 0x00000010,
+ 0x40000000, 0x040117ff, 0x4a025805, 0x0000010d,
+ 0x4a025a09, 0x00000049, 0x480a5a0b, 0x480e5c0b,
+ 0x48125a0c, 0x48165c0c, 0x82080580, 0x00008014,
+ 0x04020068, 0x820c0580, 0x0000ffff, 0x04020065,
+ 0x82100580, 0x00000006, 0x04020062, 0x4d240000,
+ 0x42024800, 0x0010d5ef, 0x59240005, 0x5c024800,
+ 0x0201f800, 0x001052aa, 0x04000009, 0x82000d00,
+ 0x00ffff00, 0x04020006, 0x82000c00, 0x001021a6,
+ 0x50040800, 0x80040910, 0x48065a0d, 0x82000d00,
+ 0x0000ffff, 0x48065c0d, 0x80000120, 0x48025a0e,
+ 0x59a80221, 0x82001500, 0x00003500, 0x480a5a0f,
+ 0x8c000502, 0x0400001f, 0x8c000506, 0x04000009,
+ 0x82000d00, 0x0000000a, 0x82040d80, 0x0000000a,
+ 0x04020004, 0x4a025c0e, 0x00000001, 0x0401f022,
+ 0x8c00050a, 0x04000009, 0x82000d00, 0x00000022,
+ 0x82040d80, 0x00000022, 0x04020004, 0x4a025c0e,
+ 0x00000003, 0x0401f018, 0x8c000508, 0x04000009,
+ 0x82000d00, 0x00000012, 0x82040d80, 0x00000012,
+ 0x04020004, 0x4a025c0e, 0x00000002, 0x0401f00e,
+ 0x0201f800, 0x001052aa, 0x04020004, 0x4a025c0e,
+ 0x00000004, 0x0401f008, 0x8c000506, 0x04000004,
+ 0x4a025c0e, 0x00000005, 0x0401f003, 0x4a025c0e,
+ 0x00000000, 0x59a80030, 0x48025c0f, 0x59a80031,
+ 0x48025a10, 0x59c40801, 0x82040d00, 0x00018000,
+ 0x82040580, 0x00000000, 0x04020004, 0x4a025c10,
+ 0x00000000, 0x0401f00f, 0x82040580, 0x00008000,
+ 0x04020004, 0x4a025c10, 0x00000001, 0x0401f009,
+ 0x82040580, 0x00010000, 0x04020004, 0x4a025c10,
+ 0x00000003, 0x0401f003, 0x4a025c10, 0x00000004,
+ 0x0201f800, 0x0010bbc5, 0x5c025800, 0x1c01f000,
0x0401f807, 0x42018800, 0x00000001, 0x04000003,
0x42018800, 0x00000000, 0x1c01f000, 0x5930080a,
0x800409c0, 0x04000004, 0x58040403, 0x81440580,
@@ -26039,1302 +11784,1375 @@ static const uint32_t isp_2400_multi_risc_code[] = {
0x82040d00, 0x000000ff, 0x80040540, 0x4803c857,
0x48026417, 0x4a026403, 0x00000085, 0x4a026203,
0x00000009, 0x4a026407, 0x00000005, 0x4a026226,
- 0x00000004, 0x59a8002b, 0x48026006, 0x42000800,
- 0x8000004b, 0x0201f800, 0x00020b3e, 0x5c000800,
+ 0x00000004, 0x59a80031, 0x48026006, 0x42000800,
+ 0x8000004b, 0x0201f800, 0x00020a9f, 0x5c000800,
0x1c01f000, 0x4933c857, 0x40000000, 0x40000000,
0x1c01f000, 0x59300415, 0x4933c857, 0x4803c857,
0x8c000518, 0x04000009, 0x8c000512, 0x02020000,
- 0x00109adc, 0x0401f929, 0x0201f800, 0x00020afd,
- 0x0201f800, 0x00020b9d, 0x1c01f000, 0x591c0407,
+ 0x00109e8c, 0x0401f930, 0x0201f800, 0x00020a58,
+ 0x0201f800, 0x00020afe, 0x1c01f000, 0x591c0407,
0x4803c857, 0x82000c80, 0x00000009, 0x0402100b,
- 0x0c01f001, 0x0010b2e6, 0x0010b2e6, 0x0010b2e6,
- 0x0010b2e8, 0x0010b2e6, 0x0010b2e8, 0x0010b2e8,
- 0x0010b2e6, 0x0010b2e8, 0x80000580, 0x1c01f000,
+ 0x0c01f001, 0x0010b7d6, 0x0010b7d6, 0x0010b7d6,
+ 0x0010b7d8, 0x0010b7d6, 0x0010b7d8, 0x0010b7d8,
+ 0x0010b7d6, 0x0010b7d8, 0x80000580, 0x1c01f000,
0x82000540, 0x00000001, 0x1c01f000, 0x591c0407,
0x82000500, 0x0000001f, 0x82000580, 0x00000006,
0x0400000e, 0x4803c857, 0x4a026403, 0x0000003b,
0x4a02641b, 0x00000009, 0x4a02621b, 0x00002a00,
0x4a026203, 0x00000001, 0x42000800, 0x80000040,
- 0x0201f000, 0x00020b3e, 0x4803c856, 0x4c040000,
- 0x4c140000, 0x4d300000, 0x411e6000, 0x0401f8f7,
+ 0x0201f000, 0x00020a9f, 0x4803c856, 0x4c040000,
+ 0x4c140000, 0x4d300000, 0x411e6000, 0x0401f8fe,
0x497a6205, 0x59300415, 0x4803c857, 0x82000500,
0xffffadff, 0x48026415, 0x497a6405, 0x5c026000,
- 0x0201f800, 0x00100583, 0x02000800, 0x0010032e,
- 0x5c002800, 0x5c000800, 0x4a025805, 0x0000010d,
- 0x497a5800, 0x497a5c05, 0x4a025a09, 0x00000045,
- 0x491e580a, 0x59300402, 0x48025c08, 0x5930041a,
- 0x48025c0c, 0x591c0415, 0x84000556, 0x48023c15,
- 0x591c180a, 0x580c0403, 0x48025a07, 0x580c0002,
- 0x82000500, 0x00ffffff, 0x48025813, 0x59cc0404,
- 0x48025c14, 0x497a5a08, 0x4816580b, 0x48065a0c,
- 0x580c0013, 0x82000500, 0xff000000, 0x80000120,
- 0x48025c11, 0x0401fb43, 0x493a6403, 0x4d400000,
- 0x42028000, 0x00000045, 0x591c0202, 0x4c000000,
- 0x4d300000, 0x411e6000, 0x0401fc81, 0x5c026000,
- 0x5c000000, 0x48023a02, 0x5c028000, 0x491e6027,
- 0x4932381d, 0x4a023c07, 0x00000006, 0x4a023a03,
- 0x00000007, 0x497a3806, 0x497a3a05, 0x1c01f000,
- 0x4933c857, 0x83380580, 0x00000013, 0x0402000b,
- 0x59300403, 0x4803c857, 0x82000d80, 0x00000085,
- 0x0400002b, 0x82000d80, 0x0000008b, 0x04000028,
- 0x0201f800, 0x0010032e, 0x83380580, 0x00000027,
- 0x0402000c, 0x0201f800, 0x00106d91, 0x4d2c0000,
- 0x4d400000, 0x59325809, 0x42028000, 0x00000004,
- 0x0401fe15, 0x5c028000, 0x5c025800, 0x1c01f000,
- 0x83380580, 0x00000014, 0x040007f3, 0x83380580,
- 0x00000089, 0x04000005, 0x83380580, 0x0000008a,
- 0x02020000, 0x00107f37, 0x0201f800, 0x00107226,
- 0x02020000, 0x00107f37, 0x59300a03, 0x82040580,
- 0x0000000a, 0x04000009, 0x82040580, 0x0000000c,
- 0x04000006, 0x0201f800, 0x0010032e, 0x4a026203,
- 0x0000000a, 0x1c01f000, 0x83380480, 0x00000093,
- 0x0402100c, 0x83380480, 0x00000085, 0x04001009,
- 0x83380580, 0x00000089, 0x0400000a, 0x83380580,
- 0x0000008a, 0x04000024, 0x0201f800, 0x0010032e,
- 0x493bc857, 0x4933c857, 0x0201f000, 0x00107f37,
- 0x4933c857, 0x4c340000, 0x41306800, 0x0201f800,
- 0x00107ef8, 0x04000013, 0x4a026203, 0x00000001,
- 0x4a026403, 0x0000001e, 0x59cc0c07, 0x4806641a,
- 0x59cc0a07, 0x4806621a, 0x5834080a, 0x4806600a,
- 0x5834081c, 0x4806601c, 0x4a026407, 0x00000004,
- 0x42000800, 0x80000040, 0x0201f800, 0x00020b3e,
- 0x40366000, 0x0201f800, 0x00020b9d, 0x5c006800,
- 0x1c01f000, 0x4933c857, 0x0201f000, 0x00020b9d,
- 0x5930080a, 0x58040200, 0x8c00051a, 0x02020800,
- 0x001003f5, 0x1c01f000, 0x0201f800, 0x00104942,
- 0x0400001e, 0x4a026203, 0x00000002, 0x59300415,
- 0x84000558, 0x48026415, 0x8c000512, 0x04000004,
- 0x59a8002c, 0x48026205, 0x0401f007, 0x59a8082c,
- 0x59a8002a, 0x80040400, 0x82000400, 0x0000001e,
- 0x48026205, 0x5930000a, 0x82000c00, 0x00000011,
- 0x50040000, 0x80000540, 0x04000004, 0x82000c00,
- 0x00000000, 0x0401f7fb, 0x45300800, 0x497a6000,
- 0x82000540, 0x00000001, 0x1c01f000, 0x82100500,
- 0xfffffeef, 0x0402001c, 0x4d2c0000, 0x4937c857,
- 0x59340811, 0x83341400, 0x00000011, 0x800409c0,
- 0x0400000e, 0x40040000, 0x81300580, 0x04000005,
- 0x82041400, 0x00000000, 0x58040800, 0x0401f7f8,
- 0x59300800, 0x497a6000, 0x44041000, 0x0201f800,
- 0x00020afd, 0x0401f002, 0x4933c857, 0x5c025800,
- 0x492e6009, 0x0201f800, 0x00020afd, 0x0201f000,
- 0x00020b9d, 0x492fc857, 0x4a025a07, 0x00000006,
- 0x0201f000, 0x000203ef, 0x4c340000, 0x5930000a,
- 0x800001c0, 0x04000011, 0x82006c00, 0x00000011,
- 0x50340000, 0x80000540, 0x0400000a, 0x81300580,
- 0x04000005, 0x50340000, 0x82006c00, 0x00000000,
- 0x0401f7f8, 0x59300000, 0x44006800, 0x497a6000,
- 0x5c006800, 0x1c01f000, 0x59300c07, 0x82040580,
- 0x00000005, 0x040007fb, 0x82040580, 0x00000011,
- 0x040007f8, 0x82040580, 0x00000006, 0x040007f5,
- 0x82040580, 0x00000001, 0x040007f2, 0x0201f800,
- 0x0010032e, 0x4933c857, 0x4c080000, 0x4c0c0000,
- 0x4c580000, 0x59a81018, 0x59cc1807, 0x820c1d00,
- 0x00ffffff, 0x800c0110, 0x80083580, 0x04020014,
- 0x83cc1400, 0x00000008, 0x4200b000, 0x00000002,
- 0x5930000a, 0x82001c00, 0x00000006, 0x0201f800,
- 0x00108c57, 0x0402000a, 0x83cc1400, 0x0000000a,
- 0x4200b000, 0x00000002, 0x5930000a, 0x82001c00,
- 0x00000008, 0x0201f800, 0x00108c57, 0x5c00b000,
- 0x5c001800, 0x5c001000, 0x1c01f000, 0x4933c856,
- 0x493a6403, 0x0201f800, 0x0010421b, 0x0201f000,
- 0x00101e2e, 0x493bc857, 0x4d2c0000, 0x0201f800,
- 0x00100583, 0x02000800, 0x0010032e, 0x832cac00,
- 0x00000006, 0x4c580000, 0x4c540000, 0x4200b000,
- 0x00000006, 0x4578a800, 0x8054a800, 0x8058b040,
- 0x040207fd, 0x83380580, 0x00000046, 0x04020004,
- 0x4a025805, 0x00000144, 0x0401f008, 0x4a025805,
- 0x00000146, 0x83380580, 0x00000041, 0x04000003,
- 0x4a025a07, 0x00000001, 0x59cc0007, 0x82000500,
- 0xff000000, 0x80000110, 0x59cc1008, 0x82081500,
- 0xff000000, 0x80081540, 0x480a580b, 0x83380580,
- 0x00000046, 0x04020006, 0x59cc0007, 0x82000500,
- 0x00ffffff, 0x4802580c, 0x0401f005, 0x59cc0008,
- 0x82000500, 0x00ffffff, 0x4802580c, 0x83380580,
- 0x00000046, 0x04020004, 0x83cc1400, 0x00000009,
- 0x0401f003, 0x83cc1400, 0x0000000d, 0x50080000,
- 0x9c0001c0, 0x4802580d, 0x80081000, 0x50080000,
- 0x9c0001c0, 0x4802580e, 0x83380580, 0x00000046,
- 0x04020008, 0x59cc000b, 0x9c0001c0, 0x4802580f,
- 0x59cc000c, 0x9c0001c0, 0x48025810, 0x0401f007,
- 0x59cc000f, 0x9c0001c0, 0x4802580f, 0x59cc0010,
- 0x9c0001c0, 0x48025810, 0x83380580, 0x00000046,
- 0x04020004, 0x83cc1400, 0x00000011, 0x0401f003,
- 0x83cc1400, 0x00000015, 0x412c3000, 0x82183400,
- 0x00000011, 0x4200b000, 0x00000004, 0x50080000,
- 0x9c0001c0, 0x44003000, 0x80081000, 0x80183000,
- 0x8058b040, 0x040207fa, 0x5c00a800, 0x5c00b000,
- 0x0201f800, 0x000203ef, 0x5c025800, 0x1c01f000,
- 0x4933c857, 0x492fc857, 0x5930080a, 0x58040200,
- 0x8c00051e, 0x04000004, 0x592c0209, 0x84000558,
- 0x48025a09, 0x1c01f000, 0x59e0180f, 0x599c0413,
- 0x800c1000, 0x80080580, 0x04020002, 0x41781000,
- 0x59e00010, 0x59e00810, 0x80040d80, 0x040207fd,
- 0x80080580, 0x0400000b, 0x4c080000, 0x599c0814,
- 0x599c1015, 0x800c00cc, 0x80040c00, 0x82081440,
- 0x00000000, 0x5c001800, 0x82000540, 0x00000001,
- 0x4803c857, 0x1c01f000, 0x59300203, 0x4933c857,
- 0x4937c857, 0x493bc857, 0x4803c857, 0x82003480,
- 0x0000000e, 0x02021800, 0x0010032e, 0x0c01f001,
- 0x0010b4ea, 0x0010b60f, 0x0010b4ea, 0x0010b4ea,
- 0x0010b4ea, 0x0010b4ea, 0x0010b4ea, 0x0010b56a,
- 0x0010b4ec, 0x0010b4ea, 0x0010b4ea, 0x0010b4ea,
- 0x0010b4ea, 0x0010b4ea, 0x0201f800, 0x0010032e,
- 0x83380580, 0x0000004c, 0x02020800, 0x0010032e,
- 0x0201f800, 0x00104956, 0x04020023, 0x59a80a1b,
- 0x5932481c, 0x59240200, 0x82000500, 0x000000e0,
- 0x82000580, 0x00000080, 0x0400001b, 0x8c040d12,
- 0x04000032, 0x59cc0806, 0x82040d00, 0xff000000,
- 0x82040580, 0x03000000, 0x04000020, 0x82040580,
- 0x50000000, 0x04000005, 0x82040580, 0x52000000,
- 0x02020000, 0x00020b9d, 0x83340580, 0x0010e23c,
- 0x04000006, 0x4d3c0000, 0x417a7800, 0x0201f800,
- 0x0010ff80, 0x5c027800, 0x4a026403, 0x00000001,
- 0x0401f014, 0x59cc0806, 0x82040d00, 0xff000000,
- 0x82040580, 0x03000000, 0x04000008, 0x82040580,
- 0x50000000, 0x04000005, 0x82040580, 0x52000000,
- 0x02020000, 0x00020b9d, 0x4a026403, 0x00000009,
- 0x4a02641b, 0x00000009, 0x4a02621b, 0x00000000,
- 0x4a026407, 0x00000004, 0x4a026203, 0x00000001,
- 0x0201f000, 0x00106d1c, 0x59240400, 0x8c00050a,
- 0x04020023, 0x0201f800, 0x0010c0f9, 0x04020020,
- 0x59cc0806, 0x4807c857, 0x82040d00, 0xff000000,
- 0x82040580, 0x03000000, 0x04000013, 0x82040580,
- 0x20000000, 0x04000010, 0x82040580, 0x21000000,
- 0x0400000d, 0x82040580, 0x24000000, 0x0400000a,
- 0x82040580, 0x50000000, 0x04000007, 0x82040580,
- 0x52000000, 0x04000004, 0x82040580, 0x05000000,
- 0x0402000a, 0x9c0431c0, 0x42028000, 0x00000046,
- 0x42002800, 0x00000001, 0x0401fc39, 0x0401f92d,
- 0x02000800, 0x0010032e, 0x42002000, 0x00000051,
- 0x0201f800, 0x0010800d, 0x59cc0000, 0x82000500,
- 0x00ffffff, 0x82000580, 0x00ffffff, 0x04000005,
- 0x4a026203, 0x00000007, 0x493a6403, 0x1c01f000,
- 0x59325818, 0x812e59c0, 0x02020800, 0x0010059d,
- 0x0201f000, 0x00020b9d, 0x4d2c0000, 0x4c580000,
- 0x4c500000, 0x4c540000, 0x41385000, 0x83380580,
- 0x00000054, 0x02020800, 0x0010032e, 0x59325809,
+ 0x0201f800, 0x00100599, 0x02000800, 0x0010032f,
+ 0x5c002800, 0x5c000800, 0x04011000, 0x832c0400,
+ 0x00000005, 0x4803c840, 0x4a03c842, 0x00000010,
+ 0x40000000, 0x040117ff, 0x4a025805, 0x0000010d,
+ 0x497a5800, 0x4a025a09, 0x00000045, 0x491e580a,
+ 0x59300402, 0x48025c08, 0x5930041a, 0x48025c0c,
+ 0x591c0415, 0x84000556, 0x48023c15, 0x591c180a,
+ 0x580c0403, 0x48025a07, 0x580c0002, 0x82000500,
+ 0x00ffffff, 0x48025813, 0x59cc0404, 0x48025c14,
+ 0x497a5a08, 0x4816580b, 0x48065a0c, 0x580c0013,
+ 0x82000500, 0xff000000, 0x80000120, 0x48025c11,
+ 0x0401fb9d, 0x493a6403, 0x4d400000, 0x42028000,
+ 0x00000045, 0x591c0202, 0x4c000000, 0x4d300000,
+ 0x411e6000, 0x0401fc33, 0x5c026000, 0x5c000000,
+ 0x48023a02, 0x5c028000, 0x491e6027, 0x4932381d,
+ 0x4a023c07, 0x00000006, 0x4a023a03, 0x00000007,
+ 0x497a3806, 0x497a3a05, 0x1c01f000, 0x4933c857,
+ 0x83380580, 0x00000013, 0x0402000b, 0x59300403,
+ 0x4803c857, 0x82000d80, 0x00000085, 0x0400002b,
+ 0x82000d80, 0x0000008b, 0x04000028, 0x0201f800,
+ 0x0010032f, 0x83380580, 0x00000027, 0x0402000c,
+ 0x0201f800, 0x001070fc, 0x4d2c0000, 0x4d400000,
+ 0x59325809, 0x42028000, 0x00000004, 0x0401fddd,
+ 0x5c028000, 0x5c025800, 0x1c01f000, 0x83380580,
+ 0x00000014, 0x040007f3, 0x83380580, 0x00000089,
+ 0x04000005, 0x83380580, 0x0000008a, 0x02020000,
+ 0x001082d6, 0x0201f800, 0x00107595, 0x02020000,
+ 0x001082d6, 0x59300a03, 0x82040580, 0x0000000a,
+ 0x04000009, 0x82040580, 0x0000000c, 0x04000006,
+ 0x0201f800, 0x0010032f, 0x4a026203, 0x0000000a,
+ 0x1c01f000, 0x83380480, 0x00000093, 0x0402100c,
+ 0x83380480, 0x00000085, 0x04001009, 0x83380580,
+ 0x00000089, 0x0400000a, 0x83380580, 0x0000008a,
+ 0x04000024, 0x0201f800, 0x0010032f, 0x493bc857,
+ 0x4933c857, 0x0201f000, 0x001082d6, 0x4933c857,
+ 0x4c340000, 0x41306800, 0x0201f800, 0x00108297,
+ 0x04000013, 0x4a026203, 0x00000001, 0x4a026403,
+ 0x0000001e, 0x59cc0c07, 0x4806641a, 0x59cc0a07,
+ 0x4806621a, 0x5834080a, 0x4806600a, 0x5834081c,
+ 0x4806601c, 0x4a026407, 0x00000004, 0x42000800,
+ 0x80000040, 0x0201f800, 0x00020a9f, 0x40366000,
+ 0x0201f800, 0x00020afe, 0x5c006800, 0x1c01f000,
+ 0x4933c857, 0x0201f000, 0x00020afe, 0x5930080a,
+ 0x58040200, 0x8c00051a, 0x02020800, 0x001003fe,
+ 0x1c01f000, 0x0201f800, 0x00104a98, 0x0400001e,
+ 0x4a026203, 0x00000002, 0x59300415, 0x84000558,
+ 0x48026415, 0x8c000512, 0x04000004, 0x59a80032,
+ 0x48026205, 0x0401f007, 0x59a80832, 0x59a80030,
+ 0x80040400, 0x82000400, 0x0000001e, 0x48026205,
+ 0x5930000a, 0x82000c00, 0x00000011, 0x50040000,
+ 0x80000540, 0x04000004, 0x82000c00, 0x00000000,
+ 0x0401f7fb, 0x45300800, 0x497a6000, 0x82000540,
+ 0x00000001, 0x1c01f000, 0x82100500, 0xfffffeef,
+ 0x0402001c, 0x4d2c0000, 0x4937c857, 0x59340811,
+ 0x83341400, 0x00000011, 0x800409c0, 0x0400000e,
+ 0x40040000, 0x81300580, 0x04000005, 0x82041400,
+ 0x00000000, 0x58040800, 0x0401f7f8, 0x59300800,
+ 0x497a6000, 0x44041000, 0x0201f800, 0x00020a58,
+ 0x0401f002, 0x4933c857, 0x5c025800, 0x492e6009,
+ 0x0201f800, 0x00020a58, 0x0201f000, 0x00020afe,
+ 0x492fc857, 0x4a025a07, 0x00000006, 0x0201f000,
+ 0x00020401, 0x4c340000, 0x5930000a, 0x800001c0,
+ 0x04000011, 0x82006c00, 0x00000011, 0x50340000,
+ 0x80000540, 0x0400000a, 0x81300580, 0x04000005,
+ 0x50340000, 0x82006c00, 0x00000000, 0x0401f7f8,
+ 0x59300000, 0x44006800, 0x497a6000, 0x5c006800,
+ 0x1c01f000, 0x59300c07, 0x82040580, 0x00000005,
+ 0x040007fb, 0x82040580, 0x00000011, 0x040007f8,
+ 0x82040580, 0x00000006, 0x040007f5, 0x82040580,
+ 0x00000001, 0x040007f2, 0x0201f800, 0x0010032f,
+ 0x4c340000, 0x0401f821, 0x04020011, 0x82006c00,
+ 0x00000011, 0x50340000, 0x80000540, 0x0400000a,
+ 0x81300580, 0x04000005, 0x50340000, 0x82006c00,
+ 0x00000000, 0x0401f7f8, 0x59300000, 0x44006800,
+ 0x497a6000, 0x5c006800, 0x1c01f000, 0x59300c07,
+ 0x82040580, 0x00000005, 0x040007fb, 0x82040580,
+ 0x00000011, 0x040007f8, 0x82040580, 0x00000006,
+ 0x040007f5, 0x82040580, 0x00000001, 0x040007f2,
+ 0x0201f800, 0x0010032f, 0x4c5c0000, 0x4c600000,
+ 0x5930000a, 0x800001c0, 0x0400000c, 0x5800bc03,
+ 0x825cbc00, 0x0010c880, 0x505cb800, 0x805cb9c0,
+ 0x04000006, 0x805cc580, 0x04020004, 0x5c00c000,
+ 0x5c00b800, 0x1c01f000, 0x4933c857, 0x4803c857,
+ 0x485fc857, 0x825cbd40, 0x00000001, 0x0401f7f8,
+ 0x4933c857, 0x4c080000, 0x4c0c0000, 0x4c580000,
+ 0x59a8101e, 0x59cc1807, 0x820c1d00, 0x00ffffff,
+ 0x800c0110, 0x80083580, 0x04020014, 0x83cc1400,
+ 0x00000008, 0x4200b000, 0x00000002, 0x5930000a,
+ 0x82001c00, 0x00000006, 0x0201f800, 0x00108fc3,
+ 0x0402000a, 0x83cc1400, 0x0000000a, 0x4200b000,
+ 0x00000002, 0x5930000a, 0x82001c00, 0x00000008,
+ 0x0201f800, 0x00108fc3, 0x5c00b000, 0x5c001800,
+ 0x5c001000, 0x1c01f000, 0x4933c856, 0x493a6403,
+ 0x0201f800, 0x00104306, 0x0201f000, 0x00101eb6,
+ 0x493bc857, 0x4d2c0000, 0x0201f800, 0x00100599,
+ 0x02000800, 0x0010032f, 0x832cac00, 0x00000006,
+ 0x4c580000, 0x4c540000, 0x4200b000, 0x00000006,
+ 0x4578a800, 0x8054a800, 0x8058b040, 0x040207fd,
+ 0x83380580, 0x00000046, 0x04020004, 0x4a025805,
+ 0x00000144, 0x0401f008, 0x4a025805, 0x00000146,
+ 0x83380580, 0x00000041, 0x04000003, 0x4a025a07,
+ 0x00000001, 0x59cc0007, 0x82000500, 0xff000000,
+ 0x80000110, 0x59cc1008, 0x82081500, 0xff000000,
+ 0x80081540, 0x480a580b, 0x83380580, 0x00000046,
+ 0x04020006, 0x59cc0007, 0x82000500, 0x00ffffff,
+ 0x4802580c, 0x0401f005, 0x59cc0008, 0x82000500,
+ 0x00ffffff, 0x4802580c, 0x83380580, 0x00000046,
+ 0x04020004, 0x83cc1400, 0x00000009, 0x0401f003,
+ 0x83cc1400, 0x0000000d, 0x50080000, 0x9c0001c0,
+ 0x4802580d, 0x80081000, 0x50080000, 0x9c0001c0,
+ 0x4802580e, 0x83380580, 0x00000046, 0x04020008,
+ 0x59cc000b, 0x9c0001c0, 0x4802580f, 0x59cc000c,
+ 0x9c0001c0, 0x48025810, 0x0401f007, 0x59cc000f,
+ 0x9c0001c0, 0x4802580f, 0x59cc0010, 0x9c0001c0,
+ 0x48025810, 0x83380580, 0x00000046, 0x04020004,
+ 0x83cc1400, 0x00000011, 0x0401f003, 0x83cc1400,
+ 0x00000015, 0x412c3000, 0x82183400, 0x00000011,
+ 0x4200b000, 0x00000004, 0x50080000, 0x9c0001c0,
+ 0x44003000, 0x80081000, 0x80183000, 0x8058b040,
+ 0x040207fa, 0x5c00a800, 0x5c00b000, 0x0201f800,
+ 0x00020401, 0x5c025800, 0x1c01f000, 0x4933c857,
+ 0x492fc857, 0x5930080a, 0x58040200, 0x8c00051e,
+ 0x04000004, 0x592c0209, 0x84000558, 0x48025a09,
+ 0x1c01f000, 0x59e0180f, 0x599c0413, 0x800c1000,
+ 0x80080580, 0x04020002, 0x41781000, 0x59e00010,
+ 0x59e00810, 0x80040d80, 0x040207fd, 0x80080580,
+ 0x0400001a, 0x4c080000, 0x80102040, 0x0400000e,
+ 0x599c0413, 0x80081000, 0x80080580, 0x04020002,
+ 0x41781000, 0x59e00010, 0x59e00810, 0x80040d80,
+ 0x040207fd, 0x80080580, 0x040207f4, 0x5c001000,
+ 0x0401f00a, 0x599c0814, 0x599c1015, 0x800c00cc,
+ 0x80040c00, 0x82081440, 0x00000000, 0x5c001800,
+ 0x82000540, 0x00000001, 0x4803c857, 0x1c01f000,
+ 0x59300203, 0x4933c857, 0x4937c857, 0x493bc857,
+ 0x4803c857, 0x82003480, 0x0000000e, 0x02021800,
+ 0x0010032f, 0x0c01f001, 0x0010ba28, 0x0010bb57,
+ 0x0010ba28, 0x0010ba28, 0x0010ba28, 0x0010ba28,
+ 0x0010ba28, 0x0010baa9, 0x0010ba2a, 0x0010ba28,
+ 0x0010ba28, 0x0010ba28, 0x0010ba28, 0x0010ba28,
+ 0x0201f800, 0x0010032f, 0x83380580, 0x0000004c,
+ 0x02020800, 0x0010032f, 0x0201f800, 0x00104aac,
+ 0x04020023, 0x59a80a21, 0x5932481c, 0x59240200,
+ 0x82000500, 0x000000e0, 0x82000580, 0x00000080,
+ 0x0400001b, 0x8c040d12, 0x04000032, 0x59cc0806,
+ 0x82040d00, 0xff000000, 0x82040580, 0x03000000,
+ 0x04000020, 0x82040580, 0x50000000, 0x04000005,
+ 0x82040580, 0x52000000, 0x02020000, 0x00020afe,
+ 0x83340580, 0x0010e85a, 0x04000006, 0x4d3c0000,
+ 0x417a7800, 0x0201f800, 0x00110684, 0x5c027800,
+ 0x4a026403, 0x00000001, 0x0401f014, 0x59cc0806,
+ 0x82040d00, 0xff000000, 0x82040580, 0x03000000,
+ 0x04000008, 0x82040580, 0x50000000, 0x04000005,
+ 0x82040580, 0x52000000, 0x02020000, 0x00020afe,
+ 0x4a026403, 0x00000009, 0x4a02641b, 0x00000009,
+ 0x4a02621b, 0x00000000, 0x4a026407, 0x00000004,
+ 0x4a026203, 0x00000001, 0x0201f000, 0x0010707f,
+ 0x59240400, 0x8c00050a, 0x04020024, 0x0201f800,
+ 0x0010c669, 0x04020021, 0x59cc0806, 0x4807c857,
+ 0x82040d00, 0xff000000, 0x82040580, 0x03000000,
+ 0x04000013, 0x82040580, 0x20000000, 0x04000010,
+ 0x82040580, 0x21000000, 0x0400000d, 0x82040580,
+ 0x24000000, 0x0400000a, 0x82040580, 0x50000000,
+ 0x04000007, 0x82040580, 0x52000000, 0x04000004,
+ 0x82040580, 0x05000000, 0x0402000b, 0x9c0431c0,
+ 0x42028000, 0x00000046, 0x42002800, 0x00000001,
+ 0x0201f800, 0x0010b651, 0x0401f93f, 0x02000800,
+ 0x0010032f, 0x42002000, 0x00000051, 0x0201f800,
+ 0x001083ac, 0x59cc0000, 0x82000500, 0x00ffffff,
+ 0x82000580, 0x00ffffff, 0x04000005, 0x4a026203,
+ 0x00000007, 0x493a6403, 0x1c01f000, 0x59325818,
+ 0x812e59c0, 0x02020800, 0x001005b3, 0x0201f000,
+ 0x00020afe, 0x4d2c0000, 0x4c580000, 0x4c500000,
+ 0x4c540000, 0x4dcc0000, 0x41385000, 0x83380580,
+ 0x00000054, 0x02020800, 0x0010032f, 0x59325809,
0x592c0c0c, 0x82040d00, 0x0000e000, 0x82040580,
- 0x00002000, 0x04020080, 0x59300818, 0x800409c0,
- 0x04000016, 0x58041405, 0x41cca800, 0x8204a400,
- 0x00000006, 0x82080480, 0x00000010, 0x04021005,
- 0x4008b000, 0x0201f800, 0x0010c086, 0x0401f00b,
- 0x40001000, 0x4200b000, 0x0000000f, 0x0201f800,
- 0x0010c086, 0x58040801, 0x800409c0, 0x040207f0,
- 0x0201f800, 0x0010032e, 0x83340580, 0x0010e23c,
- 0x04000065, 0x59344c00, 0x592c0c0a, 0x4807c857,
- 0x4827c857, 0x82040d00, 0x000000ff, 0x82040580,
- 0x00000003, 0x0400002a, 0x82040580, 0x00000005,
- 0x04000031, 0x82040580, 0x00000020, 0x0400003d,
- 0x82040580, 0x00000052, 0x04000049, 0x82040580,
- 0x00000050, 0x04000049, 0x82040580, 0x00000021,
- 0x04000004, 0x82040580, 0x00000024, 0x0402004a,
- 0x82240500, 0x0000ff00, 0x82000580, 0x00000700,
- 0x04000008, 0x42000800, 0x00000009, 0x0201f800,
- 0x001045ea, 0x42005000, 0x0000000c, 0x0401f03e,
- 0x4a025a07, 0x00000031, 0x4a02580e, 0x00000009,
- 0x59340400, 0x4802580f, 0x0201f800, 0x000203ef,
- 0x0201f800, 0x00107eb4, 0x0401f044, 0x41780800,
- 0x0201f800, 0x001046e4, 0x42000800, 0x00000003,
- 0x0201f800, 0x001045ea, 0x42005000, 0x00000008,
- 0x0401f029, 0x59cc3800, 0x821c3d00, 0x00ffffff,
- 0x4c1c0000, 0x0201f800, 0x00101fc9, 0x5c003800,
- 0x04020021, 0x59cc0007, 0x0201f800, 0x001063d6,
- 0x0402001d, 0x4a026c00, 0x00000707, 0x0401f01a,
- 0x82240500, 0x0000ff00, 0x82000580, 0x00000700,
- 0x040007d8, 0x82240500, 0x000000ff, 0x82000580,
- 0x00000009, 0x040007d3, 0x0201f800, 0x00104752,
- 0x42005000, 0x0000000a, 0x0401f00b, 0x42005000,
- 0x0000000e, 0x0401f003, 0x42005000, 0x00000010,
- 0x82240500, 0x0000ff00, 0x82000580, 0x00000700,
- 0x040007c4, 0x482a6403, 0x4a026203, 0x00000001,
- 0x592c000e, 0x48026012, 0x497a6014, 0x59a8002b,
- 0x48026006, 0x417a7800, 0x0201f800, 0x00106d1c,
- 0x59325818, 0x812e59c0, 0x04000004, 0x0201f800,
- 0x0010059d, 0x497a6018, 0x5c00a800, 0x5c00a000,
+ 0x00002000, 0x04020087, 0x59300818, 0x800409c0,
+ 0x0400001d, 0x58041405, 0x42039800, 0x0010fbea,
+ 0x82080480, 0x0000001c, 0x04001003, 0x42001000,
+ 0x0000001b, 0x41cca800, 0x8204a400, 0x00000006,
+ 0x82080480, 0x00000010, 0x04021005, 0x4008b000,
+ 0x0201f800, 0x0010c5dd, 0x0401f00b, 0x80001000,
+ 0x4200b000, 0x0000000f, 0x0201f800, 0x0010c5dd,
+ 0x58040801, 0x800409c0, 0x040207f0, 0x0201f800,
+ 0x0010032f, 0x83340580, 0x0010e85a, 0x04000065,
+ 0x59344c00, 0x592c0c0a, 0x4807c857, 0x4827c857,
+ 0x82040d00, 0x000000ff, 0x82040580, 0x00000003,
+ 0x0400002a, 0x82040580, 0x00000005, 0x04000031,
+ 0x82040580, 0x00000020, 0x0400003d, 0x82040580,
+ 0x00000052, 0x04000049, 0x82040580, 0x00000050,
+ 0x04000049, 0x82040580, 0x00000021, 0x04000004,
+ 0x82040580, 0x00000024, 0x0402004a, 0x82240500,
+ 0x0000ff00, 0x82000580, 0x00000700, 0x04000008,
+ 0x42000800, 0x00000009, 0x0201f800, 0x00104736,
+ 0x42005000, 0x0000000c, 0x0401f03e, 0x4a025a07,
+ 0x00000031, 0x4a02580e, 0x00000009, 0x59340400,
+ 0x4802580f, 0x0201f800, 0x00020401, 0x0201f800,
+ 0x00108253, 0x0401f044, 0x41780800, 0x0201f800,
+ 0x00104833, 0x42000800, 0x00000003, 0x0201f800,
+ 0x00104736, 0x42005000, 0x00000008, 0x0401f029,
+ 0x59cc3800, 0x821c3d00, 0x00ffffff, 0x4c1c0000,
+ 0x0201f800, 0x00102051, 0x5c003800, 0x04020021,
+ 0x59cc0007, 0x0201f800, 0x00106731, 0x0402001d,
+ 0x4a026c00, 0x00000707, 0x0401f01a, 0x82240500,
+ 0x0000ff00, 0x82000580, 0x00000700, 0x040007d8,
+ 0x82240500, 0x000000ff, 0x82000580, 0x00000009,
+ 0x040007d3, 0x0201f800, 0x001048a1, 0x42005000,
+ 0x0000000a, 0x0401f00b, 0x42005000, 0x0000000e,
+ 0x0401f003, 0x42005000, 0x00000010, 0x82240500,
+ 0x0000ff00, 0x82000580, 0x00000700, 0x040007c4,
+ 0x482a6403, 0x4a026203, 0x00000001, 0x592c000e,
+ 0x48026012, 0x497a6014, 0x59a80031, 0x48026006,
+ 0x417a7800, 0x0201f800, 0x0010707f, 0x59325818,
+ 0x812e59c0, 0x04000004, 0x0201f800, 0x001005b3,
+ 0x497a6018, 0x5c039800, 0x5c00a800, 0x5c00a000,
0x5c00b000, 0x5c025800, 0x1c01f000, 0x4d2c0000,
- 0x59325809, 0x83380580, 0x00000013, 0x0402003c,
+ 0x59325809, 0x83380580, 0x00000013, 0x04020045,
0x492fc857, 0x59300c03, 0x82040580, 0x00000054,
- 0x04000030, 0x82040580, 0x00000010, 0x0400002a,
- 0x82040580, 0x0000000e, 0x04000027, 0x59341400,
+ 0x04000039, 0x82040580, 0x00000010, 0x04000033,
+ 0x82040580, 0x0000000e, 0x04000030, 0x59341400,
0x82081d00, 0x0000ff00, 0x82081500, 0x000000ff,
0x82040580, 0x00000008, 0x04000013, 0x82040580,
- 0x0000000c, 0x04000013, 0x82040580, 0x0000000a,
- 0x02020800, 0x0010032e, 0x820c0580, 0x00000700,
- 0x04000018, 0x82080580, 0x00000009, 0x04000015,
- 0x42000800, 0x00000006, 0x0201f800, 0x001045ea,
- 0x0401f010, 0x42000000, 0x00000003, 0x0401f003,
- 0x42000000, 0x00000009, 0x80080580, 0x04020009,
- 0x42000800, 0x00000004, 0x0201f800, 0x001045ea,
- 0x0401f004, 0x59340200, 0x8400051a, 0x48026a00,
- 0x4a025a07, 0x00000000, 0x0201f800, 0x000203ef,
- 0x0201f800, 0x00020b9d, 0x0401f024, 0x83380580,
- 0x00000027, 0x0400000f, 0x83380580, 0x00000014,
- 0x02020800, 0x0010032e, 0x492fc857, 0x0201f800,
- 0x00106d91, 0x42028000, 0x00000031, 0x42000800,
- 0x00000004, 0x42001000, 0x000000ff, 0x0401f00a,
- 0x492fc857, 0x0201f800, 0x00106d91, 0x42028000,
- 0x00000031, 0x42000800, 0x00000004, 0x42001000,
- 0x00000010, 0x49425a07, 0x4806580e, 0x480a580f,
- 0x0201f800, 0x000203ef, 0x0201f800, 0x00104cbe,
- 0x0201f800, 0x00107eb4, 0x5c025800, 0x1c01f000,
- 0x492fc857, 0x42007000, 0x00020cf0, 0x58380806,
- 0x492c7006, 0x800409c0, 0x04020004, 0x492c7007,
- 0x0201f000, 0x00020026, 0x492c0800, 0x1c01f000,
- 0x4d2c0000, 0x4c580000, 0x4c500000, 0x4c540000,
- 0x4933c857, 0x4937c857, 0x59cc0806, 0x4807c857,
- 0x82040d00, 0xff000000, 0x82040580, 0x03000000,
- 0x0400000d, 0x82040580, 0x05000000, 0x0400000a,
- 0x82040580, 0x21000000, 0x04000032, 0x82040580,
- 0x24000000, 0x0400002f, 0x82040580, 0x20000000,
- 0x04020031, 0x0201f800, 0x00100583, 0x0400002e,
- 0x492fc857, 0x492e6018, 0x59a8b05a, 0x8258b400,
- 0x0000001b, 0x8258b500, 0xfffffffc, 0x8058b104,
- 0x485a5c05, 0x412c7800, 0x41cca000, 0x82580480,
- 0x00000010, 0x04021006, 0x832cac00, 0x00000006,
- 0x0201f800, 0x0010c086, 0x0401f016, 0x40580800,
- 0x4200b000, 0x0000000f, 0x832cac00, 0x00000006,
- 0x0201f800, 0x0010c086, 0x8204b480, 0x0000000f,
- 0x0201f800, 0x00100583, 0x04000004, 0x492c7801,
- 0x412c7800, 0x0401f7ea, 0x59325818, 0x0201f800,
- 0x0010059d, 0x497a6018, 0x80000580, 0x0401f006,
- 0x59340200, 0x84000554, 0x48026a00, 0x82000540,
- 0x00000001, 0x5c00a800, 0x5c00a000, 0x5c00b000,
- 0x5c025800, 0x1c01f000, 0x4933c857, 0x492fc857,
- 0x4d2c0000, 0x59300a03, 0x82040580, 0x00000007,
- 0x04000037, 0x82040580, 0x00000001, 0x02020800,
- 0x0010032e, 0x0201f800, 0x00106e41, 0x4df00000,
- 0x598c000f, 0x81300580, 0x04020016, 0x59300004,
+ 0x0000000c, 0x0400001c, 0x82040580, 0x0000000a,
+ 0x02020800, 0x0010032f, 0x820c0580, 0x00000700,
+ 0x04000021, 0x82080580, 0x00000009, 0x0400001e,
+ 0x42000800, 0x00000006, 0x0201f800, 0x00104736,
+ 0x0401f019, 0x592c0c0c, 0x8c040d14, 0x04000007,
+ 0x82080580, 0x00000003, 0x04020013, 0x0201f800,
+ 0x001048e1, 0x0401f7f3, 0x42000000, 0x00000003,
+ 0x0401f003, 0x42000000, 0x00000009, 0x80080580,
+ 0x04020009, 0x42000800, 0x00000004, 0x0201f800,
+ 0x00104736, 0x0401f004, 0x59340200, 0x8400051a,
+ 0x48026a00, 0x4a025a07, 0x00000000, 0x0201f800,
+ 0x00020401, 0x0201f800, 0x00020afe, 0x0401f024,
+ 0x83380580, 0x00000027, 0x0400000f, 0x83380580,
+ 0x00000014, 0x02020800, 0x0010032f, 0x492fc857,
+ 0x0201f800, 0x001070fc, 0x42028000, 0x00000031,
+ 0x42000800, 0x00000004, 0x42001000, 0x000000ff,
+ 0x0401f00a, 0x492fc857, 0x0201f800, 0x001070fc,
+ 0x42028000, 0x00000031, 0x42000800, 0x00000004,
+ 0x42001000, 0x00000010, 0x49425a07, 0x4806580e,
+ 0x480a580f, 0x0201f800, 0x00020401, 0x0201f800,
+ 0x00104e29, 0x0201f800, 0x00108253, 0x5c025800,
+ 0x1c01f000, 0x492fc857, 0x42007000, 0x00020c51,
+ 0x58380806, 0x492c7006, 0x800409c0, 0x04020004,
+ 0x492c7007, 0x0201f000, 0x00020027, 0x492c0800,
+ 0x1c01f000, 0x4d2c0000, 0x4c580000, 0x4c500000,
+ 0x4c540000, 0x4933c857, 0x4937c857, 0x59cc0806,
+ 0x4807c857, 0x82040d00, 0xff000000, 0x82040580,
+ 0x03000000, 0x0400000d, 0x82040580, 0x05000000,
+ 0x0400000a, 0x82040580, 0x21000000, 0x04000032,
+ 0x82040580, 0x24000000, 0x0400002f, 0x82040580,
+ 0x20000000, 0x04020031, 0x0201f800, 0x00100599,
+ 0x0400002e, 0x492fc857, 0x492e6018, 0x59a8b068,
+ 0x8258b400, 0x0000001b, 0x8258b500, 0xfffffffc,
+ 0x8058b104, 0x485a5c05, 0x412c7800, 0x41cca000,
+ 0x82580480, 0x00000010, 0x04021006, 0x832cac00,
+ 0x00000006, 0x0201f800, 0x0010c5dd, 0x0401f016,
+ 0x40580800, 0x4200b000, 0x0000000f, 0x832cac00,
+ 0x00000006, 0x0201f800, 0x0010c5dd, 0x8204b480,
+ 0x0000000f, 0x0201f800, 0x00100599, 0x04000004,
+ 0x492c7801, 0x412c7800, 0x0401f7ea, 0x59325818,
+ 0x0201f800, 0x001005b3, 0x497a6018, 0x80000580,
+ 0x0401f006, 0x59340200, 0x84000554, 0x48026a00,
+ 0x82000540, 0x00000001, 0x5c00a800, 0x5c00a000,
+ 0x5c00b000, 0x5c025800, 0x1c01f000, 0x4933c857,
+ 0x492fc857, 0x4d2c0000, 0x59300a03, 0x82040580,
+ 0x00000007, 0x04020008, 0x59325818, 0x812e59c0,
+ 0x02020800, 0x001005b3, 0x0201f800, 0x00020afe,
+ 0x0401f03a, 0x82040580, 0x00000001, 0x02020800,
+ 0x0010032f, 0x0201f800, 0x001071b0, 0x4df00000,
+ 0x598c000f, 0x81300580, 0x04020011, 0x59300004,
0x8c000520, 0x04000004, 0x84000520, 0x48026004,
- 0x0401f016, 0x42001000, 0x0010ce5b, 0x50081000,
- 0x58080002, 0x82000580, 0x00000100, 0x04000006,
- 0x5808000b, 0x81300580, 0x02020800, 0x0010032e,
- 0x0401f00a, 0x0201f800, 0x00107161, 0x04020021,
- 0x59300004, 0x8c000520, 0x04000004, 0x84000520,
- 0x48026004, 0x0401f004, 0x0201f800, 0x001101de,
- 0x80c40040, 0x5c03e000, 0x02000800, 0x00106e2e,
- 0x0201f800, 0x0010989f, 0x02000800, 0x0010032e,
- 0x59325809, 0x4a025a07, 0x00000005, 0x0201f800,
- 0x000203ef, 0x0201f800, 0x00104cbe, 0x59325818,
- 0x812e59c0, 0x02020800, 0x0010059d, 0x0201f800,
- 0x00107eb4, 0x80000580, 0x5c025800, 0x1c01f000,
- 0x5c03e000, 0x02000800, 0x00106e2e, 0x59300c07,
- 0x82040580, 0x00000011, 0x040007b7, 0x0401f7f7,
- 0x4c040000, 0x59340200, 0x4803c857, 0x8c00051c,
- 0x04000009, 0x59cc0805, 0x591c001a, 0x4803c857,
- 0x80040580, 0x04000004, 0x80000580, 0x4803c856,
- 0x0401f003, 0x82000540, 0x00000001, 0x5c000800,
- 0x1c01f000, 0x4c000000, 0x4c0c0000, 0x4c100000,
- 0x42001800, 0x0000ffff, 0x42002000, 0x00000004,
- 0x0401f013, 0x4c000000, 0x4c0c0000, 0x4c100000,
- 0x5930200a, 0x58101c03, 0x42002000, 0x00000004,
- 0x0401f00b, 0x4c000000, 0x4c0c0000, 0x4c100000,
- 0x5930200a, 0x801021c0, 0x02000800, 0x0010032e,
- 0x58101c03, 0x42002000, 0x00000007, 0x480fc857,
- 0x4813c857, 0x481bc857, 0x0201f800, 0x00101fb4,
- 0x0201f800, 0x00103a21, 0x5c002000, 0x5c001800,
- 0x5c000000, 0x1c01f000, 0x8d0e1d20, 0x0400000c,
- 0x4d400000, 0x4d200000, 0x42024000, 0x000000ff,
- 0x850e1d44, 0x42028000, 0x0000002a, 0x0201f800,
- 0x0010b198, 0x5c024000, 0x5c028000, 0x1c01f000,
- 0x59a8021b, 0x8c000508, 0x04000005, 0x599c0017,
- 0x8c00050a, 0x04020002, 0x1c01f000, 0x82000540,
- 0x00000001, 0x1c01f000, 0x59300429, 0x84000540,
- 0x48026429, 0x1c01f000, 0x4c640000, 0x0201f800,
- 0x00109ccc, 0x59300203, 0x82000580, 0x00000008,
- 0x04020015, 0x4200c800, 0x00000032, 0x42000000,
- 0x20000000, 0x41300800, 0x0201f800, 0x001008c7,
- 0x0400000d, 0x59300203, 0x82000580, 0x00000008,
- 0x04020009, 0x42000000, 0x0000001e, 0x80000040,
- 0x040207ff, 0x8064c840, 0x040207f1, 0x0201f800,
- 0x0010032e, 0x0201f800, 0x00109ce4, 0x5c00c800,
- 0x1c01f000, 0x0201f800, 0x00100583, 0x02000800,
- 0x0010032e, 0x59340403, 0x49265802, 0x49365803,
- 0x4a025a05, 0x00000055, 0x48025c07, 0x4a025c08,
- 0x00001000, 0x59340802, 0x82040d00, 0x00ffffff,
- 0x59300403, 0x82000580, 0x00000086, 0x42000000,
- 0x85000000, 0x04020003, 0x42000000, 0x84000000,
- 0x80040540, 0x4802580a, 0x59240005, 0x4802580b,
- 0x42000000, 0x00990000, 0x59300c07, 0x82040d80,
- 0x00000005, 0x04000002, 0x8400052e, 0x4802580c,
- 0x497a580d, 0x59cc0004, 0x4802580e, 0x497a580f,
- 0x42000800, 0x00030300, 0x59300403, 0x82000580,
- 0x00000086, 0x04020006, 0x59cc0004, 0x48025811,
- 0x4a025812, 0x0000ffff, 0x41780800, 0x48065810,
- 0x1c01f000, 0x492fc857, 0x59a82852, 0x801429c0,
- 0x0400005f, 0x4c5c0000, 0x4c600000, 0x4c640000,
- 0x4d2c0000, 0x4d300000, 0x42026000, 0x00111500,
- 0x592c0c07, 0x592c100a, 0x82081500, 0x00ffffff,
- 0x592c180b, 0x592c200e, 0x40165800, 0x4014c000,
- 0x4014c800, 0x592c0205, 0x82000580, 0x00000155,
- 0x0402003e, 0x592c0407, 0x80040580, 0x0402003b,
- 0x592c000a, 0x82000500, 0x00ffffff, 0x80080580,
- 0x04020036, 0x592c000b, 0x82000500, 0x00ffffff,
- 0x800c0580, 0x04020031, 0x592c000e, 0x80100580,
- 0x0402002e, 0x4c040000, 0x4c080000, 0x4c0c0000,
- 0x4c100000, 0x40640000, 0x812c0580, 0x0402001b,
- 0x59300203, 0x82000580, 0x00000000, 0x04000013,
- 0x59300009, 0x800001c0, 0x04000010, 0x0201f800,
- 0x00106e41, 0x4df00000, 0x0201f800, 0x00106d2b,
- 0x0201f800, 0x00110148, 0x80c40040, 0x04020003,
- 0x4a026203, 0x00000000, 0x5c03e000, 0x02000800,
- 0x00106e2e, 0x497a6009, 0x592cc800, 0x4064c000,
- 0x4064b800, 0x0401f003, 0x592cb800, 0x485cc000,
- 0x4a025a07, 0x00000005, 0x0201f800, 0x000203ef,
- 0x405e5800, 0x5c002000, 0x5c001800, 0x5c001000,
- 0x5c000800, 0x0401f003, 0x412cc000, 0x592e5800,
- 0x812e59c0, 0x040207bc, 0x48675052, 0x48635053,
- 0x0201f800, 0x00107e2a, 0x5c026000, 0x5c025800,
- 0x5c00c800, 0x5c00c000, 0x5c00b800, 0x1c01f000,
- 0x42000800, 0x0000000b, 0x0401f006, 0x42000800,
- 0x00000004, 0x0401f003, 0x42000800, 0x00000001,
- 0x4d2c0000, 0x59325809, 0x812e59c0, 0x04000012,
- 0x592c0205, 0x82000500, 0x000000ff, 0x82000580,
- 0x0000000e, 0x0402000c, 0x592c0000, 0x48026009,
- 0x497a5800, 0x48065a09, 0x0201f800, 0x00105d3b,
- 0x04000003, 0x0401fe37, 0x0401f003, 0x0201f800,
- 0x000203ef, 0x5c025800, 0x1c01f000, 0x42001000,
- 0x00001000, 0x80081040, 0x04000010, 0x0201f800,
- 0x0010c0d6, 0x040007fc, 0x42001000, 0x00007b00,
- 0x5808081c, 0x4a030000, 0x00000000, 0x82040d00,
- 0xffff0000, 0x82040580, 0x84320000, 0x04020003,
- 0x4a035078, 0x8000001b, 0x1c01f000, 0x4d340000,
- 0x4d440000, 0x599c0018, 0x82000500, 0xffffffcf,
- 0x82000540, 0x00000010, 0x48033818, 0x599c0019,
- 0x82000500, 0xffff1fff, 0x82000540, 0x00006000,
- 0x48033819, 0x42003000, 0x0000fc0e, 0x417a8800,
- 0x0201f800, 0x0010462d, 0x42003000, 0x0010c280,
- 0x45783000, 0x49375079, 0x4a026c03, 0x0000ffff,
- 0x497a6806, 0x497a6807, 0x4a026c08, 0x000004b0,
- 0x4a026a08, 0x00000014, 0x497a6809, 0x4a026c04,
- 0x00000008, 0x5c028800, 0x5c026800, 0x1c01f000,
- 0x4a038893, 0x00000001, 0x59340400, 0x82000500,
- 0x000000ff, 0x82000580, 0x00000003, 0x04000017,
- 0x0201f800, 0x00107f02, 0x04000014, 0x4933c857,
- 0x59aa6879, 0x4936600a, 0x4a026407, 0x00000012,
- 0x42000800, 0x00000003, 0x0201f800, 0x001045ea,
- 0x42001000, 0x00000008, 0x0201f800, 0x001074c1,
- 0x4a0378e4, 0x0c000000, 0x42027000, 0x000000d0,
- 0x0201f800, 0x00020bc1, 0x1c01f000, 0x4d400000,
- 0x4d340000, 0x0201f800, 0x00106e41, 0x4df00000,
- 0x59aa6879, 0x42028000, 0x00000029, 0x0401f9cc,
- 0x4a026c00, 0x00000707, 0x5c03e000, 0x02000800,
- 0x00106e2e, 0x5c026800, 0x5c028000, 0x1c01f000,
- 0x4a03c013, 0x00010001, 0x4a03c014, 0x00010001,
- 0x4a03c013, 0x00010000, 0x42000000, 0x0000000f,
- 0x80000040, 0x040207ff, 0x4a03c013, 0x00010001,
- 0x1c01f000, 0x4803c856, 0x592c0a07, 0x8c040d1e,
- 0x04020008, 0x80140110, 0x80000040, 0x04000022,
- 0x4a033006, 0x0010b8e1, 0x0201f000, 0x000206d1,
- 0x80140110, 0x80000040, 0x02020000, 0x0010564a,
- 0x592c0208, 0x82000c80, 0x00001001, 0x04001003,
- 0x0201f000, 0x0010565a, 0x592c1014, 0x82080500,
- 0xffff0003, 0x02020000, 0x0010565a, 0x4202e000,
- 0x00000002, 0x42000000, 0x0010e2e7, 0x50007000,
- 0x592c0012, 0x592c0813, 0x48007006, 0x48047007,
- 0x492c700a, 0x4978700d, 0x4978700b, 0x0201f000,
- 0x00105cf9, 0x59a80878, 0x8c040d3e, 0x02000000,
- 0x00105642, 0x59aa6879, 0x59340400, 0x82000580,
- 0x00000404, 0x04020053, 0x59a80078, 0x8c000506,
- 0x0402004c, 0x592c080a, 0x48066809, 0x592c1207,
- 0x59341806, 0x8c081506, 0x04000002, 0x59341807,
- 0x480e580a, 0x8c081502, 0x04020005, 0x40040000,
- 0x800c0480, 0x0400102d, 0x0401f02f, 0x592c0810,
- 0x82040500, 0x00000003, 0x0402004a, 0x592c0011,
- 0x80000540, 0x04020011, 0x592c000f, 0x82000500,
- 0x00000003, 0x04020043, 0x0201f800, 0x00020b7b,
- 0x04000038, 0x4932580b, 0x4a026407, 0x00000012,
- 0x492e6009, 0x4936600a, 0x42027000, 0x000000d1,
- 0x0201f000, 0x00020bc1, 0x592e600b, 0x0201f800,
- 0x00109d04, 0x0400002f, 0x59300407, 0x82000580,
- 0x00000012, 0x0402002b, 0x59300809, 0x800409c0,
- 0x04020015, 0x59300203, 0x82000580, 0x00000007,
- 0x04020024, 0x492e6009, 0x42027000, 0x000000d9,
- 0x0201f000, 0x00020bc1, 0x8c081500, 0x040007d4,
- 0x480e580a, 0x59a80078, 0x8400054c, 0x84000508,
- 0x48035078, 0x4a025a07, 0x00000000, 0x0201f000,
- 0x000203ef, 0x58041000, 0x800811c0, 0x04000003,
- 0x40080800, 0x0401f7fc, 0x492c0800, 0x1c01f000,
- 0x4a025a07, 0x00000028, 0x0201f000, 0x000203ef,
- 0x4a025a07, 0x00000029, 0x0201f000, 0x000203ef,
- 0x4a025a07, 0x0000002c, 0x0201f000, 0x000203ef,
- 0x4a025a07, 0x00000008, 0x0201f000, 0x000203ef,
- 0x4a025a07, 0x00000003, 0x4a025c07, 0x00000002,
- 0x0201f000, 0x000203ef, 0x4803c856, 0x80140110,
- 0x80000040, 0x04000005, 0x4a033006, 0x0010b956,
- 0x0201f000, 0x000206d1, 0x59a80878, 0x8c040d3e,
- 0x02000000, 0x00105642, 0x592c0a07, 0x82040480,
- 0x00000004, 0x02021000, 0x0010565a, 0x59a80078,
- 0x8c000506, 0x0402001d, 0x59aa6879, 0x59340400,
- 0x82000580, 0x00000404, 0x0402001c, 0x0201f800,
- 0x00020b7b, 0x0400001d, 0x4a026407, 0x00000012,
- 0x492e6009, 0x4936600a, 0x592c0a07, 0x82040580,
- 0x00000002, 0x04000004, 0x592c0010, 0x800001c0,
- 0x04000016, 0x82040400, 0x0010b97a, 0x50027000,
- 0x0201f000, 0x00020bc1, 0x000000d4, 0x000000d5,
- 0x000000d3, 0x000000d6, 0x4a025a07, 0x00000028,
- 0x0201f000, 0x000203ef, 0x4a025a07, 0x00000029,
- 0x0201f000, 0x000203ef, 0x4a025a07, 0x0000002c,
- 0x0201f000, 0x000203ef, 0x0201f800, 0x00020b9d,
- 0x0201f000, 0x0010565a, 0x492fc857, 0x59a80878,
- 0x8c040d3e, 0x42000800, 0x00004001, 0x040000b6,
- 0x59a80078, 0x8c000506, 0x42000800, 0x00000028,
- 0x040200b1, 0x59aa6879, 0x59340400, 0x82000580,
- 0x00000404, 0x42000800, 0x00000029, 0x040200aa,
- 0x4a025a05, 0x0000012b, 0x4a025806, 0xaa00feed,
- 0x4a025a07, 0x00000004, 0x4a025a08, 0x00000001,
- 0x59a0020b, 0x48025810, 0x48025814, 0x48025a0a,
- 0x59a00408, 0x59a01208, 0x900811c0, 0x80081540,
- 0x480a5812, 0x59a0040a, 0x59a0120a, 0x900811c0,
- 0x80081540, 0x480a5813, 0x59a00407, 0x48025a0b,
- 0x59a0040b, 0x48025c0b, 0x0201f800, 0x00020b7b,
- 0x42000800, 0x0000002c, 0x0400008b, 0x4a026407,
+ 0x0401f013, 0x42001000, 0x0010d471, 0x50081000,
+ 0x58080002, 0x82000580, 0x00000100, 0x0402000a,
+ 0x0201f800, 0x001074d0, 0x04020023, 0x59300004,
+ 0x8c000520, 0x04000006, 0x84000520, 0x48026004,
+ 0x0401f006, 0x0201f800, 0x001011f2, 0x0201f800,
+ 0x001108df, 0x80c40040, 0x5c03e000, 0x02000800,
+ 0x0010719d, 0x0201f800, 0x00109c4d, 0x02000800,
+ 0x0010032f, 0x59325809, 0x4a025a07, 0x00000005,
+ 0x0201f800, 0x00020401, 0x0201f800, 0x00104e29,
+ 0x59325818, 0x812e59c0, 0x02020800, 0x001005b3,
+ 0x0201f800, 0x00108253, 0x80000580, 0x5c025800,
+ 0x1c01f000, 0x5c03e000, 0x02000800, 0x0010719d,
+ 0x59300c07, 0x82040580, 0x00000011, 0x040007b3,
+ 0x0401f7f7, 0x4c040000, 0x59340200, 0x4803c857,
+ 0x8c00051c, 0x04000009, 0x59cc0805, 0x591c001a,
+ 0x4803c857, 0x80040580, 0x04000004, 0x80000580,
+ 0x4803c856, 0x0401f003, 0x82000540, 0x00000001,
+ 0x5c000800, 0x1c01f000, 0x4c000000, 0x4c0c0000,
+ 0x4c100000, 0x42001800, 0x0000ffff, 0x42002000,
+ 0x00000004, 0x0401f013, 0x4c000000, 0x4c0c0000,
+ 0x4c100000, 0x5930200a, 0x58101c03, 0x42002000,
+ 0x00000004, 0x0401f00b, 0x4c000000, 0x4c0c0000,
+ 0x4c100000, 0x5930200a, 0x801021c0, 0x02000800,
+ 0x0010032f, 0x58101c03, 0x42002000, 0x00000007,
+ 0x480fc857, 0x4813c857, 0x481bc857, 0x0201f800,
+ 0x0010203c, 0x0201f800, 0x00103ac1, 0x5c002000,
+ 0x5c001800, 0x5c000000, 0x1c01f000, 0x8d0e1d20,
+ 0x0400000c, 0x4d400000, 0x4d200000, 0x42024000,
+ 0x000000ff, 0x850e1d44, 0x42028000, 0x0000002a,
+ 0x0201f800, 0x0010b65e, 0x5c024000, 0x5c028000,
+ 0x1c01f000, 0x59a80221, 0x8c000508, 0x04000005,
+ 0x599c0017, 0x8c00050a, 0x04020002, 0x1c01f000,
+ 0x82000540, 0x00000001, 0x1c01f000, 0x59300429,
+ 0x84000540, 0x48026429, 0x1c01f000, 0x4c640000,
+ 0x0201f800, 0x0010a07e, 0x59300203, 0x82000580,
+ 0x00000008, 0x04020015, 0x4200c800, 0x00000032,
+ 0x42000000, 0x20000000, 0x41300800, 0x0201f800,
+ 0x001008e8, 0x0400000d, 0x59300203, 0x82000580,
+ 0x00000008, 0x04020009, 0x42000000, 0x0000001e,
+ 0x80000040, 0x040207ff, 0x8064c840, 0x040207f1,
+ 0x0201f800, 0x0010032f, 0x0201f800, 0x0010a096,
+ 0x5c00c800, 0x1c01f000, 0x0201f800, 0x00100599,
+ 0x02000800, 0x0010032f, 0x59340403, 0x49265802,
+ 0x49365803, 0x4a025a05, 0x00000055, 0x48025c07,
+ 0x4a025c08, 0x00001000, 0x59340802, 0x82040d00,
+ 0x00ffffff, 0x59300403, 0x82000580, 0x00000086,
+ 0x42000000, 0x85000000, 0x04020003, 0x42000000,
+ 0x84000000, 0x80040540, 0x4802580a, 0x59240005,
+ 0x4802580b, 0x42000000, 0x00990000, 0x59300c07,
+ 0x82040d80, 0x00000005, 0x04000002, 0x8400052e,
+ 0x4802580c, 0x497a580d, 0x59cc0004, 0x4802580e,
+ 0x497a580f, 0x42000800, 0x00030300, 0x59300403,
+ 0x82000580, 0x00000086, 0x04020006, 0x59cc0004,
+ 0x48025811, 0x4a025812, 0x0000ffff, 0x41780800,
+ 0x48065810, 0x1c01f000, 0x492fc857, 0x59a82858,
+ 0x801429c0, 0x0400005f, 0x4c5c0000, 0x4c600000,
+ 0x4c640000, 0x4d2c0000, 0x4d300000, 0x42026000,
+ 0x00111cc0, 0x592c0c07, 0x592c100a, 0x82081500,
+ 0x00ffffff, 0x592c180b, 0x592c200e, 0x40165800,
+ 0x4014c000, 0x4014c800, 0x592c0205, 0x82000580,
+ 0x00000155, 0x0402003e, 0x592c0407, 0x80040580,
+ 0x0402003b, 0x592c000a, 0x82000500, 0x00ffffff,
+ 0x80080580, 0x04020036, 0x592c000b, 0x82000500,
+ 0x00ffffff, 0x800c0580, 0x04020031, 0x592c000e,
+ 0x80100580, 0x0402002e, 0x4c040000, 0x4c080000,
+ 0x4c0c0000, 0x4c100000, 0x40640000, 0x812c0580,
+ 0x0402001b, 0x59300203, 0x82000580, 0x00000000,
+ 0x04000013, 0x59300009, 0x800001c0, 0x04000010,
+ 0x0201f800, 0x001071b0, 0x4df00000, 0x0201f800,
+ 0x0010708e, 0x0201f800, 0x00110849, 0x80c40040,
+ 0x04020003, 0x4a026203, 0x00000000, 0x5c03e000,
+ 0x02000800, 0x0010719d, 0x497a6009, 0x592cc800,
+ 0x4064c000, 0x4064b800, 0x0401f003, 0x592cb800,
+ 0x485cc000, 0x4a025a07, 0x00000005, 0x0201f800,
+ 0x00020401, 0x405e5800, 0x5c002000, 0x5c001800,
+ 0x5c001000, 0x5c000800, 0x0401f003, 0x412cc000,
+ 0x592e5800, 0x812e59c0, 0x040207bc, 0x48675058,
+ 0x48635059, 0x0201f800, 0x001081c1, 0x5c026000,
+ 0x5c025800, 0x5c00c800, 0x5c00c000, 0x5c00b800,
+ 0x1c01f000, 0x42000800, 0x0000000b, 0x0401f006,
+ 0x42000800, 0x00000004, 0x0401f003, 0x42000800,
+ 0x00000001, 0x4d2c0000, 0x59325809, 0x812e59c0,
+ 0x04000012, 0x592c0205, 0x82000500, 0x000000ff,
+ 0x82000580, 0x0000000e, 0x0402000c, 0x592c0000,
+ 0x48026009, 0x497a5800, 0x48065a09, 0x0201f800,
+ 0x00105fee, 0x04000003, 0x0401fe33, 0x0401f003,
+ 0x0201f800, 0x00020401, 0x5c025800, 0x1c01f000,
+ 0x42001000, 0x00001000, 0x80081040, 0x04000010,
+ 0x0201f800, 0x0010c62d, 0x040007fc, 0x42001000,
+ 0x00007b00, 0x5808081c, 0x4a030000, 0x00000000,
+ 0x82040d00, 0xffff0000, 0x82040580, 0x84320000,
+ 0x04020003, 0x4a035086, 0x8000001b, 0x1c01f000,
+ 0x4d340000, 0x4d440000, 0x599c0018, 0x82000500,
+ 0xffffffcf, 0x82000540, 0x00000010, 0x48033818,
+ 0x599c0019, 0x82000500, 0xffff1fff, 0x82000540,
+ 0x00006000, 0x48033819, 0x42003000, 0x0000fc0e,
+ 0x417a8800, 0x0201f800, 0x00104779, 0x42003000,
+ 0x0010c880, 0x45783000, 0x49375087, 0x4a026c03,
+ 0x0000ffff, 0x497a6806, 0x497a6807, 0x4a026c08,
+ 0x000004b0, 0x4a026a08, 0x00000014, 0x497a6809,
+ 0x4a026c04, 0x00000008, 0x5c028800, 0x5c026800,
+ 0x1c01f000, 0x4a038893, 0x00000001, 0x59340400,
+ 0x82000500, 0x000000ff, 0x82000580, 0x00000003,
+ 0x04000017, 0x0201f800, 0x001082a1, 0x04000014,
+ 0x4933c857, 0x59aa6887, 0x4936600a, 0x4a026407,
+ 0x00000012, 0x42000800, 0x00000003, 0x0201f800,
+ 0x00104736, 0x42001000, 0x00000008, 0x0201f800,
+ 0x0010782f, 0x4a0378e4, 0x0c000000, 0x42027000,
+ 0x000000d0, 0x0201f800, 0x00020b22, 0x1c01f000,
+ 0x4d400000, 0x4d340000, 0x0201f800, 0x001071b0,
+ 0x4df00000, 0x59aa6887, 0x42028000, 0x00000029,
+ 0x0401f9cc, 0x4a026c00, 0x00000707, 0x5c03e000,
+ 0x02000800, 0x0010719d, 0x5c026800, 0x5c028000,
+ 0x1c01f000, 0x4a03c013, 0x00010001, 0x4a03c014,
+ 0x00010001, 0x4a03c013, 0x00010000, 0x42000000,
+ 0x0000000f, 0x80000040, 0x040207ff, 0x4a03c013,
+ 0x00010001, 0x1c01f000, 0x4803c856, 0x592c0a07,
+ 0x8c040d1e, 0x04020008, 0x80140110, 0x80000040,
+ 0x04000022, 0x4a033006, 0x0010be36, 0x0201f000,
+ 0x000206de, 0x80140110, 0x80000040, 0x02020000,
+ 0x0010582e, 0x592c0208, 0x82000c80, 0x00001001,
+ 0x04001003, 0x0201f000, 0x0010583e, 0x592c1014,
+ 0x82080500, 0xffff0003, 0x02020000, 0x0010583e,
+ 0x4202e000, 0x00000002, 0x42000000, 0x0010e905,
+ 0x50007000, 0x592c0012, 0x592c0813, 0x48007006,
+ 0x48047007, 0x492c700a, 0x4978700d, 0x4978700b,
+ 0x0201f000, 0x00105fad, 0x59a80886, 0x8c040d3e,
+ 0x02000000, 0x00105826, 0x59aa6887, 0x59340400,
+ 0x82000580, 0x00000404, 0x04020053, 0x59a80086,
+ 0x8c000506, 0x0402004c, 0x592c080a, 0x48066809,
+ 0x592c1207, 0x59341806, 0x8c081506, 0x04000002,
+ 0x59341807, 0x480e580a, 0x8c081502, 0x04020005,
+ 0x40040000, 0x800c0480, 0x0400102d, 0x0401f02f,
+ 0x592c0810, 0x82040500, 0x00000003, 0x0402004a,
+ 0x592c0011, 0x80000540, 0x04020011, 0x592c000f,
+ 0x82000500, 0x00000003, 0x04020043, 0x0201f800,
+ 0x00020adc, 0x04000038, 0x4932580b, 0x4a026407,
0x00000012, 0x492e6009, 0x4936600a, 0x42027000,
- 0x000000de, 0x0201f000, 0x00020bc1, 0x59cc0801,
- 0x82040d00, 0x00ffffff, 0x82040580, 0x0000fc0e,
- 0x04020014, 0x59cc0800, 0x82040d00, 0x00ffffff,
- 0x82040580, 0x0000fc0e, 0x04020010, 0x59cc0c00,
- 0x80040910, 0x82040580, 0x00000022, 0x04000011,
- 0x82040580, 0x00000023, 0x04000027, 0x82040580,
- 0x00000005, 0x0400004e, 0x4807c857, 0x0401f008,
- 0x4807c857, 0x0401f006, 0x4807c857, 0x42000000,
- 0x0010cfb2, 0x0201f800, 0x0010bfb3, 0x1c01f000,
- 0x59cc0806, 0x59a80078, 0x8c00050a, 0x04020010,
- 0x82040580, 0x05000000, 0x0402000d, 0x42027000,
- 0x000000da, 0x0201f800, 0x00107f02, 0x59aa6879,
- 0x4936600a, 0x4a026407, 0x00000013, 0x59cc0404,
- 0x48026202, 0x0201f000, 0x00020bc1, 0x4807c857,
- 0x42000000, 0x0010cfb2, 0x0201f800, 0x0010bfb3,
- 0x1c01f000, 0x0201f800, 0x00106268, 0x0400001f,
- 0x59300c07, 0x82040580, 0x00000012, 0x02020800,
- 0x001003f5, 0x0402001c, 0x5932680a, 0x59cc0a04,
- 0x48066202, 0x59300004, 0x8c00053e, 0x02020800,
- 0x00107226, 0x04020014, 0x42027000, 0x000000dc,
- 0x59cc0806, 0x82040580, 0x02000000, 0x02000000,
- 0x00020bc1, 0x82040580, 0x01000000, 0x02020800,
- 0x001003f5, 0x04020008, 0x42027000, 0x000000dd,
- 0x0201f000, 0x00020bc1, 0x59cc0c04, 0x4807c857,
- 0x0401f002, 0x4933c857, 0x42000000, 0x0010cfb2,
- 0x0201f800, 0x0010bfb3, 0x1c01f000, 0x0201f800,
- 0x00106268, 0x04000013, 0x59300c07, 0x82040580,
- 0x00000012, 0x02020800, 0x001003f5, 0x04020010,
- 0x5932680a, 0x59cc0a04, 0x48066202, 0x59300004,
- 0x8c00053e, 0x02020800, 0x00107226, 0x04020008,
- 0x42027000, 0x000000db, 0x0201f000, 0x00020bc1,
- 0x59cc0c04, 0x4807c857, 0x0401f002, 0x4933c857,
- 0x42000000, 0x0010cfb2, 0x0201f800, 0x0010bfb3,
- 0x1c01f000, 0x492fc857, 0x4807c857, 0x82040580,
- 0x00000000, 0x02000000, 0x001022c6, 0x4a034207,
- 0x00004005, 0x48074407, 0x0201f000, 0x001022c9,
- 0x48066004, 0x59bc00ea, 0x8c000516, 0x040207fe,
- 0x83300400, 0xc0000000, 0x480378e1, 0x1c01f000,
- 0x4d300000, 0x598c000d, 0x80026540, 0x0400000e,
- 0x0201f800, 0x00106e27, 0x0201f800, 0x00106e15,
- 0x59300000, 0x800001c0, 0x04000004, 0x4803180d,
- 0x497a6000, 0x0401f003, 0x497b180d, 0x497b180c,
- 0x80000580, 0x5c026000, 0x1c01f000, 0x4d2c0000,
- 0x4d300000, 0x4d340000, 0x4c5c0000, 0x4178b800,
- 0x598e600d, 0x813261c0, 0x0400000b, 0x0201f800,
- 0x00106d2b, 0x59300000, 0x4c000000, 0x405c3000,
- 0x0401f826, 0x0201f800, 0x001101fa, 0x5c026000,
- 0x0401f7f5, 0x5c00b800, 0x5c026800, 0x5c026000,
- 0x5c025800, 0x1c01f000, 0x4933c857, 0x4c5c0000,
- 0x813261c0, 0x02000800, 0x0010032e, 0x41300000,
- 0x598cb80d, 0x41783000, 0x805cb9c0, 0x0400000f,
- 0x805c0d80, 0x04000004, 0x405c3000, 0x5818b800,
- 0x0401f7fa, 0x0401f80d, 0x598c000f, 0x81300580,
- 0x02000800, 0x001074ce, 0x497a6008, 0x80000580,
- 0x5c00b800, 0x1c01f000, 0x82000540, 0x00000001,
- 0x5c00b800, 0x1c01f000, 0x59300800, 0x497a6000,
- 0x0201f800, 0x00106e15, 0x801831c0, 0x04020009,
- 0x598c000c, 0x81300580, 0x04020004, 0x4803180c,
- 0x4803180d, 0x0401f008, 0x4807180d, 0x0401f006,
- 0x48043000, 0x598c000c, 0x81300580, 0x04020002,
- 0x481b180c, 0x0201f000, 0x00106e27, 0x59325809,
- 0x59300c03, 0x82040480, 0x000000df, 0x04021004,
- 0x82040480, 0x000000d0, 0x0401f002, 0x81780040,
- 0x04001002, 0x0c01f008, 0x4933c857, 0x493bc857,
- 0x42000000, 0x0010cfb4, 0x0201f800, 0x0010bfb3,
- 0x1c01f000, 0x0010baeb, 0x0010bb02, 0x0010bb1f,
- 0x0010bb30, 0x0010bb41, 0x0010bb54, 0x0010bb67,
- 0x0010bb7b, 0x0010bac2, 0x0010bac2, 0x0010bac2,
- 0x0010bac2, 0x0010bac2, 0x0010bac2, 0x0010bad8,
- 0x42000800, 0x00000022, 0x0401f8d1, 0x592c0a0a,
- 0x4805a207, 0x592c0a0b, 0x4805a208, 0x592c0c0b,
- 0x4805a408, 0x4a01a006, 0x0c000000, 0x59340408,
- 0x48026006, 0x42000800, 0x00000003, 0x42001000,
- 0x0000dc00, 0x0201f000, 0x00107d64, 0x42000800,
- 0x00000022, 0x0401f8be, 0x497b8880, 0x59a8001f,
- 0x82000500, 0x0000ffff, 0x4c000000, 0x0201f800,
- 0x001015e5, 0x5c000000, 0x48038880, 0x4a01a006,
- 0x03000000, 0x4801a207, 0x59a80004, 0x4801a407,
- 0x42000800, 0x00000002, 0x42001000, 0x0000dc00,
- 0x0201f000, 0x00107d64, 0x42000800, 0x00000022,
- 0x0401f8a7, 0x592c0a07, 0x592c100f, 0x592c0010,
- 0x80080580, 0x82000500, 0x00000003, 0x0402008c,
- 0x82080500, 0x00000003, 0x04020089, 0x42001800,
- 0x00000002, 0x8c040d06, 0x04020003, 0x42001800,
- 0x00000001, 0x4a01a006, 0x04000000, 0x4809a007,
- 0x480da008, 0x42000800, 0x00000003, 0x42001000,
- 0x0000dc00, 0x0201f000, 0x00107d64, 0x42000800,
- 0x00000022, 0x0401f88a, 0x59300819, 0x5930101a,
- 0x5930181b, 0x4a01a006, 0x06000000, 0x4805a007,
- 0x4809a008, 0x480da009, 0x42000800, 0x00000004,
- 0x42001000, 0x0000dc00, 0x0201f000, 0x00107d64,
- 0x42000800, 0x00000022, 0x0401f879, 0x592c0a0a,
- 0x592c100b, 0x592c180c, 0x4a01a006, 0x07000000,
- 0x4805a207, 0x480da008, 0x4809a009, 0x42000800,
+ 0x000000d1, 0x0201f000, 0x00020b22, 0x592e600b,
+ 0x0201f800, 0x0010a0b6, 0x0400002f, 0x59300407,
+ 0x82000580, 0x00000012, 0x0402002b, 0x59300809,
+ 0x800409c0, 0x04020015, 0x59300203, 0x82000580,
+ 0x00000007, 0x04020024, 0x492e6009, 0x42027000,
+ 0x000000d9, 0x0201f000, 0x00020b22, 0x8c081500,
+ 0x040007d4, 0x480e580a, 0x59a80086, 0x8400054c,
+ 0x84000508, 0x48035086, 0x4a025a07, 0x00000000,
+ 0x0201f000, 0x00020401, 0x58041000, 0x800811c0,
+ 0x04000003, 0x40080800, 0x0401f7fc, 0x492c0800,
+ 0x1c01f000, 0x4a025a07, 0x00000028, 0x0201f000,
+ 0x00020401, 0x4a025a07, 0x00000029, 0x0201f000,
+ 0x00020401, 0x4a025a07, 0x0000002c, 0x0201f000,
+ 0x00020401, 0x4a025a07, 0x00000008, 0x0201f000,
+ 0x00020401, 0x4a025a07, 0x00000003, 0x4a025c07,
+ 0x00000002, 0x0201f000, 0x00020401, 0x4803c856,
+ 0x80140110, 0x80000040, 0x04000005, 0x4a033006,
+ 0x0010beab, 0x0201f000, 0x000206de, 0x59a80886,
+ 0x8c040d3e, 0x02000000, 0x00105826, 0x592c0a07,
+ 0x82040480, 0x00000004, 0x02021000, 0x0010583e,
+ 0x59a80086, 0x8c000506, 0x0402001d, 0x59aa6887,
+ 0x59340400, 0x82000580, 0x00000404, 0x0402001c,
+ 0x0201f800, 0x00020adc, 0x0400001d, 0x4a026407,
+ 0x00000012, 0x492e6009, 0x4936600a, 0x592c0a07,
+ 0x82040580, 0x00000002, 0x04000004, 0x592c0010,
+ 0x800001c0, 0x04000016, 0x82040400, 0x0010becf,
+ 0x50027000, 0x0201f000, 0x00020b22, 0x000000d4,
+ 0x000000d5, 0x000000d3, 0x000000d6, 0x4a025a07,
+ 0x00000028, 0x0201f000, 0x00020401, 0x4a025a07,
+ 0x00000029, 0x0201f000, 0x00020401, 0x4a025a07,
+ 0x0000002c, 0x0201f000, 0x00020401, 0x0201f800,
+ 0x00020afe, 0x0201f000, 0x0010583e, 0x492fc857,
+ 0x59a80886, 0x8c040d3e, 0x42000800, 0x00004001,
+ 0x040000b6, 0x59a80086, 0x8c000506, 0x42000800,
+ 0x00000028, 0x040200b1, 0x59aa6887, 0x59340400,
+ 0x82000580, 0x00000404, 0x42000800, 0x00000029,
+ 0x040200aa, 0x4a025a05, 0x0000012b, 0x4a025806,
+ 0xaa00feed, 0x4a025a07, 0x00000004, 0x4a025a08,
+ 0x00000001, 0x59a0020b, 0x48025810, 0x48025814,
+ 0x48025a0a, 0x59a00408, 0x59a01208, 0x900811c0,
+ 0x80081540, 0x480a5812, 0x59a0040a, 0x59a0120a,
+ 0x900811c0, 0x80081540, 0x480a5813, 0x59a00407,
+ 0x48025a0b, 0x59a0040b, 0x48025c0b, 0x0201f800,
+ 0x00020adc, 0x42000800, 0x0000002c, 0x0400008b,
+ 0x4a026407, 0x00000012, 0x492e6009, 0x4936600a,
+ 0x42027000, 0x000000de, 0x0201f000, 0x00020b22,
+ 0x59cc0801, 0x82040d00, 0x00ffffff, 0x82040580,
+ 0x0000fc0e, 0x04020014, 0x59cc0800, 0x82040d00,
+ 0x00ffffff, 0x82040580, 0x0000fc0e, 0x04020010,
+ 0x59cc0c00, 0x80040910, 0x82040580, 0x00000022,
+ 0x04000011, 0x82040580, 0x00000023, 0x04000027,
+ 0x82040580, 0x00000005, 0x0400004e, 0x4807c857,
+ 0x0401f008, 0x4807c857, 0x0401f006, 0x4807c857,
+ 0x42000000, 0x0010d5cf, 0x0201f800, 0x0010c50a,
+ 0x1c01f000, 0x59cc0806, 0x59a80086, 0x8c00050a,
+ 0x04020010, 0x82040580, 0x05000000, 0x0402000d,
+ 0x42027000, 0x000000da, 0x0201f800, 0x001082a1,
+ 0x59aa6887, 0x4936600a, 0x4a026407, 0x00000013,
+ 0x59cc0404, 0x48026202, 0x0201f000, 0x00020b22,
+ 0x4807c857, 0x42000000, 0x0010d5cf, 0x0201f800,
+ 0x0010c50a, 0x1c01f000, 0x0201f800, 0x001065bb,
+ 0x0400001f, 0x59300c07, 0x82040580, 0x00000012,
+ 0x02020800, 0x001003fe, 0x0402001c, 0x5932680a,
+ 0x59cc0a04, 0x48066202, 0x59300004, 0x8c00053e,
+ 0x02020800, 0x00107595, 0x04020014, 0x42027000,
+ 0x000000dc, 0x59cc0806, 0x82040580, 0x02000000,
+ 0x02000000, 0x00020b22, 0x82040580, 0x01000000,
+ 0x02020800, 0x001003fe, 0x04020008, 0x42027000,
+ 0x000000dd, 0x0201f000, 0x00020b22, 0x59cc0c04,
+ 0x4807c857, 0x0401f002, 0x4933c857, 0x42000000,
+ 0x0010d5cf, 0x0201f800, 0x0010c50a, 0x1c01f000,
+ 0x0201f800, 0x001065bb, 0x04000013, 0x59300c07,
+ 0x82040580, 0x00000012, 0x02020800, 0x001003fe,
+ 0x04020010, 0x5932680a, 0x59cc0a04, 0x48066202,
+ 0x59300004, 0x8c00053e, 0x02020800, 0x00107595,
+ 0x04020008, 0x42027000, 0x000000db, 0x0201f000,
+ 0x00020b22, 0x59cc0c04, 0x4807c857, 0x0401f002,
+ 0x4933c857, 0x42000000, 0x0010d5cf, 0x0201f800,
+ 0x0010c50a, 0x1c01f000, 0x492fc857, 0x4807c857,
+ 0x82040580, 0x00000000, 0x02000000, 0x00102357,
+ 0x4a034207, 0x00004005, 0x48074407, 0x0201f000,
+ 0x0010235a, 0x48066004, 0x59bc00ea, 0x8c000516,
+ 0x040207fe, 0x83300400, 0xc0000000, 0x480378e1,
+ 0x1c01f000, 0x4d300000, 0x598c000d, 0x80026540,
+ 0x0400000e, 0x0201f800, 0x00107196, 0x0201f800,
+ 0x00107180, 0x59300000, 0x800001c0, 0x04000004,
+ 0x4803180d, 0x497a6000, 0x0401f003, 0x497b180d,
+ 0x497b180c, 0x80000580, 0x5c026000, 0x1c01f000,
+ 0x4d2c0000, 0x4d300000, 0x4d340000, 0x4c5c0000,
+ 0x4178b800, 0x598e600d, 0x813261c0, 0x0400000b,
+ 0x0201f800, 0x0010708e, 0x59300000, 0x4c000000,
+ 0x405c3000, 0x0401f826, 0x0201f800, 0x001108fb,
+ 0x5c026000, 0x0401f7f5, 0x5c00b800, 0x5c026800,
+ 0x5c026000, 0x5c025800, 0x1c01f000, 0x4933c857,
+ 0x4c5c0000, 0x813261c0, 0x02000800, 0x0010032f,
+ 0x41300000, 0x598cb80d, 0x41783000, 0x805cb9c0,
+ 0x0400000f, 0x805c0d80, 0x04000004, 0x405c3000,
+ 0x5818b800, 0x0401f7fa, 0x0401f80d, 0x598c000f,
+ 0x81300580, 0x02000800, 0x0010783c, 0x497a6008,
+ 0x80000580, 0x5c00b800, 0x1c01f000, 0x82000540,
+ 0x00000001, 0x5c00b800, 0x1c01f000, 0x59300800,
+ 0x497a6000, 0x0201f800, 0x00107180, 0x801831c0,
+ 0x04020009, 0x598c000c, 0x81300580, 0x04020004,
+ 0x4803180c, 0x4803180d, 0x0401f008, 0x4807180d,
+ 0x0401f006, 0x48043000, 0x598c000c, 0x81300580,
+ 0x04020002, 0x481b180c, 0x0201f000, 0x00107196,
+ 0x59325809, 0x59300c03, 0x82040480, 0x000000df,
+ 0x04021004, 0x82040480, 0x000000d0, 0x0401f002,
+ 0x81780040, 0x04001002, 0x0c01f008, 0x4933c857,
+ 0x493bc857, 0x42000000, 0x0010d5d1, 0x0201f800,
+ 0x0010c50a, 0x1c01f000, 0x0010c040, 0x0010c057,
+ 0x0010c074, 0x0010c085, 0x0010c096, 0x0010c0a9,
+ 0x0010c0bc, 0x0010c0d0, 0x0010c017, 0x0010c017,
+ 0x0010c017, 0x0010c017, 0x0010c017, 0x0010c017,
+ 0x0010c02d, 0x42000800, 0x00000022, 0x0401f8d1,
+ 0x592c0a0a, 0x4805a207, 0x592c0a0b, 0x4805a208,
+ 0x592c0c0b, 0x4805a408, 0x4a01a006, 0x0c000000,
+ 0x59340408, 0x48026006, 0x42000800, 0x00000003,
+ 0x42001000, 0x0000dc00, 0x0201f000, 0x001080fb,
+ 0x42000800, 0x00000022, 0x0401f8be, 0x497b8880,
+ 0x59a80025, 0x82000500, 0x0000ffff, 0x4c000000,
+ 0x0201f800, 0x00101653, 0x5c000000, 0x48038880,
+ 0x4a01a006, 0x03000000, 0x4801a207, 0x59a80004,
+ 0x4801a407, 0x42000800, 0x00000002, 0x42001000,
+ 0x0000dc00, 0x0201f000, 0x001080fb, 0x42000800,
+ 0x00000022, 0x0401f8a7, 0x592c0a07, 0x592c100f,
+ 0x592c0010, 0x80080580, 0x82000500, 0x00000003,
+ 0x0402008c, 0x82080500, 0x00000003, 0x04020089,
+ 0x42001800, 0x00000002, 0x8c040d06, 0x04020003,
+ 0x42001800, 0x00000001, 0x4a01a006, 0x04000000,
+ 0x4809a007, 0x480da008, 0x42000800, 0x00000003,
+ 0x42001000, 0x0000dc00, 0x0201f000, 0x001080fb,
+ 0x42000800, 0x00000022, 0x0401f88a, 0x59300819,
+ 0x5930101a, 0x5930181b, 0x4a01a006, 0x06000000,
+ 0x4805a007, 0x4809a008, 0x480da009, 0x42000800,
0x00000004, 0x42001000, 0x0000dc00, 0x0201f000,
- 0x00107d64, 0x42000800, 0x00000022, 0x0401f868,
+ 0x001080fb, 0x42000800, 0x00000022, 0x0401f879,
+ 0x592c0a0a, 0x592c100b, 0x592c180c, 0x4a01a006,
+ 0x07000000, 0x4805a207, 0x480da008, 0x4809a009,
+ 0x42000800, 0x00000004, 0x42001000, 0x0000dc00,
+ 0x0201f000, 0x001080fb, 0x42000800, 0x00000022,
+ 0x0401f868, 0x592c080a, 0x592c1010, 0x82080500,
+ 0xfffc0003, 0x0402004f, 0x80081104, 0x4a01a006,
+ 0x08000000, 0x4805a007, 0x4809a008, 0x42000800,
+ 0x00000003, 0x42001000, 0x0000dc00, 0x0201f000,
+ 0x001080fb, 0x42000800, 0x00000022, 0x0401f855,
0x592c080a, 0x592c1010, 0x82080500, 0xfffc0003,
- 0x0402004f, 0x80081104, 0x4a01a006, 0x08000000,
+ 0x0402003c, 0x80081104, 0x4a01a006, 0x09000000,
0x4805a007, 0x4809a008, 0x42000800, 0x00000003,
- 0x42001000, 0x0000dc00, 0x0201f000, 0x00107d64,
- 0x42000800, 0x00000022, 0x0401f855, 0x592c080a,
- 0x592c1010, 0x82080500, 0xfffc0003, 0x0402003c,
- 0x80081104, 0x4a01a006, 0x09000000, 0x4805a007,
- 0x4809a008, 0x42000800, 0x00000003, 0x42001000,
- 0x0000dc00, 0x0201f000, 0x00107d64, 0x42000800,
- 0x00000022, 0x0401f842, 0x592c080a, 0x592c1010,
- 0x592c180b, 0x82080500, 0xffff0000, 0x04020028,
- 0x4a01a006, 0x0a000000, 0x4805a207, 0x480da407,
- 0x4809a008, 0x42000800, 0x00000003, 0x42001000,
- 0x0000dc00, 0x0201f000, 0x00107d64, 0x42000800,
- 0x00000022, 0x0401f82e, 0x4a01a006, 0x0b000000,
- 0x42000800, 0x00000001, 0x42001000, 0x0000dc00,
- 0x0201f000, 0x00107d64, 0x59300c03, 0x82040580,
- 0x000000d8, 0x04000003, 0x0201f800, 0x0010032e,
- 0x42000800, 0x00000023, 0x0401f81d, 0x4a01a006,
- 0x02000000, 0x42000800, 0x00000001, 0x42001000,
- 0x0000dc00, 0x0201f000, 0x00107d64, 0x592c0006,
- 0x4803c857, 0x480bc857, 0x0201f800, 0x00106d91,
- 0x4a025a07, 0x00000003, 0x4a025c07, 0x00000002,
+ 0x42001000, 0x0000dc00, 0x0201f000, 0x001080fb,
+ 0x42000800, 0x00000022, 0x0401f842, 0x592c080a,
+ 0x592c1010, 0x592c180b, 0x82080500, 0xffff0000,
+ 0x04020028, 0x4a01a006, 0x0a000000, 0x4805a207,
+ 0x480da407, 0x4809a008, 0x42000800, 0x00000003,
+ 0x42001000, 0x0000dc00, 0x0201f000, 0x001080fb,
+ 0x42000800, 0x00000022, 0x0401f82e, 0x4a01a006,
+ 0x0b000000, 0x42000800, 0x00000001, 0x42001000,
+ 0x0000dc00, 0x0201f000, 0x001080fb, 0x59300c03,
+ 0x82040580, 0x000000d8, 0x04000003, 0x0201f800,
+ 0x0010032f, 0x42000800, 0x00000023, 0x0401f81d,
+ 0x4a01a006, 0x02000000, 0x42000800, 0x00000001,
+ 0x42001000, 0x0000dc00, 0x0201f000, 0x001080fb,
+ 0x592c0006, 0x4803c857, 0x480bc857, 0x0201f800,
+ 0x001070fc, 0x4a025a07, 0x00000003, 0x4a025c07,
+ 0x00000002, 0x592c0205, 0x82000500, 0x000000ff,
+ 0x82000580, 0x0000002b, 0x04020002, 0x480a5808,
+ 0x0201f800, 0x00020401, 0x0201f000, 0x00020afe,
+ 0x81a5a000, 0x4a01a001, 0x0000fc0e, 0x4979a005,
+ 0x4979a003, 0x4a034800, 0x00000011, 0x59307002,
+ 0x82040580, 0x00000022, 0x04020007, 0x4a01a000,
+ 0x2200fc0e, 0x4a01a002, 0xfe290000, 0x4839a004,
+ 0x1c01f000, 0x82040580, 0x00000023, 0x02020800,
+ 0x0010032f, 0x4a01a000, 0x2300fc0e, 0x4a01a002,
+ 0xfe980000, 0x903871c0, 0x4839a004, 0x1c01f000,
+ 0x4a034800, 0x00000011, 0x81a5a000, 0x4a01a000,
+ 0x0100fc0e, 0x4a01a001, 0x0000fc0e, 0x4a01a002,
+ 0xfe000008, 0x41781000, 0x42000800, 0x01000000,
0x592c0205, 0x82000500, 0x000000ff, 0x82000580,
- 0x0000002b, 0x04020002, 0x480a5808, 0x0201f800,
- 0x000203ef, 0x0201f000, 0x00020b9d, 0x81a5a000,
- 0x4a01a001, 0x0000fc0e, 0x4979a005, 0x4979a003,
- 0x4a034800, 0x00000011, 0x59307002, 0x82040580,
- 0x00000022, 0x04020007, 0x4a01a000, 0x2200fc0e,
- 0x4a01a002, 0xfe290000, 0x4839a004, 0x1c01f000,
- 0x82040580, 0x00000023, 0x02020800, 0x0010032e,
- 0x4a01a000, 0x2300fc0e, 0x4a01a002, 0xfe980000,
- 0x903871c0, 0x4839a004, 0x1c01f000, 0x4a034800,
- 0x00000011, 0x81a5a000, 0x4a01a000, 0x0100fc0e,
- 0x4a01a001, 0x0000fc0e, 0x4a01a002, 0xfe000008,
- 0x41781000, 0x42000800, 0x01000000, 0x592c0205,
- 0x82000500, 0x000000ff, 0x82000580, 0x0000001b,
- 0x04020006, 0x592c1011, 0x592c0207, 0x8c00051c,
- 0x04020002, 0x41780800, 0x4805a003, 0x59300002,
- 0x4801a004, 0x4809a005, 0x59340c08, 0x42001000,
- 0x00000100, 0x0201f800, 0x00106c7e, 0x0201f800,
- 0x00106604, 0x83180d40, 0x00000038, 0x42001000,
- 0x0000c920, 0x0201f000, 0x00107d83, 0x59300a03,
- 0x82040480, 0x00000009, 0x04021004, 0x82040480,
- 0x00000001, 0x0401f002, 0x81780040, 0x0c021002,
- 0x0401f22c, 0x0010bc01, 0x0010bc1e, 0x0010bc7e,
- 0x0010bcc0, 0x0010be24, 0x0010be24, 0x0010bd20,
- 0x0010bd49, 0x83380580, 0x00000013, 0x04000015,
- 0x83380580, 0x00000014, 0x0402021e, 0x59300c03,
- 0x4807c857, 0x0201f800, 0x00106d91, 0x0201f800,
- 0x0010989f, 0x04000009, 0x4d2c0000, 0x59325809,
- 0x4a025a07, 0x00000001, 0x497a5c07, 0x0201f800,
- 0x000203ef, 0x5c025800, 0x0201f000, 0x00107eb4,
- 0x59300c03, 0x82040580, 0x000000d8, 0x04020209,
- 0x0201f000, 0x00020b9d, 0x83380480, 0x000000de,
- 0x04021004, 0x83380480, 0x000000db, 0x0401f002,
- 0x81780040, 0x040011ff, 0x0c01f001, 0x0010bc2a,
- 0x0010bc40, 0x0010bc4a, 0x59300c03, 0x82040580,
- 0x000000d1, 0x0400000c, 0x82040580, 0x000000d5,
- 0x040201f4, 0x42000800, 0x80000000, 0x4a026203,
- 0x00000002, 0x4a026403, 0x000000d9, 0x0201f000,
- 0x00020b30, 0x59340408, 0x48026006, 0x42000800,
- 0x80000040, 0x4a026203, 0x00000003, 0x0401f7f6,
- 0x59300c03, 0x82040480, 0x000000da, 0x04021004,
- 0x82040480, 0x000000d0, 0x0401f002, 0x81780040,
- 0x0c02101b, 0x0401f1db, 0x0201f800, 0x0010989f,
- 0x0402000a, 0x59300c03, 0x82040580, 0x000000d2,
- 0x040201d4, 0x42000000, 0x0010cfb1, 0x0401fb60,
- 0x0201f000, 0x00020b9d, 0x4933c857, 0x59cc1207,
- 0x80081110, 0x4d2c0000, 0x59325809, 0x4a025a07,
- 0x00000003, 0x480a5c07, 0x0201f800, 0x000203ef,
- 0x5c025800, 0x0201f000, 0x00020b9d, 0x0010bd78,
- 0x0010be24, 0x0010bc71, 0x0010bc71, 0x0010be24,
- 0x0010bc71, 0x0010be24, 0x0010bc6d, 0x0010be24,
- 0x0010bdb8, 0x41780800, 0x0401fa83, 0x0201f000,
- 0x00020b9d, 0x0201f800, 0x0010989f, 0x04000009,
- 0x4d2c0000, 0x59325809, 0x4a025a07, 0x00000000,
- 0x497a5c07, 0x0201f800, 0x000203ef, 0x5c025800,
- 0x0201f000, 0x00020b9d, 0x0201f800, 0x0010989f,
- 0x0400003e, 0x83380580, 0x0000004a, 0x0400002c,
- 0x83380580, 0x00000049, 0x0402019e, 0x4d2c0000,
- 0x59325809, 0x592c0a05, 0x82040500, 0x000000ff,
- 0x82000580, 0x0000001b, 0x04020019, 0x592c0207,
- 0x8c00051c, 0x0402000f, 0x4a025a07, 0x00000040,
- 0x497a5c07, 0x592c0000, 0x48026009, 0x0201f800,
- 0x000203ef, 0x5c025800, 0x4a026203, 0x00000007,
- 0x59300009, 0x800001c0, 0x04020082, 0x1c01f000,
- 0x59a80078, 0x8400050a, 0x48035078, 0x4a026203,
- 0x00000002, 0x5c025800, 0x1c01f000, 0x4a025a07,
- 0x00000000, 0x497a5c07, 0x0201f800, 0x000203ef,
- 0x5c025800, 0x0201f000, 0x00020b9d, 0x4933c857,
- 0x0201f800, 0x0010707a, 0x0201f800, 0x00106d71,
- 0x4d2c0000, 0x59325809, 0x4a025a07, 0x00000001,
- 0x497a5c07, 0x0201f800, 0x000203ef, 0x5c025800,
- 0x0201f000, 0x00020b9d, 0x4803c856, 0x0401f165,
- 0x0201f800, 0x0010989f, 0x0400002c, 0x83380480,
- 0x00000054, 0x04021004, 0x83380480, 0x00000047,
- 0x0401f002, 0x81780040, 0x04001006, 0x4d2c0000,
- 0x59325809, 0x0c01f823, 0x5c025800, 0x1c01f000,
- 0x83380580, 0x000000dd, 0x04020152, 0x4933c857,
- 0x0201f800, 0x00100c76, 0x0201f800, 0x0010989f,
- 0x04000016, 0x592c0a07, 0x82040580, 0x00000004,
- 0x04020006, 0x42000800, 0x00000001, 0x0401fd6a,
- 0x0201f000, 0x00020b9d, 0x4d2c0000, 0x59325809,
- 0x59cc1207, 0x80081110, 0x4a025a07, 0x00000003,
- 0x480a5c07, 0x0201f800, 0x000203ef, 0x5c025800,
- 0x0201f000, 0x00020b9d, 0x4803c856, 0x0401f135,
- 0x0010bd1c, 0x0010bcfd, 0x0010be24, 0x0010be24,
- 0x0010be24, 0x0010be24, 0x0010be24, 0x0010be24,
- 0x0010be24, 0x0010be24, 0x0010be24, 0x0010be24,
- 0x0010bcfd, 0x59300812, 0x82040500, 0xffff0000,
- 0x0402001c, 0x42001000, 0x00000000, 0x592c0a07,
- 0x82040580, 0x00000004, 0x0402000e, 0x82080580,
- 0x00000007, 0x04000007, 0x59300812, 0x800409c0,
- 0x04000004, 0x4807c857, 0x42001000, 0x00000015,
- 0x40080800, 0x0401fd38, 0x0201f000, 0x00020b9d,
- 0x59300812, 0x48065808, 0x480a5a07, 0x497a5c07,
- 0x0201f800, 0x000203ef, 0x0201f000, 0x00020b9d,
- 0x4803c856, 0x42001000, 0x00000007, 0x0401f7e4,
- 0x0201f800, 0x0010989f, 0x0400001b, 0x83380580,
- 0x000000d9, 0x040200ff, 0x59340408, 0x48026006,
- 0x4a026403, 0x000000d9, 0x0201f800, 0x00020168,
- 0x59306809, 0x58340207, 0x8c00051c, 0x04020006,
- 0x42000800, 0x80000040, 0x4a026203, 0x00000003,
- 0x0401f005, 0x42000800, 0x80000000, 0x4a026203,
- 0x00000002, 0x4a026403, 0x000000d9, 0x0201f000,
- 0x00020b30, 0x4803c856, 0x83380580, 0x000000dd,
- 0x040200e4, 0x42001000, 0x0000800f, 0x42001800,
- 0x00000005, 0x59cc2207, 0x80102110, 0x0201f000,
- 0x001039ac, 0x83380480, 0x000000df, 0x04021004,
- 0x83380480, 0x000000d0, 0x0401f002, 0x81780040,
- 0x040010d4, 0x4933c857, 0x493bc857, 0x59340a08,
- 0x48066006, 0x0c01f001, 0x0010bd6a, 0x0010bd66,
- 0x0010bd6a, 0x0010bd6a, 0x0010bd70, 0x0010bd68,
- 0x0010bd70, 0x0010bd6a, 0x0010bd65, 0x0010bd65,
- 0x0010bd65, 0x0010bd65, 0x0010bd65, 0x0010bd65,
- 0x0010bd70, 0x0401f0bf, 0x59340408, 0x48026006,
- 0x0201f800, 0x00020168, 0x4a026203, 0x00000002,
- 0x493a6403, 0x42000800, 0x80000000, 0x0401f4e5,
- 0x0201f800, 0x0002011a, 0x4a026203, 0x00000004,
- 0x493a6403, 0x42000800, 0x80000000, 0x0401f4dd,
- 0x59cc0207, 0x59cc0c07, 0x59cc1008, 0x59cc1809,
- 0x59cc220a, 0x59cc2c0a, 0x59cc300b, 0x4a026c00,
- 0x00000404, 0x48026c04, 0x48038893, 0x48035012,
- 0x48066a04, 0x480a6806, 0x480e6807, 0x48126a08,
- 0x48166c08, 0x8c183500, 0x0400000d, 0x59cc200d,
- 0x59cc280d, 0x4813c857, 0x4817c857, 0x59cc200c,
- 0x42001000, 0x0000800f, 0x42001800, 0x00000001,
- 0x901029c0, 0x0201f800, 0x001039ad, 0x59a80878,
- 0x42001800, 0x00000003, 0x84040d4e, 0x59342007,
- 0x8c183502, 0x0402000c, 0x82040d00, 0xffffff7b,
- 0x8c183504, 0x04020004, 0x42001800, 0x00000002,
- 0x0401f004, 0x42001800, 0x00000004, 0x84040d44,
- 0x59342006, 0x48075078, 0x42001000, 0x0000800f,
- 0x82102d00, 0xffff0000, 0x80142920, 0x82102500,
- 0x0000ffff, 0x0201f800, 0x001039ad, 0x59c80040,
- 0x84000534, 0x48039040, 0x0201f000, 0x00020b9d,
- 0x0201f800, 0x0010989f, 0x04000023, 0x4d2c0000,
- 0x59325809, 0x592c0a05, 0x82040d00, 0x000000ff,
- 0x82040580, 0x0000001b, 0x04020019, 0x592c0a07,
- 0x8c040d04, 0x04020003, 0x0201f800, 0x0010b8ac,
- 0x59340009, 0x4802580a, 0x8c040d06, 0x04020007,
- 0x48026806, 0x59a80078, 0x8400054c, 0x84000508,
- 0x48035078, 0x0401f002, 0x48026807, 0x4a025a07,
- 0x00000000, 0x497a5c07, 0x0201f800, 0x000203ef,
- 0x5c025800, 0x0201f000, 0x00020b9d, 0x497a5808,
- 0x0401f7f7, 0x4803c856, 0x0401f046, 0x59300a03,
- 0x82040480, 0x00000009, 0x04021004, 0x82040480,
- 0x00000001, 0x0401f002, 0x81780040, 0x0c021002,
- 0x0401f03c, 0x0010bdf1, 0x0010be24, 0x0010be24,
- 0x0010be24, 0x0010be24, 0x0010be24, 0x0010be24,
- 0x0010bdfd, 0x83380580, 0x00000013, 0x04000008,
- 0x83380580, 0x00000014, 0x0402002e, 0x59300c03,
- 0x4807c857, 0x0201f800, 0x00106d91, 0x0201f000,
- 0x00020b9d, 0x83380580, 0x000000da, 0x04020025,
- 0x4933c857, 0x493bc857, 0x59cc0808, 0x59cc1007,
- 0x59a81878, 0x820c1d00, 0xfffffffc, 0x82040580,
- 0x00000000, 0x04020002, 0x840c1d42, 0x82080580,
- 0x00000000, 0x04020002, 0x840c1d40, 0x480f5078,
- 0x480fc857, 0x836c0580, 0x00000001, 0x0400000a,
- 0x4202d800, 0x00000004, 0x4a035038, 0x00000000,
- 0x497b5058, 0x42000000, 0x00000080, 0x0201f800,
- 0x0010155d, 0x4a026403, 0x000000d8, 0x4a026203,
- 0x00000001, 0x42000800, 0x80000040, 0x0401f431,
- 0x4933c857, 0x493bc857, 0x59300203, 0x4803c857,
- 0x59300403, 0x4803c857, 0x42000000, 0x0010cfb3,
- 0x0401f987, 0x1c01f000, 0x4933c857, 0x4d2c0000,
- 0x4d3c0000, 0x417a5800, 0x417a7800, 0x0201f800,
- 0x0010989f, 0x04000003, 0x59325809, 0x592e7a09,
- 0x0401f81a, 0x82000540, 0x00000001, 0x5c027800,
- 0x5c025800, 0x1c01f000, 0x4933c857, 0x4d2c0000,
- 0x4d3c0000, 0x42027800, 0x00000040, 0x42000000,
- 0x0010cfae, 0x0401f96e, 0x417a5800, 0x0201f800,
- 0x0010989f, 0x04000005, 0x59325809, 0x592e7a09,
- 0x853e7d4c, 0x493e5a09, 0x0401f804, 0x5c027800,
- 0x5c025800, 0x1c01f000, 0x0201f800, 0x00106e41,
- 0x4df00000, 0x0401f88b, 0x4803c857, 0x82000c80,
- 0x00000009, 0x04021006, 0x0c01f808, 0x5c03e000,
- 0x02000800, 0x00106e2e, 0x1c01f000, 0x42000000,
- 0x00000006, 0x0401f7f9, 0x0010beb7, 0x0010beb8,
- 0x0010be71, 0x0010bece, 0x0010bed9, 0x0010be6b,
- 0x0010be6b, 0x0010be6b, 0x0010beb7, 0x4d380000,
- 0x417a7000, 0x0401ffb7, 0x5c027000, 0x0201f000,
- 0x00107eb4, 0x812e59c0, 0x04000021, 0x42001000,
- 0x00000002, 0x833c0500, 0x00000081, 0x04020007,
- 0x42001000, 0x00000006, 0x8d3e7d0c, 0x04020003,
- 0x42001000, 0x00000004, 0x592c0a07, 0x82040580,
- 0x00000004, 0x04020006, 0x40080800, 0x0201f800,
- 0x0010ba49, 0x0201f000, 0x00107eb4, 0x480a5a07,
- 0x0201f800, 0x000203ef, 0x59300403, 0x82000580,
- 0x000000d0, 0x04020004, 0x5930100a, 0x4a001400,
- 0x00000707, 0x0201f000, 0x00107eb4, 0x59300c03,
- 0x82040580, 0x000000d7, 0x04020005, 0x42000800,
- 0x00000004, 0x0401f858, 0x0401f7f0, 0x8d3e7d0c,
- 0x040007ee, 0x5932680a, 0x59300816, 0x59340412,
- 0x80040580, 0x04020007, 0x42000000, 0x0010cfaf,
- 0x0401f90f, 0x0201f800, 0x0010b8ac, 0x0401f7e3,
- 0x4933c857, 0x80040800, 0x48066016, 0x4d380000,
- 0x59327403, 0x83380580, 0x000000d0, 0x04020003,
- 0x4a038893, 0x00000001, 0x4a026203, 0x00000008,
- 0x0201f800, 0x00020bc1, 0x5c027000, 0x1c01f000,
- 0x8d3e7d0c, 0x04000006, 0x59300407, 0x82000580,
- 0x00000013, 0x02000000, 0x00109606, 0x598c000f,
- 0x4803c857, 0x81300580, 0x04020004, 0x0201f800,
- 0x00107161, 0x040207ac, 0x0201f800, 0x0010ba86,
- 0x040007a9, 0x4803c856, 0x0201f800, 0x00106d4c,
- 0x040007a5, 0x0401f79e, 0x0201f800, 0x00109552,
- 0x04020004, 0x0201f800, 0x0010712a, 0x0402079e,
- 0x0201f800, 0x00110065, 0x80c40040, 0x040207f2,
- 0x0401f799, 0x812e59c0, 0x04000006, 0x0201f800,
- 0x00106e2e, 0x0201f800, 0x00100c76, 0x0401f792,
- 0x59300004, 0x8c00053e, 0x0400000d, 0x8c00050c,
- 0x0402000b, 0x59306c03, 0x82340580, 0x000000d9,
- 0x04020004, 0x42000000, 0x00000003, 0x0401f005,
- 0x42000000, 0x00000001, 0x0401f002, 0x59300203,
- 0x1c01f000, 0x5931d82a, 0x58ef400a, 0x58ee580c,
- 0x58ec0008, 0x48074407, 0x0801f800, 0x1c01f000,
- 0x4817c857, 0x4c000000, 0x4c040000, 0x8c142d2a,
- 0x04000004, 0x5988011e, 0x80000000, 0x4803111e,
- 0x8c142d2e, 0x04000004, 0x5988011f, 0x80000000,
- 0x4803111f, 0x8c142d2c, 0x04000013, 0x40140000,
- 0x82000500, 0x00070000, 0x82000d80, 0x00030000,
- 0x0400000d, 0x82000d80, 0x00040000, 0x0400000a,
- 0x82000d80, 0x00050000, 0x04000007, 0x59880005,
- 0x80000000, 0x48031005, 0x59880120, 0x80000000,
- 0x48031120, 0x5c000800, 0x5c000000, 0x1c01f000,
- 0x4817c857, 0x4c000000, 0x4c040000, 0x8c142d2a,
- 0x04000004, 0x59880121, 0x80000000, 0x48031121,
- 0x8c142d2e, 0x04000004, 0x59880122, 0x80000000,
- 0x48031122, 0x8c142d2c, 0x04000013, 0x40140000,
- 0x82000500, 0x00070000, 0x82000d80, 0x00030000,
- 0x0400000d, 0x82000d80, 0x00040000, 0x0400000a,
- 0x82000d80, 0x00050000, 0x04000007, 0x59880005,
- 0x80000000, 0x48031005, 0x59880123, 0x80000000,
- 0x48031123, 0x5c000800, 0x5c000000, 0x1c01f000,
- 0x4807c857, 0x4c000000, 0x8c040d2c, 0x04000004,
- 0x5988010c, 0x80000000, 0x4803110c, 0x8c040d2a,
- 0x04000004, 0x5988010d, 0x80000000, 0x4803110d,
- 0x8c040d28, 0x04000004, 0x5988010e, 0x80000000,
- 0x4803110e, 0x8c040d26, 0x04000004, 0x5988010f,
- 0x80000000, 0x4803110f, 0x8c040d24, 0x04000004,
- 0x59880110, 0x80000000, 0x48031110, 0x8c040d22,
- 0x04000004, 0x59880111, 0x80000000, 0x48031111,
- 0x8c040d20, 0x04000004, 0x59880112, 0x80000000,
- 0x48031112, 0x5c000000, 0x1c01f000, 0x4807c857,
- 0x4c000000, 0x59880113, 0x80000000, 0x48031113,
- 0x5c000000, 0x1c01f000, 0x4807c857, 0x4c000000,
- 0x8c040d1c, 0x04000004, 0x59880114, 0x80000000,
- 0x48031114, 0x8c040d1a, 0x04000004, 0x59880115,
- 0x80000000, 0x48031115, 0x5c000000, 0x1c01f000,
- 0x4807c857, 0x4c000000, 0x8c040d18, 0x04000004,
- 0x59880116, 0x80000000, 0x48031116, 0x8c040d16,
+ 0x0000001b, 0x04020006, 0x592c1011, 0x592c0207,
+ 0x8c00051c, 0x04020002, 0x41780800, 0x4805a003,
+ 0x59300002, 0x4801a004, 0x4809a005, 0x0201f800,
+ 0x0010823a, 0x59340c08, 0x42001000, 0x00000100,
+ 0x0201f800, 0x00106fe1, 0x0201f800, 0x00106975,
+ 0x83180d40, 0x00000038, 0x42001000, 0x0000c920,
+ 0x0201f000, 0x0010811a, 0x59300a03, 0x82040480,
+ 0x00000009, 0x04021004, 0x82040480, 0x00000001,
+ 0x0401f002, 0x81780040, 0x0c021002, 0x0401f22c,
+ 0x0010c158, 0x0010c175, 0x0010c1d5, 0x0010c217,
+ 0x0010c37b, 0x0010c37b, 0x0010c277, 0x0010c2a0,
+ 0x83380580, 0x00000013, 0x04000015, 0x83380580,
+ 0x00000014, 0x0402021e, 0x59300c03, 0x4807c857,
+ 0x0201f800, 0x001070fc, 0x0201f800, 0x00109c4d,
+ 0x04000009, 0x4d2c0000, 0x59325809, 0x4a025a07,
+ 0x00000001, 0x497a5c07, 0x0201f800, 0x00020401,
+ 0x5c025800, 0x0201f000, 0x00108253, 0x59300c03,
+ 0x82040580, 0x000000d8, 0x04020209, 0x0201f000,
+ 0x00020afe, 0x83380480, 0x000000de, 0x04021004,
+ 0x83380480, 0x000000db, 0x0401f002, 0x81780040,
+ 0x040011ff, 0x0c01f001, 0x0010c181, 0x0010c197,
+ 0x0010c1a1, 0x59300c03, 0x82040580, 0x000000d1,
+ 0x0400000c, 0x82040580, 0x000000d5, 0x040201f4,
+ 0x42000800, 0x80000000, 0x4a026203, 0x00000002,
+ 0x4a026403, 0x000000d9, 0x0201f000, 0x00020a8e,
+ 0x59340408, 0x48026006, 0x42000800, 0x80000040,
+ 0x4a026203, 0x00000003, 0x0401f7f6, 0x59300c03,
+ 0x82040480, 0x000000da, 0x04021004, 0x82040480,
+ 0x000000d0, 0x0401f002, 0x81780040, 0x0c02101b,
+ 0x0401f1db, 0x0201f800, 0x00109c4d, 0x0402000a,
+ 0x59300c03, 0x82040580, 0x000000d2, 0x040201d4,
+ 0x42000000, 0x0010d5ce, 0x0401fb60, 0x0201f000,
+ 0x00020afe, 0x4933c857, 0x59cc1207, 0x80081110,
+ 0x4d2c0000, 0x59325809, 0x4a025a07, 0x00000003,
+ 0x480a5c07, 0x0201f800, 0x00020401, 0x5c025800,
+ 0x0201f000, 0x00020afe, 0x0010c2cf, 0x0010c37b,
+ 0x0010c1c8, 0x0010c1c8, 0x0010c37b, 0x0010c1c8,
+ 0x0010c37b, 0x0010c1c4, 0x0010c37b, 0x0010c30f,
+ 0x41780800, 0x0401fa83, 0x0201f000, 0x00020afe,
+ 0x0201f800, 0x00109c4d, 0x04000009, 0x4d2c0000,
+ 0x59325809, 0x4a025a07, 0x00000000, 0x497a5c07,
+ 0x0201f800, 0x00020401, 0x5c025800, 0x0201f000,
+ 0x00020afe, 0x0201f800, 0x00109c4d, 0x0400003e,
+ 0x83380580, 0x0000004a, 0x0400002c, 0x83380580,
+ 0x00000049, 0x0402019e, 0x4d2c0000, 0x59325809,
+ 0x592c0a05, 0x82040500, 0x000000ff, 0x82000580,
+ 0x0000001b, 0x04020019, 0x592c0207, 0x8c00051c,
+ 0x0402000f, 0x4a025a07, 0x00000040, 0x497a5c07,
+ 0x592c0000, 0x48026009, 0x0201f800, 0x00020401,
+ 0x5c025800, 0x4a026203, 0x00000007, 0x59300009,
+ 0x800001c0, 0x04020082, 0x1c01f000, 0x59a80086,
+ 0x8400050a, 0x48035086, 0x4a026203, 0x00000002,
+ 0x5c025800, 0x1c01f000, 0x4a025a07, 0x00000000,
+ 0x497a5c07, 0x0201f800, 0x00020401, 0x5c025800,
+ 0x0201f000, 0x00020afe, 0x4933c857, 0x0201f800,
+ 0x001073e9, 0x0201f800, 0x001070dc, 0x4d2c0000,
+ 0x59325809, 0x4a025a07, 0x00000001, 0x497a5c07,
+ 0x0201f800, 0x00020401, 0x5c025800, 0x0201f000,
+ 0x00020afe, 0x4803c856, 0x0401f165, 0x0201f800,
+ 0x00109c4d, 0x0400002c, 0x83380480, 0x00000054,
+ 0x04021004, 0x83380480, 0x00000047, 0x0401f002,
+ 0x81780040, 0x04001006, 0x4d2c0000, 0x59325809,
+ 0x0c01f823, 0x5c025800, 0x1c01f000, 0x83380580,
+ 0x000000dd, 0x04020152, 0x4933c857, 0x0201f800,
+ 0x00100c9b, 0x0201f800, 0x00109c4d, 0x04000016,
+ 0x592c0a07, 0x82040580, 0x00000004, 0x04020006,
+ 0x42000800, 0x00000001, 0x0401fd68, 0x0201f000,
+ 0x00020afe, 0x4d2c0000, 0x59325809, 0x59cc1207,
+ 0x80081110, 0x4a025a07, 0x00000003, 0x480a5c07,
+ 0x0201f800, 0x00020401, 0x5c025800, 0x0201f000,
+ 0x00020afe, 0x4803c856, 0x0401f135, 0x0010c273,
+ 0x0010c254, 0x0010c37b, 0x0010c37b, 0x0010c37b,
+ 0x0010c37b, 0x0010c37b, 0x0010c37b, 0x0010c37b,
+ 0x0010c37b, 0x0010c37b, 0x0010c37b, 0x0010c254,
+ 0x59300812, 0x82040500, 0xffff0000, 0x0402001c,
+ 0x42001000, 0x00000000, 0x592c0a07, 0x82040580,
+ 0x00000004, 0x0402000e, 0x82080580, 0x00000007,
+ 0x04000007, 0x59300812, 0x800409c0, 0x04000004,
+ 0x4807c857, 0x42001000, 0x00000015, 0x40080800,
+ 0x0401fd36, 0x0201f000, 0x00020afe, 0x59300812,
+ 0x48065808, 0x480a5a07, 0x497a5c07, 0x0201f800,
+ 0x00020401, 0x0201f000, 0x00020afe, 0x4803c856,
+ 0x42001000, 0x00000007, 0x0401f7e4, 0x0201f800,
+ 0x00109c4d, 0x0400001b, 0x83380580, 0x000000d9,
+ 0x040200ff, 0x59340408, 0x48026006, 0x4a026403,
+ 0x000000d9, 0x0201f800, 0x0002016d, 0x59306809,
+ 0x58340207, 0x8c00051c, 0x04020006, 0x42000800,
+ 0x80000040, 0x4a026203, 0x00000003, 0x0401f005,
+ 0x42000800, 0x80000000, 0x4a026203, 0x00000002,
+ 0x4a026403, 0x000000d9, 0x0201f000, 0x00020a8e,
+ 0x4803c856, 0x83380580, 0x000000dd, 0x040200e4,
+ 0x42001000, 0x0000800f, 0x42001800, 0x00000005,
+ 0x59cc2207, 0x80102110, 0x0201f000, 0x00103a4e,
+ 0x83380480, 0x000000df, 0x04021004, 0x83380480,
+ 0x000000d0, 0x0401f002, 0x81780040, 0x040010d4,
+ 0x4933c857, 0x493bc857, 0x59340a08, 0x48066006,
+ 0x0c01f001, 0x0010c2c1, 0x0010c2bd, 0x0010c2c1,
+ 0x0010c2c1, 0x0010c2c7, 0x0010c2bf, 0x0010c2c7,
+ 0x0010c2c1, 0x0010c2bc, 0x0010c2bc, 0x0010c2bc,
+ 0x0010c2bc, 0x0010c2bc, 0x0010c2bc, 0x0010c2c7,
+ 0x0401f0bf, 0x59340408, 0x48026006, 0x0201f800,
+ 0x0002016d, 0x4a026203, 0x00000002, 0x493a6403,
+ 0x42000800, 0x80000000, 0x0401f4e3, 0x0201f800,
+ 0x0002011f, 0x4a026203, 0x00000004, 0x493a6403,
+ 0x42000800, 0x80000000, 0x0401f4db, 0x59cc0207,
+ 0x59cc0c07, 0x59cc1008, 0x59cc1809, 0x59cc220a,
+ 0x59cc2c0a, 0x59cc300b, 0x4a026c00, 0x00000404,
+ 0x48026c04, 0x48038893, 0x48035018, 0x48066a04,
+ 0x480a6806, 0x480e6807, 0x48126a08, 0x48166c08,
+ 0x8c183500, 0x0400000d, 0x59cc200d, 0x59cc280d,
+ 0x4813c857, 0x4817c857, 0x59cc200c, 0x42001000,
+ 0x0000800f, 0x42001800, 0x00000001, 0x901029c0,
+ 0x0201f800, 0x00103a4f, 0x59a80886, 0x42001800,
+ 0x00000003, 0x84040d4e, 0x59342007, 0x8c183502,
+ 0x0402000c, 0x82040d00, 0xffffff7b, 0x8c183504,
+ 0x04020004, 0x42001800, 0x00000002, 0x0401f004,
+ 0x42001800, 0x00000004, 0x84040d44, 0x59342006,
+ 0x48075086, 0x42001000, 0x0000800f, 0x82102d00,
+ 0xffff0000, 0x80142920, 0x82102500, 0x0000ffff,
+ 0x0201f800, 0x00103a4f, 0x59c80040, 0x84000534,
+ 0x48039040, 0x0201f000, 0x00020afe, 0x0201f800,
+ 0x00109c4d, 0x04000023, 0x4d2c0000, 0x59325809,
+ 0x592c0a05, 0x82040d00, 0x000000ff, 0x82040580,
+ 0x0000001b, 0x04020019, 0x592c0a07, 0x8c040d04,
+ 0x04020003, 0x0201f800, 0x0010be01, 0x59340009,
+ 0x4802580a, 0x8c040d06, 0x04020007, 0x48026806,
+ 0x59a80086, 0x8400054c, 0x84000508, 0x48035086,
+ 0x0401f002, 0x48026807, 0x4a025a07, 0x00000000,
+ 0x497a5c07, 0x0201f800, 0x00020401, 0x5c025800,
+ 0x0201f000, 0x00020afe, 0x497a5808, 0x0401f7f7,
+ 0x4803c856, 0x0401f046, 0x59300a03, 0x82040480,
+ 0x00000009, 0x04021004, 0x82040480, 0x00000001,
+ 0x0401f002, 0x81780040, 0x0c021002, 0x0401f03c,
+ 0x0010c348, 0x0010c37b, 0x0010c37b, 0x0010c37b,
+ 0x0010c37b, 0x0010c37b, 0x0010c37b, 0x0010c354,
+ 0x83380580, 0x00000013, 0x04000008, 0x83380580,
+ 0x00000014, 0x0402002e, 0x59300c03, 0x4807c857,
+ 0x0201f800, 0x001070fc, 0x0201f000, 0x00020afe,
+ 0x83380580, 0x000000da, 0x04020025, 0x4933c857,
+ 0x493bc857, 0x59cc0808, 0x59cc1007, 0x59a81886,
+ 0x820c1d00, 0xfffffffc, 0x82040580, 0x00000000,
+ 0x04020002, 0x840c1d42, 0x82080580, 0x00000000,
+ 0x04020002, 0x840c1d40, 0x480f5086, 0x480fc857,
+ 0x836c0580, 0x00000001, 0x0400000a, 0x4202d800,
+ 0x00000004, 0x4a03503e, 0x00000000, 0x497b5066,
+ 0x42000000, 0x00000080, 0x0201f800, 0x001015bf,
+ 0x4a026403, 0x000000d8, 0x4a026203, 0x00000001,
+ 0x42000800, 0x80000040, 0x0401f42f, 0x4933c857,
+ 0x493bc857, 0x59300203, 0x4803c857, 0x59300403,
+ 0x4803c857, 0x42000000, 0x0010d5d0, 0x0401f987,
+ 0x1c01f000, 0x4933c857, 0x4d2c0000, 0x4d3c0000,
+ 0x417a5800, 0x417a7800, 0x0201f800, 0x00109c4d,
+ 0x04000003, 0x59325809, 0x592e7a09, 0x0401f81a,
+ 0x82000540, 0x00000001, 0x5c027800, 0x5c025800,
+ 0x1c01f000, 0x4933c857, 0x4d2c0000, 0x4d3c0000,
+ 0x42027800, 0x00000040, 0x42000000, 0x0010d5cb,
+ 0x0401f96e, 0x417a5800, 0x0201f800, 0x00109c4d,
+ 0x04000005, 0x59325809, 0x592e7a09, 0x853e7d4c,
+ 0x493e5a09, 0x0401f804, 0x5c027800, 0x5c025800,
+ 0x1c01f000, 0x0201f800, 0x001071b0, 0x4df00000,
+ 0x0401f88b, 0x4803c857, 0x82000c80, 0x00000009,
+ 0x04021006, 0x0c01f808, 0x5c03e000, 0x02000800,
+ 0x0010719d, 0x1c01f000, 0x42000000, 0x00000006,
+ 0x0401f7f9, 0x0010c40e, 0x0010c40f, 0x0010c3c8,
+ 0x0010c425, 0x0010c430, 0x0010c3c2, 0x0010c3c2,
+ 0x0010c3c2, 0x0010c40e, 0x4d380000, 0x417a7000,
+ 0x0401ffb7, 0x5c027000, 0x0201f000, 0x00108253,
+ 0x812e59c0, 0x04000021, 0x42001000, 0x00000002,
+ 0x833c0500, 0x00000081, 0x04020007, 0x42001000,
+ 0x00000006, 0x8d3e7d0c, 0x04020003, 0x42001000,
+ 0x00000004, 0x592c0a07, 0x82040580, 0x00000004,
+ 0x04020006, 0x40080800, 0x0201f800, 0x0010bf9e,
+ 0x0201f000, 0x00108253, 0x480a5a07, 0x0201f800,
+ 0x00020401, 0x59300403, 0x82000580, 0x000000d0,
+ 0x04020004, 0x5930100a, 0x4a001400, 0x00000707,
+ 0x0201f000, 0x00108253, 0x59300c03, 0x82040580,
+ 0x000000d7, 0x04020005, 0x42000800, 0x00000004,
+ 0x0401f858, 0x0401f7f0, 0x8d3e7d0c, 0x040007ee,
+ 0x5932680a, 0x59300816, 0x59340412, 0x80040580,
+ 0x04020007, 0x42000000, 0x0010d5cc, 0x0401f90f,
+ 0x0201f800, 0x0010be01, 0x0401f7e3, 0x4933c857,
+ 0x80040800, 0x48066016, 0x4d380000, 0x59327403,
+ 0x83380580, 0x000000d0, 0x04020003, 0x4a038893,
+ 0x00000001, 0x4a026203, 0x00000008, 0x0201f800,
+ 0x00020b22, 0x5c027000, 0x1c01f000, 0x8d3e7d0c,
+ 0x04000006, 0x59300407, 0x82000580, 0x00000013,
+ 0x02000000, 0x00109982, 0x598c000f, 0x4803c857,
+ 0x81300580, 0x04020004, 0x0201f800, 0x001074d0,
+ 0x040207ac, 0x0201f800, 0x0010bfdb, 0x040007a9,
+ 0x4803c856, 0x0201f800, 0x001070af, 0x040007a5,
+ 0x0401f79e, 0x0201f800, 0x001098d2, 0x04020004,
+ 0x0201f800, 0x00107499, 0x0402079e, 0x0201f800,
+ 0x00110766, 0x80c40040, 0x040207f2, 0x0401f799,
+ 0x812e59c0, 0x04000006, 0x0201f800, 0x0010719d,
+ 0x0201f800, 0x00100c9b, 0x0401f792, 0x59300004,
+ 0x8c00053e, 0x0400000d, 0x8c00050c, 0x0402000b,
+ 0x59306c03, 0x82340580, 0x000000d9, 0x04020004,
+ 0x42000000, 0x00000003, 0x0401f005, 0x42000000,
+ 0x00000001, 0x0401f002, 0x59300203, 0x1c01f000,
+ 0x5931d82a, 0x58ef400a, 0x58ee580c, 0x58ec0008,
+ 0x48074407, 0x0801f800, 0x1c01f000, 0x4817c857,
+ 0x4c000000, 0x4c040000, 0x8c142d2a, 0x04000004,
+ 0x59880123, 0x80000000, 0x48031123, 0x8c142d2e,
+ 0x04000004, 0x59880124, 0x80000000, 0x48031124,
+ 0x8c142d2c, 0x04000013, 0x40140000, 0x82000500,
+ 0x00070000, 0x82000d80, 0x00030000, 0x0400000d,
+ 0x82000d80, 0x00040000, 0x0400000a, 0x82000d80,
+ 0x00050000, 0x04000007, 0x59880005, 0x80000000,
+ 0x48031005, 0x59880125, 0x80000000, 0x48031125,
+ 0x5c000800, 0x5c000000, 0x1c01f000, 0x4817c857,
+ 0x4c000000, 0x4c040000, 0x8c142d2a, 0x04000004,
+ 0x59880126, 0x80000000, 0x48031126, 0x8c142d2e,
+ 0x04000004, 0x59880127, 0x80000000, 0x48031127,
+ 0x8c142d2c, 0x04000013, 0x40140000, 0x82000500,
+ 0x00070000, 0x82000d80, 0x00030000, 0x0400000d,
+ 0x82000d80, 0x00040000, 0x0400000a, 0x82000d80,
+ 0x00050000, 0x04000007, 0x59880005, 0x80000000,
+ 0x48031005, 0x59880128, 0x80000000, 0x48031128,
+ 0x5c000800, 0x5c000000, 0x1c01f000, 0x4807c857,
+ 0x4c000000, 0x8c040d2c, 0x04000004, 0x59880111,
+ 0x80000000, 0x48031111, 0x8c040d2a, 0x04000004,
+ 0x59880112, 0x80000000, 0x48031112, 0x8c040d28,
+ 0x04000004, 0x59880113, 0x80000000, 0x48031113,
+ 0x8c040d26, 0x04000004, 0x59880114, 0x80000000,
+ 0x48031114, 0x8c040d24, 0x04000004, 0x59880115,
+ 0x80000000, 0x48031115, 0x8c040d22, 0x04000004,
+ 0x59880116, 0x80000000, 0x48031116, 0x8c040d20,
0x04000004, 0x59880117, 0x80000000, 0x48031117,
- 0x8c040d14, 0x04000004, 0x59880118, 0x80000000,
- 0x48031118, 0x5c000000, 0x1c01f000, 0x4807c857,
- 0x4c000000, 0x8c040d10, 0x04000004, 0x59880119,
- 0x80000000, 0x48031119, 0x8c040d0c, 0x04000004,
- 0x5988011a, 0x80000000, 0x4803111a, 0x5c000000,
- 0x1c01f000, 0x4807c857, 0x4c000000, 0x8c040d08,
- 0x04000004, 0x5988011b, 0x80000000, 0x4803111b,
- 0x8c040d04, 0x04000004, 0x5988011c, 0x80000000,
- 0x4803111c, 0x5c000000, 0x1c01f000, 0x4807c856,
- 0x4c000000, 0x598800e5, 0x80000000, 0x480310e5,
- 0x5c000000, 0x1c01f000, 0x40680000, 0x5c036000,
- 0x4db00000, 0x49b3c857, 0x4c040000, 0x50000800,
- 0x80040800, 0x04001002, 0x44040000, 0x5c000800,
- 0x1c01f000, 0x480fc857, 0x4c000000, 0x820c0580,
- 0x00000000, 0x04020004, 0x42000000, 0x0010cee5,
- 0x0401f014, 0x820c0580, 0x00001001, 0x04020004,
- 0x42000000, 0x0010cee6, 0x0401f00e, 0x820c0580,
- 0x00001002, 0x04020004, 0x42000000, 0x0010cee7,
- 0x0401f008, 0x820c0c80, 0x0000201c, 0x02021800,
- 0x0010032e, 0x820c0500, 0x0000001f, 0x0c01f804,
- 0x0401ffdb, 0x5c000000, 0x1c01f000, 0x0010bff7,
- 0x0010bffa, 0x0010bffd, 0x0010c000, 0x0010c003,
- 0x0010c006, 0x0010c009, 0x0010c00c, 0x0010c00f,
- 0x0010c012, 0x0010c015, 0x0010c018, 0x0010c01b,
- 0x0010c01e, 0x0010c021, 0x0010c024, 0x0010c027,
- 0x0010c02a, 0x0010c02d, 0x0010c030, 0x0010c033,
- 0x0010c036, 0x0010c039, 0x0010c03c, 0x0010c03f,
- 0x0010c042, 0x0010c045, 0x0010c048, 0x42000000,
- 0x0010cee8, 0x1c01f000, 0x42000000, 0x0010cee9,
- 0x1c01f000, 0x42000000, 0x0010ceea, 0x1c01f000,
- 0x42000000, 0x0010ceeb, 0x1c01f000, 0x42000000,
- 0x0010ceec, 0x1c01f000, 0x42000000, 0x0010ceed,
- 0x1c01f000, 0x42000000, 0x0010ceee, 0x1c01f000,
- 0x42000000, 0x0010ceef, 0x1c01f000, 0x42000000,
- 0x0010cef0, 0x1c01f000, 0x42000000, 0x0010cef1,
- 0x1c01f000, 0x42000000, 0x0010cef2, 0x1c01f000,
- 0x42000000, 0x0010cef3, 0x1c01f000, 0x42000000,
- 0x0010cef4, 0x1c01f000, 0x42000000, 0x0010cef5,
- 0x1c01f000, 0x42000000, 0x0010cef6, 0x1c01f000,
- 0x42000000, 0x0010cef7, 0x1c01f000, 0x42000000,
- 0x0010cef8, 0x1c01f000, 0x42000000, 0x0010cef9,
- 0x1c01f000, 0x42000000, 0x0010cefa, 0x1c01f000,
- 0x42000000, 0x0010cefb, 0x1c01f000, 0x42000000,
- 0x0010cefc, 0x1c01f000, 0x42000000, 0x0010cefd,
- 0x1c01f000, 0x42000000, 0x0010cefe, 0x1c01f000,
- 0x42000000, 0x0010ceff, 0x1c01f000, 0x42000000,
- 0x0010cf00, 0x1c01f000, 0x42000000, 0x0010cf01,
- 0x1c01f000, 0x42000000, 0x0010cf02, 0x1c01f000,
- 0x42000000, 0x0010cf03, 0x1c01f000, 0x480fc857,
- 0x4c000000, 0x820c0580, 0x00000001, 0x04020004,
- 0x42000000, 0x0010ce68, 0x0401f012, 0x820c0580,
- 0x00000002, 0x04020004, 0x42000000, 0x0010ce69,
- 0x0401f00c, 0x820c0580, 0x00000003, 0x04020004,
- 0x42000000, 0x0010ce6a, 0x0401f006, 0x820c0580,
- 0x00000004, 0x04020004, 0x42000000, 0x0010ce6b,
- 0x0401ff4f, 0x5c000000, 0x1c01f000, 0x4c000000,
- 0x59a8021b, 0x4803c857, 0x59240a00, 0x8c040d0a,
- 0x04000010, 0x8c000506, 0x04000004, 0x42000000,
- 0x0010ce73, 0x0401f012, 0x8c00050a, 0x04000004,
- 0x42000000, 0x0010ce72, 0x0401f00d, 0x8c000508,
- 0x04000004, 0x42000000, 0x0010ce75, 0x0401f008,
- 0x0201f800, 0x001050f7, 0x04000006, 0x8c000506,
- 0x04020004, 0x42000000, 0x0010ce74, 0x0401ff30,
- 0x5c000000, 0x1c01f000, 0x8058b1c0, 0x02000800,
- 0x0010032e, 0x5450a800, 0x8050a000, 0x8054a800,
- 0x8058b040, 0x040207fc, 0x1c01f000, 0x8058b1c0,
- 0x02000800, 0x0010032e, 0x4450a800, 0x8054a800,
- 0x8058b040, 0x040207fd, 0x1c01f000, 0x4813c857,
- 0x4817c857, 0x40140000, 0x80100480, 0x02021800,
- 0x0010032e, 0x497bc841, 0x42007800, 0x000000ff,
- 0x40100000, 0x80140480, 0x82006d00, 0xffffff00,
- 0x04020002, 0x40007800, 0x4813c840, 0x483fc842,
- 0x04011000, 0x40100000, 0x803c2400, 0x40100000,
- 0x80140580, 0x040207f3, 0x45782800, 0x1c01f000,
- 0x8058b1c0, 0x02000800, 0x0010032e, 0x50500000,
- 0x9c0001c0, 0x4400a800, 0x8050a000, 0x8054a800,
- 0x8058b040, 0x040207fa, 0x1c01f000, 0x4c000000,
- 0x59a80007, 0x8c00051c, 0x5c000000, 0x1c01f000,
+ 0x5c000000, 0x1c01f000, 0x4807c857, 0x4c000000,
+ 0x59880118, 0x80000000, 0x48031118, 0x5c000000,
+ 0x1c01f000, 0x4807c857, 0x4c000000, 0x8c040d1c,
+ 0x04000004, 0x59880119, 0x80000000, 0x48031119,
+ 0x8c040d1a, 0x04000004, 0x5988011a, 0x80000000,
+ 0x4803111a, 0x5c000000, 0x1c01f000, 0x4807c857,
+ 0x4c000000, 0x8c040d18, 0x04000004, 0x5988011b,
+ 0x80000000, 0x4803111b, 0x8c040d16, 0x04000004,
+ 0x5988011c, 0x80000000, 0x4803111c, 0x8c040d14,
+ 0x04000004, 0x5988011d, 0x80000000, 0x4803111d,
+ 0x5c000000, 0x1c01f000, 0x4807c857, 0x4c000000,
+ 0x8c040d10, 0x04000004, 0x5988011e, 0x80000000,
+ 0x4803111e, 0x8c040d0c, 0x04000004, 0x5988011f,
+ 0x80000000, 0x4803111f, 0x5c000000, 0x1c01f000,
+ 0x4807c857, 0x4c000000, 0x8c040d08, 0x04000004,
+ 0x59880120, 0x80000000, 0x48031120, 0x8c040d04,
+ 0x04000004, 0x59880121, 0x80000000, 0x48031121,
+ 0x5c000000, 0x1c01f000, 0x4807c856, 0x4c000000,
+ 0x598800ea, 0x80000000, 0x480310ea, 0x5c000000,
+ 0x1c01f000, 0x40680000, 0x5c036000, 0x4db00000,
+ 0x49b3c857, 0x4c040000, 0x50000800, 0x80040800,
+ 0x04001002, 0x44040000, 0x5c000800, 0x1c01f000,
+ 0x480fc857, 0x4c000000, 0x820c0580, 0x00000000,
+ 0x04020004, 0x42000000, 0x0010d4fb, 0x0401f014,
+ 0x820c0580, 0x00001001, 0x04020004, 0x42000000,
+ 0x0010d4fc, 0x0401f00e, 0x820c0580, 0x00001002,
+ 0x04020004, 0x42000000, 0x0010d4fd, 0x0401f008,
+ 0x820c0c80, 0x0000201c, 0x02021800, 0x0010032f,
+ 0x820c0500, 0x0000001f, 0x0c01f804, 0x0401ffdb,
+ 0x5c000000, 0x1c01f000, 0x0010c54e, 0x0010c551,
+ 0x0010c554, 0x0010c557, 0x0010c55a, 0x0010c55d,
+ 0x0010c560, 0x0010c563, 0x0010c566, 0x0010c569,
+ 0x0010c56c, 0x0010c56f, 0x0010c572, 0x0010c575,
+ 0x0010c578, 0x0010c57b, 0x0010c57e, 0x0010c581,
+ 0x0010c584, 0x0010c587, 0x0010c58a, 0x0010c58d,
+ 0x0010c590, 0x0010c593, 0x0010c596, 0x0010c599,
+ 0x0010c59c, 0x0010c59f, 0x42000000, 0x0010d4fe,
+ 0x1c01f000, 0x42000000, 0x0010d4ff, 0x1c01f000,
+ 0x42000000, 0x0010d500, 0x1c01f000, 0x42000000,
+ 0x0010d501, 0x1c01f000, 0x42000000, 0x0010d502,
+ 0x1c01f000, 0x42000000, 0x0010d503, 0x1c01f000,
+ 0x42000000, 0x0010d504, 0x1c01f000, 0x42000000,
+ 0x0010d505, 0x1c01f000, 0x42000000, 0x0010d506,
+ 0x1c01f000, 0x42000000, 0x0010d507, 0x1c01f000,
+ 0x42000000, 0x0010d508, 0x1c01f000, 0x42000000,
+ 0x0010d509, 0x1c01f000, 0x42000000, 0x0010d50a,
+ 0x1c01f000, 0x42000000, 0x0010d50b, 0x1c01f000,
+ 0x42000000, 0x0010d50c, 0x1c01f000, 0x42000000,
+ 0x0010d50d, 0x1c01f000, 0x42000000, 0x0010d50e,
+ 0x1c01f000, 0x42000000, 0x0010d50f, 0x1c01f000,
+ 0x42000000, 0x0010d510, 0x1c01f000, 0x42000000,
+ 0x0010d511, 0x1c01f000, 0x42000000, 0x0010d512,
+ 0x1c01f000, 0x42000000, 0x0010d513, 0x1c01f000,
+ 0x42000000, 0x0010d514, 0x1c01f000, 0x42000000,
+ 0x0010d515, 0x1c01f000, 0x42000000, 0x0010d516,
+ 0x1c01f000, 0x42000000, 0x0010d517, 0x1c01f000,
+ 0x42000000, 0x0010d518, 0x1c01f000, 0x42000000,
+ 0x0010d519, 0x1c01f000, 0x480fc857, 0x4c000000,
+ 0x820c0580, 0x00000001, 0x04020004, 0x42000000,
+ 0x0010d47e, 0x0401f012, 0x820c0580, 0x00000002,
+ 0x04020004, 0x42000000, 0x0010d47f, 0x0401f00c,
+ 0x820c0580, 0x00000003, 0x04020004, 0x42000000,
+ 0x0010d480, 0x0401f006, 0x820c0580, 0x00000004,
+ 0x04020004, 0x42000000, 0x0010d481, 0x0401ff4f,
+ 0x5c000000, 0x1c01f000, 0x4c000000, 0x59a80221,
+ 0x4803c857, 0x59240a00, 0x8c040d0a, 0x04000010,
+ 0x8c000506, 0x04000004, 0x42000000, 0x0010d489,
+ 0x0401f012, 0x8c00050a, 0x04000004, 0x42000000,
+ 0x0010d488, 0x0401f00d, 0x8c000508, 0x04000004,
+ 0x42000000, 0x0010d48b, 0x0401f008, 0x0201f800,
+ 0x001052aa, 0x04000006, 0x8c000506, 0x04020004,
+ 0x42000000, 0x0010d48a, 0x0401ff30, 0x5c000000,
+ 0x1c01f000, 0x8058b1c0, 0x02000800, 0x0010032f,
+ 0x5450a800, 0x8050a000, 0x8054a800, 0x8058b040,
+ 0x040207fc, 0x1c01f000, 0x8058b1c0, 0x02000800,
+ 0x0010032f, 0x4450a800, 0x8054a800, 0x8058b040,
+ 0x040207fd, 0x1c01f000, 0x4813c857, 0x4817c857,
+ 0x40140000, 0x80100480, 0x02021800, 0x0010032f,
+ 0x497bc841, 0x42007800, 0x000000ff, 0x40100000,
+ 0x80140480, 0x82006d00, 0xffffff00, 0x04020002,
+ 0x40007800, 0x4813c840, 0x483fc842, 0x04011000,
+ 0x40100000, 0x803c2400, 0x40100000, 0x80140580,
+ 0x040207f3, 0x45782800, 0x1c01f000, 0x8058b1c0,
+ 0x02000800, 0x0010032f, 0x50500000, 0x9c0001c0,
+ 0x4400a800, 0x8050a000, 0x8054a800, 0x8058b040,
+ 0x040207fa, 0x1c01f000, 0x4c000000, 0x59a80007,
+ 0x8c00051c, 0x5c000000, 0x1c01f000, 0x0401f807,
+ 0x42018800, 0x00000001, 0x04020003, 0x42018800,
+ 0x00000000, 0x1c01f000, 0x59a80007, 0x8c000518,
+ 0x1c01f000, 0x4200b000, 0x0010d5ee, 0x5058b000,
+ 0x1c01f000, 0x42006800, 0x0010d5ef, 0x58340406,
+ 0x8c000502, 0x040007f8, 0x4200b000, 0x00000001,
+ 0x1c01f000, 0x42006800, 0x00000064, 0x80346840,
+ 0x04000007, 0x4a030000, 0x00000001, 0x40000000,
+ 0x59807000, 0x8c387500, 0x040007f9, 0x1c01f000,
0x0401f807, 0x42018800, 0x00000001, 0x04020003,
- 0x42018800, 0x00000000, 0x1c01f000, 0x59a80007,
- 0x8c000518, 0x1c01f000, 0x4200b000, 0x0010cfd0,
- 0x5058b000, 0x1c01f000, 0x42006800, 0x0010cfd1,
- 0x58340406, 0x8c000502, 0x040007f8, 0x4200b000,
- 0x00000001, 0x1c01f000, 0x42006800, 0x00000064,
- 0x80346840, 0x04000007, 0x4a030000, 0x00000001,
- 0x40000000, 0x59807000, 0x8c387500, 0x040007f9,
- 0x1c01f000, 0x0401f807, 0x42018800, 0x00000001,
- 0x04020003, 0x42018800, 0x00000000, 0x1c01f000,
- 0x42006800, 0x0010cfd1, 0x58340406, 0x8c000504,
- 0x1c01f000, 0x0401f807, 0x42018800, 0x00000001,
- 0x04020003, 0x42018800, 0x00000000, 0x1c01f000,
- 0x42006800, 0x0010cfd1, 0x58340406, 0x8c000508,
+ 0x42018800, 0x00000000, 0x1c01f000, 0x42006800,
+ 0x0010d5ef, 0x58340406, 0x8c000504, 0x1c01f000,
+ 0x0401f807, 0x42018800, 0x00000001, 0x04020003,
+ 0x42018800, 0x00000000, 0x1c01f000, 0x42006800,
+ 0x0010d5ee, 0x50346800, 0x42007000, 0x0010d5ef,
+ 0x58380200, 0x8c000500, 0x04020005, 0x82387400,
+ 0x0000000b, 0x80346840, 0x040207fa, 0x1c01f000,
+ 0x0401f807, 0x42018800, 0x00000001, 0x04020003,
+ 0x42018800, 0x00000000, 0x1c01f000, 0x42006800,
+ 0x0010d5ef, 0x58340406, 0x8c000508, 0x1c01f000,
+ 0x42006800, 0x0010d5ef, 0x58340406, 0x8c00050a,
0x1c01f000, 0x59a80006, 0x8c000516, 0x1c01f000,
- 0x00000001, 0x00000002, 0x00000004, 0x00000008,
- 0x00000010, 0x00000020, 0x00000040, 0x00000080,
- 0x00000100, 0x00000200, 0x00000400, 0x00000800,
- 0x00001000, 0x00002000, 0x00004000, 0x00008000,
- 0x00010000, 0x0010cfd1, 0x0010cfdc, 0x0010cfe7,
- 0x0010cff2, 0x0010cffd, 0x0010d008, 0x0010d013,
- 0x0010d01e, 0x0010d029, 0x0010d034, 0x0010d03f,
- 0x0010d04a, 0x0010d055, 0x0010d060, 0x0010d06b,
- 0x0010d076, 0x0010d081, 0x0010d08c, 0x0010d097,
- 0x0010d0a2, 0x0010d0ad, 0x0010d0b8, 0x0010d0c3,
- 0x0010d0ce, 0x0010d0d9, 0x0010d0e4, 0x0010d0ef,
- 0x0010d0fa, 0x0010d105, 0x0010d110, 0x0010d11b,
- 0x0010d126, 0x0010d131, 0x0010d13c, 0x0010d147,
- 0x0010d152, 0x0010d15d, 0x0010d168, 0x0010d173,
- 0x0010d17e, 0x0010d189, 0x0010d194, 0x0010d19f,
- 0x0010d1aa, 0x0010d1b5, 0x0010d1c0, 0x0010d1cb,
- 0x0010d1d6, 0x0010d1e1, 0x0010d1ec, 0x0010d1f7,
- 0x0010d202, 0x0010d20d, 0x0010d218, 0x0010d223,
- 0x0010d22e, 0x0010d239, 0x0010d244, 0x0010d24f,
- 0x0010d25a, 0x0010d265, 0x0010d270, 0x0010d27b,
- 0x0010d286, 0x0010d291, 0x0010d29c, 0x0010d2a7,
- 0x0010d2b2, 0x0010d2bd, 0x0010d2c8, 0x0010d2d3,
- 0x0010d2de, 0x0010d2e9, 0x0010d2f4, 0x0010d2ff,
- 0x0010d30a, 0x0010d315, 0x0010d320, 0x0010d32b,
- 0x0010d336, 0x0010d341, 0x0010d34c, 0x0010d357,
- 0x0010d362, 0x0010d36d, 0x0010d378, 0x0010d383,
- 0x0010d38e, 0x0010d399, 0x0010d3a4, 0x0010d3af,
- 0x0010d3ba, 0x0010d3c5, 0x0010d3d0, 0x0010d3db,
- 0x0010d3e6, 0x0010d3f1, 0x0010d3fc, 0x0010d407,
- 0x0010d412, 0x0010d41d, 0x0010d428, 0x0010d433,
- 0x0010d43e, 0x0010d449, 0x0010d454, 0x0010d45f,
- 0x0010d46a, 0x0010d475, 0x0010d480, 0x0010d48b,
- 0x0010d496, 0x0010d4a1, 0x0010d4ac, 0x0010d4b7,
- 0x0010d4c2, 0x0010d4cd, 0x0010d4d8, 0x0010d4e3,
- 0x0010d4ee, 0x0010d4f9, 0x0010d504, 0x0010d50f,
- 0x0010d51a, 0x0010d525, 0x0010d530, 0x0010d53b,
- 0x0010d546, 0x4a035071, 0x0000001c, 0x4a035072,
- 0x00000013, 0x4a035073, 0x00000001, 0x4a035074,
- 0x00000000, 0x59e00002, 0x8c00051e, 0x42000000,
- 0x7ffe00fe, 0x04000003, 0x42000000, 0x7ffe01fe,
- 0x50000800, 0x48075047, 0x80040920, 0x82040580,
- 0x0000013e, 0x0402000b, 0x59a80070, 0x84000548,
- 0x48035070, 0x4a035071, 0x0000005a, 0x4a035072,
- 0x00000058, 0x4a035074, 0x0000000f, 0x0401f045,
- 0x82040580, 0x0000013f, 0x0400000a, 0x82040580,
- 0x0000014e, 0x04000007, 0x82040580, 0x00000155,
- 0x04000004, 0x82040580, 0x00000156, 0x0402000b,
- 0x59a80070, 0x8400054a, 0x48035070, 0x4a035071,
- 0x00000055, 0x4a035072, 0x00000052, 0x4a035074,
- 0x00000009, 0x0401f02f, 0x59e00003, 0x82000500,
- 0x00030000, 0x82000580, 0x00000000, 0x04020029,
- 0x82040580, 0x00000147, 0x04000019, 0x82040580,
- 0x0000012c, 0x04000016, 0x82040580, 0x0000012a,
- 0x04000007, 0x82040580, 0x0000012b, 0x04000004,
- 0x82040580, 0x00000145, 0x0402001a, 0x59a80070,
- 0x84000546, 0x48035070, 0x4a035071, 0x0000003d,
- 0x4a035072, 0x00000038, 0x4a035073, 0x0000001e,
- 0x4a035074, 0x00000001, 0x0401f00c, 0x59a80070,
- 0x84000544, 0x48035070, 0x4a035071, 0x0000003d,
- 0x4a035072, 0x00000038, 0x4a035073, 0x0000001e,
- 0x4a035074, 0x00000001, 0x4a0378e4, 0x000c0000,
- 0x59a80070, 0x8c000502, 0x04000005, 0x82000500,
- 0x00000030, 0x02000800, 0x0010032e, 0x1c01f000,
- 0x6b3597d5,
- 0x00000000, 0x00000000, 0x00112000, 0x000036ba,
- 0x00000000, 0x00000000, 0x00020000, 0x00000cef,
- 0x836c0580, 0x00000003, 0x02020000, 0x001002bd,
- 0x42000000, 0x0010cb17, 0x50000000, 0x800001c0,
- 0x04020a5e, 0x0401fa08, 0x0201f800, 0x000205ce,
- 0x0401fbfb, 0x0201f800, 0x00020b27, 0x0201f800,
- 0x00020988, 0x0401f7ef, 0x42007000, 0x00020cf0,
- 0x58380004, 0x49781000, 0x4a001002, 0x00000000,
- 0x48087004, 0x80000d40, 0x04020006, 0x48087005,
- 0x58380000, 0x80000540, 0x0400000a, 0x1c01f000,
- 0x48080800, 0x0401f7fb, 0x42007000, 0x00020cf0,
- 0x58380000, 0x80000540, 0x04000002, 0x1c01f000,
- 0x58380807, 0x800409c0, 0x02020000, 0x00100600,
- 0x58380005, 0x80006d40, 0x04020002, 0x1c01f000,
- 0x58340000, 0x48347001, 0x80000540, 0x04020002,
- 0x48007004, 0x48007005, 0x4a03b805, 0x30000002,
- 0x58340006, 0x59dc0806, 0x4803b800, 0x58340007,
- 0x4803b801, 0x58340805, 0x58341003, 0x58340001,
- 0x48047002, 0x48087003, 0x480bb803, 0x8c000500,
- 0x04020004, 0x4a007000, 0x00000002, 0x0401f005,
- 0x4a007000, 0x00000001, 0x0201f000, 0x0010062c,
- 0x58380802, 0x42001000, 0x0000ff00, 0x82040480,
- 0x0000ff00, 0x04021003, 0x40041000, 0x80000580,
- 0x48007002, 0x480bb802, 0x4a03b805, 0x10000002,
- 0x1c01f000, 0x59dc0806, 0x4a03b805, 0x20000000,
- 0x8c040d3e, 0x0400000c, 0x8c040d08, 0x02020800,
- 0x0010032e, 0x42007000, 0x00020cf0, 0x58380000,
- 0x82001480, 0x00000004, 0x0c001004, 0x0201f800,
- 0x0010032e, 0x1c01f000, 0x0002002c, 0x00020072,
- 0x0002007b, 0x0010106c, 0x82040d00, 0x43000f80,
- 0x02020000, 0x0010063a, 0x58380002, 0x80000540,
- 0x0400000a, 0x0201f000, 0x0010062c, 0x82040d00,
- 0x43000f80, 0x02020000, 0x0010063a, 0x58380002,
- 0x80000540, 0x040207cf, 0x58386001, 0x58300008,
- 0x4a006002, 0x00000100, 0x4a007000, 0x00000000,
- 0x80001540, 0x040007a3, 0x58300006, 0x58300805,
- 0x80040400, 0x58300807, 0x48006006, 0x82040c40,
- 0x00000000, 0x48046007, 0x4030d000, 0x0809f800,
- 0x0401f792, 0x59b800ea, 0x82000d00, 0xf0000038,
- 0x02020000, 0x00100779, 0x8c000510, 0x02000000,
- 0x00100778, 0x59ba60e0, 0x81300182, 0x0402104b,
- 0x04002031, 0x8532653e, 0x59300407, 0x82000580,
- 0x00000003, 0x04020029, 0x59300203, 0x82000580,
- 0x00000004, 0x04020025, 0x59325809, 0x59300004,
- 0x4a025a05, 0x00000103, 0x497a580a, 0x8c00053e,
- 0x04020016, 0x59300008, 0x82000500, 0x04000800,
- 0x82000580, 0x04000800, 0x04000015, 0x0401fb38,
- 0x5932680a, 0x0201f800, 0x00020b9d, 0x5934000f,
- 0x5934140b, 0x80081040, 0x04001002, 0x480a6c0b,
- 0x80000540, 0x04020a99, 0x59b800ea, 0x8c000510,
- 0x040207d9, 0x1c01f000, 0x0201f800, 0x00107226,
- 0x040007e9, 0x0201f000, 0x0010076e, 0x59300220,
- 0x48025c10, 0x0401f7ea, 0x42027000, 0x00000055,
- 0x0401f022, 0x83326500, 0x3fffffff, 0x59300407,
- 0x82000580, 0x00000003, 0x04020011, 0x59325809,
- 0x5932680a, 0x4a025a05, 0x00000103, 0x497a580a,
- 0x0401fb13, 0x0201f800, 0x00020b9d, 0x5934000f,
- 0x5934140b, 0x80081040, 0x04001002, 0x480a6c0b,
- 0x80000540, 0x04020a75, 0x0401f7dc, 0x42027000,
- 0x00000054, 0x0401f009, 0x83300500, 0x60000000,
- 0x04000016, 0x81326580, 0x8000013a, 0x82000400,
- 0x0010077f, 0x50027000, 0x59300c07, 0x82040580,
- 0x00000002, 0x02000000, 0x0010076e, 0x59300004,
- 0x8c00053e, 0x04020004, 0x0201f800, 0x00020bc1,
- 0x0401f7c6, 0x0201f800, 0x00107226, 0x040007fb,
- 0x0201f000, 0x0010076e, 0x83300500, 0x1f000000,
- 0x02000000, 0x00100771, 0x81326580, 0x80000130,
- 0x82000c80, 0x00000014, 0x02021800, 0x0010032e,
- 0x1201f000, 0x00100783, 0x82000500, 0xf0000000,
- 0x82040d00, 0x0fffffff, 0x80040d40, 0x4807c857,
- 0x59b800ea, 0x8c000516, 0x02020000, 0x0010089f,
- 0x480770e1, 0x1c01f000, 0x59325809, 0x412c7000,
- 0x58380a05, 0x82040d00, 0x000000ff, 0x82040580,
- 0x00000068, 0x02000000, 0x00100b89, 0x82040580,
- 0x00000072, 0x02000000, 0x00100ba6, 0x58380a05,
- 0x82040500, 0x0000000f, 0x82000c00, 0x00100f0b,
- 0x50044000, 0x0c01f001, 0x00100b72, 0x00100b72,
- 0x0002013e, 0x00100b72, 0x00100b72, 0x00100b72,
- 0x00100b72, 0x00100b72, 0x0002014e, 0x00100bbf,
- 0x00100b72, 0x00100b74, 0x00100bad, 0x00100b72,
- 0x00100b72, 0x00100b72, 0x5838040b, 0x8c000500,
- 0x02000800, 0x0010032e, 0x50200000, 0x80387c00,
- 0x583c1002, 0x583c2800, 0x583c2001, 0x58380a08,
- 0x58383010, 0x59303808, 0x58384c09, 0x5838000e,
- 0x48026013, 0x0401f010, 0x5838020b, 0x8c000502,
- 0x02000000, 0x00100b72, 0x50200000, 0x80387c00,
- 0x583c2800, 0x583c2001, 0x583c1002, 0x592c0a08,
- 0x592c4c09, 0x592c3010, 0x59303808, 0x497a6013,
- 0x497a6014, 0x4816600f, 0x48126010, 0x480a6011,
- 0x481a6012, 0x80040840, 0x4806600e, 0x02020000,
- 0x00100bec, 0x841c3d40, 0x481e6008, 0x1c01f000,
- 0x4d2c0000, 0x59325809, 0x592c0a05, 0x4807c857,
- 0x82040d00, 0x000000ff, 0x82040500, 0x0000000f,
- 0x1201f000, 0x00100d48, 0x41787800, 0x59325809,
- 0x592c0c0b, 0x8c040d02, 0x02000000, 0x00100d89,
- 0x592c000e, 0x592c1010, 0x592c0a05, 0x480a6012,
- 0x48026013, 0x48026014, 0x82040d00, 0x000000ff,
- 0x82040580, 0x00000072, 0x02000000, 0x00100d90,
- 0x412c3000, 0x82040500, 0x0000000f, 0x82000400,
- 0x00100f0b, 0x50003800, 0x8c3c7d0e, 0x04000002,
- 0x801c3800, 0x501c0000, 0x592c1a08, 0x4802600b,
- 0x481a600c, 0x481e600d, 0x480e600e, 0x843c7d4a,
- 0x403c1000, 0x1c01f000, 0x592c0a05, 0x497a6013,
- 0x41787800, 0x82040d00, 0x000000ff, 0x82040580,
- 0x00000068, 0x02000000, 0x00100d94, 0x412c3000,
- 0x592c1a08, 0x82040500, 0x0000000f, 0x82000400,
- 0x00100f0b, 0x50004000, 0x8c3c7d0e, 0x04000002,
- 0x80204000, 0x50200000, 0x4802600b, 0x481a600c,
- 0x4822600d, 0x480e600e, 0x483e6004, 0x80000580,
- 0x1c01f000, 0x59e00004, 0x8c00050e, 0x040206aa,
- 0x1c01f000, 0x00020208, 0x000201f5, 0x000201f5,
- 0x000201f5, 0x000201f5, 0x000201f5, 0x000201f5,
- 0x000201f5, 0x000201f5, 0x000201f5, 0x000201f5,
- 0x000201f5, 0x000201f5, 0x000201f5, 0x000201f5,
- 0x000201f5, 0x000201f5, 0x000201f5, 0x000201f5,
- 0x000201f5, 0x000201f5, 0x000201f5, 0x000201f5,
- 0x000201f5, 0x000201f5, 0x000201f5, 0x000201f5,
- 0x000201f5, 0x000201f5, 0x000201f5, 0x000201f5,
- 0x000201f5, 0x000201f5, 0x000201f5, 0x000201f5,
- 0x000201f5, 0x000201f5, 0x000201f5, 0x000201f5,
- 0x000201f5, 0x000201f5, 0x000201f5, 0x000201f5,
- 0x000201f5, 0x000201f5, 0x000201f5, 0x000201f5,
- 0x000201f5, 0x000201f5, 0x000201f5, 0x000201f5,
- 0x000201f5, 0x000201f5, 0x000201f5, 0x000201f5,
- 0x000201f5, 0x000201f5, 0x000201f5, 0x000201f5,
- 0x000201f5, 0x000201f5, 0x000201f5, 0x000201f5,
- 0x000201f5, 0x4c000000, 0x4df00000, 0x4203e000,
- 0xb0100000, 0x41f00000, 0x81fe1500, 0x8d0a1512,
- 0x02020800, 0x001013af, 0x8d0a1518, 0x02020800,
- 0x00020b4a, 0x8d0a151a, 0x04020e93, 0x83080500,
- 0x00000d00, 0x04020804, 0x5c03e000, 0x5c000000,
- 0x1801f000, 0x8d0a1516, 0x02020800, 0x00101203,
- 0x8d0a1514, 0x04020fa4, 0x8d0a1508, 0x02020800,
- 0x00100fce, 0x8d0a1500, 0x02020000, 0x00020a80,
- 0x1c01f000, 0x42000000, 0x0010cb1d, 0x50000000,
- 0x8c000504, 0x04000014, 0x42000000, 0x0010cb1d,
- 0x50000000, 0x8c000502, 0x04020002, 0x1c01f000,
- 0x4df00000, 0x4203e000, 0x50000000, 0x42034000,
- 0x0010caff, 0x59a0001e, 0x59a1d806, 0x84000502,
- 0x4803401e, 0x58ec0008, 0x0801f800, 0x5c03e000,
- 0x1c01f000, 0x04027002, 0x04026002, 0x1c01f000,
- 0x4df00000, 0x4203e000, 0x50000000, 0x59e00020,
- 0x82000d80, 0x00000045, 0x04000004, 0x82000d80,
- 0x00000044, 0x04020008, 0x4803c857, 0x42000800,
- 0x00020cf0, 0x58040800, 0x82040d80, 0x00000000,
- 0x0402001d, 0x0201f800, 0x00100583, 0x0400001a,
- 0x412dd800, 0x48efc857, 0x0201f800, 0x00103aa6,
- 0x42034000, 0x0010caff, 0x49a1d80a, 0x48ef4006,
- 0x59a0001e, 0x84000544, 0x4803401e, 0x59e00020,
- 0x4803c857, 0x59e00021, 0x4803c857, 0x59e00022,
- 0x4803c857, 0x59e00023, 0x4803c857, 0x59e00024,
- 0x4803c857, 0x0201f800, 0x0010221c, 0x0201f800,
- 0x0010223b, 0x5c03e000, 0x1c01f000, 0x0201f800,
- 0x0010c0d6, 0x040007fe, 0x4203e000, 0x30000001,
- 0x4203e000, 0x40000000, 0x42000800, 0x00007a12,
- 0x45780800, 0x0401f7ff, 0x4da00000, 0x4df00000,
- 0x4203e000, 0x50000000, 0x04006050, 0x42034000,
- 0x0010caff, 0x59a01018, 0x59a01819, 0x800c19c0,
- 0x0402000a, 0x59a0381c, 0x801c39c0, 0x02000800,
- 0x0010032e, 0x49a3c857, 0x481fc857, 0x59a0041d,
- 0x801c3c00, 0x0401f00c, 0x59a0041a, 0x82000400,
- 0x00000002, 0x4803441a, 0x82000c80, 0x00000014,
- 0x04001003, 0x497b441a, 0x41780000, 0x59a03817,
- 0x801c3c00, 0x80081040, 0x480b4018, 0x581c0200,
- 0x4803c021, 0x581c0401, 0x4803c022, 0x581c0201,
- 0x4803c023, 0x581c0400, 0x4803c020, 0x900001c0,
- 0x82000540, 0x00000012, 0x4803c011, 0x4a03c017,
- 0x00000000, 0x4203e000, 0x30000001, 0x800c19c0,
- 0x04000007, 0x800c1840, 0x480f4019, 0x0402001f,
- 0x497b441a, 0x497b421a, 0x0401f01c, 0x800811c0,
- 0x0402000b, 0x4d2c0000, 0x59a2581c, 0x0201f800,
- 0x00100594, 0x5c025800, 0x497b401c, 0x497b401b,
- 0x497b441d, 0x497b421d, 0x0401f010, 0x59a0041d,
- 0x82000400, 0x00000002, 0x82000c80, 0x00000013,
- 0x4803441d, 0x04001009, 0x4d2c0000, 0x59a2581c,
- 0x592c3814, 0x481f401c, 0x497b441d, 0x0201f800,
- 0x00100594, 0x5c025800, 0x5c03e000, 0x5c034000,
- 0x1c01f000, 0x830c0500, 0x00000003, 0x02020000,
- 0x00104342, 0x59340400, 0x82000580, 0x00000606,
- 0x02020000, 0x00104314, 0x5934000d, 0x80027d40,
- 0x02020000, 0x0010434d, 0x0401f803, 0x80000580,
- 0x1c01f000, 0x5934000f, 0x59341203, 0x80080540,
- 0x0402006b, 0x5934000b, 0x80001120, 0x82000500,
- 0x0000ffff, 0x80080480, 0x04021065, 0x0201f800,
- 0x00020b7b, 0x0400005e, 0x592e4411, 0x81224110,
- 0x83200400, 0x0010c10d, 0x50024800, 0x4926601c,
- 0x592c0407, 0x4936600a, 0x492e6009, 0x4a026407,
- 0x00000003, 0x4a026403, 0x00000040, 0x80081000,
- 0x480a6c0b, 0x800000c2, 0x800010c4, 0x80081400,
- 0x592c0809, 0x592c180a, 0x592c020b, 0x480a6006,
- 0x48066018, 0x480e6019, 0x8c000502, 0x0400002a,
- 0x4a026203, 0x00000004, 0x592c0208, 0x80000040,
- 0x0402001a, 0x59a80071, 0x80000040, 0x040207ff,
- 0x592c0205, 0x82000500, 0x000000ff, 0x82000580,
- 0x00000018, 0x04020011, 0x592c1810, 0x59300008,
- 0x82000540, 0x00000091, 0x480e6012, 0x48026008,
- 0x42000000, 0x80080004, 0x48026004, 0x59bc00ea,
- 0x8c000516, 0x040207fe, 0x83300400, 0x20000000,
- 0x480378e1, 0x1c01f000, 0x0401fe04, 0x59300008,
- 0x8400054e, 0x48026008, 0x592c1a05, 0x820c1d00,
- 0x000000ff, 0x820c0580, 0x00000048, 0x04000018,
- 0x0401f7ec, 0x8c000500, 0x04020e74, 0x4a026203,
- 0x00000002, 0x59a80072, 0x80000040, 0x040207ff,
- 0x592c1a05, 0x820c1d00, 0x000000ff, 0x820c0580,
- 0x00000018, 0x040007df, 0x820c0580, 0x00000048,
- 0x04000007, 0x820c0580, 0x00000068, 0x040207d9,
- 0x42000000, 0x80080084, 0x0401f7d8, 0x42000800,
- 0x80000804, 0x0201f000, 0x00020b30, 0x800811c0,
- 0x04020003, 0x4a026a03, 0x00000001, 0x59340010,
- 0x492e6810, 0x80000d40, 0x04020008, 0x492e680f,
- 0x592c0407, 0x800000c2, 0x800018c4, 0x800c0400,
- 0x48025804, 0x1c01f000, 0x492c0800, 0x0401f7f9,
- 0x83440c80, 0x00000800, 0x04021009, 0x83440400,
- 0x0010c280, 0x50000000, 0x80000540, 0x04000004,
- 0x40026800, 0x80000580, 0x1c01f000, 0x82000540,
- 0x00000001, 0x1c01f000, 0x59340203, 0x80000540,
- 0x04020054, 0x4d300000, 0x4d2c0000, 0x5934000f,
- 0x80025d40, 0x0400004d, 0x0201f800, 0x00020b7b,
- 0x04000048, 0x592c0000, 0x4802680f, 0x80000540,
- 0x04020002, 0x48026810, 0x592c2a05, 0x592e4411,
- 0x81224110, 0x83200400, 0x0010c10d, 0x50024800,
- 0x4926601c, 0x4936600a, 0x82142d00, 0x000000ff,
- 0x82140580, 0x00000012, 0x0400003b, 0x82140580,
- 0x00000072, 0x04000038, 0x492e6009, 0x80081000,
+ 0x42006800, 0x0010d5ee, 0x50346800, 0x59cc7000,
+ 0x42007800, 0x0010d5ef, 0x583c0005, 0x80380580,
+ 0x82000500, 0x00ffffff, 0x04000008, 0x80346840,
+ 0x04000004, 0x823c7c00, 0x0000000b, 0x0401f7f7,
+ 0x82000540, 0x00000001, 0x1c01f000, 0x0401f807,
+ 0x42018800, 0x00000001, 0x04020003, 0x42018800,
+ 0x00000000, 0x1c01f000, 0x59a86a21, 0x8c346d0a,
+ 0x0400000b, 0x8c346d14, 0x04000009, 0x42006800,
+ 0x0010d5ee, 0x50346800, 0x82340480, 0x00000041,
+ 0x04001004, 0x599c0017, 0x8c00050a, 0x1c01f000,
+ 0x80000580, 0x0401f7fe, 0x59a80006, 0x8c000518,
+ 0x04000002, 0x8d0e1d20, 0x1c01f000, 0x00000001,
+ 0x00000002, 0x00000004, 0x00000008, 0x00000010,
+ 0x00000020, 0x00000040, 0x00000080, 0x00000100,
+ 0x00000200, 0x00000400, 0x00000800, 0x00001000,
+ 0x00002000, 0x00004000, 0x00008000, 0x00010000,
+ 0x0010d5ef, 0x0010d5fa, 0x0010d605, 0x0010d610,
+ 0x0010d61b, 0x0010d626, 0x0010d631, 0x0010d63c,
+ 0x0010d647, 0x0010d652, 0x0010d65d, 0x0010d668,
+ 0x0010d673, 0x0010d67e, 0x0010d689, 0x0010d694,
+ 0x0010d69f, 0x0010d6aa, 0x0010d6b5, 0x0010d6c0,
+ 0x0010d6cb, 0x0010d6d6, 0x0010d6e1, 0x0010d6ec,
+ 0x0010d6f7, 0x0010d702, 0x0010d70d, 0x0010d718,
+ 0x0010d723, 0x0010d72e, 0x0010d739, 0x0010d744,
+ 0x0010d74f, 0x0010d75a, 0x0010d765, 0x0010d770,
+ 0x0010d77b, 0x0010d786, 0x0010d791, 0x0010d79c,
+ 0x0010d7a7, 0x0010d7b2, 0x0010d7bd, 0x0010d7c8,
+ 0x0010d7d3, 0x0010d7de, 0x0010d7e9, 0x0010d7f4,
+ 0x0010d7ff, 0x0010d80a, 0x0010d815, 0x0010d820,
+ 0x0010d82b, 0x0010d836, 0x0010d841, 0x0010d84c,
+ 0x0010d857, 0x0010d862, 0x0010d86d, 0x0010d878,
+ 0x0010d883, 0x0010d88e, 0x0010d899, 0x0010d8a4,
+ 0x0010d8af, 0x0010d8ba, 0x0010d8c5, 0x0010d8d0,
+ 0x0010d8db, 0x0010d8e6, 0x0010d8f1, 0x0010d8fc,
+ 0x0010d907, 0x0010d912, 0x0010d91d, 0x0010d928,
+ 0x0010d933, 0x0010d93e, 0x0010d949, 0x0010d954,
+ 0x0010d95f, 0x0010d96a, 0x0010d975, 0x0010d980,
+ 0x0010d98b, 0x0010d996, 0x0010d9a1, 0x0010d9ac,
+ 0x0010d9b7, 0x0010d9c2, 0x0010d9cd, 0x0010d9d8,
+ 0x0010d9e3, 0x0010d9ee, 0x0010d9f9, 0x0010da04,
+ 0x0010da0f, 0x0010da1a, 0x0010da25, 0x0010da30,
+ 0x0010da3b, 0x0010da46, 0x0010da51, 0x0010da5c,
+ 0x0010da67, 0x0010da72, 0x0010da7d, 0x0010da88,
+ 0x0010da93, 0x0010da9e, 0x0010daa9, 0x0010dab4,
+ 0x0010dabf, 0x0010daca, 0x0010dad5, 0x0010dae0,
+ 0x0010daeb, 0x0010daf6, 0x0010db01, 0x0010db0c,
+ 0x0010db17, 0x0010db22, 0x0010db2d, 0x0010db38,
+ 0x0010db43, 0x0010db4e, 0x0010db59, 0x0010db64,
+ 0x4a03507f, 0x0000001c, 0x4a035080, 0x00000013,
+ 0x4a035081, 0x00000001, 0x4a035082, 0x00000000,
+ 0x59e00002, 0x8c00051e, 0x42000000, 0x7ffe00fe,
+ 0x04000003, 0x42000000, 0x7ffe01fe, 0x50000800,
+ 0x4807504d, 0x80040920, 0x82040580, 0x0000013e,
+ 0x0402000b, 0x59a8007e, 0x84000548, 0x4803507e,
+ 0x4a03507f, 0x0000005a, 0x4a035080, 0x00000058,
+ 0x4a035082, 0x0000000f, 0x0401f045, 0x82040580,
+ 0x0000013f, 0x0400000a, 0x82040580, 0x0000014e,
+ 0x04000007, 0x82040580, 0x00000155, 0x04000004,
+ 0x82040580, 0x00000156, 0x0402000b, 0x59a8007e,
+ 0x8400054a, 0x4803507e, 0x4a03507f, 0x00000055,
+ 0x4a035080, 0x00000052, 0x4a035082, 0x00000009,
+ 0x0401f02f, 0x59e00003, 0x82000500, 0x00030000,
+ 0x82000580, 0x00000000, 0x04020029, 0x82040580,
+ 0x00000147, 0x04000019, 0x82040580, 0x0000012c,
+ 0x04000016, 0x82040580, 0x0000012a, 0x04000007,
+ 0x82040580, 0x0000012b, 0x04000004, 0x82040580,
+ 0x00000145, 0x0402001a, 0x59a8007e, 0x84000546,
+ 0x4803507e, 0x4a03507f, 0x0000003d, 0x4a035080,
+ 0x00000038, 0x4a035081, 0x0000001e, 0x4a035082,
+ 0x00000001, 0x0401f00c, 0x59a8007e, 0x84000544,
+ 0x4803507e, 0x4a03507f, 0x0000003d, 0x4a035080,
+ 0x00000038, 0x4a035081, 0x0000001e, 0x4a035082,
+ 0x00000001, 0x4a0378e4, 0x000c0000, 0x59a8007e,
+ 0x8c000502, 0x04000005, 0x82000500, 0x00000030,
+ 0x02000800, 0x0010032f, 0x1c01f000, 0x48607130,
+ 0x00000000, 0x00000000, 0x00112000, 0x000036f4,
+ 0x00000000, 0x00000000, 0x00020000, 0x00000c50,
+ 0x836c0580, 0x00000003, 0x02020000, 0x001002be,
+ 0x42000000, 0x0010d12d, 0x50000000, 0x800001c0,
+ 0x04020a60, 0x0401fa0d, 0x0201f800, 0x000205e3,
+ 0x0201f800, 0x0002041d, 0x0201f800, 0x00020a85,
+ 0x0201f800, 0x000208e0, 0x0401f7ee, 0x42007000,
+ 0x00020c51, 0x58380004, 0x49781000, 0x4a001002,
+ 0x00000000, 0x48087004, 0x80000d40, 0x04020006,
+ 0x48087005, 0x58380000, 0x80000540, 0x0400000a,
+ 0x1c01f000, 0x48080800, 0x0401f7fb, 0x42007000,
+ 0x00020c51, 0x58380000, 0x80000540, 0x04000002,
+ 0x1c01f000, 0x58380807, 0x800409c0, 0x02020000,
+ 0x00100616, 0x58380005, 0x80006d40, 0x04020002,
+ 0x1c01f000, 0x58340000, 0x48347001, 0x80000540,
+ 0x04020002, 0x48007004, 0x48007005, 0x4a03b805,
+ 0x30000002, 0x58340006, 0x59dc0806, 0x4803b800,
+ 0x58340007, 0x4803b801, 0x58340805, 0x58341003,
+ 0x58340001, 0x48047002, 0x48087003, 0x480bb803,
+ 0x8c000500, 0x04020004, 0x4a007000, 0x00000002,
+ 0x0401f005, 0x4a007000, 0x00000001, 0x0201f000,
+ 0x0010064a, 0x58380802, 0x42001000, 0x0000ff00,
+ 0x82040480, 0x0000ff00, 0x04021003, 0x40041000,
+ 0x80000580, 0x48007002, 0x480bb802, 0x4a03b805,
+ 0x10000002, 0x1c01f000, 0x59dc0806, 0x4a03b805,
+ 0x20000000, 0x8c040d3e, 0x0400000c, 0x8c040d08,
+ 0x02020800, 0x0010032f, 0x42007000, 0x00020c51,
+ 0x58380000, 0x82001480, 0x00000004, 0x0c001004,
+ 0x0201f800, 0x0010032f, 0x1c01f000, 0x0002002d,
+ 0x00020073, 0x0002007c, 0x0010109d, 0x82040d00,
+ 0x43000f80, 0x02020000, 0x00100658, 0x58380002,
+ 0x80000540, 0x0400000a, 0x0201f000, 0x0010064a,
+ 0x82040d00, 0x43000f80, 0x02020000, 0x00100658,
+ 0x58380002, 0x80000540, 0x040207cf, 0x58386001,
+ 0x58300008, 0x4a006002, 0x00000100, 0x4a007000,
+ 0x00000000, 0x80001540, 0x040007a3, 0x58300006,
+ 0x58300805, 0x80040400, 0x58300807, 0x48006006,
+ 0x82040c40, 0x00000000, 0x48046007, 0x4030d000,
+ 0x0809f800, 0x0401f792, 0x59b800ea, 0x82000d00,
+ 0xf0000038, 0x02020000, 0x00100799, 0x8c000510,
+ 0x02000000, 0x00100798, 0x59ba60e0, 0x81300182,
+ 0x0402104b, 0x04002031, 0x8532653e, 0x59300407,
+ 0x82000580, 0x00000003, 0x04020029, 0x59300203,
+ 0x82000580, 0x00000004, 0x04020025, 0x59325809,
+ 0x59300004, 0x4a025a05, 0x00000103, 0x497a580a,
+ 0x8c00053e, 0x04020016, 0x59300008, 0x82000500,
+ 0x04000800, 0x82000580, 0x04000800, 0x04000015,
+ 0x0401fb49, 0x5932680a, 0x0201f800, 0x00020afe,
+ 0x5934000f, 0x5934140b, 0x80081040, 0x04001002,
+ 0x480a6c0b, 0x80000540, 0x04020a9f, 0x59b800ea,
+ 0x8c000510, 0x040207d9, 0x1c01f000, 0x0201f800,
+ 0x00107595, 0x040007e9, 0x0201f000, 0x0010078e,
+ 0x59300220, 0x48025c10, 0x0401f7ea, 0x42027000,
+ 0x00000055, 0x0401f022, 0x83326500, 0x3fffffff,
+ 0x59300407, 0x82000580, 0x00000003, 0x04020011,
+ 0x59325809, 0x5932680a, 0x4a025a05, 0x00000103,
+ 0x497a580a, 0x0401fb24, 0x0201f800, 0x00020afe,
+ 0x5934000f, 0x5934140b, 0x80081040, 0x04001002,
+ 0x480a6c0b, 0x80000540, 0x04020a7b, 0x0401f7dc,
+ 0x42027000, 0x00000054, 0x0401f009, 0x83300500,
+ 0x60000000, 0x0400001a, 0x81326580, 0x8000013a,
+ 0x82000400, 0x0010079f, 0x50027000, 0x59300c07,
+ 0x82040580, 0x00000000, 0x02000000, 0x0010078e,
+ 0x82040580, 0x00000002, 0x02000000, 0x0010078e,
+ 0x59300004, 0x8c00053e, 0x04020004, 0x0201f800,
+ 0x00020b22, 0x0401f7c2, 0x0201f800, 0x00107595,
+ 0x040007fb, 0x0201f000, 0x0010078e, 0x83300500,
+ 0x1f000000, 0x02000000, 0x00100791, 0x81326580,
+ 0x80000130, 0x82000c80, 0x00000014, 0x02021800,
+ 0x0010032f, 0x1201f000, 0x001007a3, 0x82000500,
+ 0xf0000000, 0x82040d00, 0x0fffffff, 0x80040d40,
+ 0x4807c857, 0x59b800ea, 0x8c000516, 0x02020000,
+ 0x001008c0, 0x480770e1, 0x1c01f000, 0x59325809,
+ 0x412c7000, 0x58380a05, 0x82040d00, 0x000000ff,
+ 0x82040580, 0x00000068, 0x02000000, 0x00100bae,
+ 0x82040580, 0x00000072, 0x02000000, 0x00100bcb,
+ 0x58380a05, 0x82040500, 0x0000000f, 0x82000c00,
+ 0x00100f3c, 0x50044000, 0x0c01f001, 0x00100b97,
+ 0x00100b97, 0x00020143, 0x00100b97, 0x00100b97,
+ 0x00100b97, 0x00100b97, 0x00100b97, 0x00020153,
+ 0x00100be4, 0x00100b97, 0x00100b99, 0x00100bd2,
+ 0x00100b97, 0x00100b97, 0x00100b97, 0x5838040b,
+ 0x8c000500, 0x02000800, 0x0010032f, 0x50200000,
+ 0x80387c00, 0x583c1002, 0x583c2800, 0x583c2001,
+ 0x58380a08, 0x58383010, 0x59303808, 0x58384c09,
+ 0x5838000e, 0x48026013, 0x0401f010, 0x5838020b,
+ 0x8c000502, 0x02000000, 0x00100b97, 0x50200000,
+ 0x80387c00, 0x583c2800, 0x583c2001, 0x583c1002,
+ 0x592c0a08, 0x592c4c09, 0x592c3010, 0x59303808,
+ 0x497a6013, 0x497a6014, 0x4816600f, 0x48126010,
+ 0x480a6011, 0x481a6012, 0x80040840, 0x4806600e,
+ 0x02020000, 0x00100c11, 0x841c3d40, 0x481e6008,
+ 0x1c01f000, 0x4d2c0000, 0x59325809, 0x592c0a05,
+ 0x4807c857, 0x82040d00, 0x000000ff, 0x82040500,
+ 0x0000000f, 0x1201f000, 0x00100d6d, 0x41787800,
+ 0x59325809, 0x592c0c0b, 0x8c040d02, 0x02000000,
+ 0x00100dae, 0x592c000e, 0x592c1010, 0x592c0a05,
+ 0x480a6012, 0x48026013, 0x48026014, 0x82040d00,
+ 0x000000ff, 0x82040580, 0x00000072, 0x02000000,
+ 0x00100db5, 0x412c3000, 0x82040500, 0x0000000f,
+ 0x82000400, 0x00100f3c, 0x50003800, 0x8c3c7d0e,
+ 0x04000002, 0x801c3800, 0x501c0000, 0x592c1a08,
+ 0x4802600b, 0x481a600c, 0x481e600d, 0x480e600e,
+ 0x843c7d4a, 0x403c1000, 0x1c01f000, 0x592c0a05,
+ 0x497a6013, 0x41787800, 0x82040d00, 0x000000ff,
+ 0x82040580, 0x00000068, 0x02000000, 0x00100db9,
+ 0x412c3000, 0x592c1a08, 0x82040500, 0x0000000f,
+ 0x82000400, 0x00100f3c, 0x50004000, 0x8c3c7d0e,
+ 0x04000002, 0x80204000, 0x50200000, 0x4802600b,
+ 0x481a600c, 0x4822600d, 0x480e600e, 0x483e6004,
+ 0x80000580, 0x1c01f000, 0x59e00004, 0x8c00050e,
+ 0x040206a6, 0x1c01f000, 0x0002020d, 0x000201fa,
+ 0x000201fa, 0x000201fa, 0x000201fa, 0x000201fa,
+ 0x000201fa, 0x000201fa, 0x000201fa, 0x000201fa,
+ 0x000201fa, 0x000201fa, 0x000201fa, 0x000201fa,
+ 0x000201fa, 0x000201fa, 0x000201fa, 0x000201fa,
+ 0x000201fa, 0x000201fa, 0x000201fa, 0x000201fa,
+ 0x000201fa, 0x000201fa, 0x000201fa, 0x000201fa,
+ 0x000201fa, 0x000201fa, 0x000201fa, 0x000201fa,
+ 0x000201fa, 0x000201fa, 0x000201fa, 0x000201fa,
+ 0x000201fa, 0x000201fa, 0x000201fa, 0x000201fa,
+ 0x000201fa, 0x000201fa, 0x000201fa, 0x000201fa,
+ 0x000201fa, 0x000201fa, 0x000201fa, 0x000201fa,
+ 0x000201fa, 0x000201fa, 0x000201fa, 0x000201fa,
+ 0x000201fa, 0x000201fa, 0x000201fa, 0x000201fa,
+ 0x000201fa, 0x000201fa, 0x000201fa, 0x000201fa,
+ 0x000201fa, 0x000201fa, 0x000201fa, 0x000201fa,
+ 0x000201fa, 0x000201fa, 0x4c000000, 0x4df00000,
+ 0x4203e000, 0xb0100000, 0x41f00000, 0x81fe1500,
+ 0x8d0a1512, 0x02020800, 0x0010140a, 0x8d0a1518,
+ 0x02020800, 0x00020aab, 0x8d0a151a, 0x04020e8f,
+ 0x83080500, 0x00000d00, 0x04020804, 0x5c03e000,
+ 0x5c000000, 0x1801f000, 0x8d0a1516, 0x02020800,
+ 0x0010125d, 0x8d0a1514, 0x04020fa4, 0x8d0a1508,
+ 0x02020800, 0x00100fff, 0x8d0a1500, 0x02020000,
+ 0x000209db, 0x1c01f000, 0x42000000, 0x0010d133,
+ 0x50000000, 0x8c000504, 0x04000011, 0x8c000502,
+ 0x04020002, 0x1c01f000, 0x4df00000, 0x4203e000,
+ 0x50000000, 0x42034000, 0x0010d115, 0x59a0001e,
+ 0x59a1d806, 0x84000502, 0x4803401e, 0x58ec0008,
+ 0x0801f800, 0x5c03e000, 0x1c01f000, 0x04027002,
+ 0x04026002, 0x1c01f000, 0x4df00000, 0x4203e000,
+ 0x50000000, 0x59e00020, 0x82000d80, 0x00000045,
+ 0x04000004, 0x82000d80, 0x00000044, 0x04020008,
+ 0x4803c857, 0x42000800, 0x00020c51, 0x58040800,
+ 0x82040d80, 0x00000000, 0x0402001d, 0x0201f800,
+ 0x00100599, 0x0400001a, 0x412dd800, 0x48efc857,
+ 0x0201f800, 0x00103b46, 0x42034000, 0x0010d115,
+ 0x49a1d80a, 0x48ef4006, 0x59a0001e, 0x84000544,
+ 0x4803401e, 0x59e00020, 0x4803c857, 0x59e00021,
+ 0x4803c857, 0x59e00022, 0x4803c857, 0x59e00023,
+ 0x4803c857, 0x59e00024, 0x4803c857, 0x0201f800,
+ 0x001022ac, 0x0201f800, 0x001022cb, 0x5c03e000,
+ 0x1c01f000, 0x0201f800, 0x0010c62d, 0x040007fe,
+ 0x4203e000, 0x30000001, 0x4203e000, 0x40000000,
+ 0x42000800, 0x00007a12, 0x45780800, 0x0401f7ff,
+ 0x4da00000, 0x4df00000, 0x4203e000, 0x50000000,
+ 0x04006050, 0x42034000, 0x0010d115, 0x59a01018,
+ 0x59a01819, 0x800c19c0, 0x0402000a, 0x59a0381c,
+ 0x801c39c0, 0x02000800, 0x0010032f, 0x49a3c857,
+ 0x481fc857, 0x59a0041d, 0x801c3c00, 0x0401f00c,
+ 0x59a0041a, 0x82000400, 0x00000002, 0x4803441a,
+ 0x82000c80, 0x00000014, 0x04001003, 0x497b441a,
+ 0x41780000, 0x59a03817, 0x801c3c00, 0x80081040,
+ 0x480b4018, 0x581c0200, 0x4803c021, 0x581c0401,
+ 0x4803c022, 0x581c0201, 0x4803c023, 0x581c0400,
+ 0x4803c020, 0x900001c0, 0x82000540, 0x00000012,
+ 0x4803c011, 0x4a03c017, 0x00000000, 0x4203e000,
+ 0x30000001, 0x800c19c0, 0x04000007, 0x800c1840,
+ 0x480f4019, 0x0402001f, 0x497b441a, 0x497b421a,
+ 0x0401f01c, 0x800811c0, 0x0402000b, 0x4d2c0000,
+ 0x59a2581c, 0x0201f800, 0x001005aa, 0x5c025800,
+ 0x497b401c, 0x497b401b, 0x497b441d, 0x497b421d,
+ 0x0401f010, 0x59a0041d, 0x82000400, 0x00000002,
+ 0x82000c80, 0x00000013, 0x4803441d, 0x04001009,
+ 0x4d2c0000, 0x59a2581c, 0x592c3814, 0x481f401c,
+ 0x497b441d, 0x0201f800, 0x001005aa, 0x5c025800,
+ 0x5c03e000, 0x5c034000, 0x1c01f000, 0x8d0e1d20,
+ 0x04000003, 0x59a80005, 0x8c000516, 0x1c01f000,
+ 0x830c0500, 0x00000003, 0x02020000, 0x00104453,
+ 0x59340400, 0x82000580, 0x00000606, 0x02020000,
+ 0x00104425, 0x5934000d, 0x80027d40, 0x02020000,
+ 0x0010445e, 0x0401f803, 0x80000580, 0x1c01f000,
+ 0x5934000f, 0x59341203, 0x80080540, 0x0402006b,
+ 0x5934000b, 0x80001120, 0x82000500, 0x0000ffff,
+ 0x80080480, 0x04021065, 0x0201f800, 0x00020adc,
+ 0x0400005e, 0x592e4411, 0x81224110, 0x83200400,
+ 0x0010c6ac, 0x50024800, 0x4926601c, 0x592c0407,
+ 0x4936600a, 0x492e6009, 0x4a026407, 0x00000003,
+ 0x4a026403, 0x00000040, 0x80081000, 0x480a6c0b,
+ 0x800000c2, 0x800010c4, 0x80081400, 0x592c0809,
+ 0x592c180a, 0x592c020b, 0x480a6006, 0x48066018,
+ 0x480e6019, 0x8c000502, 0x0400002a, 0x4a026203,
+ 0x00000004, 0x592c0208, 0x80000040, 0x0402001a,
+ 0x59a8007f, 0x80000040, 0x040207ff, 0x592c0205,
+ 0x82000500, 0x000000ff, 0x82000580, 0x00000018,
+ 0x04020011, 0x592c1810, 0x59300008, 0x82000540,
+ 0x00000091, 0x480e6012, 0x48026008, 0x42000000,
+ 0x80080004, 0x48026004, 0x59bc00ea, 0x8c000516,
+ 0x040207fe, 0x83300400, 0x20000000, 0x480378e1,
+ 0x1c01f000, 0x0401fe02, 0x59300008, 0x8400054e,
+ 0x48026008, 0x592c1a05, 0x820c1d00, 0x000000ff,
+ 0x820c0580, 0x00000048, 0x04000018, 0x0401f7ec,
+ 0x8c000500, 0x04020e72, 0x4a026203, 0x00000002,
+ 0x59a80080, 0x80000040, 0x040207ff, 0x592c1a05,
+ 0x820c1d00, 0x000000ff, 0x820c0580, 0x00000018,
+ 0x040007df, 0x820c0580, 0x00000048, 0x04000007,
+ 0x820c0580, 0x00000068, 0x040207d9, 0x42000000,
+ 0x80080084, 0x0401f7d8, 0x42000800, 0x80000804,
+ 0x0201f000, 0x00020a8e, 0x800811c0, 0x04020003,
+ 0x4a026a03, 0x00000001, 0x59340010, 0x492e6810,
+ 0x80000d40, 0x04020008, 0x492e680f, 0x592c0407,
+ 0x800000c2, 0x800018c4, 0x800c0400, 0x48025804,
+ 0x1c01f000, 0x492c0800, 0x0401f7f9, 0x83440c80,
+ 0x00000800, 0x04021009, 0x83440400, 0x0010c880,
+ 0x50000000, 0x80000540, 0x04000004, 0x40026800,
+ 0x80000580, 0x1c01f000, 0x82000540, 0x00000001,
+ 0x1c01f000, 0x59340203, 0x80000540, 0x0402005f,
+ 0x4d300000, 0x4d2c0000, 0x5934000f, 0x80025d40,
+ 0x04000058, 0x0201f800, 0x00020adc, 0x04000045,
+ 0x592c0000, 0x4802680f, 0x80000540, 0x04020002,
+ 0x48026810, 0x592c2a05, 0x592e4411, 0x81224110,
+ 0x83200400, 0x0010c6ac, 0x50024800, 0x4926601c,
+ 0x4936600a, 0x4c080000, 0x0201f800, 0x00104f27,
+ 0x5c001000, 0x04000046, 0x492e6009, 0x80081000,
0x480a6c0b, 0x4a026407, 0x00000003, 0x4a026403,
0x00000040, 0x592c0004, 0x497a5804, 0x48026006,
0x592c0809, 0x592c180a, 0x592c020b, 0x48066018,
- 0x480e6019, 0x8c000502, 0x02000000, 0x00104816,
+ 0x480e6019, 0x8c000502, 0x02000000, 0x0010496c,
0x4a026203, 0x00000004, 0x592c0208, 0x80000040,
- 0x02020000, 0x00104809, 0x82140580, 0x00000018,
- 0x02020000, 0x00104809, 0x592c1810, 0x59300008,
+ 0x02020000, 0x0010495f, 0x82140580, 0x00000018,
+ 0x02020000, 0x0010495f, 0x592c1810, 0x59300008,
0x82000540, 0x00000091, 0x480e6012, 0x48026008,
0x42000000, 0x80080004, 0x48026004, 0x59bc00ea,
0x8c000516, 0x040207fe, 0x83300400, 0x20000000,
0x480378e1, 0x5934000b, 0x80001120, 0x82000500,
- 0x0000ffff, 0x80080480, 0x040017b5, 0x0401f003,
- 0x4a026a03, 0x00000001, 0x5c025800, 0x5c026000,
- 0x1c01f000, 0x497a5800, 0x4932580a, 0x4a026407,
- 0x00000006, 0x4a026203, 0x00000007, 0x0401f802,
- 0x0401f7ed, 0x592e4408, 0x83224500, 0x000000ff,
- 0x83200400, 0x0010c10d, 0x50024800, 0x4926601c,
- 0x592c020d, 0x48026202, 0x59240206, 0x8c000510,
- 0x02020000, 0x00104843, 0x8d0e1d0e, 0x02020000,
- 0x0010483f, 0x59240200, 0x8c000516, 0x02020000,
- 0x0010483b, 0x59340200, 0x8c000518, 0x02020000,
- 0x00104837, 0x4a025a07, 0x00000000, 0x8c000508,
- 0x02020000, 0x00104833, 0x492e6009, 0x4d3c0000,
- 0x417a7800, 0x0201f800, 0x00020a86, 0x5c027800,
- 0x1c01f000, 0x58040001, 0x49680800, 0x49780801,
- 0x815eb800, 0x4006d000, 0x80000d40, 0x040207fa,
- 0x497a5801, 0x59c80000, 0x82000540, 0x00001200,
- 0x48039000, 0x1c01f000, 0x59980013, 0x48032823,
- 0x59d8010b, 0x48033014, 0x1c01f000, 0x592c0405,
- 0x8c00051e, 0x02020000, 0x00104e02, 0x497a5800,
- 0x8d0e1d26, 0x0402000e, 0x0402d007, 0x592c0001,
- 0x492fb107, 0x80000d40, 0x04020fe3, 0x0400e0cd,
- 0x1c01f000, 0x0400e8cb, 0x0400d7f9, 0x42000000,
- 0x0010ce7c, 0x0201f800, 0x0010bfb6, 0x0401f916,
- 0x0400d921, 0x0400e0c3, 0x59d80105, 0x82000d00,
- 0x00018780, 0x04020130, 0x1c01f000, 0x59980011,
- 0x0c01f001, 0x00020411, 0x00020412, 0x0002041d,
- 0x00020455, 0x1c01f000, 0x4df00000, 0x4203e000,
- 0x50000000, 0x0402692f, 0x04006003, 0x8d0e1d20,
- 0x0402099a, 0x8d0e1d26, 0x0402090b, 0x5c03e000,
- 0x1c01f000, 0x4df00000, 0x4203e000, 0x50000000,
- 0x59940023, 0x80000540, 0x04002013, 0x04000008,
- 0x59980012, 0x82000580, 0x00000005, 0x0400000e,
- 0x59a80050, 0x81640580, 0x0402000b, 0x59d8010b,
- 0x59d8110a, 0x80080d80, 0x0400001f, 0x59980814,
- 0x80040d80, 0x04000013, 0x59980813, 0x48072823,
- 0x48033014, 0x0400e947, 0x8d0e1d24, 0x04020005,
- 0x8d0e1d26, 0x040208ec, 0x5c03e000, 0x1c01f000,
- 0x59d8110a, 0x59d8010a, 0x80080580, 0x040207fd,
- 0x59d8010b, 0x80080580, 0x0400000b, 0x040067f5,
- 0x0400600e, 0x800810e0, 0x82081540, 0x00000013,
- 0x480bc011, 0x4a03c017, 0x00000001, 0x4203e000,
- 0x30000001, 0x4a032823, 0xffff0000, 0x850e1d24,
- 0x0400e92c, 0x0401f7e7, 0x850e1d64, 0x0400e929,
- 0x0401f7e4, 0x4df00000, 0x4203e000, 0x50000000,
- 0x59b800e4, 0x8c000518, 0x0402001c, 0x830c0500,
- 0x00140000, 0x0402001c, 0x59940023, 0x80000540,
- 0x0400200d, 0x04000018, 0x59980012, 0x82000580,
- 0x00000005, 0x04000008, 0x59a80050, 0x81640580,
- 0x04020005, 0x59a8004e, 0x59a8084d, 0x80040580,
- 0x0400000c, 0x0400e90f, 0x04006004, 0x8d0e1d24,
- 0x0402000a, 0x0401f923, 0x8d0e1d26, 0x040208b2,
- 0x5c03e000, 0x1c01f000, 0x4a0370e4, 0x00002000,
- 0x850e1d68, 0x04006041, 0x59d8090a, 0x59d8010a,
- 0x80041580, 0x040207fd, 0x59d8190b, 0x800c1580,
- 0x59981014, 0x480f3014, 0x0400002a, 0x0401f839,
- 0x59980015, 0x483b3015, 0x0400000d, 0x8d0e1d28,
- 0x0402001e, 0x80380580, 0x04020004, 0x40080000,
- 0x800c0580, 0x04000019, 0x59980013, 0x48032823,
- 0x830e1d00, 0xffebffff, 0x0401f7e0, 0x8d0e1d28,
- 0x04020004, 0x40080000, 0x800c0580, 0x040207f7,
- 0x800408e0, 0x82040d40, 0x00000013, 0x42001000,
- 0x00000001, 0x4807c011, 0x480bc017, 0x4203e000,
- 0x30000001, 0x4a032823, 0xffff0000, 0x830e1d00,
- 0xffebffff, 0x0401f7cd, 0x800408e0, 0x82040d40,
- 0x0000001d, 0x42001000, 0x00000000, 0x0401f7f2,
- 0x0401f810, 0x59980015, 0x483b3015, 0x040007f2,
- 0x80380580, 0x04000003, 0x8d0e1d28, 0x040007db,
- 0x912801c0, 0x82000d40, 0x0000001c, 0x42001000,
- 0x00000000, 0x0401f7e4, 0x850e1d64, 0x0401f7b2,
- 0x59e0000f, 0x59e0680f, 0x80346d80, 0x040207fd,
- 0x40025000, 0x59e00010, 0x59e07010, 0x80387580,
- 0x040207fd, 0x40007000, 0x81280580, 0x1c01f000,
- 0x59d81108, 0x835c0480, 0x00000020, 0x0400100f,
- 0x0402b00d, 0x480bb007, 0x0400e7fa, 0x59d80105,
- 0x82000500, 0x00018780, 0x04020067, 0x8d0e1d22,
- 0x04000012, 0x59940023, 0x80000540, 0x04002713,
- 0x1c01f000, 0x0400f00a, 0x49681000, 0x400ad000,
- 0x815eb800, 0x59c80000, 0x82000540, 0x00001200,
- 0x48039000, 0x0402e7ee, 0x0401f7e6, 0x480ba807,
- 0x0402e7eb, 0x0401f7e3, 0x04006014, 0x850e1d24,
- 0x59d8010a, 0x59d8090a, 0x80040580, 0x040207fd,
- 0x59d8010b, 0x80040580, 0x0400000b, 0x800408e0,
- 0x8d0e1d20, 0x0402000b, 0x82040d40, 0x00000013,
- 0x4807c011, 0x4a03c017, 0x00000001, 0x4203e000,
- 0x30000001, 0x1c01f000, 0x850e1d64, 0x1c01f000,
+ 0x0000ffff, 0x80080480, 0x040017b8, 0x0401f011,
+ 0x4c080000, 0x0201f800, 0x00104f27, 0x0402000a,
+ 0x42000000, 0x0010d52e, 0x0201f800, 0x0010c50a,
+ 0x0201f800, 0x0010a944, 0x04000003, 0x5c001000,
+ 0x0401f7b0, 0x5c001000, 0x4a026a03, 0x00000001,
+ 0x5c025800, 0x5c026000, 0x1c01f000, 0x497a5800,
+ 0x4932580a, 0x4a026007, 0x00068000, 0x4a026203,
+ 0x00000007, 0x0401f802, 0x0401f7df, 0x592e4408,
+ 0x83224500, 0x000000ff, 0x83200400, 0x0010c6ac,
+ 0x50024800, 0x4926601c, 0x592c020d, 0x48026202,
+ 0x59240206, 0x8c000510, 0x02020000, 0x00104999,
+ 0x8d0e1d0e, 0x02020000, 0x00104995, 0x59240200,
+ 0x8c000516, 0x02020000, 0x00104991, 0x59340200,
+ 0x8c000518, 0x02020000, 0x0010498d, 0x4a025a07,
+ 0x00000000, 0x8c000508, 0x02020000, 0x00104989,
+ 0x492e6009, 0x4d3c0000, 0x417a7800, 0x0201f800,
+ 0x000209e1, 0x5c027800, 0x1c01f000, 0x58040001,
+ 0x49680800, 0x49780801, 0x815eb800, 0x4006d000,
+ 0x80000d40, 0x040207fa, 0x497a5801, 0x59c80000,
+ 0x82000540, 0x00001200, 0x48039000, 0x1c01f000,
+ 0x59980013, 0x48032823, 0x59d8010b, 0x48033014,
+ 0x1c01f000, 0x592c0405, 0x8c00051e, 0x02020000,
+ 0x00104f7a, 0x497a5800, 0x8d0e1d26, 0x0402000e,
+ 0x0402d007, 0x592c0001, 0x492fb107, 0x80000d40,
+ 0x04020fe3, 0x0400e0cd, 0x1c01f000, 0x0400e8cb,
+ 0x0400d7f9, 0x42000000, 0x0010d492, 0x0201f800,
+ 0x0010c50d, 0x0401f919, 0x0400d924, 0x0400e0c3,
+ 0x59d80105, 0x82000d00, 0x00018780, 0x04020133,
+ 0x1c01f000, 0x59980011, 0x0c01f001, 0x00020423,
+ 0x00020424, 0x0002042f, 0x00020467, 0x1c01f000,
+ 0x4df00000, 0x4203e000, 0x50000000, 0x04026932,
+ 0x04006003, 0x8d0e1d20, 0x0402099d, 0x8d0e1d26,
+ 0x0402090e, 0x5c03e000, 0x1c01f000, 0x4df00000,
+ 0x4203e000, 0x50000000, 0x59940023, 0x80000540,
+ 0x04002013, 0x04000008, 0x59980012, 0x82000580,
+ 0x00000005, 0x0400000e, 0x59a80056, 0x81640580,
+ 0x0402000b, 0x59d8010b, 0x59d8110a, 0x80080d80,
+ 0x0400001f, 0x59980814, 0x80040d80, 0x04000013,
+ 0x59980813, 0x48072823, 0x48033014, 0x0400e94a,
+ 0x8d0e1d24, 0x04020005, 0x8d0e1d26, 0x040208ef,
+ 0x5c03e000, 0x1c01f000, 0x59d8110a, 0x59d8010a,
+ 0x80080580, 0x040207fd, 0x59d8010b, 0x80080580,
+ 0x0400000b, 0x040067f5, 0x0400600e, 0x800810e0,
+ 0x82081540, 0x00000013, 0x480bc011, 0x4a03c017,
+ 0x00000001, 0x4203e000, 0x30000001, 0x4a032823,
+ 0xffff0000, 0x850e1d24, 0x0400e92f, 0x0401f7e7,
+ 0x850e1d64, 0x0400e92c, 0x0401f7e4, 0x4df00000,
+ 0x4203e000, 0x50000000, 0x59b800e4, 0x8c000518,
+ 0x0402001c, 0x830c0500, 0x00140000, 0x0402001c,
+ 0x59940023, 0x80000540, 0x0400200d, 0x04000018,
+ 0x59980012, 0x82000580, 0x00000005, 0x04000008,
+ 0x59a80056, 0x81640580, 0x04020005, 0x59a80054,
+ 0x59a80853, 0x80040580, 0x0400000c, 0x0400e912,
+ 0x04006004, 0x8d0e1d24, 0x0402000a, 0x0401f926,
+ 0x8d0e1d26, 0x040208b5, 0x5c03e000, 0x1c01f000,
+ 0x4a0370e4, 0x00002000, 0x850e1d68, 0x04006041,
+ 0x59d8090a, 0x59d8010a, 0x80041580, 0x040207fd,
+ 0x59d8190b, 0x800c1580, 0x59981014, 0x480f3014,
+ 0x0400002a, 0x0401f839, 0x59980015, 0x483b3015,
+ 0x0400000d, 0x8d0e1d28, 0x0402001e, 0x80380580,
+ 0x04020004, 0x40080000, 0x800c0580, 0x04000019,
+ 0x59980013, 0x48032823, 0x830e1d00, 0xffebffff,
+ 0x0401f7e0, 0x8d0e1d28, 0x04020004, 0x40080000,
+ 0x800c0580, 0x040207f7, 0x800408e0, 0x82040d40,
+ 0x00000013, 0x42001000, 0x00000001, 0x4807c011,
+ 0x480bc017, 0x4203e000, 0x30000001, 0x4a032823,
+ 0xffff0000, 0x830e1d00, 0xffebffff, 0x0401f7cd,
+ 0x800408e0, 0x82040d40, 0x0000001d, 0x42001000,
+ 0x00000000, 0x0401f7f2, 0x0401f810, 0x59980015,
+ 0x483b3015, 0x040007f2, 0x80380580, 0x04000003,
+ 0x8d0e1d28, 0x040007db, 0x912801c0, 0x82000d40,
+ 0x0000001c, 0x42001000, 0x00000000, 0x0401f7e4,
+ 0x850e1d64, 0x0401f7b2, 0x59e0000f, 0x59e0680f,
+ 0x80346d80, 0x040207fd, 0x40025000, 0x59e00010,
+ 0x59e07010, 0x80387580, 0x040207fd, 0x40007000,
+ 0x81280580, 0x1c01f000, 0x59d81108, 0x835c0480,
+ 0x00000104, 0x0400100f, 0x0402b00d, 0x480bb007,
+ 0x0400e7fa, 0x59d80105, 0x82000500, 0x00018780,
+ 0x0402006a, 0x8d0e1d22, 0x04000012, 0x59940023,
+ 0x80000540, 0x04002713, 0x1c01f000, 0x0400f00a,
+ 0x49681000, 0x400ad000, 0x815eb800, 0x59c80000,
+ 0x82000540, 0x00001200, 0x48039000, 0x0402e7ee,
+ 0x0401f7e6, 0x480ba807, 0x0402e7eb, 0x0401f7e3,
+ 0x04006017, 0x850e1d24, 0x59d8010a, 0x59d8090a,
+ 0x80040580, 0x040207fd, 0x59d8010b, 0x59d8110b,
+ 0x80081580, 0x040207fd, 0x80040580, 0x0400000b,
+ 0x800408e0, 0x8d0e1d20, 0x0402000b, 0x82040d40,
+ 0x00000013, 0x4807c011, 0x4a03c017, 0x00000001,
+ 0x4203e000, 0x30000001, 0x1c01f000, 0x850e1d64,
+ 0x1c01f000, 0x59e0000f, 0x59b818e4, 0x59e0100f,
+ 0x80081580, 0x040207fc, 0x8c0c1d0c, 0x040207fa,
+ 0x81281580, 0x0400000e, 0x40025000, 0x820c0500,
+ 0x04000000, 0x850e1d34, 0x810e1d40, 0x82040d40,
+ 0x0000001d, 0x4807c011, 0x4a03c017, 0x00000000,
+ 0x4203e000, 0x30000001, 0x1c01f000, 0x40001000,
+ 0x400c0000, 0x810c0580, 0x8c000534, 0x40080000,
+ 0x040207ee, 0x0401f7da, 0x59980816, 0x592c0001,
+ 0x492f3016, 0x800409c0, 0x04000005, 0x492c0800,
+ 0x80000d40, 0x040206ba, 0x1c01f000, 0x492f3017,
+ 0x850e1d66, 0x0401f7fb, 0x0402d00c, 0x59980817,
+ 0x58040000, 0x4807b107, 0x80000d40, 0x04020005,
+ 0x48033016, 0x850e1d26, 0x48033017, 0x1c01f000,
+ 0x0400d7f8, 0x0401f7fd, 0x59d80105, 0x82000500,
+ 0x00018780, 0x04020005, 0x42000000, 0x0010d492,
+ 0x0201f000, 0x0010c50d, 0x4803c857, 0x485fc857,
+ 0x8c00050e, 0x02020800, 0x00100324, 0x4203e000,
+ 0x50000000, 0x4200b800, 0x00008004, 0x0201f000,
+ 0x00100334, 0x0400e781, 0x59d80105, 0x82000500,
+ 0x00018780, 0x040207f1, 0x8d0e1d24, 0x04020002,
+ 0x1c01f000, 0x59d8010a, 0x59d8090a, 0x80040580,
+ 0x040207fd, 0x850e1d24, 0x59d8010b, 0x80040580,
+ 0x0400000b, 0x800408e0, 0x8d0e1d20, 0x04020009,
+ 0x82040d40, 0x00000013, 0x4807c011, 0x4a03c017,
+ 0x00000001, 0x4203e000, 0x30000001, 0x1c01f000,
0x59e0000f, 0x59b818e4, 0x59e0100f, 0x80081580,
0x040207fc, 0x8c0c1d0c, 0x040207fa, 0x81281580,
0x0400000e, 0x40025000, 0x820c0500, 0x04000000,
@@ -27342,231 +13160,159 @@ static const uint32_t isp_2400_multi_risc_code[] = {
0x4807c011, 0x4a03c017, 0x00000000, 0x4203e000,
0x30000001, 0x1c01f000, 0x40001000, 0x400c0000,
0x810c0580, 0x8c000534, 0x40080000, 0x040207ee,
- 0x0401f7da, 0x59980816, 0x592c0001, 0x492f3016,
- 0x800409c0, 0x04000005, 0x492c0800, 0x80000d40,
- 0x040206bd, 0x1c01f000, 0x492f3017, 0x850e1d66,
- 0x0401f7fb, 0x0402d00c, 0x59980817, 0x58040000,
- 0x4807b107, 0x80000d40, 0x04020005, 0x48033016,
- 0x850e1d26, 0x48033017, 0x1c01f000, 0x0400d7f8,
- 0x0401f7fd, 0x59d80105, 0x82000500, 0x00018780,
- 0x04020005, 0x42000000, 0x0010ce7c, 0x0201f000,
- 0x0010bfb6, 0x4803c857, 0x485fc857, 0x8c00050e,
- 0x02020800, 0x00100323, 0x4203e000, 0x50000000,
- 0x4200b800, 0x00008004, 0x0201f000, 0x00100333,
- 0x0400e784, 0x59d80105, 0x82000500, 0x00018780,
- 0x040207f1, 0x8d0e1d24, 0x04020002, 0x1c01f000,
- 0x59d8010a, 0x59d8090a, 0x80040580, 0x040207fd,
- 0x850e1d24, 0x59d8010b, 0x80040580, 0x0400000b,
- 0x800408e0, 0x8d0e1d20, 0x04020009, 0x82040d40,
- 0x00000013, 0x4807c011, 0x4a03c017, 0x00000001,
- 0x4203e000, 0x30000001, 0x1c01f000, 0x59e0000f,
- 0x59b818e4, 0x59e0100f, 0x80081580, 0x040207fc,
- 0x8c0c1d0c, 0x040207fa, 0x81281580, 0x0400000e,
- 0x40025000, 0x820c0500, 0x04000000, 0x850e1d34,
- 0x810e1d40, 0x82040d40, 0x0000001d, 0x4807c011,
- 0x4a03c017, 0x00000000, 0x4203e000, 0x30000001,
- 0x1c01f000, 0x40001000, 0x400c0000, 0x810c0580,
- 0x8c000534, 0x40080000, 0x040207ee, 0x0401f7dc,
- 0x59da5908, 0x496a5800, 0x412ed000, 0x815eb800,
- 0x0400e7fc, 0x59c80000, 0x82000540, 0x00001200,
- 0x48039000, 0x59d8090b, 0x59980014, 0x48073014,
- 0x80040480, 0x04020004, 0x59940023, 0x80000540,
- 0x04022003, 0x59980813, 0x48072823, 0x59d80105,
- 0x82000500, 0x00018780, 0x040207a7, 0x1c01f000,
- 0x59981015, 0x59e00010, 0x59e00810, 0x80041d80,
- 0x040207fd, 0x80080580, 0x0400000d, 0x48073015,
+ 0x0401f7dc, 0x59da5908, 0x496a5800, 0x412ed000,
+ 0x815eb800, 0x0400e7fc, 0x59c80000, 0x82000540,
+ 0x00001200, 0x48039000, 0x59d8090b, 0x59980014,
+ 0x48073014, 0x80040480, 0x04020004, 0x59940023,
+ 0x80000540, 0x04022003, 0x59980813, 0x48072823,
+ 0x59d80105, 0x82000500, 0x00018780, 0x040207a7,
+ 0x1c01f000, 0x59981015, 0x59e00010, 0x59e00810,
+ 0x80041d80, 0x040207fd, 0x80080580, 0x0400000d,
+ 0x48073015, 0x59e0000f, 0x59e0100f, 0x80081d80,
+ 0x040207fd, 0x81280580, 0x0400000d, 0x400a5000,
+ 0x40080000, 0x80040580, 0x04020642, 0x1c01f000,
0x59e0000f, 0x59e0100f, 0x80081d80, 0x040207fd,
- 0x81280580, 0x0400000d, 0x400a5000, 0x40080000,
- 0x80040580, 0x04020645, 0x1c01f000, 0x59e0000f,
- 0x59e0100f, 0x80081d80, 0x040207fd, 0x81280580,
- 0x040007fa, 0x400a5000, 0x59940023, 0x80000540,
- 0x040027f3, 0x1c01f000, 0x59e0000f, 0x59b818e4,
- 0x59e0100f, 0x80080d80, 0x040207fc, 0x8c0c1d0c,
- 0x040207fa, 0x81280580, 0x04020006, 0x400c0000,
- 0x810c0580, 0x8c000534, 0x04020002, 0x1c01f000,
- 0x820c0500, 0x04000000, 0x850e1d34, 0x810e1d40,
- 0x400a5000, 0x900811c0, 0x82081540, 0x0000001c,
- 0x480bc011, 0x4a03c017, 0x00000000, 0x4203e000,
- 0x30000001, 0x1c01f000, 0x41700000, 0x0c01f001,
- 0x001055ef, 0x000205d9, 0x001055ef, 0x0002069f,
- 0x001055ed, 0x001055ed, 0x001055ed, 0x001055ed,
- 0x00105d0d, 0x04010036, 0x59980004, 0x80000540,
- 0x0402003b, 0x0402c01c, 0x4202f800, 0x00000010,
- 0x4df00000, 0x4203e000, 0x50000000, 0x49db3003,
- 0x59da5808, 0x592c2a05, 0x497a5800, 0x497a5801,
- 0x82140500, 0x000000ff, 0x82000c80, 0x0000007a,
- 0x04021035, 0x0c01f838, 0x5c03e000, 0x817ef840,
- 0x04000009, 0x836c0580, 0x00000003, 0x04020006,
- 0x83700580, 0x00000001, 0x04020010, 0x0401001a,
- 0x0400c7e8, 0x0400fa90, 0x0400b27a, 0x59d40005,
- 0x82000500, 0x43018780, 0x02020000, 0x00105a05,
- 0x59d80005, 0x82000500, 0x43018780, 0x02020000,
- 0x00105a0c, 0x1c01f000, 0x83700580, 0x00000003,
- 0x04000897, 0x83700580, 0x00000001, 0x040207ee,
- 0x04010005, 0x0400c7d3, 0x0401f7eb, 0x4202f800,
- 0x00000010, 0x4df00000, 0x4203e000, 0x50000000,
- 0x49d73003, 0x59d65808, 0x0401f7cf, 0x4df00000,
- 0x4203e000, 0x50000000, 0x40025800, 0x592c2a05,
- 0x497b3003, 0x497b3004, 0x4202f800, 0x00000010,
- 0x0401f7c8, 0x0201f800, 0x00105642, 0x5c03e000,
- 0x0401f7d5, 0x00105642, 0x00105642, 0x00105642,
- 0x00105642, 0x001056e3, 0x00105642, 0x00105642,
- 0x00105642, 0x00105642, 0x00105642, 0x00105652,
- 0x00105642, 0x00105642, 0x00105642, 0x0010570c,
- 0x00105642, 0x00105642, 0x00105642, 0x0002070b,
- 0x00105642, 0x000207bc, 0x00105642, 0x00105642,
- 0x00105642, 0x000206c1, 0x00105642, 0x00105642,
- 0x0010b8b9, 0x00105642, 0x00105642, 0x00105642,
- 0x00105642, 0x00105642, 0x00105642, 0x00105642,
- 0x00105642, 0x00105642, 0x00105642, 0x00105642,
- 0x00105642, 0x00105642, 0x00105682, 0x00105642,
- 0x0010b94e, 0x00105642, 0x00105642, 0x00105642,
- 0x00105642, 0x00105a1b, 0x00105bd2, 0x00105642,
- 0x0010598e, 0x00105642, 0x00105642, 0x00105642,
- 0x00105642, 0x00105642, 0x001059e3, 0x00105642,
- 0x00105679, 0x00105642, 0x00105956, 0x00105642,
- 0x00105642, 0x00105642, 0x00105642, 0x00105642,
- 0x00105642, 0x00105642, 0x00105920, 0x00105642,
- 0x00105920, 0x00105cd2, 0x00105642, 0x00105642,
- 0x00105642, 0x00105642, 0x00105642, 0x00105642,
- 0x00105642, 0x00105642, 0x00105642, 0x00020835,
- 0x00105c97, 0x00105642, 0x00105cc5, 0x00105642,
- 0x00105642, 0x00105642, 0x00105642, 0x00105642,
- 0x00105642, 0x00105642, 0x00105642, 0x00105642,
- 0x00105642, 0x00105642, 0x00105642, 0x00105642,
- 0x00105642, 0x00105642, 0x00105642, 0x00105642,
- 0x00105642, 0x000206c1, 0x00105642, 0x00105642,
- 0x00105642, 0x00105642, 0x00105642, 0x00105642,
- 0x00105642, 0x00105642, 0x00105642, 0x0002077e,
- 0x00105642, 0x00105642, 0x00105642, 0x00105642,
- 0x00105642, 0x00105642, 0x00105642, 0x4df00000,
- 0x4203e000, 0x50000000, 0x59981003, 0x800811c0,
- 0x02000000, 0x001055f4, 0x58080005, 0x82000d00,
- 0x43018780, 0x02020000, 0x00105a0c, 0x8c000508,
- 0x02000000, 0x001055f1, 0x580a5808, 0x592c0205,
- 0x497a5800, 0x497a5801, 0x82000500, 0x000000ff,
- 0x82000c80, 0x0000004b, 0x02021000, 0x001055f0,
- 0x1201f800, 0x001055f7, 0x5c03e000, 0x83700580,
- 0x00000003, 0x040007e2, 0x0400f9cb, 0x0400b1b5,
- 0x1c01f000, 0x80140110, 0x82140d00, 0x000000ff,
- 0x82040d80, 0x00000068, 0x04020005, 0x80000040,
- 0x02000000, 0x0010564a, 0x0401f003, 0x80000040,
- 0x0400000b, 0x02001000, 0x0010564a, 0x4a033006,
- 0x000206d7, 0x48033000, 0x492f3001, 0x492f3002,
- 0x4202e000, 0x00000003, 0x1c01f000, 0x592e8a07,
- 0x83440c80, 0x000007f0, 0x02021000, 0x0010565a,
- 0x8d0e1d0e, 0x02020000, 0x0010568b, 0x592e4411,
- 0x81224110, 0x83440400, 0x0010c280, 0x50000000,
- 0x80026d40, 0x02000000, 0x001056a1, 0x59340013,
- 0x80000130, 0x81200580, 0x02020000, 0x001056a1,
- 0x59340002, 0x592c0811, 0x80040580, 0x82000500,
- 0x00ffffff, 0x02020000, 0x0010565a, 0x5934000a,
- 0x8c00052e, 0x02020000, 0x001056ab, 0x0201f800,
- 0x000202c1, 0x02020000, 0x001056a4, 0x1c01f000,
- 0x59980802, 0x59980000, 0x48065800, 0x492c0801,
- 0x492f3002, 0x80000040, 0x48033000, 0x04000002,
- 0x1c01f000, 0x599a5801, 0x59980006, 0x4202e000,
- 0x00000001, 0x0801f800, 0x1c01f000, 0x80140110,
- 0x02000000, 0x0010564a, 0x80000040, 0x0402000b,
- 0x592c240b, 0x8c102504, 0x0400000c, 0x592c0208,
- 0x82000c80, 0x00001001, 0x02021000, 0x0010565a,
- 0x0201f000, 0x00105ce7, 0x4a033006, 0x0002071d,
- 0x0401f7b5, 0x592c240b, 0x592e8a07, 0x417a7800,
- 0x592e4408, 0x83224500, 0x000000ff, 0x83200580,
- 0x000000ff, 0x02000000, 0x001058aa, 0x83200400,
- 0x0010c10d, 0x50024800, 0x83440c80, 0x000007f0,
- 0x02021000, 0x001058a1, 0x83440c00, 0x0010c280,
- 0x50040000, 0x80026d40, 0x02000000, 0x001058a5,
+ 0x81280580, 0x040007fa, 0x400a5000, 0x59940023,
+ 0x80000540, 0x040027f3, 0x1c01f000, 0x59e0000f,
+ 0x59b818e4, 0x59e0100f, 0x80080d80, 0x040207fc,
+ 0x8c0c1d0c, 0x040207fa, 0x81280580, 0x04020006,
+ 0x400c0000, 0x810c0580, 0x8c000534, 0x04020002,
+ 0x1c01f000, 0x820c0500, 0x04000000, 0x850e1d34,
+ 0x810e1d40, 0x400a5000, 0x900811c0, 0x82081540,
+ 0x0000001c, 0x480bc011, 0x4a03c017, 0x00000000,
+ 0x4203e000, 0x30000001, 0x1c01f000, 0x41700000,
+ 0x0c01f001, 0x001057d0, 0x000205ee, 0x001057d0,
+ 0x000206ab, 0x001057ce, 0x001057ce, 0x001057ce,
+ 0x001057ce, 0x00105fc0, 0x04010037, 0x59980004,
+ 0x80000540, 0x02020000, 0x00106008, 0x0402c01c,
+ 0x4202f800, 0x00000010, 0x4df00000, 0x4203e000,
+ 0x50000000, 0x49db3003, 0x59da5808, 0x592c2a05,
+ 0x497a5800, 0x497a5801, 0x82140500, 0x000000ff,
+ 0x82000c80, 0x0000007a, 0x0402102b, 0x0c01f82e,
+ 0x5c03e000, 0x817ef840, 0x04000009, 0x836c0580,
+ 0x00000003, 0x04020006, 0x83700580, 0x00000001,
+ 0x04020010, 0x0401001a, 0x0400c7e8, 0x0400f9d2,
+ 0x0400b1bc, 0x59d40005, 0x82000500, 0x43018780,
+ 0x02020000, 0x00105cb3, 0x59d80005, 0x82000500,
+ 0x43018780, 0x02020000, 0x00105cba, 0x1c01f000,
+ 0x83700580, 0x00000003, 0x0400088d, 0x83700580,
+ 0x00000001, 0x040207ee, 0x04010005, 0x0400c7d3,
+ 0x0401f7eb, 0x4202f800, 0x00000010, 0x4df00000,
+ 0x4203e000, 0x50000000, 0x49d73003, 0x59d65808,
+ 0x0401f7cf, 0x0201f800, 0x00105826, 0x5c03e000,
+ 0x0401f7df, 0x00105826, 0x00105826, 0x00105826,
+ 0x00105826, 0x001058c7, 0x00105826, 0x00105826,
+ 0x00105826, 0x00105826, 0x00105826, 0x00105836,
+ 0x00105826, 0x00105826, 0x00105826, 0x001058f0,
+ 0x00105826, 0x00105826, 0x00105826, 0x00020718,
+ 0x00105826, 0x00105b1c, 0x00105826, 0x00105826,
+ 0x00105826, 0x000206ce, 0x00105826, 0x00105826,
+ 0x0010be0e, 0x00105826, 0x00105826, 0x00105826,
+ 0x00105826, 0x00105826, 0x00105826, 0x00105826,
+ 0x00105826, 0x00105826, 0x00105826, 0x00105826,
+ 0x00105826, 0x00105826, 0x00105866, 0x00105826,
+ 0x0010bea3, 0x00105826, 0x00105826, 0x00105826,
+ 0x00105826, 0x00105cc9, 0x00105e68, 0x00105826,
+ 0x00105c3c, 0x00105826, 0x00105826, 0x00105826,
+ 0x00105826, 0x00105826, 0x00105c91, 0x00105826,
+ 0x0010585d, 0x00105826, 0x00105c04, 0x00105826,
+ 0x00105826, 0x00105826, 0x00105826, 0x00105826,
+ 0x00105826, 0x00105826, 0x00105bce, 0x00105826,
+ 0x00105bce, 0x00105f86, 0x00105826, 0x00105826,
+ 0x00105826, 0x00105826, 0x00105826, 0x00105826,
+ 0x00105826, 0x00105826, 0x00105826, 0x00105b90,
+ 0x00105f45, 0x00105826, 0x00105f79, 0x00105826,
+ 0x00105826, 0x00105826, 0x00105826, 0x00105826,
+ 0x00105826, 0x00105826, 0x00105826, 0x00105826,
+ 0x00105826, 0x00105826, 0x00105826, 0x00105826,
+ 0x00105826, 0x00105826, 0x00105826, 0x00105826,
+ 0x00105826, 0x000206ce, 0x00105826, 0x00105826,
+ 0x00105826, 0x00105826, 0x00105826, 0x00105826,
+ 0x00105826, 0x00105826, 0x00105826, 0x0002078e,
+ 0x00105826, 0x00105826, 0x00105826, 0x00105826,
+ 0x00105826, 0x00105826, 0x00105826, 0x835c0480,
+ 0x00000104, 0x02001000, 0x001057d5, 0x4df00000,
+ 0x4203e000, 0x50000000, 0x59981003, 0x58080005,
+ 0x82000d00, 0x43018780, 0x02020000, 0x00105cba,
+ 0x8c000508, 0x02000000, 0x001057d2, 0x580a5808,
+ 0x592c0205, 0x497a5800, 0x497a5801, 0x82000500,
+ 0x000000ff, 0x82000c80, 0x0000004b, 0x02021000,
+ 0x001057d1, 0x1201f800, 0x001057db, 0x5c03e000,
+ 0x83700580, 0x00000003, 0x040007e1, 0x0400f916,
+ 0x0400b100, 0x1c01f000, 0x80140110, 0x82140d00,
+ 0x000000ff, 0x82040d80, 0x00000068, 0x04020005,
+ 0x80000040, 0x02000000, 0x0010582e, 0x0401f003,
+ 0x80000040, 0x0400000b, 0x02001000, 0x0010582e,
+ 0x4a033006, 0x000206e4, 0x48033000, 0x492f3001,
+ 0x492f3002, 0x4202e000, 0x00000003, 0x1c01f000,
+ 0x592e8a07, 0x83440c80, 0x000007f0, 0x02021000,
+ 0x0010583e, 0x8d0e1d0e, 0x02020000, 0x0010586f,
+ 0x592e4411, 0x81224110, 0x83440400, 0x0010c880,
+ 0x50000000, 0x80026d40, 0x02000000, 0x00105885,
0x59340013, 0x80000130, 0x81200580, 0x02020000,
- 0x001058a5, 0x59340002, 0x592c0809, 0x80040580,
- 0x82000500, 0x00ffffff, 0x02020000, 0x0010565a,
- 0x59243a00, 0x821c0500, 0x00000003, 0x82000580,
- 0x00000003, 0x02020000, 0x0010589d, 0x592e600a,
- 0x497a5809, 0x83300480, 0x00111584, 0x02001000,
- 0x001058c7, 0x41540000, 0x81300480, 0x02021000,
- 0x00105861, 0x592c0a0d, 0x59300202, 0x80040580,
- 0x02020000, 0x001058c7, 0x4936600a, 0x4926601c,
- 0x8c10251c, 0x02020000, 0x0010584f, 0x59240206,
- 0x8c000510, 0x02020000, 0x001058ea, 0x8d0e1d0e,
- 0x02020000, 0x00105834, 0x8c1c3d16, 0x02020000,
- 0x001058db, 0x59340200, 0x8c000518, 0x02020000,
- 0x001058c2, 0x59300c07, 0x82040580, 0x00000006,
- 0x02020000, 0x001058ef, 0x8c102508, 0x02020000,
- 0x00105829, 0x59300809, 0x497a5804, 0x4a025a07,
- 0x00000000, 0x800409c0, 0x02020000, 0x0010582f,
- 0x59300415, 0x8c000516, 0x02020000, 0x001058cc,
- 0x492e6009, 0x0401f309, 0x80140110, 0x02000000,
- 0x0010564a, 0x80000040, 0x02000000, 0x0010564a,
+ 0x00105885, 0x59340002, 0x592c0811, 0x80040580,
+ 0x82000500, 0x00ffffff, 0x02020000, 0x0010583e,
+ 0x5934000a, 0x8c00052e, 0x02020000, 0x0010588f,
+ 0x0201f800, 0x000202c8, 0x02020000, 0x00105888,
+ 0x1c01f000, 0x59980802, 0x59980000, 0x48065800,
+ 0x492c0801, 0x492f3002, 0x80000040, 0x48033000,
+ 0x04000002, 0x1c01f000, 0x599a5801, 0x59980006,
+ 0x4202e000, 0x00000001, 0x0801f800, 0x1c01f000,
+ 0x80140110, 0x02000000, 0x0010582e, 0x80000040,
+ 0x0402000b, 0x592c240b, 0x8c102504, 0x0400000c,
+ 0x592c0208, 0x82000c80, 0x00001001, 0x02021000,
+ 0x0010583e, 0x0201f000, 0x00105f9b, 0x4a033006,
+ 0x0002072a, 0x0401f7b5, 0x592c240b, 0x592e8a07,
+ 0x417a7800, 0x592e4408, 0x83224500, 0x000000ff,
+ 0x83200580, 0x000000ff, 0x02000000, 0x00105a9c,
+ 0x83200400, 0x0010c6ac, 0x50024800, 0x83440c80,
+ 0x000007f0, 0x02021000, 0x00105a91, 0x83440c00,
+ 0x0010c880, 0x50040000, 0x80026d40, 0x02000000,
+ 0x00105a97, 0x59340013, 0x80000130, 0x81200580,
+ 0x02020000, 0x00105a97, 0x59340002, 0x592c0809,
+ 0x80040580, 0x82000500, 0x00ffffff, 0x02020000,
+ 0x0010583e, 0x59243a00, 0x821c0500, 0x00000003,
+ 0x82000580, 0x00000003, 0x04000005, 0x59340200,
+ 0x8c00050e, 0x02000000, 0x00105a8d, 0x592e600a,
+ 0x497a5809, 0x83300480, 0x00111d44, 0x02001000,
+ 0x00105ab9, 0x41540000, 0x81300480, 0x02021000,
+ 0x00105a51, 0x592c0a0d, 0x59300202, 0x80040580,
+ 0x02020000, 0x00105ab9, 0x4936600a, 0x4926601c,
+ 0x8c10251c, 0x02020000, 0x00105a3f, 0x59240206,
+ 0x8c000510, 0x02020000, 0x00105adc, 0x8d0e1d0e,
+ 0x02020000, 0x00105a24, 0x8c1c3d16, 0x02020000,
+ 0x00105acd, 0x59340200, 0x8c000518, 0x02020000,
+ 0x00105ab4, 0x59300c07, 0x82040580, 0x00000006,
+ 0x02020000, 0x00105ae1, 0x8c102508, 0x02020000,
+ 0x00105a19, 0x59300809, 0x497a5804, 0x4a025a07,
+ 0x00000000, 0x800409c0, 0x02020000, 0x00105a1f,
+ 0x59300415, 0x8c000516, 0x02020000, 0x00105abe,
+ 0x492e6009, 0x0401f254, 0x80140110, 0x02000000,
+ 0x0010582e, 0x80000040, 0x02000000, 0x0010582e,
0x592c0a08, 0x82040c80, 0x00001001, 0x02021000,
- 0x0010565a, 0x4a033006, 0x0002078c, 0x0401f746,
- 0x592c0001, 0x80001540, 0x02000000, 0x0010564a,
+ 0x0010583e, 0x4a033006, 0x0002079c, 0x0401f743,
+ 0x592c0001, 0x80001540, 0x02000000, 0x0010582e,
0x58080a05, 0x82040d00, 0x000000ff, 0x82040580,
- 0x0000004a, 0x02020000, 0x00105652, 0x58080406,
- 0x8c000510, 0x02020000, 0x0010565a, 0x4202e000,
- 0x00000001, 0x592c240b, 0x8c102504, 0x0400077f,
+ 0x0000004a, 0x02020000, 0x00105836, 0x58080406,
+ 0x8c000510, 0x02020000, 0x0010583e, 0x4202e000,
+ 0x00000001, 0x592c240b, 0x8c102504, 0x0400077c,
0x40087800, 0x592c0208, 0x82000480, 0x00001001,
- 0x02021000, 0x0010565a, 0x583c1809, 0x583c200a,
+ 0x02021000, 0x0010583e, 0x583c1809, 0x583c200a,
0x583c100b, 0x82080500, 0xffff0003, 0x02020000,
- 0x0010565a, 0x4202e000, 0x00000002, 0x42000000,
- 0x0010e2e7, 0x50007000, 0x4a00700f, 0x00000008,
+ 0x0010583e, 0x4202e000, 0x00000002, 0x42000000,
+ 0x0010e905, 0x50007000, 0x4a00700f, 0x00000008,
0x480c7006, 0x48107007, 0x492c700a, 0x4a00700d,
- 0x00000009, 0x483c700b, 0x0201f000, 0x00105cf9,
- 0x492fc857, 0x592e4411, 0x81224110, 0x0201f800,
- 0x00105c82, 0x04020067, 0x592c0205, 0x80000112,
- 0x02020000, 0x0010564a, 0x592e8a07, 0x0201f800,
- 0x00104a7c, 0x0402005f, 0x0201f800, 0x00104a1c,
- 0x0402005f, 0x592e780b, 0x493fc857, 0x8d3e7d3e,
- 0x04020007, 0x8d0e1d0e, 0x04020056, 0x0201f800,
- 0x00104917, 0x02000000, 0x0010565a, 0x833c1d00,
- 0x0000001f, 0x02000000, 0x0010565a, 0x592c0208,
- 0x82000c80, 0x00001000, 0x02021000, 0x0010565a,
- 0x800000c2, 0x800008c4, 0x8005d400, 0x592e9009,
- 0x592e980a, 0x5934080d, 0x800409c0, 0x04000004,
- 0x58041802, 0x800c19c0, 0x04020038, 0x833c1d00,
- 0x0000001f, 0x81780040, 0x80000000, 0x800c1902,
- 0x040217fe, 0x02020000, 0x0010565a, 0x0c01f001,
- 0x000207f9, 0x000207fc, 0x00020809, 0x0002080c,
- 0x0002080f, 0x0201f800, 0x001098af, 0x0401f023,
- 0x0201f800, 0x001048e9, 0x04000027, 0x80e9d1c0,
- 0x02020800, 0x00106519, 0x42028000, 0x00000005,
- 0x417a9000, 0x417a9800, 0x0201f800, 0x001098bf,
- 0x0401f016, 0x42027000, 0x0000004d, 0x0401f006,
- 0x42027000, 0x0000004e, 0x0401f003, 0x42027000,
- 0x00000052, 0x5934080d, 0x800409c0, 0x04000007,
- 0x4d3c0000, 0x40067800, 0x0201f800, 0x001048c9,
- 0x5c027800, 0x04000009, 0x0201f800, 0x00104792,
- 0x02020800, 0x001098f5, 0x04000007, 0x8d3e7d3e,
- 0x0402000e, 0x1c01f000, 0x4a025a07, 0x00000030,
- 0x0401f00d, 0x4a025a07, 0x0000002c, 0x0401f00a,
- 0x4a025a07, 0x00000028, 0x0401f007, 0x4a025a07,
- 0x00000029, 0x0401f004, 0x497a580a, 0x4a025a07,
- 0x00000000, 0x4a025a05, 0x00000103, 0x0201f000,
- 0x000203ef, 0x492fc857, 0x80140110, 0x80000040,
- 0x04000003, 0x0201f000, 0x0010564a, 0x592c0208,
- 0x82000500, 0x000003ff, 0x48025a08, 0x8c000506,
- 0x04000004, 0x82000500, 0x00000070, 0x04020003,
- 0x8d0e1d0e, 0x04020018, 0x4a025a07, 0x0000dead,
- 0x592c0409, 0x82000500, 0x0000f0ff, 0x48025c09,
- 0x0201f800, 0x001043ed, 0x04020002, 0x1c01f000,
- 0x49425a07, 0x8058b1c0, 0x04000009, 0x0201f800,
- 0x00109f12, 0x0401f80f, 0x44042800, 0x82580580,
- 0x00000002, 0x04020002, 0x48082801, 0x0201f000,
- 0x000203ef, 0x42028000, 0x00000031, 0x42000800,
- 0x00000001, 0x4200b000, 0x00000001, 0x0401f7ed,
- 0x592c0409, 0x80000118, 0x832c2c00, 0x0000000a,
- 0x80142c00, 0x1c01f000, 0x492fc857, 0x4a025a09,
- 0x00000006, 0x0201f000, 0x000203ef, 0x492fc857,
- 0x4a025a09, 0x00000001, 0x0201f000, 0x000203ef,
+ 0x00000009, 0x483c700b, 0x0201f000, 0x00105fad,
0x4df00000, 0x4203e000, 0x50000000, 0x0402b00b,
- 0x835c0480, 0x00000020, 0x0400100d, 0x815eb840,
+ 0x835c0480, 0x00000104, 0x0400100d, 0x815eb840,
0x416a5800, 0x592ed000, 0x492fb007, 0x497a5800,
0x497a5801, 0x0400b7f7, 0x59d80005, 0x82000500,
- 0x43018780, 0x02020000, 0x00105a0c, 0x5c03e000,
+ 0x43018780, 0x02020000, 0x00105cba, 0x5c03e000,
0x1c01f000, 0x4df00000, 0x4203e000, 0x50000000,
- 0x0402f00b, 0x835c0480, 0x00000020, 0x0400100d,
+ 0x0402f00b, 0x835c0480, 0x00000104, 0x0400100d,
0x815eb840, 0x416a5800, 0x592ed000, 0x492fa807,
0x497a5800, 0x497a5801, 0x0400f7f7, 0x59d40005,
- 0x82000500, 0x43018780, 0x02020000, 0x00105a05,
+ 0x82000500, 0x43018780, 0x02020000, 0x00105cb3,
0x5c03e000, 0x1c01f000, 0x40307000, 0x5838000a,
0x80025d40, 0x04000026, 0x58380002, 0x82000580,
0x00000100, 0x04000028, 0x4c380000, 0x592c0a05,
@@ -27575,27 +13321,27 @@ static const uint32_t isp_2400_multi_risc_code[] = {
0x82000580, 0x00000060, 0x04000010, 0x592c0209,
0x8400054e, 0x48025a09, 0x497a5c09, 0x497a5c0a,
0x4a025a07, 0x00000002, 0x4a025a05, 0x00000103,
- 0x0201f800, 0x000203ef, 0x0401f008, 0x4a025a07,
+ 0x0201f800, 0x00020401, 0x0401f008, 0x4a025a07,
0x00000002, 0x0401f003, 0x4a025a07, 0x00000010,
- 0x0201f800, 0x000203ef, 0x5c007000, 0x4202e000,
+ 0x0201f800, 0x00020401, 0x5c007000, 0x4202e000,
0x00000001, 0x4a007002, 0x00000100, 0x4978700f,
0x1c01f000, 0x58380004, 0x82000480, 0x00000003,
0x0400008d, 0x5838100f, 0x8c081500, 0x0402001b,
0x8c081506, 0x0402003b, 0x4200b000, 0x00000003,
0x832cac00, 0x00000012, 0x58380009, 0x5838100c,
- 0x8008a400, 0x4c380000, 0x0201f800, 0x0010c086,
+ 0x8008a400, 0x4c380000, 0x0201f800, 0x0010c5dd,
0x5c007000, 0x5838000c, 0x82000400, 0x00000003,
0x4800700c, 0x4a00700f, 0x00000001, 0x58380004,
0x82000480, 0x00000003, 0x48007004, 0x82000580,
0x00000003, 0x04000070, 0x5838000d, 0x80001d40,
- 0x04020023, 0x4c380000, 0x0201f800, 0x0010056e,
+ 0x04020023, 0x4c380000, 0x0201f800, 0x00100584,
0x5c007000, 0x04000010, 0x4a025a05, 0x0000010a,
0x42001800, 0x00000006, 0x480c700d, 0x5838000b,
0x80000540, 0x04020002, 0x5838000a, 0x40000800,
0x492c0801, 0x492c700b, 0x42000800, 0x0000000f,
0x0401f014, 0x4202e000, 0x00000008, 0x4a033005,
- 0x0002090a, 0x1c01f000, 0x4202e000, 0x00000002,
- 0x42000000, 0x0010e2e7, 0x50007000, 0x0401f7e7,
+ 0x00020862, 0x1c01f000, 0x4202e000, 0x00000002,
+ 0x42000000, 0x0010e905, 0x50007000, 0x0401f7e7,
0x84081540, 0x4808700f, 0x5838180d, 0x583a580b,
0x400c0000, 0x42000800, 0x00000015, 0x80040c80,
0x58381004, 0x5838000e, 0x41783000, 0x80000540,
@@ -27604,7 +13350,7 @@ static const uint32_t isp_2400_multi_risc_code[] = {
0x40080800, 0x4004b000, 0x412c0000, 0x800c0400,
0x4000a800, 0x58380009, 0x5838100c, 0x8008a400,
0x4c080000, 0x4c040000, 0x4c0c0000, 0x4c380000,
- 0x0201f800, 0x0010c086, 0x5c007000, 0x5c001800,
+ 0x0201f800, 0x0010c5dd, 0x5c007000, 0x5c001800,
0x5c000800, 0x40040000, 0x58381004, 0x80080480,
0x48007004, 0x82000580, 0x00000003, 0x04000002,
0x84183500, 0x5c000000, 0x80041400, 0x82080480,
@@ -27612,1506 +13358,1523 @@ static const uint32_t isp_2400_multi_risc_code[] = {
0x400c0000, 0x80041c00, 0x820c0480, 0x00000015,
0x04020003, 0x84183544, 0x40001800, 0x40080800,
0x4804700c, 0x480c700d, 0x40180000, 0x0c01f001,
- 0x00020958, 0x0002095d, 0x0002095a, 0x00020958,
- 0x000208f1, 0x0002095d, 0x0002095a, 0x00020958,
- 0x0201f800, 0x0010032e, 0x5838100e, 0x0201f000,
- 0x00105cf9, 0x5838080c, 0x82040400, 0x00000002,
+ 0x000208b0, 0x000208b5, 0x000208b2, 0x000208b0,
+ 0x00020849, 0x000208b5, 0x000208b2, 0x000208b0,
+ 0x0201f800, 0x0010032f, 0x5838100e, 0x0201f000,
+ 0x00105fad, 0x5838080c, 0x82040400, 0x00000002,
0x58381009, 0x80080400, 0x50001000, 0x800811c0,
0x0402001a, 0x5838180f, 0x8c0c1d06, 0x04020011,
0x4202e000, 0x00000001, 0x583a580a, 0x4978700a,
0x4978700f, 0x592c0a05, 0x82040d00, 0x000000ff,
- 0x82040580, 0x00000012, 0x040005ab, 0x82040580,
- 0x0000001b, 0x02000000, 0x0010b8e1, 0x0401f560,
+ 0x82040580, 0x00000012, 0x04000660, 0x82040580,
+ 0x0000001b, 0x02000000, 0x0010be36, 0x0401f615,
0x4202e000, 0x00000001, 0x583a580a, 0x4978700a,
- 0x4978700f, 0x0401f5a0, 0x58380009, 0x80040c00,
+ 0x4978700f, 0x0401f655, 0x58380009, 0x80040c00,
0x82381c00, 0x00000006, 0x54041800, 0x80040800,
- 0x800c1800, 0x54041800, 0x0201f000, 0x00105cf9,
+ 0x800c1800, 0x54041800, 0x0201f000, 0x00105fad,
0x4df00000, 0x4203e000, 0x50000000, 0x5994002e,
- 0x80000540, 0x040000ec, 0x4c000000, 0x8d0e1d32,
- 0x02020800, 0x00101059, 0x59e00002, 0x8c00051e,
- 0x04020013, 0x42000000, 0x00001000, 0x50000000,
- 0x82000480, 0x24320002, 0x0402000d, 0x0201f800,
- 0x0010c0d6, 0x04000008, 0x42000800, 0x00007a17,
- 0x50040000, 0x8c00050e, 0x04020003, 0x8400054e,
- 0x44000800, 0x4a030000, 0x00000000, 0x5c000000,
- 0x59947824, 0x4803282f, 0x803c0480, 0x04001004,
- 0x04000003, 0x48032824, 0x0401f026, 0x41787800,
- 0x803c7800, 0x82000400, 0x000003e8, 0x040027fd,
- 0x48032824, 0x59a8005c, 0x803c1400, 0x480b505c,
- 0x803c0040, 0x04000002, 0x483fc857, 0x59e40852,
- 0x59a8005d, 0x80040580, 0x04000004, 0x480bc857,
- 0x59e40052, 0x4803505d, 0x59940030, 0x803c0400,
- 0x48032830, 0x0201f800, 0x001065d1, 0x59940000,
- 0x82000580, 0x00000000, 0x04020006, 0x59940030,
- 0x48032831, 0x497b2830, 0x4a032800, 0x00000001,
- 0x59bc00e4, 0x8c00052c, 0x02020800, 0x0010649b,
- 0x4c0c0000, 0x59940007, 0x80000d40, 0x04000013,
- 0x59941006, 0x5994002f, 0x80081c80, 0x04001004,
- 0x04000003, 0x480f2806, 0x0401f00c, 0x80040840,
- 0x48072807, 0x04020004, 0x59940008, 0x0801f800,
- 0x0401f006, 0x400c0000, 0x820c1c00, 0x0000000a,
- 0x040027f7, 0x480f2806, 0x5c001800, 0x4d180000,
- 0x59c80040, 0x8c000534, 0x04020027, 0x850e1d32,
- 0x417a3000, 0x83947c00, 0x00000009, 0x583c0001,
- 0x80000d40, 0x04020008, 0x823c7c00, 0x00000005,
- 0x811a3000, 0x83180580, 0x00000005, 0x040207f8,
- 0x0401f019, 0x850e1d72, 0x583c1000, 0x5994002f,
- 0x80080480, 0x04001005, 0x04000004, 0x48007800,
- 0x80000040, 0x040217f1, 0x80040840, 0x48047801,
- 0x04000008, 0x82000400, 0x0000000a, 0x48007800,
- 0x040027fa, 0x82040500, 0x0000007f, 0x0401f7e7,
- 0x583c0004, 0x4c3c0000, 0x0801f800, 0x5c007800,
- 0x0401f7e2, 0x5c023000, 0x59940023, 0x80001540,
- 0x04000007, 0x04002006, 0x5994002f, 0x80080480,
- 0x04021002, 0x80000580, 0x48032823, 0x59940026,
- 0x80000d40, 0x04000013, 0x59941025, 0x5994002f,
- 0x80080480, 0x04001005, 0x04000004, 0x48032825,
- 0x80000040, 0x0402100b, 0x80040840, 0x48072826,
- 0x04020004, 0x59940027, 0x0801f800, 0x0401f005,
- 0x82000400, 0x0000000a, 0x48032825, 0x040027f7,
- 0x59940004, 0x80000d40, 0x04000013, 0x59941003,
+ 0x80000540, 0x040000ef, 0x4c000000, 0x59a80006,
+ 0x8c000504, 0x04020004, 0x8d0e1d32, 0x02020800,
+ 0x0010108a, 0x59e00002, 0x8c00051e, 0x04020013,
+ 0x42000000, 0x00001000, 0x50000000, 0x82000480,
+ 0x24320002, 0x0402000d, 0x0201f800, 0x0010c62d,
+ 0x04000008, 0x42000800, 0x00007a17, 0x50040000,
+ 0x8c00050e, 0x04020003, 0x8400054e, 0x44000800,
+ 0x4a030000, 0x00000000, 0x5c000000, 0x59947824,
+ 0x4803282f, 0x803c0480, 0x04001004, 0x04000003,
+ 0x48032824, 0x0401f026, 0x417a0800, 0x81060800,
+ 0x82000400, 0x000003e8, 0x040027fd, 0x48032824,
+ 0x59a8006a, 0x81041400, 0x480b506a, 0x81040040,
+ 0x04000002, 0x4907c857, 0x59e40852, 0x59a8006b,
+ 0x80040580, 0x04000004, 0x480bc857, 0x59e40052,
+ 0x4803506b, 0x59940030, 0x81040400, 0x48032830,
+ 0x0201f800, 0x00106942, 0x59940000, 0x82000580,
+ 0x00000000, 0x04020006, 0x59940030, 0x48032831,
+ 0x497b2830, 0x4a032800, 0x00000001, 0x59bc00e4,
+ 0x8c00052c, 0x02020800, 0x00106800, 0x4c0c0000,
+ 0x59940007, 0x80000d40, 0x04000013, 0x59941006,
+ 0x5994002f, 0x80081c80, 0x04001004, 0x04000003,
+ 0x480f2806, 0x0401f00c, 0x80040840, 0x48072807,
+ 0x04020004, 0x59940008, 0x0801f800, 0x0401f006,
+ 0x400c0000, 0x820c1c00, 0x0000000a, 0x040027f7,
+ 0x480f2806, 0x5c001800, 0x4d180000, 0x59c80040,
+ 0x8c000534, 0x04020027, 0x850e1d32, 0x417a3000,
+ 0x83947c00, 0x00000009, 0x583c0001, 0x80000d40,
+ 0x04020008, 0x823c7c00, 0x00000005, 0x811a3000,
+ 0x83180580, 0x00000005, 0x040207f8, 0x0401f019,
+ 0x850e1d72, 0x583c1000, 0x5994002f, 0x80080480,
+ 0x04001005, 0x04000004, 0x48007800, 0x80000040,
+ 0x040217f1, 0x80040840, 0x48047801, 0x04000008,
+ 0x82000400, 0x0000000a, 0x48007800, 0x040027fa,
+ 0x82040500, 0x0000007f, 0x0401f7e7, 0x583c0004,
+ 0x4c3c0000, 0x0801f800, 0x5c007800, 0x0401f7e2,
+ 0x5c023000, 0x59940023, 0x80001540, 0x04000007,
+ 0x04002006, 0x5994002f, 0x80080480, 0x04021002,
+ 0x80000580, 0x48032823, 0x59940026, 0x80000d40,
+ 0x04000013, 0x59941025, 0x5994002f, 0x80080480,
+ 0x04001005, 0x04000004, 0x48032825, 0x80000040,
+ 0x0402100b, 0x80040840, 0x48072826, 0x04020004,
+ 0x59940027, 0x0801f800, 0x0401f005, 0x82000400,
+ 0x0000000a, 0x48032825, 0x040027f7, 0x59940004,
+ 0x80000d40, 0x04000013, 0x59941003, 0x5994002f,
+ 0x80080480, 0x04001005, 0x04000004, 0x48032803,
+ 0x80000040, 0x0402100b, 0x80040840, 0x48072804,
+ 0x04020004, 0x59940005, 0x0801f800, 0x0401f005,
+ 0x82000400, 0x0000000a, 0x48032803, 0x040027f7,
+ 0x59940029, 0x80000d40, 0x04000013, 0x59941028,
0x5994002f, 0x80080480, 0x04001005, 0x04000004,
- 0x48032803, 0x80000040, 0x0402100b, 0x80040840,
- 0x48072804, 0x04020004, 0x59940005, 0x0801f800,
- 0x0401f005, 0x82000400, 0x0000000a, 0x48032803,
- 0x040027f7, 0x59940029, 0x80000d40, 0x04000013,
- 0x59941028, 0x5994002f, 0x80080480, 0x04001005,
- 0x04000004, 0x48032828, 0x80000040, 0x0402100b,
- 0x80040840, 0x48072829, 0x04020004, 0x5994002a,
- 0x0801f800, 0x0401f005, 0x82000400, 0x00000001,
- 0x48032828, 0x040027f7, 0x5994002c, 0x80000d40,
- 0x04000013, 0x5994102b, 0x5994002f, 0x80080480,
- 0x04001005, 0x04000004, 0x4803282b, 0x80000040,
- 0x0402100b, 0x80040840, 0x4807282c, 0x04020004,
- 0x5994002d, 0x0801f800, 0x0401f005, 0x82000400,
- 0x0000000a, 0x4803282b, 0x040027f7, 0x5994082e,
- 0x5994002f, 0x80040480, 0x02001800, 0x0010032e,
- 0x4803282e, 0x59940000, 0x0c01f001, 0x00020a7e,
- 0x00106520, 0x0010658d, 0x5c03e000, 0x1c01f000,
- 0x5994002e, 0x80000000, 0x4803282e, 0x4203e000,
- 0x70000000, 0x1c01f000, 0x592c0004, 0x497a5804,
- 0x80000d40, 0x04020005, 0x592c0407, 0x800000c2,
- 0x800008c4, 0x80040c00, 0x592c040b, 0x48066006,
- 0x82000d00, 0x00000003, 0x02000000, 0x00106726,
- 0x8c000500, 0x04020035, 0x59a80873, 0x80040840,
- 0x040207ff, 0x8c00051e, 0x02000000, 0x00106701,
- 0x82000d00, 0x000000c0, 0x02020000, 0x001066f7,
- 0x82000d00, 0x00002020, 0x02020000, 0x001066f4,
- 0x813e79c0, 0x02020000, 0x001066f4, 0x592c0c0d,
- 0x800409c0, 0x02020000, 0x001066f4, 0x59300a03,
- 0x82040d80, 0x00000007, 0x02020000, 0x001066f4,
- 0x4a026203, 0x00000003, 0x4a026403, 0x00000043,
- 0x0201f800, 0x00020172, 0x82080d40, 0x80003465,
- 0x8c040d0e, 0x04000008, 0x59301009, 0x58081001,
- 0x58080407, 0x80000540, 0x04000003, 0x84040d18,
- 0x84040d14, 0x48066004, 0x497a6000, 0x59bc00ea,
- 0x8c000516, 0x040207fe, 0x83300400, 0xa0000000,
- 0x480378e1, 0x1c01f000, 0x8c000502, 0x02020000,
- 0x00106749, 0x8c00051e, 0x0400000e, 0x82000d00,
- 0x000000c0, 0x04000005, 0x82040d80, 0x000000c0,
- 0x02020000, 0x0010674e, 0x82000d00, 0x00002020,
- 0x82040d80, 0x00002020, 0x02000000, 0x00106715,
- 0x592c0208, 0x80000040, 0x02020000, 0x0010671f,
- 0x592c0205, 0x82000500, 0x000000ff, 0x82000580,
- 0x00000012, 0x02020000, 0x0010671f, 0x592c180e,
- 0x800c19c0, 0x02020000, 0x0010671f, 0x592c1810,
- 0x59300008, 0x82000540, 0x00000011, 0x480e6012,
- 0x48026008, 0x4a026203, 0x00000004, 0x4a026403,
- 0x00000042, 0x42000800, 0x80002001, 0x0401f047,
- 0x5c000000, 0x4c000000, 0x4803c857, 0x4807c857,
- 0x0401f003, 0x42000800, 0x00000001, 0x59325809,
- 0x832c0500, 0x00ff0000, 0x04000013, 0x592c1000,
- 0x592c040b, 0x59301808, 0x480a6009, 0x8c000510,
- 0x0402000e, 0x48065a07, 0x820c0500, 0x04000800,
- 0x82000580, 0x04000800, 0x04000016, 0x0201f800,
- 0x000203ef, 0x417a7800, 0x59300009, 0x80025d40,
- 0x04020772, 0x1c01f000, 0x456a5800, 0x412ed000,
- 0x815eb800, 0x592c0001, 0x80000d40, 0x04020006,
- 0x59c80000, 0x82000540, 0x00001200, 0x48039000,
- 0x0401f7f1, 0x0201f800, 0x000203dd, 0x0401f7ee,
- 0x59300020, 0x48025c10, 0x0401f7e9, 0x59840000,
- 0x80000540, 0x04020002, 0x1c01f000, 0x59840003,
- 0x80000540, 0x02020000, 0x001067c6, 0x1c01f000,
- 0x48066004, 0x497a6000, 0x497a6001, 0x8d0e1d32,
- 0x02000800, 0x00101059, 0x850e1d72, 0x59bc00ea,
- 0x8c000516, 0x040207fe, 0x83300400, 0xa0000000,
- 0x480378e1, 0x1c01f000, 0x59300004, 0x82000500,
- 0x00000100, 0x80040d40, 0x48066004, 0x59bc00ea,
- 0x8c000516, 0x040207fe, 0x83300400, 0x40000000,
- 0x480378e1, 0x1c01f000, 0x59bc00ea, 0x82001500,
- 0xb0000018, 0x02020000, 0x00106e7f, 0x8c000510,
- 0x0400002a, 0x59bc10e0, 0x82080500, 0xfffff000,
- 0x0402000a, 0x80080108, 0x820a3500, 0x0000000f,
- 0x4803c857, 0x1201f000, 0x00106e85, 0x84000510,
- 0x48026004, 0x0401f016, 0x840a653e, 0x59300004,
- 0x8c000520, 0x040007fa, 0x82000500, 0xfffefeff,
- 0x48026004, 0x8c08153e, 0x04020005, 0x42027000,
- 0x00000013, 0x0401f858, 0x0401f009, 0x59300004,
- 0x8c000514, 0x04000003, 0x0401ff8f, 0x0401f02e,
- 0x42027000, 0x00000049, 0x0401f84f, 0x59bc00ea,
- 0x82001500, 0xb0000018, 0x02020000, 0x00106e7f,
- 0x8c000510, 0x040207d8, 0x1c01f000, 0x59a80251,
- 0x81640480, 0x04001019, 0x41626000, 0x41580000,
- 0x59300a03, 0x82040d80, 0x00000000, 0x04020009,
- 0x4a026203, 0x00000008, 0x8166c840, 0x8332c400,
- 0x0000002c, 0x81600480, 0x04021009, 0x1c01f000,
- 0x83326400, 0x0000002c, 0x81300c80, 0x040017f1,
- 0x42026000, 0x00111584, 0x0401f7ee, 0x837ac540,
- 0x00111584, 0x1c01f000, 0x42000000, 0x0010cf16,
- 0x0201f800, 0x0010bfb3, 0x4967c857, 0x80026580,
- 0x1c01f000, 0x83300480, 0x00111584, 0x02001800,
- 0x0010032e, 0x41580000, 0x81300480, 0x0402100c,
+ 0x48032828, 0x80000040, 0x0402100b, 0x80040840,
+ 0x48072829, 0x04020004, 0x5994002a, 0x0801f800,
+ 0x0401f005, 0x82000400, 0x00000001, 0x48032828,
+ 0x040027f7, 0x5994002c, 0x80000d40, 0x04000013,
+ 0x5994102b, 0x5994002f, 0x80080480, 0x04001005,
+ 0x04000004, 0x4803282b, 0x80000040, 0x0402100b,
+ 0x80040840, 0x4807282c, 0x04020004, 0x5994002d,
+ 0x0801f800, 0x0401f005, 0x82000400, 0x0000000a,
+ 0x4803282b, 0x040027f7, 0x5994082e, 0x5994002f,
+ 0x80040480, 0x02001800, 0x0010032f, 0x4803282e,
+ 0x59940000, 0x0c01f001, 0x000209d9, 0x00106891,
+ 0x001068fe, 0x5c03e000, 0x1c01f000, 0x5994002e,
+ 0x80000000, 0x4803282e, 0x4203e000, 0x70000000,
+ 0x1c01f000, 0x592c0004, 0x497a5804, 0x80000d40,
+ 0x04020005, 0x592c0407, 0x800000c2, 0x800008c4,
+ 0x80040c00, 0x592c040b, 0x48066006, 0x82000d00,
+ 0x00000003, 0x02000000, 0x00106a86, 0x8c000500,
+ 0x04020035, 0x59a80881, 0x80040840, 0x040207ff,
+ 0x8c00051e, 0x02000000, 0x00106a61, 0x82000d00,
+ 0x000000c0, 0x02020000, 0x00106a57, 0x82000d00,
+ 0x00002020, 0x02020000, 0x00106a54, 0x813e79c0,
+ 0x02020000, 0x00106a54, 0x592c0c0d, 0x800409c0,
+ 0x02020000, 0x00106a54, 0x59300a03, 0x82040d80,
+ 0x00000007, 0x02020000, 0x00106a54, 0x4a026203,
+ 0x00000003, 0x4a026403, 0x00000043, 0x0201f800,
+ 0x00020177, 0x82080d40, 0x80003465, 0x8c040d0e,
+ 0x04000008, 0x59301009, 0x58081001, 0x58080407,
+ 0x80000540, 0x04000003, 0x84040d18, 0x84040d14,
+ 0x48066004, 0x497a6000, 0x59bc00ea, 0x8c000516,
+ 0x040207fe, 0x83300400, 0xa0000000, 0x480378e1,
+ 0x1c01f000, 0x8c000502, 0x02020000, 0x00106aa9,
+ 0x8c00051e, 0x0400000e, 0x82000d00, 0x000000c0,
+ 0x04000005, 0x82040d80, 0x000000c0, 0x02020000,
+ 0x00106aae, 0x82000d00, 0x00002020, 0x82040d80,
+ 0x00002020, 0x02000000, 0x00106a75, 0x592c0208,
+ 0x80000040, 0x02020000, 0x00106a7f, 0x592c0205,
+ 0x82000500, 0x000000ff, 0x82000580, 0x00000012,
+ 0x02020000, 0x00106a7f, 0x592c180e, 0x800c19c0,
+ 0x02020000, 0x00106a7f, 0x592c1810, 0x59300008,
+ 0x82000540, 0x00000011, 0x480e6012, 0x48026008,
+ 0x4a026203, 0x00000004, 0x4a026403, 0x00000042,
+ 0x42000800, 0x80002001, 0x0401f04d, 0x5c000000,
+ 0x4c000000, 0x4803c857, 0x4807c857, 0x0401f003,
+ 0x42000800, 0x00000001, 0x59325809, 0x832c0500,
+ 0x00ff0000, 0x04000013, 0x592c1000, 0x592c040b,
+ 0x59301808, 0x480a6009, 0x8c000510, 0x0402000e,
+ 0x48065a07, 0x820c0500, 0x04000800, 0x82000580,
+ 0x04000800, 0x04000019, 0x0201f800, 0x00020401,
+ 0x417a7800, 0x59300009, 0x80025d40, 0x04020772,
+ 0x1c01f000, 0x82046d80, 0x00000001, 0x040207f1,
+ 0x456a5800, 0x412ed000, 0x815eb800, 0x592c0001,
+ 0x80000d40, 0x04020006, 0x59c80000, 0x82000540,
+ 0x00001200, 0x48039000, 0x0401f7ee, 0x0201f800,
+ 0x000203ef, 0x0401f7eb, 0x59300020, 0x48025c10,
+ 0x0401f7e6, 0x59840000, 0x80000540, 0x04020002,
+ 0x1c01f000, 0x59840003, 0x80000540, 0x02020000,
+ 0x00106b26, 0x1c01f000, 0x48066004, 0x497a6000,
+ 0x497a6001, 0x59a80006, 0x8c000504, 0x04020005,
+ 0x8d0e1d32, 0x02000800, 0x0010108a, 0x850e1d72,
+ 0x59bc00ea, 0x8c000516, 0x040207fe, 0x83300400,
+ 0xa0000000, 0x480378e1, 0x1c01f000, 0x59300004,
+ 0x82000500, 0x00000100, 0x80040d40, 0x48066004,
+ 0x59bc00ea, 0x8c000516, 0x040207fe, 0x83300400,
+ 0x40000000, 0x480378e1, 0x1c01f000, 0x59bc00ea,
+ 0x82001500, 0xb0000018, 0x02020000, 0x001071ee,
+ 0x8c000510, 0x0400002a, 0x59bc10e0, 0x82080500,
+ 0xfffff000, 0x0402000a, 0x80080108, 0x820a3500,
+ 0x0000000f, 0x4803c857, 0x1201f000, 0x001071f4,
+ 0x84000510, 0x48026004, 0x0401f016, 0x840a653e,
+ 0x59300004, 0x8c000520, 0x040007fa, 0x82000500,
+ 0xfffefeff, 0x48026004, 0x8c08153e, 0x04020005,
+ 0x42027000, 0x00000013, 0x0401f858, 0x0401f009,
+ 0x59300004, 0x8c000514, 0x04000003, 0x0401ff89,
+ 0x0401f02e, 0x42027000, 0x00000049, 0x0401f84f,
+ 0x59bc00ea, 0x82001500, 0xb0000018, 0x02020000,
+ 0x001071ee, 0x8c000510, 0x040207d8, 0x1c01f000,
+ 0x59a80257, 0x81640480, 0x04001019, 0x41626000,
+ 0x41580000, 0x59300a03, 0x82040d80, 0x00000000,
+ 0x04020009, 0x4a026203, 0x00000008, 0x8166c840,
+ 0x8332c400, 0x0000002c, 0x81600480, 0x04021009,
+ 0x1c01f000, 0x83326400, 0x0000002c, 0x81300c80,
+ 0x040017f1, 0x42026000, 0x00111d44, 0x0401f7ee,
+ 0x837ac540, 0x00111d44, 0x1c01f000, 0x42000000,
+ 0x0010d52c, 0x0201f800, 0x0010c50a, 0x4967c857,
+ 0x80026580, 0x1c01f000, 0x83300480, 0x00111d44,
+ 0x02001800, 0x0010032f, 0x41580000, 0x81300480,
+ 0x0402100c, 0x457a6000, 0x4a026202, 0x0000ffff,
+ 0x04011000, 0x83300400, 0x00000003, 0x4803c840,
+ 0x4a03c842, 0x00000029, 0x8166c800, 0x1c01f000,
+ 0x41540000, 0x81300480, 0x02021800, 0x0010032f,
+ 0x59a80053, 0x49335052, 0x80000000, 0x48035053,
0x457a6000, 0x4a026202, 0x0000ffff, 0x04011000,
0x83300400, 0x00000003, 0x4803c840, 0x4a03c842,
- 0x00000029, 0x8166c800, 0x1c01f000, 0x41540000,
- 0x81300480, 0x02021800, 0x0010032e, 0x59a8004d,
- 0x4933504c, 0x80000000, 0x4803504d, 0x457a6000,
- 0x4a026202, 0x0000ffff, 0x04011000, 0x83300400,
- 0x00000003, 0x4803c840, 0x4a03c842, 0x00000029,
- 0x1c01f000, 0x4d340000, 0x4d240000, 0x5932481c,
- 0x5932680a, 0x59300407, 0x82000500, 0x0000001f,
- 0x0c01f804, 0x5c024800, 0x5c026800, 0x1c01f000,
- 0x00107f29, 0x00107f3c, 0x00107f56, 0x00020bec,
- 0x0010a521, 0x0010a53c, 0x00020c6d, 0x00107f29,
- 0x00107f3c, 0x00106abd, 0x00107f6f, 0x00107f29,
- 0x00107f29, 0x00107f29, 0x00107f29, 0x00107f29,
- 0x00109f64, 0x0010b4d2, 0x0010bbef, 0x0010bddf,
- 0x00107f29, 0x00107f29, 0x00107f29, 0x00107f29,
- 0x00107f29, 0x00107f29, 0x00107f29, 0x00107f29,
- 0x00107f29, 0x00107f29, 0x00107f29, 0x00107f29,
- 0x59300203, 0x82000c80, 0x0000000e, 0x02021800,
- 0x0010032e, 0x0c01f001, 0x00107f6d, 0x00108c8f,
- 0x00020c00, 0x00108eda, 0x00108f74, 0x00107f6d,
- 0x00107f6d, 0x00107f6d, 0x00108c74, 0x00107f6d,
- 0x00107f6d, 0x00107f6d, 0x00107f6d, 0x00109176,
- 0x83380480, 0x00000058, 0x04021007, 0x83380480,
- 0x00000040, 0x04001004, 0x4d2c0000, 0x0c01f803,
- 0x5c025800, 0x1c01f000, 0x00108d19, 0x00108d19,
- 0x00108d19, 0x00108d19, 0x00108d19, 0x00108d1b,
- 0x00108df3, 0x00108d19, 0x00108d19, 0x00108d19,
- 0x00108d19, 0x00108d19, 0x00108d19, 0x00108d19,
- 0x00108d19, 0x00108d19, 0x00108d19, 0x00108d19,
- 0x00108d19, 0x00108df7, 0x00020c22, 0x00108d19,
- 0x00108df6, 0x00108df8, 0x59325809, 0x59300812,
- 0x59301402, 0x59340200, 0x8c00050e, 0x04020025,
- 0x0401f832, 0x04000005, 0x4a025a05, 0x00000103,
- 0x497a580a, 0x0401f00c, 0x4a025a05, 0x00000103,
- 0x4a025a07, 0x00000000, 0x497a580a, 0x40040000,
- 0x0201f800, 0x0010a2e2, 0x80000d40, 0x02020800,
- 0x00108f3f, 0x48065808, 0x480a5c07, 0x59300008,
- 0x82000500, 0x04000800, 0x82000580, 0x04000800,
- 0x04000017, 0x0201f800, 0x000203ef, 0x5934000f,
- 0x5934140b, 0x80081040, 0x04001002, 0x480a6c0b,
- 0x80000540, 0x02020800, 0x0002035a, 0x0401f752,
- 0x592c020b, 0x8c000502, 0x040007da, 0x800409c0,
- 0x040007de, 0x592c0209, 0x8c00050e, 0x040207db,
- 0x4933c857, 0x0201f000, 0x00109ac7, 0x59300220,
- 0x48025c10, 0x0401f7e8, 0x592c020b, 0x8c000500,
- 0x04000010, 0x59300016, 0x592c3810, 0x801c3c80,
- 0x0400000c, 0x4a025a07, 0x00000015, 0x8c1c3d3e,
- 0x04000005, 0x4a025a07, 0x00000007, 0x801c3880,
- 0x801c3800, 0x481fc857, 0x821c0d40, 0x00000000,
- 0x1c01f000, 0x59300203, 0x82003480, 0x0000000e,
- 0x02021800, 0x0010032e, 0x0c01f001, 0x0010a55b,
- 0x00020c81, 0x0010ad19, 0x0010ad27, 0x00020c9d,
- 0x0010a55b, 0x0010ae1d, 0x00020cbc, 0x0010a55b,
- 0x0010a55b, 0x0010a55b, 0x0010a55b, 0x0010a55b,
- 0x0010a55b, 0x83380580, 0x00000013, 0x02020000,
- 0x0010aca0, 0x59300403, 0x82027480, 0x00000044,
- 0x02021800, 0x0010032e, 0x82000480, 0x00000040,
- 0x02001800, 0x0010032e, 0x0c01f001, 0x0010acfd,
- 0x00020c93, 0x0010acff, 0x0010ad11, 0x59325809,
- 0x832c0500, 0x00ff0000, 0x04000005, 0x592c0c0b,
- 0x8c040d1a, 0x02020000, 0x0010ad0c, 0x0401fe62,
- 0x0401f701, 0x83380580, 0x00000048, 0x04000007,
- 0x83380580, 0x00000053, 0x02000000, 0x0010adbf,
- 0x0201f800, 0x0010032e, 0x59300028, 0x59301012,
- 0x5930080a, 0x58040a00, 0x8c040d0e, 0x02020000,
- 0x0010ad9b, 0x800811c0, 0x02020000, 0x0010ada8,
- 0x59300028, 0x80000540, 0x02020000, 0x0010adb6,
- 0x59325809, 0x592c040b, 0x8c00051e, 0x02000000,
- 0x0010ad91, 0x42027000, 0x00000041, 0x0401f001,
- 0x83380480, 0x00000054, 0x02021800, 0x0010032e,
- 0x83380480, 0x00000040, 0x02001000, 0x0010addc,
- 0x0c01f001, 0x0010ade8, 0x00020cd9, 0x0010adf4,
- 0x0010adfb, 0x0010ade8, 0x0010ade8, 0x0010ade8,
- 0x0010ade8, 0x0010adea, 0x0010adef, 0x0010adef,
- 0x0010ade8, 0x0010ade8, 0x0010ade8, 0x0010ade8,
- 0x0010adef, 0x0010ade8, 0x0010adef, 0x0010ade8,
- 0x0010adea, 0x4a026203, 0x00000001, 0x493a6403,
- 0x42000800, 0x80002042, 0x0401f660, 0x00000000,
+ 0x00000029, 0x1c01f000, 0x4d340000, 0x4d240000,
+ 0x5932481c, 0x5932680a, 0x59300407, 0x82000500,
+ 0x0000001f, 0x0c01f804, 0x5c024800, 0x5c026800,
+ 0x1c01f000, 0x001082c8, 0x001082db, 0x001082f5,
+ 0x00020b4d, 0x0010a9ac, 0x0010a9c7, 0x00020bce,
+ 0x001082c8, 0x001082db, 0x00106e1d, 0x0010830e,
+ 0x001082c8, 0x001082c8, 0x001082c8, 0x001082c8,
+ 0x001082c8, 0x0010a32c, 0x0010ba10, 0x0010c146,
+ 0x0010c336, 0x001082c8, 0x001082c8, 0x001082c8,
+ 0x001082c8, 0x001082c8, 0x001082c8, 0x001082c8,
+ 0x001082c8, 0x001082c8, 0x001082c8, 0x001082c8,
+ 0x001082c8, 0x59300203, 0x82000c80, 0x0000000e,
+ 0x02021800, 0x0010032f, 0x0c01f001, 0x0010830c,
+ 0x00108ffb, 0x00020b61, 0x00109246, 0x001092e3,
+ 0x0010830c, 0x0010830c, 0x0010830c, 0x00108fe0,
+ 0x0010830c, 0x0010830c, 0x0010830c, 0x0010830c,
+ 0x001094e8, 0x83380480, 0x00000058, 0x04021007,
+ 0x83380480, 0x00000040, 0x04001004, 0x4d2c0000,
+ 0x0c01f803, 0x5c025800, 0x1c01f000, 0x00109085,
+ 0x00109085, 0x00109085, 0x00109085, 0x00109085,
+ 0x00109087, 0x0010915f, 0x00109085, 0x00109085,
+ 0x00109085, 0x00109085, 0x00109085, 0x00109085,
+ 0x00109085, 0x00109085, 0x00109085, 0x00109085,
+ 0x00109085, 0x00109085, 0x00109163, 0x00020b83,
+ 0x00109085, 0x00109162, 0x00109164, 0x59325809,
+ 0x59300812, 0x59301402, 0x59340200, 0x8c00050e,
+ 0x04020025, 0x0401f832, 0x04000005, 0x4a025a05,
+ 0x00000103, 0x497a580a, 0x0401f00c, 0x4a025a05,
+ 0x00000103, 0x4a025a07, 0x00000000, 0x497a580a,
+ 0x40040000, 0x0201f800, 0x0010a6e6, 0x80000d40,
+ 0x02020800, 0x001092ab, 0x48065808, 0x480a5c07,
+ 0x59300008, 0x82000500, 0x04000800, 0x82000580,
+ 0x04000800, 0x04000017, 0x0201f800, 0x00020401,
+ 0x5934000f, 0x5934140b, 0x80081040, 0x04001002,
+ 0x480a6c0b, 0x80000540, 0x02020800, 0x00020361,
+ 0x0401f752, 0x592c020b, 0x8c000502, 0x040007da,
+ 0x800409c0, 0x040007de, 0x592c0209, 0x8c00050e,
+ 0x040207db, 0x4933c857, 0x0201f000, 0x00109e77,
+ 0x59300220, 0x48025c10, 0x0401f7e8, 0x592c020b,
+ 0x8c000500, 0x04000010, 0x59300016, 0x592c3810,
+ 0x801c3c80, 0x0400000c, 0x4a025a07, 0x00000015,
+ 0x8c1c3d3e, 0x04000005, 0x4a025a07, 0x00000007,
+ 0x801c3880, 0x801c3800, 0x481fc857, 0x821c0d40,
+ 0x00000000, 0x1c01f000, 0x59300203, 0x82003480,
+ 0x0000000e, 0x02021800, 0x0010032f, 0x0c01f001,
+ 0x0010a9e6, 0x00020be2, 0x0010b1bb, 0x0010b1c9,
+ 0x00020bfe, 0x0010a9e6, 0x0010b2bf, 0x00020c1d,
+ 0x0010a9e6, 0x0010a9e6, 0x0010a9e6, 0x0010a9e6,
+ 0x0010a9e6, 0x0010a9e6, 0x83380580, 0x00000013,
+ 0x02020000, 0x0010b142, 0x59300403, 0x82027480,
+ 0x00000044, 0x02021800, 0x0010032f, 0x82000480,
+ 0x00000040, 0x02001800, 0x0010032f, 0x0c01f001,
+ 0x0010b19f, 0x00020bf4, 0x0010b1a1, 0x0010b1b3,
+ 0x59325809, 0x832c0500, 0x00ff0000, 0x04000005,
+ 0x592c0c0b, 0x8c040d1a, 0x02020000, 0x0010b1ae,
+ 0x0401fe5c, 0x0401f701, 0x83380580, 0x00000048,
+ 0x04000007, 0x83380580, 0x00000053, 0x02000000,
+ 0x0010b262, 0x0201f800, 0x0010032f, 0x59300028,
+ 0x59301012, 0x5930080a, 0x58040a00, 0x8c040d0e,
+ 0x02020000, 0x0010b23e, 0x800811c0, 0x02020000,
+ 0x0010b24b, 0x59300028, 0x80000540, 0x02020000,
+ 0x0010b259, 0x59325809, 0x592c040b, 0x8c00051e,
+ 0x02000000, 0x0010b234, 0x42027000, 0x00000041,
+ 0x0401f001, 0x83380480, 0x00000054, 0x02021800,
+ 0x0010032f, 0x83380480, 0x00000040, 0x02001000,
+ 0x0010b27e, 0x0c01f001, 0x0010b28a, 0x00020c3a,
+ 0x0010b296, 0x0010b29d, 0x0010b28a, 0x0010b28a,
+ 0x0010b28a, 0x0010b28a, 0x0010b28c, 0x0010b291,
+ 0x0010b291, 0x0010b28a, 0x0010b28a, 0x0010b28a,
+ 0x0010b28a, 0x0010b291, 0x0010b28a, 0x0010b291,
+ 0x0010b28a, 0x0010b28c, 0x4a026203, 0x00000001,
+ 0x493a6403, 0x42000800, 0x80002042, 0x0401f660,
0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x440ec717, 0x00000000,
- 0x00000000, 0x0010f600, 0x00001a9a, 0x42000000,
- 0x001110d0, 0x42001000, 0x001110c1, 0x48001000,
- 0x42013800, 0x001114d0, 0x42000000, 0x001110c0,
- 0x489c0000, 0x409d4000, 0x409d6800, 0x1c01f000,
- 0x4200d000, 0x0000000d, 0x42000000, 0x00000002,
- 0x4800d000, 0x0401f7fb, 0x4200d000, 0x0000000d,
- 0x42000000, 0x00000001, 0x4800d000, 0x0401f7fb,
- 0x1c01f000, 0x809d3840, 0x48813800, 0x4933c857,
- 0x5931040b, 0x82817480, 0x00000038, 0x0400000d,
- 0x0400100c, 0x82810480, 0x00000038, 0x4a025a06,
- 0x00000038, 0x0201f800, 0x00103963, 0x40c65800,
- 0x80c589c0, 0x040207f4, 0x4178d000, 0x0401f004,
- 0x48825a06, 0x4200d000, 0x00000001, 0x40698800,
- 0x589d0000, 0x809d3800, 0x1c01f000, 0x42038000,
- 0x00007700, 0x4a038006, 0x30000000, 0x59c0d007,
- 0x8268e500, 0x00000020, 0x8c68d50a, 0x040207fc,
- 0x59c0d006, 0x59a0d20a, 0x59a0dc0a, 0x806c00e0,
- 0x8068d540, 0x486b8001, 0x59a0d20f, 0x59a0dc0f,
- 0x806c00e0, 0x8068d540, 0x486b8000, 0x59a0d20c,
- 0x486b8002, 0x59a0d20c, 0x486b8003, 0x59a0d20c,
- 0x486b8005, 0x48739009, 0x59e0d003, 0x8268d540,
- 0x00008060, 0x486bc003, 0x1c01f000, 0x59a17002,
- 0x48bbc857, 0x59a0d002, 0x8068d1c0, 0x04020032,
- 0x59a8d80f, 0x826ce500, 0x000000ff, 0x59a97063,
- 0x48bb8880, 0x59c4d0a3, 0x8268d540, 0x00002008,
- 0x8468d53a, 0x486b88a3, 0x59c4d008, 0x8468d54e,
- 0x8268d500, 0xffffffe1, 0x486b8808, 0x59c8d040,
- 0x8468d534, 0x486b9040, 0x59a0d207, 0x82697480,
- 0x00000044, 0x0400001d, 0x8070d0d0, 0x807000e0,
- 0x8068d540, 0x486b9120, 0x8270d540, 0x01000000,
- 0x486b9121, 0x4a039123, 0x08210008, 0x48739122,
- 0x497b9124, 0x59a8d464, 0x8068d000, 0x486b5464,
- 0x59a8d464, 0x8068d0e0, 0x8268d540, 0x0000aaaa,
- 0x486b9125, 0x497b9126, 0x497b9127, 0x59a0d207,
- 0x82697480, 0x00000044, 0x04000011, 0x4a039100,
- 0x0000e9a0, 0x0401f010, 0x806cd0d0, 0x8268d540,
- 0x00000011, 0x486b9120, 0x826cdd00, 0x00ffffff,
- 0x826cd540, 0x32000000, 0x486b9121, 0x4a039123,
- 0xe1290008, 0x486f9122, 0x0401f7e2, 0x4a039100,
- 0x0000e980, 0x1c01f000, 0x59c8d007, 0x8c68d500,
- 0x04000003, 0x4a03900d, 0x00000030, 0x1c01f000,
- 0x0201f800, 0x00106e2e, 0x59b8d0ea, 0x8268d500,
- 0x00000007, 0x82697480, 0x00000003, 0x04000002,
- 0x0401f003, 0x4a0370e8, 0x00000001, 0x1c01f000,
- 0x4a038805, 0x00020000, 0x4200d000, 0x0000003c,
- 0x0201f800, 0x001012d1, 0x4a038891, 0x0000ffff,
- 0x59c97035, 0x48bb9035, 0x4a03900d, 0x00000040,
- 0x42038000, 0x00007700, 0x0201f800, 0x00100ca8,
- 0x4a038006, 0x20000000, 0x42038000, 0x00007720,
- 0x0201f800, 0x00100ca8, 0x4a038006, 0x20000000,
- 0x4a03a005, 0x20000000, 0x4a03a005, 0x30000000,
- 0x4a03b805, 0x30000001, 0x4a03b805, 0x20000000,
- 0x59d0d006, 0x8c68d50a, 0x040207fe, 0x59dcd006,
- 0x8c68d50a, 0x040207fb, 0x1c01f000, 0x4203a000,
- 0x00007600, 0x4200d000, 0x00000040, 0x0201f800,
- 0x001012d1, 0x4a03a00a, 0x00000001, 0x4a03a005,
- 0x20000000, 0x59d0d006, 0x4a03a005, 0x30000000,
- 0x59d0d006, 0x8c68d50a, 0x040207fe, 0x59d0d005,
- 0x59a0d211, 0x59a0dc11, 0x806c00e0, 0x8068d540,
- 0x486ba001, 0x59a0d20e, 0x59a0dc0e, 0x806c00e0,
- 0x8068d540, 0x486ba000, 0x59a0d20c, 0x486ba003,
- 0x59a0d20c, 0x486ba002, 0x59a0d20c, 0x486ba008,
- 0x1c01f000, 0x58ed7003, 0x48bbc857, 0x58ed7005,
- 0x48bbc857, 0x58ed7006, 0x48bbc857, 0x58ed7007,
- 0x48bbc857, 0x58ed7001, 0x48bbc857, 0x48efc857,
- 0x58ed7008, 0x48bbc857, 0x58ecd005, 0x8068d1c0,
- 0x04000005, 0x40ecd000, 0x0201f800, 0x001005fc,
- 0x0401f006, 0x58ecd003, 0x58ecd806, 0x58ece001,
- 0x0201f800, 0x0010032b, 0x1c01f000, 0x829d3c80,
- 0x00000006, 0x48813800, 0x48853801, 0x48893802,
- 0x488d3803, 0x48913804, 0x48953805, 0x59a10407,
- 0x4883c857, 0x59a0da0e, 0x59a0d40e, 0x806800e0,
- 0x806d2d40, 0x59a0da11, 0x59a0d411, 0x806800e0,
- 0x806d2540, 0x59a10a0c, 0x830d1500, 0x00000080,
- 0x8d0e1d0e, 0x04020020, 0x59a8d21b, 0x8c68d50a,
- 0x04000018, 0x599cd201, 0x40840000, 0x80697480,
- 0x040010c5, 0x82811d00, 0x00008000, 0x040200c6,
- 0x59a8d00d, 0x41640000, 0x80697480, 0x04000015,
- 0x4967c857, 0x59a9704f, 0x48bbc857, 0x59a9704e,
- 0x48bbc857, 0x59a9704d, 0x48bbc857, 0x4a034407,
- 0x00000018, 0x0201f800, 0x00102309, 0x0401f12d,
- 0x4a034407, 0x00000005, 0x0201f800, 0x00102309,
- 0x0401f128, 0x0201f800, 0x00102311, 0x0401f125,
- 0x59a8d04e, 0x59a8004d, 0x80697480, 0x040207e9,
- 0x0201f800, 0x00106e3a, 0x598e600f, 0x0201f800,
- 0x0010715a, 0x0201f800, 0x00106e3a, 0x408e3000,
- 0x0201f800, 0x001074f6, 0x59926004, 0x813261c0,
- 0x0400000d, 0x0201f800, 0x00107073, 0x0201f800,
- 0x00106e0c, 0x0201f800, 0x00106e15, 0x42027800,
- 0x00001000, 0x42028000, 0x0000002e, 0x0201f800,
- 0x001101fa, 0x811a3000, 0x83197480, 0x00000004,
- 0x040007ec, 0x040017eb, 0x0201f800, 0x001007f6,
- 0x0201f800, 0x00102aa7, 0x497b5061, 0x497b4408,
- 0x4201d000, 0x003d0900, 0x0201f800, 0x00106695,
- 0x59c50880, 0x59c510a3, 0x497b4002, 0x0401febc,
- 0x0401ff5b, 0x4a03a005, 0x10000000, 0x59c4d005,
- 0x8268d540, 0x000000f0, 0x486b8805, 0x0401fed4,
- 0x0201f800, 0x00102ab0, 0x40c50000, 0x80c589c0,
- 0x04020020, 0x59c8d001, 0x8068d1c0, 0x0402001d,
- 0x59dcd006, 0x8268d500, 0x43000f80, 0x0400000a,
- 0x59dcd006, 0x82697480, 0x00000000, 0x83f17500,
- 0x0c000000, 0x04000004, 0x82b97580, 0x0c000000,
- 0x0402000e, 0x59d0d006, 0x8268d500, 0x43040700,
- 0x040007e8, 0x59d0d006, 0x82697480, 0x00000000,
- 0x83f17500, 0x0c000000, 0x040007e2, 0x82b97480,
- 0x0c000000, 0x040007df, 0x4a034408, 0x0000dddd,
- 0x808101c0, 0x04020092, 0x59a0d408, 0x82697480,
- 0x0000dddd, 0x0400008e, 0x59c0d008, 0x8268d500,
- 0x0fffffff, 0x59c8d818, 0x826c0500, 0xf0000000,
- 0x8068d540, 0x486b8008, 0x0201f800, 0x00100ca8,
- 0x59c0d806, 0x4a038006, 0x10000000, 0x59c0d809,
- 0x4883900d, 0x59c8d020, 0x8068e130, 0x59c8d020,
- 0x82690500, 0x00ffffff, 0x59c8d021, 0x8268fd00,
- 0x00ffffff, 0x4a03900d, 0x00000001, 0x59c8d020,
- 0x8068e930, 0x59c4f005, 0x826cd500, 0x00e00000,
- 0x04020004, 0x82717480, 0x00000032, 0x04000075,
- 0x486fc857, 0x4873c857, 0x4877c857, 0x4883c857,
- 0x487fc857, 0x487bc857, 0x59a9700f, 0x48bbc857,
- 0x0201f800, 0x00102ac7, 0x4a035061, 0x00000001,
- 0x4200d000, 0x00000064, 0x0401f004, 0x8068d1c0,
- 0x04000072, 0x8068d040, 0x59c0d807, 0x8c6cdd04,
- 0x040007fb, 0x0401fecb, 0x0201f800, 0x001071f9,
- 0x0401febc, 0x4201d000, 0x000186a0, 0x0201f800,
- 0x00106695, 0x488b88a3, 0x48878880, 0x59a8d061,
- 0x8068d1c0, 0x04020050, 0x0201f800, 0x001022c6,
- 0x0401f07c, 0x4887c857, 0x0201f800, 0x0010230d,
- 0x0401f078, 0x0201f800, 0x00107ef5, 0x40c66000,
- 0x80c589c0, 0x04000041, 0x0201f800, 0x00103963,
- 0x40c65800, 0x80c589c0, 0x04000022, 0x4a02601c,
- 0x0010cfd1, 0x48898a05, 0x48898c05, 0x4882620b,
- 0x4886640b, 0x59a0d40f, 0x8068d0e0, 0x59a0da0f,
- 0x406c0000, 0x8068d540, 0x486a600c, 0x59a0d40a,
- 0x8068d0e0, 0x59a0da0a, 0x406c0000, 0x8068d540,
- 0x486a600d, 0x59a0d40e, 0x8068d0e0, 0x59a0da0e,
- 0x406c0000, 0x8068d540, 0x486a600e, 0x59a0d411,
- 0x8068d0e0, 0x59a0da11, 0x406c0000, 0x8068d540,
- 0x486a600f, 0x0401fdfc, 0x80c589c0, 0x04020006,
- 0x0201f800, 0x00107eb1, 0x4a034407, 0x00000002,
- 0x0401f71e, 0x48ee602a, 0x58ee580c, 0x4a01d801,
- 0x00000001, 0x592cd206, 0x4869d805, 0x832cd400,
- 0x00000007, 0x4869d803, 0x4895d806, 0x4891d807,
- 0x4a01d808, 0x0010f8a0, 0x4a034000, 0x00000001,
- 0x49334001, 0x0401fec0, 0x0401f036, 0x4a035061,
- 0x00000001, 0x0401f7a8, 0x4a034407, 0x00000003,
- 0x0401f706, 0x0201f800, 0x00102315, 0x0401f02d,
- 0x82757480, 0x000000e1, 0x0402078a, 0x407c0000,
- 0x80817480, 0x04020787, 0x59a8d00f, 0x80697480,
- 0x04020784, 0x8278d500, 0x000000f0, 0x04020781,
- 0x0401fe4e, 0x0401f78b, 0x4a035061, 0x00000001,
- 0x0201f800, 0x001018f1, 0x80c589c0, 0x04000008,
- 0x59c4d005, 0x8268d500, 0x000000f0, 0x04000007,
- 0x4a034408, 0x0000bbbb, 0x0401f787, 0x4a034408,
- 0x0000aaaa, 0x0401f784, 0x0201f800, 0x00102ab0,
- 0x80c57040, 0x04000008, 0x59c0d007, 0x8268d500,
- 0x000501c0, 0x0400077c, 0x4a034408, 0x0000dddd,
- 0x0401f779, 0x4a034408, 0x0000cccc, 0x0401f776,
- 0x589d2805, 0x589d2004, 0x589d1803, 0x589d1002,
- 0x589d0801, 0x589d0000, 0x829d3c00, 0x00000006,
- 0x1c01f000, 0x809d3840, 0x48813800, 0x592cd006,
- 0x82697480, 0x01000000, 0x04000016, 0x41310000,
- 0x59a26001, 0x48ee602a, 0x58ee580c, 0x4979d801,
- 0x592cd206, 0x4869d805, 0x832cd400, 0x00000007,
- 0x4869d803, 0x5931700c, 0x48b9d806, 0x5931700d,
- 0x48b9d807, 0x4a01d808, 0x0010f8a0, 0x4a034000,
- 0x00000001, 0x40826000, 0x0401fe67, 0x0401f009,
- 0x41310000, 0x59a26001, 0x4933c857, 0x0201f800,
- 0x00107eb4, 0x40826000, 0x0201f800, 0x00102315,
- 0x589d0000, 0x809d3800, 0x1c01f000, 0x829d3c80,
- 0x00000005, 0x48813800, 0x48853801, 0x48893802,
- 0x488d3803, 0x48913804, 0x412d1000, 0x41310800,
- 0x59a26001, 0x4069d800, 0x586b400a, 0x5868d002,
- 0x82697480, 0x00000200, 0x0400003c, 0x58ee580c,
- 0x59a0d800, 0x806cd000, 0x486b4000, 0x592d0001,
- 0x0401f005, 0x40825800, 0x806cd840, 0x04000004,
- 0x58810001, 0x808101c0, 0x040207fb, 0x808101c0,
- 0x04000012, 0x58ed000c, 0x832cd400, 0x00000007,
- 0x4869d803, 0x592cd206, 0x4869d805, 0x5880d205,
- 0x8268d580, 0x00000103, 0x8068d080, 0x8068d000,
- 0x8068d13e, 0x4869d801, 0x0401fe2f, 0x40866000,
- 0x40825800, 0x0401f03b, 0x58ee580c, 0x592cd205,
- 0x82697480, 0x00000103, 0x04000030, 0x41351800,
- 0x41452000, 0x592cd405, 0x8468d55e, 0x486a5c05,
- 0x42028800, 0x000007fd, 0x4200d000, 0x00fffffd,
- 0x0201f800, 0x00104622, 0x40c66800, 0x80c589c0,
- 0x04000010, 0x0201f800, 0x00109c54, 0x80c589c0,
- 0x04000018, 0x40866000, 0x4881d801, 0x4a01d808,
- 0x0010f87a, 0x0401f00f, 0x0201f800, 0x00102301,
- 0x0201f800, 0x00107eb1, 0x40866000, 0x0401f019,
- 0x59a26001, 0x0201f800, 0x00107eb1, 0x40866000,
- 0x4a034407, 0x00000002, 0x0201f800, 0x00102309,
- 0x408a5800, 0x408e6800, 0x40928800, 0x0401f00d,
- 0x0201f800, 0x00107eb1, 0x40866000, 0x4a034407,
- 0x00000004, 0x0401f7f5, 0x0201f800, 0x00107eb1,
- 0x40866000, 0x0201f800, 0x001022c6, 0x408a5800,
- 0x589d2004, 0x589d1803, 0x589d1002, 0x589d0801,
- 0x589d0000, 0x829d3c00, 0x00000005, 0x1c01f000,
- 0x829d3c80, 0x00000004, 0x48813800, 0x48853801,
- 0x48893802, 0x488d3803, 0x40690800, 0x497bc856,
- 0x59a0d20d, 0x8068d1c0, 0x0400001e, 0x5884d001,
- 0x4178d800, 0x82697480, 0x00000002, 0x04000051,
- 0x59a26001, 0x5930d00e, 0x4068d800, 0x8068d1c0,
- 0x0400004c, 0x8068d040, 0x486a600e, 0x5932580c,
- 0x5930d80b, 0x586d1800, 0x586d1001, 0x586cd002,
- 0x82690500, 0xfffffffc, 0x5930d00d, 0x8068d000,
- 0x486a600d, 0x82697480, 0x00000005, 0x04000034,
- 0x826cd400, 0x00000003, 0x486a600b, 0x0401f012,
- 0x59a0d40c, 0x8068d0e0, 0x59a0da0c, 0x826c0500,
- 0x0000fffc, 0x80690540, 0x4883a003, 0x59a0d40e,
- 0x8068d0e0, 0x59a0da0e, 0x406c0000, 0x80691d40,
- 0x59a0d411, 0x8068d0e0, 0x59a0da11, 0x406c0000,
- 0x80691540, 0x4201d000, 0x00003a98, 0x0201f800,
- 0x00106695, 0x4883a002, 0x59a97062, 0x48bba008,
- 0x488fa000, 0x488ba001, 0x59d0d005, 0x4a03a005,
- 0x10000000, 0x4178d000, 0x04025002, 0x8068d000,
- 0x8068d1c0, 0x04020007, 0x5884d001, 0x8068d000,
- 0x48690801, 0x4200d800, 0x00000001, 0x0401f011,
- 0x4200d000, 0x0010f911, 0x4084d800, 0x4178e000,
- 0x0201f800, 0x0010032b, 0x0401f7f4, 0x497a600d,
- 0x592e5801, 0x812e59c0, 0x040007df, 0x492e600c,
- 0x832cdc00, 0x00000006, 0x486e600b, 0x0401f7da,
- 0x406d8800, 0x589d1803, 0x589d1002, 0x589d0801,
- 0x589d0000, 0x829d3c00, 0x00000004, 0x1c01f000,
- 0x809d3840, 0x48813800, 0x40690000, 0x59d0d006,
- 0x8268d500, 0x43040700, 0x0400000a, 0x59d0d006,
- 0x82697480, 0x00000000, 0x83f17500, 0x0c000000,
- 0x04000004, 0x82b97580, 0x0c000000, 0x0402003d,
- 0x59a0d20d, 0x8068d1c0, 0x0400000f, 0x59d17006,
- 0x48bbc857, 0x59d0d006, 0x8c68d504, 0x0400000a,
- 0x59d0d006, 0x82697480, 0x00000000, 0x83f17500,
- 0x0c000000, 0x04000004, 0x82b97580, 0x0c000000,
- 0x04020010, 0x0401f033, 0x4200d000, 0x0010f979,
- 0x4080e000, 0x0201f800, 0x0010032b, 0x59d0d006,
+ 0x00000000, 0x00000000, 0x00000000, 0x4d19730b,
+ 0x00000000, 0x00000000, 0x0010fd00, 0x00001b58,
+ 0x42000000, 0x00111890, 0x42001000, 0x00111881,
+ 0x48001000, 0x42013800, 0x00111c90, 0x42000000,
+ 0x00111880, 0x489c0000, 0x409d4000, 0x409d6800,
+ 0x1c01f000, 0x4200d000, 0x0000000d, 0x42000000,
+ 0x00000002, 0x4800d000, 0x0401f7fb, 0x4200d000,
+ 0x0000000d, 0x42000000, 0x00000001, 0x4800d000,
+ 0x0401f7fb, 0x1c01f000, 0x809d3840, 0x48813800,
+ 0x4933c857, 0x5931040b, 0x82817480, 0x00000038,
+ 0x0400000d, 0x0400100c, 0x82810480, 0x00000038,
+ 0x4a025a06, 0x00000038, 0x0201f800, 0x00103a01,
+ 0x40c65800, 0x80c589c0, 0x040207f4, 0x4178d000,
+ 0x0401f004, 0x48825a06, 0x4200d000, 0x00000001,
+ 0x40698800, 0x589d0000, 0x809d3800, 0x1c01f000,
+ 0x42038000, 0x00007700, 0x4a038006, 0x30000000,
+ 0x59c0d007, 0x8268e500, 0x00000020, 0x8c68d50a,
+ 0x040207fc, 0x59c0d006, 0x59a0d20a, 0x59a0dc0a,
+ 0x806c00e0, 0x8068d540, 0x486b8001, 0x59a0d20f,
+ 0x59a0dc0f, 0x806c00e0, 0x8068d540, 0x486b8000,
+ 0x59a0d20c, 0x486b8002, 0x59a0d20c, 0x486b8003,
+ 0x59a0d20c, 0x486b8005, 0x48739009, 0x59e0d003,
+ 0x8268d540, 0x00008060, 0x486bc003, 0x1c01f000,
+ 0x59a17002, 0x48bbc857, 0x59a0d002, 0x8068d1c0,
+ 0x04020032, 0x59a8d815, 0x826ce500, 0x000000ff,
+ 0x59a97071, 0x48bb8880, 0x59c4d0a3, 0x8268d540,
+ 0x00002008, 0x8468d53a, 0x486b88a3, 0x59c4d008,
+ 0x8468d54e, 0x8268d500, 0xffffffe1, 0x486b8808,
+ 0x59c8d040, 0x8468d534, 0x486b9040, 0x59a0d207,
+ 0x82697480, 0x00000044, 0x0400001d, 0x8070d0d0,
+ 0x807000e0, 0x8068d540, 0x486b9120, 0x8270d540,
+ 0x01000000, 0x486b9121, 0x4a039123, 0x08210008,
+ 0x48739122, 0x497b9124, 0x59a8d472, 0x8068d000,
+ 0x486b5472, 0x59a8d472, 0x8068d0e0, 0x8268d540,
+ 0x0000aaaa, 0x486b9125, 0x497b9126, 0x497b9127,
+ 0x59a0d207, 0x82697480, 0x00000044, 0x04000011,
+ 0x4a039100, 0x0000e9a0, 0x0401f010, 0x806cd0d0,
+ 0x8268d540, 0x00000011, 0x486b9120, 0x826cdd00,
+ 0x00ffffff, 0x826cd540, 0x32000000, 0x486b9121,
+ 0x4a039123, 0xe1290008, 0x486f9122, 0x0401f7e2,
+ 0x4a039100, 0x0000e980, 0x1c01f000, 0x59c8d007,
+ 0x8c68d500, 0x04000003, 0x4a03900d, 0x00000030,
+ 0x1c01f000, 0x0201f800, 0x0010719d, 0x59b8d0ea,
+ 0x8268d500, 0x00000007, 0x82697480, 0x00000003,
+ 0x04000002, 0x0401f003, 0x4a0370e8, 0x00000001,
+ 0x1c01f000, 0x4a038805, 0x00020000, 0x4200d000,
+ 0x0000003c, 0x0201f800, 0x0010132b, 0x4a038891,
+ 0x0000ffff, 0x59c97035, 0x48bb9035, 0x4a03900d,
+ 0x00000040, 0x42038000, 0x00007700, 0x0201f800,
+ 0x00100ccd, 0x4a038006, 0x20000000, 0x42038000,
+ 0x00007720, 0x0201f800, 0x00100ccd, 0x4a038006,
+ 0x20000000, 0x4a03a005, 0x20000000, 0x59d0d006,
+ 0x4a03a005, 0x30000000, 0x4a03b805, 0x30000001,
+ 0x59dcd006, 0x4a03b805, 0x20000000, 0x59d0d006,
+ 0x8c68d50a, 0x040207fe, 0x59dcd006, 0x8c68d50a,
+ 0x040207fb, 0x1c01f000, 0x4203a000, 0x00007600,
+ 0x4200d000, 0x00000040, 0x0201f800, 0x0010132b,
+ 0x4a03a00a, 0x00000001, 0x4a03a005, 0x20000000,
+ 0x59d0d006, 0x4a03a005, 0x30000000, 0x59d0d006,
+ 0x8c68d50a, 0x040207fe, 0x59d0d005, 0x59a0d211,
+ 0x59a0dc11, 0x806c00e0, 0x8068d540, 0x486ba001,
+ 0x59a0d20e, 0x59a0dc0e, 0x806c00e0, 0x8068d540,
+ 0x486ba000, 0x59a0d20c, 0x486ba003, 0x59a0d20c,
+ 0x486ba002, 0x59a0d20c, 0x486ba008, 0x1c01f000,
+ 0x58ed7003, 0x48bbc857, 0x58ed7005, 0x48bbc857,
+ 0x58ed7006, 0x48bbc857, 0x58ed7007, 0x48bbc857,
+ 0x58ed7001, 0x48bbc857, 0x48efc857, 0x58ed7008,
+ 0x48bbc857, 0x58ecd005, 0x8068d1c0, 0x04000005,
+ 0x40ecd000, 0x0201f800, 0x00100612, 0x0401f006,
+ 0x58ecd003, 0x58ecd806, 0x58ece001, 0x0201f800,
+ 0x0010032c, 0x1c01f000, 0x829d3c80, 0x00000006,
+ 0x48813800, 0x48853801, 0x48893802, 0x488d3803,
+ 0x48913804, 0x48953805, 0x59a10407, 0x4883c857,
+ 0x59a0da0e, 0x59a0d40e, 0x806800e0, 0x806d2d40,
+ 0x59a0da11, 0x59a0d411, 0x806800e0, 0x806d2540,
+ 0x59a10a0c, 0x830d1500, 0x00000080, 0x8d0e1d0e,
+ 0x04020020, 0x59a8d221, 0x8c68d50a, 0x04000018,
+ 0x599cd201, 0x40840000, 0x80697480, 0x040010c5,
+ 0x82811d00, 0x00008000, 0x040200c6, 0x59a8d013,
+ 0x41640000, 0x80697480, 0x04000015, 0x4967c857,
+ 0x59a97055, 0x48bbc857, 0x59a97054, 0x48bbc857,
+ 0x59a97053, 0x48bbc857, 0x4a034407, 0x00000018,
+ 0x0201f800, 0x0010239a, 0x0401f12d, 0x4a034407,
+ 0x00000005, 0x0201f800, 0x0010239a, 0x0401f128,
+ 0x0201f800, 0x001023a2, 0x0401f125, 0x59a8d054,
+ 0x59a80053, 0x80697480, 0x040207e9, 0x0201f800,
+ 0x001071a9, 0x598e600f, 0x0201f800, 0x001074c9,
+ 0x0201f800, 0x001071a9, 0x408e3000, 0x0201f800,
+ 0x00107864, 0x59926004, 0x813261c0, 0x0400000d,
+ 0x0201f800, 0x001073e2, 0x0201f800, 0x00107177,
+ 0x0201f800, 0x00107180, 0x42027800, 0x00001000,
+ 0x42028000, 0x0000002e, 0x0201f800, 0x001108fb,
+ 0x811a3000, 0x83197480, 0x00000004, 0x040007ec,
+ 0x040017eb, 0x0201f800, 0x00100817, 0x0201f800,
+ 0x00102b37, 0x497b506f, 0x497b4408, 0x4201d000,
+ 0x003d0900, 0x0201f800, 0x001069f5, 0x59c50880,
+ 0x59c510a3, 0x497b4002, 0x0401feba, 0x0401ff5b,
+ 0x4a03a005, 0x10000000, 0x59c4d005, 0x8268d540,
+ 0x000000f0, 0x486b8805, 0x0401fed2, 0x0201f800,
+ 0x00102b40, 0x40c50000, 0x80c589c0, 0x04020020,
+ 0x59c8d001, 0x8068d1c0, 0x0402001d, 0x59dcd006,
+ 0x8268d500, 0x43000f80, 0x0400000a, 0x59dcd006,
0x82697480, 0x00000000, 0x83f17500, 0x0c000000,
- 0x040007f5, 0x82b97480, 0x0c000000, 0x040007f2,
- 0x4a03a005, 0x20000000, 0x59d0d006, 0x8268d500,
- 0x43040700, 0x04020017, 0x5880d801, 0x806d7040,
- 0x04000017, 0x826d7480, 0x00000002, 0x040207e7,
- 0x4a010001, 0x00000001, 0x59d17006, 0x48bbc857,
+ 0x04000004, 0x82b97580, 0x0c000000, 0x0402000e,
+ 0x59d0d006, 0x8268d500, 0x43040700, 0x040007e8,
0x59d0d006, 0x82697480, 0x00000000, 0x83f17500,
- 0x0c000000, 0x04000004, 0x82b97580, 0x0c000000,
- 0x040207df, 0x4080d000, 0x0401ff4e, 0x0401f009,
- 0x4a034408, 0x0000dddd, 0x0401f006, 0x48690001,
- 0x4080d000, 0x0401ff47, 0x80c589c0, 0x040207f6,
- 0x589d0000, 0x809d3800, 0x1c01f000, 0x0201f800,
- 0x001018f1, 0x80c589c0, 0x04020002, 0x0401f009,
- 0x4a034407, 0x00000017, 0x0201f800, 0x00102309,
- 0x4203e000, 0x50000000, 0x497bc856, 0x0401f000,
- 0x1c01f000, 0x4068d800, 0x59c17009, 0x48bbc857,
- 0x59c0e009, 0x8270d500, 0x00e00000, 0x04000019,
- 0x586cd000, 0x486b4210, 0x586cd000, 0x8068d120,
- 0x486b4410, 0x8c70e52e, 0x0402000e, 0x8c70e52c,
- 0x04000004, 0x586cd00b, 0x8068d000, 0x4868d80b,
- 0x8c70e52a, 0x04000004, 0x586cd00d, 0x8068d000,
- 0x4868d80d, 0x4200d000, 0x00000001, 0x0401f005,
- 0x586cd00c, 0x8068d000, 0x4868d80c, 0x0401f7f0,
- 0x40698800, 0x1c01f000, 0x4068e000, 0x58697003,
- 0x48bbc857, 0x59a0d40d, 0x8068d1c0, 0x04000034,
- 0x5870d002, 0x4178d800, 0x82697480, 0x00000002,
- 0x04000050, 0x59a26000, 0x5930d00e, 0x4068d800,
- 0x8068d1c0, 0x0400004b, 0x8068d040, 0x486a600e,
- 0x5932580c, 0x5930d80b, 0x586cf800, 0x586cf001,
- 0x586cd002, 0x8268ed00, 0xfffffffc, 0x5930d00d,
- 0x8068d000, 0x486a600d, 0x82697480, 0x00000005,
- 0x04000033, 0x826cd400, 0x00000003, 0x486a600b,
- 0x487f8000, 0x487b8001, 0x48778002, 0x59c0d008,
- 0x8268d500, 0x0fffffff, 0x59c8d818, 0x826c0500,
- 0xf0000000, 0x8068d540, 0x486b8008, 0x59c0d006,
- 0x58717003, 0x48bb8006, 0x5870d002, 0x8068d000,
- 0x4868e002, 0x5870d004, 0x8468d540, 0x4868e004,
- 0x4200d800, 0x00000001, 0x0401f022, 0x5870d003,
- 0x4200d800, 0x00000001, 0x82697480, 0x10000000,
- 0x0402001c, 0x59a0d40f, 0x8068d0e0, 0x59a0da0f,
- 0x406c0000, 0x8068fd40, 0x59a0d40a, 0x8068d0e0,
- 0x59a0da0a, 0x406c0000, 0x8068f540, 0x59a0d40c,
+ 0x0c000000, 0x040007e2, 0x82b97480, 0x0c000000,
+ 0x040007df, 0x4a034408, 0x0000dddd, 0x808101c0,
+ 0x04020092, 0x59a0d408, 0x82697480, 0x0000dddd,
+ 0x0400008e, 0x59c0d008, 0x8268d500, 0x0fffffff,
+ 0x59c8d818, 0x826c0500, 0xf0000000, 0x8068d540,
+ 0x486b8008, 0x0201f800, 0x00100ccd, 0x59c0d806,
+ 0x4a038006, 0x10000000, 0x59c0d809, 0x4883900d,
+ 0x59c8d020, 0x8068e130, 0x59c8d020, 0x82690500,
+ 0x00ffffff, 0x59c8d021, 0x8268fd00, 0x00ffffff,
+ 0x4a03900d, 0x00000001, 0x59c8d020, 0x8068e930,
+ 0x59c4f005, 0x826cd500, 0x00e00000, 0x04020004,
+ 0x82717480, 0x00000032, 0x04000075, 0x486fc857,
+ 0x4873c857, 0x4877c857, 0x4883c857, 0x487fc857,
+ 0x487bc857, 0x59a97015, 0x48bbc857, 0x0201f800,
+ 0x00102b57, 0x4a03506f, 0x00000001, 0x4200d000,
+ 0x00000064, 0x0401f004, 0x8068d1c0, 0x04000072,
+ 0x8068d040, 0x59c0d807, 0x8c6cdd04, 0x040007fb,
+ 0x0401fec9, 0x0201f800, 0x00107568, 0x0401feba,
+ 0x4201d000, 0x000186a0, 0x0201f800, 0x001069f5,
+ 0x488b88a3, 0x48878880, 0x59a8d06f, 0x8068d1c0,
+ 0x04020050, 0x0201f800, 0x00102357, 0x0401f07c,
+ 0x4887c857, 0x0201f800, 0x0010239e, 0x0401f078,
+ 0x0201f800, 0x00108294, 0x40c66000, 0x80c589c0,
+ 0x04000041, 0x0201f800, 0x00103a01, 0x40c65800,
+ 0x80c589c0, 0x04000022, 0x4a02601c, 0x0010d5ef,
+ 0x48898a05, 0x48898c05, 0x4882620b, 0x4886640b,
+ 0x59a0d40f, 0x8068d0e0, 0x59a0da0f, 0x406c0000,
+ 0x8068d540, 0x486a600c, 0x59a0d40a, 0x8068d0e0,
+ 0x59a0da0a, 0x406c0000, 0x8068d540, 0x486a600d,
+ 0x59a0d40e, 0x8068d0e0, 0x59a0da0e, 0x406c0000,
+ 0x8068d540, 0x486a600e, 0x59a0d411, 0x8068d0e0,
+ 0x59a0da11, 0x406c0000, 0x8068d540, 0x486a600f,
+ 0x0401fdfa, 0x80c589c0, 0x04020006, 0x0201f800,
+ 0x00108250, 0x4a034407, 0x00000002, 0x0401f71e,
+ 0x48ee602a, 0x58ee580c, 0x4a01d801, 0x00000001,
+ 0x592cd206, 0x4869d805, 0x832cd400, 0x00000007,
+ 0x4869d803, 0x4895d806, 0x4891d807, 0x4a01d808,
+ 0x0010ffa2, 0x4a034000, 0x00000001, 0x49334001,
+ 0x0401fec0, 0x0401f036, 0x4a03506f, 0x00000001,
+ 0x0401f7a8, 0x4a034407, 0x00000003, 0x0401f706,
+ 0x0201f800, 0x001023a6, 0x0401f02d, 0x82757480,
+ 0x000000e1, 0x0402078a, 0x407c0000, 0x80817480,
+ 0x04020787, 0x59a8d015, 0x80697480, 0x04020784,
+ 0x8278d500, 0x000000f0, 0x04020781, 0x0401fe4c,
+ 0x0401f78b, 0x4a03506f, 0x00000001, 0x0201f800,
+ 0x0010195f, 0x80c589c0, 0x04000008, 0x59c4d005,
+ 0x8268d500, 0x000000f0, 0x04000007, 0x4a034408,
+ 0x0000bbbb, 0x0401f787, 0x4a034408, 0x0000aaaa,
+ 0x0401f784, 0x0201f800, 0x00102b40, 0x80c57040,
+ 0x04000008, 0x59c0d007, 0x8268d500, 0x000501c0,
+ 0x0400077c, 0x4a034408, 0x0000dddd, 0x0401f779,
+ 0x4a034408, 0x0000cccc, 0x0401f776, 0x589d2805,
+ 0x589d2004, 0x589d1803, 0x589d1002, 0x589d0801,
+ 0x589d0000, 0x829d3c00, 0x00000006, 0x1c01f000,
+ 0x809d3840, 0x48813800, 0x592cd006, 0x82697480,
+ 0x01000000, 0x04000016, 0x41310000, 0x59a26001,
+ 0x48ee602a, 0x58ee580c, 0x4979d801, 0x592cd206,
+ 0x4869d805, 0x832cd400, 0x00000007, 0x4869d803,
+ 0x5931700c, 0x48b9d806, 0x5931700d, 0x48b9d807,
+ 0x4a01d808, 0x0010ffa2, 0x4a034000, 0x00000001,
+ 0x40826000, 0x0401fe67, 0x0401f009, 0x41310000,
+ 0x59a26001, 0x4933c857, 0x0201f800, 0x00108253,
+ 0x40826000, 0x0201f800, 0x001023a6, 0x589d0000,
+ 0x809d3800, 0x1c01f000, 0x829d3c80, 0x00000005,
+ 0x48813800, 0x48853801, 0x48893802, 0x488d3803,
+ 0x48913804, 0x412d1000, 0x41310800, 0x59a26001,
+ 0x4069d800, 0x586b400a, 0x5868d002, 0x82697480,
+ 0x00000200, 0x0400003c, 0x58ee580c, 0x59a0d800,
+ 0x806cd000, 0x486b4000, 0x592d0001, 0x0401f005,
+ 0x40825800, 0x806cd840, 0x04000004, 0x58810001,
+ 0x808101c0, 0x040207fb, 0x808101c0, 0x04000012,
+ 0x58ed000c, 0x832cd400, 0x00000007, 0x4869d803,
+ 0x592cd206, 0x4869d805, 0x5880d205, 0x8268d580,
+ 0x00000103, 0x8068d080, 0x8068d000, 0x8068d13e,
+ 0x4869d801, 0x0401fe2f, 0x40866000, 0x40825800,
+ 0x0401f03b, 0x58ee580c, 0x592cd205, 0x82697480,
+ 0x00000103, 0x04000030, 0x41351800, 0x41452000,
+ 0x592cd405, 0x8468d55e, 0x486a5c05, 0x42028800,
+ 0x000007fd, 0x4200d000, 0x00fffffd, 0x0201f800,
+ 0x0010476e, 0x40c66800, 0x80c589c0, 0x04000010,
+ 0x0201f800, 0x0010a006, 0x80c589c0, 0x04000018,
+ 0x40866000, 0x4881d801, 0x4a01d808, 0x0010ff7c,
+ 0x0401f00f, 0x0201f800, 0x00102392, 0x0201f800,
+ 0x00108250, 0x40866000, 0x0401f019, 0x59a26001,
+ 0x0201f800, 0x00108250, 0x40866000, 0x4a034407,
+ 0x00000002, 0x0201f800, 0x0010239a, 0x408a5800,
+ 0x408e6800, 0x40928800, 0x0401f00d, 0x0201f800,
+ 0x00108250, 0x40866000, 0x4a034407, 0x00000004,
+ 0x0401f7f5, 0x0201f800, 0x00108250, 0x40866000,
+ 0x0201f800, 0x00102357, 0x408a5800, 0x589d2004,
+ 0x589d1803, 0x589d1002, 0x589d0801, 0x589d0000,
+ 0x829d3c00, 0x00000005, 0x1c01f000, 0x829d3c80,
+ 0x00000004, 0x48813800, 0x48853801, 0x48893802,
+ 0x488d3803, 0x40690800, 0x497bc856, 0x59a0d20d,
+ 0x8068d1c0, 0x0400001e, 0x5884d001, 0x4178d800,
+ 0x82697480, 0x00000002, 0x04000051, 0x59a26001,
+ 0x5930d00e, 0x4068d800, 0x8068d1c0, 0x0400004c,
+ 0x8068d040, 0x486a600e, 0x5932580c, 0x5930d80b,
+ 0x586d1800, 0x586d1001, 0x586cd002, 0x82690500,
+ 0xfffffffc, 0x5930d00d, 0x8068d000, 0x486a600d,
+ 0x82697480, 0x00000005, 0x04000034, 0x826cd400,
+ 0x00000003, 0x486a600b, 0x0401f012, 0x59a0d40c,
0x8068d0e0, 0x59a0da0c, 0x826c0500, 0x0000fffc,
- 0x8068ed40, 0x48778003, 0x0401f7d2, 0x497a600d,
- 0x592e5801, 0x812e59c0, 0x040007ce, 0x492e600c,
- 0x832cdc00, 0x00000006, 0x486e600b, 0x0401f7c9,
- 0x406d8800, 0x1c01f000, 0x809d3840, 0x48813800,
- 0x40690000, 0x59c0d007, 0x8268d500, 0x000507c0,
- 0x0400000a, 0x59c0d007, 0x82697480, 0x00000000,
- 0x83f17500, 0x0c000000, 0x04000004, 0x82b97580,
- 0x0c000000, 0x0402003c, 0x59a0d40d, 0x8068d1c0,
- 0x0400000c, 0x59c17007, 0x48bbc857, 0x59c0d007,
+ 0x80690540, 0x4883a003, 0x59a0d40e, 0x8068d0e0,
+ 0x59a0da0e, 0x406c0000, 0x80691d40, 0x59a0d411,
+ 0x8068d0e0, 0x59a0da11, 0x406c0000, 0x80691540,
+ 0x4201d000, 0x00003a98, 0x0201f800, 0x001069f5,
+ 0x4883a002, 0x59a97070, 0x48bba008, 0x488fa000,
+ 0x488ba001, 0x59d0d005, 0x4a03a005, 0x10000000,
+ 0x4178d000, 0x04025002, 0x8068d000, 0x8068d1c0,
+ 0x04020007, 0x5884d001, 0x8068d000, 0x48690801,
+ 0x4200d800, 0x00000001, 0x0401f011, 0x4200d000,
+ 0x00110013, 0x4084d800, 0x4178e000, 0x0201f800,
+ 0x0010032c, 0x0401f7f4, 0x497a600d, 0x592e5801,
+ 0x812e59c0, 0x040007df, 0x492e600c, 0x832cdc00,
+ 0x00000006, 0x486e600b, 0x0401f7da, 0x406d8800,
+ 0x589d1803, 0x589d1002, 0x589d0801, 0x589d0000,
+ 0x829d3c00, 0x00000004, 0x1c01f000, 0x809d3840,
+ 0x48813800, 0x40690000, 0x59d0d006, 0x8268d500,
+ 0x43040700, 0x0400000a, 0x59d0d006, 0x82697480,
+ 0x00000000, 0x83f17500, 0x0c000000, 0x04000004,
+ 0x82b97580, 0x0c000000, 0x0402003d, 0x59a0d20d,
+ 0x8068d1c0, 0x0400000f, 0x59d17006, 0x48bbc857,
+ 0x59d0d006, 0x8c68d504, 0x0400000a, 0x59d0d006,
0x82697480, 0x00000000, 0x83f17500, 0x0c000000,
0x04000004, 0x82b97580, 0x0c000000, 0x04020010,
- 0x0401f035, 0x4200d000, 0x0010fa5b, 0x4080e000,
- 0x0201f800, 0x0010032b, 0x59c0d007, 0x82697480,
+ 0x0401f033, 0x4200d000, 0x0011007b, 0x4080e000,
+ 0x0201f800, 0x0010032c, 0x59d0d006, 0x82697480,
0x00000000, 0x83f17500, 0x0c000000, 0x040007f5,
- 0x82b97480, 0x0c000000, 0x040007f2, 0x4a038006,
- 0x20000000, 0x59c0d007, 0x8268d500, 0x000507c0,
- 0x04020019, 0x4a010003, 0x10000004, 0x5880d802,
- 0x806d7040, 0x04000017, 0x826d7480, 0x00000002,
- 0x040207e5, 0x4a010002, 0x00000001, 0x59c17007,
- 0x48bbc857, 0x59c0d007, 0x82697480, 0x00000000,
- 0x83f17500, 0x0c000000, 0x04000004, 0x82b97580,
- 0x0c000000, 0x040207dd, 0x4080d000, 0x0401ff5b,
- 0x0401f009, 0x4a034408, 0x0000dddd, 0x0401f006,
- 0x48690002, 0x4080d000, 0x0401ff54, 0x80c589c0,
- 0x040207f6, 0x589d0000, 0x809d3800, 0x1c01f000,
- 0x59a26000, 0x813261c0, 0x04000009, 0x59325809,
- 0x812e59c0, 0x04000005, 0x0201f800, 0x00107eb1,
- 0x0201f800, 0x0010059d, 0x497b4000, 0x59a26001,
- 0x813261c0, 0x04000009, 0x59325809, 0x812e59c0,
- 0x04000005, 0x0201f800, 0x00107eb1, 0x0201f800,
- 0x0010059d, 0x497b4001, 0x1c01f000, 0x809d3840,
- 0x48813800, 0x40690000, 0x0201f800, 0x00102ac7,
- 0x0201f800, 0x0010f6b1, 0x5880d00b, 0x8068d1c0,
- 0x04020004, 0x5880d00c, 0x8068d1c0, 0x04000007,
- 0x59a0d00d, 0x8068d1c0, 0x0402000a, 0x4200d000,
- 0x00000001, 0x0401f009, 0x5880d00d, 0x8068d1c0,
- 0x04000006, 0x59a0d00d, 0x8068d1c0, 0x040007f8,
- 0x0401ffd0, 0x0401f7f6, 0x40698800, 0x589d0000,
- 0x809d3800, 0x1c01f000, 0x829d3c80, 0x00000003,
- 0x48813800, 0x48853801, 0x48893802, 0x40690000,
- 0x492fc857, 0x5868a808, 0x58690805, 0x4a03b805,
- 0x20000000, 0x59dcd006, 0x4a03b805, 0x30000000,
- 0x58817006, 0x48bbb800, 0x58817007, 0x48bbb801,
- 0x5881700a, 0x48bbb802, 0x4857b803, 0x4a03b805,
- 0x30000002, 0x59dcd006, 0x4a03b805, 0x70000001,
- 0x59dcd006, 0x4a03b805, 0x10000000, 0x59dcd006,
+ 0x82b97480, 0x0c000000, 0x040007f2, 0x4a03a005,
+ 0x20000000, 0x59d0d006, 0x8268d500, 0x43040700,
+ 0x04020017, 0x5880d801, 0x806d7040, 0x04000017,
+ 0x826d7480, 0x00000002, 0x040207e7, 0x4a010001,
+ 0x00000001, 0x59d17006, 0x48bbc857, 0x59d0d006,
0x82697480, 0x00000000, 0x83f17500, 0x0c000000,
- 0x040007fb, 0x82b97480, 0x0c000000, 0x040007f8,
- 0x4a03b805, 0x20000000, 0x59dcd006, 0x8268d500,
- 0x43000f80, 0x04000005, 0x4a034408, 0x0000dddd,
- 0x4178d000, 0x0401f01a, 0x59dd7000, 0x48b90006,
- 0x59dd7001, 0x48b90007, 0x4084d000, 0x808509c0,
- 0x04000013, 0x412d1000, 0x0201f800, 0x00100580,
- 0x40c65800, 0x80c589c0, 0x04000007, 0x4a025a05,
- 0x0000000a, 0x492d1001, 0x4200d000, 0x00000001,
- 0x0401f007, 0x4080d000, 0x4088d800, 0x4084e000,
- 0x0201f800, 0x0010032b, 0x0401f7f5, 0x40698800,
- 0x589d1002, 0x589d0801, 0x589d0000, 0x829d3c00,
- 0x00000003, 0x1c01f000, 0x829d3c80, 0x00000002,
- 0x48813800, 0x48853801, 0x40690000, 0x497bc856,
- 0x4203a000, 0x00007600, 0x4200d000, 0x00000040,
- 0x0201f800, 0x001012d1, 0x4a03a00a, 0x00000001,
- 0x4a03a005, 0x20000000, 0x59d0d006, 0x4a03a005,
- 0x30000000, 0x59d0d006, 0x82690d00, 0x00000020,
- 0x8c68d50a, 0x040207fc, 0x59a0d20d, 0x48690005,
- 0x8068d1c0, 0x04020002, 0x0401f070, 0x59a0d411,
- 0x8068d0e0, 0x59a0da11, 0x406c0000, 0x8068d540,
- 0x48690007, 0x59a0d40e, 0x8068d0e0, 0x59a0da0e,
- 0x406c0000, 0x8068d540, 0x48690006, 0x59a0d40c,
- 0x8068d0e0, 0x59a0da0c, 0x826c0500, 0x0000fffc,
- 0x8068d540, 0x48690009, 0x486ba003, 0x0201f800,
- 0x00107ef5, 0x40c66000, 0x80c589c0, 0x0400004f,
- 0x49334001, 0x0201f800, 0x00100580, 0x40c65800,
- 0x80c589c0, 0x04000041, 0x4a025a05, 0x00000018,
- 0x4a025806, 0x00abcdef, 0x492e6009, 0x492e600c,
- 0x58817005, 0x48ba600e, 0x48865c11, 0x4a02601c,
- 0x0010cfd1, 0x4a02600d, 0x00000004, 0x832cd400,
- 0x00000012, 0x486a600b, 0x48690008, 0x4a01000a,
- 0x0000000c, 0x5880d005, 0x8068d040, 0x48690005,
- 0x4080d000, 0x0401ff5d, 0x59a0d408, 0x82697480,
- 0x0000dddd, 0x040007c5, 0x5880d005, 0x8068d1c0,
- 0x040007c2, 0x82697480, 0x00000004, 0x04000014,
- 0x04001013, 0x8268d480, 0x00000005, 0x48690005,
- 0x4a01000a, 0x0000003c, 0x832cd400, 0x00000006,
- 0x48690008, 0x4080d000, 0x0401ff48, 0x80c589c0,
- 0x040007b2, 0x5880d005, 0x82697480, 0x00000004,
- 0x83f17500, 0x03000000, 0x040007ef, 0x4979000a,
- 0x4178e000, 0x8270e400, 0x0000000c, 0x8068d840,
- 0x406cd000, 0x806cd9c0, 0x040207fb, 0x4871000a,
- 0x486d0005, 0x0401f7e9, 0x4200d000, 0x0010fb37,
- 0x4200d800, 0x00100580, 0x4080e000, 0x0201f800,
- 0x0010032b, 0x0401f7b9, 0x4200d000, 0x0010fb37,
- 0x4200d800, 0x00107ef5, 0x4080e000, 0x0201f800,
- 0x0010032b, 0x0401f7ab, 0x589d0801, 0x589d0000,
- 0x829d3c00, 0x00000002, 0x1c01f000, 0x809d3840,
- 0x48813800, 0x40690000, 0x497bc856, 0x42038000,
- 0x00007700, 0x0201f800, 0x00100ca8, 0x59c0d006,
- 0x59a0d40d, 0x48690005, 0x8068d1c0, 0x04020009,
- 0x497b9009, 0x59e0d003, 0x8268d540, 0x00008060,
- 0x486bc003, 0x4a038009, 0x00e00000, 0x0401f07d,
- 0x59a0d40a, 0x8068d0e0, 0x59a0da0a, 0x406c0000,
- 0x8068d540, 0x48690007, 0x59a0d40f, 0x8068d0e0,
- 0x59a0da0f, 0x406c0000, 0x8068d540, 0x48690006,
- 0x59a0d40c, 0x8068d0e0, 0x59a0da0c, 0x826c0500,
- 0x0000fffc, 0x8068d540, 0x48690009, 0x486bc857,
- 0x58817009, 0x48bb8003, 0x0201f800, 0x00107ef5,
- 0x40c66000, 0x80c589c0, 0x0400005a, 0x49334000,
- 0x0201f800, 0x00100580, 0x40c65800, 0x80c589c0,
- 0x0400004c, 0x4a025a05, 0x00000018, 0x4a025806,
+ 0x04000004, 0x82b97580, 0x0c000000, 0x040207df,
+ 0x4080d000, 0x0401ff4e, 0x0401f009, 0x4a034408,
+ 0x0000dddd, 0x0401f006, 0x48690001, 0x4080d000,
+ 0x0401ff47, 0x80c589c0, 0x040207f6, 0x589d0000,
+ 0x809d3800, 0x1c01f000, 0x0201f800, 0x0010195f,
+ 0x80c589c0, 0x04020002, 0x0401f009, 0x4a034407,
+ 0x00000017, 0x0201f800, 0x0010239a, 0x4203e000,
+ 0x50000000, 0x497bc856, 0x0401f000, 0x1c01f000,
+ 0x4068d800, 0x59c17009, 0x48bbc857, 0x59c0e009,
+ 0x8270d500, 0x00e00000, 0x04000019, 0x586cd000,
+ 0x486b4210, 0x586cd000, 0x8068d120, 0x486b4410,
+ 0x8c70e52e, 0x0402000e, 0x8c70e52c, 0x04000004,
+ 0x586cd00b, 0x8068d000, 0x4868d80b, 0x8c70e52a,
+ 0x04000004, 0x586cd00d, 0x8068d000, 0x4868d80d,
+ 0x4200d000, 0x00000001, 0x0401f005, 0x586cd00c,
+ 0x8068d000, 0x4868d80c, 0x0401f7f0, 0x40698800,
+ 0x1c01f000, 0x4068e000, 0x58697003, 0x48bbc857,
+ 0x59a0d40d, 0x8068d1c0, 0x04000034, 0x5870d002,
+ 0x4178d800, 0x82697480, 0x00000002, 0x04000050,
+ 0x59a26000, 0x5930d00e, 0x4068d800, 0x8068d1c0,
+ 0x0400004b, 0x8068d040, 0x486a600e, 0x5932580c,
+ 0x5930d80b, 0x586cf800, 0x586cf001, 0x586cd002,
+ 0x8268ed00, 0xfffffffc, 0x5930d00d, 0x8068d000,
+ 0x486a600d, 0x82697480, 0x00000005, 0x04000033,
+ 0x826cd400, 0x00000003, 0x486a600b, 0x487f8000,
+ 0x487b8001, 0x48778002, 0x59c0d008, 0x8268d500,
+ 0x0fffffff, 0x59c8d818, 0x826c0500, 0xf0000000,
+ 0x8068d540, 0x486b8008, 0x59c0d006, 0x58717003,
+ 0x48bb8006, 0x5870d002, 0x8068d000, 0x4868e002,
+ 0x5870d004, 0x8468d540, 0x4868e004, 0x4200d800,
+ 0x00000001, 0x0401f022, 0x5870d003, 0x4200d800,
+ 0x00000001, 0x82697480, 0x10000000, 0x0402001c,
+ 0x59a0d40f, 0x8068d0e0, 0x59a0da0f, 0x406c0000,
+ 0x8068fd40, 0x59a0d40a, 0x8068d0e0, 0x59a0da0a,
+ 0x406c0000, 0x8068f540, 0x59a0d40c, 0x8068d0e0,
+ 0x59a0da0c, 0x826c0500, 0x0000fffc, 0x8068ed40,
+ 0x48778003, 0x0401f7d2, 0x497a600d, 0x592e5801,
+ 0x812e59c0, 0x040007ce, 0x492e600c, 0x832cdc00,
+ 0x00000006, 0x486e600b, 0x0401f7c9, 0x406d8800,
+ 0x1c01f000, 0x809d3840, 0x48813800, 0x40690000,
+ 0x59c0d007, 0x8268d500, 0x000507c0, 0x0400000a,
+ 0x59c0d007, 0x82697480, 0x00000000, 0x83f17500,
+ 0x0c000000, 0x04000004, 0x82b97580, 0x0c000000,
+ 0x0402003c, 0x59a0d40d, 0x8068d1c0, 0x0400000c,
+ 0x59c17007, 0x48bbc857, 0x59c0d007, 0x82697480,
+ 0x00000000, 0x83f17500, 0x0c000000, 0x04000004,
+ 0x82b97580, 0x0c000000, 0x04020010, 0x0401f035,
+ 0x4200d000, 0x0011015d, 0x4080e000, 0x0201f800,
+ 0x0010032c, 0x59c0d007, 0x82697480, 0x00000000,
+ 0x83f17500, 0x0c000000, 0x040007f5, 0x82b97480,
+ 0x0c000000, 0x040007f2, 0x4a038006, 0x20000000,
+ 0x59c0d007, 0x8268d500, 0x000507c0, 0x04020019,
+ 0x4a010003, 0x10000004, 0x5880d802, 0x806d7040,
+ 0x04000017, 0x826d7480, 0x00000002, 0x040207e5,
+ 0x4a010002, 0x00000001, 0x59c17007, 0x48bbc857,
+ 0x59c0d007, 0x82697480, 0x00000000, 0x83f17500,
+ 0x0c000000, 0x04000004, 0x82b97580, 0x0c000000,
+ 0x040207dd, 0x4080d000, 0x0401ff5b, 0x0401f009,
+ 0x4a034408, 0x0000dddd, 0x0401f006, 0x48690002,
+ 0x4080d000, 0x0401ff54, 0x80c589c0, 0x040207f6,
+ 0x589d0000, 0x809d3800, 0x1c01f000, 0x59a26000,
+ 0x813261c0, 0x04000009, 0x59325809, 0x812e59c0,
+ 0x04000005, 0x0201f800, 0x00108250, 0x0201f800,
+ 0x001005b3, 0x497b4000, 0x59a26001, 0x813261c0,
+ 0x04000009, 0x59325809, 0x812e59c0, 0x04000005,
+ 0x0201f800, 0x00108250, 0x0201f800, 0x001005b3,
+ 0x497b4001, 0x1c01f000, 0x809d3840, 0x48813800,
+ 0x40690000, 0x0201f800, 0x00102b57, 0x0201f800,
+ 0x0010fdb1, 0x5880d00b, 0x8068d1c0, 0x04020004,
+ 0x5880d00c, 0x8068d1c0, 0x04000007, 0x59a0d00d,
+ 0x8068d1c0, 0x0402000a, 0x4200d000, 0x00000001,
+ 0x0401f009, 0x5880d00d, 0x8068d1c0, 0x04000006,
+ 0x59a0d00d, 0x8068d1c0, 0x040007f8, 0x0401ffd0,
+ 0x0401f7f6, 0x40698800, 0x589d0000, 0x809d3800,
+ 0x1c01f000, 0x829d3c80, 0x00000003, 0x48813800,
+ 0x48853801, 0x48893802, 0x40690000, 0x492fc857,
+ 0x5868a808, 0x58690805, 0x4a03b805, 0x20000000,
+ 0x59dcd006, 0x4a03b805, 0x30000000, 0x58817006,
+ 0x48bbb800, 0x58817007, 0x48bbb801, 0x5881700a,
+ 0x48bbb802, 0x4857b803, 0x4a03b805, 0x30000002,
+ 0x59dcd006, 0x4a03b805, 0x70000001, 0x59dcd006,
+ 0x4a03b805, 0x10000000, 0x59dcd006, 0x82697480,
+ 0x00000000, 0x83f17500, 0x0c000000, 0x040007fb,
+ 0x82b97480, 0x0c000000, 0x040007f8, 0x4a03b805,
+ 0x20000000, 0x59dcd006, 0x8268d500, 0x43000f80,
+ 0x04000005, 0x4a034408, 0x0000dddd, 0x4178d000,
+ 0x0401f01a, 0x59dd7000, 0x48b90006, 0x59dd7001,
+ 0x48b90007, 0x4084d000, 0x808509c0, 0x04000013,
+ 0x412d1000, 0x0201f800, 0x00100596, 0x40c65800,
+ 0x80c589c0, 0x04000007, 0x4a025a05, 0x0000000a,
+ 0x492d1001, 0x4200d000, 0x00000001, 0x0401f007,
+ 0x4080d000, 0x4088d800, 0x4084e000, 0x0201f800,
+ 0x0010032c, 0x0401f7f5, 0x40698800, 0x589d1002,
+ 0x589d0801, 0x589d0000, 0x829d3c00, 0x00000003,
+ 0x1c01f000, 0x829d3c80, 0x00000002, 0x48813800,
+ 0x48853801, 0x40690000, 0x497bc856, 0x4203a000,
+ 0x00007600, 0x4200d000, 0x00000040, 0x0201f800,
+ 0x0010132b, 0x4a03a00a, 0x00000001, 0x4a03a005,
+ 0x20000000, 0x59d0d006, 0x4a03a005, 0x30000000,
+ 0x59d0d006, 0x82690d00, 0x00000020, 0x8c68d50a,
+ 0x040207fc, 0x59a0d20d, 0x48690005, 0x8068d1c0,
+ 0x04020002, 0x0401f070, 0x59a0d411, 0x8068d0e0,
+ 0x59a0da11, 0x406c0000, 0x8068d540, 0x48690007,
+ 0x59a0d40e, 0x8068d0e0, 0x59a0da0e, 0x406c0000,
+ 0x8068d540, 0x48690006, 0x59a0d40c, 0x8068d0e0,
+ 0x59a0da0c, 0x826c0500, 0x0000fffc, 0x8068d540,
+ 0x48690009, 0x486ba003, 0x0201f800, 0x00108294,
+ 0x40c66000, 0x80c589c0, 0x0400004f, 0x49334001,
+ 0x0201f800, 0x00100596, 0x40c65800, 0x80c589c0,
+ 0x04000041, 0x4a025a05, 0x00000018, 0x4a025806,
0x00abcdef, 0x492e6009, 0x492e600c, 0x58817005,
- 0x48ba600e, 0x4a02600d, 0x00000004, 0x497a5c11,
- 0x4a02601c, 0x0010cfd1, 0x832cd400, 0x00000012,
+ 0x48ba600e, 0x48865c11, 0x4a02601c, 0x0010d5ef,
+ 0x4a02600d, 0x00000004, 0x832cd400, 0x00000012,
0x486a600b, 0x48690008, 0x4a01000a, 0x0000000c,
0x5880d005, 0x8068d040, 0x48690005, 0x4080d000,
- 0x0401fed2, 0x59a0d408, 0x82697480, 0x0000dddd,
- 0x040007c3, 0x5880d005, 0x8068d1c0, 0x040007b9,
+ 0x0401ff5d, 0x59a0d408, 0x82697480, 0x0000dddd,
+ 0x040007c5, 0x5880d005, 0x8068d1c0, 0x040007c2,
0x82697480, 0x00000004, 0x04000014, 0x04001013,
0x8268d480, 0x00000005, 0x48690005, 0x4a01000a,
0x0000003c, 0x832cd400, 0x00000006, 0x48690008,
- 0x4080d000, 0x0401febd, 0x80c589c0, 0x04000018,
+ 0x4080d000, 0x0401ff48, 0x80c589c0, 0x040007b2,
0x5880d005, 0x82697480, 0x00000004, 0x83f17500,
0x03000000, 0x040007ef, 0x4979000a, 0x4178e000,
0x8270e400, 0x0000000c, 0x8068d840, 0x406cd000,
0x806cd9c0, 0x040207fb, 0x4871000a, 0x486d0005,
+ 0x0401f7e9, 0x4200d000, 0x00110239, 0x4200d800,
+ 0x00100596, 0x4080e000, 0x0201f800, 0x0010032c,
+ 0x0401f7b9, 0x4200d000, 0x00110239, 0x4200d800,
+ 0x00108294, 0x4080e000, 0x0201f800, 0x0010032c,
+ 0x0401f7ab, 0x589d0801, 0x589d0000, 0x829d3c00,
+ 0x00000002, 0x1c01f000, 0x809d3840, 0x48813800,
+ 0x40690000, 0x497bc856, 0x42038000, 0x00007700,
+ 0x0201f800, 0x00100ccd, 0x59c0d006, 0x59a0d40d,
+ 0x48690005, 0x8068d1c0, 0x04020009, 0x497b9009,
+ 0x59e0d003, 0x8268d540, 0x00008060, 0x486bc003,
+ 0x4a038009, 0x00e00000, 0x0401f07d, 0x59a0d40a,
+ 0x8068d0e0, 0x59a0da0a, 0x406c0000, 0x8068d540,
+ 0x48690007, 0x59a0d40f, 0x8068d0e0, 0x59a0da0f,
+ 0x406c0000, 0x8068d540, 0x48690006, 0x59a0d40c,
+ 0x8068d0e0, 0x59a0da0c, 0x826c0500, 0x0000fffc,
+ 0x8068d540, 0x48690009, 0x486bc857, 0x58817009,
+ 0x48bb8003, 0x0201f800, 0x00108294, 0x40c66000,
+ 0x80c589c0, 0x0400005a, 0x49334000, 0x0201f800,
+ 0x00100596, 0x40c65800, 0x80c589c0, 0x0400004c,
+ 0x4a025a05, 0x00000018, 0x4a025806, 0x00abcdef,
+ 0x492e6009, 0x492e600c, 0x58817005, 0x48ba600e,
+ 0x4a02600d, 0x00000004, 0x497a5c11, 0x4a02601c,
+ 0x0010d5ef, 0x832cd400, 0x00000012, 0x486a600b,
+ 0x48690008, 0x4a01000a, 0x0000000c, 0x5880d005,
+ 0x8068d040, 0x48690005, 0x4080d000, 0x0401fed2,
+ 0x59a0d408, 0x82697480, 0x0000dddd, 0x040007c3,
+ 0x5880d005, 0x8068d1c0, 0x040007b9, 0x82697480,
+ 0x00000004, 0x04000014, 0x04001013, 0x8268d480,
+ 0x00000005, 0x48690005, 0x4a01000a, 0x0000003c,
0x832cd400, 0x00000006, 0x48690008, 0x4080d000,
- 0x0401fea6, 0x80c589c0, 0x040207ea, 0x59a0d408,
- 0x82697480, 0x0000dddd, 0x0402078e, 0x0401f011,
- 0x4200d000, 0x0010fbc8, 0x4200d800, 0x00100580,
- 0x4080e000, 0x0201f800, 0x0010032b, 0x0401f7ae,
- 0x4200d000, 0x0010fbc8, 0x4200d800, 0x00107ef5,
- 0x4080e000, 0x0201f800, 0x0010032b, 0x0401f7a0,
- 0x589d0000, 0x809d3800, 0x1c01f000, 0x829d3c80,
- 0x00000002, 0x48813800, 0x48853801, 0x40690800,
- 0x406d0000, 0x0201f800, 0x00101940, 0x40800000,
- 0x4084d000, 0x80c4dd00, 0x0201f800, 0x00101947,
- 0x589d0801, 0x589d0000, 0x829d3c00, 0x00000002,
- 0x1c01f000, 0x829d3c80, 0x00000002, 0x48813800,
- 0x48853801, 0x40690800, 0x406d0000, 0x0201f800,
- 0x00101940, 0x40800000, 0x4084d000, 0x80c4dd40,
- 0x0201f800, 0x00101947, 0x589d0801, 0x589d0000,
- 0x829d3c00, 0x00000002, 0x1c01f000, 0x809d3840,
- 0x48813800, 0x4200d000, 0x000000ef, 0x0201f800,
- 0x001015c4, 0x4a03500f, 0x000000ef, 0x59c4d0a3,
- 0x8468d55a, 0x8468d53a, 0x486b88a3, 0x0201f800,
- 0x00101623, 0x80c589c0, 0x04000043, 0x4200d000,
- 0x00000001, 0x0201f800, 0x001018a6, 0x4200d000,
- 0x00000001, 0x0201f800, 0x0010182c, 0x4178d000,
- 0x4200d800, 0x00000004, 0x0401ffd3, 0x4201d000,
- 0x00000014, 0x0201f800, 0x00106661, 0x59c4d008,
- 0x8468d54e, 0x8268d500, 0xffffffe1, 0x486b8808,
- 0x4a0388a7, 0x0000f7f7, 0x4a038805, 0x04000001,
- 0x4200d000, 0xbe20bfff, 0x4200d800, 0x80018000,
- 0x0201f800, 0x001042a4, 0x4200d000, 0xfffeffff,
- 0x4178d800, 0x0201f800, 0x001042a4, 0x42010000,
- 0x00001387, 0x0401f008, 0x80817040, 0x04000048,
- 0x80810040, 0x42000000, 0xffffffff, 0x80817480,
- 0x04000009, 0x4201d000, 0x00000014, 0x0201f800,
- 0x00106661, 0x0201f800, 0x001018f1, 0x80c589c0,
- 0x040007f2, 0x59c4d005, 0x8268dd00, 0x04000000,
- 0x8c68d534, 0x04020018, 0x59c4d0a4, 0x8268d500,
- 0x0000000f, 0x82697480, 0x00000008, 0x04020031,
- 0x0401f011, 0x0201f800, 0x00101631, 0x80c589c0,
- 0x04000006, 0x4178d000, 0x0201f800, 0x001018a6,
- 0x4178d000, 0x0401f7bc, 0x4200d000, 0x00000002,
- 0x0201f800, 0x001018a6, 0x4200d000, 0x00000002,
- 0x0401f7b5, 0x4200d000, 0x00020000, 0x0201f800,
- 0x001042ab, 0x4201d000, 0x00000064, 0x0201f800,
- 0x00106661, 0x4200d000, 0xfeffffff, 0x4200d800,
- 0x02000000, 0x0201f800, 0x001042a4, 0x4200d000,
- 0xfdffffff, 0x4178d800, 0x0201f800, 0x001042a4,
- 0x4a038805, 0x04000001, 0x59c4d0a4, 0x8268d500,
- 0x0000000f, 0x4178d800, 0x8068d1c0, 0x04020005,
- 0x4200d800, 0x00000001, 0x0401f002, 0x40c4d800,
- 0x406d8800, 0x589d0000, 0x809d3800, 0x1c01f000,
- 0x809d3840, 0x48a13800, 0x829d3c80, 0x0000000f,
- 0x409d4000, 0x829d3c80, 0x00000006, 0x48813800,
- 0x48853801, 0x48893802, 0x488d3803, 0x48913804,
- 0x48953805, 0x490fc857, 0x59c91040, 0x59a9080f,
- 0x59c518a3, 0x59c52008, 0x59c52880, 0x8d0e1d0e,
- 0x0402000e, 0x59a0d407, 0x82690500, 0x00000007,
- 0x82817480, 0x00000002, 0x04000015, 0x808101c0,
- 0x04000023, 0x80817040, 0x040000e0, 0x0201f800,
- 0x0010230d, 0x0401f18d, 0x0201f800, 0x0010164d,
- 0x80c589c0, 0x040007f0, 0x4200d000, 0x00000002,
- 0x0201f800, 0x001018a6, 0x4200d000, 0x00000002,
- 0x0201f800, 0x0010182c, 0x0401f7e7, 0x8d0e1d0e,
- 0x0402000c, 0x0201f800, 0x001050f0, 0x80c589c0,
- 0x04020170, 0x836d7480, 0x00000003, 0x04020005,
- 0x59c4d0a4, 0x8268d500, 0x0000000f, 0x04000010,
- 0x0201f800, 0x00102311, 0x0401f170, 0x4200d000,
- 0x000000c0, 0x4200d800, 0x00000002, 0x0401ff26,
- 0x4080d000, 0x4200d800, 0x00000008, 0x0401ff22,
- 0x0401ff33, 0x80c589c0, 0x040000bb, 0x59a0d410,
- 0x8068d0e0, 0x59a0da10, 0x406c0000, 0x8068d540,
- 0x48694000, 0x497b4408, 0x4979400b, 0x4979400c,
- 0x4979400d, 0x49794002, 0x49794001, 0x0201f800,
- 0x00102aa7, 0x0201f800, 0x00106e3a, 0x598e600f,
- 0x0201f800, 0x0010715a, 0x0201f800, 0x00106e3a,
- 0x417a3000, 0x0201f800, 0x001074f6, 0x59926004,
- 0x813261c0, 0x0400000d, 0x0201f800, 0x00107073,
- 0x0201f800, 0x00106e0c, 0x0201f800, 0x00106e15,
- 0x42027800, 0x00001000, 0x42028000, 0x0000002e,
- 0x0201f800, 0x001101fa, 0x811a3000, 0x83197480,
- 0x00000004, 0x040007ec, 0x040017eb, 0x0201f800,
- 0x001007f6, 0x59a8d06d, 0x8068d1c0, 0x0402007f,
- 0x49794004, 0x497b4002, 0x40a0d000, 0x0401fe44,
- 0x59a0d408, 0x82697480, 0x0000dddd, 0x04000126,
- 0x40a0d000, 0x0401fdad, 0x59a0d408, 0x82697480,
- 0x0000dddd, 0x04000120, 0x59a0d00d, 0x8068d1c0,
- 0x040200ef, 0x4979400e, 0x40a0d000, 0x0201f800,
- 0x0010f911, 0x0201f800, 0x0010f658, 0x58a0d004,
- 0x8068d1c0, 0x04000053, 0x58a0e00e, 0x80717040,
- 0x0400007c, 0x59c8d001, 0x8068d1c0, 0x04020070,
- 0x59a0d002, 0x42000000, 0xfeedbeef, 0x80697480,
- 0x040000d8, 0x4a014003, 0x10000000, 0x40a0d000,
- 0x0401fc56, 0x4a034002, 0xfeedbeef, 0x40a0d000,
- 0x0201f800, 0x0010f979, 0x59a0d408, 0x82697480,
- 0x0000dddd, 0x04000028, 0x40a0d000, 0x0401fca7,
- 0x59a0d408, 0x82697480, 0x0000dddd, 0x04000022,
- 0x0201f800, 0x0010f69f, 0x59c4d005, 0x8c68d534,
- 0x040200cf, 0x0201f800, 0x00102ab0, 0x80c589c0,
- 0x040200ce, 0x59a0d00d, 0x8068d1c0, 0x04000016,
- 0x59a26000, 0x59a0d40d, 0x8068d1c0, 0x04000004,
- 0x5930d00e, 0x8068d1c0, 0x040207c7, 0x59a26001,
- 0x59a0d20d, 0x8068d1c0, 0x04000004, 0x5930d00e,
- 0x8068d1c0, 0x040207c0, 0x58a0d002, 0x8068d1c0,
- 0x040207bd, 0x58a0d001, 0x8068d1c0, 0x040207ba,
- 0x0401fcd8, 0x58a0e00e, 0x58a0d000, 0x8068d040,
- 0x48694000, 0x4200d800, 0x00030d40, 0x80717040,
- 0x04020042, 0x40a0d000, 0x0401fce5, 0x80c589c0,
- 0x04020051, 0x58a0d000, 0x8068d1c0, 0x04020047,
- 0x0401f04d, 0x59c8d001, 0x8068d1c0, 0x040207af,
- 0x40a0d000, 0x0201f800, 0x0010f979, 0x59a0d408,
- 0x82697480, 0x0000dddd, 0x040007a8, 0x0201f800,
- 0x00102ab0, 0x80c589c0, 0x040007f3, 0x0201f800,
- 0x0010f9d0, 0x4a01400d, 0x0000aaaa, 0x4a01400e,
- 0x00000001, 0x0401f79d, 0x59c4d001, 0x8468d518,
- 0x486b8801, 0x0401f77f, 0x4200d000, 0x000000c0,
- 0x4080d800, 0x0401fe68, 0x0401fe79, 0x80c589c0,
- 0x04020747, 0x4088d000, 0x408cd800, 0x4090e000,
- 0x0201f800, 0x0010032b, 0x0401f741, 0x40a0d000,
- 0x0201f800, 0x0010f9de, 0x80c589c0, 0x0400078d,
- 0x4a01400e, 0x00000001, 0x4200e000, 0x00000001,
- 0x58a0d000, 0x8068d040, 0x48694000, 0x4200d800,
- 0x00030d40, 0x80717040, 0x04020004, 0x0401f7c2,
- 0x806cd840, 0x04000004, 0x59c0d007, 0x8c68d504,
- 0x040007fc, 0x59c0d007, 0x8c68d504, 0x0402005f,
- 0x59c0d007, 0x8268d500, 0x000501c0, 0x04000058,
- 0x4a01400d, 0x0000dddd, 0x40a0d000, 0x0401fc98,
- 0x80c589c0, 0x04020004, 0x58a0d000, 0x8068d1c0,
- 0x0402074c, 0x0201f800, 0x001071f9, 0x0201f800,
- 0x0010f6a5, 0x4201d000, 0x000186a0, 0x48978880,
- 0x48938808, 0x488f88a3, 0x4887500f, 0x488b9040,
- 0x42038000, 0x00007700, 0x4a038009, 0xf4f60000,
- 0x4a038891, 0x0000ffff, 0x4a03900d, 0x00000040,
- 0x0201f800, 0x00100698, 0x4a0370e8, 0x00000001,
- 0x59a8d06d, 0x8068d1c0, 0x04020048, 0x59a0d407,
- 0x8268d500, 0x00000003, 0x82697480, 0x00000002,
- 0x04000013, 0x4200d000, 0x000000c0, 0x4200d800,
- 0xfffffffc, 0x0401fe02, 0x4178d000, 0x4200d800,
- 0xfffffff7, 0x0401fdfe, 0x4178d000, 0x4200d800,
- 0xfffffffb, 0x0401fdfa, 0x0201f800, 0x0010510c,
- 0x40c50000, 0x80c589c0, 0x04000034, 0x59a0d408,
- 0x82697480, 0x0000dddd, 0x0400000f, 0x58a0d80b,
- 0x806cd9c0, 0x04020007, 0x58a0d00c, 0x8068d1c0,
- 0x04020004, 0x58a0d00d, 0x8068d1c0, 0x0400003d,
- 0x486f4407, 0x58a0d00c, 0x486b4208, 0x58a0d00d,
- 0x486b4408, 0x0201f800, 0x00102319, 0x0401f037,
- 0x4a014003, 0x10000004, 0x0401f729, 0x40a0d000,
- 0x0201f800, 0x0010f911, 0x0401f70f, 0x0201f800,
- 0x0010f9d0, 0x0401f7a7, 0x40a0d000, 0x0401fc40,
- 0x80c589c0, 0x040007a5, 0x0401f7ab, 0x4a01400d,
- 0x0000bbbb, 0x0401f787, 0x4a01400d, 0x0000cccc,
- 0x58a0d000, 0x486b4210, 0x58a0d000, 0x8068d120,
- 0x486b4410, 0x0401f77f, 0x59a8d06e, 0x0201f800,
- 0x00101b49, 0x0401f7b6, 0x4a0388a7, 0x0000f7f7,
- 0x4200d000, 0xbeffffff, 0x4200d800, 0x80018000,
- 0x0201f800, 0x001042a4, 0x4200d000, 0xfffeffff,
- 0x4080d800, 0x0201f800, 0x001042a4, 0x0401f7c0,
- 0x4a034407, 0x00000016, 0x0201f800, 0x00102309,
- 0x0401f006, 0x40a0d000, 0x0401fc19, 0x0401f786,
- 0x0201f800, 0x001022c6, 0x589d2805, 0x589d2004,
- 0x589d1803, 0x589d1002, 0x589d0801, 0x589d0000,
- 0x829d3c00, 0x00000015, 0x589d4000, 0x809d3800,
- 0x1c01f000, 0x829d3c80, 0x00000002, 0x48813800,
- 0x48853801, 0x59a8d006, 0x82690d00, 0x00004000,
- 0x4178d800, 0x8c68d51c, 0x04020020, 0x4937c857,
- 0x42010000, 0x00000001, 0x0201f800, 0x00107ef5,
- 0x40c66000, 0x80c589c0, 0x04020003, 0x4080d800,
- 0x0401f016, 0x4925881c, 0x4935880a, 0x48818c07,
- 0x40867800, 0x0201f800, 0x001045df, 0x59a8d016,
- 0x8068d000, 0x486b5016, 0x599cd019, 0x40867000,
- 0x8c68d50e, 0x04020003, 0x42027000, 0x00000004,
- 0x0201f800, 0x00107f26, 0x599cd208, 0x486a6c12,
- 0x41790000, 0x4080d800, 0x406d8800, 0x589d0801,
+ 0x0401febd, 0x80c589c0, 0x04000018, 0x5880d005,
+ 0x82697480, 0x00000004, 0x83f17500, 0x03000000,
+ 0x040007ef, 0x4979000a, 0x4178e000, 0x8270e400,
+ 0x0000000c, 0x8068d840, 0x406cd000, 0x806cd9c0,
+ 0x040207fb, 0x4871000a, 0x486d0005, 0x832cd400,
+ 0x00000006, 0x48690008, 0x4080d000, 0x0401fea6,
+ 0x80c589c0, 0x040207ea, 0x59a0d408, 0x82697480,
+ 0x0000dddd, 0x0402078e, 0x0401f011, 0x4200d000,
+ 0x001102ca, 0x4200d800, 0x00100596, 0x4080e000,
+ 0x0201f800, 0x0010032c, 0x0401f7ae, 0x4200d000,
+ 0x001102ca, 0x4200d800, 0x00108294, 0x4080e000,
+ 0x0201f800, 0x0010032c, 0x0401f7a0, 0x589d0000,
+ 0x809d3800, 0x1c01f000, 0x829d3c80, 0x00000002,
+ 0x48813800, 0x48853801, 0x40690800, 0x406d0000,
+ 0x0201f800, 0x001019ae, 0x40800000, 0x4084d000,
+ 0x80c4dd00, 0x0201f800, 0x001019b5, 0x589d0801,
0x589d0000, 0x829d3c00, 0x00000002, 0x1c01f000,
- 0x4937c857, 0x5934d200, 0x8468d502, 0x486a6a00,
- 0x1c01f000, 0x829d3c80, 0x00000004, 0x48813800,
- 0x48853801, 0x48893802, 0x488d3803, 0x41350800,
- 0x41451000, 0x412d1800, 0x4943c857, 0x493fc857,
- 0x0201f800, 0x00106e3a, 0x40c50000, 0x59a8d078,
- 0x82697480, 0x00000000, 0x83f17500, 0x0c000000,
- 0x04000004, 0x82b97580, 0x0c000000, 0x04020069,
- 0x0201f800, 0x001104b6, 0x0201f800, 0x001104a6,
- 0x0201f800, 0x00110559, 0x0201f800, 0x001106bc,
- 0x808101c0, 0x04000003, 0x0201f800, 0x00106e2e,
- 0x417a8800, 0x0401f00a, 0x58c4d200, 0x8c68d50e,
- 0x0400000e, 0x81468800, 0x83457480, 0x000007ef,
- 0x83f17500, 0x03000000, 0x04000027, 0x0201f800,
- 0x001046de, 0x40c66800, 0x80c589c0, 0x040007f6,
- 0x8d3e7d06, 0x040207f1, 0x497a6c0b, 0x8d3e7d18,
- 0x0400003f, 0x5935000f, 0x0401f007, 0x49410207,
+ 0x829d3c80, 0x00000002, 0x48813800, 0x48853801,
+ 0x40690800, 0x406d0000, 0x0201f800, 0x001019ae,
+ 0x40800000, 0x4084d000, 0x80c4dd40, 0x0201f800,
+ 0x001019b5, 0x589d0801, 0x589d0000, 0x829d3c00,
+ 0x00000002, 0x1c01f000, 0x809d3840, 0x48813800,
+ 0x4200d000, 0x000000ef, 0x0201f800, 0x00101632,
+ 0x4a035015, 0x000000ef, 0x59c4d0a3, 0x8468d55a,
+ 0x8468d53a, 0x486b88a3, 0x0201f800, 0x00101691,
+ 0x80c589c0, 0x04000043, 0x4200d000, 0x00000001,
+ 0x0201f800, 0x00101914, 0x4200d000, 0x00000001,
+ 0x0201f800, 0x0010189a, 0x4178d000, 0x4200d800,
+ 0x00000004, 0x0401ffd3, 0x4201d000, 0x00000014,
+ 0x0201f800, 0x001069c8, 0x59c4d008, 0x8468d54e,
+ 0x8268d500, 0xffffffe1, 0x486b8808, 0x4a0388a7,
+ 0x0000f7f7, 0x4a038805, 0x04000001, 0x4200d000,
+ 0xbe20bfff, 0x4200d800, 0x80018000, 0x0201f800,
+ 0x001043b5, 0x4200d000, 0xfffeffff, 0x4178d800,
+ 0x0201f800, 0x001043b5, 0x42010000, 0x00001387,
+ 0x0401f008, 0x80817040, 0x04000048, 0x80810040,
+ 0x42000000, 0xffffffff, 0x80817480, 0x04000009,
+ 0x4201d000, 0x00000014, 0x0201f800, 0x001069c8,
+ 0x0201f800, 0x0010195f, 0x80c589c0, 0x040007f2,
+ 0x59c4d005, 0x8268dd00, 0x04000000, 0x8c68d534,
+ 0x04020018, 0x59c4d0a4, 0x8268d500, 0x0000000f,
+ 0x82697480, 0x00000008, 0x04020031, 0x0401f011,
+ 0x0201f800, 0x0010169f, 0x80c589c0, 0x04000006,
+ 0x4178d000, 0x0201f800, 0x00101914, 0x4178d000,
+ 0x0401f7bc, 0x4200d000, 0x00000002, 0x0201f800,
+ 0x00101914, 0x4200d000, 0x00000002, 0x0401f7b5,
+ 0x4200d000, 0x00020000, 0x0201f800, 0x001043bc,
+ 0x4201d000, 0x00000064, 0x0201f800, 0x001069c8,
+ 0x4200d000, 0xfeffffff, 0x4200d800, 0x02000000,
+ 0x0201f800, 0x001043b5, 0x4200d000, 0xfdffffff,
+ 0x4178d800, 0x0201f800, 0x001043b5, 0x4a038805,
+ 0x04000001, 0x59c4d0a4, 0x8268d500, 0x0000000f,
+ 0x4178d800, 0x8068d1c0, 0x04020005, 0x4200d800,
+ 0x00000001, 0x0401f002, 0x40c4d800, 0x406d8800,
+ 0x589d0000, 0x809d3800, 0x1c01f000, 0x809d3840,
+ 0x48a13800, 0x829d3c80, 0x0000000f, 0x409d4000,
+ 0x829d3c80, 0x00000006, 0x48813800, 0x48853801,
+ 0x48893802, 0x488d3803, 0x48913804, 0x48953805,
+ 0x490fc857, 0x59c91040, 0x59a90815, 0x59c518a3,
+ 0x59c52008, 0x59c52880, 0x8d0e1d0e, 0x0402000e,
+ 0x59a0d407, 0x82690500, 0x00000007, 0x82817480,
+ 0x00000002, 0x04000015, 0x808101c0, 0x04000023,
+ 0x80817040, 0x040000e4, 0x0201f800, 0x0010239e,
+ 0x0401f194, 0x0201f800, 0x001016bb, 0x80c589c0,
+ 0x040007f0, 0x4200d000, 0x00000002, 0x0201f800,
+ 0x00101914, 0x4200d000, 0x00000002, 0x0201f800,
+ 0x0010189a, 0x0401f7e7, 0x8d0e1d0e, 0x0402000c,
+ 0x0201f800, 0x001052a3, 0x80c589c0, 0x04020177,
+ 0x836d7480, 0x00000003, 0x04020005, 0x59c4d0a4,
+ 0x8268d500, 0x0000000f, 0x04000014, 0x0201f800,
+ 0x001023a2, 0x0401f177, 0x4200d000, 0x00000001,
+ 0x0201f800, 0x0010a640, 0x4200d000, 0x000000c0,
+ 0x4200d800, 0x00000002, 0x0401ff22, 0x4080d000,
+ 0x4200d800, 0x00000008, 0x0401ff1e, 0x0401ff2f,
+ 0x80c589c0, 0x040000be, 0x59a0d410, 0x8068d0e0,
+ 0x59a0da10, 0x406c0000, 0x8068d540, 0x48694000,
+ 0x497b4408, 0x4979400b, 0x4979400c, 0x4979400d,
+ 0x49794002, 0x49794001, 0x0201f800, 0x00102b37,
+ 0x0201f800, 0x001071a9, 0x598e600f, 0x0201f800,
+ 0x001074c9, 0x0201f800, 0x001071a9, 0x417a3000,
+ 0x0201f800, 0x00107864, 0x59926004, 0x813261c0,
+ 0x0400000d, 0x0201f800, 0x001073e2, 0x0201f800,
+ 0x00107177, 0x0201f800, 0x00107180, 0x42027800,
+ 0x00001000, 0x42028000, 0x0000002e, 0x0201f800,
+ 0x001108fb, 0x811a3000, 0x83197480, 0x00000004,
+ 0x040007ec, 0x040017eb, 0x0201f800, 0x00100817,
+ 0x59a8d07b, 0x8068d1c0, 0x0402007f, 0x49794004,
+ 0x497b4002, 0x40a0d000, 0x0401fe40, 0x59a0d408,
+ 0x82697480, 0x0000dddd, 0x04000129, 0x40a0d000,
+ 0x0401fda9, 0x59a0d408, 0x82697480, 0x0000dddd,
+ 0x04000123, 0x59a0d00d, 0x8068d1c0, 0x040200f2,
+ 0x4979400e, 0x40a0d000, 0x0201f800, 0x00110013,
+ 0x0201f800, 0x0010fd58, 0x58a0d004, 0x8068d1c0,
+ 0x04000053, 0x58a0e00e, 0x80717040, 0x0400007f,
+ 0x59c8d001, 0x8068d1c0, 0x04020073, 0x59a0d002,
+ 0x42000000, 0xfeedbeef, 0x80697480, 0x040000db,
+ 0x4a014003, 0x10000000, 0x40a0d000, 0x0401fc52,
+ 0x4a034002, 0xfeedbeef, 0x40a0d000, 0x0201f800,
+ 0x0011007b, 0x59a0d408, 0x82697480, 0x0000dddd,
+ 0x04000028, 0x40a0d000, 0x0401fca3, 0x59a0d408,
+ 0x82697480, 0x0000dddd, 0x04000022, 0x0201f800,
+ 0x0010fd9f, 0x59c4d005, 0x8c68d534, 0x040200d2,
+ 0x0201f800, 0x00102b40, 0x80c589c0, 0x040200d1,
+ 0x59a0d00d, 0x8068d1c0, 0x04000016, 0x59a26000,
+ 0x59a0d40d, 0x8068d1c0, 0x04000004, 0x5930d00e,
+ 0x8068d1c0, 0x040207c7, 0x59a26001, 0x59a0d20d,
+ 0x8068d1c0, 0x04000004, 0x5930d00e, 0x8068d1c0,
+ 0x040207c0, 0x58a0d002, 0x8068d1c0, 0x040207bd,
+ 0x58a0d001, 0x8068d1c0, 0x040207ba, 0x0401fcd4,
+ 0x58a0e00e, 0x58a0d000, 0x8068d040, 0x48694000,
+ 0x4200d800, 0x00030d40, 0x80717040, 0x04020045,
+ 0x40a0d000, 0x0401fce1, 0x80c589c0, 0x04020054,
+ 0x58a0d000, 0x8068d1c0, 0x0402004a, 0x0401f050,
+ 0x59c8d001, 0x8068d1c0, 0x040207af, 0x40a0d000,
+ 0x0201f800, 0x0011007b, 0x59a0d408, 0x82697480,
+ 0x0000dddd, 0x040007a8, 0x0201f800, 0x00102b40,
+ 0x80c589c0, 0x040007f3, 0x0201f800, 0x001100d2,
+ 0x4a01400d, 0x0000aaaa, 0x4a01400e, 0x00000001,
+ 0x0401f79d, 0x59c4d001, 0x8468d518, 0x486b8801,
+ 0x0401f77f, 0x4080d000, 0x0201f800, 0x0010a640,
+ 0x4200d000, 0x000000c0, 0x4080d800, 0x0401fe61,
+ 0x0401fe72, 0x80c589c0, 0x04020744, 0x4088d000,
+ 0x408cd800, 0x4090e000, 0x0201f800, 0x0010032c,
+ 0x0401f73e, 0x40a0d000, 0x0201f800, 0x001100e0,
+ 0x80c589c0, 0x0400078a, 0x4a01400e, 0x00000001,
+ 0x4200e000, 0x00000001, 0x58a0d000, 0x8068d040,
+ 0x48694000, 0x4200d800, 0x00030d40, 0x80717040,
+ 0x04020004, 0x0401f7bf, 0x806cd840, 0x04000004,
+ 0x59c0d007, 0x8c68d504, 0x040007fc, 0x59c0d007,
+ 0x8c68d504, 0x0402005f, 0x59c0d007, 0x8268d500,
+ 0x000501c0, 0x04000058, 0x4a01400d, 0x0000dddd,
+ 0x40a0d000, 0x0401fc91, 0x80c589c0, 0x04020004,
+ 0x58a0d000, 0x8068d1c0, 0x04020749, 0x0201f800,
+ 0x00107568, 0x0201f800, 0x0010fda5, 0x4201d000,
+ 0x000186a0, 0x48978880, 0x48938808, 0x488f88a3,
+ 0x48875015, 0x488b9040, 0x42038000, 0x00007700,
+ 0x4a038009, 0xf4f60000, 0x4a038891, 0x0000ffff,
+ 0x4a03900d, 0x00000040, 0x0201f800, 0x001006b6,
+ 0x4a0370e8, 0x00000001, 0x59a8d07b, 0x8068d1c0,
+ 0x04020048, 0x59a0d407, 0x8268d500, 0x00000003,
+ 0x82697480, 0x00000002, 0x04000013, 0x4200d000,
+ 0x000000c0, 0x4200d800, 0xfffffffc, 0x0401fdfb,
+ 0x4178d000, 0x4200d800, 0xfffffff7, 0x0401fdf7,
+ 0x4178d000, 0x4200d800, 0xfffffffb, 0x0401fdf3,
+ 0x0201f800, 0x001052bf, 0x40c50000, 0x80c589c0,
+ 0x04000034, 0x59a0d408, 0x82697480, 0x0000dddd,
+ 0x0400000f, 0x58a0d80b, 0x806cd9c0, 0x04020007,
+ 0x58a0d00c, 0x8068d1c0, 0x04020004, 0x58a0d00d,
+ 0x8068d1c0, 0x0400003d, 0x486f4407, 0x58a0d00c,
+ 0x486b4208, 0x58a0d00d, 0x486b4408, 0x0201f800,
+ 0x001023aa, 0x0401f037, 0x4a014003, 0x10000004,
+ 0x0401f726, 0x40a0d000, 0x0201f800, 0x00110013,
+ 0x0401f70c, 0x0201f800, 0x001100d2, 0x0401f7a7,
+ 0x40a0d000, 0x0401fc39, 0x80c589c0, 0x040007a5,
+ 0x0401f7ab, 0x4a01400d, 0x0000bbbb, 0x0401f787,
+ 0x4a01400d, 0x0000cccc, 0x58a0d000, 0x486b4210,
+ 0x58a0d000, 0x8068d120, 0x486b4410, 0x0401f77f,
+ 0x59a8d07c, 0x0201f800, 0x00101bb7, 0x0401f7b6,
+ 0x4a0388a7, 0x0000f7f7, 0x4200d000, 0xbeffffff,
+ 0x4200d800, 0x80018000, 0x0201f800, 0x001043b5,
+ 0x4200d000, 0xfffeffff, 0x4080d800, 0x0201f800,
+ 0x001043b5, 0x0401f7c0, 0x4a034407, 0x00000016,
+ 0x0201f800, 0x0010239a, 0x0401f006, 0x40a0d000,
+ 0x0401fc12, 0x0401f786, 0x0201f800, 0x00102357,
+ 0x589d2805, 0x589d2004, 0x589d1803, 0x589d1002,
+ 0x589d0801, 0x589d0000, 0x829d3c00, 0x00000015,
+ 0x589d4000, 0x809d3800, 0x1c01f000, 0x829d3c80,
+ 0x00000002, 0x48813800, 0x48853801, 0x59a8d006,
+ 0x82690d00, 0x00004000, 0x4178d800, 0x8c68d51c,
+ 0x04020020, 0x4937c857, 0x42010000, 0x00000001,
+ 0x0201f800, 0x00108294, 0x40c66000, 0x80c589c0,
+ 0x04020003, 0x4080d800, 0x0401f016, 0x4925881c,
+ 0x4935880a, 0x48818c07, 0x40867800, 0x0201f800,
+ 0x0010472b, 0x59a8d01c, 0x8068d000, 0x486b501c,
+ 0x599cd019, 0x40867000, 0x8c68d50e, 0x04020003,
+ 0x42027000, 0x00000004, 0x0201f800, 0x001082c5,
+ 0x599cd208, 0x486a6c12, 0x41790000, 0x4080d800,
+ 0x406d8800, 0x589d0801, 0x589d0000, 0x829d3c00,
+ 0x00000002, 0x1c01f000, 0x4937c857, 0x5934d200,
+ 0x8468d502, 0x486a6a00, 0x1c01f000, 0x829d3c80,
+ 0x00000004, 0x48813800, 0x48853801, 0x48893802,
+ 0x488d3803, 0x41350800, 0x41451000, 0x412d1800,
+ 0x4943c857, 0x493fc857, 0x0201f800, 0x001071a9,
+ 0x40c50000, 0x59a8d086, 0x82697480, 0x00000000,
+ 0x83f17500, 0x0c000000, 0x04000004, 0x82b97580,
+ 0x0c000000, 0x04020064, 0x0201f800, 0x00110bb8,
+ 0x0201f800, 0x00110ba8, 0x0201f800, 0x00110c5b,
+ 0x0201f800, 0x00110dc9, 0x808101c0, 0x04000003,
+ 0x0201f800, 0x0010719d, 0x417a8800, 0x0401f007,
+ 0x81468800, 0x83457480, 0x000007ef, 0x83f17500,
+ 0x03000000, 0x0400002c, 0x0201f800, 0x0010482d,
+ 0x40c66800, 0x80c589c0, 0x040007f6, 0x8d3e7d06,
+ 0x04000004, 0x58c4d200, 0x8c68d50e, 0x040207f1,
+ 0x0201f800, 0x00104a61, 0x497a6c0b, 0x8d3e7d18,
+ 0x04000038, 0x5935000f, 0x0401f007, 0x49410207,
0x40825800, 0x58810000, 0x492fc857, 0x0201f800,
- 0x000203ef, 0x808101c0, 0x040207f9, 0x497a680f,
+ 0x00020401, 0x808101c0, 0x040207f9, 0x497a680f,
0x497a6810, 0x4937c857, 0x4a026c00, 0x00000707,
0x497a6a03, 0x497a6811, 0x599cd401, 0x486a6a0b,
0x5934d402, 0x8268d500, 0x000000ff, 0x486a6c02,
- 0x81468800, 0x83457480, 0x000007ef, 0x040007dc,
- 0x040017db, 0x8d3e7d02, 0x0400002f, 0x497b5018,
- 0x42028800, 0x000007f0, 0x0401f007, 0x81468800,
- 0x83457480, 0x000007ff, 0x83f17500, 0x03000000,
- 0x04000025, 0x0201f800, 0x001046de, 0x40c66800,
- 0x80c589c0, 0x040007f6, 0x48c7c857, 0x4a018c00,
- 0x00000707, 0x58c4d00c, 0x8068d1c0, 0x040207f0,
- 0x58c4d00f, 0x8068d1c0, 0x040207ed, 0x0201f800,
- 0x001042dd, 0x81468800, 0x83457480, 0x000007ff,
- 0x040007ed, 0x040017ec, 0x0401f00f, 0x4937c857,
- 0x8d0e1d20, 0x04000004, 0x4a026c00, 0x00000707,
- 0x0401f7ad, 0x0201f800, 0x001042dd, 0x0401f7aa,
- 0x8c68d506, 0x04000797, 0x0201f800, 0x0010b89b,
- 0x0401f794, 0x40866800, 0x408a8800, 0x408e5800,
- 0x589d1803, 0x589d1002, 0x589d0801, 0x589d0000,
- 0x829d3c00, 0x00000004, 0x1c01f000, 0x829d3c80,
- 0x00000006, 0x48813800, 0x48853801, 0x48893802,
- 0x488d3803, 0x48913804, 0x48953805, 0x41352800,
- 0x41412000, 0x41451800, 0x412d1000, 0x4933c857,
- 0x493fc857, 0x4927c857, 0x0201f800, 0x00106e3a,
- 0x40c50800, 0x5932680a, 0x813669c0, 0x0400002b,
- 0x5934d403, 0x406a8800, 0x42028000, 0x00000029,
- 0x0201f800, 0x00110363, 0x0201f800, 0x00110447,
- 0x0201f800, 0x001104e0, 0x0201f800, 0x00110916,
- 0x4937c857, 0x8d3e7d06, 0x0402001f, 0x497a6c0b,
- 0x8d3e7d18, 0x04000022, 0x5935000f, 0x808101c0,
- 0x0400000b, 0x49410207, 0x40825800, 0x58810000,
- 0x492fc857, 0x0201f800, 0x000203ef, 0x808101c0,
- 0x040207f9, 0x4882680f, 0x48826810, 0x4937c857,
- 0x4a026c00, 0x00000707, 0x497a6a03, 0x497a6811,
- 0x599cd401, 0x486a6a0b, 0x5934d402, 0x8268d500,
- 0x000000ff, 0x486a6c02, 0x808509c0, 0x04000014,
- 0x0401f00d, 0x5934d200, 0x8c68d50e, 0x040207fb,
- 0x497a6c0b, 0x8d3e7d18, 0x040207e0, 0x8d0e1d20,
- 0x04000008, 0x4a026c00, 0x00000707, 0x808509c0,
- 0x04000007, 0x0201f800, 0x00106e2e, 0x0401f004,
- 0x0201f800, 0x001042dd, 0x0401f7ec, 0x408a5800,
- 0x408e8800, 0x40928000, 0x40966800, 0x589d2805,
- 0x589d2004, 0x589d1803, 0x589d1002, 0x589d0801,
- 0x589d0000, 0x829d3c00, 0x00000006, 0x1c01f000,
- 0x809d3840, 0x48813800, 0x4937c857, 0x42010000,
- 0x00000001, 0x0201f800, 0x00107ef5, 0x40c66000,
- 0x80c589c0, 0x0400001e, 0x4925881c, 0x4935880a,
- 0x5934d403, 0x82697480, 0x000007fe, 0x04000003,
- 0x417a7800, 0x0401ff8e, 0x48826407, 0x417a7800,
- 0x0201f800, 0x001045df, 0x4200d000, 0x00000003,
- 0x0201f800, 0x001045e9, 0x836d7480, 0x00000003,
- 0x04000004, 0x59a8d016, 0x8068d000, 0x486b5016,
- 0x42027000, 0x00000002, 0x0201f800, 0x00107f26,
- 0x599cd208, 0x486a6c12, 0x41790000, 0x40818800,
- 0x589d0000, 0x809d3800, 0x1c01f000, 0x829d3c80,
- 0x00000003, 0x48813800, 0x48853801, 0x48893802,
- 0x40690800, 0x406d1000, 0x41bd0000, 0x0201f800,
- 0x00106e15, 0x5880d031, 0x41300000, 0x80697480,
- 0x04000018, 0x5880d030, 0x41300000, 0x80697480,
- 0x0400001f, 0x5930d800, 0x806cd9c0, 0x04020008,
- 0x59317001, 0x48b91001, 0x5930d001, 0x8068d1c0,
- 0x04020025, 0x488a680c, 0x0401f038, 0x5930d801,
- 0x806cd9c0, 0x04000022, 0x59317000, 0x48b8d800,
- 0x486d0800, 0x497a6001, 0x497a6000, 0x0401f02f,
- 0x5930d801, 0x806cd9c0, 0x04000010, 0x5930d000,
- 0x8068d1c0, 0x04020025, 0x486d0030, 0x59317001,
- 0x48b90031, 0x497a6001, 0x0401f024, 0x5930d001,
- 0x8068d1c0, 0x04020013, 0x48850030, 0x48690800,
- 0x486a680c, 0x0401f01d, 0x5930d000, 0x8068d1c0,
- 0x04020012, 0x486d0031, 0x486d0030, 0x497a680c,
- 0x0401f016, 0x486e6001, 0x0401f014, 0x59317000,
- 0x48b90800, 0x486e680c, 0x497a6000, 0x0401f00f,
- 0x59317001, 0x48b90030, 0x59317001, 0x48b90800,
- 0x497a6001, 0x0401f009, 0x59317000, 0x48b90031,
- 0x486e6000, 0x0401f7ee, 0x59317000, 0x48b8d800,
- 0x497a6000, 0x0401f7da, 0x589d1002, 0x589d0801,
- 0x589d0000, 0x829d3c00, 0x00000003, 0x1c01f000,
- 0x809d3840, 0x48a13800, 0x829d3c80, 0x00000004,
- 0x409d4000, 0x829d3c80, 0x00000005, 0x48813800,
- 0x48853801, 0x48893802, 0x488d3803, 0x48913804,
- 0x41790800, 0x40850000, 0x4933c857, 0x0201f800,
- 0x00106e3a, 0x40c52000, 0x41351800, 0x41191000,
- 0x49914003, 0x49d14000, 0x49a54001, 0x49154002,
- 0x5932680a, 0x59bce031, 0x4070d800, 0x8070e1c0,
- 0x04020008, 0x0401f01e, 0x406ce000, 0x586cd800,
- 0x806cd9c0, 0x0400001a, 0x808509c0, 0x04020018,
- 0x41300000, 0x806d7480, 0x04000011, 0x586cd00a,
- 0x41340000, 0x80697480, 0x040207f4, 0x406d0000,
- 0x586cd801, 0x806cd9c0, 0x040007f2, 0x41300000,
- 0x0401f005, 0x406d0000, 0x586cd801, 0x806cd9c0,
- 0x040007ec, 0x806d7480, 0x040207fb, 0x42010800,
- 0x00000001, 0x806cd9c0, 0x040207e8, 0x80857040,
- 0x04000029, 0x417a3000, 0x0201f800, 0x001074f6,
- 0x5990d004, 0x41300000, 0x80697480, 0x0400000f,
- 0x811a3000, 0x83197480, 0x00000004, 0x040007f7,
- 0x040017f6, 0x408a3000, 0x408e6800, 0x58a32003,
- 0x58a3a000, 0x58a34801, 0x58a22802, 0x80917040,
- 0x04020019, 0x0401f011, 0x42010800, 0x00000001,
- 0x0201f800, 0x00107073, 0x0201f800, 0x00106e0c,
- 0x0201f800, 0x00106e15, 0x408a3000, 0x408e6800,
- 0x58a32003, 0x58a3a000, 0x58a34801, 0x58a22802,
- 0x80917040, 0x04020008, 0x0201f800, 0x00106e2e,
- 0x0401f005, 0x4070d000, 0x4080d800, 0x0401ff40,
- 0x0401f7e1, 0x40858800, 0x589d2004, 0x589d1803,
+ 0x81468800, 0x83457480, 0x000007ef, 0x040007d7,
+ 0x040017d6, 0x8d3e7d02, 0x04000028, 0x497b501e,
+ 0x42028800, 0x000007f0, 0x0201f800, 0x0010482d,
+ 0x40c66800, 0x80c589c0, 0x0400000c, 0x48c7c857,
+ 0x4a018c00, 0x00000707, 0x58c4d00c, 0x8068d1c0,
+ 0x04020006, 0x58c4d00f, 0x8068d1c0, 0x04020003,
+ 0x0201f800, 0x001043ee, 0x81468800, 0x83457480,
+ 0x000007ff, 0x040007ed, 0x040017ec, 0x0401f00f,
+ 0x4937c857, 0x8d0e1d20, 0x04000004, 0x4a026c00,
+ 0x00000707, 0x0401f7af, 0x0201f800, 0x001043ee,
+ 0x0401f7ac, 0x8c68d506, 0x0400079c, 0x0201f800,
+ 0x0010bdf0, 0x0401f799, 0x40866800, 0x408a8800,
+ 0x408e5800, 0x589d1803, 0x589d1002, 0x589d0801,
+ 0x589d0000, 0x829d3c00, 0x00000004, 0x1c01f000,
+ 0x829d3c80, 0x00000006, 0x48813800, 0x48853801,
+ 0x48893802, 0x488d3803, 0x48913804, 0x48953805,
+ 0x41352800, 0x41412000, 0x41451800, 0x412d1000,
+ 0x4933c857, 0x493fc857, 0x4927c857, 0x0201f800,
+ 0x001071a9, 0x40c50800, 0x5932680a, 0x813669c0,
+ 0x04000030, 0x5934d403, 0x406a8800, 0x42028000,
+ 0x00000029, 0x0201f800, 0x00110a68, 0x0201f800,
+ 0x00110b49, 0x0201f800, 0x00110be2, 0x0201f800,
+ 0x00111028, 0x4937c857, 0x8d3e7d06, 0x04000004,
+ 0x5934d200, 0x8c68d50e, 0x0402001e, 0x0201f800,
+ 0x00104a61, 0x497a6c0b, 0x8d3e7d18, 0x0400001e,
+ 0x5935000f, 0x808101c0, 0x0400000b, 0x49410207,
+ 0x40825800, 0x58810000, 0x492fc857, 0x0201f800,
+ 0x00020401, 0x808101c0, 0x040207f9, 0x4882680f,
+ 0x48826810, 0x4937c857, 0x4a026c00, 0x00000707,
+ 0x497a6a03, 0x497a6811, 0x599cd401, 0x486a6a0b,
+ 0x5934d402, 0x8268d500, 0x000000ff, 0x486a6c02,
+ 0x808509c0, 0x0400000c, 0x0201f800, 0x0010719d,
+ 0x0401f009, 0x8d0e1d20, 0x04000004, 0x4a026c00,
+ 0x00000707, 0x0401f7f7, 0x0201f800, 0x001043ee,
+ 0x0401f7f4, 0x408a5800, 0x408e8800, 0x40928000,
+ 0x40966800, 0x589d2805, 0x589d2004, 0x589d1803,
0x589d1002, 0x589d0801, 0x589d0000, 0x829d3c00,
- 0x00000009, 0x589d4000, 0x809d3800, 0x1c01f000,
- 0x829d3c80, 0x00000002, 0x48813800, 0x48853801,
- 0x40690000, 0x59310800, 0x497a6000, 0x0201f800,
- 0x00106e15, 0x808101c0, 0x04000008, 0x48850000,
- 0x598cd00a, 0x41300000, 0x80697480, 0x0402000b,
- 0x4883180a, 0x0401f009, 0x598cd00a, 0x41300000,
- 0x80697480, 0x04000003, 0x4887180b, 0x0401f003,
- 0x4883180a, 0x4883180b, 0x0201f800, 0x00106e27,
- 0x589d0801, 0x589d0000, 0x829d3c00, 0x00000002,
- 0x1c01f000, 0x829d3c80, 0x00000002, 0x48813800,
- 0x48853801, 0x598d000b, 0x41790800, 0x4933c857,
- 0x813261c0, 0x04020007, 0x0401f00a, 0x41300000,
- 0x80817480, 0x0400000e, 0x40810800, 0x58810000,
- 0x808101c0, 0x040207fa, 0x4178d000, 0x0401f015,
- 0x4200d000, 0x000005aa, 0x4080d800, 0x4084e000,
- 0x0201f800, 0x0010032b, 0x0401f7f6, 0x4084d000,
- 0x0401ffc4, 0x598cd00f, 0x41300000, 0x80697480,
- 0x04000005, 0x497a6008, 0x4200d000, 0x00000001,
- 0x0401f004, 0x0201f800, 0x001074ce, 0x0401f7fa,
- 0x40698800, 0x589d0801, 0x589d0000, 0x829d3c00,
- 0x00000002, 0x1c01f000, 0x829d3c80, 0x00000002,
+ 0x00000006, 0x1c01f000, 0x809d3840, 0x48813800,
+ 0x4937c857, 0x42010000, 0x00000001, 0x0201f800,
+ 0x00108294, 0x40c66000, 0x80c589c0, 0x0400001e,
+ 0x4925881c, 0x4935880a, 0x5934d403, 0x82697480,
+ 0x000007fe, 0x04000003, 0x417a7800, 0x0401ff91,
+ 0x48826407, 0x417a7800, 0x0201f800, 0x0010472b,
+ 0x4200d000, 0x00000003, 0x0201f800, 0x00104735,
+ 0x836d7480, 0x00000003, 0x04000004, 0x59a8d01c,
+ 0x8068d000, 0x486b501c, 0x42027000, 0x00000002,
+ 0x0201f800, 0x001082c5, 0x599cd208, 0x486a6c12,
+ 0x41790000, 0x40818800, 0x589d0000, 0x809d3800,
+ 0x1c01f000, 0x829d3c80, 0x00000003, 0x48813800,
+ 0x48853801, 0x48893802, 0x40690800, 0x406d1000,
+ 0x41bd0000, 0x0201f800, 0x00107180, 0x5880d031,
+ 0x41300000, 0x80697480, 0x04000018, 0x5880d030,
+ 0x41300000, 0x80697480, 0x0400001f, 0x5930d800,
+ 0x806cd9c0, 0x04020008, 0x59317001, 0x48b91001,
+ 0x5930d001, 0x8068d1c0, 0x04020025, 0x488a680c,
+ 0x0401f038, 0x5930d801, 0x806cd9c0, 0x04000022,
+ 0x59317000, 0x48b8d800, 0x486d0800, 0x497a6001,
+ 0x497a6000, 0x0401f02f, 0x5930d801, 0x806cd9c0,
+ 0x04000010, 0x5930d000, 0x8068d1c0, 0x04020025,
+ 0x486d0030, 0x59317001, 0x48b90031, 0x497a6001,
+ 0x0401f024, 0x5930d001, 0x8068d1c0, 0x04020013,
+ 0x48850030, 0x48690800, 0x486a680c, 0x0401f01d,
+ 0x5930d000, 0x8068d1c0, 0x04020012, 0x486d0031,
+ 0x486d0030, 0x497a680c, 0x0401f016, 0x486e6001,
+ 0x0401f014, 0x59317000, 0x48b90800, 0x486e680c,
+ 0x497a6000, 0x0401f00f, 0x59317001, 0x48b90030,
+ 0x59317001, 0x48b90800, 0x497a6001, 0x0401f009,
+ 0x59317000, 0x48b90031, 0x486e6000, 0x0401f7ee,
+ 0x59317000, 0x48b8d800, 0x497a6000, 0x0401f7da,
+ 0x589d1002, 0x589d0801, 0x589d0000, 0x829d3c00,
+ 0x00000003, 0x1c01f000, 0x809d3840, 0x48a13800,
+ 0x829d3c80, 0x00000004, 0x409d4000, 0x829d3c80,
+ 0x00000005, 0x48813800, 0x48853801, 0x48893802,
+ 0x488d3803, 0x48913804, 0x41790800, 0x40850000,
+ 0x4933c857, 0x0201f800, 0x001071a9, 0x40c52000,
+ 0x41351800, 0x41191000, 0x49914003, 0x49d14000,
+ 0x49a54001, 0x49154002, 0x5932680a, 0x59bce031,
+ 0x4070d800, 0x8070e1c0, 0x04020008, 0x0401f01e,
+ 0x406ce000, 0x586cd800, 0x806cd9c0, 0x0400001a,
+ 0x808509c0, 0x04020018, 0x41300000, 0x806d7480,
+ 0x04000011, 0x586cd00a, 0x41340000, 0x80697480,
+ 0x040207f4, 0x406d0000, 0x586cd801, 0x806cd9c0,
+ 0x040007f2, 0x41300000, 0x0401f005, 0x406d0000,
+ 0x586cd801, 0x806cd9c0, 0x040007ec, 0x806d7480,
+ 0x040207fb, 0x42010800, 0x00000001, 0x806cd9c0,
+ 0x040207e8, 0x80857040, 0x04000029, 0x417a3000,
+ 0x0201f800, 0x00107864, 0x5990d004, 0x41300000,
+ 0x80697480, 0x0400000f, 0x811a3000, 0x83197480,
+ 0x00000004, 0x040007f7, 0x040017f6, 0x408a3000,
+ 0x408e6800, 0x58a32003, 0x58a3a000, 0x58a34801,
+ 0x58a22802, 0x80917040, 0x04020019, 0x0401f011,
+ 0x42010800, 0x00000001, 0x0201f800, 0x001073e2,
+ 0x0201f800, 0x00107177, 0x0201f800, 0x00107180,
+ 0x408a3000, 0x408e6800, 0x58a32003, 0x58a3a000,
+ 0x58a34801, 0x58a22802, 0x80917040, 0x04020008,
+ 0x0201f800, 0x0010719d, 0x0401f005, 0x4070d000,
+ 0x4080d800, 0x0401ff40, 0x0401f7e1, 0x40858800,
+ 0x589d2004, 0x589d1803, 0x589d1002, 0x589d0801,
+ 0x589d0000, 0x829d3c00, 0x00000009, 0x589d4000,
+ 0x809d3800, 0x1c01f000, 0x829d3c80, 0x00000002,
0x48813800, 0x48853801, 0x40690000, 0x59310800,
- 0x497a6000, 0x0201f800, 0x00106e15, 0x808101c0,
- 0x04000008, 0x48850000, 0x598cd008, 0x41300000,
- 0x80697480, 0x0402000b, 0x48831808, 0x0401f009,
- 0x598cd008, 0x41300000, 0x80697480, 0x04000003,
- 0x48871809, 0x0401f003, 0x48831808, 0x48831809,
- 0x0201f800, 0x00106e27, 0x589d0801, 0x589d0000,
+ 0x497a6000, 0x0201f800, 0x00107180, 0x808101c0,
+ 0x04000008, 0x48850000, 0x598cd00a, 0x41300000,
+ 0x80697480, 0x0402000b, 0x4883180a, 0x0401f009,
+ 0x598cd00a, 0x41300000, 0x80697480, 0x04000003,
+ 0x4887180b, 0x0401f003, 0x4883180a, 0x4883180b,
+ 0x0201f800, 0x00107196, 0x589d0801, 0x589d0000,
0x829d3c00, 0x00000002, 0x1c01f000, 0x829d3c80,
- 0x00000002, 0x48813800, 0x48853801, 0x598d0009,
+ 0x00000002, 0x48813800, 0x48853801, 0x598d000b,
0x41790800, 0x4933c857, 0x813261c0, 0x04020007,
- 0x0401f017, 0x41300000, 0x80817480, 0x04000007,
+ 0x0401f00a, 0x41300000, 0x80817480, 0x0400000e,
0x40810800, 0x58810000, 0x808101c0, 0x040207fa,
- 0x4178d000, 0x0401f01a, 0x4084d000, 0x0401ffcb,
- 0x598cd00f, 0x41300000, 0x80697480, 0x04000011,
- 0x5930d403, 0x82697480, 0x00000042, 0x0400000b,
- 0x4200d000, 0x00000001, 0x0401f00d, 0x4200d000,
- 0x00000561, 0x4080d800, 0x4084e000, 0x0201f800,
- 0x0010032b, 0x0401f7e9, 0x497a6008, 0x0401f7f5,
- 0x0201f800, 0x001074ce, 0x0401f7ee, 0x40698800,
- 0x589d0801, 0x589d0000, 0x829d3c00, 0x00000002,
- 0x1c01f000, 0x829d3c80, 0x00000002, 0x48813800,
- 0x48853801, 0x40690000, 0x59310800, 0x497a6000,
- 0x0201f800, 0x00106e15, 0x808101c0, 0x04000008,
- 0x48850000, 0x598cd004, 0x41300000, 0x80697480,
- 0x0402000b, 0x48831804, 0x0401f009, 0x598cd004,
- 0x41300000, 0x80697480, 0x04000003, 0x48871805,
- 0x0401f003, 0x48831804, 0x48831805, 0x0201f800,
- 0x00106e27, 0x589d0801, 0x589d0000, 0x829d3c00,
- 0x00000002, 0x1c01f000, 0x829d3c80, 0x00000002,
- 0x48813800, 0x48853801, 0x598d0005, 0x40810800,
- 0x4933c857, 0x813261c0, 0x04020007, 0x0401f022,
- 0x41300000, 0x80817480, 0x04000007, 0x40810800,
- 0x58810000, 0x808101c0, 0x040207fa, 0x4178d000,
- 0x0401f02b, 0x598cd00f, 0x80697480, 0x04000025,
- 0x0201f800, 0x00106e15, 0x598cd005, 0x40800000,
- 0x80697480, 0x04000017, 0x598cd004, 0x80697480,
- 0x04000009, 0x58817000, 0x48b90800, 0x49790000,
- 0x0201f800, 0x00106e27, 0x4200d000, 0x00000001,
- 0x0401f017, 0x48871804, 0x49790000, 0x49790800,
- 0x0401f7f8, 0x4200d000, 0x000005ed, 0x4080d800,
- 0x4080e000, 0x0201f800, 0x0010032b, 0x0401f7de,
- 0x58817000, 0x48bb1805, 0x49790000, 0x598cd004,
- 0x80697480, 0x040207eb, 0x497b1804, 0x0401f7e9,
- 0x0201f800, 0x001074ce, 0x0401f7da, 0x40698800,
- 0x589d0801, 0x589d0000, 0x829d3c00, 0x00000002,
- 0x1c01f000, 0x829d3c80, 0x00000002, 0x48813800,
- 0x48853801, 0x41790000, 0x0201f800, 0x00106e3a,
- 0x40c50800, 0x0401ff62, 0x80c57040, 0x04000007,
- 0x0401ff11, 0x80c57040, 0x04000004, 0x0401ffaf,
- 0x80c57040, 0x04020002, 0x40c50000, 0x80857040,
- 0x04020003, 0x0201f800, 0x00106e2e, 0x40818800,
+ 0x4178d000, 0x0401f015, 0x4200d000, 0x000005b1,
+ 0x4080d800, 0x4084e000, 0x0201f800, 0x0010032c,
+ 0x0401f7f6, 0x4084d000, 0x0401ffc4, 0x598cd00f,
+ 0x41300000, 0x80697480, 0x04000005, 0x497a6008,
+ 0x4200d000, 0x00000001, 0x0401f004, 0x0201f800,
+ 0x0010783c, 0x0401f7fa, 0x40698800, 0x589d0801,
+ 0x589d0000, 0x829d3c00, 0x00000002, 0x1c01f000,
+ 0x829d3c80, 0x00000002, 0x48813800, 0x48853801,
+ 0x40690000, 0x59310800, 0x497a6000, 0x0201f800,
+ 0x00107180, 0x808101c0, 0x04000008, 0x48850000,
+ 0x598cd008, 0x41300000, 0x80697480, 0x0402000b,
+ 0x48831808, 0x0401f009, 0x598cd008, 0x41300000,
+ 0x80697480, 0x04000003, 0x48871809, 0x0401f003,
+ 0x48831808, 0x48831809, 0x0201f800, 0x00107196,
0x589d0801, 0x589d0000, 0x829d3c00, 0x00000002,
0x1c01f000, 0x829d3c80, 0x00000002, 0x48813800,
- 0x48853801, 0x5c00d000, 0x4c680000, 0x486bc857,
- 0x41350000, 0x412d0800, 0x5932680a, 0x59325809,
- 0x4933c857, 0x4943c857, 0x493fc857, 0x5930d407,
- 0x486bc857, 0x5930dc07, 0x806c0040, 0x4000d000,
- 0x82697480, 0x00000012, 0x83f17500, 0x03000000,
- 0x04000015, 0x0c01f001, 0x00110257, 0x00110233,
- 0x0011023d, 0x00110257, 0x00110260, 0x0011026d,
- 0x00110226, 0x00110226, 0x00110277, 0x0011027e,
- 0x00110226, 0x00110226, 0x00110226, 0x00110226,
- 0x00110226, 0x00110287, 0x00110287, 0x0011022c,
- 0x0011022c, 0x4200d000, 0x00000a7f, 0x4130e000,
- 0x0201f800, 0x0010032b, 0x0401f0a1, 0x0201f800,
- 0x00109898, 0x80c589c0, 0x04020077, 0x0201f800,
- 0x00107eb4, 0x0401f09a, 0x0201f800, 0x00109898,
- 0x80c589c0, 0x04020066, 0x0201f800, 0x00107eb4,
- 0x8d3e7d1c, 0x04000092, 0x497a600a, 0x0401f090,
- 0x5930d008, 0x8c68d500, 0x04020053, 0x0201f800,
- 0x00109898, 0x80c589c0, 0x040007f4, 0x592cd205,
- 0x8268d500, 0x000000ff, 0x82697480, 0x00000014,
- 0x04000003, 0x0201f800, 0x001099b4, 0x4a025a05,
- 0x00000103, 0x49425a07, 0x497a580a, 0x0201f800,
- 0x00109a5c, 0x0201f800, 0x0010b4b0, 0x0201f800,
- 0x000203ef, 0x0401f7e1, 0x0201f800, 0x001105c7,
- 0x80c589c0, 0x04020035, 0x0201f800, 0x00109bf9,
- 0x0201f800, 0x001086a8, 0x0401f7d8, 0x42000000,
- 0x00111500, 0x81317480, 0x0400004a, 0x0201f800,
- 0x00109898, 0x80c589c0, 0x040007d0, 0x4200d000,
- 0x000009c8, 0x412cd800, 0x4130e000, 0x0401f7bd,
- 0x5930d008, 0x8c68d500, 0x0402002a, 0x0201f800,
- 0x00109898, 0x80c589c0, 0x040007c4, 0x0201f800,
- 0x0010b175, 0x0401f7c1, 0x0201f800, 0x00109898,
- 0x80c589c0, 0x040007bd, 0x0201f800, 0x00106c45,
- 0x0401f7ba, 0x0201f800, 0x00109898, 0x80c589c0,
- 0x040007b6, 0x49425a07, 0x497a5c0a, 0x0201f800,
- 0x000203ef, 0x0401f7b1, 0x0201f800, 0x00109898,
- 0x80c589c0, 0x0402000b, 0x59325818, 0x0201f800,
- 0x0010059d, 0x0401f7a9, 0x0201f800, 0x00101cb7,
- 0x0401f7ca, 0x0201f800, 0x00100c76, 0x0401f7ac,
- 0x49425a07, 0x0201f800, 0x000203ef, 0x0401f7f3,
- 0x0201f800, 0x00100c76, 0x0401f7d5, 0x49425a07,
- 0x0201f800, 0x000203ef, 0x5930d226, 0x82697480,
- 0x00000003, 0x04020795, 0x0201f800, 0x001099b4,
- 0x0401f792, 0x49425a07, 0x497a5c07, 0x0201f800,
- 0x000203ef, 0x0201f800, 0x00107eb4, 0x0401f020,
- 0x0201f800, 0x00109898, 0x80c589c0, 0x04000016,
- 0x59a8e052, 0x412c0000, 0x80717480, 0x04000005,
- 0x4200d000, 0x000009e1, 0x412cd800, 0x0401f771,
- 0x592d7000, 0x48bb5052, 0x592cd000, 0x8068d1c0,
- 0x04020002, 0x486b5053, 0x592cd205, 0x82697480,
- 0x00000055, 0x04000007, 0x49425a07, 0x0201f800,
- 0x000203ef, 0x497a6203, 0x497a6009, 0x0401f004,
- 0x0201f800, 0x00100594, 0x0401f7fb, 0x40826800,
- 0x40865800, 0x589d0801, 0x589d0000, 0x829d3c00,
- 0x00000002, 0x1c01f000, 0x809d3840, 0x48813800,
- 0x5930dc07, 0x406c0000, 0x826d7480, 0x00000013,
- 0x83f17500, 0x03000000, 0x04000016, 0x0c01f001,
- 0x00110333, 0x0011030a, 0x0011031a, 0x00110326,
- 0x001102f9, 0x001102fc, 0x00110344, 0x00110333,
- 0x00110333, 0x00110333, 0x00110333, 0x001102f1,
- 0x001102f1, 0x00110333, 0x001102f1, 0x00110333,
- 0x00110333, 0x00110337, 0x0011034f, 0x0011034f,
- 0x4200d000, 0x00000b72, 0x4130e000, 0x0201f800,
- 0x0010032b, 0x4200d800, 0x00000001, 0x0401f067,
- 0x4178d800, 0x8d3e7d1a, 0x04020064, 0x833ce500,
- 0x00000001, 0x4178d800, 0x8d3e7d00, 0x0402005f,
- 0x8d3e7d18, 0x04000003, 0x8d3e7d16, 0x040007f2,
- 0x5930d429, 0x4070d800, 0x8c68d500, 0x04020057,
- 0x0401f7ed, 0x8d3e7d1a, 0x04020019, 0x8d3e7d00,
- 0x04020017, 0x833d0500, 0x00001000, 0x8d3e7d18,
- 0x040207e5, 0x8d3e7d06, 0x040007e3, 0x0201f800,
- 0x00109ba3, 0x4080d800, 0x80c589c0, 0x04020047,
- 0x0401f7dd, 0x8d3e7d00, 0x040007db, 0x5930d226,
- 0x82697480, 0x00000003, 0x04020005, 0x0201f800,
- 0x00106d64, 0x80c589c0, 0x040207d3, 0x4178d800,
- 0x0401f03a, 0x8d3e7d00, 0x04020033, 0x5930d00a,
- 0x833cdd00, 0x00001000, 0x8d3e7d18, 0x040207ca,
- 0x8d3e7d06, 0x040007c8, 0x5868d200, 0x8c68d50e,
- 0x0402002e, 0x0401f7c4, 0x4178d800, 0x8d3e7d00,
- 0x0402002a, 0x0401f7c0, 0x833cd500, 0x00000001,
- 0x4178d800, 0x8d3e7d00, 0x04020024, 0x8d3e7d18,
- 0x04000005, 0x4200d800, 0x00000001, 0x8d3e7d16,
- 0x0400001e, 0x4068d800, 0x0401f01c, 0x4178d800,
- 0x8d3e7d00, 0x04020019, 0x833cd500, 0x00001000,
- 0x4200d800, 0x00000001, 0x8d3e7d18, 0x04020013,
- 0x4068d800, 0x0401f011, 0x59a8d079, 0x5868d400,
- 0x8268d580, 0x00000707, 0x8068d080, 0x8068d000,
- 0x8068013e, 0x4200d000, 0x00000001, 0x8068dc80,
- 0x0401f006, 0x0201f800, 0x00106d64, 0x40c4d800,
- 0x80c589c0, 0x040207ca, 0x406d8800, 0x589d0000,
- 0x809d3800, 0x1c01f000, 0x829d3c80, 0x00000006,
+ 0x48853801, 0x598d0009, 0x41790800, 0x4933c857,
+ 0x813261c0, 0x04020007, 0x0401f017, 0x41300000,
+ 0x80817480, 0x04000007, 0x40810800, 0x58810000,
+ 0x808101c0, 0x040207fa, 0x4178d000, 0x0401f01a,
+ 0x4084d000, 0x0401ffcb, 0x598cd00f, 0x41300000,
+ 0x80697480, 0x04000011, 0x5930d403, 0x82697480,
+ 0x00000042, 0x0400000b, 0x4200d000, 0x00000001,
+ 0x0401f00d, 0x4200d000, 0x00000568, 0x4080d800,
+ 0x4084e000, 0x0201f800, 0x0010032c, 0x0401f7e9,
+ 0x497a6008, 0x0401f7f5, 0x0201f800, 0x0010783c,
+ 0x0401f7ee, 0x40698800, 0x589d0801, 0x589d0000,
+ 0x829d3c00, 0x00000002, 0x1c01f000, 0x829d3c80,
+ 0x00000002, 0x48813800, 0x48853801, 0x40690000,
+ 0x59310800, 0x497a6000, 0x0201f800, 0x00107180,
+ 0x808101c0, 0x04000008, 0x48850000, 0x598cd004,
+ 0x41300000, 0x80697480, 0x0402000b, 0x48831804,
+ 0x0401f009, 0x598cd004, 0x41300000, 0x80697480,
+ 0x04000003, 0x48871805, 0x0401f003, 0x48831804,
+ 0x48831805, 0x0201f800, 0x00107196, 0x589d0801,
+ 0x589d0000, 0x829d3c00, 0x00000002, 0x1c01f000,
+ 0x829d3c80, 0x00000002, 0x48813800, 0x48853801,
+ 0x598d0005, 0x40810800, 0x4933c857, 0x813261c0,
+ 0x04020007, 0x0401f022, 0x41300000, 0x80817480,
+ 0x04000007, 0x40810800, 0x58810000, 0x808101c0,
+ 0x040207fa, 0x4178d000, 0x0401f02b, 0x598cd00f,
+ 0x80697480, 0x04000025, 0x0201f800, 0x00107180,
+ 0x598cd005, 0x40800000, 0x80697480, 0x04000017,
+ 0x598cd004, 0x80697480, 0x04000009, 0x58817000,
+ 0x48b90800, 0x49790000, 0x0201f800, 0x00107196,
+ 0x4200d000, 0x00000001, 0x0401f017, 0x48871804,
+ 0x49790000, 0x49790800, 0x0401f7f8, 0x4200d000,
+ 0x000005f4, 0x4080d800, 0x4080e000, 0x0201f800,
+ 0x0010032c, 0x0401f7de, 0x58817000, 0x48bb1805,
+ 0x49790000, 0x598cd004, 0x80697480, 0x040207eb,
+ 0x497b1804, 0x0401f7e9, 0x0201f800, 0x0010783c,
+ 0x0401f7da, 0x40698800, 0x589d0801, 0x589d0000,
+ 0x829d3c00, 0x00000002, 0x1c01f000, 0x829d3c80,
+ 0x00000002, 0x48813800, 0x48853801, 0x41790000,
+ 0x0201f800, 0x001071a9, 0x40c50800, 0x0401ff62,
+ 0x80c57040, 0x04000007, 0x0401ff11, 0x80c57040,
+ 0x04000004, 0x0401ffaf, 0x80c57040, 0x04020002,
+ 0x40c50000, 0x80857040, 0x04020003, 0x0201f800,
+ 0x0010719d, 0x40818800, 0x589d0801, 0x589d0000,
+ 0x829d3c00, 0x00000002, 0x1c01f000, 0x829d3c80,
+ 0x00000002, 0x48813800, 0x48853801, 0x5c00d000,
+ 0x4c680000, 0x486bc857, 0x41350000, 0x412d0800,
+ 0x5932680a, 0x59325809, 0x4933c857, 0x4943c857,
+ 0x493fc857, 0x5930d407, 0x486bc857, 0x5930dc07,
+ 0x806c0040, 0x4000d000, 0x82697480, 0x00000012,
+ 0x83f17500, 0x03000000, 0x04000015, 0x0c01f001,
+ 0x00110958, 0x00110934, 0x0011093e, 0x00110958,
+ 0x00110963, 0x00110970, 0x00110927, 0x00110927,
+ 0x0011097a, 0x00110981, 0x00110927, 0x00110927,
+ 0x00110927, 0x00110927, 0x00110927, 0x0011098a,
+ 0x0011098a, 0x0011092d, 0x0011092d, 0x4200d000,
+ 0x00000a8a, 0x4130e000, 0x0201f800, 0x0010032c,
+ 0x0401f0a5, 0x0201f800, 0x00109c46, 0x80c589c0,
+ 0x0402007b, 0x0201f800, 0x00108253, 0x0401f09e,
+ 0x0201f800, 0x00109c46, 0x80c589c0, 0x0402006a,
+ 0x0201f800, 0x00108253, 0x8d3e7d1c, 0x04000096,
+ 0x497a600a, 0x0401f094, 0x5930d008, 0x8c68d500,
+ 0x04020057, 0x0201f800, 0x00109c46, 0x80c589c0,
+ 0x040007f4, 0x592cd205, 0x8268d500, 0x000000ff,
+ 0x82697480, 0x00000014, 0x04000003, 0x0201f800,
+ 0x00109d64, 0x4a025a05, 0x00000103, 0x49425a07,
+ 0x497a580a, 0x0201f800, 0x00109e0c, 0x0201f800,
+ 0x0010b9df, 0x0201f800, 0x00020401, 0x0401f7e1,
+ 0x0201f800, 0x0010bd7c, 0x0201f800, 0x00110cc9,
+ 0x80c589c0, 0x04020037, 0x0201f800, 0x00109fab,
+ 0x0201f800, 0x001089ef, 0x0401f7d6, 0x42000000,
+ 0x00111cc0, 0x81317480, 0x0400004c, 0x0201f800,
+ 0x00109c46, 0x80c589c0, 0x040007ce, 0x4200d000,
+ 0x000009d2, 0x412cd800, 0x4130e000, 0x0401f7bb,
+ 0x5930d008, 0x8c68d500, 0x0402002c, 0x0201f800,
+ 0x00109c46, 0x80c589c0, 0x040007c2, 0x0201f800,
+ 0x0010b634, 0x0401f7bf, 0x0201f800, 0x00109c46,
+ 0x80c589c0, 0x040007bb, 0x0201f800, 0x00106fa8,
+ 0x0401f7b8, 0x0201f800, 0x00109c46, 0x80c589c0,
+ 0x040007b4, 0x49425a07, 0x497a5c0a, 0x0201f800,
+ 0x00020401, 0x0401f7af, 0x0201f800, 0x001011f2,
+ 0x0201f800, 0x00109c46, 0x80c589c0, 0x0402000b,
+ 0x59325818, 0x0201f800, 0x001005b3, 0x0401f7a5,
+ 0x0201f800, 0x00101d37, 0x0401f7c8, 0x0201f800,
+ 0x00100c9b, 0x0401f7a8, 0x49425a07, 0x0201f800,
+ 0x00020401, 0x0401f7f3, 0x0201f800, 0x00100c9b,
+ 0x0401f7d3, 0x49425a07, 0x0201f800, 0x00020401,
+ 0x5930d226, 0x82697480, 0x00000003, 0x04020791,
+ 0x0201f800, 0x00109d64, 0x0401f78e, 0x49425a07,
+ 0x497a5c07, 0x0201f800, 0x00020401, 0x0201f800,
+ 0x00108253, 0x0401f020, 0x0201f800, 0x00109c46,
+ 0x80c589c0, 0x04000016, 0x59a8e058, 0x412c0000,
+ 0x80717480, 0x04000005, 0x4200d000, 0x000009eb,
+ 0x412cd800, 0x0401f76d, 0x592d7000, 0x48bb5058,
+ 0x592cd000, 0x8068d1c0, 0x04020002, 0x486b5059,
+ 0x592cd205, 0x82697480, 0x00000055, 0x04000007,
+ 0x49425a07, 0x0201f800, 0x00020401, 0x497a6203,
+ 0x497a6009, 0x0401f004, 0x0201f800, 0x001005aa,
+ 0x0401f7fb, 0x40826800, 0x40865800, 0x589d0801,
+ 0x589d0000, 0x829d3c00, 0x00000002, 0x1c01f000,
+ 0x809d3840, 0x48813800, 0x5930dc07, 0x406c0000,
+ 0x826d7480, 0x00000013, 0x83f17500, 0x03000000,
+ 0x04000016, 0x0c01f001, 0x00110a38, 0x00110a0f,
+ 0x00110a1f, 0x00110a2b, 0x001109fe, 0x00110a01,
+ 0x00110a49, 0x00110a38, 0x00110a38, 0x00110a38,
+ 0x00110a38, 0x001109f6, 0x001109f6, 0x00110a38,
+ 0x001109f6, 0x00110a38, 0x00110a38, 0x00110a3c,
+ 0x00110a54, 0x00110a54, 0x4200d000, 0x00000b7d,
+ 0x4130e000, 0x0201f800, 0x0010032c, 0x4200d800,
+ 0x00000001, 0x0401f067, 0x4178d800, 0x8d3e7d1a,
+ 0x04020064, 0x833ce500, 0x00000001, 0x4178d800,
+ 0x8d3e7d00, 0x0402005f, 0x8d3e7d18, 0x04000003,
+ 0x8d3e7d16, 0x040007f2, 0x5930d429, 0x4070d800,
+ 0x8c68d500, 0x04020057, 0x0401f7ed, 0x8d3e7d1a,
+ 0x04020019, 0x8d3e7d00, 0x04020017, 0x833d0500,
+ 0x00001000, 0x8d3e7d18, 0x040207e5, 0x8d3e7d06,
+ 0x040007e3, 0x0201f800, 0x00109f55, 0x4080d800,
+ 0x80c589c0, 0x04020047, 0x0401f7dd, 0x8d3e7d00,
+ 0x040007db, 0x5930d226, 0x82697480, 0x00000003,
+ 0x04020005, 0x0201f800, 0x001070cf, 0x80c589c0,
+ 0x040207d3, 0x4178d800, 0x0401f03a, 0x8d3e7d00,
+ 0x04020033, 0x5930d00a, 0x833cdd00, 0x00001000,
+ 0x8d3e7d18, 0x040207ca, 0x8d3e7d06, 0x040007c8,
+ 0x5868d200, 0x8c68d50e, 0x0402002e, 0x0401f7c4,
+ 0x4178d800, 0x8d3e7d00, 0x0402002a, 0x0401f7c0,
+ 0x833cd500, 0x00000001, 0x4178d800, 0x8d3e7d00,
+ 0x04020024, 0x8d3e7d18, 0x04000005, 0x4200d800,
+ 0x00000001, 0x8d3e7d16, 0x0400001e, 0x4068d800,
+ 0x0401f01c, 0x4178d800, 0x8d3e7d00, 0x04020019,
+ 0x833cd500, 0x00001000, 0x4200d800, 0x00000001,
+ 0x8d3e7d18, 0x04020013, 0x4068d800, 0x0401f011,
+ 0x59a8d087, 0x5868d400, 0x8268d580, 0x00000707,
+ 0x8068d080, 0x8068d000, 0x8068013e, 0x4200d000,
+ 0x00000001, 0x8068dc80, 0x0401f006, 0x0201f800,
+ 0x001070cf, 0x40c4d800, 0x80c589c0, 0x040207ca,
+ 0x406d8800, 0x589d0000, 0x809d3800, 0x1c01f000,
+ 0x829d3c80, 0x00000006, 0x48813800, 0x48853801,
+ 0x48893802, 0x488d3803, 0x48913804, 0x48953805,
+ 0x4933c857, 0x0201f800, 0x001071a9, 0x40c52800,
+ 0x41352000, 0x41311000, 0x412d1800, 0x41790800,
+ 0x598e6005, 0x0401f003, 0x41310800, 0x59326000,
+ 0x813261c0, 0x0400001e, 0x5932680a, 0x813669c0,
+ 0x040007fa, 0x5934d403, 0x41440000, 0x80697480,
+ 0x040207f6, 0x5930d01c, 0x41240000, 0x80697480,
+ 0x04000003, 0x812649c0, 0x040207f0, 0x0401ff4d,
+ 0x80c589c0, 0x040007ed, 0x0201f800, 0x00109c46,
+ 0x80c589c0, 0x04020013, 0x0201f800, 0x0010708e,
+ 0x59310000, 0x4084d000, 0x0401fde5, 0x0401fe64,
+ 0x40826000, 0x813261c0, 0x040207e4, 0x408a6000,
+ 0x408e5800, 0x40926800, 0x80957040, 0x04000002,
+ 0x0401f00f, 0x0201f800, 0x0010719d, 0x0401f00c,
+ 0x0201f800, 0x0010a30d, 0x80c589c0, 0x040007eb,
+ 0x5930d403, 0x82697480, 0x00000043, 0x040207e7,
+ 0x0201f800, 0x0010a319, 0x0401f7e4, 0x589d2805,
+ 0x589d2004, 0x589d1803, 0x589d1002, 0x589d0801,
+ 0x589d0000, 0x829d3c00, 0x00000006, 0x1c01f000,
+ 0x829d3c80, 0x00000006, 0x48813800, 0x48853801,
+ 0x48893802, 0x488d3803, 0x48913804, 0x48953805,
+ 0x412d1800, 0x41312000, 0x41352800, 0x41790800,
+ 0x0201f800, 0x001071a9, 0x40c51000, 0x83457480,
+ 0x000007ef, 0x04000008, 0x04001007, 0x408e5800,
+ 0x40926000, 0x40966800, 0x80897040, 0x04000020,
+ 0x0401f031, 0x0201f800, 0x0010482d, 0x40c66800,
+ 0x80c589c0, 0x04000025, 0x598e600b, 0x0401f003,
+ 0x41310800, 0x59326000, 0x813261c0, 0x04000017,
+ 0x5930d01c, 0x41240000, 0x80697480, 0x040207f9,
+ 0x5930d00a, 0x41340000, 0x80697480, 0x040207f5,
+ 0x0401fef4, 0x80c589c0, 0x040007f2, 0x0201f800,
+ 0x0010708e, 0x59310000, 0x4084d000, 0x0401fcef,
+ 0x0401fe0f, 0x40826000, 0x0401f7ec, 0x0201f800,
+ 0x0010719d, 0x0401f010, 0x8d3e7d06, 0x04000004,
+ 0x5934d200, 0x8c68d50e, 0x040207d5, 0x0201f800,
+ 0x001049c0, 0x0401f7d2, 0x4200d000, 0x0000071b,
+ 0x40c4d800, 0x4144e000, 0x0201f800, 0x0010032c,
+ 0x0401f7d6, 0x589d2805, 0x589d2004, 0x589d1803,
+ 0x589d1002, 0x589d0801, 0x589d0000, 0x829d3c00,
+ 0x00000006, 0x1c01f000, 0x829d3c80, 0x00000006,
0x48813800, 0x48853801, 0x48893802, 0x488d3803,
- 0x48913804, 0x48953805, 0x4933c857, 0x0201f800,
- 0x00106e3a, 0x40c52800, 0x41352000, 0x41311000,
- 0x412d1800, 0x41790800, 0x598e6005, 0x0401f003,
- 0x41310800, 0x59326000, 0x813261c0, 0x04000022,
- 0x5932680a, 0x813669c0, 0x040007fa, 0x5934d403,
- 0x41440000, 0x80697480, 0x040207f6, 0x5930d01c,
- 0x41240000, 0x80697480, 0x04000003, 0x812649c0,
- 0x040207f0, 0x0401ff4d, 0x80c589c0, 0x040007ed,
- 0x42010000, 0x00000001, 0x0201f800, 0x00109898,
- 0x80c589c0, 0x04020015, 0x808101c0, 0x040007e5,
- 0x0201f800, 0x00106d2b, 0x59310000, 0x4084d000,
- 0x0401fde5, 0x0401fe64, 0x40826000, 0x813261c0,
- 0x040207e0, 0x408a6000, 0x408e5800, 0x40926800,
- 0x80957040, 0x04000002, 0x0401f00e, 0x0201f800,
- 0x00106e2e, 0x0401f00b, 0x0201f800, 0x00109f4a,
- 0x80c589c0, 0x040007e9, 0x5930d403, 0x82697480,
- 0x00000043, 0x040207e5, 0x41790000, 0x0401f7e3,
+ 0x48913804, 0x48953805, 0x41311800, 0x41352000,
+ 0x412d2800, 0x41790800, 0x0201f800, 0x001071a9,
+ 0x40c51000, 0x598e6009, 0x0401f003, 0x41310800,
+ 0x59326000, 0x813261c0, 0x04000016, 0x5932680a,
+ 0x5930d01c, 0x41240000, 0x80697480, 0x040207f8,
+ 0x5934d403, 0x41440000, 0x80697480, 0x040207f4,
+ 0x0401feb0, 0x80c589c0, 0x040007f1, 0x59310000,
+ 0x0201f800, 0x0010708e, 0x4084d000, 0x0401fcf9,
+ 0x0401fdcb, 0x40826000, 0x813261c0, 0x040207ec,
+ 0x0201f800, 0x0010814b, 0x0201f800, 0x001081c1,
+ 0x408e6000, 0x40926800, 0x40965800, 0x80897040,
+ 0x04000002, 0x0401f003, 0x0201f800, 0x0010719d,
0x589d2805, 0x589d2004, 0x589d1803, 0x589d1002,
0x589d0801, 0x589d0000, 0x829d3c00, 0x00000006,
- 0x1c01f000, 0x829d3c80, 0x00000006, 0x48813800,
- 0x48853801, 0x48893802, 0x488d3803, 0x48913804,
- 0x48953805, 0x412d1800, 0x41312000, 0x41352800,
- 0x41790800, 0x0201f800, 0x00106e3a, 0x40c51000,
- 0x83457480, 0x000007ef, 0x04000008, 0x04001007,
- 0x408e5800, 0x40926000, 0x40966800, 0x80897040,
- 0x04000020, 0x0401f031, 0x0201f800, 0x001046de,
- 0x40c66800, 0x80c589c0, 0x04000025, 0x598e600b,
- 0x0401f003, 0x41310800, 0x59326000, 0x813261c0,
- 0x04000017, 0x5930d01c, 0x41240000, 0x80697480,
- 0x040207f9, 0x5930d00a, 0x41340000, 0x80697480,
- 0x040207f5, 0x0401fef1, 0x80c589c0, 0x040007f2,
- 0x0201f800, 0x00106d2b, 0x59310000, 0x4084d000,
- 0x0401fcf0, 0x0401fe10, 0x40826000, 0x0401f7ec,
- 0x0201f800, 0x00106e2e, 0x0401f010, 0x8d3e7d06,
- 0x04000004, 0x5934d200, 0x8c68d50e, 0x040207d5,
- 0x0201f800, 0x0010486a, 0x0401f7d2, 0x4200d000,
- 0x00000714, 0x40c4d800, 0x4144e000, 0x0201f800,
- 0x0010032b, 0x0401f7d6, 0x589d2805, 0x589d2004,
- 0x589d1803, 0x589d1002, 0x589d0801, 0x589d0000,
- 0x829d3c00, 0x00000006, 0x1c01f000, 0x829d3c80,
- 0x00000006, 0x48813800, 0x48853801, 0x48893802,
- 0x488d3803, 0x48913804, 0x48953805, 0x41311800,
- 0x41352000, 0x412d2800, 0x41790800, 0x0201f800,
- 0x00106e3a, 0x40c51000, 0x598e6009, 0x0401f003,
- 0x41310800, 0x59326000, 0x813261c0, 0x04000016,
- 0x5932680a, 0x5930d01c, 0x41240000, 0x80697480,
- 0x040207f8, 0x5934d403, 0x41440000, 0x80697480,
- 0x040207f4, 0x0401fead, 0x80c589c0, 0x040007f1,
- 0x59310000, 0x0201f800, 0x00106d2b, 0x4084d000,
- 0x0401fcfa, 0x0401fdcc, 0x40826000, 0x813261c0,
- 0x040207ec, 0x0201f800, 0x00107db4, 0x0201f800,
- 0x00107e2a, 0x408e6000, 0x40926800, 0x40965800,
- 0x80897040, 0x04000002, 0x0401f003, 0x0201f800,
- 0x00106e2e, 0x589d2805, 0x589d2004, 0x589d1803,
- 0x589d1002, 0x589d0801, 0x589d0000, 0x829d3c00,
- 0x00000006, 0x1c01f000, 0x829d3c80, 0x00000002,
- 0x48813800, 0x48853801, 0x4947c857, 0x0201f800,
- 0x00106e3a, 0x40c50800, 0x413d0000, 0x853e7d00,
- 0x0401ffb7, 0x0401ff64, 0x40827800, 0x80857040,
- 0x04000002, 0x0401f003, 0x0201f800, 0x00106e2e,
- 0x589d0801, 0x589d0000, 0x829d3c00, 0x00000002,
- 0x1c01f000, 0x829d3c80, 0x00000003, 0x48813800,
- 0x48853801, 0x48893802, 0x41311000, 0x41790800,
- 0x598e600b, 0x813261c0, 0x04000011, 0x0401fe6b,
- 0x80c589c0, 0x04020006, 0x41310800, 0x59326000,
- 0x813261c0, 0x040207fa, 0x0401f009, 0x0201f800,
- 0x00106d2b, 0x59310000, 0x4084d000, 0x0401fc65,
- 0x0401fd85, 0x40826000, 0x0401f7ef, 0x0201f800,
- 0x00104847, 0x408a6000, 0x589d1002, 0x589d0801,
- 0x589d0000, 0x829d3c00, 0x00000003, 0x1c01f000,
+ 0x1c01f000, 0x829d3c80, 0x00000002, 0x48813800,
+ 0x48853801, 0x4947c857, 0x0201f800, 0x001071a9,
+ 0x40c50800, 0x413d0000, 0x853e7d00, 0x0401ffb7,
+ 0x0401ff64, 0x40827800, 0x80857040, 0x04000002,
+ 0x0401f003, 0x0201f800, 0x0010719d, 0x589d0801,
+ 0x589d0000, 0x829d3c00, 0x00000002, 0x1c01f000,
0x829d3c80, 0x00000003, 0x48813800, 0x48853801,
- 0x48893802, 0x41311000, 0x41790800, 0x598e6009,
- 0x813261c0, 0x04000011, 0x0401fe48, 0x80c589c0,
+ 0x48893802, 0x41311000, 0x41790800, 0x598e600b,
+ 0x813261c0, 0x04000011, 0x0401fe6e, 0x80c589c0,
0x04020006, 0x41310800, 0x59326000, 0x813261c0,
- 0x040207fa, 0x0401f009, 0x59310000, 0x0201f800,
- 0x00106d2b, 0x4084d000, 0x0401fc90, 0x0401fd62,
- 0x40826000, 0x0401f7ef, 0x0201f800, 0x00107e0a,
- 0x0201f800, 0x00107e2a, 0x408a6000, 0x589d1002,
- 0x589d0801, 0x589d0000, 0x829d3c00, 0x00000003,
- 0x1c01f000, 0x809d3840, 0x48813800, 0x4943c857,
- 0x0201f800, 0x00106e3a, 0x40c50000, 0x0401ffd5,
- 0x0401ffb1, 0x80817040, 0x04000002, 0x0401f003,
- 0x0201f800, 0x00106e2e, 0x589d0000, 0x809d3800,
- 0x1c01f000, 0x829d3c80, 0x00000004, 0x48813800,
- 0x48853801, 0x48893802, 0x488d3803, 0x0201f800,
- 0x00106e3a, 0x40c51800, 0x41311000, 0x41790800,
- 0x598e6005, 0x813261c0, 0x04000008, 0x0401fe0f,
- 0x80c589c0, 0x04020009, 0x41310800, 0x59326000,
- 0x813261c0, 0x040207fa, 0x408a6000, 0x808d7040,
- 0x0400000a, 0x0401f00b, 0x0201f800, 0x00106d2b,
- 0x59310000, 0x4084d000, 0x0401fca7, 0x0401fd26,
- 0x40826000, 0x0401f7ec, 0x0201f800, 0x00106e2e,
- 0x589d1803, 0x589d1002, 0x589d0801, 0x589d0000,
- 0x829d3c00, 0x00000004, 0x1c01f000, 0x809d3840,
- 0x48a13800, 0x829d3c80, 0x00000005, 0x409d4000,
+ 0x040207fa, 0x0401f009, 0x0201f800, 0x0010708e,
+ 0x59310000, 0x4084d000, 0x0401fc64, 0x0401fd84,
+ 0x40826000, 0x0401f7ef, 0x0201f800, 0x0010499d,
+ 0x408a6000, 0x589d1002, 0x589d0801, 0x589d0000,
+ 0x829d3c00, 0x00000003, 0x1c01f000, 0x829d3c80,
+ 0x00000003, 0x48813800, 0x48853801, 0x48893802,
+ 0x41311000, 0x41790800, 0x598e6009, 0x813261c0,
+ 0x04000011, 0x0401fe4b, 0x80c589c0, 0x04020006,
+ 0x41310800, 0x59326000, 0x813261c0, 0x040207fa,
+ 0x0401f009, 0x59310000, 0x0201f800, 0x0010708e,
+ 0x4084d000, 0x0401fc8f, 0x0401fd61, 0x40826000,
+ 0x0401f7ef, 0x0201f800, 0x001081a1, 0x0201f800,
+ 0x001081c1, 0x408a6000, 0x589d1002, 0x589d0801,
+ 0x589d0000, 0x829d3c00, 0x00000003, 0x1c01f000,
+ 0x809d3840, 0x48813800, 0x4943c857, 0x0201f800,
+ 0x001071a9, 0x40c50000, 0x0401ffd5, 0x0401ffb1,
+ 0x80817040, 0x04000002, 0x0401f003, 0x0201f800,
+ 0x0010719d, 0x589d0000, 0x809d3800, 0x1c01f000,
+ 0x829d3c80, 0x00000004, 0x48813800, 0x48853801,
+ 0x48893802, 0x488d3803, 0x0201f800, 0x001071a9,
+ 0x40c51800, 0x41311000, 0x41790800, 0x598e6005,
+ 0x813261c0, 0x04000008, 0x0401fe12, 0x80c589c0,
+ 0x04020009, 0x41310800, 0x59326000, 0x813261c0,
+ 0x040207fa, 0x408a6000, 0x808d7040, 0x0400000a,
+ 0x0401f00b, 0x0201f800, 0x0010708e, 0x59310000,
+ 0x4084d000, 0x0401fca6, 0x0401fd25, 0x40826000,
+ 0x0401f7ec, 0x0201f800, 0x0010719d, 0x589d1803,
+ 0x589d1002, 0x589d0801, 0x589d0000, 0x829d3c00,
+ 0x00000004, 0x1c01f000, 0x809d3840, 0x48a13800,
+ 0x829d3c80, 0x00000005, 0x409d4000, 0x829d3c80,
+ 0x00000007, 0x48813800, 0x48853801, 0x48893802,
+ 0x488d3803, 0x48913804, 0x48953805, 0x48993806,
+ 0x4178d000, 0x48694004, 0x0201f800, 0x001071a9,
+ 0x40c53000, 0x41311000, 0x41352000, 0x41192800,
+ 0x412d1800, 0x49914003, 0x49d14000, 0x49a54001,
+ 0x49154002, 0x59be6031, 0x813261c0, 0x04000014,
+ 0x41310800, 0x0401f007, 0x808101c0, 0x04000003,
+ 0x41310800, 0x40826000, 0x808101c0, 0x0400000c,
+ 0x59310000, 0x5932680a, 0x5930d01c, 0x41240000,
+ 0x80697480, 0x040207f5, 0x5934d403, 0x41440000,
+ 0x80697480, 0x040207f1, 0x0401f031, 0x417a3000,
+ 0x0401f007, 0x811a3000, 0x83197480, 0x00000004,
+ 0x83f17500, 0x03000000, 0x0400001a, 0x0201f800,
+ 0x00107864, 0x59926004, 0x813261c0, 0x040007f6,
+ 0x5932680a, 0x5930d01c, 0x41240000, 0x80697480,
+ 0x040207f1, 0x5934d403, 0x41440000, 0x80697480,
+ 0x040207ed, 0x0401fdaf, 0x80c589c0, 0x040007ea,
+ 0x0201f800, 0x001073e2, 0x0201f800, 0x00107177,
+ 0x0201f800, 0x00107180, 0x0401fcc9, 0x0401f7e2,
+ 0x408a6000, 0x40926800, 0x40963000, 0x408e5800,
+ 0x58a32003, 0x58a3a000, 0x58a34801, 0x58a22802,
+ 0x80997040, 0x04000010, 0x0401f011, 0x49314004,
+ 0x40826000, 0x808101c0, 0x040007d1, 0x59310001,
+ 0x0401fd94, 0x80c589c0, 0x040007f9, 0x4084d000,
+ 0x58a0d804, 0x0201f800, 0x0011070d, 0x0401fcb0,
+ 0x0401f7f4, 0x0201f800, 0x0010719d, 0x589d3006,
+ 0x589d2805, 0x589d2004, 0x589d1803, 0x589d1002,
+ 0x589d0801, 0x589d0000, 0x829d3c00, 0x0000000c,
+ 0x589d4000, 0x809d3800, 0x1c01f000, 0x809d3840,
+ 0x48a13800, 0x829d3c80, 0x00000007, 0x409d4000,
0x829d3c80, 0x00000007, 0x48813800, 0x48853801,
0x48893802, 0x488d3803, 0x48913804, 0x48953805,
- 0x48993806, 0x4178d000, 0x48694004, 0x0201f800,
- 0x00106e3a, 0x40c53000, 0x41311000, 0x41352000,
- 0x41192800, 0x412d1800, 0x49914003, 0x49d14000,
- 0x49a54001, 0x49154002, 0x59be6031, 0x813261c0,
- 0x04000014, 0x41310800, 0x0401f007, 0x808101c0,
- 0x04000003, 0x41310800, 0x40826000, 0x808101c0,
- 0x0400000c, 0x59310000, 0x5932680a, 0x5930d01c,
- 0x41240000, 0x80697480, 0x040207f5, 0x5934d403,
- 0x41440000, 0x80697480, 0x040207f1, 0x0401f031,
- 0x417a3000, 0x0401f007, 0x811a3000, 0x83197480,
- 0x00000004, 0x83f17500, 0x03000000, 0x0400001a,
- 0x0201f800, 0x001074f6, 0x59926004, 0x813261c0,
- 0x040007f6, 0x5932680a, 0x5930d01c, 0x41240000,
- 0x80697480, 0x040207f1, 0x5934d403, 0x41440000,
- 0x80697480, 0x040207ed, 0x0401fdac, 0x80c589c0,
- 0x040007ea, 0x0201f800, 0x00107073, 0x0201f800,
- 0x00106e0c, 0x0201f800, 0x00106e15, 0x0401fcca,
- 0x0401f7e2, 0x408a6000, 0x40926800, 0x40963000,
- 0x408e5800, 0x58a32003, 0x58a3a000, 0x58a34801,
- 0x58a22802, 0x80997040, 0x04000010, 0x0401f011,
- 0x49314004, 0x40826000, 0x808101c0, 0x040007d1,
- 0x59310001, 0x0401fd91, 0x80c589c0, 0x040007f9,
- 0x4084d000, 0x58a0d804, 0x0201f800, 0x0011000c,
- 0x0401fcb1, 0x0401f7f4, 0x0201f800, 0x00106e2e,
- 0x589d3006, 0x589d2805, 0x589d2004, 0x589d1803,
- 0x589d1002, 0x589d0801, 0x589d0000, 0x829d3c00,
- 0x0000000c, 0x589d4000, 0x809d3800, 0x1c01f000,
- 0x809d3840, 0x48a13800, 0x829d3c80, 0x00000007,
- 0x409d4000, 0x829d3c80, 0x00000007, 0x48813800,
- 0x48853801, 0x48893802, 0x488d3803, 0x48913804,
- 0x48953805, 0x48993806, 0x41791800, 0x0201f800,
- 0x00106e3a, 0x40c52800, 0x41313000, 0x49354005,
- 0x492d4004, 0x49194006, 0x49914003, 0x49d14000,
- 0x49a54001, 0x49154002, 0x59be6031, 0x813261c0,
- 0x04000023, 0x41312000, 0x408d0800, 0x59311000,
- 0x5932680a, 0x0401f009, 0x41311800, 0x808509c0,
- 0x04000010, 0x808101c0, 0x04000002, 0x40826000,
- 0x808101c0, 0x0400000d, 0x59310001, 0x0401fd4f,
- 0x80c589c0, 0x040007f5, 0x4090d000, 0x408cd800,
- 0x0201f800, 0x0011000c, 0x0401fc6f, 0x0401f7f2,
- 0x41310800, 0x0401f7f0, 0x808911c0, 0x04000006,
- 0x408a6000, 0x808509c0, 0x04000003, 0x40852000,
- 0x40810800, 0x808911c0, 0x040207e1, 0x417a3000,
- 0x0201f800, 0x001074f6, 0x59926004, 0x813261c0,
- 0x04000004, 0x0401fd35, 0x80c589c0, 0x04020011,
- 0x811a3000, 0x83197480, 0x00000004, 0x040007f5,
- 0x040017f4, 0x409a6000, 0x58a26805, 0x58a25804,
- 0x58a23006, 0x58a32003, 0x58a3a000, 0x58a34801,
- 0x58a22802, 0x80957040, 0x0400000a, 0x0401f00b,
- 0x0201f800, 0x00107073, 0x0201f800, 0x00106e0c,
- 0x0201f800, 0x00106e15, 0x0401fc43, 0x0401f7e9,
- 0x0201f800, 0x00106e2e, 0x589d3006, 0x589d2805,
- 0x589d2004, 0x589d1803, 0x589d1002, 0x589d0801,
- 0x589d0000, 0x829d3c00, 0x0000000e, 0x589d4000,
- 0x809d3800, 0x1c01f000, 0x4178e000, 0x497bc856,
- 0x5930dc03, 0x826cd480, 0x00000002, 0x82697480,
- 0x00000002, 0x04000007, 0x04001006, 0x599cd019,
- 0x8c68d50e, 0x04000005, 0x806cd9c0, 0x04020003,
- 0x4200e000, 0x00000001, 0x40718800, 0x1c01f000,
- 0x829d3c80, 0x00000004, 0x48813800, 0x48853801,
- 0x48893802, 0x488d3803, 0x412d0800, 0x41351000,
- 0x41391800, 0x0201f800, 0x001102d3, 0x80c589c0,
- 0x040000cd, 0x5932680a, 0x5930d407, 0x40680000,
- 0x82697480, 0x00000013, 0x83f17500, 0x03000000,
- 0x04000028, 0x0c01f001, 0x001106b2, 0x0011065f,
- 0x0011066f, 0x00110624, 0x0011065f, 0x0011066f,
- 0x00110647, 0x00110658, 0x0011061c, 0x0011067f,
- 0x00110606, 0x0011061c, 0x0011061c, 0x0011061c,
- 0x0011061c, 0x001106b2, 0x00110606, 0x00110603,
- 0x0011061c, 0x0011061c, 0x59325818, 0x0201f800,
- 0x0010059d, 0x5930d203, 0x82697480, 0x00000004,
- 0x04000090, 0x59325809, 0x0201f800, 0x00109898,
- 0x80c589c0, 0x04020083, 0x0201f800, 0x00107eb4,
- 0x8d3e7d1c, 0x040000a0, 0x497a600a, 0x0401f09e,
- 0x4200d000, 0x0000030f, 0x4000d800, 0x4130e000,
- 0x0201f800, 0x0010032b, 0x0401f097, 0x59325809,
- 0x0201f800, 0x00109898, 0x80c589c0, 0x0402006a,
- 0x0201f800, 0x00107eb4, 0x0401f08f, 0x813669c0,
- 0x04000077, 0x0201f800, 0x0010a424, 0x5930d203,
- 0x82697480, 0x00000004, 0x04000081, 0x59325809,
- 0x0201f800, 0x00109898, 0x80c589c0, 0x040007df,
- 0x592cd205, 0x8268d500, 0x000000ff, 0x82697480,
- 0x00000014, 0x04000003, 0x0201f800, 0x001099b4,
- 0x4a025a05, 0x00000103, 0x5930d402, 0x486a5c07,
- 0x592cd409, 0x8c68d512, 0x04020067, 0x49425a07,
- 0x497a580a, 0x0201f800, 0x00109f56, 0x0201f800,
- 0x000203ef, 0x0401f7c9, 0x5930d203, 0x82697480,
- 0x00000004, 0x04000065, 0x59325809, 0x0201f800,
- 0x00109898, 0x80c589c0, 0x040007c0, 0x49425a07,
- 0x813669c0, 0x040007f0, 0x0201f800, 0x0010b4b0,
- 0x0201f800, 0x00109f56, 0x0401f7ed, 0x5930d203,
- 0x82697480, 0x00000011, 0x04020057, 0x5930d426,
- 0x486a6203, 0x0401f054, 0x5930d403, 0x82697480,
- 0x00000043, 0x04000050, 0x0201f800, 0x0010b827,
- 0x0401ff62, 0x80c589c0, 0x0402003c, 0x0201f800,
- 0x001099db, 0x80c589c0, 0x040007a4, 0x0201f800,
- 0x001086a8, 0x0401f7a1, 0x59325809, 0x0201f800,
- 0x00109898, 0x80c589c0, 0x0400079c, 0x49425a07,
- 0x497a5c0a, 0x0201f800, 0x000203ef, 0x5930d226,
- 0x82697480, 0x00000003, 0x04020794, 0x0201f800,
- 0x001099b4, 0x0401f791, 0x5930d203, 0x82697480,
- 0x00000004, 0x04020013, 0x5930d006, 0x8068d1c0,
- 0x0400002d, 0x5930d415, 0x8468d558, 0x486a6415,
- 0x0401f029, 0x49425a07, 0x497a5c07, 0x0201f800,
- 0x000203ef, 0x0201f800, 0x00107eb4, 0x0401f022,
- 0x49425a07, 0x0201f800, 0x000203ef, 0x0401f77b,
- 0x59325809, 0x0201f800, 0x00106c32, 0x0401f777,
- 0x0201f800, 0x00100c76, 0x0401f76f, 0x4200d000,
- 0x00000182, 0x4134d800, 0x4130e000, 0x0201f800,
- 0x0010032b, 0x0401f784, 0x0201f800, 0x00101cb7,
- 0x0401f7c3, 0x412d0000, 0x592e580a, 0x0201f800,
- 0x0010059d, 0x40825800, 0x0401f795, 0x0201f800,
- 0x00100c76, 0x0401f77e, 0x0201f800, 0x00100c76,
- 0x0401f79a, 0x40865800, 0x408a6800, 0x408e7000,
+ 0x48993806, 0x41791800, 0x0201f800, 0x001071a9,
+ 0x40c52800, 0x41313000, 0x49354005, 0x492d4004,
+ 0x49194006, 0x49914003, 0x49d14000, 0x49a54001,
+ 0x49154002, 0x59be6031, 0x813261c0, 0x04000023,
+ 0x41312000, 0x408d0800, 0x59311000, 0x5932680a,
+ 0x0401f009, 0x41311800, 0x808509c0, 0x04000010,
+ 0x808101c0, 0x04000002, 0x40826000, 0x808101c0,
+ 0x0400000d, 0x59310001, 0x0401fd52, 0x80c589c0,
+ 0x040007f5, 0x4090d000, 0x408cd800, 0x0201f800,
+ 0x0011070d, 0x0401fc6e, 0x0401f7f2, 0x41310800,
+ 0x0401f7f0, 0x808911c0, 0x04000006, 0x408a6000,
+ 0x808509c0, 0x04000003, 0x40852000, 0x40810800,
+ 0x808911c0, 0x040207e1, 0x417a3000, 0x0201f800,
+ 0x00107864, 0x59926004, 0x813261c0, 0x04000004,
+ 0x0401fd38, 0x80c589c0, 0x04020011, 0x811a3000,
+ 0x83197480, 0x00000004, 0x040007f5, 0x040017f4,
+ 0x409a6000, 0x58a26805, 0x58a25804, 0x58a23006,
+ 0x58a32003, 0x58a3a000, 0x58a34801, 0x58a22802,
+ 0x80957040, 0x0400000a, 0x0401f00b, 0x0201f800,
+ 0x001073e2, 0x0201f800, 0x00107177, 0x0201f800,
+ 0x00107180, 0x0401fc42, 0x0401f7e9, 0x0201f800,
+ 0x0010719d, 0x589d3006, 0x589d2805, 0x589d2004,
0x589d1803, 0x589d1002, 0x589d0801, 0x589d0000,
- 0x829d3c00, 0x00000004, 0x1c01f000, 0x829d3c80,
- 0x00000002, 0x48813800, 0x48853801, 0x41310800,
- 0x4933c857, 0x4943c857, 0x493fc857, 0x42010000,
- 0x00111584, 0x59a8d00d, 0x41640000, 0x80697480,
- 0x04000010, 0x41580000, 0x80817480, 0x0402100d,
- 0x40826000, 0x8d3e7d12, 0x04000004, 0x40800000,
- 0x80857480, 0x04000002, 0x0401ff06, 0x82810400,
- 0x0000002c, 0x41580000, 0x80817480, 0x040017f5,
- 0x41510000, 0x41540000, 0x80817480, 0x04021019,
- 0x8d3e7d18, 0x04000017, 0x59a8d04d, 0x59a8004e,
- 0x80697480, 0x04000013, 0x40826000, 0x5880d00a,
- 0x8068d1c0, 0x04020005, 0x5880d203, 0x82697480,
- 0x00000008, 0x04000008, 0x0401feee, 0x82810400,
- 0x0000002c, 0x41540000, 0x80817480, 0x040017ed,
- 0x0401f004, 0x0201f800, 0x0010b76e, 0x0401f7f7,
- 0x40866000, 0x589d0801, 0x589d0000, 0x829d3c00,
- 0x00000002, 0x1c01f000, 0x497a6226, 0x812e59c0,
- 0x0400003d, 0x592cd205, 0x486bc857, 0x592cd205,
- 0x8268d500, 0x000000ff, 0x82697480, 0x00000014,
- 0x04000003, 0x4a026226, 0x00000003, 0x592cd409,
- 0x8c68d510, 0x0402001d, 0x592cd209, 0x0201f800,
- 0x00104e19, 0x0201f800, 0x00109f56, 0x0201f800,
- 0x0010c0c0, 0x80c589c0, 0x0400001f, 0x4a026403,
- 0x00000085, 0x4a026203, 0x00000009, 0x4a026407,
- 0x00000002, 0x5930d004, 0x8268d500, 0x00000100,
- 0x8268d540, 0x8000404b, 0x486a6004, 0x0201f800,
- 0x00106e2e, 0x4200d000, 0x8000404b, 0x0201f800,
- 0x00106d18, 0x0401f01f, 0x592cd209, 0x0201f800,
- 0x00104e19, 0x4a025c09, 0x00000100, 0x0201f800,
- 0x00109f56, 0x0201f800, 0x0010c0c0, 0x80c589c0,
- 0x040207e3, 0x0201f800, 0x000203ef, 0x5930d226,
- 0x82697480, 0x00000003, 0x0400000a, 0x497a6009,
- 0x0401f7db, 0x4200d000, 0x00000527, 0x4130d800,
- 0x412ce000, 0x0201f800, 0x0010032b, 0x0401f005,
- 0x0201f800, 0x001099b4, 0x497a6009, 0x0401f7d0,
- 0x1c01f000, 0x0201f800, 0x00106e2e, 0x812e59c0,
- 0x0400001b, 0x592cd409, 0x8c68d510, 0x04020012,
- 0x592cd209, 0x0201f800, 0x00104e19, 0x0201f800,
- 0x00109f56, 0x0201f800, 0x000203ef, 0x5930d203,
- 0x82697480, 0x0000000d, 0x0400000d, 0x0201f800,
- 0x00106e2e, 0x5930d00a, 0x0201f800, 0x001049b8,
- 0x0401f007, 0x592cd209, 0x0201f800, 0x00104e19,
- 0x4a025c09, 0x00000100, 0x0401f7ed, 0x0201f800,
- 0x00107eb4, 0x1c01f000, 0x829d3c80, 0x00000002,
- 0x48813800, 0x48853801, 0x41790000, 0x0201f800,
- 0x00109561, 0x40c50800, 0x48c7c857, 0x40840000,
- 0x82857480, 0x0000000d, 0x83f17500, 0x03000000,
- 0x0400002b, 0x0c01f001, 0x00110798, 0x001107de,
- 0x001107ae, 0x00110785, 0x001107b0, 0x001107a0,
- 0x00110798, 0x00110798, 0x00110798, 0x001107a0,
- 0x001107a0, 0x001107a0, 0x001107a0, 0x001107ae,
- 0x0201f800, 0x0010954b, 0x80c589c0, 0x04000005,
- 0x0201f800, 0x00107123, 0x80c589c0, 0x04000063,
- 0x0201f800, 0x00110065, 0x80c589c0, 0x04000017,
- 0x5930d403, 0x486bc857, 0x5930d403, 0x82697480,
- 0x00000040, 0x04020018, 0x0401ffaf, 0x42010000,
- 0x00000001, 0x0401f073, 0x40840000, 0x82857480,
- 0x0000000d, 0x040007d8, 0x040017d7, 0x4200d000,
- 0x000004b7, 0x4130d800, 0x4084e000, 0x0201f800,
- 0x0010032b, 0x0401f067, 0x497bc856, 0x0201f800,
- 0x00106d45, 0x80c589c0, 0x04020044, 0x59317004,
- 0x48bbc857, 0x0401ff4d, 0x0401f7e9, 0x812e59c0,
- 0x04000050, 0x0201f800, 0x00109cec, 0x80c589c0,
- 0x0400003e, 0x0201f800, 0x00106e2e, 0x592cd209,
- 0x8468d50c, 0x486a5a09, 0x592cdc07, 0x806cd0c6,
- 0x406c0000, 0x8068d400, 0x8068d400, 0x486a6006,
- 0x4200d000, 0x10000000, 0x4130d800, 0x0201f800,
- 0x001008be, 0x80c589c0, 0x0400000c, 0x592cd209,
- 0x8c68d51c, 0x04000032, 0x59c8d001, 0x8068d1c0,
- 0x0402003b, 0x4200d000, 0x40000000, 0x4130d800,
- 0x0201f800, 0x001008be, 0x5930d203, 0x82697480,
- 0x00000004, 0x040207c2, 0x41390000, 0x42027000,
- 0x00000048, 0x0201f800, 0x00107f26, 0x40827000,
- 0x0401f7bb, 0x598d700f, 0x48bbc857, 0x40b8d000,
- 0x41300000, 0x80697480, 0x04000014, 0x0201f800,
- 0x001101de, 0x80c589c0, 0x040207b0, 0x497bc856,
- 0x0201f800, 0x00106d45, 0x4200d000, 0x000003f5,
- 0x80c589c0, 0x040007b4, 0x5930d203, 0x486bc857,
- 0x59310a03, 0x0401f01b, 0x0201f800, 0x00100c76,
- 0x0401ff06, 0x0401f7a2, 0x0201f800, 0x0010715a,
- 0x80c589c0, 0x040007f5, 0x0401f7e9, 0x8468d55c,
- 0x486a5a09, 0x4a026006, 0x00000002, 0x0401f798,
- 0x4200d000, 0x000004a7, 0x4130d800, 0x412ce000,
- 0x0201f800, 0x0010032b, 0x0401f006, 0x41310000,
- 0x0201f800, 0x00101270, 0x40826000, 0x0401f7c7,
- 0x808101c0, 0x0400078d, 0x589d0801, 0x589d0000,
- 0x829d3c00, 0x00000002, 0x1c01f000, 0x829d3c80,
- 0x00000002, 0x48813800, 0x48853801, 0x412d0800,
- 0x41410000, 0x4200d000, 0x0010cf32, 0x0201f800,
- 0x0010bfb2, 0x417a5800, 0x0201f800, 0x00109898,
- 0x80c589c0, 0x04000009, 0x0201f800, 0x0010a424,
- 0x59325809, 0x592cd209, 0x8468d54c, 0x486a5a09,
- 0x42028000, 0x00000006, 0x0201f800, 0x00106e3a,
- 0x0401ff3a, 0x0201f800, 0x00106e2e, 0x40828000,
+ 0x829d3c00, 0x0000000e, 0x589d4000, 0x809d3800,
+ 0x1c01f000, 0x4178e000, 0x497bc856, 0x5930dc03,
+ 0x826cd480, 0x00000002, 0x82697480, 0x00000002,
+ 0x04000007, 0x04001006, 0x599cd019, 0x8c68d50e,
+ 0x04000005, 0x806cd9c0, 0x04020003, 0x4200e000,
+ 0x00000001, 0x40718800, 0x1c01f000, 0x829d3c80,
+ 0x00000004, 0x48813800, 0x48853801, 0x48893802,
+ 0x488d3803, 0x412d0800, 0x41351000, 0x41391800,
+ 0x0201f800, 0x001109d8, 0x80c589c0, 0x040000d8,
+ 0x5932680a, 0x5930d407, 0x40680000, 0x82697480,
+ 0x00000013, 0x83f17500, 0x03000000, 0x0400002c,
+ 0x0c01f001, 0x00110dbf, 0x00110d4c, 0x00110d5c,
+ 0x00110d29, 0x00110d4c, 0x00110d5c, 0x00110d6c,
+ 0x00110d7d, 0x00110d8f, 0x00110d84, 0x00110d22,
+ 0x00110d8f, 0x00110d8f, 0x00110d8f, 0x00110d8f,
+ 0x00110dbf, 0x00110d08, 0x00110d05, 0x00110d8f,
+ 0x00110d8f, 0x59325818, 0x0201f800, 0x001005b3,
+ 0x5930d203, 0x82697480, 0x00000004, 0x04020003,
+ 0x0201f800, 0x00100c9b, 0x0201f800, 0x001011f2,
+ 0x59325809, 0x0201f800, 0x00109c46, 0x80c589c0,
+ 0x0402008a, 0x0201f800, 0x00108253, 0x8d3e7d1c,
+ 0x040000a7, 0x497a600a, 0x0401f0a5, 0x4200d000,
+ 0x00000321, 0x4000d800, 0x4130e000, 0x0201f800,
+ 0x0010032c, 0x0401f09e, 0x5930d203, 0x82697480,
+ 0x00000004, 0x040207eb, 0x0201f800, 0x00100c9b,
+ 0x0401f7e8, 0x813669c0, 0x0400007c, 0x0201f800,
+ 0x0010a82b, 0x5930d203, 0x82697480, 0x00000004,
+ 0x04000089, 0x59325809, 0x0201f800, 0x00109c46,
+ 0x80c589c0, 0x040007e0, 0x592cd205, 0x8268d500,
+ 0x000000ff, 0x82697480, 0x00000014, 0x04000003,
+ 0x0201f800, 0x00109d64, 0x4a025a05, 0x00000103,
+ 0x5930d402, 0x486a5c07, 0x592cd409, 0x8c68d512,
+ 0x0402006c, 0x49425a07, 0x497a580a, 0x0201f800,
+ 0x0010a31e, 0x0201f800, 0x00020401, 0x0401f7ca,
+ 0x5930d403, 0x82697480, 0x00000043, 0x0400006d,
+ 0x0201f800, 0x0010bd7c, 0x0401ff77, 0x80c589c0,
+ 0x04020059, 0x0201f800, 0x00109d8b, 0x80c589c0,
+ 0x040007bd, 0x0201f800, 0x001089ef, 0x0401f7ba,
+ 0x59325809, 0x0201f800, 0x00109c46, 0x80c589c0,
+ 0x040007b5, 0x49425a07, 0x497a5c0a, 0x0201f800,
+ 0x00020401, 0x5930d226, 0x82697480, 0x00000003,
+ 0x040207ad, 0x0201f800, 0x00109d64, 0x0401f7aa,
+ 0x5930d203, 0x82697480, 0x00000004, 0x04000047,
+ 0x59325809, 0x0201f800, 0x00109c46, 0x80c589c0,
+ 0x040007a1, 0x49425a07, 0x813669c0, 0x040007d0,
+ 0x0201f800, 0x0010b9df, 0x0201f800, 0x0010a31e,
+ 0x0401f7cd, 0x5930d203, 0x82697480, 0x00000011,
+ 0x0402003f, 0x5930d426, 0x486a6203, 0x0401f03c,
+ 0x5930d203, 0x82697480, 0x00000004, 0x0402001b,
+ 0x5930d006, 0x8068d1c0, 0x04000035, 0x5930d415,
+ 0x8468d558, 0x486a6415, 0x0401f031, 0x59325809,
+ 0x0201f800, 0x00109c46, 0x80c589c0, 0x04020004,
+ 0x0201f800, 0x00108253, 0x0401f029, 0x49425a07,
+ 0x497a5c07, 0x0201f800, 0x00020401, 0x0201f800,
+ 0x00108253, 0x0401f022, 0x49425a07, 0x0201f800,
+ 0x00020401, 0x0401f774, 0x59325809, 0x0201f800,
+ 0x00106f95, 0x0401f770, 0x4200d000, 0x0000018c,
+ 0x4134d800, 0x4130e000, 0x0201f800, 0x0010032c,
+ 0x0401f77f, 0x0201f800, 0x00101d37, 0x0401f7a6,
+ 0x412d0000, 0x592e580a, 0x0201f800, 0x001005b3,
+ 0x40825800, 0x0401f790, 0x0201f800, 0x00100c9b,
+ 0x0401f7b8, 0x0201f800, 0x00100c9b, 0x0401f776,
+ 0x0201f800, 0x0010a319, 0x0401f792, 0x40865800,
+ 0x408a6800, 0x408e7000, 0x589d1803, 0x589d1002,
+ 0x589d0801, 0x589d0000, 0x829d3c00, 0x00000004,
+ 0x1c01f000, 0x829d3c80, 0x00000002, 0x48813800,
+ 0x48853801, 0x41310800, 0x4933c857, 0x4943c857,
+ 0x493fc857, 0x42010000, 0x00111d44, 0x59a8d013,
+ 0x41640000, 0x80697480, 0x04000010, 0x41580000,
+ 0x80817480, 0x0402100d, 0x40826000, 0x8d3e7d12,
+ 0x04000004, 0x40800000, 0x80857480, 0x04000002,
+ 0x0401fefb, 0x82810400, 0x0000002c, 0x41580000,
+ 0x80817480, 0x040017f5, 0x41510000, 0x41540000,
+ 0x80817480, 0x04021019, 0x8d3e7d18, 0x04000017,
+ 0x59a8d053, 0x59a80054, 0x80697480, 0x04000013,
+ 0x40826000, 0x5880d00a, 0x8068d1c0, 0x04020005,
+ 0x5880d203, 0x82697480, 0x00000008, 0x04000008,
+ 0x0401fee3, 0x82810400, 0x0000002c, 0x41540000,
+ 0x80817480, 0x040017ed, 0x0401f004, 0x0201f800,
+ 0x0010bcc3, 0x0401f7f7, 0x40866000, 0x589d0801,
+ 0x589d0000, 0x829d3c00, 0x00000002, 0x1c01f000,
+ 0x497a6226, 0x812e59c0, 0x0400003d, 0x592cd205,
+ 0x486bc857, 0x592cd205, 0x8268d500, 0x000000ff,
+ 0x82697480, 0x00000014, 0x04000003, 0x4a026226,
+ 0x00000003, 0x592cd409, 0x8c68d510, 0x0402001d,
+ 0x592cd209, 0x0201f800, 0x00104f91, 0x0201f800,
+ 0x0010a31e, 0x0201f800, 0x0010c617, 0x80c589c0,
+ 0x0400001f, 0x4a026403, 0x00000085, 0x4a026203,
+ 0x00000009, 0x4a026407, 0x00000002, 0x5930d004,
+ 0x8268d500, 0x00000100, 0x8268d540, 0x8000404b,
+ 0x486a6004, 0x0201f800, 0x0010719d, 0x4200d000,
+ 0x8000404b, 0x0201f800, 0x0010707b, 0x0401f01f,
+ 0x592cd209, 0x0201f800, 0x00104f91, 0x4a025c09,
+ 0x00000100, 0x0201f800, 0x0010a31e, 0x0201f800,
+ 0x0010c617, 0x80c589c0, 0x040207e3, 0x0201f800,
+ 0x00020401, 0x5930d226, 0x82697480, 0x00000003,
+ 0x0400000a, 0x497a6009, 0x0401f7db, 0x4200d000,
+ 0x00000551, 0x4130d800, 0x412ce000, 0x0201f800,
+ 0x0010032c, 0x0401f005, 0x0201f800, 0x00109d64,
+ 0x497a6009, 0x0401f7d0, 0x1c01f000, 0x0201f800,
+ 0x0010719d, 0x812e59c0, 0x0400001b, 0x592cd409,
+ 0x8c68d510, 0x04020012, 0x592cd209, 0x0201f800,
+ 0x00104f91, 0x0201f800, 0x0010a31e, 0x0201f800,
+ 0x00020401, 0x5930d203, 0x82697480, 0x0000000d,
+ 0x0400000d, 0x0201f800, 0x0010719d, 0x5930d00a,
+ 0x0201f800, 0x00104b0e, 0x0401f007, 0x592cd209,
+ 0x0201f800, 0x00104f91, 0x4a025c09, 0x00000100,
+ 0x0401f7ed, 0x0201f800, 0x00108253, 0x1c01f000,
+ 0x829d3c80, 0x00000002, 0x48813800, 0x48853801,
+ 0x41790000, 0x0201f800, 0x001098e1, 0x40c50800,
+ 0x48c7c857, 0x40840000, 0x82857480, 0x0000000d,
+ 0x83f17500, 0x03000000, 0x0400002b, 0x0c01f001,
+ 0x00110ea5, 0x00110eeb, 0x00110ebb, 0x00110e92,
+ 0x00110ebd, 0x00110ead, 0x00110ea5, 0x00110ea5,
+ 0x00110ea5, 0x00110ead, 0x00110ead, 0x00110ead,
+ 0x00110ead, 0x00110ebb, 0x0201f800, 0x001098cb,
+ 0x80c589c0, 0x04000005, 0x0201f800, 0x00107492,
+ 0x80c589c0, 0x04000063, 0x0201f800, 0x00110766,
+ 0x80c589c0, 0x04000017, 0x5930d403, 0x486bc857,
+ 0x5930d403, 0x82697480, 0x00000040, 0x04020018,
+ 0x0401ffaf, 0x42010000, 0x00000001, 0x0401f073,
+ 0x40840000, 0x82857480, 0x0000000d, 0x040007d8,
+ 0x040017d7, 0x4200d000, 0x000004c9, 0x4130d800,
+ 0x4084e000, 0x0201f800, 0x0010032c, 0x0401f067,
+ 0x497bc856, 0x0201f800, 0x001070a8, 0x80c589c0,
+ 0x04020044, 0x59317004, 0x48bbc857, 0x0401ff4d,
+ 0x0401f7e9, 0x812e59c0, 0x04000050, 0x0201f800,
+ 0x0010a09e, 0x80c589c0, 0x0400003e, 0x0201f800,
+ 0x0010719d, 0x592cd209, 0x8468d50c, 0x486a5a09,
+ 0x592cdc07, 0x806cd0c6, 0x406c0000, 0x8068d400,
+ 0x8068d400, 0x486a6006, 0x4200d000, 0x10000000,
+ 0x4130d800, 0x0201f800, 0x001008df, 0x80c589c0,
+ 0x0400000c, 0x592cd209, 0x8c68d51c, 0x04000032,
+ 0x59c8d001, 0x8068d1c0, 0x0402003b, 0x4200d000,
+ 0x40000000, 0x4130d800, 0x0201f800, 0x001008df,
+ 0x5930d203, 0x82697480, 0x00000004, 0x040207c2,
+ 0x41390000, 0x42027000, 0x00000048, 0x0201f800,
+ 0x001082c5, 0x40827000, 0x0401f7bb, 0x598d700f,
+ 0x48bbc857, 0x40b8d000, 0x41300000, 0x80697480,
+ 0x04000014, 0x0201f800, 0x001108df, 0x80c589c0,
+ 0x040207b0, 0x497bc856, 0x0201f800, 0x001070a8,
+ 0x4200d000, 0x00000407, 0x80c589c0, 0x040007b4,
+ 0x5930d203, 0x486bc857, 0x59310a03, 0x0401f01b,
+ 0x0201f800, 0x00100c9b, 0x0401ff06, 0x0401f7a2,
+ 0x0201f800, 0x001074c9, 0x80c589c0, 0x040007f5,
+ 0x0401f7e9, 0x8468d55c, 0x486a5a09, 0x4a026006,
+ 0x00000002, 0x0401f798, 0x4200d000, 0x000004b9,
+ 0x4130d800, 0x412ce000, 0x0201f800, 0x0010032c,
+ 0x0401f006, 0x41310000, 0x0201f800, 0x001012ca,
+ 0x40826000, 0x0401f7c7, 0x808101c0, 0x0400078d,
+ 0x589d0801, 0x589d0000, 0x829d3c00, 0x00000002,
+ 0x1c01f000, 0x829d3c80, 0x00000002, 0x48813800,
+ 0x48853801, 0x412d0800, 0x41410000, 0x4200d000,
+ 0x0010d54d, 0x0201f800, 0x0010c509, 0x417a5800,
+ 0x0201f800, 0x00109c46, 0x80c589c0, 0x04000009,
+ 0x0201f800, 0x0010a82b, 0x59325809, 0x592cd209,
+ 0x8468d54c, 0x486a5a09, 0x42028000, 0x00000006,
+ 0x0201f800, 0x001071a9, 0x0401ff3a, 0x0201f800,
+ 0x0010719d, 0x40828000, 0x40865800, 0x589d0801,
+ 0x589d0000, 0x829d3c00, 0x00000002, 0x1c01f000,
+ 0x829d3c80, 0x00000002, 0x48813800, 0x48853801,
+ 0x412d0800, 0x0201f800, 0x001109d8, 0x80c589c0,
+ 0x040000c8, 0x5930d407, 0x40680000, 0x82697480,
+ 0x00000013, 0x83f17500, 0x03000000, 0x04000026,
+ 0x0c01f001, 0x00111014, 0x00110faa, 0x00110fcf,
+ 0x00110f87, 0x00110faa, 0x00110fcf, 0x00110fe9,
+ 0x00110fb9, 0x00110fdf, 0x00110fc0, 0x00110f80,
+ 0x00110fdf, 0x00110fdf, 0x00110fdf, 0x00110fdf,
+ 0x00111014, 0x00110f6c, 0x00110f69, 0x00110fdf,
+ 0x00110fdf, 0x59325818, 0x0201f800, 0x001005b3,
+ 0x0201f800, 0x001011f2, 0x59325809, 0x0201f800,
+ 0x00109c46, 0x80c589c0, 0x04020088, 0x0201f800,
+ 0x00108253, 0x8d3e7d1c, 0x0400009e, 0x497a600a,
+ 0x0401f09c, 0x4200d000, 0x0000035f, 0x4000d800,
+ 0x4130e000, 0x0201f800, 0x0010032c, 0x0401f095,
+ 0x5930d203, 0x82697480, 0x00000004, 0x040207eb,
+ 0x0201f800, 0x00100c9b, 0x0401f7e8, 0x0201f800,
+ 0x0010a82b, 0x5930d203, 0x82697480, 0x00000004,
+ 0x04000082, 0x59325809, 0x0201f800, 0x00109c46,
+ 0x80c589c0, 0x040007e2, 0x592cd205, 0x8268d500,
+ 0x000000ff, 0x82697480, 0x00000014, 0x04000003,
+ 0x0201f800, 0x00109d64, 0x4a025a05, 0x00000103,
+ 0x592cd409, 0x8c68d512, 0x04020067, 0x49425a07,
+ 0x497a580a, 0x0201f800, 0x0010b9df, 0x0201f800,
+ 0x0010a31e, 0x0201f800, 0x00109e0c, 0x0201f800,
+ 0x00020401, 0x0401f7ca, 0x5930d403, 0x82697480,
+ 0x00000043, 0x04000064, 0x0201f800, 0x00110cc9,
+ 0x80c589c0, 0x04020051, 0x0201f800, 0x00109d8b,
+ 0x80c589c0, 0x040007be, 0x0201f800, 0x001089ef,
+ 0x0401f7bb, 0x5930d203, 0x82697480, 0x00000011,
+ 0x04020058, 0x5930d426, 0x486a6203, 0x0401f055,
+ 0x0201f800, 0x00106bfd, 0x80c589c0, 0x0400003b,
+ 0x5930d203, 0x82697480, 0x00000004, 0x0402004d,
+ 0x5930d006, 0x8068d1c0, 0x0400004a, 0x5930d415,
+ 0x8468d558, 0x486a6415, 0x0401f046, 0x59325809,
+ 0x0201f800, 0x00109c46, 0x80c589c0, 0x040007a0,
+ 0x49425a07, 0x497a5c0a, 0x0201f800, 0x00020401,
+ 0x5930d226, 0x82697480, 0x00000003, 0x04020798,
+ 0x0201f800, 0x00109d64, 0x0401f795, 0x59325809,
+ 0x0201f800, 0x00109c46, 0x80c589c0, 0x04000790,
+ 0x49425a07, 0x497a5c07, 0x0201f800, 0x00020401,
+ 0x0401f78b, 0x5930d203, 0x82697480, 0x00000004,
+ 0x0400001f, 0x59325809, 0x0201f800, 0x00109c46,
+ 0x80c589c0, 0x04000782, 0x49425a07, 0x0201f800,
+ 0x0010b9df, 0x0201f800, 0x0010a31e, 0x0201f800,
+ 0x00020401, 0x0401f77a, 0x49425a07, 0x0201f800,
+ 0x00020401, 0x0401f776, 0x59325809, 0x0201f800,
+ 0x00106f95, 0x0401f772, 0x0201f800, 0x00101d37,
+ 0x0401f7ae, 0x412d0000, 0x592e580a, 0x0201f800,
+ 0x001005b3, 0x40825800, 0x0401f795, 0x0201f800,
+ 0x00100c9b, 0x0401f7e0, 0x0201f800, 0x00100c9b,
+ 0x0401f77d, 0x0201f800, 0x0010a319, 0x0401f79b,
0x40865800, 0x589d0801, 0x589d0000, 0x829d3c00,
- 0x00000002, 0x1c01f000, 0x829d3c80, 0x00000002,
- 0x48813800, 0x48853801, 0x412d0800, 0x0201f800,
- 0x001102d3, 0x80c589c0, 0x040000c3, 0x5930d407,
- 0x40680000, 0x82697480, 0x00000013, 0x83f17500,
- 0x03000000, 0x04000025, 0x0c01f001, 0x00110902,
- 0x001108a6, 0x001108bc, 0x00110883, 0x001108a6,
- 0x001108bc, 0x001108cc, 0x001108b5, 0x001108e1,
- 0x0011085c, 0x00110872, 0x001108e1, 0x001108e1,
- 0x001108e1, 0x001108e1, 0x00110902, 0x00110878,
- 0x001108dd, 0x001108e1, 0x001108e1, 0x0201f800,
- 0x0010689d, 0x80c589c0, 0x04000090, 0x5930d203,
- 0x82697480, 0x00000004, 0x0402009f, 0x5930d006,
- 0x8068d1c0, 0x0400009c, 0x5930d415, 0x8468d558,
- 0x486a6415, 0x0401f098, 0x4200d000, 0x00000328,
- 0x4000d800, 0x4130e000, 0x0201f800, 0x0010032b,
- 0x0401f091, 0x5930d203, 0x82697480, 0x00000004,
- 0x04020003, 0x0201f800, 0x00100c76, 0x59325809,
- 0x0201f800, 0x00109898, 0x80c589c0, 0x0402006f,
- 0x0201f800, 0x00107eb4, 0x8d3e7d1c, 0x04000082,
- 0x497a600a, 0x0401f080, 0x0201f800, 0x0010a424,
- 0x5930d203, 0x82697480, 0x00000004, 0x04000074,
- 0x59325809, 0x0201f800, 0x00109898, 0x80c589c0,
- 0x040007f0, 0x592cd205, 0x8268d500, 0x000000ff,
- 0x82697480, 0x00000014, 0x04000003, 0x0201f800,
- 0x001099b4, 0x4a025a05, 0x00000103, 0x592cd409,
- 0x8c68d512, 0x0402005c, 0x49425a07, 0x497a580a,
- 0x0201f800, 0x0010b4b0, 0x0201f800, 0x00109f56,
- 0x0201f800, 0x00109a5c, 0x0201f800, 0x000203ef,
- 0x0401f7d8, 0x5930d403, 0x82697480, 0x00000043,
- 0x04000059, 0x0201f800, 0x001105c7, 0x80c589c0,
- 0x04020046, 0x0201f800, 0x001099db, 0x80c589c0,
- 0x040007cc, 0x0201f800, 0x001086a8, 0x0401f7c9,
- 0x5930d203, 0x82697480, 0x00000011, 0x0402004a,
- 0x5930d426, 0x486a6203, 0x0401f047, 0x59325809,
- 0x0201f800, 0x00109898, 0x80c589c0, 0x040007bd,
- 0x49425a07, 0x497a5c0a, 0x0201f800, 0x000203ef,
- 0x5930d226, 0x82697480, 0x00000003, 0x040207b5,
- 0x0201f800, 0x001099b4, 0x0401f7b2, 0x5930d203,
- 0x82697480, 0x00000004, 0x04000030, 0x59325809,
- 0x0201f800, 0x00109898, 0x80c589c0, 0x040007a9,
- 0x49425a07, 0x0201f800, 0x0010b4b0, 0x0201f800,
- 0x00109f56, 0x0201f800, 0x000203ef, 0x0401f7a1,
- 0x59325818, 0x0201f800, 0x0010059d, 0x0401f798,
- 0x59325809, 0x0201f800, 0x00109898, 0x80c589c0,
- 0x04000798, 0x49425a07, 0x497a5c07, 0x0201f800,
- 0x000203ef, 0x0401f793, 0x49425a07, 0x0201f800,
- 0x000203ef, 0x0401f78f, 0x59325809, 0x0201f800,
- 0x00106c32, 0x0401f78b, 0x0201f800, 0x00101cb7,
- 0x0401f7b9, 0x412d0000, 0x592e580a, 0x0201f800,
- 0x0010059d, 0x40825800, 0x0401f7a0, 0x0201f800,
- 0x00100c76, 0x0401f78b, 0x0201f800, 0x00100c76,
- 0x0401f7cf, 0x40865800, 0x589d0801, 0x589d0000,
- 0x829d3c00, 0x00000002, 0x1c01f000, 0x0201f800,
- 0x0010b298, 0x80c589c0, 0x04000007, 0x812649c0,
- 0x04000006, 0x5930d01c, 0x41240000, 0x80697480,
- 0x04000002, 0x0401f003, 0x5932680a, 0x0401ff23,
- 0x1c01f000, 0x829d3c80, 0x00000005, 0x48813800,
- 0x48853801, 0x48893802, 0x488d3803, 0x48913804,
- 0x41311000, 0x41352000, 0x4933c857, 0x4947c857,
- 0x4943c857, 0x0201f800, 0x00106e3a, 0x40c51800,
- 0x0201f800, 0x0010b130, 0x41310800, 0x813261c0,
- 0x0400004e, 0x42000000, 0x0011152c, 0x81317480,
- 0x0400004a, 0x59a8d00d, 0x8068d040, 0x42010000,
- 0x00111584, 0x40680000, 0x81657480, 0x0400000f,
- 0x41580000, 0x80817480, 0x0402100c, 0x40826000,
- 0x40800000, 0x80857480, 0x04000003, 0x4084d000,
- 0x0401ffcb, 0x82810400, 0x0000002c, 0x41580000,
- 0x80817480, 0x040017f6, 0x41510000, 0x41540000,
- 0x80817480, 0x04021012, 0x8d3e7d18, 0x04000010,
- 0x59a8d04d, 0x59a8004e, 0x80697480, 0x0400000c,
- 0x40826000, 0x5880d00a, 0x8068d1c0, 0x0400000d,
- 0x4084d000, 0x0401ffb6, 0x82810400, 0x0000002c,
- 0x41540000, 0x80817480, 0x040017f0, 0x408a6000,
- 0x40926800, 0x808d7040, 0x0400001e, 0x0401f023,
- 0x0201f800, 0x001046de, 0x40c66800, 0x80c589c0,
- 0x040007f2, 0x58c4d002, 0x5930d827, 0x82680500,
- 0x00ffffff, 0x806d7480, 0x040207ec, 0x58c4d013,
+ 0x00000002, 0x1c01f000, 0x0201f800, 0x0010b788,
+ 0x80c589c0, 0x04000007, 0x812649c0, 0x04000006,
+ 0x5930d01c, 0x41240000, 0x80697480, 0x04000002,
+ 0x0401f003, 0x5932680a, 0x0401ff1e, 0x1c01f000,
+ 0x809d3840, 0x48a13800, 0x809d3840, 0x409d4000,
+ 0x829d3c80, 0x00000007, 0x48813800, 0x48853801,
+ 0x48893802, 0x488d3803, 0x48913804, 0x48953805,
+ 0x48993806, 0x40592800, 0x41253000, 0x41311000,
+ 0x41352000, 0x4933c857, 0x4947c857, 0x4943c857,
+ 0x0201f800, 0x001071a9, 0x40c51800, 0x0201f800,
+ 0x0010b5ee, 0x41310800, 0x813261c0, 0x04000068,
+ 0x42000000, 0x00111cec, 0x81317480, 0x04000064,
+ 0x59a8d013, 0x8068d040, 0x42010000, 0x00111d44,
+ 0x40680000, 0x81657480, 0x0400000f, 0x41580000,
+ 0x80817480, 0x0402100c, 0x40826000, 0x40800000,
+ 0x80857480, 0x04000003, 0x4084d000, 0x0401ffc3,
+ 0x82810400, 0x0000002c, 0x41580000, 0x80817480,
+ 0x040017f6, 0x41510000, 0x41540000, 0x80817480,
+ 0x04021012, 0x8d3e7d18, 0x04000010, 0x59a8d053,
+ 0x59a80054, 0x80697480, 0x0400000c, 0x40826000,
+ 0x5880d00a, 0x8068d1c0, 0x0400000f, 0x4084d000,
+ 0x0401ffae, 0x82810400, 0x0000002c, 0x41540000,
+ 0x80817480, 0x040017f0, 0x408a6000, 0x40926800,
+ 0x4094b000, 0x409a4800, 0x808d7040, 0x04000036,
+ 0x0401f03e, 0x0201f800, 0x0010482d, 0x40c66800,
+ 0x80c589c0, 0x040007f0, 0x58c4d002, 0x5930d827,
+ 0x82680500, 0x00ffffff, 0x806d7480, 0x040207ea,
+ 0x4200d000, 0x00000001, 0x48694000, 0x58c4d013,
0x5930d826, 0x82680500, 0x00ffffff, 0x806d7480,
- 0x040207e6, 0x5930d203, 0x82697480, 0x00000008,
- 0x0400000b, 0x4936600a, 0x0401fec4, 0x82810400,
- 0x0000002c, 0x0401f7df, 0x59a8d00d, 0x0401f7b8,
- 0x0201f800, 0x00106e2e, 0x0401f004, 0x0201f800,
- 0x0010b76e, 0x0401f7f4, 0x589d2004, 0x589d1803,
- 0x589d1002, 0x589d0801, 0x589d0000, 0x829d3c00,
- 0x00000005, 0x1c01f000, 0x809d3840, 0x48a13800,
+ 0x04000013, 0x0201f800, 0x0010c621, 0x42024800,
+ 0x0010d5ef, 0x8058b1c0, 0x0400000d, 0x5930d026,
+ 0x82680500, 0x00ffffff, 0x5924d005, 0x8268d500,
+ 0x00ffffff, 0x80697480, 0x04000016, 0x83264c00,
+ 0x0000000b, 0x8058b040, 0x040207f8, 0x58a0d000,
+ 0x80697040, 0x040207cc, 0x5930d203, 0x82697480,
+ 0x00000008, 0x0400000e, 0x4936600a, 0x0401fe9d,
+ 0x82810400, 0x0000002c, 0x0401f7c5, 0x59a8d013,
+ 0x0401f79e, 0x0201f800, 0x0010719d, 0x0401f007,
+ 0x4178d000, 0x48694000, 0x0401f7ed, 0x0201f800,
+ 0x0010bcc3, 0x0401f7f1, 0x589d3006, 0x589d2805,
+ 0x589d2004, 0x589d1803, 0x589d1002, 0x589d0801,
+ 0x589d0000, 0x829d3c00, 0x00000008, 0x589d4000,
+ 0x809d3800, 0x1c01f000, 0x809d3840, 0x48a13800,
0x829d3c80, 0x00000002, 0x409d4000, 0x829d3c80,
0x00000007, 0x48813800, 0x48853801, 0x48893802,
0x488d3803, 0x48913804, 0x48953805, 0x48993806,
0x42010000, 0x00000001, 0x41793000, 0x49214000,
0x49254001, 0x497bc856, 0x41310800, 0x41351000,
0x41451800, 0x413d2000, 0x40592800, 0x4200d000,
- 0x00110987, 0x0201f800, 0x00106506, 0x59a8d21b,
+ 0x001110c2, 0x0201f800, 0x00106877, 0x59a8d221,
0x8c68d508, 0x0400001d, 0x8c68d516, 0x0402001b,
- 0x59aa6865, 0x813669c0, 0x040000a4, 0x5934d400,
+ 0x59aa6873, 0x813669c0, 0x040000a4, 0x5934d400,
0x82697480, 0x00000404, 0x040200a0, 0x0201f800,
- 0x00107ef5, 0x40c66000, 0x80c589c0, 0x04000095,
+ 0x00108294, 0x40c66000, 0x80c589c0, 0x04000095,
0x48818c07, 0x4935880a, 0x409a7800, 0x0201f800,
- 0x001045df, 0x4200d000, 0x00000005, 0x0201f800,
- 0x001045e9, 0x42027000, 0x00000003, 0x0201f800,
- 0x00107f26, 0x0401f08d, 0x8268dd00, 0x00000008,
+ 0x0010472b, 0x4200d000, 0x00000005, 0x0201f800,
+ 0x00104735, 0x42027000, 0x00000003, 0x0201f800,
+ 0x001082c5, 0x0401f08d, 0x8268dd00, 0x00000008,
0x8c68d506, 0x04000072, 0x806cd9c0, 0x04000002,
- 0x41790000, 0x0201f800, 0x0010c0ca, 0x4200d000,
- 0x0010c10d, 0x586a4800, 0x42028800, 0x000007fe,
+ 0x41790000, 0x0201f800, 0x0010c621, 0x4200d000,
+ 0x0010c6ac, 0x586a4800, 0x42028800, 0x000007fe,
0x8058b1c0, 0x0400001f, 0x41440000, 0x0401f005,
0x83264c00, 0x0000000b, 0x8058b040, 0x04000019,
0x5924d009, 0x8068d400, 0x8268d480, 0x000007f0,
@@ -29121,48 +14884,48 @@ static const uint32_t isp_2400_multi_risc_code[] = {
0x826cd500, 0xffffdfff, 0x486a6a00, 0x80993000,
0x83264c00, 0x0000000b, 0x8058b040, 0x040207e9,
0x809931c0, 0x04000048, 0x8d0e1d20, 0x04020049,
- 0x0201f800, 0x00101e2e, 0x80817040, 0x04020057,
+ 0x0201f800, 0x00101eb6, 0x80817040, 0x04020057,
0x4200b000, 0x000007f0, 0x417a8800, 0x0401f01c,
0x826cd540, 0x00001000, 0x486a6a00, 0x5934d200,
0x8468d51a, 0x486a6a00, 0x4937c857, 0x4a026c00,
- 0x00000707, 0x0201f800, 0x00106e3a, 0x40c50000,
- 0x417a6000, 0x0201f800, 0x00110363, 0x0201f800,
- 0x00110447, 0x417a7800, 0x0201f800, 0x001104e0,
- 0x0201f800, 0x00110916, 0x80817040, 0x04000032,
+ 0x00000707, 0x0201f800, 0x001071a9, 0x40c50000,
+ 0x417a6000, 0x0201f800, 0x00110a68, 0x0201f800,
+ 0x00110b49, 0x417a7800, 0x0201f800, 0x00110be2,
+ 0x0201f800, 0x00111028, 0x80817040, 0x04000032,
0x81468800, 0x8058b040, 0x04000038, 0x0201f800,
- 0x001046de, 0x80c589c0, 0x040007fa, 0x5934da00,
+ 0x0010482d, 0x80c589c0, 0x040007fa, 0x5934da00,
0x8c6cdd1a, 0x040007f7, 0x5934d403, 0x406a8800,
0x417a7800, 0x42028000, 0x00000029, 0x5934d013,
0x8068d130, 0x406a4000, 0x40680000, 0x4200d000,
- 0x0010c10d, 0x8068d400, 0x586a4800, 0x5924d000,
+ 0x0010c6ac, 0x8068d400, 0x586a4800, 0x5924d000,
0x8068d120, 0x8268e500, 0x00000020, 0x8c68d50a,
0x040207cc, 0x4070d000, 0x4070d800, 0x0201f800,
- 0x0010b193, 0x5934da00, 0x0401f7c6, 0x8c68d50a,
+ 0x0010b659, 0x5934da00, 0x0401f7c6, 0x8c68d50a,
0x0402078e, 0x80817040, 0x04020014, 0x0401f7bd,
- 0x4200d000, 0x000007d0, 0x4200d800, 0x00110987,
- 0x0201f800, 0x00106634, 0x0201f800, 0x00101e2e,
- 0x0401f7b2, 0x0201f800, 0x00106e2e, 0x0401f7cd,
- 0x4200d000, 0x000000a0, 0x40c4d800, 0x4134e000,
- 0x0201f800, 0x0010032b, 0x58a24801, 0x58a24000,
+ 0x4200d000, 0x000007d0, 0x4200d800, 0x001110c2,
+ 0x0201f800, 0x001069a4, 0x0201f800, 0x00101eb6,
+ 0x0401f7b2, 0x0201f800, 0x0010719d, 0x0401f7cd,
+ 0x4200d000, 0x000000a3, 0x40c4d800, 0x4134e000,
+ 0x0201f800, 0x0010032c, 0x58a24801, 0x58a24000,
0x40866000, 0x408a6800, 0x408e8800, 0x40927800,
0x4094b000, 0x589d3006, 0x589d2805, 0x589d2004,
0x589d1803, 0x589d1002, 0x589d0801, 0x589d0000,
0x829d3c00, 0x00000009, 0x589d4000, 0x809d3800,
- 0x1c01f000, 0x497bc856, 0x0201f800, 0x001050f0,
- 0x80c589c0, 0x04020054, 0x59a8d015, 0x8c68d504,
- 0x04020004, 0x59a8d21b, 0x8c68d506, 0x0402002b,
+ 0x1c01f000, 0x497bc856, 0x0201f800, 0x001052a3,
+ 0x80c589c0, 0x04020054, 0x59a8d01b, 0x8c68d504,
+ 0x04020004, 0x59a8d221, 0x8c68d506, 0x0402002b,
0x8d0e1d20, 0x04020004, 0x59a8d006, 0x8c68d51c,
0x0400001c, 0x4200b000, 0x000007f0, 0x417a8800,
0x0401f004, 0x81468800, 0x8058b040, 0x04000015,
- 0x0201f800, 0x001046de, 0x80c589c0, 0x040007fa,
- 0x0201f800, 0x00104a28, 0x80c589c0, 0x040007f6,
- 0x59a8d00f, 0x59340002, 0x8068d580, 0x8268d500,
+ 0x0201f800, 0x0010482d, 0x80c589c0, 0x040007fa,
+ 0x0201f800, 0x00104b81, 0x80c589c0, 0x040007f6,
+ 0x59a8d015, 0x59340002, 0x8068d580, 0x8268d500,
0x00ffff00, 0x040207f0, 0x5934d200, 0x8468d55a,
0x486a6a00, 0x81468800, 0x8058b040, 0x040207ed,
- 0x0201f800, 0x00104965, 0x80c589c0, 0x04000022,
- 0x59a8d029, 0x4200d800, 0x00110987, 0x0201f800,
- 0x00106634, 0x0401f04b, 0x0201f800, 0x0010c0ca,
- 0x4200d000, 0x0010c10d, 0x586a4800, 0x42028800,
+ 0x0201f800, 0x00104abb, 0x80c589c0, 0x04000022,
+ 0x59a8d02f, 0x4200d800, 0x001110c2, 0x0201f800,
+ 0x001069a4, 0x0401f04b, 0x0201f800, 0x0010c621,
+ 0x4200d000, 0x0010c6ac, 0x586a4800, 0x42028800,
0x000007fe, 0x8058b1c0, 0x040007ce, 0x5924d009,
0x41440000, 0x8068d400, 0x8268d480, 0x000007f0,
0x586a6800, 0x813669c0, 0x04000007, 0x5924d200,
@@ -29170,22 +14933,22 @@ static const uint32_t isp_2400_multi_risc_code[] = {
0x0400002c, 0x8058b040, 0x83264c00, 0x0000000b,
0x0401f7ed, 0x8d0e1d20, 0x04020004, 0x59a8d006,
0x8c68d51c, 0x040007e0, 0x4200d000, 0x000007d0,
- 0x0401f7d9, 0x0201f800, 0x0010c0ca, 0x4200d000,
- 0x0010c10d, 0x586a4800, 0x42028800, 0x000007fe,
+ 0x0401f7d9, 0x0201f800, 0x0010c621, 0x4200d000,
+ 0x0010c6ac, 0x586a4800, 0x42028800, 0x000007fe,
0x8058b1c0, 0x040007ab, 0x41440000, 0x5924d009,
0x8068d400, 0x8268d480, 0x000007f0, 0x586a6800,
0x813669c0, 0x0400000a, 0x5924d200, 0x8268d500,
0x00000003, 0x82697480, 0x00000003, 0x04020004,
0x5934d200, 0x8468d51a, 0x486a6a00, 0x83264c00,
0x0000000b, 0x8058b040, 0x040207ed, 0x0401f795,
- 0x0201f800, 0x00104a28, 0x80c589c0, 0x040007d2,
+ 0x0201f800, 0x00104b81, 0x80c589c0, 0x040007d2,
0x5934d200, 0x8468d55a, 0x486a6a00, 0x0401f7ce,
0x1c01f000, 0x829d3c80, 0x00000004, 0x48813800,
0x48853801, 0x48893802, 0x488d3803, 0x40691000,
0x406d1800, 0x40710800, 0x41790000, 0x4880e000,
0x83457480, 0x000007ff, 0x83f17500, 0x03000000,
0x0400004e, 0x4880e002, 0x4944e001, 0x4144f000,
- 0x4200d800, 0x0010c280, 0x4200b000, 0x000007f0,
+ 0x4200d800, 0x0010c880, 0x4200b000, 0x000007f0,
0x83457480, 0x000007ef, 0x04000040, 0x0400103f,
0x4200b000, 0x00000010, 0x8344f480, 0x000007f0,
0x5924d809, 0x8058b1c0, 0x04000017, 0x40780000,
@@ -29195,11 +14958,11 @@ static const uint32_t isp_2400_multi_risc_code[] = {
0x0400004f, 0x0400104e, 0x82697480, 0x00000800,
0x04000032, 0x48690801, 0x8058b040, 0x8058b1c0,
0x040207eb, 0x5884d802, 0x806cd9c0, 0x04000088,
- 0x412d0000, 0x4088d000, 0x0201f800, 0x00104622,
+ 0x412d0000, 0x4088d000, 0x0201f800, 0x0010476e,
0x4947c857, 0x4937c857, 0x40825800, 0x813669c0,
- 0x0400008f, 0x497a6a12, 0x59a8d21b, 0x8c68d50a,
+ 0x0400008f, 0x497a6a12, 0x59a8d221, 0x8c68d50a,
0x0402000a, 0x8288dd00, 0x00ffff00, 0x04000073,
- 0x59a8d00f, 0x8268d500, 0x00ffff00, 0x406c0000,
+ 0x59a8d015, 0x8268d500, 0x00ffff00, 0x406c0000,
0x80697480, 0x0400006d, 0x488a6802, 0x5924d005,
0x812000f0, 0x8068d540, 0x486a6813, 0x4200d000,
0x00000001, 0x0401f0a3, 0x82697480, 0x00fffffb,
@@ -29213,8 +14976,8 @@ static const uint32_t isp_2400_multi_risc_code[] = {
0x48b90803, 0x4947c857, 0x58857003, 0x48bbc857,
0x4a010800, 0x0000001b, 0x0401f058, 0x82697480,
0x000007f0, 0x040207b4, 0x49790801, 0x4200d800,
- 0x0010c280, 0x0401f7e3, 0x49450802, 0x83457480,
- 0x000007ef, 0x0400001a, 0x04001019, 0x59a8d21b,
+ 0x0010c880, 0x0401f7e3, 0x49450802, 0x83457480,
+ 0x000007ef, 0x0400001a, 0x04001019, 0x59a8d221,
0x8c68d50a, 0x0400003c, 0x83457480, 0x000007fe,
0x0400004c, 0x5924d200, 0x8268d500, 0x00000220,
0x0400005d, 0x808101c0, 0x0402000d, 0x82757480,
@@ -29229,7 +14992,7 @@ static const uint32_t isp_2400_multi_risc_code[] = {
0x4947c857, 0x4873c857, 0x488fc857, 0x4a010800,
0x0000001a, 0x0401f019, 0x8288d500, 0x000000ff,
0x8068d0d0, 0x486a6a12, 0x0401f790, 0x4200d000,
- 0x0000044d, 0x4084e000, 0x0201f800, 0x0010032b,
+ 0x00000456, 0x4084e000, 0x0201f800, 0x0010032c,
0x0401f774, 0x5924d200, 0x8268e500, 0x00000020,
0x8c68d50a, 0x040207c8, 0x4947c857, 0x4a010800,
0x0000001f, 0x4070d000, 0x0401f02a, 0x4947c857,
@@ -29238,453 +15001,487 @@ static const uint32_t isp_2400_multi_risc_code[] = {
0x82897480, 0x00fffffe, 0x04020017, 0x42010000,
0x00000001, 0x0401f7b4, 0x82897480, 0x00fffffc,
0x040007bf, 0x0401f779, 0x407e6800, 0x8c8d1d08,
- 0x0400076f, 0x0201f800, 0x00104946, 0x80c589c0,
+ 0x0400076f, 0x0201f800, 0x00104a9c, 0x80c589c0,
0x0400076b, 0x4947c857, 0x4a010800, 0x0000001d,
0x0401f7e6, 0x4947c857, 0x4a010800, 0x0000001f,
0x0401f008, 0x4947c857, 0x488bc857, 0x58857001,
0x48bbc857, 0x4a010800, 0x00000019, 0x4070d000,
0x40698800, 0x589d1803, 0x589d1002, 0x589d0801,
0x589d0000, 0x829d3c00, 0x00000004, 0x1c01f000,
- 0x4200d000, 0x00000080, 0x0201f800, 0x0010155c,
- 0x0201f800, 0x00106671, 0x59c4d0a3, 0x8468d506,
- 0x486b88a3, 0x0201f800, 0x001050fd, 0x80c589c0,
- 0x04020005, 0x0201f800, 0x0010511b, 0x80c589c0,
+ 0x4200d000, 0x00000080, 0x0201f800, 0x001015be,
+ 0x0201f800, 0x001069d1, 0x59c4d0a3, 0x8468d506,
+ 0x486b88a3, 0x0201f800, 0x001052b0, 0x80c589c0,
+ 0x04020005, 0x0201f800, 0x001052ce, 0x80c589c0,
0x0400006c, 0x59c4d0a3, 0x8268d500, 0xbe7fffff,
0x486b88a3, 0x4200d000, 0x000000f8, 0x0201f800,
- 0x001041ff, 0x59c4d0a3, 0x8268d540, 0x00018000,
+ 0x001042ea, 0x59c4d0a3, 0x8268d540, 0x00018000,
0x8468d51c, 0x486b88a3, 0x59c4d0a3, 0x8468d520,
0x486b88a3, 0x497b8808, 0x59c4d006, 0x8268d500,
0xfbffff0e, 0x486b8806, 0x497b282c, 0x497b282d,
- 0x4200d000, 0x000001f4, 0x4200d800, 0x00110d9f,
- 0x0201f800, 0x001064ef, 0x4a038805, 0x00000001,
- 0x0201f800, 0x00101623, 0x80c589c0, 0x04020023,
- 0x0201f800, 0x00101631, 0x80c589c0, 0x04000035,
- 0x4178d000, 0x0201f800, 0x001018a6, 0x4178d000,
- 0x0201f800, 0x0010182c, 0x0201f800, 0x0010192a,
- 0x4a035038, 0x00000001, 0x0201f800, 0x001050fd,
+ 0x4200d000, 0x000001f4, 0x4200d800, 0x001114e0,
+ 0x0201f800, 0x00106855, 0x4a038805, 0x00000001,
+ 0x0201f800, 0x00101691, 0x80c589c0, 0x04020023,
+ 0x0201f800, 0x0010169f, 0x80c589c0, 0x04000035,
+ 0x4178d000, 0x0201f800, 0x00101914, 0x4178d000,
+ 0x0201f800, 0x0010189a, 0x0201f800, 0x00101998,
+ 0x4a03503e, 0x00000001, 0x0201f800, 0x001052b0,
0x80c589c0, 0x04000018, 0x59c4d0a4, 0x8268d500,
0x0000000f, 0x82697480, 0x00000008, 0x04000003,
0x4a038805, 0x04000000, 0x59c4d0a3, 0x8268d540,
0x0001c000, 0x486b88a3, 0x59c4d0a3, 0x8468d520,
0x486b88a3, 0x0401f050, 0x4200d000, 0x00000001,
- 0x0201f800, 0x001018a6, 0x4200d000, 0x00000001,
- 0x0401f7e0, 0x0201f800, 0x0010511b, 0x80c589c0,
- 0x040207e6, 0x0201f800, 0x0010510c, 0x4200d000,
- 0x000001a9, 0x80c589c0, 0x04020033, 0x599cd818,
- 0x40c4e000, 0x0201f800, 0x0010032b, 0x0401f03a,
- 0x0201f800, 0x0010163f, 0x80c589c0, 0x04020023,
- 0x0201f800, 0x0010164d, 0x80c589c0, 0x0400002e,
- 0x59a8d043, 0x8068d1c0, 0x040007c8, 0x0201f800,
- 0x0010165a, 0x4a035038, 0x00000001, 0x0401f02a,
- 0x0201f800, 0x0010510c, 0x80c589c0, 0x0400001f,
+ 0x0201f800, 0x00101914, 0x4200d000, 0x00000001,
+ 0x0401f7e0, 0x0201f800, 0x001052ce, 0x80c589c0,
+ 0x040207e6, 0x0201f800, 0x001052bf, 0x4200d000,
+ 0x000001bf, 0x80c589c0, 0x04020033, 0x599cd818,
+ 0x40c4e000, 0x0201f800, 0x0010032c, 0x0401f03a,
+ 0x0201f800, 0x001016ad, 0x80c589c0, 0x04020023,
+ 0x0201f800, 0x001016bb, 0x80c589c0, 0x0400002e,
+ 0x59a8d049, 0x8068d1c0, 0x040007c8, 0x0201f800,
+ 0x001016c8, 0x4a03503e, 0x00000001, 0x0401f02a,
+ 0x0201f800, 0x001052bf, 0x80c589c0, 0x0400001f,
0x59c4d0a3, 0x8468d570, 0x8468d532, 0x486b88a3,
- 0x59a8d078, 0x82697480, 0x00000000, 0x83f17500,
+ 0x59a8d086, 0x82697480, 0x00000000, 0x83f17500,
0x0c000000, 0x04000004, 0x82b97580, 0x0c000000,
- 0x04020796, 0x0201f800, 0x0010553c, 0x4a038808,
+ 0x04020796, 0x0201f800, 0x001056eb, 0x4a038808,
0x00000008, 0x0401f791, 0x4200d000, 0x00000002,
- 0x0201f800, 0x001018a6, 0x4200d000, 0x00000002,
- 0x0401f7a4, 0x4a035014, 0x00000001, 0x0201f800,
- 0x00105051, 0x0401f008, 0x4200d000, 0x00000156,
- 0x0401f7c7, 0x4200d000, 0x0000018a, 0x59a8d837,
+ 0x0201f800, 0x00101914, 0x4200d000, 0x00000002,
+ 0x0401f7a4, 0x4a03501a, 0x00000001, 0x0201f800,
+ 0x00105204, 0x0401f008, 0x4200d000, 0x0000016c,
+ 0x0401f7c7, 0x4200d000, 0x000001a0, 0x59a8d83d,
0x0401f7c4, 0x1c01f000, 0x5994d02c, 0x8068d1c0,
0x04020006, 0x5994d02d, 0x4200d800, 0x00000001,
0x8068d1c0, 0x04000002, 0x4178d800, 0x406d8800,
- 0x1c01f000, 0x0201f800, 0x00101820, 0x4a035038,
- 0x00000002, 0x497b5043, 0x59c4d0a3, 0x8468d520,
- 0x486b88a3, 0x0201f800, 0x0010510c, 0x80c589c0,
+ 0x1c01f000, 0x0201f800, 0x0010188e, 0x4a03503e,
+ 0x00000002, 0x497b5049, 0x59c4d0a3, 0x8468d520,
+ 0x486b88a3, 0x0201f800, 0x001052bf, 0x80c589c0,
0x04000002, 0x0401f009, 0x48c7282c, 0x48c7282d,
- 0x4200d000, 0x0000002d, 0x4200d800, 0x00110d9f,
- 0x0201f800, 0x001064ef, 0x1c01f000, 0x0401ffdf,
- 0x80c589c0, 0x04000004, 0x4a035038, 0x00000003,
- 0x0401f01f, 0x0201f800, 0x0010164d, 0x80c589c0,
- 0x04000004, 0x59a8d043, 0x8068d1c0, 0x04020008,
- 0x0201f800, 0x001018f1, 0x80c589c0, 0x04020002,
+ 0x4200d000, 0x0000002d, 0x4200d800, 0x001114e0,
+ 0x0201f800, 0x00106855, 0x1c01f000, 0x0401ffdf,
+ 0x80c589c0, 0x04000004, 0x4a03503e, 0x00000003,
+ 0x0401f01f, 0x0201f800, 0x001016bb, 0x80c589c0,
+ 0x04000004, 0x59a8d049, 0x8068d1c0, 0x04020008,
+ 0x0201f800, 0x0010195f, 0x80c589c0, 0x04020002,
0x0401f013, 0x0401ffd8, 0x0401f011, 0x0201f800,
- 0x0010165a, 0x59a8d042, 0x8c68d51e, 0x040007f9,
- 0x0201f800, 0x0010510c, 0x80c589c0, 0x04020003,
- 0x0401ffcd, 0x0401f006, 0x4a035014, 0x00000001,
- 0x0201f800, 0x00105051, 0x0401f7fa, 0x1c01f000,
- 0x4202d800, 0x00000001, 0x497b5038, 0x4a038805,
+ 0x001016c8, 0x59a8d048, 0x8c68d51e, 0x040007f9,
+ 0x0201f800, 0x001052bf, 0x80c589c0, 0x04020003,
+ 0x0401ffcd, 0x0401f006, 0x4a03501a, 0x00000001,
+ 0x0201f800, 0x00105204, 0x0401f7fa, 0x1c01f000,
+ 0x4202d800, 0x00000001, 0x497b503e, 0x4a038805,
0x00000001, 0x497b282c, 0x497b282d, 0x497b8885,
- 0x1c01f000, 0x59a8d078, 0x82697480, 0x00000000,
+ 0x1c01f000, 0x59a8d086, 0x82697480, 0x00000000,
0x83f17500, 0x0c000000, 0x04000004, 0x82b97580,
0x0c000000, 0x04020007, 0x59c4d005, 0x8268d500,
0x000000c0, 0x04020005, 0x486b8885, 0x0401f008,
- 0x8468d506, 0x486b5078, 0x59c4d006, 0x8268d540,
+ 0x8468d506, 0x486b5086, 0x59c4d006, 0x8268d540,
0x000000f1, 0x486b8806, 0x0401ffe2, 0x1c01f000,
- 0x0201f800, 0x0010511b, 0x80c589c0, 0x04000005,
- 0x59a8d013, 0x82697480, 0x0000aaaa, 0x0400000c,
- 0x497b5013, 0x59c4d006, 0x8268d540, 0x04000001,
+ 0x0201f800, 0x001052ce, 0x80c589c0, 0x04000005,
+ 0x59a8d019, 0x82697480, 0x0000aaaa, 0x0400000c,
+ 0x497b5019, 0x59c4d006, 0x8268d540, 0x04000001,
0x486b8806, 0x8d0e1d06, 0x04020008, 0x59c4d0a3,
- 0x8468d546, 0x486b88a3, 0x0401f004, 0x4a03500f,
+ 0x8468d546, 0x486b88a3, 0x0401f004, 0x4a035015,
0x00ffffff, 0x0401f7f3, 0x0401ffca, 0x1c01f000,
0x809d3840, 0x48813800, 0x0401ff80, 0x80c589c0,
- 0x04000005, 0x4a035038, 0x00000003, 0x497b8885,
- 0x0401f03e, 0x4a038805, 0x000000f0, 0x0201f800,
- 0x001018f1, 0x80c589c0, 0x0400002d, 0x0201f800,
- 0x0010510c, 0x80c589c0, 0x04020033, 0x59c4d0a4,
+ 0x04000005, 0x4a03503e, 0x00000003, 0x497b8885,
+ 0x0401f044, 0x4a038805, 0x000000f0, 0x0201f800,
+ 0x0010195f, 0x80c589c0, 0x04000033, 0x0201f800,
+ 0x001052bf, 0x80c589c0, 0x04020039, 0x59c4d0a4,
0x8268d500, 0x0000000f, 0x82697480, 0x00000008,
- 0x0400002b, 0x59c4d005, 0x82690500, 0x04000000,
- 0x8c68d534, 0x04020026, 0x5994d02c, 0x82697480,
- 0x00000002, 0x83f17500, 0x03000000, 0x040007e4,
- 0x0201f800, 0x0010511b, 0x80c589c0, 0x040007e0,
- 0x4a038805, 0x000000f0, 0x0201f800, 0x00105160,
- 0x4a035013, 0x0000aaaa, 0x48835014, 0x59c4d0a3,
- 0x8468d546, 0x486b88a3, 0x4202d800, 0x00000001,
- 0x48835038, 0x4a038805, 0x00000001, 0x4883282c,
- 0x4883282d, 0x0401ff98, 0x0401f7cd, 0x0201f800,
- 0x0010164d, 0x80c589c0, 0x040007c9, 0x59a8d043,
- 0x8068d1c0, 0x040007c6, 0x0401f7c3, 0x0401ffa5,
- 0x0401f7c3, 0x0401ff8c, 0x589d0000, 0x809d3800,
- 0x1c01f000, 0x497bc856, 0x4200d000, 0x00000080,
- 0x0201f800, 0x0010155c, 0x497b5038, 0x0201f800,
- 0x0010164d, 0x80c589c0, 0x0400000e, 0x59a8d036,
- 0x8068d1c0, 0x04020008, 0x8068d1c0, 0x04020009,
- 0x4a035036, 0x0000000a, 0x4a035043, 0x00000001,
- 0x0401f004, 0x8068d040, 0x486b5036, 0x0401f7f7,
- 0x497b8885, 0x0201f800, 0x001003fa, 0x1c01f000,
- 0x59a8d878, 0x826d7480, 0x00000000, 0x83f17500,
- 0x0c000000, 0x04000004, 0x82b97580, 0x0c000000,
- 0x04020011, 0x4200e000, 0x00000003, 0x59a80038,
- 0x80717480, 0x04001006, 0x0c01f001, 0x00110d99,
- 0x00110d9b, 0x00110d9d, 0x00110d97, 0x4200d000,
- 0x000000cb, 0x4000d800, 0x0201f800, 0x0010032b,
- 0x0401f019, 0x826cd500, 0x00000008, 0x8c6cdd06,
- 0x040207ed, 0x4202d800, 0x00000001, 0x486b5038,
- 0x486b282c, 0x486b282d, 0x59a8d078, 0x8468d506,
- 0x486b5078, 0x4a035014, 0x00000001, 0x0201f800,
- 0x00105051, 0x0401f008, 0x0401ffbb, 0x0401f006,
- 0x0401fe4c, 0x0401f004, 0x0401ff11, 0x0401f002,
- 0x0401ff6c, 0x1c01f000, 0x497b282d, 0x1c01f000,
- 0x809d3840, 0x48813800, 0x59a8d017, 0x82697480,
- 0x0000ffff, 0x04000004, 0x0201f800, 0x00101e2e,
- 0x0401f0ea, 0x0201f800, 0x0010c0e1, 0x80c57040,
- 0x04000098, 0x59a8da1b, 0x826cd500, 0x00000028,
- 0x04020045, 0x8c6cdd08, 0x0400006b, 0x599cd019,
- 0x8c68d510, 0x04020003, 0x8c6cdd16, 0x04000082,
- 0x0201f800, 0x00104965, 0x80c589c0, 0x04020039,
- 0x599cd019, 0x8c68d510, 0x04000063, 0x59a8d21b,
- 0x8c68d508, 0x04000060, 0x4a038802, 0x0000ffff,
- 0x4200d000, 0x0010cb46, 0x0201f800, 0x00100532,
- 0x4200d000, 0x0010cb53, 0x0201f800, 0x00100532,
- 0x850e1d02, 0x4a0378e4, 0x00000080, 0x4202d800,
- 0x00000003, 0x4a035017, 0x0000ffff, 0x0201f800,
- 0x00100430, 0x4178d000, 0x0201f800, 0x0010155c,
- 0x59a8d21b, 0x8c68d506, 0x04000094, 0x599cd018,
- 0x8268dd00, 0x00000800, 0x8c68d516, 0x0402008c,
- 0x599cd019, 0x8c68d510, 0x04000004, 0x59a8d21b,
- 0x8c68d508, 0x04020090, 0x417a4000, 0x4200d000,
- 0x0000ffff, 0x4200d800, 0x00000006, 0x4120e000,
- 0x0201f800, 0x00103a1e, 0x0201f800, 0x0010511b,
- 0x80c589c0, 0x04000049, 0x0201f800, 0x001071f9,
- 0x0401f09e, 0x8c6cdd00, 0x040007bb, 0x4a038802,
- 0x0000ffbf, 0x59a8da1b, 0x8c6cdd02, 0x040007b6,
- 0x599ce018, 0x82710500, 0x00000800, 0x8c70e516,
- 0x04020051, 0x59a8d01c, 0x82697480, 0x0000ffff,
- 0x0400004d, 0x8c6cdd0a, 0x0402007a, 0x42024800,
- 0x0010cfd1, 0x417a4000, 0x5924d200, 0x8268d500,
- 0x000000e0, 0x82697480, 0x000000e0, 0x040207e5,
- 0x0201f800, 0x00101c53, 0x59a8d21b, 0x8268dd00,
- 0x00000004, 0x8c68d504, 0x040207de, 0x406e5800,
- 0x4200d000, 0x00000003, 0x0201f800, 0x00101c82,
- 0x0401f076, 0x59a8d016, 0x8068d1c0, 0x04000799,
- 0x0401f072, 0x599cd018, 0x8c68d516, 0x04000043,
- 0x599cd017, 0x8c68d50a, 0x04020004, 0x59a8d006,
- 0x8c68d51c, 0x04000799, 0x4200b000, 0x000007f0,
- 0x417a8800, 0x0401f004, 0x81468800, 0x8058b040,
- 0x04000792, 0x0201f800, 0x001046de, 0x80c589c0,
- 0x040007fa, 0x5934d200, 0x8c68d51a, 0x040007f7,
- 0x0401f05a, 0x0401f059, 0x0201f800, 0x001050f0,
- 0x80c589c0, 0x0400003e, 0x59c4d006, 0x8468d534,
- 0x486b8806, 0x0201f800, 0x001071f9, 0x0401f7b1,
- 0x0201f800, 0x00104965, 0x40c50000, 0x80c589c0,
- 0x040207ac, 0x4202d800, 0x00000003, 0x0201f800,
- 0x00100430, 0x4080d000, 0x0201f800, 0x0010155c,
- 0x0401f042, 0x8c70e516, 0x04020005, 0x59a8d01c,
- 0x82697480, 0x0000ffff, 0x04000034, 0x59a8d01d,
- 0x8068d1c0, 0x0402079b, 0x0201f800, 0x0010c0ed,
- 0x80c57040, 0x04000003, 0x59a8da1b, 0x0401f752,
- 0x0201f800, 0x00102101, 0x80c57040, 0x04000791,
- 0x59a8da1b, 0x0401f74c, 0x0201f800, 0x00104cf9,
- 0x80c589c0, 0x040007bb, 0x0401f028, 0x0201f800,
- 0x00103a8f, 0x0401f781, 0x0201f800, 0x001050f0,
- 0x80c589c0, 0x0402076a, 0x59a8d21b, 0x486b541b,
- 0x0401f767, 0x406e4000, 0x4200d000, 0x000007fe,
- 0x4200d800, 0x00000004, 0x0401f771, 0x59c4d006,
- 0x8268d500, 0xffffff0f, 0x486b8806, 0x0401f7c2,
- 0x0201f800, 0x0010c0ed, 0x4200d000, 0x00000010,
- 0x80c57040, 0x04000002, 0x4080d000, 0x0201f800,
- 0x00101f62, 0x0401f77e, 0x8c6cdd04, 0x040207cc,
- 0x826cd500, 0x00004000, 0x8c6cdd1c, 0x040207c8,
- 0x406a5800, 0x0401f787, 0x589d0000, 0x809d3800,
- 0x1c01f000, 0x59c4d00d, 0x8c68d51e, 0x04020004,
- 0x59c4d005, 0x8c68d500, 0x0400000c, 0x0201f800,
- 0x00100448, 0x0201f800, 0x001050f0, 0x80c589c0,
- 0x0400000f, 0x0201f800, 0x00105051, 0x816d7040,
- 0x040000a6, 0x0401f12f, 0x4a035043, 0x00000001,
- 0x4202d800, 0x00000004, 0x4200d000, 0x0010cf8d,
- 0x0201f800, 0x0010bfb2, 0x0401f126, 0x0201f800,
- 0x0010511b, 0x80c589c0, 0x0402008e, 0x0201f800,
- 0x00103ae4, 0x59c4d0a4, 0x8268d500, 0x0000000f,
- 0x82697480, 0x00000006, 0x83f17500, 0x03000000,
- 0x040007e9, 0x0201f800, 0x00106671, 0x59c4d0a3,
- 0x8468d528, 0x486b88a3, 0x59a8d060, 0x8068d1c0,
- 0x040000d9, 0x59a8e075, 0x8270d500, 0x00001f00,
- 0x8068d910, 0x826d7480, 0x00000002, 0x83f17500,
- 0x03000000, 0x040000bd, 0x59a8d015, 0x8468d546,
- 0x486b5015, 0x0201f800, 0x001050fd, 0x80c589c0,
- 0x040000bd, 0x59c4d006, 0x8268d540, 0x44000001,
- 0x486b8806, 0x59c4d006, 0x8268d500, 0xffffff0f,
- 0x486b8806, 0x497b9005, 0x4178d000, 0x0201f800,
- 0x00104e35, 0x4a038802, 0x0000ffff, 0x4a0378e4,
- 0x00003000, 0x4200d000, 0x0010cb9c, 0x5868d400,
- 0x8c68d508, 0x04020003, 0x4a0378e4, 0x000c0000,
- 0x4200d000, 0x0010ce66, 0x0201f800, 0x0010bfb2,
- 0x59a8d00f, 0x4200d800, 0x00000003, 0x0201f800,
- 0x00106e66, 0x4200d000, 0x00008010, 0x59a8d809,
- 0x0201f800, 0x001039aa, 0x59c8d015, 0x8468d548,
- 0x486b9015, 0x0201f800, 0x00101820, 0x59a8d008,
- 0x8468d500, 0x486b5008, 0x850e1d0a, 0x0201f800,
- 0x00110a62, 0x0201f800, 0x001050f0, 0x80c589c0,
- 0x04020003, 0x8d0e1d06, 0x040200a0, 0x0201f800,
- 0x00104965, 0x80c589c0, 0x04000092, 0x59c4d002,
- 0x8468d50c, 0x486b8802, 0x497b501d, 0x497b501c,
- 0x497b5057, 0x0201f800, 0x001050f0, 0x80c589c0,
- 0x0400007d, 0x497b521b, 0x0201f800, 0x00101608,
- 0x59a8d01f, 0x82680500, 0xffff0000, 0x80c4d540,
- 0x486b501f, 0x599cd017, 0x8c68d50a, 0x04000004,
- 0x59a8d21b, 0x8468d544, 0x486b521b, 0x4200d000,
- 0x00000005, 0x0201f800, 0x001074c0, 0x497b501d,
- 0x497b5016, 0x4a035017, 0x0000ffff, 0x4a0378e4,
- 0x080000c0, 0x4202d800, 0x00000002, 0x0201f800,
- 0x001050f0, 0x80c589c0, 0x04020007, 0x59a8d21b,
- 0x8268d500, 0x0000000c, 0x82697480, 0x00000004,
- 0x04000769, 0x0201f800, 0x00101e2e, 0x0401f095,
- 0x5994d02d, 0x42000000, 0x001041ea, 0x80697480,
- 0x04000042, 0x59c4d006, 0x8268d540, 0x000000c0,
- 0x486b8806, 0x0401f76a, 0x59a8d011, 0x82697480,
- 0x00000009, 0x04020758, 0x497b500f, 0x0201f800,
- 0x0010c0ca, 0x42024800, 0x0010cfd1, 0x497a4805,
+ 0x04000031, 0x59c4d005, 0x82690500, 0x04000000,
+ 0x8c68d534, 0x0402002c, 0x5994d02e, 0x4200d800,
+ 0x0000000a, 0x0201f800, 0x001117fe, 0x5994d02c,
+ 0x82c40400, 0x00000002, 0x80697480, 0x83f17500,
+ 0x03000000, 0x040007de, 0x0201f800, 0x001052ce,
+ 0x80c589c0, 0x040007da, 0x4a038805, 0x000000f0,
+ 0x0201f800, 0x00105313, 0x4a035019, 0x0000aaaa,
+ 0x4883501a, 0x59c4d0a3, 0x8468d546, 0x486b88a3,
+ 0x4202d800, 0x00000001, 0x4883503e, 0x4a038805,
+ 0x00000001, 0x4883282c, 0x4883282d, 0x0401ff92,
+ 0x0401f7c7, 0x0201f800, 0x001016bb, 0x80c589c0,
+ 0x040007c3, 0x59a8d049, 0x8068d1c0, 0x040007c0,
+ 0x0401f7bd, 0x0401ff9f, 0x0401f7bd, 0x0401ff86,
+ 0x589d0000, 0x809d3800, 0x1c01f000, 0x497bc856,
+ 0x4200d000, 0x00000080, 0x0201f800, 0x001015be,
+ 0x497b503e, 0x0201f800, 0x001016bb, 0x80c589c0,
+ 0x0400000e, 0x59a8d03c, 0x8068d1c0, 0x04020008,
+ 0x8068d1c0, 0x04020009, 0x4a03503c, 0x0000000a,
+ 0x4a035049, 0x00000001, 0x0401f004, 0x8068d040,
+ 0x486b503c, 0x0401f7f7, 0x497b8885, 0x0201f800,
+ 0x00100403, 0x1c01f000, 0x59a8d886, 0x826d7480,
+ 0x00000000, 0x83f17500, 0x0c000000, 0x04000004,
+ 0x82b97580, 0x0c000000, 0x04020011, 0x4200e000,
+ 0x00000003, 0x59a8003e, 0x80717480, 0x04001006,
+ 0x0c01f001, 0x001114da, 0x001114dc, 0x001114de,
+ 0x001114d8, 0x4200d000, 0x000000e1, 0x4000d800,
+ 0x0201f800, 0x0010032c, 0x0401f019, 0x826cd500,
+ 0x00000008, 0x8c6cdd06, 0x040207ed, 0x4202d800,
+ 0x00000001, 0x486b503e, 0x486b282c, 0x486b282d,
+ 0x59a8d086, 0x8468d506, 0x486b5086, 0x4a03501a,
+ 0x00000001, 0x0201f800, 0x00105204, 0x0401f008,
+ 0x0401ffbb, 0x0401f006, 0x0401fe46, 0x0401f004,
+ 0x0401ff0b, 0x0401f002, 0x0401ff66, 0x1c01f000,
+ 0x497b282d, 0x1c01f000, 0x809d3840, 0x48813800,
+ 0x59a8d01d, 0x82697480, 0x0000ffff, 0x04000004,
+ 0x0201f800, 0x00101eb6, 0x0401f10b, 0x0201f800,
+ 0x0010c638, 0x80c57040, 0x040000a0, 0x59a8da21,
+ 0x826cd500, 0x00000028, 0x0402004d, 0x8c6cdd08,
+ 0x04000073, 0x599cd019, 0x8c68d510, 0x04020003,
+ 0x8c6cdd16, 0x04000072, 0x8c6cdd0e, 0x04000003,
+ 0x8c6cdd02, 0x0400009d, 0x0201f800, 0x00104abb,
+ 0x80c589c0, 0x0402003d, 0x599cd019, 0x8c68d510,
+ 0x04000068, 0x59a8d221, 0x8c68d508, 0x04000065,
+ 0x0201f800, 0x0010c67f, 0x80c589c0, 0x040000c0,
+ 0x4a038802, 0x0000ffbf, 0x4200d000, 0x0010d15c,
+ 0x0201f800, 0x00100546, 0x4200d000, 0x0010d169,
+ 0x0201f800, 0x00100546, 0x850e1d02, 0x4a0378e4,
+ 0x00000080, 0x4202d800, 0x00000003, 0x4a03501d,
+ 0x0000ffff, 0x0201f800, 0x00100439, 0x4178d000,
+ 0x0201f800, 0x001015be, 0x59a8d221, 0x8c68d506,
+ 0x040000aa, 0x599cd018, 0x8268dd00, 0x00000800,
+ 0x8c68d516, 0x040200ac, 0x599cd019, 0x8c68d510,
+ 0x04000004, 0x59a8d221, 0x8c68d508, 0x040200ae,
+ 0x417a4000, 0x4200d000, 0x0000ffff, 0x4200d800,
+ 0x00000006, 0x4120e000, 0x0201f800, 0x00103abe,
+ 0x0201f800, 0x001052ce, 0x80c589c0, 0x04000049,
+ 0x0201f800, 0x00107568, 0x0401f0b7, 0x8c6cdd00,
+ 0x040007b3, 0x4a038802, 0x0000ffbf, 0x59a8da21,
+ 0x8c6cdd02, 0x040007ae, 0x599ce018, 0x82710500,
+ 0x00000800, 0x8c70e516, 0x0402005b, 0x59a8d022,
+ 0x82697480, 0x0000ffff, 0x04000057, 0x8c6cdd0a,
+ 0x04020093, 0x42024800, 0x0010d5ef, 0x417a4000,
+ 0x5924d200, 0x8268d500, 0x000000e0, 0x82697480,
+ 0x000000e0, 0x040207e5, 0x0201f800, 0x00101cd3,
+ 0x59a8d221, 0x8268dd00, 0x00000004, 0x8c68d504,
+ 0x040207de, 0x406e5800, 0x4200d000, 0x00000003,
+ 0x0201f800, 0x00101d02, 0x0401f08f, 0x59a8d01c,
+ 0x8068d1c0, 0x04000791, 0x0401f08b, 0x0401f08a,
+ 0x599cd018, 0x8c68d516, 0x04000058, 0x599cd017,
+ 0x8c68d50a, 0x04020004, 0x59a8d006, 0x8c68d51c,
+ 0x04000794, 0x4200b000, 0x000007f0, 0x417a8800,
+ 0x0401f004, 0x81468800, 0x8058b040, 0x0400078d,
+ 0x0201f800, 0x0010482d, 0x80c589c0, 0x040007fa,
+ 0x5934d200, 0x8c68d51a, 0x040007f7, 0x0401f072,
+ 0x0201f800, 0x001052a3, 0x80c589c0, 0x04000051,
+ 0x59c4d006, 0x8468d534, 0x486b8806, 0x0201f800,
+ 0x00107568, 0x0401f7b1, 0x0201f800, 0x0010c644,
+ 0x80c57040, 0x04000029, 0x4202d800, 0x00000003,
+ 0x0201f800, 0x00100439, 0x4178d000, 0x0201f800,
+ 0x001015be, 0x0401f05c, 0x0201f800, 0x001052a3,
+ 0x80c589c0, 0x040207a1, 0x59a8d221, 0x8268d500,
+ 0xffffff77, 0x486b5221, 0x4a03501d, 0x0000ffff,
+ 0x0401f744, 0x8c70e516, 0x04020005, 0x59a8d022,
+ 0x82697480, 0x0000ffff, 0x04000043, 0x59a8d023,
+ 0x8068d1c0, 0x04020791, 0x0201f800, 0x0010c658,
+ 0x80c57040, 0x04000003, 0x59a8da21, 0x0401f740,
+ 0x0201f800, 0x00102191, 0x80c57040, 0x04000787,
+ 0x59a8da21, 0x0401f73a, 0x0201f800, 0x001052a3,
+ 0x80c589c0, 0x040207d5, 0x59a8d221, 0x8c68d506,
+ 0x040007af, 0x0201f800, 0x00104abb, 0x80c57040,
+ 0x040207ce, 0x0401f779, 0x0201f800, 0x00104e64,
+ 0x80c589c0, 0x040007a6, 0x0401f02b, 0x4a038802,
+ 0x0000ffff, 0x0401f741, 0x0201f800, 0x001052a3,
+ 0x80c589c0, 0x04020754, 0x59a8d221, 0x486b5421,
+ 0x0401f751, 0x0201f800, 0x00103b2f, 0x0401f761,
+ 0x59c4d006, 0x8268d500, 0xffffff0f, 0x486b8806,
+ 0x0401f7af, 0x406e4000, 0x4200d000, 0x000007fe,
+ 0x4200d800, 0x00000004, 0x0401f753, 0x0201f800,
+ 0x0010c658, 0x4200d000, 0x00000010, 0x80c57040,
+ 0x04000002, 0x4080d000, 0x0201f800, 0x00101fea,
+ 0x0401f765, 0x8c6cdd04, 0x040207bd, 0x826cd500,
+ 0x00004000, 0x8c6cdd1c, 0x040207b9, 0x406a5800,
+ 0x0401f76e, 0x589d0000, 0x809d3800, 0x1c01f000,
+ 0x809d3840, 0x48813800, 0x41790000, 0x0201f800,
+ 0x001052a3, 0x80c589c0, 0x04000006, 0x0201f800,
+ 0x00105204, 0x816d7040, 0x040000a0, 0x0401f123,
+ 0x0201f800, 0x001052ce, 0x80c589c0, 0x0400000a,
+ 0x5994d02d, 0x42000000, 0x001042d5, 0x80697480,
+ 0x040000d2, 0x59c4d006, 0x8268d540, 0x000000c0,
+ 0x486b8806, 0x0201f800, 0x00103bce, 0x59c4d0a4,
+ 0x8268d500, 0x0000000f, 0x82697480, 0x00000006,
+ 0x83f17500, 0x03000000, 0x040007e9, 0x0201f800,
+ 0x001069d1, 0x59c4d0a3, 0x8468d528, 0x486b88a3,
+ 0x59a8d06e, 0x8068d1c0, 0x040000cd, 0x59a8d883,
+ 0x826cd500, 0x00001f00, 0x80690110, 0x82817480,
+ 0x00000002, 0x04000008, 0x04001007, 0x80810040,
+ 0x826cd500, 0x00ff0000, 0x808000d0, 0x8068d540,
+ 0x486b9035, 0x59a8d01b, 0x8468d546, 0x486b501b,
+ 0x0201f800, 0x001052b0, 0x80c589c0, 0x040000ab,
+ 0x59c4d006, 0x8268d540, 0x44000001, 0x486b8806,
+ 0x59c4d006, 0x8268d500, 0xffffff0f, 0x486b8806,
+ 0x497b9005, 0x4178d000, 0x0201f800, 0x00104fad,
+ 0x4a038802, 0x0000ffff, 0x4a0378e4, 0x00003000,
+ 0x4200d000, 0x0010d1b2, 0x5868d400, 0x8c68d508,
+ 0x04020003, 0x4a0378e4, 0x000c0000, 0x4200d000,
+ 0x0010d47c, 0x0201f800, 0x0010c509, 0x59a8d015,
+ 0x4200d800, 0x00000003, 0x0201f800, 0x001071d5,
+ 0x4200d000, 0x00008010, 0x59a8d809, 0x0201f800,
+ 0x00103a4c, 0x59c8d015, 0x8468d548, 0x486b9015,
+ 0x0201f800, 0x0010188e, 0x59a8d008, 0x8468d500,
+ 0x486b5008, 0x850e1d0a, 0x0201f800, 0x0011119d,
+ 0x0201f800, 0x001052a3, 0x80c589c0, 0x04020003,
+ 0x8d0e1d06, 0x0402008f, 0x0201f800, 0x00104abb,
+ 0x80c589c0, 0x04000081, 0x59c4d002, 0x8468d50c,
+ 0x486b8802, 0x497b5023, 0x497b5022, 0x497b5065,
+ 0x0201f800, 0x001052a3, 0x80c589c0, 0x0402006b,
+ 0x59a8d025, 0x8268d500, 0xffff0000, 0x486b5025,
+ 0x0201f800, 0x00101676, 0x48c78880, 0x599cd017,
+ 0x8c68d50a, 0x04000004, 0x59a8d221, 0x8468d544,
+ 0x486b5221, 0x4200d000, 0x00000005, 0x0201f800,
+ 0x0010782e, 0x497b5023, 0x497b501c, 0x4a03501d,
+ 0x0000ffff, 0x4a0378e4, 0x080000c0, 0x4202d800,
+ 0x00000002, 0x0201f800, 0x001052a3, 0x80c589c0,
+ 0x04020007, 0x59a8d221, 0x8268d500, 0x0000000c,
+ 0x82697480, 0x00000004, 0x04000765, 0x0201f800,
+ 0x00101eb6, 0x0401f085, 0x59a8d017, 0x82697480,
+ 0x00000009, 0x0402075e, 0x48835015, 0x0201f800,
+ 0x0010c621, 0x42024800, 0x0010d5ef, 0x48824805,
0x0401f00a, 0x5924d200, 0x8c68d500, 0x04000004,
0x8268d500, 0xffffd815, 0x486a4a00, 0x83264c00,
0x0000000b, 0x8058b040, 0x8058b1c0, 0x040207f6,
- 0x4a038805, 0x000000f0, 0x0201f800, 0x0010510c,
- 0x80c589c0, 0x0400004b, 0x59c4d006, 0x8268d540,
+ 0x4a038805, 0x000000f0, 0x0201f800, 0x001052bf,
+ 0x80c589c0, 0x04000045, 0x59c4d006, 0x8268d540,
0x000000f1, 0x486b8806, 0x59c4d006, 0x8268d500,
- 0xbbffffff, 0x486b8806, 0x0201f800, 0x00106671,
- 0x0201f800, 0x00106e71, 0x59a8d878, 0x826d7480,
+ 0xbbffffff, 0x486b8806, 0x0201f800, 0x001069d1,
+ 0x0201f800, 0x001071e0, 0x59a8d886, 0x826d7480,
0x00000000, 0x83f17500, 0x0c000000, 0x04000004,
- 0x82b97580, 0x0c000000, 0x0402004d, 0x4a038893,
- 0x00000001, 0x4200d000, 0x0010ce6f, 0x0201f800,
- 0x0010bfb2, 0x497b5056, 0x4200d000, 0x00008030,
- 0x4178d800, 0x0401f773, 0x5994d02c, 0x8068d1c0,
- 0x0402072b, 0x0401f7bc, 0x806cd840, 0x8270d500,
- 0x00ff0000, 0x806c00d0, 0x8068d540, 0x486b9035,
- 0x0401f73e, 0x59c4d006, 0x8268d540, 0x440000f1,
- 0x0401f748, 0x59a8d01f, 0x8268d500, 0xffff0000,
- 0x486b501f, 0x0201f800, 0x00101608, 0x48c78880,
- 0x0401f785, 0x0201f800, 0x00104126, 0x0401f035,
- 0x0201f800, 0x001050f0, 0x80c589c0, 0x04000011,
- 0x59a8d018, 0x8068d1c0, 0x0402076c, 0x0201f800,
- 0x00109be2, 0x0401f769, 0x4a035056, 0x00000001,
- 0x850e1d0e, 0x0201f800, 0x00103c3f, 0x0401f025,
- 0x59c4d006, 0x8268d540, 0x440000f1, 0x0401f7ba,
- 0x0201f800, 0x00109be2, 0x59a8d21b, 0x8c68d506,
- 0x0402075a, 0x59a8d018, 0x8068d1c0, 0x04020007,
- 0x59a8d41b, 0x8c68d508, 0x04000754, 0x82697480,
- 0x0000ffff, 0x04000751, 0x4a03541b, 0x0000ffff,
- 0x0201f800, 0x0010425b, 0x0401f74c, 0x59aa6879,
- 0x5934d400, 0x82697480, 0x00000404, 0x04020007,
- 0x8c6cdd0c, 0x040006d8, 0x826cd500, 0x00000003,
- 0x040007ad, 0x0401f003, 0x0201f800, 0x0010b87c,
- 0x1c01f000, 0x809d3840, 0x48a13800, 0x829d3c80,
- 0x00000005, 0x409d4000, 0x829d3c80, 0x00000007,
- 0x48813800, 0x48853801, 0x48893802, 0x488d3803,
- 0x48913804, 0x48953805, 0x48993806, 0x4200e000,
- 0x00000001, 0x48714000, 0x4178e000, 0x48714003,
- 0x48714004, 0x48594001, 0x49214002, 0x82691d00,
- 0x00ffffff, 0x826d3500, 0x00ffffff, 0x828cd500,
- 0x00ff0000, 0x82697480, 0x00ff0000, 0x0400005e,
- 0x41792800, 0x4200b000, 0x000007f0, 0x41ad0800,
- 0x40951000, 0x828d2500, 0x00ffff00, 0x0401f00f,
- 0x809121c0, 0x04000032, 0x59a8d00f, 0x8268d500,
- 0x00ffff00, 0x40900000, 0x80697480, 0x0400002c,
- 0x4178e000, 0x48714004, 0x80850800, 0x80891000,
- 0x8058b040, 0x04000021, 0x58850000, 0x808101c0,
- 0x04000036, 0x5880d212, 0x8268d500, 0x0000ff00,
- 0x040207ec, 0x5880d002, 0x8268d500, 0x00ffffff,
- 0x408c0000, 0x80697480, 0x040207f0, 0x4098d000,
- 0x0201f800, 0x00101fc8, 0x5880d813, 0x806cd130,
- 0x41200000, 0x80697480, 0x040207e8, 0x4200e000,
- 0x00000001, 0x48714004, 0x5924d005, 0x826c0500,
- 0x00ffffff, 0x80697480, 0x04000004, 0x812000f0,
- 0x8068d540, 0x48690013, 0x58a0d004, 0x8068d1c0,
- 0x04000020, 0x408a8800, 0x0401f048, 0x5880d002,
- 0x8268d500, 0x000000ff, 0x828c0500, 0x000000ff,
- 0x80697480, 0x040207d1, 0x4098d000, 0x0201f800,
- 0x00101fc8, 0x5880d813, 0x806cd130, 0x41200000,
- 0x80697480, 0x040207c9, 0x4200d000, 0x00000001,
- 0x48694004, 0x0401f7e1, 0x809529c0, 0x040207c3,
- 0x58a0e003, 0x8070e1c0, 0x040207c0, 0x40892800,
- 0x4200d000, 0x00000001, 0x48694003, 0x0401f7bb,
- 0x58a0e003, 0x8070e1c0, 0x04000018, 0x40968800,
- 0x0401f026, 0x828d7480, 0x00fffffb, 0x040007a1,
- 0x040017a0, 0x828d7480, 0x00ffffff, 0x0400079d,
- 0x828d7480, 0x00fffffd, 0x0400001a, 0x828d7480,
- 0x00fffffd, 0x83f17500, 0x03000000, 0x0400000c,
- 0x828d7480, 0x00fffffc, 0x0400000f, 0x4178d000,
- 0x48694000, 0x0401f011, 0x488fc857, 0x489bc857,
- 0x58a0d003, 0x48694000, 0x0401f00c, 0x828d7480,
- 0x00fffffe, 0x040207f6, 0x42028800, 0x000007fe,
- 0x0401f006, 0x42028800, 0x000007fc, 0x0401f003,
- 0x42028800, 0x000007fd, 0x58a24002, 0x58a0b001,
- 0x58a18800, 0x589d3006, 0x589d2805, 0x589d2004,
- 0x589d1803, 0x589d1002, 0x589d0801, 0x589d0000,
- 0x829d3c00, 0x0000000c, 0x589d4000, 0x809d3800,
- 0x1c01f000, 0x486bc857, 0x0401ff4f, 0x1c01f000,
- 0x00000000, 0x00000001, 0x00000002, 0x00000003,
- 0x00000004, 0x00000005, 0x00000006, 0x00000007,
- 0x00000008, 0x00000009, 0x0000000a, 0x0000000b,
- 0x0000000c, 0x0000000d, 0x0000000e, 0x0000000f,
- 0x0aba4754, 0x02800004, 0x00000000, 0x0000c000,
- 0x000008a0, 0x073fca5a, 0x0705a5a5, 0x01928009,
- 0x070ff0e1, 0x03800006, 0x04958010, 0x05308000,
- 0x05008000, 0x0600902f, 0x06a00602, 0x0202f051,
- 0x042e4020, 0x018f02af, 0x033e5000, 0x03020000,
- 0x068d0020, 0x06930516, 0x03920518, 0x050fb056,
+ 0x82b97580, 0x0c000000, 0x04020047, 0x4a038893,
+ 0x00000001, 0x4200d000, 0x0010d485, 0x0201f800,
+ 0x0010c509, 0x497b5064, 0x4200d000, 0x00008030,
+ 0x4178d800, 0x0401f77e, 0x5994d02c, 0x8068d1c0,
+ 0x04020731, 0x0401f72c, 0x59c4d006, 0x8268d540,
+ 0x440000f1, 0x0401f75a, 0x497b5221, 0x0201f800,
+ 0x00101676, 0x59a8d025, 0x82680500, 0xffff0000,
+ 0x80c4d540, 0x486b5025, 0x0401f795, 0x0201f800,
+ 0x00104211, 0x0401f035, 0x0201f800, 0x001052a3,
+ 0x80c589c0, 0x04000011, 0x59a8d01e, 0x8068d1c0,
+ 0x0402077d, 0x0201f800, 0x00109f94, 0x0401f77a,
+ 0x4a035064, 0x00000001, 0x850e1d0e, 0x0201f800,
+ 0x00103d29, 0x0401f025, 0x59c4d006, 0x8268d540,
+ 0x440000f1, 0x0401f7c0, 0x0201f800, 0x00109f94,
+ 0x59a8d221, 0x8c68d506, 0x0402076b, 0x59a8d01e,
+ 0x8068d1c0, 0x04020007, 0x59a8d421, 0x8c68d508,
+ 0x04000765, 0x82697480, 0x0000ffff, 0x04000762,
+ 0x4a035421, 0x0000ffff, 0x0201f800, 0x0010436c,
+ 0x0401f75d, 0x59aa6887, 0x5934d400, 0x82697480,
+ 0x00000404, 0x04020007, 0x8c6cdd0c, 0x040006e4,
+ 0x826cd500, 0x00000003, 0x040007b3, 0x0401f003,
+ 0x0201f800, 0x0010bdd1, 0x589d0000, 0x809d3800,
+ 0x1c01f000, 0x59c4d00d, 0x8c68d51e, 0x04020004,
+ 0x59c4d005, 0x8c68d500, 0x0400000c, 0x0201f800,
+ 0x00100451, 0x0201f800, 0x001052a3, 0x80c589c0,
+ 0x04000015, 0x0201f800, 0x00105204, 0x816d7040,
+ 0x0400000d, 0x0401f011, 0x4a035066, 0x00000002,
+ 0x4a035049, 0x00000001, 0x4202d800, 0x00000004,
+ 0x4200d000, 0x0010d5a8, 0x0201f800, 0x0010c509,
+ 0x0401f006, 0x59a8d017, 0x82697480, 0x00000009,
+ 0x040207f1, 0x0401feaf, 0x1c01f000, 0x809d3840,
+ 0x48a13800, 0x829d3c80, 0x00000005, 0x409d4000,
+ 0x829d3c80, 0x00000007, 0x48813800, 0x48853801,
+ 0x48893802, 0x488d3803, 0x48913804, 0x48953805,
+ 0x48993806, 0x4200e000, 0x00000001, 0x48714000,
+ 0x4178e000, 0x48714003, 0x48714004, 0x48594001,
+ 0x49214002, 0x82691d00, 0x00ffffff, 0x826d3500,
+ 0x00ffffff, 0x828cd500, 0x00ff0000, 0x82697480,
+ 0x00ff0000, 0x0400005e, 0x41792800, 0x4200b000,
+ 0x000007f0, 0x41ad0800, 0x40951000, 0x828d2500,
+ 0x00ffff00, 0x0401f00f, 0x809121c0, 0x04000032,
+ 0x59a8d015, 0x8268d500, 0x00ffff00, 0x40900000,
+ 0x80697480, 0x0400002c, 0x4178e000, 0x48714004,
+ 0x80850800, 0x80891000, 0x8058b040, 0x04000021,
+ 0x58850000, 0x808101c0, 0x04000036, 0x5880d212,
+ 0x8268d500, 0x0000ff00, 0x040207ec, 0x5880d002,
+ 0x8268d500, 0x00ffffff, 0x408c0000, 0x80697480,
+ 0x040207f0, 0x4098d000, 0x0201f800, 0x00102050,
+ 0x5880d813, 0x806cd130, 0x41200000, 0x80697480,
+ 0x040207e8, 0x4200e000, 0x00000001, 0x48714004,
+ 0x5924d005, 0x826c0500, 0x00ffffff, 0x80697480,
+ 0x04000004, 0x812000f0, 0x8068d540, 0x48690013,
+ 0x58a0d004, 0x8068d1c0, 0x04000020, 0x408a8800,
+ 0x0401f048, 0x5880d002, 0x8268d500, 0x000000ff,
+ 0x828c0500, 0x000000ff, 0x80697480, 0x040207d1,
+ 0x4098d000, 0x0201f800, 0x00102050, 0x5880d813,
+ 0x806cd130, 0x41200000, 0x80697480, 0x040207c9,
+ 0x4200d000, 0x00000001, 0x48694004, 0x0401f7e1,
+ 0x809529c0, 0x040207c3, 0x58a0e003, 0x8070e1c0,
+ 0x040207c0, 0x40892800, 0x4200d000, 0x00000001,
+ 0x48694003, 0x0401f7bb, 0x58a0e003, 0x8070e1c0,
+ 0x04000018, 0x40968800, 0x0401f026, 0x828d7480,
+ 0x00fffffb, 0x040007a1, 0x040017a0, 0x828d7480,
+ 0x00ffffff, 0x0400079d, 0x828d7480, 0x00fffffd,
+ 0x0400001a, 0x828d7480, 0x00fffffd, 0x83f17500,
+ 0x03000000, 0x0400000c, 0x828d7480, 0x00fffffc,
+ 0x0400000f, 0x4178d000, 0x48694000, 0x0401f011,
+ 0x488fc857, 0x489bc857, 0x58a0d003, 0x48694000,
+ 0x0401f00c, 0x828d7480, 0x00fffffe, 0x040207f6,
+ 0x42028800, 0x000007fe, 0x0401f006, 0x42028800,
+ 0x000007fc, 0x0401f003, 0x42028800, 0x000007fd,
+ 0x58a24002, 0x58a0b001, 0x58a18800, 0x589d3006,
+ 0x589d2805, 0x589d2004, 0x589d1803, 0x589d1002,
+ 0x589d0801, 0x589d0000, 0x829d3c00, 0x0000000c,
+ 0x589d4000, 0x809d3800, 0x1c01f000, 0x486bc857,
+ 0x0401ff4f, 0x1c01f000, 0x809d3840, 0x48b53800,
+ 0x409d6800, 0x809d3840, 0x48013800, 0x809d3840,
+ 0x48693800, 0x809d3840, 0x486d3800, 0x809d3840,
+ 0x48713800, 0x809d3840, 0x48793800, 0x42018800,
+ 0x00000000, 0x8268d480, 0x00000000, 0x04000005,
+ 0x826cdc80, 0x00000000, 0x04000002, 0x0401f80e,
+ 0x589cf000, 0x809d3800, 0x589ce000, 0x809d3800,
+ 0x589cd800, 0x809d3800, 0x589cd000, 0x809d3800,
+ 0x589c0000, 0x809d3800, 0x589d6800, 0x809d3800,
+ 0x1c01f000, 0x406c0000, 0x8068f480, 0x04020006,
+ 0x42018800, 0x00000001, 0x42000000, 0x00000000,
+ 0x1c01f000, 0x04021005, 0x42018800, 0x00000000,
+ 0x40680000, 0x1c01f000, 0x42018800, 0x00000000,
+ 0x406c0000, 0x4200e000, 0x00000001, 0x8068f480,
+ 0x04001004, 0x800000c2, 0x8070e0c2, 0x0401f7fc,
+ 0x8000017e, 0x8070e17e, 0x8068d480, 0x40700000,
+ 0x80c58c00, 0x406c0000, 0x8068f480, 0x04000004,
+ 0x040217f1, 0x40680000, 0x0401f004, 0x80c58800,
+ 0x42000000, 0x00000000, 0x1c01f000, 0x00000000,
+ 0x00000001, 0x00000002, 0x00000003, 0x00000004,
+ 0x00000005, 0x00000006, 0x00000007, 0x00000008,
+ 0x00000009, 0x0000000a, 0x0000000b, 0x0000000c,
+ 0x0000000d, 0x0000000e, 0x0000000f, 0xa6590fd9,
+ 0x02800004, 0x00000000, 0x0000c000, 0x000008b1,
+ 0x073fca5a, 0x0705a5a5, 0x01928009, 0x070ff0e1,
+ 0x03800006, 0x04958010, 0x05308000, 0x05008000,
+ 0x0600902f, 0x07a00609, 0x0202f051, 0x042e4020,
+ 0x07840014, 0x018f02b8, 0x033e5000, 0x03020000,
+ 0x078d0021, 0x0693051c, 0x0392051e, 0x050fb056,
0x040010e6, 0x002fb008, 0x060ff0e6, 0x00580401,
- 0x054880ff, 0x0781001e, 0x038c03c6, 0x038a03c5,
- 0x078b03c3, 0x048e8010, 0x0678aae5, 0x06000051,
- 0x078181c9, 0x040010e6, 0x0448e0e6, 0x04818010,
- 0x002fb008, 0x0448e0e6, 0x04818010, 0x060ff0e6,
- 0x00580401, 0x054880ff, 0x04818010, 0x022a5001,
- 0x030430d4, 0x06780043, 0x030e0000, 0x030450ff,
- 0x06780043, 0x03019000, 0x03a1820a, 0x0781873a,
- 0x027c0045, 0x03020000, 0x06810040, 0x027c0045,
- 0x03040000, 0x04810116, 0x027c0045, 0x03080000,
- 0x048107ab, 0x04908040, 0x00910738, 0x010410a6,
- 0x0379ff41, 0x037fffff, 0x072d6000, 0x07601441,
- 0x050f80ff, 0x032fa009, 0x07f00000, 0x05600400,
- 0x050f80ff, 0x056c04ff, 0x0481075d, 0x073fa009,
- 0x06000001, 0x0279ff02, 0x0700ffff, 0x070ff0d1,
- 0x0179feff, 0x0700ffff, 0x045c0402, 0x0681875d,
- 0x060ff0d0, 0x0179feff, 0x0700ffff, 0x050010ff,
- 0x057dfeff, 0x0700ffff, 0x05810730, 0x05602600,
- 0x050f80ff, 0x073fa009, 0x06000001, 0x0079fe02,
- 0x0700ffff, 0x045c0401, 0x07818730, 0x05601041,
- 0x050f80ff, 0x032fa069, 0x07480000, 0x0481074f,
- 0x06780043, 0x070000f0, 0x07810072, 0x037c00ff,
- 0x06000010, 0x07810072, 0x0180074b, 0x0379ff00,
- 0x070fffff, 0x06780043, 0x07f00000, 0x075a0000,
- 0x020ef001, 0x0186074d, 0x05484000, 0x03a1822d,
- 0x062d6001, 0x002fb001, 0x070ff069, 0x00868085,
- 0x060ff079, 0x055c0441, 0x06810010, 0x012fb000,
- 0x060560fb, 0x0380008b, 0x060ff079, 0x02868208,
- 0x070ff069, 0x055c0441, 0x06810010, 0x060560fb,
- 0x0400d0d0, 0x062d6002, 0x0648300d, 0x07810099,
- 0x070ff0d1, 0x062d6001, 0x045c040b, 0x0781009c,
- 0x05488000, 0x05818099, 0x072e500c, 0x00208001,
- 0x06a00607, 0x02800010, 0x062d6001, 0x07f00000,
- 0x07f00000, 0x070ff0d1, 0x0179feff, 0x070000ff,
- 0x055c040c, 0x0781810a, 0x0007b001, 0x03079041,
- 0x0307a000, 0x06600a79, 0x050f80ff, 0x053fa80a,
- 0x06000010, 0x068d00a8, 0x0307c003, 0x0007d004,
- 0x0107e005, 0x0307f006, 0x02080007, 0x00081008,
- 0x01082009, 0x0308300a, 0x018680bd, 0x0448d07a,
- 0x058180bd, 0x0448b07a, 0x05810756, 0x06604479,
- 0x050f80ff, 0x053fa809, 0x06000001, 0x01680703,
- 0x076c0303, 0x07818756, 0x072d5003, 0x0049107a,
- 0x068100c7, 0x070ff009, 0x0154040a, 0x058280c6,
- 0x078d00c3, 0x0108200a, 0x032ff000, 0x010770ff,
- 0x0008400b, 0x0308500c, 0x0678007a, 0x04000108,
- 0x078100e1, 0x078d00cc, 0x06603c79, 0x050f80ff,
- 0x073fa041, 0x0600004a, 0x0249007a, 0x068100da,
- 0x068d00d3, 0x06602279, 0x050f80ff, 0x032fa009,
- 0x07780000, 0x03800000, 0x078100e1, 0x068d00da,
- 0x0678007a, 0x07f00000, 0x010880ff, 0x02386008,
- 0x03010000, 0x038000e7, 0x078d00e1, 0x0678007a,
- 0x07f00000, 0x010880ff, 0x03386000, 0x03010000,
- 0x072e6300, 0x020ef07f, 0x02860010, 0x070ff07d,
- 0x0450047c, 0x050f80ff, 0x002fa819, 0x078d00ee,
- 0x02080001, 0x00081002, 0x0678007a, 0x04000201,
- 0x078100fa, 0x0448807a, 0x068100f8, 0x0379ff03,
- 0x070000ff, 0x0049107a, 0x02a18226, 0x01082003,
- 0x068d00fb, 0x0448b07a, 0x07818103, 0x0249007a,
- 0x05810106, 0x07780003, 0x03800000, 0x05810106,
- 0x0338600c, 0x03010000, 0x00800108, 0x02386004,
- 0x03010000, 0x072e6c00, 0x02800010, 0x06780043,
- 0x070000f0, 0x04810758, 0x050020ff, 0x027c0002,
- 0x06000010, 0x05810112, 0x00800758, 0x0700c0d1,
- 0x0379ff0c, 0x070000ff, 0x028000a1, 0x0204a051,
- 0x06780043, 0x070000f0, 0x037c00ff, 0x06000010,
- 0x068181bf, 0x072d6000, 0x02948734, 0x050fb056,
- 0x044880e6, 0x04818010, 0x060ff0d0, 0x0179feff,
- 0x0700ffff, 0x057dfeff, 0x0700ffff, 0x05810730,
- 0x0349c0e4, 0x06818173, 0x013e4000, 0x070c0000,
- 0x07f00000, 0x0349c0e4, 0x06818173, 0x070ff093,
- 0x045a0201, 0x070ff093, 0x045c0401, 0x0781812e,
- 0x02046092, 0x04002046, 0x060ff002, 0x045c0401,
- 0x0703a0ff, 0x04600202, 0x00540401, 0x0782813c,
- 0x04500425, 0x070060ff, 0x0730ffff, 0x0700000f,
- 0x0742000f, 0x05810200, 0x05a00718, 0x0648a002,
- 0x0781813f, 0x00047089, 0x070ff047, 0x045c0443,
- 0x077800ff, 0x07f00000, 0x068181fe, 0x07780047,
- 0x0500e000, 0x0681871f, 0x070ff006, 0x0086016d,
- 0x0179fe47, 0x0700000f, 0x010480ff, 0x056c7048,
- 0x06818158, 0x007a0d4a, 0x04003801, 0x0220f001,
- 0x01800165, 0x07608e48, 0x034a60ff, 0x0700f0ff,
- 0x074b88ff, 0x037000ff, 0x07000600, 0x05500448,
- 0x074d00ff, 0x045a044a, 0x0304a0ff, 0x070ff00f,
- 0x01540406, 0x0482016d, 0x04950175, 0x05a0024d,
- 0x03868178, 0x0134bfff, 0x070fffff, 0x0104102e,
- 0x050fd041, 0x0080017a, 0x04950173, 0x05a0024d,
- 0x00860173, 0x0202f00e, 0x052e4030, 0x040fd02f,
- 0x05a002ac, 0x02800010, 0x0400e02f, 0x042e4020,
- 0x0202f051, 0x0004100e, 0x0004b00e, 0x024a6c46,
- 0x04500423, 0x050070ff, 0x03620024, 0x050080ff,
- 0x04004046, 0x0700500f, 0x03206000, 0x05601048,
- 0x0700a0ff, 0x0700900a, 0x070ff005, 0x04500446,
- 0x00540425, 0x048201ab, 0x07601822, 0x050f80ff,
- 0x063fa032, 0x06000002, 0x03203000, 0x01204000,
- 0x03205000, 0x0120b000, 0x0320c000, 0x05601641,
- 0x050f80ff, 0x043fa852, 0x06000001, 0x070ff056,
- 0x056c02ff, 0x050fb0ff, 0x070560ff, 0x03079041,
- 0x05601041, 0x050f80ff, 0x073fa011, 0x0600003d,
- 0x06780043, 0x07f00000, 0x065a007a, 0x010880ff,
- 0x04a00246, 0x048d01a4, 0x0208a04a, 0x0108b04b,
- 0x02386001, 0x03010000, 0x072e6300, 0x038000e8,
- 0x0500d00a, 0x05500405, 0x014a68ff, 0x070090ff,
- 0x0154040a, 0x0700c0ff, 0x0600a023, 0x0500b024,
- 0x02206001, 0x07601822, 0x050f80ff, 0x063fa04a,
- 0x06000002, 0x07f00000, 0x07601222, 0x050f80ff,
- 0x043fa819, 0x06000001, 0x0600a00d, 0x01800190,
- 0x06780043, 0x070000f0, 0x050010ff, 0x027c0001,
- 0x07000030, 0x04810726, 0x027c0001, 0x06000020,
- 0x04810726, 0x0180074b, 0x074860ff, 0x068181e5,
- 0x054880ff, 0x06810010, 0x070ff056, 0x050fb0ff,
- 0x044880e5, 0x058101d4, 0x044880e6, 0x04818010,
- 0x008001da, 0x056c02ff, 0x050fb0ff, 0x070560ff,
- 0x072e5300, 0x044880e6, 0x04818010, 0x072d5003,
- 0x06780043, 0x07f00000, 0x010880ff, 0x058d01de,
+ 0x054880ff, 0x0681001f, 0x038c03cf, 0x028a03ce,
+ 0x078b03cc, 0x048e8010, 0x07840014, 0x0678aae5,
+ 0x06000051, 0x068181cb, 0x040010e6, 0x0448e0e6,
+ 0x04818010, 0x002fb008, 0x0448e0e6, 0x04818010,
+ 0x060ff0e6, 0x00580401, 0x054880ff, 0x04818010,
+ 0x022a5001, 0x030430d4, 0x06780043, 0x030e0000,
+ 0x030450ff, 0x06780043, 0x03019000, 0x03a1820f,
+ 0x0781874b, 0x027c0045, 0x03020000, 0x07810042,
+ 0x027c0045, 0x03040000, 0x05810118, 0x027c0045,
+ 0x03080000, 0x048107bc, 0x05908042, 0x00910749,
+ 0x010410a6, 0x0379ff41, 0x037fffff, 0x072d6000,
+ 0x07601441, 0x050f80ff, 0x032fa009, 0x07f00000,
+ 0x05600400, 0x050f80ff, 0x056c04ff, 0x0481076e,
+ 0x073fa009, 0x06000001, 0x0279ff02, 0x0700ffff,
+ 0x070ff0d1, 0x0179feff, 0x0700ffff, 0x045c0402,
+ 0x0681876e, 0x060ff0d0, 0x0179feff, 0x0700ffff,
+ 0x050010ff, 0x057dfeff, 0x0700ffff, 0x05810741,
+ 0x05602600, 0x050f80ff, 0x073fa009, 0x06000001,
+ 0x0079fe02, 0x0700ffff, 0x045c0401, 0x07818741,
+ 0x05601041, 0x050f80ff, 0x032fa069, 0x07480000,
+ 0x05810760, 0x06780043, 0x070000f0, 0x07810074,
+ 0x037c00ff, 0x06000010, 0x07810074, 0x0180075c,
+ 0x0379ff00, 0x070fffff, 0x06780043, 0x07f00000,
+ 0x075a0000, 0x020ef001, 0x0086075e, 0x05484000,
+ 0x02a18232, 0x062d6001, 0x002fb001, 0x070ff069,
+ 0x01868087, 0x060ff079, 0x055c0441, 0x06810010,
+ 0x012fb000, 0x060560fb, 0x0380008d, 0x060ff079,
+ 0x0286820d, 0x070ff069, 0x055c0441, 0x06810010,
+ 0x060560fb, 0x0400d0d0, 0x062d6002, 0x0648300d,
+ 0x0681009b, 0x070ff0d1, 0x062d6001, 0x045c040b,
+ 0x0681009e, 0x05488000, 0x0481809b, 0x072e500c,
+ 0x00208001, 0x06a0060e, 0x02800010, 0x062d6001,
+ 0x07f00000, 0x07f00000, 0x070ff0d1, 0x0179feff,
+ 0x070000ff, 0x055c040c, 0x0781810c, 0x0007b001,
+ 0x03079041, 0x0307a000, 0x06600a79, 0x050f80ff,
+ 0x053fa80a, 0x06000010, 0x078d00aa, 0x0307c003,
+ 0x0007d004, 0x0107e005, 0x0307f006, 0x02080007,
+ 0x00081008, 0x01082009, 0x0308300a, 0x008680bf,
+ 0x0448d07a, 0x048180bf, 0x0448b07a, 0x04810767,
+ 0x06604479, 0x050f80ff, 0x053fa809, 0x06000001,
+ 0x01680703, 0x076c0303, 0x06818767, 0x072d5003,
+ 0x0049107a, 0x078100c9, 0x070ff009, 0x0154040a,
+ 0x048280c8, 0x078d00c5, 0x0108200a, 0x032ff000,
+ 0x010770ff, 0x0008400b, 0x0308500c, 0x0678007a,
+ 0x04000108, 0x068100e3, 0x068d00ce, 0x06603c79,
+ 0x050f80ff, 0x073fa041, 0x0600004a, 0x0249007a,
+ 0x068100dc, 0x068d00d5, 0x06602279, 0x050f80ff,
+ 0x032fa009, 0x07780000, 0x03800000, 0x068100e3,
+ 0x068d00dc, 0x0678007a, 0x07f00000, 0x010880ff,
+ 0x02386008, 0x03010000, 0x028000e9, 0x068d00e3,
+ 0x0678007a, 0x07f00000, 0x010880ff, 0x03386000,
+ 0x03010000, 0x072e6300, 0x020ef07f, 0x02860010,
+ 0x070ff07d, 0x0450047c, 0x050f80ff, 0x002fa819,
+ 0x078d00f0, 0x02080001, 0x00081002, 0x0678007a,
+ 0x04000201, 0x078100fc, 0x0448807a, 0x078100fa,
+ 0x0379ff03, 0x070000ff, 0x0049107a, 0x03a1822b,
+ 0x01082003, 0x068d00fd, 0x0448b07a, 0x07818105,
+ 0x0249007a, 0x04810108, 0x07780003, 0x03800000,
+ 0x04810108, 0x0338600c, 0x03010000, 0x0180010a,
+ 0x02386004, 0x03010000, 0x072e6c00, 0x02800010,
+ 0x06780043, 0x070000f0, 0x05810769, 0x050020ff,
+ 0x027c0002, 0x06000010, 0x05810114, 0x01800769,
+ 0x0700c0d1, 0x0379ff0c, 0x070000ff, 0x038000a3,
+ 0x0204a051, 0x06780043, 0x070000f0, 0x037c00ff,
+ 0x06000010, 0x068181c1, 0x072d6000, 0x02948745,
+ 0x050fb056, 0x044880e6, 0x04818010, 0x060ff0d0,
+ 0x0179feff, 0x0700ffff, 0x057dfeff, 0x0700ffff,
+ 0x05810741, 0x0349c0e4, 0x06818175, 0x013e4000,
+ 0x070c0000, 0x07f00000, 0x0349c0e4, 0x06818175,
+ 0x070ff093, 0x045a0201, 0x070ff093, 0x045c0401,
+ 0x07818130, 0x02046092, 0x04002046, 0x060ff002,
+ 0x045c0401, 0x0703a0ff, 0x04600202, 0x00540401,
+ 0x0682813e, 0x04500425, 0x070060ff, 0x0730ffff,
+ 0x0700000f, 0x0742000f, 0x05810205, 0x04a00729,
+ 0x0648a002, 0x07818141, 0x00047089, 0x070ff047,
+ 0x045c0443, 0x077800ff, 0x07f00000, 0x07818203,
+ 0x07780047, 0x0500e000, 0x07818730, 0x070ff006,
+ 0x0186016f, 0x0179fe47, 0x0700000f, 0x010480ff,
+ 0x056c7048, 0x0781815a, 0x007a0d4a, 0x04003801,
+ 0x0220f001, 0x00800167, 0x07608e48, 0x034a60ff,
+ 0x0700f0ff, 0x074b88ff, 0x037000ff, 0x07000600,
+ 0x05500448, 0x074d00ff, 0x045a044a, 0x0304a0ff,
+ 0x070ff00f, 0x01540406, 0x0582016f, 0x05950177,
+ 0x04a00252, 0x0286817a, 0x0134bfff, 0x070fffff,
+ 0x0104102e, 0x050fd041, 0x0080017c, 0x04950175,
+ 0x04a00252, 0x00860175, 0x0202f00e, 0x052e4030,
+ 0x040fd02f, 0x04a002b5, 0x02800010, 0x0400e02f,
+ 0x042e4020, 0x0202f051, 0x0004100e, 0x0004b00e,
+ 0x024a6c46, 0x04500423, 0x050070ff, 0x03620024,
+ 0x050080ff, 0x04004046, 0x0700500f, 0x03206000,
+ 0x05601048, 0x0700a0ff, 0x0700900a, 0x070ff005,
+ 0x04500446, 0x00540425, 0x048201ad, 0x07601822,
+ 0x050f80ff, 0x063fa032, 0x06000002, 0x03203000,
+ 0x01204000, 0x03205000, 0x0120b000, 0x0320c000,
+ 0x05601641, 0x050f80ff, 0x043fa852, 0x06000001,
+ 0x070ff056, 0x056c02ff, 0x050fb0ff, 0x070560ff,
+ 0x03079041, 0x05601041, 0x050f80ff, 0x073fa011,
+ 0x0600003d, 0x06780043, 0x07f00000, 0x065a007a,
+ 0x010880ff, 0x05a0024b, 0x058d01a6, 0x0208a04a,
+ 0x0108b04b, 0x02386001, 0x03010000, 0x072e6300,
+ 0x028000ea, 0x0500d00a, 0x05500405, 0x014a68ff,
+ 0x070090ff, 0x0154040a, 0x0700c0ff, 0x0600a023,
+ 0x0500b024, 0x02206001, 0x07601822, 0x050f80ff,
+ 0x063fa04a, 0x06000002, 0x07f00000, 0x07601222,
+ 0x050f80ff, 0x043fa819, 0x06000001, 0x0600a00d,
+ 0x00800192, 0x06780043, 0x070000f0, 0x050010ff,
+ 0x027c0001, 0x07000030, 0x04810737, 0x027c0001,
+ 0x06000020, 0x04810737, 0x0180075c, 0x074860ff,
+ 0x068181ea, 0x054880ff, 0x06810010, 0x070ff056,
+ 0x050fb0ff, 0x044880e5, 0x058101d7, 0x067800e6,
+ 0x07000041, 0x04818010, 0x018001de, 0x056c02ff,
+ 0x050fb0ff, 0x070560ff, 0x072e5300, 0x067800e6,
+ 0x07000041, 0x04818010, 0x072d5003, 0x06780043,
+ 0x07f00000, 0x010880ff, 0x050fd0ff, 0x048d01e3,
0x03386005, 0x03010000, 0x033e6000, 0x0700000c,
0x052e5200, 0x02800010, 0x0448e0e6, 0x04818010,
0x002fb008, 0x0448e0e6, 0x04818010, 0x05301fff,
- 0x0700000f, 0x06420001, 0x05810200, 0x05a00718,
- 0x0648a002, 0x068181ec, 0x062e5080, 0x04001089,
- 0x040fd002, 0x040fd001, 0x02499001, 0x0481021f,
+ 0x0700000f, 0x06420001, 0x05810205, 0x04a00729,
+ 0x0648a002, 0x068181f1, 0x062e5080, 0x04001089,
+ 0x040fd002, 0x040fd001, 0x02499001, 0x05810224,
0x070ff0d4, 0x050fd0ff, 0x045c0401, 0x077800ff,
- 0x07f00000, 0x0681821f, 0x02800010, 0x002091fe,
- 0x0380060a, 0x01209200, 0x0380060a, 0x00209202,
- 0x0380060a, 0x03209000, 0x0380060a, 0x01209206,
- 0x0380060a, 0x00209208, 0x0380060a, 0x06780043,
- 0x07009000, 0x06818215, 0x00498043, 0x04810215,
- 0x0648a0e5, 0x04810216, 0x027c0045, 0x03040000,
- 0x05810218, 0x075c00ff, 0x07c00000, 0x056a02ff,
- 0x00800215, 0x01800214, 0x06780075, 0x06000c07,
- 0x0781066c, 0x00209219, 0x070fc0ff, 0x07a005f5,
- 0x070fc0ff, 0x05308000, 0x0700a000, 0x06a00607,
+ 0x07f00000, 0x07818224, 0x02800010, 0x01209203,
+ 0x03800611, 0x01209205, 0x03800611, 0x00209207,
+ 0x03800611, 0x03209000, 0x03800611, 0x0020920b,
+ 0x03800611, 0x0020920d, 0x03800611, 0x06780043,
+ 0x07009000, 0x0681821a, 0x00498043, 0x0481021a,
+ 0x0648a0e5, 0x0581021b, 0x027c0045, 0x03040000,
+ 0x0581021d, 0x075c00ff, 0x07c00000, 0x056a02ff,
+ 0x0080021a, 0x00800219, 0x06780075, 0x06000c07,
+ 0x0681067a, 0x0120921e, 0x070fc0ff, 0x07a005fc,
+ 0x070fc0ff, 0x05308000, 0x0700a000, 0x06a0060e,
0x033e5000, 0x0700000c, 0x02800010, 0x070ff003,
- 0x01540477, 0x0782822b, 0x07003077, 0x060ff051,
+ 0x01540477, 0x07828230, 0x07003077, 0x060ff051,
0x010770ff, 0x07c00000, 0x04602001, 0x050f80ff,
0x063fa029, 0x06000008, 0x02015010, 0x02016051,
0x00017051, 0x00011051, 0x05601c41, 0x050f80ff,
@@ -29692,376 +15489,379 @@ static const uint32_t isp_2400_multi_risc_code[] = {
0x050f80ff, 0x01464000, 0x032fa00a, 0x07006011,
0x05007012, 0x04008013, 0x07009014, 0x0600a015,
0x0400b016, 0x0700c017, 0x07c00000, 0x072d5003,
- 0x04601679, 0x050f80ff, 0x048d0249, 0x063fa051,
+ 0x04601679, 0x050f80ff, 0x058d024e, 0x063fa051,
0x0600003e, 0x07c00000, 0x06005051, 0x0400e02c,
0x0660060e, 0x050f80ff, 0x032fa009, 0x0379ff00,
- 0x070000ff, 0x076c0000, 0x0581026f, 0x0460580e,
- 0x0500e0ff, 0x034000ff, 0x01540427, 0x05820299,
- 0x03400005, 0x070ff005, 0x055c0428, 0x0481029b,
- 0x056c0805, 0x0681824f, 0x040f8029, 0x053fa809,
+ 0x070000ff, 0x076c0000, 0x05810274, 0x0460580e,
+ 0x0500e0ff, 0x034000ff, 0x01540427, 0x0482029e,
+ 0x03400005, 0x070ff005, 0x055c0428, 0x058102a0,
+ 0x056c0805, 0x06818254, 0x040f8029, 0x053fa809,
0x07000024, 0x07f00000, 0x06600649, 0x050f80ff,
0x032fa009, 0x0379ff00, 0x070000ff, 0x076c0000,
- 0x0681824f, 0x05a0029f, 0x0400e049, 0x00800270,
- 0x05a0029f, 0x072d6000, 0x0460040e, 0x050f80ff,
+ 0x06818254, 0x04a002a4, 0x0400e049, 0x00800275,
+ 0x04a002a4, 0x072d6000, 0x0460040e, 0x050f80ff,
0x0004d0d0, 0x0379ff4d, 0x0700ffff, 0x0104e0d1,
0x0379ff4e, 0x0700ffff, 0x062d6002, 0x032fa009,
0x0204f0d0, 0x064b004f, 0x07780000, 0x07ffff00,
0x045a044f, 0x070000ff, 0x00201008, 0x04002051,
- 0x06003051, 0x01204000, 0x07305000, 0x07000060,
+ 0x06003051, 0x01204000, 0x07305000, 0x06000068,
0x03206009, 0x05007022, 0x0460040e, 0x050f80ff,
0x032fa042, 0x07f00000, 0x04604c0e, 0x050f80ff,
0x053fa812, 0x06000026, 0x050010d1, 0x0460340e,
0x050f80ff, 0x012fa80a, 0x060ff00e, 0x055c042e,
- 0x0481029d, 0x07c00000, 0x0400e026, 0x0080025b,
- 0x0500e02e, 0x00800270, 0x0400e051, 0x00800298,
+ 0x048102a2, 0x07c00000, 0x0400e026, 0x01800260,
+ 0x0500e02e, 0x00800275, 0x0400e051, 0x0080029d,
+ 0x050f802b, 0x053fa809, 0x06000016, 0x07f00000,
0x0340002d, 0x050f802b, 0x053fa80a, 0x06000016,
0x07f00000, 0x0460580e, 0x0302c0ff, 0x034000ff,
- 0x01540427, 0x058202aa, 0x07c00000, 0x0202c026,
- 0x018002a9, 0x013e4000, 0x03080000, 0x07c00000,
- 0x077800e4, 0x07000005, 0x058183b4, 0x022a5002,
- 0x069082b3, 0x0391033c, 0x030400a6, 0x0678aae5,
- 0x06000051, 0x03a1878e, 0x04600e40, 0x050f80ff,
+ 0x01540427, 0x048202b3, 0x07c00000, 0x0202c026,
+ 0x018002b2, 0x013e4000, 0x03080000, 0x07c00000,
+ 0x077800e4, 0x07000005, 0x058183bd, 0x022a5002,
+ 0x069082bc, 0x02910345, 0x030400a6, 0x0678aae5,
+ 0x06000051, 0x03a1879f, 0x04600e40, 0x050f80ff,
0x032fa021, 0x07f00000, 0x074b0000, 0x076c0600,
- 0x0481833e, 0x060ff002, 0x01580403, 0x06810349,
+ 0x05818347, 0x060ff002, 0x01580403, 0x06810352,
0x05600403, 0x050f80ff, 0x073fa009, 0x06000002,
0x0279ff04, 0x0700ffff, 0x010440d7, 0x0179fe44,
- 0x0700ffff, 0x045c0404, 0x04818340, 0x0349f044,
- 0x0581834b, 0x02495001, 0x05818342, 0x060ff079,
- 0x045c0440, 0x068182d6, 0x0644f07a, 0x002fb008,
- 0x060ff079, 0x045c0440, 0x078182db, 0x0644f07a,
- 0x002fb008, 0x0648f001, 0x05818333, 0x04601040,
- 0x050f80ff, 0x06480001, 0x058102fa, 0x0448e001,
- 0x0681031f, 0x02460001, 0x0644f001, 0x012fa80a,
- 0x04008040, 0x00491001, 0x04818337, 0x07a00614,
- 0x00868337, 0x070050d8, 0x05780105, 0x07ffff00,
+ 0x0700ffff, 0x045c0404, 0x04818349, 0x0349f044,
+ 0x04818354, 0x02495001, 0x0581834b, 0x060ff079,
+ 0x045c0440, 0x068182df, 0x0644f07a, 0x002fb008,
+ 0x060ff079, 0x045c0440, 0x078182e4, 0x0644f07a,
+ 0x002fb008, 0x0648f001, 0x0581833c, 0x04601040,
+ 0x050f80ff, 0x06480001, 0x07810303, 0x0448e001,
+ 0x07810328, 0x02460001, 0x0644f001, 0x012fa80a,
+ 0x04008040, 0x00491001, 0x04818340, 0x07a0061b,
+ 0x00868340, 0x070050d8, 0x05780105, 0x07ffff00,
0x04600e02, 0x050f80ff, 0x053fa812, 0x06000002,
- 0x06a005fe, 0x062da001, 0x013e4000, 0x06000080,
- 0x06930013, 0x02920013, 0x02800010, 0x0644f001,
- 0x012fa80a, 0x020ef002, 0x03860321, 0x04600840,
+ 0x07a00605, 0x062da001, 0x013e4000, 0x06000080,
+ 0x07930014, 0x03920014, 0x02800010, 0x0644f001,
+ 0x012fa80a, 0x020ef002, 0x0286032a, 0x04600840,
0x050f80ff, 0x053fa809, 0x06000002, 0x05780105,
- 0x00800440, 0x017c0105, 0x05000400, 0x05818321,
+ 0x00800440, 0x017c0105, 0x05000400, 0x0481832a,
0x04602002, 0x050f80ff, 0x053fa809, 0x06000002,
0x07f00000, 0x04602c40, 0x050f80ff, 0x070ff005,
- 0x053fa809, 0x06000002, 0x055c0405, 0x05818321,
+ 0x053fa809, 0x06000002, 0x055c0405, 0x0481832a,
0x070050d8, 0x05780105, 0x07ffff00, 0x06006051,
0x04600e02, 0x050f80ff, 0x053fa812, 0x06000002,
- 0x04008040, 0x0045e008, 0x06a005fe, 0x008002f4,
+ 0x04008040, 0x0045e008, 0x07a00605, 0x008002fd,
0x0644f001, 0x012fa80a, 0x050020d8, 0x04600440,
0x050f80ff, 0x073fa00a, 0x06000001, 0x06480001,
- 0x0581832d, 0x05308000, 0x03040000, 0x06009040,
- 0x06a00602, 0x008002f4, 0x05a0078e, 0x03200003,
- 0x06600c40, 0x050f80ff, 0x032fa00a, 0x008002f4,
- 0x013e4000, 0x06000080, 0x03209333, 0x0380060a,
- 0x06009008, 0x05308000, 0x05004000, 0x06a00602,
- 0x008002f4, 0x02209002, 0x038003a5, 0x03209000,
- 0x038003a5, 0x02209004, 0x038003a5, 0x07a003bd,
+ 0x05818336, 0x05308000, 0x03040000, 0x06009040,
+ 0x07a00609, 0x008002fd, 0x05a0079f, 0x03200003,
+ 0x06600c40, 0x050f80ff, 0x032fa00a, 0x008002fd,
+ 0x013e4000, 0x06000080, 0x0320933c, 0x03800611,
+ 0x06009008, 0x05308000, 0x05004000, 0x07a00609,
+ 0x008002fd, 0x02209002, 0x028003ae, 0x03209000,
+ 0x028003ae, 0x02209004, 0x028003ae, 0x07a003c6,
0x062da001, 0x05308000, 0x05002000, 0x06009040,
- 0x06a00602, 0x018002f5, 0x02209008, 0x038003a5,
- 0x013e4000, 0x06000080, 0x02495001, 0x0481839b,
+ 0x07a00609, 0x008002fe, 0x02209008, 0x028003ae,
+ 0x013e4000, 0x06000080, 0x02495001, 0x048183a4,
0x04600840, 0x050f80ff, 0x053fa809, 0x06000001,
- 0x0721f000, 0x0349f003, 0x06810357, 0x0245f01f,
+ 0x0721f000, 0x0349f003, 0x07810360, 0x0245f01f,
0x06000002, 0x05601600, 0x050f80ff, 0x012fa809,
- 0x06480001, 0x0681039b, 0x04481001, 0x0481839b,
+ 0x06480001, 0x068103a4, 0x04481001, 0x048183a4,
0x04602640, 0x050f80ff, 0x012fa809, 0x020ef001,
- 0x0086839b, 0x029b039b, 0x050020d8, 0x062da001,
+ 0x008683a4, 0x029b03a4, 0x050020d8, 0x062da001,
0x06303002, 0x05000430, 0x04600440, 0x050f80ff,
- 0x073fa012, 0x06000001, 0x008f836d, 0x050040d8,
+ 0x073fa012, 0x06000001, 0x008f8376, 0x050040d8,
0x062da001, 0x05602000, 0x050f80ff, 0x073fa009,
- 0x06000001, 0x060ff004, 0x00540402, 0x07820399,
+ 0x06000001, 0x060ff004, 0x00540402, 0x068203a2,
0x06005051, 0x06006051, 0x06602440, 0x050f80ff,
0x063fa01a, 0x06000002, 0x07f00000, 0x06600a40,
0x050f80ff, 0x073fa00a, 0x07000003, 0x07f00000,
0x04600840, 0x050f80ff, 0x053fa809, 0x06000001,
- 0x05487003, 0x07810393, 0x060ff002, 0x00540404,
- 0x05828393, 0x05308000, 0x07005000, 0x06009040,
- 0x06a00602, 0x04008004, 0x06a00607, 0x02800013,
- 0x060ff040, 0x045a041f, 0x010eb0ff, 0x06930013,
- 0x02920013, 0x02800010, 0x04004002, 0x03800377,
- 0x07a003bd, 0x062da001, 0x05308000, 0x07005000,
- 0x06009040, 0x06a00602, 0x050080d8, 0x06a00607,
- 0x062da001, 0x02800013, 0x050fd009, 0x040fd040,
+ 0x05487003, 0x0781039c, 0x060ff002, 0x00540404,
+ 0x0582839c, 0x05308000, 0x07005000, 0x06009040,
+ 0x07a00609, 0x04008004, 0x06a0060e, 0x03800014,
+ 0x060ff040, 0x045a041f, 0x010eb0ff, 0x07930014,
+ 0x03920014, 0x02800010, 0x04004002, 0x02800380,
+ 0x07a003c6, 0x062da001, 0x05308000, 0x07005000,
+ 0x06009040, 0x07a00609, 0x050080d8, 0x06a0060e,
+ 0x062da001, 0x03800014, 0x050fd009, 0x040fd040,
0x013e4000, 0x06000080, 0x05308000, 0x03013000,
- 0x06a00602, 0x010440d7, 0x0349f044, 0x078103b2,
- 0x062da001, 0x038f03b2, 0x03e00000, 0x062da001,
- 0x02800013, 0x0249c0e5, 0x06810013, 0x062da001,
+ 0x07a00609, 0x010440d7, 0x0349f044, 0x078103bb,
+ 0x062da001, 0x038f03bb, 0x03e00000, 0x062da001,
+ 0x03800014, 0x0249c0e5, 0x07810014, 0x062da001,
0x07f00000, 0x07f00000, 0x033e5000, 0x070c0000,
- 0x028f03b6, 0x03800011, 0x050020d8, 0x04600440,
+ 0x028f03bf, 0x03800012, 0x050020d8, 0x04600440,
0x050f80ff, 0x073fa00a, 0x06000001, 0x07c00000,
- 0x002fb001, 0x038003c6, 0x012fb000, 0x03075087,
- 0x068d03c7, 0x03386000, 0x03020000, 0x04482075,
- 0x04810438, 0x0648a0e6, 0x04810416, 0x0642007f,
- 0x05810414, 0x0340007e, 0x060ff038, 0x0154047e,
- 0x01d00403, 0x0560027d, 0x050f80ff, 0x032fa009,
- 0x030ef000, 0x02860667, 0x0107d000, 0x07600a00,
+ 0x002fb001, 0x038003cf, 0x012fb000, 0x03075087,
+ 0x068d03d0, 0x03386000, 0x03020000, 0x04482075,
+ 0x0481043e, 0x0648a0e6, 0x0481041f, 0x0642007f,
+ 0x0581041d, 0x0340007e, 0x060ff038, 0x0154047e,
+ 0x01d0040c, 0x0560027d, 0x050f80ff, 0x032fa009,
+ 0x030ef000, 0x02860675, 0x0107d000, 0x07600a00,
0x050f80ff, 0x032fa009, 0x03681e00, 0x04500420,
- 0x050f80ff, 0x073fa009, 0x0700003f, 0x038003d1,
+ 0x050f80ff, 0x073fa009, 0x0700003f, 0x028003da,
0x070ff07d, 0x0450047c, 0x050f80ff, 0x002fa819,
- 0x078d03e7, 0x02080001, 0x00081002, 0x0678007a,
- 0x04000201, 0x078103f3, 0x0448807a, 0x068103f1,
- 0x0379ff03, 0x070000ff, 0x0049107a, 0x02a18226,
- 0x01082003, 0x068d03f4, 0x0448b07a, 0x058183fc,
- 0x0249007a, 0x078103ff, 0x07780003, 0x03800000,
- 0x078103ff, 0x0338600c, 0x03010000, 0x00800401,
- 0x02386004, 0x03010000, 0x072e6c00, 0x00800438,
- 0x01800409, 0x0080040b, 0x0080040d, 0x0180040f,
- 0x01800411, 0x00800413, 0x0727c006, 0x028003e3,
- 0x0727c009, 0x028003e3, 0x0727c00c, 0x028003e3,
- 0x0727c00f, 0x028003e3, 0x0727c012, 0x028003e3,
- 0x038003d4, 0x052e6800, 0x00800438, 0x044880e6,
- 0x0781069c, 0x052e6200, 0x070ff088, 0x0179feff,
- 0x070fffff, 0x01a18642, 0x04818638, 0x0249607a,
- 0x07818456, 0x060ff083, 0x03868456, 0x033e6000,
- 0x07000003, 0x0448b07a, 0x04810438, 0x06604479,
+ 0x078d03f0, 0x02080001, 0x00081002, 0x0678007a,
+ 0x04000201, 0x078103fc, 0x0448807a, 0x078103fa,
+ 0x0379ff03, 0x070000ff, 0x0049107a, 0x03a1822b,
+ 0x01082003, 0x068d03fd, 0x0448b07a, 0x07818405,
+ 0x0249007a, 0x04810408, 0x07780003, 0x03800000,
+ 0x04810408, 0x0338600c, 0x03010000, 0x0180040a,
+ 0x02386004, 0x03010000, 0x072e6c00, 0x0080043e,
+ 0x01800412, 0x01800414, 0x00800416, 0x01800418,
+ 0x0080041a, 0x0080041c, 0x0727c006, 0x028003ec,
+ 0x0727c009, 0x028003ec, 0x0727c00c, 0x028003ec,
+ 0x0727c00f, 0x028003ec, 0x0727c012, 0x028003ec,
+ 0x038003dd, 0x052e6800, 0x0080043e, 0x044880e6,
+ 0x078106aa, 0x052e6200, 0x070ff088, 0x0179feff,
+ 0x070fffff, 0x00a1864a, 0x04818640, 0x0249607a,
+ 0x0781845c, 0x060ff083, 0x0186866f, 0x033e6000,
+ 0x07000003, 0x0448b07a, 0x0481043e, 0x06604479,
0x050f80ff, 0x032fa009, 0x03680600, 0x076c00ff,
- 0x06818438, 0x04604679, 0x050f80ff, 0x032fa009,
- 0x07f00000, 0x074b0000, 0x070ff000, 0x048d0432,
- 0x05001099, 0x064b0001, 0x045c0401, 0x04810438,
- 0x0245a07a, 0x048d0438, 0x07286000, 0x07f00000,
- 0x048d043b, 0x038c03c6, 0x0648c0e6, 0x0681845b,
- 0x0448e0e6, 0x05810453, 0x01209441, 0x02490075,
- 0x0681821f, 0x004920e6, 0x0581044e, 0x07a006e1,
- 0x05001088, 0x00700101, 0x03100000, 0x00088001,
- 0x033e6000, 0x07000088, 0x038006d2, 0x02386001,
- 0x07030000, 0x033e6000, 0x06000008, 0x018004ed,
- 0x02799075, 0x0700050f, 0x06810010, 0x04601679,
- 0x050080ff, 0x06309052, 0x0600003e, 0x0180045f,
- 0x06602479, 0x050080ff, 0x05309812, 0x07000041,
- 0x0648007a, 0x05810471, 0x04488075, 0x07818471,
- 0x0678007a, 0x04000108, 0x0481046d, 0x06603c79,
- 0x050f80ff, 0x048d0468, 0x073fa042, 0x0600004a,
- 0x048d046b, 0x02086051, 0x040f8008, 0x070fa009,
- 0x0049107a, 0x02a184ef, 0x00798075, 0x06000507,
- 0x04818683, 0x0448b075, 0x05810478, 0x02493075,
- 0x0681067f, 0x0648c0e6, 0x0781848b, 0x048d047a,
- 0x02386001, 0x07030000, 0x0049107a, 0x05810481,
- 0x020ef083, 0x0186048b, 0x06483075, 0x058104eb,
- 0x0678007a, 0x07000035, 0x01a185f5, 0x05308000,
- 0x07060000, 0x06009079, 0x06a00602, 0x018004eb,
- 0x06483075, 0x0681061f, 0x058d048d, 0x02386001,
- 0x07030000, 0x0444e07a, 0x0648307a, 0x068184bf,
- 0x0448707a, 0x048104e6, 0x0648f07a, 0x058104a9,
- 0x07a005f5, 0x04008079, 0x07a00614, 0x028684ba,
- 0x0049107a, 0x068184ba, 0x04600408, 0x050f80ff,
- 0x053fa809, 0x06000002, 0x05780105, 0x07ffff00,
- 0x05600e7b, 0x050f80ff, 0x053fa812, 0x06000002,
- 0x06a005fe, 0x018004eb, 0x0760127b, 0x050f80ff,
- 0x032fa009, 0x0349c000, 0x078184b8, 0x04601079,
- 0x050f80ff, 0x073fa00a, 0x0600003d, 0x07f00000,
- 0x06600a79, 0x050f80ff, 0x053fa80a, 0x06000010,
- 0x018004eb, 0x0046e07a, 0x008004e6, 0x06009008,
- 0x05308000, 0x05004000, 0x06a00602, 0x018004eb,
- 0x0760187b, 0x050f80ff, 0x032fa011, 0x070ff000,
- 0x04500401, 0x030460ff, 0x060ff025, 0x00540446,
- 0x048204d3, 0x030460ff, 0x052e40c0, 0x04092046,
- 0x0349a0e4, 0x068184d0, 0x003e4080, 0x0700c000,
- 0x018004d4, 0x003e4080, 0x05008000, 0x018004d4,
- 0x04092046, 0x070ff03a, 0x038684d8, 0x013e4000,
- 0x07000003, 0x05a002ac, 0x06600679, 0x050f80ff,
- 0x00201007, 0x012fa80a, 0x0046047a, 0x034630ff,
- 0x050020ff, 0x06003051, 0x04601079, 0x050f80ff,
- 0x073fa012, 0x06000001, 0x018004eb, 0x07a005f5,
- 0x05308000, 0x03020000, 0x06009079, 0x06a00602,
- 0x033e6a00, 0x0700000a, 0x02079051, 0x02800010,
- 0x06605079, 0x050f80ff, 0x032fa009, 0x070ff000,
- 0x02860508, 0x057dfeff, 0x07ffffff, 0x06810508,
- 0x050f8000, 0x012fa811, 0x0079fe02, 0x070000ff,
- 0x077d66ff, 0x060000dc, 0x04818508, 0x060ff001,
- 0x01868509, 0x064b0002, 0x06420002, 0x060ff002,
- 0x05500400, 0x050f80ff, 0x05004084, 0x073fa00a,
- 0x06000002, 0x07c00000, 0x04600201, 0x050f80ff,
- 0x073fa009, 0x06000001, 0x0079fe02, 0x070000ff,
- 0x077d72ff, 0x070000dd, 0x04818508, 0x064b0002,
- 0x06420002, 0x06000001, 0x02800502, 0x0605004c,
- 0x0280051a, 0x06930516, 0x06a005fb, 0x054bc450,
- 0x0781051d, 0x03d0051e, 0x0380051d, 0x0380052e,
- 0x03800530, 0x028005ba, 0x028005cd, 0x0280053d,
- 0x03800530, 0x03800584, 0x0380052e, 0x0380052e,
- 0x038005d1, 0x0380052e, 0x028005d5, 0x028005ea,
- 0x038005a6, 0x0380052e, 0x0380052e, 0x0320952e,
- 0x0380060a, 0x073c3fff, 0x0700000f, 0x0379ff50,
- 0x070fffff, 0x060ff079, 0x055c0450, 0x078105ca,
- 0x002fb008, 0x060ff079, 0x055c0450, 0x078105c9,
- 0x07a005ed, 0x028005c2, 0x0179fe50, 0x070fffff,
- 0x070050ff, 0x060ff079, 0x055c0405, 0x07810547,
- 0x002fb008, 0x060ff079, 0x055c0405, 0x058185c6,
- 0x073c3fff, 0x0700000f, 0x070ff087, 0x017980ff,
- 0x06000507, 0x05818556, 0x02203040, 0x05002087,
- 0x0049d002, 0x05818556, 0x002fb008, 0x07006087,
- 0x002fb008, 0x0149d006, 0x0781057e, 0x0693055b,
- 0x01257000, 0x052e4003, 0x072e5030, 0x0304c050,
- 0x02400057, 0x06740057, 0x06000004, 0x06820016,
- 0x0049107a, 0x02a184ef, 0x04002083, 0x07003084,
- 0x04004085, 0x06602479, 0x050f80ff, 0x063fa01a,
- 0x06000001, 0x07a005f5, 0x06a006ea, 0x033e6a00,
- 0x0700000a, 0x062e5020, 0x05a00718, 0x02798102,
- 0x070000ff, 0x007c8002, 0x07000055, 0x0781057b,
- 0x072e50c0, 0x0648a002, 0x0781057b, 0x068d0576,
- 0x03386006, 0x03010000, 0x033e6000, 0x0700000c,
- 0x003e4002, 0x07000a00, 0x018004ed, 0x07420003,
- 0x0581854e, 0x00798002, 0x06000507, 0x05818556,
- 0x0380055f, 0x0793058b, 0x01257000, 0x073c3fff,
- 0x0700000f, 0x052e4003, 0x072e5030, 0x0304c050,
- 0x067800e6, 0x07000041, 0x07810590, 0x07a006f3,
- 0x0481859b, 0x002fb008, 0x067800e6, 0x07000041,
- 0x07810596, 0x07a006f3, 0x0481859b, 0x062e5020,
- 0x003e4002, 0x07000a00, 0x03e00000, 0x02800010,
- 0x06740057, 0x07000018, 0x06820016, 0x06a006ea,
- 0x033e6a00, 0x0700000a, 0x002fb008, 0x06a006ea,
- 0x033e6a00, 0x0700000a, 0x03800596, 0x0379ff50,
- 0x070fffff, 0x060ff079, 0x055c0450, 0x058185ac,
- 0x0245507a, 0x002fb008, 0x060ff079, 0x055c0450,
- 0x058185b1, 0x0245507a, 0x002fb008, 0x05601050,
- 0x050f80ff, 0x012fa809, 0x02455001, 0x05601050,
- 0x050f80ff, 0x012fa80a, 0x038005c3, 0x059585ca,
- 0x0179fe50, 0x070fffff, 0x045c042f, 0x058185ca,
- 0x0202f051, 0x042e4020, 0x038005c3, 0x002fb008,
- 0x003e4002, 0x07000a00, 0x02800016, 0x059385c9,
- 0x062e5020, 0x042e4002, 0x002fb008, 0x013e4000,
- 0x05000e00, 0x02800016, 0x0179fe50, 0x070fffff,
- 0x010210ff, 0x02800016, 0x0179fe50, 0x070fffff,
- 0x050340ff, 0x038005c3, 0x0179fe50, 0x070fffff,
- 0x0102e0ff, 0x05602a2e, 0x050f80ff, 0x05222000,
- 0x07223000, 0x05224000, 0x07225000, 0x07226000,
- 0x05227000, 0x05228000, 0x07229000, 0x0722a000,
- 0x0522b000, 0x063fa051, 0x07000011, 0x0202c026,
- 0x0522d000, 0x052e400c, 0x02800016, 0x030430d4,
- 0x062e5008, 0x008001cd, 0x05601050, 0x050f80ff,
- 0x032fa009, 0x03460000, 0x028005f8, 0x0246007a,
- 0x0045207a, 0x038005f6, 0x0246007a, 0x0600007a,
- 0x04601079, 0x050f80ff, 0x032fa00a, 0x07c00000,
- 0x009285fb, 0x070500e1, 0x07c00000, 0x0245f008,
- 0x078405ff, 0x020e0008, 0x07c00000, 0x070ff009,
- 0x065a0008, 0x06840604, 0x020e0008, 0x07c00000,
- 0x06840607, 0x020e0008, 0x07c00000, 0x05308000,
- 0x0500d000, 0x06a00602, 0x07a0060f, 0x02800010,
- 0x052e4300, 0x072e500c, 0x073c3fff, 0x0700000f,
- 0x07c00000, 0x06602408, 0x050f80ff, 0x032fa011,
- 0x076a0000, 0x0581861d, 0x066a0001, 0x0781061d,
- 0x06006051, 0x07c00000, 0x02206001, 0x07c00000,
- 0x0678007a, 0x07000021, 0x05818627, 0x0049107a,
- 0x07810627, 0x073c3fff, 0x0700000f, 0x0180048d,
- 0x040fd079, 0x0648307a, 0x0681062c, 0x04a00785,
- 0x02800631, 0x06a005f2, 0x05308000, 0x05001000,
- 0x06009079, 0x06a00602, 0x068d0631, 0x033e6a00,
- 0x0600000e, 0x02079051, 0x03386006, 0x03010000,
- 0x02800010, 0x0648307a, 0x0781063c, 0x04a00785,
- 0x038006d2, 0x06a005f2, 0x05308000, 0x05001000,
- 0x06009079, 0x06a00602, 0x038006d2, 0x050010ff,
- 0x0448b07a, 0x07810650, 0x0049107a, 0x07810650,
- 0x078d0647, 0x06604479, 0x050f80ff, 0x032fa009,
- 0x03680600, 0x056c02ff, 0x05818650, 0x046c1001,
- 0x06810652, 0x056a02ff, 0x07c00000, 0x07a00655,
- 0x075c00ff, 0x07c00000, 0x078d0655, 0x060ff07c,
- 0x070ff07d, 0x070ff07e, 0x060ff07f, 0x060ff080,
- 0x070ff081, 0x070ff082, 0x060ff083, 0x070ff084,
- 0x060ff085, 0x0338600c, 0x03010000, 0x008a8662,
- 0x078d0663, 0x03386000, 0x03020000, 0x07c00000,
- 0x0648307a, 0x07818206, 0x07a005f5, 0x02209667,
- 0x0380060a, 0x04002089, 0x04780102, 0x07f00000,
- 0x05001088, 0x04740101, 0x03100000, 0x04780101,
- 0x07f00000, 0x060ff002, 0x045c0401, 0x05818681,
- 0x00088001, 0x033e6000, 0x070000c0, 0x0220901a,
- 0x05308000, 0x01012000, 0x06a00602, 0x028006ce,
- 0x0220967f, 0x0380060a, 0x03209681, 0x0180021d,
- 0x040fd075, 0x040fd07a, 0x040fd079, 0x0648307a,
- 0x0681068c, 0x06780075, 0x06000007, 0x04818697,
- 0x04a00785, 0x06486075, 0x06818204, 0x02490075,
- 0x06818219, 0x04487075, 0x0581869f, 0x0448b07a,
- 0x07810696, 0x00492075, 0x048186b0, 0x028006a8,
- 0x05308000, 0x03010000, 0x06009079, 0x06a00602,
- 0x02800010, 0x0448e0e6, 0x06818438, 0x00800202,
- 0x0648307a, 0x048186ce, 0x05308000, 0x0500e000,
- 0x06009079, 0x06a00602, 0x04008089, 0x06a00607,
- 0x028006ce, 0x06a005f2, 0x05308000, 0x0700f000,
- 0x06009079, 0x07000088, 0x07a006b7, 0x06a00602,
- 0x02800010, 0x05308000, 0x01011000, 0x06009079,
- 0x07000088, 0x07a006b7, 0x06a00602, 0x02800010,
- 0x03386000, 0x07030000, 0x07f00000, 0x068d06ba,
- 0x033e6a00, 0x0600000e, 0x02079051, 0x0448b075,
- 0x078106c5, 0x02493075, 0x078106c5, 0x05301005,
- 0x03010000, 0x028006c7, 0x05301006, 0x03010000,
- 0x05002087, 0x06485002, 0x048186c7, 0x0744c000,
- 0x01088000, 0x02086001, 0x07c00000, 0x05001088,
- 0x07a006e1, 0x0644c001, 0x00088001, 0x033e6a00,
- 0x0600000e, 0x004920e6, 0x058186d7, 0x02079051,
- 0x078d06d7, 0x060ff089, 0x034990ff, 0x078106de,
+ 0x0681843e, 0x058d0435, 0x05001099, 0x060ff001,
+ 0x064b0001, 0x045c0401, 0x0179feff, 0x070000ff,
+ 0x0481043e, 0x0245a07a, 0x048d043e, 0x07286000,
+ 0x07f00000, 0x058d0441, 0x038c03cf, 0x0648c0e6,
+ 0x06818461, 0x0448e0e6, 0x05810459, 0x01209447,
+ 0x02490075, 0x07818224, 0x004920e6, 0x04810454,
+ 0x06a006f2, 0x05001088, 0x00700101, 0x03100000,
+ 0x00088001, 0x033e6000, 0x07000088, 0x038006e2,
+ 0x02386001, 0x07030000, 0x033e6000, 0x06000008,
+ 0x018004f3, 0x02799075, 0x0700050f, 0x06810010,
+ 0x04601679, 0x050080ff, 0x06309052, 0x0600003e,
+ 0x01800465, 0x06602479, 0x050080ff, 0x05309812,
+ 0x07000041, 0x0648007a, 0x05810477, 0x04488075,
+ 0x07818477, 0x0678007a, 0x04000108, 0x04810473,
+ 0x06603c79, 0x050f80ff, 0x048d046e, 0x073fa042,
+ 0x0600004a, 0x058d0471, 0x02086051, 0x040f8008,
+ 0x070fa009, 0x0049107a, 0x03a184f5, 0x00798075,
+ 0x06000507, 0x04818691, 0x0448b075, 0x0581047e,
+ 0x02493075, 0x0781068d, 0x0648c0e6, 0x06818491,
+ 0x048d0480, 0x02386001, 0x07030000, 0x0049107a,
+ 0x05810487, 0x020ef083, 0x00860491, 0x06483075,
+ 0x048104f1, 0x0279007a, 0x01080200, 0x03a105fc,
+ 0x05308000, 0x07060000, 0x06009079, 0x07a00609,
+ 0x008004f1, 0x06483075, 0x06810626, 0x058d0493,
+ 0x02386001, 0x07030000, 0x0444e07a, 0x0648307a,
+ 0x078184c5, 0x0448707a, 0x048104ec, 0x0648f07a,
+ 0x058104af, 0x07a005fc, 0x04008079, 0x07a0061b,
+ 0x038684c0, 0x0049107a, 0x078184c0, 0x04600408,
+ 0x050f80ff, 0x053fa809, 0x06000002, 0x05780105,
+ 0x07ffff00, 0x05600e7b, 0x050f80ff, 0x053fa812,
+ 0x06000002, 0x07a00605, 0x008004f1, 0x0760127b,
+ 0x050f80ff, 0x032fa009, 0x0349c000, 0x078184be,
+ 0x04601079, 0x050f80ff, 0x073fa00a, 0x0600003d,
+ 0x07f00000, 0x06600a79, 0x050f80ff, 0x053fa80a,
+ 0x06000010, 0x008004f1, 0x0046e07a, 0x008004ec,
+ 0x06009008, 0x05308000, 0x05004000, 0x07a00609,
+ 0x008004f1, 0x0760187b, 0x050f80ff, 0x032fa011,
+ 0x070ff000, 0x04500401, 0x030460ff, 0x060ff025,
+ 0x00540446, 0x048204d9, 0x030460ff, 0x052e40c0,
+ 0x04092046, 0x0349a0e4, 0x068184d6, 0x003e4080,
+ 0x0700c000, 0x008004da, 0x003e4080, 0x05008000,
+ 0x008004da, 0x04092046, 0x070ff03a, 0x038684de,
+ 0x013e4000, 0x07000003, 0x04a002b5, 0x06600679,
+ 0x050f80ff, 0x00201007, 0x012fa80a, 0x0046047a,
+ 0x034630ff, 0x050020ff, 0x06003051, 0x04601079,
+ 0x050f80ff, 0x073fa012, 0x06000001, 0x008004f1,
+ 0x07a005fc, 0x05308000, 0x03020000, 0x06009079,
+ 0x07a00609, 0x033e6a00, 0x0700000a, 0x02079051,
+ 0x02800010, 0x06605079, 0x050f80ff, 0x032fa009,
+ 0x070ff000, 0x0286050e, 0x057dfeff, 0x07ffffff,
+ 0x0681050e, 0x050f8000, 0x012fa811, 0x0079fe02,
+ 0x070000ff, 0x077d66ff, 0x060000dc, 0x0481850e,
+ 0x060ff001, 0x0186850f, 0x064b0002, 0x06420002,
+ 0x060ff002, 0x05500400, 0x050f80ff, 0x05004084,
+ 0x073fa00a, 0x06000002, 0x07c00000, 0x04600201,
+ 0x050f80ff, 0x073fa009, 0x06000001, 0x0079fe02,
+ 0x070000ff, 0x077d72ff, 0x070000dd, 0x0481850e,
+ 0x064b0002, 0x06420002, 0x06000001, 0x02800508,
+ 0x0605004c, 0x02800520, 0x0693051c, 0x06a00602,
+ 0x054bc450, 0x06810523, 0x03d00524, 0x02800523,
+ 0x02800534, 0x03800536, 0x028005c1, 0x038005d4,
+ 0x02800543, 0x03800536, 0x0380058b, 0x02800534,
+ 0x02800534, 0x038005d8, 0x02800534, 0x028005dc,
+ 0x028005f1, 0x028005ad, 0x02800534, 0x02800534,
+ 0x02209534, 0x03800611, 0x073c3fff, 0x0700000f,
+ 0x0379ff50, 0x070fffff, 0x060ff079, 0x055c0450,
+ 0x078105d1, 0x002fb008, 0x060ff079, 0x055c0450,
+ 0x068105d0, 0x06a005f4, 0x038005c9, 0x0179fe50,
+ 0x070fffff, 0x070050ff, 0x060ff079, 0x055c0405,
+ 0x0781054d, 0x002fb008, 0x060ff079, 0x055c0405,
+ 0x048185cd, 0x073c3fff, 0x0700000f, 0x070ff087,
+ 0x017980ff, 0x06000507, 0x0581855c, 0x02203040,
+ 0x05002087, 0x0049d002, 0x0581855c, 0x002fb008,
+ 0x07006087, 0x002fb008, 0x0149d006, 0x06810585,
+ 0x06930561, 0x01257000, 0x052e4003, 0x072e5030,
+ 0x0304c050, 0x02400057, 0x06740057, 0x06000004,
+ 0x07820017, 0x0049107a, 0x03a184f5, 0x04002083,
+ 0x07003084, 0x04004085, 0x06602479, 0x050f80ff,
+ 0x063fa01a, 0x06000001, 0x07a005fc, 0x06a006fb,
+ 0x033e6a00, 0x0700000a, 0x062e5020, 0x04a00729,
+ 0x02798102, 0x070000ff, 0x007c8002, 0x07000055,
+ 0x07810582, 0x072e50c0, 0x0648a002, 0x07810582,
+ 0x040fd002, 0x078d057d, 0x03386006, 0x03010000,
+ 0x033e6000, 0x0700000c, 0x003e4002, 0x07000a00,
+ 0x018004f3, 0x07420003, 0x04818554, 0x00798002,
+ 0x06000507, 0x0581855c, 0x03800565, 0x06930592,
+ 0x01257000, 0x073c3fff, 0x0700000f, 0x052e4003,
+ 0x072e5030, 0x0304c050, 0x067800e6, 0x07000041,
+ 0x06810597, 0x04a00704, 0x048185a2, 0x002fb008,
+ 0x067800e6, 0x07000041, 0x0681059d, 0x04a00704,
+ 0x048185a2, 0x062e5020, 0x003e4002, 0x07000a00,
+ 0x03e00000, 0x02800010, 0x06740057, 0x07000018,
+ 0x07820017, 0x06a006fb, 0x033e6a00, 0x0700000a,
+ 0x002fb008, 0x06a006fb, 0x033e6a00, 0x0700000a,
+ 0x0280059d, 0x0379ff50, 0x070fffff, 0x060ff079,
+ 0x055c0450, 0x048185b3, 0x0245507a, 0x002fb008,
+ 0x060ff079, 0x055c0450, 0x058185b8, 0x0245507a,
+ 0x002fb008, 0x05601050, 0x050f80ff, 0x012fa809,
+ 0x02455001, 0x05601050, 0x050f80ff, 0x012fa80a,
+ 0x038005ca, 0x059585d1, 0x0179fe50, 0x070fffff,
+ 0x045c042f, 0x058185d1, 0x0202f051, 0x042e4020,
+ 0x038005ca, 0x002fb008, 0x003e4002, 0x07000a00,
+ 0x03800017, 0x049385d0, 0x062e5020, 0x042e4002,
+ 0x002fb008, 0x013e4000, 0x05000e00, 0x03800017,
+ 0x0179fe50, 0x070fffff, 0x010210ff, 0x03800017,
+ 0x0179fe50, 0x070fffff, 0x050340ff, 0x038005ca,
+ 0x0179fe50, 0x070fffff, 0x0102e0ff, 0x05602a2e,
+ 0x050f80ff, 0x05222000, 0x07223000, 0x05224000,
+ 0x07225000, 0x07226000, 0x05227000, 0x05228000,
+ 0x07229000, 0x0722a000, 0x0522b000, 0x063fa051,
+ 0x07000011, 0x0202c026, 0x0522d000, 0x052e400c,
+ 0x03800017, 0x030430d4, 0x062e5008, 0x018001cf,
+ 0x05601050, 0x050f80ff, 0x032fa009, 0x03460000,
+ 0x038005ff, 0x0246007a, 0x0045207a, 0x028005fd,
+ 0x0246007a, 0x0600007a, 0x04601079, 0x050f80ff,
+ 0x032fa00a, 0x07c00000, 0x00928602, 0x070500e1,
+ 0x07c00000, 0x0245f008, 0x07840606, 0x020e0008,
+ 0x07c00000, 0x070ff009, 0x065a0008, 0x0684060b,
+ 0x020e0008, 0x07c00000, 0x0684060e, 0x020e0008,
+ 0x07c00000, 0x05308000, 0x0500d000, 0x07a00609,
+ 0x06a00616, 0x02800010, 0x052e4300, 0x072e500c,
+ 0x073c3fff, 0x0700000f, 0x07c00000, 0x06602408,
+ 0x050f80ff, 0x032fa011, 0x076a0000, 0x05818624,
+ 0x066a0001, 0x07810624, 0x06006051, 0x07c00000,
+ 0x02206001, 0x07c00000, 0x0678007a, 0x07000021,
+ 0x0581862e, 0x0049107a, 0x0781062e, 0x073c3fff,
+ 0x0700000f, 0x01800493, 0x040fd079, 0x0648307a,
+ 0x07810633, 0x05a00796, 0x02800638, 0x07a005f9,
+ 0x05308000, 0x05001000, 0x06009079, 0x07a00609,
+ 0x068d0638, 0x040fd079, 0x033e6a00, 0x0600000e,
+ 0x02079051, 0x03386006, 0x03010000, 0x02800010,
+ 0x0648307a, 0x07810644, 0x05a00796, 0x038006e2,
+ 0x07a005f9, 0x05308000, 0x05001000, 0x06009079,
+ 0x07a00609, 0x038006e2, 0x050010ff, 0x0448b07a,
+ 0x06810658, 0x0049107a, 0x06810658, 0x068d064f,
+ 0x06604479, 0x050f80ff, 0x032fa009, 0x03680600,
+ 0x056c02ff, 0x04818658, 0x046c1001, 0x0781065a,
+ 0x056a02ff, 0x07c00000, 0x06a0065d, 0x075c00ff,
+ 0x07c00000, 0x068d065d, 0x060ff07c, 0x070ff07d,
+ 0x070ff07e, 0x060ff07f, 0x060ff080, 0x070ff081,
+ 0x070ff082, 0x060ff083, 0x070ff084, 0x060ff085,
+ 0x0338600c, 0x03010000, 0x018a866a, 0x068d066b,
+ 0x03386000, 0x03020000, 0x07c00000, 0x06483075,
+ 0x0781845c, 0x0448d07a, 0x04818626, 0x040fd079,
+ 0x0180045c, 0x0648307a, 0x0681820b, 0x07a005fc,
+ 0x02209675, 0x03800611, 0x04002089, 0x04780102,
+ 0x07f00000, 0x05001088, 0x04740101, 0x03100000,
+ 0x04780101, 0x07f00000, 0x060ff002, 0x045c0401,
+ 0x0481868f, 0x00088001, 0x033e6000, 0x070000c0,
+ 0x0220901a, 0x05308000, 0x01012000, 0x07a00609,
+ 0x038006dd, 0x0320968d, 0x03800611, 0x0220968f,
+ 0x01800222, 0x040fd075, 0x040fd07a, 0x040fd079,
+ 0x0648307a, 0x0781069a, 0x06780075, 0x06000007,
+ 0x058186a5, 0x05a00796, 0x06486075, 0x07818209,
+ 0x02490075, 0x0781821e, 0x04487075, 0x048186ad,
+ 0x0448b07a, 0x068106a4, 0x00492075, 0x058186be,
+ 0x028006b6, 0x05308000, 0x03010000, 0x06009079,
+ 0x07a00609, 0x02800010, 0x0448e0e6, 0x0681843e,
+ 0x00800207, 0x0648307a, 0x058186dd, 0x05308000,
+ 0x0500e000, 0x06009079, 0x07a00609, 0x04008089,
+ 0x06a0060e, 0x038006dd, 0x07a005f9, 0x05308000,
+ 0x0700f000, 0x06009079, 0x07000088, 0x07a006c5,
+ 0x07a00609, 0x02800010, 0x05308000, 0x01011000,
+ 0x06009079, 0x07000088, 0x07a006c5, 0x07a00609,
+ 0x02800010, 0x03386000, 0x07030000, 0x07f00000,
+ 0x068d06c8, 0x033e6a00, 0x0600000e, 0x02079051,
+ 0x040fd075, 0x0448b075, 0x078106d4, 0x02493075,
+ 0x078106d4, 0x05301005, 0x03010000, 0x028006d6,
+ 0x05301006, 0x03010000, 0x05002087, 0x06485002,
+ 0x048186d6, 0x0744c000, 0x01088000, 0x02086001,
+ 0x07c00000, 0x05001088, 0x040fd001, 0x06a006f2,
+ 0x0644c001, 0x00088001, 0x070fc0ff, 0x033e6a00,
+ 0x0600000e, 0x004920e6, 0x058186e8, 0x02079051,
+ 0x078d06e8, 0x060ff089, 0x034990ff, 0x068106ef,
0x03386005, 0x03010000, 0x02800010, 0x03386006,
- 0x03010000, 0x02800010, 0x078d06e1, 0x03386000,
- 0x07030000, 0x07f00000, 0x068d06e5, 0x070ff087,
- 0x074850ff, 0x048186e6, 0x07c00000, 0x068d06ea,
- 0x02386001, 0x07030000, 0x07f00000, 0x078d06ee,
- 0x070ff087, 0x074850ff, 0x048186ef, 0x07c00000,
- 0x05002087, 0x0049d002, 0x06818702, 0x002fb008,
- 0x067800e6, 0x07000041, 0x002fb008, 0x06818702,
- 0x05a00718, 0x0448e002, 0x05810705, 0x0648a002,
- 0x0781870f, 0x06486002, 0x05810709, 0x02400057,
- 0x056a02ff, 0x07c00000, 0x05a00718, 0x06788102,
- 0x06000004, 0x06818702, 0x04002089, 0x070ff0d4,
- 0x045c0402, 0x077800ff, 0x07f00000, 0x06818702,
- 0x00202010, 0x008c0702, 0x07f00000, 0x06420002,
- 0x06818710, 0x06a006ea, 0x033e6a00, 0x0700000a,
+ 0x03010000, 0x02800010, 0x068d06f2, 0x03386000,
+ 0x07030000, 0x07f00000, 0x078d06f6, 0x070ff087,
+ 0x074850ff, 0x048186f7, 0x07c00000, 0x068d06fb,
+ 0x02386001, 0x07030000, 0x07f00000, 0x078d06ff,
+ 0x070ff087, 0x074850ff, 0x07818700, 0x07c00000,
+ 0x05002087, 0x0049d002, 0x06818713, 0x002fb008,
+ 0x067800e6, 0x07000041, 0x002fb008, 0x06818713,
+ 0x04a00729, 0x0448e002, 0x04810716, 0x0648a002,
+ 0x06818720, 0x06486002, 0x0481071a, 0x02400057,
+ 0x056a02ff, 0x07c00000, 0x04a00729, 0x06788102,
+ 0x06000004, 0x06818713, 0x04002089, 0x070ff0d4,
+ 0x045c0402, 0x077800ff, 0x07f00000, 0x06818713,
+ 0x00202010, 0x008c0713, 0x07f00000, 0x06420002,
+ 0x07818721, 0x06a006fb, 0x033e6a00, 0x0700000a,
0x07c00000, 0x07f00000, 0x060ff0a2, 0x045a0202,
- 0x060ff0a2, 0x045c0402, 0x06818719, 0x07c00000,
- 0x05a002ac, 0x03495047, 0x05810724, 0x0320901d,
- 0x01800781, 0x0220901f, 0x01800781, 0x014980e4,
+ 0x060ff0a2, 0x045c0402, 0x0681872a, 0x07c00000,
+ 0x04a002b5, 0x03495047, 0x05810735, 0x0320901d,
+ 0x00800792, 0x0220901f, 0x00800792, 0x014980e4,
0x04818010, 0x013e4000, 0x07003000, 0x05600e35,
- 0x050f80ff, 0x04a00883, 0x01208003, 0x06a00607,
- 0x0180074b, 0x066c0045, 0x0481079e, 0x03209009,
- 0x01800781, 0x03209011, 0x01800781, 0x02209007,
- 0x01800781, 0x03209003, 0x01800781, 0x00497043,
- 0x07818736, 0x00494043, 0x04810740, 0x02209001,
- 0x01800781, 0x072d6000, 0x027c0045, 0x03080000,
- 0x07818730, 0x060ff0d0, 0x0179feff, 0x0700ffff,
- 0x057dfeff, 0x0700ffff, 0x058107ac, 0x01800730,
- 0x0220900d, 0x01800781, 0x0320900f, 0x01800781,
- 0x03493000, 0x04810754, 0x027c0045, 0x070a0000,
- 0x0581075f, 0x0220900b, 0x01800781, 0x0320900c,
- 0x01800759, 0x02209013, 0x05308000, 0x01012000,
- 0x06a00602, 0x008001da, 0x03209005, 0x01800781,
- 0x072e500c, 0x00208002, 0x06a00607, 0x02800010,
- 0x02209015, 0x01800781, 0x05308000, 0x05007000,
- 0x070090d1, 0x0379ff09, 0x0700ffff, 0x06a00602,
- 0x03209017, 0x01800781, 0x033e5000, 0x06000080,
- 0x02209019, 0x01800781, 0x033e5000, 0x06000080,
+ 0x050f80ff, 0x04a00894, 0x01208003, 0x06a0060e,
+ 0x0180075c, 0x066c0045, 0x058107af, 0x03209009,
+ 0x00800792, 0x03209011, 0x00800792, 0x02209007,
+ 0x00800792, 0x03209003, 0x00800792, 0x00497043,
+ 0x07818747, 0x00494043, 0x04810751, 0x02209001,
+ 0x00800792, 0x072d6000, 0x027c0045, 0x03080000,
+ 0x07818741, 0x060ff0d0, 0x0179feff, 0x0700ffff,
+ 0x057dfeff, 0x0700ffff, 0x058107bd, 0x01800741,
+ 0x0220900d, 0x00800792, 0x0320900f, 0x00800792,
+ 0x03493000, 0x05810765, 0x027c0045, 0x070a0000,
+ 0x04810770, 0x0220900b, 0x00800792, 0x0320900c,
+ 0x0180076a, 0x02209013, 0x05308000, 0x01012000,
+ 0x07a00609, 0x018001de, 0x03209005, 0x00800792,
+ 0x072e500c, 0x00208002, 0x06a0060e, 0x02800010,
+ 0x02209015, 0x00800792, 0x05308000, 0x05007000,
+ 0x070090d1, 0x0379ff09, 0x0700ffff, 0x07a00609,
+ 0x03209017, 0x00800792, 0x033e5000, 0x06000080,
+ 0x02209019, 0x00800792, 0x033e5000, 0x06000080,
0x060ff0d0, 0x0179feff, 0x0700ffff, 0x057dfeff,
0x0700ffff, 0x04818010, 0x02400058, 0x00642058,
0x06820010, 0x033e5000, 0x06000080, 0x04058051,
- 0x0320901b, 0x01800781, 0x05308000, 0x01012000,
- 0x06a00602, 0x008001cd, 0x05a002ac, 0x070ff02e,
- 0x045c0479, 0x0581078d, 0x05308000, 0x05008000,
- 0x06009079, 0x06a00602, 0x07c00000, 0x034900e4,
- 0x06818798, 0x013e4000, 0x070000c0, 0x07f00000,
- 0x034900e4, 0x07818796, 0x07c00000, 0x013e4000,
+ 0x0320901b, 0x00800792, 0x05308000, 0x01012000,
+ 0x07a00609, 0x018001cf, 0x04a002b5, 0x070ff02e,
+ 0x045c0479, 0x0481079e, 0x05308000, 0x05008000,
+ 0x06009079, 0x07a00609, 0x07c00000, 0x034900e4,
+ 0x078187a9, 0x013e4000, 0x070000c0, 0x07f00000,
+ 0x034900e4, 0x068187a7, 0x07c00000, 0x013e4000,
0x06000080, 0x07f00000, 0x07f00000, 0x07f00000,
- 0x034900e4, 0x05810790, 0x00800798, 0x072d6000,
+ 0x034900e4, 0x048107a1, 0x018007a9, 0x072d6000,
0x070ff0d1, 0x0179feff, 0x0700ffff, 0x017c1cff,
- 0x070000fc, 0x0681875d, 0x079087a5, 0x00910738,
- 0x010410a6, 0x0379ff41, 0x037fffff, 0x03800066,
- 0x072d6000, 0x05a00863, 0x020ef004, 0x01860765,
+ 0x070000fc, 0x0681876e, 0x069087b6, 0x00910749,
+ 0x010410a6, 0x0379ff41, 0x037fffff, 0x02800068,
+ 0x072d6000, 0x05a00874, 0x020ef004, 0x00860776,
0x04602604, 0x050f80ff, 0x032fa009, 0x060ff0d0,
- 0x0179feff, 0x0700ffff, 0x055c0400, 0x07818763,
+ 0x0179feff, 0x0700ffff, 0x055c0400, 0x07818774,
0x06600004, 0x050f80ff, 0x032fa009, 0x07f00000,
0x074b0000, 0x05002000, 0x0769ff00, 0x01640800,
- 0x05820765, 0x01640e00, 0x07828765, 0x070ff036,
- 0x045c0404, 0x068187ce, 0x050f8030, 0x032fa009,
+ 0x04820776, 0x01640e00, 0x06828776, 0x070ff036,
+ 0x045c0404, 0x068187df, 0x050f8030, 0x032fa009,
0x0379ff00, 0x0700ffff, 0x070ff0d1, 0x0179feff,
- 0x0700ffff, 0x055c0400, 0x05810763, 0x04482034,
- 0x0481077c, 0x06483034, 0x0681877c, 0x070ff0d4,
+ 0x0700ffff, 0x055c0400, 0x05810774, 0x04482034,
+ 0x0581078d, 0x06483034, 0x0781878d, 0x070ff0d4,
0x077800ff, 0x070000f0, 0x037c00ff, 0x06000010,
- 0x058107ff, 0x024900e5, 0x068187df, 0x033e5000,
- 0x070000c0, 0x07f00000, 0x024900e5, 0x058107e2,
+ 0x04810810, 0x024900e5, 0x078187f0, 0x033e5000,
+ 0x070000c0, 0x07f00000, 0x024900e5, 0x058107f3,
0x033e5000, 0x06000080, 0x02800010, 0x04601c04,
0x050f80ff, 0x053fa809, 0x06000020, 0x030ef041,
- 0x0086076d, 0x062d6002, 0x05602c41, 0x050f80ff,
+ 0x0186077e, 0x062d6002, 0x05602c41, 0x050f80ff,
0x012fa809, 0x060ff0d0, 0x074b00ff, 0x045c0401,
- 0x068187fd, 0x062d6001, 0x07602e41, 0x050f80ff,
+ 0x0681880e, 0x062d6001, 0x07602e41, 0x050f80ff,
0x053fa809, 0x06000001, 0x070ff0d1, 0x054b80ff,
- 0x074b0003, 0x055c0403, 0x068187fd, 0x033e5000,
- 0x06000080, 0x01800895, 0x07600041, 0x008007e3,
- 0x024900e5, 0x07818806, 0x033e5000, 0x070000c0,
- 0x07f00000, 0x024900e5, 0x05810809, 0x033e5000,
- 0x06000080, 0x02800010, 0x05a0084e, 0x030ef041,
- 0x01860771, 0x04058051, 0x072d6000, 0x07601241,
+ 0x074b0003, 0x055c0403, 0x0681880e, 0x033e5000,
+ 0x06000080, 0x018008a6, 0x07600041, 0x008007f4,
+ 0x024900e5, 0x07818817, 0x033e5000, 0x070000c0,
+ 0x07f00000, 0x024900e5, 0x0481081a, 0x033e5000,
+ 0x06000080, 0x02800010, 0x05a0085f, 0x030ef041,
+ 0x01860782, 0x04058051, 0x072d6000, 0x07601241,
0x050f80ff, 0x012fa809, 0x0600a0d0, 0x0500b0d1,
0x062d6001, 0x07f00000, 0x07f00000, 0x0600c0d0,
0x0500d0d1, 0x062d6002, 0x0279ff0d, 0x07ff0000,
@@ -30069,7 +15869,7 @@ static const uint32_t isp_2400_multi_risc_code[] = {
0x06601401, 0x050f80ff, 0x073fa022, 0x07000005,
0x0079fe0d, 0x070000ff, 0x050020ff, 0x05602c41,
0x050f80ff, 0x073fa00a, 0x06000001, 0x020ef004,
- 0x0186084b, 0x04601c04, 0x050f80ff, 0x053fa809,
+ 0x0186085c, 0x04601c04, 0x050f80ff, 0x053fa809,
0x06000001, 0x050f80ff, 0x053fa80a, 0x06000020,
0x07f00000, 0x07602e41, 0x050f80ff, 0x073fa009,
0x06000001, 0x0279ff02, 0x070000ff, 0x0678000d,
@@ -30077,29 +15877,29 @@ static const uint32_t isp_2400_multi_risc_code[] = {
0x073fa00a, 0x06000001, 0x07f00000, 0x07600041,
0x050f80ff, 0x053fa80a, 0x06000001, 0x07f00000,
0x07601441, 0x050f80ff, 0x073fa00a, 0x06000002,
- 0x033e5000, 0x06000080, 0x01800895, 0x040f8032,
+ 0x033e5000, 0x06000080, 0x018008a6, 0x040f8032,
0x073fa011, 0x06000001, 0x060ff002, 0x055c0403,
- 0x07818856, 0x00041051, 0x07c00000, 0x04600402,
+ 0x06818867, 0x00041051, 0x07c00000, 0x04600402,
0x04500432, 0x050f80ff, 0x053fa809, 0x06000020,
0x07f00000, 0x00400402, 0x01680eff, 0x070030ff,
0x040f8032, 0x053fa80a, 0x06000001, 0x07c00000,
0x05004036, 0x060000d0, 0x0179fe00, 0x0700ffff,
- 0x057dfeff, 0x0700ffff, 0x05810882, 0x070000d1,
+ 0x057dfeff, 0x0700ffff, 0x05810893, 0x070000d1,
0x0379ff00, 0x0700ffff, 0x06005051, 0x060ff031,
0x05500405, 0x050f80ff, 0x073fa009, 0x06000002,
- 0x020ef004, 0x0086087c, 0x04600404, 0x050f80ff,
+ 0x020ef004, 0x0186088d, 0x04600404, 0x050f80ff,
0x012fa809, 0x0079fe01, 0x0700ffff, 0x055c0400,
- 0x05810882, 0x01400405, 0x070050ff, 0x057de0ff,
- 0x06000007, 0x0681886e, 0x04004051, 0x07c00000,
+ 0x05810893, 0x01400405, 0x070050ff, 0x057de0ff,
+ 0x06000007, 0x0681887f, 0x04004051, 0x07c00000,
0x072d6000, 0x07f00000, 0x07f00000, 0x000110d0,
0x010120d1, 0x062d6001, 0x07f00000, 0x07f00000,
0x020130d0, 0x010140d1, 0x062d6002, 0x010170d4,
0x07f00000, 0x020150d0, 0x030160d1, 0x053fa83a,
0x06000008, 0x07c00000, 0x07600c41, 0x050f80ff,
0x01202003, 0x073fa00a, 0x06000001, 0x07f00000,
- 0x05601041, 0x050f80ff, 0x032fa069, 0x03800066,
- 0xdcdab525, 0x02800004, 0x00000000, 0x00008000,
- 0x0000068c, 0x040f801f, 0x012fa8c9, 0x040f801f,
+ 0x05601041, 0x050f80ff, 0x032fa069, 0x02800068,
+ 0xa009a99e, 0x02800004, 0x00000000, 0x00008000,
+ 0x00000696, 0x040f801f, 0x012fa8c9, 0x040f801f,
0x063fa091, 0x06000010, 0x03200005, 0x07420000,
0x050fb000, 0x040f801f, 0x073fa011, 0x06000038,
0x040f801f, 0x053fa859, 0x0700003a, 0x050fe000,
@@ -30107,15 +15907,15 @@ static const uint32_t isp_2400_multi_risc_code[] = {
0x072e4200, 0x03800014, 0x0291001f, 0x050010c0,
0x04482001, 0x0781811e, 0x06483001, 0x078181a6,
0x02920029, 0x068b0029, 0x008a01ab, 0x050010c0,
- 0x06780001, 0x050007c0, 0x068182fe, 0x06780001,
- 0x0500f800, 0x05818348, 0x0291003e, 0x050fe02b,
- 0x0286003e, 0x03681e1d, 0x03d0002e, 0x0380035c,
+ 0x06780001, 0x050007c0, 0x05818305, 0x06780001,
+ 0x0500f800, 0x0481834f, 0x0291003e, 0x050fe02b,
+ 0x0286003e, 0x03681e1d, 0x03d0002e, 0x03800363,
0x0280003e, 0x0280003e, 0x0280003e, 0x0280003e,
- 0x0280038a, 0x0280003e, 0x0280003e, 0x0380039f,
+ 0x02800391, 0x0280003e, 0x0280003e, 0x038003a6,
0x0280003e, 0x0280003e, 0x0280003e, 0x0280003e,
0x0280003e, 0x0280003e, 0x0280003e, 0x039200cf,
0x040fe031, 0x0286004a, 0x06000013, 0x050fb000,
- 0x066c0073, 0x048104ae, 0x014920e4, 0x0481804a,
+ 0x066c0073, 0x058104b8, 0x014920e4, 0x0481804a,
0x03400000, 0x076c0a00, 0x05818042, 0x0696004c,
0x03b900f3, 0x05908014, 0x010170e1, 0x07780017,
0x03e00000, 0x068100b5, 0x050010ff, 0x0179fe17,
@@ -30149,12 +15949,12 @@ static const uint32_t isp_2400_multi_risc_code[] = {
0x038000cc, 0x038000cc, 0x03e00000, 0x03800014,
0x059080c3, 0x030160e1, 0x028000ce, 0x059080c6,
0x030150e1, 0x028000ce, 0x059080c9, 0x010140e1,
- 0x028000ce, 0x060fc013, 0x07a00684, 0x03800014,
+ 0x028000ce, 0x060fc013, 0x07a0068e, 0x03800014,
0x014940e4, 0x01a180d2, 0x0280004a, 0x02681e0d,
0x050fb0ff, 0x04600876, 0x050f80ff, 0x053fa809,
0x06000001, 0x05488003, 0x058180e1, 0x0400800d,
0x0120d000, 0x013e4000, 0x05000200, 0x06009076,
- 0x04002075, 0x06a00670, 0x07c00000, 0x072e4800,
+ 0x04002075, 0x06a0067a, 0x07c00000, 0x072e4800,
0x07000012, 0x018680e7, 0x060fc013, 0x07c00000,
0x00012013, 0x0747f000, 0x05600800, 0x050f80ff,
0x012fa839, 0x0249f001, 0x078100f9, 0x01012000,
@@ -30190,333 +15990,335 @@ static const uint32_t isp_2400_multi_risc_code[] = {
0x053fa809, 0x06000001, 0x050fe003, 0x0086016d,
0x0302a003, 0x0660002c, 0x050f80ff, 0x053fa80a,
0x07000009, 0x0180016f, 0x0202a013, 0x02029013,
- 0x0647f020, 0x06486020, 0x07818174, 0x07a0034d,
- 0x00800179, 0x007a0120, 0x04000101, 0x07a0034d,
- 0x0400802c, 0x07a00669, 0x0349a0e4, 0x0581017d,
+ 0x0647f020, 0x06486020, 0x07818174, 0x06a00354,
+ 0x00800179, 0x007a0120, 0x04000101, 0x06a00354,
+ 0x0400802c, 0x06a00673, 0x0349a0e4, 0x0581017d,
0x0421d008, 0x0080012a, 0x02948129, 0x0521d005,
0x0080012a, 0x040fe02c, 0x00860129, 0x0742002b,
0x0660002c, 0x050f80ff, 0x053fa809, 0x06000001,
0x050fe003, 0x0086018f, 0x01022003, 0x0660002c,
0x050f80ff, 0x053fa80a, 0x07000009, 0x00800191,
0x00022013, 0x00021013, 0x0647f020, 0x007a0120,
- 0x04000101, 0x07a0034d, 0x0400802c, 0x07a00669,
+ 0x04000101, 0x06a00354, 0x0400802c, 0x06a00673,
0x02948129, 0x0521d005, 0x0080012a, 0x00800132,
- 0x0647f020, 0x06486020, 0x078181a0, 0x07a0034d,
- 0x00800129, 0x007a0120, 0x04000101, 0x07a0034d,
- 0x0400802c, 0x07a00669, 0x00800129, 0x040fd02c,
- 0x052e4003, 0x00208010, 0x07a00669, 0x00800132,
+ 0x0647f020, 0x06486020, 0x078181a0, 0x06a00354,
+ 0x00800129, 0x007a0120, 0x04000101, 0x06a00354,
+ 0x0400802c, 0x06a00673, 0x00800129, 0x040fd02c,
+ 0x052e4003, 0x00208010, 0x06a00673, 0x00800132,
0x00018098, 0x07480018, 0x068181bc, 0x05481018,
0x068181ba, 0x05482018, 0x078181b8, 0x07483018,
0x068181b6, 0x002fb004, 0x018001bd, 0x012fb003,
0x018001bd, 0x002fb002, 0x018001bd, 0x002fb001,
0x018001bd, 0x012fb000, 0x0179fe78, 0x070000ff,
0x030190ff, 0x00017086, 0x048b01c1, 0x03385000,
- 0x03020000, 0x07780017, 0x00430407, 0x068182a7,
- 0x046c0419, 0x04810246, 0x046c0219, 0x048101cd,
- 0x07219000, 0x0080022a, 0x07219000, 0x07483017,
- 0x05810230, 0x05482017, 0x04810237, 0x0448b075,
- 0x0681822a, 0x04601676, 0x050f80ff, 0x073fa022,
+ 0x03020000, 0x07780017, 0x00430407, 0x068182ae,
+ 0x046c0419, 0x0581024d, 0x046c0219, 0x048101cd,
+ 0x07219000, 0x00800231, 0x07219000, 0x07483017,
+ 0x04810237, 0x05482017, 0x0481023e, 0x0448b075,
+ 0x06818231, 0x04601676, 0x050f80ff, 0x073fa022,
0x0600003e, 0x06000080, 0x05001081, 0x05002082,
- 0x06003083, 0x05004084, 0x06601e76, 0x050f80ff,
- 0x022fa02a, 0x04487075, 0x04810229, 0x06604476,
- 0x050f80ff, 0x032fa009, 0x03680600, 0x056c02ff,
- 0x06818223, 0x07000090, 0x074b0000, 0x050fe000,
- 0x00860223, 0x0560027b, 0x050f80ff, 0x032fa009,
- 0x07f00000, 0x05600e00, 0x050f80ff, 0x032fa009,
- 0x07f00000, 0x074b0000, 0x070ff08d, 0x0179feff,
- 0x070000ff, 0x055c0400, 0x04810223, 0x070ff017,
- 0x037a00ff, 0x05000400, 0x010170ff, 0x04603e76,
- 0x050f80ff, 0x034a8400, 0x034a8800, 0x05780100,
- 0x070000ff, 0x055a0400, 0x074b0a00, 0x077bff00,
- 0x070000ff, 0x032fa00a, 0x07f00000, 0x06603c76,
+ 0x06003083, 0x00683e75, 0x076c0aff, 0x078181e4,
+ 0x05004084, 0x06601e76, 0x050f80ff, 0x022fa02a,
+ 0x018001e7, 0x06601e76, 0x050f80ff, 0x032fa022,
+ 0x04487075, 0x05810230, 0x06604476, 0x050f80ff,
+ 0x032fa009, 0x03680600, 0x056c02ff, 0x0681822a,
+ 0x07000090, 0x074b0000, 0x050fe000, 0x0086022a,
+ 0x0560027b, 0x050f80ff, 0x032fa009, 0x07f00000,
+ 0x05600e00, 0x050f80ff, 0x032fa009, 0x07f00000,
+ 0x074b0000, 0x070ff08d, 0x0179feff, 0x070000ff,
+ 0x055c0400, 0x0481022a, 0x070ff017, 0x037a00ff,
+ 0x05000400, 0x010170ff, 0x04603e76, 0x050f80ff,
+ 0x034a8400, 0x034a8800, 0x05780100, 0x070000ff,
+ 0x055a0400, 0x074b0a00, 0x077bff00, 0x070000ff,
+ 0x032fa00a, 0x07f00000, 0x06603c76, 0x050f80ff,
+ 0x07300fff, 0x070fffff, 0x032fa00a, 0x07f00000,
+ 0x06604876, 0x050f80ff, 0x0700008d, 0x017a0100,
+ 0x07ffff00, 0x032fa00a, 0x07f00000, 0x04604a76,
0x050f80ff, 0x07300fff, 0x070fffff, 0x032fa00a,
- 0x07f00000, 0x06604876, 0x050f80ff, 0x0700008d,
- 0x017a0100, 0x07ffff00, 0x032fa00a, 0x07f00000,
- 0x04604a76, 0x050f80ff, 0x07300fff, 0x070fffff,
- 0x032fa00a, 0x07f00000, 0x04604076, 0x050f80ff,
- 0x06000013, 0x032fa00a, 0x0245a075, 0x018002af,
- 0x06603c76, 0x050f80ff, 0x053fa842, 0x06000045,
- 0x058b0227, 0x02085013, 0x07219000, 0x07780078,
- 0x07ffff00, 0x045a0419, 0x010780ff, 0x0484801f,
- 0x0280004a, 0x040fe07f, 0x0186023f, 0x05a0025f,
- 0x0092022a, 0x040fe07f, 0x07a6825f, 0x0080022a,
- 0x0760127b, 0x050f80ff, 0x032fa009, 0x0744f000,
- 0x0760127b, 0x050f80ff, 0x032fa00a, 0x018001d4,
- 0x052e400c, 0x040080fb, 0x046aa108, 0x06009076,
- 0x04002075, 0x06a00670, 0x0080022a, 0x06219001,
- 0x05482017, 0x05810253, 0x048b0249, 0x060ff086,
- 0x0349f0ff, 0x078181c0, 0x07483017, 0x05810250,
- 0x050fd0ff, 0x040fe07f, 0x07a6825f, 0x0080022a,
- 0x05004084, 0x04a002e0, 0x0092022a, 0x070ff07d,
- 0x0450047c, 0x056004ff, 0x050f80ff, 0x032fa009,
- 0x070ff000, 0x00540479, 0x030790ff, 0x00800237,
- 0x04487075, 0x04810267, 0x04605276, 0x050f80ff,
- 0x032fa009, 0x060ff079, 0x01540400, 0x01800269,
- 0x060ff079, 0x0054047a, 0x058202a0, 0x058102a0,
- 0x070ff07d, 0x0450047c, 0x050f80ff, 0x002fa819,
- 0x058b026f, 0x034960e4, 0x05810278, 0x02681e01,
- 0x06818276, 0x03642203, 0x07828278, 0x013e4000,
- 0x07003000, 0x02080001, 0x00081002, 0x01082003,
- 0x058b027b, 0x04487075, 0x05810281, 0x02385001,
- 0x03010000, 0x00800283, 0x03385000, 0x03010000,
- 0x02400019, 0x070ff003, 0x04500479, 0x030790ff,
- 0x0340007e, 0x0642007f, 0x058102a0, 0x070ff07e,
- 0x050f80ff, 0x032fa009, 0x050fe000, 0x0386829f,
- 0x070ff07d, 0x056002ff, 0x050f80ff, 0x032fa009,
- 0x0107d000, 0x008602a1, 0x07600a7d, 0x050f80ff,
- 0x032fa009, 0x03681e00, 0x0550041b, 0x050f80ff,
- 0x032fa009, 0x0107e000, 0x070ff07e, 0x0180028b,
- 0x0307c000, 0x07c00000, 0x052e400c, 0x040080fb,
- 0x046aa108, 0x06009076, 0x04002075, 0x02800670,
- 0x040fd076, 0x050fd017, 0x060ff086, 0x077800ff,
- 0x07000060, 0x037c00ff, 0x07000060, 0x078182a9,
- 0x07780078, 0x07ffff00, 0x045a0419, 0x010780ff,
- 0x04487075, 0x058102ca, 0x07780017, 0x05000400,
- 0x058102ca, 0x04601676, 0x050f80ff, 0x073fa022,
- 0x0600003e, 0x0249a075, 0x078182c3, 0x058b02be,
- 0x06603c76, 0x050f80ff, 0x053fa842, 0x06000045,
- 0x052e400c, 0x040080fb, 0x026b4108, 0x06009076,
- 0x04002075, 0x06a00670, 0x02800029, 0x04601676,
- 0x050f80ff, 0x073fa022, 0x0600003e, 0x052e400c,
- 0x04600876, 0x050f80ff, 0x053fa809, 0x06000001,
- 0x05488003, 0x048102da, 0x0400d0fb, 0x066a810d,
- 0x013e4000, 0x07000300, 0x02800029, 0x040080fb,
- 0x066a8108, 0x06009076, 0x04002075, 0x06a00670,
- 0x02800029, 0x0240007f, 0x0742007e, 0x050f807e,
- 0x032fa009, 0x050fe000, 0x038682fa, 0x070ff07d,
- 0x055c047b, 0x048102ef, 0x0760007d, 0x050f80ff,
- 0x032fa009, 0x050fe000, 0x028682ef, 0x070ff07b,
- 0x0107d0ff, 0x07600a7d, 0x050f80ff, 0x032fa009,
- 0x03681e00, 0x0450041c, 0x0107e0ff, 0x050f80ff,
- 0x032fa009, 0x050fe000, 0x018602fc, 0x0307c000,
- 0x07c00000, 0x040fd076, 0x03800684, 0x010180c0,
- 0x0548e018, 0x05818317, 0x0748f018, 0x04818313,
- 0x03490018, 0x0581830f, 0x01491018, 0x0481830b,
- 0x073c0000, 0x06000040, 0x02200004, 0x0280031a,
- 0x073c0000, 0x06000020, 0x03200003, 0x0280031a,
- 0x073c0000, 0x06000010, 0x02200002, 0x0280031a,
- 0x073c0000, 0x06000008, 0x02200001, 0x0280031a,
- 0x073c0000, 0x06000004, 0x06000013, 0x050fb000,
- 0x040fe076, 0x0286033d, 0x046c0273, 0x04818329,
- 0x0448b075, 0x07810330, 0x06000013, 0x04001013,
- 0x0760127b, 0x050f80ff, 0x032fa012, 0x0046b075,
- 0x03b600e2, 0x02800331, 0x066c0073, 0x0781032e,
- 0x040fd076, 0x07a00684, 0x03800014, 0x040fd076,
- 0x02800331, 0x00452075, 0x00077013, 0x0647f075,
- 0x06486075, 0x04818337, 0x07a00353, 0x0280033d,
- 0x007a0175, 0x04000101, 0x07a00353, 0x04008076,
- 0x0245f008, 0x07a00669, 0x07273000, 0x05600272,
- 0x050f80ff, 0x053fa80a, 0x07000009, 0x0379ff78,
- 0x070000ff, 0x02076013, 0x02075013, 0x0484801f,
- 0x0280004a, 0x070fc0ff, 0x052e400c, 0x00208020,
- 0x07a00669, 0x02800346, 0x06000020, 0x04001016,
- 0x0460082c, 0x050f80ff, 0x032fa012, 0x07c00000,
- 0x06000075, 0x040010a2, 0x044b0801, 0x060ff016,
- 0x065a0001, 0x04600876, 0x050f80ff, 0x032fa012,
- 0x07c00000, 0x040fe02a, 0x02860362, 0x0421d007,
- 0x0202c02a, 0x07a003a6, 0x0380037e, 0x050fe022,
- 0x0286036d, 0x0421d004, 0x0302c022, 0x07a003a6,
- 0x04488020, 0x0781037e, 0x040fd02c, 0x0521d000,
- 0x0202c013, 0x02020013, 0x040fe026, 0x03860384,
- 0x0421d001, 0x0202c026, 0x07a003a6, 0x00683e20,
- 0x070060ff, 0x056c0206, 0x078103d8, 0x056c0406,
- 0x068103ef, 0x076c0606, 0x05810465, 0x04488020,
- 0x04818380, 0x056c1606, 0x04810473, 0x07a00660,
- 0x02800398, 0x040fd02c, 0x0521d000, 0x0202c013,
- 0x02020013, 0x050fe028, 0x02860398, 0x0302c028,
- 0x0421d002, 0x07a003a6, 0x028003ad, 0x040fe02a,
- 0x03860390, 0x0421d007, 0x0202c02a, 0x07a003a6,
- 0x02800397, 0x050fe022, 0x02860398, 0x0421d004,
- 0x0302c022, 0x07a003a6, 0x04488020, 0x0581839a,
- 0x07a00660, 0x0484803e, 0x0280004a, 0x040fd02c,
- 0x0521d000, 0x0202c013, 0x02020013, 0x02800398,
- 0x040fe02a, 0x02860398, 0x0421d007, 0x0202c02a,
- 0x07a003a6, 0x07a00660, 0x02800398, 0x0460082c,
- 0x050f80ff, 0x032fa039, 0x03020000, 0x0102d005,
- 0x01018006, 0x07c00000, 0x0400702c, 0x05a004a6,
- 0x007a0101, 0x07060000, 0x07303000, 0x07008290,
- 0x07600018, 0x050f80ff, 0x053fa809, 0x07000003,
- 0x0448e007, 0x058183bb, 0x06006013, 0x028003c2,
- 0x02400010, 0x078103bb, 0x06006010, 0x0460342c,
- 0x050f80ff, 0x073fa00a, 0x07000003, 0x050f801e,
- 0x032fa03a, 0x063aa020, 0x06000002, 0x013e4000,
- 0x07000030, 0x029803c8, 0x070ff0f6, 0x036830ff,
- 0x058183c9, 0x070f001e, 0x0760122d, 0x050f10ff,
- 0x063f3c08, 0x0600000d, 0x013e4000, 0x06000020,
- 0x040f801a, 0x0320000a, 0x022017d0, 0x032fa012,
- 0x02800398, 0x04007013, 0x05a004a6, 0x007a0101,
- 0x07050000, 0x07303000, 0x07008890, 0x074d0005,
- 0x06006013, 0x050f801e, 0x032fa03a, 0x07f00000,
- 0x05601c2d, 0x050f80ff, 0x022fa019, 0x04001002,
- 0x04002013, 0x040f801f, 0x022fa01a, 0x073aa00c,
- 0x06000002, 0x07300c03, 0x0600000d, 0x01800493,
- 0x04007013, 0x05a004a6, 0x007a0101, 0x03070000,
- 0x04602a2c, 0x050f80ff, 0x073fa009, 0x06000004,
- 0x02499008, 0x078103fc, 0x07303000, 0x07008890,
- 0x028003fe, 0x07303000, 0x04008980, 0x05007003,
- 0x074d0005, 0x06006013, 0x050f801e, 0x032fa03a,
- 0x07f00000, 0x0560162d, 0x050f80ff, 0x032fa021,
- 0x07f00000, 0x064b0002, 0x02499008, 0x0581040c,
- 0x0644c002, 0x054b0400, 0x050040ff, 0x06698104,
- 0x07818421, 0x06000013, 0x04001013, 0x04780102,
- 0x06000010, 0x06003013, 0x04004013, 0x06005013,
- 0x06006013, 0x04007013, 0x00644015, 0x0582041d,
- 0x04448002, 0x02205008, 0x040f801f, 0x032fa042,
- 0x04008015, 0x0080045d, 0x046c8004, 0x0681842f,
- 0x01208018, 0x06780002, 0x07000003, 0x06818432,
- 0x06003001, 0x06000013, 0x04001013, 0x04004013,
- 0x06005013, 0x040f801f, 0x022fa032, 0x0080045d,
- 0x040fd02c, 0x07a00684, 0x03800014, 0x0379ff03,
- 0x070000ff, 0x04488002, 0x05810439, 0x070ff003,
- 0x04500408, 0x050080ff, 0x0379ff00, 0x070000ff,
- 0x06489002, 0x04810440, 0x070ff000, 0x04500408,
- 0x050080ff, 0x07005003, 0x05004000, 0x06003001,
- 0x06000013, 0x04001013, 0x040f801f, 0x022fa032,
- 0x07f00000, 0x07601e2d, 0x050f80ff, 0x022fa031,
- 0x07f00000, 0x06600c1f, 0x050f80ff, 0x022fa032,
- 0x02680608, 0x0481045d, 0x016408ff, 0x057dfeff,
- 0x07ffffff, 0x034000ff, 0x045a0407, 0x070000ff,
- 0x0760061e, 0x050f80ff, 0x032fa00a, 0x07f00000,
- 0x06600908, 0x0669f908, 0x027a0008, 0x06000020,
- 0x070aa0ff, 0x024a2408, 0x037a00ff, 0x060000dc,
- 0x070000ff, 0x01800493, 0x04007013, 0x05a004a6,
- 0x007a0101, 0x07030000, 0x07303000, 0x07008190,
- 0x06006013, 0x050f801e, 0x032fa03a, 0x073aa000,
- 0x06000002, 0x07300c00, 0x07000005, 0x01800493,
- 0x04007013, 0x05a004a6, 0x007a0101, 0x07810000,
- 0x07303000, 0x07000090, 0x06006013, 0x04600e2c,
- 0x050f80ff, 0x053fa809, 0x07000003, 0x04780107,
- 0x07ffff00, 0x007c0107, 0x07000500, 0x06818486,
- 0x07303000, 0x05000890, 0x074d0005, 0x04602a2c,
- 0x050f80ff, 0x053fa809, 0x07000003, 0x0049d007,
- 0x0581048d, 0x02206001, 0x050f801e, 0x032fa03a,
- 0x073aa000, 0x06000002, 0x07300c00, 0x07000005,
- 0x013e4000, 0x07000030, 0x01980495, 0x070ff0f6,
- 0x036830ff, 0x07818496, 0x070f001e, 0x040f101f,
- 0x070f3000, 0x013e4000, 0x06000020, 0x040f801a,
- 0x0320000a, 0x022017d0, 0x032fa012, 0x02800398,
- 0x03200000, 0x06006076, 0x008004a8, 0x03200011,
- 0x0600602c, 0x07a0058e, 0x05600406, 0x050f80ff,
- 0x053fa809, 0x06000002, 0x07c00000, 0x02076031,
- 0x04600876, 0x050f80ff, 0x032fa039, 0x03075000,
- 0x0107b005, 0x01018006, 0x06600076, 0x050020ff,
- 0x050f80ff, 0x032fa011, 0x05031000, 0x038684c5,
- 0x04031001, 0x038684c3, 0x06030013, 0x07601818,
- 0x050f80ff, 0x053fa80a, 0x07000009, 0x008004cb,
- 0x06030001, 0x008004cb, 0x040fe001, 0x018604be,
- 0x07600030, 0x050f80ff, 0x012fa80a, 0x06030001,
- 0x06000013, 0x04001013, 0x040f8002, 0x032fa012,
- 0x06273001, 0x0448b075, 0x068184d6, 0x06602276,
- 0x050f80ff, 0x053fa811, 0x0700003c, 0x0179fe78,
- 0x070000ff, 0x030190ff, 0x038684de, 0x04a004f2,
- 0x00078019, 0x009204f1, 0x03800587, 0x040fd076,
- 0x040fd019, 0x04600276, 0x050020ff, 0x050f80ff,
- 0x032fa009, 0x040f8002, 0x053fa80a, 0x07000009,
- 0x050fe000, 0x038684ee, 0x07601818, 0x050f80ff,
- 0x053fa80a, 0x07000009, 0x008004ef, 0x05a00114,
- 0x07273000, 0x02076013, 0x0280004a, 0x048b04f2,
- 0x03385000, 0x07030000, 0x05600818, 0x050f80ff,
- 0x032fa009, 0x07f00000, 0x054b0400, 0x0308a0ff,
- 0x04487075, 0x06810515, 0x06604476, 0x050f80ff,
- 0x012fa811, 0x00680701, 0x046c0201, 0x04818515,
- 0x0279ff02, 0x070000ff, 0x0379ff00, 0x070000ff,
- 0x05001000, 0x060ff002, 0x01540400, 0x06820513,
- 0x04001002, 0x060ff001, 0x04500402, 0x070030ff,
- 0x01540400, 0x06820513, 0x05001003, 0x0581850c,
- 0x00088001, 0x03800518, 0x0179fe00, 0x070000ff,
- 0x010880ff, 0x0448b075, 0x0681052f, 0x0560167b,
- 0x050f80ff, 0x002fa819, 0x02080002, 0x01081003,
- 0x064b0001, 0x00082001, 0x034960e4, 0x06810529,
- 0x02681e02, 0x05818527, 0x02642201, 0x04828529,
- 0x013e4000, 0x07003000, 0x02083001, 0x02079001,
- 0x0207a001, 0x00084013, 0x0207f013, 0x0280057f,
- 0x06485075, 0x07810556, 0x02465075, 0x04601676,
- 0x050f80ff, 0x073fa021, 0x0600003e, 0x070ff07d,
- 0x0450047c, 0x050f80ff, 0x002fa819, 0x078b053a,
- 0x034960e4, 0x06810543, 0x02681e01, 0x05818541,
- 0x03642203, 0x04828543, 0x013e4000, 0x07003000,
- 0x02080001, 0x00081002, 0x01082003, 0x03079003,
- 0x04487075, 0x0781054e, 0x04605276, 0x050f80ff,
- 0x032fa009, 0x03083000, 0x0280054f, 0x0208307a,
- 0x0340007e, 0x0642007f, 0x0781056f, 0x070ff07e,
- 0x05a0028b, 0x0192856f, 0x02800586, 0x078b0556,
- 0x04601676, 0x050f80ff, 0x073fa041, 0x0600003e,
- 0x07f00000, 0x04487075, 0x06810562, 0x04605276,
- 0x050f80ff, 0x032fa009, 0x03083000, 0x034960e4,
- 0x0781056f, 0x014980e4, 0x0581856f, 0x06601e76,
- 0x050f80ff, 0x022fa019, 0x03681e00, 0x0481856d,
- 0x02642202, 0x0582856f, 0x013e4000, 0x07003000,
- 0x04602676, 0x050f80ff, 0x073fa009, 0x06000007,
- 0x0008400e, 0x04487075, 0x0681057f, 0x068b0576,
- 0x06603c76, 0x050f80ff, 0x053fa841, 0x06000045,
- 0x078b057b, 0x02385001, 0x03010000, 0x03800582,
- 0x068b057f, 0x03385000, 0x03010000, 0x06219001,
- 0x040fe07f, 0x02860586, 0x0180025f, 0x07c00000,
- 0x00683e75, 0x0681058c, 0x0448d075, 0x068105c1,
- 0x038005f9, 0x06a00664, 0x008004f1, 0x0197859c,
- 0x07602418, 0x050f80ff, 0x012fa809, 0x06780001,
- 0x070000ff, 0x075a0000, 0x05602618, 0x050f80ff,
- 0x012fa809, 0x060ff001, 0x0569feff, 0x054b08ff,
- 0x075a0000, 0x05600418, 0x050f80ff, 0x012fa809,
- 0x040fe007, 0x018685a3, 0x01204000, 0x038005b8,
- 0x05600e06, 0x050f80ff, 0x073fa009, 0x06000002,
- 0x07f00000, 0x064d0004, 0x00700104, 0x03010000,
- 0x06780004, 0x07ff0000, 0x076c00ff, 0x058185b1,
- 0x00700104, 0x03010000, 0x064d0004, 0x05600e06,
- 0x050f80ff, 0x073fa00a, 0x06000002, 0x07f00000,
- 0x044b0804, 0x0279ff01, 0x0700ffff, 0x05602618,
- 0x050f80ff, 0x073fa009, 0x06000001, 0x0279ff02,
- 0x0700ffff, 0x07c00000, 0x04007076, 0x0448b075,
- 0x078105db, 0x03200011, 0x06006076, 0x04a004a8,
- 0x007a0101, 0x07060000, 0x07303000, 0x07008290,
- 0x07600018, 0x050f80ff, 0x053fa809, 0x07000003,
- 0x0448e007, 0x048185d3, 0x06006013, 0x028005f4,
- 0x02400010, 0x068105d3, 0x06006010, 0x04603476,
- 0x050f80ff, 0x073fa00a, 0x07000003, 0x028005f4,
- 0x0600007a, 0x02493075, 0x058185e4, 0x04602c76,
- 0x050f80ff, 0x032fa009, 0x060ff07a, 0x05500400,
- 0x070000ff, 0x06473075, 0x04602c76, 0x050f80ff,
- 0x032fa00a, 0x05a004a3, 0x007a0101, 0x03010000,
- 0x06303008, 0x05008000, 0x0049b075, 0x078105f3,
+ 0x07f00000, 0x04604076, 0x050f80ff, 0x06000013,
+ 0x032fa00a, 0x0245a075, 0x008002b6, 0x06603c76,
+ 0x050f80ff, 0x053fa842, 0x06000045, 0x058b022e,
+ 0x02085013, 0x07219000, 0x07780078, 0x07ffff00,
+ 0x045a0419, 0x010780ff, 0x0484801f, 0x0280004a,
+ 0x040fe07f, 0x00860246, 0x05a00266, 0x00920231,
+ 0x040fe07f, 0x07a68266, 0x00800231, 0x0760127b,
+ 0x050f80ff, 0x032fa009, 0x0744f000, 0x0760127b,
+ 0x050f80ff, 0x032fa00a, 0x018001d4, 0x052e400c,
+ 0x040080fb, 0x046aa108, 0x06009076, 0x04002075,
+ 0x06a0067a, 0x00800231, 0x06219001, 0x05482017,
+ 0x0581025a, 0x058b0250, 0x060ff086, 0x0349f0ff,
+ 0x078181c0, 0x07483017, 0x04810257, 0x050fd0ff,
+ 0x040fe07f, 0x07a68266, 0x00800231, 0x05004084,
+ 0x05a002e7, 0x00920231, 0x070ff07d, 0x0450047c,
+ 0x056004ff, 0x050f80ff, 0x032fa009, 0x070ff000,
+ 0x00540479, 0x030790ff, 0x0080023e, 0x04487075,
+ 0x0481026e, 0x04605276, 0x050f80ff, 0x032fa009,
+ 0x060ff079, 0x01540400, 0x00800270, 0x060ff079,
+ 0x0054047a, 0x048202a7, 0x048102a7, 0x070ff07d,
+ 0x0450047c, 0x050f80ff, 0x002fa819, 0x048b0276,
+ 0x034960e4, 0x0481027f, 0x02681e01, 0x0781827d,
+ 0x03642203, 0x0682827f, 0x013e4000, 0x07003000,
+ 0x02080001, 0x00081002, 0x01082003, 0x058b0282,
+ 0x04487075, 0x05810288, 0x02385001, 0x03010000,
+ 0x0080028a, 0x03385000, 0x03010000, 0x02400019,
+ 0x070ff003, 0x04500479, 0x030790ff, 0x0340007e,
+ 0x0642007f, 0x048102a7, 0x070ff07e, 0x050f80ff,
+ 0x032fa009, 0x050fe000, 0x038682a6, 0x070ff07d,
+ 0x056002ff, 0x050f80ff, 0x032fa009, 0x0107d000,
+ 0x008602a8, 0x07600a7d, 0x050f80ff, 0x032fa009,
+ 0x03681e00, 0x0550041b, 0x050f80ff, 0x032fa009,
+ 0x0107e000, 0x070ff07e, 0x00800292, 0x0307c000,
+ 0x07c00000, 0x052e400c, 0x040080fb, 0x046aa108,
+ 0x06009076, 0x04002075, 0x0280067a, 0x040fd076,
+ 0x050fd017, 0x060ff086, 0x077800ff, 0x07000060,
+ 0x037c00ff, 0x07000060, 0x068182b0, 0x07780078,
+ 0x07ffff00, 0x045a0419, 0x010780ff, 0x04487075,
+ 0x058102d1, 0x07780017, 0x02430007, 0x078182d1,
+ 0x04601676, 0x050f80ff, 0x073fa022, 0x0600003e,
+ 0x0249a075, 0x078182ca, 0x058b02c5, 0x06603c76,
+ 0x050f80ff, 0x053fa842, 0x06000045, 0x052e400c,
+ 0x040080fb, 0x026b4108, 0x06009076, 0x04002075,
+ 0x06a0067a, 0x02800029, 0x04601676, 0x050f80ff,
+ 0x073fa022, 0x0600003e, 0x052e400c, 0x04600876,
+ 0x050f80ff, 0x053fa809, 0x06000001, 0x05488003,
+ 0x058102e1, 0x0400d0fb, 0x066a810d, 0x013e4000,
+ 0x07000300, 0x02800029, 0x040080fb, 0x066a8108,
+ 0x06009076, 0x04002075, 0x06a0067a, 0x02800029,
+ 0x0240007f, 0x0742007e, 0x050f807e, 0x032fa009,
+ 0x050fe000, 0x00868301, 0x070ff07d, 0x055c047b,
+ 0x058102f6, 0x0760007d, 0x050f80ff, 0x032fa009,
+ 0x050fe000, 0x038682f6, 0x070ff07b, 0x0107d0ff,
+ 0x07600a7d, 0x050f80ff, 0x032fa009, 0x03681e00,
+ 0x0450041c, 0x0107e0ff, 0x050f80ff, 0x032fa009,
+ 0x050fe000, 0x03860303, 0x0307c000, 0x07c00000,
+ 0x040fd076, 0x0380068e, 0x010180c0, 0x0548e018,
+ 0x0581831e, 0x0748f018, 0x0481831a, 0x03490018,
+ 0x04818316, 0x01491018, 0x05818312, 0x073c0000,
+ 0x06000040, 0x02200004, 0x03800321, 0x073c0000,
+ 0x06000020, 0x03200003, 0x03800321, 0x073c0000,
+ 0x06000010, 0x02200002, 0x03800321, 0x073c0000,
+ 0x06000008, 0x02200001, 0x03800321, 0x073c0000,
+ 0x06000004, 0x06000013, 0x050fb000, 0x040fe076,
+ 0x03860344, 0x046c0273, 0x05818330, 0x0448b075,
+ 0x06810337, 0x06000013, 0x04001013, 0x0760127b,
+ 0x050f80ff, 0x032fa012, 0x0046b075, 0x03b600e2,
+ 0x02800338, 0x066c0073, 0x07810335, 0x040fd076,
+ 0x07a0068e, 0x03800014, 0x040fd076, 0x02800338,
+ 0x00452075, 0x00077013, 0x0647f075, 0x06486075,
+ 0x0481833e, 0x07a0035a, 0x03800344, 0x007a0175,
+ 0x04000101, 0x07a0035a, 0x04008076, 0x0245f008,
+ 0x06a00673, 0x07273000, 0x05600272, 0x050f80ff,
+ 0x053fa80a, 0x07000009, 0x0379ff78, 0x070000ff,
+ 0x02076013, 0x02075013, 0x0484801f, 0x0280004a,
+ 0x070fc0ff, 0x052e400c, 0x00208020, 0x06a00673,
+ 0x0380034d, 0x06000020, 0x04001016, 0x0460082c,
+ 0x050f80ff, 0x032fa012, 0x07c00000, 0x06000075,
+ 0x040010a2, 0x044b0801, 0x060ff016, 0x065a0001,
+ 0x04600876, 0x050f80ff, 0x032fa012, 0x07c00000,
+ 0x040fe02a, 0x03860369, 0x0421d007, 0x0202c02a,
+ 0x06a003ad, 0x02800385, 0x050fe022, 0x03860374,
+ 0x0421d004, 0x0302c022, 0x06a003ad, 0x04488020,
+ 0x06810385, 0x040fd02c, 0x0521d000, 0x0202c013,
+ 0x02020013, 0x040fe026, 0x0386038b, 0x0421d001,
+ 0x0202c026, 0x06a003ad, 0x00683e20, 0x070060ff,
+ 0x056c0206, 0x068103df, 0x056c0406, 0x078103f9,
+ 0x076c0606, 0x0581046f, 0x04488020, 0x05818387,
+ 0x056c1606, 0x0581047d, 0x07a0066a, 0x0380039f,
+ 0x040fd02c, 0x0521d000, 0x0202c013, 0x02020013,
+ 0x050fe028, 0x0386039f, 0x0302c028, 0x0421d002,
+ 0x06a003ad, 0x038003b4, 0x040fe02a, 0x02860397,
+ 0x0421d007, 0x0202c02a, 0x06a003ad, 0x0280039e,
+ 0x050fe022, 0x0386039f, 0x0421d004, 0x0302c022,
+ 0x06a003ad, 0x04488020, 0x048183a1, 0x07a0066a,
+ 0x0484803e, 0x0280004a, 0x040fd02c, 0x0521d000,
+ 0x0202c013, 0x02020013, 0x0380039f, 0x040fe02a,
+ 0x0386039f, 0x0421d007, 0x0202c02a, 0x06a003ad,
+ 0x07a0066a, 0x0380039f, 0x0460082c, 0x050f80ff,
+ 0x032fa039, 0x03020000, 0x0102d005, 0x01018006,
+ 0x07c00000, 0x0400702c, 0x04a004b0, 0x007a0101,
+ 0x07060000, 0x07303000, 0x07008290, 0x07600018,
+ 0x050f80ff, 0x053fa809, 0x07000003, 0x0448e007,
+ 0x048183c2, 0x06006013, 0x038003c9, 0x02400010,
+ 0x068103c2, 0x06006010, 0x0460342c, 0x050f80ff,
+ 0x073fa00a, 0x07000003, 0x050f801e, 0x032fa03a,
+ 0x063aa020, 0x06000002, 0x013e4000, 0x07000030,
+ 0x039803cf, 0x070ff0f6, 0x036830ff, 0x048183d0,
+ 0x070f001e, 0x0760122d, 0x050f10ff, 0x063f3c08,
+ 0x0600000d, 0x013e4000, 0x06000020, 0x040f801a,
+ 0x0320000a, 0x022017d0, 0x032fa012, 0x0380039f,
+ 0x04007013, 0x04a004b0, 0x007a0101, 0x07050000,
+ 0x07303000, 0x07008890, 0x074d0005, 0x06006013,
+ 0x050f801e, 0x032fa03a, 0x07f00000, 0x05601c2d,
+ 0x050f80ff, 0x022fa019, 0x04001002, 0x04002013,
+ 0x0460262c, 0x050f80ff, 0x032fa00a, 0x040f801f,
+ 0x022fa01a, 0x073aa00c, 0x06000002, 0x07300c03,
+ 0x0600000d, 0x0080049d, 0x04007013, 0x04a004b0,
+ 0x007a0101, 0x03070000, 0x04602a2c, 0x050f80ff,
+ 0x073fa009, 0x06000004, 0x02499008, 0x05810406,
+ 0x07303000, 0x07008890, 0x00800408, 0x07303000,
+ 0x04008980, 0x05007003, 0x074d0005, 0x06006013,
+ 0x050f801e, 0x032fa03a, 0x07f00000, 0x0560162d,
+ 0x050f80ff, 0x032fa021, 0x07f00000, 0x064b0002,
+ 0x02499008, 0x04810416, 0x0644c002, 0x054b0400,
+ 0x050040ff, 0x06698104, 0x0781842b, 0x06000013,
+ 0x04001013, 0x04780102, 0x06000010, 0x06003013,
+ 0x04004013, 0x06005013, 0x06006013, 0x04007013,
+ 0x00644015, 0x05820427, 0x04448002, 0x02205008,
+ 0x040f801f, 0x032fa042, 0x04008015, 0x00800467,
+ 0x046c8004, 0x07818439, 0x01208018, 0x06780002,
+ 0x07000003, 0x0781843c, 0x06003001, 0x06000013,
+ 0x04001013, 0x04004013, 0x06005013, 0x040f801f,
+ 0x022fa032, 0x00800467, 0x040fd02c, 0x07a0068e,
+ 0x03800014, 0x0379ff03, 0x070000ff, 0x04488002,
+ 0x04810443, 0x070ff003, 0x04500408, 0x050080ff,
+ 0x0379ff00, 0x070000ff, 0x06489002, 0x0481044a,
+ 0x070ff000, 0x04500408, 0x050080ff, 0x07005003,
+ 0x05004000, 0x06003001, 0x06000013, 0x04001013,
+ 0x040f801f, 0x022fa032, 0x07f00000, 0x07601e2d,
+ 0x050f80ff, 0x022fa031, 0x07f00000, 0x06600c1f,
+ 0x050f80ff, 0x022fa032, 0x02680608, 0x04810467,
+ 0x016408ff, 0x057dfeff, 0x07ffffff, 0x034000ff,
+ 0x045a0407, 0x070000ff, 0x0760061e, 0x050f80ff,
+ 0x032fa00a, 0x07f00000, 0x06600908, 0x0669f908,
+ 0x027a0008, 0x06000020, 0x070aa0ff, 0x024a2408,
+ 0x037a00ff, 0x060000dc, 0x070000ff, 0x0080049d,
+ 0x04007013, 0x04a004b0, 0x007a0101, 0x07030000,
+ 0x07303000, 0x07008190, 0x06006013, 0x050f801e,
+ 0x032fa03a, 0x073aa000, 0x06000002, 0x07300c00,
+ 0x07000005, 0x0080049d, 0x04007013, 0x04a004b0,
+ 0x007a0101, 0x07810000, 0x07303000, 0x07000090,
+ 0x06006013, 0x04600e2c, 0x050f80ff, 0x053fa809,
+ 0x07000003, 0x04780107, 0x07ffff00, 0x007c0107,
+ 0x07000500, 0x07818490, 0x07303000, 0x05000890,
+ 0x074d0005, 0x04602a2c, 0x050f80ff, 0x053fa809,
+ 0x07000003, 0x0049d007, 0x04810497, 0x02206001,
+ 0x050f801e, 0x032fa03a, 0x073aa000, 0x06000002,
+ 0x07300c00, 0x07000005, 0x013e4000, 0x07000030,
+ 0x0198049f, 0x070ff0f6, 0x036830ff, 0x078184a0,
+ 0x070f001e, 0x040f101f, 0x070f3000, 0x013e4000,
+ 0x06000020, 0x040f801a, 0x0320000a, 0x022017d0,
+ 0x032fa012, 0x0380039f, 0x03200000, 0x06006076,
+ 0x018004b2, 0x03200011, 0x0600602c, 0x06a00598,
+ 0x05600406, 0x050f80ff, 0x053fa809, 0x06000002,
+ 0x07c00000, 0x02076031, 0x04600876, 0x050f80ff,
+ 0x032fa039, 0x03075000, 0x0107b005, 0x01018006,
+ 0x06600076, 0x050020ff, 0x050f80ff, 0x032fa011,
+ 0x05031000, 0x038684cf, 0x04031001, 0x028684cd,
+ 0x06030013, 0x07601818, 0x050f80ff, 0x053fa80a,
+ 0x07000009, 0x008004d5, 0x06030001, 0x008004d5,
+ 0x040fe001, 0x008604c8, 0x07600030, 0x050f80ff,
+ 0x012fa80a, 0x06030001, 0x06000013, 0x04001013,
+ 0x040f8002, 0x032fa012, 0x06273001, 0x0448b075,
+ 0x068184e0, 0x06602276, 0x050f80ff, 0x053fa811,
+ 0x0700003c, 0x0179fe78, 0x070000ff, 0x030190ff,
+ 0x038684e8, 0x05a004fc, 0x00078019, 0x009204fb,
+ 0x02800591, 0x040fd076, 0x040fd019, 0x04600276,
+ 0x050020ff, 0x050f80ff, 0x032fa009, 0x040f8002,
+ 0x053fa80a, 0x07000009, 0x050fe000, 0x028684f8,
+ 0x07601818, 0x050f80ff, 0x053fa80a, 0x07000009,
+ 0x018004f9, 0x05a00114, 0x07273000, 0x02076013,
+ 0x0280004a, 0x058b04fc, 0x03385000, 0x07030000,
+ 0x05600818, 0x050f80ff, 0x032fa009, 0x07f00000,
+ 0x054b0400, 0x0308a0ff, 0x04487075, 0x0681051f,
+ 0x06604476, 0x050f80ff, 0x012fa811, 0x00680701,
+ 0x046c0201, 0x0481851f, 0x0279ff02, 0x070000ff,
+ 0x0379ff00, 0x070000ff, 0x05001000, 0x060ff002,
+ 0x01540400, 0x0782051d, 0x04001002, 0x060ff001,
+ 0x04500402, 0x070030ff, 0x01540400, 0x0782051d,
+ 0x05001003, 0x04818516, 0x00088001, 0x03800522,
+ 0x0179fe00, 0x070000ff, 0x010880ff, 0x0448b075,
+ 0x07810539, 0x0560167b, 0x050f80ff, 0x002fa819,
+ 0x02080002, 0x01081003, 0x064b0001, 0x00082001,
+ 0x034960e4, 0x07810533, 0x02681e02, 0x04818531,
+ 0x02642201, 0x05828533, 0x013e4000, 0x07003000,
+ 0x02083001, 0x02079001, 0x0207a001, 0x00084013,
+ 0x0207f013, 0x02800589, 0x06485075, 0x07810560,
+ 0x02465075, 0x04601676, 0x050f80ff, 0x073fa021,
+ 0x0600003e, 0x070ff07d, 0x0450047c, 0x050f80ff,
+ 0x002fa819, 0x078b0544, 0x034960e4, 0x0781054d,
+ 0x02681e01, 0x0581854b, 0x03642203, 0x0582854d,
+ 0x013e4000, 0x07003000, 0x02080001, 0x00081002,
+ 0x01082003, 0x03079003, 0x04487075, 0x06810558,
+ 0x04605276, 0x050f80ff, 0x032fa009, 0x03083000,
+ 0x03800559, 0x0208307a, 0x0340007e, 0x0642007f,
+ 0x06810579, 0x070ff07e, 0x04a00292, 0x00928579,
+ 0x03800590, 0x078b0560, 0x04601676, 0x050f80ff,
+ 0x073fa041, 0x0600003e, 0x07f00000, 0x04487075,
+ 0x0781056c, 0x04605276, 0x050f80ff, 0x032fa009,
+ 0x03083000, 0x034960e4, 0x06810579, 0x014980e4,
+ 0x04818579, 0x06601e76, 0x050f80ff, 0x022fa019,
+ 0x03681e00, 0x05818577, 0x02642202, 0x04828579,
+ 0x013e4000, 0x07003000, 0x04602676, 0x050f80ff,
+ 0x073fa009, 0x06000007, 0x0008400e, 0x04487075,
+ 0x06810589, 0x068b0580, 0x06603c76, 0x050f80ff,
+ 0x053fa841, 0x06000045, 0x068b0585, 0x02385001,
+ 0x03010000, 0x0280058c, 0x068b0589, 0x03385000,
+ 0x03010000, 0x06219001, 0x040fe07f, 0x03860590,
+ 0x01800266, 0x07c00000, 0x00683e75, 0x07810596,
+ 0x0448d075, 0x068105cb, 0x03800603, 0x06a0066e,
+ 0x008004fb, 0x019785a6, 0x07602418, 0x050f80ff,
+ 0x012fa809, 0x06780001, 0x070000ff, 0x075a0000,
+ 0x05602618, 0x050f80ff, 0x012fa809, 0x060ff001,
+ 0x0569feff, 0x054b08ff, 0x075a0000, 0x05600418,
+ 0x050f80ff, 0x012fa809, 0x040fe007, 0x008685ad,
+ 0x01204000, 0x028005c2, 0x05600e06, 0x050f80ff,
+ 0x073fa009, 0x06000002, 0x07f00000, 0x064d0004,
+ 0x00700104, 0x03010000, 0x06780004, 0x07ff0000,
+ 0x076c00ff, 0x058185bb, 0x00700104, 0x03010000,
+ 0x064d0004, 0x05600e06, 0x050f80ff, 0x073fa00a,
+ 0x06000002, 0x07f00000, 0x044b0804, 0x0279ff01,
+ 0x0700ffff, 0x05602618, 0x050f80ff, 0x073fa009,
+ 0x06000001, 0x0279ff02, 0x0700ffff, 0x07c00000,
+ 0x04007076, 0x0448b075, 0x068105e5, 0x03200011,
+ 0x06006076, 0x05a004b2, 0x007a0101, 0x07060000,
+ 0x07303000, 0x07008290, 0x07600018, 0x050f80ff,
+ 0x053fa809, 0x07000003, 0x0448e007, 0x058185dd,
+ 0x06006013, 0x028005fe, 0x02400010, 0x078105dd,
+ 0x06006010, 0x04603476, 0x050f80ff, 0x073fa00a,
+ 0x07000003, 0x028005fe, 0x0600007a, 0x02493075,
+ 0x058185ee, 0x04602c76, 0x050f80ff, 0x032fa009,
+ 0x060ff07a, 0x05500400, 0x070000ff, 0x06473075,
+ 0x04602c76, 0x050f80ff, 0x032fa00a, 0x04a004ad,
+ 0x007a0101, 0x03010000, 0x06303008, 0x05008000,
+ 0x0049b075, 0x068105fd, 0x06603676, 0x050f80ff,
+ 0x073fa009, 0x06000002, 0x0600600e, 0x050f8074,
+ 0x032fa03a, 0x053079a0, 0x0700000c, 0x0280064a,
+ 0x00683e75, 0x076c0aff, 0x06810620, 0x04007013,
+ 0x03200011, 0x06006076, 0x05a004b2, 0x007a0101,
+ 0x03070000, 0x04602a76, 0x050f80ff, 0x053fa809,
+ 0x06000001, 0x03499003, 0x07810617, 0x07303000,
+ 0x07008890, 0x053079a0, 0x0700000c, 0x0380061b,
+ 0x07303000, 0x04008980, 0x04307920, 0x0700000c,
+ 0x074d0005, 0x06006013, 0x050f8074, 0x032fa03a,
+ 0x0280064a, 0x04602c76, 0x050f80ff, 0x032fa009,
+ 0x060ff07a, 0x05500400, 0x070000ff, 0x06473075,
+ 0x04602c76, 0x050f80ff, 0x032fa00a, 0x04007076,
+ 0x04a004ad, 0x007a0101, 0x03010000, 0x06303008,
+ 0x07008800, 0x074d0005, 0x0049b075, 0x06810638,
0x06603676, 0x050f80ff, 0x073fa009, 0x06000002,
- 0x0600600e, 0x050f8074, 0x032fa03a, 0x053079a0,
- 0x0700000c, 0x02800640, 0x00683e75, 0x076c0aff,
- 0x06810616, 0x04007013, 0x03200011, 0x06006076,
- 0x04a004a8, 0x007a0101, 0x03070000, 0x04602a76,
- 0x050f80ff, 0x053fa809, 0x06000001, 0x03499003,
- 0x0681060d, 0x07303000, 0x07008890, 0x053079a0,
- 0x0700000c, 0x03800611, 0x07303000, 0x04008980,
- 0x04307920, 0x0700000c, 0x074d0005, 0x06006013,
- 0x050f8074, 0x032fa03a, 0x02800640, 0x04602c76,
- 0x050f80ff, 0x032fa009, 0x060ff07a, 0x05500400,
- 0x070000ff, 0x06473075, 0x04602c76, 0x050f80ff,
- 0x032fa00a, 0x04007076, 0x05a004a3, 0x007a0101,
- 0x03010000, 0x06303008, 0x07008800, 0x074d0005,
- 0x0049b075, 0x0781062e, 0x06603676, 0x050f80ff,
- 0x073fa009, 0x06000002, 0x03800636, 0x06600a76,
- 0x050f80ff, 0x073fa009, 0x07000003, 0x07f00000,
- 0x054b0406, 0x045a0404, 0x050040ff, 0x0600600e,
- 0x050f8074, 0x032fa03a, 0x0648c075, 0x0681063e,
- 0x06307d20, 0x0700000c, 0x02800640, 0x04307920,
- 0x0700000c, 0x0049b075, 0x07810648, 0x0447b075,
- 0x04600876, 0x050f80ff, 0x053fa80a, 0x0700003a,
- 0x0246f007, 0x013e4000, 0x07000030, 0x0298064a,
- 0x070ff0f6, 0x074850ff, 0x0581864b, 0x050f2074,
- 0x060a0007, 0x040070fb, 0x046a7007, 0x050f40ff,
- 0x013e4000, 0x06000020, 0x0320000a, 0x022011f4,
- 0x00202004, 0x06003013, 0x0678007a, 0x07fff000,
- 0x0681065d, 0x0020200e, 0x050f8072, 0x032fa022,
- 0x008004f1, 0x01208060, 0x0600902c, 0x04002020,
- 0x02800670, 0x040080fb, 0x066ae108, 0x06009076,
- 0x04002075, 0x02800670, 0x03201100, 0x0484866e,
- 0x06420001, 0x0581866a, 0x03800687, 0x020e0008,
- 0x07c00000, 0x050fd009, 0x040fd008, 0x03201100,
- 0x05848677, 0x06420001, 0x04818673, 0x03800687,
- 0x007a0102, 0x04000101, 0x05600809, 0x050f80ff,
- 0x073fa00a, 0x06000001, 0x020e0008, 0x07840681,
- 0x030e0009, 0x07c00000, 0x01011009, 0x052e4300,
- 0x07c00000, 0x052e400f, 0x01208090, 0x03800669,
- 0x070fc0ff, 0x040f8013, 0x032fa009, 0x0280068a,
- 0x2bac147e, 0xffeea946
+ 0x02800640, 0x06600a76, 0x050f80ff, 0x073fa009,
+ 0x07000003, 0x07f00000, 0x054b0406, 0x045a0404,
+ 0x050040ff, 0x0600600e, 0x050f8074, 0x032fa03a,
+ 0x0648c075, 0x07810648, 0x06307d20, 0x0700000c,
+ 0x0280064a, 0x04307920, 0x0700000c, 0x0049b075,
+ 0x06810652, 0x0447b075, 0x04600876, 0x050f80ff,
+ 0x053fa80a, 0x0700003a, 0x0246f007, 0x013e4000,
+ 0x07000030, 0x02980654, 0x070ff0f6, 0x074850ff,
+ 0x05818655, 0x050f2074, 0x060a0007, 0x040070fb,
+ 0x046a7007, 0x050f40ff, 0x013e4000, 0x06000020,
+ 0x0320000a, 0x022011f4, 0x00202004, 0x06003013,
+ 0x0678007a, 0x07fff000, 0x06810667, 0x0020200e,
+ 0x050f8072, 0x032fa022, 0x008004fb, 0x01208060,
+ 0x0600902c, 0x04002020, 0x0280067a, 0x040080fb,
+ 0x066ae108, 0x06009076, 0x04002075, 0x0280067a,
+ 0x03201100, 0x05848678, 0x06420001, 0x05818674,
+ 0x02800691, 0x020e0008, 0x07c00000, 0x050fd009,
+ 0x040fd008, 0x03201100, 0x05848681, 0x06420001,
+ 0x0581867d, 0x02800691, 0x007a0102, 0x04000101,
+ 0x05600809, 0x050f80ff, 0x073fa00a, 0x06000001,
+ 0x020e0008, 0x0784068b, 0x030e0009, 0x07c00000,
+ 0x01011009, 0x052e4300, 0x07c00000, 0x052e400f,
+ 0x01208090, 0x02800673, 0x070fc0ff, 0x040f8013,
+ 0x032fa009, 0x02800694, 0x19543bdd, 0xffeea90c
};
#endif
diff --git a/sys/dev/ispfw/asm_2500.h b/sys/dev/ispfw/asm_2500.h
index 2e20cbb..1cc3c9f 100644
--- a/sys/dev/ispfw/asm_2500.h
+++ b/sys/dev/ispfw/asm_2500.h
@@ -1,6 +1,6 @@
/* $FreeBSD$ */
/*-
- * Copyright (C) 2005-2010 by Qlogic, Inc.
+ * Copyright (C) 2005-2014 by Qlogic, Inc.
* All rights reserved.
*
* Redistribution and use in source and binary forms are permitted provided
@@ -30,273 +30,531 @@
* *
* ******************************************************************** */
/*
- * Firmware Version 5.05.00 (15:48 Dec 14, 2010)
+ * Firmware Version 7.03.00 (Apr 14, 2014)
*/
#ifdef ISP_2500
static const uint32_t isp_2500_risc_code[] = {
- 0x0501f042, 0x0010d000, 0x00100000, 0x00008b5c,
- 0x00000005, 0x00000005, 0x00000000, 0x00008080,
+ 0x0501f042, 0x00112000, 0x00100000, 0x0000d32a,
+ 0x00000007, 0x00000003, 0x00000000, 0x000090d5,
0x00000004, 0x00000000, 0x20434f50, 0x59524947,
0x48542032, 0x30303720, 0x514c4f47, 0x49432043,
0x4f52504f, 0x52415449, 0x4f4e2020, 0x20495350,
0x32357878, 0x20466972, 0x6d776172, 0x65202020,
- 0x56657273, 0x696f6e20, 0x2020352e, 0x30352e30,
+ 0x56657273, 0x696f6e20, 0x2020372e, 0x30332e30,
0x30202024, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00100000, 0x00100000,
- 0x00008b5c, 0xffffffff, 0x0010d004, 0x00020000,
- 0x00000a08, 0xffffffff, 0x0010da0c, 0x0010ad00,
- 0x00001ae5, 0xffffffff, 0x0010f4f1, 0x0000c000,
- 0x00000705, 0x00ffffff, 0x0010fbf6, 0x00008000,
- 0x000003ea, 0x00ffffff, 0x0010ffe0, 0x0000a000,
- 0x00000475, 0x00ffffff, 0x00110455, 0x0000400e,
+ 0x0000d32a, 0xffffffff, 0x00112004, 0x00020000,
+ 0x000011a6, 0xffffffff, 0x001131af, 0x0000c000,
+ 0x00000aa2, 0x00ffffff, 0x00113c51, 0x00008000,
+ 0x00000703, 0x00ffffff, 0x00114354, 0x0000a000,
+ 0x00000621, 0x00ffffff, 0x00114975, 0x0000400e,
0x00000808, 0xffffffff, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x4203f000, 0x00021fff,
0x40000000, 0x4203e000, 0x90000100, 0x40000000,
- 0x42000800, 0x00020a09, 0x6002f000, 0x608c00e0,
+ 0x42000800, 0x000211a7, 0x6002f000, 0x608c00e0,
0x50000000, 0x8c000500, 0x05020003, 0x42000800,
0x00020000, 0x45780800, 0x80040800, 0x82040580,
0x00022000, 0x05fe07fc, 0x4178a000, 0x4200a800,
- 0x00108b5c, 0x42000800, 0x0010ad00, 0x40540000,
- 0x8004b480, 0x0545f9d4, 0x0501fbc5, 0x600c6020,
+ 0x0010d32a, 0x42000800, 0x00111b00, 0x40540000,
+ 0x8004b480, 0x0569f852, 0x0501ffcd, 0x600c6020,
0x50304800, 0x8c240500, 0x0500001c, 0x59e00016,
- 0x8c000504, 0x05020019, 0x0545fa1e, 0x604808fa,
+ 0x8c000504, 0x05020019, 0x0569f8a9, 0x604808fa,
0x50041000, 0x82081500, 0xfffffffc, 0x90081d43,
0x90081540, 0x84244d00, 0x440c0800, 0x44080800,
0x44246000, 0x64030000, 0x4203e000, 0x70000000,
0x4203e000, 0xb0300000, 0x603ff84e, 0x59e00016,
0x8c000504, 0x05020002, 0x05fe47fd, 0x84244d40,
- 0x44246000, 0x0545fa07, 0x64030000, 0x0501f9e8,
- 0x4803c856, 0x0505fdfb, 0x6413c020, 0x4203e000,
+ 0x44246000, 0x0569f892, 0x64030000, 0x0501fde5,
+ 0x4803c856, 0x0509fbf8, 0x6413c020, 0x4203e000,
0x6000000f, 0x640f70e8, 0x640f78e8, 0x640da8e8,
0x59e00023, 0x8c000500, 0x0502002b, 0x42002800,
0x00100022, 0x58140800, 0x4817c857, 0x4807c857,
0x800409c0, 0x0500000a, 0x58142002, 0x4813c857,
- 0x58141003, 0x4c140000, 0x0501fb84, 0x5c002800,
+ 0x58141003, 0x4c140000, 0x0501ff8c, 0x5c002800,
0x0502003d, 0x90142c04, 0x05fdf7f3, 0x42002800,
0x00100022, 0x5814a000, 0x4817c857, 0x4853c857,
0x8050a1c0, 0x05000014, 0x4c140000, 0x5814a801,
0x4857c857, 0x40500000, 0x80540480, 0x0500000b,
0x82540480, 0x0000400e, 0x05020005, 0x9050a404,
- 0x0505ffe6, 0x05020028, 0x0501f004, 0x5814b002,
- 0x485bc857, 0x0545f978, 0x5c002800, 0x90142c04,
- 0x05fdf7e9, 0x0509fe1d, 0x42001000, 0x7ff481fe,
+ 0x0509ff8a, 0x05020028, 0x0501f004, 0x5814b002,
+ 0x485bc857, 0x0565fff6, 0x5c002800, 0x90142c04,
+ 0x05fdf7e9, 0x050dfdf3, 0x42001000, 0x7ff481fe,
0x59e00002, 0x8c00051e, 0x05020003, 0x42001000,
- 0x7ff480fe, 0x50081000, 0x480b5058, 0x42002800,
+ 0x7ff480fe, 0x50081000, 0x480b5092, 0x42002800,
0x00100022, 0x58140801, 0x4817c857, 0x4807c857,
0x800409c0, 0x05000023, 0x58142002, 0x4813c857,
0x58141003, 0x4c140000, 0x82040480, 0x0000400e,
- 0x05020004, 0x0505fff0, 0x4803c856, 0x0501f003,
- 0x0501fb4a, 0x05020004, 0x5c002800, 0x90142c04,
+ 0x05020004, 0x0509ff94, 0x4803c856, 0x0501f003,
+ 0x0501ff52, 0x05020004, 0x5c002800, 0x90142c04,
0x05fdf7ed, 0x4803c856, 0x4a03c020, 0x00004010,
0x4a03c011, 0x40100011, 0x05006000, 0x4203e000,
0x40000000, 0x59e00017, 0x60000800, 0x8c00050a,
- 0x05060ea1, 0x8d0c0530, 0x05060e8d, 0x05060e8f,
+ 0x050a0df0, 0x8d0c0530, 0x050a0de3, 0x050a0de5,
0x6403c017, 0x4203e000, 0x30000001, 0x0501f000,
- 0x4803c856, 0x0201f800, 0x0010ad04, 0x59e00024,
- 0x8c000500, 0x05060f90, 0x0501fbc0, 0x0509fec3,
- 0x05020004, 0x4a03c014, 0x001c001c, 0x0501f003,
- 0x4a03c014, 0x081c001c, 0x4817c857, 0x0501fbde,
- 0x42002000, 0x0010c7e5, 0x0545f93e, 0x59a80067,
- 0x800001c0, 0x0500000c, 0x59a80083, 0x8c000500,
- 0x05000005, 0x59a8000a, 0x82000480, 0x0013ffff,
- 0x05001005, 0x59a82067, 0x80102000, 0x59a8280a,
- 0x0545f930, 0x0545fa06, 0x0545fa2d, 0x59a8280a,
- 0x60000812, 0x60001802, 0x4807500d, 0x480f5262,
- 0x60901000, 0x0525fedf, 0x82040c00, 0x0010ccb4,
- 0x4807500b, 0x600400de, 0x50000000, 0x8c000502,
- 0x05000004, 0x59a80083, 0x84000540, 0x48035083,
- 0x4a03c810, 0x00100000, 0x4a03c811, 0x00108b5c,
- 0x4a03c812, 0x0010ad00, 0x4a03c813, 0x0010c7e4,
- 0x0501fb7d, 0x6447c829, 0x59e40001, 0x82000540,
- 0x0003403f, 0x4803c801, 0x4a03c802, 0x00000933,
- 0x59e00003, 0x82000540, 0x00240000, 0x4803c003,
- 0x64ffc019, 0x60701000, 0x0501fad7, 0x4202c000,
- 0x0010ccb4, 0x59aab00b, 0x59aaa00b, 0x59aaa80b,
- 0x59aac80d, 0x49675061, 0x59a8000b, 0x4803500c,
- 0x052dfd02, 0x0501fbdf, 0x0501fc52, 0x0509f808,
- 0x59a8004b, 0x8c000508, 0x05000004, 0x0509fef0,
- 0x0515fe19, 0x0509fff3, 0x0501fd65, 0x0505fa67,
- 0x0525fee4, 0x0501f85d, 0x050df9d9, 0x0521fb47,
- 0x051dfdd8, 0x0525fc61, 0x0509f837, 0x0505fe6b,
- 0x4203e000, 0xf0000001, 0x0545f9f2, 0x6403c018,
- 0x4203e000, 0xa0000001, 0x59a80083, 0x80000540,
- 0x05000004, 0x4203e000, 0x20000551, 0x0501f003,
- 0x4203e000, 0x20000511, 0x4203e000, 0x50010000,
- 0x6403c020, 0x05027019, 0x59e00020, 0x90000582,
- 0x05020016, 0x4a03c020, 0x00004000, 0x4a03c011,
- 0x40000010, 0x05006000, 0x4203e000, 0x40000000,
- 0x4df00000, 0x4203e000, 0x50000000, 0x59e00017,
- 0x60000800, 0x8c00050a, 0x0002088c, 0x8d0c0530,
- 0x05060dfb, 0x0002098c, 0x5c03e000, 0x6403c017,
- 0x4203e000, 0x30000001, 0x6002d800, 0x4203e000,
- 0xb0600000, 0x59a8008a, 0x4003f800, 0x0001f004,
- 0x4df00000, 0x4203e000, 0x50000000, 0x416c0000,
- 0x90000c88, 0x05021861, 0x0c01f803, 0x5c03e000,
- 0x0001f006, 0x00100192, 0x0010c63b, 0x0010c57f,
- 0x00100191, 0x0010c534, 0x00100191, 0x00100191,
- 0x001001a3, 0x0501f855, 0x42000800, 0x00109490,
- 0x5804001e, 0x8c000500, 0x0500000c, 0x84000500,
- 0x4800081e, 0x6012d800, 0x0501fa67, 0x49f3c857,
- 0x5c000800, 0x5c000000, 0x82000540, 0x00007e20,
- 0x4c000000, 0x4c040000, 0x1c01f000, 0x4a038805,
- 0x000000f0, 0x1c01f000, 0x64175059, 0x6417505a,
- 0x6403505b, 0x4a03505c, 0x00008080, 0x0521fab6,
- 0x4a03541b, 0x0000ffff, 0x4a03500f, 0x00ffffff,
- 0x0539fa65, 0x4a03501f, 0x20200000, 0x4a035020,
- 0x88000200, 0x4a035021, 0x00ff001f, 0x4a035022,
- 0x000007d0, 0x4a035023, 0x80000000, 0x4a035024,
- 0x00000200, 0x4a035025, 0x00ff0000, 0x4a035026,
- 0x00010000, 0x4a03502d, 0x514c4f47, 0x4a03502e,
- 0x49432020, 0x1c01f000, 0x4d440000, 0x417a8800,
- 0x4c5c0000, 0x4178b800, 0x0001fac4, 0x05020004,
- 0x051dfa80, 0x05020002, 0x805cb800, 0x81468800,
- 0x83440580, 0x000007f0, 0x05fe07f8, 0x405c0800,
- 0x5c00b800, 0x5c028800, 0x1c01f000, 0x4803c857,
- 0x5c000000, 0x4c000000, 0x4803c857, 0x0501f80b,
- 0x485fc857, 0x4203e000, 0x50000000, 0x5c000000,
- 0x4d780000, 0x6008b900, 0x0501f008, 0x486bc857,
- 0x486fc857, 0x4873c857, 0x485fc857, 0x4203e000,
+ 0x4803c856, 0x59e00024, 0x8c000500, 0x050a0f32,
+ 0x0501ffca, 0x4a03c014, 0x001c001c, 0x4817c857,
+ 0x0501fff8, 0x42002000, 0x00111b00, 0x0565ffc3,
+ 0x59a800a1, 0x800001c0, 0x0500000c, 0x59a800ca,
+ 0x8c000500, 0x05000005, 0x59a8000a, 0x82000480,
+ 0x0013ffff, 0x05001005, 0x59a820a1, 0x80102000,
+ 0x59a8280a, 0x0565ffb5, 0x0569f9db, 0x0569fa02,
+ 0x59a8280a, 0x60000812, 0x60001802, 0x4807503b,
+ 0x480f529c, 0x60c01000, 0x053dfe68, 0x82040c00,
+ 0x00111b00, 0x4807500b, 0x600400de, 0x50000000,
+ 0x8c000502, 0x05000004, 0x59a800ca, 0x84000540,
+ 0x480350ca, 0x4a03c810, 0x00100000, 0x4a03c811,
+ 0x0010d32a, 0x0501ff90, 0x6447c829, 0x59e40001,
+ 0x82000540, 0x0003401f, 0x4803c801, 0x4a03c802,
+ 0x00000933, 0x59e00003, 0x82000540, 0x00240000,
+ 0x4803c003, 0x64ffc019, 0x60701000, 0x0501fedf,
+ 0x4202c000, 0x00111b00, 0x59aab00b, 0x59aaa00b,
+ 0x59aaa80b, 0x59aac83b, 0x4967509b, 0x496754dd,
+ 0x59a8000b, 0x4803500c, 0x0501fffe, 0x0549fa90,
+ 0x0505f807, 0x0505f875, 0x0509ffb5, 0x59a80084,
+ 0x8c000508, 0x05000004, 0x050dfebf, 0x0525f87d,
+ 0x050dffef, 0x0505f9b8, 0x0505ffb0, 0x053dfe71,
+ 0x0501fc55, 0x0515f812, 0x0531fb18, 0x052dfc90,
+ 0x0539fd03, 0x0509ffe6, 0x0509fe0f, 0x4203e000,
+ 0xf0000001, 0x0569f9c9, 0x6403c018, 0x4203e000,
+ 0xa0000001, 0x59a800ca, 0x80000540, 0x05000004,
+ 0x4203e000, 0x20000551, 0x0501f003, 0x4203e000,
+ 0x20000511, 0x4203e000, 0x50010000, 0x6403c020,
+ 0x05027019, 0x59e00020, 0x90000582, 0x05020016,
+ 0x4a03c020, 0x00004000, 0x4a03c011, 0x40000010,
+ 0x05006000, 0x4203e000, 0x40000000, 0x4df00000,
+ 0x4203e000, 0x50000000, 0x59e00017, 0x60000800,
+ 0x8c00050a, 0x00020892, 0x8d0c0530, 0x050a0d5a,
+ 0x000209bc, 0x5c03e000, 0x6403c017, 0x4203e000,
+ 0x30000001, 0x6002d800, 0x4203e000, 0xb0600000,
+ 0x59a800d5, 0x4003f800, 0x0001f004, 0x4df00000,
+ 0x4203e000, 0x50000000, 0x416c0000, 0x90000c88,
+ 0x05021c5e, 0x0c01f803, 0x5c03e000, 0x0001f006,
+ 0x00100189, 0x0010019a, 0x001002bf, 0x00100188,
+ 0x001003fa, 0x00100188, 0x00100188, 0x00100592,
+ 0x0501fc52, 0x42000800, 0x0010dceb, 0x5804001e,
+ 0x8c000500, 0x0500000c, 0x84000500, 0x4800081e,
+ 0x6012d800, 0x0501fe6d, 0x49f3c857, 0x5c000800,
+ 0x5c000000, 0x82000540, 0x00007e20, 0x4c000000,
+ 0x4c040000, 0x1c01f000, 0x41780000, 0x800001c0,
+ 0x05020039, 0x59c4000d, 0x8c00051e, 0x0502001f,
+ 0x59a800a7, 0x8c000500, 0x05000012, 0x60300830,
+ 0x050dfc0d, 0x90040560, 0x60300830, 0x4c000000,
+ 0x050dfc0e, 0x6041d04e, 0x0539fe5b, 0x5c000000,
+ 0x8400050a, 0x60300830, 0x050dfc08, 0x6191d000,
+ 0x0539fe55, 0x59c4000d, 0x8c00051e, 0x0502000b,
+ 0x59c40005, 0x8c000500, 0x05020008, 0x050dff96,
+ 0x640b50b4, 0x64075075, 0x6012d800, 0x42000000,
+ 0x0010e4be, 0x0565f622, 0x0501fe39, 0x052dfeef,
+ 0x0500000f, 0x052dfeff, 0x05020032, 0x5994002d,
+ 0x82000580, 0x001051ae, 0x05020004, 0x5994002c,
+ 0x800001c0, 0x0502002b, 0x59c40006, 0x82000540,
+ 0x000000c0, 0x48038806, 0x0501f026, 0x052dfe62,
+ 0x916c0581, 0x050200c5, 0x59a8003f, 0x90000589,
+ 0x050200c2, 0x497b503d, 0x42000800, 0xffffd815,
+ 0x0511fcf2, 0x42024800, 0x0010e512, 0x497a4805,
+ 0x64078893, 0x4a038805, 0x000000f0, 0x052dfedb,
+ 0x59c41006, 0x05020006, 0x82081540, 0x000000f1,
+ 0x82081500, 0xbbffffff, 0x0501f003, 0x82081540,
+ 0x440000f1, 0x480b8806, 0x0539fe23, 0x0541fb6d,
+ 0x0501f8ab, 0x050000a9, 0x42000000, 0x0010e39b,
+ 0x0565fdec, 0x60c01100, 0x497b50b2, 0x0501f036,
+ 0x0525f9b0, 0x59c400a4, 0x9000050f, 0x90000487,
+ 0x0502109e, 0x0539fe14, 0x59c400a3, 0x82000500,
+ 0xffefffff, 0x480388a3, 0x59a800bd, 0x800001c0,
+ 0x05020003, 0x0525ff01, 0x0501f094, 0x59a80043,
+ 0x84000546, 0x48035043, 0x052dfeae, 0x59c41006,
+ 0x05020006, 0x82081540, 0x44000001, 0x82081500,
+ 0xffffff0f, 0x0501f003, 0x82081540, 0x440000f1,
+ 0x480b8806, 0x497b9005, 0x0501f885, 0x05000083,
+ 0x60000000, 0x052dfc3b, 0x4a038802, 0x0000ffff,
+ 0x4a0378e4, 0x00003000, 0x42007000, 0x0010e060,
+ 0x58380401, 0x8c000508, 0x05020003, 0x4a01a8e4,
+ 0x0000c000, 0x42000000, 0x0010e392, 0x0565fdb9,
+ 0x59a8103d, 0x600c0800, 0x0541fb1b, 0x60401100,
+ 0x59a81809, 0x0521fdb3, 0x59a804cc, 0x82000500,
+ 0xffffff40, 0x480354cc, 0x59a80249, 0x84000518,
+ 0x48035249, 0x59c40001, 0x82000500, 0x00018000,
+ 0x82000580, 0x00018000, 0x59c400a3, 0x05020004,
+ 0x82000540, 0x00001000, 0x0501f003, 0x82000500,
+ 0xffffefff, 0x480388a3, 0x59c80015, 0x84000548,
+ 0x48039015, 0x050dfacb, 0x59a81008, 0x84081500,
+ 0x480b5008, 0x850e1d0a, 0x0529fd8a, 0x052dfe67,
+ 0x05000007, 0x8d0c0506, 0x05000005, 0x640750b2,
+ 0x850e1d0e, 0x0525fa79, 0x0501f048, 0x0529fe89,
+ 0x05000005, 0x59c41002, 0x8408150c, 0x480b8802,
+ 0x0501f017, 0x052dfe59, 0x05020005, 0x59a80046,
+ 0x80000540, 0x05540e1d, 0x0501f011, 0x0555fe1b,
+ 0x59a80249, 0x8c000506, 0x0502000d, 0x59a80046,
+ 0x80000540, 0x05020007, 0x59a81c49, 0x820c0580,
+ 0x0000ffff, 0x05000006, 0x8c0c0508, 0x05000004,
+ 0x4a035449, 0x0000ffff, 0x0525ffb4, 0x497b504b,
+ 0x497b504a, 0x497b50b3, 0x052dfe40, 0x59a81249,
+ 0x05020009, 0x050df8bd, 0x80001580, 0x59a8004d,
+ 0x82000500, 0xffff0000, 0x80040d40, 0x4807504d,
+ 0x0501f005, 0x59a8004d, 0x82000500, 0xffff0000,
+ 0x4803504d, 0x599c0017, 0x8c00050a, 0x05000002,
+ 0x84081544, 0x480b5249, 0x052dfe2c, 0x05000003,
+ 0x050df8aa, 0x48078880, 0x60141000, 0x0541ffae,
+ 0x497b504b, 0x497b5044, 0x4a035045, 0x0000ffff,
+ 0x4a01a8e4, 0x000000c0, 0x600ad800, 0x052dfe1f,
+ 0x05000005, 0x59a80249, 0x9000050c, 0x90000584,
+ 0x05000002, 0x0511fa30, 0x1c01f000, 0x0521fe7f,
+ 0x05020026, 0x599c0019, 0x82000500, 0x0000e000,
+ 0x82000580, 0x00004000, 0x05020020, 0x59c40001,
+ 0x82000d00, 0x00018000, 0x82040580, 0x00010000,
+ 0x05000004, 0x82040580, 0x00008000, 0x05020017,
+ 0x59a800a6, 0x90000483, 0x05001003, 0x90000541,
+ 0x0501f012, 0x050dfe6f, 0x64075075, 0x4a035076,
+ 0xaabbccdd, 0x64135069, 0x6403506a, 0x6012d800,
+ 0x59a800a6, 0x80000000, 0x480350a6, 0x59a800a5,
+ 0x82000500, 0xfffffff8, 0x90000544, 0x480350a5,
+ 0x0501fd42, 0x80000580, 0x1c01f000, 0x0525f854,
+ 0x05000051, 0x59a80249, 0x90000523, 0x900005a3,
+ 0x0502004d, 0x0525f853, 0x0500004b, 0x4a038802,
+ 0x0000ffbf, 0x59a804cc, 0x8c00050c, 0x0502012e,
+ 0x8c000506, 0x0502000b, 0x8c000508, 0x0502012a,
+ 0x84000548, 0x480354cc, 0x0525f84b, 0x05000004,
+ 0x417a5800, 0x0559fcae, 0x0501f123, 0x0501f0ea,
+ 0x8c00050a, 0x05020038, 0x8400054a, 0x480354cc,
+ 0x497b504b, 0x497b504a, 0x497b5044, 0x4a035045,
+ 0x0000ffff, 0x59a80249, 0x82000500, 0xffffff7c,
+ 0x48035249, 0x42024800, 0x0010e512, 0x59240200,
+ 0x82000500, 0xffffff1f, 0x48024a00, 0x59a802cc,
+ 0x5924100b, 0x82081500, 0x00001fff, 0x80080580,
+ 0x05000012, 0x4d3c0000, 0x4d300000, 0x4d400000,
+ 0x60aa8000, 0x417a6000, 0x600a7800, 0x41780800,
+ 0x0511fc4a, 0x5c028000, 0x5c026000, 0x5c027800,
+ 0x59a802cc, 0x5924080b, 0x82040d00, 0xffffe000,
+ 0x80040540, 0x4802480b, 0x4d300000, 0x417a6000,
+ 0x0511fbeb, 0x5c026000, 0x4803c856, 0x5924000c,
+ 0x800001c0, 0x05020006, 0x0001f817, 0x050000ee,
+ 0x492e480c, 0x5924000b, 0x48025802, 0x0511f9b6,
+ 0x0501f0e9, 0x59a80045, 0x82000580, 0x0000ffff,
+ 0x05000003, 0x0511f9b0, 0x0501f0e3, 0x0565fdfe,
+ 0x05000017, 0x0565fe01, 0x05000008, 0x052dfd93,
+ 0x05000006, 0x59a80249, 0x8c000506, 0x0500004e,
+ 0x0529fdb8, 0x050200d8, 0x80000580, 0x0509ff61,
+ 0x600ed800, 0x4a035045, 0x0000ffff, 0x4a01a8e4,
+ 0x00000080, 0x4a038802, 0x0000ffff, 0x850e1d02,
+ 0x0541fd6a, 0x0501fcb8, 0x0501f0cb, 0x59a80249,
+ 0x8c00050a, 0x05020003, 0x8c000506, 0x05000037,
+ 0x8c000500, 0x05000035, 0x4a038802, 0x0000ffbf,
+ 0x8c000502, 0x05000031, 0x0521ffde, 0x05020004,
+ 0x599c0018, 0x8c000516, 0x05020029, 0x59a8004a,
+ 0x82000580, 0x0000ffff, 0x05000020, 0x0521ffd5,
+ 0x05000006, 0x59a804cc, 0x8c000500, 0x05000003,
+ 0x0511fc27, 0x0501f008, 0x41781800, 0x0565fddb,
+ 0x05000002, 0x60401800, 0x59a80249, 0x8c00050a,
+ 0x05120a8a, 0x42024800, 0x0010e512, 0x417a4000,
+ 0x59240200, 0x82000500, 0x000000e0, 0x82000580,
+ 0x000000e0, 0x050200a0, 0x050dff2c, 0x59a80249,
+ 0x8c000504, 0x0502009c, 0x600c1000, 0x417a5800,
+ 0x050dff4b, 0x0501f098, 0x59a80249, 0x8c00051c,
+ 0x05020003, 0x8c000504, 0x05fc07f8, 0x59a8004b,
+ 0x80000540, 0x05020090, 0x59a80249, 0x8c000508,
+ 0x05020017, 0x59a80044, 0x80000540, 0x0502008a,
+ 0x59a80249, 0x8c00050e, 0x0500000c, 0x8c000502,
+ 0x0502000a, 0x052dfd39, 0x05000083, 0x82000500,
+ 0xffffff77, 0x48035249, 0x4a035045, 0x0000ffff,
+ 0x0511f949, 0x0501f07c, 0x0565fda8, 0x0500000c,
+ 0x0511fcc7, 0x05020078, 0x0501f009, 0x599c1819,
+ 0x8c0c0510, 0x05000004, 0x8c000502, 0x0502001d,
+ 0x0501f071, 0x8c000516, 0x0500006f, 0x0529fd4d,
+ 0x0502006d, 0x0521ff8b, 0x05020004, 0x599c0018,
+ 0x8c000516, 0x05020003, 0x052df90d, 0x05020066,
+ 0x59a80006, 0x8c00051c, 0x05020004, 0x599c0017,
+ 0x8c00050a, 0x0500000b, 0x61c0b00f, 0x417a8800,
+ 0x0001fb00, 0x05020004, 0x59340200, 0x8c00051a,
+ 0x05020059, 0x81468800, 0x8058b040, 0x05fe07f9,
+ 0x0565fda3, 0x05000004, 0x4a038802, 0x0000ffbf,
+ 0x0501f003, 0x4a038802, 0x0000ffff, 0x42001800,
+ 0x0010dd46, 0x0501fd73, 0x42001800, 0x0010dd53,
+ 0x0501fd70, 0x850e1d02, 0x4a01a8e4, 0x00000080,
+ 0x600ed800, 0x4a035045, 0x0000ffff, 0x0501fc2e,
+ 0x80000580, 0x0509fecb, 0x497b50a6, 0x64075078,
+ 0x0521ff5c, 0x0502000b, 0x599c0018, 0x8c000516,
+ 0x05000008, 0x59a804cc, 0x8c00050e, 0x05020036,
+ 0x8400054e, 0x480354cc, 0x0521fcda, 0x0501f016,
+ 0x59a81a49, 0x59a82041, 0x82102580, 0x0000aaaa,
+ 0x05000004, 0x8c0c0506, 0x05020002, 0x480f5449,
+ 0x8c0c0508, 0x05000007, 0x599c1819, 0x8c0c0510,
+ 0x05000004, 0x61f8180f, 0x60102000, 0x0501f003,
+ 0x61fc19ff, 0x60182000, 0x60003000, 0x417a4000,
+ 0x0521fc6c, 0x052dfce3, 0x0500000a, 0x59c40006,
+ 0x052dfcce, 0x05000004, 0x82000500, 0xffffff0f,
+ 0x0501f003, 0x82000500, 0xfbffffff, 0x48038806,
+ 0x0521ff30, 0x0500000a, 0x59a804cc, 0x8c000500,
+ 0x05000007, 0x59c40801, 0x82040d40, 0x00004000,
+ 0x48078801, 0x64c378e4, 0x0501f006, 0x59c40801,
+ 0x82040d00, 0xffffbfff, 0x48078801, 0x648378e4,
+ 0x0541fc9e, 0x1c01f000, 0x4c040000, 0x4c080000,
+ 0x4c100000, 0x59a8006a, 0x90000c84, 0x050219db,
+ 0x0c01f805, 0x5c002000, 0x5c001000, 0x5c000800,
+ 0x1c01f000, 0x00100409, 0x001004a3, 0x001004c8,
+ 0x00100576, 0x60380938, 0x050df9a7, 0x90040550,
+ 0x82000500, 0xfffffff7, 0x60380938, 0x050df9a7,
+ 0x59c410a3, 0x84081518, 0x480b88a3, 0x0521fd03,
+ 0x05020021, 0x599c0019, 0x82000500, 0x0000e000,
+ 0x82000580, 0x00004000, 0x0502001b, 0x59a808a5,
+ 0x90040d07, 0x90040580, 0x0502000b, 0x59a80069,
+ 0x90000582, 0x05000011, 0x050df8ea, 0x497b5068,
+ 0x050dfce9, 0x640f5076, 0x640b5069, 0x64075075,
+ 0x0501f00a, 0x90040584, 0x05020008, 0x497b2804,
+ 0x497b2805, 0x050dfcef, 0x64075075, 0x4a035076,
+ 0xaabbccdd, 0x64135069, 0x59a800a5, 0x80000000,
+ 0x480350a5, 0x60000001, 0x0509fe4e, 0x0539fbd6,
+ 0x59c408a3, 0x82040d00, 0xfffffff7, 0x480788a3,
+ 0x052dfc78, 0x0500000d, 0x052dfc82, 0x0500000b,
+ 0x052dfc7a, 0x05020999, 0x59c400a3, 0x84000532,
+ 0x84000570, 0x480388a3, 0x052dffa3, 0x4a038808,
+ 0x00000208, 0x0501f012, 0x59c400a3, 0x84000530,
+ 0x82000500, 0xbf7fffff, 0x480388a3, 0x61e00801,
+ 0x0525fd72, 0x59c400a3, 0x82000540, 0x00018000,
+ 0x8400051c, 0x480388a3, 0x82000500, 0xfffeffff,
+ 0x480388a3, 0x4a038808, 0x00000200, 0x59c40006,
+ 0x82000500, 0xfbffff0e, 0x48038806, 0x497b282c,
+ 0x497b282d, 0x61d00803, 0x42001000, 0x00100590,
+ 0x0539fa3c, 0x59c40805, 0x64078805, 0x0509fefb,
+ 0x05020006, 0x60040000, 0x050df8db, 0x60040000,
+ 0x050df8a9, 0x0501f01e, 0x0509fefa, 0x05020006,
+ 0x41780000, 0x050df8d4, 0x41780000, 0x050df8a2,
+ 0x0501f017, 0x0509fef9, 0x05020006, 0x60080000,
+ 0x050df8cd, 0x60080000, 0x050df89b, 0x0501f010,
+ 0x0509fef8, 0x05020006, 0x600c0000, 0x050df8c6,
+ 0x600c0000, 0x050df894, 0x0501f009, 0x0509fef7,
+ 0x05020956, 0x59a80075, 0x800001c0, 0x05000004,
+ 0x0509fef7, 0x6407506a, 0x0501f018, 0x050df914,
+ 0x6407506a, 0x052dfc27, 0x05000008, 0x052dfc31,
+ 0x05000006, 0x052dfc29, 0x05020948, 0x64075042,
+ 0x052dfb9d, 0x0501f00d, 0x59c400a4, 0x9000050f,
+ 0x90000588, 0x05000003, 0x4a038805, 0x04000000,
+ 0x59c400a3, 0x82000540, 0x0001c000, 0x480388a3,
+ 0x84000520, 0x480388a3, 0x1c01f000, 0x0501f8e9,
+ 0x05020003, 0x640f506a, 0x0501f021, 0x0509fed3,
+ 0x0502000d, 0x59a80075, 0x800001c0, 0x0500000a,
+ 0x0509fed3, 0x59a80074, 0x8c00051e, 0x05000018,
+ 0x052dfc0a, 0x05020006, 0x64075042, 0x052dfb7e,
+ 0x0501f003, 0x050df8be, 0x05020011, 0x050df855,
+ 0x640b506a, 0x497b5075, 0x59c400a3, 0x84000520,
+ 0x480388a3, 0x052dfbfd, 0x05000009, 0x0521fc57,
+ 0x05000007, 0x497b282c, 0x497b282d, 0x60b40800,
+ 0x42001000, 0x00100590, 0x0539f9da, 0x1c01f000,
+ 0x0501f8c4, 0x05020003, 0x640f506a, 0x0501f0a9,
+ 0x4a038805, 0x000000f0, 0x050df8a5, 0x050200a0,
+ 0x050dfab0, 0x05000017, 0x050dfa95, 0x05020015,
+ 0x050dfa9e, 0x0502000a, 0x59a80076, 0x90000584,
+ 0x05fc07f2, 0x0509fe9b, 0x0502000e, 0x59a80076,
+ 0x82000580, 0xaabbccdd, 0x05fc07ec, 0x59a80076,
+ 0x90000580, 0x05fc07e9, 0x0509fe80, 0x05020005,
+ 0x59a80076, 0x82000580, 0xaabbccdd, 0x05fc07e3,
+ 0x59a800a7, 0x8c000500, 0x0502000b, 0x59a80884,
+ 0x8c04050c, 0x05020008, 0x60380938, 0x050df8c2,
+ 0x90040548, 0x82000500, 0xffffffef, 0x60380938,
+ 0x050df8c2, 0x050dfa8b, 0x05000032, 0x0521fe5a,
+ 0x0500000c, 0x4a03c014, 0x00200020, 0x59c40001,
+ 0x82000500, 0x00018000, 0x82000580, 0x00018000,
+ 0x05020026, 0x4a03c013, 0x00200020, 0x0501f025,
+ 0x4a03c013, 0x03800300, 0x4a03c014, 0x03800380,
+ 0x59c40001, 0x82000500, 0x00018000, 0x82000580,
+ 0x00018000, 0x0502000c, 0x60880801, 0x61d81000,
+ 0x60201800, 0x0521fe44, 0x050008c8, 0x60880801,
+ 0x61b81000, 0x60201800, 0x0521fe3f, 0x050008c3,
+ 0x0501f00b, 0x60880801, 0x61d81000, 0x60201800,
+ 0x0521fe47, 0x050008bd, 0x60880801, 0x61b81000,
+ 0x60201800, 0x0521fe42, 0x050008b8, 0x4a03c014,
+ 0x03800000, 0x0501f003, 0x4a03c013, 0x00200000,
+ 0x052dfb92, 0x0500003d, 0x59c400a4, 0x9000050f,
+ 0x90000588, 0x05000021, 0x59c40005, 0x8c000534,
+ 0x0502001e, 0x5994002e, 0x800001c0, 0x05000007,
+ 0x0501fae3, 0x90000402, 0x5994082c, 0x80040480,
+ 0x0502103c, 0x0501f004, 0x5994002c, 0x90000482,
+ 0x05021038, 0x052dfb83, 0x05020036, 0x4a038805,
+ 0x000000f0, 0x052dfbad, 0x4a035041, 0x0000aaaa,
+ 0x64035042, 0x59c408a3, 0x90040d48, 0x480788a3,
+ 0x6006d800, 0x6403506a, 0x64078805, 0x497b282c,
+ 0x497b282d, 0x0501f019, 0x052dfb72, 0x05020007,
+ 0x59a80041, 0x82000580, 0x0000aaaa, 0x05020003,
+ 0x4a03503d, 0x00ffffff, 0x497b5041, 0x59c40006,
+ 0x82000540, 0x04000001, 0x48038806, 0x8d0c0506,
+ 0x05020004, 0x59c408a3, 0x90040d48, 0x480788a3,
+ 0x6006d800, 0x6403506a, 0x64078805, 0x497b282c,
+ 0x497b282d, 0x0501f00f, 0x59c40005, 0x82000500,
+ 0x000000c0, 0x0500000b, 0x59c40006, 0x82000540,
+ 0x000000f1, 0x48038806, 0x05fdf7f2, 0x0509fe0b,
+ 0x05020004, 0x59a80075, 0x800001c0, 0x05fe0757,
+ 0x497b8885, 0x1c01f000, 0x4803c856, 0x0521fb9f,
+ 0x05020005, 0x050dfbc2, 0x42000000, 0x0010e4bf,
+ 0x0565fa63, 0x60000001, 0x0509fd06, 0x6403506a,
+ 0x0509fdfa, 0x05020009, 0x59a80068, 0x800001c0,
+ 0x05000004, 0x80000040, 0x48035068, 0x05020003,
+ 0x642b5068, 0x64075075, 0x497b8885, 0x0501f22c,
+ 0x5994002c, 0x5994082d, 0x80040540, 0x1c01f000,
+ 0x497b282d, 0x1c01f000, 0x4a038805, 0x000000f0,
+ 0x1c01f000, 0x641f5093, 0x640f5094, 0x64035095,
+ 0x4a035096, 0x000090d5, 0x052dfe64, 0x4a035449,
+ 0x0000ffff, 0x4a03503d, 0x00ffffff, 0x0555fad7,
+ 0x4a03504d, 0x20200000, 0x4a03504e, 0x88000200,
+ 0x4a03504f, 0x00ff001f, 0x4a035050, 0x000007d0,
+ 0x4a035051, 0x80000a00, 0x4a035052, 0xa0000200,
+ 0x4a035053, 0x00ff0004, 0x4a035054, 0x00010000,
+ 0x4a035055, 0x80000000, 0x4a035056, 0x00000200,
+ 0x4a035057, 0x00ff0000, 0x4a035058, 0x00010000,
+ 0x4a03505f, 0x514c4f47, 0x4a035060, 0x49432020,
+ 0x1c01f000, 0x4d440000, 0x417a8800, 0x4c5c0000,
+ 0x4178b800, 0x0001fb00, 0x05020004, 0x0529fc62,
+ 0x05020002, 0x805cb800, 0x81468800, 0x83440580,
+ 0x000007f0, 0x05fe07f8, 0x405c0800, 0x5c00b800,
+ 0x5c028800, 0x1c01f000, 0x4803c857, 0x5c000000,
+ 0x4c000000, 0x4803c857, 0x0501f808, 0x485fc857,
+ 0x4203e000, 0x50000000, 0x5c000000, 0x4d780000,
+ 0x6008b900, 0x0501f005, 0x485fc857, 0x4203e000,
0x50000000, 0x6008b900, 0x05006000, 0x4c000000,
0x4c040000, 0x59bc00ea, 0x4803c857, 0x90000507,
- 0x90000581, 0x05020003, 0x60000800, 0x0525fff0,
+ 0x90000581, 0x05020003, 0x60000800, 0x053dff51,
0x59b800ea, 0x4803c857, 0x641370e8, 0x5c000800,
0x4807c025, 0x80040920, 0x4807c026, 0x5c000000,
0x4803c023, 0x80000120, 0x4803c024, 0x5c000000,
0x4803c857, 0x4803c021, 0x80000120, 0x4803c022,
0x41f80000, 0x4803c029, 0x80000120, 0x4803c02a,
- 0x0545f873, 0x0500004a, 0x42000800, 0x00109cb2,
- 0x46000800, 0xfaceface, 0x80040800, 0x4c080000,
- 0x4c0c0000, 0x600010f4, 0x58080013, 0x44000800,
- 0x80040800, 0x58080022, 0x44000800, 0x80040800,
- 0x58080023, 0x44000800, 0x80040800, 0x58080024,
- 0x44000800, 0x80040800, 0x58080025, 0x44000800,
- 0x80040800, 0x58080028, 0x44000800, 0x80040800,
- 0x610010f4, 0x602c1800, 0x50080000, 0x44000800,
- 0x80081000, 0x80040800, 0x800c1840, 0x05fe07fb,
- 0x600c1800, 0x600010f6, 0x480c1003, 0x58080005,
- 0x44000800, 0x80040800, 0x800c1840, 0x05fe17fb,
- 0x600010f8, 0x58080002, 0x44000800, 0x80040800,
- 0x58080003, 0x44000800, 0x80040800, 0x58080020,
- 0x44000800, 0x80040800, 0x58080021, 0x44000800,
- 0x80040800, 0x58080022, 0x44000800, 0x80040800,
- 0x58080023, 0x44000800, 0x80040800, 0x600010f6,
- 0x58080007, 0x44000800, 0x80040800, 0x5808002b,
- 0x44000800, 0x80040800, 0x5808007c, 0x44000800,
- 0x80040800, 0x5c001800, 0x5c001000, 0x64030000,
- 0x485fc020, 0x905cb9c0, 0x905cbd52, 0x485fc011,
- 0x4203e000, 0x40000000, 0x6016d800, 0x59e00017,
- 0x60000800, 0x8c00050a, 0x05060d23, 0x8d0c0530,
- 0x05060d0f, 0x05060d11, 0x6403c017, 0x4203e000,
- 0x30000001, 0x0501f956, 0x05fdf7ff, 0x60100000,
- 0x0501f80c, 0x4a03c855, 0x0001eb5a, 0x59e40001,
- 0x82000540, 0xff000700, 0x4803c801, 0x42000000,
- 0x00109905, 0x49780003, 0x49780004, 0x1c01f000,
- 0x42000800, 0x00109907, 0x44000800, 0x59e40801,
- 0x82041500, 0x00f3c0ff, 0x480bc801, 0x8c040524,
- 0x0500000b, 0x4c000000, 0x59e41052, 0x59e40054,
- 0x800000d4, 0x82000400, 0x00109cdb, 0x80081480,
- 0x480bc853, 0x6503c800, 0x5c000000, 0x4a03c850,
- 0x00109cdb, 0x800000d4, 0x82002400, 0x00109cda,
- 0x4813c851, 0x4a03c853, 0x00000400, 0x42000000,
- 0x00109cdb, 0x82001400, 0x00001000, 0x45780000,
- 0x80000000, 0x80081d80, 0x05fe07fd, 0x4807c801,
- 0x1c01f000, 0x42002000, 0x00109905, 0x59e41801,
- 0x58100c01, 0x82040500, 0x00003800, 0x820c1d00,
- 0xffffc7ff, 0x800c1d40, 0x480fc801, 0x1c01f000,
- 0x5c036000, 0x4db00000, 0x49b3c857, 0x4803c857,
- 0x1c01f000, 0x4c5c0000, 0x4c600000, 0x4c640000,
- 0x8d0c052a, 0x0500002f, 0x401c0000, 0x80040d40,
- 0x4004b800, 0x400cc000, 0x4018c800, 0x0501f8d3,
- 0x41784000, 0x42002800, 0x00109905, 0x58142017,
- 0x5814000d, 0x80100400, 0x445c0000, 0x80102000,
- 0x80000000, 0x82104d00, 0x000000ff, 0x050008a9,
- 0x0500001c, 0x4c000000, 0x0501f88e, 0x5c000000,
- 0x44080000, 0x80102000, 0x80000000, 0x82104d00,
- 0x000000ff, 0x0500089f, 0x05000012, 0x44600000,
+ 0x41780800, 0x4807c027, 0x59a800af, 0x8c00050a,
+ 0x05000005, 0x59e00027, 0x8400054a, 0x4803c857,
+ 0x4803c027, 0x0565fafa, 0x0500004a, 0x42000800,
+ 0x001105c8, 0x46000800, 0xfaceface, 0x80040800,
+ 0x4c080000, 0x4c0c0000, 0x600010f4, 0x58080013,
+ 0x44000800, 0x80040800, 0x58080022, 0x44000800,
+ 0x80040800, 0x58080023, 0x44000800, 0x80040800,
+ 0x58080024, 0x44000800, 0x80040800, 0x58080025,
+ 0x44000800, 0x80040800, 0x58080028, 0x44000800,
+ 0x80040800, 0x610010f4, 0x602c1800, 0x50080000,
+ 0x44000800, 0x80081000, 0x80040800, 0x800c1840,
+ 0x05fe07fb, 0x600c1800, 0x600010f6, 0x480c1003,
+ 0x58080005, 0x44000800, 0x80040800, 0x800c1840,
+ 0x05fe17fb, 0x600010f8, 0x58080002, 0x44000800,
+ 0x80040800, 0x58080003, 0x44000800, 0x80040800,
+ 0x58080020, 0x44000800, 0x80040800, 0x58080021,
+ 0x44000800, 0x80040800, 0x58080022, 0x44000800,
+ 0x80040800, 0x58080023, 0x44000800, 0x80040800,
+ 0x600010f6, 0x58080007, 0x44000800, 0x80040800,
+ 0x5808002b, 0x44000800, 0x80040800, 0x5808007c,
+ 0x44000800, 0x80040800, 0x5c001800, 0x5c001000,
+ 0x64030000, 0x485fc020, 0x905cb9c0, 0x905cbd52,
+ 0x485fc011, 0x4203e000, 0x40000000, 0x6016d800,
+ 0x59e00017, 0x60000800, 0x8c00050a, 0x050a0875,
+ 0x8d0c0530, 0x050a0868, 0x050a086a, 0x6403c017,
+ 0x4203e000, 0x30000001, 0x0501f956, 0x05fdf7ff,
+ 0x60100000, 0x0501f80c, 0x4a03c855, 0x0001eb5a,
+ 0x59e40001, 0x82000540, 0xff000700, 0x4803c801,
+ 0x42000000, 0x0010e4e5, 0x49780003, 0x49780004,
+ 0x1c01f000, 0x42000800, 0x0010e4e7, 0x44000800,
+ 0x59e40801, 0x82041500, 0x00f3c0ff, 0x480bc801,
+ 0x8c040524, 0x0500000b, 0x4c000000, 0x59e41052,
+ 0x59e40054, 0x800000d4, 0x82000400, 0x00110772,
+ 0x80081480, 0x480bc853, 0x6503c800, 0x5c000000,
+ 0x4a03c850, 0x00110772, 0x800000d4, 0x82002400,
+ 0x00110771, 0x4813c851, 0x4a03c853, 0x00000400,
+ 0x42000000, 0x00110772, 0x82001400, 0x00001000,
+ 0x45780000, 0x80000000, 0x80081d80, 0x05fe07fd,
+ 0x4807c801, 0x1c01f000, 0x42002000, 0x0010e4e5,
+ 0x59e41801, 0x58100c01, 0x82040500, 0x00003800,
+ 0x820c1d00, 0xffffc7ff, 0x800c1d40, 0x480fc801,
+ 0x1c01f000, 0x5c036000, 0x4db00000, 0x49b3c857,
+ 0x4803c857, 0x1c01f000, 0x4c5c0000, 0x4c600000,
+ 0x4c640000, 0x8d0c052a, 0x0500002f, 0x401c0000,
+ 0x80040d40, 0x4004b800, 0x400cc000, 0x4018c800,
+ 0x0501f8d3, 0x41784000, 0x42002800, 0x0010e4e5,
+ 0x58142017, 0x5814000d, 0x80100400, 0x445c0000,
0x80102000, 0x80000000, 0x82104d00, 0x000000ff,
- 0x05000898, 0x0500000b, 0x44640000, 0x80102000,
- 0x80000000, 0x82104d00, 0x000000ff, 0x05000891,
- 0x05000004, 0x48102817, 0x802041c0, 0x05060b32,
- 0x5c00c800, 0x5c00c000, 0x5c00b800, 0x1c01f000,
- 0x4c5c0000, 0x4c600000, 0x4c640000, 0x42001000,
- 0x04000000, 0x41ccc800, 0x42002800, 0x00109905,
- 0x59a80085, 0x82000d00, 0x000003ff, 0x4c000000,
- 0x58140212, 0x0501f85b, 0x5c000000, 0x4004b800,
- 0x4008c000, 0x905cbc06, 0x0501f016, 0x4c5c0000,
- 0x4c600000, 0x4c640000, 0x42002800, 0x00109905,
+ 0x050008a9, 0x0500001c, 0x4c000000, 0x0501f890,
+ 0x5c000000, 0x44080000, 0x80102000, 0x80000000,
+ 0x82104d00, 0x000000ff, 0x0500089f, 0x05000012,
+ 0x44600000, 0x80102000, 0x80000000, 0x82104d00,
+ 0x000000ff, 0x05000898, 0x0500000b, 0x44640000,
+ 0x80102000, 0x80000000, 0x82104d00, 0x000000ff,
+ 0x05000891, 0x05000004, 0x48102817, 0x802041c0,
+ 0x05060d32, 0x5c00c800, 0x5c00c000, 0x5c00b800,
+ 0x1c01f000, 0x4c5c0000, 0x4c600000, 0x4c640000,
+ 0x42001000, 0x04000000, 0x41ccc800, 0x42002800,
+ 0x0010e4e5, 0x59a800d0, 0x82000d00, 0x000003ff,
+ 0x4c000000, 0x58140212, 0x0501f85d, 0x5c000000,
+ 0x4004b800, 0x4008c000, 0x905cbc06, 0x8c000516,
+ 0x05000002, 0x905cbc02, 0x0501f016, 0x4c5c0000,
+ 0x4c600000, 0x4c640000, 0x42002800, 0x0010e4e5,
0x42001000, 0x03000000, 0x4000c800, 0x821c0500,
0x00003c00, 0x80000114, 0x821c0d00, 0x000003ff,
- 0x4c000000, 0x58140412, 0x0501f846, 0x5c000000,
+ 0x4c000000, 0x58140412, 0x0501f845, 0x5c000000,
0x4004b800, 0x4008c000, 0x805cbc00, 0x805cb840,
- 0x825c0480, 0x00000240, 0x05fe1edc, 0x0501f87b,
+ 0x825c0480, 0x00000240, 0x05fe1ed0, 0x0501f878,
0x405c0000, 0x905cbc02, 0x80600d40, 0x42002800,
- 0x00109905, 0x41784000, 0x58142017, 0x825c0480,
- 0x00000101, 0x05021029, 0x5814000d, 0x80100400,
+ 0x0010e4e5, 0x41784000, 0x58142017, 0x825c0480,
+ 0x00000101, 0x05021028, 0x5814000d, 0x80100400,
0x44040000, 0x80102000, 0x80000000, 0x805cb840,
- 0x82104d00, 0x000000ff, 0x0500084a, 0x0500001b,
- 0x4c000000, 0x0501f82f, 0x5c000000, 0x44080000,
+ 0x82104d00, 0x000000ff, 0x05000847, 0x0500001a,
+ 0x4c000000, 0x0501f82e, 0x5c000000, 0x44080000,
0x80102000, 0x80000000, 0x805cb840, 0x82104d00,
- 0x000000ff, 0x0500083f, 0x05000010, 0x50641800,
+ 0x000000ff, 0x0500083c, 0x0500000f, 0x50641800,
0x440c0000, 0x80000000, 0x80102000, 0x8064c800,
0x805cb840, 0x05fe07f6, 0x82104d00, 0x000000ff,
- 0x05000834, 0x05000005, 0x4813c857, 0x48102817,
- 0x802041c0, 0x05060ad4, 0x5c00c800, 0x5c00c000,
- 0x5c00b800, 0x1c01f000, 0x82100500, 0x000000ff,
- 0x805c0400, 0x82000480, 0x00000200, 0x05fc17d3,
- 0x6108b800, 0x82600d40, 0x00008040, 0x05fdf7cf,
- 0x800001c0, 0x05000006, 0x80041c80, 0x05001004,
- 0x05000003, 0x40000800, 0x8408155c, 0x1c01f000,
- 0x59a80075, 0x4803c857, 0x800018c4, 0x800010ca,
- 0x800000cc, 0x800c0400, 0x80081400, 0x59940024,
- 0x61a01807, 0x800c1c80, 0x5994002e, 0x800c0400,
- 0x40001800, 0x800c18c2, 0x800c0400, 0x800c18c6,
- 0x800c0400, 0x800c18c2, 0x800c0400, 0x800c190e,
- 0x800c0400, 0x80000112, 0x80081400, 0x1c01f000,
- 0x4813c857, 0x5c036000, 0x4db00000, 0x49b3c857,
- 0x40001800, 0x58140000, 0x8c000502, 0x05000009,
- 0x58140821, 0x80040800, 0x48042821, 0x4807c857,
- 0x8400054a, 0x48002800, 0x80000580, 0x0501f00e,
- 0x82102500, 0x000003ff, 0x80204000, 0x58140014,
- 0x80000000, 0x90000503, 0x48002814, 0x05000003,
- 0x400c0000, 0x0501f002, 0x5814000d, 0x80000540,
- 0x4803c857, 0x1c01f000, 0x42002800, 0x00109905,
- 0x58140000, 0x8c00050a, 0x0500002f, 0x8c000502,
- 0x0502002d, 0x4c5c0000, 0x5814b821, 0x49782821,
- 0x8400050a, 0x48002800, 0x58142017, 0x4813c857,
- 0x5814000d, 0x80100400, 0x41784000, 0x42000800,
- 0x0b000001, 0x44040000, 0x80000000, 0x80102000,
- 0x82104d00, 0x000000ff, 0x05fc0fca, 0x05fc0e47,
- 0x4c000000, 0x05fdffaf, 0x5c000000, 0x44080000,
+ 0x05000831, 0x05000004, 0x48102817, 0x802041c0,
+ 0x05060cd2, 0x5c00c800, 0x5c00c000, 0x5c00b800,
+ 0x1c01f000, 0x82100500, 0x000000ff, 0x805c0400,
+ 0x82000480, 0x00000200, 0x05fc17d4, 0x6108b800,
+ 0x82600d40, 0x00008040, 0x05fdf7d0, 0x800001c0,
+ 0x05000006, 0x80041c80, 0x05001004, 0x05000003,
+ 0x40000800, 0x8408155c, 0x1c01f000, 0x59a800ba,
+ 0x800018c4, 0x800010ca, 0x800000cc, 0x800c0400,
+ 0x80081400, 0x59940024, 0x61a01807, 0x800c1c80,
+ 0x05021002, 0x61a01807, 0x5994002e, 0x800c0400,
+ 0x82001c80, 0x000007d0, 0x05001002, 0x6140000f,
+ 0x4c080000, 0x0501f8b6, 0x5c001000, 0x80081400,
+ 0x1c01f000, 0x4813c857, 0x5c036000, 0x4db00000,
+ 0x49b3c857, 0x40001800, 0x58140000, 0x8c000502,
+ 0x05000009, 0x58140821, 0x80040800, 0x48042821,
+ 0x4807c857, 0x8400054a, 0x48002800, 0x80000580,
+ 0x0501f00e, 0x82102500, 0x000003ff, 0x80204000,
+ 0x58140014, 0x80000000, 0x90000503, 0x48002814,
+ 0x05000003, 0x400c0000, 0x0501f002, 0x5814000d,
+ 0x80000540, 0x4803c857, 0x1c01f000, 0x42002800,
+ 0x0010e4e5, 0x58140000, 0x8c00050a, 0x0500002f,
+ 0x8c000502, 0x0502002d, 0x4c5c0000, 0x5814b821,
+ 0x49782821, 0x8400050a, 0x48002800, 0x58142017,
+ 0x4813c857, 0x5814000d, 0x80100400, 0x41784000,
+ 0x42000800, 0x0b000001, 0x44040000, 0x80000000,
+ 0x80102000, 0x82104d00, 0x000000ff, 0x05fc0fca,
+ 0x05fc0e3e, 0x4c000000, 0x05fdffb1, 0x5c000000,
+ 0x44080000, 0x80000000, 0x80102000, 0x82104d00,
+ 0x000000ff, 0x05fc0fc0, 0x05fc0e34, 0x445c0000,
0x80000000, 0x80102000, 0x82104d00, 0x000000ff,
- 0x05fc0fc0, 0x05fc0e3d, 0x445c0000, 0x80000000,
- 0x80102000, 0x82104d00, 0x000000ff, 0x05fc0fb9,
- 0x05fc0e36, 0x48102817, 0x802041c0, 0x05060a5a,
- 0x405c2000, 0x600c1800, 0x60a01100, 0x0515fa05,
- 0x5c00b800, 0x1c01f000, 0x1c01f000, 0x59a80072,
- 0x8c000530, 0x05fe07fe, 0x4c080000, 0x60101000,
- 0x0501f849, 0x5c001000, 0x4201d000, 0x00028b0a,
- 0x0525fb8b, 0x4c080000, 0x60201000, 0x0501f842,
- 0x5c001000, 0x4201d000, 0x00028b0a, 0x0525fb84,
- 0x4c080000, 0x60401000, 0x0501f83b, 0x5c001000,
- 0x4201d000, 0x00028b0a, 0x0525fb7d, 0x05fdf7e8,
- 0x8c00050c, 0x59a80872, 0x05020003, 0x84040d30,
- 0x0501f005, 0x84040d70, 0x48075072, 0x60001000,
- 0x0501f02d, 0x48075072, 0x916c0507, 0x0c01f001,
- 0x00100408, 0x001003fa, 0x001003fa, 0x001003e8,
- 0x00100401, 0x001003fa, 0x001003fa, 0x00100401,
- 0x59c40801, 0x82040d00, 0x00018000, 0x82040580,
- 0x00018000, 0x0500000a, 0x82040580, 0x00010000,
- 0x05000004, 0x42001000, 0x42004000, 0x0501f006,
- 0x42001000, 0x22002000, 0x0501f003, 0x42001000,
- 0x12001000, 0x0501f015, 0x59a80072, 0x8c000534,
- 0x05020004, 0x42001000, 0x74057005, 0x0501f80f,
- 0x1c01f000, 0x59a80072, 0x8c000534, 0x05020004,
- 0x42001000, 0x74057005, 0x0501f008, 0x1c01f000,
- 0x1c01f000, 0x9008151c, 0x82081540, 0x001c0000,
- 0x480bc013, 0x1c01f000, 0x59a80072, 0x8c000530,
- 0x05000002, 0x84081570, 0x480b5072, 0x8c000530,
- 0x05020005, 0x82081500, 0x00007000, 0x80081114,
- 0x05fdfff1, 0x1c01f000, 0x41780000, 0x50041800,
+ 0x05fc0fb9, 0x05fc0e2d, 0x48102817, 0x802041c0,
+ 0x05060c5a, 0x405c2000, 0x600c1800, 0x60a01100,
+ 0x0521f828, 0x5c00b800, 0x1c01f000, 0x1c01f000,
+ 0x59a800b5, 0x8c000530, 0x05fe07fe, 0x4c080000,
+ 0x60101000, 0x0501f849, 0x5c001000, 0x4201d000,
+ 0x00028b0a, 0x0539f844, 0x4c080000, 0x60201000,
+ 0x0501f842, 0x5c001000, 0x4201d000, 0x00028b0a,
+ 0x0539f83d, 0x4c080000, 0x60401000, 0x0501f83b,
+ 0x5c001000, 0x4201d000, 0x00028b0a, 0x0539f836,
+ 0x05fdf7e8, 0x8c00050c, 0x59a808b5, 0x05020003,
+ 0x84040d30, 0x0501f005, 0x84040d70, 0x480750b5,
+ 0x60001000, 0x0501f02d, 0x480750b5, 0x916c0507,
+ 0x0c01f001, 0x00100805, 0x001007f7, 0x001007f7,
+ 0x001007e5, 0x001007fe, 0x001007f7, 0x001007f7,
+ 0x001007fe, 0x59c40801, 0x82040d00, 0x00018000,
+ 0x82040580, 0x00018000, 0x0500000a, 0x82040580,
+ 0x00010000, 0x05000004, 0x42001000, 0x42004000,
+ 0x0501f006, 0x42001000, 0x22002000, 0x0501f003,
+ 0x42001000, 0x12001000, 0x0501f015, 0x59a800b5,
+ 0x8c000534, 0x05020004, 0x42001000, 0x74057005,
+ 0x0501f80f, 0x1c01f000, 0x59a800b5, 0x8c000534,
+ 0x05020004, 0x42001000, 0x74057005, 0x0501f008,
+ 0x1c01f000, 0x1c01f000, 0x9008151c, 0x82081540,
+ 0x001c0000, 0x480bc013, 0x1c01f000, 0x59a800b5,
+ 0x8c000530, 0x05000002, 0x84081570, 0x480b50b5,
+ 0x8c000530, 0x05020005, 0x82081500, 0x00007000,
+ 0x80081114, 0x05fdfff1, 0x1c01f000, 0x40001800,
+ 0x800c18c2, 0x800c0400, 0x800c18c6, 0x800c0400,
+ 0x800c18c2, 0x800c0400, 0x800c190e, 0x800c0400,
+ 0x80000112, 0x1c01f000, 0x41780000, 0x50041800,
0x800c0400, 0x80040800, 0x80102040, 0x05fe07fc,
0x80080500, 0x80000540, 0x1c01f000, 0x6002f000,
0x41780000, 0x41780800, 0x41781000, 0x41781800,
@@ -321,20 +579,20 @@ static const uint32_t isp_2500_risc_code[] = {
0x417a6000, 0x417a6800, 0x417a7000, 0x417a7800,
0x417a8000, 0x417a8800, 0x417a9000, 0x417a9800,
0x417ae800, 0x417af800, 0x600300f8, 0x42031000,
- 0x001097b5, 0x607f1960, 0x60df2160, 0x42032800,
- 0x0010977e, 0x42033000, 0x00020a12, 0x42034000,
- 0x00109490, 0x42033800, 0x001094af, 0x42034800,
- 0x001094f4, 0x42035000, 0x00109400, 0x42035800,
- 0x00108c00, 0x417b6000, 0x600368de, 0x6003c860,
+ 0x0010e38c, 0x607f1960, 0x60df2160, 0x42032800,
+ 0x0010e2f9, 0x42033000, 0x000211b0, 0x42034000,
+ 0x0010dceb, 0x42033800, 0x0010dd0a, 0x42034800,
+ 0x0010e063, 0x42035000, 0x0010dc00, 0x42035800,
+ 0x0010d400, 0x417b6000, 0x600368de, 0x6003c860,
0x600371fe, 0x6003797e, 0x600380ee, 0x60038880,
- 0x600390c0, 0x42039800, 0x001099ea, 0x6003a0ec,
+ 0x600390c0, 0x42039800, 0x001102fe, 0x6003a0ec,
0x6003a8e8, 0x6003b0e4, 0x6003b8e2, 0x6003c0e0,
- 0x6003d000, 0x4203e800, 0x000201b5, 0x417bd800,
+ 0x6003d000, 0x4203e800, 0x000201e5, 0x417bd800,
0x1c01f000, 0x6407c830, 0x640fc831, 0x6413c832,
0x6427c833, 0x6417c834, 0x641bc835, 0x641fc836,
0x6423c837, 0x6403c838, 0x642bc839, 0x642fc83a,
0x640bc83b, 0x1c01f000, 0x42002800, 0x00140000,
- 0x59a80083, 0x8c000500, 0x05000003, 0x42002800,
+ 0x59a800ca, 0x8c000500, 0x05000003, 0x42002800,
0x0013a000, 0x46002800, 0xaaaaaaaa, 0x60283000,
0x80183040, 0x05fe07ff, 0x50140000, 0x82000580,
0xaaaaaaaa, 0x05020013, 0x41782000, 0x40140800,
@@ -342,332 +600,398 @@ static const uint32_t isp_2500_risc_code[] = {
0x55555555, 0x60283000, 0x80183040, 0x05fe07ff,
0x50140000, 0x82000580, 0x55555555, 0x05020005,
0x50040000, 0x82000580, 0x55555555, 0x05fe07f1,
- 0x80142840, 0x4817c857, 0x4817c861, 0x4817500a,
- 0x1c01f000, 0x4817c857, 0x4c5c0000, 0x4c600000,
- 0x0541fda3, 0x05000030, 0x4817c857, 0x606c08f6,
- 0x50040800, 0x8c04053e, 0x0500002b, 0x4817c857,
- 0x850e1d70, 0x4c040000, 0x4c140000, 0x0505fa84,
- 0x5c002800, 0x5c000800, 0x59e0b81a, 0x8204b500,
- 0x000007ff, 0x8058b000, 0x485b506a, 0x600008f4,
- 0x58042029, 0x5804302a, 0x82102500, 0xfffffff8,
- 0x82183500, 0xfffffff8, 0x40100000, 0x8018c480,
- 0x8060c104, 0x80600417, 0x48035065, 0x497b5069,
- 0x9058b41f, 0x8058090a, 0x8004c418, 0x8060c040,
- 0x805cc418, 0x485f5066, 0x48635067, 0x805c2840,
- 0x59a80083, 0x8c000500, 0x05000007, 0x59a8000a,
- 0x82000580, 0x00139fff, 0x05020003, 0x4817500a,
- 0x4817c857, 0x64030000, 0x5c00c000, 0x5c00b800,
- 0x1c01f000, 0x40681800, 0x59a80819, 0x800409c0,
- 0x05020006, 0x49781c0c, 0x64081a0c, 0x641c1804,
- 0x59a8000f, 0x48001805, 0x05fdfcb0, 0x800409c0,
+ 0x59a800ca, 0x8c000500, 0x05000005, 0x82140580,
+ 0x0013a000, 0x05020005, 0x0501f005, 0x82140580,
+ 0x00140000, 0x05000002, 0x6407c820, 0x80142840,
+ 0x4817c857, 0x4817c861, 0x4817500a, 0x1c01f000,
+ 0x4817c857, 0x4c5c0000, 0x4c600000, 0x0565f814,
+ 0x05000030, 0x4817c857, 0x606c08f6, 0x50040800,
+ 0x8c04053e, 0x0500002b, 0x4817c857, 0x850e1d70,
+ 0x4c040000, 0x4c140000, 0x0505fdc7, 0x5c002800,
+ 0x5c000800, 0x59e0b81a, 0x8204b500, 0x000007ff,
+ 0x8058b000, 0x485b50a4, 0x600008f4, 0x58042029,
+ 0x5804302a, 0x82102500, 0xfffffff8, 0x82183500,
+ 0xfffffff8, 0x40100000, 0x8018c480, 0x8060c104,
+ 0x80600417, 0x4803509f, 0x497b50a3, 0x9058b41f,
+ 0x8058090a, 0x8004c418, 0x8060c040, 0x805cc418,
+ 0x485f50a0, 0x486350a1, 0x805c2840, 0x59a800ca,
+ 0x8c000500, 0x05000007, 0x59a8000a, 0x82000580,
+ 0x00139fff, 0x05020003, 0x4817500a, 0x4817c857,
+ 0x64030000, 0x5c00c000, 0x5c00b800, 0x1c01f000,
+ 0x59a80847, 0x800409c0, 0x05020006, 0x49781c0c,
+ 0x64081a0c, 0x641c1804, 0x59a8003d, 0x48001805,
+ 0x4c0c0000, 0x05fdfc94, 0x5c001800, 0x800409c0,
0x05020002, 0x80040800, 0x48041806, 0x1c01f000,
- 0x59a8080c, 0x4006d000, 0x6006b800, 0x59a8180a,
- 0x480fc857, 0x41783000, 0x90041415, 0x90082415,
- 0x40100000, 0x800c0480, 0x05001020, 0x8d0c0530,
- 0x0500000b, 0x59a80067, 0x80000482, 0x05001008,
- 0x40100000, 0x59a82866, 0x80140480, 0x05021004,
- 0x59a81067, 0x80081000, 0x05fdf7f1, 0x801831c0,
- 0x0502000d, 0x59a80083, 0x8c000500, 0x05000006,
- 0x42000000, 0x0013a000, 0x80000484, 0x0500100e,
- 0x0501f005, 0x42000000, 0x00140000, 0x80000484,
- 0x05001009, 0x44080800, 0x40080800, 0x40101000,
- 0x815eb800, 0x05fdf7de, 0x45780800, 0x495f501a,
- 0x1c01f000, 0x42001000, 0x00140000, 0x59a80083,
- 0x8c000500, 0x05000003, 0x42001000, 0x0013a000,
- 0x80183040, 0x05fdf7d2, 0x0501f803, 0x412d8800,
- 0x1c01f000, 0x915c04a0, 0x0500100a, 0x496bc857,
- 0x815eb840, 0x416a5800, 0x592ed000, 0x497a5800,
- 0x497a5801, 0x497a5805, 0x812e59c0, 0x1c01f000,
- 0x42000000, 0x0010986a, 0x0541fbfd, 0x417a5800,
- 0x05fdf7fa, 0x0501f803, 0x412d8800, 0x1c01f000,
- 0x815eb840, 0x05001009, 0x416a5800, 0x492fc857,
- 0x592ed000, 0x497a5800, 0x497a5801, 0x497a5805,
- 0x812e59c0, 0x1c01f000, 0x42000000, 0x0010986a,
- 0x0541fbeb, 0x417ab800, 0x417a5800, 0x05fdf7f9,
- 0x492fc857, 0x496a5800, 0x412ed000, 0x815eb800,
- 0x59c80000, 0x82000540, 0x00001200, 0x48039000,
- 0x1c01f000, 0x492fc857, 0x812e59c0, 0x05000007,
- 0x592c0001, 0x497a5801, 0x4c000000, 0x05fdfff1,
- 0x5c025800, 0x05fdf7f9, 0x1c01f000, 0x42000000,
- 0x0010986a, 0x0541fbd2, 0x80025d80, 0x1c01f000,
- 0x4807c856, 0x42007000, 0x00020a09, 0x64007000,
- 0x59e00003, 0x82000540, 0x00008080, 0x4803c003,
- 0x4a03b805, 0x90000001, 0x59dc0006, 0x4a03b805,
- 0x70000000, 0x59dc0006, 0x4a03b805, 0x30000000,
- 0x59dc0006, 0x4a03b805, 0x80000000, 0x6100b000,
- 0x497bb807, 0x8058b040, 0x05fe07fe, 0x4a03b805,
- 0x30000000, 0x59dc0006, 0x4a03b805, 0x60000001,
- 0x59dc0006, 0x4a03b805, 0x60000003, 0x59dc0006,
- 0x4a03b805, 0x60000005, 0x59dc0006, 0x4a03b805,
- 0x60000007, 0x59dc0006, 0x4a03b805, 0x70000001,
- 0x59dc0006, 0x4a03b805, 0x30000002, 0x6100b000,
- 0x497bb807, 0x8058b040, 0x05fe07fe, 0x4a03b805,
- 0x30000000, 0x59dc0006, 0x4a03b805, 0x60000001,
- 0x4803c856, 0x05fdff90, 0x05fc0c20, 0x42001000,
- 0x001097b0, 0x452c1000, 0x64065801, 0x4a025802,
- 0x00000100, 0x4a025808, 0x00105709, 0x497a5809,
- 0x497a580a, 0x497a580b, 0x05fdff83, 0x05fc0c13,
- 0x42001000, 0x001097b1, 0x452c1000, 0x64025801,
- 0x4a025802, 0x00000100, 0x4a025808, 0x00100dbf,
- 0x497a5803, 0x497a5806, 0x497a5807, 0x497a5809,
- 0x05fdff75, 0x05fc0c05, 0x42001000, 0x001097b2,
+ 0x61fcb001, 0x42024800, 0x0010e512, 0x42000000,
+ 0x0010f212, 0x48024809, 0x90000410, 0x91264c0d,
+ 0x8058b040, 0x05fe07fc, 0x1c01f000, 0x59a8080c,
+ 0x4006d000, 0x6006b800, 0x59a8180a, 0x480fc857,
+ 0x41783000, 0x90041418, 0x90082418, 0x40100000,
+ 0x800c0480, 0x05001020, 0x8d0c0530, 0x0500000b,
+ 0x59a800a1, 0x80000482, 0x05001008, 0x40100000,
+ 0x59a828a0, 0x80140480, 0x05021004, 0x59a810a1,
+ 0x80081000, 0x05fdf7f1, 0x801831c0, 0x0502000d,
+ 0x59a800ca, 0x8c000500, 0x05000006, 0x42000000,
+ 0x0013a000, 0x80000484, 0x0500100e, 0x0501f005,
+ 0x42000000, 0x00140000, 0x80000484, 0x05001009,
+ 0x44080800, 0x40080800, 0x40101000, 0x815eb800,
+ 0x05fdf7de, 0x45780800, 0x495f5048, 0x1c01f000,
+ 0x42001000, 0x00140000, 0x59a800ca, 0x8c000500,
+ 0x05000003, 0x42001000, 0x0013a000, 0x80183040,
+ 0x05fdf7d2, 0x835c0480, 0x00000104, 0x0500100a,
+ 0x496bc857, 0x815eb840, 0x416a5800, 0x592ed000,
+ 0x497a5800, 0x497a5801, 0x497a5808, 0x812e59c0,
+ 0x1c01f000, 0x42000000, 0x0010e441, 0x0561fe5d,
+ 0x417a5800, 0x05fdf7fa, 0x815eb840, 0x05001009,
+ 0x416a5800, 0x492fc857, 0x592ed000, 0x497a5800,
+ 0x497a5801, 0x497a5808, 0x812e59c0, 0x1c01f000,
+ 0x42000000, 0x0010e441, 0x0561fe4e, 0x417ab800,
+ 0x417a5800, 0x05fdf7f9, 0x492fc857, 0x496a5800,
+ 0x412ed000, 0x815eb800, 0x59c80000, 0x82000540,
+ 0x00001200, 0x48039000, 0x1c01f000, 0x492fc857,
+ 0x812e59c0, 0x05000007, 0x592c0001, 0x497a5801,
+ 0x4c000000, 0x05fdfff1, 0x5c025800, 0x05fdf7f9,
+ 0x1c01f000, 0x42000000, 0x0010e441, 0x0561fe38,
+ 0x80025d80, 0x1c01f000, 0x4807c856, 0x42007000,
+ 0x000211a7, 0x64007000, 0x59e00003, 0x82000540,
+ 0x00008080, 0x4803c003, 0x4a03b805, 0x90000001,
+ 0x59dc0006, 0x4a03b805, 0x70000000, 0x59dc0006,
+ 0x4a03b805, 0x30000000, 0x59dc0006, 0x4a03b805,
+ 0x80000000, 0x6100b000, 0x497bb807, 0x8058b040,
+ 0x05fe07fe, 0x4a03b805, 0x30000000, 0x59dc0006,
+ 0x4a03b805, 0x60000001, 0x59dc0006, 0x4a03b805,
+ 0x60000003, 0x59dc0006, 0x4a03b805, 0x60000005,
+ 0x59dc0006, 0x4a03b805, 0x60000007, 0x59dc0006,
+ 0x4a03b805, 0x70000001, 0x59dc0006, 0x4a03b805,
+ 0x30000002, 0x6100b000, 0x497bb807, 0x8058b040,
+ 0x05fe07fe, 0x4a03b805, 0x30000000, 0x59dc0006,
+ 0x4a03b805, 0x60000001, 0x4803c856, 0x05fdffa3,
+ 0x05fc0bfa, 0x42001000, 0x0010e387, 0x452c1000,
+ 0x64065801, 0x4a025802, 0x00000100, 0x4a025809,
+ 0x00108adc, 0x497a580a, 0x497a580b, 0x497a580c,
+ 0x05fdff96, 0x05fc0bed, 0x42001000, 0x0010e388,
0x452c1000, 0x64025801, 0x4a025802, 0x00000100,
- 0x4a025808, 0x00100de3, 0x497a5803, 0x497a5806,
- 0x497a5807, 0x497a5809, 0x1c01f000, 0x40681000,
- 0x0001f81c, 0x1c01f000, 0x42001000, 0x0002002b,
- 0x0525f824, 0x0535fed7, 0x053dffd8, 0x05000010,
+ 0x4a025809, 0x001013bc, 0x497a5803, 0x497a5807,
+ 0x497a5808, 0x497a580a, 0x05fdff88, 0x05fc0bdf,
+ 0x42001000, 0x0010e389, 0x452c1000, 0x64025801,
+ 0x4a025802, 0x00000100, 0x4a025809, 0x001013e0,
+ 0x497a5803, 0x497a5807, 0x497a5808, 0x497a580a,
+ 0x05fdff7a, 0x05fc0bd1, 0x497a5806, 0x42001000,
+ 0x0010dc1a, 0x452c1000, 0x64025801, 0x4a025802,
+ 0x00000100, 0x4a025809, 0x001078b4, 0x497a5803,
+ 0x497a5807, 0x497a5808, 0x497a580a, 0x05fdff6b,
+ 0x05fc0bc2, 0x497a5806, 0x492f500d, 0x64025801,
+ 0x4a025802, 0x00000100, 0x4a025809, 0x001078bf,
+ 0x497a5803, 0x497a5807, 0x497a5808, 0x497a580a,
+ 0x497a580b, 0x05fdff5d, 0x05fc0bb4, 0x497a5806,
+ 0x492f500e, 0x64025801, 0x4a025802, 0x00000100,
+ 0x4a025809, 0x001078bf, 0x497a5803, 0x497a5807,
+ 0x497a5808, 0x497a580a, 0x497a580b, 0x1c01f000,
+ 0x42001000, 0x00020030, 0x0535fc87, 0x0551ff0b,
+ 0x58380807, 0x60042000, 0x58040801, 0x800409c0,
+ 0x05000003, 0x80102000, 0x05fdf7fc, 0x0561f8fc,
+ 0x0502000c, 0x42000000, 0x0010e3a9, 0x0561fd99,
+ 0x0551ff09, 0x60040800, 0x42001000, 0x00020030,
+ 0x0535fc4a, 0x42007000, 0x000211a7, 0x0001f039,
0x4a03b805, 0x30000002, 0x59dc0006, 0x4807b800,
- 0x480bb801, 0x42007000, 0x00020a09, 0x65007002,
- 0x480c7008, 0x58380007, 0x90000405, 0x48007003,
- 0x640c7000, 0x4803b803, 0x0001f053, 0x42000000,
- 0x001097d2, 0x0541fb56, 0x0535fecd, 0x60040800,
- 0x42001000, 0x0002002b, 0x0521ffe7, 0x42007000,
- 0x00020a09, 0x0001f034, 0x58380802, 0x600011fe,
- 0x82040480, 0x0000ff00, 0x05021003, 0x40041000,
- 0x80000580, 0x48007002, 0x480bb802, 0x59dc0006,
- 0x4a03b805, 0x10000000, 0x1c01f000, 0x4a03b805,
- 0x30000001, 0x58386001, 0x58301008, 0x4807c857,
- 0x4803c857, 0x4833c857, 0x4a006002, 0x00000200,
- 0x64007000, 0x800811c0, 0x00000031, 0x0001f089,
- 0x4833c857, 0x4807c857, 0x58300809, 0x4c040000,
- 0x4d2c0000, 0x40325800, 0x05fdff47, 0x5c025800,
- 0x5c000800, 0x4807c857, 0x0001f08c, 0x59e00017,
- 0x8c00050c, 0x05020028, 0x59a83868, 0xa01c459e,
- 0x05000025, 0x59a82065, 0x59a80869, 0x59a8486a,
- 0x40245000, 0x9004051f, 0x81782800, 0x801428c0,
- 0x8004010a, 0x80101400, 0x50083000, 0x80140506,
- 0x0502000c, 0x80040800, 0x80244840, 0x05000012,
- 0x80280581, 0x05000005, 0x80142942, 0x9004051f,
- 0x05fe07f7, 0x05fdf7f3, 0x41780800, 0x05fdf7ee,
- 0x59a81866, 0x800400c4, 0x800c1c00, 0x580c0003,
- 0x8c000500, 0x05000009, 0x80204040, 0x05fe07ee,
- 0x80040800, 0x80280581, 0x05020002, 0x41780800,
- 0x48075069, 0x1c01f000, 0x80142880, 0x80140506,
- 0x44001000, 0x80042800, 0x80280585, 0x05020002,
- 0x41782800, 0x48175069, 0x801c3840, 0x481f5068,
- 0x0001f09c, 0x59a81865, 0x8004110a, 0x9004051f,
- 0x80081c03, 0x81782000, 0x801020c0, 0x500c0000,
- 0x80100d00, 0x05020006, 0x80100540, 0x59a80868,
- 0x44001800, 0x80040800, 0x48075068, 0x1c01f000,
- 0x4df00000, 0x4203e000, 0x50000000, 0x915c04a0,
- 0x05fe1fb7, 0x5c03e000, 0x1c01f000, 0x59dc0006,
- 0x8c000520, 0x05000009, 0x0004483d, 0x59dc0006,
- 0x82000500, 0x00006000, 0x05000004, 0x82000580,
- 0x00006000, 0x05fe07f9, 0x1c01f000, 0x41781800,
- 0x58382005, 0x40300000, 0x80100580, 0x05000007,
- 0x40101800, 0x58102000, 0x801021c0, 0x05fe07fa,
- 0x4803c856, 0x0501f011, 0x4833c857, 0x58302000,
- 0x49786000, 0x800c19c0, 0x05020008, 0x801021c0,
- 0x05000003, 0x48107005, 0x0501f008, 0x49787005,
- 0x49787004, 0x0501f005, 0x48101800, 0x801021c0,
- 0x05020002, 0x480c7004, 0x1c01f000, 0x4803c856,
- 0x4dc00000, 0x42007000, 0x001097b3, 0x64007400,
- 0x49787001, 0x600380ee, 0x60080800, 0x59c00007,
+ 0x480bb801, 0x42007000, 0x000211a7, 0x65007002,
+ 0x480c7008, 0x58380007, 0x90000408, 0x48007003,
+ 0x640c7000, 0x4803b803, 0x0001f05a, 0x58380802,
+ 0x600011fe, 0x82040480, 0x0000ff00, 0x05021003,
+ 0x40041000, 0x80000580, 0x48007002, 0x480bb802,
+ 0x59dc0006, 0x4a03b805, 0x10000000, 0x1c01f000,
+ 0x4a03b805, 0x30000001, 0x58386001, 0x58301009,
+ 0x4807c857, 0x4803c857, 0x4833c857, 0x4a006002,
+ 0x00000200, 0x64007000, 0x800811c0, 0x00000036,
+ 0x0001f090, 0x4833c857, 0x4807c857, 0x5830080a,
+ 0x4c040000, 0x4d2c0000, 0x40325800, 0x05fdff18,
+ 0x5c025800, 0x5c000800, 0x4807c857, 0x0001f092,
+ 0x59e00017, 0x8c00050c, 0x05020028, 0x59a838a2,
+ 0xa01c459e, 0x05000025, 0x59a8209f, 0x59a808a3,
+ 0x59a848a4, 0x40245000, 0x9004051f, 0x81782800,
+ 0x801428c0, 0x8004010a, 0x80101400, 0x50083000,
+ 0x80140506, 0x0502000c, 0x80040800, 0x80244840,
+ 0x05000012, 0x80280581, 0x05000005, 0x80142942,
+ 0x9004051f, 0x05fe07f7, 0x05fdf7f3, 0x41780800,
+ 0x05fdf7ee, 0x59a818a0, 0x800400c4, 0x800c1c00,
+ 0x580c0003, 0x8c000500, 0x05000009, 0x80204040,
+ 0x05fe07ee, 0x80040800, 0x80280581, 0x05020002,
+ 0x41780800, 0x480750a3, 0x1c01f000, 0x80142880,
+ 0x80140506, 0x44001000, 0x80042800, 0x80280585,
+ 0x05020002, 0x41782800, 0x481750a3, 0x801c3840,
+ 0x481f50a2, 0x0001f0a3, 0x59a8189f, 0x8004110a,
+ 0x9004051f, 0x80081c03, 0x81782000, 0x801020c0,
+ 0x500c0000, 0x80100d00, 0x05020006, 0x80100540,
+ 0x59a808a2, 0x44001800, 0x80040800, 0x480750a2,
+ 0x1c01f000, 0x4df00000, 0x4203e000, 0x50000000,
+ 0x835c0480, 0x00000104, 0x05fe1fb6, 0x5c03e000,
+ 0x1c01f000, 0x59dc0006, 0x8c000520, 0x05000009,
+ 0x00044e27, 0x59dc0006, 0x82000500, 0x00006000,
+ 0x05000004, 0x82000580, 0x00006000, 0x05fe07f9,
+ 0x1c01f000, 0x41781800, 0x58382005, 0x40300000,
+ 0x80100580, 0x05000007, 0x40101800, 0x58102000,
+ 0x801021c0, 0x05fe07fa, 0x4803c856, 0x0501f011,
+ 0x4833c857, 0x58302000, 0x49786000, 0x800c19c0,
+ 0x05020008, 0x801021c0, 0x05000003, 0x48107005,
+ 0x0501f008, 0x49787005, 0x49787004, 0x0501f005,
+ 0x48101800, 0x801021c0, 0x05020002, 0x480c7004,
+ 0x1c01f000, 0x4803c856, 0x4dc00000, 0x42007000,
+ 0x0010e38a, 0x64007400, 0x49787001, 0x600380ee,
+ 0x60080800, 0x59c00007, 0x4a038006, 0x60000001,
+ 0x59c00007, 0x4a038006, 0x60000003, 0x59c00007,
+ 0x4a038006, 0x60000005, 0x59c00007, 0x4a038006,
+ 0x60000007, 0x59c00007, 0x4a038006, 0x60000009,
+ 0x59c00007, 0x4a038006, 0x6000000b, 0x59c00007,
+ 0x4c040000, 0x0501f817, 0x5c000800, 0x4a038009,
+ 0xf4f60000, 0x91c38420, 0x80040840, 0x05fe07e6,
+ 0x600380ee, 0x6443c822, 0x640370e8, 0x0501f83c,
+ 0x4a0370ee, 0x00100000, 0x4a0370ee, 0x00080102,
+ 0x4a0370e9, 0x00000400, 0x4a0370e9, 0x00003a0f,
+ 0x640370e8, 0x640770e8, 0x5c038000, 0x1c01f000,
+ 0x59c00007, 0x4a038006, 0xe0000001, 0x61000800,
+ 0x497b8005, 0x59c00007, 0x80040840, 0x05fe07fd,
+ 0x4a038006, 0x30000001, 0x59c00007, 0x8c000508,
+ 0x05fe07fe, 0x59c00007, 0x4a038006, 0xb0000003,
+ 0x59c00007, 0x4a038006, 0xb0000005, 0x59c00007,
+ 0x4a038006, 0xb0000001, 0x59c00007, 0x4a038006,
+ 0xb0000009, 0x59c00007, 0x4a038006, 0xb0000007,
+ 0x59c00007, 0x4a038006, 0xb000000b, 0x59c00007,
0x4a038006, 0x60000001, 0x59c00007, 0x4a038006,
0x60000003, 0x59c00007, 0x4a038006, 0x60000005,
0x59c00007, 0x4a038006, 0x60000007, 0x59c00007,
- 0x4a038006, 0x60000009, 0x59c00007, 0x4a038006,
- 0x6000000b, 0x4a038009, 0xf4f60000, 0x91c38420,
- 0x80040840, 0x05fe07ea, 0x600380ee, 0x6443c822,
- 0x640370e8, 0x0501f80d, 0x4a0370ee, 0x00100000,
- 0x4a0370ee, 0x00080102, 0x4a0370e9, 0x00000400,
- 0x4a0370e9, 0x00003a0f, 0x640370e8, 0x640770e8,
- 0x5c038000, 0x1c01f000, 0x4c5c0000, 0x4178b800,
- 0x0501f809, 0x5c00b800, 0x1c01f000, 0x4803c856,
- 0x4c5c0000, 0x905cbd41, 0x0501f803, 0x5c00b800,
- 0x1c01f000, 0x4803c856, 0x4dc00000, 0x4c500000,
- 0x4c580000, 0x4c540000, 0x640370e8, 0x805cb9c0,
- 0x05000009, 0x64138807, 0x4a0370f2, 0x80000000,
- 0x59b800ea, 0x8c000510, 0x05000003, 0x59b800e0,
- 0x05fdf7fc, 0x608380ee, 0x0501fc47, 0x59c00007,
- 0x4a038006, 0x20000000, 0x59c00007, 0x4a038006,
- 0x8000000a, 0x59c00007, 0x4a038006, 0x8000000b,
- 0x59c00007, 0x4a038006, 0x40000001, 0x83c00580,
- 0x00007700, 0x05000003, 0x600380ee, 0x05fdf7ef,
- 0x608380ee, 0x60000810, 0x59c00007, 0x8c00051e,
- 0x05000006, 0x4a038006, 0x90000001, 0x80040840,
- 0x05fe07fa, 0x05fdfad5, 0x83c00580, 0x00007700,
- 0x05000003, 0x600380ee, 0x05fdf7f3, 0x4178a000,
- 0x805cb9c0, 0x0502000f, 0x6080b000, 0x91b8ac20,
- 0x0541fb15, 0x640770fb, 0x4a037020, 0x00100cde,
- 0x59a8002c, 0x82000500, 0x0000ffff, 0x48037021,
- 0x4a037035, 0x00109930, 0x4a037038, 0x00100cd5,
- 0x640770fb, 0x6080b000, 0x91b8ac00, 0x0541fb06,
- 0x6100b000, 0xb1b8ac00, 0x0541fb03, 0x805cb9c0,
- 0x05020004, 0x4a0370e4, 0xaaaaaaaa, 0x0501f003,
- 0x4a0370e4, 0xa2aa2a82, 0x4a0370e5, 0xaaaaaaaa,
- 0x4a0370e6, 0xaaaaaaaa, 0x640370fb, 0x4a0370e6,
- 0xaaaaaaaa, 0x608380ee, 0x4a038006, 0x90000000,
- 0x59c00007, 0x8c00051e, 0x05fe0aa4, 0x600380ee,
- 0x4a038006, 0x90000000, 0x59c00007, 0x8c00051e,
- 0x05fe0a9e, 0x5c00a800, 0x5c00b000, 0x5c00a000,
- 0x5c038000, 0x1c01f000, 0x4d300000, 0x4d2c0000,
- 0x4d340000, 0x4d400000, 0x4cfc0000, 0x4d380000,
- 0x4d3c0000, 0x4d440000, 0x4d4c0000, 0x4d480000,
- 0x4c5c0000, 0x4c600000, 0x4c640000, 0x4d040000,
- 0x4cf40000, 0x4cf80000, 0x0001f8bd, 0x5c01f000,
- 0x5c01e800, 0x5c020800, 0x5c00c800, 0x5c00c000,
- 0x5c00b800, 0x5c029000, 0x5c029800, 0x5c028800,
- 0x5c027800, 0x5c027000, 0x5c01f800, 0x5c028000,
- 0x5c026800, 0x5c025800, 0x5c026000, 0x1c01f000,
- 0x493bc857, 0x0001f0e1, 0x83300500, 0x000000ff,
- 0x90000c87, 0x05fe1a71, 0x0c01f022, 0x1c01f000,
- 0x82000d00, 0xc2000038, 0x05fe0a62, 0x05fdfa6b,
- 0x00000000, 0x00000048, 0x00000054, 0x00000053,
- 0x00100797, 0x001007b2, 0x001007af, 0x001007cc,
- 0x001007a0, 0x001007a9, 0x00100797, 0x001007c8,
- 0x00100805, 0x00100797, 0x00100807, 0x00100797,
- 0x00100797, 0x0010080a, 0x0010080e, 0x0010081f,
- 0x00100830, 0x00100797, 0x00100837, 0x00100841,
- 0x00100797, 0x00100797, 0x00100797, 0x05fdfa4f,
- 0x0010079f, 0x001008c1, 0x001007d7, 0x001007f7,
- 0x0010079f, 0x0010079f, 0x0010079f, 0x05fdfa47,
- 0x4803c856, 0x59300004, 0x8c00053e, 0x05020003,
- 0x61567000, 0x0005f105, 0x0525fd5f, 0x05fc07fd,
- 0x1c01f000, 0x4803c856, 0x0501f899, 0x40002800,
- 0x41782000, 0x615a7000, 0x0005f105, 0x4803c856,
- 0x615e7000, 0x0005f105, 0x4803c856, 0x59325809,
+ 0x4a038006, 0xe0000000, 0x1c01f000, 0x4c5c0000,
+ 0x4178b800, 0x0501f809, 0x5c00b800, 0x1c01f000,
+ 0x4803c856, 0x4c5c0000, 0x905cbd41, 0x0501f803,
+ 0x5c00b800, 0x1c01f000, 0x4803c856, 0x4dc00000,
+ 0x4c500000, 0x4c580000, 0x4c540000, 0x640370e8,
+ 0x805cb9c0, 0x05000009, 0x64138807, 0x4a0370f2,
+ 0x80000000, 0x59b800ea, 0x8c000510, 0x05000003,
+ 0x59b800e0, 0x05fdf7fc, 0x608380ee, 0x0501fd02,
+ 0x59c00007, 0x4a038006, 0x20000000, 0x59c00007,
+ 0x4a038006, 0x8000000a, 0x59c00007, 0x4a038006,
+ 0x8000000b, 0x59c00007, 0x4a038006, 0x40000001,
+ 0x83c00580, 0x00007700, 0x05000003, 0x600380ee,
+ 0x05fdf7ef, 0x608380ee, 0x60000810, 0x59c00007,
+ 0x8c00051e, 0x05000006, 0x4a038006, 0x90000001,
+ 0x80040840, 0x05fe07fa, 0x05fdfa4c, 0x83c00580,
+ 0x00007700, 0x05000003, 0x600380ee, 0x05fdf7f3,
+ 0x4178a000, 0x805cb9c0, 0x0502000f, 0x6080b000,
+ 0x91b8ac20, 0x0561fd16, 0x640770fb, 0x4a037020,
+ 0x001012ac, 0x59a8005e, 0x82000500, 0x0000ffff,
+ 0x48037021, 0x4a037035, 0x00110202, 0x4a037038,
+ 0x001012a3, 0x640770fb, 0x6080b000, 0x91b8ac00,
+ 0x0561fd07, 0x6100b000, 0xb1b8ac00, 0x0561fd04,
+ 0x805cb9c0, 0x05020006, 0x4a0370e4, 0xaaaaaaaa,
+ 0x4a0370e5, 0xaaaaaaaa, 0x0501f005, 0x4a0370e4,
+ 0x82aa2a82, 0x4a0370e5, 0xaaaaa2aa, 0x4a0370e6,
+ 0xaaaaaaaa, 0x640370fb, 0x4a0370e6, 0xaaaaaaaa,
+ 0x608380ee, 0x4a038006, 0x90000000, 0x59c00007,
+ 0x8c00051e, 0x05fe0a19, 0x600380ee, 0x4a038006,
+ 0x90000000, 0x59c00007, 0x8c00051e, 0x05fe0a13,
+ 0x5c00a800, 0x5c00b000, 0x5c00a000, 0x5c038000,
+ 0x1c01f000, 0x4d300000, 0x4d2c0000, 0x4d340000,
+ 0x4d400000, 0x4cfc0000, 0x4d380000, 0x4d3c0000,
+ 0x4d440000, 0x4d4c0000, 0x4d480000, 0x4c5c0000,
+ 0x4c600000, 0x4c640000, 0x4d040000, 0x4cf40000,
+ 0x4cf80000, 0x0001f8c8, 0x5c01f000, 0x5c01e800,
+ 0x5c020800, 0x5c00c800, 0x5c00c000, 0x5c00b800,
+ 0x5c029000, 0x5c029800, 0x5c028800, 0x5c027800,
+ 0x5c027000, 0x5c01f800, 0x5c028000, 0x5c026800,
+ 0x5c025800, 0x5c026000, 0x1c01f000, 0x493bc857,
+ 0x0001f0f5, 0x83300500, 0x000000ff, 0x90000c88,
+ 0x05fe19e6, 0x0c01f023, 0x1c01f000, 0x82000d00,
+ 0xc2000038, 0x05fe09da, 0x05fdf9e0, 0x00000000,
+ 0x00000048, 0x00000054, 0x00000053, 0x00100c17,
+ 0x00100c42, 0x00100c30, 0x00100c5c, 0x00100c21,
+ 0x00100c2a, 0x00100c33, 0x00100c58, 0x00100ccf,
+ 0x00100c17, 0x00100cd1, 0x00100c17, 0x00100c17,
+ 0x00100cd4, 0x00100cd8, 0x00100ce9, 0x00100cfb,
+ 0x00100c84, 0x00100d02, 0x00100d0c, 0x00100c17,
+ 0x00100c17, 0x00100c5d, 0x00100c17, 0x05fdf9c3,
+ 0x00100c20, 0x00100d8d, 0x00100ca1, 0x00100cc1,
+ 0x00100c20, 0x00100c20, 0x00100c20, 0x001010e6,
+ 0x05fdf9ba, 0x4803c856, 0x59300004, 0x8c00053e,
+ 0x05020003, 0x61567000, 0x0009f000, 0x053dfc92,
+ 0x05fc07fd, 0x1c01f000, 0x4803c856, 0x0501f8e3,
+ 0x40002800, 0x41782000, 0x615a7000, 0x0009f000,
+ 0x4803c856, 0x615e7000, 0x0009f000, 0x4803c856,
+ 0x0531ff4c, 0x4a0370e5, 0x00800000, 0x40000000,
+ 0x59b800e5, 0x8c00052c, 0x05000007, 0x4a0370e5,
+ 0x00800000, 0x40000000, 0x59b800e5, 0x8c00052c,
+ 0x05fe099a, 0x1c01f000, 0x4803c856, 0x59325809,
0x812e59c0, 0x05000012, 0x59300008, 0x8c00051a,
- 0x0502000b, 0x592c0409, 0x8c00051c, 0x05020003,
+ 0x0502000b, 0x592c040c, 0x8c00051c, 0x05020003,
0x4a026013, 0xffffffff, 0x59300004, 0x8c00053e,
- 0x05020005, 0x61227000, 0x0005f105, 0x641e5a07,
- 0x05fdf7f8, 0x0525fd40, 0x05fc07fb, 0x1c01f000,
- 0x4803c856, 0x83300500, 0x00ffffff, 0x0525f014,
- 0x1c01f000, 0x4c040000, 0x59b808ea, 0x90040d07,
- 0x90040583, 0x05000004, 0x42000000, 0x60000000,
- 0x0501f89a, 0x5c000800, 0x1c01f000, 0x0501f8dd,
- 0x05000015, 0x59325809, 0x812e59c0, 0x05000012,
- 0x592c0205, 0x82000500, 0x000000ff, 0x90000da9,
- 0x0502000d, 0x59300203, 0x90000583, 0x05000008,
- 0x59300808, 0x84040d26, 0x48066008, 0x0001f929,
- 0x6503900d, 0x642370e5, 0x1c01f000, 0x0525fd1a,
- 0x05fc07f8, 0x42000000, 0x00109870, 0x0541f970,
- 0x5988014a, 0x80000000, 0x4803114a, 0x6503900d,
- 0x42000000, 0xc0000000, 0x0001f11e, 0x4c5c0000,
- 0x4c600000, 0x4c640000, 0x4200c800, 0x00109937,
- 0x6000b860, 0x6014c002, 0x0521fcca, 0x4a0370e4,
- 0x02000000, 0x5c00c800, 0x5c00c000, 0x5c00b800,
- 0x1c01f000, 0x4933c857, 0x0005f0e7, 0x4933c857,
- 0x0501fb3d, 0x1c01f000, 0x41300800, 0x800409c0,
- 0x05fe09da, 0x05fdf9cf, 0x42000000, 0x00109870,
- 0x0541f94f, 0x4933c857, 0x813261c0, 0x05fc09d3,
- 0x0501f82f, 0x40002800, 0x0541f8b2, 0x0501f894,
- 0x05000006, 0x5932680a, 0x59340200, 0x8c00050e,
- 0x59300416, 0x05360bc0, 0x1c01f000, 0x42000000,
- 0x00109870, 0x0541f93e, 0x4933c857, 0x813261c0,
- 0x05fc09c2, 0x0501f886, 0x05000009, 0x0535f953,
- 0x05000007, 0x59325809, 0x592c0209, 0x8400054e,
- 0x48025a09, 0x417a7800, 0x0531fe15, 0x1c01f000,
- 0x485fc857, 0x5c000000, 0x4d780000, 0x4203e000,
- 0x50000000, 0x6014b900, 0x05fdf1b4, 0x4933c857,
- 0x913004a0, 0x05fe19ad, 0x83300c00, 0x001098e3,
- 0x50040000, 0x80000000, 0x05001002, 0x44000800,
- 0x1c01f000, 0x4933c857, 0x05fdf7f6, 0x4807c856,
- 0x59b800ea, 0x8c000510, 0x05fc07fd, 0x59b800e0,
- 0x4803c857, 0x1c01f000, 0x4803c856, 0x42000000,
- 0x10000000, 0x41300800, 0x0501f020, 0x8c000510,
- 0x00000124, 0x4c040000, 0x0501f808, 0x5c000800,
- 0x90100488, 0x00001124, 0x4c040000, 0x05fdfef7,
- 0x5c000800, 0x0001f124, 0x59b800e2, 0x59b820e2,
- 0x80100580, 0x05fe07fd, 0x80102114, 0x0501f001,
- 0x40101800, 0x800c190a, 0x9010051f, 0x900c1d1f,
- 0x800c2480, 0x9010251f, 0x1c01f000, 0x40680000,
- 0x406c0800, 0x0501f805, 0x60058800, 0x05020002,
- 0x60018800, 0x1c01f000, 0x82000500, 0xf0000000,
+ 0x05020005, 0x61227000, 0x0009f000, 0x641e5a0a,
+ 0x05fdf7f8, 0x053dfc64, 0x05fc07fb, 0x1c01f000,
+ 0x4803c856, 0x83300500, 0x00ffffff, 0x0539f306,
+ 0x1c01f000, 0x4178b800, 0x59300817, 0x82040580,
+ 0xdeaddead, 0x05000011, 0x82040580, 0x00110228,
+ 0x05000009, 0x48066009, 0x497a6017, 0x0001f945,
+ 0x59300008, 0x60840800, 0x80040540, 0x48026008,
+ 0x0501f014, 0x48066009, 0x42026000, 0x00111ad0,
+ 0x0001f945, 0x0501f00f, 0x59a800de, 0x80000d40,
+ 0x4807c857, 0x05fc0965, 0x58041000, 0x49780800,
+ 0x59a800df, 0x80040580, 0x05020004, 0x497b50de,
+ 0x497b50df, 0x0501f002, 0x480b50de, 0x05fdf7ee,
+ 0x6503900d, 0x642370e5, 0x64126203, 0x1c01f000,
+ 0x4803c856, 0x813261c0, 0x05fc0954, 0x0551f842,
+ 0x0500000b, 0x59325809, 0x592c020c, 0x84000552,
+ 0x48025a0c, 0x0505f8a4, 0x59300004, 0x8c00053e,
+ 0x05020004, 0x417a7800, 0x054dfb83, 0x1c01f000,
+ 0x053dfc25, 0x05fc07fc, 0x1c01f000, 0x4c040000,
+ 0x59b808ea, 0x90040d07, 0x90040583, 0x05000004,
+ 0x42000000, 0x60000000, 0x0501f894, 0x5c000800,
+ 0x1c01f000, 0x0501f8d7, 0x05000015, 0x59325809,
+ 0x812e59c0, 0x05000012, 0x592c0208, 0x82000500,
+ 0x000000ff, 0x90000da9, 0x0502000d, 0x59300203,
+ 0x90000583, 0x05000008, 0x59300808, 0x84040d26,
+ 0x48066008, 0x0001f945, 0x6503900d, 0x642370e5,
+ 0x1c01f000, 0x053dfc04, 0x05fc07f8, 0x42000000,
+ 0x0010e44c, 0x0561fb23, 0x59880151, 0x80000000,
+ 0x48031151, 0x6503900d, 0x42000000, 0xc0000000,
+ 0x0001f13a, 0x4c5c0000, 0x4c600000, 0x4c640000,
+ 0x4200c800, 0x00110209, 0x6000b860, 0x6014c002,
+ 0x0531ffed, 0x4a0370e4, 0x02000000, 0x5c00c800,
+ 0x5c00c000, 0x5c00b800, 0x1c01f000, 0x4933c857,
+ 0x0005f7dc, 0x4933c857, 0x0501fbab, 0x1c01f000,
+ 0x41300800, 0x800409c0, 0x05fe0904, 0x05fdf8fc,
+ 0x42000000, 0x0010e44c, 0x0561fb02, 0x4933c857,
+ 0x813261c0, 0x05fc08fd, 0x0501f830, 0x40002800,
+ 0x0561fa66, 0x0501f88e, 0x05000006, 0x5932680a,
+ 0x59340200, 0x8c00050e, 0x59300416, 0x05520ad7,
+ 0x1c01f000, 0x42000000, 0x0010e44c, 0x0561faf1,
+ 0x4933c857, 0x813261c0, 0x05fc08ec, 0x0501f880,
+ 0x0500000a, 0x054dffd8, 0x05000008, 0x59325809,
+ 0x592c020c, 0x84000544, 0x8400054e, 0x48025a0c,
+ 0x417a7800, 0x054dfb1c, 0x1c01f000, 0x485fc857,
+ 0x5c000000, 0x4d780000, 0x4203e000, 0x50000000,
+ 0x6014b900, 0x05fdf0dd, 0x4933c857, 0x913004a0,
+ 0x05fe18d6, 0x83300c00, 0x0010e4c1, 0x50040000,
+ 0x80000000, 0x05001002, 0x44000800, 0x1c01f000,
+ 0x4933c857, 0x05fdf7f6, 0x4807c856, 0x59b800ea,
+ 0x8c000510, 0x05fc07fd, 0x59b800e0, 0x4803c857,
+ 0x1c01f000, 0x4803c856, 0x42000000, 0x10000000,
+ 0x41300800, 0x0501f019, 0x8c000510, 0x00000140,
+ 0x4c040000, 0x0501f808, 0x5c000800, 0x90100488,
+ 0x00001140, 0x4c040000, 0x05fdfeab, 0x5c000800,
+ 0x0001f140, 0x59b800e2, 0x59b820e2, 0x80100580,
+ 0x05fe07fd, 0x80102114, 0x0501f001, 0x40101800,
+ 0x800c190a, 0x9010051f, 0x900c1d1f, 0x800c2480,
+ 0x9010251f, 0x1c01f000, 0x82000500, 0xf0000000,
0x82040d00, 0x0fffffff, 0x80040d40, 0x4807c857,
- 0x42001000, 0x001097b4, 0x50080000, 0x80000540,
+ 0x42001000, 0x0010e38b, 0x50080000, 0x80000540,
0x05020004, 0x640f70e5, 0x4a0370e4, 0x00000300,
0x80000000, 0x44001000, 0x60001008, 0x59b800ea,
- 0x8c000510, 0x0500000b, 0x05fdffd8, 0x90100488,
- 0x05001007, 0x4c040000, 0x4c080000, 0x05fdfec7,
+ 0x8c000510, 0x0500000b, 0x05fdffdf, 0x90100488,
+ 0x05001007, 0x4c040000, 0x4c080000, 0x05fdfe82,
0x5c001000, 0x5c000800, 0x0501f01c, 0x59b800ea,
0x8c000516, 0x05020019, 0x4a0370e4, 0x00300000,
0x480770e1, 0x600011fe, 0x80081040, 0x05000010,
0x59b808e4, 0x8c040528, 0x05fe07fc, 0x42001000,
- 0x001097b4, 0x50080000, 0x80000040, 0x05020004,
- 0x640b70e5, 0x4a0370e4, 0x00000200, 0x05fc1947,
+ 0x0010e38b, 0x50080000, 0x80000040, 0x05020004,
+ 0x640b70e5, 0x4a0370e4, 0x00000200, 0x05fc1877,
0x44001000, 0x8c04052c, 0x1c01f000, 0x41f80000,
- 0x50000000, 0x05fdf941, 0x80081040, 0x05fe07d8,
- 0x41f80000, 0x50000000, 0x05fdf93c, 0x4d380000,
+ 0x50000000, 0x05fdf871, 0x80081040, 0x05fe07d8,
+ 0x41f80000, 0x50000000, 0x05fdf86c, 0x4d380000,
0x59300c07, 0x90040589, 0x05020004, 0x611e7000,
- 0x0005f905, 0x80000580, 0x5c027000, 0x1c01f000,
- 0x4c500000, 0x6407900d, 0x59c8a020, 0x640b900d,
+ 0x0009f800, 0x80000580, 0x5c027000, 0x1c01f000,
+ 0x4c500000, 0x59a80249, 0x8c000518, 0x05000006,
+ 0x640b900d, 0x59c8a020, 0x640f900d, 0x59c80820,
+ 0x0501f005, 0x6407900d, 0x59c8a020, 0x640b900d,
0x59c80820, 0x8c50052e, 0x05000002, 0x900409c0,
- 0x82040d00, 0x0000ffff, 0x0521fbd1, 0x5c00a000,
- 0x1c01f000, 0x42000000, 0x00109867, 0x0541f89c,
- 0x05fdfff0, 0x05000043, 0x4933c857, 0x59300407,
- 0x90000580, 0x0500003f, 0x59c82021, 0x6407900d,
+ 0x82040d00, 0x0000ffff, 0x0531fd12, 0x5c00a000,
+ 0x1c01f000, 0x42000000, 0x0010e43e, 0x0561fa4d,
+ 0x05fdffe8, 0x05000052, 0x4933c857, 0x59300407,
+ 0x90000580, 0x0500004e, 0x59c82021, 0x6407900d,
0x59c82821, 0x82142d00, 0x0000ffff, 0x59325809,
- 0x812e59c0, 0x05000037, 0x5932680a, 0x0519fad3,
- 0x05360af1, 0x599c0019, 0x8c00050c, 0x05020015,
- 0x0519face, 0x05020013, 0x59300813, 0x4807c857,
- 0x592c0409, 0x8c00051c, 0x0502000c, 0x8400055c,
- 0x48025c09, 0x592c0a05, 0x82040d00, 0x000000ff,
- 0xb0040588, 0x05000003, 0x90040598, 0x05020003,
- 0x59300813, 0x48065803, 0x4a026013, 0x7fffffff,
- 0x48166015, 0x0519fab9, 0x05000004, 0x59300416,
- 0x8c00051c, 0x05000004, 0x599c0019, 0x8c00050c,
- 0x05000014, 0x0501fc09, 0x05020012, 0x0501f9b7,
- 0x40280000, 0x4802600f, 0x05000005, 0x4832600d,
- 0x50200000, 0x4802600c, 0x4822600e, 0x59300416,
- 0x8c00051c, 0x05020004, 0x599c0019, 0x8c00050c,
- 0x05020871, 0x6503900d, 0x642370e5, 0x1c01f000,
- 0x42000000, 0x00109870, 0x0541f855, 0x5988014c,
- 0x80000000, 0x4803114c, 0x6503900d, 0x42000000,
- 0xc0000000, 0x0001f11e, 0x4cf80000, 0x58f40000,
- 0x8001f540, 0x0501f81e, 0x41781800, 0x0501f8ce,
- 0x05020013, 0x44140800, 0x0501f826, 0x05000010,
- 0x40043800, 0x60041800, 0x40142000, 0x0501f8c6,
- 0x0502000b, 0x801c3800, 0x501c0000, 0x44000800,
- 0x0501f80f, 0x801c0580, 0x05000004, 0x44103800,
- 0x801c3840, 0x44143800, 0x0501f816, 0x5c01f000,
- 0x1c01f000, 0x80f9f1c0, 0x05020003, 0x58f41202,
- 0x0501f002, 0x601c1000, 0x1c01f000, 0x80f9f1c0,
- 0x05020005, 0x58f40401, 0x90000482, 0x80f40400,
- 0x0501f004, 0x58f80401, 0x90000482, 0x80f80400,
- 0x50002800, 0x80000000, 0x50002000, 0x1c01f000,
- 0x80f9f1c0, 0x05020006, 0x58f40401, 0x90000482,
- 0x05fc18a2, 0x4801ec01, 0x0501f008, 0x58f80401,
- 0x90000482, 0x05fc189d, 0x4801f401, 0x90000582,
- 0x05020002, 0x0501f817, 0x58f40202, 0x80000040,
- 0x4801ea02, 0x05fc0895, 0x90000581, 0x1c01f000,
- 0x82f40580, 0xffffffff, 0x0500000d, 0x58f40201,
- 0x82000580, 0x0000dcb3, 0x05fe088c, 0x58f40000,
- 0x8001f540, 0x05000005, 0x58f80201, 0x82000580,
- 0x0000ddb9, 0x05fe0885, 0x0501f809, 0x1c01f000,
- 0x4d2c0000, 0x40fa5800, 0x05fdfc12, 0x4979e800,
- 0x4179f000, 0x5c025800, 0x1c01f000, 0x80f5e9c0,
- 0x05000008, 0x80f9f1c0, 0x05fe0ff6, 0x4d2c0000,
- 0x40f65800, 0x05fdfc07, 0x4179e800, 0x5c025800,
- 0x1c01f000, 0x4cf40000, 0x0519fa30, 0x0502002e,
- 0x59300808, 0x82040500, 0x00003000, 0x0502002a,
- 0x8c040522, 0x0500002a, 0x59300021, 0x8001ed40,
- 0x05fc0866, 0x82000580, 0xffffffff, 0x05000022,
- 0x58f40201, 0x82000580, 0x0000dcb3, 0x05fe085f,
- 0x58f40a02, 0x82040500, 0x0000fffe, 0x05000003,
- 0x05fdff86, 0x58f40a02, 0x9004048f, 0x05021045,
- 0x80040800, 0x4805ea02, 0x90040588, 0x05000048,
- 0x90040488, 0x05001008, 0x58f40000, 0x8001ed40,
- 0x05fc084e, 0x58f40201, 0x82000580, 0x0000ddb9,
- 0x05fe084a, 0x58f40401, 0x90000c02, 0x4805ec01,
- 0x80f40400, 0x59300814, 0x44040000, 0x80000000,
- 0x45780000, 0x5c01e800, 0x1c01f000, 0x60001020,
- 0x4203e000, 0xb0800000, 0x4203f800, 0x0c000000,
- 0x40000000, 0x80081040, 0x05fc0838, 0x05ffb7fb,
- 0x59300808, 0x84040d62, 0x48066008, 0x4203f800,
- 0x08000000, 0x4d2c0000, 0x05fdfb9f, 0x05000019,
- 0x492e6021, 0x4a025a01, 0x0000dcb3, 0x59300009,
- 0x80001d40, 0x05fc0829, 0x580c0810, 0x48065803,
+ 0x812e59c0, 0x05000046, 0x59300008, 0x8c000536,
+ 0x05020043, 0x5932680a, 0x0525fb16, 0x05520a03,
+ 0x599c0019, 0x8c00050c, 0x0502001e, 0x0525fb11,
+ 0x0502001c, 0x59300813, 0x4807c857, 0x592c040c,
+ 0x8c00051c, 0x05020015, 0x8400055c, 0x48025c0c,
+ 0x42000000, 0x0010e3ba, 0x0561fa2a, 0x592c0a08,
+ 0x82040d00, 0x000000ff, 0xb0040588, 0x05000007,
+ 0x90040598, 0x05000005, 0xb00405a8, 0x05000003,
+ 0xb00405aa, 0x05020005, 0x59300013, 0x0555f8fb,
+ 0x80000d40, 0x48065806, 0x4a026013, 0x7fffffff,
+ 0x59300008, 0x8c000516, 0x0502001d, 0x48166015,
+ 0x0525faf0, 0x05000004, 0x59300416, 0x8c00051c,
+ 0x05000004, 0x599c0019, 0x8c00050c, 0x05000014,
+ 0x0501fcfc, 0x05020012, 0x0501fa0b, 0x40280000,
+ 0x4802600f, 0x05000005, 0x4832600d, 0x50200000,
+ 0x4802600c, 0x4822600e, 0x59300416, 0x8c00051c,
+ 0x05020004, 0x599c0019, 0x8c00050c, 0x05020871,
+ 0x6503900d, 0x642370e5, 0x1c01f000, 0x42000000,
+ 0x0010e44c, 0x0561f9f7, 0x59880153, 0x80000000,
+ 0x48031153, 0x6503900d, 0x42000000, 0xc0000000,
+ 0x0001f13a, 0x4cf80000, 0x58f40000, 0x8001f540,
+ 0x0501f81e, 0x41781800, 0x0501f903, 0x05020013,
+ 0x44140800, 0x0501f826, 0x05000010, 0x40043800,
+ 0x60041800, 0x40142000, 0x0501f8fb, 0x0502000b,
+ 0x801c3800, 0x501c0000, 0x44000800, 0x0501f80f,
+ 0x801c0580, 0x05000004, 0x44103800, 0x801c3840,
+ 0x44143800, 0x0501f816, 0x5c01f000, 0x1c01f000,
+ 0x80f9f1c0, 0x05020003, 0x58f41202, 0x0501f002,
+ 0x601c1000, 0x1c01f000, 0x80f9f1c0, 0x05020005,
+ 0x58f40401, 0x90000482, 0x80f40400, 0x0501f004,
+ 0x58f80401, 0x90000482, 0x80f80400, 0x50002800,
+ 0x80000000, 0x50002000, 0x1c01f000, 0x80f9f1c0,
+ 0x05020006, 0x58f40401, 0x90000482, 0x05f81fbb,
+ 0x4801ec01, 0x0501f008, 0x58f80401, 0x90000482,
+ 0x05f81fb6, 0x4801f401, 0x90000582, 0x05020002,
+ 0x0501f817, 0x58f40202, 0x80000040, 0x4801ea02,
+ 0x05f80fae, 0x90000581, 0x1c01f000, 0x82f40580,
+ 0xffffffff, 0x0500000d, 0x58f40201, 0x82000580,
+ 0x0000dcb3, 0x05fa0fa5, 0x58f40000, 0x8001f540,
+ 0x05000005, 0x58f80201, 0x82000580, 0x0000ddb9,
+ 0x05fa0f9e, 0x0501f809, 0x1c01f000, 0x4d2c0000,
+ 0x40fa5800, 0x05fdfb51, 0x4979e800, 0x4179f000,
+ 0x5c025800, 0x1c01f000, 0x80f5e9c0, 0x05000008,
+ 0x80f9f1c0, 0x05fe0ff6, 0x4d2c0000, 0x40f65800,
+ 0x05fdfb46, 0x4179e800, 0x5c025800, 0x1c01f000,
+ 0x4cf40000, 0x0525fa67, 0x0502002e, 0x59300808,
+ 0x82040500, 0x00003000, 0x0502002a, 0x8c040522,
+ 0x0500002a, 0x5930002b, 0x8001ed40, 0x05f80f7f,
+ 0x82000580, 0xffffffff, 0x05000022, 0x58f40201,
+ 0x82000580, 0x0000dcb3, 0x05fa0f78, 0x58f40a02,
+ 0x82040500, 0x0000fffe, 0x05000003, 0x05fdff86,
+ 0x58f40a02, 0x9004048f, 0x0502107a, 0x80040800,
+ 0x4805ea02, 0x90040588, 0x0500007d, 0x90040488,
+ 0x05001008, 0x58f40000, 0x8001ed40, 0x05f80f67,
+ 0x58f40201, 0x82000580, 0x0000ddb9, 0x05fa0f63,
+ 0x58f40401, 0x90000c02, 0x4805ec01, 0x80f40400,
+ 0x59300814, 0x44040000, 0x80000000, 0x45780000,
+ 0x5c01e800, 0x1c01f000, 0x60001020, 0x4203e000,
+ 0xb0800000, 0x4203f800, 0x0c000000, 0x40000000,
+ 0x80081040, 0x05f80f51, 0x05ffb7fb, 0x59300808,
+ 0x84040d62, 0x48066008, 0x4203f800, 0x08000000,
+ 0x4d2c0000, 0x05fdfae0, 0x0500004e, 0x492e602b,
+ 0x4a025a01, 0x0000dcb3, 0x59300009, 0x80001d40,
+ 0x05f80f42, 0x580c0813, 0x48065803, 0x580c0208,
+ 0x82000500, 0x000000ff, 0xb00005a8, 0x05000007,
+ 0x90000582, 0x05000005, 0x90000598, 0x05000003,
+ 0x90000588, 0x0502002b, 0x580c1801, 0x800c19c0,
+ 0x05f80f32, 0x580c0c09, 0x90040d03, 0x90040582,
+ 0x05020003, 0x592c0803, 0x0501f022, 0x580c2a0a,
+ 0x580c000b, 0x59301813, 0x800c0580, 0x05000021,
+ 0x90040580, 0x0500000e, 0x40140000, 0x4c080000,
+ 0x400c1000, 0x41780800, 0x0539f8d4, 0x800409c0,
+ 0x05fa0f1e, 0x90140c08, 0x0539f8b4, 0x5c001000,
+ 0x40041800, 0x592c0803, 0x0501f015, 0x90140408,
+ 0x4c080000, 0x400c1000, 0x41780800, 0x0539f8c7,
+ 0x800409c0, 0x05fa0f11, 0x40140800, 0x0539f8a7,
+ 0x5c001000, 0x40041800, 0x592c0803, 0x0501f008,
0x59301813, 0x40040000, 0x800c0580, 0x05020004,
0x497a5a02, 0x64125c01, 0x0501f007, 0x64065a02,
0x641a5c01, 0x497a5804, 0x400c0000, 0x80040480,
- 0x48025805, 0x412de800, 0x5c025800, 0x05fdf7be,
- 0x5c025800, 0x4a026021, 0xffffffff, 0x05fdf7d2,
- 0x4d2c0000, 0x58f65800, 0x05fdfba2, 0x40f65800,
- 0x05fdfba0, 0x5c025800, 0x05fdf7f7, 0x4d2c0000,
- 0x05fdfb79, 0x05fc07fa, 0x4a025a01, 0x0000ddb9,
+ 0x48025805, 0x412de800, 0x5c025800, 0x05fdf789,
+ 0x5c025800, 0x4a02602b, 0xffffffff, 0x05fdf79d,
+ 0x4d2c0000, 0x58f65800, 0x05fdfaac, 0x40f65800,
+ 0x05fdfaaa, 0x5c025800, 0x05fdf7f7, 0x4d2c0000,
+ 0x05fdfa85, 0x05fc07fa, 0x4a025a01, 0x0000ddb9,
0x640a5c01, 0x492de800, 0x412de800, 0x5c025800,
- 0x05fdf7b9, 0x05fdff48, 0x90f40404, 0x800c0400,
+ 0x05fdf784, 0x05fdff13, 0x90f40404, 0x800c0400,
0x40000800, 0x50040000, 0x80100580, 0x05000012,
0x90040c02, 0x80081040, 0x05fe07fb, 0x80f9f1c0,
0x0500000e, 0x58f41202, 0x90081487, 0x90f80402,
@@ -675,27 +999,27 @@ static const uint32_t isp_2500_risc_code[] = {
0x05000005, 0x90040c02, 0x80081040, 0x05fe07fb,
0x0501f002, 0x1c01f000, 0x90000541, 0x05fdf7fe,
0x4cf40000, 0x4cf80000, 0x4001e800, 0x812e59c0,
- 0x05000021, 0x592c0a07, 0x800409c0, 0x0502001e,
+ 0x05000021, 0x592c0a0a, 0x800409c0, 0x0502001e,
0x82f40580, 0xffffffff, 0x05000019, 0x58f40201,
- 0x82000580, 0x0000dcb3, 0x05fa0fd8, 0x58f40000,
+ 0x82000580, 0x0000dcb3, 0x05fa0ebc, 0x58f40000,
0x8001f540, 0x05000005, 0x58f80201, 0x82000580,
- 0x0000ddb9, 0x05fa0fd1, 0x41783800, 0x58f44003,
- 0x0501f833, 0x05020009, 0x05fdff51, 0x497a6021,
+ 0x0000ddb9, 0x05fa0eb5, 0x41783800, 0x58f44003,
+ 0x0501f833, 0x05020009, 0x05fdff1c, 0x497a602b,
0x59300808, 0x84040d22, 0x48066008, 0x5c01f000,
- 0x5c01e800, 0x1c01f000, 0x05fdff49, 0x64465a07,
- 0x05fdf7f7, 0x05fdff2f, 0x05fdf7f5, 0x4cf40000,
+ 0x5c01e800, 0x1c01f000, 0x05fdff14, 0x64465a0a,
+ 0x05fdf7f7, 0x05fdfefa, 0x05fdf7f5, 0x4cf40000,
0x4cf80000, 0x4001e800, 0x90040581, 0x0502001c,
0x82f40580, 0xffffffff, 0x05000017, 0x58f40201,
- 0x82000580, 0x0000dcb3, 0x05fa0fb4, 0x58f40000,
+ 0x82000580, 0x0000dcb3, 0x05fa0e98, 0x58f40000,
0x8001f540, 0x05000005, 0x58f80201, 0x82000580,
- 0x0000ddb9, 0x05fa0fad, 0x41783800, 0x58f44003,
- 0x0501f80f, 0x05020007, 0x05fdff2d, 0x60040800,
- 0x497a6021, 0x5c01f000, 0x5c01e800, 0x1c01f000,
- 0x05fdff27, 0x60440800, 0x05fdf7fa, 0x4c040000,
- 0x05fdff0c, 0x5c000800, 0x05fdf7f6, 0x4803c856,
+ 0x0000ddb9, 0x05fa0e91, 0x41783800, 0x58f44003,
+ 0x0501f80f, 0x05020007, 0x05fdfef8, 0x60040800,
+ 0x497a602b, 0x5c01f000, 0x5c01e800, 0x1c01f000,
+ 0x05fdfef2, 0x60440800, 0x05fdf7fa, 0x4c040000,
+ 0x05fdfed7, 0x5c000800, 0x05fdf7f6, 0x4803c856,
0x401c2000, 0x41781800, 0x4c200000, 0x05fdff96,
0x5c004000, 0x05020022, 0x40202000, 0x60041800,
- 0x05fdff91, 0x0502001e, 0x05fdfed7, 0x40082800,
+ 0x05fdff91, 0x0502001e, 0x05fdfea2, 0x40082800,
0x90f43404, 0x50182000, 0x40100000, 0x801c0580,
0x05000004, 0x60041800, 0x05fdff87, 0x05020014,
0x90183402, 0x80142840, 0x05fe07f7, 0x80f9f1c0,
@@ -703,13238 +1027,401 @@ static const uint32_t isp_2500_risc_code[] = {
0x50182000, 0x40100000, 0x801c0580, 0x05000004,
0x60041800, 0x05fdff78, 0x05020005, 0x90183402,
0x80142840, 0x05fe07f7, 0x1c01f000, 0x90000541,
- 0x05fdf7fe, 0x05f9ff71, 0x592c0409, 0x8c000502,
- 0x05fc07fd, 0x592c040a, 0x80000540, 0x05fc07fa,
- 0x90000c82, 0x0500100e, 0x58380001, 0x80007540,
- 0x05f80f66, 0x58380205, 0x9000050f, 0x82000400,
- 0x00100cde, 0x50004000, 0x40040000, 0x800409c0,
- 0x05000004, 0x90040c85, 0x05fe17f4, 0x80204400,
- 0x50200000, 0x80387c00, 0x583c2800, 0x583c2001,
- 0x583c1002, 0x592c0a08, 0x592c300e, 0x59303808,
- 0x497a6014, 0x497a6015, 0x48166010, 0x48126011,
- 0x480a6012, 0x481a6013, 0x80040840, 0x4806600f,
- 0x00000163, 0x80204000, 0x50201800, 0x800c19c0,
- 0x0502000a, 0x58380001, 0x80007540, 0x05f80f43,
- 0x58380205, 0x9000050f, 0x82000400, 0x00100cde,
- 0x50004000, 0x50201800, 0x483a600d, 0x480e600c,
- 0x4822600e, 0x0001f163, 0x4803c856, 0x592c0209,
- 0x8c00051e, 0x05020016, 0x50200000, 0x80306c00,
- 0x40240000, 0x0c01f001, 0x00100ac6, 0x00100ac6,
- 0x00100ace, 0x00100ac6, 0x00100ac6, 0x00100ac6,
- 0x00100ac6, 0x00100ac6, 0x00100ace, 0x00100ac6,
- 0x00100ace, 0x00100ac6, 0x00100ac6, 0x00100ace,
- 0x00100ac6, 0x00100ac6, 0x05f9ff20, 0x8400051e,
- 0x48025a09, 0x50200000, 0x80306c00, 0x58343801,
- 0x481e6011, 0x0501f007, 0x58341802, 0x58342800,
- 0x58343801, 0x480e6012, 0x48166010, 0x481e6011,
- 0x0501f1ea, 0x4933c857, 0x5931f809, 0x59301006,
- 0x800811c0, 0x05000009, 0x41780800, 0x60280000,
- 0x0521fd30, 0x80080102, 0x05020002, 0x84001542,
- 0x80081040, 0x4809fc07, 0x640a6006, 0x592c040a,
- 0x90000508, 0x05000008, 0x0501f82b, 0x59300203,
- 0x90000584, 0x05020003, 0x61227000, 0x0005f905,
- 0x1c01f000, 0x4cfc0000, 0x58fc0205, 0x82000500,
- 0x000000ff, 0xb0000588, 0x05020009, 0x58fc0409,
- 0x8c000500, 0x05000006, 0x58fc080c, 0x8c040516,
- 0x05000015, 0x58fc0008, 0x0501f00a, 0x58fc0409,
- 0x8c000512, 0x05020012, 0x58fc0c0a, 0x8c040516,
- 0x05020003, 0x5c01f800, 0x1c01f000, 0x58fc000b,
- 0x59300813, 0x80040580, 0x05020007, 0x59300008,
+ 0x05fdf7fe, 0x05f9fe55, 0x592c020e, 0x8c000502,
+ 0x05fc07fd, 0x497a6014, 0x0501fdbe, 0x412c7000,
+ 0x59300008, 0x84000556, 0x48026008, 0x9004050f,
+ 0x82000c00, 0x001012ac, 0x50044000, 0x80204000,
+ 0x50200000, 0x80187c00, 0x583c2800, 0x583c2001,
+ 0x583c1002, 0x58380a0b, 0x40187000, 0x5818300b,
+ 0x59303808, 0x497a6015, 0x0001f183, 0x592c040e,
+ 0x8c000500, 0x05f80e39, 0x592c0011, 0x48026014,
+ 0x05fdf7e6, 0x592c040c, 0x8c000502, 0x05fc07de,
+ 0x592c040d, 0x80000540, 0x05fc07db, 0x90000c82,
+ 0x0500100e, 0x58380001, 0x80007540, 0x05f80e2b,
+ 0x58380208, 0x9000050f, 0x82000400, 0x001012ac,
+ 0x50004000, 0x40040000, 0x800409c0, 0x05000004,
+ 0x90040c85, 0x05fe17f4, 0x80204400, 0x50200000,
+ 0x80387c00, 0x583c2800, 0x583c2001, 0x583c1002,
+ 0x592c0a0b, 0x592c3011, 0x59303808, 0x497a6014,
+ 0x497a6015, 0x48166010, 0x48126011, 0x480a6012,
+ 0x481a6013, 0x80040840, 0x4806600f, 0x0000018a,
+ 0x80204000, 0x50201800, 0x800c19c0, 0x0502000a,
+ 0x58380001, 0x80007540, 0x05f80e08, 0x58380208,
+ 0x9000050f, 0x82000400, 0x001012ac, 0x50004000,
+ 0x50201800, 0x483a600d, 0x480e600c, 0x4822600e,
+ 0x0001f18a, 0x4803c856, 0x592c020c, 0x8c00051e,
+ 0x05020016, 0x50200000, 0x80306c00, 0x40240000,
+ 0x0c01f001, 0x00100ff5, 0x00100ff5, 0x00100ffd,
+ 0x00100ff5, 0x00100ff5, 0x00100ff5, 0x00100ff5,
+ 0x00100ff5, 0x00100ffd, 0x00100ff5, 0x00100ffd,
+ 0x00100ff5, 0x00100ff5, 0x00100ffd, 0x00100ff5,
+ 0x00100ff5, 0x05f9fde5, 0x8400051e, 0x48025a0c,
+ 0x50200000, 0x80306c00, 0x58343801, 0x481e6011,
+ 0x0501f007, 0x58341802, 0x58342800, 0x58343801,
+ 0x480e6012, 0x48166010, 0x481e6011, 0x0501f289,
+ 0x4933c857, 0x5931f809, 0x59301006, 0x800811c0,
+ 0x05000009, 0x41780800, 0x60280000, 0x0535ff83,
+ 0x80080102, 0x05020002, 0x84001542, 0x80081040,
+ 0x4809fc0a, 0x640a6006, 0x592c040d, 0x90000508,
+ 0x05000008, 0x0501f834, 0x59300203, 0x90000584,
+ 0x05020003, 0x61227000, 0x0009f800, 0x1c01f000,
+ 0x4cfc0000, 0x58fc0208, 0x82000500, 0x000000ff,
+ 0xb0000588, 0x05000003, 0x900005a2, 0x05020009,
+ 0x58fc040c, 0x8c000500, 0x05000006, 0x58fc080f,
+ 0x8c040516, 0x0500001c, 0x58fc000b, 0x0501f00a,
+ 0x58fc040c, 0x8c000512, 0x05020019, 0x58fc0c0d,
+ 0x8c040516, 0x05020003, 0x5c01f800, 0x1c01f000,
+ 0x58fc000e, 0x4c000000, 0x4d2c0000, 0x40fe5800,
+ 0x59300013, 0x0551fe81, 0x5c025800, 0x80000d40,
+ 0x5c000000, 0x80040580, 0x05020007, 0x59300008,
0x84000500, 0x48026008, 0x61227000, 0x5c01f800,
- 0x0005f105, 0x5c01f800, 0x1c01f000, 0x58fdf80a,
- 0x05fdf7ee, 0x5c000000, 0x4c000000, 0x4803c857,
+ 0x0009f000, 0x5c01f800, 0x1c01f000, 0x58fdf80d,
+ 0x05fdf7e7, 0x5c000000, 0x4c000000, 0x4803c857,
0x4933c857, 0x59b808ea, 0x90040d07, 0x90040580,
0x05000021, 0x90040583, 0x0500001f, 0x59300407,
0x4c000000, 0x64026407, 0x61043000, 0x4a0370e5,
0x00003000, 0x42000000, 0x50000000, 0x41300800,
- 0x4c180000, 0x05fdfd49, 0x5c003000, 0x0500000d,
+ 0x4c180000, 0x05fdfcd5, 0x5c003000, 0x0500000d,
0x60780000, 0x80000040, 0x05fe07ff, 0x80183040,
0x05fe07f5, 0x42000000, 0x40000000, 0x41300800,
- 0x05fdfd3e, 0x59880146, 0x80000000, 0x48031146,
+ 0x05fdfcca, 0x5988014d, 0x80000000, 0x4803114d,
0x4a0370e5, 0x00002000, 0x5c000000, 0x48026407,
0x1c01f000, 0x59300008, 0x84000500, 0x48026008,
0x05fdf7fc, 0x59c00007, 0x4a038006, 0x30000000,
0x40000000, 0x59c00007, 0x8c00050a, 0x05fe07fe,
0x1c01f000, 0x5c000000, 0x4c000000, 0x4803c857,
0x4dc00000, 0x640370e8, 0x608380ee, 0x05fdfff2,
- 0x600380ee, 0x05fdfff0, 0x0519fdc6, 0x05020011,
+ 0x600380ee, 0x05fdfff0, 0x0529f828, 0x05020011,
0x4a038891, 0x0000ffff, 0x497b8880, 0x4ce80000,
- 0x6059d000, 0x0521fbfa, 0x497b8892, 0x6059d000,
- 0x0521fbf7, 0x5c01d000, 0x42000000, 0x001098bb,
- 0x053dfe03, 0x0501f810, 0x5c038000, 0x0519f6ae,
+ 0x6059d000, 0x0531ff78, 0x497b8892, 0x6059d000,
+ 0x0531ff75, 0x5c01d000, 0x42000000, 0x0010e497,
+ 0x055dff48, 0x0501f810, 0x5c038000, 0x0529f102,
0x0501f81f, 0x4c080000, 0x4c140000, 0x42000000,
- 0x001098bc, 0x053dfdfa, 0x0501f807, 0x5c002800,
+ 0x0010e498, 0x055dff3f, 0x0501f807, 0x5c002800,
0x5c001000, 0x48178892, 0x480b8880, 0x5c038000,
0x1c01f000, 0x496fc857, 0x916c0583, 0x05020008,
0x4c080000, 0x4c0c0000, 0x61201100, 0x61fc19ff,
- 0x0511fa48, 0x5c001800, 0x5c001000, 0x60f00800,
- 0x0501fcdf, 0x4a038891, 0x0000ffff, 0x6503900d,
- 0x05fdfb63, 0x640770e8, 0x1c01f000, 0x5c000000,
+ 0x0519ff30, 0x5c001800, 0x5c001000, 0x60f00800,
+ 0x0501ff46, 0x4a038891, 0x0000ffff, 0x6503900d,
+ 0x05fdfaa8, 0x640770e8, 0x1c01f000, 0x5c000000,
0x4c000000, 0x4803c857, 0x59c41080, 0x497b8880,
- 0x4ce80000, 0x6059d000, 0x4c080000, 0x0521fbc8,
+ 0x4ce80000, 0x6059d000, 0x4c080000, 0x0531ff46,
0x5c001000, 0x5c01d000, 0x59c42892, 0x497b8892,
- 0x0519fd88, 0x05020002, 0x1c01f000, 0x61802004,
+ 0x0525ffea, 0x05020002, 0x1c01f000, 0x61802004,
0x59c418a4, 0x900c1d0f, 0x900c0580, 0x0500000c,
0x59c41805, 0x900c1d01, 0x0502000b, 0x59c418a4,
0x900c1d0f, 0x900c0487, 0x05001003, 0x900c048c,
0x05001003, 0x80102040, 0x05fe07f2, 0x497b8891,
0x1c01f000, 0x4c100000, 0x60642000, 0x64078805,
- 0x0505fa61, 0x59c41805, 0x900c1d01, 0x05000005,
+ 0x0505fccf, 0x59c41805, 0x900c1d01, 0x05000005,
0x80102040, 0x05fe07fa, 0x5c002000, 0x05fdf7f4,
- 0x5c002000, 0x05fdf7f0, 0x4803c856, 0x1c01f000,
- 0x00100bc0, 0x00100bc0, 0x00100bc0, 0x00100bd4,
- 0x00100bc0, 0x00100bc0, 0x00100bc0, 0x00100bc0,
- 0x00100bc0, 0x00100bd4, 0x00100bc0, 0x00100bc1,
- 0x00100bc0, 0x00100bc0, 0x00100bc0, 0x00100bc0,
- 0x05f9fe26, 0x900405bb, 0x05fa0e24, 0x592c020b,
- 0x8c000500, 0x0500006c, 0x592c1a08, 0x9004050f,
- 0x82000400, 0x00100cde, 0x50001000, 0x50080000,
+ 0x5c002000, 0x05fdf7f0, 0x60080020, 0x46000000,
+ 0x0162c58b, 0x59c8080b, 0x4807c857, 0x59c8103f,
+ 0x480bc857, 0x05f9fced, 0x4803c856, 0x1c01f000,
+ 0x00101100, 0x00101100, 0x00101100, 0x00101114,
+ 0x00101100, 0x00101100, 0x00101100, 0x00101100,
+ 0x00101100, 0x00101114, 0x00101100, 0x00101101,
+ 0x00101100, 0x00101100, 0x00101100, 0x00101100,
+ 0x05f9fcda, 0x900405bb, 0x05fa0cd8, 0x592c020e,
+ 0x8c000500, 0x0500008d, 0x592c1a0b, 0x9004050f,
+ 0x82000400, 0x001012ac, 0x50001000, 0x50080000,
0x59302015, 0x4802600c, 0x492e600d, 0x480a600e,
0x480e600f, 0x48126014, 0x5c025800, 0x1c01f000,
- 0x9004050f, 0x82000400, 0x00100cde, 0x50001000,
- 0x50080000, 0x592c1a08, 0x4802600c, 0x492e600d,
+ 0x9004050f, 0x82000400, 0x001012ac, 0x50001000,
+ 0x50080000, 0x592c1a0b, 0x4802600c, 0x492e600d,
0x480a600e, 0x480e600f, 0x497a6014, 0x05fdf7f3,
- 0x8c040500, 0x05020050, 0x82040d00, 0x00000080,
- 0x0500004d, 0x0001f174, 0x59307804, 0x823c7d00,
- 0x01880080, 0x823c7d40, 0x80000005, 0x59300013,
- 0x82000500, 0xffff0000, 0x05000002, 0x843c7d6a,
- 0x59300015, 0x59301014, 0x80080580, 0x05020008,
- 0x800811c0, 0x05000039, 0x592c1209, 0x8c08051e,
- 0x05020036, 0x843c7d4a, 0x0501f034, 0x480bc857,
- 0x42000000, 0x00109868, 0x053dfd61, 0x59302015,
- 0x59300416, 0x4803c857, 0x8c000514, 0x0502000f,
- 0x599c1819, 0x8c0c0512, 0x0500000a, 0x592c0810,
- 0x59300017, 0x80040c80, 0x05000005, 0x05001004,
- 0x80040000, 0x80140480, 0x05001008, 0x0529faa7,
- 0x900c1d41, 0x0501f01f, 0x84000514, 0x48026416,
- 0x48126017, 0x4813c857, 0x4c3c0000, 0x0501f8e7,
- 0x5c007800, 0x05020017, 0x5930500f, 0x592c0209,
- 0x4803c857, 0x8c00051e, 0x05020004, 0x903c7d60,
- 0x5930400e, 0x0501f004, 0x8400051e, 0x48025a09,
- 0x0501f89a, 0x50201800, 0x480e600c, 0x4832600d,
- 0x4822600e, 0x482a600f, 0x480fc857, 0x4833c857,
- 0x4823c857, 0x482bc857, 0x80000580, 0x483e6004,
- 0x1c01f000, 0x05f9fdb5, 0x4933c857, 0x4d2c0000,
- 0x59900005, 0x81300580, 0x05fa0db0, 0x0531fd43,
- 0x05f80dae, 0x59325809, 0x4d3c0000, 0x4d400000,
- 0x59300004, 0x4803c857, 0x4c000000, 0x0521ff4e,
- 0x0521fccc, 0x5c000000, 0x8c000516, 0x0500000d,
- 0x592c0010, 0x4803c857, 0x48025808, 0x41780800,
- 0x600a8000, 0x0519fb2d, 0x4a025c07, 0x0000ffff,
- 0x492fc857, 0x0001fb2c, 0x0529f9ff, 0x0501f012,
- 0x640a6203, 0x592c0209, 0x8400054e, 0x48025a09,
- 0x59300407, 0x90000586, 0x05020009, 0x811800ca,
- 0x81c80c00, 0x58040939, 0x592c000e, 0x80040480,
- 0x592c0810, 0x80040480, 0x4802580c, 0x417a7800,
- 0x0531f9e3, 0x5c028000, 0x5c027800, 0x5c025800,
- 0x1c01f000, 0x4933c857, 0x4d2c0000, 0x59900005,
- 0x81300580, 0x05fa0d7d, 0x0531fd10, 0x05f80d7b,
- 0x59325809, 0x592c0209, 0x84000540, 0x48025a09,
- 0x05fdf7ca, 0x491bc857, 0x4dd00000, 0x4c580000,
- 0x41780800, 0x8007a0ca, 0x83d3a400, 0x00007600,
- 0x4a03a005, 0x80000002, 0x05024004, 0x4c040000,
- 0x0004483d, 0x5c000800, 0x59d01006, 0x82080500,
- 0x00006000, 0x82000580, 0x00006000, 0x05000007,
- 0x8c08051e, 0x05fc07f5, 0x59d01006, 0x82080500,
- 0x00006000, 0x05fe07f1, 0x91d3a420, 0x80040800,
- 0x90040485, 0x05fc17eb, 0x5c00b000, 0x5c03a000,
- 0x1c01f000, 0x4803c856, 0x4dd00000, 0x41780800,
- 0x8007a0ca, 0x83d3a400, 0x00007600, 0x4a03a005,
- 0x80000001, 0x59d00006, 0x91d3a420, 0x80040800,
- 0x90040485, 0x05fc17fa, 0x5c03a000, 0x1c01f000,
- 0x59d00006, 0x8c00053e, 0x0500001b, 0x58d82803,
- 0x4817c857, 0x801429c0, 0x05000013, 0x58d8000a,
- 0x58d8080b, 0x58d8100c, 0x58d8180d, 0x4800280c,
- 0x4804280d, 0x4808280e, 0x480c280f, 0x59d00000,
- 0x59d00801, 0x59d01002, 0x59d01803, 0x59d02004,
- 0x48002810, 0x48042811, 0x48082812, 0x480c2813,
- 0x48102814, 0x6401b006, 0x4a03a005, 0x30000000,
- 0x59d00006, 0x1c01f000, 0x4803c856, 0x80204000,
- 0x50200000, 0x80000540, 0x05000003, 0x80285040,
- 0x1c01f000, 0x58300001, 0x80000540, 0x0500000c,
- 0x4802600d, 0x40006000, 0x58300205, 0x9000050f,
- 0x82000400, 0x00100cde, 0x50004000, 0x802041c0,
- 0x05f80d16, 0x80285040, 0x1c01f000, 0x40005000,
- 0x1c01f000, 0x00000006, 0x00000009, 0x0000000c,
- 0x0000000f, 0x00000012, 0x00000000, 0x00000000,
- 0x0000000c, 0x00000000, 0x00000000, 0x00000000,
- 0x00100cd9, 0x00100cd8, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x00100cd9, 0x00100cd8,
- 0x00100cd5, 0x00100cd9, 0x00100cd8, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x00100cd9, 0x00000000, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x00100cd9, 0x00100cd9,
- 0x00100cd9, 0x00000000, 0x00100cd9, 0x00000000,
- 0x00000000, 0x00000000, 0x4813c857, 0x492fc857,
- 0x4933c857, 0x48126014, 0x592c5208, 0x802851c0,
- 0x05000047, 0x412c6000, 0x0501f847, 0x05000008,
- 0x90240582, 0x05020003, 0x5830000e, 0x80102480,
- 0x50200000, 0x80004540, 0x0500003d, 0x50200000,
- 0x80000540, 0x0500000b, 0x80301400, 0x58080002,
- 0x80102480, 0x0500101d, 0x801021c0, 0x05000009,
- 0x80285040, 0x05000032, 0x80204000, 0x05fdf7f4,
- 0x58300001, 0x80006540, 0x0500002d, 0x05fdf7e7,
- 0x80285040, 0x0500002a, 0x80204000, 0x50200000,
- 0x80000540, 0x05020009, 0x58300001, 0x80006540,
- 0x05000023, 0x58300205, 0x90004d0f, 0x82244400,
- 0x00100cde, 0x50204000, 0x592c0209, 0x8400051e,
- 0x48025a09, 0x0501f012, 0x80102080, 0x80102000,
- 0x48126012, 0x4813c857, 0x58080802, 0x40100000,
- 0x80042480, 0x05f81cad, 0x58080000, 0x58081801,
- 0x80102400, 0x48126010, 0x480e6011, 0x4813c857,
- 0x592c0209, 0x8400055e, 0x48025a09, 0x4833c857,
- 0x4823c857, 0x482bc857, 0x4832600d, 0x4822600e,
- 0x482a600f, 0x80000580, 0x0501f002, 0x90000541,
- 0x1c01f000, 0x58300205, 0x90004d0f, 0x82244400,
- 0x00100cde, 0x82000500, 0x000000ff, 0x900005a9,
- 0x05020016, 0x50204000, 0x592c040a, 0x80000540,
- 0x05f80c8e, 0x90000c82, 0x0500100e, 0x58300001,
- 0x80006540, 0x05f80c89, 0x58300205, 0x9000050f,
- 0x82000400, 0x00100cde, 0x50004000, 0x40040000,
- 0x800409c0, 0x05000005, 0x90040c85, 0x05fe17f4,
- 0x80204400, 0x80000580, 0x1c01f000, 0x4c5c0000,
- 0x59e4b800, 0x485fc857, 0x905c051f, 0x05fa0c77,
- 0x825c0500, 0x000000e0, 0x05f80c74, 0x8c5c050e,
- 0x05020807, 0x8c5c050c, 0x05020809, 0x8c5c050a,
- 0x05020900, 0x5c00b800, 0x1c01f000, 0x4803c856,
- 0x4a03c800, 0x00000080, 0x1c01f000, 0x4d2c0000,
- 0x42007800, 0x00109905, 0x583c0003, 0x583c0804,
- 0x80040540, 0x05000037, 0x42000800, 0x001097b1,
- 0x50065800, 0x592c0002, 0x90000580, 0x05000031,
- 0x59e40050, 0x59e40852, 0x80040480, 0x82000500,
- 0xfffffc00, 0x05020005, 0x59e40050, 0x59e40851,
- 0x80040800, 0x80040480, 0x82000c80, 0x00000400,
- 0x59e40050, 0x80041400, 0x480bc857, 0x50080000,
- 0x58080801, 0x80040540, 0x0500001e, 0x480bc857,
- 0x480a5803, 0x583c1009, 0x583c000a, 0x80080580,
- 0x05020005, 0x583c0000, 0x84000550, 0x48007800,
- 0x41781000, 0x82080400, 0x00001000, 0x4803c857,
- 0x48007809, 0x583c0003, 0x80081400, 0x480bc857,
- 0x583c0804, 0x64025801, 0x4a025808, 0x00100dbf,
- 0x480a5806, 0x48065807, 0x59e40053, 0x800000c4,
- 0x48025805, 0x412c1000, 0x492fc857, 0x0001f81c,
- 0x5c025800, 0x6503c800, 0x1c01f000, 0x42007800,
- 0x001097b1, 0x503c7800, 0x4a007802, 0x00000100,
- 0x42007800, 0x00109905, 0x583c0000, 0x84000552,
- 0x48007800, 0x583c100c, 0x480bc857, 0x80081000,
- 0x4808780c, 0x583c180b, 0x800c19c0, 0x05000013,
- 0x90080503, 0x05020011, 0x583c0007, 0x4803c857,
- 0x583c2008, 0x4813c857, 0x80102000, 0x80100580,
- 0x05020002, 0x41782000, 0x48107808, 0x400c0000,
- 0x80080580, 0x05020005, 0x4978780c, 0x60041800,
- 0x60a01100, 0x050dffdb, 0x1c01f000, 0x42007800,
- 0x00109905, 0x4d2c0000, 0x4c5c0000, 0x4c600000,
- 0x4030b800, 0x583cc000, 0x4a00b802, 0x00000100,
- 0x583c2015, 0x80100800, 0x583c0013, 0x80040580,
- 0x05020003, 0x8460c554, 0x41780800, 0x48047815,
- 0x8c600502, 0x05f80bf1, 0x8460c502, 0x48607800,
- 0x42000000, 0x001097b2, 0x50000000, 0x80300580,
- 0x05fa0bea, 0x583c081e, 0x800409c0, 0x05000008,
- 0x583c001f, 0x80040580, 0x05020005, 0x4978781f,
- 0x60081800, 0x60a01100, 0x050dffb6, 0x8c600508,
- 0x050a099e, 0x5c00c000, 0x5c00b800, 0x5c025800,
- 0x1c01f000, 0x4d2c0000, 0x4c5c0000, 0x4c600000,
- 0x4c640000, 0x42000800, 0x001097b2, 0x50065800,
- 0x4a025808, 0x00100de3, 0x6000c002, 0x4200b800,
- 0x00109905, 0x585cc800, 0x4867c857, 0x8d0c052a,
- 0x0502000f, 0x40ee5800, 0x492fc857, 0x4a025802,
- 0x00000100, 0x585c0014, 0x80000000, 0x90000503,
- 0x4800b814, 0x4a025808, 0x00101fa6, 0x585cc017,
- 0x8260c500, 0x000000ff, 0x05f80bbc, 0x4c580000,
- 0x61e8b001, 0x8058b040, 0x05f80bb8, 0x8c640502,
- 0x0500000b, 0x8d0c052a, 0x05fa0bb4, 0x4c580000,
- 0x4c600000, 0x0001f988, 0x585cc800, 0x5c00c000,
- 0x5c00b000, 0x485bc857, 0x05fdf7f3, 0x5c00b000,
- 0x4200b800, 0x00109905, 0x8464cd42, 0x4864b800,
- 0x592c0002, 0x90000580, 0x05f80ba4, 0x585c100d,
- 0x585c0018, 0x80081400, 0x80600400, 0x4800b818,
- 0x585c0014, 0x800001c0, 0x05020002, 0x4978b818,
- 0x8060c0c4, 0x492fc857, 0x480bc857, 0x4863c857,
- 0x480a5803, 0x585c001d, 0x4803c857, 0x585c180e,
- 0x800c1400, 0x480a5806, 0x4808b81b, 0x80600400,
- 0x4800b81d, 0x4803c857, 0x800c0400, 0x4800b819,
- 0x585c0810, 0x4807c857, 0x4803c857, 0x80040d80,
- 0x05020004, 0x4978b81d, 0x585c080e, 0x4804b819,
- 0x585c080e, 0x80040580, 0x82000500, 0x000003ff,
- 0x05020004, 0x585c001f, 0x80000000, 0x4800b81f,
- 0x585c080f, 0x48065807, 0x4807c857, 0x64025801,
- 0x48625805, 0x412c1000, 0x0001f81c, 0x5c00c800,
- 0x5c00c000, 0x5c00b800, 0x5c025800, 0x1c01f000,
- 0x6483c800, 0x053dfade, 0x59e40000, 0x1c01f000,
- 0x60001020, 0x80081040, 0x05000022, 0x053dfbfc,
- 0x05fc07fd, 0x59800801, 0x82040d00, 0xfff006ff,
- 0x82040d40, 0x000ff900, 0x48070001, 0x59e00002,
- 0x8c00051e, 0x05020016, 0x605c00f4, 0x50001000,
- 0x82081500, 0x03f00000, 0x82080580, 0x00800000,
- 0x0500000f, 0x61901000, 0x80081040, 0x0500000c,
- 0x59800881, 0x8c040514, 0x05fc07fc, 0x82040500,
- 0x00000180, 0x82000580, 0x00000180, 0x05020004,
- 0x59800080, 0x84000540, 0x48030080, 0x90000541,
- 0x64030000, 0x1c01f000, 0x053dfbd9, 0x59800802,
- 0x4807c857, 0x8c040520, 0x05000007, 0x64030000,
- 0x60101020, 0x50080000, 0x8400054c, 0x44001000,
- 0x0501f000, 0x82040500, 0x00001084, 0x05fa0b37,
- 0x8c040510, 0x05000006, 0x42000000, 0x00109903,
- 0x053dfaab, 0x4a030002, 0x00000100, 0x8c040522,
- 0x0500002d, 0x59e00002, 0x8c00051e, 0x0502002a,
- 0x601c20f6, 0x50102800, 0x4817c857, 0x605c00f4,
- 0x50003000, 0x82180500, 0x000f0000, 0x40003800,
- 0x40144000, 0x821c0580, 0x00020000, 0x05020002,
- 0x902041c0, 0x8c18050c, 0x05000002, 0x842041c0,
- 0x82204500, 0x000000ff, 0x90204401, 0x8c200510,
- 0x05000005, 0x42000000, 0x00109904, 0x053dfa8c,
- 0x61fc4001, 0x42001800, 0xffffff00, 0x8c18050c,
- 0x05000003, 0x840c19c0, 0x842041c0, 0x821c0580,
- 0x00020000, 0x05020003, 0x900c19c0, 0x902041c0,
- 0x800c0505, 0x80200540, 0x44002000, 0x4a030002,
- 0x00020000, 0x64030000, 0x1c01f000, 0x4d2c0000,
- 0x64007000, 0x82040d00, 0x43200f80, 0x05fa0afb,
- 0x58380008, 0x4803c00f, 0x4a0370e4, 0x00003000,
- 0x0531fde7, 0x583a5807, 0x592c0000, 0x48007007,
- 0x800001c0, 0x05020002, 0x49787006, 0x05f9fe81,
- 0x5c025800, 0x42007000, 0x00020a09, 0x0001f031,
- 0x4803c856, 0x4c3c0000, 0x4d2c0000, 0x4d300000,
- 0x58300009, 0x80025d40, 0x05f80ae4, 0x592e6009,
- 0x4c300000, 0x0531fdec, 0x5c006000, 0x05f80adf,
- 0x58300002, 0x82000580, 0x00000100, 0x0502000d,
- 0x5930780d, 0x583c0001, 0x80007d40, 0x0500000b,
- 0x4802600d, 0x90000402, 0x48006003, 0x583c0000,
- 0x48006005, 0x40301000, 0x0001f81c, 0x0501f008,
- 0x640a5a07, 0x492fc857, 0x4c300000, 0x0001fb2c,
- 0x5c025800, 0x05f9fe5b, 0x0005f8e7, 0x5c026000,
- 0x5c025800, 0x5c007800, 0x1c01f000, 0x4803c856,
- 0x4d2c0000, 0x4d300000, 0x42007000, 0x00020a09,
- 0x58380800, 0x90040582, 0x05020010, 0x58386001,
- 0x58300009, 0x812c0580, 0x0502000c, 0x59e00004,
- 0x8c00050e, 0x05fc07fe, 0x59dc0006, 0x4803c857,
- 0x4a03b805, 0x20000000, 0x8c00053e, 0x05fc07f8,
- 0x64007000, 0x0501f018, 0x58386005, 0x40305000,
- 0x803061c0, 0x05f80aa9, 0x58300009, 0x812c0580,
- 0x05000004, 0x40305000, 0x58306000, 0x05fdf7f9,
- 0x40280000, 0x80300580, 0x58300000, 0x05000006,
- 0x48005000, 0x800001c0, 0x05020007, 0x48287004,
- 0x0501f005, 0x800001c0, 0x05020002, 0x48007004,
- 0x48007005, 0x40325800, 0x05f9fe26, 0x5c026000,
- 0x5c025800, 0x0001f02b, 0x4d2c0000, 0x0001f813,
- 0x05f80a8e, 0x412c1000, 0x5c025800, 0x4a001008,
- 0x0002019d, 0x90080409, 0x48001003, 0x0001f193,
- 0x4d2c0000, 0x40325800, 0x05f9fe17, 0x5c025800,
- 0x1c01f000, 0x4807c857, 0x05f9fa80, 0x42001000,
- 0x00109cd1, 0x4a001003, 0x00109cda, 0x4a001008,
- 0x0002019d, 0x49781009, 0x1c01f000, 0x59e00017,
- 0x8c000500, 0x1c01f000, 0x0001f9a6, 0x4d040000,
- 0x4c640000, 0x4c600000, 0x40120800, 0x400cc800,
- 0x4014c000, 0x0501f021, 0x4803c856, 0x42000800,
- 0x4fffffff, 0x46000800, 0x00002bad, 0x50040000,
- 0x0501f000, 0x59e00017, 0x8c00050c, 0x05020005,
- 0x59a80866, 0x58040003, 0x8c000500, 0x0500000d,
- 0x4c080000, 0x59a81065, 0x50080000, 0x84000542,
- 0x44001000, 0x5c001000, 0x59e00017, 0x8c00050c,
- 0x05fe07fe, 0x58040003, 0x8c000500, 0x05fe07fb,
- 0x4d040000, 0x4c640000, 0x4c600000, 0x5804c800,
- 0x58060801, 0x5804c002, 0x4a03b805, 0x20000000,
- 0x59dc0006, 0x4a03b805, 0x30000000, 0x59dc0006,
- 0x4a03b805, 0x70000000, 0x59dc0006, 0x4867b800,
- 0x4907b801, 0x6413b802, 0x601c00e2, 0x44600000,
- 0x4a03b805, 0x30000000, 0x59dc0006, 0x4a03b805,
- 0x10000003, 0x59dc0006, 0x8c00053e, 0x05fc07fe,
- 0x4a03b805, 0x20000000, 0x59dc0006, 0x5c00c000,
- 0x5c00c800, 0x5c020800, 0x1c01f000, 0x4803c856,
- 0x053dfacc, 0x0001f1af, 0x4803c856, 0x60f00800,
- 0x48079000, 0x59c80000, 0x80040500, 0x05fe07fe,
- 0x497b9005, 0x4a039035, 0x00880400, 0x59a8000d,
- 0x800000e0, 0x4803900e, 0x64939011, 0x4a03900f,
- 0x0010ccb4, 0x4a039010, 0x0010ccb4, 0x65db9015,
- 0x4a039003, 0x00001f07, 0x6503900d, 0x4a039000,
- 0x00001600, 0x1c01f000, 0x59c80007, 0x8c000508,
- 0x05020880, 0x59c80800, 0x8c040516, 0x05020003,
- 0x90000506, 0x0c01f004, 0x4807c857, 0x9000050e,
- 0x0c01f001, 0x00100fee, 0x00100fed, 0x001048a4,
- 0x00100fed, 0x00100ff0, 0x00100fed, 0x00100ff0,
- 0x00100ff0, 0x00100fed, 0x00100fed, 0x00100fed,
- 0x00100fed, 0x00100ff0, 0x00100fed, 0x00100ff0,
- 0x00100fed, 0x05f9f9f9, 0x4803c857, 0x1c01f000,
- 0x59c8080c, 0x4807c857, 0x82040500, 0x00006000,
- 0x05000003, 0x053df925, 0x0501f005, 0x82040500,
- 0x007f0000, 0x05000004, 0x053df8f2, 0x0521fc80,
- 0x0501f02c, 0x90040514, 0x0500000d, 0x053df94a,
- 0x916c0583, 0x05000008, 0x0519f912, 0x05000003,
- 0x0511fd9a, 0x0501f004, 0x64075014, 0x6006d800,
- 0x0519f88a, 0x0501f820, 0x0501f01e, 0x82040500,
- 0x00001c00, 0x05000004, 0x053df91a, 0x0501f81a,
- 0x0501f018, 0x82040500, 0x00000140, 0x05000004,
- 0x053df927, 0x0501f814, 0x0501f012, 0x82040500,
- 0x00008000, 0x0500000f, 0x0519f8fa, 0x0500000b,
- 0x59c400a4, 0x9000050f, 0x9000058b, 0x05020007,
- 0x4c040000, 0x0511fd94, 0x60780000, 0x80000040,
- 0x05fe07ff, 0x5c000800, 0x053df8ed, 0x0501f802,
- 0x1c01f000, 0x4c0c0000, 0x4c100000, 0x4c140000,
- 0x05fdfb19, 0x5c002800, 0x5c002000, 0x5c001800,
- 0x1c01f000, 0x4803c856, 0x59a80804, 0x59a80020,
- 0x82000500, 0xfffff000, 0x80040540, 0x48035020,
- 0x59a80024, 0x82000500, 0xfffff000, 0x80040540,
- 0x48035024, 0x48078882, 0x82040480, 0x00000204,
- 0x05021004, 0x42001000, 0x00240f04, 0x0501f00f,
- 0x82040480, 0x00000404, 0x05021004, 0x42001000,
- 0x00440800, 0x0501f009, 0x82040480, 0x00000804,
- 0x05021004, 0x42001000, 0x00840410, 0x0501f003,
- 0x42001000, 0x00880400, 0x480b9035, 0x0501f331,
- 0x59c80815, 0x05f9f987, 0x40680800, 0xb0040d3c,
- 0x48079000, 0x59c80000, 0x80040500, 0x05fe07fe,
- 0x8c040504, 0x0500001b, 0x59c80035, 0x48039035,
- 0x59a80083, 0x80000540, 0x05000016, 0x4c300000,
- 0x600060de, 0x58300801, 0x82040d00, 0xffc00000,
- 0x8004090c, 0x58300000, 0x90000541, 0x48006000,
- 0x58300000, 0x8c000500, 0x05fe07fe, 0x82000500,
- 0xfc00ffff, 0x80040540, 0x84000574, 0x48006000,
- 0x58300000, 0x8c000534, 0x05fe07fe, 0x5c006000,
- 0x59c80000, 0x82000540, 0x00001200, 0x48039000,
- 0x1c01f000, 0x42006000, 0x7ff4c000, 0x58300003,
- 0x8c000502, 0x0502000a, 0x600060de, 0x64686000,
- 0x58300000, 0x8c000504, 0x05fe07fe, 0x641c6002,
- 0x59a80083, 0x84000540, 0x48035083, 0x1c01f000,
- 0x600060de, 0x58300801, 0x9004050c, 0x05fa0957,
- 0x60f00800, 0x05fdf7c6, 0x4853c857, 0x497b8801,
- 0x850e1d1a, 0x5050b000, 0x485bc857, 0x8058b1c0,
- 0x0500089d, 0x82580480, 0x00000804, 0x0502189a,
- 0x60040000, 0x61000801, 0x0501fd76, 0x40582000,
- 0x8050a000, 0x50500000, 0x80102400, 0x9058b483,
- 0x8050a000, 0x485bc857, 0x4853c857, 0x50501000,
- 0x80082404, 0x60101800, 0x82080500, 0x000000ff,
- 0x61000821, 0x0501fd67, 0x80081110, 0x800c1840,
- 0x05fe07fa, 0x8050a000, 0x8058b040, 0x05fe07f4,
- 0x4803c856, 0x41780000, 0x61000801, 0x0501fd5d,
- 0x50501000, 0x80082404, 0x0502087b, 0x4803c856,
- 0x1c01f000, 0x4a035044, 0xaabbccdd, 0x600c0000,
- 0x0501fcb0, 0x600c0000, 0x0501fcd8, 0x60300868,
- 0x0501fd48, 0x90040541, 0x60300868, 0x0501fd4d,
- 0x60480888, 0x0501fd43, 0x90040548, 0x60480888,
- 0x0501fd48, 0x60180818, 0x0501fd3e, 0x82040540,
- 0x00000080, 0x60180818, 0x0501fd42, 0x60480828,
- 0x0501fd38, 0x90040541, 0x60480828, 0x0501fd3d,
- 0x59a8004b, 0x8c00050e, 0x05000006, 0x4803c857,
- 0x82000500, 0x0000ff00, 0x80000110, 0x0501f002,
- 0x60e00001, 0x60300800, 0x0501fd32, 0x60380940,
- 0x0501fd28, 0x82040500, 0xffffff0f, 0x0501fecb,
- 0x05020003, 0x90000540, 0x0501f002, 0x90000550,
- 0x60380940, 0x0501fd27, 0x60380938, 0x0501fd1d,
- 0x90040550, 0x60380938, 0x0501fd22, 0x60800000,
- 0x61000859, 0x0501fd1f, 0x61000000, 0x61000851,
- 0x0501fd1c, 0x60300000, 0x61800861, 0x0501fd19,
- 0x60840000, 0x61800821, 0x0501fd16, 0x59c40001,
- 0x84000574, 0x48038801, 0x850e1d5a, 0x61602004,
- 0x6029d000, 0x0501f83c, 0x4813c857, 0x61000849,
- 0x0501fd04, 0x4807c857, 0x82041500, 0x000000c0,
- 0x82081580, 0x000000c0, 0x05000004, 0x80102040,
- 0x05000825, 0x05fdf7f3, 0x4803c856, 0x60c82000,
- 0x6029d000, 0x0501f82c, 0x60380878, 0x0501fcf5,
- 0x90040d01, 0x05020004, 0x80102040, 0x0500081a,
- 0x05fdf7f8, 0x4803c856, 0x61702001, 0x6029d000,
- 0x051dfe2f, 0x60380818, 0x0501fcea, 0x90040d10,
- 0x05020004, 0x80102040, 0x05f808c0, 0x05fdf7f8,
- 0x4803c856, 0x60a02000, 0x6029d000, 0x051dfe24,
- 0x603808b8, 0x0501fcdf, 0x90040d04, 0x05000004,
- 0x80102040, 0x05f808b5, 0x05fdf7f8, 0x4803c856,
- 0x1c01f000, 0x4803c856, 0x4a03c020, 0x00004010,
- 0x4a03c011, 0x40100011, 0x05006000, 0x4203e000,
- 0x40000000, 0x4203e000, 0x30000001, 0x4803c856,
- 0x0501f000, 0x61201801, 0x800c1840, 0x05fe07ff,
- 0x80e9d040, 0x05fe07fc, 0x1c01f000, 0x4803c856,
- 0x497b88a9, 0x64078807, 0x497b8807, 0x59c40005,
- 0x48038805, 0x0501fdae, 0x0501fdf1, 0x0501f9e3,
- 0x4a0388a7, 0x0000f7f7, 0x4a0388a3, 0x8000403c,
- 0x4a0388ae, 0x000061a8, 0x59c40001, 0x82000540,
- 0x184fa063, 0x48038801, 0x4a038810, 0x00410108,
- 0x4a038811, 0x00520608, 0x4a038812, 0x00450320,
- 0x4a038813, 0x00440405, 0x4a03881c, 0x004132e1,
- 0x4a038850, 0x80000108, 0x64238860, 0x64238870,
- 0x4a038851, 0x80000508, 0x4a038861, 0x00800000,
- 0x4a038871, 0x00800000, 0x4a038852, 0x80000708,
- 0x4a038862, 0x00800000, 0x4a038872, 0x00800000,
- 0x4a038853, 0x80000608, 0x497b8863, 0x4a038873,
- 0x00800000, 0x4a038882, 0x00000840, 0x4a0388a5,
- 0x000000fe, 0x647b88a6, 0x4a0388b0, 0x00007530,
- 0x4a038802, 0x0000ffff, 0x4a038806, 0xc0e80b00,
- 0x1c01f000, 0x850e1d4e, 0x1c01f000, 0x59c40805,
- 0x59c40006, 0x80040d00, 0x05f8085c, 0x82040500,
- 0x00e80b00, 0x05020004, 0x8c04053e, 0x050208c4,
- 0x0501f005, 0x82040500, 0x00880b00, 0x05fa0849,
- 0x05f9f852, 0x4c5c0000, 0x4c600000, 0x59c4b805,
- 0x59c410a3, 0x84081518, 0x825c0500, 0x04000000,
- 0x05020d2d, 0x59c40006, 0x8c000500, 0x05000003,
- 0x8c5c0500, 0x0502007f, 0x485fc857, 0x0515ff71,
- 0x0500001a, 0x59c40005, 0x82000500, 0x000000c0,
- 0x05000042, 0x0515ff8c, 0x05020040, 0x59c40006,
- 0x82000500, 0x000000f0, 0x05020004, 0x4a038805,
- 0x000000c0, 0x0501f039, 0x59a80015, 0x84000506,
- 0x48035015, 0x42006000, 0xff203fff, 0x42006800,
- 0x40000000, 0x0511fd1f, 0x60400800, 0x42001000,
- 0x00103666, 0x051dfd89, 0x8c5c0534, 0x0502002b,
- 0x4a035013, 0x0000aaaa, 0x59c40005, 0x8c00050c,
- 0x0502000f, 0x8c00050e, 0x05020015, 0x8c00050a,
- 0x0502001b, 0x8c000508, 0x05000008, 0x59a80011,
- 0x90000589, 0x05020005, 0x42000000, 0x001097cd,
- 0x0539ff8f, 0x0519f8fb, 0x0501f04c, 0x42000000,
- 0x001097db, 0x0539ff8a, 0x41781800, 0x60042000,
- 0x0501fce5, 0x64035014, 0x0501f00e, 0x42000000,
- 0x001097dc, 0x0539ff82, 0x41781800, 0x60082000,
- 0x0501fcdd, 0x640b5014, 0x0501f006, 0x42000000,
- 0x001097cf, 0x0539ff7a, 0x0519f88c, 0x0501f037,
- 0x0519f938, 0x0501f035, 0x8c5c0534, 0x05000031,
- 0x59c40005, 0x8c00053a, 0x05020004, 0x42000000,
- 0x001097c3, 0x0539ff6e, 0x4a038805, 0x20000000,
- 0x0515ff20, 0x0502000e, 0x4a038805, 0x04000000,
- 0x59c418a8, 0x60002000, 0x0501fcc3, 0x0515ff2f,
- 0x05020005, 0x64075014, 0x6006d800, 0x0515fe93,
- 0x0501f050, 0x41780000, 0x0515fee6, 0x0501fcb3,
- 0x4000c000, 0x0501fc2e, 0x916c1584, 0x0502000b,
- 0x8c5c0500, 0x05020013, 0x8d0c0506, 0x05020004,
- 0x59c410a3, 0x90081548, 0x480b88a3, 0x59c41006,
- 0x84081540, 0x480b8806, 0x4a038805, 0x04000000,
- 0x6006d800, 0x497b5010, 0x8d0c0518, 0x05020004,
- 0x4803c856, 0x850e1d06, 0x0511fba0, 0x050dfe85,
- 0x8c5c053c, 0x0502084f, 0x8c5c0500, 0x0500002e,
- 0x42000000, 0x001098e0, 0x0539ff3d, 0x64078805,
- 0x6148b006, 0x6191d000, 0x4c580000, 0x051dfd28,
- 0x0501fba5, 0x5c00b000, 0x05000004, 0x8058b040,
- 0x05fe07f9, 0x0501f003, 0x64078805, 0x0501f01e,
- 0x59c40006, 0x84000500, 0x48038806, 0x0521fa6e,
- 0x497b8880, 0x0501fd7d, 0x05000007, 0x59e00013,
- 0x8c000516, 0x05000004, 0x60142000, 0x0519f916,
- 0x0501f003, 0x60182000, 0x0519f913, 0x59c400a3,
- 0x82000500, 0xfcf8ffff, 0x480388a3, 0x640b5071,
- 0x6012d800, 0x64078805, 0x05f9f9bb, 0x0501fb1f,
- 0x497b5036, 0x64075043, 0x497b506c, 0x0201f800,
- 0x0010c534, 0x825cbd00, 0xbbfffffe, 0x485f8805,
- 0x5c00c000, 0x5c00b800, 0x1c01f000, 0x4d180000,
- 0x59c41004, 0x480bc857, 0x8c080500, 0x05000006,
- 0x4803c856, 0x4a01a8e5, 0x00000800, 0x0521faf3,
- 0x0501f007, 0x82080500, 0x000001f0, 0x05000004,
- 0x4803c856, 0x0521fc0d, 0x05220b0b, 0x4a038805,
- 0x80000000, 0x5c023000, 0x1c01f000, 0x59c408a3,
- 0x4807c857, 0x84040d40, 0x480788a3, 0x1c01f000,
- 0x4d900000, 0x4dd00000, 0x4da40000, 0x4d140000,
- 0x4cd80000, 0x4a038805, 0x40000000, 0x42000000,
- 0x001097d5, 0x0539feea, 0x051dff49, 0x59c41004,
- 0x8c080500, 0x05000040, 0x598e600b, 0x4a01a8e5,
- 0x00000800, 0x813261c0, 0x05000024, 0x59300403,
- 0x900005b2, 0x05020021, 0x5930001e, 0x48038833,
- 0x4a038807, 0x00018000, 0x6009d000, 0x051dfcc8,
- 0x497b8807, 0x6009d000, 0x051dfcc5, 0x0521f959,
- 0x60c1d0ea, 0x051dfcc2, 0x59c408a4, 0x90040d0f,
- 0x90040d80, 0x05000004, 0x42000000, 0x00200000,
- 0x0501fb85, 0x051dfe94, 0x59300009, 0x80000540,
- 0x05f40f4e, 0x40025800, 0x4a025a05, 0x00000103,
- 0x5931d823, 0x58ef400a, 0x58ec0008, 0x0801f800,
- 0x0005f8e7, 0x0501f032, 0x598c000d, 0x82001c80,
- 0x000000c8, 0x0502100c, 0x80000000, 0x4803180d,
- 0x59c400a4, 0x9000050f, 0x90000582, 0x05020004,
- 0x42000000, 0x00200000, 0x0501fb6b, 0x051dfc43,
- 0x0501f023, 0x4933c857, 0x0521f932, 0x813261c0,
- 0x0500001f, 0x64066203, 0x609e7000, 0x0005f905,
- 0x0501f01b, 0x0521fbb5, 0x05000019, 0x0521fbdc,
- 0x051dfc5f, 0x59926005, 0x813261c0, 0x0500000d,
- 0x61201801, 0x0521fba4, 0x0502000a, 0x59c400a4,
- 0x9000050f, 0x90000582, 0x05020004, 0x42000000,
- 0x00200000, 0x0501fb50, 0x051dfc2e, 0x0501f008,
- 0x4933c857, 0x0521f8c0, 0x813261c0, 0x05000004,
- 0x613e7000, 0x640e6203, 0x0005f905, 0x5c01b000,
- 0x5c022800, 0x5c034800, 0x5c03a000, 0x5c032000,
- 0x051df6d3, 0x40680000, 0x810c0d80, 0x8c04050e,
- 0x0500004e, 0x4803c857, 0x8d0c050e, 0x0500001f,
- 0x850e1d0e, 0x497b5071, 0x42000000, 0x001097bc,
- 0x0539fe7b, 0x0539ff27, 0x60441100, 0x59c40001,
- 0x82000500, 0x00018000, 0x90001d80, 0x0500000b,
- 0x82001d80, 0x00008000, 0x0500000a, 0x82001d80,
- 0x00010000, 0x05000009, 0x82001d80, 0x00018000,
- 0x05000008, 0x05f5fef1, 0x60001800, 0x0501f006,
- 0x60041800, 0x0501f004, 0x600c1800, 0x0501f002,
- 0x60101800, 0x050df2bf, 0x850e1d4e, 0x59a80871,
- 0x800409c0, 0x05020006, 0x59c4000d, 0x8c000520,
- 0x05000003, 0x600c1800, 0x0501f002, 0x40041800,
- 0x0539feec, 0x4c0c0000, 0x41782000, 0x0501fca7,
- 0x0500000f, 0x0501fc89, 0x60042000, 0x0502000c,
- 0x0501fc94, 0x05020006, 0x60082000, 0x0501f8b6,
- 0x05020007, 0x60102000, 0x0501f005, 0x600c2000,
- 0x0501f890, 0x05020002, 0x60142000, 0x5c001800,
- 0x60481100, 0x050dfa9f, 0x05f9f8e3, 0x0539ff4f,
- 0x0502000a, 0x0501f845, 0x4d400000, 0x4d3c0000,
- 0x60a28000, 0x60227800, 0x0201f800, 0x0010b5e0,
- 0x5c027800, 0x5c028000, 0x1c01f000, 0x4803c857,
- 0x82000400, 0x00101a23, 0x50000800, 0x82040d00,
- 0x000000ff, 0x1c01f000, 0x4803c856, 0x4c580000,
- 0x6040b000, 0x497b88ac, 0x497b88ad, 0x8058b040,
- 0x05fe07fe, 0x5c00b000, 0x1c01f000, 0x40680800,
- 0x4807c857, 0x4807500f, 0x80041108, 0x6040b000,
- 0x497b88ac, 0x80000580, 0x800811c0, 0x05020005,
- 0x9004050f, 0x82000400, 0x00108a8d, 0x50000000,
- 0x480388ad, 0x80081040, 0x8058b040, 0x05fe07f6,
- 0x1c01f000, 0x4803c857, 0x4c080000, 0x4c040000,
- 0x4c000000, 0x59c40892, 0x4807c857, 0x80041580,
- 0x0500000e, 0x80041480, 0x05021006, 0x80081080,
- 0x80081000, 0x4008b000, 0x60040004, 0x0501f003,
- 0x4008b000, 0x60400004, 0x48038886, 0x8058b040,
- 0x05fe07fe, 0x497b8886, 0x5c000000, 0x5c000800,
- 0x5c001000, 0x1c01f000, 0x4803c856, 0x8d0c0520,
- 0x05000003, 0x60ba8000, 0x0539f033, 0x1c01f000,
- 0x0501f803, 0x40058800, 0x1c01f000, 0x59a80083,
- 0x80000540, 0x05000008, 0x0515fda2, 0x60280800,
- 0x0502000e, 0x600008de, 0x58040001, 0x8000092c,
- 0x0501f00a, 0x59c80835, 0x82040d00, 0x00001f00,
- 0x80040910, 0x80040800, 0x59a80083, 0x80000540,
- 0x05000002, 0x61680804, 0x4807c857, 0x1c01f000,
- 0x59a80083, 0x80000540, 0x0500001c, 0x599c1a01,
- 0x60a80801, 0x820c0480, 0x00000204, 0x0500100a,
- 0x61680800, 0x820c0480, 0x00000404, 0x05001006,
- 0x60b80800, 0x820c0480, 0x00000804, 0x05001002,
- 0x60b40800, 0x4c300000, 0x600060de, 0x58301000,
- 0x82081500, 0xfc00ffff, 0x800400e0, 0x80080540,
- 0x84000574, 0x48006000, 0x58300000, 0x8c000534,
- 0x05fe07fe, 0x5c006000, 0x1c01f000, 0x0501f805,
- 0x60058800, 0x05000002, 0x60018800, 0x1c01f000,
- 0x4c000000, 0x59a80037, 0x4803c857, 0x90000580,
- 0x5c000000, 0x1c01f000, 0x0501f805, 0x60058800,
- 0x05000002, 0x60018800, 0x1c01f000, 0x4c000000,
- 0x59a80037, 0x4803c857, 0x90000581, 0x5c000000,
- 0x1c01f000, 0x0501f805, 0x60058800, 0x05000002,
- 0x60018800, 0x1c01f000, 0x4c000000, 0x59a80037,
- 0x4803c857, 0x90000583, 0x5c000000, 0x1c01f000,
- 0x0501f805, 0x60058800, 0x05000002, 0x60018800,
- 0x1c01f000, 0x4c000000, 0x59a80037, 0x4803c857,
- 0x90000584, 0x5c000000, 0x1c01f000, 0x0501f805,
- 0x60058800, 0x05000002, 0x60018800, 0x1c01f000,
- 0x4c000000, 0x59a80037, 0x90000582, 0x5c000000,
- 0x1c01f000, 0x4c000000, 0x4c040000, 0x4c080000,
- 0x4c380000, 0x59a8003a, 0x90000c87, 0x05f61e07,
- 0x0c01f806, 0x5c007000, 0x5c001000, 0x5c000800,
- 0x5c000000, 0x1c01f000, 0x001013ed, 0x001013fa,
- 0x00101407, 0x00101408, 0x00101426, 0x00101427,
- 0x00101428, 0x4803c856, 0x6403503c, 0x600c0000,
- 0x0501f9aa, 0x600c0000, 0x0501f97e, 0x0501fa06,
- 0x4803c856, 0x641b503a, 0x60740800, 0x42001000,
- 0x00101429, 0x051df333, 0x497b503f, 0x64db5034,
- 0x64ab5033, 0x4803c856, 0x6407503c, 0x600c0000,
- 0x0501f970, 0x4803c856, 0x641b503a, 0x60740800,
- 0x42001000, 0x00101429, 0x051df326, 0x05f5fddf,
- 0x64db5034, 0x4803c856, 0x640f503c, 0x60000800,
- 0x0501fa00, 0x90040d1c, 0x9004059c, 0x05000008,
- 0x90040598, 0x05000008, 0x90040594, 0x05000008,
- 0x90040590, 0x05000008, 0x05f5fdd0, 0x60040000,
- 0x0501f006, 0x60000000, 0x0501f004, 0x60080000,
- 0x0501f002, 0x600c0000, 0x0501f952, 0x497b5040,
- 0x4803c856, 0x641b503a, 0x60740800, 0x42001000,
- 0x00101429, 0x051df307, 0x05f5fdc0, 0x05f5fdbf,
- 0x1c01f000, 0x4c000000, 0x4c040000, 0x4c080000,
- 0x4c380000, 0x59a8003c, 0x90000c87, 0x05f61db7,
- 0x0c01f806, 0x5c007000, 0x5c001000, 0x5c000800,
- 0x5c000000, 0x1c01f000, 0x0010143d, 0x00101459,
- 0x001014aa, 0x001014bf, 0x001014d3, 0x001014dc,
- 0x001014dd, 0x0501f990, 0x05020018, 0x59a81042,
- 0x60000800, 0x0501f9cb, 0x90040d1c, 0x9004059c,
- 0x05000008, 0x90040598, 0x05000008, 0x90040594,
- 0x05000008, 0x90040590, 0x05000008, 0x05f5fd9b,
- 0x84081540, 0x0501f006, 0x84081542, 0x0501f004,
- 0x84081544, 0x0501f002, 0x84081546, 0x480b5042,
- 0x6407503a, 0x0501f003, 0x0501f8be, 0x05fdff9d,
- 0x1c01f000, 0x0501f885, 0x0500004f, 0x0501f972,
- 0x05020029, 0x60000800, 0x0501f9ae, 0x59c41001,
- 0x82081500, 0x00018000, 0x90040d1c, 0x90040590,
- 0x05000042, 0x90040594, 0x05000006, 0x90040598,
- 0x0500000a, 0x9004059c, 0x0500000a, 0x05f5fd7b,
- 0x90080580, 0x05000039, 0x82080580, 0x00008000,
- 0x05000036, 0x0501f003, 0x90080580, 0x05000033,
- 0x60000800, 0x0501f997, 0x59a80042, 0x90040d1c,
- 0x90041594, 0x05000006, 0x90041598, 0x05000006,
- 0x9004159c, 0x05000006, 0x05f60d68, 0x84000544,
- 0x0501f004, 0x84000542, 0x0501f002, 0x84000540,
- 0x48035042, 0x59a8003f, 0x80000000, 0x4803503f,
- 0x90000585, 0x05000003, 0x0501f859, 0x0501f01d,
- 0x497b503f, 0x59c40801, 0x82040d00, 0x00018000,
- 0x90040580, 0x0500000b, 0x82040580, 0x00008000,
- 0x0500000a, 0x82040580, 0x00010000, 0x05000009,
- 0x82040580, 0x00018000, 0x05000008, 0x05f5fd4b,
- 0x60040000, 0x0501f006, 0x60000000, 0x0501f004,
- 0x60080000, 0x0501f002, 0x600c0000, 0x0501f8f7,
- 0x640b503c, 0x0501f003, 0x640f503a, 0x0501f002,
- 0x05fdff59, 0x1c01f000, 0x0501f834, 0x05000013,
- 0x59a80033, 0x80000040, 0x48035033, 0x0501f91e,
- 0x05020004, 0x640f503a, 0x497b503b, 0x0501f00b,
- 0x59a80033, 0x80000540, 0x05020003, 0x0501f891,
- 0x0501f002, 0x0501f841, 0x0501f829, 0x497b503f,
- 0x6407503c, 0x05fdff44, 0x1c01f000, 0x0501f81f,
- 0x05000012, 0x0501f90c, 0x0502000d, 0x59a80040,
- 0x80000000, 0x48035040, 0x90000587, 0x0502000a,
- 0x642b5036, 0x497b5043, 0x59a80042, 0x8400055e,
- 0x48035042, 0x4803c857, 0x0501f004, 0x0501f814,
- 0x6413503c, 0x05fdff4f, 0x1c01f000, 0x0501f80b,
- 0x05000007, 0x0501f8f8, 0x05020003, 0x05fdff32,
- 0x0501f003, 0x0501f80a, 0x05fdff46, 0x1c01f000,
- 0x05f5fd0a, 0x05f5fd09, 0x59a80034, 0x80000040,
- 0x48035034, 0x05000885, 0x1c01f000, 0x4c040000,
- 0x60000800, 0x0501f927, 0x90040d1c, 0x9004059c,
- 0x05000008, 0x90040598, 0x0500000a, 0x90040594,
- 0x0500000a, 0x90040590, 0x05000004, 0x05f5fcf7,
- 0x600c0000, 0x0501f006, 0x60080000, 0x0501f004,
- 0x60040000, 0x0501f002, 0x60000000, 0x0501f8a3,
- 0x5c000800, 0x1c01f000, 0x4c040000, 0x59c40801,
- 0x82040d00, 0x00018000, 0x90040580, 0x0500000b,
- 0x82040580, 0x00008000, 0x0500000c, 0x82040580,
- 0x00010000, 0x0500000b, 0x82040580, 0x00018000,
- 0x05000004, 0x05f5fcdd, 0x600c0000, 0x0501f006,
- 0x60080000, 0x0501f004, 0x60040000, 0x0501f002,
- 0x60000000, 0x0501f85f, 0x5c000800, 0x1c01f000,
- 0x4c040000, 0x59a8003f, 0x80000000, 0x4803503f,
- 0x90000585, 0x05020019, 0x497b503f, 0x59c40801,
- 0x82040d00, 0x00018000, 0x90040580, 0x0500000b,
- 0x82040580, 0x00008000, 0x0500000c, 0x82040580,
- 0x00010000, 0x0500000b, 0x82040580, 0x00018000,
- 0x05000004, 0x05f5fcbd, 0x600c0000, 0x0501f006,
- 0x60080000, 0x0501f004, 0x60040000, 0x0501f002,
- 0x60000000, 0x0501f83f, 0x60000800, 0x0501f8d9,
- 0x90040d1c, 0x9004059c, 0x05000008, 0x90040598,
- 0x0500000a, 0x90040594, 0x0500000a, 0x90040590,
- 0x05000004, 0x05f5fca9, 0x600c0000, 0x0501f006,
- 0x60080000, 0x0501f004, 0x60040000, 0x0501f002,
- 0x60000000, 0x0501f855, 0x5c000800, 0x1c01f000,
- 0x4c200000, 0x59a80042, 0x82000500, 0x00007fff,
- 0x05f40c9a, 0x59a84041, 0x80204102, 0x05f41c97,
- 0x48235041, 0x80204500, 0x05fc07fb, 0x8c000506,
- 0x05020008, 0x8c000504, 0x05020008, 0x8c000502,
- 0x05020008, 0x8c000500, 0x05020008, 0x05f5fc8b,
- 0x600c0000, 0x0501f006, 0x60080000, 0x0501f004,
- 0x60000000, 0x0501f002, 0x60040000, 0x0501f80d,
- 0x5c004000, 0x1c01f000, 0x05011000, 0x4a03c840,
- 0x0010943a, 0x6427c842, 0x40000000, 0x05fd17ff,
- 0x64235041, 0x64035038, 0x1c01f000, 0x40680000,
- 0x4c000000, 0x0501f932, 0x5c000000, 0x0501fa4d,
- 0x60080800, 0x0501f897, 0x82041500, 0xffffffe3,
- 0x59c41801, 0x820c1d00, 0xfffe7fff, 0x800001c0,
- 0x05000007, 0x90000d81, 0x0502000a, 0x9008055c,
- 0x900c1d40, 0x840c1d32, 0x0501f012, 0x90080558,
- 0x820c1d40, 0x00008000, 0x840c1d32, 0x0501f00d,
- 0x90000d82, 0x05020006, 0x90080554, 0x820c1d40,
- 0x00010000, 0x840c1d32, 0x0501f006, 0x90000d83,
- 0x05f60c56, 0x90080550, 0x820c1d40, 0x02018000,
- 0x60080800, 0x0501f87f, 0x480f8801, 0x0501f111,
- 0x1c01f000, 0x40680000, 0x4c000000, 0x0501f903,
- 0x5c000000, 0x0501fa23, 0x60000800, 0x0501f86d,
- 0x82041500, 0xffffffe3, 0x59c41801, 0x800001c0,
- 0x05000006, 0x90000d81, 0x05020007, 0x9008055c,
- 0x840c1d30, 0x0501f00d, 0x90080558, 0x840c1d30,
- 0x0501f00a, 0x90000d82, 0x05020004, 0x90080554,
- 0x840c1d30, 0x0501f005, 0x90000d83, 0x05f60c33,
- 0x90080550, 0x840c1d70, 0x480f8801, 0x60000800,
- 0x0501f85c, 0x0501f9f9, 0x0500000d, 0x4a03c014,
- 0x00200020, 0x60000800, 0x0501f84e, 0x90040d1c,
- 0x90040590, 0x05020004, 0x4a03c013, 0x00200020,
- 0x0501f003, 0x4a03c013, 0x00200000, 0x0501f0e8,
- 0x0501f805, 0x60058800, 0x05000002, 0x60018800,
- 0x1c01f000, 0x4c580000, 0x6050b000, 0x8058b040,
- 0x05000026, 0x59c4000d, 0x8c000520, 0x05fe07fc,
- 0x0501f831, 0x59c4000d, 0x8c000520, 0x05fe07f8,
- 0x59c40808, 0x82040d40, 0x00000300, 0x48078808,
- 0x6120b001, 0x8058b040, 0x05fe07ff, 0x6050b000,
- 0x8058b040, 0x05000015, 0x59c4000d, 0x8c000520,
- 0x05020012, 0x0501f820, 0x59c4000d, 0x8c000520,
- 0x0502000e, 0x6028b000, 0x8058b040, 0x05000003,
- 0x0501f819, 0x05fdf7fd, 0x6190b000, 0x59c4000d,
- 0x8c00051e, 0x05000005, 0x8058b040, 0x05fe07fc,
- 0x80000580, 0x0501f002, 0x90000541, 0x5c00b000,
- 0x1c01f000, 0x60080800, 0x0501f812, 0x82040500,
- 0xfffffffe, 0x60080800, 0x0501f816, 0x60000800,
- 0x0501f80c, 0x82040500, 0xfffffffe, 0x60000800,
- 0x0501f010, 0x40000000, 0x40000000, 0x40000000,
- 0x40000000, 0x40000000, 0x1c01f000, 0x40680800,
- 0x4807880e, 0x59c4080f, 0x82040d00, 0x000000ff,
- 0x40058800, 0x1c01f000, 0x40680800, 0x406c0000,
- 0x900001c0, 0x80040d40, 0x84040d40, 0x4807880e,
- 0x1c01f000, 0x82000d80, 0x00200000, 0x05000009,
- 0x82000d80, 0x02000000, 0x05000006, 0x82000d80,
- 0x01000000, 0x05000006, 0x59c408a3, 0x0501f006,
- 0x59c408a3, 0x84040d30, 0x0501f003, 0x59c408a3,
- 0x84040d32, 0x80040540, 0x480388a3, 0x480788a3,
- 0x1c01f000, 0x59c400a3, 0x84000556, 0x480388a3,
- 0x84000516, 0x480388a3, 0x1c01f000, 0x485fc857,
- 0x4863c857, 0x4c640000, 0x4d3c0000, 0x4d400000,
- 0x051dfe69, 0x48635009, 0x40601800, 0x60002000,
- 0x0501f881, 0x42000000, 0x001097da, 0x0539fb20,
- 0x82600500, 0x0000ff00, 0x82000580, 0x0000f700,
- 0x05020004, 0x42000000, 0x001097c2, 0x0539fb18,
- 0x0539fc26, 0x05020050, 0x82600d00, 0x0000ff00,
- 0x800409c0, 0x0500000b, 0x6004c800, 0x59a8000f,
- 0x82000500, 0x000000ff, 0x80041110, 0x80081580,
- 0x0500001b, 0x82041580, 0x0000ff00, 0x0500000a,
- 0x59c410a3, 0x82081500, 0x00008000, 0x05000008,
- 0x59c410a7, 0x82081500, 0x0000ff00, 0x82081580,
- 0x0000ff00, 0x6000c800, 0x0500000d, 0x8d0c0502,
- 0x05020007, 0x8d0c0500, 0x05020009, 0x599c1017,
- 0x8c08051a, 0x0500002a, 0x850e1d42, 0x6008c800,
- 0x60128000, 0x60227800, 0x0501f004, 0x850e1d40,
- 0x60128000, 0x417a7800, 0x59a80005, 0x8c000502,
- 0x05020004, 0x8d0c050a, 0x05020023, 0x850e1d4a,
- 0x42000000, 0x001097c1, 0x0539fae5, 0x59a81809,
- 0x604c1100, 0x0509ff3f, 0x8d0c0520, 0x0500000f,
- 0x4d400000, 0x82600500, 0x000000ff, 0x61fe89ff,
- 0x40643000, 0x603a8000, 0x0535fd14, 0x60040800,
- 0x60001002, 0x051df94d, 0x5c028000, 0x599c0817,
- 0x8c04050a, 0x0502000c, 0x493fc857, 0x4943c857,
- 0x0201f800, 0x0010b5e0, 0x0501f007, 0x8d0c0520,
- 0x05000005, 0x603e8000, 0x61fe89ff, 0x60003000,
- 0x0535fd05, 0x497b8880, 0x5c028000, 0x5c027800,
- 0x5c00c800, 0x1c01f000, 0x60000800, 0x05fdff6d,
- 0x90040542, 0x60000800, 0x05fdf772, 0x60080800,
- 0x05fdff68, 0x90040542, 0x60080800, 0x05fdf76d,
- 0x60080800, 0x05fdff63, 0x82040500, 0xfffffffd,
- 0x90000550, 0x60080800, 0x05fdf766, 0x60000800,
- 0x05fdff5c, 0x82040500, 0xfffffffd, 0x90000550,
- 0x60000800, 0x05fdf75f, 0x59c408a8, 0x05fdff4e,
- 0x05fdff4d, 0x59c400a8, 0x80040d80, 0x05fe07fb,
- 0x1c01f000, 0x59a80005, 0x8c000500, 0x05000008,
- 0x59a80008, 0x8c000500, 0x05020005, 0x84000540,
- 0x48035008, 0x60581100, 0x0509fef6, 0x1c01f000,
- 0x1c01f000, 0x59c40801, 0x82040d00, 0x00018000,
- 0x82040d80, 0x00018000, 0x05000002, 0x84081518,
- 0x480b88a3, 0x1c01f000, 0x42000800, 0x7ff4818e,
- 0x59e00002, 0x8c00051e, 0x05020003, 0x42000800,
- 0x7ff4808e, 0x58041800, 0x480f504b, 0x8c0c0500,
- 0x05020007, 0x8c0c0502, 0x05000005, 0x58044001,
- 0x58042002, 0x58041003, 0x0501f007, 0x42004000,
- 0x0003c014, 0x42002000, 0x0003c014, 0x42001000,
- 0x0002e014, 0x480b5045, 0x48135046, 0x48235047,
- 0x8c0c0500, 0x05020007, 0x8c0c0504, 0x05000005,
- 0x58044004, 0x58042005, 0x58041006, 0x0501f004,
- 0x60c8400d, 0x60c8200d, 0x60c8100d, 0x480b5048,
- 0x48135049, 0x4823504a, 0x1c01f000, 0x59a81048,
- 0x59a82049, 0x59a8404a, 0x60380840, 0x05fdff0d,
- 0x82040d00, 0xffffffc0, 0x82200500, 0x003f0000,
- 0x80000120, 0x80040540, 0x60380840, 0x05fdff0d,
- 0x60380848, 0x05fdff03, 0x82040d00, 0xffffffc0,
- 0x82200500, 0x0000fc00, 0x80000114, 0x80040540,
- 0x60380848, 0x05fdff03, 0x82200500, 0x000003e0,
- 0x8000010a, 0x603808d8, 0x05fdfefe, 0x9020051f,
- 0x603808f0, 0x05fdfefb, 0x82100500, 0x003f0000,
- 0x80000120, 0x60380908, 0x05fdfef6, 0x82100500,
- 0x0000fc00, 0x80000114, 0x60380918, 0x05fdfef1,
- 0x82100500, 0x000003e0, 0x8000010a, 0x603808e0,
- 0x05fdfeec, 0x9010051f, 0x603808f8, 0x05fdfee9,
- 0x82080500, 0x003f0000, 0x80000120, 0x60380910,
- 0x05fdfee4, 0x82080500, 0x0000fc00, 0x80000114,
- 0x60380920, 0x05fdfedf, 0x82080500, 0x000003e0,
- 0x8000010a, 0x603808e8, 0x05fdfeda, 0x9008051f,
- 0x60380900, 0x05fdfed7, 0x1c01f000, 0x59a81045,
- 0x59a82046, 0x59a84047, 0x9020051f, 0x800000c2,
- 0x84000540, 0x60480800, 0x05fdfece, 0x82200500,
- 0x000001e0, 0x80000908, 0x84040d40, 0x82200500,
- 0x00000600, 0x80000106, 0x8400054a, 0x80040540,
- 0x60480830, 0x05fdfec3, 0x82200500, 0x00001800,
- 0x80000916, 0x82200500, 0x0003e000, 0x80000114,
- 0x84000544, 0x80040540, 0x60480848, 0x05fdfeb9,
- 0x9010051f, 0x800000c2, 0x84000540, 0x60480808,
- 0x05fdfeb4, 0x82100500, 0x000001e0, 0x80000908,
- 0x84040d40, 0x82100500, 0x00000600, 0x80000106,
- 0x8400054a, 0x80040540, 0x60480838, 0x05fdfea9,
- 0x82100500, 0x00001800, 0x80000916, 0x82100500,
- 0x0003e000, 0x80000114, 0x84000544, 0x80040540,
- 0x60480850, 0x05fdfe9f, 0x9008051f, 0x800000c2,
- 0x84000540, 0x60480810, 0x05fdfe9a, 0x82080500,
- 0x000001e0, 0x80000908, 0x84040d40, 0x82080500,
- 0x00000600, 0x80000106, 0x8400054a, 0x80040540,
- 0x60480840, 0x05fdfe8f, 0x82080500, 0x00001800,
- 0x80000916, 0x82080500, 0x0003e000, 0x80000114,
- 0x84000544, 0x80040540, 0x60480858, 0x05fdfe85,
- 0x1c01f000, 0x0501f805, 0x60058800, 0x05000002,
- 0x60018800, 0x1c01f000, 0x4c000000, 0x0509ff3f,
- 0x05020003, 0x90000541, 0x0501f003, 0x59e00013,
- 0x8c00050e, 0x5c000000, 0x1c01f000, 0x0501f805,
- 0x60058800, 0x05000002, 0x60018800, 0x1c01f000,
- 0x4c140000, 0x4a03c013, 0x03800300, 0x4a03c014,
- 0x03800380, 0x60800801, 0x60281000, 0x0505f95c,
- 0x05000002, 0x8c14050c, 0x4a03c014, 0x03800000,
- 0x5c002800, 0x1c01f000, 0x4c000000, 0x59a8004b,
- 0x8c000508, 0x05020004, 0x90000541, 0x5c000000,
- 0x1c01f000, 0x80000580, 0x05fdf7fd, 0x05fdfff7,
- 0x60058800, 0x05000002, 0x60018800, 0x1c01f000,
- 0x4c5c0000, 0x4000b800, 0x59a80044, 0x82000d80,
- 0xaabbccdd, 0x0500000f, 0x90000c85, 0x05f61a1f,
- 0x4c000000, 0x0509feeb, 0x5c000000, 0x05020003,
- 0x0c01f81a, 0x0501f016, 0x4c000000, 0x0509fefc,
- 0x5c000000, 0x05fc07fb, 0x0c01f819, 0x0501f010,
- 0x05fdffde, 0x0500000e, 0x8d0c051a, 0x0500000c,
- 0x05fdffbe, 0x0502000a, 0x05fdffca, 0x05020005,
- 0x905c0d83, 0x05020006, 0x6008b800, 0x0501f004,
- 0x905c0d81, 0x05020002, 0x600cb800, 0x405c0000,
- 0x5c00b800, 0x1c01f000, 0x001017f0, 0x001017f1,
- 0x001017f2, 0x001017f3, 0x001017f7, 0x001017f8,
- 0x001017fa, 0x0010180a, 0x00101818, 0x00101828,
- 0x1c01f000, 0x1c01f000, 0x1c01f000, 0x905c0d83,
- 0x05020002, 0x6008b800, 0x1c01f000, 0x1c01f000,
- 0x6004b800, 0x1c01f000, 0x05fdffb8, 0x05000007,
- 0x05fdff9a, 0x05020005, 0x05fdffa6, 0x05000003,
- 0x6000b800, 0x0501f008, 0x905c0d83, 0x05020003,
- 0x6000b800, 0x0501f004, 0x905c0d82, 0x05020002,
- 0x05f5f9de, 0x1c01f000, 0x05fdffa8, 0x0500000c,
- 0x05fdff8a, 0x0502000a, 0x05fdff96, 0x05020005,
- 0x905c0d83, 0x05020006, 0x6008b800, 0x0501f004,
- 0x905c0d81, 0x05020002, 0x600cb800, 0x1c01f000,
- 0x05fdff9a, 0x0500000b, 0x05fdff7c, 0x05020009,
- 0x05fdff88, 0x05020002, 0x0501f006, 0x905c0d83,
- 0x05000006, 0x905c0d81, 0x05000004, 0x0501f004,
- 0x905c0d83, 0x05020002, 0x6008b800, 0x1c01f000,
- 0x05fdff8a, 0x05000006, 0x05fdff6c, 0x05020004,
- 0x05fdff78, 0x05020002, 0x0501f004, 0x905c0d81,
- 0x05020002, 0x600cb800, 0x1c01f000, 0x4803c856,
- 0x4c5c0000, 0x4c600000, 0x4c640000, 0x4c580000,
- 0x497b504c, 0x4200c000, 0x7ff52000, 0x0509fe9b,
- 0x05020007, 0x4803c856, 0x4a03c014, 0x07e30000,
- 0x59e0c813, 0x0501f8bb, 0x0501f014, 0x59a80058,
- 0x82000d80, 0x3261103c, 0x050200b1, 0x4803c856,
- 0x42000800, 0x7ff481e6, 0x59e06802, 0x8c34051e,
- 0x05020003, 0x42000800, 0x7ff480e6, 0x50040000,
- 0x4803c857, 0x48035053, 0x8c00051e, 0x050000a4,
- 0x8200cd00, 0x000000ff, 0x4867c857, 0x4867504d,
- 0x50600800, 0x4807504e, 0x4807c857, 0x82040d80,
- 0x53434651, 0x05020098, 0x8060c000, 0x50600800,
- 0x4807504f, 0x8060c000, 0x50600800, 0x48075050,
- 0x8060c000, 0x50600800, 0x48075051, 0x8060c000,
- 0x50600800, 0x82040d00, 0x0000ffff, 0x48075052,
- 0x4200c000, 0x7ff52002, 0x5060b800, 0x825cbd00,
- 0xffff0000, 0x805cb920, 0x805cb800, 0x05001082,
- 0x8c5c051e, 0x05020080, 0x59e06802, 0x8c34051e,
- 0x0502006a, 0x4803c856, 0x4200c000, 0x7ff52045,
- 0x50603000, 0x82183500, 0x0000ffff, 0x05000011,
- 0x80180497, 0x05021074, 0x8060c000, 0x50602000,
- 0x82100500, 0xffff0000, 0x80000120, 0x82100d00,
- 0x0000ffff, 0x4803c857, 0x4807c857, 0x4c180000,
- 0x05fdfd88, 0x5c003000, 0x80183040, 0x05fe07f3,
- 0x41780800, 0x40641000, 0x60100000, 0x0519ff79,
- 0x59e06802, 0x8c34051e, 0x05020057, 0x4200c000,
- 0x7ff52005, 0x8008c418, 0x5060c800, 0x800409c0,
- 0x0500000a, 0x90041581, 0x05020003, 0x8064c910,
- 0x0501f006, 0x90041582, 0x05020003, 0x8064c920,
- 0x0501f002, 0x8064c930, 0x8264cd00, 0x000000ff,
- 0x4867c857, 0x48675054, 0x42001000, 0x7ff52002,
- 0x50080000, 0x82000500, 0x0000ffff, 0x4803c857,
- 0x8c00051e, 0x05020044, 0x80640480, 0x05021042,
- 0x40640800, 0x405c1000, 0x0519ff3a, 0x4803c857,
- 0x800001c0, 0x0502003c, 0x59e06802, 0x8c34051e,
- 0x05020034, 0x4200c000, 0x7ff52045, 0x805cc418,
- 0x8004c418, 0x05001034, 0x05000033, 0x4863c857,
- 0x50600000, 0x82000500, 0x0000ffff, 0x48035055,
- 0x8c00051e, 0x0502002c, 0x4803c857, 0x80000c97,
- 0x05021029, 0x40601000, 0x80081000, 0x50080800,
- 0x48075056, 0x80081000, 0x50080800, 0x48075057,
- 0x4000b800, 0x8060c000, 0x50602000, 0x82100500,
- 0xffff0000, 0x80000120, 0x82100d00, 0x0000ffff,
- 0x4803c857, 0x4807c857, 0x05fdfd36, 0x805cb840,
- 0x05fe07f5, 0x0501f016, 0x4803c856, 0x42000000,
- 0x7ff52001, 0x5000b000, 0x8258b500, 0xffff0000,
- 0x8058b124, 0x8258c400, 0x7ff52000, 0xb060c400,
- 0x05fdf790, 0x8258c400, 0x7ff52000, 0x05fdf7aa,
- 0x8258c400, 0x7ff52000, 0xb060c400, 0x805cc418,
- 0x05fdf7cc, 0x4a03504c, 0xdeaddead, 0x5c00b000,
- 0x5c00c800, 0x5c00c000, 0x5c00b800, 0x1c01f000,
- 0x4867c857, 0x90640d20, 0x8004690a, 0x82640d00,
- 0x00000400, 0x80040912, 0x80046d4d, 0x90640d01,
- 0x800408c4, 0x80046d4d, 0x90640d02, 0x800408c4,
- 0x80046d4d, 0x82640d00, 0x00000100, 0x80040908,
- 0x80046d4d, 0x82640d00, 0x00000080, 0x80040904,
- 0x80046d4d, 0xb0640d00, 0x80046d4d, 0x82640d00,
- 0x00000200, 0x80040904, 0x80046d4d, 0x8234cd00,
- 0x000000ff, 0x1c01f000, 0x0509fdcd, 0x0502000d,
- 0x4803c856, 0x4a03c014, 0x18001800, 0x4a03c013,
- 0x18000800, 0x05fdfce4, 0x4a03c013, 0x18000000,
- 0x61a1d007, 0x0519fe2a, 0x4a03c013, 0x18000800,
- 0x1c01f000, 0x0509fdbe, 0x0502000d, 0x4803c856,
- 0x4a03c014, 0x18001800, 0x4a03c013, 0x18001800,
- 0x05fdfcd5, 0x4a03c013, 0x18001000, 0x61a1d007,
- 0x0519fe1b, 0x4a03c013, 0x18001800, 0x1c01f000,
- 0x0509fdaf, 0x0502000c, 0x60041800, 0x42001000,
- 0x0010944d, 0x60900800, 0x60002180, 0x50080000,
- 0x82000500, 0x000000ff, 0x4803c857, 0x0509fe46,
- 0x05f408a2, 0x1c01f000, 0x4803c856, 0x59a80006,
- 0x8c00051e, 0x05020008, 0x61f2880f, 0x42003000,
- 0x00fffffc, 0x050dfffc, 0x05020007, 0x0501f808,
- 0x05000005, 0x4a03501c, 0x0000ffff, 0x90000541,
- 0x1c01f000, 0x80000580, 0x05fdf7fe, 0x4937c857,
- 0x0521fd2b, 0x0500000f, 0x4936600a, 0x64066407,
- 0x417a7800, 0x050dffae, 0x600c0800, 0x050dffb7,
- 0x59a8001d, 0x80000000, 0x4803501d, 0x599c0208,
- 0x48026c12, 0x600a7000, 0x0005f905, 0x90000541,
- 0x1c01f000, 0x40681000, 0x0501f805, 0x60018800,
- 0x05000002, 0x60058800, 0x1c01f000, 0x480bc857,
- 0x492fc857, 0x4c5c0000, 0x4008b800, 0x61f6880f,
- 0x42003000, 0x00fffffd, 0x050dffd3, 0x05020019,
- 0x5934000a, 0x84000544, 0x4802680a, 0x0521fd08,
- 0x05000014, 0x4936600a, 0x812e59c0, 0x05000006,
- 0x592c0405, 0x8c00051e, 0x05000003, 0x48ee6023,
- 0x0501f004, 0x59a8021b, 0x8400055c, 0x4803521b,
- 0x492e6009, 0x64066407, 0x485e601e, 0x608a7000,
- 0x0005f905, 0x90000541, 0x5c00b800, 0x1c01f000,
- 0x80000580, 0x05fdf7fd, 0x4933c857, 0x59a8021b,
- 0x8c000508, 0x05020010, 0x5930500a, 0x482bc857,
- 0x916c0582, 0x0502000c, 0x0501f815, 0x0502000a,
- 0x58280403, 0x82000580, 0x000007fc, 0x05000007,
- 0x59a80016, 0x80000040, 0x4803c857, 0x05f41843,
- 0x48035016, 0x1c01f000, 0x5930041f, 0x900005a1,
- 0x05fc07fd, 0x59a8001d, 0x80000040, 0x4803c857,
- 0x05fc17f9, 0x4803501d, 0x1c01f000, 0x59300009,
- 0x800001c0, 0x05020007, 0x59300403, 0x90000581,
- 0x05020003, 0x90000541, 0x0501f002, 0x80000580,
- 0x1c01f000, 0x4933c857, 0x493fc857, 0x4947c857,
- 0x4d400000, 0x4d340000, 0x4d440000, 0x4c580000,
- 0x0519ffff, 0x4df00000, 0x8060c1c0, 0x05020003,
- 0x6004b000, 0x0501f003, 0x61c0b00f, 0x417a8800,
- 0x41440000, 0x81ac0400, 0x50000000, 0x80026d40,
- 0x05000015, 0x4d3c0000, 0x60067800, 0x0511f9fd,
- 0x5c027800, 0x60a68000, 0x0201f800, 0x0010bb9e,
- 0x0201f800, 0x0010bc6f, 0x0201f800, 0x0010bd08,
- 0x0511fa74, 0x05020005, 0x4937c857, 0x4a026c00,
- 0x00000404, 0x0501f002, 0x0511faa3, 0x0201f800,
- 0x0010c0ee, 0x81468800, 0x8058b040, 0x05fe07e5,
- 0x5c03e000, 0x05180fc6, 0x5c00b000, 0x5c028800,
- 0x5c026800, 0x5c028000, 0x1c01f000, 0x0501f805,
- 0x60058800, 0x05000002, 0x60018800, 0x1c01f000,
- 0x4937c857, 0x4947c857, 0x4c5c0000, 0x4c600000,
- 0x4c640000, 0x59a8006f, 0x8c000500, 0x0500001d,
- 0x599c0017, 0x8c00050a, 0x0502001a, 0x5934ba02,
- 0x825cbd00, 0x000000ff, 0x485fc857, 0x4178c000,
- 0x4178c800, 0x82600400, 0x00109953, 0x50002000,
- 0x8060c1c0, 0x05000008, 0x82100500, 0x000000ff,
- 0x82002d80, 0x000000ff, 0x0500000a, 0x805c0580,
- 0x0500000a, 0x80102110, 0x8064c800, 0x90640584,
- 0x05fe07f6, 0x8060c000, 0x906005a0, 0x05fe07ed,
- 0x4813c857, 0x90000541, 0x5c00c800, 0x5c00c000,
- 0x5c00b800, 0x1c01f000, 0x0501f805, 0x60058800,
- 0x05020002, 0x60018800, 0x1c01f000, 0x59a8021b,
- 0x8c000512, 0x05f60883, 0x1c01f000, 0x00007eef,
- 0x00007de8, 0x00007ce4, 0x000080e2, 0x00007be1,
- 0x000080e0, 0x000080dc, 0x000080da, 0x00007ad9,
- 0x000080d6, 0x000080d5, 0x000080d4, 0x000080d3,
- 0x000080d2, 0x000080d1, 0x000079ce, 0x000078cd,
- 0x000080cc, 0x000080cb, 0x000080ca, 0x000080c9,
- 0x000080c7, 0x000080c6, 0x000077c5, 0x000076c3,
- 0x000080bc, 0x000080ba, 0x000075b9, 0x000080b6,
- 0x000074b5, 0x000073b4, 0x000072b3, 0x000080b2,
- 0x000080b1, 0x000080ae, 0x000071ad, 0x000080ac,
- 0x000070ab, 0x00006faa, 0x00006ea9, 0x000080a7,
- 0x00006da6, 0x00006ca5, 0x00006ba3, 0x00006a9f,
- 0x0000699e, 0x0000689d, 0x0000809b, 0x00008098,
- 0x00006797, 0x00006690, 0x0000658f, 0x00006488,
- 0x00006384, 0x00006282, 0x00008081, 0x00008080,
- 0x0000617c, 0x0000607a, 0x00008079, 0x00005f76,
- 0x00008075, 0x00008074, 0x00008073, 0x00008072,
- 0x00008071, 0x0000806e, 0x00005e6d, 0x0000806c,
- 0x00005d6b, 0x00005c6a, 0x00005b69, 0x00008067,
- 0x00005a66, 0x00005965, 0x00005863, 0x0000575c,
- 0x0000565a, 0x00005559, 0x00008056, 0x00008055,
- 0x00005454, 0x00005353, 0x00005252, 0x00005151,
- 0x0000504e, 0x00004f4d, 0x0000804c, 0x0000804b,
- 0x00004e4a, 0x00004d49, 0x00008047, 0x00004c46,
- 0x00008045, 0x00008043, 0x0000803c, 0x0000803a,
- 0x00008039, 0x00008036, 0x00004b35, 0x00008034,
- 0x00004a33, 0x00004932, 0x00004831, 0x0000802e,
- 0x0000472d, 0x0000462c, 0x0000452b, 0x0000442a,
- 0x00004329, 0x00004227, 0x00008026, 0x00008025,
- 0x00004123, 0x0000401f, 0x00003f1e, 0x00003e1d,
- 0x00003d1b, 0x00003c18, 0x00008017, 0x00008010,
- 0x00003b0f, 0x00003a08, 0x00008004, 0x00003902,
- 0x00008001, 0x00008000, 0x00008000, 0x00003800,
- 0x00003700, 0x00003600, 0x00008000, 0x00003500,
- 0x00008000, 0x00008000, 0x00008000, 0x00003400,
- 0x00008000, 0x00008000, 0x00008000, 0x00008000,
- 0x00008000, 0x00008000, 0x00003300, 0x00003200,
- 0x00008000, 0x00008000, 0x00008000, 0x00008000,
- 0x00008000, 0x00008000, 0x00003100, 0x00003000,
- 0x00008000, 0x00008000, 0x00002f00, 0x00008000,
- 0x00002e00, 0x00002d00, 0x00002c00, 0x00008000,
- 0x00008000, 0x00008000, 0x00002b00, 0x00008000,
- 0x00002a00, 0x00002900, 0x00002800, 0x00008000,
- 0x00002700, 0x00002600, 0x00002500, 0x00002400,
- 0x00002300, 0x00002200, 0x00008000, 0x00008000,
- 0x00002100, 0x00002000, 0x00001f00, 0x00001e00,
- 0x00001d00, 0x00001c00, 0x00008000, 0x00008000,
- 0x00001b00, 0x00001a00, 0x00008000, 0x00001900,
- 0x00008000, 0x00008000, 0x00008000, 0x00008000,
- 0x00008000, 0x00008000, 0x00001800, 0x00008000,
- 0x00001700, 0x00001600, 0x00001500, 0x00008000,
- 0x00001400, 0x00001300, 0x00001200, 0x00001100,
- 0x00001000, 0x00000f00, 0x00008000, 0x00008000,
- 0x00000e00, 0x00000d00, 0x00000c00, 0x00000b00,
- 0x00000a00, 0x00000900, 0x00008000, 0x00008000,
- 0x00000800, 0x00000700, 0x00008000, 0x00000600,
- 0x00008000, 0x00008000, 0x00008000, 0x00000500,
- 0x00000400, 0x00000300, 0x00008000, 0x00000200,
- 0x00008000, 0x00008000, 0x00008000, 0x00000100,
- 0x00008000, 0x00008000, 0x00008000, 0x00008000,
- 0x00008000, 0x00008000, 0x00000000, 0x00008000,
- 0x00008000, 0x00008000, 0x00008000, 0x00008000,
- 0x00008000, 0x00008000, 0x00008000, 0x00008000,
- 0x00008000, 0x00008000, 0x00008000, 0x00008000,
- 0x00008000, 0x00008000, 0x00008000, 0x05f5fa32,
- 0x05f00ec2, 0x492f4017, 0x1c01f000, 0x91a0ac07,
- 0x83a00580, 0x00109490, 0x05000008, 0x492fc857,
- 0x812e59c0, 0x05f00eb9, 0x912ca407, 0x6034b000,
- 0x0535fef9, 0x0501f00d, 0x6040b000, 0x91e0a420,
- 0x50500000, 0x8050a000, 0x50500800, 0x900409c0,
- 0x80040540, 0x4400a800, 0x8050a000, 0x8054a800,
- 0x8058b040, 0x05fe07f7, 0x1c01f000, 0x59a00207,
- 0xb0000cbf, 0x050210be, 0x0c01f001, 0x00101bc9,
- 0x00101bff, 0x00101bff, 0x00101c49, 0x00101c5e,
- 0x00101bff, 0x00101bc9, 0x00101c73, 0x00101c84,
- 0x00101bff, 0x00101bff, 0x00101c9c, 0x00101cba,
- 0x00101cd8, 0x00101bff, 0x00101cf5, 0x00101bff,
- 0x00101bff, 0x00101d15, 0x00101bff, 0x00101dc4,
- 0x00101bff, 0x00101bff, 0x00101bff, 0x00101bff,
- 0x00101deb, 0x00101e42, 0x00101bff, 0x00101bff,
- 0x00101bff, 0x00101bff, 0x00101bff, 0x00101e8c,
- 0x00101bff, 0x00101ecd, 0x00101bff, 0x00101bff,
- 0x00101bff, 0x00101bff, 0x00101ed2, 0x00101fcc,
- 0x00101bff, 0x00101fd3, 0x00101bff, 0x00101bff,
- 0x00101bff, 0x00101bff, 0x00101bff, 0x00101fd4,
- 0x0010205c, 0x001021fa, 0x00102206, 0x00101bff,
- 0x00101bff, 0x00101bff, 0x00101bff, 0x00102219,
- 0x00101bff, 0x00101bff, 0x00101bff, 0x00101bff,
- 0x00101bff, 0x00101bff, 0x00101bff, 0x00102239,
- 0x00102277, 0x001022bb, 0x001022d0, 0x0010ae15,
- 0x0010b404, 0x0010230f, 0x00101bff, 0x00101bff,
- 0x00101bff, 0x00101bff, 0x00101bff, 0x00101bff,
- 0x00101bff, 0x00101bff, 0x00101bff, 0x00101bff,
- 0x00101bff, 0x00101bff, 0x00102454, 0x001024b1,
- 0x00101bff, 0x00101bff, 0x0010250d, 0x00101bff,
- 0x00102587, 0x0010260b, 0x00101bff, 0x00101bff,
- 0x00102672, 0x001026fc, 0x00101bff, 0x0010273e,
- 0x001028a1, 0x00101bff, 0x001028b0, 0x0010292a,
- 0x00101bff, 0x00101bff, 0x00101bff, 0x00101bff,
- 0x00102983, 0x0010299d, 0x001029b4, 0x00101bff,
- 0x00102a2a, 0x00101bff, 0x00101bff, 0x00102a66,
- 0x00101bff, 0x00102a87, 0x00101bff, 0x00101bff,
- 0x00102adb, 0x00102c0c, 0x00101bff, 0x00101bff,
- 0x00101bff, 0x00101bff, 0x00101bff, 0x00102c4e,
- 0x00102ccf, 0x00101bff, 0x48efc857, 0x4031d800,
- 0x58ef400a, 0x58ec0002, 0x82000580, 0x00000200,
- 0x0500003b, 0x48efc857, 0x4a034207, 0x00004000,
- 0x0509f9c6, 0x83a00580, 0x00109490, 0x0500000b,
- 0x58ee5809, 0x4d2c0000, 0x0501f850, 0x41a25800,
- 0x05f5f9a4, 0x40ee5800, 0x05f5f9a2, 0x5c025800,
- 0x492fc857, 0x0001f32c, 0x05026007, 0x59a0001e,
- 0x84000542, 0x4803401e, 0x4a01d808, 0x00101bda,
- 0x1c01f000, 0x59a00207, 0x82000d80, 0x00004000,
- 0x05000005, 0x900001c0, 0x90000551, 0x4803c011,
- 0x0501f004, 0x900001c0, 0x90000550, 0x4803c011,
- 0x0501f844, 0x59e00017, 0x8c00050a, 0x60000800,
- 0x0002088c, 0x8d0c0530, 0x05fa0b7d, 0x0002098c,
- 0x6403c017, 0x4203e000, 0x30000001, 0x4203e000,
- 0x40000000, 0x40ee5800, 0x05f5f97e, 0x59a0001e,
- 0x84000504, 0x4803401e, 0x1c01f000, 0x4803c856,
- 0x4a034207, 0x00004001, 0x05fdf7ca, 0x4803c856,
- 0x4a034207, 0x00004002, 0x05fdf7c6, 0x4803c856,
- 0x4a034207, 0x00004003, 0x05fdf7c2, 0x4803c856,
- 0x4a034207, 0x00004005, 0x05fdf7be, 0x4803c856,
- 0x4a034207, 0x00004006, 0x05fdf7ba, 0x4803c856,
- 0x4a034207, 0x0000400b, 0x05fdf7b6, 0x4803c856,
- 0x4a034207, 0x0000400c, 0x05fdf7b2, 0x4803c856,
- 0x4a034207, 0x0000400c, 0x05fdf7ae, 0x4a034207,
- 0x00004020, 0x05fdf7ab, 0x4c580000, 0x4c500000,
- 0x4c540000, 0x58eca809, 0x8054a9c0, 0x05f00dbf,
- 0x91a0a407, 0x9054ac07, 0x6034b000, 0x0535fdfe,
- 0x5c00a800, 0x5c00a000, 0x5c00b000, 0x1c01f000,
- 0x4c580000, 0x4c500000, 0x4c540000, 0x59a00007,
- 0x4803c857, 0x59a00008, 0x4803c857, 0x59a00009,
- 0x4803c857, 0x91e0ac20, 0x91a0a407, 0x6040b000,
- 0x50500000, 0x4400a800, 0x8054a800, 0x900001c0,
- 0x4400a800, 0x8054a800, 0x8050a000, 0x8058b040,
- 0x05fe07f8, 0x5c00a800, 0x5c00a000, 0x5c00b000,
- 0x1c01f000, 0x59a00407, 0x800000c2, 0x59a00a08,
- 0x900409c0, 0x80040540, 0x84000540, 0x59a00c08,
- 0x8c040500, 0x0500000b, 0x4c000000, 0x0535fe28,
- 0x5c000000, 0x05000004, 0x48030004, 0x64030000,
- 0x05fdf771, 0x64030000, 0x64134407, 0x05fc07b0,
- 0x4803880e, 0x05fdf76c, 0x59a00407, 0x800000c2,
- 0x59a00c08, 0x8c040500, 0x0500000d, 0x4c000000,
- 0x0535fe17, 0x5c000000, 0x05000006, 0x48030004,
- 0x59800805, 0x48074407, 0x64030000, 0x05fdf75e,
- 0x64030000, 0x64134407, 0x05fc079d, 0x4803880e,
- 0x59c4080f, 0x48074407, 0x05fdf757, 0x59a01c07,
- 0x59a00208, 0x900c19c0, 0x800c1d40, 0x580c0803,
- 0x80000580, 0x500c1000, 0x80080400, 0x800c1800,
- 0x80040840, 0x05fe07fc, 0x48034407, 0x900001c0,
- 0x48034208, 0x800001c0, 0x05fc0747, 0x05fdf784,
- 0x64174407, 0x64174208, 0x64034408, 0x59a8000a,
- 0x82000c80, 0x00140000, 0x05021004, 0x42000000,
- 0x0013ffff, 0x0501f006, 0x59a80883, 0x8c040500,
- 0x05000003, 0x82000400, 0x00006000, 0x48034209,
- 0x900001c0, 0x48034409, 0x60000101, 0x4803420a,
- 0x900001c0, 0x4803440e, 0x6403400f, 0x05fdf72e,
- 0x59a00408, 0x59a01208, 0x900811c0, 0x80081540,
- 0x59a0040a, 0x59a01a0a, 0x900c19c0, 0x800c1d40,
- 0x59a00a09, 0x59a00409, 0x900409c0, 0x80040d40,
- 0x59a0020b, 0x90002490, 0x05fc1765, 0x59a02407,
- 0x900001c0, 0x80100540, 0x59a8280a, 0x80142480,
- 0x050a10f0, 0x42002800, 0x7fefffff, 0x80142480,
- 0x05fe175b, 0x42002800, 0x7ffd0000, 0x80142480,
- 0x05fc1757, 0x0509f0e7, 0x59a00408, 0x59a01208,
- 0x900811c0, 0x80081540, 0x59a0040a, 0x59a01a0a,
- 0x900c19c0, 0x800c1d40, 0x59a00a09, 0x59a00409,
- 0x900409c0, 0x80040d40, 0x59a0020b, 0x90002490,
- 0x05fc1747, 0x59a02407, 0x900001c0, 0x80100540,
- 0x59a8280a, 0x80142480, 0x050a10d8, 0x42002800,
- 0x7fefffff, 0x80142480, 0x05fe173d, 0x42002800,
- 0x7ffd0000, 0x80142480, 0x05fc1739, 0x0509f0cf,
- 0x59a02408, 0x59a00208, 0x901021c0, 0x80102540,
- 0x59a01a0b, 0x59a00407, 0x900c19c0, 0x800c1d40,
- 0x41781000, 0x820c0580, 0x00007c00, 0x0500000a,
- 0x820c0480, 0x00007a00, 0x05001007, 0x820c0480,
- 0x00007cff, 0x05021004, 0x0535fd91, 0x05000007,
- 0x80081000, 0x44101800, 0x800811c0, 0x05fc06da,
- 0x64030000, 0x05fdf6d8, 0x64030000, 0x64134407,
- 0x05fdf717, 0x59a01a0b, 0x59a00407, 0x900c19c0,
- 0x800c1d40, 0x41781000, 0x820c0580, 0x00007c00,
- 0x0500000a, 0x820c0480, 0x00007a00, 0x05001007,
- 0x820c0480, 0x00007cff, 0x05021004, 0x0535fd78,
- 0x0500000e, 0x80081000, 0x500c0000, 0x82000d00,
- 0x0000ffff, 0x48074208, 0x82000d00, 0xffff0000,
- 0x900409c0, 0x48074408, 0x800811c0, 0x05fc06ba,
- 0x64030000, 0x05fdf6b8, 0x64030000, 0x64134407,
- 0x05fdf6f7, 0x4d2c0000, 0x4d340000, 0x4d300000,
- 0x4d440000, 0x59a28c07, 0x0001fac4, 0x05000006,
- 0x5c028800, 0x5c026000, 0x5c026800, 0x5c025800,
- 0x05fdf6ef, 0x4937c857, 0x59a04408, 0x59a00208,
- 0x900001c0, 0x80204540, 0x4823c857, 0x0501f877,
- 0x05000008, 0x64074209, 0x4a034407, 0x0000ffff,
- 0x4a034208, 0x0000ffff, 0x497b4408, 0x0501f03d,
- 0x497b4407, 0x0501f879, 0x0500003f, 0x59300402,
- 0x48034407, 0x59300202, 0x48034208, 0x59300006,
- 0x48034408, 0x59a0020c, 0x8c000500, 0x05000030,
- 0x4933c857, 0x050dff20, 0x05000003, 0x64274407,
- 0x0501f031, 0x8d0c050e, 0x05000003, 0x64074407,
- 0x0501f02d, 0x916c0583, 0x05000003, 0x641f4407,
- 0x0501f029, 0x59340200, 0x8c00050e, 0x05000003,
- 0x64834407, 0x0501f024, 0x59300407, 0x90000d83,
- 0x05020007, 0x59300804, 0x9004051f, 0x90000584,
- 0x05020003, 0x8c04053e, 0x05020015, 0x0509f829,
- 0x05020003, 0x640b4407, 0x0501f017, 0x492fc857,
- 0x4a025c05, 0x00008000, 0x497a5a05, 0x497a5806,
- 0x052dfbba, 0x05020003, 0x640f4407, 0x0501f00e,
- 0x4a01d808, 0x00101d76, 0x5c028800, 0x5c026000,
- 0x5c026800, 0x5c025800, 0x1c01f000, 0x640b4209,
- 0x5c028800, 0x5c026000, 0x5c026800, 0x5c025800,
- 0x05fdf659, 0x5c028800, 0x5c026000, 0x5c026800,
- 0x5c025800, 0x05fdf696, 0x492fc857, 0x4933c857,
- 0x497a6020, 0x592c0006, 0x82000580, 0x01000000,
- 0x05020003, 0x64134407, 0x05fdf68d, 0x4d2c0000,
- 0x912e5c07, 0x592c0000, 0x82000580, 0x02000000,
- 0x05020011, 0x4803c856, 0x64134209, 0x592c0804,
- 0x82040500, 0x0000ffff, 0x48034409, 0x80040920,
- 0x4807420a, 0x592c0805, 0x82040500, 0x0000ffff,
- 0x4803440a, 0x80040920, 0x4807420b, 0x5c025800,
- 0x05fdf635, 0x4803c856, 0x64174209, 0x592c0801,
- 0x82040500, 0x0000ffff, 0x48034409, 0x80040920,
- 0x4807420a, 0x05fdf7f6, 0x4937c857, 0x4823c857,
- 0x5934000f, 0x80001d40, 0x05000005, 0x580c0006,
- 0x80200580, 0x05020003, 0x81780000, 0x1c01f000,
- 0x580c0000, 0x05fdf7f8, 0x4823c857, 0x4d2c0000,
- 0x42026000, 0x0010ccb4, 0x59300407, 0x90000d83,
- 0x05000003, 0x90000d86, 0x05020007, 0x59325809,
- 0x812e59c0, 0x05000004, 0x592c0006, 0x80200580,
- 0x05000009, 0x91326424, 0x59a8000b, 0x81300480,
- 0x05fc17f2, 0x417a6000, 0x80000580, 0x5c025800,
- 0x1c01f000, 0x90000541, 0x5c025800, 0x1c01f000,
- 0x83a00580, 0x00109490, 0x05fe0639, 0x64030000,
- 0x4a034207, 0x00004000, 0x4a03c011, 0x40000010,
- 0x05fdfe64, 0x59e00017, 0x8c00050a, 0x60000800,
- 0x0002088c, 0x8d0c0530, 0x05fa099d, 0x0002098c,
- 0x6403c017, 0x4203e000, 0x30000001, 0x4203e000,
- 0x40000000, 0x4203e000, 0xb0100000, 0x41fc0000,
- 0x8c00050a, 0x05fc07fc, 0x0535fc9d, 0x05fc07ff,
- 0x59800802, 0x8c040520, 0x05020003, 0x64030000,
- 0x05fdf7f5, 0x60101020, 0x50080000, 0x8400054c,
- 0x44001000, 0x64030000, 0x0501f000, 0x59a00c07,
- 0x800409c0, 0x05000005, 0x916c0580, 0x05000003,
- 0x646b4407, 0x05fdf61a, 0x42007000, 0x001094f1,
- 0x58381c01, 0x58382201, 0x58383202, 0x8c040500,
- 0x0500000b, 0x59a01208, 0x82080500, 0x0000f003,
- 0x05fe0613, 0x82080480, 0x00000841, 0x05fe1610,
- 0x82080480, 0x00000100, 0x05fc160d, 0x40040000,
- 0x800c0540, 0x90000528, 0x900005a8, 0x05fc0608,
- 0x8c04050a, 0x05000006, 0x59a03c08, 0x901c0486,
- 0x05fe1603, 0x901c0481, 0x05fc1601, 0x8c040506,
- 0x05000003, 0x4a01a8e4, 0x0000c000, 0x8c040504,
- 0x05000004, 0x59e00002, 0x8400056e, 0x4803c002,
- 0x8c040502, 0x05000004, 0x600028ec, 0x4a002805,
- 0xd0000000, 0x40040000, 0x800c0540, 0x48007401,
- 0x8c040500, 0x05000002, 0x48087201, 0x8c04050a,
- 0x0500001a, 0x481c7202, 0x4c0c0000, 0x4c100000,
- 0x4c180000, 0x0519fb96, 0x4df00000, 0x58383a02,
- 0x481fc857, 0x41780000, 0x801c3840, 0x800010c8,
- 0x82081400, 0x0000b037, 0x64001002, 0x801c1c80,
- 0x05021002, 0x64081002, 0x80000000, 0x90001c85,
- 0x05fc17f7, 0x5c03e000, 0x05180b71, 0x5c003000,
- 0x5c002000, 0x5c001800, 0x480f4407, 0x48134208,
- 0x481b4408, 0x05fdf588, 0x4d440000, 0x4d340000,
- 0x59a28c07, 0x0001fac4, 0x05020007, 0x050dfe16,
- 0x05000008, 0x64274407, 0x5c026800, 0x5c028800,
- 0x05fdf5bf, 0x5c026800, 0x5c028800, 0x05fdf5c0,
- 0x59a01208, 0x59a01c08, 0x5934400a, 0x82203d00,
- 0x0000e000, 0x801c391a, 0x8c080500, 0x0500001a,
- 0x900c0d07, 0x90040580, 0x0500000b, 0x90040581,
- 0x05000009, 0x90040583, 0x05000007, 0x90040584,
- 0x05000005, 0x90040593, 0x05000003, 0x4937c857,
- 0x60100800, 0x82204500, 0xffff1fff, 0x800400da,
- 0x80200540, 0x4802680a, 0x4c080000, 0x4c1c0000,
- 0x0519fb53, 0x0511f83e, 0x0519fb3d, 0x5c003800,
- 0x5c001000, 0x481f4408, 0x5934400a, 0x82203d00,
- 0x0f000000, 0x801c3930, 0x8c080504, 0x05020011,
- 0x8c080502, 0x0500000b, 0x4823c857, 0x82204500,
- 0xf0ffffff, 0x59a01a09, 0x900c0d0f, 0x800400f0,
- 0x8400056e, 0x80200540, 0x4802680a, 0x4803c857,
- 0x481f4209, 0x5c026800, 0x5c028800, 0x05fdf542,
- 0x82204500, 0xf07fffff, 0x4822680a, 0x05fdf7f9,
- 0x8d0c050e, 0x05000003, 0x64074407, 0x05fdf57c,
- 0x916c0583, 0x0502000f, 0x59a8000f, 0x497b4407,
- 0x0511fa80, 0x0500000e, 0x82000d00, 0x00ffff00,
- 0x0502000b, 0x82000c00, 0x00101a23, 0x50040800,
- 0x80040910, 0x82041580, 0x00000080, 0x05020003,
- 0x641f4407, 0x05fdf56a, 0x48074407, 0x82000d00,
- 0x0000ffff, 0x48074208, 0x80000120, 0x48034408,
- 0x59a8021b, 0x82001500, 0x00002100, 0x480b440a,
- 0x8c000502, 0x05000016, 0x8c000506, 0x05000006,
- 0x90000d0a, 0x90040d8a, 0x05020003, 0x6407420a,
- 0x0501f018, 0x8c00050a, 0x05000006, 0x90000d22,
- 0x90040da2, 0x05020003, 0x640f420a, 0x0501f011,
- 0x8c000508, 0x05000006, 0x90000d12, 0x90040d92,
- 0x05020003, 0x640b420a, 0x0501f00a, 0x0511fa51,
- 0x05020003, 0x6413420a, 0x05fdf503, 0x8c000506,
- 0x05000003, 0x64174407, 0x05fdf541, 0x6403420a,
- 0x05fdf4fd, 0x59a8002a, 0x48034408, 0x59a8002b,
- 0x4803420a, 0x05fdf4f8, 0x42007800, 0x00109905,
- 0x59a00407, 0x4803c857, 0x90000c8a, 0x05fe1538,
- 0x0c01f001, 0x00101f4b, 0x00101eeb, 0x00101ef8,
- 0x00101f08, 0x00101f27, 0x00101f4c, 0x00101ee4,
- 0x00101ee4, 0x00101f58, 0x00101f93, 0x00101ee5,
- 0x05fdf52b, 0x59a00208, 0x48007c01, 0x59a00408,
- 0x48007a01, 0x05f1fbb0, 0x0501f061, 0x916c0580,
- 0x05fc051f, 0x59a00a08, 0x59a00408, 0x900001c0,
- 0x80040d40, 0x4807c857, 0x59a00a09, 0x59a00409,
- 0x900001c0, 0x80040d40, 0x4807c857, 0x0501f054,
- 0x916c0580, 0x05fc0512, 0x59a00408, 0x59a01208,
- 0x900001c0, 0x80081540, 0x59a00409, 0x59a01a09,
- 0x900001c0, 0x800c1d40, 0x42000000, 0x00109cdb,
- 0x480fc857, 0x480bc857, 0x60000820, 0x0505f69f,
- 0x59a00a08, 0x59a00408, 0x900001c0, 0x80041d40,
- 0x820c0c80, 0x00108b5c, 0x05fe1501, 0x820c0c80,
- 0x00100000, 0x05fc14fe, 0x480fc857, 0x903c7c22,
- 0x503c0800, 0x800409c0, 0x05000005, 0x903c05a6,
- 0x05fc04f7, 0x803c7800, 0x05fdf7fa, 0x59e41001,
- 0x82080d00, 0xfffeffcf, 0x4807c801, 0x440c7800,
- 0x46001800, 0x0201f800, 0x800c1800, 0x46001800,
- 0x001001d7, 0x480bc801, 0x0501f025, 0x59a01a08,
- 0x59a00408, 0x900001c0, 0x800c1d40, 0x480c7803,
- 0x59a02209, 0x59a00409, 0x900001c0, 0x80102540,
- 0x48107804, 0x59a0020a, 0x40001000, 0x48007807,
- 0x80000040, 0x05fc14da, 0x48007808, 0x60000880,
- 0x0519f8b8, 0x80000540, 0x05000002, 0x05fdf4d4,
- 0x40040000, 0x800c1c00, 0x05fc14d1, 0x4800780a,
- 0x480c7805, 0x48107806, 0x4978780c, 0x59a0040a,
- 0x800000c4, 0x4800780b, 0x59e40001, 0x4803c857,
- 0x82000540, 0x00040000, 0x4803c801, 0x05fdf47e,
- 0x49787803, 0x49787804, 0x49787808, 0x49787807,
- 0x49787803, 0x49787805, 0x49787806, 0x4978780c,
- 0x4978780b, 0x59e40001, 0x84000524, 0x05fdf7f3,
- 0x4978781f, 0x49787814, 0x49787815, 0x4978781d,
- 0x49787817, 0x49787818, 0x59a01a08, 0x59a00408,
- 0x900001c0, 0x800c1d40, 0x480c780e, 0x480c7819,
- 0x480c781b, 0x59a02209, 0x59a00409, 0x900001c0,
- 0x80102540, 0x4810780f, 0x4810781a, 0x4810781c,
- 0x59a0020a, 0x80000540, 0x05fc04a1, 0x48007813,
- 0x60000808, 0x40001000, 0x0519f87e, 0x80000540,
- 0x05fe049b, 0x40040000, 0x800c1c00, 0x05fc1498,
- 0x480c7810, 0x48107811, 0x4a03420a, 0x00000400,
- 0x59a0040a, 0x4800781e, 0x850e1d6a, 0x59a0040b,
- 0x48007a12, 0x59a0020c, 0x48007c12, 0x600c0000,
- 0x05f1faf0, 0x80102000, 0x4810780d, 0x48134209,
- 0x901021c0, 0x48134409, 0x59e40052, 0x4803c857,
- 0x4a007816, 0x00000400, 0x903c0416, 0x48034208,
- 0x900001c0, 0x48034408, 0x05fdf437, 0x583c0800,
- 0x830e1d00, 0xffcfffff, 0x48ec7820, 0x4a01d802,
- 0x00000100, 0x583c0017, 0x82000500, 0x000000ff,
- 0x05020008, 0x4807c857, 0x8c040502, 0x05000004,
- 0x84040d48, 0x48047800, 0x1c01f000, 0x0501f003,
- 0x05f5fe69, 0x1c01f000, 0x42007800, 0x00109905,
- 0x583dd820, 0x58ef400a, 0x40ec6000, 0x583c0000,
- 0x48efc857, 0x49a3c857, 0x4803c857, 0x82000500,
- 0x0000ffc0, 0x48007800, 0x583c001d, 0x4803c857,
- 0x583c0819, 0x4807c857, 0x48074208, 0x900409c0,
- 0x48074408, 0x583c081a, 0x48074209, 0x900409c0,
- 0x48074409, 0x583c081b, 0x4807420a, 0x900409c0,
- 0x4807440a, 0x583c081c, 0x4807420b, 0x900409c0,
- 0x4807440b, 0x49787818, 0x583c0017, 0x49787817,
- 0x82000500, 0x000000ff, 0x05fe03f8, 0x05fdf3fe,
- 0x59a80005, 0x48034407, 0x59a80006, 0x48034208,
- 0x59a80007, 0x48034408, 0x05fdf3f7, 0x05f1fa13,
- 0x4803c856, 0x59a0020c, 0x4803c857, 0x8c00051e,
- 0x05060750, 0x05f9ffd9, 0x05000003, 0x05f9ffbb,
- 0x05000003, 0x648b4407, 0x05fdf42d, 0x4a03c013,
- 0x03800300, 0x4a03c014, 0x03800380, 0x59a00c07,
- 0x82040580, 0x000000a0, 0x05000004, 0x82040580,
- 0x000000a2, 0x0502001c, 0x59a0140b, 0x82080480,
- 0x00000100, 0x05021018, 0x59a0020c, 0x8c000500,
- 0x0502001f, 0x59a00a0b, 0x800409c0, 0x05000012,
- 0xb0040481, 0x05021010, 0x0505fd8a, 0x0500000a,
- 0x59a01008, 0x900811c0, 0x59a0180a, 0x900c19c0,
- 0x59a00a0b, 0x0505fda5, 0x4a01d808, 0x00102008,
- 0x1c01f000, 0x640b4407, 0x4a03c014, 0x03800000,
- 0x05fdf407, 0x4a03c014, 0x03800000, 0x05fdf408,
- 0x4031d800, 0x58ef400a, 0x58ee580c, 0x58ec0002,
- 0x82000580, 0x00000200, 0x05fc03f5, 0x59a00c07,
- 0x59a0140b, 0x59a0020c, 0x8c000500, 0x05020038,
- 0x912e5c05, 0x4178c000, 0x59a0ba0b, 0x40600000,
- 0x812c0400, 0x5000c800, 0x82641d00, 0x000000ff,
- 0x4c040000, 0x4c080000, 0x0501f8b8, 0x5c001000,
- 0x5c000800, 0x05000037, 0x805cb840, 0x05000032,
- 0x80081000, 0x82641d00, 0x0000ff00, 0x800c1910,
- 0x4c040000, 0x4c080000, 0x0501f8ac, 0x5c001000,
- 0x5c000800, 0x0500002b, 0x805cb840, 0x05000026,
- 0x80081000, 0x82641d00, 0x00ff0000, 0x800c1920,
- 0x4c040000, 0x4c080000, 0x0501f8a0, 0x5c001000,
- 0x5c000800, 0x0500001f, 0x805cb840, 0x0500001a,
- 0x80081000, 0x82641d00, 0xff000000, 0x800c1930,
- 0x4c040000, 0x4c080000, 0x0501f894, 0x5c001000,
- 0x5c000800, 0x05000013, 0x805cb840, 0x0500000e,
- 0x80081000, 0x8060c000, 0x05fdf7cd, 0x59a0020b,
- 0x82000500, 0x000000ff, 0x40001800, 0x4c040000,
- 0x4c080000, 0x0501f885, 0x5c001000, 0x5c000800,
- 0x05000004, 0x4a03c014, 0x03800000, 0x05fdf372,
- 0x4a03c014, 0x03800000, 0x64134407, 0x05fdf3b0,
- 0x4803c856, 0x59a0020c, 0x4803c857, 0x8c00051e,
- 0x05060690, 0x05f9ff51, 0x05000003, 0x05f9ff33,
- 0x05000003, 0x648b4407, 0x05fdf3a5, 0x4a03c013,
- 0x03800300, 0x4a03c014, 0x03800380, 0x59a00c07,
- 0x82040580, 0x000000a0, 0x05000004, 0x82040580,
- 0x000000a2, 0x05020062, 0x59a0140b, 0x82080480,
- 0x00000100, 0x0502105e, 0x59a0020c, 0x8c000500,
- 0x05020050, 0x59a01a0b, 0x800c19c0, 0x05000058,
- 0xb00c0481, 0x05021056, 0x0505fd02, 0x05020006,
- 0x640b4407, 0x4a03c014, 0x03800000, 0x4803c857,
- 0x05fdf387, 0x912e5c05, 0x4178c000, 0x59a0ba0b,
- 0x4803c857, 0x40600000, 0x812c0400, 0x4000c800,
- 0x4c040000, 0x4c080000, 0x0501f879, 0x5c001000,
- 0x5c000800, 0x0500003e, 0x4414c800, 0x805cb840,
- 0x0500002b, 0x80081000, 0x4c040000, 0x4c080000,
- 0x0501f86f, 0x5c001000, 0x5c000800, 0x05000034,
- 0x50640000, 0x801428d0, 0x80140540, 0x4400c800,
- 0x805cb840, 0x0500001e, 0x80081000, 0x4c040000,
- 0x4c080000, 0x0501f862, 0x5c001000, 0x5c000800,
- 0x05000027, 0x50640000, 0x801428e0, 0x80140540,
- 0x4400c800, 0x805cb840, 0x05000011, 0x80081000,
- 0x4c040000, 0x4c080000, 0x0501f855, 0x5c001000,
- 0x5c000800, 0x0500001a, 0x50640000, 0x801428f0,
- 0x80140540, 0x4400c800, 0x805cb840, 0x05000004,
- 0x80081000, 0x8060c000, 0x05fdf7ca, 0x59a00a0b,
- 0x59a01008, 0x900811c0, 0x59a0180a, 0x900c19c0,
- 0x4a03c014, 0x03800000, 0x412c0000, 0x0505f4dd,
- 0x4803c857, 0x0501f83e, 0x05000005, 0x48174407,
- 0x4a03c014, 0x03800000, 0x05fdf2fb, 0x4a03c014,
- 0x03800000, 0x64134407, 0x05fdf339, 0x4a03c014,
- 0x03800000, 0x05fdf33a, 0x4c5c0000, 0x4c600000,
- 0x4c640000, 0x4004b800, 0x4008c000, 0x400cc800,
- 0x0501f86d, 0x0500000f, 0x0501f89b, 0x05020011,
- 0x4060b800, 0x0501f898, 0x0502000e, 0x4064b800,
- 0x0501f895, 0x0502000b, 0x0501f883, 0x4ce80000,
- 0x6021d027, 0x0515fe66, 0x5c01d000, 0x90000541,
- 0x5c00c800, 0x5c00c000, 0x5c00b800, 0x1c01f000,
- 0x0501f879, 0x80000580, 0x05fdf7fa, 0x4c5c0000,
- 0x485fc857, 0x0501f854, 0x05000008, 0x905cbd41,
- 0x0501f881, 0x05020009, 0x0501f8bd, 0x0501f8ef,
- 0x0501f86d, 0x90000541, 0x4803c857, 0x4867c857,
- 0x5c00b800, 0x1c01f000, 0x0501f867, 0x80000580,
- 0x4803c857, 0x485fc857, 0x05fdf7f8, 0x4c5c0000,
- 0x4c600000, 0x4c640000, 0x4807c857, 0x480bc857,
- 0x4004b800, 0x4008c000, 0x0501f83b, 0x0500000c,
- 0x0501f869, 0x0502000f, 0x4c5c0000, 0x4060b800,
- 0x0501f865, 0x5c00b800, 0x0502000a, 0x05fdffdc,
- 0x05000003, 0x0501f850, 0x90000541, 0x40642800,
- 0x5c00c800, 0x5c00c000, 0x5c00b800, 0x1c01f000,
- 0x0501f849, 0x80000580, 0x4803c857, 0x4867c857,
- 0x05fdf7f7, 0x4ce80000, 0x4c580000, 0x4803c856,
- 0x6030b000, 0x6029d000, 0x0515fe25, 0x4a03c013,
- 0x02000200, 0x6029d000, 0x0515fe21, 0x4a03c013,
- 0x02000000, 0x8058b040, 0x05fe07f7, 0x61a00807,
- 0x4a03c013, 0x03800300, 0x80040840, 0x0500000f,
- 0x4a03c014, 0x03800000, 0x59e00013, 0x4a03c014,
- 0x03800380, 0x82000500, 0x00000300, 0x82000580,
- 0x00000300, 0x05fe07f3, 0x90000541, 0x5c00b000,
- 0x5c01d000, 0x1c01f000, 0x4803c857, 0x80000580,
- 0x05fdf7fb, 0x4ce80000, 0x4803c856, 0x61a00807,
- 0x4a03c013, 0x03800300, 0x80040840, 0x05000016,
- 0x4a03c014, 0x03800000, 0x59e00013, 0x4a03c014,
- 0x03800380, 0x82000500, 0x00000300, 0x82000580,
- 0x00000300, 0x05fe07f3, 0x6029d000, 0x0515fdf4,
- 0x4a03c013, 0x01000000, 0x6029d000, 0x0515fdf0,
- 0x4a03c013, 0x02000000, 0x90000541, 0x5c01d000,
- 0x1c01f000, 0x4803c857, 0x05fdffbf, 0x05fe07f3,
- 0x05fdf7fb, 0x4803c856, 0x4a03c013, 0x01000000,
- 0x4ce80000, 0x6029d000, 0x0515fde1, 0x5c01d000,
- 0x4a03c013, 0x02000200, 0x4ce80000, 0x6029d000,
- 0x0515fddb, 0x5c01d000, 0x4a03c013, 0x01000100,
- 0x1c01f000, 0x4c5c0000, 0x4c600000, 0x485fc857,
- 0x6020c000, 0x825c0500, 0x00000080, 0x800000c2,
- 0x82000540, 0x01000000, 0x4803c013, 0x4ce80000,
- 0x6029d000, 0x0515fdca, 0x5c01d000, 0x4a03c013,
- 0x02000200, 0x4ce80000, 0x6029d000, 0x0515fdc4,
- 0x5c01d000, 0x4a03c013, 0x02000000, 0x805cb8c2,
- 0x8060c040, 0x05fe07ec, 0x4a03c013, 0x01000100,
- 0x4ce80000, 0x6029d000, 0x0515fdb9, 0x5c01d000,
- 0x4a03c013, 0x02000200, 0x4ce80000, 0x6029d000,
- 0x0515fdb3, 0x5c01d000, 0x4a03c014, 0x03800000,
- 0x61a00807, 0x59e0b813, 0x825cbd00, 0x00000100,
- 0x80040840, 0x05000004, 0x405c0000, 0x80000540,
- 0x05fe07f9, 0x4a03c014, 0x03800380, 0x4a03c013,
- 0x02000000, 0x4ce80000, 0x6029d000, 0x0515fda0,
- 0x5c01d000, 0x485fc857, 0x405c0000, 0x80000540,
- 0x5c00c000, 0x5c00b800, 0x1c01f000, 0x4c600000,
- 0x4803c856, 0x4a03c013, 0x01000100, 0x6020c000,
- 0x61a0c807, 0x4ce80000, 0x6029d000, 0x0515fd90,
- 0x5c01d000, 0x4a03c013, 0x02000200, 0x4a03c014,
- 0x03800000, 0x59e00013, 0x4a03c014, 0x03800380,
- 0x82000500, 0x00000200, 0x05020003, 0x8064c840,
- 0x05fe07f7, 0x4178c800, 0x0501f007, 0x4ce80000,
- 0x6029d000, 0x0515fd7e, 0x5c01d000, 0x4a03c013,
- 0x02000200, 0x4ce80000, 0x6029d000, 0x0515fd78,
- 0x5c01d000, 0x4a03c014, 0x03800000, 0x59e00013,
- 0x4a03c014, 0x03800380, 0x82000500, 0x00000100,
- 0x80000110, 0x8064c8c2, 0x8064cd40, 0x4a03c013,
- 0x02000000, 0x8060c040, 0x05fe07e9, 0x4867c857,
- 0x5c00c000, 0x1c01f000, 0x4803c856, 0x4a03c013,
- 0x01000100, 0x4ce80000, 0x6029d000, 0x0515fd60,
- 0x5c01d000, 0x4a03c013, 0x02000200, 0x4ce80000,
- 0x6029d000, 0x0515fd5a, 0x5c01d000, 0x4a03c013,
- 0x02000000, 0x1c01f000, 0x59a00408, 0x59a8082a,
- 0x4803502a, 0x48074408, 0x59a00a0a, 0x90040494,
- 0x05021002, 0x6140080f, 0x59a8002b, 0x4807502b,
- 0x4803420a, 0x05fdf1c4, 0x59a00407, 0x59a00a08,
- 0x900409c0, 0x80040d40, 0x59a00408, 0x59a01209,
- 0x900811c0, 0x80081540, 0x59a00409, 0x59a01a0a,
- 0x900c19c0, 0x800c1d40, 0x59a0040a, 0x59a0220b,
- 0x901021c0, 0x80102540, 0x0535f897, 0x05fc01b2,
- 0x05fdf207, 0x916c0580, 0x0500000a, 0x59a80005,
- 0x59a00c07, 0x80041580, 0xb0081500, 0x05fc01aa,
- 0x80080580, 0x48035005, 0x05f1f9b2, 0x05fdf1a6,
- 0x59a00407, 0x59a80805, 0x48035005, 0x80040d80,
- 0x8c04050c, 0x05f209ab, 0x59a00208, 0x48035006,
- 0x59a00408, 0x8c00051a, 0x05000009, 0x600018ec,
- 0x60140800, 0x580c1006, 0x4a001805, 0x70000005,
- 0x900c1c20, 0x80040840, 0x05fe07fb, 0x48035007,
- 0x05fdf191, 0x8d0c050e, 0x05000003, 0x64074407,
- 0x05fdf1cf, 0x050dfed7, 0x05020003, 0x645b4407,
- 0x05fdf1cb, 0x916c0583, 0x05000003, 0x641f4407,
- 0x05fdf1c7, 0x59a00c07, 0x82040500, 0xffffff00,
- 0x05fe01c7, 0x82041580, 0x000000ff, 0x05020007,
- 0x59a8000f, 0x82000500, 0x000000ff, 0x82001540,
- 0x0000ff00, 0x0501f00f, 0x82040400, 0x00101a23,
- 0x50000000, 0x80000110, 0x82000580, 0x00000080,
- 0x05fc01b7, 0x59a8000f, 0x82000500, 0x000000ff,
- 0x80041580, 0x05fc01b2, 0x840409c0, 0x80041540,
- 0x051dfc23, 0x05020003, 0x640f4407, 0x05fdf1a8,
- 0x48ee6023, 0x480a621e, 0x4a02641e, 0x0000bc09,
- 0x64066407, 0x0505fb17, 0x05020004, 0x0005f8e7,
- 0x640b4407, 0x05fdf19e, 0x497a5a05, 0x497a5806,
- 0x4a025c05, 0x00008000, 0x4a01d808, 0x001022b5,
- 0x492e6009, 0x60ca7000, 0x0005f105, 0x8d0c050e,
- 0x05000003, 0x64074407, 0x05fdf191, 0x050dfe99,
- 0x05020003, 0x645b4407, 0x05fdf18d, 0x916c0583,
- 0x05000003, 0x641f4407, 0x05fdf189, 0x59a00c07,
- 0x82040500, 0xffffff00, 0x05fe0189, 0x82041580,
- 0x000000ff, 0x05020007, 0x59a8000f, 0x82000500,
- 0x000000ff, 0x82001540, 0x0000ff00, 0x0501f00f,
- 0x82040400, 0x00101a23, 0x50000000, 0x80000110,
- 0x82000580, 0x00000080, 0x05fc0179, 0x59a8000f,
- 0x82000500, 0x000000ff, 0x80041580, 0x05fc0174,
- 0x840409c0, 0x80041540, 0x051dfbe5, 0x05020003,
- 0x640f4407, 0x05fdf16a, 0x48ee6023, 0x480a621e,
- 0x4a02641e, 0x0000bc05, 0x64066407, 0x0505fad9,
- 0x05020004, 0x0005f8e7, 0x640b4407, 0x05fdf160,
- 0x497a5a05, 0x497a5806, 0x4a025c05, 0x00008000,
- 0x4a01d808, 0x001022b5, 0x492e6009, 0x60ca7000,
- 0x0005f105, 0x592c0006, 0x82000580, 0x01000000,
- 0x05fe0111, 0x64134407, 0x05fdf151, 0x497b4407,
- 0x497b4208, 0x8d0c0520, 0x05000008, 0x59a8005e,
- 0x59a8085f, 0x80040480, 0x59a80860, 0x48074407,
- 0x80041480, 0x480b4208, 0x0505fbd0, 0x48034408,
- 0x59a8100d, 0x59a80262, 0x80080480, 0x4803420a,
- 0x495f440a, 0x59a8001a, 0x4803420c, 0x05fdf0fa,
- 0x8d0c050e, 0x05000003, 0x64074407, 0x05fdf138,
- 0x59a00407, 0x8c000500, 0x0502000d, 0x59a80061,
- 0x81640480, 0x05001008, 0x59a8000b, 0x81500580,
- 0x05000007, 0x59a8005f, 0x59a8105e, 0x80080580,
- 0x05000003, 0x64634407, 0x05fdf129, 0x850e1d58,
- 0x4803c856, 0x850e1d46, 0x0505fed8, 0x05fdf0e2,
- 0x599c0201, 0x4803507a, 0x41780800, 0x60401076,
- 0x0515fd20, 0x480b507b, 0x1c01f000, 0x0501f805,
- 0x60018800, 0x05020002, 0x60058800, 0x1c01f000,
- 0x90000541, 0x0502500b, 0x4203e000, 0x80000000,
- 0x40e81000, 0x41780800, 0x61900000, 0x0515fd11,
- 0x5994002e, 0x80080400, 0x4803282e, 0x80000580,
- 0x1c01f000, 0x4d900000, 0x4dd00000, 0x4da40000,
- 0x4d140000, 0x4cd80000, 0x417a3000, 0x0519fb90,
- 0x0519f885, 0x5c01b000, 0x5c022800, 0x5c034800,
- 0x5c03a000, 0x5c032000, 0x1c01f000, 0x59c80003,
- 0x82000500, 0xffffe0ff, 0x48039003, 0x61f00800,
- 0x05f5fd43, 0x4a03902c, 0x00200000, 0x61d0b003,
- 0x59c8002c, 0x8c00052c, 0x05000006, 0x8058b040,
- 0x05fe07fc, 0x600c0080, 0x41781000, 0x0501f11e,
- 0x640b5081, 0x42006000, 0x00102452, 0x50301000,
- 0x41784800, 0x4a03902d, 0x00008000, 0x61d0b003,
- 0x59c8002c, 0x8c000534, 0x05000006, 0x8058b040,
- 0x05fe07fc, 0x600c0080, 0x41781000, 0x0501f10e,
- 0x0501f894, 0x80244800, 0x82240580, 0x000003b1,
- 0x05fe07fc, 0x0501f918, 0x41784800, 0x0501f8b8,
- 0x80244800, 0x82240580, 0x000003b1, 0x05fe07fc,
- 0x80306000, 0x82300580, 0x00102454, 0x05fe07e4,
- 0x59a80880, 0x800409c0, 0x05000005, 0x60100080,
- 0x60081000, 0x59a8187f, 0x0501f0f7, 0x42006000,
- 0x00102452, 0x64435081, 0x50301000, 0x41784800,
- 0x4a03902d, 0x00000800, 0x0501f876, 0x80244800,
- 0x90240598, 0x05fe07fd, 0x0501f8fb, 0x41784800,
- 0x0501f89b, 0x80244800, 0x90240598, 0x05fe07fd,
- 0x80306000, 0x82300580, 0x00102454, 0x05fe07ef,
- 0x59a80880, 0x800409c0, 0x05000005, 0x60100080,
- 0x60401000, 0x59a8187f, 0x0501f0db, 0x42006000,
- 0x00102452, 0x64235081, 0x50301000, 0x41784800,
- 0x4a03902d, 0x00000400, 0x0501f85a, 0x80244800,
- 0x82240580, 0x00000088, 0x05fe07fc, 0x0501f8de,
- 0x41784800, 0x0501f87e, 0x80244800, 0x82240580,
- 0x00000088, 0x05fe07fc, 0x80306000, 0x82300580,
- 0x00102454, 0x05fe07ed, 0x59a80880, 0x800409c0,
- 0x05000005, 0x60100080, 0x60201000, 0x59a8187f,
- 0x0501f0bd, 0x42006000, 0x00102452, 0x64835081,
- 0x50301000, 0x41784800, 0x4a03902d, 0x00002000,
- 0x61d0b003, 0x59c8002c, 0x8c000530, 0x05000006,
- 0x8058b040, 0x05fe07fc, 0x600c0080, 0x41781000,
- 0x0501f0ad, 0x59c8002c, 0x82000500, 0xffe0ffff,
- 0x82080d00, 0x001f0000, 0x80040540, 0x4803902c,
- 0x0501f82c, 0x80244800, 0x82240580, 0x00000110,
- 0x05fe07fc, 0x0501f8b0, 0x41784800, 0x0501f850,
- 0x59c80034, 0x82080d00, 0x001f0000, 0x82000500,
- 0x001f0000, 0x80040580, 0x05000006, 0x59a80080,
- 0x80000000, 0x48035080, 0x40240000, 0x4803507f,
- 0x80244800, 0x82240580, 0x00000110, 0x05fe07f0,
- 0x80306000, 0x82300580, 0x00102454, 0x05fe07d1,
- 0x59a80880, 0x800409c0, 0x05000004, 0x60100080,
- 0x60801000, 0x59a8187f, 0x59c80803, 0x82040d40,
- 0x00001f00, 0x48079003, 0x59c8002c, 0x8400052a,
- 0x4803902c, 0x61f00800, 0x05f5fc95, 0x05fdf006,
- 0x59c8002c, 0x82000500, 0xffff0000, 0x82080d00,
- 0x0000ffff, 0x80040540, 0x4803902c, 0x480b9028,
- 0x480b9029, 0x59a80081, 0x90004584, 0x05000007,
- 0x90000590, 0x05020003, 0x80080920, 0x4807903a,
- 0x480b902a, 0x480b902b, 0x59c8002d, 0x82000500,
- 0xfffffc00, 0x80240540, 0x4803902d, 0x61d0b003,
- 0x59c8002c, 0x82000500, 0x18000000, 0x05000006,
- 0x8058b040, 0x05fe07fb, 0x600c0080, 0x41781000,
- 0x0501f059, 0x6407902e, 0x61d0b003, 0x59c8002e,
- 0x8c000500, 0x05000005, 0x8058b040, 0x05fe07fc,
- 0x600c0080, 0x0501f050, 0x1c01f000, 0x41783800,
- 0x59c8002d, 0x82000500, 0xfffffc00, 0x80240d40,
- 0x4807902d, 0x61d0b003, 0x59c8002c, 0x82000500,
- 0x18000000, 0x05000006, 0x8058b040, 0x05fe07fb,
- 0x600c0080, 0x41781000, 0x0501f03f, 0x59c81830,
- 0x59c80030, 0x800c0d80, 0x05fe07fd, 0x80080d80,
- 0x05000002, 0x801c3800, 0x59c82031, 0x59c80031,
- 0x80100d80, 0x05fe07fd, 0x80080d80, 0x05000002,
- 0x801c3800, 0x59a80081, 0x90004584, 0x0500001e,
- 0x61fc41ff, 0x90000590, 0x05020003, 0x42004000,
- 0x7f7f7f7f, 0x59c82832, 0x59c80032, 0x80140d80,
- 0x05fe07fd, 0x80080d80, 0x05000002, 0x801c3800,
- 0x59c83033, 0x59c80033, 0x80180d80, 0x05fe07fd,
- 0x80080d80, 0x05000002, 0x801c3800, 0x59c80034,
- 0x59c80834, 0x80040d80, 0x05fe07fd, 0x80080d80,
- 0x40200000, 0x80040d00, 0x0500000c, 0x801c3800,
- 0x0501f00a, 0x59c80034, 0x59c80834, 0x80040d80,
- 0x05fe07fd, 0x80080d80, 0x82040d00, 0x000000ff,
- 0x05000002, 0x801c3800, 0x801c39c0, 0x05000005,
- 0x59a80080, 0x801c0400, 0x48035080, 0x4827507f,
- 0x1c01f000, 0x48034207, 0x48074407, 0x480b4208,
- 0x480f4408, 0x48134209, 0x48174409, 0x59c80003,
- 0x82000540, 0x00001f00, 0x48039003, 0x59c8002c,
- 0x8400052a, 0x4803902c, 0x61f00800, 0x05f5fc0c,
- 0x05f9f780, 0x42000000, 0x00600000, 0x80000040,
- 0x05fe07ff, 0x1c01f000, 0x5a5a5a5a, 0xa5a5a5a5,
- 0x59a00c0b, 0x800409c0, 0x05f807b9, 0x900404a1,
- 0x05fa17b7, 0x90040491, 0x05001002, 0x60400800,
- 0x59a00209, 0x59a01408, 0x900811c0, 0x80081540,
- 0x59a00208, 0x59a01c07, 0x900c19c0, 0x800c1d40,
- 0x0505f91c, 0x05000005, 0x0505f93a, 0x4a01d808,
- 0x0010246c, 0x1c01f000, 0x640b4407, 0x05f9f7a0,
- 0x4031d800, 0x58ef400a, 0x58ec0002, 0x82000580,
- 0x00000200, 0x05f80792, 0x59a00c0b, 0x90040491,
- 0x05001002, 0x60400800, 0x59a0040c, 0x59a0120c,
- 0x900811c0, 0x80081540, 0x59a0020a, 0x59a01c09,
- 0x900c19c0, 0x800c1d40, 0x58ec0003, 0x0505f927,
- 0x4a01d808, 0x00102483, 0x1c01f000, 0x4031d800,
- 0x58ef400a, 0x58ec0002, 0x82000580, 0x00000200,
- 0x05f8077b, 0x59a00c0b, 0x90040491, 0x05f8173e,
- 0x90040c90, 0x59a00209, 0x59a01408, 0x900811c0,
- 0x80081540, 0x59a00208, 0x59a01c07, 0x900c19c0,
- 0x800c1d40, 0xb0081400, 0x58ec0003, 0x0505f909,
- 0x4a01d808, 0x0010249b, 0x1c01f000, 0x4031d800,
- 0x58ef400a, 0x58ec0002, 0x82000580, 0x00000200,
- 0x05f80763, 0x59a0040b, 0x90000c90, 0x59a0040c,
- 0x59a0120c, 0x900811c0, 0x80081540, 0x59a0020a,
- 0x59a01c09, 0x900c19c0, 0x800c1d40, 0xb0081400,
- 0x58ec0003, 0x0505f8f9, 0x4a01d808, 0x00101bc2,
- 0x1c01f000, 0x48efc857, 0x59a00208, 0x59a01408,
- 0x900001c0, 0x80081540, 0x59a0020a, 0x59a01c0a,
- 0x900001c0, 0x800c1d40, 0x59a00407, 0x48034000,
- 0x480b4001, 0x480f4002, 0x0505f8c2, 0x05020003,
- 0x640b4407, 0x05f9f74a, 0x60400800, 0x0505f8dd,
- 0x4a01d808, 0x001024c7, 0x1c01f000, 0x4031d800,
- 0x58ef400a, 0x58ee580c, 0x58ec0002, 0x82000580,
- 0x00000200, 0x05f80736, 0x48efc857, 0x49a3c857,
- 0x492fc857, 0x592c0a05, 0x80040910, 0x05020003,
- 0x64674407, 0x05f9f736, 0x4805d80b, 0x0501f009,
- 0x4031d800, 0x58ef400a, 0x58ec0002, 0x82000580,
- 0x00000200, 0x05f80726, 0x48efc857, 0x49a3c857,
- 0x48efc857, 0x49a3c857, 0x58ec000b, 0x80000040,
- 0x0500000d, 0x4801d80b, 0x0505f89a, 0x05020003,
- 0x640b4407, 0x05f9f722, 0x60400800, 0x58ec1006,
- 0x58ec1807, 0x0505f8b3, 0x4a01d808, 0x001024d8,
- 0x1c01f000, 0x58ee580c, 0x48efc857, 0x49a3c857,
- 0x492fc857, 0x492f3004, 0x592c0405, 0x8400055e,
- 0x48025c05, 0x4a01d808, 0x001024fc, 0x1c01f000,
- 0x4d2c0000, 0x58ee580c, 0x48efc857, 0x49a3c857,
- 0x492fc857, 0x592c0405, 0x8400051e, 0x48025c05,
- 0x59a00000, 0x59a01001, 0x59a01802, 0x80081400,
- 0x900c1c40, 0x912c0405, 0x60400800, 0x5c025800,
- 0x0505f09a, 0x8d0c050e, 0x05000003, 0x64074407,
- 0x05f9f6fb, 0x916c0583, 0x05000003, 0x641f4407,
- 0x05f9f6f7, 0x59a0320c, 0x82183500, 0x000000ff,
- 0x59a28c07, 0x0001fac4, 0x05fa06f5, 0x83440580,
- 0x000007fd, 0x05000005, 0x0509ff2e, 0x05000003,
- 0x64274407, 0x05f9f6ea, 0x0505f85e, 0x05020003,
- 0x640b4407, 0x05f9f6e6, 0x801831c0, 0x05000007,
- 0x412c0800, 0x0505f857, 0x05020003, 0x640b4407,
- 0x05f9f6df, 0x40065800, 0x4a025c05, 0x00008000,
- 0x497a5a05, 0x0525fcf9, 0x05020003, 0x640f4407,
- 0x05f9f6d7, 0x4a01d808, 0x00102538, 0x1c01f000,
- 0x592c0006, 0x82000580, 0x01000000, 0x05020003,
- 0x64134407, 0x05f9f6ce, 0x592c0407, 0x82002d00,
- 0x0000ff00, 0x82000500, 0x000000ff, 0x80000904,
- 0x80040800, 0x90040486, 0x05001002, 0x60140800,
- 0x4c500000, 0x4c540000, 0x4c580000, 0x912ca407,
- 0x4050a800, 0x4004b000, 0x0531fd16, 0x59a00408,
- 0x59a01208, 0x900811c0, 0x80081540, 0x59a0040a,
- 0x59a01a0a, 0x900c19c0, 0x800c1d40, 0x912c0407,
- 0x4c140000, 0x0505f84d, 0x5c002800, 0x801429c0,
- 0x05000003, 0x4a01d808, 0x00102563, 0x5c00b000,
- 0x5c00a800, 0x5c00a000, 0x1c01f000, 0x4031d800,
- 0x58ef400a, 0x58ee580c, 0x58ec0002, 0x82000580,
- 0x00000200, 0x05f8069a, 0x812e59c0, 0x05ec0c7b,
- 0x592c0007, 0x82000500, 0xff000000, 0x80000904,
- 0x800409c0, 0x05f80658, 0x4807c857, 0x9004048e,
- 0x05001002, 0x60340800, 0x592e5801, 0x812e59c0,
- 0x05ec0c6e, 0x4c500000, 0x4c540000, 0x4c580000,
- 0x912ca406, 0x4050a800, 0x4004b000, 0x0531fce5,
- 0x5c00b000, 0x5c00a800, 0x5c00a000, 0x58ec1006,
- 0x58ec1807, 0x912c0406, 0x0505f020, 0x0501fff9,
- 0x05020003, 0x640b4407, 0x05f9f681, 0x59a00c07,
- 0x82040500, 0x0000ff00, 0x840001c0, 0x90001487,
- 0x05fa167f, 0x0c01f001, 0x00102599, 0x0010259f,
- 0x001025a5, 0x001025a5, 0x001025a5, 0x001025a6,
- 0x001025aa, 0x60340800, 0x42003800, 0x001025bb,
- 0x4a034000, 0x001094d7, 0x0501f00f, 0x60340800,
- 0x42003800, 0x001025bb, 0x4a034000, 0x001094e4,
- 0x0501f009, 0x05f9f66a, 0x60200800, 0x42003800,
- 0x001025c8, 0x0501f004, 0x60100800, 0x42003800,
- 0x001025fd, 0x59a00208, 0x59a01408, 0x900001c0,
- 0x80081540, 0x59a0020a, 0x59a01c0a, 0x900001c0,
- 0x800c1d40, 0x912c0406, 0x4c1c0000, 0x0501ffe9,
- 0x5c003800, 0x481dd808, 0x1c01f000, 0x4031d800,
- 0x58ef400a, 0x58ee580c, 0x58ec0002, 0x82000580,
- 0x00000200, 0x05f80642, 0x64075019, 0x6034b000,
- 0x59a0a800, 0x912ca406, 0x0531fc9e, 0x05f9f602,
- 0x4031d800, 0x58ef400a, 0x58ee580c, 0x58ec0002,
- 0x82000580, 0x00000200, 0x05f80635, 0x912ca406,
- 0x50500000, 0x82001500, 0x000c0016, 0x05fa063c,
- 0x90500c03, 0x50040000, 0x90001501, 0x05fa0638,
- 0x50500000, 0x90001528, 0x05000015, 0x900815a8,
- 0x05fa0633, 0x80500800, 0x50040000, 0x90001513,
- 0x90081593, 0x05fa062e, 0x80040800, 0x50040000,
- 0x82001500, 0x00050000, 0x82081580, 0x00050000,
- 0x05fa0627, 0x916c0580, 0x0500000e, 0x599c0019,
- 0x8c00050e, 0x0502000b, 0x05f9f621, 0x80500800,
- 0x50040000, 0x90001513, 0x05fa061d, 0x80040800,
- 0x50040000, 0x82001500, 0x00050000, 0x05fa0618,
- 0x6020b000, 0x4200a800, 0x001094cf, 0x0531fc2e,
- 0x05f9f5cd, 0x4031d800, 0x58ef400a, 0x58ee580c,
- 0x58ec0002, 0x82000580, 0x00000200, 0x05f80600,
- 0x6010b000, 0x4200a800, 0x0010992c, 0x912ca406,
- 0x0531fc21, 0x850e1d50, 0x05f9f5bf, 0x0501ff75,
- 0x05020003, 0x640b4407, 0x05f9f5fd, 0x912cac06,
- 0x59a00c07, 0x82040500, 0x0000ff00, 0x840001c0,
- 0x90001488, 0x05fa15fa, 0x0c01f001, 0x0010261f,
- 0x00102622, 0x00102625, 0x00102625, 0x00102625,
- 0x00102626, 0x00102625, 0x0010262c, 0x4200a000,
- 0x001094d7, 0x0501f038, 0x4200a000, 0x001094e4,
- 0x0501f035, 0x05f9f5ea, 0x6020b000, 0x40580800,
- 0x4200a000, 0x001094cf, 0x0531fbff, 0x0501f031,
- 0x59a00a0b, 0x6473420b, 0x9004049c, 0x05f815e0,
- 0x603cb000, 0x4178a000, 0x0531fbff, 0x912cac06,
- 0x6010b000, 0x91a8a41f, 0x0531fbf3, 0x916c0580,
- 0x05000004, 0x6010b000, 0x91a8a400, 0x0531fbee,
- 0x492f4000, 0x0501ff43, 0x05020003, 0x640b4407,
- 0x05f9f5cb, 0x912cac06, 0x603cb000, 0x4178a000,
- 0x0531fbed, 0x912cac07, 0x6010b000, 0x91a8a423,
- 0x0531fbe1, 0x492f4001, 0x59a25800, 0x59a00208,
- 0x59a01408, 0x900001c0, 0x80081540, 0x59a0020a,
- 0x59a01c0a, 0x900001c0, 0x800c1d40, 0x912c0406,
- 0x603c0800, 0x0501ff51, 0x4a01d808, 0x00102666,
- 0x1c01f000, 0x6034b000, 0x40580800, 0x0531fc09,
- 0x59a00208, 0x59a01408, 0x900001c0, 0x80081540,
- 0x59a0020a, 0x59a01c0a, 0x900001c0, 0x800c1d40,
- 0x912c0406, 0x0501f741, 0x4031d800, 0x58ef400a,
- 0x58ec0002, 0x82000580, 0x00000200, 0x05f80598,
- 0x59a25801, 0x58ec1006, 0x58ec1807, 0x912c0406,
- 0x60340800, 0x0501f735, 0x916c0580, 0x05020003,
- 0x641f4407, 0x05f9f596, 0x59a01407, 0x800811c0,
- 0x0502002a, 0x497b4208, 0x05f9f938, 0x05000011,
- 0x05f9f91a, 0x64074208, 0x0502000e, 0x4c080000,
- 0x05f9f924, 0x5c001000, 0x05020006, 0x640b4208,
- 0x05f5fd45, 0x05020007, 0x64134208, 0x0501f005,
- 0x640f4208, 0x05f5fd1f, 0x05020002, 0x64174208,
- 0x59c40801, 0x82040d00, 0x00018000, 0x90040580,
- 0x05020003, 0x64034407, 0x0501f069, 0x82040580,
- 0x00008000, 0x05020003, 0x64074407, 0x0501f064,
- 0x82040580, 0x00010000, 0x05020003, 0x640f4407,
- 0x0501f05f, 0x82040580, 0x00018000, 0x05ee0b47,
- 0x64134407, 0x0501f05a, 0x59a80086, 0x8c000502,
- 0x05000004, 0x60080000, 0x40000800, 0x0501f012,
- 0x59a00208, 0x4c000000, 0x0505f80a, 0x5c000000,
- 0x05000005, 0x4c000000, 0x0505f81d, 0x5c000000,
- 0x05020007, 0x90000d84, 0x05000003, 0x90000d82,
- 0x05020003, 0x600c0000, 0x600c1000, 0x48034002,
- 0x59a80837, 0x48035037, 0x599c7819, 0x823c7d00,
- 0xffff1fff, 0x800000da, 0x803c7d40, 0x483f3819,
- 0x497b4208, 0x05f9f8f1, 0x05000013, 0x05f9f8d3,
- 0x64074208, 0x05020010, 0x4c040000, 0x4c080000,
- 0x05f9f8dc, 0x5c001000, 0x5c000800, 0x05020006,
- 0x640b4208, 0x05f5fcfc, 0x05020007, 0x64134208,
- 0x0501f005, 0x640f4208, 0x05f5fcd6, 0x05020002,
- 0x64174208, 0x05f5fcd3, 0x0500000b, 0x05f5fcdc,
- 0x05000009, 0x05f5fce5, 0x05000007, 0x05f5fcee,
- 0x05000005, 0x05f5fcf7, 0x05000003, 0x48075037,
- 0x05f9f52f, 0x90080583, 0x05020005, 0x59a00002,
- 0x48035044, 0x640b5037, 0x0501f005, 0x4a035044,
- 0xaabbccdd, 0x90080582, 0x05020011, 0x59c40006,
- 0x84000500, 0x48038806, 0x0515fdb3, 0x497b8880,
- 0x42000000, 0x001098e0, 0x0531fa6d, 0x4803c856,
- 0x850e1d48, 0x4a038808, 0x00000200, 0x6012d800,
- 0x64078805, 0x64075043, 0x05edfd07, 0x05f9f4ce,
- 0x8d0c050e, 0x05000003, 0x64074407, 0x05f9f50c,
- 0x916c0583, 0x05000003, 0x641f4407, 0x05f9f508,
- 0x59a28c07, 0x59a0320c, 0x82183500, 0x000000ff,
- 0x0001fac4, 0x05fa0506, 0x83440580, 0x000007fd,
- 0x05000005, 0x0509fd3f, 0x05000003, 0x60240800,
- 0x05f9f4fb, 0x0501fe6f, 0x05020003, 0x640b4407,
- 0x05f9f4f7, 0x497a5a05, 0x4a025c05, 0x00008000,
- 0x0525fb22, 0x05020003, 0x640f4407, 0x05f9f4f0,
- 0x4a01d808, 0x0010271f, 0x1c01f000, 0x592c0006,
- 0x82000d00, 0x0000ffff, 0x82000500, 0xffff0000,
- 0x82000580, 0x01000000, 0x05020003, 0x64134407,
- 0x05f9f4e3, 0x80040904, 0x4c500000, 0x4c540000,
- 0x4c580000, 0x912ca406, 0x4050a800, 0x4004b000,
- 0x0531fb34, 0x5c00b000, 0x5c00a800, 0x5c00a000,
- 0x59a00208, 0x59a01408, 0x900001c0, 0x80081540,
- 0x59a0020a, 0x59a01c0a, 0x900001c0, 0x800c1d40,
- 0x912c0406, 0x0501f669, 0x60000020, 0x50000000,
- 0x82000480, 0x25320001, 0x05020007, 0x4a03c014,
- 0x00400040, 0x4a03c013, 0x00400000, 0x6041d04e,
- 0x0515f807, 0x496fc857, 0x916c0580, 0x05000003,
- 0x646b4407, 0x05f9f4be, 0x050df9c6, 0x05060e6b,
- 0x60800800, 0x59a00408, 0x59a01208, 0x900811c0,
- 0x80081540, 0x59a0040a, 0x59a01a0a, 0x900c19c0,
- 0x800c1d40, 0x419c0000, 0x49a3c857, 0x0501fe45,
- 0x4a01d808, 0x0010275f, 0x1c01f000, 0x4833c857,
- 0x4031d800, 0x58ef400a, 0x58ec0002, 0x82000580,
- 0x00000200, 0x05f8049e, 0x599c0200, 0x800001c0,
- 0x05f804a7, 0x59a80086, 0x8c000502, 0x05000011,
- 0x599c0017, 0x84000508, 0x48033817, 0x599c0019,
- 0x82000500, 0xffff1fff, 0x82000540, 0x00004000,
- 0x48033819, 0x599c0018, 0x84000510, 0x84000516,
- 0x82000500, 0xffffffcf, 0x90000560, 0x0501f004,
- 0x8c000504, 0x05000003, 0x599c0018, 0x48033818,
- 0x0529f86a, 0x850e1d20, 0x599c0017, 0x8c000508,
- 0x05000003, 0x850e1d60, 0x0501f006, 0x8c00050a,
- 0x05fa0487, 0x59a80806, 0x8c040516, 0x05fa0484,
- 0x4803c857, 0x8c000504, 0x05020004, 0x59c408a3,
- 0x84040d7a, 0x480788a3, 0x8c000502, 0x05020004,
- 0x59c408a3, 0x84040d08, 0x480788a3, 0x599c0c02,
- 0x8c000500, 0x05020004, 0x8c000516, 0x0500000e,
- 0x0501f001, 0xb00414bf, 0x05fa1471, 0x82041400,
- 0x00101a23, 0x50081000, 0x82081500, 0x000000ff,
- 0x8c000500, 0x05020004, 0x480b500f, 0x600c0800,
- 0x0515fa46, 0x599c0019, 0x8c000506, 0x05000003,
- 0x4a03b805, 0x90000000, 0x8c00050e, 0x05020005,
- 0x4c000000, 0x0505f8e7, 0x5c000000, 0x05fa045c,
- 0x90000530, 0x05000003, 0x80000108, 0x0501f002,
- 0x60080000, 0x48039040, 0x60080800, 0x82000400,
- 0x0010289d, 0x50001000, 0x0515fa30, 0x599c0201,
- 0x82000c80, 0x00000100, 0x05f8144d, 0x82000c80,
- 0x00000841, 0x05fa144a, 0x90000507, 0x05fa0448,
- 0x599c0401, 0x80000540, 0x05f80445, 0x59a80886,
- 0x8c040502, 0x05000005, 0x90000c90, 0x05001003,
- 0x60400000, 0x48033c01, 0x850e1d52, 0x82000580,
- 0x0000ffff, 0x05000002, 0x850e1d12, 0x599c0409,
- 0x599c0c07, 0x80040c80, 0x05fa1435, 0x80000040,
- 0x05f80433, 0x599c0209, 0x599c0a07, 0x80040c80,
- 0x05fa142f, 0x80000040, 0x05f8042d, 0x050dfcbc,
- 0x0509ff57, 0x599c0201, 0x48035004, 0x05f5f84a,
- 0x599c020a, 0x800001c0, 0x05000003, 0x48035031,
- 0x0501f003, 0x4a035031, 0x000000c8, 0x8d0c0520,
- 0x05000003, 0x0511ff9e, 0x417a5000, 0x599c0003,
- 0x599c0804, 0x9c0001c0, 0x9c0409c0, 0x48035002,
- 0x48075003, 0x599c1017, 0x8c08051c, 0x05000006,
- 0x599c0005, 0x599c0806, 0x9c0001c0, 0x9c0409c0,
- 0x0501f003, 0x82000500, 0xf0ffffff, 0x48035000,
- 0x48075001, 0x42001000, 0x001094d7, 0x48001000,
- 0x48041001, 0x42001000, 0x001094e4, 0x48001000,
- 0x48041001, 0x599c1019, 0x82081500, 0x0000e000,
- 0x497b4208, 0x05f5ffa1, 0x05000012, 0x05f5ff83,
- 0x64074208, 0x0502000f, 0x4c080000, 0x05f5ff8d,
- 0x5c001000, 0x05020007, 0x640b4208, 0x82080580,
- 0x00008000, 0x05020007, 0x64134208, 0x0501f005,
- 0x640f4208, 0x90080580, 0x05020002, 0x64174208,
- 0x90080580, 0x05020007, 0x64035037, 0x60040000,
- 0x05f5fd72, 0x60040000, 0x05f5fd46, 0x0501f02b,
- 0x82080580, 0x00002000, 0x05020008, 0x64075037,
- 0x60000000, 0x05f5fd69, 0x60000000, 0x05f5fd3d,
- 0x05f9f8e6, 0x0501f021, 0x82080580, 0x00004000,
- 0x05020004, 0x640b5037, 0x64075043, 0x05fdf7f9,
- 0x82080580, 0x00006000, 0x0502000f, 0x59a80858,
- 0x82040d80, 0x01391077, 0x05020004, 0x59e00813,
- 0x8c040500, 0x05fa03ca, 0x640f5037, 0x60080000,
- 0x05f5fd52, 0x60080000, 0x05f5fd26, 0x05fdf7e9,
- 0x0501f00a, 0x82080580, 0x00008000, 0x05fa03c0,
- 0x05f9f8d9, 0x64135037, 0x600c0000, 0x05f5fd47,
- 0x600c0000, 0x05f5fd1b, 0x599c1019, 0x82081500,
- 0x0000e000, 0x4c080000, 0x0501fe8d, 0x5c001000,
- 0x05020004, 0x82080580, 0x00004000, 0x0500000b,
- 0x0501fe54, 0x05000003, 0x0501fe69, 0x05020009,
- 0x82080580, 0x00008000, 0x05000004, 0x82080580,
- 0x00004000, 0x05020003, 0x600010c0, 0x0501f004,
- 0x599c0019, 0x8c000518, 0x05000005, 0x8008111a,
- 0x480b5044, 0x640b5037, 0x64075043, 0x599c0019,
- 0x8c000520, 0x05000001, 0x4a035013, 0x0000aaaa,
- 0x599c1018, 0x90081530, 0x90080d80, 0x05000005,
- 0x90080d90, 0x05000008, 0x90080da0, 0x05020002,
- 0x48075013, 0x0501fdb7, 0x05000007, 0x4803c856,
- 0x850e1d46, 0x05f5faea, 0x59a8001f, 0x80040540,
- 0x4803501f, 0x49f3c857, 0x42001000, 0x00104064,
- 0x0511fd81, 0x42001000, 0x00104057, 0x0511feaf,
- 0x4a038805, 0xffffffff, 0x0501fe44, 0x05000005,
- 0x4a03c014, 0x00400040, 0x4a03c013, 0x00400000,
- 0x59a0001e, 0x84000540, 0x4803401e, 0x49f3c857,
- 0x05f9f32d, 0x00000018, 0x0000000c, 0x00000018,
- 0x00000020, 0x916c0580, 0x05020003, 0x601c0800,
- 0x05f9f367, 0x60800800, 0x59a00408, 0x59a01208,
- 0x900811c0, 0x80081540, 0x59a0040a, 0x59a01a0a,
- 0x900c19c0, 0x800c1d40, 0x419c0000, 0x0501f4f7,
- 0x8d0c050e, 0x05000003, 0x64074407, 0x05f9f358,
- 0x050df860, 0x05020003, 0x645b4407, 0x05f9f354,
- 0x59a8006f, 0x8c000500, 0x0500000e, 0x64034407,
- 0x60800800, 0x59a00408, 0x59a01208, 0x900811c0,
- 0x80081540, 0x59a0040a, 0x59a01a0a, 0x900c19c0,
- 0x800c1d40, 0x42000000, 0x00109953, 0x0501f4df,
- 0x64074407, 0x6080b000, 0x4200a800, 0x00109953,
- 0x4200a000, 0xffffffff, 0x4450a800, 0x8054a800,
- 0x8058b040, 0x05fe07fd, 0x4d440000, 0x4d340000,
- 0x42028800, 0xffffffff, 0x42002000, 0xffffffff,
- 0x60043000, 0x60043800, 0x42001800, 0x00109953,
- 0x59a8100f, 0x82081500, 0x000000ff, 0x40180000,
- 0x0c01f001, 0x001028e5, 0x001028e8, 0x001028ec,
- 0x001028f0, 0x82102500, 0xffffff00, 0x0501f014,
- 0x82102500, 0xffff00ff, 0x840811c0, 0x0501f010,
- 0x82102500, 0xff00ffff, 0x900811c0, 0x0501f00c,
- 0x82102500, 0x00ffffff, 0x9c0801c0, 0x80102540,
- 0x44101800, 0x42003000, 0xffffffff, 0x42002000,
- 0xffffffff, 0x800c1800, 0x0501f003, 0x40080000,
- 0x80102540, 0x81468800, 0xb1442cbf, 0x05021012,
- 0x4c080000, 0x4c0c0000, 0x4c180000, 0x4c1c0000,
- 0x0001fac4, 0x5c003800, 0x5c003000, 0x5c001800,
- 0x5c001000, 0x05fe07f4, 0x0509fb53, 0x05fe07f2,
- 0x80183000, 0x801c3800, 0x59341202, 0x40180000,
- 0x0c01f7d1, 0x82100580, 0xffffffff, 0x05000002,
- 0x44101800, 0x42001800, 0x00109953, 0x500c0000,
- 0x82000500, 0xffffff00, 0x801c0540, 0x44001800,
- 0x5c026800, 0x5c028800, 0x60800800, 0x59a00408,
- 0x59a01208, 0x900811c0, 0x80081540, 0x59a0040a,
- 0x59a01a0a, 0x900c19c0, 0x800c1d40, 0x42000000,
- 0x00109953, 0x0501f47d, 0x59a28c07, 0x59a0020c,
- 0x8c000500, 0x0500000c, 0x59a01209, 0x59a00409,
- 0x82000500, 0x000000ff, 0x900001c0, 0x80081540,
- 0x41784000, 0x0509fab6, 0x05000005, 0x48034407,
- 0x05f9f2d7, 0x0001fac4, 0x05fa02d5, 0x0501fc45,
- 0x05020003, 0x640b4407, 0x05f9f2cd, 0x59a0020c,
- 0x8c000500, 0x05000003, 0x0509fb1b, 0x050204ff,
- 0x59a0020c, 0x8c000502, 0x05000013, 0x83440480,
- 0x000007f0, 0x05021010, 0x0509fb1c, 0x0502000e,
- 0x497a5a05, 0x4a025c05, 0x00008000, 0x0525f8c6,
- 0x05020003, 0x640f4407, 0x05f9f2b9, 0x4a01d808,
- 0x00102956, 0x1c01f000, 0x59a28c07, 0x0001fac4,
- 0x05fa02b7, 0x4c580000, 0x4c500000, 0x4c540000,
- 0x6028b000, 0x4134a000, 0x912e5c02, 0x412ca800,
- 0x0531f8c9, 0x912cac06, 0x4054a000, 0x6010b000,
- 0x0531f900, 0x5c00a800, 0x5c00a000, 0x5c00b000,
- 0x592c0802, 0x82040500, 0x00ff00ff, 0x900001c0,
- 0x82041500, 0xff00ff00, 0x80080540, 0x48025802,
- 0x592c0801, 0x82040500, 0x00ff00ff, 0x900001c0,
- 0x82041500, 0xff00ff00, 0x80080540, 0x48025801,
- 0x60280800, 0x59a00408, 0x59a01208, 0x900811c0,
- 0x80081540, 0x59a0040a, 0x59a01a0a, 0x900c19c0,
- 0x800c1d40, 0x412c0000, 0x0501f424, 0x496fc857,
- 0x496f4407, 0x497b4208, 0x05f5fe2c, 0x05000015,
- 0x05f5fe0e, 0x64074208, 0x05020012, 0x4c080000,
- 0x05f5fe18, 0x5c001000, 0x05020008, 0x640b4208,
- 0x916c0580, 0x0500000b, 0x05f5fa37, 0x05020009,
- 0x64134208, 0x0501f007, 0x640f4208, 0x916c0580,
- 0x05000004, 0x05f5fa0f, 0x05020002, 0x64174208,
- 0x05f9f22d, 0x59a28c07, 0x0001fac4, 0x05fa0270,
- 0x916c0583, 0x05000003, 0x641f4407, 0x05f9f268,
- 0x91340c06, 0x59a0020c, 0x8c000500, 0x05000002,
- 0x91340c08, 0x58040001, 0x4803440a, 0x900001c0,
- 0x4803420a, 0x50040000, 0x48034408, 0x900001c0,
- 0x48034208, 0x59340200, 0x48034407, 0x05f9f216,
- 0x8d0c050e, 0x05000003, 0x64074407, 0x05f9f254,
- 0x59a0220c, 0x8c100500, 0x05020021, 0x8c100506,
- 0x05020004, 0x59a03209, 0x90180483, 0x05fa1250,
- 0x59a28c07, 0x0001fac4, 0x05fa024d, 0x0509fa89,
- 0x05000003, 0x64274407, 0x05f9f245, 0x0501fbb9,
- 0x05020003, 0x640b4407, 0x05f9f241, 0x59a0220c,
- 0x8c100506, 0x05000004, 0x59343002, 0x82183500,
- 0x00ffffff, 0x497a5a05, 0x4a025c05, 0x00008000,
- 0x0525f812, 0x05020003, 0x640f4407, 0x05f9f234,
- 0x4a01d808, 0x00102a19, 0x1c01f000, 0x59a28c07,
- 0x0001fac4, 0x05fa0232, 0x0509fa6e, 0x05000003,
- 0x64274407, 0x05f9f22a, 0x0501fb9e, 0x05020003,
- 0x640b4407, 0x05f9f226, 0x497a5a05, 0x4a025c05,
- 0x00008000, 0x0501fb97, 0x05020003, 0x640b4407,
- 0x05f9f21f, 0x592e5800, 0x0525f808, 0x05020003,
- 0x640f4407, 0x05f9f21a, 0x4a01d808, 0x001029f5,
- 0x1c01f000, 0x592c2806, 0x82140d80, 0x01000000,
- 0x05020003, 0x64134407, 0x05f9f211, 0x60200800,
- 0x59a00208, 0x59a01408, 0x900001c0, 0x80081540,
- 0x59a0020a, 0x59a01c0a, 0x900001c0, 0x800c1d40,
- 0x912c0406, 0x0501fba1, 0x8c140500, 0x05000003,
- 0x4a01d808, 0x00102a0b, 0x1c01f000, 0x4031d800,
- 0x58ef400a, 0x58ee580d, 0x58ec0002, 0x82000580,
- 0x00000200, 0x05f801f2, 0x812e59c0, 0x05e80fd3,
- 0x60200800, 0x912c0406, 0x58ec1006, 0x58ec1807,
- 0x0501f38e, 0x592c0006, 0x82000580, 0x01000000,
- 0x05020003, 0x64134407, 0x05f9f1ed, 0x59a00208,
- 0x59a01408, 0x900001c0, 0x80081540, 0x59a0020a,
- 0x59a01c0a, 0x900001c0, 0x800c1d40, 0x60180800,
- 0x912c0407, 0x0501f37d, 0x59a00a0b, 0x800409c0,
- 0x05f801e3, 0x82040480, 0x00000081, 0x05001002,
- 0x60000801, 0x59c40085, 0x59881004, 0x80081400,
- 0x480b1004, 0x497b8885, 0x59c400b1, 0x48031022,
- 0x59c400b2, 0x48031021, 0x59c400a2, 0x48031023,
- 0x598810b7, 0x598800b8, 0x80081400, 0x598800b9,
- 0x80081400, 0x598800ba, 0x80081400, 0x5988011d,
- 0x80081400, 0x598800bb, 0x80081400, 0x480b1024,
- 0x59a00208, 0x59a01408, 0x900001c0, 0x80081540,
- 0x59a0020a, 0x59a01c0a, 0x900001c0, 0x800c1d40,
- 0x91880400, 0x0501fb55, 0x4a01d808, 0x00102a55,
- 0x1c01f000, 0x4031d800, 0x58ef400a, 0x58ec0002,
- 0x82000580, 0x00000200, 0x05f801a9, 0x59a0020c,
- 0x8c000500, 0x05000006, 0x91880400, 0x4803c840,
- 0x641bc842, 0x05011000, 0x497b8885, 0x4a034208,
- 0x00000080, 0x05f9f164, 0x8d0c050e, 0x05000003,
- 0x64074407, 0x05f9f1a2, 0x0501fb16, 0x05020003,
- 0x640b4407, 0x05f9f19e, 0x497a5a05, 0x4a025c05,
- 0x00008000, 0x59a00407, 0x800001c0, 0x05f8019c,
- 0x82001580, 0x000000ff, 0x05000003, 0x90001484,
- 0x05fa1197, 0x40001000, 0x05f5fef5, 0x05020003,
- 0x640f4407, 0x05f9f18e, 0x4a01d808, 0x00102a81,
- 0x1c01f000, 0x592c0006, 0x82000580, 0x01000000,
- 0x05fa0145, 0x64134407, 0x05f9f185, 0x59a01407,
- 0x8c080508, 0x05020005, 0x8d0c050e, 0x05000003,
- 0x64074407, 0x05f9f17e, 0x59a01c08, 0x820c0480,
- 0x00001000, 0x05fa117e, 0x497b2804, 0x497b2805,
- 0x497b2826, 0x497b2827, 0x497b2829, 0x497b282a,
- 0x497b282c, 0x497b282d, 0x4803c856, 0x850e1d06,
- 0x8c080500, 0x05000004, 0x4803c856, 0x910e1d51,
- 0x0501f004, 0x8c080506, 0x05000002, 0x850e1d42,
- 0x850e1d0a, 0x6006d800, 0x82081500, 0x000000e0,
- 0x8008010a, 0x0c02002a, 0x0509fe6a, 0x05020008,
- 0x64075014, 0x4a035013, 0x0000aaaa, 0x0509fde3,
- 0x0501f018, 0x64035014, 0x05fdf7fb, 0x497b5013,
- 0x0505fb06, 0x0511ff0a, 0x0515f9eb, 0x0511fef4,
- 0x59a00a08, 0x480788a7, 0x59c400a3, 0x82000500,
- 0xfeffffff, 0x82000540, 0x80018000, 0x40000800,
- 0x84040d20, 0x480388a3, 0x480788a3, 0x497b5032,
- 0x60b40800, 0x42001000, 0x00103637, 0x0511fb23,
- 0x59a00408, 0x800000c2, 0x800008c4, 0x8005d400,
- 0x61fc01ff, 0x0509fe47, 0x05000003, 0x59a00208,
- 0x80000110, 0x0501fb98, 0x05f9f0f7, 0x00102aaa,
- 0x00102aac, 0x00102ab3, 0x00101c0f, 0x00102ab1,
- 0x00101c0f, 0x00101c0f, 0x00101c0f, 0x916c0583,
- 0x05000003, 0x641f4407, 0x05f9f12d, 0x59a00408,
- 0x59a00a08, 0x900409c0, 0x80040d40, 0x4805d806,
- 0x59a0040a, 0x59a00a0a, 0x900409c0, 0x80040d40,
- 0x4805d807, 0x6401d801, 0x0501fa96, 0x05020003,
- 0x640b4407, 0x05f9f11e, 0x417a8800, 0x497b4001,
- 0x912c0406, 0x48034002, 0x59a00407, 0x8c000504,
- 0x0502008b, 0x4c5c0000, 0x4c600000, 0x4c640000,
- 0x4178b800, 0x59a0c407, 0x59a0c802, 0x0001fac4,
- 0x05020027, 0x0509f94f, 0x05000003, 0x0509f8b6,
- 0x05020023, 0x8c60053e, 0x05020020, 0x8c600500,
- 0x05000008, 0x59340009, 0x4400c800, 0x8064c800,
- 0x59340008, 0x4400c800, 0x8064c800, 0x0501f007,
- 0x59340007, 0x4400c800, 0x8064c800, 0x59340006,
- 0x4400c800, 0x8064c800, 0x83440580, 0x000007fe,
- 0x0500000b, 0x83440580, 0x000007fc, 0x05000008,
- 0x0509f945, 0x05000003, 0x85468d5e, 0x0501f004,
- 0x0509f87a, 0x05020002, 0x85468d5e, 0x4544c800,
- 0x85468d1e, 0x8064c800, 0x905cbc0c, 0x81468800,
- 0x83440480, 0x000007f0, 0x0500100c, 0x8c600506,
- 0x05000025, 0x83440580, 0x000007f0, 0x05020003,
- 0x61fa880f, 0x0501f005, 0x83440580, 0x000007ff,
- 0x0502001d, 0x61f2880f, 0x905c05bc, 0x05fe07c8,
- 0x59a00001, 0x805c0400, 0x48034001, 0x8c60053e,
- 0x05020007, 0x59a00a0b, 0x800409c0, 0x05000006,
- 0x80040480, 0x05021004, 0x8460c57e, 0x4178b800,
- 0x05fdf7bb, 0x49474000, 0x485dd805, 0x59a00002,
- 0x4801d803, 0x40ec1000, 0x0001f81c, 0x4a01d808,
- 0x00102b77, 0x5c00c800, 0x5c00c000, 0x5c00b800,
- 0x1c01f000, 0x8c60053e, 0x05020019, 0x805cb9c0,
- 0x05000021, 0x59a00001, 0x805c0400, 0x48034001,
- 0x59a00a0b, 0x800409c0, 0x05000005, 0x80040480,
- 0x05021003, 0x4178b800, 0x0501f00d, 0x59a00801,
- 0x48074407, 0x485dd805, 0x59a00002, 0x4801d803,
- 0x4a01d808, 0x00101bc2, 0x40ec1000, 0x5c00c800,
- 0x5c00c000, 0x5c00b800, 0x0001f01c, 0x59a00001,
- 0x805c0c00, 0x59a0020b, 0x80040480, 0x48034208,
- 0x642b4407, 0x5c00c800, 0x5c00c000, 0x5c00b800,
- 0x05f9f09b, 0x59a00801, 0x48074407, 0x5c00c800,
- 0x5c00c000, 0x5c00b800, 0x05f9f053, 0x4031d800,
- 0x58ef400a, 0x58ec0002, 0x82000580, 0x00000200,
- 0x05f80087, 0x59a28800, 0x05fdf777, 0x4c5c0000,
- 0x4c600000, 0x4c640000, 0x4178b800, 0x59a0c407,
- 0x59a0c802, 0x0001fac4, 0x05020029, 0x0509f8c5,
- 0x05000003, 0x0509f82c, 0x05020025, 0x8c60053e,
- 0x05020022, 0x83440580, 0x000007fe, 0x0500000f,
- 0x83440580, 0x000007fc, 0x0500000c, 0x0509f8ca,
- 0x05000005, 0x59340403, 0x8400055e, 0x48026c03,
- 0x0501f006, 0x0505fffd, 0x05020004, 0x59340403,
- 0x8400055e, 0x48026c03, 0x4134a000, 0x4064a800,
- 0x6018b000, 0x052dfe88, 0x59340007, 0x4400a800,
- 0x59340006, 0x4800a801, 0x59340009, 0x4800a802,
- 0x59340008, 0x4800a803, 0x59340403, 0x8400051e,
- 0x48026c03, 0x9064cc0a, 0x905cbc28, 0x81468800,
- 0x83440480, 0x000007f0, 0x0500100c, 0x8c600506,
- 0x05000026, 0x83440580, 0x000007f0, 0x05020003,
- 0x61fa880f, 0x0501f005, 0x83440580, 0x000007ff,
- 0x0502001e, 0x61f2880f, 0x905c05a8, 0x05000002,
- 0x05fdf7c5, 0x59a00001, 0x805c0400, 0x48034001,
- 0x8c60053e, 0x05020007, 0x59a00a0b, 0x800409c0,
- 0x05000006, 0x80040480, 0x05021004, 0x8460c57e,
- 0x4178b800, 0x05fdf7b8, 0x49474000, 0x485dd805,
- 0x59a00002, 0x4801d803, 0x40ec1000, 0x0001f81c,
- 0x4a01d808, 0x00102c04, 0x5c00c800, 0x5c00c000,
- 0x5c00b800, 0x1c01f000, 0x8c60053e, 0x05020019,
- 0x805cb9c0, 0x05000021, 0x59a00001, 0x805c0400,
- 0x48034001, 0x59a00a0b, 0x800409c0, 0x05000005,
- 0x80040480, 0x05021003, 0x4178b800, 0x0501f00d,
- 0x59a00801, 0x48074407, 0x485dd805, 0x59a00002,
- 0x4801d803, 0x4a01d808, 0x00101bc2, 0x40ec1000,
- 0x5c00c800, 0x5c00c000, 0x5c00b800, 0x0001f01c,
- 0x59a00001, 0x805c0c00, 0x59a0020b, 0x80040480,
- 0x48034208, 0x642b4407, 0x5c00c800, 0x5c00c000,
- 0x5c00b800, 0x05f9f00e, 0x59a00801, 0x48074407,
- 0x5c00c800, 0x5c00c000, 0x5c00b800, 0x05f5f7c6,
- 0x4031d800, 0x58ef400a, 0x58ec0002, 0x82000580,
- 0x00000200, 0x05f407fa, 0x59a28800, 0x05fdf774,
- 0x61f82800, 0x59a00c07, 0x59a01208, 0x59a01c08,
- 0x59a0220a, 0x82040500, 0x0000ff00, 0x840001c0,
- 0x900034a0, 0x05f417fa, 0x80140480, 0x05f417f8,
- 0x82040500, 0x000000ff, 0x900034a0, 0x05f417f4,
- 0x80140480, 0x05f417f2, 0x82080500, 0x0000ff00,
- 0x840001c0, 0x900034a0, 0x05f417ed, 0x80140480,
- 0x05f417eb, 0x82080500, 0x000000ff, 0x900034a0,
- 0x05f417e7, 0x80140480, 0x05f417e5, 0x820c0500,
- 0x0000ff00, 0x840001c0, 0x900034a0, 0x05f417e0,
- 0x80140480, 0x05f417de, 0x820c0500, 0x000000ff,
- 0x900034a0, 0x05f417da, 0x80140480, 0x05f417d8,
- 0x82100500, 0x0000ff00, 0x840001c0, 0x900034a0,
- 0x05f417d3, 0x80140480, 0x05f417d1, 0x82100500,
- 0x000000ff, 0x900034a0, 0x05f417cd, 0x80140480,
- 0x05f417cb, 0x900401c0, 0x80080d40, 0x900c01c0,
- 0x80101d40, 0x91a8342d, 0x44043000, 0x80183000,
- 0x440c3000, 0x05f5f77c, 0x916c0583, 0x05000003,
- 0x641f4407, 0x05f5f7ba, 0x59a00408, 0x59a00a08,
- 0x900409c0, 0x80040d40, 0x4805d806, 0x59a0040a,
- 0x59a00a0a, 0x900409c0, 0x80040d40, 0x4805d807,
- 0x6401d801, 0x0501f923, 0x05020003, 0x640b4407,
- 0x05f5f7ab, 0x417a8800, 0x497b4001, 0x912c0405,
- 0x48034002, 0x4c5c0000, 0x4c600000, 0x4c640000,
- 0x4178b800, 0x4178c800, 0x59a0c002, 0x41440000,
- 0x81ac0400, 0x50026800, 0x813669c0, 0x0500000a,
- 0x0505ffdc, 0x05020008, 0x8c64053e, 0x05020005,
- 0x59340002, 0x4800c000, 0x4944c001, 0x9060c402,
- 0x905cbc08, 0x81468800, 0x83440480, 0x00000800,
- 0x0502101f, 0xb05c0480, 0x05021002, 0x05fdf7ec,
- 0x59a00001, 0x805c0400, 0x48034001, 0x8c64053e,
- 0x05000003, 0x4178b800, 0x05fdf7e5, 0x59a00a0b,
- 0x800409c0, 0x05000006, 0x80040480, 0x05021004,
- 0x4178b800, 0x8464cd7e, 0x05fdf7dd, 0x49474000,
- 0x485dd805, 0x59a00002, 0x4801d803, 0x40ec1000,
- 0x0001f81c, 0x4a01d808, 0x00102cc7, 0x5c00c800,
- 0x5c00c000, 0x5c00b800, 0x1c01f000, 0x8c64053e,
- 0x0502001a, 0x805cb9c0, 0x05000022, 0x59a00001,
- 0x805c0400, 0x48034001, 0x59a00a0b, 0x800409c0,
- 0x05000005, 0x80040480, 0x05021003, 0x4178b800,
- 0x0501f00e, 0x59a00801, 0x80040906, 0x48074407,
- 0x485dd805, 0x59a00002, 0x4801d803, 0x4a01d808,
- 0x00101bc2, 0x40ec1000, 0x5c00c800, 0x5c00c000,
- 0x5c00b800, 0x0001f01c, 0x59a00001, 0x805c0c00,
- 0x59a0020b, 0x80040480, 0x48034208, 0x642b4407,
- 0x5c00c800, 0x5c00c000, 0x5c00b800, 0x05f5f74c,
- 0x59a00801, 0x80040906, 0x48074407, 0x5c00c800,
- 0x5c00c000, 0x5c00b800, 0x05f5f703, 0x4031d800,
- 0x58ef400a, 0x58ec0002, 0x82000580, 0x00000200,
- 0x05f40737, 0x59a28800, 0x05fdf797, 0x8d0c050e,
- 0x05000003, 0x64074407, 0x05f5f739, 0x59a8021b,
- 0x8c00050a, 0x05020005, 0x8c000506, 0x05020003,
- 0x645b4407, 0x05f5f732, 0x0501f8a6, 0x05020003,
- 0x640b4407, 0x05f5f72e, 0x59a00c07, 0x80040902,
- 0x59a00408, 0x59a01208, 0x900811c0, 0x80081540,
- 0x59a0040a, 0x59a01a0a, 0x900c19c0, 0x800c1d40,
- 0x912c0406, 0x0501f8b7, 0x4a01d808, 0x00102ced,
- 0x1c01f000, 0x4031d800, 0x58ef400a, 0x58ee580c,
- 0x58ec0002, 0x82000580, 0x00000200, 0x05f40710,
- 0x592c000a, 0x050dfead, 0x05040c53, 0x05f60718,
- 0x49474001, 0x481a6802, 0x592c000b, 0x82001d80,
- 0x70000000, 0x05020005, 0x0501f882, 0x0502000c,
- 0x640b4407, 0x05f5f70a, 0x82001d80, 0x72000000,
- 0x05f6070b, 0x0501f87b, 0x0502087a, 0x05020879,
- 0x05020003, 0x640b4407, 0x05f5f701, 0x58ee580c,
- 0x4a025c05, 0x00008000, 0x497a5a05, 0x592c3209,
- 0x80183102, 0x592c1801, 0x4a001806, 0x01000000,
- 0x0521fcf1, 0x05020003, 0x640f4407, 0x05f5f6f4,
- 0x4a01d808, 0x00102d1b, 0x1c01f000, 0x592c4000,
- 0x592c0006, 0x82000580, 0x01000000, 0x05020003,
- 0x64134407, 0x05f5f6ea, 0x4c580000, 0x4c500000,
- 0x4c540000, 0x912c3c06, 0x401ca000, 0x401ca800,
- 0x5820280b, 0x6008b000, 0x82143580, 0x70000000,
- 0x05000002, 0x603cb000, 0x052dfd36, 0x5c00a800,
- 0x5c00a000, 0x5c00b000, 0x401c0000, 0x58201007,
- 0x58201808, 0x58202206, 0x80102102, 0x82143580,
- 0x70000000, 0x05020005, 0x90103482, 0x05f416d4,
- 0x60080800, 0x0501f069, 0x82143580, 0x72000000,
- 0x05f606cf, 0x901034aa, 0x05f416cd, 0x603c0800,
- 0x0501f862, 0x4a01d808, 0x00102d48, 0x1c01f000,
- 0x4031d800, 0x58ef400a, 0x58ee580d, 0x58ec0002,
- 0x82000580, 0x00000200, 0x05f406b5, 0x592e5800,
- 0x912c0c06, 0x4c580000, 0x4c500000, 0x4c540000,
- 0x4004a000, 0x4004a800, 0x603cb000, 0x052dfd0d,
- 0x5c00a800, 0x5c00a000, 0x5c00b000, 0x40ec1000,
- 0x64001001, 0x64f01005, 0x48041003, 0x0001f81c,
- 0x4a01d808, 0x00102d63, 0x1c01f000, 0x4031d800,
- 0x58ef400a, 0x58ee580d, 0x58ec0002, 0x82000580,
- 0x00000200, 0x05f4069a, 0x912c0c06, 0x4c580000,
- 0x4c500000, 0x4c540000, 0x4004a000, 0x4004a800,
- 0x6030b000, 0x052dfcf3, 0x5c00a800, 0x5c00a000,
- 0x5c00b000, 0x40ec1000, 0x64001001, 0x64c01005,
- 0x48041003, 0x0001f81c, 0x4a01d808, 0x00101bc2,
- 0x1c01f000, 0x0501f803, 0x412d8800, 0x1c01f000,
- 0x05e9ffe8, 0x0500000e, 0x497a5800, 0x58ec000c,
- 0x80000540, 0x05020004, 0x492dd80c, 0x492dd80d,
- 0x0501f006, 0x58ec000d, 0x48025800, 0x90000401,
- 0x452c0000, 0x492dd80d, 0x912c0405, 0x492fc857,
- 0x4803c857, 0x1c01f000, 0x4d2c0000, 0x58ec400c,
- 0x802041c0, 0x05000007, 0x4823c857, 0x40225800,
- 0x592c4001, 0x497a5801, 0x05e9ffde, 0x05fdf7f9,
- 0x4979d80c, 0x4979d80d, 0x5c025800, 0x1c01f000,
- 0x60043000, 0x0501f006, 0x60043000, 0x0501f005,
- 0x60003000, 0x0501f003, 0x60003000, 0x800408c4,
- 0x800409c0, 0x05e80c3d, 0x4803c857, 0x4807c857,
- 0x480bc857, 0x480fc857, 0x481bc857, 0x48efc857,
- 0x4819d801, 0x4801d803, 0x4809d806, 0x480dd807,
- 0x4805d805, 0x40ec1000, 0x0001f81c, 0x4a01d808,
- 0x00101bc2, 0x1c01f000, 0x40681000, 0x406c1800,
- 0x80002d80, 0x480bc857, 0x480fc857, 0x4813c857,
- 0x4817c857, 0x8d0c0520, 0x05000004, 0x59a80005,
- 0x8c000516, 0x052a0632, 0x4d2c0000, 0x4da00000,
- 0x42034000, 0x00109490, 0x59a00018, 0x800001c0,
- 0x05020014, 0x05006013, 0x480bc020, 0x480fc021,
- 0x4813c022, 0x4817c023, 0x900811c0, 0x90081552,
- 0x480bc011, 0x59e00017, 0x8c00050a, 0x60000800,
- 0x0002088c, 0x8d0c0530, 0x05f20995, 0x0002098c,
- 0x6403c017, 0x4203e000, 0x30000001, 0x0501f049,
- 0x4c040000, 0x4c1c0000, 0x80000800, 0x48074018,
- 0x59a0381b, 0x481fc857, 0x801c39c0, 0x05020023,
- 0x9000048a, 0x0502100e, 0x59a00019, 0x80000000,
- 0x48034019, 0x59a0021a, 0x90000402, 0x90000c94,
- 0x4803421a, 0x05001003, 0x497b421a, 0x41780000,
- 0x59a03817, 0x801c3c00, 0x0501f02c, 0x4803c856,
- 0x05e9ff70, 0x05000007, 0x492f401b, 0x492f401c,
- 0x412c3800, 0x497b421d, 0x497a5814, 0x0501f023,
- 0x5988001e, 0x80000000, 0x4803101e, 0x59a00018,
- 0x80000040, 0x48034018, 0x59a0021a, 0x59a03817,
- 0x801c3c00, 0x0501f019, 0x59a0021d, 0x90000402,
- 0x90000c93, 0x05021004, 0x4803421d, 0x801c3c00,
- 0x0501f012, 0x05e9ff57, 0x0502000b, 0x5988001e,
- 0x80000000, 0x4803101e, 0x59a00018, 0x80000040,
- 0x48034018, 0x4803c856, 0x59a0021d, 0x801c3c00,
- 0x0501f006, 0x492f401b, 0x492c3814, 0x412c3800,
- 0x497b421d, 0x497a5814, 0x48083c00, 0x480c3a00,
- 0x48103c01, 0x48143a01, 0x5c003800, 0x5c000800,
- 0x5c034000, 0x5c025800, 0x1c01f000, 0x40681800,
- 0x406c2000, 0x40703000, 0x480fc857, 0x4813c857,
- 0x481bc857, 0x42000000, 0x00109835, 0x052dfb2c,
- 0x801800d0, 0x40002800, 0x60501100, 0x05fdf786,
- 0x4c000000, 0x599c0017, 0x8c000512, 0x5c000000,
- 0x1c01f000, 0x4c000000, 0x599c0018, 0x8c00050e,
- 0x5c000000, 0x1c01f000, 0x8d0c050e, 0x05000003,
- 0x64074407, 0x05f5f5c6, 0x916c0583, 0x05000003,
- 0x641f4407, 0x05f5f5c2, 0x599c0017, 0x8c00050a,
- 0x05000003, 0x64234407, 0x05f5f5bd, 0x59340405,
- 0x8c000508, 0x05020003, 0x8c00050a, 0x05fe02f1,
- 0x497a5a05, 0x497a5806, 0x4a025c05, 0x00008000,
- 0x0521fc39, 0x05020003, 0x640f4407, 0x05f5f5b0,
- 0x4a01d808, 0x00102e5f, 0x1c01f000, 0x592c0006,
- 0x82000580, 0x01000000, 0x05020003, 0x64134407,
- 0x05f5f5a7, 0x59a28c07, 0x0001fac4, 0x05f605a8,
- 0x05fdf2dc, 0x82001580, 0x0000ffff, 0x05000006,
- 0x050dfd36, 0x00000ac4, 0x05020008, 0x050dffb9,
- 0x0501f006, 0x61be880f, 0x0001fac4, 0x050c0fb5,
- 0x81468840, 0x05fe17fd, 0x1c01f000, 0x4803c856,
- 0x4c0c0000, 0x4d340000, 0x4d440000, 0x61fa880f,
- 0x0001fac4, 0x05020006, 0x5934180a, 0x900c1d01,
- 0x900c1d81, 0x606c1100, 0x05fdff3a, 0x5c028800,
- 0x5c026800, 0x5c001800, 0x1c01f000, 0x48efc857,
- 0x05011000, 0x48efc840, 0x643fc842, 0x40000000,
- 0x05fd17ff, 0x4a01d80e, 0xbeefbeef, 0x1c01f000,
- 0x497b4000, 0x497b4001, 0x497b4002, 0x497b4003,
- 0x497b4004, 0x1c01f000, 0x42002000, 0x0010ccb4,
- 0x41580000, 0x41781000, 0x58100c07, 0x800409c0,
- 0x0500000c, 0x90041d83, 0x0500000a, 0x90041c86,
- 0x05001007, 0x90041d8a, 0x05000005, 0x90041c8f,
- 0x05001004, 0x90041c92, 0x05021002, 0x80081000,
- 0x90102424, 0x80100c80, 0x05fc17f0, 0x40080000,
- 0x59a81262, 0x80080480, 0x05021002, 0x41780000,
- 0x81640480, 0x05021002, 0x41780000, 0x1c01f000,
- 0x05f5f8fe, 0x05020015, 0x59a86858, 0x82346d80,
- 0x3261103c, 0x05020011, 0x052dfbc1, 0x0500000d,
- 0x605c70f4, 0x50386800, 0x82347500, 0x03f00000,
- 0x82387580, 0x00400000, 0x05020007, 0x82347500,
- 0x000f0000, 0x82387580, 0x00010000, 0x05000002,
- 0x90000541, 0x64030000, 0x1c01f000, 0x05f5f8e7,
- 0x05020004, 0x59a86858, 0x82347580, 0x01651077,
- 0x1c01f000, 0x0501f805, 0x60058800, 0x05000002,
- 0x60018800, 0x1c01f000, 0x05f5f8dc, 0x0502000a,
- 0x59a86858, 0x82347580, 0x01661077, 0x05000006,
- 0x82347580, 0x01681077, 0x05000003, 0x82347580,
- 0x01761077, 0x1c01f000, 0x0501f805, 0x60058800,
- 0x05000002, 0x60018800, 0x1c01f000, 0x05f5f8cb,
- 0x05020007, 0x59a86858, 0x82347580, 0x01681077,
- 0x05000003, 0x82347580, 0x01761077, 0x1c01f000,
- 0x4803c856, 0x05fdfff6, 0x65034407, 0x05f60518,
- 0x59a0020b, 0x4803c857, 0x800001c0, 0x05f40518,
- 0xb0000485, 0x05f61516, 0x59a0220c, 0x8c100500,
- 0x0502001b, 0x4803c856, 0x05fdfe82, 0x05020004,
- 0x640b4407, 0x4803c856, 0x05f5f509, 0x59a00c0b,
- 0x59a01a0b, 0x59a0220c, 0x59a02c07, 0x912e5c02,
- 0x412cc800, 0x4807c857, 0x480fc857, 0x4813c857,
- 0x4817c857, 0x4867c857, 0x0501f8cf, 0x05000017,
- 0x59a00a0b, 0x59a01008, 0x900811c0, 0x59a0180a,
- 0x900c19c0, 0x412c0000, 0x05fdf68e, 0x4807c856,
- 0x59a00c0b, 0x59a01a0b, 0x900c0581, 0x05f604f4,
- 0x59a02c07, 0x91a0cc07, 0x4807c857, 0x4813c857,
- 0x4817c857, 0x0501f8bc, 0x05000004, 0x59a00a07,
- 0x48074407, 0x05f5f4a4, 0x64134407, 0x05f5f4e4,
- 0x59a0220c, 0x4813c857, 0x05fdffbd, 0x65034407,
- 0x05f604df, 0x59a00c0b, 0x4807c857, 0x8c100500,
- 0x0502001b, 0x05fdfe4f, 0x05020003, 0x640b4407,
- 0x05f5f4d7, 0x59a00a0b, 0xb0040485, 0x05f614d8,
- 0x59a01008, 0x900811c0, 0x59a0180a, 0x900c19c0,
- 0x912c0402, 0x05fdfe65, 0x4a01d808, 0x00102f41,
- 0x1c01f000, 0x4031d800, 0x58ef400a, 0x58ee580c,
- 0x58ec0002, 0x82000580, 0x00000200, 0x05f404bc,
- 0x912c1402, 0x59a01a0b, 0x0501f003, 0x91a0140b,
- 0x60041800, 0x59a00c0b, 0x59a0220c, 0x59a02c07,
- 0x4807c857, 0x480bc857, 0x50080000, 0x82000500,
- 0x000000ff, 0x4803c857, 0x480fc857, 0x4813c857,
- 0x4817c857, 0x0501f830, 0x64134407, 0x05f404b0,
- 0x05f5f46d, 0x05fdff8a, 0x0502000d, 0x4803c856,
- 0x61c0083f, 0x61c4103f, 0x64000800, 0x46001000,
- 0x000001a7, 0x64040800, 0x64041000, 0x64080800,
- 0x50080000, 0x8400054e, 0x44001000, 0x1c01f000,
- 0x4803c856, 0x4c5c0000, 0x64103000, 0x60e0b817,
- 0x05f1fe95, 0x805cb840, 0x05000005, 0x501c6800,
- 0x90346d02, 0x05fe07fb, 0x90346d41, 0x485fc857,
- 0x5c00b800, 0x1c01f000, 0x4803c856, 0x4c5c0000,
- 0x64103000, 0x60e0b817, 0x05f1fe87, 0x805cb840,
- 0x05000006, 0x501c6800, 0x82346d00, 0x00000082,
- 0x05fe07fa, 0x90346d41, 0x485fc857, 0x5c00b800,
- 0x1c01f000, 0x4803c856, 0x4c5c0000, 0x61c0303f,
- 0x61c4383f, 0x64103000, 0x61a0b807, 0x805cb840,
- 0x0500004b, 0x501c0000, 0x8c00050c, 0x05fe07fc,
- 0x640c3000, 0x46003800, 0x000000a0, 0x64103000,
- 0x46003800, 0x00000090, 0x05fdffe0, 0x05000040,
- 0x8c10051c, 0x05000008, 0x640c3000, 0x4807c857,
- 0x44043800, 0x64103000, 0x64403800, 0x05fdffd7,
- 0x05000037, 0x800c19c0, 0x05000033, 0x640c3000,
- 0x5008b800, 0x445c3800, 0x485fc857, 0x480fc857,
- 0x800c1840, 0x05000028, 0x64103000, 0x64403800,
- 0x05fdffca, 0x0500002a, 0x640c3000, 0x805cb910,
- 0x445c3800, 0x485fc857, 0x480fc857, 0x800c1840,
- 0x0500001d, 0x64103000, 0x64403800, 0x05fdffbf,
- 0x0500001f, 0x640c3000, 0x805cb910, 0x445c3800,
- 0x485fc857, 0x480fc857, 0x800c1840, 0x05000012,
- 0x64103000, 0x64403800, 0x05fdffb4, 0x05000014,
- 0x640c3000, 0x805cb910, 0x445c3800, 0x485fc857,
- 0x480fc857, 0x800c1840, 0x05000007, 0x64103000,
- 0x64403800, 0x05fdffa9, 0x05000009, 0x80081000,
- 0x05fdf7d3, 0x64103000, 0x65403800, 0x05fdffa3,
- 0x05000003, 0x90000541, 0x4803c856, 0x5c00b800,
- 0x1c01f000, 0x4803c856, 0x4c5c0000, 0x4c600000,
- 0x400c6000, 0x61c0303f, 0x61c4383f, 0x64103000,
- 0x61a0b807, 0x805cb840, 0x05000088, 0x501c0000,
- 0x4803c857, 0x8c00050c, 0x05fe07fb, 0x8c10051c,
- 0x05000014, 0x640c3000, 0x50180000, 0x4803c857,
- 0x501c0000, 0x4803c857, 0x46003800, 0x000000a0,
- 0x64103000, 0x46003800, 0x00000090, 0x05fdff83,
- 0x05000076, 0x640c3000, 0x4807c857, 0x44043800,
- 0x64103000, 0x64403800, 0x05fdff7c, 0x0500006f,
- 0x640c3000, 0x46003800, 0x000000a1, 0x64103000,
- 0x46003800, 0x00000090, 0x05fdff74, 0x05000067,
- 0x800c19c0, 0x05e809dd, 0x4178b800, 0x900c1581,
- 0x05000040, 0x64103000, 0x64803800, 0x05fdff5d,
- 0x0500005e, 0x640c3000, 0x501c0800, 0x4807c857,
- 0x9c0409c0, 0x8004bd57, 0x485fc857, 0x480fc857,
- 0x805cb910, 0x800c1840, 0x900c1581, 0x05000031,
- 0x64103000, 0x64803800, 0x05fdff4e, 0x0500004f,
- 0x640c3000, 0x501c0800, 0x4807c857, 0x9c0409c0,
- 0x8004bd57, 0x485fc857, 0x480fc857, 0x805cb910,
- 0x800c1840, 0x900c1581, 0x05000022, 0x64103000,
- 0x64803800, 0x05fdff3f, 0x05000040, 0x640c3000,
- 0x501c0800, 0x4807c857, 0x9c0409c0, 0x8004bd57,
- 0x485fc857, 0x480fc857, 0x805cb910, 0x800c1840,
- 0x900c1581, 0x05000013, 0x64103000, 0x64803800,
- 0x05fdff30, 0x05000031, 0x640c3000, 0x501c0800,
- 0x4807c857, 0x9c0409c0, 0x8004bd57, 0x485fc857,
- 0x480fc857, 0x445cc800, 0x8064c800, 0x4178b800,
- 0x800c1840, 0x900c1581, 0x05000002, 0x05fdf7c2,
- 0x64103000, 0x65a03800, 0x05fdff1e, 0x0500001f,
- 0x640c3000, 0x501c0800, 0x4807c857, 0x82040d00,
- 0x000000ff, 0x9c0409c0, 0x8004bd57, 0x4807c857,
- 0x485fc857, 0x4863c857, 0x4867c857, 0x480fc857,
- 0x40301000, 0x41780800, 0x60100000, 0x050dffad,
- 0x4807c857, 0x800409c0, 0x05000006, 0x60100000,
- 0x80000c81, 0x805cb910, 0x80040840, 0x05fe07fe,
- 0x445cc800, 0x485fc857, 0x4863c857, 0x4867c857,
- 0x90000541, 0x4803c856, 0x5c00c000, 0x5c00b800,
- 0x1c01f000, 0x0501f805, 0x60058800, 0x05000002,
- 0x60018800, 0x1c01f000, 0x60003020, 0x80183040,
- 0x05000010, 0x052dfa02, 0x05fc07fd, 0x05e9fe08,
- 0x605430f4, 0x50183800, 0x821c0500, 0x00007000,
- 0x05000006, 0x4803508b, 0x821c0500, 0xffff8fff,
- 0x44003000, 0x80000580, 0x64030000, 0x1c01f000,
- 0x4803c856, 0x4a034408, 0x0000cccc, 0x90000541,
- 0x05fdf7fa, 0x052df9ee, 0x05fc07ff, 0x600008f4,
- 0x58040015, 0x82000500, 0xffff8fff, 0x59a8108b,
- 0x80080540, 0x48000815, 0x64030000, 0x1c01f000,
- 0x59a80005, 0x8c000514, 0x05000005, 0x42000000,
- 0x001094cf, 0x50000000, 0x90000528, 0x1c01f000,
- 0x59c400a4, 0x4c580000, 0x4c500000, 0x4c540000,
- 0x9000050f, 0x90000487, 0x05001008, 0x90006c87,
- 0x05ea193e, 0x0c01f807, 0x5c00a800, 0x5c00a000,
- 0x5c00b000, 0x1c01f000, 0x0501f8e5, 0x05fdf7fb,
- 0x001030b7, 0x001030bd, 0x001030dd, 0x001030f7,
- 0x00103199, 0x001030b6, 0x1c01f000, 0x59c40806,
- 0x8c040500, 0x05020003, 0x84040d40, 0x48078806,
- 0x1c01f000, 0x59c40005, 0x8c000534, 0x05020638,
- 0x4a038805, 0xffffffff, 0x42006000, 0x00020000,
- 0x0501fe1a, 0x59a80015, 0x82000500, 0xfffffffa,
- 0x84000542, 0x48035015, 0x497b521b, 0x42000800,
- 0x00109953, 0x45780800, 0x497b506f, 0x42006000,
- 0xffefffff, 0x42006800, 0x40000000, 0x0501fe05,
- 0x59c40006, 0x82000500, 0xffffff0f, 0x48038806,
- 0x60400800, 0x42001000, 0x00103661, 0x050dfd27,
- 0x0501f001, 0x42006000, 0xffffffff, 0x42006800,
- 0x00800000, 0x0501fdf7, 0x6120b001, 0x59c400a4,
- 0x9000050f, 0x9000058a, 0x0500000d, 0x8058b040,
- 0x05fe07fb, 0x497b5010, 0x42006000, 0xbf7fffff,
- 0x42006800, 0x00018000, 0x0501fdea, 0x42006000,
- 0xfffeffff, 0x41786800, 0x0501f5e6, 0x497b5010,
- 0x6403506e, 0x80000580, 0x0501f5ef, 0x4a038805,
- 0xffffffff, 0x59a8006e, 0x90000c84, 0x05ea18eb,
- 0x0c01f001, 0x00103100, 0x00103126, 0x00103192,
- 0x4803c856, 0x59c400a3, 0x8400051e, 0x480388a3,
- 0x6407506e, 0x59c40008, 0x82000540, 0x00000280,
- 0x48038808, 0x0501fdb7, 0x42007800, 0x001094fc,
- 0x4a007806, 0x11010000, 0x4200a000, 0x00109402,
- 0x4200a800, 0x00109503, 0x6008b000, 0x052df916,
- 0x59c40802, 0x84040d0c, 0x48078802, 0x600c0800,
- 0x497b5077, 0x0501fcca, 0x64075077, 0x497b5073,
- 0x0501fdcf, 0x42006000, 0xffffffff, 0x42006800,
- 0x00080000, 0x0501fdb7, 0x42006000, 0xfff7ffff,
- 0x41786800, 0x0501f5b3, 0x59a80073, 0x497b5073,
- 0x80002540, 0x0500005e, 0x59c40004, 0x90000503,
- 0x05020065, 0x59a80815, 0x8c040502, 0x05000049,
- 0x9010058c, 0x0502004c, 0x90100418, 0x8000b104,
- 0x41cc1000, 0x42001800, 0x001094fc, 0x50080800,
- 0x500c0000, 0x80040580, 0x05020019, 0x80081000,
- 0x800c1800, 0x8058b040, 0x05fe07f9, 0x0501fdac,
- 0x59c80015, 0x84000508, 0x48039015, 0x42006000,
- 0xffffffff, 0x42006800, 0x00500000, 0x0501fd91,
- 0x640b506e, 0x640b5010, 0x05f1f9e8, 0x6140080f,
- 0x42001000, 0x001035bf, 0x050dfdde, 0x59a80015,
- 0x84000506, 0x48035015, 0x0501f56e, 0x59cc0806,
- 0x82040d80, 0x11010000, 0x05020027, 0x59cc0800,
- 0x82040500, 0x00ffffff, 0x05000018, 0x82000580,
- 0x000000ef, 0x05020015, 0x59cc0801, 0x82040500,
- 0x00ffffff, 0x82000580, 0x000000ef, 0x0502000f,
- 0x91cca407, 0x4200a800, 0x00109402, 0x6008b000,
- 0x50500800, 0x50540000, 0x80040480, 0x05001007,
- 0x05020011, 0x8050a000, 0x8054a800, 0x8058b040,
- 0x05fe07f8, 0x0501f00c, 0x59a80015, 0x84000502,
- 0x48035015, 0x59c80015, 0x84000508, 0x48039015,
- 0x41cca000, 0x4200a800, 0x001094fc, 0x6024b000,
- 0x052df8ad, 0x0501fd6e, 0x42006000, 0xffffffff,
- 0x42006800, 0x00080000, 0x0501fd56, 0x42006000,
- 0xfff7ffff, 0x41786800, 0x0501fd52, 0x42006000,
- 0xffffffff, 0x60006880, 0x0501fd4e, 0x59c40004,
- 0x90000503, 0x05020004, 0x497b5073, 0x600c0800,
- 0x0501f453, 0x1c01f000, 0x1c01f000, 0x59a80010,
- 0x90006d8f, 0x05000003, 0x9000059b, 0x05020c1e,
- 0x1c01f000, 0x59a80015, 0x84000506, 0x48035015,
- 0x497b5077, 0x59a80010, 0x90000c9e, 0x05ea1847,
- 0x0c01f001, 0x001031d0, 0x001031e0, 0x00103202,
- 0x00103216, 0x00103234, 0x00103259, 0x00103277,
- 0x001032a0, 0x001032be, 0x001032d9, 0x0010330e,
- 0x00103332, 0x00103346, 0x00103353, 0x00103368,
- 0x0010337a, 0x0010337f, 0x001033a0, 0x001033bf,
- 0x001033df, 0x001033fe, 0x00103427, 0x00103461,
- 0x00103481, 0x00103497, 0x001034d1, 0x001034e7,
- 0x001034f7, 0x001034f8, 0x4803c856, 0x601ed800,
- 0x0505ff54, 0x05000006, 0x42006000, 0xffffffd7,
- 0x41786800, 0x0501fd13, 0x0501f009, 0x59c40006,
- 0x82000500, 0xffffff0f, 0x48038806, 0x4a038805,
- 0x000000f0, 0x0509fa8d, 0x0505febb, 0x1c01f000,
- 0x4803c856, 0x42006000, 0xbf7fffff, 0x42006800,
- 0x00400000, 0x0501fd03, 0x05f1f95c, 0x64075010,
- 0x42001000, 0x00103661, 0x050dfc46, 0x0501fc8f,
- 0x6140080f, 0x42001000, 0x001035bf, 0x050df54d,
- 0x59a80073, 0x90000594, 0x0502001e, 0x4803c857,
- 0x42006000, 0xffbfffff, 0x41786800, 0x0501fcf1,
- 0x59c40004, 0x90000503, 0x05020016, 0x42001000,
- 0x001035bf, 0x050dfc20, 0x59cc1006, 0x82081580,
- 0x11020000, 0x05020010, 0x59cc1007, 0x8c08053e,
- 0x0500000a, 0x59a80015, 0x8c000504, 0x05020007,
- 0x42000000, 0x001097c6, 0x0529ff65, 0x59a80015,
- 0x84000544, 0x48035015, 0x64435010, 0x0501f180,
- 0x1c01f000, 0x0501f3b4, 0x4803c856, 0x640f5010,
- 0x42006000, 0xbf3fffff, 0x42006800, 0x00100000,
- 0x0501fcd0, 0x42001000, 0x00103661, 0x050dfc15,
- 0x0501fc5e, 0x42001000, 0x001035bf, 0x050dfbfe,
- 0x42007800, 0x00109502, 0x46007800, 0x11020000,
- 0x60140800, 0x0501f3ce, 0x59a80073, 0x80000540,
- 0x0500001a, 0x4803c857, 0x42001000, 0x001035bf,
- 0x050dfbf1, 0x59a80073, 0x90000594, 0x05020014,
- 0x59cc1006, 0x82081580, 0x11020000, 0x05020010,
- 0x59cc1007, 0x8c08053e, 0x0500000a, 0x59a80015,
- 0x8c000504, 0x05020007, 0x42000000, 0x001097c6,
- 0x0529ff33, 0x59a80015, 0x84000544, 0x48035015,
- 0x64135010, 0x0501f003, 0x1c01f000, 0x0501f382,
- 0x4803c856, 0x64175010, 0x91cca406, 0x4200a800,
- 0x00109502, 0x6014b000, 0x0529ffef, 0x42007800,
- 0x00109502, 0x46007800, 0x11030000, 0x8d0c0506,
- 0x05020012, 0x59a80015, 0x8c000500, 0x0502000f,
- 0x59a8080f, 0x82040580, 0x00ffffff, 0x0500000b,
- 0x82040d00, 0x000000ff, 0x82040400, 0x00101a23,
- 0x50000800, 0x80040910, 0x60101000, 0x0501fb10,
- 0x05000007, 0x0501fc32, 0x6010b000, 0x91cca407,
- 0x4200a800, 0x00109503, 0x0529ffd3, 0x60140800,
- 0x0501f38b, 0x59a80073, 0x80000540, 0x0500001a,
- 0x4803c857, 0x42001000, 0x001035bf, 0x050dfbae,
- 0x59a80073, 0x90000594, 0x05020014, 0x59cc1006,
- 0x82081580, 0x11030000, 0x05020010, 0x59cc1007,
- 0x8c08053e, 0x0500000a, 0x59a80015, 0x8c000504,
- 0x05020007, 0x42000000, 0x001097c6, 0x0529fef0,
- 0x59a80015, 0x84000544, 0x48035015, 0x641b5010,
- 0x0501f003, 0x1c01f000, 0x0501f33f, 0x4803c856,
- 0x641f5010, 0x91cca406, 0x4200a800, 0x00109502,
- 0x6014b000, 0x0529ffac, 0x42007800, 0x00109502,
- 0x46007800, 0x11040000, 0x8d0c0506, 0x0502001b,
- 0x59a80015, 0x8c000500, 0x05020018, 0x599c0017,
- 0x8c000500, 0x05000015, 0x599c1402, 0xb00804bf,
- 0x05e61f5a, 0x4c080000, 0x82081400, 0x00101a23,
- 0x50081000, 0x82081500, 0x000000ff, 0x480b500f,
- 0x600c0800, 0x050dff59, 0x5c000800, 0x60101000,
- 0x0501fac7, 0x05000005, 0x05fdfba3, 0x05000003,
- 0x4803c856, 0x850e1d46, 0x60140800, 0x0501f344,
- 0x59a80073, 0x80000540, 0x0500001a, 0x4803c857,
- 0x42001000, 0x001035bf, 0x050dfb67, 0x59a80073,
- 0x90000594, 0x05020014, 0x59cc1006, 0x82081580,
- 0x11040000, 0x05020010, 0x59cc1007, 0x8c08053e,
- 0x0500000a, 0x59a80015, 0x8c000504, 0x05020007,
- 0x42000000, 0x001097c6, 0x0529fea9, 0x59a80015,
- 0x84000544, 0x48035015, 0x64235010, 0x0501f003,
- 0x1c01f000, 0x0501f2f8, 0x4803c856, 0x64275010,
- 0x91cca406, 0x4200a800, 0x00109502, 0x6014b000,
- 0x0529ff65, 0x42007800, 0x00109502, 0x46007800,
- 0x11050100, 0x8d0c0506, 0x05020008, 0x59a80015,
- 0x8c000500, 0x05020005, 0x0501fa2b, 0x05020003,
- 0x4803c856, 0x850e1d46, 0x60140800, 0x0501fb10,
- 0x4d3c0000, 0x60067800, 0x0521fd9f, 0x5c027800,
- 0x1c01f000, 0x59a80073, 0x80000540, 0x05000031,
- 0x4803c857, 0x42001000, 0x001035bf, 0x050dfb2e,
- 0x59a80073, 0x90000594, 0x0502002b, 0x59cc1006,
- 0x82080500, 0x11050000, 0x82000580, 0x11050000,
- 0x05020025, 0x8c080510, 0x05000011, 0x59cc1007,
- 0x8c08053e, 0x0500000a, 0x59a80015, 0x8c000504,
- 0x05020007, 0x42000000, 0x001097c6, 0x0529fe6c,
- 0x59a80015, 0x84000544, 0x48035015, 0x6407506f,
- 0x642b5010, 0x0501f815, 0x0501f012, 0x80000540,
- 0x05020011, 0x59cc1007, 0x8c08053e, 0x0500000a,
- 0x59a80015, 0x8c000504, 0x05020007, 0x42000000,
- 0x001097c6, 0x0529fe5a, 0x59a80015, 0x84000544,
- 0x48035015, 0x497b506f, 0x643b5010, 0x0501f05d,
- 0x1c01f000, 0x0501f2a8, 0x4803c856, 0x642f5010,
- 0x42001000, 0x00109503, 0x4008a800, 0x6080b000,
- 0x4600a800, 0xffffffff, 0x8054a800, 0x8058b040,
- 0x05fe07fc, 0x42007800, 0x00109502, 0x46007800,
- 0x11060000, 0x42001000, 0x00109503, 0x8d0c0506,
- 0x05000005, 0x50080000, 0x46001000, 0x00ffffff,
- 0x0501f00c, 0x50080800, 0x82040d00, 0x0000ffff,
- 0x59a8000f, 0x82000500, 0x000000ff, 0x82000540,
- 0x00000100, 0x800000e0, 0x80040d40, 0x44041000,
- 0x60840800, 0x0501f2b2, 0x59a80073, 0x80000540,
- 0x05000010, 0x4803c857, 0x59a80073, 0x42001000,
- 0x001035bf, 0x050dfad4, 0x59a80073, 0x82000580,
- 0x00000084, 0x05020008, 0x59cc1006, 0x82081580,
- 0x11060000, 0x05020004, 0x64335010, 0x0501f003,
- 0x1c01f000, 0x0501f270, 0x4803c856, 0x64375010,
- 0x91cca406, 0x4200a800, 0x00109502, 0x6084b000,
- 0x0529fedd, 0x42007800, 0x00109502, 0x46007800,
- 0x11070000, 0x60840800, 0x0501f291, 0x59a80073,
- 0x80000540, 0x05000011, 0x4803c857, 0x59a80073,
- 0x42001000, 0x001035bf, 0x050dfab3, 0x82000580,
- 0x00000084, 0x0502000a, 0x59cc1006, 0x82081580,
- 0x11070000, 0x05020006, 0x6407506f, 0x0501fa35,
- 0x643b5010, 0x0501f003, 0x1c01f000, 0x0501f24e,
- 0x4803c856, 0x90040d41, 0x0501fb7b, 0x643f5010,
- 0x497b5073, 0x42006000, 0xffffffff, 0x42006800,
- 0x00300000, 0x0501fb67, 0x42006000, 0xffdfffff,
- 0x41786800, 0x0501fb63, 0x6140080f, 0x42001000,
- 0x001035bf, 0x050df271, 0x4803c856, 0x59a80073,
- 0x80000540, 0x05020238, 0x1c01f000, 0x4803c856,
- 0x64475010, 0x91cca406, 0x4200a800, 0x00109502,
- 0x6014b000, 0x0529fea4, 0x4200a800, 0x00109502,
- 0x4600a800, 0x11020000, 0x8d0c0506, 0x05020013,
- 0x59a8000f, 0x82000d00, 0xffff0000, 0x0500000f,
- 0x82000500, 0x000000ff, 0x0500000c, 0x82000c00,
- 0x00101a23, 0x50040800, 0x80040910, 0xb00405be,
- 0x05000006, 0x82040580, 0x00000080, 0x05000003,
- 0x60101000, 0x0501f9c2, 0x60140800, 0x0501f244,
- 0x59a80073, 0x80000540, 0x0500001c, 0x4803c857,
- 0x42001000, 0x001035bf, 0x050dfa67, 0x59a80073,
- 0x90000594, 0x05020014, 0x59cc1006, 0x82081580,
- 0x11030000, 0x05020010, 0x59cc1007, 0x8c08053e,
- 0x0500000a, 0x59a80015, 0x8c000504, 0x05020007,
- 0x42000000, 0x001097c6, 0x0529fda9, 0x59a80015,
- 0x84000544, 0x48035015, 0x644b5010, 0x0501f804,
- 0x0501f002, 0x0501f9f8, 0x1c01f000, 0x4803c856,
- 0x644f5010, 0x91cca406, 0x4200a800, 0x00109502,
- 0x6014b000, 0x0529fe64, 0x4200a800, 0x00109502,
- 0x4600a800, 0x11030000, 0x8d0c0506, 0x05020012,
- 0x59a80015, 0x8c000500, 0x0502000f, 0x59a8080f,
- 0x82040580, 0x00ffffff, 0x0500000b, 0x82040d00,
- 0x000000ff, 0x82040400, 0x00101a23, 0x50000800,
- 0x80040910, 0x60101000, 0x0501f985, 0x05000002,
- 0x0501faa7, 0x60140800, 0x0501f205, 0x59a80073,
- 0x80000540, 0x0500001c, 0x4803c857, 0x42001000,
- 0x001035bf, 0x050dfa28, 0x59a80073, 0x90000594,
- 0x05020014, 0x59cc1006, 0x82081580, 0x11040000,
- 0x05020010, 0x59cc1007, 0x8c08053e, 0x0500000a,
- 0x59a80015, 0x8c000504, 0x05020007, 0x42000000,
- 0x001097c6, 0x0529fd6a, 0x59a80015, 0x84000544,
- 0x48035015, 0x64535010, 0x0501f804, 0x0501f002,
- 0x0501f9b9, 0x1c01f000, 0x4803c856, 0x64575010,
- 0x91cca406, 0x4200a800, 0x00109502, 0x6014b000,
- 0x0529fe25, 0x4200a800, 0x00109502, 0x4600a800,
- 0x11040000, 0x8d0c0506, 0x0502001b, 0x59a80015,
- 0x8c000500, 0x05020018, 0x599c0017, 0x8c000500,
- 0x05000015, 0x599c1402, 0xb00804bf, 0x05e61dd3,
- 0x4c080000, 0x82081400, 0x00101a23, 0x50081000,
- 0x82081500, 0x000000ff, 0x480b500f, 0x600c0800,
- 0x050dfdd2, 0x5c000800, 0x60101000, 0x0501f940,
- 0x05000005, 0x05fdfa1c, 0x05000003, 0x4803c856,
- 0x850e1d46, 0x60140800, 0x0501f1bd, 0x59a80073,
- 0x80000540, 0x05000037, 0x4803c857, 0x42001000,
- 0x001035bf, 0x050df9e0, 0x59a80073, 0x90000594,
- 0x0502002f, 0x59cc1006, 0x82080500, 0x11050000,
- 0x82000580, 0x11050000, 0x05020029, 0x8c080510,
- 0x0500000f, 0x0501faac, 0x59cc1007, 0x8c08053e,
- 0x0500000a, 0x59a80015, 0x8c000504, 0x05020007,
- 0x42000000, 0x001097c6, 0x0529fd1d, 0x59a80015,
- 0x84000544, 0x48035015, 0x0501f011, 0x59cc1007,
- 0x8c08053e, 0x0500000a, 0x59a80015, 0x8c000504,
- 0x05020007, 0x42000000, 0x001097c6, 0x0529fd10,
- 0x59a80015, 0x84000544, 0x48035015, 0x90000541,
- 0x0501fa91, 0x497b506f, 0x0501f002, 0x6407506f,
- 0x59cc1007, 0x8c08053c, 0x05000002, 0x6423521b,
- 0x645b5010, 0x0501f804, 0x0501f002, 0x0501f956,
- 0x1c01f000, 0x4803c856, 0x91cca406, 0x4200a800,
- 0x00109502, 0x6014b000, 0x0529fdc3, 0x645f5010,
- 0x59a8006f, 0x8c000500, 0x05000006, 0x42001000,
- 0x00109502, 0x46001000, 0x11050100, 0x0501f002,
- 0x646f5010, 0x8d0c0506, 0x05020008, 0x59a80015,
- 0x8c000500, 0x05020005, 0x0501f883, 0x05020003,
- 0x4803c856, 0x850e1d46, 0x60140800, 0x0501f968,
- 0x4d3c0000, 0x60067800, 0x0521fbf7, 0x5c027800,
- 0x1c01f000, 0x59a80073, 0x80000540, 0x05000013,
- 0x4803c857, 0x42001000, 0x001035bf, 0x050df986,
- 0x59a80073, 0x82000580, 0x00000084, 0x0502000a,
- 0x59cc1006, 0x82081580, 0x11060000, 0x05020006,
- 0x80000580, 0x0501fa54, 0x64635010, 0x0501f804,
- 0x0501f002, 0x0501f920, 0x1c01f000, 0x4803c856,
- 0x64675010, 0x91cca406, 0x4200a800, 0x00109502,
- 0x6084b000, 0x0529fd8c, 0x42003800, 0x00109503,
- 0x8d0c0506, 0x05020017, 0x401c2800, 0x50141000,
- 0x80080130, 0x80000000, 0x40001800, 0x82081500,
- 0x00ffffff, 0x800000f0, 0x80080540, 0x44002800,
- 0x59a8080f, 0x82040d00, 0x000000ff, 0x400c1000,
- 0x80081104, 0x82082400, 0x00109503, 0x50101000,
- 0x900c0503, 0x0c01f805, 0x80081540, 0x44082000,
- 0x60840800, 0x0501f12a, 0x001034be, 0x001034c3,
- 0x001034c8, 0x001034cd, 0x800408f0, 0x40040000,
- 0x82081500, 0x00ffffff, 0x1c01f000, 0x800408e0,
- 0x40040000, 0x82081500, 0xff00ffff, 0x1c01f000,
- 0x800408d0, 0x40040000, 0x82081500, 0xffff00ff,
- 0x1c01f000, 0x40040000, 0x82081500, 0xffffff00,
- 0x1c01f000, 0x59a80073, 0x80000540, 0x05000013,
- 0x4803c857, 0x42001000, 0x001035bf, 0x050df936,
- 0x59a80073, 0x82000580, 0x00000084, 0x0502000a,
- 0x59cc1006, 0x82081580, 0x11070000, 0x05020006,
- 0x6407506f, 0x0501f8b7, 0x646b5010, 0x0501f804,
- 0x0501f002, 0x0501f8d0, 0x1c01f000, 0x90000541,
- 0x0501f9fd, 0x646f5010, 0x91cca406, 0x4200a800,
- 0x00109502, 0x59a82073, 0x40100000, 0x8000b104,
- 0x40580800, 0x5450a800, 0x8050a000, 0x8054a800,
- 0x8058b040, 0x05fe07fc, 0x0501f0ed, 0x1c01f000,
- 0x1c01f000, 0x4803c856, 0x60103000, 0x42004000,
- 0x00109503, 0x599c2817, 0x8c140514, 0x0502001c,
- 0x600c1000, 0x40200000, 0x80080400, 0x50000800,
- 0x82042580, 0xffffffff, 0x05020005, 0x80081040,
- 0x80183040, 0x05fe07f8, 0x0501f054, 0x800811c0,
- 0x05020006, 0x82042580, 0x3fffffff, 0x0500004e,
- 0x82040d40, 0xc0000000, 0x6080b000, 0x60041800,
- 0x40042000, 0x80102102, 0x0502101f, 0x800c18c2,
- 0x8058b040, 0x05fe07fc, 0x0501f043, 0x41781000,
- 0x40200000, 0x80080400, 0x50000800, 0x82042580,
- 0xffffffff, 0x05020005, 0x80081000, 0x80183040,
- 0x05fe07f8, 0x0501f038, 0x800811c0, 0x05020003,
- 0x82040d40, 0xc0000000, 0x6004b000, 0x42001800,
- 0x80000000, 0x40042000, 0x801020c2, 0x05021006,
- 0x800c1902, 0x8058b000, 0x905804a1, 0x05fc17fb,
- 0x0501f029, 0x40200000, 0x80082400, 0x50100000,
- 0x800c0540, 0x44002000, 0x59a80015, 0x84000540,
- 0x48035015, 0x40580000, 0x60802800, 0x80142c80,
- 0x40080000, 0x600c3800, 0x801c0480, 0x800000ca,
- 0x80142d40, 0x82144c00, 0x00101a23, 0x50242800,
- 0x82142d00, 0x000000ff, 0x4817500f, 0x4c040000,
- 0x40140800, 0x05edfdef, 0x5c000800, 0x40001800,
- 0x500c0000, 0x80100540, 0x44001800, 0x59a80015,
- 0x84000540, 0x48035015, 0x4200a800, 0x00109503,
- 0x4020a000, 0x6010b000, 0x0529fccf, 0x90000541,
- 0x0501f002, 0x80000580, 0x1c01f000, 0x4807c857,
- 0x480bc857, 0x4008b000, 0x91cca407, 0x4200a800,
- 0x00109503, 0x40541000, 0x0529fcc3, 0x40041800,
- 0x41782000, 0x600c0000, 0x900c1ca0, 0x05001004,
- 0x80102000, 0x80000040, 0x05fdf7fc, 0x40041800,
- 0x801021c0, 0x05000004, 0x900c1ca0, 0x80102040,
- 0x05fe07fe, 0x60042000, 0x800c19c0, 0x05000004,
- 0x801020c2, 0x800c1840, 0x05fe07fe, 0x80083c00,
- 0x91cc2c07, 0x80142c00, 0x50140000, 0x80102d00,
- 0x05020011, 0x80100540, 0x44003800, 0x82042400,
- 0x00101a23, 0x50102800, 0x82142d00, 0x000000ff,
- 0x4817500f, 0x4c040000, 0x40140800, 0x05edfdb1,
- 0x5c000800, 0x59a80015, 0x84000540, 0x48035015,
- 0x80000580, 0x1c01f000, 0x4807c856, 0x605c1100,
- 0x59a81832, 0x0529fbd4, 0x05fdf826, 0x1c01f000,
- 0x4807c856, 0x6080b000, 0x91cca407, 0x4200a800,
- 0x00109953, 0x0529f4c7, 0x4807c856, 0x050dff02,
- 0x61dc0801, 0x0501f8d5, 0x497b2804, 0x497b2805,
- 0x497b2826, 0x497b2827, 0x6006d800, 0x42006000,
- 0xbe7fffff, 0x42006800, 0x00018000, 0x0501f92d,
- 0x42006000, 0xfffeffff, 0x41786800, 0x0501f929,
- 0x497b5032, 0x60b40800, 0x42001000, 0x00103637,
- 0x050df036, 0x4807c856, 0x05fdffe8, 0x497b5010,
- 0x497b5073, 0x1c01f000, 0x4807c856, 0x42006000,
- 0xffffffff, 0x60a06800, 0x0501f11a, 0x4807c856,
- 0x05fdffd2, 0x050dfbfe, 0x4df00000, 0x050dfe21,
- 0x5c03e000, 0x050c0be6, 0x59c400a4, 0x9000050f,
- 0x90000582, 0x0502000a, 0x42006000, 0xffffffff,
- 0x42006800, 0x00200000, 0x0501f90a, 0x42006000,
- 0xffdfffff, 0x41786800, 0x0501f906, 0x497b5010,
- 0x61dc0801, 0x0501f8a1, 0x59c400a3, 0x82000500,
- 0xbf20bfff, 0x82000540, 0x0001c000, 0x480388a3,
- 0x84000520, 0x480388a3, 0x497b5032, 0x60b40800,
- 0x42001000, 0x00103637, 0x050df008, 0x497b5073,
- 0x59b400f5, 0x8c000500, 0x05020003, 0x90000541,
- 0x480368f5, 0x800400c4, 0x82000400, 0x00002000,
- 0x4803910a, 0x59b400f6, 0x90000518, 0x05fe07fe,
- 0x4a0368f0, 0x001094fb, 0x42000000, 0x00109502,
- 0x4c040000, 0x40043800, 0x50000800, 0x82040d80,
- 0x11010000, 0x0500000c, 0x50000800, 0x4807c857,
- 0x8d0c052a, 0x05000008, 0x4c000000, 0x821c3d40,
- 0x0000dc00, 0x42000000, 0x001094fc, 0x05e5fcf0,
- 0x5c000000, 0x5c000800, 0x480368f1, 0x82040400,
- 0x0000dc00, 0x480368f3, 0x59c400a4, 0x9000050f,
- 0x90000588, 0x05020013, 0x4c5c0000, 0x4c600000,
- 0x59c4b805, 0x8c5c053a, 0x05020004, 0x42000000,
- 0x001097c3, 0x0529fb4a, 0x4a038805, 0x20000000,
- 0x05f1f89e, 0x4000c000, 0x05f1f819, 0x6006d800,
- 0x497b5010, 0x5c00c000, 0x5c00b800, 0x1c01f000,
- 0x59c8010b, 0x8c000502, 0x05fc07e8, 0x59c408a4,
- 0x90040d0f, 0x90040d8b, 0x05020005, 0x59a80810,
- 0x82040d40, 0x00002000, 0x0501f004, 0x59a8086e,
- 0x82040d40, 0x00001000, 0x48075032, 0x59a80877,
- 0x800409c0, 0x05020005, 0x6140080f, 0x42001000,
- 0x001035bf, 0x050df8f7, 0x1c01f000, 0x4807c856,
- 0x05fdff5a, 0x050dfb86, 0x4df00000, 0x050dfda9,
- 0x5c03e000, 0x050c0b6e, 0x59c400a4, 0x9000050f,
- 0x90000582, 0x0502000a, 0x42006000, 0xffffffff,
- 0x42006800, 0x00200000, 0x0501f892, 0x42006000,
- 0xffdfffff, 0x41786800, 0x0501f88e, 0x0505fad4,
- 0x05000010, 0x0505fae8, 0x0502000e, 0x4a035013,
- 0x0000aaaa, 0x4c040000, 0x05edfd1d, 0x59a8001f,
- 0x82000500, 0xffff0000, 0x80040540, 0x4803501f,
- 0x5c000800, 0x64035014, 0x0505fa38, 0x0501f005,
- 0x64175071, 0x60000001, 0x05edfc7c, 0x05fdff3f,
- 0x1c01f000, 0x0501f809, 0x42006000, 0xbf7f7fff,
- 0x41786800, 0x0501f073, 0x42006000, 0xbf7f7fff,
- 0x41786800, 0x0501f06f, 0x0505facb, 0x05020009,
- 0x59c40006, 0x82000540, 0x000000f0, 0x48038806,
- 0x42006000, 0xbfffffff, 0x41786800, 0x0501f865,
- 0x1c01f000, 0x40680800, 0x800408d0, 0x59a80015,
- 0x8c000506, 0x05000006, 0x59a8000f, 0x82000500,
- 0x000000ff, 0x80040540, 0x0501f003, 0x82040540,
- 0x000000f7, 0x480388a7, 0x1c01f000, 0x4807c856,
- 0x42000000, 0x0010985b, 0x0529fad9, 0x60143000,
- 0x4d3c0000, 0x4c180000, 0x60343000, 0x600a7800,
- 0x0501f028, 0x4807c856, 0x42000000, 0x00109880,
- 0x0529facf, 0x60003000, 0x4d3c0000, 0x4c180000,
- 0x603c3000, 0x600a7800, 0x0501f01e, 0x4807c856,
- 0x42000000, 0x0010987e, 0x0529fac5, 0x600c3000,
- 0x4d3c0000, 0x4c180000, 0x60383000, 0x600a7804,
- 0x0501f014, 0x4807c856, 0x42000000, 0x0010987d,
- 0x0529fabb, 0x60103000, 0x4d3c0000, 0x4c180000,
- 0x60403000, 0x600a7804, 0x0501f00a, 0x4807c856,
- 0x42000000, 0x001097c5, 0x0529fab1, 0x60043000,
- 0x4d3c0000, 0x4c180000, 0x60303000, 0x600a7800,
- 0x61fc19ff, 0x601c2000, 0x05f9ff78, 0x5c003000,
- 0x4d400000, 0x0529f91c, 0x60aa8000, 0x0201f800,
- 0x0010b5e0, 0x5c028000, 0x5c027800, 0x1c01f000,
- 0x4807c856, 0x05011000, 0x4a03c840, 0x001094fb,
- 0x6503c842, 0x40000000, 0x05fd17ff, 0x42007800,
- 0x001094fb, 0x64447800, 0x803c7800, 0x4a007800,
- 0x220000ef, 0x4a007801, 0x000000ef, 0x4a007802,
- 0x01380000, 0x64007803, 0x4a007804, 0xffffffff,
- 0x64007805, 0x1c01f000, 0x40686000, 0x406c6800,
- 0x59c400a3, 0x80300500, 0x80340540, 0x480388a3,
- 0x1c01f000, 0x40686000, 0x4833c857, 0x59c400a3,
- 0x80300540, 0x480388a3, 0x80300580, 0x480388a3,
- 0x1c01f000, 0x4803c856, 0x05000003, 0x64075078,
- 0x0501f002, 0x497b5078, 0x1c01f000, 0x59c80002,
- 0x80000540, 0x05000009, 0x80000040, 0x05000007,
- 0x4a039005, 0x00000140, 0x60180000, 0x80000040,
- 0x05fe07ff, 0x05fdf7f6, 0x1c01f000, 0x4c5c0000,
- 0x4c600000, 0x59c4b805, 0x485fc856, 0x8c5c053a,
- 0x05020004, 0x42000000, 0x001097c3, 0x0529fa60,
- 0x4a038805, 0x20000000, 0x05edffb4, 0x4000c000,
- 0x05edff2f, 0x4a038805, 0x04000000, 0x5c00c000,
- 0x5c00b800, 0x1c01f000, 0x497a6a00, 0x4a026c00,
- 0x00000707, 0x497a6801, 0x497a6808, 0x497a6809,
- 0x497a6806, 0x497a6807, 0x497a6c0b, 0x497a680c,
- 0x8d0c0520, 0x05020005, 0x5934080f, 0x59340010,
- 0x80040540, 0x05e60acd, 0x4a026a04, 0x00000100,
- 0x497a6a03, 0x59340402, 0x82000500, 0x000000ff,
- 0x48026c02, 0x497a6c04, 0x497a6a05, 0x497a6c05,
- 0x497a6811, 0x4d2c0000, 0x5934000d, 0x49466c03,
- 0x80025d40, 0x05000003, 0x05e5fe57, 0x497a680d,
- 0x5c025800, 0x599c0401, 0x48026a0b, 0x599c0208,
- 0x48026c12, 0x4a02680a, 0x00008000, 0x0501f752,
- 0x60140000, 0x80000d80, 0x0501f024, 0x0501fd41,
- 0x05020013, 0x59a8021b, 0x8c00050a, 0x0502000d,
- 0x59340212, 0x82000500, 0x0000ff00, 0x4803c857,
- 0x05000008, 0x59340a00, 0x8c04051e, 0x0000028a,
- 0x60a40000, 0x60000820, 0x492fc857, 0x0501f013,
- 0x492fc857, 0x60a00000, 0x0501f00e, 0x8d0c0502,
- 0x05020003, 0x8d0c0500, 0x05000003, 0x60100000,
- 0x0501f008, 0x60a40000, 0x59340a00, 0x8c04051e,
- 0x05000004, 0x492fc857, 0x60000820, 0x0501f003,
- 0x492fc857, 0x80000d80, 0x4803c857, 0x80028540,
- 0x1c01f000, 0x490fc857, 0x8d0c0500, 0x05fe07f0,
- 0x0501fcec, 0x05fe07ea, 0x59340200, 0x8c00050e,
- 0x05fc07e7, 0x0001f28a, 0x4d480000, 0x4d4c0000,
- 0x592e9009, 0x592e980a, 0x0501fbea, 0x5c029800,
- 0x5c029000, 0x05fc07c7, 0x0001f28d, 0x492fc857,
- 0x592e8c07, 0x83440d80, 0x000007fc, 0x05000004,
- 0x83440480, 0x000007f0, 0x05021010, 0x0001fac4,
- 0x0502000e, 0x0501fce4, 0x0502000e, 0x0511ff08,
- 0x05000015, 0x59340002, 0x4802600b, 0x4936600a,
- 0x492e6009, 0x642a6407, 0x61027000, 0x0005f905,
- 0x80000580, 0x0501f00b, 0x60a00000, 0x0501f008,
- 0x0501fcf0, 0x05fc07fd, 0x910c0d03, 0x05000003,
- 0x60100000, 0x0501f002, 0x60a40000, 0x80000540,
- 0x1c01f000, 0x60b00000, 0x05fdf7fd, 0x492fc857,
- 0x592e8c07, 0x4947c857, 0x83440c80, 0x00000800,
- 0x60280000, 0x0502114b, 0x592c4208, 0x4823c857,
- 0x9020050f, 0x0c01f001, 0x001037b1, 0x00103821,
- 0x00103862, 0x0010386a, 0x00103872, 0x001037ae,
- 0x001037ae, 0x001037ae, 0x0010387c, 0x001038c7,
- 0x001038e3, 0x001037ae, 0x001037ae, 0x001037ae,
- 0x001037ae, 0x001037ae, 0x4803c857, 0x60300000,
- 0x0501f134, 0x592c1009, 0x82081500, 0x00ffffff,
- 0x59a8000f, 0x80084d80, 0x60400000, 0x0500012d,
- 0x0501fc33, 0x0500002b, 0x4803c857, 0x90004d9d,
- 0x05020016, 0x0505ffd3, 0x59340405, 0x4c000000,
- 0x0501fc8c, 0x5c000000, 0x05000004, 0x8c20050a,
- 0x05000020, 0x80000580, 0x44002800, 0x59340008,
- 0x48002802, 0x59340009, 0x48002801, 0x59340006,
- 0x48002804, 0x59340007, 0x48002803, 0x6014b000,
- 0x051dfe24, 0x0501f136, 0x4803c857, 0x90004d9a,
- 0x05020003, 0x40101000, 0x0501f113, 0x4803c857,
- 0x90004d9b, 0x05020003, 0x40181000, 0x0501f10e,
- 0x4803c857, 0x90004d9c, 0x0500010f, 0x90004d99,
- 0x60280000, 0x05000103, 0x60280000, 0x05020114,
- 0x59a80086, 0x8c000502, 0x05000016, 0x0501fc65,
- 0x05000014, 0x59340212, 0x82000500, 0x0000ff00,
- 0x60401000, 0x0502000b, 0x60201000, 0x59a8021b,
- 0x8c000506, 0x05020008, 0x59340002, 0x82000500,
- 0x00ff0000, 0x82000580, 0x00ff0000, 0x05000005,
- 0x0501fe94, 0x60700000, 0x40181000, 0x050200ee,
- 0x0511fe87, 0x050000f6, 0x4936600a, 0x492e6009,
- 0x64066407, 0x8c20050a, 0x05000004, 0x592c0405,
- 0x8400055c, 0x48025c05, 0x4c200000, 0x4d3c0000,
- 0x60027830, 0x0201f800, 0x0010b660, 0x5c027800,
- 0x5c004000, 0x8c200512, 0x0500000b, 0x599c0018,
- 0x8c000518, 0x05000008, 0x592c000a, 0x82000500,
- 0x00000380, 0x5934080a, 0x80040d40, 0x84040d54,
- 0x4806680a, 0x417a7800, 0x0501f8f1, 0x600c0800,
- 0x0501f8fa, 0x600a7000, 0x0005f905, 0x80000580,
- 0x0501f0ea, 0x0001fac4, 0x050200d5, 0x0501fc2f,
- 0x05000009, 0x0501fc27, 0x050200d5, 0x4c600000,
- 0x4178c000, 0x60027830, 0x417a6000, 0x05f1f98e,
- 0x5c00c000, 0x59a80086, 0x8c000502, 0x05000016,
- 0x0501fc1c, 0x05000014, 0x59340212, 0x82000500,
- 0x0000ff00, 0x60401000, 0x0502000b, 0x60201000,
- 0x59a8021b, 0x8c000506, 0x05020008, 0x59340002,
- 0x82000500, 0x00ff0000, 0x82000580, 0x00ff0000,
- 0x05000005, 0x0501fe4b, 0x60700000, 0x40181000,
- 0x050200a5, 0x0511fe3e, 0x050000ad, 0x5934080a,
- 0x8c200512, 0x0500000c, 0x599c0018, 0x8c000518,
- 0x05000009, 0x592c000a, 0x82000500, 0x00000380,
- 0x82041500, 0xfffffc7f, 0x80080d40, 0x84040d54,
- 0x0501f002, 0x84040d14, 0x4806680a, 0x4936600a,
- 0x492e6009, 0x64066407, 0x417a7800, 0x0501f8b0,
- 0x60140800, 0x0501f8b9, 0x600e7000, 0x0005f905,
- 0x80000580, 0x0501f0a9, 0x0001fac4, 0x05020094,
- 0x0501fc02, 0x05020096, 0x051dfd5d, 0x0500008c,
- 0x80000580, 0x0501f0a1, 0x0001fac4, 0x0502008c,
- 0x0501fbfa, 0x0502008e, 0x051df9a7, 0x05000084,
- 0x80000580, 0x0501f099, 0x0001fac4, 0x05020084,
- 0x83444d80, 0x000007fe, 0x60280000, 0x0502006d,
- 0x051dfd5d, 0x0500007a, 0x80000580, 0x0501f08f,
- 0xb0200530, 0x05020004, 0x8c20050e, 0x60300000,
- 0x05020064, 0x8c20050a, 0x0500000c, 0x4d3c0000,
- 0x600278a0, 0x8c20050e, 0x05020003, 0x853e7d56,
- 0x853e7d1c, 0x82200500, 0x000004a0, 0x0501fb90,
- 0x5c027800, 0x0501f07a, 0x8c200508, 0x0502001c,
- 0x592c1009, 0x82081500, 0x00ffffff, 0x59a8000f,
- 0x80084d80, 0x60400000, 0x0500004e, 0x0501fb54,
- 0x05000022, 0x4803c857, 0x90004d9a, 0x05020003,
- 0x40101000, 0x0501f04c, 0x4803c857, 0x90004d9b,
- 0x05020003, 0x40181000, 0x0501f047, 0x4803c857,
- 0x90004d9c, 0x05000048, 0x90004d99, 0x60280000,
- 0x0500003c, 0x60280000, 0x0501f04d, 0x0001fac4,
- 0x0502004b, 0x4d3c0000, 0x600278a0, 0x8c20050e,
- 0x05020003, 0x853e7d56, 0x853e7d1c, 0x82200500,
- 0x00000090, 0x0501fb52, 0x5c027800, 0x60280000,
- 0x0502002c, 0x0501f04e, 0x916c0583, 0x601c0800,
- 0x05020005, 0x051dfcc4, 0x05000006, 0x80000580,
- 0x0501f04a, 0x0501fbce, 0x05000042, 0x0501f044,
- 0x0501fbcb, 0x0500002e, 0x0501f041, 0x0001fac4,
- 0x0502002f, 0x916c0583, 0x05020036, 0x8c200508,
- 0x05000008, 0x4c600000, 0x4178c000, 0x60027830,
- 0x417a6000, 0x05f1f8e8, 0x5c00c000, 0x0501f034,
- 0x0501fb7e, 0x05000009, 0x0501fb76, 0x05020024,
- 0x4c600000, 0x4178c000, 0x60027830, 0x417a6000,
- 0x05f1f8dd, 0x5c00c000, 0x480bc856, 0x051dfb4f,
- 0x05000013, 0x80000580, 0x0501f028, 0x05fdf7e4,
- 0x480bc857, 0x60640800, 0x40001000, 0x6008b000,
- 0x0501f008, 0x480bc857, 0x40000800, 0x6008b000,
- 0x0501f004, 0x480bc857, 0x40000800, 0x6004b000,
- 0x480bc857, 0x60c68000, 0x0501f017, 0x480bc857,
- 0x600c0800, 0x6004b000, 0x05fdf7fa, 0x480bc857,
- 0x60280800, 0x6004b000, 0x05fdf7f6, 0x480bc857,
- 0x60240800, 0x40001000, 0x6008b000, 0x05fdf7f1,
- 0x480bc857, 0x601c0800, 0x6004b000, 0x05fdf7ed,
- 0x480bc857, 0x6004b000, 0x05fdf7ea, 0x80028580,
- 0x4178b000, 0x90000541, 0x1c01f000, 0x4937c857,
- 0x5932680a, 0x59341200, 0x813e79c0, 0x05000003,
- 0x84081540, 0x0501f002, 0x84081500, 0x480a6a00,
- 0x1c01f000, 0x40680800, 0x5932680a, 0x5c000000,
- 0x4c000000, 0x4803c857, 0x4937c857, 0x83340580,
- 0x0010993e, 0x0500001f, 0x90040586, 0x05020003,
- 0x6018000c, 0x0501f014, 0x90040584, 0x05020003,
- 0x60100008, 0x0501f010, 0x90040587, 0x601c000e,
- 0x0500000d, 0x90040583, 0x600c000e, 0x0500000a,
- 0x90040585, 0x60140008, 0x05000007, 0x90040589,
- 0x60240008, 0x05000004, 0x9004058b, 0x602c000e,
- 0x05e608b2, 0x4803c857, 0x48026c00, 0x90040d86,
- 0x05020004, 0x59341404, 0x800811c0, 0x05e408ab,
- 0x1c01f000, 0x40683000, 0x0501f80b, 0x41358800,
- 0x05000002, 0x41798800, 0x1c01f000, 0x40683000,
- 0x0501f80a, 0x41358800, 0x05000002, 0x41798800,
- 0x1c01f000, 0x5c000000, 0x4c000000, 0x4803c857,
- 0x4947c857, 0x481bc857, 0x83440480, 0x00000800,
- 0x05021037, 0x83441400, 0x00108c00, 0x50080000,
- 0x80026d40, 0x0502000f, 0x4c180000, 0x4d2c0000,
- 0x05e5fbfd, 0x412e6800, 0x5c025800, 0x5c003000,
- 0x0500002b, 0x45341000, 0x497a680d, 0x497a6810,
- 0x497a680f, 0x4c180000, 0x05fdfda8, 0x5c003000,
- 0x59340a12, 0x4c040000, 0x0501ffae, 0x5c000800,
- 0x05000009, 0x82180500, 0x00ffff00, 0x05000008,
- 0x59a8100f, 0x82081500, 0x00ffff00, 0x80080580,
- 0x05000003, 0x80000580, 0x0501f004, 0x82180500,
- 0x000000ff, 0x800000d0, 0x80040d80, 0x05000003,
- 0x4803c857, 0x48026a12, 0x83440580, 0x000007fe,
- 0x05020004, 0x4a026802, 0x00fffffe, 0x0501f006,
- 0x59340002, 0x80180580, 0x05000003, 0x481bc857,
- 0x481a6802, 0x80000580, 0x1c01f000, 0x4803c856,
- 0x90000541, 0x05fdf7fd, 0x0501f805, 0x60058800,
- 0x05020002, 0x60018800, 0x1c01f000, 0x4947c857,
- 0x83440480, 0x00000800, 0x0502100f, 0x83441400,
- 0x00108c00, 0x50080000, 0x80026d40, 0x05000009,
- 0x0501fab4, 0x05020008, 0x8d0c0502, 0x05000004,
- 0x59340200, 0x8c00050e, 0x05000003, 0x90000541,
- 0x1c01f000, 0x80000580, 0x05fdf7fe, 0x5c000000,
- 0x4c000000, 0x4803c857, 0x4947c857, 0x0501f805,
- 0x60058800, 0x05000002, 0x60018800, 0x1c01f000,
- 0x4d2c0000, 0x4d300000, 0x83440480, 0x00000800,
- 0x0502101d, 0x83441400, 0x00108c00, 0x50080000,
- 0x80026d40, 0x05000014, 0x45781000, 0x5934000d,
- 0x80025d40, 0x05e60bc8, 0x59366011, 0x813261c0,
- 0x0500000a, 0x4c640000, 0x5930c800, 0x59325809,
- 0x0519ffba, 0x05e60bc0, 0x0005f8e7, 0x90666540,
- 0x05fe07fa, 0x5c00c800, 0x0501fcbf, 0x41365800,
- 0x05e5fbb1, 0x80000580, 0x5c026000, 0x5c025800,
- 0x1c01f000, 0x90000541, 0x05fdf7fc, 0x0001fac4,
- 0x41358800, 0x05000002, 0x41798800, 0x1c01f000,
- 0x4c580000, 0x59cc0001, 0x4937c857, 0x82000500,
- 0x00ffffff, 0x48026802, 0x497a6c01, 0x497a6a01,
- 0x59340200, 0x82000500, 0xffffdffd, 0x48026a00,
- 0x0501ff34, 0x05020018, 0x59340403, 0x82000580,
- 0x000007fe, 0x05000005, 0x59a8021b, 0x8c00050a,
- 0x05020011, 0x0501f008, 0x59cc0408, 0x8c000518,
- 0x0500000d, 0x59cc0009, 0x48035028, 0x59cc000a,
- 0x48035029, 0x59cc0207, 0x80000540, 0x05020002,
- 0x60040000, 0x48038893, 0x48035012, 0x84000560,
- 0x480388b3, 0x59cc0a09, 0x90040d10, 0x59cc0408,
- 0x90000520, 0x05000005, 0x84040d40, 0x59a8121b,
- 0x8408155a, 0x480b521b, 0x5934000a, 0x82000500,
- 0xffffffee, 0x80040540, 0x4802680a, 0x91cca40b,
- 0x9134ac06, 0x6008b000, 0x0529f81f, 0x91cca40d,
- 0x9134ac08, 0x6008b000, 0x0529f81b, 0x59cc0a18,
- 0x59a80006, 0x8c00050c, 0x05020013, 0x82040480,
- 0x00000800, 0x0502100a, 0x82040480, 0x00000400,
- 0x05001003, 0x60000808, 0x0501f005, 0x82040480,
- 0x00000200, 0x05001002, 0x60000804, 0x42001000,
- 0x001094f1, 0x58080201, 0x80041480, 0x05001002,
- 0x40000800, 0x48066a04, 0x59340403, 0x82000580,
- 0x000007fe, 0x05020003, 0x59cc0a08, 0x48066a04,
- 0x0501fc7f, 0x5c00b000, 0x1c01f000, 0x59a8021b,
- 0x4937c857, 0x8c000508, 0x05000007, 0x84000556,
- 0x4803c857, 0x4803521b, 0x42001000, 0x0010c159,
- 0x0509fbd5, 0x59cc0207, 0x4803c857, 0x48026a05,
- 0x59cc020a, 0x4803c857, 0x48026c05, 0x59341200,
- 0x599c0818, 0x5934180a, 0x4807c857, 0x480bc857,
- 0x480fc857, 0x59cc2006, 0x82102500, 0xff000000,
- 0x82102580, 0x02000000, 0x05000007, 0x8c00050e,
- 0x05000009, 0x8c0c0514, 0x05000003, 0x8c0c050e,
- 0x05000005, 0x8c040518, 0x05000003, 0x8408154a,
- 0x0501f002, 0x8408150a, 0x8c000510, 0x05000009,
- 0x8c0c0514, 0x05000003, 0x8c0c0510, 0x05000005,
- 0x8c040518, 0x05000003, 0x8408154e, 0x0501f002,
- 0x8408150e, 0x8c000512, 0x05000009, 0x8c0c0514,
- 0x05000003, 0x8c0c0512, 0x05000005, 0x8c040518,
- 0x05000003, 0x8408155c, 0x0501f002, 0x8408151c,
- 0x480a6a00, 0x1c01f000, 0x4803c856, 0x4c5c0000,
- 0x4d2c0000, 0x4c580000, 0x5934000d, 0x80025d40,
- 0x05000023, 0x592c0003, 0x90000488, 0x0500100a,
- 0x412cb800, 0x592c0001, 0x80025d40, 0x05fe07fa,
- 0x05e5faec, 0x0500002e, 0x492fc857, 0x492cb801,
- 0x0501f01b, 0x912c0c04, 0x6020b000, 0x50040000,
- 0x82000580, 0xffffffff, 0x05020006, 0x80041000,
- 0x50080000, 0x82000580, 0xffffffff, 0x05000005,
- 0x90040c02, 0x8058b040, 0x05fe07f5, 0x05e1ff57,
- 0x45480800, 0x454c1000, 0x592c1803, 0x800c1800,
- 0x480e5803, 0x480fc857, 0x0501f010, 0x05e5fad1,
- 0x05000013, 0x492fc857, 0x492e680d, 0x497a5802,
- 0x64065803, 0x494a5804, 0x494e5805, 0x912c0c06,
- 0x6038b000, 0x46000800, 0xffffffff, 0x80040800,
- 0x8058b040, 0x05fe07fc, 0x90000541, 0x5c00b000,
- 0x5c025800, 0x5c00b800, 0x1c01f000, 0x80000580,
- 0x05fdf7fb, 0x4803c856, 0x4d3c0000, 0x4d2c0000,
- 0x5934000d, 0x80025d40, 0x0500001c, 0x592c0002,
- 0x80000540, 0x0502001c, 0x412e7800, 0x0501f89d,
- 0x05020019, 0x46000800, 0xffffffff, 0x46001000,
- 0xffffffff, 0x4813c857, 0x480fc857, 0x580c0003,
- 0x90000c82, 0x05021012, 0x480fc857, 0x400c0000,
- 0x812c0580, 0x05020004, 0x580c0001, 0x4802680d,
- 0x0501f003, 0x580c0001, 0x48002001, 0x400e5800,
- 0x05e5faac, 0x90000541, 0x5c025800, 0x5c027800,
- 0x1c01f000, 0x80000580, 0x05fdf7fc, 0x80000040,
- 0x48001803, 0x4803c857, 0x05fdf7f7, 0x64225a07,
- 0x0001f32c, 0x64a65a07, 0x0001f32c, 0x64aa5a07,
- 0x0001f32c, 0x64a25a07, 0x0001f32c, 0x643a5a07,
- 0x0001f32c, 0x4943c857, 0x4d440000, 0x4d340000,
- 0x4d2c0000, 0x4c580000, 0x61c0b00f, 0x417a8800,
- 0x0001fac4, 0x05020007, 0x8d3c0506, 0x05000004,
- 0x59340200, 0x8c00050e, 0x05020002, 0x0501f811,
- 0x81468800, 0x8058b040, 0x05fe07f6, 0x83440480,
- 0x00000800, 0x05021006, 0x8d3c0502, 0x05000004,
- 0x61c2880f, 0x6040b000, 0x05fdf7ee, 0x5c00b000,
- 0x5c025800, 0x5c026800, 0x5c028800, 0x1c01f000,
- 0x4d2c0000, 0x4c600000, 0x4c5c0000, 0x4178b800,
- 0x5936580f, 0x812e59c0, 0x05000026, 0x592c0205,
- 0x82000500, 0x000000ff, 0x90000592, 0x0500001e,
- 0x8d3c0500, 0x05000003, 0x0501f840, 0x0502001a,
- 0x592cc000, 0x497a5800, 0x805cb9c0, 0x05020009,
- 0x59340010, 0x812c0580, 0x05020004, 0x497a680f,
- 0x497a6810, 0x0501f008, 0x4862680f, 0x0501f006,
- 0x4860b800, 0x59340010, 0x812c0580, 0x05020002,
- 0x485e6810, 0x4a025a05, 0x00000103, 0x49425a07,
- 0x497a580a, 0x0519ffa2, 0x0001fb2c, 0x40625800,
- 0x05fdf7dd, 0x412cb800, 0x592e5800, 0x05fdf7da,
- 0x5c00b800, 0x5c00c000, 0x5c025800, 0x1c01f000,
- 0x4803c856, 0x41781800, 0x5934000f, 0x80025d40,
- 0x05000014, 0x592c0006, 0x80200580, 0x592c0000,
- 0x05000003, 0x412c1800, 0x05fdf7f9, 0x592c0a05,
- 0x82040d00, 0x000000ff, 0x90040d92, 0x05fc07fa,
- 0x497a5800, 0x800c19c0, 0x05000007, 0x48001800,
- 0x80000540, 0x05020003, 0x480e6810, 0x90000541,
- 0x1c01f000, 0x4802680f, 0x80000540, 0x05fe07fd,
- 0x497a6810, 0x05fdf7fa, 0x592c0009, 0x81480580,
- 0x05020003, 0x592c000a, 0x814c0580, 0x1c01f000,
- 0x4803c856, 0x4c580000, 0x413c1800, 0x400c2000,
- 0x593c0002, 0x80000540, 0x05020014, 0x6020b000,
- 0x900c0c04, 0x50040000, 0x81480580, 0x05020005,
- 0x80041000, 0x50080000, 0x814c0580, 0x0500000b,
- 0x90040c02, 0x8058b040, 0x05fe07f7, 0x400c2000,
- 0x580c0001, 0x80001d40, 0x05fe07f1, 0x90000541,
- 0x5c00b000, 0x1c01f000, 0x80000580, 0x05fdf7fd,
- 0x4937c857, 0x4c580000, 0x4d2c0000, 0x5934000d,
- 0x80025d40, 0x05020011, 0x05e5f9f2, 0x0500000c,
- 0x492e680d, 0x64065802, 0x497a5803, 0x912c0c04,
- 0x6040b000, 0x46000800, 0xffffffff, 0x80040800,
- 0x8058b040, 0x05fe07fc, 0x90000541, 0x5c025800,
- 0x5c00b000, 0x1c01f000, 0x4d2c0000, 0x592e5801,
- 0x05e5f9f9, 0x5c025800, 0x497a5801, 0x05fdf7ee,
- 0x4d2c0000, 0x5936580d, 0x812e59c0, 0x05000005,
- 0x4937c857, 0x497a680d, 0x05e5f9ef, 0x90000541,
- 0x5c025800, 0x1c01f000, 0x59340405, 0x4937c857,
- 0x4803c857, 0x8c000508, 0x1c01f000, 0x4933c857,
- 0x5930380a, 0x581c0200, 0x8400051a, 0x48003a00,
- 0x1c01f000, 0x0501f805, 0x60058800, 0x05020002,
- 0x60018800, 0x1c01f000, 0x5930000a, 0x50000000,
- 0x4933c857, 0x4803c857, 0x8c00050e, 0x1c01f000,
- 0x5930000a, 0x50000000, 0x8c00050a, 0x1c01f000,
- 0x0501f805, 0x60058800, 0x05000002, 0x60018800,
- 0x1c01f000, 0x4933c856, 0x0501f8a7, 0x05000005,
- 0x59340400, 0x82000d00, 0x000000ff, 0x90041585,
- 0x1c01f000, 0x0501f805, 0x60058800, 0x05020002,
- 0x60018800, 0x1c01f000, 0x4d340000, 0x83ac0400,
- 0x000007fe, 0x50000000, 0x80026d40, 0x05000003,
- 0x59340200, 0x8c00051a, 0x5c026800, 0x1c01f000,
- 0x4937c857, 0x493fc857, 0x59340403, 0x81ac0400,
- 0x50000000, 0x81340580, 0x05e20e14, 0x59341200,
- 0x813e79c0, 0x05000003, 0x8408155e, 0x0501f002,
- 0x8408151e, 0x480a6a00, 0x1c01f000, 0x4937c857,
- 0x05edfe43, 0x05000005, 0x59a80828, 0x42001000,
- 0x00103be3, 0x0509fb4b, 0x1c01f000, 0x4937c857,
- 0x42001000, 0x00103be3, 0x0509fa27, 0x59a8121b,
- 0x84081512, 0x480b521b, 0x1c01f000, 0x4008d000,
- 0x4020d800, 0x909d3c84, 0x409ce000, 0x0201f800,
- 0x0010c253, 0x589c0000, 0x589c2001, 0x589c2802,
- 0x589c3003, 0x909d3c04, 0x800001c0, 0x1c01f000,
- 0x4d340000, 0x406a6800, 0x0501f803, 0x5c026800,
- 0x1c01f000, 0x5934000f, 0x8d0c0512, 0x05020005,
- 0x5934140b, 0x80081040, 0x05001002, 0x480a6c0b,
- 0x80000540, 0x00020ad1, 0x1c01f000, 0x4803c857,
- 0x4947c857, 0x4c300000, 0x90006530, 0x05000005,
- 0x4c000000, 0x051df8f0, 0x5c000000, 0x0502000a,
- 0x8c00050e, 0x05000005, 0x0001fac4, 0x05020006,
- 0x4937c857, 0x05fdfd8e, 0x80000580, 0x5c006000,
- 0x1c01f000, 0x90000541, 0x05fdf7fd, 0x4803c857,
- 0x4c580000, 0x4d440000, 0x40001000, 0x80000d80,
- 0x61c0b00f, 0x4c040000, 0x40068800, 0x4c080000,
- 0x40080000, 0x05fdffe4, 0x5c001000, 0x5c000800,
- 0x80040800, 0x8058b040, 0x05fe07f7, 0x8c080514,
- 0x05000005, 0x84081514, 0x6004b000, 0x61f0080f,
- 0x05fdf7f1, 0x4d300000, 0x4d400000, 0x0501fad3,
- 0x61fe89ff, 0x42026000, 0x0010cc6c, 0x4a02600a,
- 0x0010993e, 0x60a68000, 0x0509fd85, 0x4df00000,
- 0x0201f800, 0x0010bb9e, 0x0201f800, 0x0010c0ee,
- 0x5c03e000, 0x05080d6a, 0x5c028000, 0x5c026000,
- 0x5c028800, 0x5c00b000, 0x1c01f000, 0x0501f805,
- 0x60058800, 0x05000002, 0x60018800, 0x1c01f000,
- 0x4c5c0000, 0x59340400, 0x8200bd80, 0x00000606,
- 0x5c00b800, 0x1c01f000, 0x4c5c0000, 0x59340400,
- 0x8200bd80, 0x00000404, 0x5c00b800, 0x1c01f000,
- 0x0501f805, 0x60058800, 0x05000002, 0x60018800,
- 0x1c01f000, 0x4c5c0000, 0x59340400, 0x8200bd80,
- 0x00000404, 0x05000003, 0x8200bd80, 0x00000606,
- 0x5c00b800, 0x1c01f000, 0x4c5c0000, 0x4c600000,
- 0x59340400, 0x8200bd00, 0x0000ff00, 0x825cc580,
- 0x00000400, 0x05000003, 0x825cc580, 0x00000600,
- 0x5c00c000, 0x5c00b800, 0x1c01f000, 0x0501f805,
- 0x60058800, 0x05000002, 0x60018800, 0x1c01f000,
- 0x4c5c0000, 0x59340400, 0x82000500, 0x000000ff,
- 0x9000bd83, 0x05000002, 0x9000bd85, 0x5c00b800,
- 0x1c01f000, 0x5c000000, 0x4c000000, 0x4803c857,
- 0x4c5c0000, 0x59340400, 0x82000500, 0x0000ff00,
- 0x8400b9c0, 0x805c0580, 0x4937c857, 0x4803c857,
- 0x48026c00, 0x5c00b800, 0x1c01f000, 0x4c040000,
- 0x4c080000, 0x592c0208, 0x8c00050c, 0x0500000d,
- 0x592e8c07, 0x82000500, 0x00000080, 0x84000548,
- 0x4d3c0000, 0x60027820, 0x05fdff6d, 0x5c027800,
- 0x90000541, 0x5c001000, 0x5c000800, 0x1c01f000,
- 0x80000580, 0x05fdf7fc, 0x592c040c, 0x82000500,
- 0x0000e000, 0x82000580, 0x00006000, 0x0500001a,
- 0x916c0583, 0x05000011, 0x916c0582, 0x050200dc,
- 0x59a8021b, 0x90000d38, 0x05020005, 0x59a80813,
- 0x800409c0, 0x05000009, 0x0501f0d5, 0x90000d03,
- 0x90040d83, 0x050200d2, 0x90000d28, 0x05020003,
- 0x8c00050c, 0x050000ce, 0x592c100b, 0x82080500,
- 0xff000000, 0x050200b6, 0x59a8000f, 0x80080580,
- 0x050000b1, 0x592c0c0c, 0x82040d00, 0x0000e000,
- 0x82040480, 0x00008000, 0x050210af, 0x592e8c07,
- 0x83440480, 0x00000800, 0x05001015, 0x83440580,
- 0x0000ffff, 0x0502009c, 0x800409c0, 0x050200d0,
- 0x592c240a, 0x82100500, 0xffffff00, 0x0502009c,
- 0x480bc857, 0x4813c857, 0x592c000e, 0x82000480,
- 0x00000841, 0x0502109e, 0x614e7000, 0x0501fa2b,
- 0x42026800, 0x0010993e, 0x0501f077, 0x800409c0,
- 0x050200bf, 0x41784000, 0x05fdff09, 0x050200ac,
- 0x59342204, 0x592c000e, 0x80100480, 0x05001090,
- 0x614e7000, 0x592c240a, 0x82100500, 0xffffff00,
- 0x05020083, 0x4813c857, 0x592c000d, 0x800001c0,
- 0x05000063, 0x90100584, 0x0500007b, 0xb0100591,
- 0x05000079, 0x90100583, 0x0500000f, 0x901005a0,
- 0x05000038, 0x901005a4, 0x05000032, 0x901005a1,
- 0x05000032, 0xb0100590, 0x0500002a, 0xb0100592,
- 0x05000026, 0x90100585, 0x05020053, 0x60067000,
- 0x0501f018, 0x600a7000, 0x59a80086, 0x8c000502,
- 0x05000014, 0x05fdff43, 0x05000012, 0x59340212,
- 0x82000500, 0x0000ff00, 0x60401000, 0x0502000b,
- 0x59a8021b, 0x8c000506, 0x05020057, 0x60201000,
- 0x59340002, 0x82000500, 0x00ff0000, 0x82000580,
- 0x00ff0000, 0x05000003, 0x0501f972, 0x0502004e,
- 0x0511f967, 0x05000060, 0x64426407, 0x4936600a,
- 0x600c0800, 0x91380582, 0x05000002, 0x602c0800,
- 0x05fdfbf2, 0x0501f034, 0x60027000, 0x0501f002,
- 0x60127000, 0x05fdff3d, 0x05020058, 0x0501f02a,
- 0x60ce7000, 0x0501f004, 0x60167000, 0x0501f002,
- 0x600e7000, 0x05fdff2c, 0x05020050, 0x59a80086,
- 0x8c000502, 0x05000014, 0x05fdff16, 0x05000012,
- 0x59340212, 0x82000500, 0x0000ff00, 0x60401000,
- 0x0502000b, 0x59a8021b, 0x8c000506, 0x0502002a,
- 0x60201000, 0x59340002, 0x82000500, 0x00ff0000,
- 0x82000580, 0x00ff0000, 0x05000003, 0x0501f945,
- 0x05020021, 0x0511f93a, 0x05000033, 0x64426407,
- 0x4936600a, 0x60140800, 0x91380583, 0x05000002,
- 0x60240800, 0x05fdfbc5, 0x0501f007, 0x90102591,
- 0x05020025, 0x0511f92e, 0x05000027, 0x64426407,
- 0x4936600a, 0x492e6009, 0x49325809, 0x83340580,
- 0x0010993e, 0x05000007, 0x592c0c0c, 0x8c040518,
- 0x05000004, 0x59340200, 0x84000514, 0x48026a00,
- 0x0005f905, 0x80000580, 0x1c01f000, 0x90000541,
- 0x05fdf7fe, 0x60281000, 0x0501f010, 0x60401000,
- 0x0501f00e, 0x60581000, 0x0501f00c, 0x605c1000,
- 0x0501f00a, 0x60601000, 0x0501f008, 0x606c1000,
- 0x0501f006, 0x60781000, 0x0501f004, 0x60901000,
- 0x0501f002, 0x60801000, 0x60640800, 0x60c68000,
- 0x05fdf7eb, 0x600c0800, 0x0501f002, 0x60280800,
- 0x41781000, 0x05fdf7fa, 0x60240800, 0x59341400,
- 0x05fdf7f7, 0x60228000, 0x0501f004, 0x601c0800,
- 0x416c1000, 0x05fdf7f2, 0x41780800, 0x41781000,
- 0x05fdf7db, 0x60028000, 0x05fdf7fc, 0x90004d9d,
- 0x05e00c56, 0x90004d9a, 0x05020004, 0x40101000,
- 0x40000800, 0x05fdf7e6, 0x90004d9b, 0x05020003,
- 0x40181000, 0x05fdf7fb, 0x90004d9c, 0x05fc07f9,
- 0x90004d99, 0x05fc07cc, 0x05fdf7e1, 0x592e6009,
- 0x0519ff51, 0x05fc07ca, 0x59300c07, 0x90040591,
- 0x05fe07e1, 0x592c0c0c, 0x82041500, 0x0000e000,
- 0x82080580, 0x00006000, 0x05000021, 0x83440580,
- 0x0000ffff, 0x05020007, 0x5932680a, 0x83340580,
- 0x0010993e, 0x05fe07d4, 0x61000810, 0x0501f00f,
- 0x592c100b, 0x82081500, 0x00ffffff, 0x41784000,
- 0x05fdfe33, 0x05fe07d6, 0x5930000a, 0x82000d80,
- 0x0010993e, 0x05000003, 0x81340580, 0x05fe07c6,
- 0x4936600a, 0x59340a04, 0x592c000e, 0x80040480,
- 0x05fc17b3, 0x59300a03, 0x90040587, 0x05fe07be,
- 0x492e6009, 0x61527000, 0x05fdf791, 0x0525f99f,
- 0x05fc07c1, 0x05fdf7b8, 0x492fc857, 0x592e6009,
- 0x83300580, 0xffffffff, 0x05020040, 0x592c0208,
- 0x8c000500, 0x0502006b, 0x8d0c050e, 0x05020058,
- 0x592e8c07, 0x83440480, 0x00000800, 0x05021035,
- 0x41784000, 0x592c100a, 0x82081500, 0x00ffffff,
- 0x05fdfe0b, 0x05020050, 0x592e6014, 0x4933c857,
- 0x83300580, 0xffffffff, 0x05000018, 0x0519ff0a,
- 0x05000032, 0x591c1407, 0x800811c0, 0x05000013,
- 0x592c040e, 0x591c0a02, 0x80040580, 0x0502000f,
- 0x591c000a, 0x800001c0, 0x05020007, 0x591c0820,
- 0x59340002, 0x80040580, 0x82000500, 0x00ffffff,
- 0x0501f002, 0x81340580, 0x05020004, 0x90080587,
- 0x05020031, 0x64923c03, 0x59a8000f, 0x592c100b,
- 0x82081500, 0x00ffffff, 0x80081580, 0x05020015,
- 0x592c080a, 0x82041500, 0x00ffffff, 0x80081580,
- 0x0500000c, 0x80040932, 0xb0040582, 0x0502000b,
- 0x49365803, 0x0501f8df, 0x80000580, 0x1c01f000,
- 0x60281000, 0x0501f00a, 0x60401000, 0x0501f008,
- 0x60501000, 0x0501f006, 0x605c1000, 0x0501f004,
- 0x60601000, 0x0501f002, 0x60f01000, 0x492fc857,
- 0x480bc857, 0x60640800, 0x60c68000, 0x90000541,
- 0x05fdf7ef, 0x492fc857, 0x4803c857, 0x480bc857,
- 0x40000800, 0x05fdf7f9, 0x492fc857, 0x60280800,
- 0x41781000, 0x05fdf7f5, 0x41780800, 0x41781000,
- 0x05fdf7f3, 0x60780800, 0x05fdf7fa, 0x60040800,
- 0x05fdf7f8, 0x90004d9d, 0x05e00bb4, 0x90004d9a,
- 0x05020003, 0x40101000, 0x05fdf7eb, 0x90004d9b,
- 0x05020003, 0x40181000, 0x05fdf7e7, 0x90004d9c,
- 0x05fc07e5, 0x90004d99, 0x05fc07e3, 0x05fdf7e7,
- 0x0525f9f0, 0x60028000, 0x05fdf7e8, 0x5c000000,
- 0x4c000000, 0x4803c857, 0x5930200a, 0x801021c0,
- 0x05000029, 0x58101400, 0x4813c857, 0x480bc857,
- 0x82081d00, 0x000000ff, 0x59300c03, 0x90040588,
- 0x05000018, 0x9004058a, 0x05000010, 0x9004058c,
- 0x0500000b, 0x90040582, 0x05000012, 0x90040581,
- 0x0500000d, 0x90040583, 0x05000008, 0x90040585,
- 0x05000003, 0x900405b3, 0x05020013, 0x900c0589,
- 0x0500000a, 0x0501f010, 0x900c0585, 0x05000007,
- 0x0501f00d, 0x900c058b, 0x05000004, 0x0501f00a,
- 0x900c0583, 0x05020008, 0x82081d00, 0xffffff00,
- 0x840c01c0, 0x800c0540, 0x4807c857, 0x4803c857,
- 0x48002400, 0x1c01f000, 0x0501f805, 0x60058800,
- 0x05020002, 0x60018800, 0x1c01f000, 0x599c0017,
- 0x8c00050a, 0x05000003, 0x80000580, 0x1c01f000,
- 0x59a8021b, 0x90000528, 0x05000006, 0x61f6880f,
- 0x0001fac4, 0x05020003, 0x5934000a, 0x8c000504,
- 0x1c01f000, 0x1c01f000, 0x40681000, 0x0501f805,
- 0x60058800, 0x05020002, 0x60018800, 0x1c01f000,
- 0x4d440000, 0x4d340000, 0x80000580, 0x40001800,
- 0x40028800, 0x90080588, 0x05020002, 0x60041800,
- 0x0001fac4, 0x0502000a, 0x05fdfdb6, 0x05020008,
- 0x800c19c0, 0x05000004, 0x59340405, 0x8c000508,
- 0x05000003, 0x80081040, 0x05000009, 0x81468800,
- 0x83440480, 0x00000800, 0x05fc17f2, 0x80000580,
- 0x5c026800, 0x5c028800, 0x1c01f000, 0x90000541,
- 0x5c026800, 0x5c028800, 0x1c01f000, 0x60200800,
- 0x58d400e4, 0x8c00051c, 0x0502002f, 0x59a8021b,
- 0x8c000508, 0x0502002c, 0x5934100a, 0x82081500,
- 0x0000e000, 0x41781800, 0x90080580, 0x0500000a,
- 0x800c1800, 0x82080580, 0x00002000, 0x05000006,
- 0x800c1800, 0x82080580, 0x00006000, 0x05000002,
- 0x800c1800, 0x42007000, 0x001094f1, 0x58380401,
- 0x8c000504, 0x05000006, 0x900c2c84, 0x05021016,
- 0x820c0400, 0x00103edf, 0x0501f012, 0x41782000,
- 0x59342a04, 0x82140480, 0x00000800, 0x05021006,
- 0x80102000, 0x82140480, 0x00000400, 0x05021002,
- 0x80102000, 0x800c00c2, 0x800c0400, 0x80100400,
- 0x90002c89, 0x05021004, 0x82000400, 0x00103ee3,
- 0x50000800, 0x48066c04, 0x1c01f000, 0x00000002,
- 0x00000004, 0x00000008, 0x00000008, 0x00002802,
- 0x00001402, 0x00000a02, 0x00001402, 0x00000a02,
- 0x00000502, 0x00000a02, 0x00000502, 0x00000504,
- 0x59a80864, 0x800409c0, 0x05020004, 0x492f5063,
- 0x492f5064, 0x050df6e3, 0x492c0800, 0x492f5064,
- 0x1c01f000, 0x5934000f, 0x41784000, 0x80001540,
- 0x0500000c, 0x58080205, 0x82000500, 0x000000ff,
- 0x90000592, 0x05020004, 0x5808020d, 0x80040580,
- 0x05000005, 0x58080000, 0x40084000, 0x05fdf7f4,
- 0x90000541, 0x1c01f000, 0x42000000, 0x0010993e,
- 0x4a000400, 0x00000707, 0x4a000204, 0x00000840,
- 0x4a000403, 0x0000ffff, 0x49780200, 0x1c01f000,
- 0x4d340000, 0x4d440000, 0x4c580000, 0x61c0b00f,
- 0x4803c856, 0x417a8800, 0x0001fac4, 0x05020006,
- 0x59340200, 0x8c00051a, 0x05000003, 0x8400051a,
- 0x48026a00, 0x81468800, 0x8058b040, 0x05fe07f7,
- 0x5c00b000, 0x5c028800, 0x5c026800, 0x1c01f000,
- 0x64033011, 0x4a03b104, 0x80000000, 0x4a03b104,
- 0x60000001, 0x497b3016, 0x497b3017, 0x1c01f000,
- 0x599c0018, 0x4803c856, 0x497b3014, 0x497b3015,
- 0x9000050f, 0x48033012, 0x05000008, 0x599c0216,
- 0x82000500, 0x0000ffff, 0x05020002, 0x60080000,
- 0x48033013, 0x850e1d62, 0x1c01f000, 0x05fdfff1,
- 0x6413c826, 0x599c0209, 0x80000540, 0x0500001c,
- 0x599c0207, 0x80000540, 0x05000007, 0x800000cc,
- 0x599c080d, 0x80040400, 0x4803b100, 0x497bb102,
- 0x59d80101, 0x599c000d, 0x4803b100, 0x599c000e,
- 0x4803b101, 0x599c0207, 0x80000540, 0x05020002,
- 0x497bb102, 0x599c0a09, 0x82040540, 0x00400000,
- 0x4803b103, 0x6417b109, 0x4a03b104, 0x10000001,
- 0x8d0c0522, 0x05020003, 0x64073011, 0x1c01f000,
- 0x8d0c0520, 0x05020003, 0x640b3011, 0x05fdf7fc,
- 0x640f3011, 0x05fdf7fa, 0x592c0205, 0x492fc857,
- 0x80000540, 0x05000007, 0x42034000, 0x00109490,
- 0x59a1d806, 0x80edd9c0, 0x05e00a7c, 0x0501f005,
- 0x051df984, 0x05e20a79, 0x5931d823, 0x58ef400a,
- 0x58ec0008, 0x800001c0, 0x05e00a74, 0x0801f800,
- 0x1c01f000, 0x40680800, 0x5c000000, 0x4c000000,
- 0x4803c857, 0x492fc857, 0x4943c857, 0x4807c857,
- 0x4a025a05, 0x00000103, 0x49425a07, 0x48065a09,
- 0x4a025c07, 0x0000ffff, 0x813261c0, 0x05000003,
- 0x59300402, 0x48025c07, 0x912c040a, 0x05011000,
- 0x4803c840, 0x642fc842, 0x05011000, 0x1c01f000,
- 0x59a80011, 0x90000c8a, 0x05e21a58, 0x0c01f808,
- 0x4a038805, 0x000000f0, 0x59c400a3, 0x82000500,
- 0x02870000, 0x05e20a51, 0x1c01f000, 0x00104014,
- 0x00103fa2, 0x00103fba, 0x00103fe3, 0x00104007,
- 0x001001e6, 0x001001e6, 0x00103fba, 0x001001e6,
- 0x00103fa1, 0x1c01f000, 0x600c2000, 0x0501fbae,
- 0x4a038808, 0x00000204, 0x0501fba2, 0x59c40805,
- 0x8c04050e, 0x05020010, 0x8c04050a, 0x05020009,
- 0x8c04050c, 0x05020005, 0x8c040508, 0x0500000a,
- 0x640f5011, 0x0501f007, 0x64035011, 0x0501f005,
- 0x42000000, 0x001097cd, 0x0525f9a9, 0x640b5011,
- 0x0501f896, 0x1c01f000, 0x60002000, 0x0501fb96,
- 0x4a038808, 0x00000202, 0x59c40805, 0x8c040508,
- 0x05020020, 0x8c04050c, 0x0502001c, 0x8c04050e,
- 0x05020018, 0x82040500, 0x000000f0, 0x0502001b,
- 0x0501fb80, 0x4a038808, 0x00000280, 0x59c40002,
- 0x8400050c, 0x48038802, 0x0501f96d, 0x4d3c0000,
- 0x60067800, 0x051df8a4, 0x5c027800, 0x59c410a3,
- 0x84081518, 0x05e9fef4, 0x4a038808, 0x00000280,
- 0x60082000, 0x0501fb78, 0x64275011, 0x0501f007,
- 0x64075011, 0x0501f004, 0x64035011, 0x0501f002,
- 0x640f5011, 0x0501f86d, 0x1c01f000, 0x60042000,
- 0x0501fb6d, 0x59c410a3, 0x84081518, 0x05e9fee2,
- 0x4a038808, 0x00000280, 0x59c40805, 0x8c04050a,
- 0x05020018, 0x8c04050c, 0x05020014, 0x8c04050e,
- 0x05020010, 0x82040500, 0x000000f0, 0x05020013,
- 0x59c40002, 0x8400050c, 0x48038802, 0x0501f944,
- 0x4d3c0000, 0x60067800, 0x051df87b, 0x5c027800,
- 0x60082000, 0x0501fb54, 0x64275011, 0x0501f007,
- 0x64075011, 0x0501f004, 0x64035011, 0x0501f002,
- 0x640b5011, 0x0501f849, 0x1c01f000, 0x0501fc45,
- 0x4a038808, 0x00000208, 0x59c40805, 0x8c04050c,
- 0x05020005, 0x8c04050e, 0x05000005, 0x64075011,
- 0x0501f002, 0x64035011, 0x0501f83c, 0x1c01f000,
- 0x60102000, 0x0501fb3c, 0x0501f873, 0x59c40805,
- 0x8c04050c, 0x05020009, 0x8c04050a, 0x05020005,
- 0x8c04050e, 0x05000005, 0x64075011, 0x0501f002,
- 0x640b5011, 0x0501f82d, 0x1c01f000, 0x0501f8f1,
- 0x05e209c2, 0x601c2000, 0x0501fb2b, 0x8d0c050c,
- 0x05000010, 0x850e1d0c, 0x64438805, 0x05e9fdda,
- 0x59c40005, 0x8c000508, 0x05000006, 0x4a038808,
- 0x00000208, 0x64075014, 0x6006d800, 0x0501f01a,
- 0x59c40006, 0x84000548, 0x48038806, 0x0501f016,
- 0x59a80011, 0x90000581, 0x05020012, 0x42000000,
- 0x001097cd, 0x0525f922, 0x4ce80000, 0x61a1d007,
- 0x0505ff0f, 0x59c40005, 0x90000530, 0x05000008,
- 0x8c00050a, 0x05000004, 0x60002000, 0x0501fb0a,
- 0x0501f003, 0x60042000, 0x0501fb07, 0x5c01d000,
- 0x64135011, 0x1c01f000, 0x4c040000, 0x4c080000,
- 0x61900800, 0x42001000, 0x00104057, 0x0505fee2,
- 0x5c001000, 0x5c000800, 0x1c01f000, 0x4803c856,
- 0x4c040000, 0x0509f966, 0x4df00000, 0x0509fb89,
- 0x5c03e000, 0x0508094e, 0x42000000, 0x001097cc,
- 0x0525f8ff, 0x05fdffc2, 0x5c000800, 0x1c01f000,
- 0x4803c856, 0x4c040000, 0x4c080000, 0x0509f958,
- 0x4df00000, 0x0509fb7b, 0x5c03e000, 0x05080940,
- 0x59c40006, 0x84000500, 0x48038806, 0x0509fc32,
- 0x497b8880, 0x42000000, 0x001097cb, 0x0525f8ec,
- 0x05e9fcf2, 0x64135071, 0x6012d800, 0x64078805,
- 0x42001000, 0x00104057, 0x0505fec4, 0x05e1fb86,
- 0x0501f8ae, 0x05000005, 0x42006000, 0xfeffffff,
- 0x41786800, 0x05f9fe57, 0x0201f800, 0x0010c534,
- 0x60000001, 0x05e9fa55, 0x5c001000, 0x5c000800,
- 0x1c01f000, 0x59c40008, 0x82000580, 0x00000210,
- 0x05000005, 0x4a038808, 0x00000210, 0x6021d027,
- 0x0505febf, 0x1c01f000, 0x4c040000, 0x59a80814,
- 0x90040580, 0x05000008, 0x90040581, 0x05000008,
- 0x90040582, 0x05000008, 0x90040583, 0x05000008,
- 0x0501f043, 0x64035011, 0x0501f006, 0x64135011,
- 0x0501f004, 0x64075011, 0x0501f002, 0x641f5011,
- 0x497b8880, 0x64078893, 0x41780000, 0x05e9faa6,
- 0x0509fbf9, 0x916c0d84, 0x05000008, 0x59c40006,
- 0x82000500, 0xffffff0f, 0x82000540, 0x04000001,
- 0x48038806, 0x0501f007, 0x59c40006, 0x82000500,
- 0xffffff0f, 0x82000540, 0x04000000, 0x48038806,
- 0x0501f872, 0x05020005, 0x59c40806, 0x82040d00,
- 0xfbffff0f, 0x48078806, 0x59c40005, 0x8c000534,
- 0x05020026, 0x42006000, 0xfc18ffff, 0x42006800,
- 0x01000000, 0x05f9fe13, 0x05e9fd3f, 0x59c408a4,
- 0x90040d0f, 0x90040d8c, 0x05020894, 0x0501f85f,
- 0x05000005, 0x42006000, 0xfeffffff, 0x41786800,
- 0x05f9fe08, 0x916c0d84, 0x0500000c, 0x05fdff7b,
- 0x5994102e, 0x41780800, 0x60280000, 0x0505ff35,
- 0x40080000, 0x59a80831, 0x80040c00, 0x42001000,
- 0x00104064, 0x0505fe4f, 0x64135014, 0x05fdfead,
- 0x0501f84a, 0x05020005, 0x59c408a4, 0x90040d0f,
- 0x9004058c, 0x05e20901, 0x5c000800, 0x1c01f000,
- 0x4803c856, 0x4c000000, 0x0505fe73, 0x4a03500f,
- 0x00ffffff, 0x497b5013, 0x59a8001f, 0x82000500,
- 0xffff0000, 0x4803501f, 0x497b8880, 0x497b8893,
- 0x41780000, 0x05e9fa58, 0x59c40001, 0x82000500,
- 0xfffffcff, 0x48038801, 0x42006000, 0xfc18ffff,
- 0x41786800, 0x05f9fddb, 0x59c410a3, 0x84081518,
- 0x05e9fdc9, 0x4a038808, 0x00000200, 0x5c000000,
- 0x800001c0, 0x05fa0c99, 0x4a038805, 0x040000f0,
- 0x59c40006, 0x82000500, 0xffffffcf, 0x82000540,
- 0x440000c1, 0x48038806, 0x1c01f000, 0x0501f805,
- 0x60058800, 0x05000002, 0x60018800, 0x1c01f000,
- 0x4c5c0000, 0x59a8b813, 0x825cbd80, 0x0000aaaa,
- 0x5c00b800, 0x1c01f000, 0x0501f805, 0x60058800,
- 0x05000002, 0x60018800, 0x1c01f000, 0x4c5c0000,
- 0x599cb818, 0x905cbd30, 0x905cbd80, 0x5c00b800,
- 0x1c01f000, 0x0501f805, 0x60058800, 0x05000002,
- 0x60018800, 0x1c01f000, 0x4c5c0000, 0x599cb818,
- 0x905cbd30, 0x905cbd90, 0x5c00b800, 0x1c01f000,
- 0x0501f805, 0x60058800, 0x05000002, 0x60018800,
- 0x1c01f000, 0x4c5c0000, 0x599cb818, 0x905cbd30,
- 0x905cbda0, 0x5c00b800, 0x1c01f000, 0x490fc857,
- 0x910c0d13, 0x0500001b, 0x599c1017, 0x4d3c0000,
- 0x910c0511, 0x05000005, 0x417a7800, 0x8d0c0520,
- 0x05020007, 0x0501f00c, 0x60227800, 0x8d0c0520,
- 0x05000009, 0x600c3000, 0x0501f002, 0x60103000,
- 0x603a8000, 0x0521fa50, 0x599c1017, 0x8c08050a,
- 0x05020006, 0x60128000, 0x0201f800, 0x0010b5e0,
- 0x4803c856, 0x850e1d08, 0x5c027800, 0x0501f006,
- 0x8d0c0520, 0x05000004, 0x603e8000, 0x60043000,
- 0x0521fa41, 0x1c01f000, 0x4803c856, 0x4c580000,
- 0x42000000, 0x001098e1, 0x0521fffd, 0x42000800,
- 0x00109c00, 0x59c40003, 0x44000800, 0x59c40004,
- 0x48000801, 0x59c4000b, 0x48000802, 0x59c4008e,
- 0x48000803, 0x59c4008f, 0x48000804, 0x59c40090,
- 0x48000805, 0x59c40091, 0x48000806, 0x59c40092,
- 0x48000807, 0x59c40093, 0x48000808, 0x59c40099,
- 0x48000809, 0x59c4009e, 0x4800080a, 0x59c400aa,
- 0x4800080b, 0x59c400af, 0x4800080c, 0x59c400b2,
- 0x4800080d, 0x59c400b1, 0x4800080e, 0x90040c0f,
- 0x41c41800, 0x60c0b000, 0x580c0050, 0x44000800,
- 0x80040800, 0x800c1800, 0x8058b040, 0x05fe07fb,
- 0x41c41800, 0x6080b000, 0x580c0010, 0x44000800,
- 0x80040800, 0x800c1800, 0x8058b040, 0x05fe07fb,
- 0x497b8830, 0x6100b000, 0x59c40031, 0x44000800,
- 0x80040800, 0x8058b040, 0x05fe07fc, 0x497b88ac,
- 0x6040b000, 0x59c400ad, 0x44000800, 0x80040800,
- 0x8058b040, 0x05fe07fc, 0x59c41001, 0x4c080000,
- 0x8408150c, 0x480b8801, 0x4a0370e4, 0x00000300,
- 0x4a0370e5, 0xb0000000, 0x60000810, 0x80040840,
- 0x05e0083a, 0x59b800e5, 0x8c000538, 0x05fe07fc,
- 0x4a0370e4, 0x00000200, 0x42006000, 0xffffffff,
- 0x42006800, 0x80000000, 0x05f9fd22, 0x64078807,
- 0x497b8807, 0x0501faa1, 0x4a038808, 0x00000210,
- 0x42006000, 0xfcf8ffff, 0x42006800, 0x01000000,
- 0x05f9fd18, 0x5c001000, 0x480b8801, 0x42000800,
- 0x00109c00, 0x50040000, 0x48038803, 0x58040001,
- 0x48038804, 0x58040002, 0x4803880b, 0x58040003,
- 0x4803888e, 0x58040004, 0x4803888f, 0x58040005,
- 0x48038890, 0x58040006, 0x48038891, 0x58040007,
- 0x48038892, 0x58040008, 0x48038893, 0x58040009,
- 0x48038899, 0x5804000a, 0x4803889e, 0x5804000b,
- 0x480388aa, 0x5804000c, 0x480388af, 0x5804000d,
- 0x480388b2, 0x5804000e, 0x480388b1, 0x90040c0f,
- 0x41c41800, 0x60c0b000, 0x50040000, 0x48001850,
- 0x80040800, 0x800c1800, 0x8058b040, 0x05fe07fb,
- 0x41c41800, 0x6080b000, 0x50040000, 0x48001810,
- 0x80040800, 0x800c1800, 0x8058b040, 0x05fe07fb,
- 0x497b8830, 0x6100b000, 0x50040000, 0x48038831,
- 0x80040800, 0x8058b040, 0x05fe07fc, 0x497b88ac,
- 0x6040b000, 0x50040000, 0x480388ad, 0x80040800,
- 0x8058b040, 0x05fe07fc, 0x497b8880, 0x41780000,
- 0x05e9f949, 0x59c408a4, 0x90040d0f, 0x9004058c,
- 0x05de0fde, 0x4a038805, 0x04000000, 0x5c00b000,
- 0x1c01f000, 0x4803c856, 0x4c580000, 0x4ce80000,
- 0x42000000, 0x001097ce, 0x0521ff4d, 0x59c41008,
- 0x4c080000, 0x82081500, 0xffffff7f, 0x480b8808,
- 0x59c40004, 0x82000500, 0x00003e02, 0x05000003,
- 0x6051d000, 0x0505fd32, 0x59c40006, 0x82000500,
- 0xffffff0f, 0x48038806, 0x0501fa31, 0x64438805,
- 0x4a038808, 0x00000204, 0x6194b000, 0x59c40005,
- 0x8c000508, 0x05020010, 0x61a1d007, 0x0505fd24,
- 0x8058b040, 0x05fe07fa, 0x601c2000, 0x0501f922,
- 0x0501fa1c, 0x0509fa70, 0x4803c856, 0x4a038808,
- 0x00000208, 0x64075014, 0x6006d800, 0x90000541,
- 0x0501f032, 0x60042000, 0x0501f917, 0x05e1fd92,
- 0x42000000, 0x001098bd, 0x0521ff21, 0x05e5f92e,
- 0x497b8880, 0x59a8001f, 0x82000500, 0x0000ffff,
- 0x4c000000, 0x05e9f908, 0x5c000000, 0x48038880,
- 0x59c410a3, 0x84081518, 0x05e9fc7f, 0x4a038808,
- 0x00000200, 0x64238805, 0x6194b000, 0x4a038805,
- 0x000000f0, 0x05e9fbb4, 0x61c00801, 0x59c40005,
- 0x80040d00, 0x05000006, 0x61a1d007, 0x0505fcf8,
- 0x8058b040, 0x05fe07f6, 0x05fdf7d4, 0x59c410a3,
- 0x84081558, 0x05e9fc6c, 0x60082000, 0x0501f8f2,
- 0x59c40006, 0x82000540, 0x000000f0, 0x48038806,
- 0x59a80012, 0x80000540, 0x05020002, 0x80000000,
- 0x48038893, 0x80000580, 0x4df00000, 0x05e9fbc2,
- 0x5c03e000, 0x5c001000, 0x480b8808, 0x5c01d000,
- 0x5c00b000, 0x1c01f000, 0x4803c856, 0x4c580000,
- 0x4ce80000, 0x59c41008, 0x4c080000, 0x82081500,
- 0xffffff7f, 0x480b8808, 0x59c40004, 0x82000500,
- 0x00003e02, 0x05000003, 0x6051d000, 0x0505fcd0,
- 0x05e1fd4d, 0x42000000, 0x001098be, 0x0521fedc,
- 0x05e5f8e9, 0x60002000, 0x0501f8cb, 0x4a038808,
- 0x00000202, 0x80000580, 0x48038880, 0x48038893,
- 0x05e9f8c1, 0x6010b007, 0x4a038805, 0x000000f0,
- 0x05e9fb75, 0x61c00801, 0x59c40005, 0x80040d00,
- 0x05000016, 0x82000500, 0x000000d0, 0x0502001f,
- 0x619dd000, 0x0505fcb6, 0x8058b040, 0x05fe07f3,
- 0x601c2000, 0x0501f8b4, 0x0509fa03, 0x0501f9ad,
- 0x4a038808, 0x00000208, 0x64075014, 0x6006d800,
- 0x59c40006, 0x8400050a, 0x48038806, 0x64838805,
- 0x90000541, 0x0501f01b, 0x59c410a3, 0x84081518,
- 0x05e9fc1d, 0x4a038808, 0x00000200, 0x6095d000,
- 0x0505fc9f, 0x59c410a3, 0x84081558, 0x05e9fc16,
- 0x60082000, 0x0501f89c, 0x497b8880, 0x59a80012,
- 0x80000540, 0x05020002, 0x80000000, 0x48038893,
- 0x59a8001f, 0x82000500, 0x0000ffff, 0x4c000000,
- 0x05e9f88d, 0x5c000000, 0x48038880, 0x80000580,
- 0x4df00000, 0x05e9fb68, 0x5c03e000, 0x5c001000,
- 0x480b8808, 0x5c01d000, 0x5c00b000, 0x1c01f000,
- 0x4803c856, 0x60042000, 0x0501f883, 0x59c40004,
- 0x82000500, 0x00003e02, 0x05000008, 0x0509f9ce,
- 0x0501f978, 0x4a038808, 0x00000208, 0x64075014,
- 0x6006d800, 0x0501f046, 0x05e1fcf3, 0x42000000,
- 0x001098bf, 0x0521fe82, 0x05e5f88f, 0x59c40006,
- 0x84000508, 0x48038806, 0x64438805, 0x850e1d4c,
- 0x61900800, 0x42001000, 0x00104057, 0x0505fc4e,
- 0x59c410a3, 0x84081518, 0x05e9fbdf, 0x4a038808,
- 0x00000200, 0x497b8880, 0x4a038805, 0x000000f0,
- 0x05e9fb15, 0x61c00801, 0x59c40005, 0x80040d00,
- 0x0500000b, 0x82000500, 0x000000e0, 0x0502000d,
- 0x61a1d007, 0x0505fc56, 0x0505fad4, 0x59940004,
- 0x80000540, 0x05fe07f1, 0x0501f021, 0x59c410a3,
- 0x84081558, 0x05e9fbc8, 0x60082000, 0x0501f84e,
- 0x4c080000, 0x42001000, 0x00104057, 0x0505fc37,
- 0x5c001000, 0x497b8880, 0x59a80012, 0x80000540,
- 0x05020002, 0x80000000, 0x48038893, 0x59a8001f,
- 0x82000500, 0x0000ffff, 0x4c000000, 0x05e9f83a,
- 0x5c000000, 0x48038880, 0x850e1d0c, 0x59c40006,
- 0x84000548, 0x48038806, 0x05e9fb13, 0x59c40008,
- 0x82000540, 0x00000280, 0x48038808, 0x1c01f000,
- 0x4803c856, 0x4d400000, 0x4d3c0000, 0x0509f97e,
- 0x0521ff4a, 0x0502001d, 0x599c1017, 0x8d0c0500,
- 0x05020009, 0x8c08051a, 0x05000018, 0x850e1d42,
- 0x60128000, 0x60227800, 0x8d0c0520, 0x05020006,
- 0x0501f00e, 0x60128000, 0x417a7800, 0x8d0c0520,
- 0x0500000a, 0x4d400000, 0x603a8000, 0x600c3000,
- 0x61fe89ff, 0x0521f861, 0x5c028000, 0x599c0817,
- 0x8c04050a, 0x05020005, 0x4943c857, 0x493fc857,
- 0x0201f800, 0x0010b5e0, 0x497b8880, 0x6006d800,
- 0x05fdfd4e, 0x5c027800, 0x5c028000, 0x1c01f000,
- 0x05e1fc85, 0x42000000, 0x001098c0, 0x0521fe14,
- 0x05e5f821, 0x60040000, 0x05e5ffff, 0x64078880,
- 0x05e9f2dd, 0x42000800, 0x0010948c, 0x48100802,
- 0x90101488, 0x05001008, 0x58040001, 0x4803c857,
- 0x4813c857, 0x58040003, 0x80000000, 0x48000803,
- 0x60082000, 0x58040001, 0x9000148b, 0x05001007,
- 0x4803c857, 0x4813c857, 0x58040003, 0x80000000,
- 0x48000803, 0x60000000, 0x48000800, 0x59c428a4,
- 0x90142d0f, 0x90142d8c, 0x0c000002, 0x0501f0fb,
- 0x00104377, 0x00104391, 0x001043ab, 0x001043c5,
- 0x001043df, 0x001043f5, 0x00104404, 0x00104417,
- 0x0010442a, 0x0010443d, 0x0010443f, 0x40100000,
- 0x0c01f001, 0x00104381, 0x00104383, 0x00104385,
- 0x00104386, 0x00104388, 0x0010438a, 0x0010438d,
- 0x0010438f, 0x64080801, 0x1c01f000, 0x640c0801,
- 0x0501f0bc, 0x1c01f000, 0x641c0801, 0x1c01f000,
- 0x64100801, 0x0501f0ba, 0x64140801, 0x0501f8be,
- 0x0501f0ba, 0x64140801, 0x0501f0bb, 0x4813c857,
- 0x1c01f000, 0x40100000, 0x0c01f001, 0x0010439b,
- 0x0010439d, 0x0010439f, 0x001043a0, 0x001043a2,
- 0x001043a4, 0x001043a7, 0x001043a9, 0x64080801,
- 0x1c01f000, 0x640c0801, 0x1c01f000, 0x1c01f000,
- 0x641c0801, 0x1c01f000, 0x64100801, 0x0501f0a0,
- 0x64140801, 0x0501f8a4, 0x0501f0a0, 0x64140801,
- 0x1c01f000, 0x64140801, 0x0501f099, 0x40100000,
- 0x0c01f001, 0x001043b5, 0x001043b6, 0x001043b8,
- 0x001043ba, 0x001043bc, 0x001043be, 0x001043c1,
- 0x001043c3, 0x1c01f000, 0x640c0801, 0x1c01f000,
- 0x64000801, 0x1c01f000, 0x641c0801, 0x1c01f000,
- 0x64100801, 0x0501f086, 0x64140801, 0x0501f88a,
- 0x0501f086, 0x64140801, 0x1c01f000, 0x64140801,
- 0x0501f07f, 0x40100000, 0x0c01f001, 0x001043cf,
- 0x001043d1, 0x001043d2, 0x001043d4, 0x001043d6,
- 0x001043d8, 0x001043db, 0x001043dd, 0x64080801,
- 0x1c01f000, 0x1c01f000, 0x64000801, 0x1c01f000,
- 0x641c0801, 0x1c01f000, 0x64100801, 0x0501f06c,
- 0x64140801, 0x0501f870, 0x0501f06c, 0x64140801,
- 0x1c01f000, 0x64140801, 0x0501f065, 0x40100000,
- 0x0c01f001, 0x001043e9, 0x001043eb, 0x001043eb,
- 0x001043ec, 0x001043eb, 0x001043ee, 0x001043f1,
- 0x001043f3, 0x64080801, 0x1c01f000, 0x1c01f000,
- 0x641c0801, 0x1c01f000, 0x64140801, 0x0501f85a,
- 0x0501f056, 0x64140801, 0x1c01f000, 0x64140801,
- 0x0501f04f, 0x40100000, 0x0c01f001, 0x00104403,
- 0x00104403, 0x00104403, 0x001043ff, 0x00104401,
- 0x00104403, 0x00104403, 0x00104403, 0x641c0801,
- 0x1c01f000, 0x64100801, 0x1c01f000, 0x1c01f000,
- 0x40100000, 0x0c01f001, 0x0010440e, 0x00104410,
- 0x00104410, 0x00104411, 0x00104413, 0x00104415,
- 0x00104415, 0x00104415, 0x64080801, 0x1c01f000,
- 0x1c01f000, 0x641c0801, 0x1c01f000, 0x64100801,
- 0x0501f02f, 0x64200801, 0x1c01f000, 0x40100000,
- 0x0c01f001, 0x00104421, 0x00104423, 0x00104425,
- 0x00104425, 0x00104426, 0x00104428, 0x00104428,
- 0x00104428, 0x64080801, 0x1c01f000, 0x640c0801,
- 0x1c01f000, 0x1c01f000, 0x64100801, 0x0501f01c,
- 0x64200801, 0x1c01f000, 0x40100000, 0x0c01f001,
- 0x00104434, 0x00104434, 0x00104436, 0x00104437,
- 0x00104439, 0x00104436, 0x0010443b, 0x00104436,
- 0x64140801, 0x0501f00b, 0x1c01f000, 0x641c0801,
- 0x1c01f000, 0x64100801, 0x1c01f000, 0x64200801,
- 0x1c01f000, 0x64240801, 0x1c01f000, 0x1c01f000,
- 0x42000000, 0x001097b8, 0x0521f51d, 0x42000000,
- 0x001097b5, 0x0521f51a, 0x42000000, 0x001097b7,
- 0x0521f517, 0x42000000, 0x001097b6, 0x0521f514,
- 0x42000800, 0x0010948c, 0x58040001, 0x48000800,
- 0x64140801, 0x64200802, 0x1c01f000, 0x42000800,
- 0x0010948c, 0x58040001, 0x48000800, 0x64040801,
- 0x64280802, 0x1c01f000, 0x42000800, 0x0010948c,
- 0x58040001, 0x48000800, 0x64180801, 0x64240802,
- 0x1c01f000, 0x42000800, 0x0010948c, 0x64280801,
- 0x64280800, 0x1c01f000, 0x496fc857, 0x4813c857,
- 0x40100000, 0x0c01f001, 0x00104480, 0x00104480,
- 0x00104480, 0x00104480, 0x00104472, 0x0010447a,
- 0x0010447e, 0x00104480, 0x59a8021b, 0x8c000506,
- 0x05000003, 0x8c000502, 0x0500000a, 0x0501f80a,
- 0x05fe07cb, 0x0501f007, 0x0501f807, 0x05000005,
- 0x05fdffca, 0x05fdf7cc, 0x0501f803, 0x05fe07ca,
- 0x1c01f000, 0x496fc857, 0x416c0000, 0x90000c88,
- 0x05de1d62, 0x0c01f001, 0x0010448e, 0x00104490,
- 0x00104490, 0x00104490, 0x0010448e, 0x0010448e,
- 0x0010448e, 0x00104490, 0x80000580, 0x1c01f000,
- 0x90000541, 0x1c01f000, 0x6002e000, 0x497b3004,
- 0x4a03b004, 0x60000001, 0x59d80005, 0x4a03b004,
- 0x90000001, 0x4a03a804, 0x60000001, 0x59d40005,
- 0x4a03a804, 0x90000001, 0x0501f3d6, 0x6413c825,
- 0x6413c827, 0x599c0409, 0x80000d40, 0x0500001f,
- 0x599c0407, 0x80000540, 0x05000007, 0x800000cc,
- 0x599c100b, 0x80080400, 0x4803b000, 0x497bb002,
- 0x59d80001, 0x599c000b, 0x4803b000, 0x599c000c,
- 0x4803b001, 0x599c0407, 0x80000540, 0x05020002,
- 0x497bb002, 0x599c0c09, 0x82040540, 0x00400000,
- 0x4803b003, 0x6417b009, 0x4a03b004, 0x10000001,
- 0x59e00803, 0x82040d00, 0xfffffeff, 0x82040d40,
- 0x00008000, 0x4807c003, 0x599c040a, 0x80000540,
- 0x0500001f, 0x599c0408, 0x80000540, 0x05000007,
- 0x800000cc, 0x599c100f, 0x80080400, 0x4803a800,
- 0x497ba802, 0x59d40001, 0x599c000f, 0x4803a800,
- 0x599c0010, 0x4803a801, 0x599c0408, 0x80000540,
- 0x05020002, 0x497ba802, 0x599c0c0a, 0x82040540,
- 0x00400000, 0x4803a803, 0x6417a809, 0x4a03a804,
- 0x10000001, 0x59e00803, 0x82040d00, 0xfffffbff,
- 0x82040d40, 0x00008000, 0x4807c003, 0x800409c0,
- 0x05000004, 0x6006e000, 0x0000be96, 0x0000f6a9,
- 0x1c01f000, 0x05ddfcfd, 0x1c01f000, 0x0501f850,
- 0x5c03e000, 0x0001f622, 0x0001fe4a, 0x05fdf7fd,
- 0x0010453b, 0x0010453b, 0x0010453b, 0x0010453b,
- 0x00104547, 0x0010453b, 0x0010453b, 0x0010453b,
- 0x0010453b, 0x0010453b, 0x00020641, 0x0010453b,
- 0x0010453b, 0x00104547, 0x00104547, 0x0010453b,
- 0x0010453b, 0x0010453b, 0x0010453b, 0x0010453b,
- 0x0010453b, 0x0010453b, 0x0010453b, 0x0010453b,
- 0x0010453b, 0x0010453b, 0x0010453b, 0x0010453b,
- 0x0010453b, 0x0010453b, 0x0010453b, 0x0010453b,
- 0x0010453b, 0x0010453b, 0x0010453b, 0x0010453b,
- 0x0010453b, 0x0010453b, 0x0010453b, 0x0010453b,
- 0x0010453b, 0x0010453b, 0x0010453b, 0x0010453b,
- 0x0010453b, 0x0010453b, 0x0010453b, 0x0010453b,
- 0x0010453b, 0x0010453b, 0x0010453b, 0x0010453b,
- 0x0010453b, 0x0010453b, 0x0010453b, 0x0010453b,
- 0x0010453b, 0x0010453b, 0x0010453b, 0x0010453b,
- 0x0010453b, 0x0010453b, 0x0010453b, 0x0010453b,
- 0x0010453b, 0x0010453b, 0x0010453b, 0x0010453b,
- 0x0010453b, 0x0010453b, 0x0010453b, 0x0010453b,
- 0x0010453b, 0x0010453b, 0x0010453b, 0x492fc857,
- 0x42000000, 0x00109873, 0x0521fc21, 0x60000008,
- 0x0501f013, 0x492fc857, 0x42000000, 0x00109872,
- 0x0521fc1b, 0x60000020, 0x0501f00d, 0x492fc857,
- 0x42000000, 0x00109871, 0x0521fc15, 0x60000040,
- 0x0501f007, 0x492fc857, 0x42000000, 0x00109874,
- 0x0521fc0f, 0x60000010, 0x0501f001, 0x4803c857,
- 0x592c0c05, 0x82040d00, 0xffff80ff, 0x80040540,
- 0x59980803, 0x800409c0, 0x05000002, 0x8400051e,
- 0x48025c05, 0x0001fb2c, 0x91700583, 0x6006e000,
- 0x05000002, 0x1c01f000, 0x599a5801, 0x812e59c0,
- 0x05fe07e3, 0x05ddfc81, 0x492fc857, 0x80140110,
- 0x05fc07d9, 0x80000040, 0x05000020, 0x4a033006,
- 0x0010458a, 0x0001f62b, 0x492fc857, 0x0521fcff,
- 0x00020636, 0x492fc856, 0x83440400, 0x00108c00,
- 0x50000000, 0x80026d40, 0x05000005, 0x4937c857,
- 0x59340200, 0x8c00050e, 0x00020636, 0x60a28000,
- 0x41780800, 0x417a6000, 0x05fdf9f8, 0x0515fd48,
- 0x0001f32c, 0x82000500, 0x0f000000, 0x8000012a,
- 0x592c0c0b, 0x82040d00, 0x0000ff87, 0x80040540,
- 0x48025c0b, 0x0001f63e, 0x492fc857, 0x592c0409,
- 0x80000540, 0x05fe07c0, 0x8d0c050e, 0x05020008,
- 0x592c0208, 0x80000540, 0x05fc07bb, 0x497a5a07,
- 0x05f9f9db, 0x05020003, 0x1c01f000, 0x60a00000,
- 0x48025a07, 0x0001f32c, 0x592e8a07, 0x592c0407,
- 0x4947c857, 0x4803c857, 0x82000500, 0x000000ff,
- 0x6004b800, 0x90000d81, 0x0500000e, 0x417a8800,
- 0x61c0b80f, 0x90000d82, 0x0500000a, 0x80000540,
- 0x0002032c, 0x592e8a07, 0x0001fac4, 0x0002032c,
- 0x592e9009, 0x592e980a, 0x05f9fcff, 0x0001f32c,
- 0x850e1d00, 0x0001fac4, 0x05f80dda, 0x81468800,
- 0x805cb840, 0x05fe07fc, 0x0001f32c, 0x592c0a09,
- 0x4807c857, 0x9004058e, 0x05000056, 0x900405aa,
- 0x0500001e, 0x9004058f, 0x050002c9, 0x900405ae,
- 0x050002c7, 0xb0040586, 0x05000052, 0xb0040585,
- 0x05000018, 0xb0040589, 0x050002c1, 0x900405a9,
- 0x050202c3, 0x592e8a07, 0x42026800, 0x0010993e,
- 0x83440580, 0x0000ffff, 0x05000006, 0x0001fac4,
- 0x050202b7, 0x59340200, 0x84000518, 0x48026a00,
- 0x592e600a, 0x4933c857, 0x83300580, 0xffffffff,
- 0x05020041, 0x0501f2ae, 0x850e1d04, 0x0501f2ac,
- 0x592c1408, 0x480bc857, 0x0515ff0a, 0x411e6000,
- 0x05020003, 0x4803c856, 0x0501f2a9, 0x59300c07,
- 0x90040584, 0x05000003, 0x4803c856, 0x0501f2a4,
- 0x592c0208, 0x8c000506, 0x0500000b, 0x0505fbd4,
- 0x4df00000, 0x0505fae6, 0x0201f800, 0x0010b9a8,
- 0x80c40040, 0x5c03e000, 0x05040bb9, 0x050df85a,
- 0x0501f293, 0x592e380a, 0x591c1416, 0x8c080516,
- 0x05000293, 0x59300009, 0x800001c0, 0x05de0beb,
- 0x84081554, 0x480a3c16, 0x64ea6403, 0x592c040c,
- 0x80000540, 0x05000006, 0x64ee6403, 0x592c020d,
- 0x4802641c, 0x592c040d, 0x4802621c, 0x64066203,
- 0x42000800, 0x80000040, 0x0501fa88, 0x05000003,
- 0x492e6009, 0x0005f07c, 0x0005f87c, 0x0501f278,
- 0x59a80082, 0x84000510, 0x48035082, 0x0501f274,
- 0x592c1208, 0x8c080500, 0x05020271, 0x592e8a07,
- 0x592e600a, 0x0515fed8, 0x05020003, 0x4803c856,
- 0x0501f26f, 0x59300c07, 0x90040584, 0x05000003,
- 0x4803c856, 0x0501f26a, 0x59300a03, 0x90040587,
- 0x05000003, 0x4803c856, 0x0501f265, 0x59300c03,
- 0x90040581, 0x05000016, 0x90040582, 0x0500000e,
- 0x90040588, 0x05000010, 0x9004058a, 0x05000005,
- 0x9004058c, 0x0502001d, 0x60240800, 0x0501f01a,
- 0x5932680a, 0x05f9fe31, 0x05020018, 0x60140800,
- 0x0501f015, 0x417a7800, 0x0201f800, 0x0010b660,
- 0x64066407, 0x600c0800, 0x0501f00f, 0x83340580,
- 0x0010993e, 0x05020007, 0x5930000a, 0x82000580,
- 0x0010993e, 0x05020246, 0x64066407, 0x0501f007,
- 0x417a7800, 0x0201f800, 0x0010b660, 0x64066407,
- 0x602c0800, 0x05f9fac9, 0x64066203, 0x0501fa43,
- 0x05000003, 0x492e6009, 0x0505f272, 0x0505fa71,
- 0x0501f233, 0x59300416, 0x8c000518, 0x051e0716,
- 0x0501f088, 0x40000800, 0x58040000, 0x80000540,
- 0x05fe07fd, 0x492c0800, 0x1c01f000, 0x492fc857,
- 0x59300c07, 0x90040586, 0x0502007b, 0x59340400,
- 0x82000580, 0x00000606, 0x05020004, 0x59340200,
- 0x8c00051a, 0x00000682, 0x59340200, 0x8c00050e,
- 0x05000071, 0x59300203, 0x60067800, 0x90000587,
- 0x00020682, 0x640a6203, 0x0001f682, 0x600a8000,
- 0x64526006, 0x4d2c0000, 0x051dfb9c, 0x5c025800,
- 0x59300c07, 0x4807c857, 0x90040587, 0x05020050,
- 0x492fc857, 0x64065a07, 0x0001f32c, 0x83300580,
- 0xffffffff, 0x0502004a, 0x592c240b, 0x492fc857,
- 0x4813c857, 0x8c10051c, 0x05020014, 0x8c10051a,
- 0x05000003, 0x8c10050a, 0x05000056, 0x59340a00,
- 0x8c04050e, 0x05000003, 0x8c10051e, 0x05000051,
- 0x0005f8ca, 0x05000059, 0x592c240b, 0x592c020d,
- 0x48026202, 0x4936600a, 0x4932580a, 0x641a6407,
- 0x641e6203, 0x0001f67d, 0x592c0a0d, 0x4c040000,
- 0x05fdf859, 0x5c000800, 0x05020060, 0x58080000,
- 0x49781000, 0x802041c0, 0x05000006, 0x48004000,
- 0x80000540, 0x05020007, 0x48226810, 0x0501f005,
- 0x4802680f, 0x80000540, 0x05020002, 0x497a6810,
- 0x4d2c0000, 0x400a5800, 0x640a5a07, 0x0001fb2c,
- 0x5c025800, 0x05fdf7cb, 0x8c10051c, 0x05000015,
- 0x592c0207, 0x82000580, 0x0000ffff, 0x05020011,
- 0x592e600a, 0x83300580, 0xffffffff, 0x05fc07c1,
- 0x0519fa34, 0x0502000e, 0x592c220d, 0x59300202,
- 0x80100580, 0x0502000a, 0x59300009, 0x800001c0,
- 0x05020004, 0x59300203, 0x90000587, 0x05fc07ac,
- 0x492fc857, 0x64a65a07, 0x0001f32c, 0x492fc857,
- 0x64225a07, 0x0001f32c, 0x4803c857, 0x8c000514,
- 0x05000007, 0x42000000, 0x00109862, 0x0521fa8c,
- 0x492fc857, 0x492e6009, 0x1c01f000, 0x492fc857,
- 0x65165a07, 0x0001f32c, 0x492fc857, 0x64aa5a07,
- 0x0001f32c, 0x492fc857, 0x64a25a07, 0x0001f32c,
- 0x492fc857, 0x641a5a07, 0x0001f32c, 0x492fc857,
- 0x643a5a07, 0x0001f32c, 0x90040587, 0x05fe07e4,
- 0x640a5a07, 0x0001f32c, 0x592c0407, 0x800000c2,
- 0x800008c4, 0x80040400, 0x48025804, 0x59340010,
- 0x492e6810, 0x492fc857, 0x80000d40, 0x05000003,
- 0x492c0800, 0x1c01f000, 0x59340203, 0x492e680f,
- 0x492fc857, 0x4803c857, 0x80000540, 0x05020002,
- 0x64066a03, 0x1c01f000, 0x59a8000d, 0x81640480,
- 0x05fe177c, 0x42026000, 0x0010ccb4, 0x59300407,
- 0x90000586, 0x05020007, 0x5930000a, 0x81340580,
- 0x05020004, 0x59300202, 0x80040580, 0x05fc0768,
- 0x91326424, 0x41580000, 0x81300480, 0x05fc17f4,
- 0x05fdf76c, 0x492fc857, 0x592c0205, 0x80000112,
- 0x05fe062d, 0x592e8a07, 0x0001fac4, 0x0502004a,
- 0x05f9fd34, 0x0502004a, 0x592e780b, 0x493fc857,
- 0x8d3c053e, 0x05020005, 0x8d0c050e, 0x05020042,
- 0x05f9fc76, 0x05fc062c, 0x913c1d1f, 0x05fc062a,
- 0x592c0208, 0x82000c80, 0x00001000, 0x05fe1626,
- 0x800000c2, 0x800008c4, 0x8005d400, 0x592e9009,
- 0x592e980a, 0x5934080d, 0x800409c0, 0x05000004,
- 0x58041802, 0x800c19c0, 0x0502002b, 0x913c1d1f,
- 0x81780040, 0x80000000, 0x800c1902, 0x05fe17fe,
- 0x05fe0615, 0x0c01f001, 0x0010473f, 0x00104741,
- 0x0010474a, 0x0010474c, 0x0010474e, 0x0515fa4a,
- 0x0501f019, 0x05f9fc2f, 0x0500001d, 0x80e9d1c0,
- 0x05020ee4, 0x60168000, 0x417a9000, 0x417a9800,
- 0x0515fa4d, 0x0501f010, 0x61367000, 0x0501f004,
- 0x613a7000, 0x0501f002, 0x614a7000, 0x5934080d,
- 0x800409c0, 0x05000006, 0x4d3c0000, 0x40067800,
- 0x05f9fc00, 0x5c027800, 0x05000007, 0x05f9fb17,
- 0x05160a69, 0x05000006, 0x8d3c053e, 0x0502000a,
- 0x1c01f000, 0x64c25a07, 0x0501f009, 0x64b25a07,
- 0x0501f007, 0x64a25a07, 0x0501f005, 0x64a65a07,
- 0x0501f003, 0x497a580a, 0x64025a07, 0x4a025a05,
- 0x00000103, 0x0001f32c, 0x492fc857, 0x80140110,
- 0x80000040, 0x05000002, 0x05fdf5d3, 0x592c0208,
- 0x82000500, 0x000003ff, 0x48025a08, 0x8c000506,
- 0x05000003, 0xb0000530, 0x05020003, 0x8d0c050e,
- 0x05020014, 0x4a025a07, 0x0000dead, 0x592c0409,
- 0x82000500, 0x0000f0ff, 0x48025c09, 0x05f9f814,
- 0x05020002, 0x1c01f000, 0x49425a07, 0x8058b1c0,
- 0x05000007, 0x0515fe6f, 0x0501f80a, 0x44042800,
- 0x90580582, 0x05020002, 0x48082801, 0x0001f32c,
- 0x60c68000, 0x60040800, 0x6004b000, 0x05fdf7f3,
- 0x592c0409, 0x80000118, 0x912c2c0a, 0x80142c00,
- 0x1c01f000, 0x492fc857, 0x641a5a09, 0x0001f32c,
- 0x492fc857, 0x64065a09, 0x0001f32c, 0x492fc857,
- 0x592e7c07, 0x833c0500, 0xfffffffe, 0x0502003b,
- 0x592c4008, 0x42026000, 0x0010ccb4, 0x41581800,
- 0x400c0000, 0x81300480, 0x0502101f, 0x59300203,
- 0x90000580, 0x05000007, 0x59300009, 0x80000d40,
- 0x05000004, 0x58040006, 0x80200580, 0x05000003,
- 0x91326424, 0x05fdf7f3, 0x58040205, 0x82000500,
- 0x000000ff, 0xb0000d93, 0x05000009, 0xb0000d88,
- 0x05000007, 0x90000d98, 0x05000005, 0x90000da9,
- 0x05000003, 0x90000d94, 0x05fe07f2, 0x4d2c0000,
- 0x0511fe83, 0x5c025800, 0x05000018, 0x64025a07,
- 0x0001f32c, 0x592e8a07, 0x83440480, 0x000007f0,
- 0x05021012, 0x83440400, 0x00108c00, 0x50000000,
- 0x80026d40, 0x0500000d, 0x4d2c0000, 0x05f9fb61,
- 0x05000009, 0x60168000, 0x592c0a09, 0x417a6000,
- 0x05f9ffa2, 0x0515faf7, 0x0001fb2c, 0x5c025800,
- 0x05fdf7eb, 0x5c025800, 0x64c65a07, 0x0001f32c,
- 0x492fc857, 0x4d2c0000, 0x05ddfd8a, 0x05000011,
- 0x492fc857, 0x412f4000, 0x05ddfd86, 0x0500000b,
- 0x492fc857, 0x412dd800, 0x05f1fea1, 0x05f1fea9,
- 0x49a1d80a, 0x5c025800, 0x492dd809, 0x48ef4006,
- 0x05e9fb3b, 0x05e9f352, 0x41a25800, 0x05ddfd89,
- 0x5c025800, 0x4a025a07, 0x00004005, 0x640a5c07,
- 0x0001f32c, 0x4807c857, 0x485fc857, 0x6004b800,
- 0x5c000800, 0x4c5c0000, 0x0501f005, 0x4807c857,
- 0x485fc857, 0x5c000800, 0x4d780000, 0x4803c857,
- 0x492fc857, 0x8c00050e, 0x05de09da, 0x4203e000,
- 0x50000000, 0x600cb900, 0x05ddf1e4, 0x80140110,
- 0x80000040, 0x05fe0538, 0x599c0019, 0x8c000510,
- 0x0502000b, 0x05f9fc95, 0x05020002, 0x1c01f000,
- 0x49425a07, 0x4806580e, 0x480a580f, 0x4943c857,
- 0x4807c857, 0x480bc857, 0x0001f32c, 0x592c040c,
- 0x82000500, 0x0000e000, 0x82000580, 0x00006000,
- 0x05fc07f1, 0x59a8021b, 0x8c000508, 0x05fc07ee,
- 0x592c120c, 0x592c080b, 0x82040500, 0xff000000,
- 0x80040d80, 0x80000110, 0x80081540, 0x05000004,
- 0x4806580b, 0x0501f86c, 0x05fdf7e3, 0x60701000,
- 0x60640800, 0x60c68000, 0x05fdf7e2, 0x80140110,
- 0x80000040, 0x05fe0510, 0x05f9fd9c, 0x05020002,
- 0x1c01f000, 0x49425a07, 0x48065812, 0x480a5813,
- 0x0001f32c, 0x80140110, 0x05fc0507, 0x80000040,
- 0x0502000a, 0x6006e000, 0x592c020b, 0x8c000504,
- 0x00000630, 0x592c0208, 0x82000c80, 0x00001001,
- 0x05fe1509, 0x0501f004, 0x4a033006, 0x00020630,
- 0x0001f62b, 0x592c1014, 0x82080500, 0xffff0003,
- 0x05fe0501, 0x600ae000, 0x42000000, 0x001099e9,
- 0x50007000, 0x592c0012, 0x592c0813, 0x48007006,
- 0x48047007, 0x492c700a, 0x4978700d, 0x4978700b,
- 0x0501f001, 0x4978700c, 0x82080480, 0x00000180,
- 0x4803c857, 0x05001006, 0x4800700e, 0x4a007005,
- 0x00000180, 0x65807004, 0x0501f005, 0x4978700e,
- 0x48087005, 0x80081104, 0x48087004, 0x58380009,
- 0x48007003, 0x40381000, 0x0001f01c, 0x4df00000,
- 0x4203e000, 0x50000000, 0x05ddfce7, 0x05000003,
- 0x59980005, 0x0801f800, 0x5c03e000, 0x1c01f000,
- 0x05ddfce1, 0x05dc0971, 0x4a025809, 0x00109988,
- 0x42000800, 0x001099e9, 0x452c0800, 0x497a580a,
- 0x497a580b, 0x497a580c, 0x497a580d, 0x497a580e,
- 0x4a025808, 0x000206bc, 0x497a580f, 0x4a025802,
- 0x00000100, 0x64065801, 0x1c01f000, 0x0501f808,
- 0x05fc0710, 0x64065a09, 0x051df693, 0x0501f804,
- 0x05fc0709, 0x641a5a09, 0x051df68f, 0x59a80005,
- 0x8c00051a, 0x1c01f000, 0x59a80005, 0x8c00051c,
- 0x1c01f000, 0x59a8000f, 0x80080580, 0x05020002,
- 0x1c01f000, 0x480bc857, 0x480b500f, 0x497b8830,
- 0x82080d40, 0x01000000, 0x48078832, 0x59c40002,
- 0x8400054c, 0x48038802, 0x600c0800, 0x0505f14b,
- 0x59c80007, 0x8c000502, 0x05000044, 0x915c2c85,
- 0x050014ce, 0x59c82817, 0x48175085, 0x497b9005,
- 0x82140500, 0x00e00000, 0x05020038, 0x82140500,
- 0x000003ff, 0x90001c06, 0x41cc2000, 0x600030c1,
- 0xb00c0480, 0x05001004, 0x61001000, 0xb00c1c80,
- 0x0501f003, 0x400c1000, 0x41781800, 0x54182000,
- 0x80102000, 0x80183000, 0x80081040, 0x05fe07fc,
- 0x800c19c0, 0x05000005, 0x59c80005, 0x80000000,
- 0x48039005, 0x05fdf7ee, 0x82140500, 0x000003ff,
- 0x800018c4, 0x8c140514, 0x05000004, 0x59cc0002,
- 0x90000503, 0x800c1c80, 0x480f5073, 0x82140500,
- 0x01f60000, 0x0502000f, 0x0501fca9, 0x05020008,
- 0x4a039005, 0x00000140, 0x82140500, 0x0e000000,
- 0x80000132, 0x0c01f813, 0x1c01f000, 0x800001c0,
- 0x0502000a, 0x4a039005, 0x00000140, 0x0501f00b,
- 0x4817c857, 0x82140500, 0x00f60000, 0x05020003,
- 0x0501fc07, 0x05fe07ed, 0x0501fcb7, 0x4a039005,
- 0x00000140, 0x0501f036, 0x4803c856, 0x1c01f000,
- 0x001048f9, 0x00104bab, 0x001048f4, 0x001048f4,
- 0x001048f4, 0x001048f4, 0x001048f4, 0x001048f4,
- 0x4803c857, 0x42000000, 0x0010986f, 0x0521f868,
- 0x1c01f000, 0x8d0c052a, 0x05000004, 0x4c140000,
- 0x05ddf9e4, 0x5c002800, 0x59cc0400, 0x82000d00,
- 0x0000ff00, 0x82041500, 0x0000f000, 0x840409c0,
- 0x82080580, 0x00002000, 0x0502000f, 0x916c0581,
- 0x0502000b, 0x59cc0006, 0x82000500, 0xff000000,
- 0x82000580, 0x11000000, 0x05de0996, 0x0502000f,
- 0x05f1ff90, 0x0501fcbd, 0x0501f00c, 0x0501f81b,
- 0x0501f00a, 0x82080580, 0x00003000, 0x05020003,
- 0x0501fa22, 0x0501f005, 0x82080580, 0x00008000,
- 0x05020002, 0x0501fae9, 0x1c01f000, 0x4817c857,
- 0x42000000, 0x0010986e, 0x0521f83d, 0x916c0583,
- 0x05020009, 0x4c080000, 0x4c0c0000, 0x61201100,
- 0x40141800, 0x80142120, 0x05f1fc92, 0x5c001800,
- 0x5c001000, 0x1c01f000, 0x59cc0002, 0x82000500,
- 0xff000000, 0x82001580, 0x01000000, 0x05000005,
- 0x82001580, 0x23000000, 0x05de096e, 0x050201b2,
- 0x59a80073, 0x90000484, 0x050011af, 0x900405a3,
- 0x05020042, 0x59cc0004, 0x4803c857, 0x59cc0006,
- 0x82000500, 0xff000000, 0x59cc0801, 0x82040d00,
- 0x00ffffff, 0x80040540, 0x4803c857, 0x0501fb47,
- 0x05dc095c, 0x050001a0, 0x59300c07, 0x90040590,
- 0x0500000a, 0x90040591, 0x05000008, 0x90040581,
- 0x05000006, 0x90040584, 0x05000004, 0x90040588,
- 0x05de0950, 0x05020194, 0x59300004, 0x82000500,
- 0x80010000, 0x05000004, 0x0505fbab, 0x05de0949,
- 0x0502018d, 0x59cc0a04, 0x48066202, 0x59cc0006,
- 0x82000500, 0xffff0000, 0x82000d80, 0x02000000,
- 0x05020003, 0x60567000, 0x0005f105, 0x82000d80,
- 0x02140000, 0x05fc07fc, 0x82000d80, 0x02100000,
- 0x05fc07f9, 0x82000d80, 0x02100000, 0x05fc07f6,
- 0x82000d80, 0x01000000, 0x05de0932, 0x05020176,
- 0x59cc0006, 0x82000500, 0x0000ffff, 0x05de092d,
- 0x05020171, 0x59a80073, 0x90000488, 0x0500116e,
- 0x605a7000, 0x05fdf7e9, 0x900405a2, 0x05de0925,
- 0x05020169, 0x59cc0004, 0x4803c857, 0x59cc0006,
- 0x4803c857, 0x59cc0001, 0x4803c857, 0x59a80073,
- 0x800001c0, 0x05dc091b, 0x0500015f, 0x59a80805,
- 0x8c040514, 0x0500002a, 0x0501f978, 0x05020028,
- 0x0501f990, 0x05000026, 0x61327000, 0x59cc0001,
- 0x82000500, 0x00ffffff, 0x0501fbb4, 0x05000006,
- 0x61fe89ff, 0x42026800, 0x0010993e, 0x05f9fd6b,
- 0x481a6802, 0x599c0019, 0x8c000510, 0x05000139,
- 0x59a8021b, 0x8c000508, 0x05000136, 0x59cc1006,
- 0x82081500, 0xffff0000, 0x82081580, 0x03000000,
- 0x05020130, 0x91641490, 0x05001144, 0x8400054c,
- 0x4803521b, 0x59cc1000, 0x82081500, 0x00ffffff,
- 0x05fdfee5, 0x59cc0007, 0x82000500, 0x0000ffff,
- 0x48038893, 0x48035012, 0x0501f122, 0x59cc0006,
- 0x82000500, 0xffff0000, 0x82000d80, 0x03000000,
- 0x05020024, 0x59a8021b, 0x8c000508, 0x0500001c,
- 0x8400054c, 0x4803521b, 0x59cc0800, 0x82040d00,
- 0x00ffffff, 0x4807500f, 0x497b8830, 0x84040d70,
- 0x48078832, 0x59c40802, 0x84040d4c, 0x48078802,
- 0x59cc0007, 0x82000500, 0x0000ffff, 0x48038893,
- 0x48035012, 0x600c0800, 0x59a8100f, 0x0505f81b,
- 0x59cc0006, 0x82000500, 0x0000ffff, 0x05de08cd,
- 0x05020111, 0x605e7000, 0x0501f0cf, 0x05f9ff39,
- 0x05fe07f8, 0x8c000502, 0x05fe07f6, 0x0501f10a,
- 0x82000d80, 0x04000000, 0x05020013, 0x59cc0006,
- 0x82000500, 0x0000ffff, 0x05de08be, 0x05020102,
- 0x05f9ff2c, 0x05000002, 0x0501f0be, 0x497b507d,
- 0x42001000, 0x0010c159, 0x0501fc1f, 0x05f9fd21,
- 0x59a8021b, 0x84000548, 0x4803521b, 0x60c27000,
- 0x0501f0b5, 0x82000d80, 0x05000000, 0x05020008,
- 0x59cc0006, 0x82000500, 0x0000ffff, 0x05de08a9,
- 0x050200ed, 0x60627000, 0x0501f0ab, 0x82000d80,
- 0x20100000, 0x05020003, 0x60667000, 0x0501f0a6,
- 0x82000d80, 0x21100000, 0x05020003, 0x606a7000,
- 0x0501f0a1, 0x82000d80, 0x52000000, 0x05020008,
- 0x59cc0006, 0x82000500, 0x0000ffff, 0x05de0895,
- 0x050200d9, 0x606e7000, 0x0501f097, 0x82000d80,
- 0x50000000, 0x05020008, 0x59cc0006, 0x82000500,
- 0x0000ffff, 0x05de088b, 0x050200cf, 0x60727000,
- 0x0501f08d, 0x82000d80, 0x13000000, 0x05020003,
- 0x60d27000, 0x0501f088, 0x82000d80, 0x12000000,
- 0x05020008, 0x59cc0006, 0x82000500, 0x0000ffff,
- 0x05de087c, 0x050200c0, 0x60927000, 0x0501f07e,
- 0x82000d00, 0xff000000, 0x82040d80, 0x24000000,
- 0x05020003, 0x60b67000, 0x0501f077, 0x82000d00,
- 0xff000000, 0x82040d80, 0x53000000, 0x05020003,
- 0x60aa7000, 0x0501f070, 0x82000d80, 0x0f000000,
- 0x05020003, 0x60827000, 0x0501f06b, 0x82000d80,
- 0x61040000, 0x05020040, 0x4c5c0000, 0x4c600000,
- 0x4c640000, 0x4c580000, 0x91ccc406, 0x8060b800,
- 0x50600000, 0x82000500, 0x0000ffff, 0x82001480,
- 0x00000401, 0x0502102d, 0x90001503, 0x0502002b,
- 0x59a81073, 0x80081480, 0x05001028, 0x90000484,
- 0x8000b104, 0x8058b1c0, 0x05000024, 0x505cc800,
- 0x8264c500, 0x03000000, 0x8060c130, 0x42000000,
- 0x00109839, 0x90602580, 0x05020004, 0x42000000,
- 0x00109836, 0x0501f00a, 0x90602581, 0x05020004,
- 0x42000000, 0x00109837, 0x0501f005, 0x90602582,
- 0x05020003, 0x42000000, 0x00109838, 0x051dfef4,
- 0x60541100, 0x82642500, 0x0000ffff, 0x80641920,
- 0x05f1fb4c, 0x805cb800, 0x8058b040, 0x05fe07e4,
- 0x5c00b000, 0x5c00c800, 0x5c00c000, 0x5c00b800,
- 0x608e7000, 0x0501f030, 0x5c00b000, 0x5c00c800,
- 0x5c00c000, 0x5c00b800, 0x42000000, 0x0010986c,
- 0x051df6df, 0x82000d80, 0x60000000, 0x05020003,
- 0x60fe7000, 0x0501f024, 0x82000d80, 0x78000000,
- 0x05020003, 0x61167000, 0x0501f01f, 0x82000d80,
- 0x10000000, 0x05020003, 0x613a7000, 0x0501f01a,
- 0x82000d80, 0x63000000, 0x05020003, 0x612a7000,
- 0x0501f015, 0x82000d00, 0xff000000, 0x82040d80,
- 0x56000000, 0x05020003, 0x613e7000, 0x0501f00e,
- 0x82000d00, 0xff000000, 0x82040d80, 0x57000000,
- 0x05020003, 0x61427000, 0x0501f007, 0x82000d80,
- 0x7d000000, 0x05020003, 0x615a7000, 0x0501f002,
- 0x60767000, 0x59cc3800, 0x821c3d00, 0x00ffffff,
- 0x821c0580, 0x00fffffe, 0x59cc0001, 0x05020004,
- 0x40003000, 0x61fa880f, 0x0501f017, 0x0501f8f0,
- 0x05da0ff0, 0x05020034, 0x83440480, 0x000007f0,
- 0x05001001, 0x05f1fddf, 0x0500000f, 0x4c180000,
- 0x0001fac4, 0x5c003000, 0x0500000e, 0x4c180000,
- 0x0501f846, 0x5c003000, 0x05020007, 0x05f9fc43,
- 0x42026800, 0x0010993e, 0x481a6802, 0x61fe89ff,
- 0x0501f004, 0x05f5fe85, 0x05da0fda, 0x0502001e,
- 0x59340200, 0x8c000514, 0x0500000a, 0x913805b0,
- 0x05000008, 0x913805bf, 0x05000006, 0x913805b4,
- 0x05000004, 0x913805a4, 0x05000002, 0x61327000,
- 0x0509fbab, 0x05000015, 0x4936600a, 0x64126407,
- 0x83340580, 0x0010993e, 0x05020005, 0x59cc0001,
- 0x82000500, 0x00ffffff, 0x48026020, 0x59cc0c04,
- 0x48066202, 0xb138058c, 0x05020002, 0x64466407,
- 0x0005f105, 0x598800b7, 0x4803c857, 0x80000000,
- 0x480310b7, 0x1c01f000, 0x61241100, 0x59cc1806,
- 0x800c1930, 0x05f1facb, 0x0509fb99, 0x05d80fb1,
- 0x05fc07f5, 0x4936600a, 0x83340580, 0x0010993e,
- 0x05020005, 0x59cc0001, 0x82000500, 0x00ffffff,
- 0x48026020, 0x64126407, 0x59cc0c04, 0x48066202,
- 0x64266403, 0x6426641c, 0x4a02621c, 0x00002900,
- 0x64066203, 0x0501f5bf, 0x59a8021b, 0x4803c857,
- 0x8c000508, 0x05000013, 0x599c0019, 0x8c000510,
- 0x05020010, 0x59cc0006, 0x82000500, 0xff000000,
- 0x82000d80, 0x03000000, 0x0500000c, 0x82000d80,
- 0x20000000, 0x05000009, 0x82000d80, 0x05000000,
- 0x05000006, 0x82000d80, 0x21000000, 0x05000003,
- 0x80000580, 0x1c01f000, 0x90000541, 0x05fdf7fe,
- 0x59cc2006, 0x82102500, 0xff000000, 0x9c1021c0,
- 0x0501f807, 0x820c1c00, 0x001094cf, 0x500c1800,
- 0x800c0500, 0x4803c857, 0x1c01f000, 0x40100800,
- 0x41781800, 0x900404a0, 0x05001004, 0x800c1800,
- 0x40000800, 0x05fdf7fc, 0x9004050f, 0x82000400,
- 0x00108a8d, 0x50000000, 0x8c040508, 0x05000002,
- 0x900001c0, 0x1c01f000, 0x4803c856, 0x0501fa2d,
- 0x05020009, 0x05e5fee2, 0x05020007, 0x59cc0002,
- 0x82000500, 0xff000000, 0x82000d80, 0x08000000,
- 0x05000802, 0x1c01f000, 0x4803c856, 0x59cc0400,
- 0x82000d00, 0x0000ff00, 0x840409c0, 0x900405b3,
- 0x05020021, 0x0501f941, 0x05000051, 0x59cc0a04,
- 0x48066202, 0x59a80073, 0x90000484, 0x0500104c,
- 0x59cc0006, 0x4803c857, 0x82000500, 0xffff0000,
- 0x82000d80, 0x02000000, 0x05020007, 0x59cc0006,
- 0x82000500, 0x0000ffff, 0x05020041, 0x60567000,
- 0x0005f105, 0x82000d80, 0x01000000, 0x0502003c,
- 0x59cc0006, 0x82000500, 0x0000ffff, 0x05020038,
- 0x59a80073, 0x90000488, 0x05001035, 0x605a7000,
- 0x0005f105, 0x900405b2, 0x05020031, 0x59cc0006,
- 0x82000500, 0xffff0000, 0x82000d80, 0x14000000,
- 0x0502002b, 0x59a80073, 0x90000490, 0x05001028,
- 0x60e27000, 0x59cc0001, 0x0501f828, 0x05020024,
- 0x83440480, 0x000007f0, 0x05001001, 0x05f1fd19,
- 0x0500000f, 0x4c180000, 0x0001fac4, 0x5c003000,
- 0x0500000d, 0x4c180000, 0x05fdff80, 0x5c003000,
- 0x05020007, 0x05f9fb7d, 0x42026800, 0x0010993e,
- 0x481a6802, 0x61fe89ff, 0x0501f003, 0x05f5fdba,
- 0x0502000f, 0x0509faf2, 0x0500000d, 0x4936600a,
- 0x83340580, 0x0010993e, 0x05020005, 0x59cc0001,
- 0x82000500, 0x00ffffff, 0x48026020, 0x64126407,
- 0x59cc0c04, 0x48066202, 0x0005f105, 0x42000000,
- 0x0010986c, 0x051df5be, 0x4803c857, 0x4000d000,
- 0x82003500, 0x00ffffff, 0x0201f800, 0x0010c758,
- 0x40c40000, 0x90000581, 0x1c01f000, 0x59a8021b,
- 0x8c00050e, 0x05000003, 0x8c000502, 0x05000005,
- 0x59cc0c00, 0x80040910, 0x9004050f, 0x0c01f002,
- 0x1c01f000, 0x00104bc5, 0x00104bc5, 0x00104bc5,
- 0x00104c9c, 0x00104bc5, 0x00104bc7, 0x00104be7,
- 0x00104bea, 0x00104bc5, 0x00104bc5, 0x00104bc5,
- 0x00104bc5, 0x00104bc5, 0x00104bc5, 0x00104bc5,
- 0x00104bc5, 0x4803c856, 0x1c01f000, 0x0501f8c7,
- 0x0500001a, 0x59a80073, 0x9000048c, 0x05001017,
- 0x59300407, 0x90000583, 0x05020014, 0x59cc0001,
- 0x5932680a, 0x813669c0, 0x05000010, 0x59340802,
- 0x80040580, 0x82000500, 0x00ffffff, 0x0502000b,
- 0x59cc0a04, 0x59300202, 0x82001580, 0x0000ffff,
- 0x05000003, 0x80040580, 0x05020004, 0x48066202,
- 0x611a7000, 0x0005f105, 0x59cc0004, 0x4803c857,
- 0x42000000, 0x0010986d, 0x051df579, 0x59cc0004,
- 0x4803c857, 0x1c01f000, 0x0501f8a4, 0x05000016,
- 0x59a80073, 0x9000048c, 0x05001013, 0x59300407,
- 0x90000583, 0x05020010, 0x59cc0001, 0x82000500,
- 0x00ffffff, 0x5932680a, 0x813669c0, 0x0500000a,
- 0x59340802, 0x82040d00, 0x00ffffff, 0x80040580,
- 0x05020005, 0x59cc0a04, 0x48066202, 0x61167000,
- 0x0005f105, 0x59cc0004, 0x4803c857, 0x42000000,
- 0x0010986d, 0x051df55a, 0x59cc0004, 0x4803c857,
- 0x59cc0000, 0x82000500, 0xff000000, 0x59cc1001,
- 0x82081500, 0x00ffffff, 0x80080540, 0x4803c857,
- 0x4817c857, 0x0501f957, 0x05da0e92, 0x0502000f,
- 0x05e5fe0b, 0x05da0e8f, 0x0502000c, 0x59cc0002,
- 0x82000500, 0xff000000, 0x90000580, 0x05da0e89,
- 0x05020006, 0x9004050f, 0x90000c86, 0x05da1e85,
- 0x05021002, 0x0c01f003, 0x4803c856, 0x1c01f000,
- 0x00104c2a, 0x00104c2c, 0x00104c2a, 0x00104c2a,
- 0x00104c6b, 0x00104c78, 0x4803c856, 0x1c01f000,
- 0x59a80073, 0x800001c0, 0x05da0e76, 0x05fe07fb,
- 0x59cc0802, 0x4807c856, 0x8c04052e, 0x05020015,
- 0x42026000, 0x0010cc6c, 0x59cc0001, 0x05fdff6b,
- 0x05020008, 0x0001fac4, 0x05020006, 0x64166407,
- 0x64226203, 0x4936600a, 0x60227001, 0x0005f105,
- 0x4803c857, 0x61fe89ff, 0x417a6800, 0x59cc0001,
- 0x82000500, 0x00ffffff, 0x48026020, 0x05fdf7f4,
- 0x59cc0001, 0x4803c857, 0x05fdff58, 0x05da0e59,
- 0x05fe07de, 0x05f5fcfc, 0x05da0e56, 0x05fe07db,
- 0x59cc0005, 0x8c000500, 0x05020005, 0x59340200,
- 0x8c00050e, 0x05da0e4f, 0x05fe07d4, 0x05f9f806,
- 0x0502000b, 0x0501f835, 0x05d80e4a, 0x05fc07cf,
- 0x42026000, 0x0010cc6c, 0x4936600a, 0x640a6407,
- 0x64226203, 0x60227001, 0x0005f105, 0x0509fa20,
- 0x05fc07c6, 0x4936600a, 0x64126407, 0x59cc0c04,
- 0x48066202, 0x60067000, 0x0005f105, 0x59cc0802,
- 0x8c04052e, 0x05000009, 0x0501f820, 0x05000007,
- 0x0501f901, 0x05020005, 0x59cc0a04, 0x48066202,
- 0x60267001, 0x0005f105, 0x4933c857, 0x1c01f000,
- 0x59cc0004, 0x4803c857, 0x59a80073, 0x90000484,
- 0x0500100c, 0x59cc0802, 0x8c04052e, 0x05000009,
- 0x0501f80e, 0x05000007, 0x0501f8ef, 0x05020005,
- 0x59cc0a04, 0x48066202, 0x602a7001, 0x0005f105,
- 0x4933c857, 0x42000000, 0x0010986c, 0x051df4d4,
- 0x59cc0a04, 0x0501f002, 0x59cc0c04, 0x59a8000d,
- 0x59a81060, 0x80080400, 0x80040480, 0x05021007,
- 0x800400c4, 0x800408ca, 0x80040c00, 0x82066400,
- 0x0010ccb4, 0x1c01f000, 0x80000580, 0x05fdf7fe,
- 0x59cc0802, 0x8c04052e, 0x05020016, 0x05fdffed,
- 0x05000014, 0x59300407, 0x90000586, 0x05020011,
- 0x59cc0001, 0x82000500, 0x00ffffff, 0x5932680a,
- 0x813669c0, 0x0500000b, 0x59340802, 0x82040d00,
- 0x00ffffff, 0x80040580, 0x05020006, 0x59a80073,
- 0x800001c0, 0x05020003, 0x61467000, 0x0005f105,
- 0x59cc0004, 0x4803c857, 0x42000000, 0x0010986d,
- 0x051df4a7, 0x4803c856, 0x60143002, 0x0501f001,
- 0x481bc857, 0x4c5c0000, 0x4c600000, 0x4c640000,
- 0x41ccc800, 0x4014b800, 0x4018c000, 0x0501f805,
- 0x5c00c800, 0x5c00c000, 0x5c00b800, 0x1c01f000,
- 0x4803c856, 0x4c580000, 0x58640400, 0x82000500,
- 0x0000f000, 0x82000580, 0x0000c000, 0x05000018,
- 0x0509f9b3, 0x05000016, 0x58640001, 0x05fdfecf,
- 0x05020015, 0x05f5fc74, 0x05020013, 0x4936600a,
- 0x05ddf890, 0x05000010, 0x492e6019, 0x497a5800,
- 0x497a5a05, 0x485e5c05, 0x912cac06, 0x601cb000,
- 0x4064a000, 0x051dfd48, 0x4862641c, 0x64fa6403,
- 0x64066407, 0x64066203, 0x0501fbde, 0x5c00b000,
- 0x1c01f000, 0x0005f8e7, 0x05fdf7fd, 0x4803c856,
- 0x59cc0400, 0x82000d00, 0x0000ff00, 0x82040500,
- 0x0000f000, 0x840409c0, 0x82000580, 0x00002000,
- 0x05020044, 0x900405a2, 0x0502003b, 0x59c400a4,
- 0x9000050f, 0x90000c87, 0x05001003, 0x9000048c,
- 0x0500103e, 0x59cc0006, 0x82000500, 0xffff0000,
- 0x82000d80, 0x04000000, 0x05000038, 0x82000d80,
- 0x60000000, 0x05000035, 0x82000d80, 0x54000000,
- 0x05000032, 0x82000d80, 0x03000000, 0x05020019,
- 0x59a80a1b, 0x8c040502, 0x0502002c, 0x8c040508,
- 0x0502002a, 0x82000d80, 0x03000000, 0x05020003,
- 0x05f9fc00, 0x05000025, 0x05f5feac, 0x05000025,
- 0x59a80018, 0x800000d0, 0x59a8080f, 0x82040d00,
- 0x000000ff, 0x80040540, 0x59cc0800, 0x82040d00,
- 0x00ffffff, 0x80040580, 0x05020016, 0x0501f017,
- 0x59c40802, 0x8c04050c, 0x05020012, 0x82000d80,
- 0x52000000, 0x05fc07ed, 0x82000d80, 0x05000000,
- 0x05fc07ea, 0x82000d80, 0x50000000, 0x05fc07e7,
- 0x0501f008, 0x900405a3, 0x05020006, 0x05fdff5b,
- 0x05000004, 0x59300c03, 0x90040582, 0x05000003,
- 0x80000580, 0x0501f002, 0x90000541, 0x1c01f000,
- 0x59cc0006, 0x82000500, 0xffff0000, 0x82000d80,
- 0x03000000, 0x05000004, 0x82000d80, 0x52000000,
- 0x05fe07f4, 0x59a8021b, 0x90000509, 0x90000588,
- 0x05fc07f2, 0x05fdf7ef, 0x4803c857, 0x4c580000,
- 0x40003000, 0x61c0200f, 0x6040b000, 0x83ac7400,
- 0x000007f0, 0x50380000, 0x80026d40, 0x05000006,
- 0x59340002, 0x82000500, 0x00ffffff, 0x80180580,
- 0x0500000d, 0x80102000, 0x80387000, 0x8058b040,
- 0x05fe07f5, 0x82100480, 0x00000800, 0x60002000,
- 0x61c0b00f, 0x41ac7000, 0x05fe17ef, 0x90000541,
- 0x0501f002, 0x40128800, 0x5c00b000, 0x1c01f000,
- 0x59a8021b, 0x8c00050e, 0x05000004, 0x8c000502,
- 0x05000003, 0x80000580, 0x1c01f000, 0x90000541,
- 0x05fdf7fe, 0x59300c07, 0x90040582, 0x05000002,
- 0x90040585, 0x1c01f000, 0x59c80000, 0x84000558,
- 0x84000512, 0x48039000, 0x1c01f000, 0x82140500,
- 0x0000f000, 0x05000006, 0x82000c80, 0x00002000,
- 0x0502100a, 0x80000580, 0x1c01f000, 0x59cc0400,
- 0x82000500, 0x0000ff00, 0x82000580, 0x00008100,
- 0x05fc07fa, 0x0501f012, 0x4817c857, 0x82140500,
- 0x000003ff, 0x05020007, 0x59cc0400, 0x82000500,
- 0x0000ff00, 0x82000580, 0x00008100, 0x05020008,
- 0x42000000, 0x001098d2, 0x051dfbc9, 0x05fdff22,
- 0x4803c856, 0x90000541, 0x05fdf7e8, 0x41780000,
- 0x05fdf7e6, 0x05f9fb77, 0x0500000e, 0x59c400a4,
- 0x4803c857, 0x9000050f, 0x9000058a, 0x05020009,
- 0x497b5073, 0x59c400a3, 0x82000540, 0x00080000,
- 0x480388a3, 0x82000500, 0xfff7ffff, 0x480388a3,
- 0x4817c856, 0x051df2f7, 0x4a032824, 0x000003e8,
- 0x4a032802, 0x0010ccb4, 0x64032800, 0x4a032808,
- 0x001055f6, 0x60140000, 0x91947c09, 0x49787801,
- 0x4a007804, 0x001055a1, 0x903c7c05, 0x80000040,
- 0x05fe07fb, 0x4a032823, 0xffff0000, 0x6191d000,
- 0x0501f9af, 0x4201d000, 0x000186a0, 0x0501f1bc,
- 0x00000000, 0x00000005, 0x0000000a, 0x0000000f,
- 0x00000014, 0x00000002, 0x00000008, 0x00000020,
- 0x00000080, 0x00000200, 0x4d300000, 0x4d2c0000,
- 0x4d340000, 0x4d400000, 0x4cfc0000, 0x4d380000,
- 0x4d3c0000, 0x4d440000, 0x4d4c0000, 0x4d480000,
- 0x4c5c0000, 0x4c600000, 0x4c640000, 0x0001ff6b,
- 0x5c00c800, 0x5c00c000, 0x5c00b800, 0x5c029000,
- 0x5c029800, 0x5c028800, 0x5c027800, 0x5c027000,
- 0x5c01f800, 0x5c028000, 0x5c026800, 0x5c025800,
- 0x5c026000, 0x1c01f000, 0x59940004, 0x80000540,
- 0x05020008, 0x5994002f, 0x80040400, 0x05d81bf7,
- 0x48032804, 0x480b2805, 0x642b2803, 0x80000580,
- 0x1c01f000, 0x59940029, 0x80000540, 0x05020008,
- 0x5994002f, 0x80040400, 0x05d81bec, 0x48032829,
- 0x480b282a, 0x64072828, 0x80000580, 0x1c01f000,
- 0x40680800, 0x406c1000, 0x5994002c, 0x80000540,
- 0x05020008, 0x5994002f, 0x80040400, 0x05d81bdf,
- 0x4803282c, 0x480b282d, 0x642b282b, 0x80000580,
- 0x1c01f000, 0x4c000000, 0x59940005, 0x80080580,
- 0x05020003, 0x497b2804, 0x497b2805, 0x5c000000,
- 0x1c01f000, 0x40681000, 0x05fdfff7, 0x1c01f000,
- 0x4c000000, 0x5994002a, 0x80080580, 0x05020003,
- 0x497b2829, 0x497b282a, 0x5c000000, 0x1c01f000,
- 0x4c000000, 0x5994002d, 0x80080580, 0x05020003,
- 0x497b282c, 0x497b282d, 0x5c000000, 0x1c01f000,
- 0x4937c857, 0x48ebc857, 0x59340203, 0x80e80480,
- 0x05001002, 0x48ea6a03, 0x1c01f000, 0x4d440000,
- 0x60407800, 0x59968801, 0x0001fac4, 0x05020050,
- 0x59341a03, 0x800c1840, 0x05001015, 0x59940031,
- 0x800c0480, 0x05000003, 0x48026a03, 0x05021010,
- 0x5934000f, 0x497a6a03, 0x80000540, 0x05000044,
- 0x5934000b, 0x80001120, 0x82000500, 0x0000ffff,
- 0x80080480, 0x05001003, 0x64066a03, 0x0501f004,
- 0x4c3c0000, 0x0001fad1, 0x5c007800, 0x4d2c0000,
- 0x41781800, 0x5934000f, 0x80025d40, 0x05000033,
- 0x592c0004, 0x80000d40, 0x05000006, 0x59940031,
- 0x80040480, 0x48025804, 0x05001007, 0x05000006,
- 0x412c1800, 0x592c0000, 0x80025d40, 0x05000027,
- 0x05fdf7f4, 0x592c2000, 0x497a5800, 0x800c19c0,
- 0x05020009, 0x59340010, 0x812c0580, 0x05020004,
- 0x497a680f, 0x497a6810, 0x0501f008, 0x4812680f,
- 0x0501f006, 0x48101800, 0x59340010, 0x812c0580,
- 0x05020002, 0x480e6810, 0x592c0205, 0x82000500,
- 0x000000ff, 0x90000592, 0x05020003, 0x642e5a07,
- 0x0501f007, 0x4a025a05, 0x00000103, 0x641a5a07,
- 0x497a580a, 0x4a025c07, 0x0000ffff, 0x4c0c0000,
- 0x4c100000, 0x0001fb2c, 0x5c002000, 0x5c001800,
- 0x40100000, 0x05fdf7d9, 0x5c025800, 0x81468800,
- 0x83440480, 0x00000800, 0x05021007, 0x803c7840,
- 0x05fe07aa, 0x49472801, 0x5c028800, 0x5c03e000,
- 0x1c01f000, 0x640b2800, 0x497b2801, 0x05fdf7fb,
- 0x60407800, 0x59966002, 0x59300205, 0x80000d40,
- 0x05000006, 0x59940031, 0x80040480, 0x48026205,
- 0x05001027, 0x05000026, 0x59300006, 0x80000d40,
- 0x05000010, 0x4203e000, 0xb0800000, 0x4203f800,
- 0x0c000000, 0x40000000, 0x40000000, 0x40000000,
- 0x0503b008, 0x59940031, 0x80040480, 0x48026006,
- 0x4203f800, 0x08000000, 0x05001019, 0x05000018,
- 0x91326424, 0x49332802, 0x41540000, 0x81300480,
- 0x05021005, 0x803c7840, 0x05fe07e0, 0x5c03e000,
- 0x1c01f000, 0x59940030, 0x48032831, 0x4a032802,
- 0x0010ccb4, 0x497b2830, 0x80000540, 0x0500000c,
- 0x64072800, 0x5c03e000, 0x1c01f000, 0x4c3c0000,
- 0x0511fc35, 0x5c007800, 0x05fdf7d8, 0x4c3c0000,
- 0x0511f8e4, 0x5c007800, 0x05fdf7e6, 0x64032800,
- 0x5c03e000, 0x1c01f000, 0x59a80872, 0x8c040530,
- 0x05020025, 0x8c040532, 0x0500000f, 0x59a80061,
- 0x81640480, 0x05001016, 0x59a8000b, 0x81500580,
- 0x05000005, 0x59a8005f, 0x59a8105e, 0x80080580,
- 0x0502000f, 0x900411c0, 0x82081500, 0x00007000,
- 0x0501f00f, 0x9004051f, 0x05000013, 0x80040840,
- 0x9004051f, 0x05000003, 0x48075072, 0x0501f00e,
- 0x900401c0, 0x9000051f, 0x80040d40, 0x900401c0,
- 0x80040580, 0x82001500, 0x00007000, 0x82040500,
- 0xffff8fff, 0x80080540, 0x48035072, 0x80081114,
- 0x05d9fd19, 0x1c01f000, 0x4a032807, 0x000007d0,
- 0x642b2806, 0x4a01a8e5, 0x00000c00, 0x1c01f000,
- 0x60100800, 0x91180485, 0x05da1aec, 0x91947c09,
- 0x83180400, 0x00104dc4, 0x50000000, 0x803c7c00,
- 0x4a007801, 0x000001f4, 0x48047802, 0x64287800,
- 0x49787803, 0x83180400, 0x00104dc9, 0x50000000,
- 0x82000540, 0x00000155, 0x4801a8e5, 0x1c01f000,
- 0x91180485, 0x05da1ad9, 0x91947c09, 0x83180400,
- 0x00104dc4, 0x50000000, 0x803c7c00, 0x583c0002,
- 0x80000040, 0x48007802, 0x05000004, 0x4a007801,
- 0x000001f4, 0x64287800, 0x1c01f000, 0x91180485,
- 0x05da1aca, 0x91947c09, 0x83180400, 0x00104dc4,
- 0x50000000, 0x803c7c00, 0x49787801, 0x83180400,
- 0x00104dc9, 0x50000000, 0x4801a8e5, 0x1c01f000,
- 0x40680800, 0x406c1000, 0x0501f802, 0x1c01f000,
- 0x4807c857, 0x480bc857, 0x5994002f, 0x80040400,
- 0x05d81ab6, 0x48032804, 0x480b2805, 0x642b2803,
- 0x1c01f000, 0x4807c857, 0x480bc857, 0x5994002f,
- 0x80040400, 0x05d81aad, 0x48032826, 0x480b2827,
- 0x642b2825, 0x1c01f000, 0x4c000000, 0x59940027,
- 0x80080580, 0x05020003, 0x48032826, 0x48032827,
- 0x5c000000, 0x1c01f000, 0x4807c857, 0x480bc857,
- 0x5994002f, 0x80040400, 0x05d81a9c, 0x4803282c,
- 0x480b282d, 0x642b282b, 0x1c01f000, 0x80e9d1c0,
- 0x0500000c, 0x0501f82e, 0x05025000, 0x4203e000,
- 0x80000000, 0x40e81000, 0x41780800, 0x61900000,
- 0x0501f8b4, 0x5994002e, 0x80080400, 0x4803282e,
- 0x1c01f000, 0x42001000, 0x00104064, 0x05fdfeae,
- 0x42001000, 0x00104057, 0x05fdffdc, 0x42001000,
- 0x001035bf, 0x05fdfea8, 0x42001000, 0x00103637,
- 0x05fdfea5, 0x42001000, 0x0010359e, 0x05fdfea2,
- 0x42001000, 0x00103661, 0x05fdf6b2, 0x4203e000,
- 0x70000000, 0x4203e000, 0xb0300000, 0x40ebf800,
- 0x60f00000, 0x05004004, 0x80000040, 0x05fe07fe,
- 0x0501f006, 0x4203e000, 0x70000000, 0x42000000,
- 0x00109893, 0x051df9e2, 0x1c01f000, 0x4203e000,
- 0x80000000, 0x4203e000, 0xb0400000, 0x40ebf800,
- 0x60f00000, 0x05005004, 0x80000040, 0x05fe07fe,
- 0x0501f006, 0x4203e000, 0x80000000, 0x42000000,
- 0x00109894, 0x051df9d2, 0x1c01f000, 0x59a8080d,
- 0x59a80262, 0x80040480, 0x599c0a02, 0x800409c0,
- 0x05020002, 0x80040800, 0x80041480, 0x05001002,
- 0x40000800, 0x48075060, 0x59a8100d, 0x40040000,
- 0x800acc80, 0x4967500d, 0x49675061, 0x59aaa80b,
- 0x41640800, 0x60901000, 0x0501f84e, 0x8206a400,
- 0x0010ccb4, 0x4953505d, 0x4152b000, 0x42006000,
- 0x00109973, 0x4a006005, 0x0000012c, 0x4a006006,
- 0xda10da10, 0x64486009, 0x4a00600a, 0x00109973,
- 0x4a00600b, 0x00100cd9, 0x599c0014, 0x48006012,
- 0x599c0015, 0x48006013, 0x42006000, 0x0010cc24,
- 0x64206203, 0x64186407, 0x4a006002, 0xffff0000,
- 0x4a006009, 0x00109973, 0x4a006016, 0x00109973,
- 0x599c0014, 0x48006017, 0x599c0015, 0x48006018,
- 0x599c0413, 0x48006019, 0x4950601a, 0x4954601b,
- 0x59a80060, 0x4800601c, 0x4a00601d, 0x0010945d,
- 0x4a00601e, 0x0010945e, 0x4a00601f, 0x0010945f,
- 0x42000000, 0xb0000000, 0x42000800, 0x0010cc24,
- 0x0001f91e, 0x1c01f000, 0x4807c856, 0x59a80082,
- 0x800409c0, 0x05000003, 0x80080540, 0x0501f002,
- 0x80080500, 0x48035082, 0x1c01f000, 0x4803c856,
- 0x4c000000, 0x05fdfbc1, 0x0502000b, 0x05f5f966,
- 0x05da0a02, 0x5c000000, 0x48026802, 0x0505fe9c,
- 0x05000006, 0x4936600a, 0x64066407, 0x60067000,
- 0x0005f105, 0x5c000000, 0x1c01f000, 0x05d9f9f7,
- 0x4c0c0000, 0x4c100000, 0x4c140000, 0x4c180000,
- 0x80001d80, 0x80002580, 0x60803000, 0x90040501,
- 0x05000003, 0x40080000, 0x800c1c00, 0x400c2800,
- 0x800c1902, 0x80102102, 0x90140501, 0x05000003,
- 0x82102540, 0x80000000, 0x80040902, 0x80183040,
- 0x05fe07f3, 0x40100800, 0x400c0000, 0x5c003000,
- 0x5c002800, 0x5c002000, 0x5c001800, 0x1c01f000,
- 0x4c580000, 0x6080b000, 0x80000540, 0x05000018,
- 0x80041c80, 0x05021016, 0x800810c2, 0x80040982,
- 0x05001006, 0x80041c80, 0x05021005, 0x8058b040,
- 0x05fe07fa, 0x0501f006, 0x80041c80, 0x400c0800,
- 0x80081000, 0x8058b040, 0x05fe07f4, 0x4c000000,
- 0x41f00000, 0x82000500, 0xf7ffffff, 0x4003e000,
- 0x5c000000, 0x5c00b000, 0x1c01f000, 0x4c000000,
- 0x41f00000, 0x82000540, 0x08000000, 0x05fdf7f8,
- 0x42007000, 0x001094f1, 0x64147000, 0x64007401,
- 0x4a007201, 0x00000840, 0x64147202, 0x6401a8e8,
- 0x6443c82b, 0x0501f837, 0x4a01a8e9, 0x00003a0d,
- 0x4a01a8ee, 0x00080202, 0x6405a8e8, 0x640378e8,
- 0x6443c821, 0x6413c823, 0x0501f860, 0x4a0378e9,
- 0x00003a0d, 0x4a0378ee, 0x00080382, 0x640778e8,
- 0x41780800, 0x6003a0ec, 0x4a03a005, 0xd0000001,
- 0x59d00006, 0x4a03a005, 0x90000001, 0x59d00006,
- 0x4a03a005, 0x60000001, 0x59d00006, 0x4a03a005,
- 0x60000003, 0x59d00006, 0x4a03a005, 0x60000005,
- 0x59d00006, 0x4a03a005, 0x60000007, 0x59d00006,
- 0x4a03a005, 0x60000009, 0x59d00006, 0x4a03a005,
- 0x6000000b, 0x91d3a420, 0x80040800, 0x90040485,
- 0x05fc17e8, 0x59e00003, 0x82000500, 0xffffffe0,
- 0x82000540, 0x00008000, 0x4803c003, 0x59c40006,
- 0x82000500, 0xfffcffff, 0x48038806, 0x1c01f000,
- 0x4d900000, 0x4d180000, 0x4c500000, 0x4c580000,
- 0x4c540000, 0x4a01a8e7, 0xaaaaaaaa, 0x4a01a8e6,
- 0xaaaaaaaa, 0x4a01a8e5, 0xaaaaaaaa, 0x4a01a8e4,
- 0xaaaaaaaa, 0x4a01a8ee, 0x00200000, 0x4979a8ee,
- 0x6000b001, 0x90d4ac00, 0x4178a000, 0x051df9b2,
- 0x4a01a81d, 0x00100cd5, 0x4a01a81b, 0x00100cde,
- 0x4a01a81c, 0x00100cee, 0x4a01a81e, 0x00109784,
- 0x64031800, 0x600c0800, 0x42001800, 0x00109787,
- 0x417a3000, 0x811b20c8, 0x83932400, 0x0000b037,
- 0x48072000, 0x480f2001, 0x64032002, 0x800408c4,
- 0x900c1c05, 0x811a3000, 0x91180485, 0x05fc17f6,
- 0x5c00a800, 0x5c00b000, 0x5c00a000, 0x5c023000,
- 0x5c032000, 0x1c01f000, 0x4cd80000, 0x4d180000,
- 0x4a0378e7, 0xaaaaaaaa, 0x4a0378e6, 0xaaaaaaaa,
- 0x4a0378e5, 0xaaaaaaaa, 0x4a0378e4, 0xaaaaaaaa,
- 0x4a03781b, 0x00100cde, 0x4a03781c, 0x00100cee,
- 0x4a03781d, 0x001094f4, 0x4a03781e, 0x001094fb,
- 0x42000800, 0x00109787, 0x417a3000, 0x8119b0c8,
- 0x82d9b400, 0x0000bf32, 0x83180400, 0x001056aa,
- 0x50000000, 0x4801b002, 0x90040c05, 0x811a3000,
- 0x91180485, 0x05fc17f6, 0x5c023000, 0x5c01b000,
- 0x1c01f000, 0x40680800, 0x0005f87c, 0x1c01f000,
- 0x4933c857, 0x59300804, 0x82040d00, 0x00000100,
- 0x82040d40, 0x80000040, 0x48066004, 0x497a6000,
- 0x58d400ea, 0x8c000516, 0x05fe07fe, 0x83300400,
- 0x60000000, 0x4801a8e1, 0x1c01f000, 0x598c000b,
- 0x81300580, 0x05000003, 0x497a6008, 0x1c01f000,
- 0x59c40004, 0x9000050c, 0x05000005, 0x64338804,
- 0x4a01a8e5, 0x00000800, 0x0501f008, 0x0501fb05,
- 0x59300403, 0xb0000d80, 0x05000003, 0xb0000582,
- 0x05020002, 0x497a6008, 0x0501fd99, 0x80000580,
- 0x1c01f000, 0x0501f805, 0x60058800, 0x05000002,
- 0x60018800, 0x1c01f000, 0x59300804, 0x8c040520,
- 0x05020003, 0x90000541, 0x1c01f000, 0x4933c857,
- 0x4d380000, 0x59300804, 0x84040d20, 0x48066004,
- 0x61267000, 0x59300203, 0x90000583, 0x05000002,
- 0x604e7000, 0x0005f905, 0x80000580, 0x5c027000,
- 0x1c01f000, 0x0501f805, 0x60058800, 0x05000002,
- 0x60018800, 0x1c01f000, 0x59300019, 0x81480580,
- 0x05020003, 0x5930001a, 0x814c0580, 0x1c01f000,
- 0x4d2c0000, 0x4d300000, 0x0501f8b1, 0x4df00000,
- 0x05fdfe0b, 0x59900002, 0x90000503, 0x0c01f001,
- 0x00105124, 0x00105119, 0x00105118, 0x00105118,
- 0x05d9f8ce, 0x59926005, 0x0501f874, 0x813261c0,
- 0x05000008, 0x59300004, 0x8c000516, 0x05000004,
- 0x59325809, 0x497a5809, 0x497a580a, 0x0501f871,
- 0x5c03e000, 0x05000886, 0x5c026000, 0x5c025800,
- 0x1c01f000, 0x5c000000, 0x4c000000, 0x4803c857,
- 0x4d300000, 0x4a01a8e5, 0x00000800, 0x0501f890,
- 0x4df00000, 0x598c0000, 0x90000507, 0x4803c857,
- 0x0c01f001, 0x00105155, 0x0010513e, 0x00105145,
- 0x00105148, 0x00105152, 0x00105155, 0x0010513d,
- 0x0010513d, 0x05d9f8a9, 0x598c000b, 0x80026540,
- 0x05000003, 0x0501f818, 0x05da08a4, 0x0501fd3c,
- 0x0501f011, 0x0501f823, 0x0501fd39, 0x0501f00e,
- 0x598c000b, 0x80026540, 0x0500000b, 0x0501f834,
- 0x05000004, 0x0501f80c, 0x05000002, 0x0501f819,
- 0x0501fd2f, 0x0501f004, 0x0501f82d, 0x05da0893,
- 0x0501fd2b, 0x5c03e000, 0x05000855, 0x5c026000,
- 0x1c01f000, 0x598c0007, 0x81300580, 0x0502000c,
- 0x0501f848, 0x0501f837, 0x59300000, 0x800001c0,
- 0x05000004, 0x48031807, 0x497a6000, 0x0501f003,
- 0x497b1807, 0x497b1806, 0x80000580, 0x1c01f000,
- 0x4d2c0000, 0x59300407, 0x90000583, 0x05020012,
- 0x598c0009, 0x81300580, 0x0502000f, 0x0501f835,
- 0x59325809, 0x497a5809, 0x497a580a, 0x0501f821,
- 0x59300000, 0x800001c0, 0x05000004, 0x48031809,
- 0x497a6000, 0x0501f003, 0x497b1808, 0x497b1809,
- 0x80000580, 0x5c025800, 0x1c01f000, 0x598c0003,
- 0x81300580, 0x0502000c, 0x0501f822, 0x0501f811,
- 0x59300000, 0x800001c0, 0x05000004, 0x48031803,
- 0x497a6000, 0x0501f003, 0x497b1803, 0x497b1802,
- 0x80000580, 0x1c01f000, 0x64032002, 0x497b2005,
- 0x497b2006, 0x497b2007, 0x4979b003, 0x1c01f000,
- 0x4c040000, 0x59300004, 0x82000500, 0x7ffeffff,
- 0x48026004, 0x58d400e4, 0x8c000514, 0x05000007,
- 0x58d40011, 0x81300580, 0x05020004, 0x4979a811,
- 0x4a01a8e4, 0x00000800, 0x5c000800, 0x1c01f000,
- 0x4803c856, 0x598c000a, 0x80000540, 0x05000003,
- 0x80000040, 0x4803180a, 0x1c01f000, 0x58d400ea,
- 0x90000507, 0x90000583, 0x05020003, 0x4803c856,
- 0x6405a8e8, 0x59bc00ea, 0x90000507, 0x90000583,
- 0x05020005, 0x4803c856, 0x640778e8, 0x4a0370e4,
- 0x00000800, 0x1c01f000, 0x0501f805, 0x60058800,
- 0x05000002, 0x60018800, 0x1c01f000, 0x60042800,
- 0x58d400ea, 0x90000507, 0x90000581, 0x0502000d,
- 0x4803c856, 0x60000800, 0x0501f831, 0x60000820,
- 0x58d400ea, 0x90000507, 0x90000583, 0x05000004,
- 0x80040840, 0x05fe07fb, 0x05d9f818, 0x41782800,
- 0x59bc00ea, 0x90000507, 0x90000581, 0x0502000e,
- 0x4803c856, 0x60000800, 0x0501f80d, 0x4a0370e4,
- 0x00000c00, 0x60000820, 0x59bc00ea, 0x90000507,
- 0x90000583, 0x05000005, 0x80040840, 0x05fe07fb,
- 0x05d9f806, 0x801429c0, 0x1c01f000, 0x59bc00ea,
- 0x90000507, 0x90000581, 0x05da0800, 0x59bc00ea,
- 0x8c000516, 0x05fe07fe, 0x480778e1, 0x1c01f000,
- 0x40681000, 0x406c0800, 0x59bc00ea, 0x8c000516,
- 0x05fe07fe, 0x480778e1, 0x59bc00ea, 0x8c000516,
- 0x05fe07fe, 0x480b78e1, 0x1c01f000, 0x58d400ea,
- 0x8c000516, 0x05fe07fe, 0x4805a8e1, 0x1c01f000,
- 0x58d400ea, 0x8c000516, 0x05fe07fe, 0x4805a8e1,
- 0x58d400ea, 0x8c000516, 0x05fe07fe, 0x4809a8e1,
- 0x1c01f000, 0x4a0378e4, 0x00002000, 0x42007000,
- 0x001094f1, 0x58380401, 0x8c000506, 0x05020003,
- 0x4a01a8e4, 0x00008000, 0x1c01f000, 0x82000d00,
- 0x02000018, 0x05d60fcb, 0x05d5ffd4, 0x0010530b,
- 0x00105320, 0x0010521a, 0x0010530a, 0x00105219,
- 0x001052ac, 0x05d5ffcd, 0x4d2c0000, 0x4d300000,
- 0x58d400ea, 0x8c000510, 0x05fc07fe, 0x58d660e0,
- 0x813261c0, 0x05d40fc5, 0x59300004, 0x8c000520,
- 0x05000010, 0x82000500, 0xfffefeff, 0x48026004,
- 0x59325809, 0x59301407, 0x90080583, 0x05000006,
- 0x90080586, 0x05d60fb9, 0x592c0a07, 0x0005f84e,
- 0x0501f006, 0x0001fb2c, 0x0005f8e7, 0x0501f003,
- 0x84000510, 0x48026004, 0x5c026000, 0x5c025800,
- 0x1c01f000, 0x82000d00, 0x82000018, 0x05d60fa1,
- 0x05d5ffaa, 0x0010524d, 0x0010524d, 0x0010524d,
- 0x0010524d, 0x0010524e, 0x0010528e, 0x0010524d,
- 0x001052dd, 0x0010524d, 0x0010530a, 0x0010524d,
- 0x0010524d, 0x0010526d, 0x0010524d, 0x0010524d,
- 0x0010524d, 0x05d5ff99, 0x4d300000, 0x4d900000,
- 0x4dd00000, 0x4da40000, 0x4d140000, 0x4cd80000,
- 0x0501fc43, 0x59bc00ea, 0x8c000510, 0x05fc07fe,
- 0x59be60e0, 0x59300004, 0x8c000520, 0x0500000f,
- 0x82000500, 0xfffefeff, 0x48026004, 0x640e6203,
- 0x05fdff5f, 0x05ddf9d1, 0x5c01b000, 0x5c022800,
- 0x5c034800, 0x5c03a000, 0x5c032000, 0x5c026000,
- 0x642378e4, 0x05fdf742, 0x84000510, 0x48026004,
- 0x05fdf7f6, 0x4d2c0000, 0x4d300000, 0x59bc00ea,
- 0x8c000510, 0x05fc07fe, 0x59be60e0, 0x813261c0,
- 0x05d40f72, 0x59300004, 0x8c000520, 0x05000014,
- 0x82000500, 0xfffefeff, 0x48026004, 0x59301407,
- 0x90080583, 0x05d60f69, 0x0201f800, 0x0010ba3e,
- 0x80c40040, 0x05d60f65, 0x59325809, 0x60040800,
- 0x600a8000, 0x05f5fcf1, 0x0001fb2c, 0x0005f8e7,
- 0x5c026000, 0x5c025800, 0x1c01f000, 0x84000510,
- 0x48026004, 0x05fdf7fb, 0x4d300000, 0x4d900000,
- 0x4dd00000, 0x4da40000, 0x4d140000, 0x4cd80000,
- 0x0501fc03, 0x59bc00ea, 0x8c000510, 0x05fc07fe,
- 0x59be60e0, 0x59300004, 0x8c000520, 0x0500000e,
- 0x82000500, 0xfffefeff, 0x48026004, 0x05fdff20,
- 0x05ddf9c5, 0x5c01b000, 0x5c022800, 0x5c034800,
- 0x5c03a000, 0x5c032000, 0x5c026000, 0x642378e4,
- 0x05fdf703, 0x84000510, 0x48026004, 0x05fdf7f6,
- 0x4d300000, 0x4d2c0000, 0x4d340000, 0x4da40000,
- 0x4cd00000, 0x58d400ea, 0x8c000510, 0x05fc07fe,
- 0x58d660e0, 0x813261c0, 0x05d40f30, 0x59300004,
- 0x8c000520, 0x0500001c, 0x82000500, 0xfffefeff,
- 0x48026004, 0x5932680a, 0x42034800, 0x001094f4,
- 0x05011000, 0x4a03c840, 0x001094fb, 0x644bc842,
- 0x05011000, 0x4a03c840, 0x0010950d, 0x4a03c842,
- 0x000000ff, 0x05011000, 0x4a03c840, 0x0010960c,
- 0x4a03c842, 0x000000ff, 0x0501fbe1, 0x5c01a000,
- 0x5c034800, 0x5c026800, 0x5c025800, 0x5c026000,
- 0x1c01f000, 0x84000510, 0x48026004, 0x5c01a000,
- 0x5c034800, 0x5c026800, 0x5c025800, 0x5c026000,
- 0x1c01f000, 0x4d300000, 0x4d2c0000, 0x4d340000,
- 0x4cd00000, 0x4d900000, 0x4dd00000, 0x4da40000,
- 0x4d140000, 0x4cd80000, 0x0501fbb1, 0x59bc00ea,
- 0x8c000510, 0x05fc07fe, 0x59be60e0, 0x813261c0,
- 0x05d40efa, 0x59300004, 0x8c000520, 0x0500000f,
- 0x82000500, 0xfffefeff, 0x48026004, 0x0505f9ec,
- 0x5c01b000, 0x5c022800, 0x5c034800, 0x5c03a000,
- 0x5c032000, 0x5c01a000, 0x5c026800, 0x5c025800,
- 0x5c026000, 0x1c01f000, 0x84000510, 0x48026004,
- 0x5c01b000, 0x5c022800, 0x5c034800, 0x5c03a000,
- 0x5c032000, 0x5c01a000, 0x5c026800, 0x5c025800,
- 0x5c026000, 0x1c01f000, 0x05d5fedc, 0x4d300000,
- 0x4d380000, 0x42000000, 0x001098d9, 0x0519fe50,
- 0x05fdfeaf, 0x598e600b, 0x59c40004, 0x8c000506,
- 0x05000003, 0x0501f8cf, 0x64238804, 0x813261c0,
- 0x05000004, 0x0501fb79, 0x60527000, 0x0005f905,
- 0x6409a8e4, 0x5c027000, 0x5c026000, 0x05fdf68c,
- 0x4d180000, 0x4d300000, 0x4d380000, 0x4d900000,
- 0x4dd00000, 0x4da40000, 0x4d140000, 0x4cd80000,
- 0x05fdfe97, 0x417a3000, 0x59c40804, 0x83180400,
- 0x0010565b, 0x50000000, 0x80040500, 0x05000017,
- 0x42000000, 0x001098da, 0x0519fe2d, 0x0501fb64,
- 0x59926005, 0x0501f858, 0x83180400, 0x0010565b,
- 0x50000000, 0x48038804, 0x813261c0, 0x05000007,
- 0x59300004, 0x8c00050c, 0x05020002, 0x640e6203,
- 0x612a7000, 0x0005f905, 0x59c40004, 0x82000500,
- 0x00f80000, 0x05000004, 0x811a3000, 0x91180485,
- 0x05fc17e2, 0x6421a8e4, 0x5c01b000, 0x5c022800,
- 0x5c034800, 0x5c03a000, 0x5c032000, 0x5c027000,
- 0x5c026000, 0x5c023000, 0x05fdf659, 0x4d2c0000,
- 0x4d340000, 0x5932680a, 0x598c0800, 0x90040584,
- 0x05020004, 0x918c1403, 0x918c1c02, 0x0501f00a,
- 0x90040581, 0x05020004, 0x918c1407, 0x918c1c06,
- 0x0501f005, 0x90040582, 0x05020024, 0x918c1409,
- 0x918c1c08, 0x41306800, 0x58340000, 0x80007d40,
- 0x0500001e, 0x583c000a, 0x81340580, 0x05020006,
- 0x403c6800, 0x583c0000, 0x80007d40, 0x05fe07fa,
- 0x0501f016, 0x4933c857, 0x483fc857, 0x583c0000,
- 0x48006800, 0x49307800, 0x443c1000, 0x500c0000,
- 0x803c0580, 0x05020002, 0x44341800, 0x80000580,
- 0x4803180b, 0x4803180d, 0x598c0000, 0x90000583,
- 0x05000002, 0x64031800, 0x80000580, 0x5c026800,
- 0x5c025800, 0x1c01f000, 0x90000541, 0x05fdf7fc,
- 0x0501f805, 0x60018800, 0x05000002, 0x60058800,
- 0x1c01f000, 0x491bc857, 0x59b400f6, 0x90000538,
- 0x05fe07fe, 0x59c80840, 0x90040550, 0x48039040,
- 0x59c41008, 0x4c040000, 0x4c080000, 0x82081500,
- 0xffffff7f, 0x480b8808, 0x0501faa3, 0x05020006,
- 0x0501faa7, 0x05000020, 0x48038804, 0x05ddf901,
- 0x0501f03b, 0x64238803, 0x59c40003, 0x90000503,
- 0x05fc07fe, 0x8c000502, 0x05020006, 0x0501fa9c,
- 0x05000015, 0x48038804, 0x05ddf8f6, 0x0501f030,
- 0x0501fa9d, 0x05020007, 0x59c80040, 0x8400056a,
- 0x48039040, 0x59c80040, 0x8c00052a, 0x05fe07fe,
- 0x59c40005, 0x82000500, 0xc0000000, 0x05000006,
- 0x59c400a3, 0x84000540, 0x480388a3, 0x4a038805,
- 0xc0000000, 0x05ddf8b4, 0x4a03a005, 0x30000000,
- 0x59d00006, 0x4a03a005, 0x30000000, 0x6401b006,
- 0x59d00005, 0x8c000504, 0x05fe07fe, 0x600008ec,
- 0x83180540, 0x60000000, 0x480008a1, 0x811800dc,
- 0x59c80840, 0x80040540, 0x48039040, 0x82000540,
- 0x00003000, 0x48039040, 0x59c80040, 0x82000500,
- 0x00003000, 0x05fe07fd, 0x05ddf8bb, 0x83180400,
- 0x0010565b, 0x50000000, 0x48038804, 0x80000580,
- 0x4df00000, 0x05fdfb3e, 0x5c03e000, 0x5c001000,
- 0x5c000800, 0x480b8808, 0x48079040, 0x1c01f000,
- 0x4803c856, 0x59b400f6, 0x90000538, 0x05fe07fe,
- 0x59c80840, 0x90040550, 0x48039040, 0x59c41008,
- 0x4c040000, 0x4c080000, 0x82081500, 0xffffff7f,
- 0x480b8808, 0x59c40004, 0x90000503, 0x0502000e,
- 0x59c40004, 0x9000050c, 0x05000004, 0x64338804,
- 0x8c000504, 0x0501f022, 0x59c80040, 0x8400056e,
- 0x48039040, 0x59c80040, 0x8c00052e, 0x05fe07fe,
- 0x0501f01b, 0x64238803, 0x59c40003, 0x90000503,
- 0x05fc07fe, 0x8c000502, 0x05020005, 0x59c40004,
- 0x64338804, 0x8c000504, 0x0501f011, 0x59c80040,
- 0x8400056a, 0x48039040, 0x59c80040, 0x8c00052a,
- 0x05fe07fe, 0x59c40005, 0x82000500, 0xc0000000,
- 0x05000007, 0x59c400a3, 0x84000540, 0x480388a3,
- 0x4a038805, 0xc0000000, 0x80000580, 0x4a01a8e5,
- 0x00000800, 0x5c001000, 0x5c000800, 0x480b8808,
- 0x48079040, 0x1c01f000, 0x0501f805, 0x60058800,
- 0x05000002, 0x60018800, 0x1c01f000, 0x5c000000,
- 0x4c000000, 0x4803c857, 0x491bc857, 0x4933c857,
- 0x4d900000, 0x4dd00000, 0x4da40000, 0x4d140000,
- 0x4cd80000, 0x05fdfd8e, 0x4df00000, 0x0501fa64,
- 0x59900005, 0x800001c0, 0x05000012, 0x81300580,
- 0x05020010, 0x59300004, 0x84000520, 0x48026004,
- 0x05fdff51, 0x0502000a, 0x5c03e000, 0x05fc0d6c,
- 0x80000580, 0x5c01b000, 0x5c022800, 0x5c034800,
- 0x5c03a000, 0x5c032000, 0x1c01f000, 0x05fdfcc5,
- 0x61267000, 0x59300004, 0x84000520, 0x48026004,
- 0x8c00050c, 0x00060905, 0x5c03e000, 0x05fc0d5c,
- 0x90000541, 0x5c01b000, 0x5c022800, 0x5c034800,
- 0x5c03a000, 0x5c032000, 0x1c01f000, 0x0501f805,
- 0x60058800, 0x05000002, 0x60018800, 0x1c01f000,
- 0x4933c857, 0x05fdfd62, 0x4df00000, 0x598c000b,
- 0x80026540, 0x0500000f, 0x59300004, 0x84000520,
- 0x48026004, 0x05fdff7f, 0x05000011, 0x05fdfcc2,
- 0x604e7000, 0x59300004, 0x8c00050c, 0x00060905,
- 0x5c03e000, 0x05fc0d3e, 0x90000541, 0x1c01f000,
- 0x916c1581, 0x05fc07fb, 0x916c1584, 0x05fc07f9,
- 0x42001000, 0x001035bf, 0x05fdf997, 0x5c03e000,
- 0x05fc0d33, 0x80000580, 0x1c01f000, 0x4d300000,
- 0x4d180000, 0x4d3c0000, 0x05fdfd41, 0x4df00000,
- 0x643da8e4, 0x643f78e4, 0x0501f9fd, 0x417a3000,
- 0x811808c8, 0x82040c00, 0x0000b037, 0x58066005,
- 0x813261c0, 0x0500000b, 0x417a7800, 0x05f1ff1b,
- 0x05000007, 0x59300c07, 0x90040583, 0x05000003,
- 0x90040586, 0x05020002, 0x600a7800, 0x050df9b0,
- 0x811a3000, 0x91180485, 0x05fc17ee, 0x61000800,
- 0x05ddfbbf, 0x642b78e4, 0x6429a8e4, 0x5c03e000,
- 0x05fc0d0f, 0x5c027800, 0x5c023000, 0x5c026000,
- 0x1c01f000, 0x4803c856, 0x4d300000, 0x05fdfd1c,
- 0x4df00000, 0x59c80840, 0x84040d74, 0x90040550,
- 0x48039040, 0x59c41008, 0x4c040000, 0x4c080000,
- 0x82081500, 0xffffff7f, 0x480b8808, 0x600c1000,
- 0x0501f9c8, 0x598e600b, 0x813261c0, 0x05fe0fa9,
- 0x050009cb, 0x4a01a8e5, 0x00000800, 0x0501f809,
- 0x5c001000, 0x5c000800, 0x480b8808, 0x48079040,
- 0x5c03e000, 0x05fc0cee, 0x5c026000, 0x1c01f000,
- 0x4d380000, 0x4d180000, 0x4d300000, 0x4d900000,
- 0x4dd00000, 0x4da40000, 0x4d140000, 0x4cd80000,
- 0x417a3000, 0x05fdfa52, 0x811a3000, 0x91180585,
- 0x05fe07fd, 0x0501f9a1, 0x0502000a, 0x5c01b000,
- 0x5c022800, 0x5c034800, 0x5c03a000, 0x5c032000,
- 0x5c026000, 0x5c023000, 0x5c027000, 0x1c01f000,
- 0x0501f9bf, 0x59926005, 0x4933c857, 0x05fdfeb2,
- 0x813261c0, 0x05fc07f2, 0x612a7000, 0x640e6203,
- 0x0005f905, 0x05fdf7ee, 0x4d300000, 0x4d180000,
- 0x4d900000, 0x05fdfcda, 0x60001000, 0x598c0800,
- 0x90040585, 0x0500098f, 0x417a3000, 0x811b20c8,
- 0x83932400, 0x0000b037, 0x59900002, 0x90000581,
- 0x0502000a, 0x60100800, 0x59926005, 0x59300013,
- 0x82000500, 0xfff00000, 0x80000540, 0x05000002,
- 0x60380800, 0x05fdfa00, 0x811a3000, 0x91180485,
- 0x05fc17ef, 0x59c81040, 0x84081534, 0x480b9040,
- 0x05fdfcab, 0x5c032000, 0x5c023000, 0x5c026000,
- 0x1c01f000, 0x4933c857, 0x4d900000, 0x4dd00000,
- 0x4da40000, 0x4d140000, 0x4cd80000, 0x4d380000,
- 0x05fdfcb3, 0x4df00000, 0x59300004, 0x8c00053e,
- 0x05020006, 0x8c000520, 0x0500001e, 0x05fdfbdb,
- 0x0500001c, 0x0501f025, 0x598c000b, 0x81300580,
- 0x0500000e, 0x050dfa1f, 0x05020020, 0x0501f928,
- 0x0500001e, 0x48038804, 0x0501f979, 0x05d9ff81,
- 0x05fdfbec, 0x61267000, 0x59300004, 0x8c00050c,
- 0x0502000b, 0x0501f00b, 0x59c40004, 0x8c000504,
- 0x05000012, 0x64138804, 0x05fdfbff, 0x604e7000,
- 0x59300004, 0x8c00050c, 0x05000002, 0x0005f905,
- 0x5c03e000, 0x05fc0c7a, 0x5c027000, 0x5c01b000,
- 0x5c022800, 0x5c034800, 0x5c03a000, 0x5c032000,
- 0x80000580, 0x1c01f000, 0x5c03e000, 0x05fc0c70,
- 0x5c027000, 0x5c01b000, 0x5c022800, 0x5c034800,
- 0x5c03a000, 0x5c032000, 0x90000541, 0x1c01f000,
- 0x59300407, 0x90000583, 0x05020007, 0x050dfc33,
- 0x05000005, 0x59301009, 0x58080409, 0x84000550,
- 0x48001409, 0x1c01f000, 0x4a01a8e5, 0x00000800,
- 0x05fdfc6f, 0x59c400af, 0x800001c0, 0x05020003,
- 0x05fdfc57, 0x05ddf512, 0x598c000d, 0x90001482,
- 0x05021006, 0x80000000, 0x4803180d, 0x80000580,
- 0x05fdf996, 0x0500000e, 0x05fdfefe, 0x0502000c,
- 0x05fdffe4, 0x42000000, 0x00109891, 0x0519fbfc,
- 0x05fdfdef, 0x05000006, 0x0501f92c, 0x4d380000,
- 0x60527000, 0x0005f905, 0x5c027000, 0x05fdfc40,
- 0x05ddf4fb, 0x4d900000, 0x4dd00000, 0x4da40000,
- 0x4d140000, 0x4cd80000, 0x4d300000, 0x05fdf9a8,
- 0x05fdfc4b, 0x59c400af, 0x800001c0, 0x05000022,
- 0x0501f91f, 0x59926005, 0x4933c857, 0x59300004,
- 0x8c000516, 0x05000009, 0x05fdfea9, 0x0502001a,
- 0x05fdfb8c, 0x05fdfc2a, 0x42000800, 0x80000804,
- 0x0005f872, 0x0501f014, 0x60c018ea, 0x0501f8de,
- 0x05020003, 0x05fdf96f, 0x0501f00f, 0x05fdfe9c,
- 0x0502000d, 0x05fdffb7, 0x42000000, 0x00109892,
- 0x0519fbcf, 0x59300004, 0x8c00050c, 0x05020002,
- 0x640e6203, 0x4d380000, 0x612a7000, 0x0005f905,
- 0x5c027000, 0x05fdfc12, 0x5c026000, 0x5c01b000,
- 0x5c022800, 0x5c034800, 0x5c03a000, 0x5c032000,
- 0x05ddf4c7, 0x4c600000, 0x4d900000, 0x4dd00000,
- 0x4da40000, 0x4d140000, 0x4cd80000, 0x4d300000,
- 0x4d2c0000, 0x05fdfc16, 0x0501f8ed, 0x59926005,
- 0x813261c0, 0x05000040, 0x05f5fb66, 0x05020005,
- 0x4178c000, 0x0505f83e, 0x05000002, 0x6004c000,
- 0x05f5fb60, 0x05020005, 0x8060c1c0, 0x05000003,
- 0x0505f85e, 0x0501f034, 0x05fdf952, 0x05020032,
- 0x4933c857, 0x0501f88c, 0x05020015, 0x05fdf95c,
- 0x813261c0, 0x0500002c, 0x59325809, 0x812e59c0,
- 0x05d40c22, 0x05f5fb4f, 0x0502001c, 0x59c40093,
- 0x4803c857, 0x800001c0, 0x05020009, 0x592c0209,
- 0x84000550, 0x48025a09, 0x05f5fc3f, 0x0502001e,
- 0x592c0209, 0x84000510, 0x48025a09, 0x05fdf925,
- 0x0501f019, 0x42000000, 0x00109892, 0x0519fb88,
- 0x05fdfdb5, 0x592c0209, 0x84000550, 0x48025a09,
- 0x4d380000, 0x612a7000, 0x640e6203, 0x0005f905,
- 0x5c027000, 0x0501f00c, 0x59901007, 0x800811c0,
- 0x05fe07f1, 0x59c408af, 0x82040480, 0x000003e8,
- 0x05fe17ed, 0x80081000, 0x480b2007, 0x05fdf90d,
- 0x05edffb2, 0x5c025800, 0x5c026000, 0x5c01b000,
- 0x5c022800, 0x5c034800, 0x5c03a000, 0x5c032000,
- 0x5c00c000, 0x05fdf3b6, 0x4d300000, 0x4d2c0000,
- 0x05fdfbc7, 0x598e600b, 0x4933c857, 0x813261c0,
- 0x0500003e, 0x59c41004, 0x480bc857, 0x8c080500,
- 0x05000007, 0x05f5fb13, 0x05020012, 0x05f5fc0a,
- 0x05020036, 0x05fdf8ed, 0x0501f034, 0x82080500,
- 0x000001fe, 0x05fe07fc, 0x59c8010b, 0x4803c857,
- 0x8c000500, 0x05fc07f8, 0x42000000, 0x001098db,
- 0x0519fb4f, 0x05fdfe4b, 0x0500086d, 0x0501f027,
- 0x598c000d, 0x80000540, 0x0502000e, 0x59c408af,
- 0x82040480, 0x000003e8, 0x0502100a, 0x598c080d,
- 0x80040800, 0x4807180d, 0x05fdf8d4, 0x42000000,
- 0x001097d0, 0x0519fb3e, 0x05edff7c, 0x0501f017,
- 0x42000000, 0x00109891, 0x0519fb39, 0x05fdfdbd,
- 0x813261c0, 0x05020003, 0x0501f855, 0x0501f00f,
- 0x59300407, 0x90000583, 0x05020007, 0x59325809,
- 0x812e59c0, 0x05000004, 0x592c0209, 0x84000550,
- 0x48025a09, 0x0501f85d, 0x4d380000, 0x60527000,
- 0x0005f905, 0x5c027000, 0x5c025800, 0x5c026000,
- 0x05fdf36f, 0x59c40804, 0x83180400, 0x00105651,
- 0x50000000, 0x80040500, 0x1c01f000, 0x59c40804,
- 0x83180400, 0x00105656, 0x50000000, 0x80040500,
- 0x1c01f000, 0x59c80840, 0x82040d00, 0x000e0000,
- 0x83180400, 0x00105660, 0x50000000, 0x80040580,
- 0x1c01f000, 0x00000210, 0x00000420, 0x00000840,
- 0x00001080, 0x00002100, 0x00004000, 0x00008000,
- 0x00010000, 0x00020000, 0x00040000, 0x00080000,
- 0x00100000, 0x00200000, 0x00400000, 0x00800000,
- 0x00000000, 0x00020000, 0x00040000, 0x00060000,
- 0x00080000, 0x59900007, 0x800c0c80, 0x05021003,
- 0x90000541, 0x0501f004, 0x80000000, 0x48032007,
- 0x80000580, 0x1c01f000, 0x417a3000, 0x05fdffda,
- 0x05000005, 0x811a3000, 0x91180585, 0x05fe07fc,
- 0x1c01f000, 0x81780080, 0x1c01f000, 0x40681000,
- 0x480bc857, 0x05fdfb46, 0x4df00000, 0x480b1800,
- 0x5c03e000, 0x05fc0b2e, 0x1c01f000, 0x4803c856,
- 0x05fdfb3f, 0x4df00000, 0x497b180b, 0x497b1801,
- 0x497b180c, 0x497b180d, 0x497b180e, 0x598c0000,
- 0x90000583, 0x05000006, 0x916c0582, 0x05020003,
- 0x64171800, 0x0501f002, 0x64031800, 0x5c03e000,
- 0x05fc0b1b, 0x1c01f000, 0x59300004, 0x8c00050c,
- 0x05020002, 0x64066203, 0x1c01f000, 0x91180485,
- 0x05d61b4e, 0x491bc857, 0x811b20c8, 0x83932400,
- 0x0000b037, 0x8119b0c8, 0x82d9b400, 0x0000bf32,
- 0x811ba0ca, 0x83d3a400, 0x00007600, 0x83180400,
- 0x001056aa, 0x50034800, 0x811a28c2, 0x83162c00,
- 0x00006100, 0x1c01f000, 0x0010970b, 0x00109722,
- 0x00109739, 0x00109750, 0x00109767, 0x4933c857,
- 0x59300407, 0x90000c92, 0x05021015, 0x05011000,
- 0x0c01f001, 0x001056c7, 0x00105756, 0x00105a59,
- 0x00105aad, 0x00105756, 0x00105a59, 0x00105aad,
- 0x001056c7, 0x00105756, 0x001056c7, 0x001056c7,
- 0x001056c7, 0x001056c7, 0x001056c7, 0x001056c7,
- 0x001056c7, 0x001056cb, 0x001056cb, 0x4803c857,
- 0x05fdfaf7, 0x05fdfa60, 0x05fdf2e1, 0x42001000,
- 0x001097b0, 0x50081000, 0x4930100b, 0x58080002,
- 0x82000580, 0x00000100, 0x05020036, 0x59325809,
- 0x812e59c0, 0x05d40b11, 0x492fc856, 0x5932680a,
- 0x83340580, 0x0010993e, 0x0500001e, 0x592c040c,
- 0x82000500, 0x0000e000, 0x05000003, 0x0501fb73,
- 0x0501f002, 0x0501fb63, 0x592c000e, 0x90000503,
- 0x05000006, 0x90000583, 0x80000000, 0x58d00802,
- 0x80040540, 0x4801a002, 0x42001000, 0x001097b0,
- 0x50081000, 0x4930100a, 0x492c1009, 0x90d00406,
- 0x48001003, 0x592c000e, 0x48001005, 0x592c000f,
- 0x48001006, 0x592c0010, 0x48001007, 0x0001f01c,
- 0x592c080b, 0x48066802, 0x82040500, 0x00ffff00,
- 0x05000007, 0x497a6a12, 0x59a8100f, 0x82081500,
- 0x00ffff00, 0x80080580, 0x05fe07d9, 0x82040d00,
- 0x000000ff, 0x800408d0, 0x48066a12, 0x05fdf7d4,
- 0x1c01f000, 0x4d2c0000, 0x4d300000, 0x4c580000,
- 0x4c540000, 0x4c500000, 0x58325809, 0x812e59c0,
- 0x05d40ad6, 0x58300002, 0x82000580, 0x00000100,
- 0x0502001e, 0x5830000a, 0x5832600b, 0x81300d80,
- 0x0502000e, 0x0501f82c, 0x05020012, 0x592c080e,
- 0x90040c03, 0x80040904, 0x4004b000, 0x4200a000,
- 0x001094fb, 0x4050a800, 0x0519fb42, 0x600011b8,
- 0x0501fdf4, 0x0501f007, 0x4803c857, 0x4933c857,
- 0x813261c0, 0x05000003, 0x0501f81b, 0x05fc0fa0,
- 0x5c00a000, 0x5c00a800, 0x5c00b000, 0x5c026000,
- 0x5c025800, 0x1c01f000, 0x5830000a, 0x5832600b,
- 0x4a006002, 0x00000100, 0x4803c857, 0x4933c857,
- 0x81300d80, 0x05fe07ed, 0x0501f80b, 0x05fe07f1,
- 0x4803c857, 0x0201f800, 0x0010ba3e, 0x80c40040,
- 0x05d60aa6, 0x640a5a07, 0x0001fb2c, 0x0501ff0a,
- 0x05fdf7e8, 0x05fdfa7a, 0x4df00000, 0x598c000b,
- 0x81300580, 0x05020008, 0x598c0003, 0x81300580,
- 0x05020005, 0x5c03e000, 0x05fc0a5d, 0x80000580,
- 0x1c01f000, 0x4803c857, 0x5c03e000, 0x05fc0a58,
- 0x90000541, 0x1c01f000, 0x59300403, 0xb0000c98,
- 0x05d61a8e, 0x83340d80, 0x0010993e, 0x0502000a,
- 0x59300820, 0x48066802, 0x82041500, 0x00ffff00,
- 0x05020004, 0x800408d0, 0x48066a12, 0x0501f002,
- 0x497a6a12, 0x4803c857, 0x0c01f001, 0x001058ae,
- 0x001058c6, 0x001058d4, 0x001059c4, 0x00105991,
- 0x00105995, 0x001059a1, 0x001059b1, 0x001059a7,
- 0x001059b1, 0x001059e8, 0x001059b1, 0x00105a26,
- 0x001059b1, 0x00105a31, 0x001059b1, 0x001059a7,
- 0x001059b1, 0x00105a35, 0x001057c7, 0x001057c7,
- 0x001057c7, 0x001057c7, 0x001057c7, 0x001057c7,
- 0x001057c7, 0x001057c7, 0x001057c7, 0x001057c7,
- 0x001057c7, 0x00105ac6, 0x00105ada, 0x00105ae2,
- 0x001057c7, 0x00105af9, 0x001059a1, 0x001057c7,
- 0x001059a1, 0x001059b1, 0x001057c7, 0x001058d4,
- 0x001059c4, 0x001057c7, 0x00105b41, 0x001059b1,
- 0x001057c7, 0x00105b4f, 0x001059b1, 0x001057c7,
- 0x001059a7, 0x001058a1, 0x001057c8, 0x001057c7,
- 0x00105b64, 0x00105b95, 0x00105c0c, 0x001057c7,
- 0x00105c1a, 0x0010599f, 0x00105c0f, 0x001057c7,
- 0x00105b03, 0x00105c4f, 0x001057c7, 0x001057c7,
- 0x001057c7, 0x001057c7, 0x001057db, 0x0010583c,
- 0x00105846, 0x001057c7, 0x001057c7, 0x001057c7,
- 0x00105877, 0x0010587f, 0x001057c7, 0x001057c7,
- 0x001057ec, 0x00105816, 0x00105c7f, 0x00105cb4,
- 0x00105cd4, 0x001057c7, 0x001057c7, 0x001057c7,
- 0x00105caa, 0x00105c31, 0x00105b64, 0x001057c7,
- 0x001057c7, 0x001057c7, 0x001057c7, 0x001057c7,
- 0x001057c7, 0x001057c7, 0x001057c7, 0x05d5fa1f,
- 0x0501fa7c, 0x59325809, 0x592c000a, 0x4801a006,
- 0x592c000b, 0x4801a007, 0x592c000c, 0x4801a008,
- 0x592c000d, 0x4801a009, 0x592c000e, 0x4801a00a,
- 0x4979a00b, 0x592c080a, 0x82040d00, 0x00000fff,
- 0x80040904, 0x600011b8, 0x0501f53e, 0x4a026202,
- 0x0000ffff, 0x0501fa67, 0x4d2c0000, 0x4a01a006,
- 0x05000000, 0x59325809, 0x592c000a, 0x4801a007,
- 0x592c000b, 0x4801a008, 0x592c000c, 0x4801a009,
- 0x5c025800, 0x60100800, 0x600011b8, 0x0501f52d,
- 0x4c580000, 0x4c500000, 0x4c540000, 0x4d2c0000,
- 0x0501fa54, 0x5930040c, 0x90000503, 0x05000006,
- 0x90000583, 0x80000000, 0x58d00802, 0x80040540,
- 0x4801a002, 0x59325809, 0x4200a800, 0x001094fb,
- 0x592cb206, 0x9058b403, 0x8058b104, 0x912ca407,
- 0x0519fa29, 0x40580000, 0x8054ac00, 0x592c0001,
- 0x80000540, 0x05000003, 0x40025800, 0x05fdf7f5,
- 0x4200a000, 0x001094fb, 0x4050a800, 0x5930b40c,
- 0x9058b403, 0x8058b104, 0x40580800, 0x0519fa55,
- 0x600011b8, 0x5c025800, 0x5c00a800, 0x5c00a000,
- 0x5c00b000, 0x0501f503, 0x4c580000, 0x4c500000,
- 0x4c540000, 0x4d2c0000, 0x42034800, 0x001094f4,
- 0x0501fa36, 0x59325809, 0x592c0802, 0x4807c857,
- 0x40041000, 0x80040904, 0x90081503, 0x05000007,
- 0x80040800, 0x90081583, 0x80081000, 0x58d00002,
- 0x80080540, 0x4801a002, 0x4a025806, 0x02000000,
- 0x90d0ac06, 0x592cb011, 0x912ca406, 0x0519f9fa,
- 0x40580000, 0x8054ac00, 0x592e5801, 0x41780000,
- 0x812e5d40, 0x05fe07f8, 0x600011b8, 0x5c025800,
- 0x5c00a800, 0x5c00a000, 0x5c00b000, 0x0501f4dd,
- 0x0501fa08, 0x4a01a006, 0x78000000, 0x5930001e,
- 0x840001c0, 0x4801a407, 0x4979a207, 0x60080800,
- 0x600011b8, 0x0501f4d3, 0x4c580000, 0x4c540000,
- 0x4c500000, 0x0501fa09, 0x4a01a006, 0x02000000,
- 0x59a80002, 0x4801a008, 0x59a80003, 0x4801a009,
- 0x59a80000, 0x4801a00a, 0x59a80001, 0x4801a00b,
- 0x5930001e, 0x82000d80, 0x0000e000, 0x0500000e,
- 0x82000d80, 0x0000df00, 0x05000004, 0x6441a407,
- 0x60180800, 0x0501f015, 0x42001800, 0x001094d7,
- 0x05d5fcae, 0x600001be, 0x4200a000, 0x001094d7,
- 0x0501f007, 0x42001800, 0x001094e4, 0x05d5fca7,
- 0x600001c0, 0x4200a000, 0x001094e4, 0x90000550,
- 0x4801a407, 0x64d1a207, 0x6034b000, 0x90d0ac0c,
- 0x0519f9b9, 0x604c0800, 0x600011b8, 0x5c00a000,
- 0x5c00a800, 0x5c00b000, 0x0501f4a2, 0x0501f9cd,
- 0x4a01a006, 0x63000028, 0x5930001e, 0x4801a007,
- 0x60080800, 0x600011b8, 0x0501f49a, 0x0501f9d3,
- 0x41780000, 0x41780800, 0x42002000, 0x00080000,
- 0x0c01f80e, 0x80000000, 0x80040800, 0x60301000,
- 0x82080540, 0x02000000, 0x4801a006, 0x800408e0,
- 0x5930001e, 0x80040540, 0x4801a007, 0x80080904,
- 0x600011b8, 0x0501f487, 0x00105897, 0x00105899,
- 0x0010589b, 0x0010589d, 0x0010589f, 0x4811a008,
- 0x1c01f000, 0x4811a009, 0x1c01f000, 0x4811a00a,
- 0x1c01f000, 0x4811a00b, 0x1c01f000, 0x4811a00c,
- 0x1c01f000, 0x4a02600a, 0x0010993e, 0x59a8000f,
- 0x82000500, 0x000000ff, 0x800000d0, 0x42026800,
- 0x0010993e, 0x48026a12, 0x0501f9f7, 0x41780800,
- 0x600010b8, 0x0501f46b, 0x0501f996, 0x4a01a006,
- 0x52000000, 0x4979a007, 0x599c0017, 0x82000500,
- 0x00000801, 0x05000004, 0x599c0402, 0x05ddfa74,
- 0x4805a007, 0x59a80002, 0x4801a008, 0x59a80003,
- 0x4801a009, 0x59a80000, 0x4801a00a, 0x59a80001,
- 0x4801a00b, 0x59a8000f, 0x4801a00c, 0x601c0800,
- 0x600011b8, 0x0501f453, 0x4a026202, 0x0000ffff,
- 0x0501f97c, 0x4a01a006, 0x05000000, 0x59a8000f,
- 0x4801a007, 0x59a80002, 0x59a80803, 0x4801a008,
- 0x4805a009, 0x60100800, 0x600011b8, 0x0501f445,
- 0x4a026202, 0x0000ffff, 0x0501f96e, 0x4d3c0000,
- 0x417a7800, 0x05f1faf3, 0x5c027800, 0x4a01a006,
- 0x03000000, 0x59340403, 0x82000580, 0x000007fe,
- 0x0502006a, 0x4a01a006, 0x04000000, 0x81a40800,
- 0x4a000800, 0x22fffffe, 0x5934000a, 0x84000500,
- 0x4802680a, 0x59a8021b, 0x8c000508, 0x05000010,
- 0x59a8001f, 0x4801a007, 0x59a80020, 0x82000500,
- 0x07deffff, 0x599c0818, 0x8c040516, 0x05000002,
- 0x8400056a, 0x4801a008, 0x4a01a009, 0x00002710,
- 0x59a80022, 0x4801a00a, 0x0501f038, 0x59a8001f,
- 0x59a8121b, 0x8c080506, 0x05000003, 0x82000500,
- 0xffff0000, 0x4801a007, 0x05f5f812, 0x0502000b,
- 0x59300c03, 0xb0041591, 0x05000008, 0x497b8880,
- 0x82000500, 0x0000ffff, 0x4c000000, 0x05ddfa42,
- 0x5c000000, 0x48038880, 0x59a80020, 0x05f5f805,
- 0x05020004, 0x82000500, 0x37ffffff, 0x0501f003,
- 0x82000500, 0x3fffffff, 0x599c0818, 0x8c040516,
- 0x05000002, 0x8400056a, 0x8d0c0510, 0x05000014,
- 0x59300c03, 0xb0041591, 0x05000011, 0x900415b1,
- 0x0500000f, 0x4c580000, 0x4c500000, 0x4c540000,
- 0x6010b000, 0x4200a000, 0x0010992c, 0x90d0ac1f,
- 0x4c000000, 0x0519f900, 0x5c000000, 0x5c00a800,
- 0x5c00a000, 0x5c00b000, 0x8400057a, 0x4801a008,
- 0x4979a009, 0x4979a00a, 0x59a80002, 0x59a80803,
- 0x4801a00b, 0x4805a00c, 0x59a80000, 0x59a80801,
- 0x4801a00d, 0x4805a00e, 0x4979a00f, 0x4979a010,
- 0x4979a011, 0x4979a012, 0x4979a013, 0x4979a014,
- 0x4979a015, 0x4979a016, 0x59a80023, 0x84000576,
- 0x4801a017, 0x59a80024, 0x4801a018, 0x4979a019,
- 0x4979a01a, 0x0501f045, 0x59a8021b, 0x8c000508,
- 0x0500000c, 0x59a8001f, 0x82000500, 0x0000ffff,
- 0x59c40880, 0x80040d80, 0x05000006, 0x497b8880,
- 0x4c000000, 0x05ddf9f8, 0x5c000000, 0x48038880,
- 0x59a8001f, 0x4801a007, 0x4c640000, 0x4d2c0000,
- 0x59a8c820, 0x050df81d, 0x0500000d, 0x050dfccd,
- 0x0502000b, 0x592c0208, 0x8c00050e, 0x05000008,
- 0x8264cd00, 0x0000ffff, 0x592c000a, 0x82000500,
- 0xffff0000, 0x8064cd40, 0x0501f005, 0x59a80a1b,
- 0x90040d30, 0x05000002, 0x8464cd36, 0x4865a008,
- 0x5c025800, 0x5c00c800, 0x59a80021, 0x4801a009,
- 0x59a80022, 0x4801a00a, 0x59a80002, 0x59a80803,
- 0x4801a00b, 0x4805a00c, 0x59a80000, 0x59a80801,
- 0x4801a00d, 0x4805a00e, 0x4979a00f, 0x4979a010,
- 0x4979a011, 0x4979a012, 0x4979a013, 0x4979a014,
- 0x4979a015, 0x4979a016, 0x59a80023, 0x4801a017,
- 0x59a80024, 0x4801a018, 0x59a80025, 0x4801a019,
- 0x59a80026, 0x4801a01a, 0x60740800, 0x600011b8,
- 0x0501f388, 0x0501f8b3, 0x4a01a006, 0x50000000,
- 0x05fdf7b6, 0x0501f8af, 0x4a01a006, 0x21100014,
- 0x4979a007, 0x4979a008, 0x4979a009, 0x4979a00a,
- 0x60140800, 0x600011b8, 0x0501f37a, 0x0501f8ac,
- 0x0501f002, 0x0501f8b1, 0x4a01a006, 0x02000000,
- 0x60040800, 0x600011b8, 0x0501f372, 0x0501f8ab,
- 0x4a01a006, 0x02000000, 0x59300403, 0x900005b1,
- 0x05fe079e, 0x81a40800, 0x4a000801, 0x00fffffe,
- 0x05fdf739, 0x0501f8a1, 0x4a01a006, 0x01000000,
- 0x5930041c, 0x80000540, 0x05000003, 0x4801a407,
- 0x0501f002, 0x640da407, 0x5930021c, 0x80000540,
- 0x05000003, 0x4801a207, 0x0501f003, 0x4a01a207,
- 0x00002a00, 0x60080800, 0x600011b8, 0x0501f355,
- 0x4a026202, 0x0000ffff, 0x0501f87e, 0x4a01a406,
- 0x00002010, 0x6451a206, 0x4a01a407, 0x00000800,
- 0x4a01a207, 0x00002000, 0x60000008, 0x59a80807,
- 0x8c04050c, 0x05000002, 0x80000580, 0x599c0817,
- 0x8c04050a, 0x05020002, 0x90000560, 0x8c040508,
- 0x05000002, 0x90000550, 0x90000542, 0x5934080a,
- 0x8c040514, 0x05000005, 0x82040d00, 0x00000380,
- 0x80040540, 0x0501f006, 0x599c0818, 0x8c040518,
- 0x05000003, 0x82000540, 0x00000380, 0x0501f03b,
- 0x0501f86a, 0x4a01a406, 0x00000210, 0x6451a206,
- 0x4a01a407, 0x00000800, 0x5934000a, 0x8c000516,
- 0x05000013, 0x59340c05, 0x90040530, 0x05000013,
- 0x59340a05, 0x82040500, 0x0000c000, 0x05020009,
- 0x8c04051a, 0x05000004, 0x4a01a207, 0x00002100,
- 0x0501f00c, 0x4a01a207, 0x00000100, 0x0501f009,
- 0x4a01a207, 0x00000400, 0x0501f006, 0x4a01a207,
- 0x00000700, 0x0501f003, 0x4a01a207, 0x00000800,
- 0x60000008, 0x59a80807, 0x8c04050c, 0x05000002,
- 0x80000580, 0x599c0817, 0x8c04050a, 0x05020002,
- 0x90000560, 0x8c040508, 0x05000002, 0x90000550,
- 0x90000542, 0x59340a00, 0x8c04050e, 0x0500000b,
- 0x84000550, 0x599c1017, 0x8c08050a, 0x05020004,
- 0x8c04050a, 0x05000002, 0x8400054e, 0x8c04051c,
- 0x05000002, 0x84000552, 0x4801a20a, 0x60140800,
- 0x600011b8, 0x0501f2f3, 0x0501f82c, 0x4a01a006,
- 0x02100014, 0x4a01a007, 0x00000100, 0x4979a008,
- 0x4979a009, 0x4979a00a, 0x60140800, 0x600011b8,
- 0x0501f2e8, 0x0501f821, 0x4a01a006, 0x02000000,
- 0x05fdf67d, 0x4933c857, 0x0501f81c, 0x4a01a006,
- 0x01000000, 0x642da407, 0x60080800, 0x600011b8,
- 0x0501f2dc, 0x42005000, 0x32000000, 0x42006000,
- 0x08290000, 0x41786800, 0x41787800, 0x0501f2b1,
- 0x42005000, 0x22000000, 0x42006000, 0x01290000,
- 0x41786800, 0x41787800, 0x0501f2aa, 0x42005000,
- 0x33000000, 0x42006000, 0x08980000, 0x41786800,
- 0x41787800, 0x0501f2a3, 0x42005000, 0x23000000,
- 0x42006000, 0x01980000, 0x41786800, 0x41787800,
- 0x0501f29c, 0x59300403, 0x82000c80, 0x00000085,
- 0x05d01f8a, 0x82000c80, 0x00000093, 0x05d21f87,
- 0x82000480, 0x00000085, 0x0c01f001, 0x00105a72,
- 0x00105a71, 0x00105a71, 0x00105a71, 0x00105a71,
- 0x00105a71, 0x00105a72, 0x00105a71, 0x00105a71,
- 0x00105a71, 0x00105a71, 0x00105a71, 0x00105a71,
- 0x00105a79, 0x05d1ff75, 0x4933c857, 0x42034800,
- 0x001094f4, 0x0501f82c, 0x41780800, 0x600010b8,
- 0x0501f2a0, 0x4d2c0000, 0x59325809, 0x4933c857,
- 0x492fc857, 0x812e59c0, 0x05d00f68, 0x59340a12,
- 0x82040d00, 0x0000ff00, 0x592c000b, 0x82000500,
- 0x000000ff, 0x900001c0, 0x80040540, 0x90000551,
- 0x44034800, 0x81a5a000, 0x60241000, 0x600c0800,
- 0x592c000a, 0x82000500, 0xff000000, 0x82001d80,
- 0x84000000, 0x05000006, 0x82001d80, 0x85000000,
- 0x05d20f52, 0x601c1000, 0x60040800, 0x912c1c0a,
- 0x500c0000, 0x4401a000, 0x800c1800, 0x80d1a000,
- 0x80081040, 0x05fe07fb, 0x600011b8, 0x5c025800,
- 0x0501f278, 0x42005000, 0x81000000, 0x42006000,
- 0x00090000, 0x41786800, 0x41787800, 0x59301407,
- 0x90081585, 0x05020003, 0x42006000, 0x00890000,
- 0x0501f248, 0x59300403, 0xb0000c93, 0x05d21f37,
- 0xb000048b, 0x05d01f35, 0x5932680a, 0x59368c03,
- 0x4803c857, 0x0c01f001, 0x00105b1a, 0x00105b22,
- 0x00105b2a, 0x00105b32, 0x00105abe, 0x00105abe,
- 0x00105abe, 0x00105b12, 0x05d1ff28, 0x42005000,
- 0x06000000, 0x42006000, 0x08290000, 0x41786800,
- 0x41787800, 0x0501f22f, 0x4933c857, 0x05fdff7d,
- 0x4a01a006, 0x12000000, 0x59300407, 0x90000584,
- 0x05020003, 0x59340002, 0x0501f002, 0x59a8000f,
- 0x82000500, 0x00ffffff, 0x4801a007, 0x5930041b,
- 0x4801a408, 0x5930021b, 0x4801a208, 0x600c0800,
- 0x600011b8, 0x0501f23f, 0x05fdff6a, 0x4a01a006,
- 0x0f000000, 0x5930001e, 0x4801a007, 0x60080800,
- 0x600011b8, 0x0501f237, 0x05fdff70, 0x4a01a006,
- 0x02000000, 0x59c40085, 0x59880804, 0x80040c00,
- 0x48071004, 0x497b8885, 0x59880000, 0x4801a007,
- 0x59880001, 0x4801a008, 0x59880002, 0x4801a009,
- 0x59880003, 0x4801a00a, 0x59880004, 0x4801a00b,
- 0x59880005, 0x4801a00c, 0x601c0800, 0x600011b8,
- 0x0501f220, 0x4a026202, 0x0000ffff, 0x05fdff49,
- 0x4a01a006, 0x62000000, 0x5930001e, 0x4801a007,
- 0x60080800, 0x600011b8, 0x0501f216, 0x05fdff41,
- 0x59300809, 0x4c500000, 0x4c540000, 0x4c580000,
- 0x9004a40b, 0x5930b01e, 0x90d0ac06, 0x0515ff1e,
- 0x5930081e, 0x600011b8, 0x5c00b000, 0x5c00a800,
- 0x5c00a000, 0x0501f207, 0x05fdffad, 0x59300019,
- 0x4801a006, 0x5930001a, 0x4801a007, 0x4a01a008,
- 0x00001000, 0x0501f020, 0x05fdffa5, 0x59300019,
- 0x4801a006, 0x5930001a, 0x4801a007, 0x4a01a008,
- 0x00004000, 0x0501f018, 0x05fdff9d, 0x59300019,
- 0x4801a006, 0x5930001a, 0x4801a007, 0x4a01a008,
- 0x00002000, 0x0501f010, 0x05fdff95, 0x59300019,
- 0x4801a006, 0x5930001a, 0x4801a007, 0x4a01a008,
- 0x00000400, 0x0501f008, 0x05fdff8d, 0x59300019,
- 0x4801a006, 0x5930001a, 0x4801a007, 0x4a01a008,
- 0x00000200, 0x4979a009, 0x4979a00a, 0x4979a00b,
- 0x4979a00c, 0x4979a00d, 0x60200800, 0x600011b8,
- 0x0501f1d8, 0x05fdff11, 0x4a01a006, 0x02000014,
- 0x4979a407, 0x4979a207, 0x59a8002d, 0x4801a008,
- 0x59a8002e, 0x4801a009, 0x4a01a00a, 0x00047878,
- 0x60140800, 0x600011b8, 0x0501f1ca, 0x05fdff03,
- 0x4a01a006, 0x02140018, 0x4a01a407, 0x00000800,
- 0x5930001e, 0x82000d00, 0xff000000, 0x900409c0,
- 0x4805a207, 0x82000500, 0x00ffffff, 0x4801a00a,
- 0x4979a408, 0x4979a208, 0x4979a409, 0x4979a209,
- 0x4979a00b, 0x60180800, 0x600011b8, 0x0501f1b5,
- 0x4933c857, 0x4937c857, 0x4d1c0000, 0x60d40800,
- 0x050df938, 0x05020020, 0x05fdfeda, 0x4a01a006,
- 0x13000000, 0x59323820, 0x59300403, 0xb0000597,
- 0x05000004, 0x591c0416, 0x8c000502, 0x05d00e73,
- 0x591c001b, 0x4801a005, 0x591c0407, 0x90000583,
- 0x05000007, 0x5930080a, 0x58040002, 0x82000500,
- 0x00ffffff, 0x4801a007, 0x0501f003, 0x59a8000f,
- 0x4801a007, 0x5930041b, 0x4801a408, 0x5930021b,
- 0x4801a208, 0x600c0800, 0x600011b8, 0x5c023800,
- 0x0501f190, 0x4803c856, 0x05f9fe35, 0x598c000b,
- 0x81300580, 0x05d20e59, 0x05f9fd9b, 0x59300403,
- 0xb0000597, 0x050408da, 0x0005f8e7, 0x5c023800,
- 0x05f9f617, 0x4803c856, 0x4d2c0000, 0x4d1c0000,
- 0x59323820, 0x811e39c0, 0x05d00e4c, 0x831c0580,
- 0xffffffff, 0x05000036, 0x591c0c07, 0x90040586,
- 0x0500000a, 0x90040583, 0x05000036, 0x64de6403,
- 0x640e641c, 0x4a02621c, 0x00001700, 0x5c023800,
- 0x5c025800, 0x0501f063, 0x0501f848, 0x42001000,
- 0x40000000, 0x591c0203, 0x591c0804, 0x8c04053e,
- 0x05020020, 0x90000c8e, 0x0c001002, 0x05d1fe33,
- 0x00105bc5, 0x00105bd0, 0x00105bc6, 0x00105bd0,
- 0x00105bcc, 0x00105bc5, 0x00105bc5, 0x00105bd0,
- 0x00105bd0, 0x00105bc5, 0x00105bc5, 0x00105bc5,
- 0x00105bc5, 0x00105bc5, 0x00105bd0, 0x00105bc5,
- 0x00105bd0, 0x05d1fe21, 0x591c0416, 0x4803c857,
- 0x8c000518, 0x05000003, 0x8c000512, 0x05000003,
- 0x80001580, 0x0501f003, 0x42001000, 0x20000000,
- 0x591c0017, 0x4801a00a, 0x0501f01a, 0x0501f81f,
- 0x42001000, 0x40000000, 0x41780000, 0x05fdf7fa,
- 0x0501f81a, 0x591e5809, 0x812e59c0, 0x05d00e0b,
- 0x592c1010, 0x591c0013, 0x80080480, 0x4801a00a,
- 0x591c0203, 0x591c0804, 0x8c04053e, 0x05020005,
- 0x90000d82, 0x05000006, 0x90000d84, 0x05000004,
- 0x42001000, 0x40000000, 0x0501f002, 0x80001580,
- 0x4809a00b, 0x60180800, 0x600011b8, 0x5c023800,
- 0x5c025800, 0x0501f127, 0x4803c856, 0x05fdfe5f,
- 0x4a01a006, 0x02000000, 0x59300c1b, 0x4805a407,
- 0x59300a1b, 0x4805a207, 0x59a8100f, 0x5930080a,
- 0x58041802, 0x820c1d00, 0x00ffffff, 0x59300820,
- 0x82040580, 0xffffffff, 0x05000007, 0x58040407,
- 0x90000583, 0x05020004, 0x4809a008, 0x480da009,
- 0x0501f003, 0x480da008, 0x4809a009, 0x1c01f000,
- 0x4803c856, 0x05fdfe45, 0x0501f003, 0x4803c856,
- 0x05fdfe3b, 0x4a01a006, 0x01000000, 0x5930041c,
- 0x4801a407, 0x5930021c, 0x4801a207, 0x60080800,
- 0x600011b8, 0x0501f0ff, 0x4803c856, 0x4d1c0000,
- 0x05fdfe21, 0x4a01a006, 0x14000000, 0x59323820,
- 0x591c001b, 0x4801a005, 0x5930041b, 0x4801a407,
- 0x5930021b, 0x4801a207, 0x59300017, 0x4801a008,
- 0x59300218, 0x82000500, 0x000000ff, 0x840001c0,
- 0x4801a409, 0x60100800, 0x600011b8, 0x5c023800,
- 0x0501f0e8, 0x4803c856, 0x05fdfe20, 0x4a01a006,
- 0x02000001, 0x42001000, 0xe8000000, 0x59c40801,
- 0x82040d00, 0x00018000, 0x90040580, 0x60000100,
- 0x0500000e, 0x82040580, 0x00008000, 0x60000080,
- 0x0500000a, 0x82040580, 0x00010000, 0x60000040,
- 0x05000006, 0x82040580, 0x00018000, 0x60000010,
- 0x05000002, 0x60080000, 0x80080540, 0x4801a007,
- 0x60080800, 0x600011b8, 0x0501f0ca, 0x4803c856,
- 0x0501f809, 0x5930041c, 0x900001c0, 0x4801a005,
- 0x0501f90f, 0x41780800, 0x600010b8, 0x0501f8c1,
- 0x05f9f29a, 0x4803c856, 0x59300819, 0x90041c06,
- 0x64874800, 0x58040405, 0x82000500, 0x0000f000,
- 0x82000580, 0x00003000, 0x05000002, 0x65074800,
- 0x81a5a000, 0x580c0001, 0x82000d00, 0x00ffffff,
- 0x82040d40, 0xc2000000, 0x4805a000, 0x580c0800,
- 0x82041500, 0x00ffffff, 0x82000500, 0xff000000,
- 0x80080540, 0x4801a001, 0x580c0002, 0x82000580,
- 0x00c00000, 0x82000500, 0x00fd0300, 0x4801a002,
- 0x580c0003, 0x4801a003, 0x580c0404, 0x4801a404,
- 0x580c0204, 0x4801a204, 0x1c01f000, 0x05fdfdd3,
- 0x5930001e, 0x800001c0, 0x05000006, 0x4a01a006,
- 0x01000000, 0x640da407, 0x60080800, 0x0501f021,
- 0x4a01a006, 0x02000000, 0x41780800, 0x916c0584,
- 0x05020003, 0x84040d42, 0x0501f00c, 0x05f1fc85,
- 0x05020003, 0x84040d4a, 0x0501f002, 0x84040d48,
- 0x59a8021b, 0x8c000506, 0x05020003, 0x8c00050a,
- 0x05000002, 0x84040d46, 0x4805a207, 0x59c40085,
- 0x48031004, 0x4c580000, 0x4c500000, 0x4c540000,
- 0x6018b000, 0x9188a400, 0x90d0ac08, 0x0515fd86,
- 0x5c00a800, 0x5c00a000, 0x5c00b000, 0x60200800,
- 0x600011b8, 0x0501f06f, 0x05fdfd9a, 0x4a01a006,
- 0x56000000, 0x59340006, 0x4801a007, 0x59340007,
- 0x4801a008, 0x600c0800, 0x600011b8, 0x0501f065,
- 0x4803c856, 0x05fdfd9d, 0x5930081e, 0x800409c0,
- 0x0500000b, 0x82040580, 0x0000ffff, 0x05000003,
- 0x90040487, 0x05021006, 0x4a01a006, 0x01000000,
- 0x640da407, 0x60080800, 0x0501f010, 0x4a01a006,
- 0x0200001c, 0x6405a007, 0x42001000, 0x001094dc,
- 0x50080000, 0x9c0001c0, 0x4801a009, 0x59a8000f,
- 0x4801a00a, 0x59a80002, 0x59a80803, 0x4801a00b,
- 0x4805a00c, 0x601c0800, 0x600011b8, 0x0501f045,
- 0x4d2c0000, 0x05fdfd6f, 0x59325809, 0x592c0009,
- 0x82000500, 0x00ffffff, 0x4801a001, 0x4a01a006,
- 0x51000000, 0x5c025800, 0x05fdf40b, 0x4803c856,
- 0x59325809, 0x5932680a, 0x59300407, 0x4803c857,
- 0x90000d8a, 0x05000002, 0x05d1fd00, 0x42005000,
- 0x02000000, 0x42006000, 0x20290000, 0x41786800,
- 0x41787800, 0x0501f805, 0x91180d78, 0x60801193,
- 0x0501f856, 0x1c01f000, 0x6001a000, 0x0501f002,
- 0x6045a000, 0x59340a12, 0x82040d00, 0x0000ff00,
- 0x59a8000f, 0x82000500, 0x000000ff, 0x900001c0,
- 0x80040540, 0x80d00540, 0x44034800, 0x81a5a000,
- 0x59340002, 0x82000500, 0x00ffffff, 0x59300c03,
- 0x90040db1, 0x05020002, 0x41780000, 0x80280540,
- 0x4801a000, 0x59a8000f, 0x4801a001, 0x4831a002,
- 0x90340540, 0x4801a003, 0x59300402, 0x4801a404,
- 0x59300a02, 0x4805a204, 0x8c30052e, 0x05000003,
- 0x4805a404, 0x4801a204, 0x483da005, 0x1c01f000,
- 0x4807c857, 0x4c040000, 0x0501f83d, 0x5c000800,
- 0x40040000, 0x80081540, 0x800000c4, 0x82000540,
- 0x00002000, 0x4803910a, 0x59b400f6, 0x90000518,
- 0x05fe07fe, 0x42001800, 0x001094f5, 0x580c0004,
- 0x4803c857, 0x580c0006, 0x4803c857, 0x580c1800,
- 0x480fc857, 0x8d0c052a, 0x0500000c, 0x820c1d00,
- 0xf8000000, 0x05000009, 0x4c040000, 0x4c080000,
- 0x40083800, 0x42000000, 0x001094f5, 0x05d1fdbc,
- 0x5c001000, 0x5c000800, 0x4a0368f0, 0x001094f4,
- 0x4a0368f1, 0x001094fb, 0x480b68f3, 0x59b400f6,
- 0x90000538, 0x05fe07fe, 0x4203e000, 0xb0800000,
- 0x600bf800, 0x05f9f1ad, 0x4807c857, 0x480a2800,
- 0x4c040000, 0x0501f80e, 0x5c000800, 0x59b400f6,
- 0x8c00050a, 0x05fe07fe, 0x49a768f2, 0x480768f4,
- 0x59b400f6, 0x90000538, 0x05fe07fe, 0x4203e000,
- 0xb0800000, 0x600bf800, 0x1c01f000, 0x61a07007,
- 0x4203e000, 0xb0800000, 0x600ff800, 0x40000000,
- 0x40000000, 0x40000000, 0x0501b004, 0x80387040,
- 0x05d00c86, 0x05fdf7f9, 0x1c01f000, 0x82000500,
- 0xffff0000, 0x82000580, 0x01050000, 0x0502000b,
- 0x599c0818, 0x8c040510, 0x05000008, 0x59a80806,
- 0x8c04050a, 0x05000005, 0x613c1100, 0x41781800,
- 0x41782000, 0x05e9f84b, 0x1c01f000, 0x1c01f000,
- 0x59a80063, 0x800001c0, 0x05000045, 0x4d2c0000,
- 0x4d300000, 0x4c5c0000, 0x4c600000, 0x4c640000,
- 0x40025800, 0x4000c000, 0x4000c800, 0x42026000,
- 0x0010cc48, 0x592c0407, 0x81440580, 0x0502002d,
- 0x592c0205, 0xb0000595, 0x05000005, 0x8d3c0518,
- 0x05000028, 0x8d3c0516, 0x05020026, 0x40640000,
- 0x812c0580, 0x05020016, 0x59300203, 0x90000580,
- 0x0500000f, 0x59300009, 0x800001c0, 0x0500000c,
- 0x05f9fc2b, 0x4df00000, 0x05f9fb3d, 0x0201f800,
- 0x0010b9a8, 0x80c40040, 0x05020002, 0x64026203,
- 0x5c03e000, 0x05f80c0e, 0x497a6009, 0x592cc800,
- 0x4064c000, 0x4064b800, 0x0501f003, 0x592cb800,
- 0x485cc000, 0x497a5800, 0x592c0205, 0x82000580,
- 0x00000155, 0x05000003, 0x05d1ffce, 0x0501f003,
- 0x49425a07, 0x0001fb2c, 0x405e5800, 0x0501f003,
- 0x412cc000, 0x592e5800, 0x812e59c0, 0x05fe07ce,
- 0x48675063, 0x48635064, 0x5c00c800, 0x5c00c000,
- 0x5c00b800, 0x5c026000, 0x5c025800, 0x1c01f000,
- 0x4943c857, 0x4d440000, 0x4d340000, 0x4c580000,
- 0x61c0b00f, 0x417a8800, 0x0001fac4, 0x05020002,
- 0x05fdffb0, 0x81468800, 0x8058b040, 0x05fe07fb,
- 0x83440480, 0x00000800, 0x05021006, 0x8d3c0502,
- 0x05000004, 0x61c2880f, 0x6040b000, 0x05fdf7f3,
- 0x5c00b000, 0x5c026800, 0x5c028800, 0x1c01f000,
- 0x4d300000, 0x59a81063, 0x800811c0, 0x05000016,
- 0x42026000, 0x0010cc48, 0x59300203, 0x90000580,
- 0x05020011, 0x58080803, 0x4806600a, 0x480a6009,
- 0x64166407, 0x64066203, 0x4a026403, 0x00000092,
- 0x41780800, 0x58080205, 0xb0000595, 0x05000002,
- 0x60040800, 0x48066422, 0x42000800, 0x80000040,
- 0x0005f87c, 0x5c026000, 0x1c01f000, 0x4d900000,
- 0x4dd00000, 0x4da40000, 0x4d140000, 0x4cd80000,
- 0x4d180000, 0x4803c856, 0x417a3000, 0x05fdf8a0,
- 0x59900805, 0x800409c0, 0x05000012, 0x91947c09,
- 0x83180400, 0x00104dc4, 0x50000000, 0x803c7c00,
- 0x583c0003, 0x811808ca, 0x82040c00, 0x00006139,
- 0x50040800, 0x80040580, 0x05000006, 0x42000000,
- 0x001098dc, 0x0515fb56, 0x90000541, 0x0501f004,
- 0x811a3000, 0x91180585, 0x05fe07e9, 0x5c023000,
- 0x5c01b000, 0x5c022800, 0x5c034800, 0x5c03a000,
- 0x5c032000, 0x1c01f000, 0x4d900000, 0x4dd00000,
- 0x4da40000, 0x4d140000, 0x4cd80000, 0x4d180000,
- 0x4803c856, 0x598c080b, 0x800409c0, 0x05000002,
- 0x05f9f8d2, 0x417a3000, 0x05fdf875, 0x59900805,
- 0x800409c0, 0x0500000f, 0x91947c09, 0x83180400,
- 0x00104dc4, 0x50000000, 0x803c7c00, 0x811808ca,
- 0x82040c00, 0x00006139, 0x50040800, 0x48047803,
- 0x4a007801, 0x000001f4, 0x64287800, 0x64107802,
- 0x811a3000, 0x91180585, 0x05fe07ec, 0x5c023000,
- 0x5c01b000, 0x5c022800, 0x5c034800, 0x5c03a000,
- 0x5c032000, 0x1c01f000, 0x41781000, 0x42026000,
- 0x0010ccb4, 0x59a8180d, 0x480a6402, 0x4a026202,
- 0x0000ffff, 0x80081000, 0x800c1840, 0x05000003,
- 0x91326424, 0x05fdf7f9, 0x1c01f000, 0x0005f8e7,
- 0x1c01f000, 0x5c036000, 0x4db00000, 0x49b3c857,
- 0x4933c857, 0x813261c0, 0x0500002d, 0x59300203,
- 0x90000580, 0x0500002a, 0x59300407, 0x4803c857,
- 0x90000d84, 0x0500000c, 0x90000d81, 0x0500000a,
- 0x90000d83, 0x05000004, 0x90000d86, 0x05020016,
- 0x0511ff29, 0x5930001e, 0x800001c0, 0x050e09ef,
- 0x0501f011, 0x5930000a, 0x82000580, 0x0010993e,
- 0x0500000d, 0x59300820, 0x4807c857, 0x4d300000,
- 0x40066000, 0x050dfa83, 0x5c026000, 0x05020006,
- 0x5804001e, 0x4803c857, 0x81300580, 0x05020002,
- 0x4978081e, 0x641e6407, 0x497a6009, 0x4a026004,
- 0x00004000, 0x59a8002a, 0xb0000c91, 0x05001002,
- 0x80000102, 0x48026006, 0x497a6205, 0x1c01f000,
- 0x0501f803, 0x41318800, 0x1c01f000, 0x91640490,
- 0x05021007, 0x42000000, 0x0010986b, 0x0515fad8,
- 0x4967c857, 0x80026580, 0x1c01f000, 0x8166c9c0,
- 0x05000018, 0x41626000, 0x41580000, 0x59300a03,
- 0x90040d80, 0x05000007, 0x91326424, 0x81300c80,
- 0x05fc17fb, 0x42026000, 0x0010ccb4, 0x05fdf7f8,
- 0x4933c857, 0x8166c840, 0x91300c24, 0x80040480,
- 0x05021005, 0x4006c000, 0x64226203, 0x813261c0,
- 0x1c01f000, 0x4202c000, 0x0010ccb4, 0x05fdf7fb,
- 0x42000000, 0x0010986b, 0x0515fab9, 0x4933c856,
- 0x417a6000, 0x05fdf7f6, 0x0005f905, 0x1c01f000,
- 0x4933c857, 0x91380593, 0x05020008, 0x59300004,
- 0x8c00053e, 0x05000004, 0x05f9fb0d, 0x05f9fa76,
- 0x05f9faf7, 0x1c01f000, 0x4933c857, 0x598800b7,
- 0x80000000, 0x480310b7, 0x1c01f000, 0x4933c857,
- 0x59300203, 0x9000348e, 0x05d21b28, 0x4d2c0000,
- 0x0c01f803, 0x5c025800, 0x1c01f000, 0x00105ed1,
- 0x00106375, 0x00106493, 0x00105ed1, 0x001064de,
- 0x00106006, 0x00105ed1, 0x00105ed1, 0x00106308,
- 0x00105ed1, 0x00105ed1, 0x00105ed1, 0x00105ed1,
- 0x00105ed1, 0x05d1fb15, 0x4933c857, 0x59300203,
- 0x9000348e, 0x05d21b11, 0x0c01f001, 0x00105ee5,
- 0x00106cc6, 0x00105ee5, 0x00105ee5, 0x00105ee5,
- 0x00105ee5, 0x00105ee5, 0x00105ee5, 0x00106c6f,
- 0x00106ce3, 0x00106d3f, 0x00106ce3, 0x00106d3f,
- 0x00105ee5, 0x05d1fb01, 0x05d1fb00, 0x4933c857,
- 0x4d2c0000, 0x59325809, 0x59300203, 0x9000348e,
- 0x05d21afa, 0x0c01f803, 0x5c025800, 0x1c01f000,
- 0x00105efe, 0x00105efe, 0x00105efe, 0x00105f13,
- 0x00105f48, 0x00105efe, 0x00105efe, 0x00105efe,
- 0x00105eff, 0x00105efe, 0x00105efe, 0x00105efe,
- 0x00105efe, 0x00105efe, 0x05d1fae8, 0x4933c857,
- 0xb1380580, 0x05d20ae5, 0x4a026008, 0x00082000,
- 0x640e6203, 0x493a6403, 0x64065c09, 0x592c000e,
- 0x48026013, 0x497a6015, 0x592c0209, 0x800000c2,
- 0x800010c4, 0x80081400, 0x480a6006, 0x0001f966,
- 0x42000800, 0x80000060, 0x0005f072, 0x4933c857,
- 0xb1380490, 0x05d21ad1, 0xb1380489, 0x05d01acf,
- 0x0c01f001, 0x00105f21, 0x00105f2a, 0x00105f20,
- 0x00105f20, 0x00105f20, 0x00105f20, 0x00105f30,
- 0x05d1fac6, 0x64126203, 0x640a5c09, 0x592c0208,
- 0x48025c0a, 0x592c020a, 0x48025a08, 0x592c000d,
- 0x4802580e, 0x1c01f000, 0x05f9f9e2, 0x0509fa4f,
- 0x05000003, 0x641a5a07, 0x0001fb2c, 0x0005f0e7,
- 0x05f9f9dc, 0x4d3c0000, 0x417a7800, 0x0201f800,
- 0x0010b660, 0x5c027800, 0x60503000, 0x41782800,
- 0x60082000, 0x4d400000, 0x4d440000, 0x59368c03,
- 0x60a68000, 0x050df926, 0x5c028800, 0x5c028000,
- 0x42000000, 0x00109878, 0x0515fa1d, 0x0509fa37,
- 0x000400e7, 0x64a65a07, 0x0001fb2c, 0x0005f0e7,
- 0x4933c857, 0xb1380588, 0x05000003, 0xb1380593,
- 0x05d20a9a, 0x592c0207, 0x90000587, 0x05000008,
- 0x59300013, 0x80000540, 0x05000005, 0x592c080d,
- 0x80040480, 0x4802580d, 0x64565a07, 0x592c0207,
- 0x80000540, 0x05020002, 0x64025a07, 0x0001fb2c,
- 0x0005f0e7, 0x4933c857, 0x4d2c0000, 0x4c500000,
- 0x4c540000, 0x4c580000, 0x4c5c0000, 0x4c600000,
- 0x4c640000, 0x4c100000, 0x05d1fe02, 0x05d00a7f,
- 0x497a5a07, 0x59a80085, 0x82000500, 0x0000f000,
- 0x48025c08, 0x59a80873, 0x90040c18, 0x48065a08,
- 0x412cb800, 0x4d2c0000, 0x41cca000, 0x6004c000,
- 0x60b0c800, 0x900404ad, 0x05021004, 0x912cac0a,
- 0x0505fe71, 0x0501f023, 0x40043000, 0x60b00800,
- 0x912cac0a, 0x0505fe6c, 0x901834ac, 0x4c180000,
- 0x05d1fde8, 0x5c003000, 0x05000012, 0x8060c000,
- 0x4a025805, 0x00000110, 0x492cb801, 0x90180cbd,
- 0x05021005, 0x40180800, 0x912cac06, 0x0505fe5e,
- 0x0501f010, 0x9064cc3c, 0x901834bc, 0x60f00800,
- 0x412cb800, 0x912cac06, 0x0505fe57, 0x05fdf7ec,
- 0x5c025800, 0x592c0207, 0x8400055e, 0x48025a07,
- 0x592c0408, 0x80640540, 0x48025c08, 0x0501f002,
- 0x5c025800, 0x5c002000, 0x813669c0, 0x05000003,
- 0x59343403, 0x0501f002, 0x61fc31ff, 0x49325809,
- 0x481a5c07, 0xb0100594, 0x05020012, 0x4a025809,
- 0xffffffff, 0x491e5814, 0x41781000, 0x831c0580,
- 0xffffffff, 0x0500000a, 0x591c0009, 0x80000d40,
- 0x05000007, 0x58040205, 0x82000500, 0x000000ff,
- 0x90000592, 0x05020002, 0x58041006, 0x480a5806,
- 0x846001c0, 0x80100540, 0x48025805, 0x0515facf,
- 0x05020010, 0x592c0001, 0x497a5801, 0x4c000000,
- 0x0001fb2c, 0x5c025800, 0x812e59c0, 0x05fe07f8,
- 0x5c00c800, 0x5c00c000, 0x5c00b800, 0x5c00b000,
- 0x5c00a800, 0x5c00a000, 0x5c025800, 0x1c01f000,
- 0x0511ff51, 0x05fdf7f7, 0x4803c856, 0x4c5c0000,
- 0x4d2c0000, 0x4c500000, 0x4c540000, 0x4c580000,
- 0x412cb800, 0x592c040c, 0x8c000516, 0x05000003,
- 0x41cca000, 0x0501f002, 0x91cca406, 0x4008b000,
- 0x41781000, 0xb058048c, 0x05001003, 0x6130b000,
- 0x40001000, 0x4c080000, 0x4d2c0000, 0x05d1fd85,
- 0x0500001f, 0x5c001800, 0x492c1801, 0x485a5800,
- 0x9058b403, 0x8058b104, 0x912cac02, 0x0515fa79,
- 0x585c040c, 0x8c000500, 0x0500000b, 0x912c1402,
- 0x8c000516, 0x05000002, 0x90081406, 0x64041000,
- 0x80081000, 0x46001000, 0x00000900, 0x84000500,
- 0x4800bc0c, 0x5c001000, 0x800811c0, 0x05fe07e0,
- 0x90000541, 0x5c00b000, 0x5c00a800, 0x5c00a000,
- 0x5c025800, 0x5c00b800, 0x1c01f000, 0x5c025800,
- 0x5c001000, 0x05fdf7f8, 0x4933c857, 0x91380d95,
- 0x05020002, 0x0005f0e7, 0x91380d96, 0x05d209db,
- 0x0005f0e7, 0x4933c857, 0x4d2c0000, 0x4c500000,
- 0x4c540000, 0x4c580000, 0x59325809, 0x91cca406,
- 0x59cc1806, 0x820c0580, 0x01000000, 0x05020003,
- 0x6008b000, 0x0501f00a, 0x6020b000, 0x912cac06,
- 0x0515fa0d, 0x8c0c0500, 0x05000007, 0x6020b000,
- 0x592e5801, 0x812e59c0, 0x05d009c4, 0x912cac06,
- 0x0515fa05, 0x0501f812, 0x5c00b000, 0x5c00a800,
- 0x5c00a000, 0x5c025800, 0x1c01f000, 0x4933c857,
- 0x4c500000, 0x4c540000, 0x4c580000, 0x91cca406,
- 0x5930a809, 0x9054ac06, 0x601cb000, 0x0515f9f6,
- 0x5c00b000, 0x5c00a800, 0x5c00a000, 0x4933c857,
- 0x0509f942, 0x000400e7, 0x4d2c0000, 0x0509fdf1,
- 0x05020008, 0x41780800, 0x4d400000, 0x60028000,
- 0x0509fccb, 0x5c028000, 0x5c025800, 0x0005f0e7,
- 0x5931d823, 0x58ef400a, 0x58ee580c, 0x4a025a05,
- 0x00000103, 0x58ec0008, 0x0801f800, 0x5c025800,
- 0x0005f0e7, 0x4933c857, 0x59cc1806, 0x820c0580,
- 0x02000000, 0x05020019, 0x4a026802, 0x00fffffd,
- 0x5934000a, 0x84000504, 0x4802680a, 0x59300c1f,
- 0x900405a1, 0x05020005, 0x61fc19ff, 0x60102000,
- 0x60483000, 0x05e5fdd1, 0x59300809, 0x800409c0,
- 0x000400e7, 0x4a000a05, 0x00000103, 0x480c0806,
- 0x5931d823, 0x58ef400a, 0x58ee580c, 0x58ec0008,
- 0x0801f800, 0x0005f0e7, 0x42000000, 0x00109881,
- 0x0515f8f3, 0x4c0c0000, 0x0501f804, 0x5c001800,
- 0x05fe07ee, 0x1c01f000, 0x4933c857, 0x4d2c0000,
- 0x59325809, 0x812e59c0, 0x05020008, 0x497a6006,
- 0x497a6205, 0x4d380000, 0x608a7000, 0x0501faf6,
- 0x5c027000, 0x80000580, 0x5c025800, 0x1c01f000,
- 0x4933c857, 0x4d2c0000, 0x4c500000, 0x4c540000,
- 0x4c580000, 0x59325809, 0x592e5801, 0x912cac06,
- 0x91cca406, 0x59a80885, 0x82040d00, 0x000003ff,
- 0x9004148f, 0x05001011, 0x603cb000, 0x0515f99a,
- 0x592e5801, 0x912cac06, 0x90080c8f, 0x05001008,
- 0x603cb000, 0x0515f994, 0x592e5801, 0x912cac06,
- 0x9004148f, 0x05001005, 0x603c1000, 0x4008b000,
- 0x0515f98d, 0x0501f003, 0x4004b000, 0x0515f98a,
- 0x5931d823, 0x58ef400a, 0x58ee580c, 0x4a025a05,
- 0x00000103, 0x592e5801, 0x58ec0008, 0x0801f800,
- 0x0005f8e7, 0x5c00b000, 0x5c00a800, 0x5c00a000,
+ 0x8c040500, 0x05020071, 0x82040d00, 0x00000080,
+ 0x0500006e, 0x0001f19b, 0x0501fc22, 0x843c7d4e,
+ 0x0001f1a8, 0x59307804, 0x823c7d00, 0x01880080,
+ 0x823c7d40, 0x80000005, 0x59300013, 0x82000500,
+ 0xffff0000, 0x05000002, 0x843c7d6a, 0x59300015,
+ 0x59301014, 0x80080580, 0x0502000b, 0x800811c0,
+ 0x05020004, 0x8c3c050e, 0x05000055, 0x0501f004,
+ 0x592c120c, 0x8c08051e, 0x05020051, 0x843c7d4a,
+ 0x0501f04f, 0x480bc857, 0x59300804, 0x82040500,
+ 0x00008080, 0x82000580, 0x00008080, 0x05020016,
+ 0x592c6001, 0x58300409, 0x90000503, 0x90000581,
+ 0x05020011, 0x84040d1e, 0x48066004, 0x59302015,
+ 0x5930001c, 0x80101480, 0x0500100b, 0x5830020a,
+ 0x41780800, 0x0535fe39, 0x800810c6, 0x59301814,
+ 0x800c0482, 0x80100580, 0x05020003, 0x48126014,
+ 0x05fdf7db, 0x42000000, 0x0010e43f, 0x055dfe7d,
+ 0x59302015, 0x59300416, 0x4803c857, 0x8c000514,
+ 0x0502000f, 0x599c1819, 0x8c0c0512, 0x0500000a,
+ 0x592c0813, 0x59300017, 0x80040c80, 0x05000005,
+ 0x05001004, 0x80040000, 0x80140480, 0x05001008,
+ 0x0541fac4, 0x900c1d41, 0x0501f01f, 0x84000514,
+ 0x48026416, 0x48126017, 0x4813c857, 0x4c3c0000,
+ 0x0501f954, 0x5c007800, 0x05020017, 0x5930500f,
+ 0x592c020c, 0x4803c857, 0x8c00051e, 0x05020004,
+ 0x903c7d60, 0x5930400e, 0x0501f004, 0x8400051e,
+ 0x48025a0c, 0x0501f907, 0x50201800, 0x480e600c,
+ 0x4832600d, 0x4822600e, 0x482a600f, 0x480fc857,
+ 0x4833c857, 0x4823c857, 0x482bc857, 0x80000580,
+ 0x483e6004, 0x1c01f000, 0x05f9fc48, 0x4933c857,
+ 0x4d2c0000, 0x59900005, 0x81300580, 0x05fa0c43,
+ 0x054dfb31, 0x05f80c41, 0x59325809, 0x4d3c0000,
+ 0x4d400000, 0x59300004, 0x4803c857, 0x4c000000,
+ 0x0539fda9, 0x0539faab, 0x5c000000, 0x8c000516,
+ 0x05000014, 0x82000d00, 0x01000080, 0x05020004,
+ 0x592c0a0e, 0x8c040506, 0x0502000e, 0x592c0013,
+ 0x4803c857, 0x4802580b, 0x41780800, 0x600a8000,
+ 0x0525fc7b, 0x4a025c0a, 0x0000ffff, 0x492fc857,
+ 0x0001fb82, 0x0551fcfc, 0x0541fa1a, 0x0501f01b,
+ 0x640a6203, 0x592c020c, 0x8c000512, 0x05020004,
+ 0x592c020c, 0x8400054e, 0x48025a0c, 0x59300407,
+ 0x90000586, 0x0502000f, 0x592c0811, 0x59140001,
+ 0x82000500, 0xffff0000, 0x05000004, 0x811800ca,
+ 0x81c80c00, 0x58040939, 0x48066017, 0x592c0011,
+ 0x80040480, 0x592c0813, 0x80040480, 0x4802580f,
+ 0x417a7800, 0x0549fe44, 0x5c028000, 0x5c027800,
0x5c025800, 0x1c01f000, 0x4933c857, 0x4d2c0000,
- 0x4c500000, 0x4c540000, 0x4c580000, 0x59cc0006,
- 0x82000d80, 0x01000000, 0x05000021, 0x59cc0007,
- 0x9000b1c0, 0x8258b500, 0x000000ff, 0x8058b104,
- 0x9058b402, 0x90580c87, 0x05001002, 0x6018b000,
- 0x91cca406, 0x59301009, 0x800811c0, 0x05d00923,
- 0x9008ac06, 0x0515f964, 0x82000d00, 0xff000000,
- 0x800409c0, 0x05000014, 0x8200b500, 0x000000ff,
- 0x05000011, 0x8058b104, 0x90580c8e, 0x05001002,
- 0x6034b000, 0x58081001, 0x800811c0, 0x05d00913,
- 0x9008ac06, 0x0515f954, 0x0501f007, 0x59301009,
- 0x800811c0, 0x05d0090d, 0x48001006, 0x59cc0007,
- 0x48001007, 0x05fdff5a, 0x5c00b000, 0x5c00a800,
- 0x5c00a000, 0x5c025800, 0x1c01f000, 0x4933c857,
- 0x4d2c0000, 0x4c500000, 0x4c540000, 0x4c580000,
- 0x6008b000, 0x59cc0806, 0x82040580, 0x01000000,
- 0x05000004, 0x8204b500, 0x0000ffff, 0x8058b104,
- 0x91cca406, 0x59300009, 0x9000ac06, 0x0515f936,
- 0x05fdff43, 0x5c00b000, 0x5c00a800, 0x5c00a000,
- 0x5c025800, 0x1c01f000, 0x4933c857, 0x4803c857,
- 0x4807c857, 0x480bc857, 0x480fc857, 0x4813c857,
- 0x481bc857, 0x492fc857, 0x4d2c0000, 0x4c000000,
- 0x05d1fc51, 0x5c000000, 0x0500000d, 0x48025803,
- 0x481a5801, 0x48125808, 0x48065805, 0x480a5806,
- 0x480e5807, 0x5c001000, 0x4c080000, 0x480a5809,
- 0x412c1000, 0x0001f81c, 0x90000541, 0x5c025800,
- 0x1c01f000, 0x4933c857, 0x4937c857, 0x4d1c0000,
- 0x05f5fc50, 0x05020020, 0x59cc0001, 0x82000500,
- 0x00ffffff, 0x59341002, 0x82081500, 0x00ffffff,
- 0x80080580, 0x05020018, 0x497a6205, 0x60d40800,
- 0x0509fb7c, 0x0502000f, 0x591c001e, 0x800001c0,
- 0x0500000c, 0x497a381e, 0x591c0416, 0x8c000502,
- 0x05d008ba, 0x84000502, 0x48023c16, 0x591c1407,
- 0x90080583, 0x05000005, 0x90080586, 0x05000005,
- 0x05fdfd19, 0x0501f004, 0x0501f805, 0x0501f002,
- 0x0501f8b2, 0x5c023800, 0x1c01f000, 0x4d2c0000,
- 0x591e5809, 0x4933c857, 0x491fc857, 0x493bc857,
- 0x492fc857, 0x91380595, 0x050000a6, 0x91380596,
- 0x050200a2, 0x4d300000, 0x411e6000, 0x59cc0207,
- 0x4803c857, 0x82000d00, 0x0000ff00, 0x82040580,
- 0x00001700, 0x05000004, 0x82040580, 0x00000300,
- 0x05020055, 0x591c0203, 0x4803c857, 0x9000058d,
- 0x0500003a, 0x812e59c0, 0x0500008f, 0x591c0202,
- 0x4803c857, 0x82000580, 0x0000ffff, 0x05020079,
- 0x592c020b, 0x4803c857, 0x90000503, 0x90000582,
- 0x05020007, 0x592c0810, 0x591c0013, 0x4803c857,
- 0x4807c857, 0x80040580, 0x0502006e, 0x591c0416,
- 0x4803c857, 0x8c000500, 0x0502006a, 0x42000000,
- 0x0010985e, 0x0511fff2, 0x41780800, 0x591c1006,
- 0x60280000, 0x05f5fe9b, 0x592c0407, 0x4803c857,
- 0x800001c0, 0x0500000b, 0x80080c80, 0x05001003,
- 0x05d2086e, 0x80001040, 0x480a5c07, 0x800811c0,
- 0x05020004, 0x0201f800, 0x0010c012, 0x0501f063,
- 0x0509f8ca, 0x591c0819, 0x591c001a, 0x48065809,
- 0x4802580a, 0x59300008, 0x8c000500, 0x05d6098a,
- 0x497a3809, 0x0001fa84, 0x0502004a, 0x411e6000,
- 0x05fdfcc1, 0x0501f055, 0x05fdfcf5, 0x05000013,
- 0x591c0006, 0x48026006, 0x4936600a, 0x640e6407,
- 0x492e6009, 0x591c0819, 0x591c101a, 0x48066019,
- 0x480a601a, 0x4d380000, 0x591e7403, 0x4d300000,
- 0x411e6000, 0x05fdfcb0, 0x5c026000, 0x0005f905,
- 0x5c027000, 0x0501f041, 0x59a8002c, 0x48023a05,
- 0x0501f03e, 0x59cc0407, 0x9000058b, 0x05020026,
- 0x59340a00, 0x84040d0e, 0x48066a00, 0x592c0a05,
- 0x82040d00, 0x000000ff, 0x90040d94, 0x05000002,
- 0x640e621f, 0x59300008, 0x8c000500, 0x05d6095e,
- 0x4d400000, 0x497a5c0a, 0x600e8000, 0x592c0a09,
- 0x05edfdbe, 0x0515f8bf, 0x05020006, 0x0001fb2c,
- 0x59300a1f, 0x90040d83, 0x0508088c, 0x497a6009,
- 0x5c028000, 0x4a026403, 0x00000085, 0x64266203,
- 0x640a6407, 0x42000800, 0x80004040, 0x0509ff19,
- 0x0005f87c, 0x4203e000, 0xb0800000, 0x6023f800,
- 0x0501f016, 0x59cc0207, 0x82000580, 0x00002a00,
- 0x05020004, 0x59a8002c, 0x48023a05, 0x0501f00f,
- 0x812e59c0, 0x05d00811, 0x4a025a05, 0x00000103,
- 0x591c0008, 0x8c000500, 0x05d60937, 0x591c0402,
- 0x48025c07, 0x640e5a07, 0x497a5c0a, 0x0001fb2c,
- 0x05fdfc6d, 0x05edfa1c, 0x5c026000, 0x0005f8e7,
- 0x0501f002, 0x5c026000, 0x5c025800, 0x1c01f000,
- 0x0501f813, 0x05fdf7fd, 0x4933c857, 0x91380595,
- 0x05020004, 0x59a8002c, 0x48023a05, 0x0501f009,
- 0x91380596, 0x05020009, 0x4d300000, 0x411e6000,
- 0x0511fb95, 0x0005f853, 0x0005f8e7, 0x5c026000,
- 0x497a381e, 0x0005f8e7, 0x1c01f000, 0x4c5c0000,
- 0x591c0416, 0x84000540, 0x48023c16, 0x59ccb80b,
- 0x4933c857, 0x491fc857, 0x492fc857, 0x4803c857,
- 0x485fc857, 0x8c5c053c, 0x05000005, 0x59a8002c,
- 0x48023a05, 0x497a381e, 0x0501f049, 0x4d300000,
- 0x411e6000, 0x0505fc2d, 0x5c026000, 0x591c0407,
- 0x90000580, 0x05000042, 0x591c0403, 0xb0000590,
- 0x0502000a, 0x4d300000, 0x411e6000, 0x64066203,
- 0x42000800, 0x80000043, 0x0005f87c, 0x5c026000,
- 0x497a381e, 0x0501f036, 0x591c0203, 0x9000058d,
- 0x0500001c, 0x812e59c0, 0x05cc0fc4, 0x592c020b,
- 0x4803c857, 0x8c000500, 0x0502001b, 0x8c000502,
- 0x05000014, 0x591c0416, 0x8c00051c, 0x05020007,
- 0x591c0013, 0x4803c857, 0x800001c0, 0x0500000d,
- 0x591c0014, 0x48023818, 0x4a023814, 0x0fffffff,
- 0x592c0209, 0x8400051e, 0x48025a09, 0x42000000,
- 0x00109860, 0x0511ff26, 0x64063a16, 0x0501f016,
- 0x42000000, 0x00109861, 0x0511ff21, 0x641e3a16,
- 0x0501f011, 0x8c5c053a, 0x05fe07fa, 0x59cc000a,
- 0x592c1810, 0x4803c857, 0x480fc857, 0x800c0580,
- 0x05fc07f4, 0x59cc000a, 0x4803c857, 0x48023818,
- 0x48023817, 0x42000000, 0x0010985f, 0x0511ff10,
- 0x64163a16, 0x5c00b800, 0x0509f11d, 0x5c00b800,
- 0x0005f0e7, 0x4933c857, 0x4d1c0000, 0x05f5fb11,
- 0x0502003f, 0x59cc0001, 0x59341002, 0x80080580,
- 0x82000500, 0x00ffffff, 0x05020037, 0x5930141b,
- 0x0509fa88, 0x05cc0f85, 0x591c1407, 0x90080587,
- 0x05000031, 0x90080582, 0x0500002f, 0x90080580,
- 0x0500002d, 0x591c0202, 0x82000d80, 0x0000ffff,
- 0x05000004, 0x59301a1b, 0x800c0580, 0x05020026,
- 0x91380595, 0x05000022, 0x4d300000, 0x4d2c0000,
- 0x411e6000, 0x59325809, 0x0505ff04, 0x05cc0f6f,
- 0x592c0205, 0x82000500, 0x000000ff, 0x90000594,
- 0x05000002, 0x640e621f, 0x497a5c0a, 0x600e8000,
- 0x592c0a09, 0x05edfcf5, 0x0511fff6, 0x05020006,
- 0x0001fb2c, 0x59300a1f, 0x90040d83, 0x05040fc3,
- 0x497a6009, 0x5c025800, 0x4a026403, 0x00000085,
- 0x64266203, 0x640a6407, 0x42000800, 0x80004040,
- 0x0005f87c, 0x5c026000, 0x0501f003, 0x59a8002c,
- 0x48023a05, 0x497a381e, 0x0005f8e7, 0x5c023800,
- 0x1c01f000, 0x4933c857, 0x4c580000, 0x4d2c0000,
- 0x59325809, 0x59342200, 0x82102500, 0xffffdffd,
- 0x48126a00, 0x91383595, 0x05000009, 0x0505fed7,
- 0x05000045, 0x0509fb87, 0x05020003, 0x6008b000,
- 0x0509fb69, 0x0501f9c2, 0x0501f058, 0x91cc1408,
- 0x6008b000, 0x91341c06, 0x0501fd89, 0x0502000f,
- 0x91cc140a, 0x6008b000, 0x91341c08, 0x0501fd84,
- 0x0502000a, 0x05d9fedd, 0x59342200, 0x59cc1007,
- 0x800811c0, 0x05000003, 0x480a6801, 0x84102542,
- 0x48126a00, 0x0501f047, 0x4d3c0000, 0x417a7800,
- 0x0201f800, 0x0010b660, 0x5c027800, 0x42000000,
- 0x00109878, 0x0511fe9a, 0x59340200, 0x84000558,
- 0x48026a00, 0x4d300000, 0x05fdfbb9, 0x05cc0f1b,
- 0x4936600a, 0x497a6009, 0x64066407, 0x64066403,
- 0x600c3000, 0x0511fcf4, 0x8d0c0520, 0x0500000b,
- 0x41782800, 0x60043000, 0x4d400000, 0x60a68000,
- 0x0511f8b9, 0x5c028000, 0x64126407, 0x641e6203,
- 0x64066422, 0x0501f005, 0x64066203, 0x602c0800,
- 0x05e9fe36, 0x05f5fde3, 0x5c026000, 0x0505fe97,
- 0x0500001e, 0x0509fb47, 0x0502001e, 0x0501f984,
- 0x0501f01a, 0x42000000, 0x0010987b, 0x0511fe74,
- 0x4d3c0000, 0x417a7800, 0x0201f800, 0x0010b660,
- 0x42000000, 0x00109878, 0x0511fe6d, 0x59340200,
- 0x84000558, 0x48026a00, 0x600c3000, 0x41782800,
- 0x60142000, 0x4d400000, 0x4d440000, 0x59368c03,
- 0x60a68000, 0x0509fd66, 0x5c028800, 0x5c028000,
- 0x5c027800, 0x05d9fe91, 0x0005f8e7, 0x0501f002,
- 0x05fdfd33, 0x5c025800, 0x5c00b000, 0x1c01f000,
- 0x4933c857, 0x41380000, 0xb1383498, 0x05ce1edb,
- 0x0c01f001, 0x00106371, 0x0010636e, 0x00106371,
- 0x00106371, 0x00106371, 0x00106371, 0x0010636d,
- 0x0010636d, 0x0010636d, 0x0010636d, 0x0010636d,
- 0x0010636d, 0x0010636d, 0x0010636d, 0x0010636d,
- 0x0010636d, 0x0010636d, 0x0010636d, 0x0010636d,
- 0x0010636d, 0x0010636d, 0x0010636d, 0x0010636d,
- 0x0010636d, 0x0010636d, 0x0010636d, 0x0010636d,
- 0x0010636d, 0x0010636d, 0x0010636d, 0x0010636d,
- 0x00106371, 0x0010636d, 0x00106371, 0x00106371,
- 0x0010636d, 0x0010636d, 0x0010636d, 0x0010636d,
- 0x0010636d, 0x00106371, 0x0010636d, 0x0010636d,
- 0x0010636d, 0x0010636d, 0x0010636d, 0x0010636d,
- 0x0010636d, 0x0010636d, 0x0010636d, 0x00106371,
- 0x00106371, 0x0010636d, 0x0010636d, 0x0010636d,
- 0x0010636d, 0x0010636d, 0x0010636d, 0x0010636d,
- 0x0010636d, 0x0010636d, 0x00106371, 0x0010636d,
- 0x0010636d, 0x0010636d, 0x0010636d, 0x0010636d,
- 0x00106371, 0x00106371, 0x0010636d, 0x0010636d,
- 0x0010636d, 0x0010636d, 0x00106371, 0x0010636d,
- 0x0010636d, 0x0010636d, 0x00106371, 0x0010636d,
- 0x0010636d, 0x0010636d, 0x00106371, 0x0010636d,
- 0x0010636d, 0x0010636d, 0x00106371, 0x0010636d,
- 0x00106371, 0x0010636d, 0x0010636d, 0x0010636d,
- 0x0010636d, 0x0010636d, 0x0010636d, 0x0010636d,
- 0x0010636d, 0x05cdfe79, 0x64066203, 0x493a6403,
- 0x05f5f554, 0x4933c857, 0x64066203, 0x493a6403,
- 0x05f5f550, 0x59300403, 0xb0003498, 0x05ce1e6f,
- 0x91383593, 0x05000074, 0x913835a7, 0x0502003c,
- 0x4933c857, 0x05f5fdac, 0x0511fd0f, 0x0505fede,
- 0x05000009, 0x0505fef0, 0x05000033, 0x59300403,
- 0x90000da2, 0x0502002d, 0x05fdfcec, 0x0500002d,
- 0x0501f02d, 0x05d9fe09, 0x601c0800, 0x05e9fd8b,
- 0x0501f8df, 0x4d440000, 0x59368c03, 0x83440580,
- 0x000007fe, 0x05020007, 0x59a8121b, 0x84081540,
- 0x05edfd80, 0x05020002, 0x8408154a, 0x480b521b,
- 0x60a68000, 0x4d3c0000, 0x417a7800, 0x0201f800,
- 0x0010b660, 0x5c027800, 0x916c0583, 0x0500000b,
- 0x5932680a, 0x59340008, 0x800001c0, 0x05020007,
- 0x59368c03, 0x4933c857, 0x4937c857, 0x4947c857,
- 0x05e9fdfb, 0x0501f008, 0x42000000, 0x00109878,
- 0x0511fdb3, 0x60543000, 0x41782800, 0x600c2000,
- 0x0509fcb3, 0x5c028800, 0x0509f872, 0x0005f0e7,
- 0x1c01f000, 0x0501f8b6, 0x05fdf7fc, 0x91380594,
- 0x05000008, 0x4933c857, 0x05f9f94b, 0x05fe02fb,
- 0x59300203, 0x90000582, 0x050000d5, 0x05cdfe27,
- 0x4933c857, 0x05f5fd68, 0x0511fccb, 0x4d3c0000,
- 0x417a7800, 0x0201f800, 0x0010b660, 0x5c027800,
- 0x60583000, 0x41782800, 0x4d400000, 0x4d440000,
- 0x59368c03, 0x60242000, 0x60a68000, 0x0509fc94,
- 0x5c028800, 0x5c028000, 0x42000000, 0x00109878,
- 0x0511fd8b, 0x0505fe88, 0x0502000b, 0x05d9fdbb,
- 0x0501f893, 0x59340c03, 0x82040580, 0x000007fe,
- 0x05fe07d6, 0x59a80a1b, 0x84040d40, 0x4807521b,
- 0x05fdf7d2, 0x0505fe90, 0x05020003, 0x0501f888,
- 0x05fdf7ce, 0x59300403, 0x90000db2, 0x05020003,
- 0x05ddf823, 0x05fdf7c9, 0x90000da2, 0x05000880,
- 0x05fdf7c6, 0x4933c857, 0x4803c857, 0x0c01f001,
- 0x00106451, 0x00106451, 0x00106451, 0x00106451,
- 0x00106451, 0x00106451, 0x00106450, 0x00106450,
- 0x00106450, 0x00106450, 0x00106450, 0x00106450,
- 0x00106450, 0x00106450, 0x00106450, 0x00106450,
- 0x00106450, 0x00106450, 0x00106450, 0x00106450,
- 0x00106450, 0x00106450, 0x00106450, 0x00106450,
- 0x00106450, 0x00106450, 0x00106450, 0x00106450,
- 0x00106450, 0x00106450, 0x00106453, 0x00106466,
- 0x00106450, 0x00106466, 0x00106466, 0x00106450,
- 0x00106450, 0x00106450, 0x00106450, 0x00106450,
- 0x00106466, 0x00106466, 0x00106450, 0x00106450,
- 0x00106450, 0x00106450, 0x00106450, 0x00106450,
- 0x00106450, 0x00106450, 0x0010645e, 0x00106466,
- 0x00106450, 0x00106459, 0x00106450, 0x00106450,
- 0x00106450, 0x00106459, 0x00106450, 0x00106450,
- 0x00106450, 0x00106466, 0x0010645c, 0x00106450,
- 0x00106450, 0x00106450, 0x00106450, 0x00106466,
- 0x00106466, 0x00106450, 0x00106450, 0x00106450,
- 0x00106450, 0x00106466, 0x00106450, 0x00106450,
- 0x00106450, 0x00106466, 0x00106450, 0x00106450,
- 0x00106450, 0x00106466, 0x00106450, 0x00106450,
- 0x00106450, 0x00106466, 0x00106450, 0x00106466,
- 0x00106450, 0x00106450, 0x00106450, 0x00106450,
- 0x00106450, 0x00106450, 0x00106450, 0x00106450,
- 0x05cdfd96, 0x640a6203, 0x0505f67f, 0x64166203,
- 0x59a8002c, 0x48026205, 0x59a8002a, 0x48026006,
- 0x1c01f000, 0x59300820, 0x49780a05, 0x0501f00b,
- 0x0505ffc8, 0x0005f0e7, 0x05d9ffad, 0x05f5fd60,
- 0x05000003, 0x05f5fcc8, 0x0005f0e7, 0x05f5fcc6,
- 0x0005f8e7, 0x05f5f546, 0x4933c857, 0x640a6203,
- 0x59a8002a, 0x48026006, 0x1c01f000, 0x4933c857,
- 0x0505fd0e, 0x05000025, 0x4d2c0000, 0x0509f9bd,
- 0x05020007, 0x4d400000, 0x60c68000, 0x60100800,
- 0x0509f897, 0x5c028000, 0x0501f01b, 0x59300c07,
- 0x90040590, 0x05000003, 0x90040591, 0x05020007,
- 0x64c65a07, 0x6412580e, 0x4a02580f, 0x000000ff,
- 0x0001fb2c, 0x0501f010, 0x592c0405, 0x8c00051e,
- 0x0500000d, 0x4a025a05, 0x00000103, 0x4a025806,
- 0x01000000, 0x4da00000, 0x4cec0000, 0x5931d823,
- 0x58ef400a, 0x58ec0008, 0x0801f800, 0x5c01d800,
- 0x5c034000, 0x5c025800, 0x1c01f000, 0x4933c857,
- 0x83340580, 0x0010993e, 0x05020007, 0x91380d95,
- 0x05000003, 0x91380d96, 0x05fe021c, 0x0511fbf4,
- 0x0005f0e7, 0x59340400, 0x82000500, 0x000000ff,
- 0x9000348c, 0x05ce1d45, 0x59303403, 0xb0180d8d,
- 0x050407d1, 0x90180db3, 0x05040798, 0x90180da8,
- 0x050405fd, 0x90180da9, 0x05040607, 0xb0180d97,
- 0x05080494, 0x90180d9f, 0x05fc037d, 0xb0180d95,
- 0x05fc035d, 0x90180d80, 0x05fc05e7, 0x90180da2,
- 0x05fc0399, 0x90180db5, 0x05fc045f, 0x90180db9,
- 0x05fc059d, 0x90180dbd, 0x05fc03c6, 0xb0180d84,
- 0x05fc03f2, 0xb0180d89, 0x05fc0425, 0xb0180d83,
- 0x050800d1, 0x90180d84, 0x05020002, 0x60040000,
- 0x91380d95, 0x05000004, 0x91380d96, 0x05fe01ef,
- 0x0501f1c5, 0x4c000000, 0x0511fbc5, 0x5c000000,
- 0x4d2c0000, 0x4d3c0000, 0x0c01f804, 0x5c027800,
- 0x5c025800, 0x1c01f000, 0x001064e5, 0x001064e9,
- 0x001064e5, 0x00106539, 0x001064e5, 0x0010662c,
- 0x001066a0, 0x001064e5, 0x001064e5, 0x00106676,
- 0x001064e5, 0x00106681, 0x4933c857, 0x497a6008,
- 0x59300809, 0x58040000, 0x4a000a05, 0x00000103,
- 0x0005f0e7, 0x4933c857, 0x40000000, 0x40000000,
- 0x1c01f000, 0x4933c857, 0x05e9feb1, 0x59a80073,
- 0xb00005b4, 0x0502003c, 0x050dfe37, 0x0502000e,
- 0x0501f83c, 0x0505fc89, 0x05000009, 0x0509f939,
- 0x05020007, 0x41780800, 0x4d400000, 0x60028000,
- 0x0509f813, 0x5c028000, 0x0501f002, 0x05d9fc97,
- 0x0005f0e7, 0x0505fc7d, 0x05000005, 0x0509f92d,
- 0x05020003, 0x05fdff6a, 0x0005f0e7, 0x417a7800,
- 0x0201f800, 0x0010b660, 0x42000000, 0x00109878,
- 0x0511fc57, 0x59340200, 0x84000558, 0x48026a00,
- 0x600c3000, 0x0511fab8, 0x4d300000, 0x05fdf974,
- 0x05cc0cd6, 0x4936600a, 0x497a6009, 0x64066407,
- 0x64066403, 0x8d0c0520, 0x0500000b, 0x64126407,
- 0x641e6203, 0x64066422, 0x60043000, 0x4d400000,
- 0x60a68000, 0x41782800, 0x050dfe73, 0x5c028000,
- 0x0501f005, 0x602c0800, 0x05e9fbf4, 0x64066203,
- 0x05f5fba0, 0x5c026000, 0x05fdff45, 0x05d9fc6b,
- 0x0005f0e7, 0x05fdff42, 0x60040000, 0x0501f0c9,
- 0x4933c857, 0x59340200, 0x8c000500, 0x05000009,
- 0x4d3c0000, 0x417a7800, 0x05e9fbd9, 0x5c027800,
- 0x8d0c0520, 0x05000003, 0x60180800, 0x05e9fbdf,
- 0x1c01f000, 0x4933c857, 0x59a80873, 0xb00405b4,
- 0x0500000e, 0x4807c857, 0x82040580, 0x00000100,
- 0x050200a0, 0x59cc0408, 0x4803c857, 0x8c000500,
- 0x0500009c, 0x59341403, 0x82080580, 0x000007fe,
- 0x05000006, 0x0501f097, 0x59341403, 0x82080580,
- 0x000007fe, 0x05020015, 0x59a8021b, 0x8c000506,
- 0x05000010, 0x59cc0000, 0x82000500, 0x000000ff,
- 0x59a8080f, 0x82040d00, 0x000000ff, 0x80040580,
- 0x05000008, 0x05d9fc39, 0x0005f8e7, 0x42000000,
- 0x00109869, 0x0511fc02, 0x6006d800, 0x05e9f03f,
- 0x0501fa18, 0x0501f043, 0x05e9fc72, 0x59341403,
- 0x82080580, 0x000007fc, 0x05020022, 0x4a026802,
- 0x00fffffc, 0x0505fc11, 0x0500000c, 0x0509f8c1,
- 0x0502000a, 0x0501f89a, 0x41780800, 0x4d400000,
- 0x60028000, 0x0505ff9a, 0x5c028000, 0x60100800,
- 0x05e9fba2, 0x0005f0e7, 0x60100800, 0x05e9fb9f,
- 0x05d9fc1a, 0x59300c1f, 0x900405a1, 0x05000002,
- 0x0005f0e7, 0x61f6880f, 0x42003000, 0x00fffffd,
- 0x05e9fbc9, 0x05ce0c65, 0x4936600a, 0x497a6c12,
- 0x640e601e, 0x64066203, 0x648a6403, 0x05f5f33d,
- 0x59a80086, 0x8c000502, 0x0500000d, 0x05edfb89,
- 0x60401000, 0x05020008, 0x59340002, 0x82000500,
- 0x00ff0000, 0x82000580, 0x00ff0000, 0x05000004,
- 0x60201000, 0x05edf8f7, 0x0502004a, 0x0505fbe3,
- 0x0500004b, 0x0509f893, 0x05020005, 0x592c0405,
- 0x8c00051c, 0x05fe07cc, 0x0501f869, 0x60140800,
- 0x05e9fb76, 0x64066203, 0x640e6403, 0x05f5f321,
- 0x59cc0408, 0x8c000518, 0x05000016, 0x0505fe51,
- 0x05edfb6c, 0x05000008, 0x59cc0408, 0x8c000516,
- 0x05000005, 0x5930041f, 0x900005a1, 0x05fe07ba,
- 0x1c01f000, 0x59a8021b, 0x8400054a, 0x4803521b,
- 0x4803541b, 0x59a8000f, 0x84000570, 0x48038832,
- 0x5930041f, 0x900005a1, 0x05fe07af, 0x1c01f000,
- 0x61bc1001, 0x480b500f, 0x497b8830, 0x84081570,
- 0x480b8832, 0x0505fe54, 0x59a8021b, 0x84000548,
- 0x4803521b, 0x4803541b, 0x050dfda8, 0x05fe07a2,
- 0x599c0019, 0x8c000510, 0x05020029, 0x59a8021b,
- 0x8400054c, 0x4803521b, 0x601c0800, 0x05e9fb47,
- 0x417a7800, 0x05e9fb3a, 0x61a00001, 0x05f1fdcf,
- 0x05e80b75, 0x05ce0c11, 0x4936600a, 0x59340200,
- 0x8400051a, 0x48026a00, 0x600c0800, 0x05e9fb3b,
- 0x64066407, 0x64066203, 0x640a6403, 0x05f5f2e5,
- 0x05fdfe8b, 0x60040000, 0x0501f012, 0x599c0017,
- 0x8c00050a, 0x05fc07ba, 0x60100800, 0x05e9fb2f,
- 0x4937507d, 0x59a8021b, 0x8c000508, 0x05000008,
- 0x599c0018, 0x8c00051c, 0x05000005, 0x61a00807,
- 0x42001000, 0x0010c159, 0x05f5f93a, 0x0005f0e7,
- 0x4933c857, 0x80003540, 0x05000003, 0x601c0800,
- 0x05e9fb1e, 0x801831c0, 0x0502000b, 0x59302009,
- 0x801021c0, 0x05000004, 0x58100405, 0x8c00051e,
- 0x05020005, 0x59341c03, 0x60102000, 0x60483000,
- 0x05e5f82a, 0x05d9fb8d, 0x0005f0e7, 0x4c5c0000,
- 0x4d2c0000, 0x59325809, 0x05f1f986, 0x5c025800,
- 0x59cc0008, 0x48002805, 0x59cc0009, 0x48002806,
- 0x49782807, 0x49782808, 0x49782809, 0x4978280a,
- 0x59cc0013, 0x8c00053e, 0x05000009, 0x59cc0414,
- 0x900001c0, 0x59ccbc15, 0x805c0540, 0x48002807,
- 0x59cc0416, 0x900001c0, 0x48002808, 0x59cc0017,
- 0x8c00053e, 0x05000009, 0x59cc0418, 0x900001c0,
- 0x59ccbc19, 0x805c0540, 0x48002809, 0x59cc041a,
- 0x900001c0, 0x4800280a, 0x5c00b800, 0x1c01f000,
- 0x4933c857, 0x59a80073, 0x90000594, 0x05020036,
- 0x59a80086, 0x8c000502, 0x05000011, 0x05edfae1,
- 0x60401000, 0x05020008, 0x59340002, 0x82000500,
- 0x00ff0000, 0x82000580, 0x00ff0000, 0x05000008,
- 0x60201000, 0x05edf84f, 0x05000005, 0x59a80086,
- 0x8400054c, 0x48035086, 0x0501f023, 0x916c0583,
- 0x05020008, 0x59300009, 0x80000540, 0x05020005,
- 0x59341c03, 0x60182000, 0x604c3000, 0x05e1ffe3,
- 0x05e9fbe3, 0x05fdfedf, 0x0501f9d0, 0x05020016,
- 0x59340404, 0x80000540, 0x05000013, 0x60180800,
- 0x05e9fac2, 0x0505fb25, 0x0500000d, 0x0505ffd5,
- 0x05020007, 0x41780800, 0x4d400000, 0x60028000,
- 0x0505feaf, 0x5c028000, 0x0005f0e7, 0x4a025a05,
- 0x00000103, 0x4a025806, 0x02000000, 0x05d9fb2f,
- 0x0005f0e7, 0x05e9ffde, 0x0505fb14, 0x05000005,
- 0x0505ffc4, 0x05020003, 0x05fdfe01, 0x0005f0e7,
- 0x05fdfdff, 0x0511fa22, 0x80000580, 0x59a80086,
- 0x8c00050c, 0x05000004, 0x8400050c, 0x48035086,
- 0x90000541, 0x05fdf77f, 0x4933c857, 0x59a80073,
- 0x90000594, 0x05020006, 0x602c0800, 0x05e9fa9b,
- 0x64066203, 0x64066403, 0x05f5f246, 0x60040000,
- 0x05fdf774, 0x4933c857, 0x40003000, 0x59a80073,
- 0x90000584, 0x05020006, 0x9018358b, 0x05020003,
- 0x601c0800, 0x05e9fa8d, 0x0005f0e7, 0x60040000,
- 0x05fdf768, 0x4803c857, 0x4d2c0000, 0x4d3c0000,
- 0x0c01f804, 0x5c027800, 0x5c025800, 0x1c01f000,
- 0x001064e5, 0x001066ac, 0x001064e5, 0x001066ef,
- 0x001064e5, 0x0010673c, 0x001066a0, 0x001064e5,
- 0x001064e5, 0x00106752, 0x001064e5, 0x0010675d,
- 0x4933c857, 0x4d1c0000, 0x59301403, 0x90080583,
- 0x05000006, 0x9008159e, 0x05020002, 0x0005f8e7,
- 0x5c023800, 0x1c01f000, 0x05fdff82, 0x05fdf7fd,
- 0x4933c857, 0x42000000, 0x0010987c, 0x0511fab0,
- 0x0511f9df, 0x05e9fcea, 0x0505fac8, 0x05000007,
- 0x0505ff78, 0x05020005, 0x6008b000, 0x0505ff5a,
- 0x05fdfdb3, 0x0005f0e7, 0x0501f8ae, 0x05020020,
- 0x417a7800, 0x05e9fa4e, 0x417a7800, 0x0201f800,
- 0x0010b660, 0x42000000, 0x00109878, 0x0511fa9c,
- 0x59340200, 0x84000558, 0x48026a00, 0x640a6403,
- 0x600c3000, 0x0511f8fc, 0x8d0c0520, 0x0500000b,
- 0x4d400000, 0x41782800, 0x60143000, 0x60a68000,
- 0x050dfcc1, 0x5c028000, 0x641e6203, 0x64126407,
- 0x64066422, 0x1c01f000, 0x600c0800, 0x05e9fa3f,
- 0x64066203, 0x05f5f9eb, 0x05fdf7fb, 0x59cc0407,
- 0x90000589, 0x05020009, 0x59340412, 0x82000500,
- 0x000000ff, 0x0500000b, 0x80000040, 0x48026c12,
- 0x642a6006, 0x05fdf7f0, 0x59cc0207, 0x82000500,
- 0x0000ff00, 0x82000580, 0x00001900, 0x05fc07d3,
- 0x05fdfd7f, 0x80000580, 0x05fdf706, 0x4933c857,
- 0x0505fa8a, 0x0500000b, 0x0505ff3a, 0x05020009,
- 0x4c580000, 0x6008b000, 0x0505ff1b, 0x5c00b000,
- 0x05fdfd73, 0x601c0800, 0x05e9fa1c, 0x0005f0e7,
- 0x05fdfd6f, 0x59cc3407, 0x82183500, 0x000000ff,
- 0x90180585, 0x05000016, 0x9018058b, 0x05000011,
- 0x59cc0207, 0x82000500, 0x0000ff00, 0x05020003,
- 0x90180589, 0x0500000e, 0x82000580, 0x00001900,
- 0x05020008, 0x90180589, 0x05000009, 0x60100800,
- 0x05e9fa06, 0x05d9fa81, 0x0511f97d, 0x0005f0e7,
- 0x0511f97b, 0x60040000, 0x05fdf6de, 0x0505fa63,
- 0x59325809, 0x05000008, 0x592c0205, 0x82000580,
- 0x00000139, 0x05fc07f7, 0x592c0405, 0x8c00051e,
- 0x05fe07f4, 0x59340412, 0x800001c0, 0x05000006,
- 0x80000040, 0x48026c12, 0x642a6006, 0x645a6403,
- 0x1c01f000, 0x59340403, 0x82000580, 0x000007fe,
- 0x05020006, 0x59a8021b, 0x84000540, 0x4803521b,
- 0x05e5ff67, 0x05fdf7e3, 0x0511f95d, 0x417a7800,
- 0x0201f800, 0x0010b660, 0x60143000, 0x0511f88e,
- 0x42000000, 0x00109878, 0x0511fa25, 0x05fdf7da,
- 0x4933c857, 0x0501f838, 0x05020006, 0x60140800,
- 0x05e9f9d6, 0x64066203, 0x640e6403, 0x05f5f181,
- 0x60100800, 0x05e9f9d1, 0x0505fee6, 0x05020007,
- 0x4c580000, 0x6008b000, 0x0505fec7, 0x5c00b000,
- 0x05fdfd1f, 0x0005f0e7, 0x05fdfd1d, 0x0511f940,
- 0x80000580, 0x05fdf6a3, 0x4933c857, 0x0501f822,
- 0x05020006, 0x60240800, 0x05e9f9c0, 0x64066203,
- 0x64166403, 0x05f5f16b, 0x0511f935, 0x60040000,
- 0x05fdf698, 0x4933c857, 0x0501f817, 0x05020006,
- 0x602c0800, 0x05e9f9b5, 0x64066203, 0x64066403,
- 0x05f5f160, 0x0511f92a, 0x60040000, 0x05fdf68d,
- 0x4933c857, 0x59cc0407, 0x90000583, 0x05020009,
- 0x59cc0207, 0x82000500, 0x0000ff00, 0x82000d80,
- 0x00002a00, 0x05000003, 0x82000d80, 0x00001e00,
- 0x1c01f000, 0x4933c857, 0x90000541, 0x1c01f000,
- 0x4933c857, 0x4d400000, 0x4c580000, 0x59a8021b,
- 0x90000543, 0x4803521b, 0x0501f853, 0x05000005,
- 0x4d300000, 0x4d340000, 0x4d440000, 0x0501f01b,
- 0x0501f879, 0x05000027, 0x4d300000, 0x4d340000,
- 0x4d440000, 0x59cc0408, 0x8c00051e, 0x05020004,
- 0x59a8021b, 0x84000552, 0x4803521b, 0x8d0c0520,
- 0x05000005, 0x60aa8000, 0x61fe89ff, 0x60083000,
- 0x0511f841, 0x60aa8000, 0x4d3c0000, 0x60027804,
- 0x0201f800, 0x0010b5e0, 0x5c027800, 0x42000000,
- 0x00109878, 0x0511f9c2, 0x0201f800, 0x0010b84b,
- 0x6040b000, 0x61c2880f, 0x83440580, 0x000007fe,
- 0x05000002, 0x05e9f9fe, 0x81468800, 0x8058b040,
- 0x05fe07fa, 0x5c028800, 0x5c026800, 0x5c026000,
- 0x05e9fa28, 0x59cc0800, 0x82040d00, 0x00ffffff,
- 0x4807500f, 0x80040110, 0x48035018, 0x48038881,
- 0x59a80a1b, 0x84040d50, 0x59cc0013, 0x8c00053e,
- 0x05000003, 0x8c000536, 0x05000004, 0x59cc0017,
- 0x8c000536, 0x05020002, 0x84040d10, 0x4807521b,
- 0x4807541b, 0x59cc0408, 0x8c000518, 0x05000004,
- 0x4c040000, 0x0509f9e3, 0x5c000800, 0x05edf94d,
- 0x05000006, 0x59cc0009, 0x48035028, 0x59cc000a,
- 0x48035029, 0x0505fc2b, 0x5c00b000, 0x5c028000,
- 0x1c01f000, 0x4933c857, 0x59a8141b, 0x82080580,
- 0x0000ffff, 0x0500000b, 0x4c080000, 0x05edf93d,
- 0x5c001000, 0x0502000b, 0x59cc0408, 0x8c000518,
- 0x05000005, 0x8c08050a, 0x0500000a, 0x80000580,
- 0x1c01f000, 0x8c080508, 0x05fe07fd, 0x0501f005,
- 0x90080530, 0x05020003, 0x8c080506, 0x05fe07f8,
- 0x4a03541b, 0x0000ffff, 0x42000000, 0x001097c5,
- 0x0511f973, 0x60303000, 0x61fc19ff, 0x601c2000,
- 0x05e1fe3e, 0x4d400000, 0x4d3c0000, 0x60043000,
- 0x050dffe1, 0x60aa8000, 0x60027804, 0x0201f800,
- 0x0010b5e0, 0x5c028000, 0x5c027800, 0x90000541,
- 0x1c01f000, 0x4933c857, 0x4c580000, 0x59a80018,
- 0x800001c0, 0x0500001b, 0x59cc1000, 0x82081500,
- 0x00ffff00, 0x80081110, 0x80080580, 0x05000004,
- 0x42000000, 0x0010985b, 0x0501f010, 0x91cc140b,
- 0x6008b000, 0x91341c06, 0x0501f829, 0x05000004,
- 0x42000000, 0x0010985c, 0x0501f008, 0x91cc140d,
- 0x6008b000, 0x91341c08, 0x0501f821, 0x05000005,
- 0x42000000, 0x0010985d, 0x0511f945, 0x90000541,
- 0x5c00b000, 0x1c01f000, 0x4933c857, 0x59cc0206,
- 0x90000594, 0x05020015, 0x59cc0407, 0x82000580,
- 0x00000800, 0x05020011, 0x59cc0207, 0x8c00051a,
- 0x0500000d, 0x82000500, 0x00000f00, 0x82000580,
- 0x00000100, 0x05020008, 0x59cc020a, 0x8c000508,
- 0x05020003, 0x8c00050a, 0x05000003, 0x80000580,
- 0x1c01f000, 0x90000541, 0x1c01f000, 0x5c000000,
- 0x4c000000, 0x4803c857, 0x480bc857, 0x480fc857,
- 0x485bc857, 0x50080800, 0x500c0000, 0x80042580,
- 0x05020007, 0x80081000, 0x800c1800, 0x8058b040,
- 0x05fe07f9, 0x80000580, 0x1c01f000, 0x4803c857,
- 0x4807c857, 0x480bc857, 0x480fc857, 0x80040480,
- 0x05001004, 0x60040000, 0x90040d41, 0x1c01f000,
- 0x41780000, 0x05fdf7fd, 0xb1380493, 0x05ce1993,
- 0xb138048b, 0x05cc1991, 0x0c01f001, 0x00106860,
- 0x00106860, 0x00106860, 0x00106860, 0x0010685f,
- 0x0010685f, 0x0010685f, 0x00106860, 0x05cdf987,
- 0x493bc857, 0x64366203, 0x493a6403, 0x42000800,
- 0x80000000, 0x0005f07c, 0x91380593, 0x05020005,
- 0x59300403, 0xb0000590, 0x05ce097c, 0x0005f0e7,
- 0x4933c857, 0x913805a7, 0x05020026, 0x4933c857,
- 0x05f5f8b9, 0x4d3c0000, 0x417a7800, 0x0201f800,
- 0x0010b660, 0x5c027800, 0x42000000, 0x00109878,
- 0x0511f8e7, 0x4d2c0000, 0x59325809, 0x0505f8ff,
- 0x492fc857, 0x0500000b, 0x4a025a05, 0x00000103,
- 0x59300c02, 0x48065c07, 0x64a65a07, 0x497a580a,
- 0x592c0c09, 0x84040d50, 0x48065c09, 0x0001fb2c,
- 0x5c025800, 0x60543000, 0x41782800, 0x600c2000,
- 0x4d400000, 0x4d440000, 0x59368c03, 0x60a68000,
- 0x0505ffd3, 0x5c028800, 0x5c028000, 0x0005f0e7,
- 0x91380594, 0x05020009, 0x59300403, 0xb0000c93,
- 0x05ce194e, 0xb0000480, 0x05cc194c, 0x4933c857,
- 0x4803c857, 0x0c01f009, 0xb1380593, 0x05000006,
- 0xb1380588, 0x05ce0945, 0x59300403, 0xb0000590,
- 0x05ce0942, 0x1c01f000, 0x001068ba, 0x001068b9,
- 0x001068b9, 0x001068b9, 0x001068b9, 0x001068b9,
- 0x001068b9, 0x001068b9, 0x001068b9, 0x001068b9,
- 0x001068b9, 0x001068ca, 0x001068ca, 0x001068ca,
- 0x001068ca, 0x001068b9, 0x001068ca, 0x001068b9,
- 0x001068ca, 0x05cdf92d, 0x4933c857, 0x05f5f86e,
- 0x0505f8be, 0x000400e7, 0x4d2c0000, 0x59325809,
- 0x4a025a05, 0x00000103, 0x59300402, 0x48025c07,
- 0x641a5a07, 0x497a580a, 0x0001fb2c, 0x5c025800,
- 0x0505f982, 0x0005f0e7, 0x4933c857, 0x05f5f85e,
- 0x0005f0e7, 0x05cdf919, 0x5930001e, 0x800001c0,
- 0x05060f82, 0x59300004, 0x8c00053e, 0x05020027,
- 0x0509f826, 0x050200a6, 0x59325809, 0x592c0c09,
- 0x59cc2808, 0x82141d00, 0x00000c00, 0x05000002,
- 0x59cc1809, 0x84040d58, 0x48065c09, 0x82143500,
- 0x00000fff, 0x05020020, 0x59340200, 0x8c00050e,
- 0x0502008d, 0x0005f987, 0x05020005, 0x64025a07,
- 0x59300813, 0x800409c0, 0x05020955, 0x4a025a05,
- 0x00000103, 0x48065808, 0x480e580b, 0x901409c0,
- 0x4806580a, 0x59300c02, 0x48065c07, 0x0505fd3e,
- 0x0001fb2c, 0x05e9fb08, 0x59cc0008, 0x8c000518,
- 0x050601f6, 0x0005f0e7, 0x05f5fc0b, 0x05fc07d9,
- 0x4d3c0000, 0x600a7800, 0x0501fd45, 0x5c027800,
- 0x05fdf7d4, 0x4817c857, 0x480fc857, 0x82180500,
- 0x000000ff, 0x0500000b, 0x592c0205, 0x82000500,
- 0x000000ff, 0xb0000588, 0x05020006, 0x592c0408,
- 0x800001c0, 0x05000003, 0x0505fe58, 0x0505f68f,
- 0x82180d00, 0x00000c00, 0x05000004, 0x59340200,
- 0x8c00050e, 0x0502004b, 0x64025a07, 0x41782000,
- 0x8c180510, 0x05000009, 0x59cc200b, 0x801021c0,
- 0x05000006, 0x59cc000c, 0x82000500, 0x000000ff,
- 0x05000002, 0x4803c857, 0x4812580d, 0x41780000,
- 0x8c180512, 0x05000002, 0x59cc000a, 0x4802580c,
- 0x80100c00, 0x05fc07bc, 0x9004149d, 0x05001005,
- 0x592c0405, 0x8c00051e, 0x0500001c, 0x60700800,
- 0x4c040000, 0x4c0c0000, 0x4c140000, 0x0005f987,
- 0x05020005, 0x64025a07, 0x59300813, 0x800409c0,
- 0x05020907, 0x5c002800, 0x5c001800, 0x4a025a05,
- 0x00000103, 0x48065808, 0x480e580b, 0x901409c0,
- 0x4806580a, 0x5c000800, 0x4c500000, 0x4c540000,
- 0x91cca40c, 0x912cac0e, 0x0501fcaa, 0x5c00a800,
- 0x5c00a000, 0x05fdf7a8, 0x4c040000, 0x4c0c0000,
- 0x4c140000, 0x0005f987, 0x05020005, 0x64025a07,
- 0x59300813, 0x800409c0, 0x050208ed, 0x48065808,
- 0x5c002800, 0x5c001800, 0x59301402, 0x480a5c07,
- 0x480e580b, 0x901401c0, 0x4802580a, 0x0505fcd6,
- 0x5c000800, 0x0501fc4f, 0x0501fc7b, 0x05fdf796,
- 0x592c020b, 0x8c000502, 0x05fc07b4, 0x592c0209,
- 0x8c00050e, 0x05fe07b1, 0x59300013, 0x800c0d80,
- 0x05fc07ae, 0x4803c857, 0x480fc857, 0x8c180514,
- 0x050401bb, 0x80000540, 0x05fc07a8, 0x4807c856,
- 0x0505f1b7, 0x592c020b, 0x8c000502, 0x05fc0772,
- 0x59300013, 0x800001c0, 0x05fc0771, 0x592c0209,
- 0x8c00050e, 0x05fe076e, 0x0505f1ad, 0x1c01f000,
- 0x59cc2006, 0x59cc2807, 0x0501f037, 0x0501f036,
- 0x1c01f000, 0x4933c857, 0x59300004, 0x8c00053e,
- 0x0502002d, 0x5930001e, 0x800001c0, 0x05060ecb,
- 0x59325809, 0x592c0c09, 0x41782800, 0x41781800,
- 0x84040d58, 0x48065c09, 0x41783000, 0x59340200,
- 0x8c00050e, 0x05020015, 0x0005f987, 0x05020006,
- 0x64025a07, 0x59300813, 0x4807c857, 0x800409c0,
- 0x050208a7, 0x4a025a05, 0x00000103, 0x48065808,
- 0x480e580b, 0x901409c0, 0x4806580a, 0x4933c857,
- 0x59300c02, 0x48065c07, 0x0505fc8f, 0x0001fb2c,
- 0x05e9fa59, 0x0005f0e7, 0x592c020b, 0x8c000502,
- 0x05fc07ea, 0x59300013, 0x4803c857, 0x800001c0,
- 0x05fc07e8, 0x592c0209, 0x8c00050e, 0x05fe07e5,
- 0x0505f177, 0x05f5fb54, 0x05fc07d3, 0x4933c857,
- 0x1c01f000, 0x4c5c0000, 0x4c600000, 0x4010b800,
- 0x4014c000, 0x5930001e, 0x800001c0, 0x4c140000,
- 0x05060e96, 0x5c002800, 0x59325809, 0x592c020b,
- 0x8c000502, 0x05020020, 0x8c000500, 0x05000025,
- 0x640a6203, 0x650e6403, 0x405c0000, 0x592c0810,
- 0x80040c80, 0x40600000, 0x80040480, 0x0500101a,
- 0x8060c1c0, 0x05000011, 0x59300004, 0x8c00053e,
- 0x0502000a, 0x485e6015, 0x48626013, 0x497a6205,
- 0x5c00c000, 0x5c00b800, 0x05d1fa10, 0x0502000c,
- 0x59300804, 0x0005f072, 0x4c140000, 0x05f5fb2a,
- 0x5c002800, 0x05fc07f4, 0x5c00c000, 0x5c00b800,
- 0x05f9f4d6, 0x5c00c000, 0x5c00b800, 0x4933c857,
- 0x1c01f000, 0x4807c857, 0x4004c000, 0x05fdf7e5,
- 0x4803c857, 0x05fdf7f5, 0xb1380498, 0x05021004,
- 0xb1380480, 0x05001002, 0x0c01f002, 0x1c01f000,
- 0x00106a08, 0x00106a08, 0x00106a08, 0x00106a08,
- 0x00106a08, 0x00106a08, 0x00106a08, 0x00106a08,
- 0x00106a08, 0x00106a08, 0x00106a09, 0x00106a08,
- 0x00106a08, 0x00106a08, 0x00106a08, 0x00106a13,
- 0x00106a08, 0x00106a08, 0x00106a08, 0x00106a08,
- 0x00106a37, 0x00106a08, 0x00106a08, 0x00106a08,
- 0x05c9ffde, 0x4933c857, 0x05f5f983, 0x640a6203,
- 0x59a8002c, 0x48026205, 0x59300013, 0x59300817,
- 0x80040c80, 0x48066017, 0x05f1f6fa, 0x4933c857,
- 0x05f1fef8, 0x4d3c0000, 0x417a7800, 0x0201f800,
- 0x0010b660, 0x5c027800, 0x42000000, 0x00109878,
- 0x050dff43, 0x0501ff5d, 0x0500000e, 0x4d2c0000,
- 0x59325809, 0x4a025a05, 0x00000103, 0x59300402,
- 0x48025c07, 0x64a65a07, 0x497a580a, 0x592c0c09,
- 0x84040d50, 0x48065c09, 0x0001fb2c, 0x5c025800,
- 0x60503000, 0x41782800, 0x4d400000, 0x4d440000,
- 0x59368c03, 0x60082000, 0x60a68000, 0x0505fe30,
- 0x5c028800, 0x5c028000, 0x0005f0e7, 0x4933c857,
- 0x59300809, 0x4978080a, 0x4978080b, 0x58041409,
- 0x84081558, 0x48080c09, 0x1c01f000, 0x4807c857,
- 0x8c04053e, 0x05020022, 0x497a5a07, 0x59300021,
- 0x80000540, 0x05000017, 0x497a5a07, 0x4c040000,
- 0x4c080000, 0x4c0c0000, 0x4c100000, 0x4c140000,
- 0x40002800, 0x58141003, 0x40040000, 0x80081480,
- 0x48082803, 0x40140000, 0x05cdffae, 0x5c002800,
- 0x5c002000, 0x5c001800, 0x5c001000, 0x5c000800,
- 0x592c0207, 0x80000540, 0x05020008, 0x0501f005,
- 0x592c0409, 0x8c00051c, 0x05000002, 0x592c0803,
- 0x4807c857, 0x64565a07, 0x1c01f000, 0x59300021,
- 0x80000540, 0x05000007, 0x64465a07, 0x59300021,
- 0x4c040000, 0x05cdff97, 0x5c000800, 0x05fdf7f7,
- 0x4807c856, 0x641e5a07, 0x1c01f000, 0xb1380498,
- 0x05021006, 0xb1380480, 0x05001004, 0x4d2c0000,
- 0x0c01f803, 0x5c025800, 0x1c01f000, 0x00106a8f,
- 0x00106a8f, 0x00106a8f, 0x00106a8f, 0x00106a8f,
- 0x00106a91, 0x00106a90, 0x00106a8f, 0x00106b05,
- 0x00106a8f, 0x00106a8f, 0x00106a8f, 0x00106a8f,
- 0x00106a8f, 0x00106a8f, 0x00106a8f, 0x00106a8f,
- 0x00106a8f, 0x00106a8f, 0x00106bb6, 0x00106bda,
- 0x00106bbd, 0x00106a90, 0x00106be3, 0x05c9ff57,
- 0x1c01f000, 0x5930001e, 0x800001c0, 0x05060dbf,
- 0x59300008, 0x8c00050e, 0x0500006e, 0x8c000500,
- 0x05000060, 0x8c00051c, 0x05000008, 0x84000500,
- 0x48026008, 0x59325809, 0x592c3c09, 0x841c3d58,
- 0x481e5c09, 0x0005f13e, 0x59325809, 0x592c3c09,
- 0x841c3d58, 0x59300008, 0x8c00051c, 0x05fe07f4,
- 0x481e5c09, 0x60140000, 0x40000000, 0x80000040,
- 0x05fe07fe, 0x59300008, 0x8c00051c, 0x05fe07ec,
- 0x59cc0808, 0x592c0205, 0x82000500, 0x000000ff,
- 0xb0000588, 0x0502000a, 0x497a580c, 0x82040500,
- 0x000000ff, 0x05000006, 0x592c0408, 0x800001c0,
- 0x05000003, 0x0505fca9, 0x05d1f017, 0x900421c0,
- 0x4812580a, 0x41782000, 0x82040500, 0x00000c00,
- 0x05000002, 0x59cc2009, 0x82043500, 0x00000fff,
- 0x0502001e, 0x481e5c09, 0x64025a07, 0x801831c0,
- 0x05d00009, 0x41782000, 0x8c180510, 0x05000002,
- 0x59cc200b, 0x4812580d, 0x41780000, 0x8c180512,
- 0x05000002, 0x59cc000a, 0x4802580c, 0x80100c00,
- 0x05c81f0e, 0x05cc07fc, 0x9004149d, 0x05021009,
- 0x4c500000, 0x4c540000, 0x91cca40c, 0x912cac0e,
- 0x0501fb10, 0x5c00a800, 0x5c00a000, 0x05cdf7f2,
- 0x0501fac8, 0x05cdf7f0, 0x412c7800, 0x05cdfa81,
- 0x05c80efe, 0x492c780a, 0x841c3d52, 0x481c7c09,
- 0x4a025a05, 0x00000103, 0x4812580b, 0x900401c0,
- 0x4802580a, 0x583c0405, 0x583c1006, 0x583c2209,
- 0x48025c05, 0x480a5806, 0x48125a09, 0x05fdf7d2,
- 0x8c000524, 0x05fc07a2, 0x59325809, 0x4c000000,
- 0x592c0409, 0x8c00051c, 0x5c000000, 0x05020003,
- 0x4a026013, 0xffffffff, 0x84000524, 0x05fdf798,
- 0x1c01f000, 0x59a8002c, 0x48026205, 0x59325809,
- 0x640a6203, 0x592c2409, 0x59300808, 0x4933c857,
- 0x4807c857, 0x592c0205, 0x82000500, 0x000000ff,
- 0xb0000588, 0x05020003, 0x8c100500, 0x0506048b,
- 0x64025a07, 0x8c04051e, 0x05000022, 0x41780800,
- 0x497a580a, 0x592c1c0a, 0x59300013, 0x59341200,
- 0x497a6205, 0x8c08050e, 0x05020062, 0x4807c857,
- 0x4806580b, 0x80000d40, 0x05fe0f1d, 0x59300402,
- 0x48025c07, 0x48065808, 0x4a025a05, 0x00000103,
- 0x4c040000, 0x4c0c0000, 0x4c100000, 0x0505fb06,
- 0x5c002000, 0x5c001800, 0x5c000800, 0x8c100512,
- 0x05020016, 0x4c0c0000, 0x0001fb2c, 0x05e9f8ca,
- 0x5c001800, 0x8c0c0518, 0x000400e7, 0x0501f7b7,
- 0x4813c857, 0x8c100518, 0x05000044, 0x41780800,
- 0x592c1c0a, 0x820c0580, 0x00001000, 0x05fc07db,
- 0x8c100512, 0x05fc07d9, 0x592c780a, 0x583c080b,
- 0x583c1c0a, 0x05fdf7d5, 0x4807c857, 0x592c780a,
- 0x59300402, 0x592c1405, 0x8c08051e, 0x0502000c,
- 0x592c1207, 0x48007c07, 0x48047808, 0x48087a07,
- 0x84102512, 0x48107c09, 0x4c0c0000, 0x05cdfa2e,
- 0x403e5800, 0x0501fa84, 0x05fdf7dd, 0x48025c07,
- 0x48065808, 0x583c080d, 0x583c000c, 0x80040c00,
- 0x9004149d, 0x05001005, 0x583c1001, 0x480a5801,
- 0x49787801, 0x60700800, 0x90040c14, 0x4c0c0000,
- 0x4c500000, 0x4c540000, 0x903ca409, 0x912cac09,
- 0x4c100000, 0x4c3c0000, 0x0501fa86, 0x5c007800,
- 0x5c002000, 0x5c00a800, 0x5c00a000, 0x84102512,
- 0x48125c09, 0x403e5800, 0x05cdfa0f, 0x0505fabe,
- 0x42034000, 0x00109490, 0x59a1d806, 0x80edd9c0,
- 0x05c80e6e, 0x48efc857, 0x58ec0008, 0x4803c857,
- 0x0801f800, 0x05fdf7b6, 0x4933c857, 0x1c01f000,
- 0x59301416, 0x480bc857, 0x8c08051c, 0x0502000e,
- 0x80000540, 0x4803c857, 0x05fc0799, 0x80042c80,
- 0x05fe1797, 0x8c080514, 0x05020005, 0x592c0810,
- 0x4807c857, 0x80040480, 0x48026018, 0x8408155c,
- 0x480a6416, 0x59301008, 0x8408151e, 0x480a6008,
- 0x4c100000, 0x4c3c0000, 0x4d400000, 0x592e8207,
- 0x64065a07, 0x0505fa98, 0x49425a07, 0x5c028000,
- 0x5c007800, 0x5c002000, 0x497a580a, 0x8c100512,
- 0x05000005, 0x4d2c0000, 0x403e5800, 0x05cdf9de,
- 0x5c025800, 0x82102500, 0xffffedff, 0x48125c09,
- 0x59301006, 0x800811c0, 0x0500077d, 0x59a8002c,
- 0x80080480, 0x0502177a, 0x4a025a05, 0x00000103,
- 0x641a5a07, 0x497a5c0a, 0x492fc857, 0x0001fb2c,
- 0x05e9f849, 0x0005f0e7, 0x59325809, 0x592c0409,
- 0x8c000518, 0x05000003, 0x412df800, 0x05cdf732,
- 0x1c01f000, 0x4933c857, 0x59325809, 0x497a580a,
- 0x64025a07, 0x4a025a05, 0x00000103, 0x59300813,
- 0x4807c857, 0x800409c0, 0x05020008, 0x48065808,
- 0x59300c02, 0x48065c07, 0x0505fa67, 0x0001fb2c,
- 0x05e9f831, 0x0005f0e7, 0x59340200, 0x8c00050e,
- 0x05020005, 0x59300813, 0x05fdfe6d, 0x48065808,
- 0x05fdf7f4, 0x592c0209, 0x8c00050e, 0x05fe07fa,
- 0x4933c857, 0x0501f74e, 0x4933c857, 0x59325809,
- 0x812e59c0, 0x05c80e09, 0x592c020b, 0x8c000502,
- 0x05c80e06, 0x640a6006, 0x1c01f000, 0x5930001e,
- 0x800001c0, 0x05060c6d, 0x59300008, 0x4933c857,
- 0x4803c857, 0x8c00050e, 0x05000032, 0x8c000500,
- 0x05000024, 0x8c00051c, 0x05000009, 0x84000500,
- 0x48026008, 0x59325809, 0x592c3c09, 0x481fc857,
- 0x841c3d58, 0x481e5c09, 0x0005f13e, 0x59325809,
- 0x592c3c09, 0x841c3d58, 0x59300008, 0x8c00051c,
- 0x05fe07f3, 0x481e5c09, 0x60140000, 0x40000000,
- 0x80000040, 0x05fe07fe, 0x59300008, 0x8c00051c,
- 0x05fe07eb, 0x592c0205, 0x82000500, 0x000000ff,
- 0xb0000588, 0x05020003, 0x497a580c, 0x0501f002,
- 0x497a580a, 0x481e5c09, 0x64025a07, 0x05cdf6c6,
- 0x8c000524, 0x05fc07de, 0x59325809, 0x4c000000,
- 0x592c0409, 0x8c00051c, 0x5c000000, 0x05020003,
- 0x4a026013, 0xffffffff, 0x84000524, 0x05fdf7d4,
- 0x1c01f000, 0x4933c857, 0x41780800, 0xb1380498,
- 0x05021009, 0xb1380480, 0x05001007, 0x4d2c0000,
- 0x59325809, 0x812e59c0, 0x0c020805, 0x5c025800,
- 0x0005f0e7, 0x493bc857, 0x1c01f000, 0x00106c43,
- 0x00106c43, 0x00106c43, 0x00106c43, 0x00106c43,
- 0x00106c44, 0x00106c43, 0x00106c43, 0x00106c43,
- 0x00106c43, 0x00106c43, 0x00106c43, 0x00106c43,
- 0x00106c43, 0x00106c43, 0x00106c43, 0x00106c43,
- 0x00106c43, 0x00106c43, 0x00106c43, 0x00106c47,
- 0x00106c43, 0x00106c43, 0x00106c43, 0x05c9fda3,
- 0x59cc0808, 0x497a5808, 0x4807c857, 0x59300402,
- 0x48025c07, 0x4a025a05, 0x00000103, 0x900401c0,
- 0x4802580a, 0x64025a07, 0x800409c0, 0x0000032c,
- 0x59cc0009, 0x4802580b, 0x82042500, 0x00000100,
- 0x05000002, 0x59cc200b, 0x4812580d, 0x82040500,
- 0x00000200, 0x05000002, 0x59cc000a, 0x4802580c,
- 0x80100c00, 0x05c81d89, 0x0000032c, 0x9004149d,
- 0x05001005, 0x592c0405, 0x8c00051e, 0x0500000a,
- 0x60700800, 0x4c500000, 0x4c540000, 0x91cca40c,
- 0x912cac0e, 0x0501f987, 0x5c00a800, 0x5c00a000,
- 0x0001f32c, 0x0501f93f, 0x0501f16b, 0x83380480,
- 0x00000093, 0x05ca1d75, 0x83380480, 0x00000085,
- 0x05c81d72, 0x0c01f001, 0x00106c84, 0x00106c83,
- 0x00106c83, 0x00106c89, 0x00106c83, 0x00106c83,
- 0x00106c83, 0x00106c83, 0x00106c83, 0x00106c83,
- 0x00106c83, 0x00106c83, 0x00106c83, 0x05c9fd63,
- 0x64066203, 0x493a6403, 0x42000800, 0x80000040,
- 0x0005f07c, 0x83300580, 0x0010cc6c, 0x05ca0d5b,
- 0x4933c857, 0x59cc1404, 0x0505f85a, 0x05000023,
- 0x591c0203, 0x90000580, 0x05000020, 0x591c000a,
- 0x81340580, 0x0502001d, 0x59cc1204, 0x82080580,
- 0x0000ffff, 0x05000007, 0x591c0202, 0x82000d80,
- 0x0000ffff, 0x05000003, 0x80080580, 0x05020013,
- 0x4d300000, 0x4d1c0000, 0x411e6000, 0x0501f997,
- 0x5c023800, 0x5c026000, 0x0500000a, 0x59cc0005,
- 0x8c000500, 0x05020003, 0x0501f94d, 0x0501f002,
- 0x640a3a03, 0x4a026403, 0x00000086, 0x0501f005,
- 0x0501f97d, 0x05fc07f6, 0x4a026403, 0x00000087,
- 0x4d2c0000, 0x050dfb4c, 0x05e9fa36, 0x5c025800,
- 0x59340200, 0x8c00050e, 0x0500000b, 0x59cc1404,
- 0x0505f82c, 0x05000008, 0x591c0416, 0x8c00051a,
- 0x05000005, 0x4d300000, 0x411e6000, 0x0501fe76,
- 0x5c026000, 0x1c01f000, 0x91380593, 0x0502000a,
- 0x59300403, 0x4803c857, 0x82000d80, 0x00000086,
- 0x05000015, 0x82000d80, 0x00000087, 0x05ca0d17,
- 0x0501f011, 0x913805a7, 0x05000003, 0x91380594,
- 0x05ca0d12, 0x493bc857, 0x05f1fc53, 0x0501fca3,
- 0x05f80175, 0x4d2c0000, 0x59325809, 0x0001fb2c,
- 0x59300a1f, 0x90040d83, 0x05000d6c, 0x5c025800,
- 0x05f9f16d, 0x4933c857, 0x0005f0e7, 0x91380593,
- 0x05020006, 0x59300403, 0x4803c857, 0x82000480,
- 0x00000085, 0x0c01f03d, 0x913805a7, 0x05020035,
- 0x4933c857, 0x05f1fc3c, 0x4d3c0000, 0x417a7800,
- 0x0201f800, 0x0010b660, 0x5c027800, 0x60543000,
- 0x41782800, 0x600c2000, 0x60a68000, 0x4d400000,
- 0x4d440000, 0x59368c03, 0x0505fb69, 0x5c028800,
- 0x5c028000, 0x42000000, 0x00109878, 0x050dfc60,
- 0x0501fc7a, 0x000400e7, 0x4d2c0000, 0x59325809,
- 0x592c0205, 0x82000500, 0x000000ff, 0x90000594,
- 0x05020d42, 0x4a025a05, 0x00000103, 0x59300402,
- 0x48025c07, 0x497a580a, 0x49425a07, 0x0001fb2c,
- 0x5c025800, 0x0005f0e7, 0x83380580, 0x00000089,
- 0x05000004, 0x83380580, 0x0000008a, 0x05fa019f,
- 0x05f1ffed, 0x05fa019d, 0x59300a03, 0x9004058a,
- 0x05000022, 0x9004058c, 0x05000020, 0x05c9fcc7,
- 0x91380594, 0x05fe07f1, 0x4933c857, 0x05f1fc06,
- 0x601a8000, 0x05fdf7db, 0x00106d34, 0x00106d33,
- 0x00106d33, 0x00106d33, 0x00106d33, 0x00106d33,
- 0x00106d39, 0x00106d33, 0x00106d33, 0x00106d33,
- 0x00106d33, 0x00106d33, 0x00106d33, 0x05c9fcb3,
- 0x4933c857, 0x59a8002a, 0x48026006, 0x642a6203,
- 0x1c01f000, 0x4933c857, 0x59a8002a, 0x48026006,
- 0x64326203, 0x1c01f000, 0x5932680a, 0x83380580,
- 0x00000089, 0x05000007, 0x83380580, 0x0000008a,
- 0x0500001f, 0x4933c857, 0x493bc857, 0x05f9f16f,
- 0x4933c857, 0x59325809, 0x59300a1f, 0x90040583,
- 0x05020007, 0x0501fc2d, 0x0500000d, 0x0001fb2c,
- 0x05e5fead, 0x497a6009, 0x0501f009, 0x5930021f,
- 0x90000581, 0x05020006, 0x59300c18, 0x900405b9,
- 0x05000016, 0x900405b5, 0x05000014, 0x59cc0c07,
- 0x4806641b, 0x59cc0a07, 0x4806621b, 0x59300203,
- 0x4802641f, 0x64466203, 0x05f9f0eb, 0x4933c857,
- 0x5930021f, 0x90000581, 0x0502003c, 0x59300c18,
- 0x900405b5, 0x05000005, 0x9004059e, 0x05000003,
- 0x900405b9, 0x05020035, 0x4933c857, 0x4c5c0000,
- 0x4c600000, 0x4d1c0000, 0x4130b800, 0x4004c000,
- 0x0501ff2c, 0x05020028, 0x906005b5, 0x05020004,
- 0x591c0c16, 0x8c040502, 0x05000023, 0x05f9f908,
- 0x05000021, 0x491fc857, 0x4933c857, 0x906005b5,
- 0x05000003, 0x906005b9, 0x05020002, 0x4932381e,
- 0x48626403, 0x64066203, 0x64066407, 0x585c080a,
- 0x4807c857, 0x4806600a, 0x585c0c17, 0x4807c857,
- 0x48066417, 0x585c0a17, 0x4807c857, 0x48066217,
- 0x585c0a18, 0x4807c857, 0x48066218, 0x585c0c1b,
- 0x4807c857, 0x4806641b, 0x585c0a1b, 0x4807c857,
- 0x4806621b, 0x491e6020, 0x42000800, 0x80000040,
- 0x0005f87c, 0x405e6000, 0x5c023800, 0x5c00c000,
- 0x5c00b800, 0x0005f0e7, 0x0501fbd8, 0x05000008,
- 0x4d2c0000, 0x59325809, 0x0001fb2c, 0x5930021f,
- 0x90000583, 0x05e40e54, 0x5c025800, 0x0005f0e7,
- 0x4803c856, 0x4c500000, 0x4c540000, 0x412c7800,
- 0x4c3c0000, 0x60042800, 0x82040480, 0x00000101,
- 0x05001002, 0x60000802, 0x40043000, 0x60700800,
- 0x91cca40c, 0x912cac0e, 0x0501f836, 0x9018349c,
- 0x592e5801, 0x812e59c0, 0x05ca0fc3, 0x05c9ffa9,
- 0x05000011, 0x80142800, 0x4a025805, 0x00000110,
- 0x492c7801, 0x90180cbd, 0x05021005, 0x40180800,
- 0x912cac06, 0x0501f827, 0x0501f007, 0x901834bc,
- 0x60f00800, 0x412c7800, 0x912cac06, 0x0501f821,
- 0x05fdf7ef, 0x5c007800, 0x841429c0, 0x90142d43,
- 0x48147a05, 0x403e5800, 0x5c00a800, 0x5c00a000,
- 0x1c01f000, 0x492fc857, 0x812e59c0, 0x0500000d,
- 0x4d2c0000, 0x4c3c0000, 0x592c7801, 0x803c79c0,
- 0x05000005, 0x497a5801, 0x0001fb2c, 0x403e5800,
- 0x05fdf7fa, 0x5c007800, 0x0001fb2c, 0x5c025800,
- 0x1c01f000, 0x4803c856, 0x4c580000, 0x90040403,
- 0x8000b104, 0x050dfc3c, 0x5c00b000, 0x1c01f000,
- 0x4803c856, 0x4c580000, 0x90040c03, 0x8004b104,
- 0x050dfc35, 0x5c00b000, 0x1c01f000, 0x591c0c07,
- 0x90040583, 0x05000005, 0x90040582, 0x05000003,
- 0x9004058a, 0x05020021, 0x4d300000, 0x4d2c0000,
- 0x411e6000, 0x59325809, 0x0501fb78, 0x05000018,
- 0x59300c07, 0x9004058a, 0x05000019, 0x90040583,
- 0x05020007, 0x592c0a05, 0x82040d00, 0x000000ff,
- 0x90040d94, 0x05000002, 0x640e621f, 0x0501f813,
- 0x4d400000, 0x604e8000, 0x592c0a09, 0x84040d54,
- 0x05e9f962, 0x5c028000, 0x0505f81b, 0x0001fb2c,
- 0x5930021f, 0x90000583, 0x05000c30, 0x05f9f832,
- 0x5c025800, 0x5c026000, 0x1c01f000, 0x644e5a07,
- 0x642a621f, 0x05fdf7f5, 0x592c0409, 0x8c000512,
- 0x05000008, 0x84000512, 0x48025c09, 0x4d2c0000,
- 0x592e580a, 0x05c9ff58, 0x5c025800, 0x497a580a,
- 0x1c01f000, 0x59cc0005, 0x8c000500, 0x0502000a,
- 0x591c0407, 0x90000582, 0x05020007, 0x591c0c03,
- 0x82040580, 0x00000085, 0x05000003, 0x82040580,
- 0x0000008b, 0x1c01f000, 0x4933c857, 0x4d3c0000,
- 0x600a7800, 0x59300407, 0x90000c92, 0x05ca1ba7,
- 0x0c01f808, 0x5c027800, 0x1c01f000, 0x4933c857,
- 0x59300407, 0x90000c92, 0x05ca1ba0, 0x0c01f001,
- 0x00106e5e, 0x00106e5b, 0x00106e5b, 0x00106e83,
- 0x00106e5a, 0x00106e5b, 0x00106e6f, 0x00106e5b,
- 0x00106e5a, 0x00106e5a, 0x00107965, 0x00106e5b,
- 0x00106e5b, 0x00106e5a, 0x00106e5a, 0x00106e5a,
- 0x00106f56, 0x00106e5b, 0x05c9fb8c, 0x4803c856,
- 0x80000580, 0x1c01f000, 0x4803c856, 0x8d3c0502,
- 0x0502000e, 0x0501fb19, 0x0500000a, 0x59325809,
- 0x41780800, 0x4d400000, 0x60168000, 0x05e9f90f,
- 0x5c028000, 0x0501ffc8, 0x0501fc62, 0x0001fb2c,
- 0x05f5ffe1, 0x90000541, 0x1c01f000, 0x4933c857,
- 0x05e5fd36, 0x0500000b, 0x59300416, 0x84000556,
- 0x48026416, 0x0501f80e, 0x4df00000, 0x59300416,
- 0x84000516, 0x48026416, 0x5c03e000, 0x1c01f000,
- 0x4d400000, 0x60428000, 0x0509fb94, 0x641a6407,
- 0x641e6203, 0x5c028000, 0x1c01f000, 0x4933c857,
- 0x05f1fb3b, 0x4df00000, 0x0501f8c0, 0x90000c8e,
- 0x05ca1b5e, 0x0c01f001, 0x00106e99, 0x00106f05,
- 0x00106eab, 0x00106f15, 0x00106f02, 0x00106e98,
- 0x00106e99, 0x00106e99, 0x00106e9c, 0x00106e99,
- 0x00106e99, 0x00106e99, 0x00106e99, 0x00106eab,
- 0x05c9fb4e, 0x5c03e000, 0x05f00b11, 0x05fdf7c0,
- 0x5c03e000, 0x05f00b0e, 0x59300407, 0x90000583,
- 0x05fe07be, 0x59300203, 0x9000058d, 0x05fc07bb,
- 0x8d3c0502, 0x05fe07b9, 0x4d340000, 0x5932680a,
- 0x05e5fd55, 0x5c026800, 0x05fdf7b4, 0x0505fb0f,
- 0x0505fa34, 0x59300004, 0x8400055c, 0x48026004,
- 0x4203e000, 0xb0800000, 0x6023f800, 0x05f1faf8,
- 0x59300407, 0x90000586, 0x05000048, 0x8d3c0502,
- 0x05020046, 0x497a621f, 0x59300203, 0x9000058d,
- 0x05000002, 0x640e621f, 0x0501fabc, 0x05020004,
- 0x8d3c0500, 0x05000032, 0x0501f02a, 0x4d2c0000,
- 0x4d400000, 0x59325809, 0x0501fc06, 0x592c0409,
- 0x8c000512, 0x05000008, 0x4d2c0000, 0x84000512,
- 0x48025c09, 0x592c080a, 0x40065800, 0x05c9feb2,
- 0x5c025800, 0x4d400000, 0x60168000, 0x592c0a09,
- 0x8c04050e, 0x05000003, 0x600a8000, 0x0501f001,
- 0x05e9f89e, 0x5c028000, 0x0501ff57, 0x8d3c0500,
- 0x05020003, 0x050dfb9b, 0x05020003, 0x0001fb2c,
- 0x497a6009, 0x5c028000, 0x5c025800, 0x8d3c0500,
- 0x0500000a, 0x59300a1f, 0x90040d83, 0x05020005,
- 0x4d340000, 0x5932680a, 0x05e5fd13, 0x5c026800,
- 0x05f5ff61, 0x0501f011, 0x050dfb8a, 0x05020004,
- 0x59300a1f, 0x90040d83, 0x05000b58, 0x4a026403,
- 0x00000085, 0x64266203, 0x640a6407, 0x42000800,
- 0x80004040, 0x0505f9e7, 0x0005f87c, 0x4203e000,
- 0xb0800000, 0x6023f800, 0x5c03e000, 0x05f20ac0,
- 0x90000541, 0x1c01f000, 0x05f1faa9, 0x05cdfc0e,
- 0x05fdf7a7, 0x598c000b, 0x81300580, 0x05020003,
- 0x05f1fd54, 0x05020026, 0x0201f800, 0x0010ba3e,
- 0x80c40040, 0x05020005, 0x59300c03, 0xb0040580,
- 0x05fc078c, 0x05fdf79a, 0x05f1f9dc, 0x0500001c,
- 0x05c9fad2, 0x0501f823, 0x05020003, 0x05f1fd10,
- 0x05020017, 0x0201f800, 0x0010b8cb, 0x80c40040,
- 0x0500000f, 0x05f1f9d1, 0x05000011, 0x59300407,
- 0x90000583, 0x05ca0ac5, 0x59300004, 0x9000051f,
- 0x90000585, 0x05ca0ac1, 0x58d400ec, 0x82000500,
- 0x00000f00, 0x05fe0782, 0x05c9fabc, 0x59300c03,
- 0xb0040580, 0x05fc076f, 0x05fdf77d, 0x59300203,
- 0x90000c8e, 0x05ca1ab5, 0x0c01f758, 0x0501f805,
- 0x60058800, 0x05000002, 0x60018800, 0x1c01f000,
- 0x417a3000, 0x60df2160, 0x59900005, 0x81300580,
- 0x05000006, 0x91932410, 0x811a3000, 0x91180485,
- 0x05fc17fa, 0x90000541, 0x1c01f000, 0x0501f803,
- 0x40018800, 0x1c01f000, 0x59300004, 0x8c00053e,
- 0x0500000c, 0x8c00050c, 0x0502000a, 0x8c000516,
- 0x05020004, 0x90000d1f, 0x90040585, 0x05020003,
- 0x600c0000, 0x0501f004, 0x60040000, 0x0501f002,
- 0x59300203, 0x1c01f000, 0x4933c857, 0x05f1fa68,
- 0x4df00000, 0x59300203, 0x90000c8e, 0x05ca1a8b,
- 0x0c01f001, 0x00106f6c, 0x00106f7f, 0x00106f6f,
- 0x00106f6b, 0x00106f6b, 0x00106f6b, 0x00106f6b,
- 0x00106f6b, 0x00106f6b, 0x00106f6b, 0x00106f6b,
- 0x00106f6b, 0x00106f6b, 0x00106f6b, 0x05c9fa7b,
- 0x5c03e000, 0x05f00a3e, 0x05fdf6ed, 0x5c03e000,
- 0x05f00a3b, 0x4d2c0000, 0x59325809, 0x59300403,
- 0xb0000592, 0x05cc0fae, 0x0501fa04, 0x05c80a6f,
- 0x64165a07, 0x0001fb2c, 0x05e5fec9, 0x05f5fed2,
- 0x5c025800, 0x90000541, 0x1c01f000, 0x598c000b,
- 0x81300580, 0x05020018, 0x59300004, 0x8c000520,
- 0x05000004, 0x84000520, 0x48026004, 0x0501f018,
- 0x42001000, 0x001097b0, 0x50081000, 0x58080002,
- 0x82000580, 0x00000100, 0x05000009, 0x5808000b,
- 0x81300580, 0x05ca0a55, 0x0201f800, 0x0010ba3e,
- 0x80c40040, 0x05ca0a51, 0x05fdf7d9, 0x05f1fcc5,
- 0x0502000c, 0x59300004, 0x8c000520, 0x05000004,
- 0x84000520, 0x48026004, 0x05fdf7d1, 0x0201f800,
- 0x0010ba3e, 0x80c40040, 0x05fc07cd, 0x05c9fa43,
- 0x59300203, 0x90000c8e, 0x05ca1a40, 0x0c01f7b6,
- 0x4d340000, 0x5932680a, 0x59300407, 0x4933c857,
- 0x4803c857, 0x90000c92, 0x05ca1a38, 0x0c01f803,
- 0x5c026800, 0x1c01f000, 0x00106fc7, 0x00106fe7,
- 0x001070da, 0x0010c012, 0x001070d1, 0x001070d6,
- 0x00108206, 0x00106fce, 0x001070cd, 0x00106fc4,
- 0x0010712d, 0x00106fc4, 0x00106fc4, 0x00106fc4,
- 0x00106fc4, 0x000208e7, 0x00107722, 0x00107722,
- 0x05c9fa22, 0x0501faac, 0x05f804a5, 0x1c01f000,
- 0x05f1f9f7, 0x05f1f960, 0x05f1f9e1, 0x0005f0e7,
- 0x64066006, 0x1c01f000, 0x4d340000, 0x4c5c0000,
- 0x59300203, 0x90000591, 0x05020011, 0x5932680a,
- 0x4130b800, 0x0005f8ca, 0x0500000c, 0x64066203,
- 0x647a6403, 0x585c041b, 0x4802641b, 0x585c021b,
- 0x4802621b, 0x4936600a, 0x64066407, 0x42000800,
- 0x80000040, 0x0005f87c, 0x405e6000, 0x0005f8e7,
- 0x5c00b800, 0x5c026800, 0x1c01f000, 0x42000000,
- 0x00109883, 0x050df976, 0x050df8a1, 0x59300203,
- 0x90000c8e, 0x05ca19f9, 0x4803c857, 0x0c01f001,
- 0x00106ffe, 0x00106fcc, 0x00106fff, 0x00106ffe,
- 0x00106fff, 0x00106fff, 0x00106fc8, 0x00106ffe,
- 0x00106fc5, 0x00106ffe, 0x00106ffe, 0x00106ffe,
- 0x00106ffe, 0x00106ffe, 0x05c9f9e8, 0x83340580,
- 0x0010993e, 0x05f4064c, 0x4d2c0000, 0x59340400,
- 0x82000500, 0x000000ff, 0x90000c8c, 0x05ca19df,
- 0x59303403, 0x90180d84, 0x05020003, 0x60040000,
- 0x0501f004, 0x90180d80, 0x05020002, 0x60040000,
- 0x4803c857, 0x0c01f803, 0x5c025800, 0x1c01f000,
- 0x00107020, 0x0010708f, 0x00107021, 0x00107048,
- 0x00107021, 0x001070a5, 0x00107021, 0x00107028,
- 0x00107020, 0x001070a5, 0x00107020, 0x00107033,
- 0x05c9f9c6, 0x59300403, 0x90000d96, 0x05000023,
- 0x90000d84, 0x05000021, 0x90000d82, 0x0500001f,
- 0x0501fa49, 0x0500001d, 0x59300403, 0x90000da2,
- 0x0500007b, 0x90000db9, 0x0500007f, 0x90000db5,
- 0x0500007d, 0x90000d9e, 0x05000015, 0x0501f947,
- 0x05000005, 0x0501fdf7, 0x05020003, 0x05e5fc4a,
- 0x0501f00e, 0x59300403, 0x90000d81, 0x05020003,
- 0x05e5fc10, 0x05000009, 0x4d3c0000, 0x417a7800,
- 0x0201f800, 0x0010b660, 0x5c027800, 0x42000000,
- 0x00109878, 0x050df91a, 0x05f9fc25, 0x05f5f606,
- 0x0501f932, 0x05000003, 0x0501fde2, 0x05000073,
- 0x59300c03, 0x90040596, 0x0500003c, 0x90040582,
- 0x05020022, 0x59a8021b, 0x8c000502, 0x0502000c,
- 0x05e9f8c0, 0x0502000a, 0x05e9f8df, 0x05020004,
- 0x60040000, 0x05e9f88f, 0x0501f064, 0x64075014,
- 0x6006d800, 0x05e9f835, 0x0501f060, 0x59340412,
- 0x82000500, 0x000000ff, 0x05000010, 0x80000040,
- 0x48026c12, 0x497a6205, 0x4d300000, 0x05f5fe1c,
- 0x5c000000, 0x05000008, 0x49780009, 0x641c0407,
- 0x4a000006, 0x00000398, 0x4936600a, 0x64066407,
- 0x0501f01a, 0x40026000, 0x59300403, 0x90000d82,
- 0x0502000b, 0x59340403, 0x82000580, 0x000007fe,
- 0x05020007, 0x59a8021b, 0x84000540, 0x4803521b,
- 0x05e1fe25, 0x05f9fbee, 0x0501f00a, 0x05f9fbec,
- 0x4d3c0000, 0x417a7800, 0x0201f800, 0x0010b660,
- 0x5c027800, 0x42000000, 0x00109878, 0x050df8d8,
- 0x05d5f90a, 0x05f5f5c4, 0x600c0800, 0x05e5f88b,
- 0x64066203, 0x640a6403, 0x05f1f036, 0x0501f8eb,
- 0x05fe07b6, 0x05d5f901, 0x4d3c0000, 0x417a7800,
- 0x0201f800, 0x0010b660, 0x5c027800, 0x42000000,
- 0x00109878, 0x050df8c6, 0x60603000, 0x41782800,
- 0x60002000, 0x4d400000, 0x4d440000, 0x59368c03,
- 0x60a68000, 0x0501ffc2, 0x5c028800, 0x5c028000,
- 0x05f5f5a9, 0x05e5fbdc, 0x05fdf7d9, 0x42000000,
- 0x00109882, 0x050df8b6, 0x05f5ffc8, 0x05fe07d4,
- 0x1c01f000, 0x59300c03, 0x0501fbf2, 0x000600e7,
- 0x916c0583, 0x05000003, 0x640a6006, 0x1c01f000,
- 0x59300403, 0x48026418, 0x6406621f, 0x4a026403,
- 0x00000085, 0x64266203, 0x640a6407, 0x42000800,
- 0x80000040, 0x0005f07c, 0x05f9fbad, 0x4d3c0000,
- 0x417a7800, 0x0201f800, 0x0010b660, 0x5c027800,
- 0x42000000, 0x00109878, 0x050df899, 0x497a6009,
- 0x641e6407, 0x4a026006, 0x00000398, 0x497a6205,
- 0x1c01f000, 0x42000000, 0x00109889, 0x050df890,
- 0x05fdf717, 0x42000000, 0x00109884, 0x050df88c,
- 0x0509ffb7, 0x05f5f578, 0x42000000, 0x00109886,
- 0x050df887, 0x1c01f000, 0x42000000, 0x00109885,
- 0x050df883, 0x59300203, 0x90000c8e, 0x05ca1907,
- 0x4803c857, 0x0c01f001, 0x001070f0, 0x00106fcc,
- 0x001070f0, 0x001070f0, 0x001070f0, 0x001070f0,
- 0x001070f0, 0x001070f0, 0x001070f0, 0x00106fcc,
- 0x001070f1, 0x00106fcc, 0x001070f7, 0x001070f0,
- 0x05c9f8f6, 0x4a026403, 0x0000008b, 0x642e6203,
- 0x42000800, 0x80004040, 0x0005f07c, 0x59300a1f,
- 0x0501f882, 0x0500000b, 0x4d2c0000, 0x59325809,
- 0x641a5a07, 0x497a5c0a, 0x0001fb2c, 0x59300a1f,
- 0x90040d83, 0x05e40afc, 0x5c025800, 0x497a6009,
- 0x4d3c0000, 0x417a7800, 0x0201f800, 0x0010b660,
- 0x5c027800, 0x60443000, 0x0509febb, 0x42000000,
- 0x00109878, 0x050df852, 0x4c5c0000, 0x4130b800,
- 0x05f5fd73, 0x05000007, 0x4936600a, 0x4d300000,
- 0x405e6000, 0x05f5fd38, 0x5c026000, 0x0501f002,
- 0x405e6000, 0x5c00b800, 0x497a6009, 0x64066407,
- 0x64066403, 0x8d0c0520, 0x0500000b, 0x64126407,
- 0x641e6203, 0x64066422, 0x60103000, 0x4d400000,
- 0x60a68000, 0x41782800, 0x0509fa6b, 0x5c028000,
- 0x1c01f000, 0x602c0800, 0x05e1ffec, 0x64066203,
- 0x05edf798, 0x42000000, 0x0010988b, 0x050df830,
- 0x59300203, 0x90000c8e, 0x05ca18b4, 0x4803c857,
- 0x0c01f001, 0x00107153, 0x00107143, 0x00107145,
- 0x00107154, 0x00107144, 0x00107143, 0x00107143,
- 0x00107143, 0x00107143, 0x00107143, 0x00107143,
- 0x00107143, 0x00107143, 0x00107143, 0x05c9f8a3,
- 0x05cdf9cd, 0x4d2c0000, 0x59325809, 0x641a5a07,
- 0x0001fb2c, 0x5c025800, 0x497a6009, 0x642a621f,
- 0x4a026403, 0x00000085, 0x64266203, 0x640a6407,
- 0x42000800, 0x80004040, 0x0005f07c, 0x1c01f000,
- 0x05f1f86b, 0x4df00000, 0x05fdfde2, 0x05020003,
- 0x05f1facf, 0x0502000a, 0x0201f800, 0x0010b8cb,
- 0x80c40040, 0x05020004, 0x5c03e000, 0x05f1f84c,
- 0x05fdf7e5, 0x05edff8d, 0x05ca0884, 0x5c03e000,
- 0x05f1f847, 0x59300203, 0x90000d83, 0x05c8087f,
- 0x90000c8e, 0x05ca187d, 0x0c01f7cb, 0x59a8000d,
- 0x59a80860, 0x80040400, 0x80080480, 0x05021003,
- 0x90000541, 0x1c01f000, 0x480bc857, 0x80000580,
- 0x1c01f000, 0x0501f805, 0x60018800, 0x05000002,
- 0x60058800, 0x1c01f000, 0x4c040000, 0x59300809,
- 0x59a8000c, 0x80040480, 0x05001007, 0x59a8000a,
- 0x80040480, 0x05021004, 0x800409c0, 0x5c000800,
- 0x1c01f000, 0x800409c0, 0x05ca0860, 0x4803c856,
- 0x05fdf7fb, 0x4803c856, 0x4d300000, 0x0005f8ca,
- 0x05000007, 0x0501f827, 0x4d380000, 0x612e7000,
- 0x0005f905, 0x5c027000, 0x90000541, 0x5c026000,
- 0x1c01f000, 0x4803c856, 0x4d300000, 0x05f5fcec,
- 0x05000018, 0x0501f81b, 0x4d300000, 0x05f1f824,
- 0x4df00000, 0x4d3c0000, 0x60027840, 0x0201f800,
- 0x0010bc6f, 0x0201f800, 0x0010bd08, 0x0201f800,
- 0x0010c0ee, 0x5c027800, 0x5c03e000, 0x05f00804,
- 0x5c026000, 0x8d3c053e, 0x05020008, 0x4d380000,
- 0x61327000, 0x0005f905, 0x5c027000, 0x90000541,
- 0x5c026000, 0x1c01f000, 0x0005f8e7, 0x05fdf7fc,
- 0x592c0408, 0x494a6019, 0x494e601a, 0x4936600a,
- 0x492e6009, 0x640e6407, 0x59340802, 0x4806600b,
- 0x800000c2, 0x800008c4, 0x80040400, 0x48026006,
- 0x1c01f000, 0x493bc857, 0x4d300000, 0x0005f8ca,
- 0x0500000a, 0x05fdffef, 0x4d400000, 0x60168000,
- 0x0501f80a, 0x5c028000, 0x8d3c053e, 0x05020005,
- 0x0005f905, 0x90000541, 0x5c026000, 0x1c01f000,
- 0x0005f8e7, 0x05fdf7fc, 0x4803c856, 0x05edffec,
- 0x4df00000, 0x4d3c0000, 0x4d440000, 0x59368c03,
- 0x60067840, 0x0201f800, 0x0010bbea, 0x0201f800,
- 0x0010bc34, 0x0201f800, 0x0010bd08, 0x0201f800,
- 0x0010c0ee, 0x5c028800, 0x5c027800, 0x5c03e000,
- 0x05ec07c7, 0x1c01f000, 0x4803c856, 0x4d300000,
- 0x05f5fc9b, 0x0500000b, 0x481a601e, 0x48ee6023,
- 0x4936600a, 0x64066407, 0x492e6009, 0x4d380000,
- 0x607e7000, 0x0005f905, 0x5c027000, 0x90000541,
- 0x5c026000, 0x1c01f000, 0x4803c856, 0x4d300000,
- 0x05f5fc8b, 0x0500000a, 0x48ee6023, 0x4936600a,
- 0x64066407, 0x492e6009, 0x4d380000, 0x61567000,
- 0x0005f905, 0x5c027000, 0x90000541, 0x5c026000,
- 0x1c01f000, 0x4803c856, 0x4d300000, 0x05f5fc7c,
- 0x0500000b, 0x481a601e, 0x48ee6023, 0x4936600a,
- 0x64066407, 0x492e6009, 0x4d380000, 0x60f67000,
- 0x0005f905, 0x5c027000, 0x90000541, 0x5c026000,
- 0x1c01f000, 0x4803c856, 0x4d300000, 0x05f5fc6c,
- 0x05000010, 0x4936600a, 0x492fc857, 0x4933c857,
- 0x592c0405, 0x8c00051e, 0x05000003, 0x48efc857,
- 0x48ee6023, 0x64066407, 0x492e6009, 0x4d380000,
- 0x60027000, 0x0005f905, 0x5c027000, 0x90000541,
- 0x5c026000, 0x1c01f000, 0x4803c856, 0x4d300000,
- 0x05f5fc57, 0x0500000b, 0x48ee6023, 0x481a601e,
- 0x4936600a, 0x64066407, 0x492e6009, 0x4d380000,
- 0x61127000, 0x0005f905, 0x5c027000, 0x90000541,
- 0x5c026000, 0x1c01f000, 0x4803c856, 0x4d300000,
- 0x05f5fc47, 0x0500000b, 0x481a601e, 0x48ee6023,
- 0x4936600a, 0x64066407, 0x492e6009, 0x4d380000,
- 0x61267000, 0x0005f905, 0x5c027000, 0x90000541,
- 0x5c026000, 0x1c01f000, 0x5930000a, 0x80001540,
- 0x05c40f9a, 0x8d0c0512, 0x05020007, 0x5808040b,
- 0x4803c856, 0x80000040, 0x05001003, 0x4800140b,
- 0x05020008, 0x58080010, 0x80000540, 0x05000005,
- 0x58080203, 0x80000540, 0x05020002, 0x64041203,
- 0x1c01f000, 0x4803c856, 0x59300403, 0x90000d82,
- 0x0500000b, 0x90000d83, 0x05000009, 0x90000d84,
- 0x05000007, 0x599c0819, 0x8c04050e, 0x05000003,
- 0x90000d80, 0x05000002, 0x90000541, 0x1c01f000,
- 0x0501f805, 0x60058800, 0x05000002, 0x60018800,
- 0x1c01f000, 0x4803c856, 0x4c000000, 0x4d2c0000,
- 0x59300407, 0x90000584, 0x05000017, 0x59300009,
- 0x80025d40, 0x800001c0, 0x05000013, 0x0501fbb1,
- 0x0500000f, 0x59300407, 0x90004590, 0x0500000c,
- 0x90004591, 0x0500000a, 0x90004583, 0x0500000a,
- 0x90004582, 0x05000008, 0x9000458a, 0x05000006,
- 0x592c0405, 0x8c00051e, 0x05000003, 0x80000580,
- 0x0501f002, 0x90000541, 0x5c025800, 0x5c000000,
- 0x1c01f000, 0x4803c856, 0x4d300000, 0x05f5fbf0,
- 0x0500000f, 0x4936600a, 0x48ee6023, 0x64066407,
- 0x492e6009, 0x4d3c0000, 0x417a7800, 0x0201f800,
- 0x0010b660, 0x5c027800, 0x4d380000, 0x60a27000,
- 0x0005f905, 0x5c027000, 0x90000541, 0x5c026000,
- 0x1c01f000, 0x4803c856, 0x91380595, 0x05020008,
- 0x59a80073, 0xb00005b4, 0x05020005, 0x05e1ff29,
- 0x64066203, 0x64a66403, 0x05edf616, 0x05f9f9bc,
- 0x0005f0e7, 0x4803c856, 0x91380596, 0x05020004,
- 0x60100800, 0x05e1fe61, 0x05f5f581, 0x91380595,
- 0x0502000d, 0x59a80073, 0x90000594, 0x0502000a,
- 0x05e1ff73, 0x05f9fd61, 0x05020007, 0x59340404,
- 0x80000540, 0x05000004, 0x60180800, 0x05e1fe53,
- 0x05f5f573, 0x05f9f9a6, 0x0005f0e7, 0x4803c856,
- 0x592c0207, 0x90000585, 0x05000002, 0x1c01f000,
- 0x4803c856, 0x592c0209, 0x8400054a, 0x48025a09,
- 0x1c01f000, 0x59300809, 0x800409c0, 0x05000008,
- 0x58040205, 0x82000580, 0x00000152, 0x05020004,
- 0x59a8082a, 0x48066006, 0x1c01f000, 0x599c0416,
- 0x800001c0, 0x05000007, 0x90000c84, 0x05001005,
- 0x800000c2, 0x800008c4, 0x80040c00, 0x05fdf7f6,
- 0x59300403, 0x90000582, 0x05fe07f2, 0x5930080a,
- 0x58040403, 0x82000580, 0x000007fe, 0x05fe07ed,
- 0x60a00800, 0x05fdf7ec, 0x497a6205, 0x497a6009,
- 0x64066203, 0x65426403, 0x42000800, 0x80000043,
- 0x0005f07c, 0x4933c857, 0x4d340000, 0x5932680a,
- 0x59340200, 0x8c00050e, 0x05000005, 0x59300407,
- 0x90000c92, 0x05021004, 0x0c01f805, 0x5c026800,
- 0x1c01f000, 0x05fdfcc6, 0x05fdf7fd, 0x00106fc7,
- 0x00107315, 0x00107319, 0x0010731c, 0x00108478,
- 0x00108490, 0x00108494, 0x00106fc7, 0x00106fc7,
- 0x00106fc7, 0x00106fc7, 0x00106fc7, 0x00106fc7,
- 0x00106fc7, 0x00106fc7, 0x00106fc7, 0x00106fc7,
- 0x00106fc7, 0x4803c856, 0x40000000, 0x40000000,
- 0x1c01f000, 0x40000000, 0x40000000, 0x1c01f000,
- 0x5930001e, 0x4803c857, 0x59300416, 0x4933c857,
- 0x4803c857, 0x8c000502, 0x05000005, 0x4803c857,
- 0x84000540, 0x48026416, 0x1c01f000, 0x42000000,
- 0xd0000000, 0x41300800, 0x05c9fd44, 0x0501f80e,
- 0x0502000c, 0x59300c16, 0x59300403, 0xb0000580,
- 0x05000003, 0x84040d40, 0x0501f004, 0x59a8002a,
- 0x9000040a, 0x48026205, 0x84040d42, 0x48066416,
- 0x1c01f000, 0x4933c857, 0x4d340000, 0x5932680a,
- 0x59340a00, 0x8c04050e, 0x05c40ea8, 0x5930001e,
- 0x80000540, 0x0502002c, 0x59300403, 0x4803c857,
- 0xb0000580, 0x05000003, 0x8d0c050e, 0x05020024,
- 0x4d1c0000, 0x41323800, 0x05f5fb39, 0x0500001e,
- 0x4932381e, 0x591c0416, 0x84000542, 0x48023c16,
- 0x4936600a, 0x591c0407, 0x90000583, 0x05000006,
- 0x591c0202, 0x4802641b, 0x591c0402, 0x4802621b,
- 0x0501f005, 0x591c0202, 0x4802621b, 0x591c0402,
- 0x4802641b, 0x491e6020, 0x64066407, 0x64d66403,
- 0x64066203, 0x42000800, 0x80000040, 0x0005f87c,
- 0x411e6000, 0x5c023800, 0x80000580, 0x5c026800,
- 0x1c01f000, 0x411e6000, 0x5c023800, 0x59a8002c,
- 0x48026205, 0x90000541, 0x05fdf7f9, 0x4933c857,
- 0x4d2c0000, 0x4932381e, 0x4a026202, 0x0000ffff,
- 0x591e5809, 0x591c0008, 0x8c00051e, 0x05000005,
- 0x8400051e, 0x48023808, 0x497a580a, 0x0501f016,
- 0x592c0409, 0x8c000518, 0x05000013, 0x84000518,
- 0x48025c09, 0x4d400000, 0x592e8207, 0x64065a07,
- 0x0501faad, 0x49425a07, 0x5c028000, 0x497a580a,
- 0x592c0409, 0x8c000512, 0x05000007, 0x4d2c0000,
- 0x84000512, 0x48025c09, 0x592e580a, 0x05c9f9f2,
- 0x5c025800, 0x59a8002c, 0x48026205, 0x591c0216,
- 0x48026218, 0x90000d81, 0x05000006, 0x640a3a03,
- 0x90000585, 0x05000007, 0x497a6017, 0x0501f01c,
- 0x591c0008, 0x84000540, 0x48023808, 0x64123a03,
- 0x591c0416, 0x4803c857, 0x8400051c, 0x84000554,
- 0x48023c16, 0x592c0010, 0x40001000, 0x591c0818,
- 0x80040480, 0x05fe17f1, 0x591c0018, 0x82000500,
- 0xfffffffc, 0x48026017, 0x48023818, 0x591c0a16,
- 0x4807c857, 0x90040d85, 0x05020005, 0x480bc857,
- 0x4803c857, 0x4a023814, 0xffffffff, 0x591c0402,
- 0x4802641b, 0x591c0202, 0x4802621b, 0x591e680a,
- 0x4936600a, 0x64066407, 0x64e66403, 0x64066203,
- 0x42000800, 0x80000040, 0x0005f87c, 0x5c025800,
- 0x1c01f000, 0x4933c857, 0x59300416, 0x8c000514,
- 0x05000015, 0x8c00051c, 0x05020012, 0x59300018,
- 0x80100480, 0x05001006, 0x05000005, 0x59300416,
- 0x84000514, 0x8400055c, 0x0501f009, 0x48126018,
- 0x48126014, 0x40100000, 0x592c1810, 0x800c0480,
- 0x48026013, 0x59300416, 0x84000514, 0x48026416,
- 0x1c01f000, 0x4933c857, 0x8c00051c, 0x05020008,
- 0x59300014, 0x4803c857, 0x48026018, 0x59300416,
- 0x8400055c, 0x4803c857, 0x48026416, 0x1c01f000,
- 0x0501f805, 0x60058800, 0x05000002, 0x60018800,
- 0x1c01f000, 0x59300c03, 0x4933c857, 0x4807c857,
- 0x900404b4, 0x05001005, 0x900404bc, 0x05021003,
- 0x80000580, 0x1c01f000, 0x90000541, 0x05fdf7fe,
- 0x41780800, 0x59a81028, 0x60c80000, 0x05edfc11,
- 0x800811c0, 0x05020002, 0x60501000, 0x480b502a,
- 0x59a81029, 0x480b5022, 0x41780800, 0x61900000,
- 0x05edfc08, 0x800811c0, 0x05020002, 0x60501000,
- 0x480b502b, 0x9008140a, 0x480b502c, 0x60040800,
- 0x05edfdf0, 0x42000000, 0x30000000, 0x40080800,
- 0x0001f91e, 0x600c0800, 0x59a8100f, 0x05edfddb,
- 0x05e1f7c7, 0x64a3502a, 0x6453502b, 0x4a035022,
- 0x000007d0, 0x60781000, 0x480b502c, 0x60040800,
- 0x05edfde0, 0x42000000, 0x30000000, 0x40080800,
- 0x0001f91e, 0x600c0800, 0x59a8100f, 0x05edf5cb,
- 0x4933c857, 0x4d2c0000, 0x59300403, 0x900005be,
- 0x05020004, 0x59325819, 0x812e59c0, 0x05ca094d,
- 0x5c025800, 0x1c01f000, 0x4937c857, 0x4d300000,
- 0x05f5fa53, 0x0500000b, 0x4936600a, 0x64066407,
- 0x492e6009, 0x60240800, 0x05e1fce0, 0x4d380000,
- 0x60ce7000, 0x0005f905, 0x5c027000, 0x90000541,
- 0x5c026000, 0x1c01f000, 0x4933c857, 0x4d2c0000,
- 0x4c580000, 0x4d3c0000, 0x59325809, 0x91380595,
- 0x0502001d, 0x59a8b073, 0x90580c99, 0x05001002,
- 0x6060b000, 0x8058b104, 0x0501f9aa, 0x80000580,
- 0x0501f9b9, 0x912cac0a, 0x91cca406, 0x0509fdda,
- 0x4c600000, 0x6004c000, 0x592c100b, 0x8c080518,
- 0x05020006, 0x59a8000f, 0x592c100e, 0x80080580,
- 0x05020006, 0x4178c000, 0x5930100a, 0x58081403,
- 0x417a7800, 0x05d1fd5c, 0x5c00c000, 0x05f5fbd8,
- 0x0501f005, 0x6008b000, 0x0501f9af, 0x05f9f808,
- 0x0005f8e7, 0x5c027800, 0x5c00b000, 0x5c025800,
- 0x1c01f000, 0x4933c856, 0x60018800, 0x4936600a,
- 0x64066407, 0x492e6009, 0x4d380000, 0x61367000,
- 0x0005f905, 0x5c027000, 0x90000541, 0x60058800,
- 0x1c01f000, 0x4803c856, 0x4d2c0000, 0x91380595,
- 0x05020025, 0x59a80873, 0x59325809, 0x5930040c,
- 0x80040580, 0x05020020, 0x4c500000, 0x4c540000,
- 0x4c580000, 0x91cca406, 0x4050a800, 0x5930b40c,
- 0x9058b403, 0x8058b104, 0x0509fdde, 0x91cca406,
- 0x592cb206, 0x9058b403, 0x8058b104, 0x912cac07,
- 0x0509fd9d, 0x592e5801, 0x812e59c0, 0x05fe07f9,
- 0x5931d823, 0x58ef400a, 0x58ee580c, 0x4a025a05,
- 0x00000103, 0x58ec0008, 0x0801f800, 0x59300402,
- 0x5c00b000, 0x5c00a800, 0x5c00a000, 0x5c025800,
- 0x1c01f000, 0x05f5ffce, 0x5c025800, 0x1c01f000,
- 0x4933c857, 0x90040db5, 0x05000005, 0x5930141b,
- 0x0501f844, 0x05000025, 0x0501f006, 0x4d300000,
- 0x59326020, 0x0501f848, 0x5c026000, 0x0500001e,
- 0x591c0c07, 0x90040583, 0x05000003, 0x90040586,
- 0x0502001b, 0x591c0c02, 0x5930041b, 0x80040580,
- 0x05000009, 0x5930021b, 0x80040580, 0x05020014,
- 0x591c0a02, 0x5930041b, 0x80040580, 0x05020010,
- 0x0501f009, 0x59300a1b, 0x82040580, 0x0000ffff,
- 0x05000005, 0x591c0202, 0x59300a1b, 0x80040580,
- 0x05020007, 0x591c000a, 0x5930080a, 0x80040580,
- 0x1c01f000, 0x417a3800, 0x90000541, 0x1c01f000,
- 0x4803c856, 0x4203e000, 0xb0800000, 0x600009fe,
- 0x4203f800, 0x30000000, 0x40000000, 0x80040840,
- 0x05c40d12, 0x05ffb7fb, 0x1c01f000, 0x4803c856,
- 0x4203e000, 0xb0800000, 0x4203f800, 0x20000000,
- 0x1c01f000, 0x0501f805, 0x60058800, 0x05020002,
- 0x60018800, 0x1c01f000, 0x59300808, 0x8c04051e,
- 0x592c0c09, 0x05020002, 0x8c040518, 0x1c01f000,
- 0x05fdfc83, 0x05000007, 0x800800c4, 0x800808ca,
- 0x80040c00, 0x82063c00, 0x0010ccb4, 0x491fc857,
- 0x1c01f000, 0x0501fbff, 0x05020007, 0x59301402,
- 0x05fdfff4, 0x05000007, 0x411c0000, 0x81300580,
- 0x05000003, 0x81780500, 0x0501f002, 0x81300540,
- 0x1c01f000, 0x4d300000, 0x0001fac4, 0x0502000a,
- 0x42026000, 0x0010cc6c, 0x4936600a, 0x492e6009,
- 0x0201f800, 0x0010b660, 0x80000580, 0x5c026000,
- 0x1c01f000, 0x90000541, 0x05fdf7fd, 0x4933c857,
- 0x05fdfc6e, 0x05c40cd9, 0x4d2c0000, 0x4d340000,
- 0x4d440000, 0x4c580000, 0x59325809, 0x5932680a,
- 0x49425a07, 0x05e9fa7b, 0x592e8c07, 0x592c4208,
- 0x9020050f, 0x0c01f806, 0x5c00b000, 0x5c028800,
- 0x5c026800, 0x5c025800, 0x1c01f000, 0x00107531,
- 0x0010754f, 0x00107555, 0x00107558, 0x00107560,
- 0x0010752f, 0x0010752f, 0x0010752f, 0x00107563,
- 0x0010756d, 0x0010756d, 0x0010752f, 0x0010752f,
- 0x0010752f, 0x0010752f, 0x0010752f, 0x4803c857,
- 0x05c5fcb6, 0x814281c0, 0x05020011, 0x41785800,
- 0x592c0405, 0x8c00051c, 0x05020002, 0x59345c05,
- 0x442c2800, 0x59340008, 0x48002802, 0x59340009,
- 0x48002801, 0x59340006, 0x48002804, 0x59340007,
- 0x48002803, 0x602cb000, 0x0501f02d, 0x592c0208,
- 0x8c00051e, 0x6008b000, 0x05020029, 0x9004b540,
- 0x05000027, 0x44042800, 0x5932680a, 0x59340400,
- 0x48002801, 0x6008b000, 0x0501f021, 0x814281c0,
- 0x05fe07f3, 0x59345c05, 0x442c2800, 0x6004b000,
- 0x0501f01b, 0x9140b540, 0x05000019, 0x0501f021,
- 0x814281c0, 0x0502001f, 0x59340200, 0x44002800,
- 0x59340001, 0x48002801, 0x6008b000, 0x0501f010,
- 0x9140b540, 0x05020017, 0x0501f00d, 0x9140b540,
- 0x0500000b, 0x05e1ff2a, 0x05000012, 0x8c20050e,
- 0x05000002, 0x497a600a, 0x4178b000, 0x497a5a07,
- 0x0501f003, 0x9140b540, 0x0502000a, 0x592c0405,
- 0x8400051c, 0x48025c05, 0x592c0208, 0x8400051e,
- 0x48025a08, 0x0501f87f, 0x497a6009, 0x0001f32c,
- 0x592c0208, 0x8c00051e, 0x6008b000, 0x05fe07f4,
- 0x9004b540, 0x05fc07f2, 0x44042800, 0x6004b000,
- 0x05fdf7ef, 0x4937c857, 0x4d300000, 0x05f5f900,
- 0x0500000b, 0x4936600a, 0x64066407, 0x492e6009,
- 0x602c0800, 0x05e1fb8d, 0x4d380000, 0x610e7000,
- 0x0005f905, 0x5c027000, 0x90000541, 0x5c026000,
- 0x1c01f000, 0x4937c857, 0x4d2c0000, 0x59325809,
- 0x91380595, 0x05020022, 0x59a80073, 0x90000584,
- 0x0502001f, 0x59a8000f, 0x592c100a, 0x80080580,
- 0x05020011, 0x4d440000, 0x592e8c07, 0x592c0208,
- 0x4803c856, 0x82000500, 0x00000080, 0x84000548,
- 0x4d3c0000, 0x60027820, 0x8c00050e, 0x05000002,
- 0x853e7d5c, 0x05e1fe5e, 0x5c027800, 0x5c028800,
- 0x0501f003, 0x4803c856, 0x05e1fee1, 0x05fdfbcb,
- 0x05000011, 0x4d400000, 0x60028000, 0x41780800,
- 0x05fdff57, 0x5c028000, 0x0501f00a, 0x05e1fed8,
- 0x05fe07f7, 0x05fdfbc1, 0x05000007, 0x4c580000,
- 0x6008b000, 0x0501f854, 0x5c00b000, 0x05f5feac,
- 0x0005f8e7, 0x5c025800, 0x1c01f000, 0x4937c857,
- 0x4d300000, 0x05f5f8be, 0x0500000d, 0x4936600a,
- 0x64066407, 0x4d3c0000, 0x4d380000, 0x417a7800,
- 0x05e1fb3f, 0x492e6009, 0x60127000, 0x0005f905,
- 0x5c027000, 0x5c027800, 0x90000541, 0x5c026000,
- 0x1c01f000, 0x4937c857, 0x4d300000, 0x05f5f8ac,
- 0x0500000b, 0x4936600a, 0x600c0800, 0x05e1fb3b,
- 0x64066407, 0x492e6009, 0x4d380000, 0x61467000,
- 0x0005f905, 0x5c027000, 0x90000541, 0x5c026000,
- 0x1c01f000, 0x4933c857, 0x61f2880f, 0x42003000,
- 0x00fffffc, 0x05e1fb60, 0x05c60bfc, 0x4936600a,
- 0x417a7800, 0x05e1fb1e, 0x600c0800, 0x05e1fb27,
- 0x497a6c12, 0x64066203, 0x640a6403, 0x05edf2d1,
- 0x492fc857, 0x4c580000, 0x4c000000, 0x8058b1c0,
- 0x0500000a, 0x82580500, 0xfffffff0, 0x05c60beb,
- 0x8058b0d0, 0x592c0409, 0x82000500, 0xfffff0ff,
- 0x80580540, 0x48025c09, 0x5c000000, 0x5c00b000,
- 0x1c01f000, 0x492fc857, 0x4c000000, 0x4c040000,
- 0x800000d8, 0x592c0c09, 0x82040d00, 0xffff0fff,
- 0x80040540, 0x48025c09, 0x5c000800, 0x5c000000,
- 0x1c01f000, 0x4933c857, 0x4d2c0000, 0x59325809,
- 0x592c0208, 0x8400055e, 0x48025a08, 0x4c500000,
- 0x4c540000, 0x4c580000, 0x05fdffda, 0x05e9f975,
- 0x64602800, 0x80142800, 0x8058b040, 0x91cca407,
- 0x4014a800, 0x0509fc08, 0x5c00b000, 0x5c00a800,
- 0x5c00a000, 0x5c025800, 0x1c01f000, 0x0501f805,
- 0x60058800, 0x05000002, 0x60018800, 0x1c01f000,
- 0x59325809, 0x592c0205, 0x82000580, 0x00000152,
- 0x1c01f000, 0x59300021, 0x80000540, 0x05ca0bcd,
- 0x1c01f000, 0x4d2c0000, 0x59325809, 0x59300203,
- 0x4933c857, 0x492fc857, 0x493bc857, 0x4803c857,
- 0x9000348e, 0x05c61ba9, 0x0c01f803, 0x5c025800,
- 0x1c01f000, 0x0010764f, 0x00107655, 0x0010767c,
- 0x0010764f, 0x0010764f, 0x0010764f, 0x0010764f,
- 0x0010764f, 0x00107650, 0x0010764f, 0x0010764f,
- 0x0010764f, 0x0010764f, 0x0010764f, 0x05c5fb97,
- 0xb1383498, 0x05c61b95, 0x493a6403, 0x64066203,
- 0x05edf270, 0x91380593, 0x0502000c, 0x492fc857,
- 0x592c000d, 0x800001c0, 0x05000005, 0x640a6203,
- 0x59a8002a, 0x48026006, 0x1c01f000, 0x64025a07,
- 0x0001fb2c, 0x0005f0e7, 0x913805a7, 0x05000011,
- 0x91380594, 0x0500000b, 0x91380595, 0x05000003,
- 0x91380596, 0x05c60b7d, 0x05edfe9b, 0x05f6004b,
- 0x59300203, 0x90000582, 0x05c60b78, 0x0501f00d,
- 0x4937c857, 0x05edfab8, 0x6446580f, 0x0501f004,
- 0x4937c857, 0x05edfab4, 0x6442580f, 0x64c65a07,
- 0x6412580e, 0x0001fb2c, 0x05e1ffc9, 0x05f1f7d2,
- 0x59341400, 0x82081d00, 0x000000ff, 0x59300c03,
- 0x480bc857, 0x4807c857, 0xb0040593, 0x05000020,
- 0x90040582, 0x0500000f, 0x90040581, 0x05000010,
- 0x90040583, 0x05000013, 0x90040585, 0x05000014,
- 0x900405b3, 0x05000012, 0x90040580, 0x05000013,
- 0x90040584, 0x05c60b55, 0x0501f874, 0x0501f010,
- 0x900c0583, 0x05000837, 0x0501f00d, 0x900c058b,
- 0x0502000b, 0x601c0800, 0x05e1fa7c, 0x0501f008,
- 0x900c0585, 0x05000849, 0x0501f005, 0x900c0589,
- 0x05000864, 0x0501f002, 0x0501f869, 0x654a6403,
- 0x59a81073, 0x592c040c, 0x8c000500, 0x05000002,
- 0x60201000, 0x592c040c, 0x8c000516, 0x05000002,
- 0x90081418, 0x592c000d, 0x497a580e, 0x497a580f,
- 0x80080c80, 0x05000007, 0x05001004, 0x641e5a07,
- 0x40001000, 0x0501f004, 0x64565a07, 0x0501f002,
- 0x64025a07, 0x480a580d, 0x05f5f914, 0x0500000d,
- 0x592c1001, 0x480a600d, 0x58080800, 0x90080402,
- 0x592c1012, 0x592c1813, 0x60003000, 0x42002000,
- 0x00100efc, 0x05f5fa35, 0x05000002, 0x1c01f000,
- 0x64b25a07, 0x497a580d, 0x0001fb2c, 0x0005f0e7,
- 0x91380595, 0x05020007, 0x59a80086, 0x8c000502,
- 0x05020006, 0x05e1fb03, 0x60100800, 0x05e1f243,
- 0x601c0800, 0x05e1f241, 0x05e5fa3e, 0x60401000,
- 0x05020008, 0x59340002, 0x82000500, 0x00ff0000,
- 0x82000580, 0x00ff0000, 0x05fc07f3, 0x60201000,
- 0x05e1ffac, 0x05fc07f0, 0x592c040c, 0x84000540,
- 0x48025c0c, 0x05fdf7ef, 0x91380595, 0x0502000b,
- 0x59a80086, 0x8c000502, 0x0502000a, 0x05e1fb44,
- 0x4d3c0000, 0x417a7800, 0x05e1fa1d, 0x5c027800,
- 0x60180800, 0x05e1f225, 0x60100800, 0x05e1f223,
- 0x05e5fa20, 0x60401000, 0x05020008, 0x59340002,
- 0x82000500, 0x00ff0000, 0x82000580, 0x00ff0000,
- 0x05fc07ef, 0x60201000, 0x05e1ff8e, 0x05fc07ec,
- 0x592c040c, 0x84000540, 0x48025c0c, 0x05fdf7ef,
- 0x60100800, 0x05e1f211, 0x91380595, 0x05020003,
- 0x0505fc1d, 0x05e00c92, 0x1c01f000, 0x91380595,
- 0x05020015, 0x4c580000, 0x91cc1408, 0x6008b000,
- 0x91341c06, 0x05f9f926, 0x0502000e, 0x91cc140a,
- 0x6008b000, 0x91341c08, 0x05f9f921, 0x05020009,
- 0x59342200, 0x59cc1007, 0x800811c0, 0x05000003,
- 0x480a6801, 0x84102542, 0x8410251a, 0x48126a00,
- 0x5c00b000, 0x1c01f000, 0x42000000, 0x00109890,
- 0x0509fa3b, 0x05edfa9a, 0x59300203, 0x4933c857,
- 0x4803c857, 0x90000c8e, 0x05c61abc, 0x0c01f802,
- 0x05edf27f, 0x0010773c, 0x00107745, 0x0010773d,
- 0x0010773b, 0x0010773b, 0x0010773b, 0x0010773b,
- 0x0010773b, 0x0010773b, 0x0010773b, 0x0010773b,
- 0x0010773b, 0x0010773b, 0x0010773b, 0x05c5faab,
- 0x1c01f000, 0x59300403, 0xb0000592, 0x05fc008d,
- 0x05e1ff03, 0x59325809, 0x641a5a07, 0x0001fb2c,
- 0x05f1f709, 0x59301804, 0x840c0520, 0x48026004,
- 0x598c000b, 0x81300580, 0x0502000f, 0x8c0c0520,
- 0x0502000f, 0x42001000, 0x001097b0, 0x50081000,
- 0x58080002, 0x82000580, 0x00000100, 0x0500000d,
- 0x5808000b, 0x81300580, 0x05c60a90, 0x4978100b,
- 0x0501f003, 0x8c0c0520, 0x05fe07e3, 0x0201f800,
- 0x0010ba3e, 0x80c40040, 0x05fc07df, 0x05c5fa87,
- 0x05edfcfc, 0x05fc07fa, 0x59300203, 0x90000c8e,
- 0x05c61a82, 0x0c01f7c8, 0x4933c857, 0x4c500000,
- 0x4c540000, 0x4c580000, 0x592c0c08, 0x48065814,
- 0x59cc0809, 0x48065808, 0x59cc0808, 0x4806580c,
- 0x59a80885, 0x82040500, 0x000003ff, 0x800010c4,
- 0x8c040514, 0x05000004, 0x59cc0002, 0x90000503,
- 0x80081480, 0x480a621c, 0x412c0800, 0x05c5fdda,
- 0x05c40a6a, 0x492c080a, 0x58040409, 0x84000552,
- 0x84000540, 0x48000c09, 0x90081403, 0x80081104,
- 0x91cca406, 0x912cac05, 0x60400800, 0x90080490,
- 0x05021003, 0x40080800, 0x80000580, 0x4004b000,
- 0x4c000000, 0x0509fad7, 0x5c000000, 0x800001c0,
- 0x0500000a, 0x412c1000, 0x4c000000, 0x05c5fdc2,
- 0x05c40a52, 0x492c1001, 0x912cac05, 0x5c000000,
- 0x40001000, 0x05fdf7ee, 0x5c00b000, 0x5c00a800,
- 0x5c00a000, 0x1c01f000, 0x4933c857, 0x4d2c0000,
- 0x4c380000, 0x59325809, 0x5930021c, 0x48025a09,
- 0x59301013, 0x640a6203, 0x592c020b, 0x8c000500,
- 0x05000004, 0x59300017, 0x592c1010, 0x80081480,
- 0x800811c0, 0x05020007, 0x64025a07, 0x592c000c,
- 0x82000500, 0x00000c00, 0x05000009, 0x0501f009,
- 0x8c08053e, 0x05000005, 0x641e5a07, 0x80081080,
- 0x80081000, 0x0501f002, 0x64565a07, 0x480a5808,
- 0x42000000, 0x001099e8, 0x50007000, 0x5838000a,
- 0x80000540, 0x05020007, 0x4930700b, 0x4930700a,
- 0x58380002, 0x90000580, 0x05020808, 0x0501f004,
- 0x90001400, 0x45301000, 0x4930700a, 0x5c007000,
- 0x5c025800, 0x1c01f000, 0x4933c857, 0x592c000a,
- 0x40001000, 0x48007009, 0x90080405, 0x48007003,
- 0x592c000e, 0x592c100f, 0x48007006, 0x48087007,
- 0x592c0014, 0x592c1209, 0x80080c80, 0x05001002,
- 0x40001000, 0x90081403, 0x80081104, 0x90080490,
- 0x05021003, 0x80000580, 0x0501f002, 0x60401000,
- 0x4800700c, 0x48087004, 0x800810c4, 0x48087005,
- 0x40381000, 0x0001f01c, 0x4d2c0000, 0x05c5fd6a,
- 0x05c409fa, 0x42000800, 0x001099e8, 0x452c0800,
- 0x497a580a, 0x497a580b, 0x497a580c, 0x4a025808,
- 0x001077fa, 0x4a025802, 0x00000100, 0x64025801,
- 0x5c025800, 0x1c01f000, 0x4833c857, 0x4d300000,
- 0x4d2c0000, 0x4c5c0000, 0x4030b800, 0x585c0009,
- 0x80025d40, 0x05020004, 0x585c000b, 0x4c000000,
- 0x0501f03a, 0x585c0002, 0x82000580, 0x00000100,
- 0x0502001c, 0x592c0801, 0x4c040000, 0x05c5fd6d,
- 0x5c000800, 0x800409c0, 0x05000017, 0x4804b809,
- 0x585c100c, 0x800811c0, 0x05020004, 0x40065800,
- 0x05c5fd6d, 0x0501f010, 0x90080490, 0x05021003,
- 0x80000580, 0x0501f002, 0x60401000, 0x4800b80c,
- 0x4808b804, 0x800810c4, 0x4808b805, 0x90040405,
- 0x4800b803, 0x405c1000, 0x0001f81c, 0x0501f021,
- 0x0501f824, 0x585c000b, 0x80026540, 0x59300000,
- 0x80000d40, 0x05020002, 0x4800b80a, 0x4800b80b,
- 0x497a6000, 0x4c000000, 0x4978b809, 0x59325809,
- 0x4a025a05, 0x00000103, 0x59300402, 0x48025c07,
- 0x592c100c, 0x4c080000, 0x0001fb2c, 0x05fdfa13,
- 0x5c001000, 0x8c080518, 0x05000003, 0x05fdfab3,
- 0x0501f002, 0x0005f8e7, 0x405c7000, 0x5c000000,
- 0x80026540, 0x05000003, 0x59325809, 0x05fdff8b,
- 0x5c00b800, 0x5c025800, 0x5c026000, 0x1c01f000,
- 0x483bc857, 0x58380009, 0x40025800, 0x05c5fd36,
- 0x5838000b, 0x80026540, 0x59300009, 0x80025d40,
- 0x640a5a07, 0x1c01f000, 0x4803c857, 0x4933c857,
- 0x4d1c0000, 0x497a601e, 0x41323800, 0x40026000,
- 0x4d3c0000, 0x60167800, 0x0501f836, 0x5c027800,
- 0x411e6000, 0x4933c857, 0x59300416, 0x84000502,
- 0x48026416, 0x5c023800, 0x1c01f000, 0x481bc857,
- 0x4933c857, 0x4c5c0000, 0x4c600000, 0x4010b800,
- 0x4014c000, 0x0505ff5c, 0x8d0c0520, 0x05000006,
- 0x40602800, 0x405c3000, 0x0505fb2c, 0x90000541,
- 0x0501f002, 0x80000580, 0x5c00c000, 0x5c00b800,
- 0x1c01f000, 0x4803c856, 0x4d300000, 0x42026000,
- 0x0010ccb4, 0x59a8000d, 0x81640580, 0x05000013,
- 0x59300c07, 0x90040581, 0x05000009, 0x90040584,
- 0x05000004, 0x90040590, 0x05f80ed4, 0x0501f007,
- 0x59300203, 0x90000d87, 0x05000004, 0x4807c857,
- 0x05fdfb65, 0x05020807, 0x91326424, 0x41580000,
- 0x81300480, 0x05fc17ec, 0x5c026000, 0x1c01f000,
- 0x4933c857, 0x59300403, 0x4803c857, 0x05edf92c,
- 0x4df00000, 0x59300407, 0x4803c857, 0x90000d82,
- 0x05000011, 0x90000d81, 0x05000007, 0x90000d84,
- 0x05000005, 0x4933c856, 0x5c03e000, 0x05ec090c,
- 0x0501f036, 0x59300203, 0x90000d81, 0x05000010,
- 0x90000d82, 0x05000027, 0x90000d85, 0x05000025,
- 0x05c5f93e, 0x59300203, 0x90000d89, 0x05000008,
- 0x90000d8b, 0x05000006, 0x90000d8a, 0x0500001d,
- 0x90000d8c, 0x0500001b, 0x05c5f934, 0x598c000b,
- 0x81300580, 0x05020003, 0x05edfba6, 0x05020015,
- 0x59300004, 0x4803c857, 0x8c000520, 0x05000004,
- 0x84000520, 0x48026004, 0x0501f00e, 0x0201f800,
- 0x0010ba3e, 0x80c40040, 0x05c60924, 0x5c03e000,
- 0x05ec08e7, 0x59300407, 0x90000d82, 0x0500000f,
- 0x05e1fd7b, 0x05fdf9a8, 0x05f40ba1, 0x0501f00b,
- 0x5c03e000, 0x05ec08de, 0x59300407, 0x90000d82,
- 0x05000006, 0x05e1fd72, 0x05fdf99f, 0x05f40b98,
- 0x8d3c0500, 0x05000003, 0x0505ffb7, 0x05f1f576,
- 0x6406621f, 0x4a026403, 0x00000085, 0x64266203,
- 0x640a6407, 0x42000800, 0x80000040, 0x0005f07c,
- 0x60007040, 0x4203e000, 0xb0800000, 0x6033f800,
- 0x40000000, 0x40000000, 0x40000000, 0x0501b004,
- 0x80387040, 0x05c408fd, 0x05fdf7f9, 0x1c01f000,
- 0x4203e000, 0xb0800000, 0x6023f800, 0x1c01f000,
- 0x83300480, 0x0010cc48, 0x05001006, 0x41540000,
- 0x81300480, 0x05021003, 0x80000580, 0x1c01f000,
- 0x81780080, 0x1c01f000, 0x59a80873, 0x59cc2808,
- 0x82140500, 0x00000c00, 0x05000003, 0x90040490,
- 0x05001015, 0x80001580, 0x8c140512, 0x05000004,
- 0x90040494, 0x05001010, 0x59cc100a, 0x80000580,
- 0x8c140510, 0x05000004, 0x90040498, 0x0500100a,
- 0x59cc000b, 0x80080400, 0x05001007, 0x05000005,
- 0x90000418, 0x80040480, 0x05001003, 0x80000580,
- 0x1c01f000, 0x42000000, 0x0010986d, 0x0509f848,
- 0x90000541, 0x05fdf7fb, 0x4933c857, 0x4937c857,
- 0x492fc857, 0x48efc857, 0x4d1c0000, 0x4d300000,
- 0x41323800, 0x05f1fd62, 0x0500001b, 0x48ee6023,
- 0x4936600a, 0x591c0407, 0x90000583, 0x05000008,
- 0x591c0202, 0x4803c857, 0x4802641b, 0x591c0402,
- 0x4802621b, 0x4803c857, 0x0501f007, 0x591c0202,
- 0x4803c857, 0x4802621b, 0x591c0402, 0x4802641b,
- 0x4803c857, 0x491e6020, 0x64066407, 0x492e6009,
- 0x4d380000, 0x615e7000, 0x0005f905, 0x5c027000,
- 0x90000541, 0x5c026000, 0x5c023800, 0x1c01f000,
- 0x4933c857, 0x493bc857, 0x4937c857, 0x4d2c0000,
- 0x4c500000, 0x4c540000, 0x4c580000, 0x59325809,
- 0x05fdf832, 0x05000017, 0x91cca406, 0x912cac07,
- 0x91380596, 0x05020007, 0x59a80073, 0x90000588,
- 0x0502000e, 0x492fc857, 0x6008b000, 0x0501f008,
- 0x91380595, 0x05020009, 0x492fc857, 0x59a80073,
- 0x90000598, 0x05020005, 0x6018b000, 0x0509f8ce,
- 0x05f1fedb, 0x0501f003, 0x05f5fb0d, 0x0005f8e7,
- 0x5c00b000, 0x5c00a800, 0x5c00a000, 0x5c025800,
- 0x1c01f000, 0x4933c857, 0x05edf859, 0x4df00000,
- 0x59300203, 0x90000c8e, 0x05c6187c, 0x0c01f001,
- 0x0010797b, 0x0010797a, 0x00107980, 0x00107998,
- 0x0010797f, 0x0010797a, 0x0010797a, 0x0010797a,
- 0x0010797a, 0x0010797a, 0x0010797a, 0x0010797a,
- 0x0010797a, 0x0010797a, 0x05c5f86c, 0x5c03e000,
- 0x05ec082f, 0x80000580, 0x1c01f000, 0x05c9f992,
- 0x5c03e000, 0x05ec082a, 0x8d3c0502, 0x05020011,
- 0x4d2c0000, 0x59325809, 0x64165a07, 0x0001fb2c,
- 0x5c025800, 0x497a6009, 0x8d3c0500, 0x0502000b,
- 0x642a621f, 0x4a026403, 0x00000085, 0x64266203,
- 0x640a6407, 0x42000800, 0x80004040, 0x0005f87c,
- 0x81780080, 0x1c01f000, 0x05f1fcb7, 0x05fdf7fd,
- 0x05f9fda0, 0x05020003, 0x05edfa8d, 0x05020007,
- 0x0201f800, 0x0010b8cb, 0x80c40040, 0x05fc07e1,
- 0x05e9ff4e, 0x05c60845, 0x59300203, 0x90000d83,
- 0x05c40842, 0x90000c8e, 0x05c61840, 0x0c01f7c5,
- 0x4933c857, 0x4d340000, 0x916c0583, 0x0502000d,
- 0x599c0018, 0x8c000516, 0x05000003, 0x05d9fcc8,
- 0x0501f008, 0x60100800, 0x05ddff64, 0x6486641f,
- 0x05fdfc31, 0x90000541, 0x5c026800, 0x1c01f000,
- 0x80000580, 0x05fdf7fd, 0x59303009, 0x58181a05,
- 0x820c1d00, 0x000000ff, 0xb00c0588, 0x05000003,
- 0xb00c05aa, 0x05020045, 0x58180409, 0x8c000500,
- 0x05000042, 0x42000000, 0x001099e8, 0x50006000,
- 0x41781800, 0x5830200b, 0x41300000, 0x80100580,
- 0x05000006, 0x40101800, 0x580c2000, 0x801021c0,
- 0x05fe07fa, 0x0501f035, 0x4933c857, 0x59302000,
- 0x497a6000, 0x800c19c0, 0x0502001e, 0x4933c856,
- 0x42007000, 0x00020a09, 0x58300009, 0x800001c0,
- 0x05000018, 0x49786009, 0x58380001, 0x80300580,
- 0x05020008, 0x4933c856, 0x49787002, 0x4810600b,
- 0x801021c0, 0x0502001d, 0x4978600a, 0x0501f01b,
- 0x4933c856, 0x4810600b, 0x801021c0, 0x05020002,
- 0x4978600a, 0x4c180000, 0x4c300000, 0x05c5fca0,
- 0x5c006000, 0x05fdfe09, 0x5c003000, 0x0501f00f,
- 0x4933c856, 0x800c19c0, 0x05020008, 0x801021c0,
- 0x05000003, 0x4810600b, 0x0501f008, 0x4978600b,
- 0x4978600a, 0x0501f005, 0x48101800, 0x801021c0,
- 0x05020002, 0x480c600a, 0x58180409, 0x84000500,
- 0x48003409, 0x49783209, 0x1c01f000, 0x4933c857,
- 0x59368c03, 0x4c180000, 0x59300203, 0x9000348e,
- 0x05c21fda, 0x0c01f803, 0x5c003000, 0x1c01f000,
- 0x00107a1e, 0x00107e61, 0x00107f66, 0x00107a1e,
- 0x00107a1e, 0x00107a1e, 0x00107a1e, 0x00107a1e,
- 0x00107a3b, 0x00107a1e, 0x00107a1e, 0x00107a1e,
- 0x00107a1e, 0x00107a1e, 0x05c1ffc8, 0x4933c857,
- 0x61fe89ff, 0x813669c0, 0x05000002, 0x59368c03,
- 0x4c180000, 0x59300203, 0x9000348e, 0x05c21fbf,
- 0x0c01f803, 0x5c003000, 0x1c01f000, 0x00107a39,
- 0x001081a6, 0x00107a39, 0x00107a39, 0x00107a39,
- 0x00107a39, 0x00107a39, 0x00107a39, 0x00108107,
- 0x001084fd, 0x00108526, 0x001084fd, 0x00108526,
- 0x00107a39, 0x05c1ffad, 0x05c1ffac, 0xb1383497,
- 0x05c21faa, 0x41380000, 0x493bc857, 0x4d1c0000,
- 0x4d400000, 0x0c01f804, 0x5c028000, 0x5c023800,
- 0x1c01f000, 0x00107aa5, 0x00107c39, 0x00107aa5,
- 0x00107aa5, 0x00107aa5, 0x00107c3f, 0x00107aa5,
- 0x00107aa5, 0x00107aa5, 0x00107aa5, 0x00107aa5,
- 0x00107aa5, 0x00107aa5, 0x00107aa5, 0x00107aa5,
- 0x00107aa5, 0x00107aa5, 0x00107aa5, 0x00107aa5,
- 0x00107aa5, 0x00107aa5, 0x00107aa5, 0x00107aa5,
- 0x00107ac6, 0x00107b04, 0x00107b15, 0x00107b74,
- 0x00107bb8, 0x00107bee, 0x00107c13, 0x00107aa5,
- 0x00107aa5, 0x00107c44, 0x00107aa5, 0x00107aa5,
- 0x00107c4d, 0x00107c52, 0x00107aa5, 0x00107aa5,
- 0x00107aa5, 0x00107aa5, 0x00107aa5, 0x00107ccf,
- 0x00107aa5, 0x00107aa5, 0x00107ba1, 0x00107aa5,
- 0x00107aa5, 0x00107ca5, 0x00107aa5, 0x00107aa5,
- 0x00107aa5, 0x00107cda, 0x00107aa5, 0x00107aa5,
- 0x00107aa5, 0x00107d16, 0x00107aa5, 0x00107aa5,
- 0x00107aa5, 0x00107aa5, 0x00107aa5, 0x00107aa5,
- 0x00107d6b, 0x00107aa5, 0x00107aa5, 0x00107aa5,
- 0x00107aa5, 0x00107aa5, 0x00107aa6, 0x00107aa5,
- 0x00107aa5, 0x00107aa5, 0x00107aa5, 0x00107ab0,
- 0x00107aa5, 0x00107aa5, 0x00107aa5, 0x00107d92,
- 0x00107d97, 0x00107daf, 0x00107aa5, 0x00107aa5,
- 0x00107aa5, 0x00107aa5, 0x00107aa5, 0x00107abc,
- 0x00107aa5, 0x00107aa5, 0x00107aa5, 0x00107aa5,
- 0x00107aa5, 0x00107aa5, 0x00107aa5, 0x00107aa5,
- 0x00107aa5, 0x05c1ff41, 0x4933c857, 0x0505faa6,
- 0x05020311, 0x05cdff76, 0x0502030f, 0x59cc0407,
- 0x4802601e, 0x65166403, 0x64066203, 0x05e9f615,
- 0x4933c857, 0x0505fa9c, 0x05020307, 0x05cdff6c,
- 0x05020305, 0x0501fb37, 0x05020169, 0x59cc0007,
- 0x4802601e, 0x652a6403, 0x64066203, 0x05e9f609,
- 0x4933c857, 0x0505fa90, 0x050202fb, 0x05cdff60,
- 0x050202f9, 0x0501fb2b, 0x0502015d, 0x655a6403,
- 0x64066203, 0x05e9f5ff, 0x4933c857, 0x05cdff58,
- 0x0502000b, 0x05e1f8f9, 0x05020009, 0x59a8021b,
- 0x8c000500, 0x0502000a, 0x8c000506, 0x05020004,
- 0x05e1fe44, 0x05020006, 0x0501f2e7, 0x64266403,
- 0x6426641c, 0x6402621c, 0x0501f167, 0x05e1f9a1,
- 0x05000022, 0x59340200, 0x8c00051a, 0x05000004,
- 0x5934000a, 0x84000560, 0x4802680a, 0x0501ffe1,
- 0x05020021, 0x60a68000, 0x4d3c0000, 0x417a7800,
- 0x0201f800, 0x0010b660, 0x5c027800, 0x42000000,
- 0x0010987a, 0x0505fe76, 0x05ddfeea, 0x64226403,
- 0x600c3000, 0x8d0c0520, 0x0500014f, 0x59cc400b,
- 0x59cc380c, 0x59cc180d, 0x59cc080e, 0x9c2041c0,
- 0x9c1c39c0, 0x9c0c19c0, 0x9c0409c0, 0x641e6203,
- 0x41782800, 0x0501f13d, 0x0505f874, 0x05fe07e4,
- 0x64266403, 0x643a641c, 0x4a02621c, 0x00001900,
- 0x0501f13d, 0x64266403, 0x640e641c, 0x0501f13a,
- 0x4933c857, 0x05cdff1a, 0x050202b3, 0x05e1f8bb,
- 0x050202b1, 0x493a6403, 0x0501ff5e, 0x05020006,
- 0x641a6403, 0x8d0c0520, 0x0500012f, 0x641e6203,
- 0x0505f4d6, 0x641e6403, 0x6426641c, 0x6402621c,
- 0x0501f129, 0x4933c857, 0x05e1f8ac, 0x050202a2,
- 0x5934000a, 0x82000500, 0x00010000, 0x82000580,
- 0x00010000, 0x05060a30, 0x05cc0f01, 0x0502029a,
- 0x59cc0001, 0x82000500, 0x00ffff00, 0x82000580,
- 0x00fffc00, 0x05020006, 0x59a80006, 0x8c00050e,
- 0x05000003, 0x8d0c0520, 0x05000035, 0x05e1f94d,
- 0x05020003, 0x60067800, 0x05ddfddd, 0x05e1f937,
- 0x05000004, 0x82000580, 0x00000703, 0x05020031,
- 0x59cc0206, 0x90003503, 0x05020033, 0x90003494,
- 0x05001031, 0x59a83073, 0x80183480, 0x0500102e,
- 0x5934300a, 0x84183516, 0x90000594, 0x05020002,
- 0x84183556, 0x481a680a, 0x59cc0406, 0x90000503,
- 0x05020025, 0x0501ffc6, 0x0502002a, 0x05e1f905,
- 0x05020006, 0x4c600000, 0x4178c000, 0x417a7800,
- 0x05cdfe6d, 0x5c00c000, 0x916c0583, 0x05020006,
- 0x60183000, 0x0505fc6d, 0x42000000, 0x00109879,
- 0x0505fe0b, 0x05ddfeda, 0x642a6403, 0x60803000,
- 0x59cc1a0a, 0x41780800, 0x41784000, 0x41783800,
- 0x8d0c0520, 0x050000e0, 0x05fdf799, 0x642e6403,
- 0x642e641c, 0x4a02621c, 0x00002c00, 0x0501f0da,
- 0x642e6403, 0x6426641c, 0x4a02621c, 0x00001e00,
- 0x0501f0d5, 0x42000000, 0x001097d4, 0x0505fdf4,
- 0x642e6403, 0x641e641c, 0x6402621c, 0x0501f0ce,
- 0x642e6403, 0x640e641c, 0x6402621c, 0x0501f0ca,
- 0x4933c857, 0x05e1f84d, 0x05020243, 0x0505f9d6,
- 0x05020241, 0x05cdfea6, 0x0502023f, 0x59cc0206,
- 0x90003503, 0x0502001b, 0x90003494, 0x05001019,
- 0x59a83073, 0x80180480, 0x05001016, 0x59cc0406,
- 0x90000503, 0x05020013, 0x59340400, 0x82000580,
- 0x00000707, 0x05000013, 0x417a7800, 0x4c600000,
- 0x4178c000, 0x05cdfe2c, 0x5c00c000, 0x60283000,
- 0x0505fc2e, 0x42000000, 0x00109876, 0x0505fdcc,
- 0x64326403, 0x41782800, 0x60843000, 0x05fdf7c5,
- 0x64366403, 0x641e641c, 0x6402621c, 0x0501f0a2,
- 0x64366403, 0x6426641c, 0x4a02621c, 0x00001e00,
- 0x0501f09d, 0x4933c857, 0x05e1f820, 0x05020216,
- 0x0505f9a9, 0x05020214, 0x05cdfe79, 0x05020212,
- 0x0501fa44, 0x0502000a, 0x493a6403, 0x0501fa4a,
- 0x05020003, 0x64ba6403, 0x05fdf75f, 0x64366403,
- 0x641e641c, 0x6402621c, 0x0501f08b, 0x64366403,
- 0x6426641c, 0x4a02621c, 0x00001e00, 0x0501f086,
- 0x4933c857, 0x05e1f809, 0x05fe0719, 0x59a8021b,
- 0x8c000500, 0x05020005, 0x8c000506, 0x05fe0714,
- 0x05e1fd54, 0x050001f8, 0x05e1f8a4, 0x05020026,
- 0x0501ff4e, 0x0502000a, 0x643a6403, 0x8d0c0520,
- 0x05000075, 0x61483000, 0x59cc4008, 0x59cc3809,
- 0x59cc180a, 0x59cc080b, 0x05fdf725, 0x4933c857,
- 0x600c3000, 0x0505fbf4, 0x4d3c0000, 0x417a7800,
- 0x0201f800, 0x0010b660, 0x5c027800, 0x42000000,
- 0x00109878, 0x0505fd86, 0x59340200, 0x84000558,
- 0x48026a00, 0x602c0800, 0x05ddfd38, 0x8d0c0520,
- 0x05000059, 0x601c3000, 0x0501f04e, 0x4933c857,
- 0x643e6403, 0x640e641c, 0x4a02621c, 0x00001e00,
- 0x0501f055, 0x59340400, 0x82000580, 0x00000703,
- 0x05fc07f7, 0x0501f032, 0x4933c857, 0x05ddffd3,
- 0x050201c9, 0x59a8021b, 0x8c000500, 0x05020005,
- 0x8c000506, 0x050201c4, 0x05e1fd1e, 0x050001c2,
- 0x05e1f865, 0x05020022, 0x0501ff2b, 0x05000ec5,
- 0x05020004, 0x64426403, 0x61403000, 0x05fdf6ee,
- 0x4d3c0000, 0x417a7800, 0x0201f800, 0x0010b660,
- 0x5c027800, 0x600c3000, 0x0505fbbf, 0x42000000,
- 0x00109878, 0x0505fd56, 0x59340200, 0x84000558,
- 0x48026a00, 0x05fdf7d2, 0x64466403, 0x640e641c,
- 0x4a02621c, 0x00001e00, 0x0501f02b, 0x4933c857,
- 0x05cdfe0b, 0x05040938, 0x050201a3, 0x0501f9d5,
- 0x05020007, 0x644a6403, 0x0501f023, 0x59340400,
- 0x82000580, 0x00000703, 0x05fc07f0, 0x83340580,
- 0x0010993e, 0x05000009, 0x4d3c0000, 0x417a7800,
- 0x60a68000, 0x0201f800, 0x0010b660, 0x5c027800,
- 0x605c3000, 0x0505fb9c, 0x42000000, 0x00109878,
- 0x0505fd33, 0x8d0c0520, 0x0500000b, 0x60183000,
- 0x60a68000, 0x4933c857, 0x64066403, 0x641e6203,
- 0x41782800, 0x0501f002, 0x611a8000, 0x0501ff5a,
- 0x0505f3ae, 0x4933c857, 0x64066403, 0x602c0800,
- 0x05ddfcda, 0x64066203, 0x05e9f486, 0x4933c857,
- 0x60240800, 0x05ddfcd5, 0x64166403, 0x05fdf7fa,
- 0x0505f909, 0x05020174, 0x05cdfdd9, 0x05020172,
- 0x0501f9a4, 0x05fe07d6, 0x64826403, 0x64066203,
- 0x05e9f478, 0x05cdfdd2, 0x0502016b, 0x648e6403,
- 0x64066203, 0x05e9f473, 0x0505f8fb, 0x05cc0dcc,
- 0x05020165, 0x0501f997, 0x05fe07c9, 0x59cc0807,
- 0x82040500, 0x00ffff00, 0x05020009, 0x59340212,
- 0x82000500, 0x0000ff00, 0x05000005, 0x59a8000f,
- 0x82000500, 0x000000ff, 0x0501f002, 0x59a8000f,
- 0x82040d00, 0x00ffffff, 0x80040580, 0x05020012,
- 0x59cc1408, 0x05fdf87f, 0x05000022, 0x591c0202,
- 0x82001580, 0x0000ffff, 0x05000004, 0x59cc1208,
- 0x80080580, 0x0502001b, 0x591c000a, 0x81340580,
- 0x05020018, 0x591c0407, 0x90000587, 0x05020015,
- 0x0501f022, 0x59cc1208, 0x82080580, 0x0000ffff,
- 0x0500000b, 0x05fdf86b, 0x0500000e, 0x59cc1408,
- 0x591c0202, 0x80080580, 0x0502001e, 0x591c000a,
- 0x81340580, 0x0502001b, 0x0501f00e, 0x59cc1408,
- 0x41780000, 0x0501fcd2, 0x05fe07f9, 0x0501f013,
- 0x649a6403, 0x4a02621c, 0x00001700, 0x59cc1208,
- 0x82081580, 0x0000ffff, 0x05fe07ab, 0x0501f00b,
- 0x591c0407, 0x90000587, 0x05fe07f6, 0x591c0403,
- 0x900005a4, 0x05020005, 0x4d300000, 0x411e6000,
- 0x0005f8e7, 0x5c026000, 0x64966403, 0x05fdf79e,
- 0x59cc1408, 0x41780000, 0x0501fcb9, 0x05fe07e9,
- 0x05fdf7fa, 0x4933c857, 0x4d3c0000, 0x60067800,
- 0x05ddfc63, 0x5c027800, 0x4c580000, 0x6008b000,
- 0x91a81c02, 0x91cc140b, 0x05f5fb89, 0x5c00b000,
- 0x05000003, 0x64c66403, 0x05fdf78b, 0x0005f8e7,
- 0x6008b000, 0x91a81c00, 0x91cc140d, 0x05f5fb80,
- 0x0502000c, 0x05e5ffd5, 0x0500000a, 0x59300407,
- 0x90000581, 0x05020007, 0x59300403, 0x90000582,
- 0x05020004, 0x5930000a, 0x81340580, 0x000408e7,
- 0x05e1fc50, 0x05020009, 0x05e1fc64, 0x05020005,
- 0x64075014, 0x6006d800, 0x05e1fbc8, 0x0501f003,
- 0x60040000, 0x05e1fc1b, 0x1c01f000, 0x05cdfd50,
- 0x050200e9, 0x0501f91b, 0x05fe074d, 0x493a6403,
- 0x0501f96a, 0x05020003, 0x64ae6403, 0x05fdf766,
- 0x64b26403, 0x05fdf764, 0x4933c857, 0x05e9f88d,
- 0x050200dd, 0x05cdfd42, 0x050200db, 0x05ddff6d,
- 0x05fe073f, 0x59cc0408, 0x4802641b, 0x59cc0208,
- 0x4802621b, 0x59cc0807, 0x59340002, 0x82000500,
- 0x00ffffff, 0x80040580, 0x05000011, 0x59a8000f,
- 0x80040580, 0x0502001e, 0x59cc1408, 0x05f9fff9,
- 0x05000020, 0x831c0580, 0xffffffff, 0x05000005,
- 0x0501ffab, 0x0500001b, 0x0505fab2, 0x05000019,
- 0x491e6020, 0x64da6403, 0x0501f0bb, 0x59cc1208,
- 0x82080580, 0x0000ffff, 0x05000008, 0x05f9ffe9,
- 0x05000010, 0x591c0202, 0x59cc0c08, 0x80040580,
- 0x0502000c, 0x05fdf7ec, 0x59cc1408, 0x60040000,
- 0x0501fc53, 0x05000007, 0x05fdf7e7, 0x4803c856,
- 0x6426641c, 0x4a02621c, 0x00001500, 0x0501f005,
- 0x4803c856, 0x640e641c, 0x4a02621c, 0x00001700,
- 0x64de6403, 0x0501f0a0, 0x4933c857, 0x05e9f851,
- 0x050200a1, 0x05cdfd06, 0x0502009f, 0x05ddff31,
- 0x05fe0703, 0x05ddfe89, 0x05000045, 0x59cc0407,
- 0x4802641b, 0x59cc1207, 0x480a621b, 0x82080580,
- 0x0000ffff, 0x05000004, 0x05f9ffc2, 0x05000036,
- 0x0501f008, 0x59cc1407, 0x60040000, 0x0501fc30,
- 0x05000031, 0x831c0580, 0xffffffff, 0x0500002e,
- 0x59cc0c07, 0x591c0202, 0x80040580, 0x0502002a,
- 0x0505fa74, 0x05000028, 0x591c0416, 0x8c000516,
- 0x0502002f, 0x4d300000, 0x411e6000, 0x05f9f8ff,
- 0x5c026000, 0x641e3a03, 0x59cc0c09, 0x82040d00,
- 0x0000ff00, 0x840409c0, 0x90040581, 0x05000009,
- 0x90040585, 0x0500000b, 0x90040587, 0x05020011,
- 0x42000000, 0x00109865, 0x0505fc15, 0x0501f008,
- 0x42000000, 0x00109864, 0x0505fc11, 0x0501f007,
- 0x42000000, 0x00109863, 0x0505fc0d, 0x591c0009,
- 0x80000540, 0x05000003, 0x59cc2808, 0x0501f75a,
- 0x4803c856, 0x6426641c, 0x4a02621c, 0x00002a00,
- 0x0501f005, 0x4803c856, 0x640e641c, 0x4a02621c,
- 0x00000300, 0x64ee6403, 0x0501f053, 0x4803c856,
- 0x642e641c, 0x6402621c, 0x05fdf7fb, 0x4803c856,
- 0x641e641c, 0x6402621c, 0x05fdf7f7, 0x59cc0001,
- 0x82000580, 0x00fffffe, 0x0502004b, 0x4c080000,
- 0x05ddfe52, 0x0500001f, 0x05ddfe29, 0x0505f832,
- 0x0502001a, 0x59a8021b, 0x90000543, 0x4803521b,
- 0x59a80018, 0x800000d0, 0x59a8080f, 0x82040d00,
- 0x000000ff, 0x80041540, 0x480b500f, 0x600c0800,
- 0x05e9fc6e, 0x497b501d, 0x8d0c0520, 0x05000006,
- 0x4a032804, 0x000007d0, 0x599c0017, 0x8c00050a,
- 0x05020008, 0x0005f8e7, 0x0201f800, 0x0010b84b,
- 0x5c001000, 0x1c01f000, 0x0505f831, 0x05fdf7fd,
- 0x5c001000, 0x0005f0e7, 0x0501f829, 0x05000026,
- 0x653a6403, 0x64066203, 0x05e9f32e, 0x05ddfec6,
- 0x05fe0687, 0x653e6403, 0x497a601e, 0x59cc0a06,
- 0x82040d00, 0x000000ff, 0x800409c0, 0x05fc069e,
- 0x90040581, 0x05020005, 0x59cc0808, 0x59a80005,
- 0x80040580, 0x05fc0698, 0x90040582, 0x05020006,
- 0x91cc140b, 0x6008b000, 0x91341c06, 0x05f5fa8c,
- 0x05fc0691, 0x6406601e, 0x05fdf68f, 0x05ddfeae,
- 0x05fe066f, 0x65426403, 0x59cc0207, 0x4802601e,
- 0x05fdf689, 0x64066203, 0x42000800, 0x80000040,
- 0x0005f07c, 0x4803c857, 0x0005f0e7, 0x4d2c0000,
- 0x4c500000, 0x4c580000, 0x4c540000, 0x59a80073,
- 0x82000c80, 0x00000841, 0x05021021, 0x05c1ff92,
- 0x0500001f, 0x492e6009, 0x59a80073, 0x48025802,
- 0x90000403, 0x80000104, 0x91cca406, 0x90000c8a,
- 0x05001010, 0x642a5811, 0x6028b000, 0x912c0406,
- 0x4000a800, 0x0505fc58, 0x412c7000, 0x800409c0,
- 0x05020003, 0x49787001, 0x0501f00b, 0x05c1ff7e,
- 0x0500000b, 0x492c7001, 0x40040000, 0x05fdf7f0,
- 0x48025811, 0x4000b000, 0x912c0406, 0x4000a800,
- 0x0505fc49, 0x90000541, 0x0501f005, 0x497b5073,
- 0x59325809, 0x05c1ff9c, 0x80000580, 0x5c00a800,
- 0x5c00b000, 0x5c00a000, 0x5c025800, 0x1c01f000,
- 0x4d340000, 0x5932680a, 0x59343400, 0x4933c857,
- 0x4937c857, 0x481bc857, 0x05ddfe6b, 0x5c026800,
- 0x1c01f000, 0x4933c857, 0x4c600000, 0x4d3c0000,
- 0x4d440000, 0x4d340000, 0x0501f84d, 0x0502003b,
- 0x59cc0207, 0x82000d00, 0x0000ff00, 0x900411c0,
- 0x59cc000a, 0x82000500, 0x00ffffff, 0x80081540,
- 0x480a601e, 0x8c040518, 0x05000010, 0x60203000,
- 0x0505f9b0, 0x42000000, 0x00109877, 0x0505fb54,
- 0x8d0c0520, 0x05000005, 0x60082800, 0x60903000,
- 0x611a8000, 0x0501fd80, 0x6004c000, 0x417a7800,
- 0x05cdfba5, 0x0501f023, 0x8c04051a, 0x0500001f,
- 0x59cc000a, 0x05e5fd89, 0x00000ac4, 0x0502001b,
- 0x5930000a, 0x4c000000, 0x8d0c0520, 0x0500000b,
- 0x59340c03, 0x59341802, 0x820c1d00, 0x00ffffff,
- 0x58002403, 0x60102800, 0x60903000, 0x611a8000,
- 0x41301000, 0x0501fd76, 0x4936600a, 0x60243000,
- 0x0505f992, 0x42000000, 0x00109877, 0x0505fb30,
- 0x417a7800, 0x4178c000, 0x05cdfb87, 0x5c000000,
- 0x4802600a, 0x0501f003, 0x90000541, 0x0501f002,
- 0x80000580, 0x5c026800, 0x5c028800, 0x5c027800,
- 0x5c00c000, 0x1c01f000, 0x4933c857, 0x59cc0206,
- 0x90000490, 0x05021004, 0x6402621c, 0x90000541,
- 0x0501f002, 0x80000580, 0x1c01f000, 0x4933c857,
- 0x6402621c, 0x59cc0407, 0x82000500, 0x0000ff00,
- 0x82000580, 0x00000800, 0x0502000d, 0x59cc0206,
- 0x59a80873, 0x80040480, 0x0500100a, 0x59cc0006,
- 0x82000500, 0x00ff0000, 0x82000d80, 0x00140000,
- 0x05000003, 0x82000d80, 0x00100000, 0x1c01f000,
- 0x42000000, 0x0010986c, 0x0505fb01, 0x90000541,
- 0x05fdf7fb, 0x59300403, 0xb0003497, 0x05c21b83,
- 0x91383593, 0x05020006, 0x4803c857, 0x4c000000,
- 0x0505fa27, 0x5c000000, 0x0c01f00f, 0x4933c857,
- 0x493bc857, 0x913835a7, 0x05000003, 0x91383594,
- 0x05c20b76, 0x493bc857, 0x4937c857, 0x0505fa1a,
- 0x05ddfd27, 0x601c0800, 0x05ddfaa0, 0x05e9fab2,
- 0x05edf7d5, 0x00107ed9, 0x00107edf, 0x00107ed9,
- 0x00107ed9, 0x00107ed9, 0x00107edf, 0x00107ee8,
- 0x00107f5a, 0x00107f26, 0x00107f5a, 0x00107f35,
- 0x00107f5a, 0x00107f3a, 0x00107f5a, 0x00107f3d,
- 0x00107f5a, 0x00107f3d, 0x00107f5a, 0x00107f5a,
- 0x00107ed9, 0x00107ed9, 0x00107ed9, 0x00107ed9,
- 0x00107ed9, 0x00107ed9, 0x00107ed9, 0x00107ed9,
- 0x00107ed9, 0x00107ed9, 0x00107ed9, 0x00107edf,
- 0x00107ed9, 0x00107f5a, 0x00107ed9, 0x00107ed9,
- 0x00107f5a, 0x00107ed9, 0x00107f5a, 0x00107f5a,
- 0x00107ed9, 0x00107ed9, 0x00107ed9, 0x00107ed9,
- 0x00107f5a, 0x00107f5a, 0x00107ed9, 0x00107f5a,
- 0x00107f5a, 0x00107ed9, 0x00107ee3, 0x00107ed9,
- 0x00107ed9, 0x00107ed9, 0x00107ed9, 0x00107f3f,
- 0x00107f5a, 0x00107ed9, 0x00107ed9, 0x00107f40,
- 0x00107f5a, 0x00107ed9, 0x00107ed9, 0x00107ed9,
- 0x00107ed9, 0x00107ed9, 0x00107ed9, 0x00107ed9,
- 0x00107ed9, 0x00107ed9, 0x00107eda, 0x00107ed9,
- 0x00107ed9, 0x00107ed9, 0x00107ed9, 0x00107eda,
- 0x00107ed9, 0x00107ed9, 0x00107ed9, 0x00107eda,
- 0x00107eda, 0x00107eda, 0x00107ed9, 0x00107ed9,
- 0x00107ed9, 0x00107ed9, 0x00107ed9, 0x00107eda,
- 0x00107ed9, 0x00107ed9, 0x00107ed9, 0x00107ed9,
- 0x00107ed9, 0x00107ed9, 0x00107ed9, 0x00107ed9,
- 0x00107ed9, 0x05c1fb0d, 0x4d2c0000, 0x59325809,
- 0x05c1fea5, 0x5c025800, 0x0005f0e7, 0x59a8002a,
- 0x48026006, 0x640a6203, 0x1c01f000, 0x4d3c0000,
- 0x417a7800, 0x05ddfa26, 0x5c027800, 0x0501f073,
- 0x05ddfd7e, 0x05000071, 0x59a8021b, 0x8c000508,
- 0x0500000e, 0x5932680a, 0x4c580000, 0x6008b000,
- 0x91a81c02, 0x91341406, 0x05f5f945, 0x80000540,
- 0x5c00b000, 0x05020065, 0x59340200, 0x8400051a,
- 0x48026a00, 0x0501f022, 0x599c0017, 0x8c00050a,
- 0x05020007, 0x4d3c0000, 0x417a7800, 0x05ddfa0c,
- 0x5c027800, 0x601c0800, 0x05ddfa14, 0x59340212,
- 0x82000500, 0x0000ff00, 0x05020009, 0x83440d80,
- 0x000007fe, 0x05020051, 0x4d300000, 0x02000800,
- 0x0010b6ea, 0x5c026000, 0x0501f04c, 0x599c0017,
- 0x8c00050a, 0x05020049, 0x599c0019, 0x8c00050e,
- 0x05020046, 0x416c0000, 0x90000582, 0x05020004,
- 0x59a80016, 0x80000000, 0x48035016, 0x600c0800,
- 0x05ddf9fa, 0x64066407, 0x64066203, 0x640a6403,
- 0x05e9f9a4, 0x4ce80000, 0x6005d000, 0x05e5ff05,
- 0x5c01d000, 0x1c01f000, 0x59340200, 0x8400051a,
- 0x48026a00, 0x05ddfd34, 0x05000030, 0x60100800,
- 0x05ddf9ea, 0x0505f8b0, 0x0502002c, 0x60140800,
- 0x05ddf9e6, 0x64066407, 0x64066203, 0x640e6403,
- 0x05e9f190, 0x05ddfd31, 0x05020024, 0x60180800,
- 0x0501f823, 0x0501f021, 0x60100800, 0x05ddf9db,
- 0x05fdf7ae, 0x05ddfc5e, 0x0501f01c, 0x0501f01b,
- 0x59300820, 0x4807c857, 0x800409c0, 0x05000017,
- 0x5804001e, 0x81300580, 0x05020014, 0x4978081e,
- 0x58041416, 0x8c080516, 0x05000010, 0x8c080514,
- 0x0500000e, 0x84081516, 0x48080c16, 0x58065809,
- 0x812e59c0, 0x05000009, 0x492fc857, 0x4d300000,
- 0x40066000, 0x641e6203, 0x417a7800, 0x0005f843,
- 0x5c026000, 0x0501f001, 0x0005f0e7, 0x4933c857,
- 0x4807c857, 0x05ddf9b9, 0x4d3c0000, 0x417a7800,
- 0x05ddf9ab, 0x5c027800, 0x5934000a, 0x84000520,
- 0x4802680a, 0x05ddf436, 0x59340400, 0x4803c857,
- 0x80000110, 0x9000348c, 0x05c21a7c, 0x91383595,
- 0x05020002, 0x0c01f004, 0x91383596, 0x05c20a77,
- 0x0c01f00d, 0x001064e5, 0x001064e5, 0x001064e5,
- 0x001064e5, 0x001064e5, 0x001064e5, 0x00107faa,
- 0x00107f89, 0x001064e5, 0x001064e5, 0x001064e5,
- 0x001064e5, 0x001064e5, 0x001064e5, 0x001064e5,
- 0x001064e5, 0x001064e5, 0x001064e5, 0x00107faa,
- 0x00107faf, 0x001064e5, 0x001064e5, 0x001064e5,
- 0x001064e5, 0x4933c857, 0x599c0017, 0x8c00050a,
- 0x05020014, 0x813669c0, 0x05000012, 0x59340212,
- 0x82000500, 0x0000ff00, 0x0500000e, 0x599c0019,
- 0x8c00050e, 0x0502000b, 0x4d3c0000, 0x417a7800,
- 0x05ddf973, 0x5c027800, 0x600c0800, 0x05ddf97b,
- 0x64066407, 0x64066203, 0x640a6403, 0x05e9f125,
- 0x59cc0001, 0x59340802, 0x80040580, 0x82000500,
- 0x00ffffff, 0x000600e7, 0x59345002, 0x05d9ff63,
- 0x482a6802, 0x0005f0e7, 0x4933c857, 0x59303403,
- 0x9018359e, 0x000400e7, 0x1c01f000, 0x4933c857,
- 0x05f1ffc5, 0x000600e7, 0x64066203, 0x64066403,
- 0x05e9f110, 0x493bc857, 0xb1380591, 0x05020007,
- 0x05e9fd4d, 0x05ee06fd, 0x59300203, 0x90000582,
- 0x0500004b, 0x05c1fa29, 0x913805a7, 0x0500000c,
- 0xb1380588, 0x05000004, 0x91380594, 0x05000008,
- 0x05c20a22, 0x05e9fd40, 0x05ee06f0, 0x59300203,
- 0x90000584, 0x000401be, 0x05c1fa1c, 0x4933c857,
- 0x59300403, 0xb0000c84, 0x05c21a18, 0xb0000480,
- 0x05c01a16, 0x40027000, 0x4803c857, 0x0c01f001,
- 0x00107fd8, 0x00107fd9, 0x00107fd9, 0x00107fef,
- 0x05c1fa0e, 0x05e9f950, 0x59325809, 0x812e59c0,
- 0x05000012, 0x832c0500, 0x00ff0000, 0x0500000f,
- 0x640a6203, 0x5932680a, 0x59340200, 0x8c00050e,
- 0x0502000a, 0x60128000, 0x0501fb97, 0x497a6009,
- 0x59300006, 0x80000540, 0x05020003, 0x59a8002b,
- 0x48026006, 0x641e6203, 0x1c01f000, 0x05e9f93a,
- 0x05f9f98a, 0x05ec065c, 0x59325809, 0x05c1fd85,
- 0x05edf659, 0x05c1f9f1, 0x59325809, 0x592c040b,
- 0x8c000502, 0x05000004, 0x641e6203, 0x610e7000,
- 0x0005f105, 0x64126203, 0x1c01f000, 0x0501fd53,
- 0x000401bc, 0x1c01f000, 0x64066203, 0x65066403,
- 0x42027800, 0x80002042, 0x0005f07c, 0xb1380591,
- 0x05000004, 0xb1380581, 0x05c209dc, 0x1c01f000,
- 0x0005f853, 0x0501fd7c, 0x0005f0e7, 0xb1380492,
- 0x05c219d6, 0xb1380489, 0x05c019d4, 0x0c01f001,
- 0x0010801e, 0x00108040, 0x0010801d, 0x0010801d,
- 0x0010801d, 0x0010801d, 0x00108040, 0x0010801d,
- 0x0010805d, 0x05c1f9c9, 0x59325809, 0x592c040b,
- 0x8c00051e, 0x05000010, 0x82000d00, 0x000000c0,
- 0x82040d80, 0x00000080, 0x05000011, 0x59300804,
- 0x8c040518, 0x0502000e, 0x59300416, 0x8c000516,
- 0x05000003, 0x641e6203, 0x0501f011, 0x61067000,
- 0x0005f1da, 0x641e6203, 0x497a6006, 0x59300416,
- 0x8c000516, 0x0502000a, 0x0005f053, 0x59325809,
- 0x592c0c0b, 0x8c04051a, 0x05020003, 0x0005f853,
- 0x0005f0e7, 0x0501fd15, 0x05fc07fd, 0x1c01f000,
- 0x05e9f8cc, 0x59325809, 0x5932680a, 0x59340200,
- 0x8c00050e, 0x0500000d, 0x592c040b, 0x82000500,
- 0x000000c0, 0x82000580, 0x00000080, 0x05000005,
- 0x592c0010, 0x59301817, 0x800c1c80, 0x480e6017,
- 0x640a6203, 0x0501f00b, 0x60128000, 0x0501fb2a,
- 0x59300006, 0x80000540, 0x05020004, 0x59a8002b,
- 0x800000c2, 0x48026006, 0x497a6009, 0x641e6203,
- 0x1c01f000, 0x4933c857, 0x05e9fca7, 0x05c20987,
- 0x59300203, 0x90000582, 0x05fc07a5, 0x05c1f983,
- 0x641e6203, 0x497a6006, 0x0005f053, 0x641e6203,
- 0x497a6006, 0x0005f04e, 0x59300416, 0x8c00051c,
- 0x000601c9, 0x59325809, 0x592c2010, 0x40080000,
- 0x80102480, 0x59300017, 0x80102400, 0x48126017,
- 0x0005f1c9, 0x8c04050e, 0x05020007, 0x641a6203,
- 0x0501f818, 0x59300021, 0x80000540, 0x05c609ac,
- 0x0005f04e, 0x640a6203, 0x1c01f000, 0x60040800,
- 0x05c5f9a7, 0x90040581, 0x000401ce, 0x05fdf7e4,
- 0x59300416, 0x8c00051c, 0x05000004, 0x05c1ffc3,
- 0x000401c3, 0x1c01f000, 0x59300013, 0x80000540,
- 0x05020003, 0x05c1ffbd, 0x000401c3, 0x1c01f000,
- 0x492fc857, 0x480bc857, 0x8c08053e, 0x05000005,
- 0x80081080, 0x80081000, 0x60240800, 0x0501f002,
- 0x60540800, 0x480a580c, 0x1c01f000, 0x91380593,
- 0x05000003, 0x91380594, 0x05c20948, 0x59300416,
- 0x8c000516, 0x05c00945, 0x1c01f000, 0x05c1f943,
- 0x59300009, 0x80000540, 0x05c20940, 0x1c01f000,
- 0x59300416, 0x8c000516, 0x05c0093c, 0x1c01f000,
- 0x64126203, 0x493a6403, 0x42000800, 0x80002001,
- 0x0005f07c, 0x640e6203, 0x493a6403, 0x0001f96f,
- 0x59325809, 0x592c040b, 0x8c00051e, 0x05000011,
- 0x82000500, 0x000000c0, 0x82000580, 0x00000080,
- 0x0500000f, 0x59300416, 0x8c000512, 0x05020009,
- 0x8c000510, 0x05020007, 0x592c040d, 0x80000540,
- 0x05020004, 0x82080d40, 0x80003065, 0x0005f072,
- 0x82080d40, 0x80002065, 0x0005f072, 0x82080d40,
- 0x80002042, 0x0005f072, 0x4933c857, 0x493bc857,
- 0xb1380484, 0x05c21915, 0xb1380481, 0x05c01913,
- 0x0c01f001, 0x001080d8, 0x001080e6, 0x001080f8,
- 0x59325809, 0x592c040b, 0x8c00051e, 0x05000019,
- 0x82001d00, 0x000000c0, 0x820c1d80, 0x000000c0,
- 0x05000014, 0x64066203, 0x493a6403, 0x42000800,
- 0x80002042, 0x0005f07c, 0x59325809, 0x592c040b,
- 0x8c00051e, 0x0500000b, 0x82001d00, 0x000000c0,
- 0x820c1d80, 0x000000c0, 0x05000006, 0x64066203,
- 0x493a6403, 0x42000800, 0x80002001, 0x0005f07c,
- 0x497a6009, 0x497a6006, 0x60128000, 0x0501f286,
- 0x59325809, 0x592c040b, 0x8c00051e, 0x05fc07f9,
- 0x82001d00, 0x000000c0, 0x820c1d80, 0x000000c0,
- 0x05fc07f4, 0x640e6203, 0x493a6403, 0x0001f96f,
- 0x82080d40, 0x80002065, 0x0005f072, 0x4933c857,
- 0x493bc857, 0x83380580, 0x00000085, 0x05000005,
- 0x83380580, 0x00000088, 0x05000007, 0x05c1f8d7,
- 0x64266203, 0x493a6403, 0x42000800, 0x80000040,
- 0x0005f07c, 0x83300580, 0x0010cc6c, 0x05c208cf,
- 0x4d1c0000, 0x813669c0, 0x05000003, 0x0501fc32,
- 0x0502003d, 0x59cc1404, 0x41780000, 0x0501f83c,
- 0x05000014, 0x59cc0204, 0x82001580, 0x0000ffff,
- 0x05000004, 0x591c1402, 0x80080580, 0x0502000d,
- 0x591c0407, 0x9000051f, 0x90002586, 0x05000005,
- 0x90002584, 0x05000021, 0x90002591, 0x05020005,
- 0x497a3a05, 0x61502000, 0x05edfe2b, 0x0501f026,
- 0x8d0c0520, 0x05000004, 0x42023800, 0xffffffff,
- 0x05fdf7f9, 0x813669c0, 0x05020007, 0x59cc0001,
- 0x05e5fa66, 0x0502001c, 0x05ddf80b, 0x0502001a,
- 0x4936600a, 0x4a026403, 0x00000087, 0x59cc1204,
- 0x82081580, 0x0000ffff, 0x05020003, 0x4a026403,
- 0x00000086, 0x4d2c0000, 0x0501feb7, 0x05ddfda1,
- 0x5c025800, 0x0501f00c, 0x591c0403, 0x900005b8,
- 0x05fc07e1, 0x591c0203, 0x90000587, 0x05fe07e1,
- 0x4d300000, 0x411e6000, 0x05edfcf7, 0x5c026000,
- 0x05fdf7dc, 0x5c023800, 0x1c01f000, 0x4933c857,
- 0x480bc857, 0x4c5c0000, 0x4000b800, 0x42002800,
- 0x0010ccb4, 0x41300000, 0x80140580, 0x05000019,
- 0x58140203, 0x90000580, 0x05000016, 0x58140202,
- 0x80080580, 0x05020013, 0x58141c07, 0x900c0585,
- 0x05000010, 0x8c5c0500, 0x05000003, 0x900c0587,
- 0x0500000c, 0x5930200a, 0x5814000a, 0x800001c0,
- 0x0500000d, 0x82001d80, 0x0010993e, 0x0500000a,
- 0x801021c0, 0x05000003, 0x80100580, 0x05000011,
- 0x90142c24, 0x41540000, 0x80140480, 0x0502101d,
- 0x05fdf7e1, 0x58140020, 0x801021c0, 0x05000005,
- 0x58102002, 0x82102500, 0x00ffffff, 0x05fdf7f3,
- 0x8c5c0500, 0x05fe07f3, 0x59302020, 0x05fdf7ef,
- 0x40163800, 0x8c5c0500, 0x05000007, 0x4c080000,
- 0x4c140000, 0x0501fe17, 0x5c002800, 0x5c001000,
- 0x05fc07e8, 0x591c000a, 0x800001c0, 0x05020003,
- 0x5930000a, 0x4802380a, 0x81300540, 0x0501f009,
- 0x8c5c0500, 0x05000007, 0x40080800, 0x42023800,
- 0xffffffff, 0x05ddfd54, 0x05fc07f3, 0x80000580,
- 0x5c00b800, 0x1c01f000, 0x4933c857, 0x83300580,
- 0x0010cc48, 0x0502002d, 0x64026203, 0x91380593,
- 0x05020022, 0x59300403, 0x82000580, 0x00000092,
- 0x05c20836, 0x59a80063, 0x59325809, 0x812e59c0,
- 0x05000005, 0x812c0580, 0x05c20830, 0x592c0000,
- 0x497a5800, 0x800001c0, 0x05000004, 0x48035063,
- 0x05edfc18, 0x0501f003, 0x497b5063, 0x497b5064,
- 0x812e59c0, 0x05000014, 0x592c0205, 0xb0000595,
- 0x05c003b4, 0x91380593, 0x05020003, 0x64025a07,
- 0x0001f32c, 0x64c65a07, 0x64125812, 0x4a025813,
- 0x000000ff, 0x0001f32c, 0x913805a7, 0x05000003,
- 0x91380594, 0x05c20815, 0x493bc857, 0x05e5ff56,
- 0x05fdf7d9, 0x1c01f000, 0x4933c857, 0x91380593,
- 0x0502000c, 0x59300403, 0x4803c857, 0x82000c80,
- 0x00000085, 0x05c01809, 0x82000c80, 0x00000093,
- 0x05c21806, 0x82000480, 0x00000085, 0x0c01f010,
- 0x913805a7, 0x05000003, 0x91380594, 0x05ee04cf,
- 0x493bc857, 0x05e5ff40, 0x59325809, 0x812e59c0,
- 0x05ec0461, 0x64c65a07, 0x64125812, 0x4a025813,
- 0x000000ff, 0x0001fb2c, 0x05edf45b, 0x00108201,
- 0x00108205, 0x00108205, 0x00108201, 0x00108201,
- 0x00108201, 0x00108201, 0x00108201, 0x00108201,
- 0x00108201, 0x00108201, 0x00108201, 0x00108201,
- 0x00108202, 0x05bdffe5, 0x59325809, 0x64025a07,
- 0x0001fb2c, 0x0005f0e7, 0x4933c857, 0x42000000,
- 0x00109888, 0x0501ff56, 0x0501fb7f, 0x497a6205,
- 0x602e8000, 0x0501f805, 0x641a6407, 0x641e6203,
- 0x497a6006, 0x1c01f000, 0x4933c857, 0x4943c857,
- 0x59300407, 0x90000587, 0x05020002, 0x1c01f000,
- 0x05e5ffa7, 0x4df00000, 0x05f5ff60, 0x0500000a,
- 0x59300809, 0x58040000, 0x80001540, 0x05000006,
- 0x49780800, 0x4d2c0000, 0x400a5800, 0x0501f95a,
- 0x5c025800, 0x05f5fd21, 0x90000c8e, 0x05be1fbf,
- 0x0c01f001, 0x00108249, 0x0010824c, 0x00108237,
- 0x00108258, 0x00108266, 0x00108237, 0x00108237,
- 0x00108237, 0x00108237, 0x00108237, 0x00108237,
- 0x00108237, 0x00108237, 0x00108237, 0x4d400000,
- 0x59300021, 0x80000540, 0x05000004, 0x41400800,
- 0x05c1ffeb, 0x40068000, 0x4d2c0000, 0x59325809,
- 0x05f5ff3a, 0x0502093c, 0x4c5c0000, 0x5930b80a,
- 0x05edfc09, 0x485e600a, 0x5c00b800, 0x5c025800,
- 0x5c028000, 0x5c03e000, 0x05e40761, 0x1c01f000,
- 0x598c000b, 0x81300580, 0x05020003, 0x05e9fa0d,
- 0x05020012, 0x0201f800, 0x0010ba3e, 0x80c40040,
- 0x05fc07e3, 0x05e5fe99, 0x0500000c, 0x05bdff8f,
- 0x05f5fce0, 0x05020003, 0x05e9f9cd, 0x05020007,
- 0x0201f800, 0x0010b8cb, 0x80c40040, 0x05fc07d8,
- 0x05e5fe8e, 0x05be0f85, 0x59300203, 0x90000c8e,
- 0x05be1f82, 0x0c01f7c4, 0x05c5f8ab, 0x05fdf7d0,
- 0x4933c857, 0x4d440000, 0x4d340000, 0x59cc3800,
- 0x821c3d00, 0x00ffffff, 0x59cc0007, 0x4c000000,
- 0x59cc0001, 0x82000500, 0x00ffffff, 0x82000d80,
- 0x00fffffe, 0x5c000000, 0x05020005, 0x801c0d80,
- 0x05020045, 0x42000000, 0x00fffffe, 0x05e5f927,
- 0x00000ac4, 0x05020040, 0x5930000a, 0x4c000000,
- 0x8d0c0520, 0x05000011, 0x81342d80, 0x05000002,
- 0x60102800, 0x58002403, 0x59340c03, 0x59341802,
- 0x820c1d00, 0x00ffffff, 0x60143000, 0x59cc4008,
- 0x59cc3809, 0x9c2041c0, 0x9c1c39c0, 0x611a8000,
- 0x41301000, 0x0501f90e, 0x4936600a, 0x83440d80,
- 0x000007fe, 0x0502000f, 0x60683000, 0x0501fd2e,
- 0x42000000, 0x00109875, 0x0501fec5, 0x4d3c0000,
- 0x4d400000, 0x60a68000, 0x602a7804, 0x0201f800,
- 0x0010b5e0, 0x5c028000, 0x5c027800, 0x0501f00e,
- 0x602c3000, 0x0501fd20, 0x42000000, 0x00109875,
- 0x0501feb7, 0x4d3c0000, 0x4d400000, 0x60a68000,
- 0x417a7800, 0x0201f800, 0x0010b660, 0x5c028000,
- 0x5c027800, 0x5c000000, 0x4802600a, 0x59cc0007,
- 0x83440d80, 0x000007fe, 0x05020005, 0x42000000,
- 0x00fffffe, 0x4a026c00, 0x00000707, 0x48026802,
- 0x80000580, 0x5c026800, 0x5c028800, 0x1c01f000,
- 0x4933c857, 0x4c040000, 0x59a80073, 0xb00005b4,
- 0x05020040, 0x59cc0a08, 0x82040480, 0x00000100,
- 0x05001033, 0x59cc0c08, 0x82040500, 0x00008000,
- 0x05000035, 0x59a80013, 0x80000540, 0x05020009,
- 0x5930100a, 0x58080212, 0x82000500, 0x0000ff00,
- 0x05000004, 0x82040500, 0x00000800, 0x0500002a,
- 0x59cc0c09, 0x80040840, 0x05001024, 0x59a80a1b,
- 0x8c040506, 0x05000004, 0x59cc0c0f, 0x8c04051e,
- 0x05020012, 0x59cc0a17, 0x800409c0, 0x05020012,
- 0x59cc0a18, 0x82040480, 0x00000100, 0x05001014,
- 0x59cc0c18, 0x800409c0, 0x0502000e, 0x59cc0c19,
- 0x80040840, 0x05001011, 0x59cc0c1a, 0x80040840,
- 0x05001011, 0x0501f017, 0x4a02621c, 0x00000100,
- 0x0501f012, 0x4a02621c, 0x00000300, 0x0501f00f,
- 0x4a02621c, 0x00000500, 0x0501f00c, 0x4a02621c,
- 0x00000700, 0x0501f009, 0x4a02621c, 0x00000900,
- 0x0501f006, 0x4a02621c, 0x00000f00, 0x0501f003,
- 0x4a02621c, 0x00002d00, 0x90000541, 0x0501f002,
- 0x80000580, 0x5c000800, 0x1c01f000, 0x59cc0407,
- 0x4803c857, 0x82000580, 0x00000800, 0x05000002,
- 0x6402621c, 0x1c01f000, 0x4933c857, 0x4c580000,
- 0x59cc000c, 0x59340802, 0x82040d00, 0x00ffffff,
- 0x80040580, 0x0502000a, 0x91cc1408, 0x6008b000,
- 0x91341c06, 0x05f1fd1a, 0x05020005, 0x91cc140a,
- 0x6008b000, 0x91341c08, 0x05f1fd15, 0x5c00b000,
- 0x1c01f000, 0x4933c857, 0x4c580000, 0x91cc140b,
- 0x6008b000, 0x91341c06, 0x05f1fd0d, 0x05020008,
- 0x91cc140d, 0x6008b000, 0x91341c08, 0x05f1fd08,
- 0x05000014, 0x4933c856, 0x4933c856, 0x4933c857,
- 0x59340009, 0x4803c857, 0x5934000e, 0x4803c857,
- 0x59340008, 0x4803c857, 0x5934000d, 0x4803c857,
- 0x59340007, 0x4803c857, 0x5934000c, 0x4803c857,
- 0x59340006, 0x4803c857, 0x5934000b, 0x4803c857,
- 0x5c00b000, 0x1c01f000, 0x4933c857, 0x813261c0,
- 0x05000025, 0x83300d80, 0x0010cc6c, 0x05000022,
- 0x8d3c0506, 0x05020020, 0x59300c07, 0x90040581,
- 0x05000008, 0x90040582, 0x0502001b, 0x5930021f,
- 0x90000581, 0x05020018, 0x59300c18, 0x0501f002,
- 0x59300c03, 0x900405b9, 0x05000003, 0x900405b5,
- 0x05020011, 0x4d300000, 0x4d1c0000, 0x59326020,
- 0x4933c857, 0x05f9f990, 0x05bc0e84, 0x591c001e,
- 0x497a381e, 0x591c0c16, 0x84040d02, 0x48063c16,
- 0x5c023800, 0x5c026000, 0x81300580, 0x05be0e7b,
- 0x497a6020, 0x1c01f000, 0x5c000000, 0x4c000000,
- 0x4803c857, 0x4d3c0000, 0x60067800, 0x05d9fd98,
- 0x5c027800, 0x4c580000, 0x6008b000, 0x91a81c02,
- 0x91cc140b, 0x05f1fcbe, 0x5c00b000, 0x80000540,
- 0x1c01f000, 0x492fc857, 0x4943c857, 0x59a8000c,
- 0x812c0480, 0x0500100f, 0x59a8000a, 0x812c0480,
- 0x0502100c, 0x592c0000, 0x80005d40, 0x05000007,
- 0x497a5800, 0x49425a07, 0x4c2c0000, 0x0001fb2c,
- 0x5c025800, 0x05fdf7f8, 0x49425a07, 0x0001f32c,
- 0x1c01f000, 0x61fc21ff, 0x5930100a, 0x800811c0,
- 0x05000002, 0x58082403, 0x41301000, 0x0501f008,
- 0x40682800, 0x406c3000, 0x41781000, 0x41442000,
- 0x0501f003, 0x41781000, 0x61fc21ff, 0x5c000000,
- 0x4c000000, 0x4803c857, 0x480bc857, 0x4813c857,
- 0x492fc857, 0x4943c857, 0x4d2c0000, 0x4c040000,
- 0x4c080000, 0x4c0c0000, 0x4c100000, 0x4c140000,
- 0x4c180000, 0x4c1c0000, 0x4c200000, 0x05c1f9b9,
- 0x05bc0e36, 0x5c004000, 0x5c003800, 0x5c003000,
- 0x5c002800, 0x5c002000, 0x5c001800, 0x5c001000,
- 0x5c000800, 0x4a025805, 0x0000010d, 0x800811c0,
- 0x05000019, 0x914005a9, 0x05020013, 0x90180582,
- 0x05000009, 0x90180583, 0x05000007, 0x90180588,
- 0x05000005, 0x90180586, 0x05000006, 0x90180589,
- 0x05020009, 0x4a02580a, 0xffffffff, 0x0501f007,
- 0x5808280a, 0x58140002, 0x82000500, 0x00ffffff,
- 0x48025813, 0x480a580a, 0x58080202, 0x48025c14,
- 0x0501f005, 0x4a02580a, 0xffffffff, 0x4a025c14,
- 0x0000ffff, 0xb1400586, 0x05000002, 0x41782800,
- 0x480e580d, 0x4806580e, 0x4822580f, 0x481e5810,
- 0x48165a08, 0x481a5c09, 0x49425a09, 0x48125a07,
- 0x82100580, 0x0000ffff, 0x0500000c, 0x4d440000,
- 0x4d340000, 0x40128800, 0x0001fac4, 0x05be0dfb,
- 0x59340002, 0x82000500, 0x00ffffff, 0x48025813,
- 0x5c026800, 0x5c028800, 0x497a5800, 0x497a5c05,
- 0x0501fb29, 0x5c025800, 0x1c01f000, 0x5c000000,
- 0x4c000000, 0x4803c857, 0x480bc857, 0x480fc857,
- 0x4813c857, 0x4817c857, 0x4d2c0000, 0x4c080000,
- 0x4c0c0000, 0x4c100000, 0x4c140000, 0x05c1f965,
- 0x05bc0de2, 0x5c002800, 0x5c002000, 0x5c001800,
- 0x5c001000, 0x05011000, 0x912c0405, 0x4803c840,
- 0x6443c842, 0x40000000, 0x05fd17ff, 0x4a025805,
- 0x0000010d, 0x65265a09, 0x480a5a0b, 0x480e5c0b,
- 0x48125a0c, 0x48165c0c, 0x82080580, 0x00008014,
- 0x05020050, 0x820c0580, 0x0000ffff, 0x0502004d,
- 0x90100586, 0x0502004b, 0x59a8000f, 0x05ddfcf5,
- 0x05000009, 0x82000d00, 0x00ffff00, 0x05020006,
- 0x82000c00, 0x00101a23, 0x50040800, 0x80040910,
- 0x48065a0d, 0x82000d00, 0x0000ffff, 0x48065c0d,
- 0x80000120, 0x48025a0e, 0x59a8021b, 0x82001500,
- 0x00002100, 0x480a5a0f, 0x8c000502, 0x05000016,
- 0x8c000506, 0x05000006, 0x90000d0a, 0x90040d8a,
- 0x05020003, 0x64065c0e, 0x0501f018, 0x8c00050a,
- 0x05000006, 0x90000d22, 0x90040da2, 0x05020003,
- 0x640e5c0e, 0x0501f011, 0x8c000508, 0x05000006,
- 0x90000d12, 0x90040d92, 0x05020003, 0x640a5c0e,
- 0x0501f00a, 0x05ddfccb, 0x05020003, 0x64125c0e,
- 0x0501f006, 0x8c000506, 0x05000003, 0x64165c0e,
- 0x0501f002, 0x64025c0e, 0x59a8002a, 0x48025c0f,
- 0x59a8002b, 0x48025a10, 0x59c40801, 0x82040d00,
- 0x00018000, 0x90040580, 0x05020003, 0x64025c10,
- 0x0501f00c, 0x82040580, 0x00008000, 0x05020003,
- 0x64065c10, 0x0501f007, 0x82040580, 0x00010000,
- 0x05020003, 0x640e5c10, 0x0501f002, 0x64125c10,
- 0x0501fab5, 0x5c025800, 0x1c01f000, 0x0501f805,
- 0x60058800, 0x05000002, 0x60018800, 0x1c01f000,
- 0x5930080a, 0x800409c0, 0x05000004, 0x58040403,
- 0x81440580, 0x1c01f000, 0x90000541, 0x05fdf7fe,
- 0x4933c857, 0x4c040000, 0x59300403, 0x90000d9e,
- 0x05020012, 0x800000d0, 0x59300a18, 0x82040d00,
- 0x000000ff, 0x80040540, 0x4803c857, 0x48026418,
- 0x4a026403, 0x00000085, 0x64266203, 0x64166407,
- 0x6412621f, 0x59a8002b, 0x48026006, 0x42000800,
- 0x80000040, 0x0005f87c, 0x5c000800, 0x1c01f000,
- 0x4933c857, 0x40000000, 0x40000000, 0x1c01f000,
- 0x59300416, 0x4933c857, 0x4803c857, 0x8c000518,
- 0x05000006, 0x8c000512, 0x05f6069f, 0x0501f8ee,
- 0x0005f853, 0x0005f8e7, 0x1c01f000, 0x591c0407,
- 0x4803c857, 0x90000c89, 0x0502100b, 0x0c01f001,
- 0x001084ad, 0x001084ad, 0x001084ad, 0x001084af,
- 0x001084ad, 0x001084af, 0x001084af, 0x001084ad,
- 0x001084af, 0x80000580, 0x1c01f000, 0x90000541,
- 0x1c01f000, 0x591c0407, 0x9000051f, 0x90000586,
- 0x0500000a, 0x4803c857, 0x64ee6403, 0x6426641c,
- 0x4a02621c, 0x00002a00, 0x64066203, 0x42000800,
- 0x80000040, 0x0005f07c, 0x4803c856, 0x4c040000,
- 0x4c140000, 0x4d300000, 0x411e6000, 0x0501f8c6,
- 0x497a6205, 0x59300416, 0x4803c857, 0x82000500,
- 0xffffadff, 0x48026416, 0x497a6405, 0x5c026000,
- 0x05c1f89c, 0x05bc0d19, 0x5c002800, 0x5c000800,
- 0x4a025805, 0x0000010d, 0x497a5800, 0x497a5c05,
- 0x65165a09, 0x491e580a, 0x59300402, 0x48025c08,
- 0x5930041b, 0x48025c0c, 0x591c0416, 0x84000556,
- 0x48023c16, 0x591c180a, 0x580c0403, 0x48025a07,
- 0x580c0002, 0x82000500, 0x00ffffff, 0x48025813,
- 0x59cc0404, 0x48025c14, 0x497a5a08, 0x4816580b,
- 0x48065a0c, 0x0501fa34, 0x493a6403, 0x4d400000,
- 0x61168000, 0x591c0202, 0x4c000000, 0x4d300000,
- 0x411e6000, 0x05fdfd21, 0x5c026000, 0x5c000000,
- 0x48023a02, 0x5c028000, 0x491e6020, 0x4932381e,
- 0x641a3c07, 0x641e3a03, 0x497a3806, 0x497a3a05,
- 0x1c01f000, 0x4933c857, 0x91380593, 0x0502000a,
- 0x59300403, 0x4803c857, 0x82000d80, 0x00000085,
- 0x05000020, 0x82000d80, 0x0000008b, 0x0500001d,
- 0x05bdfcde, 0x913805a7, 0x0502000a, 0x05e5fc1e,
- 0x4d2c0000, 0x4d400000, 0x59325809, 0x60128000,
- 0x05fdfe6d, 0x5c028000, 0x5c025800, 0x1c01f000,
- 0x91380594, 0x05fc07f6, 0x83380580, 0x00000089,
- 0x05000004, 0x83380580, 0x0000008a, 0x05ee019b,
- 0x05e5ffe9, 0x05ee0199, 0x59300a03, 0x9004058a,
- 0x05000006, 0x9004058c, 0x05000004, 0x05bdfcc3,
- 0x642a6203, 0x1c01f000, 0x83380480, 0x00000093,
- 0x0502100b, 0x83380480, 0x00000085, 0x05001008,
- 0x83380580, 0x00000089, 0x05000008, 0x83380580,
- 0x0000008a, 0x0500001a, 0x05bdfcb4, 0x493bc857,
- 0x4933c857, 0x05edf181, 0x4933c857, 0x4c340000,
- 0x41306800, 0x05edf94a, 0x0500000d, 0x64066203,
- 0x647a6403, 0x59cc0c07, 0x4806641b, 0x59cc0a07,
- 0x4806621b, 0x5834080a, 0x4806600a, 0x64126407,
- 0x42000800, 0x80000040, 0x0005f87c, 0x40366000,
- 0x0005f8e7, 0x5c006800, 0x1c01f000, 0x4933c857,
- 0x0005f0e7, 0x5930080a, 0x58040200, 0x8c00051a,
- 0x05be0d54, 0x1c01f000, 0x05d9fe5a, 0x05000019,
- 0x640a6203, 0x59300416, 0x84000558, 0x48026416,
- 0x8c000512, 0x05000004, 0x59a8002c, 0x48026205,
- 0x0501f006, 0x59a8082c, 0x59a8002a, 0x80040400,
- 0x9000041e, 0x48026205, 0x5930000a, 0x90000c11,
- 0x50040000, 0x80000540, 0x05000003, 0x90000c00,
- 0x05fdf7fc, 0x45300800, 0x497a6000, 0x90000541,
- 0x1c01f000, 0x82100500, 0xfffffeef, 0x05020017,
- 0x4d2c0000, 0x4937c857, 0x59340811, 0x91341411,
- 0x800409c0, 0x0500000c, 0x40040000, 0x81300580,
- 0x05000004, 0x90041400, 0x58040800, 0x05fdf7f9,
- 0x59300800, 0x497a6000, 0x44041000, 0x0005f853,
- 0x0501f002, 0x4933c857, 0x5c025800, 0x492e6009,
- 0x0005f853, 0x0005f0e7, 0x492fc857, 0x641a5a07,
- 0x0001f32c, 0x4c340000, 0x5930000a, 0x800001c0,
- 0x0500000f, 0x90006c11, 0x50340000, 0x80000540,
- 0x05000009, 0x81300580, 0x05000004, 0x50340000,
- 0x90006c00, 0x05fdf7f9, 0x59300000, 0x44006800,
- 0x497a6000, 0x5c006800, 0x1c01f000, 0x59300c07,
- 0x90040585, 0x05fc07fc, 0x90040591, 0x05fc07fa,
- 0x90040586, 0x05fc07f8, 0x90040581, 0x05fc07f6,
- 0x05bdfc42, 0x4933c857, 0x4c080000, 0x4c0c0000,
- 0x4c580000, 0x59a81018, 0x59cc1807, 0x820c1d00,
- 0x00ffffff, 0x800c0110, 0x80083580, 0x0502000c,
- 0x91cc1408, 0x6008b000, 0x5930000a, 0x90001c06,
- 0x05f1fa83, 0x05020006, 0x91cc140a, 0x6008b000,
- 0x5930000a, 0x90001c08, 0x05f1fa7d, 0x5c00b000,
- 0x5c001800, 0x5c001000, 0x1c01f000, 0x4933c856,
- 0x493a6403, 0x05d9f8cc, 0x0201f000, 0x0010b84b,
- 0x4933c857, 0x492fc857, 0x5930080a, 0x58040200,
- 0x8c00051e, 0x05000004, 0x592c0209, 0x84000558,
- 0x48025a09, 0x1c01f000, 0x59e0180f, 0x599c0413,
- 0x800c1000, 0x80080580, 0x05020002, 0x41781000,
- 0x59e00010, 0x59e00810, 0x80040d80, 0x05fe07fd,
- 0x80080580, 0x05000009, 0x4c080000, 0x599c0814,
- 0x599c1015, 0x800c00cc, 0x80040c00, 0x90081440,
- 0x5c001800, 0x90000541, 0x4803c857, 0x1c01f000,
- 0x59300203, 0x4933c857, 0x4937c857, 0x493bc857,
- 0x4803c857, 0x9000348e, 0x05be1bfc, 0x0c01f001,
- 0x001085fa, 0x001086d8, 0x001085fa, 0x001085fa,
- 0x001085fa, 0x001085fa, 0x001085fa, 0x0010865f,
- 0x001085fb, 0x001085fa, 0x001085fa, 0x001085fa,
- 0x001085fa, 0x001085fa, 0x05bdfbec, 0xb138058c,
- 0x05be0bea, 0x05d9fdc5, 0x0502001d, 0x59a80a1b,
- 0x90040509, 0x90000588, 0x05000019, 0x8c040512,
- 0x05000029, 0x59cc0806, 0x82040d00, 0xff000000,
- 0x82040580, 0x03000000, 0x0500001d, 0x82040580,
- 0x50000000, 0x05000004, 0x82040580, 0x52000000,
- 0x000600e7, 0x83340580, 0x0010993e, 0x05000006,
- 0x4d3c0000, 0x417a7800, 0x0201f800, 0x0010b660,
- 0x5c027800, 0x64066403, 0x0501f010, 0x59cc0806,
- 0x82040d00, 0xff000000, 0x82040580, 0x03000000,
- 0x05000007, 0x82040580, 0x50000000, 0x05000004,
- 0x82040580, 0x52000000, 0x000600e7, 0x64266403,
- 0x6426641c, 0x6402621c, 0x64126407, 0x64066203,
- 0x05e5f298, 0x8d0c0520, 0x05000020, 0x0501fc5b,
- 0x0502001e, 0x59cc0806, 0x4807c857, 0x82040d00,
- 0xff000000, 0x82040580, 0x03000000, 0x05000013,
- 0x82040580, 0x20000000, 0x05000010, 0x82040580,
- 0x21000000, 0x0500000d, 0x82040580, 0x24000000,
- 0x0500000a, 0x82040580, 0x50000000, 0x05000007,
- 0x82040580, 0x52000000, 0x05000004, 0x82040580,
- 0x05000000, 0x05020007, 0x9c0431c0, 0x611a8000,
- 0x60042800, 0x05fdfd44, 0x0501f8da, 0x05bc0b97,
- 0x61442000, 0x05edf90c, 0x59cc0000, 0x82000500,
- 0x00ffffff, 0x82000580, 0x00ffffff, 0x05000004,
- 0x641e6203, 0x493a6403, 0x1c01f000, 0x59325819,
- 0x812e59c0, 0x05be0f24, 0x0005f0e7, 0x4d2c0000,
- 0x4c580000, 0x4c500000, 0x4c540000, 0x41385000,
- 0xb1380594, 0x05be0b81, 0x59325809, 0x592c0c0c,
- 0x82040d00, 0x0000e000, 0x82040580, 0x00002000,
- 0x05020059, 0x59300819, 0x800409c0, 0x05000010,
- 0x58041405, 0x41cca800, 0x9004a406, 0x90080490,
- 0x05021004, 0x4008b000, 0x0501fbb3, 0x0501f008,
- 0x40001000, 0x603cb000, 0x0501fbaf, 0x58040801,
- 0x800409c0, 0x05fe07f5, 0x05bdfb68, 0x83340580,
- 0x0010993e, 0x05000044, 0x59344c00, 0x592c0c0a,
- 0x4807c857, 0x4827c857, 0x82040d00, 0x000000ff,
- 0x90040583, 0x0500001d, 0x90040585, 0x05000020,
- 0x900405a0, 0x05000024, 0xb0040592, 0x0500002e,
- 0xb0040590, 0x0500002e, 0x900405a1, 0x05000003,
- 0x900405a4, 0x05020030, 0x82240500, 0x0000ff00,
- 0x82000580, 0x00000700, 0x05000005, 0x60240800,
- 0x05d9fa7a, 0x60305000, 0x0501f027, 0x64c65a07,
- 0x6426580e, 0x59340400, 0x4802580f, 0x0001fb2c,
- 0x05e9ffa9, 0x0501f02e, 0x05d9fb2e, 0x600c0800,
- 0x05d9fa6e, 0x60205000, 0x0501f01b, 0x59cc0007,
- 0x05e1fe9e, 0x05020018, 0x4a026c00, 0x00000707,
- 0x0501f015, 0x82240500, 0x0000ff00, 0x82000580,
- 0x00000700, 0x05fc07ea, 0x82240500, 0x000000ff,
- 0x90000589, 0x05fc07e6, 0x05d9fb75, 0x60285000,
- 0x0501f009, 0x60385000, 0x0501f002, 0x60405000,
- 0x82240500, 0x0000ff00, 0x82000580, 0x00000700,
- 0x05fc07db, 0x482a6403, 0x64066203, 0x592c000e,
- 0x48026013, 0x497a6015, 0x59a8002b, 0x48026006,
- 0x417a7800, 0x05e5f9f7, 0x59325819, 0x812e59c0,
- 0x05000003, 0x05bdfeb0, 0x497a6019, 0x5c00a800,
- 0x5c00a000, 0x5c00b000, 0x5c025800, 0x1c01f000,
- 0x4d2c0000, 0x59325809, 0x91380593, 0x0502002b,
- 0x492fc857, 0x59300c03, 0xb0040594, 0x05000023,
- 0x90040590, 0x0500001e, 0x9004058e, 0x0500001c,
- 0x59341400, 0x82081d00, 0x0000ff00, 0x82081500,
- 0x000000ff, 0x90040588, 0x0500000d, 0x9004058c,
- 0x0500000d, 0x9004058a, 0x05be0af8, 0x820c0580,
- 0x00000700, 0x05000011, 0x90080589, 0x0500000f,
- 0x60180800, 0x05d9fa21, 0x0501f00c, 0x600c0000,
- 0x0501f002, 0x60240000, 0x80080580, 0x05020007,
- 0x60100800, 0x05d9fa19, 0x0501f004, 0x59340200,
- 0x8400051a, 0x48026a00, 0x64025a07, 0x0001fb2c,
- 0x0005f8e7, 0x0501f016, 0x913805a7, 0x05000009,
- 0x91380594, 0x05be0add, 0x492fc857, 0x05e5fa1e,
- 0x60c68000, 0x60100800, 0x61fc1001, 0x0501f006,
- 0x492fc857, 0x05e5fa18, 0x60c68000, 0x60100800,
- 0x60401000, 0x49425a07, 0x4806580e, 0x480a580f,
- 0x0001fb2c, 0x05d9ff2a, 0x05e9ff33, 0x5c025800,
- 0x1c01f000, 0x492fc857, 0x42007000, 0x00020a09,
- 0x58380806, 0x492c7006, 0x800409c0, 0x05020003,
- 0x492c7007, 0x0001f02b, 0x492c0800, 0x1c01f000,
- 0x4d2c0000, 0x4c580000, 0x4c500000, 0x4c540000,
- 0x4933c857, 0x4937c857, 0x59cc0806, 0x4807c857,
- 0x82040d00, 0xff000000, 0x82040580, 0x03000000,
- 0x0500000d, 0x82040580, 0x05000000, 0x0500000a,
- 0x82040580, 0x21000000, 0x05000027, 0x82040580,
- 0x24000000, 0x05000024, 0x82040580, 0x20000000,
- 0x05020025, 0x05bdfe27, 0x05000023, 0x492fc857,
- 0x492e6019, 0x59a8b073, 0x9058b41b, 0x8258b500,
- 0xfffffffc, 0x8058b104, 0x485a5c05, 0x412c7800,
- 0x41cca000, 0x90580490, 0x05021004, 0x912cac06,
- 0x0501fad9, 0x0501f010, 0x40580800, 0x603cb000,
- 0x912cac06, 0x0501fad4, 0x9004b48f, 0x05bdfe11,
- 0x05000004, 0x492c7801, 0x412c7800, 0x05fdf7f2,
- 0x59325819, 0x05bdfe24, 0x497a6019, 0x80000580,
- 0x0501f005, 0x59340200, 0x84000554, 0x48026a00,
- 0x90000541, 0x5c00a800, 0x5c00a000, 0x5c00b000,
- 0x5c025800, 0x1c01f000, 0x4933c857, 0x492fc857,
- 0x4d2c0000, 0x59300a03, 0x90040587, 0x0500002c,
- 0x90040581, 0x05be0a75, 0x05e5fa4d, 0x4df00000,
- 0x598c000b, 0x81300580, 0x05020014, 0x59300004,
- 0x8c000520, 0x05000004, 0x84000520, 0x48026004,
- 0x0501f014, 0x42001000, 0x001097b0, 0x50081000,
- 0x58080002, 0x82000580, 0x00000100, 0x05000005,
- 0x5808000b, 0x81300580, 0x05be0a60, 0x0501f009,
- 0x05e5fcd4, 0x05020019, 0x59300004, 0x8c000520,
- 0x05000004, 0x84000520, 0x48026004, 0x0501f004,
- 0x0201f800, 0x0010ba3e, 0x80c40040, 0x5c03e000,
- 0x05e40a17, 0x05f5f9e5, 0x05bc0a50, 0x59325809,
- 0x64165a07, 0x0001fb2c, 0x05d9fea9, 0x59325819,
- 0x812e59c0, 0x05be0de4, 0x05e9feaf, 0x80000580,
- 0x5c025800, 0x1c01f000, 0x5c03e000, 0x05e40a08,
- 0x59300c07, 0x90040591, 0x05fc07c7, 0x05fdf7f9,
- 0x4c040000, 0x59340200, 0x4803c857, 0x8c00051c,
- 0x05000009, 0x59cc0805, 0x591c001b, 0x4803c857,
- 0x80040580, 0x05000004, 0x80000580, 0x4803c856,
- 0x0501f002, 0x90000541, 0x5c000800, 0x1c01f000,
- 0x4c000000, 0x4c0c0000, 0x4c100000, 0x61fc19ff,
- 0x60102000, 0x0501f010, 0x4c000000, 0x4c0c0000,
- 0x4c100000, 0x5930200a, 0x58101c03, 0x60102000,
- 0x0501f009, 0x4c000000, 0x4c0c0000, 0x4c100000,
- 0x5930200a, 0x801021c0, 0x05bc0a1c, 0x58101c03,
- 0x601c2000, 0x480fc857, 0x4813c857, 0x481bc857,
- 0x05d1fe5e, 0x5c002000, 0x5c001800, 0x5c000000,
- 0x1c01f000, 0x8d0c0520, 0x05000006, 0x4d400000,
- 0x850e1d44, 0x60aa8000, 0x05fdfbc3, 0x5c028000,
- 0x1c01f000, 0x59a8021b, 0x8c000508, 0x05000005,
- 0x599c0017, 0x8c00050a, 0x05020002, 0x1c01f000,
- 0x90000541, 0x1c01f000, 0x59300422, 0x84000540,
- 0x48026422, 0x1c01f000, 0x4c640000, 0x05f5fce1,
- 0x59300203, 0x90000588, 0x05020010, 0x60c8c800,
- 0x42000000, 0x20000000, 0x41300800, 0x05c1f87b,
- 0x0500000a, 0x59300203, 0x90000588, 0x05020007,
- 0x60780000, 0x80000040, 0x05fe07ff, 0x8064c840,
- 0x05fe07f4, 0x05bdf9e9, 0x05f5fcd9, 0x5c00c800,
- 0x1c01f000, 0x05bdfd67, 0x05bc09e4, 0x59340403,
- 0x49365803, 0x65565a05, 0x48025c07, 0x4a025c08,
- 0x00001000, 0x59340802, 0x82040d00, 0x00ffffff,
- 0x59300403, 0x82000580, 0x00000086, 0x42000000,
- 0x85000000, 0x05020003, 0x42000000, 0x84000000,
- 0x80040540, 0x4802580a, 0x59a8000f, 0x4802580b,
- 0x42000000, 0x00990000, 0x59300c07, 0x90040d85,
- 0x05000002, 0x8400052e, 0x4802580c, 0x497a580d,
- 0x59cc0004, 0x4802580e, 0x497a580f, 0x42000800,
- 0x00030300, 0x59300403, 0x82000580, 0x00000086,
- 0x05020006, 0x59cc0004, 0x48025811, 0x4a025812,
- 0x0000ffff, 0x41780800, 0x48065810, 0x1c01f000,
- 0x492fc857, 0x59a82863, 0x801429c0, 0x05000057,
- 0x4c5c0000, 0x4c600000, 0x4c640000, 0x4d2c0000,
- 0x4d300000, 0x42026000, 0x0010cc48, 0x592c0c07,
- 0x592c100a, 0x82081500, 0x00ffffff, 0x592c180b,
- 0x592c200e, 0x40165800, 0x4014c000, 0x4014c800,
- 0x592c0205, 0x82000580, 0x00000155, 0x05020037,
- 0x592c0407, 0x80040580, 0x05020034, 0x592c000a,
- 0x82000500, 0x00ffffff, 0x80080580, 0x0502002f,
- 0x592c000b, 0x82000500, 0x00ffffff, 0x800c0580,
- 0x0502002a, 0x592c000e, 0x80100580, 0x05020027,
- 0x4c040000, 0x4c080000, 0x4c0c0000, 0x4c100000,
- 0x40640000, 0x812c0580, 0x05020016, 0x59300203,
- 0x90000580, 0x0500000f, 0x59300009, 0x800001c0,
- 0x0500000c, 0x05e5f95a, 0x4df00000, 0x05e5f86c,
- 0x0201f800, 0x0010b9a8, 0x80c40040, 0x05020002,
- 0x64026203, 0x5c03e000, 0x05e4093d, 0x497a6009,
- 0x592cc800, 0x4064c000, 0x4064b800, 0x0501f003,
- 0x592cb800, 0x485cc000, 0x64165a07, 0x0001fb2c,
- 0x405e5800, 0x5c002000, 0x5c001800, 0x5c001000,
- 0x5c000800, 0x0501f003, 0x412cc000, 0x592e5800,
- 0x812e59c0, 0x05fe07c3, 0x48675063, 0x48635064,
- 0x05e9fd50, 0x5c026000, 0x5c025800, 0x5c00c800,
- 0x5c00c000, 0x5c00b800, 0x1c01f000, 0x602c0800,
- 0x0501f004, 0x60100800, 0x0501f002, 0x60040800,
- 0x4d2c0000, 0x59325809, 0x812e59c0, 0x0500000f,
- 0x592c0205, 0x82000500, 0x000000ff, 0x9000058e,
- 0x0502000a, 0x592c0000, 0x48026009, 0x497a5800,
- 0x48065a09, 0x05ddfff2, 0x05000003, 0x05fdfe7e,
- 0x0501f002, 0x0001fb2c, 0x5c025800, 0x1c01f000,
- 0x4817c857, 0x4c000000, 0x4c040000, 0x8c14052a,
- 0x05000004, 0x5988011e, 0x80000000, 0x4803111e,
- 0x8c14052e, 0x05000004, 0x5988011f, 0x80000000,
- 0x4803111f, 0x8c14052c, 0x05000013, 0x40140000,
- 0x82000500, 0x00070000, 0x82000d80, 0x00030000,
- 0x0500000d, 0x82000d80, 0x00040000, 0x0500000a,
- 0x82000d80, 0x00050000, 0x05000007, 0x59880005,
- 0x80000000, 0x48031005, 0x59880120, 0x80000000,
- 0x48031120, 0x5c000800, 0x5c000000, 0x1c01f000,
- 0x4817c857, 0x4c000000, 0x4c040000, 0x8c14052a,
- 0x05000004, 0x59880121, 0x80000000, 0x48031121,
- 0x8c14052e, 0x05000004, 0x59880122, 0x80000000,
- 0x48031122, 0x8c14052c, 0x05000013, 0x40140000,
- 0x82000500, 0x00070000, 0x82000d80, 0x00030000,
- 0x0500000d, 0x82000d80, 0x00040000, 0x0500000a,
- 0x82000d80, 0x00050000, 0x05000007, 0x59880005,
- 0x80000000, 0x48031005, 0x59880123, 0x80000000,
- 0x48031123, 0x5c000800, 0x5c000000, 0x1c01f000,
- 0x4807c857, 0x4c000000, 0x8c04052c, 0x05000004,
- 0x5988010c, 0x80000000, 0x4803110c, 0x8c04052a,
- 0x05000004, 0x5988010d, 0x80000000, 0x4803110d,
- 0x8c040528, 0x05000004, 0x5988010e, 0x80000000,
- 0x4803110e, 0x8c040526, 0x05000004, 0x5988010f,
- 0x80000000, 0x4803110f, 0x8c040524, 0x05000004,
- 0x59880110, 0x80000000, 0x48031110, 0x8c040522,
- 0x05000004, 0x59880111, 0x80000000, 0x48031111,
- 0x8c040520, 0x05000004, 0x59880112, 0x80000000,
- 0x48031112, 0x5c000000, 0x1c01f000, 0x4807c857,
- 0x4c000000, 0x59880113, 0x80000000, 0x48031113,
- 0x5c000000, 0x1c01f000, 0x4807c857, 0x4c000000,
- 0x8c04051c, 0x05000004, 0x59880114, 0x80000000,
- 0x48031114, 0x8c04051a, 0x05000004, 0x59880115,
- 0x80000000, 0x48031115, 0x5c000000, 0x1c01f000,
- 0x4807c857, 0x4c000000, 0x8c040518, 0x05000004,
- 0x59880116, 0x80000000, 0x48031116, 0x8c040516,
- 0x05000004, 0x59880117, 0x80000000, 0x48031117,
- 0x8c040514, 0x05000004, 0x59880118, 0x80000000,
- 0x48031118, 0x5c000000, 0x1c01f000, 0x4807c857,
- 0x4c000000, 0x8c040510, 0x05000004, 0x59880119,
- 0x80000000, 0x48031119, 0x8c04050c, 0x05000004,
- 0x5988011a, 0x80000000, 0x4803111a, 0x5c000000,
- 0x1c01f000, 0x4807c857, 0x4c000000, 0x8c040508,
- 0x05000004, 0x5988011b, 0x80000000, 0x4803111b,
- 0x8c040504, 0x05000004, 0x5988011c, 0x80000000,
- 0x4803111c, 0x5c000000, 0x1c01f000, 0x4807c856,
- 0x4c000000, 0x598800e5, 0x80000000, 0x480310e5,
- 0x5c000000, 0x1c01f000, 0x40680000, 0x5c036000,
- 0x4db00000, 0x49b3c857, 0x4c040000, 0x50000800,
- 0x80040800, 0x05001002, 0x44040000, 0x5c000800,
- 0x1c01f000, 0x480fc857, 0x4c000000, 0x900c0580,
- 0x05020004, 0x42000000, 0x0010983a, 0x0501f012,
- 0x820c0580, 0x00001001, 0x05020004, 0x42000000,
- 0x0010983b, 0x0501f00c, 0x820c0580, 0x00001002,
- 0x05020004, 0x42000000, 0x0010983c, 0x0501f006,
- 0x820c0c80, 0x0000201c, 0x05be1868, 0x900c051f,
- 0x0c01f804, 0x05fdffde, 0x5c000000, 0x1c01f000,
- 0x001089a0, 0x001089a3, 0x001089a6, 0x001089a9,
- 0x001089ac, 0x001089af, 0x001089b2, 0x001089b5,
- 0x001089b8, 0x001089bb, 0x001089be, 0x001089c1,
- 0x001089c4, 0x001089c7, 0x001089ca, 0x001089cd,
- 0x001089d0, 0x001089d3, 0x001089d6, 0x001089d9,
- 0x001089dc, 0x001089df, 0x001089e2, 0x001089e5,
- 0x001089e8, 0x001089eb, 0x001089ee, 0x001089f1,
- 0x42000000, 0x0010983d, 0x1c01f000, 0x42000000,
- 0x0010983e, 0x1c01f000, 0x42000000, 0x0010983f,
- 0x1c01f000, 0x42000000, 0x00109840, 0x1c01f000,
- 0x42000000, 0x00109841, 0x1c01f000, 0x42000000,
- 0x00109842, 0x1c01f000, 0x42000000, 0x00109843,
- 0x1c01f000, 0x42000000, 0x00109844, 0x1c01f000,
- 0x42000000, 0x00109845, 0x1c01f000, 0x42000000,
- 0x00109846, 0x1c01f000, 0x42000000, 0x00109847,
- 0x1c01f000, 0x42000000, 0x00109848, 0x1c01f000,
- 0x42000000, 0x00109849, 0x1c01f000, 0x42000000,
- 0x0010984a, 0x1c01f000, 0x42000000, 0x0010984b,
- 0x1c01f000, 0x42000000, 0x0010984c, 0x1c01f000,
- 0x42000000, 0x0010984d, 0x1c01f000, 0x42000000,
- 0x0010984e, 0x1c01f000, 0x42000000, 0x0010984f,
- 0x1c01f000, 0x42000000, 0x00109850, 0x1c01f000,
- 0x42000000, 0x00109851, 0x1c01f000, 0x42000000,
- 0x00109852, 0x1c01f000, 0x42000000, 0x00109853,
- 0x1c01f000, 0x42000000, 0x00109854, 0x1c01f000,
- 0x42000000, 0x00109855, 0x1c01f000, 0x42000000,
- 0x00109856, 0x1c01f000, 0x42000000, 0x00109857,
- 0x1c01f000, 0x42000000, 0x00109858, 0x1c01f000,
- 0x480fc857, 0x4c000000, 0x900c0581, 0x05020004,
- 0x42000000, 0x001097bd, 0x0501f00f, 0x900c0582,
- 0x05020004, 0x42000000, 0x001097be, 0x0501f00a,
- 0x900c0583, 0x05020004, 0x42000000, 0x001097bf,
- 0x0501f005, 0x900c0584, 0x05020004, 0x42000000,
- 0x001097c0, 0x05fdff56, 0x5c000000, 0x1c01f000,
- 0x4c000000, 0x59a8021b, 0x4803c857, 0x8c000502,
- 0x05000010, 0x8c000506, 0x05000004, 0x42000000,
- 0x001097c8, 0x0501f011, 0x8c00050a, 0x05000004,
- 0x42000000, 0x001097c7, 0x0501f00c, 0x8c000508,
- 0x05000004, 0x42000000, 0x001097ca, 0x0501f007,
- 0x05d9fef4, 0x05000006, 0x8c000506, 0x05020004,
- 0x42000000, 0x001097c9, 0x05fdff39, 0x5c000000,
- 0x1c01f000, 0x8058b1c0, 0x05b80fbc, 0x5450a800,
- 0x8050a000, 0x8054a800, 0x8058b040, 0x05fe07fc,
- 0x1c01f000, 0x8058b1c0, 0x05b80fb4, 0x4450a800,
- 0x8054a800, 0x8058b040, 0x05fe07fd, 0x1c01f000,
- 0x4813c857, 0x4817c857, 0x40140000, 0x80100480,
- 0x05ba1faa, 0x497bc841, 0x41787000, 0x42006800,
- 0x00140000, 0x59a80083, 0x8c000500, 0x05000003,
- 0x42006800, 0x0013a000, 0x4837c857, 0x8010048d,
- 0x05021005, 0x8014048d, 0x05001003, 0x40147000,
- 0x80342840, 0x61fc7801, 0x40100000, 0x80140480,
- 0x82006d00, 0xffffff00, 0x05020002, 0x40007800,
- 0x4813c840, 0x483fc842, 0x05011000, 0x40100000,
- 0x803c2400, 0x40100000, 0x80140580, 0x05fe07f3,
- 0x45782800, 0x803871c0, 0x05000005, 0x40382800,
- 0x41787000, 0x80102000, 0x05fdf7eb, 0x1c01f000,
- 0x8058b1c0, 0x05b80f81, 0x50500000, 0x9c0001c0,
- 0x4400a800, 0x8050a000, 0x8054a800, 0x8058b040,
- 0x05fe07fa, 0x1c01f000, 0x4c000000, 0x59a80007,
- 0x8c00051c, 0x5c000000, 0x1c01f000, 0x0501f805,
- 0x60058800, 0x05020002, 0x60018800, 0x1c01f000,
- 0x59a80007, 0x8c000518, 0x1c01f000, 0x61906800,
- 0x80346840, 0x05000006, 0x64070000, 0x40000000,
- 0x59807000, 0x8c380500, 0x05fc07fa, 0x1c01f000,
- 0x640f0000, 0x40000000, 0x59800000, 0x8c000500,
- 0x05fc07fc, 0x1c01f000, 0x59a80006, 0x8c000516,
- 0x1c01f000, 0x00000001, 0x00000002, 0x00000004,
- 0x00000008, 0x00000010, 0x00000020, 0x00000040,
- 0x00000080, 0x00000100, 0x00000200, 0x00000400,
- 0x00000800, 0x00001000, 0x00002000, 0x00004000,
- 0x00008000, 0x00010000, 0x00020000, 0x00040000,
- 0x00080000, 0x00100000, 0x00200000, 0x00400000,
- 0x00800000, 0x01000000, 0x02000000, 0x04000000,
- 0x08000000, 0x10000000, 0x20000000, 0x40000000,
- 0x80000000, 0x40000000, 0x600070e0, 0x60007820,
- 0x4a007016, 0x00010001, 0x58380016, 0x8c000500,
- 0x05fc07fc, 0x600c4000, 0x60003002, 0x64807808,
- 0x583c2808, 0x8c14053e, 0x05000004, 0x80183040,
- 0x05fe07fc, 0x0501f00d, 0x583c2808, 0x82140500,
- 0x20000400, 0x82000580, 0x00000400, 0x05020005,
- 0x82140500, 0x00000300, 0x90000580, 0x05000007,
- 0x80204040, 0x05fe07ee, 0x4a007016, 0x00010000,
- 0x90000541, 0x0501f040, 0x650c7808, 0x583c0009,
- 0x8c000500, 0x05000005, 0x60002000, 0x4a007016,
- 0x00010000, 0x0501f037, 0x65007808, 0x583c5809,
- 0x65047808, 0x583c6009, 0x65087808, 0x583c6809,
- 0x4a007016, 0x00010000, 0x82102d00, 0xf0000000,
- 0x90140580, 0x05000002, 0x0501f020, 0x60202800,
- 0x60003000, 0x803000c8, 0x40003800, 0x8030010a,
- 0x801c3d80, 0x40300000, 0x80180580, 0x80100400,
- 0x801c0400, 0x802c5c00, 0x803400c8, 0x40003800,
- 0x8034010a, 0x801c3d80, 0x40340000, 0x80180580,
- 0x801c0400, 0x80306400, 0x802c00c8, 0x40003800,
- 0x802c010a, 0x801c3d80, 0x402c0000, 0x80180580,
- 0x801c0400, 0x80346c00, 0x82183400, 0x9e3779b9,
- 0x80142840, 0x05fe07e4, 0x0502000b, 0x402c0000,
- 0x80040580, 0x05fe07c7, 0x40300000, 0x80080580,
- 0x05fe07c4, 0x40340000, 0x800c0580, 0x05fe07c1,
- 0x80000580, 0x1c01f000, 0x1c01f000, 0x42005000,
- 0x7ff4c000, 0x58280800, 0x58281001, 0x58281802,
- 0x58282003, 0x05fdff98, 0x05020807, 0x82101d00,
- 0x0fffffff, 0x480fc021, 0x900c01c0, 0x4803c022,
- 0x1c01f000, 0x497bc021, 0x497bc022, 0x4a03c020,
- 0x00004020, 0x4a03c011, 0x40200011, 0x6016d800,
- 0x05027011, 0x59e00020, 0x90000582, 0x0502000e,
- 0x05006000, 0x4203e000, 0x40000000, 0x59e00017,
- 0x60000800, 0x8c00050a, 0x05c20c53, 0x8d0c0530,
- 0x05c20c3f, 0x05c20c41, 0x6403c017, 0x4203e000,
- 0x30000001, 0x05bdf886, 0x05fdf7ff, 0x59a80886,
- 0x8c100502, 0x05000003, 0x84040d42, 0x0501f007,
- 0x8c100504, 0x05000003, 0x84040d44, 0x0501f003,
- 0x8c100500, 0x84040d40, 0x48075086, 0x1c01f000,
- 0x59a80086, 0x8c000502, 0x05000009, 0x4a035087,
- 0x0000008b, 0x4a035088, 0x0000008b, 0x4a035089,
- 0x0000008b, 0x6413508a, 0x0501f00c, 0x8c000504,
- 0x05000006, 0x65bf5087, 0x65bf5088, 0x65df5089,
- 0x6403508a, 0x0501f005, 0x64cf5087, 0x64cf5088,
- 0x64975089, 0x6403508a, 0x1c01f000, 0xf3199441,
- 0x00000000, 0x00000000, 0x0010d000, 0x00003c5e,
- 0x00000000, 0x00000000, 0x00020000, 0x00000a08,
- 0x916c0583, 0x01020180, 0x42000000, 0x001094a8,
- 0x50000000, 0x800001c0, 0x05020a0f, 0x0501f9cb,
- 0x0501fd37, 0x0501fb39, 0x59a80068, 0x80000540,
- 0x01020e7c, 0x0501ff5a, 0x05fdf7f2, 0x915c04a0,
- 0x0100158b, 0x416a5800, 0x592ed000, 0x497a5800,
- 0x497a5801, 0x815eb840, 0x812e59c0, 0x1c01f000,
- 0x42007000, 0x00020a09, 0x58380004, 0x49781000,
- 0x64001002, 0x48087004, 0x80000d40, 0x05020006,
- 0x48087005, 0x58380000, 0x80000540, 0x0500000a,
- 0x1c01f000, 0x48080800, 0x05fdf7fb, 0x42007000,
- 0x00020a09, 0x58380000, 0x80000540, 0x05000002,
- 0x1c01f000, 0x58380807, 0x800409c0, 0x010205f2,
- 0x58380005, 0x80006d40, 0x05020002, 0x1c01f000,
- 0x58340000, 0x48347001, 0x80000540, 0x05020002,
- 0x48007004, 0x48007005, 0x4a03b805, 0x30000002,
- 0x58340006, 0x59dc0806, 0x4803b800, 0x58340007,
- 0x4803b801, 0x58340805, 0x58341003, 0x58340001,
- 0x48047002, 0x48087003, 0x480bb803, 0x8c000500,
- 0x05020004, 0x64087000, 0x6407c824, 0x0501f004,
- 0x64047000, 0x6503c824, 0x0101f612, 0x58380802,
- 0x600011fe, 0x82040480, 0x0000ff00, 0x05021003,
- 0x40041000, 0x80000580, 0x48007002, 0x480bb802,
- 0x4a03b805, 0x10000002, 0x1c01f000, 0x59dc0806,
- 0x4a03b805, 0x20000000, 0x8c04053e, 0x05000009,
- 0x8c040508, 0x010209e6, 0x42007000, 0x00020a09,
- 0x58380000, 0x90001484, 0x0c001003, 0x0101f9e6,
- 0x1c01f000, 0x00020031, 0x00020071, 0x00020078,
- 0x00100ee7, 0x82040d00, 0x43200f80, 0x0102061f,
- 0x58380002, 0x80000540, 0x05000008, 0x0101f612,
- 0x82040d00, 0x43200f80, 0x0102061f, 0x58380002,
- 0x80000540, 0x05fe07d6, 0x58386001, 0x58300008,
- 0x4a006002, 0x00000100, 0x64007000, 0x80001540,
- 0x05fc07ad, 0x59dc0000, 0x48006006, 0x59dc0001,
- 0x48006007, 0x4030d000, 0x0809f800, 0x05fdf7a0,
- 0x59e00017, 0x8c00050c, 0x05020007, 0x59a81866,
- 0x800400c4, 0x800c1c00, 0x580c0003, 0x8c000500,
- 0x05000008, 0x59a80068, 0x4c000000, 0x0101fe6d,
- 0x5c000000, 0x80000540, 0x01020637, 0x1c01f000,
- 0x4d2c0000, 0x4c040000, 0x4c0c0000, 0x05fdff74,
- 0x5c001800, 0x5c000800, 0x05000010, 0x64025801,
- 0x64125805, 0x64065804, 0x900c0402, 0x48025803,
- 0x580c0000, 0x48025806, 0x580c0001, 0x48025807,
- 0x4a025808, 0x000200b4, 0x48065809, 0x412c1000,
- 0x5c025800, 0x05fdf76b, 0x5c025800, 0x0101f66d,
- 0x58300802, 0x82040580, 0x00000100, 0x0102062c,
- 0x4d2c0000, 0x40325800, 0x0101fd79, 0x5c025800,
- 0x0101f637, 0x59b800ea, 0x82000d00, 0xf2000038,
- 0x01020778, 0x8c000510, 0x01000777, 0x59ba60e0,
- 0x81300182, 0x0502103d, 0x05002024, 0x8532653e,
- 0x59300407, 0x90000583, 0x0502001e, 0x59300203,
- 0x90000584, 0x0502001b, 0x59325809, 0x59300004,
- 0x4a025a05, 0x00000103, 0x497a580a, 0x8c00053e,
- 0x05020011, 0x0501fa57, 0x5932680a, 0x0505f810,
- 0x5934000f, 0x8d0c0512, 0x05020005, 0x5934140b,
- 0x80081040, 0x05001002, 0x480a6c0b, 0x80000540,
- 0x050209f1, 0x59b800ea, 0x8c000510, 0x05fe07e0,
- 0x1c01f000, 0x0129fd05, 0x05fc07ef, 0x0101f770,
- 0x61567000, 0x0501f021, 0x83326500, 0x3fffffff,
- 0x59300407, 0x90000583, 0x05020012, 0x59325809,
- 0x5932680a, 0x4a025a05, 0x00000103, 0x497a580a,
- 0x0501fa38, 0x0501fff2, 0x5934000f, 0x8d0c0512,
- 0x05020005, 0x5934140b, 0x80081040, 0x05001002,
- 0x480a6c0b, 0x80000540, 0x050209d3, 0x05fdf7e2,
- 0x61527000, 0x0501f009, 0x83300500, 0x60000000,
- 0x05000011, 0x81326580, 0x8000013a, 0x82000400,
- 0x0010077c, 0x50027000, 0x59300c07, 0x90040582,
- 0x01000770, 0x59300004, 0x8c00053e, 0x05020003,
- 0x0501fff5, 0x05fdf7d0, 0x0129fd05, 0x05fc07fd,
- 0x0101f770, 0x83300500, 0x1f000000, 0x01000772,
- 0x81326580, 0x80000130, 0x90000c94, 0x010219e6,
- 0x1201f000, 0x00100780, 0x82000500, 0xf0000000,
- 0x82040d00, 0x0fffffff, 0x80040d40, 0x4807c857,
- 0x59b800ea, 0x8c000516, 0x0106004f, 0x480770e1,
- 0x1c01f000, 0x59325809, 0x412c7000, 0x58380a05,
- 0x9004050f, 0x82000c00, 0x00100cde, 0x50044000,
- 0x0c01f001, 0x00100a75, 0x00100a75, 0x00020141,
- 0x00100a75, 0x00100a75, 0x00100a75, 0x00100a75,
- 0x00100a75, 0x0002014f, 0x00100a76, 0x00100a75,
- 0x00100a75, 0x00100a75, 0x00100a75, 0x00100a75,
- 0x00100a75, 0x5838040b, 0x8c000500, 0x010009e6,
- 0x50200000, 0x80387c00, 0x583c1002, 0x583c2800,
- 0x583c2001, 0x58380a08, 0x58383010, 0x59303808,
- 0x5838000e, 0x48026014, 0x0501f00e, 0x5838020b,
- 0x8c000502, 0x01040275, 0x50200000, 0x80387c00,
- 0x583c2800, 0x583c2001, 0x583c1002, 0x592c0a08,
- 0x592c3010, 0x59303808, 0x497a6014, 0x497a6015,
- 0x48166010, 0x48126011, 0x480a6012, 0x481a6013,
- 0x80040840, 0x4806600f, 0x0106029d, 0x841c3d40,
- 0x481e6008, 0x1c01f000, 0x4d2c0000, 0x59325809,
- 0x592c0a05, 0x4807c857, 0x82040d00, 0x000000ff,
- 0x9004050f, 0x1201f000, 0x00100bb0, 0x41787800,
- 0x59325809, 0x592c0c0b, 0x8c040502, 0x010403e0,
- 0x592c000e, 0x592c1010, 0x592c0a05, 0x480a6013,
- 0x48026014, 0x48026015, 0x412c3000, 0x9004050f,
- 0x82000400, 0x00100cde, 0x50003800, 0x501c0000,
- 0x592c1a08, 0x4802600c, 0x481a600d, 0x481e600e,
- 0x480e600f, 0x843c7d4a, 0x403c1000, 0x1c01f000,
- 0x59e00004, 0x8c00050e, 0x05fe06d5, 0x1c01f000,
- 0x42001000, 0x00109cd1, 0x58080009, 0x80000540,
- 0x01060756, 0x4a001003, 0x00109cda, 0x4c080000,
- 0x0501f812, 0x5c001000, 0x48141009, 0x480c1006,
- 0x48101007, 0x64001001, 0x64101005, 0x64041004,
- 0x05fdf680, 0x58300802, 0x82040580, 0x00000100,
- 0x01060765, 0x82300580, 0x00109cd1, 0x01060760,
- 0x49786009, 0x1c01f000, 0x61901800, 0x800c1840,
- 0x05000006, 0x64070000, 0x40000000, 0x59800000,
- 0x8c000500, 0x05fc07fa, 0x010407b7, 0x600028f4,
- 0x58142024, 0x58141823, 0x58142825, 0x64030000,
- 0x1c01f000, 0x4c000000, 0x4df00000, 0x4203e000,
- 0xb0100000, 0x41f00000, 0x81fe1500, 0x8d080512,
- 0x010a0987, 0x8d08051c, 0x05020eca, 0x8d080518,
- 0x05020efd, 0x8d08051a, 0x05fe0efb, 0x83080500,
- 0x00000d00, 0x05020804, 0x5c03e000, 0x5c000000,
- 0x1801f000, 0x8d080516, 0x01060fd2, 0x8d080514,
- 0x05fe0fbc, 0x8d080508, 0x01060d6b, 0x8d080500,
- 0x05020e6d, 0x8d08050c, 0x010a088c, 0x8d08050a,
- 0x010606a2, 0x1c01f000, 0x42000000, 0x001094ae,
- 0x50000000, 0x8c000504, 0x05000014, 0x42000000,
- 0x001094ae, 0x50000000, 0x8c000502, 0x05020002,
- 0x1c01f000, 0x4df00000, 0x4203e000, 0x50000000,
- 0x42034000, 0x00109490, 0x59a0001e, 0x59a1d806,
- 0x84000502, 0x4803401e, 0x58ec0008, 0x0801f800,
- 0x5c03e000, 0x1c01f000, 0x05027002, 0x05026002,
- 0x1c01f000, 0x4df00000, 0x4203e000, 0x50000000,
- 0x59e00020, 0xb0000d85, 0x05000003, 0xb0000d84,
- 0x05020007, 0x4803c857, 0x42000800, 0x00020a09,
- 0x58040800, 0x90040d80, 0x05020019, 0x0101fd68,
- 0x05000017, 0x412dd800, 0x48efc857, 0x0115fe87,
- 0x42034000, 0x00109490, 0x49a1d80a, 0x48ef4006,
- 0x59a0001e, 0x84000544, 0x4803401e, 0x59e00020,
- 0x4803c857, 0x59e00021, 0x4803c857, 0x59e00022,
- 0x4803c857, 0x59e00023, 0x4803c857, 0x59e00024,
- 0x4803c857, 0x010dfb27, 0x010dfb3f, 0x5c03e000,
- 0x1c01f000, 0x4c5c0000, 0x4da00000, 0x4df00000,
- 0x4203e000, 0x50000000, 0x05006062, 0x42034000,
- 0x00109490, 0x59a01018, 0x59a01819, 0x800c19c0,
- 0x05020009, 0x59a0381c, 0x801c39c0, 0x010009e6,
- 0x49a3c857, 0x481fc857, 0x59a0041d, 0x801c3c00,
- 0x0501f00a, 0x59a0041a, 0x90000402, 0x4803441a,
- 0x90000c94, 0x05001003, 0x497b441a, 0x41780000,
- 0x59a03817, 0x801c3c00, 0x401cb800, 0x80081040,
- 0x480b4018, 0x581c0200, 0x4803c021, 0x581c0401,
- 0x4803c022, 0x581c0201, 0x4803c023, 0x581c0400,
- 0x4803c020, 0x900001c0, 0x90000552, 0x4803c011,
- 0x8d0c0530, 0x0500000f, 0x4c080000, 0x4c0c0000,
- 0x4c1c0000, 0x59e00017, 0x8c00050a, 0x05000004,
- 0x60000800, 0x05fdfe3f, 0x0501f003, 0x8c000500,
- 0x05fe0f3c, 0x5c003800, 0x5c001800, 0x5c001000,
- 0x6403c017, 0x4203e000, 0x30000001, 0x800c19c0,
- 0x05000007, 0x800c1840, 0x480f4019, 0x0502001b,
- 0x497b441a, 0x497b421a, 0x0501f018, 0x800811c0,
- 0x0502000a, 0x4d2c0000, 0x59a2581c, 0x0101fd78,
- 0x5c025800, 0x497b401c, 0x497b401b, 0x497b441d,
- 0x497b421d, 0x0501f00d, 0x59a0041d, 0x90000402,
- 0x90000c93, 0x4803441d, 0x05001008, 0x4d2c0000,
- 0x59a2581c, 0x592c3814, 0x481f401c, 0x497b441d,
- 0x0101fd78, 0x5c025800, 0x8d0c052a, 0x05000009,
- 0x60083800, 0x42000800, 0x25000000, 0x585c1800,
- 0x585c3001, 0x900c19c0, 0x901831c0, 0x0101faa9,
- 0x5c03e000, 0x5c034000, 0x5c00b800, 0x1c01f000,
- 0x910c0503, 0x011a075d, 0x59340400, 0x82000580,
- 0x00000606, 0x011a0737, 0x5934000d, 0x80027d40,
- 0x011a0766, 0x5934000f, 0x59341203, 0x80080540,
- 0x05020021, 0x8d0c0512, 0x05000010, 0x0501fe37,
- 0x05000017, 0x59a80087, 0x80000040, 0x05fe07ff,
- 0x492e6009, 0x4936600a, 0x58d400ea, 0x8c000516,
- 0x05fe07fe, 0x83300400, 0x20000000, 0x4801a8e1,
- 0x80000580, 0x1c01f000, 0x5934000b, 0x80001920,
- 0x82000500, 0x0000ffff, 0x800c0480, 0x0502100a,
- 0x800c1800, 0x480e6c0b, 0x05fdf7e9, 0x8d0c0512,
- 0x05020005, 0x59341c0b, 0x800c1840, 0x480e6c0b,
- 0x59341203, 0x0501f803, 0x80000580, 0x1c01f000,
- 0x800811c0, 0x05020002, 0x64066a03, 0x59340010,
- 0x492e6810, 0x80000d40, 0x05020008, 0x492e680f,
- 0x592c0407, 0x800000c2, 0x800018c4, 0x800c0400,
- 0x48025804, 0x1c01f000, 0x492c0800, 0x05fdf7f9,
- 0x83440c80, 0x00000800, 0x05021009, 0x83440400,
- 0x00108c00, 0x50000000, 0x80000540, 0x05000004,
- 0x40026800, 0x80000580, 0x1c01f000, 0x90000541,
- 0x1c01f000, 0x59340203, 0x80000540, 0x0502002b,
- 0x4d300000, 0x4d2c0000, 0x5934000f, 0x80025d40,
- 0x05000024, 0x0501fdf1, 0x05000021, 0x592c0000,
- 0x4802680f, 0x80000540, 0x05020002, 0x48026810,
- 0x592c2a05, 0x4936600a, 0x82142d00, 0x000000ff,
- 0x90140592, 0x0500001a, 0x492e6009, 0x8d0c0512,
- 0x05000010, 0x58d400ea, 0x8c000516, 0x05fe07fe,
- 0x83300400, 0x20000000, 0x4801a8e1, 0x8d0c0512,
- 0x05fe07e6, 0x5934000b, 0x80001120, 0x82000500,
- 0x0000ffff, 0x80080480, 0x05fc17e0, 0x0501f005,
- 0x80081000, 0x480a6c0b, 0x05fdf7ef, 0x64066a03,
- 0x5c025800, 0x5c026000, 0x1c01f000, 0x497a5800,
- 0x4932580a, 0x641a6407, 0x641e6203, 0x0501f802,
- 0x05fdf7eb, 0x592c020d, 0x48026202, 0x59a80082,
- 0x8c000510, 0x011e02df, 0x8d0c050e, 0x011e02dd,
- 0x8d0c0504, 0x011e02db, 0x59340200, 0x8c000518,
- 0x011e02d9, 0x64025a07, 0x8c000508, 0x011e02d7,
- 0x492e6009, 0x4d3c0000, 0x417a7800, 0x0501fd2c,
- 0x5c027800, 0x1c01f000, 0x58040001, 0x49680800,
- 0x49780801, 0x815eb800, 0x4006d000, 0x80000d40,
- 0x05fe07fa, 0x497a5801, 0x59c80000, 0x82000540,
- 0x00001200, 0x48039000, 0x1c01f000, 0x59980013,
- 0x48032823, 0x59d8010b, 0x48033014, 0x1c01f000,
- 0x592c0405, 0x8c00051e, 0x011e0762, 0x497a5800,
- 0x8d0c0526, 0x0502000d, 0x0502d007, 0x592c0001,
- 0x492fb107, 0x80000d40, 0x05fe0fe4, 0x0500e0de,
- 0x1c01f000, 0x0500e8dc, 0x05fcd7f9, 0x42000000,
- 0x001097d1, 0x0145f962, 0x0501f939, 0x0500d944,
- 0x0500e0d5, 0x59d80105, 0x82000d00, 0x01218780,
- 0x05020152, 0x1c01f000, 0x59980011, 0x0c01f001,
- 0x0002034c, 0x0002034d, 0x00020358, 0x00020398,
- 0x1c01f000, 0x4df00000, 0x4203e000, 0x50000000,
- 0x0502694e, 0x05006003, 0x8d0c0520, 0x050209cb,
- 0x8d0c0526, 0x0502092e, 0x5c03e000, 0x1c01f000,
- 0x4df00000, 0x4203e000, 0x50000000, 0x59940023,
- 0x80000540, 0x05002012, 0x05000007, 0x59980012,
- 0x90000585, 0x0500000e, 0x59a80061, 0x81640580,
- 0x0502000b, 0x59d8010b, 0x59d8110a, 0x80080d80,
- 0x05000023, 0x59980814, 0x80040d80, 0x05000013,
- 0x59980813, 0x48072823, 0x48033014, 0x0500e979,
- 0x8d0c0524, 0x05020005, 0x8d0c0526, 0x05020910,
- 0x5c03e000, 0x1c01f000, 0x59d8110a, 0x59d8010a,
- 0x80080580, 0x05fe07fd, 0x59d8010b, 0x80080580,
- 0x0500000f, 0x05fc67f5, 0x05006012, 0x800810e0,
- 0x90081553, 0x480bc011, 0x60040800, 0x59e00017,
- 0x8c00050a, 0x0502000e, 0x8d0c0530, 0x0502000e,
- 0x6407c017, 0x4203e000, 0x30000001, 0x4a032823,
- 0xffff0000, 0x850e1d24, 0x0500e95a, 0x05fdf7e3,
- 0x850e1d64, 0x0500e957, 0x05fdf7e0, 0x05fdfcf9,
- 0x05fdf7f4, 0x8c000500, 0x05fe0df6, 0x05fdf7f1,
- 0x4df00000, 0x4203e000, 0x50000000, 0x59b800e4,
- 0x8c000518, 0x0502001b, 0x830c0500, 0x00140000,
- 0x0502001b, 0x59940023, 0x80000540, 0x0500200c,
- 0x05000017, 0x59980012, 0x90000585, 0x05000008,
- 0x59a80061, 0x81640580, 0x05020005, 0x59a8005f,
- 0x59a8085e, 0x80040580, 0x0500000c, 0x0500e939,
- 0x05006004, 0x8d0c0524, 0x0502000a, 0x0501f94d,
- 0x8d0c0526, 0x050208ce, 0x5c03e000, 0x1c01f000,
- 0x4a0370e4, 0x00002000, 0x850e1d68, 0x0500604c,
- 0x59d8090a, 0x59d8010a, 0x80041580, 0x05fe07fd,
- 0x59d8190b, 0x800c1580, 0x59981014, 0x480f3014,
- 0x05000037, 0x0501f844, 0x59980015, 0x483b3015,
- 0x0500000d, 0x8d0c0528, 0x05020021, 0x80380580,
- 0x05020004, 0x40080000, 0x800c0580, 0x0500001c,
- 0x59980013, 0x48032823, 0x830e1d00, 0xffebffff,
- 0x05fdf7e0, 0x8d0c0528, 0x05020004, 0x40080000,
- 0x800c0580, 0x05fe07f7, 0x800408e0, 0x90040d53,
- 0x60041000, 0x4807c011, 0x59e00017, 0x8c00050a,
- 0x0502000f, 0x8d0c0530, 0x05020012, 0x480bc017,
- 0x4203e000, 0x30000001, 0x4a032823, 0xffff0000,
- 0x830e1d00, 0xffebffff, 0x05fdf7ca, 0x800408e0,
- 0x90040d5d, 0x60001000, 0x05fdf7ef, 0x4c080000,
- 0x40080800, 0x05fdfc9b, 0x5c001000, 0x05fdf7f0,
- 0x8c000500, 0x05fc07ee, 0x4c080000, 0x40080800,
- 0x05fdfd94, 0x5c001000, 0x05fdf7e9, 0x0501f80e,
- 0x59980015, 0x483b3015, 0x05fc07e8, 0x80380580,
- 0x05000003, 0x8d0c0528, 0x05fc07ce, 0x912801c0,
- 0x90000d5c, 0x60001000, 0x05fdf7d7, 0x850e1d64,
- 0x05fdf7a7, 0x59e0000f, 0x59e0680f, 0x80346d80,
- 0x05fe07fd, 0x40025000, 0x59e00010, 0x59e07010,
- 0x80387580, 0x05fe07fd, 0x40007000, 0x81280580,
- 0x1c01f000, 0x59d81108, 0x915c04a0, 0x0500100f,
- 0x0502b00d, 0x480bb007, 0x05fce7fb, 0x59d80105,
- 0x82000500, 0x01218780, 0x05020078, 0x8d0c0522,
- 0x05000012, 0x59940023, 0x80000540, 0x05fc2704,
- 0x1c01f000, 0x0500f00a, 0x49681000, 0x400ad000,
- 0x815eb800, 0x59c80000, 0x82000540, 0x00001200,
- 0x48039000, 0x05fee7ee, 0x05fdf7e7, 0x480ba807,
- 0x05fee7eb, 0x05fdf7e4, 0x05006018, 0x850e1d24,
- 0x59d8010a, 0x59d8090a, 0x80040580, 0x05fe07fd,
- 0x59d8010b, 0x80040580, 0x0500000f, 0x800408e0,
- 0x8d0c0520, 0x0502000f, 0x90040d53, 0x4807c011,
- 0x60040800, 0x59e00017, 0x8c00050a, 0x0502002a,
- 0x8d0c0530, 0x0502002c, 0x4807c017, 0x4203e000,
- 0x30000001, 0x1c01f000, 0x850e1d64, 0x1c01f000,
- 0x59e0000f, 0x59b818e4, 0x59e0100f, 0x80081580,
- 0x05fe07fc, 0x8c0c050c, 0x05fe07fa, 0x81281580,
- 0x05000012, 0x40025000, 0x820c0500, 0x04000000,
- 0x850e1d34, 0x810e1d40, 0x90040d5d, 0x4807c011,
- 0x59e00017, 0x60000800, 0x8c00050a, 0x0502000e,
- 0x8d0c0530, 0x05020010, 0x6403c017, 0x4203e000,
- 0x30000001, 0x1c01f000, 0x40001000, 0x400c0000,
- 0x810c0580, 0x8c000534, 0x40080000, 0x05fe07ea,
- 0x05fdf7d2, 0x4c040000, 0x05fdfc1e, 0x5c000800,
- 0x05fdf7d6, 0x8c000500, 0x05fc07d4, 0x4c040000,
- 0x05fdfd18, 0x5c000800, 0x05fdf7d0, 0x59980816,
- 0x592c0001, 0x492f3016, 0x800409c0, 0x05000005,
- 0x492c0800, 0x80000d40, 0x05fe069c, 0x1c01f000,
- 0x492f3017, 0x850e1d66, 0x05fdf7fb, 0x0502d00c,
- 0x59980817, 0x58040000, 0x4807b107, 0x80000d40,
- 0x05020005, 0x48033016, 0x850e1d26, 0x48033017,
- 0x1c01f000, 0x05fcd7f8, 0x05fdf7fd, 0x59d80105,
- 0x82000500, 0x01218780, 0x05020004, 0x42000000,
- 0x001097d1, 0x0145f162, 0x4803c857, 0x485fc857,
- 0x8c00050e, 0x010209dc, 0x4203e000, 0x50000000,
- 0x6010b900, 0x0101f1ea, 0x05fce777, 0x59d80105,
- 0x82000500, 0x01218780, 0x05fe07f4, 0x8d0c0524,
- 0x05020002, 0x1c01f000, 0x59d8010a, 0x59d8090a,
- 0x80040580, 0x05fe07fd, 0x850e1d24, 0x59d8010b,
- 0x80040580, 0x0500000f, 0x800408e0, 0x8d0c0520,
- 0x0502000d, 0x90040d53, 0x4807c011, 0x60040800,
- 0x59e00017, 0x8c00050a, 0x05020021, 0x8d0c0530,
- 0x05020023, 0x4807c017, 0x4203e000, 0x30000001,
- 0x1c01f000, 0x59e0000f, 0x59b818e4, 0x59e0100f,
- 0x80081580, 0x05fe07fc, 0x8c0c050c, 0x05fe07fa,
- 0x81281580, 0x0500001c, 0x40025000, 0x820c0500,
- 0x04000000, 0x850e1d34, 0x810e1d40, 0x90040d5d,
- 0x4807c011, 0x59e00017, 0x60000800, 0x8c00050a,
- 0x05020007, 0x8d0c0530, 0x05020009, 0x6403c017,
- 0x4203e000, 0x30000001, 0x1c01f000, 0x4c040000,
- 0x05fdfbb4, 0x5c000800, 0x05fdf7df, 0x8c000500,
- 0x05fc07dd, 0x4c040000, 0x05fdfcae, 0x5c000800,
- 0x05fdf7d9, 0x40001000, 0x400c0000, 0x810c0580,
- 0x8c000534, 0x40080000, 0x05fe07e0, 0x05fdf7ca,
- 0x59da5908, 0x496a5800, 0x412ed000, 0x815eb800,
- 0x05fce7fc, 0x59c80000, 0x82000540, 0x00001200,
- 0x48039000, 0x59d8090b, 0x59980014, 0x48073014,
- 0x80040480, 0x05020004, 0x59940023, 0x80000540,
- 0x05022003, 0x59980813, 0x48072823, 0x59d80105,
- 0x82000500, 0x01218780, 0x05fe0798, 0x1c01f000,
- 0x59981015, 0x59e00010, 0x59e00810, 0x80041d80,
- 0x05fe07fd, 0x80080580, 0x0500000d, 0x48073015,
- 0x59e0000f, 0x59e0100f, 0x80081d80, 0x05fe07fd,
- 0x81280580, 0x0500000d, 0x400a5000, 0x40080000,
- 0x80040580, 0x05fe0616, 0x1c01f000, 0x59e0000f,
- 0x59e0100f, 0x80081d80, 0x05fe07fd, 0x81280580,
- 0x05fc07fa, 0x400a5000, 0x59940023, 0x80000540,
- 0x05fc27f3, 0x1c01f000, 0x59e0000f, 0x59b818e4,
- 0x59e0100f, 0x80080d80, 0x05fe07fc, 0x8c0c050c,
- 0x05fe07fa, 0x81280580, 0x05020006, 0x400c0000,
- 0x810c0580, 0x8c000534, 0x05020002, 0x1c01f000,
- 0x820c0500, 0x04000000, 0x850e1d34, 0x810e1d40,
- 0x400a5000, 0x900811c0, 0x9008155c, 0x480bc011,
- 0x59e00017, 0x60000800, 0x8c00050a, 0x05020007,
- 0x8d0c0530, 0x05020007, 0x6403c017, 0x4203e000,
- 0x30000001, 0x1c01f000, 0x05fdfb4e, 0x05fdf7fb,
- 0x8c000500, 0x05fe0c4b, 0x05fdf7f8, 0x41700000,
- 0x0c01f001, 0x001044ea, 0x0002054e, 0x001044ea,
- 0x00020609, 0x001044e9, 0x001044e9, 0x001044e9,
- 0x001044e9, 0x0010486b, 0x0501002e, 0x59980004,
- 0x80000540, 0x05020032, 0x0502c018, 0x6042f800,
- 0x4df00000, 0x4203e000, 0x50000000, 0x49db3003,
- 0x59da5808, 0x592c2a05, 0x497a5800, 0x497a5801,
- 0x82140500, 0x000000ff, 0xb0000cba, 0x0502102d,
- 0x0c01f82f, 0x5c03e000, 0x817ef840, 0x05000007,
- 0x916c0583, 0x05020005, 0x91700581, 0x0502000e,
- 0x05010015, 0x05fcc7eb, 0x0500f93f, 0x0500b12b,
- 0x59d40005, 0x82000500, 0x43218780, 0x012207f5,
- 0x59d80005, 0x82000500, 0x43218780, 0x012207fb,
- 0x1c01f000, 0x91700583, 0x05000893, 0x91700581,
- 0x05fe07f2, 0x05010004, 0x05fcc7da, 0x05fdf7ef,
- 0x6042f800, 0x4df00000, 0x4203e000, 0x50000000,
- 0x49d73003, 0x59d65808, 0x05fdf7d7, 0x4df00000,
- 0x4203e000, 0x50000000, 0x40025800, 0x592c2a05,
- 0x497b3003, 0x497b3004, 0x6042f800, 0x05fdf7d1,
- 0x0121fd3b, 0x5c03e000, 0x05fdf7dc, 0x0010453b,
- 0x0010453b, 0x0010453b, 0x0010453b, 0x0010459a,
- 0x0010453b, 0x0010453b, 0x0010453b, 0x0010453b,
- 0x0010453b, 0x00104547, 0x0010453b, 0x0010453b,
- 0x0010453b, 0x001045b7, 0x0010453b, 0x0010453b,
- 0x0010453b, 0x0002064f, 0x0010453b, 0x00104711,
- 0x0010453b, 0x0010453b, 0x0010453b, 0x00020625,
- 0x0010453b, 0x0010453b, 0x0010453b, 0x0010453b,
- 0x0010453b, 0x0010453b, 0x0010453b, 0x0010453b,
- 0x0010453b, 0x0010453b, 0x0010453b, 0x0010453b,
- 0x0010453b, 0x0010453b, 0x0010453b, 0x0010453b,
- 0x00104566, 0x0010453b, 0x0010453b, 0x0010453b,
- 0x0010453b, 0x0010453b, 0x0010453b, 0x0010453b,
- 0x0010453b, 0x0010453b, 0x0010479b, 0x0010453b,
- 0x0010453b, 0x0010453b, 0x0010453b, 0x0010453b,
- 0x001047dc, 0x0010453b, 0x0010453b, 0x0010453b,
- 0x0010453b, 0x0010453b, 0x0010453b, 0x0010453b,
- 0x0010453b, 0x0010453b, 0x0010453b, 0x0010453b,
- 0x0010453b, 0x0010453b, 0x0010453b, 0x00104839,
- 0x0010453b, 0x0010453b, 0x0010453b, 0x0010453b,
- 0x0010453b, 0x0010453b, 0x0010453b, 0x0010453b,
- 0x0010453b, 0x0010476a, 0x00104807, 0x0010453b,
- 0x0010482f, 0x0010453b, 0x0010453b, 0x0010453b,
- 0x0010453b, 0x0010453b, 0x0010453b, 0x0010453b,
- 0x0010453b, 0x0010453b, 0x0010453b, 0x0010453b,
- 0x0010453b, 0x0010453b, 0x0010453b, 0x0010453b,
- 0x0010453b, 0x0010453b, 0x0010453b, 0x0010453b,
- 0x0010453b, 0x0010453b, 0x0010453b, 0x0010453b,
- 0x0010453b, 0x0010453b, 0x0010453b, 0x0010453b,
- 0x0010453b, 0x0010453b, 0x0010453b, 0x0010453b,
- 0x0010453b, 0x0010453b, 0x0010453b, 0x0010453b,
- 0x0010453b, 0x4df00000, 0x4203e000, 0x50000000,
- 0x59981003, 0x800811c0, 0x012004ee, 0x58080005,
- 0x82000d00, 0x43218780, 0x012207fb, 0x8c000508,
- 0x012004ec, 0x580a5808, 0x592c0205, 0x497a5800,
- 0x497a5801, 0x82000500, 0x000000ff, 0xb0000c8b,
- 0x012214eb, 0x1201f800, 0x001044f0, 0x5c03e000,
- 0x91700583, 0x05fc07e8, 0x0500f887, 0x0500b073,
- 0x1c01f000, 0x80140110, 0x80000040, 0x05000009,
- 0x01201541, 0x4a033006, 0x00020630, 0x48033000,
- 0x492f3001, 0x492f3002, 0x600ee000, 0x1c01f000,
- 0x592e8a07, 0x83440c80, 0x000007f0, 0x0122154d,
- 0x8d0c050e, 0x0122056e, 0x83440400, 0x00108c00,
- 0x50000000, 0x80026d40, 0x0120057b, 0x5934000a,
- 0x8c00052e, 0x01220581, 0x05fdfc46, 0x0122057d,
- 0x1c01f000, 0x59980802, 0x59980000, 0x48065800,
- 0x492c0801, 0x492f3002, 0x80000040, 0x48033000,
- 0x05000002, 0x1c01f000, 0x599a5801, 0x59980006,
- 0x6006e000, 0x0801f800, 0x1c01f000, 0x80140110,
- 0x01200541, 0x80000040, 0x05020009, 0x592c240b,
- 0x8c100504, 0x0500000a, 0x592c0208, 0x82000c80,
- 0x00001001, 0x0122154d, 0x0125f049, 0x4a033006,
- 0x0002065e, 0x05fdf7ce, 0x592c240b, 0x592e8a07,
- 0x417a7800, 0x83440480, 0x00000800, 0x012216b2,
- 0x83440400, 0x00108c00, 0x50000000, 0x80026d40,
- 0x012006b2, 0x59340002, 0x592c0809, 0x80040580,
- 0x82000500, 0x00ffffff, 0x0122054d, 0x592e600a,
- 0x497a5809, 0x83300480, 0x0010ccb4, 0x012016cb,
- 0xa1300495, 0x0122167f, 0x592c0a0d, 0x59300202,
- 0x80040580, 0x012206cb, 0x4936600a, 0x8c10051c,
- 0x01220673, 0x59a80082, 0x8c000510, 0x012206e3,
- 0x8d0c050e, 0x0122065f, 0x8d0c0504, 0x012206da,
- 0x59340200, 0x8c000518, 0x012206c8, 0x59300c07,
- 0x90040586, 0x012206e6, 0x8c100508, 0x01220655,
- 0x59300809, 0x497a5804, 0x64025a07, 0x800409c0,
- 0x0122065a, 0x59300416, 0x8c000516, 0x012206ce,
- 0x492e6009, 0x0501f1ae, 0x4df00000, 0x4203e000,
- 0x50000000, 0x0502b00a, 0x915c04a0, 0x0500100c,
- 0x815eb840, 0x416a5800, 0x592ed000, 0x492fb007,
- 0x497a5800, 0x497a5801, 0x05fcb7f8, 0x59d80005,
- 0x82000500, 0x43218780, 0x012207fb, 0x5c03e000,
- 0x1c01f000, 0x4df00000, 0x4203e000, 0x50000000,
- 0x0502f00a, 0x915c04a0, 0x0500100c, 0x815eb840,
- 0x416a5800, 0x592ed000, 0x492fa807, 0x497a5800,
- 0x497a5801, 0x05fcf7f8, 0x59d40005, 0x82000500,
- 0x43218780, 0x012207f5, 0x5c03e000, 0x1c01f000,
- 0x40307000, 0x5838000a, 0x80025d40, 0x05000018,
- 0x58380002, 0x82000580, 0x00000100, 0x05000019,
- 0x4c380000, 0x592c0205, 0x82000500, 0x000000ff,
- 0x90000592, 0x0500000b, 0x592c0209, 0x8400054e,
- 0x48025a09, 0x497a5c09, 0x497a5c0a, 0x640a5a07,
- 0x4a025a05, 0x00000103, 0x05fdfc5a, 0x0501f003,
- 0x64425a07, 0x05fdfc57, 0x5c007000, 0x6006e000,
- 0x4a007002, 0x00000100, 0x4978700f, 0x1c01f000,
- 0x58380004, 0x90000483, 0x05000074, 0x5838000f,
- 0x8c000500, 0x05020012, 0x600cb000, 0x912cac12,
- 0x58380009, 0x5838100c, 0x8008a400, 0x4c380000,
- 0x0145fa29, 0x5c007000, 0x5838000c, 0x90000403,
- 0x4800700c, 0x6404700f, 0x58380004, 0x90000483,
- 0x48007004, 0x90000583, 0x05000060, 0x5838000d,
- 0x80001d40, 0x0502001b, 0x4c380000, 0x0101fd55,
- 0x5c007000, 0x0500000e, 0x4a025a05, 0x0000010a,
- 0x60181800, 0x480c700d, 0x5838000b, 0x80000540,
- 0x05020002, 0x5838000a, 0x40000800, 0x492c0801,
- 0x492c700b, 0x603c0800, 0x0501f00e, 0x6022e000,
- 0x4a033005, 0x0002070b, 0x1c01f000, 0x600ae000,
- 0x42000000, 0x001099e9, 0x50007000, 0x05fdf7eb,
- 0x583a580b, 0x400c0000, 0x60540800, 0x80040c80,
- 0x58381004, 0x5838000e, 0x41783000, 0x80000540,
- 0x05020004, 0x84183540, 0x90081483, 0x05000037,
- 0x40080000, 0x80040480, 0x05001002, 0x40080800,
- 0x4004b000, 0x412c0000, 0x800c0400, 0x4000a800,
- 0x58380009, 0x5838100c, 0x8008a400, 0x4c080000,
- 0x4c040000, 0x4c0c0000, 0x4c380000, 0x0145fa29,
- 0x5c007000, 0x5c001800, 0x5c000800, 0x40040000,
- 0x58381004, 0x80080480, 0x48007004, 0x90000583,
- 0x05000002, 0x84183500, 0x5c000000, 0x80041400,
- 0xb00804a0, 0x05020003, 0x84183542, 0x41781000,
- 0x400c0000, 0x80041c00, 0x900c0495, 0x05020003,
- 0x84183544, 0x40001800, 0x40080800, 0x4804700c,
- 0x480c700d, 0x40180000, 0x0c01f001, 0x0002074f,
- 0x00020752, 0x00020750, 0x0002074f, 0x000206f6,
- 0x00020752, 0x00020750, 0x0002074f, 0x0101f9e6,
- 0x5838100e, 0x0125f059, 0x5838080c, 0x90040402,
- 0x58381009, 0x80080400, 0x50001000, 0x800811c0,
- 0x0502000b, 0x6006e000, 0x583a580a, 0x4978700a,
- 0x4978700f, 0x592c0205, 0x82000500, 0x000000ff,
- 0x90000592, 0x05fc06fd, 0x05fdf6ce, 0x58380009,
- 0x80040c00, 0x90381c06, 0x54041800, 0x80040800,
- 0x800c1800, 0x54041800, 0x0125f059, 0x4df00000,
- 0x4203e000, 0x50000000, 0x5994002e, 0x80000540,
- 0x050000c6, 0x4c000000, 0x5c000000, 0x59947824,
- 0x4803282f, 0x803c0480, 0x05001004, 0x05000003,
- 0x48032824, 0x0501f01f, 0x41787800, 0x803c7800,
- 0x82000400, 0x000003e8, 0x05fc27fd, 0x48032824,
- 0x59a80075, 0x803c1400, 0x480b5075, 0x803c0040,
- 0x05000002, 0x483fc857, 0x59e40852, 0x59a80076,
- 0x80040580, 0x05000004, 0x480bc857, 0x59e40052,
- 0x48035076, 0x59940030, 0x803c0400, 0x48032830,
- 0x0125feca, 0x59940000, 0x90000580, 0x05020005,
- 0x59940030, 0x48032831, 0x497b2830, 0x64072800,
- 0x4c0c0000, 0x58d400e5, 0x8c000514, 0x05000013,
- 0x59940807, 0x59941006, 0x5994002f, 0x80081c80,
- 0x05001004, 0x05000003, 0x480f2806, 0x0501f00b,
- 0x80040840, 0x48072807, 0x05020004, 0x59940008,
- 0x0801f800, 0x0501f005, 0x400c0000, 0x900c1c0a,
- 0x05fc27f8, 0x480f2806, 0x5c001800, 0x4d180000,
- 0x59c80040, 0x8c000534, 0x05020025, 0x417a3000,
- 0x91947c09, 0x60042000, 0x58d400e5, 0x80100500,
- 0x05020007, 0x801020c4, 0x903c7c05, 0x811a3000,
- 0x91180585, 0x05fe07f9, 0x0501f019, 0x583c0801,
- 0x583c1000, 0x5994002f, 0x80080480, 0x05001005,
- 0x05000004, 0x48007800, 0x80000040, 0x05fe17f2,
- 0x80040840, 0x48047801, 0x05000006, 0x9000040a,
- 0x48007800, 0x05fc27fb, 0xb004053f, 0x05fdf7ea,
- 0x583c0004, 0x4c3c0000, 0x4c100000, 0x0801f800,
- 0x5c002000, 0x5c007800, 0x05fdf7e3, 0x5c023000,
- 0x59940023, 0x80001540, 0x05000007, 0x05002006,
- 0x5994002f, 0x80080480, 0x05021002, 0x80000580,
- 0x48032823, 0x59940026, 0x80000d40, 0x05000012,
- 0x59941025, 0x5994002f, 0x80080480, 0x05001005,
- 0x05000004, 0x48032825, 0x80000040, 0x0502100a,
- 0x80040840, 0x48072826, 0x05020004, 0x59940027,
- 0x0801f800, 0x0501f004, 0x9000040a, 0x48032825,
- 0x05fc27f8, 0x59940004, 0x80000d40, 0x05000012,
- 0x59941003, 0x5994002f, 0x80080480, 0x05001005,
- 0x05000004, 0x48032803, 0x80000040, 0x0502100a,
- 0x80040840, 0x48072804, 0x05020004, 0x59940005,
- 0x0801f800, 0x0501f004, 0x9000040a, 0x48032803,
- 0x05fc27f8, 0x59940029, 0x80000d40, 0x05000012,
- 0x59941028, 0x5994002f, 0x80080480, 0x05001005,
- 0x05000004, 0x48032828, 0x80000040, 0x0502100a,
- 0x80040840, 0x48072829, 0x05020004, 0x5994002a,
- 0x0801f800, 0x0501f004, 0x90000401, 0x48032828,
- 0x05fc27f8, 0x5994002c, 0x80000d40, 0x05000012,
- 0x5994102b, 0x5994002f, 0x80080480, 0x05001005,
- 0x05000004, 0x4803282b, 0x80000040, 0x0502100a,
- 0x80040840, 0x4807282c, 0x05020004, 0x5994002d,
- 0x0801f800, 0x0501f004, 0x9000040a, 0x4803282b,
- 0x05fc27f8, 0x5994082e, 0x5994002f, 0x80040480,
- 0x010019e6, 0x4803282e, 0x59940000, 0x0c01f001,
- 0x0002083b, 0x00104e2f, 0x00104e90, 0x5c03e000,
- 0x1c01f000, 0x5994002e, 0x80000000, 0x4803282e,
- 0x4203e000, 0x70000000, 0x1c01f000, 0x813e79c0,
- 0x05020009, 0x59a80089, 0x80000040, 0x05fe07ff,
- 0x58d400ea, 0x8c000516, 0x05fe07fe, 0x91300400,
- 0x4801a8e1, 0x1c01f000, 0x5c000000, 0x4c000000,
- 0x4803c857, 0x4807c857, 0x0501f002, 0x60040800,
- 0x59325809, 0x832c0500, 0x00ff0000, 0x0500000d,
- 0x592c1000, 0x592c040b, 0x480a6009, 0x8c000510,
- 0x05020009, 0x48065a07, 0x05fdface, 0x417a7800,
- 0x59300009, 0x641e6203, 0x80025d40, 0x05fe07e0,
- 0x1c01f000, 0x456a5800, 0x412ed000, 0x815eb800,
- 0x592c0001, 0x80000d40, 0x05020006, 0x59c80000,
- 0x82000540, 0x00001200, 0x48039000, 0x05fdf7f0,
- 0x05fdfaaa, 0x05fdf7ee, 0x48066004, 0x497a6000,
- 0x497a6001, 0x58d400ea, 0x8c000516, 0x05fe07fe,
- 0x83300400, 0xa0000000, 0x4801a8e1, 0x1c01f000,
- 0x59300004, 0x82000500, 0x00000100, 0x80040d40,
- 0x48066004, 0x58d400ea, 0x8c000516, 0x05fe07fe,
- 0x83300400, 0x40000000, 0x4801a8e1, 0x1c01f000,
- 0x58d400ea, 0x82001500, 0x32000018, 0x012a020f,
- 0x8c000510, 0x0500002f, 0x58d410e0, 0x82080500,
- 0xfffff000, 0x0502000d, 0x900a350f, 0x80081108,
- 0x480bc857, 0x90080487, 0x010219e6, 0x90080481,
- 0x010019e6, 0x1201f000, 0x00105213, 0x84000510,
- 0x48026004, 0x0501f019, 0x840a653e, 0x59300804,
- 0x8c040520, 0x05fc07fa, 0x82040d00, 0xfffefeff,
- 0x48066004, 0x8c08053e, 0x05020009, 0x8c040514,
- 0x05000004, 0x05fdffaa, 0x0501f83d, 0x0501f00b,
- 0x604e7000, 0x0501f858, 0x0501f008, 0x8c040514,
- 0x05000004, 0x05fdffa2, 0x0501f835, 0x0501f003,
- 0x61267000, 0x0501f850, 0x58d400ea, 0x82001500,
- 0x32000018, 0x012a020f, 0x8c000510, 0x05fe07d3,
- 0x1c01f000, 0x59bc00ea, 0x82001500, 0xb2000018,
- 0x012a0239, 0x8c000510, 0x05000007, 0x59bc10e0,
- 0x80080108, 0x900a350f, 0x4803c857, 0x1201f000,
- 0x0010523d, 0x1c01f000, 0x59a80262, 0x81640480,
- 0x05001015, 0x41626000, 0x41580000, 0x59300a03,
- 0x90040d80, 0x05020007, 0x64226203, 0x8166c840,
- 0x9132c424, 0x81600480, 0x05021008, 0x1c01f000,
- 0x91326424, 0x81300c80, 0x05fc17f5, 0x42026000,
- 0x0010ccb4, 0x05fdf7f2, 0x837ac540, 0x0010ccb4,
- 0x1c01f000, 0x42000000, 0x0010986b, 0x0145f95f,
- 0x4967c857, 0x80026580, 0x1c01f000, 0x83300480,
- 0x0010ccb4, 0x010019e6, 0x41580000, 0x81300480,
- 0x0502100a, 0x457a6000, 0x4a026202, 0x0000ffff,
- 0x05011000, 0x91300403, 0x4803c840, 0x6487c842,
- 0x8166c800, 0x1c01f000, 0x41540000, 0x81300480,
- 0x010219e6, 0x59a8005e, 0x4933505d, 0x80000000,
- 0x4803505e, 0x457a6000, 0x4a026202, 0x0000ffff,
- 0x05011000, 0x91300403, 0x4803c840, 0x6487c842,
- 0x1c01f000, 0x4d340000, 0x5932680a, 0x59300407,
- 0x9000051f, 0x0c01f803, 0x5c026800, 0x1c01f000,
- 0x00105eac, 0x00105ebb, 0x00105ed2, 0x0002092c,
- 0x00107a07, 0x00107a1f, 0x00020997, 0x00105eac,
- 0x00105ebb, 0x00104fef, 0x00105ee7, 0x00105eac,
- 0x00105eac, 0x00105eac, 0x00105eac, 0x00105eac,
- 0x00107635, 0x001085e4, 0x00105eac, 0x00105eac,
- 0x00105eac, 0x00105eac, 0x00105eac, 0x00105eac,
- 0x00105eac, 0x00105eac, 0x00105eac, 0x00105eac,
- 0x00105eac, 0x00105eac, 0x00105eac, 0x00105eac,
- 0x59300203, 0x90000c8e, 0x010219e6, 0x0c01f001,
- 0x00105ee6, 0x00106866, 0x0002093e, 0x001069ea,
- 0x00106a6f, 0x00105ee6, 0x00105ee6, 0x00105ee6,
- 0x00106852, 0x00105ee6, 0x00105ee6, 0x00105ee6,
- 0x00105ee6, 0x00106c1d, 0xb1380498, 0x05021006,
- 0xb1380480, 0x05001004, 0x4d2c0000, 0x0c01f803,
- 0x5c025800, 0x1c01f000, 0x001068cd, 0x001068cd,
- 0x001068cd, 0x001068cd, 0x001068cd, 0x001068ce,
- 0x0010697c, 0x001068cd, 0x001068cd, 0x001068cd,
- 0x001068cd, 0x001068cd, 0x001068cd, 0x001068cd,
- 0x001068cd, 0x001068cd, 0x001068cd, 0x001068cd,
- 0x001068cd, 0x00106980, 0x0002095e, 0x001068cd,
- 0x0010697f, 0x00106981, 0x59325809, 0x59300813,
- 0x59301402, 0x59340200, 0x8c00050e, 0x0502001a,
- 0x0501f823, 0x05000005, 0x4a025a05, 0x00000103,
- 0x497a580a, 0x0501f007, 0x4a025a05, 0x00000103,
- 0x64025a07, 0x497a580a, 0x800409c0, 0x01360a3f,
- 0x48065808, 0x480a5c07, 0x05fdf9ba, 0x5934000f,
- 0x8d0c0512, 0x05020005, 0x5934140b, 0x80081040,
- 0x05001002, 0x480a6c0b, 0x80000540, 0x05fe0956,
- 0x05fdf76b, 0x592c020b, 0x8c000502, 0x05fc07e5,
- 0x800409c0, 0x05fc07e9, 0x592c0209, 0x8c00050e,
- 0x05fe07e6, 0x4933c857, 0x0139f327, 0x592c020b,
- 0x8c000500, 0x0500000d, 0x59300017, 0x592c3810,
- 0x801c3c80, 0x05000009, 0x64565a07, 0x8c1c053e,
- 0x05000004, 0x641e5a07, 0x801c3880, 0x801c3800,
- 0x481fc857, 0x901c0d40, 0x1c01f000, 0x59300203,
- 0x9000348e, 0x010219e6, 0x0c01f001, 0x00107a3a,
- 0x000209a9, 0x00108007, 0x0010800f, 0x000209be,
- 0x00107a3a, 0x001080ce, 0x000209da, 0x00107a3a,
- 0x00107a3a, 0x00107a3a, 0x00107a3a, 0x00107a3a,
- 0x00107a3a, 0x91380593, 0x013e07b5, 0x59300403,
- 0xb0027484, 0x010219e6, 0xb0000480, 0x010019e6,
- 0x0c01f001, 0x00107ff5, 0x000209b5, 0x00107ff6,
- 0x00108002, 0x59325809, 0x832c0500, 0x00ff0000,
- 0x05000004, 0x592c0c0b, 0x8c04051a, 0x013e07ff,
- 0x05fdfe97, 0x05fdf72a, 0xb1380588, 0x05000004,
- 0xb1380593, 0x01400084, 0x0101f9e6, 0x59300021,
- 0x59301013, 0x5930080a, 0x58040a00, 0x8c04050e,
- 0x0142006a, 0x800811c0, 0x01420075, 0x59300021,
- 0x80000540, 0x0142007f, 0x59325809, 0x592c040b,
- 0x8c00051e, 0x01400064, 0x64066203, 0x65066403,
- 0x42000800, 0x80002042, 0x8c00051a, 0x05020002,
- 0x84040d54, 0x05fdf6a3, 0xb1380494, 0x010219e6,
- 0xb1380480, 0x0140109b, 0x0c01f001, 0x001080a3,
- 0x000209f3, 0x001080ac, 0x001080b1, 0x001080a3,
- 0x001080a3, 0x001080a3, 0x001080a3, 0x001080a4,
- 0x001080a8, 0x001080a8, 0x001080a3, 0x001080a3,
- 0x001080a3, 0x001080a3, 0x001080a8, 0x001080a3,
- 0x001080a8, 0x001080a3, 0x001080a4, 0x64066203,
- 0x493a6403, 0x42000800, 0x80002042, 0x05fdf685,
- 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x9ec459b0,
- 0x00000000, 0x00000000, 0x0010ad00, 0x00001ae5,
- 0x42000000, 0x0010c820, 0x42001000, 0x0010c811,
- 0x48001000, 0x42013800, 0x0010cc20, 0x42000000,
- 0x0010c810, 0x489c0000, 0x409d4000, 0x409d6800,
- 0x1c01f000, 0x4200d000, 0x0000000d, 0x42000000,
- 0x00000002, 0x4800d000, 0x0401f7fb, 0x4200d000,
- 0x0000000d, 0x42000000, 0x00000001, 0x4800d000,
- 0x0401f7fb, 0x1c01f000, 0x809d3840, 0x48813800,
- 0x4933c857, 0x5931040c, 0x82817480, 0x00000038,
- 0x0400000d, 0x0400100c, 0x82810480, 0x00000038,
- 0x4a025a06, 0x00000038, 0x0201f800, 0x00102d7d,
- 0x40c65800, 0x80c589c0, 0x040207f4, 0x4178d000,
- 0x0401f004, 0x48825a06, 0x4200d000, 0x00000001,
- 0x40698800, 0x589d0000, 0x809d3800, 0x1c01f000,
- 0x42038000, 0x00007700, 0x4a038006, 0x30000000,
- 0x59c0d007, 0x8268e500, 0x00000020, 0x8c68d50a,
- 0x040207fc, 0x59c0d006, 0x59a0d20a, 0x59a0dc0a,
- 0x806c00e0, 0x8068d540, 0x486b8001, 0x59a0d20f,
- 0x59a0dc0f, 0x806c00e0, 0x8068d540, 0x486b8000,
- 0x59a0d20c, 0x486b8002, 0x59a0d20c, 0x486b8003,
- 0x59a0d20c, 0x486b8005, 0x48739009, 0x59e0d003,
- 0x8268d540, 0x00008060, 0x486bc003, 0x1c01f000,
- 0x59a17002, 0x48bbc857, 0x59a0d002, 0x8068d1c0,
- 0x04020033, 0x59a8d80f, 0x826ce500, 0x000000ff,
- 0x59a9707b, 0x48bb8880, 0x59c4d0a3, 0x8268d540,
- 0x00002008, 0x8468d53a, 0x486b88a3, 0x59c4d008,
- 0x8268d540, 0x00000280, 0x8268d500, 0xffffffe1,
- 0x486b8808, 0x59c8d040, 0x8468d534, 0x486b9040,
- 0x59a0d207, 0x82697480, 0x00000044, 0x0400001d,
- 0x8070d0d0, 0x807000e0, 0x8068d540, 0x486b9120,
- 0x8270d540, 0x01000000, 0x486b9121, 0x4a039123,
- 0x08210008, 0x48739122, 0x497b9124, 0x59a8d47c,
- 0x8068d000, 0x486b547c, 0x59a8d47c, 0x8068d0e0,
- 0x8268d540, 0x0000aaaa, 0x486b9125, 0x497b9126,
- 0x497b9127, 0x59a0d207, 0x82697480, 0x00000044,
- 0x04000011, 0x4a039100, 0x0000e9a0, 0x0401f010,
- 0x806cd0d0, 0x8268d540, 0x00000011, 0x486b9120,
- 0x826cdd00, 0x00ffffff, 0x826cd540, 0x32000000,
- 0x486b9121, 0x4a039123, 0xe1290008, 0x486f9122,
- 0x0401f7e2, 0x4a039100, 0x0000e980, 0x1c01f000,
- 0x59c8d007, 0x8c68d500, 0x04000003, 0x4a03900d,
- 0x00000030, 0x1c01f000, 0x0201f800, 0x001051ab,
- 0x59b8d0ea, 0x8268d500, 0x00000007, 0x82697480,
- 0x00000003, 0x04000002, 0x0401f003, 0x4a0370e8,
- 0x00000001, 0x1c01f000, 0x4a038805, 0x00020000,
- 0x4200d000, 0x0000003c, 0x0201f800, 0x00101056,
- 0x4a038891, 0x0000ffff, 0x59c97035, 0x48bb9035,
- 0x4a03900d, 0x00000040, 0x42038000, 0x00007700,
- 0x0201f800, 0x00100b3d, 0x4a038006, 0x20000000,
- 0x42038000, 0x00007720, 0x0201f800, 0x00100b3d,
- 0x4a038006, 0x20000000, 0x4a03a005, 0x20000000,
- 0x4a03a005, 0x30000000, 0x4a03b805, 0x30000001,
- 0x4a03b805, 0x20000000, 0x59d0d006, 0x8c68d50a,
- 0x040207fe, 0x59dcd006, 0x8c68d50a, 0x040207fb,
- 0x1c01f000, 0x4203a000, 0x00007600, 0x4200d000,
- 0x00000040, 0x0201f800, 0x00101056, 0x4a03a00a,
- 0x00000001, 0x4a03a005, 0x20000000, 0x59d0d006,
- 0x4a03a005, 0x30000000, 0x59d0d006, 0x8c68d50a,
- 0x040207fe, 0x59d0d005, 0x59a0d211, 0x59a0dc11,
- 0x806c00e0, 0x8068d540, 0x486ba001, 0x59a0d20e,
- 0x59a0dc0e, 0x806c00e0, 0x8068d540, 0x486ba000,
- 0x59a0d20c, 0x486ba003, 0x59a0d20c, 0x486ba002,
- 0x59a0d20c, 0x486ba008, 0x1c01f000, 0x58ed7003,
- 0x48bbc857, 0x58ed7005, 0x48bbc857, 0x58ed7006,
- 0x48bbc857, 0x58ed7007, 0x48bbc857, 0x58ed7001,
- 0x48bbc857, 0x48efc857, 0x58ed7008, 0x48bbc857,
- 0x58ecd005, 0x8068d1c0, 0x04000005, 0x40ecd000,
- 0x0201f800, 0x001005ef, 0x0401f006, 0x58ecd003,
- 0x58ecd806, 0x58ece001, 0x0201f800, 0x001001e3,
- 0x1c01f000, 0x829d3c80, 0x00000006, 0x48813800,
- 0x48853801, 0x48893802, 0x488d3803, 0x48913804,
- 0x48953805, 0x59a10407, 0x4883c857, 0x59a0da0e,
- 0x59a0d40e, 0x806800e0, 0x806d2d40, 0x59a0da11,
- 0x59a0d411, 0x806800e0, 0x806d2540, 0x59a10a0c,
- 0x830d1500, 0x00000080, 0x8d0e1d0e, 0x04020020,
- 0x59a8d21b, 0x8c68d50a, 0x04000018, 0x599cd201,
- 0x40840000, 0x80697480, 0x04001027, 0x82811d00,
- 0x00008000, 0x04020028, 0x59a8d00d, 0x41640000,
- 0x80697480, 0x04000015, 0x4967c857, 0x59a97060,
- 0x48bbc857, 0x59a9705f, 0x48bbc857, 0x59a9705e,
- 0x48bbc857, 0x4a034407, 0x00000018, 0x0201f800,
- 0x00101c0b, 0x0401f131, 0x4a034407, 0x00000005,
- 0x0201f800, 0x00101c0b, 0x0401f12c, 0x0201f800,
- 0x00101c13, 0x0401f129, 0x59a8d05f, 0x59a8005e,
- 0x80697480, 0x040207e9, 0x0201f800, 0x00103071,
- 0x80c589c0, 0x0402004b, 0x0201f800, 0x00101c17,
- 0x0401f11e, 0x4887c857, 0x0201f800, 0x00101c0f,
- 0x0401f11a, 0x0201f800, 0x00105e80, 0x40c66000,
- 0x80c589c0, 0x0400003c, 0x0201f800, 0x00102d7d,
- 0x40c65800, 0x80c589c0, 0x04000020, 0x48898a05,
- 0x48898c05, 0x4882620c, 0x4886640c, 0x59a0d40f,
- 0x8068d0e0, 0x59a0da0f, 0x406c0000, 0x8068d540,
- 0x486a600d, 0x59a0d40a, 0x8068d0e0, 0x59a0da0a,
- 0x406c0000, 0x8068d540, 0x486a600e, 0x59a0d40e,
- 0x8068d0e0, 0x59a0da0e, 0x406c0000, 0x8068d540,
- 0x486a600f, 0x59a0d411, 0x8068d0e0, 0x59a0da11,
- 0x406c0000, 0x8068d540, 0x486a6010, 0x0401fe9b,
- 0x80c589c0, 0x04020006, 0x0201f800, 0x00105e4b,
- 0x4a034407, 0x00000002, 0x0401f7be, 0x48ee6023,
- 0x58ee580c, 0x4a01d801, 0x00000001, 0x592cd206,
- 0x4869d805, 0x832cd400, 0x00000007, 0x4869d803,
- 0x4895d806, 0x4891d807, 0x4a01d808, 0x0010afa5,
- 0x4a034000, 0x00000001, 0x49334001, 0x0401ff60,
- 0x0401f0da, 0x4a034407, 0x00000003, 0x0401f7a9,
- 0x0201f800, 0x001051ba, 0x598e600b, 0x0201f800,
- 0x00105457, 0x0201f800, 0x001051ba, 0x408e3000,
- 0x0201f800, 0x00105697, 0x59926005, 0x813261c0,
- 0x0400000d, 0x0201f800, 0x00105388, 0x0201f800,
- 0x0010518e, 0x0201f800, 0x00105194, 0x42027800,
- 0x00001000, 0x42028000, 0x0000002e, 0x0201f800,
- 0x0010ba5a, 0x811a3000, 0x83197480, 0x00000004,
- 0x040007ec, 0x040017eb, 0x0201f800, 0x001007cd,
- 0x0201f800, 0x001022e8, 0x497b5079, 0x497b4408,
- 0x4201d000, 0x003d0900, 0x0201f800, 0x00104f7f,
- 0x59c50880, 0x59c510a3, 0x497b4002, 0x0401fe6d,
- 0x0401ff0d, 0x4a03a005, 0x10000000, 0x59c4d005,
- 0x8268d540, 0x000000f0, 0x486b8805, 0x0401fe85,
- 0x0201f800, 0x001022ef, 0x40c50000, 0x80c589c0,
- 0x04020020, 0x59c8d001, 0x8068d1c0, 0x0402001d,
- 0x59dcd006, 0x8268d500, 0x43200f80, 0x0400000a,
- 0x59dcd006, 0x82697480, 0x00000000, 0x83f17500,
- 0x0c000000, 0x04000004, 0x82b97580, 0x0c000000,
- 0x0402000e, 0x59d0d006, 0x8268d500, 0x43dc0700,
- 0x040007e8, 0x59d0d006, 0x82697480, 0x00000000,
- 0x83f17500, 0x0c000000, 0x040007e2, 0x82b97480,
- 0x0c000000, 0x040007df, 0x4a034408, 0x0000dddd,
- 0x808101c0, 0x0402004e, 0x59a0d408, 0x82697480,
- 0x0000dddd, 0x0400004a, 0x59c0d008, 0x8268d500,
- 0x0fffffff, 0x59c8d818, 0x826c0500, 0xf0000000,
- 0x8068d540, 0x486b8008, 0x0201f800, 0x00100b3d,
- 0x59c0d806, 0x4a038006, 0x10000000, 0x59c0d809,
- 0x4883900d, 0x59c8d020, 0x8068f130, 0x59c8d020,
- 0x82690500, 0x00ffffff, 0x59c8d021, 0x8268fd00,
- 0x00ffffff, 0x4a03900d, 0x00000001, 0x59c8d020,
- 0x8068e930, 0x59c4e005, 0x826cd500, 0x00e00000,
- 0x04020004, 0x82797480, 0x00000032, 0x0400002b,
- 0x486fc857, 0x487bc857, 0x4877c857, 0x4883c857,
- 0x487fc857, 0x4873c857, 0x59a9700f, 0x48bbc857,
- 0x0201f800, 0x00102301, 0x4a035079, 0x00000001,
- 0x4200d000, 0x00000064, 0x0401f004, 0x8068d1c0,
- 0x04000028, 0x8068d040, 0x59c0d807, 0x8c6cdd04,
- 0x040007fb, 0x0401fe7d, 0x0201f800, 0x0010308d,
- 0x0201f800, 0x001054e2, 0x0401fe6c, 0x4201d000,
- 0x000186a0, 0x0201f800, 0x00104f7f, 0x488b88a3,
- 0x48878880, 0x59a8d079, 0x8068d1c0, 0x04020713,
- 0x0201f800, 0x00101bc9, 0x0401f030, 0x4a035079,
- 0x00000001, 0x0401f7ec, 0x82757480, 0x000000e1,
- 0x040207d4, 0x407c0000, 0x80817480, 0x040207d1,
- 0x59a8d00f, 0x80697480, 0x040207ce, 0x8270d500,
- 0x000000f0, 0x040207cb, 0x0401fe4a, 0x0401f7d5,
- 0x4a035079, 0x00000001, 0x0201f800, 0x001015c8,
- 0x80c589c0, 0x04000008, 0x59c4d005, 0x8268d500,
- 0x000000f0, 0x04000007, 0x4a034408, 0x0000bbbb,
- 0x0401f7d1, 0x4a034408, 0x0000aaaa, 0x0401f7ce,
- 0x0201f800, 0x001022ef, 0x80c57040, 0x04000008,
- 0x59c0d007, 0x8268d500, 0x000501c0, 0x040007c6,
- 0x4a034408, 0x0000dddd, 0x0401f7c3, 0x4a034408,
- 0x0000cccc, 0x0401f7c0, 0x589d2805, 0x589d2004,
- 0x589d1803, 0x589d1002, 0x589d0801, 0x589d0000,
- 0x829d3c00, 0x00000006, 0x1c01f000, 0x809d3840,
- 0x48813800, 0x592cd006, 0x82697480, 0x01000000,
- 0x04000016, 0x41310000, 0x59a26001, 0x48ee6023,
- 0x58ee580c, 0x4979d801, 0x592cd206, 0x4869d805,
- 0x832cd400, 0x00000007, 0x4869d803, 0x5931700d,
- 0x48b9d806, 0x5931700e, 0x48b9d807, 0x4a01d808,
- 0x0010afa5, 0x4a034000, 0x00000001, 0x40826000,
- 0x0401fe63, 0x0401f009, 0x41310000, 0x59a26001,
- 0x4933c857, 0x0201f800, 0x00105e4d, 0x40826000,
- 0x0201f800, 0x00101c17, 0x589d0000, 0x809d3800,
- 0x1c01f000, 0x829d3c80, 0x00000005, 0x48813800,
- 0x48853801, 0x48893802, 0x488d3803, 0x48913804,
- 0x412d1000, 0x41310800, 0x59a26001, 0x4069d800,
- 0x586b400a, 0x5868d002, 0x82697480, 0x00000200,
- 0x0400003c, 0x58ee580c, 0x59a0d800, 0x806cd000,
- 0x486b4000, 0x592d0001, 0x0401f005, 0x40825800,
- 0x806cd840, 0x04000004, 0x58810001, 0x808101c0,
- 0x040207fb, 0x808101c0, 0x04000012, 0x58ed000c,
- 0x832cd400, 0x00000007, 0x4869d803, 0x592cd206,
- 0x4869d805, 0x5880d205, 0x8268d580, 0x00000103,
- 0x8068d080, 0x8068d000, 0x8068d13e, 0x4869d801,
- 0x0401fe2b, 0x40866000, 0x40825800, 0x0401f03b,
- 0x58ee580c, 0x592cd205, 0x82697480, 0x00000103,
- 0x04000030, 0x41351800, 0x41452000, 0x592cd405,
- 0x8468d55e, 0x486a5c05, 0x42028800, 0x000007fd,
- 0x4200d000, 0x00fffffd, 0x0201f800, 0x0010393d,
- 0x40c66800, 0x80c589c0, 0x04000010, 0x0201f800,
- 0x00107469, 0x80c589c0, 0x04000018, 0x40866000,
- 0x4881d801, 0x4a01d808, 0x0010af7f, 0x0401f00f,
- 0x0201f800, 0x00101c03, 0x0201f800, 0x00105e4b,
- 0x40866000, 0x0401f019, 0x59a26001, 0x0201f800,
- 0x00105e4b, 0x40866000, 0x4a034407, 0x00000002,
- 0x0201f800, 0x00101c0b, 0x408a5800, 0x408e6800,
- 0x40928800, 0x0401f00d, 0x0201f800, 0x00105e4b,
- 0x40866000, 0x4a034407, 0x00000004, 0x0401f7f5,
- 0x0201f800, 0x00105e4b, 0x40866000, 0x0201f800,
- 0x00101bc9, 0x408a5800, 0x589d2004, 0x589d1803,
- 0x589d1002, 0x589d0801, 0x589d0000, 0x829d3c00,
- 0x00000005, 0x1c01f000, 0x829d3c80, 0x00000004,
- 0x48813800, 0x48853801, 0x48893802, 0x488d3803,
- 0x40690800, 0x497bc856, 0x59a0d20d, 0x8068d1c0,
- 0x0400001e, 0x5884d001, 0x4178d800, 0x82697480,
- 0x00000002, 0x04000051, 0x59a26001, 0x5930d00f,
- 0x4068d800, 0x8068d1c0, 0x0400004c, 0x8068d040,
- 0x486a600f, 0x5932580d, 0x5930d80c, 0x586d1800,
- 0x586d1001, 0x586cd002, 0x82690500, 0xfffffffc,
- 0x5930d00e, 0x8068d000, 0x486a600e, 0x82697480,
- 0x00000005, 0x04000034, 0x826cd400, 0x00000003,
- 0x486a600c, 0x0401f012, 0x59a0d40c, 0x8068d0e0,
- 0x59a0da0c, 0x826c0500, 0x0000fffc, 0x80690540,
- 0x4883a003, 0x59a0d40e, 0x8068d0e0, 0x59a0da0e,
- 0x406c0000, 0x80691d40, 0x59a0d411, 0x8068d0e0,
- 0x59a0da11, 0x406c0000, 0x80691540, 0x4201d000,
- 0x00003a98, 0x0201f800, 0x00104f7f, 0x4883a002,
- 0x59a9707a, 0x48bba008, 0x488fa000, 0x488ba001,
- 0x59d0d005, 0x4a03a005, 0x10000000, 0x4178d000,
- 0x04025002, 0x8068d000, 0x8068d1c0, 0x04020007,
- 0x5884d001, 0x8068d000, 0x48690801, 0x4200d800,
- 0x00000001, 0x0401f011, 0x4200d000, 0x0010b016,
- 0x4084d800, 0x4178e000, 0x0201f800, 0x001001e3,
- 0x0401f7f4, 0x497a600e, 0x592e5801, 0x812e59c0,
- 0x040007df, 0x492e600d, 0x832cdc00, 0x00000006,
- 0x486e600c, 0x0401f7da, 0x406d8800, 0x589d1803,
- 0x589d1002, 0x589d0801, 0x589d0000, 0x829d3c00,
- 0x00000004, 0x1c01f000, 0x809d3840, 0x48813800,
- 0x40690000, 0x59d0d006, 0x8268d500, 0x43dc0700,
- 0x0400000a, 0x59d0d006, 0x82697480, 0x00000000,
- 0x83f17500, 0x0c000000, 0x04000004, 0x82b97580,
- 0x0c000000, 0x0402003d, 0x59a0d20d, 0x8068d1c0,
- 0x0400000f, 0x59d17006, 0x48bbc857, 0x59d0d006,
- 0x8c68d504, 0x0400000a, 0x59d0d006, 0x82697480,
- 0x00000000, 0x83f17500, 0x0c000000, 0x04000004,
- 0x82b97580, 0x0c000000, 0x04020010, 0x0401f033,
- 0x4200d000, 0x0010b07e, 0x4080e000, 0x0201f800,
- 0x001001e3, 0x59d0d006, 0x82697480, 0x00000000,
- 0x83f17500, 0x0c000000, 0x040007f5, 0x82b97480,
- 0x0c000000, 0x040007f2, 0x4a03a005, 0x20000000,
- 0x59d0d006, 0x8268d500, 0x43dc0700, 0x04020017,
- 0x5880d801, 0x806d7040, 0x04000017, 0x826d7480,
- 0x00000002, 0x040207e7, 0x4a010001, 0x00000001,
- 0x59d17006, 0x48bbc857, 0x59d0d006, 0x82697480,
- 0x00000000, 0x83f17500, 0x0c000000, 0x04000004,
- 0x82b97580, 0x0c000000, 0x040207df, 0x4080d000,
- 0x0401ff4e, 0x0401f009, 0x4a034408, 0x0000dddd,
- 0x0401f006, 0x48690001, 0x4080d000, 0x0401ff47,
- 0x80c589c0, 0x040207f6, 0x589d0000, 0x809d3800,
- 0x1c01f000, 0x0201f800, 0x001015c8, 0x80c589c0,
- 0x04020002, 0x0401f009, 0x4a034407, 0x00000017,
- 0x0201f800, 0x00101c0b, 0x4203e000, 0x50000000,
- 0x497bc856, 0x0401f000, 0x1c01f000, 0x4068d800,
- 0x59c17009, 0x48bbc857, 0x59c0e009, 0x8270d500,
- 0x00e00000, 0x04000019, 0x586cd000, 0x486b4210,
- 0x586cd000, 0x8068d120, 0x486b4410, 0x8c70e52e,
- 0x0402000e, 0x8c70e52c, 0x04000004, 0x586cd00b,
- 0x8068d000, 0x4868d80b, 0x8c70e52a, 0x04000004,
- 0x586cd00d, 0x8068d000, 0x4868d80d, 0x4200d000,
- 0x00000001, 0x0401f005, 0x586cd00c, 0x8068d000,
- 0x4868d80c, 0x0401f7f0, 0x40698800, 0x1c01f000,
- 0x4068e000, 0x58697003, 0x48bbc857, 0x59a0d40d,
- 0x8068d1c0, 0x04000034, 0x5870d002, 0x4178d800,
- 0x82697480, 0x00000002, 0x04000050, 0x59a26000,
- 0x5930d00f, 0x4068d800, 0x8068d1c0, 0x0400004b,
- 0x8068d040, 0x486a600f, 0x5932580d, 0x5930d80c,
- 0x586cf800, 0x586cf001, 0x586cd002, 0x8268ed00,
- 0xfffffffc, 0x5930d00e, 0x8068d000, 0x486a600e,
- 0x82697480, 0x00000005, 0x04000033, 0x826cd400,
- 0x00000003, 0x486a600c, 0x487f8000, 0x487b8001,
- 0x48778002, 0x59c0d008, 0x8268d500, 0x0fffffff,
- 0x59c8d818, 0x826c0500, 0xf0000000, 0x8068d540,
- 0x486b8008, 0x59c0d006, 0x58717003, 0x48bb8006,
- 0x5870d002, 0x8068d000, 0x4868e002, 0x5870d004,
- 0x8468d540, 0x4868e004, 0x4200d800, 0x00000001,
- 0x0401f022, 0x5870d003, 0x4200d800, 0x00000001,
- 0x82697480, 0x10000000, 0x0402001c, 0x59a0d40f,
- 0x8068d0e0, 0x59a0da0f, 0x406c0000, 0x8068fd40,
- 0x59a0d40a, 0x8068d0e0, 0x59a0da0a, 0x406c0000,
- 0x8068f540, 0x59a0d40c, 0x8068d0e0, 0x59a0da0c,
- 0x826c0500, 0x0000fffc, 0x8068ed40, 0x48778003,
- 0x0401f7d2, 0x497a600e, 0x592e5801, 0x812e59c0,
- 0x040007ce, 0x492e600d, 0x832cdc00, 0x00000006,
- 0x486e600c, 0x0401f7c9, 0x406d8800, 0x1c01f000,
- 0x809d3840, 0x48813800, 0x40690000, 0x59c0d007,
- 0x8268d500, 0x00f507c0, 0x0400000a, 0x59c0d007,
- 0x82697480, 0x00000000, 0x83f17500, 0x0c000000,
- 0x04000004, 0x82b97580, 0x0c000000, 0x0402003c,
- 0x59a0d40d, 0x8068d1c0, 0x0400000c, 0x59c17007,
- 0x48bbc857, 0x59c0d007, 0x82697480, 0x00000000,
- 0x83f17500, 0x0c000000, 0x04000004, 0x82b97580,
- 0x0c000000, 0x04020010, 0x0401f035, 0x4200d000,
- 0x0010b160, 0x4080e000, 0x0201f800, 0x001001e3,
- 0x59c0d007, 0x82697480, 0x00000000, 0x83f17500,
- 0x0c000000, 0x040007f5, 0x82b97480, 0x0c000000,
- 0x040007f2, 0x4a038006, 0x20000000, 0x59c0d007,
- 0x8268d500, 0x00f507c0, 0x04020019, 0x4a010003,
- 0x10000004, 0x5880d802, 0x806d7040, 0x04000017,
- 0x826d7480, 0x00000002, 0x040207e5, 0x4a010002,
- 0x00000001, 0x59c17007, 0x48bbc857, 0x59c0d007,
- 0x82697480, 0x00000000, 0x83f17500, 0x0c000000,
- 0x04000004, 0x82b97580, 0x0c000000, 0x040207dd,
- 0x4080d000, 0x0401ff5b, 0x0401f009, 0x4a034408,
- 0x0000dddd, 0x0401f006, 0x48690002, 0x4080d000,
- 0x0401ff54, 0x80c589c0, 0x040207f6, 0x589d0000,
- 0x809d3800, 0x1c01f000, 0x59a26000, 0x813261c0,
- 0x04000009, 0x59325809, 0x812e59c0, 0x04000005,
- 0x0201f800, 0x00105e4b, 0x0201f800, 0x00100581,
- 0x497b4000, 0x59a26001, 0x813261c0, 0x04000009,
- 0x59325809, 0x812e59c0, 0x04000005, 0x0201f800,
- 0x00105e4b, 0x0201f800, 0x00100581, 0x497b4001,
- 0x1c01f000, 0x809d3840, 0x48813800, 0x40690000,
- 0x0201f800, 0x00102301, 0x0201f800, 0x0010adb2,
- 0x5880d00b, 0x8068d1c0, 0x04020004, 0x5880d00c,
- 0x8068d1c0, 0x04000007, 0x59a0d00d, 0x8068d1c0,
- 0x0402000a, 0x4200d000, 0x00000001, 0x0401f009,
- 0x5880d00d, 0x8068d1c0, 0x04000006, 0x59a0d00d,
- 0x8068d1c0, 0x040007f8, 0x0401ffd0, 0x0401f7f6,
- 0x40698800, 0x589d0000, 0x809d3800, 0x1c01f000,
- 0x809d3840, 0x48813800, 0x4200d000, 0x000000ef,
- 0x0201f800, 0x0010133b, 0x59c4d0a3, 0x8468d55a,
- 0x8468d53a, 0x486b88a3, 0x0201f800, 0x001013a3,
- 0x80c589c0, 0x04000040, 0x4200d000, 0x00000001,
- 0x0201f800, 0x00101599, 0x4200d000, 0x00000001,
- 0x0201f800, 0x0010156f, 0x4201d000, 0x00000014,
- 0x0201f800, 0x00104f4f, 0x59c4d008, 0x8268d540,
- 0x00000280, 0x8268d500, 0xffffffe1, 0x486b8808,
- 0x4a0388a7, 0x0000f7f7, 0x4a038805, 0x04000001,
- 0x4200d000, 0xbe20bfff, 0x4200d800, 0x80018000,
- 0x0201f800, 0x001036d6, 0x4200d000, 0xfffeffff,
- 0x4178d800, 0x0201f800, 0x001036d6, 0x42010000,
- 0x00001387, 0x0401f008, 0x80817040, 0x04000053,
- 0x80810040, 0x42000000, 0xffffffff, 0x80817480,
- 0x04000009, 0x4201d000, 0x00000014, 0x0201f800,
- 0x00104f4f, 0x0201f800, 0x001015c8, 0x80c589c0,
- 0x040007f2, 0x59c4d005, 0x8268dd00, 0x04000000,
- 0x8c68d534, 0x0402001c, 0x59c4d0a4, 0x8268d500,
- 0x0000000f, 0x82697480, 0x00000008, 0x0402003c,
- 0x0401f015, 0x0201f800, 0x001013ae, 0x80c589c0,
- 0x04000006, 0x4178d000, 0x0201f800, 0x00101599,
- 0x4178d000, 0x0401f7bf, 0x0201f800, 0x001013b9,
- 0x80c589c0, 0x04000026, 0x4200d000, 0x00000002,
- 0x0201f800, 0x00101599, 0x4200d000, 0x00000002,
- 0x0401f7b4, 0x4200d000, 0x00020000, 0x0201f800,
- 0x001036dd, 0x4201d000, 0x00000064, 0x0201f800,
- 0x00104f4f, 0x4200d000, 0xfeffffff, 0x4200d800,
- 0x02000000, 0x0201f800, 0x001036d6, 0x4200d000,
- 0xfdffffff, 0x4178d800, 0x0201f800, 0x001036d6,
- 0x4a038805, 0x04000001, 0x59c4d0a4, 0x8268d500,
- 0x0000000f, 0x4178d800, 0x8068d1c0, 0x0402000c,
- 0x4200d800, 0x00000001, 0x0401f009, 0x4200d000,
- 0x00000003, 0x0201f800, 0x00101599, 0x4200d000,
- 0x00000003, 0x0401f78f, 0x40c4d800, 0x406d8800,
- 0x589d0000, 0x809d3800, 0x1c01f000, 0x829d3c80,
- 0x00000003, 0x48813800, 0x48853801, 0x48893802,
- 0x40690000, 0x492fc857, 0x5868a808, 0x58690805,
- 0x4a03b805, 0x20000000, 0x59dcd006, 0x4a03b805,
- 0x30000000, 0x58817006, 0x48bbb800, 0x58817007,
- 0x48bbb801, 0x5881700a, 0x48bbb802, 0x4857b803,
- 0x4a03b805, 0x30000002, 0x59dcd006, 0x4a03b805,
- 0x70000001, 0x59dcd006, 0x4a03b805, 0x10000000,
- 0x59dcd006, 0x82697480, 0x00000000, 0x83f17500,
- 0x0c000000, 0x040007fb, 0x82b97480, 0x0c000000,
- 0x040007f8, 0x4a03b805, 0x20000000, 0x59dcd006,
- 0x8268d500, 0x43200f80, 0x04000005, 0x4a034408,
- 0x0000dddd, 0x4178d000, 0x0401f01a, 0x59dd7000,
- 0x48b90006, 0x59dd7001, 0x48b90007, 0x4084d000,
- 0x808509c0, 0x04000013, 0x412d1000, 0x0201f800,
- 0x00100565, 0x40c65800, 0x80c589c0, 0x04000007,
- 0x4a025a05, 0x0000000a, 0x492d1001, 0x4200d000,
- 0x00000001, 0x0401f007, 0x4080d000, 0x4088d800,
- 0x4084e000, 0x0201f800, 0x001001e3, 0x0401f7f5,
- 0x40698800, 0x589d1002, 0x589d0801, 0x589d0000,
- 0x829d3c00, 0x00000003, 0x1c01f000, 0x809d3840,
- 0x48813800, 0x40690000, 0x497bc856, 0x4203a000,
- 0x00007600, 0x4200d000, 0x00000040, 0x0201f800,
- 0x00101056, 0x4a03a00a, 0x00000001, 0x4a03a005,
- 0x20000000, 0x59d0d006, 0x4a03a005, 0x30000000,
- 0x59d0d006, 0x8c68d50a, 0x040207fe, 0x59a0d20d,
- 0x48690005, 0x8068d1c0, 0x04020002, 0x0401f06d,
- 0x59a0d411, 0x8068d0e0, 0x59a0da11, 0x406c0000,
- 0x8068d540, 0x48690007, 0x59a0d40e, 0x8068d0e0,
- 0x59a0da0e, 0x406c0000, 0x8068d540, 0x48690006,
- 0x59a0d40c, 0x8068d0e0, 0x59a0da0c, 0x826c0500,
- 0x0000fffc, 0x8068d540, 0x48690009, 0x486ba003,
- 0x0201f800, 0x00105e80, 0x40c66000, 0x80c589c0,
- 0x0400004c, 0x49334001, 0x0201f800, 0x00100565,
- 0x40c65800, 0x80c589c0, 0x0400003e, 0x4a025a05,
- 0x00000018, 0x4a025806, 0x00abcdef, 0x492e6009,
- 0x492e600d, 0x58817005, 0x48ba600f, 0x4a02600e,
- 0x00000004, 0x832cd400, 0x00000012, 0x486a600c,
- 0x48690008, 0x4a01000a, 0x0000000c, 0x5880d005,
- 0x8068d040, 0x48690005, 0x4080d000, 0x0401ff64,
- 0x59a0d408, 0x82697480, 0x0000dddd, 0x040007c8,
- 0x5880d005, 0x8068d1c0, 0x040007c5, 0x82697480,
- 0x00000004, 0x04000014, 0x04001013, 0x8268d480,
- 0x00000005, 0x48690005, 0x4a01000a, 0x0000003c,
- 0x832cd400, 0x00000006, 0x48690008, 0x4080d000,
- 0x0401ff4f, 0x80c589c0, 0x040007b5, 0x5880d005,
- 0x82697480, 0x00000004, 0x83f17500, 0x03000000,
- 0x040007ef, 0x4979000a, 0x4178e000, 0x8270e400,
- 0x0000000c, 0x8068d840, 0x406cd000, 0x806cd9c0,
- 0x040207fb, 0x4871000a, 0x486d0005, 0x0401f7e9,
- 0x4200d000, 0x0010b2c7, 0x4200d800, 0x00100565,
- 0x4080e000, 0x0201f800, 0x001001e3, 0x0401f7bc,
- 0x4200d000, 0x0010b2c7, 0x4200d800, 0x00105e80,
- 0x4080e000, 0x0201f800, 0x001001e3, 0x0401f7ae,
- 0x589d0000, 0x809d3800, 0x1c01f000, 0x809d3840,
- 0x48813800, 0x40690000, 0x497bc856, 0x42038000,
- 0x00007700, 0x0201f800, 0x00100b3d, 0x59c0d006,
- 0x59a0d40d, 0x48690005, 0x8068d1c0, 0x04020009,
- 0x497b9009, 0x59e0d003, 0x8268d540, 0x00008060,
- 0x486bc003, 0x4a038009, 0x00e00000, 0x0401f07a,
- 0x59a0d40a, 0x8068d0e0, 0x59a0da0a, 0x406c0000,
- 0x8068d540, 0x48690007, 0x59a0d40f, 0x8068d0e0,
- 0x59a0da0f, 0x406c0000, 0x8068d540, 0x48690006,
- 0x59a0d40c, 0x8068d0e0, 0x59a0da0c, 0x826c0500,
- 0x0000fffc, 0x8068d540, 0x48690009, 0x486bc857,
- 0x58817009, 0x48bb8003, 0x0201f800, 0x00105e80,
- 0x40c66000, 0x80c589c0, 0x04000057, 0x49334000,
- 0x0201f800, 0x00100565, 0x40c65800, 0x80c589c0,
- 0x04000049, 0x4a025a05, 0x00000018, 0x4a025806,
- 0x00abcdef, 0x492e6009, 0x492e600d, 0x58817005,
- 0x48ba600f, 0x4a02600e, 0x00000004, 0x832cd400,
- 0x00000012, 0x486a600c, 0x48690008, 0x4a01000a,
- 0x0000000c, 0x5880d005, 0x8068d040, 0x48690005,
- 0x4080d000, 0x0401fede, 0x59a0d408, 0x82697480,
- 0x0000dddd, 0x040007c6, 0x5880d005, 0x8068d1c0,
- 0x040007bc, 0x82697480, 0x00000004, 0x04000014,
- 0x04001013, 0x8268d480, 0x00000005, 0x48690005,
- 0x4a01000a, 0x0000003c, 0x832cd400, 0x00000006,
- 0x48690008, 0x4080d000, 0x0401fec9, 0x80c589c0,
- 0x04000018, 0x5880d005, 0x82697480, 0x00000004,
- 0x83f17500, 0x03000000, 0x040007ef, 0x4979000a,
- 0x4178e000, 0x8270e400, 0x0000000c, 0x8068d840,
- 0x406cd000, 0x806cd9c0, 0x040207fb, 0x4871000a,
- 0x486d0005, 0x832cd400, 0x00000006, 0x48690008,
- 0x4080d000, 0x0401feb2, 0x80c589c0, 0x040207ea,
- 0x59a0d408, 0x82697480, 0x0000dddd, 0x04020791,
- 0x0401f011, 0x4200d000, 0x0010b34f, 0x4200d800,
- 0x00100565, 0x4080e000, 0x0201f800, 0x001001e3,
- 0x0401f7b1, 0x4200d000, 0x0010b34f, 0x4200d800,
- 0x00105e80, 0x4080e000, 0x0201f800, 0x001001e3,
- 0x0401f7a3, 0x589d0000, 0x809d3800, 0x1c01f000,
- 0x829d3c80, 0x00000002, 0x48813800, 0x48853801,
- 0x40690800, 0x406d0000, 0x0201f800, 0x0010160b,
- 0x40800000, 0x4084d000, 0x80c4dd00, 0x0201f800,
- 0x00101612, 0x589d0801, 0x589d0000, 0x829d3c00,
- 0x00000002, 0x1c01f000, 0x829d3c80, 0x00000002,
- 0x48813800, 0x48853801, 0x40690800, 0x406d0000,
- 0x0201f800, 0x0010160b, 0x40800000, 0x4084d000,
- 0x80c4dd40, 0x0201f800, 0x00101612, 0x589d0801,
- 0x589d0000, 0x829d3c00, 0x00000002, 0x1c01f000,
- 0x809d3840, 0x48a13800, 0x829d3c80, 0x0000000f,
- 0x409d4000, 0x829d3c80, 0x00000005, 0x48813800,
- 0x48853801, 0x48893802, 0x488d3803, 0x48913804,
- 0x490fc857, 0x59c90840, 0x59a9000f, 0x59c510a3,
- 0x59c51808, 0x59c52080, 0x8d0e1d0e, 0x040200a3,
- 0x59a0d407, 0x8268dd00, 0x00000007, 0x826d7480,
- 0x00000002, 0x040000aa, 0x806cd9c0, 0x04000006,
- 0x806d7040, 0x04000144, 0x0201f800, 0x00101c0f,
- 0x0401f17f, 0x4200d000, 0x00000802, 0x4200d800,
- 0x00000002, 0x0401ffc9, 0x0401fdc2, 0x80c589c0,
- 0x04000144, 0x59a0d410, 0x8068d0e0, 0x59a0da10,
- 0x406c0000, 0x8068d540, 0x48694000, 0x497b4408,
- 0x4979400b, 0x4979400c, 0x4979400d, 0x49794002,
- 0x49794001, 0x0201f800, 0x001022e8, 0x0201f800,
- 0x00103071, 0x80c589c0, 0x040000fe, 0x0201f800,
- 0x001051ba, 0x598e600b, 0x0201f800, 0x00105457,
- 0x0201f800, 0x001051ba, 0x417a3000, 0x0201f800,
- 0x00105697, 0x59926005, 0x813261c0, 0x0400000d,
- 0x0201f800, 0x00105388, 0x0201f800, 0x0010518e,
- 0x0201f800, 0x00105194, 0x42027800, 0x00001000,
- 0x42028000, 0x0000002e, 0x0201f800, 0x0010ba5a,
- 0x811a3000, 0x83197480, 0x00000004, 0x040007ec,
- 0x040017eb, 0x0201f800, 0x001007cd, 0x49794004,
- 0x497b4002, 0x40a0d000, 0x0401feed, 0x59a0d408,
- 0x82697480, 0x0000dddd, 0x04000138, 0x40a0d000,
- 0x0401fe5f, 0x59a0d408, 0x82697480, 0x0000dddd,
- 0x04000132, 0x59a0d00d, 0x8068d1c0, 0x040200f2,
- 0x4979400e, 0x40a0d000, 0x0201f800, 0x0010b016,
- 0x0201f800, 0x0010ad58, 0x58a0d004, 0x8068d1c0,
- 0x040000ca, 0x58a0e00e, 0x80717040, 0x04000062,
- 0x59c8d001, 0x8068d1c0, 0x040200d6, 0x59a0d002,
- 0x42000000, 0xfeedbeef, 0x80697480, 0x040000db,
- 0x4a014003, 0x10000000, 0x40a0d000, 0x0401fc7d,
- 0x4a034002, 0xfeedbeef, 0x40a0d000, 0x0201f800,
- 0x0010b07e, 0x59a0d408, 0x82697480, 0x0000dddd,
- 0x04000028, 0x40a0d000, 0x0401fcce, 0x59a0d408,
- 0x82697480, 0x0000dddd, 0x04000022, 0x0201f800,
- 0x0010ada0, 0x59c4d005, 0x8c68d534, 0x0402003c,
- 0x0201f800, 0x001022ef, 0x80c589c0, 0x040200e4,
- 0x59a0d00d, 0x8068d1c0, 0x04000016, 0x59a26000,
- 0x59a0d40d, 0x8068d1c0, 0x04000004, 0x5930d00f,
- 0x8068d1c0, 0x040207c7, 0x59a26001, 0x59a0d20d,
- 0x8068d1c0, 0x04000004, 0x5930d00f, 0x8068d1c0,
- 0x040207c0, 0x58a0d002, 0x8068d1c0, 0x040207bd,
- 0x58a0d001, 0x8068d1c0, 0x040207ba, 0x0401fcff,
- 0x58a0e00e, 0x0401f024, 0x0201f800, 0x001013cf,
- 0x80c589c0, 0x0400075b, 0x4200d000, 0x00000003,
- 0x0201f800, 0x00101599, 0x4200d000, 0x00000003,
- 0x0201f800, 0x0010156f, 0x0401f752, 0x8d0e1d0e,
- 0x0402000c, 0x0201f800, 0x0010410f, 0x80c589c0,
- 0x040200bf, 0x836d7480, 0x00000003, 0x04020005,
- 0x59c4d0a4, 0x8268d500, 0x0000000f, 0x0400075a,
- 0x0201f800, 0x00101c13, 0x0401f0cd, 0x4a01400d,
- 0x0000bbbb, 0x4a01400e, 0x00000001, 0x4200e000,
- 0x00000001, 0x58a0d000, 0x8068d040, 0x48694000,
- 0x4200d800, 0x00030d40, 0x80717040, 0x04020004,
- 0x0401f097, 0x806cd840, 0x04000004, 0x59c0d007,
- 0x8c68d504, 0x040007fc, 0x59c0d007, 0x8c68d504,
- 0x0402008a, 0x59c0d007, 0x8268d500, 0x000501c0,
- 0x04020003, 0x0201f800, 0x0010b0d5, 0x4a01400d,
- 0x0000dddd, 0x40a0d000, 0x0401fcd7, 0x80c589c0,
- 0x04020004, 0x58a0d000, 0x8068d1c0, 0x04020764,
- 0x0201f800, 0x0010308d, 0x0201f800, 0x001054e2,
- 0x0201f800, 0x0010ada6, 0x4201d000, 0x000186a0,
- 0x48938880, 0x488f8808, 0x488b88a3, 0x4883500f,
- 0x48879040, 0x42038000, 0x00007700, 0x4a038009,
- 0xf4f60000, 0x4a038891, 0x0000ffff, 0x4a03900d,
- 0x00000040, 0x0201f800, 0x001006df, 0x4a0370e8,
- 0x00000001, 0x59a0d407, 0x8268d500, 0x00000003,
- 0x82697480, 0x00000002, 0x04000010, 0x4200d000,
- 0x00000802, 0x4200d800, 0xfffffffc, 0x0401fec1,
- 0x4200d000, 0x0000240c, 0x4200d800, 0xffffff7f,
- 0x0401febc, 0x0201f800, 0x00104125, 0x40c50000,
- 0x80c589c0, 0x04000067, 0x59a0d408, 0x82697480,
- 0x0000dddd, 0x0400000f, 0x58a0d80b, 0x806cd9c0,
- 0x04020007, 0x58a0d00c, 0x8068d1c0, 0x04020004,
- 0x58a0d00d, 0x8068d1c0, 0x0400006b, 0x486f4407,
- 0x58a0d00c, 0x486b4208, 0x58a0d00d, 0x486b4408,
- 0x0201f800, 0x00101c1b, 0x0401f065, 0x59c8d001,
- 0x8068d1c0, 0x04020738, 0x40a0d000, 0x0201f800,
- 0x0010b07e, 0x59a0d408, 0x82697480, 0x0000dddd,
- 0x04000731, 0x0201f800, 0x001022ef, 0x80c589c0,
- 0x040007f3, 0x0201f800, 0x0010b0d5, 0x4a01400d,
- 0x0000aaaa, 0x4a01400e, 0x00000001, 0x0401f726,
- 0x40a0d000, 0x0201f800, 0x0010b0e3, 0x80c589c0,
- 0x04020781, 0x59a0d002, 0x42000000, 0xfeedbeef,
- 0x80697480, 0x04020727, 0x4a014003, 0x10000004,
- 0x0401f726, 0x40a0d000, 0x0201f800, 0x0010b016,
- 0x0401f70c, 0x4200d000, 0x00000802, 0x0401fe8b,
- 0x4200d000, 0x0000240c, 0x4200d800, 0x00000080,
- 0x0401fe86, 0x0401fc7f, 0x80c589c0, 0x040206be,
- 0x4084d000, 0x4088d800, 0x408ce000, 0x0201f800,
- 0x001001e3, 0x0401f6b8, 0x40a0d000, 0x0401fc56,
- 0x80c589c0, 0x0400077c, 0x0401f782, 0x40a0d000,
- 0x0401fc51, 0x80c589c0, 0x0402077e, 0x58a0d000,
- 0x8068d1c0, 0x04020774, 0x0401f77a, 0x4a01400d,
- 0x0000cccc, 0x58a0d000, 0x486b4210, 0x58a0d000,
- 0x8068d120, 0x486b4410, 0x0401f74f, 0x4a034407,
- 0x00000016, 0x0201f800, 0x00101c0b, 0x0401f014,
- 0x4a0388a7, 0x0000f7f7, 0x4200d000, 0xbeffffff,
- 0x4200d800, 0x80018000, 0x0201f800, 0x001036d6,
- 0x4200d000, 0xfffeffff, 0x4080d800, 0x0201f800,
- 0x001036d6, 0x0401f78d, 0x40a0d000, 0x0401fc2e,
- 0x0401f75c, 0x0201f800, 0x00101bc9, 0x589d2004,
- 0x589d1803, 0x589d1002, 0x589d0801, 0x589d0000,
- 0x829d3c00, 0x00000014, 0x589d4000, 0x809d3800,
- 0x1c01f000, 0x4937c857, 0x5934d200, 0x8468d502,
- 0x486a6a00, 0x1c01f000, 0x829d3c80, 0x00000002,
- 0x48813800, 0x48853801, 0x59a8d006, 0x82690d00,
- 0x00004000, 0x4178d800, 0x8c68d51c, 0x0402001f,
- 0x4937c857, 0x42010000, 0x00000001, 0x0201f800,
- 0x00105e80, 0x40c66000, 0x80c589c0, 0x04020003,
- 0x4080d800, 0x0401f015, 0x4935880a, 0x48818c07,
- 0x40867800, 0x0201f800, 0x0010390b, 0x59a8d016,
- 0x8068d000, 0x486b5016, 0x599cd019, 0x40867000,
- 0x8c68d50e, 0x04020003, 0x42027000, 0x00000004,
- 0x0201f800, 0x00105eaa, 0x599cd208, 0x486a6c12,
- 0x41790000, 0x4080d800, 0x406d8800, 0x589d0801,
- 0x589d0000, 0x829d3c00, 0x00000002, 0x1c01f000,
- 0x829d3c80, 0x00000004, 0x48813800, 0x48853801,
- 0x48893802, 0x488d3803, 0x41350800, 0x41451000,
- 0x412d1800, 0x4943c857, 0x493fc857, 0x0201f800,
- 0x001051ba, 0x40c50000, 0x0201f800, 0x0010bcde,
- 0x0201f800, 0x0010bcce, 0x0201f800, 0x0010bd78,
- 0x0201f800, 0x0010bebc, 0x808101c0, 0x04000003,
- 0x0201f800, 0x001051ab, 0x417a8800, 0x0401f00a,
- 0x58c4d200, 0x8c68d50e, 0x0400000e, 0x81468800,
- 0x83457480, 0x000007ef, 0x83f17500, 0x03000000,
- 0x04000027, 0x0201f800, 0x001039cf, 0x40c66800,
- 0x80c589c0, 0x040007f6, 0x8d3e7d06, 0x040207f1,
- 0x497a6c0b, 0x8d3e7d18, 0x0400003f, 0x5935000f,
- 0x0401f007, 0x49410207, 0x40825800, 0x58810000,
- 0x492fc857, 0x0201f800, 0x0002032c, 0x808101c0,
- 0x040207f9, 0x497a680f, 0x497a6810, 0x4937c857,
- 0x4a026c00, 0x00000707, 0x497a6a03, 0x497a6811,
- 0x599cd401, 0x486a6a0b, 0x5934d402, 0x8268d500,
- 0x000000ff, 0x486a6c02, 0x81468800, 0x83457480,
- 0x000007ef, 0x040007dc, 0x040017db, 0x8d3e7d02,
- 0x0400002a, 0x497b5018, 0x42028800, 0x000007f0,
- 0x0401f007, 0x81468800, 0x83457480, 0x000007ff,
- 0x83f17500, 0x03000000, 0x04000020, 0x0201f800,
- 0x001039cf, 0x40c66800, 0x80c589c0, 0x040007f6,
- 0x48c7c857, 0x4a018c00, 0x00000707, 0x58c4d00c,
- 0x8068d1c0, 0x040207f0, 0x58c4d00f, 0x8068d1c0,
- 0x040207ed, 0x0201f800, 0x0010370a, 0x81468800,
- 0x83457480, 0x000007ff, 0x040007ed, 0x040017ec,
- 0x0401f00a, 0x4937c857, 0x8d0e1d20, 0x04000004,
- 0x4a026c00, 0x00000707, 0x0401f7ad, 0x0201f800,
- 0x0010370a, 0x0401f7aa, 0x40866800, 0x408a8800,
- 0x408e5800, 0x589d1803, 0x589d1002, 0x589d0801,
- 0x589d0000, 0x829d3c00, 0x00000004, 0x1c01f000,
- 0x829d3c80, 0x00000006, 0x48813800, 0x48853801,
- 0x48893802, 0x488d3803, 0x48913804, 0x48953805,
- 0x41352800, 0x41412000, 0x41451800, 0x412d1000,
- 0x4933c857, 0x493fc857, 0x0201f800, 0x001051ba,
- 0x40c50800, 0x5932680a, 0x813669c0, 0x0400002b,
- 0x5934d403, 0x406a8800, 0x42028000, 0x00000029,
- 0x0201f800, 0x0010bb9e, 0x0201f800, 0x0010bc6f,
- 0x0201f800, 0x0010bd08, 0x0201f800, 0x0010c0ee,
- 0x4937c857, 0x8d3e7d06, 0x0402001f, 0x497a6c0b,
- 0x8d3e7d18, 0x04000022, 0x5935000f, 0x808101c0,
- 0x0400000b, 0x49410207, 0x40825800, 0x58810000,
- 0x492fc857, 0x0201f800, 0x0002032c, 0x808101c0,
- 0x040207f9, 0x4882680f, 0x48826810, 0x4937c857,
- 0x4a026c00, 0x00000707, 0x497a6a03, 0x497a6811,
- 0x599cd401, 0x486a6a0b, 0x5934d402, 0x8268d500,
- 0x000000ff, 0x486a6c02, 0x808509c0, 0x04000014,
- 0x0401f00d, 0x5934d200, 0x8c68d50e, 0x040207fb,
- 0x497a6c0b, 0x8d3e7d18, 0x040207e0, 0x8d0e1d20,
- 0x04000008, 0x4a026c00, 0x00000707, 0x808509c0,
- 0x04000007, 0x0201f800, 0x001051ab, 0x0401f004,
- 0x0201f800, 0x0010370a, 0x0401f7ec, 0x408a5800,
- 0x408e8800, 0x40928000, 0x40966800, 0x589d2805,
- 0x589d2004, 0x589d1803, 0x589d1002, 0x589d0801,
- 0x589d0000, 0x829d3c00, 0x00000006, 0x1c01f000,
- 0x809d3840, 0x48813800, 0x4937c857, 0x42010000,
- 0x00000001, 0x0201f800, 0x00105e80, 0x40c66000,
- 0x80c589c0, 0x0400001d, 0x4935880a, 0x5934d403,
- 0x82697480, 0x000007fe, 0x04000003, 0x417a7800,
- 0x0401ff90, 0x48826407, 0x417a7800, 0x0201f800,
- 0x0010390b, 0x4200d000, 0x00000003, 0x0201f800,
- 0x00103915, 0x836d7480, 0x00000003, 0x04000004,
- 0x59a8d016, 0x8068d000, 0x486b5016, 0x42027000,
- 0x00000002, 0x0201f800, 0x00105eaa, 0x599cd208,
- 0x486a6c12, 0x41790000, 0x40818800, 0x589d0000,
- 0x809d3800, 0x1c01f000, 0x829d3c80, 0x00000002,
- 0x48813800, 0x48853801, 0x497bc856, 0x42010000,
- 0x00000001, 0x48835017, 0x42028800, 0x000007fe,
- 0x4200d000, 0x00fffffe, 0x0201f800, 0x0010393d,
- 0x40c66800, 0x80c589c0, 0x04000012, 0x0401feb2,
- 0x0401ffc4, 0x40c50800, 0x80c589c0, 0x0402000d,
- 0x599cd208, 0x486a6c12, 0x59a8d21b, 0x8268d500,
- 0xffffdefc, 0x486b521b, 0x59a8d21b, 0x8468d54e,
- 0x486b521b, 0x0201f800, 0x00107415, 0x40850000,
- 0x40818800, 0x589d0801, 0x589d0000, 0x829d3c00,
- 0x00000002, 0x1c01f000, 0x829d3c80, 0x00000005,
- 0x48813800, 0x48853801, 0x48893802, 0x488d3803,
- 0x48913804, 0x41791000, 0x59a8d817, 0x59a8d00f,
- 0x82691d00, 0x000000ff, 0x486fc857, 0x826d7480,
- 0x0000ffff, 0x04000059, 0x826d7480, 0x0000007e,
- 0x83f17500, 0x03000000, 0x04000044, 0x406d1000,
- 0x497bc856, 0x406c0000, 0x4200d000, 0x0000007e,
- 0x8068b480, 0x8058b1c0, 0x0400003c, 0x42012000,
- 0x00101a23, 0x0401f014, 0x42010800, 0x00000001,
- 0x0201f800, 0x00103e85, 0x0201f800, 0x00103c47,
- 0x80c57040, 0x04000034, 0x59a8d06f, 0x8c68d502,
- 0x04020041, 0x4937c857, 0x599cd019, 0x8c68d50e,
- 0x04000066, 0x8058b040, 0x80891000, 0x8058b1c0,
- 0x04000026, 0x40880000, 0x8090d400, 0x5868d000,
- 0x82690500, 0x000000ff, 0x408c0000, 0x80817480,
- 0x040007f5, 0x4080d000, 0x0201f800, 0x0010c758,
- 0x80c589c0, 0x0400005e, 0x59a8d086, 0x8c68d502,
- 0x04000007, 0x4200d000, 0x00000010, 0x0201f800,
- 0x00103e86, 0x80c57040, 0x04000010, 0x41790800,
- 0x0201f800, 0x001039cf, 0x80c589c0, 0x040207d3,
- 0x599cd019, 0x8c68d50e, 0x040207df, 0x4080d000,
- 0x0201f800, 0x00103943, 0x80c589c0, 0x040207cd,
- 0x488b5017, 0x0401f048, 0x4a035017, 0x0000ffff,
- 0x0401f045, 0x8d0e1d02, 0x04020034, 0x59a8d06f,
- 0x8c68d500, 0x04000005, 0x0201f800, 0x001019eb,
- 0x80c57040, 0x040007cc, 0x0401fe3c, 0x80c57040,
- 0x040207c9, 0x0401f7ef, 0x4200b000, 0x0000007e,
- 0x0401f7b1, 0x0201f800, 0x00103c73, 0x40c50000,
- 0x80c589c0, 0x040207c0, 0x808509c0, 0x04000029,
- 0x0201f800, 0x001019eb, 0x80c57040, 0x040007ba,
- 0x42026000, 0x0010cc6c, 0x4936600a, 0x48826009,
- 0x40827800, 0x0401fed3, 0x4200d000, 0x00109878,
- 0x0201f800, 0x0010895e, 0x8d0e1d20, 0x040007ae,
- 0x41450000, 0x41410800, 0x5934d403, 0x406a8800,
- 0x42028000, 0x00000029, 0x4178d000, 0x4200d800,
- 0x00000008, 0x0201f800, 0x00108398, 0x40828800,
- 0x40868000, 0x0401f7a0, 0x5934d200, 0x8c68d50e,
- 0x04000796, 0x0401f7ca, 0x0401fe07, 0x0401ff19,
- 0x80c57040, 0x04020798, 0x488b5017, 0x0401f796,
- 0x0201f800, 0x001039a7, 0x0401f793, 0x4937c857,
- 0x0401f7b8, 0x589d2004, 0x589d1803, 0x589d1002,
- 0x589d0801, 0x589d0000, 0x829d3c00, 0x00000005,
- 0x1c01f000, 0x829d3c80, 0x00000005, 0x48813800,
- 0x48853801, 0x48893802, 0x488d3803, 0x48913804,
- 0x59a8d00f, 0x82691d00, 0x000000ff, 0x59a90817,
- 0x82857480, 0x0000ffff, 0x0400006a, 0x41791000,
- 0x42012000, 0x00109953, 0x80840104, 0x8090d400,
- 0x5868d000, 0x8284dd00, 0x00000003, 0x826d7480,
- 0x00000002, 0x04000057, 0x826d7480, 0x00000002,
- 0x83f17500, 0x03000000, 0x04000030, 0x806d7040,
- 0x04000052, 0x82690500, 0x000000ff, 0x82817480,
- 0x000000ff, 0x04000032, 0x40800000, 0x4200d000,
- 0x00101a23, 0x8068d400, 0x5868d000, 0x8068d110,
- 0x82697480, 0x00000080, 0x0400001c, 0x408c0000,
- 0x80817480, 0x04000019, 0x808101c0, 0x04000017,
- 0x59a8d086, 0x8c68d502, 0x04000007, 0x4200d000,
- 0x00000010, 0x0201f800, 0x00103e86, 0x80c57040,
- 0x0400003f, 0x417a8800, 0x4080d000, 0x0201f800,
- 0x0010c7d1, 0x80c589c0, 0x0400002c, 0x0201f800,
- 0x0010398a, 0x80c589c0, 0x0402002e, 0x599cd019,
- 0x8c68d50e, 0x0400001a, 0x80850800, 0x80897040,
- 0x040207c6, 0x0401f030, 0x826d7480, 0x00000003,
- 0x040207d1, 0x8068d130, 0x82690500, 0x000000ff,
- 0x82817480, 0x000000ff, 0x040207d0, 0x830cd500,
- 0x00000003, 0x04020022, 0x59a8d06f, 0x8468d542,
- 0x486b506f, 0x4a035017, 0x0000ffff, 0x0401fefb,
- 0x42011000, 0x00000001, 0x0401f7e9, 0x4080d000,
- 0x0201f800, 0x0010393d, 0x80c589c0, 0x04000007,
- 0x0201f800, 0x00103e85, 0x0401fd8b, 0x0401fe9d,
- 0x80c589c0, 0x040007dd, 0x48875017, 0x0401f00e,
- 0x8068d120, 0x0401f7b0, 0x8068d110, 0x0401f7ae,
- 0x0201f800, 0x00103e85, 0x0401fd84, 0x0401f7f5,
- 0x42010800, 0x00000001, 0x0401f795, 0x4a035017,
- 0x0000ffff, 0x589d2004, 0x589d1803, 0x589d1002,
- 0x589d0801, 0x589d0000, 0x829d3c00, 0x00000005,
- 0x1c01f000, 0x8c68d504, 0x04000004, 0x4a035017,
- 0x0000ffff, 0x0401f009, 0x59a8d06f, 0x8c68d500,
- 0x04000003, 0x8c68d502, 0x04000003, 0x0401fecb,
- 0x0401f002, 0x0401ff70, 0x1c01f000, 0x809d3840,
- 0x48813800, 0x59a9021b, 0x0201f800, 0x00103bbd,
- 0x80c589c0, 0x04000002, 0x0401f01d, 0x0201f800,
- 0x0010410f, 0x80c589c0, 0x04000007, 0x8c810500,
- 0x0402000a, 0x8c81050e, 0x040207f8, 0x0401fe8f,
- 0x0401f013, 0x8c810506, 0x040207f9, 0x4080d000,
- 0x0401ffdd, 0x0401f00e, 0x0201f800, 0x00101a1a,
- 0x80c589c0, 0x040207ed, 0x0201f800, 0x0010410f,
- 0x80c589c0, 0x04000004, 0x4a035017, 0x0000ffff,
- 0x0401f003, 0x4080d000, 0x0401ffcf, 0x589d0000,
- 0x809d3800, 0x1c01f000, 0x829d3c80, 0x00000003,
- 0x48813800, 0x48853801, 0x48893802, 0x40690800,
- 0x406d1000, 0x40d50000, 0x0201f800, 0x00105194,
- 0x5880d02f, 0x41300000, 0x80697480, 0x04000018,
- 0x5880d02e, 0x41300000, 0x80697480, 0x0400001f,
- 0x5930d800, 0x806cd9c0, 0x04020008, 0x59317001,
- 0x48b91001, 0x5930d001, 0x8068d1c0, 0x04020025,
- 0x488a680c, 0x0401f038, 0x5930d801, 0x806cd9c0,
- 0x04000022, 0x59317000, 0x48b8d800, 0x486d0800,
- 0x497a6001, 0x497a6000, 0x0401f02f, 0x5930d801,
- 0x806cd9c0, 0x04000010, 0x5930d000, 0x8068d1c0,
- 0x04020025, 0x486d002e, 0x59317001, 0x48b9002f,
- 0x497a6001, 0x0401f024, 0x5930d001, 0x8068d1c0,
- 0x04020013, 0x4885002e, 0x48690800, 0x486a680c,
- 0x0401f01d, 0x5930d000, 0x8068d1c0, 0x04020012,
- 0x486d002f, 0x486d002e, 0x497a680c, 0x0401f016,
- 0x486e6001, 0x0401f014, 0x59317000, 0x48b90800,
- 0x486e680c, 0x497a6000, 0x0401f00f, 0x59317001,
- 0x48b9002e, 0x59317001, 0x48b90800, 0x497a6001,
- 0x0401f009, 0x59317000, 0x48b9002f, 0x486e6000,
- 0x0401f7ee, 0x59317000, 0x48b8d800, 0x497a6000,
- 0x0401f7da, 0x589d1002, 0x589d0801, 0x589d0000,
- 0x829d3c00, 0x00000003, 0x1c01f000, 0x809d3840,
- 0x48a13800, 0x829d3c80, 0x00000005, 0x409d4000,
- 0x829d3c80, 0x00000005, 0x48813800, 0x48853801,
- 0x48893802, 0x488d3803, 0x48913804, 0x41790800,
- 0x40850000, 0x4933c857, 0x0201f800, 0x001051ba,
- 0x40c52000, 0x41351800, 0x41191000, 0x49914003,
- 0x49d14000, 0x49a54001, 0x49154002, 0x48d94004,
- 0x5932680a, 0x58d4e02f, 0x4070d800, 0x8070e1c0,
- 0x04020008, 0x0401f01e, 0x406ce000, 0x586cd800,
- 0x806cd9c0, 0x0400001a, 0x808509c0, 0x04020018,
- 0x41300000, 0x806d7480, 0x04000011, 0x586cd00a,
- 0x41340000, 0x80697480, 0x040207f4, 0x406d0000,
- 0x586cd801, 0x806cd9c0, 0x040007f2, 0x41300000,
- 0x0401f005, 0x406d0000, 0x586cd801, 0x806cd9c0,
- 0x040007ec, 0x806d7480, 0x040207fb, 0x42010800,
- 0x00000001, 0x806cd9c0, 0x040207e8, 0x80857040,
- 0x04000020, 0x417a3000, 0x0201f800, 0x00105697,
- 0x5990d005, 0x41300000, 0x80697480, 0x04000010,
- 0x811a3000, 0x83197480, 0x00000004, 0x040007f7,
- 0x040017f6, 0x408a3000, 0x408e6800, 0x58a32003,
- 0x58a3a000, 0x58a34801, 0x58a22802, 0x58a1b004,
- 0x80917040, 0x04020011, 0x0401f00e, 0x42010800,
- 0x00000001, 0x0201f800, 0x00105388, 0x0201f800,
- 0x0010518e, 0x0201f800, 0x00105194, 0x0401f7ee,
- 0x4070d000, 0x4080d800, 0x0401ff48, 0x0401f7ea,
- 0x0201f800, 0x001051ab, 0x40858800, 0x589d2004,
- 0x589d1803, 0x589d1002, 0x589d0801, 0x589d0000,
- 0x829d3c00, 0x0000000a, 0x589d4000, 0x809d3800,
- 0x1c01f000, 0x829d3c80, 0x00000002, 0x48813800,
- 0x48853801, 0x40690000, 0x59310800, 0x497a6000,
- 0x0201f800, 0x00105194, 0x808101c0, 0x04000008,
- 0x48850000, 0x598cd008, 0x41300000, 0x80697480,
- 0x0402000b, 0x48831808, 0x0401f009, 0x598cd008,
- 0x41300000, 0x80697480, 0x04000003, 0x48871809,
- 0x0401f003, 0x48831808, 0x48831809, 0x0201f800,
- 0x001051a4, 0x589d0801, 0x589d0000, 0x829d3c00,
- 0x00000002, 0x1c01f000, 0x829d3c80, 0x00000002,
- 0x48813800, 0x48853801, 0x598d0009, 0x41790800,
- 0x4933c857, 0x813261c0, 0x04020007, 0x0401f00a,
- 0x41300000, 0x80817480, 0x0400000e, 0x40810800,
- 0x58810000, 0x808101c0, 0x040207fa, 0x4178d000,
- 0x0401f015, 0x4200d000, 0x000005aa, 0x4080d800,
- 0x4084e000, 0x0201f800, 0x001001e3, 0x0401f7f6,
- 0x4084d000, 0x0401ffc4, 0x598cd00b, 0x41300000,
- 0x80697480, 0x04000005, 0x497a6008, 0x4200d000,
- 0x00000001, 0x0401f004, 0x0201f800, 0x0010567f,
- 0x0401f7fa, 0x40698800, 0x589d0801, 0x589d0000,
- 0x829d3c00, 0x00000002, 0x1c01f000, 0x829d3c80,
- 0x00000002, 0x48813800, 0x48853801, 0x40690000,
- 0x59310800, 0x497a6000, 0x0201f800, 0x00105194,
- 0x808101c0, 0x04000008, 0x48850000, 0x598cd006,
- 0x41300000, 0x80697480, 0x0402000b, 0x48831806,
- 0x0401f009, 0x598cd006, 0x41300000, 0x80697480,
- 0x04000003, 0x48871807, 0x0401f003, 0x48831806,
- 0x48831807, 0x0201f800, 0x001051a4, 0x589d0801,
- 0x589d0000, 0x829d3c00, 0x00000002, 0x1c01f000,
- 0x829d3c80, 0x00000002, 0x48813800, 0x48853801,
- 0x598d0007, 0x41790800, 0x4933c857, 0x813261c0,
- 0x04020007, 0x0401f017, 0x41300000, 0x80817480,
- 0x04000007, 0x40810800, 0x58810000, 0x808101c0,
- 0x040207fa, 0x4178d000, 0x0401f01a, 0x4084d000,
- 0x0401ffcb, 0x598cd00b, 0x41300000, 0x80697480,
- 0x04000011, 0x5930d403, 0x82697480, 0x00000042,
- 0x0400000b, 0x4200d000, 0x00000001, 0x0401f00d,
- 0x4200d000, 0x00000561, 0x4080d800, 0x4084e000,
- 0x0201f800, 0x001001e3, 0x0401f7e9, 0x497a6008,
- 0x0401f7f5, 0x0201f800, 0x0010567f, 0x0401f7ee,
- 0x40698800, 0x589d0801, 0x589d0000, 0x829d3c00,
- 0x00000002, 0x1c01f000, 0x829d3c80, 0x00000002,
- 0x48813800, 0x48853801, 0x40690000, 0x59310800,
- 0x497a6000, 0x0201f800, 0x00105194, 0x808101c0,
- 0x04000008, 0x48850000, 0x598cd002, 0x41300000,
- 0x80697480, 0x0402000b, 0x48831802, 0x0401f009,
- 0x598cd002, 0x41300000, 0x80697480, 0x04000003,
- 0x48871803, 0x0401f003, 0x48831802, 0x48831803,
- 0x0201f800, 0x001051a4, 0x589d0801, 0x589d0000,
- 0x829d3c00, 0x00000002, 0x1c01f000, 0x829d3c80,
- 0x00000002, 0x48813800, 0x48853801, 0x598d0003,
- 0x40810800, 0x4933c857, 0x813261c0, 0x04020007,
- 0x0401f022, 0x41300000, 0x80817480, 0x04000007,
- 0x40810800, 0x58810000, 0x808101c0, 0x040207fa,
- 0x4178d000, 0x0401f02b, 0x598cd00b, 0x80697480,
- 0x04000025, 0x0201f800, 0x00105194, 0x598cd003,
- 0x40800000, 0x80697480, 0x04000017, 0x598cd002,
- 0x80697480, 0x04000009, 0x58817000, 0x48b90800,
- 0x49790000, 0x0201f800, 0x001051a4, 0x4200d000,
- 0x00000001, 0x0401f017, 0x48871802, 0x49790000,
- 0x49790800, 0x0401f7f8, 0x4200d000, 0x000005ed,
- 0x4080d800, 0x4080e000, 0x0201f800, 0x001001e3,
- 0x0401f7de, 0x58817000, 0x48bb1803, 0x49790000,
- 0x598cd002, 0x80697480, 0x040207eb, 0x497b1802,
- 0x0401f7e9, 0x0201f800, 0x0010567f, 0x0401f7da,
- 0x40698800, 0x589d0801, 0x589d0000, 0x829d3c00,
- 0x00000002, 0x1c01f000, 0x829d3c80, 0x00000002,
- 0x48813800, 0x48853801, 0x41790000, 0x0201f800,
- 0x001051ba, 0x40c50800, 0x0401ff62, 0x80c57040,
- 0x04000007, 0x0401ff11, 0x80c57040, 0x04000004,
- 0x0401ffaf, 0x80c57040, 0x04020002, 0x40c50000,
- 0x80857040, 0x04020003, 0x0201f800, 0x001051ab,
- 0x40818800, 0x589d0801, 0x589d0000, 0x829d3c00,
- 0x00000002, 0x1c01f000, 0x829d3c80, 0x00000002,
- 0x48813800, 0x48853801, 0x5c00d000, 0x4c680000,
- 0x486bc857, 0x41350000, 0x412d0800, 0x5932680a,
- 0x59325809, 0x4933c857, 0x4943c857, 0x493fc857,
- 0x5930d407, 0x486bc857, 0x5930dc07, 0x806c0040,
- 0x4000d000, 0x82697480, 0x00000010, 0x83f17500,
- 0x03000000, 0x04000013, 0x0c01f001, 0x0010babf,
- 0x0010ba97, 0x0010baa5, 0x0010babf, 0x0010bac8,
- 0x0010bad5, 0x0010ba84, 0x0010ba84, 0x0010ba84,
- 0x0010badf, 0x0010ba84, 0x0010ba84, 0x0010ba84,
- 0x0010ba84, 0x0010ba84, 0x0010ba8a, 0x0010ba8a,
- 0x4200d000, 0x00000a7f, 0x4130e000, 0x0201f800,
- 0x001001e3, 0x0401f08b, 0x0201f800, 0x00107175,
- 0x80c589c0, 0x0402005b, 0x59325819, 0x0201f800,
- 0x00100581, 0x0201f800, 0x00105e4d, 0x8d3e7d1c,
- 0x04000080, 0x497a600a, 0x0401f07e, 0x0201f800,
- 0x00107175, 0x80c589c0, 0x040007f7, 0x49425a07,
- 0x0201f800, 0x0002032c, 0x5930d21f, 0x82697480,
- 0x00000003, 0x040207f0, 0x0201f800, 0x0010724a,
- 0x0401f7ed, 0x5930d008, 0x8c68d500, 0x04020045,
- 0x0201f800, 0x00107175, 0x80c589c0, 0x040007e6,
- 0x592cd205, 0x8268d500, 0x000000ff, 0x82697480,
- 0x00000014, 0x04000003, 0x0201f800, 0x0010724a,
- 0x4a025a05, 0x00000103, 0x49425a07, 0x497a580a,
- 0x0201f800, 0x001072c7, 0x0201f800, 0x001085c4,
- 0x0201f800, 0x0002032c, 0x0401f7d3, 0x0201f800,
- 0x0010bde8, 0x80c589c0, 0x04020030, 0x0201f800,
- 0x00107424, 0x0201f800, 0x0010646b, 0x0401f7ca,
- 0x42000000, 0x0010cc48, 0x81317480, 0x0400002a,
- 0x0201f800, 0x00107175, 0x80c589c0, 0x040007c2,
- 0x4200d000, 0x000009c8, 0x412cd800, 0x4130e000,
- 0x0401f7b3, 0x5930d008, 0x8c68d500, 0x04020018,
- 0x0201f800, 0x00107175, 0x80c589c0, 0x040007b6,
- 0x0201f800, 0x0010837d, 0x0401f7b3, 0x0201f800,
- 0x00107175, 0x80c589c0, 0x040007af, 0x49425a07,
- 0x497a5c0a, 0x0201f800, 0x0002032c, 0x0401f7aa,
- 0x49425a07, 0x0201f800, 0x0002032c, 0x0401f7a3,
- 0x0201f800, 0x00100b11, 0x0401f7ba, 0x0201f800,
- 0x00100b11, 0x0401f7e7, 0x0201f800, 0x00101992,
- 0x0401f7cf, 0x0201f800, 0x00107175, 0x80c589c0,
- 0x04000016, 0x59a8e063, 0x412c0000, 0x80717480,
- 0x04000005, 0x4200d000, 0x000009e1, 0x412cd800,
- 0x0401f787, 0x592d7000, 0x48bb5063, 0x592cd000,
- 0x8068d1c0, 0x04020002, 0x486b5064, 0x592cd205,
- 0x82697480, 0x00000055, 0x04000007, 0x49425a07,
- 0x0201f800, 0x0002032c, 0x497a6203, 0x497a6009,
- 0x0401f004, 0x0201f800, 0x00100578, 0x0401f7fb,
- 0x40826800, 0x40865800, 0x589d0801, 0x589d0000,
- 0x829d3c00, 0x00000002, 0x1c01f000, 0x809d3840,
- 0x48813800, 0x5930dc07, 0x406c0000, 0x826d7480,
- 0x00000011, 0x83f17500, 0x03000000, 0x04000014,
- 0x0c01f001, 0x0010bb79, 0x0010bb50, 0x0010bb60,
- 0x0010bb6c, 0x0010bb3f, 0x0010bb42, 0x0010bb8a,
- 0x0010bb79, 0x0010bb79, 0x0010bb79, 0x0010bb79,
- 0x0010bb37, 0x0010bb37, 0x0010bb79, 0x0010bb37,
- 0x0010bb79, 0x0010bb79, 0x0010bb7d, 0x4200d000,
- 0x00000b72, 0x4130e000, 0x0201f800, 0x001001e3,
- 0x4200d800, 0x00000001, 0x0401f05c, 0x4178d800,
- 0x8d3e7d1a, 0x04020059, 0x833ce500, 0x00000001,
- 0x4178d800, 0x8d3e7d00, 0x04020054, 0x8d3e7d18,
- 0x04000003, 0x8d3e7d16, 0x040007f2, 0x5930d422,
- 0x4070d800, 0x8c68d500, 0x0402004c, 0x0401f7ed,
- 0x8d3e7d1a, 0x04020019, 0x8d3e7d00, 0x04020017,
- 0x833d0500, 0x00001000, 0x8d3e7d18, 0x040207e5,
- 0x8d3e7d06, 0x040007e3, 0x0201f800, 0x001073e8,
- 0x4080d800, 0x80c589c0, 0x0402003c, 0x0401f7dd,
- 0x8d3e7d00, 0x040007db, 0x5930d21f, 0x82697480,
- 0x00000003, 0x04020005, 0x0201f800, 0x00105101,
- 0x80c589c0, 0x040207d3, 0x4178d800, 0x0401f02f,
- 0x8d3e7d00, 0x04020028, 0x5930d00a, 0x833cdd00,
- 0x00001000, 0x8d3e7d18, 0x040207ca, 0x8d3e7d06,
- 0x040007c8, 0x5868d200, 0x8c68d50e, 0x04020023,
- 0x0401f7c4, 0x4178d800, 0x8d3e7d00, 0x0402001f,
- 0x0401f7c0, 0x833cd500, 0x00000001, 0x4178d800,
- 0x8d3e7d00, 0x04020019, 0x8d3e7d18, 0x04000005,
- 0x4200d800, 0x00000001, 0x8d3e7d16, 0x04000013,
- 0x4068d800, 0x0401f011, 0x4178d800, 0x8d3e7d00,
- 0x0402000e, 0x833cd500, 0x00001000, 0x4200d800,
- 0x00000001, 0x8d3e7d18, 0x04020008, 0x4068d800,
- 0x0401f006, 0x0201f800, 0x00105101, 0x40c4d800,
- 0x80c589c0, 0x040207d5, 0x406d8800, 0x589d0000,
- 0x809d3800, 0x1c01f000, 0x829d3c80, 0x00000006,
- 0x48813800, 0x48853801, 0x48893802, 0x488d3803,
- 0x48913804, 0x48953805, 0x4933c857, 0x0201f800,
- 0x001051ba, 0x40c52800, 0x41352000, 0x41311000,
- 0x412d1800, 0x41790800, 0x598e6003, 0x0401f00a,
- 0x5932680a, 0x813669c0, 0x04000005, 0x5934d403,
- 0x41440000, 0x80697480, 0x0400000b, 0x41310800,
- 0x59326000, 0x813261c0, 0x040207f6, 0x408a6000,
- 0x408e5800, 0x40926800, 0x80957040, 0x04000015,
- 0x0401f021, 0x0401ff5a, 0x80c589c0, 0x040007f4,
- 0x42010000, 0x00000001, 0x0201f800, 0x00107175,
- 0x80c589c0, 0x0402000e, 0x808101c0, 0x040007ec,
- 0x0201f800, 0x001050d3, 0x59310000, 0x4084d000,
- 0x0401fe0a, 0x0401fe89, 0x40826000, 0x0401f7e6,
- 0x0201f800, 0x001051ab, 0x0401f00b, 0x0201f800,
- 0x00107627, 0x80c589c0, 0x040007f0, 0x5930d403,
- 0x82697480, 0x00000043, 0x040207ec, 0x41790000,
- 0x0401f7ea, 0x589d2805, 0x589d2004, 0x589d1803,
- 0x589d1002, 0x589d0801, 0x589d0000, 0x829d3c00,
- 0x00000006, 0x1c01f000, 0x829d3c80, 0x00000006,
- 0x48813800, 0x48853801, 0x48893802, 0x488d3803,
- 0x48913804, 0x48953805, 0x412d1800, 0x41312000,
- 0x41352800, 0x41790800, 0x0201f800, 0x001051ba,
- 0x40c51000, 0x0201f800, 0x001039cf, 0x40c66800,
- 0x80c589c0, 0x04000027, 0x598e6009, 0x0401f003,
- 0x41310800, 0x59326000, 0x813261c0, 0x04000011,
- 0x5930d00a, 0x41340000, 0x80697480, 0x040207f9,
- 0x0401ff13, 0x80c589c0, 0x040007f6, 0x0201f800,
- 0x001050d3, 0x59310000, 0x4084d000, 0x0401fd2a,
- 0x0401fe4a, 0x40826000, 0x813261c0, 0x040207f1,
- 0x8d3e7d06, 0x04000004, 0x5934d200, 0x8c68d50e,
- 0x04020003, 0x0201f800, 0x00103b00, 0x408e5800,
- 0x40926000, 0x40966800, 0x80897040, 0x04000002,
- 0x0401f00b, 0x0201f800, 0x001051ab, 0x0401f008,
- 0x4200d000, 0x00000714, 0x40c4d800, 0x4144e000,
- 0x0201f800, 0x001001e3, 0x0401f7d4, 0x589d2805,
- 0x589d2004, 0x589d1803, 0x589d1002, 0x589d0801,
- 0x589d0000, 0x829d3c00, 0x00000006, 0x1c01f000,
- 0x829d3c80, 0x00000006, 0x48813800, 0x48853801,
- 0x48893802, 0x488d3803, 0x48913804, 0x48953805,
- 0x41311800, 0x41352000, 0x412d2800, 0x41790800,
- 0x0201f800, 0x001051ba, 0x40c51000, 0x598e6007,
- 0x0401f003, 0x41310800, 0x59326000, 0x813261c0,
- 0x04000012, 0x5932680a, 0x5934d403, 0x41440000,
- 0x80697480, 0x040207f8, 0x0401fecd, 0x80c589c0,
- 0x040007f5, 0x59310000, 0x0201f800, 0x001050d3,
- 0x4084d000, 0x0401fd32, 0x0401fe04, 0x40826000,
- 0x813261c0, 0x040207f0, 0x0201f800, 0x00105d74,
- 0x0201f800, 0x00105dd4, 0x408e6000, 0x40926800,
- 0x40965800, 0x80897040, 0x04000002, 0x0401f003,
- 0x0201f800, 0x001051ab, 0x589d2805, 0x589d2004,
- 0x589d1803, 0x589d1002, 0x589d0801, 0x589d0000,
- 0x829d3c00, 0x00000006, 0x1c01f000, 0x829d3c80,
- 0x00000002, 0x48813800, 0x48853801, 0x4947c857,
- 0x0201f800, 0x001051ba, 0x40c50800, 0x413d0000,
- 0x853e7d00, 0x0401ffbb, 0x0401ff70, 0x40827800,
- 0x80857040, 0x04000002, 0x0401f003, 0x0201f800,
- 0x001051ab, 0x589d0801, 0x589d0000, 0x829d3c00,
- 0x00000002, 0x1c01f000, 0x829d3c80, 0x00000003,
- 0x48813800, 0x48853801, 0x48893802, 0x41311000,
- 0x41790800, 0x598e6009, 0x813261c0, 0x04000011,
- 0x0401fe8b, 0x80c589c0, 0x04020006, 0x41310800,
- 0x59326000, 0x813261c0, 0x040207fa, 0x0401f009,
- 0x0201f800, 0x001050d3, 0x59310000, 0x4084d000,
- 0x0401fc9d, 0x0401fdbd, 0x40826000, 0x0401f7ef,
- 0x0201f800, 0x00103ae1, 0x408a6000, 0x589d1002,
- 0x589d0801, 0x589d0000, 0x829d3c00, 0x00000003,
- 0x1c01f000, 0x829d3c80, 0x00000003, 0x48813800,
- 0x48853801, 0x48893802, 0x41311000, 0x41790800,
- 0x598e6007, 0x813261c0, 0x04000011, 0x0401fe68,
- 0x80c589c0, 0x04020006, 0x41310800, 0x59326000,
- 0x813261c0, 0x040207fa, 0x0401f009, 0x59310000,
- 0x0201f800, 0x001050d3, 0x4084d000, 0x0401fcc8,
- 0x0401fd9a, 0x40826000, 0x0401f7ef, 0x0201f800,
- 0x00105dbc, 0x0201f800, 0x00105dd4, 0x408a6000,
- 0x589d1002, 0x589d0801, 0x589d0000, 0x829d3c00,
- 0x00000003, 0x1c01f000, 0x809d3840, 0x48813800,
- 0x4943c857, 0x0201f800, 0x001051ba, 0x40c50000,
- 0x0401ffd5, 0x0401ffb1, 0x80817040, 0x04000002,
- 0x0401f003, 0x0201f800, 0x001051ab, 0x589d0000,
- 0x809d3800, 0x1c01f000, 0x829d3c80, 0x00000004,
- 0x48813800, 0x48853801, 0x48893802, 0x488d3803,
- 0x0201f800, 0x001051ba, 0x40c51800, 0x41311000,
- 0x41790800, 0x598e6003, 0x813261c0, 0x04000008,
- 0x0401fe2f, 0x80c589c0, 0x04020009, 0x41310800,
- 0x59326000, 0x813261c0, 0x040207fa, 0x408a6000,
- 0x808d7040, 0x0400000a, 0x0401f00b, 0x0201f800,
- 0x001050d3, 0x59310000, 0x4084d000, 0x0401fcdf,
- 0x0401fd5e, 0x40826000, 0x0401f7ec, 0x0201f800,
- 0x001051ab, 0x589d1803, 0x589d1002, 0x589d0801,
- 0x589d0000, 0x829d3c00, 0x00000004, 0x1c01f000,
- 0x809d3840, 0x48a13800, 0x829d3c80, 0x00000006,
- 0x409d4000, 0x829d3c80, 0x00000007, 0x48813800,
- 0x48853801, 0x48893802, 0x488d3803, 0x48913804,
- 0x48953805, 0x48993806, 0x41791000, 0x0201f800,
- 0x001051ba, 0x48c54005, 0x41311800, 0x41352800,
- 0x41193000, 0x412d2000, 0x49914003, 0x49d14000,
- 0x49a54001, 0x49154002, 0x48d94004, 0x58d6602f,
- 0x813261c0, 0x0400000e, 0x41310800, 0x59310000,
- 0x5932680a, 0x5934d403, 0x41440000, 0x80697480,
- 0x04000028, 0x808101c0, 0x04000003, 0x41310800,
- 0x40826000, 0x808101c0, 0x040207f5, 0x417a3000,
- 0x0201f800, 0x00105697, 0x59926005, 0x813261c0,
- 0x04000006, 0x5932680a, 0x5934d403, 0x41440000,
- 0x80697480, 0x04000024, 0x811a3000, 0x83197480,
- 0x00000004, 0x040007f3, 0x040017f2, 0x408e6000,
- 0x40966800, 0x409a3000, 0x40925800, 0x58a32003,
- 0x58a3a000, 0x58a34801, 0x58a22802, 0x58a1b004,
- 0x58a0d005, 0x80697040, 0x04000010, 0x0401f01d,
- 0x41311000, 0x40826000, 0x808101c0, 0x040007e0,
- 0x59310001, 0x0401fdc6, 0x80c589c0, 0x040007f9,
- 0x4084d000, 0x4088d800, 0x0201f800, 0x0010b872,
- 0x0401fcfe, 0x0401f7f4, 0x0201f800, 0x001051ab,
- 0x0401f00c, 0x0401fdba, 0x80c589c0, 0x040007db,
- 0x0201f800, 0x00105388, 0x0201f800, 0x0010518e,
- 0x0201f800, 0x00105194, 0x0401fcf0, 0x0401f7d3,
- 0x589d3006, 0x589d2805, 0x589d2004, 0x589d1803,
- 0x589d1002, 0x589d0801, 0x589d0000, 0x829d3c00,
- 0x0000000d, 0x589d4000, 0x809d3800, 0x1c01f000,
- 0x809d3840, 0x48a13800, 0x829d3c80, 0x00000008,
- 0x409d4000, 0x829d3c80, 0x00000007, 0x48813800,
- 0x48853801, 0x48893802, 0x488d3803, 0x48913804,
- 0x48953805, 0x48993806, 0x41791800, 0x0201f800,
- 0x001051ba, 0x40c52800, 0x41313000, 0x49354006,
- 0x492d4005, 0x49194007, 0x49914003, 0x49d14000,
- 0x49a54001, 0x49154002, 0x48d94004, 0x58d6602f,
- 0x813261c0, 0x04000023, 0x41312000, 0x408d0800,
- 0x59311000, 0x5932680a, 0x0401f009, 0x41311800,
- 0x808509c0, 0x04000010, 0x808101c0, 0x04000002,
- 0x40826000, 0x808101c0, 0x0400000d, 0x59310001,
- 0x0401fd77, 0x80c589c0, 0x040007f5, 0x4090d000,
- 0x408cd800, 0x0201f800, 0x0010b872, 0x0401fcaf,
- 0x0401f7f2, 0x41310800, 0x0401f7f0, 0x808911c0,
- 0x04000006, 0x408a6000, 0x808509c0, 0x04000003,
- 0x40852000, 0x40810800, 0x808911c0, 0x040207e1,
- 0x417a3000, 0x0201f800, 0x00105697, 0x59926005,
- 0x813261c0, 0x04000004, 0x0401fd5d, 0x80c589c0,
- 0x04020012, 0x811a3000, 0x83197480, 0x00000004,
- 0x040007f5, 0x040017f4, 0x409a6000, 0x58a26806,
- 0x58a25805, 0x58a23007, 0x58a32003, 0x58a3a000,
- 0x58a34801, 0x58a22802, 0x58a1b004, 0x80957040,
- 0x0400000a, 0x0401f00b, 0x0201f800, 0x00105388,
- 0x0201f800, 0x0010518e, 0x0201f800, 0x00105194,
- 0x0401fc82, 0x0401f7e8, 0x0201f800, 0x001051ab,
- 0x589d3006, 0x589d2805, 0x589d2004, 0x589d1803,
- 0x589d1002, 0x589d0801, 0x589d0000, 0x829d3c00,
- 0x0000000f, 0x589d4000, 0x809d3800, 0x1c01f000,
- 0x4178e000, 0x497bc856, 0x5930dc03, 0x826cd480,
- 0x00000002, 0x82697480, 0x00000002, 0x04000007,
- 0x04001006, 0x599cd019, 0x8c68d50e, 0x04000005,
- 0x806cd9c0, 0x04020003, 0x4200e000, 0x00000001,
- 0x40718800, 0x1c01f000, 0x829d3c80, 0x00000004,
- 0x48813800, 0x48853801, 0x48893802, 0x488d3803,
- 0x412d0800, 0x41351000, 0x41391800, 0x0201f800,
- 0x0010bb1b, 0x80c589c0, 0x040000ac, 0x5932680a,
- 0x5930dc07, 0x406c0000, 0x826d7480, 0x00000011,
- 0x83f17500, 0x03000000, 0x04000026, 0x0c01f001,
- 0x0010beb2, 0x0010be5d, 0x0010be6d, 0x0010be3a,
- 0x0010be5d, 0x0010be6d, 0x0010be7d, 0x0010be8e,
- 0x0010be34, 0x0010be34, 0x0010be25, 0x0010be34,
- 0x0010be34, 0x0010be34, 0x0010be34, 0x0010beb2,
- 0x0010be25, 0x0010be22, 0x59325819, 0x0201f800,
- 0x00100581, 0x5930d203, 0x82697480, 0x00000004,
- 0x04000071, 0x59325809, 0x0201f800, 0x00107175,
- 0x80c589c0, 0x04020068, 0x0201f800, 0x00105e4d,
- 0x8d3e7d1c, 0x04000081, 0x497a600a, 0x0401f07f,
- 0x4200d000, 0x0000030f, 0x4130e000, 0x0201f800,
- 0x001001e3, 0x0401f079, 0x813669c0, 0x04000061,
- 0x0201f800, 0x001079ba, 0x5930d203, 0x82697480,
- 0x00000004, 0x0400006e, 0x59325809, 0x0201f800,
- 0x00107175, 0x80c589c0, 0x040007e8, 0x592cd205,
- 0x8268d500, 0x000000ff, 0x82697480, 0x00000014,
- 0x04000003, 0x0201f800, 0x0010724a, 0x4a025a05,
- 0x00000103, 0x5930d402, 0x486a5c07, 0x592cd409,
- 0x8c68d512, 0x04020051, 0x49425a07, 0x497a580a,
- 0x0201f800, 0x00107631, 0x0201f800, 0x0002032c,
- 0x0401f7d2, 0x5930d403, 0x82697480, 0x00000043,
- 0x04000052, 0x0201f800, 0x0010888d, 0x0401ff85,
- 0x80c589c0, 0x0402003e, 0x0201f800, 0x0010726c,
- 0x80c589c0, 0x040007c5, 0x0201f800, 0x0010646b,
- 0x0401f7c2, 0x59325809, 0x0201f800, 0x00107175,
- 0x80c589c0, 0x040007bd, 0x49425a07, 0x497a5c0a,
- 0x0201f800, 0x0002032c, 0x5930d21f, 0x82697480,
- 0x00000003, 0x040207b5, 0x0201f800, 0x0010724a,
- 0x0401f7b2, 0x5930d203, 0x82697480, 0x00000004,
- 0x0400002c, 0x59325809, 0x0201f800, 0x00107175,
- 0x80c589c0, 0x040007a9, 0x49425a07, 0x813669c0,
- 0x040007d0, 0x0201f800, 0x001085c4, 0x0201f800,
- 0x00107631, 0x0401f7cd, 0x5930d203, 0x82697480,
- 0x00000011, 0x04020021, 0x5930d41f, 0x486a6203,
- 0x0401f01e, 0x49425a07, 0x0201f800, 0x0002032c,
- 0x0401f796, 0x0201f800, 0x00100b11, 0x0401f78e,
- 0x4200d000, 0x00000182, 0x4134d800, 0x4130e000,
- 0x0201f800, 0x001001e3, 0x0401f79a, 0x0201f800,
- 0x00101992, 0x0401f7c1, 0x412d0000, 0x592e580a,
- 0x0201f800, 0x00100581, 0x40825800, 0x0401f7ab,
- 0x0201f800, 0x00100b11, 0x0401f7d3, 0x0201f800,
- 0x00100b11, 0x0401f791, 0x40865800, 0x408a6800,
- 0x408e7000, 0x589d1803, 0x589d1002, 0x589d0801,
- 0x589d0000, 0x829d3c00, 0x00000004, 0x1c01f000,
- 0x829d3c80, 0x00000002, 0x48813800, 0x48853801,
- 0x41310800, 0x4933c857, 0x4943c857, 0x493fc857,
- 0x42010000, 0x0010ccb4, 0x59a8d00d, 0x41640000,
- 0x80697480, 0x04000010, 0x41580000, 0x80817480,
- 0x0402100d, 0x40826000, 0x8d3e7d12, 0x04000004,
- 0x40800000, 0x80857480, 0x04000002, 0x0401ff27,
- 0x82810400, 0x00000024, 0x41580000, 0x80817480,
- 0x040017f5, 0x41510000, 0x41540000, 0x80817480,
- 0x04021019, 0x8d3e7d18, 0x04000017, 0x59a8d05e,
- 0x59a8005f, 0x80697480, 0x04000013, 0x40826000,
- 0x5880d00a, 0x8068d1c0, 0x04020005, 0x5880d203,
- 0x82697480, 0x00000008, 0x04000008, 0x0401ff0f,
- 0x82810400, 0x00000024, 0x41540000, 0x80817480,
- 0x040017ed, 0x0401f004, 0x0201f800, 0x001087ea,
- 0x0401f7f7, 0x40866000, 0x589d0801, 0x589d0000,
- 0x829d3c00, 0x00000002, 0x1c01f000, 0x809d3840,
- 0x48813800, 0x497a621f, 0x812e59c0, 0x04000041,
- 0x592cd205, 0x486bc857, 0x592cd205, 0x8268d500,
- 0x000000ff, 0x82697480, 0x00000014, 0x04000003,
- 0x4a02621f, 0x00000003, 0x592cd409, 0x8c68d510,
- 0x04020021, 0x592cd209, 0x0201f800, 0x00103f75,
- 0x0201f800, 0x00107631, 0x0201f800, 0x00108a73,
- 0x80c589c0, 0x04000023, 0x4a026403, 0x00000085,
- 0x4a026203, 0x00000009, 0x4a026407, 0x00000002,
- 0x59310004, 0x82810500, 0x00000100, 0x0201f800,
- 0x001078e0, 0x82810540, 0x80004040, 0x48826004,
- 0x0201f800, 0x001078ec, 0x0201f800, 0x001051ab,
- 0x4200d000, 0x80004040, 0x0201f800, 0x001050c1,
- 0x0401f01f, 0x592cd209, 0x0201f800, 0x00103f75,
- 0x4a025c09, 0x00000100, 0x0201f800, 0x00107631,
- 0x0201f800, 0x00108a73, 0x80c589c0, 0x040207df,
- 0x0201f800, 0x0002032c, 0x5930d21f, 0x82697480,
- 0x00000003, 0x0400000a, 0x497a6009, 0x0401f7d7,
- 0x4200d000, 0x00000527, 0x4130d800, 0x412ce000,
- 0x0201f800, 0x001001e3, 0x0401f005, 0x0201f800,
- 0x0010724a, 0x497a6009, 0x0401f7cc, 0x589d0000,
- 0x809d3800, 0x1c01f000, 0x0201f800, 0x001051ab,
- 0x812e59c0, 0x0400001b, 0x592cd409, 0x8c68d510,
- 0x04020012, 0x592cd209, 0x0201f800, 0x00103f75,
- 0x0201f800, 0x00107631, 0x0201f800, 0x0002032c,
- 0x5930d203, 0x82697480, 0x0000000d, 0x0400000d,
- 0x0201f800, 0x001051ab, 0x5930d00a, 0x0201f800,
- 0x00103bf8, 0x0401f007, 0x592cd209, 0x0201f800,
- 0x00103f75, 0x4a025c09, 0x00000100, 0x0401f7ed,
- 0x0201f800, 0x00105e4d, 0x1c01f000, 0x829d3c80,
- 0x00000002, 0x48813800, 0x48853801, 0x41790000,
- 0x0201f800, 0x00106f43, 0x40c50800, 0x48c7c857,
- 0x40840000, 0x82857480, 0x0000000d, 0x83f17500,
- 0x03000000, 0x0400002b, 0x0c01f001, 0x0010bfa0,
- 0x0010bfd8, 0x0010bfb6, 0x0010bf8d, 0x0010bfb8,
- 0x0010bfa8, 0x0010bfa0, 0x0010bfa0, 0x0010bfa0,
- 0x0010bfa8, 0x0010bfa8, 0x0010bfa8, 0x0010bfa8,
- 0x0010bfb6, 0x0201f800, 0x00106f33, 0x80c589c0,
- 0x04000005, 0x0201f800, 0x00105422, 0x80c589c0,
- 0x04000055, 0x0201f800, 0x0010b8cb, 0x80c589c0,
- 0x04000017, 0x5930d403, 0x486bc857, 0x5930d403,
- 0x82697480, 0x00000040, 0x04020018, 0x0401ffaf,
- 0x42010000, 0x00000001, 0x0401f069, 0x40840000,
- 0x82857480, 0x0000000d, 0x040007d8, 0x040017d7,
- 0x4200d000, 0x000004b7, 0x4130d800, 0x4084e000,
- 0x0201f800, 0x001001e3, 0x0401f05d, 0x497bc856,
- 0x0201f800, 0x001050e9, 0x80c589c0, 0x04020036,
- 0x59317004, 0x48bbc857, 0x0401ff45, 0x0401f7e9,
- 0x812e59c0, 0x0400004c, 0x0201f800, 0x001074dd,
- 0x80c589c0, 0x04000030, 0x0201f800, 0x001051ab,
- 0x592cd209, 0x8468d50c, 0x486a5a09, 0x592cdc07,
- 0x806cd0c6, 0x406c0000, 0x8068d400, 0x8068d400,
- 0x486a6006, 0x4200d000, 0x10000000, 0x4130d800,
- 0x0201f800, 0x00100867, 0x80c589c0, 0x0400002b,
- 0x592cd209, 0x8c68d51c, 0x04020024, 0x8468d55c,
- 0x486a5a09, 0x4a026006, 0x00000002, 0x0401f7c9,
- 0x598d700b, 0x48bbc857, 0x40b8d000, 0x41300000,
- 0x80697480, 0x04000014, 0x0201f800, 0x0010ba3e,
- 0x80c589c0, 0x040207be, 0x497bc856, 0x0201f800,
- 0x001050e9, 0x4200d000, 0x000003f5, 0x80c589c0,
- 0x040007c2, 0x5930d203, 0x486bc857, 0x59310a03,
- 0x0401f01f, 0x0201f800, 0x00100b11, 0x0401ff0c,
- 0x0401f7b0, 0x0201f800, 0x00105457, 0x80c589c0,
- 0x040007f5, 0x0401f7e9, 0x41310000, 0x0201f800,
- 0x00101029, 0x40826000, 0x5930d203, 0x82697480,
- 0x00000004, 0x040207a3, 0x41390000, 0x42027000,
- 0x00000048, 0x0201f800, 0x00105eaa, 0x40827000,
- 0x0401f79c, 0x4200d000, 0x000004a7, 0x4130d800,
- 0x412ce000, 0x0201f800, 0x001001e3, 0x808101c0,
- 0x04000797, 0x589d0801, 0x589d0000, 0x829d3c00,
- 0x00000002, 0x1c01f000, 0x829d3c80, 0x00000002,
- 0x48813800, 0x48853801, 0x412d0800, 0x41410000,
- 0x4200d000, 0x00109887, 0x0201f800, 0x0010895e,
- 0x417a5800, 0x0201f800, 0x00107175, 0x80c589c0,
- 0x04000009, 0x0201f800, 0x001079ba, 0x59325809,
- 0x592cd209, 0x8468d54c, 0x486a5a09, 0x42028000,
- 0x00000006, 0x0201f800, 0x001051ba, 0x0401ff44,
- 0x0201f800, 0x001051ab, 0x40828000, 0x40865800,
- 0x589d0801, 0x589d0000, 0x829d3c00, 0x00000002,
- 0x1c01f000, 0x829d3c80, 0x00000002, 0x48813800,
- 0x48853801, 0x412d0800, 0x0201f800, 0x0010bb1b,
- 0x80c589c0, 0x040000a3, 0x5930dc07, 0x406c0000,
- 0x826d7480, 0x00000011, 0x83f17500, 0x03000000,
- 0x04000025, 0x0c01f001, 0x0010c0e0, 0x0010c096,
- 0x0010c0a5, 0x0010c073, 0x0010c096, 0x0010c0a5,
- 0x0010c0bc, 0x0010c0b5, 0x0010c069, 0x0010c069,
- 0x0010c058, 0x0010c069, 0x0010c069, 0x0010c069,
- 0x0010c069, 0x0010c0e0, 0x0010c05e, 0x0010c06f,
- 0x5930d203, 0x82697480, 0x00000004, 0x04020003,
- 0x0201f800, 0x00100b11, 0x59325809, 0x0201f800,
- 0x00107175, 0x80c589c0, 0x0402006b, 0x0201f800,
- 0x00105e4d, 0x8d3e7d1c, 0x0400007a, 0x497a600a,
- 0x0401f078, 0x4200d000, 0x00000328, 0x4130e000,
- 0x0201f800, 0x001001e3, 0x0401f072, 0x59325819,
- 0x0201f800, 0x00100581, 0x0401f7ec, 0x0201f800,
- 0x001079ba, 0x5930d203, 0x82697480, 0x00000004,
- 0x0400005c, 0x59325809, 0x0201f800, 0x00107175,
- 0x80c589c0, 0x040007e6, 0x592cd205, 0x8268d500,
- 0x000000ff, 0x82697480, 0x00000014, 0x04000003,
- 0x0201f800, 0x0010724a, 0x4a025a05, 0x00000103,
- 0x592cd409, 0x8c68d512, 0x0402004d, 0x49425a07,
- 0x497a580a, 0x0201f800, 0x001085c4, 0x0201f800,
- 0x00107631, 0x0201f800, 0x001072c7, 0x0201f800,
- 0x0002032c, 0x0401f7ce, 0x5930d403, 0x82697480,
- 0x00000043, 0x04000047, 0x0201f800, 0x0010bde8,
- 0x80c589c0, 0x04020034, 0x0201f800, 0x0010726c,
- 0x80c589c0, 0x040007c2, 0x0201f800, 0x0010646b,
- 0x0401f7bf, 0x59325809, 0x0201f800, 0x00107175,
- 0x80c589c0, 0x040007ba, 0x49425a07, 0x497a5c0a,
- 0x0201f800, 0x0002032c, 0x5930d21f, 0x82697480,
- 0x00000003, 0x040207b2, 0x0201f800, 0x0010724a,
- 0x0401f7af, 0x5930d203, 0x82697480, 0x00000011,
- 0x04020028, 0x5930d41f, 0x486a6203, 0x0401f025,
- 0x5930d203, 0x82697480, 0x00000004, 0x0400001e,
- 0x59325809, 0x0201f800, 0x00107175, 0x80c589c0,
- 0x0400079f, 0x49425a07, 0x0201f800, 0x001085c4,
- 0x0201f800, 0x00107631, 0x0201f800, 0x0002032c,
- 0x0401f797, 0x49425a07, 0x0201f800, 0x0002032c,
- 0x0401f793, 0x0201f800, 0x00101992, 0x0401f7cb,
- 0x0201f800, 0x00100b11, 0x0401f7a3, 0x412d0000,
- 0x592e580a, 0x0201f800, 0x00100581, 0x40825800,
- 0x0401f7af, 0x0201f800, 0x00100b11, 0x0401f7e1,
- 0x40865800, 0x589d0801, 0x589d0000, 0x829d3c00,
- 0x00000002, 0x1c01f000, 0x0201f800, 0x0010846b,
- 0x80c589c0, 0x04020002, 0x0401f003, 0x5932680a,
- 0x0401ff49, 0x1c01f000, 0x829d3c80, 0x00000005,
- 0x48813800, 0x48853801, 0x48893802, 0x488d3803,
- 0x48913804, 0x41311000, 0x41352000, 0x4933c857,
- 0x4947c857, 0x4943c857, 0x0201f800, 0x001051ba,
- 0x40c51800, 0x0201f800, 0x00108346, 0x41310800,
- 0x813261c0, 0x04000048, 0x42000000, 0x0010cc6c,
- 0x81317480, 0x04000044, 0x59a8d00d, 0x8068d040,
- 0x42010000, 0x0010ccb4, 0x40680000, 0x81657480,
- 0x0400000f, 0x41580000, 0x80817480, 0x0402100c,
- 0x40826000, 0x40800000, 0x80857480, 0x04000003,
- 0x4084d000, 0x0401ffd1, 0x82810400, 0x00000024,
- 0x41580000, 0x80817480, 0x040017f6, 0x41510000,
- 0x41540000, 0x80817480, 0x04021012, 0x8d3e7d18,
- 0x04000010, 0x59a8d05e, 0x59a8005f, 0x80697480,
- 0x0400000c, 0x40826000, 0x5880d00a, 0x8068d1c0,
- 0x0400000d, 0x4084d000, 0x0401ffbc, 0x82810400,
- 0x00000024, 0x41540000, 0x80817480, 0x040017f0,
- 0x408a6000, 0x40926800, 0x808d7040, 0x04000018,
- 0x0401f01d, 0x0201f800, 0x001039cf, 0x40c66800,
- 0x80c589c0, 0x040007f2, 0x58c4d002, 0x5930d820,
- 0x82680500, 0x00ffffff, 0x806d7480, 0x040207ec,
- 0x5930d203, 0x82697480, 0x00000008, 0x0400000b,
- 0x4936600a, 0x0401fef0, 0x82810400, 0x00000024,
- 0x0401f7e5, 0x59a8d00d, 0x0401f7be, 0x0201f800,
- 0x001051ab, 0x0401f004, 0x0201f800, 0x001087ea,
- 0x0401f7f4, 0x589d2004, 0x589d1803, 0x589d1002,
- 0x589d0801, 0x589d0000, 0x829d3c00, 0x00000005,
- 0x1c01f000, 0x829d3c80, 0x00000007, 0x48813800,
- 0x48853801, 0x48893802, 0x488d3803, 0x48913804,
- 0x48953805, 0x48993806, 0x42010000, 0x00000001,
- 0x41790800, 0x497bc856, 0x41311000, 0x41351800,
- 0x41452000, 0x413d2800, 0x40593000, 0x4200d000,
- 0x0010c159, 0x0201f800, 0x00104e15, 0x59a8d21b,
- 0x8c68d508, 0x0400001d, 0x8c68d516, 0x0402001b,
- 0x59aa687d, 0x813669c0, 0x0400007a, 0x5934d400,
- 0x82697480, 0x00000404, 0x04020076, 0x0201f800,
- 0x00105e80, 0x40c66000, 0x80c589c0, 0x0400006b,
- 0x48818c07, 0x4935880a, 0x40867800, 0x0201f800,
- 0x0010390b, 0x4200d000, 0x00000005, 0x0201f800,
- 0x00103915, 0x42027000, 0x00000003, 0x0201f800,
- 0x00105eaa, 0x0401f063, 0x8c68d506, 0x04020003,
- 0x8c68d50a, 0x04000014, 0x0201f800, 0x00103bbd,
- 0x80c589c0, 0x0400000a, 0x83acd400, 0x000007fe,
- 0x586a6800, 0x5934d200, 0x8468d51a, 0x486a6a00,
- 0x59a8d21b, 0x8c68d506, 0x0402003c, 0x808509c0,
- 0x04000005, 0x8d0e1d20, 0x0402003c, 0x0201f800,
- 0x0010b84b, 0x80817040, 0x0402004a, 0x4200b000,
- 0x000007f0, 0x417a8800, 0x0401f01c, 0x826cd540,
- 0x00001000, 0x486a6a00, 0x5934d200, 0x8468d51a,
- 0x486a6a00, 0x4937c857, 0x4a026c00, 0x00000707,
- 0x0201f800, 0x001051ba, 0x40c50000, 0x417a6000,
- 0x0201f800, 0x0010bb9e, 0x0201f800, 0x0010bc6f,
- 0x417a7800, 0x0201f800, 0x0010bd08, 0x0201f800,
- 0x0010c0ee, 0x80817040, 0x04000025, 0x81468800,
- 0x8058b040, 0x0400002b, 0x0201f800, 0x001039cf,
- 0x80c589c0, 0x040007fa, 0x5934da00, 0x8c6cdd1a,
- 0x040007f7, 0x5934d403, 0x406a8800, 0x417a7800,
- 0x42028000, 0x00000029, 0x8d0e1d20, 0x040007d8,
- 0x413cd000, 0x413cd800, 0x0201f800, 0x00108398,
- 0x5934da00, 0x0401f7d2, 0x41790000, 0x42010800,
- 0x00000001, 0x0401f7c2, 0x4200d000, 0x000007d0,
- 0x4200d800, 0x0010c159, 0x0201f800, 0x00104f28,
- 0x0201f800, 0x0010b84b, 0x0401f7bf, 0x0201f800,
- 0x001051ab, 0x0401f7da, 0x4200d000, 0x000000a0,
- 0x40c4d800, 0x4134e000, 0x0201f800, 0x001001e3,
- 0x408a6000, 0x408e6800, 0x40928800, 0x40967800,
- 0x4098b000, 0x589d3006, 0x589d2805, 0x589d2004,
- 0x589d1803, 0x589d1002, 0x589d0801, 0x589d0000,
- 0x829d3c00, 0x00000007, 0x1c01f000, 0x497bc856,
- 0x0201f800, 0x0010410f, 0x80c589c0, 0x0402002e,
- 0x59a8d015, 0x8c68d504, 0x04000034, 0x8d0e1d20,
- 0x04020004, 0x59a8d006, 0x8c68d51c, 0x0400001c,
- 0x4200b000, 0x000007f0, 0x417a8800, 0x0401f004,
- 0x81468800, 0x8058b040, 0x04000015, 0x0201f800,
- 0x001039cf, 0x80c589c0, 0x040007fa, 0x0201f800,
- 0x00103c58, 0x80c589c0, 0x040007f6, 0x59a8d00f,
- 0x59340002, 0x8068d580, 0x8268d500, 0x00ffff00,
- 0x040207f0, 0x5934d200, 0x8468d55a, 0x486a6a00,
- 0x81468800, 0x8058b040, 0x040207ed, 0x0201f800,
- 0x00103bbd, 0x80c589c0, 0x04000020, 0x59a8d029,
- 0x4200d800, 0x0010c159, 0x0201f800, 0x00104f28,
- 0x0401f022, 0x83acd400, 0x000007fe, 0x586a6800,
- 0x813669c0, 0x040007d2, 0x5934d200, 0x8468d51a,
- 0x486a6a00, 0x0401f7ce, 0x59a8d21b, 0x8c68d506,
- 0x040007cb, 0x83acd400, 0x000007fe, 0x586a6800,
- 0x813669c0, 0x040007c6, 0x0201f800, 0x00103c58,
- 0x80c589c0, 0x040007c2, 0x5934d200, 0x8468d55a,
- 0x486a6a00, 0x0401f7be, 0x8d0e1d20, 0x04020004,
- 0x59a8d006, 0x8c68d51c, 0x040007e2, 0x4200d000,
- 0x000007d0, 0x0401f7db, 0x1c01f000, 0x829d3c80,
- 0x00000003, 0x48813800, 0x48853801, 0x48893802,
- 0x40691000, 0x40710800, 0x4978e000, 0x83457480,
- 0x000007ff, 0x83f17500, 0x03000000, 0x04000047,
- 0x4978e002, 0x4944e001, 0x4144e800, 0x42010000,
- 0x00108c00, 0x4200b000, 0x000007f0, 0x83457480,
- 0x000007ef, 0x04000039, 0x04001038, 0x4200b000,
- 0x00000010, 0x8058b1c0, 0x04000017, 0x40740000,
- 0x8080d400, 0x5868f000, 0x8078f1c0, 0x04020043,
- 0x5884e001, 0x41440000, 0x80717480, 0x0400005b,
- 0x8070d000, 0x8074e800, 0x83457480, 0x000007ef,
- 0x0400004d, 0x0400104c, 0x82697480, 0x00000800,
- 0x0400002e, 0x48690801, 0x8058b040, 0x8058b1c0,
- 0x040207eb, 0x5884d802, 0x806cd9c0, 0x04000065,
- 0x412d0000, 0x4088d000, 0x0201f800, 0x0010393d,
- 0x4947c857, 0x4937c857, 0x40825800, 0x813669c0,
- 0x04000062, 0x497a6a12, 0x59a8d21b, 0x8c68d50a,
- 0x0402000a, 0x8288dd00, 0x00ffff00, 0x04000050,
- 0x59a8d00f, 0x8268d500, 0x00ffff00, 0x406c0000,
- 0x80697480, 0x0400004a, 0x488a6802, 0x4200d000,
- 0x00000001, 0x0401f079, 0x82697480, 0x00fffffb,
- 0x040007c9, 0x040017c8, 0x4947c857, 0x488bc857,
- 0x58857001, 0x48bbc857, 0x4a010800, 0x00000019,
- 0x4178d000, 0x0401f06d, 0x4a010801, 0x000007f0,
- 0x4200e800, 0x000007f0, 0x42010000, 0x00108c00,
- 0x8058b040, 0x0401f7ce, 0x5878d002, 0x8268e500,
- 0x00ffffff, 0x48710803, 0x40880000, 0x80717480,
- 0x04000049, 0x5884e001, 0x41440000, 0x80717480,
- 0x040207b8, 0x58797002, 0x48b90803, 0x4947c857,
- 0x58857003, 0x48bbc857, 0x4a010800, 0x0000001b,
- 0x0401f7e4, 0x82697480, 0x000007f0, 0x040207b6,
- 0x49790801, 0x42010000, 0x00108c00, 0x4178e800,
- 0x8058b040, 0x0401f7b2, 0x49450802, 0x83457480,
- 0x000007ef, 0x0400000e, 0x0400100d, 0x83457480,
- 0x000007fc, 0x04000028, 0x83457480, 0x000007fd,
- 0x0400001a, 0x83457480, 0x000007ff, 0x0402001a,
- 0x82897480, 0x00ffffff, 0x04020017, 0x5884d002,
- 0x8468d55e, 0x48690802, 0x0401f792, 0x8288d500,
- 0x000000ff, 0x8068d0d0, 0x486a6a12, 0x0401f7b3,
- 0x4200d000, 0x0000044d, 0x4084e000, 0x0201f800,
- 0x001001e3, 0x0401f797, 0x4947c857, 0x4a010800,
- 0x0000000a, 0x0401f7b7, 0x82897480, 0x00fffffd,
- 0x040007eb, 0x4947c857, 0x488bc857, 0x58857001,
- 0x48bbc857, 0x4a010800, 0x00000019, 0x4078d000,
- 0x0401f01a, 0x82897480, 0x00fffffc, 0x040007e0,
- 0x0401f7f5, 0x5884d001, 0x41440000, 0x80697480,
- 0x04000007, 0x4947c857, 0x4873c857, 0x486fc857,
- 0x4a010800, 0x0000001a, 0x0401f79e, 0x407a6800,
- 0x8c6cdd08, 0x0400078e, 0x0201f800, 0x00103bb0,
- 0x80c589c0, 0x0400078a, 0x4947c857, 0x4a010800,
- 0x0000001d, 0x0401f793, 0x40698800, 0x589d1002,
- 0x589d0801, 0x589d0000, 0x829d3c00, 0x00000003,
- 0x1c01f000, 0x809d3840, 0x48813800, 0x4200d000,
- 0x00009c0e, 0x4200d800, 0xfffffff7, 0x0201f800,
- 0x0010b3e0, 0x4200d000, 0x00009c0e, 0x4200d800,
- 0x00000010, 0x0201f800, 0x0010b3f2, 0x59c4d0a3,
- 0x8468d518, 0x486b88a3, 0x0201f800, 0x00102ee2,
- 0x80c589c0, 0x04000007, 0x599cd019, 0x8268d500,
- 0x0000e000, 0x82697480, 0x00004000, 0x0400008c,
- 0x4200d000, 0x00000080, 0x0201f800, 0x001012d9,
- 0x0201f800, 0x00104f5d, 0x59c4d0a3, 0x8468d506,
- 0x486b88a3, 0x0201f800, 0x0010411a, 0x80c589c0,
- 0x04020005, 0x0201f800, 0x00104130, 0x80c589c0,
- 0x0400006c, 0x59c4d0a3, 0x8268d500, 0xbe7fffff,
- 0x486b88a3, 0x4200d000, 0x000000f8, 0x0201f800,
- 0x00103675, 0x59c4d0a3, 0x8268d540, 0x00018000,
- 0x8468d51c, 0x486b88a3, 0x59c4d0a3, 0x8468d520,
- 0x486b88a3, 0x4a038808, 0x00000200, 0x59c4d006,
- 0x8268d500, 0xfbffff0e, 0x486b8806, 0x497b282c,
- 0x497b282d, 0x4200d000, 0x000001f4, 0x4200d800,
- 0x0010c54c, 0x0201f800, 0x00104e00, 0x4a038805,
- 0x00000001, 0x0201f800, 0x001013a3, 0x80c589c0,
- 0x04020023, 0x0201f800, 0x001013ae, 0x80c589c0,
- 0x04000035, 0x4178d000, 0x0201f800, 0x00101599,
- 0x4178d000, 0x0201f800, 0x0010156f, 0x0201f800,
- 0x001015f9, 0x4a035038, 0x00000001, 0x0201f800,
- 0x0010411a, 0x80c589c0, 0x04000018, 0x59c4d0a4,
- 0x8268d500, 0x0000000f, 0x82697480, 0x00000008,
- 0x04000003, 0x4a038805, 0x04000000, 0x59c4d0a3,
- 0x8268d540, 0x0001c000, 0x486b88a3, 0x59c4d0a3,
- 0x8468d520, 0x486b88a3, 0x0401f077, 0x4200d000,
- 0x00000001, 0x0201f800, 0x00101599, 0x4200d000,
- 0x00000001, 0x0401f7e0, 0x0201f800, 0x00104130,
- 0x80c589c0, 0x040207e6, 0x0201f800, 0x00104125,
- 0x4200d000, 0x000001a9, 0x80c589c0, 0x04020052,
- 0x599cd818, 0x40c4e000, 0x0201f800, 0x001001e3,
- 0x0401f061, 0x0201f800, 0x001013b9, 0x80c589c0,
- 0x04020030, 0x0201f800, 0x001013c4, 0x80c589c0,
- 0x04000039, 0x4200d000, 0x00000003, 0x0201f800,
- 0x00101599, 0x4200d000, 0x00000003, 0x0401f7c2,
- 0x0201f800, 0x00104125, 0x4200d000, 0x00000156,
- 0x80c589c0, 0x040007e7, 0x59c4d0a3, 0x8468d570,
- 0x8468d532, 0x486b88a3, 0x0201f800, 0x0010444c,
- 0x4a038808, 0x00000208, 0x0401f799, 0x59a8d86b,
- 0x826d0500, 0x00000007, 0x04020019, 0x59a8d037,
- 0x82697480, 0x00000002, 0x04000018, 0x0201f800,
- 0x00101566, 0x48835036, 0x0201f800, 0x0010191a,
- 0x4a035044, 0x00000003, 0x4a035037, 0x00000002,
- 0x4a035043, 0x00000001, 0x59a8d86b, 0x0401f00b,
- 0x4200d000, 0x00000002, 0x0201f800, 0x00101599,
- 0x4200d000, 0x00000002, 0x0401f797, 0x82817480,
- 0x00000004, 0x04000019, 0x806cd000, 0x486b506b,
- 0x0401f754, 0x0201f800, 0x001013cf, 0x80c589c0,
- 0x0400000e, 0x59a8d043, 0x8068d1c0, 0x0400078c,
- 0x0201f800, 0x001013d9, 0x4a035038, 0x00000001,
- 0x0401f015, 0x4a035014, 0x00000001, 0x0201f800,
- 0x00104092, 0x0401f010, 0x4200d000, 0x0000018a,
- 0x59a8d837, 0x0401f7a8, 0x497b2804, 0x497b2805,
- 0x0201f800, 0x00101929, 0x4a035043, 0x00000001,
- 0x4a035044, 0xaabbccdd, 0x48835037, 0x59a8d86b,
- 0x0401f7de, 0x589d0000, 0x809d3800, 0x1c01f000,
- 0x5994d02c, 0x8068d1c0, 0x04020006, 0x5994d02d,
- 0x4200d800, 0x00000001, 0x8068d1c0, 0x04000002,
- 0x4178d800, 0x406d8800, 0x1c01f000, 0x0201f800,
- 0x00101566, 0x4a035038, 0x00000002, 0x497b5043,
- 0x59c4d0a3, 0x8468d520, 0x486b88a3, 0x0201f800,
- 0x00102ee2, 0x80c589c0, 0x04000002, 0x0401f00d,
- 0x0201f800, 0x00104125, 0x80c589c0, 0x040207fc,
- 0x48c7282c, 0x48c7282d, 0x4200d000, 0x0000002d,
- 0x4200d800, 0x0010c54c, 0x0201f800, 0x00104e00,
- 0x1c01f000, 0x0401ffdb, 0x80c589c0, 0x04000004,
- 0x4a035038, 0x00000003, 0x0401f01f, 0x0201f800,
- 0x001013cf, 0x80c589c0, 0x04000004, 0x59a8d043,
- 0x8068d1c0, 0x04020008, 0x0201f800, 0x001015c8,
- 0x80c589c0, 0x04020002, 0x0401f013, 0x0401ffd4,
- 0x0401f011, 0x0201f800, 0x001013d9, 0x59a8d042,
- 0x8c68d51e, 0x040007f9, 0x0201f800, 0x00104125,
- 0x80c589c0, 0x04020003, 0x0401ffc9, 0x0401f006,
- 0x4a035014, 0x00000001, 0x0201f800, 0x00104092,
- 0x0401f7fa, 0x1c01f000, 0x4202d800, 0x00000001,
- 0x497b5038, 0x4a038805, 0x00000001, 0x497b282c,
- 0x497b282d, 0x497b8885, 0x1c01f000, 0x59c4d005,
- 0x8268d500, 0x000000c0, 0x04020003, 0x486b8885,
- 0x0401f006, 0x59c4d006, 0x8268d540, 0x000000f1,
- 0x486b8806, 0x0401ffed, 0x1c01f000, 0x0201f800,
- 0x00104130, 0x80c589c0, 0x04000005, 0x59a8d013,
- 0x82697480, 0x0000aaaa, 0x0400000c, 0x497b5013,
- 0x59c4d006, 0x8268d540, 0x04000001, 0x486b8806,
- 0x8d0e1d06, 0x04020008, 0x59c4d0a3, 0x8468d546,
- 0x486b88a3, 0x0401f004, 0x4a03500f, 0x00ffffff,
- 0x0401f7f3, 0x0401ffd5, 0x1c01f000, 0x809d3840,
- 0x48813800, 0x0401ff87, 0x80c589c0, 0x04000005,
- 0x4a035038, 0x00000003, 0x497b8885, 0x0401f08b,
- 0x4a038805, 0x000000f0, 0x0201f800, 0x001015c8,
- 0x80c589c0, 0x04000042, 0x0201f800, 0x001017bb,
- 0x80c589c0, 0x04000048, 0x59a8d04b, 0x8c68d50c,
- 0x0400005e, 0x0201f800, 0x001017bb, 0x80c589c0,
- 0x0402000b, 0x4a03c014, 0x00200020, 0x59c4d001,
- 0x8268d500, 0x00018000, 0x82697480, 0x00018000,
- 0x0400005f, 0x4a03c013, 0x00200000, 0x0201f800,
- 0x00104125, 0x80c589c0, 0x0402004a, 0x59c4d0a4,
- 0x8268d500, 0x0000000f, 0x82697480, 0x00000008,
- 0x0400002b, 0x59c4d005, 0x82690500, 0x04000000,
- 0x8c68d534, 0x04020026, 0x5994d02c, 0x82697480,
- 0x00000002, 0x83f17500, 0x03000000, 0x040007cf,
- 0x0201f800, 0x00104130, 0x80c589c0, 0x040007cb,
- 0x4a038805, 0x000000f0, 0x0201f800, 0x0010415e,
- 0x4a035013, 0x0000aaaa, 0x48835014, 0x59c4d0a3,
- 0x8468d546, 0x486b88a3, 0x4202d800, 0x00000001,
- 0x48835038, 0x4a038805, 0x00000001, 0x4883282c,
- 0x4883282d, 0x0401ff8e, 0x0401f7b8, 0x0201f800,
- 0x001013cf, 0x80c589c0, 0x040007b4, 0x59a8d043,
- 0x8068d1c0, 0x040007b1, 0x0401f7ae, 0x0401ff90,
- 0x0401f7ae, 0x0201f800, 0x00101791, 0x80c589c0,
- 0x040007b6, 0x0201f800, 0x0010179f, 0x80c589c0,
- 0x04000022, 0x0201f800, 0x001013c4, 0x80c589c0,
- 0x0400002a, 0x59a8d044, 0x42000000, 0xaabbccdd,
- 0x80697480, 0x04000004, 0x82697480, 0x00000004,
- 0x040207a6, 0x4a035038, 0x00000003, 0x0401f023,
- 0x0401ff6b, 0x0401f021, 0x4200d000, 0x00009c0e,
- 0x4200d800, 0xffffffef, 0x0201f800, 0x0010b3e0,
- 0x4200d000, 0x00009c0e, 0x4200d800, 0x00000008,
- 0x0201f800, 0x0010b3f2, 0x0401f797, 0x4a03c013,
- 0x00200020, 0x0401f7a2, 0x0201f800, 0x001013a3,
- 0x80c589c0, 0x0400000b, 0x59a8d044, 0x42000000,
- 0xaabbccdd, 0x80697480, 0x040007e3, 0x8068d1c0,
- 0x04020786, 0x0401f7e0, 0x59a8d044, 0x0401f7db,
- 0x59a8d044, 0x0401f7fa, 0x589d0000, 0x809d3800,
- 0x1c01f000, 0x497bc856, 0x4200d000, 0x00000080,
- 0x0201f800, 0x001012d9, 0x497b5038, 0x0201f800,
- 0x001013cf, 0x80c589c0, 0x0400000e, 0x59a8d036,
- 0x8068d1c0, 0x04020008, 0x8068d1c0, 0x04020009,
- 0x4a035036, 0x0000000a, 0x4a035043, 0x00000001,
- 0x0401f004, 0x8068d040, 0x486b5036, 0x0401f7f7,
- 0x497b8885, 0x0201f800, 0x001003ba, 0x1c01f000,
- 0x4200e000, 0x00000003, 0x59a80038, 0x80717480,
- 0x04001006, 0x0c01f001, 0x0010c546, 0x0010c548,
- 0x0010c54a, 0x0010c544, 0x4200d000, 0x000000cb,
- 0x4000d800, 0x0201f800, 0x001001e3, 0x0401f008,
- 0x0401ffd5, 0x0401f006, 0x0401fddb, 0x0401f004,
- 0x0401fee9, 0x0401f002, 0x0401ff39, 0x1c01f000,
- 0x497b282d, 0x1c01f000, 0x0201f800, 0x00102ee2,
- 0x80c589c0, 0x04000007, 0x599cd019, 0x8268d500,
- 0x0000e000, 0x82697480, 0x00004000, 0x04000003,
- 0x4178d000, 0x0401f024, 0x59c4d001, 0x8268d500,
- 0x00018000, 0x82697480, 0x00010000, 0x040207f9,
- 0x59a8d06c, 0x82697480, 0x00000002, 0x83f17500,
- 0x03000000, 0x040007f3, 0x0201f800, 0x00101929,
- 0x4a035043, 0x00000001, 0x4a035044, 0xaabbccdd,
- 0x4a035037, 0x00000004, 0x497b5038, 0x4202d800,
- 0x00000004, 0x59a8d06c, 0x8068d000, 0x486b506c,
- 0x59a8d06b, 0x8268d500, 0xfffffff8, 0x8468d544,
- 0x486b506b, 0x0201f800, 0x00100401, 0x4200d000,
- 0x00000001, 0x40698800, 0x1c01f000, 0x59a8d017,
- 0x82697480, 0x0000ffff, 0x04000004, 0x0201f800,
- 0x0010b84b, 0x0401f0b5, 0x59a8da1b, 0x826cd500,
- 0x00000028, 0x04000025, 0x8c6cdd00, 0x04000023,
- 0x4a038802, 0x0000ffbf, 0x59a8da1b, 0x8c6cdd02,
- 0x0400001e, 0x599ce018, 0x8c70e516, 0x04020012,
- 0x59a8d01c, 0x82697480, 0x0000ffff, 0x0400000e,
- 0x0201f800, 0x00101946, 0x59a8d21b, 0x8268dd00,
- 0x00000004, 0x8c68d504, 0x0402005a, 0x406e5800,
- 0x4200d000, 0x00000003, 0x0201f800, 0x00101969,
- 0x0401f096, 0x8c70e516, 0x04020005, 0x59a8d01c,
- 0x82697480, 0x0000ffff, 0x04000088, 0x59a8d01d,
- 0x8068d1c0, 0x0402004b, 0x8c6cdd08, 0x0400004a,
- 0x599cd019, 0x8c68d510, 0x0400004b, 0x0201f800,
- 0x00103bbd, 0x80c589c0, 0x04020042, 0x599cd019,
- 0x8c68d510, 0x04000004, 0x59a8d21b, 0x8c68d508,
- 0x0402000a, 0x599cd018, 0x8c68d516, 0x0400005a,
- 0x599cd017, 0x8c68d50a, 0x0402003e, 0x59a8d006,
- 0x8c68d51c, 0x0402003b, 0x4a038802, 0x0000ffff,
- 0x4200d000, 0x001094d7, 0x0201f800, 0x0010050d,
- 0x4200d000, 0x001094e4, 0x0201f800, 0x0010050d,
- 0x850e1d02, 0x4a01a8e4, 0x00000080, 0x4202d800,
- 0x00000003, 0x4a035017, 0x0000ffff, 0x0201f800,
- 0x001003e8, 0x4178d000, 0x0201f800, 0x001012d9,
- 0x497b506c, 0x59a8d21b, 0x8c68d506, 0x04000042,
- 0x599cd018, 0x8268e500, 0x00000800, 0x8c68d516,
- 0x0402003a, 0x599cd019, 0x8c68d510, 0x04000004,
- 0x59a8d21b, 0x8c68d508, 0x0402003e, 0x4200d000,
- 0x0000ffff, 0x4200d800, 0x00000006, 0x4178e000,
- 0x0201f800, 0x00102e2b, 0x0201f800, 0x00104130,
- 0x80c589c0, 0x0400001a, 0x0201f800, 0x001054e2,
- 0x0401f042, 0x59a8d016, 0x8068d1c0, 0x040007b8,
- 0x0401f03e, 0x8c6cdd16, 0x040207b5, 0x0401f03b,
- 0x4200b000, 0x000007f0, 0x417a8800, 0x0401f004,
- 0x81468800, 0x8058b040, 0x040007c0, 0x0201f800,
- 0x001039cf, 0x80c589c0, 0x040007fa, 0x5934d200,
- 0x8c68d51a, 0x040007f7, 0x0401f02c, 0x0201f800,
- 0x0010410f, 0x80c589c0, 0x0400001b, 0x59c4d006,
- 0x8468d534, 0x486b8806, 0x0201f800, 0x001054e2,
- 0x0401f7e0, 0x0201f800, 0x00103e72, 0x80c589c0,
- 0x040007a4, 0x0401f01d, 0x0201f800, 0x00102e77,
- 0x0401f7d2, 0x0201f800, 0x0010410f, 0x80c589c0,
- 0x040207bc, 0x59a8d21b, 0x486b541b, 0x0401f7b9,
- 0x4200d000, 0x000007fe, 0x4200d800, 0x00000004,
- 0x0401f7c4, 0x59c4d006, 0x8268d500, 0xffffff0f,
- 0x486b8806, 0x0401f7e5, 0x8c6cdd04, 0x04020778,
- 0x826cd500, 0x00004000, 0x8c6cdd1c, 0x04020774,
- 0x406a5800, 0x0401f767, 0x1c01f000, 0x809d3840,
- 0x48813800, 0x59c4d00d, 0x8c68d51e, 0x04020004,
- 0x59c4d005, 0x8c68d500, 0x0400000c, 0x0201f800,
- 0x001003fa, 0x0201f800, 0x0010410f, 0x80c589c0,
- 0x0400000f, 0x0201f800, 0x00104092, 0x816d7040,
- 0x040000a2, 0x0401f108, 0x4a035043, 0x00000001,
- 0x4202d800, 0x00000004, 0x4200d000, 0x001098e2,
- 0x0201f800, 0x0010895e, 0x0401f0ff, 0x0201f800,
- 0x00104130, 0x80c589c0, 0x0402008a, 0x0201f800,
- 0x001030a0, 0x59c4d0a4, 0x8268d500, 0x0000000f,
- 0x82697480, 0x00000006, 0x83f17500, 0x03000000,
- 0x040007e9, 0x0201f800, 0x00104f5d, 0x59c4d0a3,
- 0x8468d528, 0x486b88a3, 0x59a8d078, 0x8068d1c0,
- 0x040000a8, 0x59a8d015, 0x8468d546, 0x486b5015,
- 0x0201f800, 0x0010411a, 0x80c589c0, 0x040200a8,
- 0x59c4d006, 0x8268d540, 0x440000f1, 0x486b8806,
- 0x497b9005, 0x0401fed5, 0x80c589c0, 0x040207d2,
- 0x4a038802, 0x0000ffff, 0x4a0378e4, 0x00003000,
- 0x4200d000, 0x001094f2, 0x5868d400, 0x8c68d508,
- 0x04020003, 0x4a01a8e4, 0x0000c000, 0x4200d000,
- 0x001097bb, 0x0201f800, 0x0010895e, 0x59a8d00f,
- 0x4200d800, 0x00000003, 0x0201f800, 0x001051ec,
- 0x4200d000, 0x00008010, 0x59a8d809, 0x0201f800,
- 0x00102dba, 0x59c4d001, 0x8268d500, 0x00018000,
- 0x82697480, 0x00018000, 0x04000091, 0x59c4d0a3,
- 0x8468d518, 0x486b88a3, 0x59c8d015, 0x8468d548,
- 0x486b9015, 0x0201f800, 0x00101566, 0x59a8d008,
- 0x8468d500, 0x486b5008, 0x850e1d0a, 0x0201f800,
- 0x0010c1ff, 0x0201f800, 0x0010410f, 0x80c589c0,
- 0x04020003, 0x8d0e1d06, 0x0402008e, 0x0201f800,
- 0x00103bbd, 0x80c589c0, 0x04000080, 0x59c4d002,
- 0x8468d50c, 0x486b8802, 0x497b501d, 0x497b501c,
- 0x497b5070, 0x0201f800, 0x0010410f, 0x80c589c0,
- 0x04000067, 0x497b521b, 0x0201f800, 0x0010136c,
- 0x59a8d01f, 0x82680500, 0xffff0000, 0x80c4d540,
- 0x486b501f, 0x599cd017, 0x8c68d50a, 0x04000004,
- 0x59a8d21b, 0x8468d544, 0x486b521b, 0x4200d000,
- 0x00000005, 0x0201f800, 0x00105677, 0x497b501d,
- 0x497b5016, 0x4a035017, 0x0000ffff, 0x4a01a8e4,
- 0x000000c0, 0x4202d800, 0x00000002, 0x0201f800,
- 0x0010410f, 0x80c589c0, 0x04020007, 0x59a8d21b,
- 0x8268d500, 0x0000000c, 0x82697480, 0x00000004,
- 0x0400076d, 0x0201f800, 0x0010b84b, 0x0401f072,
- 0x5994d02d, 0x42000000, 0x00103661, 0x80697480,
- 0x0400002f, 0x59c4d006, 0x8268d540, 0x000000c0,
- 0x486b8806, 0x0401f76e, 0x59a8d011, 0x82697480,
- 0x00000009, 0x0402075c, 0x497b500f, 0x4a038893,
- 0x00000001, 0x4a038805, 0x000000f0, 0x0201f800,
- 0x00104125, 0x80c589c0, 0x04000034, 0x59c4d006,
- 0x8268d540, 0x000000f1, 0x486b8806, 0x59c4d006,
- 0x8268d500, 0xbbffffff, 0x486b8806, 0x0201f800,
- 0x00104f5d, 0x0201f800, 0x00105205, 0x0401fe47,
- 0x40c50000, 0x80c589c0, 0x04020743, 0x4200d000,
- 0x001097c4, 0x0201f800, 0x0010895e, 0x4883506f,
- 0x4200d000, 0x00008030, 0x4080d800, 0x0401f780,
- 0x0201f800, 0x001035b5, 0x0401f03f, 0x5994d02c,
- 0x8068d1c0, 0x04020742, 0x0401f7cf, 0x59c4d006,
- 0x8268d540, 0x44000001, 0x486b8806, 0x59c4d006,
- 0x8268d500, 0xffffff0f, 0x0401f755, 0x59a8d01f,
- 0x8268d500, 0xffff0000, 0x486b501f, 0x0201f800,
- 0x0010136c, 0x48c78880, 0x0401f79b, 0x59c4d0a3,
- 0x8468d558, 0x0401f770, 0x59c4d006, 0x8268d540,
- 0x440000f1, 0x0401f7d1, 0x0201f800, 0x0010410f,
- 0x80c589c0, 0x0400000d, 0x59a8d018, 0x8068d1c0,
- 0x0402077e, 0x0201f800, 0x00107415, 0x0401f77b,
- 0x4a03506f, 0x00000001, 0x850e1d0e, 0x0201f800,
- 0x001031be, 0x0401f014, 0x0201f800, 0x00107415,
- 0x59a8d21b, 0x8c68d506, 0x04020770, 0x59a8d018,
- 0x8068d1c0, 0x04020007, 0x59a8d41b, 0x8c68d508,
- 0x0400076a, 0x82697480, 0x0000ffff, 0x04000767,
- 0x4a03541b, 0x0000ffff, 0x0201f800, 0x001036ab,
- 0x0401f762, 0x589d0000, 0x809d3800, 0x1c01f000,
- 0x829d3c80, 0x00000005, 0x48813800, 0x48853801,
- 0x48893802, 0x488d3803, 0x48913804, 0x42011800,
- 0x00000001, 0x41791000, 0x40890800, 0x40592000,
- 0x8268f500, 0x00ffffff, 0x8278d500, 0x00ff0000,
- 0x82697480, 0x00ff0000, 0x0400003b, 0x41790000,
- 0x4200b000, 0x000007f0, 0x41ace000, 0x4080e800,
- 0x8278fd00, 0x00ffff00, 0x0401f00e, 0x807cf9c0,
- 0x0400001f, 0x59a8d00f, 0x8268d500, 0x00ffff00,
- 0x407c0000, 0x80697480, 0x04000019, 0x41790800,
- 0x8070e000, 0x8074e800, 0x8058b040, 0x04000010,
- 0x5870d800, 0x806cd9c0, 0x04000017, 0x586cd212,
- 0x8268d500, 0x0000ff00, 0x040207ed, 0x586cd002,
- 0x8268d500, 0x00ffffff, 0x40780000, 0x80697480,
- 0x040207f0, 0x42010800, 0x00000001, 0x808509c0,
- 0x04000011, 0x40768800, 0x0401f035, 0x586cd002,
- 0x8268d500, 0x000000ff, 0x82780500, 0x000000ff,
- 0x0401f7f3, 0x808101c0, 0x040207e2, 0x808911c0,
- 0x040207e0, 0x40750000, 0x42011000, 0x00000001,
- 0x0401f7dc, 0x808911c0, 0x04000018, 0x40828800,
- 0x0401f023, 0x82797480, 0x00fffffb, 0x040007c4,
- 0x040017c3, 0x82797480, 0x00ffffff, 0x040007c0,
- 0x82797480, 0x00fffffd, 0x04000014, 0x82797480,
- 0x00fffffd, 0x83f17500, 0x03000000, 0x0400000a,
- 0x82797480, 0x00fffffc, 0x0402000a, 0x42028800,
- 0x000007fc, 0x0401f00e, 0x487bc857, 0x40891800,
- 0x0401f00b, 0x82797480, 0x00fffffe, 0x04000006,
- 0x41791800, 0x0401f006, 0x42028800, 0x000007fd,
- 0x0401f003, 0x42028800, 0x000007fe, 0x4090b000,
- 0x408d8800, 0x589d2004, 0x589d1803, 0x589d1002,
- 0x589d0801, 0x589d0000, 0x829d3c00, 0x00000005,
- 0x1c01f000, 0x486bc857, 0x0401ff86, 0x1c01f000,
- 0x00000000, 0x00000001, 0x00000002, 0x00000003,
- 0x00000004, 0x00000005, 0x00000006, 0x00000007,
- 0x00000008, 0x00000009, 0x0000000a, 0x0000000b,
- 0x0000000c, 0x0000000d, 0x0000000e, 0x0000000f,
- 0x01e5e2c1, 0x02800004, 0x00000000, 0x0000c000,
- 0x00000705, 0x073fca5a, 0x0705a5a5, 0x01928009,
- 0x070ff0e1, 0x03800006, 0x053f2aaa, 0x070aaaaa,
- 0x073f3aaa, 0x070aaaaa, 0x05958014, 0x05308000,
- 0x05008000, 0x0600902f, 0x06a005b0, 0x0202f051,
- 0x042e4020, 0x008f0251, 0x033e5000, 0x03020000,
- 0x078d0024, 0x049304c4, 0x019204c6, 0x050fb056,
- 0x040010e6, 0x002fb008, 0x060ff0e6, 0x00580401,
- 0x054880ff, 0x07810022, 0x028c0364, 0x038a0363,
- 0x068b0361, 0x058e8014, 0x0678aae5, 0x06000051,
- 0x0781817e, 0x079a0014, 0x022a5001, 0x030430d4,
- 0x06780043, 0x030e0000, 0x030450ff, 0x06780043,
- 0x03019000, 0x048186b9, 0x027c0045, 0x03020000,
- 0x048180bf, 0x04908034, 0x039106b7, 0x010410a6,
- 0x072d6000, 0x05601041, 0x050f80ff, 0x032fa071,
- 0x070ff0d1, 0x055c0403, 0x034a88ff, 0x058186d1,
- 0x04482034, 0x058180b8, 0x07480000, 0x078106c3,
- 0x06780043, 0x070000f0, 0x06810049, 0x037c00ff,
- 0x06000010, 0x048186bf, 0x0379ff00, 0x070fffff,
- 0x06780043, 0x07f00000, 0x075a0000, 0x020ef001,
- 0x028606c1, 0x05484000, 0x03a181cf, 0x062d6002,
- 0x002fb001, 0x070ff069, 0x0186805c, 0x060ff079,
- 0x055c0441, 0x07810014, 0x012fb000, 0x060560fb,
- 0x02800062, 0x060ff079, 0x028681b9, 0x070ff069,
- 0x055c0441, 0x07810014, 0x060560fb, 0x070ff0d1,
- 0x062d6001, 0x055c040c, 0x048180a2, 0x070ff0d1,
- 0x045c040d, 0x054b08ff, 0x058180ac, 0x0007b001,
- 0x03079041, 0x0307a000, 0x07489000, 0x058180c6,
- 0x078d006f, 0x0207c004, 0x0107d005, 0x0107e006,
- 0x0207f007, 0x02080008, 0x01081009, 0x0108200a,
- 0x0208300b, 0x0186807b, 0x0448d07a, 0x078106ca,
- 0x072d5003, 0x0049107a, 0x06810085, 0x070ff00a,
- 0x0054040b, 0x05828084, 0x078d0081, 0x0008200b,
- 0x032ff000, 0x010770ff, 0x0108400c, 0x0208500d,
- 0x078d0087, 0x0678007a, 0x07f00000, 0x010880ff,
- 0x03386000, 0x03010000, 0x072e6300, 0x020ef07f,
- 0x03860014, 0x070ff07d, 0x0450047c, 0x050f80ff,
- 0x002fa819, 0x068d0094, 0x02080001, 0x00081002,
- 0x0678007a, 0x05000200, 0x0781009c, 0x0049107a,
- 0x02a181c8, 0x01082003, 0x068d009d, 0x02386004,
- 0x03010000, 0x072e6c00, 0x03800014, 0x062d6001,
- 0x07f00000, 0x07f00000, 0x0400e0d0, 0x0648300e,
- 0x07810066, 0x072e500c, 0x00208001, 0x06a005b5,
- 0x03800014, 0x06780043, 0x070000f0, 0x078106cc,
- 0x050020ff, 0x027c0002, 0x06000010, 0x078100b4,
- 0x038006cc, 0x0500d0d1, 0x0279ff0d, 0x070000ff,
- 0x0380006a, 0x060ff0d0, 0x0179feff, 0x0700ffff,
- 0x057dfeff, 0x0700ffff, 0x078106b1, 0x03800041,
- 0x027c0045, 0x03040000, 0x078100cf, 0x027c0045,
- 0x03080000, 0x078106b7, 0x02800034, 0x06600a79,
- 0x050f80ff, 0x053fa80a, 0x06000010, 0x0380006f,
- 0x05601041, 0x050f80ff, 0x032fa071, 0x03800041,
- 0x0204a051, 0x06780043, 0x070000f0, 0x037c00ff,
- 0x06000010, 0x07818174, 0x072d6000, 0x009486b3,
- 0x050fb056, 0x044880e6, 0x05818014, 0x060ff0d0,
- 0x0179feff, 0x0700ffff, 0x057dfeff, 0x0700ffff,
- 0x078106b1, 0x053f2000, 0x07030000, 0x019d8014,
- 0x070ff093, 0x045a0201, 0x070ff093, 0x045c0401,
- 0x048180e3, 0x02046092, 0x04002046, 0x060ff002,
- 0x045c0401, 0x0703a0ff, 0x04600202, 0x00540401,
- 0x048280f1, 0x04500425, 0x070060ff, 0x0730ffff,
- 0x0700000f, 0x0742000f, 0x058101b1, 0x07a00699,
- 0x0648a002, 0x048180f4, 0x00047089, 0x070ff047,
- 0x045c0443, 0x077800ff, 0x07f00000, 0x078181af,
- 0x07780047, 0x0500e000, 0x058186a0, 0x070ff006,
- 0x01860122, 0x0179fe47, 0x0700000f, 0x010480ff,
- 0x056c7048, 0x0681810d, 0x007a0d4a, 0x04003801,
- 0x0220f001, 0x0080011a, 0x07608e48, 0x034a60ff,
- 0x0700f0ff, 0x074b88ff, 0x037000ff, 0x07000600,
- 0x05500448, 0x074d00ff, 0x045a044a, 0x0304a0ff,
- 0x070ff00f, 0x01540406, 0x05820122, 0x0495012a,
- 0x04a001ef, 0x0386812d, 0x0134bfff, 0x070fffff,
- 0x0104102e, 0x050fd041, 0x0080012f, 0x05950128,
- 0x04a001ef, 0x01860128, 0x0202f00e, 0x052e4030,
- 0x040fd02f, 0x05a0024e, 0x03800014, 0x0400e02f,
- 0x042e4020, 0x0202f051, 0x0004100e, 0x0004b00e,
- 0x024a6c46, 0x04500423, 0x050070ff, 0x03620024,
- 0x050080ff, 0x04004046, 0x0700500f, 0x03206000,
- 0x05601048, 0x0700a0ff, 0x0700900a, 0x070ff005,
- 0x04500446, 0x00540425, 0x05820160, 0x07601822,
- 0x050f80ff, 0x063fa032, 0x06000002, 0x03203000,
- 0x01204000, 0x03205000, 0x0120b000, 0x0320c000,
- 0x07601841, 0x050f80ff, 0x043fa852, 0x06000001,
- 0x070ff056, 0x056c02ff, 0x050fb0ff, 0x070560ff,
- 0x03079041, 0x05601041, 0x050f80ff, 0x073fa011,
- 0x0600003d, 0x06780043, 0x07f00000, 0x065a007a,
- 0x010880ff, 0x05a001e8, 0x058d0159, 0x0208a04a,
- 0x0108b04b, 0x02386001, 0x03010000, 0x072e6300,
- 0x0380008e, 0x0500d00a, 0x05500405, 0x014a68ff,
- 0x070090ff, 0x0154040a, 0x0700c0ff, 0x0600a023,
- 0x0500b024, 0x02206001, 0x07601822, 0x050f80ff,
- 0x063fa04a, 0x06000002, 0x07f00000, 0x07601222,
- 0x050f80ff, 0x043fa819, 0x06000001, 0x0600a00d,
- 0x00800145, 0x06780043, 0x070000f0, 0x050010ff,
- 0x027c0001, 0x07000030, 0x068106a7, 0x027c0001,
- 0x06000020, 0x068106a7, 0x028006bf, 0x074860ff,
- 0x0781819a, 0x054880ff, 0x07810014, 0x070ff056,
- 0x050fb0ff, 0x044880e5, 0x04810189, 0x044880e6,
- 0x05818014, 0x0080018f, 0x056c02ff, 0x050fb0ff,
- 0x070560ff, 0x072e5300, 0x044880e6, 0x05818014,
- 0x072d5003, 0x06780043, 0x07f00000, 0x010880ff,
- 0x058d0193, 0x03386005, 0x03010000, 0x033e6000,
- 0x0700000c, 0x052e5200, 0x03800014, 0x079a0014,
- 0x05301fff, 0x0700000f, 0x06420001, 0x058101b1,
- 0x07a00699, 0x0648a002, 0x0681819d, 0x062e5080,
- 0x04001089, 0x040fd002, 0x040fd001, 0x02499001,
- 0x048101c1, 0x070ff0d4, 0x050fd0ff, 0x045c0401,
- 0x077800ff, 0x07f00000, 0x068181c1, 0x03800014,
- 0x012091af, 0x038005b8, 0x012091b1, 0x038005b8,
- 0x002091b3, 0x038005b8, 0x03209000, 0x038005b8,
- 0x012091b7, 0x038005b8, 0x002091b9, 0x038005b8,
- 0x06780075, 0x06000c07, 0x068105f8, 0x012091bb,
- 0x070fc0ff, 0x07a005a3, 0x070fc0ff, 0x05308000,
- 0x0700a000, 0x06a005b5, 0x033e5000, 0x0700000c,
- 0x03800014, 0x070ff003, 0x01540477, 0x068281cd,
- 0x07003077, 0x060ff051, 0x010770ff, 0x07c00000,
- 0x04602001, 0x050f80ff, 0x063fa029, 0x06000008,
- 0x02015010, 0x02016051, 0x00017051, 0x00011051,
- 0x07601e41, 0x050f80ff, 0x053fa83a, 0x06000008,
- 0x07f00000, 0x05601041, 0x050f80ff, 0x01464000,
- 0x032fa00a, 0x05007011, 0x05008012, 0x06009013,
- 0x0700a014, 0x0400b015, 0x0600c016, 0x0500d017,
- 0x07c00000, 0x072d5003, 0x06601879, 0x050f80ff,
- 0x058d01eb, 0x063fa051, 0x0600003e, 0x07c00000,
- 0x06005051, 0x0400e02c, 0x0660060e, 0x050f80ff,
- 0x032fa009, 0x0379ff00, 0x070000ff, 0x076c0000,
- 0x05810211, 0x0660480e, 0x0500e0ff, 0x034000ff,
- 0x01540427, 0x0482023b, 0x03400005, 0x070ff005,
- 0x055c0428, 0x0481023d, 0x056c0805, 0x068181f1,
- 0x040f8029, 0x053fa809, 0x07000024, 0x07f00000,
- 0x06600649, 0x050f80ff, 0x032fa009, 0x0379ff00,
- 0x070000ff, 0x076c0000, 0x068181f1, 0x05a00241,
- 0x0400e049, 0x01800212, 0x05a00241, 0x072d6000,
- 0x0460040e, 0x050f80ff, 0x0004d0d0, 0x0379ff4d,
- 0x0700ffff, 0x0104e0d1, 0x0379ff4e, 0x0700ffff,
- 0x062d6002, 0x032fa009, 0x0204f0d0, 0x064b004f,
- 0x07780000, 0x07ffff00, 0x045a044f, 0x070000ff,
- 0x00201008, 0x04002051, 0x06003051, 0x01204000,
- 0x07305000, 0x07000060, 0x03206009, 0x05007022,
- 0x0460040e, 0x050f80ff, 0x032fa042, 0x07f00000,
- 0x04603e0e, 0x050f80ff, 0x053fa812, 0x06000026,
- 0x050010d1, 0x0660360e, 0x050f80ff, 0x012fa80a,
- 0x060ff00e, 0x055c042e, 0x0581023f, 0x07c00000,
- 0x0400e026, 0x008001fd, 0x0500e02e, 0x01800212,
- 0x0400e051, 0x0180023a, 0x0340002d, 0x050f802b,
- 0x053fa80a, 0x06000016, 0x07f00000, 0x0660480e,
- 0x0302c0ff, 0x034000ff, 0x01540427, 0x0482024c,
- 0x07c00000, 0x0202c026, 0x0180024b, 0x053f2000,
- 0x03020000, 0x07c00000, 0x022a5002, 0x077800e4,
- 0x07000005, 0x04818351, 0x010440d7, 0x0678aae5,
- 0x06000051, 0x01a186e4, 0x07908259, 0x019102cf,
- 0x030400a6, 0x04600e40, 0x050f80ff, 0x022fa029,
- 0x07f00000, 0x074b0000, 0x076c0600, 0x078182d1,
- 0x060ff002, 0x01580403, 0x058102e1, 0x070ff044,
- 0x045c0404, 0x034a88ff, 0x068182d3, 0x0349f044,
- 0x068182e3, 0x02495001, 0x068182d5, 0x030100d8,
- 0x062da001, 0x06480001, 0x058102a0, 0x0448e001,
- 0x04810286, 0x00491001, 0x068182dc, 0x06005010,
- 0x05780105, 0x07ffff00, 0x06006051, 0x04600e02,
- 0x050f80ff, 0x053fa812, 0x06000002, 0x0245f040,
- 0x0484027f, 0x020e0040, 0x053f2000, 0x05008000,
- 0x07930017, 0x03920017, 0x03800014, 0x060ff079,
- 0x045c0440, 0x0681828a, 0x0644f07a, 0x002fb008,
- 0x060ff079, 0x045c0440, 0x0681828f, 0x0644f07a,
- 0x002fb008, 0x0644f001, 0x06489001, 0x04810297,
- 0x04600440, 0x050f80ff, 0x073fa00a, 0x06000008,
- 0x07a006e4, 0x054b0800, 0x04002001, 0x05001000,
- 0x03200003, 0x06600c40, 0x050f80ff, 0x022fa01a,
- 0x01800281, 0x020ef002, 0x008602c2, 0x04600840,
- 0x050f80ff, 0x053fa809, 0x06000002, 0x05780105,
- 0x00800440, 0x017c0105, 0x05000400, 0x068182c2,
- 0x04602002, 0x050f80ff, 0x053fa809, 0x06000002,
- 0x07f00000, 0x06602e40, 0x050f80ff, 0x070ff005,
- 0x053fa809, 0x06000002, 0x055c0405, 0x068182c2,
- 0x06005010, 0x05780105, 0x07ffff00, 0x06006051,
- 0x04600e02, 0x050f80ff, 0x053fa812, 0x06000002,
- 0x007a0140, 0x07c00000, 0x0080027f, 0x0644f001,
- 0x04601040, 0x050f80ff, 0x012fa80a, 0x05308000,
- 0x03040000, 0x04600440, 0x050f80ff, 0x073fa00a,
- 0x06000008, 0x06009040, 0x06a005b0, 0x01800281,
- 0x02209002, 0x03800342, 0x03209000, 0x03800342,
- 0x02209004, 0x03800342, 0x06a0035b, 0x062da001,
- 0x05308000, 0x05002000, 0x06009040, 0x06a005b0,
- 0x01800281, 0x05308000, 0x05004000, 0x06009040,
- 0x06a005b0, 0x01800281, 0x02209008, 0x03800342,
- 0x053f2000, 0x05008000, 0x02495001, 0x04818334,
- 0x012f200c, 0x039d82e7, 0x04600840, 0x050f80ff,
- 0x053fa809, 0x07000003, 0x0721f000, 0x0249f007,
- 0x048102f1, 0x0245f01f, 0x06000002, 0x05601600,
- 0x050f80ff, 0x012fa809, 0x06480001, 0x06810334,
- 0x04481001, 0x04818334, 0x06602840, 0x050f80ff,
- 0x012fa809, 0x020ef001, 0x00868334, 0x069c0334,
- 0x070050d8, 0x062da001, 0x06306002, 0x05000430,
- 0x04600440, 0x050f80ff, 0x053fa812, 0x06000002,
- 0x008f8307, 0x050040d8, 0x062da001, 0x05602000,
- 0x050f80ff, 0x073fa009, 0x06000001, 0x060ff004,
- 0x00540402, 0x06820332, 0x06005051, 0x06006051,
- 0x04602640, 0x050f80ff, 0x063fa01a, 0x06000002,
- 0x07f00000, 0x06600a40, 0x050f80ff, 0x073fa00a,
- 0x07000003, 0x06780007, 0x02800040, 0x0581832b,
- 0x0079c107, 0x07ffffff, 0x007a0b07, 0x03800000,
- 0x04780104, 0x07ffff00, 0x07810327, 0x02455007,
- 0x04600840, 0x050f80ff, 0x053fa80a, 0x07000003,
- 0x060ff040, 0x045a041f, 0x030e30ff, 0x002f2008,
- 0x07930017, 0x03920017, 0x03800014, 0x04004002,
- 0x03800311, 0x002f2008, 0x06a0035b, 0x062da001,
- 0x07f00000, 0x008f8338, 0x030100d8, 0x062da001,
- 0x05308000, 0x07005000, 0x06009040, 0x06a005b0,
- 0x04008010, 0x06a005b5, 0x03800017, 0x050fd009,
- 0x040fd040, 0x053f2000, 0x05008000, 0x05308000,
- 0x03013000, 0x06a005b0, 0x010440d7, 0x0349f044,
- 0x0681034f, 0x062da001, 0x028f034f, 0x03e00000,
- 0x062da001, 0x03800017, 0x04908351, 0x0249c0e5,
- 0x07810017, 0x062da001, 0x07f00000, 0x07f00000,
- 0x033e5000, 0x070c0000, 0x028f0354, 0x02800015,
- 0x050020d8, 0x04600440, 0x050f80ff, 0x073fa00a,
- 0x06000001, 0x07c00000, 0x002fb001, 0x02800364,
- 0x012fb000, 0x03075087, 0x078d0365, 0x03386000,
- 0x03020000, 0x04482075, 0x068103dc, 0x0648a0e6,
- 0x068103ab, 0x0642007f, 0x078103a9, 0x0340007e,
- 0x060ff038, 0x0154047e, 0x03d00399, 0x0560027d,
- 0x050f80ff, 0x032fa009, 0x030ef000, 0x038605f3,
- 0x0107d000, 0x07600a00, 0x050f80ff, 0x032fa009,
- 0x03681e00, 0x076c14ff, 0x05818381, 0x0007e038,
- 0x0727c006, 0x03800387, 0x03681e00, 0x04500420,
- 0x050f80ff, 0x073fa009, 0x0700003f, 0x0380036f,
- 0x070ff07d, 0x0450047c, 0x050f80ff, 0x002fa819,
- 0x078d038b, 0x02080001, 0x00081002, 0x0678007a,
- 0x05000200, 0x07810393, 0x0049107a, 0x02a181c8,
- 0x01082003, 0x068d0394, 0x02386004, 0x03010000,
- 0x072e6c00, 0x028003dc, 0x0380039f, 0x028003a1,
- 0x038003a3, 0x038003a5, 0x028003a7, 0x03800372,
- 0x0727c006, 0x03800387, 0x0727c009, 0x03800387,
- 0x0727c00c, 0x03800387, 0x0727c00f, 0x03800387,
- 0x0727c012, 0x03800387, 0x052e6800, 0x028003dc,
- 0x044880e6, 0x07810624, 0x070ff088, 0x034a48ff,
- 0x048185e6, 0x060ff083, 0x008685f1, 0x013e6200,
- 0x07000003, 0x078d03b4, 0x028c0364, 0x0279127a,
- 0x05000222, 0x016d02ff, 0x0681840d, 0x00798075,
- 0x0700f50f, 0x0681840d, 0x06483075, 0x0481040d,
- 0x04602679, 0x050f80ff, 0x053fa812, 0x07000041,
- 0x078d03c3, 0x02386001, 0x07030000, 0x0648f07a,
- 0x068103da, 0x04600479, 0x050f80ff, 0x053fa809,
- 0x06000002, 0x05780105, 0x07ffff00, 0x06006051,
- 0x05600e7b, 0x050f80ff, 0x053fa812, 0x06000002,
- 0x0245f079, 0x078403d4, 0x020e0079, 0x033e6a00,
- 0x0700000a, 0x02079051, 0x03800014, 0x0444e07a,
- 0x01800456, 0x068d03dc, 0x028c0364, 0x060ff0e6,
- 0x077800ff, 0x07000050, 0x048183f4, 0x02799075,
- 0x0500fd0f, 0x037c00ff, 0x04000808, 0x048183f4,
- 0x0049107a, 0x048183f4, 0x06601879, 0x050f80ff,
- 0x063fa052, 0x0600003e, 0x078d03ed, 0x02386001,
- 0x07030000, 0x033e6a00, 0x0700000a, 0x02079051,
- 0x03800014, 0x0648c0e6, 0x07818412, 0x0448e0e6,
- 0x0581040a, 0x022093f8, 0x02490075, 0x068181c1,
- 0x004920e6, 0x05810405, 0x06a00662, 0x05001088,
- 0x00700101, 0x03100000, 0x00088001, 0x033e6000,
- 0x07000088, 0x03800653, 0x02386001, 0x07030000,
- 0x033e6000, 0x06000008, 0x0080049b, 0x02799075,
- 0x0700f50f, 0x07810014, 0x06601879, 0x050080ff,
- 0x06309052, 0x0600003e, 0x00800416, 0x04602679,
- 0x050080ff, 0x05309812, 0x07000041, 0x0648007a,
- 0x0581041e, 0x04488075, 0x0781841e, 0x040f8008,
- 0x070fa009, 0x0049107a, 0x02a1849d, 0x00798075,
- 0x0600f507, 0x0581860f, 0x0448b075, 0x04810425,
- 0x02493075, 0x0681060b, 0x0648c0e6, 0x06818438,
- 0x058d0427, 0x02386001, 0x07030000, 0x0049107a,
- 0x0581042e, 0x020ef083, 0x00860438, 0x06483075,
- 0x05810499, 0x0678007a, 0x07000035, 0x01a185a3,
- 0x05308000, 0x07060000, 0x06009079, 0x06a005b0,
- 0x01800499, 0x06483075, 0x068105cd, 0x058d043a,
- 0x02386001, 0x07030000, 0x0444e07a, 0x0648307a,
- 0x0681846d, 0x0448707a, 0x04810494, 0x0648f07a,
- 0x05810456, 0x07a005a3, 0x04008079, 0x06a005c2,
- 0x02868468, 0x0049107a, 0x06818468, 0x04600408,
- 0x050f80ff, 0x053fa809, 0x06000002, 0x05780105,
- 0x07ffff00, 0x05600e7b, 0x050f80ff, 0x053fa812,
- 0x06000002, 0x07a005ac, 0x01800499, 0x0760127b,
- 0x050f80ff, 0x032fa009, 0x0349c000, 0x07818466,
- 0x04601079, 0x050f80ff, 0x073fa00a, 0x0600003d,
- 0x0648907a, 0x05810499, 0x06600a79, 0x050f80ff,
- 0x053fa80a, 0x06000010, 0x01800499, 0x0046e07a,
- 0x00800494, 0x06009008, 0x05308000, 0x05004000,
- 0x06a005b0, 0x01800499, 0x0760187b, 0x050f80ff,
- 0x032fa011, 0x070ff000, 0x04500401, 0x030460ff,
- 0x060ff025, 0x00540446, 0x05820481, 0x030460ff,
- 0x052e40c0, 0x04092046, 0x0349a0e4, 0x0781847e,
- 0x003e4080, 0x0700c000, 0x01800482, 0x003e4080,
- 0x05008000, 0x01800482, 0x04092046, 0x070ff03a,
- 0x02868486, 0x013e4000, 0x07000003, 0x05a0024e,
- 0x06600679, 0x050f80ff, 0x00201007, 0x012fa80a,
- 0x0046047a, 0x034630ff, 0x050020ff, 0x06003051,
- 0x04601079, 0x050f80ff, 0x073fa012, 0x06000001,
- 0x01800499, 0x07a005a3, 0x05308000, 0x03020000,
- 0x06009079, 0x06a005b0, 0x033e6a00, 0x0700000a,
- 0x02079051, 0x03800014, 0x06604279, 0x050f80ff,
- 0x032fa009, 0x070ff000, 0x008604b6, 0x057dfeff,
- 0x07ffffff, 0x048104b6, 0x050f8000, 0x012fa811,
- 0x0079fe02, 0x070000ff, 0x077d66ff, 0x060000dc,
- 0x068184b6, 0x060ff001, 0x038684b7, 0x064b0002,
- 0x06420002, 0x060ff002, 0x05500400, 0x050f80ff,
- 0x05004084, 0x073fa00a, 0x06000002, 0x07c00000,
- 0x04600201, 0x050f80ff, 0x073fa009, 0x06000001,
- 0x0079fe02, 0x070000ff, 0x077d72ff, 0x070000dd,
- 0x068184b6, 0x064b0002, 0x06420002, 0x06000001,
- 0x008004b0, 0x0605004c, 0x008004c8, 0x049304c4,
- 0x07a005a9, 0x054bc450, 0x048104cb, 0x01d004cc,
- 0x008004cb, 0x008004dc, 0x018004de, 0x02800568,
- 0x0380057b, 0x018004eb, 0x018004de, 0x02800532,
- 0x008004dc, 0x008004dc, 0x0280057f, 0x008004dc,
- 0x02800583, 0x02800598, 0x02800554, 0x008004dc,
- 0x008004dc, 0x002094dc, 0x038005b8, 0x073c3fff,
- 0x0700000f, 0x0379ff50, 0x070fffff, 0x060ff079,
- 0x055c0450, 0x07810578, 0x002fb008, 0x060ff079,
- 0x055c0450, 0x07810577, 0x06a0059b, 0x02800570,
- 0x0179fe50, 0x070fffff, 0x070050ff, 0x060ff079,
- 0x055c0405, 0x058104f5, 0x002fb008, 0x060ff079,
- 0x055c0405, 0x05818574, 0x073c3fff, 0x0700000f,
- 0x070ff087, 0x017980ff, 0x0600f507, 0x04818504,
- 0x02203040, 0x05002087, 0x0049d002, 0x04818504,
- 0x002fb008, 0x07006087, 0x002fb008, 0x0149d006,
- 0x0681052c, 0x07930509, 0x01257000, 0x052e4003,
- 0x072e5030, 0x0304c050, 0x02400057, 0x06740057,
- 0x06000004, 0x0682001a, 0x0049107a, 0x02a1849d,
- 0x04002083, 0x07003084, 0x04004085, 0x04602679,
- 0x050f80ff, 0x063fa01a, 0x06000001, 0x07a005a3,
- 0x06a0066b, 0x033e6a00, 0x0700000a, 0x062e5020,
- 0x07a00699, 0x02798102, 0x070000ff, 0x007c8002,
- 0x07000055, 0x06810529, 0x072e50c0, 0x0648a002,
- 0x06810529, 0x078d0524, 0x03386006, 0x03010000,
- 0x033e6000, 0x0700000c, 0x003e4002, 0x07000a00,
- 0x0080049b, 0x07420003, 0x078184fc, 0x00798002,
- 0x0600f507, 0x04818504, 0x0280050d, 0x07930539,
- 0x01257000, 0x073c3fff, 0x0700000f, 0x052e4003,
- 0x072e5030, 0x0304c050, 0x067800e6, 0x07000041,
- 0x0681053e, 0x07a00674, 0x04818549, 0x002fb008,
- 0x067800e6, 0x07000041, 0x07810544, 0x07a00674,
- 0x04818549, 0x062e5020, 0x003e4002, 0x07000a00,
- 0x03e00000, 0x03800014, 0x06740057, 0x07000018,
- 0x0682001a, 0x06a0066b, 0x033e6a00, 0x0700000a,
- 0x002fb008, 0x06a0066b, 0x033e6a00, 0x0700000a,
- 0x03800544, 0x0379ff50, 0x070fffff, 0x060ff079,
- 0x055c0450, 0x0581855a, 0x0245507a, 0x002fb008,
- 0x060ff079, 0x055c0450, 0x0581855f, 0x0245507a,
- 0x002fb008, 0x05601050, 0x050f80ff, 0x012fa809,
- 0x02455001, 0x05601050, 0x050f80ff, 0x012fa80a,
- 0x03800571, 0x05958578, 0x0179fe50, 0x070fffff,
- 0x045c042f, 0x05818578, 0x0202f051, 0x042e4020,
- 0x03800571, 0x002fb008, 0x003e4002, 0x07000a00,
- 0x0280001a, 0x05938577, 0x062e5020, 0x042e4002,
- 0x002fb008, 0x013e4000, 0x05000e00, 0x0280001a,
- 0x0179fe50, 0x070fffff, 0x010210ff, 0x0280001a,
- 0x0179fe50, 0x070fffff, 0x050340ff, 0x03800571,
- 0x0179fe50, 0x070fffff, 0x0102e0ff, 0x05602c2e,
- 0x050f80ff, 0x05222000, 0x07223000, 0x05224000,
- 0x07225000, 0x07226000, 0x05227000, 0x05228000,
- 0x07229000, 0x0722a000, 0x0522b000, 0x063fa051,
- 0x07000011, 0x0202c026, 0x0522d000, 0x052e400c,
- 0x0280001a, 0x030430d4, 0x062e5008, 0x01800182,
- 0x05601050, 0x050f80ff, 0x032fa009, 0x03460000,
- 0x038005a6, 0x0246007a, 0x0045207a, 0x028005a4,
- 0x0246007a, 0x0600007a, 0x04601079, 0x050f80ff,
- 0x032fa00a, 0x07c00000, 0x019285a9, 0x070500e1,
- 0x07c00000, 0x0245f008, 0x068405ad, 0x020e0008,
- 0x07c00000, 0x070ff009, 0x065a0008, 0x078405b2,
- 0x020e0008, 0x07c00000, 0x068405b5, 0x020e0008,
- 0x07c00000, 0x05308000, 0x0500d000, 0x06a005b0,
- 0x07a005bd, 0x03800014, 0x052e4300, 0x072e500c,
- 0x073c3fff, 0x0700000f, 0x07c00000, 0x04602608,
- 0x050f80ff, 0x032fa011, 0x076a0000, 0x048185cb,
- 0x066a0001, 0x068105cb, 0x06006051, 0x07c00000,
- 0x02206001, 0x07c00000, 0x0678007a, 0x06000020,
- 0x048185d5, 0x0049107a, 0x068105d5, 0x073c3fff,
- 0x0700000f, 0x0180043a, 0x040fd079, 0x0648307a,
- 0x068105da, 0x07a006db, 0x028005df, 0x07a005a0,
- 0x05308000, 0x05001000, 0x06009079, 0x06a005b0,
- 0x068d05df, 0x033e6a00, 0x0600000e, 0x02079051,
- 0x03386006, 0x03010000, 0x03800014, 0x052e6200,
- 0x0648307a, 0x078105eb, 0x07a006db, 0x03800653,
- 0x07a005a0, 0x05308000, 0x05001000, 0x06009079,
- 0x06a005b0, 0x03800653, 0x052e6200, 0x0080040d,
- 0x0648307a, 0x078181b7, 0x07a005a3, 0x032095f3,
- 0x038005b8, 0x04002089, 0x04780102, 0x07f00000,
- 0x05001088, 0x04740101, 0x03100000, 0x04780101,
- 0x07f00000, 0x060ff002, 0x045c0401, 0x0481860d,
- 0x00088001, 0x033e6000, 0x070000c0, 0x0220901a,
- 0x05308000, 0x01012000, 0x06a005b0, 0x0280064f,
- 0x0220960b, 0x038005b8, 0x0220960d, 0x008001bf,
- 0x040fd075, 0x040fd07a, 0x040fd079, 0x0648307a,
- 0x07810618, 0x06780075, 0x06000007, 0x0481861f,
- 0x07a006db, 0x06486075, 0x068181b5, 0x02490075,
- 0x078181bb, 0x04487075, 0x05818627, 0x03800630,
- 0x05308000, 0x03010000, 0x06009079, 0x06a005b0,
- 0x03800014, 0x0448e0e6, 0x048183dc, 0x008001b3,
- 0x0648307a, 0x0481864f, 0x05308000, 0x0500e000,
- 0x06009079, 0x06a005b0, 0x04008089, 0x06a005b5,
- 0x0280064f, 0x07a005a0, 0x05308000, 0x0700f000,
- 0x06009079, 0x07000088, 0x06a00638, 0x06a005b0,
- 0x03800014, 0x03386000, 0x07030000, 0x07f00000,
- 0x068d063b, 0x033e6a00, 0x0600000e, 0x02079051,
- 0x0448b075, 0x06810646, 0x02493075, 0x06810646,
- 0x05301005, 0x03010000, 0x03800648, 0x05301006,
- 0x03010000, 0x05002087, 0x06485002, 0x05818648,
- 0x0744c000, 0x01088000, 0x02086001, 0x07c00000,
- 0x05001088, 0x06a00662, 0x0644c001, 0x00088001,
- 0x033e6a00, 0x0600000e, 0x004920e6, 0x04818658,
- 0x02079051, 0x068d0658, 0x060ff089, 0x034990ff,
- 0x0781065f, 0x03386005, 0x03010000, 0x03800014,
- 0x03386006, 0x03010000, 0x03800014, 0x068d0662,
- 0x03386000, 0x07030000, 0x07f00000, 0x078d0666,
- 0x070ff087, 0x074850ff, 0x04818667, 0x07c00000,
- 0x068d066b, 0x02386001, 0x07030000, 0x07f00000,
- 0x078d066f, 0x070ff087, 0x074850ff, 0x04818670,
- 0x07c00000, 0x05002087, 0x0049d002, 0x04818683,
- 0x002fb008, 0x067800e6, 0x07000041, 0x002fb008,
- 0x04818683, 0x07a00699, 0x0448e002, 0x06810686,
- 0x0648a002, 0x05818690, 0x06486002, 0x0681068a,
- 0x02400057, 0x056a02ff, 0x07c00000, 0x07a00699,
- 0x06788102, 0x06000004, 0x04818683, 0x04002089,
- 0x070ff0d4, 0x045c0402, 0x077800ff, 0x07f00000,
- 0x04818683, 0x00202010, 0x028c0683, 0x07f00000,
- 0x06420002, 0x04818691, 0x06a0066b, 0x033e6a00,
- 0x0700000a, 0x07c00000, 0x07f00000, 0x060ff0a2,
- 0x045a0202, 0x060ff0a2, 0x045c0402, 0x0581869a,
- 0x07c00000, 0x05a0024e, 0x03495047, 0x078106a5,
- 0x0320901d, 0x038006d7, 0x0220901f, 0x038006d7,
- 0x014980e4, 0x05818014, 0x013e4000, 0x07003000,
- 0x05600e35, 0x050f80ff, 0x07a006e8, 0x01208003,
- 0x06a005b5, 0x028006bf, 0x03209009, 0x038006d7,
- 0x03209011, 0x038006d7, 0x02209007, 0x038006d7,
- 0x03209003, 0x038006d7, 0x00497043, 0x048186b5,
- 0x00494043, 0x078106b1, 0x02209001, 0x038006d7,
- 0x0220900d, 0x038006d7, 0x0320900f, 0x038006d7,
- 0x03493000, 0x068106c8, 0x027c0045, 0x070a0000,
- 0x068106d3, 0x0220900b, 0x038006d7, 0x0320900c,
- 0x028006cd, 0x02209013, 0x05308000, 0x01012000,
- 0x06a005b0, 0x0080018f, 0x03209005, 0x038006d7,
- 0x072e500c, 0x00208002, 0x06a005b5, 0x03800014,
- 0x05308000, 0x01012000, 0x06a005b0, 0x01800182,
- 0x05a0024e, 0x070ff02e, 0x045c0479, 0x068106e3,
- 0x05308000, 0x05008000, 0x06009079, 0x06a005b0,
- 0x07c00000, 0x053f2000, 0x0700c000, 0x019d86e4,
- 0x07c00000, 0x072d6000, 0x07f00000, 0x07f00000,
- 0x000110d0, 0x010120d1, 0x062d6001, 0x07f00000,
- 0x07f00000, 0x020130d0, 0x010140d1, 0x062d6002,
- 0x010170d4, 0x07f00000, 0x020150d0, 0x030160d1,
- 0x053fa83a, 0x06000008, 0x07c00000, 0x07600c41,
- 0x050f80ff, 0x01202003, 0x073fa00a, 0x06000001,
- 0x07f00000, 0x05601041, 0x050f80ff, 0x032fa071,
- 0x028000cb, 0xd17e39c3, 0x02800004, 0x00000000,
- 0x00008000, 0x000003ea, 0x033d0aaa, 0x070aaaaa,
- 0x013d1aaa, 0x070aaaaa, 0x050f801e, 0x012fa8d1,
- 0x050f801e, 0x043fa889, 0x0700000f, 0x03200005,
- 0x07420000, 0x050fb000, 0x050f801e, 0x073fa021,
- 0x06000038, 0x050f801e, 0x053fa859, 0x0700003a,
- 0x050fe000, 0x0481800e, 0x07840021, 0x0595801d,
- 0x030e0011, 0x072e4200, 0x03800018, 0x0292003d,
- 0x068b0020, 0x028a0061, 0x079a0050, 0x05908018,
- 0x010170e1, 0x01640817, 0x0582803a, 0x070ff017,
- 0x03d00027, 0x0280002f, 0x02800031, 0x02800034,
- 0x02800037, 0x0380003a, 0x0380003a, 0x0380003a,
- 0x0380003a, 0x03e00000, 0x03800018, 0x04908031,
- 0x030160e1, 0x0380003c, 0x04908034, 0x030150e1,
- 0x0380003c, 0x04908037, 0x010140e1, 0x0380003c,
- 0x060fc013, 0x07a003e2, 0x03800018, 0x014940e4,
- 0x00a18040, 0x03800021, 0x02681e0d, 0x050fb0ff,
- 0x04600875, 0x050f80ff, 0x053fa809, 0x06000001,
- 0x05488003, 0x0481804f, 0x0400800d, 0x0120d000,
- 0x013e4000, 0x05000200, 0x06009075, 0x04002076,
- 0x06a003ce, 0x07c00000, 0x000170e3, 0x050fe017,
- 0x05878056, 0x0547f417, 0x0301f0ff, 0x01800147,
- 0x054bc417, 0x050fb0ff, 0x03640aff, 0x0482805e,
- 0x0179fe17, 0x070fffff, 0x030750ff, 0x01800281,
- 0x050fd017, 0x07a003e2, 0x0380001d, 0x00018098,
- 0x07480018, 0x05818072, 0x05481018, 0x04818070,
- 0x05482018, 0x0481806e, 0x07483018, 0x0581806c,
- 0x002fb004, 0x02800073, 0x012fb003, 0x02800073,
- 0x002fb002, 0x02800073, 0x002fb001, 0x02800073,
- 0x012fb000, 0x00017086, 0x078b0074, 0x03385000,
- 0x03020000, 0x07780017, 0x0043dc07, 0x0681810b,
- 0x056c0478, 0x068100bf, 0x056c0278, 0x06810080,
- 0x05278000, 0x038000a6, 0x05278000, 0x07483017,
- 0x078100a9, 0x05482017, 0x068100b0, 0x0448b076,
- 0x04818094, 0x06601875, 0x050f80ff, 0x073fa022,
- 0x0600003e, 0x06000080, 0x05001081, 0x05002082,
- 0x06003083, 0x05004084, 0x04602075, 0x050f80ff,
- 0x022fa02a, 0x05278000, 0x02075013, 0x060ff0fb,
- 0x02d00097, 0x0380009c, 0x0280009e, 0x038000a0,
- 0x028000a2, 0x028000a4, 0x062d0020, 0x038000a6,
- 0x062d0080, 0x038000a6, 0x052d0200, 0x038000a6,
- 0x052d0800, 0x038000a6, 0x033d0000, 0x06000002,
- 0x03920021, 0x0584801d, 0x02800020, 0x040fe07f,
- 0x038600b8, 0x07a000d8, 0x039200a6, 0x040fe07f,
- 0x05a680d8, 0x038000a6, 0x0760127b, 0x050f80ff,
- 0x032fa009, 0x0744f000, 0x0760127b, 0x050f80ff,
- 0x032fa00a, 0x03800087, 0x052e400c, 0x040080fb,
- 0x046aa108, 0x06009075, 0x04002076, 0x06a003ce,
- 0x038000a6, 0x04278001, 0x05482017, 0x078100cc,
- 0x068b00c2, 0x060ff086, 0x0349f0ff, 0x04818073,
- 0x07483017, 0x078100c9, 0x050fd0ff, 0x040fe07f,
- 0x05a680d8, 0x038000a6, 0x05004084, 0x04a00129,
- 0x039200a6, 0x070ff07d, 0x0450047c, 0x056004ff,
- 0x050f80ff, 0x032fa009, 0x070ff000, 0x00540479,
- 0x030790ff, 0x028000b0, 0x060ff079, 0x0054047a,
- 0x04820104, 0x04810104, 0x070ff07d, 0x0450047c,
- 0x050f80ff, 0x002fa819, 0x068b00e0, 0x02080001,
- 0x00081002, 0x01082003, 0x078b00e4, 0x03385000,
- 0x03010000, 0x03400078, 0x070ff003, 0x04500479,
- 0x030790ff, 0x0340007e, 0x0642007f, 0x04810104,
- 0x070ff07e, 0x050f80ff, 0x032fa009, 0x050fe000,
- 0x03868103, 0x070ff07d, 0x056002ff, 0x050f80ff,
- 0x032fa009, 0x0107d000, 0x01860105, 0x07600a7d,
- 0x050f80ff, 0x032fa009, 0x03681e00, 0x0550041b,
- 0x050f80ff, 0x032fa009, 0x0107e000, 0x070ff07e,
- 0x028000ef, 0x0307c000, 0x07c00000, 0x052e400c,
- 0x040080fb, 0x046aa108, 0x06009075, 0x04002076,
- 0x028003ce, 0x040fd075, 0x050fd017, 0x060ff086,
- 0x077800ff, 0x07000060, 0x037c00ff, 0x07000060,
- 0x0681810d, 0x06601875, 0x050f80ff, 0x073fa022,
- 0x0600003e, 0x052e400c, 0x04600875, 0x050f80ff,
- 0x053fa809, 0x06000001, 0x05488003, 0x04810123,
- 0x0400d0fb, 0x066a810d, 0x013e4000, 0x07000300,
- 0x03800021, 0x040080fb, 0x066a8108, 0x06009075,
- 0x04002076, 0x06a003ce, 0x03800021, 0x0240007f,
- 0x0742007e, 0x050f807e, 0x032fa009, 0x050fe000,
- 0x02868143, 0x070ff07d, 0x055c047b, 0x04810138,
- 0x0760007d, 0x050f80ff, 0x032fa009, 0x050fe000,
- 0x02868138, 0x070ff07b, 0x0107d0ff, 0x07600a7d,
- 0x050f80ff, 0x032fa009, 0x03681e00, 0x0450041c,
- 0x0107e0ff, 0x050f80ff, 0x032fa009, 0x050fe000,
- 0x00860145, 0x0307c000, 0x07c00000, 0x040fd075,
- 0x038003e2, 0x0460081f, 0x050f80ff, 0x032fa039,
- 0x01021000, 0x03020005, 0x01018006, 0x01683e21,
- 0x00d0014f, 0x0180016f, 0x0180019a, 0x018001b7,
- 0x0080022f, 0x00800173, 0x0180016f, 0x0180016f,
- 0x0180016f, 0x0180016f, 0x0180016f, 0x0180016f,
- 0x0180016f, 0x0180016f, 0x0180016f, 0x0180016f,
- 0x0180016f, 0x0180016f, 0x0180016f, 0x0180016f,
- 0x0180016f, 0x0180016f, 0x0180016f, 0x0180016f,
- 0x0180016f, 0x0180016f, 0x0180016f, 0x0180016f,
- 0x0180016f, 0x0180016f, 0x0180016f, 0x0180016f,
- 0x0180016f, 0x050fd0ff, 0x07a003e2, 0x03800018,
- 0x0380001d, 0x01494021, 0x0781824b, 0x0400701f,
- 0x04a00279, 0x007a0101, 0x07060000, 0x07303000,
- 0x07008290, 0x03496021, 0x0681817f, 0x06006013,
- 0x00800186, 0x02400010, 0x0481017f, 0x06006010,
- 0x0660361f, 0x050f80ff, 0x073fa00a, 0x07000003,
- 0x072d0003, 0x029b8186, 0x010b1000, 0x000b2001,
- 0x020b3002, 0x010b4003, 0x020b5004, 0x030b6005,
- 0x010b7006, 0x063aa020, 0x07000012, 0x070ff0f6,
- 0x03687eff, 0x06818191, 0x06601220, 0x050f10ff,
- 0x063f3008, 0x06000008, 0x062d0002, 0x01800172,
- 0x04007013, 0x04a00279, 0x007a0101, 0x07050000,
- 0x07303000, 0x07008890, 0x074d0005, 0x06006013,
- 0x072d0003, 0x029b81a2, 0x010b1000, 0x000b2001,
- 0x020b3002, 0x010b4003, 0x020b5004, 0x030b6005,
- 0x010b7006, 0x04601c20, 0x050f80ff, 0x022fa019,
- 0x04001002, 0x04002013, 0x050f801e, 0x022fa01a,
- 0x073aa00c, 0x07000012, 0x07300003, 0x06000008,
- 0x01800244, 0x04007013, 0x04a00279, 0x007a0101,
- 0x03070000, 0x04602c1f, 0x050f80ff, 0x073fa009,
- 0x06000004, 0x02499008, 0x048101c4, 0x07303000,
- 0x07008890, 0x018001c6, 0x07303000, 0x04008980,
- 0x05007003, 0x074d0005, 0x06006013, 0x072d0003,
- 0x039b81c9, 0x010b1000, 0x000b2001, 0x020b3002,
- 0x010b4003, 0x020b5004, 0x030b6005, 0x010b7006,
- 0x04601620, 0x050f80ff, 0x032fa021, 0x07f00000,
- 0x064b0002, 0x02499008, 0x048101da, 0x0644c002,
- 0x054b0400, 0x050040ff, 0x06698104, 0x068181ef,
- 0x06000013, 0x04001013, 0x04780102, 0x06000010,
- 0x06003013, 0x04004013, 0x06005013, 0x06006013,
- 0x04007013, 0x00644015, 0x058201eb, 0x04448002,
- 0x02205008, 0x050f801e, 0x032fa042, 0x04008015,
- 0x01800227, 0x046c8004, 0x068181fd, 0x01208018,
- 0x06780002, 0x07000003, 0x07818200, 0x06003001,
- 0x06000013, 0x04001013, 0x04004013, 0x06005013,
- 0x050f801e, 0x022fa032, 0x01800227, 0x040fd01f,
- 0x07a003e2, 0x03800018, 0x0379ff03, 0x070000ff,
- 0x04488002, 0x04810207, 0x070ff003, 0x04500408,
- 0x050080ff, 0x0379ff00, 0x070000ff, 0x06489002,
- 0x0481020e, 0x070ff000, 0x04500408, 0x050080ff,
- 0x07005003, 0x05004000, 0x06003001, 0x06000013,
- 0x04001013, 0x050f801e, 0x022fa032, 0x07f00000,
- 0x06601e20, 0x050f80ff, 0x022fa031, 0x07f00000,
- 0x07600c1e, 0x050f80ff, 0x022fa032, 0x02680608,
- 0x05810227, 0x016408ff, 0x057dfeff, 0x07ffffff,
- 0x034000ff, 0x045a0407, 0x010b40ff, 0x06600908,
- 0x0669f908, 0x027a0008, 0x04000120, 0x070aa0ff,
- 0x024a2408, 0x037a00ff, 0x06000080, 0x070000ff,
- 0x01800244, 0x04007013, 0x04a00279, 0x007a0101,
- 0x07030000, 0x07303000, 0x07008190, 0x06006013,
- 0x00800237, 0x072d0003, 0x029b8237, 0x010b1000,
- 0x000b2001, 0x020b3002, 0x010b4003, 0x020b5004,
- 0x030b6005, 0x010b7006, 0x073aa000, 0x07000003,
- 0x062d0002, 0x01800172, 0x070ff0f6, 0x03687eff,
- 0x07818244, 0x050f101e, 0x070f3000, 0x062d0002,
- 0x01800172, 0x05474021, 0x04602020, 0x050f80ff,
- 0x053fa809, 0x07000003, 0x06780007, 0x07ffff00,
- 0x04810254, 0x03455021, 0x06602420, 0x050f80ff,
- 0x063fa019, 0x06000002, 0x06003013, 0x01497021,
- 0x0781826c, 0x04601020, 0x050f80ff, 0x053fa809,
- 0x06000001, 0x0379ff03, 0x070000ff, 0x07420003,
- 0x04600220, 0x050f80ff, 0x012fa809, 0x040fe001,
- 0x01860271, 0x03200006, 0x0760141b, 0x050f80ff,
- 0x073fa009, 0x06000001, 0x04008013, 0x0660181f,
- 0x050f80ff, 0x022fa04a, 0x00800175, 0x012080c0,
- 0x0600901f, 0x05002021, 0x06a003ce, 0x01800172,
- 0x03200000, 0x06006075, 0x0180027b, 0x03200011,
- 0x0600601f, 0x05a002fa, 0x05600406, 0x050f80ff,
- 0x053fa809, 0x06000002, 0x07c00000, 0x04600875,
- 0x050f80ff, 0x032fa039, 0x03076000, 0x0107b005,
- 0x01018006, 0x0448b076, 0x0781828d, 0x06602475,
- 0x050f80ff, 0x053fa811, 0x0700003c, 0x00077013,
- 0x050fe078, 0x038682a9, 0x04a002ad, 0x019202ac,
- 0x060ff0fb, 0x00d00294, 0x01800299, 0x0180029c,
- 0x0180029f, 0x008002a2, 0x018002a5, 0x072d0030,
- 0x039b8299, 0x018002f3, 0x072d00c0, 0x039b829c,
- 0x018002f3, 0x072d0300, 0x039b829f, 0x018002f3,
- 0x072d0c00, 0x029b82a2, 0x018002f3, 0x033d0000,
- 0x07000003, 0x039b82a5, 0x018002f3, 0x040fd075,
- 0x050fd078, 0x07a003e2, 0x0380001d, 0x048b02ad,
- 0x03385000, 0x07030000, 0x05600818, 0x050f80ff,
- 0x032fa009, 0x07f00000, 0x054b0400, 0x0308a0ff,
- 0x0179fe00, 0x070000ff, 0x010880ff, 0x0448b076,
- 0x048102c8, 0x0560167b, 0x050f80ff, 0x002fa819,
- 0x02080002, 0x01081003, 0x064b0001, 0x00082001,
- 0x02083001, 0x02079001, 0x0207a001, 0x00084013,
- 0x0207f013, 0x018002eb, 0x06485076, 0x048102e0,
- 0x02465076, 0x06601875, 0x050f80ff, 0x073fa021,
- 0x0600003e, 0x070ff07d, 0x0450047c, 0x050f80ff,
- 0x002fa819, 0x048b02d3, 0x02080001, 0x00081002,
- 0x01082003, 0x03079003, 0x0208307a, 0x0340007e,
- 0x0642007f, 0x048102e6, 0x070ff07e, 0x06a000ef,
- 0x029282e6, 0x008002f2, 0x048b02e0, 0x06601875,
- 0x050f80ff, 0x073fa041, 0x0600003e, 0x07f00000,
- 0x06602875, 0x050f80ff, 0x073fa009, 0x06000007,
- 0x0008400e, 0x058b02eb, 0x03385000, 0x03010000,
- 0x04278001, 0x040fe07f, 0x008602f2, 0x038000d8,
- 0x07c00000, 0x00683e76, 0x048102f8, 0x0448d076,
- 0x06810325, 0x0380035c, 0x06a003c2, 0x018002ac,
- 0x01978305, 0x07602418, 0x050f80ff, 0x012fa809,
- 0x06780001, 0x070000ff, 0x075a0000, 0x070ff014,
- 0x0569feff, 0x054b08ff, 0x075a0000, 0x05600418,
- 0x050f80ff, 0x012fa809, 0x040fe007, 0x0186830c,
- 0x01204000, 0x03800321, 0x05600e06, 0x050f80ff,
- 0x073fa009, 0x06000002, 0x07f00000, 0x064d0004,
- 0x00700104, 0x03010000, 0x06780004, 0x07ff0000,
- 0x076c00ff, 0x0481831a, 0x00700104, 0x03010000,
- 0x064d0004, 0x05600e06, 0x050f80ff, 0x073fa00a,
- 0x06000002, 0x07f00000, 0x044b0804, 0x0279ff01,
- 0x0700ffff, 0x05002014, 0x07c00000, 0x04007075,
- 0x0448b076, 0x0681033b, 0x03200011, 0x06006075,
- 0x05a0027b, 0x007a0101, 0x07060000, 0x07303000,
- 0x07008290, 0x02496076, 0x05818333, 0x06006013,
- 0x0380034e, 0x02400010, 0x07810333, 0x06006010,
- 0x06603675, 0x050f80ff, 0x073fa00a, 0x07000003,
- 0x0380034e, 0x0600007a, 0x02493076, 0x05818344,
- 0x06602e75, 0x050f80ff, 0x032fa009, 0x060ff07a,
- 0x05500400, 0x070000ff, 0x06473076, 0x06602e75,
- 0x050f80ff, 0x032fa00a, 0x04a00276, 0x007a0101,
- 0x03010000, 0x06303008, 0x05008000, 0x0600600e,
- 0x072d0003, 0x019b834e, 0x050a4000, 0x060a5001,
- 0x060a6002, 0x050a7003, 0x040a8004, 0x070a9005,
- 0x050ae006, 0x053079a0, 0x0600000e, 0x060a0007,
- 0x062d0002, 0x018002ac, 0x00683e76, 0x076c0aff,
- 0x07810384, 0x04007013, 0x03200011, 0x06006075,
- 0x05a0027b, 0x007a0101, 0x03070000, 0x04602c75,
- 0x050f80ff, 0x053fa809, 0x06000001, 0x03499003,
- 0x06810370, 0x07303000, 0x07008890, 0x053079a0,
- 0x0700000c, 0x03800374, 0x07303000, 0x04008980,
- 0x04307920, 0x0700000c, 0x074d0005, 0x06006013,
- 0x072d0003, 0x009b8376, 0x050a4000, 0x060a5001,
- 0x060a6002, 0x050a7003, 0x040a8004, 0x070a9005,
- 0x050ae006, 0x007a0107, 0x06000020, 0x060a0007,
- 0x062d0002, 0x018002ac, 0x06602e75, 0x050f80ff,
- 0x032fa009, 0x060ff07a, 0x05500400, 0x070000ff,
- 0x06473076, 0x06602e75, 0x050f80ff, 0x032fa00a,
- 0x04007075, 0x04a00276, 0x007a0101, 0x03010000,
- 0x06303008, 0x07008800, 0x074d0005, 0x06600a75,
- 0x050f80ff, 0x073fa009, 0x07000003, 0x07f00000,
- 0x054b0406, 0x045a0404, 0x050040ff, 0x0600600e,
- 0x072d0003, 0x009b839e, 0x050a4000, 0x060a5001,
- 0x060a6002, 0x050a7003, 0x040a8004, 0x070a9005,
- 0x050ae006, 0x04307920, 0x0600000e, 0x06307d20,
- 0x0600000e, 0x0648c076, 0x058183af, 0x04307920,
- 0x0600000e, 0x060a0007, 0x062d0002, 0x018002ac,
- 0x072d0003, 0x019b83b2, 0x070ff0f6, 0x03687eff,
- 0x058183b4, 0x050f2074, 0x060a0007, 0x040070fb,
- 0x046a7007, 0x050f40ff, 0x062d0002, 0x018002ac,
- 0x01208060, 0x0600901f, 0x05002021, 0x028003ce,
- 0x040080fb, 0x066ae108, 0x06009075, 0x04002076,
- 0x028003ce, 0x03201100, 0x058483cc, 0x06420001,
- 0x048183c8, 0x028003e5, 0x020e0008, 0x07c00000,
- 0x050fd009, 0x040fd008, 0x03201100, 0x048483d5,
- 0x06420001, 0x058183d1, 0x028003e5, 0x007a0102,
- 0x04000101, 0x05600809, 0x050f80ff, 0x073fa00a,
- 0x06000001, 0x020e0008, 0x068403df, 0x030e0009,
- 0x07c00000, 0x01011009, 0x052e4300, 0x07c00000,
- 0x052e400f, 0x01208090, 0x028003c7, 0x070fc0ff,
- 0x040f8013, 0x032fa009, 0x038003e8, 0xb459e03b,
- 0x02800004, 0x00000000, 0x0000a000, 0x00000475,
- 0x033d0aaa, 0x070aaaaa, 0x013d1aaa, 0x070aaaaa,
- 0x018c02d1, 0x068e0334, 0x068d0340, 0x028f03a2,
- 0x02910013, 0x040f7029, 0x02860013, 0x066c001f,
- 0x078103bd, 0x066c0a1f, 0x068103df, 0x040f702f,
- 0x0386001d, 0x06000010, 0x050fb000, 0x066c0079,
- 0x0581041b, 0x0398001d, 0x03400000, 0x076c0a00,
- 0x04818016, 0x07960021, 0x05998021, 0x06a0009e,
- 0x02800008, 0x050f7012, 0x07a682ac, 0x04908008,
- 0x030150e1, 0x06780015, 0x07fffff0, 0x06810064,
- 0x0079fe15, 0x031fffff, 0x030160ff, 0x064bd415,
- 0x03d0002d, 0x01800155, 0x028000c2, 0x03800035,
- 0x02800040, 0x0380004b, 0x03800056, 0x02800076,
- 0x02800076, 0x040f7025, 0x01868039, 0x02026016,
- 0x0280003d, 0x06600025, 0x050f80ff, 0x073fa00a,
- 0x0600000b, 0x02025016, 0x02400029, 0x03800078,
- 0x050f7021, 0x01868044, 0x00022016, 0x03800048,
- 0x07600021, 0x050f80ff, 0x073fa00a, 0x0600000b,
- 0x00021016, 0x02400029, 0x03800078, 0x040f7023,
- 0x0086804f, 0x00024016, 0x03800053, 0x06600023,
- 0x050f80ff, 0x073fa00a, 0x0600000b, 0x02023016,
- 0x02400029, 0x03800078, 0x04600816, 0x050f80ff,
- 0x012fa839, 0x06780004, 0x07ffff00, 0x037c00ff,
- 0x05000700, 0x06810062, 0x0448e001, 0x04818062,
- 0x07a000a9, 0x03800078, 0x040fd016, 0x03800078,
- 0x0279f015, 0x07ffffff, 0x04818076, 0x060ff015,
- 0x03d00069, 0x03800071, 0x02800073, 0x02800076,
- 0x02800076, 0x02800076, 0x02800076, 0x02800076,
- 0x02800076, 0x03e00000, 0x02800008, 0x04908073,
- 0x010140e1, 0x03800078, 0x060fc010, 0x04a0046d,
- 0x02800008, 0x072e4800, 0x03016011, 0x0186807e,
- 0x060fc010, 0x07c00000, 0x00011010, 0x0647f016,
- 0x072d000c, 0x009b8080, 0x04600816, 0x050f80ff,
- 0x012fa839, 0x0249f001, 0x04818097, 0x06780004,
- 0x07ffff00, 0x037c00ff, 0x07000300, 0x0481809b,
- 0x0448e001, 0x0481809b, 0x0079c101, 0x07ffffff,
- 0x007a0b01, 0x03800000, 0x04600816, 0x050f80ff,
- 0x012fa80a, 0x062d0008, 0x038000a9, 0x062d0008,
- 0x00011016, 0x052e4c00, 0x07c00000, 0x062d0008,
- 0x040fd016, 0x07c00000, 0x030160eb, 0x0249f016,
- 0x0481807f, 0x04600816, 0x050f80ff, 0x012fa839,
- 0x06783f01, 0x03800060, 0x007c0b01, 0x03800000,
- 0x0581809c, 0x06601807, 0x070030ff, 0x050f80ff,
- 0x012fa809, 0x050f8003, 0x073fa00a, 0x0600000b,
- 0x040f7001, 0x038600b7, 0x04600201, 0x050f80ff,
- 0x073fa00a, 0x0600000b, 0x07c00000, 0x050f702e,
- 0x008680bc, 0x0002e016, 0x0202f016, 0x028000c1,
- 0x0760002e, 0x050f80ff, 0x073fa00a, 0x0600000b,
- 0x0002e016, 0x07c00000, 0x0430e004, 0x03080000,
- 0x06601216, 0x050f80ff, 0x073fa011, 0x07000005,
- 0x07f00000, 0x0660000b, 0x050f80ff, 0x022fa019,
- 0x0700c000, 0x0279ff02, 0x0700ffff, 0x00017002,
- 0x0760220a, 0x050f80ff, 0x012fa809, 0x0079fe01,
- 0x0700ffff, 0x055c0417, 0x06818143, 0x0400d010,
- 0x0548e00c, 0x078100db, 0x0245600e, 0x07600a0a,
- 0x050f80ff, 0x032fa039, 0x02015002, 0x064b0015,
- 0x0379ff03, 0x070000ff, 0x01018003, 0x05420418,
- 0x048180e6, 0x0045700e, 0x0179fe06, 0x070000ff,
- 0x0700f0ff, 0x04603216, 0x050f80ff, 0x073fa012,
- 0x06000002, 0x0769ff00, 0x076c9000, 0x048180f1,
- 0x0444b00e, 0x0368060f, 0x03d000f3, 0x028000fd,
- 0x028000f8, 0x038000ff, 0x028000f7, 0x00800143,
- 0x007a010e, 0x07001800, 0x076c3000, 0x03a18247,
- 0x07818128, 0x0220f002, 0x01800106, 0x0120d081,
- 0x007a010e, 0x05001000, 0x076c3000, 0x03a18247,
- 0x07818128, 0x0220f004, 0x0548700c, 0x05810109,
- 0x0644900d, 0x024a1815, 0x004a2c15, 0x04500415,
- 0x070030ff, 0x0700000f, 0x017a0100, 0x05004000,
- 0x0400100e, 0x05304000, 0x07000030, 0x04002010,
- 0x0600500d, 0x0700600a, 0x0400700b, 0x05008017,
- 0x06600616, 0x050f80ff, 0x022fa04a, 0x0448b00e,
- 0x05818056, 0x050f7027, 0x03868121, 0x00028016,
- 0x00800125, 0x07600027, 0x050f80ff, 0x073fa00a,
- 0x0600000b, 0x00027016, 0x02400029, 0x03800078,
- 0x040fd016, 0x050fd00a, 0x07600a0a, 0x050f80ff,
- 0x032fa009, 0x05780100, 0x07ffff00, 0x017a0700,
- 0x06000001, 0x050f80ff, 0x032fa00a, 0x07f00000,
- 0x05600e0a, 0x050f80ff, 0x022fa019, 0x05780100,
- 0x07ffff00, 0x076a0500, 0x00202001, 0x0560200a,
- 0x050f80ff, 0x012fa809, 0x06003010, 0x05600e0a,
- 0x050f80ff, 0x032fa022, 0x0180014d, 0x050fd00a,
- 0x07600a0a, 0x050f80ff, 0x032fa009, 0x0379ff00,
- 0x0380ffff, 0x0145b000, 0x07600a0a, 0x050f80ff,
- 0x032fa00a, 0x07303000, 0x07000030, 0x04600e16,
- 0x050f80ff, 0x053fa80a, 0x06000001, 0x04a0029b,
- 0x03800078, 0x06600616, 0x050f80ff, 0x012fa841,
- 0x0079fe01, 0x070000ff, 0x070090ff, 0x0500d006,
- 0x0600a007, 0x0400b008, 0x07600a0a, 0x050f80ff,
- 0x032fa009, 0x0769ff00, 0x0660000b, 0x050f80ff,
- 0x073fa009, 0x07000006, 0x07f00000, 0x04602c16,
- 0x050f80ff, 0x053fa809, 0x0600000b, 0x07479017,
- 0x056c0e09, 0x04810170, 0x076c0c09, 0x02a1846d,
- 0x0560160a, 0x050f80ff, 0x053fa809, 0x06000007,
- 0x07f00000, 0x074b000f, 0x0368060f, 0x01d00178,
- 0x0080017c, 0x008001da, 0x008001ae, 0x018001f9,
- 0x0748f00f, 0x048101f7, 0x0530e042, 0x02080002,
- 0x0578400f, 0x06000020, 0x017c40ff, 0x06000020,
- 0x07818188, 0x0748500c, 0x05810188, 0x03459017,
- 0x04602c16, 0x050f80ff, 0x053fa80a, 0x0600000b,
- 0x0569800f, 0x06818194, 0x0548d00f, 0x06818191,
- 0x0644a00e, 0x056c0e09, 0x0581019f, 0x008001fb,
- 0x050010ff, 0x046c8001, 0x078181a3, 0x056c0e09,
- 0x0581019f, 0x05601a0a, 0x050f80ff, 0x012fa809,
- 0x04780101, 0x07ffff00, 0x048101fb, 0x06300001,
- 0x04000410, 0x05a00211, 0x03800035, 0x026d0001,
- 0x058101a6, 0x018001f9, 0x0530e042, 0x02080002,
- 0x05a0022e, 0x078181f5, 0x07300003, 0x05000430,
- 0x05a00211, 0x03800056, 0x0630e445, 0x02080002,
- 0x056c0e09, 0x068181fb, 0x0748f00f, 0x058101bb,
- 0x0569800f, 0x078181f9, 0x0548d00f, 0x078181bd,
- 0x007a010e, 0x06000010, 0x018001c3, 0x0246a00e,
- 0x018001c3, 0x0246a00e, 0x0748500f, 0x058101c3,
- 0x0748500c, 0x058101c3, 0x03459017, 0x0349a017,
- 0x078181ca, 0x04602c16, 0x050f80ff, 0x053fa80a,
- 0x0600000b, 0x018001d4, 0x0747a017, 0x05001017,
- 0x05601c0a, 0x050f80ff, 0x073fa009, 0x06000001,
- 0x07f00000, 0x04602c16, 0x050f80ff, 0x012fa812,
- 0x05a0022e, 0x078181f5, 0x07300003, 0x05000430,
- 0x05a00211, 0x03800056, 0x056c0e09, 0x068181fb,
- 0x0430e001, 0x02080002, 0x0644000d, 0x0748f00f,
- 0x058101eb, 0x0569800f, 0x078181f9, 0x0578400f,
- 0x06000020, 0x017c40ff, 0x06000020, 0x078181eb,
- 0x0748500c, 0x058101eb, 0x03459017, 0x04602c16,
- 0x050f80ff, 0x053fa80a, 0x0600000b, 0x05a0022e,
- 0x078181f5, 0x06300004, 0x04000420, 0x05a00211,
- 0x03800035, 0x02200010, 0x018001fc, 0x02200001,
- 0x018001fc, 0x03200006, 0x018001fc, 0x02200004,
- 0x040fd016, 0x050fd00a, 0x050fd000, 0x05600e0a,
- 0x050f80ff, 0x032fa00a, 0x07f00000, 0x04600e16,
- 0x050f80ff, 0x053fa809, 0x06000001, 0x05780103,
- 0x070000ff, 0x017a0103, 0x07000600, 0x04600e16,
- 0x050f80ff, 0x053fa80a, 0x06000001, 0x04a0029b,
- 0x03800078, 0x05600e0a, 0x050f80ff, 0x053fa809,
- 0x06000001, 0x07f00000, 0x074b0003, 0x034a1803,
- 0x014a2c03, 0x05500403, 0x070030ff, 0x0400100e,
- 0x04002010, 0x04600e16, 0x050f80ff, 0x073fa009,
- 0x06000002, 0x0600500d, 0x0700600a, 0x0400700b,
- 0x0460040b, 0x050f80ff, 0x073fa009, 0x06000004,
- 0x0279ff08, 0x0700ffff, 0x06600616, 0x050f80ff,
- 0x022fa04a, 0x07c00000, 0x03681e00, 0x070090ff,
- 0x076c2400, 0x07818244, 0x05601c0a, 0x050f80ff,
- 0x043fa819, 0x06000002, 0x05008005, 0x0500100a,
- 0x06780007, 0x07ffff00, 0x0581023c, 0x0245500e,
- 0x0560100a, 0x050f80ff, 0x053fa809, 0x06000001,
- 0x0379ff03, 0x070000ff, 0x01018003, 0x00800257,
- 0x040fd016, 0x050fd00a, 0x0080046d, 0x0447400e,
- 0x03681e00, 0x070090ff, 0x076c3000, 0x04810251,
- 0x076c9000, 0x04810251, 0x040fd016, 0x050fd00a,
- 0x0080046d, 0x0500100a, 0x0560200a, 0x050f80ff,
- 0x053fa809, 0x07000003, 0x04008010, 0x05a0025f,
- 0x0681825e, 0x07003018, 0x06601816, 0x050f80ff,
- 0x022fa04a, 0x075c00ff, 0x07c00000, 0x070ff009,
- 0x0550041b, 0x050f80ff, 0x073fa009, 0x06000001,
- 0x04a00273, 0x07818271, 0x060ff001, 0x05500400,
- 0x050f80ff, 0x063fa019, 0x06000002, 0x07f00000,
- 0x07420018, 0x05810272, 0x02400002, 0x04a00273,
- 0x05810272, 0x056a02ff, 0x07c00000, 0x070ff01d,
- 0x00540402, 0x00d00276, 0x0080027c, 0x0180027e,
- 0x00800280, 0x01800282, 0x01800284, 0x00800286,
- 0x03200006, 0x01800299, 0x03200009, 0x01800299,
- 0x0320000c, 0x01800299, 0x0320000f, 0x01800299,
- 0x03200012, 0x01800299, 0x04600201, 0x050f80ff,
- 0x012fa809, 0x040f7001, 0x01860295, 0x06600a01,
- 0x050f80ff, 0x073fa009, 0x06000001, 0x02681e02,
- 0x0550041b, 0x050f80ff, 0x073fa009, 0x06000001,
- 0x00800273, 0x040fd016, 0x040fd002, 0x056a02ff,
- 0x0180029a, 0x075c00ff, 0x07c00000, 0x050f7012,
- 0x008602a2, 0x06600013, 0x050f80ff, 0x073fa00a,
- 0x0600000b, 0x07c00000, 0x070ff0e2, 0x077800ff,
- 0x033e0000, 0x077400ff, 0x031a0000, 0x048202c7,
- 0x048102c7, 0x00012016, 0x02013016, 0x07c00000,
- 0x070ff0e2, 0x077800ff, 0x033e0000, 0x077400ff,
- 0x031a0000, 0x058202b4, 0x058102b4, 0x07c00000,
- 0x03016012, 0x06600016, 0x050f80ff, 0x032fa009,
- 0x07f00000, 0x06600016, 0x050f80ff, 0x073fa00a,
- 0x06000008, 0x050f7000, 0x008602c1, 0x01012000,
- 0x018002c3, 0x00012010, 0x02013010, 0x04600816,
- 0x050f80ff, 0x073fa009, 0x06000007, 0x0647f00e,
- 0x007a010e, 0x04000101, 0x04600816, 0x050f80ff,
- 0x073fa00a, 0x06000007, 0x072e0030, 0x020e0016,
- 0x07c00000, 0x0391000a, 0x0784001d, 0x022c0004,
- 0x046c041f, 0x058102e4, 0x046c021f, 0x058102fc,
- 0x046c081f, 0x0681030e, 0x066c061f, 0x07810328,
- 0x0721f000, 0x0202c010, 0x0202a010, 0x02020010,
- 0x052e5800, 0x02b60079, 0x068d0340, 0x0380000c,
- 0x040f702a, 0x018602dd, 0x06000010, 0x04001010,
- 0x0760122b, 0x050f80ff, 0x032fa012, 0x07f00000,
- 0x06420029, 0x0660002a, 0x050f80ff, 0x053fa809,
- 0x06000001, 0x050f7003, 0x018602f9, 0x01028003,
- 0x0660002a, 0x050f80ff, 0x073fa00a, 0x06000008,
- 0x02800329, 0x00028010, 0x00027010, 0x02800329,
- 0x040f702a, 0x008602dc, 0x06420029, 0x0660002a,
- 0x050f80ff, 0x053fa809, 0x06000001, 0x050f7003,
- 0x0286030b, 0x03026003, 0x0660002a, 0x050f80ff,
- 0x073fa00a, 0x06000008, 0x02800329, 0x02026010,
- 0x02025010, 0x02800329, 0x040f702a, 0x008602dc,
- 0x06420029, 0x0660002a, 0x050f80ff, 0x053fa809,
- 0x06000001, 0x050f7003, 0x0386031d, 0x01022003,
- 0x0660002a, 0x050f80ff, 0x073fa00a, 0x06000008,
- 0x0280031f, 0x00022010, 0x00021010, 0x0647f020,
- 0x007a0120, 0x04000101, 0x06a003ae, 0x0400802a,
- 0x04a00452, 0x029482dc, 0x0721f005, 0x018002dd,
- 0x018002e2, 0x0647f020, 0x06486020, 0x0581832e,
- 0x06a003ae, 0x008002dc, 0x007a0120, 0x04000101,
- 0x06a003ae, 0x0400802a, 0x04a00452, 0x008002dc,
- 0x0391000a, 0x070ff0e2, 0x077800ff, 0x033e0000,
- 0x077400ff, 0x031a0000, 0x078282e2, 0x040fd02a,
- 0x052e4003, 0x00208010, 0x04a00452, 0x018002e2,
- 0x0784001d, 0x030150c0, 0x0448e015, 0x0481836e,
- 0x0648f015, 0x05818366, 0x02490015, 0x0481835e,
- 0x00491015, 0x05818356, 0x00492015, 0x078103a0,
- 0x033d0000, 0x07000003, 0x019b83a0, 0x033d0000,
- 0x06000002, 0x073c0000, 0x06000040, 0x052e5200,
- 0x02200004, 0x02800375, 0x072d0c00, 0x009b834a,
- 0x052d0800, 0x073c0000, 0x06000020, 0x062e5080,
- 0x03200003, 0x02800375, 0x072d0300, 0x019b8348,
- 0x052d0200, 0x073c0000, 0x06000010, 0x062e5020,
- 0x02200002, 0x02800375, 0x072d00c0, 0x009b8346,
- 0x062d0080, 0x073c0000, 0x06000008, 0x062e5008,
- 0x02200001, 0x02800375, 0x072d0030, 0x019b8344,
- 0x062d0020, 0x073c0000, 0x06000004, 0x062e5002,
- 0x06000010, 0x0784001d, 0x0392000c, 0x050fb000,
- 0x040f707c, 0x0386039c, 0x046c0279, 0x04818386,
- 0x0448b07a, 0x0781038d, 0x06000010, 0x04001010,
- 0x0760127b, 0x050f80ff, 0x032fa012, 0x0046b07a,
- 0x02b60079, 0x03800390, 0x066c0079, 0x0781038b,
- 0x040fd07c, 0x04a0046d, 0x02800008, 0x040fd07c,
- 0x03800390, 0x0045207a, 0x0279ff7a, 0x07ffd7ff,
- 0x0007d010, 0x0647f07a, 0x0648607a, 0x05818396,
- 0x07a003b4, 0x0380039c, 0x007a017a, 0x04000101,
- 0x07a003b4, 0x0400807c, 0x0245f008, 0x04a00452,
- 0x07279000, 0x0007e010, 0x0207c010, 0x0207a010,
- 0x018c02d1, 0x0380000c, 0x0392000c, 0x070ff0e2,
- 0x077800ff, 0x033e0000, 0x077400ff, 0x031a0000,
- 0x058283a0, 0x070fc0ff, 0x052e400c, 0x00208020,
- 0x04a00452, 0x038003a0, 0x06000020, 0x05001014,
- 0x0460082a, 0x050f80ff, 0x032fa012, 0x07c00000,
- 0x0600007a, 0x040010a2, 0x044b0801, 0x070ff014,
- 0x065a0001, 0x0460087c, 0x050f80ff, 0x032fa012,
- 0x07c00000, 0x050f7022, 0x038603cc, 0x070ff0e2,
- 0x077800ff, 0x033e0000, 0x077400ff, 0x031a0000,
- 0x04828013, 0x0302a022, 0x04a0040d, 0x04488020,
- 0x078103f0, 0x040fd02a, 0x0202a010, 0x02020010,
- 0x040f7026, 0x028603da, 0x0202a026, 0x04a0040d,
- 0x04488020, 0x048183d6, 0x0621f001, 0x00683e20,
- 0x06818402, 0x028003f1, 0x040fd02a, 0x0202a010,
- 0x0002b010, 0x02020010, 0x050f7028, 0x0186040a,
- 0x0621f002, 0x0302a028, 0x00800401, 0x070ff0e2,
- 0x077800ff, 0x033e0000, 0x077400ff, 0x031a0000,
- 0x04828013, 0x050f7022, 0x0186040a, 0x0302a022,
- 0x04a0040d, 0x04488020, 0x078103f0, 0x040fd02a,
- 0x0202a010, 0x0002b010, 0x02020010, 0x0180040a,
- 0x0621f004, 0x070ff0e2, 0x077800ff, 0x033e0000,
- 0x077400ff, 0x031a0000, 0x058283fc, 0x01208060,
- 0x0600902a, 0x04002020, 0x05a00459, 0x0180040a,
- 0x0202a010, 0x02020010, 0x0002b010, 0x0721f000,
- 0x0180040a, 0x04a0040d, 0x0400102a, 0x0245f001,
- 0x04a00413, 0x050f801e, 0x0320000a, 0x022017d0,
- 0x032fa012, 0x072e5c00, 0x018c02d1, 0x068d0340,
- 0x02800013, 0x0460082a, 0x050f80ff, 0x022fa031,
- 0x03020000, 0x0102b005, 0x07c00000, 0x01200100,
- 0x059a0417, 0x060f0001, 0x07c00000, 0x07420000,
- 0x07818414, 0x060fc010, 0x0080046d, 0x0392001d,
- 0x0207c02f, 0x0460087c, 0x050f80ff, 0x032fa039,
- 0x0307a000, 0x0107b005, 0x0307f006, 0x0660007c,
- 0x050020ff, 0x050f80ff, 0x032fa011, 0x0302f000,
- 0x03868433, 0x0202f001, 0x02868431, 0x0002e010,
- 0x0660187f, 0x050f80ff, 0x073fa00a, 0x06000008,
- 0x01800439, 0x0002e001, 0x01800439, 0x040f7001,
- 0x0086042c, 0x0760002e, 0x050f80ff, 0x012fa80a,
- 0x0002e001, 0x06000010, 0x04001010, 0x040f8002,
- 0x032fa012, 0x06279001, 0x0400107c, 0x060ff0fb,
- 0x054bc8ff, 0x065a0001, 0x04a00413, 0x0320000a,
- 0x022011f4, 0x00202004, 0x06003010, 0x0249507a,
- 0x0481044a, 0x0020200e, 0x050f8078, 0x032fa022,
- 0x030e5077, 0x018c02d1, 0x068d0340, 0x040f702f,
- 0x00868013, 0x0380001d, 0x03201100, 0x06848457,
- 0x06420001, 0x07818453, 0x00800470, 0x020e0008,
- 0x07c00000, 0x050fd009, 0x040fd008, 0x03201100,
- 0x07848460, 0x06420001, 0x0781845c, 0x00800470,
- 0x007a0102, 0x04000101, 0x05600809, 0x050f80ff,
- 0x073fa00a, 0x06000001, 0x020e0008, 0x0684846b,
- 0x06420001, 0x06818467, 0x00800470, 0x030e0009,
- 0x07c00000, 0x052e400f, 0x00208040, 0x00800452,
- 0x070fc0ff, 0x040f8010, 0x032fa009, 0x00800473,
- 0xf6229e3f, 0x00000000, 0x00000000, 0x0000400e,
- 0x00000808, 0x00000803, 0x00011f0f, 0x02080b02,
- 0xe6e5610b, 0x7f04e630, 0x7f028001, 0x30e2e500,
- 0x017e04e4, 0x007e0280, 0x08605fee, 0xe4f7f953,
- 0x0b80fef5, 0x16120a7f, 0xf7f953b3, 0x7530fe75,
- 0xf5e408fc, 0x08f943fd, 0x06000222, 0x000f1f01,
- 0x75002003, 0xf5e40151, 0xf553f552, 0x7f7ef552,
- 0x3d040204, 0x520536c2, 0x94d352e5, 0x7505400c,
- 0x36d20152, 0x740c0790, 0x74a3f007, 0xf5e4f0ff,
- 0x90f0a30c, 0xa3f01407, 0x200b75f0, 0xf5e409f5,
- 0xd308e508, 0x03403094, 0x12090402, 0x0b150600,
- 0x047008e5, 0x0280017f, 0x09e5007f, 0x017e0470,
- 0x007e0280, 0x05605fee, 0xd2f31712, 0xf7e15335,
- 0x094508e5, 0x250be5ff, 0x24e025e0, 0xe482f583,
- 0x83f50734, 0xe285f0ef, 0xd352e520, 0x0d400194,
- 0xe02a1b12, 0x4064a054, 0x04020370, 0xf8f95300,
- 0xe4709490, 0x10f5e0f0, 0x1e1209af, 0xef08af74,
- 0x82f50844, 0xe0808375, 0x44ef29f5, 0x7582f507,
- 0xf5e09e83, 0xd3405422, 0x1e400094, 0xf05429e5,
- 0x1b122170, 0x8044e02a, 0x5422e5f0, 0x70086530,
- 0x2a1b1209, 0xf0bf54e0, 0x1b120980, 0xf040742a,
- 0x12000402, 0x8375491b, 0xf0ff74ae, 0x007e08af,
- 0xf50744ef, 0xe5fde082, 0x25e0250b, 0xf58124e0,
- 0x0734e482, 0xf0ed83f5, 0xe00e0790, 0x44eff004,
- 0x7582f507, 0xf5e09883, 0x5a1b1228, 0x1b120c40,
- 0x0144e02a, 0x02691b12, 0x08affb03, 0x8074007e,
- 0x8dcdefcd, 0xe083f582, 0x120ae030, 0x44e02a1b,
- 0x0402f020, 0x2a1b1200, 0xf0df54e0, 0x12ae44ee,
- 0xe430711b, 0x00040203, 0x1b129e74, 0x03e0203c,
- 0x8f000402, 0xe0838e82, 0x0203e020, 0x1b120004,
- 0x1044e02a, 0x4408e5f0, 0x7582f506, 0x44e09e83,
- 0x08aff004, 0x44ef007e, 0xe082f506, 0x1234e220,
- 0x44e02a1b, 0xe4e5f008, 0x7d04e630, 0x7d028001,
- 0xc37ee500, 0x04500494, 0x0280017c, 0x4dec007c,
- 0x35c20560, 0xee000402, 0x1b12d244, 0xf0404471,
- 0x12000402, 0x54e02a1b, 0x1b12f0f7, 0xd2837549,
- 0xf0bf54e0, 0xe0140790, 0x7ee5f004, 0x7e750370,
- 0x7e08af01, 0x5a1b1200, 0x1b121240, 0x0144e02a,
- 0xe0291b12, 0x1b120254, 0x00040269, 0xe02a1b12,
- 0x1b120244, 0xfe54e029, 0xee35c2f0, 0x828f8044,
- 0xf5e083f5, 0x44e35417, 0x9074f010, 0x4408e5fc,
- 0x82f5fd07, 0x54e0838c, 0x0207903f, 0xc054e0f0,
- 0x838c828d, 0x129274f0, 0x07903c1b, 0x501b1203,
- 0x1b128274, 0x0407903c, 0x74501b12, 0x3c1b12b4,
- 0x12050790, 0x9474501b, 0x4408e5fe, 0x411b1206,
- 0xe03010f5, 0x8037d204, 0xe537c202, 0x8f7f5410,
- 0xf0838e82, 0x12304430, 0x80543a1b, 0x400094d3,
- 0x8039d204, 0x8f39c202, 0xe0838e82, 0x12f08044,
- 0x40543a1b, 0x400094d3, 0x803ad204, 0x8f3ac202,
- 0xe0838e82, 0x74f04044, 0x08e5fe92, 0x1b120644,
- 0x04e73041, 0x028038d2, 0x828f38c2, 0x54e0838e,
- 0x1e12f07f, 0x0af5e407, 0x80020320, 0x03433003,
- 0x20171912, 0x03800202, 0x12034230, 0x3030970c,
- 0x17191206, 0x12970c12, 0x1b124f0d, 0xfb54e02a,
- 0xc30ae5f0, 0x46400194, 0x1208e143, 0x44e02a1b,
- 0xe4e5f004, 0x122ae720, 0x8375491b, 0x0854e0d2,
- 0x400094d3, 0x80017f04, 0xe5007f02, 0x0194c30a,
- 0x017e0440, 0x007e0280, 0x05605eef, 0x80981d12,
- 0x491b1217, 0xe0d28375, 0x02f00844, 0x1b120004,
- 0xd2837549, 0xf0f754e0, 0x7f071e12, 0xb3161208,
- 0x12fe8e74, 0x838e491b, 0x5410f5e0, 0x10e5f0fe,
- 0xe5ff0144, 0x44edfd08, 0xef82f507, 0x5410e5f0,
- 0x44edfffe, 0xef82f507, 0x75481b12, 0x44e08683,
- 0x481b1210, 0xf01044e0, 0xe02a1b12, 0x0144fd54,
- 0x2a1b12ff, 0x691b12ef, 0xe50c3230, 0xf5084408,
- 0x82837582, 0xaff00574, 0x5918120b, 0x08251074,
- 0x000208f5, 0xe5090585, 0x0794d309, 0x00020350,
- 0xd37ee582, 0x04400094, 0x0280017f, 0x7ee5007f,
- 0x50fa94c3, 0x80017e04, 0xee007e02, 0x0502605f,
- 0x0b35307e, 0x7f01e143, 0xb3161209, 0x53580002,
- 0x0002fee1, 0x8f6a8e58, 0x8d6c8c6b, 0x016e756d,
- 0x75016f75, 0xf5e40170, 0xf574f573, 0x2f079075,
- 0xf53cf5f0, 0xf546f53e, 0xf53df547, 0xe56ff53f,
- 0xe50e706f, 0x126a456b, 0x83753707, 0x803a7480,
- 0x37071208, 0x74808375, 0x3607121a, 0xe0868375,
- 0xe4f00844, 0x74c36ef5, 0xff6e953f, 0x75680812,
- 0xf0ef8283, 0x12741912, 0x33e5d308, 0x070912f0,
- 0x40be0812, 0x706fe5e1, 0x3707120b, 0x74808375,
- 0x0980f036, 0x75370712, 0x16748083, 0x016e75f0,
- 0x75370712, 0x6ee5b483, 0x741912f0, 0x6e253f74,
- 0x34e482f5, 0xe583f500, 0xbf74f033, 0x82f56e25,
- 0x120034e4, 0xd840be08, 0xf570f5e4, 0xf547f546,
- 0x0709126e, 0xfee083f5, 0xe0d30812, 0x0024007c,
- 0xfe3eecff, 0xefd33bad, 0x509cee9d, 0x80017b04,
- 0xe5007b02, 0x7a047070, 0x7a028001, 0x605aeb00,
- 0x466e8506, 0xd3017075, 0x9cee9def, 0x017f0450,
- 0x007f0280, 0x01b470e5, 0x80017e04, 0xef007e02,
- 0x8503605e, 0x6e05476e, 0x7f646ee5, 0x46e5a370,
- 0x47e50560, 0x85037eb4, 0x6fe54746, 0x46850870,
- 0x77478576, 0x74c30e80, 0xf546957f, 0x7f74c378,
- 0x79f54795, 0x37706fe5, 0x476546e5, 0x73750c70,
- 0x01747501, 0x3df53cf5, 0xf5e43580, 0x47e5c34e,
- 0x3cf54695, 0x71f513c3, 0x72f54625, 0x403f94c3,
- 0x3df5e405, 0x74c34080, 0xf572953f, 0xe537803d,
- 0x70476546, 0x0173750f, 0xf5017575, 0x753ff53e,
- 0x2280014e, 0xc34ef5e4, 0x469547e5, 0x13c33ef5,
- 0x462571f5, 0x94d372f5, 0xe405503f, 0x06803ff5,
- 0xc12472e5, 0x6f053ff5, 0x94c36fe5, 0x02035002,
- 0x6de57304, 0x02706c45, 0x74e50480, 0x07907545,
- 0x017ff02f, 0x04603ee5, 0x14703ce5, 0xf53cf5e4,
- 0xf53ef53d, 0xdf08123f, 0x02f00470, 0x7a80b106,
- 0x95c33ce5, 0xe507403e, 0xff3e953c, 0xe5c30680,
- 0xff3c953e, 0x95d376e5, 0x85054079, 0x03807a76,
- 0xe57a7985, 0x7895c377, 0x77850550, 0x8503807b,
- 0x7be57b78, 0x407a95d3, 0x957be530, 0xf53cf57a,
- 0x7be5c33e, 0x07907a95, 0x3ce5f019, 0x71f513c3,
- 0x72f57a25, 0x403f94c3, 0x3df5e405, 0x74c31f80,
- 0xf572953f, 0x803ff53d, 0x3cf5e414, 0x07903ef5,
- 0x0812f019, 0xf00370df, 0x01740380, 0x680812f0,
- 0xe0d08375, 0xadfe0f54, 0x7e02703c, 0x020fbe07,
- 0xfbee807e, 0x749bd3ef, 0x4098f880, 0x3cf5e41f,
- 0x08123ef5, 0xf00370df, 0x01741280, 0xfb08e5f0,
- 0xf50744eb, 0xd2837582, 0xf01044e0, 0xebfb08e5,
- 0x82f50944, 0xed9e8375, 0x0744ebf0, 0x837582f5,
- 0x12f0edca, 0x83756808, 0x22f0efcc, 0x074408e5,
- 0x837582f5, 0xf054e0bc, 0x4408e5f0, 0x7582f507,
- 0x54e0be83, 0x08e5f0f0, 0x82f50744, 0xe0c08375,
- 0xe5f0f054, 0xf5074408, 0x90f02282, 0xfee02807,
- 0x82f5e0a3, 0x8522838e, 0x41854242, 0x40408541,
- 0xf52fc074, 0x3e027482, 0x42e583f5, 0x2fe074f0,
- 0x027482f5, 0x2283f53e, 0xfd2942e5, 0xe5fc33e4,
- 0xec9dc33c, 0x74f88064, 0xf5229880, 0x0790e083,
- 0xfd1f5422, 0xe0a3fae0, 0x838a82f5, 0x9022f0ed,
- 0xfce02207, 0x82f5e0a3, 0x9022838c, 0xedff2407,
- 0xf0cf0744, 0x22f0efa3, 0x85383885, 0x3a853939,
- 0x2fc0743a, 0x027482f5, 0x2283f53e, 0xff260790,
- 0xcf0744ed, 0xf0efa3f0, 0xa074f022, 0x7482f52f,
- 0x83f53e02, 0x25c07422, 0xe482f511, 0x83f50134,
- 0x25007422, 0xe482f511, 0x83f50234, 0x25607422,
- 0xe482f511, 0x83f50334, 0x25807422, 0xe482f511,
- 0x83f50334, 0x25e07422, 0xe482f511, 0x83f50334,
- 0x25407422, 0xe482f511, 0x83f50634, 0x2f807422,
- 0x027482f5, 0x2283f53e, 0x82e583f5, 0x82f50744,
- 0x22f040e5, 0x11254074, 0x34e482f5, 0x2283f502,
- 0x1125c074, 0x34e482f5, 0x2283f503, 0x11250074,
- 0x34e482f5, 0x2283f506, 0x11252074, 0x34e482f5,
- 0x2283f506, 0xedfd08e5, 0x82f50744, 0xf041e522,
- 0x016465e5, 0x7e226445, 0x007afb00, 0x22007cfd,
- 0x11252074, 0x34e482f5, 0xa0742202, 0x82f51125,
- 0x220334e4, 0x007e08af, 0xf50744ef, 0x3e852282,
- 0x413f8542, 0x8522408f, 0x3d85423c, 0x22408f41,
- 0x903f4575, 0xf0e42007, 0x83f522a3, 0x05f032e5,
- 0xc36ee56e, 0xf0224094, 0x064408e5, 0x742282f5,
- 0xf56e2500, 0x0034e482, 0xe52283f5, 0x906c456d,
- 0xe4222f07, 0xd33ce5f9, 0x74223e95, 0x82f52e80,
- 0xf50234e4, 0x7422e083, 0x82f52ea0, 0xf50234e4,
- 0x7422e083, 0xf56e2580, 0x0034e482, 0xfd422522,
- 0x22fc33e4, 0x85424285, 0x40854141, 0x4ced2240,
- 0x09020360, 0x704eeff2, 0x26079037, 0xe0960712,
- 0xd90712fd, 0x0790f0ed, 0x96071228, 0x0712fde0,
- 0x12f0ede5, 0x54e09307, 0x0812fd1f, 0xed83f584,
- 0x240790f0, 0xe0960712, 0x12fd1f54, 0xf0ed3808,
- 0x4e0464ef, 0x07903770, 0x96071226, 0x0712fde0,
- 0x90f0edf1, 0x07122807, 0x12fde096, 0xf0edfd07,
- 0xe0930712, 0x12fd1f54, 0x83f58e08, 0x0790f0ed,
- 0x96071224, 0xfd1f54e0, 0xed440812, 0x0164eff0,
- 0x7d04704e, 0x7d028001, 0x0264ef00, 0x7f04704e,
- 0x7f028001, 0x604def00, 0x26079078, 0xe0420712,
- 0x090812ff, 0x3e0712ef, 0x0812ffe0, 0x90f0ef15,
- 0x07122207, 0x1f54e042, 0x500812ff, 0x0790f0ef,
- 0x42071224, 0xff1f54e0, 0xef5c0812, 0x071222f0,
- 0x12f0e4d9, 0xf0e4e507, 0xf5840812, 0x12f0e483,
- 0x14743808, 0xf10712f0, 0x0712f0e4, 0x12f0e4fd,
- 0x83f58e08, 0x0812f0e4, 0xf0147444, 0xe4090812,
- 0x150812f0, 0x0812f0e4, 0x12f0e450, 0x14745c08,
- 0x648c22f0, 0x668a658d, 0xf5e4678b, 0x704eef69,
- 0x161d0203, 0xe568f5e4, 0x70664567, 0x37071232,
- 0xe4908375, 0x75360712, 0x12e4c283, 0x83753607,
- 0x0812e4c4, 0x12297073, 0x83753707, 0x0712e492,
- 0xc6837536, 0x360712e4, 0xe4c88375, 0x901180f0,
- 0x07122607, 0x0812e442, 0x12057073, 0xf0e43f07,
- 0x12161d12, 0x67e5801e, 0x33706645, 0x75370712,
- 0x41e59083, 0x75360712, 0x41e5c283, 0x75360712,
- 0x0812c483, 0x12297071, 0x83753707, 0x1240e592,
- 0x83753607, 0x1240e5c6, 0x83753607, 0x900e80c8,
- 0x07122607, 0x71081242, 0x07120670, 0xf040e53f,
- 0x007e69af, 0x66ac67ad, 0x12490412, 0x83753707,
- 0x94d3e0ca, 0x050c5000, 0xc368e568, 0x03500594,
- 0x224b0a02, 0x75f7f953, 0xf5e410fc, 0x30fe75fd,
- 0xf943fff5, 0x20e6e508, 0xff780be7, 0xfdd8f6e4,
- 0x80fee653, 0xe4087809, 0x53fdd8f6, 0x8175fee6,
- 0xa8f5e480, 0xa9c2a8d2, 0xe2e5afd2, 0x2005e520,
- 0x038002e6, 0xe502e143, 0x0ee020e2, 0x7f000090,
- 0xe4087e00, 0xfcdfa3f0, 0x0b02fade, 0x01fa43b5,
- 0xf0c0e0c0, 0x82c083c0, 0x1112d0c0, 0xd0d0d018,
- 0xd083d082, 0x53e0d0f0, 0x0232fefa, 0x93e4d51a,
- 0x93e4f8a3, 0xdf08f6a3, 0xe42980f9, 0x54f8a393,
- 0xc80c2407, 0x54c433c3, 0xc820440f, 0xf4044083,
- 0x46018056, 0x80e4dff6, 0x0402010b, 0x40201008,
- 0xff0f9080, 0x93017ee4, 0xffa3c160, 0xe5303f54,
- 0xfe1f5409, 0x60a393e4, 0x54cf0e01, 0x60e025c0,
- 0x80b840ad, 0x8d608cfe, 0xe7081261, 0x0d402074,
- 0x7482f52f, 0x83f53e03, 0x80f03ee5, 0x82f52f0b,
- 0xf53e0374, 0xf03ce583, 0x95d33ce5, 0xe53c403e,
- 0x70604561, 0x0912e910, 0x123ee511, 0x3b407507,
- 0x80a20812, 0xc33ee518, 0x1d403895, 0xe5383e85,
- 0x8505603e, 0x0380393f, 0x8f393985, 0x2108123a,
- 0x07123ee5, 0xf03fe5cd, 0xe5438022, 0x70604561,
- 0x6c071219, 0x08120540, 0x122780ab, 0x08121809,
- 0x1242e521, 0x41e5cd07, 0x3ce522f0, 0x403895c3,
- 0x383c851d, 0x05603ce5, 0x80393d85, 0x39398503,
- 0x08123a8f, 0x123ce521, 0x3de5cd07, 0x388522f0,
- 0x39398538, 0x123a3a85, 0x38e52108, 0xe5cd0712,
- 0x7f22f039, 0xb3161206, 0x12e41c12, 0x0e12b70e,
- 0x0a44e0e6, 0xfe8e74f0, 0x12b70e12, 0xf0efbe0e,
- 0xe53028e5, 0x0180d303, 0x750540c3, 0x03802014,
- 0x12081475, 0x8375b70e, 0xf014e58a, 0x7505ffb4,
- 0x06808012, 0x13c314e5, 0xf5e412f5, 0x127ff516,
- 0x1312b818, 0xc30ae5a3, 0x09500194, 0x16e51605,
- 0x401494c3, 0x20e4e5ea, 0x0e1228e7, 0xd28375b7,
- 0xd30854e0, 0x04400094, 0x0280017f, 0x0ae5007f,
- 0x400194c3, 0x80017e04, 0xef007e02, 0x1203605e,
- 0x7fe5981d, 0x401194c3, 0xb70e1214, 0xe0d28375,
- 0xe5f08044, 0x0fe720e4, 0x80981d12, 0xb70e120a,
- 0xe0d28375, 0x12f07f54, 0x7422e41c, 0x82088580,
- 0x17e583f5, 0xed0e12f0, 0x0790f0e4, 0x0e12e002,
- 0x908375ca, 0x9274f0ef, 0x4408e5fe, 0x82f5ff07,
- 0x54e0838e, 0x0790fdc0, 0x3f54e003, 0x8e828f4d,
- 0x0790f083, 0x0e12e004, 0x828375ca, 0x0790f0ef,
- 0xedffe005, 0x82f50744, 0xefb48375, 0x75b60e12,
- 0x54e08083, 0x3730f0bf, 0x440f120a, 0xe0948375,
- 0x30f08044, 0x0f120a38, 0x92837544, 0xf08044e0,
- 0xe43028e5, 0x0a39201a, 0x75b70e12, 0x54e08883,
- 0x3a20f07f, 0xb70e120a, 0xe0888375, 0x74f0bf54,
- 0x0e12fe8c, 0xe0838eb7, 0x0e120f54, 0x868375b6,
- 0xf0bf54e0, 0x064408e5, 0x75b00e12, 0xf0e48a83,
- 0x704eef22, 0xd9071226, 0x0790fde0, 0x88071226,
- 0xe0e50712, 0x280790fd, 0x12880712, 0x07128408,
- 0x3808127f, 0x240790e0, 0xef850712, 0x704e0464,
- 0xf1071229, 0x0790fde0, 0x88071226, 0xe0fd0712,
- 0x280790fd, 0x12880712, 0x07128e08, 0x4408127f,
- 0xfd1f54e0, 0x12240790, 0x64ef8807, 0x04704e01,
- 0x0280017d, 0x64ef007d, 0x04704e02, 0x0280017f,
- 0x4def007f, 0x08123560, 0x90ffe009, 0x07122607,
- 0x12f0ef96, 0xffe01508, 0x12280790, 0xf0ef9607,
- 0xe0500812, 0x12ff1f54, 0xf0ef9307, 0xe05c0812,
- 0x90ff1f54, 0x07122407, 0x22f0ef96, 0x837582f5,
- 0xe5f0e482, 0xf5074408, 0x838e2282, 0x5410f5e0,
- 0x10e5f0fe, 0xe5ff0144, 0x44edfd08, 0x2282f507,
- 0x54c415e5, 0x08e5ff07, 0x0844edfd, 0x837582f5,
- 0x83752282, 0x4044e080, 0x4408e5f0, 0x7582f508,
- 0xe5228a83, 0x25e02516, 0xf52f24e0, 0x1a34e482,
- 0x93e483f5, 0x43220df5, 0xe14310e1, 0xfde15380,
- 0x2210e185, 0xe02516e5, 0x3224e025, 0x34e482f5,
- 0xe483f51a, 0x55852293, 0x83548582, 0x22f015e5,
- 0x2054e2e5, 0x220094d3, 0x4054e2e5, 0x220094d3,
- 0x064408e5, 0xfd2282f5, 0xebfb08e5, 0x82f50744,
- 0x53f5e422, 0x40340f12, 0x80017f04, 0x12007f02,
- 0x04403c0f, 0x0280017e, 0x4fee007e, 0x0f020370,
- 0x10e185f7, 0x5302e143, 0xe1850fe1, 0x51f5e410,
- 0x3f54e3e5, 0x0f1252f5, 0xad1d403c, 0x1251af52,
- 0x60efb01c, 0x10e18508, 0x8040e143, 0xbfe1530b,
- 0x120b0f12, 0xfb800600, 0x3f54e3e5, 0xe4e551f5,
- 0x52f53f54, 0x40340f12, 0xaf52ad1d, 0xb01c1251,
- 0x850860ef, 0xe14310e1, 0x530b8020, 0x0f12dfe1,
- 0x0600120b, 0x0f12fb80, 0x7f044034, 0x7f028001,
- 0x3c0f1200, 0x017e0440, 0x007e0280, 0x03604fee,
- 0x220e0f12, 0x01001f01, 0x00002003, 0x02001102,
- 0x10024010, 0x00000090, 0x00000000, 0x1f011f01,
- 0x1257f5e4, 0x15123f16, 0x1012e4c6, 0xb7141256,
- 0x12260790, 0x12e44207, 0xf0e43e07, 0x12561012,
- 0x0790b714, 0x42071226, 0x071241e5, 0xf040e53e,
- 0x007e57af, 0x007c56ad, 0xaf490412, 0x02007e56,
- 0x90ffee11, 0xe0a32007, 0x56f5e4fd, 0xfcfe40f5,
- 0x12fa56ab, 0x0f7f5111, 0xf5e4187d, 0xfe40f556,
- 0xfa56abfc, 0xaf411512, 0x12007e56, 0xffe47f1a,
- 0x1f7d56f5, 0xfcfe40f5, 0x22fa56ab, 0x55f5e422,
- 0x74fd08e5, 0xed56f5a0, 0x57f50744, 0xe53028e5,
- 0x0180d303, 0x7f0540c3, 0x0480ef28, 0xc3ef147f,
- 0xe454f513, 0xcb0e12f9, 0xe08e8375, 0xefce10f5,
- 0x94d3eece, 0xe5264000, 0x12fe5410, 0x83754b0f,
- 0xe5f0ed8e, 0xfd014410, 0xf50744eb, 0x85f0ed82,
- 0x56858257, 0xe330e083, 0x801e0901, 0xe934c2d4,
- 0x405495c3, 0x2234d202, 0x00000f22, 0x90113030,
- 0x93e40010, 0x109010f5, 0xf593e410, 0x90101210,
- 0x22501112, 0xe730e2e5, 0x0310120e, 0x303030c2,
- 0xfc101203, 0xe5213320, 0x2094c3fe, 0xf9530950,
- 0x30fe75f7, 0xe508f943, 0x03e730f2, 0xe57ff953,
- 0xd37054f1, 0xdf500094, 0x00000022, 0x8f588e22,
- 0x8d5a8c59, 0x8b5c8a5b, 0x015e755d, 0xf55ff5e4,
- 0x1262f560, 0x83753707, 0xc4ffe0d0, 0x61f50f54,
- 0x85661e12, 0xe5d35e59, 0xe55b955e, 0x7807125a,
- 0x07124b50, 0xbc837510, 0x125e45e0, 0x83753607,
- 0x5e45e0be, 0x75360712, 0x45e0c083, 0x5faff05e,
- 0x081260e5, 0x360a127b, 0x007e62af, 0x5cac5dad,
- 0xe5490412, 0x7e5eaf61, 0x0503b400, 0x80e21d12,
- 0xac5dad07, 0x1713125c, 0x11025e05, 0x1007127a,
- 0xe0bc8375, 0x07124045, 0xbe837536, 0x124045e0,
- 0x83753607, 0x4045e0c0, 0x588e22f0, 0x5a75598f,
- 0x75017901, 0xfbe4015b, 0x75370712, 0x54e0ae83,
- 0x0812ff1a, 0x13c4e068, 0xeffe0754, 0x65ee0c70,
- 0x90077035, 0xb4e02f07, 0x35af0d01, 0x0e12007e,
- 0xcfebcf05, 0xe5211e02, 0x45026459, 0x7f047058,
- 0x7f028001, 0x4559e500, 0x7e047058, 0x7e028001,
- 0x604fee00, 0x49418523, 0xe54b4085, 0x70584559,
- 0xfe5aaf2c, 0xfccde9cd, 0x58aa59ab, 0xaf360a12,
- 0x12007e5b, 0x1580211e, 0x007e5baf, 0x90211e12,
- 0x07122607, 0x1249e542, 0x4be53e07, 0xaffde4f0,
- 0x12fcfe35, 0x8c222209, 0x12658d64, 0x3c40e708,
- 0x644565e5, 0x09121070, 0x3ee5c311, 0x40760712,
- 0xa208123b, 0x3ee51880, 0x403895c3, 0x383e851d,
- 0x05603ee5, 0x80393f85, 0x39398503, 0x07123a8f,
- 0x123ee5b5, 0x3fe56007, 0x3b8022f0, 0x644565e5,
- 0x07121170, 0x1205406c, 0x1f80ab08, 0xe54b0712,
- 0xe522f041, 0x3895c33c, 0x3c851d40, 0x603ce538,
- 0x393d8505, 0x39850380, 0x123a8f39, 0x3ce5b507,
- 0xe5600712, 0x1222f03d, 0x38e5ac07, 0xe5600712,
- 0x8c22f039, 0x12648d63, 0x3c40e708, 0x634564e5,
- 0x09121070, 0x3ee5c311, 0x40760712, 0xa208123b,
- 0x3ee51880, 0x403895c3, 0x383e851d, 0x05603ee5,
- 0x80393f85, 0x39398503, 0x07123a8f, 0x123ee5b5,
- 0x3fe56007, 0x3b8022f0, 0x634564e5, 0x07121170,
- 0x1205406c, 0x1f80ab08, 0xe54b0712, 0xe522f041,
- 0x3895c33c, 0x3c851d40, 0x603ce538, 0x393d8505,
- 0x39850380, 0x123a8f39, 0x3ce5b507, 0xe5600712,
- 0x1222f03d, 0x38e5ac07, 0xe5600712, 0xe522f039,
- 0x08e5fe0d, 0x0544548e, 0x157555f5, 0x1282f50f,
- 0x17122d0f, 0x05312025, 0x80031575, 0x0b157503,
- 0x94c30ae5, 0x12385001, 0x31202014, 0x05150506,
- 0x15048015, 0xe5151515, 0x0194c30a, 0x14122150,
- 0x04312020, 0x02801505, 0x0ae51515, 0x500194c3,
- 0x2a0f120e, 0x20251712, 0x15050531, 0xe52a0f12,
- 0x0408b415, 0x0280017f, 0x15e5007f, 0x7e0407b4,
- 0x7e028001, 0x604fee00, 0x227f0502, 0x85825585,
- 0x15e58354, 0x251712f0, 0x37071222, 0x74ae8375,
- 0x360712ff, 0xf51a54e0, 0x13c4e034, 0x35f50754,
- 0x2460fe24, 0x3c60fe24, 0x63700424, 0xe52d3175,
- 0xb674fd08, 0x749f0712, 0x220790bc, 0x74a20712,
- 0xc0071290, 0x3c809274, 0xe53a3175, 0xba74fd08,
- 0x749f0712, 0x220790c0, 0x74c30712, 0xc00712c4,
- 0x2080c874, 0xe5353175, 0xb874fd08, 0x749f0712,
- 0x44edffbe, 0x22079007, 0xefa3f0cf, 0x12c274f0,
- 0xc674c007, 0x0744edff, 0xa3f0cfa3, 0x7522f0ef,
- 0x8e220134, 0x8c598f58, 0x8a5b8d5a, 0x755d8b5c,
- 0xf5e4015e, 0x661e125f, 0xd35e5985, 0x5b955ee5,
- 0x07125ae5, 0xe5575078, 0x705c455d, 0x37071230,
- 0xe5928375, 0x3607125e, 0xe5c68375, 0x3607125e,
- 0xe5c88375, 0x3607125e, 0xe5908375, 0x3607125e,
- 0xe5c28375, 0x3607125e, 0x80c48375, 0x3f071203,
- 0xaff05ee5, 0xad007e5f, 0x125cac5d, 0x5eaf4904,
- 0x5dad007e, 0x0b125cac, 0x025e05d9, 0x5dabcf14,
- 0x5bad5caa, 0x59af5aac, 0x1b0258ae, 0x8d5c8c7b,
- 0x8b5e8a5d, 0x0160755f, 0xf561f5e4, 0x1263f562,
- 0x608f661e, 0x9560e5d3, 0x125ce55d, 0x61507807,
- 0x5e455fe5, 0x07122770, 0xb6837537, 0x071260e5,
- 0xb8837536, 0x071260e5, 0xba837536, 0xaff060e5,
- 0xe5007e61, 0x7d081262, 0x80360a12, 0x24079019,
- 0xe5420712, 0x36071260, 0xe48e8375, 0x74360712,
- 0x36071201, 0x63aff0e4, 0x5fad007e, 0x04125eac,
- 0x7e60af49, 0xac5fad00, 0x8b12125e, 0x15026005,
- 0xf5e42258, 0xaf59f558, 0x0744ef08, 0x837582f5,
- 0xc4fde0d0, 0x5af50f54, 0xf50744ef, 0x80837582,
- 0x12f00174, 0x83759a08, 0xf045e582, 0xf50744ef,
- 0x8a837582, 0x12f0ff74, 0x07127419, 0xbc837537,
- 0x12ef54e0, 0x83753607, 0xef54e0be, 0x75360712,
- 0x54e0c083, 0x360712ef, 0xe0bc8375, 0x07121044,
- 0xbe837536, 0x121044e0, 0x83753607, 0x1044e0c0,
- 0xe558aff0, 0x7b081259, 0xe4360a02, 0x017d58f5,
- 0x35af59f5, 0x0912fcfe, 0x37071222, 0x74b68375,
- 0x36071210, 0x74b88375, 0x36071210, 0x74ba8375,
- 0x36071210, 0x74bc8375, 0x36071210, 0x74be8375,
- 0x36071210, 0x74c08375, 0x36071210, 0xe4908375,
- 0x75360712, 0x12e4c283, 0x83753607, 0x0712e4c4,
- 0x92837536, 0x360712e4, 0xe4c68375, 0x75360712,
- 0xf0e4c883, 0xe5fe58af, 0x7d081259, 0xe5360a02,
- 0x6ce430e2, 0xc054e7e5, 0x64704064, 0x54c409e5,
- 0x08e5fe30, 0xe025e025, 0xfe4ec054, 0x4e3f54ef,
- 0xae2be5fd, 0xc302782a, 0xce33ce33, 0x82f5f9d8,
- 0xf0ed838e, 0x2aae2be5, 0x33c30278, 0xd8ce33ce,
- 0x82f5fff9, 0xe5a3838e, 0x828ff0fe, 0xa3a3838e,
- 0x8ff0fde5, 0xa3838e82, 0xfce5a3a3, 0x2be5c3f0,
- 0x2ae5fa94, 0x08500094, 0x2be52b05, 0x2a050270,
- 0xe4ffe422, 0x56f558f5, 0x827457f5, 0xb70e12fc,
- 0xf5e0838c, 0xf07f5410, 0x804410e5, 0xed4b0f12,
- 0x120a7ef0, 0x8375b70e, 0xe020e0a0, 0x05f4de26,
- 0x7057e557, 0xe5560502, 0xfd012414, 0xd3fc33e4,
- 0xe59d57e5, 0xd9409c56, 0x20940ae5, 0x0a050250,
- 0xc208e143, 0xb70e1231, 0xe0a68375, 0x12651255,
- 0x31d20370, 0x2231c222, 0xe0260790, 0xf5e0a3fa,
- 0xe0838a82, 0x39e541f5, 0x404195c3, 0x9539e526,
- 0xee9fc341, 0x40780712, 0x80017c04, 0xe5007c02,
- 0x603f6441, 0x80017b04, 0xec007b02, 0x0529605b,
- 0xc3288041, 0x399541e5, 0x12ee9fc3, 0x04407807,
- 0x0280017f, 0x41e5007f, 0x017e0460, 0x007e0280,
- 0x04605eef, 0x03804115, 0x85413985, 0xe522403a,
- 0x60e430e2, 0xe230e1e5, 0x7009e55b, 0x80017f04,
- 0xe5007f02, 0x7e047008, 0x7e028001, 0x605fee00,
- 0xf8f95343, 0xe430e2e5, 0x30e1e53b, 0xfa432ee2,
- 0xfbfa5302, 0x9010f5e4, 0x10e57094, 0x30e1e5f0,
- 0x9490e7e2, 0x1065e070, 0xfa430360, 0x90100504,
- 0x10e57094, 0x12e670f0, 0xe1800600, 0x53fdfa53,
- 0xc080fbfa, 0x12548f22, 0xe1e50600, 0x7f04e030,
- 0x7f028001, 0xd37ee500, 0x04400594, 0x0280017e,
- 0x4fee007e, 0x54853d60, 0x20e2e511, 0xce7432e1,
- 0x303c1b12, 0x017d04e7, 0x007d0280, 0x838e828f,
- 0x04e630e0, 0x0280017f, 0x5def007f, 0x1c121570,
- 0x12ce7467, 0xe6303c1b, 0x8044e007, 0x80f943f0,
- 0x22f31712, 0xe5f70e12, 0x25e02516, 0xf53024e0,
- 0x1a34e482, 0x93e483f5, 0x16e50ff5, 0xe025e025,
- 0x82f53124, 0xf51a34e4, 0xf593e483, 0x180f120e,
- 0x0fe510f5, 0x0e12f054, 0x8c8375ca, 0x0fe5f0ef,
- 0x120ce030, 0x8375b70e, 0x4044e086, 0x120a80f0,
- 0x8375b70e, 0xbf54e086, 0x440f12f0, 0xe5828375,
- 0x7f22f00e, 0xb3161205, 0x12b70e12, 0x0274e60e,
- 0xfe8e74f0, 0x12b70e12, 0xf0efbe0e, 0x12701575,
- 0x34208a1e, 0x10157505, 0x15750380, 0x8a1e1250,
- 0x74043420, 0x74028010, 0xf51525f0, 0xd40e1215,
- 0x1012f0ef, 0x17342091, 0x306415e5, 0x10740c60,
- 0x15f51525, 0xe40380b4, 0x0e1215f5, 0x22f0efd4,
- 0x2a0790e4, 0x12f0a3f0, 0x83753707, 0x7f54e082,
- 0xe0360712, 0x12f08044, 0x08123d00, 0xa0837598,
- 0x1ae020e0, 0xe02b0790, 0x0670f004, 0xe02a0790,
- 0x0790f004, 0x10b4e02a, 0xb4e0a3e1, 0x44eedc00,
- 0x44effca6, 0x8c82f507, 0x32f5e083, 0xfea844ee,
- 0xf50744ef, 0xe0838e82, 0x122233f5, 0x83759808,
- 0x54c4e0d0, 0x4375fd0f, 0xff447501, 0x74b70812,
- 0x3b75f004, 0x6014ed01, 0x0b60140c, 0x240f6014,
- 0x800b7003, 0x12008009, 0xf004b408, 0x08120680,
- 0xf00474b4, 0xfe8244ee, 0xf50744ef, 0xe5838e82,
- 0xcb081245, 0xe5828375, 0x36071231, 0xe0868375,
- 0x22f00844, 0x000f1f01, 0x90002003, 0x920f2000,
- 0x940f2100, 0x960f2200, 0x980f2300, 0x9a0f2400,
- 0x9c0f2500, 0x9e0f2600, 0xa00f2700, 0xa2012001,
- 0xa4012101, 0xa6012201, 0xa8012301, 0xaa012401,
- 0xac012501, 0xae012601, 0xb0012701, 0xb4012801,
- 0xb60f2800, 0xb80f2840, 0xcb012861, 0xeecacbef,
- 0xe4017fca, 0x704aebfd, 0xf508e524, 0x12b67482,
- 0x08e52c08, 0xb87482f5, 0xe52c0812, 0x7482f508,
- 0x2c0812ba, 0x007c007e, 0x80360a12, 0x26079012,
- 0xe5420712, 0x0790f041, 0x42071224, 0x12f040e5,
- 0x83753707, 0x0712e48e, 0x12017436, 0xf0e43607,
- 0x26f5e422, 0xe15327f5, 0x752af5fe, 0x08f5012b,
- 0x1612017f, 0x1c3030b3, 0xe4291a90, 0x9010f593,
- 0x93e4f91f, 0x009010f5, 0xf593e441, 0xf90f9010,
- 0x10f593e4, 0x1612027f, 0x550f12b3, 0x1612037f,
- 0x060012b3, 0xe730e2e5, 0x00101209, 0x12033030,
- 0x00020011, 0x0be5f047, 0xe025e025, 0x82f58224,
- 0xf50734e4, 0x88742283, 0x4408e5fe, 0x82f5ff07,
- 0x22e0838e, 0x4408e5f0, 0x2282f507, 0xc054e0f0,
- 0x838e828f, 0x44ef22f0, 0x7582f507, 0x54e08683,
- 0x0094d310, 0x0790f022, 0xf004e015, 0x44effe22,
- 0x8e82f507, 0x8e22e083, 0x12618f60, 0xffe4661e,
- 0xeeceedce, 0xe56195d3, 0x78071260, 0x20743940,
- 0xe482f52e, 0x83f50334, 0xff0370e0, 0x08122680,
- 0x9fc3fdef, 0xedcf1e40, 0x704aebcf, 0x12428d0b,
- 0x41f5fb08, 0x0c80408e, 0xf5ef0812, 0xfb081238,
- 0x3a8e39f5, 0x22bc801e, 0xe5015875, 0x120c7035,
- 0xf5e0d907, 0xe507124a, 0xe54cf5e0, 0x0c04b435,
- 0xe0f10712, 0x07124af5, 0x4cf5e0fd, 0x01b435e5,
- 0x80017f04, 0xe5007f02, 0x0402b435, 0x0280017e,
- 0x4fee007e, 0x08120c60, 0x4af5e009, 0xe0150812,
- 0x41854cf5, 0x4b408549, 0x015b7522, 0x12240790,
- 0x54e04207, 0x94d3ff1f, 0x8f045002, 0xef058058,
- 0x58f5fe24, 0x1894c3ef, 0x59750540, 0xef048018,
- 0x8559f504, 0x58af5a43, 0x59ad007e, 0x5bab007c,
- 0x1512007a, 0x7e5aaf41, 0x8c171200, 0x007e5baf,
- 0x907f1a02, 0x93e4fd10, 0xf02e0790, 0x122d1412,
- 0x34e5cf19, 0x07123570, 0xce837537, 0x1313ffe0,
- 0xf5075413, 0x240f5436, 0x240b60fe, 0x240a60fe,
- 0x02187003, 0x1e026f1d, 0x14101252, 0x1255f5e4,
- 0x5505461d, 0x94c355e5, 0x22f44005, 0xedc3fce4,
- 0xf5effa9f, 0x00827583, 0x93e4ff79, 0xa3cc6ccc,
- 0xf6daf8d9, 0xe430e2e5, 0xede58c02, 0xefffff24,
- 0xf5ff8275, 0x6c93e483, 0x017f0370, 0x22007f22,
- 0x75b70e12, 0xf0e48083, 0x074408e5, 0x75b00e12,
- 0x0e128483, 0x868375b5, 0x75b50e12, 0x54e08c83,
- 0xb60e12f3, 0x128e8375, 0x8375b50e, 0xfb54e094,
- 0x071222f0, 0x8e837537, 0x360712e4, 0x07120174,
- 0x0812e436, 0x8c8375cb, 0x122044e0, 0x54e0cb08,
- 0x8474f0df, 0xf5820885, 0x7f54e083, 0x8044e0f0,
- 0x567522f0, 0xf5fde401, 0xfe35af57, 0x220912fc,
- 0x121d1c12, 0x1b123b1e, 0x7e57afcc, 0x7c56ad00,
- 0x49041200, 0x007e56af, 0x75ee1102, 0xfde40156,
- 0x35af57f5, 0x0912fcfe, 0x1d1c1222, 0x123b1e12,
- 0x57afcc1b, 0x56ad007e, 0x0412007c, 0x7e56af49,
- 0xee110200, 0x1216f5e4, 0xe5fef70e, 0xff054408,
- 0x8f180f12, 0xf0838e82, 0x16e51605, 0x401494c3,
- 0x1208e5e6, 0xf0e4de0e, 0x58f5e422, 0x5af559f5,
- 0x58adfeff, 0x220912fc, 0x007e047f, 0x007c58ad,
- 0x7f220912, 0xad007e02, 0x02007c58, 0x3ce52209,
- 0xe5fc3e25, 0xfb002442, 0xecfa33e4, 0x12ea9bc3,
- 0x0b407807, 0x3de5428c, 0x41f53f25, 0x1222408f,
- 0x74221809, 0x8518f584, 0x19851908, 0x83188582,
- 0xf07f54e0, 0xf08044e0, 0xf08044e0, 0x704eef22,
- 0x3707120b, 0xe0d28375, 0x22f0df54, 0x75370712,
- 0x44e0d283, 0x7522f020, 0x07900158, 0x42071226,
- 0xf53f54e0, 0x3f071241, 0xf53f54e0, 0x56752240,
- 0x57f5e402, 0xafbd1d12, 0xad007e57, 0x02007c56,
- 0xf5e44904, 0xf541f542, 0xf538f540, 0x223af539,
- 0xff0754ef, 0xf854f9e5, 0x22f9f54f, 0xfee4017f,
- 0xffbe0e0f, 0x0e1222fb, 0x12f0efd4, 0x00229110,
- 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x00000000, 0x000f1f01, 0xc3002003, 0xb9f6ad13,
- 0xffffb7ea, 0xffeef3a2
-};
-#endif
-#ifdef ISP_2500_MULTI
-/*
- * ******************************************************************** *
- * *
- * ISP2500mid Firmware *
- * *
- * ******************************************************************** *
- */
-static const uint32_t isp_2500_multi_risc_code[] = {
- 0x0501f042, 0x00111000, 0x00100000, 0x0000a562,
- 0x00000005, 0x00000005, 0x00000000, 0x00009095,
- 0x00000004, 0x00000000, 0x20434f50, 0x59524947,
- 0x48542032, 0x30303720, 0x514c4f47, 0x49432043,
- 0x4f52504f, 0x52415449, 0x4f4e2020, 0x20495350,
- 0x32357878, 0x20466972, 0x6d776172, 0x65202020,
- 0x56657273, 0x696f6e20, 0x2020352e, 0x30352e30,
- 0x30202024, 0x00000000, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x00100000, 0x00100000,
- 0x0000a562, 0xffffffff, 0x00111004, 0x00020000,
- 0x00000d9e, 0xffffffff, 0x00111da2, 0x0010e500,
- 0x00001b0f, 0xffffffff, 0x001138b1, 0x0000c000,
- 0x0000093b, 0x00ffffff, 0x001141ec, 0x00008000,
- 0x000005a0, 0x00ffffff, 0x0011478c, 0x0000a000,
- 0x000005a3, 0x00ffffff, 0x00114d2f, 0x0000400e,
- 0x00000808, 0xffffffff, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x4203f000, 0x00021fff,
- 0x40000000, 0x4203e000, 0x90000100, 0x40000000,
- 0x42000800, 0x00020d9f, 0x6002f000, 0x608c00e0,
- 0x50000000, 0x8c000500, 0x05020003, 0x42000800,
- 0x00020000, 0x45780800, 0x80040800, 0x82040580,
- 0x00022000, 0x05fe07fc, 0x4178a000, 0x4200a800,
- 0x0010a562, 0x42000800, 0x0010e500, 0x40540000,
- 0x8004b480, 0x0551fabb, 0x0501fbce, 0x600c6020,
- 0x50304800, 0x8c240500, 0x0500001c, 0x59e00016,
- 0x8c000504, 0x05020019, 0x0551fb10, 0x604808fa,
- 0x50041000, 0x82081500, 0xfffffffc, 0x90081d43,
- 0x90081540, 0x84244d00, 0x440c0800, 0x44080800,
- 0x44246000, 0x64030000, 0x4203e000, 0x70000000,
- 0x4203e000, 0xb0300000, 0x603ff84e, 0x59e00016,
- 0x8c000504, 0x05020002, 0x05fe47fd, 0x84244d40,
- 0x44246000, 0x0551faf9, 0x64030000, 0x0501f9f1,
- 0x4803c856, 0x0505ff72, 0x6413c020, 0x4203e000,
- 0x6000000f, 0x640f70e8, 0x640f78e8, 0x640da8e8,
- 0x59e00023, 0x8c000500, 0x0502002b, 0x42002800,
- 0x00100022, 0x58140800, 0x4817c857, 0x4807c857,
- 0x800409c0, 0x0500000a, 0x58142002, 0x4813c857,
- 0x58141003, 0x4c140000, 0x0501fb8d, 0x5c002800,
- 0x0502003d, 0x90142c04, 0x05fdf7f3, 0x42002800,
- 0x00100022, 0x5814a000, 0x4817c857, 0x4853c857,
- 0x8050a1c0, 0x05000014, 0x4c140000, 0x5814a801,
- 0x4857c857, 0x40500000, 0x80540480, 0x0500000b,
- 0x82540480, 0x0000400e, 0x05020005, 0x9050a404,
- 0x0509fadd, 0x05020028, 0x0501f004, 0x5814b002,
- 0x485bc857, 0x0551fa5f, 0x5c002800, 0x90142c04,
- 0x05fdf7e9, 0x050df958, 0x42001000, 0x7ff481fe,
- 0x59e00002, 0x8c00051e, 0x05020003, 0x42001000,
- 0x7ff480fe, 0x50081000, 0x480b505c, 0x42002800,
- 0x00100022, 0x58140801, 0x4817c857, 0x4807c857,
- 0x800409c0, 0x05000023, 0x58142002, 0x4813c857,
- 0x58141003, 0x4c140000, 0x82040480, 0x0000400e,
- 0x05020004, 0x0509fae7, 0x4803c856, 0x0501f003,
- 0x0501fb53, 0x05020004, 0x5c002800, 0x90142c04,
- 0x05fdf7ed, 0x4803c856, 0x4a03c020, 0x00004010,
- 0x4a03c011, 0x40100011, 0x05006000, 0x4203e000,
- 0x40000000, 0x59e00017, 0x60000800, 0x8c00050a,
- 0x050a0993, 0x8d0c0530, 0x050a097f, 0x050a0981,
- 0x6403c017, 0x4203e000, 0x30000001, 0x0501f000,
- 0x4803c856, 0x0201f800, 0x0010e504, 0x59e00024,
- 0x8c000500, 0x050a0a87, 0x0501fbc9, 0x050df9fe,
- 0x05020004, 0x4a03c014, 0x001c001c, 0x0501f003,
- 0x4a03c014, 0x081c001c, 0x4817c857, 0x0501fbe7,
- 0x42002000, 0x0011000f, 0x0551fa25, 0x59a8006b,
- 0x800001c0, 0x0500000c, 0x59a8008a, 0x8c000500,
- 0x05000005, 0x59a8000a, 0x82000480, 0x0013ffff,
- 0x05001005, 0x59a8206b, 0x80102000, 0x59a8280a,
- 0x0551fa17, 0x0551fc0c, 0x0551fc33, 0x59a8280a,
- 0x60000812, 0x60001802, 0x4807500d, 0x480f5266,
- 0x60c01000, 0x052dfdd1, 0x82040c00, 0x00110514,
- 0x4807500b, 0x600400de, 0x50000000, 0x8c000502,
- 0x05000004, 0x59a8008a, 0x84000540, 0x4803508a,
- 0x4a03c810, 0x00100000, 0x4a03c811, 0x0010a562,
- 0x4a03c812, 0x0010e500, 0x4a03c813, 0x0011000e,
- 0x0501fb86, 0x6447c829, 0x59e40001, 0x82000540,
- 0x0003403f, 0x4803c801, 0x4a03c802, 0x00000933,
- 0x59e00003, 0x82000540, 0x00240000, 0x4803c003,
- 0x64ffc019, 0x60701000, 0x0501fae0, 0x4202c000,
- 0x00110514, 0x59aab00b, 0x59aaa00b, 0x59aaa80b,
- 0x59aac80d, 0x49675065, 0x59a8000b, 0x4803500c,
- 0x0501fbe9, 0x0535fd7b, 0x0501fbf2, 0x0501fc65,
- 0x0509fafe, 0x59a8004f, 0x8c000508, 0x05000004,
- 0x050dfa2a, 0x0519fe3a, 0x050dfb2d, 0x0501fd78,
- 0x0505fb2c, 0x052dfdd5, 0x0501f85d, 0x0511f86b,
- 0x0525fd79, 0x0521ff4b, 0x052dfb3b, 0x0509fb2d,
- 0x0509f95c, 0x4203e000, 0xf0000001, 0x0551fbf7,
- 0x6403c018, 0x4203e000, 0xa0000001, 0x59a8008a,
- 0x80000540, 0x05000004, 0x4203e000, 0x20000551,
- 0x0501f003, 0x4203e000, 0x20000511, 0x4203e000,
- 0x50010000, 0x6403c020, 0x05027019, 0x59e00020,
- 0x90000582, 0x05020016, 0x4a03c020, 0x00004000,
- 0x4a03c011, 0x40000010, 0x05006000, 0x4203e000,
- 0x40000000, 0x4df00000, 0x4203e000, 0x50000000,
- 0x59e00017, 0x60000800, 0x8c00050a, 0x0002088c,
- 0x8d0c0530, 0x050a08ec, 0x000209af, 0x5c03e000,
- 0x6403c017, 0x4203e000, 0x30000001, 0x6002d800,
- 0x4203e000, 0xb0600000, 0x59a80091, 0x4003f800,
- 0x0001f004, 0x4df00000, 0x4203e000, 0x50000000,
- 0x416c0000, 0x90000c88, 0x05021869, 0x0c01f803,
- 0x5c03e000, 0x0001f006, 0x00100193, 0x0010fe1a,
- 0x0010fd24, 0x00100192, 0x0010fcd9, 0x00100192,
- 0x00100192, 0x001001a4, 0x0501f85d, 0x42000800,
- 0x0010ae99, 0x5804001e, 0x8c000500, 0x0500000c,
- 0x84000500, 0x4800081e, 0x6012d800, 0x0501fa6f,
- 0x49f3c857, 0x5c000800, 0x5c000000, 0x82000540,
- 0x00007e20, 0x4c000000, 0x4c040000, 0x1c01f000,
- 0x4a038805, 0x000000f0, 0x1c01f000, 0x6417505d,
- 0x6417505e, 0x6403505f, 0x4a035060, 0x00009095,
- 0x0525fce8, 0x4a03541b, 0x0000ffff, 0x4a03500f,
- 0x00ffffff, 0x0541fef6, 0x4a03501f, 0x20200000,
- 0x4a035020, 0x88000200, 0x4a035021, 0x00ff001f,
- 0x4a035022, 0x000007d0, 0x4a035023, 0x80000a00,
- 0x4a035024, 0xa0000200, 0x4a035025, 0x00ff0004,
- 0x4a035026, 0x00010000, 0x4a035027, 0x80000000,
- 0x4a035028, 0x00000200, 0x4a035029, 0x00ff0000,
- 0x4a03502a, 0x00010000, 0x4a035031, 0x514c4f47,
- 0x4a035032, 0x49432020, 0x1c01f000, 0x4d440000,
- 0x417a8800, 0x4c5c0000, 0x4178b800, 0x0001fae7,
- 0x05020004, 0x0521fba2, 0x05020002, 0x805cb800,
- 0x81468800, 0x83440580, 0x000007f0, 0x05fe07f8,
- 0x405c0800, 0x5c00b800, 0x5c028800, 0x1c01f000,
- 0x4803c857, 0x5c000000, 0x4c000000, 0x4803c857,
- 0x0501f80b, 0x485fc857, 0x4203e000, 0x50000000,
- 0x5c000000, 0x4d780000, 0x6008b900, 0x0501f008,
- 0x486bc857, 0x486fc857, 0x4873c857, 0x485fc857,
- 0x4203e000, 0x50000000, 0x6008b900, 0x05006000,
- 0x4c000000, 0x4c040000, 0x59bc00ea, 0x4803c857,
- 0x90000507, 0x90000581, 0x05020003, 0x60000800,
- 0x052dff67, 0x59b800ea, 0x4803c857, 0x641370e8,
- 0x5c000800, 0x4807c025, 0x80040920, 0x4807c026,
- 0x5c000000, 0x4803c023, 0x80000120, 0x4803c024,
- 0x5c000000, 0x4803c857, 0x4803c021, 0x80000120,
- 0x4803c022, 0x41f80000, 0x4803c029, 0x80000120,
- 0x4803c02a, 0x0551f95c, 0x0500004a, 0x42000800,
- 0x0010d20e, 0x46000800, 0xfaceface, 0x80040800,
- 0x4c080000, 0x4c0c0000, 0x600010f4, 0x58080013,
- 0x44000800, 0x80040800, 0x58080022, 0x44000800,
- 0x80040800, 0x58080023, 0x44000800, 0x80040800,
- 0x58080024, 0x44000800, 0x80040800, 0x58080025,
- 0x44000800, 0x80040800, 0x58080028, 0x44000800,
- 0x80040800, 0x610010f4, 0x602c1800, 0x50080000,
- 0x44000800, 0x80081000, 0x80040800, 0x800c1840,
- 0x05fe07fb, 0x600c1800, 0x600010f6, 0x480c1003,
- 0x58080005, 0x44000800, 0x80040800, 0x800c1840,
- 0x05fe17fb, 0x600010f8, 0x58080002, 0x44000800,
- 0x80040800, 0x58080003, 0x44000800, 0x80040800,
- 0x58080020, 0x44000800, 0x80040800, 0x58080021,
- 0x44000800, 0x80040800, 0x58080022, 0x44000800,
- 0x80040800, 0x58080023, 0x44000800, 0x80040800,
- 0x600010f6, 0x58080007, 0x44000800, 0x80040800,
- 0x5808002b, 0x44000800, 0x80040800, 0x5808007c,
- 0x44000800, 0x80040800, 0x5c001800, 0x5c001000,
- 0x64030000, 0x485fc020, 0x905cb9c0, 0x905cbd52,
- 0x485fc011, 0x4203e000, 0x40000000, 0x6016d800,
- 0x59e00017, 0x60000800, 0x8c00050a, 0x050a080c,
- 0x8d0c0530, 0x05060ff8, 0x05060ffa, 0x6403c017,
- 0x4203e000, 0x30000001, 0x0501f956, 0x05fdf7ff,
- 0x60100000, 0x0501f80c, 0x4a03c855, 0x0001eb5a,
- 0x59e40001, 0x82000540, 0xff000700, 0x4803c801,
- 0x42000000, 0x0010b364, 0x49780003, 0x49780004,
- 0x1c01f000, 0x42000800, 0x0010b366, 0x44000800,
- 0x59e40801, 0x82041500, 0x00f3c0ff, 0x480bc801,
- 0x8c040524, 0x0500000b, 0x4c000000, 0x59e41052,
- 0x59e40054, 0x800000d4, 0x82000400, 0x0010d237,
- 0x80081480, 0x480bc853, 0x6503c800, 0x5c000000,
- 0x4a03c850, 0x0010d237, 0x800000d4, 0x82002400,
- 0x0010d236, 0x4813c851, 0x4a03c853, 0x00000400,
- 0x42000000, 0x0010d237, 0x82001400, 0x00001000,
- 0x45780000, 0x80000000, 0x80081d80, 0x05fe07fd,
- 0x4807c801, 0x1c01f000, 0x42002000, 0x0010b364,
- 0x59e41801, 0x58100c01, 0x82040500, 0x00003800,
- 0x820c1d00, 0xffffc7ff, 0x800c1d40, 0x480fc801,
- 0x1c01f000, 0x5c036000, 0x4db00000, 0x49b3c857,
- 0x4803c857, 0x1c01f000, 0x4c5c0000, 0x4c600000,
- 0x4c640000, 0x8d0c052a, 0x0500002f, 0x401c0000,
- 0x80040d40, 0x4004b800, 0x400cc000, 0x4018c800,
- 0x0501f8d3, 0x41784000, 0x42002800, 0x0010b364,
- 0x58142017, 0x5814000d, 0x80100400, 0x445c0000,
- 0x80102000, 0x80000000, 0x82104d00, 0x000000ff,
- 0x050008a9, 0x0500001c, 0x4c000000, 0x0501f88e,
- 0x5c000000, 0x44080000, 0x80102000, 0x80000000,
- 0x82104d00, 0x000000ff, 0x0500089f, 0x05000012,
- 0x44600000, 0x80102000, 0x80000000, 0x82104d00,
- 0x000000ff, 0x05000898, 0x0500000b, 0x44640000,
- 0x80102000, 0x80000000, 0x82104d00, 0x000000ff,
- 0x05000891, 0x05000004, 0x48102817, 0x802041c0,
- 0x05060ca0, 0x5c00c800, 0x5c00c000, 0x5c00b800,
- 0x1c01f000, 0x4c5c0000, 0x4c600000, 0x4c640000,
- 0x42001000, 0x04000000, 0x41ccc800, 0x42002800,
- 0x0010b364, 0x59a8008c, 0x82000d00, 0x000003ff,
- 0x4c000000, 0x58140212, 0x0501f85b, 0x5c000000,
- 0x4004b800, 0x4008c000, 0x905cbc06, 0x0501f016,
- 0x4c5c0000, 0x4c600000, 0x4c640000, 0x42002800,
- 0x0010b364, 0x42001000, 0x03000000, 0x4000c800,
- 0x821c0500, 0x00003c00, 0x80000114, 0x821c0d00,
- 0x000003ff, 0x4c000000, 0x58140412, 0x0501f846,
- 0x5c000000, 0x4004b800, 0x4008c000, 0x805cbc00,
- 0x805cb840, 0x825c0480, 0x00000240, 0x05fe1edc,
- 0x0501f87b, 0x405c0000, 0x905cbc02, 0x80600d40,
- 0x42002800, 0x0010b364, 0x41784000, 0x58142017,
- 0x825c0480, 0x00000101, 0x05021029, 0x5814000d,
- 0x80100400, 0x44040000, 0x80102000, 0x80000000,
- 0x805cb840, 0x82104d00, 0x000000ff, 0x0500084a,
- 0x0500001b, 0x4c000000, 0x0501f82f, 0x5c000000,
- 0x44080000, 0x80102000, 0x80000000, 0x805cb840,
- 0x82104d00, 0x000000ff, 0x0500083f, 0x05000010,
- 0x50641800, 0x440c0000, 0x80000000, 0x80102000,
- 0x8064c800, 0x805cb840, 0x05fe07f6, 0x82104d00,
- 0x000000ff, 0x05000834, 0x05000005, 0x4813c857,
- 0x48102817, 0x802041c0, 0x05060c42, 0x5c00c800,
- 0x5c00c000, 0x5c00b800, 0x1c01f000, 0x82100500,
- 0x000000ff, 0x805c0400, 0x82000480, 0x00000200,
- 0x05fc17d3, 0x6108b800, 0x82600d40, 0x00008040,
- 0x05fdf7cf, 0x800001c0, 0x05000006, 0x80041c80,
- 0x05001004, 0x05000003, 0x40000800, 0x8408155c,
- 0x1c01f000, 0x59a80079, 0x4803c857, 0x800018c4,
- 0x800010ca, 0x800000cc, 0x800c0400, 0x80081400,
- 0x59940024, 0x61a01807, 0x800c1c80, 0x5994002e,
- 0x800c0400, 0x40001800, 0x800c18c2, 0x800c0400,
- 0x800c18c6, 0x800c0400, 0x800c18c2, 0x800c0400,
- 0x800c190e, 0x800c0400, 0x80000112, 0x80081400,
- 0x1c01f000, 0x4813c857, 0x5c036000, 0x4db00000,
- 0x49b3c857, 0x40001800, 0x58140000, 0x8c000502,
- 0x05000009, 0x58140821, 0x80040800, 0x48042821,
- 0x4807c857, 0x8400054a, 0x48002800, 0x80000580,
- 0x0501f00e, 0x82102500, 0x000003ff, 0x80204000,
- 0x58140014, 0x80000000, 0x90000503, 0x48002814,
- 0x05000003, 0x400c0000, 0x0501f002, 0x5814000d,
- 0x80000540, 0x4803c857, 0x1c01f000, 0x42002800,
- 0x0010b364, 0x58140000, 0x8c00050a, 0x0500002f,
- 0x8c000502, 0x0502002d, 0x4c5c0000, 0x5814b821,
- 0x49782821, 0x8400050a, 0x48002800, 0x58142017,
- 0x4813c857, 0x5814000d, 0x80100400, 0x41784000,
- 0x42000800, 0x0b000001, 0x44040000, 0x80000000,
- 0x80102000, 0x82104d00, 0x000000ff, 0x05fc0fca,
- 0x05fc0e47, 0x4c000000, 0x05fdffaf, 0x5c000000,
- 0x44080000, 0x80000000, 0x80102000, 0x82104d00,
- 0x000000ff, 0x05fc0fc0, 0x05fc0e3d, 0x445c0000,
- 0x80000000, 0x80102000, 0x82104d00, 0x000000ff,
- 0x05fc0fb9, 0x05fc0e36, 0x48102817, 0x802041c0,
- 0x05060bc8, 0x405c2000, 0x600c1800, 0x60a01100,
- 0x0519fa0d, 0x5c00b800, 0x1c01f000, 0x1c01f000,
- 0x59a80076, 0x8c000530, 0x05fe07fe, 0x4c080000,
- 0x60101000, 0x0501f849, 0x5c001000, 0x4201d000,
- 0x00028b0a, 0x052dfa74, 0x4c080000, 0x60201000,
- 0x0501f842, 0x5c001000, 0x4201d000, 0x00028b0a,
- 0x052dfa6d, 0x4c080000, 0x60401000, 0x0501f83b,
- 0x5c001000, 0x4201d000, 0x00028b0a, 0x052dfa66,
- 0x05fdf7e8, 0x8c00050c, 0x59a80876, 0x05020003,
- 0x84040d30, 0x0501f005, 0x84040d70, 0x48075076,
- 0x60001000, 0x0501f02d, 0x48075076, 0x916c0507,
- 0x0c01f001, 0x00100411, 0x00100403, 0x00100403,
- 0x001003f1, 0x0010040a, 0x00100403, 0x00100403,
- 0x0010040a, 0x59c40801, 0x82040d00, 0x00018000,
- 0x82040580, 0x00018000, 0x0500000a, 0x82040580,
- 0x00010000, 0x05000004, 0x42001000, 0x42004000,
- 0x0501f006, 0x42001000, 0x22002000, 0x0501f003,
- 0x42001000, 0x12001000, 0x0501f015, 0x59a80076,
- 0x8c000534, 0x05020004, 0x42001000, 0x74057005,
- 0x0501f80f, 0x1c01f000, 0x59a80076, 0x8c000534,
- 0x05020004, 0x42001000, 0x74057005, 0x0501f008,
- 0x1c01f000, 0x1c01f000, 0x9008151c, 0x82081540,
- 0x001c0000, 0x480bc013, 0x1c01f000, 0x59a80076,
- 0x8c000530, 0x05000002, 0x84081570, 0x480b5076,
- 0x8c000530, 0x05020005, 0x82081500, 0x00007000,
- 0x80081114, 0x05fdfff1, 0x1c01f000, 0x41780000,
- 0x50041800, 0x800c0400, 0x80040800, 0x80102040,
- 0x05fe07fc, 0x80080500, 0x80000540, 0x1c01f000,
- 0x6002f000, 0x41780000, 0x41780800, 0x41781000,
- 0x41781800, 0x41782000, 0x41782800, 0x41783000,
- 0x41783800, 0x41784000, 0x41784800, 0x41785000,
- 0x41785800, 0x41786000, 0x41786800, 0x41787000,
- 0x41787800, 0x41788000, 0x41788800, 0x41789000,
- 0x41789800, 0x4178a000, 0x4178a800, 0x4178b000,
- 0x4178b800, 0x4178c000, 0x4178c800, 0x4178d000,
- 0x4178d800, 0x4178e000, 0x4178e800, 0x4178f000,
- 0x4178f800, 0x41790000, 0x41790800, 0x41791000,
- 0x41791800, 0x41792000, 0x41792800, 0x41793000,
- 0x41793800, 0x41794000, 0x41794800, 0x41795000,
- 0x41795800, 0x41796000, 0x41796800, 0x41797000,
- 0x41797800, 0x41798000, 0x41798800, 0x41799000,
- 0x41799800, 0x4179a000, 0x6001a960, 0x60c9b17e,
- 0x4179b800, 0x4179c800, 0x4179c000, 0x4179d000,
- 0x4179d800, 0x4179e000, 0x4179e800, 0x4179f000,
- 0x4179f800, 0x417a0000, 0x417a0800, 0x417a1000,
- 0x417a1800, 0x417a2000, 0x600228c2, 0x417a3000,
- 0x417a3800, 0x417a4000, 0x417a4800, 0x417a5000,
- 0x417a5800, 0x417a6000, 0x417a6800, 0x417a7000,
- 0x417a7800, 0x417a8000, 0x417a8800, 0x417a9000,
- 0x417a9800, 0x417ae800, 0x417af800, 0x600300f8,
- 0x42031000, 0x0010b213, 0x607f1960, 0x60df2160,
- 0x42032800, 0x0010b187, 0x42033000, 0x00020da8,
- 0x42034000, 0x0010ae99, 0x42033800, 0x0010aeb8,
- 0x42034800, 0x0010aefd, 0x42035000, 0x0010ae00,
- 0x42035800, 0x0010a600, 0x417b6000, 0x600368de,
- 0x6003c860, 0x600371fe, 0x6003797e, 0x600380ee,
- 0x60038880, 0x600390c0, 0x42039800, 0x0010cf46,
- 0x6003a0ec, 0x6003a8e8, 0x6003b0e4, 0x6003b8e2,
- 0x6003c0e0, 0x6003d000, 0x4203e800, 0x000201d8,
- 0x417bd800, 0x1c01f000, 0x6407c830, 0x640fc831,
- 0x6413c832, 0x6427c833, 0x6417c834, 0x641bc835,
- 0x641fc836, 0x6423c837, 0x6403c838, 0x642bc839,
- 0x642fc83a, 0x640bc83b, 0x1c01f000, 0x42002800,
- 0x00140000, 0x59a8008a, 0x8c000500, 0x05000003,
- 0x42002800, 0x0013a000, 0x46002800, 0xaaaaaaaa,
- 0x60283000, 0x80183040, 0x05fe07ff, 0x50140000,
- 0x82000580, 0xaaaaaaaa, 0x05020013, 0x41782000,
- 0x40140800, 0x82102400, 0x00010000, 0x80042c04,
- 0x46002800, 0x55555555, 0x60283000, 0x80183040,
- 0x05fe07ff, 0x50140000, 0x82000580, 0x55555555,
- 0x05020005, 0x50040000, 0x82000580, 0x55555555,
- 0x05fe07f1, 0x80142840, 0x4817c857, 0x4817c861,
- 0x4817500a, 0x1c01f000, 0x4817c857, 0x4c5c0000,
- 0x4c600000, 0x054dfe8c, 0x05000030, 0x4817c857,
- 0x606c08f6, 0x50040800, 0x8c04053e, 0x0500002b,
- 0x4817c857, 0x850e1d70, 0x4c040000, 0x4c140000,
- 0x0505fd6d, 0x5c002800, 0x5c000800, 0x59e0b81a,
- 0x8204b500, 0x000007ff, 0x8058b000, 0x485b506e,
- 0x600008f4, 0x58042029, 0x5804302a, 0x82102500,
- 0xfffffff8, 0x82183500, 0xfffffff8, 0x40100000,
- 0x8018c480, 0x8060c104, 0x80600417, 0x48035069,
- 0x497b506d, 0x9058b41f, 0x8058090a, 0x8004c418,
- 0x8060c040, 0x805cc418, 0x485f506a, 0x4863506b,
- 0x805c2840, 0x59a8008a, 0x8c000500, 0x05000007,
- 0x59a8000a, 0x82000580, 0x00139fff, 0x05020003,
- 0x4817500a, 0x4817c857, 0x64030000, 0x5c00c000,
- 0x5c00b800, 0x1c01f000, 0x40681800, 0x59a80819,
- 0x800409c0, 0x05020006, 0x49781c0c, 0x64081a0c,
- 0x641c1804, 0x59a8000f, 0x48001805, 0x05fdfcb0,
- 0x800409c0, 0x05020002, 0x80040800, 0x48041806,
- 0x1c01f000, 0x61fcb001, 0x42024800, 0x0010b391,
- 0x42000000, 0x0010be91, 0x48024809, 0x90000410,
- 0x91264c0b, 0x8058b040, 0x05fe07fc, 0x1c01f000,
- 0x59a8080c, 0x4006d000, 0x6006b800, 0x59a8180a,
- 0x480fc857, 0x41783000, 0x90041415, 0x90082415,
- 0x40100000, 0x800c0480, 0x05001020, 0x8d0c0530,
- 0x0500000b, 0x59a8006b, 0x80000482, 0x05001008,
- 0x40100000, 0x59a8286a, 0x80140480, 0x05021004,
- 0x59a8106b, 0x80081000, 0x05fdf7f1, 0x801831c0,
- 0x0502000d, 0x59a8008a, 0x8c000500, 0x05000006,
- 0x42000000, 0x0013a000, 0x80000484, 0x0500100e,
- 0x0501f005, 0x42000000, 0x00140000, 0x80000484,
- 0x05001009, 0x44080800, 0x40080800, 0x40101000,
- 0x815eb800, 0x05fdf7de, 0x45780800, 0x495f501a,
- 0x1c01f000, 0x42001000, 0x00140000, 0x59a8008a,
- 0x8c000500, 0x05000003, 0x42001000, 0x0013a000,
- 0x80183040, 0x05fdf7d2, 0x0501f803, 0x412d8800,
- 0x1c01f000, 0x915c04a0, 0x0500100a, 0x496bc857,
- 0x815eb840, 0x416a5800, 0x592ed000, 0x497a5800,
- 0x497a5801, 0x497a5805, 0x812e59c0, 0x1c01f000,
- 0x42000000, 0x0010b2c8, 0x054dfccf, 0x417a5800,
- 0x05fdf7fa, 0x0501f803, 0x412d8800, 0x1c01f000,
- 0x815eb840, 0x05001009, 0x416a5800, 0x492fc857,
- 0x592ed000, 0x497a5800, 0x497a5801, 0x497a5805,
- 0x812e59c0, 0x1c01f000, 0x42000000, 0x0010b2c8,
- 0x054dfcbd, 0x417ab800, 0x417a5800, 0x05fdf7f9,
- 0x492fc857, 0x496a5800, 0x412ed000, 0x815eb800,
- 0x59c80000, 0x82000540, 0x00001200, 0x48039000,
- 0x1c01f000, 0x492fc857, 0x812e59c0, 0x05000007,
- 0x592c0001, 0x497a5801, 0x4c000000, 0x05fdfff1,
- 0x5c025800, 0x05fdf7f9, 0x1c01f000, 0x42000000,
- 0x0010b2c8, 0x054dfca7, 0x80025d80, 0x1c01f000,
- 0x4807c856, 0x42007000, 0x00020d9f, 0x64007000,
- 0x59e00003, 0x82000540, 0x00008080, 0x4803c003,
- 0x4a03b805, 0x90000001, 0x59dc0006, 0x4a03b805,
- 0x70000000, 0x59dc0006, 0x4a03b805, 0x30000000,
- 0x59dc0006, 0x4a03b805, 0x80000000, 0x6100b000,
- 0x497bb807, 0x8058b040, 0x05fe07fe, 0x4a03b805,
- 0x30000000, 0x59dc0006, 0x4a03b805, 0x60000001,
- 0x59dc0006, 0x4a03b805, 0x60000003, 0x59dc0006,
- 0x4a03b805, 0x60000005, 0x59dc0006, 0x4a03b805,
- 0x60000007, 0x59dc0006, 0x4a03b805, 0x70000001,
- 0x59dc0006, 0x4a03b805, 0x30000002, 0x6100b000,
- 0x497bb807, 0x8058b040, 0x05fe07fe, 0x4a03b805,
- 0x30000000, 0x59dc0006, 0x4a03b805, 0x60000001,
- 0x4803c856, 0x05fdff90, 0x05fc0c15, 0x42001000,
- 0x0010b20e, 0x452c1000, 0x64065801, 0x4a025802,
- 0x00000100, 0x4a025808, 0x00106706, 0x497a5809,
- 0x497a580a, 0x497a580b, 0x05fdff83, 0x05fc0c08,
- 0x42001000, 0x0010b20f, 0x452c1000, 0x64025801,
- 0x4a025802, 0x00000100, 0x4a025808, 0x00100f36,
- 0x497a5803, 0x497a5806, 0x497a5807, 0x497a5809,
- 0x05fdff75, 0x05fc0bfa, 0x42001000, 0x0010b210,
- 0x452c1000, 0x64025801, 0x4a025802, 0x00000100,
- 0x4a025808, 0x00100f5a, 0x497a5803, 0x497a5806,
- 0x497a5807, 0x497a5809, 0x1c01f000, 0x40681000,
- 0x0001f81c, 0x1c01f000, 0x42001000, 0x0002002b,
- 0x0529feeb, 0x0541fb6e, 0x054df86c, 0x05000010,
- 0x4a03b805, 0x30000002, 0x59dc0006, 0x4807b800,
- 0x480bb801, 0x42007000, 0x00020d9f, 0x65007002,
- 0x480c7008, 0x58380007, 0x90000405, 0x48007003,
- 0x640c7000, 0x4803b803, 0x0001f053, 0x42000000,
- 0x0010b230, 0x054dfc28, 0x0541fb64, 0x60040800,
- 0x42001000, 0x0002002b, 0x0529feae, 0x42007000,
- 0x00020d9f, 0x0001f034, 0x58380802, 0x600011fe,
- 0x82040480, 0x0000ff00, 0x05021003, 0x40041000,
- 0x80000580, 0x48007002, 0x480bb802, 0x59dc0006,
- 0x4a03b805, 0x10000000, 0x1c01f000, 0x4a03b805,
- 0x30000001, 0x58386001, 0x58301008, 0x4807c857,
- 0x4803c857, 0x4833c857, 0x4a006002, 0x00000200,
- 0x64007000, 0x800811c0, 0x00000031, 0x0001f089,
- 0x4833c857, 0x4807c857, 0x58300809, 0x4c040000,
- 0x4d2c0000, 0x40325800, 0x05fdff47, 0x5c025800,
- 0x5c000800, 0x4807c857, 0x0001f08c, 0x59e00017,
- 0x8c00050c, 0x05020028, 0x59a8386c, 0xa01c459e,
- 0x05000025, 0x59a82069, 0x59a8086d, 0x59a8486e,
- 0x40245000, 0x9004051f, 0x81782800, 0x801428c0,
- 0x8004010a, 0x80101400, 0x50083000, 0x80140506,
- 0x0502000c, 0x80040800, 0x80244840, 0x05000012,
- 0x80280581, 0x05000005, 0x80142942, 0x9004051f,
- 0x05fe07f7, 0x05fdf7f3, 0x41780800, 0x05fdf7ee,
- 0x59a8186a, 0x800400c4, 0x800c1c00, 0x580c0003,
- 0x8c000500, 0x05000009, 0x80204040, 0x05fe07ee,
- 0x80040800, 0x80280581, 0x05020002, 0x41780800,
- 0x4807506d, 0x1c01f000, 0x80142880, 0x80140506,
- 0x44001000, 0x80042800, 0x80280585, 0x05020002,
- 0x41782800, 0x4817506d, 0x801c3840, 0x481f506c,
- 0x0001f09c, 0x59a81869, 0x8004110a, 0x9004051f,
- 0x80081c03, 0x81782000, 0x801020c0, 0x500c0000,
- 0x80100d00, 0x05020006, 0x80100540, 0x59a8086c,
- 0x44001800, 0x80040800, 0x4807506c, 0x1c01f000,
- 0x4df00000, 0x4203e000, 0x50000000, 0x915c04a0,
- 0x05fe1fb7, 0x5c03e000, 0x1c01f000, 0x59dc0006,
- 0x8c000520, 0x05000009, 0x00044ad6, 0x59dc0006,
- 0x82000500, 0x00006000, 0x05000004, 0x82000580,
- 0x00006000, 0x05fe07f9, 0x1c01f000, 0x41781800,
- 0x58382005, 0x40300000, 0x80100580, 0x05000007,
- 0x40101800, 0x58102000, 0x801021c0, 0x05fe07fa,
- 0x4803c856, 0x0501f011, 0x4833c857, 0x58302000,
- 0x49786000, 0x800c19c0, 0x05020008, 0x801021c0,
- 0x05000003, 0x48107005, 0x0501f008, 0x49787005,
- 0x49787004, 0x0501f005, 0x48101800, 0x801021c0,
- 0x05020002, 0x480c7004, 0x1c01f000, 0x4803c856,
- 0x4dc00000, 0x42007000, 0x0010b211, 0x64007400,
- 0x49787001, 0x600380ee, 0x60080800, 0x59c00007,
- 0x4a038006, 0x60000001, 0x59c00007, 0x4a038006,
- 0x60000003, 0x59c00007, 0x4a038006, 0x60000005,
- 0x59c00007, 0x4a038006, 0x60000007, 0x59c00007,
- 0x4a038006, 0x60000009, 0x59c00007, 0x4a038006,
- 0x6000000b, 0x4c040000, 0x0501f817, 0x5c000800,
- 0x4a038009, 0xf4f60000, 0x91c38420, 0x80040840,
- 0x05fe07e7, 0x600380ee, 0x6443c822, 0x640370e8,
- 0x0501f83c, 0x4a0370ee, 0x00100000, 0x4a0370ee,
- 0x00080102, 0x4a0370e9, 0x00000400, 0x4a0370e9,
- 0x00003a0f, 0x640370e8, 0x640770e8, 0x5c038000,
- 0x1c01f000, 0x59c00007, 0x4a038006, 0xe0000001,
- 0x61000800, 0x497b8005, 0x59c00007, 0x80040840,
- 0x05fe07fd, 0x4a038006, 0x30000001, 0x59c00007,
- 0x8c000508, 0x05fe07fe, 0x59c00007, 0x4a038006,
- 0xb0000003, 0x59c00007, 0x4a038006, 0xb0000005,
- 0x59c00007, 0x4a038006, 0xb0000001, 0x59c00007,
- 0x4a038006, 0xb0000009, 0x59c00007, 0x4a038006,
- 0xb0000007, 0x59c00007, 0x4a038006, 0xb000000b,
- 0x59c00007, 0x4a038006, 0x60000001, 0x59c00007,
- 0x4a038006, 0x60000003, 0x59c00007, 0x4a038006,
- 0x60000005, 0x59c00007, 0x4a038006, 0x60000007,
- 0x59c00007, 0x4a038006, 0xe0000000, 0x1c01f000,
- 0x4c5c0000, 0x4178b800, 0x0501f809, 0x5c00b800,
- 0x1c01f000, 0x4803c856, 0x4c5c0000, 0x905cbd41,
- 0x0501f803, 0x5c00b800, 0x1c01f000, 0x4803c856,
- 0x4dc00000, 0x4c500000, 0x4c580000, 0x4c540000,
- 0x640370e8, 0x805cb9c0, 0x05000009, 0x64138807,
- 0x4a0370f2, 0x80000000, 0x59b800ea, 0x8c000510,
- 0x05000003, 0x59b800e0, 0x05fdf7fc, 0x608380ee,
- 0x0501fcc7, 0x59c00007, 0x4a038006, 0x20000000,
- 0x59c00007, 0x4a038006, 0x8000000a, 0x59c00007,
- 0x4a038006, 0x8000000b, 0x59c00007, 0x4a038006,
- 0x40000001, 0x83c00580, 0x00007700, 0x05000003,
- 0x600380ee, 0x05fdf7ef, 0x608380ee, 0x60000810,
- 0x59c00007, 0x8c00051e, 0x05000006, 0x4a038006,
- 0x90000001, 0x80040840, 0x05fe07fa, 0x05fdfa98,
- 0x83c00580, 0x00007700, 0x05000003, 0x600380ee,
- 0x05fdf7f3, 0x4178a000, 0x805cb9c0, 0x0502000f,
- 0x6080b000, 0x91b8ac20, 0x054dfbb6, 0x640770fb,
- 0x4a037020, 0x00100e26, 0x59a80030, 0x82000500,
- 0x0000ffff, 0x48037021, 0x4a037035, 0x0010ce81,
- 0x4a037038, 0x00100e1d, 0x640770fb, 0x6080b000,
- 0x91b8ac00, 0x054dfba7, 0x6100b000, 0xb1b8ac00,
- 0x054dfba4, 0x805cb9c0, 0x05020006, 0x4a0370e4,
- 0xaaaaaaaa, 0x4a0370e5, 0xaaaaaaaa, 0x0501f005,
- 0x4a0370e4, 0xa2aa2a82, 0x4a0370e5, 0xaaaaa2aa,
- 0x4a0370e6, 0xaaaaaaaa, 0x640370fb, 0x4a0370e6,
- 0xaaaaaaaa, 0x608380ee, 0x4a038006, 0x90000000,
- 0x59c00007, 0x8c00051e, 0x05fe0a65, 0x600380ee,
- 0x4a038006, 0x90000000, 0x59c00007, 0x8c00051e,
- 0x05fe0a5f, 0x5c00a800, 0x5c00b000, 0x5c00a000,
- 0x5c038000, 0x1c01f000, 0x4d300000, 0x4d2c0000,
- 0x4d340000, 0x4d400000, 0x4cfc0000, 0x4d380000,
- 0x4d3c0000, 0x4d440000, 0x4d4c0000, 0x4d480000,
- 0x4c5c0000, 0x4c600000, 0x4c640000, 0x4d040000,
- 0x4cf40000, 0x4cf80000, 0x0001f8bd, 0x5c01f000,
- 0x5c01e800, 0x5c020800, 0x5c00c800, 0x5c00c000,
- 0x5c00b800, 0x5c029000, 0x5c029800, 0x5c028800,
- 0x5c027800, 0x5c027000, 0x5c01f800, 0x5c028000,
- 0x5c026800, 0x5c025800, 0x5c026000, 0x1c01f000,
- 0x493bc857, 0x0001f0ea, 0x83300500, 0x000000ff,
- 0x90000c87, 0x05fe1a32, 0x0c01f022, 0x1c01f000,
- 0x82000d00, 0xc2000038, 0x05fe0a23, 0x05fdfa2c,
- 0x00000000, 0x00000048, 0x00000054, 0x00000053,
- 0x001007df, 0x001007ff, 0x001007f7, 0x00100819,
- 0x001007e8, 0x001007f1, 0x001007fa, 0x00100815,
- 0x00100865, 0x001007df, 0x00100867, 0x001007df,
- 0x001007df, 0x0010086a, 0x0010086e, 0x0010087f,
- 0x00100890, 0x0010081a, 0x00100897, 0x001008a1,
- 0x001007df, 0x001007df, 0x001007df, 0x05fdfa10,
- 0x001007e7, 0x00100921, 0x00100837, 0x00100857,
- 0x001007e7, 0x001007e7, 0x001007e7, 0x05fdfa08,
- 0x4803c856, 0x59300004, 0x8c00053e, 0x05020003,
- 0x61567000, 0x0005f478, 0x052dfd09, 0x05fc07fd,
- 0x1c01f000, 0x4803c856, 0x0501f8b1, 0x40002800,
- 0x41782000, 0x615a7000, 0x0005f478, 0x4803c856,
- 0x615e7000, 0x0005f478, 0x4803c856, 0x0529fa0c,
- 0x42000000, 0x80000000, 0x0001f12d, 0x4803c856,
- 0x59325809, 0x812e59c0, 0x05000012, 0x59300008,
- 0x8c00051a, 0x0502000b, 0x592c0409, 0x8c00051c,
- 0x05020003, 0x4a026013, 0xffffffff, 0x59300004,
- 0x8c00053e, 0x05020005, 0x61227000, 0x0005f478,
- 0x641e5a07, 0x05fdf7f8, 0x052dfce5, 0x05fc07fb,
- 0x1c01f000, 0x4803c856, 0x83300500, 0x00ffffff,
- 0x0529f6b9, 0x1c01f000, 0x4803c856, 0x813261c0,
- 0x05fc09d3, 0x053dfcd6, 0x0500000b, 0x59325809,
- 0x592c0209, 0x84000552, 0x48025a09, 0x0505f8aa,
- 0x59300004, 0x8c00053e, 0x05020004, 0x417a7800,
- 0x053df926, 0x1c01f000, 0x052dfccd, 0x05fc07fc,
- 0x1c01f000, 0x4c040000, 0x59b808ea, 0x90040d07,
- 0x90040583, 0x05000004, 0x42000000, 0x60000000,
- 0x0501f89a, 0x5c000800, 0x1c01f000, 0x0501f8dd,
- 0x05000015, 0x59325809, 0x812e59c0, 0x05000012,
- 0x592c0205, 0x82000500, 0x000000ff, 0x90000da9,
- 0x0502000d, 0x59300203, 0x90000583, 0x05000008,
- 0x59300808, 0x84040d26, 0x48066008, 0x0001f938,
- 0x6503900d, 0x642370e5, 0x1c01f000, 0x052dfcac,
- 0x05fc07f8, 0x42000000, 0x0010b2ce, 0x054df9f6,
- 0x5988014a, 0x80000000, 0x4803114a, 0x6503900d,
- 0x42000000, 0xc0000000, 0x0001f12d, 0x4c5c0000,
- 0x4c600000, 0x4c640000, 0x4200c800, 0x0010ce88,
- 0x6000b860, 0x6014c002, 0x0529fad8, 0x4a0370e4,
- 0x02000000, 0x5c00c800, 0x5c00c000, 0x5c00b800,
- 0x1c01f000, 0x4933c857, 0x0005f45a, 0x4933c857,
- 0x0501fba3, 0x1c01f000, 0x41300800, 0x800409c0,
- 0x05fe0983, 0x05fdf978, 0x42000000, 0x0010b2ce,
- 0x054df9d5, 0x4933c857, 0x813261c0, 0x05fc097c,
- 0x0501f82f, 0x40002800, 0x054df938, 0x0501f894,
- 0x05000006, 0x5932680a, 0x59340200, 0x8c00050e,
- 0x59300416, 0x053e0f6f, 0x1c01f000, 0x42000000,
- 0x0010b2ce, 0x054df9c4, 0x4933c857, 0x813261c0,
- 0x05fc096b, 0x0501f886, 0x05000009, 0x053dfc6c,
- 0x05000007, 0x59325809, 0x592c0209, 0x8400054e,
- 0x48025a09, 0x417a7800, 0x053df8c0, 0x1c01f000,
- 0x485fc857, 0x5c000000, 0x4d780000, 0x4203e000,
- 0x50000000, 0x6014b900, 0x05fdf15d, 0x4933c857,
- 0x913004a0, 0x05fe1956, 0x83300c00, 0x0010b341,
- 0x50040000, 0x80000000, 0x05001002, 0x44000800,
- 0x1c01f000, 0x4933c857, 0x05fdf7f6, 0x4807c856,
- 0x59b800ea, 0x8c000510, 0x05fc07fd, 0x59b800e0,
- 0x4803c857, 0x1c01f000, 0x4803c856, 0x42000000,
- 0x10000000, 0x41300800, 0x0501f020, 0x8c000510,
- 0x00000133, 0x4c040000, 0x0501f808, 0x5c000800,
- 0x90100488, 0x00001133, 0x4c040000, 0x05fdfedf,
- 0x5c000800, 0x0001f133, 0x59b800e2, 0x59b820e2,
- 0x80100580, 0x05fe07fd, 0x80102114, 0x0501f001,
- 0x40101800, 0x800c190a, 0x9010051f, 0x900c1d1f,
- 0x800c2480, 0x9010251f, 0x1c01f000, 0x40680000,
- 0x406c0800, 0x0501f805, 0x60058800, 0x05020002,
- 0x60018800, 0x1c01f000, 0x82000500, 0xf0000000,
- 0x82040d00, 0x0fffffff, 0x80040d40, 0x4807c857,
- 0x42001000, 0x0010b212, 0x50080000, 0x80000540,
- 0x05020004, 0x640f70e5, 0x4a0370e4, 0x00000300,
- 0x80000000, 0x44001000, 0x60001008, 0x59b800ea,
- 0x8c000510, 0x0500000b, 0x05fdffd8, 0x90100488,
- 0x05001007, 0x4c040000, 0x4c080000, 0x05fdfeaf,
- 0x5c001000, 0x5c000800, 0x0501f01c, 0x59b800ea,
- 0x8c000516, 0x05020019, 0x4a0370e4, 0x00300000,
- 0x480770e1, 0x600011fe, 0x80081040, 0x05000010,
- 0x59b808e4, 0x8c040528, 0x05fe07fc, 0x42001000,
- 0x0010b212, 0x50080000, 0x80000040, 0x05020004,
- 0x640b70e5, 0x4a0370e4, 0x00000200, 0x05fc18f0,
- 0x44001000, 0x8c04052c, 0x1c01f000, 0x41f80000,
- 0x50000000, 0x05fdf8ea, 0x80081040, 0x05fe07d8,
- 0x41f80000, 0x50000000, 0x05fdf8e5, 0x4d380000,
- 0x59300c07, 0x90040589, 0x05020004, 0x611e7000,
- 0x0005fc78, 0x80000580, 0x5c027000, 0x1c01f000,
- 0x4c500000, 0x6407900d, 0x59c8a020, 0x640b900d,
- 0x59c80820, 0x8c50052e, 0x05000002, 0x900409c0,
- 0x82040d00, 0x0000ffff, 0x0529f816, 0x5c00a000,
- 0x1c01f000, 0x42000000, 0x0010b2c5, 0x054df922,
- 0x05fdfff0, 0x0500004c, 0x4933c857, 0x59300407,
- 0x90000580, 0x05000048, 0x59c82021, 0x6407900d,
- 0x59c82821, 0x82142d00, 0x0000ffff, 0x59325809,
- 0x812e59c0, 0x05000040, 0x5932680a, 0x051dfb71,
- 0x053e0ea0, 0x599c0019, 0x8c00050c, 0x0502001b,
- 0x051dfb6c, 0x05020019, 0x59300813, 0x4807c857,
- 0x592c0409, 0x8c00051c, 0x05020012, 0x8400055c,
- 0x48025c09, 0x592c0a05, 0x82040d00, 0x000000ff,
- 0xb0040588, 0x05000007, 0x90040598, 0x05000005,
- 0xb00405a8, 0x05000003, 0xb00405aa, 0x05020005,
- 0x59300013, 0x0541fd57, 0x80000d40, 0x48065803,
- 0x4a026013, 0x7fffffff, 0x59300008, 0x8c000516,
- 0x0502001d, 0x48166015, 0x051dfb4e, 0x05000004,
- 0x59300416, 0x8c00051c, 0x05000004, 0x599c0019,
- 0x8c00050c, 0x05000014, 0x0501fce8, 0x05020012,
- 0x0501fa0b, 0x40280000, 0x4802600f, 0x05000005,
- 0x4832600d, 0x50200000, 0x4802600c, 0x4822600e,
- 0x59300416, 0x8c00051c, 0x05020004, 0x599c0019,
- 0x8c00050c, 0x05020871, 0x6503900d, 0x642370e5,
- 0x1c01f000, 0x42000000, 0x0010b2ce, 0x054df8d2,
- 0x5988014c, 0x80000000, 0x4803114c, 0x6503900d,
- 0x42000000, 0xc0000000, 0x0001f12d, 0x4cf80000,
- 0x58f40000, 0x8001f540, 0x0501f81e, 0x41781800,
- 0x0501f903, 0x05020013, 0x44140800, 0x0501f826,
- 0x05000010, 0x40043800, 0x60041800, 0x40142000,
- 0x0501f8fb, 0x0502000b, 0x801c3800, 0x501c0000,
- 0x44000800, 0x0501f80f, 0x801c0580, 0x05000004,
- 0x44103800, 0x801c3840, 0x44143800, 0x0501f816,
- 0x5c01f000, 0x1c01f000, 0x80f9f1c0, 0x05020003,
- 0x58f41202, 0x0501f002, 0x601c1000, 0x1c01f000,
- 0x80f9f1c0, 0x05020005, 0x58f40401, 0x90000482,
- 0x80f40400, 0x0501f004, 0x58f80401, 0x90000482,
- 0x80f80400, 0x50002800, 0x80000000, 0x50002000,
- 0x1c01f000, 0x80f9f1c0, 0x05020006, 0x58f40401,
- 0x90000482, 0x05fc1842, 0x4801ec01, 0x0501f008,
- 0x58f80401, 0x90000482, 0x05fc183d, 0x4801f401,
- 0x90000582, 0x05020002, 0x0501f817, 0x58f40202,
- 0x80000040, 0x4801ea02, 0x05fc0835, 0x90000581,
- 0x1c01f000, 0x82f40580, 0xffffffff, 0x0500000d,
- 0x58f40201, 0x82000580, 0x0000dcb3, 0x05fe082c,
- 0x58f40000, 0x8001f540, 0x05000005, 0x58f80201,
- 0x82000580, 0x0000ddb9, 0x05fe0825, 0x0501f809,
- 0x1c01f000, 0x4d2c0000, 0x40fa5800, 0x05fdfbbd,
- 0x4979e800, 0x4179f000, 0x5c025800, 0x1c01f000,
- 0x80f5e9c0, 0x05000008, 0x80f9f1c0, 0x05fe0ff6,
- 0x4d2c0000, 0x40f65800, 0x05fdfbb2, 0x4179e800,
- 0x5c025800, 0x1c01f000, 0x4cf40000, 0x051dfac5,
- 0x0502002e, 0x59300808, 0x82040500, 0x00003000,
- 0x0502002a, 0x8c040522, 0x0500002a, 0x5930002b,
- 0x8001ed40, 0x05fc0806, 0x82000580, 0xffffffff,
- 0x05000022, 0x58f40201, 0x82000580, 0x0000dcb3,
- 0x05fa0fff, 0x58f40a02, 0x82040500, 0x0000fffe,
- 0x05000003, 0x05fdff86, 0x58f40a02, 0x9004048f,
- 0x0502107a, 0x80040800, 0x4805ea02, 0x90040588,
- 0x0500007d, 0x90040488, 0x05001008, 0x58f40000,
- 0x8001ed40, 0x05f80fee, 0x58f40201, 0x82000580,
- 0x0000ddb9, 0x05fa0fea, 0x58f40401, 0x90000c02,
- 0x4805ec01, 0x80f40400, 0x59300814, 0x44040000,
- 0x80000000, 0x45780000, 0x5c01e800, 0x1c01f000,
- 0x60001020, 0x4203e000, 0xb0800000, 0x4203f800,
- 0x0c000000, 0x40000000, 0x80081040, 0x05f80fd8,
- 0x05ffb7fb, 0x59300808, 0x84040d62, 0x48066008,
- 0x4203f800, 0x08000000, 0x4d2c0000, 0x05fdfb4a,
- 0x0500004e, 0x492e602b, 0x4a025a01, 0x0000dcb3,
- 0x59300009, 0x80001d40, 0x05f80fc9, 0x580c0810,
- 0x48065803, 0x580c0205, 0x82000500, 0x000000ff,
- 0xb00005a8, 0x05000007, 0x90000582, 0x05000005,
- 0x90000598, 0x05000003, 0x90000588, 0x0502002b,
- 0x580c1801, 0x800c19c0, 0x05f80fb9, 0x580c0c06,
- 0x90040d03, 0x90040582, 0x05020003, 0x592c0803,
- 0x0501f022, 0x580c2a07, 0x580c0008, 0x59301813,
- 0x800c0580, 0x05000021, 0x90040580, 0x0500000e,
- 0x40140000, 0x4c080000, 0x400c1000, 0x41780800,
- 0x0529fcb6, 0x800409c0, 0x05fa0fa5, 0x90140c08,
- 0x0529fc96, 0x5c001000, 0x40041800, 0x592c0803,
- 0x0501f015, 0x90140408, 0x4c080000, 0x400c1000,
- 0x41780800, 0x0529fca9, 0x800409c0, 0x05fa0f98,
- 0x40140800, 0x0529fc89, 0x5c001000, 0x40041800,
- 0x592c0803, 0x0501f008, 0x59301813, 0x40040000,
- 0x800c0580, 0x05020004, 0x497a5a02, 0x64125c01,
- 0x0501f007, 0x64065a02, 0x641a5c01, 0x497a5804,
- 0x400c0000, 0x80040480, 0x48025805, 0x412de800,
- 0x5c025800, 0x05fdf789, 0x5c025800, 0x4a02602b,
- 0xffffffff, 0x05fdf79d, 0x4d2c0000, 0x58f65800,
- 0x05fdfb18, 0x40f65800, 0x05fdfb16, 0x5c025800,
- 0x05fdf7f7, 0x4d2c0000, 0x05fdfaef, 0x05fc07fa,
- 0x4a025a01, 0x0000ddb9, 0x640a5c01, 0x492de800,
- 0x412de800, 0x5c025800, 0x05fdf784, 0x05fdff13,
- 0x90f40404, 0x800c0400, 0x40000800, 0x50040000,
- 0x80100580, 0x05000012, 0x90040c02, 0x80081040,
- 0x05fe07fb, 0x80f9f1c0, 0x0500000e, 0x58f41202,
- 0x90081487, 0x90f80402, 0x800c0400, 0x40000800,
- 0x50040000, 0x80100580, 0x05000005, 0x90040c02,
- 0x80081040, 0x05fe07fb, 0x0501f002, 0x1c01f000,
- 0x90000541, 0x05fdf7fe, 0x4cf40000, 0x4cf80000,
- 0x4001e800, 0x812e59c0, 0x05000021, 0x592c0a07,
- 0x800409c0, 0x0502001e, 0x82f40580, 0xffffffff,
- 0x05000019, 0x58f40201, 0x82000580, 0x0000dcb3,
- 0x05fa0f43, 0x58f40000, 0x8001f540, 0x05000005,
- 0x58f80201, 0x82000580, 0x0000ddb9, 0x05fa0f3c,
- 0x41783800, 0x58f44003, 0x0501f833, 0x05020009,
- 0x05fdff1c, 0x497a602b, 0x59300808, 0x84040d22,
- 0x48066008, 0x5c01f000, 0x5c01e800, 0x1c01f000,
- 0x05fdff14, 0x64465a07, 0x05fdf7f7, 0x05fdfefa,
- 0x05fdf7f5, 0x4cf40000, 0x4cf80000, 0x4001e800,
- 0x90040581, 0x0502001c, 0x82f40580, 0xffffffff,
- 0x05000017, 0x58f40201, 0x82000580, 0x0000dcb3,
- 0x05fa0f1f, 0x58f40000, 0x8001f540, 0x05000005,
- 0x58f80201, 0x82000580, 0x0000ddb9, 0x05fa0f18,
- 0x41783800, 0x58f44003, 0x0501f80f, 0x05020007,
- 0x05fdfef8, 0x60040800, 0x497a602b, 0x5c01f000,
- 0x5c01e800, 0x1c01f000, 0x05fdfef2, 0x60440800,
- 0x05fdf7fa, 0x4c040000, 0x05fdfed7, 0x5c000800,
- 0x05fdf7f6, 0x4803c856, 0x401c2000, 0x41781800,
- 0x4c200000, 0x05fdff96, 0x5c004000, 0x05020022,
- 0x40202000, 0x60041800, 0x05fdff91, 0x0502001e,
- 0x05fdfea2, 0x40082800, 0x90f43404, 0x50182000,
- 0x40100000, 0x801c0580, 0x05000004, 0x60041800,
- 0x05fdff87, 0x05020014, 0x90183402, 0x80142840,
- 0x05fe07f7, 0x80f9f1c0, 0x0500000e, 0x58f42a02,
- 0x90142c87, 0x90f83402, 0x50182000, 0x40100000,
- 0x801c0580, 0x05000004, 0x60041800, 0x05fdff78,
- 0x05020005, 0x90183402, 0x80142840, 0x05fe07f7,
- 0x1c01f000, 0x90000541, 0x05fdf7fe, 0x05f9fedc,
- 0x592c020b, 0x8c000502, 0x05fc07fd, 0x497a6014,
- 0x0501fdcc, 0x412c7000, 0x59300008, 0x84000556,
- 0x48026008, 0x9004050f, 0x82000c00, 0x00100e26,
- 0x50044000, 0x80204000, 0x50200000, 0x80187c00,
- 0x583c2800, 0x583c2001, 0x583c1002, 0x58380a08,
- 0x40187000, 0x58183008, 0x59303808, 0x497a6015,
- 0x0001f176, 0x592c040b, 0x8c000500, 0x05f80ec0,
- 0x592c000e, 0x48026014, 0x05fdf7e6, 0x592c0409,
- 0x8c000502, 0x05fc07de, 0x592c040a, 0x80000540,
- 0x05fc07db, 0x90000c82, 0x0500100e, 0x58380001,
- 0x80007540, 0x05f80eb2, 0x58380205, 0x9000050f,
- 0x82000400, 0x00100e26, 0x50004000, 0x40040000,
- 0x800409c0, 0x05000004, 0x90040c85, 0x05fe17f4,
- 0x80204400, 0x50200000, 0x80387c00, 0x583c2800,
- 0x583c2001, 0x583c1002, 0x592c0a08, 0x592c300e,
- 0x59303808, 0x497a6014, 0x497a6015, 0x48166010,
- 0x48126011, 0x480a6012, 0x481a6013, 0x80040840,
- 0x4806600f, 0x0000017d, 0x80204000, 0x50201800,
- 0x800c19c0, 0x0502000a, 0x58380001, 0x80007540,
- 0x05f80e8f, 0x58380205, 0x9000050f, 0x82000400,
- 0x00100e26, 0x50004000, 0x50201800, 0x483a600d,
- 0x480e600c, 0x4822600e, 0x0001f17d, 0x4803c856,
- 0x592c0209, 0x8c00051e, 0x05020016, 0x50200000,
- 0x80306c00, 0x40240000, 0x0c01f001, 0x00100b83,
- 0x00100b83, 0x00100b8b, 0x00100b83, 0x00100b83,
- 0x00100b83, 0x00100b83, 0x00100b83, 0x00100b8b,
- 0x00100b83, 0x00100b8b, 0x00100b83, 0x00100b83,
- 0x00100b8b, 0x00100b83, 0x00100b83, 0x05f9fe6c,
- 0x8400051e, 0x48025a09, 0x50200000, 0x80306c00,
- 0x58343801, 0x481e6011, 0x0501f007, 0x58341802,
- 0x58342800, 0x58343801, 0x480e6012, 0x48166010,
- 0x481e6011, 0x0501f275, 0x4933c857, 0x5931f809,
- 0x59301006, 0x800811c0, 0x05000009, 0x41780800,
- 0x60280000, 0x0529fb65, 0x80080102, 0x05020002,
- 0x84001542, 0x80081040, 0x4809fc07, 0x640a6006,
- 0x592c040a, 0x90000508, 0x05000008, 0x0501f834,
- 0x59300203, 0x90000584, 0x05020003, 0x61227000,
- 0x0005fc78, 0x1c01f000, 0x4cfc0000, 0x58fc0205,
- 0x82000500, 0x000000ff, 0xb0000588, 0x05000003,
- 0x900005a2, 0x05020009, 0x58fc0409, 0x8c000500,
- 0x05000006, 0x58fc080c, 0x8c040516, 0x0500001c,
- 0x58fc0008, 0x0501f00a, 0x58fc0409, 0x8c000512,
- 0x05020019, 0x58fc0c0a, 0x8c040516, 0x05020003,
- 0x5c01f800, 0x1c01f000, 0x58fc000b, 0x4c000000,
- 0x4d2c0000, 0x40fe5800, 0x59300013, 0x0541fadd,
- 0x5c025800, 0x80000d40, 0x5c000000, 0x80040580,
- 0x05020007, 0x59300008, 0x84000500, 0x48026008,
- 0x61227000, 0x5c01f800, 0x0005f478, 0x5c01f800,
- 0x1c01f000, 0x58fdf80a, 0x05fdf7e7, 0x5c000000,
- 0x4c000000, 0x4803c857, 0x4933c857, 0x59b808ea,
- 0x90040d07, 0x90040580, 0x05000021, 0x90040583,
- 0x0500001f, 0x59300407, 0x4c000000, 0x64026407,
- 0x61043000, 0x4a0370e5, 0x00003000, 0x42000000,
- 0x50000000, 0x41300800, 0x4c180000, 0x05fdfce3,
- 0x5c003000, 0x0500000d, 0x60780000, 0x80000040,
- 0x05fe07ff, 0x80183040, 0x05fe07f5, 0x42000000,
- 0x40000000, 0x41300800, 0x05fdfcd8, 0x59880146,
- 0x80000000, 0x48031146, 0x4a0370e5, 0x00002000,
- 0x5c000000, 0x48026407, 0x1c01f000, 0x59300008,
- 0x84000500, 0x48026008, 0x05fdf7fc, 0x59c00007,
- 0x4a038006, 0x30000000, 0x40000000, 0x59c00007,
- 0x8c00050a, 0x05fe07fe, 0x1c01f000, 0x5c000000,
- 0x4c000000, 0x4803c857, 0x4dc00000, 0x640370e8,
- 0x608380ee, 0x05fdfff2, 0x600380ee, 0x05fdfff0,
- 0x051dff1e, 0x05020011, 0x4a038891, 0x0000ffff,
- 0x497b8880, 0x4ce80000, 0x6059d000, 0x0529fa26,
- 0x497b8892, 0x6059d000, 0x0529fa23, 0x5c01d000,
- 0x42000000, 0x0010b319, 0x0549fe23, 0x0501f810,
- 0x5c038000, 0x0521f00c, 0x0501f81f, 0x4c080000,
- 0x4c140000, 0x42000000, 0x0010b31a, 0x0549fe1a,
- 0x0501f807, 0x5c002800, 0x5c001000, 0x48178892,
- 0x480b8880, 0x5c038000, 0x1c01f000, 0x496fc857,
- 0x916c0583, 0x05020008, 0x4c080000, 0x4c0c0000,
- 0x61201100, 0x61fc19ff, 0x0515f993, 0x5c001800,
- 0x5c001000, 0x60f00800, 0x0501ff10, 0x4a038891,
- 0x0000ffff, 0x6503900d, 0x05fdfae3, 0x640770e8,
- 0x1c01f000, 0x5c000000, 0x4c000000, 0x4803c857,
- 0x59c41080, 0x497b8880, 0x4ce80000, 0x6059d000,
- 0x4c080000, 0x0529f9f4, 0x5c001000, 0x5c01d000,
- 0x59c42892, 0x497b8892, 0x051dfee0, 0x05020002,
- 0x1c01f000, 0x61802004, 0x59c418a4, 0x900c1d0f,
- 0x900c0580, 0x0500000c, 0x59c41805, 0x900c1d01,
- 0x0502000b, 0x59c418a4, 0x900c1d0f, 0x900c0487,
- 0x05001003, 0x900c048c, 0x05001003, 0x80102040,
- 0x05fe07f2, 0x497b8891, 0x1c01f000, 0x4c100000,
- 0x60642000, 0x64078805, 0x0505fca1, 0x59c41805,
- 0x900c1d01, 0x05000005, 0x80102040, 0x05fe07fa,
- 0x5c002000, 0x05fdf7f4, 0x5c002000, 0x05fdf7f0,
- 0x4803c856, 0x1c01f000, 0x00100c86, 0x00100c86,
- 0x00100c86, 0x00100c9a, 0x00100c86, 0x00100c86,
- 0x00100c86, 0x00100c86, 0x00100c86, 0x00100c9a,
- 0x00100c86, 0x00100c87, 0x00100c86, 0x00100c86,
- 0x00100c86, 0x00100c86, 0x05f9fd69, 0x900405bb,
- 0x05fa0d67, 0x592c020b, 0x8c000500, 0x0500008d,
- 0x592c1a08, 0x9004050f, 0x82000400, 0x00100e26,
- 0x50001000, 0x50080000, 0x59302015, 0x4802600c,
- 0x492e600d, 0x480a600e, 0x480e600f, 0x48126014,
- 0x5c025800, 0x1c01f000, 0x9004050f, 0x82000400,
- 0x00100e26, 0x50001000, 0x50080000, 0x592c1a08,
- 0x4802600c, 0x492e600d, 0x480a600e, 0x480e600f,
- 0x497a6014, 0x05fdf7f3, 0x8c040500, 0x05020071,
- 0x82040d00, 0x00000080, 0x0500006e, 0x0001f18e,
- 0x0501fc38, 0x843c7d4e, 0x0001f19b, 0x59307804,
- 0x823c7d00, 0x01880080, 0x823c7d40, 0x80000005,
- 0x59300013, 0x82000500, 0xffff0000, 0x05000002,
- 0x843c7d6a, 0x59300015, 0x59301014, 0x80080580,
- 0x0502000b, 0x800811c0, 0x05020004, 0x8c3c050e,
- 0x05000055, 0x0501f004, 0x592c1209, 0x8c08051e,
- 0x05020051, 0x843c7d4a, 0x0501f04f, 0x480bc857,
- 0x59300804, 0x82040500, 0x00008080, 0x82000580,
- 0x00008080, 0x05020016, 0x592c6001, 0x58300406,
- 0x90000503, 0x90000581, 0x05020011, 0x84040d1e,
- 0x48066004, 0x58300207, 0x59302015, 0x801021c0,
- 0x0500000b, 0x40101000, 0x41780800, 0x0529fa23,
- 0x800810c6, 0x59301814, 0x800c0482, 0x80100580,
- 0x05020003, 0x48126014, 0x05fdf7db, 0x42000000,
- 0x0010b2c6, 0x0549fd60, 0x59302015, 0x59300416,
- 0x4803c857, 0x8c000514, 0x0502000f, 0x599c1819,
- 0x8c0c0512, 0x0500000a, 0x592c0810, 0x59300017,
- 0x80040c80, 0x05000005, 0x05001004, 0x80040000,
- 0x80140480, 0x05001008, 0x0531fa3a, 0x900c1d41,
- 0x0501f01f, 0x84000514, 0x48026416, 0x48126017,
- 0x4813c857, 0x4c3c0000, 0x0501f948, 0x5c007800,
- 0x05020017, 0x5930500f, 0x592c0209, 0x4803c857,
- 0x8c00051e, 0x05020004, 0x903c7d60, 0x5930400e,
- 0x0501f004, 0x8400051e, 0x48025a09, 0x0501f8fb,
- 0x50201800, 0x480e600c, 0x4832600d, 0x4822600e,
- 0x482a600f, 0x480fc857, 0x4833c857, 0x4823c857,
- 0x482bc857, 0x80000580, 0x483e6004, 0x1c01f000,
- 0x05f9fcd7, 0x4933c857, 0x4d2c0000, 0x59900005,
- 0x81300580, 0x05fa0cd2, 0x0539ffd5, 0x05f80cd0,
- 0x59325809, 0x4d3c0000, 0x4d400000, 0x59300004,
- 0x4803c857, 0x4c000000, 0x0529fe57, 0x0529fb50,
- 0x5c000000, 0x8c000516, 0x0500000e, 0x592c0010,
- 0x4803c857, 0x48025808, 0x41780800, 0x600a8000,
- 0x051dfbba, 0x4a025c07, 0x0000ffff, 0x492fc857,
- 0x0001fb5b, 0x0541f966, 0x0531f991, 0x0501f015,
- 0x640a6203, 0x592c0209, 0x8c000512, 0x05020004,
- 0x592c0209, 0x8400054e, 0x48025a09, 0x59300407,
- 0x90000586, 0x05020009, 0x811800ca, 0x81c80c00,
- 0x58040939, 0x592c000e, 0x80040480, 0x592c0810,
- 0x80040480, 0x4802580c, 0x417a7800, 0x0539fc03,
- 0x5c028000, 0x5c027800, 0x5c025800, 0x1c01f000,
- 0x4933c857, 0x4d2c0000, 0x59900005, 0x81300580,
- 0x05fa0c9b, 0x0539ff9e, 0x05f80c99, 0x59325809,
- 0x592c0209, 0x84000540, 0x48025a09, 0x05fdf7c6,
- 0x491bc857, 0x4dd00000, 0x4c580000, 0x41780800,
- 0x8007a0ca, 0x83d3a400, 0x00007600, 0x4a03a005,
- 0x80000002, 0x05024004, 0x4c040000, 0x00044ad6,
- 0x5c000800, 0x59d01006, 0x82080500, 0x00006000,
- 0x82000580, 0x00006000, 0x05000007, 0x8c08051e,
- 0x05fc07f5, 0x59d01006, 0x82080500, 0x00006000,
- 0x05fe07f1, 0x91d3a420, 0x80040800, 0x90040485,
- 0x05fc17eb, 0x5c00b000, 0x5c03a000, 0x1c01f000,
- 0x4803c856, 0x4dd00000, 0x41780800, 0x8007a0ca,
- 0x83d3a400, 0x00007600, 0x4a03a005, 0x80000001,
- 0x59d00006, 0x91d3a420, 0x80040800, 0x90040485,
- 0x05fc17fa, 0x5c03a000, 0x1c01f000, 0x59d00006,
- 0x8c00053e, 0x0500002e, 0x58d82803, 0x4817c857,
- 0x801429c0, 0x05000026, 0x58d8000a, 0x58d8080b,
- 0x58d8100c, 0x58d8180d, 0x4800280c, 0x4804280d,
- 0x4808280e, 0x480c280f, 0x59d00000, 0x59d00801,
- 0x59d01002, 0x59d01803, 0x59d02004, 0x48002810,
- 0x48042811, 0x48082812, 0x480c2813, 0x48102814,
- 0x58140004, 0x8c00050e, 0x05000011, 0x59d0000b,
- 0x59d0080c, 0x59d0100d, 0x59d0180e, 0x4800281f,
- 0x48042820, 0x48082821, 0x480c2822, 0x59d0000f,
- 0x59d00810, 0x59d01011, 0x59d01812, 0x48002c23,
- 0x48042824, 0x48082825, 0x480c2826, 0x6401b006,
- 0x4a03a005, 0x30000000, 0x59d00006, 0x1c01f000,
- 0x42000000, 0x0010b361, 0x0549fc87, 0x600008ec,
- 0x580410a2, 0x41780800, 0x9008050f, 0x8c000506,
- 0x05020003, 0x81180580, 0x05000006, 0x80040800,
- 0x80081108, 0x90040587, 0x05fe07f8, 0x05f9fc24,
- 0x4a039040, 0x04000000, 0x59c80040, 0x8c000532,
- 0x05fe07fe, 0x59d0000d, 0x800000e0, 0x59d0100c,
- 0x82081500, 0x0000ffff, 0x80081540, 0x480b9028,
- 0x4d2c0000, 0x59325809, 0x0539ff19, 0x05f80c14,
- 0x59d02004, 0x592c0205, 0x82001500, 0x000000ff,
- 0x9000050f, 0x90000582, 0x05000003, 0xb00805ba,
- 0x05020004, 0x592c000e, 0x80102480, 0x05f81c08,
- 0x5c025800, 0x9010250f, 0x90102588, 0x05fa0c04,
- 0x59c80047, 0x8c000530, 0x05fa0c01, 0x59d0000b,
- 0x48039029, 0x800400d6, 0x40001000, 0x800400dc,
- 0x80081400, 0x82081540, 0x0400002f, 0x480b9047,
- 0x59c80047, 0x8c000532, 0x05fe07fe, 0x64079048,
- 0x59c80048, 0x8c000500, 0x05fe07fe, 0x64079049,
- 0x59c80049, 0x8c000500, 0x05fe07fe, 0x64ff9047,
- 0x497b9040, 0x1c01f000, 0x4803c856, 0x80204000,
- 0x50200000, 0x80000540, 0x05000003, 0x80285040,
- 0x1c01f000, 0x58300001, 0x80000540, 0x0500000c,
- 0x4802600d, 0x40006000, 0x58300205, 0x9000050f,
- 0x82000400, 0x00100e26, 0x50004000, 0x802041c0,
- 0x05f80bd7, 0x80285040, 0x1c01f000, 0x40005000,
- 0x1c01f000, 0x00000006, 0x00000009, 0x0000000c,
- 0x0000000f, 0x00000012, 0x00000000, 0x00000000,
- 0x0000000c, 0x00000000, 0x00000000, 0x00000000,
- 0x00100e21, 0x00100e20, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x00100e21, 0x00100e20,
- 0x00100e1d, 0x00100e21, 0x00100e20, 0x00000000,
+ 0x59900005, 0x81300580, 0x05fa0c00, 0x054dfaee,
+ 0x05f80bfe, 0x59325809, 0x592c020c, 0x84000540,
+ 0x48025a0c, 0x05fdf7ba, 0x491bc857, 0x4dd00000,
+ 0x4c580000, 0x41780800, 0x8007a0ca, 0x83d3a400,
+ 0x00007600, 0x4a03a005, 0x80000002, 0x05024004,
+ 0x4c040000, 0x00044e27, 0x5c000800, 0x59d01006,
+ 0x82080500, 0x00006000, 0x82000580, 0x00006000,
+ 0x05000007, 0x8c08051e, 0x05fc07f5, 0x59d01006,
+ 0x82080500, 0x00006000, 0x05fe07f1, 0x91d3a420,
+ 0x80040800, 0x90040485, 0x05fc17eb, 0x5c00b000,
+ 0x5c03a000, 0x1c01f000, 0x4803c856, 0x4dd00000,
+ 0x41780800, 0x8007a0ca, 0x83d3a400, 0x00007600,
+ 0x4a03a005, 0x80000001, 0x59d00006, 0x91d3a420,
+ 0x80040800, 0x90040485, 0x05fc17fa, 0x5c03a000,
+ 0x1c01f000, 0x59d00006, 0x8c00053e, 0x0500002e,
+ 0x58d82803, 0x4817c857, 0x801429c0, 0x05000026,
+ 0x58d8000a, 0x58d8080b, 0x58d8100c, 0x58d8180d,
+ 0x4800280c, 0x4804280d, 0x4808280e, 0x480c280f,
+ 0x59d00000, 0x59d00801, 0x59d01002, 0x59d01803,
+ 0x59d02004, 0x48002810, 0x48042811, 0x48082812,
+ 0x480c2813, 0x48102814, 0x58140004, 0x8c00050e,
+ 0x05000011, 0x59d0000b, 0x59d0080c, 0x59d0100d,
+ 0x59d0180e, 0x4800281f, 0x48042820, 0x48082821,
+ 0x480c2822, 0x59d0000f, 0x59d00810, 0x59d01011,
+ 0x59d01812, 0x48002c23, 0x48042824, 0x48082825,
+ 0x480c2826, 0x6401b006, 0x4a03a005, 0x30000000,
+ 0x59d00006, 0x1c01f000, 0x42000000, 0x0010e4e1,
+ 0x055dfd98, 0x600008ec, 0x580410a2, 0x41780800,
+ 0x9008050f, 0x8c000506, 0x05020003, 0x81180580,
+ 0x05000006, 0x80040800, 0x80081108, 0x90040587,
+ 0x05fe07f8, 0x05f9fb89, 0x4a039040, 0x04000000,
+ 0x59c80040, 0x8c000532, 0x05fe07fe, 0x59d0000d,
+ 0x800000e0, 0x59d0100c, 0x82081500, 0x0000ffff,
+ 0x80081540, 0x480b9028, 0x4d2c0000, 0x59325809,
+ 0x054dfa69, 0x05f80b79, 0x59d02004, 0x592c0208,
+ 0x82001500, 0x000000ff, 0x9000050f, 0x90000582,
+ 0x05000003, 0xb00805ba, 0x05020004, 0x592c0011,
+ 0x80102480, 0x05f81b6d, 0x5c025800, 0x9010250f,
+ 0x90102588, 0x05fa0b69, 0x59c80047, 0x8c000530,
+ 0x05fa0b66, 0x59d0000b, 0x48039029, 0x800400d6,
+ 0x40001000, 0x800400dc, 0x80081400, 0x82081540,
+ 0x0400002f, 0x480b9047, 0x59c80047, 0x8c000532,
+ 0x05fe07fe, 0x64079048, 0x59c80048, 0x8c000500,
+ 0x05fe07fe, 0x64079049, 0x59c80049, 0x8c000500,
+ 0x05fe07fe, 0x64ff9047, 0x497b9040, 0x1c01f000,
+ 0x4803c856, 0x80204000, 0x50200000, 0x80000540,
+ 0x05000003, 0x80285040, 0x1c01f000, 0x58300001,
+ 0x80000540, 0x0500000c, 0x4802600d, 0x40006000,
+ 0x58300208, 0x9000050f, 0x82000400, 0x001012ac,
+ 0x50004000, 0x802041c0, 0x05f80b3c, 0x80285040,
+ 0x1c01f000, 0x40005000, 0x1c01f000, 0x00000009,
+ 0x0000000c, 0x0000000f, 0x00000012, 0x00000015,
+ 0x00000000, 0x00000000, 0x0000000f, 0x00000000,
+ 0x00000000, 0x00000000, 0x001012a7, 0x001012a6,
+ 0x00000000, 0x001012a7, 0x00000000, 0x00000000,
+ 0x001012a7, 0x001012a6, 0x001012a3, 0x001012a7,
+ 0x001012a6, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x001012a7, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x00100e21, 0x00000000, 0x00000000, 0x00000000,
- 0x00000000, 0x00000000, 0x00100e21, 0x00100e21,
- 0x00100e21, 0x00000000, 0x00100e21, 0x00000000,
- 0x00000000, 0x00000000, 0x4813c857, 0x492fc857,
- 0x4933c857, 0x48126014, 0x592c5208, 0x802851c0,
- 0x05000076, 0x59300008, 0x8c000516, 0x0500001e,
- 0x592c0205, 0x82001500, 0x000000ff, 0x9000050f,
- 0x90000582, 0x05000003, 0xb00805ba, 0x05020003,
- 0x592c000e, 0x80102480, 0x801021c0, 0x41781000,
- 0x0500000e, 0x592c6001, 0x58300406, 0x58300a07,
- 0x90000503, 0x90000580, 0x05000002, 0x90040c08,
- 0x40040000, 0x40101000, 0x41780800, 0x0529f897,
- 0x800409c0, 0x05020059, 0x0501faa8, 0x0500004f,
- 0x0501f056, 0x59300004, 0x8c00050e, 0x0500000d,
- 0x0501fb35, 0x05020051, 0x592c6001, 0x42004000,
- 0x00100e1e, 0x58300406, 0x8c000510, 0x0500000f,
- 0x5830540a, 0x42004000, 0x00100e1f, 0x0501f00b,
- 0x412c6000, 0x0501f847, 0x05000008, 0x90240582,
- 0x05020003, 0x5830000e, 0x80102480, 0x50200000,
- 0x80004540, 0x0500003d, 0x50200000, 0x80000540,
- 0x0500000b, 0x80301400, 0x58080002, 0x80102480,
- 0x0500101d, 0x801021c0, 0x05000009, 0x80285040,
- 0x05000032, 0x80204000, 0x05fdf7f4, 0x58300001,
- 0x80006540, 0x0500002d, 0x05fdf7e7, 0x80285040,
- 0x0500002a, 0x80204000, 0x50200000, 0x80000540,
- 0x05020009, 0x58300001, 0x80006540, 0x05000023,
- 0x58300205, 0x90004d0f, 0x82244400, 0x00100e26,
- 0x50204000, 0x592c0209, 0x8400051e, 0x48025a09,
- 0x0501f012, 0x80102080, 0x80102000, 0x48126012,
- 0x4813c857, 0x58080802, 0x40100000, 0x80042480,
- 0x05f81b3f, 0x58080000, 0x58081801, 0x80102400,
- 0x48126010, 0x480e6011, 0x4813c857, 0x592c0209,
- 0x8400055e, 0x48025a09, 0x4833c857, 0x4823c857,
- 0x482bc857, 0x4832600d, 0x4822600e, 0x482a600f,
- 0x80000580, 0x0501f002, 0x90000541, 0x1c01f000,
- 0x58300205, 0x90004d0f, 0x82244400, 0x00100e26,
- 0x82000500, 0x000000ff, 0x900005a9, 0x05020016,
- 0x50204000, 0x592c040a, 0x80000540, 0x05f80b20,
- 0x90000c82, 0x0500100e, 0x58300001, 0x80006540,
- 0x05f80b1b, 0x58300205, 0x9000050f, 0x82000400,
- 0x00100e26, 0x50004000, 0x40040000, 0x800409c0,
- 0x05000005, 0x90040c85, 0x05fe17f4, 0x80204400,
- 0x80000580, 0x1c01f000, 0x4c5c0000, 0x59e4b800,
- 0x485fc857, 0x905c051f, 0x05fa0b09, 0x825c0500,
- 0x000000e0, 0x05f80b06, 0x8c5c050e, 0x05020807,
- 0x8c5c050c, 0x05020809, 0x8c5c050a, 0x05020900,
- 0x5c00b800, 0x1c01f000, 0x4803c856, 0x4a03c800,
- 0x00000080, 0x1c01f000, 0x4d2c0000, 0x42007800,
- 0x0010b364, 0x583c0003, 0x583c0804, 0x80040540,
- 0x05000037, 0x42000800, 0x0010b20f, 0x50065800,
- 0x592c0002, 0x90000580, 0x05000031, 0x59e40050,
- 0x59e40852, 0x80040480, 0x82000500, 0xfffffc00,
- 0x05020005, 0x59e40050, 0x59e40851, 0x80040800,
- 0x80040480, 0x82000c80, 0x00000400, 0x59e40050,
- 0x80041400, 0x480bc857, 0x50080000, 0x58080801,
- 0x80040540, 0x0500001e, 0x480bc857, 0x480a5803,
- 0x583c1009, 0x583c000a, 0x80080580, 0x05020005,
- 0x583c0000, 0x84000550, 0x48007800, 0x41781000,
- 0x82080400, 0x00001000, 0x4803c857, 0x48007809,
- 0x583c0003, 0x80081400, 0x480bc857, 0x583c0804,
- 0x64025801, 0x4a025808, 0x00100f36, 0x480a5806,
- 0x48065807, 0x59e40053, 0x800000c4, 0x48025805,
- 0x412c1000, 0x492fc857, 0x0001f81c, 0x5c025800,
- 0x6503c800, 0x1c01f000, 0x42007800, 0x0010b20f,
- 0x503c7800, 0x4a007802, 0x00000100, 0x42007800,
- 0x0010b364, 0x583c0000, 0x84000552, 0x48007800,
- 0x583c100c, 0x480bc857, 0x80081000, 0x4808780c,
- 0x583c180b, 0x800c19c0, 0x05000013, 0x90080503,
- 0x05020011, 0x583c0007, 0x4803c857, 0x583c2008,
- 0x4813c857, 0x80102000, 0x80100580, 0x05020002,
- 0x41782000, 0x48107808, 0x400c0000, 0x80080580,
- 0x05020005, 0x4978780c, 0x60041800, 0x60a01100,
- 0x0511fe75, 0x1c01f000, 0x42007800, 0x0010b364,
- 0x4d2c0000, 0x4c5c0000, 0x4c600000, 0x4030b800,
- 0x583cc000, 0x4a00b802, 0x00000100, 0x583c2015,
- 0x80100800, 0x583c0013, 0x80040580, 0x05020003,
- 0x8460c554, 0x41780800, 0x48047815, 0x8c600502,
- 0x05f80a83, 0x8460c502, 0x48607800, 0x42000000,
- 0x0010b210, 0x50000000, 0x80300580, 0x05fa0a7c,
- 0x583c081e, 0x800409c0, 0x05000008, 0x583c001f,
- 0x80040580, 0x05020005, 0x4978781f, 0x60081800,
- 0x60a01100, 0x0511fe50, 0x8c600508, 0x050a0ec7,
- 0x5c00c000, 0x5c00b800, 0x5c025800, 0x1c01f000,
- 0x4d2c0000, 0x4c5c0000, 0x4c600000, 0x4c640000,
- 0x42000800, 0x0010b210, 0x50065800, 0x4a025808,
- 0x00100f5a, 0x6000c002, 0x4200b800, 0x0010b364,
- 0x585cc800, 0x4867c857, 0x8d0c052a, 0x0502000f,
- 0x40ee5800, 0x492fc857, 0x4a025802, 0x00000100,
- 0x585c0014, 0x80000000, 0x90000503, 0x4800b814,
- 0x4a025808, 0x00102646, 0x585cc017, 0x8260c500,
- 0x000000ff, 0x05f80a4e, 0x4c580000, 0x61e8b001,
- 0x8058b040, 0x05f80a4a, 0x8c640502, 0x0500000b,
- 0x8d0c052a, 0x05fa0a46, 0x4c580000, 0x4c600000,
- 0x0001f9ab, 0x585cc800, 0x5c00c000, 0x5c00b000,
- 0x485bc857, 0x05fdf7f3, 0x5c00b000, 0x4200b800,
- 0x0010b364, 0x8464cd42, 0x4864b800, 0x592c0002,
- 0x90000580, 0x05f80a36, 0x585c100d, 0x585c0018,
- 0x80081400, 0x80600400, 0x4800b818, 0x585c0014,
- 0x800001c0, 0x05020002, 0x4978b818, 0x8060c0c4,
- 0x492fc857, 0x480bc857, 0x4863c857, 0x480a5803,
- 0x585c001d, 0x4803c857, 0x585c180e, 0x800c1400,
- 0x480a5806, 0x4808b81b, 0x80600400, 0x4800b81d,
- 0x4803c857, 0x800c0400, 0x4800b819, 0x585c0810,
- 0x4807c857, 0x4803c857, 0x80040d80, 0x05020004,
- 0x4978b81d, 0x585c080e, 0x4804b819, 0x585c080e,
- 0x80040580, 0x82000500, 0x000003ff, 0x05020004,
- 0x585c001f, 0x80000000, 0x4800b81f, 0x585c080f,
- 0x48065807, 0x4807c857, 0x64025801, 0x48625805,
- 0x412c1000, 0x0001f81c, 0x5c00c800, 0x5c00c000,
- 0x5c00b800, 0x5c025800, 0x1c01f000, 0x6483c800,
- 0x0549fa4d, 0x59e40000, 0x1c01f000, 0x60001020,
- 0x80081040, 0x05000022, 0x0549fb77, 0x05fc07fd,
- 0x59800801, 0x82040d00, 0xfff006ff, 0x82040d40,
- 0x000ff900, 0x48070001, 0x59e00002, 0x8c00051e,
- 0x05020016, 0x605c00f4, 0x50001000, 0x82081500,
- 0x03f00000, 0x82080580, 0x00800000, 0x0500000f,
- 0x61901000, 0x80081040, 0x0500000c, 0x59800881,
- 0x8c040514, 0x05fc07fc, 0x82040500, 0x00000180,
- 0x82000580, 0x00000180, 0x05020004, 0x59800080,
- 0x84000540, 0x48030080, 0x90000541, 0x64030000,
- 0x1c01f000, 0x0549fb54, 0x59800802, 0x4807c857,
- 0x8c040520, 0x05000007, 0x64030000, 0x60101020,
- 0x50080000, 0x8400054c, 0x44001000, 0x0501f000,
- 0x82040500, 0x00001084, 0x05fa09c9, 0x8c040510,
- 0x05000006, 0x42000000, 0x0010b362, 0x0549fa1a,
- 0x4a030002, 0x00000100, 0x8c040522, 0x0500002d,
- 0x59e00002, 0x8c00051e, 0x0502002a, 0x601c20f6,
- 0x50102800, 0x4817c857, 0x605c00f4, 0x50003000,
- 0x82180500, 0x000f0000, 0x40003800, 0x40144000,
- 0x821c0580, 0x00020000, 0x05020002, 0x902041c0,
- 0x8c18050c, 0x05000002, 0x842041c0, 0x82204500,
- 0x000000ff, 0x90204401, 0x8c200510, 0x05000005,
- 0x42000000, 0x0010b363, 0x0549f9fb, 0x61fc4001,
- 0x42001800, 0xffffff00, 0x8c18050c, 0x05000003,
- 0x840c19c0, 0x842041c0, 0x821c0580, 0x00020000,
- 0x05020003, 0x900c19c0, 0x902041c0, 0x800c0505,
- 0x80200540, 0x44002000, 0x4a030002, 0x00020000,
- 0x64030000, 0x1c01f000, 0x4d2c0000, 0x64007000,
- 0x82040d00, 0x43200f80, 0x05fa098d, 0x58380008,
- 0x4803c00f, 0x4a0370e4, 0x00003000, 0x053df91b,
- 0x583a5807, 0x592c0000, 0x48007007, 0x800001c0,
- 0x05020002, 0x49787006, 0x05f9fd1e, 0x5c025800,
- 0x42007000, 0x00020d9f, 0x0001f031, 0x4803c856,
- 0x4c3c0000, 0x4d2c0000, 0x4d300000, 0x58300009,
- 0x80025d40, 0x05f80976, 0x592e6009, 0x4c300000,
- 0x053df920, 0x5c006000, 0x05f80971, 0x58300002,
- 0x82000580, 0x00000100, 0x0502000d, 0x5930780d,
- 0x583c0001, 0x80007d40, 0x0500000b, 0x4802600d,
- 0x90000402, 0x48006003, 0x583c0000, 0x48006005,
- 0x40301000, 0x0001f81c, 0x0501f008, 0x640a5a07,
- 0x492fc857, 0x4c300000, 0x0001fb5b, 0x5c025800,
- 0x05f9fcf8, 0x0005fc5a, 0x5c026000, 0x5c025800,
- 0x5c007800, 0x1c01f000, 0x4803c856, 0x4d2c0000,
- 0x4d300000, 0x42007000, 0x00020d9f, 0x58380800,
- 0x90040582, 0x05020010, 0x58386001, 0x58300009,
- 0x812c0580, 0x0502000c, 0x59e00004, 0x8c00050e,
- 0x05fc07fe, 0x59dc0006, 0x4803c857, 0x4a03b805,
- 0x20000000, 0x8c00053e, 0x05fc07f8, 0x64007000,
- 0x0501f018, 0x58386005, 0x40305000, 0x803061c0,
- 0x05f8093b, 0x58300009, 0x812c0580, 0x05000004,
- 0x40305000, 0x58306000, 0x05fdf7f9, 0x40280000,
- 0x80300580, 0x58300000, 0x05000006, 0x48005000,
- 0x800001c0, 0x05020007, 0x48287004, 0x0501f005,
- 0x800001c0, 0x05020002, 0x48007004, 0x48007005,
- 0x40325800, 0x05f9fcc3, 0x5c026000, 0x5c025800,
- 0x0001f02b, 0x59300025, 0x48025811, 0x59300026,
- 0x48025812, 0x59300a23, 0x8c04050c, 0x05020007,
+ 0x001012a7, 0x001012a7, 0x001012a7, 0x00000000,
+ 0x001012a7, 0x00000000, 0x00000000, 0x00000000,
+ 0x4813c857, 0x492fc857, 0x4933c857, 0x48126014,
+ 0x592c520b, 0x802851c0, 0x05000076, 0x59300008,
+ 0x8c000516, 0x0500001e, 0x592c0208, 0x82001500,
+ 0x000000ff, 0x9000050f, 0x90000582, 0x05000003,
+ 0xb00805ba, 0x05020003, 0x592c0011, 0x80102480,
+ 0x801021c0, 0x41781000, 0x0500000e, 0x592c6001,
+ 0x58300409, 0x58300a0a, 0x90000503, 0x90000580,
+ 0x05000002, 0x90040c08, 0x40040000, 0x40101000,
+ 0x41780800, 0x0535fca1, 0x800409c0, 0x05020059,
+ 0x0501fa86, 0x0500004f, 0x0501f056, 0x59300004,
+ 0x8c00050e, 0x0500000d, 0x0501fb13, 0x05020051,
+ 0x592c6001, 0x42004000, 0x001012a4, 0x58300409,
+ 0x8c000510, 0x0500000f, 0x5830540d, 0x42004000,
+ 0x001012a5, 0x0501f00b, 0x412c6000, 0x0501f847,
+ 0x05000008, 0x90240582, 0x05020003, 0x58300011,
+ 0x80102480, 0x50200000, 0x80004540, 0x0500003d,
+ 0x50200000, 0x80000540, 0x0500000b, 0x80301400,
+ 0x58080002, 0x80102480, 0x0500101d, 0x801021c0,
+ 0x05000009, 0x80285040, 0x05000032, 0x80204000,
+ 0x05fdf7f4, 0x58300001, 0x80006540, 0x0500002d,
+ 0x05fdf7e7, 0x80285040, 0x0500002a, 0x80204000,
+ 0x50200000, 0x80000540, 0x05020009, 0x58300001,
+ 0x80006540, 0x05000023, 0x58300208, 0x90004d0f,
+ 0x82244400, 0x001012ac, 0x50204000, 0x592c020c,
+ 0x8400051e, 0x48025a0c, 0x0501f012, 0x80102080,
+ 0x80102000, 0x48126012, 0x4813c857, 0x58080802,
+ 0x40100000, 0x80042480, 0x05f81aa4, 0x58080000,
+ 0x58081801, 0x80102400, 0x48126010, 0x480e6011,
+ 0x4813c857, 0x592c020c, 0x8400055e, 0x48025a0c,
+ 0x4833c857, 0x4823c857, 0x482bc857, 0x4832600d,
+ 0x4822600e, 0x482a600f, 0x80000580, 0x0501f002,
+ 0x90000541, 0x1c01f000, 0x58300208, 0x90004d0f,
+ 0x82244400, 0x001012ac, 0x82000500, 0x000000ff,
+ 0x900005a9, 0x05020016, 0x50204000, 0x592c040d,
+ 0x80000540, 0x05f80a85, 0x90000c82, 0x0500100e,
+ 0x58300001, 0x80006540, 0x05f80a80, 0x58300208,
+ 0x9000050f, 0x82000400, 0x001012ac, 0x50004000,
+ 0x40040000, 0x800409c0, 0x05000005, 0x90040c85,
+ 0x05fe17f4, 0x80204400, 0x80000580, 0x1c01f000,
+ 0x4c5c0000, 0x59e4b800, 0x485fc857, 0x905c051f,
+ 0x05fa0a6e, 0x825c0500, 0x000000e0, 0x05f80a6b,
+ 0x8c5c050e, 0x05020807, 0x8c5c050c, 0x05020809,
+ 0x8c5c050a, 0x05020900, 0x5c00b800, 0x1c01f000,
+ 0x4803c856, 0x4a03c800, 0x00000080, 0x1c01f000,
+ 0x4d2c0000, 0x42007800, 0x0010e4e5, 0x583c0003,
+ 0x583c0804, 0x80040540, 0x05000037, 0x42000800,
+ 0x0010e388, 0x50065800, 0x592c0002, 0x90000580,
+ 0x05000031, 0x59e40050, 0x59e40852, 0x80040480,
+ 0x82000500, 0xfffffc00, 0x05020005, 0x59e40050,
+ 0x59e40851, 0x80040800, 0x80040480, 0x82000c80,
+ 0x00000400, 0x59e40050, 0x80041400, 0x480bc857,
+ 0x50080000, 0x58080801, 0x80040540, 0x0500001e,
+ 0x480bc857, 0x480a5803, 0x583c1009, 0x583c000a,
+ 0x80080580, 0x05020005, 0x583c0000, 0x84000550,
+ 0x48007800, 0x41781000, 0x82080400, 0x00001000,
+ 0x4803c857, 0x48007809, 0x583c0003, 0x80081400,
+ 0x480bc857, 0x583c0804, 0x64025801, 0x4a025809,
+ 0x001013bc, 0x480a5807, 0x48065808, 0x59e40053,
+ 0x800000c4, 0x48025805, 0x412c1000, 0x492fc857,
+ 0x0001f821, 0x5c025800, 0x6503c800, 0x1c01f000,
+ 0x42007800, 0x0010e388, 0x503c7800, 0x4a007802,
+ 0x00000100, 0x42007800, 0x0010e4e5, 0x583c0000,
+ 0x84000552, 0x48007800, 0x583c100c, 0x480bc857,
+ 0x80081000, 0x4808780c, 0x583c180b, 0x800c19c0,
+ 0x05000013, 0x90080503, 0x05020011, 0x583c0007,
+ 0x4803c857, 0x583c2008, 0x4813c857, 0x80102000,
+ 0x80100580, 0x05020002, 0x41782000, 0x48107808,
+ 0x400c0000, 0x80080580, 0x05020005, 0x4978780c,
+ 0x60041800, 0x60a01100, 0x0519fbfe, 0x1c01f000,
+ 0x42007800, 0x0010e4e5, 0x4d2c0000, 0x4c5c0000,
+ 0x4c600000, 0x4030b800, 0x583cc000, 0x4a00b802,
+ 0x00000100, 0x583c2015, 0x80100800, 0x583c0013,
+ 0x80040580, 0x05020003, 0x8460c554, 0x41780800,
+ 0x48047815, 0x8c600502, 0x05f809e8, 0x8460c502,
+ 0x48607800, 0x42000000, 0x0010e389, 0x50000000,
+ 0x80300580, 0x05fa09e1, 0x583c081e, 0x800409c0,
+ 0x05000008, 0x583c001f, 0x80040580, 0x05020005,
+ 0x4978781f, 0x60081800, 0x60a01100, 0x0519fbd9,
+ 0x8c600508, 0x050e0c69, 0x5c00c000, 0x5c00b800,
+ 0x5c025800, 0x1c01f000, 0x4d2c0000, 0x4c5c0000,
+ 0x4c600000, 0x4c640000, 0x42000800, 0x0010e389,
+ 0x50065800, 0x4a025809, 0x001013e0, 0x6000c002,
+ 0x4200b800, 0x0010e4e5, 0x585cc800, 0x4867c857,
+ 0x8d0c052a, 0x0502000f, 0x40ee5800, 0x492fc857,
+ 0x4a025802, 0x00000100, 0x585c0014, 0x80000000,
+ 0x90000503, 0x4800b814, 0x4a025809, 0x0010306e,
+ 0x585cc017, 0x8260c500, 0x000000ff, 0x05f809b3,
+ 0x4c580000, 0x61e8b001, 0x8058b040, 0x05f809af,
+ 0x8c640502, 0x0500000b, 0x8d0c052a, 0x05fa09ab,
+ 0x4c580000, 0x4c600000, 0x0001f9b8, 0x585cc800,
+ 0x5c00c000, 0x5c00b000, 0x485bc857, 0x05fdf7f3,
+ 0x5c00b000, 0x4200b800, 0x0010e4e5, 0x8464cd42,
+ 0x4864b800, 0x592c0002, 0x90000580, 0x05f8099b,
+ 0x585c100d, 0x585c0018, 0x80081400, 0x80600400,
+ 0x4800b818, 0x585c0014, 0x800001c0, 0x05020002,
+ 0x4978b818, 0x8060c0c4, 0x492fc857, 0x480bc857,
+ 0x4863c857, 0x480a5803, 0x585c001d, 0x4803c857,
+ 0x585c180e, 0x800c1400, 0x480a5807, 0x4808b81b,
+ 0x80600400, 0x4800b81d, 0x4803c857, 0x800c0400,
+ 0x4800b819, 0x585c0810, 0x4807c857, 0x4803c857,
+ 0x80040d80, 0x05020004, 0x4978b81d, 0x585c080e,
+ 0x4804b819, 0x585c080e, 0x80040580, 0x82000500,
+ 0x000003ff, 0x05020004, 0x585c001f, 0x80000000,
+ 0x4800b81f, 0x585c080f, 0x48065808, 0x4807c857,
+ 0x64025801, 0x48625805, 0x412c1000, 0x0001f821,
+ 0x5c00c800, 0x5c00c000, 0x5c00b800, 0x5c025800,
+ 0x1c01f000, 0x6483c800, 0x055dfb5f, 0x59e40000,
+ 0x1c01f000, 0x60001020, 0x80081040, 0x05000022,
+ 0x055dfc83, 0x05fc07fd, 0x59800801, 0x82040d00,
+ 0xfff006ff, 0x82040d40, 0x000ff900, 0x48070001,
+ 0x59e00002, 0x8c00051e, 0x05020016, 0x605c00f4,
+ 0x50001000, 0x82081500, 0x03f00000, 0x82080580,
+ 0x00800000, 0x0500000f, 0x61901000, 0x80081040,
+ 0x0500000c, 0x59800881, 0x8c040514, 0x05fc07fc,
+ 0x82040500, 0x00000180, 0x82000580, 0x00000180,
+ 0x05020004, 0x59800080, 0x84000540, 0x48030080,
+ 0x90000541, 0x64030000, 0x1c01f000, 0x61880809,
+ 0x055dfc68, 0x05020003, 0x4803c856, 0x055dfc6c,
+ 0x59800802, 0x4807c857, 0x8c040520, 0x05000007,
+ 0x64030000, 0x60101020, 0x50080000, 0x8400054c,
+ 0x44001000, 0x0501f000, 0x82040500, 0x00001084,
+ 0x05fa092a, 0x8c040510, 0x05000006, 0x42000000,
+ 0x0010e4e2, 0x055dfb27, 0x4a030002, 0x00000100,
+ 0x8c040522, 0x0500002d, 0x59e00002, 0x8c00051e,
+ 0x0502002a, 0x601c20f6, 0x50102800, 0x4817c857,
+ 0x605c00f4, 0x50003000, 0x82180500, 0x000f0000,
+ 0x40003800, 0x40144000, 0x821c0580, 0x00020000,
+ 0x05020002, 0x902041c0, 0x8c18050c, 0x05000002,
+ 0x842041c0, 0x82204500, 0x000000ff, 0x90204401,
+ 0x8c200510, 0x05000005, 0x42000000, 0x0010e4e3,
+ 0x055dfb08, 0x61fc4001, 0x42001800, 0xffffff00,
+ 0x8c18050c, 0x05000003, 0x840c19c0, 0x842041c0,
+ 0x821c0580, 0x00020000, 0x05020003, 0x900c19c0,
+ 0x902041c0, 0x800c0505, 0x80200540, 0x44002000,
+ 0x4a030002, 0x00020000, 0x64030000, 0x1c01f000,
+ 0x4d2c0000, 0x64007000, 0x82040d00, 0x43200f80,
+ 0x05fa08ee, 0x58380008, 0x4803c00f, 0x583a5807,
+ 0x592c0801, 0x800409c0, 0x0500000e, 0x592c0000,
+ 0x48000800, 0x58380006, 0x812c0580, 0x05020002,
+ 0x48047006, 0x48047007, 0x60042000, 0x0559fe40,
+ 0x05f808de, 0x05f9fc95, 0x5c025800, 0x05f9f54d,
+ 0x4a0370e4, 0x00003000, 0x054dfc4b, 0x583a5807,
+ 0x592c0000, 0x48007007, 0x800001c0, 0x05020002,
+ 0x49787006, 0x05f9fc89, 0x5c025800, 0x42007000,
+ 0x000211a7, 0x0001f036, 0x4803c856, 0x4c3c0000,
+ 0x4d2c0000, 0x4d300000, 0x5830000a, 0x80025d40,
+ 0x0500001a, 0x592e600c, 0x4c300000, 0x054dfc4b,
+ 0x5c006000, 0x05f808c1, 0x58300002, 0x82000580,
+ 0x00000100, 0x05000003, 0x640a5a0a, 0x492fc857,
+ 0x4c300000, 0x0001fb82, 0x5c025800, 0x05f9fc6f,
+ 0x0005ffdc, 0x59c80000, 0x82000540, 0x00001200,
+ 0x48039000, 0x850e1d1c, 0x5c026000, 0x5c025800,
+ 0x5c007800, 0x1c01f000, 0x40325800, 0x05f9fc63,
+ 0x05fdf7fa, 0x59300025, 0x48025814, 0x59300026,
+ 0x48025815, 0x59300a23, 0x8c04050c, 0x05020007,
0x59300020, 0x59300a21, 0x800408e0, 0x80040540,
0x5930081f, 0x0501f006, 0x59300820, 0x59300221,
0x800408e0, 0x80040d40, 0x5930001f, 0x9c0001c0,
- 0x9c0409c0, 0x48025813, 0x48065814, 0x1c01f000,
- 0x592c0001, 0x80003540, 0x05f80909, 0x58180a05,
- 0x82040d00, 0x000000ff, 0xb004058a, 0x05fa0904,
- 0x592c1012, 0x592c1a13, 0x58182206, 0x592c2c13,
- 0x592c0014, 0x800000e0, 0x80142d40, 0x592c0014,
- 0x80003920, 0x58184406, 0x58180207, 0x8c20050e,
- 0x05fa08f7, 0x800048e0, 0x80244d40, 0x58180008,
+ 0x9c0409c0, 0x48025816, 0x48065817, 0x1c01f000,
+ 0x592c0001, 0x80003540, 0x05f80890, 0x58180a08,
+ 0x82040d00, 0x000000ff, 0xb004058a, 0x05fa088b,
+ 0x592c1015, 0x592c1a16, 0x58182209, 0x592c2c16,
+ 0x592c0017, 0x800000e0, 0x80142d40, 0x592c0017,
+ 0x80003920, 0x58184409, 0x5818020a, 0x8c20050e,
+ 0x05fa087e, 0x800048e0, 0x80244d40, 0x5818000b,
0x4802602c, 0x8c20050c, 0x05020009, 0x901c51c0,
0x841401c0, 0x82003d00, 0x0000ffff, 0x80140120,
0x80280540, 0x9c0029c0, 0x0501f003, 0x9c1429c0,
0x841c39c0, 0x480a601f, 0x480e6020, 0x48126421,
0x48126221, 0x48166022, 0x481e6423, 0x48226223,
0x48266024, 0x1c01f000, 0x4c5c0000, 0x592c0001,
- 0x80006540, 0x05f808da, 0x58300a05, 0x82040d00,
- 0x000000ff, 0xb004058a, 0x05fa08d5, 0x58302c06,
- 0x8c140506, 0x58300206, 0x05000002, 0x80080400,
- 0x48026421, 0x48026221, 0x58300207, 0x800008e0,
+ 0x80006540, 0x05f80861, 0x58300a08, 0x82040d00,
+ 0x000000ff, 0xb004058a, 0x05fa085c, 0x58302c09,
+ 0x8c140506, 0x58300209, 0x05000002, 0x80080400,
+ 0x48026421, 0x48026221, 0x5830020a, 0x800008e0,
0x80040540, 0x48026024, 0x8c14050a, 0x05020004,
- 0x592c0012, 0x80080400, 0x4802601f, 0x58303207,
+ 0x592c0015, 0x80080400, 0x4802601f, 0x5830320a,
0x8c140510, 0x0502000c, 0x90142d03, 0x90140582,
0x0500000e, 0x90140581, 0x05000007, 0x40080800,
- 0x90180408, 0x40001000, 0x0525fdac, 0x40042000,
+ 0x90180408, 0x40001000, 0x0535f9d8, 0x40042000,
0x0501f006, 0x40080800, 0x40181000, 0x4004b800,
- 0x0525fda6, 0x40042000, 0x4c100000, 0x05fdfd85,
- 0x05f808af, 0x5c002000, 0x50200000, 0x80004540,
- 0x0500005e, 0x58300a05, 0x82040d00, 0x000000ff,
- 0xb004058a, 0x05020006, 0x80204000, 0x58300406,
+ 0x0535f9d2, 0x40042000, 0x4c100000, 0x05fdfda7,
+ 0x05f80836, 0x5c002000, 0x50200000, 0x80004540,
+ 0x0500005e, 0x58300a08, 0x82040d00, 0x000000ff,
+ 0xb004058a, 0x05020006, 0x80204000, 0x58300409,
0x8c000510, 0x05000002, 0x80204000, 0x50200000,
0x80000540, 0x0500000b, 0x80301400, 0x58080002,
0x80102480, 0x0500101d, 0x801021c0, 0x05000009,
@@ -13942,319 +1429,341 @@ static const uint32_t isp_2500_multi_risc_code[] = {
0x58300001, 0x80006540, 0x05000044, 0x05fdf7df,
0x80285040, 0x05000041, 0x80204000, 0x50200000,
0x80000540, 0x05020009, 0x58300001, 0x80006540,
- 0x0500003a, 0x58300205, 0x90004d0f, 0x82244400,
- 0x00100e26, 0x50204000, 0x592c0209, 0x8400051e,
- 0x48025a09, 0x0501f010, 0x80102080, 0x80102000,
+ 0x0500003a, 0x58300208, 0x90004d0f, 0x82244400,
+ 0x001012ac, 0x50204000, 0x592c020c, 0x8400051e,
+ 0x48025a0c, 0x0501f010, 0x80102080, 0x80102000,
0x48126012, 0x4813c857, 0x58080802, 0x40100000,
- 0x80042480, 0x05f81876, 0x58080000, 0x80102400,
- 0x48126010, 0x4813c857, 0x592c0209, 0x8400055e,
- 0x48025a09, 0x59300008, 0x8400052c, 0x48026008,
- 0x592c1001, 0x58080406, 0x90000503, 0x90000581,
+ 0x80042480, 0x05f41ffd, 0x58080000, 0x80102400,
+ 0x48126010, 0x4813c857, 0x592c020c, 0x8400055e,
+ 0x48025a0c, 0x59300008, 0x8400052c, 0x48026008,
+ 0x592c1001, 0x58080409, 0x90000503, 0x90000581,
0x05020012, 0x599c0019, 0x8c00050c, 0x0502000f,
0x90280581, 0x05020003, 0x59300812, 0x0501f007,
- 0x80280840, 0x58080207, 0x40001000, 0x0525fd4f,
+ 0x80280840, 0x5808020a, 0x40001000, 0x0535f97b,
0x59300012, 0x80040c00, 0x48066013, 0x59300008,
- 0x8400056c, 0x48026008, 0x592c1001, 0x58080406,
+ 0x8400056c, 0x48026008, 0x592c1001, 0x58080409,
0x8c000510, 0x05000003, 0x0501f822, 0x05000003,
0x80000580, 0x0501f002, 0x90000541, 0x5c00b800,
0x1c01f000, 0x592c6801, 0x803469c0, 0x05000017,
- 0x58347802, 0x58347406, 0x90380503, 0x8c380510,
- 0x0c020006, 0x0c01f001, 0x001011b9, 0x001011b6,
- 0x001011bc, 0x001011be, 0x001011be, 0x001011be,
- 0x001011b9, 0x001011b9, 0x803c00c6, 0x80102400,
+ 0x58347805, 0x58347409, 0x90380503, 0x8c380510,
+ 0x0c020006, 0x0c01f001, 0x0010161d, 0x0010161a,
+ 0x00101620, 0x00101622, 0x00101622, 0x00101622,
+ 0x0010161d, 0x0010161d, 0x803c00c6, 0x80102400,
0x0501f004, 0x803c00c6, 0x80102480, 0x05001003,
0x80000580, 0x1c01f000, 0x90000541, 0x1c01f000,
- 0x4c040000, 0x4c080000, 0x4c600000, 0x592c0205,
+ 0x4c040000, 0x4c080000, 0x4c600000, 0x592c0208,
0x82000500, 0x000000ff, 0xb00005a8, 0x05000007,
0x90000582, 0x05000005, 0x90000598, 0x05000003,
0x90000588, 0x05020037, 0x592c6801, 0x803469c0,
- 0x05000034, 0x58340205, 0x82000500, 0x000000ff,
- 0xb000058a, 0x0502002f, 0x5834740a, 0x592cc208,
- 0x40380000, 0x8060c480, 0x42007800, 0x00100e1f,
+ 0x05000034, 0x58340208, 0x82000500, 0x000000ff,
+ 0xb000058a, 0x0502002f, 0x5834740d, 0x592cc20b,
+ 0x40380000, 0x8060c480, 0x42007800, 0x001012a5,
0x0501f82a, 0x05fe07ff, 0x40607000, 0x503c0000,
0x80341400, 0x805c00c6, 0x58088002, 0x80408480,
0x0500101b, 0x0500001a, 0x58088800, 0x80448c00,
0x58089001, 0x90489440, 0x59300827, 0x800409c0,
- 0x05000018, 0x4844080a, 0x4848080b, 0x4840080c,
- 0x49780809, 0x80380040, 0x05000003, 0x05020813,
- 0x48380809, 0x59300827, 0x48340807, 0x483c0808,
- 0x503c0000, 0x48000806, 0x90000541, 0x5c00c000,
+ 0x05000018, 0x4844080d, 0x4848080e, 0x4840080f,
+ 0x4978080c, 0x80380040, 0x05000003, 0x05020813,
+ 0x4838080c, 0x59300827, 0x4834080a, 0x483c080b,
+ 0x503c0000, 0x48000809, 0x90000541, 0x5c00c000,
0x5c001000, 0x5c000800, 0x1c01f000, 0x58088002,
0x80400106, 0x805cbc80, 0x0501f804, 0x05fe07dc,
0x80000580, 0x05fdf7f6, 0x4803c856, 0x803c7800,
0x503c0000, 0x80000540, 0x05000003, 0x80387040,
0x1c01f000, 0x58340001, 0x80006d40, 0x0500000a,
- 0x58340205, 0x9000050f, 0x82000400, 0x00100e26,
- 0x50007800, 0x803c79c0, 0x05f40fd9, 0x80387040,
+ 0x58340208, 0x9000050f, 0x82000400, 0x001012ac,
+ 0x50007800, 0x803c79c0, 0x05f40f60, 0x80387040,
0x1c01f000, 0x40007000, 0x1c01f000, 0x802850c6,
- 0x59306827, 0x58340006, 0x58341007, 0x58341808,
- 0x58342009, 0x5834480d, 0x80087c00, 0x583c0002,
+ 0x59306827, 0x58340009, 0x5834100a, 0x5834180b,
+ 0x5834200c, 0x58344810, 0x80087c00, 0x583c0002,
0x80284480, 0x0500100f, 0x80102040, 0x0500001f,
0x80244c80, 0x0500001d, 0x40205000, 0x800c1800,
0x500c0000, 0x80000d40, 0x05fe07f4, 0x58081001,
- 0x42001800, 0x00100e1d, 0x60180000, 0x05fdf7ef,
- 0x80204080, 0x80204000, 0x48106809, 0x583c0000,
+ 0x42001800, 0x001012a3, 0x60240000, 0x05fdf7ef,
+ 0x80204080, 0x80204000, 0x4810680c, 0x583c0000,
0x80282c00, 0x583c3001, 0x90183440, 0x500c0800,
- 0x48046806, 0x48086807, 0x480c6808, 0x48106809,
- 0x4814680a, 0x4818680b, 0x4820680c, 0x4824680d,
+ 0x48046809, 0x4808680a, 0x480c680b, 0x4810680c,
+ 0x4814680d, 0x4818680e, 0x4820680f, 0x48246810,
0x80000580, 0x1c01f000, 0x90000541, 0x1c01f000,
- 0x4d2c0000, 0x0001f813, 0x05f40fa5, 0x412c1000,
- 0x5c025800, 0x4a001008, 0x000201c0, 0x90080409,
- 0x48001003, 0x0001f1b6, 0x4d2c0000, 0x40325800,
- 0x05f9fb39, 0x5c025800, 0x1c01f000, 0x4807c857,
- 0x05f5ff97, 0x42001000, 0x0010d22d, 0x4a001003,
- 0x0010d236, 0x4a001008, 0x000201c0, 0x49781009,
+ 0x4d2c0000, 0x0001f817, 0x05f40f2c, 0x412c1000,
+ 0x5c025800, 0x4a001009, 0x000201cd, 0x9008040a,
+ 0x48001003, 0x0001f1c3, 0x4d2c0000, 0x40325800,
+ 0x05f9fadb, 0x5c025800, 0x1c01f000, 0x4807c857,
+ 0x05f5ff1e, 0x42001000, 0x001105e7, 0x4a001003,
+ 0x001105f1, 0x4a001009, 0x000201cd, 0x4978100a,
0x1c01f000, 0x59e00017, 0x8c000500, 0x1c01f000,
- 0x0001f9c9, 0x4d040000, 0x4c640000, 0x4c600000,
- 0x40120800, 0x400cc800, 0x4014c000, 0x0501f021,
- 0x4803c856, 0x42000800, 0x4fffffff, 0x46000800,
- 0x00002bad, 0x50040000, 0x0501f000, 0x59e00017,
- 0x8c00050c, 0x05020005, 0x59a8086a, 0x58040003,
- 0x8c000500, 0x0500000d, 0x4c080000, 0x59a81069,
- 0x50080000, 0x84000542, 0x44001000, 0x5c001000,
- 0x59e00017, 0x8c00050c, 0x05fe07fe, 0x58040003,
- 0x8c000500, 0x05fe07fb, 0x4d040000, 0x4c640000,
- 0x4c600000, 0x5804c800, 0x58060801, 0x5804c002,
- 0x4a03b805, 0x20000000, 0x59dc0006, 0x4a03b805,
- 0x30000000, 0x59dc0006, 0x4a03b805, 0x70000000,
- 0x59dc0006, 0x4867b800, 0x4907b801, 0x6413b802,
- 0x601c00e2, 0x44600000, 0x4a03b805, 0x30000000,
- 0x59dc0006, 0x4a03b805, 0x10000003, 0x59dc0006,
- 0x8c00053e, 0x05fc07fe, 0x4a03b805, 0x20000000,
- 0x59dc0006, 0x5c00c000, 0x5c00c800, 0x5c020800,
- 0x1c01f000, 0x4803c856, 0x0549f8cc, 0x0001f1d2,
- 0x4803c856, 0x60f00800, 0x48079000, 0x59c80000,
- 0x80040500, 0x05fe07fe, 0x497b9005, 0x4a039035,
- 0x00880400, 0x59a8000d, 0x800000e0, 0x4803900e,
- 0x64c39011, 0x4a03900f, 0x00110514, 0x4a039010,
- 0x00110514, 0x65db9015, 0x4a039003, 0x00001f07,
- 0x6503900d, 0x4a039000, 0x00001600, 0x1c01f000,
- 0x59c80007, 0x8c000508, 0x05020885, 0x59c80800,
- 0x8c040516, 0x05020003, 0x90000506, 0x0c01f004,
- 0x4807c857, 0x9000050e, 0x0c01f001, 0x001012e0,
- 0x001012df, 0x001054c4, 0x001012df, 0x001012e2,
- 0x001012df, 0x001012e2, 0x001012e2, 0x001012df,
- 0x001012df, 0x001012df, 0x001012df, 0x001012e2,
- 0x001012df, 0x001012e2, 0x001012df, 0x05f5ff10,
- 0x4803c857, 0x1c01f000, 0x59c8080c, 0x4807c857,
- 0x82040500, 0x00006000, 0x05000003, 0x0545ff19,
- 0x0501f005, 0x82040500, 0x007f0000, 0x05000004,
- 0x0545fee6, 0x0529f980, 0x0501f02c, 0x90040514,
- 0x0500000d, 0x0545ff3e, 0x916c0583, 0x05000008,
- 0x051df83e, 0x05000003, 0x0515fb12, 0x0501f004,
- 0x64075014, 0x6006d800, 0x0519ffb6, 0x0501f820,
- 0x0501f01e, 0x82040500, 0x00001c00, 0x05000004,
- 0x0545ff0e, 0x0501f81a, 0x0501f018, 0x82040500,
- 0x00000140, 0x05000004, 0x0545ff1b, 0x0501f814,
- 0x0501f012, 0x82040500, 0x00008000, 0x0500000f,
- 0x051df826, 0x0500000b, 0x59c400a4, 0x9000050f,
- 0x9000058b, 0x05020007, 0x4c040000, 0x0515fb0c,
- 0x60780000, 0x80000040, 0x05fe07ff, 0x5c000800,
- 0x0545fee1, 0x0501f802, 0x1c01f000, 0x4c0c0000,
- 0x4c100000, 0x4c140000, 0x05fdf8ed, 0x5c002800,
- 0x5c002000, 0x5c001800, 0x1c01f000, 0x4803c856,
- 0x59a80804, 0x59a80020, 0x82000500, 0xfffff000,
- 0x80040540, 0x48035020, 0x59a80024, 0x82000500,
- 0xfffff000, 0x80040540, 0x48035024, 0x59a80028,
- 0x82000500, 0xfffff000, 0x80040540, 0x48035028,
- 0x48078882, 0x82040480, 0x00000204, 0x05021004,
- 0x42001000, 0x00240f04, 0x0501f00f, 0x82040480,
- 0x00000404, 0x05021004, 0x42001000, 0x00440800,
- 0x0501f009, 0x82040480, 0x00000804, 0x05021004,
- 0x42001000, 0x00840410, 0x0501f003, 0x42001000,
- 0x00880400, 0x480b9035, 0x0501f340, 0x59c80815,
- 0x05f5fe99, 0x40680800, 0xb0040d3c, 0x48079000,
- 0x59c80000, 0x80040500, 0x05fe07fe, 0x8c040504,
- 0x0500001b, 0x59c80035, 0x48039035, 0x59a8008a,
- 0x80000540, 0x05000016, 0x4c300000, 0x600060de,
- 0x58300801, 0x82040d00, 0xffc00000, 0x8004090c,
- 0x58300000, 0x90000541, 0x48006000, 0x58300000,
- 0x8c000500, 0x05fe07fe, 0x82000500, 0xfc00ffff,
- 0x80040540, 0x84000574, 0x48006000, 0x58300000,
- 0x8c000534, 0x05fe07fe, 0x5c006000, 0x59c80000,
- 0x82000540, 0x00001200, 0x48039000, 0x1c01f000,
- 0x42006000, 0x7ff4c000, 0x58300003, 0x8c000502,
- 0x0502000a, 0x600060de, 0x64686000, 0x58300000,
- 0x8c000504, 0x05fe07fe, 0x641c6002, 0x59a8008a,
- 0x84000540, 0x4803508a, 0x1c01f000, 0x600060de,
- 0x58300801, 0x9004050c, 0x05f60e69, 0x60f00800,
- 0x05fdf7c6, 0x4853c857, 0x497b8801, 0x850e1d1a,
- 0x5050b000, 0x485bc857, 0x8058b1c0, 0x0500089d,
- 0x82580480, 0x00000804, 0x0502189a, 0x60040000,
- 0x61000801, 0x0501fd85, 0x40582000, 0x8050a000,
- 0x50500000, 0x80102400, 0x9058b483, 0x8050a000,
- 0x485bc857, 0x4853c857, 0x50501000, 0x80082404,
- 0x60101800, 0x82080500, 0x000000ff, 0x61000821,
- 0x0501fd76, 0x80081110, 0x800c1840, 0x05fe07fa,
- 0x8050a000, 0x8058b040, 0x05fe07f4, 0x4803c856,
- 0x41780000, 0x61000801, 0x0501fd6c, 0x50501000,
- 0x80082404, 0x0502087b, 0x4803c856, 0x1c01f000,
- 0x4a035048, 0xaabbccdd, 0x600c0000, 0x0501fcbf,
- 0x600c0000, 0x0501fce7, 0x60300868, 0x0501fd57,
- 0x90040541, 0x60300868, 0x0501fd5c, 0x60480888,
- 0x0501fd52, 0x90040548, 0x60480888, 0x0501fd57,
- 0x60180818, 0x0501fd4d, 0x82040540, 0x00000080,
- 0x60180818, 0x0501fd51, 0x60480828, 0x0501fd47,
- 0x90040541, 0x60480828, 0x0501fd4c, 0x59a8004f,
- 0x8c00050e, 0x05000006, 0x4803c857, 0x82000500,
- 0x0000ff00, 0x80000110, 0x0501f002, 0x60e00001,
- 0x60300800, 0x0501fd41, 0x60380940, 0x0501fd37,
- 0x82040500, 0xffffff0f, 0x0501ff0f, 0x05020003,
- 0x90000540, 0x0501f002, 0x90000550, 0x60380940,
- 0x0501fd36, 0x60380938, 0x0501fd2c, 0x90040550,
- 0x60380938, 0x0501fd31, 0x60800000, 0x61000859,
- 0x0501fd2e, 0x61000000, 0x61000851, 0x0501fd2b,
- 0x60300000, 0x61800861, 0x0501fd28, 0x60840000,
- 0x61800821, 0x0501fd25, 0x59c40001, 0x84000574,
- 0x48038801, 0x850e1d5a, 0x61602004, 0x6029d000,
- 0x0501f83c, 0x4813c857, 0x61000849, 0x0501fd13,
- 0x4807c857, 0x82041500, 0x000000c0, 0x82081580,
- 0x000000c0, 0x05000004, 0x80102040, 0x05000825,
- 0x05fdf7f3, 0x4803c856, 0x60c82000, 0x6029d000,
- 0x0501f82c, 0x60380878, 0x0501fd04, 0x90040d01,
- 0x05020004, 0x80102040, 0x0500081a, 0x05fdf7f8,
- 0x4803c856, 0x61702001, 0x6029d000, 0x0525fa2a,
- 0x60380818, 0x0501fcf9, 0x90040d10, 0x05020004,
- 0x80102040, 0x05f40dd2, 0x05fdf7f8, 0x4803c856,
- 0x60a02000, 0x6029d000, 0x0525fa1f, 0x603808b8,
- 0x0501fcee, 0x90040d04, 0x05000004, 0x80102040,
- 0x05f40dc7, 0x05fdf7f8, 0x4803c856, 0x1c01f000,
- 0x4803c856, 0x4a03c020, 0x00004010, 0x4a03c011,
- 0x40100011, 0x05006000, 0x4203e000, 0x40000000,
- 0x4203e000, 0x30000001, 0x4803c856, 0x0501f000,
- 0x61201801, 0x800c1840, 0x05fe07ff, 0x80e9d040,
- 0x05fe07fc, 0x1c01f000, 0x4803c856, 0x497b88a9,
- 0x64078807, 0x497b8807, 0x59c40005, 0x48038805,
- 0x0501fdf2, 0x0501fe35, 0x0501f9e6, 0x4a0388a7,
- 0x0000f7f7, 0x4a0388a3, 0x8000403c, 0x4a0388ae,
- 0x000061a8, 0x59c40001, 0x82000540, 0x185fa063,
- 0x48038801, 0x4a038810, 0x00410108, 0x4a038811,
- 0x00520608, 0x4a038812, 0x00450320, 0x4a038813,
- 0x00440405, 0x4a03881c, 0x004132e1, 0x4a038850,
- 0x80000108, 0x64238860, 0x64238870, 0x4a038851,
- 0x80000508, 0x4a038861, 0x00800000, 0x4a038871,
- 0x00800000, 0x4a038852, 0x80000708, 0x4a038862,
- 0x00800000, 0x4a038872, 0x00800000, 0x4a038853,
- 0x80000608, 0x497b8863, 0x4a038873, 0x00800000,
- 0x4a038882, 0x00000840, 0x4a0388a5, 0x000000fe,
- 0x647b88a6, 0x4a0388b0, 0x00007530, 0x4a038802,
- 0x0000ffff, 0x4a038806, 0xc0e80b00, 0x1c01f000,
- 0x850e1d4e, 0x1c01f000, 0x59c40805, 0x59c40006,
- 0x80040d00, 0x05f40d6e, 0x82040500, 0x00e80b00,
- 0x05020004, 0x8c04053e, 0x050208c4, 0x0501f005,
- 0x82040500, 0x00880b00, 0x05f60d5b, 0x05f5fd64,
- 0x4c5c0000, 0x4c600000, 0x59c4b805, 0x59c410a3,
- 0x84081518, 0x825c0500, 0x04000000, 0x05020d71,
+ 0x0001f9d6, 0x4d040000, 0x4c640000, 0x4c600000,
+ 0x40120800, 0x400cc800, 0x4014c000, 0x0501f01a,
+ 0x59e00017, 0x8c00050c, 0x05020005, 0x59a808a0,
+ 0x58040003, 0x8c000500, 0x0500000d, 0x4c080000,
+ 0x59a8109f, 0x50080000, 0x84000542, 0x44001000,
+ 0x5c001000, 0x59e00017, 0x8c00050c, 0x05fe07fe,
+ 0x58040003, 0x8c000500, 0x05fe07fb, 0x4d040000,
+ 0x4c640000, 0x4c600000, 0x5804c800, 0x58060801,
+ 0x5804c002, 0x4a03b805, 0x20000000, 0x59dc0006,
+ 0x4a03b805, 0x30000000, 0x59dc0006, 0x4a03b805,
+ 0x70000000, 0x59dc0006, 0x4867b800, 0x4907b801,
+ 0x6413b802, 0x601c00e2, 0x44600000, 0x4a03b805,
+ 0x30000000, 0x59dc0006, 0x4a03b805, 0x10000003,
+ 0x59dc0006, 0x8c00053e, 0x05fc07fe, 0x4a03b805,
+ 0x20000000, 0x59dc0006, 0x5c00c000, 0x5c00c800,
+ 0x5c020800, 0x1c01f000, 0x4803c856, 0x055dfa08,
+ 0x0001f1df, 0x59300c03, 0xb0040592, 0x05020037,
+ 0x59c80000, 0x82000540, 0x00001200, 0x48039000,
+ 0x850e1d1c, 0x4d2c0000, 0x59325809, 0x42007000,
+ 0x000211a7, 0x58380800, 0x90040582, 0x0502000c,
+ 0x58386001, 0x58300009, 0x82000580, 0x0010150e,
+ 0x05020007, 0x5830000a, 0x812c0580, 0x05020004,
+ 0x4933c857, 0x4978600a, 0x0501f01e, 0x58386005,
+ 0x40305000, 0x803061c0, 0x0500001a, 0x58300009,
+ 0x82000580, 0x0010150e, 0x05020004, 0x5830000a,
+ 0x812c0580, 0x05000004, 0x40305000, 0x58306000,
+ 0x05fdf7f5, 0x4933c856, 0x8030058a, 0x58300000,
+ 0x05000006, 0x48005000, 0x800001c0, 0x05020007,
+ 0x48287004, 0x0501f005, 0x800001c0, 0x05020002,
+ 0x48007004, 0x48007005, 0x40325800, 0x05f9fa53,
+ 0x5c025800, 0x0501f010, 0x59300a03, 0x90040581,
+ 0x0502000d, 0x42001000, 0x0010e387, 0x50081000,
+ 0x58080002, 0x82000580, 0x00000100, 0x05000006,
+ 0x5808000c, 0x81300580, 0x05020003, 0x4933c856,
+ 0x4978100c, 0x59300004, 0x84000520, 0x48026004,
+ 0x1c01f000, 0x4803c856, 0x60f00800, 0x48079000,
+ 0x59c80000, 0x80040500, 0x05fe07fe, 0x497b9005,
+ 0x4a039035, 0x00880400, 0x59a8003b, 0x800000e0,
+ 0x4803900e, 0x64c39011, 0x4a03900f, 0x00111b00,
+ 0x4a039010, 0x00111b00, 0x65db9015, 0x4a039003,
+ 0x00001f07, 0x6503900d, 0x4a039000, 0x00001600,
+ 0x1c01f000, 0x59c80007, 0x8c000508, 0x05020885,
+ 0x59c80800, 0x8c040516, 0x05020003, 0x90000506,
+ 0x0c01f004, 0x4807c857, 0x9000050e, 0x0c01f001,
+ 0x00101789, 0x00101788, 0x00106d20, 0x00101788,
+ 0x0010178b, 0x00101788, 0x0010178b, 0x0010178b,
+ 0x00101788, 0x00101788, 0x00101788, 0x00101788,
+ 0x0010178b, 0x00101788, 0x0010178b, 0x00101788,
+ 0x05f5fe52, 0x4803c857, 0x1c01f000, 0x59c8080c,
+ 0x4807c857, 0x82040500, 0x00006000, 0x05000003,
+ 0x055df808, 0x0501f005, 0x82040500, 0x007f0000,
+ 0x05000004, 0x0559ffd5, 0x0539f899, 0x0501f02c,
+ 0x90040514, 0x0500000d, 0x055df82d, 0x916c0583,
+ 0x05000008, 0x0525f911, 0x05000003, 0x051df94c,
+ 0x0501f004, 0x64075042, 0x6006d800, 0x0525f88e,
+ 0x0501f820, 0x0501f01e, 0x82040500, 0x00001c00,
+ 0x05000004, 0x0559fffd, 0x0501f81a, 0x0501f018,
+ 0x82040500, 0x00000140, 0x05000004, 0x055df80a,
+ 0x0501f814, 0x0501f012, 0x82040500, 0x00008000,
+ 0x0500000f, 0x0525f8f9, 0x0500000b, 0x59c400a4,
+ 0x9000050f, 0x9000058b, 0x05020007, 0x4c040000,
+ 0x051df946, 0x60780000, 0x80000040, 0x05fe07ff,
+ 0x5c000800, 0x0559ffd0, 0x0501f802, 0x1c01f000,
+ 0x4c0c0000, 0x4c100000, 0x4c140000, 0x05fdf8b6,
+ 0x5c002800, 0x5c002000, 0x5c001800, 0x1c01f000,
+ 0x4803c856, 0x59a80804, 0x59a8004e, 0x82000500,
+ 0xfffff000, 0x80040540, 0x4803504e, 0x59a80052,
+ 0x82000500, 0xfffff000, 0x80040540, 0x48035052,
+ 0x59a80056, 0x82000500, 0xfffff000, 0x80040540,
+ 0x48035056, 0x48078882, 0x82040480, 0x00000204,
+ 0x05021004, 0x42001000, 0x00240f00, 0x0501f00f,
+ 0x82040480, 0x00000404, 0x05021004, 0x42001000,
+ 0x00440800, 0x0501f009, 0x82040480, 0x00000804,
+ 0x05021004, 0x42001000, 0x00840400, 0x0501f003,
+ 0x42001000, 0x00880400, 0x480b9035, 0x0501f350,
+ 0x59c80815, 0x05f5fdde, 0x4807c857, 0xb0040d3c,
+ 0x48079000, 0x59c80000, 0x80040500, 0x05fe07fe,
+ 0x8c040504, 0x0500001b, 0x59c80035, 0x48039035,
+ 0x59a800ca, 0x80000540, 0x05000016, 0x4c300000,
+ 0x600060de, 0x58300801, 0x82040d00, 0xffc00000,
+ 0x8004090c, 0x58300000, 0x90000541, 0x48006000,
+ 0x58300000, 0x8c000500, 0x05fe07fe, 0x82000500,
+ 0xfc00ffff, 0x80040540, 0x84000574, 0x48006000,
+ 0x58300000, 0x8c000534, 0x05fe07fe, 0x5c006000,
+ 0x59c80000, 0x82000540, 0x00001200, 0x48039000,
+ 0x1c01f000, 0x60100020, 0x50000000, 0x8c000520,
+ 0x05020006, 0x42006000, 0x7ff4c000, 0x58300003,
+ 0x8c000502, 0x0502000a, 0x600060de, 0x64686000,
+ 0x58300000, 0x8c000504, 0x05fe07fe, 0x641c6002,
+ 0x59a800ca, 0x84000540, 0x480350ca, 0x1c01f000,
+ 0x600060de, 0x58300801, 0x9004050c, 0x05f60da7,
+ 0x60f00800, 0x05fdf7c1, 0x4853c857, 0x497b8801,
+ 0x850e1d1a, 0x5050b000, 0x485bc857, 0x8058b1c0,
+ 0x0500089d, 0x82580480, 0x00000804, 0x0502189a,
+ 0x60040000, 0x61000801, 0x0501fd74, 0x40582000,
+ 0x8050a000, 0x50500000, 0x80102400, 0x9058b483,
+ 0x8050a000, 0x485bc857, 0x4853c857, 0x50501000,
+ 0x80082404, 0x60101800, 0x82080500, 0x000000ff,
+ 0x61000821, 0x0501fd65, 0x80081110, 0x800c1840,
+ 0x05fe07fa, 0x8050a000, 0x8058b040, 0x05fe07f4,
+ 0x4803c856, 0x41780000, 0x61000801, 0x0501fd5b,
+ 0x50501000, 0x80082404, 0x0502087b, 0x4803c856,
+ 0x1c01f000, 0x4a035076, 0xaabbccdd, 0x600c0000,
+ 0x0501fcb1, 0x600c0000, 0x0501fcdf, 0x60300868,
+ 0x0501fd49, 0x90040541, 0x60300868, 0x0501fd4b,
+ 0x60480888, 0x0501fd44, 0x90040548, 0x60480888,
+ 0x0501fd46, 0x60180818, 0x0501fd3f, 0x82040540,
+ 0x00000080, 0x60180818, 0x0501fd40, 0x60480828,
+ 0x0501fd39, 0x90040541, 0x60480828, 0x0501fd3b,
+ 0x59a80084, 0x8c00050e, 0x05000006, 0x4803c857,
+ 0x82000500, 0x0000ff00, 0x80000110, 0x0501f002,
+ 0x60e00001, 0x60300800, 0x0501fd30, 0x60380940,
+ 0x0501fd29, 0x82040500, 0xffffff0f, 0x0501fef5,
+ 0x05020003, 0x90000540, 0x0501f002, 0x90000550,
+ 0x60380940, 0x0501fd25, 0x60380938, 0x0501fd1e,
+ 0x90040550, 0x60380938, 0x0501fd20, 0x60800000,
+ 0x61000859, 0x0501fd1d, 0x61000000, 0x61000851,
+ 0x0501fd1a, 0x60300000, 0x61800861, 0x0501fd17,
+ 0x60840000, 0x61800821, 0x0501fd14, 0x59c40001,
+ 0x84000574, 0x48038801, 0x850e1d5a, 0x61602004,
+ 0x6029d000, 0x0501f83c, 0x4813c857, 0x61000849,
+ 0x0501fd05, 0x4807c857, 0x82041500, 0x000000c0,
+ 0x82081580, 0x000000c0, 0x05000004, 0x80102040,
+ 0x05000825, 0x05fdf7f3, 0x4803c856, 0x60c82000,
+ 0x6029d000, 0x0501f82c, 0x60380878, 0x0501fcf6,
+ 0x90040d01, 0x05020004, 0x80102040, 0x0500081a,
+ 0x05fdf7f8, 0x4803c856, 0x61702001, 0x6029d000,
+ 0x052dff41, 0x60380818, 0x0501fceb, 0x90040d10,
+ 0x05020004, 0x80102040, 0x05f40d10, 0x05fdf7f8,
+ 0x4803c856, 0x60a02000, 0x6029d000, 0x052dff36,
+ 0x603808b8, 0x0501fce0, 0x90040d04, 0x05000004,
+ 0x80102040, 0x05f40d05, 0x05fdf7f8, 0x4803c856,
+ 0x1c01f000, 0x4803c856, 0x4a03c020, 0x00004010,
+ 0x4a03c011, 0x40100011, 0x05006000, 0x4203e000,
+ 0x40000000, 0x4203e000, 0x30000001, 0x4803c856,
+ 0x0501f000, 0x61201801, 0x800c1840, 0x05fe07ff,
+ 0x80e9d040, 0x05fe07fc, 0x1c01f000, 0x4803c856,
+ 0x497b88a9, 0x64078807, 0x497b8807, 0x59c40005,
+ 0x48038805, 0x0501fde0, 0x0501fe23, 0x0501f9f6,
+ 0x4a0388a7, 0x0000f7f7, 0x4a0388a3, 0x8000403c,
+ 0x4a0388ae, 0x000061a8, 0x59c40001, 0x82000500,
+ 0xfffe7fff, 0x82000540, 0x005fe063, 0x48038801,
+ 0x4a038810, 0x00410108, 0x4a038811, 0x00520608,
+ 0x4a038812, 0x00450320, 0x4a038813, 0x00440405,
+ 0x4a03881c, 0x004132e1, 0x4a038850, 0x80000108,
+ 0x64238860, 0x64238870, 0x4a038851, 0x80000508,
+ 0x4a038861, 0x00800000, 0x4a038871, 0x00800000,
+ 0x4a038852, 0x80000708, 0x4a038862, 0x00800000,
+ 0x4a038872, 0x00800000, 0x4a038853, 0x80000608,
+ 0x497b8863, 0x4a038873, 0x00800000, 0x4a038882,
+ 0x00000840, 0x4a0388a5, 0x000000fe, 0x647b88a6,
+ 0x4a0388b0, 0x00007530, 0x4a038802, 0x0000ffff,
+ 0x4a038806, 0xc0e80b00, 0x1c01f000, 0x850e1d4e,
+ 0x1c01f000, 0x59c40805, 0x59c40006, 0x80040d00,
+ 0x05f40caa, 0x82040500, 0x00e80b00, 0x05020004,
+ 0x8c04053e, 0x050208c9, 0x0501f005, 0x82040500,
+ 0x00880b00, 0x05f60c9a, 0x05f5fca0, 0x4c5c0000,
+ 0x4c600000, 0x59c4b805, 0x485fc857, 0x59c410a3,
+ 0x84081518, 0x825c0500, 0x04000000, 0x05020d5c,
0x59c40006, 0x8c000500, 0x05000003, 0x8c5c0500,
- 0x0502007f, 0x485fc857, 0x0519fe98, 0x0500001a,
- 0x59c40005, 0x82000500, 0x000000c0, 0x05000042,
- 0x0519feb3, 0x05020040, 0x59c40006, 0x82000500,
- 0x000000f0, 0x05020004, 0x4a038805, 0x000000c0,
- 0x0501f039, 0x59a80015, 0x84000506, 0x48035015,
- 0x42006000, 0xff203fff, 0x42006800, 0x40000000,
- 0x0515fab0, 0x60400800, 0x42001000, 0x00103ed0,
- 0x0525f984, 0x8c5c0534, 0x0502002b, 0x4a035013,
- 0x0000aaaa, 0x59c40005, 0x8c00050c, 0x0502000f,
- 0x8c00050e, 0x05020015, 0x8c00050a, 0x0502001b,
- 0x8c000508, 0x05000008, 0x59a80011, 0x90000589,
- 0x05020005, 0x42000000, 0x0010b22b, 0x0545fd7e,
- 0x051df828, 0x0501f04c, 0x42000000, 0x0010b239,
- 0x0545fd79, 0x41781800, 0x60042000, 0x0501fd29,
- 0x64035014, 0x0501f00e, 0x42000000, 0x0010b23a,
- 0x0545fd71, 0x41781800, 0x60082000, 0x0501fd21,
- 0x640b5014, 0x0501f006, 0x42000000, 0x0010b22d,
- 0x0545fd69, 0x0519ffb9, 0x0501f037, 0x051df865,
- 0x0501f035, 0x8c5c0534, 0x05000031, 0x59c40005,
- 0x8c00053a, 0x05020004, 0x42000000, 0x0010b221,
- 0x0545fd5d, 0x4a038805, 0x20000000, 0x0519fe47,
- 0x0502000e, 0x4a038805, 0x04000000, 0x59c418a8,
- 0x60002000, 0x0501fd07, 0x0519fe56, 0x05020005,
- 0x64075014, 0x6006d800, 0x0519fdba, 0x0501f050,
- 0x41780000, 0x0519fe0d, 0x0501fcf7, 0x4000c000,
- 0x0501fc3d, 0x916c1584, 0x0502000b, 0x8c5c0500,
- 0x05020013, 0x8d0c0506, 0x05020004, 0x59c410a3,
- 0x90081548, 0x480b88a3, 0x59c41006, 0x84081540,
- 0x480b8806, 0x4a038805, 0x04000000, 0x6006d800,
- 0x497b5010, 0x8d0c0518, 0x05020004, 0x4803c856,
- 0x850e1d06, 0x0515f913, 0x0511fbb0, 0x8c5c053c,
- 0x0502084f, 0x8c5c0500, 0x0500002e, 0x42000000,
- 0x0010b33e, 0x0545fd2c, 0x64078805, 0x6148b006,
- 0x6191d000, 0x4c580000, 0x0525f923, 0x0501fbb4,
- 0x5c00b000, 0x05000004, 0x8058b040, 0x05fe07f9,
- 0x0501f003, 0x64078805, 0x0501f01e, 0x59c40006,
- 0x84000500, 0x48038806, 0x0525ff69, 0x497b8880,
- 0x0501fdc1, 0x05000007, 0x59e00013, 0x8c000516,
- 0x05000004, 0x60142000, 0x051df852, 0x0501f003,
- 0x60182000, 0x051df84f, 0x59c400a3, 0x82000500,
- 0xfcf8ffff, 0x480388a3, 0x640b5075, 0x6012d800,
- 0x64078805, 0x05f5fecd, 0x0501fb2e, 0x497b503a,
- 0x64075047, 0x497b5070, 0x0201f800, 0x0010fcd9,
+ 0x05020080, 0x0521ff65, 0x0500001c, 0x0521ff6f,
+ 0x0500001a, 0x59c40005, 0x82000500, 0x000000c0,
+ 0x05000042, 0x0521ff6f, 0x05020040, 0x59c40006,
+ 0x82000500, 0x000000f0, 0x05020004, 0x4a038805,
+ 0x000000c0, 0x0501f039, 0x59a80043, 0x84000506,
+ 0x48035043, 0x42006000, 0xff203fff, 0x42006800,
+ 0x40000000, 0x051df8f6, 0x60400800, 0x42001000,
+ 0x001051b3, 0x052dfe99, 0x8c5c0534, 0x0502002b,
+ 0x4a035041, 0x0000aaaa, 0x59c40005, 0x8c00050c,
+ 0x0502000f, 0x8c00050e, 0x05020015, 0x8c00050a,
+ 0x0502001b, 0x8c000508, 0x05000008, 0x59a8003f,
+ 0x90000589, 0x05020005, 0x42000000, 0x0010e3a4,
+ 0x0559fe64, 0x0525f8e2, 0x0501f04c, 0x42000000,
+ 0x0010e3b2, 0x0559fe5f, 0x41781800, 0x60042000,
+ 0x0501fd13, 0x64035042, 0x0501f00e, 0x42000000,
+ 0x0010e3b3, 0x0559fe57, 0x41781800, 0x60082000,
+ 0x0501fd0b, 0x640b5042, 0x0501f006, 0x42000000,
+ 0x0010e3a6, 0x0559fe4f, 0x0525f873, 0x0501f037,
+ 0x0525f91f, 0x0501f035, 0x8c5c0534, 0x05000031,
+ 0x59c40005, 0x8c00053a, 0x05020004, 0x42000000,
+ 0x0010e39a, 0x0559fe43, 0x4a038805, 0x20000000,
+ 0x0521ff12, 0x0502000e, 0x4a038805, 0x04000000,
+ 0x59c418a8, 0x60002000, 0x0501fcf1, 0x0521ff17,
+ 0x05020005, 0x64075042, 0x6006d800, 0x0521fe8a,
+ 0x0501f053, 0x41780000, 0x0521fedd, 0x0501fce1,
+ 0x4000c000, 0x0501fc28, 0x916c1584, 0x0502000b,
+ 0x8c5c0500, 0x05020013, 0x8d0c0506, 0x05020004,
+ 0x59c410a3, 0x90081548, 0x480b88a3, 0x59c41006,
+ 0x84081540, 0x480b8806, 0x4a038805, 0x04000000,
+ 0x6006d800, 0x497b503e, 0x8d0c0518, 0x05020004,
+ 0x4803c856, 0x850e1d06, 0x0519ff45, 0x0519f9e1,
+ 0x8c5c053c, 0x05020852, 0x8c5c0500, 0x05000031,
+ 0x42000000, 0x0010e4bc, 0x0559fe12, 0x64078805,
+ 0x6148b006, 0x6191d000, 0x4c580000, 0x052dfe36,
+ 0x0501fba3, 0x5c00b000, 0x05000004, 0x8058b040,
+ 0x05fe07f9, 0x0501f004, 0x485bc857, 0x64078805,
+ 0x0501f020, 0x485bc857, 0x59c40006, 0x84000500,
+ 0x48038806, 0x0535fe78, 0x497b8880, 0x0501fda1,
+ 0x05000008, 0x60000818, 0x0501fbcf, 0x8c040500,
+ 0x05000004, 0x60142000, 0x0525f908, 0x0501f003,
+ 0x60182000, 0x0525f905, 0x59c400a3, 0x82000500,
+ 0xfcf8ffff, 0x480388a3, 0x640b50b4, 0x6012d800,
+ 0x6403506a, 0x64078805, 0x05f5fe0c, 0x0501fb19,
+ 0x497b5068, 0x64075075, 0x497b50a6, 0x05f5fa03,
0x825cbd00, 0xbbfffffe, 0x485f8805, 0x5c00c000,
0x5c00b800, 0x1c01f000, 0x4d180000, 0x59c41004,
0x480bc857, 0x8c080500, 0x05000006, 0x4803c856,
- 0x4a01a8e5, 0x00000800, 0x0525ffee, 0x0501f007,
+ 0x4a01a8e5, 0x00000800, 0x0535fefb, 0x0501f007,
0x82080500, 0x000001f0, 0x05000004, 0x4803c856,
- 0x0529f913, 0x052a0806, 0x4a038805, 0x80000000,
+ 0x0539f820, 0x05360f13, 0x4a038805, 0x80000000,
0x5c023000, 0x1c01f000, 0x59c408a3, 0x4807c857,
0x84040d40, 0x480788a3, 0x1c01f000, 0x4d900000,
0x4dd00000, 0x4da40000, 0x4d140000, 0x4cd80000,
- 0x4a038805, 0x40000000, 0x42000000, 0x0010b233,
- 0x0545fcd9, 0x0525fbd2, 0x59c41004, 0x8c080500,
+ 0x4a038805, 0x40000000, 0x42000000, 0x0010e3ac,
+ 0x0559fdbc, 0x0535faf2, 0x59c41004, 0x8c080500,
0x05000040, 0x598e600b, 0x4a01a8e5, 0x00000800,
0x813261c0, 0x05000024, 0x59300403, 0x900005b2,
0x05020021, 0x5930001e, 0x48038833, 0x4a038807,
- 0x00018000, 0x6009d000, 0x0525f8c3, 0x497b8807,
- 0x6009d000, 0x0525f8c0, 0x0525fe54, 0x60c1d0ea,
- 0x0525f8bd, 0x59c408a4, 0x90040d0f, 0x90040d80,
- 0x05000004, 0x42000000, 0x00200000, 0x0501fb94,
- 0x0525fb08, 0x59300009, 0x80000540, 0x05f40c60,
- 0x40025800, 0x4a025a05, 0x00000103, 0x5931d82d,
- 0x58ef400a, 0x58ec0008, 0x0801f800, 0x0005fc5a,
+ 0x00018000, 0x6009d000, 0x052dfdd3, 0x497b8807,
+ 0x6009d000, 0x052dfdd0, 0x0535fd6c, 0x60c1d0ea,
+ 0x052dfdcd, 0x59c408a4, 0x90040d0f, 0x90040d80,
+ 0x05000004, 0x42000000, 0x00200000, 0x0501fb7c,
+ 0x0535fa29, 0x59300009, 0x80000540, 0x05f40b97,
+ 0x40025800, 0x4a025a08, 0x00000103, 0x5931d82d,
+ 0x58ef400b, 0x58ec0009, 0x0801f800, 0x0005ffdc,
0x0501f032, 0x598c000d, 0x82001c80, 0x000000c8,
0x0502100c, 0x80000000, 0x4803180d, 0x59c400a4,
0x9000050f, 0x90000582, 0x05020004, 0x42000000,
- 0x00200000, 0x0501fb7a, 0x0525f83e, 0x0501f023,
- 0x4933c857, 0x0525fe2d, 0x813261c0, 0x0500001f,
- 0x64066203, 0x609e7000, 0x0005fc78, 0x0501f01b,
- 0x0529f8bb, 0x05000019, 0x0529f8e2, 0x0525f85a,
+ 0x00200000, 0x0501fb62, 0x052dfd59, 0x0501f023,
+ 0x4933c857, 0x0535fd45, 0x813261c0, 0x0500001f,
+ 0x64066203, 0x609e7000, 0x0009f800, 0x0501f01b,
+ 0x0535ffc8, 0x05000019, 0x0535ffee, 0x052dfd74,
0x59926005, 0x813261c0, 0x0500000d, 0x61201801,
- 0x0529f8aa, 0x0502000a, 0x59c400a4, 0x9000050f,
+ 0x0535ffb7, 0x0502000a, 0x59c400a4, 0x9000050f,
0x90000582, 0x05020004, 0x42000000, 0x00200000,
- 0x0501fb5f, 0x0525f829, 0x0501f008, 0x4933c857,
- 0x0525fdb9, 0x813261c0, 0x05000004, 0x613e7000,
- 0x640e6203, 0x0005fc78, 0x5c01b000, 0x5c022800,
- 0x5c034800, 0x5c03a000, 0x5c032000, 0x0525f35c,
- 0x40680000, 0x810c0d80, 0x8c04050e, 0x05000051,
- 0x4803c857, 0x8d0c050e, 0x0500001f, 0x850e1d0e,
- 0x497b5075, 0x42000000, 0x0010b21a, 0x0545fc6a,
- 0x0545fd16, 0x60441100, 0x59c40001, 0x82000500,
- 0x00018000, 0x90001d80, 0x0500000b, 0x82001d80,
- 0x00008000, 0x0500000a, 0x82001d80, 0x00010000,
- 0x05000009, 0x82001d80, 0x00018000, 0x05000008,
- 0x05f5fc03, 0x60001800, 0x0501f006, 0x60041800,
- 0x0501f004, 0x600c1800, 0x0501f002, 0x60101800,
- 0x050df7d9, 0x850e1d4e, 0x59a80875, 0x800409c0,
- 0x05020006, 0x59c4000d, 0x8c000520, 0x05000003,
- 0x600c1800, 0x0501f002, 0x40041800, 0x0545fcdb,
- 0x4c0c0000, 0x41782000, 0x0501fceb, 0x0500000f,
- 0x0501fccd, 0x60042000, 0x0502000c, 0x0501fcd8,
- 0x05020006, 0x60082000, 0x0501f8c5, 0x05020007,
- 0x60102000, 0x0501f005, 0x600c2000, 0x0501f89f,
- 0x05020002, 0x60142000, 0x5c001800, 0x60481100,
- 0x050dffb9, 0x05f5fdf5, 0x0545fd3f, 0x0502000d,
- 0x4d200000, 0x61fe4001, 0x0501f852, 0x5c024000,
- 0x4d400000, 0x4d3c0000, 0x60a28000, 0x60227800,
- 0x0201f800, 0x0010edf3, 0x5c027800, 0x5c028000,
- 0x1c01f000, 0x4803c857, 0x82000400, 0x001020b6,
- 0x50000800, 0x82040d00, 0x000000ff, 0x1c01f000,
- 0x4803c856, 0x4c580000, 0x6040b000, 0x497b88ac,
- 0x497b88ad, 0x8058b040, 0x05fe07fe, 0x5c00b000,
- 0x1c01f000, 0x40680800, 0x4807c857, 0x80041908,
- 0x480f88ac, 0x9004250f, 0x82102400, 0x0010a393,
+ 0x0501fb47, 0x052dfd44, 0x0501f008, 0x4933c857,
+ 0x0535fcd1, 0x813261c0, 0x05000004, 0x613e7000,
+ 0x640e6203, 0x0009f800, 0x5c01b000, 0x5c022800,
+ 0x5c034800, 0x5c03a000, 0x5c032000, 0x0535f281,
+ 0x810c0d80, 0x8c04050e, 0x05000055, 0x4803c857,
+ 0x8d0c050e, 0x05000021, 0x850e1d0e, 0x497b50b4,
+ 0x42000000, 0x0010e393, 0x0559fd4e, 0x0559fdfa,
+ 0x0001ff09, 0x60441100, 0x497b50a8, 0x59c40001,
+ 0x82000500, 0x00018000, 0x90001d80, 0x0500000b,
+ 0x82001d80, 0x00008000, 0x0500000a, 0x82001d80,
+ 0x00010000, 0x05000009, 0x82001d80, 0x00018000,
+ 0x05000008, 0x05f5fb39, 0x60001800, 0x0501f006,
+ 0x60041800, 0x0501f004, 0x600c1800, 0x0501f002,
+ 0x60101800, 0x0515f533, 0x850e1d4e, 0x59a808b4,
+ 0x800409c0, 0x05020006, 0x59c4000d, 0x8c000520,
+ 0x05000003, 0x600c1800, 0x0501f002, 0x40041800,
+ 0x0559fdbd, 0x4c0c0000, 0x4c0c0000, 0x41782000,
+ 0x0501fcc8, 0x0500000f, 0x0501fcad, 0x60042000,
+ 0x0502000c, 0x0501fcb5, 0x05020006, 0x60082000,
+ 0x0501f8b4, 0x05020007, 0x60102000, 0x0501f005,
+ 0x600c2000, 0x0501f89d, 0x05020002, 0x60142000,
+ 0x5c001800, 0x60481100, 0x5c001800, 0x0515fd11,
+ 0x05f5fd32, 0x0559fe1f, 0x0502000c, 0x4d200000,
+ 0x61fe4001, 0x0501f857, 0x5c024000, 0x4d400000,
+ 0x4d3c0000, 0x60a28000, 0x60227800, 0x0501fffb,
+ 0x5c027800, 0x5c028000, 0x1c01f000, 0x80000540,
+ 0x05fc07fe, 0x4d3c0000, 0x60067800, 0x054dfb48,
+ 0x5c027800, 0x1c01f000, 0x4803c857, 0x82000400,
+ 0x00102853, 0x50000800, 0x82040d00, 0x000000ff,
+ 0x1c01f000, 0x4803c856, 0x4c580000, 0x6040b000,
+ 0x497b88ac, 0x497b88ad, 0x8058b040, 0x05fe07fe,
+ 0x5c00b000, 0x1c01f000, 0x4807c857, 0x80041908,
+ 0x480f88ac, 0x9004250f, 0x82102400, 0x0010d15b,
0x50102000, 0x59c400ad, 0x80100540, 0x480f88ac,
- 0x480388ad, 0x0545fd40, 0x05000002, 0x4807500f,
+ 0x480388ad, 0x0559fe18, 0x05000002, 0x4807503d,
0x1c01f000, 0x4807c857, 0x80041908, 0x480f88ac,
- 0x9004250f, 0x82102400, 0x0010a393, 0x50102000,
+ 0x9004250f, 0x82102400, 0x0010d15b, 0x50102000,
0x59c400ad, 0x80101500, 0x05000004, 0x80100580,
0x480f88ac, 0x480388ad, 0x1c01f000, 0x4803c857,
0x4c080000, 0x4c040000, 0x4c000000, 0x59c40892,
@@ -14264,159 +1773,152 @@ static const uint32_t isp_2500_multi_risc_code[] = {
0x48038886, 0x8058b040, 0x05fe07fe, 0x497b8886,
0x5c000000, 0x5c000800, 0x5c001000, 0x1c01f000,
0x4803c856, 0x8d0c0520, 0x05000003, 0x60ba8000,
- 0x0541f4c8, 0x1c01f000, 0x0501f803, 0x40058800,
- 0x1c01f000, 0x59a8008a, 0x80000540, 0x05000008,
- 0x0519fcba, 0x60280800, 0x0502000e, 0x600008de,
- 0x58040001, 0x8000092c, 0x0501f00a, 0x59c80835,
- 0x82040d00, 0x00001f00, 0x80040910, 0x80040800,
- 0x59a8008a, 0x80000540, 0x05000002, 0x61680804,
- 0x4807c857, 0x1c01f000, 0x59a8008a, 0x80000540,
- 0x0500001c, 0x599c1a01, 0x60a80801, 0x820c0480,
- 0x00000204, 0x0500100a, 0x61680800, 0x820c0480,
- 0x00000404, 0x05001006, 0x60b80800, 0x820c0480,
- 0x00000804, 0x05001002, 0x60b40800, 0x4c300000,
- 0x600060de, 0x58301000, 0x82081500, 0xfc00ffff,
- 0x800400e0, 0x80080540, 0x84000574, 0x48006000,
- 0x58300000, 0x8c000534, 0x05fe07fe, 0x5c006000,
- 0x1c01f000, 0x0501f805, 0x60058800, 0x05000002,
- 0x60018800, 0x1c01f000, 0x4c000000, 0x59a8003b,
+ 0x0555f47d, 0x1c01f000, 0x59a800ca, 0x80000540,
+ 0x05000008, 0x0521fd7d, 0x60280800, 0x0502000e,
+ 0x600008de, 0x58040001, 0x8000092c, 0x0501f00a,
+ 0x59c80835, 0x82040d00, 0x00001f00, 0x80040910,
+ 0x80040800, 0x59a800ca, 0x80000540, 0x05000002,
+ 0x61680804, 0x4807c857, 0x1c01f000, 0x59a800ca,
+ 0x80000540, 0x0500001c, 0x599c1a01, 0x60a80801,
+ 0x820c0480, 0x00000204, 0x0500100a, 0x61680800,
+ 0x820c0480, 0x00000404, 0x05001006, 0x60b80800,
+ 0x820c0480, 0x00000804, 0x05001002, 0x60b40800,
+ 0x4c300000, 0x600060de, 0x58301000, 0x82081500,
+ 0xfc00ffff, 0x800400e0, 0x80080540, 0x84000574,
+ 0x48006000, 0x58300000, 0x8c000534, 0x05fe07fe,
+ 0x5c006000, 0x1c01f000, 0x4c000000, 0x59a80069,
0x4803c857, 0x90000580, 0x5c000000, 0x1c01f000,
- 0x0501f805, 0x60058800, 0x05000002, 0x60018800,
- 0x1c01f000, 0x4c000000, 0x59a8003b, 0x4803c857,
- 0x90000581, 0x5c000000, 0x1c01f000, 0x0501f805,
- 0x60058800, 0x05000002, 0x60018800, 0x1c01f000,
- 0x4c000000, 0x59a8003b, 0x4803c857, 0x90000583,
- 0x5c000000, 0x1c01f000, 0x0501f805, 0x60058800,
- 0x05000002, 0x60018800, 0x1c01f000, 0x4c000000,
- 0x59a8003b, 0x4803c857, 0x90000584, 0x5c000000,
- 0x1c01f000, 0x0501f805, 0x60058800, 0x05000002,
- 0x60018800, 0x1c01f000, 0x4c000000, 0x59a8003b,
+ 0x4c000000, 0x59a80069, 0x4803c857, 0x90000581,
+ 0x5c000000, 0x1c01f000, 0x4c000000, 0x59a80069,
+ 0x4803c857, 0x90000583, 0x5c000000, 0x1c01f000,
+ 0x4c000000, 0x59a80069, 0x4803c857, 0x90000584,
+ 0x5c000000, 0x1c01f000, 0x4c000000, 0x59a80069,
0x90000582, 0x5c000000, 0x1c01f000, 0x4c000000,
- 0x4c040000, 0x4c080000, 0x4c380000, 0x59a8003e,
- 0x90000c87, 0x05f61b0a, 0x0c01f806, 0x5c007000,
+ 0x4c040000, 0x4c080000, 0x4c380000, 0x59a8006c,
+ 0x90000c87, 0x05f61a55, 0x0c01f806, 0x5c007000,
0x5c001000, 0x5c000800, 0x5c000000, 0x1c01f000,
- 0x001016f3, 0x00101700, 0x0010170d, 0x0010170e,
- 0x0010172c, 0x0010172d, 0x0010172e, 0x4803c856,
- 0x64035040, 0x600c0000, 0x0501f9aa, 0x600c0000,
- 0x0501f97e, 0x0501fa06, 0x4803c856, 0x641b503e,
- 0x60740800, 0x42001000, 0x0010172f, 0x0521f71f,
- 0x497b5043, 0x64db5038, 0x64ab5037, 0x4803c856,
- 0x64075040, 0x600c0000, 0x0501f970, 0x4803c856,
- 0x641b503e, 0x60740800, 0x42001000, 0x0010172f,
- 0x0521f712, 0x05f5fae2, 0x64db5038, 0x4803c856,
- 0x640f5040, 0x60000800, 0x0501fa00, 0x90040d1c,
+ 0x00101b93, 0x00101ba0, 0x00101bad, 0x00101bae,
+ 0x00101bcc, 0x00101bcd, 0x00101bce, 0x4803c856,
+ 0x6403506e, 0x600c0000, 0x0501f9af, 0x600c0000,
+ 0x0501f97d, 0x0501fa06, 0x4803c856, 0x641b506c,
+ 0x60740800, 0x42001000, 0x00101bcf, 0x052df449,
+ 0x497b5071, 0x64db5066, 0x64ab5065, 0x4803c856,
+ 0x6407506e, 0x600c0000, 0x0501f96f, 0x4803c856,
+ 0x641b506c, 0x60740800, 0x42001000, 0x00101bcf,
+ 0x052df43c, 0x05f5fa2d, 0x64db5066, 0x4803c856,
+ 0x640f506e, 0x60000800, 0x0501f9ff, 0x90040d1c,
0x9004059c, 0x05000008, 0x90040598, 0x05000008,
0x90040594, 0x05000008, 0x90040590, 0x05000008,
- 0x05f5fad3, 0x60040000, 0x0501f006, 0x60000000,
+ 0x05f5fa1e, 0x60040000, 0x0501f006, 0x60000000,
0x0501f004, 0x60080000, 0x0501f002, 0x600c0000,
- 0x0501f952, 0x497b5044, 0x4803c856, 0x641b503e,
- 0x60740800, 0x42001000, 0x0010172f, 0x0521f6f3,
- 0x05f5fac3, 0x05f5fac2, 0x1c01f000, 0x4c000000,
- 0x4c040000, 0x4c080000, 0x4c380000, 0x59a80040,
- 0x90000c87, 0x05f61aba, 0x0c01f806, 0x5c007000,
+ 0x0501f951, 0x497b5072, 0x4803c856, 0x641b506c,
+ 0x60740800, 0x42001000, 0x00101bcf, 0x052df41d,
+ 0x05f5fa0e, 0x05f5fa0d, 0x1c01f000, 0x4c000000,
+ 0x4c040000, 0x4c080000, 0x4c380000, 0x59a8006e,
+ 0x90000c87, 0x05f61a05, 0x0c01f806, 0x5c007000,
0x5c001000, 0x5c000800, 0x5c000000, 0x1c01f000,
- 0x00101743, 0x0010175f, 0x001017b0, 0x001017c5,
- 0x001017d9, 0x001017e2, 0x001017e3, 0x0501f990,
- 0x05020018, 0x59a81046, 0x60000800, 0x0501f9cb,
+ 0x00101be3, 0x00101bff, 0x00101c50, 0x00101c65,
+ 0x00101c79, 0x00101c82, 0x00101c83, 0x0501f990,
+ 0x05020018, 0x59a81074, 0x60000800, 0x0501f9ca,
0x90040d1c, 0x9004059c, 0x05000008, 0x90040598,
0x05000008, 0x90040594, 0x05000008, 0x90040590,
- 0x05000008, 0x05f5fa9e, 0x84081540, 0x0501f006,
+ 0x05000008, 0x05f5f9e9, 0x84081540, 0x0501f006,
0x84081542, 0x0501f004, 0x84081544, 0x0501f002,
- 0x84081546, 0x480b5046, 0x6407503e, 0x0501f003,
+ 0x84081546, 0x480b5074, 0x6407506c, 0x0501f003,
0x0501f8be, 0x05fdff9d, 0x1c01f000, 0x0501f885,
0x0500004f, 0x0501f972, 0x05020029, 0x60000800,
- 0x0501f9ae, 0x59c41001, 0x82081500, 0x00018000,
+ 0x0501f9ad, 0x59c41001, 0x82081500, 0x00018000,
0x90040d1c, 0x90040590, 0x05000042, 0x90040594,
0x05000006, 0x90040598, 0x0500000a, 0x9004059c,
- 0x0500000a, 0x05f5fa7e, 0x90080580, 0x05000039,
+ 0x0500000a, 0x05f5f9c9, 0x90080580, 0x05000039,
0x82080580, 0x00008000, 0x05000036, 0x0501f003,
- 0x90080580, 0x05000033, 0x60000800, 0x0501f997,
- 0x59a80046, 0x90040d1c, 0x90041594, 0x05000006,
+ 0x90080580, 0x05000033, 0x60000800, 0x0501f996,
+ 0x59a80074, 0x90040d1c, 0x90041594, 0x05000006,
0x90041598, 0x05000006, 0x9004159c, 0x05000006,
- 0x05f60a6b, 0x84000544, 0x0501f004, 0x84000542,
- 0x0501f002, 0x84000540, 0x48035046, 0x59a80043,
- 0x80000000, 0x48035043, 0x90000585, 0x05000003,
- 0x0501f859, 0x0501f01d, 0x497b5043, 0x59c40801,
+ 0x05f609b6, 0x84000544, 0x0501f004, 0x84000542,
+ 0x0501f002, 0x84000540, 0x48035074, 0x59a80071,
+ 0x80000000, 0x48035071, 0x90000585, 0x05000003,
+ 0x0501f859, 0x0501f01d, 0x497b5071, 0x59c40801,
0x82040d00, 0x00018000, 0x90040580, 0x0500000b,
0x82040580, 0x00008000, 0x0500000a, 0x82040580,
0x00010000, 0x05000009, 0x82040580, 0x00018000,
- 0x05000008, 0x05f5fa4e, 0x60040000, 0x0501f006,
+ 0x05000008, 0x05f5f999, 0x60040000, 0x0501f006,
0x60000000, 0x0501f004, 0x60080000, 0x0501f002,
- 0x600c0000, 0x0501f8f7, 0x640b5040, 0x0501f003,
- 0x640f503e, 0x0501f002, 0x05fdff59, 0x1c01f000,
- 0x0501f834, 0x05000013, 0x59a80037, 0x80000040,
- 0x48035037, 0x0501f91e, 0x05020004, 0x640f503e,
- 0x497b503f, 0x0501f00b, 0x59a80037, 0x80000540,
+ 0x600c0000, 0x0501f8fc, 0x640b506e, 0x0501f003,
+ 0x640f506c, 0x0501f002, 0x05fdff59, 0x1c01f000,
+ 0x0501f834, 0x05000013, 0x59a80065, 0x80000040,
+ 0x48035065, 0x0501f91e, 0x05020004, 0x640f506c,
+ 0x497b506d, 0x0501f00b, 0x59a80065, 0x80000540,
0x05020003, 0x0501f891, 0x0501f002, 0x0501f841,
- 0x0501f829, 0x497b5043, 0x64075040, 0x05fdff44,
+ 0x0501f829, 0x497b5071, 0x6407506e, 0x05fdff44,
0x1c01f000, 0x0501f81f, 0x05000012, 0x0501f90c,
- 0x0502000d, 0x59a80044, 0x80000000, 0x48035044,
- 0x90000587, 0x0502000a, 0x642b503a, 0x497b5047,
- 0x59a80046, 0x8400055e, 0x48035046, 0x4803c857,
- 0x0501f004, 0x0501f814, 0x64135040, 0x05fdff4f,
+ 0x0502000d, 0x59a80072, 0x80000000, 0x48035072,
+ 0x90000587, 0x0502000a, 0x642b5068, 0x497b5075,
+ 0x59a80074, 0x8400055e, 0x48035074, 0x4803c857,
+ 0x0501f004, 0x0501f814, 0x6413506e, 0x05fdff4f,
0x1c01f000, 0x0501f80b, 0x05000007, 0x0501f8f8,
0x05020003, 0x05fdff32, 0x0501f003, 0x0501f80a,
- 0x05fdff46, 0x1c01f000, 0x05f5fa0d, 0x05f5fa0c,
- 0x59a80038, 0x80000040, 0x48035038, 0x05000885,
- 0x1c01f000, 0x4c040000, 0x60000800, 0x0501f927,
+ 0x05fdff46, 0x1c01f000, 0x05f5f958, 0x05f5f957,
+ 0x59a80066, 0x80000040, 0x48035066, 0x05000885,
+ 0x1c01f000, 0x4c040000, 0x60000800, 0x0501f926,
0x90040d1c, 0x9004059c, 0x05000008, 0x90040598,
0x0500000a, 0x90040594, 0x0500000a, 0x90040590,
- 0x05000004, 0x05f5f9fa, 0x600c0000, 0x0501f006,
+ 0x05000004, 0x05f5f945, 0x600c0000, 0x0501f006,
0x60080000, 0x0501f004, 0x60040000, 0x0501f002,
- 0x60000000, 0x0501f8a3, 0x5c000800, 0x1c01f000,
+ 0x60000000, 0x0501f8a8, 0x5c000800, 0x1c01f000,
0x4c040000, 0x59c40801, 0x82040d00, 0x00018000,
0x90040580, 0x0500000b, 0x82040580, 0x00008000,
0x0500000c, 0x82040580, 0x00010000, 0x0500000b,
- 0x82040580, 0x00018000, 0x05000004, 0x05f5f9e0,
+ 0x82040580, 0x00018000, 0x05000004, 0x05f5f92b,
0x600c0000, 0x0501f006, 0x60080000, 0x0501f004,
- 0x60040000, 0x0501f002, 0x60000000, 0x0501f85f,
- 0x5c000800, 0x1c01f000, 0x4c040000, 0x59a80043,
- 0x80000000, 0x48035043, 0x90000585, 0x05020019,
- 0x497b5043, 0x59c40801, 0x82040d00, 0x00018000,
+ 0x60040000, 0x0501f002, 0x60000000, 0x0501f85e,
+ 0x5c000800, 0x1c01f000, 0x4c040000, 0x59a80071,
+ 0x80000000, 0x48035071, 0x90000585, 0x05020019,
+ 0x497b5071, 0x59c40801, 0x82040d00, 0x00018000,
0x90040580, 0x0500000b, 0x82040580, 0x00008000,
0x0500000c, 0x82040580, 0x00010000, 0x0500000b,
- 0x82040580, 0x00018000, 0x05000004, 0x05f5f9c0,
+ 0x82040580, 0x00018000, 0x05000004, 0x05f5f90b,
0x600c0000, 0x0501f006, 0x60080000, 0x0501f004,
- 0x60040000, 0x0501f002, 0x60000000, 0x0501f83f,
- 0x60000800, 0x0501f8d9, 0x90040d1c, 0x9004059c,
+ 0x60040000, 0x0501f002, 0x60000000, 0x0501f83e,
+ 0x60000800, 0x0501f8d8, 0x90040d1c, 0x9004059c,
0x05000008, 0x90040598, 0x0500000a, 0x90040594,
- 0x0500000a, 0x90040590, 0x05000004, 0x05f5f9ac,
+ 0x0500000a, 0x90040590, 0x05000004, 0x05f5f8f7,
0x600c0000, 0x0501f006, 0x60080000, 0x0501f004,
- 0x60040000, 0x0501f002, 0x60000000, 0x0501f855,
- 0x5c000800, 0x1c01f000, 0x4c200000, 0x59a80046,
- 0x82000500, 0x00007fff, 0x05f4099d, 0x59a84045,
- 0x80204102, 0x05f4199a, 0x48235045, 0x80204500,
+ 0x60040000, 0x0501f002, 0x60000000, 0x0501f85a,
+ 0x5c000800, 0x1c01f000, 0x4c200000, 0x59a80074,
+ 0x82000500, 0x00007fff, 0x05f408e8, 0x59a84073,
+ 0x80204102, 0x05f418e5, 0x48235073, 0x80204500,
0x05fc07fb, 0x8c000506, 0x05020008, 0x8c000504,
0x05020008, 0x8c000502, 0x05020008, 0x8c000500,
- 0x05020008, 0x05f5f98e, 0x600c0000, 0x0501f006,
+ 0x05020008, 0x05f5f8d9, 0x600c0000, 0x0501f006,
0x60080000, 0x0501f004, 0x60000000, 0x0501f002,
- 0x60040000, 0x0501f80d, 0x5c004000, 0x1c01f000,
- 0x05011000, 0x4a03c840, 0x0010ae3e, 0x6427c842,
- 0x40000000, 0x05fd17ff, 0x64235045, 0x6403503c,
- 0x1c01f000, 0x40680000, 0x4c000000, 0x0501f967,
- 0x5c000000, 0x0501fa82, 0x60080800, 0x0501f897,
- 0x82041500, 0xffffffe3, 0x59c41801, 0x820c1d00,
- 0xfffe7fff, 0x800001c0, 0x05000007, 0x90000d81,
- 0x0502000a, 0x9008055c, 0x900c1d40, 0x840c1d32,
- 0x0501f012, 0x90080558, 0x820c1d40, 0x00008000,
- 0x840c1d32, 0x0501f00d, 0x90000d82, 0x05020006,
- 0x90080554, 0x820c1d40, 0x00010000, 0x840c1d32,
- 0x0501f006, 0x90000d83, 0x05f60959, 0x90080550,
- 0x820c1d40, 0x02018000, 0x60080800, 0x0501f87f,
- 0x480f8801, 0x0501f146, 0x1c01f000, 0x40680000,
- 0x4c000000, 0x0501f938, 0x5c000000, 0x0501fa58,
- 0x60000800, 0x0501f86d, 0x82041500, 0xffffffe3,
- 0x59c41801, 0x800001c0, 0x05000006, 0x90000d81,
- 0x05020007, 0x9008055c, 0x840c1d30, 0x0501f00d,
- 0x90080558, 0x840c1d30, 0x0501f00a, 0x90000d82,
- 0x05020004, 0x90080554, 0x840c1d30, 0x0501f005,
- 0x90000d83, 0x05f60936, 0x90080550, 0x840c1d70,
- 0x480f8801, 0x60000800, 0x0501f85c, 0x0501fa2e,
- 0x0500000d, 0x4a03c014, 0x00200020, 0x60000800,
- 0x0501f84e, 0x90040d1c, 0x90040590, 0x05020004,
- 0x4a03c013, 0x00200020, 0x0501f003, 0x4a03c013,
- 0x00200000, 0x0501f11d, 0x0501f805, 0x60058800,
- 0x05000002, 0x60018800, 0x1c01f000, 0x4c580000,
+ 0x60040000, 0x0501f80c, 0x5c004000, 0x1c01f000,
+ 0x05011000, 0x4a03c840, 0x0010dc6c, 0x6427c842,
+ 0x40000000, 0x05fd17ff, 0x64235073, 0x6403506a,
+ 0x1c01f000, 0x4c000000, 0x59a800a7, 0x8c000500,
+ 0x05020002, 0x0501f960, 0x5c000000, 0x0501fa6b,
+ 0x60080800, 0x0501f894, 0x82041500, 0xffffffe3,
+ 0x59c41801, 0x820c1d00, 0xfffe7fff, 0x800001c0,
+ 0x05000007, 0x90000d81, 0x0502000a, 0x9008055c,
+ 0x900c1d40, 0x840c1d32, 0x0501f012, 0x90080558,
+ 0x820c1d40, 0x00008000, 0x840c1d32, 0x0501f00d,
+ 0x90000d82, 0x05020006, 0x90080554, 0x820c1d40,
+ 0x00010000, 0x840c1d32, 0x0501f006, 0x90000d83,
+ 0x05f608a2, 0x90080550, 0x820c1d40, 0x02018000,
+ 0x60080800, 0x0501f879, 0x480f8801, 0x59a800a7,
+ 0x8c000500, 0x05020002, 0x0501f13c, 0x1c01f000,
+ 0x1c01f000, 0x4c000000, 0x0501f92e, 0x5c000000,
+ 0x0501fa3e, 0x60000800, 0x0501f867, 0x82041500,
+ 0xffffffe3, 0x59c41801, 0x800001c0, 0x05000006,
+ 0x90000d81, 0x05020007, 0x9008055c, 0x840c1d30,
+ 0x0501f00d, 0x90080558, 0x840c1d30, 0x0501f00a,
+ 0x90000d82, 0x05020004, 0x90080554, 0x840c1d30,
+ 0x0501f005, 0x90000d83, 0x05f6087c, 0x90080550,
+ 0x840c1d70, 0x480f8801, 0x60000800, 0x0501f853,
+ 0x0501fa1c, 0x0500000d, 0x4a03c014, 0x00200020,
+ 0x60000800, 0x0501f848, 0x90040d1c, 0x90040590,
+ 0x05020004, 0x4a03c013, 0x00200020, 0x0501f003,
+ 0x4a03c013, 0x00200000, 0x0501f113, 0x4c580000,
0x6050b000, 0x8058b040, 0x05000026, 0x59c4000d,
0x8c000520, 0x05fe07fc, 0x0501f831, 0x59c4000d,
0x8c000520, 0x05fe07f8, 0x59c40808, 0x82040d40,
@@ -14428,13 +1930,12 @@ static const uint32_t isp_2500_multi_risc_code[] = {
0x6190b000, 0x59c4000d, 0x8c00051e, 0x05000005,
0x8058b040, 0x05fe07fc, 0x80000580, 0x0501f002,
0x90000541, 0x5c00b000, 0x1c01f000, 0x60080800,
- 0x0501f812, 0x82040500, 0xfffffffe, 0x60080800,
- 0x0501f816, 0x60000800, 0x0501f80c, 0x82040500,
- 0xfffffffe, 0x60000800, 0x0501f010, 0x40000000,
+ 0x0501f811, 0x82040500, 0xfffffffe, 0x60080800,
+ 0x0501f812, 0x60000800, 0x0501f80b, 0x82040500,
+ 0xfffffffe, 0x60000800, 0x0501f00c, 0x40000000,
0x40000000, 0x40000000, 0x40000000, 0x40000000,
- 0x1c01f000, 0x40680800, 0x4807880e, 0x59c4080f,
- 0x82040d00, 0x000000ff, 0x40058800, 0x1c01f000,
- 0x40680800, 0x406c0000, 0x900001c0, 0x80040d40,
+ 0x1c01f000, 0x4807880e, 0x59c4080f, 0x82040d00,
+ 0x000000ff, 0x1c01f000, 0x900001c0, 0x80040d40,
0x84040d40, 0x4807880e, 0x1c01f000, 0x82000d80,
0x00200000, 0x05000009, 0x82000d80, 0x02000000,
0x05000006, 0x82000d80, 0x01000000, 0x05000006,
@@ -14443,161 +1944,168 @@ static const uint32_t isp_2500_multi_risc_code[] = {
0x480388a3, 0x480788a3, 0x1c01f000, 0x59c400a3,
0x84000556, 0x480388a3, 0x84000516, 0x480388a3,
0x1c01f000, 0x485fc857, 0x4863c857, 0x4c640000,
- 0x4d3c0000, 0x4d400000, 0x0525fb55, 0x48635009,
- 0x40601800, 0x60002000, 0x0501f8b6, 0x42000000,
- 0x0010b238, 0x0545f900, 0x82600500, 0x0000ff00,
+ 0x4d3c0000, 0x4d400000, 0x0535fa7b, 0x48635009,
+ 0x40601800, 0x60002000, 0x0501f8b5, 0x42000000,
+ 0x0010e3b1, 0x0559f9fb, 0x82600500, 0x0000ff00,
0x82000580, 0x0000f700, 0x05020004, 0x42000000,
- 0x0010b220, 0x0545f8f8, 0x0545fa07, 0x05020085,
+ 0x0010e399, 0x0559f9f3, 0x0559fb02, 0x05020084,
0x82600d00, 0x0000ff00, 0x61fe41ff, 0x800409c0,
0x0500001b, 0x82041580, 0x0000f700, 0x05000013,
0x82041580, 0x0000f800, 0x05000010, 0x82041580,
0x0000ff00, 0x6000c800, 0x05000029, 0x840439c0,
- 0x0501fe32, 0x05020019, 0x83200400, 0x0010a3b3,
+ 0x0505f82c, 0x05020019, 0x83200400, 0x0010d17b,
0x50024800, 0x59240200, 0x8c000500, 0x05000013,
- 0x6004c800, 0x0501f01e, 0x42024800, 0x0010b391,
+ 0x6004c800, 0x0501f01e, 0x42024800, 0x0010e512,
0x59240200, 0x8c000502, 0x0500000c, 0x59c410a3,
0x82081500, 0x00008000, 0x05000008, 0x59c410a7,
0x82081500, 0x0000ff00, 0x82081580, 0x0000ff00,
0x6000c800, 0x0500000e, 0x8d0c0502, 0x05020007,
0x8d0c0500, 0x0502000a, 0x599c1017, 0x8c08051a,
- 0x0500004e, 0x850e1d42, 0x61fe41ff, 0x6008c800,
+ 0x0500004d, 0x850e1d42, 0x61fe41ff, 0x6008c800,
0x60128000, 0x60227800, 0x0501f004, 0x850e1d40,
0x60128000, 0x417a7800, 0x59a80005, 0x8c000502,
- 0x05020004, 0x8d0c050a, 0x05020046, 0x850e1d4a,
- 0x42000000, 0x0010b21f, 0x0545f8b3, 0x59a81809,
- 0x604c1100, 0x050dfc38, 0x83200580, 0x0000ffff,
+ 0x05020004, 0x8d0c050a, 0x05020045, 0x850e1d4a,
+ 0x42000000, 0x0010e398, 0x0559f9ae, 0x59a81809,
+ 0x604c1100, 0x0515f9ab, 0x83200580, 0x0000ffff,
0x05000018, 0x59240400, 0x8c000508, 0x05000009,
- 0x417a7800, 0x4d300000, 0x417a6000, 0x0501fe2d,
- 0x5c026000, 0x59240400, 0x8c00050a, 0x05020031,
+ 0x417a7800, 0x4d300000, 0x417a6000, 0x0505f82a,
+ 0x5c026000, 0x59240400, 0x8c00050a, 0x05020030,
0x4d400000, 0x82600500, 0x000000ff, 0x61fe89ff,
- 0x40643000, 0x603a8000, 0x0541f98b, 0x60040800,
- 0x60001002, 0x0521fd1b, 0x5c028000, 0x0501f025,
+ 0x40643000, 0x603a8000, 0x0555f960, 0x60040800,
+ 0x60001002, 0x0531f8fb, 0x5c028000, 0x0501f024,
0x8d0c0520, 0x05000018, 0x4c580000, 0x42024800,
- 0x0010b391, 0x0545f9ad, 0x4d400000, 0x59240200,
+ 0x0010e512, 0x0559faa3, 0x4d400000, 0x59240200,
0x8c000500, 0x05000004, 0x60040800, 0x60001002,
- 0x0521fd0c, 0x91264c0b, 0x8058b040, 0x05fe07f8,
- 0x603a8000, 0x61fe89ff, 0x40643000, 0x0541f972,
+ 0x0531f8ec, 0x91264c0d, 0x8058b040, 0x05fe07f8,
+ 0x603a8000, 0x61fe89ff, 0x40643000, 0x0555f947,
0x5c028000, 0x5c00b000, 0x599c0817, 0x8c04050a,
- 0x0502000c, 0x493fc857, 0x4943c857, 0x0201f800,
- 0x0010edf3, 0x0501f007, 0x8d0c0520, 0x05000005,
- 0x603e8000, 0x61fe89ff, 0x60003000, 0x0541f965,
- 0x497b8880, 0x5c028000, 0x5c027800, 0x5c00c800,
- 0x1c01f000, 0x60000800, 0x05fdff38, 0x90040542,
- 0x60000800, 0x05fdf73d, 0x60080800, 0x05fdff33,
- 0x90040542, 0x60080800, 0x05fdf738, 0x60080800,
- 0x05fdff2e, 0x82040500, 0xfffffffd, 0x90000550,
- 0x60080800, 0x05fdf731, 0x60000800, 0x05fdff27,
- 0x82040500, 0xfffffffd, 0x90000550, 0x60000800,
- 0x05fdf72a, 0x59c408a8, 0x05fdff19, 0x05fdff18,
- 0x59c400a8, 0x80040d80, 0x05fe07fb, 0x1c01f000,
- 0x59a80005, 0x8c000500, 0x05000008, 0x59a80008,
- 0x8c000500, 0x05020005, 0x84000540, 0x48035008,
- 0x60581100, 0x050dfbcc, 0x1c01f000, 0x1c01f000,
- 0x59c40801, 0x82040d00, 0x00018000, 0x82040d80,
- 0x00018000, 0x05000002, 0x84081518, 0x480b88a3,
- 0x1c01f000, 0x42000800, 0x7ff4818e, 0x59e00002,
- 0x8c00051e, 0x05020003, 0x42000800, 0x7ff4808e,
- 0x58041800, 0x480f504f, 0x8c0c0500, 0x05020007,
- 0x8c0c0502, 0x05000005, 0x58044001, 0x58042002,
- 0x58041003, 0x0501f007, 0x42004000, 0x0003c014,
- 0x42002000, 0x0003c014, 0x42001000, 0x0002e014,
- 0x480b5049, 0x4813504a, 0x4823504b, 0x8c0c0500,
- 0x05020007, 0x8c0c0504, 0x05000005, 0x58044004,
- 0x58042005, 0x58041006, 0x0501f004, 0x60c8400d,
- 0x60c8200d, 0x60c8100d, 0x480b504c, 0x4813504d,
- 0x4823504e, 0x1c01f000, 0x59a8104c, 0x59a8204d,
- 0x59a8404e, 0x60380840, 0x05fdfed8, 0x82040d00,
- 0xffffffc0, 0x82200500, 0x003f0000, 0x80000120,
- 0x80040540, 0x60380840, 0x05fdfed8, 0x60380848,
- 0x05fdfece, 0x82040d00, 0xffffffc0, 0x82200500,
- 0x0000fc00, 0x80000114, 0x80040540, 0x60380848,
- 0x05fdfece, 0x82200500, 0x000003e0, 0x8000010a,
- 0x603808d8, 0x05fdfec9, 0x9020051f, 0x603808f0,
- 0x05fdfec6, 0x82100500, 0x003f0000, 0x80000120,
- 0x60380908, 0x05fdfec1, 0x82100500, 0x0000fc00,
- 0x80000114, 0x60380918, 0x05fdfebc, 0x82100500,
- 0x000003e0, 0x8000010a, 0x603808e0, 0x05fdfeb7,
- 0x9010051f, 0x603808f8, 0x05fdfeb4, 0x82080500,
- 0x003f0000, 0x80000120, 0x60380910, 0x05fdfeaf,
- 0x82080500, 0x0000fc00, 0x80000114, 0x60380920,
- 0x05fdfeaa, 0x82080500, 0x000003e0, 0x8000010a,
- 0x603808e8, 0x05fdfea5, 0x9008051f, 0x60380900,
- 0x05fdfea2, 0x1c01f000, 0x59a81049, 0x59a8204a,
- 0x59a8404b, 0x9020051f, 0x800000c2, 0x84000540,
- 0x60480800, 0x05fdfe99, 0x82200500, 0x000001e0,
- 0x80000908, 0x84040d40, 0x82200500, 0x00000600,
- 0x80000106, 0x8400054a, 0x80040540, 0x60480830,
- 0x05fdfe8e, 0x82200500, 0x00001800, 0x80000916,
- 0x82200500, 0x0003e000, 0x80000114, 0x84000544,
- 0x80040540, 0x60480848, 0x05fdfe84, 0x9010051f,
- 0x800000c2, 0x84000540, 0x60480808, 0x05fdfe7f,
- 0x82100500, 0x000001e0, 0x80000908, 0x84040d40,
- 0x82100500, 0x00000600, 0x80000106, 0x8400054a,
- 0x80040540, 0x60480838, 0x05fdfe74, 0x82100500,
- 0x00001800, 0x80000916, 0x82100500, 0x0003e000,
- 0x80000114, 0x84000544, 0x80040540, 0x60480850,
- 0x05fdfe6a, 0x9008051f, 0x800000c2, 0x84000540,
- 0x60480810, 0x05fdfe65, 0x82080500, 0x000001e0,
- 0x80000908, 0x84040d40, 0x82080500, 0x00000600,
- 0x80000106, 0x8400054a, 0x80040540, 0x60480840,
- 0x05fdfe5a, 0x82080500, 0x00001800, 0x80000916,
- 0x82080500, 0x0003e000, 0x80000114, 0x84000544,
- 0x80040540, 0x60480858, 0x05fdfe50, 0x1c01f000,
- 0x0501f805, 0x60058800, 0x05000002, 0x60018800,
- 0x1c01f000, 0x4c000000, 0x050dfc26, 0x05020003,
+ 0x0502000b, 0x493fc857, 0x4943c857, 0x0501fc6b,
+ 0x0501f007, 0x8d0c0520, 0x05000005, 0x603e8000,
+ 0x61fe89ff, 0x60003000, 0x0555f93b, 0x497b8880,
+ 0x5c028000, 0x5c027800, 0x5c00c800, 0x1c01f000,
+ 0x60000800, 0x05fdff3c, 0x90040542, 0x60000800,
+ 0x05fdf73e, 0x60080800, 0x05fdff37, 0x90040542,
+ 0x60080800, 0x05fdf739, 0x60080800, 0x05fdff32,
+ 0x82040500, 0xfffffffd, 0x90000550, 0x60080800,
+ 0x05fdf732, 0x60000800, 0x05fdff2b, 0x82040500,
+ 0xfffffffd, 0x90000550, 0x60000800, 0x05fdf72b,
+ 0x59c408a8, 0x05fdff1e, 0x05fdff1d, 0x59c400a8,
+ 0x80040d80, 0x05fe07fb, 0x1c01f000, 0x59a80005,
+ 0x8c000500, 0x05000008, 0x59a80008, 0x8c000500,
+ 0x05020005, 0x84000540, 0x48035008, 0x60581100,
+ 0x0515f940, 0x1c01f000, 0x1c01f000, 0x59c40801,
+ 0x82040d00, 0x00018000, 0x82040d80, 0x00018000,
+ 0x05000002, 0x84081518, 0x480b88a3, 0x1c01f000,
+ 0x42000800, 0x7ff4818e, 0x59e00002, 0x8c00051e,
+ 0x05020003, 0x42000800, 0x7ff4808e, 0x58041800,
+ 0x480f5084, 0x8c0c0500, 0x05020007, 0x8c0c0502,
+ 0x05000005, 0x58044001, 0x58042002, 0x58041003,
+ 0x0501f007, 0x42004000, 0x0003c014, 0x42002000,
+ 0x0003c014, 0x42001000, 0x0002e014, 0x480b507e,
+ 0x4813507f, 0x48235080, 0x8c0c0500, 0x05020007,
+ 0x8c0c0504, 0x05000005, 0x58044004, 0x58042005,
+ 0x58041006, 0x0501f004, 0x60c8400d, 0x60c8200d,
+ 0x60c8100d, 0x480b5081, 0x48135082, 0x48235083,
+ 0x1c01f000, 0x59a81081, 0x59a82082, 0x59a84083,
+ 0x60380840, 0x05fdfedc, 0x82040d00, 0xffffffc0,
+ 0x82200500, 0x003f0000, 0x80000120, 0x80040540,
+ 0x60380840, 0x05fdfed9, 0x60380848, 0x05fdfed2,
+ 0x82040d00, 0xffffffc0, 0x82200500, 0x0000fc00,
+ 0x80000114, 0x80040540, 0x60380848, 0x05fdfecf,
+ 0x82200500, 0x000003e0, 0x8000010a, 0x603808d8,
+ 0x05fdfeca, 0x9020051f, 0x603808f0, 0x05fdfec7,
+ 0x82100500, 0x003f0000, 0x80000120, 0x60380908,
+ 0x05fdfec2, 0x82100500, 0x0000fc00, 0x80000114,
+ 0x60380918, 0x05fdfebd, 0x82100500, 0x000003e0,
+ 0x8000010a, 0x603808e0, 0x05fdfeb8, 0x9010051f,
+ 0x603808f8, 0x05fdfeb5, 0x82080500, 0x003f0000,
+ 0x80000120, 0x60380910, 0x05fdfeb0, 0x82080500,
+ 0x0000fc00, 0x80000114, 0x60380920, 0x05fdfeab,
+ 0x82080500, 0x000003e0, 0x8000010a, 0x603808e8,
+ 0x05fdfea6, 0x9008051f, 0x60380900, 0x05fdfea3,
+ 0x1c01f000, 0x59a8107e, 0x59a8207f, 0x59a84080,
+ 0x9020051f, 0x800000c2, 0x84000540, 0x60480800,
+ 0x05fdfe9a, 0x82200500, 0x000001e0, 0x80000908,
+ 0x84040d40, 0x82200500, 0x00000600, 0x80000106,
+ 0x8400054a, 0x80040540, 0x60480830, 0x05fdfe8f,
+ 0x82200500, 0x00001800, 0x80000916, 0x82200500,
+ 0x0003e000, 0x80000114, 0x84000544, 0x80040540,
+ 0x60480848, 0x05fdfe85, 0x9010051f, 0x800000c2,
+ 0x84000540, 0x60480808, 0x05fdfe80, 0x82100500,
+ 0x000001e0, 0x80000908, 0x84040d40, 0x82100500,
+ 0x00000600, 0x80000106, 0x8400054a, 0x80040540,
+ 0x60480838, 0x05fdfe75, 0x82100500, 0x00001800,
+ 0x80000916, 0x82100500, 0x0003e000, 0x80000114,
+ 0x84000544, 0x80040540, 0x60480850, 0x05fdfe6b,
+ 0x9008051f, 0x800000c2, 0x84000540, 0x60480810,
+ 0x05fdfe66, 0x82080500, 0x000001e0, 0x80000908,
+ 0x84040d40, 0x82080500, 0x00000600, 0x80000106,
+ 0x8400054a, 0x80040540, 0x60480840, 0x05fdfe5b,
+ 0x82080500, 0x00001800, 0x80000916, 0x82080500,
+ 0x0003e000, 0x80000114, 0x84000544, 0x80040540,
+ 0x60480858, 0x05fdfe51, 0x1c01f000, 0x4c000000,
+ 0x0515fbe9, 0x05000007, 0x0515f99d, 0x05020003,
0x90000541, 0x0501f003, 0x59e00013, 0x8c00050e,
- 0x5c000000, 0x1c01f000, 0x0501f805, 0x60058800,
- 0x05000002, 0x60018800, 0x1c01f000, 0x4c140000,
- 0x4a03c013, 0x03800300, 0x4a03c014, 0x03800380,
- 0x60800801, 0x60281000, 0x0505fcc1, 0x05000002,
- 0x8c14050c, 0x4a03c014, 0x03800000, 0x5c002800,
- 0x1c01f000, 0x4c000000, 0x59a8004f, 0x8c000508,
- 0x05020004, 0x90000541, 0x5c000000, 0x1c01f000,
- 0x80000580, 0x05fdf7fd, 0x05fdfff7, 0x60058800,
- 0x05000002, 0x60018800, 0x1c01f000, 0x4c5c0000,
- 0x4000b800, 0x59a80048, 0x82000d80, 0xaabbccdd,
- 0x0500000f, 0x90000c85, 0x05f21eed, 0x4c000000,
- 0x050dfbd2, 0x5c000000, 0x05020003, 0x0c01f81a,
- 0x0501f016, 0x4c000000, 0x050dfbe3, 0x5c000000,
- 0x05fc07fb, 0x0c01f819, 0x0501f010, 0x05fdffde,
- 0x0500000e, 0x8d0c051a, 0x0500000c, 0x05fdffbe,
- 0x0502000a, 0x05fdffca, 0x05020005, 0x905c0d83,
- 0x05020006, 0x6008b800, 0x0501f004, 0x905c0d81,
- 0x05020002, 0x600cb800, 0x405c0000, 0x5c00b800,
- 0x1c01f000, 0x00101b2b, 0x00101b2c, 0x00101b2d,
- 0x00101b2e, 0x00101b32, 0x00101b33, 0x00101b35,
- 0x00101b45, 0x00101b53, 0x00101b63, 0x1c01f000,
- 0x1c01f000, 0x1c01f000, 0x905c0d83, 0x05020002,
- 0x6008b800, 0x1c01f000, 0x1c01f000, 0x6004b800,
- 0x1c01f000, 0x05fdffb8, 0x05000007, 0x05fdff9a,
- 0x05020005, 0x05fdffa6, 0x05000003, 0x6000b800,
- 0x0501f008, 0x905c0d83, 0x05020003, 0x6000b800,
- 0x0501f004, 0x905c0d82, 0x05020002, 0x05f1feac,
- 0x1c01f000, 0x05fdffa8, 0x0500000c, 0x05fdff8a,
- 0x0502000a, 0x05fdff96, 0x05020005, 0x905c0d83,
- 0x05020006, 0x6008b800, 0x0501f004, 0x905c0d81,
- 0x05020002, 0x600cb800, 0x1c01f000, 0x05fdff9a,
- 0x0500000b, 0x05fdff7c, 0x05020009, 0x05fdff88,
- 0x05020002, 0x0501f006, 0x905c0d83, 0x05000006,
- 0x905c0d81, 0x05000004, 0x0501f004, 0x905c0d83,
- 0x05020002, 0x6008b800, 0x1c01f000, 0x05fdff8a,
- 0x05000006, 0x05fdff6c, 0x05020004, 0x05fdff78,
- 0x05020002, 0x0501f004, 0x905c0d81, 0x05020002,
- 0x600cb800, 0x1c01f000, 0x4803c856, 0x4c5c0000,
- 0x4c600000, 0x4c640000, 0x4c580000, 0x497b5050,
- 0x4200c000, 0x7ff52000, 0x050dfb82, 0x05020007,
- 0x4803c856, 0x4a03c014, 0x07e30000, 0x59e0c813,
- 0x0501f8bb, 0x0501f014, 0x59a8005c, 0x82000d80,
- 0x3261103c, 0x050200b1, 0x4803c856, 0x42000800,
+ 0x5c000000, 0x1c01f000, 0x4c140000, 0x4a03c013,
+ 0x03800300, 0x4a03c014, 0x03800380, 0x60800801,
+ 0x60281000, 0x0509faf3, 0x05000002, 0x8c14050c,
+ 0x4a03c014, 0x03800000, 0x5c002800, 0x1c01f000,
+ 0x4c000000, 0x59a80084, 0x90000510, 0x90000590,
+ 0x5c000000, 0x1c01f000, 0x4c5c0000, 0x4000b800,
+ 0x59a80076, 0x82000d80, 0xaabbccdd, 0x0500000f,
+ 0x90000c85, 0x05f21e4d, 0x4c000000, 0x0515f95b,
+ 0x5c000000, 0x05020003, 0x0c01f81a, 0x0501f016,
+ 0x4c000000, 0x0515f96c, 0x5c000000, 0x05fc07fb,
+ 0x0c01f819, 0x0501f010, 0x05fdffe6, 0x0500000e,
+ 0x8d0c051a, 0x0500000c, 0x05fdffc9, 0x0502000a,
+ 0x05fdffd2, 0x05020005, 0x905c0d83, 0x05020006,
+ 0x6008b800, 0x0501f004, 0x905c0d81, 0x05020002,
+ 0x600cb800, 0x405c0000, 0x5c00b800, 0x1c01f000,
+ 0x00101fb6, 0x00101fb7, 0x00101fb8, 0x00101fb9,
+ 0x00101fbd, 0x00101fbe, 0x00101fc0, 0x00101fd0,
+ 0x00101fde, 0x00101fee, 0x1c01f000, 0x1c01f000,
+ 0x1c01f000, 0x905c0d83, 0x05020002, 0x6008b800,
+ 0x1c01f000, 0x1c01f000, 0x6004b800, 0x1c01f000,
+ 0x05fdffc0, 0x05000007, 0x05fdffa5, 0x05020005,
+ 0x05fdffae, 0x05000003, 0x6000b800, 0x0501f008,
+ 0x905c0d83, 0x05020003, 0x6000b800, 0x0501f004,
+ 0x905c0d82, 0x05020002, 0x05f1fe0c, 0x1c01f000,
+ 0x05fdffb0, 0x0500000c, 0x05fdff95, 0x0502000a,
+ 0x05fdff9e, 0x05020005, 0x905c0d83, 0x05020006,
+ 0x6008b800, 0x0501f004, 0x905c0d81, 0x05020002,
+ 0x600cb800, 0x1c01f000, 0x05fdffa2, 0x05000006,
+ 0x05fdff87, 0x05020009, 0x05fdff90, 0x05020002,
+ 0x0501f006, 0x905c0d83, 0x05000006, 0x905c0d81,
+ 0x05000004, 0x0501f004, 0x905c0d83, 0x05020002,
+ 0x6008b800, 0x1c01f000, 0x05fdff92, 0x05000006,
+ 0x05fdff77, 0x05020004, 0x05fdff80, 0x05020002,
+ 0x0501f004, 0x905c0d81, 0x05020002, 0x600cb800,
+ 0x1c01f000, 0x4803c856, 0x4c5c0000, 0x4c600000,
+ 0x4c640000, 0x4c580000, 0x497b5086, 0x4200c000,
+ 0x7ff52000, 0x0515f906, 0x05020031, 0x4803c856,
+ 0x0515f91b, 0x05020029, 0x4803c856, 0x4a03c014,
+ 0x07030701, 0x0501f965, 0x4a03c013, 0x07010701,
+ 0x0501f9ef, 0x0501fa1f, 0x0501f981, 0x4201d000,
+ 0x000f4240, 0x0529fff4, 0x0501f95c, 0x0501f9e8,
+ 0x0501fa23, 0x61800801, 0x600c1000, 0x60801801,
+ 0x0509fa1e, 0x05f00dc1, 0x61800801, 0x60001000,
+ 0x0509fa50, 0x05f00dbd, 0x4817c857, 0x90141d50,
+ 0x61800801, 0x60041000, 0x0509fa14, 0x05f00db7,
+ 0x0501f9df, 0x6140b801, 0x0509fa37, 0x05f00db3,
+ 0x4867c857, 0x4c640000, 0x0501f96b, 0x0501f964,
+ 0x5c00c800, 0x0501f01c, 0x4a03c014, 0x07e30000,
+ 0x59e0c813, 0x0501f8be, 0x0501f017, 0x59a80092,
+ 0x82000d80, 0x3261103c, 0x05000004, 0x82000d80,
+ 0x338e103c, 0x050200b1, 0x4803c856, 0x42000800,
0x7ff481e6, 0x59e06802, 0x8c34051e, 0x05020003,
0x42000800, 0x7ff480e6, 0x50040000, 0x4803c857,
- 0x48035057, 0x8c00051e, 0x050000a4, 0x8200cd00,
- 0x000000ff, 0x4867c857, 0x48675051, 0x50600800,
- 0x48075052, 0x4807c857, 0x82040d80, 0x53434651,
- 0x05020098, 0x8060c000, 0x50600800, 0x48075053,
- 0x8060c000, 0x50600800, 0x48075054, 0x8060c000,
- 0x50600800, 0x48075055, 0x8060c000, 0x50600800,
- 0x82040d00, 0x0000ffff, 0x48075056, 0x4200c000,
+ 0x4803508d, 0x8c00051e, 0x050000a4, 0x8200cd00,
+ 0x000000ff, 0x4867c857, 0x48675087, 0x50600800,
+ 0x48075088, 0x4807c857, 0x82040d80, 0x53434651,
+ 0x05020098, 0x8060c000, 0x50600800, 0x48075089,
+ 0x8060c000, 0x50600800, 0x4807508a, 0x8060c000,
+ 0x50600800, 0x4807508b, 0x8060c000, 0x50600800,
+ 0x82040d00, 0x0000ffff, 0x4807508c, 0x4200c000,
0x7ff52002, 0x5060b800, 0x825cbd00, 0xffff0000,
0x805cb920, 0x805cb800, 0x05001082, 0x8c5c051e,
0x05020080, 0x59e06802, 0x8c34051e, 0x0502006a,
@@ -14605,34 +2113,34 @@ static const uint32_t isp_2500_multi_risc_code[] = {
0x82183500, 0x0000ffff, 0x05000011, 0x80180497,
0x05021074, 0x8060c000, 0x50602000, 0x82100500,
0xffff0000, 0x80000120, 0x82100d00, 0x0000ffff,
- 0x4803c857, 0x4807c857, 0x4c180000, 0x05fdfd53,
+ 0x4803c857, 0x4807c857, 0x4c180000, 0x05fdfd37,
0x5c003000, 0x80183040, 0x05fe07f3, 0x41780800,
- 0x40641000, 0x60100000, 0x0521fb30, 0x59e06802,
+ 0x40641000, 0x60100000, 0x052dff08, 0x59e06802,
0x8c34051e, 0x05020057, 0x4200c000, 0x7ff52005,
0x8008c418, 0x5060c800, 0x800409c0, 0x0500000a,
0x90041581, 0x05020003, 0x8064c910, 0x0501f006,
0x90041582, 0x05020003, 0x8064c920, 0x0501f002,
0x8064c930, 0x8264cd00, 0x000000ff, 0x4867c857,
- 0x48675058, 0x42001000, 0x7ff52002, 0x50080000,
+ 0x4867508e, 0x42001000, 0x7ff52002, 0x50080000,
0x82000500, 0x0000ffff, 0x4803c857, 0x8c00051e,
0x05020044, 0x80640480, 0x05021042, 0x40640800,
- 0x405c1000, 0x0521faf1, 0x4803c857, 0x800001c0,
+ 0x405c1000, 0x052dfec9, 0x4803c857, 0x800001c0,
0x0502003c, 0x59e06802, 0x8c34051e, 0x05020034,
0x4200c000, 0x7ff52045, 0x805cc418, 0x8004c418,
0x05001034, 0x05000033, 0x4863c857, 0x50600000,
- 0x82000500, 0x0000ffff, 0x48035059, 0x8c00051e,
+ 0x82000500, 0x0000ffff, 0x4803508f, 0x8c00051e,
0x0502002c, 0x4803c857, 0x80000c97, 0x05021029,
- 0x40601000, 0x80081000, 0x50080800, 0x4807505a,
- 0x80081000, 0x50080800, 0x4807505b, 0x4000b800,
+ 0x40601000, 0x80081000, 0x50080800, 0x48075090,
+ 0x80081000, 0x50080800, 0x48075091, 0x4000b800,
0x8060c000, 0x50602000, 0x82100500, 0xffff0000,
0x80000120, 0x82100d00, 0x0000ffff, 0x4803c857,
- 0x4807c857, 0x05fdfd01, 0x805cb840, 0x05fe07f5,
+ 0x4807c857, 0x05fdfce5, 0x805cb840, 0x05fe07f5,
0x0501f016, 0x4803c856, 0x42000000, 0x7ff52001,
0x5000b000, 0x8258b500, 0xffff0000, 0x8058b124,
0x8258c400, 0x7ff52000, 0xb060c400, 0x05fdf790,
0x8258c400, 0x7ff52000, 0x05fdf7aa, 0x8258c400,
0x7ff52000, 0xb060c400, 0x805cc418, 0x05fdf7cc,
- 0x4a035050, 0xdeaddead, 0x5c00b000, 0x5c00c800,
+ 0x4a035086, 0xdeaddead, 0x5c00b000, 0x5c00c800,
0x5c00c000, 0x5c00b800, 0x1c01f000, 0x4867c857,
0x90640d20, 0x8004690a, 0x82640d00, 0x00000400,
0x80040912, 0x80046d4d, 0x90640d01, 0x800408c4,
@@ -14641,644 +2149,992 @@ static const uint32_t isp_2500_multi_risc_code[] = {
0x82640d00, 0x00000080, 0x80040904, 0x80046d4d,
0xb0640d00, 0x80046d4d, 0x82640d00, 0x00000200,
0x80040904, 0x80046d4d, 0x8234cd00, 0x000000ff,
- 0x1c01f000, 0x050dfab4, 0x0502000d, 0x4803c856,
+ 0x1c01f000, 0x0515f809, 0x0502000d, 0x4803c856,
0x4a03c014, 0x18001800, 0x4a03c013, 0x18000800,
- 0x05fdfcaf, 0x4a03c013, 0x18000000, 0x61a1d007,
- 0x0521f9e1, 0x4a03c013, 0x18000800, 0x1c01f000,
- 0x050dfaa5, 0x0502000d, 0x4803c856, 0x4a03c014,
- 0x18001800, 0x4a03c013, 0x18001800, 0x05fdfca0,
- 0x4a03c013, 0x18001000, 0x61a1d007, 0x0521f9d2,
- 0x4a03c013, 0x18001800, 0x1c01f000, 0x050dfa96,
- 0x0502000c, 0x60041800, 0x42001000, 0x0010ae51,
- 0x60900800, 0x60002180, 0x50080000, 0x82000500,
- 0x000000ff, 0x4803c857, 0x050dfb2d, 0x05f00d70,
- 0x1c01f000, 0x4803c856, 0x59a80006, 0x8c00051e,
- 0x05020008, 0x61f2880f, 0x42003000, 0x00fffffc,
- 0x0511fd63, 0x05020007, 0x0501f808, 0x05000005,
- 0x4a03501c, 0x0000ffff, 0x90000541, 0x1c01f000,
- 0x80000580, 0x05fdf7fe, 0x4937c857, 0x0529fa6a,
- 0x05000011, 0x4926601d, 0x4936600a, 0x0535fc2b,
- 0x64066407, 0x417a7800, 0x0511fd19, 0x600c0800,
- 0x0511fd22, 0x59a8001d, 0x80000000, 0x4803501d,
- 0x599c0208, 0x48026c12, 0x600a7000, 0x0005fc78,
- 0x90000541, 0x1c01f000, 0x40681000, 0x0501f805,
- 0x60018800, 0x05000002, 0x60058800, 0x1c01f000,
- 0x480bc857, 0x492fc857, 0x4923c857, 0x4927c857,
- 0x4c5c0000, 0x4008b800, 0x61f6880f, 0x42003000,
- 0x00fffffd, 0x0511fd36, 0x0502001b, 0x5934000a,
- 0x84000544, 0x4802680a, 0x0529fa43, 0x05000016,
- 0x4926601d, 0x4936600a, 0x812e59c0, 0x05000006,
- 0x592c0405, 0x8c00051e, 0x05000003, 0x48ee602d,
- 0x0501f004, 0x59a8021b, 0x8400055c, 0x4803521b,
- 0x492e6009, 0x64066407, 0x485e601e, 0x0535fbf7,
- 0x608a7000, 0x0005fc78, 0x90000541, 0x5c00b800,
- 0x1c01f000, 0x80000580, 0x05fdf7fd, 0x4933c857,
- 0x59a8021b, 0x8c000508, 0x05020010, 0x5930500a,
- 0x482bc857, 0x916c0582, 0x0502000c, 0x0501f815,
- 0x0502000a, 0x58280403, 0x82000580, 0x000007fc,
- 0x05000007, 0x59a80016, 0x80000040, 0x4803c857,
- 0x05f01d0b, 0x48035016, 0x1c01f000, 0x59300429,
- 0x900005a1, 0x05fc07fd, 0x59a8001d, 0x80000040,
- 0x4803c857, 0x05fc17f9, 0x4803501d, 0x1c01f000,
- 0x59300009, 0x800001c0, 0x05020007, 0x59300403,
- 0x90000581, 0x05020003, 0x90000541, 0x0501f002,
- 0x80000580, 0x1c01f000, 0x4933c857, 0x493fc857,
- 0x4947c857, 0x4927c857, 0x4d400000, 0x4d340000,
- 0x4d440000, 0x4c580000, 0x0521fc3d, 0x4df00000,
- 0x8060c1c0, 0x05020003, 0x6004b000, 0x0501f003,
- 0x61c0b00f, 0x417a8800, 0x41440000, 0x81ac0400,
- 0x50000000, 0x80026d40, 0x0500001b, 0x59245005,
- 0x59340013, 0x82000500, 0x00ffffff, 0x80280580,
- 0x05020015, 0x4d3c0000, 0x60067800, 0x0511ffd2,
- 0x5c027800, 0x60a68000, 0x0201f800, 0x0010f260,
- 0x0201f800, 0x0010f344, 0x0201f800, 0x0010f3dd,
- 0x0515f857, 0x05020005, 0x4937c857, 0x4a026c00,
- 0x00000404, 0x0501f002, 0x0515f881, 0x0201f800,
- 0x0010f7f5, 0x81468800, 0x8058b040, 0x05fe07df,
- 0x5c03e000, 0x05200bfe, 0x5c00b000, 0x5c028800,
- 0x5c026800, 0x5c028000, 0x1c01f000, 0x4937c857,
- 0x4947c857, 0x4c5c0000, 0x4c600000, 0x4c640000,
- 0x59a80073, 0x8c000500, 0x0500001d, 0x599c0017,
- 0x8c00050a, 0x0502001a, 0x5934ba02, 0x825cbd00,
- 0x000000ff, 0x485fc857, 0x4178c000, 0x4178c800,
- 0x82600400, 0x0010cea4, 0x50002000, 0x8060c1c0,
- 0x05000008, 0x82100500, 0x000000ff, 0x82002d80,
- 0x000000ff, 0x0500000a, 0x805c0580, 0x0500000a,
- 0x80102110, 0x8064c800, 0x90640584, 0x05fe07f6,
- 0x8060c000, 0x906005a0, 0x05fe07ed, 0x4813c857,
- 0x90000541, 0x5c00c800, 0x5c00c000, 0x5c00b800,
- 0x1c01f000, 0x59a8021b, 0x8c000512, 0x05f20d4e,
- 0x1c01f000, 0x4c5c0000, 0x4c600000, 0x4c640000,
- 0x4c500000, 0x6004b000, 0x42024800, 0x0010b391,
- 0x417a4000, 0x61fa880f, 0x0541fe17, 0x05000020,
- 0x0541fdf6, 0x5924ba00, 0x8c5c0500, 0x05000079,
- 0x59a8a21b, 0x8c500506, 0x0500000d, 0x825c0500,
- 0x000000e0, 0x82000580, 0x000000e0, 0x05000071,
- 0x0501f87e, 0x59a80016, 0x4923c857, 0x4803c857,
- 0x80000000, 0x48035016, 0x0501f06a, 0x8c5c051e,
- 0x05000068, 0x4927c856, 0x6004b000, 0x825c0500,
- 0x000000e1, 0x48024a00, 0x485fc857, 0x825cc500,
- 0x000000e0, 0x0502001f, 0x0501f018, 0x0515fda7,
- 0x05000002, 0x0541fdd9, 0x5924ba00, 0x8c5c0500,
- 0x05000058, 0x0541fdf0, 0x05000005, 0x59a8021b,
- 0x8c00050e, 0x05020013, 0x0501f004, 0x83240d80,
- 0x0010b391, 0x0502000f, 0x825cc500, 0x000000e0,
- 0x0502000c, 0x0515fd95, 0x05000004, 0x42000800,
- 0xffffff1d, 0x0501fa91, 0x59a8021b, 0x82000500,
- 0xffffdafc, 0x8400054e, 0x4803521b, 0x0501f006,
- 0x82600580, 0x000000e0, 0x05020047, 0x8c5c050e,
- 0x0502003c, 0x5924c809, 0x9064040e, 0x50000000,
- 0x4803c857, 0x80026d40, 0x05000011, 0x0515fd7f,
- 0x05000013, 0x59340200, 0x8c00051a, 0x05020031,
- 0x59240805, 0x80040910, 0x0500000d, 0x59a80018,
- 0x4803c857, 0x4807c857, 0x80040580, 0x05000008,
- 0x4a026806, 0xdeaddead, 0x0501f005, 0x42003000,
- 0x00fffffe, 0x0511fc26, 0x0502002b, 0x0529f936,
- 0x05000029, 0x4936600a, 0x4926601d, 0x64066407,
- 0x417a7800, 0x0511fbe6, 0x0201f800, 0x0010edee,
- 0x600c0800, 0x0511fbed, 0x0535faf0, 0x49235017,
- 0x4923c857, 0x59240005, 0x82000500, 0x000000ff,
- 0x48024805, 0x916c0583, 0x05000004, 0x59a80016,
- 0x80000000, 0x48035016, 0x599c0208, 0x48026c12,
- 0x600a7000, 0x0005fc78, 0x59240200, 0x82000500,
- 0xffffff9d, 0x8400054e, 0x8400055e, 0x48024a00,
- 0x81224000, 0x91264c0b, 0x8058b040, 0x05000004,
- 0x0541fd95, 0x05fe0780, 0x05fdf7a0, 0x4a035017,
- 0x0000ffff, 0x5c00a000, 0x5c00c800, 0x5c00c000,
- 0x5c00b800, 0x1c01f000, 0x4d300000, 0x4d440000,
- 0x4d340000, 0x61fa880f, 0x42003000, 0x00fffffe,
- 0x0511fbef, 0x0502001c, 0x0529f8ff, 0x0500001a,
- 0x4927c857, 0x4923c857, 0x497a6009, 0x4936600a,
- 0x4926601d, 0x64066407, 0x600c0800, 0x0511fbb7,
- 0x599c0208, 0x48026c12, 0x600a7000, 0x0005fc78,
- 0x59a80a1b, 0x8c040506, 0x05020002, 0x497a4805,
+ 0x05fdfc97, 0x4a03c013, 0x18000000, 0x61a1d007,
+ 0x0529feed, 0x4a03c013, 0x18000800, 0x1c01f000,
+ 0x0511fffa, 0x0502000d, 0x4803c856, 0x4a03c014,
+ 0x18001800, 0x4a03c013, 0x18001800, 0x05fdfc88,
+ 0x4a03c013, 0x18001000, 0x61a1d007, 0x0529fede,
+ 0x4a03c013, 0x18001800, 0x1c01f000, 0x0511ffeb,
+ 0x0502000e, 0x0501f831, 0x60041800, 0x42001000,
+ 0x0010dc87, 0x60900800, 0x60002180, 0x50080000,
+ 0x82000500, 0x000000ff, 0x4803c857, 0x0515f8cb,
+ 0x05f00ca2, 0x0501f82d, 0x1c01f000, 0x0501f823,
+ 0x59e00802, 0x8c04051e, 0x05000004, 0x4807c856,
+ 0x60a00800, 0x0501f002, 0x609c0800, 0x4807c857,
+ 0x60041800, 0x42001000, 0x0010dc85, 0x60002180,
+ 0x64041000, 0x0515f8b9, 0x05f00c90, 0x0501f81b,
+ 0x1c01f000, 0x0511ffc9, 0x0502000f, 0x59c40001,
+ 0x82000500, 0x00018000, 0x82000d80, 0x00008000,
+ 0x05000006, 0x82000d80, 0x00010000, 0x05000003,
+ 0x497b50a6, 0x0501f004, 0x59a800a6, 0x90000c82,
+ 0x05fc17fc, 0x1c01f000, 0x42000800, 0x00895440,
+ 0x0555ff9f, 0x05020004, 0x80040840, 0x05fe07fd,
+ 0x0555ffab, 0x1c01f000, 0x64030000, 0x1c01f000,
+ 0x4c5c0000, 0x59e0b802, 0x8c5c051e, 0x05000001,
+ 0x5c00b800, 0x1c01f000, 0x4c5c0000, 0x4c600000,
+ 0x6110b813, 0x4a03c016, 0x00010001, 0x59e00016,
+ 0x8c000500, 0x05000010, 0x8c00051e, 0x05020002,
+ 0x0501f014, 0x4a03c016, 0x00010000, 0x6140c00f,
+ 0x61a1d007, 0x0529fe88, 0x59e00016, 0x8c00051e,
+ 0x05fc07f1, 0x8060c040, 0x05fe07fa, 0x4a03c016,
+ 0x80000000, 0x61a1d007, 0x0529fe7f, 0x805cb840,
+ 0x05fe07e9, 0x4803c856, 0x4a03c016, 0x80008000,
+ 0x5c00c000, 0x5c00b800, 0x1c01f000, 0x4a03c013,
+ 0x04010401, 0x4a03c016, 0x80010000, 0x05fdfc18,
+ 0x1c01f000, 0x60800801, 0x61d0100d, 0x8408157e,
+ 0x0509f8d4, 0x05f00c41, 0x48175079, 0x4817c857,
+ 0x60800801, 0x61c0100d, 0x8408157e, 0x0509f8cd,
+ 0x05f00c3a, 0x4817507a, 0x4817c857, 0x60800801,
+ 0x61e0100d, 0x8408157e, 0x0509f8c6, 0x05f00c33,
+ 0x4817507b, 0x4817c857, 0x641f507c, 0x617c1800,
+ 0x0501f833, 0x0501f84e, 0x60600801, 0x60001000,
+ 0x0509f8bc, 0x05020004, 0x0501f859, 0x60600801,
+ 0x05f1fc1f, 0x0501f864, 0x4817c857, 0x59a8207c,
+ 0x59a80079, 0x80140480, 0x0502101c, 0x59a8007a,
+ 0x80140480, 0x05021012, 0x59a8007b, 0x80140480,
+ 0x05021008, 0x601c1800, 0x90100583, 0x05020014,
+ 0x90142c05, 0x59a8007b, 0x80140480, 0x05001010,
+ 0x600c1800, 0x90100582, 0x0502000d, 0x90142c05,
+ 0x59a8007a, 0x80140480, 0x05001009, 0x60081800,
+ 0x90100580, 0x05020006, 0x90142c05, 0x59a80079,
+ 0x80140480, 0x05001002, 0x60001800, 0x80102583,
+ 0x480f507c, 0x480fc857, 0x05000003, 0xb00c1d58,
+ 0x0501f803, 0x65935078, 0x1c01f000, 0x59a80a77,
+ 0x8c040500, 0x05000003, 0x820c1d00, 0xfffffff7,
+ 0x0501f817, 0x61800801, 0x60041000, 0x0509f84f,
+ 0x05f00bf2, 0x1c01f000, 0x4c580000, 0x0501f810,
+ 0x6140b00f, 0x61800801, 0x60001000, 0x0509f87d,
+ 0x05f00bea, 0x4817c857, 0x82140d00, 0x000000a0,
+ 0x90040da0, 0x05000004, 0x8058b040, 0x05fe07f6,
+ 0x90000541, 0x5c00b000, 0x1c01f000, 0x05fdff6d,
+ 0x05000004, 0x4a03c013, 0x04010401, 0x0501f003,
+ 0x4a03c013, 0x04010400, 0x05fdf3a9, 0x05fdff65,
+ 0x05000004, 0x4a03c013, 0x04010001, 0x0501f003,
+ 0x4a03c013, 0x04010000, 0x05fdf3a1, 0x59a80a77,
+ 0x84040d40, 0x4807c857, 0x48075277, 0x61800801,
+ 0x60001000, 0x0509f85b, 0x05f00bc8, 0x4817c857,
+ 0x82142d00, 0xfffffff7, 0xb0142d40, 0x40141800,
+ 0x05fdf7c7, 0xb0142c80, 0x05001010, 0x59a80084,
+ 0x8c000520, 0x0500000a, 0x59a8087d, 0x9004050f,
+ 0x05020007, 0x80040910, 0x82040d00, 0x000000ff,
+ 0x4807c857, 0x80142c01, 0x0501f002, 0x90142c05,
+ 0x4817c857, 0x1c01f000, 0x41782800, 0x05fdf7fd,
+ 0x60600801, 0x60241000, 0x60101800, 0x0509f807,
+ 0x05f00baa, 0x60600801, 0x60281000, 0x601c1800,
+ 0x0509f802, 0x05f00ba5, 0x1c01f000, 0x42000800,
+ 0x7ff481f4, 0x59e00002, 0x8c00051e, 0x05020003,
+ 0x42000800, 0x7ff480f4, 0x4807c857, 0x50040000,
+ 0x4803c857, 0x4803507d, 0x1c01f000, 0x59c468a4,
+ 0x90346d0f, 0x90346d82, 0x1c01f000, 0x59c468a4,
+ 0x90346d0f, 0x90346d81, 0x1c01f000, 0x59c468a4,
+ 0x90346d0f, 0x90346d80, 0x1c01f000, 0x59a80006,
+ 0x8c00051c, 0x05020016, 0x4937c857, 0x0539f9b0,
+ 0x05000013, 0x4926601d, 0x4936600a, 0x0545fe38,
+ 0x64066407, 0x417a7800, 0x0519fa89, 0x59a80044,
+ 0x80000000, 0x48035044, 0x60127000, 0x599c0019,
+ 0x8c00050e, 0x05000002, 0x60027000, 0x599c0208,
+ 0x48026c12, 0x0009f800, 0x90000541, 0x1c01f000,
+ 0x4937c857, 0x0539f99a, 0x0500001b, 0x4926601d,
+ 0x4936600a, 0x59340403, 0x82000580, 0x000007fe,
+ 0x05000005, 0x4d3c0000, 0x417a7800, 0x0501f8b9,
+ 0x5c027800, 0x0545fe1a, 0x64066407, 0x417a7800,
+ 0x0519fa6b, 0x600c0800, 0x0519fa73, 0x0555fe9a,
+ 0x05020004, 0x59a80044, 0x80000000, 0x48035044,
+ 0x599c0208, 0x48026c12, 0x600a7000, 0x0009f800,
+ 0x90000541, 0x1c01f000, 0x4803c856, 0x59a80006,
+ 0x8c00051e, 0x05020008, 0x61f2880f, 0x42003000,
+ 0x00fffffc, 0x0519fa87, 0x05020007, 0x0501f808,
+ 0x05000005, 0x4a03504a, 0x0000ffff, 0x90000541,
+ 0x1c01f000, 0x80000580, 0x05fdf7fe, 0x4937c857,
+ 0x0539f96b, 0x05000011, 0x4926601d, 0x4936600a,
+ 0x0545fdf3, 0x64066407, 0x417a7800, 0x0519fa44,
+ 0x600c0800, 0x0519fa4c, 0x59a8004b, 0x80000000,
+ 0x4803504b, 0x599c0208, 0x48026c12, 0x600a7000,
+ 0x0009f800, 0x90000541, 0x1c01f000, 0x480bc857,
+ 0x492fc857, 0x4923c857, 0x4927c857, 0x4c5c0000,
+ 0x4008b800, 0x61f6880f, 0x42003000, 0x00fffffd,
+ 0x0519fa60, 0x0502001b, 0x5934000a, 0x84000544,
+ 0x4802680a, 0x0539f94a, 0x05000016, 0x4926601d,
+ 0x4936600a, 0x812e59c0, 0x05000006, 0x592c0408,
+ 0x8c00051e, 0x05000003, 0x48ee602d, 0x0501f004,
+ 0x59a80249, 0x8400055c, 0x48035249, 0x492e6009,
+ 0x64066407, 0x485e601e, 0x0545fdc5, 0x608a7000,
+ 0x0009f800, 0x90000541, 0x5c00b800, 0x1c01f000,
+ 0x80000580, 0x05fdf7fd, 0x5c000000, 0x4c000000,
+ 0x4803c857, 0x4943c857, 0x493fc857, 0x4d340000,
+ 0x4d440000, 0x4c580000, 0x4d2c0000, 0x4c5c0000,
+ 0x0531fa37, 0x4df00000, 0x833c0500, 0x00001800,
+ 0x05000003, 0x8d3c0516, 0x052c0f54, 0x0531f81d,
+ 0x0531f8a9, 0x052dfd9f, 0x053dfcb0, 0x5c03e000,
+ 0x05300a1c, 0x61c0b00f, 0x417a8800, 0x0001fb00,
+ 0x05020025, 0x8d3c0506, 0x05000004, 0x59340200,
+ 0x8c00050e, 0x05020020, 0x0519fccf, 0x497a6c0b,
+ 0x8d3c0518, 0x05000017, 0x5934b80f, 0x805cb9c0,
+ 0x0500000a, 0x405e5800, 0x49425a0a, 0x492fc857,
+ 0x592cb800, 0x0001fb82, 0x805cb9c0, 0x05fe07fa,
+ 0x497a680f, 0x497a6810, 0x4937c857, 0x4a026c00,
+ 0x00000707, 0x497a6a03, 0x497a6811, 0x59340402,
+ 0x82000500, 0x000000ff, 0x48026c02, 0x0501f006,
+ 0x4937c857, 0x4a026c00, 0x00000707, 0x8d0c0520,
+ 0x05140f78, 0x81468800, 0x8058b040, 0x05fe07d8,
+ 0x8d3c0502, 0x05000011, 0x497b5046, 0x61c2880f,
+ 0x6040b000, 0x0001fb00, 0x05020009, 0x4937c857,
+ 0x5934b80f, 0x5934000c, 0x4a026c00, 0x00000707,
+ 0x805c0540, 0x05020002, 0x0515ff66, 0x81468800,
+ 0x8058b040, 0x05fe07f4, 0x5c00b800, 0x5c025800,
+ 0x5c00b000, 0x5c028800, 0x5c026800, 0x1c01f000,
+ 0x5c000000, 0x4c000000, 0x4803c857, 0x4933c857,
+ 0x493fc857, 0x4927c857, 0x4d340000, 0x4d400000,
+ 0x4d440000, 0x4d2c0000, 0x4c5c0000, 0x0531f9dc,
+ 0x4df00000, 0x5932680a, 0x813669c0, 0x05000030,
+ 0x59368c03, 0x60a68000, 0x833c0500, 0x00001800,
+ 0x05000003, 0x8d3c0516, 0x052c0f03, 0x0531f808,
+ 0x0531f851, 0x052dfdd7, 0x0551fb2b, 0x4937c857,
+ 0x8d3c0506, 0x05000004, 0x59340200, 0x8c00050e,
+ 0x0502001f, 0x0519fc74, 0x497a6c0b, 0x8d3c0518,
+ 0x05000017, 0x5934b80f, 0x805cb9c0, 0x0500000a,
+ 0x405e5800, 0x49425a0a, 0x492fc857, 0x592cb800,
+ 0x0001fb82, 0x805cb9c0, 0x05fe07fa, 0x497a680f,
+ 0x497a6810, 0x4937c857, 0x4a026c00, 0x00000707,
+ 0x497a6a03, 0x497a6811, 0x59340402, 0x82000500,
+ 0x000000ff, 0x48026c02, 0x0501f005, 0x4a026c00,
+ 0x00000707, 0x8d0c0520, 0x05140f1e, 0x5c03e000,
+ 0x05300998, 0x5c00b800, 0x5c025800, 0x5c028800,
+ 0x5c028000, 0x5c026800, 0x1c01f000, 0x4933c857,
+ 0x59a80249, 0x8c000508, 0x05020013, 0x5930500a,
+ 0x482bc857, 0x916c0582, 0x0502000f, 0x0501f81a,
+ 0x0502000d, 0x58280403, 0x82004d80, 0x000007fc,
+ 0x0500000a, 0x82004d80, 0x000007fd, 0x05000006,
+ 0x59a80044, 0x80000040, 0x4803c857, 0x05f01a53,
+ 0x48035044, 0x1c01f000, 0x59300429, 0x90004da1,
+ 0x05fc07f8, 0xb0000591, 0x05fc07fb, 0x59a8004b,
+ 0x80000040, 0x4803c857, 0x05fc17f7, 0x4803504b,
+ 0x1c01f000, 0x59300009, 0x800001c0, 0x05020007,
+ 0x59300403, 0x90000581, 0x05020003, 0x90000541,
+ 0x0501f002, 0x80000580, 0x1c01f000, 0x4937c857,
+ 0x59340200, 0x84000502, 0x48026a00, 0x1c01f000,
+ 0x4933c857, 0x493fc857, 0x4947c857, 0x4927c857,
+ 0x4d400000, 0x4d340000, 0x4d440000, 0x4c580000,
+ 0x0531f967, 0x4df00000, 0x8060c1c0, 0x05020003,
+ 0x6004b000, 0x0501f003, 0x61c0b00f, 0x417a8800,
+ 0x41440000, 0x81ac0400, 0x50000000, 0x80026d40,
+ 0x05000018, 0x59245005, 0x59340013, 0x82000500,
+ 0x00ffffff, 0x80280580, 0x05020012, 0x4d3c0000,
+ 0x60067800, 0x0519fd32, 0x5c027800, 0x60a68000,
+ 0x052dff87, 0x052dffd0, 0x052dfd56, 0x0519fe5e,
+ 0x05020005, 0x4937c857, 0x4a026c00, 0x00000404,
+ 0x0501f002, 0x0519fe83, 0x0551faa3, 0x0519fbf2,
+ 0x81468800, 0x8058b040, 0x05fe07e2, 0x5c03e000,
+ 0x05300930, 0x5c00b000, 0x5c028800, 0x5c026800,
+ 0x5c028000, 0x1c01f000, 0x4937c857, 0x4947c857,
+ 0x4c5c0000, 0x4c600000, 0x4c640000, 0x59a800b2,
+ 0x8c000500, 0x0500001d, 0x599c0017, 0x8c00050a,
+ 0x0502001a, 0x5934ba02, 0x825cbd00, 0x000000ff,
+ 0x485fc857, 0x4178c000, 0x4178c800, 0x82600400,
+ 0x00110258, 0x50002000, 0x8060c1c0, 0x05000008,
+ 0x82100500, 0x000000ff, 0x82002d80, 0x000000ff,
+ 0x0500000a, 0x805c0580, 0x0500000a, 0x80102110,
+ 0x8064c800, 0x90640584, 0x05fe07f6, 0x8060c000,
+ 0x906005a0, 0x05fe07ed, 0x4813c857, 0x90000541,
+ 0x5c00c800, 0x5c00c000, 0x5c00b800, 0x1c01f000,
+ 0x59a80249, 0x8c000512, 0x05f20a9b, 0x1c01f000,
+ 0x4c5c0000, 0x4c600000, 0x4c640000, 0x4c500000,
+ 0x6004b000, 0x42024800, 0x0010e512, 0x417a4000,
+ 0x61fa880f, 0x0555fd04, 0x05000020, 0x0555fce1,
+ 0x5924ba00, 0x8c5c0500, 0x0500007c, 0x59a8a249,
+ 0x8c500506, 0x0500000d, 0x825c0500, 0x000000e0,
+ 0x82000580, 0x000000e0, 0x05000074, 0x0501f881,
+ 0x59a80044, 0x4923c857, 0x4803c857, 0x80000000,
+ 0x48035044, 0x0501f06d, 0x8c5c051e, 0x0500006b,
+ 0x4927c856, 0x6004b000, 0x825c0500, 0x000000e1,
+ 0x48024a00, 0x485fc857, 0x825cc500, 0x000000e0,
+ 0x0502001f, 0x0501f018, 0x051dfc7c, 0x05000002,
+ 0x0555fcc4, 0x5924ba00, 0x8c5c0500, 0x0500005b,
+ 0x0555fcdd, 0x05000005, 0x59a80249, 0x8c00050e,
+ 0x05020013, 0x0501f004, 0x83240d80, 0x0010e512,
+ 0x0502000f, 0x825cc500, 0x000000e0, 0x0502000c,
+ 0x051dfc6a, 0x05000004, 0x42000800, 0xffffff1d,
+ 0x0501fa82, 0x59a80249, 0x82000500, 0xffffdafc,
+ 0x8400054e, 0x48035249, 0x0501f006, 0x82600580,
+ 0x000000e0, 0x0502004a, 0x8c5c050e, 0x0502003f,
+ 0x5924c809, 0x9064040e, 0x50000000, 0x4803c857,
+ 0x80026d40, 0x05000011, 0x051dfc54, 0x05000013,
+ 0x59340200, 0x8c00051a, 0x05020034, 0x59240805,
+ 0x80040910, 0x0500000d, 0x59a80046, 0x4803c857,
+ 0x4807c857, 0x80040580, 0x05000008, 0x4a026806,
+ 0xdeaddead, 0x0501f005, 0x42003000, 0x00fffffe,
+ 0x0519f8a8, 0x0502002e, 0x0535ff95, 0x0500002c,
+ 0x4936600a, 0x4926601d, 0x64066407, 0x417a7800,
+ 0x0519f86f, 0x05fdff2a, 0x600c0800, 0x0519f876,
+ 0x0545fc17, 0x49235045, 0x4923c857, 0x59240005,
+ 0x82000500, 0x000000ff, 0x48024805, 0x916c0583,
+ 0x05000004, 0x59a80044, 0x80000000, 0x48035044,
+ 0x599c0208, 0x48026c12, 0x600a7000, 0x0009f800,
0x59240200, 0x82000500, 0xffffff9d, 0x8400054e,
- 0x48024a00, 0x5c026800, 0x5c028800, 0x5c026000,
- 0x1c01f000, 0x80000580, 0x05fdf7fb, 0x4d200000,
- 0x4d240000, 0x4c580000, 0x4d340000, 0x4d300000,
- 0x4d3c0000, 0x4d380000, 0x4d440000, 0x0511feab,
- 0x05020009, 0x0515fd0d, 0x05000004, 0x59a8121b,
- 0x8c080506, 0x05000003, 0x05fdff37, 0x0501f002,
- 0x0501f80a, 0x5c028800, 0x5c027000, 0x5c027800,
- 0x5c026000, 0x5c026800, 0x5c00b000, 0x5c024800,
- 0x5c024000, 0x1c01f000, 0x4803c856, 0x4c600000,
- 0x0541fd2e, 0x4200c000, 0x0010b38f, 0x50600000,
- 0x82024580, 0x0000ffff, 0x05020004, 0x42024800,
- 0x0010b391, 0x0501f008, 0x8058b480, 0x05000026,
- 0x05001025, 0x40024000, 0x82000400, 0x0010a3b3,
- 0x50024800, 0x4520c000, 0x59240005, 0x82000500,
- 0x000000ff, 0x48024805, 0x59240200, 0x90000503,
- 0x90000583, 0x0502000e, 0x59240400, 0x8c000508,
- 0x0500000b, 0x59a80073, 0x8c000500, 0x05000003,
- 0x0501f813, 0x0501f002, 0x0501f861, 0x59a80017,
- 0x82000580, 0x0000ffff, 0x0502000b, 0x81224000,
- 0x91264c0b, 0x8058b040, 0x05fe07e7, 0x599c0019,
- 0x8c00050e, 0x05020004, 0x59a80073, 0x8c000500,
- 0x05020887, 0x5c00c000, 0x1c01f000, 0x4927c857,
- 0x4923c857, 0x4c580000, 0x4c100000, 0x4c0c0000,
- 0x4c080000, 0x4c040000, 0x4d240000, 0x59243c08,
- 0x59a81817, 0x820c1580, 0x0000ffff, 0x05020002,
- 0x60041800, 0x800c1104, 0x82082400, 0x0010cea4,
- 0x50102000, 0x900c0503, 0x0c01f001, 0x00101e83,
- 0x00101e85, 0x00101e87, 0x00101e89, 0x40101000,
- 0x0501f006, 0x80101110, 0x0501f004, 0x80101120,
- 0x0501f002, 0x80101130, 0x4c0c0000, 0x82080500,
- 0x000000ff, 0x801c0d80, 0x0500001c, 0x800001c0,
- 0x0500001a, 0x40000800, 0x82000580, 0x000000ff,
- 0x0500001a, 0x0501f927, 0x05000014, 0x40040000,
- 0x051df96e, 0x0502001f, 0x0511fbc2, 0x05000005,
- 0x0201f800, 0x0010edbd, 0x0500001a, 0x0501f00b,
- 0x599c0019, 0x8c00050e, 0x05020008, 0x0511fb48,
- 0x05020014, 0x0201f800, 0x0010edee, 0x0201f800,
- 0x0010eedf, 0x0500000f, 0x5c001800, 0x480f5017,
- 0x800c1800, 0x05fdf7cc, 0x5c001800, 0x4a035017,
- 0x0000ffff, 0x5c024800, 0x5c000800, 0x5c001000,
- 0x5c001800, 0x5c002000, 0x5c00b000, 0x1c01f000,
- 0x5c001800, 0x480f5017, 0x05fdf7f7, 0x4927c857,
- 0x4c5c0000, 0x4c580000, 0x4c540000, 0x61f8b000,
- 0x59243c08, 0x59a80017, 0x82001580, 0x0000ffff,
- 0x05020003, 0x4178a800, 0x0501f004, 0x8058b480,
- 0x05001021, 0x4000a800, 0x48575017, 0x8254bc00,
- 0x001020b6, 0x505cb800, 0x825cbd00, 0x000000ff,
- 0x405c0800, 0x0501f8eb, 0x05000014, 0x405c0000,
- 0x051df932, 0x05020016, 0x0511fb86, 0x05000005,
- 0x0201f800, 0x0010edbd, 0x05000011, 0x0501f00b,
- 0x599c0019, 0x8c00050e, 0x05020008, 0x0511fb0c,
- 0x0502000b, 0x0201f800, 0x0010edee, 0x0201f800,
- 0x0010eedf, 0x05000006, 0x8054a800, 0x8058b040,
- 0x05fe07e2, 0x4a035017, 0x0000ffff, 0x5c00a800,
- 0x5c00b000, 0x5c00b800, 0x1c01f000, 0x4c580000,
- 0x4d440000, 0x61c0b00f, 0x80028d80, 0x0001fae7,
- 0x05020019, 0x05fdfe3e, 0x05000017, 0x4937c857,
- 0x0511fed0, 0x42026000, 0x001104b4, 0x4936600a,
- 0x497a6009, 0x4926601d, 0x417a7800, 0x0201f800,
- 0x0010ee7a, 0x42000000, 0x0010b2d6, 0x0541fb42,
- 0x59240400, 0x8c00050a, 0x05020007, 0x41782800,
- 0x60203000, 0x4d400000, 0x60a68000, 0x053dfc2a,
- 0x5c028000, 0x81468800, 0x8058b040, 0x05fe07e4,
- 0x5c028800, 0x5c00b000, 0x1c01f000, 0x4927c857,
- 0x4c5c0000, 0x400cb800, 0x4d200000, 0x4d240000,
- 0x4c580000, 0x0541fc49, 0x417a4000, 0x42024800,
- 0x0010b391, 0x59240200, 0x8c000500, 0x0500000f,
- 0x8c5c0508, 0x05000004, 0x8400055a, 0x48024a00,
- 0x0501f00a, 0x82000500, 0x000000e0, 0x82000580,
- 0x000000e0, 0x05000005, 0x4927c857, 0x4923c857,
- 0x0501f838, 0x05000005, 0x81224000, 0x91264c0b,
- 0x8058b040, 0x05fe07ec, 0x5c00b000, 0x5c024800,
- 0x5c024000, 0x5c00b800, 0x1c01f000, 0x40681800,
- 0x4d200000, 0x4d240000, 0x4c580000, 0x4c5c0000,
- 0x400cb800, 0x485fc857, 0x0541fc24, 0x8058b040,
- 0x05000017, 0x60064000, 0x42024800, 0x0010b39c,
- 0x59a8021b, 0x8c000514, 0x05000016, 0x59241200,
- 0x8c080510, 0x0502000a, 0x8c080500, 0x05000008,
- 0x8c5c0508, 0x05000004, 0x8408155a, 0x480a4a00,
- 0x0501f003, 0x0501f813, 0x05000005, 0x81224000,
- 0x91264c0b, 0x8058b040, 0x05fe07f1, 0x5c00b800,
+ 0x8400055e, 0x59a80ccc, 0x8c04050a, 0x05000002,
+ 0x8400055e, 0x48024a00, 0x81224000, 0x91264c0d,
+ 0x8058b040, 0x05000004, 0x0555fc7f, 0x05fe077d,
+ 0x05fdf79d, 0x4a035045, 0x0000ffff, 0x5c00a000,
+ 0x5c00c800, 0x5c00c000, 0x5c00b800, 0x1c01f000,
+ 0x4d300000, 0x4d440000, 0x4d340000, 0x61fa880f,
+ 0x42003000, 0x00fffffe, 0x0519f86e, 0x0502001c,
+ 0x0535ff5b, 0x0500001a, 0x4927c857, 0x4923c857,
+ 0x497a6009, 0x4936600a, 0x4926601d, 0x64066407,
+ 0x600c0800, 0x0519f83c, 0x599c0208, 0x48026c12,
+ 0x600a7000, 0x0009f800, 0x59a80a49, 0x8c040506,
+ 0x05020002, 0x497a4805, 0x59240200, 0x82000500,
+ 0xffffff9d, 0x8400054e, 0x48024a00, 0x5c026800,
+ 0x5c028800, 0x5c026000, 0x1c01f000, 0x80000580,
+ 0x05fdf7fb, 0x4d200000, 0x4d240000, 0x4c580000,
+ 0x4d340000, 0x4d300000, 0x4d3c0000, 0x4d380000,
+ 0x4d440000, 0x0519fc0b, 0x05020009, 0x051dfbdf,
+ 0x05000004, 0x59a81249, 0x8c080506, 0x05000003,
+ 0x05fdff34, 0x0501f002, 0x0501f80a, 0x5c028800,
+ 0x5c027000, 0x5c027800, 0x5c026000, 0x5c026800,
0x5c00b000, 0x5c024800, 0x5c024000, 0x1c01f000,
- 0x497a4805, 0x59240200, 0x90000501, 0x48024a00,
- 0x91264c0b, 0x8058b040, 0x05fe07fa, 0x05fdf7f4,
- 0x4927c857, 0x4923c857, 0x59a8021b, 0x8c000514,
- 0x05000016, 0x61fa880f, 0x42003000, 0x00fffffe,
- 0x0511fa7f, 0x05020011, 0x599c0208, 0x48026c12,
- 0x4d2c0000, 0x417a5800, 0x0535fb1d, 0x5c025800,
- 0x0500000a, 0x59a8007b, 0x80000000, 0x4803507b,
- 0x59240200, 0x84000550, 0x84000512, 0x48024a00,
- 0x90000541, 0x1c01f000, 0x80000580, 0x05fdf7fe,
- 0x4c580000, 0x0541fbe1, 0x417a4000, 0x42000800,
- 0x0010b391, 0x5930001d, 0x80040580, 0x05000006,
- 0x81224000, 0x90040c0b, 0x8058b040, 0x05fe07fa,
- 0x05f1fa63, 0x4933c857, 0x4923c857, 0x5c00b000,
- 0x1c01f000, 0x40683800, 0x4c580000, 0x0541fbcf,
- 0x417a4000, 0x42024800, 0x0010b391, 0x59a8121b,
- 0x8c080508, 0x0500000a, 0x821c0d80, 0x00fffffe,
- 0x0500001d, 0x8c08050c, 0x0500001b, 0x59240005,
- 0x801c0580, 0x05000018, 0x0501f014, 0x90080528,
- 0x05020005, 0x59240005, 0x82000500, 0x000000ff,
- 0x0501f005, 0x59240200, 0x8c000500, 0x05000004,
- 0x59240005, 0x801c0580, 0x0500000b, 0x81224000,
- 0x91264c0b, 0x8058b040, 0x05000004, 0x90080528,
- 0x05fe07f5, 0x05fdf7f0, 0x61fe41ff, 0x90000541,
- 0x481fc856, 0x4923c857, 0x5c00b000, 0x1c01f000,
- 0x4807c857, 0x4c580000, 0x0541fba4, 0x42006800,
- 0x0010b391, 0x58340005, 0x82000500, 0x000000ff,
- 0x80040580, 0x05000005, 0x90346c0b, 0x8058b040,
- 0x05fe07f9, 0x90000541, 0x5c00b000, 0x1c01f000,
- 0x4923c857, 0x493fc857, 0x4c580000, 0x4d400000,
- 0x4d440000, 0x4d340000, 0x4c5c0000, 0x0521f96c,
- 0x4df00000, 0x61c0b00f, 0x417a8800, 0x83440400,
- 0x0010a600, 0x50000000, 0x80026d40, 0x05000022,
- 0x59340013, 0x80000130, 0x81200580, 0x0502001e,
- 0x60a68000, 0x833c0500, 0x00004000, 0x05220814,
- 0x0201f800, 0x0010f260, 0x0201f800, 0x0010f344,
- 0x0201f800, 0x0010f3dd, 0x0201f800, 0x0010f7f5,
- 0x8d3c051c, 0x05000004, 0x41240800, 0x0511fdf8,
- 0x0501f00d, 0x8d3c0506, 0x05000004, 0x59340200,
- 0x8c00050e, 0x05020008, 0x4937c857, 0x497a6c0b,
- 0x4a026c00, 0x00000707, 0x59240400, 0x8c00050a,
- 0x050e0f96, 0x81468800, 0x8058b040, 0x05fe07d8,
- 0x8d3c0502, 0x0500001b, 0x6040b000, 0x5924b809,
- 0x505c0000, 0x80026d40, 0x05000013, 0x59368c03,
- 0x833c0500, 0x00004000, 0x051e0fed, 0x0201f800,
- 0x0010f260, 0x0201f800, 0x0010f344, 0x0201f800,
- 0x0010f3dd, 0x0201f800, 0x0010f7f5, 0x8d3c051c,
- 0x05020003, 0x050dff7d, 0x0501f003, 0x41240800,
- 0x0511fdcf, 0x805cb800, 0x8058b040, 0x05fe07e9,
- 0x4d300000, 0x61fe89ff, 0x42026000, 0x001104b4,
- 0x4a02600a, 0x0010ce8f, 0x0515f858, 0x4926601d,
- 0x60a68000, 0x0201f800, 0x0010f260, 0x0201f800,
- 0x0010f7f5, 0x5c026000, 0x5c03e000, 0x05200900,
+ 0x4803c856, 0x4c600000, 0x0555fc16, 0x4200c000,
+ 0x0010e510, 0x50600000, 0x82024580, 0x0000ffff,
+ 0x05020004, 0x42024800, 0x0010e512, 0x0501f008,
+ 0x8058b480, 0x05000026, 0x05001025, 0x40024000,
+ 0x82000400, 0x0010d17b, 0x50024800, 0x4520c000,
+ 0x59240005, 0x82000500, 0x000000ff, 0x48024805,
+ 0x59240200, 0x90000503, 0x90000583, 0x0502000e,
+ 0x59240400, 0x8c000508, 0x0500000b, 0x59a800b2,
+ 0x8c000500, 0x05000003, 0x0501f813, 0x0501f002,
+ 0x0501f85e, 0x59a80045, 0x82000580, 0x0000ffff,
+ 0x0502000b, 0x81224000, 0x91264c0d, 0x8058b040,
+ 0x05fe07e7, 0x599c0019, 0x8c00050e, 0x05020004,
+ 0x59a800b2, 0x8c000500, 0x05020881, 0x5c00c000,
+ 0x1c01f000, 0x4927c857, 0x4923c857, 0x4c580000,
+ 0x4c100000, 0x4c0c0000, 0x4c080000, 0x4c040000,
+ 0x4d240000, 0x59243c08, 0x59a81845, 0x820c1580,
+ 0x0000ffff, 0x05020002, 0x60041800, 0x800c1104,
+ 0x82082400, 0x00110258, 0x50102000, 0x900c0503,
+ 0x0c01f001, 0x0010252d, 0x0010252f, 0x00102531,
+ 0x00102533, 0x40101000, 0x0501f006, 0x80101110,
+ 0x0501f004, 0x80101120, 0x0501f002, 0x80101130,
+ 0x4c0c0000, 0x82080500, 0x000000ff, 0x801c0d80,
+ 0x05000019, 0x800001c0, 0x05000017, 0x40000800,
+ 0x82000580, 0x000000ff, 0x05000017, 0x0501f916,
+ 0x05000011, 0x40040000, 0x0525fb8c, 0x0502001c,
+ 0x0519f84b, 0x05000004, 0x05fdfd09, 0x05000018,
+ 0x0501f009, 0x599c0019, 0x8c00050e, 0x05020006,
+ 0x0515ffc8, 0x05020012, 0x05fdfe51, 0x05fdfd19,
+ 0x0500000f, 0x5c001800, 0x480f5045, 0x800c1800,
+ 0x05fdf7cf, 0x5c001800, 0x4a035045, 0x0000ffff,
+ 0x5c024800, 0x5c000800, 0x5c001000, 0x5c001800,
+ 0x5c002000, 0x5c00b000, 0x1c01f000, 0x5c001800,
+ 0x480f5045, 0x05fdf7f7, 0x4927c857, 0x4c5c0000,
+ 0x4c580000, 0x4c540000, 0x61f8b000, 0x59243c08,
+ 0x59a80045, 0x82001580, 0x0000ffff, 0x05020003,
+ 0x4178a800, 0x0501f004, 0x8058b480, 0x0500101e,
+ 0x4000a800, 0x48575045, 0x8254bc00, 0x00102853,
+ 0x505cb800, 0x825cbd00, 0x000000ff, 0x405c0800,
+ 0x0501f8dd, 0x05000011, 0x405c0000, 0x0525fb53,
+ 0x05020013, 0x0519f812, 0x05000004, 0x05fdfcd0,
+ 0x0500000f, 0x0501f009, 0x599c0019, 0x8c00050e,
+ 0x05020006, 0x0515ff8f, 0x05020009, 0x05fdfe18,
+ 0x05fdfce0, 0x05000006, 0x8054a800, 0x8058b040,
+ 0x05fe07e5, 0x4a035045, 0x0000ffff, 0x5c00a800,
+ 0x5c00b000, 0x5c00b800, 0x1c01f000, 0x4c580000,
+ 0x4d440000, 0x61c0b00f, 0x80028d80, 0x0001fb00,
+ 0x05020018, 0x05fdfe41, 0x05000016, 0x4937c857,
+ 0x0519fcd5, 0x42026000, 0x00111a70, 0x4936600a,
+ 0x497a6009, 0x4926601d, 0x417a7800, 0x05fdfd89,
+ 0x42000000, 0x0010e454, 0x0555fa36, 0x59240400,
+ 0x8c00050a, 0x05020007, 0x41782800, 0x60203000,
+ 0x4d400000, 0x60a68000, 0x0551f9f8, 0x5c028000,
+ 0x81468800, 0x8058b040, 0x05fe07e5, 0x5c028800,
+ 0x5c00b000, 0x1c01f000, 0x4927c857, 0x4c5c0000,
+ 0x400cb800, 0x4d200000, 0x4d240000, 0x4c580000,
+ 0x0555fb38, 0x417a4000, 0x42024800, 0x0010e512,
+ 0x59240200, 0x8c000500, 0x0500000f, 0x8c5c0508,
+ 0x05000004, 0x8400055a, 0x48024a00, 0x0501f00a,
+ 0x82000500, 0x000000e0, 0x82000580, 0x000000e0,
+ 0x05000005, 0x4927c857, 0x4923c857, 0x0501f83f,
+ 0x05000005, 0x81224000, 0x91264c0d, 0x8058b040,
+ 0x05fe07ec, 0x5c00b000, 0x5c024800, 0x5c024000,
+ 0x5c00b800, 0x1c01f000, 0x4d200000, 0x4d240000,
+ 0x4c580000, 0x4c5c0000, 0x400cb800, 0x485fc857,
+ 0x0555fb14, 0x8058b040, 0x0500001f, 0x60064000,
+ 0x42024800, 0x0010e51f, 0x59a80249, 0x8c000514,
+ 0x0500001e, 0x59241200, 0x8c080510, 0x05020012,
+ 0x8c080500, 0x05000010, 0x59a80acc, 0x5924000b,
+ 0x82000500, 0x00001fff, 0x80040580, 0x0502000a,
+ 0x8c08051e, 0x05020008, 0x8c5c0508, 0x05000004,
+ 0x8408155a, 0x480a4a00, 0x0501f003, 0x0501f813,
+ 0x05000005, 0x81224000, 0x91264c0d, 0x8058b040,
+ 0x05fe07e9, 0x5c00b800, 0x5c00b000, 0x5c024800,
+ 0x5c024000, 0x1c01f000, 0x497a4805, 0x59240200,
+ 0x90000501, 0x48024a00, 0x91264c0d, 0x8058b040,
+ 0x05fe07fa, 0x05fdf7f4, 0x4927c857, 0x4923c857,
+ 0x59a80249, 0x8c000514, 0x05000003, 0x0501f9e6,
+ 0x1c01f000, 0x80000580, 0x05fdf7fe, 0x4c580000,
+ 0x0555fadc, 0x417a4000, 0x42000800, 0x0010e512,
+ 0x5930001d, 0x80040580, 0x05000006, 0x81224000,
+ 0x90040c0d, 0x8058b040, 0x05fe07fa, 0x05edffb7,
+ 0x4933c857, 0x4923c857, 0x5c00b000, 0x1c01f000,
+ 0x4c580000, 0x0555facb, 0x417a4000, 0x42024800,
+ 0x0010e512, 0x59a81249, 0x8c080508, 0x0500000a,
+ 0x821c0d80, 0x00fffffe, 0x05000020, 0x8c08050c,
+ 0x0500001e, 0x59240005, 0x801c0580, 0x0500001b,
+ 0x0501f017, 0x90080528, 0x05020005, 0x59240005,
+ 0x82000500, 0x000000ff, 0x0501f008, 0x821c0580,
+ 0x00fffff0, 0x05000011, 0x59240200, 0x8c000500,
+ 0x05000004, 0x59240005, 0x801c0580, 0x0500000b,
+ 0x81224000, 0x91264c0d, 0x8058b040, 0x05000004,
+ 0x90080528, 0x05fe07f2, 0x05fdf7ed, 0x61fe41ff,
+ 0x90000541, 0x481fc856, 0x4923c857, 0x5c00b000,
+ 0x1c01f000, 0x4807c857, 0x4c580000, 0x0555fa9d,
+ 0x42006800, 0x0010e512, 0x58340005, 0x82000500,
+ 0x000000ff, 0x80040580, 0x05000005, 0x90346c0d,
+ 0x8058b040, 0x05fe07f9, 0x90000541, 0x5c00b000,
+ 0x1c01f000, 0x4923c857, 0x493fc857, 0x4c580000,
+ 0x4d400000, 0x4d440000, 0x4d340000, 0x4c5c0000,
+ 0x052dfea7, 0x4df00000, 0x61c0b00f, 0x417a8800,
+ 0x83440400, 0x0010d400, 0x50000000, 0x80026d40,
+ 0x0500001f, 0x59340013, 0x80000130, 0x81200580,
+ 0x0502001b, 0x60a68000, 0x833c0500, 0x00004000,
+ 0x052e0bc9, 0x052dfcce, 0x052dfd17, 0x052dfa9d,
+ 0x054dfff1, 0x8d3c051c, 0x05000004, 0x41240800,
+ 0x0519fc0c, 0x0501f00e, 0x8d3c0506, 0x05000004,
+ 0x59340200, 0x8c00050e, 0x05020009, 0x4937c857,
+ 0x0519f935, 0x497a6c0b, 0x4a026c00, 0x00000707,
+ 0x59240400, 0x8c00050a, 0x05160bf6, 0x81468800,
+ 0x8058b040, 0x05fe07db, 0x8d3c0502, 0x0500001f,
+ 0x6040b000, 0x5924b809, 0x505c0000, 0x80026d40,
+ 0x05000017, 0x59368c03, 0x833c0500, 0x00004000,
+ 0x052e0ba5, 0x052dfcaa, 0x052dfcf3, 0x052dfa79,
+ 0x054dffcd, 0x8d3c051c, 0x0502000b, 0x83440580,
+ 0x000007fe, 0x05020006, 0x59340813, 0x82040d00,
+ 0xff000000, 0x48066813, 0x0501f005, 0x0515fbd9,
+ 0x0501f003, 0x41240800, 0x0519fbde, 0x805cb800,
+ 0x8058b040, 0x05fe07e5, 0x4d300000, 0x61fe89ff,
+ 0x42026000, 0x00111a70, 0x4a02600a, 0x00110210,
+ 0x0519feee, 0x4926601d, 0x60a68000, 0x052dfc8c,
+ 0x054dffb1, 0x5c026000, 0x5c03e000, 0x052c0e41,
0x5c00b800, 0x5c026800, 0x5c028800, 0x5c028000,
0x5c00b000, 0x1c01f000, 0x4807c857, 0x4c580000,
- 0x0541fb2e, 0x42001000, 0x0010b391, 0x58080200,
- 0x80040500, 0x48001200, 0x9008140b, 0x8058b040,
+ 0x0555fa28, 0x42001000, 0x0010e512, 0x58080200,
+ 0x80040500, 0x48001200, 0x9008140d, 0x8058b040,
0x05fe07fb, 0x5c00b000, 0x1c01f000, 0x4803c856,
0x4d440000, 0x4d340000, 0x4c580000, 0x4c5c0000,
0x6040b000, 0x61c2880f, 0x5924b809, 0x83440580,
0x000007fe, 0x05000005, 0x505e6800, 0x813669c0,
- 0x05000002, 0x050dff45, 0x81468800, 0x805cb800,
+ 0x05000002, 0x0515fba3, 0x81468800, 0x805cb800,
0x8058b040, 0x05fe07f6, 0x5c00b800, 0x5c00b000,
- 0x5c026800, 0x5c028800, 0x1c01f000, 0x4923c857,
- 0x61fa880f, 0x42003000, 0x00fffffe, 0x0511f990,
- 0x05020011, 0x599c0208, 0x48026c12, 0x4d2c0000,
- 0x417a5800, 0x0535fa2e, 0x5c025800, 0x0500000a,
- 0x59a8007b, 0x80000000, 0x4803507b, 0x59240200,
- 0x84000550, 0x84000512, 0x48024a00, 0x90000541,
- 0x1c01f000, 0x80000580, 0x05fdf7fe, 0x4923c857,
- 0x4d300000, 0x4d440000, 0x61fa880f, 0x42003000,
- 0x00fffffe, 0x0511f976, 0x0502001b, 0x0525fe86,
- 0x05000019, 0x497a6009, 0x4936600a, 0x4926601d,
- 0x64066407, 0x600c0800, 0x0511f940, 0x599c0208,
- 0x48026c12, 0x600a7000, 0x0005fc78, 0x59240200,
- 0x4927c857, 0x82000500, 0xffffff9d, 0x8400054e,
- 0x48024a00, 0x59a8021b, 0x82000500, 0xffffdafc,
- 0x8400054e, 0x4803521b, 0x5c028800, 0x5c026000,
- 0x1c01f000, 0x80000580, 0x05fdf7fc, 0x4c580000,
- 0x0541face, 0x485bc857, 0x41782800, 0x42002000,
- 0x0010b391, 0x58100200, 0x90000503, 0x90000583,
- 0x05020003, 0x90000541, 0x0501f005, 0x80142800,
- 0x9010240b, 0x8058b040, 0x05fe07f7, 0x5c00b000,
- 0x1c01f000, 0x0501f805, 0x60018800, 0x05000002,
- 0x60058800, 0x1c01f000, 0x4c580000, 0x0541fab7,
- 0x42001000, 0x0010b391, 0x58080200, 0x8c00051a,
- 0x05020004, 0x9008140b, 0x8058b040, 0x05fe07fb,
- 0x5c00b000, 0x1c01f000, 0x00007eef, 0x00007de8,
- 0x00007ce4, 0x000080e2, 0x00007be1, 0x000080e0,
- 0x000080dc, 0x000080da, 0x00007ad9, 0x000080d6,
- 0x000080d5, 0x000080d4, 0x000080d3, 0x000080d2,
- 0x000080d1, 0x000079ce, 0x000078cd, 0x000080cc,
- 0x000080cb, 0x000080ca, 0x000080c9, 0x000080c7,
- 0x000080c6, 0x000077c5, 0x000076c3, 0x000080bc,
- 0x000080ba, 0x000075b9, 0x000080b6, 0x000074b5,
- 0x000073b4, 0x000072b3, 0x000080b2, 0x000080b1,
- 0x000080ae, 0x000071ad, 0x000080ac, 0x000070ab,
- 0x00006faa, 0x00006ea9, 0x000080a7, 0x00006da6,
- 0x00006ca5, 0x00006ba3, 0x00006a9f, 0x0000699e,
- 0x0000689d, 0x0000809b, 0x00008098, 0x00006797,
- 0x00006690, 0x0000658f, 0x00006488, 0x00006384,
- 0x00006282, 0x00008081, 0x00008080, 0x0000617c,
- 0x0000607a, 0x00008079, 0x00005f76, 0x00008075,
- 0x00008074, 0x00008073, 0x00008072, 0x00008071,
- 0x0000806e, 0x00005e6d, 0x0000806c, 0x00005d6b,
- 0x00005c6a, 0x00005b69, 0x00008067, 0x00005a66,
- 0x00005965, 0x00005863, 0x0000575c, 0x0000565a,
- 0x00005559, 0x00008056, 0x00008055, 0x00005454,
- 0x00005353, 0x00005252, 0x00005151, 0x0000504e,
- 0x00004f4d, 0x0000804c, 0x0000804b, 0x00004e4a,
- 0x00004d49, 0x00008047, 0x00004c46, 0x00008045,
- 0x00008043, 0x0000803c, 0x0000803a, 0x00008039,
- 0x00008036, 0x00004b35, 0x00008034, 0x00004a33,
- 0x00004932, 0x00004831, 0x0000802e, 0x0000472d,
- 0x0000462c, 0x0000452b, 0x0000442a, 0x00004329,
- 0x00004227, 0x00008026, 0x00008025, 0x00004123,
- 0x0000401f, 0x00003f1e, 0x00003e1d, 0x00003d1b,
- 0x00003c18, 0x00008017, 0x00008010, 0x00003b0f,
- 0x00003a08, 0x00008004, 0x00003902, 0x00008001,
- 0x00008000, 0x00008000, 0x00003800, 0x00003700,
- 0x00003600, 0x00008000, 0x00003500, 0x00008000,
- 0x00008000, 0x00008000, 0x00003400, 0x00008000,
+ 0x5c026800, 0x5c028800, 0x1c01f000, 0x5c000000,
+ 0x4c000000, 0x4803c857, 0x4c5c0000, 0x4c600000,
+ 0x4c580000, 0x4d240000, 0x4d200000, 0x4178c000,
+ 0x59a804cc, 0x4803c857, 0x8c00050c, 0x0502001c,
+ 0x0555f9f8, 0x417a4000, 0x42024800, 0x0010e512,
+ 0x5924b80b, 0x825cbd00, 0x00001fff, 0x805cb9c0,
+ 0x0500000f, 0x405c1000, 0x0501f827, 0x05000017,
+ 0x916c0583, 0x0502000a, 0x59240200, 0x8c000500,
+ 0x05000007, 0x8c000502, 0x05020005, 0x8c00051e,
+ 0x05000003, 0x41780800, 0x0501f87f, 0x81224000,
+ 0x91264c0d, 0x8058b040, 0x05fe07ea, 0x8060c1c0,
+ 0x5c024000, 0x5c024800, 0x5c00b000, 0x5c00c000,
+ 0x5c00b800, 0x1c01f000, 0x405c1000, 0x480bc856,
+ 0x4d3c0000, 0x4d400000, 0x60aa8000, 0x600a7800,
+ 0x41780800, 0x813261c0, 0x05000002, 0x60400800,
+ 0x0501f81a, 0x5c028000, 0x5c027800, 0x8060c000,
+ 0x05fdf7e7, 0x5c000000, 0x4c000000, 0x4803c857,
+ 0x480bc857, 0x41780800, 0x60800000, 0x052df85b,
+ 0x4807c857, 0x607c1800, 0x40040000, 0x800c0480,
+ 0x82000c00, 0x0010d15b, 0x50040800, 0x4807c857,
+ 0x82080400, 0x00110672, 0x50000000, 0x4803c857,
+ 0x80040500, 0x1c01f000, 0x480bc857, 0x4d200000,
+ 0x4d240000, 0x4c580000, 0x4c5c0000, 0x4c600000,
+ 0x4008c000, 0x4004b800, 0x0555f9aa, 0x417a4000,
+ 0x42024800, 0x0010e512, 0x5924000b, 0x82000500,
+ 0x00001fff, 0x80600580, 0x05020013, 0x8c5c0506,
+ 0x0502000a, 0x05fdff10, 0x497a4805, 0x8c5c0508,
+ 0x0500000d, 0x60643000, 0x61fc19ff, 0x601c2000,
+ 0x0511f8ec, 0x0501f008, 0x8c640502, 0x05020005,
+ 0x05fdff05, 0x497a4805, 0x497a480b, 0x0501f002,
+ 0x0521fa84, 0x81224000, 0x91264c0d, 0x8058b040,
+ 0x05fe07e6, 0x5c00c000, 0x5c00b800, 0x5c00b000,
+ 0x5c024800, 0x5c024000, 0x1c01f000, 0x4803c856,
+ 0x4c580000, 0x4d240000, 0x4d200000, 0x59a804cc,
+ 0x8c00050c, 0x05020018, 0x0555f97e, 0x8058b040,
+ 0x05000015, 0x60064000, 0x42024800, 0x0010e51f,
+ 0x59240200, 0x8c00051e, 0x0500000b, 0x8c00050e,
+ 0x05020009, 0x59a802cc, 0x5924080b, 0x82040d00,
+ 0x00001fff, 0x80040580, 0x05000003, 0x41780800,
+ 0x0501f809, 0x91264c0d, 0x81224000, 0x8058b040,
+ 0x05fe07f0, 0x5c024000, 0x5c024800, 0x5c00b000,
+ 0x1c01f000, 0x4d300000, 0x4d440000, 0x4c040000,
+ 0x61fa880f, 0x42003000, 0x00fffffe, 0x0515fd7d,
+ 0x05020018, 0x0535fc6a, 0x05000016, 0x5c000800,
+ 0x48066009, 0x4936600a, 0x4926601d, 0x64066407,
+ 0x600c0800, 0x0515fd4c, 0x599c0208, 0x48026c12,
+ 0x600a7000, 0x0009f800, 0x497a4805, 0x59240200,
+ 0x82000500, 0xffffff9d, 0x82000540, 0x00008080,
+ 0x48024a00, 0x5c028800, 0x5c026000, 0x1c01f000,
+ 0x5c000800, 0x05fdf7fc, 0x480bc857, 0x4c5c0000,
+ 0x4c580000, 0x4d200000, 0x4d240000, 0x0555f93d,
+ 0x8058b040, 0x0500001c, 0x4008b800, 0x60064000,
+ 0x42024800, 0x0010e51f, 0x59240200, 0x8c000500,
+ 0x05000011, 0x82000500, 0x00008100, 0x0502000e,
+ 0x5924000b, 0x82000500, 0x00001fff, 0x05000005,
+ 0x805c0580, 0x05020008, 0x0501f82f, 0x0501f006,
+ 0x42001000, 0x0010e512, 0x5808000b, 0x4802480b,
+ 0x0501f829, 0x81224000, 0x91264c0d, 0x8058b040,
+ 0x05fe07ea, 0x5c024800, 0x5c024000, 0x5c00b000,
+ 0x5c00b800, 0x1c01f000, 0x480bc857, 0x4c580000,
+ 0x4c600000, 0x4008c000, 0x0555f916, 0x42001800,
+ 0x0010e512, 0x580c000b, 0x82000500, 0x00001fff,
+ 0x80600580, 0x0502000e, 0x81240583, 0x0500000c,
+ 0x580c0a00, 0x90040503, 0x90000583, 0x05020008,
+ 0x82040d40, 0x000080e0, 0x48041a00, 0x5924080c,
+ 0x497a480c, 0x4804180c, 0x0501f004, 0x900c1c0d,
+ 0x8058b040, 0x05fe07ec, 0x5c00c000, 0x5c00b000,
+ 0x1c01f000, 0x4923c857, 0x61fa880f, 0x42003000,
+ 0x00fffffe, 0x0515fd17, 0x05020011, 0x599c0208,
+ 0x48026c12, 0x4d2c0000, 0x417a5800, 0x0545fa54,
+ 0x5c025800, 0x0500000a, 0x59a800bb, 0x80000000,
+ 0x480350bb, 0x59240200, 0x84000550, 0x84000512,
+ 0x48024a00, 0x90000541, 0x1c01f000, 0x80000580,
+ 0x05fdf7fe, 0x4923c857, 0x4d300000, 0x4d440000,
+ 0x61fa880f, 0x42003000, 0x00fffffe, 0x0515fcfd,
+ 0x0502001b, 0x0535fbea, 0x05000019, 0x497a6009,
+ 0x4936600a, 0x4926601d, 0x64066407, 0x600c0800,
+ 0x0515fccd, 0x599c0208, 0x48026c12, 0x600a7000,
+ 0x0009f800, 0x59240200, 0x4927c857, 0x82000500,
+ 0xffffff9d, 0x8400054e, 0x48024a00, 0x59a80249,
+ 0x82000500, 0xffffdafc, 0x8400054e, 0x48035249,
+ 0x5c028800, 0x5c026000, 0x1c01f000, 0x80000580,
+ 0x05fdf7fc, 0x4c580000, 0x4807c857, 0x0555f8bd,
+ 0x41782800, 0x42002000, 0x0010e512, 0x58100200,
+ 0x80040500, 0x80040580, 0x05000007, 0x80142800,
+ 0x9010240d, 0x8058b040, 0x05fe07f9, 0x5c00b000,
+ 0x1c01f000, 0x90000541, 0x05fdf7fd, 0x4c580000,
+ 0x0555f8ac, 0x42001000, 0x0010e512, 0x58080200,
+ 0x8c00051a, 0x05020004, 0x9008140d, 0x8058b040,
+ 0x05fe07fb, 0x5c00b000, 0x1c01f000, 0x00007eef,
+ 0x00007de8, 0x00007ce4, 0x000080e2, 0x00007be1,
+ 0x000080e0, 0x000080dc, 0x000080da, 0x00007ad9,
+ 0x000080d6, 0x000080d5, 0x000080d4, 0x000080d3,
+ 0x000080d2, 0x000080d1, 0x000079ce, 0x000078cd,
+ 0x000080cc, 0x000080cb, 0x000080ca, 0x000080c9,
+ 0x000080c7, 0x000080c6, 0x000077c5, 0x000076c3,
+ 0x000080bc, 0x000080ba, 0x000075b9, 0x000080b6,
+ 0x000074b5, 0x000073b4, 0x000072b3, 0x000080b2,
+ 0x000080b1, 0x000080ae, 0x000071ad, 0x000080ac,
+ 0x000070ab, 0x00006faa, 0x00006ea9, 0x000080a7,
+ 0x00006da6, 0x00006ca5, 0x00006ba3, 0x00006a9f,
+ 0x0000699e, 0x0000689d, 0x0000809b, 0x00008098,
+ 0x00006797, 0x00006690, 0x0000658f, 0x00006488,
+ 0x00006384, 0x00006282, 0x00008081, 0x00008080,
+ 0x0000617c, 0x0000607a, 0x00008079, 0x00005f76,
+ 0x00008075, 0x00008074, 0x00008073, 0x00008072,
+ 0x00008071, 0x0000806e, 0x00005e6d, 0x0000806c,
+ 0x00005d6b, 0x00005c6a, 0x00005b69, 0x00008067,
+ 0x00005a66, 0x00005965, 0x00005863, 0x0000575c,
+ 0x0000565a, 0x00005559, 0x00008056, 0x00008055,
+ 0x00005454, 0x00005353, 0x00005252, 0x00005151,
+ 0x0000504e, 0x00004f4d, 0x0000804c, 0x0000804b,
+ 0x00004e4a, 0x00004d49, 0x00008047, 0x00004c46,
+ 0x00008045, 0x00008043, 0x0000803c, 0x0000803a,
+ 0x00008039, 0x00008036, 0x00004b35, 0x00008034,
+ 0x00004a33, 0x00004932, 0x00004831, 0x0000802e,
+ 0x0000472d, 0x0000462c, 0x0000452b, 0x0000442a,
+ 0x00004329, 0x00004227, 0x00008026, 0x00008025,
+ 0x00004123, 0x0000401f, 0x00003f1e, 0x00003e1d,
+ 0x00003d1b, 0x00003c18, 0x00008017, 0x00008010,
+ 0x00003b0f, 0x00003a08, 0x00008004, 0x00003902,
+ 0x00008001, 0x00008000, 0x00008000, 0x00003800,
+ 0x00003700, 0x00003600, 0x00008000, 0x00003500,
+ 0x00008000, 0x00008000, 0x00008000, 0x00003400,
0x00008000, 0x00008000, 0x00008000, 0x00008000,
- 0x00008000, 0x00003300, 0x00003200, 0x00008000,
+ 0x00008000, 0x00008000, 0x00003300, 0x00003200,
0x00008000, 0x00008000, 0x00008000, 0x00008000,
- 0x00008000, 0x00003100, 0x00003000, 0x00008000,
- 0x00008000, 0x00002f00, 0x00008000, 0x00002e00,
- 0x00002d00, 0x00002c00, 0x00008000, 0x00008000,
- 0x00008000, 0x00002b00, 0x00008000, 0x00002a00,
- 0x00002900, 0x00002800, 0x00008000, 0x00002700,
- 0x00002600, 0x00002500, 0x00002400, 0x00002300,
- 0x00002200, 0x00008000, 0x00008000, 0x00002100,
- 0x00002000, 0x00001f00, 0x00001e00, 0x00001d00,
- 0x00001c00, 0x00008000, 0x00008000, 0x00001b00,
- 0x00001a00, 0x00008000, 0x00001900, 0x00008000,
+ 0x00008000, 0x00008000, 0x00003100, 0x00003000,
+ 0x00008000, 0x00008000, 0x00002f00, 0x00008000,
+ 0x00002e00, 0x00002d00, 0x00002c00, 0x00008000,
+ 0x00008000, 0x00008000, 0x00002b00, 0x00008000,
+ 0x00002a00, 0x00002900, 0x00002800, 0x00008000,
+ 0x00002700, 0x00002600, 0x00002500, 0x00002400,
+ 0x00002300, 0x00002200, 0x00008000, 0x00008000,
+ 0x00002100, 0x00002000, 0x00001f00, 0x00001e00,
+ 0x00001d00, 0x00001c00, 0x00008000, 0x00008000,
+ 0x00001b00, 0x00001a00, 0x00008000, 0x00001900,
0x00008000, 0x00008000, 0x00008000, 0x00008000,
- 0x00008000, 0x00001800, 0x00008000, 0x00001700,
- 0x00001600, 0x00001500, 0x00008000, 0x00001400,
- 0x00001300, 0x00001200, 0x00001100, 0x00001000,
- 0x00000f00, 0x00008000, 0x00008000, 0x00000e00,
- 0x00000d00, 0x00000c00, 0x00000b00, 0x00000a00,
- 0x00000900, 0x00008000, 0x00008000, 0x00000800,
- 0x00000700, 0x00008000, 0x00000600, 0x00008000,
- 0x00008000, 0x00008000, 0x00000500, 0x00000400,
- 0x00000300, 0x00008000, 0x00000200, 0x00008000,
- 0x00008000, 0x00008000, 0x00000100, 0x00008000,
+ 0x00008000, 0x00008000, 0x00001800, 0x00008000,
+ 0x00001700, 0x00001600, 0x00001500, 0x00008000,
+ 0x00001400, 0x00001300, 0x00001200, 0x00001100,
+ 0x00001000, 0x00000f00, 0x00008000, 0x00008000,
+ 0x00000e00, 0x00000d00, 0x00000c00, 0x00000b00,
+ 0x00000a00, 0x00000900, 0x00008000, 0x00008000,
+ 0x00000800, 0x00000700, 0x00008000, 0x00000600,
+ 0x00008000, 0x00008000, 0x00008000, 0x00000500,
+ 0x00000400, 0x00000300, 0x00008000, 0x00000200,
+ 0x00008000, 0x00008000, 0x00008000, 0x00000100,
0x00008000, 0x00008000, 0x00008000, 0x00008000,
- 0x00008000, 0x00000000, 0x00008000, 0x00008000,
+ 0x00008000, 0x00008000, 0x00000000, 0x00008000,
0x00008000, 0x00008000, 0x00008000, 0x00008000,
0x00008000, 0x00008000, 0x00008000, 0x00008000,
0x00008000, 0x00008000, 0x00008000, 0x00008000,
- 0x00008000, 0x00008000, 0x05f1fbb3, 0x05f00838,
- 0x492f4017, 0x1c01f000, 0x91a0ac07, 0x83a00580,
- 0x0010ae99, 0x05000008, 0x492fc857, 0x812e59c0,
- 0x05f0082f, 0x912ca407, 0x6034b000, 0x0541f94d,
- 0x0501f00d, 0x6040b000, 0x91e0a420, 0x50500000,
- 0x8050a000, 0x50500800, 0x900409c0, 0x80040540,
- 0x4400a800, 0x8050a000, 0x8054a800, 0x8058b040,
- 0x05fe07f7, 0x1c01f000, 0x59a00207, 0xb0000cbf,
- 0x050210be, 0x0c01f001, 0x0010225c, 0x00102292,
- 0x00102292, 0x001022dc, 0x001022f1, 0x00102292,
- 0x0010225c, 0x00102306, 0x00102317, 0x00102292,
- 0x00102292, 0x0010232f, 0x0010234d, 0x0010236b,
- 0x00102292, 0x00102388, 0x00102292, 0x00102292,
- 0x001023a8, 0x00102292, 0x0010245b, 0x00102292,
- 0x00102292, 0x00102292, 0x00102292, 0x00102482,
- 0x001024d9, 0x00102292, 0x00102292, 0x00102292,
- 0x00102292, 0x00102292, 0x00102525, 0x00102292,
- 0x0010256d, 0x00102292, 0x00102292, 0x00102292,
- 0x00102292, 0x00102572, 0x0010266c, 0x00102292,
- 0x00102673, 0x00102292, 0x00102292, 0x00102292,
- 0x00102292, 0x00102292, 0x00102674, 0x001026fc,
- 0x0010289a, 0x001028a6, 0x00102292, 0x00102292,
- 0x00102292, 0x00102292, 0x001028b9, 0x00102292,
- 0x00102292, 0x00102292, 0x00102292, 0x00102292,
- 0x00102292, 0x00102292, 0x001028dd, 0x0010291b,
- 0x0010295f, 0x00102976, 0x0010e615, 0x0010ec14,
- 0x001029b5, 0x00102292, 0x00102e44, 0x00102afa,
- 0x00102b33, 0x00102292, 0x00102292, 0x00102292,
- 0x00102292, 0x00102292, 0x00102292, 0x00102292,
- 0x00102292, 0x00102b4e, 0x00102bab, 0x00102292,
- 0x00102292, 0x00102c07, 0x00102292, 0x00102c83,
- 0x00102d07, 0x00102292, 0x00102292, 0x00102d76,
- 0x00102e00, 0x00102292, 0x00102e44, 0x001030af,
- 0x00102292, 0x001030be, 0x00103138, 0x00102292,
- 0x00102292, 0x00102292, 0x00102292, 0x00103187,
- 0x001031a1, 0x001031ba, 0x00102292, 0x00103230,
- 0x00102292, 0x00102292, 0x0010326e, 0x00102292,
- 0x00103292, 0x00102292, 0x00102292, 0x001032e6,
- 0x0010341b, 0x00102292, 0x00102292, 0x00102292,
- 0x00102292, 0x00102292, 0x0010345d, 0x001034dd,
- 0x00102292, 0x48efc857, 0x4031d800, 0x58ef400a,
- 0x58ec0002, 0x82000580, 0x00000200, 0x0500003b,
- 0x48efc857, 0x4a034207, 0x00004000, 0x0509fb44,
- 0x83a00580, 0x0010ae99, 0x0500000b, 0x58ee5809,
- 0x4d2c0000, 0x0501f850, 0x41a25800, 0x05f1fb25,
- 0x40ee5800, 0x05f1fb23, 0x5c025800, 0x492fc857,
- 0x0001f35b, 0x05026007, 0x59a0001e, 0x84000542,
- 0x4803401e, 0x4a01d808, 0x0010226d, 0x1c01f000,
+ 0x00008000, 0x00008000, 0x00008000, 0x05f1f81e,
+ 0x05ec0c86, 0x492f4017, 0x1c01f000, 0x91a0ac07,
+ 0x83a00580, 0x0010dceb, 0x05000008, 0x492fc857,
+ 0x812e59c0, 0x05ec0c7d, 0x912ca40a, 0x6034b000,
+ 0x0551ff47, 0x0501f00d, 0x6040b000, 0x91e0a420,
+ 0x50500000, 0x8050a000, 0x50500800, 0x900409c0,
+ 0x80040540, 0x4400a800, 0x8050a000, 0x8054a800,
+ 0x8058b040, 0x05fe07f7, 0x1c01f000, 0x42000000,
+ 0x0010e3bc, 0x0551fe6e, 0x59a00207, 0xb0000cbf,
+ 0x050210ba, 0x0c01f001, 0x001029f8, 0x00102a2e,
+ 0x00102a2e, 0x00102a7a, 0x00102a8f, 0x00102a2e,
+ 0x001029f8, 0x00102aa6, 0x00102ab7, 0x00102a2e,
+ 0x00102a2e, 0x00102ad0, 0x00102aef, 0x00102b0e,
+ 0x00102a2e, 0x00102b2b, 0x00102a2e, 0x00102a2e,
+ 0x00102b4b, 0x00102a2e, 0x00102c08, 0x00102a2e,
+ 0x00102a2e, 0x00102a2e, 0x00102a2e, 0x00102c2f,
+ 0x00102c8a, 0x00102a2e, 0x00102a2e, 0x00102a2e,
+ 0x00102cd8, 0x00102cf9, 0x00102f40, 0x00102a2e,
+ 0x00102f8d, 0x00102a2e, 0x00102a2e, 0x00102a2e,
+ 0x00102a2e, 0x00102f92, 0x00103094, 0x00102a2e,
+ 0x0010309b, 0x00102a2e, 0x00102a2e, 0x00102a2e,
+ 0x00102a2e, 0x00102a2e, 0x0010309c, 0x0010315f,
+ 0x00103360, 0x0010336c, 0x00102a2e, 0x00102a2e,
+ 0x00102a2e, 0x00102a2e, 0x0010337f, 0x00102a2e,
+ 0x00102a2e, 0x00102a2e, 0x00102a2e, 0x00102a2e,
+ 0x00102a2e, 0x00102a2e, 0x001033a8, 0x001033ea,
+ 0x00103432, 0x00103449, 0x00103461, 0x001036ae,
+ 0x00103a28, 0x00102a2e, 0x00103f5d, 0x00103b98,
+ 0x00103bcd, 0x00102a2e, 0x00102a2e, 0x00102a2e,
+ 0x00102a2e, 0x00102a2e, 0x00102a2e, 0x00102a2e,
+ 0x00102a2e, 0x00103be8, 0x00103c39, 0x00102a2e,
+ 0x00102a2e, 0x00103c8d, 0x00102a2e, 0x00103d05,
+ 0x00103dba, 0x00103e61, 0x00102a2e, 0x00103e8f,
+ 0x00103f19, 0x00102a2e, 0x00103f5d, 0x001042c2,
+ 0x00102a2e, 0x001042d1, 0x0010434b, 0x00102a2e,
+ 0x00102a2e, 0x00102a2e, 0x00102a2e, 0x001043a8,
+ 0x001043c2, 0x001043db, 0x00102a2e, 0x0010444d,
+ 0x00102a2e, 0x00102a2e, 0x00104491, 0x00102a2e,
+ 0x001044b5, 0x00102a2e, 0x00102a2e, 0x0010450c,
+ 0x00104639, 0x00102a2e, 0x00102a2e, 0x00102a2e,
+ 0x00102a2e, 0x00102a2e, 0x0010467b, 0x001046fa,
+ 0x00102a2e, 0x48efc857, 0x0509fc65, 0x0500003b,
+ 0x48efc857, 0x4a034207, 0x00004000, 0x050dfdb6,
+ 0x83a00580, 0x0010dceb, 0x0500000b, 0x58ee580a,
+ 0x4d2c0000, 0x0501f852, 0x41a25800, 0x05edff8f,
+ 0x40ee5800, 0x05edff8d, 0x5c025800, 0x492fc857,
+ 0x0001f382, 0x05026007, 0x59a0001e, 0x84000542,
+ 0x4803401e, 0x4a01d809, 0x00102a09, 0x1c01f000,
0x59a00207, 0x82000d80, 0x00004000, 0x05000005,
0x900001c0, 0x90000551, 0x4803c011, 0x0501f004,
- 0x900001c0, 0x90000550, 0x4803c011, 0x0501f844,
- 0x59e00017, 0x8c00050a, 0x60000800, 0x0002088c,
- 0x8d0c0530, 0x05f60fdc, 0x000209af, 0x6403c017,
+ 0x900001c0, 0x90000550, 0x4803c011, 0x0501f846,
+ 0x59e00017, 0x8c00050a, 0x60000800, 0x00020892,
+ 0x8d0c0530, 0x05f60ca4, 0x000209bc, 0x6403c017,
0x4203e000, 0x30000001, 0x4203e000, 0x40000000,
- 0x40ee5800, 0x05f1faff, 0x59a0001e, 0x84000504,
+ 0x40ee5800, 0x05edff69, 0x59a0001e, 0x84000504,
0x4803401e, 0x1c01f000, 0x4803c856, 0x4a034207,
0x00004001, 0x05fdf7ca, 0x4803c856, 0x4a034207,
0x00004002, 0x05fdf7c6, 0x4803c856, 0x4a034207,
- 0x00004003, 0x05fdf7c2, 0x4803c856, 0x4a034207,
- 0x00004005, 0x05fdf7be, 0x4803c856, 0x4a034207,
- 0x00004006, 0x05fdf7ba, 0x4803c856, 0x4a034207,
- 0x0000400b, 0x05fdf7b6, 0x4803c856, 0x4a034207,
- 0x0000400c, 0x05fdf7b2, 0x4803c856, 0x4a034207,
- 0x0000400c, 0x05fdf7ae, 0x4a034207, 0x00004020,
- 0x05fdf7ab, 0x4c580000, 0x4c500000, 0x4c540000,
- 0x58eca809, 0x8054a9c0, 0x05ec0f35, 0x91a0a407,
- 0x9054ac07, 0x6034b000, 0x0541f852, 0x5c00a800,
- 0x5c00a000, 0x5c00b000, 0x1c01f000, 0x4c580000,
- 0x4c500000, 0x4c540000, 0x59a00007, 0x4803c857,
- 0x59a00008, 0x4803c857, 0x59a00009, 0x4803c857,
- 0x91e0ac20, 0x91a0a407, 0x6040b000, 0x50500000,
- 0x4400a800, 0x8054a800, 0x900001c0, 0x4400a800,
- 0x8054a800, 0x8050a000, 0x8058b040, 0x05fe07f8,
- 0x5c00a800, 0x5c00a000, 0x5c00b000, 0x1c01f000,
- 0x59a00407, 0x800000c2, 0x59a00a08, 0x900409c0,
- 0x80040540, 0x84000540, 0x59a00c08, 0x8c040500,
- 0x0500000b, 0x4c000000, 0x0541f887, 0x5c000000,
- 0x05000004, 0x48030004, 0x64030000, 0x05fdf771,
- 0x64030000, 0x64134407, 0x05fc07b0, 0x4803880e,
- 0x05fdf76c, 0x59a00407, 0x800000c2, 0x59a00c08,
- 0x8c040500, 0x0500000d, 0x4c000000, 0x0541f876,
- 0x5c000000, 0x05000006, 0x48030004, 0x59800805,
- 0x48074407, 0x64030000, 0x05fdf75e, 0x64030000,
- 0x64134407, 0x05fc079d, 0x4803880e, 0x59c4080f,
- 0x48074407, 0x05fdf757, 0x59a01c07, 0x59a00208,
+ 0x00004003, 0x05fdf7c2, 0x05f9ff55, 0x4803c856,
+ 0x4a034207, 0x00004005, 0x05fdf7bd, 0x05f9ff50,
+ 0x4803c856, 0x4a034207, 0x00004006, 0x05fdf7b8,
+ 0x4803c856, 0x4a034207, 0x0000400b, 0x05fdf7b4,
+ 0x4803c856, 0x4a034207, 0x0000400c, 0x05fdf7b0,
+ 0x4803c856, 0x4a034207, 0x0000400c, 0x05fdf7ac,
+ 0x4a034207, 0x00004020, 0x05fdf7a9, 0x4c580000,
+ 0x4c500000, 0x4c540000, 0x58eca80a, 0x8054a9c0,
+ 0x05ec0b82, 0x91a0a407, 0x9054ac0a, 0x6034b000,
+ 0x0551fe4b, 0x5c00a800, 0x5c00a000, 0x5c00b000,
+ 0x1c01f000, 0x4c580000, 0x4c500000, 0x4c540000,
+ 0x59a00007, 0x4803c857, 0x59a00008, 0x4803c857,
+ 0x59a00009, 0x4803c857, 0x91e0ac20, 0x91a0a407,
+ 0x6040b000, 0x50500000, 0x4400a800, 0x8054a800,
+ 0x900001c0, 0x4400a800, 0x8054a800, 0x8050a000,
+ 0x8058b040, 0x05fe07f8, 0x5c00a800, 0x5c00a000,
+ 0x5c00b000, 0x1c01f000, 0x59a00407, 0x800000c2,
+ 0x59a00a08, 0x900409c0, 0x80040540, 0x84000540,
+ 0x59a00c08, 0x8c040500, 0x0500000b, 0x4c000000,
+ 0x0551fe7b, 0x5c000000, 0x05000004, 0x48030004,
+ 0x64030000, 0x05fdf76f, 0x64030000, 0x64134407,
+ 0x05fc07af, 0x4803880e, 0x05fdf76a, 0x59a00407,
+ 0x800000c2, 0x59a00c08, 0x8c040500, 0x0500000d,
+ 0x4c000000, 0x0551fe6a, 0x5c000000, 0x05000006,
+ 0x48030004, 0x59800805, 0x48074407, 0x64030000,
+ 0x05fdf75c, 0x64030000, 0x64134407, 0x05fc079c,
+ 0x4803880e, 0x59c4080f, 0x48074407, 0x900409c0,
+ 0x48074208, 0x05fdf753, 0x59a01c07, 0x59a00208,
0x900c19c0, 0x800c1d40, 0x580c0803, 0x80000580,
0x500c1000, 0x80080400, 0x800c1800, 0x80040840,
0x05fe07fc, 0x48034407, 0x900001c0, 0x48034208,
- 0x800001c0, 0x05fc0747, 0x05fdf784, 0x64174407,
- 0x64174208, 0x64034408, 0x59a8000a, 0x82000c80,
+ 0x800001c0, 0x05fc0743, 0x05fdf780, 0x641f4407,
+ 0x640f4208, 0x64034408, 0x59a8000a, 0x82000c80,
0x00140000, 0x05021004, 0x42000000, 0x0013ffff,
- 0x0501f006, 0x59a8088a, 0x8c040500, 0x05000003,
+ 0x0501f006, 0x59a808ca, 0x8c040500, 0x05000003,
0x82000400, 0x00006000, 0x48034209, 0x900001c0,
- 0x48034409, 0x60540121, 0x4803420a, 0x900001c0,
- 0x4803440e, 0x6403400f, 0x05fdf72e, 0x59a00408,
+ 0x48034409, 0x61540121, 0x4803420a, 0x900001c0,
+ 0x4803440e, 0x60000000, 0x4803400f, 0x05fdf729,
+ 0x59a00408, 0x59a01208, 0x900811c0, 0x80081540,
+ 0x59a0040a, 0x59a01a0a, 0x900c19c0, 0x800c1d40,
+ 0x59a00a09, 0x59a00409, 0x900409c0, 0x80040d40,
+ 0x59a0020b, 0x59a02407, 0x900001c0, 0x80100540,
+ 0x82002480, 0x00100000, 0x05fc175e, 0x59a8280a,
+ 0x80142480, 0x050e14da, 0x42002800, 0x7fefffff,
+ 0x80142480, 0x05fe1757, 0x42002800, 0x7ffd0000,
+ 0x80142480, 0x05fc1753, 0x050df4d1, 0x59a00408,
0x59a01208, 0x900811c0, 0x80081540, 0x59a0040a,
0x59a01a0a, 0x900c19c0, 0x800c1d40, 0x59a00a09,
0x59a00409, 0x900409c0, 0x80040d40, 0x59a0020b,
- 0x90002490, 0x05fc1765, 0x59a02407, 0x900001c0,
- 0x80100540, 0x59a8280a, 0x80142480, 0x050a126e,
- 0x42002800, 0x7fefffff, 0x80142480, 0x05fe175b,
- 0x42002800, 0x7ffd0000, 0x80142480, 0x05fc1757,
- 0x0509f265, 0x59a00408, 0x59a01208, 0x900811c0,
- 0x80081540, 0x59a0040a, 0x59a01a0a, 0x900c19c0,
- 0x800c1d40, 0x59a00a09, 0x59a00409, 0x900409c0,
- 0x80040d40, 0x59a0020b, 0x90002490, 0x05fc1747,
- 0x59a02407, 0x900001c0, 0x80100540, 0x59a8280a,
- 0x80142480, 0x050a1256, 0x42002800, 0x7fefffff,
- 0x80142480, 0x05fe173d, 0x42002800, 0x7ffd0000,
- 0x80142480, 0x05fc1739, 0x0509f24d, 0x59a02408,
- 0x59a00208, 0x901021c0, 0x80102540, 0x59a01a0b,
+ 0x59a02407, 0x900001c0, 0x80100540, 0x82002480,
+ 0x00100000, 0x05fc173f, 0x59a8280a, 0x80142480,
+ 0x050e14c4, 0x42002800, 0x7fefffff, 0x80142480,
+ 0x05fe1738, 0x42002800, 0x7ffd0000, 0x80142480,
+ 0x05fc1734, 0x050df4bb, 0x59a02408, 0x59a00208,
+ 0x901021c0, 0x80102540, 0x59a01a0b, 0x59a00407,
+ 0x900c19c0, 0x800c1d40, 0x41781000, 0x820c0580,
+ 0x00007c00, 0x0500000a, 0x820c0480, 0x00007a00,
+ 0x05001007, 0x820c0480, 0x00007cff, 0x05021004,
+ 0x0551fddf, 0x05000007, 0x80081000, 0x44101800,
+ 0x800811c0, 0x05fc06d3, 0x64030000, 0x05fdf6d1,
+ 0x64030000, 0x64134407, 0x05fdf711, 0x59a01a0b,
0x59a00407, 0x900c19c0, 0x800c1d40, 0x41781000,
0x820c0580, 0x00007c00, 0x0500000a, 0x820c0480,
0x00007a00, 0x05001007, 0x820c0480, 0x00007cff,
- 0x05021004, 0x053dfff0, 0x05000007, 0x80081000,
- 0x44101800, 0x800811c0, 0x05fc06da, 0x64030000,
- 0x05fdf6d8, 0x64030000, 0x64134407, 0x05fdf717,
- 0x59a01a0b, 0x59a00407, 0x900c19c0, 0x800c1d40,
- 0x41781000, 0x820c0580, 0x00007c00, 0x0500000a,
- 0x820c0480, 0x00007a00, 0x05001007, 0x820c0480,
- 0x00007cff, 0x05021004, 0x053dffd7, 0x0500000e,
- 0x80081000, 0x500c0000, 0x82000d00, 0x0000ffff,
- 0x48074208, 0x82000d00, 0xffff0000, 0x900409c0,
- 0x48074408, 0x800811c0, 0x05fc06ba, 0x64030000,
- 0x05fdf6b8, 0x64030000, 0x64134407, 0x05fdf6f7,
- 0x4d2c0000, 0x4d340000, 0x4d300000, 0x4d440000,
- 0x0509fad0, 0x05020006, 0x4923c857, 0x4927c857,
- 0x59a28c07, 0x0511fa1f, 0x05000006, 0x5c028800,
- 0x5c026000, 0x5c026800, 0x5c025800, 0x05fdf6eb,
- 0x4937c857, 0x59a04408, 0x59a00208, 0x900001c0,
- 0x80204540, 0x4823c857, 0x0501f877, 0x05000008,
+ 0x05021004, 0x0551fdc6, 0x0500000e, 0x80081000,
+ 0x500c0000, 0x82000d00, 0x0000ffff, 0x48074208,
+ 0x82000d00, 0xffff0000, 0x900409c0, 0x48074408,
+ 0x800811c0, 0x05fc06b3, 0x64030000, 0x05fdf6b1,
+ 0x64030000, 0x64134407, 0x05fdf6f1, 0x4d2c0000,
+ 0x4d340000, 0x4d300000, 0x4d440000, 0x050dfd36,
+ 0x05020006, 0x4923c857, 0x4927c857, 0x59a28c07,
+ 0x0515ff25, 0x05000006, 0x5c028800, 0x5c026000,
+ 0x5c026800, 0x5c025800, 0x05fdf6e6, 0x4937c857,
+ 0x59a04408, 0x59a00208, 0x900001c0, 0x80204540,
+ 0x4823c857, 0x59a04a0b, 0x0501f877, 0x05000008,
0x64074209, 0x4a034407, 0x0000ffff, 0x4a034208,
0x0000ffff, 0x497b4408, 0x0501f03d, 0x497b4407,
- 0x0501f879, 0x0500003f, 0x59300402, 0x48034407,
+ 0x0501f87e, 0x0500003f, 0x59300402, 0x48034407,
0x59300202, 0x48034208, 0x59300006, 0x48034408,
0x59a0020c, 0x8c000500, 0x05000030, 0x4933c857,
- 0x0511f9b4, 0x05000003, 0x64274407, 0x0501f031,
+ 0x0515feb9, 0x05000003, 0x64274407, 0x0501f031,
0x8d0c050e, 0x05000003, 0x64074407, 0x0501f02d,
0x916c0583, 0x05000003, 0x641f4407, 0x0501f029,
0x59340200, 0x8c00050e, 0x05000003, 0x64834407,
0x0501f024, 0x59300407, 0x90000d83, 0x05020007,
0x59300804, 0x9004051f, 0x90000584, 0x05020003,
- 0x8c04053e, 0x05020015, 0x0509f9a3, 0x05020003,
- 0x640b4407, 0x0501f017, 0x492fc857, 0x4a025c05,
- 0x00008000, 0x497a5a05, 0x497a5806, 0x0535fad8,
- 0x05020003, 0x640f4407, 0x0501f00e, 0x4a01d808,
- 0x0010240d, 0x5c028800, 0x5c026000, 0x5c026800,
+ 0x8c04053e, 0x05020015, 0x050dfc0d, 0x05020003,
+ 0x640b4407, 0x0501f017, 0x492fc857, 0x4a025c08,
+ 0x00008000, 0x497a5a08, 0x497a5809, 0x0545fb53,
+ 0x05020003, 0x640f4407, 0x0501f00e, 0x4a01d809,
+ 0x00102bb1, 0x5c028800, 0x5c026000, 0x5c026800,
0x5c025800, 0x1c01f000, 0x640b4209, 0x5c028800,
- 0x5c026000, 0x5c026800, 0x5c025800, 0x05fdf655,
+ 0x5c026000, 0x5c026800, 0x5c025800, 0x05fdf64d,
0x5c028800, 0x5c026000, 0x5c026800, 0x5c025800,
- 0x05fdf692, 0x492fc857, 0x4933c857, 0x497a602a,
- 0x592c0006, 0x82000580, 0x01000000, 0x05020003,
- 0x64134407, 0x05fdf689, 0x4d2c0000, 0x912e5c07,
+ 0x05fdf68b, 0x492fc857, 0x4933c857, 0x497a602a,
+ 0x592c0009, 0x82000580, 0x01000000, 0x05020003,
+ 0x64134407, 0x05fdf682, 0x4d2c0000, 0x912e5c0a,
0x592c0000, 0x82000580, 0x02000000, 0x05020011,
0x4803c856, 0x64134209, 0x592c0804, 0x82040500,
0x0000ffff, 0x48034409, 0x80040920, 0x4807420a,
0x592c0805, 0x82040500, 0x0000ffff, 0x4803440a,
- 0x80040920, 0x4807420b, 0x5c025800, 0x05fdf631,
+ 0x80040920, 0x4807420b, 0x5c025800, 0x05fdf629,
0x4803c856, 0x64174209, 0x592c0801, 0x82040500,
0x0000ffff, 0x48034409, 0x80040920, 0x4807420a,
- 0x05fdf7f6, 0x4937c857, 0x4823c857, 0x5934000f,
- 0x80001d40, 0x05000005, 0x580c0006, 0x80200580,
- 0x05020003, 0x81780000, 0x1c01f000, 0x580c0000,
- 0x05fdf7f8, 0x4823c857, 0x4d2c0000, 0x42026000,
- 0x00110514, 0x59300407, 0x90000d83, 0x05000003,
- 0x90000d86, 0x05020007, 0x59325809, 0x812e59c0,
- 0x05000004, 0x592c0006, 0x80200580, 0x05000009,
- 0x91326430, 0x59a8000b, 0x81300480, 0x05fc17f2,
- 0x417a6000, 0x80000580, 0x5c025800, 0x1c01f000,
- 0x90000541, 0x5c025800, 0x1c01f000, 0x83a00580,
- 0x0010ae99, 0x05fe0635, 0x64030000, 0x4a034207,
- 0x00004000, 0x4a03c011, 0x40000010, 0x05fdfe60,
- 0x59e00017, 0x8c00050a, 0x60000800, 0x0002088c,
- 0x8d0c0530, 0x05f60df8, 0x000209af, 0x6403c017,
- 0x4203e000, 0x30000001, 0x4203e000, 0x40000000,
- 0x4203e000, 0xb0100000, 0x41fc0000, 0x8c00050a,
- 0x05fc07fc, 0x053dfef8, 0x05fc07ff, 0x59800802,
- 0x8c040520, 0x05020003, 0x64030000, 0x05fdf7f5,
- 0x60101020, 0x50080000, 0x8400054c, 0x44001000,
- 0x64030000, 0x0501f000, 0x59a00c07, 0x800409c0,
- 0x05000005, 0x916c0580, 0x05000003, 0x646b4407,
- 0x05fdf616, 0x42007000, 0x0010aefa, 0x58381c01,
- 0x58382201, 0x58383202, 0x8c040500, 0x0500000b,
- 0x59a01208, 0x82080500, 0x0000f003, 0x05fe060f,
- 0x82080480, 0x00000841, 0x05fe160c, 0x82080480,
- 0x00000100, 0x05fc1609, 0x40040000, 0x800c0540,
- 0x90000528, 0x900005a8, 0x05fc0604, 0x8c04050a,
- 0x05000006, 0x59a03c08, 0x901c0486, 0x05fe15ff,
- 0x901c0481, 0x05fc15fd, 0x8c040506, 0x05000003,
- 0x4a01a8e4, 0x0000c000, 0x8c040504, 0x05000004,
- 0x59e00002, 0x8400056e, 0x4803c002, 0x8c040502,
- 0x05000004, 0x600028ec, 0x4a002805, 0xd0000000,
- 0x40040000, 0x800c0540, 0x48007401, 0x8c040500,
- 0x05000002, 0x48087201, 0x8c04050a, 0x0500001a,
- 0x481c7202, 0x4c0c0000, 0x4c100000, 0x4c180000,
- 0x051dfc7f, 0x4df00000, 0x58383a02, 0x481fc857,
- 0x41780000, 0x801c3840, 0x800010c8, 0x82081400,
- 0x0000b037, 0x64001002, 0x801c1c80, 0x05021002,
- 0x64081002, 0x80000000, 0x90001c85, 0x05fc17f7,
- 0x5c03e000, 0x051c0c5a, 0x5c003000, 0x5c002000,
- 0x5c001800, 0x480f4407, 0x48134208, 0x481b4408,
- 0x05fdf584, 0x4d440000, 0x4d340000, 0x59a28c07,
- 0x0509f9a0, 0x05020009, 0x0511f8f2, 0x05020007,
- 0x0511f8a8, 0x05000008, 0x64274407, 0x5c026800,
- 0x5c028800, 0x05fdf5b9, 0x5c026800, 0x5c028800,
- 0x05fdf5ba, 0x59a01208, 0x59a01c08, 0x5934400a,
- 0x82203d00, 0x0000e000, 0x801c391a, 0x8c080500,
- 0x0500001a, 0x900c0d07, 0x90040580, 0x0500000b,
- 0x90040581, 0x05000009, 0x90040583, 0x05000007,
- 0x90040584, 0x05000005, 0x90040593, 0x05000003,
- 0x4937c857, 0x60100800, 0x82204500, 0xffff1fff,
- 0x800400da, 0x80200540, 0x4802680a, 0x4c080000,
- 0x4c1c0000, 0x051dfc3a, 0x0511fb15, 0x051dfc24,
- 0x5c003800, 0x5c001000, 0x481f4408, 0x5934400a,
- 0x82203d00, 0x0f000000, 0x801c3930, 0x8c080504,
- 0x05020011, 0x8c080502, 0x0500000b, 0x4823c857,
- 0x82204500, 0xf0ffffff, 0x59a01a09, 0x900c0d0f,
- 0x800400f0, 0x8400056e, 0x80200540, 0x4802680a,
- 0x4803c857, 0x481f4209, 0x5c026800, 0x5c028800,
- 0x05fdf53c, 0x82204500, 0xf07fffff, 0x4822680a,
- 0x05fdf7f9, 0x8d0c050e, 0x05000003, 0x64074407,
- 0x05fdf576, 0x916c0583, 0x05020014, 0x0509f951,
- 0x05fe0576, 0x59240200, 0x8c000502, 0x0500003c,
- 0x59240005, 0x497b4407, 0x0511fe00, 0x0500000e,
- 0x82000d00, 0x00ffff00, 0x0502000b, 0x82000c00,
- 0x001020b6, 0x50040800, 0x80040910, 0x82041580,
- 0x00000080, 0x05020003, 0x641f4407, 0x05fdf55f,
- 0x48074407, 0x82000d00, 0x0000ffff, 0x48074208,
- 0x80000120, 0x48034408, 0x59a8021b, 0x82001500,
- 0x00003500, 0x480b440a, 0x8c000502, 0x05000016,
+ 0x05fdf7f6, 0x4937c857, 0x4823c857, 0x4827c857,
+ 0x5934000f, 0x80001d40, 0x05000009, 0x580c0009,
+ 0x80200580, 0x05020007, 0x580c0003, 0x58000211,
+ 0x80240580, 0x05020003, 0x81780000, 0x1c01f000,
+ 0x580c0000, 0x05fdf7f4, 0x4823c857, 0x4d2c0000,
+ 0x42026000, 0x00111b00, 0x59300407, 0x90000d83,
+ 0x05000003, 0x90000d86, 0x0502000b, 0x59325809,
+ 0x812e59c0, 0x05000008, 0x592c0003, 0x58000211,
+ 0x80240580, 0x05020004, 0x592c0009, 0x80200580,
+ 0x05000009, 0x91326430, 0x59a8000b, 0x81300480,
+ 0x05fc17ee, 0x417a6000, 0x80000580, 0x5c025800,
+ 0x1c01f000, 0x90000541, 0x5c025800, 0x1c01f000,
+ 0x83a00580, 0x0010dceb, 0x050e076a, 0x64030000,
+ 0x4a034207, 0x00004000, 0x4a03c011, 0x40000010,
+ 0x05fdfe51, 0x59e00017, 0x8c00050a, 0x60000800,
+ 0x00020892, 0x8d0c0530, 0x05f60aaf, 0x000209bc,
+ 0x6403c017, 0x4203e000, 0x30000001, 0x4203e000,
+ 0x40000000, 0x4203e000, 0xb0100000, 0x41fc0000,
+ 0x8c00050a, 0x05fc07fc, 0x0551fcdd, 0x05fc07ff,
+ 0x59800802, 0x8c040520, 0x05020003, 0x64030000,
+ 0x05fdf7f5, 0x60101020, 0x50080000, 0x8400054c,
+ 0x44001000, 0x64030000, 0x0501f000, 0x59a00c07,
+ 0x800409c0, 0x05000005, 0x916c0580, 0x05000003,
+ 0x646b4407, 0x05fdf606, 0x42007000, 0x0010e060,
+ 0x58381c01, 0x58382201, 0x58383202, 0x8c040500,
+ 0x0500000b, 0x59a01208, 0x82080500, 0x0000f003,
+ 0x05fe0600, 0x82080480, 0x00000841, 0x05fe15fd,
+ 0x82080480, 0x00000100, 0x05fc15fa, 0x40040000,
+ 0x800c0540, 0x90000528, 0x900005a8, 0x05fc05f5,
+ 0x8c04050a, 0x05000006, 0x59a03c08, 0x901c0486,
+ 0x05fe15f0, 0x901c0481, 0x05fc15ee, 0x8c04050c,
+ 0x05000003, 0x4a0378e4, 0x0000c000, 0x8c040506,
+ 0x05000003, 0x4a01a8e4, 0x0000c000, 0x8c040504,
+ 0x05000004, 0x59e00002, 0x8400056e, 0x4803c002,
+ 0x8c040502, 0x05000004, 0x600028ec, 0x4a002805,
+ 0xd0000000, 0x40040000, 0x800c0540, 0x48007401,
+ 0x8c040500, 0x05000002, 0x48087201, 0x8c04050a,
+ 0x0500001a, 0x481c7202, 0x4c0c0000, 0x4c100000,
+ 0x4c180000, 0x052df8a2, 0x4df00000, 0x58383a02,
+ 0x481fc857, 0x41780000, 0x801c3840, 0x800010c8,
+ 0x82081400, 0x0000b037, 0x64001002, 0x801c1c80,
+ 0x05021002, 0x64081002, 0x80000000, 0x90001c85,
+ 0x05fc17f7, 0x5c03e000, 0x052c0882, 0x5c003000,
+ 0x5c002000, 0x5c001800, 0x480f4407, 0x48134208,
+ 0x481b4408, 0x05fdf56f, 0x4d440000, 0x4d340000,
+ 0x59a28c07, 0x050dfbf8, 0x05020009, 0x0515fdea,
+ 0x05020007, 0x0515fda0, 0x05000008, 0x64274407,
+ 0x5c026800, 0x5c028800, 0x05fdf5a5, 0x5c026800,
+ 0x5c028800, 0x05fdf5a7, 0x59a01208, 0x59a01c08,
+ 0x5934400a, 0x82203d00, 0x0002e000, 0x801c391a,
+ 0x8c080500, 0x0500001c, 0x900c0d17, 0x90040580,
+ 0x0500000d, 0x90040581, 0x0500000b, 0x90040583,
+ 0x05000009, 0x90040584, 0x05000007, 0x90040593,
+ 0x05000005, 0x90040585, 0x05000003, 0x4937c857,
+ 0x60100800, 0x82204500, 0xfffd1fff, 0x800400da,
+ 0x80200540, 0x4802680a, 0x4c080000, 0x4c1c0000,
+ 0x052df85b, 0x0519f815, 0x052df84a, 0x5c003800,
+ 0x5c001000, 0x481f4408, 0x5934400a, 0x82203d00,
+ 0x0f000000, 0x801c3930, 0x8c080504, 0x05020011,
+ 0x8c080502, 0x0500000b, 0x4823c857, 0x82204500,
+ 0xf0ffffff, 0x59a01a09, 0x900c0d0f, 0x800400f0,
+ 0x8400056e, 0x80200540, 0x4802680a, 0x4803c857,
+ 0x481f4209, 0x5c026800, 0x5c028800, 0x05fdf525,
+ 0x82204500, 0xf07fffff, 0x4822680a, 0x05fdf7f9,
+ 0x59a02c07, 0x8c140502, 0x05020005, 0x59a00a09,
+ 0x82040480, 0x00000100, 0x05021019, 0x82041400,
+ 0x0010de60, 0x50080000, 0x80025d40, 0x05000014,
+ 0x4178b000, 0x592c0005, 0x80000d40, 0x05000004,
+ 0x8058b000, 0x58040000, 0x05fdf7fc, 0x485b4209,
+ 0x592c1408, 0x592c0c09, 0x58080100, 0x80040c80,
+ 0x05021003, 0x592c0208, 0x80040c00, 0x48074407,
+ 0x497b4408, 0x497b4208, 0x05fdf502, 0x64774407,
+ 0x05fdf543, 0x916c2d80, 0x050c0678, 0x83a00580,
+ 0x0010dceb, 0x050e0677, 0x59a02c07, 0x4817c857,
+ 0x8c140516, 0x0502003a, 0x82140500, 0x00000408,
+ 0x050200a3, 0x8c140500, 0x050200af, 0x8d0c0516,
+ 0x05000003, 0x64874407, 0x05fdf531, 0x59a00a09,
+ 0x82040480, 0x00000100, 0x050211a2, 0x8c140502,
+ 0x05020004, 0x82041400, 0x0010dd60, 0x0501f007,
+ 0x59a0020e, 0x82000480, 0x00000100, 0x05fe1529,
+ 0x82041400, 0x0010de60, 0x50080000, 0x80000540,
+ 0x05020192, 0x4c040000, 0x4c080000, 0x05edfc52,
+ 0x5c001000, 0x5c000800, 0x0500018a, 0x05011000,
+ 0x492fc840, 0x6463c842, 0x05011000, 0x8c140502,
+ 0x05020007, 0x4c080000, 0x0501f9a4, 0x5c001000,
+ 0x05fe050f, 0x452c1000, 0x05fdf4ca, 0x4c080000,
+ 0x0501f9d7, 0x5c001000, 0x05fe0509, 0x452c1000,
+ 0x05fdf4c4, 0x592c000e, 0x48034407, 0x80000120,
+ 0x48034208, 0x497a580e, 0x05fdf4be, 0x59a00a09,
+ 0x82040480, 0x00000100, 0x05021172, 0x8d0c0516,
+ 0x05000003, 0x64874407, 0x05fdf4f9, 0x8c140502,
+ 0x0502002e, 0x82041400, 0x0010dd60, 0x50080000,
+ 0x80025d40, 0x05000167, 0x592c1a00, 0x580c0000,
+ 0x592c1a0c, 0x800c0580, 0x05020160, 0x91701d82,
+ 0x0500015e, 0x412c1800, 0x59980002, 0x90000482,
+ 0x05021004, 0x4a03b004, 0x10000000, 0x0501f005,
+ 0x4c0c0000, 0x80f01d83, 0x05180f10, 0x5c001800,
+ 0x59a01208, 0x800810e0, 0x59a00408, 0x80080540,
+ 0x48001808, 0x59a0120a, 0x800810e0, 0x59a0040a,
+ 0x80080540, 0x48001809, 0x59a00a09, 0x59a0140b,
+ 0x82040400, 0x00005c00, 0x48080100, 0x480a5a0c,
+ 0x59980002, 0x90000482, 0x05fe148a, 0x4a03b004,
+ 0x10000001, 0x05fdf487, 0x82041400, 0x0010de60,
+ 0x50080000, 0x80025d40, 0x0500013a, 0x592c0005,
+ 0x80000540, 0x05020135, 0x592c1c08, 0x592c0409,
+ 0x580c0900, 0x80040580, 0x05020130, 0x412c1800,
+ 0x412c0000, 0x81740580, 0x0502000f, 0x59d80106,
+ 0x80000540, 0x05020129, 0x8d0c0524, 0x05020127,
+ 0x59980008, 0x90000482, 0x05021004, 0x4a03b104,
+ 0x10000000, 0x0501f004, 0x4c0c0000, 0x0519f8bb,
+ 0x5c001800, 0x59a01208, 0x800810e0, 0x59a00408,
+ 0x80080540, 0x48001806, 0x59a0120a, 0x800810e0,
+ 0x59a0040a, 0x80080540, 0x48001807, 0x59a00a09,
+ 0x59a0120b, 0x82040400, 0x00005e00, 0x48080000,
+ 0x48081c09, 0x59980008, 0x90000482, 0x05fe1455,
+ 0x4a03b104, 0x10000001, 0x05fdf452, 0x59a00a09,
+ 0x82040480, 0x00000100, 0x05021106, 0x82041400,
+ 0x0010dd60, 0x50080000, 0x80025d40, 0x05000101,
+ 0x8c140514, 0x05fe0784, 0x41780000, 0x0501f8ff,
+ 0x05fdf444, 0x8c140512, 0x05000003, 0x8d0c0520,
+ 0x050200f8, 0x59a00a09, 0x82040480, 0x00000100,
+ 0x050210f4, 0x800409c0, 0x050000f2, 0x8c140502,
+ 0x05020087, 0x82041400, 0x0010dd60, 0x50080000,
+ 0x80025d40, 0x050000eb, 0x592c1a00, 0x580c0000,
+ 0x592c1a0c, 0x800c0580, 0x05000003, 0x0501f96c,
+ 0x050200e2, 0x592c1a00, 0x580c0000, 0x48025a0c,
+ 0x4d340000, 0x4d440000, 0x4c080000, 0x61c2880f,
+ 0x59a04a09, 0x41440000, 0x81ac0400, 0x50026800,
+ 0x813669c0, 0x05000020, 0x5934000f, 0x40002000,
+ 0x80001d40, 0x0500001c, 0x580c0003, 0x58000211,
+ 0x80240580, 0x05000004, 0x580c0000, 0x400c2000,
+ 0x05fdf7f8, 0x4937c857, 0x4947c857, 0x480fc857,
+ 0x0501f94f, 0x0502001c, 0x4d2c0000, 0x400e5800,
+ 0x592c0800, 0x05edfbae, 0x5c025800, 0x40040000,
+ 0x5934100f, 0x800c1582, 0x0500000b, 0x4807c857,
+ 0x4813c857, 0x48042000, 0x800409c0, 0x05fe07e5,
+ 0x48126810, 0x814689c0, 0x0500000f, 0x81468840,
+ 0x05fdf7d9, 0x800409c0, 0x05020004, 0x497a680f,
+ 0x497a6810, 0x05fdf7f8, 0x4806680f, 0x40042000,
+ 0x05fdf7d8, 0x5c001000, 0x5c028800, 0x5c026800,
+ 0x0501f0a6, 0x5c001000, 0x5c028800, 0x5c026800,
+ 0x4d300000, 0x4d2c0000, 0x42026000, 0x00111b00,
+ 0x59325809, 0x812e59c0, 0x05000018, 0x592c0003,
+ 0x58000211, 0x80240580, 0x05020014, 0x0501f920,
+ 0x0502000f, 0x492fc857, 0x4d2c0000, 0x4c140000,
+ 0x4c080000, 0x053df9f8, 0x5c001000, 0x5c002800,
+ 0x5c025800, 0x05020009, 0x4c080000, 0x0005ffdc,
+ 0x05edfb77, 0x5c001000, 0x0501f004, 0x5c025800,
+ 0x5c026000, 0x0501f085, 0x91326430, 0x59a8000b,
+ 0x81300480, 0x05fc17e3, 0x5c025800, 0x5c026000,
+ 0x59980802, 0x80040840, 0x48073002, 0x45781000,
+ 0x59a00a09, 0x4807c857, 0x40f01000, 0x58080801,
+ 0x412c0000, 0x80040580, 0x05000004, 0x40041000,
+ 0x58040801, 0x05fdf7fb, 0x58040801, 0x48041001,
+ 0x4d2c0000, 0x412c0000, 0x80f00580, 0x05180e27,
+ 0x5c025800, 0x05edfb4d, 0x05fdf3b2, 0x82041400,
+ 0x0010de60, 0x50080000, 0x80025d40, 0x05000065,
+ 0x592c0005, 0x80000540, 0x05000012, 0x0501f8e8,
+ 0x0502005e, 0x592c0805, 0x4d2c0000, 0x40065800,
+ 0x58040000, 0x4c080000, 0x4c000000, 0x05edfb44,
+ 0x5c000000, 0x5c001000, 0x80000d40, 0x05fe07f8,
+ 0x5c025800, 0x48025804, 0x48025805, 0x850e1d26,
+ 0x592c1c08, 0x592c0409, 0x580c0900, 0x80040580,
+ 0x05000003, 0x0501f8d2, 0x05020048, 0x412c0000,
+ 0x81740580, 0x05020019, 0x59d80106, 0x80000540,
+ 0x05000011, 0x0501f8ca, 0x05020040, 0x42000800,
+ 0x000fffff, 0x59d80106, 0x80000540, 0x0500000a,
+ 0x0502e005, 0x59da5908, 0x4c080000, 0x05edfb1b,
+ 0x5c001000, 0x80040840, 0x05fe07f7, 0x4803c857,
+ 0x0501f032, 0x8d0c0524, 0x05000004, 0x0501f8b8,
+ 0x0502002e, 0x850e1d24, 0x60000802, 0x80040840,
+ 0x0500100a, 0x82040400, 0x0010dd60, 0x50000000,
+ 0x80000540, 0x05fc07fa, 0x58000012, 0x812c0580,
+ 0x05000010, 0x05fdf7f6, 0x59980808, 0x80040840,
+ 0x48073008, 0x45781000, 0x59a00a09, 0x4807c857,
+ 0x41741000, 0x58080800, 0x412c0000, 0x80040580,
+ 0x05000006, 0x40041000, 0x58040800, 0x05fdf7fb,
+ 0x492fc857, 0x0501f011, 0x58040800, 0x48041000,
+ 0x4d2c0000, 0x412c0000, 0x81740580, 0x05140fa7,
+ 0x5c025800, 0x592c0209, 0xb000053f, 0x82000400,
+ 0x0010df60, 0x45780000, 0x05edfae8, 0x05fdf34d,
+ 0x640b4407, 0x05fdf38e, 0x647b4407, 0x05fdf38c,
+ 0x64774407, 0x05fdf38a, 0x59a00c07, 0x8c040510,
+ 0x0500000a, 0x64065a0a, 0x59a0020d, 0x48025c11,
+ 0x0001ff16, 0x42000000, 0x00102ecb, 0x50000000,
+ 0x48025a10, 0x1c01f000, 0x59a00a0d, 0x90040486,
+ 0x05001002, 0x60040800, 0x82040c00, 0x00102ec8,
+ 0x50040000, 0x48025a10, 0x64025a0a, 0x1c01f000,
+ 0x00000002, 0x00000002, 0x00000005, 0x0000000a,
+ 0x00000014, 0x000000ff, 0x8c14050e, 0x05020008,
+ 0x59a0020c, 0x82000400, 0x0010de60, 0x50000000,
+ 0x80000540, 0x0500002d, 0x48025812, 0x48065a11,
+ 0x59a01208, 0x800810e0, 0x59a00408, 0x80080540,
+ 0x48025808, 0x59a0120a, 0x800810e0, 0x59a0040a,
+ 0x80080540, 0x48025809, 0x59a00409, 0x48025c0a,
+ 0x64065c10, 0x59980002, 0x80000000, 0x48033002,
+ 0x58f01001, 0x492de001, 0x480a5801, 0x82040400,
+ 0x00005c00, 0x59a0140b, 0x48080100, 0x480a5a0c,
+ 0x48025a00, 0x05fdffc1, 0x59a0140d, 0x8c140508,
+ 0x05000002, 0x8408157e, 0x8c14050a, 0x05000002,
+ 0x8408157c, 0x8c140504, 0x05000003, 0x82081540,
+ 0x20000000, 0x480a580b, 0x59a0040c, 0x48025c0c,
+ 0x80000580, 0x1c01f000, 0x45781000, 0x05edfa8f,
+ 0x647f4407, 0x90000541, 0x1c01f000, 0x4a025803,
+ 0xffff0000, 0x48065a02, 0x59a0020e, 0x48025a09,
+ 0x59a01208, 0x800810e0, 0x59a00408, 0x80080540,
+ 0x48025806, 0x59a0120a, 0x800810e0, 0x59a0040a,
+ 0x80080540, 0x48025807, 0x59a00409, 0x48025a08,
+ 0x59980008, 0x80000000, 0x48033008, 0x59741000,
+ 0x492ee800, 0x480a5800, 0x82040400, 0x00005e00,
+ 0x59a0120b, 0x48080000, 0x480a5c09, 0x48025c08,
+ 0x59a00c07, 0x59a0140d, 0x8c040508, 0x05000002,
+ 0x8408157e, 0x8c04050a, 0x05000002, 0x8408157c,
+ 0x8c040504, 0x05000003, 0x82081540, 0x20000000,
+ 0x480a5801, 0x59a0020e, 0x82000400, 0x0010df60,
+ 0x44080000, 0x80000580, 0x1c01f000, 0x8c140512,
+ 0x05000005, 0x8d0c0520, 0x05020003, 0x80000580,
+ 0x0501f002, 0x90000541, 0x4803c857, 0x1c01f000,
+ 0x8d0c050e, 0x05000003, 0x64074407, 0x05fdf2f8,
+ 0x916c0583, 0x05020014, 0x050df93f, 0x05fe02f9,
+ 0x59240200, 0x8c000502, 0x05000041, 0x59240005,
+ 0x497b4407, 0x0519f961, 0x0500000e, 0x82000d00,
+ 0x00ffff00, 0x0502000b, 0x82000c00, 0x00102853,
+ 0x50040800, 0x80040910, 0x82041580, 0x00000080,
+ 0x05020003, 0x641f4407, 0x05fdf2e1, 0x48074407,
+ 0x82000d00, 0x0000ffff, 0x48074208, 0x80000120,
+ 0x48034408, 0x59a80249, 0x82001500, 0x00003500,
+ 0x480b440a, 0x5924100b, 0x82081500, 0x00001fff,
+ 0x480b420b, 0x480b420b, 0x8c000502, 0x05000016,
0x8c000506, 0x05000006, 0x90000d0a, 0x90040d8a,
0x05020003, 0x6407420a, 0x0501f018, 0x8c00050a,
0x05000006, 0x90000d22, 0x90040da2, 0x05020003,
0x640f420a, 0x0501f011, 0x8c000508, 0x05000006,
0x90000d12, 0x90040d92, 0x05020003, 0x640b420a,
- 0x0501f00a, 0x0511fdd1, 0x05020003, 0x6413420a,
- 0x05fdf4f8, 0x8c000506, 0x05000003, 0x64174407,
- 0x05fdf536, 0x6403420a, 0x05fdf4f2, 0x646f4407,
- 0x05fdf532, 0x59a8002e, 0x48034408, 0x59a8002f,
- 0x4803420a, 0x05fdf4eb, 0x42007800, 0x0010b364,
- 0x59a00407, 0x4803c857, 0x90000c8a, 0x05fe152b,
- 0x0c01f001, 0x001025eb, 0x0010258b, 0x00102598,
- 0x001025a8, 0x001025c7, 0x001025ec, 0x00102584,
- 0x00102584, 0x001025f8, 0x00102633, 0x00102585,
- 0x05fdf51e, 0x59a00208, 0x48007c01, 0x59a00408,
- 0x48007a01, 0x05edfd19, 0x0501f061, 0x916c0580,
- 0x05fc0512, 0x59a00a08, 0x59a00408, 0x900001c0,
- 0x80040d40, 0x4807c857, 0x59a00a09, 0x59a00409,
- 0x900001c0, 0x80040d40, 0x4807c857, 0x0501f054,
- 0x916c0580, 0x05fc0505, 0x59a00408, 0x59a01208,
- 0x900001c0, 0x80081540, 0x59a00409, 0x59a01a09,
- 0x900001c0, 0x800c1d40, 0x42000000, 0x0010d237,
- 0x480fc857, 0x480bc857, 0x60000820, 0x0509f010,
- 0x59a00a08, 0x59a00408, 0x900001c0, 0x80041d40,
- 0x820c0c80, 0x0010a562, 0x05fe14f4, 0x820c0c80,
- 0x00100000, 0x05fc14f1, 0x480fc857, 0x903c7c22,
- 0x503c0800, 0x800409c0, 0x05000005, 0x903c05a6,
- 0x05fc04ea, 0x803c7800, 0x05fdf7fa, 0x59e41001,
- 0x82080d00, 0xfffeffcf, 0x4807c801, 0x440c7800,
- 0x46001800, 0x0201f800, 0x800c1800, 0x46001800,
- 0x001001e0, 0x480bc801, 0x0501f025, 0x59a01a08,
- 0x59a00408, 0x900001c0, 0x800c1d40, 0x480c7803,
- 0x59a02209, 0x59a00409, 0x900001c0, 0x80102540,
- 0x48107804, 0x59a0020a, 0x40001000, 0x48007807,
- 0x80000040, 0x05fc14cd, 0x48007808, 0x60000880,
- 0x051df90a, 0x80000540, 0x05000002, 0x05fdf4c7,
- 0x40040000, 0x800c1c00, 0x05fc14c4, 0x4800780a,
- 0x480c7805, 0x48107806, 0x4978780c, 0x59a0040a,
- 0x800000c4, 0x4800780b, 0x59e40001, 0x4803c857,
- 0x82000540, 0x00040000, 0x4803c801, 0x05fdf471,
- 0x49787803, 0x49787804, 0x49787808, 0x49787807,
- 0x49787803, 0x49787805, 0x49787806, 0x4978780c,
- 0x4978780b, 0x59e40001, 0x84000524, 0x05fdf7f3,
- 0x4978781f, 0x49787814, 0x49787815, 0x4978781d,
- 0x49787817, 0x49787818, 0x59a01a08, 0x59a00408,
- 0x900001c0, 0x800c1d40, 0x480c780e, 0x480c7819,
- 0x480c781b, 0x59a02209, 0x59a00409, 0x900001c0,
- 0x80102540, 0x4810780f, 0x4810781a, 0x4810781c,
- 0x59a0020a, 0x80000540, 0x05fc0494, 0x48007813,
- 0x60000808, 0x40001000, 0x051df8d0, 0x80000540,
- 0x05fe048e, 0x40040000, 0x800c1c00, 0x05fc148b,
- 0x480c7810, 0x48107811, 0x4a03420a, 0x00000400,
- 0x59a0040a, 0x4800781e, 0x850e1d6a, 0x59a0040b,
- 0x48007a12, 0x59a0020c, 0x48007c12, 0x600c0000,
- 0x05edfc59, 0x80102000, 0x4810780d, 0x48134209,
- 0x901021c0, 0x48134409, 0x59e40052, 0x4803c857,
- 0x4a007816, 0x00000400, 0x903c0416, 0x48034208,
- 0x900001c0, 0x48034408, 0x05fdf42a, 0x583c0800,
- 0x830e1d00, 0xffcfffff, 0x48ec7820, 0x4a01d802,
- 0x00000100, 0x583c0017, 0x82000500, 0x000000ff,
- 0x05020008, 0x4807c857, 0x8c040502, 0x05000004,
- 0x84040d48, 0x48047800, 0x1c01f000, 0x0501f003,
- 0x05f5f940, 0x1c01f000, 0x42007800, 0x0010b364,
- 0x583dd820, 0x58ef400a, 0x40ec6000, 0x583c0000,
+ 0x0501f00a, 0x0519f92d, 0x05020003, 0x6413420a,
+ 0x05fdf274, 0x8c000506, 0x05000003, 0x64174407,
+ 0x05fdf2b3, 0x6403420a, 0x05fdf26e, 0x646f4407,
+ 0x05fdf2af, 0x59a8005c, 0x48034408, 0x59a8005d,
+ 0x4803420a, 0x05fdf267, 0x42007800, 0x0010e4e5,
+ 0x59a00407, 0x4803c857, 0x90000c8c, 0x05fe12a9,
+ 0x0c01f001, 0x0010300c, 0x00102fac, 0x00102fb9,
+ 0x00102fc9, 0x00102fe8, 0x0010300d, 0x00102fa5,
+ 0x00102fa5, 0x00103019, 0x00103054, 0x00102fa6,
+ 0x00103067, 0x05fdf29b, 0x59a00208, 0x48007c01,
+ 0x59a00408, 0x48007a01, 0x05e9feec, 0x0501f061,
+ 0x916c0580, 0x05fc028e, 0x59a00a08, 0x59a00408,
+ 0x900001c0, 0x80040d40, 0x4807c857, 0x59a00a09,
+ 0x59a00409, 0x900001c0, 0x80040d40, 0x4807c857,
+ 0x0501f054, 0x916c0580, 0x05fc0281, 0x59a00408,
+ 0x59a01208, 0x900001c0, 0x80081540, 0x59a00409,
+ 0x59a01a09, 0x900001c0, 0x800c1d40, 0x42000000,
+ 0x00110772, 0x480fc857, 0x480bc857, 0x60000820,
+ 0x050df000, 0x59a00a08, 0x59a00408, 0x900001c0,
+ 0x80041d40, 0x820c0c80, 0x0010d32a, 0x05fe1271,
+ 0x820c0c80, 0x00100000, 0x05fc126e, 0x480fc857,
+ 0x903c7c22, 0x503c0800, 0x800409c0, 0x05000005,
+ 0x903c05a6, 0x05fc0267, 0x803c7800, 0x05fdf7fa,
+ 0x59e41001, 0x82080d00, 0xfffeffcf, 0x4807c801,
+ 0x440c7800, 0x46001800, 0x0201f800, 0x800c1800,
+ 0x46001800, 0x001005ce, 0x480bc801, 0x0501f025,
+ 0x59a01a08, 0x59a00408, 0x900001c0, 0x800c1d40,
+ 0x480c7803, 0x59a02209, 0x59a00409, 0x900001c0,
+ 0x80102540, 0x48107804, 0x59a0020a, 0x40001000,
+ 0x48007807, 0x80000040, 0x05fc124a, 0x48007808,
+ 0x60000880, 0x0525ff79, 0x80000540, 0x05000002,
+ 0x05fdf244, 0x40040000, 0x800c1c00, 0x05fc1241,
+ 0x4800780a, 0x480c7805, 0x48107806, 0x4978780c,
+ 0x59a0040a, 0x800000c4, 0x4800780b, 0x59e40001,
+ 0x4803c857, 0x82000540, 0x00040000, 0x4803c801,
+ 0x05fdf1ec, 0x49787803, 0x49787804, 0x49787808,
+ 0x49787807, 0x49787803, 0x49787805, 0x49787806,
+ 0x4978780c, 0x4978780b, 0x59e40001, 0x84000524,
+ 0x05fdf7f3, 0x4978781f, 0x49787814, 0x49787815,
+ 0x4978781d, 0x49787817, 0x49787818, 0x59a01a08,
+ 0x59a00408, 0x900001c0, 0x800c1d40, 0x480c780e,
+ 0x480c7819, 0x480c781b, 0x59a02209, 0x59a00409,
+ 0x900001c0, 0x80102540, 0x4810780f, 0x4810781a,
+ 0x4810781c, 0x59a0020a, 0x80000540, 0x05fc0211,
+ 0x48007813, 0x60000808, 0x40001000, 0x0525ff3f,
+ 0x80000540, 0x05fe020b, 0x40040000, 0x800c1c00,
+ 0x05fc1208, 0x480c7810, 0x48107811, 0x4a03420a,
+ 0x00000400, 0x59a0040a, 0x4800781e, 0x850e1d6a,
+ 0x59a0040b, 0x48007a12, 0x59a0020c, 0x48007c12,
+ 0x600c0000, 0x05e9fe2c, 0x80102000, 0x4810780d,
+ 0x48134209, 0x901021c0, 0x48134409, 0x59e40052,
+ 0x4803c857, 0x4a007816, 0x00000400, 0x903c0416,
+ 0x48034208, 0x900001c0, 0x48034408, 0x05fdf1a5,
+ 0x583c0800, 0x830e1d00, 0xffcfffff, 0x48ec7820,
+ 0x4a01d802, 0x00000100, 0x583c0017, 0x82000500,
+ 0x000000ff, 0x05020008, 0x4807c857, 0x8c040502,
+ 0x05000004, 0x84040d48, 0x48047800, 0x1c01f000,
+ 0x0501f00a, 0x05f1fba5, 0x1c01f000, 0x916c0580,
+ 0x05fc01d3, 0x05e9fee6, 0x900801c0, 0x480b4407,
+ 0x48034208, 0x05fdf18b, 0x42007800, 0x0010e4e5,
+ 0x583dd820, 0x58ef400b, 0x40ec6000, 0x583c0000,
0x48efc857, 0x49a3c857, 0x4803c857, 0x82000500,
0x0000ffc0, 0x48007800, 0x583c001d, 0x4803c857,
0x583c0819, 0x4807c857, 0x48074208, 0x900409c0,
@@ -15286,535 +3142,1010 @@ static const uint32_t isp_2500_multi_risc_code[] = {
0x48074409, 0x583c081b, 0x4807420a, 0x900409c0,
0x4807440a, 0x583c081c, 0x4807420b, 0x900409c0,
0x4807440b, 0x49787818, 0x583c0017, 0x49787817,
- 0x82000500, 0x000000ff, 0x05fe03eb, 0x05fdf3f1,
+ 0x82000500, 0x000000ff, 0x05fe0163, 0x05fdf165,
0x59a80005, 0x48034407, 0x59a80006, 0x48034208,
- 0x59a80007, 0x48034408, 0x05fdf3ea, 0x05edfb7c,
+ 0x59a80007, 0x48034408, 0x05fdf15e, 0x05e9fd3f,
0x4803c856, 0x59a0020c, 0x4803c857, 0x8c00051e,
- 0x050a00d2, 0x05f9fc74, 0x05000003, 0x05f9fc56,
- 0x05000003, 0x648b4407, 0x05fdf420, 0x4a03c013,
- 0x03800300, 0x4a03c014, 0x03800380, 0x59a00c07,
- 0x82040580, 0x000000a0, 0x05000004, 0x82040580,
- 0x000000a2, 0x0502001c, 0x59a0140b, 0x82080480,
- 0x00000100, 0x05021018, 0x59a0020c, 0x8c000500,
- 0x0502001f, 0x59a00a0b, 0x800409c0, 0x05000012,
- 0xb0040481, 0x05021010, 0x0505fefb, 0x0500000a,
+ 0x050e00de, 0x8c00051a, 0x05000005, 0x050df87c,
+ 0x05000018, 0x65034407, 0x05fdf195, 0x05f5fed9,
+ 0x05000003, 0x05f5febe, 0x05000003, 0x648b4407,
+ 0x05fdf18f, 0x4a03c013, 0x03800300, 0x4a03c014,
+ 0x03800380, 0x59a00c07, 0x82040580, 0x000000a0,
+ 0x05000004, 0x82040580, 0x000000a2, 0x0502001e,
+ 0x59a0140b, 0x82080480, 0x00000100, 0x0502101a,
+ 0x050df869, 0x05fe0183, 0x59a0020c, 0x8c000500,
+ 0x0502001b, 0x59a00a0b, 0x800409c0, 0x05000012,
+ 0xb0040481, 0x05021010, 0x0509fed9, 0x0500000a,
0x59a01008, 0x900811c0, 0x59a0180a, 0x900c19c0,
- 0x59a00a0b, 0x0505ff16, 0x4a01d808, 0x001026a8,
+ 0x59a00a0b, 0x0509fef4, 0x4a01d809, 0x001030d8,
0x1c01f000, 0x640b4407, 0x4a03c014, 0x03800000,
- 0x05fdf3fa, 0x4a03c014, 0x03800000, 0x05fdf3fb,
- 0x4031d800, 0x58ef400a, 0x58ee580c, 0x58ec0002,
- 0x82000580, 0x00000200, 0x05fc03e8, 0x59a00c07,
- 0x59a0140b, 0x59a0020c, 0x8c000500, 0x05020038,
- 0x912e5c05, 0x4178c000, 0x59a0ba0b, 0x40600000,
- 0x812c0400, 0x5000c800, 0x82641d00, 0x000000ff,
- 0x4c040000, 0x4c080000, 0x0501f8b8, 0x5c001000,
- 0x5c000800, 0x05000037, 0x805cb840, 0x05000032,
- 0x80081000, 0x82641d00, 0x0000ff00, 0x800c1910,
- 0x4c040000, 0x4c080000, 0x0501f8ac, 0x5c001000,
- 0x5c000800, 0x0500002b, 0x805cb840, 0x05000026,
+ 0x05fdf167, 0x4a03c014, 0x03800000, 0x05fdf169,
+ 0x0505fd83, 0x05fc0159, 0x58ee580d, 0x59a00c07,
+ 0x59a0140b, 0x59a0020c, 0x8c000500, 0x0502004e,
+ 0x912e5c08, 0x4178c000, 0x59a0ba0b, 0x050df853,
+ 0x05000009, 0x05f9f889, 0x05f9f904, 0x05000003,
+ 0x65074407, 0x05fdf151, 0x05f9f919, 0x59a00c07,
+ 0x59a0140b, 0x40600000, 0x812c0400, 0x5000c800,
+ 0x82641d00, 0x000000ff, 0x4c040000, 0x4c080000,
+ 0x050df842, 0x05000002, 0x8408157e, 0x0501f93f,
+ 0x5c001000, 0x5c000800, 0x0500005f, 0x805cb840,
+ 0x05000058, 0x80081000, 0x82641d00, 0x0000ff00,
+ 0x800c1910, 0x4c040000, 0x4c080000, 0x050df833,
+ 0x05000002, 0x8408157e, 0x0501f930, 0x5c001000,
+ 0x5c000800, 0x05000050, 0x805cb840, 0x05000049,
0x80081000, 0x82641d00, 0x00ff0000, 0x800c1920,
- 0x4c040000, 0x4c080000, 0x0501f8a0, 0x5c001000,
- 0x5c000800, 0x0500001f, 0x805cb840, 0x0500001a,
- 0x80081000, 0x82641d00, 0xff000000, 0x800c1930,
- 0x4c040000, 0x4c080000, 0x0501f894, 0x5c001000,
- 0x5c000800, 0x05000013, 0x805cb840, 0x0500000e,
- 0x80081000, 0x8060c000, 0x05fdf7cd, 0x59a0020b,
- 0x82000500, 0x000000ff, 0x40001800, 0x4c040000,
- 0x4c080000, 0x0501f885, 0x5c001000, 0x5c000800,
- 0x05000004, 0x4a03c014, 0x03800000, 0x05fdf365,
- 0x4a03c014, 0x03800000, 0x64134407, 0x05fdf3a3,
- 0x4803c856, 0x59a0020c, 0x4803c857, 0x8c00051e,
- 0x050a0012, 0x05f9fbec, 0x05000003, 0x05f9fbce,
- 0x05000003, 0x648b4407, 0x05fdf398, 0x4a03c013,
- 0x03800300, 0x4a03c014, 0x03800380, 0x59a00c07,
- 0x82040580, 0x000000a0, 0x05000004, 0x82040580,
- 0x000000a2, 0x05020062, 0x59a0140b, 0x82080480,
- 0x00000100, 0x0502105e, 0x59a0020c, 0x8c000500,
- 0x05020050, 0x59a01a0b, 0x800c19c0, 0x05000058,
- 0xb00c0481, 0x05021056, 0x0505fe73, 0x05020006,
- 0x640b4407, 0x4a03c014, 0x03800000, 0x4803c857,
- 0x05fdf37a, 0x912e5c05, 0x4178c000, 0x59a0ba0b,
- 0x4803c857, 0x40600000, 0x812c0400, 0x4000c800,
- 0x4c040000, 0x4c080000, 0x0501f879, 0x5c001000,
- 0x5c000800, 0x0500003e, 0x4414c800, 0x805cb840,
- 0x0500002b, 0x80081000, 0x4c040000, 0x4c080000,
- 0x0501f86f, 0x5c001000, 0x5c000800, 0x05000034,
- 0x50640000, 0x801428d0, 0x80140540, 0x4400c800,
- 0x805cb840, 0x0500001e, 0x80081000, 0x4c040000,
- 0x4c080000, 0x0501f862, 0x5c001000, 0x5c000800,
- 0x05000027, 0x50640000, 0x801428e0, 0x80140540,
- 0x4400c800, 0x805cb840, 0x05000011, 0x80081000,
- 0x4c040000, 0x4c080000, 0x0501f855, 0x5c001000,
- 0x5c000800, 0x0500001a, 0x50640000, 0x801428f0,
- 0x80140540, 0x4400c800, 0x805cb840, 0x05000004,
- 0x80081000, 0x8060c000, 0x05fdf7ca, 0x59a00a0b,
- 0x59a01008, 0x900811c0, 0x59a0180a, 0x900c19c0,
- 0x4a03c014, 0x03800000, 0x412c0000, 0x0505f64e,
- 0x4803c857, 0x0501f83e, 0x05000005, 0x48174407,
- 0x4a03c014, 0x03800000, 0x05fdf2ee, 0x4a03c014,
- 0x03800000, 0x64134407, 0x05fdf32c, 0x4a03c014,
- 0x03800000, 0x05fdf32d, 0x4c5c0000, 0x4c600000,
+ 0x4c040000, 0x4c080000, 0x050df824, 0x05000002,
+ 0x8408157e, 0x0501f921, 0x5c001000, 0x5c000800,
+ 0x05000041, 0x805cb840, 0x0500003a, 0x80081000,
+ 0x82641d00, 0xff000000, 0x800c1930, 0x4c040000,
+ 0x4c080000, 0x050df815, 0x05000002, 0x8408157e,
+ 0x0501f912, 0x5c001000, 0x5c000800, 0x05000032,
+ 0x805cb840, 0x0500002b, 0x80081000, 0x8060c000,
+ 0x05fdf7c1, 0x59a0020b, 0x82000500, 0x000000ff,
+ 0x40001800, 0x050df805, 0x05000020, 0x4c0c0000,
+ 0x05f9f83a, 0x5c001800, 0x05f9f8c5, 0x59a00c07,
+ 0x59a0140b, 0x82040580, 0x000000e0, 0x05000013,
+ 0x05f9f8c7, 0x82040580, 0x000000a0, 0x05000007,
+ 0x82040580, 0x000000d0, 0x05fe00fd, 0x4807c857,
+ 0x8408157c, 0x0501f009, 0x05f9f8a4, 0x05000003,
+ 0x65074407, 0x05fdf0f1, 0x05f9f8b9, 0x59a00c07,
+ 0x59a0140b, 0x8408157e, 0x0501f8e8, 0x0500000a,
+ 0x4817c857, 0x0501f003, 0x0501f8e4, 0x05000006,
+ 0x0509ffe2, 0x05fa083a, 0x4a03c014, 0x03800000,
+ 0x05fdf0a0, 0x0509ffdd, 0x05fa0835, 0x4a03c014,
+ 0x03800000, 0x64134407, 0x05fdf0dd, 0x4803c856,
+ 0x59a0020c, 0x4803c857, 0x8c00051e, 0x050a07d6,
+ 0x8c00051a, 0x05000005, 0x0509ffb9, 0x05000018,
+ 0x65034407, 0x05fdf0d2, 0x05f5fe16, 0x05000003,
+ 0x05f5fdfb, 0x05000003, 0x648b4407, 0x05fdf0cc,
+ 0x4a03c013, 0x03800300, 0x4a03c014, 0x03800380,
+ 0x59a00c07, 0x82040580, 0x000000a0, 0x05000004,
+ 0x82040580, 0x000000a2, 0x050200b9, 0x59a0140b,
+ 0x82080480, 0x00000100, 0x050210b5, 0x0509ffa6,
+ 0x05fe00c0, 0x59a00c07, 0x59a0140b, 0x4807c857,
+ 0x480bc857, 0x59a0020c, 0x8c000500, 0x05020068,
+ 0x59a01a0b, 0x800c19c0, 0x050000a9, 0xb00c0481,
+ 0x050210a7, 0x0509fe12, 0x05020006, 0x640b4407,
+ 0x4a03c014, 0x03800000, 0x4803c857, 0x05fdf0a8,
+ 0x912e5c08, 0x4178c000, 0x59a0ba0b, 0x0509ff9f,
+ 0x05000007, 0x05f5ffd5, 0x05f9f850, 0x05000003,
+ 0x65074407, 0x05fdf09d, 0x05f9f865, 0x59a00c07,
+ 0x59a0140b, 0x4803c857, 0x40600000, 0x812c0400,
+ 0x4000c800, 0x4c040000, 0x4c080000, 0x0509ff8f,
+ 0x05000002, 0x8408157e, 0x0501f8c2, 0x5c001000,
+ 0x5c000800, 0x05000080, 0x4414c800, 0x805cb840,
+ 0x05000034, 0x80081000, 0x4c040000, 0x4c080000,
+ 0x0509ff82, 0x05000002, 0x8408157e, 0x0501f8b5,
+ 0x5c001000, 0x5c000800, 0x05000073, 0x50640000,
+ 0x801428d0, 0x80140540, 0x4400c800, 0x805cb840,
+ 0x05000024, 0x80081000, 0x4c040000, 0x4c080000,
+ 0x0509ff72, 0x05000002, 0x8408157e, 0x0501f8a5,
+ 0x5c001000, 0x5c000800, 0x05000063, 0x50640000,
+ 0x801428e0, 0x80140540, 0x4400c800, 0x805cb840,
+ 0x05000014, 0x80081000, 0x4c040000, 0x4c080000,
+ 0x0509ff62, 0x05000002, 0x8408157e, 0x0501f895,
+ 0x5c001000, 0x5c000800, 0x05000053, 0x50640000,
+ 0x801428f0, 0x80140540, 0x4400c800, 0x805cb840,
+ 0x05000004, 0x80081000, 0x8060c000, 0x05fdf7be,
+ 0x0509ff52, 0x05f60faa, 0x59a00a0b, 0x59a01008,
+ 0x900811c0, 0x59a0180a, 0x900c19c0, 0x4a03c014,
+ 0x03800000, 0x412c0000, 0x0509f5d5, 0x4803c857,
+ 0x0509ff46, 0x05000036, 0x05f5ff7c, 0x05f9f808,
+ 0x59a00c07, 0x59a0140b, 0x82040580, 0x00000098,
+ 0x0502000d, 0x59a80084, 0x8c000520, 0x05000006,
+ 0x59a8287d, 0x9014050f, 0x05020003, 0x8c140508,
+ 0x0500001c, 0x90080581, 0x0502001a, 0x60001000,
+ 0x0501f018, 0x82040580, 0x000000e0, 0x05000015,
+ 0x05f5fffb, 0x82040580, 0x000000a0, 0x05000009,
+ 0x82040580, 0x000000d0, 0x05fe0031, 0x4807c857,
+ 0x6140b801, 0x0501f84c, 0x40642800, 0x0501f011,
+ 0x05f5ffd6, 0x05000003, 0x65074407, 0x05fdf023,
+ 0x05f5ffeb, 0x59a00c07, 0x59a0140b, 0x8408157e,
+ 0x0501f850, 0x05020003, 0x65074407, 0x05fdf01b,
+ 0x59a00c07, 0x82040580, 0x00000098, 0x05f40ff6,
+ 0x4817c857, 0x05f5ff6a, 0x0501f003, 0x0501f845,
+ 0x05000005, 0x48174407, 0x4a03c014, 0x03800000,
+ 0x05f9f7cc, 0x0509ff09, 0x05f60f61, 0x4a03c014,
+ 0x03800000, 0x64134407, 0x05fdf009, 0x4a03c014,
+ 0x03800000, 0x05fdf00b, 0x4c5c0000, 0x4c600000,
0x4c640000, 0x4004b800, 0x4008c000, 0x400cc800,
- 0x0501f86d, 0x0500000f, 0x0501f89b, 0x05020011,
- 0x4060b800, 0x0501f898, 0x0502000e, 0x4064b800,
- 0x0501f895, 0x0502000b, 0x0501f883, 0x4ce80000,
- 0x6021d027, 0x0519feb8, 0x5c01d000, 0x90000541,
- 0x5c00c800, 0x5c00c000, 0x5c00b800, 0x1c01f000,
- 0x0501f879, 0x80000580, 0x05fdf7fa, 0x4c5c0000,
- 0x485fc857, 0x0501f854, 0x05000008, 0x905cbd41,
- 0x0501f881, 0x05020009, 0x0501f8bd, 0x0501f8ef,
- 0x0501f86d, 0x90000541, 0x4803c857, 0x4867c857,
- 0x5c00b800, 0x1c01f000, 0x0501f867, 0x80000580,
- 0x4803c857, 0x485fc857, 0x05fdf7f8, 0x4c5c0000,
- 0x4c600000, 0x4c640000, 0x4807c857, 0x480bc857,
- 0x4004b800, 0x4008c000, 0x0501f83b, 0x0500000c,
- 0x0501f869, 0x0502000f, 0x4c5c0000, 0x4060b800,
- 0x0501f865, 0x5c00b800, 0x0502000a, 0x05fdffdc,
- 0x05000003, 0x0501f850, 0x90000541, 0x40642800,
- 0x5c00c800, 0x5c00c000, 0x5c00b800, 0x1c01f000,
- 0x0501f849, 0x80000580, 0x4803c857, 0x4867c857,
- 0x05fdf7f7, 0x4ce80000, 0x4c580000, 0x4803c856,
- 0x6030b000, 0x6029d000, 0x0519fe77, 0x4a03c013,
- 0x02000200, 0x6029d000, 0x0519fe73, 0x4a03c013,
- 0x02000000, 0x8058b040, 0x05fe07f7, 0x61a00807,
- 0x4a03c013, 0x03800300, 0x80040840, 0x0500000f,
- 0x4a03c014, 0x03800000, 0x59e00013, 0x4a03c014,
- 0x03800380, 0x82000500, 0x00000300, 0x82000580,
- 0x00000300, 0x05fe07f3, 0x90000541, 0x5c00b000,
- 0x5c01d000, 0x1c01f000, 0x4803c857, 0x80000580,
- 0x05fdf7fb, 0x4ce80000, 0x4803c856, 0x61a00807,
- 0x4a03c013, 0x03800300, 0x80040840, 0x05000016,
- 0x4a03c014, 0x03800000, 0x59e00013, 0x4a03c014,
- 0x03800380, 0x82000500, 0x00000300, 0x82000580,
- 0x00000300, 0x05fe07f3, 0x6029d000, 0x0519fe46,
- 0x4a03c013, 0x01000000, 0x6029d000, 0x0519fe42,
- 0x4a03c013, 0x02000000, 0x90000541, 0x5c01d000,
- 0x1c01f000, 0x4803c857, 0x05fdffbf, 0x05fe07f3,
- 0x05fdf7fb, 0x4803c856, 0x4a03c013, 0x01000000,
- 0x4ce80000, 0x6029d000, 0x0519fe33, 0x5c01d000,
- 0x4a03c013, 0x02000200, 0x4ce80000, 0x6029d000,
- 0x0519fe2d, 0x5c01d000, 0x4a03c013, 0x01000100,
- 0x1c01f000, 0x4c5c0000, 0x4c600000, 0x485fc857,
- 0x6020c000, 0x825c0500, 0x00000080, 0x800000c2,
- 0x82000540, 0x01000000, 0x4803c013, 0x4ce80000,
- 0x6029d000, 0x0519fe1c, 0x5c01d000, 0x4a03c013,
- 0x02000200, 0x4ce80000, 0x6029d000, 0x0519fe16,
- 0x5c01d000, 0x4a03c013, 0x02000000, 0x805cb8c2,
- 0x8060c040, 0x05fe07ec, 0x4a03c013, 0x01000100,
- 0x4ce80000, 0x6029d000, 0x0519fe0b, 0x5c01d000,
- 0x4a03c013, 0x02000200, 0x4ce80000, 0x6029d000,
- 0x0519fe05, 0x5c01d000, 0x4a03c014, 0x03800000,
- 0x61a00807, 0x59e0b813, 0x825cbd00, 0x00000100,
- 0x80040840, 0x05000004, 0x405c0000, 0x80000540,
- 0x05fe07f9, 0x4a03c014, 0x03800380, 0x4a03c013,
- 0x02000000, 0x4ce80000, 0x6029d000, 0x0519fdf2,
- 0x5c01d000, 0x485fc857, 0x405c0000, 0x80000540,
- 0x5c00c000, 0x5c00b800, 0x1c01f000, 0x4c600000,
- 0x4803c856, 0x4a03c013, 0x01000100, 0x6020c000,
- 0x61a0c807, 0x4ce80000, 0x6029d000, 0x0519fde2,
- 0x5c01d000, 0x4a03c013, 0x02000200, 0x4a03c014,
+ 0x0501f877, 0x05000019, 0x0501f8a3, 0x0502001b,
+ 0x8c60053c, 0x0502000c, 0x8c60053e, 0x05000007,
+ 0x4060b800, 0x825cbd00, 0x0000ff00, 0x805cb910,
+ 0x0501f899, 0x05020011, 0x4060b800, 0x0501f896,
+ 0x0502000e, 0x4064b800, 0x0501f893, 0x0502000b,
+ 0x0501f882, 0x4ce80000, 0x6021d027, 0x0521fdb2,
+ 0x5c01d000, 0x90000541, 0x5c00c800, 0x5c00c000,
+ 0x5c00b800, 0x1c01f000, 0x0501f878, 0x80000580,
+ 0x05fdf7fa, 0x4c5c0000, 0x0501f855, 0x05000008,
+ 0x905cbd41, 0x0501f880, 0x05020007, 0x0501f8ba,
+ 0x0501f8ec, 0x0501f86d, 0x90000541, 0x5c00b800,
+ 0x1c01f000, 0x0501f869, 0x80000580, 0x05fdf7fc,
+ 0x4c5c0000, 0x4c600000, 0x4c640000, 0x4004b800,
+ 0x4008c000, 0x0501f842, 0x05000016, 0x0501f86e,
+ 0x05020019, 0x8c60053e, 0x05000009, 0x4c5c0000,
+ 0x4060b800, 0x825cbd00, 0x0000ff00, 0x805cb910,
+ 0x0501f865, 0x5c00b800, 0x0502000f, 0x4c5c0000,
+ 0x4060b800, 0x0501f860, 0x5c00b800, 0x0502000a,
+ 0x05fdffd9, 0x05000003, 0x0501f84c, 0x90000541,
+ 0x40642800, 0x5c00c800, 0x5c00c000, 0x5c00b800,
+ 0x1c01f000, 0x0501f845, 0x80000580, 0x05fdf7f9,
+ 0x4ce80000, 0x4c580000, 0x4803c856, 0x6030b000,
+ 0x6029d000, 0x0521fd70, 0x4a03c013, 0x02000200,
+ 0x6029d000, 0x0521fd6c, 0x4a03c013, 0x02000000,
+ 0x8058b040, 0x05fe07f7, 0x61a00807, 0x4a03c013,
+ 0x03800300, 0x80040840, 0x0500000f, 0x4a03c014,
0x03800000, 0x59e00013, 0x4a03c014, 0x03800380,
- 0x82000500, 0x00000200, 0x05020003, 0x8064c840,
- 0x05fe07f7, 0x4178c800, 0x0501f007, 0x4ce80000,
- 0x6029d000, 0x0519fdd0, 0x5c01d000, 0x4a03c013,
- 0x02000200, 0x4ce80000, 0x6029d000, 0x0519fdca,
- 0x5c01d000, 0x4a03c014, 0x03800000, 0x59e00013,
- 0x4a03c014, 0x03800380, 0x82000500, 0x00000100,
- 0x80000110, 0x8064c8c2, 0x8064cd40, 0x4a03c013,
- 0x02000000, 0x8060c040, 0x05fe07e9, 0x4867c857,
- 0x5c00c000, 0x1c01f000, 0x4803c856, 0x4a03c013,
- 0x01000100, 0x4ce80000, 0x6029d000, 0x0519fdb2,
+ 0x82000500, 0x00000300, 0x82000580, 0x00000300,
+ 0x05fe07f3, 0x90000541, 0x5c00b000, 0x5c01d000,
+ 0x1c01f000, 0x80000580, 0x05fdf7fc, 0x4ce80000,
+ 0x61a00807, 0x4a03c013, 0x03800300, 0x80040840,
+ 0x05000016, 0x4a03c014, 0x03800000, 0x59e00013,
+ 0x4a03c014, 0x03800380, 0x82000500, 0x00000300,
+ 0x82000580, 0x00000300, 0x05fe07f3, 0x6029d000,
+ 0x0521fd41, 0x4a03c013, 0x01000000, 0x6029d000,
+ 0x0521fd3d, 0x4a03c013, 0x02000000, 0x90000541,
+ 0x5c01d000, 0x1c01f000, 0x4803c857, 0x05fdffc1,
+ 0x05fe07f3, 0x05fdf7fb, 0x4a03c013, 0x01000000,
+ 0x4ce80000, 0x6029d000, 0x0521fd2f, 0x5c01d000,
+ 0x4a03c013, 0x02000200, 0x4ce80000, 0x6029d000,
+ 0x0521fd29, 0x5c01d000, 0x4a03c013, 0x01000100,
+ 0x1c01f000, 0x4c5c0000, 0x4c600000, 0x6020c000,
+ 0x825c0500, 0x00000080, 0x800000c2, 0x82000540,
+ 0x01000000, 0x4803c013, 0x4ce80000, 0x6029d000,
+ 0x0521fd19, 0x5c01d000, 0x4a03c013, 0x02000200,
+ 0x4ce80000, 0x6029d000, 0x0521fd13, 0x5c01d000,
+ 0x4a03c013, 0x02000000, 0x805cb8c2, 0x8060c040,
+ 0x05fe07ec, 0x4a03c013, 0x01000100, 0x4ce80000,
+ 0x6029d000, 0x0521fd08, 0x5c01d000, 0x4a03c013,
+ 0x02000200, 0x4ce80000, 0x6029d000, 0x0521fd02,
+ 0x5c01d000, 0x4a03c014, 0x03800000, 0x61a00807,
+ 0x59e0b813, 0x825cbd00, 0x00000100, 0x80040840,
+ 0x05000004, 0x405c0000, 0x80000540, 0x05fe07f9,
+ 0x4a03c014, 0x03800380, 0x4a03c013, 0x02000000,
+ 0x4ce80000, 0x6029d000, 0x0521fcef, 0x5c01d000,
+ 0x405c0000, 0x80000540, 0x5c00c000, 0x5c00b800,
+ 0x1c01f000, 0x4c600000, 0x4803c856, 0x4a03c013,
+ 0x01000100, 0x6020c000, 0x61a0c807, 0x4ce80000,
+ 0x6029d000, 0x0521fce0, 0x5c01d000, 0x4a03c013,
+ 0x02000200, 0x4a03c014, 0x03800000, 0x59e00013,
+ 0x4a03c014, 0x03800380, 0x82000500, 0x00000200,
+ 0x05020003, 0x8064c840, 0x05fe07f7, 0x4178c800,
+ 0x0501f007, 0x4ce80000, 0x6029d000, 0x0521fcce,
0x5c01d000, 0x4a03c013, 0x02000200, 0x4ce80000,
- 0x6029d000, 0x0519fdac, 0x5c01d000, 0x4a03c013,
- 0x02000000, 0x1c01f000, 0x59a00408, 0x59a8082e,
- 0x4803502e, 0x48074408, 0x59a00a0a, 0x90040494,
- 0x05021002, 0x6140080f, 0x59a8002f, 0x4807502f,
- 0x4803420a, 0x05fdf1b7, 0x59a00407, 0x59a00a08,
- 0x900409c0, 0x80040d40, 0x59a00408, 0x59a01209,
- 0x900811c0, 0x80081540, 0x59a00409, 0x59a01a0a,
- 0x900c19c0, 0x800c1d40, 0x59a0040a, 0x59a0220b,
- 0x901021c0, 0x80102540, 0x053dfbfd, 0x05fc01a5,
- 0x05fdf1fa, 0x916c0580, 0x0500000a, 0x59a80005,
- 0x59a00c07, 0x80041580, 0xb0081500, 0x05fc019d,
- 0x80080580, 0x48035005, 0x05edfb1b, 0x05fdf199,
- 0x59a00407, 0x59a80805, 0x48035005, 0x80040d80,
- 0x8c04050c, 0x05ee0b14, 0x59a00208, 0x599c0818,
- 0x8c040510, 0x05000002, 0x8400054a, 0x48035006,
- 0x59a00408, 0x8c00051a, 0x05000009, 0x600018ec,
- 0x60140800, 0x580c1006, 0x4a001805, 0x70000005,
- 0x900c1c20, 0x80040840, 0x05fe07fb, 0x48035007,
- 0x05fdf180, 0x8d0c050e, 0x05000003, 0x64074407,
- 0x05fdf1be, 0x0511fa51, 0x05020003, 0x645b4407,
- 0x05fdf1ba, 0x916c0583, 0x05000003, 0x641f4407,
- 0x05fdf1b6, 0x59a00c07, 0x82040500, 0xffffff00,
- 0x05fe01b6, 0x82041580, 0x000000ff, 0x05020007,
- 0x59a8000f, 0x82000500, 0x000000ff, 0x82001540,
- 0x0000ff00, 0x0501f00f, 0x82040400, 0x001020b6,
- 0x50000000, 0x80000110, 0x82000580, 0x00000080,
- 0x05fc01a6, 0x59a8000f, 0x82000500, 0x000000ff,
- 0x80041580, 0x05fc01a1, 0x840409c0, 0x80041540,
- 0x0521fdf9, 0x05020003, 0x640f4407, 0x05fdf197,
- 0x48ee602d, 0x480a621e, 0x4a02641e, 0x0000bc09,
- 0x64066407, 0x0505fc84, 0x05020004, 0x0005fc5a,
- 0x640b4407, 0x05fdf18d, 0x497a5a05, 0x497a5806,
- 0x4a025c05, 0x00008000, 0x4a01d808, 0x00102959,
- 0x492e6009, 0x60ca7000, 0x0005f478, 0x8d0c050e,
- 0x05000003, 0x64074407, 0x05fdf180, 0x0511fa13,
- 0x05020003, 0x645b4407, 0x05fdf17c, 0x916c0583,
- 0x05000003, 0x641f4407, 0x05fdf178, 0x59a00c07,
- 0x82040500, 0xffffff00, 0x05fe0178, 0x82041580,
- 0x000000ff, 0x05020007, 0x59a8000f, 0x82000500,
- 0x000000ff, 0x82001540, 0x0000ff00, 0x0501f00f,
- 0x82040400, 0x001020b6, 0x50000000, 0x80000110,
- 0x82000580, 0x00000080, 0x05fc0168, 0x59a8000f,
- 0x82000500, 0x000000ff, 0x80041580, 0x05fc0163,
- 0x840409c0, 0x80041540, 0x0521fdbb, 0x05020003,
- 0x640f4407, 0x05fdf159, 0x48ee602d, 0x480a621e,
- 0x4a02641e, 0x0000bc05, 0x64066407, 0x0505fc46,
- 0x05020004, 0x0005fc5a, 0x640b4407, 0x05fdf14f,
- 0x497a5a05, 0x497a5806, 0x4a025c05, 0x00008000,
- 0x4a01d808, 0x00102959, 0x492e6009, 0x60ca7000,
- 0x0005f478, 0x592c0006, 0x82000580, 0x01000000,
- 0x05fe0100, 0x64134407, 0x05fdf140, 0x497b4407,
- 0x497b4208, 0x8d0c0520, 0x05000008, 0x59a80062,
- 0x59a80863, 0x80040480, 0x59a80864, 0x48074407,
- 0x80041480, 0x480b4208, 0x0505fd4e, 0x48034408,
- 0x59a8100d, 0x59a80266, 0x80080480, 0x4803420a,
- 0x495f440a, 0x59a8001a, 0x4803420c, 0x4a03440c,
- 0x000000fe, 0x05fdf0e7, 0x8d0c050e, 0x05000003,
- 0x64074407, 0x05fdf125, 0x59a00407, 0x8c000500,
- 0x0502000d, 0x59a80065, 0x81640480, 0x05001008,
- 0x59a8000b, 0x81500580, 0x05000007, 0x59a80063,
- 0x59a81062, 0x80080580, 0x05000003, 0x64634407,
- 0x05fdf116, 0x850e1d58, 0x4803c856, 0x850e1d46,
- 0x0509f858, 0x05fdf0cf, 0x599c0201, 0x4803507f,
- 0x41780800, 0x60401076, 0x0519fd6c, 0x480b5080,
- 0x1c01f000, 0x0501f805, 0x60018800, 0x05020002,
- 0x60058800, 0x1c01f000, 0x90000541, 0x0502500b,
- 0x4203e000, 0x80000000, 0x40e81000, 0x41780800,
- 0x61900000, 0x0519fd5d, 0x5994002e, 0x80080400,
- 0x4803282e, 0x80000580, 0x1c01f000, 0x4d900000,
- 0x4dd00000, 0x4da40000, 0x4d140000, 0x4cd80000,
- 0x417a3000, 0x051dfce7, 0x051df9cf, 0x5c01b000,
- 0x5c022800, 0x5c034800, 0x5c03a000, 0x5c032000,
- 0x1c01f000, 0x59c80003, 0x82000500, 0xffffe0ff,
- 0x48039003, 0x61f00800, 0x05f5f994, 0x4a03902c,
+ 0x6029d000, 0x0521fcc8, 0x5c01d000, 0x4a03c014,
+ 0x03800000, 0x59e00013, 0x4a03c014, 0x03800380,
+ 0x82000500, 0x00000100, 0x80000110, 0x8064c8c2,
+ 0x8064cd40, 0x4a03c013, 0x02000000, 0x8060c040,
+ 0x05fe07e9, 0x4867c857, 0x5c00c000, 0x1c01f000,
+ 0x4803c856, 0x4a03c013, 0x01000100, 0x4ce80000,
+ 0x6029d000, 0x0521fcb0, 0x5c01d000, 0x4a03c013,
+ 0x02000200, 0x4ce80000, 0x6029d000, 0x0521fcaa,
+ 0x5c01d000, 0x4a03c013, 0x02000000, 0x1c01f000,
+ 0x59a00408, 0x59a8085c, 0x4803505c, 0x48074408,
+ 0x59a00a0a, 0x90040494, 0x05021002, 0x6140080f,
+ 0x59a8005d, 0x4807505d, 0x4803420a, 0x05f9f68d,
+ 0x59a00407, 0x59a00a08, 0x900409c0, 0x80040d40,
+ 0x59a00408, 0x59a01209, 0x900811c0, 0x80081540,
+ 0x59a00409, 0x59a01a0a, 0x900c19c0, 0x800c1d40,
+ 0x59a0040a, 0x59a0220b, 0x901021c0, 0x80102540,
+ 0x054dfeff, 0x05f8067b, 0x05f9f6d2, 0x916c0580,
+ 0x0500000a, 0x59a80005, 0x59a00c07, 0x80041580,
+ 0xb0081500, 0x05f80673, 0x80080580, 0x48035005,
+ 0x05e9fc49, 0x05f9f66f, 0x59a00407, 0x59a80805,
+ 0x48035005, 0x80040d80, 0x8c040512, 0x05000004,
+ 0x59c40001, 0x84000544, 0x48038801, 0x8c04050c,
+ 0x05ea0c3d, 0x59a00208, 0x599c0818, 0x8c040510,
+ 0x05000002, 0x8400054a, 0x48035006, 0x59a00408,
+ 0x8c00051a, 0x05000009, 0x600018ec, 0x60140800,
+ 0x580c1006, 0x4a001805, 0x70000005, 0x900c1c20,
+ 0x80040840, 0x05fe07fb, 0x48035007, 0x05f9f651,
+ 0x8d0c050e, 0x05000003, 0x64074407, 0x05f9f690,
+ 0x0515fd02, 0x05020003, 0x645b4407, 0x05f9f68c,
+ 0x916c0583, 0x05000003, 0x641f4407, 0x05f9f688,
+ 0x59a00c07, 0x82040500, 0xffffff00, 0x05fa0689,
+ 0x82041580, 0x000000ff, 0x05020007, 0x59a8003d,
+ 0x82000500, 0x000000ff, 0x82001540, 0x0000ff00,
+ 0x0501f00f, 0x82040400, 0x00102853, 0x50000000,
+ 0x80000110, 0x82000580, 0x00000080, 0x05f80679,
+ 0x59a8003d, 0x82000500, 0x000000ff, 0x80041580,
+ 0x05f80674, 0x840409c0, 0x80041540, 0x4c080000,
+ 0x0531f833, 0x5c001000, 0x05020003, 0x640f4407,
+ 0x05f9f667, 0x48ee602d, 0x480a621e, 0x4a02641e,
+ 0x0000bc09, 0x64066407, 0x0509fbc5, 0x05020004,
+ 0x0005ffdc, 0x640b4407, 0x05f9f65d, 0x497a5a08,
+ 0x4a02601d, 0x0010e512, 0x497a5809, 0x4a025c08,
+ 0x00008000, 0x4a01d809, 0x0010342c, 0x492e6009,
+ 0x60ca7000, 0x0009f000, 0x8d0c050e, 0x05000003,
+ 0x64074407, 0x05f9f64e, 0x0515fcc0, 0x05020003,
+ 0x645b4407, 0x05f9f64a, 0x916c0583, 0x05000003,
+ 0x641f4407, 0x05f9f646, 0x59a00c07, 0x82040500,
+ 0xffffff00, 0x05fa0647, 0x82041580, 0x000000ff,
+ 0x05020007, 0x59a8003d, 0x82000500, 0x000000ff,
+ 0x82001540, 0x0000ff00, 0x0501f00f, 0x82040400,
+ 0x00102853, 0x50000000, 0x80000110, 0x82000580,
+ 0x00000080, 0x05f80637, 0x59a8003d, 0x82000500,
+ 0x000000ff, 0x80041580, 0x05f80632, 0x840409c0,
+ 0x80041540, 0x4c080000, 0x052dfff1, 0x5c001000,
+ 0x05020003, 0x640f4407, 0x05f9f625, 0x48ee602d,
+ 0x480a621e, 0x4a02641e, 0x0000bc05, 0x64066407,
+ 0x0509fb83, 0x05020004, 0x0005ffdc, 0x640b4407,
+ 0x05f9f61b, 0x497a5a08, 0x4a02601d, 0x0010e512,
+ 0x497a5809, 0x4a025c08, 0x00008000, 0x4a01d809,
+ 0x0010342c, 0x492e6009, 0x60ca7000, 0x0009f000,
+ 0x592c0009, 0x82000580, 0x01000000, 0x05fa05c9,
+ 0x64134407, 0x05f9f60a, 0x497b4407, 0x497b4208,
+ 0x8d0c0520, 0x05000008, 0x59a80098, 0x59a80899,
+ 0x80040480, 0x59a8089a, 0x48074407, 0x80041480,
+ 0x480b4208, 0x0509fc8f, 0x48034408, 0x59a8103b,
+ 0x59a8029c, 0x80080480, 0x4803420a, 0x495f440a,
+ 0x59a80048, 0x4803420c, 0x4a03440c, 0x000000fe,
+ 0x05f9f5b0, 0x8d0c050e, 0x05000003, 0x64074407,
+ 0x05f9f5ef, 0x59a00407, 0x8c000500, 0x0502000d,
+ 0x59a8009b, 0x81640480, 0x05001008, 0x59a8000b,
+ 0x81500580, 0x05000007, 0x59a80099, 0x59a81098,
+ 0x80080580, 0x05000003, 0x64634407, 0x05f9f5e0,
+ 0x850e1d58, 0x4803c856, 0x850e1d46, 0x050df867,
+ 0x05f9f598, 0x4803c856, 0x8d0c050e, 0x05fa05e1,
+ 0x59a00407, 0x8c00051e, 0x05000007, 0x4803c856,
+ 0x59a0020c, 0x82000480, 0x00000800, 0x0500100f,
+ 0x05f9f5d4, 0x4803c856, 0x59a0020c, 0x599c0a01,
+ 0x80040480, 0x05021002, 0x05f9f5ce, 0x59a8003b,
+ 0x81640580, 0x05000005, 0x64634407, 0x05f9f5c4,
+ 0x64174407, 0x05f9f5c2, 0x59a80249, 0x8c00050a,
+ 0x05fc07fc, 0x59a00407, 0x8c00051e, 0x05000033,
+ 0x052dff83, 0x05020003, 0x640f4407, 0x05f9f5b8,
+ 0x0509fb1b, 0x05020004, 0x0005ffdc, 0x640b4407,
+ 0x05f9f5b3, 0x497a5a08, 0x59a00407, 0x4802620c,
+ 0x59a0020a, 0x4802640c, 0x59a0040a, 0x4802620d,
+ 0x59a0020e, 0x4802620e, 0x59a0040e, 0x4802640e,
+ 0x59a0020f, 0x4802620f, 0x59a0040f, 0x4802640f,
+ 0x59a00211, 0x48026210, 0x59a00411, 0x48026410,
+ 0x59a0020c, 0x4802640d, 0x0501f9f9, 0x05fc07e7,
+ 0x48ee602d, 0x58ee580d, 0x59300210, 0x59301c10,
+ 0x900c19c0, 0x800c1d40, 0x5930020e, 0x5930140e,
+ 0x900811c0, 0x80081540, 0x592c0a09, 0x912c040a,
+ 0x0509fb15, 0x4a01d809, 0x00103637, 0x64074000,
+ 0x49334001, 0x1c01f000, 0x0509fe75, 0x05fa0595,
+ 0x0529f85f, 0x598e600b, 0x0529fb5a, 0x0529f85c,
+ 0x417a3000, 0x0529fd9b, 0x59926005, 0x813261c0,
+ 0x05000007, 0x0529fa8c, 0x0529f825, 0x0529f82a,
+ 0x60027820, 0x60ba8000, 0x0525fede, 0x811a3000,
+ 0x91180485, 0x05fc17f4, 0x05e9ffd1, 0x0501f88f,
+ 0x497b50be, 0x64034408, 0x4201d000, 0x003d0900,
+ 0x0521fb63, 0x59c40880, 0x4c040000, 0x59c408a3,
+ 0x4c040000, 0x497b4002, 0x0501f892, 0x0501f8ac,
+ 0x4a03a005, 0x10000000, 0x4a038805, 0x000000f0,
+ 0x0501f8c6, 0x0501f916, 0x0500006c, 0x59dc0806,
+ 0x82040500, 0x43200f80, 0x05000007, 0x82040500,
+ 0x80000000, 0x05000004, 0x4a034408, 0x0000dddd,
+ 0x0501f062, 0x59d00806, 0x82040500, 0x43dc0700,
+ 0x05000007, 0x82040500, 0x80000000, 0x05000004,
+ 0x4a034408, 0x0000dddd, 0x0501f058, 0x59c80001,
+ 0x800001c0, 0x05fc07e8, 0x59c80018, 0x82000500,
+ 0xf0000000, 0x59c00808, 0x82040d00, 0x0fffffff,
+ 0x80040540, 0x48038008, 0x05edfb7b, 0x59c00006,
+ 0x4a038006, 0x10000000, 0x59c00009, 0x82000d00,
+ 0x00e00000, 0x05020020, 0x6403900d, 0x59c80020,
+ 0x82000500, 0xff000000, 0x82000580, 0x32000000,
+ 0x05020019, 0x6407900d, 0x59c80020, 0x82000500,
+ 0xff000000, 0x82000580, 0xe1000000, 0x05020012,
+ 0x6403900d, 0x59c80020, 0x82000500, 0x00ffffff,
+ 0x6403900d, 0x59c80821, 0x82040d00, 0x00ffffff,
+ 0x80040580, 0x05020008, 0x59a8003d, 0x80040580,
+ 0x05020005, 0x59c40005, 0x82000500, 0x000000f0,
+ 0x05000005, 0x4803c856, 0x0501f8da, 0x640750be,
+ 0x0501f002, 0x0501f8e5, 0x61900000, 0x80000040,
+ 0x0502001a, 0x05f5f84a, 0x0502000c, 0x59c40005,
+ 0x82000500, 0x000000f0, 0x0502000b, 0x0501f8c0,
+ 0x0500000c, 0x59c00007, 0x82000500, 0x000501c0,
+ 0x0502000b, 0x497b4408, 0x4a034408, 0x0000aaaa,
+ 0x0501f00e, 0x4a034408, 0x0000bbbb, 0x0501f00b,
+ 0x4a034408, 0x0000cccc, 0x0501f008, 0x4a034408,
+ 0x0000dddd, 0x0501f005, 0x59c00807, 0x90040d0c,
+ 0x05fc07e3, 0x0501f002, 0x640750be, 0x0501f8c8,
+ 0x0509fdf6, 0x0529fb4d, 0x0501f813, 0x4201d000,
+ 0x000186a0, 0x0521fae2, 0x5c000800, 0x480788a3,
+ 0x5c000800, 0x48078880, 0x59a800be, 0x800001c0,
+ 0x05f804a4, 0x05f9f4f3, 0x599c0201, 0x480350bf,
+ 0x41780800, 0x60401076, 0x0525fa34, 0x480b50c0,
+ 0x1c01f000, 0x0525ffa7, 0x59b800ea, 0x90000507,
+ 0x90000583, 0x05020002, 0x640770e8, 0x1c01f000,
+ 0x600380ee, 0x4a038006, 0x30000000, 0x59c00007,
+ 0x8c00050a, 0x05fe07fe, 0x59c00006, 0x59a0020a,
+ 0x59a00c0a, 0x900409c0, 0x80040d40, 0x48078001,
+ 0x59a0020f, 0x59a00c0f, 0x900409c0, 0x80040d40,
+ 0x48078000, 0x59a0020c, 0x48038002, 0x48038003,
+ 0x48038005, 0x497b9009, 0x59e00003, 0x82000540,
+ 0x00008060, 0x4803c003, 0x1c01f000, 0x41780800,
+ 0x8007a0ca, 0x83d3a400, 0x00007600, 0x61000800,
+ 0x05f1fa72, 0x6407a00a, 0x4a03a005, 0x20000000,
+ 0x59d00006, 0x4a03a005, 0x30000000, 0x59d00006,
+ 0x8c00050a, 0x05fe07fe, 0x59d00005, 0x59a00211,
+ 0x59a00c11, 0x900409c0, 0x80040d40, 0x4807a001,
+ 0x59a0020e, 0x59a00c0e, 0x900409c0, 0x80040d40,
+ 0x4807a000, 0x59a0020c, 0x4803a003, 0x4803a002,
+ 0x4803a008, 0x1c01f000, 0x59a00002, 0x4803c857,
+ 0x800001c0, 0x0502004d, 0x59a800ca, 0x8c000500,
+ 0x05020003, 0x59a800c0, 0x48038880, 0x59c400a3,
+ 0x82000540, 0x00002008, 0x8400053a, 0x480388a3,
+ 0x59c40008, 0x82000500, 0xffffffe1, 0x82000540,
+ 0x00000280, 0x48038808, 0x59c80040, 0x84000534,
+ 0x48039040, 0x0501f8f6, 0x05020012, 0x59a8003d,
+ 0x800000d0, 0x90000551, 0x48039120, 0x59a8003d,
+ 0x82000500, 0x00ffffff, 0x82000540, 0x32000000,
+ 0x48039121, 0x4a039123, 0xe1290008, 0x59a8003d,
+ 0x82000500, 0x00ffffff, 0x48039122, 0x0501f015,
+ 0x59a8003d, 0x82000500, 0x000000ff, 0x900009c0,
+ 0x840001c0, 0x80040540, 0x90000540, 0x48039120,
+ 0x59a8003d, 0x82000500, 0x000000ff, 0x82000540,
+ 0x01000000, 0x48039121, 0x4a039123, 0x08210008,
+ 0x59a8003d, 0x82000500, 0x000000ff, 0x48039122,
+ 0x497b9124, 0x59a80cc1, 0x80040800, 0x480754c1,
+ 0x900409c0, 0x82040540, 0x0000aaaa, 0x48039125,
+ 0x497b9126, 0x497b9127, 0x59c80101, 0x0501f8c4,
+ 0x05020004, 0x4a039100, 0x0000e980, 0x0501f003,
+ 0x4a039100, 0x0000e9a0, 0x1c01f000, 0x90000541,
+ 0x0502500b, 0x4203e000, 0x80000000, 0x40e81000,
+ 0x41780800, 0x61900000, 0x0525f998, 0x5994002e,
+ 0x80080400, 0x4803282e, 0x80000580, 0x1c01f000,
+ 0x4d900000, 0x4dd00000, 0x4da40000, 0x4d140000,
+ 0x4cd80000, 0x417a3000, 0x0529fc52, 0x0529f946,
+ 0x5c01b000, 0x5c022800, 0x5c034800, 0x5c03a000,
+ 0x5c032000, 0x1c01f000, 0x59c80007, 0x8c000500,
+ 0x05000002, 0x64c3900d, 0x1c01f000, 0x4a038805,
+ 0x00020000, 0x60f00800, 0x05f1f9e4, 0x4a038891,
+ 0x0000ffff, 0x59c80035, 0x48039035, 0x6503900d,
+ 0x600380ee, 0x05edfa5c, 0x4a038006, 0x20000000,
+ 0x608380ee, 0x05edfa58, 0x4a038006, 0x20000000,
+ 0x4a03a005, 0x20000000, 0x59d00006, 0x4a03a005,
+ 0x30000000, 0x59a00207, 0xb0000585, 0x05020004,
+ 0x59a0000d, 0x800001c0, 0x05000009, 0x4a03b805,
+ 0x30000001, 0x59dc0006, 0x4a03b805, 0x20000000,
+ 0x59dc0806, 0x8c04050a, 0x05fe07fe, 0x59d00806,
+ 0x8c04050a, 0x05fe07fe, 0x1c01f000, 0x0505f824,
+ 0x05f803fa, 0x58ee580d, 0x4d300000, 0x59a26001,
+ 0x59a00000, 0x4000b000, 0x80000000, 0x48034000,
+ 0x592c0001, 0x80000540, 0x0500001a, 0x40025800,
+ 0x8058b040, 0x05fe07fb, 0x58ec1007, 0x58ec1808,
+ 0x592c0a09, 0x4d2c0000, 0x58ec000d, 0x40025800,
+ 0x592c0208, 0x5c025800, 0x82000580, 0x00000103,
+ 0x05000006, 0x912c040a, 0x0509f96f, 0x4a01d809,
+ 0x00103637, 0x0501f005, 0x912c040a, 0x0509f96c,
+ 0x4a01d809, 0x00103637, 0x5c026000, 0x1c01f000,
+ 0x58ec000d, 0x40025800, 0x592c0208, 0x82000580,
+ 0x00000103, 0x05020004, 0x0005ffdc, 0x5c026000,
+ 0x05f9f394, 0x58ec000d, 0x40025800, 0x592c0408,
+ 0x8400055e, 0x48025c08, 0x61f6880f, 0x42003000,
+ 0x00fffffd, 0x050dfea7, 0x59a26001, 0x05000005,
+ 0x0005ffdc, 0x497b4407, 0x5c026000, 0x05f9f3c8,
+ 0x053dfa6a, 0x05fc07fb, 0x4a01d809, 0x00103679,
+ 0x05fdf7e2, 0x592c0009, 0x82000580, 0x01000000,
+ 0x05000013, 0x4d300000, 0x59a26001, 0x5930020d,
+ 0x59301c0c, 0x900001c0, 0x800c1d40, 0x5930040f,
+ 0x5930120f, 0x900001c0, 0x80081540, 0x592c0a09,
+ 0x912c040a, 0x0509f93a, 0x4a01d809, 0x00103637,
+ 0x64074000, 0x5c026000, 0x1c01f000, 0x4d300000,
+ 0x59a26001, 0x4a034408, 0x0000cccc, 0x4933c857,
+ 0x052dfd3c, 0x5c026000, 0x05f9f3b2, 0x4933c857,
+ 0x4c300000, 0x5930040d, 0x90000cb8, 0x05001003,
+ 0x64e25a09, 0x0501f003, 0x48025a09, 0x0501f009,
+ 0x800409c0, 0x05000007, 0x4c040000, 0x0509f8fc,
+ 0x5c000800, 0x05000004, 0x40040000, 0x05fdf7f3,
+ 0x90000541, 0x5c006000, 0x1c01f000, 0x59a00207,
+ 0xb0000584, 0x1c01f000, 0x490fc857, 0x8d0c050e,
+ 0x05000007, 0x05f1fcc9, 0x05020005, 0x600c0000,
+ 0x05f1fe91, 0x600c0000, 0x05f1fe5f, 0x59a00407,
+ 0x90000507, 0x0c01f001, 0x001036c3, 0x001036ca,
+ 0x001036e2, 0x001036c2, 0x001036c2, 0x001036c2,
+ 0x001036c2, 0x001036c2, 0x05f9f37e, 0x0509fcb3,
+ 0x60080810, 0x05f1feec, 0x90040542, 0x60080810,
+ 0x05f1feee, 0x0501f00e, 0x0509fcac, 0x60080810,
+ 0x05f1fee5, 0x90040541, 0x60080810, 0x05f1fee7,
+ 0x60300848, 0x05f1fee0, 0x82040540, 0x00000080,
+ 0x60300848, 0x05f1fee1, 0x0501f001, 0x59c80040,
+ 0x4c000000, 0x59a8003d, 0x4c000000, 0x59c400a3,
+ 0x4c000000, 0x59c40008, 0x4c000000, 0x0501f929,
+ 0x0500003a, 0x05e5fef9, 0x8d0c050e, 0x05000023,
+ 0x59c40006, 0x84000500, 0x48038806, 0x0529f96e,
+ 0x497b8880, 0x59c400a3, 0x82000500, 0xfcf8ffff,
+ 0x480388a3, 0x6012d800, 0x64078805, 0x05e9f90f,
+ 0x05f1fe1c, 0x497b5068, 0x64075075, 0x59a800a7,
+ 0x84000540, 0x480350a7, 0x4803c857, 0x4a01d809,
+ 0x001036fb, 0x64535078, 0x1c01f000, 0x42000000,
+ 0x0010dd09, 0x50000800, 0x84040d08, 0x44040000,
+ 0x59a800a7, 0x84000500, 0x480350a7, 0x4803c857,
+ 0x8d0c050e, 0x05fa033f, 0x0515f9a8, 0x05020003,
+ 0x645b4407, 0x05f9f332, 0x916c0583, 0x05fa0339,
+ 0x59c408a4, 0x90040d0f, 0x90040580, 0x05fa0335,
+ 0x0509fc17, 0x05fa033b, 0x59c80040, 0x4c000000,
+ 0x59a8003d, 0x4c000000, 0x59c400a3, 0x4c000000,
+ 0x59c40008, 0x4c000000, 0x59c40080, 0x4c000000,
+ 0x59a00210, 0x59a0bc10, 0x905cb9c0, 0x805cbd40,
+ 0x41784800, 0x41785000, 0x41785800, 0x41789000,
+ 0x41789800, 0x05fdfe31, 0x64034408, 0x0525fdec,
+ 0x598e600b, 0x0529f8e7, 0x0525fde9, 0x417a3000,
+ 0x0529fb28, 0x59926005, 0x813261c0, 0x05000007,
+ 0x0529f819, 0x0525fdb2, 0x0525fdb7, 0x60027820,
+ 0x60ba8000, 0x0525fc6b, 0x811a3000, 0x91180485,
+ 0x05fc17f4, 0x05e9fd5e, 0x4178c000, 0x497b4002,
+ 0x0501f936, 0x59a00408, 0x82000580, 0x0000dddd,
+ 0x05000072, 0x0501f976, 0x59a00408, 0x82000580,
+ 0x0000dddd, 0x0500006d, 0x59a0020d, 0x59a00c0d,
+ 0x80040d40, 0x05000002, 0x0501f9b8, 0x0501f9b7,
+ 0x05fdfe52, 0x8060c1c0, 0x05020014, 0x0501fa49,
+ 0x59a00408, 0x82000580, 0x0000dddd, 0x0500005f,
+ 0x05fdfe9b, 0x0502000a, 0x05f1fe1d, 0x05020006,
+ 0x645f4407, 0x05f9fae2, 0x4203e000, 0x50000000,
+ 0x0501f000, 0x60a85955, 0x0501f059, 0x59c80001,
+ 0x800001c0, 0x05fc07ee, 0x59c80801, 0x800409c0,
+ 0x05000006, 0x0501fa21, 0x40240000, 0x80280540,
+ 0x802c0540, 0x0502004e, 0x59a00002, 0x82000580,
+ 0xfeedbeef, 0x05000004, 0x42008800, 0x10000000,
+ 0x0501f003, 0x42008800, 0x10000004, 0x0501f9cf,
+ 0x4a034002, 0xfeedbeef, 0x0501fa22, 0x59a00408,
+ 0x82000580, 0x0000dddd, 0x05000038, 0x0501fa4e,
+ 0x59a00408, 0x82000580, 0x0000dddd, 0x05000033,
+ 0x05fdfe8a, 0x59c40005, 0x8c000534, 0x05000003,
+ 0x60ec5977, 0x0501f032, 0x05fdfe69, 0x05020006,
+ 0x61305999, 0x485f4210, 0x905cb9c0, 0x485f4410,
+ 0x0501f02b, 0x59a0040d, 0x800001c0, 0x0500000e,
+ 0x59a26000, 0x5930000f, 0x800001c0, 0x05fe07b8,
+ 0x59a26001, 0x5930080f, 0x800409c0, 0x05fe07b4,
+ 0x804891c0, 0x05fe07b2, 0x804c99c0, 0x05fe07b0,
+ 0x0501f85f, 0x805cb840, 0x05000005, 0x40240000,
+ 0x80280540, 0x802c0540, 0x05020015, 0x42000000,
+ 0x00030d40, 0x80000040, 0x0502000e, 0x59c00007,
+ 0x82000500, 0x000501c0, 0x05020008, 0x05f1fdc8,
+ 0x05020006, 0x645f4407, 0x05f9fa8d, 0x4203e000,
+ 0x50000000, 0x0501f000, 0x617459bb, 0x0501f004,
+ 0x59c00807, 0x90040d0c, 0x05fc07ef, 0x05fdfe45,
+ 0x59a0040d, 0x800001c0, 0x05000002, 0x0501f840,
+ 0x05fdfe53, 0x40240000, 0x80280540, 0x802c0540,
+ 0x05020003, 0x805cb9c0, 0x05fe0778, 0x0509fb7b,
+ 0x0529f8d2, 0x05fdfd98, 0x4201d000, 0x000186a0,
+ 0x0521f867, 0x5c000800, 0x48078880, 0x5c000800,
+ 0x48078808, 0x5c000800, 0x480788a3, 0x5c000800,
+ 0x4807503d, 0x5c000800, 0x48079040, 0x05e9fb22,
+ 0x59a00407, 0x90000503, 0x90000582, 0x0500001c,
+ 0x60080810, 0x05f1fdd8, 0x82040500, 0xfffffffc,
+ 0x60080810, 0x05f1fdd9, 0x60300848, 0x05f1fdd2,
+ 0x82040500, 0xffffff7f, 0x60300848, 0x05f1fdd3,
+ 0x0515f8d6, 0x05020003, 0x0515fc70, 0x0501f00c,
+ 0x4a0388a7, 0x0000f7f7, 0x42006000, 0xbeffffff,
+ 0x42006800, 0x80018000, 0x050dfa69, 0x42006000,
+ 0xfffeffff, 0x41786800, 0x050dfa65, 0x402c0000,
+ 0x80280540, 0x80240540, 0x05f80202, 0x48274407,
+ 0x482b4208, 0x482f4408, 0x05f9f252, 0x59a26000,
+ 0x813261c0, 0x0500000a, 0x59325809, 0x812e59c0,
+ 0x05000007, 0x0005ffdc, 0x05e9f999, 0x59a26001,
+ 0x59325809, 0x0005ffdc, 0x05e9f995, 0x1c01f000,
+ 0x61bc0801, 0x05f1fae9, 0x4a03503d, 0x000000ef,
+ 0x59c400a3, 0x8400055a, 0x8400053a, 0x480388a3,
+ 0x05f1fb52, 0x05020006, 0x60040000, 0x05f1fd32,
+ 0x60040000, 0x05f1fd00, 0x0501f013, 0x05f1fb51,
+ 0x05020006, 0x60000000, 0x05f1fd2b, 0x60000000,
+ 0x05f1fcf9, 0x0501f00c, 0x05f1fb50, 0x05020006,
+ 0x60080000, 0x05f1fd24, 0x60080000, 0x05f1fcf2,
+ 0x0501f005, 0x600c0000, 0x05f1fd1f, 0x600c0000,
+ 0x05f1fced, 0x6051d000, 0x051dffdb, 0x59c40008,
+ 0x82000500, 0xffffffe1, 0x82000540, 0x00000280,
+ 0x48038808, 0x4a0388a7, 0x0000f8f7, 0x4a038805,
+ 0x04000001, 0x42006000, 0xbe20bfff, 0x42006800,
+ 0x80018000, 0x050dfa1e, 0x42006000, 0xfffeffff,
+ 0x41786800, 0x050dfa1a, 0x6020b027, 0x6051d000,
+ 0x4c580000, 0x051dffc4, 0x05f1fd31, 0x5c00b000,
+ 0x05000004, 0x8058b040, 0x05fe07f9, 0x0501f029,
+ 0x59c40005, 0x8c000534, 0x05020005, 0x59c400a4,
+ 0x9000050f, 0x90000588, 0x05020022, 0x42006000,
+ 0x00020000, 0x050dfa0b, 0x6191d000, 0x051dffb2,
+ 0x42006000, 0xfeffffff, 0x42006800, 0x02000000,
+ 0x050df9ff, 0x42006000, 0xfdffffff, 0x41786800,
+ 0x050df9fb, 0x59c40001, 0x82000500, 0x00018000,
+ 0x82000580, 0x00018000, 0x59c400a3, 0x05020004,
+ 0x82000540, 0x00001000, 0x0501f003, 0x82000500,
+ 0xffffefff, 0x480388a3, 0x4a038805, 0x04000001,
+ 0x59c400a4, 0x9000050f, 0x90000580, 0x05000002,
+ 0x90000541, 0x1c01f000, 0x4803c856, 0x600380ee,
+ 0x05edf801, 0x59c00006, 0x59a0040d, 0x800001c0,
+ 0x05000037, 0x59a03c0d, 0x59a0020a, 0x59a01c0a,
+ 0x900c19c0, 0x800c1d40, 0x59a0020f, 0x59a0240f,
+ 0x901021c0, 0x80102540, 0x59a0020c, 0x82000500,
+ 0x0000fffc, 0x59a0140c, 0x900811c0, 0x80081540,
+ 0x480b8003, 0x052dfb7a, 0x05e40d50, 0x49334000,
+ 0x05e9f8f6, 0x64625a08, 0x4a025809, 0x00abcdef,
+ 0x492e6009, 0x492e600d, 0x481e600f, 0x6412600e,
+ 0x912c0415, 0x4802600c, 0x60301000, 0x901c0d81,
+ 0x05000008, 0x801c3840, 0x0501f963, 0x59a00408,
+ 0x82000580, 0x0000dddd, 0x05000011, 0x0501f004,
+ 0x41783800, 0x0501f95c, 0x0501f00d, 0x901c0c85,
+ 0x05001004, 0x40043800, 0x60f01000, 0x0501f005,
+ 0x80001580, 0x9008140c, 0x801c3840, 0x05fe07fe,
+ 0x912c0409, 0x0501f950, 0x05fe07f5, 0x497b9009,
+ 0x59e00003, 0x82000540, 0x00008060, 0x4803c003,
+ 0x4a038009, 0x00e00000, 0x1c01f000, 0x4803c856,
+ 0x41780800, 0x8007a0ca, 0x83d3a400, 0x00007600,
+ 0x61000800, 0x05edff39, 0x6407a00a, 0x4a03a005,
+ 0x20000000, 0x59d00006, 0x4a03a005, 0x30000000,
+ 0x59d00006, 0x8c00050a, 0x05fe07fe, 0x59d00005,
+ 0x59a0020d, 0x800001c0, 0x05000037, 0x59a03a0d,
+ 0x59a00211, 0x59a01c11, 0x900c19c0, 0x800c1d40,
+ 0x59a0020e, 0x59a0240e, 0x901021c0, 0x80102540,
+ 0x59a0120c, 0x82081500, 0x0000fffc, 0x59a0040c,
+ 0x900001c0, 0x80081540, 0x480ba003, 0x052dfb28,
+ 0x05e40cfe, 0x49334001, 0x05e9f8a4, 0x64625a08,
+ 0x4a025809, 0x00abcdef, 0x492e6009, 0x492e600d,
+ 0x481e600f, 0x6412600e, 0x912c0415, 0x4802600c,
+ 0x60301000, 0x901c0d81, 0x05000008, 0x801c3840,
+ 0x0501f911, 0x59a00408, 0x82000580, 0x0000dddd,
+ 0x05000011, 0x0501f004, 0x41783800, 0x0501f90a,
+ 0x0501f00d, 0x901c0c85, 0x05001004, 0x40043800,
+ 0x60f01000, 0x0501f005, 0x80001580, 0x9008140c,
+ 0x801c3840, 0x05fe07fe, 0x912c0409, 0x0501f8fe,
+ 0x05fe07f5, 0x1c01f000, 0x4803c856, 0x59a0020d,
+ 0x800001c0, 0x05000020, 0x904c0582, 0x0500003a,
+ 0x59a26001, 0x5930380f, 0x801c39c0, 0x05000036,
+ 0x801c3840, 0x481e600f, 0x5932580d, 0x5930080c,
+ 0x50042000, 0x58041801, 0x58041002, 0x82081500,
+ 0xfffffffc, 0x5930000e, 0x80000000, 0x90000d85,
+ 0x05020008, 0x497a600e, 0x592e5801, 0x812e59c0,
+ 0x05000018, 0x492e600d, 0x912c0c09, 0x0501f004,
+ 0x4802600e, 0x5930080c, 0x90040c03, 0x4806600c,
+ 0x0501f010, 0x59a0120c, 0x82081500, 0x0000fffc,
+ 0x59a0040c, 0x900001c0, 0x80081540, 0x480ba003,
+ 0x59a0020e, 0x59a0240e, 0x901021c0, 0x80102540,
+ 0x59a00211, 0x59a01c11, 0x900c19c0, 0x800c1d40,
+ 0x6061d075, 0x051dfefa, 0x6423a00a, 0x480ba002,
+ 0x59a800bf, 0x4803a008, 0x4813a000, 0x480fa001,
+ 0x4a03a005, 0x10000000, 0x05e45c9c, 0x804c9800,
+ 0x90000541, 0x1c01f000, 0x4847c857, 0x59a0040d,
+ 0x800001c0, 0x05000020, 0x90480582, 0x0500003e,
+ 0x59a26000, 0x5930380f, 0x801c39c0, 0x0500003a,
+ 0x801c3840, 0x481e600f, 0x5932580d, 0x5930080c,
+ 0x50042000, 0x58041801, 0x58041002, 0x82081500,
+ 0xfffffffc, 0x5930000e, 0x80000000, 0x90000d85,
+ 0x05020008, 0x497a600e, 0x592e5801, 0x812e59c0,
+ 0x0500001b, 0x492e600d, 0x912c0c09, 0x0501f004,
+ 0x4802600e, 0x5930080c, 0x90040c03, 0x4806600c,
+ 0x0501f013, 0x82440580, 0x10000000, 0x0502001e,
+ 0x59a0020f, 0x59a0240f, 0x901021c0, 0x80102540,
+ 0x59a0020a, 0x59a01c0a, 0x900c19c0, 0x800c1d40,
+ 0x59a0020c, 0x82000500, 0x0000fffc, 0x59a0140c,
+ 0x900811c0, 0x80081540, 0x480b8003, 0x48138000,
+ 0x480f8001, 0x480b8002, 0x59c80018, 0x82000500,
+ 0xf0000000, 0x59c02008, 0x82102500, 0x0fffffff,
+ 0x80100540, 0x48038008, 0x48478006, 0x80489000,
+ 0x9060c541, 0x1c01f000, 0x59c00009, 0x4803c857,
+ 0x82000d00, 0x00e00000, 0x0500000d, 0x485f4210,
+ 0x905cb9c0, 0x485f4410, 0x8c00052e, 0x05000002,
+ 0x80285000, 0x8c00052c, 0x05000002, 0x80244800,
+ 0x8c00052a, 0x05000002, 0x802c5800, 0x1c01f000,
+ 0x59d00806, 0x82040500, 0x43dc0700, 0x05000007,
+ 0x82040500, 0x80000000, 0x05000004, 0x4a034408,
+ 0x0000dddd, 0x0501f027, 0x59a0020d, 0x800001c0,
+ 0x05000024, 0x59d00806, 0x4807c857, 0x8c04053e,
+ 0x05000020, 0x8c040504, 0x0500001e, 0x4a03a005,
+ 0x20000000, 0x82040d00, 0x43dc0700, 0x05000004,
+ 0x4a034408, 0x0000dddd, 0x0501f016, 0x904c0483,
+ 0x05e61c26, 0x404c0000, 0x0c01f001, 0x001039ba,
+ 0x001039bb, 0x001039c1, 0x05e5fc20, 0x80000040,
+ 0x40009800, 0x05fdff45, 0x0500000a, 0x05fdff43,
+ 0x0501f008, 0x80000040, 0x40009800, 0x59d00806,
+ 0x4807c857, 0x8c04053e, 0x05fe07e5, 0x05fdff3b,
+ 0x1c01f000, 0x59c00807, 0x82040500, 0x00f507c0,
+ 0x05000007, 0x82040500, 0x80000000, 0x05000004,
+ 0x4a034408, 0x0000dddd, 0x0501f02a, 0x59a0040d,
+ 0x800001c0, 0x05000027, 0x59c00807, 0x4807c857,
+ 0x8c04053e, 0x05000023, 0x59c00807, 0x4a038006,
+ 0x20000000, 0x82040d00, 0x00f507c0, 0x05000004,
+ 0x4a034408, 0x0000dddd, 0x0501f01a, 0x90480483,
+ 0x05e61bf6, 0x40480000, 0x0c01f001, 0x001039ea,
+ 0x001039eb, 0x001039f3, 0x05e5fbf0, 0x80000040,
+ 0x40009000, 0x42008800, 0x10000004, 0x05fdff53,
+ 0x0500000c, 0x05fdff51, 0x0501f00a, 0x80000040,
+ 0x40009000, 0x59c00807, 0x4807c857, 0x8c04053e,
+ 0x05fe07e2, 0x42008800, 0x10000004, 0x05fdff47,
+ 0x1c01f000, 0x492fc857, 0x4000a800, 0x4a03b805,
+ 0x20000000, 0x59dc0006, 0x4a03b805, 0x30000000,
+ 0x4813b800, 0x480fb801, 0x480bb802, 0x4857b803,
+ 0x4a03b805, 0x30000002, 0x59dc0006, 0x4a03b805,
+ 0x70000001, 0x59dc0006, 0x4a03b805, 0x10000000,
+ 0x59dc0006, 0x8c00053e, 0x05fc07fe, 0x4a03b805,
+ 0x20000000, 0x59dc0006, 0x82000500, 0x43200f80,
+ 0x05000005, 0x4a034408, 0x0000dddd, 0x80000580,
+ 0x0501f00b, 0x59dc2000, 0x59dc1801, 0x801c39c0,
+ 0x05000007, 0x4d2c0000, 0x05e5ff60, 0x5c000800,
+ 0x05e40bb6, 0x642a5a08, 0x492c0801, 0x1c01f000,
+ 0x49cbc857, 0x59c80003, 0x82000500, 0xffffe0ff,
+ 0x48039003, 0x61f00800, 0x05edfdc8, 0x4a03902c,
0x00200000, 0x61d0b003, 0x59c8002c, 0x8c00052c,
0x05000006, 0x8058b040, 0x05fe07fc, 0x600c0080,
- 0x41781000, 0x0501f11e, 0x640b5088, 0x42006000,
- 0x00102af8, 0x50301000, 0x41784800, 0x4a03902d,
- 0x00008000, 0x61d0b003, 0x59c8002c, 0x8c000534,
+ 0x41781000, 0x0501f148, 0x640b50c8, 0x42006000,
+ 0x00103b96, 0x50301000, 0x480bc857, 0x41784800,
+ 0x4a03902d, 0x00008000, 0x61d0b003, 0x59c8002c,
+ 0x8c000534, 0x05000006, 0x8058b040, 0x05fe07fc,
+ 0x600c0080, 0x41781000, 0x0501f137, 0x0501f8ab,
+ 0x80244800, 0x82081400, 0x02020202, 0x82240580,
+ 0x000003b1, 0x05fe07fa, 0x0501f93f, 0x41784800,
+ 0x50301000, 0x0501f8cc, 0x80244800, 0x82081400,
+ 0x02020202, 0x82240580, 0x000003b1, 0x05fe07fa,
+ 0x80306000, 0x82300580, 0x00103b98, 0x05fe07de,
+ 0x59a808c7, 0x800409c0, 0x05000005, 0x60100080,
+ 0x60081000, 0x59a818c6, 0x0501f11b, 0x42006000,
+ 0x00103b96, 0x644350c8, 0x50301000, 0x480bc857,
+ 0x41784800, 0x4a03902d, 0x00000800, 0x0501f887,
+ 0x80244800, 0x82081400, 0x02020202, 0x90240598,
+ 0x05fe07fb, 0x0501f91c, 0x41784800, 0x50301000,
+ 0x0501f8a9, 0x80244800, 0x82081400, 0x02020202,
+ 0x90240598, 0x05fe07fb, 0x80306000, 0x82300580,
+ 0x00103b98, 0x05fe07e9, 0x59a808c7, 0x800409c0,
+ 0x05000005, 0x60100080, 0x60401000, 0x59a818c6,
+ 0x0501f0f9, 0x42006000, 0x00103b96, 0x642350c8,
+ 0x50301000, 0x480bc857, 0x41784800, 0x4a03902d,
+ 0x00000400, 0x0501f865, 0x80244800, 0x82081400,
+ 0x03030303, 0x82240580, 0x00000088, 0x05fe07fa,
+ 0x0501f8f9, 0x41784800, 0x50301000, 0x0501f886,
+ 0x80244800, 0x82081400, 0x03030303, 0x82240580,
+ 0x00000088, 0x05fe07fa, 0x80306000, 0x82300580,
+ 0x00103b98, 0x05fe07e7, 0x59a808c7, 0x800409c0,
+ 0x05000005, 0x60100080, 0x60201000, 0x59a818c6,
+ 0x0501f0d5, 0x42006000, 0x00103b96, 0x648350c8,
+ 0x50301000, 0x480bc857, 0x41784800, 0x4a03902d,
+ 0x00002000, 0x61d0b003, 0x59c8002c, 0x8c000530,
0x05000006, 0x8058b040, 0x05fe07fc, 0x600c0080,
- 0x41781000, 0x0501f10e, 0x0501f894, 0x80244800,
- 0x82240580, 0x000003b1, 0x05fe07fc, 0x0501f918,
- 0x41784800, 0x0501f8b8, 0x80244800, 0x82240580,
- 0x000003b1, 0x05fe07fc, 0x80306000, 0x82300580,
- 0x00102afa, 0x05fe07e4, 0x59a80887, 0x800409c0,
- 0x05000005, 0x60100080, 0x60081000, 0x59a81886,
- 0x0501f0f7, 0x42006000, 0x00102af8, 0x64435088,
- 0x50301000, 0x41784800, 0x4a03902d, 0x00000800,
- 0x0501f876, 0x80244800, 0x90240598, 0x05fe07fd,
- 0x0501f8fb, 0x41784800, 0x0501f89b, 0x80244800,
- 0x90240598, 0x05fe07fd, 0x80306000, 0x82300580,
- 0x00102afa, 0x05fe07ef, 0x59a80887, 0x800409c0,
- 0x05000005, 0x60100080, 0x60401000, 0x59a81886,
- 0x0501f0db, 0x42006000, 0x00102af8, 0x64235088,
- 0x50301000, 0x41784800, 0x4a03902d, 0x00000400,
- 0x0501f85a, 0x80244800, 0x82240580, 0x00000088,
- 0x05fe07fc, 0x0501f8de, 0x41784800, 0x0501f87e,
- 0x80244800, 0x82240580, 0x00000088, 0x05fe07fc,
- 0x80306000, 0x82300580, 0x00102afa, 0x05fe07ed,
- 0x59a80887, 0x800409c0, 0x05000005, 0x60100080,
- 0x60201000, 0x59a81886, 0x0501f0bd, 0x42006000,
- 0x00102af8, 0x64835088, 0x50301000, 0x41784800,
- 0x4a03902d, 0x00002000, 0x61d0b003, 0x59c8002c,
- 0x8c000530, 0x05000006, 0x8058b040, 0x05fe07fc,
- 0x600c0080, 0x41781000, 0x0501f0ad, 0x59c8002c,
- 0x82000500, 0xffe0ffff, 0x82080d00, 0x001f0000,
- 0x80040540, 0x4803902c, 0x0501f82c, 0x80244800,
- 0x82240580, 0x00000110, 0x05fe07fc, 0x0501f8b0,
- 0x41784800, 0x0501f850, 0x59c80034, 0x82080d00,
- 0x001f0000, 0x82000500, 0x001f0000, 0x80040580,
- 0x05000006, 0x59a80087, 0x80000000, 0x48035087,
- 0x40240000, 0x48035086, 0x80244800, 0x82240580,
- 0x00000110, 0x05fe07f0, 0x80306000, 0x82300580,
- 0x00102afa, 0x05fe07d1, 0x59a80887, 0x800409c0,
- 0x05000004, 0x60100080, 0x60801000, 0x59a81886,
+ 0x41781000, 0x0501f0c4, 0x59c8002c, 0x82000500,
+ 0xffe0ffff, 0x82080d00, 0x001f0000, 0x80040540,
+ 0x4803902c, 0x0501f831, 0x80244800, 0x82081400,
+ 0x02020202, 0x82240580, 0x00000110, 0x05fe07fa,
+ 0x0501f8c5, 0x41784800, 0x50301000, 0x0501f852,
+ 0x59c80034, 0x82080d00, 0x001f0000, 0x82000500,
+ 0x001f0000, 0x80040580, 0x05000006, 0x59a800c7,
+ 0x80000000, 0x480350c7, 0x40240000, 0x480350c6,
+ 0x80244800, 0x82081400, 0x02020202, 0x82240580,
+ 0x00000110, 0x05fe07ee, 0x80306000, 0x82300580,
+ 0x00103b98, 0x05fe07cb, 0x59a808c7, 0x800409c0,
+ 0x05000004, 0x60100080, 0x60801000, 0x59a818c6,
0x59c80803, 0x82040d40, 0x00001f00, 0x48079003,
0x59c8002c, 0x8400052a, 0x4803902c, 0x61f00800,
- 0x05f5f8e6, 0x05f9f7f3, 0x59c8002c, 0x82000500,
+ 0x05edfd02, 0x05f5f703, 0x59c8002c, 0x82000500,
0xffff0000, 0x82080d00, 0x0000ffff, 0x80040540,
- 0x4803902c, 0x480b9028, 0x480b9029, 0x59a80088,
+ 0x4803902c, 0x480b9028, 0x480b9029, 0x59a800c8,
0x90004584, 0x05000007, 0x90000590, 0x05020003,
0x80080920, 0x4807903a, 0x480b902a, 0x480b902b,
0x59c8002d, 0x82000500, 0xfffffc00, 0x80240540,
0x4803902d, 0x61d0b003, 0x59c8002c, 0x82000500,
0x18000000, 0x05000006, 0x8058b040, 0x05fe07fb,
- 0x600c0080, 0x41781000, 0x0501f059, 0x6407902e,
+ 0x600c0080, 0x41781000, 0x0501f06b, 0x6407902e,
0x61d0b003, 0x59c8002e, 0x8c000500, 0x05000005,
- 0x8058b040, 0x05fe07fc, 0x600c0080, 0x0501f050,
+ 0x8058b040, 0x05fe07fc, 0x600c0080, 0x0501f062,
0x1c01f000, 0x41783800, 0x59c8002d, 0x82000500,
0xfffffc00, 0x80240d40, 0x4807902d, 0x61d0b003,
0x59c8002c, 0x82000500, 0x18000000, 0x05000006,
0x8058b040, 0x05fe07fb, 0x600c0080, 0x41781000,
- 0x0501f03f, 0x59c81830, 0x59c80030, 0x800c0d80,
- 0x05fe07fd, 0x80080d80, 0x05000002, 0x801c3800,
- 0x59c82031, 0x59c80031, 0x80100d80, 0x05fe07fd,
- 0x80080d80, 0x05000002, 0x801c3800, 0x59a80088,
- 0x90004584, 0x0500001e, 0x61fc41ff, 0x90000590,
- 0x05020003, 0x42004000, 0x7f7f7f7f, 0x59c82832,
- 0x59c80032, 0x80140d80, 0x05fe07fd, 0x80080d80,
- 0x05000002, 0x801c3800, 0x59c83033, 0x59c80033,
- 0x80180d80, 0x05fe07fd, 0x80080d80, 0x05000002,
+ 0x0501f051, 0x59c81830, 0x59c80030, 0x800c0d80,
+ 0x05fe07fd, 0x80080d80, 0x05000005, 0x4803c857,
+ 0x480bc857, 0x4827c857, 0x801c3800, 0x59c82031,
+ 0x59c80031, 0x80100d80, 0x05fe07fd, 0x80080d80,
+ 0x05000005, 0x4803c857, 0x480bc857, 0x4827c857,
+ 0x801c3800, 0x59a800c8, 0x90004584, 0x05000027,
+ 0x61fc41ff, 0x90000590, 0x05020003, 0x42004000,
+ 0x7f7f7f7f, 0x59c82832, 0x59c80032, 0x80140d80,
+ 0x05fe07fd, 0x80080d80, 0x05000005, 0x4803c857,
+ 0x480bc857, 0x4827c857, 0x801c3800, 0x59c83033,
+ 0x59c80033, 0x80180d80, 0x05fe07fd, 0x80080d80,
+ 0x05000005, 0x4803c857, 0x480bc857, 0x4827c857,
0x801c3800, 0x59c80034, 0x59c80834, 0x80040d80,
0x05fe07fd, 0x80080d80, 0x40200000, 0x80040d00,
- 0x0500000c, 0x801c3800, 0x0501f00a, 0x59c80034,
- 0x59c80834, 0x80040d80, 0x05fe07fd, 0x80080d80,
- 0x82040d00, 0x000000ff, 0x05000002, 0x801c3800,
- 0x801c39c0, 0x05000005, 0x59a80087, 0x801c0400,
- 0x48035087, 0x48275086, 0x1c01f000, 0x48034207,
- 0x48074407, 0x480b4208, 0x480f4408, 0x48134209,
- 0x48174409, 0x59c80003, 0x82000540, 0x00001f00,
- 0x48039003, 0x59c8002c, 0x8400052a, 0x4803902c,
- 0x61f00800, 0x05f5f85d, 0x05f9f76d, 0x42000000,
- 0x00600000, 0x80000040, 0x05fe07ff, 0x1c01f000,
- 0x5a5a5a5a, 0xa5a5a5a5, 0x0505fa97, 0x05020003,
- 0x640b4407, 0x05f9f7a1, 0x42005000, 0x0010b390,
- 0x50285000, 0x482b4000, 0x4200a000, 0x0010b391,
- 0x59a00408, 0x59a01208, 0x900811c0, 0x80081540,
- 0x59a0040a, 0x59a01a0a, 0x900c19c0, 0x800c1d40,
- 0x42024800, 0x0010b391, 0x912cac05, 0x6018b000,
- 0x9050040b, 0x48034001, 0x0539fffe, 0x60180800,
- 0x800400c4, 0x80080c00, 0x48074002, 0x900c0c40,
- 0x48074003, 0x60180800, 0x912c0405, 0x0505fa9c,
- 0x4a01d808, 0x00102b1f, 0x1c01f000, 0x4031d800,
- 0x58ef400a, 0x58ec0002, 0x82000580, 0x00000200,
- 0x05f80772, 0x59a0a001, 0x59a01000, 0x80081040,
- 0x480b4000, 0x05000005, 0x59a01002, 0x59a01803,
- 0x58ee580c, 0x05fdf7e1, 0x42000800, 0x0010b390,
- 0x50040800, 0x48074407, 0x05f9f72a, 0x0505fa5e,
- 0x05020003, 0x640b4407, 0x05f9f768, 0x59a00c0b,
- 0x42000000, 0x0010b390, 0x50000000, 0x80040480,
- 0x05fa1766, 0x8204a400, 0x0010a3b3, 0x5050a000,
- 0x912cac05, 0x6018b000, 0x0539ffce, 0x59a00408,
- 0x59a01208, 0x900811c0, 0x80081540, 0x59a0040a,
- 0x59a01a0a, 0x900c19c0, 0x800c1d40, 0x60180800,
- 0x912c0405, 0x0505f26a, 0x59a00c0b, 0x800409c0,
- 0x05f80752, 0x900404a1, 0x05fa1750, 0x90040491,
- 0x05001002, 0x60400800, 0x59a00209, 0x59a01408,
- 0x900811c0, 0x80081540, 0x59a00208, 0x59a01c07,
- 0x900c19c0, 0x800c1d40, 0x0505fa33, 0x05000005,
- 0x0505fa51, 0x4a01d808, 0x00102b66, 0x1c01f000,
- 0x640b4407, 0x05f9f739, 0x4031d800, 0x58ef400a,
- 0x58ec0002, 0x82000580, 0x00000200, 0x05f8072b,
- 0x59a00c0b, 0x90040491, 0x05001002, 0x60400800,
- 0x59a0040c, 0x59a0120c, 0x900811c0, 0x80081540,
- 0x59a0020a, 0x59a01c09, 0x900c19c0, 0x800c1d40,
- 0x58ec0003, 0x0505fa3e, 0x4a01d808, 0x00102b7d,
- 0x1c01f000, 0x4031d800, 0x58ef400a, 0x58ec0002,
- 0x82000580, 0x00000200, 0x05f80714, 0x59a00c0b,
- 0x90040491, 0x05f816d7, 0x90040c90, 0x59a00209,
- 0x59a01408, 0x900811c0, 0x80081540, 0x59a00208,
- 0x59a01c07, 0x900c19c0, 0x800c1d40, 0xb0081400,
- 0x58ec0003, 0x0505fa20, 0x4a01d808, 0x00102b95,
- 0x1c01f000, 0x4031d800, 0x58ef400a, 0x58ec0002,
- 0x82000580, 0x00000200, 0x05f806fc, 0x59a0040b,
- 0x90000c90, 0x59a0040c, 0x59a0120c, 0x900811c0,
- 0x80081540, 0x59a0020a, 0x59a01c09, 0x900c19c0,
- 0x800c1d40, 0xb0081400, 0x58ec0003, 0x0505fa10,
- 0x4a01d808, 0x00102255, 0x1c01f000, 0x48efc857,
- 0x59a00208, 0x59a01408, 0x900001c0, 0x80081540,
- 0x59a0020a, 0x59a01c0a, 0x900001c0, 0x800c1d40,
- 0x59a00407, 0x48034000, 0x480b4001, 0x480f4002,
- 0x0505f9d9, 0x05020003, 0x640b4407, 0x05f9f6e3,
- 0x60400800, 0x0505f9f4, 0x4a01d808, 0x00102bc1,
- 0x1c01f000, 0x4031d800, 0x58ef400a, 0x58ee580c,
- 0x58ec0002, 0x82000580, 0x00000200, 0x05f806cf,
- 0x48efc857, 0x49a3c857, 0x492fc857, 0x592c0a05,
- 0x80040910, 0x05020003, 0x64674407, 0x05f9f6cf,
- 0x4805d80b, 0x0501f009, 0x4031d800, 0x58ef400a,
- 0x58ec0002, 0x82000580, 0x00000200, 0x05f806bf,
- 0x48efc857, 0x49a3c857, 0x48efc857, 0x49a3c857,
- 0x58ec000b, 0x80000040, 0x0500000d, 0x4801d80b,
- 0x0505f9b1, 0x05020003, 0x640b4407, 0x05f9f6bb,
- 0x60400800, 0x58ec1006, 0x58ec1807, 0x0505f9ca,
- 0x4a01d808, 0x00102bd2, 0x1c01f000, 0x58ee580c,
- 0x48efc857, 0x49a3c857, 0x492fc857, 0x492f3004,
- 0x592c0405, 0x8400055e, 0x48025c05, 0x4a01d808,
- 0x00102bf6, 0x1c01f000, 0x4d2c0000, 0x58ee580c,
- 0x48efc857, 0x49a3c857, 0x492fc857, 0x592c0405,
- 0x8400051e, 0x48025c05, 0x59a00000, 0x59a01001,
- 0x59a01802, 0x80081400, 0x900c1c40, 0x912c0405,
- 0x60400800, 0x5c025800, 0x0505f1b1, 0x8d0c050e,
- 0x05000003, 0x64074407, 0x05f9f694, 0x916c0583,
- 0x05000003, 0x641f4407, 0x05f9f690, 0x59a0320c,
- 0x82183500, 0x000000ff, 0x59a28c07, 0x0505fa69,
- 0x05fa068e, 0x050df9bb, 0x05fa068c, 0x83440580,
- 0x000007fd, 0x05000005, 0x050df95d, 0x05000003,
- 0x64274407, 0x05f9f681, 0x0505f973, 0x05020003,
- 0x640b4407, 0x05f9f67d, 0x801831c0, 0x05000007,
- 0x412c0800, 0x0505f96c, 0x05020003, 0x640b4407,
- 0x05f9f676, 0x40065800, 0x4a025c05, 0x00008000,
- 0x497a5a05, 0x052df984, 0x05020003, 0x640f4407,
- 0x05f9f66e, 0x4a01d808, 0x00102c34, 0x1c01f000,
- 0x592c0006, 0x82000580, 0x01000000, 0x05020003,
- 0x64134407, 0x05f9f665, 0x592c0407, 0x82002d00,
- 0x0000ff00, 0x82000500, 0x000000ff, 0x80000904,
- 0x80040800, 0x90040486, 0x05001002, 0x60140800,
- 0x4c500000, 0x4c540000, 0x4c580000, 0x912ca407,
- 0x4050a800, 0x4004b000, 0x0539ff01, 0x59a00408,
- 0x59a01208, 0x900811c0, 0x80081540, 0x59a0040a,
- 0x59a01a0a, 0x900c19c0, 0x800c1d40, 0x912c0407,
- 0x4c140000, 0x0505f962, 0x5c002800, 0x801429c0,
- 0x05000003, 0x4a01d808, 0x00102c5f, 0x5c00b000,
- 0x5c00a800, 0x5c00a000, 0x1c01f000, 0x4031d800,
- 0x58ef400a, 0x58ee580c, 0x58ec0002, 0x82000580,
- 0x00000200, 0x05f80631, 0x812e59c0, 0x05e80d88,
- 0x592c0007, 0x82000500, 0xff000000, 0x80000904,
- 0x800409c0, 0x05f805ef, 0x4807c857, 0x9004048e,
- 0x05001002, 0x60340800, 0x592e5801, 0x812e59c0,
- 0x05e80d7b, 0x4c500000, 0x4c540000, 0x4c580000,
- 0x912ca406, 0x4050a800, 0x4004b000, 0x0539fed0,
- 0x5c00b000, 0x5c00a800, 0x5c00a000, 0x58ec1006,
- 0x58ec1807, 0x912c0406, 0x0505f135, 0x0505f90e,
- 0x05020003, 0x640b4407, 0x05f9f618, 0x59a00c07,
- 0x82040500, 0x0000ff00, 0x840001c0, 0x90001487,
- 0x05fa1616, 0x0c01f001, 0x00102c95, 0x00102c9b,
- 0x00102ca1, 0x00102ca1, 0x00102ca1, 0x00102ca2,
- 0x00102ca6, 0x60340800, 0x42003800, 0x00102cb7,
- 0x4a034000, 0x0010aee0, 0x0501f00f, 0x60340800,
- 0x42003800, 0x00102cb7, 0x4a034000, 0x0010aeed,
- 0x0501f009, 0x05f9f601, 0x60200800, 0x42003800,
- 0x00102cc4, 0x0501f004, 0x60100800, 0x42003800,
- 0x00102cf9, 0x59a00208, 0x59a01408, 0x900001c0,
- 0x80081540, 0x59a0020a, 0x59a01c0a, 0x900001c0,
- 0x800c1d40, 0x912c0406, 0x4c1c0000, 0x0505f8fe,
- 0x5c003800, 0x481dd808, 0x1c01f000, 0x4031d800,
- 0x58ef400a, 0x58ee580c, 0x58ec0002, 0x82000580,
- 0x00000200, 0x05f805d9, 0x64075019, 0x6034b000,
- 0x59a0a800, 0x912ca406, 0x0539fe89, 0x05f9f599,
- 0x4031d800, 0x58ef400a, 0x58ee580c, 0x58ec0002,
- 0x82000580, 0x00000200, 0x05f805cc, 0x912ca406,
- 0x50500000, 0x82001500, 0x000c0016, 0x05fa05d3,
- 0x90500c03, 0x50040000, 0x90001501, 0x05fa05cf,
- 0x50500000, 0x90001528, 0x05000015, 0x900815a8,
- 0x05fa05ca, 0x80500800, 0x50040000, 0x90001513,
- 0x90081593, 0x05fa05c5, 0x80040800, 0x50040000,
- 0x82001500, 0x00050000, 0x82081580, 0x00050000,
- 0x05fa05be, 0x916c0580, 0x0500000e, 0x599c0019,
- 0x8c00050e, 0x0502000b, 0x05f9f5b8, 0x80500800,
- 0x50040000, 0x90001513, 0x05fa05b4, 0x80040800,
- 0x50040000, 0x82001500, 0x00050000, 0x05fa05af,
- 0x6020b000, 0x4200a800, 0x0010aed8, 0x0539fe19,
- 0x05f9f564, 0x4031d800, 0x58ef400a, 0x58ee580c,
- 0x58ec0002, 0x82000580, 0x00000200, 0x05f80597,
- 0x6010b000, 0x4200a800, 0x0010b38b, 0x912ca406,
- 0x0539fe0c, 0x850e1d50, 0x05f9f556, 0x0505f88a,
- 0x05020003, 0x640b4407, 0x05f9f594, 0x912cac06,
- 0x59a00c07, 0x82040500, 0x0000ff00, 0x840001c0,
- 0x90001488, 0x05fa1591, 0x0c01f001, 0x00102d1b,
- 0x00102d1e, 0x00102d21, 0x00102d21, 0x00102d21,
- 0x00102d22, 0x00102d21, 0x00102d28, 0x4200a000,
- 0x0010aee0, 0x0501f040, 0x4200a000, 0x0010aeed,
- 0x0501f03d, 0x05f9f581, 0x6020b000, 0x40580800,
- 0x4200a000, 0x0010aed8, 0x0539fdea, 0x0501f039,
- 0x59a00a0b, 0x6473420b, 0x9004049c, 0x05f81577,
- 0x603cb000, 0x4178a000, 0x0539fdea, 0x912cac06,
- 0x6010b000, 0x91a8a41f, 0x0539fdde, 0x916c0580,
- 0x05000004, 0x6010b000, 0x91a8a400, 0x0539fdd9,
- 0x912cac12, 0x600cb000, 0x91a8a423, 0x0539fdd5,
- 0x492f4000, 0x0505f854, 0x05020003, 0x640b4407,
- 0x05f9f55e, 0x912cac06, 0x603cb000, 0x4178a000,
- 0x0539fdd4, 0x912cac06, 0x6004b000, 0x91a8a426,
- 0x0539fdc8, 0x912cac07, 0x6010b000, 0x91a8a427,
- 0x0539fdc4, 0x492f4001, 0x59a25800, 0x59a00208,
- 0x59a01408, 0x900001c0, 0x80081540, 0x59a0020a,
- 0x59a01c0a, 0x900001c0, 0x800c1d40, 0x912c0406,
- 0x603c0800, 0x0505f85e, 0x4a01d808, 0x00102d6a,
- 0x1c01f000, 0x6034b000, 0x40580800, 0x0539fdec,
- 0x59a00208, 0x59a01408, 0x900001c0, 0x80081540,
- 0x59a0020a, 0x59a01c0a, 0x900001c0, 0x800c1d40,
- 0x912c0406, 0x0505f04e, 0x4031d800, 0x58ef400a,
- 0x58ec0002, 0x82000580, 0x00000200, 0x05f80527,
- 0x59a25801, 0x58ec1006, 0x58ec1807, 0x912c0406,
- 0x60340800, 0x0505f042, 0x916c0580, 0x05020003,
- 0x641f4407, 0x05f9f525, 0x59a01407, 0x800811c0,
- 0x0502002a, 0x497b4208, 0x05f5fd6f, 0x05000011,
- 0x05f5fd51, 0x64074208, 0x0502000e, 0x4c080000,
- 0x05f5fd5b, 0x5c001000, 0x05020006, 0x640b4208,
- 0x05f5f947, 0x05020007, 0x64134208, 0x0501f005,
- 0x640f4208, 0x05f5f921, 0x05020002, 0x64174208,
- 0x59c40801, 0x82040d00, 0x00018000, 0x90040580,
- 0x05020003, 0x64034407, 0x0501f069, 0x82040580,
- 0x00008000, 0x05020003, 0x64074407, 0x0501f064,
- 0x82040580, 0x00010000, 0x05020003, 0x640f4407,
- 0x0501f05f, 0x82040580, 0x00018000, 0x05ea0c4c,
- 0x64134407, 0x0501f05a, 0x59a8008d, 0x8c000502,
- 0x05000004, 0x60080000, 0x40000800, 0x0501f012,
- 0x59a00208, 0x4c000000, 0x0505f928, 0x5c000000,
- 0x05000005, 0x4c000000, 0x0505f93b, 0x5c000000,
- 0x05020007, 0x90000d84, 0x05000003, 0x90000d82,
- 0x05020003, 0x600c0000, 0x600c1000, 0x48034002,
- 0x59a8083b, 0x4803503b, 0x599c7819, 0x823c7d00,
- 0xffff1fff, 0x800000da, 0x803c7d40, 0x483f3819,
- 0x497b4208, 0x05f5fd28, 0x05000013, 0x05f5fd0a,
- 0x64074208, 0x05020010, 0x4c040000, 0x4c080000,
- 0x05f5fd13, 0x5c001000, 0x5c000800, 0x05020006,
- 0x640b4208, 0x05f5f8fe, 0x05020007, 0x64134208,
- 0x0501f005, 0x640f4208, 0x05f5f8d8, 0x05020002,
- 0x64174208, 0x05f5f8d5, 0x0500000b, 0x05f5f8de,
- 0x05000009, 0x05f5f8e7, 0x05000007, 0x05f5f8f0,
- 0x05000005, 0x05f5f8f9, 0x05000003, 0x4807503b,
- 0x05f9f4be, 0x90080583, 0x05020005, 0x59a00002,
- 0x48035048, 0x640b503b, 0x0501f005, 0x4a035048,
- 0xaabbccdd, 0x90080582, 0x05020011, 0x59c40006,
- 0x84000500, 0x48038806, 0x0519fea1, 0x497b8880,
- 0x42000000, 0x0010b33e, 0x0539fc4f, 0x4803c856,
- 0x850e1d48, 0x4a038808, 0x00000200, 0x6012d800,
- 0x64078805, 0x64075047, 0x05e9fe0c, 0x05f9f45d,
- 0x8d0c050e, 0x05000003, 0x64074407, 0x05f9f49b,
- 0x916c0583, 0x05000003, 0x641f4407, 0x05f9f497,
- 0x59a28c07, 0x59a0320c, 0x82183500, 0x000000ff,
- 0x0505f870, 0x05fa0495, 0x0509ffc2, 0x05fa0493,
- 0x83440580, 0x000007fd, 0x05000005, 0x0509ff64,
- 0x05000003, 0x60240800, 0x05f9f488, 0x0501ff7a,
- 0x05020003, 0x640b4407, 0x05f9f484, 0x497a5a05,
- 0x4a025c05, 0x00008000, 0x0529ffa6, 0x05020003,
- 0x640f4407, 0x05f9f47d, 0x4a01d808, 0x00102e25,
- 0x1c01f000, 0x592c0006, 0x82000d00, 0x0000ffff,
- 0x82000500, 0xffff0000, 0x82000580, 0x01000000,
- 0x05020003, 0x64134407, 0x05f9f470, 0x80040904,
- 0x4c500000, 0x4c540000, 0x4c580000, 0x912ca406,
- 0x4050a800, 0x4004b000, 0x0539fd15, 0x5c00b000,
- 0x5c00a800, 0x5c00a000, 0x59a00208, 0x59a01408,
+ 0x05000012, 0x4803c857, 0x480bc857, 0x4827c857,
+ 0x801c3800, 0x0501f00d, 0x59c80034, 0x59c80834,
+ 0x80040d80, 0x05fe07fd, 0x80080d80, 0x82040d00,
+ 0x000000ff, 0x05000005, 0x4803c857, 0x480bc857,
+ 0x4827c857, 0x801c3800, 0x801c39c0, 0x05000005,
+ 0x59a800c7, 0x801c0400, 0x480350c7, 0x482750c6,
+ 0x1c01f000, 0x48034207, 0x48074407, 0x480b4208,
+ 0x480f4408, 0x48134209, 0x48174409, 0x59c80003,
+ 0x82000540, 0x00001f00, 0x48039003, 0x59c8002c,
+ 0x8400052a, 0x4803902c, 0x61f00800, 0x05edfc67,
+ 0x05f5f66b, 0x42000000, 0x00600000, 0x80000040,
+ 0x05fe07ff, 0x1c01f000, 0x11121111, 0x44454442,
+ 0x0505fc07, 0x05020003, 0x640b4407, 0x05f5f6a0,
+ 0x42005000, 0x0010e511, 0x50285000, 0x482b4000,
+ 0x4200a000, 0x0010e512, 0x59a00408, 0x59a01208,
+ 0x900811c0, 0x80081540, 0x59a0040a, 0x59a01a0a,
+ 0x900c19c0, 0x800c1d40, 0x42024800, 0x0010e512,
+ 0x912cac08, 0x6018b000, 0x9050040d, 0x48034001,
+ 0x0549fcf7, 0x60180800, 0x800400c4, 0x80080c00,
+ 0x48074002, 0x900c0c40, 0x48074003, 0x60180800,
+ 0x912c0408, 0x0505fc0f, 0x4a01d809, 0x00103bbd,
+ 0x1c01f000, 0x0501fa9e, 0x05f40674, 0x59a0a001,
+ 0x59a01000, 0x80081040, 0x480b4000, 0x05000005,
+ 0x59a01002, 0x59a01803, 0x58ee580d, 0x05fdf7e5,
+ 0x42000800, 0x0010e511, 0x50040800, 0x48074407,
+ 0x05f5f62c, 0x0505fbd2, 0x05020003, 0x640b4407,
+ 0x05f5f66b, 0x59a00c0b, 0x42000000, 0x0010e511,
+ 0x50000000, 0x80040480, 0x05f6166a, 0x8204a400,
+ 0x0010d17b, 0x5050a000, 0x912cac08, 0x6018b000,
+ 0x0549fccb, 0x59a00408, 0x59a01208, 0x900811c0,
+ 0x80081540, 0x59a0040a, 0x59a01a0a, 0x900c19c0,
+ 0x800c1d40, 0x60180800, 0x912c0408, 0x0505f3e1,
+ 0x59a00c0b, 0x800409c0, 0x05f40656, 0x900404a1,
+ 0x05f61654, 0x90040491, 0x05001002, 0x60400800,
+ 0x59a00209, 0x59a01408, 0x900811c0, 0x80081540,
+ 0x59a00208, 0x59a01c07, 0x900c19c0, 0x800c1d40,
+ 0x0505fba7, 0x05000005, 0x0505fbc5, 0x4a01d809,
+ 0x00103c00, 0x1c01f000, 0x640b4407, 0x05f5f63c,
+ 0x0501fa5b, 0x05f40631, 0x59a00c0b, 0x90040491,
+ 0x05001002, 0x60400800, 0x59a0040c, 0x59a0120c,
+ 0x900811c0, 0x80081540, 0x59a0020a, 0x59a01c09,
+ 0x900c19c0, 0x800c1d40, 0x58ec0003, 0x0505fbb9,
+ 0x4a01d809, 0x00103c13, 0x1c01f000, 0x0501fa48,
+ 0x05f4061e, 0x59a00c0b, 0x90040491, 0x05f415e1,
+ 0x90040c90, 0x59a00209, 0x59a01408, 0x900811c0,
+ 0x80081540, 0x59a00208, 0x59a01c07, 0x900c19c0,
+ 0x800c1d40, 0xb0081400, 0x58ec0003, 0x0505fb9c,
+ 0x4a01d809, 0x00103c27, 0x1c01f000, 0x0501fa34,
+ 0x05f4060a, 0x59a0040b, 0x90000c90, 0x59a0040c,
+ 0x59a0120c, 0x900811c0, 0x80081540, 0x59a0020a,
+ 0x59a01c09, 0x900c19c0, 0x800c1d40, 0xb0081400,
+ 0x58ec0003, 0x0505fb93, 0x4a01d809, 0x001029f5,
+ 0x1c01f000, 0x48efc857, 0x59a00208, 0x59a01408,
+ 0x900001c0, 0x80081540, 0x59a0020a, 0x59a01c0a,
+ 0x900001c0, 0x800c1d40, 0x59a00407, 0x48034000,
+ 0x480b4001, 0x480f4002, 0x0505fb59, 0x05020003,
+ 0x640b4407, 0x05f5f5f2, 0x60400800, 0x0505fb74,
+ 0x4a01d809, 0x00103c4f, 0x1c01f000, 0x0501fa0c,
+ 0x05f405e2, 0x58ee580d, 0x48efc857, 0x49a3c857,
+ 0x492fc857, 0x592c0a08, 0x80040910, 0x05020003,
+ 0x64674407, 0x05f5f5e2, 0x4805d80c, 0x0501f005,
+ 0x0501f9ff, 0x05f405d5, 0x48efc857, 0x49a3c857,
+ 0x48efc857, 0x49a3c857, 0x58ec000c, 0x80000040,
+ 0x0500000d, 0x4801d80c, 0x0505fb39, 0x05020003,
+ 0x640b4407, 0x05f5f5d2, 0x60400800, 0x58ec1007,
+ 0x58ec1808, 0x0505fb52, 0x4a01d809, 0x00103c5c,
+ 0x1c01f000, 0x58ee580d, 0x48efc857, 0x49a3c857,
+ 0x492fc857, 0x492f3000, 0x592c0408, 0x8400055e,
+ 0x48025c08, 0x4a01d809, 0x00103c7c, 0x1c01f000,
+ 0x4d2c0000, 0x58ee580d, 0x48efc857, 0x49a3c857,
+ 0x492fc857, 0x592c0408, 0x8400051e, 0x48025c08,
+ 0x59a00000, 0x59a01001, 0x59a01802, 0x80081400,
+ 0x900c1c40, 0x912c0408, 0x60400800, 0x5c025800,
+ 0x0505f33c, 0x8d0c050e, 0x05000003, 0x64074407,
+ 0x05f5f5ab, 0x916c0583, 0x05000003, 0x641f4407,
+ 0x05f5f5a7, 0x59a0320c, 0x82183500, 0x000000ff,
+ 0x59a28c07, 0x0505fbec, 0x05f605a6, 0x050dfdde,
+ 0x05f605a4, 0x83440580, 0x000007fd, 0x05000005,
+ 0x050dfd85, 0x05000003, 0x64274407, 0x05f5f598,
+ 0x0505fafb, 0x05020003, 0x640b4407, 0x05f5f594,
+ 0x801831c0, 0x05000007, 0x412c0800, 0x0505faf4,
+ 0x05020003, 0x640b4407, 0x05f5f58d, 0x40065800,
+ 0x4a025c08, 0x00008000, 0x497a5a08, 0x0539f8cf,
+ 0x05020003, 0x640f4407, 0x05f5f585, 0x4a01d809,
+ 0x00103cba, 0x1c01f000, 0x592c0009, 0x82000580,
+ 0x01000000, 0x05020003, 0x64134407, 0x05f5f57c,
+ 0x592c040a, 0x82002d00, 0x0000ff00, 0x82000500,
+ 0x000000ff, 0x80000904, 0x80040800, 0x90040486,
+ 0x05001002, 0x60140800, 0x4c500000, 0x4c540000,
+ 0x4c580000, 0x912ca40a, 0x4050a800, 0x4004b000,
+ 0x0549fc12, 0x59a00408, 0x59a01208, 0x900811c0,
+ 0x80081540, 0x59a0040a, 0x59a01a0a, 0x900c19c0,
+ 0x800c1d40, 0x912c040a, 0x4c140000, 0x0505faed,
+ 0x5c002800, 0x801429c0, 0x05000003, 0x4a01d809,
+ 0x00103ce5, 0x5c00b000, 0x5c00a800, 0x5c00a000,
+ 0x1c01f000, 0x0501f976, 0x05f4054c, 0x58ee580d,
+ 0x812e59c0, 0x05e408f1, 0x592c000a, 0x82000500,
+ 0xff000000, 0x80000904, 0x800409c0, 0x05f40509,
+ 0x4807c857, 0x9004048e, 0x05001002, 0x60340800,
+ 0x592e5801, 0x812e59c0, 0x05e408e4, 0x4c500000,
+ 0x4c540000, 0x4c580000, 0x912ca409, 0x4050a800,
+ 0x4004b000, 0x0549fbe5, 0x5c00b000, 0x5c00a800,
+ 0x5c00a000, 0x58ec1007, 0x58ec1808, 0x912c0409,
+ 0x0505f2c4, 0x0505fa9a, 0x05020003, 0x640b4407,
+ 0x05f5f533, 0x59a00c07, 0x82040500, 0x0000ff00,
+ 0x840001c0, 0x9000148e, 0x05f61532, 0x0c01f001,
+ 0x00103d1e, 0x00103d24, 0x00103d2a, 0x00103d2b,
+ 0x00103d2f, 0x00103d49, 0x00103d4d, 0x00103d36,
+ 0x00103d3b, 0x00103d41, 0x00103d2a, 0x00103d2a,
+ 0x00103d2a, 0x00103d2a, 0x60340800, 0x42003800,
+ 0x00103d76, 0x4a034000, 0x0010dd46, 0x0501f02d,
+ 0x60340800, 0x42003800, 0x00103d76, 0x4a034000,
+ 0x0010dd53, 0x0501f027, 0x05f5f516, 0x0505fc9e,
+ 0x05f60514, 0x497b501c, 0x05f5f4ca, 0x0505fc9a,
+ 0x05f60510, 0x59a8101b, 0x800811c0, 0x05f404c5,
+ 0x480b501c, 0x05f5f4c3, 0x0505fc93, 0x05f60509,
+ 0x497b500f, 0x497b5010, 0x05f5f4be, 0x0505fc8e,
+ 0x05f60504, 0x6403500f, 0x4a035010, 0x000927c0,
+ 0x05f5f4b8, 0x59a00c07, 0x82040d00, 0x000000ff,
+ 0x05f404fc, 0x48074000, 0x42003800, 0x00103d57,
+ 0x0501f008, 0x60200800, 0x42003800, 0x00103d7f,
+ 0x0501f004, 0x60100800, 0x42003800, 0x00103db0,
+ 0x0501f902, 0x912c0409, 0x4c1c0000, 0x0505fa6c,
+ 0x5c003800, 0x481dd809, 0x1c01f000, 0x0501f904,
+ 0x05f404da, 0x58ee580d, 0x59a0b000, 0x912ca409,
+ 0x50500800, 0x82040580, 0x00110307, 0x0502000f,
+ 0x82041500, 0x000000ff, 0x90080488, 0x0502100b,
+ 0x4200a800, 0x0010dc14, 0x80081840, 0x8050a000,
+ 0x50500000, 0x4400a800, 0x8054a800, 0x800c1840,
+ 0x05fe07fb, 0x0501f005, 0x48074407, 0x900409c0,
+ 0x48074208, 0x05f5f4cf, 0x8050a000, 0x8058b482,
+ 0x05fe07e8, 0x05f5f483, 0x0501f8e5, 0x05f404bb,
+ 0x58ee580d, 0x64075047, 0x6034b000, 0x59a0a800,
+ 0x912ca409, 0x0549fb65, 0x05f5f47a, 0x0501f8dc,
+ 0x05f404b2, 0x58ee580d, 0x912ca409, 0x50500000,
+ 0x82001500, 0x000c0016, 0x05f604ba, 0x90500c03,
+ 0x50040000, 0x90001501, 0x05f604b6, 0x50500000,
+ 0x90001528, 0x05000015, 0x900815a8, 0x05f604b1,
+ 0x80500800, 0x50040000, 0x90001513, 0x90081593,
+ 0x05f604ac, 0x80040800, 0x50040000, 0x82001500,
+ 0x00050000, 0x82081580, 0x00050000, 0x05f604a5,
+ 0x916c0580, 0x0500000e, 0x599c0019, 0x8c00050e,
+ 0x0502000b, 0x05f5f49f, 0x80500800, 0x50040000,
+ 0x90001513, 0x05f6049b, 0x80040800, 0x50040000,
+ 0x82001500, 0x00050000, 0x05f60496, 0x6020b000,
+ 0x4200a800, 0x0010dd3e, 0x0549faf9, 0x05f5f449,
+ 0x0501f8ab, 0x05f40481, 0x58ee580d, 0x6010b000,
+ 0x4200a800, 0x0010e50c, 0x912ca409, 0x0549faf0,
+ 0x850e1d50, 0x05f5f43f, 0x0505f9e5, 0x05020003,
+ 0x640b4407, 0x05f5f47e, 0x912cac09, 0x59a00c07,
+ 0x82040500, 0x0000ff00, 0x840001c0, 0x9000148e,
+ 0x05f6147c, 0x0c01f001, 0x00103dd4, 0x00103dd7,
+ 0x00103dda, 0x00103ddb, 0x00103dee, 0x00103e10,
+ 0x00103dda, 0x00103e16, 0x00103df5, 0x00103e06,
+ 0x00103dda, 0x00103dda, 0x00103dda, 0x00103dda,
+ 0x4200a000, 0x0010dd46, 0x0501f06e, 0x4200a000,
+ 0x0010dd53, 0x0501f06b, 0x05f5f466, 0x0505fbee,
+ 0x05f60464, 0x59a8041d, 0x48034407, 0x59a8021d,
+ 0x48034208, 0x59a8041e, 0x48034408, 0x59a8021e,
+ 0x4803420a, 0x59a8041b, 0x4803440a, 0x59a8021b,
+ 0x4803420b, 0x59a8041c, 0x4803440b, 0x59a8021c,
+ 0x4803420c, 0x05f5f40b, 0x0505fbdb, 0x05f60451,
+ 0x0501f862, 0x60600800, 0x42000000, 0x0010dc23,
+ 0x0505f1d4, 0x0505fbd4, 0x05000002, 0x05f5f449,
+ 0x59a80411, 0x48034407, 0x59a80211, 0x48034208,
+ 0x59a80412, 0x48034408, 0x59a80212, 0x4803420a,
+ 0x6403440a, 0x6403420b, 0x6427440b, 0x4a03420c,
+ 0x000027c0, 0x05f5f3f3, 0x0505fbc3, 0x05000002,
+ 0x05f40438, 0x0501f849, 0x61ec0801, 0x800400c4,
+ 0x48034407, 0x42000000, 0x00107dd1, 0x0505f1b9,
+ 0x6020b000, 0x40580800, 0x4200a000, 0x0010dd3e,
+ 0x0549fa93, 0x0501f032, 0x59a00a0b, 0x6473420b,
+ 0x9004049c, 0x05f41427, 0x603cb000, 0x4178a000,
+ 0x0549fa93, 0x912cac09, 0x6010b000, 0xb1a8a40d,
+ 0x0549fa87, 0x916c0580, 0x05000004, 0x6010b000,
+ 0x91a8a400, 0x0549fa82, 0x912cac15, 0x600cb000,
+ 0xb1a8a411, 0x0549fa7e, 0x492f4000, 0x0505f974,
+ 0x05020003, 0x640b4407, 0x05f5f40d, 0x912cac09,
+ 0x603cb000, 0x4178a000, 0x0549fa7d, 0x912cac09,
+ 0x6004b000, 0xb1a8a414, 0x0549fa71, 0x912cac0a,
+ 0x6010b000, 0xb1a8a415, 0x0549fa6d, 0x0501f817,
+ 0x492f4001, 0x59a25800, 0x912c0409, 0x603c0800,
+ 0x0505f988, 0x4a01d809, 0x00103e4a, 0x1c01f000,
+ 0x6034b000, 0x40580800, 0x0549fa9c, 0x0501f80b,
+ 0x912c0409, 0x0505f17f, 0x0501f811, 0x05f403e7,
+ 0x59a25801, 0x58ec1007, 0x58ec1808, 0x912c0409,
+ 0x60340800, 0x0505f177, 0x59a00208, 0x59a01408,
0x900001c0, 0x80081540, 0x59a0020a, 0x59a01c0a,
- 0x900001c0, 0x800c1d40, 0x912c0406, 0x0501f774,
- 0x60000020, 0x50000000, 0x82000480, 0x25320001,
- 0x05020007, 0x4a03c014, 0x00400040, 0x4a03c013,
- 0x00400000, 0x6041d04e, 0x0515fff3, 0x496fc857,
- 0x916c0580, 0x05000003, 0x646b4407, 0x05f9f44b,
- 0x050dfcde, 0x05060fcf, 0x60800800, 0x59a00408,
+ 0x900001c0, 0x800c1d40, 0x1c01f000, 0x4031d800,
+ 0x58ef400b, 0x58ec0002, 0x82000580, 0x00000200,
+ 0x1c01f000, 0x59a00407, 0x80000d40, 0x05020003,
+ 0x48072832, 0x05f5f393, 0x8d0c050e, 0x05020007,
+ 0x4c000000, 0x0511fa45, 0x5c000000, 0x05000003,
+ 0x645b4407, 0x05f5f3ce, 0x82000c80, 0x00001000,
+ 0x05f613d0, 0x90000c82, 0x05f413ce, 0x800008c6,
+ 0x80040c00, 0x80040c00, 0x48072832, 0x59a800af,
+ 0x84000500, 0x59a00a08, 0x8c040500, 0x05000002,
+ 0x84000540, 0x480350af, 0x05f5f37a, 0x8d0c050e,
+ 0x05020003, 0x0511fa2d, 0x0502000c, 0x59a800af,
+ 0x8c000500, 0x05020005, 0x4a03c014, 0x00400040,
+ 0x4a03c013, 0x00400040, 0x59a800af, 0x8400054a,
+ 0x480350af, 0x05e1ff4d, 0x1c01f000, 0x916c0580,
+ 0x05020003, 0x641f4407, 0x05f5f3a9, 0x59a01407,
+ 0x800811c0, 0x0502002a, 0x497b4208, 0x05f1f8e9,
+ 0x05000011, 0x05f1f8ce, 0x64074208, 0x0502000e,
+ 0x4c080000, 0x05f1f8d5, 0x5c001000, 0x05020006,
+ 0x640b4208, 0x05edfcd3, 0x05020007, 0x64134208,
+ 0x0501f005, 0x640f4208, 0x05edfcbc, 0x05020002,
+ 0x64174208, 0x59c40801, 0x82040d00, 0x00018000,
+ 0x90040580, 0x05020003, 0x64034407, 0x0501f069,
+ 0x82040580, 0x00008000, 0x05020003, 0x64074407,
+ 0x0501f064, 0x82040580, 0x00010000, 0x05020003,
+ 0x640f4407, 0x0501f05f, 0x82040580, 0x00018000,
+ 0x05e20f1e, 0x64134407, 0x0501f05a, 0x59a800d1,
+ 0x8c000502, 0x05000004, 0x60080000, 0x40000800,
+ 0x0501f012, 0x59a00208, 0x4c000000, 0x0505fa23,
+ 0x5c000000, 0x05000005, 0x4c000000, 0x0505fa36,
+ 0x5c000000, 0x05020007, 0x90000d84, 0x05000003,
+ 0x90000d82, 0x05020003, 0x600c0000, 0x600c1000,
+ 0x48034002, 0x59a80869, 0x48035069, 0x599c7819,
+ 0x823c7d00, 0xffff1fff, 0x800000da, 0x803c7d40,
+ 0x483f3819, 0x497b4208, 0x05f1f8a2, 0x05000013,
+ 0x05f1f887, 0x64074208, 0x05020010, 0x4c040000,
+ 0x4c080000, 0x05f1f88d, 0x5c001000, 0x5c000800,
+ 0x05020006, 0x640b4208, 0x05edfc8a, 0x05020007,
+ 0x64134208, 0x0501f005, 0x640f4208, 0x05edfc73,
+ 0x05020002, 0x64174208, 0x05edfc88, 0x0500000b,
+ 0x05edfc6e, 0x05000009, 0x05edfc72, 0x05000007,
+ 0x05edfc76, 0x05000005, 0x05edfc7a, 0x05000003,
+ 0x48075069, 0x05f5f343, 0x90080583, 0x05020005,
+ 0x59a00002, 0x48035076, 0x640b5069, 0x0501f005,
+ 0x4a035076, 0xaabbccdd, 0x90080582, 0x05020011,
+ 0x59c40006, 0x84000500, 0x48038806, 0x0525f94a,
+ 0x497b8880, 0x42000000, 0x0010e4bc, 0x0549f8cd,
+ 0x4803c856, 0x850e1d48, 0x4a038808, 0x00000200,
+ 0x6012d800, 0x64078805, 0x64075075, 0x05e5f8e7,
+ 0x05f5f2e0, 0x8d0c050e, 0x05000003, 0x64074407,
+ 0x05f5f31f, 0x916c0583, 0x05000003, 0x641f4407,
+ 0x05f5f31b, 0x59a28c07, 0x59a0320c, 0x82183500,
+ 0x000000ff, 0x0505f960, 0x05f6031a, 0x050dfb52,
+ 0x05f60318, 0x83440580, 0x000007fd, 0x05000005,
+ 0x050dfaf9, 0x05000003, 0x60240800, 0x05f5f30c,
+ 0x0505f86f, 0x05020003, 0x640b4407, 0x05f5f308,
+ 0x497a5a08, 0x4a025c08, 0x00008000, 0x0535fe5e,
+ 0x05020003, 0x640f4407, 0x05f5f301, 0x4a01d809,
+ 0x00103f3e, 0x1c01f000, 0x592c0009, 0x82000d00,
+ 0x0000ffff, 0x82000500, 0xffff0000, 0x82000580,
+ 0x01000000, 0x05020003, 0x64134407, 0x05f5f2f4,
+ 0x80040904, 0x4c500000, 0x4c540000, 0x4c580000,
+ 0x912ca409, 0x4050a800, 0x4004b000, 0x0549f993,
+ 0x5c00b000, 0x5c00a800, 0x5c00a000, 0x59a00208,
+ 0x59a01408, 0x900001c0, 0x80081540, 0x59a0020a,
+ 0x59a01c0a, 0x900001c0, 0x800c1d40, 0x912c0409,
+ 0x0505f06c, 0x60000020, 0x50000000, 0x82000480,
+ 0x25320001, 0x0502000a, 0x599c1019, 0x8c08053c,
+ 0x05020005, 0x4a03c014, 0x00400040, 0x4a03c013,
+ 0x00400000, 0x6041d04e, 0x051df89b, 0x496fc857,
+ 0x916c0580, 0x05000003, 0x646b4407, 0x05f5f2cc,
+ 0x0511f93e, 0x050a0996, 0x60800800, 0x59a00408,
0x59a01208, 0x900811c0, 0x80081540, 0x59a0040a,
0x59a01a0a, 0x900c19c0, 0x800c1d40, 0x419c0000,
- 0x49a3c857, 0x0501ff50, 0x4a01d808, 0x00102e65,
- 0x1c01f000, 0x4833c857, 0x4031d800, 0x58ef400a,
- 0x58ec0002, 0x82000580, 0x00000200, 0x05f8042b,
- 0x599c0200, 0x800001c0, 0x05f80434, 0x59a8008d,
- 0x8c000502, 0x05000011, 0x599c0017, 0x84000508,
- 0x48033817, 0x599c0019, 0x82000500, 0xffff1fff,
- 0x82000540, 0x00004000, 0x48033819, 0x599c0018,
- 0x84000510, 0x84000516, 0x82000500, 0xffffffcf,
- 0x90000560, 0x0501f004, 0x8c000504, 0x05000003,
- 0x599c0018, 0x48033818, 0x052dfefa, 0x850e1d20,
+ 0x49a3c857, 0x0505f842, 0x4a01d809, 0x00103f81,
+ 0x1c01f000, 0x4833c857, 0x05fdfed9, 0x05f402af,
+ 0x59a00407, 0x8c000500, 0x05000061, 0x59a0020e,
+ 0x80000104, 0x05f402b7, 0x90000c95, 0x05f612b5,
+ 0x40000800, 0x59a0040c, 0x59a0120c, 0x900811c0,
+ 0x80081540, 0x59a0040d, 0x59a01a0d, 0x900c19c0,
+ 0x800c1d40, 0x42000000, 0x0010dd2a, 0x49a3c857,
+ 0x0505f827, 0x4a01d809, 0x00103f9c, 0x1c01f000,
+ 0x05fdfebf, 0x05f40295, 0x42000800, 0x0010dd2a,
+ 0x58040200, 0x800001c0, 0x05f4029e, 0x599c0017,
+ 0x8c000508, 0x05000042, 0x58040204, 0x8c000500,
+ 0x0500003f, 0x599c0202, 0x800001c0, 0x05f40295,
+ 0x599c141e, 0x80000000, 0x80080480, 0x05f61291,
+ 0x42001000, 0x00110228, 0x4a001008, 0x00000112,
+ 0x6428120b, 0x4978140b, 0x49781011, 0x4a00140e,
+ 0x00000101, 0x58040005, 0x48001015, 0x4a00120a,
+ 0x0000ffff, 0x4a00100d, 0x00111ad0, 0x58040006,
+ 0x48001016, 0x58040007, 0x48001017, 0x4a001013,
+ 0xdeadbeff, 0x4a001001, 0x00110240, 0x42001000,
+ 0x00110240, 0x48081000, 0x48081001, 0x64281208,
+ 0x58040005, 0x48001009, 0x4800100c, 0x4800100f,
+ 0x48001012, 0x48001015, 0x58040006, 0x4800100a,
+ 0x4800100d, 0x48001010, 0x48001013, 0x48001016,
+ 0x58040007, 0x4800100b, 0x4800100e, 0x48001011,
+ 0x48001014, 0x48001017, 0x42001000, 0x00111ad0,
+ 0x4a001009, 0x00110228, 0x4a001013, 0xdeadbeff,
+ 0x64841008, 0x64101203, 0x64181407, 0x599c0200,
+ 0x800001c0, 0x05f40257, 0x59a800d1, 0x8c000502,
+ 0x05000011, 0x599c0017, 0x84000508, 0x48033817,
+ 0x599c0019, 0x82000500, 0xffff1fff, 0x82000540,
+ 0x00004000, 0x48033819, 0x599c0018, 0x84000510,
+ 0x84000516, 0x82000500, 0xffffffcf, 0x90000560,
+ 0x0501f004, 0x8c000504, 0x05000004, 0x599c0018,
+ 0x84000514, 0x48033818, 0x0539fd97, 0x850e1d20,
0x599c0017, 0x8c000508, 0x05000003, 0x850e1d60,
- 0x0501f006, 0x8c00050a, 0x05fa0414, 0x59a80806,
- 0x8c040516, 0x05fa0411, 0x42024800, 0x0010b391,
- 0x64124a00, 0x42000800, 0x0010b390, 0x64040800,
- 0x42000800, 0x0010b38f, 0x46000800, 0x0000ffff,
+ 0x0501f006, 0x8c00050a, 0x05f60236, 0x59a80806,
+ 0x8c040516, 0x05f60233, 0x42024800, 0x0010e512,
+ 0x64124a00, 0x42000800, 0x0010e511, 0x64040800,
+ 0x42000800, 0x0010e510, 0x46000800, 0x0000ffff,
0x59240c00, 0x84040d46, 0x599c1017, 0x8c08050a,
0x05020002, 0x84040d48, 0x8c080508, 0x05020002,
0x84040d4a, 0x84040d4c, 0x48064c00, 0x59240a00,
- 0x84040d40, 0x48064a00, 0x4803c857, 0x8c000504,
+ 0x84040d40, 0x48064a00, 0x0505faed, 0x05000017,
+ 0x59c40801, 0x82040d40, 0x00004000, 0x48078801,
+ 0x64c378e4, 0x640752cd, 0x640752cc, 0x640b50ce,
+ 0x4a02480b, 0x0f000001, 0x4c000000, 0x4c500000,
+ 0x60000001, 0x4200a000, 0x001105f2, 0x4600a000,
+ 0xffffffff, 0x8050a000, 0x80000040, 0x05fe07fc,
+ 0x5c00a000, 0x5c000000, 0x4803c857, 0x8c000504,
0x05020004, 0x59c408a3, 0x84040d7a, 0x480788a3,
0x8c000502, 0x05020004, 0x59c408a3, 0x84040d08,
0x480788a3, 0x599c0c02, 0x8c000500, 0x0502000b,
@@ -15822,68 +4153,99 @@ static const uint32_t isp_2500_multi_risc_code[] = {
0x84000542, 0x840411c0, 0x80081540, 0x480a4c00,
0x5c000000, 0x0501f008, 0x4c000000, 0x59240400,
0x84000540, 0x840411c0, 0x80081540, 0x480a4c00,
- 0x5c000000, 0xb00414bf, 0x05fa13d8, 0x82041400,
- 0x001020b6, 0x50081000, 0x82081500, 0x000000ff,
+ 0x5c000000, 0xb00414bf, 0x05f611e2, 0x82041400,
+ 0x00102853, 0x50081000, 0x82081500, 0x000000ff,
0x48064a08, 0x480a4805, 0x480a4c08, 0x8c000500,
- 0x05020004, 0x480b500f, 0x600c0800, 0x0519fa97,
- 0x0501ff76, 0x05000004, 0x59240400, 0x84000544,
+ 0x05020004, 0x480b503d, 0x600c0800, 0x0521fcd6,
+ 0x0501ffeb, 0x05000004, 0x59240400, 0x84000544,
0x48024c00, 0x599c0019, 0x8c000506, 0x05000003,
0x4a03b805, 0x90000000, 0x8c00050e, 0x05020005,
- 0x4c000000, 0x0505f9d5, 0x5c000000, 0x05fa03bb,
+ 0x4c000000, 0x0505fad0, 0x5c000000, 0x05f601c5,
0x90000530, 0x05000003, 0x80000108, 0x0501f002,
0x60080000, 0x48039040, 0x60080800, 0x82000400,
- 0x001030ab, 0x50001000, 0x0519fa7c, 0x599c0201,
- 0x82000c80, 0x00000100, 0x05f813ac, 0x82000c80,
- 0x00000841, 0x05fa13a9, 0x90000507, 0x05fa03a7,
- 0x599c0401, 0x80000540, 0x05f803a4, 0x59a8088d,
+ 0x001042be, 0x50001000, 0x0521fcbb, 0x599c0201,
+ 0x82000c80, 0x00000100, 0x05f411b6, 0x82000c80,
+ 0x00000841, 0x05f611b3, 0x90000507, 0x05f601b1,
+ 0x599c0401, 0x80000540, 0x05f401ae, 0x59a808d1,
0x8c040502, 0x05000005, 0x90000c90, 0x05001003,
0x60400000, 0x48033c01, 0x850e1d52, 0x82000580,
0x0000ffff, 0x05000002, 0x850e1d12, 0x599c0409,
- 0x599c0c07, 0x80040c80, 0x05fa1394, 0x80000040,
- 0x05f80392, 0x599c0209, 0x599c0a07, 0x80040c80,
- 0x05fa138e, 0x80000040, 0x05f8038c, 0x91a81423,
+ 0x599c0c07, 0x80040c80, 0x05f6119e, 0x80000040,
+ 0x05f4019c, 0x599c0209, 0x599c0a07, 0x80040c80,
+ 0x05f61198, 0x80000040, 0x05f40196, 0xb1a81411,
0x599c0818, 0x8c040510, 0x05020005, 0x50080000,
0x8400053e, 0x44001000, 0x0501f00b, 0x59a80006,
0x8400054a, 0x48035006, 0x4a0370e4, 0x0000c000,
0x4c040000, 0x59c408a3, 0x84040d3a, 0x480788a3,
0x5c000800, 0x8c040512, 0x05020009, 0x50080000,
0x82000500, 0xfffff5ff, 0x44001000, 0x80081000,
- 0x50080000, 0x8400053e, 0x44001000, 0x050dffa0,
- 0x050df97b, 0x599c0201, 0x48035004, 0x05f1fbec,
- 0x599c020a, 0x800001c0, 0x05000003, 0x48035035,
- 0x0501f003, 0x4a035035, 0x000000c8, 0x8d0c0520,
- 0x05000003, 0x0515ff40, 0x417a5000, 0x599c0003,
+ 0x50080000, 0x8400053e, 0x44001000, 0x59e00002,
+ 0x84000568, 0x4803c002, 0x05e5f8a7, 0x42000000,
+ 0x0010dd60, 0x452c0000, 0x64073002, 0x412de000,
+ 0x492fc840, 0x644fc842, 0x05011000, 0x599c0018,
+ 0x8c00052e, 0x05000012, 0x850e1d16, 0x59a810d2,
+ 0x90081493, 0x0500100c, 0x0500000b, 0x480b50d2,
+ 0x480b50d3, 0x59a810d4, 0x9008148a, 0x05001004,
+ 0x05000003, 0x480b50d4, 0x0501f005, 0x60041000,
+ 0x05fdf7fd, 0x60041000, 0x05fdf7f5, 0x600000b8,
+ 0x599c1407, 0x48080100, 0x480a5a0c, 0x48025a00,
+ 0x492e5801, 0x599c000b, 0x48025808, 0x599c000c,
+ 0x48025809, 0x64065c10, 0x599c0409, 0x48025c0a,
+ 0x05e5f87d, 0x42000000, 0x0010de60, 0x452c0000,
+ 0x64073008, 0x492fc840, 0x642bc842, 0x05011000,
+ 0x412ee800, 0x492e5800, 0x492de012, 0x4a025803,
+ 0xffff0000, 0x60040000, 0x8d0c0516, 0x05020006,
+ 0x599c0211, 0x82001480, 0x00000100, 0x05f61139,
+ 0x599c1018, 0x48025a09, 0x600000bc, 0x599c1207,
+ 0x48080000, 0x480a5c09, 0x48025c08, 0x599c000d,
+ 0x48025806, 0x599c000e, 0x48025807, 0x599c0209,
+ 0x48025a08, 0x599c0818, 0x8c040532, 0x05000009,
+ 0x6405e20a, 0x599c021a, 0x4801e411, 0x42000000,
+ 0x00102ecb, 0x50000000, 0x4801e210, 0x0501f009,
+ 0x599c0a1a, 0x90040486, 0x05001002, 0x60040800,
+ 0x82040c00, 0x00102ec8, 0x50040000, 0x4801e210,
+ 0x599c0818, 0x599c141a, 0x8c040526, 0x05000002,
+ 0x8408157e, 0x8c040524, 0x05000002, 0x8408157c,
+ 0x8c040528, 0x05000003, 0x82081540, 0x20000000,
+ 0x4809e00b, 0x480a5801, 0x480bb01f, 0x480bb11f,
+ 0x599c0211, 0x82000400, 0x0010df60, 0x44080000,
+ 0x42000000, 0x0010e389, 0x50000000, 0x48080006,
+ 0x42000000, 0x0010e388, 0x50000000, 0x48080006,
+ 0x0511fb2e, 0x050dfca4, 0x599c0201, 0x48035004,
+ 0x05e9fe84, 0x599c020a, 0x800001c0, 0x05000003,
+ 0x48035063, 0x0501f003, 0x4a035063, 0x000000c8,
+ 0x8d0c0520, 0x05000006, 0x599c0413, 0x90000c82,
+ 0x05f410ec, 0x051dfd7e, 0x417a5000, 0x599c0003,
0x599c0804, 0x9c0001c0, 0x9c0409c0, 0x48024801,
0x48064802, 0x48035002, 0x48075003, 0x599c1017,
0x8c08051c, 0x05000006, 0x599c0005, 0x599c0806,
0x9c0001c0, 0x9c0409c0, 0x0501f003, 0x82000500,
0xf0ffffff, 0x48024803, 0x48064804, 0x48035000,
- 0x48075001, 0x42001000, 0x0010aee0, 0x48001000,
- 0x48041001, 0x42001000, 0x0010aeed, 0x48001000,
- 0x48041001, 0x59a00207, 0xb0000588, 0x050200b8,
- 0x0501fe2d, 0x05020003, 0x640b4407, 0x05f9f337,
+ 0x48075001, 0x42001000, 0x0010dd46, 0x48001000,
+ 0x48041001, 0x42001000, 0x0010dd53, 0x48001000,
+ 0x48041001, 0x59a00207, 0xb0000588, 0x050200b0,
+ 0x0501fe27, 0x05020003, 0x640b4407, 0x05f5f0c0,
0x60400800, 0x59a00208, 0x59a01408, 0x900001c0,
0x80081540, 0x59a0020a, 0x59a01c0a, 0x900001c0,
0x800c1d40, 0x82081400, 0x00000080, 0xb0083400,
- 0x481b4002, 0x900c3440, 0x481b4003, 0x912c0405,
- 0x0501fe39, 0x4a01d808, 0x00102f7c, 0x1c01f000,
- 0x4031d800, 0x58ef400a, 0x58ee580c, 0x58ec0002,
- 0x82000580, 0x00000200, 0x05f80314, 0x592c1005,
- 0x480bc857, 0x80080120, 0x42024800, 0x0010b391,
+ 0x481b4002, 0x900c3440, 0x481b4003, 0x912c0408,
+ 0x0501fe33, 0x4a01d809, 0x00104190, 0x1c01f000,
+ 0x05fdfccb, 0x05f400a1, 0x58ee580d, 0x592c1008,
+ 0x480bc857, 0x80080120, 0x42024800, 0x0010e512,
0x48024c06, 0x82081500, 0x0000ffff, 0x599c0818,
0x90040d30, 0x90040580, 0x05020004, 0xb00804be,
- 0x05fa1312, 0x0501f001, 0x0539fbef, 0x05000014,
- 0x82080480, 0x00000100, 0x05fa130c, 0x42000000,
- 0x0010b390, 0x44080000, 0x800811c0, 0x05f80307,
- 0x40080800, 0x42024800, 0x0010b391, 0x912e5c06,
+ 0x05f610a0, 0x0501f001, 0x0545ff73, 0x05000014,
+ 0x82080480, 0x00000100, 0x05f6109a, 0x42000000,
+ 0x0010e511, 0x44080000, 0x800811c0, 0x05f40095,
+ 0x40080800, 0x42024800, 0x0010e512, 0x912e5c09,
0x592c0400, 0x8c000506, 0x05020012, 0x59240200,
0x84000500, 0x48024a00, 0x0501f00e, 0x82080480,
- 0x000000ff, 0x05fa12f9, 0x80080800, 0x42000000,
- 0x0010b390, 0x44040000, 0x800811c0, 0x0500006c,
- 0x42024800, 0x0010b39c, 0x80040840, 0x912e5c06,
+ 0x000000ff, 0x05f61087, 0x80080800, 0x42000000,
+ 0x0010e511, 0x44040000, 0x800811c0, 0x05000068,
+ 0x42024800, 0x0010e51f, 0x80040840, 0x912e5c09,
0x600c4000, 0x592c0400, 0x8c000506, 0x05000012,
- 0x59a8108d, 0x90081506, 0x05fa02e8, 0x8c00050a,
- 0x05020003, 0x8d0c0520, 0x05f802e4, 0x64164a00,
+ 0x59a810d1, 0x90081506, 0x05f60076, 0x8c00050a,
+ 0x05020003, 0x8d0c0520, 0x05f40072, 0x64164a00,
0x90001503, 0x05000006, 0x840011c0, 0x82081500,
0x000000ff, 0x480a4a08, 0x0501f003, 0x82000500,
0x000000ff, 0x48024c00, 0x592c0001, 0x592c1002,
@@ -15891,1137 +4253,1209 @@ static const uint32_t isp_2500_multi_risc_code[] = {
0x599c1817, 0x8c0c051c, 0x05000006, 0x592c0003,
0x592c1004, 0x9c0001c0, 0x9c0811c0, 0x0501f003,
0x82000500, 0xf0ffffff, 0x48024803, 0x480a4804,
- 0x912e5c05, 0x91264c0b, 0x80040840, 0x0500001d,
+ 0x912e5c05, 0x91264c0d, 0x80040840, 0x05000019,
0x80204040, 0x05fe07d4, 0x48074000, 0x49274001,
0x603c0800, 0x59a01002, 0x59a01803, 0x9008343c,
- 0x481b4002, 0x900c3440, 0x481b4003, 0x58ee580c,
- 0x912c0405, 0x0501fdc4, 0x4a01d808, 0x00102ff1,
- 0x1c01f000, 0x4031d800, 0x58ef400a, 0x58ec0002,
- 0x82000580, 0x00000200, 0x05f802a0, 0x58ee580c,
- 0x912e5c05, 0x59a00800, 0x59a24801, 0x05fdf7b9,
- 0x0539fb85, 0x05000010, 0x42006800, 0x0010b391,
- 0x4200b000, 0x0010b390, 0x5058b000, 0x58340400,
+ 0x481b4002, 0x900c3440, 0x481b4003, 0x58ee580d,
+ 0x912c0408, 0x0501fdc2, 0x4a01d809, 0x00104201,
+ 0x1c01f000, 0x05fdfc5a, 0x05f40030, 0x58ee580d,
+ 0x912e5c08, 0x59a00800, 0x59a24801, 0x05fdf7bd,
+ 0x0545ff0d, 0x05000010, 0x42006800, 0x0010e512,
+ 0x4200b000, 0x0010e511, 0x5058b000, 0x58340400,
0x8c000506, 0x05000005, 0x58340200, 0x8400055e,
- 0x48006a00, 0x0501f004, 0x90346c0b, 0x8058b040,
- 0x05fe07f7, 0x42006800, 0x0010b391, 0x4200b000,
- 0x0010b390, 0x5058b000, 0x8058b040, 0x05000008,
- 0x42024800, 0x0010b39c, 0x58340206, 0x48024a06,
- 0x91264c0b, 0x8058b040, 0x05fe07fc, 0x599c1019,
- 0x82081500, 0x0000e000, 0x497b4208, 0x05f5face,
- 0x05000012, 0x05f5fab0, 0x64074208, 0x0502000f,
- 0x4c080000, 0x05f5faba, 0x5c001000, 0x05020007,
+ 0x48006a00, 0x0501f004, 0x90346c0d, 0x8058b040,
+ 0x05fe07f7, 0x42006800, 0x0010e512, 0x4200b000,
+ 0x0010e511, 0x5058b000, 0x8058b040, 0x05000008,
+ 0x42024800, 0x0010e51f, 0x58340206, 0x48024a06,
+ 0x91264c0d, 0x8058b040, 0x05fe07fc, 0x599c1019,
+ 0x82081500, 0x0000e000, 0x497b4208, 0x05edfd55,
+ 0x05000012, 0x05edfd3a, 0x64074208, 0x0502000f,
+ 0x4c080000, 0x05edfd41, 0x5c001000, 0x05020007,
0x640b4208, 0x82080580, 0x00008000, 0x05020007,
0x64134208, 0x0501f005, 0x640f4208, 0x90080580,
0x05020002, 0x64174208, 0x90080580, 0x05020007,
- 0x6403503b, 0x60040000, 0x05f5f86a, 0x60040000,
- 0x05f5f83e, 0x0501f02b, 0x82080580, 0x00002000,
- 0x05020008, 0x6407503b, 0x60000000, 0x05f5f861,
- 0x60000000, 0x05f5f835, 0x05f5fc13, 0x0501f021,
- 0x82080580, 0x00004000, 0x05020004, 0x640b503b,
- 0x64075047, 0x05fdf7f9, 0x82080580, 0x00006000,
- 0x0502000f, 0x59a8085c, 0x82040d80, 0x01391077,
- 0x05020004, 0x59e00813, 0x8c040500, 0x05fa024f,
- 0x640f503b, 0x60080000, 0x05f5f84a, 0x60080000,
- 0x05f5f81e, 0x05fdf7e9, 0x0501f00a, 0x82080580,
- 0x00008000, 0x05fa0245, 0x05f5fc06, 0x6413503b,
- 0x600c0000, 0x05f5f83f, 0x600c0000, 0x05f5f813,
+ 0x64035069, 0x60040000, 0x05edfb03, 0x60040000,
+ 0x05edfad1, 0x0501f02b, 0x82080580, 0x00002000,
+ 0x05020008, 0x64075069, 0x60000000, 0x05edfafa,
+ 0x60000000, 0x05edfac8, 0x05edfebf, 0x0501f021,
+ 0x82080580, 0x00004000, 0x05020004, 0x640b5069,
+ 0x64075075, 0x05fdf7f9, 0x82080580, 0x00006000,
+ 0x0502000f, 0x59a80892, 0x82040d80, 0x01391077,
+ 0x05020004, 0x59e00813, 0x8c040500, 0x05f207e1,
+ 0x640f5069, 0x60080000, 0x05edfae3, 0x60080000,
+ 0x05edfab1, 0x05fdf7e9, 0x0501f00a, 0x82080580,
+ 0x00008000, 0x05f207d7, 0x05edfeb2, 0x64135069,
+ 0x600c0000, 0x05edfad8, 0x600c0000, 0x05edfaa6,
0x599c1019, 0x82081500, 0x0000e000, 0x4c080000,
- 0x0501fea1, 0x5c001000, 0x05020004, 0x82080580,
- 0x00004000, 0x0500000b, 0x0501fe68, 0x05000003,
- 0x0501fe7d, 0x05020009, 0x82080580, 0x00008000,
+ 0x0501fea2, 0x5c001000, 0x05020004, 0x82080580,
+ 0x00004000, 0x0500000b, 0x0501fe70, 0x05000003,
+ 0x0501fe85, 0x05020009, 0x82080580, 0x00008000,
0x05000004, 0x82080580, 0x00004000, 0x05020003,
0x600010c0, 0x0501f004, 0x599c0019, 0x8c000518,
- 0x05000005, 0x8008111a, 0x480b5048, 0x640b503b,
- 0x64075047, 0x599c0019, 0x8c000520, 0x05000001,
- 0x4a035013, 0x0000aaaa, 0x599c1018, 0x90081530,
+ 0x05000005, 0x8008111a, 0x480b5076, 0x640b5069,
+ 0x64075075, 0x599c0019, 0x8c000520, 0x05000001,
+ 0x4a035041, 0x0000aaaa, 0x599c1018, 0x90081530,
0x90080d80, 0x05000005, 0x90080d90, 0x05000008,
- 0x90080da0, 0x05020002, 0x48075013, 0x0501fdba,
- 0x05000007, 0x4803c856, 0x850e1d46, 0x05f1fde2,
- 0x59a8001f, 0x80040540, 0x4803501f, 0x49f3c857,
- 0x42001000, 0x00104a82, 0x0515fc4e, 0x42001000,
- 0x00104a75, 0x0515fd93, 0x4a038805, 0xffffffff,
- 0x0501fe58, 0x05000005, 0x4a03c014, 0x00400040,
- 0x4a03c013, 0x00400000, 0x59a0001e, 0x84000540,
- 0x4803401e, 0x49f3c857, 0x05f9f1b2, 0x00000018,
- 0x0000000c, 0x00000018, 0x00000020, 0x916c0580,
- 0x05020003, 0x601c0800, 0x05f9f1ec, 0x60800800,
+ 0x90080da0, 0x05020002, 0x48075041, 0x0501fdb7,
+ 0x05000007, 0x4803c856, 0x850e1d46, 0x05edf88f,
+ 0x59a8004d, 0x80040540, 0x4803504d, 0x49f3c857,
+ 0x42001000, 0x00106004, 0x0519fc0f, 0x42001000,
+ 0x00105ff7, 0x0519fd4d, 0x4a038805, 0xffffffff,
+ 0x0501fe5b, 0x05000008, 0x599c1019, 0x8c08053c,
+ 0x05020005, 0x4a03c014, 0x00400040, 0x4a03c013,
+ 0x00400000, 0x59a0001e, 0x84000540, 0x4803401e,
+ 0x49f3c857, 0x59a802dd, 0x48034209, 0x59a804dd,
+ 0x48034409, 0x05f1f73b, 0x00000018, 0x0000000c,
+ 0x00000018, 0x00000020, 0x916c0580, 0x05020003,
+ 0x601c0800, 0x05f1f776, 0x60800800, 0x59a00408,
+ 0x59a01208, 0x900811c0, 0x80081540, 0x59a0040a,
+ 0x59a01a0a, 0x900c19c0, 0x800c1d40, 0x419c0000,
+ 0x0501f4f8, 0x8d0c050e, 0x05000003, 0x64074407,
+ 0x05f1f767, 0x050dfdd9, 0x05020003, 0x645b4407,
+ 0x05f1f763, 0x59a800b2, 0x8c000500, 0x0500000e,
+ 0x64034407, 0x60800800, 0x59a00408, 0x59a01208,
+ 0x900811c0, 0x80081540, 0x59a0040a, 0x59a01a0a,
+ 0x900c19c0, 0x800c1d40, 0x42000000, 0x00110258,
+ 0x0501f4e0, 0x64074407, 0x6080b000, 0x4200a800,
+ 0x00110258, 0x4200a000, 0xffffffff, 0x4450a800,
+ 0x8054a800, 0x8058b040, 0x05fe07fd, 0x4d440000,
+ 0x4d340000, 0x42028800, 0xffffffff, 0x42002000,
+ 0xffffffff, 0x60043000, 0x60043800, 0x42001800,
+ 0x00110258, 0x59a8103d, 0x82081500, 0x000000ff,
+ 0x40180000, 0x0c01f001, 0x00104306, 0x00104309,
+ 0x0010430d, 0x00104311, 0x82102500, 0xffffff00,
+ 0x0501f014, 0x82102500, 0xffff00ff, 0x840811c0,
+ 0x0501f010, 0x82102500, 0xff00ffff, 0x900811c0,
+ 0x0501f00c, 0x82102500, 0x00ffffff, 0x9c0801c0,
+ 0x80102540, 0x44101800, 0x42003000, 0xffffffff,
+ 0x42002000, 0xffffffff, 0x800c1800, 0x0501f003,
+ 0x40080000, 0x80102540, 0x81468800, 0xb1442cbf,
+ 0x05021012, 0x4c080000, 0x4c0c0000, 0x4c180000,
+ 0x4c1c0000, 0x0001fb00, 0x5c003800, 0x5c003000,
+ 0x5c001800, 0x5c001000, 0x05fe07f4, 0x0509ff06,
+ 0x05fe07f2, 0x80183000, 0x801c3800, 0x59341202,
+ 0x40180000, 0x0c01f7d1, 0x82100580, 0xffffffff,
+ 0x05000002, 0x44101800, 0x42001800, 0x00110258,
+ 0x500c0000, 0x82000500, 0xffffff00, 0x801c0540,
+ 0x44001800, 0x5c026800, 0x5c028800, 0x60800800,
0x59a00408, 0x59a01208, 0x900811c0, 0x80081540,
0x59a0040a, 0x59a01a0a, 0x900c19c0, 0x800c1d40,
- 0x419c0000, 0x0501f4fa, 0x8d0c050e, 0x05000003,
- 0x64074407, 0x05f9f1dd, 0x050dfa70, 0x05020003,
- 0x645b4407, 0x05f9f1d9, 0x59a80073, 0x8c000500,
- 0x0500000e, 0x64034407, 0x60800800, 0x59a00408,
- 0x59a01208, 0x900811c0, 0x80081540, 0x59a0040a,
- 0x59a01a0a, 0x900c19c0, 0x800c1d40, 0x42000000,
- 0x0010cea4, 0x0501f4e2, 0x64074407, 0x6080b000,
- 0x4200a800, 0x0010cea4, 0x4200a000, 0xffffffff,
- 0x4450a800, 0x8054a800, 0x8058b040, 0x05fe07fd,
- 0x4d440000, 0x4d340000, 0x42028800, 0xffffffff,
- 0x42002000, 0xffffffff, 0x60043000, 0x60043800,
- 0x42001800, 0x0010cea4, 0x59a8100f, 0x82081500,
- 0x000000ff, 0x40180000, 0x0c01f001, 0x001030f3,
- 0x001030f6, 0x001030fa, 0x001030fe, 0x82102500,
- 0xffffff00, 0x0501f014, 0x82102500, 0xffff00ff,
- 0x840811c0, 0x0501f010, 0x82102500, 0xff00ffff,
- 0x900811c0, 0x0501f00c, 0x82102500, 0x00ffffff,
- 0x9c0801c0, 0x80102540, 0x44101800, 0x42003000,
- 0xffffffff, 0x42002000, 0xffffffff, 0x800c1800,
- 0x0501f003, 0x40080000, 0x80102540, 0x81468800,
- 0xb1442cbf, 0x05021012, 0x4c080000, 0x4c0c0000,
- 0x4c180000, 0x4c1c0000, 0x0001fae7, 0x5c003800,
- 0x5c003000, 0x5c001800, 0x5c001000, 0x05fe07f4,
- 0x0509fc70, 0x05fe07f2, 0x80183000, 0x801c3800,
- 0x59341202, 0x40180000, 0x0c01f7d1, 0x82100580,
- 0xffffffff, 0x05000002, 0x44101800, 0x42001800,
- 0x0010cea4, 0x500c0000, 0x82000500, 0xffffff00,
- 0x801c0540, 0x44001800, 0x5c026800, 0x5c028800,
- 0x60800800, 0x59a00408, 0x59a01208, 0x900811c0,
- 0x80081540, 0x59a0040a, 0x59a01a0a, 0x900c19c0,
- 0x800c1d40, 0x42000000, 0x0010cea4, 0x0501f480,
- 0x59a28c07, 0x0501fd43, 0x05fa0168, 0x0509fc95,
- 0x05fa0166, 0x0501fc54, 0x05020003, 0x640b4407,
- 0x05f9f15e, 0x59a0020c, 0x8c000500, 0x05000003,
- 0x0509fc44, 0x0502050e, 0x59a0020c, 0x8c000502,
- 0x05000015, 0x83440480, 0x000007f0, 0x05021012,
- 0x0509fc45, 0x05020010, 0x497a5a05, 0x4a025c05,
- 0x00008000, 0x59a24805, 0x0529fc48, 0x05020003,
- 0x640f4407, 0x05f9f149, 0x4a01d808, 0x00103159,
- 0x1c01f000, 0x59a28c07, 0x59a2440b, 0x0509fc75,
- 0x05fa0146, 0x4c580000, 0x4c500000, 0x4c540000,
- 0x6028b000, 0x4134a000, 0x912e5c02, 0x412ca800,
- 0x0539f9ac, 0x912cac06, 0x4054a000, 0x6010b000,
- 0x0539f9e3, 0x5c00a800, 0x5c00a000, 0x5c00b000,
- 0x592c0802, 0x82040500, 0x00ff00ff, 0x900001c0,
- 0x82041500, 0xff00ff00, 0x80080540, 0x48025802,
- 0x592c0801, 0x82040500, 0x00ff00ff, 0x900001c0,
- 0x82041500, 0xff00ff00, 0x80080540, 0x48025801,
- 0x60280800, 0x59a00408, 0x59a01208, 0x900811c0,
- 0x80081540, 0x59a0040a, 0x59a01a0a, 0x900c19c0,
- 0x800c1d40, 0x412c0000, 0x0501f431, 0x496fc857,
- 0x496f4407, 0x497b4208, 0x05f5f963, 0x05000015,
- 0x05f5f945, 0x64074208, 0x05020012, 0x4c080000,
- 0x05f5f94f, 0x5c001000, 0x05020008, 0x640b4208,
- 0x916c0580, 0x0500000b, 0x05f1fd39, 0x05020009,
- 0x64134208, 0x0501f007, 0x640f4208, 0x916c0580,
- 0x05000004, 0x05f1fd11, 0x05020002, 0x64174208,
- 0x05f9f0bc, 0x59a28c07, 0x0501fcda, 0x05fa00ff,
- 0x0509fc2c, 0x05fa00fd, 0x916c0583, 0x05000003,
- 0x641f4407, 0x05f9f0f5, 0x91340c06, 0x59a0020c,
- 0x8c000500, 0x05000002, 0x91340c08, 0x58040001,
- 0x4803440a, 0x900001c0, 0x4803420a, 0x50040000,
- 0x48034408, 0x900001c0, 0x48034208, 0x59340200,
- 0x48034407, 0x05f9f0a3, 0x8d0c050e, 0x05000003,
- 0x64074407, 0x05f9f0e1, 0x59a0220c, 0x8c100500,
- 0x05020021, 0x8c100506, 0x05020004, 0x59a03209,
- 0x90180483, 0x05fa10dd, 0x59a28c07, 0x0001fae7,
- 0x05fa00da, 0x0509fbae, 0x05000003, 0x64274407,
- 0x05f9f0d2, 0x0501fbc4, 0x05020003, 0x640b4407,
- 0x05f9f0ce, 0x59a0220c, 0x8c100506, 0x05000004,
- 0x59343002, 0x82183500, 0x00ffffff, 0x497a5a05,
- 0x4a025c05, 0x00008000, 0x0529fb88, 0x05020003,
- 0x640f4407, 0x05f9f0c1, 0x4a01d808, 0x0010321f,
- 0x1c01f000, 0x59a28c07, 0x0001fae7, 0x05fa00bf,
- 0x0509fb93, 0x05000003, 0x64274407, 0x05f9f0b7,
- 0x0501fba9, 0x05020003, 0x640b4407, 0x05f9f0b3,
- 0x497a5a05, 0x4a025c05, 0x00008000, 0x0501fba2,
- 0x05020003, 0x640b4407, 0x05f9f0ac, 0x592e5800,
- 0x0529fb81, 0x05020003, 0x640f4407, 0x05f9f0a7,
- 0x4a01d808, 0x001031fb, 0x1c01f000, 0x592c2806,
- 0x82140d80, 0x01000000, 0x05020003, 0x64134407,
- 0x05f9f09e, 0x60200800, 0x59a00208, 0x59a01408,
+ 0x42000000, 0x00110258, 0x0501f47e, 0x59a28c07,
+ 0x0501fd39, 0x05f206f3, 0x59a0020c, 0x8c000500,
+ 0x0500000c, 0x59a01209, 0x59a00409, 0x82000500,
+ 0x000000ff, 0x900001c0, 0x80081540, 0x41784000,
+ 0x0509fdb5, 0x05000005, 0x48034407, 0x05f1f6e5,
+ 0x0509ff1d, 0x05f206e3, 0x0501fc41, 0x05020003,
+ 0x640b4407, 0x05f1f6da, 0x59a0020c, 0x8c000500,
+ 0x05000003, 0x0509fecc, 0x050204f6, 0x59a0020c,
+ 0x8c000502, 0x05000015, 0x83440480, 0x000007f0,
+ 0x05021012, 0x0509fecd, 0x05020010, 0x497a5a08,
+ 0x4a025c08, 0x00008000, 0x59a24805, 0x0535f9f8,
+ 0x05020003, 0x640f4407, 0x05f1f6c5, 0x4a01d809,
+ 0x0010437a, 0x1c01f000, 0x59a28c07, 0x59a2440b,
+ 0x0509fefd, 0x05f206c3, 0x4c580000, 0x4c500000,
+ 0x4c540000, 0x6028b000, 0x4134a000, 0x912e5c05,
+ 0x412ca800, 0x0545fd22, 0x912cac06, 0x4054a000,
+ 0x6010b000, 0x0545fd59, 0x5c00a800, 0x5c00a000,
+ 0x5c00b000, 0x592c0802, 0x82040500, 0x00ff00ff,
+ 0x900001c0, 0x82041500, 0xff00ff00, 0x80080540,
+ 0x48025802, 0x592c0801, 0x82040500, 0x00ff00ff,
+ 0x900001c0, 0x82041500, 0xff00ff00, 0x80080540,
+ 0x48025801, 0x60280800, 0x59a00408, 0x59a01208,
+ 0x900811c0, 0x80081540, 0x59a0040a, 0x59a01a0a,
+ 0x900c19c0, 0x800c1d40, 0x412c0000, 0x0501f421,
+ 0x496fc857, 0x496f4407, 0x497b4208, 0x05edfbd5,
+ 0x05000015, 0x05edfbba, 0x64074208, 0x05020012,
+ 0x4c080000, 0x05edfbc1, 0x5c001000, 0x05020008,
+ 0x640b4208, 0x916c0580, 0x0500000b, 0x05e9ffbd,
+ 0x05020009, 0x64134208, 0x0501f007, 0x640f4208,
+ 0x916c0580, 0x05000004, 0x05e9ffa4, 0x05020002,
+ 0x64174208, 0x05f1f637, 0x59a28c07, 0x0501fcc2,
+ 0x05f2067c, 0x0509feb4, 0x05f2067a, 0x916c0583,
+ 0x05000003, 0x641f4407, 0x05f1f671, 0x91340c06,
+ 0x59a0020c, 0x8c000500, 0x05000002, 0x91340c08,
+ 0x58040001, 0x4803440a, 0x900001c0, 0x4803420a,
+ 0x50040000, 0x48034408, 0x900001c0, 0x48034208,
+ 0x59340200, 0x48034407, 0x05f1f61e, 0x8d0c050e,
+ 0x05000003, 0x64074407, 0x05f1f65d, 0x59a0220c,
+ 0x8c100500, 0x05020021, 0x8c100506, 0x05020004,
+ 0x59a03209, 0x90180483, 0x05f2165a, 0x59a28c07,
+ 0x0001fb00, 0x05f20657, 0x0509fe3b, 0x05000003,
+ 0x64274407, 0x05f1f64e, 0x0501fbb1, 0x05020003,
+ 0x640b4407, 0x05f1f64a, 0x59a0220c, 0x8c100506,
+ 0x05000004, 0x59343002, 0x82183500, 0x00ffffff,
+ 0x497a5a08, 0x4a025c08, 0x00008000, 0x0535f938,
+ 0x05020003, 0x640f4407, 0x05f1f63d, 0x4a01d809,
+ 0x0010443c, 0x1c01f000, 0x59a28c07, 0x0001fb00,
+ 0x05f2063c, 0x0509fe20, 0x05000003, 0x64274407,
+ 0x05f1f633, 0x0501fb96, 0x05020003, 0x640b4407,
+ 0x05f1f62f, 0x497a5a08, 0x4a025c08, 0x00008000,
+ 0x0501fb8f, 0x05020003, 0x640b4407, 0x05f1f628,
+ 0x592e5800, 0x0535f931, 0x05020003, 0x640f4407,
+ 0x05f1f623, 0x4a01d809, 0x0010441c, 0x1c01f000,
+ 0x592c2809, 0x82140d80, 0x01000000, 0x05020003,
+ 0x64134407, 0x05f1f61a, 0x60200800, 0x59a00208,
+ 0x59a01408, 0x900001c0, 0x80081540, 0x59a0020a,
+ 0x59a01c0a, 0x900001c0, 0x800c1d40, 0x912c0409,
+ 0x0501fb9c, 0x8c140500, 0x05000003, 0x4a01d809,
+ 0x00104432, 0x1c01f000, 0x05fdfa29, 0x05f005ff,
+ 0x58ee580e, 0x812e59c0, 0x05e009a4, 0x60200800,
+ 0x912c0409, 0x58ec1007, 0x58ec1808, 0x0501f38d,
+ 0x592c0009, 0x82000580, 0x01000000, 0x05020003,
+ 0x64134407, 0x05f1f5fa, 0x59a00208, 0x59a01408,
0x900001c0, 0x80081540, 0x59a0020a, 0x59a01c0a,
- 0x900001c0, 0x800c1d40, 0x912c0406, 0x0501fbac,
- 0x8c140500, 0x05000003, 0x4a01d808, 0x00103211,
- 0x1c01f000, 0x4031d800, 0x58ef400a, 0x58ee580d,
- 0x58ec0002, 0x82000580, 0x00000200, 0x05f8007f,
- 0x812e59c0, 0x05e40fd6, 0x60200800, 0x912c0406,
- 0x58ec1006, 0x58ec1807, 0x0501f399, 0x592c0006,
- 0x82000580, 0x01000000, 0x05020003, 0x64134407,
- 0x05f9f07a, 0x59a00208, 0x59a01408, 0x900001c0,
- 0x80081540, 0x59a0020a, 0x59a01c0a, 0x900001c0,
- 0x800c1d40, 0x60180800, 0x912c0407, 0x0501f388,
- 0x59a00a0b, 0x800409c0, 0x05f80070, 0x0501fc49,
- 0x05fa006e, 0x82040480, 0x00000081, 0x05001002,
- 0x60000801, 0x59c40085, 0x59881004, 0x80081400,
- 0x480b1004, 0x497b8885, 0x59c400b1, 0x48031022,
- 0x59c400b2, 0x48031021, 0x59c400a2, 0x48031023,
- 0x598810b7, 0x598800b8, 0x80081400, 0x598800b9,
- 0x80081400, 0x598800ba, 0x80081400, 0x5988011d,
- 0x80081400, 0x598800bb, 0x80081400, 0x480b1024,
- 0x59a00208, 0x59a01408, 0x900001c0, 0x80081540,
- 0x59a0020a, 0x59a01c0a, 0x900001c0, 0x800c1d40,
- 0x91880400, 0x0501fb5e, 0x4a01d808, 0x0010325d,
- 0x1c01f000, 0x4031d800, 0x58ef400a, 0x58ec0002,
- 0x82000580, 0x00000200, 0x05f80034, 0x59a0020c,
- 0x8c000500, 0x05000006, 0x91880400, 0x4803c840,
- 0x641bc842, 0x05011000, 0x497b8885, 0x4a034208,
- 0x00000080, 0x05f5f7ef, 0x8d0c050e, 0x05000003,
- 0x64074407, 0x05f9f02d, 0x0501fc0a, 0x05fa002f,
- 0x0501fb1d, 0x05020003, 0x640b4407, 0x05f9f027,
- 0x497a5a05, 0x4a025c05, 0x00008000, 0x59a00407,
- 0x800001c0, 0x05f80025, 0x82001580, 0x000000ff,
- 0x05000003, 0x90001484, 0x05fa1020, 0x40001000,
- 0x59a24805, 0x05f5fa27, 0x05020003, 0x640f4407,
- 0x05f9f016, 0x4a01d808, 0x0010328c, 0x1c01f000,
- 0x592c0006, 0x82000580, 0x01000000, 0x05f607cd,
- 0x64134407, 0x05f9f00d, 0x59a01407, 0x8c080508,
- 0x05020005, 0x8d0c050e, 0x05000003, 0x64074407,
- 0x05f9f006, 0x59a01c08, 0x820c0480, 0x00001000,
- 0x05fa1006, 0x497b2804, 0x497b2805, 0x497b2826,
- 0x497b2827, 0x497b2829, 0x497b282a, 0x497b282c,
- 0x497b282d, 0x4803c856, 0x850e1d06, 0x8c080500,
- 0x05000004, 0x4803c856, 0x910e1d51, 0x0501f004,
- 0x8c080506, 0x05000002, 0x850e1d42, 0x850e1d0a,
- 0x6006d800, 0x82081500, 0x000000e0, 0x8008010a,
- 0x0c02002a, 0x050df87d, 0x05020008, 0x64075014,
- 0x4a035013, 0x0000aaaa, 0x0509fff6, 0x0501f018,
- 0x64035014, 0x05fdf7fb, 0x497b5013, 0x0505fb65,
- 0x0515fe7f, 0x0519f9d2, 0x0515fe69, 0x59a00a08,
- 0x480788a7, 0x59c400a3, 0x82000500, 0xfeffffff,
- 0x82000540, 0x80018000, 0x40000800, 0x84040d20,
- 0x480388a3, 0x480788a3, 0x497b5036, 0x60b40800,
- 0x42001000, 0x00103ea1, 0x0515f9f3, 0x59a00408,
- 0x800000c2, 0x800008c4, 0x8005d400, 0x61fc01ff,
- 0x050df85a, 0x05000003, 0x59a00208, 0x80000110,
- 0x0501fbb5, 0x05f5f77f, 0x001032b5, 0x001032b7,
- 0x001032be, 0x001022a2, 0x001032bc, 0x001022a2,
- 0x001022a2, 0x001022a2, 0x916c0583, 0x05000003,
- 0x641f4407, 0x05f5f7b5, 0x0501fb92, 0x05f607b7,
- 0x59a00408, 0x59a00a08, 0x900409c0, 0x80040d40,
- 0x4805d806, 0x59a0040a, 0x59a00a0a, 0x900409c0,
- 0x80040d40, 0x4805d807, 0x6401d801, 0x0501fa9a,
- 0x05020003, 0x640b4407, 0x05f5f7a4, 0x417a8800,
- 0x497b4001, 0x912c0406, 0x48034002, 0x59a00407,
- 0x8c000504, 0x0502008c, 0x4c5c0000, 0x4c600000,
- 0x4c640000, 0x4178b800, 0x59a0c407, 0x59a0c802,
- 0x59a2440b, 0x0509fac7, 0x05020027, 0x0509fa6c,
- 0x05000003, 0x0509f9a6, 0x05020023, 0x8c60053e,
- 0x05020020, 0x8c600500, 0x05000008, 0x59340009,
- 0x4400c800, 0x8064c800, 0x59340008, 0x4400c800,
- 0x8064c800, 0x0501f007, 0x59340007, 0x4400c800,
- 0x8064c800, 0x59340006, 0x4400c800, 0x8064c800,
- 0x83440580, 0x000007fe, 0x0500000b, 0x83440580,
- 0x000007fc, 0x05000008, 0x0509fa62, 0x05000003,
- 0x85468d5e, 0x0501f004, 0x0509f965, 0x05020002,
- 0x85468d5e, 0x4544c800, 0x85468d1e, 0x8064c800,
- 0x905cbc0c, 0x81468800, 0x83440480, 0x000007f0,
- 0x0500100c, 0x8c600506, 0x05000025, 0x83440580,
- 0x000007f0, 0x05020003, 0x61fa880f, 0x0501f005,
- 0x83440580, 0x000007ff, 0x0502001d, 0x61f2880f,
- 0x905c05bc, 0x05fe07c8, 0x59a00001, 0x805c0400,
+ 0x900001c0, 0x800c1d40, 0x60180800, 0x912c040a,
+ 0x0501f37c, 0x59a00a0b, 0x800409c0, 0x05f005f1,
+ 0x82040480, 0x00000081, 0x05001002, 0x60000801,
+ 0x59c40085, 0x59881004, 0x80081400, 0x480b1004,
+ 0x497b8885, 0x59c400b1, 0x59a810a9, 0x80080400,
+ 0x48031022, 0x59c400b2, 0x59a810aa, 0x80080400,
+ 0x48031021, 0x59c400a2, 0x82000500, 0x0000ffff,
+ 0x48031023, 0x598810bc, 0x598800bd, 0x80081400,
+ 0x598800be, 0x80081400, 0x598800bf, 0x80081400,
+ 0x59880122, 0x80081400, 0x598800c0, 0x80081400,
+ 0x5988013c, 0x80081400, 0x5988013a, 0x80081400,
+ 0x59880139, 0x80081400, 0x480b1024, 0x59a00208,
+ 0x59a01408, 0x900001c0, 0x80081540, 0x59a0020a,
+ 0x59a01c0a, 0x900001c0, 0x800c1d40, 0x91880400,
+ 0x0501fb48, 0x4a01d809, 0x00104484, 0x1c01f000,
+ 0x05fdf9d7, 0x05f005ad, 0x59a0020c, 0x8c000500,
+ 0x05000006, 0x91880400, 0x4803c840, 0x641bc842,
+ 0x05011000, 0x497b8885, 0x4a034208, 0x00000080,
+ 0x05f1f568, 0x8d0c050e, 0x05000003, 0x64074407,
+ 0x05f1f5a7, 0x0501fbf0, 0x05f205aa, 0x0501fb08,
+ 0x05020003, 0x640b4407, 0x05f1f5a1, 0x497a5a08,
+ 0x4a025c08, 0x00008000, 0x59a00407, 0x800001c0,
+ 0x05f005a0, 0x82001580, 0x000000ff, 0x05000003,
+ 0x90001484, 0x05f2159b, 0x40001000, 0x59a24805,
+ 0x05edfe03, 0x05020003, 0x640f4407, 0x05f1f590,
+ 0x4a01d809, 0x001044af, 0x1c01f000, 0x592c0009,
+ 0x82000580, 0x01000000, 0x05f20546, 0x64134407,
+ 0x05f1f587, 0x59a01407, 0x8c080508, 0x05020005,
+ 0x8d0c050e, 0x05000003, 0x64074407, 0x05f1f580,
+ 0x59a01c08, 0x820c0480, 0x00001000, 0x05f21581,
+ 0x497b2804, 0x497b2805, 0x497b2826, 0x497b2827,
+ 0x497b2829, 0x497b282a, 0x497b282c, 0x497b282d,
+ 0x4803c856, 0x850e1d06, 0x8c080500, 0x05000004,
+ 0x4803c856, 0x910e1d51, 0x0501f004, 0x8c080506,
+ 0x05000002, 0x850e1d42, 0x850e1d0a, 0x6006d800,
+ 0x82081500, 0x000000e0, 0x8008010a, 0x0c02002d,
+ 0x050dfbd6, 0x05020008, 0x64075042, 0x4a035041,
+ 0x0000aaaa, 0x050dfb54, 0x0501f01b, 0x64035042,
+ 0x05fdf7fb, 0x050dfbd9, 0x05fc07f8, 0x0505fc24,
+ 0x0521fb71, 0x050dfbc9, 0x05020003, 0x60000000,
+ 0x050dfb9f, 0x59a00a08, 0x480788a7, 0x59c400a3,
+ 0x82000500, 0xfeffffff, 0x82000540, 0x80018000,
+ 0x40000800, 0x84040d20, 0x480388a3, 0x480788a3,
+ 0x497b5064, 0x60b40800, 0x42001000, 0x00105184,
+ 0x0519f991, 0x59a00408, 0x800000c2, 0x800008c4,
+ 0x8005d400, 0x61fc01ff, 0x050dfbb0, 0x05000003,
+ 0x59a00208, 0x80000110, 0x0501fb98, 0x05f1f4f5,
+ 0x001044d8, 0x001044da, 0x001044e1, 0x00102a40,
+ 0x001044df, 0x00102a40, 0x00102a40, 0x00102a40,
+ 0x916c0583, 0x05000003, 0x641f4407, 0x05f1f52c,
+ 0x0501fb75, 0x05f2052f, 0x59a00408, 0x59a00a08,
+ 0x900409c0, 0x80040d40, 0x4805d807, 0x59a0040a,
+ 0x59a00a0a, 0x900409c0, 0x80040d40, 0x4805d808,
+ 0x6401d801, 0x0501fa82, 0x05020003, 0x640b4407,
+ 0x05f1f51b, 0x417a8800, 0x497b4001, 0x912c0409,
+ 0x48034002, 0x59a00407, 0x8c000504, 0x05020088,
+ 0x4c5c0000, 0x4c600000, 0x4c640000, 0x4178b800,
+ 0x59a0c407, 0x59a0c802, 0x59a2440b, 0x0509fd4a,
+ 0x05020027, 0x0509fcf4, 0x05000003, 0x0509fb8f,
+ 0x05020023, 0x8c60053e, 0x05020020, 0x8c600500,
+ 0x05000008, 0x59340009, 0x4400c800, 0x8064c800,
+ 0x59340008, 0x4400c800, 0x8064c800, 0x0501f007,
+ 0x59340007, 0x4400c800, 0x8064c800, 0x59340006,
+ 0x4400c800, 0x8064c800, 0x83440580, 0x000007fe,
+ 0x0500000b, 0x83440580, 0x000007fc, 0x05000008,
+ 0x0509fce5, 0x05000003, 0x85468d5e, 0x0501f004,
+ 0x0509fa7b, 0x05020002, 0x85468d5e, 0x4544c800,
+ 0x85468d1e, 0x8064c800, 0x905cbc0c, 0x81468800,
+ 0x83440480, 0x000007f0, 0x0500100c, 0x8c600506,
+ 0x05000025, 0x83440580, 0x000007f0, 0x05020003,
+ 0x61fa880f, 0x0501f005, 0x83440580, 0x000007ff,
+ 0x0502001d, 0x61f2880f, 0x905c05bc, 0x05fe07c8,
+ 0x59a00001, 0x805c0400, 0x48034001, 0x8c60053e,
+ 0x05020007, 0x59a00a0b, 0x800409c0, 0x05000006,
+ 0x80040480, 0x05021004, 0x8460c57e, 0x4178b800,
+ 0x05fdf7bb, 0x49474000, 0x485dd805, 0x59a00002,
+ 0x4801d803, 0x40ec1000, 0x0001f821, 0x4a01d809,
+ 0x001045ab, 0x5c00c800, 0x5c00c000, 0x5c00b800,
+ 0x1c01f000, 0x8c60053e, 0x05020019, 0x805cb9c0,
+ 0x05000021, 0x59a00001, 0x805c0400, 0x48034001,
+ 0x59a00a0b, 0x800409c0, 0x05000005, 0x80040480,
+ 0x05021003, 0x4178b800, 0x0501f00d, 0x59a00801,
+ 0x48074407, 0x485dd805, 0x59a00002, 0x4801d803,
+ 0x4a01d809, 0x001029f5, 0x40ec1000, 0x5c00c800,
+ 0x5c00c000, 0x5c00b800, 0x0001f021, 0x59a00001,
+ 0x805c0c00, 0x59a0020b, 0x80040480, 0x48034208,
+ 0x642b4407, 0x5c00c800, 0x5c00c000, 0x5c00b800,
+ 0x05f1f497, 0x59a00801, 0x48074407, 0x5c00c800,
+ 0x5c00c000, 0x5c00b800, 0x05f1f44e, 0x05fdf8b0,
+ 0x05f00486, 0x59a28800, 0x05fdf77a, 0x4c5c0000,
+ 0x4c600000, 0x4c640000, 0x4178b800, 0x59a0c407,
+ 0x59a0c802, 0x59a2440b, 0x0509fcc3, 0x05020029,
+ 0x0509fc6d, 0x05000003, 0x0509fb08, 0x05020025,
+ 0x8c60053e, 0x05020022, 0x83440580, 0x000007fe,
+ 0x0500000f, 0x83440580, 0x000007fc, 0x0500000c,
+ 0x0509fc6d, 0x05000005, 0x59340403, 0x8400055e,
+ 0x48026c03, 0x0501f006, 0x0509fa01, 0x05020004,
+ 0x59340403, 0x8400055e, 0x48026c03, 0x4134a000,
+ 0x4064a800, 0x6018b000, 0x0545fad5, 0x59340007,
+ 0x4400a800, 0x59340006, 0x4800a801, 0x59340009,
+ 0x4800a802, 0x59340008, 0x4800a803, 0x59340403,
+ 0x8400051e, 0x48026c03, 0x9064cc0a, 0x905cbc28,
+ 0x81468800, 0x83440480, 0x000007f0, 0x0500100c,
+ 0x8c600506, 0x05000026, 0x83440580, 0x000007f0,
+ 0x05020003, 0x61fa880f, 0x0501f005, 0x83440580,
+ 0x000007ff, 0x0502001e, 0x61f2880f, 0x905c05a8,
+ 0x05000002, 0x05fdf7c4, 0x59a00001, 0x805c0400,
0x48034001, 0x8c60053e, 0x05020007, 0x59a00a0b,
0x800409c0, 0x05000006, 0x80040480, 0x05021004,
- 0x8460c57e, 0x4178b800, 0x05fdf7bb, 0x49474000,
+ 0x8460c57e, 0x4178b800, 0x05fdf7b7, 0x49474000,
0x485dd805, 0x59a00002, 0x4801d803, 0x40ec1000,
- 0x0001f81c, 0x4a01d808, 0x00103385, 0x5c00c800,
+ 0x0001f821, 0x4a01d809, 0x00104635, 0x5c00c800,
0x5c00c000, 0x5c00b800, 0x1c01f000, 0x8c60053e,
0x05020019, 0x805cb9c0, 0x05000021, 0x59a00001,
0x805c0400, 0x48034001, 0x59a00a0b, 0x800409c0,
0x05000005, 0x80040480, 0x05021003, 0x4178b800,
0x0501f00d, 0x59a00801, 0x48074407, 0x485dd805,
- 0x59a00002, 0x4801d803, 0x4a01d808, 0x00102255,
+ 0x59a00002, 0x4801d803, 0x4a01d809, 0x001029f5,
0x40ec1000, 0x5c00c800, 0x5c00c000, 0x5c00b800,
- 0x0001f01c, 0x59a00001, 0x805c0c00, 0x59a0020b,
+ 0x0001f021, 0x59a00001, 0x805c0c00, 0x59a0020b,
0x80040480, 0x48034208, 0x642b4407, 0x5c00c800,
- 0x5c00c000, 0x5c00b800, 0x05f5f720, 0x59a00801,
+ 0x5c00c000, 0x5c00b800, 0x05f1f40d, 0x59a00801,
0x48074407, 0x5c00c800, 0x5c00c000, 0x5c00b800,
- 0x05f5f6d8, 0x4031d800, 0x58ef400a, 0x58ec0002,
- 0x82000580, 0x00000200, 0x05f4070c, 0x59a28800,
- 0x05fdf776, 0x4c5c0000, 0x4c600000, 0x4c640000,
- 0x4178b800, 0x59a0c407, 0x59a0c802, 0x59a2440b,
- 0x0509fa3c, 0x05020029, 0x0509f9e1, 0x05000003,
- 0x0509f91b, 0x05020025, 0x8c60053e, 0x05020022,
- 0x83440580, 0x000007fe, 0x0500000f, 0x83440580,
- 0x000007fc, 0x0500000c, 0x0509f9e6, 0x05000005,
- 0x59340403, 0x8400055e, 0x48026c03, 0x0501f006,
- 0x0509f8e7, 0x05020004, 0x59340403, 0x8400055e,
- 0x48026c03, 0x4134a000, 0x4064a800, 0x6018b000,
- 0x0535ff60, 0x59340007, 0x4400a800, 0x59340006,
- 0x4800a801, 0x59340009, 0x4800a802, 0x59340008,
- 0x4800a803, 0x59340403, 0x8400051e, 0x48026c03,
- 0x9064cc0a, 0x905cbc28, 0x81468800, 0x83440480,
- 0x000007f0, 0x0500100c, 0x8c600506, 0x05000026,
- 0x83440580, 0x000007f0, 0x05020003, 0x61fa880f,
- 0x0501f005, 0x83440580, 0x000007ff, 0x0502001e,
- 0x61f2880f, 0x905c05a8, 0x05000002, 0x05fdf7c4,
- 0x59a00001, 0x805c0400, 0x48034001, 0x8c60053e,
- 0x05020007, 0x59a00a0b, 0x800409c0, 0x05000006,
- 0x80040480, 0x05021004, 0x8460c57e, 0x4178b800,
- 0x05fdf7b7, 0x49474000, 0x485dd805, 0x59a00002,
- 0x4801d803, 0x40ec1000, 0x0001f81c, 0x4a01d808,
- 0x00103413, 0x5c00c800, 0x5c00c000, 0x5c00b800,
- 0x1c01f000, 0x8c60053e, 0x05020019, 0x805cb9c0,
- 0x05000021, 0x59a00001, 0x805c0400, 0x48034001,
- 0x59a00a0b, 0x800409c0, 0x05000005, 0x80040480,
- 0x05021003, 0x4178b800, 0x0501f00d, 0x59a00801,
+ 0x05f1f3c4, 0x05fdf826, 0x05f003fc, 0x59a28800,
+ 0x05fdf777, 0x61f82800, 0x59a00c07, 0x59a01208,
+ 0x59a01c08, 0x59a0220a, 0x82040500, 0x0000ff00,
+ 0x840001c0, 0x900034a0, 0x05f013fe, 0x80140480,
+ 0x05f013fc, 0x82040500, 0x000000ff, 0x900034a0,
+ 0x05f013f8, 0x80140480, 0x05f013f6, 0x82080500,
+ 0x0000ff00, 0x840001c0, 0x900034a0, 0x05f013f1,
+ 0x80140480, 0x05f013ef, 0x82080500, 0x000000ff,
+ 0x900034a0, 0x05f013eb, 0x80140480, 0x05f013e9,
+ 0x820c0500, 0x0000ff00, 0x840001c0, 0x900034a0,
+ 0x05f013e4, 0x80140480, 0x05f013e2, 0x820c0500,
+ 0x000000ff, 0x900034a0, 0x05f013de, 0x80140480,
+ 0x05f013dc, 0x82100500, 0x0000ff00, 0x840001c0,
+ 0x900034a0, 0x05f013d7, 0x80140480, 0x05f013d5,
+ 0x82100500, 0x000000ff, 0x900034a0, 0x05f013d1,
+ 0x80140480, 0x05f013cf, 0x900401c0, 0x80080d40,
+ 0x900c01c0, 0x80101d40, 0xb1a8341f, 0x44043000,
+ 0x80183000, 0x440c3000, 0x05f1f37e, 0x916c0583,
+ 0x05000003, 0x641f4407, 0x05f1f3bd, 0x0501fa06,
+ 0x05f203c0, 0x49234003, 0x59a00408, 0x59a00a08,
+ 0x900409c0, 0x80040d40, 0x4805d807, 0x59a0040a,
+ 0x59a00a0a, 0x900409c0, 0x80040d40, 0x4805d808,
+ 0x6401d801, 0x0501f912, 0x05020003, 0x640b4407,
+ 0x05f1f3ab, 0x417a8800, 0x497b4001, 0x912c0408,
+ 0x48034002, 0x4c5c0000, 0x4c600000, 0x4c640000,
+ 0x4178b800, 0x4178c800, 0x59a0c002, 0x0509fbde,
+ 0x0502000a, 0x0509fb88, 0x05020008, 0x8c64053e,
+ 0x05020005, 0x59340002, 0x4800c000, 0x4944c001,
+ 0x9060c402, 0x905cbc08, 0x81468800, 0x83440480,
+ 0x00000800, 0x0502101f, 0xb05c0480, 0x05021002,
+ 0x05fdf7ef, 0x59a00001, 0x805c0400, 0x48034001,
+ 0x8c64053e, 0x05000003, 0x4178b800, 0x05fdf7e8,
+ 0x59a00a0b, 0x800409c0, 0x05000006, 0x80040480,
+ 0x05021004, 0x4178b800, 0x8464cd7e, 0x05fdf7e0,
+ 0x49474000, 0x485dd805, 0x59a00002, 0x4801d803,
+ 0x40ec1000, 0x0001f821, 0x4a01d809, 0x001046f4,
+ 0x5c00c800, 0x5c00c000, 0x5c00b800, 0x1c01f000,
+ 0x8c64053e, 0x0502001a, 0x805cb9c0, 0x05000022,
+ 0x59a00001, 0x805c0400, 0x48034001, 0x59a00a0b,
+ 0x800409c0, 0x05000005, 0x80040480, 0x05021003,
+ 0x4178b800, 0x0501f00e, 0x59a00801, 0x80040906,
0x48074407, 0x485dd805, 0x59a00002, 0x4801d803,
- 0x4a01d808, 0x00102255, 0x40ec1000, 0x5c00c800,
- 0x5c00c000, 0x5c00b800, 0x0001f01c, 0x59a00001,
+ 0x4a01d809, 0x001029f5, 0x40ec1000, 0x5c00c800,
+ 0x5c00c000, 0x5c00b800, 0x0001f021, 0x59a00001,
0x805c0c00, 0x59a0020b, 0x80040480, 0x48034208,
0x642b4407, 0x5c00c800, 0x5c00c000, 0x5c00b800,
- 0x05f5f692, 0x59a00801, 0x48074407, 0x5c00c800,
- 0x5c00c000, 0x5c00b800, 0x05f5f64a, 0x4031d800,
- 0x58ef400a, 0x58ec0002, 0x82000580, 0x00000200,
- 0x05f4067e, 0x59a28800, 0x05fdf773, 0x61f82800,
- 0x59a00c07, 0x59a01208, 0x59a01c08, 0x59a0220a,
- 0x82040500, 0x0000ff00, 0x840001c0, 0x900034a0,
- 0x05f4167e, 0x80140480, 0x05f4167c, 0x82040500,
- 0x000000ff, 0x900034a0, 0x05f41678, 0x80140480,
- 0x05f41676, 0x82080500, 0x0000ff00, 0x840001c0,
- 0x900034a0, 0x05f41671, 0x80140480, 0x05f4166f,
- 0x82080500, 0x000000ff, 0x900034a0, 0x05f4166b,
- 0x80140480, 0x05f41669, 0x820c0500, 0x0000ff00,
- 0x840001c0, 0x900034a0, 0x05f41664, 0x80140480,
- 0x05f41662, 0x820c0500, 0x000000ff, 0x900034a0,
- 0x05f4165e, 0x80140480, 0x05f4165c, 0x82100500,
- 0x0000ff00, 0x840001c0, 0x900034a0, 0x05f41657,
- 0x80140480, 0x05f41655, 0x82100500, 0x000000ff,
- 0x900034a0, 0x05f41651, 0x80140480, 0x05f4164f,
- 0x900401c0, 0x80080d40, 0x900c01c0, 0x80101d40,
- 0x91a83431, 0x44043000, 0x80183000, 0x440c3000,
- 0x05f5f600, 0x916c0583, 0x05000003, 0x641f4407,
- 0x05f5f63e, 0x0501fa1b, 0x05f60640, 0x59a00408,
- 0x59a00a08, 0x900409c0, 0x80040d40, 0x4805d806,
- 0x59a0040a, 0x59a00a0a, 0x900409c0, 0x80040d40,
- 0x4805d807, 0x6401d801, 0x0501f923, 0x05020003,
- 0x640b4407, 0x05f5f62d, 0x417a8800, 0x497b4001,
- 0x912c0405, 0x48034002, 0x4c5c0000, 0x4c600000,
- 0x4c640000, 0x4178b800, 0x4178c800, 0x59a0c002,
- 0x0509f954, 0x0502000a, 0x0509f8f9, 0x05020008,
- 0x8c64053e, 0x05020005, 0x59340002, 0x4800c000,
- 0x4944c001, 0x9060c402, 0x905cbc08, 0x81468800,
- 0x83440480, 0x00000800, 0x0502101f, 0xb05c0480,
- 0x05021002, 0x05fdf7ef, 0x59a00001, 0x805c0400,
- 0x48034001, 0x8c64053e, 0x05000003, 0x4178b800,
- 0x05fdf7e8, 0x59a00a0b, 0x800409c0, 0x05000006,
- 0x80040480, 0x05021004, 0x4178b800, 0x8464cd7e,
- 0x05fdf7e0, 0x49474000, 0x485dd805, 0x59a00002,
- 0x4801d803, 0x40ec1000, 0x0001f81c, 0x4a01d808,
- 0x001034d5, 0x5c00c800, 0x5c00c000, 0x5c00b800,
- 0x1c01f000, 0x8c64053e, 0x0502001a, 0x805cb9c0,
- 0x05000022, 0x59a00001, 0x805c0400, 0x48034001,
- 0x59a00a0b, 0x800409c0, 0x05000005, 0x80040480,
- 0x05021003, 0x4178b800, 0x0501f00e, 0x59a00801,
- 0x80040906, 0x48074407, 0x485dd805, 0x59a00002,
- 0x4801d803, 0x4a01d808, 0x00102255, 0x40ec1000,
- 0x5c00c800, 0x5c00c000, 0x5c00b800, 0x0001f01c,
- 0x59a00001, 0x805c0c00, 0x59a0020b, 0x80040480,
- 0x48034208, 0x642b4407, 0x5c00c800, 0x5c00c000,
- 0x5c00b800, 0x05f5f5d1, 0x59a00801, 0x80040906,
- 0x48074407, 0x5c00c800, 0x5c00c000, 0x5c00b800,
- 0x05f5f588, 0x4031d800, 0x58ef400a, 0x58ec0002,
- 0x82000580, 0x00000200, 0x05f405bc, 0x59a28800,
- 0x05fdf79a, 0x8d0c050e, 0x05000003, 0x64074407,
- 0x05f5f5be, 0x59a8021b, 0x8c00050a, 0x05020005,
- 0x8c000506, 0x05020003, 0x645b4407, 0x05f5f5b7,
- 0x0501f994, 0x05f605b9, 0x0501f8a7, 0x05020003,
- 0x640b4407, 0x05f5f5b1, 0x59a00c07, 0x80040902,
- 0x59a00408, 0x59a01208, 0x900811c0, 0x80081540,
- 0x59a0040a, 0x59a01a0a, 0x900c19c0, 0x800c1d40,
- 0x912c0406, 0x0501f8b8, 0x4a01d808, 0x001034fd,
- 0x1c01f000, 0x4031d800, 0x58ef400a, 0x58ee580c,
- 0x58ec0002, 0x82000580, 0x00000200, 0x05f40593,
- 0x592c000a, 0x59a8380f, 0x0511fb00, 0x05040ce4,
- 0x05f6059a, 0x49474001, 0x481a6802, 0x592c000b,
- 0x82001d80, 0x70000000, 0x05020005, 0x0501f882,
- 0x0502000c, 0x640b4407, 0x05f5f58c, 0x82001d80,
- 0x72000000, 0x05f6058d, 0x0501f87b, 0x0502087a,
- 0x05020879, 0x05020003, 0x640b4407, 0x05f5f583,
- 0x58ee580c, 0x4a025c05, 0x00008000, 0x497a5a05,
- 0x592c3209, 0x80183102, 0x592c1801, 0x4a001806,
- 0x01000000, 0x0529f862, 0x05020003, 0x640f4407,
- 0x05f5f576, 0x4a01d808, 0x0010352c, 0x1c01f000,
- 0x592c4000, 0x592c0006, 0x82000580, 0x01000000,
- 0x05020003, 0x64134407, 0x05f5f56c, 0x4c580000,
- 0x4c500000, 0x4c540000, 0x912c3c06, 0x401ca000,
- 0x401ca800, 0x5820280b, 0x6008b000, 0x82143580,
- 0x70000000, 0x05000002, 0x603cb000, 0x0535fe0c,
- 0x5c00a800, 0x5c00a000, 0x5c00b000, 0x401c0000,
- 0x58201007, 0x58201808, 0x58202206, 0x80102102,
- 0x82143580, 0x70000000, 0x05020005, 0x90103482,
- 0x05f41556, 0x60080800, 0x0501f069, 0x82143580,
- 0x72000000, 0x05f60551, 0x901034aa, 0x05f4154f,
- 0x603c0800, 0x0501f862, 0x4a01d808, 0x00103559,
- 0x1c01f000, 0x4031d800, 0x58ef400a, 0x58ee580d,
- 0x58ec0002, 0x82000580, 0x00000200, 0x05f40537,
- 0x592e5800, 0x912c0c06, 0x4c580000, 0x4c500000,
- 0x4c540000, 0x4004a000, 0x4004a800, 0x603cb000,
- 0x0535fde3, 0x5c00a800, 0x5c00a000, 0x5c00b000,
- 0x40ec1000, 0x64001001, 0x64f01005, 0x48041003,
- 0x0001f81c, 0x4a01d808, 0x00103574, 0x1c01f000,
- 0x4031d800, 0x58ef400a, 0x58ee580d, 0x58ec0002,
- 0x82000580, 0x00000200, 0x05f4051c, 0x912c0c06,
- 0x4c580000, 0x4c500000, 0x4c540000, 0x4004a000,
- 0x4004a800, 0x6030b000, 0x0535fdc9, 0x5c00a800,
- 0x5c00a000, 0x5c00b000, 0x40ec1000, 0x64001001,
- 0x64c01005, 0x48041003, 0x0001f81c, 0x4a01d808,
- 0x00102255, 0x1c01f000, 0x0501f803, 0x412d8800,
- 0x1c01f000, 0x05e5ffeb, 0x0500000e, 0x497a5800,
- 0x58ec000c, 0x80000540, 0x05020004, 0x492dd80c,
- 0x492dd80d, 0x0501f006, 0x58ec000d, 0x48025800,
- 0x90000401, 0x452c0000, 0x492dd80d, 0x912c0405,
- 0x492fc857, 0x4803c857, 0x1c01f000, 0x4d2c0000,
- 0x58ec400c, 0x802041c0, 0x05000007, 0x4823c857,
- 0x40225800, 0x592c4001, 0x497a5801, 0x05e5ffe1,
- 0x05fdf7f9, 0x4979d80c, 0x4979d80d, 0x5c025800,
- 0x1c01f000, 0x60043000, 0x0501f006, 0x60043000,
- 0x0501f005, 0x60003000, 0x0501f003, 0x60003000,
- 0x800408c4, 0x800409c0, 0x05e40c35, 0x4803c857,
- 0x4807c857, 0x480bc857, 0x480fc857, 0x481bc857,
- 0x48efc857, 0x4819d801, 0x4801d803, 0x4809d806,
- 0x480dd807, 0x4805d805, 0x40ec1000, 0x0001f81c,
- 0x4a01d808, 0x00102255, 0x1c01f000, 0x40681000,
- 0x406c1800, 0x80002d80, 0x480bc857, 0x480fc857,
- 0x4813c857, 0x4817c857, 0x8d0c0520, 0x05000004,
- 0x59a80005, 0x8c000516, 0x053205c3, 0x4d2c0000,
- 0x4da00000, 0x42034000, 0x0010ae99, 0x59a00018,
+ 0x05f1f34f, 0x59a00801, 0x80040906, 0x48074407,
+ 0x5c00c800, 0x5c00c000, 0x5c00b800, 0x05f1f305,
+ 0x05f9ff67, 0x05f0033d, 0x59a28800, 0x59a24003,
+ 0x59a24805, 0x05fdf79c, 0x8d0c050e, 0x05000003,
+ 0x64074407, 0x05f1f33e, 0x59a80249, 0x8c00050a,
+ 0x05020005, 0x8c000506, 0x05020003, 0x645b4407,
+ 0x05f1f337, 0x0501f980, 0x05f2033a, 0x0501f898,
+ 0x05020003, 0x640b4407, 0x05f1f331, 0x59a00c07,
+ 0x80040902, 0x59a00408, 0x59a01208, 0x900811c0,
+ 0x80081540, 0x59a0040a, 0x59a01a0a, 0x900c19c0,
+ 0x800c1d40, 0x912c0409, 0x0501f8a9, 0x4a01d809,
+ 0x0010471a, 0x1c01f000, 0x05f9ff41, 0x05f00317,
+ 0x58ee580d, 0x592c000d, 0x59a8383d, 0x0515f9af,
+ 0x05040df4, 0x05f2031f, 0x49474001, 0x481a6802,
+ 0x592c000e, 0x82001d80, 0x70000000, 0x05020005,
+ 0x0501f877, 0x0502000c, 0x640b4407, 0x05f1f310,
+ 0x82001d80, 0x72000000, 0x05f20312, 0x0501f870,
+ 0x0502086f, 0x0502086e, 0x05020003, 0x640b4407,
+ 0x05f1f307, 0x58ee580d, 0x4a025c08, 0x00008000,
+ 0x497a5a08, 0x592c320c, 0x80183102, 0x592c1801,
+ 0x4a001809, 0x01000000, 0x0531fe1a, 0x05020003,
+ 0x640f4407, 0x05f1f2fa, 0x4a01d809, 0x00104745,
+ 0x1c01f000, 0x592c4000, 0x592c0009, 0x82000580,
+ 0x01000000, 0x05020003, 0x64134407, 0x05f1f2f0,
+ 0x4c580000, 0x4c500000, 0x4c540000, 0x912c3c09,
+ 0x401ca000, 0x401ca800, 0x5820280e, 0x6008b000,
+ 0x82143580, 0x70000000, 0x05000002, 0x603cb000,
+ 0x0545f98a, 0x5c00a800, 0x5c00a000, 0x5c00b000,
+ 0x401c0000, 0x5820100a, 0x5820180b, 0x58202209,
+ 0x80102102, 0x82143580, 0x70000000, 0x05020005,
+ 0x90103482, 0x05f012db, 0x60080800, 0x0501f061,
+ 0x82143580, 0x72000000, 0x05f202d6, 0x901034aa,
+ 0x05f012d4, 0x603c0800, 0x0501f85a, 0x4a01d809,
+ 0x00104772, 0x1c01f000, 0x05f9fee9, 0x05f002bf,
+ 0x58ee580e, 0x592e5800, 0x912c0c09, 0x4c580000,
+ 0x4c500000, 0x4c540000, 0x4004a000, 0x4004a800,
+ 0x603cb000, 0x0545f965, 0x5c00a800, 0x5c00a000,
+ 0x5c00b000, 0x40ec1000, 0x64001001, 0x64f01005,
+ 0x48041003, 0x0001f821, 0x4a01d809, 0x00104789,
+ 0x1c01f000, 0x05f9fed2, 0x05f002a8, 0x58ee580e,
+ 0x912c0c09, 0x4c580000, 0x4c500000, 0x4c540000,
+ 0x4004a000, 0x4004a800, 0x6030b000, 0x0545f94f,
+ 0x5c00a800, 0x5c00a000, 0x5c00b000, 0x40ec1000,
+ 0x64001001, 0x64c01005, 0x48041003, 0x0001f821,
+ 0x4a01d809, 0x001029f5, 0x1c01f000, 0x05e1f9e3,
+ 0x0500000e, 0x497a5800, 0x58ec000d, 0x80000540,
+ 0x05020004, 0x492dd80d, 0x492dd80e, 0x0501f006,
+ 0x58ec000e, 0x48025800, 0x90000401, 0x452c0000,
+ 0x492dd80e, 0x912c0408, 0x492fc857, 0x4803c857,
+ 0x1c01f000, 0x4d2c0000, 0x58ec400d, 0x802041c0,
+ 0x05000007, 0x4823c857, 0x40225800, 0x592c4001,
+ 0x497a5801, 0x05e1f9d9, 0x05fdf7f9, 0x4979d80d,
+ 0x4979d80e, 0x5c025800, 0x1c01f000, 0x60043000,
+ 0x0501f009, 0x60043000, 0x0501f008, 0x60003000,
+ 0x0501f006, 0x60003000, 0x800408c4, 0x0501f00b,
+ 0x60003000, 0x800408c4, 0x800409c0, 0x05dc0e0f,
+ 0x4803c857, 0x4807c857, 0x480bc857, 0x480fc857,
+ 0x481bc857, 0x48efc857, 0x4819d801, 0x4801d803,
+ 0x4809d807, 0x480dd808, 0x4805d805, 0x40ec1000,
+ 0x0001f821, 0x4a01d809, 0x001029f5, 0x1c01f000,
+ 0x80002d80, 0x480bc857, 0x480fc857, 0x4813c857,
+ 0x4817c857, 0x0001fab3, 0x0542004b, 0x4d2c0000,
+ 0x4da00000, 0x42034000, 0x0010dceb, 0x59a00018,
0x800001c0, 0x05020014, 0x05006013, 0x480bc020,
0x480fc021, 0x4813c022, 0x4817c023, 0x900811c0,
0x90081552, 0x480bc011, 0x59e00017, 0x8c00050a,
- 0x60000800, 0x0002088c, 0x8d0c0530, 0x05ee0c76,
- 0x000209af, 0x6403c017, 0x4203e000, 0x30000001,
+ 0x60000800, 0x00020892, 0x8d0c0530, 0x05e60ece,
+ 0x000209bc, 0x6403c017, 0x4203e000, 0x30000001,
0x0501f049, 0x4c040000, 0x4c1c0000, 0x80000800,
0x48074018, 0x59a0381b, 0x481fc857, 0x801c39c0,
- 0x05020023, 0x9000048a, 0x0502100e, 0x59a00019,
+ 0x05020023, 0x9000048c, 0x0502100e, 0x59a00019,
0x80000000, 0x48034019, 0x59a0021a, 0x90000402,
- 0x90000c94, 0x4803421a, 0x05001003, 0x497b421a,
+ 0x90000c97, 0x4803421a, 0x05001003, 0x497b421a,
0x41780000, 0x59a03817, 0x801c3c00, 0x0501f02c,
- 0x4803c856, 0x05e5ff73, 0x05000007, 0x492f401b,
- 0x492f401c, 0x412c3800, 0x497b421d, 0x497a5814,
+ 0x4803c856, 0x05e1f96d, 0x05000007, 0x492f401b,
+ 0x492f401c, 0x412c3800, 0x497b421d, 0x497a5817,
0x0501f023, 0x5988001e, 0x80000000, 0x4803101e,
0x59a00018, 0x80000040, 0x48034018, 0x59a0021a,
0x59a03817, 0x801c3c00, 0x0501f019, 0x59a0021d,
- 0x90000402, 0x90000c93, 0x05021004, 0x4803421d,
- 0x801c3c00, 0x0501f012, 0x05e5ff5a, 0x0502000b,
+ 0x90000402, 0x90000c96, 0x05021004, 0x4803421d,
+ 0x801c3c00, 0x0501f012, 0x05e1f954, 0x0502000b,
0x5988001e, 0x80000000, 0x4803101e, 0x59a00018,
- 0x80000040, 0x48034018, 0x4803c856, 0x59a0021d,
- 0x801c3c00, 0x0501f006, 0x492f401b, 0x492c3814,
- 0x412c3800, 0x497b421d, 0x497a5814, 0x48083c00,
+ 0x80000040, 0x48034018, 0x4803c857, 0x59a0021d,
+ 0x801c3c00, 0x0501f006, 0x492f401b, 0x492c3817,
+ 0x412c3800, 0x497b421d, 0x497a5817, 0x48083c00,
0x480c3a00, 0x48103c01, 0x48143a01, 0x5c003800,
0x5c000800, 0x5c034000, 0x5c025800, 0x1c01f000,
- 0x40681800, 0x406c2000, 0x40703000, 0x480fc857,
- 0x4813c857, 0x481bc857, 0x42000000, 0x0010b293,
- 0x0535fc01, 0x801800d0, 0x81202d40, 0x60501100,
- 0x05fdf786, 0x4c000000, 0x599c0017, 0x8c000512,
- 0x5c000000, 0x1c01f000, 0x4c000000, 0x599c0018,
- 0x8c00050e, 0x5c000000, 0x1c01f000, 0x8d0c050e,
- 0x05000003, 0x64074407, 0x05f5f448, 0x916c0583,
- 0x05000003, 0x641f4407, 0x05f5f444, 0x59a24805,
- 0x59240400, 0x8c000508, 0x05020003, 0x64234407,
- 0x05f5f43e, 0x59340405, 0x8c000508, 0x05020003,
- 0x8c00050a, 0x05fe02e1, 0x497a5a05, 0x497a5806,
- 0x4a025c05, 0x00008000, 0x0525ffb4, 0x05020003,
- 0x640f4407, 0x05f5f431, 0x4a01d808, 0x00103671,
- 0x1c01f000, 0x592c0006, 0x82000580, 0x01000000,
- 0x05020003, 0x64134407, 0x05f5f428, 0x59a28c07,
- 0x59a2440b, 0x0505ff57, 0x05f60428, 0x05fdf2cb,
- 0x4c040000, 0x59a2440b, 0x42000000, 0x0010b390,
- 0x50000000, 0x81200480, 0x0502100d, 0x83200c00,
- 0x0010a3b3, 0x50064800, 0x812649c0, 0x05000008,
- 0x59240200, 0x8c000500, 0x05000005, 0x49274005,
- 0x80000580, 0x5c000800, 0x1c01f000, 0x90000541,
- 0x05fdf7fd, 0x61be880f, 0x0001fae7, 0x05100e70,
- 0x81468840, 0x05fe17fd, 0x1c01f000, 0x4803c856,
- 0x4c0c0000, 0x4d340000, 0x4d440000, 0x61fa880f,
- 0x60024000, 0x0505ff33, 0x05020006, 0x5934180a,
- 0x900c1d01, 0x900c1d81, 0x606c1100, 0x05fdff2a,
- 0x5c028800, 0x5c026800, 0x5c001800, 0x1c01f000,
- 0x48efc857, 0x05011000, 0x48efc840, 0x643fc842,
- 0x40000000, 0x05fd17ff, 0x4a01d80e, 0xbeefbeef,
+ 0x480fc857, 0x4813c857, 0x481bc857, 0x42000000,
+ 0x0010e40c, 0x0541ff8f, 0x801800d0, 0x81202d40,
+ 0x60501100, 0x05fdf78c, 0x4c000000, 0x599c0017,
+ 0x8c000512, 0x5c000000, 0x1c01f000, 0x4c000000,
+ 0x599c0018, 0x8c00050e, 0x5c000000, 0x1c01f000,
+ 0x8d0c050e, 0x05000003, 0x64074407, 0x05f1f1dc,
+ 0x916c0583, 0x05000003, 0x641f4407, 0x05f1f1d8,
+ 0x59a24805, 0x59240400, 0x8c000508, 0x05020003,
+ 0x64234407, 0x05f1f1d2, 0x59340405, 0x8c000508,
+ 0x05020003, 0x8c00050a, 0x05fe02f9, 0x497a5a08,
+ 0x497a5809, 0x4a025c08, 0x00008000, 0x0531fd79,
+ 0x05020003, 0x640f4407, 0x05f1f1c5, 0x4a01d809,
+ 0x0010487a, 0x1c01f000, 0x592c0009, 0x82000580,
+ 0x01000000, 0x05020003, 0x64134407, 0x05f1f1bc,
+ 0x59a28c07, 0x59a2440b, 0x0509f9f7, 0x05f201bd,
+ 0x05fdf2e3, 0x4c040000, 0x59a2440b, 0x42000000,
+ 0x0010e511, 0x50000000, 0x81200480, 0x0502100d,
+ 0x83200c00, 0x0010d17b, 0x50064800, 0x812649c0,
+ 0x05000008, 0x59240200, 0x8c000500, 0x05000005,
+ 0x49274005, 0x80000580, 0x5c000800, 0x1c01f000,
+ 0x90000541, 0x05fdf7fd, 0x61be880f, 0x0001fb00,
+ 0x05140e31, 0x81468840, 0x05fe17fd, 0x1c01f000,
+ 0x4803c856, 0x4c0c0000, 0x4d340000, 0x4d440000,
+ 0x61fa880f, 0x60024000, 0x0509f9d3, 0x0502000a,
+ 0x5934180a, 0x900c1d01, 0x900c1d81, 0x60002000,
+ 0x0501fa6c, 0x05000002, 0x60042000, 0x606c1100,
+ 0x05fdff2c, 0x5c028800, 0x5c026800, 0x5c001800,
+ 0x1c01f000, 0x48efc857, 0x05011000, 0x48efc840,
+ 0x6443c842, 0x40000000, 0x05fd17ff, 0x42000000,
+ 0x0010dd60, 0x50000000, 0x80000540, 0x05000003,
+ 0x5800000b, 0x4801d806, 0x4a01d80f, 0xbeefbeef,
0x1c01f000, 0x497b4000, 0x497b4001, 0x497b4002,
0x497b4003, 0x497b4004, 0x497b4005, 0x1c01f000,
- 0x42002000, 0x00110514, 0x41580000, 0x41781000,
+ 0x42002000, 0x00111b00, 0x41580000, 0x41781000,
0x58100c07, 0x800409c0, 0x0500000c, 0x90041d83,
0x0500000a, 0x90041c86, 0x05001007, 0x90041d8a,
0x05000005, 0x90041c8f, 0x05001004, 0x90041c92,
0x05021002, 0x80081000, 0x90102430, 0x80100c80,
- 0x05fc17f0, 0x40080000, 0x59a81266, 0x80080480,
+ 0x05fc17f0, 0x40080000, 0x59a8129c, 0x80080480,
0x05021002, 0x41780000, 0x81640480, 0x05021002,
- 0x41780000, 0x1c01f000, 0x05f1fc17, 0x05020015,
- 0x59a8685c, 0x82346d80, 0x3261103c, 0x05020011,
- 0x0535fc91, 0x0500000d, 0x605c70f4, 0x50386800,
+ 0x41780000, 0x1c01f000, 0x05e9fe96, 0x05020015,
+ 0x59a86892, 0x82346d80, 0x3261103c, 0x05020011,
+ 0x0545f80f, 0x0500000d, 0x605c70f4, 0x50386800,
0x82347500, 0x03f00000, 0x82387580, 0x00400000,
0x05020007, 0x82347500, 0x000f0000, 0x82387580,
0x00010000, 0x05000002, 0x90000541, 0x64030000,
- 0x1c01f000, 0x05f1fc00, 0x05020004, 0x59a8685c,
- 0x82347580, 0x01651077, 0x1c01f000, 0x0501f805,
- 0x60058800, 0x05000002, 0x60018800, 0x1c01f000,
- 0x05f1fbf5, 0x0502000a, 0x59a8685c, 0x82347580,
- 0x01661077, 0x05000006, 0x82347580, 0x01681077,
- 0x05000003, 0x82347580, 0x01761077, 0x1c01f000,
- 0x0501f805, 0x60058800, 0x05000002, 0x60018800,
- 0x1c01f000, 0x05f1fbe4, 0x05020007, 0x59a8685c,
+ 0x1c01f000, 0x05e9fe7f, 0x05020004, 0x59a86892,
+ 0x82347580, 0x01651077, 0x1c01f000, 0x05e9fe79,
+ 0x0502000d, 0x59a86892, 0x82347580, 0x01751077,
+ 0x05000009, 0x82347580, 0x01661077, 0x05000006,
0x82347580, 0x01681077, 0x05000003, 0x82347580,
- 0x01761077, 0x1c01f000, 0x4803c856, 0x05fdfff6,
- 0x65034407, 0x05f60389, 0x59a0020b, 0x4803c857,
- 0x800001c0, 0x05f40389, 0xb0000485, 0x05f61387,
- 0x59a0220c, 0x8c100500, 0x0502001b, 0x4803c856,
- 0x05fdfe71, 0x05020004, 0x640b4407, 0x4803c856,
- 0x05f5f37a, 0x59a00c0b, 0x59a01a0b, 0x59a0220c,
- 0x59a02c07, 0x912e5c02, 0x412cc800, 0x4807c857,
- 0x480fc857, 0x4813c857, 0x4817c857, 0x4867c857,
- 0x0501f8cf, 0x05000017, 0x59a00a0b, 0x59a01008,
+ 0x01761077, 0x1c01f000, 0x05e9fe6a, 0x05020007,
+ 0x59a86892, 0x82347580, 0x01681077, 0x05000003,
+ 0x82347580, 0x01761077, 0x1c01f000, 0x05e9fe61,
+ 0x05020004, 0x59a86892, 0x82347580, 0x01751077,
+ 0x1c01f000, 0x05fdfffa, 0x05000003, 0x80000580,
+ 0x0501f00d, 0x59a00c07, 0x82040580, 0x000000a0,
+ 0x05000009, 0x82040580, 0x000000e0, 0x05000006,
+ 0x82040580, 0x000000d0, 0x05000003, 0x82040580,
+ 0x00000098, 0x1c01f000, 0x59a0020c, 0x8c00051a,
+ 0x1c01f000, 0x4803c856, 0x05fdffdc, 0x05000005,
+ 0x0501f88d, 0x05000003, 0x65034407, 0x05f1f0fc,
+ 0x59a0020b, 0x4803c857, 0x800001c0, 0x05f000fd,
+ 0xb0000485, 0x05f210fb, 0x59a0220c, 0x8c100500,
+ 0x0502001d, 0x4803c856, 0x05fdfe55, 0x05020004,
+ 0x640b4407, 0x4803c856, 0x05f1f0ed, 0x05edf80f,
+ 0x59a00c0b, 0x59a01a0b, 0x59a0220c, 0x59a02c07,
+ 0x912e5c05, 0x412cc800, 0x4807c857, 0x480fc857,
+ 0x4813c857, 0x4817c857, 0x4867c857, 0x0501f916,
+ 0x64030000, 0x0500001f, 0x59a00a0b, 0x59a01008,
0x900811c0, 0x59a0180a, 0x900c19c0, 0x412c0000,
- 0x05fdf67d, 0x4807c856, 0x59a00c0b, 0x59a01a0b,
- 0x900c0581, 0x05f60365, 0x59a02c07, 0x91a0cc07,
- 0x4807c857, 0x4813c857, 0x4817c857, 0x0501f8bc,
- 0x05000004, 0x59a00a07, 0x48074407, 0x05f5f315,
- 0x64134407, 0x05f5f355, 0x59a0220c, 0x4813c857,
- 0x05fdffbd, 0x65034407, 0x05f60350, 0x59a00c0b,
- 0x4807c857, 0x8c100500, 0x0502001b, 0x05fdfe3e,
- 0x05020003, 0x640b4407, 0x05f5f348, 0x59a00a0b,
- 0xb0040485, 0x05f61349, 0x59a01008, 0x900811c0,
- 0x59a0180a, 0x900c19c0, 0x912c0402, 0x05fdfe54,
- 0x4a01d808, 0x00103763, 0x1c01f000, 0x4031d800,
- 0x58ef400a, 0x58ee580c, 0x58ec0002, 0x82000580,
- 0x00000200, 0x05f4032d, 0x912c1402, 0x59a01a0b,
- 0x0501f003, 0x91a0140b, 0x60041800, 0x59a00c0b,
+ 0x05fdf65f, 0x4807c856, 0x59a00c0b, 0x59a01a0b,
+ 0x900c0581, 0x05f200d7, 0x4c040000, 0x4c0c0000,
+ 0x4c100000, 0x05e9fff1, 0x5c002000, 0x5c001800,
+ 0x5c000800, 0x59a02c07, 0x91a0cc07, 0x4807c857,
+ 0x4813c857, 0x4817c857, 0x0501f8fb, 0x64030000,
+ 0x05000004, 0x59a00a07, 0x48074407, 0x05f1f07d,
+ 0x64134407, 0x05f1f0be, 0x59a0220c, 0x4813c857,
+ 0x05fdff96, 0x05000005, 0x0501f847, 0x05000003,
+ 0x65034407, 0x05f1f0b6, 0x59a00c0b, 0x4807c857,
+ 0x8c100500, 0x05020017, 0x05fdfe15, 0x05020003,
+ 0x640b4407, 0x05f1f0ae, 0x59a00a0b, 0xb0040485,
+ 0x05f210b0, 0x59a01008, 0x900811c0, 0x59a0180a,
+ 0x900c19c0, 0x912c0405, 0x05fdfe2b, 0x4a01d809,
+ 0x0010499a, 0x1c01f000, 0x05f9fcc1, 0x05f00097,
+ 0x58ee580d, 0x912c1405, 0x59a01a0b, 0x0501f003,
+ 0x91a0140b, 0x60041800, 0x4c080000, 0x4c0c0000,
+ 0x05e9ffba, 0x5c001800, 0x5c001000, 0x59a00c0b,
0x59a0220c, 0x59a02c07, 0x4807c857, 0x480bc857,
0x50080000, 0x82000500, 0x000000ff, 0x4803c857,
- 0x480fc857, 0x4813c857, 0x4817c857, 0x0501f830,
- 0x64134407, 0x05f40321, 0x05f5f2de, 0x05fdff8a,
- 0x0502000d, 0x4803c856, 0x61c0083f, 0x61c4103f,
- 0x64000800, 0x46001000, 0x000001a7, 0x64040800,
- 0x64041000, 0x64080800, 0x50080000, 0x8400054e,
- 0x44001000, 0x1c01f000, 0x4803c856, 0x4c5c0000,
- 0x64103000, 0x60e0b817, 0x05f1f979, 0x805cb840,
+ 0x480fc857, 0x4813c857, 0x4817c857, 0x0501f84f,
+ 0x64030000, 0x05f20043, 0x64134407, 0x05f1f084,
+ 0x05fdff5e, 0x05000003, 0x0501f80f, 0x0502000d,
+ 0x4803c856, 0x61c0083f, 0x61c4103f, 0x64000800,
+ 0x46001000, 0x000001a7, 0x64040800, 0x64041000,
+ 0x64080800, 0x50080000, 0x8400054e, 0x44001000,
+ 0x1c01f000, 0x59a80092, 0x82000580, 0x338e103c,
+ 0x1c01f000, 0x4803c856, 0x4c5c0000, 0x64103000,
+ 0x4200b800, 0x000f4240, 0x05e9fbd9, 0x805cb840,
0x05000005, 0x501c6800, 0x90346d02, 0x05fe07fb,
0x90346d41, 0x485fc857, 0x5c00b800, 0x1c01f000,
- 0x4803c856, 0x4c5c0000, 0x64103000, 0x60e0b817,
- 0x05f1f96b, 0x805cb840, 0x05000006, 0x501c6800,
- 0x82346d00, 0x00000082, 0x05fe07fa, 0x90346d41,
- 0x485fc857, 0x5c00b800, 0x1c01f000, 0x4803c856,
- 0x4c5c0000, 0x61c0303f, 0x61c4383f, 0x64103000,
- 0x61a0b807, 0x805cb840, 0x0500004b, 0x501c0000,
- 0x8c00050c, 0x05fe07fc, 0x640c3000, 0x46003800,
- 0x000000a0, 0x64103000, 0x46003800, 0x00000090,
- 0x05fdffe0, 0x05000040, 0x8c10051c, 0x05000008,
- 0x640c3000, 0x4807c857, 0x44043800, 0x64103000,
- 0x64403800, 0x05fdffd7, 0x05000037, 0x800c19c0,
- 0x05000033, 0x640c3000, 0x5008b800, 0x445c3800,
- 0x485fc857, 0x480fc857, 0x800c1840, 0x05000028,
- 0x64103000, 0x64403800, 0x05fdffca, 0x0500002a,
- 0x640c3000, 0x805cb910, 0x445c3800, 0x485fc857,
- 0x480fc857, 0x800c1840, 0x0500001d, 0x64103000,
- 0x64403800, 0x05fdffbf, 0x0500001f, 0x640c3000,
- 0x805cb910, 0x445c3800, 0x485fc857, 0x480fc857,
- 0x800c1840, 0x05000012, 0x64103000, 0x64403800,
- 0x05fdffb4, 0x05000014, 0x640c3000, 0x805cb910,
+ 0x4803c856, 0x4c5c0000, 0x64103000, 0x4200b800,
+ 0x000f4240, 0x05e9fbca, 0x805cb840, 0x05000006,
+ 0x501c6800, 0x82346d00, 0x00000082, 0x05fe07fa,
+ 0x90346d41, 0x485fc857, 0x5c00b800, 0x1c01f000,
+ 0x4803c856, 0x4c5c0000, 0x4c600000, 0x6000b8f8,
+ 0x4200c000, 0x000f4240, 0x6404b800, 0x40000000,
+ 0x8060c040, 0x05000004, 0x505c0000, 0x8c000500,
+ 0x05fc07fa, 0x5c00c000, 0x5c00b800, 0x1c01f000,
+ 0x4803c856, 0x4c5c0000, 0x6000b8f8, 0x4578b800,
+ 0x5c00b800, 0x1c01f000, 0x4803c856, 0x05fdffe9,
+ 0x0500006a, 0x4c5c0000, 0x61c0303f, 0x61c4383f,
+ 0x64103000, 0x4200b800, 0x000f4240, 0x805cb840,
+ 0x60080000, 0x0500004f, 0x501c0000, 0x8c00050c,
+ 0x05fe07fb, 0x640c3000, 0x4817c857, 0x05fdffb6,
+ 0x05000002, 0x60802801, 0x44143800, 0x64103000,
+ 0x46003800, 0x00000090, 0x05fdffc2, 0x05000054,
+ 0x8c10051c, 0x05000008, 0x640c3000, 0x4807c857,
+ 0x44043800, 0x64103000, 0x64403800, 0x05fdffb9,
+ 0x0500004b, 0x800c19c0, 0x05000033, 0x640c3000,
+ 0x5008b800, 0x445c3800, 0x485fc857, 0x480fc857,
+ 0x800c1840, 0x05000028, 0x64103000, 0x64403800,
+ 0x05fdffac, 0x0500003e, 0x640c3000, 0x805cb910,
0x445c3800, 0x485fc857, 0x480fc857, 0x800c1840,
- 0x05000007, 0x64103000, 0x64403800, 0x05fdffa9,
- 0x05000009, 0x80081000, 0x05fdf7d3, 0x64103000,
- 0x65403800, 0x05fdffa3, 0x05000003, 0x90000541,
- 0x4803c856, 0x5c00b800, 0x1c01f000, 0x4803c856,
- 0x4c5c0000, 0x4c600000, 0x400c6000, 0x61c0303f,
- 0x61c4383f, 0x64103000, 0x61a0b807, 0x805cb840,
- 0x05000088, 0x501c0000, 0x4803c857, 0x8c00050c,
- 0x05fe07fb, 0x8c10051c, 0x05000014, 0x640c3000,
- 0x50180000, 0x4803c857, 0x501c0000, 0x4803c857,
- 0x46003800, 0x000000a0, 0x64103000, 0x46003800,
- 0x00000090, 0x05fdff83, 0x05000076, 0x640c3000,
- 0x4807c857, 0x44043800, 0x64103000, 0x64403800,
- 0x05fdff7c, 0x0500006f, 0x640c3000, 0x46003800,
- 0x000000a1, 0x64103000, 0x46003800, 0x00000090,
- 0x05fdff74, 0x05000067, 0x800c19c0, 0x05e409c4,
- 0x4178b800, 0x900c1581, 0x05000040, 0x64103000,
- 0x64803800, 0x05fdff5d, 0x0500005e, 0x640c3000,
+ 0x0500001d, 0x64103000, 0x64403800, 0x05fdffa1,
+ 0x05000033, 0x640c3000, 0x805cb910, 0x445c3800,
+ 0x485fc857, 0x480fc857, 0x800c1840, 0x05000012,
+ 0x64103000, 0x64403800, 0x05fdff96, 0x05000028,
+ 0x640c3000, 0x805cb910, 0x445c3800, 0x485fc857,
+ 0x480fc857, 0x800c1840, 0x05000007, 0x64103000,
+ 0x64403800, 0x05fdff8b, 0x0500001d, 0x80081000,
+ 0x05fdf7d3, 0x64103000, 0x65403800, 0x05fdff85,
+ 0x05000017, 0x90000541, 0x4803c856, 0x0501f011,
+ 0x4803c857, 0x64103000, 0x65403800, 0x05fdff7d,
+ 0x64103000, 0x4200b800, 0x000f4240, 0x805cb840,
+ 0x05000005, 0x501c0000, 0x8c00050c, 0x05fe07fc,
+ 0x05fdf7a9, 0x4803c857, 0x05ddfb70, 0x4803c856,
+ 0x5c00b800, 0x05fdff8f, 0x1c01f000, 0x600c0000,
+ 0x05fdf7fb, 0x4803c856, 0x05fdff7a, 0x60040000,
+ 0x0500009c, 0x4c5c0000, 0x4c600000, 0x400c6000,
+ 0x61c0303f, 0x61c4383f, 0x64103000, 0x4200b800,
+ 0x000f4240, 0x805cb840, 0x60080000, 0x0500008e,
+ 0x501c0000, 0x4803c857, 0x8c00050c, 0x05fe07fa,
+ 0x8c10051c, 0x05000017, 0x640c3000, 0x50180000,
+ 0x4803c857, 0x501c0000, 0x4803c857, 0x4817c857,
+ 0x05fdff3d, 0x05000002, 0x60802801, 0x44143800,
+ 0x64103000, 0x46003800, 0x00000090, 0x05fdff49,
+ 0x0500007d, 0x640c3000, 0x4807c857, 0x44043800,
+ 0x64103000, 0x64403800, 0x05fdff42, 0x05000076,
+ 0x640c3000, 0x80142800, 0x05fdff2b, 0x05000002,
+ 0x60842801, 0x44143800, 0x64103000, 0x46003800,
+ 0x00000090, 0x05fdff37, 0x0500006b, 0x800c19c0,
+ 0x05dc0b32, 0x4178b800, 0x900c1581, 0x05000040,
+ 0x64103000, 0x64803800, 0x05fdff1f, 0x05000062,
+ 0x640c3000, 0x501c0800, 0x4807c857, 0x9c0409c0,
+ 0x8004bd57, 0x485fc857, 0x480fc857, 0x805cb910,
+ 0x800c1840, 0x900c1581, 0x05000031, 0x64103000,
+ 0x64803800, 0x05fdff10, 0x05000053, 0x640c3000,
0x501c0800, 0x4807c857, 0x9c0409c0, 0x8004bd57,
0x485fc857, 0x480fc857, 0x805cb910, 0x800c1840,
- 0x900c1581, 0x05000031, 0x64103000, 0x64803800,
- 0x05fdff4e, 0x0500004f, 0x640c3000, 0x501c0800,
+ 0x900c1581, 0x05000022, 0x64103000, 0x64803800,
+ 0x05fdff01, 0x05000044, 0x640c3000, 0x501c0800,
0x4807c857, 0x9c0409c0, 0x8004bd57, 0x485fc857,
0x480fc857, 0x805cb910, 0x800c1840, 0x900c1581,
- 0x05000022, 0x64103000, 0x64803800, 0x05fdff3f,
- 0x05000040, 0x640c3000, 0x501c0800, 0x4807c857,
+ 0x05000013, 0x64103000, 0x64803800, 0x05fdfef2,
+ 0x05000035, 0x640c3000, 0x501c0800, 0x4807c857,
0x9c0409c0, 0x8004bd57, 0x485fc857, 0x480fc857,
- 0x805cb910, 0x800c1840, 0x900c1581, 0x05000013,
- 0x64103000, 0x64803800, 0x05fdff30, 0x05000031,
- 0x640c3000, 0x501c0800, 0x4807c857, 0x9c0409c0,
- 0x8004bd57, 0x485fc857, 0x480fc857, 0x445cc800,
- 0x8064c800, 0x4178b800, 0x800c1840, 0x900c1581,
- 0x05000002, 0x05fdf7c2, 0x64103000, 0x65a03800,
- 0x05fdff1e, 0x0500001f, 0x640c3000, 0x501c0800,
- 0x4807c857, 0x82040d00, 0x000000ff, 0x9c0409c0,
- 0x8004bd57, 0x4807c857, 0x485fc857, 0x4863c857,
- 0x4867c857, 0x480fc857, 0x40301000, 0x41780800,
- 0x60100000, 0x0511fe7d, 0x4807c857, 0x800409c0,
- 0x05000006, 0x60100000, 0x80000c81, 0x805cb910,
- 0x80040840, 0x05fe07fe, 0x445cc800, 0x485fc857,
- 0x4863c857, 0x4867c857, 0x90000541, 0x4803c856,
- 0x5c00c000, 0x5c00b800, 0x1c01f000, 0x0501f805,
- 0x60058800, 0x05000002, 0x60018800, 0x1c01f000,
- 0x60003020, 0x80183040, 0x05000010, 0x0535fad2,
- 0x05fc07fd, 0x05e5fdfa, 0x605430f4, 0x50183800,
- 0x821c0500, 0x00007000, 0x05000006, 0x48035094,
- 0x821c0500, 0xffff8fff, 0x44003000, 0x80000580,
- 0x64030000, 0x1c01f000, 0x4803c856, 0x4a034408,
- 0x0000cccc, 0x90000541, 0x05fdf7fa, 0x0535fabe,
- 0x05fc07ff, 0x600008f4, 0x58040015, 0x82000500,
- 0xffff8fff, 0x59a81094, 0x80080540, 0x48000815,
- 0x64030000, 0x1c01f000, 0x59a80005, 0x8c000514,
- 0x05000005, 0x42000000, 0x0010aed8, 0x50000000,
- 0x90000528, 0x1c01f000, 0x59c400a4, 0x4c580000,
- 0x4c500000, 0x4c540000, 0x9000050f, 0x90000487,
- 0x05001008, 0x90006c87, 0x05e61925, 0x0c01f807,
- 0x5c00a800, 0x5c00a000, 0x5c00b000, 0x1c01f000,
- 0x0501f8e9, 0x05fdf7fb, 0x001038d9, 0x001038df,
- 0x00103903, 0x0010391d, 0x001039bf, 0x001038d8,
- 0x1c01f000, 0x59c40806, 0x8c040500, 0x05020003,
- 0x84040d40, 0x48078806, 0x1c01f000, 0x59c40005,
- 0x8c000534, 0x0502069e, 0x4a038805, 0xffffffff,
- 0x42006000, 0x00020000, 0x0501fe80, 0x59a80015,
- 0x82000500, 0xfffffffa, 0x84000542, 0x48035015,
- 0x497b521b, 0x42000800, 0x0010cea4, 0x45780800,
- 0x497b5073, 0x42000000, 0x0010b38f, 0x46000000,
- 0x0000ffff, 0x42006000, 0xffefffff, 0x42006800,
- 0x40000000, 0x0501fe67, 0x59c40006, 0x82000500,
- 0xffffff0f, 0x48038806, 0x60400800, 0x42001000,
- 0x00103ecb, 0x0511fbdc, 0x0501f001, 0x42006000,
- 0xffffffff, 0x42006800, 0x00800000, 0x0501fe59,
- 0x6120b001, 0x59c400a4, 0x9000050f, 0x9000058a,
- 0x0500000d, 0x8058b040, 0x05fe07fb, 0x497b5010,
- 0x42006000, 0xbf7fffff, 0x42006800, 0x00018000,
- 0x0501fe4c, 0x42006000, 0xfffeffff, 0x41786800,
- 0x0501f648, 0x497b5010, 0x64035072, 0x80000580,
- 0x0501f651, 0x4a038805, 0xffffffff, 0x59a80072,
- 0x90000c84, 0x05e618ce, 0x0c01f001, 0x00103926,
- 0x0010394c, 0x001039b8, 0x4803c856, 0x59c400a3,
- 0x8400051e, 0x480388a3, 0x64075072, 0x59c40008,
- 0x82000540, 0x00000280, 0x48038808, 0x0501fe19,
- 0x42007800, 0x0010af05, 0x4a007806, 0x11010000,
- 0x4200a000, 0x0010b392, 0x4200a800, 0x0010af0c,
- 0x6008b000, 0x0535f9d7, 0x59c40802, 0x84040d0c,
- 0x48078802, 0x600c0800, 0x497b507c, 0x0501fd0e,
- 0x6407507c, 0x497b5077, 0x0501fe31, 0x42006000,
- 0xffffffff, 0x42006800, 0x00080000, 0x0501fe19,
- 0x42006000, 0xfff7ffff, 0x41786800, 0x0501f615,
- 0x59a80077, 0x497b5077, 0x80002540, 0x0500005e,
- 0x59c40004, 0x90000503, 0x05020065, 0x59a80815,
- 0x8c040502, 0x05000049, 0x9010058c, 0x0502004c,
- 0x90100418, 0x8000b104, 0x41cc1000, 0x42001800,
- 0x0010af05, 0x50080800, 0x500c0000, 0x80040580,
- 0x05020019, 0x80081000, 0x800c1800, 0x8058b040,
- 0x05fe07f9, 0x0501fe0e, 0x59c80015, 0x84000508,
- 0x48039015, 0x42006000, 0xffffffff, 0x42006800,
- 0x00500000, 0x0501fdf3, 0x640b5072, 0x640b5010,
- 0x05edfcbc, 0x6140080f, 0x42001000, 0x00103e29,
- 0x0511fcaa, 0x59a80015, 0x84000506, 0x48035015,
- 0x0501f5d0, 0x59cc0806, 0x82040d80, 0x11010000,
- 0x05020027, 0x59cc0800, 0x82040500, 0x00ffffff,
- 0x05000018, 0x82000580, 0x000000ef, 0x05020015,
- 0x59cc0801, 0x82040500, 0x00ffffff, 0x82000580,
- 0x000000ef, 0x0502000f, 0x91cca407, 0x4200a800,
- 0x0010b392, 0x6008b000, 0x50500800, 0x50540000,
- 0x80040480, 0x05001007, 0x05020011, 0x8050a000,
- 0x8054a800, 0x8058b040, 0x05fe07f8, 0x0501f00c,
- 0x59a80015, 0x84000502, 0x48035015, 0x59c80015,
- 0x84000508, 0x48039015, 0x41cca000, 0x4200a800,
- 0x0010af05, 0x6024b000, 0x0535f96e, 0x0501fdd0,
- 0x42006000, 0xffffffff, 0x42006800, 0x00080000,
- 0x0501fdb8, 0x42006000, 0xfff7ffff, 0x41786800,
- 0x0501fdb4, 0x42006000, 0xffffffff, 0x60006880,
- 0x0501fdb0, 0x59c40004, 0x90000503, 0x05020004,
- 0x497b5077, 0x600c0800, 0x0501f497, 0x1c01f000,
- 0x1c01f000, 0x59a80010, 0x90006d8f, 0x05000003,
- 0x9000059b, 0x05020c62, 0x1c01f000, 0x59a80015,
- 0x84000506, 0x48035015, 0x497b507c, 0x59a80010,
- 0x90000c9e, 0x05e6182a, 0x0c01f001, 0x001039f6,
- 0x00103a06, 0x00103a28, 0x00103a42, 0x00103a60,
- 0x00103a63, 0x00103a66, 0x00103a69, 0x00103a6c,
- 0x00103a80, 0x00103a83, 0x00103ad7, 0x00103ada,
- 0x00103ae7, 0x00103aea, 0x00103afc, 0x00103b01,
- 0x00103b50, 0x00103b77, 0x00103bef, 0x00103c16,
- 0x00103c65, 0x00103cab, 0x00103cf9, 0x00103d17,
- 0x00103d59, 0x00103d77, 0x00103d87, 0x00103d88,
- 0x4803c856, 0x601ed800, 0x0509f94c, 0x05000006,
- 0x42006000, 0xffffffd7, 0x41786800, 0x0501fd75,
- 0x0501f009, 0x59c40006, 0x82000500, 0xffffff0f,
- 0x48038806, 0x4a038805, 0x000000f0, 0x0509fc9a,
- 0x0509f8b3, 0x1c01f000, 0x4803c856, 0x42006000,
- 0xbf7fffff, 0x42006800, 0x00400000, 0x0501fd65,
- 0x05edfc30, 0x64075010, 0x42001000, 0x00103ecb,
- 0x0511fafb, 0x0501fcd3, 0x6140080f, 0x42001000,
- 0x00103e29, 0x0511f419, 0x59a80077, 0x90000594,
- 0x0502001e, 0x4803c857, 0x42006000, 0xffbfffff,
- 0x41786800, 0x0501fd53, 0x59c40004, 0x90000503,
- 0x05020016, 0x42001000, 0x00103e29, 0x0511fad5,
- 0x59cc1006, 0x82081580, 0x11020000, 0x05020010,
- 0x59cc1007, 0x8c08053e, 0x0500000a, 0x59a80015,
- 0x8c000504, 0x05020007, 0x42000000, 0x0010b224,
- 0x0535f825, 0x59a80015, 0x84000544, 0x48035015,
- 0x64435010, 0x0501f0dc, 0x1c01f000, 0x0501f3f8,
- 0x4803c856, 0x640f5010, 0x42006000, 0xbf3fffff,
- 0x42006800, 0x00100000, 0x0501fd32, 0x42001000,
- 0x00103ecb, 0x0511faca, 0x0501fca2, 0x42001000,
- 0x00103e29, 0x0511fab3, 0x59a8041b, 0x90000528,
- 0x05000004, 0x42000800, 0xffffd815, 0x05f1fdf7,
- 0x42007800, 0x0010af0b, 0x46007800, 0x11020000,
- 0x60140800, 0x0501f40c, 0x59a80077, 0x80000540,
- 0x0500001a, 0x4803c857, 0x42001000, 0x00103e29,
- 0x0511faa0, 0x59a80077, 0x90000594, 0x05020014,
- 0x59cc1006, 0x82081580, 0x11020000, 0x05020010,
- 0x59cc1007, 0x8c08053e, 0x0500000a, 0x59a80015,
- 0x8c000504, 0x05020007, 0x42000000, 0x0010b224,
- 0x0531ffed, 0x59a80015, 0x84000544, 0x48035015,
- 0x64135010, 0x0501f003, 0x1c01f000, 0x0501f3c0,
- 0x4803c856, 0x64175010, 0x0501f117, 0x4c5c0000,
- 0x6004b800, 0x0501f0ed, 0x4803c856, 0x641f5010,
- 0x0501f1b0, 0x4c5c0000, 0x6004b800, 0x0501f186,
- 0x4803c856, 0x64275010, 0x91cca406, 0x4200a800,
- 0x0010af0b, 0x6014b000, 0x0535f89e, 0x42007800,
- 0x0010af0b, 0x46007800, 0x11050100, 0x8d0c0506,
- 0x05000243, 0x60140800, 0x0501fbd3, 0x4d3c0000,
- 0x60067800, 0x0529fb91, 0x5c027800, 0x1c01f000,
- 0x4c5c0000, 0x6004b800, 0x0501f1e5, 0x4803c856,
- 0x642f5010, 0x42001000, 0x0010af0c, 0x4008a800,
- 0x6080b000, 0x4600a800, 0xffffffff, 0x8054a800,
- 0x8058b040, 0x05fe07fc, 0x42007800, 0x0010af0b,
- 0x46007800, 0x11060000, 0x8d0c0506, 0x05000005,
- 0x50080000, 0x46001000, 0x00ffffff, 0x0501f03e,
- 0x42024800, 0x0010b391, 0x0535f8cc, 0x40083000,
- 0x41782800, 0x41781800, 0x41782000, 0x59240200,
- 0x8c000500, 0x05000012, 0x8c000502, 0x05000010,
- 0x801429c0, 0x05020002, 0x800c1800, 0x80142800,
- 0x59244408, 0x82204500, 0x000000ff, 0x400c0000,
- 0x50182000, 0x0c01f810, 0x80102540, 0x44103000,
- 0x800c19c0, 0x05020002, 0x80183000, 0x91264c0b,
- 0x8058b040, 0x05fe07ea, 0x50080000, 0x82000500,
- 0x00ffffff, 0x801428f0, 0x80140540, 0x44001000,
- 0x0501f019, 0x00103ac1, 0x00103ac6, 0x00103acb,
- 0x00103ad0, 0x802000f0, 0x82102500, 0x00ffffff,
- 0x800c1800, 0x1c01f000, 0x802000e0, 0x82102500,
- 0xff00ffff, 0x800c1800, 0x1c01f000, 0x802000d0,
- 0x82102500, 0xffff00ff, 0x800c1800, 0x1c01f000,
- 0x40200000, 0x82102500, 0xffffff00, 0x41781800,
- 0x1c01f000, 0x60840800, 0x0501f377, 0x4c5c0000,
- 0x6004b800, 0x0501f222, 0x4803c856, 0x64375010,
- 0x91cca406, 0x4200a800, 0x0010af0b, 0x6084b000,
- 0x0535f830, 0x42007800, 0x0010af0b, 0x46007800,
- 0x11070000, 0x60840800, 0x0501f367, 0x4c5c0000,
- 0x6004b800, 0x0501f272, 0x4803c856, 0x90040d41,
- 0x0501fc81, 0x643f5010, 0x497b5077, 0x42006000,
- 0xffffffff, 0x42006800, 0x00300000, 0x0501fc6d,
- 0x42006000, 0xffdfffff, 0x41786800, 0x0501fc69,
- 0x6140080f, 0x42001000, 0x00103e29, 0x0511f1ca,
- 0x4803c856, 0x59a80077, 0x80000540, 0x05020320,
- 0x1c01f000, 0x4803c856, 0x64475010, 0x91cca406,
- 0x4200a800, 0x0010af0b, 0x6014b000, 0x0535f809,
- 0x4200a800, 0x0010af0b, 0x4600a800, 0x11020000,
- 0x8d0c0506, 0x05020041, 0x59a80c1b, 0x82040580,
- 0x0000ffff, 0x0500003d, 0x90040d30, 0x05000005,
- 0x42000800, 0xffffd815, 0x05f1fd1c, 0x0501f037,
- 0x59cc0007, 0x8c00053c, 0x05000034, 0x42024800,
- 0x0010b391, 0x0535f849, 0x59240200, 0xb0000d23,
- 0xb0040da3, 0x05020021, 0x59240a08, 0x42001000,
- 0x0010af0c, 0x0501fab5, 0x05000009, 0x59240c08,
- 0x05edfb1d, 0x59240200, 0x84000502, 0x84000518,
- 0x84000544, 0x48024a00, 0x0501f014, 0x59240200,
- 0x82000540, 0x00001006, 0x84000506, 0x48024a00,
- 0x48064a08, 0x82042c00, 0x001020b6, 0x50142800,
- 0x82142d00, 0x000000ff, 0x48164c08, 0x59240005,
- 0x82000500, 0x00ffff00, 0x80140d40, 0x48064805,
- 0x40140800, 0x05edfaf5, 0x91264c0b, 0x8058b040,
- 0x05fe07da, 0x42024800, 0x0010b391, 0x59242a00,
- 0x8c140502, 0x05000005, 0x8c140500, 0x05000003,
- 0x59242c08, 0x4817500f, 0x60140800, 0x0501f2fe,
- 0x4c5c0000, 0x4178b800, 0x59a80077, 0x80000540,
- 0x05000021, 0x4803c857, 0x42001000, 0x00103e29,
- 0x0511f990, 0x59a80077, 0x90000594, 0x05020019,
- 0x59cc1006, 0x82081580, 0x11030000, 0x05020015,
- 0x59cc1007, 0x8c08053e, 0x0500000a, 0x59a80015,
- 0x8c000504, 0x05020007, 0x42000000, 0x0010b224,
- 0x0531fedd, 0x59a80015, 0x84000544, 0x48035015,
- 0x805cb9c0, 0x05000004, 0x641b5010, 0x05fdfef7,
- 0x0501f005, 0x644b5010, 0x0501f805, 0x0501f002,
- 0x0501faab, 0x5c00b800, 0x1c01f000, 0x4803c856,
- 0x644f5010, 0x91cca407, 0x4200a800, 0x0010af0c,
- 0x6010b000, 0x0531ff93, 0x4200a800, 0x0010af0b,
- 0x4600a800, 0x11030000, 0x8d0c0506, 0x0502006a,
- 0x42024800, 0x0010b391, 0x0531ffe0, 0x4c600000,
- 0x4178c000, 0x59a8021b, 0x82000500, 0xfffffffc,
- 0x4803521b, 0x59240200, 0x40000800, 0x82040d00,
- 0xfffffb17, 0x48064a00, 0x8c000500, 0x05000048,
- 0x8c000518, 0x05020046, 0x8c000502, 0x05020004,
- 0x59240400, 0x8c000502, 0x05000041, 0x59240a08,
- 0x42001000, 0x0010af0c, 0x0501fa3c, 0x0500002b,
+ 0x445cc800, 0x8064c800, 0x4178b800, 0x800c1840,
+ 0x900c1581, 0x05000002, 0x05fdf7c2, 0x64103000,
+ 0x65a03800, 0x05fdfee0, 0x05000023, 0x640c3000,
+ 0x501c0800, 0x4807c857, 0x82040d00, 0x000000ff,
+ 0x9c0409c0, 0x8004bd57, 0x4807c857, 0x485fc857,
+ 0x4863c857, 0x4867c857, 0x480fc857, 0x40301000,
+ 0x41780800, 0x60100000, 0x0519fc90, 0x4807c857,
+ 0x800409c0, 0x05000006, 0x60100000, 0x80000c81,
+ 0x805cb910, 0x80040840, 0x05fe07fe, 0x445cc800,
+ 0x485fc857, 0x4863c857, 0x4867c857, 0x90000541,
+ 0x4803c856, 0x5c00c000, 0x5c00b800, 0x05fdfeed,
+ 0x1c01f000, 0x600c0000, 0x05fdf7fb, 0x4c000000,
+ 0x599c0018, 0x8c000514, 0x5c000000, 0x1c01f000,
+ 0x05fdfffb, 0x05000003, 0x59a80249, 0x8c000518,
+ 0x1c01f000, 0x599c0018, 0x8c000516, 0x05020003,
+ 0x90000541, 0x1c01f000, 0x80000580, 0x05fdf7fe,
+ 0x59a0020c, 0x8c000518, 0x1c01f000, 0x60003020,
+ 0x80183040, 0x05000010, 0x0541fdd5, 0x05fc07fd,
+ 0x05ddffa1, 0x605430f4, 0x50183800, 0x821c0500,
+ 0x00007000, 0x05000006, 0x480350d8, 0x821c0500,
+ 0xffff8fff, 0x44003000, 0x80000580, 0x64030000,
+ 0x1c01f000, 0x4803c856, 0x4a034408, 0x0000cccc,
+ 0x90000541, 0x05fdf7fa, 0x0541fdc1, 0x05fc07ff,
+ 0x600008f4, 0x58040015, 0x82000500, 0xffff8fff,
+ 0x59a810d8, 0x80080540, 0x48000815, 0x64030000,
+ 0x1c01f000, 0x59a80005, 0x8c000514, 0x05000005,
+ 0x42000000, 0x0010dd3e, 0x50000000, 0x90000528,
+ 0x1c01f000, 0x59a80092, 0x82000580, 0x041e1014,
+ 0x1c01f000, 0x4807c857, 0x480bc857, 0x480fc857,
+ 0x4c040000, 0x4c080000, 0x4c0c0000, 0x05f1ff11,
+ 0x5c001800, 0x5c001000, 0x5c000800, 0x05000003,
+ 0x80141d43, 0x05f1fed5, 0x1c01f000, 0x4807c857,
+ 0x480bc857, 0x480fc857, 0x4c040000, 0x4c080000,
+ 0x4c0c0000, 0x05f1ff03, 0x5c001800, 0x5c001000,
+ 0x5c000800, 0x05000004, 0x800c1880, 0x80141d03,
+ 0x05f1fec6, 0x1c01f000, 0x641f4407, 0x05edf6c8,
+ 0x64eb4407, 0x05edf6c6, 0x051dfcdf, 0x497b8880,
+ 0x59c400a3, 0x82000500, 0xfcf8ffff, 0x480388a3,
+ 0x05e9fecb, 0x05020003, 0x600dd000, 0x0515fc86,
+ 0x4d3c0000, 0x60067800, 0x0535faa5, 0x5c027800,
+ 0x05e9fec3, 0x0502000b, 0x59c408a3, 0x84040d72,
+ 0x480788a3, 0x6009d000, 0x0515fc7b, 0x05e9fec0,
+ 0x05de0a4e, 0x59c408a3, 0x84040d32, 0x480788a3,
+ 0x05e9feb3, 0x05020012, 0x42000000, 0x00200000,
+ 0x05e9fa27, 0x600dd000, 0x0515fc6f, 0x05e9feb4,
+ 0x0500000b, 0x59c408a3, 0x84040d72, 0x480788a3,
+ 0x6009d000, 0x0515fc68, 0x05e9fead, 0x05de0a3b,
+ 0x59c408a3, 0x84040d32, 0x480788a3, 0x1c01f000,
+ 0x59c400a4, 0x4c580000, 0x4c500000, 0x4c540000,
+ 0x9000050f, 0x90000487, 0x05001008, 0x90006c87,
+ 0x05de1a2e, 0x0c01f807, 0x5c00a800, 0x5c00a000,
+ 0x5c00b000, 0x1c01f000, 0x0501f8e9, 0x05fdf7fb,
+ 0x00104bbb, 0x00104bc1, 0x00104be5, 0x00104bff,
+ 0x00104ca1, 0x00104bba, 0x1c01f000, 0x59c40806,
+ 0x8c040500, 0x05020003, 0x84040d40, 0x48078806,
+ 0x1c01f000, 0x59c40005, 0x8c000534, 0x050206b2,
+ 0x4a038805, 0xffffffff, 0x42006000, 0x00020000,
+ 0x0501fe94, 0x59a80043, 0x82000500, 0xfffffffa,
+ 0x84000542, 0x48035043, 0x497b5249, 0x42000800,
+ 0x00110258, 0x45780800, 0x497b50b2, 0x42000000,
+ 0x0010e510, 0x46000000, 0x0000ffff, 0x42006000,
+ 0xffefffff, 0x42006800, 0x40000000, 0x0501fe7c,
+ 0x59c40006, 0x82000500, 0xffffff0f, 0x48038806,
+ 0x60400800, 0x42001000, 0x001051ae, 0x0515fabd,
+ 0x0501f001, 0x42006000, 0xffffffff, 0x42006800,
+ 0x00800000, 0x0501fe6e, 0x6120b001, 0x59c400a4,
+ 0x9000050f, 0x9000058a, 0x0500000d, 0x8058b040,
+ 0x05fe07fb, 0x497b503e, 0x42006000, 0xbf7fffff,
+ 0x42006800, 0x00018000, 0x0501fe61, 0x42006000,
+ 0xfffeffff, 0x41786800, 0x0501f65d, 0x497b503e,
+ 0x640350b1, 0x80000580, 0x0501f665, 0x4a038805,
+ 0xffffffff, 0x59a800b1, 0x90000c84, 0x05de19d7,
+ 0x0c01f001, 0x00104c08, 0x00104c2e, 0x00104c9a,
+ 0x4803c856, 0x59c400a3, 0x8400051e, 0x480388a3,
+ 0x640750b1, 0x59c40008, 0x82000540, 0x00000280,
+ 0x48038808, 0x0501fe30, 0x42007800, 0x0010e06b,
+ 0x4a007806, 0x11010000, 0x4200a000, 0x0010e513,
+ 0x4200a800, 0x0010e072, 0x6008b000, 0x0541fc8c,
+ 0x59c40802, 0x84040d0c, 0x48078802, 0x600c0800,
+ 0x497b50bc, 0x0501fd0f, 0x640750bc, 0x497b50b6,
+ 0x0501fe45, 0x42006000, 0xffffffff, 0x42006800,
+ 0x00080000, 0x0501fe2e, 0x42006000, 0xfff7ffff,
+ 0x41786800, 0x0501f62a, 0x59a800b6, 0x497b50b6,
+ 0x80002540, 0x0500005e, 0x59c40004, 0x90000503,
+ 0x05020065, 0x59a80843, 0x8c040502, 0x05000049,
+ 0x9010058c, 0x0502004c, 0x90100418, 0x8000b104,
+ 0x41cc1000, 0x42001800, 0x0010e06b, 0x50080800,
+ 0x500c0000, 0x80040580, 0x05020019, 0x80081000,
+ 0x800c1800, 0x8058b040, 0x05fe07f9, 0x0501fe22,
+ 0x59c80015, 0x84000508, 0x48039015, 0x42006000,
+ 0xffffffff, 0x42006800, 0x00500000, 0x0501fe08,
+ 0x640b50b1, 0x640b503e, 0x05e5fe97, 0x6140080f,
+ 0x42001000, 0x0010510c, 0x0515fb92, 0x59a80043,
+ 0x84000506, 0x48035043, 0x0501f5e7, 0x59cc0806,
+ 0x82040d80, 0x11010000, 0x05020027, 0x59cc0800,
+ 0x82040500, 0x00ffffff, 0x05000018, 0x82000580,
+ 0x000000ef, 0x05020015, 0x59cc0801, 0x82040500,
+ 0x00ffffff, 0x82000580, 0x000000ef, 0x0502000f,
+ 0x91cca407, 0x4200a800, 0x0010e513, 0x6008b000,
+ 0x50500800, 0x50540000, 0x80040480, 0x05001007,
+ 0x05020011, 0x8050a000, 0x8054a800, 0x8058b040,
+ 0x05fe07f8, 0x0501f00c, 0x59a80043, 0x84000502,
+ 0x48035043, 0x59c80015, 0x84000508, 0x48039015,
+ 0x41cca000, 0x4200a800, 0x0010e06b, 0x6024b000,
+ 0x0541fc23, 0x0501fde4, 0x42006000, 0xffffffff,
+ 0x42006800, 0x00080000, 0x0501fdcd, 0x42006000,
+ 0xfff7ffff, 0x41786800, 0x0501fdc9, 0x42006000,
+ 0xffffffff, 0x60006880, 0x0501fdc5, 0x59c40004,
+ 0x90000503, 0x05020004, 0x497b50b6, 0x600c0800,
+ 0x0501f498, 0x1c01f000, 0x1c01f000, 0x59a8003e,
+ 0x90006d8f, 0x05000003, 0x9000059b, 0x05020c63,
+ 0x1c01f000, 0x59a80043, 0x84000506, 0x48035043,
+ 0x497b50bc, 0x59a8003e, 0x90000c9e, 0x05de1933,
+ 0x0c01f001, 0x00104cd8, 0x00104ce8, 0x00104d0a,
+ 0x00104d24, 0x00104d42, 0x00104d45, 0x00104d48,
+ 0x00104d4b, 0x00104d4e, 0x00104d62, 0x00104d65,
+ 0x00104db9, 0x00104dbc, 0x00104dc9, 0x00104dcc,
+ 0x00104dde, 0x00104de3, 0x00104e32, 0x00104e59,
+ 0x00104ed1, 0x00104ef8, 0x00104f47, 0x00104f8d,
+ 0x00104fdc, 0x00104ffa, 0x0010503c, 0x0010505a,
+ 0x0010506a, 0x0010506b, 0x4803c856, 0x601ed800,
+ 0x0509fbe6, 0x05000006, 0x42006000, 0xffffffd7,
+ 0x41786800, 0x0501fd8a, 0x0501f009, 0x59c40006,
+ 0x82000500, 0xffffff0f, 0x48038806, 0x4a038805,
+ 0x000000f0, 0x0509ff22, 0x0509fb52, 0x1c01f000,
+ 0x4803c856, 0x42006000, 0xbf7fffff, 0x42006800,
+ 0x00400000, 0x0501fd7a, 0x05e5fe0b, 0x6407503e,
+ 0x42001000, 0x001051ae, 0x0515f9e3, 0x0501fcd4,
+ 0x6140080f, 0x42001000, 0x0010510c, 0x0515f301,
+ 0x59a800b6, 0x90000594, 0x0502001e, 0x4803c857,
+ 0x42006000, 0xffbfffff, 0x41786800, 0x0501fd68,
+ 0x59c40004, 0x90000503, 0x05020016, 0x42001000,
+ 0x0010510c, 0x0515f9c0, 0x59cc1006, 0x82081580,
+ 0x11020000, 0x05020010, 0x59cc1007, 0x8c08053e,
+ 0x0500000a, 0x59a80043, 0x8c000504, 0x05020007,
+ 0x42000000, 0x0010e39d, 0x0541fada, 0x59a80043,
+ 0x84000544, 0x48035043, 0x6443503e, 0x0501f0dc,
+ 0x1c01f000, 0x0501f3f9, 0x4803c856, 0x640f503e,
+ 0x42006000, 0xbf3fffff, 0x42006800, 0x00100000,
+ 0x0501fd47, 0x42001000, 0x001051ae, 0x0515f9b2,
+ 0x0501fca3, 0x42001000, 0x0010510c, 0x0515f99e,
+ 0x59a80449, 0x90000528, 0x05000004, 0x42000800,
+ 0xffffd815, 0x05edf9ad, 0x42007800, 0x0010e071,
+ 0x46007800, 0x11020000, 0x60140800, 0x0501f40d,
+ 0x59a800b6, 0x80000540, 0x0500001a, 0x4803c857,
+ 0x42001000, 0x0010510c, 0x0515f98b, 0x59a800b6,
+ 0x90000594, 0x05020014, 0x59cc1006, 0x82081580,
+ 0x11020000, 0x05020010, 0x59cc1007, 0x8c08053e,
+ 0x0500000a, 0x59a80043, 0x8c000504, 0x05020007,
+ 0x42000000, 0x0010e39d, 0x0541faa2, 0x59a80043,
+ 0x84000544, 0x48035043, 0x6413503e, 0x0501f003,
+ 0x1c01f000, 0x0501f3c1, 0x4803c856, 0x6417503e,
+ 0x0501f117, 0x4c5c0000, 0x6004b800, 0x0501f0ed,
+ 0x4803c856, 0x641f503e, 0x0501f1b0, 0x4c5c0000,
+ 0x6004b800, 0x0501f186, 0x4803c856, 0x6427503e,
+ 0x91cca406, 0x4200a800, 0x0010e071, 0x6014b000,
+ 0x0541fb53, 0x42007800, 0x0010e071, 0x46007800,
+ 0x11050100, 0x8d0c0506, 0x05000243, 0x60140800,
+ 0x0501fbd4, 0x4d3c0000, 0x60067800, 0x0535f8c8,
+ 0x5c027800, 0x1c01f000, 0x4c5c0000, 0x6004b800,
+ 0x0501f1e5, 0x4803c856, 0x642f503e, 0x42001000,
+ 0x0010e072, 0x4008a800, 0x6080b000, 0x4600a800,
+ 0xffffffff, 0x8054a800, 0x8058b040, 0x05fe07fc,
+ 0x42007800, 0x0010e071, 0x46007800, 0x11060000,
+ 0x8d0c0506, 0x05000005, 0x50080000, 0x46001000,
+ 0x00ffffff, 0x0501f03e, 0x42024800, 0x0010e512,
+ 0x0541fb7c, 0x40083000, 0x41782800, 0x41781800,
+ 0x41782000, 0x59240200, 0x8c000500, 0x05000012,
+ 0x8c000502, 0x05000010, 0x801429c0, 0x05020002,
+ 0x800c1800, 0x80142800, 0x59244408, 0x82204500,
+ 0x000000ff, 0x400c0000, 0x50182000, 0x0c01f810,
+ 0x80102540, 0x44103000, 0x800c19c0, 0x05020002,
+ 0x80183000, 0x91264c0d, 0x8058b040, 0x05fe07ea,
+ 0x50080000, 0x82000500, 0x00ffffff, 0x801428f0,
+ 0x80140540, 0x44001000, 0x0501f019, 0x00104da3,
+ 0x00104da8, 0x00104dad, 0x00104db2, 0x802000f0,
+ 0x82102500, 0x00ffffff, 0x800c1800, 0x1c01f000,
+ 0x802000e0, 0x82102500, 0xff00ffff, 0x800c1800,
+ 0x1c01f000, 0x802000d0, 0x82102500, 0xffff00ff,
+ 0x800c1800, 0x1c01f000, 0x40200000, 0x82102500,
+ 0xffffff00, 0x41781800, 0x1c01f000, 0x60840800,
+ 0x0501f378, 0x4c5c0000, 0x6004b800, 0x0501f223,
+ 0x4803c856, 0x6437503e, 0x91cca406, 0x4200a800,
+ 0x0010e071, 0x6084b000, 0x0541fae5, 0x42007800,
+ 0x0010e071, 0x46007800, 0x11070000, 0x60840800,
+ 0x0501f368, 0x4c5c0000, 0x6004b800, 0x0501f273,
+ 0x4803c856, 0x90040d41, 0x0501fc95, 0x643f503e,
+ 0x497b50b6, 0x42006000, 0xffffffff, 0x42006800,
+ 0x00300000, 0x0501fc82, 0x42006000, 0xffdfffff,
+ 0x41786800, 0x0501fc7e, 0x6140080f, 0x42001000,
+ 0x0010510c, 0x0515f0ac, 0x4803c856, 0x59a800b6,
+ 0x80000540, 0x05020321, 0x1c01f000, 0x4803c856,
+ 0x6447503e, 0x91cca406, 0x4200a800, 0x0010e071,
+ 0x6014b000, 0x0541fabe, 0x4200a800, 0x0010e071,
+ 0x4600a800, 0x11020000, 0x8d0c0506, 0x05020041,
+ 0x59a80c49, 0x82040580, 0x0000ffff, 0x0500003d,
+ 0x90040d30, 0x05000005, 0x42000800, 0xffffd815,
+ 0x05edf8d2, 0x0501f037, 0x59cc0007, 0x8c00053c,
+ 0x05000034, 0x42024800, 0x0010e512, 0x0541faf9,
+ 0x59240200, 0xb0000d23, 0xb0040da3, 0x05020021,
+ 0x59240a08, 0x42001000, 0x0010e072, 0x0501fab6,
+ 0x05000009, 0x59240c08, 0x05e5fcf7, 0x59240200,
+ 0x84000502, 0x84000518, 0x84000544, 0x48024a00,
+ 0x0501f014, 0x59240200, 0x82000540, 0x00001006,
+ 0x84000506, 0x48024a00, 0x48064a08, 0x82042c00,
+ 0x00102853, 0x50142800, 0x82142d00, 0x000000ff,
+ 0x48164c08, 0x59240005, 0x82000500, 0x00ffff00,
+ 0x80140d40, 0x48064805, 0x40140800, 0x05e5fccf,
+ 0x91264c0d, 0x8058b040, 0x05fe07da, 0x42024800,
+ 0x0010e512, 0x59242a00, 0x8c140502, 0x05000005,
+ 0x8c140500, 0x05000003, 0x59242c08, 0x4817503d,
+ 0x60140800, 0x0501f2ff, 0x4c5c0000, 0x4178b800,
+ 0x59a800b6, 0x80000540, 0x05000021, 0x4803c857,
+ 0x42001000, 0x0010510c, 0x0515f87b, 0x59a800b6,
+ 0x90000594, 0x05020019, 0x59cc1006, 0x82081580,
+ 0x11030000, 0x05020015, 0x59cc1007, 0x8c08053e,
+ 0x0500000a, 0x59a80043, 0x8c000504, 0x05020007,
+ 0x42000000, 0x0010e39d, 0x0541f992, 0x59a80043,
+ 0x84000544, 0x48035043, 0x805cb9c0, 0x05000004,
+ 0x641b503e, 0x05fdfef7, 0x0501f005, 0x644b503e,
+ 0x0501f805, 0x0501f002, 0x0501faac, 0x5c00b800,
+ 0x1c01f000, 0x4803c856, 0x644f503e, 0x91cca407,
+ 0x4200a800, 0x0010e072, 0x6010b000, 0x0541fa48,
+ 0x4200a800, 0x0010e071, 0x4600a800, 0x11030000,
+ 0x8d0c0506, 0x0502006a, 0x42024800, 0x0010e512,
+ 0x0541fa90, 0x4c600000, 0x4178c000, 0x59a80249,
+ 0x82000500, 0xfffffffc, 0x48035249, 0x59240200,
+ 0x40000800, 0x82040d00, 0xfffffb17, 0x48064a00,
+ 0x8c000500, 0x05000048, 0x8c000518, 0x05020046,
+ 0x8c000502, 0x05020004, 0x59240400, 0x8c000502,
+ 0x05000041, 0x59240a08, 0x42001000, 0x0010e072,
+ 0x0501fa3d, 0x0500002b, 0x59240005, 0x82000500,
+ 0x00ffff00, 0x48024805, 0x59240200, 0x8c000502,
+ 0x05000019, 0x59240207, 0x82000500, 0x0000ffff,
+ 0x05000015, 0x8060c000, 0x59240c08, 0x05e5fc72,
+ 0x4c640000, 0x4c580000, 0x4d2c0000, 0x5924c809,
+ 0x6040b000, 0x50640000, 0x800001c0, 0x05000004,
+ 0x4578c800, 0x40025800, 0x05ddfaf8, 0x8064c800,
+ 0x8058b040, 0x05fe07f8, 0x5c025800, 0x5c00b000,
+ 0x5c00c800, 0x59240200, 0x84000502, 0x84000544,
+ 0x48024a00, 0x59240400, 0x8c000504, 0x05000016,
+ 0x59240200, 0x84000546, 0x48024a00, 0x0501f012,
+ 0x59240200, 0x90000546, 0x84000506, 0x48024a00,
+ 0x82042c00, 0x00102853, 0x50142800, 0x82142d00,
+ 0x000000ff, 0x48164c08, 0x59240005, 0x82000500,
+ 0x00ffff00, 0x80140d40, 0x48064805, 0x40140800,
+ 0x05e5fc36, 0x59240200, 0x84000518, 0x48024a00,
+ 0x91264c0d, 0x8058b040, 0x05fe07ad, 0x8060c1c0,
+ 0x05020b0b, 0x5c00c000, 0x42024800, 0x0010e512,
+ 0x59242a00, 0x8c140502, 0x05000005, 0x8c140500,
+ 0x05000003, 0x59242c08, 0x4817503d, 0x60140800,
+ 0x0501f260, 0x4c5c0000, 0x4178b800, 0x59a800b6,
+ 0x80000540, 0x05000021, 0x4803c857, 0x42001000,
+ 0x0010510c, 0x0511ffdc, 0x59a800b6, 0x90000594,
+ 0x05020019, 0x59cc1006, 0x82081580, 0x11040000,
+ 0x05020015, 0x59cc1007, 0x8c08053e, 0x0500000a,
+ 0x59a80043, 0x8c000504, 0x05020007, 0x42000000,
+ 0x0010e39d, 0x0541f8f3, 0x59a80043, 0x84000544,
+ 0x48035043, 0x805cb9c0, 0x05000004, 0x6423503e,
+ 0x05fdfe5e, 0x0501f005, 0x6453503e, 0x0501f805,
+ 0x0501f002, 0x0501fa0d, 0x5c00b800, 0x1c01f000,
+ 0x4803c856, 0x6457503e, 0x91cca407, 0x4200a800,
+ 0x0010e072, 0x6010b000, 0x0541f9a9, 0x4200a800,
+ 0x0010e071, 0x4600a800, 0x11040000, 0x8d0c0506,
+ 0x05020041, 0x42024800, 0x0010e512, 0x0541f9f1,
+ 0x59240400, 0x8c000500, 0x0500002f, 0x59240200,
+ 0x8c000500, 0x0500002c, 0x8c000502, 0x0502002a,
+ 0x59240c00, 0x80040910, 0x82040d00, 0x000000ff,
+ 0x42001000, 0x0010e072, 0x0501f9a7, 0x05000010,
0x59240005, 0x82000500, 0x00ffff00, 0x48024805,
- 0x59240200, 0x8c000502, 0x05000019, 0x59240207,
- 0x82000500, 0x0000ffff, 0x05000015, 0x8060c000,
- 0x59240c08, 0x05edfa98, 0x4c640000, 0x4c580000,
- 0x4d2c0000, 0x5924c809, 0x6040b000, 0x50640000,
- 0x800001c0, 0x05000004, 0x4578c800, 0x40025800,
- 0x05e5f9d4, 0x8064c800, 0x8058b040, 0x05fe07f8,
- 0x5c025800, 0x5c00b000, 0x5c00c800, 0x59240200,
- 0x84000502, 0x84000544, 0x48024a00, 0x59240400,
- 0x8c000504, 0x05000016, 0x59240200, 0x84000546,
- 0x48024a00, 0x0501f012, 0x59240200, 0x90000546,
- 0x84000506, 0x48024a00, 0x82042c00, 0x001020b6,
- 0x50142800, 0x82142d00, 0x000000ff, 0x48164c08,
- 0x59240005, 0x82000500, 0x00ffff00, 0x80140d40,
- 0x48064805, 0x40140800, 0x05edfa5c, 0x59240200,
- 0x84000518, 0x48024a00, 0x91264c0b, 0x8058b040,
- 0x05fe07ad, 0x8060c1c0, 0x05020b0b, 0x5c00c000,
- 0x42024800, 0x0010b391, 0x59242a00, 0x8c140502,
+ 0x59240200, 0x84000502, 0x48024a00, 0x59242400,
+ 0x8c100504, 0x05000018, 0x84000546, 0x84000544,
+ 0x48024a00, 0x8060c000, 0x0501f013, 0x59240200,
+ 0x90000546, 0x84000506, 0x48024a00, 0x48064a08,
+ 0x82042c00, 0x00102853, 0x50142800, 0x82142d00,
+ 0x000000ff, 0x48164c08, 0x59240005, 0x82000500,
+ 0x00ffff00, 0x80140d40, 0x48064805, 0x40140800,
+ 0x05e5fbba, 0x91264c0d, 0x8058b040, 0x05fe07cd,
+ 0x42024800, 0x0010e512, 0x59242a00, 0x8c140502,
0x05000005, 0x8c140500, 0x05000003, 0x59242c08,
- 0x4817500f, 0x60140800, 0x0501f25f, 0x4c5c0000,
- 0x4178b800, 0x59a80077, 0x80000540, 0x05000021,
- 0x4803c857, 0x42001000, 0x00103e29, 0x0511f8f1,
- 0x59a80077, 0x90000594, 0x05020019, 0x59cc1006,
- 0x82081580, 0x11040000, 0x05020015, 0x59cc1007,
- 0x8c08053e, 0x0500000a, 0x59a80015, 0x8c000504,
- 0x05020007, 0x42000000, 0x0010b224, 0x0531fe3e,
- 0x59a80015, 0x84000544, 0x48035015, 0x805cb9c0,
- 0x05000004, 0x64235010, 0x05fdfe5e, 0x0501f005,
- 0x64535010, 0x0501f805, 0x0501f002, 0x0501fa0c,
- 0x5c00b800, 0x1c01f000, 0x4803c856, 0x64575010,
- 0x91cca407, 0x4200a800, 0x0010af0c, 0x6010b000,
- 0x0531fef4, 0x4200a800, 0x0010af0b, 0x4600a800,
- 0x11040000, 0x8d0c0506, 0x05020041, 0x42024800,
- 0x0010b391, 0x0531ff41, 0x59240400, 0x8c000500,
- 0x0500002f, 0x59240200, 0x8c000500, 0x0500002c,
- 0x8c000502, 0x0502002a, 0x59240c00, 0x80040910,
- 0x82040d00, 0x000000ff, 0x42001000, 0x0010af0c,
- 0x0501f9a6, 0x05000010, 0x59240005, 0x82000500,
- 0x00ffff00, 0x48024805, 0x59240200, 0x84000502,
- 0x48024a00, 0x59242400, 0x8c100504, 0x05000018,
- 0x84000546, 0x84000544, 0x48024a00, 0x8060c000,
- 0x0501f013, 0x59240200, 0x90000546, 0x84000506,
- 0x48024a00, 0x48064a08, 0x82042c00, 0x001020b6,
- 0x50142800, 0x82142d00, 0x000000ff, 0x48164c08,
- 0x59240005, 0x82000500, 0x00ffff00, 0x80140d40,
- 0x48064805, 0x40140800, 0x05edf9e0, 0x91264c0b,
- 0x8058b040, 0x05fe07cd, 0x42024800, 0x0010b391,
- 0x59242a00, 0x8c140502, 0x05000005, 0x8c140500,
- 0x05000003, 0x59242c08, 0x4817500f, 0x60140800,
- 0x0501f1e9, 0x4c5c0000, 0x4178b800, 0x59a80077,
- 0x80000540, 0x05000040, 0x4803c857, 0x42001000,
- 0x00103e29, 0x0511f87b, 0x59a80077, 0x90000594,
- 0x05020038, 0x59cc1006, 0x82080500, 0x11050000,
- 0x82000580, 0x11050000, 0x05020032, 0x8c080510,
- 0x05000013, 0x0501faf4, 0x59cc1007, 0x8c08053e,
- 0x0500000a, 0x59a80015, 0x8c000504, 0x05020007,
- 0x42000000, 0x0010b224, 0x0531fdc3, 0x59a80015,
- 0x84000544, 0x48035015, 0x805cb9c0, 0x05000014,
- 0x642b5010, 0x05fdfdfa, 0x0501f01f, 0x59cc1007,
- 0x8c08053e, 0x0500000a, 0x59a80015, 0x8c000504,
- 0x05020007, 0x42000000, 0x0010b224, 0x0531fdb2,
- 0x59a80015, 0x84000544, 0x48035015, 0x90000541,
- 0x0501fad5, 0x497b5073, 0x0501f002, 0x64075073,
- 0x59cc1007, 0x8c08053c, 0x05000002, 0x6423521b,
- 0x805cb9c0, 0x05020004, 0x645b5010, 0x0501f808,
- 0x0501f005, 0x643b5010, 0x05fdfe44, 0x0501f002,
- 0x0501f977, 0x5c00b800, 0x1c01f000, 0x4803c856,
- 0x91cca406, 0x4200a800, 0x0010af0b, 0x6014b000,
- 0x0531fe60, 0x645f5010, 0x59a80073, 0x8c000500,
- 0x05000006, 0x42001000, 0x0010af0b, 0x46001000,
- 0x11050100, 0x0501f002, 0x646f5010, 0x42024800,
- 0x0010b391, 0x0531fea9, 0x599c2817, 0x59240200,
- 0x8c000500, 0x05000025, 0x8c000502, 0x05020023,
- 0x8c000506, 0x05020021, 0x4c580000, 0x0501f8c2,
- 0x5c00b000, 0x0502000b, 0x59240005, 0x82000500,
- 0x00ffff00, 0x48024805, 0x59240200, 0x84000502,
- 0x84000546, 0x84000544, 0x48024a00, 0x0501f013,
- 0x59240200, 0x90000546, 0x84000506, 0x48024a00,
- 0x48064a08, 0x82042c00, 0x001020b6, 0x50142800,
- 0x82142d00, 0x000000ff, 0x48164c08, 0x59240005,
- 0x82000500, 0x00ffff00, 0x80140d40, 0x48064805,
- 0x40140800, 0x05edf951, 0x91264c0b, 0x8058b040,
- 0x05fe07d7, 0x42024800, 0x0010b391, 0x59242a00,
- 0x8c140502, 0x05000005, 0x8c140500, 0x05000003,
- 0x59242c08, 0x4817500f, 0x60140800, 0x0501f95a,
- 0x4d3c0000, 0x60067800, 0x0529f918, 0x5c027800,
- 0x1c01f000, 0x4c5c0000, 0x4178b800, 0x59a80077,
- 0x80000540, 0x05000018, 0x4803c857, 0x42001000,
- 0x00103e29, 0x050dffe7, 0x59a80077, 0x82000580,
- 0x00000084, 0x0502000f, 0x59cc1006, 0x82081580,
- 0x11060000, 0x0502000b, 0x80000580, 0x0501fa62,
- 0x805cb9c0, 0x05000004, 0x64335010, 0x05fdfdcb,
- 0x0501f005, 0x64635010, 0x0501f805, 0x0501f002,
- 0x0501f90b, 0x5c00b800, 0x1c01f000, 0x4803c856,
- 0x64675010, 0x91cca406, 0x4200a800, 0x0010af0b,
- 0x6084b000, 0x0531fdf3, 0x42003800, 0x0010af0c,
- 0x42024800, 0x0010b391, 0x4200b000, 0x0010b390,
- 0x5058b000, 0x59240200, 0x8c000500, 0x05000019,
- 0x8c000502, 0x05000017, 0x401c2800, 0x50141000,
- 0x80080130, 0x80000000, 0x40001800, 0x82081500,
- 0x00ffffff, 0x800000f0, 0x80080540, 0x44002800,
- 0x59244408, 0x82204500, 0x000000ff, 0x400c1000,
- 0x80081104, 0x82083400, 0x0010af0c, 0x50181000,
- 0x900c0503, 0x0c01f808, 0x80081540, 0x44083000,
- 0x91264c0b, 0x8058b040, 0x05fe07e3, 0x60840800,
- 0x0501f109, 0x00103d49, 0x00103d4d, 0x00103d51,
- 0x00103d55, 0x802000f0, 0x82081500, 0x00ffffff,
- 0x1c01f000, 0x802000e0, 0x82081500, 0xff00ffff,
- 0x1c01f000, 0x802000d0, 0x82081500, 0xffff00ff,
- 0x1c01f000, 0x40200000, 0x82081500, 0xffffff00,
- 0x1c01f000, 0x4c5c0000, 0x4178b800, 0x59a80077,
- 0x80000540, 0x05000018, 0x4803c857, 0x42001000,
- 0x00103e29, 0x050dff87, 0x59a80077, 0x82000580,
- 0x00000084, 0x0502000f, 0x59cc1006, 0x82081580,
- 0x11070000, 0x0502000b, 0x64075073, 0x0501f897,
- 0x805cb9c0, 0x05000004, 0x643b5010, 0x05fdfd7b,
- 0x0501f005, 0x646b5010, 0x0501f805, 0x0501f002,
- 0x0501f8ab, 0x5c00b800, 0x1c01f000, 0x90000541,
- 0x0501f9f5, 0x646f5010, 0x91cca406, 0x4200a800,
- 0x0010af0b, 0x59a82077, 0x40100000, 0x8000b104,
- 0x40580800, 0x5450a800, 0x8050a000, 0x8054a800,
- 0x8058b040, 0x05fe07fc, 0x0501f0c7, 0x1c01f000,
- 0x1c01f000, 0x4803c856, 0x60103000, 0x42004000,
- 0x0010af0c, 0x599c2817, 0x8c140514, 0x0502001c,
- 0x600c1000, 0x40200000, 0x80080400, 0x50000800,
- 0x82042580, 0xffffffff, 0x05020005, 0x80081040,
- 0x80183040, 0x05fe07f8, 0x0501f03f, 0x800811c0,
- 0x05020006, 0x82042580, 0x3fffffff, 0x05000039,
- 0x82040d40, 0xc0000000, 0x6080b000, 0x60041800,
- 0x40042000, 0x80102102, 0x0502101f, 0x800c18c2,
- 0x8058b040, 0x05fe07fc, 0x0501f02e, 0x41781000,
+ 0x4817503d, 0x60140800, 0x0501f1ea, 0x4c5c0000,
+ 0x4178b800, 0x59a800b6, 0x80000540, 0x05000040,
+ 0x4803c857, 0x42001000, 0x0010510c, 0x0511ff66,
+ 0x59a800b6, 0x90000594, 0x05020038, 0x59cc1006,
+ 0x82080500, 0x11050000, 0x82000580, 0x11050000,
+ 0x05020032, 0x8c080510, 0x05000013, 0x0501fb08,
+ 0x59cc1007, 0x8c08053e, 0x0500000a, 0x59a80043,
+ 0x8c000504, 0x05020007, 0x42000000, 0x0010e39d,
+ 0x0541f878, 0x59a80043, 0x84000544, 0x48035043,
+ 0x805cb9c0, 0x05000014, 0x642b503e, 0x05fdfdfa,
+ 0x0501f01f, 0x59cc1007, 0x8c08053e, 0x0500000a,
+ 0x59a80043, 0x8c000504, 0x05020007, 0x42000000,
+ 0x0010e39d, 0x0541f867, 0x59a80043, 0x84000544,
+ 0x48035043, 0x90000541, 0x0501fae9, 0x497b50b2,
+ 0x0501f002, 0x640750b2, 0x59cc1007, 0x8c08053c,
+ 0x05000002, 0x64235249, 0x805cb9c0, 0x05020004,
+ 0x645b503e, 0x0501f808, 0x0501f005, 0x643b503e,
+ 0x05fdfe44, 0x0501f002, 0x0501f978, 0x5c00b800,
+ 0x1c01f000, 0x4803c856, 0x91cca406, 0x4200a800,
+ 0x0010e071, 0x6014b000, 0x0541f915, 0x645f503e,
+ 0x59a800b2, 0x8c000500, 0x05000006, 0x42001000,
+ 0x0010e071, 0x46001000, 0x11050100, 0x0501f002,
+ 0x646f503e, 0x8d0c0506, 0x05020037, 0x42024800,
+ 0x0010e512, 0x0541f957, 0x59240200, 0x8c000500,
+ 0x05000025, 0x8c000502, 0x05020023, 0x8c000506,
+ 0x05020021, 0x4c580000, 0x0501f8c2, 0x5c00b000,
+ 0x0502000b, 0x59240005, 0x82000500, 0x00ffff00,
+ 0x48024805, 0x59240200, 0x84000502, 0x84000546,
+ 0x84000544, 0x48024a00, 0x0501f013, 0x59240200,
+ 0x90000546, 0x84000506, 0x48024a00, 0x48064a08,
+ 0x82042c00, 0x00102853, 0x50142800, 0x82142d00,
+ 0x000000ff, 0x48164c08, 0x59240005, 0x82000500,
+ 0x00ffff00, 0x80140d40, 0x48064805, 0x40140800,
+ 0x05e5fb2a, 0x91264c0d, 0x8058b040, 0x05fe07d7,
+ 0x42024800, 0x0010e512, 0x59242a00, 0x8c140502,
+ 0x05000005, 0x8c140500, 0x05000003, 0x59242c08,
+ 0x4817503d, 0x60140800, 0x0501f95a, 0x4d3c0000,
+ 0x60067800, 0x0531fe4e, 0x5c027800, 0x1c01f000,
+ 0x4c5c0000, 0x4178b800, 0x59a800b6, 0x80000540,
+ 0x05000018, 0x4803c857, 0x42001000, 0x0010510c,
+ 0x0511fed1, 0x59a800b6, 0x82000580, 0x00000084,
+ 0x0502000f, 0x59cc1006, 0x82081580, 0x11060000,
+ 0x0502000b, 0x80000580, 0x0501fa75, 0x805cb9c0,
+ 0x05000004, 0x6433503e, 0x05fdfdca, 0x0501f005,
+ 0x6463503e, 0x0501f805, 0x0501f002, 0x0501f90b,
+ 0x5c00b800, 0x1c01f000, 0x4803c856, 0x6467503e,
+ 0x91cca406, 0x4200a800, 0x0010e071, 0x6084b000,
+ 0x0541f8a7, 0x42003800, 0x0010e072, 0x42024800,
+ 0x0010e512, 0x4200b000, 0x0010e511, 0x5058b000,
+ 0x59240200, 0x8c000500, 0x05000019, 0x8c000502,
+ 0x05000017, 0x401c2800, 0x50141000, 0x80080130,
+ 0x80000000, 0x40001800, 0x82081500, 0x00ffffff,
+ 0x800000f0, 0x80080540, 0x44002800, 0x59244408,
+ 0x82204500, 0x000000ff, 0x400c1000, 0x80081104,
+ 0x82083400, 0x0010e072, 0x50181000, 0x900c0503,
+ 0x0c01f808, 0x80081540, 0x44083000, 0x91264c0d,
+ 0x8058b040, 0x05fe07e3, 0x60840800, 0x0501f109,
+ 0x0010502c, 0x00105030, 0x00105034, 0x00105038,
+ 0x802000f0, 0x82081500, 0x00ffffff, 0x1c01f000,
+ 0x802000e0, 0x82081500, 0xff00ffff, 0x1c01f000,
+ 0x802000d0, 0x82081500, 0xffff00ff, 0x1c01f000,
+ 0x40200000, 0x82081500, 0xffffff00, 0x1c01f000,
+ 0x4c5c0000, 0x4178b800, 0x59a800b6, 0x80000540,
+ 0x05000018, 0x4803c857, 0x42001000, 0x0010510c,
+ 0x0511fe71, 0x59a800b6, 0x82000580, 0x00000084,
+ 0x0502000f, 0x59cc1006, 0x82081580, 0x11070000,
+ 0x0502000b, 0x640750b2, 0x0501f897, 0x805cb9c0,
+ 0x05000004, 0x643b503e, 0x05fdfd7a, 0x0501f005,
+ 0x646b503e, 0x0501f805, 0x0501f002, 0x0501f8ab,
+ 0x5c00b800, 0x1c01f000, 0x90000541, 0x0501fa08,
+ 0x646f503e, 0x91cca406, 0x4200a800, 0x0010e071,
+ 0x59a820b6, 0x40100000, 0x8000b104, 0x40580800,
+ 0x5450a800, 0x8050a000, 0x8054a800, 0x8058b040,
+ 0x05fe07fc, 0x0501f0c7, 0x1c01f000, 0x1c01f000,
+ 0x4803c856, 0x60103000, 0x42004000, 0x0010e072,
+ 0x599c2817, 0x8c140514, 0x0502001c, 0x600c1000,
0x40200000, 0x80080400, 0x50000800, 0x82042580,
- 0xffffffff, 0x05020005, 0x80081000, 0x80183040,
- 0x05fe07f8, 0x0501f023, 0x800811c0, 0x05020003,
- 0x82040d40, 0xc0000000, 0x6004b000, 0x42001800,
- 0x80000000, 0x40042000, 0x801020c2, 0x05021006,
- 0x800c1902, 0x8058b000, 0x905804a1, 0x05fc17fb,
- 0x0501f014, 0x40200000, 0x80082400, 0x50100000,
- 0x800c0540, 0x44002000, 0x59a80015, 0x84000540,
- 0x48035015, 0x40580000, 0x60802800, 0x80142c80,
- 0x40080000, 0x600c3800, 0x801c0480, 0x800000ca,
- 0x80142d40, 0x40140800, 0x90000541, 0x0501f002,
- 0x80000580, 0x1c01f000, 0x4807c857, 0x480bc857,
- 0x40041800, 0x41782000, 0x600c0000, 0x900c1ca0,
- 0x05001004, 0x80102000, 0x80000040, 0x05fdf7fc,
- 0x40041800, 0x801021c0, 0x05000004, 0x900c1ca0,
- 0x80102040, 0x05fe07fe, 0x60042000, 0x800c19c0,
- 0x05000004, 0x801020c2, 0x800c1840, 0x05fe07fe,
- 0x80083c00, 0x401c2800, 0x50140000, 0x80102d00,
- 0x05020007, 0x80100540, 0x44003800, 0x59a80015,
- 0x84000540, 0x48035015, 0x80000580, 0x1c01f000,
- 0x4807c856, 0x605c1100, 0x59a81836, 0x0531fc50,
- 0x05f9ffcd, 0x1c01f000, 0x4807c856, 0x6080b000,
- 0x91cca407, 0x4200a800, 0x0010cea4, 0x0531f544,
- 0x4807c856, 0x0511fe8a, 0x61dc0801, 0x0501f8d5,
- 0x497b2804, 0x497b2805, 0x497b2826, 0x497b2827,
- 0x6006d800, 0x42006000, 0xbe7fffff, 0x42006800,
- 0x00018000, 0x0501f94b, 0x42006000, 0xfffeffff,
- 0x41786800, 0x0501f947, 0x497b5036, 0x60b40800,
- 0x42001000, 0x00103ea1, 0x050df6a7, 0x4807c856,
- 0x05fdffe8, 0x497b5010, 0x497b5077, 0x1c01f000,
- 0x4807c856, 0x42006000, 0xffffffff, 0x60a06800,
- 0x0501f138, 0x4807c856, 0x05fdffd2, 0x0511fb14,
- 0x4df00000, 0x0511fda9, 0x5c03e000, 0x05100afc,
- 0x59c400a4, 0x9000050f, 0x90000582, 0x0502000a,
- 0x42006000, 0xffffffff, 0x42006800, 0x00200000,
- 0x0501f928, 0x42006000, 0xffdfffff, 0x41786800,
- 0x0501f924, 0x497b5010, 0x61dc0801, 0x0501f8a1,
- 0x59c400a3, 0x82000500, 0xbf20bfff, 0x82000540,
- 0x0001c000, 0x480388a3, 0x84000520, 0x480388a3,
- 0x497b5036, 0x60b40800, 0x42001000, 0x00103ea1,
- 0x050df679, 0x497b5077, 0x59b400f5, 0x8c000500,
- 0x05020003, 0x90000541, 0x480368f5, 0x800400c4,
- 0x82000400, 0x00002000, 0x4803910a, 0x59b400f6,
- 0x90000518, 0x05fe07fe, 0x4a0368f0, 0x0010af04,
- 0x42000000, 0x0010af0b, 0x4c040000, 0x40043800,
- 0x50000800, 0x82040d80, 0x11010000, 0x0500000c,
- 0x50000800, 0x4807c857, 0x8d0c052a, 0x05000008,
- 0x4c000000, 0x821c3d40, 0x0000dc00, 0x42000000,
- 0x0010af05, 0x05e1fc8f, 0x5c000000, 0x5c000800,
- 0x480368f1, 0x82040400, 0x0000dc00, 0x480368f3,
- 0x59c400a4, 0x9000050f, 0x90000588, 0x05020013,
- 0x4c5c0000, 0x4c600000, 0x59c4b805, 0x8c5c053a,
- 0x05020004, 0x42000000, 0x0010b221, 0x0531fbc6,
- 0x4a038805, 0x20000000, 0x05edfb6f, 0x4000c000,
- 0x05edfab5, 0x6006d800, 0x497b5010, 0x5c00c000,
- 0x5c00b800, 0x1c01f000, 0x59c8010b, 0x8c000502,
- 0x05fc07e8, 0x59c408a4, 0x90040d0f, 0x90040d8b,
- 0x05020005, 0x59a80810, 0x82040d40, 0x00002000,
- 0x0501f004, 0x59a80872, 0x82040d40, 0x00001000,
- 0x48075036, 0x59a8087c, 0x800409c0, 0x05020005,
- 0x6140080f, 0x42001000, 0x00103e29, 0x050dff7f,
- 0x1c01f000, 0x4807c856, 0x05fdff5a, 0x0511fa9c,
- 0x4df00000, 0x0511fd31, 0x5c03e000, 0x05100a84,
- 0x59c400a4, 0x9000050f, 0x90000582, 0x0502000a,
- 0x42006000, 0xffffffff, 0x42006800, 0x00200000,
- 0x0501f8b0, 0x42006000, 0xffdfffff, 0x41786800,
- 0x0501f8ac, 0x0505fc88, 0x05000010, 0x0505fc9c,
- 0x0502000e, 0x4a035013, 0x0000aaaa, 0x4c040000,
- 0x05e9ffb9, 0x59a8001f, 0x82000500, 0xffff0000,
- 0x80040540, 0x4803501f, 0x5c000800, 0x64035014,
- 0x0505fbec, 0x0501f005, 0x64175075, 0x60000001,
- 0x05e9ff09, 0x05fdff3f, 0x1c01f000, 0x0501f809,
- 0x42006000, 0xbf7f7fff, 0x41786800, 0x0501f091,
- 0x42006000, 0xbf7f7fff, 0x41786800, 0x0501f08d,
- 0x0505fc7f, 0x05020009, 0x59c40006, 0x82000540,
- 0x000000f0, 0x48038806, 0x42006000, 0xbfffffff,
- 0x41786800, 0x0501f883, 0x1c01f000, 0x40680800,
- 0x800408d0, 0x59a80015, 0x8c000506, 0x05000006,
- 0x59a8000f, 0x82000500, 0x000000ff, 0x80040540,
- 0x0501f003, 0x82040540, 0x000000f7, 0x480388a7,
- 0x1c01f000, 0x4807c856, 0x42000000, 0x0010b2b9,
- 0x0531fb55, 0x60143000, 0x4d3c0000, 0x4c180000,
- 0x60343000, 0x600a7800, 0x0501f037, 0x4807c856,
- 0x42000000, 0x0010b2de, 0x0531fb4b, 0x60003000,
- 0x4d3c0000, 0x4c180000, 0x603c3000, 0x61fc19ff,
- 0x601c2000, 0x05f9ff3e, 0x5c003000, 0x59240200,
- 0x84000556, 0x48024a00, 0x4d400000, 0x60aa8000,
- 0x59240400, 0x8c00050a, 0x052c0c2e, 0x600a7800,
- 0x05f1f8c0, 0x5c028000, 0x5c027800, 0x0005f45a,
- 0x4807c856, 0x42000000, 0x0010b2dc, 0x0531fb32,
- 0x600c3000, 0x4d3c0000, 0x4c180000, 0x60383000,
- 0x600a7804, 0x0501f014, 0x4807c856, 0x42000000,
- 0x0010b2db, 0x0531fb28, 0x60103000, 0x4d3c0000,
- 0x4c180000, 0x60403000, 0x600a7804, 0x0501f00a,
- 0x4807c856, 0x42000000, 0x0010b223, 0x0531fb1e,
- 0x60043000, 0x4d3c0000, 0x4c180000, 0x60303000,
- 0x600a7800, 0x61fc19ff, 0x601c2000, 0x4d200000,
- 0x417a4000, 0x05f9ff0e, 0x5c024000, 0x5c003000,
- 0x4d400000, 0x0531f97a, 0x60aa8000, 0x0201f800,
- 0x0010edf3, 0x4c580000, 0x0531fc2c, 0x42000800,
- 0x0010b391, 0x58040005, 0x82000500, 0x000000ff,
- 0x48000805, 0x90040c0b, 0x8058b040, 0x05fe07fa,
- 0x5c00b000, 0x5c028000, 0x5c027800, 0x1c01f000,
- 0x4807c856, 0x05011000, 0x4a03c840, 0x0010af04,
- 0x6503c842, 0x40000000, 0x05fd17ff, 0x42007800,
- 0x0010af04, 0x64447800, 0x803c7800, 0x4a007800,
- 0x220000ef, 0x4a007801, 0x000000ef, 0x4a007802,
- 0x01380000, 0x64007803, 0x4a007804, 0xffffffff,
- 0x64007805, 0x1c01f000, 0x40686000, 0x406c6800,
- 0x59c400a3, 0x80300500, 0x80340540, 0x480388a3,
- 0x1c01f000, 0x40686000, 0x4833c857, 0x59c400a3,
- 0x80300540, 0x480388a3, 0x80300580, 0x480388a3,
- 0x1c01f000, 0x4803c856, 0x05000003, 0x6407507d,
- 0x0501f002, 0x497b507d, 0x1c01f000, 0x59c80002,
- 0x80000540, 0x05000009, 0x80000040, 0x05000007,
- 0x4a039005, 0x00000140, 0x60180000, 0x80000040,
- 0x05fe07ff, 0x05fdf7f6, 0x1c01f000, 0x4c5c0000,
- 0x4c600000, 0x59c4b805, 0x485fc856, 0x8c5c053a,
- 0x05020004, 0x42000000, 0x0010b221, 0x0531fabe,
- 0x4a038805, 0x20000000, 0x05edfa67, 0x4000c000,
- 0x05edf9ad, 0x4a038805, 0x04000000, 0x5c00c000,
- 0x5c00b800, 0x1c01f000, 0x497a6a00, 0x0501fab7,
- 0x4a026c00, 0x00000707, 0x497a6801, 0x497a6808,
- 0x497a6809, 0x497a6806, 0x497a6807, 0x497a6c0b,
- 0x497a680c, 0x59240400, 0x8c00050a, 0x05000005,
- 0x5934080f, 0x59340010, 0x80040540, 0x05e20a4c,
- 0x4a026a04, 0x00000100, 0x497a6a03, 0x59340402,
- 0x82000500, 0x000000ff, 0x48026c02, 0x497a6c04,
- 0x497a6a05, 0x497a6c05, 0x497a6811, 0x4d2c0000,
- 0x5934000d, 0x49466c03, 0x80025d40, 0x05000003,
- 0x05e1fde1, 0x497a680d, 0x5c025800, 0x599c0401,
- 0x48026a0b, 0x599c0208, 0x48026c12, 0x4a02680a,
- 0x00008000, 0x0505f03e, 0x60140000, 0x80000d80,
- 0x0501f024, 0x0501fddd, 0x05020013, 0x59a8021b,
- 0x8c00050a, 0x0502000d, 0x59340212, 0x82000500,
- 0x0000ff00, 0x4803c857, 0x05000008, 0x59340a00,
- 0x8c04051e, 0x000002ad, 0x60a40000, 0x60000820,
- 0x492fc857, 0x0501f013, 0x492fc857, 0x60a00000,
- 0x0501f00e, 0x8d0c0502, 0x05020003, 0x8d0c0500,
- 0x05000003, 0x60100000, 0x0501f008, 0x60a40000,
- 0x59340a00, 0x8c04051e, 0x05000004, 0x492fc857,
- 0x60000820, 0x0501f003, 0x492fc857, 0x80000d80,
- 0x4803c857, 0x80028540, 0x1c01f000, 0x490fc857,
- 0x8d0c0500, 0x05fe07f0, 0x0501fd8d, 0x05fe07ea,
- 0x59340200, 0x8c00050e, 0x05fc07e7, 0x0001f2ad,
- 0x4d480000, 0x4d4c0000, 0x592e9009, 0x592e980a,
- 0x0501fc59, 0x5c029800, 0x5c029000, 0x05fc07c7,
- 0x0001f2b0, 0x492fc857, 0x592e8c07, 0x83440d80,
- 0x000007fc, 0x05000004, 0x83440480, 0x000007f0,
- 0x05021016, 0x592e4408, 0x0509fc07, 0x05000dcd,
- 0x05020012, 0x0501fd83, 0x05020012, 0x0515fef6,
- 0x05000019, 0x83200400, 0x0010a3b3, 0x50024800,
+ 0xffffffff, 0x05020005, 0x80081040, 0x80183040,
+ 0x05fe07f8, 0x0501f03f, 0x800811c0, 0x05020006,
+ 0x82042580, 0x3fffffff, 0x05000039, 0x82040d40,
+ 0xc0000000, 0x6080b000, 0x60041800, 0x40042000,
+ 0x80102102, 0x0502101f, 0x800c18c2, 0x8058b040,
+ 0x05fe07fc, 0x0501f02e, 0x41781000, 0x40200000,
+ 0x80080400, 0x50000800, 0x82042580, 0xffffffff,
+ 0x05020005, 0x80081000, 0x80183040, 0x05fe07f8,
+ 0x0501f023, 0x800811c0, 0x05020003, 0x82040d40,
+ 0xc0000000, 0x6004b000, 0x42001800, 0x80000000,
+ 0x40042000, 0x801020c2, 0x05021006, 0x800c1902,
+ 0x8058b000, 0x905804a1, 0x05fc17fb, 0x0501f014,
+ 0x40200000, 0x80082400, 0x50100000, 0x800c0540,
+ 0x44002000, 0x59a80043, 0x84000540, 0x48035043,
+ 0x40580000, 0x60802800, 0x80142c80, 0x40080000,
+ 0x600c3800, 0x801c0480, 0x800000ca, 0x80142d40,
+ 0x40140800, 0x90000541, 0x0501f002, 0x80000580,
+ 0x1c01f000, 0x4807c857, 0x480bc857, 0x40041800,
+ 0x41782000, 0x600c0000, 0x900c1ca0, 0x05001004,
+ 0x80102000, 0x80000040, 0x05fdf7fc, 0x40041800,
+ 0x801021c0, 0x05000004, 0x900c1ca0, 0x80102040,
+ 0x05fe07fe, 0x60042000, 0x800c19c0, 0x05000004,
+ 0x801020c2, 0x800c1840, 0x05fe07fe, 0x80083c00,
+ 0x401c2800, 0x50140000, 0x80102d00, 0x05020007,
+ 0x80100540, 0x44003800, 0x59a80043, 0x84000540,
+ 0x48035043, 0x80000580, 0x1c01f000, 0x4807c856,
+ 0x605c1100, 0x59a81864, 0x053dff04, 0x05f9fef9,
+ 0x1c01f000, 0x4807c856, 0x6080b000, 0x91cca407,
+ 0x4200a800, 0x00110258, 0x053df7f8, 0x4807c856,
+ 0x0519ff69, 0x61dc0801, 0x0501f8d4, 0x497b2804,
+ 0x497b2805, 0x497b2826, 0x497b2827, 0x6006d800,
+ 0x42006000, 0xbe7fffff, 0x42006800, 0x00018000,
+ 0x0501f95f, 0x42006000, 0xfffeffff, 0x41786800,
+ 0x0501f95b, 0x497b5064, 0x60b40800, 0x42001000,
+ 0x00105184, 0x0511f588, 0x4807c856, 0x05fdffe8,
+ 0x497b503e, 0x497b50b6, 0x1c01f000, 0x4807c856,
+ 0x42006000, 0xffffffff, 0x60a06800, 0x0501f14c,
+ 0x4807c856, 0x05fdffd2, 0x0519fc05, 0x4df00000,
+ 0x0519fe92, 0x5c03e000, 0x05180bf2, 0x59c400a4,
+ 0x9000050f, 0x90000582, 0x0502000a, 0x42006000,
+ 0xffffffff, 0x42006800, 0x00200000, 0x0501f93c,
+ 0x42006000, 0xffdfffff, 0x41786800, 0x0501f938,
+ 0x497b503e, 0x61dc0801, 0x0501f8a0, 0x59c400a3,
+ 0x82000500, 0xbf20bfff, 0x82000540, 0x0001c000,
+ 0x480388a3, 0x84000520, 0x480388a3, 0x497b5064,
+ 0x60b40800, 0x42001000, 0x00105184, 0x0511f55a,
+ 0x497b50b6, 0x59b400f5, 0x8c000500, 0x05020003,
+ 0x90000541, 0x480368f5, 0x800400c4, 0x82000400,
+ 0x00002000, 0x4803910a, 0x59b400f6, 0x90000518,
+ 0x05fe07fe, 0x4a0368f0, 0x0010e06a, 0x42000000,
+ 0x0010e071, 0x4c040000, 0x40043800, 0x50000800,
+ 0x82040d80, 0x11010000, 0x0500000c, 0x50000800,
+ 0x4807c857, 0x8d0c052a, 0x05000008, 0x4c000000,
+ 0x821c3d40, 0x0000dc00, 0x42000000, 0x0010e06b,
+ 0x05d9fda3, 0x5c000000, 0x5c000800, 0x480368f1,
+ 0x82040400, 0x0000dc00, 0x480368f3, 0x59c408a4,
+ 0x90040d0f, 0x90040588, 0x05020013, 0x4c5c0000,
+ 0x4c600000, 0x59c4b805, 0x8c5c053a, 0x05020004,
+ 0x42000000, 0x0010e39a, 0x053dfe7a, 0x4a038805,
+ 0x20000000, 0x05e5fd27, 0x4000c000, 0x05e5fc6e,
+ 0x6006d800, 0x497b503e, 0x5c00c000, 0x5c00b800,
+ 0x1c01f000, 0x9004058c, 0x05000015, 0x59c8010b,
+ 0x8c000502, 0x05fc07e6, 0x90040d8b, 0x05020005,
+ 0x59a8083e, 0x82040d40, 0x00002000, 0x0501f004,
+ 0x59a808b1, 0x82040d40, 0x00001000, 0x48075064,
+ 0x59a808bc, 0x800409c0, 0x05020005, 0x6140080f,
+ 0x42001000, 0x0010510c, 0x0511fe66, 0x1c01f000,
+ 0x4807c856, 0x05fdff5a, 0x0519fb8d, 0x4df00000,
+ 0x0519fe1a, 0x5c03e000, 0x05180b7a, 0x59c400a4,
+ 0x9000050f, 0x90000582, 0x0502000a, 0x42006000,
+ 0xffffffff, 0x42006800, 0x00200000, 0x0501f8c4,
+ 0x42006000, 0xffdfffff, 0x41786800, 0x0501f8c0,
+ 0x0505ff1c, 0x05000010, 0x0505ff26, 0x0502000e,
+ 0x4a035041, 0x0000aaaa, 0x4c040000, 0x05e5f98f,
+ 0x59a8004d, 0x82000500, 0xffff0000, 0x80040540,
+ 0x4803504d, 0x5c000800, 0x64035042, 0x0505fe8a,
+ 0x0501f005, 0x641750b4, 0x60000001, 0x05e5f8d9,
+ 0x05fdff3f, 0x1c01f000, 0x0501f809, 0x42006000,
+ 0xbf7f7fff, 0x41786800, 0x0501f0a5, 0x42006000,
+ 0xbf7f7fff, 0x41786800, 0x0501f0a1, 0x0505ff09,
+ 0x05020009, 0x59c40006, 0x82000540, 0x000000f0,
+ 0x48038806, 0x42006000, 0xbfffffff, 0x41786800,
+ 0x0501f897, 0x1c01f000, 0x800408d0, 0x59a80043,
+ 0x8c000506, 0x05000006, 0x59a8003d, 0x82000500,
+ 0x000000ff, 0x80040540, 0x0501f003, 0x82040540,
+ 0x000000f7, 0x480388a7, 0x1c01f000, 0x4807c856,
+ 0x42000000, 0x0010e432, 0x053dfe0a, 0x60143000,
+ 0x4d3c0000, 0x4c180000, 0x60343000, 0x600a7800,
+ 0x0501f04f, 0x4807c856, 0x42000000, 0x0010e45c,
+ 0x053dfe00, 0x60003000, 0x4d3c0000, 0x4c180000,
+ 0x603c3000, 0x61fc19ff, 0x601c2000, 0x05f9fe65,
+ 0x5c003000, 0x59240200, 0x84000556, 0x48024a00,
+ 0x4d400000, 0x60aa8000, 0x59240400, 0x8c00050a,
+ 0x05380dbd, 0x600a7800, 0x05e9fc77, 0x5c028000,
+ 0x5c027800, 0x0005f7dc, 0x4807c856, 0x053dff38,
+ 0x0500000b, 0x4d400000, 0x4d200000, 0x05e9fc20,
+ 0x60068000, 0x60001802, 0x600c2800, 0x60040000,
+ 0x0505fc54, 0x5c024000, 0x5c028000, 0x42000000,
+ 0x0010e45a, 0x053dfddb, 0x600c3000, 0x4d3c0000,
+ 0x4c180000, 0x60383000, 0x600a7804, 0x0501f020,
+ 0x4807c856, 0x053dff22, 0x0500000b, 0x4d400000,
+ 0x4d200000, 0x05e9fc0a, 0x60068000, 0x60001802,
+ 0x60402800, 0x60040000, 0x0505fc3e, 0x5c024000,
+ 0x5c028000, 0x42000000, 0x0010e459, 0x053dfdc5,
+ 0x60103000, 0x4d3c0000, 0x4c180000, 0x60403000,
+ 0x600a7804, 0x0501f00a, 0x4807c856, 0x42000000,
+ 0x0010e39c, 0x053dfdbb, 0x60043000, 0x4d3c0000,
+ 0x4c180000, 0x60303000, 0x600a7800, 0x61fc19ff,
+ 0x601c2000, 0x4d200000, 0x417a4000, 0x05f9fe1d,
+ 0x5c024000, 0x5c003000, 0x4d400000, 0x053dfb65,
+ 0x60aa8000, 0x05e9f8a1, 0x4c580000, 0x053dfec5,
+ 0x42000800, 0x0010e512, 0x58040005, 0x82000500,
+ 0x000000ff, 0x48000805, 0x90040c0d, 0x8058b040,
+ 0x05fe07fa, 0x5c00b000, 0x5c028000, 0x5c027800,
+ 0x1c01f000, 0x4807c856, 0x05011000, 0x4a03c840,
+ 0x0010e06a, 0x6503c842, 0x40000000, 0x05fd17ff,
+ 0x42007800, 0x0010e06a, 0x64447800, 0x803c7800,
+ 0x4a007800, 0x220000ef, 0x4a007801, 0x000000ef,
+ 0x4a007802, 0x01380000, 0x64007803, 0x4a007804,
+ 0xffffffff, 0x64007805, 0x1c01f000, 0x59c400a3,
+ 0x80300500, 0x80340540, 0x480388a3, 0x1c01f000,
+ 0x4833c857, 0x59c400a3, 0x80300540, 0x480388a3,
+ 0x80300580, 0x480388a3, 0x1c01f000, 0x4803c856,
+ 0x05000003, 0x640750bd, 0x0501f002, 0x497b50bd,
+ 0x1c01f000, 0x59c80002, 0x80000540, 0x05000009,
+ 0x80000040, 0x05000007, 0x4a039005, 0x00000140,
+ 0x60300000, 0x80000040, 0x05fe07ff, 0x05fdf7f6,
+ 0x1c01f000, 0x4c5c0000, 0x4c600000, 0x59c4b805,
+ 0x485fc856, 0x8c5c053a, 0x05020004, 0x42000000,
+ 0x0010e39a, 0x053dfd5f, 0x4a038805, 0x20000000,
+ 0x05e5fc0c, 0x4000c000, 0x05e5fb53, 0x4a038805,
+ 0x04000000, 0x5c00c000, 0x5c00b800, 0x1c01f000,
+ 0x497a6a00, 0x0501faf4, 0x4a026c00, 0x00000707,
+ 0x497a6801, 0x497a6808, 0x497a6809, 0x497a6806,
+ 0x497a6807, 0x497a6c0b, 0x497a680c, 0x59240400,
+ 0x8c00050a, 0x05000005, 0x5934080f, 0x59340010,
+ 0x80040540, 0x05da0b41, 0x4a026a04, 0x00000100,
+ 0x497a6a03, 0x59340402, 0x82000500, 0x000000ff,
+ 0x48026c02, 0x497a6c04, 0x497a6a05, 0x497a6c05,
+ 0x497a6811, 0x4d2c0000, 0x5934000d, 0x49466c03,
+ 0x80025d40, 0x05000003, 0x05d9fef1, 0x497a680d,
+ 0x5c025800, 0x599c0401, 0x48026a0b, 0x599c0208,
+ 0x48026c12, 0x4a02680a, 0x00008000, 0x0505f1fb,
+ 0x60140000, 0x80000d80, 0x0501f024, 0x0501ff90,
+ 0x05020013, 0x59a80249, 0x8c00050a, 0x0502000d,
+ 0x59340212, 0x82000500, 0x0000ff00, 0x4803c857,
+ 0x05000008, 0x59340a00, 0x8c04051e, 0x000002be,
+ 0x60a40000, 0x60000820, 0x492fc857, 0x0501f013,
+ 0x492fc857, 0x60a00000, 0x0501f00e, 0x8d0c0502,
+ 0x05020003, 0x8d0c0500, 0x05000003, 0x60100000,
+ 0x0501f008, 0x60a40000, 0x59340a00, 0x8c04051e,
+ 0x05000004, 0x492fc857, 0x60000820, 0x0501f003,
+ 0x492fc857, 0x80000d80, 0x4803c857, 0x80028540,
+ 0x1c01f000, 0x490fc857, 0x8d0c0500, 0x05fe07f0,
+ 0x0501ff45, 0x05fe07ea, 0x59340200, 0x8c00050e,
+ 0x05fc07e7, 0x0001f2be, 0x4d480000, 0x4d4c0000,
+ 0x592e900c, 0x592e980d, 0x0501fc9f, 0x5c029800,
+ 0x5c029000, 0x05fc07c7, 0x0001f2c1, 0x492fc857,
+ 0x592e8c0a, 0x83440d80, 0x000007fc, 0x05000004,
+ 0x83440480, 0x000007f0, 0x05021018, 0x592e440b,
+ 0x050df861, 0x05000f80, 0x05020014, 0x0509ff48,
+ 0x05020012, 0x0501ff34, 0x05020012, 0x0521f904,
+ 0x05000019, 0x83200400, 0x0010d17b, 0x50024800,
0x4926601d, 0x59340002, 0x4802600b, 0x4936600a,
- 0x492e6009, 0x642a6407, 0x61027000, 0x0005fc78,
+ 0x492e6009, 0x642a6407, 0x61027000, 0x0009f800,
0x80000580, 0x0501f00b, 0x60a00000, 0x0501f008,
- 0x0501fd86, 0x05fc07fd, 0x910c0d03, 0x05000003,
+ 0x0501ff37, 0x05fc07fd, 0x910c0d03, 0x05000003,
0x60100000, 0x0501f002, 0x60a40000, 0x80000540,
0x1c01f000, 0x60b00000, 0x05fdf7fd, 0x492fc857,
- 0x592e4408, 0x4923c857, 0x0509fbe3, 0x592c4208,
+ 0x592e440b, 0x4923c857, 0x050df83b, 0x592c420b,
0x0500000a, 0x60380000, 0x59240a00, 0x8c040500,
- 0x05000160, 0x90200d0f, 0x90040d88, 0x0502015d,
- 0x90200d30, 0x0500015b, 0x592e8c07, 0x4947c857,
- 0x83440c80, 0x00000800, 0x60280000, 0x05021155,
- 0x4823c857, 0x9020050f, 0x0c01f001, 0x0010404e,
- 0x001040c5, 0x00104108, 0x00104110, 0x00104118,
- 0x0010404b, 0x0010404b, 0x0010404b, 0x00104122,
- 0x0010416f, 0x0010418b, 0x0010404b, 0x0010404b,
- 0x0010404b, 0x0010404b, 0x0010404b, 0x4803c857,
- 0x60300000, 0x0501f13f, 0x592c1009, 0x82081500,
- 0x00ffffff, 0x59240005, 0x80084d80, 0x60400000,
- 0x05000138, 0x0501fcae, 0x0500002d, 0x4803c857,
- 0x90004d9d, 0x05020016, 0x0005f8e2, 0x59340405,
- 0x4c000000, 0x0501fd1a, 0x5c000000, 0x05000004,
+ 0x05000198, 0x90200d0f, 0x90040d88, 0x05020195,
+ 0x90200d30, 0x05000193, 0x592e8c0a, 0x4947c857,
+ 0x83440c80, 0x00000800, 0x60280000, 0x0502118d,
+ 0x4823c857, 0x9020050f, 0x0c01f001, 0x00105346,
+ 0x001053d9, 0x00105428, 0x00105430, 0x00105438,
+ 0x00105343, 0x00105343, 0x00105343, 0x00105442,
+ 0x0010549f, 0x001054bb, 0x00105343, 0x00105343,
+ 0x00105343, 0x00105343, 0x00105343, 0x4803c857,
+ 0x60300000, 0x0501f177, 0x592c100c, 0x82081500,
+ 0x00ffffff, 0x0501fdc4, 0x0500002d, 0x4803c857,
+ 0x90004d9d, 0x05020016, 0x0509fcb5, 0x59340405,
+ 0x4c000000, 0x0501fed4, 0x5c000000, 0x05000004,
0x8c20050a, 0x05000022, 0x80000580, 0x44002800,
0x59340008, 0x48002802, 0x59340009, 0x48002801,
0x59340006, 0x48002804, 0x59340007, 0x48002803,
- 0x6014b000, 0x0525fad9, 0x0501f141, 0x4803c857,
- 0x90004d9a, 0x05020003, 0x40101000, 0x0501f11e,
+ 0x6014b000, 0x052dffb9, 0x0501f17d, 0x4803c857,
+ 0x90004d9a, 0x05020003, 0x40101000, 0x0501f15a,
0x4803c857, 0x90004d9b, 0x05020003, 0x40181000,
- 0x0501f119, 0x4803c857, 0x90004d9f, 0x0500011a,
- 0x90004d9c, 0x05000118, 0x90004d99, 0x60280000,
- 0x0500010c, 0x60280000, 0x0502011d, 0x59a8008d,
- 0x8c000502, 0x05000016, 0x0501fcf1, 0x05000014,
+ 0x0501f155, 0x4803c857, 0x90004d9f, 0x05000156,
+ 0x90004d9c, 0x05000154, 0x90004d99, 0x60280000,
+ 0x05000148, 0x60280000, 0x05020159, 0x59a800d1,
+ 0x8c000502, 0x05000016, 0x0501feab, 0x05000014,
0x59340212, 0x82000500, 0x0000ff00, 0x60401000,
- 0x0502000b, 0x60201000, 0x59a8021b, 0x8c000506,
+ 0x0502000b, 0x60201000, 0x59a80249, 0x8c000506,
0x05020008, 0x59340002, 0x82000500, 0x00ff0000,
- 0x82000580, 0x00ff0000, 0x05000005, 0x0501ff65,
- 0x60700000, 0x40181000, 0x050200f7, 0x0515fe62,
- 0x050000ff, 0x82200500, 0x00000100, 0x0501fc80,
- 0x4926601d, 0x4936600a, 0x0525f820, 0x492e6009,
- 0x64066407, 0x8c20050a, 0x05000004, 0x592c0405,
- 0x8400055c, 0x48025c05, 0x4c200000, 0x4d3c0000,
- 0x60027830, 0x0201f800, 0x0010ee7a, 0x5c027800,
- 0x5c004000, 0x8c200512, 0x0500000b, 0x599c0018,
- 0x8c000518, 0x05000008, 0x592c000a, 0x82000500,
+ 0x82000580, 0x00ff0000, 0x05000005, 0x0505f924,
+ 0x60700000, 0x40181000, 0x05020133, 0x0521f874,
+ 0x0500013b, 0x82200500, 0x00000100, 0x0501fe3e,
+ 0x4926601d, 0x4936600a, 0x052dfcf9, 0x492e6009,
+ 0x64066407, 0x8c20050a, 0x05000004, 0x592c0408,
+ 0x8400055c, 0x48025c08, 0x4c200000, 0x4d3c0000,
+ 0x60027830, 0x05e5ff8b, 0x5c027800, 0x5c004000,
+ 0x592c100c, 0x82081500, 0x00ffffff, 0x59240005,
+ 0x80081d80, 0x0502001c, 0x4a026c00, 0x00000404,
+ 0x497a6a05, 0x497a6c05, 0x8c20050a, 0x05020006,
+ 0x4a026c00, 0x00000606, 0x4a026a05, 0x00002000,
+ 0x648a6c05, 0x59240001, 0x59240802, 0x48026806,
+ 0x48066807, 0x59240003, 0x59240804, 0x48026808,
+ 0x48066809, 0x59a80004, 0x48026a04, 0x0505f90f,
+ 0x0005ffdc, 0x592c0408, 0x8400051c, 0x48025c08,
+ 0x0501f11b, 0x8c200512, 0x0500000b, 0x599c0018,
+ 0x8c000518, 0x05000008, 0x592c000d, 0x82000500,
0x00000380, 0x5934080a, 0x80040d40, 0x84040d54,
- 0x4806680a, 0x417a7800, 0x0501f8f5, 0x600c0800,
- 0x0501f8fe, 0x600a7000, 0x0005fc78, 0x80000580,
- 0x0501f0ee, 0x0501fd0b, 0x050200d9, 0x0501fcb6,
- 0x05000009, 0x0501fcae, 0x050200d9, 0x4c600000,
- 0x4178c000, 0x60027830, 0x417a6000, 0x05edfc2b,
- 0x5c00c000, 0x59a8008d, 0x8c000502, 0x05000016,
- 0x0501fca3, 0x05000014, 0x59340212, 0x82000500,
+ 0x4806680a, 0x417a7800, 0x0501f911, 0x600c0800,
+ 0x0501f919, 0x600a7000, 0x0009f800, 0x80000580,
+ 0x0501f10a, 0x0501fea0, 0x050200f5, 0x0501fe50,
+ 0x05000009, 0x0501fe48, 0x050200f5, 0x4c600000,
+ 0x4178c000, 0x60027830, 0x417a6000, 0x05e5ffc1,
+ 0x5c00c000, 0x592c100c, 0x82081500, 0x00ffffff,
+ 0x59240005, 0x80084d80, 0x05020007, 0x4a026c00,
+ 0x00000606, 0x4a026a05, 0x00002000, 0x648a6c05,
+ 0x0501f0ef, 0x59a800d1, 0x8c000502, 0x05000016,
+ 0x0501fe31, 0x05000014, 0x59340212, 0x82000500,
0x0000ff00, 0x60401000, 0x0502000b, 0x60201000,
- 0x59a8021b, 0x8c000506, 0x05020008, 0x59340002,
+ 0x59a80249, 0x8c000506, 0x05020008, 0x59340002,
0x82000500, 0x00ff0000, 0x82000580, 0x00ff0000,
- 0x05000005, 0x0501ff17, 0x60700000, 0x40181000,
- 0x050200a9, 0x0515fe14, 0x050000b1, 0x5934080a,
+ 0x05000005, 0x0505f8aa, 0x60700000, 0x40181000,
+ 0x050200b9, 0x051dfffa, 0x050000c1, 0x5934080a,
0x8c200512, 0x0500000c, 0x599c0018, 0x8c000518,
- 0x05000009, 0x592c000a, 0x82000500, 0x00000380,
+ 0x05000009, 0x592c000d, 0x82000500, 0x00000380,
0x82041500, 0xfffffc7f, 0x80080d40, 0x84040d54,
0x0501f002, 0x84040d14, 0x4806680a, 0x4926601d,
- 0x4936600a, 0x0521ffc5, 0x492e6009, 0x64066407,
- 0x417a7800, 0x0501f8b2, 0x60140800, 0x0501f8bb,
- 0x600e7000, 0x0005fc78, 0x80000580, 0x0501f0ab,
- 0x0501fcc8, 0x05020096, 0x0501fc87, 0x05020098,
- 0x0525f96f, 0x0500008e, 0x80000580, 0x0501f0a3,
- 0x0501fcc0, 0x0502008e, 0x0501fc7f, 0x05020090,
- 0x0521fc86, 0x05000086, 0x80000580, 0x0501f09b,
- 0x0501fcb8, 0x05020086, 0x83444d80, 0x000007fe,
- 0x60280000, 0x0502006f, 0x0525f971, 0x0500007c,
- 0x80000580, 0x0501f091, 0xb0200530, 0x05020004,
- 0x8c20050e, 0x60300000, 0x05020066, 0x8c20050a,
- 0x0500000c, 0x4d3c0000, 0x600278a0, 0x8c20050e,
+ 0x4936600a, 0x052dfc72, 0x492e6009, 0x64066407,
+ 0x417a7800, 0x0501f8c2, 0x60140800, 0x0501f8ca,
+ 0x600e7000, 0x0009f800, 0x80000580, 0x0501f0bb,
+ 0x0501fe51, 0x050200a6, 0x0501fe10, 0x050200a8,
+ 0x052dfe17, 0x0500009e, 0x80000580, 0x0501f0b3,
+ 0x0501fe49, 0x0502009e, 0x0501fe08, 0x050200a0,
+ 0x052df937, 0x05000096, 0x80000580, 0x0501f0ab,
+ 0x0501fe41, 0x05020096, 0x83444d80, 0x000007fe,
+ 0x60280000, 0x0502007f, 0x052dfe19, 0x0500008c,
+ 0x80000580, 0x0501f0a1, 0xb0200530, 0x05020004,
+ 0x8c20050e, 0x60300000, 0x05020076, 0x8c20050a,
+ 0x0500000f, 0x4d3c0000, 0x600278a0, 0x8c20050e,
0x05020003, 0x853e7d56, 0x853e7d1c, 0x82200500,
- 0x000004a0, 0x0501fc11, 0x5c027800, 0x0501f07c,
- 0x8c200508, 0x0502001e, 0x592c1009, 0x82081500,
- 0x00ffffff, 0x59240005, 0x80084d80, 0x60400000,
- 0x05000050, 0x0501fbc6, 0x05000024, 0x4803c857,
- 0x90004d9a, 0x05020003, 0x40101000, 0x0501f04e,
- 0x4803c857, 0x90004d9b, 0x05020003, 0x40181000,
- 0x0501f049, 0x4803c857, 0x90004d9f, 0x0500004a,
- 0x90004d9c, 0x05000048, 0x90004d99, 0x60280000,
- 0x0500003c, 0x60280000, 0x0501f04d, 0x0501fc7d,
- 0x0502004b, 0x4d3c0000, 0x600278a0, 0x8c20050e,
- 0x05020003, 0x853e7d56, 0x853e7d1c, 0x82200500,
- 0x00000090, 0x0501fbd0, 0x5c027800, 0x60280000,
- 0x0502002c, 0x0501f04e, 0x916c0583, 0x601c0800,
- 0x05020005, 0x0525f8ce, 0x05000006, 0x80000580,
- 0x0501f04a, 0x0501fc4c, 0x05000042, 0x0501f044,
- 0x0501fc49, 0x0500002e, 0x0501f041, 0x0501fc61,
+ 0x000004a0, 0x42026000, 0x00111a70, 0x492e6009,
+ 0x0501fda3, 0x5c027800, 0x0501f089, 0x8c200508,
+ 0x0502001a, 0x592c100c, 0x82081500, 0x00ffffff,
+ 0x0501fcb1, 0x05000027, 0x4803c857, 0x90004d9a,
+ 0x05020003, 0x40101000, 0x0501f05f, 0x4803c857,
+ 0x90004d9b, 0x05020003, 0x40181000, 0x0501f05a,
+ 0x4803c857, 0x90004d9f, 0x0500005b, 0x90004d9c,
+ 0x05000059, 0x90004d99, 0x60280000, 0x0500004d,
+ 0x60280000, 0x0501f05e, 0x0501fe07, 0x0502005c,
+ 0x4d3c0000, 0x600278a0, 0x8c20050e, 0x05020003,
+ 0x853e7d56, 0x853e7d1c, 0x82200500, 0x00000090,
+ 0x42026000, 0x00111a70, 0x492e6009, 0x0501fd60,
+ 0x5c027800, 0x60280000, 0x0502003a, 0x0501f05c,
+ 0x592c100c, 0x82081500, 0x00ffffff, 0x59240005,
+ 0x80084d80, 0x05020003, 0x84204548, 0x05fdf7e9,
+ 0x916c0583, 0x601c0800, 0x05020005, 0x052dfd6c,
+ 0x05000009, 0x80000580, 0x0501f050, 0x42026000,
+ 0x00111a70, 0x492e6009, 0x0501fdc8, 0x05000045,
+ 0x0501f047, 0x42026000, 0x00111a70, 0x492e6009,
+ 0x0501fdc2, 0x0500002e, 0x0501f041, 0x0501fdda,
0x0502002f, 0x916c0583, 0x05020036, 0x8c200508,
0x05000008, 0x4c600000, 0x4178c000, 0x60027830,
- 0x417a6000, 0x05edfb81, 0x5c00c000, 0x0501f034,
- 0x0501fc01, 0x05000009, 0x0501fbf9, 0x05020024,
+ 0x417a6000, 0x05e5fefb, 0x5c00c000, 0x0501f034,
+ 0x0501fd7f, 0x05000009, 0x0501fd77, 0x05020024,
0x4c600000, 0x4178c000, 0x60027830, 0x417a6000,
- 0x05edfb76, 0x5c00c000, 0x480bc856, 0x0521ff4d,
+ 0x05e5fef0, 0x5c00c000, 0x480bc856, 0x052dfbea,
0x05000013, 0x80000580, 0x0501f028, 0x05fdf7e4,
0x480bc857, 0x60640800, 0x40001000, 0x6008b000,
0x0501f008, 0x480bc857, 0x40000800, 0x6008b000,
@@ -17035,80 +5469,79 @@ static const uint32_t isp_2500_multi_risc_code[] = {
0x4178b000, 0x90000541, 0x1c01f000, 0x4937c857,
0x5932680a, 0x59341200, 0x813e79c0, 0x05000003,
0x84081540, 0x0501f002, 0x84081500, 0x480a6a00,
- 0x1c01f000, 0x40680800, 0x5932680a, 0x5c000000,
- 0x4c000000, 0x4803c857, 0x4937c857, 0x83340580,
- 0x0010ce8f, 0x0500001f, 0x90040586, 0x05020003,
- 0x6018000c, 0x0501f014, 0x90040584, 0x05020003,
- 0x60100008, 0x0501f010, 0x90040587, 0x601c000e,
- 0x0500000d, 0x90040583, 0x600c000e, 0x0500000a,
- 0x90040585, 0x60140008, 0x05000007, 0x90040589,
- 0x60240008, 0x05000004, 0x9004058b, 0x602c000e,
- 0x05e20813, 0x4803c857, 0x48026c00, 0x90040d86,
- 0x05020004, 0x59341404, 0x800811c0, 0x05e0080c,
- 0x1c01f000, 0x40683000, 0x0501f805, 0x41358800,
- 0x05000002, 0x41798800, 0x1c01f000, 0x5c000000,
- 0x4c000000, 0x4803c857, 0x4947c857, 0x481bc857,
- 0x83440480, 0x00000800, 0x05021055, 0x83200400,
- 0x0010a3b3, 0x50024800, 0x59240009, 0x83441480,
- 0x000007f0, 0x05001003, 0x80081400, 0x0501f003,
- 0x83441400, 0x0010a600, 0x50080000, 0x80026d40,
- 0x05000005, 0x59340013, 0x80000130, 0x81200580,
- 0x05000016, 0x4c180000, 0x4d2c0000, 0x05e1fb62,
- 0x412e6800, 0x5c025800, 0x5c003000, 0x0500003c,
- 0x59242005, 0x812000f0, 0x80102540, 0x48126813,
- 0x59242207, 0x80102000, 0x48124a07, 0x45341000,
- 0x497a680d, 0x497a6810, 0x497a680f, 0x4c180000,
- 0x05fdfd7a, 0x5c003000, 0x59340a12, 0x4c040000,
- 0x0505f916, 0x5c000800, 0x05000009, 0x82180500,
- 0x00ffff00, 0x05000008, 0x59a8100f, 0x82081500,
- 0x00ffff00, 0x80080580, 0x05000003, 0x80000580,
- 0x0501f004, 0x82180500, 0x000000ff, 0x800000d0,
- 0x80040d80, 0x05000003, 0x4803c857, 0x48026a12,
- 0x59340813, 0x59242005, 0x812000f0, 0x80102540,
- 0x40040000, 0x80100580, 0x05000003, 0x4813c857,
- 0x48126813, 0x83440580, 0x000007fe, 0x05020004,
- 0x4a026802, 0x00fffffe, 0x0501f006, 0x59340002,
- 0x80180580, 0x05000003, 0x481bc857, 0x481a6802,
- 0x0501f806, 0x80000580, 0x1c01f000, 0x4803c856,
- 0x90000541, 0x05fdf7fd, 0x59341200, 0x84081508,
- 0x5934000a, 0x8c00050c, 0x0502000b, 0x599c0018,
- 0x8c000510, 0x05000009, 0x59a80006, 0x8c00050a,
- 0x05000005, 0x59340c03, 0x82040480, 0x000007f0,
- 0x05001002, 0x84081548, 0x480a6a00, 0x1c01f000,
- 0x4947c857, 0x83440480, 0x00000800, 0x05021018,
- 0x83200400, 0x0010a3b3, 0x50024800, 0x59240009,
+ 0x1c01f000, 0x5932680a, 0x5c000000, 0x4c000000,
+ 0x4803c857, 0x4937c857, 0x83340580, 0x00110210,
+ 0x0500001f, 0x90040586, 0x05020003, 0x6018000c,
+ 0x0501f014, 0x90040584, 0x05020003, 0x60100008,
+ 0x0501f010, 0x90040587, 0x601c000e, 0x0500000d,
+ 0x90040583, 0x600c000e, 0x0500000a, 0x90040585,
+ 0x60140008, 0x05000007, 0x90040589, 0x60240008,
+ 0x05000004, 0x9004058b, 0x602c000e, 0x05da08cf,
+ 0x4803c857, 0x48026c00, 0x90040d86, 0x05020004,
+ 0x59341404, 0x800811c0, 0x05d808c8, 0x1c01f000,
+ 0x5c000000, 0x4c000000, 0x4803c857, 0x4947c857,
+ 0x481bc857, 0x83440480, 0x00000800, 0x0502105f,
+ 0x83200400, 0x0010d17b, 0x50024800, 0x59240009,
0x83441480, 0x000007f0, 0x05001003, 0x80081400,
- 0x0501f003, 0x83441400, 0x0010a600, 0x50080000,
- 0x80026d40, 0x05000009, 0x0501fb09, 0x05020008,
- 0x8d0c0502, 0x05000004, 0x59340200, 0x8c00050e,
- 0x05000003, 0x90000541, 0x1c01f000, 0x80000580,
- 0x05fdf7fe, 0x5c000000, 0x4c000000, 0x4803c857,
- 0x4947c857, 0x0501f805, 0x60058800, 0x05000002,
- 0x60018800, 0x1c01f000, 0x4d2c0000, 0x4d300000,
- 0x83440480, 0x00000800, 0x0502101d, 0x83441400,
- 0x0010a600, 0x50080000, 0x80026d40, 0x05000014,
- 0x45781000, 0x5934000d, 0x80025d40, 0x05e20b06,
- 0x59366011, 0x813261c0, 0x0500000a, 0x4c640000,
- 0x5930c800, 0x59325809, 0x0521fa5d, 0x05e20afe,
- 0x0005fc5a, 0x90666540, 0x05fe07fa, 0x5c00c800,
- 0x0501fd5f, 0x41365800, 0x05e1faef, 0x80000580,
- 0x5c026000, 0x5c025800, 0x1c01f000, 0x90000541,
- 0x05fdf7fc, 0x0001fae7, 0x41358800, 0x05000002,
- 0x41798800, 0x1c01f000, 0x4c580000, 0x59cc0001,
+ 0x0501f003, 0x83441400, 0x0010d400, 0x50080000,
+ 0x80026d40, 0x05000005, 0x59340013, 0x80000130,
+ 0x81200580, 0x0500001e, 0x4c180000, 0x4d2c0000,
+ 0x05d9fc41, 0x412e6800, 0x5c025800, 0x5c003000,
+ 0x05000046, 0x59242005, 0x812000f0, 0x80102540,
+ 0x48126813, 0x5924200b, 0x82100500, 0x00001fff,
+ 0x800000c2, 0x82102500, 0xffffe000, 0x80100540,
+ 0x48026814, 0x59242207, 0x80102000, 0x48124a07,
+ 0x45341000, 0x497a680d, 0x497a6810, 0x497a680f,
+ 0x4c180000, 0x05fdfd3f, 0x5c003000, 0x59340a12,
+ 0x4c040000, 0x0505fb61, 0x5c000800, 0x05000009,
+ 0x82180500, 0x00ffff00, 0x05000008, 0x59a8103d,
+ 0x82081500, 0x00ffff00, 0x80080580, 0x05000003,
+ 0x80000580, 0x0501f004, 0x82180500, 0x000000ff,
+ 0x800000d0, 0x80040d80, 0x05000003, 0x4803c857,
+ 0x48026a12, 0x59340813, 0x59242005, 0x801021c0,
+ 0x05000008, 0x812000f0, 0x80102540, 0x40040000,
+ 0x80100580, 0x05000003, 0x4813c857, 0x48126813,
+ 0x83440580, 0x000007fe, 0x05020004, 0x4a026802,
+ 0x00fffffe, 0x0501f006, 0x59340002, 0x80180580,
+ 0x05000003, 0x481bc857, 0x481a6802, 0x0501f806,
+ 0x80000580, 0x1c01f000, 0x4803c856, 0x90000541,
+ 0x05fdf7fd, 0x59341200, 0x84081508, 0x5934000a,
+ 0x8c00050c, 0x0502000b, 0x599c0018, 0x8c000510,
+ 0x05000009, 0x59a80006, 0x8c00050a, 0x05000005,
+ 0x59340c03, 0x82040480, 0x000007f0, 0x05001002,
+ 0x84081548, 0x480a6a00, 0x1c01f000, 0x4947c857,
+ 0x83440480, 0x00000800, 0x05021018, 0x83200400,
+ 0x0010d17b, 0x50024800, 0x59240009, 0x83441480,
+ 0x000007f0, 0x05001003, 0x80081400, 0x0501f003,
+ 0x83441400, 0x0010d400, 0x50080000, 0x80026d40,
+ 0x05000009, 0x0501fc84, 0x05020008, 0x8d0c0502,
+ 0x05000004, 0x59340200, 0x8c00050e, 0x05000003,
+ 0x90000541, 0x1c01f000, 0x80000580, 0x05fdf7fe,
+ 0x5c000000, 0x4c000000, 0x4803c857, 0x4947c857,
+ 0x4d2c0000, 0x4d300000, 0x83440580, 0x0000ffff,
+ 0x0500001c, 0x83440480, 0x00000800, 0x0502101d,
+ 0x83441400, 0x0010d400, 0x50080000, 0x80026d40,
+ 0x05000014, 0x45781000, 0x5934000d, 0x80025d40,
+ 0x05da0bdb, 0x59366011, 0x813261c0, 0x0500000a,
+ 0x4c640000, 0x5930c800, 0x59325809, 0x0529ff02,
+ 0x05da0bd3, 0x0005ffdc, 0x90666540, 0x05fe07fa,
+ 0x5c00c800, 0x0501fee1, 0x41365800, 0x05d9fbc4,
+ 0x80000580, 0x5c026000, 0x5c025800, 0x1c01f000,
+ 0x90000541, 0x05fdf7fc, 0x4c580000, 0x59cc0001,
0x4937c857, 0x82000500, 0x00ffffff, 0x48026802,
0x497a6c01, 0x497a6a01, 0x59340200, 0x82000500,
- 0xffffdffd, 0x48026a00, 0x4004b000, 0x0505f87b,
+ 0xffffdffd, 0x48026a00, 0x4004b000, 0x0505facb,
0x05020012, 0x59340403, 0x82000580, 0x000007fe,
- 0x05000005, 0x59a8021b, 0x8c00050a, 0x0502000b,
+ 0x05000005, 0x59a80249, 0x8c00050a, 0x0502000b,
0x0501f008, 0x59cc0408, 0x8c000518, 0x05000007,
- 0x59cc0009, 0x4803502c, 0x59cc000a, 0x4803502d,
+ 0x59cc0009, 0x4803505a, 0x59cc000a, 0x4803505b,
0x8058b1c0, 0x05020001, 0x59cc0a09, 0x90040d10,
0x59cc0408, 0x90000520, 0x05000005, 0x84040d40,
- 0x59a8121b, 0x8408155a, 0x480b521b, 0x5934000a,
+ 0x59a81249, 0x8408155a, 0x480b5249, 0x5934000a,
0x82000500, 0xffffffee, 0x80040540, 0x4802680a,
- 0x91cca40b, 0x9134ac06, 0x6008b000, 0x0531f835,
- 0x91cca40d, 0x9134ac08, 0x6008b000, 0x0531f831,
- 0x59a8208c, 0x82100d00, 0x0000f000, 0x82040d80,
+ 0x91cca40b, 0x9134ac06, 0x6008b000, 0x053dfaa0,
+ 0x91cca40d, 0x9134ac08, 0x6008b000, 0x053dfa9c,
+ 0x59a820d0, 0x82100d00, 0x0000f000, 0x82040d80,
0x00003000, 0x05020017, 0x59cc0013, 0x8c00053e,
0x05000014, 0x59cc0414, 0x599c0818, 0x8c040512,
0x0500000e, 0x8c00051e, 0x05000005, 0x59340200,
@@ -17120,291 +5553,390 @@ static const uint32_t isp_2500_multi_risc_code[] = {
0x00000800, 0x0502100a, 0x82040480, 0x00000400,
0x05001003, 0x60000808, 0x0501f005, 0x82040480,
0x00000200, 0x05001002, 0x60000804, 0x42001000,
- 0x0010aefa, 0x58080201, 0x80041480, 0x05001002,
+ 0x0010e060, 0x58080201, 0x80041480, 0x05001002,
0x40000800, 0x48066a04, 0x59340403, 0x82000580,
0x000007fe, 0x05020003, 0x59cc0a08, 0x48066a04,
- 0x0501fcff, 0x5c00b000, 0x1c01f000, 0x59a8021b,
- 0x4937c857, 0x8c000508, 0x05000007, 0x84000556,
- 0x4803c857, 0x4803521b, 0x42001000, 0x0010f866,
- 0x050df9c0, 0x59cc0207, 0x4803c857, 0x48026a05,
- 0x59cc020a, 0x4803c857, 0x48026c05, 0x59341200,
+ 0x0501fe86, 0x5c00b000, 0x1c01f000, 0x4937c857,
+ 0x59cc0207, 0x4803c857, 0x48026a05, 0x59cc020a,
+ 0x4803c857, 0x48026c05, 0x59cc2006, 0x59341200,
0x599c0818, 0x5934180a, 0x4807c857, 0x480bc857,
- 0x480fc857, 0x59cc2006, 0x82102500, 0xff000000,
- 0x82102580, 0x02000000, 0x05000007, 0x8c00050e,
- 0x05000009, 0x8c0c0514, 0x05000003, 0x8c0c050e,
- 0x05000005, 0x8c040518, 0x05000003, 0x8408154a,
- 0x0501f002, 0x8408150a, 0x8c000510, 0x05000009,
- 0x8c0c0514, 0x05000003, 0x8c0c0510, 0x05000005,
- 0x8c040518, 0x05000003, 0x8408154e, 0x0501f002,
- 0x8408150e, 0x8c000512, 0x05000009, 0x8c0c0514,
- 0x05000003, 0x8c0c0512, 0x05000005, 0x8c040518,
- 0x05000003, 0x8408155c, 0x0501f002, 0x8408151c,
- 0x480a6a00, 0x1c01f000, 0x4803c856, 0x4c5c0000,
- 0x4d2c0000, 0x4c580000, 0x5934000d, 0x80025d40,
- 0x05000023, 0x592c0003, 0x90000488, 0x0500100a,
- 0x412cb800, 0x592c0001, 0x80025d40, 0x05fe07fa,
- 0x05e1fa10, 0x0500002e, 0x492fc857, 0x492cb801,
- 0x0501f01b, 0x912c0c04, 0x6020b000, 0x50040000,
- 0x82000580, 0xffffffff, 0x05020006, 0x80041000,
- 0x50080000, 0x82000580, 0xffffffff, 0x05000005,
- 0x90040c02, 0x8058b040, 0x05fe07f5, 0x05ddfe70,
- 0x45480800, 0x454c1000, 0x592c1803, 0x800c1800,
- 0x480e5803, 0x480fc857, 0x0501f010, 0x05e1f9f5,
- 0x05000013, 0x492fc857, 0x492e680d, 0x497a5802,
- 0x64065803, 0x494a5804, 0x494e5805, 0x912c0c06,
- 0x6038b000, 0x46000800, 0xffffffff, 0x80040800,
- 0x8058b040, 0x05fe07fc, 0x90000541, 0x5c00b000,
- 0x5c025800, 0x5c00b800, 0x1c01f000, 0x80000580,
- 0x05fdf7fb, 0x4803c856, 0x4d3c0000, 0x4d2c0000,
- 0x5934000d, 0x80025d40, 0x0500001c, 0x592c0002,
- 0x80000540, 0x0502001c, 0x412e7800, 0x0501f8a6,
- 0x05020019, 0x46000800, 0xffffffff, 0x46001000,
- 0xffffffff, 0x4813c857, 0x480fc857, 0x580c0003,
- 0x90000c82, 0x05021012, 0x480fc857, 0x400c0000,
- 0x812c0580, 0x05020004, 0x580c0001, 0x4802680d,
- 0x0501f003, 0x580c0001, 0x48002001, 0x400e5800,
- 0x05e1f9d0, 0x90000541, 0x5c025800, 0x5c027800,
- 0x1c01f000, 0x80000580, 0x05fdf7fc, 0x80000040,
- 0x48001803, 0x4803c857, 0x05fdf7f7, 0x64225a07,
- 0x0001f35b, 0x64a65a07, 0x0001f35b, 0x64aa5a07,
- 0x0001f35b, 0x64a25a07, 0x0001f35b, 0x643a5a07,
- 0x0001f35b, 0x4943c857, 0x4d440000, 0x4d340000,
- 0x4d2c0000, 0x4c580000, 0x61c0b00f, 0x417a8800,
- 0x0001fae7, 0x05020007, 0x8d3c0506, 0x05000004,
- 0x59340200, 0x8c00050e, 0x05020002, 0x0501f811,
- 0x81468800, 0x8058b040, 0x05fe07f6, 0x83440480,
- 0x00000800, 0x05021006, 0x8d3c0502, 0x05000004,
- 0x61c2880f, 0x6040b000, 0x05fdf7ee, 0x5c00b000,
- 0x5c025800, 0x5c026800, 0x5c028800, 0x1c01f000,
- 0x4d2c0000, 0x4c600000, 0x4c5c0000, 0x4178b800,
- 0x5936580f, 0x812e59c0, 0x0500002b, 0x592c0205,
- 0x82000500, 0x000000ff, 0x90000592, 0x05000023,
- 0xb00005a0, 0x05000021, 0x90000588, 0x0500001f,
- 0x8d3c0500, 0x05000003, 0x0501f845, 0x0502001b,
- 0x592cc000, 0x497a5800, 0x805cb9c0, 0x05020009,
- 0x59340010, 0x812c0580, 0x05020004, 0x497a680f,
- 0x497a6810, 0x0501f008, 0x4862680f, 0x0501f006,
- 0x4860b800, 0x59340010, 0x812c0580, 0x05020002,
- 0x485e6810, 0x0001ff6c, 0x4a025a05, 0x00000103,
- 0x49425a07, 0x497a580a, 0x0521fa3d, 0x0001fb5b,
- 0x40625800, 0x05fdf7d8, 0x412cb800, 0x592e5800,
- 0x05fdf7d5, 0x5c00b800, 0x5c00c000, 0x5c025800,
+ 0x480fc857, 0x82102500, 0xff000000, 0x82102580,
+ 0x02000000, 0x05000007, 0x8c00050e, 0x05000009,
+ 0x8c0c0514, 0x05000003, 0x8c0c050e, 0x05000005,
+ 0x8c040518, 0x05000003, 0x8408154a, 0x0501f002,
+ 0x8408150a, 0x8c000510, 0x05000009, 0x8c0c0514,
+ 0x05000003, 0x8c0c0510, 0x05000005, 0x8c040518,
+ 0x05000003, 0x8408154e, 0x0501f002, 0x8408150e,
+ 0x8c000512, 0x05000009, 0x8c0c0514, 0x05000003,
+ 0x8c0c0512, 0x05000005, 0x8c040518, 0x05000003,
+ 0x8408155c, 0x0501f002, 0x8408151c, 0x480a6a00,
+ 0x8c000500, 0x05000005, 0x053dfab1, 0x05000003,
+ 0x840c1d4a, 0x0501f002, 0x840c1d0a, 0x480e680a,
+ 0x59a80249, 0x8c000508, 0x05000007, 0x84000556,
+ 0x4803c857, 0x48035249, 0x42001000, 0x0010582b,
+ 0x0511f825, 0x1c01f000, 0x592c0015, 0x4803c857,
+ 0x48026805, 0x80000120, 0x42002000, 0x02000000,
+ 0x05fdf7bb, 0x4803c856, 0x4c5c0000, 0x4d2c0000,
+ 0x4c580000, 0x5934000d, 0x80025d40, 0x05000023,
+ 0x592c0006, 0x90000488, 0x0500100a, 0x412cb800,
+ 0x592c0001, 0x80025d40, 0x05fe07fa, 0x05d9fadb,
+ 0x0500002e, 0x492fc857, 0x492cb801, 0x0501f01b,
+ 0x912c0c07, 0x6020b000, 0x50040000, 0x82000580,
+ 0xffffffff, 0x05020006, 0x80041000, 0x50080000,
+ 0x82000580, 0xffffffff, 0x05000005, 0x90040c02,
+ 0x8058b040, 0x05fe07f5, 0x05d5ff20, 0x45480800,
+ 0x454c1000, 0x592c1806, 0x800c1800, 0x480e5806,
+ 0x480fc857, 0x0501f010, 0x05d9fac0, 0x05000013,
+ 0x492fc857, 0x492e680d, 0x497a5805, 0x64065806,
+ 0x494a5807, 0x494e5808, 0x912c0c09, 0x6038b000,
+ 0x46000800, 0xffffffff, 0x80040800, 0x8058b040,
+ 0x05fe07fc, 0x90000541, 0x5c00b000, 0x5c025800,
+ 0x5c00b800, 0x1c01f000, 0x80000580, 0x05fdf7fb,
+ 0x4803c856, 0x4d3c0000, 0x4d2c0000, 0x5934000d,
+ 0x80025d40, 0x0500001c, 0x592c0005, 0x80000540,
+ 0x0502001c, 0x412e7800, 0x0501f8a7, 0x05020019,
+ 0x46000800, 0xffffffff, 0x46001000, 0xffffffff,
+ 0x4813c857, 0x480fc857, 0x580c0006, 0x90000c82,
+ 0x05021012, 0x480fc857, 0x400c0000, 0x812c0580,
+ 0x05020004, 0x580c0001, 0x4802680d, 0x0501f003,
+ 0x580c0001, 0x48002001, 0x400e5800, 0x05d9fa9b,
+ 0x90000541, 0x5c025800, 0x5c027800, 0x1c01f000,
+ 0x80000580, 0x05fdf7fc, 0x80000040, 0x48001806,
+ 0x4803c857, 0x05fdf7f7, 0x64225a0a, 0x0001f382,
+ 0x64a65a0a, 0x0001f382, 0x64aa5a0a, 0x0001f382,
+ 0x64a25a0a, 0x0001f382, 0x643a5a0a, 0x0001f382,
+ 0x4943c857, 0x4d440000, 0x4d340000, 0x4d2c0000,
+ 0x4c580000, 0x61c0b00f, 0x417a8800, 0x0001fb00,
+ 0x05020007, 0x8d3c0506, 0x05000004, 0x59340200,
+ 0x8c00050e, 0x05020002, 0x0501f811, 0x81468800,
+ 0x8058b040, 0x05fe07f6, 0x83440480, 0x00000800,
+ 0x05021006, 0x8d3c0502, 0x05000004, 0x61c2880f,
+ 0x6040b000, 0x05fdf7ee, 0x5c00b000, 0x5c025800,
+ 0x5c026800, 0x5c028800, 0x1c01f000, 0x4d2c0000,
+ 0x4c600000, 0x4c5c0000, 0x4178b800, 0x5936580f,
+ 0x812e59c0, 0x0500002c, 0x592c0208, 0x82000500,
+ 0x000000ff, 0x90000592, 0x05000024, 0xb00005a0,
+ 0x05000022, 0x90000588, 0x05000020, 0x8d3c0500,
+ 0x05000003, 0x0501f846, 0x0502001c, 0x592cc000,
+ 0x497a5800, 0x805cb9c0, 0x05020009, 0x59340010,
+ 0x812c0580, 0x05020004, 0x497a680f, 0x497a6810,
+ 0x0501f008, 0x4862680f, 0x0501f006, 0x4860b800,
+ 0x59340010, 0x812c0580, 0x05020002, 0x485e6810,
+ 0x0005f9f3, 0x0509fcb7, 0x4a025a08, 0x00000103,
+ 0x49425a0a, 0x497a580d, 0x0529fece, 0x0001fb82,
+ 0x40625800, 0x05fdf7d7, 0x412cb800, 0x592e5800,
+ 0x05fdf7d4, 0x5c00b800, 0x5c00c000, 0x5c025800,
0x1c01f000, 0x4803c856, 0x41781800, 0x5934000f,
- 0x80025d40, 0x05000018, 0x592c0006, 0x80200580,
+ 0x80025d40, 0x05000018, 0x592c0009, 0x80200580,
0x592c0000, 0x05000003, 0x412c1800, 0x05fdf7f9,
- 0x592c0a05, 0x82040d00, 0x000000ff, 0x90040d92,
+ 0x592c0a08, 0x82040d00, 0x000000ff, 0x90040d92,
0x05fc07fa, 0xb0040da0, 0x05fc07f8, 0x90040d88,
0x05fc07f6, 0x497a5800, 0x800c19c0, 0x05000007,
0x48001800, 0x80000540, 0x05020003, 0x480e6810,
0x90000541, 0x1c01f000, 0x4802680f, 0x80000540,
- 0x05fe07fd, 0x497a6810, 0x05fdf7fa, 0x592c0009,
- 0x81480580, 0x05020003, 0x592c000a, 0x814c0580,
+ 0x05fe07fd, 0x497a6810, 0x05fdf7fa, 0x592c000c,
+ 0x81480580, 0x05020003, 0x592c000d, 0x814c0580,
0x1c01f000, 0x4803c856, 0x4c580000, 0x413c1800,
- 0x400c2000, 0x593c0002, 0x80000540, 0x05020014,
- 0x6020b000, 0x900c0c04, 0x50040000, 0x81480580,
+ 0x400c2000, 0x593c0005, 0x80000540, 0x05020014,
+ 0x6020b000, 0x900c0c07, 0x50040000, 0x81480580,
0x05020005, 0x80041000, 0x50080000, 0x814c0580,
0x0500000b, 0x90040c02, 0x8058b040, 0x05fe07f7,
0x400c2000, 0x580c0001, 0x80001d40, 0x05fe07f1,
0x90000541, 0x5c00b000, 0x1c01f000, 0x80000580,
0x05fdf7fd, 0x4937c857, 0x4c580000, 0x4d2c0000,
- 0x5934000d, 0x80025d40, 0x05020011, 0x05e1f90d,
- 0x0500000c, 0x492e680d, 0x64065802, 0x497a5803,
- 0x912c0c04, 0x6040b000, 0x46000800, 0xffffffff,
+ 0x5934000d, 0x80025d40, 0x05020011, 0x05d9f9d7,
+ 0x0500000c, 0x492e680d, 0x64065805, 0x497a5806,
+ 0x912c0c07, 0x6040b000, 0x46000800, 0xffffffff,
0x80040800, 0x8058b040, 0x05fe07fc, 0x90000541,
0x5c025800, 0x5c00b000, 0x1c01f000, 0x4d2c0000,
- 0x592e5801, 0x05e1f914, 0x5c025800, 0x497a5801,
+ 0x592e5801, 0x05d9f9de, 0x5c025800, 0x497a5801,
0x05fdf7ee, 0x4d2c0000, 0x5936580d, 0x812e59c0,
- 0x05000005, 0x4937c857, 0x497a680d, 0x05e1f90a,
+ 0x05000005, 0x4937c857, 0x497a680d, 0x05d9f9d4,
0x90000541, 0x5c025800, 0x1c01f000, 0x59340405,
0x4937c857, 0x4803c857, 0x8c000508, 0x1c01f000,
- 0x4933c857, 0x5930380a, 0x581c0200, 0x8400051a,
- 0x48003a00, 0x1c01f000, 0x4933c857, 0x5930000a,
- 0x50000000, 0x8c000508, 0x1c01f000, 0x0501f805,
- 0x60058800, 0x05020002, 0x60018800, 0x1c01f000,
+ 0x4803c856, 0x0505f8dd, 0x05000043, 0x59a80843,
+ 0x8c040504, 0x0502001b, 0x59a80a49, 0x8c040506,
+ 0x05000018, 0x053df91b, 0x42024800, 0x0010e512,
+ 0x61fa880f, 0x59240809, 0x83440480, 0x000007f0,
+ 0x80040400, 0x50026800, 0x813669c0, 0x0500000a,
+ 0x59240200, 0x90000503, 0x90000583, 0x05020006,
+ 0x0501fa49, 0x05020004, 0x59340200, 0x8400055a,
+ 0x48026a00, 0x91264c0d, 0x8058b040, 0x05fe07ee,
+ 0x59a80006, 0x8c00051c, 0x05020003, 0x8d0c0520,
+ 0x05000013, 0x61c0b00f, 0x417a8800, 0x0001fb00,
+ 0x0502000c, 0x0501fa38, 0x0502000a, 0x59a8003d,
+ 0x59340802, 0x80040580, 0x82000500, 0x00ffff00,
+ 0x05020004, 0x59340200, 0x8400055a, 0x48026a00,
+ 0x81468800, 0x8058b040, 0x05fe07f1, 0x0501f8d1,
+ 0x05000003, 0x59a8085b, 0x0501f007, 0x6140080f,
+ 0x59a80006, 0x8c00051c, 0x05020003, 0x8d0c0520,
+ 0x05000004, 0x42001000, 0x0010582b, 0x050dffd5,
+ 0x1c01f000, 0x053df8df, 0x42024800, 0x0010e512,
+ 0x61fa880f, 0x59240809, 0x83440480, 0x000007f0,
+ 0x80040400, 0x50026800, 0x813669c0, 0x05000008,
+ 0x59240200, 0x90000503, 0x90000583, 0x05020004,
+ 0x59340200, 0x8400051a, 0x48026a00, 0x91264c0d,
+ 0x8058b040, 0x05fe07f0, 0x05fdf7c6, 0x4d300000,
+ 0x4d340000, 0x4d440000, 0x4d3c0000, 0x4c580000,
+ 0x4d200000, 0x4d240000, 0x42001000, 0x0010582b,
+ 0x050dfe81, 0x59a80a49, 0x4807c857, 0x8c040508,
+ 0x0502002e, 0x8c04050a, 0x05020003, 0x8c040506,
+ 0x05000042, 0x053df8b7, 0x42024800, 0x0010e512,
+ 0x41781000, 0x61fa880f, 0x59240809, 0x83440480,
+ 0x000007f0, 0x80040400, 0x50026800, 0x813669c0,
+ 0x0500000b, 0x59240200, 0x90000503, 0x90000583,
+ 0x05020007, 0x59340200, 0x8c00051a, 0x05000004,
+ 0x8400051a, 0x48026a00, 0x80081000, 0x91264c0d,
+ 0x8058b040, 0x05fe07ed, 0x59a80a49, 0x8c04050a,
+ 0x05020026, 0x800811c0, 0x0500004b, 0x59a80a49,
+ 0x8c04050a, 0x05020021, 0x8d0c0520, 0x05000005,
+ 0x6140080f, 0x42001000, 0x0010582b, 0x050dff85,
+ 0x05e5fc61, 0x0501f040, 0x59a80249, 0x4803c857,
+ 0x8c000516, 0x0502003c, 0x59aa68c2, 0x813669c0,
+ 0x05000039, 0x59340400, 0x82000580, 0x00000404,
+ 0x05020035, 0x051dfb92, 0x05d40d68, 0x4933c857,
+ 0x64066407, 0x4936600a, 0x4926601d, 0x417a7800,
+ 0x05fdfc6b, 0x60140800, 0x05fdfc73, 0x600e7000,
+ 0x0009f800, 0x0501f028, 0x61c0b00f, 0x80028d80,
+ 0x0001fb00, 0x05020021, 0x59340200, 0x8c00051a,
+ 0x0500001e, 0x59368c03, 0x417a7800, 0x60a68000,
+ 0x0501f9e9, 0x59240400, 0x8c00050a, 0x05020003,
+ 0x41783000, 0x0535ff19, 0x59340200, 0x84000558,
+ 0x8400051a, 0x48026a00, 0x4937c857, 0x4a026c00,
+ 0x00000707, 0x05fdff2c, 0x60a68000, 0x0515fc7c,
+ 0x4df00000, 0x417a6000, 0x0515f9ab, 0x0515fab0,
+ 0x0515faf9, 0x417a7800, 0x0515f87e, 0x0535fdd2,
+ 0x5c03e000, 0x05140c63, 0x81468800, 0x8058b040,
+ 0x05fe07dc, 0x5c024800, 0x5c024000, 0x5c00b000,
+ 0x5c027800, 0x5c028800, 0x5c026800, 0x5c026000,
+ 0x1c01f000, 0x4933c857, 0x5930380a, 0x581c0200,
+ 0x8400051a, 0x48003a00, 0x1c01f000, 0x4933c857,
+ 0x5930000a, 0x50000000, 0x8c000508, 0x1c01f000,
0x5930000a, 0x50000000, 0x4933c857, 0x4803c857,
0x8c00050e, 0x1c01f000, 0x5930000a, 0x50000000,
- 0x8c00050a, 0x1c01f000, 0x0501f805, 0x60058800,
- 0x05000002, 0x60018800, 0x1c01f000, 0x4933c856,
- 0x0501f8d4, 0x05000005, 0x59340400, 0x82000d00,
- 0x000000ff, 0x90041585, 0x1c01f000, 0x4803c856,
- 0x59a80a1b, 0x8c040506, 0x0500000a, 0x5930081d,
- 0x58040200, 0x8c000500, 0x05000006, 0x58040009,
- 0x9000040e, 0x50000800, 0x58040200, 0x8c00051a,
- 0x1c01f000, 0x0501f805, 0x60058800, 0x05020002,
- 0x60018800, 0x1c01f000, 0x4d340000, 0x4c580000,
- 0x59a80a1b, 0x8c040506, 0x05000014, 0x052dfe8f,
- 0x42000800, 0x0010b391, 0x58041009, 0x9008040e,
- 0x50026800, 0x813669c0, 0x05000008, 0x58040200,
- 0x90000503, 0x90000583, 0x05020004, 0x59340200,
- 0x8c00051a, 0x05020005, 0x90040c0b, 0x8058b040,
- 0x05fe07f2, 0x80000580, 0x5c00b000, 0x5c026800,
- 0x1c01f000, 0x4937c857, 0x493fc857, 0x59341200,
- 0x813e79c0, 0x05000003, 0x8408155e, 0x0501f002,
- 0x8408151e, 0x480a6a00, 0x1c01f000, 0x4937c857,
- 0x05edf869, 0x05000005, 0x59a8082c, 0x42001000,
- 0x001044fb, 0x050df925, 0x1c01f000, 0x4937c857,
- 0x42001000, 0x001044fb, 0x0509ffea, 0x59a8121b,
- 0x84081512, 0x480b521b, 0x1c01f000, 0x4008d000,
- 0x4020d800, 0x909d3c84, 0x409ce000, 0x0201f800,
- 0x0010f9c3, 0x589c0000, 0x589c2001, 0x589c2802,
- 0x589c3003, 0x909d3c04, 0x800001c0, 0x1c01f000,
- 0x4d340000, 0x406a6800, 0x0501f803, 0x5c026800,
- 0x1c01f000, 0x5934000f, 0x8d0c0512, 0x05020005,
- 0x5934140b, 0x80081040, 0x05001002, 0x480a6c0b,
- 0x80000540, 0x00020af4, 0x1c01f000, 0x59340a00,
- 0x84040d08, 0x80000540, 0x05000005, 0x5934000a,
- 0x8400054c, 0x4802680a, 0x0501f004, 0x599c0018,
- 0x8c000510, 0x05000002, 0x84040d48, 0x48066a00,
- 0x1c01f000, 0x4803c857, 0x4947c857, 0x4c300000,
- 0x90006530, 0x05000005, 0x4c000000, 0x0521fc75,
- 0x5c000000, 0x0502000b, 0x8c00050e, 0x05000006,
- 0x0501f898, 0x05020007, 0x4937c857, 0x41240800,
- 0x0501f8ab, 0x80000580, 0x5c006000, 0x1c01f000,
- 0x90000541, 0x05fdf7fd, 0x4803c857, 0x4c580000,
- 0x4d440000, 0x40001000, 0x80000d80, 0x61c0b00f,
- 0x4c040000, 0x40068800, 0x4c080000, 0x40080000,
- 0x05fdffe3, 0x5c001000, 0x5c000800, 0x80040800,
- 0x8058b040, 0x05fe07f7, 0x8c080514, 0x05000005,
- 0x84081514, 0x6004b000, 0x61f0080f, 0x05fdf7f1,
- 0x4d300000, 0x4d400000, 0x4d240000, 0x0501fb1f,
- 0x61fe89ff, 0x42026000, 0x001104b4, 0x4a02600a,
- 0x0010ce8f, 0x417a4800, 0x4926601d, 0x60a68000,
- 0x050dfbdb, 0x4df00000, 0x0201f800, 0x0010f260,
- 0x0201f800, 0x0010f7f5, 0x5c03e000, 0x050c0bc0,
- 0x5c024800, 0x5c028000, 0x5c026000, 0x5c028800,
- 0x5c00b000, 0x1c01f000, 0x0501f805, 0x60058800,
- 0x05000002, 0x60018800, 0x1c01f000, 0x4c5c0000,
- 0x59340400, 0x8200bd80, 0x00000606, 0x5c00b800,
+ 0x8c00050a, 0x1c01f000, 0x4933c856, 0x0501f96e,
+ 0x05000005, 0x59340400, 0x82000d00, 0x000000ff,
+ 0x90041585, 0x1c01f000, 0x4803c856, 0x59a80a49,
+ 0x8c040506, 0x0500000a, 0x5930081d, 0x58040200,
+ 0x8c000500, 0x05000006, 0x58040009, 0x9000040e,
+ 0x50000800, 0x58040200, 0x8c00051a, 0x1c01f000,
+ 0x4d340000, 0x4c580000, 0x59a80a49, 0x8c040506,
+ 0x05000014, 0x053df817, 0x42000800, 0x0010e512,
+ 0x58041009, 0x9008040e, 0x50026800, 0x813669c0,
+ 0x05000008, 0x58040200, 0x90000503, 0x90000583,
+ 0x05020004, 0x59340200, 0x8c00051a, 0x05020005,
+ 0x90040c0d, 0x8058b040, 0x05fe07f2, 0x80000580,
+ 0x5c00b000, 0x5c026800, 0x1c01f000, 0x4937c857,
+ 0x493fc857, 0x59341200, 0x813e79c0, 0x05000003,
+ 0x8408155e, 0x0501f002, 0x8408151e, 0x480a6a00,
+ 0x1c01f000, 0x4937c857, 0x05e5fb06, 0x05000005,
+ 0x59a8085a, 0x42001000, 0x00105905, 0x050dfee5,
+ 0x1c01f000, 0x4937c857, 0x42001000, 0x00105905,
+ 0x050dfdad, 0x59a81249, 0x84081512, 0x480b5249,
+ 0x1c01f000, 0x4c380000, 0x4c340000, 0x4c240000,
+ 0x4c600000, 0x4008c000, 0x83440480, 0x00000800,
+ 0x05021065, 0x80002d80, 0x41442000, 0x83447400,
+ 0x0010d400, 0x61c0b00f, 0x83444c80, 0x000007f0,
+ 0x05021005, 0x82600480, 0x00fffffc, 0x05001005,
+ 0x0501f059, 0x6040b000, 0x59240009, 0x80247400,
+ 0x50380000, 0x80000540, 0x05020030, 0x41440000,
+ 0x80100580, 0x05020060, 0x40102800, 0x82104c80,
+ 0x000007f0, 0x05001027, 0x59a80249, 0x8c00050a,
+ 0x0500000d, 0x82104d80, 0x000007fe, 0x05020005,
+ 0x82604d80, 0x00fffffe, 0x05020043, 0x0501f01d,
+ 0x59240200, 0x82000500, 0x00000220, 0x05020005,
+ 0x0501f04a, 0x59240200, 0x8c00050a, 0x05000047,
+ 0x82104d80, 0x000007fc, 0x05020005, 0x82604d80,
+ 0x00fffffc, 0x05020034, 0x0501f00e, 0x82104d80,
+ 0x000007fd, 0x05020005, 0x82604d80, 0x00fffffd,
+ 0x0502002d, 0x0501f007, 0x82104d80, 0x000007ff,
+ 0x05020029, 0x82604d80, 0x00ffffff, 0x05020026,
+ 0x84142d5e, 0x0501f034, 0x40006800, 0x58343002,
+ 0x82183500, 0x00ffffff, 0x40180000, 0x80600580,
+ 0x05020022, 0x58340813, 0x80040130, 0x81200580,
+ 0x0502001e, 0x82040500, 0x00ffffff, 0x59240805,
+ 0x80040580, 0x05000004, 0x812000f0, 0x80040d40,
+ 0x48046813, 0x40100000, 0x81440580, 0x05020009,
+ 0x40366800, 0x8c200508, 0x05000052, 0x05fdff53,
+ 0x05020050, 0x4947c857, 0x60740000, 0x0501f04e,
+ 0x4947c857, 0x480bc857, 0x4823c857, 0x60680000,
+ 0x0501f049, 0x4947c857, 0x4863c857, 0x4813c857,
+ 0x60640000, 0x0501f044, 0x40100000, 0x81440580,
+ 0x05020009, 0x58343002, 0x4947c857, 0x481bc857,
+ 0x606c0000, 0x0501f03c, 0x4947c857, 0x607c0000,
+ 0x0501f039, 0x80102000, 0x80387000, 0x83444c80,
+ 0x000007f0, 0x05001007, 0x82104d80, 0x00000800,
+ 0x0502000a, 0x59247009, 0x61c0200f, 0x0501f007,
+ 0x82104d80, 0x000007f0, 0x05020004, 0x41782000,
+ 0x42007000, 0x0010d400, 0x8058b040, 0x05fe0789,
+ 0x801429c0, 0x05020005, 0x05d5fc3c, 0x4947c857,
+ 0x60280000, 0x0501f020, 0x4d2c0000, 0x4c180000,
+ 0x40603000, 0x05fdfb6f, 0x4947c857, 0x4937c857,
+ 0x5c003000, 0x5c025800, 0x05fe07f5, 0x497a6a12,
+ 0x59a80249, 0x8c00050a, 0x0502000d, 0x82600500,
+ 0x00ffff00, 0x05000006, 0x59a8483d, 0x82244d00,
+ 0x00ffff00, 0x80240580, 0x05020005, 0x82600500,
+ 0x000000ff, 0x800000d0, 0x48026a12, 0x48626802,
+ 0x59244805, 0x812000f0, 0x80244d40, 0x48266813,
+ 0x80000580, 0x80000540, 0x5c00c000, 0x5c004800,
+ 0x5c006800, 0x5c007000, 0x1c01f000, 0x5934000f,
+ 0x8d0c0512, 0x05020005, 0x5934140b, 0x80081040,
+ 0x05001002, 0x480a6c0b, 0x80000540, 0x00020b0d,
+ 0x1c01f000, 0x59340a00, 0x84040d08, 0x80000540,
+ 0x05000005, 0x5934000a, 0x8400054c, 0x4802680a,
+ 0x0501f004, 0x599c0018, 0x8c000510, 0x05000002,
+ 0x84040d48, 0x48066a00, 0x1c01f000, 0x4803c857,
+ 0x4947c857, 0x4c300000, 0x90006530, 0x05000005,
+ 0x4c000000, 0x0529ff89, 0x5c000000, 0x0502000e,
+ 0x8c00050e, 0x05000009, 0x0501f88f, 0x0502000a,
+ 0x4937c857, 0x592c020b, 0x8c00051c, 0x05020003,
+ 0x41240800, 0x0501f89f, 0x80000580, 0x5c006000,
+ 0x1c01f000, 0x90000541, 0x05fdf7fd, 0x4803c857,
+ 0x4c580000, 0x4d440000, 0x40001000, 0x80000d80,
+ 0x61c0b00f, 0x4c040000, 0x40068800, 0x4c080000,
+ 0x40080000, 0x05fdffe0, 0x5c001000, 0x5c000800,
+ 0x80040800, 0x8058b040, 0x05fe07f7, 0x8c080514,
+ 0x05000005, 0x84081514, 0x6004b000, 0x61f0080f,
+ 0x05fdf7f1, 0x4d300000, 0x4d400000, 0x4d240000,
+ 0x0501fb9a, 0x61fe89ff, 0x42026000, 0x00111a70,
+ 0x4a02600a, 0x00110210, 0x417a4800, 0x4926601d,
+ 0x60a68000, 0x0515fafa, 0x4df00000, 0x0515f930,
+ 0x0535fc55, 0x5c03e000, 0x05140ae6, 0x5c024800,
+ 0x5c028000, 0x5c026000, 0x5c028800, 0x5c00b000,
0x1c01f000, 0x4c5c0000, 0x59340400, 0x8200bd80,
- 0x00000404, 0x5c00b800, 0x1c01f000, 0x0501f805,
- 0x60058800, 0x05000002, 0x60018800, 0x1c01f000,
- 0x4c5c0000, 0x59340400, 0x8200bd80, 0x00000404,
- 0x05000003, 0x8200bd80, 0x00000606, 0x5c00b800,
- 0x1c01f000, 0x4c5c0000, 0x4c600000, 0x59340400,
- 0x8200bd00, 0x0000ff00, 0x825cc580, 0x00000400,
- 0x05000003, 0x825cc580, 0x00000600, 0x5c00c000,
- 0x5c00b800, 0x1c01f000, 0x4c5c0000, 0x59340400,
- 0x82000500, 0x000000ff, 0x9000bd83, 0x05000002,
- 0x9000bd85, 0x5c00b800, 0x1c01f000, 0x5c000000,
- 0x4c000000, 0x4803c857, 0x4c5c0000, 0x59340400,
- 0x82000500, 0x0000ff00, 0x8400b9c0, 0x805c0580,
- 0x4937c857, 0x4803c857, 0x48026c00, 0x5c00b800,
- 0x1c01f000, 0x4c040000, 0x4c080000, 0x592c0208,
- 0x8c00050c, 0x0500000d, 0x592e8c07, 0x82000500,
- 0x00000080, 0x84000548, 0x4d3c0000, 0x60027820,
- 0x05fdff6d, 0x5c027800, 0x90000541, 0x5c001000,
- 0x5c000800, 0x1c01f000, 0x80000580, 0x05fdf7fc,
- 0x59340013, 0x80024130, 0x83224c00, 0x0010a3b3,
- 0x51264800, 0x812649c0, 0x05dc0c21, 0x1c01f000,
- 0x83440c80, 0x00000800, 0x05021013, 0x83200400,
- 0x0010a3b3, 0x50024800, 0x59240009, 0x83440c80,
- 0x000007f0, 0x05001003, 0x80040c00, 0x0501f003,
- 0x83440c00, 0x0010a600, 0x50040000, 0x80026d40,
- 0x05000005, 0x59340013, 0x80000130, 0x81200580,
- 0x1c01f000, 0x90000541, 0x05fdf7fe, 0x4937c857,
- 0x4c580000, 0x4d440000, 0x59368c03, 0x83441480,
- 0x000007f0, 0x05021003, 0x05fdfc8b, 0x0501f00b,
+ 0x00000606, 0x5c00b800, 0x1c01f000, 0x4c5c0000,
+ 0x59340400, 0x8200bd80, 0x00000404, 0x5c00b800,
+ 0x1c01f000, 0x4c5c0000, 0x59340400, 0x8200bd80,
+ 0x00000404, 0x05000003, 0x8200bd80, 0x00000606,
+ 0x5c00b800, 0x1c01f000, 0x4c5c0000, 0x4c600000,
+ 0x59340400, 0x8200bd00, 0x0000ff00, 0x825cc580,
+ 0x00000400, 0x05000003, 0x825cc580, 0x00000600,
+ 0x5c00c000, 0x5c00b800, 0x1c01f000, 0x4c5c0000,
+ 0x59340400, 0x82000500, 0x000000ff, 0x9000bd83,
+ 0x05000002, 0x9000bd85, 0x5c00b800, 0x1c01f000,
+ 0x5c000000, 0x4c000000, 0x4803c857, 0x4c5c0000,
+ 0x59340400, 0x82000500, 0x0000ff00, 0x8400b9c0,
+ 0x805c0580, 0x4937c857, 0x4803c857, 0x48026c00,
+ 0x5c00b800, 0x1c01f000, 0x4c040000, 0x4c080000,
+ 0x592c020b, 0x8c00050c, 0x0500000d, 0x592e8c0a,
+ 0x82000500, 0x00000080, 0x84000548, 0x4d3c0000,
+ 0x60027820, 0x05fdff76, 0x5c027800, 0x90000541,
+ 0x5c001000, 0x5c000800, 0x1c01f000, 0x80000580,
+ 0x05fdf7fc, 0x59340013, 0x80024130, 0x83224c00,
+ 0x0010d17b, 0x51264800, 0x812649c0, 0x05d40b63,
+ 0x1c01f000, 0x83440c80, 0x00000800, 0x05021013,
+ 0x83200400, 0x0010d17b, 0x50024800, 0x59240009,
+ 0x83440c80, 0x000007f0, 0x05001003, 0x80040c00,
+ 0x0501f003, 0x83440c00, 0x0010d400, 0x50040000,
+ 0x80026d40, 0x05000005, 0x59340013, 0x80000130,
+ 0x81200580, 0x1c01f000, 0x90000541, 0x05fdf7fe,
+ 0x4937c857, 0x4c580000, 0x4d440000, 0x59368c03,
+ 0x83440580, 0x0000ffff, 0x05000010, 0x83441480,
+ 0x000007f0, 0x05021003, 0x05fdfb12, 0x0501f00b,
0x58040009, 0x80080c00, 0x50040000, 0x81340580,
- 0x05de0bfb, 0x4d2c0000, 0x45780800, 0x41365800,
- 0x05ddff94, 0x5c025800, 0x80000580, 0x5c028800,
- 0x5c00b000, 0x1c01f000, 0x592c040c, 0x82000500,
- 0x0000e000, 0x82000580, 0x00006000, 0x0500001f,
- 0x916c0583, 0x05000011, 0x916c0582, 0x050200f4,
- 0x59a8021b, 0x90000d38, 0x05020005, 0x59a80813,
- 0x800409c0, 0x05000009, 0x0501f0ed, 0x90000d03,
- 0x90040d83, 0x050200ea, 0x90000d28, 0x05020003,
- 0x8c00050c, 0x050000e6, 0x592e4408, 0x83224500,
- 0x000000ff, 0x0505fdf0, 0x050200c1, 0x592c100b,
- 0x82080500, 0xff000000, 0x050200c9, 0x59240005,
- 0x80080580, 0x050000c4, 0x592c0c0c, 0x82040d00,
- 0x0000e000, 0x82040480, 0x00008000, 0x050210c2,
- 0x592e8c07, 0x83440480, 0x00000800, 0x05001015,
- 0x83440580, 0x0000ffff, 0x050200ab, 0x800409c0,
- 0x050200e3, 0x592c240a, 0x82100500, 0xffffff00,
- 0x050200af, 0x480bc857, 0x4813c857, 0x592c000e,
- 0x82000480, 0x00000841, 0x050210b1, 0x614e7000,
- 0x0501fa3e, 0x42026800, 0x0010ce8f, 0x0501f084,
- 0x800409c0, 0x050200d2, 0x41784000, 0x05fdfec0,
- 0x050200bf, 0x59342204, 0x592c000e, 0x80100480,
- 0x050010a3, 0x614e7000, 0x592c240a, 0x82100500,
- 0xffffff00, 0x05020096, 0x4813c857, 0x592c0408,
- 0x82000500, 0x0000f000, 0x82000580, 0x00003000,
- 0x05020006, 0x59340200, 0x8c000508, 0x05020003,
- 0x90100583, 0x05020084, 0x592c000d, 0x800001c0,
- 0x05000065, 0x90100584, 0x05000083, 0xb0100591,
- 0x05000081, 0x90100583, 0x0500000f, 0x901005a0,
- 0x05000039, 0x901005a4, 0x05000033, 0x901005a1,
- 0x05000033, 0xb0100590, 0x0500002b, 0xb0100592,
- 0x05000027, 0x90100585, 0x05020055, 0x60067000,
- 0x0501f018, 0x600a7000, 0x59a8008d, 0x8c000502,
- 0x05000014, 0x05fdff02, 0x05000012, 0x59340212,
- 0x82000500, 0x0000ff00, 0x60401000, 0x0502000b,
- 0x59a8021b, 0x8c000506, 0x0502005b, 0x60201000,
- 0x59340002, 0x82000500, 0x00ff0000, 0x82000580,
- 0x00ff0000, 0x05000003, 0x0501f976, 0x05020052,
- 0x0515f875, 0x05000068, 0x64426407, 0x4926601d,
- 0x4936600a, 0x600c0800, 0x91380582, 0x05000002,
- 0x602c0800, 0x05fdfb2d, 0x0501f036, 0x60027000,
- 0x0501f002, 0x60127000, 0x05fdfefb, 0x0502005f,
- 0x0501f02b, 0x60ce7000, 0x0501f004, 0x60167000,
- 0x0501f002, 0x600e7000, 0x05fdfeea, 0x05020057,
- 0x59a8008d, 0x8c000502, 0x05000014, 0x05fdfed4,
+ 0x05d60b3a, 0x4d2c0000, 0x45780800, 0x41365800,
+ 0x05d5feee, 0x5c025800, 0x80000580, 0x5c028800,
+ 0x5c00b000, 0x1c01f000, 0x592c040f, 0x82000500,
+ 0x0000e000, 0x82000580, 0x00006000, 0x0500001e,
+ 0x916c0583, 0x05000011, 0x916c0582, 0x05020100,
+ 0x59a80249, 0x90000d38, 0x05020005, 0x59a80841,
+ 0x800409c0, 0x05000009, 0x0501f0f9, 0x90000d03,
+ 0x90040d83, 0x050200f6, 0x90000d28, 0x05020003,
+ 0x8c00050c, 0x050000f2, 0x592e440b, 0x83224500,
+ 0x000000ff, 0x0509f894, 0x050200cf, 0x592c100e,
+ 0x82081500, 0x00ffffff, 0x59240005, 0x80080580,
+ 0x050000d3, 0x592c0c0f, 0x82040d00, 0x0000e000,
+ 0x82040480, 0x00008000, 0x050210cf, 0x592e8c0a,
+ 0x83440480, 0x00000800, 0x05001015, 0x83440580,
+ 0x0000ffff, 0x050200ba, 0x800409c0, 0x050200f0,
+ 0x592c240d, 0x82100500, 0xffffff00, 0x050200be,
+ 0x480bc857, 0x4813c857, 0x592c0011, 0x82000480,
+ 0x00000841, 0x050210be, 0x614e7000, 0x0501fac3,
+ 0x42026800, 0x00110210, 0x0501f093, 0x800409c0,
+ 0x050200df, 0x41784000, 0x05fdfe1f, 0x050200cc,
+ 0x592c240f, 0x8c100514, 0x0500000d, 0x592c240d,
+ 0x82100500, 0xffffff00, 0x050200a7, 0x901005a0,
+ 0x050200a9, 0x05fdff32, 0x050200b4, 0x05fdfb97,
+ 0x60180800, 0x05fdf9f5, 0x0501f0bb, 0x59342204,
+ 0x592c0011, 0x80100480, 0x050010a1, 0x614e7000,
+ 0x592c240d, 0x82100500, 0xffffff00, 0x05020096,
+ 0x4813c857, 0x592c040b, 0x82000500, 0x0000f000,
+ 0x82000580, 0x00003000, 0x05020006, 0x59340200,
+ 0x8c000508, 0x05020003, 0x90100583, 0x05020084,
+ 0x592c0010, 0x800001c0, 0x05000065, 0x90100584,
+ 0x05000083, 0xb0100591, 0x05000081, 0x90100583,
+ 0x0500000f, 0x901005a0, 0x05000039, 0x901005a4,
+ 0x05000033, 0x901005a1, 0x05000033, 0xb0100590,
+ 0x0500002b, 0xb0100592, 0x05000027, 0x90100585,
+ 0x05020055, 0x60067000, 0x0501f018, 0x600a7000,
+ 0x59a800d1, 0x8c000502, 0x05000014, 0x05fdfef6,
0x05000012, 0x59340212, 0x82000500, 0x0000ff00,
- 0x60401000, 0x0502000b, 0x59a8021b, 0x8c000506,
- 0x0502002d, 0x60201000, 0x59340002, 0x82000500,
+ 0x60401000, 0x0502000b, 0x59a80249, 0x8c000506,
+ 0x0502005b, 0x60201000, 0x59340002, 0x82000500,
0x00ff0000, 0x82000580, 0x00ff0000, 0x05000003,
- 0x0501f948, 0x05020024, 0x0515f847, 0x0500003a,
- 0x64426407, 0x4926601d, 0x4936600a, 0x60140800,
- 0x91380583, 0x05000002, 0x60240800, 0x05fdfaff,
- 0x0501f008, 0x90102591, 0x0502002b, 0x0515f83a,
- 0x0500002d, 0x64426407, 0x4926601d, 0x4936600a,
- 0x0521fcc8, 0x492e6009, 0x49325809, 0x83340580,
- 0x0010ce8f, 0x05000007, 0x592c0c0c, 0x8c040518,
- 0x05000004, 0x59340200, 0x84000514, 0x48026a00,
- 0x0005fc78, 0x80000580, 0x1c01f000, 0x90000541,
- 0x05fdf7fe, 0x60281000, 0x0501f014, 0x60381000,
- 0x0501f012, 0x603c1000, 0x0501f010, 0x60401000,
- 0x0501f00e, 0x60581000, 0x0501f00c, 0x605c1000,
- 0x0501f00a, 0x60601000, 0x0501f008, 0x606c1000,
+ 0x0501f96f, 0x05020052, 0x051df8c1, 0x05000066,
+ 0x64426407, 0x4926601d, 0x4936600a, 0x600c0800,
+ 0x91380582, 0x05000002, 0x602c0800, 0x05fdf9a2,
+ 0x0501f036, 0x60027000, 0x0501f002, 0x60127000,
+ 0x05fdfeea, 0x0502005d, 0x0501f02b, 0x60ce7000,
+ 0x0501f004, 0x60167000, 0x0501f002, 0x600e7000,
+ 0x05fdfed9, 0x05020055, 0x59a800d1, 0x8c000502,
+ 0x05000014, 0x05fdfec8, 0x05000012, 0x59340212,
+ 0x82000500, 0x0000ff00, 0x60401000, 0x0502000b,
+ 0x59a80249, 0x8c000506, 0x0502002d, 0x60201000,
+ 0x59340002, 0x82000500, 0x00ff0000, 0x82000580,
+ 0x00ff0000, 0x05000003, 0x0501f941, 0x05020024,
+ 0x051df893, 0x05000038, 0x64426407, 0x4926601d,
+ 0x4936600a, 0x60140800, 0x91380583, 0x05000002,
+ 0x60240800, 0x05fdf974, 0x0501f008, 0x90102591,
+ 0x05020029, 0x051df886, 0x0500002b, 0x64426407,
+ 0x4926601d, 0x4936600a, 0x0529ffe8, 0x492e6009,
+ 0x4932580c, 0x83340580, 0x00110210, 0x05000007,
+ 0x592c0c0f, 0x8c040518, 0x05000004, 0x59340200,
+ 0x84000514, 0x48026a00, 0x0009f800, 0x80000580,
+ 0x1c01f000, 0x90000541, 0x05fdf7fe, 0x60281000,
+ 0x0501f012, 0x60381000, 0x0501f010, 0x603c1000,
+ 0x0501f00e, 0x60401000, 0x0501f00c, 0x60581000,
+ 0x0501f00a, 0x605c1000, 0x0501f008, 0x60601000,
0x0501f006, 0x60781000, 0x0501f004, 0x60901000,
0x0501f002, 0x60801000, 0x60640800, 0x60c68000,
- 0x05fdf7e7, 0x600c0800, 0x0501f002, 0x60280800,
+ 0x05fdf7e9, 0x600c0800, 0x0501f002, 0x60280800,
0x41781000, 0x05fdf7fa, 0x60240800, 0x59341400,
0x05fdf7f7, 0x60228000, 0x0501f004, 0x601c0800,
0x416c1000, 0x05fdf7f2, 0x41780800, 0x41781000,
- 0x05fdf7d7, 0x60028000, 0x05fdf7fc, 0x90004d9d,
- 0x05dc0aeb, 0x90004d9a, 0x05020004, 0x40101000,
+ 0x05fdf7d9, 0x60028000, 0x05fdf7fc, 0x90004d9d,
+ 0x05d40a1e, 0x90004d9a, 0x05020004, 0x40101000,
0x40000800, 0x05fdf7e6, 0x90004d9b, 0x05020003,
0x40181000, 0x05fdf7fb, 0x90004d9c, 0x05fc07f9,
- 0x90004d99, 0x05fc07c8, 0x05fdf7e1, 0x592e6009,
- 0x0521fa88, 0x05fc07ca, 0x59300c07, 0x90040591,
- 0x05fe07e1, 0x592c0c0c, 0x82041500, 0x0000e000,
+ 0x90004d99, 0x05fc07ca, 0x05fdf7e1, 0x592e600c,
+ 0x0529fd96, 0x05fc07cc, 0x59300c07, 0x90040591,
+ 0x05fe07e1, 0x592c0c0f, 0x82041500, 0x0000e000,
0x82080580, 0x00006000, 0x05000021, 0x83440580,
0x0000ffff, 0x05020007, 0x5932680a, 0x83340580,
- 0x0010ce8f, 0x05fe07d4, 0x61000810, 0x0501f00f,
- 0x592c100b, 0x82081500, 0x00ffffff, 0x41784000,
- 0x05fdfdd7, 0x05fe07d6, 0x5930000a, 0x82000d80,
- 0x0010ce8f, 0x05000003, 0x81340580, 0x05fe07c6,
- 0x4936600a, 0x59340a04, 0x592c000e, 0x80040480,
+ 0x00110210, 0x05fe07d4, 0x61000810, 0x0501f00f,
+ 0x592c100e, 0x82081500, 0x00ffffff, 0x41784000,
+ 0x05fdfd29, 0x05fe07d6, 0x5930000a, 0x82000d80,
+ 0x00110210, 0x05000003, 0x81340580, 0x05fe07c6,
+ 0x4936600a, 0x59340a04, 0x592c0011, 0x80040480,
0x05fc17b3, 0x59300a03, 0x90040587, 0x05fe07be,
- 0x492e6009, 0x61527000, 0x05fdf78d, 0x052df902,
- 0x05fc07c1, 0x05fdf7b8, 0x492fc857, 0x592e6009,
- 0x83300580, 0xffffffff, 0x05020041, 0x592c0208,
+ 0x492e6009, 0x61527000, 0x05fdf78f, 0x0539f92f,
+ 0x05fc07c1, 0x05fdf7b8, 0x492fc857, 0x592e600c,
+ 0x83300580, 0xffffffff, 0x05020041, 0x592c020b,
0x8c000500, 0x0502006c, 0x8d0c050e, 0x05020059,
- 0x592e8c07, 0x83440480, 0x00000800, 0x05021036,
- 0x592c380b, 0x821c3d00, 0x00ffffff, 0x05edf83f,
- 0x05020039, 0x49265802, 0x41784000, 0x592c100a,
- 0x82081500, 0x00ffffff, 0x05fdfda9, 0x0502004b,
- 0x592e6014, 0x4933c857, 0x83300580, 0xffffffff,
- 0x05000018, 0x0521fa3b, 0x0500002d, 0x591c1407,
- 0x800811c0, 0x05000013, 0x592c040e, 0x591c0a02,
+ 0x592e8c0a, 0x83440480, 0x00000800, 0x05021036,
+ 0x592c380e, 0x821c3d00, 0x00ffffff, 0x05e5fa1d,
+ 0x05020039, 0x49265805, 0x41784000, 0x592c100d,
+ 0x82081500, 0x00ffffff, 0x05fdfcfb, 0x0502004b,
+ 0x592e6017, 0x4933c857, 0x83300580, 0xffffffff,
+ 0x05000018, 0x0529fd49, 0x0500002d, 0x591c1407,
+ 0x800811c0, 0x05000013, 0x592c0411, 0x591c0a02,
0x80040580, 0x0502000f, 0x591c000a, 0x800001c0,
0x05020007, 0x591c082a, 0x59340002, 0x80040580,
0x82000500, 0x00ffffff, 0x0501f002, 0x81340580,
0x05020004, 0x90080587, 0x0502002c, 0x64923c03,
- 0x59240005, 0x592c080a, 0x82041500, 0x00ffffff,
+ 0x59240005, 0x592c080d, 0x82041500, 0x00ffffff,
0x80081580, 0x0500000c, 0x80040932, 0xb0040582,
- 0x0502000b, 0x49365803, 0x0501f8da, 0x80000580,
+ 0x0502000b, 0x49365806, 0x0501f8d5, 0x80000580,
0x1c01f000, 0x60281000, 0x0501f00a, 0x60401000,
0x0501f008, 0x60501000, 0x0501f006, 0x605c1000,
0x0501f004, 0x60601000, 0x0501f002, 0x60f01000,
@@ -17413,11 +5945,11 @@ static const uint32_t isp_2500_multi_risc_code[] = {
0x480bc857, 0x40000800, 0x05fdf7f9, 0x492fc857,
0x60280800, 0x41781000, 0x05fdf7f5, 0x41780800,
0x41781000, 0x05fdf7f3, 0x60780800, 0x05fdf7fa,
- 0x60040800, 0x05fdf7f8, 0x90004d9d, 0x05dc0a48,
+ 0x60040800, 0x05fdf7f8, 0x90004d9d, 0x05d4097b,
0x90004d9a, 0x05020003, 0x40101000, 0x05fdf7eb,
0x90004d9b, 0x05020003, 0x40181000, 0x05fdf7e7,
0x90004d9c, 0x05fc07e5, 0x90004d99, 0x05fc07e3,
- 0x05fdf7e7, 0x052df961, 0x60028000, 0x05fdf7e8,
+ 0x05fdf7e7, 0x0539f98e, 0x60028000, 0x05fdf7e8,
0x5c000000, 0x4c000000, 0x4803c857, 0x5930200a,
0x801021c0, 0x05000029, 0x58101400, 0x4813c857,
0x480bc857, 0x82081d00, 0x000000ff, 0x59300c03,
@@ -17429,271 +5961,315 @@ static const uint32_t isp_2500_multi_risc_code[] = {
0x05000007, 0x0501f00d, 0x900c058b, 0x05000004,
0x0501f00a, 0x900c0583, 0x05020008, 0x82081d00,
0xffffff00, 0x840c01c0, 0x800c0540, 0x4807c857,
- 0x4803c857, 0x48002400, 0x1c01f000, 0x0501f805,
- 0x60058800, 0x05020002, 0x60018800, 0x1c01f000,
- 0x599c0017, 0x8c00050a, 0x05000003, 0x80000580,
- 0x1c01f000, 0x59a8021b, 0x90000528, 0x05000007,
- 0x61f6880f, 0x417a4000, 0x05fdfdda, 0x05020003,
- 0x5934000a, 0x8c000504, 0x1c01f000, 0x1c01f000,
- 0x4d440000, 0x4d340000, 0x80000580, 0x40001800,
- 0x40028800, 0x90080588, 0x05020002, 0x60041800,
- 0x0001fae7, 0x0502000a, 0x05fdfd71, 0x05020008,
- 0x800c19c0, 0x05000004, 0x59340405, 0x8c000508,
- 0x05000003, 0x80081040, 0x05000009, 0x81468800,
- 0x83440480, 0x00000800, 0x05fc17f2, 0x80000580,
- 0x5c026800, 0x5c028800, 0x1c01f000, 0x90000541,
- 0x5c026800, 0x5c028800, 0x1c01f000, 0x60200800,
- 0x58d400e4, 0x8c00051c, 0x0502002f, 0x59a8021b,
- 0x8c000508, 0x0502002c, 0x5934100a, 0x82081500,
- 0x0000e000, 0x41781800, 0x90080580, 0x0500000a,
- 0x800c1800, 0x82080580, 0x00002000, 0x05000006,
- 0x800c1800, 0x82080580, 0x00006000, 0x05000002,
- 0x800c1800, 0x42007000, 0x0010aefa, 0x58380401,
- 0x8c000504, 0x05000006, 0x900c2c84, 0x05021016,
- 0x820c0400, 0x0010484f, 0x0501f012, 0x41782000,
- 0x59342a04, 0x82140480, 0x00000800, 0x05021006,
- 0x80102000, 0x82140480, 0x00000400, 0x05021002,
- 0x80102000, 0x800c00c2, 0x800c0400, 0x80100400,
- 0x90002c89, 0x05021004, 0x82000400, 0x00104853,
- 0x50000800, 0x48066c04, 0x1c01f000, 0x00000002,
- 0x00000004, 0x00000008, 0x00000008, 0x00002802,
- 0x00001402, 0x00000a02, 0x00001402, 0x00000a02,
- 0x00000502, 0x00000a02, 0x00000502, 0x00000504,
- 0x59a80868, 0x800409c0, 0x05020004, 0x492f5067,
- 0x492f5068, 0x0511f5e1, 0x492c0800, 0x492f5068,
- 0x1c01f000, 0x5934000f, 0x41784000, 0x80001540,
- 0x05000010, 0x58080205, 0x82000500, 0x000000ff,
- 0x90000592, 0x05000005, 0xb00005a0, 0x05000003,
- 0x90000588, 0x05020004, 0x5808020d, 0x80040580,
- 0x05000005, 0x58080000, 0x40084000, 0x05fdf7f0,
- 0x90000541, 0x1c01f000, 0x42000000, 0x0010ce8f,
+ 0x4803c857, 0x48002400, 0x1c01f000, 0x599c0017,
+ 0x8c00050a, 0x05000003, 0x80000580, 0x1c01f000,
+ 0x59a80249, 0x90000528, 0x05000007, 0x61f6880f,
+ 0x417a4000, 0x05fdfdd0, 0x05020003, 0x5934000a,
+ 0x8c000504, 0x1c01f000, 0x1c01f000, 0x4d440000,
+ 0x4d340000, 0x80000580, 0x40001800, 0x40028800,
+ 0x90080588, 0x05020002, 0x60041800, 0x0001fb00,
+ 0x0502000a, 0x05fdfd6c, 0x05020008, 0x800c19c0,
+ 0x05000004, 0x59340405, 0x8c000508, 0x05000003,
+ 0x80081040, 0x05000009, 0x81468800, 0x83440480,
+ 0x00000800, 0x05fc17f2, 0x80000580, 0x5c026800,
+ 0x5c028800, 0x1c01f000, 0x90000541, 0x5c026800,
+ 0x5c028800, 0x1c01f000, 0x60200800, 0x58d400e4,
+ 0x8c00051c, 0x0502002f, 0x59a80249, 0x8c000508,
+ 0x0502002c, 0x5934100a, 0x82081500, 0x0002e000,
+ 0x41781800, 0x90080580, 0x0500000a, 0x800c1800,
+ 0x82080580, 0x00002000, 0x05000006, 0x800c1800,
+ 0x82080580, 0x00006000, 0x05000002, 0x800c1800,
+ 0x42007000, 0x0010e060, 0x58380401, 0x8c000504,
+ 0x05000006, 0x900c2c84, 0x05021016, 0x820c0400,
+ 0x00105d02, 0x0501f012, 0x41782000, 0x59342a04,
+ 0x82140480, 0x00000800, 0x05021006, 0x80102000,
+ 0x82140480, 0x00000400, 0x05021002, 0x80102000,
+ 0x800c00c2, 0x800c0400, 0x80100400, 0x90002c89,
+ 0x05021004, 0x82000400, 0x00105d06, 0x50000800,
+ 0x48066c04, 0x1c01f000, 0x00000002, 0x00000004,
+ 0x00000008, 0x00000008, 0x00002802, 0x00001402,
+ 0x00000a02, 0x00001402, 0x00000a02, 0x00000502,
+ 0x00000a02, 0x00000502, 0x00000504, 0x59a8089e,
+ 0x800409c0, 0x05020004, 0x492f509d, 0x492f509e,
+ 0x0519f5b4, 0x492c0800, 0x492f509e, 0x1c01f000,
+ 0x5934000f, 0x41784000, 0x80001540, 0x05000010,
+ 0x58080208, 0x82000500, 0x000000ff, 0x90000592,
+ 0x05000005, 0xb00005a0, 0x05000003, 0x90000588,
+ 0x05020004, 0x58080210, 0x80040580, 0x05000005,
+ 0x58080000, 0x40084000, 0x05fdf7f0, 0x90000541,
+ 0x1c01f000, 0x4c5c0000, 0x4c600000, 0x592e8c0a,
+ 0x592e440b, 0x83224500, 0x000000ff, 0x592cbc0c,
+ 0x592cc40b, 0x4947c857, 0x4923c857, 0x485fc857,
+ 0x4863c857, 0x8260c500, 0x0000f000, 0x82600580,
+ 0x00003000, 0x05020007, 0x59340200, 0x8c000508,
+ 0x05020004, 0x599c0018, 0x8c000510, 0x0500001a,
+ 0x8c5c050a, 0x0500002b, 0x485fc856, 0x812241c0,
+ 0x05020013, 0x83440580, 0x000007fe, 0x0502000e,
+ 0x42003000, 0x00fffffe, 0x05f9ffc6, 0x05020017,
+ 0x4937c857, 0x052dfa32, 0x05000012, 0x80000580,
+ 0x5c00c000, 0x5c00b800, 0x1c01f000, 0x90000541,
+ 0x05fdf7fc, 0x60281000, 0x0501f007, 0x60381000,
+ 0x0501f005, 0x603c1000, 0x0501f003, 0x60601000,
+ 0x0501f001, 0x60640800, 0x60c68000, 0x05fdf7f4,
+ 0x600c0800, 0x0501f002, 0x60280800, 0x41781000,
+ 0x05fdf7fa, 0x60228000, 0x0501f001, 0x41780800,
+ 0x41781000, 0x05fdf7ea, 0x60028000, 0x05fdf7fc,
+ 0x485fc856, 0x812241c0, 0x05fe07e9, 0x83440580,
+ 0x000007fe, 0x05fe07e4, 0x42003000, 0x00fffffe,
+ 0x05f9ff9c, 0x05fe07ed, 0x4937c857, 0x592e600e,
+ 0x0529fbe6, 0x05fc07e2, 0x59300c07, 0x90040591,
+ 0x05fe07e9, 0x5930000a, 0x800001c0, 0x05000003,
+ 0x81340580, 0x05fe07e4, 0x4936600a, 0x59300a03,
+ 0x90040587, 0x05fe07e0, 0x592c0a0d, 0x4807c857,
+ 0x4806621b, 0x497a641b, 0x492e6009, 0x64126407,
+ 0x8c5c050e, 0x05020013, 0x4c5c0000, 0x4c600000,
+ 0x4c640000, 0x592cba0b, 0x485f54cd, 0x485f52cc,
+ 0x592cc80f, 0x4200c000, 0x001106f2, 0x0539f916,
+ 0x5c00c800, 0x5c00c000, 0x5c00b800, 0x616a7000,
+ 0x64066203, 0x493a6403, 0x0511facf, 0x05fdf7b0,
+ 0x616e7000, 0x592c0010, 0x4802641c, 0x592c0011,
+ 0x4802621c, 0x05fdf7f7, 0x42000000, 0x00110210,
0x4a000400, 0x00000707, 0x4a000204, 0x00000840,
0x4a000403, 0x0000ffff, 0x49780200, 0x1c01f000,
0x4d340000, 0x4d440000, 0x4c580000, 0x61c0b00f,
- 0x4803c856, 0x417a8800, 0x0001fae7, 0x05020006,
+ 0x4803c856, 0x417a8800, 0x0001fb00, 0x05020006,
0x59340200, 0x8c00051a, 0x05000003, 0x8400051a,
0x48026a00, 0x81468800, 0x8058b040, 0x05fe07f7,
0x5c00b000, 0x5c028800, 0x5c026800, 0x1c01f000,
- 0x64033011, 0x4a03b104, 0x80000000, 0x4a03b104,
- 0x60000001, 0x497b3016, 0x497b3017, 0x1c01f000,
- 0x599c0018, 0x4803c856, 0x497b3014, 0x497b3015,
- 0x9000050f, 0x48033012, 0x05000008, 0x599c0216,
- 0x82000500, 0x0000ffff, 0x05020002, 0x60080000,
- 0x48033013, 0x850e1d62, 0x1c01f000, 0x05fdfff1,
- 0x6413c826, 0x599c0209, 0x80000540, 0x0500001c,
- 0x599c0207, 0x80000540, 0x05000007, 0x800000cc,
- 0x599c080d, 0x80040400, 0x4803b100, 0x497bb102,
- 0x59d80101, 0x599c000d, 0x4803b100, 0x599c000e,
- 0x4803b101, 0x599c0207, 0x80000540, 0x05020002,
- 0x497bb102, 0x599c0a09, 0x82040540, 0x00400000,
- 0x4803b103, 0x6417b109, 0x4a03b104, 0x10000001,
- 0x8d0c0522, 0x05020003, 0x64073011, 0x1c01f000,
- 0x8d0c0520, 0x05020003, 0x640b3011, 0x05fdf7fc,
- 0x640f3011, 0x05fdf7fa, 0x592c0205, 0x492fc857,
- 0x80000540, 0x05000007, 0x42034000, 0x0010ae99,
- 0x59a1d806, 0x80edd9c0, 0x05dc0911, 0x0501f005,
- 0x0521fdb1, 0x05de090e, 0x5931d82d, 0x58ef400a,
- 0x58ec0008, 0x800001c0, 0x05dc0909, 0x0801f800,
- 0x1c01f000, 0x40680800, 0x5c000000, 0x4c000000,
- 0x4803c857, 0x492fc857, 0x4943c857, 0x4807c857,
- 0x4c040000, 0x0001ff6c, 0x5c000800, 0x4a025a05,
- 0x00000103, 0x49425a07, 0x48065a09, 0x4a025c07,
+ 0x592c2a08, 0x82142d00, 0x000000ff, 0x90140592,
+ 0x05000006, 0xb01405b2, 0x05000004, 0xb01405ba,
+ 0x05000002, 0x90000541, 0x1c01f000, 0x64033003,
+ 0x4a03b104, 0x80000000, 0x59d80105, 0x4a03b104,
+ 0x60000001, 0x1c01f000, 0x599c0018, 0x4803c856,
+ 0x497b3006, 0x497b3007, 0x9000050f, 0x48033004,
+ 0x05000008, 0x599c0216, 0x82000500, 0x0000ffff,
+ 0x05020002, 0x60080000, 0x48033005, 0x850e1d62,
+ 0x1c01f000, 0x05fdfff1, 0x6413c826, 0x599c0209,
+ 0x80000540, 0x0500001c, 0x599c0207, 0x80000540,
+ 0x05000007, 0x800000cc, 0x599c080d, 0x80040400,
+ 0x4803b100, 0x497bb102, 0x59d80101, 0x599c000d,
+ 0x4803b100, 0x599c000e, 0x4803b101, 0x599c0207,
+ 0x80000540, 0x05020002, 0x497bb102, 0x599c0a09,
+ 0x82040540, 0x00400000, 0x4803b103, 0x6423b109,
+ 0x4a03b104, 0x10000001, 0x8d0c0522, 0x05020003,
+ 0x64073003, 0x1c01f000, 0x8d0c0516, 0x05000007,
+ 0x8d0c0520, 0x05020003, 0x640b3003, 0x05fdf7fa,
+ 0x640f3003, 0x05fdf7f8, 0x8d0c0520, 0x05020003,
+ 0x64133003, 0x05fdf7f4, 0x64173003, 0x05fdf7f2,
+ 0x592c0208, 0x492fc857, 0x80000540, 0x05000007,
+ 0x42034000, 0x0010dceb, 0x59a1d806, 0x80edd9c0,
+ 0x05d00fba, 0x0501f005, 0x052df885, 0x05d20fb7,
+ 0x5931d82d, 0x58ef400b, 0x58ec0009, 0x800001c0,
+ 0x05d00fb2, 0x0801f800, 0x1c01f000, 0x5c000000,
+ 0x4c000000, 0x4803c857, 0x492fc857, 0x4943c857,
+ 0x4807c857, 0x4c040000, 0x0005f9f3, 0x5c000800,
+ 0x4c040000, 0x0505fdd3, 0x5c000800, 0x4a025a08,
+ 0x00000103, 0x49425a0a, 0x48065a0c, 0x4a025c0a,
0x0000ffff, 0x813261c0, 0x05000003, 0x59300402,
- 0x48025c07, 0x592c0209, 0x8c000512, 0x05020006,
- 0x912c040a, 0x05011000, 0x4803c840, 0x642fc842,
- 0x05011000, 0x1c01f000, 0x40680000, 0x4c540000,
- 0x4c580000, 0x4c5c0000, 0x4d2c0000, 0x4000b800,
- 0x052dfa56, 0x4178a800, 0x05ddfc5b, 0x05000094,
- 0x05011000, 0x485fc857, 0x4943c857, 0x4923c857,
- 0x912c0405, 0x4803c840, 0x6443c842, 0x40000000,
- 0x05fd17ff, 0x412c7000, 0x4a025805, 0x00000132,
- 0x497a5806, 0x805cb9c0, 0x05020060, 0x912e5c08,
- 0x417a4000, 0x42024800, 0x0010b391, 0x41786800,
- 0x59240a00, 0x9004050f, 0x0c01f001, 0x00104940,
- 0x00104940, 0x00104940, 0x00104940, 0x00104940,
- 0x00104940, 0x00104940, 0x00104937, 0x00104940,
- 0x00104940, 0x00104940, 0x00104940, 0x00104940,
- 0x00104940, 0x00104940, 0x00104940, 0x8054a800,
- 0x812241c0, 0x05020007, 0x59240805, 0x805c00f0,
- 0x80040d40, 0x48065800, 0x812e5800, 0x0501f030,
- 0x90340503, 0x0c01f001, 0x00104946, 0x0010494e,
- 0x00104957, 0x00104960, 0x91200581, 0x05020003,
- 0x60042000, 0x0501f020, 0x912004a0, 0x0500101d,
- 0x80346800, 0x0501f01b, 0x912005a1, 0x05020004,
- 0x812e5800, 0x60042000, 0x0501f017, 0xb1200480,
- 0x05001014, 0x80346800, 0x0501f012, 0xb1200581,
- 0x05020004, 0x812e5800, 0x60042000, 0x0501f00e,
- 0xb12004a0, 0x0500100b, 0x80346800, 0x0501f009,
- 0xb12005a1, 0x05020004, 0x812e5800, 0x60042000,
- 0x0501f005, 0xb12004bf, 0x05001002, 0x80346800,
- 0x801020c2, 0x90040507, 0x90000587, 0x05020004,
- 0x592c0000, 0x80100540, 0x48025800, 0x91264c0b,
- 0x81224000, 0x8058b040, 0x05fe07b2, 0x8054a9c0,
- 0x403a5800, 0x0500002d, 0x052df9ec, 0x052dfa0a,
- 0x05020002, 0x8058b040, 0x805800d0, 0x80540540,
- 0x48025a07, 0x0501f01e, 0x91400581, 0x05020004,
- 0x48165a09, 0x90140583, 0x0500001d, 0x83400d00,
- 0x000000ff, 0x90040584, 0x05000019, 0x90040586,
- 0x05000017, 0x83400d00, 0x0000ff00, 0x05000003,
- 0x81400110, 0x4802580d, 0x814000d0, 0x81200540,
- 0x48025c07, 0x052df9f0, 0x05020002, 0x8058b040,
- 0x805800d0, 0x90000541, 0x48025a07, 0x59240805,
- 0x805c00f0, 0x80040d40, 0x48065808, 0x052df9f5,
- 0x0502000c, 0x0001fb5b, 0x0501f005, 0x59cc0007,
- 0x4802580d, 0x05fdf7ed, 0x05ddfbea, 0x5c025800,
+ 0x48025c0a, 0x592c020c, 0x8c000512, 0x05020006,
+ 0x912c040d, 0x05011000, 0x4803c840, 0x642fc842,
+ 0x05011000, 0x1c01f000, 0x59765800, 0x0001fdfd,
+ 0x592c1005, 0x800811c0, 0x000205e2, 0x1c01f000,
+ 0x4c540000, 0x4c580000, 0x4c5c0000, 0x4d2c0000,
+ 0x4c600000, 0x400cc000, 0x4000b800, 0x0539fa9d,
+ 0x4178a800, 0x05d5fb18, 0x050000c8, 0x05011000,
+ 0x485fc857, 0x912c0408, 0x4803c840, 0x6443c842,
+ 0x40000000, 0x05fd17ff, 0x412c7000, 0x4a025808,
+ 0x00000132, 0x497a5809, 0x42000000, 0x0010de60,
+ 0x50000000, 0x48025802, 0x805cb9c0, 0x05020060,
+ 0x912e5c0b, 0x417a4000, 0x42024800, 0x0010e512,
+ 0x41786800, 0x59240a00, 0x9004050f, 0x0c01f001,
+ 0x00105e8d, 0x00105e8d, 0x00105e8d, 0x00105e8d,
+ 0x00105e8d, 0x00105e8d, 0x00105e8d, 0x00105e84,
+ 0x00105e8d, 0x00105e8d, 0x00105e8d, 0x00105e8d,
+ 0x00105e8d, 0x00105e8d, 0x00105e8d, 0x00105e8d,
+ 0x8054a800, 0x812241c0, 0x05020007, 0x59240805,
+ 0x805c00f0, 0x80040d40, 0x48065800, 0x812e5800,
+ 0x0501f030, 0x90340503, 0x0c01f001, 0x00105e93,
+ 0x00105e9b, 0x00105ea4, 0x00105ead, 0x91200581,
+ 0x05020003, 0x60042000, 0x0501f020, 0x912004a0,
+ 0x0500101d, 0x80346800, 0x0501f01b, 0x912005a1,
+ 0x05020004, 0x812e5800, 0x60042000, 0x0501f017,
+ 0xb1200480, 0x05001014, 0x80346800, 0x0501f012,
+ 0xb1200581, 0x05020004, 0x812e5800, 0x60042000,
+ 0x0501f00e, 0xb12004a0, 0x0500100b, 0x80346800,
+ 0x0501f009, 0xb12005a1, 0x05020004, 0x812e5800,
+ 0x60042000, 0x0501f005, 0xb12004bf, 0x05001002,
+ 0x80346800, 0x801020c2, 0x90040507, 0x90000587,
+ 0x05020004, 0x592c0000, 0x80100540, 0x48025800,
+ 0x91264c0d, 0x81224000, 0x8058b040, 0x05fe07b2,
+ 0x8054a9c0, 0x403a5800, 0x0500005f, 0x0539fa31,
+ 0x0539fa51, 0x05020002, 0x8058b040, 0x805800d0,
+ 0x80540540, 0x48025a0a, 0x0501f050, 0x4943c857,
+ 0x4923c857, 0x91400581, 0x05020004, 0x48165a0c,
+ 0x90140583, 0x0500004d, 0x83400d00, 0x000000ff,
+ 0x90040584, 0x05000049, 0x90040586, 0x05000047,
+ 0x83400d00, 0x0000ff00, 0x05000003, 0x81400110,
+ 0x48025810, 0x814000d0, 0x81200540, 0x48025c0a,
+ 0x0539fa35, 0x05020002, 0x8058b040, 0x805800d0,
+ 0x90000541, 0x48025a0a, 0x59240805, 0x805c00f0,
+ 0x80040d40, 0x4806580b, 0x5924000b, 0x4802580f,
+ 0x592c020c, 0x80600540, 0x48025a0c, 0x91400d81,
+ 0x0500002a, 0x4d340000, 0x4d440000, 0x61fa880f,
+ 0x05fdfb85, 0x05d20ee5, 0x592c020c, 0x8400055a,
+ 0x48025a0c, 0x59340006, 0x9c0001c0, 0x48025812,
+ 0x59340007, 0x9c0001c0, 0x48025813, 0x59340008,
+ 0x9c0001c0, 0x48025814, 0x59340009, 0x9c0001c0,
+ 0x48025815, 0x0501f9a9, 0x05020006, 0x59a80249,
+ 0x8c000508, 0x05020005, 0x6000080c, 0x0501f007,
+ 0x60000804, 0x0501f005, 0x592c020c, 0x84000558,
+ 0x48025a0c, 0x60000808, 0x592c020c, 0x82000500,
+ 0x0000f1ff, 0x80040540, 0x4803c857, 0x48025a0c,
+ 0x5c028800, 0x5c026800, 0x0539fa16, 0x0502000d,
+ 0x0001fb82, 0x0501f005, 0x59cc0007, 0x48025810,
+ 0x05fdf7bd, 0x05d5fa71, 0x5c00c000, 0x5c025800,
0x5c00b800, 0x5c00b000, 0x5c00a800, 0x1c01f000,
- 0x0529fe4c, 0x05fdf7fa, 0x59a80011, 0x90000c8a,
- 0x05de1843, 0x0c01f808, 0x4a038805, 0x000000f0,
- 0x59c400a3, 0x82000500, 0x02870000, 0x05de083c,
- 0x1c01f000, 0x00104a32, 0x001049c0, 0x001049d8,
- 0x00104a01, 0x00104a25, 0x001001ef, 0x001001ef,
- 0x001049d8, 0x001001ef, 0x001049bf, 0x1c01f000,
- 0x600c2000, 0x0501fbc3, 0x4a038808, 0x00000204,
- 0x0501fbb7, 0x59c40805, 0x8c04050e, 0x05020010,
+ 0x0535fdb1, 0x05fdf7f9, 0x59a8003f, 0x90000c8a,
+ 0x05d21eae, 0x0c01f808, 0x4a038805, 0x000000f0,
+ 0x59c400a3, 0x82000500, 0x02870000, 0x05d20ea7,
+ 0x1c01f000, 0x00105fb3, 0x00105f40, 0x00105f58,
+ 0x00105f82, 0x00105fa6, 0x001005da, 0x001005da,
+ 0x00105f58, 0x001005da, 0x00105f3f, 0x1c01f000,
+ 0x600c2000, 0x0501fbad, 0x4a038808, 0x00000204,
+ 0x0501fba1, 0x59c40805, 0x8c04050e, 0x05020010,
0x8c04050a, 0x05020009, 0x8c04050c, 0x05020005,
- 0x8c040508, 0x0500000a, 0x640f5011, 0x0501f007,
- 0x64035011, 0x0501f005, 0x42000000, 0x0010b22b,
- 0x052df871, 0x640b5011, 0x0501f896, 0x1c01f000,
- 0x60002000, 0x0501fbab, 0x4a038808, 0x00000202,
- 0x59c40805, 0x8c040508, 0x05020020, 0x8c04050c,
- 0x0502001c, 0x8c04050e, 0x05020018, 0x82040500,
- 0x000000f0, 0x0502001b, 0x0501fb95, 0x4a038808,
- 0x00000280, 0x59c40002, 0x8400050c, 0x48038802,
- 0x0501f96d, 0x4d3c0000, 0x60067800, 0x0521fc1f,
- 0x5c027800, 0x59c410a3, 0x84081518, 0x05e9f811,
- 0x4a038808, 0x00000280, 0x60082000, 0x0501fb8d,
- 0x64275011, 0x0501f007, 0x64075011, 0x0501f004,
- 0x64035011, 0x0501f002, 0x640f5011, 0x0501f86d,
- 0x1c01f000, 0x60042000, 0x0501fb82, 0x59c410a3,
- 0x84081518, 0x05e5ffff, 0x4a038808, 0x00000280,
- 0x59c40805, 0x8c04050a, 0x05020018, 0x8c04050c,
- 0x05020014, 0x8c04050e, 0x05020010, 0x82040500,
- 0x000000f0, 0x05020013, 0x59c40002, 0x8400050c,
- 0x48038802, 0x0501f944, 0x4d3c0000, 0x60067800,
- 0x0521fbf6, 0x5c027800, 0x60082000, 0x0501fb69,
- 0x64275011, 0x0501f007, 0x64075011, 0x0501f004,
- 0x64035011, 0x0501f002, 0x640b5011, 0x0501f849,
- 0x1c01f000, 0x0501fc5a, 0x4a038808, 0x00000208,
- 0x59c40805, 0x8c04050c, 0x05020005, 0x8c04050e,
- 0x05000005, 0x64075011, 0x0501f002, 0x64035011,
- 0x0501f83c, 0x1c01f000, 0x60102000, 0x0501fb51,
- 0x0501f873, 0x59c40805, 0x8c04050c, 0x05020009,
- 0x8c04050a, 0x05020005, 0x8c04050e, 0x05000005,
- 0x64075011, 0x0501f002, 0x640b5011, 0x0501f82d,
- 0x1c01f000, 0x0501f8f1, 0x05da0fad, 0x601c2000,
- 0x0501fb40, 0x8d0c050c, 0x05000010, 0x850e1d0c,
- 0x64438805, 0x05e5fec2, 0x59c40005, 0x8c000508,
- 0x05000006, 0x4a038808, 0x00000208, 0x64075014,
- 0x6006d800, 0x0501f01a, 0x59c40006, 0x84000548,
- 0x48038806, 0x0501f016, 0x59a80011, 0x90000581,
- 0x05020012, 0x42000000, 0x0010b22b, 0x0529ffea,
- 0x4ce80000, 0x61a1d007, 0x0509fbe3, 0x59c40005,
- 0x90000530, 0x05000008, 0x8c00050a, 0x05000004,
- 0x60002000, 0x0501fb1f, 0x0501f003, 0x60042000,
- 0x0501fb1c, 0x5c01d000, 0x64135011, 0x1c01f000,
- 0x4c040000, 0x4c080000, 0x61900800, 0x42001000,
- 0x00104a75, 0x0509fbb6, 0x5c001000, 0x5c000800,
- 0x1c01f000, 0x4803c856, 0x4c040000, 0x0509fec8,
- 0x4df00000, 0x050df95d, 0x5c03e000, 0x05080eb0,
- 0x42000000, 0x0010b22a, 0x0529ffc7, 0x05fdffc2,
- 0x5c000800, 0x1c01f000, 0x4803c856, 0x4c040000,
- 0x4c080000, 0x0509feba, 0x4df00000, 0x050df94f,
- 0x5c03e000, 0x05080ea2, 0x59c40006, 0x84000500,
- 0x48038806, 0x050dfa06, 0x497b8880, 0x42000000,
- 0x0010b229, 0x0529ffb4, 0x05e5fdda, 0x64135075,
- 0x6012d800, 0x64078805, 0x42001000, 0x00104a75,
- 0x0509fb98, 0x05ddf971, 0x0501f8ae, 0x05000005,
- 0x42006000, 0xfeffffff, 0x41786800, 0x05f9fcc1,
- 0x0201f800, 0x0010fcd9, 0x60000001, 0x05e5fb2e,
- 0x5c001000, 0x5c000800, 0x1c01f000, 0x59c40008,
- 0x82000580, 0x00000210, 0x05000005, 0x4a038808,
- 0x00000210, 0x6021d027, 0x0509fb93, 0x1c01f000,
- 0x4c040000, 0x59a80814, 0x90040580, 0x05000008,
- 0x90040581, 0x05000008, 0x90040582, 0x05000008,
- 0x90040583, 0x05000008, 0x0501f043, 0x64035011,
- 0x0501f006, 0x64135011, 0x0501f004, 0x64075011,
- 0x0501f002, 0x641f5011, 0x497b8880, 0x64078893,
- 0x41780000, 0x05e5fb8e, 0x050df9cd, 0x916c0d84,
- 0x05000008, 0x59c40006, 0x82000500, 0xffffff0f,
- 0x82000540, 0x04000001, 0x48038806, 0x0501f007,
- 0x59c40006, 0x82000500, 0xffffff0f, 0x82000540,
- 0x04000000, 0x48038806, 0x0501f872, 0x05020005,
- 0x59c40806, 0x82040d00, 0xfbffff0f, 0x48078806,
- 0x59c40005, 0x8c000534, 0x05020026, 0x42006000,
- 0xfc18ffff, 0x42006800, 0x01000000, 0x05f9fc7d,
- 0x05e5fe27, 0x59c408a4, 0x90040d0f, 0x90040d8c,
- 0x0502089a, 0x0501f85f, 0x05000005, 0x42006000,
- 0xfeffffff, 0x41786800, 0x05f9fc72, 0x916c0d84,
- 0x0500000c, 0x05fdff7b, 0x5994102e, 0x41780800,
- 0x60280000, 0x0509fc09, 0x40080000, 0x59a80835,
- 0x80040c00, 0x42001000, 0x00104a82, 0x0509fb23,
- 0x64135014, 0x05fdfead, 0x0501f84a, 0x05020005,
- 0x59c408a4, 0x90040d0f, 0x9004058c, 0x05da0eec,
- 0x5c000800, 0x1c01f000, 0x4803c856, 0x4c000000,
- 0x0509fb47, 0x4a03500f, 0x00ffffff, 0x497b5013,
- 0x59a8001f, 0x82000500, 0xffff0000, 0x4803501f,
- 0x497b8880, 0x497b8893, 0x41780000, 0x05e5fb40,
- 0x59c40001, 0x82000500, 0xfffffcff, 0x48038801,
- 0x42006000, 0xfc18ffff, 0x41786800, 0x05f9fc45,
- 0x59c410a3, 0x84081518, 0x05e5fee6, 0x4a038808,
- 0x00000200, 0x5c000000, 0x800001c0, 0x05fa0ae5,
- 0x4a038805, 0x040000f0, 0x59c40006, 0x82000500,
- 0xffffffcf, 0x82000540, 0x440000c1, 0x48038806,
- 0x1c01f000, 0x0501f805, 0x60058800, 0x05000002,
- 0x60018800, 0x1c01f000, 0x4c5c0000, 0x59a8b813,
+ 0x8c040508, 0x0500000a, 0x640f503f, 0x0501f007,
+ 0x6403503f, 0x0501f005, 0x42000000, 0x0010e3a4,
+ 0x0539f888, 0x640b503f, 0x0501f898, 0x1c01f000,
+ 0x497b50a8, 0x60002000, 0x0501fb94, 0x4a038808,
+ 0x00000202, 0x59c40805, 0x8c040508, 0x05020020,
+ 0x8c04050c, 0x0502001c, 0x8c04050e, 0x05020018,
+ 0x82040500, 0x000000f0, 0x0502001b, 0x0501fb7e,
+ 0x4a038808, 0x00000280, 0x59c40002, 0x8400050c,
+ 0x48038802, 0x0501f959, 0x4d3c0000, 0x60067800,
+ 0x0529feb7, 0x5c027800, 0x59c410a3, 0x84081518,
+ 0x05ddff2b, 0x4a038808, 0x00000280, 0x60082000,
+ 0x0501fb76, 0x6427503f, 0x0501f007, 0x6407503f,
+ 0x0501f004, 0x6403503f, 0x0501f002, 0x640f503f,
+ 0x0501f86e, 0x1c01f000, 0x60042000, 0x0501fb6b,
+ 0x59c410a3, 0x84081518, 0x05ddff19, 0x4a038808,
+ 0x00000280, 0x59c40805, 0x8c04050a, 0x05020018,
+ 0x8c04050c, 0x05020014, 0x8c04050e, 0x05020010,
+ 0x82040500, 0x000000f0, 0x05020013, 0x59c40002,
+ 0x8400050c, 0x48038802, 0x0501f930, 0x4d3c0000,
+ 0x60067800, 0x0529fe8e, 0x5c027800, 0x60082000,
+ 0x0501fb52, 0x6427503f, 0x0501f007, 0x6407503f,
+ 0x0501f004, 0x6403503f, 0x0501f002, 0x640b503f,
+ 0x0501f84a, 0x1c01f000, 0x0501fc43, 0x4a038808,
+ 0x00000208, 0x59c40805, 0x8c04050c, 0x05020005,
+ 0x8c04050e, 0x05000005, 0x6407503f, 0x0501f002,
+ 0x6403503f, 0x0501f83d, 0x1c01f000, 0x60102000,
+ 0x0501fb3a, 0x0501f873, 0x59c40805, 0x8c04050c,
+ 0x05020009, 0x8c04050a, 0x05020005, 0x8c04050e,
+ 0x05000005, 0x6407503f, 0x0501f002, 0x640b503f,
+ 0x0501f82e, 0x1c01f000, 0x0501f8ec, 0x05d20e17,
+ 0x0501fc6b, 0x601c2000, 0x0501fb28, 0x8d0c050c,
+ 0x05000010, 0x850e1d0c, 0x64438805, 0x05ddfde0,
+ 0x59c40005, 0x8c000508, 0x05000006, 0x4a038808,
+ 0x00000208, 0x64075042, 0x6006d800, 0x0501f01a,
+ 0x59c40006, 0x84000548, 0x48038806, 0x0501f016,
+ 0x59a8003f, 0x90000581, 0x05020012, 0x42000000,
+ 0x0010e3a4, 0x0535ffff, 0x4ce80000, 0x61a1d007,
+ 0x050df825, 0x59c40005, 0x90000530, 0x05000008,
+ 0x8c00050a, 0x05000004, 0x60002000, 0x0501fb07,
+ 0x0501f003, 0x60042000, 0x0501fb04, 0x5c01d000,
+ 0x6413503f, 0x1c01f000, 0x4c040000, 0x4c080000,
+ 0x61900800, 0x42001000, 0x00105ff7, 0x0509fffc,
+ 0x5c001000, 0x5c000800, 0x1c01f000, 0x4803c856,
+ 0x4c040000, 0x0511fd1a, 0x4df00000, 0x0511ffa7,
+ 0x5c03e000, 0x05100d07, 0x42000000, 0x0010e3a3,
+ 0x0535ffdc, 0x05fdffc1, 0x5c000800, 0x1c01f000,
+ 0x4803c856, 0x4c040000, 0x4c080000, 0x0511fd0c,
+ 0x4df00000, 0x0511ff99, 0x5c03e000, 0x05100cf9,
+ 0x59c40006, 0x84000500, 0x48038806, 0x0515f846,
+ 0x497b8880, 0x42000000, 0x0010e3a2, 0x0535ffc9,
+ 0x05ddfcf8, 0x641350b4, 0x6012d800, 0x64078805,
+ 0x42001000, 0x00105ff7, 0x0509ffdc, 0x05d1ffe3,
+ 0x0501f89e, 0x05000005, 0x42006000, 0xfeffffff,
+ 0x41786800, 0x05f9fa36, 0x05d1fbd8, 0x60000001,
+ 0x05ddfa60, 0x5c001000, 0x5c000800, 0x1c01f000,
+ 0x59c40008, 0x82000580, 0x00000210, 0x05000005,
+ 0x4a038808, 0x00000210, 0x6021d027, 0x0509ffd6,
+ 0x1c01f000, 0x4c040000, 0x59a80842, 0x90040580,
+ 0x05000008, 0x90040581, 0x05000008, 0x90040582,
+ 0x05000008, 0x90040583, 0x05000008, 0x0501f043,
+ 0x6403503f, 0x0501f006, 0x6413503f, 0x0501f004,
+ 0x6407503f, 0x0501f002, 0x641f503f, 0x497b8880,
+ 0x64078893, 0x41780000, 0x05ddfac9, 0x0515f80e,
+ 0x916c0d84, 0x05000008, 0x59c40006, 0x82000500,
+ 0xffffff0f, 0x82000540, 0x04000001, 0x48038806,
+ 0x0501f007, 0x59c40006, 0x82000500, 0xffffff0f,
+ 0x82000540, 0x04000000, 0x48038806, 0x0501f863,
+ 0x05020005, 0x59c40806, 0x82040d00, 0xfbffff0f,
+ 0x48078806, 0x59c40005, 0x8c000534, 0x05020026,
+ 0x42006000, 0xfc18ffff, 0x42006800, 0x01000000,
+ 0x05f9f9f3, 0x05ddfd46, 0x59c408a4, 0x90040d0f,
+ 0x90040d8c, 0x05020885, 0x0501f850, 0x05000005,
+ 0x42006000, 0xfeffffff, 0x41786800, 0x05f9f9e8,
+ 0x916c0d84, 0x0500000c, 0x05fdff7c, 0x5994102e,
+ 0x41780800, 0x60280000, 0x050dff18, 0x40080000,
+ 0x59a80863, 0x80040c00, 0x42001000, 0x00106004,
+ 0x0509ff6c, 0x64135042, 0x05fdfeac, 0x0501f83b,
+ 0x05020005, 0x59c408a4, 0x90040d0f, 0x9004058c,
+ 0x05d20d56, 0x5c000800, 0x1c01f000, 0x4803c856,
+ 0x4c000000, 0x0509ff84, 0x4a03503d, 0x00ffffff,
+ 0x497b5041, 0x59a8004d, 0x82000500, 0xffff0000,
+ 0x4803504d, 0x497b8880, 0x497b8893, 0x41780000,
+ 0x05ddfa7b, 0x59c40001, 0x82000500, 0xfffffcff,
+ 0x48038801, 0x42006000, 0xfc18ffff, 0x41786800,
+ 0x05f9f9bb, 0x59c410a3, 0x84081518, 0x05ddfe00,
+ 0x4a038808, 0x00000200, 0x5c000000, 0x800001c0,
+ 0x05fa0847, 0x4a038805, 0x040000f0, 0x59c40006,
+ 0x82000500, 0xffffffcf, 0x82000540, 0x440000c1,
+ 0x48038806, 0x1c01f000, 0x4c5c0000, 0x59a8b841,
0x825cbd80, 0x0000aaaa, 0x5c00b800, 0x1c01f000,
- 0x0501f805, 0x60058800, 0x05000002, 0x60018800,
- 0x1c01f000, 0x4c5c0000, 0x599cb818, 0x905cbd30,
- 0x905cbd80, 0x5c00b800, 0x1c01f000, 0x0501f805,
- 0x60058800, 0x05000002, 0x60018800, 0x1c01f000,
- 0x4c5c0000, 0x599cb818, 0x905cbd30, 0x905cbd90,
- 0x5c00b800, 0x1c01f000, 0x0501f805, 0x60058800,
- 0x05000002, 0x60018800, 0x1c01f000, 0x4c5c0000,
- 0x599cb818, 0x905cbd30, 0x905cbda0, 0x5c00b800,
- 0x1c01f000, 0x490fc857, 0x910c0d13, 0x0500001e,
- 0x599c1017, 0x4d3c0000, 0x910c0511, 0x05000005,
- 0x417a7800, 0x8d0c0520, 0x05020007, 0x0501f00f,
- 0x60227800, 0x8d0c0520, 0x0500000c, 0x600c3000,
- 0x0501f002, 0x60103000, 0x603a8000, 0x4d200000,
- 0x61fe4001, 0x0525ffcb, 0x5c024000, 0x599c1017,
- 0x8c08050a, 0x05020006, 0x60128000, 0x0201f800,
- 0x0010edf3, 0x4803c856, 0x850e1d08, 0x5c027800,
+ 0x4c5c0000, 0x599cb818, 0x905cbd30, 0x905cbd80,
+ 0x5c00b800, 0x1c01f000, 0x4c5c0000, 0x599cb818,
+ 0x905cbd30, 0x905cbd90, 0x5c00b800, 0x1c01f000,
+ 0x4c5c0000, 0x599cb818, 0x905cbd30, 0x905cbda0,
+ 0x5c00b800, 0x1c01f000, 0x490fc857, 0x910c0d13,
+ 0x0500001d, 0x599c1017, 0x4d3c0000, 0x910c0511,
+ 0x05000005, 0x417a7800, 0x8d0c0520, 0x05020007,
+ 0x0501f00f, 0x60227800, 0x8d0c0520, 0x0500000c,
+ 0x600c3000, 0x0501f002, 0x60103000, 0x603a8000,
+ 0x4d200000, 0x61fe4001, 0x0531fecf, 0x5c024000,
+ 0x599c1017, 0x8c08050a, 0x05020005, 0x60128000,
+ 0x05e1f9f2, 0x4803c856, 0x850e1d08, 0x5c027800,
0x0501f009, 0x8d0c0520, 0x05000007, 0x603e8000,
- 0x60043000, 0x4d200000, 0x61fe4001, 0x0525ffb9,
+ 0x60043000, 0x4d200000, 0x61fe4001, 0x0531febe,
0x5c024000, 0x1c01f000, 0x4803c856, 0x4c580000,
- 0x42000000, 0x0010b33f, 0x0529febf, 0x42000800,
- 0x0010d15c, 0x59c40003, 0x44000800, 0x59c40004,
+ 0x42000000, 0x0010e4bd, 0x0535feea, 0x42000800,
+ 0x00110516, 0x59c40003, 0x44000800, 0x59c40004,
0x48000801, 0x59c4000b, 0x48000802, 0x59c4008e,
0x48000803, 0x59c4008f, 0x48000804, 0x59c40090,
0x48000805, 0x59c40091, 0x48000806, 0x59c40092,
0x48000807, 0x59c40093, 0x48000808, 0x59c40099,
0x48000809, 0x59c4009e, 0x4800080a, 0x59c400aa,
- 0x4800080b, 0x59c400af, 0x4800080c, 0x59c400b2,
- 0x4800080d, 0x59c400b1, 0x4800080e, 0x90040c0f,
- 0x41c41800, 0x60c0b000, 0x580c0050, 0x44000800,
- 0x80040800, 0x800c1800, 0x8058b040, 0x05fe07fb,
- 0x41c41800, 0x6080b000, 0x580c0010, 0x44000800,
- 0x80040800, 0x800c1800, 0x8058b040, 0x05fe07fb,
- 0x497b8830, 0x6100b000, 0x59c40031, 0x44000800,
- 0x80040800, 0x8058b040, 0x05fe07fc, 0x497b88ac,
- 0x6040b000, 0x59c400ad, 0x44000800, 0x80040800,
- 0x8058b040, 0x05fe07fc, 0x59c41001, 0x4c080000,
- 0x8408150c, 0x480b8801, 0x4a0370e4, 0x00000300,
- 0x4a0370e5, 0xb0000000, 0x60000810, 0x80040840,
- 0x05d80e1f, 0x59b800e5, 0x8c000538, 0x05fe07fc,
- 0x4a0370e4, 0x00000200, 0x42006000, 0xffffffff,
- 0x42006800, 0x80000000, 0x05f9fb86, 0x64078807,
- 0x497b8807, 0x0501fab0, 0x4a038808, 0x00000210,
- 0x42006000, 0xfcf8ffff, 0x42006800, 0x01000000,
- 0x05f9fb7c, 0x5c001000, 0x480b8801, 0x42000800,
- 0x0010d15c, 0x50040000, 0x48038803, 0x58040001,
- 0x48038804, 0x58040002, 0x4803880b, 0x58040003,
- 0x4803888e, 0x58040004, 0x4803888f, 0x58040005,
- 0x48038890, 0x58040006, 0x48038891, 0x58040007,
- 0x48038892, 0x58040008, 0x48038893, 0x58040009,
- 0x48038899, 0x5804000a, 0x4803889e, 0x5804000b,
- 0x480388aa, 0x5804000c, 0x480388af, 0x5804000d,
- 0x480388b2, 0x5804000e, 0x480388b1, 0x90040c0f,
+ 0x4800080b, 0x90040c0f, 0x41c41800, 0x60c0b000,
+ 0x580c0050, 0x44000800, 0x80040800, 0x800c1800,
+ 0x8058b040, 0x05fe07fb, 0x41c41800, 0x6080b000,
+ 0x580c0010, 0x44000800, 0x80040800, 0x800c1800,
+ 0x8058b040, 0x05fe07fb, 0x497b8830, 0x6100b000,
+ 0x59c40031, 0x44000800, 0x80040800, 0x8058b040,
+ 0x05fe07fc, 0x497b88ac, 0x6040b000, 0x59c400ad,
+ 0x44000800, 0x80040800, 0x8058b040, 0x05fe07fc,
+ 0x59a800a9, 0x59c410b1, 0x80080400, 0x480350a9,
+ 0x59a800aa, 0x59c410b2, 0x80080400, 0x480350aa,
+ 0x59c41001, 0x4c080000, 0x8408150c, 0x480b8801,
+ 0x4a0370e4, 0x00000300, 0x4a0370e5, 0xb0000000,
+ 0x60000810, 0x80040840, 0x05d00c9c, 0x59b800e5,
+ 0x8c000538, 0x05fe07fc, 0x4a0370e4, 0x00000200,
+ 0x42006000, 0xffffffff, 0x42006800, 0x80000000,
+ 0x05f9f90f, 0x64078807, 0x497b8807, 0x0501faac,
+ 0x4a038808, 0x00000210, 0x42006000, 0xfcf8ffff,
+ 0x42006800, 0x01000000, 0x05f9f905, 0x5c001000,
+ 0x480b8801, 0x42000800, 0x00110516, 0x50040000,
+ 0x48038803, 0x58040001, 0x48038804, 0x58040002,
+ 0x4803880b, 0x58040003, 0x4803888e, 0x58040004,
+ 0x4803888f, 0x58040005, 0x48038890, 0x58040006,
+ 0x48038891, 0x58040007, 0x48038892, 0x58040008,
+ 0x48038893, 0x58040009, 0x48038899, 0x5804000a,
+ 0x4803889e, 0x5804000b, 0x480388aa, 0x90040c0f,
0x41c41800, 0x60c0b000, 0x50040000, 0x48001850,
0x80040800, 0x800c1800, 0x8058b040, 0x05fe07fb,
0x41c41800, 0x6080b000, 0x50040000, 0x48001810,
@@ -17702,723 +6278,936 @@ static const uint32_t isp_2500_multi_risc_code[] = {
0x80040800, 0x8058b040, 0x05fe07fc, 0x497b88ac,
0x6040b000, 0x50040000, 0x480388ad, 0x80040800,
0x8058b040, 0x05fe07fc, 0x497b8880, 0x41780000,
- 0x05e5fa2b, 0x59c408a4, 0x90040d0f, 0x9004058c,
- 0x05da0dc3, 0x4a038805, 0x04000000, 0x5c00b000,
+ 0x05ddf97f, 0x59c408a4, 0x90040d0f, 0x9004058c,
+ 0x05d20c46, 0x4a038805, 0x04000000, 0x5c00b000,
0x1c01f000, 0x4803c856, 0x4c580000, 0x4ce80000,
- 0x42000000, 0x0010b22c, 0x0529fe0f, 0x59c41008,
+ 0x42000000, 0x0010e3a5, 0x0535fe3e, 0x59c41008,
0x4c080000, 0x82081500, 0xffffff7f, 0x480b8808,
0x59c40004, 0x82000500, 0x00003e02, 0x05000003,
- 0x6051d000, 0x0509fa00, 0x59c40006, 0x82000500,
- 0xffffff0f, 0x48038806, 0x0501fa40, 0x64438805,
+ 0x6051d000, 0x0509fe5c, 0x59c40006, 0x82000500,
+ 0xffffff0f, 0x48038806, 0x0501fa42, 0x64438805,
0x4a038808, 0x00000204, 0x6194b000, 0x59c40005,
- 0x8c000508, 0x05020010, 0x61a1d007, 0x0509f9f2,
- 0x8058b040, 0x05fe07fa, 0x601c2000, 0x0501f931,
- 0x0501fa2b, 0x050df83e, 0x4803c856, 0x4a038808,
- 0x00000208, 0x64075014, 0x6006d800, 0x90000541,
- 0x0501f032, 0x60042000, 0x0501f926, 0x05ddfbce,
- 0x42000000, 0x0010b31b, 0x0529fde3, 0x05ddffd0,
- 0x497b8880, 0x59a8001f, 0x82000500, 0x0000ffff,
- 0x4c000000, 0x05e5f9ea, 0x5c000000, 0x48038880,
- 0x59c410a3, 0x84081518, 0x05e5fd96, 0x4a038808,
- 0x00000200, 0x64238805, 0x6194b000, 0x4a038805,
- 0x000000f0, 0x05e5fc96, 0x61c00801, 0x59c40005,
- 0x80040d00, 0x05000006, 0x61a1d007, 0x0509f9c6,
- 0x8058b040, 0x05fe07f6, 0x05fdf7d4, 0x59c410a3,
- 0x84081558, 0x05e5fd83, 0x60082000, 0x0501f901,
- 0x59c40006, 0x82000540, 0x000000f0, 0x48038806,
- 0x59a80012, 0x80000540, 0x05020002, 0x80000000,
- 0x48038893, 0x80000580, 0x4df00000, 0x05e5fca4,
- 0x5c03e000, 0x5c001000, 0x480b8808, 0x5c01d000,
- 0x5c00b000, 0x1c01f000, 0x4803c856, 0x4c580000,
- 0x4ce80000, 0x59c41008, 0x4c080000, 0x82081500,
- 0xffffff7f, 0x480b8808, 0x59c40004, 0x82000500,
- 0x00003e02, 0x05000003, 0x6051d000, 0x0509f99e,
- 0x05ddfb89, 0x42000000, 0x0010b31c, 0x0529fd9e,
- 0x05ddff8b, 0x60002000, 0x0501f8da, 0x4a038808,
- 0x00000202, 0x80000580, 0x48038880, 0x48038893,
- 0x05e5f9a3, 0x6010b007, 0x4a038805, 0x000000f0,
- 0x05e5fc57, 0x61c00801, 0x59c40005, 0x80040d00,
- 0x05000016, 0x82000500, 0x000000d0, 0x0502001f,
- 0x619dd000, 0x0509f984, 0x8058b040, 0x05fe07f3,
- 0x601c2000, 0x0501f8c3, 0x0509ffd1, 0x0501f9bc,
- 0x4a038808, 0x00000208, 0x64075014, 0x6006d800,
- 0x59c40006, 0x8400050a, 0x48038806, 0x64838805,
- 0x90000541, 0x0501f01b, 0x59c410a3, 0x84081518,
- 0x05e5fd34, 0x4a038808, 0x00000200, 0x6095d000,
- 0x0509f96d, 0x59c410a3, 0x84081558, 0x05e5fd2d,
- 0x60082000, 0x0501f8ab, 0x497b8880, 0x59a80012,
+ 0x8c000508, 0x05020013, 0x61a1d007, 0x0509fe4e,
+ 0x8058b040, 0x05fe07fa, 0x601c2000, 0x0501f933,
+ 0x0501fa2d, 0x0511fe98, 0x4803c856, 0x59c410a3,
+ 0x84081518, 0x05ddfcde, 0x4a038808, 0x00000208,
+ 0x64075042, 0x6006d800, 0x90000541, 0x0501f032,
+ 0x60042000, 0x0501f925, 0x05d5facd, 0x42000000,
+ 0x0010e499, 0x0535fe0f, 0x05d5fed7, 0x497b8880,
+ 0x59a8004d, 0x82000500, 0x0000ffff, 0x4c000000,
+ 0x05ddf93b, 0x5c000000, 0x48038880, 0x59c410a3,
+ 0x84081518, 0x05ddfcc6, 0x4a038808, 0x00000200,
+ 0x64238805, 0x6194b000, 0x4a038805, 0x000000f0,
+ 0x05ddfbcb, 0x61c00801, 0x59c40005, 0x80040d00,
+ 0x05000006, 0x61a1d007, 0x0509fe1f, 0x8058b040,
+ 0x05fe07f6, 0x05fdf7d1, 0x59c410a3, 0x84081558,
+ 0x05ddfcb3, 0x60082000, 0x0501f900, 0x59c40006,
+ 0x82000540, 0x000000f0, 0x48038806, 0x59a80040,
0x80000540, 0x05020002, 0x80000000, 0x48038893,
- 0x59a8001f, 0x82000500, 0x0000ffff, 0x4c000000,
- 0x05e5f96f, 0x5c000000, 0x48038880, 0x80000580,
- 0x4df00000, 0x05e5fc4a, 0x5c03e000, 0x5c001000,
- 0x480b8808, 0x5c01d000, 0x5c00b000, 0x1c01f000,
- 0x4803c856, 0x60042000, 0x0501f892, 0x59c40004,
- 0x82000500, 0x00003e02, 0x05000008, 0x0509ff9c,
- 0x0501f987, 0x4a038808, 0x00000208, 0x64075014,
- 0x6006d800, 0x0501f046, 0x05ddfb2f, 0x42000000,
- 0x0010b31d, 0x0529fd44, 0x05ddff31, 0x59c40006,
- 0x84000508, 0x48038806, 0x64438805, 0x850e1d4c,
- 0x61900800, 0x42001000, 0x00104a75, 0x0509f91c,
- 0x59c410a3, 0x84081518, 0x05e5fcf6, 0x4a038808,
- 0x00000200, 0x497b8880, 0x4a038805, 0x000000f0,
- 0x05e5fbf7, 0x61c00801, 0x59c40005, 0x80040d00,
- 0x0500000b, 0x82000500, 0x000000e0, 0x0502000d,
- 0x61a1d007, 0x0509f924, 0x0505ff8b, 0x59940004,
- 0x80000540, 0x05fe07f1, 0x0501f021, 0x59c410a3,
- 0x84081558, 0x05e5fcdf, 0x60082000, 0x0501f85d,
- 0x4c080000, 0x42001000, 0x00104a75, 0x0509f905,
- 0x5c001000, 0x497b8880, 0x59a80012, 0x80000540,
- 0x05020002, 0x80000000, 0x48038893, 0x59a8001f,
- 0x82000500, 0x0000ffff, 0x4c000000, 0x05e5f91c,
- 0x5c000000, 0x48038880, 0x850e1d0c, 0x59c40006,
- 0x84000548, 0x48038806, 0x05e5fbf5, 0x59c40008,
- 0x82000540, 0x00000280, 0x48038808, 0x1c01f000,
- 0x4803c856, 0x4d400000, 0x4d3c0000, 0x0509ff4c,
- 0x0529fe0d, 0x0502002c, 0x599c1017, 0x8d0c0500,
- 0x05020009, 0x8c08051a, 0x05000027, 0x850e1d42,
- 0x60128000, 0x60227800, 0x8d0c0520, 0x05020006,
- 0x0501f01d, 0x60128000, 0x417a7800, 0x8d0c0520,
- 0x05000019, 0x0529fe09, 0x42024800, 0x0010b391,
- 0x59240200, 0x8c000500, 0x05000006, 0x4c580000,
- 0x60040800, 0x60001002, 0x0509f966, 0x5c00b000,
- 0x91264c0b, 0x8058b040, 0x05fe07f6, 0x61fe41ff,
- 0x4d400000, 0x603a8000, 0x600c3000, 0x61fe89ff,
- 0x0525fdc9, 0x5c028000, 0x599c0817, 0x8c04050a,
- 0x05020005, 0x4943c857, 0x493fc857, 0x0201f800,
- 0x0010edf3, 0x497b8880, 0x6006d800, 0x05fdfd39,
- 0x5c027800, 0x5c028000, 0x1c01f000, 0x05ddfab2,
- 0x42000000, 0x0010b31e, 0x0529fcc7, 0x05ddfeb4,
- 0x60040000, 0x05e5f8d2, 0x64078880, 0x05e5f3b0,
- 0x42000800, 0x0010ae95, 0x48100802, 0x90101488,
- 0x05001008, 0x58040001, 0x4803c857, 0x4813c857,
- 0x58040003, 0x80000000, 0x48000803, 0x60082000,
- 0x58040001, 0x9000148b, 0x05001007, 0x4803c857,
- 0x4813c857, 0x58040003, 0x80000000, 0x48000803,
- 0x60000000, 0x48000800, 0x59c428a4, 0x90142d0f,
- 0x90142d8c, 0x0c000002, 0x0501f0fb, 0x00104daa,
- 0x00104dc4, 0x00104dde, 0x00104df8, 0x00104e12,
- 0x00104e28, 0x00104e37, 0x00104e4a, 0x00104e5d,
- 0x00104e70, 0x00104e72, 0x40100000, 0x0c01f001,
- 0x00104db4, 0x00104db6, 0x00104db8, 0x00104db9,
- 0x00104dbb, 0x00104dbd, 0x00104dc0, 0x00104dc2,
- 0x64080801, 0x1c01f000, 0x640c0801, 0x0501f0bc,
- 0x1c01f000, 0x641c0801, 0x1c01f000, 0x64100801,
- 0x0501f0ba, 0x64140801, 0x0501f8be, 0x0501f0ba,
- 0x64140801, 0x0501f0bb, 0x4813c857, 0x1c01f000,
- 0x40100000, 0x0c01f001, 0x00104dce, 0x00104dd0,
- 0x00104dd2, 0x00104dd3, 0x00104dd5, 0x00104dd7,
- 0x00104dda, 0x00104ddc, 0x64080801, 0x1c01f000,
- 0x640c0801, 0x1c01f000, 0x1c01f000, 0x641c0801,
- 0x1c01f000, 0x64100801, 0x0501f0a0, 0x64140801,
- 0x0501f8a4, 0x0501f0a0, 0x64140801, 0x1c01f000,
- 0x64140801, 0x0501f099, 0x40100000, 0x0c01f001,
- 0x00104de8, 0x00104de9, 0x00104deb, 0x00104ded,
- 0x00104def, 0x00104df1, 0x00104df4, 0x00104df6,
- 0x1c01f000, 0x640c0801, 0x1c01f000, 0x64000801,
+ 0x80000580, 0x4df00000, 0x05ddfbd5, 0x5c03e000,
+ 0x5c001000, 0x480b8808, 0x5c01d000, 0x5c00b000,
+ 0x1c01f000, 0x4803c856, 0x4c580000, 0x4ce80000,
+ 0x59c41008, 0x4c080000, 0x82081500, 0xffffff7f,
+ 0x480b8808, 0x59c40004, 0x82000500, 0x00003e02,
+ 0x05000003, 0x6051d000, 0x0509fdf7, 0x05d5fa88,
+ 0x42000000, 0x0010e49a, 0x0535fdca, 0x05d5fe92,
+ 0x60002000, 0x0501f8d9, 0x4a038808, 0x00000202,
+ 0x80000580, 0x48038880, 0x48038893, 0x05ddf8f4,
+ 0x6010b007, 0x4a038805, 0x000000f0, 0x05ddfb8c,
+ 0x61c00801, 0x59c40005, 0x80040d00, 0x05000016,
+ 0x82000500, 0x000000d0, 0x05020015, 0x619dd000,
+ 0x0509fddd, 0x8058b040, 0x05fe07f3, 0x601c2000,
+ 0x0501f8c2, 0x0511fe28, 0x0501f9bb, 0x4a038808,
+ 0x00000208, 0x64075042, 0x6006d800, 0x59c40006,
+ 0x8400050a, 0x48038806, 0x64838805, 0x90000541,
+ 0x0501f01b, 0x60082000, 0x0501f8b4, 0x497b8880,
+ 0x59a80040, 0x80000540, 0x05020002, 0x80000000,
+ 0x48038893, 0x59a8004d, 0x82000500, 0x0000ffff,
+ 0x4c000000, 0x05ddf8ca, 0x5c000000, 0x48038880,
+ 0x59c410a3, 0x84081518, 0x05ddfc55, 0x4a038808,
+ 0x00000200, 0x6095d000, 0x0509fdb7, 0x59c410a3,
+ 0x84081558, 0x05ddfc4e, 0x80000580, 0x4df00000,
+ 0x05ddfb7b, 0x5c03e000, 0x5c001000, 0x480b8808,
+ 0x5c01d000, 0x5c00b000, 0x1c01f000, 0x4803c856,
+ 0x60042000, 0x0501f891, 0x59c40004, 0x82000500,
+ 0x00003e02, 0x05000008, 0x0511fdf3, 0x0501f986,
+ 0x4a038808, 0x00000208, 0x64075042, 0x6006d800,
+ 0x0501f046, 0x05d5fa2e, 0x42000000, 0x0010e49b,
+ 0x0535fd70, 0x05d5fe38, 0x59c40006, 0x84000508,
+ 0x48038806, 0x64438805, 0x850e1d4c, 0x61900800,
+ 0x42001000, 0x00105ff7, 0x0509fd79, 0x59c410a3,
+ 0x84081518, 0x05ddfc26, 0x4a038808, 0x00000200,
+ 0x497b8880, 0x4a038805, 0x000000f0, 0x05ddfb2c,
+ 0x61c00801, 0x59c40005, 0x80040d00, 0x0500000b,
+ 0x82000500, 0x000000e0, 0x0502000d, 0x61a1d007,
+ 0x0509fd7d, 0x0509fbe2, 0x59940004, 0x80000540,
+ 0x05fe07f1, 0x0501f021, 0x59c410a3, 0x84081558,
+ 0x05ddfc0f, 0x60082000, 0x0501f85c, 0x4c080000,
+ 0x42001000, 0x00105ff7, 0x0509fd60, 0x5c001000,
+ 0x497b8880, 0x59a80040, 0x80000540, 0x05020002,
+ 0x80000000, 0x48038893, 0x59a8004d, 0x82000500,
+ 0x0000ffff, 0x4c000000, 0x05ddf86d, 0x5c000000,
+ 0x48038880, 0x850e1d0c, 0x59c40006, 0x84000548,
+ 0x48038806, 0x05ddfb26, 0x59c40008, 0x82000540,
+ 0x00000280, 0x48038808, 0x1c01f000, 0x4803c856,
+ 0x4d400000, 0x4d3c0000, 0x0511fda3, 0x0535fe39,
+ 0x0502002b, 0x599c1017, 0x8d0c0500, 0x05020009,
+ 0x8c08051a, 0x05000026, 0x850e1d42, 0x60128000,
+ 0x60227800, 0x8d0c0520, 0x05020006, 0x0501f01d,
+ 0x60128000, 0x417a7800, 0x8d0c0520, 0x05000019,
+ 0x0535fe30, 0x42024800, 0x0010e512, 0x59240200,
+ 0x8c000500, 0x05000006, 0x4c580000, 0x60040800,
+ 0x60001002, 0x050dfc77, 0x5c00b000, 0x91264c0d,
+ 0x8058b040, 0x05fe07f6, 0x61fe41ff, 0x4d400000,
+ 0x603a8000, 0x600c3000, 0x61fe89ff, 0x0531fccf,
+ 0x5c028000, 0x599c0817, 0x8c04050a, 0x05020004,
+ 0x4943c857, 0x493fc857, 0x05ddfff4, 0x497b8880,
+ 0x6006d800, 0x05fdfd50, 0x5c027800, 0x5c028000,
+ 0x1c01f000, 0x05d5f9b2, 0x42000000, 0x0010e49c,
+ 0x0535fcf4, 0x05d5fdbc, 0x60040000, 0x05ddf824,
+ 0x64078880, 0x05ddf2e2, 0x42000800, 0x0010dce7,
+ 0x48100802, 0x90101488, 0x05001008, 0x58040001,
+ 0x4803c857, 0x4813c857, 0x58040003, 0x80000000,
+ 0x48000803, 0x60082000, 0x58040001, 0x9000148b,
+ 0x05001007, 0x4803c857, 0x4813c857, 0x58040003,
+ 0x80000000, 0x48000803, 0x60000000, 0x48000800,
+ 0x59c428a4, 0x90142d0f, 0x90142d8c, 0x0c000002,
+ 0x0501f0fb, 0x00106314, 0x0010632e, 0x00106348,
+ 0x00106362, 0x0010637c, 0x00106392, 0x001063a1,
+ 0x001063b4, 0x001063c7, 0x001063da, 0x001063dc,
+ 0x40100000, 0x0c01f001, 0x0010631e, 0x00106320,
+ 0x00106322, 0x00106323, 0x00106325, 0x00106327,
+ 0x0010632a, 0x0010632c, 0x64080801, 0x1c01f000,
+ 0x640c0801, 0x0501f0bc, 0x1c01f000, 0x641c0801,
+ 0x1c01f000, 0x64100801, 0x0501f0ba, 0x64140801,
+ 0x0501f8be, 0x0501f0ba, 0x64140801, 0x0501f0bb,
+ 0x4813c857, 0x1c01f000, 0x40100000, 0x0c01f001,
+ 0x00106338, 0x0010633a, 0x0010633c, 0x0010633d,
+ 0x0010633f, 0x00106341, 0x00106344, 0x00106346,
+ 0x64080801, 0x1c01f000, 0x640c0801, 0x1c01f000,
0x1c01f000, 0x641c0801, 0x1c01f000, 0x64100801,
- 0x0501f086, 0x64140801, 0x0501f88a, 0x0501f086,
- 0x64140801, 0x1c01f000, 0x64140801, 0x0501f07f,
- 0x40100000, 0x0c01f001, 0x00104e02, 0x00104e04,
- 0x00104e05, 0x00104e07, 0x00104e09, 0x00104e0b,
- 0x00104e0e, 0x00104e10, 0x64080801, 0x1c01f000,
+ 0x0501f0a0, 0x64140801, 0x0501f8a4, 0x0501f0a0,
+ 0x64140801, 0x1c01f000, 0x64140801, 0x0501f099,
+ 0x40100000, 0x0c01f001, 0x00106352, 0x00106353,
+ 0x00106355, 0x00106357, 0x00106359, 0x0010635b,
+ 0x0010635e, 0x00106360, 0x1c01f000, 0x640c0801,
0x1c01f000, 0x64000801, 0x1c01f000, 0x641c0801,
- 0x1c01f000, 0x64100801, 0x0501f06c, 0x64140801,
- 0x0501f870, 0x0501f06c, 0x64140801, 0x1c01f000,
- 0x64140801, 0x0501f065, 0x40100000, 0x0c01f001,
- 0x00104e1c, 0x00104e1e, 0x00104e1e, 0x00104e1f,
- 0x00104e1e, 0x00104e21, 0x00104e24, 0x00104e26,
- 0x64080801, 0x1c01f000, 0x1c01f000, 0x641c0801,
- 0x1c01f000, 0x64140801, 0x0501f85a, 0x0501f056,
- 0x64140801, 0x1c01f000, 0x64140801, 0x0501f04f,
- 0x40100000, 0x0c01f001, 0x00104e36, 0x00104e36,
- 0x00104e36, 0x00104e32, 0x00104e34, 0x00104e36,
- 0x00104e36, 0x00104e36, 0x641c0801, 0x1c01f000,
- 0x64100801, 0x1c01f000, 0x1c01f000, 0x40100000,
- 0x0c01f001, 0x00104e41, 0x00104e43, 0x00104e43,
- 0x00104e44, 0x00104e46, 0x00104e48, 0x00104e48,
- 0x00104e48, 0x64080801, 0x1c01f000, 0x1c01f000,
- 0x641c0801, 0x1c01f000, 0x64100801, 0x0501f02f,
- 0x64200801, 0x1c01f000, 0x40100000, 0x0c01f001,
- 0x00104e54, 0x00104e56, 0x00104e58, 0x00104e58,
- 0x00104e59, 0x00104e5b, 0x00104e5b, 0x00104e5b,
- 0x64080801, 0x1c01f000, 0x640c0801, 0x1c01f000,
- 0x1c01f000, 0x64100801, 0x0501f01c, 0x64200801,
- 0x1c01f000, 0x40100000, 0x0c01f001, 0x00104e67,
- 0x00104e67, 0x00104e69, 0x00104e6a, 0x00104e6c,
- 0x00104e69, 0x00104e6e, 0x00104e69, 0x64140801,
- 0x0501f00b, 0x1c01f000, 0x641c0801, 0x1c01f000,
- 0x64100801, 0x1c01f000, 0x64200801, 0x1c01f000,
- 0x64240801, 0x1c01f000, 0x1c01f000, 0x42000000,
- 0x0010b216, 0x0529f3d0, 0x42000000, 0x0010b213,
- 0x0529f3cd, 0x42000000, 0x0010b215, 0x0529f3ca,
- 0x42000000, 0x0010b214, 0x0529f3c7, 0x42000800,
- 0x0010ae95, 0x58040001, 0x48000800, 0x64140801,
- 0x64200802, 0x1c01f000, 0x42000800, 0x0010ae95,
- 0x58040001, 0x48000800, 0x64040801, 0x64280802,
- 0x1c01f000, 0x42000800, 0x0010ae95, 0x58040001,
- 0x48000800, 0x64180801, 0x64240802, 0x1c01f000,
- 0x42000800, 0x0010ae95, 0x64280801, 0x64280800,
- 0x1c01f000, 0x496fc857, 0x4813c857, 0x40100000,
- 0x0c01f001, 0x00104eb3, 0x00104eb3, 0x00104eb3,
- 0x00104eb3, 0x00104ea5, 0x00104ead, 0x00104eb1,
- 0x00104eb3, 0x59a8021b, 0x8c000506, 0x05000003,
- 0x8c000502, 0x0500000a, 0x0501f80a, 0x05fe07cb,
- 0x0501f007, 0x0501f807, 0x05000005, 0x05fdffca,
- 0x05fdf7cc, 0x0501f803, 0x05fe07ca, 0x1c01f000,
- 0x496fc857, 0x416c0000, 0x90000c88, 0x05da1b38,
- 0x0c01f001, 0x00104ec1, 0x00104ec3, 0x00104ec3,
- 0x00104ec3, 0x00104ec1, 0x00104ec1, 0x00104ec1,
- 0x00104ec3, 0x80000580, 0x1c01f000, 0x90000541,
- 0x1c01f000, 0x6002e000, 0x497b3004, 0x4a03b004,
- 0x60000001, 0x59d80005, 0x4a03b004, 0x90000001,
- 0x4a03a804, 0x60000001, 0x59d40005, 0x4a03a804,
- 0x90000001, 0x0501fdc9, 0x0501f5b5, 0x6413c825,
- 0x6413c827, 0x599c0409, 0x80000d40, 0x0500001f,
- 0x599c0407, 0x80000540, 0x05000007, 0x800000cc,
- 0x599c100b, 0x80080400, 0x4803b000, 0x497bb002,
- 0x59d80001, 0x599c000b, 0x4803b000, 0x599c000c,
- 0x4803b001, 0x599c0407, 0x80000540, 0x05020002,
- 0x497bb002, 0x599c0c09, 0x82040540, 0x00400000,
- 0x4803b003, 0x6417b009, 0x4a03b004, 0x10000001,
- 0x59e00803, 0x82040d00, 0xfffffeff, 0x82040d40,
- 0x00008000, 0x4807c003, 0x599c040a, 0x80000540,
- 0x0500001f, 0x599c0408, 0x80000540, 0x05000007,
- 0x800000cc, 0x599c100f, 0x80080400, 0x4803a800,
- 0x497ba802, 0x59d40001, 0x599c000f, 0x4803a800,
- 0x599c0010, 0x4803a801, 0x599c0408, 0x80000540,
- 0x05020002, 0x497ba802, 0x599c0c0a, 0x82040540,
- 0x00400000, 0x4803a803, 0x6417a809, 0x4a03a804,
- 0x10000001, 0x59e00803, 0x82040d00, 0xfffffbff,
- 0x82040d40, 0x00008000, 0x4807c003, 0x800409c0,
- 0x05000004, 0x6006e000, 0x0004b8ed, 0x0004f100,
- 0x1c01f000, 0x05d9fad2, 0x1c01f000, 0x0501f850,
- 0x5c03e000, 0x0001f652, 0x0001ffb1, 0x05fdf7fd,
- 0x00104f6f, 0x00104f6f, 0x00104f6f, 0x00104f6f,
- 0x00104f7b, 0x00104f6f, 0x00104f6f, 0x00104f6f,
- 0x00104f6f, 0x00104f6f, 0x000207a8, 0x00104f6f,
- 0x00104f6f, 0x00104f7b, 0x00104f7b, 0x00104f6f,
- 0x00104f6f, 0x00104f6f, 0x00104f6f, 0x00104f6f,
- 0x00104f6f, 0x00104f6f, 0x00104f6f, 0x00104f6f,
- 0x00104f6f, 0x00104f6f, 0x00104f6f, 0x00104f6f,
- 0x00104f6f, 0x00104f6f, 0x00104f6f, 0x00104f6f,
- 0x00104f6f, 0x00104f6f, 0x00104f6f, 0x00104f6f,
- 0x00104f6f, 0x00104f6f, 0x00104f6f, 0x00104f6f,
- 0x00104f6f, 0x00104f6f, 0x00104f6f, 0x00104f6f,
- 0x00104f6f, 0x00104f6f, 0x00104f6f, 0x00104f6f,
- 0x00104f6f, 0x00104f6f, 0x00104f6f, 0x00104f6f,
- 0x00104f6f, 0x00104f6f, 0x00104f6f, 0x00104f6f,
- 0x00104f6f, 0x00104f6f, 0x00104f6f, 0x00104f6f,
- 0x00104f6f, 0x00104f6f, 0x00104f6f, 0x00104f6f,
- 0x00104f6f, 0x00104f6f, 0x00104f6f, 0x00104f6f,
- 0x00104f6f, 0x00104f6f, 0x00104f6f, 0x00104f6f,
- 0x00104f6f, 0x00104f6f, 0x000207a8, 0x492fc857,
- 0x42000000, 0x0010b2d1, 0x0529fad3, 0x60000008,
- 0x0501f013, 0x492fc857, 0x42000000, 0x0010b2d0,
- 0x0529facd, 0x60000020, 0x0501f00d, 0x492fc857,
- 0x42000000, 0x0010b2cf, 0x0529fac7, 0x60000040,
- 0x0501f007, 0x492fc857, 0x42000000, 0x0010b2d2,
- 0x0529fac1, 0x60000010, 0x0501f001, 0x4803c857,
- 0x592c0c05, 0x82040d00, 0xffff80ff, 0x80040540,
- 0x59980803, 0x800409c0, 0x05000002, 0x8400051e,
- 0x48025c05, 0x0001ff6c, 0x0001fb5b, 0x91700583,
- 0x6006e000, 0x05000002, 0x1c01f000, 0x599a5801,
- 0x812e59c0, 0x05fe07e2, 0x05d9fa55, 0x60081000,
- 0x60000801, 0x60401800, 0x0501f004, 0x600c1000,
- 0x41780800, 0x60181800, 0x492fc857, 0x480bc857,
- 0x592c0205, 0x82000500, 0x000000ff, 0xb00005aa,
- 0x05000004, 0x480e5a07, 0x0001fb5b, 0x0501f00a,
- 0x4d400000, 0x4c300000, 0x497a5c09, 0x497a5c0a,
- 0x400a8000, 0x05fdf939, 0x0001fb5b, 0x5c006000,
- 0x5c028000, 0x6006e000, 0x4a006002, 0x00000100,
- 0x58325809, 0x49786009, 0x05d9fdd2, 0x5c025800,
- 0x1c01f000, 0x492fc857, 0x80140110, 0x05fc07b6,
- 0x80000040, 0x05000026, 0x4a033006, 0x00104fe7,
- 0x0001f65b, 0x492fc857, 0x0529fb8f, 0x00020799,
- 0x492fc856, 0x83440400, 0x0010a600, 0x50000000,
- 0x80026d40, 0x0500000b, 0x592e4411, 0x81224110,
- 0x59340013, 0x80000130, 0x81200580, 0x05020005,
- 0x4937c857, 0x59340200, 0x8c00050e, 0x00020799,
- 0x60a28000, 0x41780800, 0x417a6000, 0x05fdf90f,
- 0x0519fe7b, 0x0001f35b, 0x82000500, 0x0f000000,
- 0x8000012a, 0x592c0c0b, 0x82040d00, 0x0000ff87,
- 0x80040540, 0x48025c0b, 0x0001f7a5, 0x492fc857,
- 0x592c0409, 0x80000540, 0x05fe0797, 0x8d0c050e,
- 0x05020008, 0x592c0208, 0x80000540, 0x05fc0792,
- 0x497a5a07, 0x05f9f808, 0x05020003, 0x1c01f000,
- 0x60a00000, 0x48025a07, 0x0001f35b, 0x592e8a07,
- 0x592c0407, 0x4947c857, 0x4803c857, 0x82000500,
- 0x000000ff, 0x6004b800, 0x90000d81, 0x0500000e,
- 0x417a8800, 0x61c0b80f, 0x90000d82, 0x0500000a,
- 0x80000540, 0x0002035b, 0x592e8a07, 0x0001fae7,
- 0x0002035b, 0x592e9009, 0x592e980a, 0x05f9fb92,
- 0x0001f35b, 0x850e1d00, 0x0001fae7, 0x05f80c76,
- 0x81468800, 0x805cb840, 0x05fe07fc, 0x0001f35b,
- 0x592c0a09, 0x4807c857, 0x592e4411, 0x81224110,
- 0x9004058e, 0x05000070, 0x900405aa, 0x05000022,
- 0x9004058f, 0x05000487, 0x900405ae, 0x05000485,
- 0x4c040000, 0x0501fbe8, 0x5c000800, 0x05020485,
- 0xb0040586, 0x05000083, 0xb0040585, 0x0500002e,
- 0xb0040589, 0x0500047b, 0x900405a9, 0x0502047d,
- 0x592e8a07, 0x42026800, 0x0010ce8f, 0x83440580,
- 0x0000ffff, 0x05000006, 0x05f9fd9e, 0x05020471,
- 0x59340200, 0x84000518, 0x48026a00, 0x592e600a,
- 0x4933c857, 0x83300580, 0xffffffff, 0x05020072,
- 0x0501f468, 0x83200580, 0x000000ff, 0x05000008,
- 0x83200400, 0x0010a3b3, 0x50024800, 0x59240a00,
- 0x84040d16, 0x48064a00, 0x0501f45e, 0x42024800,
- 0x0010b391, 0x0529fb19, 0x59240200, 0x8c000500,
- 0x05000004, 0x59240200, 0x84000516, 0x48024a00,
- 0x91264c0b, 0x8058b040, 0x05fe07f8, 0x850e1d04,
- 0x0501f450, 0x592c1408, 0x480bc857, 0x051df93c,
- 0x411e6000, 0x05020003, 0x4803c856, 0x0501f44d,
+ 0x1c01f000, 0x64100801, 0x0501f086, 0x64140801,
+ 0x0501f88a, 0x0501f086, 0x64140801, 0x1c01f000,
+ 0x64140801, 0x0501f07f, 0x40100000, 0x0c01f001,
+ 0x0010636c, 0x0010636e, 0x0010636f, 0x00106371,
+ 0x00106373, 0x00106375, 0x00106378, 0x0010637a,
+ 0x64080801, 0x1c01f000, 0x1c01f000, 0x64000801,
+ 0x1c01f000, 0x641c0801, 0x1c01f000, 0x64100801,
+ 0x0501f06c, 0x64140801, 0x0501f870, 0x0501f06c,
+ 0x64140801, 0x1c01f000, 0x64140801, 0x0501f065,
+ 0x40100000, 0x0c01f001, 0x00106386, 0x00106388,
+ 0x00106388, 0x00106389, 0x00106388, 0x0010638b,
+ 0x0010638e, 0x00106390, 0x64080801, 0x1c01f000,
+ 0x1c01f000, 0x641c0801, 0x1c01f000, 0x64140801,
+ 0x0501f85a, 0x0501f056, 0x64140801, 0x1c01f000,
+ 0x64140801, 0x0501f04f, 0x40100000, 0x0c01f001,
+ 0x001063a0, 0x001063a0, 0x001063a0, 0x0010639c,
+ 0x0010639e, 0x001063a0, 0x001063a0, 0x001063a0,
+ 0x641c0801, 0x1c01f000, 0x64100801, 0x1c01f000,
+ 0x1c01f000, 0x40100000, 0x0c01f001, 0x001063ab,
+ 0x001063ad, 0x001063ad, 0x001063ae, 0x001063b0,
+ 0x001063b2, 0x001063b2, 0x001063b2, 0x64080801,
+ 0x1c01f000, 0x1c01f000, 0x641c0801, 0x1c01f000,
+ 0x64100801, 0x0501f02f, 0x64200801, 0x1c01f000,
+ 0x40100000, 0x0c01f001, 0x001063be, 0x001063c0,
+ 0x001063c2, 0x001063c2, 0x001063c3, 0x001063c5,
+ 0x001063c5, 0x001063c5, 0x64080801, 0x1c01f000,
+ 0x640c0801, 0x1c01f000, 0x1c01f000, 0x64100801,
+ 0x0501f01c, 0x64200801, 0x1c01f000, 0x40100000,
+ 0x0c01f001, 0x001063d1, 0x001063d1, 0x001063d3,
+ 0x001063d4, 0x001063d6, 0x001063d3, 0x001063d8,
+ 0x001063d3, 0x64140801, 0x0501f00b, 0x1c01f000,
+ 0x641c0801, 0x1c01f000, 0x64100801, 0x1c01f000,
+ 0x64200801, 0x1c01f000, 0x64240801, 0x1c01f000,
+ 0x1c01f000, 0x42000000, 0x0010e38f, 0x0535f3fd,
+ 0x42000000, 0x0010e38c, 0x0535f3fa, 0x42000000,
+ 0x0010e38e, 0x0535f3f7, 0x42000000, 0x0010e38d,
+ 0x0535f3f4, 0x42000800, 0x0010dce7, 0x58040001,
+ 0x48000800, 0x64140801, 0x64200802, 0x1c01f000,
+ 0x42000800, 0x0010dce7, 0x58040001, 0x48000800,
+ 0x64040801, 0x64280802, 0x1c01f000, 0x42000800,
+ 0x0010dce7, 0x58040001, 0x48000800, 0x64180801,
+ 0x64240802, 0x1c01f000, 0x42000800, 0x0010dce7,
+ 0x64280801, 0x64280800, 0x1c01f000, 0x496fc857,
+ 0x4813c857, 0x40100000, 0x0c01f001, 0x0010641d,
+ 0x0010641d, 0x0010641d, 0x0010641d, 0x0010640f,
+ 0x00106417, 0x0010641b, 0x0010641d, 0x59a80249,
+ 0x8c000506, 0x05000003, 0x8c000502, 0x0500000a,
+ 0x0501f80a, 0x05fe07cb, 0x0501f007, 0x0501f807,
+ 0x05000005, 0x05fdffca, 0x05fdf7cc, 0x0501f803,
+ 0x05fe07ca, 0x1c01f000, 0x496fc857, 0x416c0000,
+ 0x90000c88, 0x05d219b9, 0x0c01f001, 0x0010642b,
+ 0x0010642d, 0x0010642d, 0x0010642d, 0x0010642b,
+ 0x0010642b, 0x0010642b, 0x0010642d, 0x80000580,
+ 0x1c01f000, 0x90000541, 0x1c01f000, 0x59a80005,
+ 0x8c000506, 0x05020002, 0x1c01f000, 0x41781800,
+ 0x42000800, 0x0010dce7, 0x58040001, 0x40002000,
+ 0x0c01f001, 0x0010644d, 0x00106446, 0x00106445,
+ 0x00106444, 0x0010644e, 0x00106448, 0x00106447,
+ 0x00106452, 0x00106448, 0x00106445, 0x0010644d,
+ 0x800c1800, 0x800c1800, 0x800c1800, 0x800c1800,
+ 0x800c1800, 0x60dc1100, 0x05f1fb92, 0x481350a8,
+ 0x1c01f000, 0x1c01f000, 0x59a800a8, 0x90000584,
+ 0x05fe07f7, 0x05fdf7fc, 0x59a800a8, 0x90000587,
+ 0x05fe07f2, 0x05fdf7f8, 0x64075042, 0x4a035041,
+ 0x0000aaaa, 0x05fdf3d8, 0x6002e000, 0x850e1d56,
+ 0x497b3000, 0x4a03b004, 0x60000001, 0x59d80005,
+ 0x4a03b004, 0x90000001, 0x59d80005, 0x4a03a804,
+ 0x60000001, 0x59d40005, 0x4a03a804, 0x90000001,
+ 0x0501ff88, 0x0501f774, 0x58f25801, 0x4a03b004,
+ 0x10000000, 0x592c4200, 0x58201000, 0x592c220c,
+ 0x592cba0a, 0x0001f7ca, 0x6413c825, 0x6413c827,
+ 0x599c0409, 0x80000d40, 0x0500001f, 0x599c0407,
+ 0x80000540, 0x05000007, 0x800000cc, 0x599c100b,
+ 0x80080400, 0x4803b000, 0x497bb002, 0x59d80001,
+ 0x599c000b, 0x4803b000, 0x599c000c, 0x4803b001,
+ 0x599c0407, 0x80000540, 0x05020002, 0x497bb002,
+ 0x599c0c09, 0x82040540, 0x00400000, 0x4803b003,
+ 0x6423b009, 0x4a03b004, 0x10000001, 0x59e00803,
+ 0x82040d00, 0xfffffeff, 0x82040d40, 0x00008000,
+ 0x4807c003, 0x599c040a, 0x80000540, 0x0500001f,
+ 0x599c0408, 0x80000540, 0x05000007, 0x800000cc,
+ 0x599c100f, 0x80080400, 0x4803a800, 0x497ba802,
+ 0x59d40001, 0x599c000f, 0x4803a800, 0x599c0010,
+ 0x4803a801, 0x599c0408, 0x80000540, 0x05020002,
+ 0x497ba802, 0x599c0c0a, 0x82040540, 0x00400000,
+ 0x4803a803, 0x6423a809, 0x4a03a804, 0x10000001,
+ 0x59e00803, 0x82040d00, 0xfffffbff, 0x82040d40,
+ 0x00008000, 0x4807c003, 0x800409c0, 0x05000004,
+ 0x6006e000, 0x0004bb27, 0x0004f33b, 0x1c01f000,
+ 0x05d1f91e, 0x1c01f000, 0x0501f866, 0x5c03e000,
+ 0x0005f0d6, 0x592c1c08, 0x820c1500, 0x000000ff,
+ 0x800c1910, 0x820c0c00, 0x0010de60, 0x50040800,
+ 0x480a5c08, 0x800409c0, 0x000600ca, 0x492fc857,
+ 0x480fc857, 0x800c19c0, 0x05d0090c, 0x42000800,
+ 0x0010de60, 0x50040800, 0x48065802, 0x0501f866,
+ 0x0005f0d3, 0x59980000, 0x80000540, 0x000400bb,
+ 0x0505f00a, 0x00106524, 0x00106524, 0x00106524,
+ 0x00106524, 0x00106532, 0x00106524, 0x00106524,
+ 0x00106524, 0x00106524, 0x00106524, 0x00020a36,
+ 0x00106524, 0x00106524, 0x00106532, 0x00106532,
+ 0x00106524, 0x00106524, 0x00106524, 0x00106524,
+ 0x00106524, 0x00106524, 0x00106524, 0x00106524,
+ 0x00106524, 0x00106524, 0x00106524, 0x00106524,
+ 0x00106524, 0x00106524, 0x00106524, 0x00106524,
+ 0x00106524, 0x00106524, 0x00106524, 0x00106524,
+ 0x00106524, 0x00106524, 0x00106524, 0x00106524,
+ 0x00106524, 0x00106524, 0x00106524, 0x00106524,
+ 0x00106524, 0x00106524, 0x00106524, 0x00106524,
+ 0x00106524, 0x00106524, 0x00106524, 0x00106524,
+ 0x00106524, 0x00106524, 0x00106524, 0x00106524,
+ 0x00106524, 0x00106524, 0x00106524, 0x00106524,
+ 0x00106524, 0x00106524, 0x00106524, 0x00106524,
+ 0x00106524, 0x00106524, 0x00106524, 0x00106524,
+ 0x00106524, 0x00106524, 0x00106524, 0x00106524,
+ 0x00106524, 0x00106524, 0x00106524, 0x00020a36,
+ 0x492fc857, 0x497a5805, 0x42000000, 0x0010e44f,
+ 0x0535fab4, 0x60000008, 0x0501f015, 0x492fc857,
+ 0x497a5805, 0x42000000, 0x0010e44e, 0x0535faad,
+ 0x60000020, 0x0501f00e, 0x492fc857, 0x497a5805,
+ 0x42000000, 0x0010e44d, 0x0535faa6, 0x60000040,
+ 0x0501f007, 0x492fc857, 0x42000000, 0x0010e450,
+ 0x0535faa0, 0x60000010, 0x0501f001, 0x4803c857,
+ 0x592c0c08, 0x82040d00, 0xffff80ff, 0x80040540,
+ 0x59980801, 0x800409c0, 0x05000002, 0x8400051e,
+ 0x48025c08, 0x0005f9f3, 0x0501febe, 0x0001fb82,
+ 0x91700583, 0x6006e000, 0x05000002, 0x1c01f000,
+ 0x58f25802, 0x812e59c0, 0x05fe07e0, 0x05d1f887,
+ 0x60081000, 0x60000801, 0x60401800, 0x0501f004,
+ 0x600c1000, 0x41780800, 0x60181800, 0x492fc857,
+ 0x480bc857, 0x592c0208, 0x82000500, 0x000000ff,
+ 0xb00005aa, 0x05000004, 0x480e5a0a, 0x0001fb82,
+ 0x0501f00a, 0x4d400000, 0x4c300000, 0x497a5c0c,
+ 0x497a5c0d, 0x400a8000, 0x05fdf8c1, 0x0001fb82,
+ 0x5c006000, 0x5c028000, 0x6006e000, 0x4a006002,
+ 0x00000100, 0x5832580a, 0x4978600a, 0x05d1fc1f,
+ 0x5c025800, 0x1c01f000, 0x492fc857, 0x80140110,
+ 0x05fc07b3, 0x80000040, 0x05000026, 0x4a01e007,
+ 0x001065a0, 0x0005f0df, 0x492fc857, 0x0535fb6d,
+ 0x00060220, 0x492fc856, 0x83440400, 0x0010d400,
+ 0x50000000, 0x80026d40, 0x0500000b, 0x592e4414,
+ 0x81224110, 0x59340013, 0x80000130, 0x81200580,
+ 0x05020005, 0x4937c857, 0x59340200, 0x8c00050e,
+ 0x00060220, 0x60a28000, 0x41780800, 0x417a6000,
+ 0x05fdf897, 0x0525f88f, 0x0001f382, 0x82000500,
+ 0x0f000000, 0x8000012a, 0x592c0c0e, 0x82040d00,
+ 0x0000ff87, 0x80040540, 0x48025c0e, 0x0005f233,
+ 0x492fc857, 0x592c040c, 0x80000540, 0x05fe0796,
+ 0x8d0c050e, 0x05020008, 0x592c020b, 0x80000540,
+ 0x05fc0791, 0x497a5a0a, 0x05f5fd45, 0x05020003,
+ 0x1c01f000, 0x60a00000, 0x48025a0a, 0x0001f382,
+ 0x592e8a0a, 0x592c040a, 0x4947c857, 0x4803c857,
+ 0x82000500, 0x000000ff, 0x6004b800, 0x90000d81,
+ 0x0500000e, 0x417a8800, 0x61c0b80f, 0x90000d82,
+ 0x0500000a, 0x80000540, 0x00020382, 0x592e8a0a,
+ 0x0001fb00, 0x00020382, 0x592e900c, 0x592e980d,
+ 0x05f9f914, 0x0001f382, 0x850e1d00, 0x0001fb00,
+ 0x05f809f9, 0x81468800, 0x805cb840, 0x05fe07fc,
+ 0x0001f382, 0x592c0a0c, 0x4807c857, 0x592e4414,
+ 0x81224110, 0x9004058e, 0x0500006e, 0x900405aa,
+ 0x05000022, 0x9004058f, 0x05000624, 0x900405ae,
+ 0x05000622, 0xb0040589, 0x05000620, 0x4c040000,
+ 0x0501fd7d, 0x5c000800, 0x05020620, 0xb0040586,
+ 0x0500007f, 0xb0040585, 0x0500002c, 0x900405a9,
+ 0x0502061a, 0x592e8a0a, 0x42026800, 0x00110210,
+ 0x83440580, 0x0000ffff, 0x05000006, 0x05f9fc8e,
+ 0x0502060e, 0x59340200, 0x84000518, 0x48026a00,
+ 0x592e600d, 0x4933c857, 0x83300580, 0xffffffff,
+ 0x05020070, 0x0501f605, 0x83200580, 0x000000ff,
+ 0x05000008, 0x83200400, 0x0010d17b, 0x50024800,
+ 0x59240a00, 0x84040d16, 0x48064a00, 0x0501f5fb,
+ 0x42024800, 0x0010e512, 0x0535faf2, 0x59240200,
+ 0x8c000500, 0x05000004, 0x59240200, 0x84000516,
+ 0x48024a00, 0x91264c0d, 0x8058b040, 0x05fe07f8,
+ 0x850e1d04, 0x0501f5ed, 0x592c140b, 0x480bc857,
+ 0x0525fb49, 0x411e6000, 0x05020003, 0x4803c856,
+ 0x0501f5ea, 0x59300c07, 0x90040584, 0x05000003,
+ 0x4803c856, 0x0501f5e5, 0x592c020b, 0x8c000506,
+ 0x05000009, 0x050dfef6, 0x4df00000, 0x050dfdf7,
+ 0x050dfbc0, 0x5c03e000, 0x050c0ee2, 0x0515fdad,
+ 0x0501f5d6, 0x592e380d, 0x591c1416, 0x8c080516,
+ 0x050005d6, 0x59300009, 0x800001c0, 0x05ce0faf,
+ 0x84081554, 0x480a3c16, 0x64ea6403, 0x592c040f,
+ 0x80000540, 0x05000006, 0x64ee6403, 0x592c0415,
+ 0x4802641c, 0x592c0215, 0x4802621c, 0x64066203,
+ 0x42000800, 0x80000040, 0x0501fdcb, 0x05000003,
+ 0x492e6009, 0x0005f6ab, 0x0005feab, 0x0501f5bb,
+ 0x83200d80, 0x000000ff, 0x05000010, 0x42000000,
+ 0x0010e511, 0x50000000, 0x81200480, 0x050211c1,
+ 0x83200400, 0x0010d17b, 0x50024800, 0x59240200,
+ 0x8c000500, 0x050001bb, 0x59240206, 0x84000510,
+ 0x48024a06, 0x0501f5a9, 0x42024800, 0x0010e512,
+ 0x0535faa0, 0x59240200, 0x8c000500, 0x05000004,
+ 0x59240206, 0x84000510, 0x48024a06, 0x91264c0d,
+ 0x8058b040, 0x05fe07f8, 0x0501f59c, 0x592c120b,
+ 0x8c080500, 0x05020599, 0x592e8a0a, 0x592e600d,
+ 0x0525fafe, 0x05020003, 0x4803c856, 0x0501f597,
0x59300c07, 0x90040584, 0x05000003, 0x4803c856,
- 0x0501f448, 0x592c0208, 0x8c000506, 0x0500000b,
- 0x0509f8db, 0x4df00000, 0x0505ffd8, 0x0201f800,
- 0x0010f0c0, 0x80c40040, 0x5c03e000, 0x050808c0,
- 0x050dfe5b, 0x0501f437, 0x592e380a, 0x591c1416,
- 0x8c080516, 0x05000437, 0x59300009, 0x800001c0,
- 0x05da097b, 0x84081554, 0x480a3c16, 0x64ea6403,
- 0x592c040c, 0x80000540, 0x05000006, 0x64ee6403,
- 0x592c020d, 0x4802641c, 0x592c040d, 0x4802621c,
- 0x64066203, 0x42000800, 0x80000040, 0x0501fc2c,
- 0x05000003, 0x492e6009, 0x0005f32e, 0x0005fb2e,
- 0x0501f41c, 0x83200d80, 0x000000ff, 0x05000010,
- 0x42000000, 0x0010b390, 0x50000000, 0x81200480,
- 0x000610e7, 0x83200400, 0x0010a3b3, 0x50024800,
- 0x59240200, 0x8c000500, 0x000400e7, 0x59240206,
- 0x84000510, 0x48024a06, 0x0501f40a, 0x42024800,
- 0x0010b391, 0x0529fac5, 0x59240200, 0x8c000500,
- 0x05000004, 0x59240206, 0x84000510, 0x48024a06,
- 0x91264c0b, 0x8058b040, 0x05fe07f8, 0x0501f3fd,
- 0x592c1208, 0x8c080500, 0x050203fa, 0x592e8a07,
- 0x592e600a, 0x051df8ef, 0x05020003, 0x4803c856,
- 0x0501f3f8, 0x59300c07, 0x90040584, 0x05000003,
- 0x4803c856, 0x0501f3f3, 0x59300a03, 0x90040587,
- 0x05000003, 0x4803c856, 0x0501f3ee, 0x59300c03,
- 0x90040581, 0x05000016, 0x90040582, 0x0500000e,
- 0x90040588, 0x05000010, 0x9004058a, 0x05000005,
- 0x9004058c, 0x0502001d, 0x60240800, 0x0501f01a,
- 0x5932680a, 0x05f9fcc8, 0x05020018, 0x60140800,
- 0x0501f015, 0x417a7800, 0x0201f800, 0x0010ee7a,
- 0x64066407, 0x600c0800, 0x0501f00f, 0x83340580,
- 0x0010ce8f, 0x05020007, 0x5930000a, 0x82000580,
- 0x0010ce8f, 0x050203cf, 0x64066407, 0x0501f007,
- 0x417a7800, 0x0201f800, 0x0010ee7a, 0x64066407,
- 0x602c0800, 0x05f9f8dd, 0x64066203, 0x0501fbcc,
- 0x05000003, 0x492e6009, 0x0505f6fe, 0x0505fefd,
- 0x0501f3bc, 0x59300416, 0x8c000518, 0x0526052b,
- 0x0501f094, 0x40000800, 0x58040000, 0x80000540,
- 0x05fe07fd, 0x492c0800, 0x1c01f000, 0x492fc857,
- 0x59300c07, 0x90040586, 0x05020087, 0x59340400,
- 0x82000580, 0x00000606, 0x05020004, 0x59340200,
- 0x8c00051a, 0x000007fb, 0x59340200, 0x8c00050e,
- 0x0500007d, 0x59300203, 0x60067800, 0x90000587,
- 0x000207fb, 0x640a6203, 0x0001f7fb, 0x600a8000,
- 0x64526006, 0x4d2c0000, 0x0525f896, 0x5c025800,
- 0x59300c07, 0x4807c857, 0x90040587, 0x0502005c,
- 0x492fc857, 0x64065a07, 0x0001f35b, 0x83300580,
- 0xffffffff, 0x05020056, 0x592c240b, 0x492fc857,
- 0x4813c857, 0x8c10051c, 0x05020016, 0x8c10051a,
- 0x05000003, 0x8c10050a, 0x05000062, 0x59340a00,
- 0x8c04050e, 0x05000003, 0x8c10051e, 0x0500005d,
- 0x0005fc3d, 0x05000065, 0x592c240b, 0x59243a00,
- 0x592c020d, 0x48026202, 0x4936600a, 0x4926601d,
- 0x4932580a, 0x641a6407, 0x641e6203, 0x0001f7f6,
- 0x592c0a0d, 0x4c040000, 0x05f9ff33, 0x5c000800,
- 0x0502006a, 0x58080000, 0x49781000, 0x802041c0,
- 0x05000006, 0x48004000, 0x80000540, 0x05020007,
- 0x48226810, 0x0501f005, 0x4802680f, 0x80000540,
- 0x05020002, 0x497a6810, 0x4d2c0000, 0x400a5800,
- 0x640a5a07, 0x0001fb5b, 0x5c025800, 0x05fdf7c9,
- 0x8c10051c, 0x000207e7, 0x0501f01e, 0x05f9fc85,
- 0x000007dd, 0x42000000, 0x0010b390, 0x50000000,
+ 0x0501f592, 0x59300a03, 0x90040587, 0x05000003,
+ 0x4803c856, 0x0501f58d, 0x59300c03, 0x90040581,
+ 0x0500001b, 0x90040582, 0x0500000e, 0x90040588,
+ 0x05000010, 0x9004058a, 0x05000005, 0x9004058c,
+ 0x05020021, 0x60240800, 0x0501f01e, 0x5932680a,
+ 0x05f9fbba, 0x0502001c, 0x60140800, 0x0501f019,
+ 0x417a7800, 0x05ddfca7, 0x64066407, 0x0501f006,
+ 0x592c120b, 0x8c08050e, 0x05000003, 0x0535facb,
+ 0x05020018, 0x600c0800, 0x0501f00e, 0x83340580,
+ 0x00110210, 0x05020007, 0x5930000a, 0x82000580,
+ 0x00110210, 0x05020569, 0x64066407, 0x0501f006,
+ 0x417a7800, 0x05ddfc93, 0x64066407, 0x602c0800,
+ 0x05f5fe51, 0x64066203, 0x0501fd67, 0x05000003,
+ 0x492e6009, 0x050df1d0, 0x050df9cf, 0x0501f557,
+ 0x64266403, 0x592c0215, 0x4802621c, 0x592c0415,
+ 0x4802641c, 0x05fdf7f4, 0x59300416, 0x8c000518,
+ 0x053203ff, 0x0501f097, 0x40000800, 0x58040000,
+ 0x80000540, 0x05fe07fd, 0x492c0800, 0x1c01f000,
+ 0x492fc857, 0x59300c07, 0x90040586, 0x0502008a,
+ 0x59340400, 0x82000580, 0x00000606, 0x05020004,
+ 0x59340200, 0x8c00051a, 0x000402b8, 0x59340200,
+ 0x8c00050e, 0x05000080, 0x59300203, 0x60067800,
+ 0x90000587, 0x000602b8, 0x640a6203, 0x0005f2b8,
+ 0x600a8000, 0x64526006, 0x4d2c0000, 0x052dfe56,
+ 0x5c025800, 0x59300c07, 0x4807c857, 0x90040587,
+ 0x0502005f, 0x492fc857, 0x64065a0a, 0x0001f382,
+ 0x83300580, 0xffffffff, 0x05020059, 0x592c240e,
+ 0x492fc857, 0x4813c857, 0x8c10051c, 0x05020017,
+ 0x8c10051a, 0x05000003, 0x8c10050a, 0x05000065,
+ 0x59340a00, 0x8c04050e, 0x05000003, 0x8c10051e,
+ 0x05000060, 0x0005ffbf, 0x05000068, 0x592c240e,
+ 0x59243a00, 0x592c0210, 0x48026202, 0x4936600a,
+ 0x4926601d, 0x4932580d, 0x4a026007, 0x00068000,
+ 0x641e6203, 0x0005f2b3, 0x592c0a10, 0x4c040000,
+ 0x05f9fe24, 0x5c000800, 0x05020073, 0x58080000,
+ 0x49781000, 0x802041c0, 0x05000006, 0x48004000,
+ 0x80000540, 0x05020007, 0x48226810, 0x0501f005,
+ 0x4802680f, 0x80000540, 0x05020002, 0x497a6810,
+ 0x4d2c0000, 0x400a5800, 0x640a5a0a, 0x0001fb82,
+ 0x5c025800, 0x05fdf7c8, 0x8c10051c, 0x000602a4,
+ 0x0501f020, 0x4c100000, 0x05f9fb6b, 0x5c002000,
+ 0x0004027a, 0x42000000, 0x0010e511, 0x50000000,
0x81200480, 0x0502102c, 0x8c10051c, 0x05000015,
- 0x592c0207, 0x82000580, 0x0000ffff, 0x05020011,
- 0x592e600a, 0x83300580, 0xffffffff, 0x05fc07b5,
- 0x051dfd35, 0x0502000e, 0x592c220d, 0x59300202,
+ 0x592c020a, 0x82000580, 0x0000ffff, 0x05020011,
+ 0x592e600d, 0x83300580, 0xffffffff, 0x05fc07b2,
+ 0x0525ff87, 0x0502000e, 0x592c2210, 0x59300202,
0x80100580, 0x0502000a, 0x59300009, 0x800001c0,
- 0x05020004, 0x59300203, 0x90000587, 0x05fc07a0,
- 0x492fc857, 0x64a65a07, 0x0001f35b, 0x492fc857,
- 0x64225a07, 0x0001f35b, 0x4803c857, 0x8c000514,
- 0x05000007, 0x42000000, 0x0010b2c0, 0x0529f8d2,
+ 0x05020004, 0x59300203, 0x90000587, 0x05fc079d,
+ 0x492fc857, 0x64a65a0a, 0x0001f382, 0x492fc857,
+ 0x64225a0a, 0x0001f382, 0x4803c857, 0x8c000514,
+ 0x05000007, 0x42000000, 0x0010e439, 0x0535f8a5,
0x492fc857, 0x492e6009, 0x1c01f000, 0x492fc857,
- 0x65165a07, 0x0001f35b, 0x492fc857, 0x64aa5a07,
- 0x0001f35b, 0x492fc857, 0x64a25a07, 0x0001f35b,
- 0x492fc857, 0x641a5a07, 0x0001f35b, 0x492fc857,
- 0x643a5a07, 0x0001f35b, 0x90040587, 0x05fe07e4,
- 0x640a5a07, 0x0001f35b, 0x592c0407, 0x800000c2,
- 0x800008c4, 0x80040400, 0x48025804, 0x59340010,
- 0x492e6810, 0x492fc857, 0x80000d40, 0x05000003,
- 0x492c0800, 0x1c01f000, 0x59340203, 0x492e680f,
- 0x492fc857, 0x4803c857, 0x80000540, 0x05020002,
- 0x64066a03, 0x1c01f000, 0x59a8000d, 0x81640480,
- 0x05fe1770, 0x42026000, 0x00110514, 0x59300407,
- 0x90000586, 0x05020007, 0x5930000a, 0x81340580,
- 0x05020004, 0x59300202, 0x80040580, 0x05fc075c,
- 0x91326430, 0x41580000, 0x81300480, 0x05fc17f4,
- 0x05fdf760, 0x492fc857, 0x592e7c07, 0x833c0500,
- 0xfffffffe, 0x0502003f, 0x592c4008, 0x42026000,
- 0x00110514, 0x41581800, 0x400c0000, 0x81300480,
- 0x05021023, 0x59300203, 0x90000580, 0x05000007,
- 0x59300009, 0x80000d40, 0x05000004, 0x58040006,
- 0x80200580, 0x05000003, 0x91326430, 0x05fdf7f3,
- 0x58040205, 0x82000500, 0x000000ff, 0xb0000d93,
- 0x0500000d, 0xb0000d88, 0x0500000b, 0x90000d98,
- 0x05000009, 0x90000da9, 0x05000007, 0x90000d94,
- 0x05000005, 0xb00005a8, 0x05000003, 0x90000582,
- 0x05fe07ee, 0x4d2c0000, 0x0515ff74, 0x5c025800,
- 0x05000018, 0x64025a07, 0x0001f35b, 0x592e8a07,
- 0x83440480, 0x000007f0, 0x05021012, 0x83440400,
- 0x0010a600, 0x50000000, 0x80026d40, 0x0500000d,
- 0x4d2c0000, 0x05f9fa3c, 0x05000009, 0x60168000,
- 0x592c0a09, 0x417a6000, 0x05f9fefc, 0x0519fc6d,
- 0x0001fb5b, 0x5c025800, 0x05fdf7eb, 0x5c025800,
- 0x64c65a07, 0x0001f35b, 0x492fc857, 0x4d2c0000,
- 0x05d9fb84, 0x05000011, 0x492fc857, 0x412f4000,
- 0x05d9fb80, 0x0500000b, 0x492fc857, 0x412dd800,
- 0x05f1fca8, 0x05f1fcb0, 0x49a1d80a, 0x5c025800,
- 0x492dd809, 0x48ef4006, 0x05e5ffb4, 0x05e5f7cb,
- 0x41a25800, 0x05d9fb83, 0x5c025800, 0x4a025a07,
- 0x00004005, 0x640a5c07, 0x0001f35b, 0x4807c857,
- 0x485fc857, 0x6004b800, 0x5c000800, 0x4c5c0000,
- 0x0501f005, 0x4807c857, 0x485fc857, 0x5c000800,
- 0x4d780000, 0x4803c857, 0x492fc857, 0x8c00050e,
- 0x05d60fc9, 0x4203e000, 0x50000000, 0x600cb900,
- 0x05d5f7d3, 0x4803c856, 0x4c5c0000, 0x4c600000,
- 0x4c640000, 0x4d040000, 0x59a8008d, 0x90000506,
- 0x050200ca, 0x916c0580, 0x050000c8, 0x592c0208,
- 0x8200cd00, 0x000000ff, 0x592c0408, 0x8200c500,
- 0x000000ff, 0x050000c5, 0x42000000, 0x0010b390,
- 0x50000000, 0x4c000000, 0x0529f94b, 0x5c000000,
- 0x05000002, 0x80000000, 0x80600480, 0x050210bb,
- 0x912c7c09, 0x592c0407, 0x4803c857, 0x8c000500,
- 0x05000005, 0x0529f940, 0x050000b4, 0x417a4000,
- 0x0501f002, 0x60064000, 0x60060800, 0x4200b800,
- 0xffffffff, 0x83200580, 0x000000e1, 0x05020003,
- 0x4200b800, 0x3fffffff, 0x503c0000, 0x805cbd00,
- 0x05020003, 0x91224420, 0x0501f00f, 0x805cb902,
- 0x05021009, 0x83200400, 0x0010a3b3, 0x50024800,
- 0x90640580, 0x05000010, 0x8c640506, 0x05020044,
- 0x0501f09a, 0x81060800, 0x81224000, 0x910404a1,
- 0x05fc17f3, 0x803c7800, 0x83200480, 0x00000100,
- 0x05fc17e2, 0x61fa4001, 0x8060c1c0, 0x0502008f,
- 0x0501f071, 0x59240a00, 0x0529f921, 0x05000004,
- 0x8c040500, 0x05020089, 0x0501f004, 0x90040d03,
- 0x90040d83, 0x05000085, 0x59240c00, 0x8c04050a,
- 0x05020004, 0x8d0c0520, 0x05000080, 0x0501f003,
- 0x8c040508, 0x0500007d, 0x4d3c0000, 0x4d300000,
- 0x600a78a0, 0x417a6000, 0x05e5fd4e, 0x5c026000,
+ 0x65165a0a, 0x0001f382, 0x492fc857, 0x64aa5a0a,
+ 0x0001f382, 0x492fc857, 0x64a25a0a, 0x0001f382,
+ 0x492fc857, 0x641a5a0a, 0x0001f382, 0x492fc857,
+ 0x643a5a0a, 0x0001f382, 0x90040587, 0x05fe07e4,
+ 0x640a5a0a, 0x0001f382, 0x05f9fe7a, 0x05020006,
+ 0x42000000, 0x0010e445, 0x0535f88a, 0x0529fb00,
+ 0x05fe0793, 0x592c040a, 0x800000c2, 0x800008c4,
+ 0x80040400, 0x48025807, 0x59340010, 0x492e6810,
+ 0x492fc857, 0x80000d40, 0x05000003, 0x492c0800,
+ 0x1c01f000, 0x59340203, 0x492e680f, 0x492fc857,
+ 0x4803c857, 0x80000540, 0x05020002, 0x64066a03,
+ 0x1c01f000, 0x59a8003b, 0x81640480, 0x05fe1766,
+ 0x42026000, 0x00111b00, 0x59300407, 0x90000586,
+ 0x05020007, 0x5930000a, 0x81340580, 0x05020004,
+ 0x59300202, 0x80040580, 0x05fc0752, 0x91326430,
+ 0x41580000, 0x81300480, 0x05fc17f4, 0x05fdf756,
+ 0x492fc857, 0x592e4414, 0x81224110, 0x0501fbda,
+ 0x05020052, 0x0501fac2, 0x05020050, 0x592c0208,
+ 0x80000112, 0x05fe05a6, 0x592e8a0a, 0x05f9faf2,
+ 0x0502004a, 0x05f9fa9c, 0x0502004a, 0x592e780e,
+ 0x493fc857, 0x8d3c053e, 0x05020005, 0x8d0c050e,
+ 0x05020042, 0x05f9f83a, 0x05fc05a7, 0x913c1d1f,
+ 0x05fc05a5, 0x592c020b, 0x82000c80, 0x00001000,
+ 0x05fe15a1, 0x800000c2, 0x800008c4, 0x8005d400,
+ 0x592e900c, 0x592e980d, 0x5934080d, 0x800409c0,
+ 0x05000004, 0x58041805, 0x800c19c0, 0x0502002b,
+ 0x913c1d1f, 0x81780040, 0x80000000, 0x800c1902,
+ 0x05fe17fe, 0x05fe0590, 0x0c01f001, 0x001067b0,
+ 0x001067b2, 0x001067bb, 0x001067bd, 0x001067bf,
+ 0x0521fd28, 0x0501f019, 0x05f5fff3, 0x0500001d,
+ 0x80e9d1c0, 0x05060f18, 0x60168000, 0x417a9000,
+ 0x417a9800, 0x0521fd2b, 0x0501f010, 0x61367000,
+ 0x0501f004, 0x613a7000, 0x0501f002, 0x614a7000,
+ 0x5934080d, 0x800409c0, 0x05000006, 0x4d3c0000,
+ 0x40067800, 0x05f5ffc4, 0x5c027800, 0x05000007,
+ 0x05f5fed1, 0x05220d49, 0x05000006, 0x8d3c053e,
+ 0x0502000a, 0x1c01f000, 0x64c25a0a, 0x0501f009,
+ 0x64b25a0a, 0x0501f007, 0x64a25a0a, 0x0501f005,
+ 0x64a65a0a, 0x0501f003, 0x497a580d, 0x64025a0a,
+ 0x4a025a08, 0x00000103, 0x0001f382, 0x492fc857,
+ 0x80140110, 0x80000040, 0x05000002, 0x05fdf54c,
+ 0x0501fa6a, 0x0502001e, 0x592c020b, 0x82000500,
+ 0x00003fff, 0x48025a0b, 0x8c000506, 0x05000003,
+ 0xb0000530, 0x05020003, 0x8d0c050e, 0x05020014,
+ 0x4a025a0a, 0x0000dead, 0x592c040c, 0x82000500,
+ 0x0000f0ff, 0x48025c0c, 0x05f5fb29, 0x05020002,
+ 0x1c01f000, 0x49425a0a, 0x8058b1c0, 0x05000007,
+ 0x0525fb22, 0x0501f80a, 0x44042800, 0x90580582,
+ 0x05020002, 0x48082801, 0x0001f382, 0x60c68000,
+ 0x60040800, 0x6004b000, 0x05fdf7f3, 0x592c040c,
+ 0x80000118, 0x912c2c0d, 0x80142c00, 0x1c01f000,
+ 0x492fc857, 0x641a5a0c, 0x0001f382, 0x492fc857,
+ 0x64065a0c, 0x0001f382, 0x492fc857, 0x592e7c0a,
+ 0x833c0500, 0xfffffffe, 0x05020044, 0x592c400b,
+ 0x42026000, 0x00111b00, 0x41581800, 0x400c0000,
+ 0x81300480, 0x05021028, 0x59300203, 0x90000580,
+ 0x0500000c, 0x59300009, 0x80000d40, 0x05000009,
+ 0x58043003, 0x58183211, 0x592c020c, 0x80180580,
+ 0x05020004, 0x58040009, 0x80200580, 0x05000003,
+ 0x91326430, 0x05fdf7ee, 0x58040208, 0x82000500,
+ 0x000000ff, 0xb0000d93, 0x0500000d, 0xb0000d88,
+ 0x0500000b, 0x90000d98, 0x05000009, 0x90000da9,
+ 0x05000007, 0x90000d94, 0x05000005, 0xb00005a8,
+ 0x05000003, 0x90000582, 0x05fe07ee, 0x4d2c0000,
+ 0x051dffd9, 0x5c025800, 0x05000018, 0x64025a0a,
+ 0x0001f382, 0x592e8a0a, 0x83440480, 0x000007f0,
+ 0x05021012, 0x83440400, 0x0010d400, 0x50000000,
+ 0x80026d40, 0x0500000d, 0x4d2c0000, 0x05f5ff16,
+ 0x05000009, 0x60168000, 0x592c0a0c, 0x417a6000,
+ 0x05f9fddb, 0x0521fdd8, 0x0001fb82, 0x5c025800,
+ 0x05fdf7eb, 0x5c025800, 0x64c65a0a, 0x0001f382,
+ 0x492fc857, 0x592c020a, 0x90000586, 0x05000003,
+ 0x0501f9ee, 0x05020019, 0x4d2c0000, 0x05d1f923,
+ 0x05000011, 0x492fc857, 0x412f4000, 0x05d1f91f,
+ 0x0500000b, 0x492fc857, 0x412dd800, 0x05f1f84e,
+ 0x05f1f85d, 0x49a1d80b, 0x5c025800, 0x492dd80a,
+ 0x48ef4006, 0x05e1f8ea, 0x05e1f101, 0x41a25800,
+ 0x05d1f922, 0x5c025800, 0x4a025a0a, 0x00004005,
+ 0x640a5c0a, 0x0001f382, 0x4a025a0a, 0x00004001,
+ 0x0001f382, 0x4807c857, 0x485fc857, 0x6004b800,
+ 0x5c000800, 0x4c5c0000, 0x0501f005, 0x4807c857,
+ 0x485fc857, 0x5c000800, 0x4d780000, 0x4803c857,
+ 0x492fc857, 0x8c00050e, 0x05ce0d4d, 0x4203e000,
+ 0x50000000, 0x600cb900, 0x05cdf554, 0x492fc857,
+ 0x4c5c0000, 0x4c600000, 0x4c640000, 0x4d040000,
+ 0x4d2c0000, 0x4d200000, 0x4d240000, 0x4c540000,
+ 0x4c500000, 0x4c580000, 0x417a4000, 0x59a800d1,
+ 0x90000506, 0x05020141, 0x0501f9a2, 0x05020143,
+ 0x916c0580, 0x0500013d, 0x592cca0b, 0x592cc40b,
+ 0x8060c1c0, 0x0500013d, 0x42000000, 0x0010e511,
+ 0x50000000, 0x4c000000, 0x0535f86f, 0x5c000000,
+ 0x05000002, 0x80000000, 0x80600480, 0x05021133,
+ 0x912c7c0c, 0x592c040a, 0x4803c857, 0x8c000500,
+ 0x05000004, 0x0535f864, 0x0500012c, 0x0501f002,
+ 0x60064000, 0x60060800, 0x4200b800, 0xffffffff,
+ 0x83200580, 0x000000e1, 0x05020003, 0x4200b800,
+ 0x3fffffff, 0x503c0000, 0x805cbd00, 0x05020003,
+ 0x91224420, 0x0501f00f, 0x805cb902, 0x05021009,
+ 0x83200400, 0x0010d17b, 0x50024800, 0x90640580,
+ 0x05000010, 0x8c640506, 0x05020095, 0x0501f113,
+ 0x81060800, 0x81224000, 0x910404a1, 0x05fc17f3,
+ 0x803c7800, 0x83200480, 0x00000100, 0x05fc17e2,
+ 0x61fa4001, 0x8060c1c0, 0x05020108, 0x0501f0df,
+ 0x59240a00, 0x0535f84d, 0x05000004, 0x8c040500,
+ 0x05020102, 0x0501f004, 0x90040d03, 0x90040d83,
+ 0x050000fe, 0x59240c00, 0x8c04050a, 0x05020004,
+ 0x8d0c0520, 0x050000f9, 0x0501f003, 0x8c040508,
+ 0x050000f6, 0x4c3c0000, 0x4d3c0000, 0x4d300000,
+ 0x600a78a0, 0x417a6000, 0x05ddfd77, 0x5c026000,
0x5c027800, 0x59240206, 0x82000500, 0xfffffcff,
- 0x48024a06, 0x64164a00, 0x05fdf8ac, 0x05020011,
- 0x59a8021b, 0x82000500, 0x00000082, 0x82000d80,
- 0x00000082, 0x05000009, 0x8c00050e, 0x05020009,
- 0x59240200, 0x8400055e, 0x48024a00, 0x05e5fddc,
- 0x05000059, 0x0501f003, 0x05e5fcce, 0x0500005d,
- 0x81060800, 0x81224000, 0x8060c040, 0x05fe07b8,
- 0x05fdf896, 0x0502003c, 0x0501f047, 0x59240a00,
- 0x8c040500, 0x05000055, 0x4c040000, 0x82040d00,
- 0xffffdffc, 0x84040d44, 0x48064a00, 0x0529f8da,
- 0x05000011, 0x59240200, 0x8c00051e, 0x0500000e,
- 0x8400051e, 0x48024a00, 0x05e5fde5, 0x05000007,
- 0x4813c857, 0x4817c857, 0x58100200, 0x8400055e,
- 0x48002200, 0x0501f004, 0x59a8021b, 0x8400050e,
- 0x4803521b, 0x5c000800, 0x8c640502, 0x05020013,
- 0x59240c08, 0x05e1fb88, 0x4c5c0000, 0x4d3c0000,
- 0x600a78a0, 0x4d300000, 0x417a6000, 0x05e5fd09,
- 0x5c026000, 0x5c027800, 0x5c00b800, 0x81060800,
- 0x81224000, 0x8060c040, 0x05fe0789, 0x90640589,
- 0x0500000d, 0x0501f018, 0x916c0584, 0x05fc07ed,
- 0x90040d03, 0x90040d83, 0x05fe07ea, 0x0501f827,
- 0x81060800, 0x81224000, 0x8060c040, 0x05fe077c,
- 0x0501f00d, 0x916c0584, 0x0500000b, 0x05fdf857,
- 0x05020007, 0x4a035013, 0x0000aaaa, 0x64075014,
- 0x6006d800, 0x05f9ffcf, 0x0501f003, 0x6006d800,
- 0x05f5fb24, 0x497a5a07, 0x64025c07, 0x0001fb5b,
+ 0x48024a06, 0x60040800, 0x05ddff3f, 0x05020004,
+ 0x4a024a00, 0x00008005, 0x0501f002, 0x64164a00,
+ 0x5c007800, 0x05f9ffb1, 0x0502005a, 0x59a80249,
+ 0x82000500, 0x00000082, 0x82000d80, 0x00000082,
+ 0x05000050, 0x8c00050e, 0x05020052, 0x916c0583,
+ 0x05020050, 0x05ddff08, 0x050000cb, 0x0501f04d,
+ 0x05f1fa07, 0x05000047, 0x592c1214, 0x480bc857,
+ 0x8c080500, 0x05000043, 0x41780800, 0x8c080504,
+ 0x05000004, 0x592c0815, 0x82040d00, 0xff000000,
+ 0x592c0414, 0x4803c857, 0x8c080502, 0x05020003,
+ 0x82000500, 0x00001fff, 0x80040540, 0x4803c857,
+ 0x4802480b, 0x82001500, 0x00001fff, 0x05ddfe0a,
+ 0x60203000, 0x050000b0, 0x592c0414, 0x82000d00,
+ 0x00001fff, 0x0501fba1, 0x0500002a, 0x8c00050a,
+ 0x60243000, 0x050200a8, 0x412cb800, 0x05d1f853,
+ 0x601c3000, 0x050000a4, 0x905ca408, 0x912cac08,
+ 0x6040b000, 0x0531ff72, 0x592c0408, 0x84000554,
+ 0x48025c08, 0x81040040, 0x82000c00, 0x0010d15b,
+ 0x50040800, 0x405c0000, 0x803c0480, 0x05001096,
+ 0x812c7c00, 0x503c0000, 0x80040580, 0x44007800,
+ 0x80600040, 0x48025c0b, 0x4d2c0000, 0x05d1f83b,
+ 0x412c0800, 0x5c025800, 0x601c3000, 0x0500008a,
+ 0x4806480c, 0x5924000b, 0x48000802, 0x412c0800,
+ 0x05ddfe41, 0x601c3000, 0x05000083, 0x0501f06f,
+ 0x4c3c0000, 0x05ddfcb9, 0x5c007800, 0x05000085,
+ 0x81060800, 0x81224000, 0x8060c040, 0x05fe0767,
+ 0x05f9ff52, 0x05020059, 0x0501f064, 0x59240a00,
+ 0x8c040500, 0x0500007d, 0x05f1f9b1, 0x05000014,
+ 0x592c1214, 0x8c080500, 0x05000011, 0x592c1414,
+ 0x82081500, 0x00001fff, 0x5924000b, 0x82000500,
+ 0x00001fff, 0x80080580, 0x60203000, 0x05020066,
+ 0x8c04051e, 0x05000006, 0x4c040000, 0x05ddfe67,
+ 0x5c000800, 0x82040d00, 0xffff7f1f, 0x4c3c0000,
+ 0x4c040000, 0x82040d00, 0xffffdffc, 0x84040d44,
+ 0x48064a00, 0x0531ff98, 0x05000012, 0x59240200,
+ 0x8c00051e, 0x0500000f, 0x8400051e, 0x48024a00,
+ 0x600c0800, 0x05ddfeb0, 0x05000007, 0x4813c857,
+ 0x4817c857, 0x58100200, 0x8400055e, 0x48002200,
+ 0x0501f004, 0x59a80249, 0x8400050e, 0x48035249,
+ 0x5c000800, 0x5c007800, 0x8c640502, 0x05020016,
+ 0x4c3c0000, 0x59240c08, 0x05d9f96b, 0x4c5c0000,
+ 0x4d3c0000, 0x600a78a0, 0x4d300000, 0x417a6000,
+ 0x05ddfcc9, 0x5c026000, 0x5c027800, 0x497a480b,
+ 0x5c00b800, 0x5c007800, 0x81060800, 0x81224000,
+ 0x8060c040, 0x05fe071d, 0x90640589, 0x0500000f,
+ 0x0501f01a, 0x916c0584, 0x05fc07ea, 0x90040d03,
+ 0x90040d83, 0x05fe07e7, 0x4c3c0000, 0x0501f839,
+ 0x5c007800, 0x81060800, 0x81224000, 0x8060c040,
+ 0x05fe070e, 0x0501f00d, 0x916c0584, 0x0500000b,
+ 0x05f9fef6, 0x05020007, 0x4a035041, 0x0000aaaa,
+ 0x64075042, 0x6006d800, 0x05f9fe73, 0x0501f003,
+ 0x6006d800, 0x05f1ff2a, 0x5c00b000, 0x5c00a000,
+ 0x5c00a800, 0x5c024800, 0x5c024000, 0x5c025800,
+ 0x497a5a0a, 0x64025c0a, 0x592c0408, 0x8c000514,
+ 0x05000003, 0x05cdffc5, 0x0501f002, 0x0001fb82,
0x5c020800, 0x5c00c800, 0x5c00c000, 0x5c00b800,
0x1c01f000, 0x59240200, 0x82000500, 0xfffffffc,
0x48024a00, 0x0501f006, 0x60143000, 0x0501f004,
- 0x60083000, 0x0501f002, 0x60043000, 0x49225a07,
- 0x481a5c07, 0x05fdf7ee, 0x4923c857, 0x4d440000,
- 0x4d300000, 0x4d340000, 0x4c580000, 0x4d400000,
- 0x4d3c0000, 0x4c5c0000, 0x60a68000, 0x600a7820,
- 0x61c0b00f, 0x417a8800, 0x83440400, 0x0010a600,
- 0x50000000, 0x80026d40, 0x0500001e, 0x59340013,
- 0x80000130, 0x81200580, 0x0502001a, 0x4937c857,
- 0x4947c857, 0x05f9fa77, 0x05020046, 0x0505fe2c,
- 0x4df00000, 0x050dfbf0, 0x05d40ed9, 0x64066407,
- 0x4936600a, 0x4926601d, 0x0201f800, 0x0010f260,
- 0x0201f800, 0x0010f344, 0x0201f800, 0x0010f3dd,
- 0x0201f800, 0x0010f7f5, 0x5c03e000, 0x05040e08,
- 0x602c0800, 0x05f5fe99, 0x60067000, 0x0005fc78,
- 0x81468800, 0x83440580, 0x0000ffff, 0x05000007,
- 0x8058b040, 0x05fe07d9, 0x61fe89ff, 0x42026800,
- 0x0010ce8f, 0x0501f027, 0x9064058b, 0x0502001d,
- 0x61c2880f, 0x6040b000, 0x5924b809, 0x505c0000,
- 0x80026d40, 0x05000013, 0x05f9fa4e, 0x0502001d,
- 0x59340002, 0x82000500, 0x00ffffff, 0x4803c857,
- 0x82000580, 0x00fffffd, 0x0500000a, 0x050dfbc2,
- 0x05d40eab, 0x64066407, 0x4936600a, 0x4926601d,
- 0x602c0800, 0x05f5fe75, 0x60067000, 0x0005fc78,
- 0x805cb800, 0x81468800, 0x8058b040, 0x05fe07e8,
+ 0x60083000, 0x0501f002, 0x60043000, 0x5c00b000,
+ 0x5c00a000, 0x5c00a800, 0x5c024800, 0x49225a0a,
+ 0x5c024000, 0x5c025800, 0x481a5c0a, 0x05fdf7e3,
+ 0x4923c857, 0x4d440000, 0x4d300000, 0x4d340000,
+ 0x4c580000, 0x4d400000, 0x4d3c0000, 0x4c5c0000,
+ 0x60a68000, 0x600a7820, 0x61c0b00f, 0x417a8800,
+ 0x83440400, 0x0010d400, 0x50000000, 0x80026d40,
+ 0x05000005, 0x59340013, 0x80000130, 0x81200580,
+ 0x0500081c, 0x81468800, 0x8058b040, 0x05fe07f5,
+ 0x61fe89ff, 0x42026800, 0x00110210, 0x0501f815,
+ 0x9064058b, 0x0502000b, 0x61c2880f, 0x6040b000,
+ 0x5924b809, 0x505c0000, 0x80026d40, 0x0502080d,
+ 0x805cb800, 0x81468800, 0x8058b040, 0x05fe07fa,
0x5c00b800, 0x5c027800, 0x5c028000, 0x5c00b000,
0x5c026800, 0x5c026000, 0x5c028800, 0x1c01f000,
- 0x4947c857, 0x0505fde6, 0x4df00000, 0x417a6000,
- 0x0505fc9b, 0x0201f800, 0x0010f260, 0x0201f800,
- 0x0010f344, 0x0201f800, 0x0010f3dd, 0x0201f800,
- 0x0010f7f5, 0x4a026c00, 0x00000707, 0x5c03e000,
- 0x05040dc3, 0x83440580, 0x0000ffff, 0x05fc07c7,
- 0x83441480, 0x000007f0, 0x05fc17ba, 0x05fdf7dd,
- 0x4c640000, 0x4c600000, 0x59a8008d, 0x90000506,
- 0x05020087, 0x916c0580, 0x05000085, 0x497a5c07,
- 0x592c2208, 0x8210c500, 0x000000ff, 0x80100110,
- 0x8200cd00, 0x000000ff, 0x05000077, 0x90640483,
- 0x05021075, 0x4d2c0000, 0x4d040000, 0x417a0800,
- 0x592c1408, 0x820a4500, 0x000000ff, 0x4923c857,
- 0x0525ffda, 0x40580000, 0x81200480, 0x0502106e,
- 0x83200400, 0x0010a3b3, 0x50024800, 0x90600583,
- 0x05020012, 0x59a8021b, 0x8c000514, 0x0500000c,
- 0x59240200, 0x82001d00, 0x00002001, 0x820c1d80,
- 0x00002001, 0x05020006, 0x8c000510, 0x05020004,
- 0x41781800, 0x05e5fbc7, 0x0501f042, 0x4803c857,
- 0x60183000, 0x0501f061, 0x59240200, 0x8c000500,
- 0x0502004f, 0x592c0209, 0x8c00050a, 0x05020004,
- 0x8d0c0520, 0x0500004e, 0x0501f003, 0x8c000508,
- 0x0500004b, 0x48024c00, 0x8c000502, 0x05000003,
- 0x80001110, 0x480a4a08, 0x592c000a, 0x9c0001c0,
- 0x48024801, 0x592c000b, 0x9c0001c0, 0x48024802,
- 0x592c000c, 0x9c0001c0, 0x48024803, 0x592c000d,
- 0x9c0001c0, 0x48024804, 0x810609c0, 0x05000002,
- 0x912e5c85, 0x592c0a08, 0x8c040500, 0x0500001d,
- 0x4d3c0000, 0x4d300000, 0x600a78a0, 0x417a6000,
- 0x05e5fc04, 0x5c026000, 0x5c027800, 0x59240206,
- 0x82000500, 0xfffffcff, 0x48024a06, 0x64164a00,
- 0x05f9ff62, 0x0502000f, 0x05e5fcc1, 0x0502000b,
- 0x59a8021b, 0x4803c857, 0x8c00050e, 0x05020009,
- 0x59240200, 0x8400055e, 0x48024a00, 0x05e5fc94,
- 0x05000021, 0x0501f003, 0x05e5fb86, 0x0500001e,
- 0x8064c840, 0x05000006, 0x592c1408, 0x80081110,
- 0x81060800, 0x912e5c05, 0x05fdf79f, 0x5c020800,
- 0x5c025800, 0x05f9ff49, 0x0500001b, 0x592c0a08,
- 0x8c040500, 0x05000018, 0x916c0584, 0x05000016,
- 0x6006d800, 0x05f5fa17, 0x0501f013, 0x60043000,
- 0x0501f00e, 0x60083000, 0x0501f00e, 0x600c3000,
- 0x0501f00a, 0x60103000, 0x0501f008, 0x60143000,
- 0x0501f008, 0x60183000, 0x59240200, 0x82000500,
- 0xfffffffc, 0x48024a00, 0x5c020800, 0x5c025800,
- 0x481a5c07, 0x0001fb5b, 0x5c00c000, 0x5c00c800,
- 0x1c01f000, 0x4c580000, 0x0525ff58, 0x40580000,
- 0x81200480, 0x05021009, 0x83200400, 0x0010a3b3,
+ 0x4937c857, 0x4947c857, 0x050dfaf9, 0x4df00000,
+ 0x417a6000, 0x050df828, 0x050df92d, 0x050df976,
+ 0x0509fefc, 0x052dfc50, 0x83440580, 0x0000ffff,
+ 0x05000015, 0x59340c00, 0x82040580, 0x00000707,
+ 0x05000011, 0x82000580, 0x0000070b, 0x0500000e,
+ 0x4d300000, 0x4d380000, 0x0515f9dd, 0x05cc0bab,
+ 0x64066407, 0x4936600a, 0x4926601d, 0x602c0800,
+ 0x05f5fab9, 0x60067000, 0x0009f800, 0x5c027000,
+ 0x5c026000, 0x5c03e000, 0x050c0aca, 0x1c01f000,
+ 0x599c0018, 0x8c00052a, 0x05000004, 0x592c0003,
+ 0x58000211, 0x80000540, 0x1c01f000, 0x599c0018,
+ 0x8c00052a, 0x05000004, 0x592c0003, 0x5800040c,
+ 0x81200580, 0x1c01f000, 0x599c0018, 0x8c000530,
+ 0x05000004, 0x592c0003, 0x58000211, 0x80000540,
+ 0x1c01f000, 0x4c640000, 0x4c600000, 0x59a800d1,
+ 0x90000506, 0x050200f4, 0x05fdffe6, 0x050200f2,
+ 0x916c0580, 0x050000f0, 0x497a5c0a, 0x592c220b,
+ 0x8210c500, 0x000000ff, 0x80100110, 0x8200cd00,
+ 0x000000ff, 0x050000e2, 0x90640483, 0x050210e0,
+ 0x4d200000, 0x4d240000, 0x4d2c0000, 0x4d040000,
+ 0x417a0800, 0x592c140b, 0x820a4500, 0x000000ff,
+ 0x4923c857, 0x0531fe87, 0x40580000, 0x81200480,
+ 0x050210d7, 0x83200400, 0x0010d17b, 0x50024800,
+ 0x90600583, 0x05020012, 0x59a80249, 0x8c000514,
+ 0x0500000c, 0x59240200, 0x82001d00, 0x00002001,
+ 0x820c1d80, 0x00002001, 0x05020006, 0x8c000510,
+ 0x05020004, 0x41781800, 0x05ddfb8c, 0x0501f0a4,
+ 0x4803c857, 0x60183000, 0x0501f0ca, 0x90600582,
+ 0x05000004, 0x59240200, 0x8c000500, 0x050200b6,
+ 0x592c020c, 0x8c00050a, 0x05020004, 0x8d0c0520,
+ 0x050000b5, 0x0501f003, 0x8c000508, 0x050000b2,
+ 0x48024c00, 0x90601582, 0x05000011, 0x8c000502,
+ 0x05000003, 0x80001110, 0x480a4a08, 0x592c000d,
+ 0x9c0001c0, 0x48024801, 0x592c000e, 0x9c0001c0,
+ 0x48024802, 0x592c000f, 0x9c0001c0, 0x48024803,
+ 0x592c0010, 0x9c0001c0, 0x48024804, 0x810609c0,
+ 0x05000002, 0x912e5c85, 0x592c0a0b, 0x8c040500,
+ 0x0500007b, 0x4d3c0000, 0x4d300000, 0x600a78a0,
+ 0x417a6000, 0x05ddfbb4, 0x5c026000, 0x5c027800,
+ 0x59240206, 0x82000500, 0xfffffcff, 0x48024a06,
+ 0x60040800, 0x05ddfd7c, 0x05020004, 0x4a024a00,
+ 0x00008005, 0x0501f002, 0x64164a00, 0x05f9fdef,
+ 0x05020067, 0x05f1f852, 0x05000057, 0x592c120a,
+ 0x8c080500, 0x05000054, 0x41780000, 0x8c080504,
+ 0x05000005, 0x592c0017, 0x82000500, 0x0000ff00,
+ 0x800000e0, 0x592c0a16, 0x8c080502, 0x05020003,
+ 0x82040d00, 0x00001fff, 0x80040540, 0x4802480b,
+ 0x82001500, 0x00001fff, 0x05ddfc57, 0x60203000,
+ 0x05000074, 0x592c0a16, 0x82040d00, 0x00001fff,
+ 0x0501f9ee, 0x0500003c, 0x8c00050a, 0x60243000,
+ 0x0502006c, 0x412cb800, 0x05cdfea0, 0x601c3000,
+ 0x05000068, 0x492fc857, 0x4c540000, 0x4c500000,
+ 0x4c580000, 0x905ca408, 0x912cac08, 0x6040b000,
+ 0x0531fdbb, 0x5c00b000, 0x5c00a000, 0x5c00a800,
+ 0x4a025c08, 0x00000400, 0x592c0a0b, 0x82040d00,
+ 0x000000ff, 0x80640040, 0x800000d0, 0x80040540,
+ 0x48025a0b, 0x4803c857, 0x592c140b, 0x80081110,
+ 0x480a5c0b, 0x592c0211, 0x8c00050a, 0x05020004,
+ 0x8d0c0520, 0x05000044, 0x0501f003, 0x8c000508,
+ 0x05000041, 0x48025a0c, 0x592c0012, 0x4802580d,
+ 0x592c0013, 0x4802580e, 0x592c0014, 0x4802580f,
+ 0x592c0015, 0x48025810, 0x412e0800, 0x05cdfe73,
+ 0x601c3000, 0x0500003b, 0x492e480c, 0x5924000b,
+ 0x48025802, 0x41040800, 0x05ddfc7b, 0x05000034,
+ 0x0501f016, 0x600c0800, 0x05ddfd1b, 0x0502000a,
+ 0x59a80249, 0x4803c857, 0x8c00050e, 0x05020008,
+ 0x916c0583, 0x05020006, 0x05ddfcef, 0x05000028,
+ 0x0501f003, 0x05ddfae9, 0x05000025, 0x8064c840,
+ 0x05000006, 0x592c140b, 0x80081110, 0x81060800,
+ 0x912e5c05, 0x05fdf73d, 0x5c020800, 0x5c025800,
+ 0x5c024800, 0x5c024000, 0x592c0408, 0x8c000514,
+ 0x05000003, 0x05cdfe5d, 0x0501f020, 0x05f9fd77,
+ 0x0500001d, 0x592c0a0b, 0x8c040500, 0x0500001a,
+ 0x916c0584, 0x05000018, 0x6006d800, 0x05f1fdac,
+ 0x0501f015, 0x60043000, 0x0501f00e, 0x60083000,
+ 0x0501f010, 0x600c3000, 0x0501f00a, 0x60103000,
+ 0x0501f008, 0x60143000, 0x0501f00a, 0x60183000,
+ 0x59240200, 0x82000500, 0xfffffffc, 0x48024a00,
+ 0x5c020800, 0x5c025800, 0x5c024800, 0x5c024000,
+ 0x481a5c0a, 0x0001fb82, 0x5c00c000, 0x5c00c800,
+ 0x1c01f000, 0x4c580000, 0x0531fd9a, 0x40580000,
+ 0x81200480, 0x05021009, 0x83200400, 0x0010d17b,
0x50024800, 0x59240200, 0x90000503, 0x90000583,
0x5c00b000, 0x1c01f000, 0x4923c857, 0x4927c857,
0x90000541, 0x05fdf7fb, 0x80140110, 0x80000040,
- 0x05fe0359, 0x599c0019, 0x8c000510, 0x0502000b,
- 0x05f9f9de, 0x05020002, 0x1c01f000, 0x49425a07,
- 0x4806580e, 0x480a580f, 0x4943c857, 0x4807c857,
- 0x480bc857, 0x0001f35b, 0x592c040c, 0x82000500,
+ 0x05fe01bf, 0x599c0019, 0x8c000510, 0x0502000b,
+ 0x05f5ff3a, 0x05020002, 0x1c01f000, 0x49425a0a,
+ 0x48065811, 0x480a5812, 0x4943c857, 0x4807c857,
+ 0x480bc857, 0x0001f382, 0x592c040f, 0x82000500,
0x0000e000, 0x82000580, 0x00006000, 0x05fc07f1,
- 0x59a8021b, 0x8c000508, 0x05fc07ee, 0x592c120c,
- 0x592c080b, 0x82040500, 0xff000000, 0x80040d80,
- 0x80000110, 0x80081540, 0x05000004, 0x4806580b,
- 0x0501f876, 0x05fdf7e3, 0x60701000, 0x60640800,
- 0x60c68000, 0x05fdf7e2, 0x80140110, 0x80000040,
- 0x05fe0331, 0x05f9fafd, 0x05020002, 0x1c01f000,
- 0x49425a07, 0x48065812, 0x480a5813, 0x0001f35b,
- 0x80140110, 0x05fc0328, 0x80000040, 0x0502000a,
- 0x6006e000, 0x592c020b, 0x8c000504, 0x00000791,
- 0x592c0208, 0x82000c80, 0x00001001, 0x05fe132a,
- 0x0501f004, 0x4a033006, 0x00020791, 0x0001f65b,
- 0x592c1014, 0x82080500, 0xffff0003, 0x05fe0322,
- 0x600ae000, 0x42000000, 0x0010cf3a, 0x50007000,
- 0x592c0012, 0x592c0813, 0x48007006, 0x48047007,
- 0x492c700a, 0x4978700d, 0x4978700b, 0x0501f001,
- 0x4978700c, 0x82080480, 0x00000180, 0x4803c857,
- 0x05001006, 0x4800700e, 0x4a007005, 0x00000180,
- 0x65807004, 0x0501f005, 0x4978700e, 0x48087005,
- 0x80081104, 0x48087004, 0x58380009, 0x48007003,
- 0x40381000, 0x0001f01c, 0x4df00000, 0x4203e000,
- 0x50000000, 0x0001f813, 0x05000003, 0x59980005,
- 0x0801f800, 0x5c03e000, 0x1c01f000, 0x05d9f8e2,
- 0x05d40d67, 0x4a025809, 0x0010ced9, 0x42000800,
- 0x0010cf3a, 0x452c0800, 0x497a580a, 0x497a580b,
- 0x497a580c, 0x497a580d, 0x497a580e, 0x4a025808,
- 0x00020913, 0x497a580f, 0x4a025802, 0x00000100,
- 0x64065801, 0x1c01f000, 0x42000800, 0x0010cf3b,
- 0x64040801, 0x4a000802, 0x00000100, 0x64400804,
- 0x65000805, 0x4a000808, 0x0002068f, 0x1c01f000,
- 0x0501f808, 0x000400ea, 0x64065a09, 0x0525f34d,
- 0x0501f804, 0x000400e7, 0x641a5a09, 0x0525f349,
- 0x59a80005, 0x8c00051a, 0x1c01f000, 0x59a80005,
- 0x8c00051c, 0x1c01f000, 0x59a8000f, 0x80080580,
+ 0x59a80249, 0x8c000508, 0x05fc07ee, 0x592c040d,
+ 0x82000500, 0x000000ff, 0x90000583, 0x05fe07e9,
+ 0x592c120f, 0x592c080e, 0x82040500, 0xff000000,
+ 0x80040d80, 0x80000110, 0x80081540, 0x05000004,
+ 0x4806580e, 0x0501f889, 0x05fdf7de, 0x60701000,
+ 0x60640800, 0x60c68000, 0x05fdf7dd, 0x80140110,
+ 0x80000040, 0x05fe0192, 0x05f9f860, 0x05020002,
+ 0x1c01f000, 0x49425a0a, 0x48065815, 0x480a5816,
+ 0x0001f382, 0x80140110, 0x05fc0189, 0x80000040,
+ 0x0502000a, 0x6006e000, 0x592c020e, 0x8c000504,
+ 0x00040218, 0x592c020b, 0x82000c80, 0x00001001,
+ 0x05fe118d, 0x0501f004, 0x4a01e007, 0x00020a18,
+ 0x0005f0df, 0x592c1017, 0x82080500, 0xffff0003,
+ 0x05fe0185, 0x600ae000, 0x42000000, 0x001102f1,
+ 0x50007000, 0x592c0015, 0x592c0816, 0x592c1804,
+ 0x480c7006, 0x48007007, 0x48047008, 0x492c700b,
+ 0x4978700e, 0x4978700c, 0x0501f001, 0x4978700d,
+ 0x82080480, 0x00000180, 0x05001006, 0x4800700f,
+ 0x4a007005, 0x00000180, 0x65807004, 0x0501f005,
+ 0x4978700f, 0x48087005, 0x80081104, 0x48087004,
+ 0x5838000a, 0x48007003, 0x40381000, 0x0001f021,
+ 0x4df00000, 0x4203e000, 0x50000000, 0x0001f817,
+ 0x05000003, 0x58f00004, 0x0801f800, 0x5c03e000,
+ 0x1c01f000, 0x05cdfd94, 0x05cc09fc, 0x4a02580a,
+ 0x00110290, 0x42000800, 0x001102f1, 0x452c0800,
+ 0x497a580b, 0x497a580c, 0x497a580d, 0x497a580e,
+ 0x497a580f, 0x4a025809, 0x00020b4f, 0x497a5810,
+ 0x4a025802, 0x00000100, 0x64065801, 0x1c01f000,
+ 0x42000800, 0x001102f2, 0x64040801, 0x4a000802,
+ 0x00000100, 0x64400804, 0x65000805, 0x4a000809,
+ 0x00020914, 0x1c01f000, 0x0501f808, 0x05fc0410,
+ 0x64065a0c, 0x0531f0dc, 0x0501f804, 0x05fc0409,
+ 0x641a5a0c, 0x0531f0d8, 0x59a80005, 0x8c00051a,
+ 0x1c01f000, 0x59a80005, 0x8c00051c, 0x1c01f000,
+ 0x592c0208, 0x82000500, 0x000000ff, 0xb00005b5,
+ 0x592c040c, 0x0502000a, 0x84000542, 0x48025c0c,
+ 0x592c0005, 0x4d2c0000, 0x80025d40, 0x05ce0d7f,
+ 0x5c025800, 0x497a5805, 0x1c01f000, 0x84000502,
+ 0x48025c0c, 0x1c01f000, 0x59a8003d, 0x80080580,
0x05020002, 0x1c01f000, 0x480bc857, 0x42024800,
- 0x0010b391, 0x480a4805, 0x480b500f, 0x497b8830,
+ 0x0010e512, 0x480a4805, 0x480b503d, 0x497b8830,
0x82080d40, 0x01000000, 0x48078832, 0x59c40002,
- 0x8400054c, 0x48038802, 0x600c0800, 0x0505f4ab,
- 0x59c80007, 0x8c000502, 0x05000044, 0x915c2c85,
- 0x05001783, 0x59c82817, 0x4817508c, 0x497b9005,
- 0x82140500, 0x00e00000, 0x05020038, 0x82140500,
- 0x000003ff, 0x90001c06, 0x41cc2000, 0x600030c1,
- 0xb00c0480, 0x05001004, 0x61001000, 0xb00c1c80,
- 0x0501f003, 0x400c1000, 0x41781800, 0x54182000,
- 0x80102000, 0x80183000, 0x80081040, 0x05fe07fc,
- 0x800c19c0, 0x05000005, 0x59c80005, 0x80000000,
- 0x48039005, 0x05fdf7ee, 0x82140500, 0x000003ff,
- 0x800018c4, 0x8c140514, 0x05000004, 0x59cc0002,
- 0x90000503, 0x800c1c80, 0x480f5077, 0x82140500,
- 0x01f60000, 0x0502000f, 0x0501ff64, 0x05020008,
- 0x4a039005, 0x00000140, 0x82140500, 0x0e000000,
- 0x80000132, 0x0c01f813, 0x1c01f000, 0x800001c0,
- 0x0502000a, 0x4a039005, 0x00000140, 0x0501f00b,
- 0x4817c857, 0x82140500, 0x00f60000, 0x05020003,
- 0x0501fe5e, 0x05fe07ed, 0x0501ff72, 0x4a039005,
- 0x00000140, 0x0501f03b, 0x4803c856, 0x1c01f000,
- 0x00105519, 0x00105810, 0x00105514, 0x00105514,
- 0x00105514, 0x00105514, 0x00105514, 0x00105514,
- 0x4803c857, 0x42000000, 0x0010b2cd, 0x0525fd2e,
- 0x1c01f000, 0x8d0c052a, 0x05000004, 0x4c140000,
- 0x05d5fdcd, 0x5c002800, 0x59cc0400, 0x82000d00,
- 0x0000ff00, 0x82041500, 0x0000f000, 0x840409c0,
- 0x82080580, 0x0000c000, 0x05020003, 0x0501fc1a,
- 0x0501f01b, 0x82080580, 0x00002000, 0x0502000f,
- 0x916c0581, 0x0502000b, 0x59cc0006, 0x82000500,
- 0xff000000, 0x82000580, 0x11000000, 0x05d60d7a,
- 0x0502000f, 0x05f1fb8d, 0x0501ff73, 0x0501f00c,
- 0x0501f81b, 0x0501f00a, 0x82080580, 0x00003000,
- 0x05020003, 0x0501fa52, 0x0501f005, 0x82080580,
- 0x00008000, 0x05020002, 0x0501fb37, 0x1c01f000,
- 0x4817c857, 0x42000000, 0x0010b2cc, 0x0525fcfe,
+ 0x8400054c, 0x48038802, 0x600c0800, 0x050df116,
+ 0x492fc857, 0x80140110, 0x90000581, 0x05fe00fc,
+ 0x592c040c, 0x4803c857, 0x82000500, 0x000000f0,
+ 0x80000108, 0x0c01f001, 0x00106cc1, 0x00106c46,
+ 0x00106c72, 0x00106cc1, 0x00106c72, 0x00106cc1,
+ 0x00106cc1, 0x00106cc1, 0x00106cae, 0x00106cc1,
+ 0x00106cc1, 0x00106cc1, 0x00106cc1, 0x00106cc1,
+ 0x00106cc1, 0x00106cc1, 0x05edfed2, 0x0500006f,
+ 0x592c0817, 0x4807c857, 0x82040580, 0x00000200,
+ 0x0502007b, 0x4d2c0000, 0x05cdfd23, 0x412c1000,
+ 0x5c025800, 0x05000063, 0x480a5801, 0x492c100a,
+ 0x64001001, 0x4a001009, 0x00106c5f, 0x4a001003,
+ 0x00110672, 0x48041005, 0x592c0015, 0x48001007,
+ 0x592c0016, 0x48001008, 0x0001f021, 0x5832580a,
+ 0x812e59c0, 0x05cc0979, 0x49786001, 0x58300002,
+ 0x82000580, 0x00000100, 0x05020007, 0x59a80ccd,
+ 0x48065811, 0x59a808cf, 0x48065810, 0x64025a0a,
+ 0x0001f382, 0x4803c857, 0x4a006002, 0x00000100,
+ 0x600a8000, 0x0501f04c, 0x05edfea6, 0x05000043,
+ 0x05edfea9, 0x05020043, 0x592c020b, 0x4803c857,
+ 0x82000480, 0x00001000, 0x05021045, 0x592c000f,
+ 0x4803c857, 0x800001c0, 0x05000045, 0x90000484,
+ 0x05021043, 0x592c0814, 0x4807c857, 0x82040580,
+ 0x00000200, 0x05020040, 0x592c040c, 0x8c00050a,
+ 0x05000006, 0x592c0017, 0x4803c857, 0x82000580,
+ 0x00000200, 0x0502003a, 0x4d2c0000, 0x05cdfce2,
+ 0x412c1000, 0x5c025800, 0x05000022, 0x480a5801,
+ 0x4978100b, 0x492c100a, 0x64041001, 0x4a001009,
+ 0x00106ca6, 0x4a001003, 0x001105f2, 0x592c040c,
+ 0x8c00050a, 0x05020003, 0x4a001003, 0x001106f2,
+ 0x48041005, 0x592c0012, 0x48001007, 0x592c0013,
+ 0x48001008, 0x0001f021, 0x5832580a, 0x812e59c0,
+ 0x05cc0932, 0x49786001, 0x58300002, 0x82000580,
+ 0x00000100, 0x05fe07c0, 0x05edfe6a, 0x05000007,
+ 0x497a5a0a, 0x05f9f87c, 0x05020009, 0x1c01f000,
+ 0x640a5810, 0x0501f004, 0x64c65810, 0x0501f002,
+ 0x64ca5810, 0x60c68000, 0x0501f003, 0x48065810,
+ 0x480a5811, 0x49425a0a, 0x0001f382, 0x64325811,
+ 0x0501f008, 0x644a5811, 0x0501f006, 0x64725811,
+ 0x0501f004, 0x64c25811, 0x0501f002, 0x64f25811,
+ 0x64665810, 0x05fdf7f0, 0x4807c857, 0x4c580000,
+ 0x0531fc28, 0x42006000, 0x0010e512, 0x58301200,
+ 0x8c08051e, 0x0500000b, 0x5830000b, 0x82000500,
+ 0x00001fff, 0x80040580, 0x05020006, 0x82080500,
+ 0x000000e0, 0x82000580, 0x000000e0, 0x0501f005,
+ 0x9030640d, 0x8058b040, 0x05fe07f1, 0x90000541,
+ 0x5c00b000, 0x1c01f000, 0x4df00000, 0x4203e000,
+ 0x50000000, 0x40025800, 0x497b3000, 0x592c2a08,
+ 0x82140500, 0x000000ff, 0xb0006cbb, 0x05021033,
+ 0x4c5c0000, 0x4c600000, 0x4c640000, 0x4d040000,
+ 0x4971e410, 0x4cf00000, 0x4d700000, 0x42007800,
+ 0x0010dd60, 0x503de000, 0x58f0700b, 0x58f06c10,
+ 0x483a5804, 0x90347583, 0x05020005, 0x58f0b802,
+ 0x58f0c003, 0x58f0cc00, 0x58f20807, 0x58f07012,
+ 0x483a5802, 0x48f25803, 0x59980801, 0x4c040000,
+ 0x497b3001, 0x6006e000, 0x1201f800, 0x0002083d,
+ 0x91700583, 0x00040a3f, 0x5c000800, 0x48073001,
+ 0x5c02e000, 0x5c01e000, 0x42000800, 0x0010dd60,
+ 0x50040800, 0x58046c10, 0x90340583, 0x05020005,
+ 0x49040807, 0x48640c00, 0x48600803, 0x485c0802,
+ 0x5c020800, 0x5c00c800, 0x5c00c000, 0x5c00b800,
+ 0x5c03e000, 0x1c01f000, 0x05fdf806, 0x05fdf7fd,
+ 0x59c80007, 0x8c000502, 0x05000055, 0x8d0c051c,
+ 0x050600b2, 0x835c2c80, 0x000000ff, 0x050410af,
+ 0x59c82817, 0x481750d0, 0x497b9005, 0x82140500,
+ 0x00e00000, 0x05020046, 0x82140500, 0x000003ff,
+ 0x8c140516, 0x05000005, 0x90001c08, 0x42002000,
+ 0x001102fe, 0x0501f003, 0x90001c06, 0x41cc2000,
+ 0x600030c1, 0xb00c0480, 0x05001004, 0x61001000,
+ 0xb00c1c80, 0x0501f003, 0x400c1000, 0x41781800,
+ 0x54182000, 0x80102000, 0x80183000, 0x80081040,
+ 0x05fe07fc, 0x800c19c0, 0x05000005, 0x59c80005,
+ 0x80000000, 0x48039005, 0x05fdf7ee, 0x8c140516,
+ 0x05000003, 0x42039800, 0x00110300, 0x82140500,
+ 0x000003ff, 0x800018c4, 0x8c140514, 0x05000004,
+ 0x59cc0002, 0x90000503, 0x800c1c80, 0x480f50b6,
+ 0x59c40002, 0x8c00050c, 0x05020003, 0x0531fbdb,
+ 0x05020011, 0x82140500, 0x01f60000, 0x0502000e,
+ 0x0505f88e, 0x05020007, 0x4a039005, 0x00000140,
+ 0x82140500, 0x0e000000, 0x80000132, 0x0c01f012,
+ 0x800001c0, 0x0502000a, 0x4a039005, 0x00000140,
+ 0x0501f00b, 0x4817c857, 0x82140500, 0x00f60000,
+ 0x05020003, 0x0501ff76, 0x05fe07ee, 0x0505f89d,
+ 0x4a039005, 0x00000140, 0x0501f056, 0x4803c856,
+ 0x1c01f000, 0x00106d86, 0x00107139, 0x00106d81,
+ 0x00106d81, 0x00106d81, 0x00106d81, 0x00106d81,
+ 0x00106d81, 0x4803c857, 0x42000000, 0x0010e44b,
+ 0x0531fa58, 0x1c01f000, 0x8d0c052a, 0x05000004,
+ 0x4c140000, 0x05cdf954, 0x5c002800, 0x59cc0003,
+ 0x82000500, 0x00ff0000, 0x0502003a, 0x59cc0400,
+ 0x82000d00, 0x0000ff00, 0x82041500, 0x0000f000,
+ 0x840409c0, 0x82080580, 0x0000c000, 0x05020003,
+ 0x0501fd11, 0x0501f032, 0x82080580, 0x00002000,
+ 0x05020024, 0x916c0581, 0x05020020, 0x05f9fb0f,
+ 0x05020014, 0x4c040000, 0x59a8083f, 0x4807c857,
+ 0x90040589, 0x05000007, 0x90040583, 0x0502000b,
+ 0x05f9f9da, 0x59a8083f, 0x90040589, 0x05020007,
+ 0x81780000, 0x05c9fbee, 0x916c0582, 0x05020003,
+ 0x5c000800, 0x0501f00d, 0x5c000800, 0x0501f018,
+ 0x59cc0006, 0x82000500, 0xff000000, 0x82000580,
+ 0x11000000, 0x05ce08e8, 0x05020011, 0x05edfde9,
+ 0x0505f8af, 0x0501f00e, 0x0501f81d, 0x0501f00c,
+ 0x82080580, 0x00003000, 0x05020003, 0x0501fa88,
+ 0x0501f007, 0x82080580, 0x00008000, 0x050003e6,
+ 0x42000000, 0x0010e44a, 0x0531f212, 0x1c01f000,
+ 0x4817c857, 0x42000000, 0x0010e44a, 0x0531fa0d,
0x916c0583, 0x05020009, 0x4c080000, 0x4c0c0000,
- 0x61201100, 0x40141800, 0x80142120, 0x05f1f87e,
+ 0x61201100, 0x40141800, 0x80142120, 0x05edfa05,
0x5c001800, 0x5c001000, 0x1c01f000, 0x59cc0002,
0x82000500, 0xff000000, 0x82001580, 0x01000000,
- 0x05000005, 0x82001580, 0x23000000, 0x05d60d52,
- 0x050205cb, 0x59a80077, 0x90000484, 0x050011de,
- 0x900405a3, 0x05020046, 0x59cc0004, 0x4803c857,
- 0x59cc0006, 0x82000500, 0xff000000, 0x59cc0801,
- 0x82040d00, 0x00ffffff, 0x80040540, 0x4803c857,
- 0x0501fbc7, 0x05d40d40, 0x050001cf, 0x59300c07,
- 0x90040590, 0x0500000a, 0x90040591, 0x05000008,
- 0x90040581, 0x05000006, 0x90040584, 0x05000004,
- 0x90040588, 0x05d60d34, 0x050201c3, 0x59300004,
- 0x82000500, 0x80010000, 0x05000004, 0x0505ff78,
- 0x05d60d2d, 0x050201bc, 0x59cc0a04, 0x48066202,
+ 0x05000008, 0x82001580, 0x23000000, 0x05000005,
+ 0x05cdf8bd, 0x0505f85a, 0x050006c0, 0x0501f209,
+ 0x59a800b6, 0x90000484, 0x05001206, 0x900405a3,
+ 0x05020046, 0x59cc0004, 0x4803c857, 0x59cc0006,
+ 0x82000500, 0xff000000, 0x59cc0801, 0x82040d00,
+ 0x00ffffff, 0x80040540, 0x4803c857, 0x0501fca4,
+ 0x05cc08a9, 0x050001f7, 0x59300c07, 0x90040590,
+ 0x0500000a, 0x90040591, 0x05000008, 0x90040581,
+ 0x05000006, 0x90040584, 0x05000004, 0x90040588,
+ 0x05ce089d, 0x050201eb, 0x59300004, 0x82000500,
+ 0x80010000, 0x05000004, 0x050dfaaf, 0x05ce0896,
+ 0x050201e4, 0x59cc0a04, 0x48066202, 0x59cc0006,
+ 0x82000500, 0xffff0000, 0x82000d80, 0x02000000,
+ 0x05020007, 0x60567000, 0x0501fceb, 0x0501fd1d,
+ 0x05cc0889, 0x050001d7, 0x0009f000, 0x82000d80,
+ 0x02140000, 0x05fc07f8, 0x82000d80, 0x02100000,
+ 0x05fc07f5, 0x82000d80, 0x02100000, 0x05fc07f2,
+ 0x82000d80, 0x01000000, 0x05ce087b, 0x050201c9,
+ 0x59cc0006, 0x82000500, 0x0000ffff, 0x05ce0876,
+ 0x050201c4, 0x59a800b6, 0x90000488, 0x050011c1,
+ 0x605a7000, 0x05fdf7e5, 0x900405a2, 0x05ce086e,
+ 0x050201bc, 0x59cc0004, 0x4803c857, 0x59cc0006,
+ 0x4803c857, 0x59cc0001, 0x4803c857, 0x59a800b6,
+ 0x800001c0, 0x05cc0864, 0x050001b2, 0x59a80249,
+ 0x8c000508, 0x05000003, 0x8c000502, 0x050001ad,
+ 0x59a80805, 0x8c040514, 0x05000043, 0x0501f9d0,
+ 0x05020041, 0x59a80249, 0x8c000518, 0x0500000e,
0x59cc0006, 0x82000500, 0xffff0000, 0x82000d80,
- 0x02000000, 0x05020007, 0x60567000, 0x0501fc07,
- 0x0501fc30, 0x05d40d20, 0x050001af, 0x0005f478,
- 0x82000d80, 0x02140000, 0x05fc07f8, 0x82000d80,
- 0x02100000, 0x05fc07f5, 0x82000d80, 0x02100000,
- 0x05fc07f2, 0x82000d80, 0x01000000, 0x05d60d12,
- 0x050201a1, 0x59cc0006, 0x82000500, 0x0000ffff,
- 0x05d60d0d, 0x0502019c, 0x59a80077, 0x90000488,
- 0x05001199, 0x605a7000, 0x05fdf7e5, 0x900405a2,
- 0x05d60d05, 0x05020194, 0x59cc0004, 0x4803c857,
- 0x59cc0006, 0x4803c857, 0x59cc0001, 0x4803c857,
- 0x59a80077, 0x800001c0, 0x05d40cfb, 0x0500018a,
- 0x59a80805, 0x8c040514, 0x05000033, 0x0501f9a4,
- 0x05020031, 0x0501f9bc, 0x0500002f, 0x61327000,
+ 0x7f000000, 0x05020008, 0x05edfccb, 0x05020036,
+ 0x59cc0c07, 0x82040d00, 0x000000ff, 0x90040581,
+ 0x05020031, 0x0501f9d8, 0x0500002f, 0x61327000,
0x59cc3800, 0x821c3d00, 0x00ffffff, 0x4c1c0000,
- 0x05e5f9d2, 0x5c003800, 0x05000003, 0x05d5fcea,
- 0x0501f179, 0x59cc0001, 0x82000500, 0x00ffffff,
- 0x0501fe35, 0x05000006, 0x61fe89ff, 0x42026800,
- 0x0010ce8f, 0x05f9faad, 0x481a6802, 0x599c0019,
- 0x8c000510, 0x05000157, 0x59a8021b, 0x8c000508,
- 0x05000154, 0x59cc1006, 0x82081500, 0xffff0000,
- 0x82081580, 0x03000000, 0x0502014e, 0x91641490,
- 0x05001166, 0x8400054c, 0x4803521b, 0x59cc1000,
- 0x82081500, 0x00ffffff, 0x05fdfed0, 0x59cc0007,
- 0x82000500, 0x0000ffff, 0x48038893, 0x48035012,
- 0x0501f140, 0x59cc0006, 0x82000500, 0xffff0000,
- 0x82000d80, 0x03000000, 0x05020032, 0x59a8021b,
- 0x8c000508, 0x05000020, 0x8400054c, 0x4803521b,
+ 0x05d9ffc8, 0x5c003800, 0x05000003, 0x05cdf83e,
+ 0x0501f18c, 0x59cc0001, 0x82000500, 0x00ffffff,
+ 0x0501ff20, 0x05000006, 0x61fe89ff, 0x42026800,
+ 0x00110210, 0x05f5ff3d, 0x481a6802, 0x599c0019,
+ 0x8c000510, 0x05000168, 0x59a80249, 0x8c000508,
+ 0x05000165, 0x59cc1006, 0x82081500, 0xffff0000,
+ 0x82081580, 0x03000000, 0x0502015f, 0x91641490,
+ 0x05001181, 0x8400054c, 0x48035249, 0x59cc1000,
+ 0x82081500, 0x00ffffff, 0x05fdfd98, 0x59cc0007,
+ 0x82000500, 0x0000ffff, 0x48038893, 0x48035040,
+ 0x0501f151, 0x59cc0006, 0x82000500, 0xffff0000,
+ 0x82000d80, 0x03000000, 0x05020032, 0x59a80249,
+ 0x8c000508, 0x05000020, 0x8400054c, 0x48035249,
0x59cc0800, 0x82040d00, 0x00ffffff, 0x42024800,
- 0x0010b391, 0x4807c857, 0x48064805, 0x4807500f,
+ 0x0010e512, 0x4807c857, 0x48064805, 0x4807503d,
0x497b8830, 0x84040d70, 0x48078832, 0x59c40802,
0x84040d4c, 0x48078802, 0x59cc0007, 0x82000500,
- 0x0000ffff, 0x48038893, 0x48035012, 0x600c0800,
- 0x59a8100f, 0x0505fb65, 0x59cc0006, 0x82000500,
- 0x0000ffff, 0x05d60ca0, 0x0502012f, 0x605e7000,
- 0x0501f0e3, 0x4c000000, 0x82140500, 0x0000f000,
+ 0x0000ffff, 0x48038893, 0x48035040, 0x600c0800,
+ 0x59a8103d, 0x0509fe98, 0x59cc0006, 0x82000500,
+ 0x0000ffff, 0x05ca0ff4, 0x05020142, 0x605e7000,
+ 0x0501f0f3, 0x4c000000, 0x82140500, 0x0000f000,
0x82000580, 0x00003000, 0x5c000000, 0x05fe07f3,
- 0x05f9fd1a, 0x05fe07f1, 0x8c000502, 0x05fe07ef,
- 0x60583002, 0x0501fd0d, 0x4803c857, 0x0501f11e,
+ 0x05f9f9f6, 0x05fe07f1, 0x8c000502, 0x05fe07ef,
+ 0x60583002, 0x0501fdec, 0x4803c857, 0x0501f131,
0x82000d80, 0x04000000, 0x05020013, 0x59cc0006,
- 0x82000500, 0x0000ffff, 0x05d60c87, 0x05020116,
- 0x05f9fd0a, 0x05000002, 0x0501f0c8, 0x497b5082,
- 0x42001000, 0x0010f866, 0x0501feba, 0x05f9fa55,
- 0x59a8021b, 0x84000548, 0x4803521b, 0x60c27000,
- 0x0501f0bf, 0x82000d80, 0x05000000, 0x05020008,
- 0x59cc0006, 0x82000500, 0x0000ffff, 0x05d60c72,
- 0x05020101, 0x60627000, 0x0501f0b5, 0x82000d80,
- 0x20100000, 0x05020003, 0x60667000, 0x0501f0b0,
+ 0x82000500, 0x0000ffff, 0x05ca0fdb, 0x05020129,
+ 0x05f9f9e6, 0x05000002, 0x0501f0d8, 0x497b50c2,
+ 0x42001000, 0x0010582b, 0x0501ffe7, 0x05f5fee5,
+ 0x59a80249, 0x84000548, 0x48035249, 0x60c27000,
+ 0x0501f0cf, 0x82000d80, 0x05000000, 0x05020008,
+ 0x59cc0006, 0x82000500, 0x0000ffff, 0x05ca0fc6,
+ 0x05020114, 0x60627000, 0x0501f0c5, 0x82000d80,
+ 0x20100000, 0x05020003, 0x60667000, 0x0501f0c0,
0x82000d80, 0x21100000, 0x05020003, 0x606a7000,
- 0x0501f0ab, 0x82000d80, 0x52000000, 0x05020008,
- 0x59cc0006, 0x82000500, 0x0000ffff, 0x05d60c5e,
- 0x050200ed, 0x606e7000, 0x0501f0a1, 0x82000d80,
+ 0x0501f0bb, 0x82000d80, 0x52000000, 0x05020008,
+ 0x59cc0006, 0x82000500, 0x0000ffff, 0x05ca0fb2,
+ 0x05020100, 0x606e7000, 0x0501f0b1, 0x82000d80,
0x50000000, 0x05020008, 0x59cc0006, 0x82000500,
- 0x0000ffff, 0x05d60c54, 0x050200e3, 0x60727000,
- 0x0501f097, 0x82000d80, 0x13000000, 0x05020003,
- 0x60d27000, 0x0501f092, 0x82000d80, 0x12000000,
+ 0x0000ffff, 0x05ca0fa8, 0x050200f6, 0x60727000,
+ 0x0501f0a7, 0x82000d80, 0x13000000, 0x05020003,
+ 0x60d27000, 0x0501f0a2, 0x82000d80, 0x12000000,
0x05020008, 0x59cc0006, 0x82000500, 0x0000ffff,
- 0x05d60c45, 0x050200d4, 0x60927000, 0x0501f088,
+ 0x05ca0f99, 0x050200e7, 0x60927000, 0x0501f098,
0x82000d00, 0xff000000, 0x82040d80, 0x24000000,
- 0x05020003, 0x60b67000, 0x0501f081, 0x82000d00,
+ 0x05020003, 0x60b67000, 0x0501f091, 0x82000d00,
0xff000000, 0x82040d80, 0x53000000, 0x05020003,
- 0x60aa7000, 0x0501f07a, 0x82000d80, 0x0f000000,
- 0x05020003, 0x60827000, 0x0501f075, 0x82000d80,
+ 0x60aa7000, 0x0501f08a, 0x82000d80, 0x0f000000,
+ 0x05020003, 0x60827000, 0x0501f085, 0x82000d80,
0x61040000, 0x0502004a, 0x4c5c0000, 0x4c600000,
0x4c640000, 0x4c580000, 0x91ccc406, 0x8060b800,
0x50600000, 0x82000500, 0x0000ffff, 0x82001480,
0x00000401, 0x05021037, 0x90001503, 0x05020035,
- 0x59a81077, 0x80081480, 0x05001032, 0x90000484,
+ 0x59a810b6, 0x80081480, 0x05001032, 0x90000484,
0x8000b104, 0x8058b1c0, 0x0500002e, 0x59cc3800,
- 0x821c3d00, 0x00ffffff, 0x4d200000, 0x05e5f8f7,
+ 0x821c3d00, 0x00ffffff, 0x4d200000, 0x05d9feed,
0x05000003, 0x5c024000, 0x0501f026, 0x505cc800,
0x8264c500, 0x03000000, 0x8060c130, 0x42000000,
- 0x0010b297, 0x90602580, 0x05020004, 0x42000000,
- 0x0010b294, 0x0501f00a, 0x90602581, 0x05020004,
- 0x42000000, 0x0010b295, 0x0501f005, 0x90602582,
- 0x05020003, 0x42000000, 0x0010b296, 0x0525fb92,
+ 0x0010e410, 0x90602580, 0x05020004, 0x42000000,
+ 0x0010e40d, 0x0501f00a, 0x90602581, 0x05020004,
+ 0x42000000, 0x0010e40e, 0x0501f005, 0x90602582,
+ 0x05020003, 0x42000000, 0x0010e40f, 0x0531f889,
0x60541100, 0x82642500, 0x0000ffff, 0x80641920,
- 0x41202800, 0x05edff15, 0x805cb800, 0x8058b040,
+ 0x41202800, 0x05edf884, 0x805cb800, 0x8058b040,
0x05fe07e3, 0x5c024000, 0x5c00b000, 0x5c00c800,
- 0x5c00c000, 0x5c00b800, 0x608e7000, 0x0501f030,
+ 0x5c00c000, 0x5c00b800, 0x608e7000, 0x0501f040,
0x5c00b000, 0x5c00c800, 0x5c00c000, 0x5c00b800,
- 0x42000000, 0x0010b2ca, 0x0525f37b, 0x82000d80,
- 0x60000000, 0x05020003, 0x60fe7000, 0x0501f024,
+ 0x42000000, 0x0010e448, 0x0531f072, 0x82000d80,
+ 0x60000000, 0x05020003, 0x60fe7000, 0x0501f034,
0x82000d80, 0x78000000, 0x05020003, 0x61167000,
- 0x0501f01f, 0x82000d80, 0x10000000, 0x05020003,
- 0x613a7000, 0x0501f01a, 0x82000d80, 0x63000000,
- 0x05020003, 0x612a7000, 0x0501f015, 0x82000d00,
+ 0x0501f02f, 0x82000d80, 0x10000000, 0x05020003,
+ 0x613a7000, 0x0501f02a, 0x82000d80, 0x63000000,
+ 0x05020003, 0x612a7000, 0x0501f025, 0x82000d00,
0xff000000, 0x82040d80, 0x56000000, 0x05020003,
- 0x613e7000, 0x0501f00e, 0x82000d00, 0xff000000,
+ 0x613e7000, 0x0501f01e, 0x82000d00, 0xff000000,
0x82040d80, 0x57000000, 0x05020003, 0x61427000,
- 0x0501f007, 0x82000d80, 0x7d000000, 0x05020003,
- 0x615a7000, 0x0501f002, 0x60767000, 0x59cc3800,
+ 0x0501f017, 0x82000d80, 0x7d000000, 0x05020003,
+ 0x615a7000, 0x0501f012, 0x59a80a49, 0x8c040518,
+ 0x0500000e, 0x82000d80, 0x7f000000, 0x0502000b,
+ 0x4803c857, 0x61667000, 0x59cc0c07, 0x82040d00,
+ 0x000000ff, 0x90040581, 0x05000005, 0x4803c857,
+ 0x61767000, 0x0501f002, 0x60767000, 0x59cc3800,
0x821c3d00, 0x00ffffff, 0x821c0580, 0x00fffffe,
0x59cc0001, 0x05020004, 0x40003000, 0x61fa880f,
0x0501f009, 0x59cc3800, 0x821c3d00, 0x00ffffff,
- 0x4c1c0000, 0x0501f906, 0x5c003800, 0x05d60baa,
- 0x05020039, 0x05e5f88d, 0x83440480, 0x000007f0,
- 0x05001001, 0x05f1f9b1, 0x0500000f, 0x4c180000,
- 0x05f5fec4, 0x5c003000, 0x0500000e, 0x4c180000,
- 0x0501f84b, 0x5c003000, 0x05020007, 0x05f9f967,
- 0x42026800, 0x0010ce8f, 0x481a6802, 0x61fe89ff,
- 0x0501f004, 0x05f5fad7, 0x05d60b93, 0x05020022,
- 0x59340200, 0x8c000514, 0x0500000a, 0x913805b0,
- 0x05000008, 0x913805bf, 0x05000006, 0x913805b4,
- 0x05000004, 0x913805a4, 0x05000002, 0x61327000,
- 0x0509ffd5, 0x05000019, 0x4926601d, 0x4936600a,
- 0x64126407, 0x83340580, 0x0010ce8f, 0x05020005,
- 0x59cc0001, 0x82000500, 0x00ffffff, 0x4802602a,
- 0x59cc0c04, 0x48066202, 0xb138058c, 0x05020002,
- 0x64466407, 0x0501fa59, 0x0501fab3, 0x0004045a,
- 0x0005f478, 0x598800b7, 0x4803c857, 0x80000000,
- 0x480310b7, 0x1c01f000, 0x61241100, 0x59cc1806,
- 0x800c1930, 0x05edfe88, 0x0509ffbf, 0x05d40b66,
- 0x05fc07f5, 0x4926601d, 0x4936600a, 0x83340580,
- 0x0010ce8f, 0x05020005, 0x59cc0001, 0x82000500,
+ 0x4c1c0000, 0x0501f91e, 0x5c003800, 0x05ca0eee,
+ 0x05020041, 0x05d9fe73, 0x0502003a, 0x83440480,
+ 0x000007f0, 0x05001001, 0x05edfb8f, 0x0500000f,
+ 0x4c180000, 0x05f5fabc, 0x5c003000, 0x0500000e,
+ 0x4c180000, 0x0501f856, 0x5c003000, 0x05020007,
+ 0x05f5fde6, 0x42026800, 0x00110210, 0x481a6802,
+ 0x61fe89ff, 0x0501f004, 0x05f1fd4f, 0x05ca0ed6,
+ 0x05020024, 0x59340200, 0x8c000514, 0x0500000a,
+ 0x913805b0, 0x05000008, 0x913805bf, 0x05000006,
+ 0x913805b4, 0x05000004, 0x913805a4, 0x05000002,
+ 0x61327000, 0x0511fc2a, 0x05000023, 0x4926601d,
+ 0x4936600a, 0x64126407, 0x83340580, 0x00110210,
+ 0x05020005, 0x59cc0001, 0x82000500, 0x00ffffff,
+ 0x4802602a, 0x59cc0c04, 0x48066202, 0xb138058c,
+ 0x05020002, 0x64466407, 0x0501fb17, 0x0501fb7a,
+ 0x05020003, 0x0005ffdc, 0x0501f002, 0x0009f000,
+ 0x598800bc, 0x4803c857, 0x80000000, 0x480310bc,
+ 0x1c01f000, 0x05d9fe33, 0x05fe07fa, 0x42000000,
+ 0x0010e3bd, 0x052dffe3, 0x42026800, 0x00110210,
+ 0x0501f002, 0x0501fe3d, 0x61241100, 0x59cc1806,
+ 0x800c1930, 0x05e9ffdb, 0x0511fc09, 0x05c80e9e,
+ 0x05fc07ec, 0x4926601d, 0x4936600a, 0x83340580,
+ 0x00110210, 0x05020005, 0x59cc0001, 0x82000500,
0x00ffffff, 0x4802602a, 0x64126407, 0x59cc0c04,
0x48066202, 0x64266403, 0x6426641c, 0x4a02621c,
- 0x00002900, 0x64066203, 0x0505f08a, 0x59a8021b,
+ 0x00002900, 0x64066203, 0x0509f05b, 0x59a80249,
0x4803c857, 0x8c000508, 0x05000013, 0x599c0019,
0x8c000510, 0x05020010, 0x59cc0006, 0x82000500,
0xff000000, 0x82000d80, 0x03000000, 0x0500000c,
@@ -18426,208 +7215,256 @@ static const uint32_t isp_2500_multi_risc_code[] = {
0x05000000, 0x05000006, 0x82000d80, 0x21000000,
0x05000003, 0x80000580, 0x1c01f000, 0x90000541,
0x05fdf7fe, 0x59cc2006, 0x82102500, 0xff000000,
- 0x9c1021c0, 0x0501f807, 0x820c1c00, 0x0010aed8,
+ 0x9c1021c0, 0x0501f807, 0x820c1c00, 0x0010dd3e,
0x500c1800, 0x800c0500, 0x4803c857, 0x1c01f000,
0x40100800, 0x41781800, 0x900404a0, 0x05001004,
0x800c1800, 0x40000800, 0x05fdf7fc, 0x9004050f,
- 0x82000400, 0x0010a393, 0x50000000, 0x8c040508,
+ 0x82000400, 0x0010d15b, 0x50000000, 0x8c040508,
0x05000002, 0x900001c0, 0x1c01f000, 0x4803c856,
- 0x0501fc97, 0x05020009, 0x05e1fdcb, 0x05020007,
+ 0x0501fd66, 0x0502000c, 0x05d9fbb6, 0x0502000a,
0x59cc0002, 0x82000500, 0xff000000, 0x82000d80,
- 0x08000000, 0x05000802, 0x1c01f000, 0x4803c856,
- 0x59cc0400, 0x82000d00, 0x0000ff00, 0x840409c0,
- 0x900405b3, 0x05020025, 0x0501f991, 0x05000060,
- 0x59cc0a04, 0x48066202, 0x59a80077, 0x90000484,
- 0x0500105b, 0x59cc0006, 0x4803c857, 0x82000500,
- 0xffff0000, 0x82000d80, 0x02000000, 0x05020009,
- 0x59cc0006, 0x82000500, 0x0000ffff, 0x05020050,
- 0x0501fa08, 0x0004045a, 0x60567000, 0x0005f478,
- 0x82000d80, 0x01000000, 0x05020049, 0x59cc0006,
- 0x82000500, 0x0000ffff, 0x05020045, 0x59a80077,
- 0x90000488, 0x05001042, 0x0501f9fa, 0x0004045a,
- 0x605a7000, 0x0005f478, 0x900405b2, 0x0502003c,
- 0x59cc0006, 0x82000500, 0xffff0000, 0x82000d80,
- 0x14000000, 0x05020036, 0x59a80077, 0x90000490,
- 0x05001033, 0x60e27000, 0x59cc0001, 0x59cc3800,
- 0x821c3d00, 0x00ffffff, 0x4c1c0000, 0x0501f82f,
- 0x5c003800, 0x0502002a, 0x05e1ffb8, 0x05020028,
- 0x83440480, 0x000007f0, 0x05001001, 0x05f1f8db,
- 0x0500000f, 0x4c180000, 0x05f5fdee, 0x5c003000,
- 0x0500000d, 0x4c180000, 0x05fdff75, 0x5c003000,
- 0x05020007, 0x05f9f891, 0x42026800, 0x0010ce8f,
- 0x481a6802, 0x61fe89ff, 0x0501f003, 0x05f5f9fc,
- 0x05020013, 0x0509ff0c, 0x05000011, 0x4926601d,
- 0x4936600a, 0x83340580, 0x0010ce8f, 0x05020005,
- 0x59cc0001, 0x82000500, 0x00ffffff, 0x4802602a,
- 0x0519f8c6, 0x64126407, 0x59cc0c04, 0x48066202,
- 0x0501f9ed, 0x0004045a, 0x0005f478, 0x42000000,
- 0x0010b2ca, 0x0525f240, 0x4803c857, 0x4000d000,
- 0x401cd800, 0x82003500, 0x00ffffff, 0x0201f800,
- 0x0010ff4b, 0x40c40000, 0x90000581, 0x1c01f000,
- 0x59a8021b, 0x8c00050e, 0x05000003, 0x8c000502,
- 0x05000005, 0x59cc0c00, 0x80040910, 0x9004050f,
- 0x0c01f002, 0x1c01f000, 0x0010582a, 0x0010582a,
- 0x0010582a, 0x00105b00, 0x0010582a, 0x0010582c,
- 0x00105853, 0x00105856, 0x0010582a, 0x0010582a,
- 0x0010582a, 0x0010582a, 0x0010582a, 0x0010582a,
- 0x0010582a, 0x0010582a, 0x4803c856, 0x1c01f000,
- 0x0501f907, 0x05000021, 0x59a80077, 0x9000048c,
- 0x0500101e, 0x59300407, 0x90000583, 0x0502001b,
- 0x59cc0001, 0x5932680a, 0x813669c0, 0x05000017,
- 0x59340802, 0x80040580, 0x82000500, 0x00ffffff,
- 0x05020012, 0x0501fc13, 0x05020010, 0x59cc0a04,
- 0x59300202, 0x82001580, 0x0000ffff, 0x05000003,
- 0x80040580, 0x05020009, 0x48066202, 0x59300416,
- 0x8c00051a, 0x05020005, 0x611a7000, 0x0501f937,
- 0x05000002, 0x0005f478, 0x59cc0004, 0x4803c857,
- 0x42000000, 0x0010b2cb, 0x0525f1f3, 0x59cc0004,
- 0x4803c857, 0x1c01f000, 0x0501f8dd, 0x0500001d,
- 0x59a80077, 0x9000048c, 0x0500101a, 0x59300407,
+ 0x08000000, 0x05000007, 0x42000000, 0x0010e44b,
+ 0x052df784, 0x42000000, 0x0010e448, 0x052df781,
+ 0x4803c856, 0x59cc0400, 0x82000d00, 0x0000ff00,
+ 0x840409c0, 0x900405b3, 0x05020029, 0x0501fa38,
+ 0x05000067, 0x59cc0a04, 0x48066202, 0x59a800b6,
+ 0x90000484, 0x05001062, 0x59cc0006, 0x4803c857,
+ 0x82000500, 0xffff0000, 0x82000d80, 0x02000000,
+ 0x0502000b, 0x59cc0006, 0x82000500, 0x0000ffff,
+ 0x05020057, 0x0501fabf, 0x05020003, 0x0005ffdc,
+ 0x0501f053, 0x60567000, 0x0009f000, 0x82000d80,
+ 0x01000000, 0x0502004e, 0x59cc0006, 0x82000500,
+ 0x0000ffff, 0x0502004a, 0x59a800b6, 0x90000488,
+ 0x05001047, 0x0501faaf, 0x05020003, 0x0005ffdc,
+ 0x0501f043, 0x605a7000, 0x0009f000, 0x900405b2,
+ 0x0502003f, 0x59cc0006, 0x82000500, 0xffff0000,
+ 0x82000d80, 0x14000000, 0x05020039, 0x59a800b6,
+ 0x90000490, 0x05001036, 0x60e27000, 0x59cc0001,
+ 0x59cc3800, 0x821c3d00, 0x00ffffff, 0x4c1c0000,
+ 0x0501f832, 0x5c003800, 0x0502002d, 0x05d9fd89,
+ 0x0502002b, 0x83440480, 0x000007f0, 0x05001001,
+ 0x05edfaa5, 0x0500000f, 0x4c180000, 0x05f5f9d2,
+ 0x5c003000, 0x0500000d, 0x4c180000, 0x05fdff6c,
+ 0x5c003000, 0x05020007, 0x05f5fcfc, 0x42026800,
+ 0x00110210, 0x481a6802, 0x61fe89ff, 0x0501f003,
+ 0x05f1fc60, 0x05020016, 0x0511fb4d, 0x05000d83,
+ 0x05000013, 0x4926601d, 0x4936600a, 0x83340580,
+ 0x00110210, 0x05020005, 0x59cc0001, 0x82000500,
+ 0x00ffffff, 0x4802602a, 0x051dffcd, 0x64126407,
+ 0x59cc0c04, 0x48066202, 0x0501fa9f, 0x05020003,
+ 0x0005ffdc, 0x0501f002, 0x0009f000, 0x42000000,
+ 0x0010e448, 0x052df70f, 0x4803c857, 0x4c580000,
+ 0x4c5c0000, 0x4c600000, 0x4c640000, 0x82003500,
+ 0x00ffffff, 0x821c3d00, 0x00ffffff, 0x82181500,
+ 0x00ff0000, 0x82081580, 0x00ff0000, 0x05020013,
+ 0x82181480, 0x00fffffc, 0x05001010, 0x82181580,
+ 0x00fffffd, 0x05020003, 0x61f6880f, 0x0501f050,
+ 0x82181580, 0x00fffffe, 0x05020003, 0x61fa880f,
+ 0x0501f04b, 0x82181580, 0x00fffffc, 0x05020003,
+ 0x61f2880f, 0x0501f046, 0x41781000, 0x6000b800,
+ 0x61c0b00f, 0x41acc000, 0x50600000, 0x8000cd40,
+ 0x05020005, 0x800811c0, 0x05020032, 0x845c155e,
+ 0x0501f030, 0x58640212, 0x82000500, 0x0000ff00,
+ 0x05000011, 0x59a8403d, 0x82204500, 0x00ffff00,
+ 0x82180500, 0x00ffff00, 0x05000002, 0x80200580,
+ 0x58640002, 0x05020023, 0x82000500, 0x000000ff,
+ 0x82184500, 0x000000ff, 0x80204580, 0x0502001d,
+ 0x0501f006, 0x58640002, 0x82000500, 0x00ffffff,
+ 0x80184580, 0x05020017, 0x4d200000, 0x4c080000,
+ 0x4c180000, 0x05d9fd13, 0x5c003000, 0x5c001000,
+ 0x58640813, 0x80040130, 0x81200580, 0x0502000c,
+ 0x82040500, 0x00ffffff, 0x59240805, 0x80040580,
+ 0x05000004, 0x812000f0, 0x80040d40, 0x4804c813,
+ 0x5c024000, 0x405e8800, 0x0501f00d, 0x5c024000,
+ 0x805cb800, 0x8060c000, 0x8058b040, 0x05fe07c7,
+ 0x800811c0, 0x05020005, 0x481bc857, 0x481fc857,
+ 0x90000541, 0x0501f003, 0x840a8d1e, 0x80000580,
+ 0x5c00c800, 0x5c00c000, 0x5c00b800, 0x5c00b000,
+ 0x1c01f000, 0x59a80249, 0x8c00050e, 0x05000003,
+ 0x8c000502, 0x05000009, 0x59cc0003, 0x82000500,
+ 0x00ff0000, 0x05020005, 0x59cc0c00, 0x80040910,
+ 0x9004050f, 0x0c01f004, 0x42000000, 0x0010e44a,
+ 0x052df694, 0x00107159, 0x00107159, 0x00107159,
+ 0x0010747f, 0x00107159, 0x0010715d, 0x00107184,
+ 0x0010718a, 0x00107159, 0x00107159, 0x00107159,
+ 0x00107159, 0x00107159, 0x00107159, 0x00107159,
+ 0x00107159, 0x4803c856, 0x42000000, 0x0010e44a,
+ 0x052df680, 0x0501f93e, 0x05000021, 0x59a800b6,
+ 0x9000048c, 0x0500101e, 0x59300407, 0x90000583,
+ 0x0502001b, 0x59cc0001, 0x5932680a, 0x813669c0,
+ 0x05000017, 0x59340802, 0x80040580, 0x82000500,
+ 0x00ffffff, 0x05020012, 0x0501fc6d, 0x05020010,
+ 0x59cc0a04, 0x59300202, 0x82001580, 0x0000ffff,
+ 0x05000003, 0x80040580, 0x05020009, 0x48066202,
+ 0x59300416, 0x8c00051a, 0x05020005, 0x611a7000,
+ 0x0501f975, 0x05000002, 0x0009f000, 0x59cc0004,
+ 0x4803c857, 0x42000000, 0x0010e449, 0x052df659,
+ 0x59cc0004, 0x4803c857, 0x42000000, 0x0010e449,
+ 0x052dfe54, 0x1c01f000, 0x0501f911, 0x0500001d,
+ 0x59a800b6, 0x9000048c, 0x0500101a, 0x59300407,
0x90000583, 0x05020017, 0x59cc0001, 0x82000500,
0x00ffffff, 0x5932680a, 0x813669c0, 0x05000011,
0x59340802, 0x82040d00, 0x00ffffff, 0x80040580,
- 0x0502000c, 0x0501fbe7, 0x0502000a, 0x59cc0a04,
+ 0x0502000c, 0x0501fc3e, 0x0502000a, 0x59cc0a04,
0x48066202, 0x59300416, 0x8c00051a, 0x05020005,
- 0x61167000, 0x0501f911, 0x05000002, 0x0005f478,
- 0x59cc0004, 0x4803c857, 0x42000000, 0x0010b2cb,
- 0x0525f1cd, 0x59cc0004, 0x4803c857, 0x59cc0000,
+ 0x61167000, 0x0501f94c, 0x05000002, 0x0009f000,
+ 0x59cc0004, 0x4803c857, 0x42000000, 0x0010e449,
+ 0x052df630, 0x59cc0004, 0x4803c857, 0x59cc0000,
0x82000500, 0xff000000, 0x59cc1001, 0x82081500,
0x00ffffff, 0x80080540, 0x4803c857, 0x4817c857,
- 0x0501fba3, 0x05d60a28, 0x0502000e, 0x05e1fcd6,
- 0x05d60a25, 0x0502000b, 0x59cc0002, 0x82000500,
- 0xff000000, 0x90000580, 0x05020299, 0x9004050f,
- 0x90000c86, 0x05d61a1c, 0x05021002, 0x0c01f003,
- 0x4803c856, 0x1c01f000, 0x0010589c, 0x0010589e,
- 0x0010589c, 0x0010589c, 0x00105906, 0x00105918,
- 0x4803c856, 0x1c01f000, 0x59a80077, 0x800001c0,
- 0x05d60a0d, 0x05fe07fb, 0x59cc0802, 0x4807c856,
- 0x8c04052e, 0x05020021, 0x42026000, 0x001104b4,
- 0x497a6416, 0x59cc0001, 0x59cc3800, 0x05fdff5b,
- 0x05020012, 0x0001fae7, 0x05020010, 0x59cc3800,
- 0x821c3d00, 0x00ffffff, 0x05e1fee0, 0x05fe07e9,
- 0x4926601d, 0x0519f80d, 0x64166407, 0x64226203,
- 0x4936600a, 0x60227001, 0x0501f8c8, 0x05d409f2,
- 0x05fc07e0, 0x0005f478, 0x4803c857, 0x61fe89ff,
- 0x417a6800, 0x59cc0001, 0x82000500, 0x00ffffff,
- 0x4802602a, 0x05fdf7ea, 0x59cc0001, 0x4803c857,
- 0x59cc3800, 0x821c3d00, 0x00ffffff, 0x4c1c0000,
- 0x05fdff3a, 0x5c003800, 0x05d609df, 0x05fe07cd,
- 0x05e1fec2, 0x05d609dc, 0x05fe07ca, 0x05f5f918,
- 0x05d609d9, 0x05fe07c7, 0x59cc0005, 0x8c000500,
- 0x05020010, 0x59340200, 0x8c00050e, 0x05d609d2,
- 0x05fe07c0, 0x59a8288c, 0x82140d00, 0x0000f000,
- 0x82040580, 0x00003000, 0x05d409cb, 0x05fc07b9,
- 0x82040580, 0x00002000, 0x05d409c7, 0x05fc07b5,
- 0x05f5fca0, 0x05020011, 0x0501f849, 0x05d409c2,
- 0x05fc07b0, 0x42026000, 0x001104b4, 0x4926601d,
- 0x4936600a, 0x497a6416, 0x0515ffd0, 0x640a6407,
- 0x64226203, 0x60227001, 0x0501f88c, 0x05d409b6,
- 0x05fc07a4, 0x0005f478, 0x0509fe03, 0x05fc07a1,
- 0x4926601d, 0x4936600a, 0x0515ffc4, 0x64126407,
- 0x59cc0c04, 0x48066202, 0x60067000, 0x0501f87f,
- 0x0004045a, 0x0005f478, 0x59cc0802, 0x8c04052e,
- 0x05020004, 0x0501f828, 0x0500000c, 0x0501f007,
- 0x0501f827, 0x05000009, 0x0501fb22, 0x05020007,
- 0x59cc0a04, 0x48066202, 0x60267001, 0x0501f86f,
- 0x05000002, 0x0005f478, 0x4933c857, 0x1c01f000,
- 0x59cc0004, 0x4803c857, 0x59a80077, 0x90000484,
- 0x05001011, 0x59cc0802, 0x8c04052e, 0x05020004,
- 0x0501f811, 0x0500000c, 0x0501f007, 0x0501f810,
- 0x05000009, 0x0501fb0b, 0x05020007, 0x59cc0a04,
- 0x48066202, 0x602a7001, 0x0501f858, 0x05000002,
- 0x0005f478, 0x4933c857, 0x42000000, 0x0010b2ca,
- 0x0525f115, 0x59cc0a04, 0x0501f002, 0x59cc0c04,
- 0x59a8000d, 0x59a81064, 0x80080400, 0x80040480,
+ 0x0501fbfa, 0x05ca0ce8, 0x05020011, 0x05d9fa49,
+ 0x05ca0ce5, 0x0502000e, 0x59cc0002, 0x82000500,
+ 0xff000000, 0x90000580, 0x05000004, 0x0501fc7c,
+ 0x050002e2, 0x0501f006, 0x9004050f, 0x90000c86,
+ 0x05ca1cd9, 0x05021002, 0x0c01f005, 0x4803c856,
+ 0x42000000, 0x0010e44a, 0x052df60e, 0x001071d5,
+ 0x001071d9, 0x001071d5, 0x001071d5, 0x00107248,
+ 0x0010725e, 0x4803c856, 0x42000000, 0x0010e44a,
+ 0x052df604, 0x59a800b6, 0x800001c0, 0x05ca0cc6,
+ 0x05fe07f9, 0x59cc0802, 0x4807c857, 0x8c04052e,
+ 0x05020024, 0x42026000, 0x00111a70, 0x497a6416,
+ 0x59cc0001, 0x59cc3800, 0x05fdfee8, 0x05020015,
+ 0x0001fb00, 0x05020013, 0x59cc3800, 0x821c3d00,
+ 0x00ffffff, 0x05d9fc3b, 0x05fe07e7, 0x4926601d,
+ 0x051dfe9f, 0x64166407, 0x64226203, 0x4936600a,
+ 0x60227001, 0x0501f8fc, 0x05c80cab, 0x05fc07de,
+ 0x42000000, 0x0010e3b9, 0x052dfde2, 0x0009f000,
+ 0x4803c857, 0x61fe89ff, 0x417a6800, 0x59cc0001,
+ 0x82000500, 0x00ffffff, 0x4802602a, 0x05fdf7e7,
+ 0x59cc0001, 0x4803c857, 0x59cc3800, 0x821c3d00,
+ 0x00ffffff, 0x4c1c0000, 0x05fdfec4, 0x5c003800,
+ 0x05ca0c95, 0x05fe07c8, 0x05d9fc1a, 0x05ca0c92,
+ 0x05fe07c5, 0x05f1fb03, 0x05ca0c8f, 0x05fe07c2,
+ 0x59cc0005, 0x8c000500, 0x05020010, 0x59340200,
+ 0x8c00050e, 0x05ca0c88, 0x05fe07bb, 0x59a828d0,
+ 0x82140d00, 0x0000f000, 0x82040580, 0x00003000,
+ 0x05c80c81, 0x05fc07b4, 0x82040580, 0x00002000,
+ 0x05c80c7d, 0x05fc07b0, 0x05f5f80b, 0x05020014,
+ 0x0501f873, 0x05c80c78, 0x05fc07ab, 0x42026000,
+ 0x00111a70, 0x4926601d, 0x4936600a, 0x497a6416,
+ 0x051dfe5f, 0x640a6407, 0x64226203, 0x60227001,
+ 0x0501f8bd, 0x05c80c6c, 0x05fc079f, 0x42000000,
+ 0x0010e3b9, 0x052dfda3, 0x0009f000, 0x0511f9c8,
+ 0x05000bfe, 0x05fc0798, 0x4926601d, 0x4936600a,
+ 0x051dfe4f, 0x64126407, 0x59cc0c04, 0x48066202,
+ 0x60067000, 0x0501f8ac, 0x000407dc, 0x0009f000,
+ 0x59cc0802, 0x8c04052e, 0x05020004, 0x0501f84e,
+ 0x0500000c, 0x0501f007, 0x0501f84d, 0x0500000b,
+ 0x0501fb6b, 0x05020009, 0x59cc0a04, 0x48066202,
+ 0x60267001, 0x0501f89c, 0x05000004, 0x0009f000,
+ 0x0501f81f, 0x05fc07fb, 0x4933c857, 0x42000000,
+ 0x0010e448, 0x052df57f, 0x59cc0004, 0x4803c857,
+ 0x59a800b6, 0x90000484, 0x05001011, 0x59cc0802,
+ 0x8c04052e, 0x05020004, 0x0501f833, 0x0500000c,
+ 0x0501f007, 0x0501f832, 0x05000009, 0x0501fb50,
+ 0x05020007, 0x59cc0a04, 0x48066202, 0x602a7001,
+ 0x0501f881, 0x05000002, 0x0009f000, 0x4933c857,
+ 0x42000000, 0x0010e448, 0x052df566, 0x4933c857,
+ 0x59300407, 0x90000585, 0x05020005, 0x59300216,
+ 0x59cc0a07, 0x80040580, 0x05000019, 0x59cc1407,
+ 0x41526000, 0x59a80898, 0x59a80099, 0x80040480,
+ 0x05000013, 0x81300800, 0x41540000, 0x80040480,
+ 0x0502100f, 0x59300202, 0x80080580, 0x05020007,
+ 0x5930002a, 0x59cc1001, 0x82081500, 0x00ffffff,
+ 0x80080580, 0x05000006, 0x91326430, 0x41540000,
+ 0x81300480, 0x05fc17f4, 0x05c9fb44, 0x4933c857,
+ 0x1c01f000, 0x59cc0a04, 0x0501f002, 0x59cc0c04,
+ 0x59a804dd, 0x59a8109a, 0x80080400, 0x80040480,
0x05021007, 0x800400ca, 0x800408c8, 0x80040c00,
- 0x82066400, 0x00110514, 0x1c01f000, 0x80000580,
+ 0x82066400, 0x00111b00, 0x1c01f000, 0x80000580,
0x05fdf7fe, 0x4803c856, 0x90040507, 0x0c01f001,
- 0x0010594c, 0x0010595f, 0x00105972, 0x00105981,
- 0x00105981, 0x00105981, 0x00105981, 0x00105981,
- 0x59cc0802, 0x8c04052e, 0x0500000e, 0x05fdffe4,
+ 0x001072b4, 0x001072c9, 0x001072de, 0x001072ed,
+ 0x001072ed, 0x001072ed, 0x001072ed, 0x001072ed,
+ 0x59cc0802, 0x8c04052e, 0x05000010, 0x05fdffe4,
0x05000007, 0x59cc0802, 0x90040d30, 0x90040d90,
- 0x05000004, 0x61827000, 0x0005f478, 0x1c01f000,
- 0x59300416, 0x8400055c, 0x48026416, 0x0515f6ac,
- 0x05fdffd5, 0x05fc07fa, 0x05fdf7f3, 0x59cc0802,
- 0x8c04052e, 0x0500000e, 0x05fdffd1, 0x05000007,
- 0x59cc0802, 0x90040d30, 0x90040d90, 0x05000004,
- 0x61867000, 0x0005f478, 0x1c01f000, 0x59300416,
- 0x8400055c, 0x48026416, 0x0515f699, 0x05fdffc2,
- 0x05fc07fa, 0x05fdf7f3, 0x82140500, 0x0000f000,
+ 0x05000006, 0x61827000, 0x0009f000, 0x42000000,
+ 0x0010e448, 0x052df51b, 0x59300416, 0x8400055c,
+ 0x48026416, 0x051df50f, 0x05fdffd3, 0x05fc07f8,
+ 0x05fdf7f1, 0x59cc0802, 0x8c04052e, 0x05000010,
+ 0x05fdffcf, 0x05000007, 0x59cc0802, 0x90040d30,
+ 0x90040d90, 0x05000006, 0x61867000, 0x0009f000,
+ 0x42000000, 0x0010e448, 0x052df506, 0x59300416,
+ 0x8400055c, 0x48026416, 0x051df4fa, 0x05fdffbe,
+ 0x05fc07f8, 0x05fdf7f1, 0x82140500, 0x0000f000,
0x82000580, 0x00002000, 0x0502000b, 0x59cc0802,
- 0x8c04052e, 0x05000008, 0x05fdffb9, 0x05000006,
+ 0x8c04052e, 0x05000008, 0x05fdffb5, 0x05000006,
0x59300416, 0x8c000510, 0x05000003, 0x618a7000,
- 0x0005f478, 0x1c01f000, 0x59a8288c, 0x8c14051a,
- 0x0500000c, 0x4803c856, 0x4d300000, 0x5930100a,
- 0x4c080000, 0x0509fd74, 0x5c001000, 0x05000003,
- 0x59cc2a04, 0x0501f903, 0x5c026000, 0x1c01f000,
- 0x90000541, 0x1c01f000, 0x4803c856, 0x4c0c0000,
- 0x4d340000, 0x5932680a, 0x59a81a1b, 0x05f9f99b,
- 0x05020021, 0x813669c0, 0x05000018, 0x83340580,
- 0x0010ce8f, 0x05000015, 0x59340403, 0x82000580,
- 0x000007fe, 0x05020011, 0x59cc0408, 0x8c000518,
- 0x05000015, 0x5930001d, 0x82000580, 0x0010b391,
+ 0x0009f000, 0x42000000, 0x0010e448, 0x052dfced,
+ 0x1c01f000, 0x59a828d0, 0x8c14051a, 0x0500000c,
+ 0x4803c856, 0x4d300000, 0x5930100a, 0x4c080000,
+ 0x0511f90b, 0x5c001000, 0x05000003, 0x59cc2a04,
+ 0x0501f910, 0x5c026000, 0x1c01f000, 0x90000541,
+ 0x1c01f000, 0x4803c856, 0x4c0c0000, 0x4d340000,
+ 0x59cc0006, 0x82000500, 0xffff0000, 0x82000580,
+ 0x01000000, 0x05000028, 0x5932680a, 0x59a81a49,
+ 0x05f5fda2, 0x05020024, 0x813669c0, 0x0500001b,
+ 0x83340580, 0x00110210, 0x05000018, 0x59340403,
+ 0x82000580, 0x000007fe, 0x05020014, 0x59cc0408,
+ 0x8c000518, 0x05000018, 0x5930001d, 0x82000580,
+ 0x0010e512, 0x05020014, 0x59a804cc, 0x8c00050a,
0x05020011, 0x59cc0207, 0x80000540, 0x05020002,
- 0x60040000, 0x48038893, 0x48035012, 0x84000560,
+ 0x60040000, 0x48038893, 0x48035040, 0x84000560,
0x480388b3, 0x0501f008, 0x59300403, 0x90000582,
0x05000003, 0x91380597, 0x05020003, 0x8c0c0508,
0x05fe07f1, 0x5c026800, 0x5c001800, 0x1c01f000,
- 0x59a8288c, 0x8c14051a, 0x05000018, 0x4803c856,
- 0x4d300000, 0x4c5c0000, 0x4130b800, 0x0509fd3a,
+ 0x59a828d0, 0x8c14051a, 0x05000018, 0x4803c856,
+ 0x4d300000, 0x4c5c0000, 0x4130b800, 0x0511f8c8,
0x0500000f, 0x485e602a, 0x585c0407, 0x90000581,
- 0x05020008, 0x4d300000, 0x405e6000, 0x0515fe31,
+ 0x05020008, 0x4d300000, 0x405e6000, 0x051dfc86,
0x5c026000, 0x05000003, 0x4a026416, 0x00000080,
- 0x585c100a, 0x59cc2a04, 0x0501f8be, 0x5c00b800,
+ 0x585c100a, 0x59cc2a04, 0x0501f8c2, 0x5c00b800,
0x5c026000, 0x1c01f000, 0x90000541, 0x1c01f000,
- 0x59a8288c, 0x8c14051a, 0x05000011, 0x4803c856,
+ 0x59a828d0, 0x8c14051a, 0x05000011, 0x4803c856,
0x4d300000, 0x4c5c0000, 0x4130b800, 0x4a026416,
- 0x00000100, 0x0509fd1c, 0x05000006, 0x485e602a,
- 0x585c2c02, 0x585c100a, 0x405c2000, 0x0501f8ad,
+ 0x00000100, 0x0511f8aa, 0x05000006, 0x485e602a,
+ 0x585c2c02, 0x585c100a, 0x405c2000, 0x0501f8b1,
0x5c00b800, 0x5c026000, 0x1c01f000, 0x90000541,
- 0x1c01f000, 0x59a8288c, 0x8c14051a, 0x05000016,
+ 0x1c01f000, 0x59a828d0, 0x8c14051a, 0x05000017,
0x4803c856, 0x4d300000, 0x4c5c0000, 0x4130b800,
- 0x4a026416, 0x00000100, 0x0509fd07, 0x0500000b,
- 0x493a6403, 0x485e602a, 0x0515fe02, 0x05000003,
- 0x4a026416, 0x00000080, 0x585c2c02, 0x585c100a,
- 0x405c2000, 0x0501f893, 0x5c00b800, 0x5c026000,
- 0x1c01f000, 0x90000541, 0x1c01f000, 0x4803c856,
- 0x4c600000, 0x4c640000, 0x4c5c0000, 0x4d200000,
- 0x4d240000, 0x4200c000, 0x0010ce81, 0x5930c80a,
- 0x8064c9c0, 0x05020015, 0x58603800, 0x821c3d00,
- 0x00ffffff, 0x4c1c0000, 0x05e1fd7c, 0x5c003800,
- 0x05020061, 0x4d340000, 0x58600001, 0x82000500,
- 0x00ffffff, 0x0501f9e0, 0x05d20fd1, 0x4936600a,
- 0x59341200, 0x5c026800, 0x0501fa13, 0x4a026416,
- 0x00000100, 0x65126403, 0x58601006, 0x82081500,
- 0x0000f000, 0x82080480, 0x00002000, 0x05001055,
- 0x42002000, 0xc0000000, 0x5930100a, 0x58080200,
- 0x8c000508, 0x05000056, 0x8c00050c, 0x05000013,
- 0x8c000504, 0x0500000a, 0x58602a02, 0x82142d00,
- 0x00003000, 0x82140580, 0x00001000, 0x0500000b,
- 0x82140580, 0x00002000, 0x05000044, 0x8064c9c0,
- 0x05000004, 0x58600402, 0x8c000526, 0x0500003d,
- 0x42002000, 0xc1000000, 0x41783000, 0x4130b800,
- 0x0509fcb5, 0x05000030, 0x58601804, 0x8064c9c0,
- 0x05020006, 0x65126403, 0x585c0402, 0x820c1d00,
- 0xffff0000, 0x800c1d40, 0x58600000, 0x58600801,
- 0x58601003, 0x82000500, 0x00ffffff, 0x82040d00,
- 0x00ffffff, 0x4a026416, 0x00000100, 0x485e602a,
- 0x48026019, 0x4806601a, 0x480a601c, 0x480e601d,
- 0x585c380a, 0x581c0a12, 0x82040d00, 0x0000ff00,
- 0x800000e0, 0x80040540, 0x90000561, 0x48026018,
- 0x585c0416, 0x58600802, 0x585c1407, 0x8c00051c,
- 0x05020022, 0x4806601b, 0x480a6407, 0x643e6203,
- 0x640e6006, 0x0509faf9, 0x4c100000, 0x0501fd62,
- 0x5c002000, 0x82100580, 0xc2000000, 0x05020015,
+ 0x4a026416, 0x00000100, 0x0511f895, 0x05000acb,
+ 0x0500000b, 0x493a6403, 0x485e602a, 0x051dfc56,
+ 0x05000003, 0x4a026416, 0x00000080, 0x585c2c02,
+ 0x585c100a, 0x405c2000, 0x0501f896, 0x5c00b800,
+ 0x5c026000, 0x1c01f000, 0x90000541, 0x1c01f000,
+ 0x4803c856, 0x4c600000, 0x4c640000, 0x4c5c0000,
+ 0x4d200000, 0x4d240000, 0x4200c000, 0x00110202,
+ 0x5930c80a, 0x8064c9c0, 0x05020015, 0x58603800,
+ 0x821c3d00, 0x00ffffff, 0x4c1c0000, 0x05d9fa99,
+ 0x5c003800, 0x05020064, 0x4d340000, 0x58600001,
+ 0x82000500, 0x00ffffff, 0x0501f9f2, 0x05ca0a43,
+ 0x4936600a, 0x59341200, 0x5c026800, 0x0501fa25,
+ 0x4a026416, 0x00000100, 0x65126403, 0x58601006,
+ 0x82081500, 0x0000f000, 0x82080480, 0x00002000,
+ 0x05001058, 0x42002000, 0xc0000000, 0x5930100a,
+ 0x58080200, 0x8c000508, 0x05000059, 0x8c00050c,
+ 0x05000015, 0x8c000504, 0x0500000a, 0x58602a02,
+ 0x82142d00, 0x00003000, 0x82140580, 0x00001000,
+ 0x0500000d, 0x82140580, 0x00002000, 0x05000047,
+ 0x8064c9c0, 0x05000004, 0x58600402, 0x8c000526,
+ 0x05000040, 0x42002000, 0xc1000000, 0x41783000,
+ 0x0501f002, 0x60043000, 0x4130b800, 0x0511f840,
+ 0x05000031, 0x58601804, 0x8064c9c0, 0x05020006,
+ 0x65126403, 0x585c0402, 0x820c1d00, 0xffff0000,
+ 0x800c1d40, 0x58600000, 0x58600801, 0x58601003,
+ 0x82000500, 0x00ffffff, 0x82040d00, 0x00ffffff,
+ 0x4a026416, 0x00000100, 0x485e602a, 0x48026019,
+ 0x4806601a, 0x480a601c, 0x480e601d, 0x585c380a,
+ 0x581c0a12, 0x82040d00, 0x0000ff00, 0x800000e0,
+ 0x80040540, 0x90000561, 0x48026018, 0x585c0416,
+ 0x58600802, 0x585c1407, 0x8c00051c, 0x05020023,
+ 0x48026416, 0x4806601b, 0x480a6407, 0x643e6203,
+ 0x640e6006, 0x4c100000, 0x050dfd7d, 0x0505fc73,
+ 0x5c002000, 0x82100580, 0xc2000000, 0x05000015,
0x90000541, 0x405e6000, 0x5c024800, 0x5c024000,
0x5c00b800, 0x5c00c800, 0x5c00c000, 0x1c01f000,
0x90000541, 0x05fdf7f9, 0x42002000, 0xc2000000,
- 0x42003000, 0x02120000, 0x05fdf7c1, 0x42002000,
- 0xc2000000, 0x42003000, 0x01050000, 0x05fdf7bc,
- 0x80000580, 0x05fdf7ec, 0x90040d50, 0x05fdf7de,
+ 0x42003000, 0x02120000, 0x05fdf7c0, 0x42002000,
+ 0xc2000000, 0x42003000, 0x01050000, 0x05fdf7bb,
+ 0x80000580, 0x05fdf7ec, 0x90040d50, 0x05fdf7dd,
0x4803c856, 0x41782000, 0x0501f805, 0x1c01f000,
0x4803c856, 0x0501f802, 0x1c01f000, 0x4813c857,
0x59300416, 0x84000550, 0x48026416, 0x4816621d,
- 0x480a600a, 0x82080580, 0x0010ce8f, 0x05020002,
+ 0x480a600a, 0x82080580, 0x00110210, 0x05020002,
0x41781000, 0x493a6403, 0x643e6203, 0x59cc0000,
0x82000500, 0x00ffffff, 0x48026019, 0x82000500,
0x000000ff, 0x800000e0, 0x59cc0801, 0x82040d00,
@@ -18635,587 +7472,1247 @@ static const uint32_t isp_2500_multi_risc_code[] = {
0x800811c0, 0x0500000a, 0x58080a12, 0x0501f002,
0x800408d0, 0x80040540, 0x90000561, 0x4803c857,
0x4807c857, 0x48026018, 0x0501f00e, 0x4c000000,
- 0x4c040000, 0x05f9f875, 0x5c000800, 0x5c000000,
- 0x05000007, 0x59a81a1b, 0x8c0c0506, 0x05fc07f1,
+ 0x4c040000, 0x05f5fc75, 0x5c000800, 0x5c000000,
+ 0x05000007, 0x59a81a49, 0x8c0c0506, 0x05fc07f1,
0x90000561, 0x48026018, 0x0501f002, 0x64866018,
0x59cc0404, 0x4802641d, 0x59cc0002, 0x4802601b,
0x59cc0403, 0x4802641c, 0x59cc0203, 0x4802621c,
0x801021c0, 0x05000002, 0x64082008, 0x42002800,
- 0xc0000000, 0x800811c0, 0x0500000d, 0x58080200,
- 0x8c000508, 0x05000015, 0x8c00050c, 0x05000008,
- 0x8c000504, 0x05020019, 0x42002800, 0xc1000000,
+ 0xc0000000, 0x800811c0, 0x05000010, 0x58080200,
+ 0x8c000508, 0x05000018, 0x8c00050c, 0x0500000b,
+ 0x8c000504, 0x0502001c, 0x42002800, 0xc1000000,
0x801021c0, 0x05000002, 0x64082008, 0x40142000,
- 0x41783000, 0x0509fa85, 0x0501fcef, 0x90000541,
- 0x1c01f000, 0x42002000, 0xc2000000, 0x42003000,
- 0x02120000, 0x0501f005, 0x42002000, 0xc2000000,
- 0x42003000, 0x01050000, 0x0509fa78, 0x0501fce2,
- 0x80000580, 0x05fdf7f3, 0x59cc1002, 0x82081500,
- 0x00003000, 0x82080580, 0x00001000, 0x05fc07e8,
- 0x82080580, 0x00002000, 0x05fc07eb, 0x05fdf7df,
- 0x59cc0802, 0x8c04052e, 0x0502001d, 0x05fdfe2e,
- 0x0500001b, 0x59300407, 0x90000586, 0x05020018,
- 0x59cc0001, 0x82000500, 0x00ffffff, 0x5932680a,
- 0x813669c0, 0x05000012, 0x59340802, 0x82040d00,
- 0x00ffffff, 0x80040580, 0x0502000d, 0x0501f93d,
- 0x0502000b, 0x59a80077, 0x800001c0, 0x05020008,
- 0x61467000, 0x59300416, 0x8c00051a, 0x05020004,
- 0x05fdfebc, 0x05000002, 0x0005f478, 0x59cc0004,
- 0x4803c857, 0x42000000, 0x0010b2cb, 0x0521f722,
- 0x4803c856, 0x60143002, 0x0501f004, 0x601c3004,
- 0x0501f802, 0x1c01f000, 0x481bc857, 0x4c5c0000,
- 0x4c600000, 0x4c640000, 0x41ccc800, 0x4014b800,
- 0x4018c000, 0x0501f805, 0x5c00c800, 0x5c00c000,
- 0x5c00b800, 0x1c01f000, 0x4803c856, 0x4c580000,
- 0x58640400, 0x82000500, 0x0000f000, 0x82000580,
- 0x0000c000, 0x05000021, 0x0509fbbf, 0x0500001f,
- 0x58640001, 0x58643800, 0x821c3d00, 0x00ffffff,
- 0x4c1c0000, 0x05fdfcc1, 0x5c003800, 0x05020019,
- 0x05e1fc4a, 0x05020017, 0x05f1fea1, 0x05020015,
- 0x4936600a, 0x0515fd75, 0x05d5fa2e, 0x05000011,
- 0x4926601d, 0x492e6019, 0x497a5800, 0x497a5a05,
- 0x485e5c05, 0x912cac06, 0x601cb000, 0x4064a000,
- 0x0521ffb8, 0x4862641c, 0x64fa6403, 0x64066407,
- 0x64066203, 0x0501fc87, 0x5c00b000, 0x1c01f000,
- 0x0005fc5a, 0x05fdf7fd, 0x4803c856, 0x59cc0400,
- 0x82000d00, 0x0000ff00, 0x82040500, 0x0000f000,
- 0x840409c0, 0x82000580, 0x00002000, 0x05020055,
- 0x900405a2, 0x05020040, 0x59c400a4, 0x9000050f,
- 0x90000c87, 0x05001003, 0x9000048c, 0x05001064,
- 0x59cc0006, 0x82000500, 0xffff0000, 0x82000d80,
- 0x04000000, 0x0500005e, 0x82000d80, 0x60000000,
- 0x0500005b, 0x82000d80, 0x54000000, 0x05000058,
- 0x82000d80, 0x03000000, 0x0502001e, 0x59a80a1b,
- 0x8c040508, 0x05020052, 0x8c040502, 0x05020060,
- 0x82000d80, 0x03000000, 0x05020008, 0x82140d00,
- 0x0000f000, 0x82040d80, 0x00003000, 0x05020003,
- 0x05f5ffa2, 0x05000046, 0x05f5f93c, 0x05000046,
- 0x59a80018, 0x800000d0, 0x59a8080f, 0x82040d00,
- 0x000000ff, 0x80040540, 0x59cc0800, 0x82040d00,
- 0x00ffffff, 0x80040580, 0x05020037, 0x0501f038,
- 0x59c40802, 0x8c04050c, 0x0502001e, 0x82000d80,
- 0x52000000, 0x05fc07ed, 0x82000d80, 0x05000000,
- 0x05fc07ea, 0x82000d80, 0x50000000, 0x05fc07e7,
- 0x0501f029, 0x900405a3, 0x05020027, 0x05fdfd84,
- 0x05000025, 0x59300c03, 0x90040582, 0x05000024,
- 0xb0040591, 0x05000022, 0x0501f00a, 0x05fdfd7c,
- 0x0500001d, 0x59300403, 0x90000582, 0x0502001a,
- 0x59300203, 0x9000058e, 0x05020017, 0x0501f018,
- 0x59a8021b, 0x8c000514, 0x05fc07f5, 0x4c580000,
- 0x0521ff9e, 0xb0582481, 0x5c00b000, 0x0500100e,
- 0x59cc0800, 0x82040d00, 0x00ffffff, 0x42001000,
- 0x0010b651, 0x58080005, 0x80040580, 0x05000008,
- 0x801021c0, 0x05000004, 0x80102040, 0x9008140b,
- 0x05fdf7f9, 0x80000580, 0x0501f002, 0x90000541,
- 0x1c01f000, 0x59cc0006, 0x82000500, 0xffff0000,
- 0x82000d80, 0x03000000, 0x05000004, 0x82000d80,
- 0x52000000, 0x05fe07f4, 0x59a8021b, 0x90000509,
- 0x90000588, 0x05fc07f2, 0x05fdf7ef, 0x59a8288c,
- 0x82140500, 0x0000f000, 0x82000580, 0x00003000,
- 0x05fe07eb, 0x05f5ff45, 0x05fe07e9, 0x59a80018,
- 0x800000d0, 0x59a8080f, 0x82040d00, 0x000000ff,
+ 0x41783000, 0x0501f003, 0x40142000, 0x60043000,
+ 0x050dfd07, 0x0505fbfd, 0x90000541, 0x1c01f000,
+ 0x42002000, 0xc2000000, 0x42003000, 0x02120000,
+ 0x0501f005, 0x42002000, 0xc2000000, 0x42003000,
+ 0x01050000, 0x050dfcfa, 0x0505fbf0, 0x80000580,
+ 0x05fdf7f3, 0x59cc1002, 0x82081500, 0x00003000,
+ 0x82080580, 0x00001000, 0x05fc07e8, 0x82080580,
+ 0x00002000, 0x05fc07eb, 0x05fdf7dc, 0x59cc0802,
+ 0x8c04052e, 0x0502001d, 0x05fdfe17, 0x0500001b,
+ 0x59300407, 0x90000586, 0x05020018, 0x59cc0001,
+ 0x82000500, 0x00ffffff, 0x5932680a, 0x813669c0,
+ 0x05000012, 0x59340802, 0x82040d00, 0x00ffffff,
+ 0x80040580, 0x0502000d, 0x0501f949, 0x0502000b,
+ 0x59a800b6, 0x800001c0, 0x05020008, 0x61467000,
+ 0x59300416, 0x8c00051a, 0x05020004, 0x05fdfeb5,
+ 0x05000002, 0x0009f000, 0x59cc0004, 0x4803c857,
+ 0x42000000, 0x0010e449, 0x052df33a, 0x4803c856,
+ 0x60143002, 0x0501f004, 0x601c3004, 0x0501f802,
+ 0x1c01f000, 0x481bc857, 0x4c5c0000, 0x4c600000,
+ 0x4c640000, 0x41ccc800, 0x4014b800, 0x4018c000,
+ 0x0501f805, 0x5c00c800, 0x5c00c000, 0x5c00b800,
+ 0x1c01f000, 0x4803c856, 0x4c580000, 0x58640400,
+ 0x82000500, 0x0000f000, 0x82000580, 0x0000c000,
+ 0x05000024, 0x050dff46, 0x05000025, 0x58640001,
+ 0x58643800, 0x821c3d00, 0x00ffffff, 0x4c1c0000,
+ 0x05fdfc0a, 0x5c003800, 0x0502001c, 0x05d9f961,
+ 0x0502001a, 0x05f1f84b, 0x05020018, 0x4936600a,
+ 0x051dfbc3, 0x05c9fcb5, 0x05000014, 0x4926601d,
+ 0x492e6019, 0x497a5800, 0x497a5a08, 0x485e5c08,
+ 0x912cac09, 0x601cb000, 0x4064a000, 0x052dfbd0,
+ 0x42000000, 0x0010e3b7, 0x052dfb02, 0x4862641c,
+ 0x64fa6403, 0x64066407, 0x64066203, 0x0505fb92,
+ 0x5c00b000, 0x1c01f000, 0x0005ffdc, 0x42000000,
+ 0x0010e448, 0x052dfaf7, 0x05fdf7fa, 0x4803c856,
+ 0x59cc0000, 0x82000d00, 0x00ffffff, 0x82040580,
+ 0x00fffff0, 0x05000075, 0x59cc0400, 0x82000d00,
+ 0x0000ff00, 0x82040500, 0x0000f000, 0x840409c0,
+ 0x82000580, 0x00002000, 0x05020055, 0x900405a2,
+ 0x05020040, 0x59c400a4, 0x9000050f, 0x90000c87,
+ 0x05001003, 0x9000048c, 0x05001064, 0x59cc0006,
+ 0x82000500, 0xffff0000, 0x82000d80, 0x04000000,
+ 0x0500005e, 0x82000d80, 0x60000000, 0x0500005b,
+ 0x82000d80, 0x54000000, 0x05000058, 0x82000d80,
+ 0x03000000, 0x0502001e, 0x59a80a49, 0x8c040508,
+ 0x05020052, 0x8c040502, 0x05020060, 0x82000d80,
+ 0x03000000, 0x05020008, 0x82140d00, 0x0000f000,
+ 0x82040d80, 0x00003000, 0x05020003, 0x05f5fb93,
+ 0x05000046, 0x05f1fbbb, 0x05000046, 0x59a80046,
+ 0x800000d0, 0x59a8083d, 0x82040d00, 0x000000ff,
0x80040540, 0x59cc0800, 0x82040d00, 0x00ffffff,
- 0x80040580, 0x05fc07de, 0x60043002, 0x05fdff2f,
- 0x05fdf7d9, 0x4803c857, 0x4c580000, 0x40003000,
- 0x61c0200f, 0x6040b000, 0x59247009, 0x50380000,
- 0x80026d40, 0x05000013, 0x59340002, 0x82000500,
- 0x00ffffff, 0x80180580, 0x0502000e, 0x59341013,
- 0x80080130, 0x81200580, 0x0502000a, 0x82080500,
- 0x00ffffff, 0x59240805, 0x80040580, 0x05000011,
- 0x812000f0, 0x80040d40, 0x48066813, 0x0501f00d,
- 0x80102000, 0x80387000, 0x8058b040, 0x05fe07e8,
- 0x82100480, 0x00000800, 0x60002000, 0x61c0b00f,
- 0x41ac7000, 0x05fe17e2, 0x90000541, 0x0501f002,
- 0x40128800, 0x5c00b000, 0x1c01f000, 0x59a8021b,
- 0x8c00050e, 0x05000004, 0x8c000502, 0x05000003,
- 0x80000580, 0x1c01f000, 0x90000541, 0x05fdf7fe,
- 0x59300c07, 0x90040582, 0x05000002, 0x90040585,
- 0x1c01f000, 0x60080800, 0x8c080508, 0x05000007,
- 0x8c08050c, 0x05000004, 0x8c080504, 0x05020004,
- 0x90040d44, 0x48066008, 0x1c01f000, 0x42001800,
- 0x0010ce81, 0x580c1202, 0x82081500, 0x00003000,
- 0x82080580, 0x00001000, 0x05fc07f7, 0x82080580,
- 0x00002000, 0x05fc07f5, 0x05fdf7f2, 0x59c80000,
- 0x84000558, 0x84000512, 0x48039000, 0x1c01f000,
- 0x59cc0800, 0x59340013, 0x80040580, 0x82000500,
- 0x00ffffff, 0x1c01f000, 0x82140500, 0x0000f000,
+ 0x80040580, 0x05020037, 0x0501f038, 0x59c40802,
+ 0x8c04050c, 0x0502001e, 0x82000d80, 0x52000000,
+ 0x05fc07ed, 0x82000d80, 0x05000000, 0x05fc07ea,
+ 0x82000d80, 0x50000000, 0x05fc07e7, 0x0501f029,
+ 0x900405a3, 0x05020027, 0x05fdfd61, 0x05000025,
+ 0x59300c03, 0x90040582, 0x05000024, 0xb0040591,
+ 0x05000022, 0x0501f00a, 0x05fdfd59, 0x0500001d,
+ 0x59300403, 0x90000582, 0x0502001a, 0x59300203,
+ 0x9000058e, 0x05020017, 0x0501f018, 0x59a80249,
+ 0x8c000514, 0x05fc07f5, 0x4c580000, 0x052dfba5,
+ 0xb0582481, 0x5c00b000, 0x0500100e, 0x59cc0800,
+ 0x82040d00, 0x00ffffff, 0x42001000, 0x0010e852,
+ 0x58080005, 0x80040580, 0x05000008, 0x801021c0,
+ 0x05000004, 0x80102040, 0x9008140d, 0x05fdf7f9,
+ 0x80000580, 0x0501f002, 0x90000541, 0x1c01f000,
+ 0x59cc0006, 0x82000500, 0xffff0000, 0x82000d80,
+ 0x03000000, 0x05000004, 0x82000d80, 0x52000000,
+ 0x05fe07f4, 0x59a80249, 0x90000509, 0x90000588,
+ 0x05fc07f2, 0x05fdf7ef, 0x59a828d0, 0x82140500,
+ 0x0000f000, 0x82000580, 0x00003000, 0x05fe07eb,
+ 0x05f5fb36, 0x05fe07e9, 0x59a80046, 0x800000d0,
+ 0x59a8083d, 0x82040d00, 0x000000ff, 0x80040540,
+ 0x59cc0800, 0x82040d00, 0x00ffffff, 0x80040580,
+ 0x05fc07de, 0x60043002, 0x05fdff23, 0x05fdf7d9,
+ 0x4803c857, 0x4c580000, 0x40003000, 0x61c0200f,
+ 0x6040b000, 0x59247009, 0x50380000, 0x80026d40,
+ 0x05000013, 0x59340002, 0x82000500, 0x00ffffff,
+ 0x80180580, 0x0502000e, 0x59341013, 0x80080130,
+ 0x81200580, 0x0502000a, 0x82080500, 0x00ffffff,
+ 0x59240805, 0x80040580, 0x05000011, 0x812000f0,
+ 0x80040d40, 0x48066813, 0x0501f00d, 0x80102000,
+ 0x80387000, 0x8058b040, 0x05fe07e8, 0x82100480,
+ 0x00000800, 0x60002000, 0x61c0b00f, 0x41ac7000,
+ 0x05fe17e2, 0x90000541, 0x0501f002, 0x40128800,
+ 0x5c00b000, 0x1c01f000, 0x59a80249, 0x8c00050e,
+ 0x05000004, 0x8c000502, 0x05000003, 0x80000580,
+ 0x1c01f000, 0x90000541, 0x05fdf7fe, 0x59300c07,
+ 0x90040582, 0x05000002, 0x90040585, 0x1c01f000,
+ 0x60080800, 0x8c080508, 0x05000007, 0x8c08050c,
+ 0x05000004, 0x8c080504, 0x05020004, 0x90040d44,
+ 0x48066008, 0x1c01f000, 0x42001800, 0x00110202,
+ 0x580c1202, 0x82081500, 0x00003000, 0x82080580,
+ 0x00001000, 0x05fc07f7, 0x82080580, 0x00002000,
+ 0x05fc07f5, 0x05fdf7f2, 0x59c80000, 0x84000558,
+ 0x84000512, 0x48039000, 0x1c01f000, 0x59cc0800,
+ 0x59340013, 0x82000500, 0x00ffffff, 0x80040580,
+ 0x82000500, 0x00ffffff, 0x0502000b, 0x59a808d0,
+ 0x8c040516, 0x05000008, 0x42000800, 0x001102fe,
+ 0x50040800, 0x59340014, 0x80040580, 0x82000500,
+ 0x00001fff, 0x1c01f000, 0x82140500, 0x0000f000,
0x05000006, 0x82000c80, 0x00004000, 0x0502100a,
0x80000580, 0x1c01f000, 0x59cc0400, 0x82000500,
0x0000ff00, 0x82000580, 0x00008100, 0x05fc07fa,
0x0501f012, 0x4817c857, 0x82140500, 0x000003ff,
0x05020007, 0x59cc0400, 0x82000500, 0x0000ff00,
0x82000580, 0x00008100, 0x05020008, 0x42000000,
- 0x0010b330, 0x0521fdd4, 0x05fdfeb2, 0x4803c856,
+ 0x0010e4ae, 0x052df9d3, 0x05fdfe99, 0x4803c856,
0x90000541, 0x05fdf7e8, 0x41780000, 0x05fdf7e6,
- 0x05f5feba, 0x0500000e, 0x59c400a4, 0x4803c857,
- 0x9000050f, 0x9000058a, 0x05020009, 0x497b5077,
+ 0x05f5fa9e, 0x0500000e, 0x59c400a4, 0x4803c857,
+ 0x9000050f, 0x9000058a, 0x05020009, 0x497b50b6,
0x59c400a3, 0x82000540, 0x00080000, 0x480388a3,
- 0x82000500, 0xfff7ffff, 0x480388a3, 0x4817c856,
- 0x0521f502, 0x4a032824, 0x000003e8, 0x4a032802,
- 0x00110514, 0x64032800, 0x4a032808, 0x001065e8,
- 0x60140000, 0x91947c09, 0x49787801, 0x4a007804,
- 0x00106593, 0x903c7c05, 0x80000040, 0x05fe07fb,
- 0x4a032823, 0xffff0000, 0x6191d000, 0x0501f9c6,
- 0x4201d000, 0x000186a0, 0x0501f1d3, 0x00000000,
- 0x00000005, 0x0000000a, 0x0000000f, 0x00000014,
- 0x00000002, 0x00000008, 0x00000020, 0x00000080,
- 0x00000200, 0x4d300000, 0x4d2c0000, 0x4d340000,
- 0x4d400000, 0x4cfc0000, 0x4d380000, 0x4d3c0000,
- 0x4d440000, 0x4d4c0000, 0x4d480000, 0x4c5c0000,
- 0x4c600000, 0x4c640000, 0x0005fa04, 0x5c00c800,
+ 0x82000500, 0xfff7ffff, 0x480388a3, 0x4c140000,
+ 0x05e9faf6, 0x05020016, 0x916c0583, 0x05000014,
+ 0x42000000, 0x0010e4c0, 0x052df9b9, 0x59c40006,
+ 0x84000500, 0x48038806, 0x0509fa2b, 0x497b8880,
+ 0x59c400a3, 0x82000500, 0xfcf8ffff, 0x480388a3,
+ 0x6012d800, 0x64078805, 0x05c9f9cc, 0x05d1fed9,
+ 0x497b5068, 0x64075075, 0x05d5fb17, 0x5c002800,
+ 0x4817c856, 0x052df0e9, 0x42000000, 0x0010e3b8,
+ 0x052df9a0, 0x80000580, 0x1c01f000, 0x82140500,
+ 0x0000f000, 0x82006d80, 0x00003000, 0x05000003,
+ 0x82006d80, 0x00005000, 0x1c01f000, 0x4a032824,
+ 0x000003e8, 0x4a032802, 0x00111b00, 0x64032800,
+ 0x4a032808, 0x001089a9, 0x60140000, 0x91947c09,
+ 0x49787801, 0x4a007804, 0x00108954, 0x903c7c05,
+ 0x80000040, 0x05fe07fb, 0x4a032823, 0xffff0000,
+ 0x497b2832, 0x4a032833, 0x00103e7f, 0x0501fb54,
+ 0x6191d000, 0x0501f9c2, 0x4201d000, 0x000186a0,
+ 0x0501f1cf, 0x00000000, 0x00000005, 0x0000000a,
+ 0x0000000f, 0x00000014, 0x00000002, 0x00000008,
+ 0x00000020, 0x00000080, 0x00000200, 0x4d300000,
+ 0x4d2c0000, 0x4d340000, 0x4d400000, 0x4cfc0000,
+ 0x4d380000, 0x4d3c0000, 0x4d440000, 0x4d4c0000,
+ 0x4d480000, 0x4c5c0000, 0x4c600000, 0x4c640000,
+ 0x4d040000, 0x0005fc98, 0x5c020800, 0x5c00c800,
0x5c00c000, 0x5c00b800, 0x5c029000, 0x5c029800,
0x5c028800, 0x5c027800, 0x5c027000, 0x5c01f800,
0x5c028000, 0x5c026800, 0x5c025800, 0x5c026000,
- 0x1c01f000, 0x59940004, 0x80000540, 0x05020008,
- 0x5994002f, 0x80040400, 0x05d01d25, 0x48032804,
- 0x480b2805, 0x642b2803, 0x80000580, 0x1c01f000,
- 0x59940029, 0x80000540, 0x05020008, 0x5994002f,
- 0x80040400, 0x05d01d1a, 0x48032829, 0x480b282a,
- 0x64072828, 0x80000580, 0x1c01f000, 0x40680800,
- 0x406c1000, 0x5994002c, 0x80000540, 0x05020008,
- 0x5994002f, 0x80040400, 0x05d01d0d, 0x4803282c,
- 0x480b282d, 0x642b282b, 0x80000580, 0x1c01f000,
- 0x4c000000, 0x59940005, 0x80080580, 0x05020003,
- 0x497b2804, 0x497b2805, 0x5c000000, 0x1c01f000,
- 0x40681000, 0x05fdfff7, 0x1c01f000, 0x4c000000,
- 0x5994002a, 0x80080580, 0x05020003, 0x497b2829,
- 0x497b282a, 0x5c000000, 0x1c01f000, 0x4c000000,
- 0x5994002d, 0x80080580, 0x05020003, 0x497b282c,
- 0x497b282d, 0x5c000000, 0x1c01f000, 0x4937c857,
- 0x48ebc857, 0x59340203, 0x80e80480, 0x05001002,
- 0x48ea6a03, 0x1c01f000, 0x4d440000, 0x60407800,
- 0x59968801, 0x0001fae7, 0x05020059, 0x59341a03,
- 0x800c1840, 0x05001015, 0x59940031, 0x800c0480,
- 0x05000003, 0x48026a03, 0x05021010, 0x5934000f,
- 0x497a6a03, 0x80000540, 0x0500004d, 0x5934000b,
- 0x80001120, 0x82000500, 0x0000ffff, 0x80080480,
- 0x05001003, 0x64066a03, 0x0501f004, 0x4c3c0000,
- 0x0001faf4, 0x5c007800, 0x4d2c0000, 0x41781800,
- 0x5934000f, 0x80025d40, 0x0500003c, 0x592c0004,
- 0x80000d40, 0x05000006, 0x59940031, 0x80040480,
- 0x48025804, 0x05001007, 0x05000006, 0x412c1800,
- 0x592c0000, 0x80025d40, 0x05000030, 0x05fdf7f4,
- 0x592c2000, 0x497a5800, 0x800c19c0, 0x05020009,
- 0x59340010, 0x812c0580, 0x05020004, 0x497a680f,
- 0x497a6810, 0x0501f008, 0x4812680f, 0x0501f006,
- 0x48101800, 0x59340010, 0x812c0580, 0x05020002,
- 0x480e6810, 0x592c0205, 0x82000500, 0x000000ff,
- 0x90000592, 0x05000005, 0xb00005a0, 0x05000003,
- 0x90000588, 0x05020003, 0x642e5a07, 0x0501f00c,
- 0x4c0c0000, 0x4c100000, 0x0001ff6c, 0x5c002000,
- 0x5c001800, 0x4a025a05, 0x00000103, 0x641a5a07,
- 0x497a580a, 0x4a025c07, 0x0000ffff, 0x4c0c0000,
- 0x4c100000, 0x0001fb5b, 0x5c002000, 0x5c001800,
- 0x40100000, 0x05fdf7d0, 0x5c025800, 0x81468800,
- 0x83440480, 0x00000800, 0x05021007, 0x803c7840,
- 0x05fe07a1, 0x49472801, 0x5c028800, 0x5c03e000,
- 0x1c01f000, 0x640b2800, 0x497b2801, 0x05fdf7fb,
- 0x60407800, 0x59966002, 0x59300205, 0x80000d40,
- 0x05000014, 0x59940031, 0x80040480, 0x48026205,
- 0x4df00000, 0x4c040000, 0x0515fb53, 0x5c000800,
- 0x05000009, 0x59300205, 0x9000048b, 0x05021006,
- 0x9004048b, 0x05001004, 0x4c3c0000, 0x0515fa80,
- 0x5c007800, 0x5c03e000, 0x05001027, 0x05000026,
- 0x59300006, 0x80000d40, 0x05000010, 0x4203e000,
- 0xb0800000, 0x4203f800, 0x0c000000, 0x40000000,
- 0x40000000, 0x40000000, 0x0503b008, 0x59940031,
- 0x80040480, 0x48026006, 0x4203f800, 0x08000000,
- 0x05001019, 0x05000018, 0x91326430, 0x49332802,
- 0x41540000, 0x81300480, 0x05021005, 0x803c7840,
- 0x05fe07d2, 0x5c03e000, 0x1c01f000, 0x59940030,
- 0x48032831, 0x4a032802, 0x00110514, 0x497b2830,
- 0x80000540, 0x0500000c, 0x64072800, 0x5c03e000,
- 0x1c01f000, 0x4c3c0000, 0x0515f94f, 0x5c007800,
- 0x05fdf7d8, 0x4c3c0000, 0x0511fd13, 0x5c007800,
- 0x05fdf7e6, 0x64032800, 0x5c03e000, 0x1c01f000,
- 0x59a80876, 0x8c040530, 0x05020025, 0x8c040532,
- 0x0500000f, 0x59a80065, 0x81640480, 0x05001016,
- 0x59a8000b, 0x81500580, 0x05000005, 0x59a80063,
- 0x59a81062, 0x80080580, 0x0502000f, 0x900411c0,
- 0x82081500, 0x00007000, 0x0501f00f, 0x9004051f,
- 0x05000013, 0x80040840, 0x9004051f, 0x05000003,
- 0x48075076, 0x0501f00e, 0x900401c0, 0x9000051f,
- 0x80040d40, 0x900401c0, 0x80040580, 0x82001500,
- 0x00007000, 0x82040500, 0xffff8fff, 0x80080540,
- 0x48035076, 0x80081114, 0x05d1fe30, 0x1c01f000,
- 0x4a032807, 0x000007d0, 0x642b2806, 0x4a01a8e5,
- 0x00000c00, 0x1c01f000, 0x60100800, 0x91180485,
- 0x05d21c03, 0x91947c09, 0x83180400, 0x00105c9f,
- 0x50000000, 0x803c7c00, 0x4a007801, 0x000001f4,
- 0x48047802, 0x64287800, 0x49787803, 0x83180400,
- 0x00105ca4, 0x50000000, 0x82000540, 0x00000155,
- 0x4801a8e5, 0x1c01f000, 0x91180485, 0x05d21bf0,
- 0x91947c09, 0x83180400, 0x00105c9f, 0x50000000,
- 0x803c7c00, 0x583c0002, 0x80000040, 0x48007802,
- 0x05000004, 0x4a007801, 0x000001f4, 0x64287800,
- 0x1c01f000, 0x91180485, 0x05d21be1, 0x91947c09,
- 0x83180400, 0x00105c9f, 0x50000000, 0x803c7c00,
- 0x49787801, 0x83180400, 0x00105ca4, 0x50000000,
- 0x4801a8e5, 0x1c01f000, 0x40680800, 0x406c1000,
- 0x0501f802, 0x1c01f000, 0x4807c857, 0x480bc857,
- 0x5994002f, 0x80040400, 0x05d01bcd, 0x48032804,
- 0x480b2805, 0x642b2803, 0x1c01f000, 0x4807c857,
- 0x480bc857, 0x5994002f, 0x80040400, 0x05d01bc4,
- 0x48032826, 0x480b2827, 0x642b2825, 0x1c01f000,
- 0x4c000000, 0x59940027, 0x80080580, 0x05020003,
- 0x48032826, 0x48032827, 0x5c000000, 0x1c01f000,
- 0x4807c857, 0x480bc857, 0x5994002f, 0x80040400,
- 0x05d01bb3, 0x4803282c, 0x480b282d, 0x642b282b,
- 0x1c01f000, 0x80e9d1c0, 0x0500000c, 0x0501f82e,
- 0x05025000, 0x4203e000, 0x80000000, 0x40e81000,
- 0x41780800, 0x61900000, 0x0501f8b4, 0x5994002e,
- 0x80080400, 0x4803282e, 0x1c01f000, 0x42001000,
- 0x00104a82, 0x05fdfe97, 0x42001000, 0x00104a75,
- 0x05fdffdc, 0x42001000, 0x00103e29, 0x05fdfe91,
- 0x42001000, 0x00103ea1, 0x05fdfe8e, 0x42001000,
- 0x00103e08, 0x05fdfe8b, 0x42001000, 0x00103ecb,
- 0x05fdf69b, 0x4203e000, 0x70000000, 0x4203e000,
- 0xb0300000, 0x40ebf800, 0x60f00000, 0x05004004,
- 0x80000040, 0x05fe07fe, 0x0501f006, 0x4203e000,
- 0x70000000, 0x42000000, 0x0010b2f1, 0x0521fbd6,
- 0x1c01f000, 0x4203e000, 0x80000000, 0x4203e000,
- 0xb0400000, 0x40ebf800, 0x60f00000, 0x05005004,
- 0x80000040, 0x05fe07fe, 0x0501f006, 0x4203e000,
- 0x80000000, 0x42000000, 0x0010b2f2, 0x0521fbc6,
- 0x1c01f000, 0x59a8080d, 0x59a80266, 0x80040480,
- 0x599c0a02, 0x800409c0, 0x05020002, 0x80040800,
- 0x80041480, 0x05001002, 0x40000800, 0x48075064,
- 0x59a8100d, 0x40040000, 0x800acc80, 0x4967500d,
- 0x49675065, 0x59aaa80b, 0x41640800, 0x60c01000,
- 0x0501f84e, 0x8206a400, 0x00110514, 0x49535061,
- 0x4152b000, 0x42006000, 0x0010cec4, 0x4a006005,
- 0x0000012c, 0x4a006006, 0xda10da10, 0x64486009,
- 0x4a00600a, 0x0010cec4, 0x4a00600b, 0x00100e21,
- 0x599c0014, 0x48006012, 0x599c0015, 0x48006013,
- 0x42006000, 0x00110454, 0x64206203, 0x64186407,
- 0x4a006002, 0xffff0000, 0x4a006009, 0x0010cec4,
- 0x4a006016, 0x0010cec4, 0x599c0014, 0x48006017,
- 0x599c0015, 0x48006018, 0x599c0413, 0x48006019,
- 0x4950601a, 0x4954601b, 0x59a80064, 0x4800601c,
- 0x4a00601d, 0x0010ae61, 0x4a00601e, 0x0010ae62,
- 0x4a00601f, 0x0010ae63, 0x42000000, 0xb0000000,
- 0x42000800, 0x00110454, 0x0001f92d, 0x1c01f000,
+ 0x1c01f000, 0x59940004, 0x80000540, 0x05020006,
+ 0x480b2805, 0x0501f81c, 0x48032804, 0x642b2803,
+ 0x80000580, 0x1c01f000, 0x59940029, 0x80000540,
+ 0x0502000b, 0x5994002f, 0x80040400, 0x05c41f43,
+ 0x5994082e, 0x80040400, 0x05c41f40, 0x48032829,
+ 0x480b282a, 0x64072828, 0x80000580, 0x1c01f000,
+ 0x5994002c, 0x80000540, 0x05020006, 0x480b282d,
+ 0x0501f805, 0x4803282c, 0x642b282b, 0x80000580,
+ 0x1c01f000, 0x4c0c0000, 0x5994182f, 0x5994002e,
+ 0x800c0400, 0x05c41f2d, 0x05000004, 0x4c040000,
+ 0x05c9f967, 0x5c000800, 0x80040400, 0x5c001800,
+ 0x1c01f000, 0x4c000000, 0x59940005, 0x80080580,
+ 0x05020003, 0x497b2804, 0x497b2805, 0x5c000000,
+ 0x1c01f000, 0x4c000000, 0x5994002a, 0x80080580,
+ 0x05020003, 0x497b2829, 0x497b282a, 0x5c000000,
+ 0x1c01f000, 0x4c000000, 0x5994002d, 0x80080580,
+ 0x05020003, 0x497b282c, 0x497b282d, 0x5c000000,
+ 0x1c01f000, 0x4937c857, 0x48ebc857, 0x59340203,
+ 0x80e80480, 0x05001002, 0x48ea6a03, 0x1c01f000,
+ 0x4d440000, 0x60407800, 0x59968801, 0x0001fb00,
+ 0x0502005e, 0x59341a03, 0x800c1840, 0x05001015,
+ 0x59940031, 0x800c0480, 0x05000003, 0x48026a03,
+ 0x05021010, 0x5934000f, 0x497a6a03, 0x80000540,
+ 0x05000052, 0x5934000b, 0x80001120, 0x82000500,
+ 0x0000ffff, 0x80080480, 0x05001003, 0x64066a03,
+ 0x0501f004, 0x4c3c0000, 0x0001fb0d, 0x5c007800,
+ 0x4d2c0000, 0x41781800, 0x5934000f, 0x80025d40,
+ 0x05000041, 0x592c0007, 0x80000d40, 0x05000006,
+ 0x59940031, 0x80040480, 0x48025807, 0x05001007,
+ 0x05000006, 0x412c1800, 0x592c0000, 0x80025d40,
+ 0x05000035, 0x05fdf7f4, 0x592c2000, 0x497a5800,
+ 0x800c19c0, 0x05020009, 0x59340010, 0x812c0580,
+ 0x05020004, 0x497a680f, 0x497a6810, 0x0501f008,
+ 0x4812680f, 0x0501f006, 0x48101800, 0x59340010,
+ 0x812c0580, 0x05020002, 0x480e6810, 0x592c0208,
+ 0x82000500, 0x000000ff, 0x90000592, 0x05000005,
+ 0xb00005a0, 0x05000003, 0x90000588, 0x05020003,
+ 0x642e5a0a, 0x0501f011, 0x4c0c0000, 0x4c100000,
+ 0x0005f9f3, 0x5c002000, 0x5c001800, 0x4c0c0000,
+ 0x4c100000, 0x05f9fce3, 0x5c002000, 0x5c001800,
+ 0x4a025a08, 0x00000103, 0x641a5a0a, 0x497a580d,
+ 0x4a025c0a, 0x0000ffff, 0x4c0c0000, 0x4c100000,
+ 0x0001fb82, 0x5c002000, 0x5c001800, 0x40100000,
+ 0x05fdf7cb, 0x5c025800, 0x81468800, 0x83440480,
+ 0x00000800, 0x05021007, 0x803c7840, 0x05fe079c,
+ 0x49472801, 0x5c028800, 0x5c03e000, 0x1c01f000,
+ 0x640b2800, 0x497b2801, 0x05fdf7fb, 0x60407800,
+ 0x59966002, 0x59300205, 0x80000d40, 0x05000014,
+ 0x59940031, 0x80040480, 0x48026205, 0x4df00000,
+ 0x4c040000, 0x051df951, 0x5c000800, 0x05000009,
+ 0x59300205, 0x9000048b, 0x05021006, 0x9004048b,
+ 0x05001004, 0x4c3c0000, 0x051df87e, 0x5c007800,
+ 0x5c03e000, 0x05001027, 0x05000026, 0x59300006,
+ 0x80000d40, 0x05000010, 0x4203e000, 0xb0800000,
+ 0x4203f800, 0x0c000000, 0x40000000, 0x40000000,
+ 0x40000000, 0x0503b008, 0x59940031, 0x80040480,
+ 0x48026006, 0x4203f800, 0x08000000, 0x05001019,
+ 0x05000018, 0x91326430, 0x49332802, 0x41540000,
+ 0x81300480, 0x05021005, 0x803c7840, 0x05fe07d2,
+ 0x5c03e000, 0x1c01f000, 0x59940030, 0x48032831,
+ 0x4a032802, 0x00111b00, 0x497b2830, 0x80000540,
+ 0x0500000c, 0x64072800, 0x5c03e000, 0x1c01f000,
+ 0x4c3c0000, 0x0519ff4d, 0x5c007800, 0x05fdf7d8,
+ 0x4c3c0000, 0x0519fa13, 0x5c007800, 0x05fdf7e6,
+ 0x64032800, 0x5c03e000, 0x1c01f000, 0x59a808b5,
+ 0x8c040530, 0x05020025, 0x8c040532, 0x0500000f,
+ 0x59a8009b, 0x81640480, 0x05001016, 0x59a8000b,
+ 0x81500580, 0x05000005, 0x59a80099, 0x59a81098,
+ 0x80080580, 0x0502000f, 0x900411c0, 0x82081500,
+ 0x00007000, 0x0501f00f, 0x9004051f, 0x05000013,
+ 0x80040840, 0x9004051f, 0x05000003, 0x480750b5,
+ 0x0501f00e, 0x900401c0, 0x9000051f, 0x80040d40,
+ 0x900401c0, 0x80040580, 0x82001500, 0x00007000,
+ 0x82040500, 0xffff8fff, 0x80080540, 0x480350b5,
+ 0x80081114, 0x05c9f855, 0x1c01f000, 0x4a032807,
+ 0x000007d0, 0x642b2806, 0x4a01a8e5, 0x00000c00,
+ 0x1c01f000, 0x60100800, 0x91180485, 0x05c61e1f,
+ 0x91947c09, 0x83180400, 0x00107661, 0x50000000,
+ 0x803c7c00, 0x4a007801, 0x000001f4, 0x48047802,
+ 0x64287800, 0x83180400, 0x00107666, 0x50000000,
+ 0x82000540, 0x00000155, 0x4801a8e5, 0x1c01f000,
+ 0x91180485, 0x05c61e0d, 0x91947c09, 0x83180400,
+ 0x00107661, 0x50000000, 0x803c7c00, 0x583c0002,
+ 0x80000040, 0x48007802, 0x05000004, 0x4a007801,
+ 0x000001f4, 0x64287800, 0x1c01f000, 0x91180485,
+ 0x05c61dfe, 0x91947c09, 0x83180400, 0x00107661,
+ 0x50000000, 0x803c7c00, 0x49787801, 0x83180400,
+ 0x00107666, 0x50000000, 0x4801a8e5, 0x1c01f000,
+ 0x4807c857, 0x480bc857, 0x480b2805, 0x05fdfebe,
+ 0x48032804, 0x642b2803, 0x1c01f000, 0x4807c857,
+ 0x480bc857, 0x480b2827, 0x05fdfeb7, 0x48032826,
+ 0x642b2825, 0x1c01f000, 0x4c000000, 0x59940027,
+ 0x80080580, 0x05020003, 0x48032826, 0x48032827,
+ 0x5c000000, 0x1c01f000, 0x4807c857, 0x480bc857,
+ 0x480b282d, 0x05fdfea8, 0x4803282c, 0x642b282b,
+ 0x1c01f000, 0x80e9d1c0, 0x05000006, 0x0501f828,
+ 0x00044e27, 0x05fe57ff, 0x4203e000, 0x80000000,
+ 0x1c01f000, 0x42001000, 0x00106004, 0x05fdfea6,
+ 0x42001000, 0x00105ff7, 0x05fdffe4, 0x42001000,
+ 0x0010510c, 0x05fdfea0, 0x42001000, 0x00105184,
+ 0x05fdfe9d, 0x42001000, 0x001050eb, 0x05fdfe9a,
+ 0x42001000, 0x001051ae, 0x05fdf6a7, 0x4203e000,
+ 0x70000000, 0x4203e000, 0xb0300000, 0x40ebf800,
+ 0x60f00000, 0x05004004, 0x80000040, 0x05fe07fe,
+ 0x0501f006, 0x4203e000, 0x70000000, 0x42000000,
+ 0x0010e46f, 0x0529ffaf, 0x1c01f000, 0x4203e000,
+ 0x80000000, 0x4203e000, 0xb0400000, 0x40ebf800,
+ 0x60f00000, 0x05005004, 0x80000040, 0x05fe07fe,
+ 0x0501f006, 0x4203e000, 0x80000000, 0x42000000,
+ 0x0010e470, 0x0529ff9f, 0x1c01f000, 0x4c5c0000,
+ 0x4c640000, 0x59a8b81a, 0x585c0002, 0x82000580,
+ 0x00000100, 0x60100000, 0x05020067, 0x642f5427,
+ 0x642f542f, 0x642f5437, 0x60080800, 0x4200c800,
+ 0x0010dc28, 0x60041800, 0x60002080, 0x60602801,
+ 0x05e9fa21, 0x0500005c, 0x59a80028, 0xb000053f,
+ 0x800001c0, 0x0500000b, 0x90002d1e, 0x05000004,
+ 0x59a80827, 0x84040d64, 0x48075027, 0xb0002d21,
+ 0x05000004, 0x59a8002f, 0x84000564, 0x4803502f,
+ 0x60040800, 0x4200c800, 0x0010dc28, 0x60041800,
+ 0x60002080, 0x60602801, 0x05e9fa0b, 0x05000046,
+ 0x59a80029, 0x80000000, 0x48035029, 0x60000800,
+ 0x4200c800, 0x0010dc30, 0x60041800, 0x60002080,
+ 0x60602801, 0x05e9fa00, 0x0500003b, 0x59a80031,
+ 0x80000000, 0x48035031, 0x60080800, 0x4200c800,
+ 0x0010dc38, 0x60041800, 0x60002080, 0x61602801,
+ 0x05e9f9f5, 0x05000030, 0x59a80038, 0xb0000521,
+ 0x800001c0, 0x05000004, 0x59a80037, 0x84000564,
+ 0x48035037, 0x60000800, 0x4200c800, 0x0010dc38,
+ 0x60041800, 0x60002080, 0x61602801, 0x05e9f9e6,
+ 0x05000021, 0x59a80039, 0x80000000, 0x48035039,
+ 0x600cc800, 0x42000800, 0x0010dc23, 0x42001000,
+ 0xffffffff, 0x601c2000, 0x05c5ff8c, 0x59a8201f,
+ 0x80100400, 0x81780480, 0x44000800, 0x80040800,
+ 0x8064c840, 0x05fe07f6, 0x6400b801, 0x6460b804,
+ 0x6580b805, 0x4a00b803, 0x0010dc23, 0x59a8001d,
+ 0x4800b807, 0x59a8001e, 0x4800b808, 0x405c1000,
+ 0x0001f821, 0x90000541, 0x5c00c800, 0x5c00b800,
+ 0x1c01f000, 0x4803c857, 0x05fdf7fc, 0x4803c857,
+ 0x61c01100, 0x40001800, 0x05e5ff2b, 0x1c01f000,
+ 0x4833c857, 0x58300002, 0x82000580, 0x00000100,
+ 0x05020002, 0x1c01f000, 0x4a006002, 0x00000100,
+ 0x60140000, 0x05fdfff2, 0x05fdf7fb, 0x4833c857,
+ 0x4c580000, 0x58300002, 0x82000580, 0x00000100,
+ 0x05020007, 0x0501fb33, 0x5830020b, 0x4803c857,
+ 0x9000349c, 0x05c61d11, 0x0c01f005, 0x4a006002,
+ 0x00000100, 0x60140000, 0x0501f0d9, 0x001078eb,
+ 0x001078f6, 0x001078fb, 0x001078fd, 0x001078fe,
+ 0x0010790b, 0x0010790c, 0x00107924, 0x00107925,
+ 0x00107929, 0x00107934, 0x00107945, 0x00107963,
+ 0x00107964, 0x00107965, 0x00107966, 0x0010796b,
+ 0x0010796f, 0x0010797d, 0x0010797e, 0x0010797f,
+ 0x00107993, 0x00107998, 0x0010799c, 0x001079a3,
+ 0x00107952, 0x0010795e, 0x001079a3, 0x6404620b,
+ 0x64006001, 0x64c46004, 0x4a006005, 0x000000c4,
+ 0x4a006003, 0x00107ddd, 0x59a80011, 0xb0000430,
+ 0x0501f8b5, 0x0501f0ae, 0x6458620b, 0x40301000,
+ 0x60040000, 0x0501fae2, 0x0501f0a9, 0x0501f996,
+ 0x0501f0a7, 0x0501f0a8, 0x643c620b, 0x64006001,
+ 0x4a006004, 0x000000a8, 0x4a006005, 0x000002a0,
+ 0x4a006003, 0x00107e0e, 0x59a80011, 0x82000400,
+ 0x00000134, 0x0501f8a0, 0x0501f099, 0x0501f09a,
+ 0x0501fb41, 0x05020096, 0x5830040b, 0x8c000512,
+ 0x05020008, 0x8c000510, 0x0502000b, 0x84000552,
+ 0x4800640b, 0x6044b000, 0x0501fafa, 0x0501f08c,
+ 0x84000512, 0x84000550, 0x4800640b, 0x6088b000,
+ 0x05fdf7fa, 0x84000510, 0x4800640b, 0x6454620b,
+ 0x40301000, 0x60180000, 0x0501fab9, 0x0501f080,
+ 0x0501f081, 0x59a8600e, 0x6424620b, 0x0501f9d4,
+ 0x0501f07b, 0x6428620b, 0x64006001, 0x64506004,
+ 0x65406005, 0x4a006003, 0x00107eb8, 0x59a80011,
+ 0x82000400, 0x0000042c, 0x0501f877, 0x0501f070,
+ 0x642c620b, 0x64006001, 0x64086004, 0x64206005,
+ 0x42001000, 0x7ff38009, 0x50081000, 0x4808600c,
+ 0x9030140c, 0x48086003, 0x4a00600d, 0x000090d5,
+ 0x59a80011, 0x82000400, 0x0000047c, 0x0501f866,
+ 0x0501f05f, 0x6464620b, 0x64006001, 0x64046004,
+ 0x64106005, 0x59a81092, 0x4808600c, 0x9030140c,
+ 0x48086003, 0x59a80011, 0x82000400, 0x00000430,
+ 0x0501f859, 0x0501f052, 0x6468620b, 0x64006001,
+ 0x64046004, 0x64106005, 0x4808600c, 0x9030140c,
+ 0x48086003, 0x59a80011, 0x82000400, 0x00000470,
+ 0x0501f84d, 0x0501f046, 0x6410620b, 0x40301000,
+ 0x60080000, 0x0501fa7a, 0x0501f041, 0x0501f042,
+ 0x0501f041, 0x0501f040, 0x6440620b, 0x40301000,
+ 0x60100000, 0x0501fa72, 0x0501f039, 0x40301000,
+ 0x60440000, 0x0501fa25, 0x0501f035, 0x5830040b,
+ 0x8c000518, 0x05000005, 0x40301000, 0x60000000,
+ 0x0501fa3e, 0x0501f02e, 0x6403500f, 0x4a035010,
+ 0x000927c0, 0x40301000, 0x606c0000, 0x0501fa37,
+ 0x0501f027, 0x0501f028, 0x0501f027, 0x5830040b,
+ 0x8c00051e, 0x05000008, 0x8c000514, 0x05020003,
+ 0x84000554, 0x0501f002, 0x84000514, 0x4800640b,
+ 0x0501f01b, 0x8c000518, 0x05000005, 0x40301000,
+ 0x60000000, 0x0501fa25, 0x0501f015, 0x6418620b,
+ 0x4178b000, 0x0501fa7f, 0x0501f011, 0x646c620b,
+ 0x40301000, 0x606c0000, 0x0501fa1c, 0x0501f00c,
+ 0x40301000, 0x605c0000, 0x0501f9f8, 0x0501f008,
+ 0x5830040b, 0x8c000518, 0x05fc075d, 0x40301000,
+ 0x60000000, 0x0501fa11, 0x0501f001, 0x5c00b000,
+ 0x1c01f000, 0x82000400, 0x00000100, 0x05fdff08,
+ 0x05fdf7fb, 0x48006007, 0x59a80012, 0x90000440,
+ 0x48006008, 0x40301000, 0x0001f021, 0x4803c856,
+ 0x05e9f819, 0x050200bd, 0x42001000, 0x7ff38000,
+ 0x50081000, 0x82081580, 0x4f434453, 0x601c0000,
+ 0x050200b7, 0x42000800, 0x7ff38000, 0x42001000,
+ 0xffffffff, 0x60402000, 0x05c5fe64, 0x60200000,
+ 0x050200af, 0x42001000, 0x7ff38006, 0x50081000,
+ 0x480bc857, 0x8c080500, 0x050000a0, 0x59e00802,
+ 0x8c04051e, 0x0502009d, 0x42001000, 0x7ff38002,
+ 0x50081000, 0x480b501d, 0x42001000, 0x7ff38003,
+ 0x50081000, 0x480b501e, 0x42001000, 0x7ff38007,
+ 0x50081000, 0x6040084e, 0x0501fd9c, 0x4807501c,
+ 0x4807501b, 0x42001000, 0x7ff3800a, 0x50081000,
+ 0x800800e0, 0x42001000, 0x7ff38009, 0x50081000,
+ 0x82081500, 0x0000ffff, 0x80080540, 0x4803501f,
+ 0x42001000, 0x7ff38012, 0x50081000, 0x800811c0,
+ 0x05000004, 0x82080580, 0xffffffff, 0x05020002,
+ 0x61b81000, 0x480b5025, 0x42001000, 0x7ff3801a,
+ 0x50081000, 0x800811c0, 0x05000004, 0x82080580,
+ 0xffffffff, 0x05020002, 0x612c1000, 0x480b502d,
+ 0x42001000, 0x7ff38022, 0x50081000, 0x800811c0,
+ 0x05000004, 0x82080580, 0xffffffff, 0x05020002,
+ 0x612c1000, 0x480b5035, 0x42001000, 0x7ff38013,
+ 0x50081000, 0x800811c0, 0x05000004, 0x82080580,
+ 0xffffffff, 0x05020002, 0x61a41000, 0x480b5026,
+ 0x42001000, 0x7ff3801b, 0x50081000, 0x800811c0,
+ 0x05000004, 0x82080580, 0xffffffff, 0x05020002,
+ 0x61181000, 0x480b502e, 0x42001000, 0x7ff38023,
+ 0x50081000, 0x800811c0, 0x05000004, 0x82080580,
+ 0xffffffff, 0x05020002, 0x61181000, 0x480b5036,
+ 0x05e5ff98, 0x60240800, 0x42001000, 0x0010dc28,
+ 0x64801000, 0x60041800, 0x60002080, 0x60602801,
+ 0x05e5ffda, 0x05000046, 0x64075023, 0x64075024,
+ 0x64175227, 0x640f5427, 0x60340800, 0x42001000,
+ 0x0010dc25, 0x60041800, 0x60002080, 0x60602801,
+ 0x05e5ffce, 0x0500003a, 0x60640800, 0x42001000,
+ 0x0010dc25, 0x60041800, 0x60002080, 0x60602801,
+ 0x05e5ffc6, 0x05000032, 0x6407502b, 0x641f502c,
+ 0x6417522f, 0x640f542f, 0x602c0800, 0x42001000,
+ 0x0010dc2d, 0x60041800, 0x60002080, 0x60602801,
+ 0x05e5ffba, 0x05000026, 0x60800800, 0x42001000,
+ 0x0010dc2d, 0x60041800, 0x60002080, 0x60602801,
+ 0x05e5ffb2, 0x0500001e, 0x64075033, 0x641f5034,
+ 0x64175237, 0x640f5437, 0x60140800, 0x42001000,
+ 0x0010dc35, 0x60041800, 0x60002080, 0x61602801,
+ 0x05e5ffa6, 0x05000012, 0x60800800, 0x42001000,
+ 0x0010dc35, 0x60041800, 0x60002080, 0x61602801,
+ 0x05e5ff9e, 0x0500000a, 0x42001000, 0x7ff38006,
+ 0x50081000, 0x90081503, 0x60240000, 0x05000004,
+ 0x8c080502, 0x05020806, 0x1c01f000, 0x4803c857,
+ 0x05fdfe3f, 0x497b501c, 0x05fdf7fc, 0x4803c856,
+ 0x4c5c0000, 0x59a8b80e, 0x497b500f, 0x497b5010,
+ 0x6400ba0b, 0x4978b80b, 0x42001000, 0x7ff38004,
+ 0x50081000, 0x480b5011, 0x42001000, 0x7ff38005,
+ 0x50081000, 0x480b5012, 0x6400b801, 0x6430b804,
+ 0x64c0b805, 0x4a00b803, 0x00107dd1, 0x59a80011,
+ 0xb0000400, 0x4800b807, 0x59a80012, 0x90000440,
+ 0x4800b808, 0x405c1000, 0x0001f821, 0x5c00b800,
+ 0x1c01f000, 0x4803c856, 0x4c5c0000, 0x4c600000,
+ 0x4c640000, 0x4c580000, 0x4200b800, 0x7ff48000,
+ 0x4178c000, 0x0501f8b7, 0x8258b580, 0x00000082,
+ 0x602c0000, 0x0502005a, 0x0501f8b2, 0x8058b1c0,
+ 0x602c0000, 0x05000056, 0x4030c800, 0x6460ca0b,
+ 0x905804a8, 0x05000004, 0x05001003, 0x60a0b000,
+ 0x0501f003, 0x80000580, 0x6420ca0b, 0x4c000000,
+ 0x8060c000, 0x4c640000, 0x9064cc0e, 0x0501f8c1,
+ 0x5c00c800, 0x42000000, 0x00107eb6, 0x50000000,
+ 0x4800c80c, 0x42000000, 0x00107eb7, 0x50000000,
+ 0x4800c80d, 0x9058b40b, 0x8258b500, 0xfffffffc,
+ 0x6400c801, 0x4858c805, 0x80580104, 0x4800c804,
+ 0x9064040c, 0x4800c803, 0x59a80011, 0x82000400,
+ 0x000003d4, 0x4800c807, 0x59a80012, 0x90000440,
+ 0x4800c808, 0x40641000, 0x4c5c0000, 0x4c600000,
+ 0x0001f821, 0x5c00c000, 0x5c00b800, 0x5c000000,
+ 0x800001c0, 0x05000020, 0x9000ccb4, 0x05001002,
+ 0x60c00000, 0x4000b000, 0x59a8c80d, 0x4c640000,
+ 0x9064cc0c, 0x0501f897, 0x5c00c800, 0x6420ca0b,
+ 0x4858c805, 0x80580104, 0x4800c804, 0x9058b403,
+ 0x8258b500, 0xfffffffc, 0x6400c801, 0x4858c805,
+ 0x80580104, 0x4800c804, 0x9064040c, 0x4800c803,
+ 0x59a80011, 0x82000400, 0x00000404, 0x4800c807,
+ 0x59a80012, 0x90000440, 0x4800c808, 0x40641000,
+ 0x0001f821, 0x90000541, 0x5c00b000, 0x5c00c800,
+ 0x5c00c000, 0x5c00b800, 0x1c01f000, 0x4803c857,
+ 0x05fdfdb7, 0x80000580, 0x05fdf7f8, 0x4803c856,
+ 0x4c5c0000, 0x4c600000, 0x4c640000, 0x4c580000,
+ 0x4200b800, 0x7ff48000, 0x4178c000, 0x0501f84d,
+ 0x8258b580, 0x00000082, 0x602c0000, 0x05020045,
+ 0x0501f848, 0x8058b1c0, 0x602c0000, 0x05000041,
+ 0x600cc000, 0x0501f853, 0x0501f842, 0x8258b580,
+ 0x00000090, 0x60300000, 0x0502003a, 0x0501f83d,
+ 0x4058c800, 0x6004b000, 0x0501f84a, 0x0501f839,
+ 0xb058b593, 0x05020009, 0x0501f836, 0xb058b58e,
+ 0x05020008, 0x0501f833, 0x8058b1c0, 0x0502000d,
+ 0x603c0000, 0x0501f02b, 0x6004b000, 0x0501f83d,
+ 0x0501f82c, 0x90580403, 0x8064cc80, 0x603c0000,
+ 0x05000024, 0x05001023, 0x0501f836, 0x05fdf7ec,
+ 0x905804b4, 0x05001002, 0x60c0b000, 0x4030c800,
+ 0x4c640000, 0x9064cc0c, 0x0501f83e, 0x5c00c800,
+ 0x9058b403, 0x8258b500, 0xfffffffc, 0x6400c801,
+ 0x4858c805, 0x80580104, 0x4800c804, 0x9064040c,
+ 0x4800c803, 0x59a80011, 0x82000400, 0x0000041c,
+ 0x4800c807, 0x59a80012, 0x90000440, 0x4800c808,
+ 0x40641000, 0x0001f821, 0x90000541, 0x5c00b000,
+ 0x5c00c800, 0x5c00c000, 0x5c00b800, 0x1c01f000,
+ 0x4803c857, 0x05fdfd62, 0x80000580, 0x05fdf7f8,
+ 0x485fc857, 0x4863c857, 0x505cb000, 0x40600000,
+ 0x800000c6, 0x8058b100, 0x8258b500, 0x000000ff,
+ 0x90600583, 0x05020005, 0x805cb800, 0x4178c000,
+ 0x485bc857, 0x1c01f000, 0x8060c000, 0x05fdf7fd,
+ 0x485fc857, 0x4863c857, 0x485bc857, 0x4c640000,
+ 0x8058c904, 0x40580000, 0x82000540, 0xfffffffc,
+ 0x8060c400, 0x405c0000, 0x8064bc40, 0x9060c503,
+ 0x485fc857, 0x4863c857, 0x5c00c800, 0x1c01f000,
+ 0x485fc857, 0x4863c857, 0x4867c857, 0x485bc857,
+ 0x4d040000, 0x4c580000, 0x90580403, 0x80000104,
+ 0x4c640000, 0x4578c800, 0x8064c800, 0x80000040,
+ 0x05fe07fd, 0x5c00c800, 0x405a0800, 0x41780000,
+ 0x4c000000, 0x05fdffcf, 0x5c000000, 0x8058b0c0,
+ 0x90000408, 0x4c000000, 0x50640000, 0x80580540,
+ 0x4400c800, 0x5c000000, 0x9000051f, 0x05020002,
+ 0x8064c800, 0x81060840, 0x05fe07f2, 0x5c00b000,
+ 0x5c020800, 0x1c01f000, 0x4803c857, 0x4c5c0000,
+ 0x4c600000, 0x5808b802, 0x825cc580, 0x00000100,
+ 0x05020015, 0x4800120b, 0x5808040b, 0x8400055c,
+ 0x4800140b, 0x64041001, 0x64081004, 0x64201005,
+ 0x9008040c, 0x48001003, 0x59a80011, 0x90000410,
+ 0x48001007, 0x59a80012, 0x90000440, 0x48001008,
+ 0x0001f821, 0x90000541, 0x5c00c000, 0x5c00b800,
+ 0x1c01f000, 0x60280000, 0x4803c857, 0x05fdfd00,
+ 0x80000580, 0x05fdf7f9, 0x4803c857, 0x4c5c0000,
+ 0x4c600000, 0x5808b802, 0x825cc580, 0x00000100,
+ 0x0502001e, 0x4800120b, 0x800001c0, 0x05000003,
+ 0x42000000, 0xffffffff, 0x4800100c, 0x800001c0,
+ 0x05000004, 0x5808040b, 0x8400055a, 0x4800140b,
+ 0x64001001, 0x64081004, 0x64201005, 0x59a80013,
+ 0x4800100d, 0x9008040c, 0x48001003, 0x59a80011,
+ 0x90000410, 0x48001007, 0x59a80012, 0x90000440,
+ 0x48001008, 0x0001f821, 0x90000541, 0x5c00c000,
+ 0x5c00b800, 0x1c01f000, 0x60280000, 0x4803c857,
+ 0x05fdfcd7, 0x80000580, 0x05fdf7f9, 0x4803c857,
+ 0x4c5c0000, 0x4c600000, 0x5808b802, 0x825cc580,
+ 0x00000100, 0x05020012, 0x64001001, 0x64041004,
+ 0x64101005, 0x4800100c, 0x9008040c, 0x48001003,
+ 0x59a80011, 0xb000042c, 0x48001007, 0x59a80012,
+ 0x90000440, 0x48001008, 0x0001f821, 0x90000541,
+ 0x5c00c000, 0x5c00b800, 0x1c01f000, 0x60280000,
+ 0x4803c857, 0x05fdfcba, 0x80000580, 0x05fdf7f9,
+ 0x4833c857, 0x5830040b, 0x84000518, 0x8c00051c,
+ 0x0500000e, 0x82000500, 0xffff3fff, 0x5830080c,
+ 0x82040d80, 0xffffffff, 0x05020002, 0x8400055e,
+ 0x5830080d, 0x8c040520, 0x05000004, 0x84000558,
+ 0x84040d20, 0x48075013, 0x8c00051a, 0x05000003,
+ 0x8400051a, 0x8400055e, 0x4800640b, 0x1c01f000,
+ 0x4833c857, 0x4c5c0000, 0x4c580000, 0x4d2c0000,
+ 0x05c5fd6e, 0x05000032, 0x492c600a, 0x645a5800,
+ 0x4178b800, 0x912cac02, 0x0501f84c, 0x4404a800,
+ 0x8054a800, 0x8058b000, 0x805cb800, 0x80580580,
+ 0x0500000a, 0x912c0418, 0x80540580, 0x05fe07f7,
+ 0x4d2c0000, 0x05c5fd5d, 0x05000025, 0x5c000000,
+ 0x492c0001, 0x05fdf7ee, 0x485e5800, 0x5830000a,
+ 0x58000000, 0x64006001, 0x48006004, 0x800000c4,
+ 0x48006005, 0x5830000a, 0x90000402, 0x48006003,
+ 0x59a80011, 0x82000400, 0x00000484, 0x90580d91,
+ 0x0500000e, 0xb0000404, 0x90580da2, 0x05000003,
+ 0x82000400, 0x00000088, 0x59e00802, 0x8c04051e,
+ 0x05000006, 0x90580da2, 0x05020003, 0xb0000404,
+ 0x0501f002, 0xb000041c, 0x05fdfd63, 0x5c025800,
+ 0x5c00b000, 0x5c00b800, 0x1c01f000, 0x5c025800,
+ 0x05fdf7de, 0x4833c857, 0x4d2c0000, 0x4c3c0000,
+ 0x4c300000, 0x5832580a, 0x812e59c0, 0x05c40987,
+ 0x592c7801, 0x483c600a, 0x05c5fd3c, 0x803c79c0,
+ 0x0500000a, 0x903c0402, 0x48006003, 0x583c0000,
+ 0x48006004, 0x800000c4, 0x48006005, 0x40301000,
+ 0x0001f821, 0x90000541, 0x5c006000, 0x5c007800,
+ 0x5c025800, 0x1c01f000, 0x485bc857, 0x4c5c0000,
+ 0x40580000, 0x0c01f001, 0x00107ca3, 0x00107cb7,
+ 0x00107cbb, 0x00107cbd, 0x00107cbf, 0x00107cc1,
+ 0x00107cc3, 0x00107cc5, 0x00107cc9, 0x00107ccc,
+ 0x00107ccf, 0x00107cd7, 0x00107ce6, 0x00107cf1,
+ 0x00107cfc, 0x00107d01, 0x00107d0c, 0x00107ca3,
+ 0x00107ca6, 0x00107d0f, 0x00107d5c, 0x00107d66,
+ 0x00107d68, 0x00107d6e, 0x00107d72, 0x00107d76,
+ 0x00107d7b, 0x00107d7d, 0x00107d7f, 0x00107d81,
+ 0x00107d83, 0x00107d85, 0x00107d87, 0x00107d8f,
+ 0x00107cad, 0x00107cb0, 0x00107d3b, 0x00107d50,
+ 0x00107d52, 0x00107d54, 0x00107d56, 0x00107d58,
+ 0x00107d5a, 0x00107d60, 0x00107d5e, 0x00107d64,
+ 0x00107d62, 0x00107d42, 0x00107d6c, 0x00107d6e,
+ 0x00107d72, 0x00107da4, 0x00107da7, 0x00107da9,
+ 0x00107dab, 0x00107dad, 0x00107daf, 0x42000800,
+ 0x44504f4c, 0x0501f10f, 0x60100800, 0x59e00002,
+ 0x8c00051e, 0x0500010b, 0x82040d40, 0x00000100,
+ 0x0501f108, 0x42000800, 0x44504f4c, 0x0501f103,
+ 0x60180800, 0x59e00002, 0x8c00051e, 0x050000ff,
+ 0x82040d40, 0x00000100, 0x0501f0fc, 0x600c0802,
+ 0x0501f055, 0x50040800, 0x0501f053, 0x59a80814,
+ 0x0501f051, 0x59a80815, 0x0501f04f, 0x59a80816,
+ 0x0501f04d, 0x59a80817, 0x0501f04b, 0x59a80818,
+ 0x0501f049, 0x59a80819, 0x0501f047, 0x302e3730,
+ 0x30302e33, 0x42000800, 0x00107cc7, 0x05fdf7ee,
+ 0x42000800, 0x00107cc8, 0x05fdf7eb, 0x42000000,
+ 0x7ff0000d, 0x50000000, 0x80000130, 0x0501f8e4,
+ 0x9c0001c0, 0x40000800, 0x0501f037, 0x42000000,
+ 0x7ff0000d, 0x50000000, 0x80000120, 0x0501f8dc,
+ 0x82000500, 0x00ffffff, 0x82000540, 0x2e000000,
+ 0x9c0001c0, 0x05fdf7f4, 0x32333532, 0x31303030,
+ 0x32333532, 0x32303030, 0x60000020, 0x50000000,
+ 0x82000480, 0x25320001, 0x05020004, 0x42000800,
+ 0x00107ce2, 0x05fdf7cc, 0x42000800, 0x00107ce4,
+ 0x05fdf7c9, 0x60000020, 0x50000000, 0x82000480,
+ 0x25320001, 0x05020004, 0x42000800, 0x00107ce3,
+ 0x05fdf7c1, 0x42000800, 0x00107ce5, 0x05fdf7be,
+ 0x60c80800, 0x61900000, 0x800000e0, 0x80040d40,
+ 0x0501f00d, 0x59a8005a, 0x800001c0, 0x05020002,
+ 0x6140000f, 0x59a8085b, 0x800409c0, 0x05020002,
+ 0x6140080f, 0x800408e0, 0x80040d40, 0x0501f002,
+ 0x41780800, 0x60440000, 0x0501f0a7, 0x60080800,
+ 0x916c0583, 0x0502000e, 0x59a80249, 0x8c000502,
+ 0x05000004, 0x82040d40, 0x00000300, 0x0501f008,
+ 0x8c000508, 0x05000004, 0x82040d40, 0x00000200,
+ 0x0501f003, 0x82040d40, 0x00000100, 0x82040d40,
+ 0x00080000, 0x59c40001, 0x82000500, 0x00018000,
+ 0x9000bd80, 0x05020004, 0x82040d40, 0x01000000,
+ 0x0501f08c, 0x8200bd80, 0x00008000, 0x05020004,
+ 0x82040d40, 0x02000000, 0x0501f086, 0x8200bd80,
+ 0x00010000, 0x05020004, 0x82040d40, 0x04000000,
+ 0x0501f080, 0x8200bd80, 0x00018000, 0x0502007d,
+ 0x82040d40, 0x08000000, 0x0501f07a, 0x60100800,
+ 0x59e00002, 0x8c00051e, 0x05000003, 0x82040d40,
+ 0x00010000, 0x0501f071, 0x41780800, 0x916c0583,
+ 0x0502006e, 0x59a80249, 0x8c000502, 0x05000003,
+ 0x90040d43, 0x0501f069, 0x8c000508, 0x05000003,
+ 0x90040d42, 0x0501f065, 0x90040d41, 0x0501f063,
+ 0x59a80814, 0x0501f061, 0x59a80815, 0x0501f05f,
+ 0x59a80816, 0x0501f05d, 0x59a80817, 0x0501f05b,
+ 0x59a80818, 0x0501f059, 0x59a80819, 0x0501f057,
+ 0x59a8083d, 0x0501f057, 0x59a80800, 0x0501f053,
+ 0x59a80801, 0x0501f051, 0x59a80802, 0x0501f04f,
+ 0x59a80803, 0x0501f04d, 0x59880823, 0x0501f04d,
+ 0x59880129, 0x5988092a, 0x80040c00, 0x0501f049,
+ 0x599c0a09, 0x0501f045, 0x59c408b1, 0x59a800a9,
+ 0x80040c00, 0x0501f043, 0x59c408b2, 0x59a800aa,
+ 0x80040c00, 0x0501f03f, 0x60040800, 0x916c0583,
+ 0x0502003c, 0x84040d42, 0x0501f03a, 0x59880800,
+ 0x0501f038, 0x59880805, 0x0501f036, 0x59880801,
+ 0x0501f034, 0x59880802, 0x0501f032, 0x59880803,
+ 0x0501f030, 0x598808c5, 0x0501f02e, 0x59880081,
+ 0x59880882, 0x80040c00, 0x59880083, 0x80040c00,
+ 0x59880084, 0x80040c00, 0x0501f026, 0x59880826,
+ 0x82040d00, 0x000000ff, 0x59880027, 0x82000500,
+ 0x000000ff, 0x800000d0, 0x80040d40, 0x4c040000,
+ 0x59880019, 0x5988081a, 0x80040400, 0x82000500,
+ 0x000000ff, 0x800000e0, 0x5c000800, 0x80040d40,
+ 0x59880025, 0x800000f0, 0x80040d40, 0x0501f011,
+ 0x0529fb5b, 0x610008f4, 0x0501f00b, 0x610408f4,
+ 0x0501f009, 0x610808f4, 0x0501f007, 0x611008f4,
+ 0x0501f005, 0x611408f4, 0x0501f003, 0x611808f4,
+ 0x64030000, 0x50040800, 0x60e40000, 0x0501f002,
+ 0x60880000, 0x5c00b800, 0x1c01f000, 0x4803c857,
+ 0x4c5c0000, 0x4c600000, 0x82000500, 0x000000ff,
+ 0x4000b800, 0x4178c000, 0x905c048a, 0x0500100c,
+ 0x4000b800, 0x8260c400, 0x00000100, 0x82600500,
+ 0x0000ff00, 0x82000580, 0x00000a00, 0x05020003,
+ 0x8260c400, 0x0000f600, 0x05fdf7f4, 0x805c0418,
+ 0x82000400, 0x30303030, 0x5c00c000, 0x5c00b800,
+ 0x1c01f000, 0x00000030, 0x00000000, 0x00000000,
+ 0x000000f4, 0x00000394, 0x00000000, 0x00000000,
+ 0x00000444, 0x3c000000, 0x00000505, 0x00000707,
+ 0x00000000, 0x44435442, 0x000d0101, 0x00006283,
+ 0x52504010, 0x414e444f, 0x6283454d, 0x10100100,
+ 0x4c524553, 0x004d554e, 0x02006283, 0x43500220,
+ 0x00444949, 0x62830000, 0x02200300, 0x44494350,
+ 0x00004449, 0x04006283, 0x43500220, 0x56535349,
+ 0x62834449, 0x02200500, 0x53494350, 0x44494453,
+ 0x06006283, 0x57463c10, 0x4e4e4142, 0x62835245,
+ 0x04200700, 0x4f504346, 0x00535452, 0x08006283,
+ 0x554e0420, 0x4e55464d, 0x62830043, 0x02200b00,
+ 0x50514d56, 0x54524f50, 0x0c006283, 0x4d560220,
+ 0x46505051, 0x62832020, 0x04201300, 0x45494350,
+ 0x52424e42, 0xe0006283, 0x57460420, 0x52545441,
+ 0x00004249, 0x00000000, 0x44504f4c, 0x00090103,
+ 0x12004683, 0x45441810, 0x56524456, 0x46835256,
+ 0x08101300, 0x46564544, 0x00525657, 0x14004683,
+ 0x45440810, 0x4f494256, 0x46835256, 0x08101500,
+ 0x48564544, 0x00525657, 0x16004684, 0x43530220,
+ 0x4f544953, 0x46840056, 0x02201700, 0x4f545452,
+ 0x00000056, 0x18004684, 0x41520220, 0x00564f54,
+ 0x46840000, 0x02201900, 0x4f544445, 0x00000056,
+ 0x1a004684, 0x52430420, 0x00564f54, 0x00000000,
+ 0x00000000, 0x44504f4c, 0x00150204, 0x00004883,
+ 0x4f500120, 0x59545452, 0x48834550, 0x01200100,
+ 0x54524f50, 0x54415453, 0x03004883, 0x55530120,
+ 0x54525050, 0x48835053, 0x01200400, 0x5250474e,
+ 0x44505354, 0x05004883, 0x504e0420, 0x4954524f,
+ 0x48830044, 0x04200d00, 0x52445852, 0x0053504f,
+ 0x11004883, 0x58540420, 0x4f525245, 0x48845352,
+ 0x04201300, 0x52465852, 0x53454d41, 0x15004884,
+ 0x58540420, 0x4d415246, 0x48835345, 0x04201700,
+ 0x4b4e494c, 0x54415453, 0x21004884, 0x494c0420,
+ 0x52454b4e, 0x48840052, 0x04202200, 0x45435243,
+ 0x00005252, 0x2d004884, 0x4f4c0420, 0x454e5953,
+ 0x48845252, 0x04202e00, 0x49534f4c, 0x52524547,
+ 0x2f004884, 0x52500420, 0x52454d49, 0x48840052,
+ 0x04206f00, 0x4f474f4c, 0x00564352, 0x80004884,
+ 0x53520420, 0x43524e43, 0x48840056, 0x01208900,
+ 0x52534f4e, 0x54435643, 0x8a004884, 0x4c4f0120,
+ 0x554f4353, 0x4884544e, 0x01208b00, 0x4f43524c,
+ 0x00544e55, 0x8e004884, 0x494c0120, 0x56435250,
+ 0x00005443, 0x00000000, 0x44504f4c, 0x000f0206,
+ 0x00004c83, 0x55460220, 0x5954434e, 0x4c834550,
+ 0x02200100, 0x434e5546, 0x00004449, 0x02004c83,
+ 0x55461810, 0x4556434e, 0x4c835352, 0x08200800,
+ 0x4e4e5757, 0x00454d41, 0x09004c83, 0x57570820,
+ 0x4d414e50, 0x4c830045, 0x04200b00, 0x54524f50,
+ 0x54415453, 0x0d004c84, 0x43460420, 0x51585245,
+ 0x4c845a53, 0x04201000, 0x52454346, 0x4d524658,
+ 0x12004c84, 0x43460420, 0x46585445, 0x4c834d52,
+ 0x04201600, 0x52524550, 0x00504143, 0x17004c83,
+ 0x45500420, 0x4e555252, 0x4c834543, 0x04201800,
+ 0x524f4350, 0x4b414d55, 0x19004c83, 0x45500420,
+ 0x45435252, 0x4c835252, 0x04201a00, 0x524f4350,
+ 0x4b53414d, 0x1b004c83, 0x45500420, 0x52415252,
+ 0x00005243, 0x00000000, 0x44435442, 0x00000001,
+ 0x25321077, 0x338e103c, 0x474f4c51, 0x43204349,
+ 0x4f50524f, 0x49544152, 0x20204e4f, 0x50534920,
+ 0x78783532, 0x72694620, 0x7261776d, 0x20202065,
+ 0x73726556, 0x206e6f69, 0x2e372020, 0x302e3330,
+ 0x00202030, 0x00000002, 0x00000001, 0x01000100,
+ 0x05e5fa53, 0x05020005, 0x4803c856, 0x05d1fa9f,
+ 0x05d1fadd, 0x05d1fabe, 0x1c01f000, 0x59a8083b,
+ 0x59a8029c, 0x80040480, 0x599c0a02, 0x800409c0,
+ 0x05020002, 0x80040800, 0x80041480, 0x05001002,
+ 0x40000800, 0x4807509a, 0x59a8103b, 0x40040000,
+ 0x800acc80, 0x4967503b, 0x4967509b, 0x59aaa80b,
+ 0x41640800, 0x60c01000, 0x0501f88c, 0x8206a400,
+ 0x00111b00, 0x49535097, 0x4152b000, 0x0529fa48,
+ 0x0500001f, 0x496752dd, 0x599c041e, 0x4803c857,
+ 0x59a8089a, 0x4807c857, 0x80041480, 0x05021009,
+ 0x497b509a, 0x49575097, 0x4152a800, 0x81640c00,
+ 0x4807c857, 0x480754dd, 0x80040800, 0x0501f00d,
+ 0x480bc857, 0x480b509a, 0x81640c00, 0x4807c857,
+ 0x480754dd, 0x80040800, 0x60c01000, 0x0501f86f,
+ 0x4807c857, 0x8206a400, 0x00111b00, 0x49535097,
+ 0x4953c857, 0x4a0370e4, 0x30000000, 0x42006000,
+ 0x00110278, 0x4a006008, 0x0000012c, 0x4a006009,
+ 0xda10da10, 0x6454600c, 0x4a00600d, 0x00110278,
+ 0x4a00600e, 0x001012a7, 0x599c0014, 0x48006015,
+ 0x599c0015, 0x48006016, 0x42006000, 0x00111a10,
+ 0x64206203, 0x64186407, 0x4a006002, 0xffff0000,
+ 0x4a006009, 0x00110278, 0x4a006016, 0x00110278,
+ 0x599c0014, 0x48006017, 0x599c0015, 0x48006018,
+ 0x599c0413, 0x48006019, 0x4950601a, 0x4954601b,
+ 0x59a8009a, 0x4800601c, 0x4a00601d, 0x0010dc97,
+ 0x59a802dd, 0x48006020, 0x59a804dd, 0x48006021,
+ 0x42000000, 0x00111ad0, 0x48006022, 0x42000000,
+ 0x00110228, 0x48006023, 0x4a00601e, 0x0010dc98,
+ 0x4a00601f, 0x0010dc99, 0x42000000, 0xb0000000,
+ 0x42000800, 0x00111a10, 0x0001f93a, 0x1c01f000,
0x4807c856, 0x59240206, 0x800409c0, 0x05000003,
0x80080540, 0x0501f002, 0x80080500, 0x48024a06,
- 0x1c01f000, 0x4803c856, 0x4c000000, 0x05fdf933,
- 0x0502000b, 0x05f1fb16, 0x05d20b19, 0x5c000000,
- 0x48026802, 0x0509f824, 0x05000006, 0x4936600a,
- 0x64066407, 0x60067000, 0x0005f478, 0x5c000000,
- 0x1c01f000, 0x05d1fb0e, 0x4c0c0000, 0x4c100000,
+ 0x1c01f000, 0x492e6017, 0x4d2c0000, 0x05c5fa33,
+ 0x0500000c, 0x4c500000, 0x4c540000, 0x4c580000,
+ 0x412ca800, 0x5930a017, 0x6060b000, 0x0529f950,
+ 0x492e6017, 0x5c00b000, 0x5c00a800, 0x5c00a000,
+ 0x5c025800, 0x59300202, 0x48025a10, 0x4932580d,
+ 0x1c01f000, 0x4803c856, 0x4c000000, 0x05f9f96b,
+ 0x0502000b, 0x05e9fdaf, 0x05c20e74, 0x5c000000,
+ 0x48026802, 0x0509fc9a, 0x05000006, 0x4936600a,
+ 0x64066407, 0x60067000, 0x0009f000, 0x5c000000,
+ 0x1c01f000, 0x05c1fe69, 0x4c0c0000, 0x4c100000,
0x4c140000, 0x4c180000, 0x80001d80, 0x80002580,
0x60803000, 0x90040501, 0x05000003, 0x40080000,
0x800c1c00, 0x400c2800, 0x800c1902, 0x80102102,
0x90140501, 0x05000003, 0x82102540, 0x80000000,
0x80040902, 0x80183040, 0x05fe07f3, 0x40100800,
0x400c0000, 0x5c003000, 0x5c002800, 0x5c002000,
- 0x5c001800, 0x1c01f000, 0x4c580000, 0x6080b000,
- 0x80000540, 0x05000018, 0x80041c80, 0x05021016,
- 0x800810c2, 0x80040982, 0x05001006, 0x80041c80,
- 0x05021005, 0x8058b040, 0x05fe07fa, 0x0501f006,
- 0x80041c80, 0x400c0800, 0x80081000, 0x8058b040,
- 0x05fe07f4, 0x4c000000, 0x41f00000, 0x82000500,
- 0xf7ffffff, 0x4003e000, 0x5c000000, 0x5c00b000,
- 0x1c01f000, 0x4c000000, 0x41f00000, 0x82000540,
- 0x08000000, 0x05fdf7f8, 0x42007000, 0x0010aefa,
- 0x64147000, 0x64007401, 0x4a007201, 0x00000840,
- 0x64147202, 0x6401a8e8, 0x6443c82b, 0x0501f84e,
- 0x4a01a8e9, 0x00003a0d, 0x4a01a8ee, 0x00080202,
- 0x6405a8e8, 0x640378e8, 0x6443c821, 0x6413c823,
- 0x0501f879, 0x4a0378e9, 0x00003a0d, 0x4a0378ee,
- 0x00080302, 0x640778e8, 0x41780800, 0x6003a0ec,
- 0x42001000, 0x0010b1b9, 0x42001800, 0x0010e237,
- 0x600c2000, 0x6120297f, 0x4a03a005, 0xd0000001,
- 0x59d00006, 0x4a03a005, 0x90000001, 0x59d00006,
- 0x4a03a005, 0x60000001, 0x59d00006, 0x4a03a005,
- 0x60000003, 0x59d00006, 0x4a03a005, 0x60000005,
- 0x59d00006, 0x4a03a005, 0x60000007, 0x59d00006,
- 0x4a03a005, 0x60000009, 0x59d00006, 0x4a03a005,
- 0x6000000b, 0x64041001, 0x4a001002, 0x00000100,
- 0x4a001008, 0x00020bf5, 0x480c100a, 0x4810100c,
- 0x4814100d, 0x4978120e, 0x4804140e, 0x4978100f,
- 0x820c1c00, 0x00000080, 0x480c100b, 0x90081411,
- 0x801020c4, 0x80142800, 0x91d3a420, 0x80040800,
- 0x90040485, 0x05fc17d7, 0x59e00003, 0x82000500,
- 0xffffffe0, 0x82000540, 0x00008000, 0x4803c003,
- 0x59c40006, 0x82000500, 0xfffcffff, 0x48038806,
- 0x1c01f000, 0x4d900000, 0x4d180000, 0x4c500000,
- 0x4c580000, 0x4c540000, 0x4a01a8e7, 0xaaaaaaaa,
- 0x4a01a8e6, 0xaaaaaaaa, 0x4a01a8e5, 0xaaaaaaaa,
- 0x4a01a8e4, 0xaaaaaaaa, 0x4a01a8ee, 0x00200000,
- 0x4979a8ee, 0x4a01a8ce, 0x0010a3b3, 0x6000b001,
- 0x90d4ac00, 0x4178a000, 0x0521fb8e, 0x4a01a81d,
- 0x00100e1d, 0x4a01a81b, 0x00100e26, 0x4a01a81c,
- 0x00100e36, 0x4a01a81e, 0x0010b18d, 0x64031800,
- 0x600c0800, 0x42001800, 0x0010b190, 0x417a3000,
- 0x811b20c8, 0x83932400, 0x0000b037, 0x48072000,
- 0x480f2001, 0x64032002, 0x800408c4, 0x900c1c05,
- 0x811a3000, 0x91180485, 0x05fc17f6, 0x5c00a800,
- 0x5c00b000, 0x5c00a000, 0x5c023000, 0x5c032000,
- 0x1c01f000, 0x4cd80000, 0x4d180000, 0x4a0378e7,
- 0xaaaaaaaa, 0x4a0378e6, 0xaaaaaaaa, 0x4a0378e5,
- 0xaaaaaaaa, 0x4a0378e4, 0xaaaaaaaa, 0x4a03781b,
- 0x00100e26, 0x4a03781c, 0x00100e36, 0x4a03781d,
- 0x0010aefd, 0x4a03781e, 0x0010af04, 0x42000800,
- 0x0010b190, 0x417a3000, 0x42001000, 0x0010e237,
+ 0x5c001800, 0x1c01f000, 0x4c0c0000, 0x4c580000,
+ 0x6080b000, 0x80000540, 0x05000019, 0x80041c80,
+ 0x05021017, 0x800810c2, 0x80040982, 0x05001006,
+ 0x80041c80, 0x05021005, 0x8058b040, 0x05fe07fa,
+ 0x0501f006, 0x80041c80, 0x400c0800, 0x80081000,
+ 0x8058b040, 0x05fe07f4, 0x4c000000, 0x41f00000,
+ 0x82000500, 0xf7ffffff, 0x4003e000, 0x5c000000,
+ 0x5c00b000, 0x5c001800, 0x1c01f000, 0x4c000000,
+ 0x41f00000, 0x82000540, 0x08000000, 0x05fdf7f7,
+ 0x42007000, 0x0010e060, 0x64147000, 0x64007401,
+ 0x4a007201, 0x00000840, 0x64147202, 0x6401a8e8,
+ 0x6443c82b, 0x0501f84e, 0x4a01a8e9, 0x00003a0d,
+ 0x4a01a8ee, 0x00080202, 0x6405a8e8, 0x640378e8,
+ 0x6443c821, 0x6413c823, 0x0501f879, 0x4a0378e9,
+ 0x00003a0d, 0x4a0378ee, 0x00080302, 0x640778e8,
+ 0x41780800, 0x6003a0ec, 0x42001000, 0x0010e32d,
+ 0x42001800, 0x0011178d, 0x600c2000, 0x6120297f,
+ 0x4a03a005, 0xd0000001, 0x59d00006, 0x4a03a005,
+ 0x90000001, 0x59d00006, 0x4a03a005, 0x60000001,
+ 0x59d00006, 0x4a03a005, 0x60000003, 0x59d00006,
+ 0x4a03a005, 0x60000005, 0x59d00006, 0x4a03a005,
+ 0x60000007, 0x59d00006, 0x4a03a005, 0x60000009,
+ 0x59d00006, 0x4a03a005, 0x6000000b, 0x64041001,
+ 0x4a001002, 0x00000100, 0x4a001009, 0x00020f77,
+ 0x480c100b, 0x4810100d, 0x4814100e, 0x4978120f,
+ 0x4804140f, 0x49781010, 0x820c1c00, 0x00000080,
+ 0x480c100c, 0x90081412, 0x801020c4, 0x80142800,
+ 0x91d3a420, 0x80040800, 0x90040485, 0x05fc17d7,
+ 0x59e00003, 0x82000500, 0xffffffe0, 0x82000540,
+ 0x00008000, 0x4803c003, 0x59c40006, 0x82000500,
+ 0xfffcffff, 0x48038806, 0x1c01f000, 0x4d900000,
+ 0x4d180000, 0x4c500000, 0x4c580000, 0x4c540000,
+ 0x4a01a8e7, 0xaaaaaaaa, 0x4a01a8e6, 0xaaaaaaaa,
+ 0x4a01a8e5, 0xaaaaaaaa, 0x4a01a8e4, 0xaaaaaaaa,
+ 0x4a01a8ee, 0x00200000, 0x4979a8ee, 0x4a01a8ce,
+ 0x0010d17b, 0x6000b001, 0x90d4ac00, 0x4178a000,
+ 0x0529f893, 0x4a01a81d, 0x001012a3, 0x4a01a81b,
+ 0x001012ac, 0x4a01a81c, 0x001012bc, 0x4a01a81e,
+ 0x0010e2ff, 0x64031800, 0x600c0800, 0x42001800,
+ 0x0010e302, 0x417a3000, 0x811b20c8, 0x83932400,
+ 0x0000b037, 0x48072000, 0x480f2001, 0x64032002,
+ 0x800408c4, 0x900c1c05, 0x811a3000, 0x91180485,
+ 0x05fc17f6, 0x5c00a800, 0x5c00b000, 0x5c00a000,
+ 0x5c023000, 0x5c032000, 0x1c01f000, 0x4cd80000,
+ 0x4d180000, 0x4a0378e7, 0xaaaaaaaa, 0x4a0378e6,
+ 0xaaaaaaaa, 0x4a0378e5, 0xaaaaaaaa, 0x4a03781b,
+ 0x001012ac, 0x4a03781c, 0x001012bc, 0x4a03781d,
+ 0x0010e063, 0x4a03781e, 0x0010e06a, 0x42000800,
+ 0x0010e302, 0x417a3000, 0x42001000, 0x0011178d,
0x8119b0c8, 0x82d9b400, 0x0000bf32, 0x83180400,
- 0x001066a7, 0x50000000, 0x4801b002, 0x4809b000,
+ 0x00108a67, 0x50000000, 0x4801b002, 0x4809b000,
0x4809b001, 0x82081400, 0x00000080, 0x90040c05,
0x811a3000, 0x91180485, 0x05fc17f2, 0x5c023000,
- 0x5c01b000, 0x1c01f000, 0x40680800, 0x0005fb2e,
- 0x1c01f000, 0x4933c857, 0x42000800, 0x8000004e,
- 0x59300416, 0x8c000510, 0x05000002, 0x84040d52,
- 0x48066004, 0x58d400ea, 0x8c000516, 0x05fe07fe,
- 0x83300400, 0x80000000, 0x4801a8e1, 0x1c01f000,
- 0x4933c857, 0x59300804, 0x82040d00, 0x00000100,
- 0x82040d40, 0x80000040, 0x59300416, 0x8c000510,
- 0x05000002, 0x84040d52, 0x48066004, 0x497a6000,
- 0x58d400ea, 0x8c000516, 0x05fe07fe, 0x83300400,
- 0x60000000, 0x4801a8e1, 0x1c01f000, 0x0501f802,
- 0x1c01f000, 0x0501f946, 0x4df00000, 0x4d300000,
+ 0x5c01b000, 0x1c01f000, 0x4933c857, 0x42000800,
+ 0x8000004e, 0x59300416, 0x8c000510, 0x05000002,
+ 0x84040d52, 0x48066004, 0x58d400ea, 0x8c000516,
+ 0x05fe07fe, 0x83300400, 0x80000000, 0x4801a8e1,
+ 0x1c01f000, 0x4933c857, 0x59300804, 0x82040d00,
+ 0x00000100, 0x82040d40, 0x80000040, 0x59300416,
+ 0x8c000510, 0x05000002, 0x84040d52, 0x48066004,
+ 0x497a6000, 0x58d400ea, 0x8c000516, 0x05fe07fe,
+ 0x83300400, 0x60000000, 0x4801a8e1, 0x1c01f000,
+ 0x0501fc8f, 0x4df00000, 0x4d300000, 0x4d340000,
+ 0x4d2c0000, 0x4d180000, 0x4c5c0000, 0x4c600000,
+ 0x4d900000, 0x4dd00000, 0x4da40000, 0x4d140000,
+ 0x4cd80000, 0x58d6602f, 0x813261c0, 0x05000024,
+ 0x41302800, 0x4178c000, 0x59300000, 0x4c000000,
+ 0x5932680a, 0x5930b801, 0x4c0c0000, 0x4c140000,
+ 0x0509f96a, 0x5c002800, 0x5c001800, 0x05000008,
+ 0x0501f8d1, 0x4c0c0000, 0x4c140000, 0x0501fafd,
+ 0x5c002800, 0x5c001800, 0x0501f005, 0x41301800,
+ 0x8060c1c0, 0x05020002, 0x400cc000, 0x805cb9c0,
+ 0x05000003, 0x405e6000, 0x05fdf7eb, 0x5c026000,
+ 0x813261c0, 0x05000006, 0x8060c1c0, 0x05000002,
+ 0x40602800, 0x4178c000, 0x05fdf7e0, 0x417a3000,
+ 0x0505f99c, 0x59926005, 0x813261c0, 0x0500000a,
+ 0x5932680a, 0x4c140000, 0x0509f948, 0x5c002800,
+ 0x05000005, 0x0501fe88, 0x0501fc21, 0x0501fc26,
+ 0x0501fadc, 0x811a3000, 0x91180485, 0x05fc17f1,
+ 0x5c01b000, 0x5c022800, 0x5c034800, 0x5c03a000,
+ 0x5c032000, 0x5c00c000, 0x5c00b800, 0x5c023000,
+ 0x5c025800, 0x5c026800, 0x5c026000, 0x5c03e000,
+ 0x05000c30, 0x1c01f000, 0x4933c857, 0x0501fc3c,
+ 0x4df00000, 0x4d340000, 0x4d180000, 0x4d900000,
+ 0x4dd00000, 0x4da40000, 0x4d140000, 0x4cd80000,
+ 0x5932680a, 0x58d4202f, 0x40102800, 0x801021c0,
+ 0x05000016, 0x41300000, 0x80100580, 0x05000011,
+ 0x5810000a, 0x81340580, 0x0502000b, 0x40101800,
+ 0x58102001, 0x41300000, 0x801021c0, 0x0500000b,
+ 0x80100d80, 0x05000007, 0x40101800, 0x58102001,
+ 0x05fdf7fa, 0x40102800, 0x58102000, 0x05fdf7ec,
+ 0x0501f879, 0x0501f00d, 0x417a3000, 0x0505f959,
+ 0x59900005, 0x81300580, 0x05000005, 0x811a3000,
+ 0x91180485, 0x05021010, 0x05fdf7f9, 0x0501fe46,
+ 0x0501fbdf, 0x0501fbe4, 0x5c01b000, 0x5c022800,
+ 0x5c034800, 0x5c03a000, 0x5c032000, 0x5c023000,
+ 0x5c026800, 0x5c03e000, 0x05000bf6, 0x80000580,
+ 0x1c01f000, 0x5c01b000, 0x5c022800, 0x5c034800,
+ 0x5c03a000, 0x5c032000, 0x5c023000, 0x5c026800,
+ 0x5c03e000, 0x05000beb, 0x90000541, 0x1c01f000,
+ 0x0501fbf7, 0x4df00000, 0x4d300000, 0x4d340000,
+ 0x4d180000, 0x4d2c0000, 0x4c5c0000, 0x4d900000,
+ 0x4dd00000, 0x4da40000, 0x4d140000, 0x4cd80000,
+ 0x58d6602f, 0x813261c0, 0x05000021, 0x41302800,
+ 0x5930b800, 0x5932680a, 0x59340403, 0x81440580,
+ 0x05000006, 0x805cb9c0, 0x05000019, 0x41302800,
+ 0x405e6000, 0x05fdf7f7, 0x5930001d, 0x81240580,
+ 0x05fe07f9, 0x5930b801, 0x4c0c0000, 0x4c140000,
+ 0x0509f8ca, 0x5c002800, 0x5c001800, 0x05000008,
+ 0x0501f831, 0x4c0c0000, 0x4c140000, 0x0501fa5d,
+ 0x5c002800, 0x5c001800, 0x0501f002, 0x41301800,
+ 0x405e6000, 0x813261c0, 0x05fe07ec, 0x417a3000,
+ 0x0505f908, 0x59926005, 0x813261c0, 0x05000005,
+ 0x5932680a, 0x59340403, 0x81440580, 0x05000005,
+ 0x811a3000, 0x91180485, 0x05fc17f6, 0x0501f00d,
+ 0x5930001d, 0x81240580, 0x05fe07fa, 0x4c140000,
+ 0x0509f8aa, 0x5c002800, 0x05fc07f6, 0x0501fdea,
+ 0x0501fb83, 0x0501fb88, 0x0501fa3e, 0x05fdf7f1,
+ 0x5c01b000, 0x5c022800, 0x5c034800, 0x5c03a000,
+ 0x5c032000, 0x5c00b800, 0x5c025800, 0x5c023000,
+ 0x5c026800, 0x5c026000, 0x5c03e000, 0x05000b95,
+ 0x1c01f000, 0x0501fb78, 0x58d4002f, 0x81300580,
+ 0x0502001c, 0x59300801, 0x800409c0, 0x0500000e,
+ 0x59300000, 0x800001c0, 0x05020005, 0x4805a82f,
+ 0x4805a82e, 0x497a6001, 0x1c01f000, 0x59300000,
+ 0x48000800, 0x4805a82f, 0x497a6000, 0x497a6001,
+ 0x1c01f000, 0x59300800, 0x800409c0, 0x05020005,
+ 0x4979a82f, 0x4979a82e, 0x497a680c, 0x1c01f000,
+ 0x4805a82f, 0x497a6000, 0x497a680c, 0x1c01f000,
+ 0x58d4002e, 0x81300580, 0x0502000c, 0x59300001,
+ 0x800001c0, 0x05020005, 0x4815a82e, 0x49782800,
+ 0x497a680c, 0x1c01f000, 0x4801a82e, 0x48002800,
+ 0x497a6001, 0x1c01f000, 0x59300000, 0x800001c0,
+ 0x05020008, 0x59300001, 0x48001801, 0x800001c0,
+ 0x05020002, 0x480e680c, 0x497a6001, 0x1c01f000,
+ 0x59300801, 0x800409c0, 0x05020006, 0x59300800,
+ 0x48042800, 0x497a6000, 0x497a680c, 0x1c01f000,
+ 0x59300000, 0x48000800, 0x48042800, 0x497a6000,
+ 0x497a6001, 0x1c01f000, 0x0501fb5d, 0x4df00000,
+ 0x0501f828, 0x050208ec, 0x05020960, 0x05020005,
+ 0x5c03e000, 0x05000b47, 0x80000580, 0x1c01f000,
+ 0x5c03e000, 0x05000b43, 0x90000541, 0x1c01f000,
+ 0x4d2c0000, 0x4d340000, 0x4d300000, 0x4c5c0000,
+ 0x4178b800, 0x598e6007, 0x813261c0, 0x0500000e,
+ 0x0509f83a, 0x05000009, 0x59300000, 0x4c000000,
+ 0x0501fa46, 0x405c3000, 0x0501f851, 0x0501f9cd,
+ 0x5c026000, 0x05fdf7f5, 0x4130b800, 0x59326000,
+ 0x05fdf7f2, 0x0509f8d3, 0x0509f8ee, 0x5c00b800,
+ 0x5c026000, 0x5c026800, 0x5c025800, 0x1c01f000,
+ 0x4933c857, 0x4c5c0000, 0x813261c0, 0x05c00bf7,
+ 0x41300000, 0x598cb807, 0x41783000, 0x805cb9c0,
+ 0x05000011, 0x805c0d80, 0x05000004, 0x405c3000,
+ 0x5818b800, 0x05fdf7fa, 0x0501f835, 0x598c000b,
+ 0x81300580, 0x0504084b, 0x59300403, 0xb0000582,
+ 0x05020002, 0x497a6008, 0x80000580, 0x5c00b800,
+ 0x1c01f000, 0x90000541, 0x5c00b800, 0x1c01f000,
+ 0x0501fb17, 0x4df00000, 0x4d2c0000, 0x4d340000,
+ 0x4d300000, 0x4c5c0000, 0x4178b800, 0x598e6007,
+ 0x813261c0, 0x05000015, 0x5932680a, 0x59340403,
+ 0x81440580, 0x0502000e, 0x5930001d, 0x81240580,
+ 0x0502000b, 0x0505fff9, 0x05000009, 0x59300000,
+ 0x4c000000, 0x0501fa05, 0x405c3000, 0x0501f810,
+ 0x0501f98c, 0x5c026000, 0x05fdf7ee, 0x4130b800,
+ 0x59326000, 0x05fdf7eb, 0x0509f846, 0x0509f8ad,
+ 0x5c00b800, 0x5c026000, 0x5c026800, 0x5c025800,
+ 0x5c03e000, 0x05000ae3, 0x1c01f000, 0x59300800,
+ 0x497a6000, 0x0501fac4, 0x801831c0, 0x05020009,
+ 0x598c0006, 0x81300580, 0x05020004, 0x48031806,
+ 0x48031807, 0x0501f008, 0x48071807, 0x0501f006,
+ 0x48043000, 0x598c0006, 0x81300580, 0x05020002,
+ 0x481b1806, 0x0501f2c8, 0x4d300000, 0x598e6005,
+ 0x813261c0, 0x05000008, 0x59300000, 0x4c000000,
+ 0x0501f9da, 0x0005ffdc, 0x0501fabf, 0x5c026000,
+ 0x05fdf7f8, 0x497b1805, 0x497b1804, 0x5c026000,
+ 0x1c01f000, 0x0501face, 0x4df00000, 0x4d300000,
0x4c5c0000, 0x4c600000, 0x4130c000, 0x4178b800,
0x598e6005, 0x813261c0, 0x05000036, 0x5930080a,
- 0x800409c0, 0x0502000d, 0x4d340000, 0x0001fae7,
+ 0x800409c0, 0x0502000d, 0x4d340000, 0x0001fb00,
0x41340800, 0x5c026800, 0x0502002b, 0x58040802,
0x59300019, 0x80040580, 0x82000500, 0x00ffffff,
0x05000005, 0x0501f024, 0x58040403, 0x81440580,
0x05020021, 0x5930501a, 0x59340013, 0x82000500,
0x00ffffff, 0x80280580, 0x0502001b, 0x5930002a,
- 0x80600580, 0x05000018, 0x0501f820, 0x59302000,
+ 0x80600580, 0x05000018, 0x0501f9ac, 0x59302000,
0x497a6000, 0x805cb9c0, 0x05020009, 0x598c0004,
0x81300580, 0x05020004, 0x497b1805, 0x497b1804,
0x0501f008, 0x48131805, 0x0501f006, 0x4810b800,
0x598c0004, 0x81300580, 0x05020002, 0x485f1804,
- 0x4c100000, 0x0005fc5a, 0x0501f8f2, 0x5c026000,
+ 0x4c100000, 0x0005ffdc, 0x0501fa7f, 0x5c026000,
0x05fdf7cd, 0x4130b800, 0x59326000, 0x05fdf7ca,
0x5c00c000, 0x5c00b800, 0x5c026000, 0x5c03e000,
- 0x050008ef, 0x1c01f000, 0x598c000b, 0x81300580,
+ 0x05000a7c, 0x1c01f000, 0x4d2c0000, 0x4d300000,
+ 0x4d340000, 0x4c5c0000, 0x4178b800, 0x598e6009,
+ 0x813261c0, 0x0500000e, 0x0505ff74, 0x05000009,
+ 0x0501f982, 0x59300000, 0x4c000000, 0x405c3000,
+ 0x0501f855, 0x0501f907, 0x5c026000, 0x05fdf7f5,
+ 0x4130b800, 0x59326000, 0x05fdf7f2, 0x05e9fc6d,
+ 0x5c00b800, 0x5c026800, 0x5c026000, 0x5c025800,
+ 0x1c01f000, 0x4933c857, 0x4c5c0000, 0x813261c0,
+ 0x05c00b32, 0x41300000, 0x598cb809, 0x41783000,
+ 0x805cb9c0, 0x0500000e, 0x805c0d80, 0x05000004,
+ 0x405c3000, 0x5818b800, 0x05fdf7fa, 0x0501f83a,
+ 0x598c000b, 0x81300580, 0x05000f86, 0x497a6008,
+ 0x80000580, 0x5c00b800, 0x1c01f000, 0x90000541,
+ 0x5c00b800, 0x1c01f000, 0x0501fa55, 0x4df00000,
+ 0x4d340000, 0x4d300000, 0x4d2c0000, 0x4c5c0000,
+ 0x83440480, 0x000007f0, 0x05021020, 0x0001fb00,
+ 0x05c20b12, 0x4178b800, 0x598e6009, 0x813261c0,
+ 0x05000014, 0x5930000a, 0x81340580, 0x0502000e,
+ 0x5930001d, 0x81240580, 0x0502000b, 0x0505ff33,
+ 0x05000009, 0x0501f941, 0x59300000, 0x4c000000,
+ 0x405c3000, 0x0501f814, 0x0501f8c6, 0x5c026000,
+ 0x05fdf7ef, 0x4130b800, 0x59326000, 0x05fdf7ec,
+ 0x8d3c0506, 0x05000004, 0x59340200, 0x8c00050e,
+ 0x05020002, 0x05e9fc46, 0x5c00b800, 0x5c025800,
+ 0x5c026000, 0x5c026800, 0x5c03e000, 0x05000a19,
+ 0x1c01f000, 0x59300800, 0x497a6000, 0x0501f9fa,
+ 0x801831c0, 0x05020009, 0x598c0008, 0x81300580,
+ 0x05020004, 0x48031808, 0x48031809, 0x0501f008,
+ 0x48071809, 0x0501f006, 0x48043000, 0x598c0008,
+ 0x81300580, 0x05020002, 0x481b1808, 0x0501f1fe,
+ 0x0501fa13, 0x4df00000, 0x4d300000, 0x4c5c0000,
+ 0x4178b800, 0x598e6003, 0x813261c0, 0x0500000e,
+ 0x0505fefe, 0x05000009, 0x0501f90c, 0x59300000,
+ 0x4c000000, 0x405c3000, 0x0501f86c, 0x0501f891,
+ 0x5c026000, 0x05fdf7f5, 0x4130b800, 0x59326000,
+ 0x05fdf7f2, 0x5c00b800, 0x5c026000, 0x5c03e000,
+ 0x050009ec, 0x1c01f000, 0x4933c857, 0x4c5c0000,
+ 0x4c600000, 0x813261c0, 0x05c00abc, 0x41300000,
+ 0x598cb803, 0x405cc000, 0x805cb9c0, 0x05000024,
+ 0x805c0d80, 0x05000004, 0x405cc000, 0x5860b800,
+ 0x05fdf7fa, 0x598c000b, 0x81300580, 0x05000f11,
+ 0x0501f9bd, 0x598c0003, 0x805c0580, 0x05020009,
+ 0x585c0000, 0x48031803, 0x4978b800, 0x598c0002,
+ 0x805c0580, 0x0502000d, 0x497b1802, 0x0501f00b,
+ 0x598c0002, 0x805c0580, 0x05020005, 0x48631802,
+ 0x4978b800, 0x4978c000, 0x0501f004, 0x585c0000,
+ 0x4800c000, 0x4978b800, 0x0501f9bb, 0x80000580,
+ 0x5c00c000, 0x5c00b800, 0x1c01f000, 0x90000541,
+ 0x5c00c000, 0x5c00b800, 0x1c01f000, 0x4933c857,
+ 0x0501f9c7, 0x4df00000, 0x4d2c0000, 0x4d340000,
+ 0x4d300000, 0x4c5c0000, 0x4178b800, 0x598e6003,
+ 0x813261c0, 0x0500001e, 0x5932680a, 0x59340403,
+ 0x81440580, 0x05020017, 0x812649c0, 0x05000004,
+ 0x5930001d, 0x81240580, 0x05020012, 0x0505fea7,
+ 0x05000010, 0x0515f968, 0x05000006, 0x0515ffea,
+ 0x05020004, 0x59300403, 0xb0000583, 0x05140feb,
+ 0x0501f8ae, 0x59300000, 0x4c000000, 0x405c3000,
+ 0x0501f80e, 0x0501f833, 0x5c026000, 0x05fdf7e5,
+ 0x4130b800, 0x59326000, 0x05fdf7e2, 0x5c00b800,
+ 0x5c026000, 0x5c026800, 0x5c025800, 0x5c03e000,
+ 0x0500098c, 0x1c01f000, 0x59300800, 0x497a6000,
+ 0x0501f96d, 0x801831c0, 0x05020009, 0x598c0002,
+ 0x81300580, 0x05020004, 0x48031802, 0x48031803,
+ 0x0501f008, 0x48071803, 0x0501f006, 0x48043000,
+ 0x598c0002, 0x81300580, 0x05020002, 0x481b1802,
+ 0x0501f171, 0x4943c857, 0x0501f985, 0x4df00000,
+ 0x05fdfe34, 0x05fdfef9, 0x5c03e000, 0x05000971,
+ 0x1c01f000, 0x4947c857, 0x0501f97d, 0x4df00000,
+ 0x4d3c0000, 0x853e7d00, 0x05fdfe62, 0x05fdff23,
+ 0x5c027800, 0x5c03e000, 0x05000966, 0x1c01f000,
+ 0x5c000000, 0x4c000000, 0x4803c857, 0x4d340000,
+ 0x4d2c0000, 0x5932680a, 0x59325809, 0x59300407,
+ 0x90000c92, 0x05c21a31, 0x4933c857, 0x4943c857,
+ 0x493fc857, 0x4803c857, 0x0c01f804, 0x5c025800,
+ 0x5c026800, 0x1c01f000, 0x001083c4, 0x001083c5,
+ 0x001083cb, 0x001083ed, 0x001083c5, 0x001083d3,
+ 0x00108401, 0x001083c4, 0x001083c4, 0x001083c4,
+ 0x00108408, 0x001083c4, 0x001083c4, 0x001083c4,
+ 0x001083c4, 0x001083c4, 0x0010840e, 0x0010840e,
+ 0x05c1fa16, 0x0525fa91, 0x0515f9f5, 0x05cc0fac,
+ 0x0515fcbd, 0x0509fefa, 0x0509f006, 0x0515f8fe,
+ 0x05000006, 0x49425a0a, 0x0001fb82, 0x59300229,
+ 0x90000583, 0x051409d7, 0x0505f7fe, 0x83300580,
+ 0x00111a40, 0x05020015, 0x0515f8f3, 0x05000010,
+ 0x59a8009d, 0x812c0580, 0x05c20a00, 0x592c0000,
+ 0x4803509d, 0x800001c0, 0x05020002, 0x4803509e,
+ 0x592c1208, 0xb0080595, 0x05020003, 0x05c1fdaf,
+ 0x0501f003, 0x49425a0a, 0x0001fb82, 0x64026203,
+ 0x497a6009, 0x1c01f000, 0x0515f8df, 0x050407e5,
+ 0x05c1f9ee, 0x59300008, 0x8c000500, 0x05c60c5a,
+ 0x0515f8d9, 0x0500000f, 0x592c0208, 0x82000500,
+ 0x000000ff, 0x90000594, 0x051609b2, 0x0519faba,
+ 0x05f5f810, 0x4a025a08, 0x00000103, 0x49425a0a,
+ 0x497a580d, 0x0515fa27, 0x0521ff33, 0x0001fb82,
+ 0x0505f7d0, 0x59300008, 0x8c000500, 0x05c60c46,
+ 0x0515f8c5, 0x05220b81, 0x0519faab, 0x0505f7c9,
+ 0x0515f8c1, 0x05000004, 0x49425a0a, 0x497a5c0d,
+ 0x0001fb82, 0x0505f7c3, 0x05c9fafb, 0x0515f8ba,
+ 0x05000003, 0x49425a0a, 0x0001fb82, 0x59325819,
+ 0x05c1fd87, 0x0505f7bb, 0x598c000b, 0x81300580,
0x05000003, 0x497a6008, 0x1c01f000, 0x59c40004,
0x9000050c, 0x05000005, 0x64338804, 0x4a01a8e5,
- 0x00000800, 0x0501f008, 0x0501fb8c, 0x59300403,
+ 0x00000800, 0x0501f008, 0x0501fb80, 0x59300403,
0xb0000d80, 0x05000003, 0xb0000582, 0x05020002,
- 0x497a6008, 0x0501fe2b, 0x80000580, 0x1c01f000,
- 0x0501f805, 0x60058800, 0x05000002, 0x60018800,
- 0x1c01f000, 0x59300804, 0x8c040520, 0x05020003,
- 0x90000541, 0x1c01f000, 0x4933c857, 0x4d380000,
- 0x59300804, 0x84040d20, 0x48066004, 0x61267000,
- 0x59300203, 0x90000583, 0x05000002, 0x604e7000,
- 0x0005fc78, 0x80000580, 0x5c027000, 0x1c01f000,
- 0x0501f805, 0x60058800, 0x05000002, 0x60018800,
- 0x1c01f000, 0x59300019, 0x81480580, 0x05020003,
- 0x5930001a, 0x814c0580, 0x1c01f000, 0x4d2c0000,
- 0x4d300000, 0x0501f8c6, 0x4df00000, 0x05fdfd92,
- 0x59900002, 0x90000503, 0x0c01f001, 0x0010608f,
- 0x00106084, 0x00106083, 0x00106083, 0x05d1f96c,
- 0x59926005, 0x0501f889, 0x813261c0, 0x05000008,
- 0x59300004, 0x8c000516, 0x05000004, 0x59325809,
- 0x497a5809, 0x497a580a, 0x0501f886, 0x5c03e000,
- 0x0500089b, 0x5c026000, 0x5c025800, 0x1c01f000,
- 0x5c000000, 0x4c000000, 0x4803c857, 0x4d300000,
- 0x4a01a8e5, 0x00000800, 0x0501f8a5, 0x4df00000,
- 0x598c0000, 0x90000507, 0x4803c857, 0x0c01f001,
- 0x001060c6, 0x001060a9, 0x001060b0, 0x001060b3,
- 0x001060bf, 0x001060c6, 0x001060c3, 0x001060a8,
- 0x05d1f947, 0x598c000b, 0x80026540, 0x05000003,
- 0x0501f81e, 0x05d20942, 0x0501fdce, 0x0501f017,
- 0x0501f829, 0x0501fdcb, 0x0501f014, 0x598c000b,
- 0x80026540, 0x05000011, 0x0501f83a, 0x05000006,
- 0x0501f847, 0x05000004, 0x0501f810, 0x05000002,
- 0x0501f81d, 0x0501fdbf, 0x0501f008, 0x0501f840,
- 0x05d2092f, 0x0501fdbb, 0x0501f004, 0x0501f82d,
- 0x05d2092b, 0x0501fdb7, 0x5c03e000, 0x05000864,
- 0x5c026000, 0x1c01f000, 0x598c0007, 0x81300580,
- 0x0502000c, 0x0501f857, 0x0501f846, 0x59300000,
- 0x800001c0, 0x05000004, 0x48031807, 0x497a6000,
- 0x0501f003, 0x497b1807, 0x497b1806, 0x80000580,
- 0x1c01f000, 0x4d2c0000, 0x59300407, 0x90000583,
- 0x05020012, 0x598c0009, 0x81300580, 0x0502000f,
- 0x0501f844, 0x59325809, 0x497a5809, 0x497a580a,
- 0x0501f830, 0x59300000, 0x800001c0, 0x05000004,
- 0x48031809, 0x497a6000, 0x0501f003, 0x497b1808,
- 0x497b1809, 0x80000580, 0x5c025800, 0x1c01f000,
- 0x598c0005, 0x81300580, 0x0502000c, 0x0501f831,
- 0x0501f820, 0x59300000, 0x800001c0, 0x05000004,
- 0x48031805, 0x497a6000, 0x0501f003, 0x497b1805,
- 0x497b1804, 0x80000580, 0x1c01f000, 0x598c0003,
- 0x81300580, 0x0502000c, 0x0501f822, 0x0501f811,
- 0x59300000, 0x800001c0, 0x05000004, 0x48031803,
- 0x497a6000, 0x0501f003, 0x497b1803, 0x497b1802,
- 0x80000580, 0x1c01f000, 0x64032002, 0x497b2005,
- 0x497b2006, 0x497b2007, 0x4979b003, 0x1c01f000,
- 0x4c040000, 0x59300004, 0x82000500, 0x7ffeffff,
- 0x48026004, 0x58d400e4, 0x8c000514, 0x05000007,
- 0x58d40011, 0x81300580, 0x05020004, 0x4979a811,
- 0x4a01a8e4, 0x00000800, 0x5c000800, 0x1c01f000,
- 0x4803c856, 0x598c000a, 0x80000540, 0x05000003,
- 0x80000040, 0x4803180a, 0x1c01f000, 0x58d400ea,
- 0x90000507, 0x90000583, 0x05020003, 0x4803c856,
- 0x6405a8e8, 0x59bc00ea, 0x90000507, 0x90000583,
- 0x05020005, 0x4803c856, 0x640778e8, 0x4a0370e4,
- 0x00000800, 0x1c01f000, 0x0501f805, 0x60058800,
- 0x05000002, 0x60018800, 0x1c01f000, 0x60042800,
+ 0x497a6008, 0x0501fe13, 0x80000580, 0x1c01f000,
+ 0x59300804, 0x8c040520, 0x05020003, 0x90000541,
+ 0x1c01f000, 0x4933c857, 0x59300804, 0x84040d20,
+ 0x48066004, 0x640a6203, 0x80000580, 0x1c01f000,
+ 0x4933c857, 0x4d380000, 0x59300804, 0x84040d20,
+ 0x48066004, 0x61267000, 0x59300203, 0x90000583,
+ 0x05000002, 0x604e7000, 0x0009f800, 0x80000580,
+ 0x5c027000, 0x1c01f000, 0x59300019, 0x81480580,
+ 0x05020003, 0x5930001a, 0x814c0580, 0x1c01f000,
+ 0x4d2c0000, 0x4d300000, 0x0501f8c5, 0x4df00000,
+ 0x05f9fb8b, 0x59900002, 0x90000503, 0x0c01f001,
+ 0x00108464, 0x00108459, 0x00108458, 0x00108458,
+ 0x05c1f982, 0x59926005, 0x0501f889, 0x813261c0,
+ 0x05000008, 0x59300004, 0x8c000516, 0x05000004,
+ 0x59325809, 0x497a580c, 0x497a580d, 0x0501f886,
+ 0x5c03e000, 0x0500089f, 0x5c026000, 0x5c025800,
+ 0x1c01f000, 0x5c000000, 0x4c000000, 0x4803c857,
+ 0x4d300000, 0x4a01a8e5, 0x00000800, 0x0501f8a4,
+ 0x4df00000, 0x598c0000, 0x90000507, 0x4803c857,
+ 0x0c01f001, 0x0010849b, 0x0010847e, 0x00108485,
+ 0x00108488, 0x00108494, 0x0010849b, 0x00108498,
+ 0x0010847d, 0x05c1f95d, 0x598c000b, 0x80026540,
+ 0x05000003, 0x0501f81e, 0x05c20958, 0x0501fdb9,
+ 0x0501f017, 0x0501f829, 0x0501fdb6, 0x0501f014,
+ 0x598c000b, 0x80026540, 0x05000011, 0x0501f83a,
+ 0x05000006, 0x0501f847, 0x05000004, 0x0501f810,
+ 0x05000002, 0x0501f81d, 0x0501fdaa, 0x0501f008,
+ 0x0501f840, 0x05c20945, 0x0501fda6, 0x0501f004,
+ 0x0501f82d, 0x05c20941, 0x0501fda2, 0x5c03e000,
+ 0x05000868, 0x5c026000, 0x1c01f000, 0x598c0007,
+ 0x81300580, 0x0502000c, 0x0501f85b, 0x0501f846,
+ 0x59300000, 0x800001c0, 0x05000004, 0x48031807,
+ 0x497a6000, 0x0501f003, 0x497b1807, 0x497b1806,
+ 0x80000580, 0x1c01f000, 0x4d2c0000, 0x59300407,
+ 0x90000583, 0x05020012, 0x598c0009, 0x81300580,
+ 0x0502000f, 0x0501f848, 0x59325809, 0x497a580c,
+ 0x497a580d, 0x0501f830, 0x59300000, 0x800001c0,
+ 0x05000004, 0x48031809, 0x497a6000, 0x0501f003,
+ 0x497b1808, 0x497b1809, 0x80000580, 0x5c025800,
+ 0x1c01f000, 0x598c0005, 0x81300580, 0x0502000c,
+ 0x0501f835, 0x0501f820, 0x59300000, 0x800001c0,
+ 0x05000004, 0x48031805, 0x497a6000, 0x0501f003,
+ 0x497b1805, 0x497b1804, 0x80000580, 0x1c01f000,
+ 0x598c0003, 0x81300580, 0x0502000c, 0x0501f826,
+ 0x0501f811, 0x59300000, 0x800001c0, 0x05000004,
+ 0x48031803, 0x497a6000, 0x0501f003, 0x497b1803,
+ 0x497b1802, 0x80000580, 0x1c01f000, 0x64032002,
+ 0x497b2005, 0x497b2006, 0x497b2007, 0x4979b003,
+ 0x1c01f000, 0x4c040000, 0x59300004, 0x8c000516,
+ 0x05020003, 0x82000500, 0xffd7ffff, 0x82000500,
+ 0x7ffef7ff, 0x48026004, 0x58d400e4, 0x8c000514,
+ 0x05000007, 0x58d40011, 0x81300580, 0x05020004,
+ 0x4979a811, 0x4a01a8e4, 0x00000800, 0x5c000800,
+ 0x1c01f000, 0x4803c856, 0x598c000a, 0x80000540,
+ 0x05000003, 0x80000040, 0x4803180a, 0x1c01f000,
+ 0x58d400ea, 0x90000507, 0x90000583, 0x05020003,
+ 0x4803c856, 0x6405a8e8, 0x59bc00ea, 0x90000507,
+ 0x90000583, 0x05020005, 0x4803c856, 0x640778e8,
+ 0x4a0370e4, 0x00000800, 0x1c01f000, 0x60042800,
0x58d400ea, 0x90000507, 0x90000581, 0x0502000d,
- 0x4803c856, 0x60000800, 0x0501f831, 0x60000820,
+ 0x4803c856, 0x60000800, 0x0501f830, 0x60000820,
0x58d400ea, 0x90000507, 0x90000583, 0x05000004,
- 0x80040840, 0x05fe07fb, 0x05d1f8a1, 0x41782800,
- 0x59bc00ea, 0x90000507, 0x90000581, 0x0502000e,
- 0x4803c856, 0x60000800, 0x0501f80d, 0x4a0370e4,
- 0x00000c00, 0x60000820, 0x59bc00ea, 0x90000507,
- 0x90000583, 0x05000005, 0x80040840, 0x05fe07fb,
- 0x05d1f88f, 0x801429c0, 0x1c01f000, 0x59bc00ea,
- 0x90000507, 0x90000581, 0x05d20889, 0x59bc00ea,
- 0x8c000516, 0x05fe07fe, 0x480778e1, 0x1c01f000,
- 0x40681000, 0x406c0800, 0x59bc00ea, 0x8c000516,
- 0x05fe07fe, 0x480778e1, 0x59bc00ea, 0x8c000516,
- 0x05fe07fe, 0x480b78e1, 0x1c01f000, 0x58d400ea,
- 0x8c000516, 0x05fe07fe, 0x4805a8e1, 0x1c01f000,
- 0x58d400ea, 0x8c000516, 0x05fe07fe, 0x4805a8e1,
- 0x58d400ea, 0x8c000516, 0x05fe07fe, 0x4809a8e1,
- 0x1c01f000, 0x4a0378e4, 0x00002000, 0x42007000,
- 0x0010aefa, 0x58380401, 0x8c000506, 0x05020003,
- 0x4a01a8e4, 0x00008000, 0x1c01f000, 0x82000d00,
- 0x02000018, 0x05d20854, 0x05d1f85d, 0x001062f6,
- 0x0010630b, 0x0010619a, 0x001062f5, 0x00106199,
- 0x0010628f, 0x05d1f856, 0x4d2c0000, 0x4d300000,
- 0x58d400ea, 0x8c000510, 0x05fc07fe, 0x58d660e0,
- 0x813261c0, 0x05d0084e, 0x59300004, 0x8c000520,
- 0x05000010, 0x82000500, 0xfffefeff, 0x48026004,
- 0x59325809, 0x59301407, 0x90080583, 0x05000006,
- 0x90080586, 0x05d20842, 0x592c0a07, 0x0005fae7,
- 0x0501f006, 0x0001fb5b, 0x0005fc5a, 0x0501f003,
- 0x84000510, 0x48026004, 0x5c026000, 0x5c025800,
- 0x1c01f000, 0x82000d00, 0x82000018, 0x05d2082a,
- 0x05d1f833, 0x001061cd, 0x001061cd, 0x001061cd,
- 0x001061ce, 0x001061ee, 0x00106271, 0x001061cd,
- 0x001062c4, 0x001061cd, 0x001062f5, 0x0010620d,
- 0x00020b80, 0x00106250, 0x001061cd, 0x001061cd,
- 0x001061cd, 0x05d1f822, 0x4d300000, 0x4d900000,
- 0x4dd00000, 0x4da40000, 0x4d140000, 0x4cd80000,
- 0x0501fcc0, 0x59bc00ea, 0x8c000510, 0x05fc07fe,
- 0x59be60e0, 0x59300004, 0x8c000520, 0x05000010,
- 0x82000500, 0xfffefeff, 0x48026004, 0x05fdff60,
- 0x05d5fb7c, 0x05d5fbdb, 0x05d5fb9a, 0x5c01b000,
- 0x5c022800, 0x5c034800, 0x5c03a000, 0x5c032000,
- 0x5c026000, 0x642378e4, 0x05fdf741, 0x84000510,
- 0x48026004, 0x05fdf7f6, 0x4d300000, 0x4d900000,
- 0x4dd00000, 0x4da40000, 0x4d140000, 0x4cd80000,
- 0x0501fca0, 0x59bc00ea, 0x8c000510, 0x05fc07fe,
- 0x59be60e0, 0x59300004, 0x8c000520, 0x0500000f,
- 0x82000500, 0xfffefeff, 0x48026004, 0x640e6203,
- 0x05fdff3f, 0x05d5fb18, 0x5c01b000, 0x5c022800,
+ 0x80040840, 0x05fe07fb, 0x05c1f8b8, 0x41782800,
+ 0x59bc00ea, 0x90000507, 0x90000581, 0x0502000f,
+ 0x4803c856, 0x60000800, 0x0501f80e, 0x4a0370e4,
+ 0x00000c00, 0x42000800, 0x00010000, 0x59bc00ea,
+ 0x90000507, 0x90000583, 0x05000005, 0x80040840,
+ 0x05fe07fb, 0x05c1f8a5, 0x801429c0, 0x1c01f000,
+ 0x59bc00ea, 0x90000507, 0x90000581, 0x05c2089f,
+ 0x59bc00ea, 0x8c000516, 0x05fe07fe, 0x480778e1,
+ 0x1c01f000, 0x59bc00ea, 0x8c000516, 0x05fe07fe,
+ 0x480778e1, 0x59bc00ea, 0x8c000516, 0x05fe07fe,
+ 0x480b78e1, 0x1c01f000, 0x58d400ea, 0x8c000516,
+ 0x05fe07fe, 0x4805a8e1, 0x1c01f000, 0x58d400ea,
+ 0x8c000516, 0x05fe07fe, 0x4805a8e1, 0x58d400ea,
+ 0x8c000516, 0x05fe07fe, 0x4809a8e1, 0x1c01f000,
+ 0x4a0378e4, 0x00002000, 0x42007000, 0x0010e060,
+ 0x58380401, 0x8c000506, 0x05020003, 0x4a01a8e4,
+ 0x00008000, 0x1c01f000, 0x82000d00, 0x02000018,
+ 0x05c2086f, 0x05c1f875, 0x001086c7, 0x001086dc,
+ 0x0010856d, 0x001086c6, 0x0010856c, 0x00108660,
+ 0x05c1f86e, 0x4d2c0000, 0x4d300000, 0x58d400ea,
+ 0x8c000510, 0x05fc07fe, 0x58d660e0, 0x813261c0,
+ 0x05c00866, 0x59300004, 0x8c000520, 0x05000010,
+ 0x82000500, 0xfffefeff, 0x48026004, 0x59325809,
+ 0x59301407, 0x90080583, 0x05000006, 0x90080586,
+ 0x05c2085a, 0x592c0a0a, 0x0005fe45, 0x0501f006,
+ 0x0001fb82, 0x0005ffdc, 0x0501f003, 0x84000510,
+ 0x48026004, 0x5c026000, 0x5c025800, 0x1c01f000,
+ 0x82000d00, 0x82000018, 0x05c20845, 0x05c1f84b,
+ 0x001085a0, 0x001085a0, 0x001085a0, 0x001085a1,
+ 0x001085c1, 0x00108642, 0x001085a0, 0x00108695,
+ 0x001085a0, 0x001086c6, 0x001085e0, 0x00020eff,
+ 0x00108623, 0x001085a0, 0x001085a0, 0x001085a0,
+ 0x05c1f83a, 0x4d300000, 0x4d900000, 0x4dd00000,
+ 0x4da40000, 0x4d140000, 0x4cd80000, 0x0501fcad,
+ 0x59bc00ea, 0x8c000510, 0x05fc07fe, 0x59be60e0,
+ 0x59300004, 0x8c000520, 0x05000010, 0x82000500,
+ 0xfffefeff, 0x48026004, 0x05fdff61, 0x05c5fc2f,
+ 0x05c5fc8e, 0x05c5fc4d, 0x5c01b000, 0x5c022800,
0x5c034800, 0x5c03a000, 0x5c032000, 0x5c026000,
- 0x642378e4, 0x05fdf722, 0x84000510, 0x48026004,
- 0x05fdf7f6, 0x4d300000, 0x4d2c0000, 0x4d900000,
- 0x4dd00000, 0x4da40000, 0x4d140000, 0x4cd80000,
- 0x0501fc80, 0x59bc00ea, 0x8c000510, 0x05fc07fe,
- 0x59be60e0, 0x59300004, 0x8c000520, 0x0500001a,
- 0x82000500, 0xfffefeff, 0x48026004, 0x640e6203,
- 0x59325809, 0x812e59c0, 0x05cc0fcd, 0x42000000,
- 0x0010b2f9, 0x0521f820, 0x592c0209, 0x84000552,
- 0x48025a09, 0x05d5fea4, 0x05fdff15, 0x05d5faee,
- 0x5c01b000, 0x5c022800, 0x5c034800, 0x5c03a000,
- 0x5c032000, 0x5c025800, 0x5c026000, 0x642378e4,
- 0x05fdf6f7, 0x84000510, 0x48026004, 0x05fdf7f5,
- 0x42007000, 0x00020d9f, 0x58380000, 0x90000580,
- 0x0500000d, 0x58d80805, 0x8c040500, 0x0500000a,
- 0x83180400, 0x00020bf0, 0x50006000, 0x58380001,
- 0x80300580, 0x05000005, 0x4803c856, 0x05d1fc5c,
- 0x4979b005, 0x1c01f000, 0x5830000f, 0x4803c857,
- 0x6404620e, 0x4978600f, 0x49787002, 0x1c01f000,
- 0x4d2c0000, 0x4d300000, 0x59bc00ea, 0x8c000510,
- 0x05fc07fe, 0x59be60e0, 0x813261c0, 0x05cc0f98,
- 0x59300004, 0x8c000520, 0x05000014, 0x82000500,
- 0xfffefeff, 0x48026004, 0x59301407, 0x90080583,
- 0x05ce0f8f, 0x0201f800, 0x0010f0f2, 0x80c40040,
- 0x05ce0f8b, 0x59325809, 0x60040800, 0x600a8000,
- 0x05f1fe82, 0x0001fb5b, 0x0005fc5a, 0x5c026000,
- 0x5c025800, 0x1c01f000, 0x84000510, 0x48026004,
- 0x05fdf7fb, 0x4d300000, 0x4d900000, 0x4dd00000,
- 0x4da40000, 0x4d140000, 0x4cd80000, 0x0501fc1d,
+ 0x642378e4, 0x05fdf747, 0x84000510, 0x48026004,
+ 0x05fdf7f6, 0x4d300000, 0x4d900000, 0x4dd00000,
+ 0x4da40000, 0x4d140000, 0x4cd80000, 0x0501fc8d,
0x59bc00ea, 0x8c000510, 0x05fc07fe, 0x59be60e0,
- 0x59300004, 0x8c000520, 0x0500000e, 0x82000500,
- 0xfffefeff, 0x48026004, 0x05fdfebd, 0x05d5facd,
- 0x5c01b000, 0x5c022800, 0x5c034800, 0x5c03a000,
- 0x5c032000, 0x5c026000, 0x642378e4, 0x05fdf6a0,
- 0x84000510, 0x48026004, 0x05fdf7f6, 0x4d300000,
- 0x4d2c0000, 0x4d340000, 0x4da40000, 0x4cd00000,
- 0x4d240000, 0x58d400ea, 0x8c000510, 0x05fc07fe,
- 0x58d660e0, 0x813261c0, 0x05cc0f55, 0x59300004,
- 0x8c000520, 0x0500001e, 0x82000500, 0xfffefeff,
- 0x48026004, 0x5932680a, 0x42034800, 0x0010aefd,
- 0x5932481d, 0x05011000, 0x4a03c840, 0x0010af04,
- 0x644bc842, 0x05011000, 0x4a03c840, 0x0010af16,
- 0x4a03c842, 0x000000ff, 0x05011000, 0x4a03c840,
- 0x0010b015, 0x4a03c842, 0x000000ff, 0x0501fbf9,
- 0x5c024800, 0x5c01a000, 0x5c034800, 0x5c026800,
- 0x5c025800, 0x5c026000, 0x1c01f000, 0x84000510,
- 0x48026004, 0x5c024800, 0x5c01a000, 0x5c034800,
- 0x5c026800, 0x5c025800, 0x5c026000, 0x1c01f000,
- 0x4d300000, 0x4d2c0000, 0x4d340000, 0x4cd00000,
- 0x4d240000, 0x4d900000, 0x4dd00000, 0x4da40000,
- 0x4d140000, 0x4cd80000, 0x0501fbc6, 0x59bc00ea,
- 0x8c000510, 0x05fc07fe, 0x59be60e0, 0x813261c0,
- 0x05cc0f1b, 0x59300004, 0x8c000520, 0x05000011,
- 0x82000500, 0xfffefeff, 0x48026004, 0x5932481d,
- 0x0505fa4e, 0x5c01b000, 0x5c022800, 0x5c034800,
- 0x5c03a000, 0x5c032000, 0x5c024800, 0x5c01a000,
+ 0x59300004, 0x8c000520, 0x0500000f, 0x82000500,
+ 0xfffefeff, 0x48026004, 0x640e6203, 0x05fdff40,
+ 0x05c5fbbf, 0x5c01b000, 0x5c022800, 0x5c034800,
+ 0x5c03a000, 0x5c032000, 0x5c026000, 0x642378e4,
+ 0x05fdf728, 0x84000510, 0x48026004, 0x05fdf7f6,
+ 0x4d300000, 0x4d2c0000, 0x4d900000, 0x4dd00000,
+ 0x4da40000, 0x4d140000, 0x4cd80000, 0x0501fc6d,
+ 0x59bc00ea, 0x8c000510, 0x05fc07fe, 0x59be60e0,
+ 0x59300004, 0x8c000520, 0x0500001a, 0x82000500,
+ 0xfffefeff, 0x48026004, 0x640e6203, 0x59325809,
+ 0x812e59c0, 0x05bc0fe5, 0x42000000, 0x0010e477,
+ 0x0525f9e4, 0x592c020c, 0x84000552, 0x48025a0c,
+ 0x05c5ff35, 0x05fdff16, 0x05c5fb95, 0x5c01b000,
+ 0x5c022800, 0x5c034800, 0x5c03a000, 0x5c032000,
+ 0x5c025800, 0x5c026000, 0x642378e4, 0x05fdf6fd,
+ 0x84000510, 0x48026004, 0x05fdf7f5, 0x42007000,
+ 0x000211a7, 0x58380000, 0x90000580, 0x0500000d,
+ 0x58d80805, 0x8c040500, 0x0500000a, 0x83180400,
+ 0x00020f72, 0x50006000, 0x58380001, 0x80300580,
+ 0x05000005, 0x4803c856, 0x05c1fcbf, 0x4979b005,
+ 0x1c01f000, 0x58300010, 0x4803c857, 0x6404620f,
+ 0x49786010, 0x49787002, 0x1c01f000, 0x4d2c0000,
+ 0x4d300000, 0x59bc00ea, 0x8c000510, 0x05fc07fe,
+ 0x59be60e0, 0x813261c0, 0x05bc0fb0, 0x59300004,
+ 0x8c000520, 0x05000012, 0x82000500, 0xfffefeff,
+ 0x48026004, 0x59301407, 0x90080583, 0x05be0fa7,
+ 0x05fdfb82, 0x05be0fa5, 0x59325809, 0x60040800,
+ 0x600a8000, 0x05e9fff2, 0x0001fb82, 0x0005ffdc,
+ 0x5c026000, 0x5c025800, 0x1c01f000, 0x84000510,
+ 0x48026004, 0x05fdf7fb, 0x4d300000, 0x4d900000,
+ 0x4dd00000, 0x4da40000, 0x4d140000, 0x4cd80000,
+ 0x0501fc0c, 0x59bc00ea, 0x8c000510, 0x05fc07fe,
+ 0x59be60e0, 0x59300004, 0x8c000520, 0x0500000e,
+ 0x82000500, 0xfffefeff, 0x48026004, 0x05fdfec0,
+ 0x05c5fb82, 0x5c01b000, 0x5c022800, 0x5c034800,
+ 0x5c03a000, 0x5c032000, 0x5c026000, 0x642378e4,
+ 0x05fdf6a8, 0x84000510, 0x48026004, 0x05fdf7f6,
+ 0x4d300000, 0x4d2c0000, 0x4d340000, 0x4da40000,
+ 0x4cd00000, 0x4d240000, 0x58d400ea, 0x8c000510,
+ 0x05fc07fe, 0x58d660e0, 0x813261c0, 0x05bc0f6f,
+ 0x59300004, 0x8c000520, 0x0500001e, 0x82000500,
+ 0xfffefeff, 0x48026004, 0x5932680a, 0x42034800,
+ 0x0010e063, 0x5932481d, 0x05011000, 0x4a03c840,
+ 0x0010e06a, 0x644bc842, 0x05011000, 0x4a03c840,
+ 0x0010e07c, 0x4a03c842, 0x000000ff, 0x05011000,
+ 0x4a03c840, 0x0010e17b, 0x4a03c842, 0x000000ff,
+ 0x0501fbe8, 0x5c024800, 0x5c01a000, 0x5c034800,
0x5c026800, 0x5c025800, 0x5c026000, 0x1c01f000,
- 0x84000510, 0x48026004, 0x5c01b000, 0x5c022800,
+ 0x84000510, 0x48026004, 0x5c024800, 0x5c01a000,
+ 0x5c034800, 0x5c026800, 0x5c025800, 0x5c026000,
+ 0x1c01f000, 0x4d300000, 0x4d2c0000, 0x4d340000,
+ 0x4cd00000, 0x4d240000, 0x4d900000, 0x4dd00000,
+ 0x4da40000, 0x4d140000, 0x4cd80000, 0x0501fbb5,
+ 0x59bc00ea, 0x8c000510, 0x05fc07fe, 0x59be60e0,
+ 0x813261c0, 0x05bc0f35, 0x59300004, 0x8c000520,
+ 0x05000011, 0x82000500, 0xfffefeff, 0x48026004,
+ 0x5932481d, 0x0505fa76, 0x5c01b000, 0x5c022800,
0x5c034800, 0x5c03a000, 0x5c032000, 0x5c024800,
0x5c01a000, 0x5c026800, 0x5c025800, 0x5c026000,
- 0x1c01f000, 0x05cdfefa, 0x4d300000, 0x4d380000,
- 0x42000000, 0x0010b337, 0x051dff4b, 0x05fdfe44,
- 0x598e600b, 0x59c40004, 0x8c000506, 0x05000003,
- 0x0501f8d6, 0x64238804, 0x813261c0, 0x05000004,
- 0x0501fb8b, 0x60527000, 0x0005fc78, 0x6409a8e4,
- 0x5c027000, 0x5c026000, 0x05fdf621, 0x4d180000,
- 0x4d300000, 0x4d380000, 0x4d900000, 0x4dd00000,
- 0x4da40000, 0x4d140000, 0x4cd80000, 0x05fdfe2c,
- 0x417a3000, 0x59c40804, 0x83180400, 0x00106653,
- 0x50000000, 0x80040500, 0x05000017, 0x42000000,
- 0x0010b338, 0x051dff28, 0x0501fb76, 0x59926005,
- 0x0501f85d, 0x83180400, 0x00106653, 0x50000000,
- 0x48038804, 0x813261c0, 0x05000007, 0x59300004,
- 0x8c00050c, 0x05020002, 0x640e6203, 0x612a7000,
- 0x0005fc78, 0x59c40004, 0x82000500, 0x00f80000,
- 0x05000004, 0x811a3000, 0x91180485, 0x05fc17e2,
- 0x6421a8e4, 0x5c01b000, 0x5c022800, 0x5c034800,
- 0x5c03a000, 0x5c032000, 0x5c027000, 0x5c026000,
- 0x5c023000, 0x05fdf5ee, 0x4d2c0000, 0x4d340000,
- 0x5932680a, 0x598c0800, 0x90040586, 0x05020004,
- 0x918c1405, 0x918c1c04, 0x0501f00f, 0x90040584,
- 0x05020004, 0x918c1403, 0x918c1c02, 0x0501f00a,
- 0x90040581, 0x05020004, 0x918c1407, 0x918c1c06,
- 0x0501f005, 0x90040582, 0x05020024, 0x918c1409,
- 0x918c1c08, 0x41306800, 0x58340000, 0x80007d40,
- 0x0500001e, 0x583c000a, 0x81340580, 0x05020006,
- 0x403c6800, 0x583c0000, 0x80007d40, 0x05fe07fa,
- 0x0501f016, 0x4933c857, 0x483fc857, 0x583c0000,
- 0x48006800, 0x49307800, 0x443c1000, 0x500c0000,
- 0x803c0580, 0x05020002, 0x44341800, 0x80000580,
- 0x4803180b, 0x4803180d, 0x598c0000, 0x90000583,
- 0x05000002, 0x64031800, 0x80000580, 0x5c026800,
- 0x5c025800, 0x1c01f000, 0x90000541, 0x05fdf7fc,
- 0x0501f805, 0x60018800, 0x05000002, 0x60058800,
- 0x1c01f000, 0x491bc857, 0x59b400f6, 0x90000538,
+ 0x1c01f000, 0x84000510, 0x48026004, 0x5c01b000,
+ 0x5c022800, 0x5c034800, 0x5c03a000, 0x5c032000,
+ 0x5c024800, 0x5c01a000, 0x5c026800, 0x5c025800,
+ 0x5c026000, 0x1c01f000, 0x05bdff14, 0x4d300000,
+ 0x4d380000, 0x42000000, 0x0010e4b5, 0x0525f911,
+ 0x05fdfe47, 0x598e600b, 0x59c40004, 0x8c000506,
+ 0x05000003, 0x0501f8d1, 0x64238804, 0x813261c0,
+ 0x05000004, 0x0501fb7a, 0x60527000, 0x0009f800,
+ 0x6409a8e4, 0x5c027000, 0x5c026000, 0x05fdf629,
+ 0x4d180000, 0x4d300000, 0x4d380000, 0x4d900000,
+ 0x4dd00000, 0x4da40000, 0x4d140000, 0x4cd80000,
+ 0x05fdfe2f, 0x417a3000, 0x59c40804, 0x83180400,
+ 0x00108a14, 0x50000000, 0x80040500, 0x05000017,
+ 0x42000000, 0x0010e4b6, 0x0525f8ee, 0x0501fb65,
+ 0x59926005, 0x0501f858, 0x83180400, 0x00108a14,
+ 0x50000000, 0x48038804, 0x813261c0, 0x05000007,
+ 0x59300004, 0x8c00050c, 0x05020002, 0x640e6203,
+ 0x612a7000, 0x0009f800, 0x59c40004, 0x82000500,
+ 0x00f80000, 0x05000004, 0x811a3000, 0x91180485,
+ 0x05fc17e2, 0x6421a8e4, 0x5c01b000, 0x5c022800,
+ 0x5c034800, 0x5c03a000, 0x5c032000, 0x5c027000,
+ 0x5c026000, 0x5c023000, 0x05fdf5f6, 0x4d2c0000,
+ 0x4d340000, 0x5932680a, 0x598c0800, 0x90040586,
+ 0x05020004, 0x918c1405, 0x918c1c04, 0x0501f00f,
+ 0x90040584, 0x05020004, 0x918c1403, 0x918c1c02,
+ 0x0501f00a, 0x90040581, 0x05020004, 0x918c1407,
+ 0x918c1c06, 0x0501f005, 0x90040582, 0x05020024,
+ 0x918c1409, 0x918c1c08, 0x41306800, 0x58340000,
+ 0x80007d40, 0x0500001e, 0x583c000a, 0x81340580,
+ 0x05020006, 0x403c6800, 0x583c0000, 0x80007d40,
+ 0x05fe07fa, 0x0501f016, 0x4933c857, 0x483fc857,
+ 0x583c0000, 0x48006800, 0x49307800, 0x443c1000,
+ 0x500c0000, 0x803c0580, 0x05020002, 0x44341800,
+ 0x80000580, 0x4803180b, 0x4803180d, 0x598c0000,
+ 0x90000583, 0x05000002, 0x64031800, 0x80000580,
+ 0x5c026800, 0x5c025800, 0x1c01f000, 0x90000541,
+ 0x05fdf7fc, 0x491bc857, 0x59b400f6, 0x90000538,
0x05fe07fe, 0x59c80840, 0x90040550, 0x48039040,
0x59c41008, 0x4c040000, 0x4c080000, 0x82081500,
- 0xffffff7f, 0x480b8808, 0x0501faa5, 0x05020006,
- 0x0501faa9, 0x05000020, 0x48038804, 0x05d5f9fc,
+ 0xffffff7f, 0x480b8808, 0x0501fa9a, 0x05020006,
+ 0x0501fa9e, 0x05000020, 0x48038804, 0x05c5fab6,
0x0501f03d, 0x64238803, 0x59c40003, 0x90000503,
- 0x05fc07fe, 0x8c000502, 0x05020006, 0x0501fa9e,
- 0x05000015, 0x48038804, 0x05d5f9f1, 0x0501f032,
- 0x0501faa5, 0x05020007, 0x59c80040, 0x8400056a,
+ 0x05fc07fe, 0x8c000502, 0x05020006, 0x0501fa93,
+ 0x05000015, 0x48038804, 0x05c5faab, 0x0501f032,
+ 0x0501fa9a, 0x05020007, 0x59c80040, 0x8400056a,
0x48039040, 0x59c80040, 0x8c00052a, 0x05fe07fe,
0x59c40005, 0x82000500, 0xc0000000, 0x05000006,
0x59c400a3, 0x84000540, 0x480388a3, 0x4a038805,
- 0xc0000000, 0x05d5f9af, 0x4a03a005, 0x30000000,
+ 0xc0000000, 0x05c5fa69, 0x4a03a005, 0x30000000,
0x59d00006, 0x4a03a005, 0x30000000, 0x6401b006,
- 0x59d00005, 0x8c000504, 0x05fe07fe, 0x05fdfe81,
+ 0x59d00005, 0x8c000504, 0x05fe07fe, 0x05fdfe88,
0x6403a014, 0x600008ec, 0x83180540, 0x60000000,
0x480008a1, 0x811800dc, 0x59c80840, 0x80040540,
0x48039040, 0x82000540, 0x00003000, 0x48039040,
0x59c80040, 0x82000500, 0x00003000, 0x05fe07fd,
- 0x05d5f9b4, 0x83180400, 0x00106653, 0x50000000,
- 0x48038804, 0x80000580, 0x4df00000, 0x05fdfa3e,
+ 0x05c5fa6e, 0x83180400, 0x00108a14, 0x50000000,
+ 0x48038804, 0x80000580, 0x4df00000, 0x05f9f840,
0x5c03e000, 0x5c001000, 0x5c000800, 0x480b8808,
0x48079040, 0x1c01f000, 0x4803c856, 0x59b400f6,
0x90000538, 0x05fe07fe, 0x59c80840, 0x90040550,
@@ -19233,3487 +8730,3984 @@ static const uint32_t isp_2500_multi_risc_code[] = {
0x84000540, 0x480388a3, 0x4a038805, 0xc0000000,
0x80000580, 0x4a01a8e5, 0x00000800, 0x5c001000,
0x5c000800, 0x480b8808, 0x48079040, 0x1c01f000,
- 0x0501f805, 0x60058800, 0x05000002, 0x60018800,
- 0x1c01f000, 0x5c000000, 0x4c000000, 0x4803c857,
- 0x491bc857, 0x4933c857, 0x4d900000, 0x4dd00000,
- 0x4da40000, 0x4d140000, 0x4cd80000, 0x05fdfd1c,
- 0x4df00000, 0x0501fa6f, 0x59900005, 0x800001c0,
- 0x05000012, 0x81300580, 0x05020010, 0x59300004,
- 0x84000520, 0x48026004, 0x05fdff4f, 0x0502000a,
- 0x5c03e000, 0x05fc0cfa, 0x80000580, 0x5c01b000,
- 0x5c022800, 0x5c034800, 0x5c03a000, 0x5c032000,
- 0x1c01f000, 0x05fdfc3e, 0x61267000, 0x59300004,
- 0x84000520, 0x48026004, 0x8c00050c, 0x00060c78,
- 0x5c03e000, 0x05fc0cea, 0x90000541, 0x5c01b000,
- 0x5c022800, 0x5c034800, 0x5c03a000, 0x5c032000,
- 0x1c01f000, 0x0501f805, 0x60058800, 0x05000002,
- 0x60018800, 0x1c01f000, 0x4933c857, 0x05fdfcf0,
- 0x4df00000, 0x598c000b, 0x80026540, 0x0500000f,
- 0x59300004, 0x84000520, 0x48026004, 0x05fdff7f,
- 0x05000011, 0x05fdfc3b, 0x604e7000, 0x59300004,
- 0x8c00050c, 0x00060c78, 0x5c03e000, 0x05fc0ccc,
- 0x90000541, 0x1c01f000, 0x916c1581, 0x05fc07fb,
- 0x916c1584, 0x05fc07f9, 0x42001000, 0x00103e29,
- 0x05fdf880, 0x5c03e000, 0x05fc0cc1, 0x80000580,
- 0x1c01f000, 0x4d300000, 0x4d180000, 0x4d3c0000,
- 0x05fdfccf, 0x4df00000, 0x643da8e4, 0x643f78e4,
- 0x0501fa08, 0x417a3000, 0x811808c8, 0x82040c00,
- 0x0000b037, 0x58066005, 0x813261c0, 0x0500000b,
- 0x417a7800, 0x05f1f827, 0x05000007, 0x59300c07,
- 0x90040583, 0x05000003, 0x90040586, 0x05020002,
- 0x600a7800, 0x050dfcc9, 0x811a3000, 0x91180485,
- 0x05fc17ee, 0x61000800, 0x05d5fec4, 0x642b78e4,
- 0x6429a8e4, 0x5c03e000, 0x05fc0c9d, 0x5c027800,
- 0x5c023000, 0x5c026000, 0x1c01f000, 0x4803c856,
- 0x4d300000, 0x05fdfcaa, 0x4df00000, 0x59c80840,
- 0x84040d74, 0x90040550, 0x48039040, 0x59c41008,
- 0x4c040000, 0x4c080000, 0x82081500, 0xffffff7f,
- 0x480b8808, 0x600c1000, 0x0501f9d3, 0x598e600b,
- 0x813261c0, 0x05fe0fa9, 0x050009d6, 0x4a01a8e5,
- 0x00000800, 0x0501f809, 0x5c001000, 0x5c000800,
- 0x480b8808, 0x48079040, 0x5c03e000, 0x05fc0c7c,
- 0x5c026000, 0x1c01f000, 0x4d380000, 0x4d180000,
- 0x4d300000, 0x4d900000, 0x4dd00000, 0x4da40000,
- 0x4d140000, 0x4cd80000, 0x417a3000, 0x05fdf952,
- 0x811a3000, 0x91180585, 0x05fe07fd, 0x0501f9ac,
- 0x0502000a, 0x5c01b000, 0x5c022800, 0x5c034800,
- 0x5c03a000, 0x5c032000, 0x5c026000, 0x5c023000,
- 0x5c027000, 0x1c01f000, 0x0501f9ca, 0x59926005,
- 0x4933c857, 0x05fdfeb0, 0x813261c0, 0x05fc07f2,
- 0x612a7000, 0x640e6203, 0x0005fc78, 0x05fdf7ee,
- 0x4d300000, 0x4d180000, 0x4d900000, 0x05fdfc68,
- 0x60001000, 0x598c0800, 0x90040585, 0x0500099a,
- 0x417a3000, 0x811b20c8, 0x83932400, 0x0000b037,
- 0x59900002, 0x90000581, 0x0502000a, 0x60100800,
- 0x59926005, 0x59300013, 0x82000500, 0xfff00000,
- 0x80000540, 0x05000002, 0x60380800, 0x05fdf900,
- 0x811a3000, 0x91180485, 0x05fc17ef, 0x59c81040,
- 0x84081534, 0x480b9040, 0x05fdfc39, 0x5c032000,
- 0x5c023000, 0x5c026000, 0x1c01f000, 0x4933c857,
- 0x4d900000, 0x4dd00000, 0x4da40000, 0x4d140000,
- 0x4cd80000, 0x4d380000, 0x05fdfc41, 0x4df00000,
- 0x59300004, 0x8c00053e, 0x05020006, 0x8c000520,
- 0x0500001e, 0x05fdfb54, 0x0500001c, 0x0501f025,
- 0x598c000b, 0x81300580, 0x0500000e, 0x050dfd4b,
- 0x05020020, 0x0501f928, 0x0500001e, 0x48038804,
- 0x0501f984, 0x05d5f87a, 0x05fdfb65, 0x61267000,
- 0x59300004, 0x8c00050c, 0x0502000b, 0x0501f00b,
- 0x59c40004, 0x8c000504, 0x05000012, 0x64138804,
- 0x05fdfb78, 0x604e7000, 0x59300004, 0x8c00050c,
- 0x05000002, 0x0005fc78, 0x5c03e000, 0x05fc0c08,
- 0x5c027000, 0x5c01b000, 0x5c022800, 0x5c034800,
- 0x5c03a000, 0x5c032000, 0x80000580, 0x1c01f000,
- 0x5c03e000, 0x05fc0bfe, 0x5c027000, 0x5c01b000,
- 0x5c022800, 0x5c034800, 0x5c03a000, 0x5c032000,
- 0x90000541, 0x1c01f000, 0x59300407, 0x90000583,
- 0x05020007, 0x050dffba, 0x05000005, 0x59301009,
- 0x58080409, 0x84000550, 0x48001409, 0x1c01f000,
- 0x4a01a8e5, 0x00000800, 0x05fdfbfd, 0x59c400af,
- 0x800001c0, 0x05020003, 0x05fdfbe5, 0x05d9f017,
- 0x598c000d, 0x90001482, 0x05021006, 0x80000000,
- 0x4803180d, 0x80000580, 0x05fdf896, 0x0500000e,
- 0x05fdfefe, 0x0502000c, 0x05fdffe4, 0x42000000,
- 0x0010b2ef, 0x051dfcf0, 0x05fdfde8, 0x05000006,
- 0x0501f937, 0x4d380000, 0x60527000, 0x0005fc78,
- 0x5c027000, 0x05fdfbce, 0x05d9f000, 0x4d900000,
+ 0x5c000000, 0x4c000000, 0x4803c857, 0x491bc857,
+ 0x4933c857, 0x4d900000, 0x4dd00000, 0x4da40000,
+ 0x4d140000, 0x4cd80000, 0x05fdfd29, 0x4df00000,
+ 0x0501fa68, 0x59900005, 0x800001c0, 0x05000012,
+ 0x81300580, 0x05020010, 0x59300004, 0x84000520,
+ 0x48026004, 0x05fdff54, 0x0502000a, 0x5c03e000,
+ 0x05fc0d0c, 0x80000580, 0x5c01b000, 0x5c022800,
+ 0x5c034800, 0x5c03a000, 0x5c032000, 0x1c01f000,
+ 0x05fdfc4c, 0x61267000, 0x59300004, 0x84000520,
+ 0x48026004, 0x8c00050c, 0x000a0800, 0x5c03e000,
+ 0x05fc0cfc, 0x90000541, 0x5c01b000, 0x5c022800,
+ 0x5c034800, 0x5c03a000, 0x5c032000, 0x1c01f000,
+ 0x4933c857, 0x05fdfd02, 0x4df00000, 0x598c000b,
+ 0x80026540, 0x0500000f, 0x59300004, 0x84000520,
+ 0x48026004, 0x05fdff89, 0x05000011, 0x05fdfc4e,
+ 0x604e7000, 0x59300004, 0x8c00050c, 0x000a0800,
+ 0x5c03e000, 0x05fc0ce3, 0x90000541, 0x1c01f000,
+ 0x916c1581, 0x05fc07fb, 0x916c1584, 0x05fc07f9,
+ 0x42001000, 0x0010510c, 0x05f5fe8b, 0x5c03e000,
+ 0x05fc0cd8, 0x80000580, 0x1c01f000, 0x4d300000,
+ 0x4d180000, 0x4d3c0000, 0x05fdfce1, 0x4df00000,
+ 0x643da8e4, 0x643f78e4, 0x0501fa06, 0x417a3000,
+ 0x811808c8, 0x82040c00, 0x0000b037, 0x58066005,
+ 0x813261c0, 0x0500000b, 0x417a7800, 0x05e9f879,
+ 0x05000007, 0x59300c07, 0x90040583, 0x05000003,
+ 0x90040586, 0x05020002, 0x600a7800, 0x050dffce,
+ 0x811a3000, 0x91180485, 0x05fc17ee, 0x61000800,
+ 0x05c5ffaa, 0x642b78e4, 0x6429a8e4, 0x5c03e000,
+ 0x05fc0cb4, 0x5c027800, 0x5c023000, 0x5c026000,
+ 0x1c01f000, 0x4803c856, 0x4d300000, 0x05fdfcbc,
+ 0x4df00000, 0x59c80840, 0x84040d74, 0x90040550,
+ 0x48039040, 0x59c41008, 0x4c040000, 0x4c080000,
+ 0x82081500, 0xffffff7f, 0x480b8808, 0x600c1000,
+ 0x0501f9d1, 0x598e600b, 0x813261c0, 0x05fe0fa9,
+ 0x050009d4, 0x4a01a8e5, 0x00000800, 0x0501f809,
+ 0x5c001000, 0x5c000800, 0x480b8808, 0x48079040,
+ 0x5c03e000, 0x05fc0c93, 0x5c026000, 0x1c01f000,
+ 0x4d380000, 0x4d180000, 0x4d300000, 0x4d900000,
0x4dd00000, 0x4da40000, 0x4d140000, 0x4cd80000,
- 0x4d300000, 0x05fdf8a8, 0x05fdfbd9, 0x59c400af,
- 0x800001c0, 0x05000022, 0x0501f92a, 0x59926005,
- 0x4933c857, 0x59300004, 0x8c000516, 0x05000009,
- 0x05fdfea9, 0x0502001a, 0x05fdfb05, 0x05fdfbb8,
- 0x42000800, 0x80000804, 0x0005fb20, 0x0501f014,
- 0x60c018ea, 0x0501f8e9, 0x05020003, 0x05fdf86f,
- 0x0501f00f, 0x05fdfe9c, 0x0502000d, 0x05fdffb7,
- 0x42000000, 0x0010b2f0, 0x051dfcc3, 0x59300004,
- 0x8c00050c, 0x05020002, 0x640e6203, 0x4d380000,
- 0x612a7000, 0x0005fc78, 0x5c027000, 0x05fdfba0,
- 0x5c026000, 0x5c01b000, 0x5c022800, 0x5c034800,
- 0x5c03a000, 0x5c032000, 0x05d5f7cc, 0x4c600000,
+ 0x417a3000, 0x05f5ff5e, 0x811a3000, 0x91180585,
+ 0x05fe07fd, 0x0501f9ab, 0x0502000a, 0x5c01b000,
+ 0x5c022800, 0x5c034800, 0x5c03a000, 0x5c032000,
+ 0x5c026000, 0x5c023000, 0x5c027000, 0x1c01f000,
+ 0x0501f9c8, 0x59926005, 0x4933c857, 0x05fdfeba,
+ 0x813261c0, 0x05fc07f2, 0x612a7000, 0x640e6203,
+ 0x0009f800, 0x05fdf7ee, 0x4d300000, 0x4d180000,
+ 0x4d900000, 0x05fdfc7a, 0x60001000, 0x598c0800,
+ 0x90040585, 0x05000998, 0x417a3000, 0x811b20c8,
+ 0x83932400, 0x0000b037, 0x59900002, 0x90000581,
+ 0x0502000a, 0x60100800, 0x59926005, 0x59300013,
+ 0x82000500, 0xfff00000, 0x80000540, 0x05000002,
+ 0x60380800, 0x05f5ff0d, 0x811a3000, 0x91180485,
+ 0x05fc17ef, 0x59c81040, 0x84081534, 0x480b9040,
+ 0x05fdfc50, 0x5c032000, 0x5c023000, 0x5c026000,
+ 0x1c01f000, 0x4933c857, 0x4d900000, 0x4dd00000,
+ 0x4da40000, 0x4d140000, 0x4cd80000, 0x4d380000,
+ 0x05fdfc53, 0x4df00000, 0x59300004, 0x8c00053e,
+ 0x05020005, 0x8c000520, 0x0500001d, 0x05fdfb71,
+ 0x0501f01b, 0x598c000b, 0x81300580, 0x0500000e,
+ 0x0511f864, 0x05020020, 0x0501f928, 0x0500001e,
+ 0x48038804, 0x0501f983, 0x05c5f93f, 0x05fdfb79,
+ 0x61267000, 0x59300004, 0x8c00050c, 0x0502000b,
+ 0x0501f00b, 0x59c40004, 0x8c000504, 0x05000012,
+ 0x64138804, 0x05fdfb8c, 0x604e7000, 0x59300004,
+ 0x8c00050c, 0x05000002, 0x0009f800, 0x5c03e000,
+ 0x05fc0c20, 0x5c027000, 0x5c01b000, 0x5c022800,
+ 0x5c034800, 0x5c03a000, 0x5c032000, 0x80000580,
+ 0x1c01f000, 0x5c03e000, 0x05fc0c16, 0x5c027000,
+ 0x5c01b000, 0x5c022800, 0x5c034800, 0x5c03a000,
+ 0x5c032000, 0x90000541, 0x1c01f000, 0x59300407,
+ 0x90000583, 0x05020007, 0x0511fbcf, 0x05000005,
+ 0x59301009, 0x5808040c, 0x84000550, 0x4800140c,
+ 0x1c01f000, 0x4a01a8e5, 0x00000800, 0x05fdfc10,
+ 0x59c400af, 0x800001c0, 0x05020003, 0x05fdfbfd,
+ 0x05c9f10a, 0x598c000d, 0x90001482, 0x05021006,
+ 0x80000000, 0x4803180d, 0x80000580, 0x05f5fea4,
+ 0x0500000e, 0x05fdfeff, 0x0502000c, 0x05fdffe4,
+ 0x42000000, 0x0010e46d, 0x0521fec6, 0x05fdfdf8,
+ 0x05000006, 0x0501f936, 0x4d380000, 0x60527000,
+ 0x0009f800, 0x5c027000, 0x05fdfbe6, 0x05c9f0f3,
0x4d900000, 0x4dd00000, 0x4da40000, 0x4d140000,
- 0x4cd80000, 0x4d300000, 0x4d2c0000, 0x05fdfba4,
- 0x0501f8f8, 0x59926005, 0x813261c0, 0x05000040,
- 0x05f1fd92, 0x05020005, 0x4178c000, 0x0505f8c6,
- 0x05000002, 0x6004c000, 0x05f1fd8c, 0x05020005,
- 0x8060c1c0, 0x05000003, 0x0505f8e6, 0x0501f034,
- 0x05fdf852, 0x05020032, 0x4933c857, 0x0501f892,
- 0x05020015, 0x05fdf85c, 0x813261c0, 0x0500002c,
- 0x59325809, 0x812e59c0, 0x05cc0c39, 0x05f1fd7b,
- 0x0502001c, 0x59c40093, 0x4803c857, 0x800001c0,
- 0x05020009, 0x592c0209, 0x84000550, 0x48025a09,
- 0x05f1fe71, 0x0502001e, 0x592c0209, 0x84000510,
- 0x48025a09, 0x05fdf825, 0x0501f019, 0x42000000,
- 0x0010b2f0, 0x051dfc7c, 0x05fdfdb3, 0x592c0209,
- 0x84000550, 0x48025a09, 0x4d380000, 0x612a7000,
- 0x640e6203, 0x0005fc78, 0x5c027000, 0x0501f00c,
- 0x59901007, 0x800811c0, 0x05fe07f1, 0x59c408af,
- 0x82040480, 0x000003e8, 0x05fe17ed, 0x80081000,
- 0x480b2007, 0x05fdf80d, 0x05edf82a, 0x5c025800,
- 0x5c026000, 0x5c01b000, 0x5c022800, 0x5c034800,
- 0x5c03a000, 0x5c032000, 0x5c00c000, 0x05fdf344,
- 0x4d300000, 0x4d2c0000, 0x05fdfb55, 0x598e600b,
- 0x4933c857, 0x813261c0, 0x0500003e, 0x59c41004,
- 0x480bc857, 0x8c080500, 0x05000007, 0x05f1fd3f,
- 0x05020012, 0x05f1fe3c, 0x05020036, 0x05f9ffed,
- 0x0501f034, 0x82080500, 0x000001fe, 0x05fe07fc,
- 0x59c8010b, 0x4803c857, 0x8c000500, 0x05fc07f8,
- 0x42000000, 0x0010b339, 0x051dfc43, 0x05fdfe4b,
- 0x05000878, 0x0501f027, 0x598c000d, 0x80000540,
- 0x0502000e, 0x59c408af, 0x82040480, 0x000003e8,
- 0x0502100a, 0x598c080d, 0x80040800, 0x4807180d,
- 0x05f9ffd4, 0x42000000, 0x0010b22e, 0x051dfc32,
- 0x05e9fff4, 0x0501f017, 0x42000000, 0x0010b2ef,
- 0x051dfc2d, 0x05fdfdbd, 0x813261c0, 0x05020003,
- 0x0501f860, 0x0501f00f, 0x59300407, 0x90000583,
- 0x05020007, 0x59325809, 0x812e59c0, 0x05000004,
- 0x592c0209, 0x84000550, 0x48025a09, 0x0501f868,
- 0x4d380000, 0x60527000, 0x0005fc78, 0x5c027000,
- 0x5c025800, 0x5c026000, 0x05fdf2fd, 0x59c40804,
- 0x83180400, 0x00106649, 0x50000000, 0x80040500,
- 0x1c01f000, 0x59c40804, 0x83180400, 0x0010664e,
- 0x50000000, 0x80040500, 0x1c01f000, 0x59c40804,
- 0x83180400, 0x00106658, 0x50000000, 0x80040500,
- 0x1c01f000, 0x59c80840, 0x82040d00, 0x000e0000,
- 0x83180400, 0x0010665d, 0x50000000, 0x80040580,
- 0x1c01f000, 0x00000210, 0x00000420, 0x00000840,
- 0x00001080, 0x00002100, 0x00004000, 0x00008000,
- 0x00010000, 0x00020000, 0x00040000, 0x00080000,
- 0x00100000, 0x00200000, 0x00400000, 0x00800000,
- 0x00084000, 0x00108000, 0x00210000, 0x00420000,
- 0x00840000, 0x00000000, 0x00020000, 0x00040000,
- 0x00060000, 0x00080000, 0x59900007, 0x800c0c80,
- 0x05021003, 0x90000541, 0x0501f004, 0x80000000,
- 0x48032007, 0x80000580, 0x1c01f000, 0x417a3000,
- 0x05fdffd5, 0x05000005, 0x811a3000, 0x91180585,
- 0x05fe07fc, 0x1c01f000, 0x81780080, 0x1c01f000,
- 0x40681000, 0x480bc857, 0x05fdfac9, 0x4df00000,
- 0x480b1800, 0x5c03e000, 0x05fc0ab1, 0x1c01f000,
- 0x4803c856, 0x05fdfac2, 0x4df00000, 0x497b180b,
+ 0x4cd80000, 0x4d300000, 0x05f5feb5, 0x05fdfbec,
+ 0x59c400af, 0x800001c0, 0x05000022, 0x0501f929,
+ 0x59926005, 0x4933c857, 0x59300004, 0x8c000516,
+ 0x05000009, 0x05fdfeaf, 0x0502001a, 0x05fdfb19,
+ 0x05fdfbd0, 0x42000800, 0x80000804, 0x0005fe9d,
+ 0x0501f014, 0x60c018ea, 0x0501f8e9, 0x05020003,
+ 0x05f5fe7d, 0x0501f00f, 0x05fdfea2, 0x0502000d,
+ 0x05fdffb7, 0x42000000, 0x0010e46e, 0x0521fe99,
+ 0x59300004, 0x8c00050c, 0x05020002, 0x640e6203,
+ 0x4d380000, 0x612a7000, 0x0009f800, 0x5c027000,
+ 0x05fdfbb8, 0x5c026000, 0x5c01b000, 0x5c022800,
+ 0x5c034800, 0x5c03a000, 0x5c032000, 0x05c9f0bf,
+ 0x4c600000, 0x4d900000, 0x4dd00000, 0x4da40000,
+ 0x4d140000, 0x4cd80000, 0x4d300000, 0x4d2c0000,
+ 0x05fdfbb7, 0x0501f8f7, 0x59926005, 0x813261c0,
+ 0x05000040, 0x05e9ff4d, 0x05020005, 0x4178c000,
+ 0x0505fa10, 0x05000002, 0x6004c000, 0x05e9ff47,
+ 0x05020005, 0x8060c1c0, 0x05000003, 0x0505fa30,
+ 0x0501f034, 0x05f5fe5f, 0x05020032, 0x4933c857,
+ 0x0501f892, 0x05020015, 0x05f5fe69, 0x813261c0,
+ 0x0500002c, 0x59325809, 0x812e59c0, 0x05bc0c63,
+ 0x05e9ff36, 0x0502001c, 0x59c40093, 0x4803c857,
+ 0x800001c0, 0x05020009, 0x592c020c, 0x84000550,
+ 0x48025a0c, 0x05edf818, 0x0502001e, 0x592c020c,
+ 0x84000510, 0x48025a0c, 0x05f5fe33, 0x0501f019,
+ 0x42000000, 0x0010e46e, 0x0521fe52, 0x05fdfdbe,
+ 0x592c020c, 0x84000550, 0x48025a0c, 0x4d380000,
+ 0x612a7000, 0x640e6203, 0x0009f800, 0x5c027000,
+ 0x0501f00c, 0x59901007, 0x800811c0, 0x05fe07f1,
+ 0x59c408af, 0x82040480, 0x000003e8, 0x05fe17ed,
+ 0x80081000, 0x480b2007, 0x05f5fe1b, 0x05e1ff4c,
+ 0x5c025800, 0x5c026000, 0x5c01b000, 0x5c022800,
+ 0x5c034800, 0x5c03a000, 0x5c032000, 0x5c00c000,
+ 0x05fdf35c, 0x4d300000, 0x4d2c0000, 0x05fdfb68,
+ 0x598e600b, 0x4933c857, 0x813261c0, 0x0500003e,
+ 0x59c41004, 0x480bc857, 0x8c080500, 0x05000007,
+ 0x05e9fefa, 0x05020012, 0x05e9ffe3, 0x05020036,
+ 0x05f5fdfb, 0x0501f034, 0x82080500, 0x000001fe,
+ 0x05fe07fc, 0x59c8010b, 0x4803c857, 0x8c000500,
+ 0x05fc07f8, 0x42000000, 0x0010e4b7, 0x0521fe19,
+ 0x05fdfe4c, 0x05000877, 0x0501f027, 0x598c000d,
+ 0x80000540, 0x0502000e, 0x59c408af, 0x82040480,
+ 0x000003e8, 0x0502100a, 0x598c080d, 0x80040800,
+ 0x4807180d, 0x05f5fde2, 0x42000000, 0x0010e3a7,
+ 0x0521fe08, 0x05e1ff16, 0x0501f017, 0x42000000,
+ 0x0010e46d, 0x0521fe03, 0x05fdfdc8, 0x813261c0,
+ 0x05020003, 0x0501f85f, 0x0501f00f, 0x59300407,
+ 0x90000583, 0x05020007, 0x59325809, 0x812e59c0,
+ 0x05000004, 0x592c020c, 0x84000550, 0x48025a0c,
+ 0x0501f867, 0x4d380000, 0x60527000, 0x0009f800,
+ 0x5c027000, 0x5c025800, 0x5c026000, 0x05fdf315,
+ 0x59c40804, 0x83180400, 0x00108a0a, 0x50000000,
+ 0x80040500, 0x1c01f000, 0x59c40804, 0x83180400,
+ 0x00108a0f, 0x50000000, 0x80040500, 0x1c01f000,
+ 0x59c40804, 0x83180400, 0x00108a19, 0x50000000,
+ 0x80040500, 0x1c01f000, 0x59c80840, 0x82040d00,
+ 0x000e0000, 0x83180400, 0x00108a1e, 0x50000000,
+ 0x80040580, 0x1c01f000, 0x00000210, 0x00000420,
+ 0x00000840, 0x00001080, 0x00002100, 0x00004000,
+ 0x00008000, 0x00010000, 0x00020000, 0x00040000,
+ 0x00080000, 0x00100000, 0x00200000, 0x00400000,
+ 0x00800000, 0x00084000, 0x00108000, 0x00210000,
+ 0x00420000, 0x00840000, 0x00000000, 0x00020000,
+ 0x00040000, 0x00060000, 0x00080000, 0x59900007,
+ 0x800c0c80, 0x05021003, 0x90000541, 0x0501f004,
+ 0x80000000, 0x48032007, 0x80000580, 0x1c01f000,
+ 0x417a3000, 0x05fdffd5, 0x05000005, 0x811a3000,
+ 0x91180585, 0x05fe07fc, 0x1c01f000, 0x81780080,
+ 0x1c01f000, 0x480bc857, 0x05fdfadd, 0x4df00000,
+ 0x480b1800, 0x5c03e000, 0x05fc0aca, 0x1c01f000,
+ 0x4803c856, 0x05fdfad6, 0x4df00000, 0x497b180b,
0x497b1801, 0x497b180c, 0x497b180d, 0x497b180e,
0x598c0000, 0x90000583, 0x05000006, 0x916c0582,
0x05020003, 0x64171800, 0x0501f002, 0x64031800,
- 0x5c03e000, 0x05fc0a9e, 0x1c01f000, 0x59300004,
+ 0x5c03e000, 0x05fc0ab7, 0x1c01f000, 0x59300004,
0x8c00050c, 0x05020002, 0x64066203, 0x1c01f000,
- 0x91180485, 0x05ce1b5a, 0x491bc857, 0x811b20c8,
+ 0x91180485, 0x05be1b85, 0x491bc857, 0x811b20c8,
0x83932400, 0x0000b037, 0x8119b0c8, 0x82d9b400,
0x0000bf32, 0x811ba0ca, 0x83d3a400, 0x00007600,
- 0x83180400, 0x001066a7, 0x50034800, 0x811a28c2,
- 0x83162c00, 0x00006100, 0x1c01f000, 0x0010b114,
- 0x0010b12b, 0x0010b142, 0x0010b159, 0x0010b170,
+ 0x83180400, 0x00108a67, 0x50034800, 0x811a28c2,
+ 0x83162c00, 0x00006100, 0x1c01f000, 0x0010e27c,
+ 0x0010e295, 0x0010e2ae, 0x0010e2c7, 0x0010e2e0,
0x4933c857, 0x59300407, 0x90000c92, 0x05021015,
- 0x05011000, 0x0c01f001, 0x001066c4, 0x00106753,
- 0x00106a90, 0x00106af0, 0x00106753, 0x00106a90,
- 0x00106af0, 0x001066c4, 0x00106753, 0x001066c4,
- 0x001066c4, 0x001066c4, 0x001066c4, 0x001066c4,
- 0x001066c4, 0x001066c4, 0x001066c8, 0x001066c8,
- 0x4803c857, 0x05fdfa7a, 0x05fdf9ce, 0x05fdf264,
- 0x42001000, 0x0010b20e, 0x50081000, 0x4930100b,
- 0x58080002, 0x82000580, 0x00000100, 0x05020036,
- 0x59325809, 0x812e59c0, 0x05cc0b1d, 0x492fc856,
- 0x5932680a, 0x83340580, 0x0010ce8f, 0x0500001e,
- 0x592c040c, 0x82000500, 0x0000e000, 0x05000003,
- 0x0501fbad, 0x0501f002, 0x0501fb9d, 0x592c000e,
- 0x90000503, 0x05000006, 0x90000583, 0x80000000,
- 0x58d00802, 0x80040540, 0x4801a002, 0x42001000,
- 0x0010b20e, 0x50081000, 0x4930100a, 0x492c1009,
- 0x90d00406, 0x48001003, 0x592c000e, 0x48001005,
- 0x592c000f, 0x48001006, 0x592c0010, 0x48001007,
- 0x0001f01c, 0x592c080b, 0x48066802, 0x82040500,
- 0x00ffff00, 0x05000007, 0x497a6a12, 0x59a8100f,
- 0x82081500, 0x00ffff00, 0x80080580, 0x05fe07d9,
- 0x82040d00, 0x000000ff, 0x800408d0, 0x48066a12,
- 0x05fdf7d4, 0x1c01f000, 0x4d2c0000, 0x4d300000,
- 0x4c580000, 0x4c540000, 0x4c500000, 0x58325809,
- 0x812e59c0, 0x05cc0ae2, 0x58300002, 0x82000580,
- 0x00000100, 0x0502001e, 0x5830000a, 0x5832600b,
- 0x81300d80, 0x0502000e, 0x0501f82c, 0x05020012,
- 0x592c080e, 0x90040c03, 0x80040904, 0x4004b000,
- 0x4200a000, 0x0010af04, 0x4050a800, 0x051dfc2c,
- 0x600011b8, 0x0501fe57, 0x0501f007, 0x4803c857,
- 0x4933c857, 0x813261c0, 0x05000003, 0x0501f81b,
- 0x05fc0fa0, 0x5c00a000, 0x5c00a800, 0x5c00b000,
- 0x5c026000, 0x5c025800, 0x1c01f000, 0x5830000a,
- 0x5832600b, 0x4a006002, 0x00000100, 0x4803c857,
- 0x4933c857, 0x81300d80, 0x05fe07ed, 0x0501f80b,
- 0x05fe07f1, 0x4803c857, 0x0201f800, 0x0010f0f2,
- 0x80c40040, 0x05ce0ab2, 0x640a5a07, 0x0001fb5b,
- 0x0501ff87, 0x05fdf7e8, 0x05fdf9fd, 0x4df00000,
- 0x598c000b, 0x81300580, 0x05020008, 0x598c0003,
- 0x81300580, 0x05020005, 0x5c03e000, 0x05fc09e0,
- 0x80000580, 0x1c01f000, 0x4803c857, 0x5c03e000,
- 0x05fc09db, 0x90000541, 0x1c01f000, 0x59300403,
- 0xb0000c98, 0x05ce1a9a, 0x83340d80, 0x0010ce8f,
- 0x0502000a, 0x5930082a, 0x48066802, 0x82041500,
- 0x00ffff00, 0x05020004, 0x800408d0, 0x48066a12,
- 0x0501f002, 0x497a6a12, 0x4803c857, 0x0c01f001,
- 0x001068ac, 0x001068c5, 0x001068d4, 0x001069f9,
- 0x001069c6, 0x001069ca, 0x001069d6, 0x001069e6,
- 0x001069dc, 0x001069e6, 0x00106a1e, 0x001069e6,
- 0x00106a5d, 0x001069e6, 0x00106a68, 0x001069e6,
- 0x001069dc, 0x001069e6, 0x00106a6c, 0x001067c4,
- 0x001067c4, 0x001067c4, 0x001067c4, 0x001067c4,
- 0x001067c4, 0x001067c4, 0x001067c4, 0x001067c4,
- 0x001067c4, 0x001067c4, 0x00106b09, 0x00106b1e,
- 0x00106b26, 0x001067c4, 0x00106b3d, 0x001069d6,
- 0x001067c4, 0x001069d6, 0x001069e6, 0x001067c4,
- 0x001068d4, 0x001069f9, 0x001067c4, 0x00106b85,
- 0x001069e6, 0x001067c4, 0x00106b93, 0x001069e6,
- 0x001067c4, 0x001069dc, 0x0010689f, 0x001067c5,
- 0x001067c4, 0x00106ba8, 0x00106bda, 0x00106c52,
- 0x001067c4, 0x00106c60, 0x001069d4, 0x00106c55,
- 0x001067c4, 0x00106b47, 0x00106c95, 0x001067c4,
- 0x001067c4, 0x001067c4, 0x001067c4, 0x001067d8,
- 0x00106839, 0x00106843, 0x001067c4, 0x001067c4,
- 0x001067c4, 0x00106875, 0x0010687d, 0x001067c4,
- 0x001067c4, 0x001067e9, 0x00106813, 0x00106cc5,
- 0x00106cfa, 0x00106d1b, 0x001067c4, 0x001067c4,
- 0x001067c4, 0x00106cf0, 0x00106c77, 0x00106ba8,
- 0x001067c4, 0x001067c4, 0x001067c4, 0x001067c4,
- 0x001067c4, 0x001067c4, 0x001067c4, 0x001067c4,
- 0x05cdfa2b, 0x0501fab6, 0x59325809, 0x592c000a,
- 0x4801a006, 0x592c000b, 0x4801a007, 0x592c000c,
- 0x4801a008, 0x592c000d, 0x4801a009, 0x592c000e,
- 0x4801a00a, 0x4979a00b, 0x592c080a, 0x82040d00,
- 0x00000fff, 0x80040904, 0x600011b8, 0x0501f5a1,
- 0x4a026202, 0x0000ffff, 0x0501faa1, 0x4d2c0000,
- 0x4a01a006, 0x05000000, 0x59325809, 0x592c000a,
- 0x4801a007, 0x592c000b, 0x4801a008, 0x592c000c,
- 0x4801a009, 0x5c025800, 0x60100800, 0x600011b8,
- 0x0501f590, 0x4c580000, 0x4c500000, 0x4c540000,
- 0x4d2c0000, 0x0501fa8e, 0x5930040c, 0x90000503,
- 0x05000006, 0x90000583, 0x80000000, 0x58d00802,
- 0x80040540, 0x4801a002, 0x59325809, 0x4200a800,
- 0x0010af04, 0x592cb206, 0x9058b403, 0x8058b104,
- 0x912ca407, 0x051dfb13, 0x40580000, 0x8054ac00,
- 0x592c0001, 0x80000540, 0x05000003, 0x40025800,
- 0x05fdf7f5, 0x4200a000, 0x0010af04, 0x4050a800,
- 0x5930b40c, 0x9058b403, 0x8058b104, 0x40580800,
- 0x051dfb3f, 0x600011b8, 0x5c025800, 0x5c00a800,
- 0x5c00a000, 0x5c00b000, 0x0501f566, 0x4c580000,
- 0x4c500000, 0x4c540000, 0x4d2c0000, 0x42034800,
- 0x0010aefd, 0x0501fa70, 0x59325809, 0x592c0802,
- 0x4807c857, 0x40041000, 0x80040904, 0x90081503,
- 0x05000007, 0x80040800, 0x90081583, 0x80081000,
- 0x58d00002, 0x80080540, 0x4801a002, 0x4a025806,
- 0x02000000, 0x90d0ac06, 0x592cb011, 0x912ca406,
- 0x051dfae4, 0x40580000, 0x8054ac00, 0x592e5801,
- 0x41780000, 0x812e5d40, 0x05fe07f8, 0x600011b8,
- 0x5c025800, 0x5c00a800, 0x5c00a000, 0x5c00b000,
- 0x0501f540, 0x0501fa42, 0x4a01a006, 0x78000000,
- 0x5930001e, 0x840001c0, 0x4801a407, 0x4979a207,
- 0x60080800, 0x600011b8, 0x0501f536, 0x4c580000,
- 0x4c540000, 0x4c500000, 0x0501fa43, 0x4a01a006,
- 0x02000000, 0x5932481d, 0x59240001, 0x4801a008,
- 0x59240002, 0x4801a009, 0x59240003, 0x4801a00a,
- 0x59240004, 0x4801a00b, 0x5930001e, 0x82000d80,
- 0x0000e000, 0x0500000e, 0x82000d80, 0x0000df00,
- 0x05000004, 0x6441a407, 0x60180800, 0x0501f015,
- 0x42001800, 0x0010aee0, 0x05cdfcb9, 0x600001be,
- 0x4200a000, 0x0010aee0, 0x0501f007, 0x42001800,
- 0x0010aeed, 0x05cdfcb2, 0x600001c0, 0x4200a000,
- 0x0010aeed, 0x90000550, 0x4801a407, 0x64d1a207,
- 0x6034b000, 0x90d0ac0c, 0x051dfaa2, 0x604c0800,
- 0x600011b8, 0x5c00a000, 0x5c00a800, 0x5c00b000,
- 0x0501f504, 0x0501fa06, 0x4a01a006, 0x63000028,
- 0x5930001e, 0x4801a007, 0x60080800, 0x600011b8,
- 0x0501f4fc, 0x0501fa0c, 0x41780000, 0x41780800,
- 0x42002000, 0x00080000, 0x0c01f80e, 0x80000000,
- 0x80040800, 0x60301000, 0x82080540, 0x02000000,
- 0x4801a006, 0x800408e0, 0x5930001e, 0x80040540,
- 0x4801a007, 0x80080904, 0x600011b8, 0x0501f4e9,
- 0x00106895, 0x00106897, 0x00106899, 0x0010689b,
- 0x0010689d, 0x4811a008, 0x1c01f000, 0x4811a009,
- 0x1c01f000, 0x4811a00a, 0x1c01f000, 0x4811a00b,
- 0x1c01f000, 0x4811a00c, 0x1c01f000, 0x4a02600a,
- 0x0010ce8f, 0x59a8000f, 0x82000500, 0x000000ff,
- 0x800000d0, 0x42026800, 0x0010ce8f, 0x48026a12,
- 0x0501fa38, 0x41780800, 0x600010b8, 0x0501f4cd,
- 0x0501f9cf, 0x4a01a006, 0x52000000, 0x4979a007,
- 0x5932481d, 0x59240400, 0x90000503, 0x05000005,
- 0x59240400, 0x80000110, 0x05d5fd6f, 0x4805a007,
- 0x59240001, 0x4801a008, 0x59240002, 0x4801a009,
- 0x59240003, 0x4801a00a, 0x59240004, 0x4801a00b,
- 0x59240005, 0x4801a00c, 0x601c0800, 0x600011b8,
- 0x0501f4b4, 0x4a026202, 0x0000ffff, 0x0501f9b4,
- 0x4a01a006, 0x05000000, 0x5932481d, 0x59240005,
- 0x4801a007, 0x59240001, 0x59240802, 0x4801a008,
- 0x4805a009, 0x60100800, 0x600011b8, 0x0501f4a5,
- 0x4a026202, 0x0000ffff, 0x0501f9a5, 0x4d3c0000,
- 0x417a7800, 0x05edfc10, 0x5c027800, 0x4a01a006,
- 0x03000000, 0x59340403, 0x82000580, 0x000007fe,
- 0x05020085, 0x4a01a006, 0x04000000, 0x59a8021b,
- 0x8c000506, 0x05000004, 0x5930081d, 0x58040408,
- 0x4801a001, 0x81a40800, 0x4a000800, 0x22fffffe,
- 0x5934000a, 0x84000500, 0x4802680a, 0x59a8021b,
- 0x8c000508, 0x05000010, 0x59a8001f, 0x4801a007,
- 0x59a80020, 0x82000500, 0x07deffff, 0x599c0818,
+ 0x05011000, 0x0c01f001, 0x00108a84, 0x00108b2a,
+ 0x00108e69, 0x00108ecb, 0x00108b2a, 0x00108e69,
+ 0x00108ecb, 0x00108a84, 0x00108b2a, 0x00108a84,
+ 0x00108a84, 0x00108a84, 0x00108a84, 0x00108a84,
+ 0x00108a84, 0x00108a84, 0x00108a88, 0x00108a88,
+ 0x4803c857, 0x05fdfa8e, 0x05fdf9e3, 0x05fdf27d,
+ 0x42001000, 0x0010e387, 0x50081000, 0x4930100c,
+ 0x58080002, 0x82000580, 0x00000100, 0x0502003d,
+ 0x59325809, 0x812e59c0, 0x05bc0b48, 0x492fc856,
+ 0x5932680a, 0x83340580, 0x00110210, 0x05000025,
+ 0x592c040f, 0x82000500, 0x0000e000, 0x05000003,
+ 0x0501fbc6, 0x0501f002, 0x0501fbb6, 0x592c040d,
+ 0x82000500, 0x000000ff, 0x90000583, 0x0500082a,
+ 0x592c0011, 0x90000503, 0x05000006, 0x90000583,
+ 0x80000000, 0x58d00802, 0x80040540, 0x4801a002,
+ 0x42001000, 0x0010e387, 0x50081000, 0x4930100b,
+ 0x492c100a, 0x90d00406, 0x48001003, 0x592c0004,
+ 0x48001006, 0x592c0011, 0x48001005, 0x592c0012,
+ 0x48001007, 0x592c0013, 0x48001008, 0x0001f021,
+ 0x592c080e, 0x48066802, 0x82040500, 0x00ffff00,
+ 0x05000007, 0x497a6a12, 0x59a8103d, 0x82081500,
+ 0x00ffff00, 0x80080580, 0x05fe07d2, 0x82040d00,
+ 0x000000ff, 0x800408d0, 0x48066a12, 0x05fdf7cd,
+ 0x1c01f000, 0x59a80249, 0x8c000508, 0x0500000c,
+ 0x59a8004d, 0x82000500, 0x0000ffff, 0x59c40880,
+ 0x80040d80, 0x05000006, 0x497b8880, 0x4c000000,
+ 0x05c9f837, 0x5c000000, 0x48038880, 0x1c01f000,
+ 0x4d2c0000, 0x4d300000, 0x4c580000, 0x4c540000,
+ 0x4c500000, 0x5832580a, 0x812e59c0, 0x05bc0af7,
+ 0x58300002, 0x82000580, 0x00000100, 0x05020021,
+ 0x5830000b, 0x5832600c, 0x81300d80, 0x05020011,
+ 0x0501f82d, 0x05020015, 0x592c0811, 0x90040c03,
+ 0x80040904, 0x4004b000, 0x4200a000, 0x0010e06a,
+ 0x0501fefa, 0x05000002, 0x9050a402, 0x4050a800,
+ 0x0521fdea, 0x600011b8, 0x0501fe7f, 0x0501f007,
+ 0x4803c857, 0x4933c857, 0x813261c0, 0x05000003,
+ 0x0501f819, 0x05fc0f87, 0x5c00a000, 0x5c00a800,
+ 0x5c00b000, 0x5c026000, 0x5c025800, 0x1c01f000,
+ 0x5830000b, 0x5832600c, 0x4a006002, 0x00000100,
+ 0x4803c857, 0x4933c857, 0x81300d80, 0x05fe07ed,
+ 0x0501f809, 0x05fe07f1, 0x4803c857, 0x05f9fea3,
+ 0x05be0ac6, 0x640a5a0a, 0x0001fb82, 0x0505f8b9,
+ 0x05fdf7ea, 0x05fdf9fa, 0x4df00000, 0x598c000b,
+ 0x81300580, 0x05020008, 0x598c0003, 0x81300580,
+ 0x05020005, 0x5c03e000, 0x05fc09e2, 0x80000580,
+ 0x1c01f000, 0x4803c857, 0x5c03e000, 0x05fc09dd,
+ 0x90000541, 0x1c01f000, 0x59300403, 0xb0000ca0,
+ 0x05be1aae, 0x83340d80, 0x00110210, 0x0502000a,
+ 0x5930082a, 0x48066802, 0x82041500, 0x00ffff00,
+ 0x05020004, 0x800408d0, 0x48066a12, 0x0501f002,
+ 0x497a6a12, 0x4803c857, 0x0c01f001, 0x00108c83,
+ 0x00108c9c, 0x00108cab, 0x00108dd2, 0x00108d99,
+ 0x00108d9d, 0x00108da9, 0x00108dbf, 0x00108daf,
+ 0x00108dbf, 0x00108df7, 0x00108dbf, 0x00108e36,
+ 0x00108dbf, 0x00108e41, 0x00108dbf, 0x00108daf,
+ 0x00108dbf, 0x00108e45, 0x00108b9b, 0x00108b9b,
+ 0x00108b9b, 0x00108b9b, 0x00108b9b, 0x00108b9b,
+ 0x00108b9b, 0x00108b9b, 0x00108b9b, 0x00108b9b,
+ 0x00108b9b, 0x00108ee4, 0x00108ef9, 0x00108f01,
+ 0x00108b9b, 0x00108f18, 0x00108da9, 0x00108b9b,
+ 0x00108da9, 0x00108dbf, 0x00108b9b, 0x00108cab,
+ 0x00108dd2, 0x00108b9b, 0x00108f60, 0x00108dbf,
+ 0x00108b9b, 0x00108f6e, 0x00108dbf, 0x00108b9b,
+ 0x00108daf, 0x00108c76, 0x00108b9c, 0x00108b9b,
+ 0x00108f8a, 0x00108fc0, 0x00109046, 0x00108b9b,
+ 0x00109054, 0x00108da7, 0x00109049, 0x00108b9b,
+ 0x00108f22, 0x00109089, 0x00108b9b, 0x00108b9b,
+ 0x00108b9b, 0x00108b9b, 0x00108baf, 0x00108c10,
+ 0x00108c1a, 0x00108b9b, 0x00108b9b, 0x00108b9b,
+ 0x00108c4c, 0x00108c54, 0x00108b9b, 0x00108b9b,
+ 0x00108bc0, 0x00108bea, 0x001090be, 0x001090f3,
+ 0x00109114, 0x00108b9b, 0x00108b9b, 0x00108b9b,
+ 0x001090e9, 0x0010906b, 0x00108f8a, 0x001092f9,
+ 0x00108b9b, 0x0010933a, 0x001092ef, 0x00109347,
+ 0x00108b9b, 0x00109362, 0x001092f5, 0x05bdfa3f,
+ 0x0501fab8, 0x59325809, 0x592c000d, 0x4801a006,
+ 0x592c000e, 0x4801a007, 0x592c000f, 0x4801a008,
+ 0x592c0010, 0x4801a009, 0x592c0011, 0x4801a00a,
+ 0x4979a00b, 0x592c080d, 0x82040d00, 0x00000fff,
+ 0x80040904, 0x600011b8, 0x0501f5cb, 0x4a026202,
+ 0x0000ffff, 0x0501faa3, 0x4d2c0000, 0x4a01a006,
+ 0x05000000, 0x59325809, 0x592c000d, 0x4801a007,
+ 0x592c000e, 0x4801a008, 0x592c000f, 0x4801a009,
+ 0x5c025800, 0x60100800, 0x600011b8, 0x0501f5ba,
+ 0x4c580000, 0x4c500000, 0x4c540000, 0x4d2c0000,
+ 0x0501fa90, 0x5930040d, 0x90000503, 0x05000006,
+ 0x90000583, 0x80000000, 0x58d00802, 0x80040540,
+ 0x4801a002, 0x59325809, 0x4200a800, 0x0010e06a,
+ 0x592cb209, 0x9058b403, 0x8058b104, 0x912ca40a,
+ 0x0521fcd3, 0x40580000, 0x8054ac00, 0x592c0001,
+ 0x80000540, 0x05000003, 0x40025800, 0x05fdf7f5,
+ 0x4200a000, 0x0010e06a, 0x4050a800, 0x5930b40d,
+ 0x9058b403, 0x8058b104, 0x40580800, 0x0521fcff,
+ 0x600011b8, 0x5c025800, 0x5c00a800, 0x5c00a000,
+ 0x5c00b000, 0x0501f590, 0x4c580000, 0x4c500000,
+ 0x4c540000, 0x4d2c0000, 0x42034800, 0x0010e063,
+ 0x0501fa72, 0x59325809, 0x592c0805, 0x4807c857,
+ 0x40041000, 0x80040904, 0x90081503, 0x05000007,
+ 0x80040800, 0x90081583, 0x80081000, 0x58d00002,
+ 0x80080540, 0x4801a002, 0x4a025809, 0x02000000,
+ 0x90d0ac06, 0x592cb011, 0x912ca409, 0x0521fca4,
+ 0x40580000, 0x8054ac00, 0x592e5801, 0x41780000,
+ 0x812e5d40, 0x05fe07f8, 0x600011b8, 0x5c025800,
+ 0x5c00a800, 0x5c00a000, 0x5c00b000, 0x0501f56a,
+ 0x0501fa44, 0x4a01a006, 0x78000000, 0x5930001e,
+ 0x840001c0, 0x4801a407, 0x4979a207, 0x60080800,
+ 0x600011b8, 0x0501f560, 0x4c580000, 0x4c540000,
+ 0x4c500000, 0x0501fa45, 0x4a01a006, 0x02000000,
+ 0x5932481d, 0x59240001, 0x4801a008, 0x59240002,
+ 0x4801a009, 0x59240003, 0x4801a00a, 0x59240004,
+ 0x4801a00b, 0x5930001e, 0x82000d80, 0x0000e000,
+ 0x0500000e, 0x82000d80, 0x0000df00, 0x05000004,
+ 0x6441a407, 0x60180800, 0x0501f015, 0x42001800,
+ 0x0010dd46, 0x05bdfceb, 0x600001be, 0x4200a000,
+ 0x0010dd46, 0x0501f007, 0x42001800, 0x0010dd53,
+ 0x05bdfce4, 0x600001c0, 0x4200a000, 0x0010dd53,
+ 0x90000550, 0x4801a407, 0x64d1a207, 0x6034b000,
+ 0x90d0ac0c, 0x0521fc62, 0x604c0800, 0x600011b8,
+ 0x5c00a000, 0x5c00a800, 0x5c00b000, 0x0501f52e,
+ 0x0501fa08, 0x4a01a006, 0x63000028, 0x5930001e,
+ 0x4801a007, 0x60080800, 0x600011b8, 0x0501f526,
+ 0x0501fa0e, 0x41780000, 0x41780800, 0x42002000,
+ 0x00080000, 0x0c01f80e, 0x80000000, 0x80040800,
+ 0x60301000, 0x82080540, 0x02000000, 0x4801a006,
+ 0x800408e0, 0x5930001e, 0x80040540, 0x4801a007,
+ 0x80080904, 0x600011b8, 0x0501f513, 0x00108c6c,
+ 0x00108c6e, 0x00108c70, 0x00108c72, 0x00108c74,
+ 0x4811a008, 0x1c01f000, 0x4811a009, 0x1c01f000,
+ 0x4811a00a, 0x1c01f000, 0x4811a00b, 0x1c01f000,
+ 0x4811a00c, 0x1c01f000, 0x4a02600a, 0x00110210,
+ 0x59a8003d, 0x82000500, 0x000000ff, 0x800000d0,
+ 0x42026800, 0x00110210, 0x48026a12, 0x0501fa3c,
+ 0x41780800, 0x600010b8, 0x0501f4f7, 0x0501f9d1,
+ 0x4a01a006, 0x52000000, 0x4979a007, 0x5932481d,
+ 0x59240400, 0x90000503, 0x05000005, 0x59240400,
+ 0x80000110, 0x05c5fe55, 0x4805a007, 0x59240001,
+ 0x4801a008, 0x59240002, 0x4801a009, 0x59240003,
+ 0x4801a00a, 0x59240004, 0x4801a00b, 0x59240005,
+ 0x4801a00c, 0x601c0800, 0x600011b8, 0x0501f4de,
+ 0x4a026202, 0x0000ffff, 0x0501f9b6, 0x4a01a006,
+ 0x05000000, 0x5932481d, 0x59240005, 0x4801a007,
+ 0x59240001, 0x59240802, 0x4801a008, 0x4805a009,
+ 0x60100800, 0x600011b8, 0x0501f4cf, 0x4a026202,
+ 0x0000ffff, 0x0501f9a7, 0x4d3c0000, 0x417a7800,
+ 0x05e5fc43, 0x5c027800, 0x4a01a006, 0x03000000,
+ 0x59340403, 0x82000580, 0x000007fe, 0x0502008e,
+ 0x4a01a006, 0x04000000, 0x59a80249, 0x8c000506,
+ 0x05000004, 0x5930081d, 0x58040408, 0x4801a001,
+ 0x5934000a, 0x84000500, 0x4802680a, 0x59a80249,
+ 0x8c000508, 0x05000010, 0x59a8004d, 0x4801a007,
+ 0x59a8004e, 0x82000500, 0x07deffff, 0x599c0818,
0x8c040516, 0x05000002, 0x8400056a, 0x4801a008,
- 0x4a01a009, 0x00002710, 0x59a80022, 0x4801a00a,
- 0x0501f03a, 0x59a8001f, 0x59a8121b, 0x8c080506,
+ 0x4a01a009, 0x00002710, 0x59a80050, 0x4801a00a,
+ 0x0501f046, 0x59a8004d, 0x59a81249, 0x8c080506,
0x05000003, 0x82000500, 0xffff0000, 0x4801a007,
- 0x05f1fa2a, 0x0502000b, 0x59300c03, 0xb0041591,
- 0x05000008, 0x497b8880, 0x82000500, 0x0000ffff,
- 0x4c000000, 0x05d5fd42, 0x5c000000, 0x48038880,
- 0x59a80020, 0x05f1fa1d, 0x05020006, 0x82000500,
- 0xb7ffffff, 0x82000540, 0x80000000, 0x0501f003,
- 0x82000500, 0x3fffffff, 0x599c0818, 0x8c040516,
- 0x05000002, 0x8400056a, 0x8d0c0510, 0x05000014,
+ 0x05e9fbd2, 0x0502000e, 0x59300c03, 0xb0041591,
+ 0x0500000b, 0x59a80ccc, 0x8c04050a, 0x05020008,
+ 0x497b8880, 0x82000500, 0x0000ffff, 0x4c000000,
+ 0x05c5fe27, 0x5c000000, 0x48038880, 0x59a8004e,
+ 0x05e9fbc2, 0x05020006, 0x82000500, 0xb7ffffff,
+ 0x82000540, 0x80000000, 0x0501f003, 0x82000500,
+ 0x3fffffff, 0x599c0818, 0x8c040516, 0x05000002,
+ 0x8400056a, 0x05ddfe1a, 0x05000008, 0x59a80ccc,
+ 0x8c040506, 0x05020005, 0x59a80a49, 0x8c080506,
+ 0x05020002, 0x8400057c, 0x8d0c0510, 0x05000014,
0x59300c03, 0xb0041591, 0x05000011, 0x900415b1,
0x0500000f, 0x4c580000, 0x4c500000, 0x4c540000,
- 0x6010b000, 0x4200a000, 0x0010b38b, 0x90d0ac1f,
- 0x4c000000, 0x051df9df, 0x5c000000, 0x5c00a800,
+ 0x6010b000, 0x4200a000, 0x0010e50c, 0x90d0ac1f,
+ 0x4c000000, 0x0521fb96, 0x5c000000, 0x5c00a800,
0x5c00a000, 0x5c00b000, 0x8400057a, 0x4801a008,
0x4979a009, 0x4979a00a, 0x59240001, 0x59240802,
0x4801a00b, 0x4805a00c, 0x59240003, 0x59240804,
0x4801a00d, 0x4805a00e, 0x4979a00f, 0x4979a010,
0x4979a011, 0x4979a012, 0x599c0018, 0x8c000510,
0x05000011, 0x59a80006, 0x8c00050a, 0x05000004,
- 0x59a8021b, 0x8c000508, 0x0502000b, 0x59a80023,
- 0x84000576, 0x4801a013, 0x59a80024, 0x4801a014,
- 0x59a80025, 0x4801a015, 0x59a80026, 0x4801a016,
+ 0x59a80249, 0x8c000508, 0x0502000b, 0x59a80051,
+ 0x84000576, 0x4801a013, 0x59a80052, 0x4801a014,
+ 0x59a80053, 0x4801a015, 0x59a80054, 0x4801a016,
0x0501f005, 0x4979a013, 0x4979a014, 0x4979a015,
- 0x4979a016, 0x59a80027, 0x84000576, 0x4801a017,
- 0x59a80028, 0x4801a018, 0x4979a019, 0x4979a01a,
- 0x0501f05f, 0x59a8021b, 0x8c000508, 0x0500000c,
- 0x59a8001f, 0x82000500, 0x0000ffff, 0x59c40880,
- 0x80040d80, 0x05000006, 0x497b8880, 0x4c000000,
- 0x05d5fce3, 0x5c000000, 0x48038880, 0x59a8001f,
- 0x4801a007, 0x4c640000, 0x4d2c0000, 0x59a8c820,
- 0x050dfb7b, 0x0500000d, 0x0511fa04, 0x0502000b,
- 0x592c0208, 0x8c00050e, 0x05000008, 0x8264cd00,
- 0x0000ffff, 0x592c000a, 0x82000500, 0xffff0000,
- 0x8064cd40, 0x0501f005, 0x59a80a1b, 0x90040d30,
- 0x05000002, 0x8464cd36, 0x4865a008, 0x5c025800,
- 0x5c00c800, 0x59a80021, 0x4801a009, 0x59a80022,
- 0x4801a00a, 0x59240001, 0x59240802, 0x4801a00b,
- 0x4805a00c, 0x59240003, 0x59240804, 0x4801a00d,
- 0x4805a00e, 0x4979a00f, 0x4979a010, 0x4979a011,
- 0x4979a012, 0x59340200, 0x8c000508, 0x05000005,
- 0x59a80023, 0x8400057e, 0x48035023, 0x0501f00b,
- 0x599c0018, 0x8c000510, 0x05000011, 0x59a80006,
- 0x8c00050a, 0x05000005, 0x59340c03, 0x82040480,
- 0x000007f0, 0x0500100a, 0x59a80023, 0x4801a013,
- 0x59a80024, 0x4801a014, 0x59a80025, 0x4801a015,
- 0x59a80026, 0x4801a016, 0x0501f005, 0x4979a013,
- 0x4979a014, 0x4979a015, 0x4979a016, 0x59a80027,
- 0x4801a017, 0x59a80028, 0x4801a018, 0x59a80029,
- 0x4801a019, 0x59a8002a, 0x4801a01a, 0x60740800,
- 0x600011b8, 0x0501f3b3, 0x0501f8b5, 0x4a01a006,
- 0x50000000, 0x05fdf79c, 0x0501f8b1, 0x4a01a006,
- 0x21100014, 0x4979a007, 0x4979a008, 0x4979a009,
- 0x4979a00a, 0x60140800, 0x600011b8, 0x0501f3a5,
- 0x0501f8ae, 0x0501f002, 0x0501f8b3, 0x4a01a006,
- 0x02000000, 0x60040800, 0x600011b8, 0x0501f39d,
- 0x0501f8ad, 0x4a01a006, 0x02000000, 0x59300403,
- 0x900005b1, 0x05fe0784, 0x81a40800, 0x4a000801,
- 0x00fffffe, 0x05fdf70a, 0x0501f8a3, 0x4a01a006,
- 0x01000000, 0x5930041c, 0x80000540, 0x05000003,
- 0x4801a407, 0x0501f002, 0x640da407, 0x5930021c,
- 0x80000540, 0x05000003, 0x4801a207, 0x0501f003,
- 0x4a01a207, 0x00002a00, 0x60080800, 0x600011b8,
- 0x0501f380, 0x4a026202, 0x0000ffff, 0x0501f880,
- 0x4a01a406, 0x00002010, 0x6451a206, 0x4a01a407,
- 0x00000800, 0x4a01a207, 0x00002000, 0x60000008,
+ 0x4979a016, 0x59a80055, 0x84000576, 0x4801a017,
+ 0x59a80056, 0x4801a018, 0x4979a019, 0x4979a01a,
+ 0x0501f052, 0x05fdfd88, 0x59a8004d, 0x4801a007,
+ 0x4c640000, 0x4d2c0000, 0x59a8c84e, 0x050dff7e,
+ 0x0500000d, 0x0511fe00, 0x0502000b, 0x592c020b,
+ 0x8c00050e, 0x05000008, 0x8264cd00, 0x0000ffff,
+ 0x592c000d, 0x82000500, 0xffff0000, 0x8064cd40,
+ 0x0501f005, 0x59a80a49, 0x90040d30, 0x05000002,
+ 0x8464cd36, 0x4865a008, 0x5c025800, 0x5c00c800,
+ 0x59a8004f, 0x4801a009, 0x59a80050, 0x4801a00a,
+ 0x59240001, 0x59240802, 0x4801a00b, 0x4805a00c,
+ 0x59240003, 0x59240804, 0x4801a00d, 0x4805a00e,
+ 0x4979a00f, 0x4979a010, 0x4979a011, 0x4979a012,
+ 0x59340200, 0x8c000508, 0x05000005, 0x59a80051,
+ 0x8400057e, 0x48035051, 0x0501f00b, 0x599c0018,
+ 0x8c000510, 0x05000011, 0x59a80006, 0x8c00050a,
+ 0x05000005, 0x59340c03, 0x82040480, 0x000007f0,
+ 0x0500100a, 0x59a80051, 0x4801a013, 0x59a80052,
+ 0x4801a014, 0x59a80053, 0x4801a015, 0x59a80054,
+ 0x4801a016, 0x0501f005, 0x4979a013, 0x4979a014,
+ 0x4979a015, 0x4979a016, 0x59a80055, 0x4801a017,
+ 0x59a80056, 0x4801a018, 0x59a80057, 0x4801a019,
+ 0x59a80058, 0x4801a01a, 0x60740800, 0x600011b8,
+ 0x0501f3e1, 0x0501f8bb, 0x4a01a006, 0x50000000,
+ 0x05fdf7a9, 0x0501f8b7, 0x4a01a006, 0x21100014,
+ 0x4979a007, 0x4979a008, 0x4979a009, 0x4979a00a,
+ 0x60140800, 0x600011b8, 0x0501f3d3, 0x0501f8b4,
+ 0x0501f002, 0x0501f8b9, 0x4a01a006, 0x02000000,
+ 0x60040800, 0x600011b8, 0x0501f3cb, 0x0501f8b3,
+ 0x4a01a006, 0x02000000, 0x59300403, 0x900005b1,
+ 0x05000002, 0x05fdf790, 0x0501fc38, 0x05000004,
+ 0x4a01a001, 0x00fffffe, 0x05fdf709, 0x81a40800,
+ 0x4a000801, 0x00fffffe, 0x05fdf705, 0x0501f8a3,
+ 0x4a01a006, 0x01000000, 0x5930041c, 0x80000540,
+ 0x05000003, 0x4801a407, 0x0501f002, 0x640da407,
+ 0x5930021c, 0x80000540, 0x05000003, 0x4801a207,
+ 0x0501f003, 0x4a01a207, 0x00002a00, 0x60080800,
+ 0x600011b8, 0x0501f3a8, 0x4a026202, 0x0000ffff,
+ 0x0501f880, 0x4a01a406, 0x00002010, 0x6451a206,
+ 0x4a01a407, 0x00000800, 0x4a01a207, 0x00002000,
+ 0x60000008, 0x59a80807, 0x8c04050c, 0x05000002,
+ 0x80000580, 0x5932481d, 0x59240c00, 0x8c040508,
+ 0x05000004, 0x90000560, 0x8c04050a, 0x05020002,
+ 0x90000550, 0x90000542, 0x5934080a, 0x8c040514,
+ 0x05000005, 0x82040d00, 0x00000380, 0x80040540,
+ 0x0501f006, 0x599c0818, 0x8c040518, 0x05000003,
+ 0x82000540, 0x00000380, 0x0501f03c, 0x0501f86b,
+ 0x4a01a406, 0x00000210, 0x6451a206, 0x4a01a407,
+ 0x00000800, 0x5934000a, 0x8c000516, 0x05000013,
+ 0x59340c05, 0x90040530, 0x05000013, 0x59340a05,
+ 0x82040500, 0x0000c000, 0x05020009, 0x8c04051a,
+ 0x05000004, 0x4a01a207, 0x00002100, 0x0501f00c,
+ 0x4a01a207, 0x00000100, 0x0501f009, 0x4a01a207,
+ 0x00000400, 0x0501f006, 0x4a01a207, 0x00000700,
+ 0x0501f003, 0x4a01a207, 0x00000800, 0x60000008,
0x59a80807, 0x8c04050c, 0x05000002, 0x80000580,
0x5932481d, 0x59240c00, 0x8c040508, 0x05000004,
0x90000560, 0x8c04050a, 0x05020002, 0x90000550,
- 0x90000542, 0x5934080a, 0x8c040514, 0x05000005,
- 0x82040d00, 0x00000380, 0x80040540, 0x0501f006,
- 0x599c0818, 0x8c040518, 0x05000003, 0x82000540,
- 0x00000380, 0x0501f03c, 0x0501f86b, 0x4a01a406,
- 0x00000210, 0x6451a206, 0x4a01a407, 0x00000800,
- 0x5934000a, 0x8c000516, 0x05000013, 0x59340c05,
- 0x90040530, 0x05000013, 0x59340a05, 0x82040500,
- 0x0000c000, 0x05020009, 0x8c04051a, 0x05000004,
- 0x4a01a207, 0x00002100, 0x0501f00c, 0x4a01a207,
- 0x00000100, 0x0501f009, 0x4a01a207, 0x00000400,
- 0x0501f006, 0x4a01a207, 0x00000700, 0x0501f003,
- 0x4a01a207, 0x00000800, 0x60000008, 0x59a80807,
- 0x8c04050c, 0x05000002, 0x80000580, 0x5932481d,
- 0x59240c00, 0x8c040508, 0x05000004, 0x90000560,
- 0x8c04050a, 0x05020002, 0x90000550, 0x90000542,
- 0x59340a00, 0x8c04050e, 0x0500000b, 0x84000550,
- 0x599c1017, 0x8c08050a, 0x05020004, 0x8c04050a,
- 0x05000002, 0x8400054e, 0x8c04051c, 0x05000002,
- 0x84000552, 0x4801a20a, 0x60140800, 0x600011b8,
- 0x0501f31c, 0x0501f82c, 0x4a01a006, 0x02100014,
- 0x4a01a007, 0x00000100, 0x4979a008, 0x4979a009,
- 0x4979a00a, 0x60140800, 0x600011b8, 0x0501f311,
- 0x0501f821, 0x4a01a006, 0x02000000, 0x05fdf644,
- 0x4933c857, 0x0501f81c, 0x4a01a006, 0x01000000,
- 0x642da407, 0x60080800, 0x600011b8, 0x0501f305,
- 0x42005000, 0x32000000, 0x42006000, 0x08290000,
- 0x41786800, 0x41787800, 0x0501f2c9, 0x42005000,
- 0x22000000, 0x42006000, 0x01290000, 0x41786800,
- 0x41787800, 0x0501f2c2, 0x42005000, 0x33000000,
- 0x42006000, 0x08980000, 0x41786800, 0x41787800,
- 0x0501f2bb, 0x42005000, 0x23000000, 0x42006000,
- 0x01980000, 0x41786800, 0x41787800, 0x0501f2b4,
- 0x59300403, 0x82000c80, 0x00000085, 0x05c81f5c,
- 0x82000c80, 0x00000093, 0x05ca1f59, 0x82000480,
- 0x00000085, 0x0c01f001, 0x00106aa9, 0x00106aa8,
- 0x00106aa8, 0x00106aa8, 0x00106aa8, 0x00106aa8,
- 0x00106aa9, 0x00106aa8, 0x00106aa8, 0x00106aa8,
- 0x00106aa8, 0x00106aa8, 0x00106aa8, 0x00106ab0,
- 0x05c9ff47, 0x4933c857, 0x42034800, 0x0010aefd,
- 0x0501f834, 0x41780800, 0x600010b8, 0x0501f2c9,
- 0x4d2c0000, 0x59325809, 0x4933c857, 0x492fc857,
- 0x812e59c0, 0x05c80f3a, 0x59340a12, 0x82040d00,
- 0x0000ff00, 0x592c000b, 0x82000500, 0x000000ff,
- 0x900001c0, 0x80040540, 0x592c0c08, 0x82040d00,
- 0x0000f000, 0x82040d80, 0x00003000, 0x05020003,
- 0x90000570, 0x0501f002, 0x90000551, 0x44034800,
- 0x81a5a000, 0x60241000, 0x600c0800, 0x592c000a,
- 0x82000500, 0xff000000, 0x82001d80, 0x84000000,
- 0x05000006, 0x82001d80, 0x85000000, 0x05ca0f1c,
- 0x601c1000, 0x60040800, 0x912c1c0a, 0x500c0000,
- 0x4401a000, 0x800c1800, 0x80d1a000, 0x80081040,
- 0x05fe07fb, 0x600011b8, 0x5c025800, 0x0501f299,
- 0x42005000, 0x81000000, 0x42006000, 0x00090000,
- 0x41786800, 0x41787800, 0x59301407, 0x90081585,
- 0x05020003, 0x42006000, 0x00890000, 0x59301416,
- 0x8c08051a, 0x05000002, 0x60047800, 0x0501f254,
- 0x59300403, 0xb0000c93, 0x05ca1efd, 0xb000048b,
- 0x05c81efb, 0x5932680a, 0x59368c03, 0x4803c857,
- 0x0c01f001, 0x00106b5e, 0x00106b66, 0x00106b6e,
- 0x00106b76, 0x00106b01, 0x00106b01, 0x00106b01,
- 0x00106b56, 0x05c9feee, 0x42005000, 0x06000000,
- 0x42006000, 0x08290000, 0x41786800, 0x41787800,
- 0x0501f23b, 0x4933c857, 0x05fdff71, 0x4a01a006,
- 0x12000000, 0x59300407, 0x90000584, 0x05020003,
- 0x59340002, 0x0501f003, 0x5932481d, 0x59240005,
- 0x82000500, 0x00ffffff, 0x4801a007, 0x5930041b,
- 0x4801a408, 0x5930021b, 0x4801a208, 0x600c0800,
- 0x600011b8, 0x0501f25b, 0x05fdff5d, 0x4a01a006,
- 0x0f000000, 0x5930001e, 0x4801a007, 0x60080800,
- 0x600011b8, 0x0501f253, 0x05fdff63, 0x4a01a006,
- 0x02000000, 0x59c40085, 0x59880804, 0x80040c00,
- 0x48071004, 0x497b8885, 0x59880000, 0x4801a007,
- 0x59880001, 0x4801a008, 0x59880002, 0x4801a009,
- 0x59880003, 0x4801a00a, 0x59880004, 0x4801a00b,
- 0x59880005, 0x4801a00c, 0x601c0800, 0x600011b8,
- 0x0501f23c, 0x4a026202, 0x0000ffff, 0x05fdff3c,
- 0x4a01a006, 0x62000000, 0x5930001e, 0x4801a007,
- 0x60080800, 0x600011b8, 0x0501f232, 0x05fdff34,
- 0x59300809, 0x4c500000, 0x4c540000, 0x4c580000,
- 0x9004a40b, 0x5930b01e, 0x90d0ac06, 0x0519ffc1,
- 0x5930081e, 0x600011b8, 0x5c00b000, 0x5c00a800,
- 0x5c00a000, 0x0501f223, 0x05fdffac, 0x59300019,
- 0x4801a006, 0x5930001a, 0x4801a007, 0x4a01a008,
- 0x00001000, 0x0501f020, 0x05fdffa4, 0x59300019,
- 0x4801a006, 0x5930001a, 0x4801a007, 0x4a01a008,
- 0x00004000, 0x0501f018, 0x05fdff9c, 0x59300019,
- 0x4801a006, 0x5930001a, 0x4801a007, 0x4a01a008,
- 0x00002000, 0x0501f010, 0x05fdff94, 0x59300019,
- 0x4801a006, 0x5930001a, 0x4801a007, 0x4a01a008,
- 0x00000400, 0x0501f008, 0x05fdff8c, 0x59300019,
- 0x4801a006, 0x5930001a, 0x4801a007, 0x4a01a008,
- 0x00000200, 0x4979a009, 0x4979a00a, 0x4979a00b,
- 0x4979a00c, 0x4979a00d, 0x60200800, 0x600011b8,
- 0x0501f1f4, 0x05fdff04, 0x4a01a006, 0x02000014,
- 0x4979a407, 0x4979a207, 0x59a80031, 0x4801a008,
- 0x59a80032, 0x4801a009, 0x4a01a00a, 0x00047878,
- 0x60140800, 0x600011b8, 0x0501f1e6, 0x05fdfef6,
- 0x4a01a006, 0x02140018, 0x4a01a407, 0x00000800,
- 0x5930001e, 0x82000d00, 0xff000000, 0x900409c0,
- 0x4805a207, 0x82000500, 0x00ffffff, 0x4801a00a,
- 0x4979a408, 0x4979a208, 0x4979a409, 0x4979a209,
- 0x4979a00b, 0x60180800, 0x600011b8, 0x0501f1d1,
- 0x4933c857, 0x4937c857, 0x4d1c0000, 0x60d40800,
- 0x050dfd9f, 0x05020021, 0x05fdfecd, 0x4a01a006,
- 0x13000000, 0x5932382a, 0x59300403, 0xb0000597,
- 0x05000004, 0x591c0416, 0x8c000502, 0x05c80e38,
- 0x591c001b, 0x4801a005, 0x591c0407, 0x90000583,
- 0x05000007, 0x5930080a, 0x58040002, 0x82000500,
- 0x00ffffff, 0x4801a007, 0x0501f004, 0x5932481d,
- 0x59240005, 0x4801a007, 0x5930041b, 0x4801a408,
+ 0x90000542, 0x59340a00, 0x8c04050e, 0x0500000b,
+ 0x84000550, 0x599c1017, 0x8c08050a, 0x05020004,
+ 0x8c04050a, 0x05000002, 0x8400054e, 0x8c04051c,
+ 0x05000002, 0x84000552, 0x4801a20a, 0x60140800,
+ 0x600011b8, 0x0501f344, 0x0501f82c, 0x4a01a006,
+ 0x02100014, 0x4a01a007, 0x00000100, 0x4979a008,
+ 0x4979a009, 0x4979a00a, 0x60140800, 0x600011b8,
+ 0x0501f339, 0x0501f821, 0x4a01a006, 0x02000000,
+ 0x05fdf642, 0x4933c857, 0x0501f81c, 0x4a01a006,
+ 0x01000000, 0x642da407, 0x60080800, 0x600011b8,
+ 0x0501f32d, 0x42005000, 0x32000000, 0x42006000,
+ 0x08290000, 0x41786800, 0x41787800, 0x0501f2e9,
+ 0x42005000, 0x22000000, 0x42006000, 0x01290000,
+ 0x41786800, 0x41787800, 0x0501f2e2, 0x42005000,
+ 0x33000000, 0x42006000, 0x08980000, 0x41786800,
+ 0x41787800, 0x0501f2db, 0x42005000, 0x23000000,
+ 0x42006000, 0x01980000, 0x41786800, 0x41787800,
+ 0x0501f2d4, 0x59300403, 0x82000c80, 0x00000085,
+ 0x05b81f6e, 0x82000c80, 0x00000093, 0x05ba1f6b,
+ 0x82000480, 0x00000085, 0x0c01f001, 0x00108e82,
+ 0x00108e81, 0x00108e81, 0x00108e81, 0x00108e81,
+ 0x00108e81, 0x00108e82, 0x00108e81, 0x00108e81,
+ 0x00108e81, 0x00108e81, 0x00108e81, 0x00108e81,
+ 0x00108e89, 0x05b9ff59, 0x4933c857, 0x42034800,
+ 0x0010e063, 0x0501f836, 0x41780800, 0x600010b8,
+ 0x0501f2f1, 0x4d2c0000, 0x59325809, 0x4933c857,
+ 0x492fc857, 0x812e59c0, 0x05b80f4c, 0x59340a12,
+ 0x82040d00, 0x0000ff00, 0x592c000e, 0x82000500,
+ 0x000000ff, 0x900001c0, 0x80040540, 0x592c0c0b,
+ 0x82040d00, 0x0000f000, 0x82040d80, 0x00003000,
+ 0x05020003, 0x90000570, 0x0501f002, 0x90000551,
+ 0x44034800, 0x81a5a000, 0x0501fb4c, 0x05020b51,
+ 0x60241000, 0x600c0800, 0x592c000d, 0x82000500,
+ 0xff000000, 0x82001d80, 0x84000000, 0x05000006,
+ 0x82001d80, 0x85000000, 0x05ba0f2c, 0x601c1000,
+ 0x60040800, 0x912c1c0d, 0x500c0000, 0x4401a000,
+ 0x800c1800, 0x80d1a000, 0x80081040, 0x05fe07fb,
+ 0x600011b8, 0x5c025800, 0x0501f2bf, 0x42005000,
+ 0x81000000, 0x42006000, 0x00090000, 0x41786800,
+ 0x41787800, 0x59301407, 0x90081585, 0x05020003,
+ 0x42006000, 0x00890000, 0x59301416, 0x8c08051a,
+ 0x05000002, 0x60047800, 0x0501f272, 0x59300403,
+ 0xb0000c93, 0x05ba1f0d, 0xb000048b, 0x05b81f0b,
+ 0x5932680a, 0x59368c03, 0x4803c857, 0x0c01f001,
+ 0x00108f39, 0x00108f41, 0x00108f49, 0x00108f51,
+ 0x00108edc, 0x00108edc, 0x00108edc, 0x00108f31,
+ 0x05b9fefe, 0x42005000, 0x06000000, 0x42006000,
+ 0x08290000, 0x41786800, 0x41787800, 0x0501f259,
+ 0x4933c857, 0x05fdff6f, 0x4a01a006, 0x12000000,
+ 0x59300407, 0x90000584, 0x05020003, 0x59340002,
+ 0x0501f003, 0x5932481d, 0x59240005, 0x82000500,
+ 0x00ffffff, 0x4801a007, 0x5930041b, 0x4801a408,
0x5930021b, 0x4801a208, 0x600c0800, 0x600011b8,
- 0x5c023800, 0x0501f1ab, 0x4803c856, 0x05f9fd70,
- 0x598c000b, 0x81300580, 0x05ca0e1d, 0x05f9fcc1,
- 0x59300403, 0xb0000597, 0x050409e2, 0x0005fc5a,
- 0x5c023800, 0x05f9f552, 0x4803c856, 0x4d2c0000,
- 0x4d1c0000, 0x5932382a, 0x811e39c0, 0x05c80e10,
- 0x831c0580, 0xffffffff, 0x05000036, 0x591c0c07,
- 0x90040586, 0x0500000a, 0x90040583, 0x05000036,
- 0x64de6403, 0x640e641c, 0x4a02621c, 0x00001700,
- 0x5c023800, 0x5c025800, 0x0501f064, 0x0501f848,
- 0x42001000, 0x40000000, 0x591c0203, 0x591c0804,
- 0x8c04053e, 0x05020020, 0x90000c91, 0x0c001002,
- 0x05c9fdf7, 0x00106c0a, 0x00106c15, 0x00106c0b,
- 0x00106c15, 0x00106c11, 0x00106c0a, 0x00106c0a,
- 0x00106c15, 0x00106c15, 0x00106c0a, 0x00106c0a,
- 0x00106c0a, 0x00106c0a, 0x00106c0a, 0x00106c15,
- 0x00106c0a, 0x00106c15, 0x05c9fde5, 0x591c0416,
- 0x4803c857, 0x8c000518, 0x05000003, 0x8c000512,
- 0x05000003, 0x80001580, 0x0501f003, 0x42001000,
- 0x20000000, 0x591c0017, 0x4801a00a, 0x0501f01a,
+ 0x0501f281, 0x05fdff5b, 0x4a01a006, 0x0f000000,
+ 0x5930001e, 0x4801a007, 0x60080800, 0x600011b8,
+ 0x0501f279, 0x05fdff61, 0x4a01a006, 0x02000000,
+ 0x59c40085, 0x59880804, 0x80040c00, 0x48071004,
+ 0x497b8885, 0x59880000, 0x4801a007, 0x59880001,
+ 0x4801a008, 0x59880002, 0x4801a009, 0x59880003,
+ 0x4801a00a, 0x59880004, 0x4801a00b, 0x59880005,
+ 0x4801a00c, 0x601c0800, 0x600011b8, 0x0501f262,
+ 0x4a026202, 0x0000ffff, 0x05fdff3a, 0x4a01a006,
+ 0x62000000, 0x5930001e, 0x4801a007, 0x60080800,
+ 0x600011b8, 0x0501f258, 0x05fdff32, 0x59300809,
+ 0x4c500000, 0x4c540000, 0x4c580000, 0x9004a40e,
+ 0x5930b01e, 0x90d0ac06, 0x0521f97d, 0x5930081e,
+ 0x600011b8, 0x5c00b000, 0x5c00a800, 0x5c00a000,
+ 0x0501f249, 0x05fdffac, 0x59300019, 0x4801a006,
+ 0x5930001a, 0x4801a007, 0x4a01a008, 0x00001000,
+ 0x0501f020, 0x05fdffa4, 0x59300019, 0x4801a006,
+ 0x5930001a, 0x4801a007, 0x4a01a008, 0x00004000,
+ 0x0501f018, 0x05fdff9c, 0x59300019, 0x4801a006,
+ 0x5930001a, 0x4801a007, 0x4a01a008, 0x00002000,
+ 0x0501f010, 0x05fdff94, 0x59300019, 0x4801a006,
+ 0x5930001a, 0x4801a007, 0x4a01a008, 0x00000400,
+ 0x0501f008, 0x05fdff8c, 0x59300019, 0x4801a006,
+ 0x5930001a, 0x4801a007, 0x4a01a008, 0x00000200,
+ 0x4979a009, 0x4979a00a, 0x4979a00b, 0x4979a00c,
+ 0x4979a00d, 0x60200800, 0x600011b8, 0x0501f21a,
+ 0x05fdff02, 0x4a01a006, 0x02000014, 0x4979a407,
+ 0x4979a207, 0x59a8005f, 0x4801a008, 0x59a80060,
+ 0x4801a009, 0x4a01a00a, 0x00047878, 0x60140800,
+ 0x600011b8, 0x0501f20c, 0x05fdfef4, 0x4a01a006,
+ 0x02140018, 0x4a01a407, 0x00000800, 0x5930001e,
+ 0x82000d00, 0xff000000, 0x900409c0, 0x4805a207,
+ 0x82000500, 0x00ffffff, 0x4801a00a, 0x4979a408,
+ 0x4979a208, 0x4979a409, 0x4979a209, 0x59a80006,
+ 0x8c000500, 0x05000005, 0x4a01a006, 0x02100014,
+ 0x60140800, 0x0501f003, 0x4979a00b, 0x60180800,
+ 0x600011b8, 0x0501f1f0, 0x4933c857, 0x4937c857,
+ 0x4d1c0000, 0x60d40800, 0x0511f988, 0x05020025,
+ 0x59300017, 0x591c0817, 0x80040580, 0x05020021,
+ 0x05fdfec0, 0x4a01a006, 0x13000000, 0x5932382a,
+ 0x59300403, 0xb0000597, 0x05000004, 0x591c0416,
+ 0x8c000502, 0x05b80e3d, 0x591c001b, 0x4801a005,
+ 0x591c0407, 0x90000583, 0x05000007, 0x5930080a,
+ 0x58040002, 0x82000500, 0x00ffffff, 0x4801a007,
+ 0x0501f004, 0x5932481d, 0x59240005, 0x4801a007,
+ 0x5930041b, 0x4801a408, 0x5930021b, 0x4801a208,
+ 0x600c0800, 0x600011b8, 0x5c023800, 0x0501f1c6,
+ 0x4803c856, 0x05f9fd5e, 0x598c000b, 0x81300580,
+ 0x05ba0e22, 0x05f9fcb0, 0x59300403, 0xb0000597,
+ 0x05040b07, 0x0005ffdc, 0x5c023800, 0x05f9f545,
+ 0x4803c856, 0x4d2c0000, 0x4d1c0000, 0x5932382a,
+ 0x811e39c0, 0x05b80e15, 0x831c0580, 0xffffffff,
+ 0x05000044, 0x591c0c07, 0x90040586, 0x0500000a,
+ 0x90040583, 0x05000044, 0x64de6403, 0x640e641c,
+ 0x4a02621c, 0x00001700, 0x5c023800, 0x5c025800,
+ 0x0501f072, 0x0501f856, 0x42001000, 0x40000000,
+ 0x591c0203, 0x591c0804, 0x8c04053e, 0x05020024,
+ 0x90000c91, 0x0c001002, 0x05b9fdfc, 0x00108ff0,
+ 0x00108fff, 0x00108ff1, 0x00108fff, 0x00108ff9,
+ 0x00108ff0, 0x00108fff, 0x00108fff, 0x00108fff,
+ 0x00108ff0, 0x00108ff0, 0x00108ff0, 0x00108ff0,
+ 0x00108ff0, 0x00108fff, 0x00108ff0, 0x00108fff,
+ 0x05b9fdea, 0x591c0416, 0x4803c857, 0x8c000518,
+ 0x05000003, 0x8c000512, 0x05000007, 0x80001580,
+ 0x0501f007, 0x80001580, 0x591c0014, 0x4803c857,
+ 0x0501f00e, 0x42001000, 0x20000000, 0x591c0013,
+ 0x4803c857, 0x8c00053c, 0x05000003, 0x80000580,
+ 0x0501f006, 0x591c0014, 0x4803c857, 0x800001c0,
+ 0x05020002, 0x591c0017, 0x4801a00a, 0x0501f01a,
0x0501f81f, 0x42001000, 0x40000000, 0x41780000,
0x05fdf7fa, 0x0501f81a, 0x591e5809, 0x812e59c0,
- 0x05c80dcf, 0x592c1010, 0x591c0013, 0x80080480,
+ 0x05b80dc6, 0x592c1013, 0x591c0013, 0x80080480,
0x4801a00a, 0x591c0203, 0x591c0804, 0x8c04053e,
0x05020005, 0x90000d82, 0x05000006, 0x90000d84,
0x05000004, 0x42001000, 0x40000000, 0x0501f002,
0x80001580, 0x4809a00b, 0x60180800, 0x600011b8,
- 0x5c023800, 0x5c025800, 0x0501f142, 0x4803c856,
- 0x05fdfe51, 0x4a01a006, 0x02000000, 0x59300c1b,
+ 0x5c023800, 0x5c025800, 0x0501f14f, 0x4803c856,
+ 0x05fdfe36, 0x4a01a006, 0x02000000, 0x59300c1b,
0x4805a407, 0x59300a1b, 0x4805a207, 0x5932481d,
0x59241005, 0x5930080a, 0x58041802, 0x820c1d00,
0x00ffffff, 0x5930082a, 0x82040580, 0xffffffff,
0x05000007, 0x58040407, 0x90000583, 0x05020004,
0x4809a008, 0x480da009, 0x0501f003, 0x480da008,
- 0x4809a009, 0x1c01f000, 0x4803c856, 0x05fdfe36,
- 0x0501f003, 0x4803c856, 0x05fdfe2c, 0x4a01a006,
+ 0x4809a009, 0x1c01f000, 0x4803c856, 0x05fdfe1b,
+ 0x0501f003, 0x4803c856, 0x05fdfe11, 0x4a01a006,
0x01000000, 0x5930041c, 0x4801a407, 0x5930021c,
- 0x4801a207, 0x60080800, 0x600011b8, 0x0501f119,
- 0x4803c856, 0x4d1c0000, 0x05fdfe12, 0x4a01a006,
+ 0x4801a207, 0x60080800, 0x600011b8, 0x0501f126,
+ 0x4803c856, 0x4d1c0000, 0x05fdfdf7, 0x4a01a006,
0x14000000, 0x5932382a, 0x591c001b, 0x4801a005,
0x5930041b, 0x4801a407, 0x5930021b, 0x4801a207,
0x59300017, 0x4801a008, 0x59300218, 0x82000500,
0x000000ff, 0x840001c0, 0x4801a409, 0x60100800,
- 0x600011b8, 0x5c023800, 0x0501f102, 0x4803c856,
- 0x05fdfe11, 0x4a01a006, 0x02000001, 0x42001000,
+ 0x600011b8, 0x5c023800, 0x0501f10f, 0x4803c856,
+ 0x05fdfdf6, 0x4a01a006, 0x02000001, 0x42001000,
0xe8000000, 0x59c40801, 0x82040d00, 0x00018000,
0x90040580, 0x60000100, 0x0500000e, 0x82040580,
0x00008000, 0x60000080, 0x0500000a, 0x82040580,
0x00010000, 0x60000040, 0x05000006, 0x82040580,
0x00018000, 0x60000010, 0x05000002, 0x60080000,
0x80080540, 0x4801a007, 0x60080800, 0x600011b8,
- 0x0501f0e4, 0x4803c856, 0x0501f809, 0x5930041c,
- 0x900001c0, 0x4801a005, 0x0501f92d, 0x41780800,
- 0x600010b8, 0x0501f8db, 0x05f9f146, 0x4803c856,
- 0x59300819, 0x90041c06, 0x64874800, 0x58040405,
+ 0x0501f0f1, 0x4803c856, 0x0501f809, 0x5930041c,
+ 0x900001c0, 0x4801a005, 0x0501f950, 0x41780800,
+ 0x600010b8, 0x0501f8e8, 0x05f1f721, 0x4803c856,
+ 0x59300819, 0x90041c09, 0x64874800, 0x58040408,
0x82000500, 0x0000f000, 0x82000580, 0x00003000,
- 0x05000002, 0x65074800, 0x81a5a000, 0x580c0001,
- 0x82000d00, 0x00ffffff, 0x82040d40, 0xc2000000,
- 0x4805a000, 0x580c0800, 0x82041500, 0x00ffffff,
- 0x82000500, 0xff000000, 0x80080540, 0x4801a001,
- 0x580c0002, 0x82000580, 0x00c00000, 0x82000500,
- 0x00fd0300, 0x4801a002, 0x580c0003, 0x4801a003,
- 0x580c0404, 0x4801a404, 0x580c0204, 0x4801a204,
- 0x1c01f000, 0x05fdfdc4, 0x5930001e, 0x800001c0,
- 0x05000006, 0x4a01a006, 0x01000000, 0x640da407,
- 0x60080800, 0x0501f021, 0x4a01a006, 0x02000000,
- 0x41780800, 0x916c0584, 0x05020003, 0x84040d42,
- 0x0501f00c, 0x05edfe5d, 0x05020003, 0x84040d4a,
- 0x0501f002, 0x84040d48, 0x59a8021b, 0x8c000506,
- 0x05020003, 0x8c00050a, 0x05000002, 0x84040d46,
- 0x4805a207, 0x59c40085, 0x48031004, 0x4c580000,
- 0x4c500000, 0x4c540000, 0x6018b000, 0x9188a400,
- 0x90d0ac08, 0x0519fe27, 0x5c00a800, 0x5c00a000,
- 0x5c00b000, 0x60200800, 0x600011b8, 0x0501f089,
- 0x05fdfd8b, 0x4a01a006, 0x56000000, 0x59340006,
- 0x4801a007, 0x59340007, 0x4801a008, 0x600c0800,
- 0x600011b8, 0x0501f07f, 0x4803c856, 0x05fdfd8e,
- 0x5930081e, 0x800409c0, 0x0500000b, 0x82040580,
- 0x0000ffff, 0x05000003, 0x90040487, 0x05021006,
- 0x4a01a006, 0x01000000, 0x640da407, 0x60080800,
- 0x0501f011, 0x4a01a006, 0x0200001c, 0x6405a007,
- 0x42001000, 0x0010aee5, 0x50080000, 0x9c0001c0,
- 0x4801a009, 0x5932481d, 0x59240005, 0x4801a00a,
- 0x59240001, 0x59240802, 0x4801a00b, 0x4805a00c,
- 0x601c0800, 0x600011b8, 0x0501f05e, 0x4d2c0000,
- 0x05fdfd5f, 0x59325809, 0x812e59c0, 0x05020003,
- 0x4979a001, 0x0501f005, 0x592c0009, 0x82000500,
- 0x00ffffff, 0x4801a001, 0x4a01a006, 0x51000000,
- 0x5c025800, 0x05fdf3c6, 0x4803c856, 0x59325809,
- 0x5932680a, 0x59300407, 0x4803c857, 0x90000d8a,
- 0x05000002, 0x05c9fcbe, 0x42005000, 0x02000000,
- 0x42006000, 0x20290000, 0x41786800, 0x41787800,
- 0x0501f805, 0x91180d78, 0x60801193, 0x0501f86b,
- 0x1c01f000, 0x6081a000, 0x59300416, 0x8c000510,
- 0x05020008, 0x6001a000, 0x0501f006, 0x60c1a000,
- 0x59300416, 0x8c000510, 0x05020002, 0x6045a000,
- 0x59340a12, 0x82040d00, 0x0000ff00, 0x5932481d,
- 0x59240408, 0x900001c0, 0x80040540, 0x80d00540,
- 0x44034800, 0x81a5a000, 0x59340002, 0x82000500,
- 0x00ffffff, 0x59300c03, 0x90040db1, 0x05020002,
- 0x41780000, 0x80280540, 0x4801a000, 0x59240005,
- 0x4801a001, 0x4831a002, 0x90340540, 0x4801a003,
- 0x59300402, 0x4801a404, 0x59300a02, 0x4805a204,
- 0x8c30052e, 0x05000003, 0x4805a404, 0x4801a204,
- 0x483da005, 0x1c01f000, 0x643e6407, 0x59300819,
- 0x5930001a, 0x80102540, 0x48126019, 0x4806601a,
- 0x5930081b, 0x82040d00, 0x00fffff0, 0x82040d80,
- 0x00c00000, 0x4806601b, 0x481a601e, 0x1c01f000,
- 0x4807c857, 0x4c040000, 0x0501f841, 0x5c000800,
- 0x40040000, 0x80081540, 0x800000c4, 0x82000540,
- 0x00002000, 0x4803910a, 0x59b400f6, 0x90000518,
- 0x05fe07fe, 0x42001800, 0x0010aefe, 0x580c0004,
- 0x4803c857, 0x580c0006, 0x4803c857, 0x580c1800,
- 0x480fc857, 0x8d0c052a, 0x0500000c, 0x820c1d00,
- 0xf8000000, 0x05000009, 0x4c040000, 0x4c080000,
- 0x40083800, 0x42000000, 0x0010aefe, 0x05c9fd65,
- 0x5c001000, 0x5c000800, 0x4a0368f0, 0x0010aefd,
- 0x4a0368f1, 0x0010af04, 0x480b68f3, 0x59b400f6,
+ 0x05000002, 0x65074800, 0x81a5a000, 0x0501f94f,
+ 0x05000004, 0x4c0c0000, 0x0501f952, 0x5c001800,
+ 0x580c0001, 0x82000d00, 0x00ffffff, 0x82040d40,
+ 0xc2000000, 0x4805a000, 0x580c0800, 0x82041500,
+ 0x00ffffff, 0x82000500, 0xff000000, 0x80080540,
+ 0x4801a001, 0x580c0002, 0x82000580, 0x00c00000,
+ 0x82000500, 0x00fd0300, 0x4801a002, 0x580c0003,
+ 0x4801a003, 0x580c0404, 0x4801a404, 0x580c0204,
+ 0x4801a204, 0x1c01f000, 0x05fdfda4, 0x5930001e,
+ 0x800001c0, 0x05000006, 0x4a01a006, 0x01000000,
+ 0x640da407, 0x60080800, 0x0501f021, 0x4a01a006,
+ 0x02000000, 0x41780800, 0x916c0584, 0x05020003,
+ 0x84040d42, 0x0501f00c, 0x05e5ffe0, 0x05020003,
+ 0x84040d4a, 0x0501f002, 0x84040d48, 0x59a80249,
+ 0x8c000506, 0x05020003, 0x8c00050a, 0x05000002,
+ 0x84040d46, 0x4805a207, 0x59c40085, 0x48031004,
+ 0x4c580000, 0x4c500000, 0x4c540000, 0x6018b000,
+ 0x9188a400, 0x90d0ac08, 0x051dffc5, 0x5c00a800,
+ 0x5c00a000, 0x5c00b000, 0x60200800, 0x600011b8,
+ 0x0501f091, 0x05fdfd6b, 0x4a01a006, 0x56000000,
+ 0x59340006, 0x4801a007, 0x59340007, 0x4801a008,
+ 0x600c0800, 0x600011b8, 0x0501f087, 0x4803c856,
+ 0x05fdfd6e, 0x5930081e, 0x800409c0, 0x0500000b,
+ 0x82040580, 0x0000ffff, 0x05000003, 0x90040487,
+ 0x05021006, 0x4a01a006, 0x01000000, 0x640da407,
+ 0x60080800, 0x0501f011, 0x4a01a006, 0x0200001c,
+ 0x6405a007, 0x42001000, 0x0010dd4b, 0x50080000,
+ 0x9c0001c0, 0x4801a009, 0x5932481d, 0x59240005,
+ 0x4801a00a, 0x59240001, 0x59240802, 0x4801a00b,
+ 0x4805a00c, 0x601c0800, 0x600011b8, 0x0501f066,
+ 0x4d2c0000, 0x05fdfd3f, 0x59325809, 0x812e59c0,
+ 0x05020003, 0x4979a001, 0x0501f005, 0x592c000c,
+ 0x82000500, 0x00ffffff, 0x4801a001, 0x4a01a006,
+ 0x51000000, 0x5c025800, 0x05fdf3a1, 0x4803c856,
+ 0x59325809, 0x5932680a, 0x59300407, 0x4803c857,
+ 0x90000d8a, 0x05000002, 0x05b9fcb0, 0x42005000,
+ 0x02000000, 0x42006000, 0x20290000, 0x41786800,
+ 0x41787800, 0x0501f805, 0x91180d78, 0x60801193,
+ 0x0501f882, 0x1c01f000, 0x6081a000, 0x59300416,
+ 0x8c000510, 0x05020008, 0x6001a000, 0x0501f006,
+ 0x60c1a000, 0x59300416, 0x8c000510, 0x05020002,
+ 0x6045a000, 0x59340a12, 0x82040d00, 0x0000ff00,
+ 0x5932481d, 0x59240408, 0x900001c0, 0x80040540,
+ 0x80d00540, 0x44034800, 0x81a5a000, 0x0501f8a3,
+ 0x050208a8, 0x59340002, 0x82000500, 0x00ffffff,
+ 0x59300c03, 0x90040db1, 0x05020002, 0x41780000,
+ 0x80280540, 0x4801a000, 0x59240005, 0x4801a001,
+ 0x4831a002, 0x90340540, 0x4801a003, 0x59300402,
+ 0x4801a404, 0x59300a02, 0x4805a204, 0x8c30052e,
+ 0x05000009, 0x4805a404, 0x59301416, 0x480bc857,
+ 0x8c08051c, 0x05000003, 0x59300216, 0x4803c857,
+ 0x4801a204, 0x483da005, 0x1c01f000, 0x643e6407,
+ 0x59300819, 0x5930001a, 0x80102540, 0x48126019,
+ 0x4806601a, 0x5930081b, 0x82040d00, 0x00fffff0,
+ 0x82040d80, 0x00c00000, 0x4806601b, 0x481a601e,
+ 0x1c01f000, 0x4807c857, 0x4c040000, 0x0501f857,
+ 0x5c000800, 0x40040000, 0x80081540, 0x800000c4,
+ 0x82000540, 0x00002000, 0x42000800, 0x0010e06a,
+ 0x59a824cc, 0x8c100502, 0x05000008, 0x90040c02,
+ 0x82000540, 0x00004000, 0x82081500, 0xffffc3ff,
+ 0x82081540, 0x00002400, 0x4803910a, 0x59b400f6,
+ 0x90000518, 0x05fe07fe, 0x42001800, 0x0010e064,
+ 0x8c100502, 0x05000003, 0x42001800, 0x0010e066,
+ 0x580c0004, 0x4803c857, 0x580c0006, 0x4803c857,
+ 0x580c1800, 0x480fc857, 0x8d0c052a, 0x0500000c,
+ 0x820c1d00, 0xf8000000, 0x05000009, 0x4c040000,
+ 0x4c080000, 0x40083800, 0x42000000, 0x0010e064,
+ 0x05b9fd4b, 0x5c001000, 0x5c000800, 0x4a0368f0,
+ 0x0010e063, 0x480768f1, 0x480b68f3, 0x59b400f6,
0x90000538, 0x05fe07fe, 0x4203e000, 0xb0800000,
- 0x600bf800, 0x05f9f03f, 0x4807c857, 0x59300004,
- 0x8c000512, 0x05000002, 0x8408154c, 0x480a2800,
- 0x4c040000, 0x0501f80e, 0x5c000800, 0x59b400f6,
- 0x8c00050a, 0x05fe07fe, 0x49a768f2, 0x480768f4,
- 0x59b400f6, 0x90000538, 0x05fe07fe, 0x4203e000,
- 0xb0800000, 0x600bf800, 0x1c01f000, 0x61a07007,
- 0x4203e000, 0xb0800000, 0x600ff800, 0x40000000,
- 0x40000000, 0x40000000, 0x0501b004, 0x80387040,
- 0x05c80c2b, 0x05fdf7f9, 0x1c01f000, 0x82000500,
- 0xffff0000, 0x82000580, 0x01050000, 0x0502000b,
- 0x599c0818, 0x8c040510, 0x05000008, 0x59a80806,
- 0x8c04050a, 0x05000005, 0x613c1100, 0x41781800,
- 0x41782000, 0x05e1fff8, 0x1c01f000, 0x1c01f000,
- 0x59a80067, 0x800001c0, 0x0500004b, 0x4d2c0000,
+ 0x600bf800, 0x05f1f5fe, 0x4807c857, 0x0501f837,
+ 0x05000006, 0x82040d00, 0xffffff07, 0xb0040d48,
+ 0x82081540, 0x00001000, 0x59300004, 0x8c000512,
+ 0x05000002, 0x8408154c, 0x480a2800, 0x4c040000,
+ 0x0501f80e, 0x5c000800, 0x59b400f6, 0x8c00050a,
+ 0x05fe07fe, 0x49a768f2, 0x480768f4, 0x59b400f6,
+ 0x90000538, 0x05fe07fe, 0x4203e000, 0xb0800000,
+ 0x600bf800, 0x1c01f000, 0x61a07007, 0x4203e000,
+ 0xb0800000, 0x600ff800, 0x40000000, 0x40000000,
+ 0x40000000, 0x0501b004, 0x80387040, 0x05b80bff,
+ 0x05fdf7f9, 0x1c01f000, 0x82000500, 0xffff0000,
+ 0x82000580, 0x01050000, 0x0502000b, 0x599c0818,
+ 0x8c040510, 0x05000008, 0x59a80806, 0x8c04050a,
+ 0x05000005, 0x613c1100, 0x41781800, 0x41782000,
+ 0x05d9fdf0, 0x1c01f000, 0x05ddf92a, 0x05000004,
+ 0x59a804cc, 0x4803c857, 0x8c000502, 0x1c01f000,
+ 0x48d3c857, 0x5924100b, 0x82080500, 0x00001fff,
+ 0x800000c2, 0x82080d00, 0x0000e000, 0x80040540,
+ 0x82000540, 0x50000000, 0x4801a000, 0x82080500,
+ 0xff000000, 0x4801a001, 0x90d1a402, 0x48d3c857,
+ 0x1c01f000, 0x1c01f000, 0x4d340000, 0x59300407,
+ 0x90006c92, 0x05021015, 0x5932680a, 0x0c01f001,
+ 0x0010925b, 0x00109227, 0x0010921f, 0x00109232,
+ 0x0010923e, 0x00109240, 0x0010924a, 0x0010925b,
+ 0x0010925b, 0x0010925b, 0x0010925b, 0x0010925b,
+ 0x0010925b, 0x0010925b, 0x0010925b, 0x00109256,
+ 0x0010925b, 0x0010924e, 0x05b9fbbc, 0x8d3c0500,
+ 0x0500003d, 0x59300229, 0x90000583, 0x05020031,
+ 0x05f9fa22, 0x0502002f, 0x0501f037, 0x8d3c051a,
+ 0x0502002c, 0x8d3c0500, 0x0502002a, 0x8d3c0518,
+ 0x05020032, 0x8d3c0506, 0x0500002f, 0x050dfd9a,
+ 0x05000024, 0x0501f02c, 0x8d3c0500, 0x05000003,
+ 0x05f9fa12, 0x0502001f, 0x8d3c0518, 0x05020027,
+ 0x8d3c0506, 0x05000024, 0x59340200, 0x8c00050e,
+ 0x05020018, 0x0501f020, 0x8d3c051a, 0x05020015,
+ 0x8d3c0500, 0x05020013, 0x8d3c0518, 0x05000003,
+ 0x8d3c0516, 0x05000018, 0x5930042c, 0x8c000500,
+ 0x0502000c, 0x0501f014, 0x8d3c0500, 0x05020009,
+ 0x8d3c0518, 0x0501f011, 0x8d3c0500, 0x05020005,
+ 0x8d3c0518, 0x0500000d, 0x8d3c0516, 0x0500000a,
+ 0x80000580, 0x0501f009, 0x833c0500, 0x00001800,
+ 0x05fc07fc, 0x8d3c0516, 0x05fe07fa, 0x8d3c0500,
+ 0x05fe07f8, 0x90000541, 0x5c026800, 0x1c01f000,
+ 0x59a8009d, 0x800001c0, 0x05000049, 0x4d2c0000,
0x4d300000, 0x4c5c0000, 0x4c600000, 0x4c640000,
0x40025800, 0x4000c000, 0x4000c800, 0x42026000,
- 0x00110484, 0x592c0407, 0x81440580, 0x05020033,
- 0x83240580, 0xffffffff, 0x05000004, 0x592c0002,
- 0x81240580, 0x0502002d, 0x592c0205, 0xb0000595,
- 0x05000005, 0x8d3c0518, 0x05000028, 0x8d3c0516,
- 0x05020026, 0x40640000, 0x812c0580, 0x05020016,
- 0x59300203, 0x90000580, 0x0500000f, 0x59300009,
- 0x800001c0, 0x0500000c, 0x05f9fb41, 0x4df00000,
- 0x05f9fa3e, 0x0201f800, 0x0010f0c0, 0x80c40040,
- 0x05020002, 0x64026203, 0x5c03e000, 0x05f80b24,
- 0x497a6009, 0x592cc800, 0x4064c000, 0x4064b800,
- 0x0501f003, 0x592cb800, 0x485cc000, 0x497a5800,
- 0x592c0205, 0x82000580, 0x00000155, 0x05000003,
- 0x05c9ff78, 0x0501f003, 0x49425a07, 0x0001fb5b,
- 0x405e5800, 0x0501f003, 0x412cc000, 0x592e5800,
- 0x812e59c0, 0x05fe07c8, 0x48675067, 0x48635068,
- 0x5c00c800, 0x5c00c000, 0x5c00b800, 0x5c026000,
- 0x5c025800, 0x1c01f000, 0x4943c857, 0x4d440000,
- 0x4d340000, 0x4c580000, 0x4d240000, 0x42024800,
- 0xffffffff, 0x61c0b00f, 0x417a8800, 0x0001fae7,
- 0x05020002, 0x05fdffa7, 0x81468800, 0x8058b040,
- 0x05fe07fb, 0x83440480, 0x00000800, 0x05021006,
- 0x8d3c0502, 0x05000004, 0x61c2880f, 0x6040b000,
- 0x05fdf7f3, 0x5c024800, 0x5c00b000, 0x5c026800,
- 0x5c028800, 0x1c01f000, 0x4d300000, 0x59a81067,
- 0x800811c0, 0x05000022, 0x42026000, 0x00110484,
- 0x59300203, 0x90000580, 0x0502001d, 0x58080803,
- 0x58080002, 0x4802601d, 0x4806600a, 0x480a6009,
- 0x64166407, 0x64066203, 0x4a026403, 0x00000092,
- 0x41780800, 0x58080205, 0xb0000595, 0x05000002,
- 0x60040800, 0x4806642c, 0x42000800, 0x80000040,
- 0x497a6416, 0x58080408, 0x82000500, 0x0000f000,
- 0x82000580, 0x00003000, 0x05020004, 0x4a026416,
- 0x00000100, 0x84040d52, 0x0005fb32, 0x5c026000,
- 0x1c01f000, 0x4d900000, 0x4dd00000, 0x4da40000,
- 0x4d140000, 0x4cd80000, 0x4d180000, 0x4803c856,
- 0x417a3000, 0x05fdf823, 0x59900805, 0x800409c0,
- 0x05000012, 0x91947c09, 0x83180400, 0x00105c9f,
- 0x50000000, 0x803c7c00, 0x583c0003, 0x811808ca,
- 0x82040c00, 0x00006139, 0x50040800, 0x80040580,
- 0x05000006, 0x42000000, 0x0010b33a, 0x0519fbc2,
- 0x90000541, 0x0501f004, 0x811a3000, 0x91180585,
- 0x05fe07e9, 0x5c023000, 0x5c01b000, 0x5c022800,
- 0x5c034800, 0x5c03a000, 0x5c032000, 0x1c01f000,
+ 0x00111a40, 0x592c040a, 0x81440580, 0x05020031,
+ 0x83240580, 0xffffffff, 0x05000004, 0x592c0005,
+ 0x81240580, 0x0502002b, 0x592c0208, 0xb0000595,
+ 0x05000005, 0x8d3c0518, 0x05000026, 0x8d3c0516,
+ 0x05020024, 0x40640000, 0x812c0580, 0x05020014,
+ 0x59300203, 0x90000580, 0x0500000d, 0x59300009,
+ 0x800001c0, 0x0500000a, 0x05f9fa8d, 0x4df00000,
+ 0x05f9f98e, 0x05f5ff57, 0x05020002, 0x64026203,
+ 0x5c03e000, 0x05f80a77, 0x497a6009, 0x592cc800,
+ 0x4064c000, 0x4064b800, 0x0501f003, 0x592cb800,
+ 0x485cc000, 0x497a5800, 0x592c0208, 0x82000580,
+ 0x00000155, 0x05000003, 0x05b9fef8, 0x0501f003,
+ 0x49425a0a, 0x0001fb82, 0x405e5800, 0x0501f003,
+ 0x412cc000, 0x592e5800, 0x812e59c0, 0x05fe07ca,
+ 0x4867509d, 0x4863509e, 0x5c00c800, 0x5c00c000,
+ 0x5c00b800, 0x5c026000, 0x5c025800, 0x1c01f000,
+ 0x4943c857, 0x4d440000, 0x4d340000, 0x4c580000,
+ 0x4d240000, 0x42024800, 0xffffffff, 0x61c0b00f,
+ 0x417a8800, 0x0001fb00, 0x05020002, 0x05fdffa9,
+ 0x81468800, 0x8058b040, 0x05fe07fb, 0x83440480,
+ 0x00000800, 0x05021006, 0x8d3c0502, 0x05000004,
+ 0x61c2880f, 0x6040b000, 0x05fdf7f3, 0x5c024800,
+ 0x5c00b000, 0x5c026800, 0x5c028800, 0x1c01f000,
+ 0x4d300000, 0x59a8109d, 0x800811c0, 0x05000022,
+ 0x42026000, 0x00111a40, 0x59300203, 0x90000580,
+ 0x0502001d, 0x58080806, 0x58080005, 0x4802601d,
+ 0x4806600a, 0x480a6009, 0x64166407, 0x64066203,
+ 0x4a026403, 0x00000092, 0x41780800, 0x58080208,
+ 0xb0000595, 0x05000002, 0x60040800, 0x4806642c,
+ 0x42000800, 0x80000040, 0x497a6416, 0x5808040b,
+ 0x82000500, 0x0000f000, 0x82000580, 0x00003000,
+ 0x05020004, 0x4a026416, 0x00000100, 0x84040d52,
+ 0x0005feaf, 0x5c026000, 0x1c01f000, 0x4803c856,
+ 0x05fdfb72, 0x0501f87a, 0x90d00482, 0x4a000000,
+ 0x50001ffc, 0x4803c856, 0x05fdfb6c, 0x0501f874,
+ 0x05fdf553, 0x4803c856, 0x4c580000, 0x4c500000,
+ 0x4c540000, 0x4d2c0000, 0x05fdfb56, 0x59325809,
+ 0x4a01a006, 0x7f000000, 0x0501f869, 0x4a01a407,
+ 0x00000101, 0x5930021b, 0x4801a207, 0x59a80002,
+ 0x4801a008, 0x59a80003, 0x4801a009, 0x4a01a20a,
+ 0x00000228, 0x4cd00000, 0x90d1a40b, 0x4a01a400,
+ 0x00000101, 0x6411a200, 0x812e59c0, 0x05020003,
+ 0x59a800ce, 0x0501f002, 0x592c000f, 0x4801a001,
+ 0x90d1a402, 0x4a01a400, 0x00000102, 0x6411a200,
+ 0x4979a401, 0x812e59c0, 0x05020003, 0x59a802cc,
+ 0x0501f002, 0x592c020b, 0x4801a201, 0x90d1a402,
+ 0x4a01a400, 0x00000103, 0x4a01a200, 0x00000200,
+ 0x6000b001, 0x4200a000, 0x001105f2, 0x90d0ac01,
+ 0x50500000, 0x4400a800, 0x8050a000, 0x8054a800,
+ 0x8058b040, 0x05fe07fb, 0x5c01a000, 0x60280801,
+ 0x600011b8, 0x5c025800, 0x5c00a800, 0x5c00a000,
+ 0x5c00b000, 0x05fdf640, 0x4803c856, 0x4c580000,
+ 0x4c500000, 0x4c540000, 0x4d2c0000, 0x05fdfb23,
+ 0x90d00482, 0x4a000000, 0x50001ffc, 0x59325809,
+ 0x4a01a006, 0x02000000, 0x05fdf7bc, 0x4803c856,
+ 0x4c580000, 0x4c500000, 0x4d2c0000, 0x05fdfb09,
+ 0x90d00482, 0x4a000000, 0x50001ffc, 0x59325809,
+ 0x4a01a006, 0x7f000000, 0x0501f819, 0x4a01a407,
+ 0x00000102, 0x5930021b, 0x4801a207, 0x59a80002,
+ 0x4801a008, 0x59a80003, 0x4801a009, 0x6451a20a,
+ 0x60140800, 0x600011b8, 0x5c025800, 0x5c00a000,
+ 0x5c00b000, 0x05fdf618, 0x4803c856, 0x4c580000,
+ 0x4c500000, 0x4d2c0000, 0x05fdfafc, 0x59325809,
+ 0x4a01a006, 0x02000000, 0x05fdf7e8, 0x58d00001,
+ 0x82000500, 0xff000000, 0x800001c0, 0x05020004,
+ 0x82000540, 0x00fffff0, 0x4801a001, 0x1c01f000,
0x4d900000, 0x4dd00000, 0x4da40000, 0x4d140000,
- 0x4cd80000, 0x4d180000, 0x4803c856, 0x598c080b,
- 0x800409c0, 0x05000002, 0x05f5ff4a, 0x417a3000,
- 0x05f9fff8, 0x59900805, 0x800409c0, 0x0500000f,
- 0x91947c09, 0x83180400, 0x00105c9f, 0x50000000,
- 0x803c7c00, 0x811808ca, 0x82040c00, 0x00006139,
- 0x50040800, 0x48047803, 0x4a007801, 0x000001f4,
- 0x64287800, 0x64107802, 0x811a3000, 0x91180585,
- 0x05fe07ec, 0x5c023000, 0x5c01b000, 0x5c022800,
- 0x5c034800, 0x5c03a000, 0x5c032000, 0x1c01f000,
- 0x41781000, 0x42026000, 0x00110514, 0x59a8180d,
- 0x480a6402, 0x4a026202, 0x0000ffff, 0x80081000,
- 0x800c1840, 0x05000003, 0x91326430, 0x05fdf7f9,
- 0x1c01f000, 0x0005fc5a, 0x1c01f000, 0x5c036000,
- 0x4db00000, 0x49b3c857, 0x4933c857, 0x813261c0,
- 0x0500002d, 0x59300203, 0x90000580, 0x0500002a,
- 0x59300407, 0x4803c857, 0x90000d84, 0x0500000c,
- 0x90000d81, 0x0500000a, 0x90000d83, 0x05000004,
- 0x90000d86, 0x05020016, 0x0515ff58, 0x5930001e,
- 0x800001c0, 0x050e0f0c, 0x0501f011, 0x5930000a,
- 0x82000580, 0x0010ce8f, 0x0500000d, 0x5930082a,
- 0x4807c857, 0x4d300000, 0x40066000, 0x050dffaa,
- 0x5c026000, 0x05020006, 0x5804001e, 0x4803c857,
- 0x81300580, 0x05020002, 0x4978081e, 0x641e6407,
- 0x497a6009, 0x4a026004, 0x00004000, 0x59a8002e,
- 0xb0000c91, 0x05001002, 0x80000102, 0x48026006,
- 0x497a6205, 0x1c01f000, 0x0501f803, 0x41318800,
- 0x1c01f000, 0x91640490, 0x05021007, 0x42000000,
- 0x0010b2c9, 0x0519fb44, 0x4967c857, 0x80026580,
- 0x1c01f000, 0x8166c9c0, 0x05000018, 0x41626000,
- 0x41580000, 0x59300a03, 0x90040d80, 0x05000007,
- 0x91326430, 0x81300c80, 0x05fc17fb, 0x42026000,
- 0x00110514, 0x05fdf7f8, 0x4933c857, 0x8166c840,
- 0x91300c30, 0x80040480, 0x05021005, 0x4006c000,
- 0x64226203, 0x813261c0, 0x1c01f000, 0x4202c000,
- 0x00110514, 0x05fdf7fb, 0x42000000, 0x0010b2c9,
- 0x0519fb25, 0x4933c856, 0x417a6000, 0x05fdf7f6,
- 0x0005fc78, 0x1c01f000, 0x4933c857, 0x91380593,
+ 0x4cd80000, 0x4d180000, 0x4803c856, 0x417a3000,
+ 0x05f9fed8, 0x59900805, 0x800409c0, 0x05000012,
+ 0x91947c09, 0x83180400, 0x00107661, 0x50000000,
+ 0x803c7c00, 0x583c0003, 0x811808ca, 0x82040c00,
+ 0x00006139, 0x50040800, 0x80040580, 0x05000006,
+ 0x42000000, 0x0010e4b8, 0x051dfc4e, 0x90000541,
+ 0x0501f004, 0x811a3000, 0x91180585, 0x05fe07e9,
+ 0x5c023000, 0x5c01b000, 0x5c022800, 0x5c034800,
+ 0x5c03a000, 0x5c032000, 0x1c01f000, 0x4d900000,
+ 0x4dd00000, 0x4da40000, 0x4d140000, 0x4cd80000,
+ 0x4d180000, 0x4803c856, 0x598c080b, 0x800409c0,
+ 0x05000002, 0x05f1fc0e, 0x417a3000, 0x05f9fead,
+ 0x59900805, 0x800409c0, 0x0500000f, 0x91947c09,
+ 0x83180400, 0x00107661, 0x50000000, 0x803c7c00,
+ 0x811808ca, 0x82040c00, 0x00006139, 0x50040800,
+ 0x48047803, 0x4a007801, 0x000001f4, 0x64287800,
+ 0x64107802, 0x811a3000, 0x91180585, 0x05fe07ec,
+ 0x5c023000, 0x5c01b000, 0x5c022800, 0x5c034800,
+ 0x5c03a000, 0x5c032000, 0x1c01f000, 0x41781000,
+ 0x42026000, 0x00111b00, 0x59a8183b, 0x480a6402,
+ 0x4a026202, 0x0000ffff, 0x80081000, 0x800c1840,
+ 0x05000003, 0x91326430, 0x05fdf7f9, 0x1c01f000,
+ 0x5c036000, 0x4db00000, 0x49b3c857, 0x4933c857,
+ 0x813261c0, 0x0500002d, 0x59300203, 0x90000580,
+ 0x0500002a, 0x59300407, 0x4803c857, 0x90000d84,
+ 0x0500000c, 0x90000d81, 0x0500000a, 0x90000d83,
+ 0x05000004, 0x90000d86, 0x05020016, 0x0519ff00,
+ 0x5930001e, 0x800001c0, 0x05120a1c, 0x0501f011,
+ 0x5930000a, 0x82000580, 0x00110210, 0x0500000d,
+ 0x5930082a, 0x4807c857, 0x4d300000, 0x40066000,
+ 0x0511fab7, 0x5c026000, 0x05020006, 0x5804001e,
+ 0x4803c857, 0x81300580, 0x05020002, 0x4978081e,
+ 0x641e6407, 0x497a6009, 0x4a026004, 0x00004000,
+ 0x59a8005c, 0xb0000c91, 0x05001002, 0x80000102,
+ 0x48026006, 0x497a6205, 0x1c01f000, 0x91640490,
+ 0x05021007, 0x42000000, 0x0010e442, 0x051dfbd5,
+ 0x4967c857, 0x80026580, 0x1c01f000, 0x8166c9c0,
+ 0x05000018, 0x41626000, 0x41580000, 0x59300a03,
+ 0x90040d80, 0x05000007, 0x91326430, 0x81300c80,
+ 0x05fc17fb, 0x42026000, 0x00111b00, 0x05fdf7f8,
+ 0x4933c857, 0x8166c840, 0x91300c30, 0x80040480,
+ 0x05021005, 0x4006c000, 0x64226203, 0x813261c0,
+ 0x1c01f000, 0x4202c000, 0x00111b00, 0x05fdf7fb,
+ 0x42000000, 0x0010e442, 0x051dfbb6, 0x4933c856,
+ 0x417a6000, 0x05fdf7f6, 0x4933c857, 0x91380593,
0x05020008, 0x59300004, 0x8c00053e, 0x05000004,
- 0x05f9fa13, 0x05f9f967, 0x05f9f9fd, 0x1c01f000,
- 0x4933c857, 0x598800b7, 0x80000000, 0x480310b7,
+ 0x05f9f8e3, 0x05f9f838, 0x05f9f8d2, 0x1c01f000,
+ 0x4933c857, 0x598800bc, 0x80000000, 0x480310bc,
0x1c01f000, 0x4933c857, 0x59300203, 0x90003491,
- 0x05ca1ab7, 0x4d2c0000, 0x0c01f803, 0x5c025800,
- 0x1c01f000, 0x00106f4e, 0x001074aa, 0x001075e0,
- 0x00106f4e, 0x0010762d, 0x001070dc, 0x00106f4e,
- 0x00106f4e, 0x0010743d, 0x00106f4e, 0x00106f4e,
- 0x00106f4e, 0x00106f4e, 0x00106f4e, 0x0010867e,
- 0x00106f4e, 0x00106f4e, 0x05c9faa1, 0x4933c857,
- 0x59300203, 0x90003491, 0x05ca1a9d, 0x0c01f001,
- 0x00106f65, 0x00107f96, 0x00106f65, 0x00106f65,
- 0x00106f65, 0x00106f65, 0x00106f65, 0x00106f65,
- 0x00107f36, 0x00107fb5, 0x00108036, 0x00107fb5,
- 0x00108036, 0x00106f65, 0x001086a4, 0x00106f65,
- 0x00106f65, 0x05c9fa8a, 0x05c9fa89, 0x4933c857,
+ 0x05ba199e, 0x4d2c0000, 0x0c01f803, 0x5c025800,
+ 0x1c01f000, 0x00109452, 0x00109966, 0x00109af1,
+ 0x00109452, 0x00109b40, 0x001095ab, 0x00109452,
+ 0x00109452, 0x001098f9, 0x00109452, 0x00109452,
+ 0x00109452, 0x00109452, 0x00109452, 0x0010ae4b,
+ 0x00109452, 0x00109452, 0x05b9f988, 0x4933c857,
+ 0x59300203, 0x90003491, 0x05ba1984, 0x0c01f001,
+ 0x00109469, 0x0010a653, 0x00109469, 0x00109469,
+ 0x00109469, 0x00109469, 0x00109469, 0x00109469,
+ 0x0010a5f3, 0x0010a672, 0x0010a6f3, 0x0010a672,
+ 0x0010a6f3, 0x00109469, 0x0010ae71, 0x00109469,
+ 0x00109469, 0x05b9f971, 0x05b9f970, 0x4933c857,
0x4d300000, 0x4d1c0000, 0x59300203, 0x9000058f,
- 0x05ca0a83, 0x91380593, 0x05020025, 0x59300c03,
+ 0x05ba096a, 0x91380593, 0x05020025, 0x59300c03,
0xb0040586, 0x05000015, 0xb0040584, 0x0502000a,
- 0x4d300000, 0x5932602a, 0x050dfa26, 0x5c026000,
+ 0x4d300000, 0x5932602a, 0x050dfce8, 0x5c026000,
0x0500001c, 0x591c0416, 0x8400054a, 0x48023c16,
0x0501f010, 0x59300019, 0x82000500, 0xff000000,
0x82000580, 0xc2000000, 0x05020012, 0x5930001e,
- 0x05fdfe43, 0x0501f00f, 0x59300416, 0x84000504,
- 0x48026416, 0x5930141d, 0x050dfa09, 0x05000009,
+ 0x05fdfd56, 0x0501f00f, 0x59300416, 0x84000504,
+ 0x48026416, 0x5930141d, 0x050dfccb, 0x05000009,
0x411e6000, 0x5930001c, 0x80000540, 0x05000005,
- 0x497a601c, 0x0801f800, 0x0501f002, 0x05f9f901,
- 0x5c023800, 0x5c026000, 0x0005f45a, 0x4933c857,
+ 0x497a601c, 0x0801f800, 0x0501f002, 0x05f5ffd2,
+ 0x5c023800, 0x5c026000, 0x0005f7dc, 0x4933c857,
0x4d2c0000, 0x59325809, 0x59300203, 0x90003491,
- 0x05ca1a53, 0x0c01f803, 0x5c025800, 0x1c01f000,
- 0x00106fb1, 0x00106fb1, 0x00106fb1, 0x00106fc6,
- 0x00107015, 0x00106fb1, 0x00106fb1, 0x00106fb1,
- 0x00106fb2, 0x00106fb1, 0x00106fb1, 0x00106fb1,
- 0x00106fb1, 0x00106fb1, 0x00106fb1, 0x00106fb1,
- 0x00106fff, 0x05c9fa3e, 0x4933c857, 0xb1380580,
- 0x05ca0a3b, 0x4a026008, 0x00082000, 0x640e6203,
- 0x493a6403, 0x64065c09, 0x592c000e, 0x48026013,
- 0x497a6015, 0x592c0209, 0x800000c2, 0x800010c4,
- 0x80081400, 0x480a6006, 0x0001f980, 0x42000800,
- 0x80000060, 0x0005f320, 0x4933c857, 0xb1380490,
- 0x05ca1a27, 0xb1380489, 0x05c81a25, 0x0c01f001,
- 0x00106fd4, 0x00106fe1, 0x00106fd3, 0x00106fd3,
- 0x00106fd3, 0x00106fd3, 0x00106fe7, 0x05c9fa1c,
- 0x050df8fd, 0x05000003, 0x64426203, 0x0501f002,
- 0x64126203, 0x640a5c09, 0x592c0208, 0x48025c0a,
- 0x592c020a, 0x48025a08, 0x592c000d, 0x4802580e,
- 0x1c01f000, 0x05f9f896, 0x0509fd11, 0x05000003,
- 0x641a5a07, 0x0001fb5b, 0x0005f45a, 0x05f9f890,
- 0x4d3c0000, 0x417a7800, 0x0201f800, 0x0010ee7a,
- 0x5c027800, 0x60503000, 0x41782800, 0x60082000,
- 0x4d400000, 0x4d440000, 0x59368c03, 0x60a68000,
- 0x050dfe06, 0x5c028800, 0x5c028000, 0x42000000,
- 0x0010b2d6, 0x0519fa4c, 0x0509fcf9, 0x0004045a,
- 0x64a65a07, 0x0001fb5b, 0x0005f45a, 0x4933c857,
- 0xb13805a1, 0x05000006, 0xb13805a0, 0x05020007,
- 0x59cc0002, 0x8c000526, 0x05000005, 0xb1380589,
- 0x05000004, 0x05c9f9e6, 0x05fdff26, 0x1c01f000,
- 0x59a80030, 0x48026205, 0x64126203, 0x5930001c,
- 0x80000540, 0x05000003, 0x497a601c, 0x0801f800,
- 0x1c01f000, 0x4933c857, 0xb1380588, 0x05000003,
- 0xb1380593, 0x05ca09d6, 0x592c0207, 0x90000587,
- 0x05000008, 0x59300013, 0x80000540, 0x05000005,
- 0x592c080d, 0x80040480, 0x4802580d, 0x64565a07,
- 0x592c0207, 0x80000540, 0x05020002, 0x64025a07,
- 0x0001fb5b, 0x0005f45a, 0x4933c857, 0x4d2c0000,
- 0x4c500000, 0x4c540000, 0x4c580000, 0x4c5c0000,
- 0x4c600000, 0x4c640000, 0x4c100000, 0x05c9fd49,
- 0x05c809bb, 0x497a5a07, 0x59a8008c, 0x82000500,
- 0x0000f000, 0x48025c08, 0x59a80877, 0x90040c18,
- 0x48065a08, 0x412cb800, 0x4d2c0000, 0x41cca000,
- 0x6004c000, 0x60b0c800, 0x900404ad, 0x05021004,
- 0x912cac0a, 0x0509f8ae, 0x0501f023, 0x40043000,
- 0x60b00800, 0x912cac0a, 0x0509f8a9, 0x901834ac,
- 0x4c180000, 0x05c9fd2f, 0x5c003000, 0x05000012,
- 0x8060c000, 0x4a025805, 0x00000110, 0x492cb801,
- 0x90180cbd, 0x05021005, 0x40180800, 0x912cac06,
- 0x0509f89b, 0x0501f010, 0x9064cc3c, 0x901834bc,
- 0x60f00800, 0x412cb800, 0x912cac06, 0x0509f894,
- 0x05fdf7ec, 0x5c025800, 0x592c0207, 0x8400055e,
- 0x48025a07, 0x592c0408, 0x80640540, 0x48025c08,
- 0x0501f002, 0x5c025800, 0x5c002000, 0x813669c0,
- 0x05000003, 0x59343403, 0x0501f002, 0x61fc31ff,
- 0x49325809, 0x481a5c07, 0xb0100594, 0x0502001a,
- 0x4a025809, 0xffffffff, 0x491e5814, 0x41781000,
- 0x831c0580, 0xffffffff, 0x0500000e, 0x591c0009,
- 0x80000d40, 0x0500000b, 0x58040205, 0x82000500,
- 0x000000ff, 0x90000592, 0x05000005, 0xb00005a0,
- 0x05000003, 0x90000588, 0x05020002, 0x58041006,
- 0x480a5806, 0x592c0408, 0x81200540, 0x48025c08,
- 0x0501f002, 0x49225c06, 0x846001c0, 0x80100540,
- 0x48025805, 0x0519faff, 0x05020010, 0x592c0001,
- 0x497a5801, 0x4c000000, 0x0001fb5b, 0x5c025800,
- 0x812e59c0, 0x05fe07f8, 0x5c00c800, 0x5c00c000,
- 0x5c00b800, 0x5c00b000, 0x5c00a800, 0x5c00a000,
- 0x5c025800, 0x1c01f000, 0x0515ff52, 0x05fdf7f7,
- 0x4803c856, 0x4c5c0000, 0x4d2c0000, 0x4c500000,
- 0x4c540000, 0x4c580000, 0x412cb800, 0x592c040c,
- 0x8c000516, 0x05000003, 0x41cca000, 0x0501f002,
- 0x91cca406, 0x4008b000, 0x41781000, 0xb058048c,
- 0x05001003, 0x6130b000, 0x40001000, 0x4c080000,
- 0x4d2c0000, 0x05c9fcc3, 0x0500001f, 0x5c001800,
- 0x492c1801, 0x485a5800, 0x9058b403, 0x8058b104,
- 0x912cac02, 0x0519fa8a, 0x585c040c, 0x8c000500,
- 0x0500000b, 0x912c1402, 0x8c000516, 0x05000002,
- 0x90081406, 0x64041000, 0x80081000, 0x46001000,
- 0x00000900, 0x84000500, 0x4800bc0c, 0x5c001000,
- 0x800811c0, 0x05fe07e0, 0x90000541, 0x5c00b000,
- 0x5c00a800, 0x5c00a000, 0x5c025800, 0x5c00b800,
- 0x1c01f000, 0x5c025800, 0x5c001000, 0x05fdf7f8,
- 0x4933c857, 0x91380d95, 0x05020008, 0x0509fff2,
- 0x05000005, 0x5930082a, 0x58040416, 0x8400051a,
- 0x48000c16, 0x0005f45a, 0x91380d96, 0x05ca0908,
- 0x0005f45a, 0x4933c857, 0x4d2c0000, 0x4c500000,
- 0x4c540000, 0x4c580000, 0x59325809, 0x91cca406,
- 0x59cc1806, 0x820c0580, 0x01000000, 0x05020003,
- 0x6008b000, 0x0501f00a, 0x6020b000, 0x912cac06,
- 0x0519fa18, 0x8c0c0500, 0x05000007, 0x6020b000,
- 0x592e5801, 0x812e59c0, 0x05c808f1, 0x912cac06,
- 0x0519fa10, 0x0501f812, 0x5c00b000, 0x5c00a800,
- 0x5c00a000, 0x5c025800, 0x1c01f000, 0x4933c857,
- 0x4c500000, 0x4c540000, 0x4c580000, 0x91cca406,
- 0x5930a809, 0x9054ac06, 0x601cb000, 0x0519fa01,
- 0x5c00b000, 0x5c00a800, 0x5c00a000, 0x4933c857,
- 0x0509fbdf, 0x0004045a, 0x4d2c0000, 0x050dfa67,
- 0x05020008, 0x41780800, 0x4d400000, 0x60028000,
- 0x050df8a1, 0x5c028000, 0x5c025800, 0x0005f45a,
- 0x5931d82d, 0x58ef400a, 0x58ee580c, 0x4a025a05,
- 0x00000103, 0x58ec0008, 0x0801f800, 0x5c025800,
- 0x0005f45a, 0x4933c857, 0x59cc1806, 0x820c0580,
- 0x02000000, 0x0502001e, 0x4a026802, 0x00fffffd,
- 0x5934000a, 0x84000504, 0x4802680a, 0x60000000,
- 0x4c0c0000, 0x0501f823, 0x5c001800, 0x59300c29,
- 0x900405a1, 0x05020006, 0x05d5fe46, 0x61fc19ff,
- 0x60102000, 0x60483000, 0x05e1fd01, 0x59300809,
- 0x800409c0, 0x0004045a, 0x4a000a05, 0x00000103,
- 0x480c0806, 0x5931d82d, 0x58ef400a, 0x58ee580c,
- 0x58ec0008, 0x0801f800, 0x0005f45a, 0x42000000,
- 0x0010b2df, 0x0519f8f8, 0x60180000, 0x4c0c0000,
+ 0x05ba193a, 0x0c01f803, 0x5c025800, 0x1c01f000,
+ 0x001094b5, 0x001094b5, 0x001094b5, 0x001094ca,
+ 0x00109518, 0x001094b5, 0x001094b5, 0x001094b5,
+ 0x001094b6, 0x001094b5, 0x001094b5, 0x001094b5,
+ 0x001094b5, 0x001094b5, 0x001094b5, 0x001094b5,
+ 0x00109502, 0x05b9f925, 0x4933c857, 0xb1380580,
+ 0x05ba0922, 0x4a026008, 0x00082000, 0x640e6203,
+ 0x493a6403, 0x64065c0c, 0x592c0011, 0x48026013,
+ 0x497a6015, 0x592c020c, 0x800000c2, 0x800010c4,
+ 0x80081400, 0x480a6006, 0x0001f98d, 0x42000800,
+ 0x80000060, 0x0005f69d, 0x4933c857, 0xb1380490,
+ 0x05ba190e, 0xb1380489, 0x05b8190c, 0x0c01f001,
+ 0x001094d8, 0x001094e5, 0x001094d7, 0x001094d7,
+ 0x001094d7, 0x001094d7, 0x001094eb, 0x05b9f903,
+ 0x050dfbc6, 0x05000003, 0x64426203, 0x0501f002,
+ 0x64126203, 0x640a5c0c, 0x592c020b, 0x48025c0d,
+ 0x592c020d, 0x48025a0b, 0x592c0010, 0x48025811,
+ 0x1c01f000, 0x05f5ff67, 0x0509ffe3, 0x05000003,
+ 0x641a5a0a, 0x0001fb82, 0x0005f7dc, 0x05f5ff61,
+ 0x4d3c0000, 0x417a7800, 0x05c5fe3e, 0x5c027800,
+ 0x60503000, 0x41782800, 0x60082000, 0x4d400000,
+ 0x4d440000, 0x59368c03, 0x60a68000, 0x0511f91c,
+ 0x5c028800, 0x5c028000, 0x42000000, 0x0010e454,
+ 0x051dfae0, 0x0509ffcc, 0x000407dc, 0x64a65a0a,
+ 0x0001fb82, 0x0005f7dc, 0x4933c857, 0xb13805a1,
+ 0x05000006, 0xb13805a0, 0x05020007, 0x59cc0002,
+ 0x8c000526, 0x05000005, 0xb1380589, 0x05000004,
+ 0x05b9f8ce, 0x05fdff27, 0x1c01f000, 0x59a8005e,
+ 0x48026205, 0x64126203, 0x5930001c, 0x80000540,
+ 0x05000003, 0x497a601c, 0x0801f800, 0x1c01f000,
+ 0x4933c857, 0xb1380588, 0x05000003, 0xb1380593,
+ 0x05ba08be, 0x592c020a, 0x90000587, 0x05000008,
+ 0x59300013, 0x80000540, 0x05000005, 0x592c0810,
+ 0x80040480, 0x48025810, 0x64565a0a, 0x592c020a,
+ 0x80000540, 0x05020002, 0x64025a0a, 0x0001fb82,
+ 0x0005f7dc, 0x4933c857, 0x4d2c0000, 0x4c500000,
+ 0x4c540000, 0x4c580000, 0x4c5c0000, 0x4c600000,
+ 0x4c640000, 0x4c100000, 0x05b9fc4c, 0x05b808a3,
+ 0x497a5a0a, 0x59a800d0, 0x82000500, 0x0000f000,
+ 0x48025c0b, 0x59a808b6, 0x90040c18, 0x48065a0b,
+ 0x412cb800, 0x4d2c0000, 0x41cca000, 0x6004c000,
+ 0x60b0c800, 0x900404ad, 0x05021004, 0x912cac0d,
+ 0x0509fa72, 0x0501f023, 0x40043000, 0x60b00800,
+ 0x912cac0d, 0x0509fa6d, 0x901834ac, 0x4c180000,
+ 0x05b9fc32, 0x5c003000, 0x05000012, 0x8060c000,
+ 0x4a025808, 0x00000110, 0x492cb801, 0x90180cbd,
+ 0x05021005, 0x40180800, 0x912cac09, 0x0509fa5f,
+ 0x0501f010, 0x9064cc3c, 0x901834bc, 0x60f00800,
+ 0x412cb800, 0x912cac09, 0x0509fa58, 0x05fdf7ec,
+ 0x5c025800, 0x592c020a, 0x8400055e, 0x48025a0a,
+ 0x592c040b, 0x80640540, 0x48025c0b, 0x0501f002,
+ 0x5c025800, 0x5c002000, 0x813669c0, 0x05000003,
+ 0x59343403, 0x0501f002, 0x61fc31ff, 0x4932580c,
+ 0x481a5c0a, 0xb0100594, 0x0502001a, 0x4a02580c,
+ 0xffffffff, 0x491e5817, 0x41781000, 0x831c0580,
+ 0xffffffff, 0x0500000e, 0x591c0009, 0x80000d40,
+ 0x0500000b, 0x58040208, 0x82000500, 0x000000ff,
+ 0x90000592, 0x05000005, 0xb00005a0, 0x05000003,
+ 0x90000588, 0x05020002, 0x58041009, 0x480a5809,
+ 0x592c040b, 0x81200540, 0x48025c0b, 0x0501f002,
+ 0x49225c09, 0x846001c0, 0x80100540, 0x48025808,
+ 0x051dfb9c, 0x05020014, 0x592c0001, 0x497a5801,
+ 0x4c000000, 0x42000000, 0x0010de60, 0x50000000,
+ 0x48025802, 0x0001fb82, 0x5c025800, 0x812e59c0,
+ 0x05fe07f4, 0x5c00c800, 0x5c00c000, 0x5c00b800,
+ 0x5c00b000, 0x5c00a800, 0x5c00a000, 0x5c025800,
+ 0x1c01f000, 0x0519ff30, 0x05fdf7f7, 0x4933c857,
+ 0x91380d95, 0x05020008, 0x050dfaf0, 0x05000005,
+ 0x5930082a, 0x58040416, 0x8400051a, 0x48000c16,
+ 0x0005f7dc, 0x91380d96, 0x05ba0824, 0x0005f7dc,
+ 0x4933c857, 0x4d2c0000, 0x4c500000, 0x4c540000,
+ 0x4c580000, 0x59325809, 0x91cca406, 0x59cc1806,
+ 0x820c0580, 0x01000000, 0x05020003, 0x6008b000,
+ 0x0501f00a, 0x6020b000, 0x912cac09, 0x051dfae0,
+ 0x8c0c0500, 0x05000007, 0x6020b000, 0x592e5801,
+ 0x812e59c0, 0x05b8080d, 0x912cac09, 0x051dfad8,
+ 0x0501f812, 0x5c00b000, 0x5c00a800, 0x5c00a000,
+ 0x5c025800, 0x1c01f000, 0x4933c857, 0x4c500000,
+ 0x4c540000, 0x4c580000, 0x91cca406, 0x5930a809,
+ 0x9054ac09, 0x601cb000, 0x051dfac9, 0x5c00b000,
+ 0x5c00a800, 0x5c00a000, 0x4933c857, 0x0509fee6,
+ 0x000407dc, 0x4d2c0000, 0x050dfd67, 0x05020008,
+ 0x41780800, 0x4d400000, 0x60028000, 0x050dfb94,
+ 0x5c028000, 0x5c025800, 0x0005f7dc, 0x5931d82d,
+ 0x58ef400b, 0x58ee580d, 0x4a025a08, 0x00000103,
+ 0x58ec0009, 0x0801f800, 0x5c025800, 0x0005f7dc,
+ 0x4933c857, 0x59cc1806, 0x820c0580, 0x02000000,
+ 0x0502001f, 0x4a026802, 0x00fffffd, 0x5934000a,
+ 0x84000504, 0x4802680a, 0x60000000, 0x4c0c0000,
+ 0x0501f824, 0x5c001800, 0x000407dc, 0x59300c29,
+ 0x900405a1, 0x05020006, 0x05c9f80d, 0x61fc19ff,
+ 0x60102000, 0x60483000, 0x05d9fa3a, 0x59300809,
+ 0x800409c0, 0x000407dc, 0x4a000a08, 0x00000103,
+ 0x480c0809, 0x5931d82d, 0x58ef400b, 0x58ee580d,
+ 0x58ec0009, 0x0801f800, 0x0005f7dc, 0x42000000,
+ 0x0010e45d, 0x051df9bf, 0x60180000, 0x4c0c0000,
0x0501f808, 0x5c001800, 0x05fc07ed, 0x4c0c0000,
- 0x0501f81e, 0x5c001800, 0x05fe07e9, 0x1c01f000,
+ 0x0501f823, 0x5c001800, 0x05fe07e9, 0x1c01f000,
0x4933c857, 0x4d400000, 0x4d240000, 0x4d200000,
0x5932481d, 0x40028000, 0x59300429, 0xb0000d91,
- 0x05000003, 0x90000da1, 0x0502000b, 0x05d5fe1d,
- 0x0519fa1d, 0x05020004, 0x59300429, 0x900005a1,
- 0x05d40b6b, 0x60040000, 0x05e9ff9d, 0x80000580,
- 0x0501f002, 0x90000541, 0x5c024000, 0x5c024800,
- 0x5c028000, 0x1c01f000, 0x4933c857, 0x4d2c0000,
- 0x59325809, 0x812e59c0, 0x0502000b, 0x497a6006,
- 0x497a6205, 0x0509ff58, 0x05000002, 0x497a6417,
- 0x4d380000, 0x608a7000, 0x0501fb28, 0x5c027000,
- 0x80000580, 0x5c025800, 0x1c01f000, 0x4933c857,
- 0x4d2c0000, 0x4c500000, 0x4c540000, 0x4c580000,
- 0x59325809, 0x592e5801, 0x912cac06, 0x91cca406,
- 0x59a8088c, 0x82040d00, 0x000003ff, 0x9004148f,
- 0x05001011, 0x603cb000, 0x0519f97e, 0x592e5801,
- 0x912cac06, 0x90080c8f, 0x05001008, 0x603cb000,
- 0x0519f978, 0x592e5801, 0x912cac06, 0x9004148f,
- 0x05001005, 0x603c1000, 0x4008b000, 0x0519f971,
- 0x0501f003, 0x4004b000, 0x0519f96e, 0x5931d82d,
- 0x58ef400a, 0x58ee580c, 0x4a025a05, 0x00000103,
- 0x592e5801, 0x58ec0008, 0x0801f800, 0x0005fc5a,
- 0x5c00b000, 0x5c00a800, 0x5c00a000, 0x5c025800,
- 0x1c01f000, 0x4933c857, 0x4d2c0000, 0x4c500000,
- 0x4c540000, 0x4c580000, 0x59cc0006, 0x82000d80,
- 0x01000000, 0x05000021, 0x59cc0007, 0x9000b1c0,
- 0x8258b500, 0x000000ff, 0x8058b104, 0x9058b402,
- 0x90580c87, 0x05001002, 0x6018b000, 0x91cca406,
- 0x59301009, 0x800811c0, 0x05c80829, 0x9008ac06,
- 0x0519f948, 0x82000d00, 0xff000000, 0x800409c0,
- 0x05000014, 0x8200b500, 0x000000ff, 0x05000011,
- 0x8058b104, 0x90580c8e, 0x05001002, 0x6034b000,
- 0x58081001, 0x800811c0, 0x05c80819, 0x9008ac06,
- 0x0519f938, 0x0501f007, 0x59301009, 0x800811c0,
- 0x05c80813, 0x48001006, 0x59cc0007, 0x48001007,
- 0x05fdff33, 0x5c00b000, 0x5c00a800, 0x5c00a000,
+ 0x05000003, 0x90000da1, 0x05020010, 0x05c5ffe4,
+ 0x60001802, 0x051dfae0, 0x05020004, 0x59300429,
+ 0x900005a1, 0x05c40d3a, 0x59300429, 0xb0000591,
+ 0x05020002, 0x41781800, 0x60040000, 0x05e5f811,
+ 0x80000580, 0x0501f002, 0x90000541, 0x5c024000,
+ 0x5c024800, 0x5c028000, 0x1c01f000, 0x4933c857,
+ 0x4d2c0000, 0x59325809, 0x812e59c0, 0x0502000b,
+ 0x497a6006, 0x497a6205, 0x050dfa50, 0x05000002,
+ 0x497a6417, 0x4d380000, 0x608a7000, 0x0501fb0f,
+ 0x5c027000, 0x80000580, 0x5c025800, 0x1c01f000,
+ 0x4933c857, 0x4d2c0000, 0x4c500000, 0x4c540000,
+ 0x4c580000, 0x59325809, 0x592e5801, 0x912cac09,
+ 0x91cca406, 0x59a808d0, 0x82040d00, 0x000003ff,
+ 0x9004148f, 0x05001011, 0x603cb000, 0x051dfa40,
+ 0x592e5801, 0x912cac09, 0x90080c8f, 0x05001008,
+ 0x603cb000, 0x051dfa3a, 0x592e5801, 0x912cac09,
+ 0x9004148f, 0x05001005, 0x603c1000, 0x4008b000,
+ 0x051dfa33, 0x0501f003, 0x4004b000, 0x051dfa30,
+ 0x5931d82d, 0x58ef400b, 0x58ee580d, 0x4a025a08,
+ 0x00000103, 0x592e5801, 0x58ec0009, 0x0801f800,
+ 0x0005ffdc, 0x5c00b000, 0x5c00a800, 0x5c00a000,
0x5c025800, 0x1c01f000, 0x4933c857, 0x4d2c0000,
- 0x4c500000, 0x4c540000, 0x4c580000, 0x6008b000,
- 0x59cc0806, 0x82040580, 0x01000000, 0x05000004,
- 0x8204b500, 0x0000ffff, 0x8058b104, 0x91cca406,
- 0x59300009, 0x9000ac06, 0x0519f91a, 0x05fdff1c,
- 0x5c00b000, 0x5c00a800, 0x5c00a000, 0x5c025800,
- 0x1c01f000, 0x4933c857, 0x4803c857, 0x4807c857,
- 0x480bc857, 0x480fc857, 0x4813c857, 0x481bc857,
- 0x492fc857, 0x4d2c0000, 0x4c000000, 0x05c9fb62,
- 0x5c000000, 0x0500000d, 0x48025803, 0x481a5801,
- 0x48125808, 0x48065805, 0x480a5806, 0x480e5807,
- 0x5c001000, 0x4c080000, 0x480a5809, 0x412c1000,
- 0x0001f81c, 0x90000541, 0x5c025800, 0x1c01f000,
- 0x4933c857, 0x4937c857, 0x4d1c0000, 0x05f5fa0c,
- 0x05020020, 0x59cc0001, 0x82000500, 0x00ffffff,
- 0x59341002, 0x82081500, 0x00ffffff, 0x80080580,
- 0x05020018, 0x497a6205, 0x60d40800, 0x0509ff24,
- 0x0502000f, 0x591c001e, 0x800001c0, 0x0500000c,
- 0x497a381e, 0x591c0416, 0x8c000502, 0x05c40fc0,
- 0x84000502, 0x48023c16, 0x591c1407, 0x90080583,
- 0x05000005, 0x90080586, 0x05000005, 0x05fdfc90,
- 0x0501f004, 0x0501f805, 0x0501f002, 0x0501f8c4,
- 0x5c023800, 0x1c01f000, 0x4d2c0000, 0x591e5809,
- 0x4933c857, 0x491fc857, 0x493bc857, 0x492fc857,
- 0x91380595, 0x050000b8, 0x91380596, 0x050200b4,
- 0x4d300000, 0x411e6000, 0x59cc0207, 0x4803c857,
- 0x82000d00, 0x0000ff00, 0x82040580, 0x00001700,
- 0x05000004, 0x82040580, 0x00000300, 0x05020065,
- 0x0509fe7d, 0x05000006, 0x591c0403, 0xb0000590,
- 0x05020003, 0x05fdfc6e, 0x0501f09d, 0x591c0203,
- 0x4803c857, 0x9000058d, 0x05000041, 0x812e59c0,
- 0x0500009a, 0x591c0202, 0x4803c857, 0x82000580,
- 0x0000ffff, 0x05020082, 0x0509fe6b, 0x05000004,
- 0x591c0203, 0x90000d8e, 0x0502007d, 0x592c020b,
- 0x4803c857, 0x90000503, 0x90000582, 0x05020007,
- 0x592c0810, 0x591c0013, 0x4803c857, 0x4807c857,
- 0x80040580, 0x05020072, 0x591c0416, 0x4803c857,
- 0x8c000500, 0x0502006e, 0x42000000, 0x0010b2bc,
- 0x0515ffc9, 0x41780800, 0x591c1006, 0x60280000,
- 0x05f5fc7e, 0x592c0407, 0x4803c857, 0x800001c0,
- 0x0500000b, 0x80080c80, 0x05001003, 0x05c60f68,
- 0x80001040, 0x480a5c07, 0x800811c0, 0x05020004,
- 0x0201f800, 0x0010f70c, 0x0501f069, 0x0509fb48,
- 0x591c0819, 0x591c001a, 0x48065809, 0x4802580a,
- 0x592e4411, 0x81224110, 0x59300008, 0x8c000500,
- 0x05ce093f, 0x497a3809, 0x0001faa7, 0x0502004c,
- 0x411e6000, 0x05fdfc2a, 0x0501f059, 0x05fdfc5e,
- 0x05000015, 0x591c0006, 0x48026006, 0x4926601d,
- 0x4936600a, 0x0509fe1d, 0x640e6407, 0x492e6009,
- 0x591c0819, 0x591c101a, 0x48066019, 0x480a601a,
- 0x4d380000, 0x591e7403, 0x4d300000, 0x411e6000,
- 0x05fdfc17, 0x5c026000, 0x0005fc78, 0x5c027000,
- 0x0501f043, 0x59a80030, 0x48023a05, 0x0501f040,
- 0x59cc0407, 0x9000058b, 0x05020026, 0x59340a00,
- 0x84040d0e, 0x48066a00, 0x592c0a05, 0x82040d00,
- 0x000000ff, 0x90040d94, 0x05000002, 0x640e6229,
- 0x59300008, 0x8c000500, 0x05ce0911, 0x4d400000,
- 0x497a5c0a, 0x600e8000, 0x592c0a09, 0x05e9fe1f,
- 0x0519f893, 0x05020006, 0x0001fb5b, 0x59300a29,
- 0x90040d83, 0x05080b06, 0x497a6009, 0x5c028000,
- 0x4a026403, 0x00000085, 0x64266203, 0x640a6407,
- 0x42000800, 0x80004040, 0x050dfba7, 0x0005fb2e,
- 0x4203e000, 0xb0800000, 0x6023f800, 0x0501f018,
- 0x59cc0207, 0x82000580, 0x00002a00, 0x05020004,
- 0x59a80030, 0x48023a05, 0x0501f011, 0x812e59c0,
- 0x05c40f07, 0x0001ff6c, 0x497a6027, 0x4a025a05,
- 0x00000103, 0x591c0008, 0x8c000500, 0x05ce08e8,
- 0x591c0402, 0x48025c07, 0x640e5a07, 0x497a5c0a,
- 0x0001fb5b, 0x05fdfbd2, 0x05e9fa1f, 0x5c026000,
- 0x0005fc5a, 0x0501f002, 0x5c026000, 0x5c025800,
- 0x1c01f000, 0x0501f813, 0x05fdf7fd, 0x4933c857,
- 0x91380595, 0x05020004, 0x59a80030, 0x48023a05,
- 0x0501f009, 0x91380596, 0x05020009, 0x4d300000,
- 0x411e6000, 0x0515fb29, 0x0005faec, 0x0005fc5a,
- 0x5c026000, 0x497a381e, 0x0005fc5a, 0x1c01f000,
- 0x4c5c0000, 0x591c0416, 0x84000540, 0x48023c16,
- 0x59ccb80b, 0x4933c857, 0x491fc857, 0x492fc857,
- 0x4803c857, 0x485fc857, 0x0509fdb7, 0x05020007,
- 0x8c5c053c, 0x05000005, 0x59a80030, 0x48023a05,
- 0x497a381e, 0x0501f064, 0x4d300000, 0x411e6000,
- 0x0505fe21, 0x5c026000, 0x591c0407, 0x90000580,
- 0x0500005d, 0x591c0403, 0xb0000590, 0x0502000a,
- 0x4d300000, 0x411e6000, 0x64066203, 0x42000800,
- 0x80000043, 0x0005fb2e, 0x5c026000, 0x497a381e,
- 0x0501f051, 0x591c0203, 0x9000058d, 0x0500001c,
- 0x812e59c0, 0x05c40eb6, 0x592c020b, 0x4803c857,
- 0x8c000500, 0x0502001b, 0x8c000502, 0x05000014,
- 0x591c0416, 0x8c00051c, 0x05020007, 0x591c0013,
- 0x4803c857, 0x800001c0, 0x0500000d, 0x591c0014,
- 0x48023818, 0x4a023814, 0x0fffffff, 0x592c0209,
- 0x8400051e, 0x48025a09, 0x42000000, 0x0010b2be,
- 0x0515fef5, 0x64063a16, 0x0501f016, 0x42000000,
- 0x0010b2bf, 0x0515fef0, 0x641e3a16, 0x0501f011,
- 0x8c5c053a, 0x05fe07fa, 0x59cc000a, 0x592c1810,
- 0x4803c857, 0x480fc857, 0x800c0580, 0x05fc07f4,
- 0x59cc000a, 0x4803c857, 0x48023818, 0x48023817,
- 0x42000000, 0x0010b2bd, 0x0515fedf, 0x64163a16,
- 0x0509fd69, 0x0500001a, 0x591c0416, 0x8c00051a,
- 0x05000017, 0x4803c857, 0x8c00051e, 0x05000016,
- 0x4130b800, 0x05fdfb8c, 0x0500000f, 0x4926601d,
- 0x64066203, 0x647a6403, 0x585c041b, 0x4802641b,
- 0x585c021b, 0x4802621b, 0x591e680a, 0x4936600a,
- 0x0509fd46, 0x64066407, 0x42000800, 0x80000040,
- 0x0005fb2e, 0x405e6000, 0x0501f003, 0x5c00b800,
- 0x0509f3fa, 0x5c00b800, 0x0005f45a, 0x4933c857,
- 0x4d1c0000, 0x05f5f89e, 0x0502003f, 0x59cc0001,
- 0x59341002, 0x80080580, 0x82000500, 0x00ffffff,
- 0x05020037, 0x5930141b, 0x0509fe01, 0x05c40e5c,
- 0x591c1407, 0x90080587, 0x05000031, 0x90080582,
- 0x0500002f, 0x90080580, 0x0500002d, 0x591c0202,
- 0x82000d80, 0x0000ffff, 0x05000004, 0x59301a1b,
- 0x800c0580, 0x05020026, 0x91380595, 0x05000022,
- 0x4d300000, 0x4d2c0000, 0x411e6000, 0x59325809,
- 0x0509f94b, 0x05c40e46, 0x592c0205, 0x82000500,
- 0x000000ff, 0x90000594, 0x05000002, 0x640e6229,
- 0x497a5c0a, 0x600e8000, 0x592c0a09, 0x05e9fd37,
- 0x0515ffab, 0x05020006, 0x0001fb5b, 0x59300a29,
- 0x90040d83, 0x05080a1e, 0x497a6009, 0x5c025800,
- 0x4a026403, 0x00000085, 0x64266203, 0x640a6407,
- 0x42000800, 0x80004040, 0x0005fb2e, 0x5c026000,
- 0x0501f003, 0x59a80030, 0x48023a05, 0x497a381e,
- 0x0005fc5a, 0x5c023800, 0x1c01f000, 0x4933c857,
- 0x4c580000, 0x4d2c0000, 0x59325809, 0x59342200,
- 0x82102500, 0xffffdffd, 0x48126a00, 0x91383595,
- 0x05000009, 0x0509f91e, 0x05000048, 0x0509ffa7,
- 0x05020003, 0x6008b000, 0x0509ff89, 0x0501f9dd,
- 0x0501f05b, 0x91cc1408, 0x6008b000, 0x91341c06,
- 0x0501fe41, 0x0502000f, 0x91cc140a, 0x6008b000,
- 0x91341c08, 0x0501fe3c, 0x0502000a, 0x05d5f8ec,
- 0x59342200, 0x59cc1007, 0x800811c0, 0x05000003,
- 0x480a6801, 0x84102542, 0x48126a00, 0x0501f04a,
- 0x4d3c0000, 0x417a7800, 0x0201f800, 0x0010ee7a,
- 0x5c027800, 0x42000000, 0x0010b2d6, 0x0515fe4e,
- 0x59340200, 0x84000558, 0x48026a00, 0x4d300000,
- 0x05fdfb01, 0x05c40df2, 0x4926601d, 0x4936600a,
- 0x497a6009, 0x64066407, 0x64066403, 0x600c3000,
- 0x0515fc9a, 0x05d5fb7b, 0x59240400, 0x8c00050a,
- 0x0502000b, 0x41782800, 0x60043000, 0x4d400000,
- 0x60a68000, 0x0511ff1f, 0x5c028000, 0x64126407,
- 0x641e6203, 0x6406642c, 0x0501f005, 0x64066203,
- 0x602c0800, 0x05e5fda9, 0x05f5fbce, 0x5c026000,
- 0x0509f8db, 0x0500001e, 0x0509ff64, 0x0502001e,
- 0x0501f99c, 0x0501f01a, 0x42000000, 0x0010b2d9,
- 0x0515fe25, 0x4d3c0000, 0x417a7800, 0x0201f800,
- 0x0010ee7a, 0x42000000, 0x0010b2d6, 0x0515fe1e,
+ 0x4c500000, 0x4c540000, 0x4c580000, 0x59cc0006,
+ 0x82000d80, 0x01000000, 0x05000021, 0x59cc0007,
+ 0x9000b1c0, 0x8258b500, 0x000000ff, 0x8058b104,
+ 0x9058b402, 0x90580c87, 0x05001002, 0x6018b000,
+ 0x91cca406, 0x59301009, 0x800811c0, 0x05b40f3f,
+ 0x9008ac09, 0x051dfa0a, 0x82000d00, 0xff000000,
+ 0x800409c0, 0x05000014, 0x8200b500, 0x000000ff,
+ 0x05000011, 0x8058b104, 0x90580c8e, 0x05001002,
+ 0x6034b000, 0x58081001, 0x800811c0, 0x05b40f2f,
+ 0x9008ac09, 0x051df9fa, 0x0501f007, 0x59301009,
+ 0x800811c0, 0x05b40f29, 0x48001009, 0x59cc0007,
+ 0x4800100a, 0x05fdff2d, 0x5c00b000, 0x5c00a800,
+ 0x5c00a000, 0x5c025800, 0x1c01f000, 0x4933c857,
+ 0x4d2c0000, 0x4c500000, 0x4c540000, 0x4c580000,
+ 0x6008b000, 0x59cc0806, 0x82040580, 0x01000000,
+ 0x05000004, 0x8204b500, 0x0000ffff, 0x8058b104,
+ 0x91cca406, 0x59300009, 0x9000ac09, 0x051df9dc,
+ 0x05fdff16, 0x5c00b000, 0x5c00a800, 0x5c00a000,
+ 0x5c025800, 0x1c01f000, 0x4933c857, 0x4937c857,
+ 0x4d1c0000, 0x05edfedd, 0x05020020, 0x59cc0001,
+ 0x82000500, 0x00ffffff, 0x59341002, 0x82081500,
+ 0x00ffffff, 0x80080580, 0x05020018, 0x497a6205,
+ 0x60d40800, 0x050dfa35, 0x0502000f, 0x591c001e,
+ 0x800001c0, 0x0500000c, 0x497a381e, 0x591c0416,
+ 0x8c000502, 0x05b40ef1, 0x84000502, 0x48023c16,
+ 0x591c1407, 0x90080583, 0x05000005, 0x90080586,
+ 0x05000005, 0x05fdfcdf, 0x0501f004, 0x0501f805,
+ 0x0501f002, 0x0501f8c4, 0x5c023800, 0x1c01f000,
+ 0x4d2c0000, 0x591e5809, 0x4933c857, 0x491fc857,
+ 0x493bc857, 0x492fc857, 0x91380595, 0x050000b8,
+ 0x91380596, 0x050200b4, 0x4d300000, 0x411e6000,
+ 0x59cc0207, 0x4803c857, 0x82000d00, 0x0000ff00,
+ 0x82040580, 0x00001700, 0x05000004, 0x82040580,
+ 0x00000300, 0x05020064, 0x050df990, 0x05000006,
+ 0x591c0403, 0xb0000590, 0x05020003, 0x05fdfcbd,
+ 0x0501f09d, 0x591c0203, 0x4803c857, 0x9000058d,
+ 0x05000040, 0x812e59c0, 0x0500009a, 0x591c0202,
+ 0x4803c857, 0x82000580, 0x0000ffff, 0x05020081,
+ 0x050df97e, 0x05000004, 0x591c0203, 0x90000d8e,
+ 0x0502007c, 0x592c020e, 0x4803c857, 0x90000503,
+ 0x90000582, 0x05020007, 0x592c0813, 0x591c0013,
+ 0x4803c857, 0x4807c857, 0x80040580, 0x05020071,
+ 0x591c0416, 0x4803c857, 0x8c000500, 0x0502006d,
+ 0x42000000, 0x0010e435, 0x051df8a6, 0x41780800,
+ 0x591c1006, 0x60280000, 0x05f5f854, 0x592c040a,
+ 0x4803c857, 0x800001c0, 0x0500000a, 0x80080c80,
+ 0x05001003, 0x05b60e99, 0x80001040, 0x480a5c0a,
+ 0x800811c0, 0x05020003, 0x0509fa7b, 0x0501f06a,
+ 0x0509fe60, 0x591c0819, 0x591c001a, 0x4806580c,
+ 0x4802580d, 0x592e4414, 0x81224110, 0x59300008,
+ 0x8c000500, 0x05be08f8, 0x497a3809, 0x0001fab8,
+ 0x0502004c, 0x411e6000, 0x05fdfc7a, 0x0501f05a,
+ 0x05fdfcab, 0x05000015, 0x591c0006, 0x48026006,
+ 0x4926601d, 0x4936600a, 0x050df931, 0x640e6407,
+ 0x492e6009, 0x591c0819, 0x591c101a, 0x48066019,
+ 0x480a601a, 0x4d380000, 0x591e7403, 0x4d300000,
+ 0x411e6000, 0x05fdfc67, 0x5c026000, 0x0009f800,
+ 0x5c027000, 0x0501f044, 0x59a8005e, 0x48023a05,
+ 0x0501f041, 0x59cc0407, 0x9000058b, 0x05020026,
+ 0x59340a00, 0x84040d0e, 0x48066a00, 0x592c0a08,
+ 0x82040d00, 0x000000ff, 0x90040d94, 0x05000002,
+ 0x640e6229, 0x59300008, 0x8c000500, 0x05be08ca,
+ 0x4d400000, 0x497a5c0d, 0x600e8000, 0x592c0a0c,
+ 0x05e1fea7, 0x051df96c, 0x05020006, 0x0001fb82,
+ 0x59300a29, 0x90040d83, 0x05080e1e, 0x497a6009,
+ 0x5c028000, 0x4a026403, 0x00000085, 0x64266203,
+ 0x640a6407, 0x42000800, 0x80004040, 0x050dff08,
+ 0x0005feab, 0x4203e000, 0xb0800000, 0x6023f800,
+ 0x0501f019, 0x59cc0207, 0x82000580, 0x00002a00,
+ 0x05020004, 0x59a8005e, 0x48023a05, 0x0501f012,
+ 0x812e59c0, 0x05b40e39, 0x0005f9f3, 0x497a6027,
+ 0x05e9fc64, 0x4a025a08, 0x00000103, 0x591c0008,
+ 0x8c000500, 0x05be08a0, 0x591c0402, 0x48025c0a,
+ 0x640e5a0a, 0x497a5c0d, 0x0001fb82, 0x05fdfc21,
+ 0x05e1fa17, 0x5c026000, 0x0005ffdc, 0x0501f002,
+ 0x5c026000, 0x5c025800, 0x1c01f000, 0x0501f813,
+ 0x05fdf7fd, 0x4933c857, 0x91380595, 0x05020004,
+ 0x59a8005e, 0x48023a05, 0x0501f009, 0x91380596,
+ 0x05020009, 0x4d300000, 0x411e6000, 0x0519fb04,
+ 0x0005fe4e, 0x0005ffdc, 0x5c026000, 0x497a381e,
+ 0x0005ffdc, 0x1c01f000, 0x4c5c0000, 0x591c0416,
+ 0x84000540, 0x48023c16, 0x59ccb80b, 0x4933c857,
+ 0x491fc857, 0x492fc857, 0x4803c857, 0x485fc857,
+ 0x050df8ca, 0x05020007, 0x8c5c053c, 0x05000005,
+ 0x59a8005e, 0x48023a05, 0x497a381e, 0x0501f068,
+ 0x4d300000, 0x411e6000, 0x0509f82e, 0x5c026000,
+ 0x591c0407, 0x90000580, 0x05000061, 0x591c0403,
+ 0xb0000590, 0x0502000a, 0x4d300000, 0x411e6000,
+ 0x64066203, 0x42000800, 0x80000043, 0x0005feab,
+ 0x5c026000, 0x497a381e, 0x0501f055, 0x591c0203,
+ 0x9000058d, 0x0500001c, 0x812e59c0, 0x05b40de7,
+ 0x592c020e, 0x4803c857, 0x8c000500, 0x0502001b,
+ 0x8c000502, 0x05000014, 0x591c0416, 0x8c00051c,
+ 0x05020007, 0x591c0013, 0x4803c857, 0x800001c0,
+ 0x0500000d, 0x591c0014, 0x48023818, 0x4a023814,
+ 0x0fffffff, 0x592c020c, 0x8400051e, 0x48025a0c,
+ 0x42000000, 0x0010e437, 0x0519ffd2, 0x64063a16,
+ 0x0501f01a, 0x42000000, 0x0010e438, 0x0519ffcd,
+ 0x641e3a16, 0x0501f015, 0x59300017, 0x591c0817,
+ 0x80040580, 0x0502002e, 0x8c5c053a, 0x05fe07f6,
+ 0x59cc000a, 0x592c1813, 0x4803c857, 0x480fc857,
+ 0x800c0580, 0x05fc07f0, 0x59cc000a, 0x4803c857,
+ 0x48023818, 0x48023817, 0x42000000, 0x0010e436,
+ 0x0519ffb8, 0x64163a16, 0x050df878, 0x0500001a,
+ 0x591c0416, 0x8c00051a, 0x05000017, 0x4803c857,
+ 0x8c00051e, 0x05000016, 0x4130b800, 0x05fdfbd4,
+ 0x0500000f, 0x4926601d, 0x64066203, 0x647a6403,
+ 0x585c041b, 0x4802641b, 0x585c021b, 0x4802621b,
+ 0x591e680a, 0x4936600a, 0x050df855, 0x64066407,
+ 0x42000800, 0x80000040, 0x0005feab, 0x405e6000,
+ 0x0501f003, 0x5c00b800, 0x0509f70e, 0x5c00b800,
+ 0x0005f7dc, 0x4933c857, 0x4d1c0000, 0x05edfd6b,
+ 0x0502003f, 0x59cc0001, 0x59341002, 0x80080580,
+ 0x82000500, 0x00ffffff, 0x05020037, 0x5930141b,
+ 0x050df909, 0x05b40d89, 0x591c1407, 0x90080587,
+ 0x05000031, 0x90080582, 0x0500002f, 0x90080580,
+ 0x0500002d, 0x591c0202, 0x82000d80, 0x0000ffff,
+ 0x05000004, 0x59301a1b, 0x800c0580, 0x05020026,
+ 0x91380595, 0x05000022, 0x4d300000, 0x4d2c0000,
+ 0x411e6000, 0x59325809, 0x0509fc63, 0x05b40d73,
+ 0x592c0208, 0x82000500, 0x000000ff, 0x90000594,
+ 0x05000002, 0x640e6229, 0x497a5c0d, 0x600e8000,
+ 0x592c0a0c, 0x05e1fdba, 0x051df87f, 0x05020006,
+ 0x0001fb82, 0x59300a29, 0x90040d83, 0x05080d31,
+ 0x497a6009, 0x5c025800, 0x4a026403, 0x00000085,
+ 0x64266203, 0x640a6407, 0x42000800, 0x80004040,
+ 0x0005feab, 0x5c026000, 0x0501f003, 0x59a8005e,
+ 0x48023a05, 0x497a381e, 0x0005ffdc, 0x5c023800,
+ 0x1c01f000, 0x4933c857, 0x4c580000, 0x4d2c0000,
+ 0x59325809, 0x59342200, 0x82102500, 0xffffdffd,
+ 0x48126a00, 0x91383595, 0x05000009, 0x0509fc36,
+ 0x05000047, 0x050dfab8, 0x05020003, 0x6008b000,
+ 0x050dfa9f, 0x0501fa2a, 0x0501f059, 0x91cc1408,
+ 0x6008b000, 0x91341c06, 0x0501ffa9, 0x0502000f,
+ 0x91cc140a, 0x6008b000, 0x91341c08, 0x0501ffa4,
+ 0x0502000a, 0x05c5face, 0x59342200, 0x59cc1007,
+ 0x800811c0, 0x05000003, 0x480a6801, 0x84102542,
+ 0x48126a00, 0x0501f048, 0x4d3c0000, 0x417a7800,
+ 0x05c5fa7c, 0x5c027800, 0x42000000, 0x0010e454,
+ 0x0519ff28, 0x59340200, 0x84000558, 0x48026a00,
+ 0x4d300000, 0x05fdfb4a, 0x05b40d20, 0x4926601d,
+ 0x4936600a, 0x497a6009, 0x64066407, 0x64066403,
+ 0x600c3000, 0x0519fcc2, 0x05c5fd55, 0x59240400,
+ 0x8c00050a, 0x0502000b, 0x41782800, 0x60043000,
+ 0x4d400000, 0x60a68000, 0x0515fed5, 0x5c028000,
+ 0x64126407, 0x641e6203, 0x6406642c, 0x0501f005,
+ 0x64066203, 0x602c0800, 0x05ddfc1b, 0x05f1ff9e,
+ 0x5c026000, 0x0509fbf4, 0x0500001d, 0x050dfa76,
+ 0x0502001d, 0x0501f9ea, 0x0501f019, 0x42000000,
+ 0x0010e457, 0x0519feff, 0x4d3c0000, 0x417a7800,
+ 0x05c5fa4c, 0x42000000, 0x0010e454, 0x0519fef9,
0x59340200, 0x84000558, 0x48026a00, 0x600c3000,
0x41782800, 0x60142000, 0x4d400000, 0x4d440000,
- 0x59368c03, 0x60a68000, 0x050df9c8, 0x5c028800,
- 0x5c028000, 0x5c027800, 0x05d5f89d, 0x0005fc5a,
- 0x0501f002, 0x05fdfcda, 0x5c025800, 0x5c00b000,
- 0x1c01f000, 0x4933c857, 0x41380000, 0xb1383498,
- 0x05c61daf, 0x0c01f001, 0x001074a6, 0x001074a3,
- 0x001074a6, 0x001074a6, 0x001074a6, 0x001074a6,
- 0x001074a2, 0x001074a2, 0x001074a2, 0x001074a2,
- 0x001074a2, 0x001074a2, 0x001074a2, 0x001074a2,
- 0x001074a2, 0x001074a2, 0x001074a2, 0x001074a2,
- 0x001074a2, 0x001074a2, 0x001074a2, 0x001074a2,
- 0x001074a2, 0x001074a2, 0x001074a2, 0x001074a2,
- 0x001074a2, 0x001074a2, 0x001074a2, 0x001074a2,
- 0x001074a2, 0x001074a6, 0x001074a2, 0x001074a6,
- 0x001074a6, 0x001074a2, 0x001074a2, 0x001074a2,
- 0x001074a2, 0x001074a2, 0x001074a6, 0x001074a2,
- 0x001074a2, 0x001074a2, 0x001074a2, 0x001074a2,
- 0x001074a2, 0x001074a2, 0x001074a2, 0x001074a2,
- 0x001074a6, 0x001074a6, 0x001074a2, 0x001074a2,
- 0x001074a2, 0x001074a2, 0x001074a2, 0x001074a2,
- 0x001074a2, 0x001074a2, 0x001074a2, 0x001074a6,
- 0x001074a2, 0x001074a2, 0x001074a2, 0x001074a2,
- 0x001074a2, 0x001074a6, 0x001074a6, 0x001074a2,
- 0x001074a2, 0x001074a2, 0x001074a2, 0x001074a6,
- 0x001074a2, 0x001074a2, 0x001074a2, 0x001074a6,
- 0x001074a2, 0x001074a2, 0x001074a2, 0x001074a6,
- 0x001074a2, 0x001074a2, 0x001074a2, 0x001074a6,
- 0x001074a2, 0x001074a6, 0x001074a2, 0x001074a2,
- 0x001074a2, 0x001074a2, 0x001074a2, 0x001074a2,
- 0x001074a2, 0x001074a2, 0x05c5fd4d, 0x64066203,
- 0x493a6403, 0x05f5f33f, 0x4933c857, 0x64066203,
- 0x493a6403, 0x05f5f33b, 0x59300403, 0xb0003498,
- 0x05c61d43, 0x91383593, 0x05000083, 0x913835a7,
- 0x05020043, 0x4933c857, 0x05f5fbe2, 0x0515fcc0,
- 0x0509f936, 0x0500000c, 0x0509f948, 0x0500003a,
- 0x59300403, 0x90000da2, 0x05020034, 0x60140004,
- 0x05fdfc9c, 0x05000031, 0x05fdfcb4, 0x05000031,
- 0x0501f031, 0x600c0004, 0x05fdfc96, 0x0500002b,
- 0x05d5f80f, 0x601c0800, 0x05e5fcf8, 0x0501f8f1,
+ 0x59368c03, 0x60a68000, 0x050dfd25, 0x5c028800,
+ 0x5c028000, 0x5c027800, 0x05c5fa81, 0x0005ffdc,
+ 0x0501f002, 0x05fdfced, 0x5c025800, 0x5c00b000,
+ 0x1c01f000, 0x4933c857, 0x41380000, 0xb13834a0,
+ 0x05b61cde, 0x0c01f001, 0x00109962, 0x0010995f,
+ 0x00109962, 0x00109962, 0x00109962, 0x00109962,
+ 0x0010995e, 0x0010995e, 0x0010995e, 0x0010995e,
+ 0x0010995e, 0x0010995e, 0x0010995e, 0x0010995e,
+ 0x0010995e, 0x0010995e, 0x0010995e, 0x0010995e,
+ 0x0010995e, 0x0010995e, 0x0010995e, 0x0010995e,
+ 0x0010995e, 0x0010995e, 0x0010995e, 0x0010995e,
+ 0x0010995e, 0x0010995e, 0x0010995e, 0x0010995e,
+ 0x0010995e, 0x00109962, 0x0010995e, 0x00109962,
+ 0x00109962, 0x0010995e, 0x0010995e, 0x0010995e,
+ 0x0010995e, 0x0010995e, 0x00109962, 0x0010995e,
+ 0x0010995e, 0x0010995e, 0x0010995e, 0x0010995e,
+ 0x0010995e, 0x0010995e, 0x0010995e, 0x0010995e,
+ 0x00109962, 0x00109962, 0x0010995e, 0x0010995e,
+ 0x0010995e, 0x0010995e, 0x0010995e, 0x0010995e,
+ 0x0010995e, 0x0010995e, 0x0010995e, 0x00109962,
+ 0x0010995e, 0x0010995e, 0x0010995e, 0x0010995e,
+ 0x0010995e, 0x00109962, 0x00109962, 0x0010995e,
+ 0x0010995e, 0x0010995e, 0x0010995e, 0x00109962,
+ 0x0010995e, 0x0010995e, 0x0010995e, 0x00109962,
+ 0x0010995e, 0x0010995e, 0x0010995e, 0x00109962,
+ 0x0010995e, 0x0010995e, 0x0010995e, 0x00109962,
+ 0x0010995e, 0x00109962, 0x00109962, 0x0010995e,
+ 0x0010995e, 0x0010995e, 0x0010995e, 0x0010995e,
+ 0x0010995e, 0x0010995e, 0x05b5fc7c, 0x64066203,
+ 0x493a6403, 0x05f1f710, 0x4933c857, 0x64066203,
+ 0x493a6403, 0x05f1f70c, 0x59300403, 0xb00034a0,
+ 0x05b61c72, 0x91383593, 0x05000087, 0x913835a7,
+ 0x05020042, 0x4933c857, 0x05f5fafb, 0x0519fce7,
+ 0x0509fc4b, 0x0500000c, 0x0509fc58, 0x05000039,
+ 0x59300403, 0x90000da2, 0x05020033, 0x60140004,
+ 0x05fdfcb0, 0x05000030, 0x05fdfccd, 0x05000030,
+ 0x0501f030, 0x600c0004, 0x05fdfcaa, 0x0500002a,
+ 0x05c5f9f3, 0x601c0800, 0x05ddfb6b, 0x0501f940,
0x4d440000, 0x59368c03, 0x83440580, 0x000007fe,
- 0x05020007, 0x59a8121b, 0x84081540, 0x05e9fe63,
- 0x05020002, 0x8408154a, 0x480b521b, 0x60a68000,
- 0x05f5fb25, 0x4d3c0000, 0x417a7800, 0x0201f800,
- 0x0010ee7a, 0x5c027800, 0x916c0583, 0x0500000b,
- 0x5932680a, 0x59340008, 0x800001c0, 0x05020007,
- 0x59368c03, 0x4933c857, 0x4937c857, 0x4947c857,
- 0x05e5fd95, 0x0501f008, 0x42000000, 0x0010b2d6,
- 0x0515fd5d, 0x60543000, 0x41782800, 0x600c2000,
- 0x050df90e, 0x5c028800, 0x0509fbc8, 0x0005f45a,
- 0x1c01f000, 0x0501f8c7, 0x05fdf7fc, 0x91380594,
- 0x0500000c, 0x4933c857, 0xb13805a1, 0x05000003,
- 0xb13805a0, 0x05fe07f7, 0x05f5fffd, 0x05fe0235,
- 0x59300203, 0x9000058e, 0x05080180, 0x05c5fcf0,
- 0x4933c857, 0x05f5fb93, 0x0515fc71, 0x60082800,
- 0x59300403, 0xb0000591, 0x050c027f, 0x4d3c0000,
- 0x417a7800, 0x0201f800, 0x0010ee7a, 0x5c027800,
+ 0x05020007, 0x59a81249, 0x84081540, 0x05e1ff23,
+ 0x05020002, 0x8408154a, 0x480b5249, 0x60a68000,
+ 0x05f5f8b5, 0x4d3c0000, 0x417a7800, 0x05c5f999,
+ 0x5c027800, 0x916c0583, 0x0500000b, 0x5932680a,
+ 0x59340008, 0x800001c0, 0x05020007, 0x59368c03,
+ 0x4933c857, 0x4937c857, 0x4947c857, 0x05ddfc0d,
+ 0x0501f008, 0x42000000, 0x0010e454, 0x0519fe39,
+ 0x60543000, 0x41782800, 0x600c2000, 0x050dfc6c,
+ 0x5c028800, 0x0509fedc, 0x0005f7dc, 0x1c01f000,
+ 0x0501f917, 0x05fdf7fc, 0x91380594, 0x0500000c,
+ 0x4933c857, 0xb13805a1, 0x05000003, 0xb13805a0,
+ 0x05fe07f7, 0x05f5ff04, 0x05fe027e, 0x59300203,
+ 0x9000058e, 0x05080492, 0x05b5fc20, 0x4933c857,
+ 0x05f5faad, 0x050dfee2, 0x05020005, 0x59300009,
+ 0x800001c0, 0x05020026, 0x05f1f6af, 0x0519fc93,
+ 0x60082800, 0x59300403, 0xb0000591, 0x050c0772,
+ 0x4d3c0000, 0x417a7800, 0x05c5f962, 0x5c027800,
0x60583000, 0x41782800, 0x4d400000, 0x4d440000,
- 0x59368c03, 0x60242000, 0x60a68000, 0x050df8e7,
- 0x5c028800, 0x5c028000, 0x42000000, 0x0010b2d6,
- 0x0515fd2d, 0x0509f8d1, 0x0502000b, 0x05d1ffb8,
- 0x0501f89c, 0x59340c03, 0x82040580, 0x000007fe,
- 0x05fe07ce, 0x59a80a1b, 0x84040d40, 0x4807521b,
- 0x05fdf7ca, 0x0509f8d9, 0x05020003, 0x0501f891,
- 0x05fdf7c6, 0x59300403, 0x90000db2, 0x05020003,
- 0x05d5fd72, 0x05fdf7c1, 0x90000da2, 0x05000889,
- 0x05fdf7be, 0x4933c857, 0x4803c857, 0x0c01f001,
- 0x00107595, 0x00107595, 0x00107595, 0x00107595,
- 0x00107595, 0x00107595, 0x00107594, 0x00107594,
- 0x00107594, 0x00107594, 0x00107594, 0x00107594,
- 0x00107594, 0x00107594, 0x00107594, 0x00107594,
- 0x00107594, 0x00107594, 0x00107594, 0x00107594,
- 0x00107594, 0x00107594, 0x00107594, 0x00107594,
- 0x00107594, 0x00107594, 0x00107594, 0x00107594,
- 0x00107594, 0x00107594, 0x0010759a, 0x001075b0,
- 0x00107594, 0x001075b0, 0x001075b0, 0x00107594,
- 0x00107594, 0x00107594, 0x00107594, 0x00107594,
- 0x001075b0, 0x001075b0, 0x00107594, 0x00107594,
- 0x00107594, 0x00107594, 0x00107594, 0x00107594,
- 0x00107594, 0x00107594, 0x001075a8, 0x001075b0,
- 0x00107594, 0x001075a3, 0x00107594, 0x00107594,
- 0x00107594, 0x001075a3, 0x00107594, 0x00107594,
- 0x00107594, 0x001075b0, 0x001075a6, 0x00107594,
- 0x00107594, 0x00107594, 0x00107594, 0x001075b0,
- 0x001075b0, 0x00107594, 0x00107594, 0x00107594,
- 0x00107594, 0x001075b0, 0x00107594, 0x00107594,
- 0x00107594, 0x001075b0, 0x00107594, 0x00107594,
- 0x00107594, 0x001075b0, 0x00107594, 0x00107594,
- 0x00107594, 0x001075b0, 0x00107594, 0x001075b0,
- 0x00107594, 0x00107594, 0x00107594, 0x00107594,
- 0x00107594, 0x00107594, 0x00107594, 0x00107594,
- 0x05c5fc5b, 0x640a6203, 0x0509fb3b, 0x05000002,
- 0x643a6203, 0x0509f0c8, 0x64166203, 0x59a80030,
- 0x48026205, 0x0509fb34, 0x05000002, 0x643a6203,
- 0x59a8002e, 0x48026006, 0x1c01f000, 0x5930082a,
- 0x49780a05, 0x0501f00b, 0x0509fb10, 0x0005f45a,
- 0x05d5fcf6, 0x05f5fb96, 0x05000003, 0x05f5fae9,
- 0x0005f45a, 0x05f5fae7, 0x0005fc5a, 0x05f5f37c,
- 0x4933c857, 0x640a6203, 0x0509fb1f, 0x05000002,
- 0x643a6203, 0x59a8002e, 0x48026006, 0x1c01f000,
- 0x4933c857, 0x0505ff3a, 0x05000025, 0x4d2c0000,
- 0x0509fdc2, 0x05020007, 0x4d400000, 0x60c68000,
- 0x60100800, 0x0509fbfc, 0x5c028000, 0x0501f01b,
- 0x59300c07, 0x90040590, 0x05000003, 0x90040591,
- 0x05020007, 0x64c65a07, 0x6412580e, 0x4a02580f,
- 0x000000ff, 0x0001fb5b, 0x0501f010, 0x592c0405,
- 0x8c00051e, 0x0500000d, 0x4a025a05, 0x00000103,
- 0x4a025806, 0x01000000, 0x4da00000, 0x4cec0000,
- 0x5931d82d, 0x58ef400a, 0x58ec0008, 0x0801f800,
- 0x5c01d800, 0x5c034000, 0x5c025800, 0x1c01f000,
- 0x4933c857, 0x83340580, 0x0010ce8f, 0x05020007,
- 0x91380d95, 0x05000003, 0x91380d96, 0x05fe0149,
- 0x0515fb8d, 0x0005f45a, 0x59340400, 0x82000500,
- 0x000000ff, 0x9000348c, 0x05c61c01, 0x59303403,
- 0xb0180d8d, 0x0508032f, 0x90180db3, 0x050802f3,
- 0x90180da8, 0x0508003f, 0x90180da9, 0x0508004a,
- 0xb0180d97, 0x050c0100, 0x90180d9f, 0x05fc030c,
- 0xb0180d95, 0x05fc02ec, 0x90180d80, 0x05fc05cc,
- 0x90180da2, 0x05fc0328, 0x90180db5, 0x05fc0415,
- 0x90180db9, 0x05fc0582, 0x90180dbd, 0x05fc037c,
- 0xb0180d84, 0x05fc03a8, 0xb0180d89, 0x05fc03db,
- 0xb0180d83, 0x05080438, 0xb0180d91, 0x05080492,
- 0x90180d84, 0x05020002, 0x60040000, 0x91380d95,
- 0x05000004, 0x91380d96, 0x05fe011a, 0x0501f1f0,
- 0x4c000000, 0x0515fb5c, 0x5c000000, 0x4d2c0000,
+ 0x59368c03, 0x60242000, 0x60a68000, 0x050dfc40,
+ 0x5c028800, 0x5c028000, 0x42000000, 0x0010e454,
+ 0x0519fe04, 0x0509fbe2, 0x0502000b, 0x05c5f998,
+ 0x0501f8e7, 0x59340c03, 0x82040580, 0x000007fe,
+ 0x05fe07c9, 0x59a80a49, 0x84040d40, 0x48075249,
+ 0x05fdf7c5, 0x0509fbe5, 0x05020003, 0x0501f8dc,
+ 0x05fdf7c1, 0x59300403, 0x90000db2, 0x05020003,
+ 0x05c9f84f, 0x05fdf7bc, 0x90000da2, 0x050008d4,
+ 0x05fdf7b9, 0x4933c857, 0x4803c857, 0x0c01f001,
+ 0x00109a55, 0x00109a55, 0x00109a55, 0x00109a55,
+ 0x00109a55, 0x00109a55, 0x00109a54, 0x00109a54,
+ 0x00109a54, 0x00109a54, 0x00109a54, 0x00109a54,
+ 0x00109a54, 0x00109a54, 0x00109a54, 0x00109a54,
+ 0x00109a54, 0x00109a54, 0x00109a54, 0x00109a54,
+ 0x00109a54, 0x00109a54, 0x00109a54, 0x00109a54,
+ 0x00109a54, 0x00109a54, 0x00109a54, 0x00109a54,
+ 0x00109a54, 0x00109a54, 0x00109a5a, 0x00109abb,
+ 0x00109a54, 0x00109abb, 0x00109abb, 0x00109a54,
+ 0x00109a54, 0x00109a54, 0x00109a54, 0x00109a54,
+ 0x00109abb, 0x00109abb, 0x00109a54, 0x00109a54,
+ 0x00109a54, 0x00109a54, 0x00109a54, 0x00109a54,
+ 0x00109a54, 0x00109a54, 0x00109a68, 0x00109abb,
+ 0x00109a54, 0x00109a63, 0x00109a54, 0x00109a54,
+ 0x00109a54, 0x00109a63, 0x00109a54, 0x00109a54,
+ 0x00109a54, 0x00109abb, 0x00109a66, 0x00109a54,
+ 0x00109a54, 0x00109a54, 0x00109a54, 0x00109abb,
+ 0x00109abb, 0x00109a54, 0x00109a54, 0x00109a54,
+ 0x00109a54, 0x00109abb, 0x00109a54, 0x00109a54,
+ 0x00109a54, 0x00109abb, 0x00109a54, 0x00109a54,
+ 0x00109a54, 0x00109abb, 0x00109a54, 0x00109a54,
+ 0x00109a54, 0x00109abb, 0x00109a54, 0x00109abb,
+ 0x00109a70, 0x00109a54, 0x00109a54, 0x00109a54,
+ 0x00109a54, 0x00109a54, 0x00109a76, 0x00109a54,
+ 0x05b5fb86, 0x640a6203, 0x0509fe48, 0x05000002,
+ 0x643a6203, 0x0509f3d5, 0x64166203, 0x59a8005e,
+ 0x48026205, 0x0509fe41, 0x05000002, 0x643a6203,
+ 0x59a8005c, 0x48026006, 0x1c01f000, 0x5930082a,
+ 0x49780a05, 0x0501f056, 0x0509fe1f, 0x0005f7dc,
+ 0x05c5ffd3, 0x05f5faaa, 0x05000003, 0x05f5f9fe,
+ 0x0005f7dc, 0x05f5f9fc, 0x0005ffdc, 0x05f5f295,
+ 0x4933c857, 0x640a6203, 0x0509fe2c, 0x05000002,
+ 0x643a6203, 0x1c01f000, 0x4933c857, 0x4d300000,
+ 0x4d2c0000, 0x59325809, 0x812e59c0, 0x0500002e,
+ 0x0509fa4d, 0x05b40b5d, 0x59a80ccd, 0x48065811,
+ 0x59a808cf, 0x48065810, 0x64025a0a, 0x592c1001,
+ 0x800811c0, 0x05b40b55, 0x4930100b, 0x492c100a,
+ 0x64001001, 0x4a001009, 0x00109a96, 0x4a001003,
+ 0x00110672, 0x4a001005, 0x00000200, 0x592c0015,
+ 0x48001007, 0x592c0016, 0x48001008, 0x5c025800,
+ 0x5c026000, 0x0001f021, 0x4d300000, 0x4d2c0000,
+ 0x5832600b, 0x813261c0, 0x05b40b40, 0x5832580a,
+ 0x812e59c0, 0x05b40b3d, 0x49786001, 0x58300002,
+ 0x82000580, 0x00000100, 0x05020014, 0x59a80ccd,
+ 0x48065811, 0x59a808cf, 0x48065810, 0x64025a0a,
+ 0x0001fb82, 0x59a81ccc, 0x840c1d46, 0x480f54cc,
+ 0x0509fdf2, 0x05000005, 0x05fdf922, 0x59a8005c,
+ 0x48026006, 0x0501f002, 0x0005ffdc, 0x5c025800,
+ 0x5c026000, 0x1c01f000, 0x4803c857, 0x4a006002,
+ 0x00000100, 0x600a8000, 0x05fdf7ee, 0x4933c857,
+ 0x640a6203, 0x0509fde1, 0x05000002, 0x643a6203,
+ 0x59a8005c, 0x48026006, 0x1c01f000, 0x4933c857,
+ 0x0509fa05, 0x0500002b, 0x4d2c0000, 0x050df886,
+ 0x05020007, 0x4d400000, 0x60c68000, 0x60100800,
+ 0x0509feb3, 0x5c028000, 0x0501f021, 0x050df888,
+ 0x05020005, 0x64c65a0a, 0x64125810, 0x0001fb82,
+ 0x0501f01b, 0x59300c07, 0x90040590, 0x05000003,
+ 0x90040591, 0x05020007, 0x64c65a0a, 0x64125811,
+ 0x4a025812, 0x000000ff, 0x0001fb82, 0x0501f010,
+ 0x592c0408, 0x8c00051e, 0x0500000d, 0x4a025a08,
+ 0x00000103, 0x4a025809, 0x01000000, 0x4da00000,
+ 0x4cec0000, 0x5931d82d, 0x58ef400b, 0x58ec0009,
+ 0x0801f800, 0x5c01d800, 0x5c034000, 0x5c025800,
+ 0x1c01f000, 0x4933c857, 0x83340580, 0x00110210,
+ 0x05020007, 0x91380d95, 0x05000003, 0x91380d96,
+ 0x05fe013c, 0x0519fb5f, 0x0005f7dc, 0x59340400,
+ 0x82000500, 0x000000ff, 0x9000348c, 0x05b61adb,
+ 0x59303403, 0xb0180d8d, 0x050805e9, 0x90180db3,
+ 0x050805af, 0x90180da8, 0x050802fb, 0x90180da9,
+ 0x05080306, 0xb0180d97, 0x050c0410, 0x90180d9f,
+ 0x05fc02ca, 0xb0180d95, 0x05fc02aa, 0x90180d80,
+ 0x05fc0579, 0x90180da2, 0x05fc02e6, 0x90180db5,
+ 0x05fc03be, 0x90180db9, 0x05fc052f, 0x90180dbd,
+ 0x05fc0340, 0xb0180d84, 0x05fc036c, 0xb0180d89,
+ 0x05fc039f, 0xb0180d98, 0x050c0496, 0xb0180d83,
+ 0x050806ed, 0xb0180d91, 0x05080747, 0x90180d84,
+ 0x05020002, 0x60040000, 0x91380d95, 0x05000004,
+ 0x91380d96, 0x05fe010b, 0x0501f1ec, 0x4c000000,
+ 0x0519fb2c, 0x5c000000, 0x4d2c0000, 0x4d3c0000,
+ 0x0c01f804, 0x5c027800, 0x5c025800, 0x1c01f000,
+ 0x00109b47, 0x00109b4b, 0x00109b47, 0x00109b9c,
+ 0x00109b47, 0x00109c9f, 0x00109d29, 0x00109b47,
+ 0x00109b47, 0x00109ced, 0x00109b47, 0x00109cf8,
+ 0x4933c857, 0x497a6008, 0x59300809, 0x58040000,
+ 0x4a000a08, 0x00000103, 0x0005f7dc, 0x4933c857,
+ 0x40000000, 0x40000000, 0x1c01f000, 0x4933c857,
+ 0x05ddfd61, 0x59a800b6, 0xb00005b4, 0x0502003d,
+ 0x0515fb00, 0x0502000e, 0x0501f83d, 0x0509f976,
+ 0x05000009, 0x0509fff8, 0x05020007, 0x41780800,
+ 0x4d400000, 0x60028000, 0x0509fe25, 0x5c028000,
+ 0x0501f002, 0x05c5f816, 0x0005f7dc, 0x0509f96a,
+ 0x05000005, 0x0509ffec, 0x05020003, 0x05fdff60,
+ 0x0005f7dc, 0x417a7800, 0x05c1ffc6, 0x42000000,
+ 0x0010e454, 0x0519fc73, 0x59340200, 0x84000558,
+ 0x48026a00, 0x600c3000, 0x0519fa15, 0x4d300000,
+ 0x05fdf893, 0x05b40a69, 0x4926601d, 0x4936600a,
+ 0x497a6009, 0x64066407, 0x64066403, 0x59240400,
+ 0x8c00050a, 0x0502000b, 0x64126407, 0x641e6203,
+ 0x6406642c, 0x60043000, 0x4d400000, 0x60a68000,
+ 0x41782800, 0x0515fc1e, 0x5c028000, 0x0501f005,
+ 0x602c0800, 0x05ddf968, 0x64066203, 0x05f1fcea,
+ 0x5c026000, 0x05fdff3a, 0x05c1ffe9, 0x0005f7dc,
+ 0x05fdff37, 0x60040000, 0x0501f0d5, 0x4933c857,
+ 0x59340200, 0x8c000500, 0x05000009, 0x4d3c0000,
+ 0x417a7800, 0x05ddf94e, 0x5c027800, 0x8d0c0520,
+ 0x05000003, 0x60180800, 0x05ddf953, 0x1c01f000,
+ 0x4933c857, 0x59a808b6, 0xb00405b4, 0x0500000e,
+ 0x4807c857, 0x82040580, 0x00000100, 0x050200ac,
+ 0x59cc0408, 0x4803c857, 0x8c000500, 0x050000a8,
+ 0x59341403, 0x82080580, 0x000007fe, 0x05000006,
+ 0x0501f0a3, 0x59341403, 0x82080580, 0x000007fe,
+ 0x0502001b, 0x59a80249, 0x8c000506, 0x0500000e,
+ 0x59cc0000, 0x82000500, 0x000000ff, 0x59240c08,
+ 0x80040580, 0x05000008, 0x05c1ffb9, 0x0005ffdc,
+ 0x42000000, 0x0010e440, 0x0519fc1e, 0x6006d800,
+ 0x05d9f52b, 0x0519fd54, 0x050e05eb, 0x59a80249,
+ 0x8c000506, 0x05020004, 0x83240580, 0x0010e512,
+ 0x050e04ea, 0x0501fa74, 0x0501f03b, 0x41780800,
+ 0x05ddfa0a, 0x59341403, 0x82080580, 0x000007fc,
+ 0x05020019, 0x4a026802, 0x00fffffc, 0x0509f8f6,
+ 0x0500000c, 0x0509ff78, 0x0502000a, 0x0501f8a3,
+ 0x41780800, 0x4d400000, 0x60028000, 0x0509fda4,
+ 0x5c028000, 0x60100800, 0x05ddf90f, 0x0005f7dc,
+ 0x60100800, 0x05ddf90c, 0x05c1ff91, 0x59300c29,
+ 0x900405a1, 0x050c069d, 0xb0040591, 0x000607dc,
+ 0x050df69a, 0x59a800d1, 0x8c000502, 0x0500000d,
+ 0x05e1fcc2, 0x60401000, 0x05020008, 0x59340002,
+ 0x82000500, 0x00ff0000, 0x82000580, 0x00ff0000,
+ 0x05000004, 0x60201000, 0x05e1f8b9, 0x05020058,
+ 0x0509f8d1, 0x05000059, 0x0509ff53, 0x05020005,
+ 0x592c0408, 0x8c00051c, 0x05fe07d5, 0x0501f87b,
+ 0x60140800, 0x05ddf8ec, 0x64066203, 0x640e6403,
+ 0x05f1f46d, 0x59cc0408, 0x8c000518, 0x05000017,
+ 0x0509fc51, 0x05e1fca5, 0x05000008, 0x59cc0408,
+ 0x8c000516, 0x05000005, 0x59300429, 0x900005a1,
+ 0x05fe07c3, 0x1c01f000, 0x59a80249, 0x8400054a,
+ 0x48035249, 0x48035449, 0x59a8003d, 0x497b8830,
+ 0x84000570, 0x48038832, 0x59300429, 0x900005a1,
+ 0x05fe07b7, 0x1c01f000, 0x59a80249, 0xb0000510,
+ 0xb0000590, 0x05000009, 0x61bc1001, 0x42024800,
+ 0x0010e512, 0x480a4805, 0x480b503d, 0x497b8830,
+ 0x84081570, 0x480b8832, 0x0509fc4c, 0x59a80249,
+ 0x84000548, 0x48035249, 0x48035449, 0x0515fb47,
+ 0x05fe07a3, 0x599c0019, 0x8c000510, 0x0502002f,
+ 0x59a80249, 0x8400054c, 0x48035249, 0x601c0800,
+ 0x05ddf8b5, 0x417a7800, 0x05ddf8a9, 0x61bc3801,
+ 0x61a00001, 0x05e9fc91, 0x05dc08d6, 0x05b6099b,
+ 0x4936600a, 0x05ddfc72, 0x05020002, 0x497a6416,
+ 0x599c0208, 0x48026c12, 0x59340200, 0x8400051a,
+ 0x48026a00, 0x600c0800, 0x05ddf8a3, 0x64066407,
+ 0x64066203, 0x640a6403, 0x05f1f423, 0x05fdfe74,
+ 0x60040000, 0x0501f012, 0x599c0017, 0x8c00050a,
+ 0x05fc07ac, 0x60100800, 0x05ddf897, 0x493750c2,
+ 0x59a80249, 0x8c000508, 0x05000008, 0x599c0018,
+ 0x8c00051c, 0x05000005, 0x61a00807, 0x42001000,
+ 0x0010582b, 0x05edfb87, 0x0005f7dc, 0x4933c857,
+ 0x80003540, 0x05000003, 0x601c0800, 0x05ddf886,
+ 0x801831c0, 0x0502000f, 0x59302009, 0x801021c0,
+ 0x05000004, 0x58100408, 0x8c00051e, 0x05020009,
+ 0x59341c03, 0x60102000, 0x60483000, 0x4d200000,
+ 0x59364013, 0x81224130, 0x05d5fbd2, 0x5c024000,
+ 0x05c1fefb, 0x0005f7dc, 0x4c5c0000, 0x4d2c0000,
+ 0x59325809, 0x05e5fb86, 0x5c025800, 0x59cc0008,
+ 0x48002805, 0x59cc0009, 0x48002806, 0x49782807,
+ 0x49782808, 0x49782809, 0x4978280a, 0x59cc0013,
+ 0x8c00053e, 0x05000009, 0x59cc0414, 0x900001c0,
+ 0x59ccbc15, 0x805c0540, 0x48002807, 0x59cc0416,
+ 0x900001c0, 0x48002808, 0x59cc0017, 0x8c00053e,
+ 0x05000009, 0x59cc0418, 0x900001c0, 0x59ccbc19,
+ 0x805c0540, 0x48002809, 0x59cc041a, 0x900001c0,
+ 0x4800280a, 0x5c00b800, 0x1c01f000, 0x4933c857,
+ 0x59a800b6, 0x90000594, 0x0502003a, 0x59a800d1,
+ 0x8c000502, 0x05000011, 0x05e1fc08, 0x60401000,
+ 0x05020008, 0x59340002, 0x82000500, 0x00ff0000,
+ 0x82000580, 0x00ff0000, 0x05000008, 0x60201000,
+ 0x05ddffff, 0x05000005, 0x59a800d1, 0x8400054c,
+ 0x480350d1, 0x0501f027, 0x916c0583, 0x0502000c,
+ 0x59300009, 0x80000540, 0x05020009, 0x59341c03,
+ 0x60182000, 0x604c3000, 0x4d200000, 0x59364013,
+ 0x81224130, 0x05d5fb87, 0x5c024000, 0x05ddf988,
+ 0x05fdfecb, 0x0501fab8, 0x05020016, 0x59340404,
+ 0x80000540, 0x05000013, 0x60180800, 0x05ddf822,
+ 0x0505fffd, 0x0500000d, 0x0509fe7f, 0x05020007,
+ 0x41780800, 0x4d400000, 0x60028000, 0x0509fcac,
+ 0x5c028000, 0x0005f7dc, 0x4a025a08, 0x00000103,
+ 0x4a025809, 0x02000000, 0x05c1fe99, 0x0005f7dc,
+ 0x05ddff94, 0x0505ffec, 0x05000005, 0x0509fe6e,
+ 0x05020003, 0x05fdfde2, 0x0005f7dc, 0x05fdfde0,
+ 0x0519f974, 0x80000580, 0x59a800d1, 0x8c00050c,
+ 0x05000004, 0x8400050c, 0x480350d1, 0x90000541,
+ 0x05fdf777, 0x4933c857, 0x59a800b6, 0x90000594,
+ 0x05020006, 0x602c0800, 0x05d9fffb, 0x64066203,
+ 0x64066403, 0x05f1f37c, 0x60040000, 0x05fdf76c,
+ 0x4933c857, 0x40003000, 0x59a800b6, 0x90000584,
+ 0x05020018, 0x9018358b, 0x05020015, 0x5930081d,
+ 0x58040200, 0x8c000500, 0x050c0432, 0x58040200,
+ 0x8c000508, 0x0500000c, 0x84000508, 0x48000a00,
+ 0x600c0800, 0x05d9ffe4, 0x5930080a, 0x49780806,
+ 0x4a026202, 0x0000ffff, 0x64066203, 0x65466403,
+ 0x05f1f361, 0x601c0800, 0x05d9ffdb, 0x0005f7dc,
+ 0x60040000, 0x05fdf74e, 0x4803c857, 0x4d2c0000,
0x4d3c0000, 0x0c01f804, 0x5c027800, 0x5c025800,
- 0x1c01f000, 0x00107634, 0x00107638, 0x00107634,
- 0x0010768a, 0x00107634, 0x00107790, 0x0010781a,
- 0x00107634, 0x00107634, 0x001077de, 0x00107634,
- 0x001077e9, 0x4933c857, 0x497a6008, 0x59300809,
- 0x58040000, 0x4a000a05, 0x00000103, 0x0005f45a,
- 0x4933c857, 0x40000000, 0x40000000, 0x1c01f000,
- 0x4933c857, 0x05e5fe5b, 0x59a80077, 0xb00005b4,
- 0x0502003e, 0x0511fc83, 0x0502000e, 0x0501f83e,
- 0x0505feb3, 0x05000009, 0x0509fd3c, 0x05020007,
- 0x41780800, 0x4d400000, 0x60028000, 0x0509fb76,
- 0x5c028000, 0x0501f002, 0x05d1fe89, 0x0005f45a,
- 0x0505fea7, 0x05000005, 0x0509fd30, 0x05020003,
- 0x05fdff68, 0x0005f45a, 0x417a7800, 0x0201f800,
- 0x0010ee7a, 0x42000000, 0x0010b2d6, 0x0515fbee,
- 0x59340200, 0x84000558, 0x48026a00, 0x600c3000,
- 0x0515fa42, 0x4d300000, 0x05fdf89f, 0x05c40b90,
- 0x4926601d, 0x4936600a, 0x497a6009, 0x64066407,
- 0x64066403, 0x59240400, 0x8c00050a, 0x0502000b,
- 0x64126407, 0x641e6203, 0x6406642c, 0x60043000,
- 0x4d400000, 0x60a68000, 0x41782800, 0x0511fcbd,
- 0x5c028000, 0x0501f005, 0x602c0800, 0x05e5fb4b,
- 0x64066203, 0x05f5f96f, 0x5c026000, 0x05fdff41,
- 0x05d1fe5b, 0x0005f45a, 0x05fdff3e, 0x60040000,
- 0x0501f0d8, 0x4933c857, 0x59340200, 0x8c000500,
- 0x05000009, 0x4d3c0000, 0x417a7800, 0x05e5fb30,
- 0x5c027800, 0x8d0c0520, 0x05000003, 0x60180800,
- 0x05e5fb36, 0x1c01f000, 0x4933c857, 0x59a80877,
- 0xb00405b4, 0x0500000e, 0x4807c857, 0x82040580,
- 0x00000100, 0x050200af, 0x59cc0408, 0x4803c857,
- 0x8c000500, 0x050000ab, 0x59341403, 0x82080580,
- 0x000007fe, 0x05000006, 0x0501f0a6, 0x59341403,
- 0x82080580, 0x000007fe, 0x05020015, 0x59a8021b,
- 0x8c000506, 0x0500000e, 0x59cc0000, 0x82000500,
- 0x000000ff, 0x59240c08, 0x80040580, 0x05000008,
- 0x05d1fe2b, 0x0005fc5a, 0x42000000, 0x0010b2c7,
- 0x0515fb99, 0x6006d800, 0x05e1f75a, 0x0515fcd2,
- 0x050e0145, 0x0501fa6d, 0x0501f046, 0x41780800,
- 0x05e5fbf6, 0x59341403, 0x82080580, 0x000007fc,
- 0x05020024, 0x4a026802, 0x00fffffc, 0x0505fe38,
- 0x0500000c, 0x0509fcc1, 0x0502000a, 0x0501f8ac,
- 0x41780800, 0x4d400000, 0x60028000, 0x0509fafa,
- 0x5c028000, 0x60100800, 0x05e5faf8, 0x0005f45a,
- 0x60100800, 0x05e5faf5, 0x05d1fe09, 0x59300c29,
- 0x900405a1, 0x05000003, 0xb0040591, 0x0006045a,
- 0x05d5f8b0, 0x61f6880f, 0x42003000, 0x00fffffd,
- 0x05e5fb17, 0x05c60b1a, 0x4936600a, 0x497a6c12,
- 0x640e601e, 0x64066203, 0x648a6403, 0x05f5f109,
- 0x59a8008d, 0x8c000502, 0x0500000d, 0x05e9fc53,
- 0x60401000, 0x05020008, 0x59340002, 0x82000500,
- 0x00ff0000, 0x82000580, 0x00ff0000, 0x05000004,
- 0x60201000, 0x05e9f913, 0x05020056, 0x0505fe08,
- 0x05000057, 0x0509fc91, 0x05020005, 0x592c0405,
- 0x8c00051c, 0x05fe07ca, 0x0501f879, 0x60140800,
- 0x05e5faca, 0x64066203, 0x640e6403, 0x05f5f0ed,
- 0x59cc0408, 0x8c000518, 0x05000017, 0x0509f98f,
- 0x05e9fc36, 0x05000008, 0x59cc0408, 0x8c000516,
- 0x05000005, 0x59300429, 0x900005a1, 0x05fe07b8,
- 0x1c01f000, 0x59a8021b, 0x8400054a, 0x4803521b,
- 0x4803541b, 0x59a8000f, 0x497b8830, 0x84000570,
- 0x48038832, 0x59300429, 0x900005a1, 0x05fe07ac,
- 0x1c01f000, 0x59a8021b, 0xb0000510, 0xb0000590,
- 0x05000009, 0x61bc1001, 0x42024800, 0x0010b391,
- 0x480a4805, 0x480b500f, 0x497b8830, 0x84081570,
- 0x480b8832, 0x0509f98a, 0x59a8021b, 0x84000548,
- 0x4803521b, 0x4803541b, 0x0511fbe7, 0x05fe0798,
- 0x599c0019, 0x8c000510, 0x0502002d, 0x59a8021b,
- 0x8400054c, 0x4803521b, 0x601c0800, 0x05e5fa93,
- 0x417a7800, 0x05e5fa86, 0x61bc3801, 0x61a00001,
- 0x05f1f8d6, 0x05e40aba, 0x05c60abd, 0x4936600a,
- 0x05e5fd66, 0x05020002, 0x497a6416, 0x59340200,
- 0x8400051a, 0x48026a00, 0x600c0800, 0x05e5fa83,
- 0x64066407, 0x64066203, 0x640a6403, 0x05f5f0a5,
- 0x05fdfe78, 0x60040000, 0x0501f012, 0x599c0017,
- 0x8c00050a, 0x05fc07ae, 0x60100800, 0x05e5fa77,
- 0x49375082, 0x59a8021b, 0x8c000508, 0x05000008,
- 0x599c0018, 0x8c00051c, 0x05000005, 0x61a00807,
- 0x42001000, 0x0010f866, 0x05f1fecc, 0x0005f45a,
- 0x4933c857, 0x80003540, 0x05000003, 0x601c0800,
- 0x05e5fa66, 0x801831c0, 0x0502000f, 0x59302009,
- 0x801021c0, 0x05000004, 0x58100405, 0x8c00051e,
- 0x05020009, 0x59341c03, 0x60102000, 0x60483000,
- 0x4d200000, 0x59364013, 0x81224130, 0x05ddfed8,
- 0x5c024000, 0x05d1fd6a, 0x0005f45a, 0x4c5c0000,
- 0x4d2c0000, 0x59325809, 0x0005f8e2, 0x5c025800,
- 0x59cc0008, 0x48002805, 0x59cc0009, 0x48002806,
- 0x49782807, 0x49782808, 0x49782809, 0x4978280a,
- 0x59cc0013, 0x8c00053e, 0x05000009, 0x59cc0414,
- 0x900001c0, 0x59ccbc15, 0x805c0540, 0x48002807,
- 0x59cc0416, 0x900001c0, 0x48002808, 0x59cc0017,
- 0x8c00053e, 0x05000009, 0x59cc0418, 0x900001c0,
- 0x59ccbc19, 0x805c0540, 0x48002809, 0x59cc041a,
- 0x900001c0, 0x4800280a, 0x5c00b800, 0x1c01f000,
- 0x4933c857, 0x59a80077, 0x90000594, 0x0502003a,
- 0x59a8008d, 0x8c000502, 0x05000011, 0x05e9fb9b,
- 0x60401000, 0x05020008, 0x59340002, 0x82000500,
- 0x00ff0000, 0x82000580, 0x00ff0000, 0x05000008,
- 0x60201000, 0x05e9f85b, 0x05000005, 0x59a8008d,
- 0x8400054c, 0x4803508d, 0x0501f027, 0x916c0583,
- 0x0502000c, 0x59300009, 0x80000540, 0x05020009,
- 0x59341c03, 0x60182000, 0x604c3000, 0x4d200000,
- 0x59364013, 0x81224130, 0x05ddfe8d, 0x5c024000,
- 0x05e5fb6b, 0x05fdfec8, 0x0501fa52, 0x05020016,
- 0x59340404, 0x80000540, 0x05000013, 0x60180800,
- 0x05e5fa02, 0x0505fd36, 0x0500000d, 0x0509fbbf,
- 0x05020007, 0x41780800, 0x4d400000, 0x60028000,
- 0x0509f9f9, 0x5c028000, 0x0005f45a, 0x4a025a05,
- 0x00000103, 0x4a025806, 0x02000000, 0x05d1fd08,
- 0x0005f45a, 0x05e5ffeb, 0x0505fd25, 0x05000005,
- 0x0509fbae, 0x05020003, 0x05fdfde6, 0x0005f45a,
- 0x05fdfde4, 0x0515f9a0, 0x80000580, 0x59a8008d,
- 0x8c00050c, 0x05000004, 0x8400050c, 0x4803508d,
- 0x90000541, 0x05fdf777, 0x4933c857, 0x59a80077,
- 0x90000594, 0x05020006, 0x602c0800, 0x05e5f9db,
- 0x64066203, 0x64066403, 0x05f1f7fe, 0x60040000,
- 0x05fdf76c, 0x4933c857, 0x40003000, 0x59a80077,
- 0x90000584, 0x05020018, 0x9018358b, 0x05020015,
- 0x5930081d, 0x58040200, 0x8c000500, 0x0508078d,
- 0x58040200, 0x8c000508, 0x0500000c, 0x84000508,
- 0x48000a00, 0x600c0800, 0x05e5f9c4, 0x5930080a,
- 0x49780806, 0x4a026202, 0x0000ffff, 0x64066203,
- 0x65466403, 0x05f1f7e3, 0x601c0800, 0x05e5f9bb,
- 0x0005f45a, 0x60040000, 0x05fdf74e, 0x4803c857,
- 0x4d2c0000, 0x4d3c0000, 0x0c01f804, 0x5c027800,
- 0x5c025800, 0x1c01f000, 0x00107634, 0x0010783d,
- 0x00107634, 0x00107881, 0x00107634, 0x001078d6,
- 0x0010781a, 0x00107634, 0x00107634, 0x001078ec,
- 0x00107634, 0x001078f7, 0x4933c857, 0x4d1c0000,
- 0x59301403, 0x90080583, 0x0500001d, 0x9008159e,
- 0x05020019, 0x91381595, 0x05020016, 0x4d300000,
- 0x5930141b, 0x0509f96e, 0x05c409c9, 0x591c1416,
- 0x8c08051e, 0x0500000b, 0x05f9fed3, 0x05000009,
- 0x05e5fd9c, 0x4926601d, 0x59340200, 0x8c000508,
- 0x05000003, 0x4a026416, 0x00000100, 0x0505ff4b,
- 0x82081500, 0xffff1fff, 0x480a3c16, 0x5c026000,
- 0x0005fc5a, 0x5c023800, 0x1c01f000, 0x05fdff55,
- 0x05fdf7fd, 0x4933c857, 0x42000000, 0x0010b2da,
- 0x0515fa05, 0x0515f934, 0x05e5fc52, 0x0505fcb0,
- 0x05000007, 0x0509fb39, 0x05020005, 0x6008b000,
- 0x0509fb1b, 0x05fdfd6f, 0x0005f45a, 0x0501f8c3,
- 0x05020021, 0x417a7800, 0x05e5f965, 0x417a7800,
- 0x0201f800, 0x0010ee7a, 0x42000000, 0x0010b2d6,
- 0x0515f9f1, 0x59340200, 0x84000558, 0x48026a00,
- 0x640a6403, 0x600c3000, 0x0515f844, 0x59240400,
- 0x8c00050a, 0x0502000b, 0x4d400000, 0x41782800,
- 0x60143000, 0x60a68000, 0x0511faca, 0x5c028000,
- 0x641e6203, 0x64126407, 0x6406642c, 0x1c01f000,
- 0x600c0800, 0x05e5f955, 0x64066203, 0x05f1ff79,
- 0x05fdf7fb, 0x59cc0407, 0x90000589, 0x05020009,
- 0x59340412, 0x82000500, 0x000000ff, 0x0500000b,
- 0x80000040, 0x48026c12, 0x642a6006, 0x05fdf7f0,
- 0x59cc0207, 0x82000500, 0x0000ff00, 0x82000580,
- 0x00001900, 0x05fc07d2, 0x05fdfd3a, 0x80000580,
- 0x05fdf6d4, 0x4933c857, 0x0505fc71, 0x0500000b,
- 0x0509fafa, 0x05020009, 0x4c580000, 0x6008b000,
- 0x0509fadb, 0x5c00b000, 0x05fdfd2e, 0x601c0800,
- 0x05e5f932, 0x0005f45a, 0x59340403, 0x82000580,
- 0x000007fc, 0x05020005, 0x60100000, 0x05fdf8c5,
- 0x0500001a, 0x0501f026, 0x05fdfd22, 0x59cc3407,
- 0x82183500, 0x000000ff, 0x90180585, 0x05000016,
- 0x9018058b, 0x05000011, 0x59cc0207, 0x82000500,
- 0x0000ff00, 0x05020003, 0x90180589, 0x0500000e,
- 0x82000580, 0x00001900, 0x05020008, 0x90180589,
- 0x05000009, 0x60100800, 0x05e5f914, 0x05d1fc28,
- 0x0515f8c9, 0x0005f45a, 0x0515f8c7, 0x60040000,
- 0x05fdf6a4, 0x0505fc42, 0x59325809, 0x05000008,
- 0x592c0205, 0x82000580, 0x00000139, 0x05fc07f7,
- 0x592c0405, 0x8c00051e, 0x05fe07f4, 0x59340412,
+ 0x1c01f000, 0x00109b47, 0x00109d4c, 0x00109b47,
+ 0x00109d8f, 0x00109b47, 0x00109df5, 0x00109d29,
+ 0x00109b47, 0x00109b47, 0x00109e0b, 0x00109b47,
+ 0x00109e16, 0x4933c857, 0x4d1c0000, 0x59301403,
+ 0x90080583, 0x0500001d, 0x9008159e, 0x05020019,
+ 0x91381595, 0x05020016, 0x4d300000, 0x5930141b,
+ 0x0509fc25, 0x05b408a5, 0x591c1416, 0x8c08051e,
+ 0x0500000b, 0x05f9feca, 0x05000009, 0x05ddfd36,
+ 0x4926601d, 0x59340200, 0x8c000508, 0x05000003,
+ 0x4a026416, 0x00000100, 0x0509fa0e, 0x82081500,
+ 0xffff1fff, 0x480a3c16, 0x5c026000, 0x0005ffdc,
+ 0x5c023800, 0x1c01f000, 0x05fdff55, 0x05fdf7fd,
+ 0x4933c857, 0x42000000, 0x0010e458, 0x0519fa8d,
+ 0x0519f908, 0x05ddfb5c, 0x0505ff77, 0x05000007,
+ 0x0509fdf9, 0x05020005, 0x6008b000, 0x0509fde0,
+ 0x05fdfd6b, 0x0005f7dc, 0x0501f8d3, 0x05020020,
+ 0x417a7800, 0x05d9ff86, 0x417a7800, 0x05c1fdcd,
+ 0x42000000, 0x0010e454, 0x0519fa7a, 0x59340200,
+ 0x84000558, 0x48026a00, 0x640a6403, 0x600c3000,
+ 0x0519f81b, 0x59240400, 0x8c00050a, 0x0502000b,
+ 0x4d400000, 0x41782800, 0x60143000, 0x60a68000,
+ 0x0515fa2f, 0x5c028000, 0x641e6203, 0x64126407,
+ 0x6406642c, 0x1c01f000, 0x600c0800, 0x05d9ff76,
+ 0x64066203, 0x05f1faf8, 0x05fdf7fb, 0x59cc0407,
+ 0x90000589, 0x05020009, 0x59340412, 0x82000500,
+ 0x000000ff, 0x0500000b, 0x80000040, 0x48026c12,
+ 0x642a6006, 0x05fdf7f0, 0x59cc0207, 0x82000500,
+ 0x0000ff00, 0x82000580, 0x00001900, 0x05fc07d3,
+ 0x05fdfd37, 0x80000580, 0x05fdf6d5, 0x4933c857,
+ 0x0505ff39, 0x0500000b, 0x0509fdbb, 0x05020009,
+ 0x4c580000, 0x6008b000, 0x0509fda1, 0x5c00b000,
+ 0x05fdfd2b, 0x601c0800, 0x05d9ff53, 0x0005f7dc,
+ 0x59340403, 0x82000580, 0x000007fc, 0x05020007,
+ 0x60100000, 0x05fdf887, 0x05020031, 0x601c0800,
+ 0x05d9ff49, 0x0005f7dc, 0x05fdfd1d, 0x59cc3407,
+ 0x82183500, 0x000000ff, 0x90180585, 0x0500001e,
+ 0x9018058b, 0x05000015, 0x59cc0207, 0x82000500,
+ 0x0000ff00, 0x05020003, 0x90180589, 0x05000016,
+ 0x82000580, 0x00001900, 0x0502000c, 0x90180589,
+ 0x05000011, 0x59340403, 0x82000580, 0x000007fe,
+ 0x05000023, 0x60100800, 0x05d9ff2f, 0x05c1fdb4,
+ 0x0519f898, 0x0005f7dc, 0x59340403, 0x82000580,
+ 0x000007fe, 0x0500001a, 0x0519f892, 0x60040000,
+ 0x05fdf69b, 0x0505ff00, 0x59325809, 0x05000008,
+ 0x592c0208, 0x82000580, 0x00000139, 0x05fc07f7,
+ 0x592c0408, 0x8c00051e, 0x05fe07f4, 0x59340412,
0x800001c0, 0x05000006, 0x80000040, 0x48026c12,
0x642a6006, 0x645a6403, 0x1c01f000, 0x59340403,
- 0x82000580, 0x000007fe, 0x05020006, 0x59a8021b,
- 0x84000540, 0x4803521b, 0x05e1fe46, 0x05fdf7e3,
- 0x0515f8a9, 0x417a7800, 0x0201f800, 0x0010ee7a,
- 0x60143000, 0x0511ffcd, 0x42000000, 0x0010b2d6,
- 0x0515f971, 0x05fdf7da, 0x4933c857, 0x0501f844,
- 0x05020006, 0x60140800, 0x05e5f8e4, 0x64066203,
- 0x640e6403, 0x05f1f707, 0x60100800, 0x05e5f8df,
- 0x0509fa9e, 0x05020007, 0x4c580000, 0x6008b000,
- 0x0509fa7f, 0x5c00b000, 0x05fdfcd2, 0x0005f45a,
- 0x05fdfcd0, 0x0515f88c, 0x80000580, 0x05fdf669,
- 0x4933c857, 0x0501f82e, 0x05020006, 0x60240800,
- 0x05e5f8ce, 0x64066203, 0x64166403, 0x05f1f6f1,
- 0x0515f881, 0x60040000, 0x05fdf65e, 0x4933c857,
- 0x5930081d, 0x58040200, 0x8c000500, 0x05080685,
- 0x0501f81f, 0x05020006, 0x602c0800, 0x05e5f8bf,
- 0x64066203, 0x64066403, 0x05f1f6e2, 0x5930080a,
- 0x58040403, 0x82000580, 0x000007fe, 0x05020004,
- 0x600c2800, 0x0509fe7c, 0x0005f45a, 0x0515f86a,
- 0x60040000, 0x05fdf647, 0x4933c857, 0x59cc0407,
- 0x90000583, 0x05020009, 0x59cc0207, 0x82000500,
- 0x0000ff00, 0x82000d80, 0x00002a00, 0x05000003,
- 0x82000d80, 0x00001e00, 0x1c01f000, 0x4933c857,
- 0x90000541, 0x1c01f000, 0x4933c857, 0x4d400000,
- 0x4c580000, 0x60028000, 0x05d1fe5e, 0x59a8021b,
- 0x90000543, 0x4803521b, 0x0501f88c, 0x05000005,
- 0x4d300000, 0x4d340000, 0x4d440000, 0x0501f024,
- 0x0501f8b5, 0x05000028, 0x4d300000, 0x4d340000,
- 0x4d440000, 0x83240580, 0x0010b391, 0x0502001d,
- 0x59cc0408, 0x8c00051e, 0x05020009, 0x42000800,
- 0x0010b391, 0x58040406, 0x8c000500, 0x05020004,
- 0x59a8021b, 0x84000552, 0x4803521b, 0x59240400,
- 0x8c00050a, 0x05020005, 0x60aa8000, 0x61fe89ff,
- 0x60083000, 0x0511ff6a, 0x60aa8000, 0x4d3c0000,
- 0x60027804, 0x0201f800, 0x0010edf3, 0x5c027800,
- 0x42000000, 0x0010b2d6, 0x0515f8f7, 0x05d1fccc,
- 0x05d1feef, 0x600a8000, 0x5c028800, 0x5c026800,
- 0x5c026000, 0x41780800, 0x05e5f954, 0x59cc0800,
- 0x82040d00, 0x00ffffff, 0x59240200, 0xb0000566,
- 0x48024a00, 0x48064805, 0x812000f0, 0x80040540,
- 0x48026813, 0x812241c0, 0x05020005, 0x4c040000,
- 0x60040000, 0x05e5ffa2, 0x5c000800, 0x4927c857,
- 0x83240580, 0x0010b391, 0x0502001e, 0x59a8121b,
- 0x59cc0408, 0x8c00051a, 0x05020005, 0x84081514,
- 0x4a0370e5, 0x00000800, 0x0501f004, 0x84081554,
- 0x4a0370e5, 0x00000c00, 0x480b521b, 0x4807500f,
- 0x80040110, 0x48035018, 0x48038881, 0x59a80a1b,
- 0x84040d50, 0x59cc0013, 0x8c00053e, 0x05000003,
- 0x8c000536, 0x05000004, 0x59cc0017, 0x8c000536,
- 0x05020002, 0x84040d10, 0x4807521b, 0x4807541b,
- 0x59cc0408, 0x8c000518, 0x0500001b, 0x59a8021b,
- 0x8c000506, 0x05000011, 0x916c0583, 0x05000004,
- 0x83240580, 0x0010b391, 0x05000013, 0x59240400,
- 0x8c00050c, 0x05020006, 0x4c040000, 0x60040000,
- 0x05e5ff6f, 0x5c000800, 0x0501f00b, 0x64866429,
- 0x0509f99a, 0x0501f008, 0x0515f9ed, 0x05020006,
- 0x4c040000, 0x0509fdc3, 0x41781800, 0x05d1fd95,
- 0x5c000800, 0xb0040510, 0xb0000590, 0x05000008,
- 0x05e9f98a, 0x05000006, 0x59cc0009, 0x4803502c,
- 0x59cc000a, 0x4803502d, 0x0505fedc, 0x5c00b000,
- 0x5c028000, 0x1c01f000, 0x4933c857, 0x59a8141b,
- 0x82080580, 0x0000ffff, 0x0500000b, 0x4c080000,
- 0x05e9f97a, 0x5c001000, 0x0502000b, 0x59cc0408,
- 0x8c000518, 0x05000005, 0x8c08050a, 0x0500000a,
- 0x80000580, 0x1c01f000, 0x8c080508, 0x05fe07fd,
+ 0x82000580, 0x000007fe, 0x0502000b, 0x59a80249,
+ 0x84000540, 0x48035249, 0x8c000506, 0x05000004,
+ 0x4a035045, 0x0000ffff, 0x050dfcbb, 0x05d9fc0b,
+ 0x05fdf7de, 0x0519f86f, 0x417a7800, 0x05c1fd41,
+ 0x60143000, 0x0515ff96, 0x42000000, 0x0010e454,
+ 0x0519f9ec, 0x59300429, 0x900005a1, 0x050c048f,
+ 0x05fdf7d3, 0x4933c857, 0x0501f844, 0x05020006,
+ 0x60140800, 0x05d9fef4, 0x64066203, 0x640e6403,
+ 0x05f1f275, 0x60100800, 0x05d9feef, 0x0509fd4e,
+ 0x05020007, 0x4c580000, 0x6008b000, 0x0509fd34,
+ 0x5c00b000, 0x05fdfcbe, 0x0005f7dc, 0x05fdfcbc,
+ 0x0519f850, 0x80000580, 0x05fdf659, 0x4933c857,
+ 0x0501f82e, 0x05020006, 0x60240800, 0x05d9fede,
+ 0x64066203, 0x64166403, 0x05f1f25f, 0x0519f845,
+ 0x60040000, 0x05fdf64e, 0x4933c857, 0x5930081d,
+ 0x58040200, 0x8c000500, 0x050c031a, 0x0501f81f,
+ 0x05020006, 0x602c0800, 0x05d9fecf, 0x64066203,
+ 0x64066403, 0x05f1f250, 0x5930080a, 0x58040403,
+ 0x82000580, 0x000007fe, 0x05020004, 0x600c2800,
+ 0x050dfb11, 0x0005f7dc, 0x0519f82e, 0x60040000,
+ 0x05fdf637, 0x4933c857, 0x59cc0407, 0x90000583,
+ 0x05020009, 0x59cc0207, 0x82000500, 0x0000ff00,
+ 0x82000d80, 0x00002a00, 0x05000003, 0x82000d80,
+ 0x00001e00, 0x1c01f000, 0x4933c857, 0x90000541,
+ 0x1c01f000, 0x4933c857, 0x4d400000, 0x4c580000,
+ 0x60028000, 0x05c1ffd6, 0x59a80249, 0x90000543,
+ 0x48035249, 0x05d5fcce, 0x0500000c, 0x59a81ccc,
+ 0x8c0c0506, 0x0502000f, 0x840c1d44, 0x480f54cc,
+ 0x59cc0408, 0x8c00051c, 0x05000004, 0x59a81249,
+ 0x84081558, 0x480b5249, 0x0501f8c5, 0x05000005,
+ 0x4d300000, 0x4d340000, 0x4d440000, 0x0501f037,
+ 0x59cc0408, 0x8c00051c, 0x05000006, 0x59cc0800,
+ 0x82040d00, 0x00ffffff, 0x800409c0, 0x05000037,
+ 0x0501f8ec, 0x05000035, 0x4d300000, 0x4d340000,
+ 0x4d440000, 0x83240580, 0x0010e512, 0x0502002a,
+ 0x59cc0408, 0x8c00051e, 0x0502000c, 0x42000800,
+ 0x0010e512, 0x58040406, 0x8c000500, 0x05020007,
+ 0x59cc0408, 0x8c000518, 0x05000004, 0x59a80249,
+ 0x84000552, 0x48035249, 0x59240400, 0x8c00050a,
+ 0x05020005, 0x60aa8000, 0x61fe89ff, 0x60083000,
+ 0x0515ff18, 0x60aa8000, 0x4d3c0000, 0x05d5fc99,
+ 0x05000008, 0x600a7800, 0x5924100b, 0x82081500,
+ 0x00001fff, 0x41780800, 0x05c5f8bc, 0x0501f003,
+ 0x60027804, 0x05c1fc49, 0x5c027800, 0x42000000,
+ 0x0010e454, 0x0519f94f, 0x05d5fc8a, 0x05020002,
+ 0x05c1fe35, 0x05c5f846, 0x600a8000, 0x5c028800,
+ 0x5c026800, 0x5c026000, 0x050dfbb3, 0x41780800,
+ 0x59a804cc, 0x8c00050a, 0x05000002, 0x60040800,
+ 0x05d9ff3a, 0x59cc0800, 0x82040d00, 0x00ffffff,
+ 0x59240200, 0xb0000566, 0x48024a00, 0x59cc0408,
+ 0x8c00051c, 0x05000003, 0x800409c0, 0x05000019,
+ 0x48064805, 0x812000f0, 0x80040540, 0x48026813,
+ 0x812241c0, 0x0502000f, 0x59cc0408, 0x8c000518,
+ 0x05020007, 0x599c0019, 0x8c000510, 0x05000009,
+ 0x59a80249, 0x84000548, 0x48035249, 0x4c040000,
+ 0x60001802, 0x60040000, 0x05ddff96, 0x5c000800,
+ 0x4927c857, 0x83240580, 0x0010e512, 0x05020026,
+ 0x59a81249, 0x59cc0408, 0x8c00051a, 0x05020005,
+ 0x84081514, 0x4a0370e5, 0x00000800, 0x0501f004,
+ 0x84081554, 0x4a0370e5, 0x00000c00, 0x480b5249,
+ 0x4807503d, 0x80040110, 0x48035046, 0x48038881,
+ 0x59a80a49, 0x84040d50, 0x59cc0013, 0x8c00053e,
+ 0x05000003, 0x8c000536, 0x05000004, 0x59cc0017,
+ 0x8c000536, 0x05020002, 0x84040d10, 0x48075249,
+ 0x48075449, 0x5924100b, 0x82081500, 0x00001fff,
+ 0x8c040518, 0x05000004, 0x59a804cc, 0x8c00050a,
+ 0x05000026, 0x59cc0408, 0x8c000518, 0x05000023,
+ 0x59a80249, 0x8c000506, 0x05000012, 0x916c0583,
+ 0x05000004, 0x83240580, 0x0010e512, 0x0500001b,
+ 0x59240400, 0x8c00050c, 0x05020007, 0x4c040000,
+ 0x60001802, 0x60040000, 0x05ddff5a, 0x5c000800,
+ 0x0501f012, 0x64866429, 0x0509fc0b, 0x0501f00f,
+ 0x0519fa2a, 0x0502000d, 0x4c080000, 0x4c040000,
+ 0x050dfa18, 0x5c000800, 0x5c001000, 0x05020007,
+ 0x59a80249, 0x8c000514, 0x05000004, 0x4c040000,
+ 0x05c5f8aa, 0x5c000800, 0xb0040510, 0xb0000590,
+ 0x05000008, 0x05e1f9a1, 0x05000006, 0x59cc0009,
+ 0x4803505a, 0x59cc000a, 0x4803505b, 0x0509f946,
+ 0x5c00b000, 0x5c028000, 0x1c01f000, 0x4933c857,
+ 0x59a81449, 0x82080580, 0x0000ffff, 0x0500000f,
+ 0x4c080000, 0x05e1f991, 0x5c001000, 0x05020012,
+ 0x59cc0408, 0x8c000518, 0x05000009, 0x8c08050a,
+ 0x05000011, 0x8c00051c, 0x05020008, 0x8c080518,
+ 0x0502000d, 0x80000580, 0x1c01f000, 0x8c080508,
+ 0x05fe07fd, 0x0501f008, 0x8c080518, 0x05fe07fa,
0x0501f005, 0x90080530, 0x05020003, 0x8c080506,
- 0x05fe07f8, 0x4a03541b, 0x0000ffff, 0x42000000,
- 0x0010b223, 0x0515f878, 0x60303000, 0x61fc19ff,
- 0x601c2000, 0x4d200000, 0x417a4000, 0x05ddfc6c,
+ 0x05fe07f5, 0x4a035449, 0x0000ffff, 0x42000000,
+ 0x0010e39c, 0x0519f8a3, 0x60303000, 0x61fc19ff,
+ 0x601c2000, 0x4d200000, 0x417a4000, 0x05d5f909,
0x5c024000, 0x4d400000, 0x4d3c0000, 0x60043000,
- 0x0511fed7, 0x60aa8000, 0x60027804, 0x0201f800,
- 0x0010edf3, 0x5c028000, 0x5c027800, 0x90000541,
- 0x1c01f000, 0x4933c857, 0x4c580000, 0x59a80018,
- 0x800001c0, 0x05000021, 0x59341806, 0x800c19c0,
- 0x0500001e, 0x820c1d80, 0xdeaddead, 0x0500001a,
- 0x59cc1000, 0x82081500, 0x00ffff00, 0x80081110,
- 0x80080580, 0x05000004, 0x42000000, 0x0010b2b9,
- 0x0501f010, 0x91cc140b, 0x6008b000, 0x91341c06,
- 0x0501f829, 0x05000004, 0x42000000, 0x0010b2ba,
- 0x0501f008, 0x91cc140d, 0x6008b000, 0x91341c08,
- 0x0501f821, 0x05000005, 0x42000000, 0x0010b2bb,
- 0x0515f841, 0x90000541, 0x5c00b000, 0x1c01f000,
- 0x4933c857, 0x59cc0206, 0x90000594, 0x05020015,
- 0x59cc0407, 0x82000580, 0x00000800, 0x05020011,
- 0x59cc0207, 0x8c00051a, 0x0500000d, 0x82000500,
- 0x00000f00, 0x82000580, 0x00000100, 0x05020008,
- 0x59cc020a, 0x8c000508, 0x05020003, 0x8c00050a,
- 0x05000003, 0x80000580, 0x1c01f000, 0x90000541,
- 0x1c01f000, 0x5c000000, 0x4c000000, 0x4803c857,
- 0x480bc857, 0x480fc857, 0x485bc857, 0x50080800,
- 0x500c0000, 0x80042580, 0x05020007, 0x80081000,
- 0x800c1800, 0x8058b040, 0x05fe07f9, 0x80000580,
- 0x1c01f000, 0x4803c857, 0x4807c857, 0x480bc857,
- 0x480fc857, 0x80040480, 0x05001004, 0x60040000,
- 0x90040d41, 0x1c01f000, 0x41780000, 0x05fdf7fd,
- 0xb1380493, 0x05c21fb2, 0xb138048b, 0x05c01fb0,
- 0x0c01f001, 0x00107a4a, 0x00107a4a, 0x00107a4a,
- 0x00107a4a, 0x00107a49, 0x00107a49, 0x00107a49,
- 0x00107a4a, 0x05c1ffa6, 0x493bc857, 0x64366203,
- 0x493a6403, 0x42000800, 0x80000000, 0x0005f32e,
- 0x91380593, 0x0502000b, 0x59300403, 0xb0000590,
- 0x05c20f9b, 0x0505fe7c, 0x05000005, 0x643a6203,
- 0x59a80030, 0x48026205, 0x1c01f000, 0x0005f45a,
- 0x4933c857, 0x913805a7, 0x05020027, 0x4933c857,
- 0x05f1fe34, 0x4d3c0000, 0x417a7800, 0x0201f800,
- 0x0010ee7a, 0x5c027800, 0x42000000, 0x0010b2d6,
- 0x0511ffdd, 0x4d2c0000, 0x59325809, 0x0505fa88,
- 0x492fc857, 0x0500000c, 0x0509fc2d, 0x4a025a05,
- 0x00000103, 0x59300c02, 0x48065c07, 0x64a65a07,
- 0x497a580a, 0x592c0c09, 0x84040d50, 0x48065c09,
- 0x0001fb5b, 0x5c025800, 0x60543000, 0x41782800,
- 0x600c2000, 0x4d400000, 0x4d440000, 0x59368c03,
- 0x60a68000, 0x0509fb79, 0x5c028800, 0x5c028000,
- 0x0005f45a, 0x91380594, 0x05020009, 0x59300403,
- 0xb0000c93, 0x05c21f66, 0xb0000480, 0x05c01f64,
- 0x4933c857, 0x4803c857, 0x0c01f013, 0xb13805a1,
- 0x05000003, 0xb13805a0, 0x05020007, 0x05f5fa64,
- 0x05fa049c, 0x59300203, 0x9000058e, 0x0504041c,
- 0x1c01f000, 0xb1380593, 0x05000006, 0xb1380588,
- 0x05c20f53, 0x59300403, 0xb0000590, 0x05c20f50,
- 0x1c01f000, 0x00107ab5, 0x00107ab4, 0x00107ab4,
- 0x00107ab4, 0x00107ab4, 0x00107ab4, 0x00107ab4,
- 0x00107ab4, 0x00107ab4, 0x00107ab4, 0x00107ab4,
- 0x00107ac6, 0x00107ac6, 0x00107ac6, 0x00107ac6,
- 0x00107ab4, 0x00107ac6, 0x00107ab4, 0x00107ac6,
- 0x05c1ff3b, 0x4933c857, 0x05f1fdde, 0x0505fa3c,
- 0x0004045a, 0x4d2c0000, 0x59325809, 0x0509fbe0,
- 0x4a025a05, 0x00000103, 0x59300402, 0x48025c07,
- 0x641a5a07, 0x497a580a, 0x0001fb5b, 0x5c025800,
- 0x0505fb13, 0x0005f45a, 0x4933c857, 0x05f1fdcd,
- 0x0005f45a, 0x05c1ff26, 0x5930001e, 0x800001c0,
- 0x050a0b1d, 0x497a6205, 0x59300004, 0x8c00053e,
- 0x0502002a, 0x0509fbde, 0x050200b0, 0x59325809,
- 0x592c0c09, 0x59cc2808, 0x82141d00, 0x00000c00,
- 0x05000002, 0x59cc1809, 0x84040d58, 0x48065c09,
- 0x82143500, 0x00000fff, 0x05020023, 0x59340200,
- 0x8c00050e, 0x05020097, 0x0005fd0c, 0x05020006,
- 0x64025a07, 0x59300013, 0x0509fbbe, 0x80000d40,
- 0x050209fe, 0x4a025a05, 0x00000103, 0x48065808,
- 0x480e580b, 0x901409c0, 0x4806580a, 0x59300c02,
- 0x48065c07, 0x0509f892, 0x0509f895, 0x0001fb5b,
- 0x0509fba7, 0x05e5fa20, 0x59cc0008, 0x8c000518,
- 0x05060402, 0x0005f45a, 0x05f5f9fd, 0x05fc07d6,
- 0x4d3c0000, 0x600a7800, 0x0501fe50, 0x5c027800,
- 0x05fdf7d1, 0x4817c857, 0x480fc857, 0x82180500,
- 0x000000ff, 0x0500000d, 0x592c0205, 0x82000500,
- 0x000000ff, 0xb0000588, 0x05000003, 0x900005a2,
- 0x05020006, 0x592c0408, 0x800001c0, 0x05000003,
- 0x0509f9ea, 0x0509f221, 0x82180d00, 0x00000c00,
- 0x05000004, 0x59340200, 0x8c00050e, 0x05020050,
- 0x64025a07, 0x41782000, 0x8c180510, 0x05000009,
- 0x59cc200b, 0x801021c0, 0x05000006, 0x59cc000c,
- 0x82000500, 0x000000ff, 0x05000002, 0x4803c857,
- 0x4812580d, 0x41780000, 0x8c180512, 0x05000002,
- 0x59cc000a, 0x4802580c, 0x80100c00, 0x05fc07b7,
- 0x9004149d, 0x05001005, 0x592c0405, 0x8c00051e,
- 0x05000020, 0x60700800, 0x4c040000, 0x4c0c0000,
- 0x4c140000, 0x0005fd0c, 0x05020006, 0x64025a07,
- 0x59300013, 0x0509fb6b, 0x80000d40, 0x050209ab,
- 0x5c002800, 0x5c001800, 0x4a025a05, 0x00000103,
- 0x48065808, 0x480e580b, 0x901409c0, 0x4806580a,
- 0x5c000800, 0x4c500000, 0x4c540000, 0x91cca40c,
- 0x912cac0e, 0x0501fdb1, 0x5c00a800, 0x5c00a000,
- 0x59300008, 0x84000534, 0x48026008, 0x05fdf7a0,
- 0x4c040000, 0x4c0c0000, 0x4c140000, 0x0005fd0c,
- 0x05020006, 0x64025a07, 0x59300013, 0x0509fb4d,
- 0x80000d40, 0x0502098d, 0x48065808, 0x5c002800,
- 0x5c001800, 0x59301402, 0x480a5c07, 0x480e580b,
- 0x901401c0, 0x4802580a, 0x0509f821, 0x5c000800,
- 0x0501fd52, 0x0501fd7e, 0x05fdf78e, 0x592c020b,
- 0x8c000502, 0x05fc07af, 0x592c0209, 0x8c00050e,
- 0x05fe07ac, 0x59300013, 0x800c0d80, 0x05fc07a9,
- 0x4803c857, 0x480fc857, 0x8c180514, 0x050403c0,
- 0x80000540, 0x05fc07a3, 0x4807c856, 0x0505f3bc,
- 0x592c020b, 0x8c000502, 0x05fc0768, 0x59300013,
- 0x800001c0, 0x05fc0767, 0x592c0209, 0x8c00050e,
- 0x05fe0764, 0x0505f3b2, 0x1c01f000, 0x59cc2006,
- 0x59cc2807, 0x0501f03b, 0x0501f03a, 0x1c01f000,
- 0x4933c857, 0x59300004, 0x8c00053e, 0x05020031,
- 0x5930001e, 0x800001c0, 0x050a0a5b, 0x497a6205,
- 0x59325809, 0x592c0c09, 0x41782800, 0x41781800,
- 0x84040d58, 0x48065c09, 0x41783000, 0x59340200,
- 0x8c00050e, 0x05020018, 0x0005fd0c, 0x05020007,
- 0x64025a07, 0x59300013, 0x0509fb06, 0x80000d40,
- 0x4807c857, 0x05020945, 0x4a025a05, 0x00000103,
- 0x48065808, 0x480e580b, 0x901409c0, 0x4806580a,
- 0x4933c857, 0x59300c02, 0x48065c07, 0x0505ffd8,
- 0x0505ffdb, 0x0001fb5b, 0x0509faed, 0x05e5f966,
- 0x0005f45a, 0x592c020b, 0x8c000502, 0x05fc07e7,
- 0x59300013, 0x4803c857, 0x800001c0, 0x05fc07e5,
- 0x592c0209, 0x8c00050e, 0x05fe07e2, 0x0505f378,
- 0x05f5f93b, 0x05fc07cf, 0x4933c857, 0x1c01f000,
- 0x4c5c0000, 0x4c600000, 0x4010b800, 0x4014c000,
- 0x5930001e, 0x800001c0, 0x4c140000, 0x050a0a22,
- 0x5c002800, 0x59325809, 0x592c020b, 0x8c000502,
- 0x05020033, 0x8c000500, 0x05000038, 0x640a6203,
- 0x650e6403, 0x405c0000, 0x592c0810, 0x80040c80,
- 0x40600000, 0x80040480, 0x0500102d, 0x8060c1c0,
- 0x05000024, 0x59300004, 0x8c00050e, 0x05000007,
- 0x59300a23, 0x90040503, 0x4c140000, 0x0c01f829,
- 0x5c002800, 0x0500001b, 0x59300004, 0x8c00053e,
- 0x05020014, 0x485e6015, 0x48626013, 0x497a6205,
- 0x5c00c000, 0x5c00b800, 0x4c140000, 0x0505fce6,
- 0x5c002800, 0x05000007, 0x4816602a, 0x4a02601c,
- 0x00107bf2, 0x1c01f000, 0x5930282a, 0x497a602a,
- 0x05c9f8bb, 0x0502000c, 0x59300804, 0x0005f320,
- 0x4c140000, 0x05f5f8fe, 0x5c002800, 0x05fc07ea,
- 0x5c00c000, 0x5c00b800, 0x05f9f332, 0x5c00c000,
- 0x5c00b800, 0x4933c857, 0x1c01f000, 0x4807c857,
- 0x4004c000, 0x05fdf7d2, 0x4803c857, 0x05fdf7f5,
- 0x00107c0c, 0x00107c11, 0x00107c16, 0x00107c16,
- 0x59300224, 0x48035093, 0x90000408, 0x48035092,
- 0x0501f00a, 0x59300224, 0x48035092, 0x90000408,
- 0x48035093, 0x0501f005, 0x59300224, 0x90000408,
- 0x48035092, 0x48035093, 0x405c1000, 0x41780800,
- 0x59a80092, 0x05f1fae1, 0x800409c0, 0x05020052,
- 0x40085000, 0x592c1001, 0x800811c0, 0x0500004e,
- 0x58080205, 0x82000500, 0x000000ff, 0xb000058a,
- 0x05020049, 0x48281002, 0x59a80092, 0x40601000,
- 0x41780800, 0x4c280000, 0x05f1fad0, 0x5c005000,
- 0x800409c0, 0x05020038, 0x40041800, 0x59a80093,
- 0x59300804, 0x8c040530, 0x05000005, 0x59300827,
- 0x800800c6, 0x48000803, 0x59300224, 0x800c1c00,
- 0x80081040, 0x05fe07fe, 0x480e602c, 0x592c4801,
- 0x802449c0, 0x05c00dae, 0x58240a06, 0x592c1812,
- 0x59303023, 0x8c180506, 0x05000003, 0x40280000,
- 0x80040c00, 0x800400e0, 0x80040540, 0x48026021,
- 0x8c18050a, 0x05020003, 0x40280000, 0x800c1c00,
- 0x480e601f, 0x59300804, 0x8c040530, 0x0500000e,
- 0x4c280000, 0x592c1001, 0x59306827, 0x592c5a0b,
- 0x0001ff1a, 0x5c005000, 0x802851c0, 0x05ca0dc0,
- 0x05020015, 0x59300827, 0x58040003, 0x49780803,
- 0x4800080d, 0x59300224, 0x59303023, 0x8c18050e,
- 0x05000002, 0x80000580, 0x48026424, 0x90000541,
- 0x1c01f000, 0x592c1810, 0x805c0418, 0x800c0580,
- 0x05fc07c6, 0x4933c857, 0x485fc857, 0x4863c857,
- 0x480fc857, 0x80000580, 0x1c01f000, 0xb1380498,
- 0x05021057, 0xb1380480, 0x05001002, 0x0c01f002,
- 0x1c01f000, 0x00107c91, 0x00107c91, 0x00107c91,
- 0x00107c91, 0x00107c91, 0x00107c91, 0x00107c91,
- 0x00107c91, 0x00107c91, 0x00107c91, 0x00107c92,
- 0x00107c91, 0x00107c91, 0x00107c91, 0x00107c91,
- 0x00107c9c, 0x00107c91, 0x00107c91, 0x00107c91,
- 0x00107c91, 0x00107cc1, 0x00107c91, 0x00107c91,
- 0x00107c91, 0x05c1fd5e, 0x4933c857, 0x05f1feea,
- 0x640a6203, 0x59a80030, 0x48026205, 0x59300013,
- 0x59300817, 0x80040c80, 0x48066017, 0x05f1f3dc,
- 0x4933c857, 0x05f1fbda, 0x4d3c0000, 0x417a7800,
- 0x0201f800, 0x0010ee7a, 0x5c027800, 0x42000000,
- 0x0010b2d6, 0x0511fda0, 0x0505f84d, 0x0500000f,
- 0x4d2c0000, 0x59325809, 0x0509f9f1, 0x4a025a05,
- 0x00000103, 0x59300402, 0x48025c07, 0x64a65a07,
- 0x497a580a, 0x592c0c09, 0x84040d50, 0x48065c09,
- 0x0001fb5b, 0x5c025800, 0x60503000, 0x41782800,
- 0x4d400000, 0x4d440000, 0x59368c03, 0x60082000,
- 0x60a68000, 0x0509f93d, 0x5c028800, 0x5c028000,
- 0x0005f45a, 0x4933c857, 0x59cc0a04, 0x48066202,
- 0x59300809, 0x4978080a, 0x4978080b, 0x58041409,
- 0x84081558, 0x48080c09, 0x1c01f000, 0xb13805a1,
- 0x05020014, 0x05f1fc72, 0x0501fd88, 0x0502000c,
- 0x05f5f96b, 0x05fc07ff, 0x811800ca, 0x81c80c00,
- 0x58040138, 0x59cc0a03, 0x80000040, 0x80040580,
- 0x05020007, 0x05f5f95c, 0x05000005, 0x59300c16,
- 0x84040d44, 0x48066416, 0x497a6205, 0x05f1f44c,
- 0xb13805a0, 0x05fe07fe, 0x59cc0002, 0x8c000526,
- 0x05fe07e9, 0x05fdf7fa, 0x4807c857, 0x8c04053e,
- 0x05020022, 0x497a5a07, 0x5930002b, 0x80000540,
- 0x05000017, 0x497a5a07, 0x4c040000, 0x4c080000,
+ 0x0515fe50, 0x60aa8000, 0x60027804, 0x05c1fb8b,
+ 0x5c028000, 0x5c027800, 0x90000541, 0x1c01f000,
+ 0x4933c857, 0x4c580000, 0x59cc0408, 0x8c000518,
+ 0x05020006, 0x59a80449, 0x82000580, 0x0000ffff,
+ 0x05000027, 0x0501f011, 0x59a80046, 0x4803c857,
+ 0x800001c0, 0x05000022, 0x59cc1000, 0x59340013,
+ 0x82000500, 0x00ffffff, 0x0500001d, 0x82081500,
+ 0x00ffffff, 0x80080580, 0x05000004, 0x42000000,
+ 0x0010e432, 0x0501f014, 0x59341806, 0x480fc857,
+ 0x800c19c0, 0x05000012, 0x91cc140b, 0x6008b000,
+ 0x91341c06, 0x0501f8da, 0x05000004, 0x42000000,
+ 0x0010e433, 0x0501f008, 0x91cc140d, 0x6008b000,
+ 0x91341c08, 0x0501f8d2, 0x05000005, 0x42000000,
+ 0x0010e434, 0x0519f863, 0x90000541, 0x5c00b000,
+ 0x1c01f000, 0x4933c857, 0x59cc0206, 0x90000594,
+ 0x05020015, 0x59cc0407, 0x82000580, 0x00000800,
+ 0x05020011, 0x59cc0207, 0x8c00051a, 0x0500000d,
+ 0x82000500, 0x00000f00, 0x82000580, 0x00000100,
+ 0x05020008, 0x59cc020a, 0x8c000508, 0x05020003,
+ 0x8c00050a, 0x05000003, 0x80000580, 0x1c01f000,
+ 0x90000541, 0x1c01f000, 0x4933c857, 0x4943c857,
+ 0x493fc857, 0x4c5c0000, 0x4d300000, 0x4d340000,
+ 0x4d2c0000, 0x4d380000, 0x4130b800, 0x42026000,
+ 0x00111b00, 0x59a8003b, 0x81640480, 0x0502108b,
+ 0x8d3c0512, 0x05000004, 0x405c0000, 0x81300580,
+ 0x05000081, 0x05f9fa5d, 0x0500007f, 0x59300407,
+ 0x90000c92, 0x05021015, 0x5932680a, 0x0c01f001,
+ 0x0010a029, 0x00109fc3, 0x00109fcc, 0x00109fd6,
+ 0x00109fc3, 0x00109fcc, 0x00109ffc, 0x0010a00a,
+ 0x00109fc2, 0x00109fc2, 0x0010a010, 0x00109fc2,
+ 0x00109fc2, 0x00109fc2, 0x00109fc2, 0x0010a019,
+ 0x0010a01c, 0x0010a01a, 0x05b1fe18, 0x59300403,
+ 0xb0000583, 0x05080b8d, 0x0515fe90, 0x0505fdf4,
+ 0x05c00bab, 0x0505fe01, 0x05fc0af9, 0x0501f05a,
+ 0x59325809, 0x0505fcfc, 0x05000057, 0x49425a0a,
+ 0x497a5c0d, 0x0001fb82, 0x59300a29, 0x90040d83,
+ 0x05040dd4, 0x0501f050, 0x813669c0, 0x05b00e03,
+ 0x050df985, 0x59300008, 0x8c000500, 0x05000003,
+ 0x05b9f86d, 0x0501f004, 0x59300203, 0x90000584,
+ 0x05b80869, 0x59325809, 0x0505fce7, 0x05000042,
+ 0x592c0208, 0x82000500, 0x000000ff, 0x90000594,
+ 0x05060dc0, 0x0509fec8, 0x0005f9f3, 0x05e5fc1d,
+ 0x4a025a08, 0x00000103, 0x59300402, 0x48025c0a,
+ 0x592c040c, 0x8c000512, 0x05000005, 0x4d2c0000,
+ 0x592e580d, 0x05b5f9a6, 0x5c025800, 0x49425a0a,
+ 0x497a580d, 0x0509fb64, 0x0001fb82, 0x0501f02a,
+ 0x59300203, 0x90000584, 0x05b8084b, 0x59325809,
+ 0x0505fcc9, 0x05000024, 0x49425a0a, 0x813669c0,
+ 0x05160b2d, 0x0509feac, 0x0005f9f3, 0x0509fb56,
+ 0x0001fb82, 0x0501f01c, 0x59300203, 0x90000591,
+ 0x0502001d, 0x59300429, 0x48026203, 0x0501f01a,
+ 0x59300203, 0x90000584, 0x05b80837, 0x59325809,
+ 0x0505fcb5, 0x05000010, 0x49425a0a, 0x0001fb82,
+ 0x0501f00d, 0x0501f00c, 0x59325819, 0x05b5f980,
+ 0x59300203, 0x90000584, 0x05b8082b, 0x05b9feea,
+ 0x59325809, 0x0505fca8, 0x05000003, 0x49425a0a,
+ 0x0001fb82, 0x05f9fbab, 0x8d3c051c, 0x05000002,
+ 0x497a600a, 0x91326430, 0x41580000, 0x81300480,
+ 0x05fc1778, 0x0501f002, 0x41526000, 0x8d3c0518,
+ 0x05000011, 0x59a80898, 0x59a80099, 0x80040480,
+ 0x0500000d, 0x81300800, 0x41540000, 0x80040480,
+ 0x05021009, 0x5930000a, 0x800001c0, 0x05fe076e,
+ 0x59300203, 0x90000588, 0x05fe076b, 0x0515fd6d,
+ 0x05fdf769, 0x5c027000, 0x5c025800, 0x5c026800,
+ 0x5c026000, 0x5c00b800, 0x1c01f000, 0x5c000000,
+ 0x4c000000, 0x4803c857, 0x480bc857, 0x480fc857,
+ 0x485bc857, 0x50080800, 0x500c0000, 0x80042580,
+ 0x05020007, 0x80081000, 0x800c1800, 0x8058b040,
+ 0x05fe07f9, 0x80000580, 0x1c01f000, 0x4803c857,
+ 0x4807c857, 0x480bc857, 0x480fc857, 0x80040480,
+ 0x05001004, 0x60040000, 0x90040d41, 0x1c01f000,
+ 0x41780000, 0x05fdf7fd, 0xb1380493, 0x05b21d77,
+ 0xb138048b, 0x05b01d75, 0x0c01f001, 0x0010a070,
+ 0x0010a070, 0x0010a070, 0x0010a070, 0x0010a06f,
+ 0x0010a06f, 0x0010a06f, 0x0010a070, 0x05b1fd6b,
+ 0x493bc857, 0x64366203, 0x493a6403, 0x42000800,
+ 0x80000000, 0x0005f6ab, 0x91380593, 0x0502000b,
+ 0x59300403, 0xb0000590, 0x05b20d60, 0x0509f823,
+ 0x05000005, 0x643a6203, 0x59a8005e, 0x48026205,
+ 0x1c01f000, 0x0005f7dc, 0x4933c857, 0x913805a7,
+ 0x05020027, 0x4933c857, 0x05f1fbe3, 0x4d3c0000,
+ 0x417a7800, 0x05c1faa3, 0x5c027800, 0x42000000,
+ 0x0010e454, 0x0515ff4f, 0x4d2c0000, 0x59325809,
+ 0x0505fc39, 0x492fc857, 0x0500000d, 0x0509fe1e,
+ 0x05e5fb74, 0x4a025a08, 0x00000103, 0x59300c02,
+ 0x48065c0a, 0x64a65a0a, 0x497a580d, 0x592c0c0c,
+ 0x84040d50, 0x48065c0c, 0x0001fb82, 0x5c025800,
+ 0x60543000, 0x41782800, 0x600c2000, 0x4d400000,
+ 0x4d440000, 0x59368c03, 0x60a68000, 0x0509fd6c,
+ 0x5c028800, 0x5c028000, 0x0005f7dc, 0x91380594,
+ 0x05020009, 0x59300403, 0xb0000c93, 0x05b21d2b,
+ 0xb0000480, 0x05b01d29, 0x4933c857, 0x4803c857,
+ 0x0c01f013, 0xb13805a1, 0x05000003, 0xb13805a0,
+ 0x05020007, 0x05f5f800, 0x05fa037a, 0x59300203,
+ 0x9000058e, 0x050405c3, 0x1c01f000, 0xb1380593,
+ 0x05000006, 0xb1380588, 0x05b20d18, 0x59300403,
+ 0xb0000590, 0x05b20d15, 0x1c01f000, 0x0010a0db,
+ 0x0010a0da, 0x0010a0da, 0x0010a0da, 0x0010a0da,
+ 0x0010a0da, 0x0010a0da, 0x0010a0da, 0x0010a0da,
+ 0x0010a0da, 0x0010a0da, 0x0010a0ed, 0x0010a0ed,
+ 0x0010a0ed, 0x0010a0ed, 0x0010a0da, 0x0010a0ed,
+ 0x0010a0da, 0x0010a0ed, 0x05b1fd00, 0x4933c857,
+ 0x05f1fb8d, 0x0505fbec, 0x000407dc, 0x4d2c0000,
+ 0x59325809, 0x0509fdd0, 0x05e5fb26, 0x4a025a08,
+ 0x00000103, 0x59300402, 0x48025c0a, 0x641a5a0a,
+ 0x497a580d, 0x0001fb82, 0x5c025800, 0x0505fcbd,
+ 0x0005f7dc, 0x4933c857, 0x05f1fb7b, 0x0005f7dc,
+ 0x05b1fcea, 0x59300008, 0x8c000536, 0x05020004,
+ 0x5930001e, 0x800001c0, 0x050a0d0c, 0x497a6205,
+ 0x59300004, 0x8c00053e, 0x0502003b, 0x0509fdca,
+ 0x050200f0, 0x59325809, 0x592c0c0c, 0x59cc2808,
+ 0x82141d00, 0x00000c00, 0x05000002, 0x59cc1809,
+ 0x84040d58, 0x48065c0c, 0x82143500, 0x00008fff,
+ 0x05020034, 0x59300008, 0x8c000536, 0x0500000f,
+ 0x60303000, 0x60443800, 0x901409c0, 0x4806580d,
+ 0x4c5c0000, 0x592cb805, 0x0009f8b5, 0x4d2c0000,
+ 0x405e5800, 0x05b5f87d, 0x5c025800, 0x497a5805,
+ 0x5c00b800, 0x0501f013, 0x59340200, 0x8c00050e,
+ 0x050200c6, 0x0009f8a5, 0x05020006, 0x64025a0a,
+ 0x59300013, 0x0509fd99, 0x80000d40, 0x05020a55,
+ 0x4a025a08, 0x00000103, 0x4806580b, 0x480e580e,
+ 0x901409c0, 0x4806580d, 0x59300c02, 0x48065c0a,
+ 0x0509fa31, 0x0509fa34, 0x0001fb82, 0x0509fd82,
+ 0x05ddf897, 0x59cc0008, 0x8c000518, 0x05060594,
+ 0x0005f7dc, 0x05f1ff84, 0x05fc07c5, 0x4d3c0000,
+ 0x600a7800, 0x0501fedc, 0x5c027800, 0x05fdf7c0,
+ 0x4817c857, 0x480fc857, 0x82180500, 0x000000ff,
+ 0x0500000d, 0x592c0208, 0x82000500, 0x000000ff,
+ 0xb0000588, 0x05000003, 0x900005a2, 0x05020006,
+ 0x592c040b, 0x800001c0, 0x05000003, 0x0509fbc6,
+ 0x0509f3fd, 0x82180d00, 0x00000c00, 0x05000007,
+ 0x59300008, 0x8c000536, 0x05020004, 0x59340200,
+ 0x8c00050e, 0x0502007c, 0x64025a0a, 0x41782000,
+ 0x8c180510, 0x05000009, 0x59cc200b, 0x801021c0,
+ 0x05000006, 0x59cc000c, 0x82000500, 0x000000ff,
+ 0x05000002, 0x4803c857, 0x48125810, 0x41780000,
+ 0x8c180512, 0x05000002, 0x59cc000a, 0x4802580f,
+ 0x80100c00, 0x40043000, 0x40043800, 0x05000026,
+ 0x9004149d, 0x05001005, 0x592c0408, 0x8c00051e,
+ 0x05000028, 0x60700800, 0x59300008, 0x8c000536,
+ 0x05000028, 0x90183403, 0x80183104, 0x901c3c03,
+ 0x801c3904, 0x9018340c, 0x901c3c11, 0x4c5c0000,
+ 0x901401c0, 0x4802580d, 0x480e580e, 0x592cb805,
+ 0x4c040000, 0x0009f8b5, 0x5c000800, 0x4c500000,
+ 0x4c540000, 0x91cca40c, 0x912cac11, 0x0501fe3a,
+ 0x5c00a800, 0x5c00a000, 0x4d2c0000, 0x405e5800,
+ 0x05b5f806, 0x5c025800, 0x497a5805, 0x5c00b800,
+ 0x05fdf79c, 0x59300008, 0x8c000536, 0x05fc078a,
+ 0x480e580e, 0x60303000, 0x60443800, 0x05fdf777,
+ 0x59300008, 0x8c000536, 0x05000020, 0x05fdf7d7,
+ 0x4c040000, 0x4c0c0000, 0x4c140000, 0x0009f8a5,
+ 0x05020006, 0x64025a0a, 0x59300013, 0x0509fd17,
+ 0x80000d40, 0x050209d3, 0x5c002800, 0x5c001800,
+ 0x4a025a08, 0x00000103, 0x4806580b, 0x480e580e,
+ 0x901409c0, 0x4806580d, 0x5c000800, 0x4c500000,
+ 0x4c540000, 0x91cca40c, 0x912cac11, 0x0501fe0e,
+ 0x5c00a800, 0x5c00a000, 0x59300008, 0x84000534,
+ 0x48026008, 0x05fdf771, 0x4c040000, 0x4c0c0000,
+ 0x4c140000, 0x0009f8a5, 0x05020006, 0x64025a0a,
+ 0x59300013, 0x0509fcf9, 0x80000d40, 0x050209b5,
+ 0x4806580b, 0x5c002800, 0x5c001800, 0x59301402,
+ 0x480a5c0a, 0x480e580e, 0x901401c0, 0x4802580d,
+ 0x0509f991, 0x5c000800, 0x0501fda5, 0x0501fdd6,
+ 0x05fdf75f, 0x592c020e, 0x8c000502, 0x05fc0783,
+ 0x592c020c, 0x8c00050e, 0x05fe0780, 0x59300013,
+ 0x800c0d80, 0x05fc077d, 0x4803c857, 0x480fc857,
+ 0x8c180514, 0x05040526, 0x80000540, 0x05fc0777,
+ 0x4807c856, 0x0505f522, 0x592c020e, 0x8c000502,
+ 0x05fc0739, 0x59300013, 0x800001c0, 0x05fc0738,
+ 0x592c020c, 0x8c00050e, 0x05fe0735, 0x0505f518,
+ 0x1c01f000, 0x59cc2006, 0x59cc2807, 0x0501f054,
+ 0x0501f053, 0x1c01f000, 0x4933c857, 0x59300004,
+ 0x8c00053e, 0x05020045, 0x59300008, 0x8c000536,
+ 0x05020004, 0x5930001e, 0x800001c0, 0x050a0c07,
+ 0x497a6205, 0x59325809, 0x592c0c0c, 0x41782800,
+ 0x41781800, 0x84040d58, 0x48065c0c, 0x41783000,
+ 0x59300008, 0x8c000536, 0x0500000f, 0x901401c0,
+ 0x4802580d, 0x60303000, 0x60443800, 0x4c5c0000,
+ 0x592cb805, 0x0009f8b5, 0x4d2c0000, 0x405e5800,
+ 0x05b1ff82, 0x5c025800, 0x497a5805, 0x5c00b800,
+ 0x0501f015, 0x59340200, 0x8c00050e, 0x05020018,
+ 0x0009f8a5, 0x05020007, 0x64025a0a, 0x59300013,
+ 0x0509fc9e, 0x80000d40, 0x4807c857, 0x05020959,
+ 0x4a025a08, 0x00000103, 0x4806580b, 0x480e580e,
+ 0x901409c0, 0x4806580d, 0x4933c857, 0x59300c02,
+ 0x48065c0a, 0x0509f934, 0x0509f937, 0x0001fb82,
+ 0x0509fc85, 0x05d9ff9a, 0x0005f7dc, 0x592c020e,
+ 0x8c000502, 0x05fc07e7, 0x59300013, 0x4803c857,
+ 0x800001c0, 0x05fc07e5, 0x592c020c, 0x8c00050e,
+ 0x05fe07e2, 0x0505f4ca, 0x05f1fe7f, 0x05fc07bb,
+ 0x4933c857, 0x1c01f000, 0x4933c857, 0x59300008,
+ 0x8c000536, 0x05b00b99, 0x0501f209, 0x4c5c0000,
+ 0x4c600000, 0x4010b800, 0x4014c000, 0x59325809,
+ 0x59300008, 0x8c000536, 0x0502000b, 0x5930001e,
+ 0x800001c0, 0x4c140000, 0x050a0bb4, 0x5c002800,
+ 0x592c020e, 0x8c000502, 0x05020033, 0x8c000500,
+ 0x05000038, 0x640a6203, 0x650e6403, 0x405c0000,
+ 0x592c0813, 0x80040c80, 0x40600000, 0x80040480,
+ 0x0500102d, 0x8060c1c0, 0x05000024, 0x59300004,
+ 0x8c00053e, 0x0502001d, 0x59300004, 0x8c00050e,
+ 0x05000007, 0x59300a23, 0x90040503, 0x4c140000,
+ 0x0c01f826, 0x5c002800, 0x05000018, 0x485e6015,
+ 0x48626013, 0x497a6205, 0x5c00c000, 0x5c00b800,
+ 0x4c140000, 0x0505fe2d, 0x5c002800, 0x05000007,
+ 0x4816602a, 0x4a02601c, 0x0010a278, 0x1c01f000,
+ 0x5930282a, 0x497a602a, 0x05b5feaf, 0x0502000c,
+ 0x59300804, 0x0005f69d, 0x4c140000, 0x05f1fe3a,
+ 0x5c002800, 0x05fc07e1, 0x5c00c000, 0x5c00b800,
+ 0x05f9f1b0, 0x5c00c000, 0x5c00b800, 0x4933c857,
+ 0x1c01f000, 0x4807c857, 0x4004c000, 0x05fdf7d2,
+ 0x4803c857, 0x05fdf7f5, 0x0010a292, 0x0010a297,
+ 0x0010a29c, 0x0010a29c, 0x59300224, 0x480350d7,
+ 0x90000408, 0x480350d6, 0x0501f00a, 0x59300224,
+ 0x480350d6, 0x90000408, 0x480350d7, 0x0501f005,
+ 0x59300224, 0x90000408, 0x480350d6, 0x480350d7,
+ 0x405c1000, 0x41780800, 0x59a800d6, 0x05edfceb,
+ 0x800409c0, 0x05020052, 0x40085000, 0x592c1001,
+ 0x800811c0, 0x0500004e, 0x58080208, 0x82000500,
+ 0x000000ff, 0xb000058a, 0x05020049, 0x48281005,
+ 0x59a800d6, 0x40601000, 0x41780800, 0x4c280000,
+ 0x05edfcda, 0x5c005000, 0x800409c0, 0x05020038,
+ 0x40041800, 0x59a800d7, 0x59300804, 0x8c040530,
+ 0x05000005, 0x59300827, 0x800800c6, 0x48000806,
+ 0x59300224, 0x800c1c00, 0x80081040, 0x05fe07fe,
+ 0x480e602c, 0x592c4801, 0x802449c0, 0x05b00b13,
+ 0x58240a09, 0x592c1815, 0x59303023, 0x8c180506,
+ 0x05000003, 0x40280000, 0x80040c00, 0x800400e0,
+ 0x80040540, 0x48026021, 0x8c18050a, 0x05020003,
+ 0x40280000, 0x800c1c00, 0x480e601f, 0x59300804,
+ 0x8c040530, 0x0500000e, 0x4c280000, 0x592c1001,
+ 0x59306827, 0x592c5a0e, 0x0005f9a1, 0x5c005000,
+ 0x802851c0, 0x05ba0b9e, 0x05020015, 0x59300827,
+ 0x58040006, 0x49780806, 0x48000810, 0x59300224,
+ 0x59303023, 0x8c18050e, 0x05000002, 0x80000580,
+ 0x48026424, 0x90000541, 0x1c01f000, 0x592c1813,
+ 0x805c0418, 0x800c0580, 0x05fc07c6, 0x4933c857,
+ 0x485fc857, 0x4863c857, 0x480fc857, 0x80000580,
+ 0x1c01f000, 0xb1380498, 0x05021063, 0xb1380480,
+ 0x05001002, 0x0c01f002, 0x1c01f000, 0x0010a317,
+ 0x0010a317, 0x0010a317, 0x0010a317, 0x0010a317,
+ 0x0010a317, 0x0010a317, 0x0010a317, 0x0010a317,
+ 0x0010a317, 0x0010a318, 0x0010a317, 0x0010a317,
+ 0x0010a317, 0x0010a317, 0x0010a322, 0x0010a317,
+ 0x0010a317, 0x0010a317, 0x0010a317, 0x0010a34d,
+ 0x0010a317, 0x0010a317, 0x0010a317, 0x05b1fac3,
+ 0x4933c857, 0x05f1fc30, 0x640a6203, 0x59a8005e,
+ 0x48026205, 0x59300013, 0x59300817, 0x80040c80,
+ 0x48066017, 0x05f1f12b, 0x4933c857, 0x05f1f929,
+ 0x4d3c0000, 0x417a7800, 0x05c1f806, 0x5c027800,
+ 0x42000000, 0x0010e454, 0x0515fcb2, 0x0505f99e,
+ 0x05000010, 0x4d2c0000, 0x59325809, 0x0509fb82,
+ 0x05e5f8d8, 0x4a025a08, 0x00000103, 0x59300402,
+ 0x48025c0a, 0x64a65a0a, 0x497a580d, 0x592c0c0c,
+ 0x84040d50, 0x48065c0c, 0x0001fb82, 0x5c025800,
+ 0x60503000, 0x41782800, 0x4d400000, 0x4d440000,
+ 0x59368c03, 0x60082000, 0x60a68000, 0x0509fad0,
+ 0x5c028800, 0x5c028000, 0x59300008, 0x8c000536,
+ 0x05000004, 0x59300004, 0x8c000516, 0x05f80085,
+ 0x0005f7dc, 0x4933c857, 0x59cc0a04, 0x48066202,
+ 0x59300809, 0x4978080d, 0x4978080e, 0x5804140c,
+ 0x84081558, 0x48080c0c, 0x59300008, 0x8c000536,
+ 0x05000004, 0x5804040c, 0x84000542, 0x48000c0c,
+ 0x1c01f000, 0xb13805a1, 0x05020014, 0x05f1f9b4,
+ 0x0501fdd0, 0x0502000c, 0x05f1fe9a, 0x05fc07ff,
+ 0x811800ca, 0x81c80c00, 0x58040138, 0x59cc0a03,
+ 0x80000040, 0x80040580, 0x05020007, 0x05f1fe8b,
+ 0x05000005, 0x59300c16, 0x84040d44, 0x48066416,
+ 0x497a6205, 0x05f1f193, 0xb13805a0, 0x05fe07fe,
+ 0x59cc0002, 0x8c000526, 0x05fe07e9, 0x05fdf7fa,
+ 0x4807c857, 0x8c04053e, 0x05020024, 0x497a5a0a,
+ 0x5930002b, 0x80000540, 0x05000019, 0x0509ff19,
+ 0x05000021, 0x497a5a0a, 0x4c040000, 0x4c080000,
0x4c0c0000, 0x4c100000, 0x4c140000, 0x40002800,
0x58141003, 0x40040000, 0x80081480, 0x48082803,
- 0x40140000, 0x05c5fda5, 0x5c002800, 0x5c002000,
- 0x5c001800, 0x5c001000, 0x5c000800, 0x592c0207,
- 0x80000540, 0x05020008, 0x0501f005, 0x592c0409,
- 0x8c00051c, 0x05000002, 0x592c0803, 0x4807c857,
- 0x64565a07, 0x1c01f000, 0x5930002b, 0x80000540,
- 0x05000007, 0x64465a07, 0x5930002b, 0x4c040000,
- 0x05c5fd8e, 0x5c000800, 0x05fdf7f7, 0x4807c856,
- 0x641e5a07, 0x1c01f000, 0xb1380498, 0x05001006,
- 0xb13805a1, 0x05000003, 0xb13805a0, 0x05c20cd4,
+ 0x40140000, 0x05b5fb83, 0x5c002800, 0x5c002000,
+ 0x5c001800, 0x5c001000, 0x5c000800, 0x592c020a,
+ 0x80000540, 0x05020008, 0x0501f005, 0x592c040c,
+ 0x8c00051c, 0x05000002, 0x592c0806, 0x4807c857,
+ 0x64565a0a, 0x1c01f000, 0x5930002b, 0x80000540,
+ 0x05000007, 0x64465a0a, 0x5930002b, 0x4c040000,
+ 0x05b5fb6c, 0x5c000800, 0x05fdf7f7, 0x4807c856,
+ 0x641e5a0a, 0x1c01f000, 0xb1380498, 0x05001006,
+ 0xb13805a1, 0x05000003, 0xb13805a0, 0x05b20a2b,
0x1c01f000, 0xb1380480, 0x05001004, 0x4d2c0000,
- 0x0c01f803, 0x5c025800, 0x1c01f000, 0x00107d3b,
- 0x00107d3b, 0x00107d3b, 0x00107d3b, 0x00107d3b,
- 0x00107d3d, 0x00107d3c, 0x00107d3b, 0x00107db5,
- 0x00107d3b, 0x00107d3b, 0x00107d3b, 0x00107d3b,
- 0x00107d3b, 0x00107d3b, 0x00107d3b, 0x00107d3b,
- 0x00107d3b, 0x00107d3b, 0x00107e77, 0x00107e9f,
- 0x00107e7e, 0x00107d3c, 0x00107ea8, 0x05c1fcb4,
- 0x1c01f000, 0x5930001e, 0x800001c0, 0x050a08aa,
- 0x59300008, 0x8c00050e, 0x05000072, 0x8c000500,
- 0x05000064, 0x8c00051c, 0x05000008, 0x84000500,
- 0x48026008, 0x59325809, 0x592c3c09, 0x841c3d58,
- 0x481e5c09, 0x0005f4b7, 0x59325809, 0x592c3c09,
+ 0x0c01f803, 0x5c025800, 0x1c01f000, 0x0010a3cf,
+ 0x0010a3cf, 0x0010a3cf, 0x0010a3cf, 0x0010a3cf,
+ 0x0010a3d1, 0x0010a3d0, 0x0010a3cf, 0x0010a44b,
+ 0x0010a3cf, 0x0010a3cf, 0x0010a3cf, 0x0010a3cf,
+ 0x0010a3cf, 0x0010a3cf, 0x0010a3cf, 0x0010a3cf,
+ 0x0010a3cf, 0x0010a3cf, 0x0010a52b, 0x0010a55c,
+ 0x0010a53b, 0x0010a3d0, 0x0010a565, 0x05b1fa0b,
+ 0x1c01f000, 0x5930001e, 0x800001c0, 0x050a0a2f,
+ 0x59300008, 0x8c00050e, 0x05000074, 0x8c000500,
+ 0x05000066, 0x8c00051c, 0x05000008, 0x84000500,
+ 0x48026008, 0x59325809, 0x592c3c0c, 0x841c3d58,
+ 0x481e5c0c, 0x0009f03f, 0x59325809, 0x592c3c0c,
0x841c3d58, 0x59300008, 0x8c00051c, 0x05fe07f4,
- 0x481e5c09, 0x60140000, 0x40000000, 0x80000040,
+ 0x481e5c0c, 0x60140000, 0x40000000, 0x80000040,
0x05fe07fe, 0x59300008, 0x8c00051c, 0x05fe07ec,
- 0x59cc0a04, 0x48066202, 0x59cc0808, 0x592c0205,
+ 0x59cc0a04, 0x48066202, 0x59cc0808, 0x592c0208,
0x82000500, 0x000000ff, 0xb0000588, 0x05000003,
- 0x900005a2, 0x0502000a, 0x497a580c, 0x82040500,
- 0x000000ff, 0x05000006, 0x592c0408, 0x800001c0,
- 0x05000003, 0x0505ff8d, 0x05c5f624, 0x900421c0,
- 0x4812580a, 0x41782000, 0x82040500, 0x00000c00,
+ 0x900005a2, 0x0502000a, 0x497a580f, 0x82040500,
+ 0x000000ff, 0x05000006, 0x592c040b, 0x800001c0,
+ 0x05000003, 0x0509f910, 0x05b5f402, 0x900421c0,
+ 0x4812580d, 0x41782000, 0x82040500, 0x00000c00,
0x05000002, 0x59cc2009, 0x82043500, 0x00000fff,
- 0x0502001e, 0x481e5c09, 0x64025a07, 0x801831c0,
- 0x05c40616, 0x41782000, 0x8c180510, 0x05000002,
- 0x59cc200b, 0x4812580d, 0x41780000, 0x8c180512,
- 0x05000002, 0x59cc000a, 0x4802580c, 0x80100c00,
- 0x05c01c67, 0x05c40609, 0x9004149d, 0x05021009,
- 0x4c500000, 0x4c540000, 0x91cca40c, 0x912cac0e,
- 0x0501fb6a, 0x5c00a800, 0x5c00a000, 0x05c5f5ff,
- 0x0501fb22, 0x05c5f5fd, 0x412c7800, 0x05c1ffe5,
- 0x05c00c57, 0x492c780a, 0x841c3d52, 0x481c7c09,
- 0x4a025a05, 0x00000103, 0x4812580b, 0x900401c0,
- 0x4802580a, 0x583c0405, 0x583c1006, 0x583c2209,
- 0x48025c05, 0x480a5806, 0x48125a09, 0x05fdf7d2,
- 0x8c000524, 0x05fc079e, 0x59325809, 0x4c000000,
- 0x592c0409, 0x8c00051c, 0x5c000000, 0x05020003,
- 0x4a026013, 0xffffffff, 0x84000524, 0x05fdf794,
- 0x1c01f000, 0x59a80030, 0x48026205, 0x59325809,
- 0x640a6203, 0x592c2409, 0x59300808, 0x4933c857,
- 0x4807c857, 0x592c0205, 0x82000500, 0x000000ff,
- 0xb0000588, 0x05000003, 0x900005a2, 0x05020003,
- 0x8c100500, 0x0506076d, 0x64025a07, 0x8c04051e,
- 0x05000030, 0x41780800, 0x497a580a, 0x592c1c0a,
- 0x59300008, 0x8c00052c, 0x05000003, 0x4a026013,
- 0x7fffffff, 0x59300013, 0x59341200, 0x497a6205,
- 0x8c08050e, 0x0502006b, 0x4807c857, 0x4806580b,
- 0x0509f8cc, 0x80000d40, 0x05fe0f0c, 0x59300402,
- 0x48025c07, 0x48065808, 0x4a025a05, 0x00000103,
- 0x4c040000, 0x592c0a09, 0x8c040512, 0x05000002,
- 0x64325a07, 0x5c000800, 0x4c040000, 0x4c0c0000,
- 0x4c100000, 0x0505fd9a, 0x0509f8b1, 0x5c002000,
- 0x5c001800, 0x5c000800, 0x8c100512, 0x05020017,
- 0x4c0c0000, 0x0505fd96, 0x0001fb5b, 0x05e1ff22,
- 0x5c001800, 0x8c0c0518, 0x0004045a, 0x0505f103,
- 0x4813c857, 0x8c100518, 0x05000044, 0x41780800,
- 0x592c1c0a, 0x820c0580, 0x00001000, 0x05fc07cd,
- 0x8c100512, 0x05fc07cb, 0x592c780a, 0x583c080b,
- 0x583c1c0a, 0x05fdf7c7, 0x4807c857, 0x592c780a,
- 0x59300402, 0x592c1405, 0x8c08051e, 0x0502000c,
- 0x592c1207, 0x48007c07, 0x48047808, 0x48087a07,
- 0x84102512, 0x48107c09, 0x4c0c0000, 0x05c1ff82,
- 0x403e5800, 0x0501face, 0x05fdf7dd, 0x48025c07,
- 0x48065808, 0x583c080d, 0x583c000c, 0x80040c00,
- 0x9004149d, 0x05001005, 0x583c1001, 0x480a5801,
- 0x49787801, 0x60700800, 0x90040c14, 0x4c0c0000,
- 0x4c500000, 0x4c540000, 0x903ca409, 0x912cac09,
- 0x4c100000, 0x4c3c0000, 0x0501fad0, 0x5c007800,
- 0x5c002000, 0x5c00a800, 0x5c00a000, 0x84102512,
- 0x48125c09, 0x403e5800, 0x05c1ff63, 0x0505fd50,
- 0x42034000, 0x0010ae99, 0x59a1d806, 0x80edd9c0,
- 0x05c00bb7, 0x48efc857, 0x58ec0008, 0x4803c857,
- 0x0801f800, 0x05fdf7b6, 0x4933c857, 0x1c01f000,
- 0x59301416, 0x480bc857, 0x8c08051c, 0x0502000e,
- 0x80000540, 0x4803c857, 0x05fc0790, 0x80042c80,
- 0x05fe178e, 0x8c080514, 0x05020005, 0x592c0810,
- 0x4807c857, 0x80040480, 0x48026018, 0x8408155c,
- 0x480a6416, 0x59301008, 0x8408151e, 0x480a6008,
- 0x4c100000, 0x4c3c0000, 0x4d400000, 0x592e8207,
- 0x64065a07, 0x0505fd2a, 0x49425a07, 0x5c028000,
- 0x5c007800, 0x5c002000, 0x497a580a, 0x8c100512,
- 0x05000005, 0x4d2c0000, 0x403e5800, 0x05c1ff32,
- 0x5c025800, 0x82102500, 0xffffedff, 0x48125c09,
- 0x59301006, 0x800811c0, 0x050400c9, 0x59a80030,
- 0x80080480, 0x050610c6, 0x0509f82d, 0x4a025a05,
- 0x00000103, 0x641a5a07, 0x497a5c0a, 0x492fc857,
- 0x0001fb5b, 0x05e1fea0, 0x0005f45a, 0x59325809,
- 0x592c0409, 0x8c000518, 0x05000003, 0x412df800,
- 0x05c5f52e, 0x1c01f000, 0x4933c857, 0x59325809,
- 0x497a580a, 0x64025a07, 0x4a025a05, 0x00000103,
- 0x59300813, 0x4807c857, 0x800409c0, 0x0502000a,
- 0x48065808, 0x59300c02, 0x48065c07, 0x0505fcf8,
- 0x0509f80f, 0x0505fcfa, 0x0001fb5b, 0x05e1fe86,
- 0x0005f45a, 0x59340200, 0x8c00050e, 0x05020007,
- 0x59300013, 0x0509f80f, 0x80000d40, 0x05fdfe4f,
- 0x48065808, 0x05fdf7f0, 0x592c0209, 0x8c00050e,
- 0x05fe07f8, 0x4933c857, 0x0505f095, 0x4933c857,
- 0x59325809, 0x812e59c0, 0x05c00b4d, 0x592c020b,
- 0x8c000502, 0x05c00b4a, 0x640a6006, 0x1c01f000,
- 0x5930001e, 0x800001c0, 0x05060f3f, 0x59300008,
- 0x4933c857, 0x4803c857, 0x8c00050e, 0x05000034,
- 0x8c000500, 0x05000026, 0x8c00051c, 0x05000009,
- 0x84000500, 0x48026008, 0x59325809, 0x592c3c09,
- 0x481fc857, 0x841c3d58, 0x481e5c09, 0x0005f4b7,
- 0x59325809, 0x592c3c09, 0x841c3d58, 0x59300008,
- 0x8c00051c, 0x05fe07f3, 0x481e5c09, 0x60140000,
- 0x40000000, 0x80000040, 0x05fe07fe, 0x59300008,
- 0x8c00051c, 0x05fe07eb, 0x592c0205, 0x82000500,
- 0x000000ff, 0xb0000588, 0x05000003, 0x900005a2,
- 0x05020003, 0x497a580c, 0x0501f002, 0x497a580a,
- 0x481e5c09, 0x64025a07, 0x05c5f4bc, 0x8c000524,
- 0x05fc07dc, 0x59325809, 0x4c000000, 0x592c0409,
- 0x8c00051c, 0x5c000000, 0x05020003, 0x4a026013,
- 0xffffffff, 0x84000524, 0x05fdf7d2, 0x1c01f000,
- 0x4933c857, 0x41780800, 0xb1380498, 0x05021009,
- 0xb1380480, 0x05001007, 0x4d2c0000, 0x59325809,
- 0x812e59c0, 0x0c020805, 0x5c025800, 0x0005f45a,
- 0x493bc857, 0x1c01f000, 0x00107f0a, 0x00107f0a,
- 0x00107f0a, 0x00107f0a, 0x00107f0a, 0x00107f0b,
- 0x00107f0a, 0x00107f0a, 0x00107f0a, 0x00107f0a,
- 0x00107f0a, 0x00107f0a, 0x00107f0a, 0x00107f0a,
- 0x00107f0a, 0x00107f0a, 0x00107f0a, 0x00107f0a,
- 0x00107f0a, 0x00107f0a, 0x00107f0e, 0x00107f0a,
- 0x00107f0a, 0x00107f0a, 0x05c1fae5, 0x59cc0808,
- 0x497a5808, 0x4807c857, 0x59300402, 0x48025c07,
- 0x4a025a05, 0x00000103, 0x900401c0, 0x4802580a,
- 0x64025a07, 0x800409c0, 0x0000035b, 0x59cc0009,
- 0x4802580b, 0x82042500, 0x00000100, 0x05000002,
- 0x59cc200b, 0x4812580d, 0x82040500, 0x00000200,
- 0x05000002, 0x59cc000a, 0x4802580c, 0x80100c00,
- 0x05c01acb, 0x0000035b, 0x9004149d, 0x05001005,
- 0x592c0405, 0x8c00051e, 0x0500000a, 0x60700800,
- 0x4c500000, 0x4c540000, 0x91cca40c, 0x912cac0e,
- 0x0501f9ca, 0x5c00a800, 0x5c00a000, 0x0001f35b,
- 0x0501f982, 0x0501f1ae, 0x83380480, 0x00000093,
- 0x05c21ab7, 0x83380480, 0x00000085, 0x05c01ab4,
- 0x0c01f001, 0x00107f4b, 0x00107f4a, 0x00107f4a,
- 0x00107f50, 0x00107f4a, 0x00107f4a, 0x00107f4a,
- 0x00107f4a, 0x00107f4a, 0x00107f4a, 0x00107f4a,
- 0x00107f4a, 0x00107f4a, 0x05c1faa5, 0x64066203,
- 0x493a6403, 0x42000800, 0x80000040, 0x0005f32e,
- 0x83300580, 0x001104b4, 0x05c20a9d, 0x4933c857,
- 0x59cc1404, 0x0505fa3e, 0x0500002c, 0x591c0203,
- 0x90000580, 0x05000029, 0x591c000a, 0x81340580,
- 0x05020026, 0x59cc1204, 0x82080580, 0x0000ffff,
- 0x05000007, 0x591c0202, 0x82000d80, 0x0000ffff,
- 0x05000003, 0x80080580, 0x0502001c, 0x4d300000,
- 0x4d1c0000, 0x411e6000, 0x0501f9db, 0x5c023800,
- 0x5c026000, 0x05000013, 0x59cc0005, 0x8c000500,
- 0x05020003, 0x0501f990, 0x0501f002, 0x640a3a03,
- 0x4a026403, 0x00000086, 0x59cc0005, 0x8c000500,
- 0x0500000c, 0x591c0416, 0x8400055a, 0x48023c16,
- 0x59300416, 0x8400055a, 0x48026416, 0x0501f005,
- 0x0501f9b8, 0x05fc07ed, 0x4a026403, 0x00000087,
- 0x4d2c0000, 0x0511f959, 0x05e5f8d6, 0x5c025800,
- 0x59340200, 0x8c00050e, 0x0500000b, 0x59cc1404,
- 0x0505fa07, 0x05000008, 0x591c0416, 0x8c00051a,
- 0x05000005, 0x4d300000, 0x411e6000, 0x0501ffb2,
- 0x5c026000, 0x1c01f000, 0x91380593, 0x0502000a,
- 0x59300403, 0x4803c857, 0x82000d80, 0x00000086,
- 0x05000015, 0x82000d80, 0x00000087, 0x05c20a50,
- 0x0501f011, 0x913805a7, 0x05000003, 0x91380594,
- 0x05c20a4b, 0x493bc857, 0x05f1f8ee, 0x0501fd4c,
- 0x05f4071f, 0x4d2c0000, 0x59325809, 0x0001fb5b,
- 0x59300a29, 0x90040d83, 0x05000e29, 0x5c025800,
- 0x05f5f717, 0x4933c857, 0x0505f91f, 0x05f60714,
- 0x0005f45a, 0x91380593, 0x05020006, 0x59300403,
- 0x4803c857, 0x82000480, 0x00000085, 0x0c01f04c,
- 0x913805a7, 0x05020040, 0x4933c857, 0x05f1f8d5,
- 0x59300416, 0x8c00051a, 0x05020002, 0x0005f45a,
- 0x4d3c0000, 0x417a7800, 0x0201f800, 0x0010ee7a,
+ 0x0502001e, 0x481e5c0c, 0x64025a0a, 0x801831c0,
+ 0x05b403f4, 0x41782000, 0x8c180510, 0x05000002,
+ 0x59cc200b, 0x48125810, 0x41780000, 0x8c180512,
+ 0x05000002, 0x59cc000a, 0x4802580f, 0x80100c00,
+ 0x05b019be, 0x05b403e7, 0x9004149d, 0x05021009,
+ 0x4c500000, 0x4c540000, 0x91cca40c, 0x912cac11,
+ 0x0501fb9d, 0x5c00a800, 0x5c00a000, 0x05b5f3dd,
+ 0x0501fb4b, 0x05b5f3db, 0x412c7800, 0x05b1fd57,
+ 0x05b009ae, 0x492c780d, 0x841c3d52, 0x481c7c0c,
+ 0x4a025a08, 0x00000103, 0x4812580e, 0x900401c0,
+ 0x4802580d, 0x583c0408, 0x583c1009, 0x583c220c,
+ 0x48025c08, 0x480a5809, 0x48125a0c, 0x583c0002,
+ 0x48025802, 0x05fdf7d0, 0x8c000524, 0x05fc079c,
+ 0x59325809, 0x4c000000, 0x592c040c, 0x8c00051c,
+ 0x5c000000, 0x05020003, 0x4a026013, 0xffffffff,
+ 0x84000524, 0x05fdf792, 0x1c01f000, 0x59a8005e,
+ 0x48026205, 0x59325809, 0x640a6203, 0x592c240c,
+ 0x59300808, 0x4933c857, 0x4807c857, 0x592c0208,
+ 0x82000500, 0x000000ff, 0xb0001db5, 0x05020006,
+ 0x592c1a0e, 0x8c0c0506, 0x05000003, 0x64025a0a,
+ 0x0501f00a, 0xb0000588, 0x05000003, 0x900005a2,
+ 0x05020003, 0x8c100500, 0x050a00e7, 0x64025a0a,
+ 0x8c04051e, 0x05000044, 0x41780800, 0x497a580d,
+ 0x592c1c0d, 0x59300008, 0x8c00052c, 0x05000003,
+ 0x4a026013, 0x7fffffff, 0x8c000536, 0x05000012,
+ 0x41782800, 0x60303000, 0x60443800, 0x4c0c0000,
+ 0x4c100000, 0x4c5c0000, 0x592cb805, 0x0009f8b5,
+ 0x4d2c0000, 0x405e5800, 0x05b1fd18, 0x5c025800,
+ 0x497a5805, 0x5c00b800, 0x5c002000, 0x5c001800,
+ 0x0501f017, 0x59300013, 0x59341200, 0x497a6205,
+ 0x8c08050e, 0x0502006e, 0x4807c857, 0x40041000,
+ 0x0509fa32, 0x480a580e, 0x80000d40, 0x05fe0eed,
+ 0x59300402, 0x48025c0a, 0x4806580b, 0x4a025a08,
+ 0x00000103, 0x4c040000, 0x592c0a0c, 0x8c040512,
+ 0x05000002, 0x64325a0a, 0x5c000800, 0x4c040000,
+ 0x4c0c0000, 0x4c100000, 0x0505fec3, 0x0509fa16,
+ 0x5c002000, 0x5c001800, 0x5c000800, 0x8c100512,
+ 0x05020017, 0x4c0c0000, 0x0505febf, 0x0001fb82,
+ 0x05d9fd23, 0x5c001800, 0x8c0c0518, 0x000407dc,
+ 0x0505f21f, 0x4813c857, 0x8c100518, 0x05000046,
+ 0x41780800, 0x592c1c0d, 0x820c0580, 0x00001000,
+ 0x05fc07b9, 0x8c100512, 0x05fc07b7, 0x592c780d,
+ 0x583c080e, 0x583c1c0d, 0x05fdf7b3, 0x4807c857,
+ 0x592c780d, 0x59300402, 0x592c1408, 0x8c08051e,
+ 0x0502000e, 0x592c120a, 0x48007c0a, 0x4804780b,
+ 0x48087a0a, 0x84102512, 0x48107c0c, 0x4c0c0000,
+ 0x4c3c0000, 0x05b1fcd6, 0x5c007800, 0x403e5800,
+ 0x0501fadd, 0x05fdf7db, 0x48025c0a, 0x4806580b,
+ 0x583c0810, 0x583c000f, 0x80040c00, 0x9004149d,
+ 0x05001005, 0x583c1001, 0x480a5801, 0x49787801,
+ 0x60700800, 0x90040c14, 0x4c0c0000, 0x4c500000,
+ 0x4c540000, 0x903ca40c, 0x912cac0c, 0x4c100000,
+ 0x4c3c0000, 0x0501fae4, 0x5c007800, 0x5c002000,
+ 0x5c00a800, 0x5c00a000, 0x84102512, 0x48125c0c,
+ 0x403e5800, 0x05b1fcb6, 0x0505fe77, 0x42034000,
+ 0x0010dceb, 0x59a1d806, 0x80edd9c0, 0x05b008ef,
+ 0x48efc857, 0x58ec0009, 0x4803c857, 0x0801f800,
+ 0x05fdf7b4, 0x4933c857, 0x1c01f000, 0x59301416,
+ 0x480bc857, 0x8c08051c, 0x0502000e, 0x80000540,
+ 0x4803c857, 0x05fc078d, 0x80042c80, 0x05fe178b,
+ 0x8c080514, 0x05020005, 0x592c0813, 0x4807c857,
+ 0x80040480, 0x48026018, 0x8408155c, 0x480a6416,
+ 0x59301008, 0x8408151e, 0x480a6008, 0x4c100000,
+ 0x4c3c0000, 0x4d400000, 0x592e820a, 0x64065a0a,
+ 0x0505fe51, 0x49425a0a, 0x5c028000, 0x5c007800,
+ 0x5c002000, 0x497a580d, 0x8c100512, 0x05000005,
+ 0x4d2c0000, 0x403e5800, 0x05b1fc85, 0x5c025800,
+ 0x82102500, 0xffffedff, 0x48125c0c, 0x59301006,
+ 0x800811c0, 0x050401e6, 0x59a8005e, 0x80080480,
+ 0x050611e3, 0x0509f990, 0x05e1fee6, 0x4a025a08,
+ 0x00000103, 0x641a5a0a, 0x497a5c0d, 0x492fc857,
+ 0x0001fb82, 0x05d9fc9e, 0x0005f7dc, 0x59325809,
+ 0x592c040c, 0x8c000518, 0x05000003, 0x412df800,
+ 0x05b5f2ec, 0x592c0208, 0x82000500, 0x000000ff,
+ 0xb0001db5, 0x05020005, 0x592c1a0e, 0x8c0c0506,
+ 0x05000002, 0x05fdf712, 0x1c01f000, 0x4933c857,
+ 0x59325809, 0x497a580d, 0x64025a0a, 0x4a025a08,
+ 0x00000103, 0x59300813, 0x4807c857, 0x800409c0,
+ 0x0502000a, 0x4806580b, 0x59300c02, 0x48065c0a,
+ 0x0505fe15, 0x0509f968, 0x0505fe17, 0x0001fb82,
+ 0x05d9fc7b, 0x0005f7dc, 0x59340200, 0x8c00050e,
+ 0x05020007, 0x59300013, 0x0509f968, 0x80000d40,
+ 0x05fdfe24, 0x4806580b, 0x05fdf7f0, 0x592c020c,
+ 0x8c00050e, 0x05fe07f8, 0x4933c857, 0x0505f1a8,
+ 0x4933c857, 0x59325809, 0x812e59c0, 0x05b0087b,
+ 0x592c020e, 0x8c000502, 0x05b00878, 0x640a6006,
+ 0x1c01f000, 0x5930001e, 0x800001c0, 0x050a089b,
+ 0x59300008, 0x4933c857, 0x4803c857, 0x8c00050e,
+ 0x05000034, 0x8c000500, 0x05000026, 0x8c00051c,
+ 0x05000009, 0x84000500, 0x48026008, 0x59325809,
+ 0x592c3c0c, 0x481fc857, 0x841c3d58, 0x481e5c0c,
+ 0x0009f03f, 0x59325809, 0x592c3c0c, 0x841c3d58,
+ 0x59300008, 0x8c00051c, 0x05fe07f3, 0x481e5c0c,
+ 0x60140000, 0x40000000, 0x80000040, 0x05fe07fe,
+ 0x59300008, 0x8c00051c, 0x05fe07eb, 0x592c0208,
+ 0x82000500, 0x000000ff, 0xb0000588, 0x05000003,
+ 0x900005a2, 0x05020003, 0x497a580f, 0x0501f002,
+ 0x497a580d, 0x481e5c0c, 0x64025a0a, 0x05b5f271,
+ 0x8c000524, 0x05fc07dc, 0x59325809, 0x4c000000,
+ 0x592c040c, 0x8c00051c, 0x5c000000, 0x05020003,
+ 0x4a026013, 0xffffffff, 0x84000524, 0x05fdf7d2,
+ 0x1c01f000, 0x4933c857, 0x41780800, 0xb1380498,
+ 0x05021009, 0xb1380480, 0x05001007, 0x4d2c0000,
+ 0x59325809, 0x812e59c0, 0x0c020805, 0x5c025800,
+ 0x0005f7dc, 0x493bc857, 0x1c01f000, 0x0010a5c7,
+ 0x0010a5c7, 0x0010a5c7, 0x0010a5c7, 0x0010a5c7,
+ 0x0010a5c8, 0x0010a5c7, 0x0010a5c7, 0x0010a5c7,
+ 0x0010a5c7, 0x0010a5c7, 0x0010a5c7, 0x0010a5c7,
+ 0x0010a5c7, 0x0010a5c7, 0x0010a5c7, 0x0010a5c7,
+ 0x0010a5c7, 0x0010a5c7, 0x0010a5c7, 0x0010a5cb,
+ 0x0010a5c7, 0x0010a5c7, 0x0010a5c7, 0x05b1f813,
+ 0x59cc0808, 0x497a580b, 0x4807c857, 0x59300402,
+ 0x48025c0a, 0x4a025a08, 0x00000103, 0x900401c0,
+ 0x4802580d, 0x64025a0a, 0x800409c0, 0x00000382,
+ 0x59cc0009, 0x4802580e, 0x82042500, 0x00000100,
+ 0x05000002, 0x59cc200b, 0x48125810, 0x82040500,
+ 0x00000200, 0x05000002, 0x59cc000a, 0x4802580f,
+ 0x80100c00, 0x05ac1ff9, 0x00000382, 0x9004149d,
+ 0x05001005, 0x592c0408, 0x8c00051e, 0x0500000a,
+ 0x60700800, 0x4c500000, 0x4c540000, 0x91cca40c,
+ 0x912cac11, 0x0501f9d4, 0x5c00a800, 0x5c00a000,
+ 0x0001f382, 0x0501f982, 0x0501f1b3, 0x83380480,
+ 0x00000093, 0x05ae1fe5, 0x83380480, 0x00000085,
+ 0x05ac1fe2, 0x0c01f001, 0x0010a608, 0x0010a607,
+ 0x0010a607, 0x0010a60d, 0x0010a607, 0x0010a607,
+ 0x0010a607, 0x0010a607, 0x0010a607, 0x0010a607,
+ 0x0010a607, 0x0010a607, 0x0010a607, 0x05adffd3,
+ 0x64066203, 0x493a6403, 0x42000800, 0x80000040,
+ 0x0005f6ab, 0x83300580, 0x00111a70, 0x05ae0fcb,
+ 0x4933c857, 0x59cc1404, 0x0505fb47, 0x0500002c,
+ 0x591c0203, 0x90000580, 0x05000029, 0x591c000a,
+ 0x81340580, 0x05020026, 0x59cc1204, 0x82080580,
+ 0x0000ffff, 0x05000007, 0x591c0202, 0x82000d80,
+ 0x0000ffff, 0x05000003, 0x80080580, 0x0502001c,
+ 0x4d300000, 0x4d1c0000, 0x411e6000, 0x0501f9e5,
+ 0x5c023800, 0x5c026000, 0x05000013, 0x59cc0005,
+ 0x8c000500, 0x05020003, 0x0501f99a, 0x0501f002,
+ 0x640a3a03, 0x4a026403, 0x00000086, 0x59cc0005,
+ 0x8c000500, 0x0500000c, 0x591c0416, 0x8400055a,
+ 0x48023c16, 0x59300416, 0x8400055a, 0x48026416,
+ 0x0501f005, 0x0501f9c2, 0x05fc07ed, 0x4a026403,
+ 0x00000087, 0x4d2c0000, 0x0511ff81, 0x05d9fecc,
+ 0x5c025800, 0x59340200, 0x8c00050e, 0x0500000b,
+ 0x59cc1404, 0x0505fb10, 0x05000008, 0x591c0416,
+ 0x8c00051a, 0x05000005, 0x4d300000, 0x411e6000,
+ 0x0505f8c5, 0x5c026000, 0x1c01f000, 0x91380593,
+ 0x0502000a, 0x59300403, 0x4803c857, 0x82000d80,
+ 0x00000086, 0x05000015, 0x82000d80, 0x00000087,
+ 0x05ae0f7e, 0x0501f011, 0x913805a7, 0x05000003,
+ 0x91380594, 0x05ae0f79, 0x493bc857, 0x05edfe06,
+ 0x0501fe65, 0x05f4056b, 0x4d2c0000, 0x59325809,
+ 0x0001fb82, 0x59300a29, 0x90040d83, 0x05000f3d,
+ 0x5c025800, 0x05f5f563, 0x4933c857, 0x0505fa2f,
+ 0x05f60560, 0x0005f7dc, 0x91380593, 0x05020006,
+ 0x59300403, 0x4803c857, 0x82000480, 0x00000085,
+ 0x0c01f04c, 0x913805a7, 0x05020040, 0x4933c857,
+ 0x05edfded, 0x59300416, 0x8c00051a, 0x05020002,
+ 0x0005f7dc, 0x4d3c0000, 0x417a7800, 0x05bdfca9,
0x5c027800, 0x60543000, 0x41782800, 0x600c2000,
0x60a68000, 0x4d400000, 0x4d440000, 0x59368c03,
- 0x0505fe2a, 0x5c028800, 0x5c028000, 0x42000000,
- 0x0010b2d6, 0x0511fa70, 0x0501fd1d, 0x0004045a,
- 0x4d2c0000, 0x59325809, 0x592c0205, 0x82000500,
- 0x000000ff, 0x90000594, 0x05020df9, 0x0505febc,
- 0x4a025a05, 0x00000103, 0x59300402, 0x48025c07,
- 0x497a580a, 0x49425a07, 0x0001fb5b, 0x5c025800,
- 0x0005f45a, 0xb13805a1, 0x05000009, 0xb13805a0,
- 0x05000007, 0x83380580, 0x00000089, 0x05000004,
- 0x83380580, 0x0000008a, 0x05f6073e, 0x05f1fd04,
- 0x05f6073c, 0x59300a03, 0x9004058e, 0x050006ad,
- 0x9004058a, 0x0500003c, 0x9004058c, 0x0500003a,
- 0x05c1f9f3, 0x91380594, 0x05fe07eb, 0x4933c857,
- 0x05f1f894, 0x59300416, 0x8c00051a, 0x05020002,
- 0x0005f45a, 0x601a8000, 0x05fdf7d0, 0x00108015,
- 0x00108014, 0x00108014, 0x00108014, 0x00108014,
- 0x00108014, 0x00108025, 0x00108014, 0x00108014,
- 0x00108014, 0x00108014, 0x00108014, 0x00108014,
- 0x05c1f9db, 0x4933c857, 0x0505f8bb, 0x0500000a,
- 0x643a6203, 0x59a80030, 0x48026205, 0x59300416,
- 0x8c00051a, 0x05020003, 0x59a8002e, 0x48026006,
- 0x1c01f000, 0x59a8002e, 0x48026006, 0x642a6203,
- 0x1c01f000, 0x4933c857, 0x0505f8ab, 0x0500000a,
- 0x643a6203, 0x59a80030, 0x48026205, 0x59300416,
- 0x8c00051a, 0x05020003, 0x59a8002e, 0x48026006,
- 0x1c01f000, 0x59a8002e, 0x48026006, 0x64326203,
- 0x1c01f000, 0x5932680a, 0x83380580, 0x00000089,
- 0x05000007, 0x83380580, 0x0000008a, 0x0500002c,
- 0x4933c857, 0x493bc857, 0x05f5f6f2, 0x4933c857,
- 0x59325809, 0x59300416, 0x8c00051a, 0x0500000b,
- 0x59300229, 0x90000583, 0x05c209a9, 0x640e6407,
- 0x59300429, 0x48026203, 0x59340200, 0x8c00050e,
- 0x050206f9, 0x1c01f000, 0x59300a29, 0x90040583,
- 0x05020007, 0x0501fca2, 0x0500000d, 0x0001fb5b,
- 0x05e1fcc1, 0x497a6009, 0x0501f009, 0x59300229,
- 0x90000581, 0x05020006, 0x59300c18, 0x900405b9,
- 0x05000019, 0x900405b5, 0x05000017, 0x59cc0c07,
- 0x4806641b, 0x59cc0a07, 0x4806621b, 0x59300203,
- 0x48026429, 0x64466203, 0x05f5f661, 0x4933c857,
- 0x59300416, 0x8c00051a, 0x0006045a, 0x59300229,
- 0x90000581, 0x0502003f, 0x59300c18, 0x900405b5,
- 0x05000005, 0x9004059e, 0x05000003, 0x900405b9,
- 0x05020038, 0x4933c857, 0x4c5c0000, 0x4c600000,
- 0x4d1c0000, 0x4130b800, 0x4004c000, 0x0505f8d0,
- 0x0502002b, 0x906005b5, 0x05020004, 0x591c0c16,
- 0x8c040502, 0x05000026, 0x05f5fe7b, 0x05000024,
- 0x491fc857, 0x4933c857, 0x906005b5, 0x05000003,
- 0x906005b9, 0x05020002, 0x4932381e, 0x585c081d,
- 0x4806601d, 0x48626403, 0x64066203, 0x64066407,
- 0x585c080a, 0x4807c857, 0x4806600a, 0x585c0c17,
- 0x4807c857, 0x48066417, 0x585c0a17, 0x4807c857,
- 0x48066217, 0x585c0a18, 0x4807c857, 0x48066218,
- 0x585c0c1b, 0x4807c857, 0x4806641b, 0x585c0a1b,
- 0x4807c857, 0x4806621b, 0x491e602a, 0x0505f81f,
- 0x42000800, 0x80000040, 0x0005fb2e, 0x405e6000,
- 0x5c023800, 0x5c00c000, 0x5c00b800, 0x0005f45a,
- 0x0501fc47, 0x05000008, 0x4d2c0000, 0x59325809,
- 0x0001fb5b, 0x59300229, 0x90000583, 0x05e00c62,
- 0x5c025800, 0x0005f45a, 0x4803c856, 0x4c500000,
- 0x4c540000, 0x412c7800, 0x4c3c0000, 0x60042800,
+ 0x0505ff87, 0x5c028800, 0x5c028000, 0x42000000,
+ 0x0010e454, 0x0515f94b, 0x0501fe37, 0x000407dc,
+ 0x4d2c0000, 0x59325809, 0x592c0208, 0x82000500,
+ 0x000000ff, 0x90000594, 0x05020f0e, 0x0509f816,
+ 0x05e1fd6c, 0x4a025a08, 0x00000103, 0x59300402,
+ 0x48025c0a, 0x497a580d, 0x49425a0a, 0x0001fb82,
+ 0x5c025800, 0x0005f7dc, 0xb13805a1, 0x05000009,
+ 0xb13805a0, 0x05000007, 0x83380580, 0x00000089,
+ 0x05000004, 0x83380580, 0x0000008a, 0x05f60585,
+ 0x05f1fa09, 0x05f60583, 0x59300a03, 0x9004058e,
+ 0x050007bd, 0x9004058a, 0x0500003c, 0x9004058c,
+ 0x0500003a, 0x05adff21, 0x91380594, 0x05fe07eb,
+ 0x4933c857, 0x05edfdac, 0x59300416, 0x8c00051a,
+ 0x05020002, 0x0005f7dc, 0x601a8000, 0x05fdf7cf,
+ 0x0010a6d2, 0x0010a6d1, 0x0010a6d1, 0x0010a6d1,
+ 0x0010a6d1, 0x0010a6d1, 0x0010a6e2, 0x0010a6d1,
+ 0x0010a6d1, 0x0010a6d1, 0x0010a6d1, 0x0010a6d1,
+ 0x0010a6d1, 0x05adff09, 0x4933c857, 0x0505f9cb,
+ 0x0500000a, 0x643a6203, 0x59a8005e, 0x48026205,
+ 0x59300416, 0x8c00051a, 0x05020003, 0x59a8005c,
+ 0x48026006, 0x1c01f000, 0x59a8005c, 0x48026006,
+ 0x642a6203, 0x1c01f000, 0x4933c857, 0x0505f9bb,
+ 0x0500000a, 0x643a6203, 0x59a8005e, 0x48026205,
+ 0x59300416, 0x8c00051a, 0x05020003, 0x59a8005c,
+ 0x48026006, 0x1c01f000, 0x59a8005c, 0x48026006,
+ 0x64326203, 0x1c01f000, 0x5932680a, 0x83380580,
+ 0x00000089, 0x05000007, 0x83380580, 0x0000008a,
+ 0x0500002c, 0x4933c857, 0x493bc857, 0x05f5f539,
+ 0x4933c857, 0x59325809, 0x59300416, 0x8c00051a,
+ 0x0500000b, 0x59300229, 0x90000583, 0x05ae0ed7,
+ 0x640e6407, 0x59300429, 0x48026203, 0x59340200,
+ 0x8c00050e, 0x0506000c, 0x1c01f000, 0x59300a29,
+ 0x90040583, 0x05020007, 0x0501fdbb, 0x0500000d,
+ 0x0001fb82, 0x05d9fab6, 0x497a6009, 0x0501f009,
+ 0x59300229, 0x90000581, 0x05020006, 0x59300c18,
+ 0x900405b9, 0x05000019, 0x900405b5, 0x05000017,
+ 0x59cc0c07, 0x4806641b, 0x59cc0a07, 0x4806621b,
+ 0x59300203, 0x48026429, 0x64466203, 0x05f5f4ad,
+ 0x4933c857, 0x59300416, 0x8c00051a, 0x000607dc,
+ 0x59300229, 0x90000581, 0x0502003f, 0x59300c18,
+ 0x900405b5, 0x05000005, 0x9004059e, 0x05000003,
+ 0x900405b9, 0x05020038, 0x4933c857, 0x4c5c0000,
+ 0x4c600000, 0x4d1c0000, 0x4130b800, 0x4004c000,
+ 0x0505f9de, 0x0502002b, 0x906005b5, 0x05020004,
+ 0x591c0c16, 0x8c040502, 0x05000026, 0x05f5fcc4,
+ 0x05000024, 0x491fc857, 0x4933c857, 0x906005b5,
+ 0x05000003, 0x906005b9, 0x05020002, 0x4932381e,
+ 0x585c081d, 0x4806601d, 0x48626403, 0x64066203,
+ 0x64066407, 0x585c080a, 0x4807c857, 0x4806600a,
+ 0x585c0c17, 0x4807c857, 0x48066417, 0x585c0a17,
+ 0x4807c857, 0x48066217, 0x585c0a18, 0x4807c857,
+ 0x48066218, 0x585c0c1b, 0x4807c857, 0x4806641b,
+ 0x585c0a1b, 0x4807c857, 0x4806621b, 0x491e602a,
+ 0x0505f92f, 0x42000800, 0x80000040, 0x0005feab,
+ 0x405e6000, 0x5c023800, 0x5c00c000, 0x5c00b800,
+ 0x0005f7dc, 0x0501fd60, 0x05000008, 0x4d2c0000,
+ 0x59325809, 0x0001fb82, 0x59300229, 0x90000583,
+ 0x05d80a57, 0x5c025800, 0x0005f7dc, 0x4803c856,
+ 0x4c5c0000, 0x4c600000, 0x4c640000, 0x4c500000,
+ 0x4c540000, 0x412cb800, 0x4d2c0000, 0x6004c000,
0x82040480, 0x00000101, 0x05001002, 0x60000802,
- 0x40043000, 0x60700800, 0x91cca40c, 0x912cac0e,
- 0x0501f836, 0x9018349c, 0x592e5801, 0x812e59c0,
- 0x05c20ccd, 0x05c1fcb3, 0x05000011, 0x80142800,
- 0x4a025805, 0x00000110, 0x492c7801, 0x90180cbd,
- 0x05021005, 0x40180800, 0x912cac06, 0x0501f827,
- 0x0501f007, 0x901834bc, 0x60f00800, 0x412c7800,
- 0x912cac06, 0x0501f821, 0x05fdf7ef, 0x5c007800,
- 0x841429c0, 0x90142d43, 0x48147a05, 0x403e5800,
- 0x5c00a800, 0x5c00a000, 0x1c01f000, 0x492fc857,
- 0x812e59c0, 0x0500000d, 0x4d2c0000, 0x4c3c0000,
- 0x592c7801, 0x803c79c0, 0x05000005, 0x497a5801,
- 0x0001fb5b, 0x403e5800, 0x05fdf7fa, 0x5c007800,
- 0x0001fb5b, 0x5c025800, 0x1c01f000, 0x4803c856,
- 0x4c580000, 0x90040403, 0x8000b104, 0x0511fa19,
- 0x5c00b000, 0x1c01f000, 0x4803c856, 0x4c580000,
- 0x90040c03, 0x8004b104, 0x0511fa12, 0x5c00b000,
- 0x1c01f000, 0x591c0c07, 0x90040583, 0x05000005,
- 0x90040582, 0x05000003, 0x9004058a, 0x05020022,
- 0x4d300000, 0x4d2c0000, 0x411e6000, 0x59325809,
- 0x0501fbe7, 0x05000019, 0x59300c07, 0x9004058a,
- 0x0500001a, 0x90040583, 0x05020007, 0x592c0a05,
- 0x82040d00, 0x000000ff, 0x90040d94, 0x05000002,
- 0x640e6229, 0x0501f814, 0x4d400000, 0x604e8000,
- 0x592c0a09, 0x84040d54, 0x05e1ffcc, 0x5c028000,
- 0x0505fa63, 0x0505fd7a, 0x0001fb5b, 0x59300229,
- 0x90000583, 0x05000cb2, 0x05f5fda1, 0x5c025800,
- 0x5c026000, 0x1c01f000, 0x644e5a07, 0x642a6229,
- 0x05fdf7f4, 0x592c0409, 0x8c000512, 0x05000008,
- 0x84000512, 0x48025c09, 0x4d2c0000, 0x592e580a,
- 0x05c1fc61, 0x5c025800, 0x497a580a, 0x1c01f000,
- 0x59cc0005, 0x8c000500, 0x0502000a, 0x591c0407,
- 0x90000582, 0x05020007, 0x591c0c03, 0x82040580,
- 0x00000085, 0x05000003, 0x82040580, 0x0000008b,
- 0x1c01f000, 0x4933c857, 0x4d3c0000, 0x600a7800,
- 0x59300407, 0x90000c92, 0x05c218a5, 0x0c01f808,
- 0x5c027800, 0x1c01f000, 0x4933c857, 0x59300407,
- 0x90000c92, 0x05c2189e, 0x0c01f001, 0x00108169,
- 0x00108166, 0x00108166, 0x00108198, 0x00108165,
- 0x00108166, 0x0010817b, 0x00108166, 0x00108165,
- 0x00108165, 0x00108f1e, 0x00108166, 0x00108166,
- 0x00108165, 0x00108165, 0x00108165, 0x00108274,
- 0x00108166, 0x05c1f88a, 0x4803c856, 0x80000580,
- 0x1c01f000, 0x4803c856, 0x8d3c0502, 0x0502000f,
- 0x0501fb87, 0x0500000b, 0x59325809, 0x0505fd2c,
- 0x41780800, 0x4d400000, 0x60168000, 0x05e1ff77,
- 0x5c028000, 0x0505fa0e, 0x0501fce6, 0x0001fb5b,
- 0x05f5fd4f, 0x90000541, 0x1c01f000, 0x4933c857,
- 0x0501fb77, 0x05000008, 0x59300809, 0x58040209,
- 0x8c000512, 0x05000004, 0x4d400000, 0x60328000,
- 0x0501f00f, 0x05e1fb1f, 0x0500000b, 0x59300416,
- 0x84000556, 0x48026416, 0x0501f80e, 0x4df00000,
- 0x59300416, 0x84000516, 0x48026416, 0x5c03e000,
- 0x1c01f000, 0x4d400000, 0x60428000, 0x050df80d,
- 0x641a6407, 0x641e6203, 0x5c028000, 0x1c01f000,
- 0x4933c857, 0x05edffa6, 0x4df00000, 0x0501f8c9,
- 0x90000c91, 0x05c21852, 0x0c01f001, 0x001081b1,
- 0x00108223, 0x001081c3, 0x00108233, 0x00108220,
- 0x001081b0, 0x001081b1, 0x001081b1, 0x001081b4,
- 0x001081b1, 0x001081b1, 0x001081b1, 0x001081b1,
- 0x001081c3, 0x001081b4, 0x001081b1, 0x001081b4,
- 0x05c1f83f, 0x5c03e000, 0x05ec0f79, 0x05fdf7b3,
- 0x5c03e000, 0x05ec0f76, 0x59300407, 0x90000583,
- 0x05fe07b1, 0x59300203, 0x9000058d, 0x05fc07ae,
- 0x8d3c0502, 0x05fe07ac, 0x4d340000, 0x5932680a,
- 0x05e1fb55, 0x5c026800, 0x05fdf7a7, 0x0505fde5,
- 0x0505fcbd, 0x59300004, 0x8400055c, 0x48026004,
- 0x4203e000, 0xb0800000, 0x6023f800, 0x05edff60,
- 0x59300407, 0x90000586, 0x0500004c, 0x8d3c0502,
- 0x0502004e, 0x497a6229, 0x59300203, 0x9000058d,
- 0x05000002, 0x640e6229, 0x0501fb1d, 0x05020004,
- 0x8d3c0500, 0x05000036, 0x0501f02e, 0x4d2c0000,
- 0x4d400000, 0x59325809, 0x0501fc7e, 0x592c0409,
- 0x8c000512, 0x05000008, 0x4d2c0000, 0x84000512,
- 0x48025c09, 0x592c080a, 0x40065800, 0x05c1fbae,
- 0x5c025800, 0x4d400000, 0x60168000, 0x592c0a09,
- 0x8c04050e, 0x05000003, 0x600a8000, 0x0501f004,
- 0x8c040512, 0x05000002, 0x60328000, 0x05e1fef7,
- 0x0505fca7, 0x5c028000, 0x0505f98d, 0x8d3c0500,
- 0x05020003, 0x0511f966, 0x05020003, 0x0001fb5b,
+ 0x4004c800, 0x60700800, 0x91cca40c, 0x912cac11,
+ 0x0501f83d, 0x9064cc9c, 0x592e5801, 0x812e59c0,
+ 0x05b20a13, 0x05b1f9f9, 0x05000011, 0x8060c000,
+ 0x4a025808, 0x00000110, 0x492cb801, 0x90640cbd,
+ 0x05021005, 0x40640800, 0x912cac09, 0x0501f82e,
+ 0x0501f007, 0x9064ccbc, 0x60f00800, 0x412cb800,
+ 0x912cac09, 0x0501f828, 0x05fdf7ef, 0x5c025800,
+ 0x8460c1c0, 0x9060c543, 0x48625a08, 0x5c00a800,
+ 0x5c00a000, 0x5c00c800, 0x5c00c000, 0x5c00b800,
+ 0x1c01f000, 0x492fc857, 0x812e59c0, 0x05000012,
+ 0x592c2802, 0x4d2c0000, 0x4c3c0000, 0x592c7801,
+ 0x803c79c0, 0x05000009, 0x497a5801, 0x4c140000,
+ 0x4c3c0000, 0x0001fb82, 0x5c025800, 0x5c002800,
+ 0x48165802, 0x05fdf7f6, 0x5c007800, 0x0001fb82,
+ 0x5c025800, 0x1c01f000, 0x4803c856, 0x4c580000,
+ 0x90040403, 0x8000b104, 0x0515f8e9, 0x5c00b000,
+ 0x1c01f000, 0x4803c856, 0x4c580000, 0x90040c03,
+ 0x8004b104, 0x0515f8e2, 0x5c00b000, 0x1c01f000,
+ 0x591c0c07, 0x90040583, 0x05000005, 0x90040582,
+ 0x05000003, 0x9004058a, 0x05020022, 0x4d300000,
+ 0x4d2c0000, 0x411e6000, 0x59325809, 0x0501fcf6,
+ 0x05000019, 0x59300c07, 0x9004058a, 0x0500001a,
+ 0x90040583, 0x05020007, 0x592c0a08, 0x82040d00,
+ 0x000000ff, 0x90040d94, 0x05000002, 0x640e6229,
+ 0x0501f814, 0x4d400000, 0x604e8000, 0x592c0a0c,
+ 0x84040d54, 0x05d9fe46, 0x5c028000, 0x0505fb76,
+ 0x0505fec9, 0x0001fb82, 0x59300229, 0x90000583,
+ 0x05000dbc, 0x05f5fbe3, 0x5c025800, 0x5c026000,
+ 0x1c01f000, 0x644e5a0a, 0x642a6229, 0x05fdf7f4,
+ 0x592c040c, 0x8c000512, 0x05000008, 0x84000512,
+ 0x48025c0c, 0x4d2c0000, 0x592e580d, 0x05b1f9a0,
+ 0x5c025800, 0x497a580d, 0x1c01f000, 0x59cc0005,
+ 0x8c000500, 0x0502000a, 0x591c0407, 0x90000582,
+ 0x05020007, 0x591c0c03, 0x82040580, 0x00000085,
+ 0x05000003, 0x82040580, 0x0000008b, 0x1c01f000,
+ 0x4933c857, 0x4d3c0000, 0x600a7800, 0x59300407,
+ 0x90000c92, 0x05ae1dc9, 0x0c01f808, 0x5c027800,
+ 0x1c01f000, 0x4933c857, 0x59300407, 0x90000c92,
+ 0x05ae1dc2, 0x0c01f001, 0x0010a830, 0x0010a82d,
+ 0x0010a82d, 0x0010a863, 0x0010a82c, 0x0010a82d,
+ 0x0010a842, 0x0010a82d, 0x0010a82c, 0x0010a82c,
+ 0x0010b73f, 0x0010a82d, 0x0010a82d, 0x0010a82c,
+ 0x0010a82c, 0x0010a82c, 0x0010a94b, 0x0010a82d,
+ 0x05adfdae, 0x4803c856, 0x80000580, 0x1c01f000,
+ 0x4803c856, 0x8d3c0502, 0x0502000f, 0x0501fc96,
+ 0x0500000b, 0x59325809, 0x0505fe7b, 0x41780800,
+ 0x4d400000, 0x60168000, 0x05d9fdf1, 0x5c028000,
+ 0x0505fb21, 0x0501fdec, 0x0001fb82, 0x05f5fb91,
+ 0x90000541, 0x1c01f000, 0x4933c857, 0x0501fc86,
+ 0x05000008, 0x59300809, 0x5804020c, 0x8c000512,
+ 0x05000004, 0x4d400000, 0x60328000, 0x0501f00f,
+ 0x05d9f86c, 0x0500000b, 0x59300416, 0x84000556,
+ 0x48026416, 0x0501f812, 0x4df00000, 0x59300416,
+ 0x84000516, 0x48026416, 0x5c03e000, 0x1c01f000,
+ 0x4d400000, 0x60428000, 0x050dfcc7, 0x641a6407,
+ 0x641e6203, 0x9140058c, 0x05020003, 0x641a6203,
+ 0x497a6006, 0x5c028000, 0x1c01f000, 0x4933c857,
+ 0x05edfcaf, 0x4df00000, 0x0501f8d5, 0x90000c91,
+ 0x05ae1d72, 0x0c01f001, 0x0010a87c, 0x0010a906,
+ 0x0010a891, 0x0010a914, 0x0010a903, 0x0010a87b,
+ 0x0010a87c, 0x0010a87c, 0x0010a87f, 0x0010a87c,
+ 0x0010a87c, 0x0010a87c, 0x0010a87c, 0x0010a891,
+ 0x0010a87f, 0x0010a87c, 0x0010a87f, 0x05adfd5f,
+ 0x5c03e000, 0x05ec0c87, 0x05fdf7af, 0x5c03e000,
+ 0x05ec0c84, 0x59300407, 0x90000583, 0x05fe07ad,
+ 0x59300203, 0x9000058d, 0x05fc07aa, 0x59300008,
+ 0x8c000500, 0x05b20fc0, 0x8d3c0502, 0x05fe07a5,
+ 0x4d340000, 0x5932680a, 0x05d9f939, 0x5c026800,
+ 0x05fdf7a0, 0x0509f8cc, 0x59300008, 0x8c000500,
+ 0x05b20fb5, 0x0505fe06, 0x59300004, 0x8400055c,
+ 0x48026004, 0x4203e000, 0xb0800000, 0x6023f800,
+ 0x05edfc68, 0x59300407, 0x90000586, 0x0500005e,
+ 0x8d3c0502, 0x05020060, 0x497a6229, 0x59300203,
+ 0x9000058d, 0x05000002, 0x640e6229, 0x0501fc22,
+ 0x05020004, 0x8d3c0500, 0x05000049, 0x0501f041,
+ 0x4d2c0000, 0x4d400000, 0x59325809, 0x0501fd7a,
+ 0x592c040c, 0x8c000512, 0x05000008, 0x4d2c0000,
+ 0x84000512, 0x48025c0c, 0x592c080d, 0x40065800,
+ 0x05b1f8e3, 0x5c025800, 0x4d400000, 0x60168000,
+ 0x592c0a0c, 0x82040500, 0x00000084, 0x0500000c,
+ 0x600a8000, 0x592c0208, 0x82000500, 0x000000ff,
+ 0xb80004b5, 0x05020009, 0x8c040504, 0x05000007,
+ 0x83428540, 0x00000200, 0x0501f004, 0x8c040512,
+ 0x05000002, 0x60328000, 0x592c0208, 0x82000500,
+ 0x000000ff, 0xb00005b5, 0x05020005, 0x592c020e,
+ 0x8c000506, 0x05000002, 0x853e7d40, 0x05d9fd54,
+ 0x0505fdd9, 0x5c028000, 0x0505fa83, 0x8d3c0500,
+ 0x05020003, 0x0515f814, 0x05020003, 0x0001fb82,
0x497a6009, 0x5c028000, 0x5c025800, 0x8d3c0500,
0x0500000a, 0x59300a29, 0x90040d83, 0x05020005,
- 0x4d340000, 0x5932680a, 0x05e1fb0f, 0x5c026800,
- 0x05f5fcbf, 0x0501f011, 0x0511f955, 0x05020004,
- 0x59300a29, 0x90040d83, 0x05000bc9, 0x4a026403,
- 0x00000085, 0x64266203, 0x640a6407, 0x42000800,
- 0x80004040, 0x0505fc6c, 0x0005fb2e, 0x4203e000,
- 0xb0800000, 0x6023f800, 0x5c03e000, 0x05ee0f24,
- 0x90000541, 0x1c01f000, 0x0505fc7d, 0x05fdf7fb,
- 0x05edff0b, 0x05c5f9b6, 0x05fdf7a1, 0x598c000b,
- 0x81300580, 0x05020003, 0x05f1fa28, 0x05020026,
- 0x0201f800, 0x0010f0f2, 0x80c40040, 0x05020005,
- 0x59300c03, 0xb0040580, 0x05fc0786, 0x05fdf794,
- 0x05edfe29, 0x0500001c, 0x05bdffbd, 0x0501f823,
- 0x05020003, 0x05f1f9e4, 0x05020017, 0x0201f800,
- 0x0010ef65, 0x80c40040, 0x0500000f, 0x05edfe1e,
- 0x05000011, 0x59300407, 0x90000583, 0x05be0fb0,
- 0x59300004, 0x9000051f, 0x90000585, 0x05be0fac,
- 0x58d400ec, 0x82000500, 0x00000f00, 0x05fe077c,
- 0x05bdffa7, 0x59300c03, 0xb0040580, 0x05fc0769,
- 0x05fdf777, 0x59300203, 0x90000c91, 0x05be1fa0,
- 0x0c01f74f, 0x0501f805, 0x60058800, 0x05000002,
- 0x60018800, 0x1c01f000, 0x417a3000, 0x60df2160,
- 0x59900005, 0x81300580, 0x05000006, 0x91932410,
- 0x811a3000, 0x91180485, 0x05fc17fa, 0x90000541,
- 0x1c01f000, 0x0501f803, 0x40018800, 0x1c01f000,
- 0x59300004, 0x8c00053e, 0x0500000c, 0x8c00050c,
- 0x0502000a, 0x8c000516, 0x05020004, 0x90000d1f,
- 0x90040585, 0x05020003, 0x600c0000, 0x0501f004,
- 0x60040000, 0x0501f002, 0x59300203, 0x1c01f000,
- 0x4933c857, 0x05edfeca, 0x4df00000, 0x59300203,
- 0x90000c91, 0x05be1f76, 0x0c01f001, 0x0010828d,
- 0x001082a0, 0x00108290, 0x0010828c, 0x0010828c,
- 0x0010828c, 0x0010828c, 0x0010828c, 0x0010828c,
- 0x0010828c, 0x0010828c, 0x0010828c, 0x0010828c,
- 0x0010828c, 0x00108290, 0x0010828c, 0x0010828c,
- 0x05bdff63, 0x5c03e000, 0x05ec0e9d, 0x05fdf6d7,
- 0x5c03e000, 0x05ec0e9a, 0x4d2c0000, 0x59325809,
- 0x59300403, 0xb0000592, 0x05c40e04, 0x0501fa5c,
- 0x05bc0f57, 0x64165a07, 0x0001fb5b, 0x05e1fd1d,
- 0x05f5fc2b, 0x5c025800, 0x90000541, 0x1c01f000,
- 0x598c000b, 0x81300580, 0x05020018, 0x59300004,
+ 0x4d340000, 0x5932680a, 0x05d9f8dd, 0x5c026800,
+ 0x05f5fae4, 0x0501f010, 0x0515f803, 0x05020004,
+ 0x59300a29, 0x90040d83, 0x05000cb6, 0x640a6407,
+ 0x42000800, 0x80004040, 0x0505fda5, 0x4a026003,
+ 0x00850009, 0x0005feab, 0x4203e000, 0xb0800000,
+ 0x6023f800, 0x5c03e000, 0x05ee0c15, 0x90000541,
+ 0x1c01f000, 0x0505fdb0, 0x05fdf7fb, 0x05edfc01,
+ 0x05b1ff45, 0x05fdf78c, 0x598c000b, 0x81300580,
+ 0x05020003, 0x05edff07, 0x05020022, 0x05edf8ab,
+ 0x05020005, 0x59300c03, 0xb0040580, 0x05fc0770,
+ 0x05fdf781, 0x05edfb1b, 0x0500001a, 0x05adfcc7,
+ 0x0501f81c, 0x05020003, 0x05edfeca, 0x05020015,
+ 0x05e9ffbe, 0x0500000f, 0x05edfb12, 0x05000011,
+ 0x59300407, 0x90000583, 0x05ae0cbc, 0x59300004,
+ 0x9000051f, 0x90000585, 0x05ae0cb8, 0x58d400ec,
+ 0x82000500, 0x00000f00, 0x05fe076b, 0x05adfcb3,
+ 0x59300c03, 0xb0040580, 0x05fc0755, 0x05fdf766,
+ 0x59300203, 0x90000c91, 0x05ae1cac, 0x0c01f73b,
+ 0x417a3000, 0x60df2160, 0x59900005, 0x81300580,
+ 0x05000006, 0x91932410, 0x811a3000, 0x91180485,
+ 0x05fc17fa, 0x90000541, 0x1c01f000, 0x59300004,
+ 0x8c00053e, 0x0500000c, 0x8c00050c, 0x0502000a,
+ 0x8c000516, 0x05020004, 0x90000d1f, 0x90040585,
+ 0x05020003, 0x600c0000, 0x0501f004, 0x60040000,
+ 0x0501f002, 0x59300203, 0x1c01f000, 0x4933c857,
+ 0x05edfbc7, 0x4df00000, 0x59300203, 0x90000c91,
+ 0x05ae1c8a, 0x0c01f001, 0x0010a964, 0x0010a975,
+ 0x0010a967, 0x0010a963, 0x0010a963, 0x0010a963,
+ 0x0010a963, 0x0010a963, 0x0010a963, 0x0010a963,
+ 0x0010a963, 0x0010a963, 0x0010a963, 0x0010a963,
+ 0x0010a967, 0x0010a963, 0x0010a963, 0x05adfc77,
+ 0x5c03e000, 0x05ec0b9f, 0x05fdf6c7, 0x5c03e000,
+ 0x05ec0b9c, 0x4d2c0000, 0x05b5fd9f, 0x59325809,
+ 0x0501fb5d, 0x05ac0c6d, 0x64165a0a, 0x0001fb82,
+ 0x05d9fb00, 0x05f5fa5f, 0x5c025800, 0x90000541,
+ 0x1c01f000, 0x598c000b, 0x81300580, 0x05020014,
+ 0x59300004, 0x8c000520, 0x05000004, 0x84000520,
+ 0x48026004, 0x0501f014, 0x42001000, 0x0010e387,
+ 0x50081000, 0x58080002, 0x82000580, 0x00000100,
+ 0x05000005, 0x05b5fd84, 0x05edf830, 0x05ae0c53,
+ 0x05fdf7df, 0x05edfe87, 0x0502000a, 0x59300004,
0x8c000520, 0x05000004, 0x84000520, 0x48026004,
- 0x0501f018, 0x42001000, 0x0010b20e, 0x50081000,
- 0x58080002, 0x82000580, 0x00000100, 0x05000009,
- 0x5808000b, 0x81300580, 0x05be0f3d, 0x0201f800,
- 0x0010f0f2, 0x80c40040, 0x05be0f39, 0x05fdf7d9,
- 0x05f1f996, 0x0502000c, 0x59300004, 0x8c000520,
- 0x05000004, 0x84000520, 0x48026004, 0x05fdf7d1,
- 0x0201f800, 0x0010f0f2, 0x80c40040, 0x05fc07cd,
- 0x05bdff2b, 0x59300203, 0x90000c91, 0x05be1f28,
- 0x0c01f7b3, 0x4d340000, 0x4d240000, 0x5932481d,
- 0x5932680a, 0x59300407, 0x4933c857, 0x4803c857,
- 0x90000c92, 0x05be1f1e, 0x0c01f804, 0x5c024800,
- 0x5c026800, 0x1c01f000, 0x001082eb, 0x0010830e,
- 0x00108446, 0x0010f70c, 0x0010843d, 0x00108442,
- 0x00109994, 0x001082f2, 0x00108439, 0x001082e8,
- 0x001084a3, 0x001082e8, 0x001082e8, 0x001082e8,
- 0x001082e8, 0x00020c5a, 0x00108cb3, 0x00108cb3,
- 0x05bdff07, 0x0501fb15, 0x05f802ce, 0x1c01f000,
- 0x05edfe53, 0x05edfda7, 0x05edfe3d, 0x0005f45a,
- 0x64066006, 0x1c01f000, 0x4d340000, 0x4c5c0000,
- 0x59300203, 0x90000591, 0x05020014, 0x5932680a,
- 0x4130b800, 0x0005fc3d, 0x0500000f, 0x64066203,
- 0x647a6403, 0x585c041b, 0x4802641b, 0x585c021b,
- 0x4802621b, 0x4936600a, 0x585c001d, 0x4802601d,
- 0x0501fdbe, 0x64066407, 0x42000800, 0x80000040,
- 0x0005fb2e, 0x405e6000, 0x0005fc5a, 0x5c00b800,
- 0x5c026800, 0x1c01f000, 0x42000000, 0x0010b2e1,
- 0x050dff35, 0x050dfe60, 0x59300203, 0x90000c91,
- 0x05be1edb, 0x4803c857, 0x0c01f001, 0x00108328,
- 0x001082f0, 0x00108329, 0x00108328, 0x00108329,
- 0x00108329, 0x001082ec, 0x00108328, 0x001082e9,
- 0x00108328, 0x00108328, 0x00108328, 0x00108328,
- 0x00108328, 0x00108329, 0x00108328, 0x00108328,
- 0x05bdfec7, 0x83340580, 0x0010ce8f, 0x05f4039c,
- 0x4d2c0000, 0x59340400, 0x82000500, 0x000000ff,
- 0x90000c8c, 0x05be1ebe, 0x59303403, 0xb0180d91,
+ 0x05fdf7d7, 0x05edf825, 0x05fc07d5, 0x05adfc47,
+ 0x59300203, 0x90000c91, 0x05ae1c44, 0x0c01f7bb,
+ 0x4d340000, 0x4d240000, 0x5932481d, 0x5932680a,
+ 0x59300407, 0x4933c857, 0x4803c857, 0x90000c92,
+ 0x05ae1c3a, 0x0c01f804, 0x5c024800, 0x5c026800,
+ 0x1c01f000, 0x0010a9ba, 0x0010aab5, 0x0010ac24,
+ 0x0010a9c1, 0x0010ac09, 0x0010ac20, 0x0010c515,
+ 0x0010aa99, 0x0010ac05, 0x0010a9b7, 0x0010ac80,
+ 0x0010a9b7, 0x0010a9b7, 0x0010a9b7, 0x0010a9b7,
+ 0x00020fdc, 0x0010b4cc, 0x0010b4cc, 0x05adfc23,
+ 0x0501fc12, 0x05f8010a, 0x1c01f000, 0x05edfb58,
+ 0x05edfaad, 0x05edfb47, 0x0005f7dc, 0x64066006,
+ 0x1c01f000, 0x42000000, 0x0010e463, 0x0511fe19,
+ 0x4d2c0000, 0x4d400000, 0x417a5800, 0x0501fb02,
+ 0x05000007, 0x0505ff94, 0x59325809, 0x592c020c,
+ 0x8400054c, 0x48025a0c, 0x601a8000, 0x05edfb44,
+ 0x05fdff6b, 0x4803c857, 0x90000c91, 0x05ae1c07,
+ 0x0c01f805, 0x05edfb2f, 0x5c028000, 0x5c025800,
+ 0x1c01f000, 0x0010aa98, 0x0010a9eb, 0x0010a9f7,
+ 0x0010aa3a, 0x0010aa68, 0x0010a9ea, 0x0010a9ba,
+ 0x0010a9ba, 0x0010a9ba, 0x0010a9ea, 0x0010a9ea,
+ 0x0010a9ea, 0x0010a9ea, 0x0010a9f7, 0x0010a9eb,
+ 0x0010a9ea, 0x0010aa3a, 0x05adfbf0, 0x598c000b,
+ 0x4803c857, 0x81300580, 0x05020003, 0x05edfe21,
+ 0x0502005a, 0x05e9ffc5, 0x0500005d, 0x4803c856,
+ 0x05edfa38, 0x05000055, 0x05adfbe4, 0x497a6229,
+ 0x812e59c0, 0x05ac0be1, 0x592c0a08, 0x4807c857,
+ 0x82040d00, 0x000000ff, 0x90040594, 0x05000018,
+ 0xb00405b5, 0x05020014, 0x59300008, 0x8c000500,
+ 0x05020064, 0x592c0a0e, 0x8c040506, 0x0500000e,
+ 0x592c0c0c, 0x4c040000, 0x592c0a0c, 0x05d9fc20,
+ 0x5c000800, 0x8c040510, 0x05000003, 0x4a025c0c,
+ 0x00000100, 0x0001fb82, 0x0501fb96, 0x497a6009,
+ 0x05f5f1bc, 0x640e6229, 0x0505fc9b, 0x592c0c0c,
+ 0x4c040000, 0x592c0a0c, 0x05d9fc11, 0x5c000800,
+ 0x8c040510, 0x05000003, 0x4a025c0c, 0x00000100,
+ 0x0505f93d, 0x0511fed0, 0x05020006, 0x0001fb82,
+ 0x59300a29, 0x90040d83, 0x05000b82, 0x497a6009,
+ 0x4a026403, 0x00000085, 0x64266203, 0x640a6407,
+ 0x59300804, 0x82040d00, 0x00000100, 0x0505fc6c,
+ 0x82040d40, 0x80004040, 0x48066004, 0x4203e000,
+ 0xb0800000, 0x6023f800, 0x05edface, 0x42000800,
+ 0x80004040, 0x0005f6ab, 0x05fdfef6, 0x05020003,
+ 0x05edfda4, 0x0502000d, 0x05e9fe98, 0x05000006,
+ 0x05edf9ec, 0x05000009, 0x59300004, 0x4803c857,
+ 0x05fdf7b3, 0x59300c03, 0x4807c857, 0xb0040580,
+ 0x05000007, 0x05fdf7ae, 0x59300203, 0x4803c857,
+ 0x90000c91, 0x05ae1b8d, 0x0c01f78b, 0x05edfab5,
+ 0x812e59c0, 0x05000015, 0x0505fc5f, 0x592c0c0c,
+ 0x4c040000, 0x592c0a0c, 0x05d9fbd5, 0x5c000800,
+ 0x8c040510, 0x05000003, 0x4a025c0c, 0x00000100,
+ 0x0505f901, 0x0001fb82, 0x59300203, 0x9000058d,
+ 0x05000006, 0x05edfaa3, 0x4d340000, 0x5932680a,
+ 0x05d5ff63, 0x5c026800, 0x05f5f96a, 0x0501f031,
+ 0x812e59c0, 0x05ac0b71, 0x0501fee9, 0x05020003,
+ 0x05b1fddd, 0x05fdf78a, 0x05edfa96, 0x592c020c,
+ 0x8400050c, 0x48025a0c, 0x592c040a, 0x800000c2,
+ 0x800008c4, 0x80040c00, 0x48066006, 0x42000000,
+ 0x10000000, 0x41300800, 0x05b1fab8, 0x05000013,
+ 0x592c020c, 0x8c00051c, 0x05020005, 0x8400055c,
+ 0x48025a0c, 0x640a6006, 0x0501f016, 0x59c80001,
+ 0x80000540, 0x05020006, 0x42000000, 0x40000000,
+ 0x41300800, 0x05b1faa9, 0x0501f004, 0x4d300000,
+ 0x05b5fd38, 0x5c026000, 0x59300008, 0x8c000536,
+ 0x05020004, 0x59300203, 0x90000584, 0x05020005,
+ 0x4d380000, 0x61227000, 0x0009f800, 0x5c027000,
+ 0x1c01f000, 0x4d340000, 0x4c5c0000, 0x59300203,
+ 0x90000591, 0x05020014, 0x5932680a, 0x4130b800,
+ 0x0005ffbf, 0x0500000f, 0x64066203, 0x647a6403,
+ 0x585c041b, 0x4802641b, 0x585c021b, 0x4802621b,
+ 0x4936600a, 0x585c001d, 0x4802601d, 0x0501fde4,
+ 0x64066407, 0x42000800, 0x80000040, 0x0005feab,
+ 0x405e6000, 0x0005ffdc, 0x5c00b800, 0x5c026800,
+ 0x1c01f000, 0x42000000, 0x0010e45f, 0x0511fd25,
+ 0x0511fb9c, 0x59300203, 0x90000c91, 0x05ae1b1f,
+ 0x4803c857, 0x0c01f001, 0x0010aacf, 0x0010a9bf,
+ 0x0010aad0, 0x0010aacf, 0x0010aad0, 0x0010aad0,
+ 0x0010a9bb, 0x0010aacf, 0x0010a9b8, 0x0010aacf,
+ 0x0010aacf, 0x0010aacf, 0x0010aacf, 0x0010aacf,
+ 0x0010aad0, 0x0010aacf, 0x0010aacf, 0x05adfb0b,
+ 0x83340580, 0x00110210, 0x05f400fe, 0x4d2c0000,
+ 0x59340400, 0x82000500, 0x000000ff, 0x90000c8c,
+ 0x05ae1b02, 0x4c000000, 0x0505fdc5, 0x5c000000,
+ 0x0502000a, 0x59300009, 0x800001c0, 0x05020004,
+ 0x05f5f8f0, 0x0505fdc5, 0x0501f010, 0x05f5ffe0,
+ 0x05f5f8ec, 0x0501f00d, 0x59303403, 0xb0180d91,
0x0500000c, 0x90180d84, 0x05020003, 0x60040000,
0x0501f004, 0x90180d80, 0x05020002, 0x60040000,
0x4803c857, 0x0c01f823, 0x5c025800, 0x1c01f000,
- 0x42000000, 0x0010b2dd, 0x050dff03, 0x05cdfc3d,
+ 0x42000000, 0x0010e45b, 0x0511fce6, 0x05bdfb20,
0x59340412, 0x82000500, 0x000000ff, 0x05000016,
- 0x80000040, 0x48026c12, 0x4d300000, 0x05f5fbb2,
+ 0x80000040, 0x48026c12, 0x4d300000, 0x05f5f904,
0x5c000000, 0x0500000f, 0x641c0407, 0x4a000006,
0x00000398, 0x49238830, 0x4a038832, 0xffffffff,
0x4926601d, 0x497a6009, 0x4936600a, 0x64066407,
- 0x64066203, 0x65466403, 0x5c025800, 0x05edf489,
- 0x40026000, 0x5c025800, 0x60042800, 0x0505f426,
- 0x0010836c, 0x001083f8, 0x0010836d, 0x001083a4,
- 0x0010836d, 0x0010840e, 0x0010836d, 0x00108374,
- 0x0010836c, 0x0010840e, 0x0010836c, 0x0010837f,
- 0x05bdfe83, 0x59300403, 0x90000d96, 0x05000033,
- 0x90000d84, 0x05000031, 0x90000d82, 0x0500002f,
- 0x0501fa8a, 0x0500002d, 0x59300403, 0x90000da2,
- 0x05000098, 0x90000db9, 0x0500009f, 0x90000db5,
- 0x0500009d, 0x90000d9e, 0x05000025, 0x0501f974,
- 0x05000005, 0x0501fffd, 0x05020003, 0x05e1fa24,
- 0x0501f01e, 0x59300403, 0x90000d81, 0x0502000f,
- 0x5930081d, 0x58040200, 0x8c000500, 0x050403f5,
+ 0x64066203, 0x65466403, 0x5c025800, 0x05e9f562,
+ 0x40026000, 0x5c025800, 0x60042800, 0x0505f626,
+ 0x0010ab20, 0x0010abba, 0x0010ab21, 0x0010ab57,
+ 0x0010ab21, 0x0010abcf, 0x0010ab21, 0x0010ab28,
+ 0x0010ab20, 0x0010abcf, 0x0010ab20, 0x0010ab33,
+ 0x05adfaba, 0x59300403, 0x90000d96, 0x05000032,
+ 0x90000d84, 0x05000030, 0x90000d82, 0x0500002e,
+ 0x0501faa2, 0x0500002c, 0x59300403, 0x90000da2,
+ 0x050000a5, 0x90000db9, 0x050000ac, 0x90000db5,
+ 0x050000aa, 0x90000d9e, 0x05000024, 0x0501f996,
+ 0x05000005, 0x0505f818, 0x05020003, 0x05d5ff19,
+ 0x0501f01d, 0x59300403, 0x90000d81, 0x0502000f,
+ 0x5930081d, 0x58040200, 0x8c000500, 0x050405f5,
0x5930080a, 0x58040403, 0x82000580, 0x000007fe,
- 0x05020004, 0x60042800, 0x0505fbf3, 0x0005f45a,
- 0x05e1f9e3, 0x0500000d, 0x59340403, 0x82000480,
- 0x000007f0, 0x0502100a, 0x4d3c0000, 0x417a7800,
- 0x0201f800, 0x0010ee7a, 0x5c027800, 0x42000000,
- 0x0010b2d6, 0x050dfea4, 0x05f9fa16, 0x05f5f324,
- 0x0501f94f, 0x05000003, 0x0501ffd8, 0x05000083,
- 0x59300c03, 0x90040596, 0x05000049, 0x90040582,
- 0x0502002d, 0x59a8021b, 0x8c000502, 0x0502000c,
- 0x05e1ff82, 0x0502000a, 0x05e1ffa1, 0x05020004,
- 0x60040000, 0x05e1ff51, 0x0501f074, 0x64075014,
- 0x6006d800, 0x05e1fef7, 0x0501f070, 0x59340200,
- 0x8c000508, 0x05000007, 0x84000508, 0x48026a00,
- 0x59300416, 0x84000510, 0x48026416, 0x0501f011,
- 0x59340412, 0x82000500, 0x000000ff, 0x05000012,
- 0x80000040, 0x48026c12, 0x5932481d, 0x497a6205,
- 0x4d300000, 0x05f5fb30, 0x5c000000, 0x05000009,
- 0x49780009, 0x641c0407, 0x4a000006, 0x00000398,
- 0x4926601d, 0x4936600a, 0x64066407, 0x0501f01c,
- 0x40026000, 0x59300403, 0x90000d82, 0x0502000d,
- 0x59340403, 0x82000580, 0x000007fe, 0x05020007,
- 0x59a8021b, 0x84000540, 0x4803521b, 0x05ddfb37,
- 0x05f9f9d4, 0x0501f00c, 0x600c0002, 0x05f5fd71,
- 0x05f9f9d0, 0x4d3c0000, 0x417a7800, 0x0201f800,
- 0x0010ee7a, 0x5c027800, 0x42000000, 0x0010b2d6,
- 0x050dfe55, 0x05cdf8e2, 0x05f5f2d5, 0x600c0800,
- 0x05ddfdca, 0x64066203, 0x640a6403, 0x05edf3ed,
- 0x0501f8fb, 0x05fe07a9, 0x05cdf8d9, 0x4d3c0000,
- 0x417a7800, 0x0201f800, 0x0010ee7a, 0x5c027800,
- 0x42000000, 0x0010b2d6, 0x050dfe43, 0x60603000,
- 0x41782800, 0x60002000, 0x4d400000, 0x4d440000,
- 0x59368c03, 0x60a68000, 0x0505f9f0, 0x5c028800,
- 0x5c028000, 0x05f5f2ba, 0x05e1f999, 0x05fdf7d9,
- 0x42000000, 0x0010b2e0, 0x050dfe33, 0x60140002,
- 0x05f5fd44, 0x05fc07d3, 0x05f5fd5c, 0x05fe07d1,
- 0x1c01f000, 0x59300c03, 0x0501fd31, 0x0006045a,
- 0x916c0583, 0x05000003, 0x640a6006, 0x1c01f000,
- 0x59300403, 0x48026418, 0x64066229, 0x4a026403,
- 0x00000085, 0x64266203, 0x640a6407, 0x42000800,
- 0x80000040, 0x0005f32e, 0x05f9f98e, 0x4d3c0000,
- 0x417a7800, 0x0201f800, 0x0010ee7a, 0x5c027800,
- 0x42000000, 0x0010b2d6, 0x050dfe13, 0x497a6009,
+ 0x05020004, 0x60042800, 0x0505fdf3, 0x0005f7dc,
+ 0x05d5fedd, 0x0500000c, 0x59340403, 0x82000480,
+ 0x000007f0, 0x05021009, 0x4d3c0000, 0x417a7800,
+ 0x05b9ffdc, 0x5c027800, 0x42000000, 0x0010e454,
+ 0x0511fc88, 0x05f5ff6e, 0x05f5f07a, 0x0501f972,
+ 0x05000003, 0x0501fff4, 0x05000091, 0x59300c03,
+ 0x90040596, 0x05000058, 0x90040582, 0x05020034,
+ 0x59a80249, 0x8c000502, 0x0502000f, 0x05d9fd4b,
+ 0x0502000d, 0x59a80006, 0x8c000506, 0x0502000a,
+ 0x05d9fd58, 0x05020004, 0x60040000, 0x05d9fd1c,
+ 0x0501f07f, 0x64075042, 0x6006d800, 0x05d9fcc2,
+ 0x0501f07b, 0x59340200, 0x8c000508, 0x05000007,
+ 0x84000508, 0x48026a00, 0x59300416, 0x84000510,
+ 0x48026416, 0x0501f014, 0x59340412, 0x82000500,
+ 0x000000ff, 0x05000016, 0x80000040, 0x48026c12,
+ 0x5932481d, 0x59300c29, 0x4c040000, 0x497a6205,
+ 0x4d300000, 0x05f5f87e, 0x5c000000, 0x5c000800,
+ 0x0500000a, 0x49780009, 0x641c0407, 0x4a000006,
+ 0x00000398, 0x4926601d, 0x48066429, 0x4936600a,
+ 0x64066407, 0x0501f024, 0x40026000, 0x59300403,
+ 0x90000d82, 0x05020013, 0x59340403, 0x82000580,
+ 0x000007fe, 0x0502000c, 0x59a80249, 0x84000540,
+ 0x48035249, 0x05d9fd11, 0x05fc07ca, 0x4a035045,
+ 0x0000ffff, 0x0505ff00, 0x05d1fe66, 0x05f5ff20,
+ 0x0501f00f, 0x600c0002, 0x05f5fa82, 0x05f40029,
+ 0x05f5ff1b, 0x4d3c0000, 0x417a7800, 0x05b9ff81,
+ 0x5c027800, 0x42000000, 0x0010e454, 0x0511fc2d,
+ 0x59300429, 0x900005a1, 0x050406d0, 0x05b9ffc0,
+ 0x05f5f01c, 0x600c0800, 0x05d5f937, 0x64066203,
+ 0x640a6403, 0x05e9f4b8, 0x0501f90f, 0x05fe079a,
+ 0x05b9ffb7, 0x4d3c0000, 0x417a7800, 0x05b9ff6d,
+ 0x5c027800, 0x42000000, 0x0010e454, 0x0511fc19,
+ 0x60603000, 0x41782800, 0x60002000, 0x4d400000,
+ 0x4d440000, 0x59368c03, 0x60a68000, 0x0505fa48,
+ 0x5c028800, 0x5c028000, 0x05f5f002, 0x05d5fe81,
+ 0x05fdf7d8, 0x42000000, 0x0010e45e, 0x0511fc09,
+ 0x60140002, 0x05f5fa53, 0x05fc07d2, 0x05f5fa70,
+ 0x05fe07d0, 0x1c01f000, 0x59300c03, 0x0501fd3b,
+ 0x000607dc, 0x916c0583, 0x05000003, 0x640a6006,
+ 0x1c01f000, 0x59300403, 0x48026418, 0x64066229,
+ 0x4a026403, 0x00000085, 0x64266203, 0x640a6407,
+ 0x42000800, 0x80000040, 0x0005f6ab, 0x0511fd40,
+ 0x0500000b, 0x4d400000, 0x4d200000, 0x05bdfa28,
+ 0x60068000, 0x60001802, 0x60042800, 0x60040000,
+ 0x05d9fa5c, 0x5c024000, 0x5c028000, 0x05f5fecc,
+ 0x4d3c0000, 0x417a7800, 0x05b9ff32, 0x5c027800,
+ 0x42000000, 0x0010e454, 0x0511fbde, 0x497a6009,
0x641e6407, 0x4a026006, 0x00000398, 0x497a6205,
- 0x1c01f000, 0x42000000, 0x0010b2e7, 0x050dfe0a,
- 0x05fdf6d2, 0x42000000, 0x0010b2e2, 0x050dfe06,
- 0x050dfd31, 0x05f5f286, 0x42000000, 0x0010b2e4,
- 0x050dfe01, 0x1c01f000, 0x42000000, 0x0010b2e3,
- 0x050dfdfd, 0x59300203, 0x90000c91, 0x05be1da4,
- 0x4803c857, 0x0c01f001, 0x0010845f, 0x001082f0,
- 0x0010845f, 0x0010845f, 0x0010845f, 0x0010845f,
- 0x0010845f, 0x0010845f, 0x0010845f, 0x001082f0,
- 0x00108460, 0x001082f0, 0x0010846a, 0x0010845f,
- 0x00108460, 0x0010845f, 0x0010845f, 0x05bdfd90,
- 0x59300403, 0x82000580, 0x0000008b, 0x05000007,
- 0x4a026403, 0x0000008b, 0x642e6203, 0x42000800,
- 0x80004040, 0x0005f32e, 0x59300a29, 0x0501f888,
- 0x0500000b, 0x4d2c0000, 0x59325809, 0x641a5a07,
- 0x497a5c0a, 0x0001fb5b, 0x59300a29, 0x90040d83,
- 0x05e008a1, 0x5c025800, 0x497a6009, 0x4d3c0000,
- 0x417a7800, 0x0201f800, 0x0010ee7a, 0x5c027800,
- 0x60443000, 0x050dfc21, 0x42000000, 0x0010b2d6,
- 0x050dfdc5, 0x4c5c0000, 0x4130b800, 0x05f5fa7a,
- 0x05000009, 0x4936600a, 0x4926601d, 0x0501fc3b,
- 0x4d300000, 0x405e6000, 0x05f5fa3d, 0x5c026000,
- 0x0501f002, 0x405e6000, 0x5c00b800, 0x497a6009,
- 0x64066407, 0x64066403, 0x59240400, 0x8c00050a,
- 0x0502000b, 0x64126407, 0x641e6203, 0x6406642c,
- 0x60103000, 0x4d400000, 0x60a68000, 0x41782800,
- 0x0509fe90, 0x5c028000, 0x1c01f000, 0x602c0800,
- 0x05ddfd1e, 0x64066203, 0x05edf342, 0x42000000,
- 0x0010b2e9, 0x050dfda0, 0x59300203, 0x90000c91,
- 0x05be1d47, 0x4803c857, 0x0c01f001, 0x001084cc,
- 0x001084bc, 0x001084be, 0x001084cd, 0x001084bd,
- 0x001084bc, 0x001084bc, 0x001084bc, 0x001084bc,
- 0x001084bc, 0x001084bc, 0x001084bc, 0x001084bc,
- 0x001084bc, 0x001084bc, 0x001084bc, 0x001084bc,
- 0x05bdfd33, 0x05c1ff1a, 0x4d2c0000, 0x59325809,
- 0x641a5a07, 0x0001fb5b, 0x5c025800, 0x497a6009,
- 0x642a6229, 0x4a026403, 0x00000085, 0x64266203,
- 0x640a6407, 0x42000800, 0x80004040, 0x0005f32e,
- 0x1c01f000, 0x05edfc72, 0x4df00000, 0x05fdfd87,
- 0x05020003, 0x05edff48, 0x0502000a, 0x0201f800,
- 0x0010ef65, 0x80c40040, 0x05020004, 0x5c03e000,
- 0x05edfc53, 0x05fdf7e5, 0x05edfb7f, 0x05be0d14,
- 0x5c03e000, 0x05edfc4e, 0x59300203, 0x90000d83,
- 0x05bc0d0f, 0x90000c91, 0x05be1d0d, 0x0c01f7c8,
- 0x59a8000d, 0x59a80864, 0x80040400, 0x80080480,
- 0x05021003, 0x90000541, 0x1c01f000, 0x480bc857,
- 0x80000580, 0x1c01f000, 0x0501f805, 0x60018800,
- 0x05000002, 0x60058800, 0x1c01f000, 0x4c040000,
- 0x59300809, 0x59a8000c, 0x80040480, 0x05001007,
- 0x59a8000a, 0x80040480, 0x05021004, 0x800409c0,
- 0x5c000800, 0x1c01f000, 0x800409c0, 0x05be0cf0,
- 0x4803c856, 0x05fdf7fb, 0x4803c856, 0x4d300000,
- 0x0005fc3d, 0x05000007, 0x0501f828, 0x4d380000,
- 0x612e7000, 0x0005fc78, 0x5c027000, 0x90000541,
+ 0x1c01f000, 0x42000000, 0x0010e465, 0x0511fbd5,
+ 0x05fdf6ad, 0x59300403, 0x900005b6, 0x05020005,
+ 0x64066203, 0x42000800, 0x80000040, 0x0005f6ab,
+ 0x42000000, 0x0010e460, 0x0511fbca, 0x0511fa97,
+ 0x0502000a, 0x59300009, 0x800001c0, 0x05020004,
+ 0x05f1ffb8, 0x0505fc8d, 0x0501f003, 0x05f5fea8,
+ 0x05f1ffb4, 0x1c01f000, 0x0511fa36, 0x05f1f7b1,
+ 0x42000000, 0x0010e462, 0x0511fbba, 0x1c01f000,
+ 0x42000000, 0x0010e461, 0x0511fbb6, 0x59300203,
+ 0x90000c91, 0x05ae19b1, 0x4803c857, 0x0c01f001,
+ 0x0010ac3d, 0x0010a9bf, 0x0010ac3d, 0x0010ac3d,
+ 0x0010ac3d, 0x0010ac3d, 0x0010ac3d, 0x0010ac3d,
+ 0x0010ac3d, 0x0010a9bf, 0x0010ac3e, 0x0010a9bf,
+ 0x0010ac48, 0x0010ac3d, 0x0010ac3e, 0x0010ac3d,
+ 0x0010ac3d, 0x05adf99d, 0x59300403, 0x82000580,
+ 0x0000008b, 0x05000007, 0x4a026403, 0x0000008b,
+ 0x642e6203, 0x42000800, 0x80004040, 0x0005f6ab,
+ 0x59300a29, 0x0501f880, 0x0500000b, 0x4d2c0000,
+ 0x59325809, 0x641a5a0a, 0x497a5c0d, 0x0001fb82,
+ 0x59300a29, 0x90040d83, 0x05d40d75, 0x5c025800,
+ 0x497a6009, 0x4d3c0000, 0x417a7800, 0x05b9fed5,
+ 0x5c027800, 0x60443000, 0x0511f929, 0x42000000,
+ 0x0010e454, 0x0511fb7f, 0x4c5c0000, 0x4130b800,
+ 0x05f1ffa3, 0x05000009, 0x4936600a, 0x4926601d,
+ 0x0501fc2b, 0x4d300000, 0x405e6000, 0x05f1ff69,
+ 0x5c026000, 0x0501f002, 0x405e6000, 0x5c00b800,
+ 0x497a6009, 0x64066407, 0x64066403, 0x59240400,
+ 0x8c00050a, 0x0502000b, 0x64126407, 0x641e6203,
+ 0x6406642c, 0x60103000, 0x4d400000, 0x60a68000,
+ 0x41782800, 0x050dfb26, 0x5c028000, 0x1c01f000,
+ 0x602c0800, 0x05d5f870, 0x64066203, 0x05e9f3f2,
+ 0x42000000, 0x0010e467, 0x0511fb5a, 0x59300203,
+ 0x90000c91, 0x05ae1955, 0x4803c857, 0x0c01f001,
+ 0x0010aca9, 0x0010ac99, 0x0010ac9b, 0x0010acaa,
+ 0x0010ac9a, 0x0010ac99, 0x0010ac99, 0x0010ac99,
+ 0x0010ac99, 0x0010ac99, 0x0010ac99, 0x0010ac99,
+ 0x0010ac99, 0x0010ac99, 0x0010ac99, 0x0010ac99,
+ 0x0010ac99, 0x05adf941, 0x05b1fbaf, 0x4d2c0000,
+ 0x59325809, 0x641a5a0a, 0x0001fb82, 0x5c025800,
+ 0x497a6009, 0x642a6229, 0x4a026403, 0x00000085,
+ 0x64266203, 0x640a6407, 0x42000800, 0x80004040,
+ 0x0005f6ab, 0x1c01f000, 0x05edf869, 0x4df00000,
+ 0x05fdfc84, 0x05020003, 0x05edfb32, 0x05020008,
+ 0x05e9fc26, 0x05020004, 0x5c03e000, 0x05edf851,
+ 0x05fdf7e7, 0x05e9ff77, 0x05ae0924, 0x5c03e000,
+ 0x05edf84c, 0x59300203, 0x90000d83, 0x05ac091f,
+ 0x90000c91, 0x05ae191d, 0x0c01f7ca, 0x59a8003b,
+ 0x59a8089a, 0x80040400, 0x80080480, 0x05021003,
+ 0x90000541, 0x1c01f000, 0x480bc857, 0x80000580,
+ 0x1c01f000, 0x4c040000, 0x59300809, 0x59a8000c,
+ 0x80040480, 0x05001007, 0x59a8000a, 0x80040480,
+ 0x05021004, 0x800409c0, 0x5c000800, 0x1c01f000,
+ 0x800409c0, 0x05ae0905, 0x4803c856, 0x05fdf7fb,
+ 0x4803c856, 0x4d300000, 0x0005ffbf, 0x05000007,
+ 0x0501f825, 0x4d380000, 0x612e7000, 0x0009f800,
+ 0x5c027000, 0x90000541, 0x5c026000, 0x1c01f000,
+ 0x4803c856, 0x4d300000, 0x05f1ff1d, 0x05000016,
+ 0x0501f819, 0x4d300000, 0x05edf829, 0x4df00000,
+ 0x05e9fd59, 0x4d3c0000, 0x60027840, 0x05e9fea6,
+ 0x05e9fc2c, 0x050df980, 0x5c027800, 0x5c03e000,
+ 0x05ec0810, 0x5c026000, 0x8d3c053e, 0x05020008,
+ 0x4d380000, 0x61327000, 0x0009f800, 0x5c027000,
+ 0x90000541, 0x5c026000, 0x1c01f000, 0x0005ffdc,
+ 0x05fdf7fc, 0x592c040b, 0x497a580c, 0x497a580d,
+ 0x494a6019, 0x494e601a, 0x4936600a, 0x492e6009,
+ 0x640e6407, 0x59340802, 0x4806600b, 0x800000c2,
+ 0x800008c4, 0x80040400, 0x48026006, 0x05d5fd62,
+ 0x4926601d, 0x0501f37e, 0x493bc857, 0x4d300000,
+ 0x0005ffbf, 0x0500000a, 0x05fdffeb, 0x4d400000,
+ 0x60168000, 0x0501f80a, 0x5c028000, 0x8d3c053e,
+ 0x05020005, 0x0009f800, 0x90000541, 0x5c026000,
+ 0x1c01f000, 0x0005ffdc, 0x05fdf7fc, 0x4803c856,
+ 0x05e9ffef, 0x4df00000, 0x4d3c0000, 0x4d440000,
+ 0x59368c03, 0x60067840, 0x05e9fd94, 0x05e9fcd1,
+ 0x05e9fbf0, 0x050df944, 0x5c028800, 0x5c027800,
+ 0x5c03e000, 0x05e807d3, 0x1c01f000, 0x4803c856,
+ 0x4d300000, 0x05f1fece, 0x0500000e, 0x481a601e,
+ 0x48ee602d, 0x4936600a, 0x05d5fd37, 0x4926601d,
+ 0x0501fb53, 0x64066407, 0x492e6009, 0x4d380000,
+ 0x607e7000, 0x0009f800, 0x5c027000, 0x90000541,
0x5c026000, 0x1c01f000, 0x4803c856, 0x4d300000,
- 0x05f5f9ed, 0x05000019, 0x0501f81c, 0x4d300000,
- 0x05edfc2b, 0x4df00000, 0x05edfae3, 0x4d3c0000,
- 0x60027840, 0x0201f800, 0x0010f344, 0x0201f800,
- 0x0010f3dd, 0x0201f800, 0x0010f7f5, 0x5c027800,
- 0x5c03e000, 0x05ec0c0a, 0x5c026000, 0x8d3c053e,
- 0x05020008, 0x4d380000, 0x61327000, 0x0005fc78,
+ 0x05f1febb, 0x0500000d, 0x48ee602d, 0x4936600a,
+ 0x05d5fd25, 0x4926601d, 0x0501fb41, 0x64066407,
+ 0x492e6009, 0x4d380000, 0x61567000, 0x0009f800,
0x5c027000, 0x90000541, 0x5c026000, 0x1c01f000,
- 0x0005fc5a, 0x05fdf7fc, 0x592c0408, 0x494a6019,
- 0x494e601a, 0x4936600a, 0x492e6009, 0x640e6407,
- 0x59340802, 0x4806600b, 0x800000c2, 0x800008c4,
- 0x80040400, 0x48026006, 0x05e1f88e, 0x4926601d,
- 0x0501f386, 0x493bc857, 0x4d300000, 0x0005fc3d,
- 0x0500000a, 0x05fdffed, 0x4d400000, 0x60168000,
- 0x0501f80a, 0x5c028000, 0x8d3c053e, 0x05020005,
- 0x0005fc78, 0x90000541, 0x5c026000, 0x1c01f000,
- 0x0005fc5a, 0x05fdf7fc, 0x4803c856, 0x05edfbf0,
- 0x4df00000, 0x4d3c0000, 0x4d440000, 0x59368c03,
- 0x60067840, 0x0201f800, 0x0010f2b3, 0x0201f800,
- 0x0010f305, 0x0201f800, 0x0010f3dd, 0x0201f800,
- 0x0010f7f5, 0x5c028800, 0x5c027800, 0x5c03e000,
- 0x05ec03cb, 0x1c01f000, 0x4803c856, 0x4d300000,
- 0x05f5f999, 0x0500000e, 0x481a601e, 0x48ee602d,
- 0x4936600a, 0x05e1f85f, 0x4926601d, 0x0501fb57,
- 0x64066407, 0x492e6009, 0x4d380000, 0x607e7000,
- 0x0005fc78, 0x5c027000, 0x90000541, 0x5c026000,
- 0x1c01f000, 0x4803c856, 0x4d300000, 0x05f5f986,
- 0x0500000d, 0x48ee602d, 0x4936600a, 0x05e1f84d,
- 0x4926601d, 0x0501fb45, 0x64066407, 0x492e6009,
- 0x4d380000, 0x61567000, 0x0005fc78, 0x5c027000,
+ 0x4803c856, 0x4d300000, 0x05f1fea9, 0x0500000e,
+ 0x481a601e, 0x48ee602d, 0x4936600a, 0x05d5fd12,
+ 0x4926601d, 0x0501fb2e, 0x64066407, 0x492e6009,
+ 0x4d380000, 0x60f67000, 0x0009f800, 0x5c027000,
0x90000541, 0x5c026000, 0x1c01f000, 0x4803c856,
- 0x4d300000, 0x05f5f974, 0x0500000e, 0x481a601e,
- 0x48ee602d, 0x4936600a, 0x05e1f83a, 0x4926601d,
- 0x0501fb32, 0x64066407, 0x492e6009, 0x4d380000,
- 0x60f67000, 0x0005fc78, 0x5c027000, 0x90000541,
+ 0x4d300000, 0x05f1fe96, 0x05000012, 0x4926601d,
+ 0x4936600a, 0x0501fb1e, 0x492fc857, 0x4933c857,
+ 0x592c0408, 0x8c00051e, 0x05000003, 0x48efc857,
+ 0x48ee602d, 0x64066407, 0x492e6009, 0x4d380000,
+ 0x60027000, 0x0009f800, 0x5c027000, 0x90000541,
0x5c026000, 0x1c01f000, 0x4803c856, 0x4d300000,
- 0x05f5f961, 0x05000012, 0x4926601d, 0x4936600a,
- 0x0501fb22, 0x492fc857, 0x4933c857, 0x592c0405,
- 0x8c00051e, 0x05000003, 0x48efc857, 0x48ee602d,
- 0x64066407, 0x492e6009, 0x4d380000, 0x60027000,
- 0x0005fc78, 0x5c027000, 0x90000541, 0x5c026000,
- 0x1c01f000, 0x4803c856, 0x4d300000, 0x05f5f94a,
- 0x0500000e, 0x48ee602d, 0x481a601e, 0x4936600a,
- 0x05e1f810, 0x4926601d, 0x0501fb08, 0x64066407,
- 0x492e6009, 0x4d380000, 0x61127000, 0x0005fc78,
+ 0x05f1fe7f, 0x0500000e, 0x48ee602d, 0x481a601e,
+ 0x4936600a, 0x05d5fce8, 0x4926601d, 0x0501fb04,
+ 0x64066407, 0x492e6009, 0x4d380000, 0x61127000,
+ 0x0009f800, 0x5c027000, 0x90000541, 0x5c026000,
+ 0x1c01f000, 0x4803c856, 0x4d300000, 0x05f1fe6c,
+ 0x0500000e, 0x481a601e, 0x48ee602d, 0x4936600a,
+ 0x05d5fcd5, 0x4926601d, 0x0501faf1, 0x64066407,
+ 0x492e6009, 0x4d380000, 0x61267000, 0x0009f800,
0x5c027000, 0x90000541, 0x5c026000, 0x1c01f000,
- 0x4803c856, 0x4d300000, 0x05f5f937, 0x0500000e,
- 0x481a601e, 0x48ee602d, 0x4936600a, 0x05ddfffd,
- 0x4926601d, 0x0501faf5, 0x64066407, 0x492e6009,
- 0x4d380000, 0x61267000, 0x0005fc78, 0x5c027000,
- 0x90000541, 0x5c026000, 0x1c01f000, 0x5930000a,
- 0x80001540, 0x05bc0c16, 0x8d0c0512, 0x05020007,
- 0x5808040b, 0x4803c856, 0x80000040, 0x05001003,
- 0x4800140b, 0x05020008, 0x58080010, 0x80000540,
- 0x05000005, 0x58080203, 0x80000540, 0x05020002,
- 0x64041203, 0x1c01f000, 0x4803c856, 0x59300403,
- 0x90000d82, 0x0500000b, 0x90000d83, 0x05000009,
- 0x90000d84, 0x05000007, 0x599c0819, 0x8c04050e,
- 0x05000003, 0x90000d80, 0x05000002, 0x90000541,
- 0x1c01f000, 0x0501f805, 0x60058800, 0x05000002,
- 0x60018800, 0x1c01f000, 0x4803c856, 0x4c000000,
- 0x4d2c0000, 0x59300407, 0x90000584, 0x05000017,
- 0x59300009, 0x80025d40, 0x800001c0, 0x05000013,
- 0x0501fd76, 0x0500000f, 0x59300407, 0x90004590,
- 0x0500000c, 0x90004591, 0x0500000a, 0x90004583,
- 0x0500000a, 0x90004582, 0x05000008, 0x9000458a,
- 0x05000006, 0x592c0405, 0x8c00051e, 0x05000003,
- 0x80000580, 0x0501f002, 0x90000541, 0x5c025800,
- 0x5c000000, 0x1c01f000, 0x4803c856, 0x4d300000,
- 0x05f5f8dd, 0x05000011, 0x4926601d, 0x4936600a,
- 0x0501fa9e, 0x48ee602d, 0x64066407, 0x492e6009,
- 0x4d3c0000, 0x417a7800, 0x0201f800, 0x0010ee7a,
- 0x5c027800, 0x4d380000, 0x60a27000, 0x0005fc78,
- 0x5c027000, 0x90000541, 0x5c026000, 0x1c01f000,
- 0x4803c856, 0x91380595, 0x05020009, 0x59a80077,
- 0xb00005b4, 0x05020006, 0x41780800, 0x05ddfc6f,
- 0x64066203, 0x64a66403, 0x05edf1a6, 0x05f5ff79,
- 0x0005f45a, 0x4803c856, 0x91380596, 0x05020004,
- 0x60100800, 0x05ddfb79, 0x05f5f2cd, 0x91380595,
- 0x0502000d, 0x59a80077, 0x90000594, 0x0502000a,
- 0x05ddfcd3, 0x05f9fbbb, 0x05020007, 0x59340404,
- 0x80000540, 0x05000004, 0x60180800, 0x05ddfb6b,
- 0x05f5f2bf, 0x05f5ff63, 0x0005f45a, 0x4803c856,
- 0x592c0207, 0x90000585, 0x05000002, 0x1c01f000,
- 0x4803c856, 0x592c0209, 0x8400054a, 0x48025a09,
- 0x1c01f000, 0x59300809, 0x800409c0, 0x05000008,
- 0x58040205, 0x82000580, 0x00000152, 0x05020004,
- 0x59a8082e, 0x48066006, 0x1c01f000, 0x599c0416,
- 0x800001c0, 0x05000007, 0x90000c84, 0x05001005,
- 0x800000c2, 0x800008c4, 0x80040c00, 0x05fdf7f6,
- 0x59300403, 0x90000582, 0x05fe07f2, 0x5930080a,
- 0x58040403, 0x82000580, 0x000007fe, 0x05fe07ed,
- 0x60a00800, 0x05fdf7ec, 0x4803c856, 0x59300c03,
- 0xb13805a1, 0x05000019, 0xb13805a0, 0x05000017,
- 0xb13805a2, 0x0502001e, 0x497a6205, 0x90040582,
- 0x05000006, 0x9004059e, 0x0500000e, 0x90040584,
- 0x05020017, 0x0501f003, 0x600c0800, 0x05ddfb2f,
- 0x59340200, 0x84000508, 0x48026a00, 0x59300416,
- 0x84000510, 0x48026416, 0x64066203, 0x05edf14d,
- 0x64166203, 0x0501f00a, 0x59340200, 0x8c00050e,
- 0x05020002, 0x497a6205, 0x640a6203, 0x90040486,
- 0x05fc17c1, 0x59a8002e, 0x48026006, 0x1c01f000,
+ 0x5930000a, 0x80001540, 0x05ac0830, 0x8d0c0512,
+ 0x05020007, 0x5808040b, 0x4803c856, 0x80000040,
+ 0x05001003, 0x4800140b, 0x05020008, 0x58080010,
+ 0x80000540, 0x05000005, 0x58080203, 0x80000540,
+ 0x05020002, 0x64041203, 0x1c01f000, 0x4803c856,
+ 0x59300403, 0x90000d82, 0x0500000b, 0x90000d83,
+ 0x05000009, 0x90000d84, 0x05000007, 0x599c0819,
+ 0x8c04050e, 0x05000003, 0x90000d80, 0x05000002,
+ 0x90000541, 0x1c01f000, 0x4803c856, 0x4c000000,
+ 0x4d2c0000, 0x59300407, 0x90000584, 0x05000019,
+ 0x59300009, 0x80025d40, 0x800001c0, 0x05000015,
+ 0x0501fd79, 0x05000011, 0x0501fd81, 0x0500000f,
+ 0x59300407, 0x90004590, 0x0500000c, 0x90004591,
+ 0x0500000a, 0x90004583, 0x0500000a, 0x90004582,
+ 0x05000008, 0x9000458a, 0x05000006, 0x592c0408,
+ 0x8c00051e, 0x05000003, 0x80000580, 0x0501f002,
+ 0x90000541, 0x5c025800, 0x5c000000, 0x1c01f000,
+ 0x4803c856, 0x4d300000, 0x05f1fe15, 0x05000010,
+ 0x4926601d, 0x4936600a, 0x0501fa9d, 0x48ee602d,
+ 0x64066407, 0x492e6009, 0x4d3c0000, 0x417a7800,
+ 0x05b9fd34, 0x5c027800, 0x4d380000, 0x60a27000,
+ 0x0009f800, 0x5c027000, 0x90000541, 0x5c026000,
+ 0x1c01f000, 0x4803c856, 0x91380595, 0x05020009,
+ 0x59a800b6, 0xb00005b4, 0x05020006, 0x41780800,
+ 0x05d1ffce, 0x64066203, 0x64a66403, 0x05e9f266,
+ 0x05f5fcb7, 0x0005f7dc, 0x4803c856, 0x91380596,
+ 0x05020004, 0x60100800, 0x05d1fedb, 0x05f1f7cf,
+ 0x91380595, 0x0502000d, 0x59a800b6, 0x90000594,
+ 0x0502000a, 0x05d5f832, 0x05f9f963, 0x05020007,
+ 0x59340404, 0x80000540, 0x05000004, 0x60180800,
+ 0x05d1fecd, 0x05f1f7c1, 0x05f5fca1, 0x0005f7dc,
+ 0x4803c856, 0x592c020a, 0x90000585, 0x05000002,
+ 0x1c01f000, 0x4803c856, 0x592c020c, 0x8400054a,
+ 0x48025a0c, 0x1c01f000, 0x59300809, 0x800409c0,
+ 0x05000008, 0x58040208, 0x82000580, 0x00000152,
+ 0x05020004, 0x59a8085c, 0x48066006, 0x1c01f000,
+ 0x599c0416, 0x800001c0, 0x05000007, 0x90000c84,
+ 0x05001005, 0x800000c2, 0x800008c4, 0x80040c00,
+ 0x05fdf7f6, 0x59300403, 0x90000582, 0x05fe07f2,
+ 0x5930080a, 0x58040403, 0x82000580, 0x000007fe,
+ 0x05fe07ed, 0x60a00800, 0x05fdf7ec, 0x4803c856,
+ 0x59300c03, 0xb13805a1, 0x05000019, 0xb13805a0,
+ 0x05000017, 0xb13805a2, 0x0502001e, 0x497a6205,
+ 0x90040582, 0x05000006, 0x9004059e, 0x0500000e,
+ 0x90040584, 0x05020017, 0x0501f003, 0x600c0800,
+ 0x05d1fe91, 0x59340200, 0x84000508, 0x48026a00,
+ 0x59300416, 0x84000510, 0x48026416, 0x64066203,
+ 0x05e9f20d, 0x64166203, 0x0501f00a, 0x59340200,
+ 0x8c00050e, 0x05020002, 0x497a6205, 0x640a6203,
+ 0x90040486, 0x05fc17c1, 0x59a8005c, 0x48026006,
+ 0x1c01f000, 0x4803c856, 0xb13805a1, 0x05000003,
+ 0xb13805a0, 0x0502000a, 0x59303403, 0x82180580,
+ 0x00000086, 0x05f00557, 0x82180580, 0x00000087,
+ 0x05f00554, 0x497a6205, 0x642a6203, 0x1c01f000,
0x4803c856, 0xb13805a1, 0x05000003, 0xb13805a0,
- 0x0502000a, 0x59303403, 0x82180580, 0x00000086,
- 0x05f4001b, 0x82180580, 0x00000087, 0x05f40018,
- 0x497a6205, 0x642a6203, 0x1c01f000, 0x4803c856,
- 0xb13805a1, 0x05000003, 0xb13805a0, 0x05020007,
- 0x59300403, 0xb0000c91, 0x05be1b35, 0xb0000480,
- 0x05bc1b33, 0x0c01f002, 0x1c01f000, 0x001086d1,
- 0x001086d0, 0x001086d0, 0x001086dd, 0x001086d0,
- 0x001086d0, 0x001086d0, 0x001086d0, 0x001086d0,
- 0x001086dd, 0x001086d0, 0x001086de, 0x001086de,
- 0x001086de, 0x001086de, 0x001086d0, 0x001086e1,
- 0x05bdfb1f, 0x59340200, 0x8c00050e, 0x05020002,
- 0x497a6205, 0x59300809, 0x5804020b, 0x8c000502,
- 0x05000003, 0x64126203, 0x1c01f000, 0x640a6203,
- 0x1c01f000, 0x1c01f000, 0x497a6205, 0x64366203,
- 0x1c01f000, 0x0005f45a, 0x4803c856, 0xb13805a1,
- 0x05000006, 0xb13805a0, 0x05020009, 0x59cc0002,
- 0x8c000526, 0x05000007, 0x59300403, 0xb0000d83,
- 0x05000005, 0xb0000d89, 0x05000003, 0x05f5f841,
- 0x1c01f000, 0x59a80030, 0x48026205, 0x640a6203,
- 0x5930001c, 0x80000540, 0x05000003, 0x497a601c,
- 0x0801f800, 0x1c01f000, 0x497a6205, 0x497a6009,
- 0x64066203, 0x65426403, 0x42000800, 0x80000043,
- 0x0005f32e, 0x4933c857, 0x4d340000, 0x5932680a,
- 0x59340200, 0x8c00050e, 0x05000005, 0x59300407,
- 0x90000c92, 0x05021004, 0x0c01f805, 0x5c026800,
- 0x1c01f000, 0x05fdfbde, 0x05fdf7fd, 0x001082eb,
- 0x00108721, 0x00108725, 0x00108728, 0x00109cdd,
- 0x00109cf5, 0x00109cf9, 0x001082eb, 0x001082eb,
- 0x001082eb, 0x001082eb, 0x001082eb, 0x001082eb,
- 0x001082eb, 0x001082eb, 0x001082eb, 0x001082eb,
- 0x001082eb, 0x4803c856, 0x40000000, 0x40000000,
- 0x1c01f000, 0x40000000, 0x40000000, 0x1c01f000,
+ 0x05020007, 0x59300403, 0xb0000c91, 0x05aa1f53,
+ 0xb0000480, 0x05a81f51, 0x0c01f002, 0x1c01f000,
+ 0x0010ae9e, 0x0010ae9d, 0x0010ae9d, 0x0010aeaa,
+ 0x0010ae9d, 0x0010ae9d, 0x0010ae9d, 0x0010ae9d,
+ 0x0010ae9d, 0x0010aeaa, 0x0010ae9d, 0x0010aeab,
+ 0x0010aeab, 0x0010aeab, 0x0010aeab, 0x0010ae9d,
+ 0x0010aeae, 0x05a9ff3d, 0x59340200, 0x8c00050e,
+ 0x05020002, 0x497a6205, 0x59300809, 0x5804020e,
+ 0x8c000502, 0x05000003, 0x64126203, 0x1c01f000,
+ 0x640a6203, 0x1c01f000, 0x1c01f000, 0x497a6205,
+ 0x64366203, 0x1c01f000, 0x0005f7dc, 0x4803c856,
+ 0xb13805a1, 0x05000006, 0xb13805a0, 0x05020009,
+ 0x59cc0002, 0x8c000526, 0x05000007, 0x59300403,
+ 0xb0000d83, 0x05000005, 0xb0000d89, 0x05000003,
+ 0x05f1fd78, 0x1c01f000, 0x59a8005e, 0x48026205,
+ 0x640a6203, 0x5930001c, 0x80000540, 0x05000003,
+ 0x497a601c, 0x0801f800, 0x1c01f000, 0x497a6205,
+ 0x497a6009, 0x64066203, 0x65426403, 0x42000800,
+ 0x80000043, 0x0005f6ab, 0x4933c857, 0x4d340000,
+ 0x5932680a, 0x59340200, 0x8c00050e, 0x05000005,
+ 0x59300407, 0x90000c92, 0x05021004, 0x0c01f805,
+ 0x5c026800, 0x1c01f000, 0x05fdfae0, 0x05fdf7fd,
+ 0x0010a9ba, 0x0010aeee, 0x0010aef2, 0x0010aef5,
+ 0x0010c96b, 0x0010c983, 0x0010c987, 0x0010a9ba,
+ 0x0010a9ba, 0x0010a9ba, 0x0010a9ba, 0x0010a9ba,
+ 0x0010a9ba, 0x0010a9ba, 0x0010a9ba, 0x0010a9ba,
+ 0x0010a9ba, 0x0010a9ba, 0x4803c856, 0x40000000,
+ 0x40000000, 0x1c01f000, 0x40000000, 0x40000000,
+ 0x1c01f000, 0x59300008, 0x8c000536, 0x0502000b,
0x5930001e, 0x4803c857, 0x59300416, 0x4933c857,
0x4803c857, 0x8c000502, 0x05000005, 0x4803c857,
0x84000540, 0x48026416, 0x1c01f000, 0x42000000,
- 0xd0000000, 0x41300800, 0x05c1f998, 0x0501f80e,
+ 0xd0000000, 0x41300800, 0x05adfe2c, 0x0501f80e,
0x0502000c, 0x59300c16, 0x59300403, 0xb0000580,
- 0x05000003, 0x84040d40, 0x0501f004, 0x59a8002e,
+ 0x05000003, 0x84040d40, 0x0501f004, 0x59a8005c,
0x9000040a, 0x48026205, 0x84040d42, 0x48066416,
0x1c01f000, 0x4933c857, 0x4d340000, 0x5932680a,
- 0x59340a00, 0x8c04050e, 0x05bc0aa5, 0x5930001e,
- 0x80000540, 0x0502002f, 0x59300403, 0x4803c857,
- 0xb0000580, 0x05000003, 0x8d0c050e, 0x05020027,
- 0x4d1c0000, 0x41323800, 0x05f1ffa7, 0x05000021,
+ 0x59340a00, 0x8c04050e, 0x05a80ec0, 0x5930001e,
+ 0x80000540, 0x05020031, 0x59300403, 0x4803c857,
+ 0xb0000580, 0x05000003, 0x8d0c050e, 0x05020029,
+ 0x4d1c0000, 0x41323800, 0x05f1fcdd, 0x05000023,
0x4932381e, 0x591c0416, 0x84000542, 0x48023c16,
- 0x4936600a, 0x05ddfe6b, 0x4926601d, 0x0501f963,
+ 0x4936600a, 0x05d5fb44, 0x4926601d, 0x0501f960,
0x591c0407, 0x90000583, 0x05000006, 0x591c0202,
0x4802641b, 0x591c0402, 0x4802621b, 0x0501f005,
0x591c0202, 0x4802621b, 0x591c0402, 0x4802641b,
- 0x491e602a, 0x64066407, 0x64d66403, 0x64066203,
- 0x42000800, 0x80000040, 0x0005fb2e, 0x411e6000,
- 0x5c023800, 0x80000580, 0x5c026800, 0x1c01f000,
- 0x411e6000, 0x5c023800, 0x59a80030, 0x48026205,
- 0x90000541, 0x05fdf7f9, 0x4933c857, 0x4d2c0000,
- 0x4932381e, 0x4a026202, 0x0000ffff, 0x591e5809,
- 0x591c0008, 0x8c00051e, 0x05000005, 0x8400051e,
- 0x48023808, 0x497a580a, 0x0501f016, 0x592c0409,
- 0x8c000518, 0x05000013, 0x84000518, 0x48025c09,
- 0x4d400000, 0x592e8207, 0x64065a07, 0x0501fbf0,
- 0x49425a07, 0x5c028000, 0x497a580a, 0x592c0409,
- 0x8c000512, 0x05000007, 0x4d2c0000, 0x84000512,
- 0x48025c09, 0x592e580a, 0x05bdfdf7, 0x5c025800,
- 0x59a80030, 0x48026205, 0x591c0216, 0x48026218,
- 0x90000d81, 0x05000006, 0x640a3a03, 0x90000585,
- 0x05000007, 0x497a6017, 0x0501f01c, 0x591c0008,
- 0x84000540, 0x48023808, 0x64123a03, 0x591c0416,
- 0x4803c857, 0x8400051c, 0x84000554, 0x48023c16,
- 0x592c0010, 0x40001000, 0x591c0818, 0x80040480,
- 0x05fe17f1, 0x591c0018, 0x82000500, 0xfffffffc,
- 0x48026017, 0x48023818, 0x591c0a16, 0x4807c857,
- 0x90040d85, 0x05020005, 0x480bc857, 0x4803c857,
- 0x4a023814, 0xffffffff, 0x591c0402, 0x4802641b,
- 0x591c0202, 0x4802621b, 0x591e680a, 0x4936600a,
- 0x64066407, 0x64e66403, 0x64066203, 0x42000800,
- 0x80000040, 0x0005fb2e, 0x5c025800, 0x1c01f000,
- 0x4933c857, 0x59300416, 0x8c000514, 0x05000015,
- 0x8c00051c, 0x05020012, 0x59300018, 0x80100480,
- 0x05001006, 0x05000005, 0x59300416, 0x84000514,
- 0x8400055c, 0x0501f009, 0x48126018, 0x48126014,
- 0x40100000, 0x592c1810, 0x800c0480, 0x48026013,
- 0x59300416, 0x84000514, 0x48026416, 0x1c01f000,
- 0x4933c857, 0x8c00051c, 0x05020008, 0x59300014,
- 0x4803c857, 0x48026018, 0x59300416, 0x8400055c,
- 0x4803c857, 0x48026416, 0x1c01f000, 0x0501f805,
- 0x60058800, 0x05000002, 0x60018800, 0x1c01f000,
- 0x59300c03, 0x4933c857, 0x4807c857, 0x900404b4,
- 0x05001005, 0x900404bc, 0x05021003, 0x80000580,
- 0x1c01f000, 0x90000541, 0x05fdf7fe, 0x4d340000,
+ 0x591c0017, 0x48026017, 0x491e602a, 0x64066407,
+ 0x64d66403, 0x64066203, 0x42000800, 0x80000040,
+ 0x0005feab, 0x411e6000, 0x5c023800, 0x80000580,
+ 0x5c026800, 0x1c01f000, 0x411e6000, 0x5c023800,
+ 0x59a8005e, 0x48026205, 0x90000541, 0x05fdf7f9,
+ 0x4933c857, 0x4d2c0000, 0x4932381e, 0x4a026202,
+ 0x0000ffff, 0x591e5809, 0x591c0008, 0x8c00051e,
+ 0x05000005, 0x8400051e, 0x48023808, 0x497a580d,
+ 0x0501f016, 0x592c040c, 0x8c000518, 0x05000013,
+ 0x84000518, 0x48025c0c, 0x4d400000, 0x592e820a,
+ 0x64065a0a, 0x0501fbf8, 0x49425a0a, 0x5c028000,
+ 0x497a580d, 0x592c040c, 0x8c000512, 0x05000007,
+ 0x4d2c0000, 0x84000512, 0x48025c0c, 0x592e580d,
+ 0x05adfa2b, 0x5c025800, 0x59a8005e, 0x48026205,
+ 0x591c0216, 0x48026218, 0x90000d81, 0x05000006,
+ 0x640a3a03, 0x90000585, 0x05000007, 0x497a6017,
+ 0x0501f01c, 0x591c0008, 0x84000540, 0x48023808,
+ 0x64123a03, 0x591c0416, 0x4803c857, 0x8400051c,
+ 0x84000554, 0x48023c16, 0x592c0013, 0x40001000,
+ 0x591c0818, 0x80040480, 0x05fe17f1, 0x591c0018,
+ 0x82000500, 0xfffffffc, 0x48026017, 0x48023818,
+ 0x591c0a16, 0x4807c857, 0x90040d85, 0x05020005,
+ 0x480bc857, 0x4803c857, 0x4a023814, 0xffffffff,
+ 0x591c0402, 0x4802641b, 0x591c0202, 0x4802621b,
+ 0x591e680a, 0x4936600a, 0x64066407, 0x64e66403,
+ 0x64066203, 0x42000800, 0x80000040, 0x0005feab,
+ 0x5c025800, 0x1c01f000, 0x4933c857, 0x59300416,
+ 0x8c000514, 0x05000015, 0x8c00051c, 0x05020012,
+ 0x59300018, 0x80100480, 0x05001006, 0x05000005,
+ 0x59300416, 0x84000514, 0x8400055c, 0x0501f009,
+ 0x48126018, 0x48126014, 0x40100000, 0x592c1813,
+ 0x800c0480, 0x48026013, 0x59300416, 0x84000514,
+ 0x48026416, 0x1c01f000, 0x4933c857, 0x8c00051c,
+ 0x05020008, 0x59300014, 0x4803c857, 0x48026018,
+ 0x59300416, 0x8400055c, 0x4803c857, 0x48026416,
+ 0x1c01f000, 0x59300c03, 0x4933c857, 0x4807c857,
+ 0x900404b4, 0x05001005, 0x900404bc, 0x05021003,
+ 0x80000580, 0x1c01f000, 0x90000541, 0x05fdf7fe,
+ 0x42000000, 0x0010e3b6, 0x0511f806, 0x4d340000,
0x4d240000, 0x5932481d, 0x5932680a, 0x59300407,
0x90000c92, 0x05021003, 0x4803c857, 0x0c01f804,
- 0x5c024800, 0x5c026800, 0x1c01f000, 0x00108825,
- 0x00108827, 0x0010882a, 0x00108866, 0x00109cba,
- 0x00109c86, 0x00109cbe, 0x00108826, 0x00108825,
- 0x00108826, 0x00108826, 0x00108826, 0x00108826,
- 0x00108826, 0x00108826, 0x00108826, 0x00108826,
- 0x00108826, 0x05bdf9ca, 0x1c01f000, 0x40000000,
+ 0x5c024800, 0x5c026800, 0x1c01f000, 0x0010aff5,
+ 0x0010aff7, 0x0010affa, 0x0010b035, 0x0010c948,
+ 0x0010c915, 0x0010c94c, 0x0010aff6, 0x0010aff5,
+ 0x0010aff6, 0x0010aff6, 0x0010aff6, 0x0010aff6,
+ 0x0010aff6, 0x0010aff6, 0x0010aff6, 0x0010aff6,
+ 0x0010aff6, 0x05a9fde5, 0x1c01f000, 0x40000000,
0x40000000, 0x1c01f000, 0x59300403, 0x82000d80,
0x00000085, 0x05020007, 0x4a026403, 0x0000008b,
- 0x642e6203, 0x42000800, 0x80004040, 0x0005f32e,
- 0x82000d80, 0x0000008b, 0x0502002f, 0x4d3c0000,
- 0x417a7800, 0x0201f800, 0x0010ee7a, 0x5c027800,
- 0x42000000, 0x0010b2d6, 0x050dfa07, 0x05fdfcb4,
- 0x0500000e, 0x4d2c0000, 0x59325809, 0x4a025a05,
- 0x00000103, 0x59300402, 0x48025c07, 0x641a5a07,
- 0x497a580a, 0x0001fb5b, 0x59300a29, 0x90040d83,
- 0x05fc0d8b, 0x5c025800, 0x60443000, 0x050df84f,
- 0x64066403, 0x497a6009, 0x05c9ff2e, 0x59240400,
- 0x8c00050a, 0x0502000b, 0x41782800, 0x60103000,
- 0x4d400000, 0x60a68000, 0x0509fad2, 0x5c028000,
- 0x64126407, 0x641e6203, 0x6406642c, 0x1c01f000,
- 0x602c0800, 0x05ddf95d, 0x64066407, 0x64066203,
- 0x05e9f780, 0x1c01f000, 0x59300416, 0x8c00051a,
- 0x05020021, 0x5930080a, 0x58040200, 0x8c00050e,
- 0x05000006, 0x59300a03, 0x90040590, 0x05000003,
- 0x90040583, 0x05020018, 0x05fdf8d3, 0x59300203,
- 0x90000d89, 0x0500000b, 0x48026429, 0x4a026403,
- 0x00000085, 0x59300416, 0x8400055a, 0x8400055e,
- 0x48026416, 0x64266203, 0x640a6407, 0x640e6229,
- 0x59a8002f, 0x48026205, 0x42000800, 0x80004040,
- 0x0501fdfd, 0x0005fb2e, 0x4203e000, 0xb0800000,
- 0x6023f800, 0x1c01f000, 0x41780800, 0x59a8102c,
- 0x60c80000, 0x05e9fe71, 0x800811c0, 0x05020002,
- 0x60501000, 0x480b502e, 0x59a8102d, 0x480b5022,
- 0x41780800, 0x61900000, 0x05e9fe68, 0x800811c0,
- 0x05020002, 0x60501000, 0x480b502f, 0x9008140a,
- 0x480b5030, 0x60040800, 0x05edf8de, 0x42000000,
- 0x30000000, 0x40080800, 0x0001f92d, 0x600c0800,
- 0x59a8100f, 0x05edf8c9, 0x05ddf44d, 0x64a3502e,
- 0x6453502f, 0x4a035022, 0x000007d0, 0x60781000,
- 0x480b5030, 0x60040800, 0x05edf8ce, 0x42000000,
- 0x30000000, 0x40080800, 0x0001f92d, 0x600c0800,
- 0x59a8100f, 0x05edf0b9, 0x4933c857, 0x4d2c0000,
- 0x59300403, 0x900005be, 0x05020004, 0x59325819,
- 0x812e59c0, 0x05be0ccf, 0x5c025800, 0x1c01f000,
- 0x0501f802, 0x1c01f000, 0x4933c857, 0x813669c0,
- 0x0500000c, 0x59340200, 0x8c000508, 0x05000009,
- 0x4a026416, 0x00000100, 0x8c00050c, 0x59300008,
- 0x05000002, 0x84000544, 0x84000542, 0x48026008,
- 0x1c01f000, 0x59300416, 0x8c000510, 0x1c01f000,
- 0x4937c857, 0x4d300000, 0x05f1fe27, 0x0500000d,
- 0x4926601d, 0x4936600a, 0x05fdffe8, 0x64066407,
- 0x492e6009, 0x60240800, 0x05ddf8e0, 0x4d380000,
- 0x60ce7000, 0x0005fc78, 0x5c027000, 0x90000541,
- 0x5c026000, 0x1c01f000, 0x4933c857, 0x4d2c0000,
- 0x4c580000, 0x4d3c0000, 0x59325809, 0x91380595,
- 0x0502001d, 0x59a8b077, 0x90580c99, 0x05001002,
- 0x6060b000, 0x8058b104, 0x0501fa54, 0x80000580,
- 0x0501fa63, 0x912cac0a, 0x91cca406, 0x050dfa19,
- 0x4c600000, 0x6004c000, 0x592c100b, 0x8c080518,
- 0x05020006, 0x59240005, 0x592c100e, 0x80080580,
- 0x05020006, 0x4178c000, 0x5930100a, 0x58081403,
- 0x417a7800, 0x05c9fbf5, 0x5c00c000, 0x05f5f80c,
- 0x0501f005, 0x6008b000, 0x0501fa59, 0x05f5fcad,
- 0x0005fc5a, 0x5c027800, 0x5c00b000, 0x5c025800,
- 0x1c01f000, 0x4933c856, 0x60018800, 0x4a02601d,
- 0x0010b391, 0x4936600a, 0x05fdffac, 0x64066407,
- 0x492e6009, 0x4d380000, 0x61367000, 0x0005fc78,
- 0x5c027000, 0x90000541, 0x60058800, 0x1c01f000,
- 0x4803c856, 0x4d2c0000, 0x91380595, 0x05020025,
- 0x59a80877, 0x59325809, 0x5930040c, 0x80040580,
- 0x05020020, 0x4c500000, 0x4c540000, 0x4c580000,
- 0x91cca406, 0x4050a800, 0x5930b40c, 0x9058b403,
- 0x8058b104, 0x050dfa1a, 0x91cca406, 0x592cb206,
- 0x9058b403, 0x8058b104, 0x912cac07, 0x050df9d9,
- 0x592e5801, 0x812e59c0, 0x05fe07f9, 0x5931d82d,
- 0x58ef400a, 0x58ee580c, 0x4a025a05, 0x00000103,
- 0x58ec0008, 0x0801f800, 0x59300402, 0x5c00b000,
- 0x5c00a800, 0x5c00a000, 0x5c025800, 0x1c01f000,
- 0x05f5fc70, 0x5c025800, 0x1c01f000, 0x4933c857,
- 0x90040db5, 0x05000005, 0x5930141b, 0x0501f844,
- 0x05000025, 0x0501f006, 0x4d300000, 0x5932602a,
- 0x0501f848, 0x5c026000, 0x0500001e, 0x591c0c07,
- 0x90040583, 0x05000003, 0x90040586, 0x0502001b,
- 0x591c0c02, 0x5930041b, 0x80040580, 0x05000009,
- 0x5930021b, 0x80040580, 0x05020014, 0x591c0a02,
- 0x5930041b, 0x80040580, 0x05020010, 0x0501f009,
- 0x59300a1b, 0x82040580, 0x0000ffff, 0x05000005,
- 0x591c0202, 0x59300a1b, 0x80040580, 0x05020007,
- 0x591c000a, 0x5930080a, 0x80040580, 0x1c01f000,
- 0x417a3800, 0x90000541, 0x1c01f000, 0x4803c856,
- 0x4203e000, 0xb0800000, 0x600009fe, 0x4203f800,
- 0x30000000, 0x40000000, 0x80040840, 0x05bc0870,
- 0x05ffb7fb, 0x1c01f000, 0x4803c856, 0x4203e000,
- 0xb0800000, 0x4203f800, 0x20000000, 0x1c01f000,
- 0x0501f805, 0x60058800, 0x05020002, 0x60018800,
- 0x1c01f000, 0x59300808, 0x8c04051e, 0x592c0c09,
- 0x05020002, 0x8c040518, 0x1c01f000, 0x05fdfb51,
- 0x05000007, 0x800800ca, 0x800808c8, 0x80040c00,
- 0x82063c00, 0x00110514, 0x491fc857, 0x1c01f000,
- 0x0501fcf5, 0x05020007, 0x59301402, 0x05fdfff4,
- 0x05000007, 0x411c0000, 0x81300580, 0x05000003,
- 0x81780500, 0x0501f002, 0x81300540, 0x1c01f000,
- 0x4d300000, 0x83440480, 0x000007f0, 0x05001003,
- 0x05ddfc24, 0x0501f002, 0x0001fae7, 0x0502000c,
- 0x42026000, 0x001104b4, 0x4936600a, 0x492e6009,
- 0x05ddfc14, 0x4926601d, 0x0201f800, 0x0010ee7a,
- 0x80000580, 0x5c026000, 0x1c01f000, 0x90000541,
- 0x05fdf7fd, 0x4933c857, 0x05fdfb35, 0x05bc0830,
- 0x4d2c0000, 0x4d340000, 0x4d440000, 0x4c580000,
- 0x59325809, 0x5932680a, 0x49425a07, 0x0005f8e2,
- 0x592e8c07, 0x592c4208, 0x9020050f, 0x0c01f806,
- 0x5c00b000, 0x5c028800, 0x5c026800, 0x5c025800,
- 0x1c01f000, 0x001089e3, 0x00108a01, 0x00108a07,
- 0x00108a0a, 0x00108a12, 0x001089e1, 0x001089e1,
- 0x001089e1, 0x00108a15, 0x00108a1f, 0x00108a1f,
- 0x001089e1, 0x001089e1, 0x001089e1, 0x001089e1,
- 0x001089e1, 0x4803c857, 0x05bdf80d, 0x814281c0,
- 0x05020011, 0x41785800, 0x592c0405, 0x8c00051c,
- 0x05020002, 0x59345c05, 0x442c2800, 0x59340008,
- 0x48002802, 0x59340009, 0x48002801, 0x59340006,
- 0x48002804, 0x59340007, 0x48002803, 0x602cb000,
- 0x0501f02d, 0x592c0208, 0x8c00051e, 0x6008b000,
- 0x05020029, 0x9004b540, 0x05000027, 0x44042800,
- 0x5932680a, 0x59340400, 0x48002801, 0x6008b000,
- 0x0501f021, 0x814281c0, 0x05fe07f3, 0x59345c05,
- 0x442c2800, 0x6004b000, 0x0501f01b, 0x9140b540,
- 0x05000019, 0x0501f021, 0x814281c0, 0x0502001f,
- 0x59340200, 0x44002800, 0x59340001, 0x48002801,
- 0x6008b000, 0x0501f010, 0x9140b540, 0x05020017,
- 0x0501f00d, 0x9140b540, 0x0500000b, 0x05ddfb9e,
- 0x05000012, 0x8c20050e, 0x05000002, 0x497a600a,
- 0x4178b000, 0x497a5a07, 0x0501f003, 0x9140b540,
- 0x0502000a, 0x592c0405, 0x8400051c, 0x48025c05,
- 0x592c0208, 0x8400051e, 0x48025a08, 0x0501f91f,
- 0x497a6009, 0x0001f35b, 0x592c0208, 0x8c00051e,
- 0x6008b000, 0x05fe07f4, 0x9004b540, 0x05fc07f2,
- 0x44042800, 0x6004b000, 0x05fdf7ef, 0x4937c857,
- 0x4d300000, 0x05f1fcc8, 0x0500000d, 0x4926601d,
- 0x4936600a, 0x05fdfe89, 0x64066407, 0x492e6009,
- 0x602c0800, 0x05d9ff81, 0x4d380000, 0x610e7000,
- 0x0005fc78, 0x5c027000, 0x90000541, 0x5c026000,
+ 0x642e6203, 0x42000800, 0x80004040, 0x0005f6ab,
+ 0x82000d80, 0x0000008b, 0x0502002e, 0x4d3c0000,
+ 0x417a7800, 0x05b9fb23, 0x5c027800, 0x42000000,
+ 0x0010e454, 0x050dffcf, 0x05fdfcbb, 0x0500000e,
+ 0x4d2c0000, 0x59325809, 0x4a025a08, 0x00000103,
+ 0x59300402, 0x48025c0a, 0x641a5a0a, 0x497a580d,
+ 0x0001fb82, 0x59300a29, 0x90040d83, 0x05fc0d8d,
+ 0x5c025800, 0x60443000, 0x050dfd65, 0x64066403,
+ 0x497a6009, 0x05b9fdf6, 0x59240400, 0x8c00050a,
+ 0x0502000b, 0x41782800, 0x60103000, 0x4d400000,
+ 0x60a68000, 0x0509ff76, 0x5c028000, 0x64126407,
+ 0x641e6203, 0x6406642c, 0x1c01f000, 0x602c0800,
+ 0x05d1fcbd, 0x64066407, 0x64066203, 0x05e9f03e,
+ 0x1c01f000, 0x59300416, 0x8c00051a, 0x05020021,
+ 0x5930080a, 0x58040200, 0x8c00050e, 0x05000006,
+ 0x59300a03, 0x90040590, 0x05000003, 0x90040583,
+ 0x05020018, 0x05f9ffcb, 0x59300203, 0x90000d89,
+ 0x0500000b, 0x48026429, 0x4a026403, 0x00000085,
+ 0x59300416, 0x8400055a, 0x8400055e, 0x48026416,
+ 0x64266203, 0x640a6407, 0x640e6229, 0x59a8005d,
+ 0x48026205, 0x42000800, 0x80004040, 0x0501fe48,
+ 0x0005feab, 0x4203e000, 0xb0800000, 0x6023f800,
+ 0x1c01f000, 0x41780800, 0x59a8105a, 0x60c80000,
+ 0x05e5ff32, 0x800811c0, 0x05020002, 0x60501000,
+ 0x480b505c, 0x59a8105b, 0x480b5050, 0x41780800,
+ 0x61900000, 0x05e5ff29, 0x800811c0, 0x05020002,
+ 0x60501000, 0x480b505d, 0x9008140a, 0x480b505e,
+ 0x60040800, 0x05e9fce2, 0x42000000, 0x30000000,
+ 0x40080800, 0x0001f93a, 0x600c0800, 0x59a8103d,
+ 0x05e9fccd, 0x05d5f088, 0x64a3505c, 0x6453505d,
+ 0x4a035050, 0x000007d0, 0x60781000, 0x480b505e,
+ 0x60040800, 0x05e9fcd2, 0x42000000, 0x30000000,
+ 0x40080800, 0x0001f93a, 0x600c0800, 0x59a8103d,
+ 0x05e9f4bd, 0x4933c857, 0x4d2c0000, 0x59300403,
+ 0x900005be, 0x05020004, 0x59325819, 0x812e59c0,
+ 0x05ae0906, 0x5c025800, 0x1c01f000, 0x4933c857,
+ 0x813669c0, 0x0500000c, 0x59340200, 0x8c000508,
+ 0x05000009, 0x4a026416, 0x00000100, 0x8c00050c,
+ 0x59300008, 0x05000002, 0x84000544, 0x84000542,
+ 0x48026008, 0x1c01f000, 0x59300416, 0x8c000510,
+ 0x1c01f000, 0x4937c857, 0x4d300000, 0x05f1fb60,
+ 0x0500000d, 0x4926601d, 0x4936600a, 0x05fdffe8,
+ 0x64066407, 0x492e6009, 0x60240800, 0x05d1fc42,
+ 0x4d380000, 0x60ce7000, 0x0009f800, 0x5c027000,
+ 0x90000541, 0x5c026000, 0x1c01f000, 0x4933c857,
+ 0x4d2c0000, 0x4c580000, 0x4d3c0000, 0x59325809,
+ 0x91380595, 0x0502001d, 0x59a8b0b6, 0x90580c99,
+ 0x05001002, 0x6060b000, 0x8058b104, 0x0501fa5b,
+ 0x80000580, 0x0501fa6a, 0x912cac0d, 0x91cca406,
+ 0x050dffe3, 0x4c600000, 0x6004c000, 0x592c100e,
+ 0x8c080518, 0x05020006, 0x59240005, 0x592c1011,
+ 0x80080580, 0x05020006, 0x4178c000, 0x5930100a,
+ 0x58081403, 0x417a7800, 0x05b9fad2, 0x5c00c000,
+ 0x05f1fd0e, 0x0501f005, 0x6008b000, 0x0501fa60,
+ 0x05f5f9eb, 0x0005ffdc, 0x5c027800, 0x5c00b000,
+ 0x5c025800, 0x1c01f000, 0x4933c856, 0x4a02601d,
+ 0x0010e512, 0x4936600a, 0x05fdffad, 0x64066407,
+ 0x492e6009, 0x4d380000, 0x61367000, 0x0009f800,
+ 0x5c027000, 0x90000541, 0x1c01f000, 0x4803c856,
+ 0x4d2c0000, 0x91380595, 0x05020025, 0x59a808b6,
+ 0x59325809, 0x5930040d, 0x80040580, 0x05020020,
+ 0x4c500000, 0x4c540000, 0x4c580000, 0x91cca406,
+ 0x4050a800, 0x5930b40d, 0x9058b403, 0x8058b104,
+ 0x050dffe6, 0x91cca406, 0x592cb209, 0x9058b403,
+ 0x8058b104, 0x912cac0a, 0x050dffa5, 0x592e5801,
+ 0x812e59c0, 0x05fe07f9, 0x5931d82d, 0x58ef400b,
+ 0x58ee580d, 0x4a025a08, 0x00000103, 0x58ec0009,
+ 0x0801f800, 0x59300402, 0x5c00b000, 0x5c00a800,
+ 0x5c00a000, 0x5c025800, 0x1c01f000, 0x05f5f9b0,
+ 0x5c025800, 0x1c01f000, 0x4933c857, 0x90040db5,
+ 0x05000005, 0x5930141b, 0x0501f83f, 0x05000025,
+ 0x0501f006, 0x4d300000, 0x5932602a, 0x0501f843,
+ 0x5c026000, 0x0500001e, 0x591c0c07, 0x90040583,
+ 0x05000003, 0x90040586, 0x0502001b, 0x591c0c02,
+ 0x5930041b, 0x80040580, 0x05000009, 0x5930021b,
+ 0x80040580, 0x05020014, 0x591c0a02, 0x5930041b,
+ 0x80040580, 0x05020010, 0x0501f009, 0x59300a1b,
+ 0x82040580, 0x0000ffff, 0x05000005, 0x591c0202,
+ 0x59300a1b, 0x80040580, 0x05020007, 0x591c000a,
+ 0x5930080a, 0x80040580, 0x1c01f000, 0x417a3800,
+ 0x90000541, 0x1c01f000, 0x4803c856, 0x4203e000,
+ 0xb0800000, 0x600009fe, 0x4203f800, 0x30000000,
+ 0x40000000, 0x80040840, 0x05a80c90, 0x05ffb7fb,
+ 0x1c01f000, 0x4803c856, 0x4203e000, 0xb0800000,
+ 0x4203f800, 0x20000000, 0x1c01f000, 0x59300808,
+ 0x8c04051e, 0x592c0c0c, 0x05020002, 0x8c040518,
+ 0x1c01f000, 0x05fdfb66, 0x05000007, 0x800800ca,
+ 0x800808c8, 0x80040c00, 0x82063c00, 0x00111b00,
+ 0x491fc857, 0x1c01f000, 0x0501fd45, 0x05020007,
+ 0x59301402, 0x05fdfff4, 0x05000007, 0x411c0000,
+ 0x81300580, 0x05000003, 0x81780500, 0x0501f002,
+ 0x81300540, 0x1c01f000, 0x4d300000, 0x83440480,
+ 0x000007f0, 0x05001003, 0x05d5f907, 0x0501f002,
+ 0x0001fb00, 0x05020008, 0x4936600a, 0x05d5f8fa,
+ 0x4926601d, 0x05b9f9b3, 0x80000580, 0x5c026000,
+ 0x1c01f000, 0x90000541, 0x05fdf7fd, 0x4933c857,
+ 0x05fdfb49, 0x05a80c59, 0x4d2c0000, 0x4d340000,
+ 0x4d440000, 0x4c580000, 0x59325809, 0x5932680a,
+ 0x49425a0a, 0x05d9fe7a, 0x592e8c0a, 0x592c420b,
+ 0x9020050f, 0x0c01f806, 0x5c00b000, 0x5c028800,
+ 0x5c026800, 0x5c025800, 0x1c01f000, 0x0010b1a5,
+ 0x0010b1c6, 0x0010b1cc, 0x0010b1cf, 0x0010b1d7,
+ 0x0010b1a3, 0x0010b1a3, 0x0010b1a3, 0x0010b1da,
+ 0x0010b1e6, 0x0010b1e6, 0x0010b1a3, 0x0010b1a3,
+ 0x0010b1a3, 0x0010b1a3, 0x0010b1a3, 0x4803c857,
+ 0x05a9fc36, 0x814281c0, 0x05020011, 0x41785800,
+ 0x592c0408, 0x8c00051c, 0x05020002, 0x59345c05,
+ 0x442c2800, 0x59340008, 0x48002802, 0x59340009,
+ 0x48002801, 0x59340006, 0x48002804, 0x59340007,
+ 0x48002803, 0x602cb000, 0x0501f032, 0x592c020b,
+ 0x8c00051e, 0x6008b000, 0x0502002e, 0x9004b540,
+ 0x0500002c, 0x44042800, 0x5932680a, 0x59340400,
+ 0x48002801, 0x59340200, 0x90000501, 0x48002802,
+ 0x600cb000, 0x0501f023, 0x814281c0, 0x05fe07f0,
+ 0x59345c05, 0x442c2800, 0x6004b000, 0x0501f01d,
+ 0x9140b540, 0x0500001b, 0x0501f024, 0x814281c0,
+ 0x05020022, 0x59340200, 0x44002800, 0x59340001,
+ 0x48002801, 0x6008b000, 0x0501f012, 0x9140b540,
+ 0x0502001a, 0x0501f00f, 0x9140b540, 0x0500000d,
+ 0x8c20051c, 0x05020015, 0x05d5f880, 0x05000013,
+ 0x8c20050e, 0x05000002, 0x497a600a, 0x4178b000,
+ 0x497a5a0a, 0x0501f003, 0x9140b540, 0x0502000b,
+ 0x592c0408, 0x8400051c, 0x48025c08, 0x592c020b,
+ 0x82000500, 0x00003fff, 0x48025a0b, 0x0501f92b,
+ 0x497a6009, 0x0001f382, 0x592c020b, 0x8c00051e,
+ 0x6008b000, 0x05fe07f3, 0x9004b540, 0x05fc07f1,
+ 0x44042800, 0x6004b000, 0x05fdf7ee, 0x4937c857,
+ 0x4d300000, 0x05f1fa06, 0x0500000d, 0x4926601d,
+ 0x4936600a, 0x05fdfe8e, 0x64066407, 0x492e6009,
+ 0x602c0800, 0x05d1fae8, 0x4d380000, 0x610e7000,
+ 0x0009f800, 0x5c027000, 0x90000541, 0x5c026000,
0x1c01f000, 0x4937c857, 0x4d2c0000, 0x4d200000,
0x59340013, 0x80024130, 0x59325809, 0x91380595,
- 0x05020022, 0x59a80077, 0x90000584, 0x0502001f,
- 0x59240005, 0x592c100a, 0x80080580, 0x05020011,
- 0x4d440000, 0x592e8c07, 0x592c0208, 0x4803c856,
+ 0x05020022, 0x59a800b6, 0x90000584, 0x0502001f,
+ 0x59240005, 0x592c100d, 0x80080580, 0x05020011,
+ 0x4d440000, 0x592e8c0a, 0x592c020b, 0x4803c856,
0x82000500, 0x00000080, 0x84000548, 0x4d3c0000,
0x60027820, 0x8c00050e, 0x05000002, 0x853e7d5c,
- 0x05ddfacd, 0x5c027800, 0x5c028800, 0x0501f003,
- 0x4803c856, 0x05ddfb50, 0x05fdfa8d, 0x05000011,
- 0x4d400000, 0x60028000, 0x41780800, 0x05fdff52,
- 0x5c028000, 0x0501f00a, 0x05ddfb47, 0x05fe07f7,
- 0x05fdfa83, 0x05000007, 0x4c580000, 0x6008b000,
- 0x0501f8ef, 0x5c00b000, 0x05f5fb42, 0x0005fc5a,
+ 0x05d1ffb7, 0x5c027800, 0x5c028800, 0x0501f003,
+ 0x4803c856, 0x05d5f831, 0x05fdfa9b, 0x05000011,
+ 0x4d400000, 0x60028000, 0x41780800, 0x05fdff4c,
+ 0x5c028000, 0x0501f00a, 0x05d5f828, 0x05fe07f7,
+ 0x05fdfa91, 0x05000007, 0x4c580000, 0x6008b000,
+ 0x0501f8fb, 0x5c00b000, 0x05f5f885, 0x0005ffdc,
0x5c024000, 0x5c025800, 0x1c01f000, 0x4937c857,
- 0x4d300000, 0x05f1fc80, 0x0500000f, 0x4926601d,
- 0x4936600a, 0x05fdfe41, 0x64066407, 0x4d3c0000,
- 0x4d380000, 0x417a7800, 0x05d9ff2d, 0x492e6009,
- 0x60127000, 0x0005fc78, 0x5c027000, 0x5c027800,
+ 0x4d300000, 0x05f1f9be, 0x0500000f, 0x4926601d,
+ 0x4936600a, 0x05fdfe46, 0x64066407, 0x4d3c0000,
+ 0x4d380000, 0x417a7800, 0x05d1fa95, 0x492e6009,
+ 0x60127000, 0x0009f800, 0x5c027000, 0x5c027800,
0x90000541, 0x5c026000, 0x1c01f000, 0x4937c857,
- 0x4d300000, 0x05f1fc6c, 0x0500000d, 0x4926601d,
- 0x4936600a, 0x05fdfe2d, 0x600c0800, 0x05d9ff27,
+ 0x4d300000, 0x05f1f9aa, 0x0500000d, 0x4926601d,
+ 0x4936600a, 0x05fdfe32, 0x600c0800, 0x05d1fa8e,
0x64066407, 0x492e6009, 0x4d380000, 0x61467000,
- 0x0005fc78, 0x5c027000, 0x90000541, 0x5c026000,
+ 0x0009f800, 0x5c027000, 0x90000541, 0x5c026000,
0x1c01f000, 0x4933c857, 0x4c580000, 0x4d240000,
0x4d200000, 0x4d400000, 0x4d440000, 0x4d3c0000,
- 0x5932481d, 0x59240a00, 0x8c040500, 0x05000084,
- 0x05c9fcd4, 0x59325809, 0x91383595, 0x05020053,
- 0x60100800, 0x05d9ff0d, 0x60040800, 0x05d9fff7,
- 0x812e59c0, 0x05020040, 0x59a8007b, 0x80000040,
- 0x4803507b, 0x050df8d2, 0x05000004, 0x59240200,
+ 0x5932481d, 0x59240a00, 0x8c040500, 0x0500008b,
+ 0x05b9fba3, 0x59325809, 0x91383595, 0x05020056,
+ 0x60100800, 0x05d1fa74, 0x60040800, 0x05d1fb5b,
+ 0x812e59c0, 0x05020043, 0x59a800bb, 0x80000040,
+ 0x480350bb, 0x050dfea5, 0x05000004, 0x59240200,
0x8400051a, 0x48024a00, 0x417a8000, 0x59cc0000,
0x82000500, 0x00ffffff, 0x59240805, 0x4803c857,
0x4807c857, 0x800409c0, 0x05000016, 0x80041580,
0x05000014, 0x4c000000, 0x60aa8000, 0x59240400,
0x8c00050a, 0x05020004, 0x60083000, 0x61fe89ff,
- 0x0509f865, 0x417a7800, 0x05c9fcfa, 0x05c9fd6c,
+ 0x0509fd0e, 0x417a7800, 0x05b9fbcb, 0x05b9fc3c,
0x600a8000, 0x59cc0c08, 0x8c04051e, 0x05020004,
0x59240a00, 0x84040d56, 0x48064a00, 0x5c000000,
0x48024805, 0x40000800, 0x812000f0, 0x80040540,
0x48026813, 0x40040000, 0xb1200c80, 0x05021004,
0x49238830, 0x84000570, 0x48038832, 0x59240200,
- 0x82000540, 0x00000206, 0x48024a00, 0x59240400,
- 0x8c00050c, 0x05000004, 0x65466429, 0x0501f847,
- 0x0501f03f, 0x60040000, 0x05ddfe15, 0x0005fc5a,
- 0x0501f03b, 0x592c0009, 0x82000500, 0x00ffffff,
- 0x05020008, 0x0005f8e2, 0x59cc0000, 0x82000500,
- 0x00ffffff, 0x44002800, 0x6004b000, 0x0501f847,
- 0x05f1fe13, 0x0501f02e, 0x812e59c0, 0x05020029,
- 0x59340412, 0x800001c0, 0x05000023, 0x80000040,
- 0x48026c12, 0x59cc0c07, 0x82043500, 0x000000ff,
- 0x481bc857, 0x90180583, 0x05020013, 0x59cc0207,
- 0x4803c857, 0x82000d00, 0x0000ff00, 0x4807c857,
- 0x82040580, 0x00000d00, 0x0502000b, 0x59240a00,
- 0x84040d48, 0x48064a00, 0x602c0800, 0x05d9fea3,
- 0x64066407, 0x64066203, 0x64066403, 0x05e9fcc5,
- 0x0501f00f, 0x600c0800, 0x05d9fe9c, 0x4a026202,
- 0x0000ffff, 0x64066203, 0x65466403, 0x05e9fcbd,
- 0x0501f007, 0x600c2800, 0x0501fc5b, 0x0501f004,
- 0x6008b000, 0x0501f836, 0x05f5fa8a, 0x5c027800,
- 0x5c028800, 0x5c028000, 0x5c024000, 0x5c024800,
- 0x5c00b000, 0x1c01f000, 0x4933c857, 0x61f2880f,
- 0x42003000, 0x00fffffc, 0x05d9feb1, 0x05ba0eb4,
- 0x4936600a, 0x05fdfd85, 0x417a7800, 0x05d9fe74,
- 0x600c0800, 0x05d9fe7d, 0x497a6c12, 0x64066203,
- 0x640a6403, 0x05e9f49f, 0x492fc857, 0x4c580000,
+ 0x8400051e, 0x82000540, 0x00000206, 0x48024a00,
+ 0x59240400, 0x8c00050c, 0x05000004, 0x65466429,
+ 0x0501f84d, 0x0501f045, 0x60040000, 0x41781800,
+ 0x05d5fb94, 0x0501ff8c, 0x0005ffdc, 0x0501f03f,
+ 0x592c000c, 0x82000500, 0x00ffffff, 0x05020008,
+ 0x05d9fd3f, 0x59cc0000, 0x82000500, 0x00ffffff,
+ 0x44002800, 0x6004b000, 0x0501f850, 0x05f1fb17,
+ 0x0501f032, 0x812e59c0, 0x0502002d, 0x59340412,
+ 0x800001c0, 0x05000027, 0x80000040, 0x48026c12,
+ 0x59cc0c07, 0x82043500, 0x000000ff, 0x481bc857,
+ 0x90180583, 0x05020017, 0x59cc0207, 0x4803c857,
+ 0x82000d00, 0x0000ff00, 0x4807c857, 0x82040580,
+ 0x00000d00, 0x0502000f, 0x59240805, 0x82040d00,
+ 0x00ffffff, 0x0500000b, 0x59240a00, 0x84040d48,
+ 0x48064a00, 0x602c0800, 0x05d1fa03, 0x64066407,
+ 0x64066203, 0x64066403, 0x05e5fd83, 0x0501f00f,
+ 0x600c0800, 0x05d1f9fc, 0x4a026202, 0x0000ffff,
+ 0x64066203, 0x65466403, 0x05e5fd7b, 0x0501f007,
+ 0x600c2800, 0x0501fe40, 0x0501f004, 0x6008b000,
+ 0x0501f83b, 0x05f1ffc6, 0x5c027800, 0x5c028800,
+ 0x5c028000, 0x5c024000, 0x5c024800, 0x5c00b000,
+ 0x1c01f000, 0x4933c857, 0x61f2880f, 0x42003000,
+ 0x00fffffc, 0x05d1fa0b, 0x05aa0ad0, 0x4936600a,
+ 0x05fdfd83, 0x417a7800, 0x05d1f9d5, 0x600c0800,
+ 0x05d1f9dd, 0x497a6c12, 0x59300429, 0x900005a1,
+ 0x05020003, 0x599c0208, 0x48026c12, 0x64066203,
+ 0x640a6403, 0x05e5f558, 0x492fc857, 0x4c580000,
0x4c000000, 0x8058b1c0, 0x0500000a, 0x82580500,
- 0xfffffff0, 0x05ba0ea2, 0x8058b0d0, 0x592c0409,
- 0x82000500, 0xfffff0ff, 0x80580540, 0x48025c09,
+ 0xfffffff0, 0x05aa0ab9, 0x8058b0d0, 0x592c040c,
+ 0x82000500, 0xfffff0ff, 0x80580540, 0x48025c0c,
0x5c000000, 0x5c00b000, 0x1c01f000, 0x492fc857,
- 0x4c000000, 0x4c040000, 0x800000d8, 0x592c0c09,
- 0x82040d00, 0xffff0fff, 0x80040540, 0x48025c09,
+ 0x4c000000, 0x4c040000, 0x800000d8, 0x592c0c0c,
+ 0x82040d00, 0xffff0fff, 0x80040540, 0x48025c0c,
0x5c000800, 0x5c000000, 0x1c01f000, 0x4933c857,
- 0x4d2c0000, 0x59325809, 0x592c0208, 0x8400055e,
- 0x48025a08, 0x4c500000, 0x4c540000, 0x4c580000,
- 0x05fdffda, 0x0005f8e2, 0x64602800, 0x80142800,
- 0x8058b040, 0x91cca407, 0x4014a800, 0x0509ff9d,
+ 0x4d2c0000, 0x59325809, 0x592c020b, 0x8400055e,
+ 0x48025a0b, 0x4c500000, 0x4c540000, 0x4c580000,
+ 0x05fdffda, 0x05d9fcc2, 0x64602800, 0x80142800,
+ 0x8058b040, 0x91cca407, 0x4014a800, 0x050dfd60,
0x5c00b000, 0x5c00a800, 0x5c00a000, 0x5c025800,
- 0x1c01f000, 0x0501f805, 0x60058800, 0x05000002,
- 0x60018800, 0x1c01f000, 0x59325809, 0x592c0205,
- 0x82000580, 0x00000152, 0x1c01f000, 0x5930002b,
- 0x80000540, 0x05be0f19, 0x1c01f000, 0x59300008,
- 0x82000500, 0x04000800, 0x82000580, 0x04000800,
- 0x05020003, 0x59300221, 0x48025c10, 0x1c01f000,
- 0x592c0408, 0x82000500, 0x0000f000, 0x82000580,
- 0x00003000, 0x05020003, 0x4a026416, 0x00000100,
- 0x1c01f000, 0x4d2c0000, 0x59325809, 0x59300203,
- 0x4933c857, 0x492fc857, 0x493bc857, 0x4803c857,
- 0x90003491, 0x05ba1e4e, 0x0c01f803, 0x5c025800,
- 0x1c01f000, 0x00108bb6, 0x00108bbc, 0x00108bf4,
- 0x00108bb6, 0x00108bb6, 0x00108bb6, 0x00108bb6,
- 0x00108bb6, 0x00108bb7, 0x00108bb6, 0x00108bb6,
- 0x00108bb6, 0x00108bb6, 0x00108bb6, 0x00108c9b,
- 0x00108bb6, 0x00108bb6, 0x05b9fe39, 0xb1383498,
- 0x05ba1e37, 0x493a6403, 0x64066203, 0x05e9f429,
- 0x91380593, 0x05020010, 0x492fc857, 0x05fdfd12,
- 0x05000003, 0x643a6203, 0x0501f005, 0x592c000d,
- 0x800001c0, 0x05000005, 0x640a6203, 0x59a8002e,
- 0x48026006, 0x1c01f000, 0x64025a07, 0x0001fb5b,
- 0x0005f45a, 0x913805a7, 0x0500001e, 0x91380594,
- 0x05000018, 0x05fdfd00, 0x0500000c, 0xb13805a1,
- 0x05000004, 0xb13805a0, 0x05fe07f3, 0x4937c857,
- 0x05edf91f, 0x05f20357, 0x59300203, 0x9000058e,
- 0x050000bf, 0x05b9fe12, 0x91380595, 0x05000003,
- 0x91380596, 0x05ba0e0e, 0x05edf915, 0x05f2034d,
- 0x59300203, 0x90000582, 0x05ba0e09, 0x0501f00d,
- 0x4937c857, 0x05e9fcab, 0x6446580f, 0x0501f004,
- 0x4937c857, 0x05e9fca7, 0x6442580f, 0x64c65a07,
- 0x6412580e, 0x0001fb5b, 0x05ddfbc6, 0x05f1f2d4,
- 0x59341400, 0x82081d00, 0x000000ff, 0x59300c03,
- 0x480bc857, 0x4807c857, 0xb0040593, 0x05000020,
- 0x90040582, 0x0500000f, 0x90040581, 0x05000010,
- 0x90040583, 0x05000013, 0x90040585, 0x05000014,
- 0x900405b3, 0x05000012, 0x90040580, 0x05000013,
- 0x90040584, 0x05ba0de6, 0x0501f875, 0x0501f010,
- 0x900c0583, 0x05000837, 0x0501f00d, 0x900c058b,
- 0x0502000b, 0x601c0800, 0x05d9fdac, 0x0501f008,
- 0x900c0585, 0x0500084a, 0x0501f005, 0x900c0589,
- 0x05000865, 0x0501f002, 0x0501f86a, 0x654a6403,
- 0x59a81077, 0x592c040c, 0x8c000500, 0x05000002,
- 0x60201000, 0x592c040c, 0x8c000516, 0x05000002,
- 0x90081418, 0x592c000d, 0x497a580e, 0x497a580f,
- 0x80080c80, 0x05000007, 0x05001004, 0x641e5a07,
- 0x40001000, 0x0501f004, 0x64565a07, 0x0501f002,
- 0x64025a07, 0x480a580d, 0x05f1fc72, 0x0500000d,
- 0x592c1001, 0x480a600d, 0x58080800, 0x90080402,
- 0x592c1012, 0x592c1813, 0x60003000, 0x42002000,
- 0x00101073, 0x05f1fdc0, 0x05000002, 0x1c01f000,
- 0x64b25a07, 0x497a580d, 0x0001fb5b, 0x0005f45a,
- 0x91380595, 0x05020008, 0x59a8008d, 0x8c000502,
- 0x05020007, 0x41780800, 0x05d9fe60, 0x60100800,
- 0x05d9f572, 0x601c0800, 0x05d9f570, 0x05ddfee3,
- 0x60401000, 0x05020008, 0x59340002, 0x82000500,
- 0x00ff0000, 0x82000580, 0x00ff0000, 0x05fc07f2,
- 0x60201000, 0x05ddfba3, 0x05fc07ef, 0x592c040c,
- 0x84000540, 0x48025c0c, 0x05fdf7ef, 0x91380595,
- 0x0502000b, 0x59a8008d, 0x8c000502, 0x0502000a,
- 0x05d9febb, 0x4d3c0000, 0x417a7800, 0x05d9fd4c,
- 0x5c027800, 0x60180800, 0x05d9f554, 0x60100800,
- 0x05d9f552, 0x05ddfec5, 0x60401000, 0x05020008,
- 0x59340002, 0x82000500, 0x00ff0000, 0x82000580,
- 0x00ff0000, 0x05fc07ef, 0x60201000, 0x05ddfb85,
- 0x05fc07ec, 0x592c040c, 0x84000540, 0x48025c0c,
- 0x05fdf7ef, 0x60100800, 0x05d9f540, 0x91380595,
- 0x05020003, 0x0505fe3f, 0x05dc0812, 0x1c01f000,
- 0x91380595, 0x05020015, 0x4c580000, 0x91cc1408,
- 0x6008b000, 0x91341c06, 0x05f5fd97, 0x0502000e,
- 0x91cc140a, 0x6008b000, 0x91341c08, 0x05f5fd92,
- 0x05020009, 0x59342200, 0x59cc1007, 0x800811c0,
- 0x05000003, 0x480a6801, 0x84102542, 0x8410251a,
- 0x48126a00, 0x5c00b000, 0x1c01f000, 0x4803c856,
- 0xb13805a1, 0x0500000b, 0xb13805a0, 0x05000009,
- 0xb13805a2, 0x05020011, 0x64c65a07, 0x6412580e,
- 0x644a580f, 0x0001fb5b, 0x05ddfb12, 0x0005f45a,
- 0x592c000d, 0x800001c0, 0x05000005, 0x59a8002e,
- 0x48026006, 0x640a6203, 0x1c01f000, 0x64025a07,
- 0x0001fb5b, 0x0005fc5a, 0x1c01f000, 0x42000000,
- 0x0010b2ee, 0x0509fd90, 0x05e9fc89, 0x59300203,
- 0x4933c857, 0x4803c857, 0x90000c91, 0x05ba1d34,
- 0x0c01f802, 0x05e9f46e, 0x00108cd0, 0x00108cd9,
- 0x00108cd1, 0x00108ccf, 0x00108ccf, 0x00108ccf,
- 0x00108ccf, 0x00108ccf, 0x00108ccf, 0x00108ccf,
- 0x00108ccf, 0x00108ccf, 0x00108ccf, 0x00108ccf,
- 0x00108cd1, 0x00108ccf, 0x00108ccf, 0x05b9fd20,
- 0x1c01f000, 0x59300403, 0xb0000592, 0x05f8061d,
- 0x05ddfae4, 0x59325809, 0x641a5a07, 0x0001fb5b,
- 0x05f1f1ef, 0x59301804, 0x840c0520, 0x48026004,
- 0x598c000b, 0x81300580, 0x0502000f, 0x8c0c0520,
- 0x0502000f, 0x42001000, 0x0010b20e, 0x50081000,
- 0x58080002, 0x82000580, 0x00000100, 0x0500000d,
- 0x5808000b, 0x81300580, 0x05ba0d05, 0x4978100b,
- 0x0501f003, 0x8c0c0520, 0x05fe07e3, 0x0201f800,
- 0x0010f0f2, 0x80c40040, 0x05fc07df, 0x05b9fcfc,
- 0x05e9ff5a, 0x05fc07fa, 0x59300203, 0x90000c91,
- 0x05ba1cf7, 0x0c01f7c5, 0x4933c857, 0x4c500000,
- 0x4c540000, 0x4c580000, 0x592c0c08, 0x48065814,
- 0x59cc0809, 0x48065808, 0x59cc0808, 0x4806580c,
- 0x59a8088c, 0x82040500, 0x000003ff, 0x800010c4,
- 0x8c040514, 0x05000004, 0x59cc0002, 0x90000503,
- 0x80081480, 0x480a621c, 0x412c0800, 0x05bdf85a,
- 0x05b80cdf, 0x492c080a, 0x58040409, 0x84000552,
- 0x84000540, 0x48000c09, 0x90081403, 0x80081104,
- 0x91cca406, 0x912cac05, 0x60400800, 0x90080490,
- 0x05021003, 0x40080800, 0x80000580, 0x4004b000,
- 0x4c000000, 0x0509fe2a, 0x5c000000, 0x800001c0,
- 0x0500000a, 0x412c1000, 0x4c000000, 0x05bdf842,
- 0x05b80cc7, 0x492c1001, 0x912cac05, 0x5c000000,
- 0x40001000, 0x05fdf7ee, 0x5c00b000, 0x5c00a800,
- 0x5c00a000, 0x1c01f000, 0x4933c857, 0x4d2c0000,
- 0x4c380000, 0x59325809, 0x5930021c, 0x48025a09,
- 0x59301013, 0x640a6203, 0x592c020b, 0x8c000500,
- 0x05000004, 0x59300017, 0x592c1010, 0x80081480,
- 0x40080000, 0x0501f963, 0x80001540, 0x05020007,
- 0x64025a07, 0x592c000c, 0x82000500, 0x00000c00,
- 0x05000009, 0x0501f009, 0x8c08053e, 0x05000005,
- 0x641e5a07, 0x80081080, 0x80081000, 0x0501f002,
- 0x64565a07, 0x480a5808, 0x42000000, 0x0010cf39,
- 0x50007000, 0x5838000a, 0x80000540, 0x05020007,
- 0x4930700b, 0x4930700a, 0x58380002, 0x90000580,
- 0x05020808, 0x0501f004, 0x90001400, 0x45301000,
- 0x4930700a, 0x5c007000, 0x5c025800, 0x1c01f000,
- 0x4933c857, 0x592c000a, 0x40001000, 0x48007009,
- 0x90080405, 0x48007003, 0x592c000e, 0x592c100f,
- 0x48007006, 0x48087007, 0x592c0014, 0x592c1209,
- 0x80080c80, 0x05001002, 0x40001000, 0x90081403,
- 0x80081104, 0x90080490, 0x05021003, 0x80000580,
- 0x0501f002, 0x60401000, 0x4800700c, 0x48087004,
- 0x800810c4, 0x48087005, 0x40381000, 0x0001f01c,
- 0x4d2c0000, 0x05b9ffe8, 0x05b80c6d, 0x42000800,
- 0x0010cf39, 0x452c0800, 0x497a580a, 0x497a580b,
- 0x497a580c, 0x4a025808, 0x00108d90, 0x4a025802,
- 0x00000100, 0x64025801, 0x5c025800, 0x1c01f000,
- 0x4833c857, 0x4d300000, 0x4d2c0000, 0x4c5c0000,
- 0x4030b800, 0x585c0009, 0x80025d40, 0x05020004,
- 0x585c000b, 0x4c000000, 0x0501f03b, 0x585c0002,
- 0x82000580, 0x00000100, 0x0502001c, 0x592c0801,
- 0x4c040000, 0x05b9ffeb, 0x5c000800, 0x800409c0,
- 0x05000017, 0x4804b809, 0x585c100c, 0x800811c0,
- 0x05020004, 0x40065800, 0x05b9ffeb, 0x0501f010,
- 0x90080490, 0x05021003, 0x80000580, 0x0501f002,
- 0x60401000, 0x4800b80c, 0x4808b804, 0x800810c4,
- 0x4808b805, 0x90040405, 0x4800b803, 0x405c1000,
- 0x0001f81c, 0x0501f022, 0x0501f825, 0x585c000b,
- 0x80026540, 0x59300000, 0x80000d40, 0x05020002,
- 0x4800b80a, 0x4800b80b, 0x497a6000, 0x4c000000,
- 0x4978b809, 0x59325809, 0x4a025a05, 0x00000103,
- 0x59300402, 0x48025c07, 0x592c100c, 0x4c080000,
- 0x0001fb5b, 0x0501f8ce, 0x05fdf809, 0x5c001000,
- 0x8c080518, 0x05000003, 0x05fdf928, 0x0501f002,
- 0x0005fc5a, 0x405c7000, 0x5c000000, 0x80026540,
- 0x05000003, 0x59325809, 0x05fdff8a, 0x5c00b800,
- 0x5c025800, 0x5c026000, 0x1c01f000, 0x483bc857,
- 0x58380009, 0x40025800, 0x05b9ffb3, 0x5838000b,
- 0x80026540, 0x59300009, 0x80025d40, 0x640a5a07,
- 0x1c01f000, 0x4803c857, 0x4933c857, 0x4d1c0000,
- 0x497a601e, 0x41323800, 0x40026000, 0x4d3c0000,
- 0x60167800, 0x0501f838, 0x5c027800, 0x411e6000,
- 0x4933c857, 0x59300416, 0x84000502, 0x48026416,
- 0x5c023800, 0x1c01f000, 0x481bc857, 0x4933c857,
- 0x4c5c0000, 0x4c600000, 0x4010b800, 0x4014c000,
- 0x0509fa9e, 0x05c9f97f, 0x59240400, 0x8c00050a,
- 0x05020006, 0x40602800, 0x405c3000, 0x0505fd2e,
- 0x90000541, 0x0501f002, 0x80000580, 0x5c00c000,
- 0x5c00b800, 0x1c01f000, 0x4803c856, 0x4d300000,
- 0x42026000, 0x00110514, 0x59a8000d, 0x81640580,
- 0x05000013, 0x59300c07, 0x90040581, 0x05000009,
- 0x90040584, 0x05000004, 0x90040590, 0x05f80c59,
- 0x0501f007, 0x59300203, 0x90000d87, 0x05000004,
- 0x4807c857, 0x05fdf9db, 0x05020807, 0x91326430,
- 0x41580000, 0x81300480, 0x05fc17ec, 0x5c026000,
- 0x1c01f000, 0x4933c857, 0x59300403, 0x4803c857,
- 0x05e9fb13, 0x4df00000, 0x59300407, 0x4803c857,
- 0x90000d82, 0x05000013, 0x90000d81, 0x05000007,
- 0x90000d84, 0x05000005, 0x4933c856, 0x5c03e000,
- 0x05e80af3, 0x0501f03e, 0x59300203, 0x90000d81,
- 0x05000014, 0x90000d82, 0x0500002b, 0x90000d85,
- 0x05000029, 0x90000d8e, 0x05000027, 0x05b9fbac,
- 0x59300203, 0x90000d89, 0x0500000a, 0x90000d8b,
- 0x05000008, 0x90000d8a, 0x0500001f, 0x90000d8c,
- 0x0500001d, 0x90000d8e, 0x0500001b, 0x05b9fba0,
- 0x598c000b, 0x81300580, 0x05020003, 0x05e9fdfb,
- 0x05020015, 0x59300004, 0x4803c857, 0x8c000520,
- 0x05000004, 0x84000520, 0x48026004, 0x0501f00e,
- 0x0201f800, 0x0010f0f2, 0x80c40040, 0x05ba0b90,
- 0x5c03e000, 0x05e80aca, 0x59300407, 0x90000d82,
- 0x05000013, 0x05ddf953, 0x05f9ff98, 0x05f00f51,
- 0x0501f00f, 0x5c03e000, 0x05e80ac1, 0x59300407,
- 0x90000d82, 0x0500000a, 0x5930081d, 0x58040200,
- 0x8c000500, 0x0500010f, 0x05ddf946, 0x05f9ff8b,
- 0x05f00f44, 0x8d3c0500, 0x05000003, 0x0509fafc,
- 0x05f1f04f, 0x64066229, 0x4a026403, 0x00000085,
- 0x64266203, 0x640a6407, 0x42000800, 0x80000040,
- 0x0005f32e, 0x60007040, 0x4203e000, 0xb0800000,
- 0x6033f800, 0x40000000, 0x40000000, 0x40000000,
- 0x0501b004, 0x80387040, 0x05b80b65, 0x05fdf7f9,
- 0x1c01f000, 0x4203e000, 0xb0800000, 0x6023f800,
- 0x1c01f000, 0x83300480, 0x00110484, 0x05001006,
- 0x41540000, 0x81300480, 0x05021003, 0x80000580,
- 0x1c01f000, 0x81780080, 0x1c01f000, 0x59300027,
- 0x80000540, 0x05000006, 0x4d2c0000, 0x40025800,
- 0x05b9feec, 0x497a6027, 0x5c025800, 0x1c01f000,
- 0x592c720b, 0x8c380500, 0x05020008, 0x59307008,
- 0x8c380516, 0x05000005, 0x59307009, 0x58387010,
- 0x59300014, 0x80380480, 0x1c01f000, 0x59a80877,
- 0x59cc2808, 0x82140500, 0x00000c00, 0x05000003,
- 0x90040490, 0x05001015, 0x80001580, 0x8c140512,
- 0x05000004, 0x90040494, 0x05001010, 0x59cc100a,
- 0x80000580, 0x8c140510, 0x05000004, 0x90040498,
- 0x0500100a, 0x59cc000b, 0x80080400, 0x05001007,
- 0x05000005, 0x90000418, 0x80040480, 0x05001003,
- 0x80000580, 0x1c01f000, 0x42000000, 0x0010b2cb,
- 0x0509fb79, 0x90000541, 0x05fdf7fb, 0x4933c857,
- 0x4937c857, 0x4923c857, 0x4927c857, 0x492fc857,
- 0x48efc857, 0x4d1c0000, 0x4d300000, 0x41323800,
- 0x05f1f825, 0x0500001d, 0x48ee602d, 0x4926601d,
- 0x4936600a, 0x05fdf9e5, 0x591c0407, 0x90000583,
- 0x05000008, 0x591c0202, 0x4803c857, 0x4802641b,
- 0x591c0402, 0x4802621b, 0x4803c857, 0x0501f007,
- 0x591c0202, 0x4803c857, 0x4802621b, 0x591c0402,
- 0x4802641b, 0x4803c857, 0x491e602a, 0x64066407,
- 0x492e6009, 0x4d380000, 0x615e7000, 0x0005fc78,
- 0x5c027000, 0x90000541, 0x5c026000, 0x5c023800,
- 0x1c01f000, 0x4933c857, 0x493bc857, 0x4937c857,
- 0x4d2c0000, 0x4c500000, 0x4c540000, 0x4c580000,
- 0x59325809, 0x05f9fdf2, 0x05000017, 0x91cca406,
- 0x912cac07, 0x91380596, 0x05020007, 0x59a80077,
- 0x90000588, 0x0502000e, 0x492fc857, 0x6008b000,
- 0x0501f008, 0x91380595, 0x05020009, 0x492fc857,
- 0x59a80077, 0x90000598, 0x05020005, 0x6018b000,
- 0x0509fbfc, 0x05f1f9fe, 0x0501f003, 0x05f1fea1,
- 0x0005fc5a, 0x5c00b000, 0x5c00a800, 0x5c00a000,
- 0x5c025800, 0x1c01f000, 0x4933c857, 0x05e9fa20,
- 0x4df00000, 0x59300203, 0x90000c91, 0x05ba1acc,
- 0x0c01f001, 0x00108f37, 0x00108f36, 0x00108f3c,
- 0x00108f54, 0x00108f3b, 0x00108f36, 0x00108f36,
- 0x00108f36, 0x00108f36, 0x00108f36, 0x00108f36,
- 0x00108f36, 0x00108f36, 0x00108f36, 0x00108f36,
- 0x00108f36, 0x00108f3c, 0x05b9fab9, 0x5c03e000,
- 0x05e809f3, 0x80000580, 0x1c01f000, 0x05bdfc9c,
- 0x5c03e000, 0x05e809ee, 0x8d3c0502, 0x05020011,
- 0x4d2c0000, 0x59325809, 0x64165a07, 0x0001fb5b,
- 0x5c025800, 0x497a6009, 0x8d3c0500, 0x0502000b,
- 0x642a6229, 0x4a026403, 0x00000085, 0x64266203,
- 0x640a6407, 0x42000800, 0x80004040, 0x0005fb2e,
- 0x81780080, 0x1c01f000, 0x05edff75, 0x05fdf7fd,
- 0x05f9fb02, 0x05020003, 0x05e9fcc3, 0x05020007,
- 0x0201f800, 0x0010ef65, 0x80c40040, 0x05fc07e1,
- 0x05e9f8fd, 0x05ba0a92, 0x59300203, 0x90000d83,
- 0x05b80a8f, 0x90000c91, 0x05ba1a8d, 0x0c01f7c2,
+ 0x1c01f000, 0x59325809, 0x592c0208, 0x82000580,
+ 0x00000152, 0x1c01f000, 0x59325809, 0x592c020b,
+ 0x8400055c, 0x48025a0b, 0x1c01f000, 0x59300809,
+ 0x58040208, 0x82000500, 0x000000ff, 0xb00005b9,
+ 0x1c01f000, 0x5930002b, 0x80000540, 0x05ae0bb1,
+ 0x1c01f000, 0x59300008, 0x82000500, 0x04000800,
+ 0x82000580, 0x04000800, 0x05020003, 0x59300221,
+ 0x48025c13, 0x1c01f000, 0x592c040b, 0x82000500,
+ 0x0000f000, 0x82000580, 0x00003000, 0x05020003,
+ 0x4a026416, 0x00000100, 0x1c01f000, 0x4d2c0000,
+ 0x59325809, 0x59300203, 0x4933c857, 0x492fc857,
+ 0x493bc857, 0x4803c857, 0x90003491, 0x05aa1a5f,
+ 0x0c01f803, 0x5c025800, 0x1c01f000, 0x0010b390,
+ 0x0010b396, 0x0010b3ce, 0x0010b390, 0x0010b390,
+ 0x0010b390, 0x0010b390, 0x0010b390, 0x0010b391,
+ 0x0010b390, 0x0010b390, 0x0010b390, 0x0010b390,
+ 0x0010b390, 0x0010b4a6, 0x0010b390, 0x0010b390,
+ 0x05a9fa4a, 0xb13834a0, 0x05aa1a48, 0x493a6403,
+ 0x64066203, 0x05e5f4dc, 0x91380593, 0x05020010,
+ 0x492fc857, 0x05fdfd05, 0x05000003, 0x643a6203,
+ 0x0501f005, 0x592c0010, 0x800001c0, 0x05000005,
+ 0x640a6203, 0x59a8005c, 0x48026006, 0x1c01f000,
+ 0x64025a0a, 0x0001fb82, 0x0005f7dc, 0x913805a7,
+ 0x0500001e, 0x91380594, 0x05000018, 0x05fdfcf3,
+ 0x0500000c, 0xb13805a1, 0x05000004, 0xb13805a0,
+ 0x05fe07f3, 0x4937c857, 0x05e9fd07, 0x05f20081,
+ 0x59300203, 0x9000058e, 0x050000f0, 0x05a9fa23,
+ 0x91380595, 0x05000003, 0x91380596, 0x05aa0a1f,
+ 0x05e9fcfd, 0x05f20077, 0x59300203, 0x90000582,
+ 0x05aa0a1a, 0x0501f00d, 0x4937c857, 0x05e9f8a6,
+ 0x64465812, 0x0501f004, 0x4937c857, 0x05e9f8a2,
+ 0x64425812, 0x64c65a0a, 0x64125811, 0x0001fb82,
+ 0x05d5f8a4, 0x05f1f003, 0x59341400, 0x82081d00,
+ 0x000000ff, 0x59300c03, 0x480bc857, 0x4807c857,
+ 0xb0040593, 0x05000020, 0x90040582, 0x0500000f,
+ 0x90040581, 0x05000010, 0x90040583, 0x05000013,
+ 0x90040585, 0x05000014, 0x900405b3, 0x05000012,
+ 0x90040580, 0x05000013, 0x90040584, 0x05aa09f7,
+ 0x0501f8a6, 0x0501f010, 0x900c0583, 0x05000868,
+ 0x0501f00d, 0x900c058b, 0x0502000b, 0x601c0800,
+ 0x05d1f901, 0x0501f008, 0x900c0585, 0x0500087b,
+ 0x0501f005, 0x900c0589, 0x05000896, 0x0501f002,
+ 0x0501f89b, 0x654a6403, 0x59a810b6, 0x592c040f,
+ 0x8c000500, 0x05000002, 0x60201000, 0x592c040f,
+ 0x8c000516, 0x05000002, 0x90081418, 0x592c0010,
+ 0x497a5811, 0x497a5812, 0x80080c80, 0x05000007,
+ 0x05001004, 0x641e5a0a, 0x40001000, 0x0501f004,
+ 0x64565a0a, 0x0501f002, 0x64025a0a, 0x480a5810,
+ 0x4d2c0000, 0x05a9fd64, 0x0500003c, 0x5c001000,
+ 0x41cc0800, 0x5808040f, 0x8c000516, 0x05020002,
+ 0x91cc0c06, 0x58081810, 0x58082015, 0x58082816,
+ 0x58080004, 0x48025806, 0x48065803, 0x480a580a,
+ 0x480e5805, 0x48125807, 0x48165808, 0x64025801,
+ 0x4a025809, 0x0010150e, 0x900c1c03, 0x800c1904,
+ 0x50040000, 0x9c0001c0, 0x44000800, 0x80040800,
+ 0x800c1840, 0x05fe07fb, 0x5808040f, 0x8c000500,
+ 0x0500000b, 0x41cc0800, 0x8c000516, 0x05000002,
+ 0x91cc0c06, 0x64040800, 0x80040800, 0x46000800,
+ 0x00000900, 0x84000500, 0x4800140f, 0x42007000,
+ 0x000211a7, 0x58380000, 0x90000580, 0x0502000b,
+ 0x58380807, 0x58380005, 0x80040540, 0x05020007,
+ 0x412c1000, 0x0001f821, 0x59dc0806, 0x8c04053e,
+ 0x05fc07fe, 0x0001f066, 0x412c1000, 0x0001f821,
+ 0x850e1d5c, 0x05e1f18d, 0x5c025800, 0x64b25a0a,
+ 0x497a5810, 0x0001fb82, 0x0005f7dc, 0x91380595,
+ 0x05020008, 0x59a800d1, 0x8c000502, 0x05020007,
+ 0x41780800, 0x05d1f981, 0x60100800, 0x05d1f096,
+ 0x601c0800, 0x05d1f094, 0x05d5fc54, 0x60401000,
+ 0x05020008, 0x59340002, 0x82000500, 0x00ff0000,
+ 0x82000580, 0x00ff0000, 0x05fc07f2, 0x60201000,
+ 0x05d5f84b, 0x05fc07ef, 0x592c040f, 0x84000540,
+ 0x48025c0f, 0x05fdf7ef, 0x91380595, 0x0502000b,
+ 0x59a800d1, 0x8c000502, 0x0502000a, 0x05d1f9dc,
+ 0x4d3c0000, 0x417a7800, 0x05d1f871, 0x5c027800,
+ 0x60180800, 0x05d1f078, 0x60100800, 0x05d1f076,
+ 0x05d5fc36, 0x60401000, 0x05020008, 0x59340002,
+ 0x82000500, 0x00ff0000, 0x82000580, 0x00ff0000,
+ 0x05fc07ef, 0x60201000, 0x05d5f82d, 0x05fc07ec,
+ 0x592c040f, 0x84000540, 0x48025c0f, 0x05fdf7ef,
+ 0x60100800, 0x05d1f064, 0x91380595, 0x05020003,
+ 0x0509f9c4, 0x05d00c20, 0x1c01f000, 0x91380595,
+ 0x05020015, 0x4c580000, 0x91cc1408, 0x6008b000,
+ 0x91341c06, 0x05f5fbb2, 0x0502000e, 0x91cc140a,
+ 0x6008b000, 0x91341c08, 0x05f5fbad, 0x05020009,
+ 0x59342200, 0x59cc1007, 0x800811c0, 0x05000003,
+ 0x480a6801, 0x84102542, 0x8410251a, 0x48126a00,
+ 0x5c00b000, 0x1c01f000, 0x4803c856, 0xb13805a1,
+ 0x05000019, 0xb13805a0, 0x05000017, 0xb13805a2,
+ 0x05020003, 0x644a5812, 0x0501f004, 0xb13805a3,
+ 0x0502001b, 0x644e5812, 0x64c65a0a, 0x64125811,
+ 0x59cc0001, 0x48025813, 0x59cc0002, 0x48025814,
+ 0x59cc0003, 0x48025815, 0x59cc0004, 0x48025816,
+ 0x59cc0005, 0x48025817, 0x0001fb82, 0x05d1ffb1,
+ 0x0005f7dc, 0x592c0010, 0x800001c0, 0x05000005,
+ 0x59a8005c, 0x48026006, 0x640a6203, 0x1c01f000,
+ 0x64025a0a, 0x0001fb82, 0x0005ffdc, 0x1c01f000,
+ 0x42000000, 0x0010e46c, 0x050dfb0e, 0x05e9f844,
+ 0x59300203, 0x4933c857, 0x4803c857, 0x90000c91,
+ 0x05aa1906, 0x0c01f802, 0x05e9f02e, 0x0010b4e9,
+ 0x0010b4f2, 0x0010b4ea, 0x0010b4e8, 0x0010b4e8,
+ 0x0010b4e8, 0x0010b4e8, 0x0010b4e8, 0x0010b4e8,
+ 0x0010b4e8, 0x0010b4e8, 0x0010b4e8, 0x0010b4e8,
+ 0x0010b4e8, 0x0010b4ea, 0x0010b4e8, 0x0010b4e8,
+ 0x05a9f8f2, 0x1c01f000, 0x59300403, 0xb0000592,
+ 0x05f804d3, 0x05d1ff83, 0x59325809, 0x641a5a0a,
+ 0x0001fb82, 0x05edf6df, 0x59301804, 0x840c0520,
+ 0x48026004, 0x598c000b, 0x81300580, 0x0502000f,
+ 0x8c0c0520, 0x0502000f, 0x42001000, 0x0010e387,
+ 0x50081000, 0x58080002, 0x82000580, 0x00000100,
+ 0x0500000b, 0x5808000c, 0x81300580, 0x05aa08d7,
+ 0x4978100c, 0x0501f003, 0x8c0c0520, 0x05fe07e3,
+ 0x05e5fcae, 0x05fc07e1, 0x05a9f8d0, 0x05e9fb05,
+ 0x05fc07fc, 0x59300203, 0x90000c91, 0x05aa18cb,
+ 0x0c01f7c7, 0x4933c857, 0x4c500000, 0x4c540000,
+ 0x4c580000, 0x592c0c0b, 0x48065817, 0x59cc0809,
+ 0x4806580b, 0x59cc0808, 0x4806580f, 0x59a808d0,
+ 0x82040500, 0x000003ff, 0x800010c4, 0x8c040514,
+ 0x05000004, 0x59cc0002, 0x90000503, 0x80081480,
+ 0x480a621c, 0x412c0800, 0x05a9fc4b, 0x05a808b3,
+ 0x492c080d, 0x5804040c, 0x84000552, 0x84000540,
+ 0x48000c0c, 0x90081403, 0x80081104, 0x91cca406,
+ 0x912cac08, 0x60400800, 0x90080490, 0x05021003,
+ 0x40080800, 0x80000580, 0x4004b000, 0x4c000000,
+ 0x050dfbaa, 0x5c000000, 0x800001c0, 0x0500000a,
+ 0x412c1000, 0x4c000000, 0x05a9fc33, 0x05a8089b,
+ 0x492c1001, 0x912cac08, 0x5c000000, 0x40001000,
+ 0x05fdf7ee, 0x5c00b000, 0x5c00a800, 0x5c00a000,
+ 0x1c01f000, 0x4933c857, 0x4d2c0000, 0x4c380000,
+ 0x59325809, 0x5930021c, 0x48025a0c, 0x59301013,
+ 0x640a6203, 0x592c020e, 0x8c000500, 0x05000004,
+ 0x59300017, 0x592c1013, 0x80081480, 0x40080000,
+ 0x0501f962, 0x80001540, 0x05020007, 0x64025a0a,
+ 0x592c000f, 0x82000500, 0x00000c00, 0x05000009,
+ 0x0501f009, 0x8c08053e, 0x05000005, 0x641e5a0a,
+ 0x80081080, 0x80081000, 0x0501f002, 0x64565a0a,
+ 0x480a580b, 0x42000000, 0x001102f0, 0x50007000,
+ 0x5838000b, 0x80000540, 0x05020007, 0x4930700c,
+ 0x4930700b, 0x58380002, 0x90000580, 0x05020808,
+ 0x0501f004, 0x90001400, 0x45301000, 0x4930700b,
+ 0x5c007000, 0x5c025800, 0x1c01f000, 0x4933c857,
+ 0x592c000d, 0x40001000, 0x4800700a, 0x90080408,
+ 0x48007003, 0x592c0011, 0x592c1012, 0x592c1804,
+ 0x480c7006, 0x48007007, 0x48087008, 0x592c0017,
+ 0x592c120c, 0x80080c80, 0x05001002, 0x40001000,
+ 0x90081403, 0x80081104, 0x90080490, 0x05021003,
+ 0x80000580, 0x0501f002, 0x60401000, 0x4800700d,
+ 0x48087004, 0x800810c4, 0x48087005, 0x40381000,
+ 0x0001f021, 0x4d2c0000, 0x05a9fbd7, 0x05a8083f,
+ 0x42000800, 0x001102f0, 0x452c0800, 0x497a580b,
+ 0x497a580c, 0x497a580d, 0x4a025809, 0x0010b5a9,
+ 0x4a025802, 0x00000100, 0x64025801, 0x5c025800,
+ 0x1c01f000, 0x4833c857, 0x4d300000, 0x4d2c0000,
+ 0x4c5c0000, 0x4030b800, 0x585c000a, 0x80025d40,
+ 0x05020004, 0x585c000c, 0x4c000000, 0x0501f03b,
+ 0x585c0002, 0x82000580, 0x00000100, 0x0502001c,
+ 0x592c0801, 0x4c040000, 0x05a9fbd8, 0x5c000800,
+ 0x800409c0, 0x05000017, 0x4804b80a, 0x585c100d,
+ 0x800811c0, 0x05020004, 0x40065800, 0x05a9fbd8,
+ 0x0501f010, 0x90080490, 0x05021003, 0x80000580,
+ 0x0501f002, 0x60401000, 0x4800b80d, 0x4808b804,
+ 0x800810c4, 0x4808b805, 0x90040408, 0x4800b803,
+ 0x405c1000, 0x0001f821, 0x0501f022, 0x0501f825,
+ 0x585c000c, 0x80026540, 0x59300000, 0x80000d40,
+ 0x05020002, 0x4800b80b, 0x4800b80c, 0x497a6000,
+ 0x4c000000, 0x4978b80a, 0x59325809, 0x4a025a08,
+ 0x00000103, 0x59300402, 0x48025c0a, 0x592c100f,
+ 0x4c080000, 0x0001fb82, 0x0501f8cb, 0x05f9ffc1,
+ 0x5c001000, 0x8c080518, 0x05000003, 0x05fdf8dc,
+ 0x0501f002, 0x0005ffdc, 0x405c7000, 0x5c000000,
+ 0x80026540, 0x05000003, 0x59325809, 0x05fdff88,
+ 0x5c00b800, 0x5c025800, 0x5c026000, 0x1c01f000,
+ 0x483bc857, 0x5838000a, 0x40025800, 0x05a9fba0,
+ 0x5838000c, 0x80026540, 0x59300009, 0x80025d40,
+ 0x640a5a0a, 0x1c01f000, 0x4803c857, 0x4933c857,
+ 0x4d1c0000, 0x497a601e, 0x41323800, 0x40026000,
+ 0x4d3c0000, 0x60167800, 0x0501f838, 0x5c027800,
+ 0x411e6000, 0x4933c857, 0x59300416, 0x84000502,
+ 0x48026416, 0x5c023800, 0x1c01f000, 0x481bc857,
+ 0x4933c857, 0x4c5c0000, 0x4c600000, 0x4010b800,
+ 0x4014c000, 0x0509ff6a, 0x05b5fffd, 0x59240400,
+ 0x8c00050a, 0x05020006, 0x40602800, 0x405c3000,
+ 0x0509f986, 0x90000541, 0x0501f002, 0x80000580,
+ 0x5c00c000, 0x5c00b800, 0x1c01f000, 0x4803c856,
+ 0x4d300000, 0x42026000, 0x00111b00, 0x59a8003b,
+ 0x81640580, 0x05000013, 0x59300c07, 0x90040581,
+ 0x05000009, 0x90040584, 0x05000004, 0x90040590,
+ 0x05f80b17, 0x0501f007, 0x59300203, 0x90000d87,
+ 0x05000004, 0x4807c857, 0x05fdf98f, 0x05020807,
+ 0x91326430, 0x41580000, 0x81300480, 0x05fc17ec,
+ 0x5c026000, 0x1c01f000, 0x4933c857, 0x59300403,
+ 0x4803c857, 0x05e5fece, 0x4df00000, 0x59301407,
+ 0x59300203, 0x4803c857, 0x90080d82, 0x05000016,
+ 0x90080d81, 0x0500000b, 0x90080d84, 0x05000005,
+ 0x4933c856, 0x5c03e000, 0x05e40eb2, 0x0501f03e,
+ 0x90000d88, 0x0500002e, 0x90000d87, 0x0500002c,
+ 0x90000d81, 0x05000013, 0x90000d82, 0x05000028,
+ 0x90000d85, 0x05000026, 0x90000d8e, 0x05000024,
+ 0x05a5ff7a, 0x90000d89, 0x0500000a, 0x90000d8b,
+ 0x05000008, 0x90000d8a, 0x0500001d, 0x90000d8c,
+ 0x0500001b, 0x90000d8e, 0x05000019, 0x05a5ff6f,
+ 0x598c000b, 0x81300580, 0x05020003, 0x05e9f9a1,
+ 0x05020013, 0x59300004, 0x4803c857, 0x8c000520,
+ 0x05000004, 0x84000520, 0x48026004, 0x0501f00c,
+ 0x05e5fb3e, 0x05a60f61, 0x5c03e000, 0x05e40e89,
+ 0x59300407, 0x90000d82, 0x05000013, 0x05d1fdf1,
+ 0x05f9ff4a, 0x05f00c42, 0x0501f00f, 0x5c03e000,
+ 0x05e40e80, 0x59300407, 0x90000d82, 0x0500000a,
+ 0x5930081d, 0x58040200, 0x8c000500, 0x050002a9,
+ 0x05d1fde4, 0x05f9ff3d, 0x05f00c35, 0x8d3c0500,
+ 0x05000003, 0x0509ffc5, 0x05edf53e, 0x64066229,
+ 0x4a026403, 0x00000085, 0x64266203, 0x640a6407,
+ 0x42000800, 0x80000040, 0x0005f6ab, 0x60007040,
+ 0x4203e000, 0xb0800000, 0x6033f800, 0x40000000,
+ 0x40000000, 0x40000000, 0x0501b004, 0x80387040,
+ 0x05a40f36, 0x05fdf7f9, 0x1c01f000, 0x83300480,
+ 0x00111a40, 0x05001006, 0x41540000, 0x81300480,
+ 0x05021003, 0x80000580, 0x1c01f000, 0x81780080,
+ 0x1c01f000, 0x59300027, 0x80000540, 0x05000006,
+ 0x4d2c0000, 0x40025800, 0x05a9fadc, 0x497a6027,
+ 0x5c025800, 0x1c01f000, 0x592c720e, 0x8c380500,
+ 0x05020008, 0x59307008, 0x8c380516, 0x05000005,
+ 0x59307009, 0x58387013, 0x59300014, 0x80380480,
+ 0x1c01f000, 0x59a808b6, 0x59cc2808, 0x4c5c0000,
+ 0x4178b800, 0x8c14051e, 0x05000002, 0x805cb800,
+ 0x82140500, 0x00000c00, 0x05000004, 0x905c0410,
+ 0x80040480, 0x05001018, 0x80001580, 0x8c140512,
+ 0x05000005, 0x905c0414, 0x80040480, 0x05001012,
+ 0x59cc100a, 0x80000580, 0x8c140510, 0x05000005,
+ 0x905c0418, 0x80040480, 0x0500100b, 0x59cc000b,
+ 0x80080400, 0x05001008, 0x05000005, 0x905c0418,
+ 0x80040480, 0x05001004, 0x80000580, 0x5c00b800,
+ 0x1c01f000, 0x42000000, 0x0010e449, 0x050df8f1,
+ 0x90000541, 0x05fdf7fa, 0x4933c857, 0x4937c857,
+ 0x4923c857, 0x4927c857, 0x492fc857, 0x48efc857,
+ 0x4d1c0000, 0x4d300000, 0x41323800, 0x05edfd0c,
+ 0x0500001f, 0x48ee602d, 0x4926601d, 0x4936600a,
+ 0x05fdf993, 0x591c0407, 0x90000583, 0x05000008,
+ 0x591c0202, 0x4803c857, 0x4802641b, 0x591c0402,
+ 0x4802621b, 0x4803c857, 0x0501f009, 0x591c0017,
+ 0x48026017, 0x591c0202, 0x4803c857, 0x4802621b,
+ 0x591c0402, 0x4802641b, 0x4803c857, 0x491e602a,
+ 0x64066407, 0x492e6009, 0x4d380000, 0x615e7000,
+ 0x0009f800, 0x5c027000, 0x90000541, 0x5c026000,
+ 0x5c023800, 0x1c01f000, 0x4933c857, 0x493bc857,
+ 0x4937c857, 0x4d2c0000, 0x4c500000, 0x4c540000,
+ 0x4c580000, 0x59325809, 0x05f9fda7, 0x05000017,
+ 0x91cca406, 0x912cac0a, 0x91380596, 0x05020007,
+ 0x59a800b6, 0x90000588, 0x0502000e, 0x492fc857,
+ 0x6008b000, 0x0501f008, 0x91380595, 0x05020009,
+ 0x492fc857, 0x59a800b6, 0x90000598, 0x05020005,
+ 0x6018b000, 0x050df972, 0x05edfeac, 0x0501f003,
+ 0x05f1fb8b, 0x0005ffdc, 0x5c00b000, 0x5c00a800,
+ 0x5c00a000, 0x5c025800, 0x1c01f000, 0x4933c857,
+ 0x05e5fdd3, 0x4df00000, 0x59300203, 0x90000c91,
+ 0x05a61e96, 0x0c01f001, 0x0010b758, 0x0010b757,
+ 0x0010b75d, 0x0010b775, 0x0010b75c, 0x0010b757,
+ 0x0010b757, 0x0010b757, 0x0010b757, 0x0010b757,
+ 0x0010b757, 0x0010b757, 0x0010b757, 0x0010b757,
+ 0x0010b757, 0x0010b757, 0x0010b75d, 0x05a5fe83,
+ 0x5c03e000, 0x05e40dab, 0x80000580, 0x1c01f000,
+ 0x05adf8ed, 0x5c03e000, 0x05e40da6, 0x8d3c0502,
+ 0x05020011, 0x4d2c0000, 0x59325809, 0x64165a0a,
+ 0x0001fb82, 0x5c025800, 0x497a6009, 0x8d3c0500,
+ 0x0502000b, 0x642a6229, 0x4a026403, 0x00000085,
+ 0x64266203, 0x640a6407, 0x42000800, 0x80004040,
+ 0x0005feab, 0x81780080, 0x1c01f000, 0x05edfc5d,
+ 0x05fdf7fd, 0x05f9f9bb, 0x05020003, 0x05e9f869,
+ 0x05020005, 0x05e5f95d, 0x05fc07e3, 0x05e5fcb1,
+ 0x05a60e5e, 0x59300203, 0x90000d83, 0x05a40e5b,
+ 0x90000c91, 0x05a61e59, 0x0c01f7c4, 0x4803c856,
+ 0x05edfc7f, 0x0500002e, 0x59300402, 0x4802621b,
+ 0x59a804cc, 0x84000540, 0x84000502, 0x480354cc,
+ 0x812e59c0, 0x05000011, 0x82600580, 0x00003000,
+ 0x05020003, 0x4a026416, 0x00000100, 0x592c020b,
+ 0x480352cd, 0x480352cc, 0x592c000f, 0x480350ce,
+ 0x592c020c, 0x800000c2, 0x800008c4, 0x80040400,
+ 0x48026006, 0x0501f00a, 0x640b50ce, 0x59a8005c,
+ 0x800000c4, 0x48026006, 0x417a4000, 0x61fa880f,
+ 0x42003000, 0x00fffffe, 0x05cdfd6e, 0x4926601d,
+ 0x599c0208, 0x48026c12, 0x59340002, 0x4802600b,
+ 0x497a641b, 0x4936600a, 0x492e6009, 0x64066407,
+ 0x61627000, 0x0009f800, 0x90000541, 0x1c01f000,
+ 0x4d2c0000, 0x4c5c0000, 0x4c600000, 0x4c640000,
+ 0x4803c856, 0x59325809, 0x91380595, 0x050200b8,
+ 0x812e59c0, 0x05000003, 0x05f9fd0b, 0x05a40e1b,
+ 0x59a800b6, 0x82000580, 0x00000228, 0x050200ab,
+ 0x59cc0c07, 0x82040580, 0x00000101, 0x050200b7,
+ 0x59cc0a07, 0x59300402, 0x80040580, 0x050200b5,
+ 0x59cc0a0a, 0x82040580, 0x00000228, 0x050200b3,
+ 0x91ccbc0b, 0x585c0c00, 0x82040580, 0x00000101,
+ 0x050200b0, 0x585c0a00, 0x90040584, 0x050200af,
+ 0x91ccc40d, 0x58600c00, 0x82040580, 0x00000102,
+ 0x050200ac, 0x58600a00, 0x90040584, 0x050200ab,
+ 0x91cccc0f, 0x58640c00, 0x82040580, 0x00000103,
+ 0x05000004, 0x82040580, 0x00000203, 0x050200a5,
+ 0x58640a00, 0x82040580, 0x00000200, 0x050200a3,
+ 0x585c0801, 0x800409c0, 0x050000a2, 0x90040484,
+ 0x050210a0, 0x480750cf, 0x58600201, 0x800001c0,
+ 0x0500009f, 0x82001480, 0x00000fff, 0x0502109c,
+ 0x480354cd, 0x480352cc, 0x4c500000, 0x4c540000,
+ 0x4c580000, 0x6000b001, 0x4200a800, 0x00110672,
+ 0x91cca410, 0x5450a800, 0x8050a000, 0x8054a800,
+ 0x8058b040, 0x05fe07fc, 0x5c00b000, 0x5c00a800,
+ 0x5c00a000, 0x40001000, 0x4c040000, 0x05b5ff22,
+ 0x5c000800, 0x05020005, 0x59a804cc, 0x8400054c,
+ 0x480354cc, 0x4803c857, 0x90040582, 0x05000055,
+ 0x90040583, 0x05000002, 0x0501f004, 0x59a800ce,
+ 0x90000582, 0x05000052, 0x812e59c0, 0x0500002b,
+ 0x592c1001, 0x800811c0, 0x05a40dbc, 0x4930100b,
+ 0x492c100a, 0x64001001, 0x4a001009, 0x0010b831,
+ 0x4a001003, 0x00110672, 0x4a001005, 0x00000200,
+ 0x592c0015, 0x48001007, 0x592c0016, 0x48001008,
+ 0x5c00c800, 0x5c00c000, 0x5c00b800, 0x5c025800,
+ 0x0001f021, 0x4d2c0000, 0x4c5c0000, 0x4c600000,
+ 0x4c640000, 0x5832600b, 0x813261c0, 0x05a40da3,
+ 0x5832580a, 0x812e59c0, 0x05a40da0, 0x49786001,
+ 0x58300002, 0x82000580, 0x00000100, 0x0502005a,
+ 0x59a80ccd, 0x48065811, 0x59a808cf, 0x48065810,
+ 0x64ca5a0a, 0x0001fb82, 0x0005ffdc, 0x58600a01,
+ 0x59a802cd, 0x80040580, 0x0502004c, 0x59a81ccc,
+ 0x820c1d00, 0xffffffbc, 0x840c1d46, 0x480f54cc,
+ 0x0501f01e, 0x59cc3407, 0x82183500, 0x000000ff,
+ 0x90180585, 0x0502000c, 0x59340412, 0x800001c0,
+ 0x05000009, 0x80000040, 0x48026c12, 0x4d2c0000,
+ 0x59325809, 0x0005ffdc, 0x05fdff25, 0x5c025800,
+ 0x0501f00e, 0x05f1fed4, 0x59a80249, 0x84000518,
+ 0x48035249, 0x48035449, 0x0005ffdc, 0x05fdf7e4,
+ 0x59a800ce, 0x90000581, 0x05fc07b0, 0x5930041b,
+ 0x84000548, 0x4802641b, 0x5c00c800, 0x5c00c000,
+ 0x5c00b800, 0x5c025800, 0x1c01f000, 0x4803c856,
+ 0x812e59c0, 0x05fc07dc, 0x05f9fc53, 0x05a40d63,
+ 0x64c65a0a, 0x64625810, 0x59cc0007, 0x48025811,
+ 0x0001fb82, 0x05fdf7e4, 0x4807c857, 0x05fdf7ef,
+ 0x4807c857, 0x05fdf7ed, 0x4807c857, 0x05fdf7eb,
+ 0x4807c857, 0x05fdf7e9, 0x4807c857, 0x05fdf7e7,
+ 0x4807c857, 0x05fdf7e5, 0x4807c857, 0x05fdf7e3,
+ 0x4807c857, 0x05fdf7e1, 0x4807c857, 0x05fdf7df,
+ 0x4807c857, 0x05a5fd49, 0x05fdf7dc, 0x4803c857,
+ 0x05a5fd46, 0x05fdf7d9, 0x4807c857, 0x0501f80f,
+ 0x05fdf7d6, 0x4803c857, 0x4a006002, 0x00000100,
+ 0x640a5a0a, 0x0001fb82, 0x05fdf7a8, 0x59300403,
+ 0xb0000d98, 0x05000004, 0xb0000d9e, 0x05000002,
+ 0xb0000d9f, 0x1c01f000, 0x59a804cc, 0x82000500,
+ 0xfffffffc, 0x480354cc, 0x05d5f804, 0x05020006,
+ 0x05d5f814, 0x05000004, 0x64075042, 0x6006d800,
+ 0x05d1ff81, 0x1c01f000, 0x4933c857, 0x4d400000,
+ 0x60028000, 0x05b5fd62, 0x05f1fe96, 0x0500001f,
+ 0x59cc0408, 0x8c00051e, 0x05020009, 0x42000800,
+ 0x0010e512, 0x58040406, 0x8c000500, 0x05020004,
+ 0x59240200, 0x84000556, 0x48024a00, 0x60aa8000,
+ 0x59240400, 0x8c00050a, 0x05020004, 0x61fe89ff,
+ 0x60083000, 0x0505fedd, 0x4d3c0000, 0x600a7800,
+ 0x5924100b, 0x82081500, 0x00001fff, 0x41780800,
+ 0x05b5fe72, 0x5c027800, 0x42000000, 0x0010e454,
+ 0x0509ff08, 0x600a8000, 0x60100800, 0x05cdfc16,
+ 0x60040800, 0x05cdfcfd, 0x59cc0800, 0x82040d00,
+ 0x00ffffff, 0x5924100c, 0x48041001, 0x59cc0009,
+ 0x48024a0a, 0x48001200, 0x59cc000a, 0x48024c0a,
+ 0x48001400, 0x59240200, 0xb0000566, 0x48024a00,
+ 0x48064805, 0x49238830, 0x84040570, 0x48038832,
+ 0x812000f0, 0x80040540, 0x48026813, 0x60040000,
+ 0x05d1fd60, 0x5c028000, 0x59301009, 0x800811c0,
+ 0x05020009, 0x0501f823, 0x5924100b, 0x82081500,
+ 0x00001fff, 0x05b5feb9, 0x0501f81e, 0x0502001c,
+ 0x0501f018, 0x4d2c0000, 0x400a5800, 0x592c1208,
+ 0x82080500, 0x000000ff, 0x900005b0, 0x05020009,
+ 0x592c040b, 0x82000500, 0x000000ff, 0x05020003,
+ 0x05a9f88a, 0x0501f00a, 0x05d5ff81, 0x0501f008,
+ 0x592c020b, 0x80000110, 0x800001c0, 0x05020003,
+ 0x05a9f882, 0x0501f002, 0x05d9f93f, 0x5c025800,
+ 0x59300429, 0x900005a1, 0x000607dc, 0x1c01f000,
0x4933c857, 0x4d340000, 0x4d240000, 0x4d200000,
0x916c0583, 0x05020015, 0x599c0018, 0x8c000516,
- 0x05000003, 0x05d1ff2a, 0x0501f010, 0x60100800,
- 0x05d9fa4e, 0x59300429, 0x900005a1, 0x05000005,
+ 0x05000003, 0x05c5ff7f, 0x0501f010, 0x60100800,
+ 0x05cdfbc9, 0x59300429, 0x900005a1, 0x05000005,
0x59240400, 0x8c00050c, 0x05000004, 0x64866429,
- 0x05fdfbbe, 0x90000541, 0x5c024000, 0x5c024800,
+ 0x05fdf9d9, 0x90000541, 0x5c024000, 0x5c024800,
0x5c026800, 0x1c01f000, 0x80000580, 0x05fdf7fb,
- 0x4d340000, 0x5932680a, 0x05d9fe65, 0x5c026800,
- 0x0005f45a, 0x4803c856, 0x4c5c0000, 0x4d200000,
- 0x4014b800, 0x05c5fff7, 0x59a8007b, 0x80000040,
- 0x4803507b, 0x916c0582, 0x05020004, 0x59240200,
+ 0x4d340000, 0x5932680a, 0x05d1f95a, 0x5c026800,
+ 0x0005f7dc, 0x4803c856, 0x4c5c0000, 0x4d200000,
+ 0x4014b800, 0x05b5fcda, 0x59a800bb, 0x80000040,
+ 0x480350bb, 0x916c0582, 0x05020004, 0x59240200,
0x8400051a, 0x48024a00, 0x59240200, 0x82000500,
0xfffffeef, 0x84000546, 0x48024a00, 0x497a4805,
- 0x4d400000, 0x60068000, 0x405c2800, 0x60040000,
- 0x05ddf96b, 0x60aa8000, 0x4d3c0000, 0x600a7800,
- 0x05c9f82c, 0x5c027800, 0x5c028000, 0x5c024000,
- 0x5c00b800, 0x813261c0, 0x05ee0721, 0x1c01f000,
- 0x59303009, 0x58181a05, 0x820c1d00, 0x000000ff,
- 0xb00c0588, 0x05000003, 0xb00c05aa, 0x05020045,
- 0x58180409, 0x8c000500, 0x05000042, 0x42000000,
- 0x0010cf39, 0x50006000, 0x41781800, 0x5830200b,
+ 0x4d400000, 0x60068000, 0x41781800, 0x405c2800,
+ 0x60040000, 0x05d1fcff, 0x60aa8000, 0x4d3c0000,
+ 0x600a7800, 0x05b5fd10, 0x5c027800, 0x5c028000,
+ 0x5c024000, 0x5c00b800, 0x813261c0, 0x05ee0275,
+ 0x1c01f000, 0x59303009, 0x58181a08, 0x820c1d00,
+ 0x000000ff, 0xb00c0588, 0x05000003, 0xb00c05aa,
+ 0x05020048, 0x59300004, 0x8c000516, 0x05020045,
+ 0x5818040c, 0x8c000500, 0x05000042, 0x42000000,
+ 0x001102f0, 0x50006000, 0x41781800, 0x5830200c,
0x41300000, 0x80100580, 0x05000006, 0x40101800,
0x580c2000, 0x801021c0, 0x05fe07fa, 0x0501f035,
0x4933c857, 0x59302000, 0x497a6000, 0x800c19c0,
- 0x0502001e, 0x4933c856, 0x42007000, 0x00020d9f,
- 0x58300009, 0x800001c0, 0x05000018, 0x49786009,
+ 0x0502001e, 0x4933c856, 0x42007000, 0x000211a7,
+ 0x5830000a, 0x800001c0, 0x05000018, 0x4978600a,
0x58380001, 0x80300580, 0x05020008, 0x4933c856,
- 0x49787002, 0x4810600b, 0x801021c0, 0x0502001d,
- 0x4978600a, 0x0501f01b, 0x4933c856, 0x4810600b,
- 0x801021c0, 0x05020002, 0x4978600a, 0x4c180000,
- 0x4c300000, 0x05b9fec6, 0x5c006000, 0x05fdfdb1,
+ 0x49787002, 0x4810600c, 0x801021c0, 0x0502001d,
+ 0x4978600b, 0x0501f01b, 0x4933c856, 0x4810600c,
+ 0x801021c0, 0x05020002, 0x4978600b, 0x4c180000,
+ 0x4c300000, 0x05a9f944, 0x5c006000, 0x05fdfc12,
0x5c003000, 0x0501f00f, 0x4933c856, 0x800c19c0,
- 0x05020008, 0x801021c0, 0x05000003, 0x4810600b,
- 0x0501f008, 0x4978600b, 0x4978600a, 0x0501f005,
- 0x48101800, 0x801021c0, 0x05020002, 0x480c600a,
- 0x58180409, 0x84000500, 0x48003409, 0x49783209,
- 0x1c01f000, 0x4933c857, 0x4927c857, 0x59a8021b,
- 0x90000543, 0x4803521b, 0x4c5c0000, 0x4d400000,
+ 0x05020008, 0x801021c0, 0x05000003, 0x4810600c,
+ 0x0501f008, 0x4978600c, 0x4978600b, 0x0501f005,
+ 0x48101800, 0x801021c0, 0x05020002, 0x480c600b,
+ 0x5818040c, 0x84000500, 0x4800340c, 0x4978320c,
+ 0x1c01f000, 0x4933c857, 0x4927c857, 0x59a80249,
+ 0x90000543, 0x48035249, 0x4c5c0000, 0x4d400000,
0x59ccb800, 0x825cbd00, 0x00ffffff, 0x60028000,
- 0x05c5ff80, 0x05f5f9e0, 0x485f500f, 0x0500001d,
+ 0x05b5fc5f, 0x05f1fd93, 0x485f503d, 0x0500001d,
0x4d3c0000, 0x60aa8000, 0x59240400, 0x8c00050a,
0x05020006, 0x59240200, 0x84000556, 0x48024a00,
- 0x60083000, 0x0505fb1f, 0x600a7800, 0x05c5ffbd,
- 0x42000000, 0x0010b2d6, 0x0509fa33, 0x59cc0408,
- 0x8c00051e, 0x05020009, 0x42000800, 0x0010b391,
- 0x58040406, 0x8c000500, 0x05020004, 0x59a8021b,
- 0x84000552, 0x4803521b, 0x600a8000, 0x5c027800,
- 0x41780800, 0x05d9fa89, 0x59240200, 0x4803c857,
+ 0x60083000, 0x0505fdda, 0x600a7800, 0x05b5fc9e,
+ 0x42000000, 0x0010e454, 0x0509fe12, 0x59cc0408,
+ 0x8c00051e, 0x05020009, 0x42000800, 0x0010e512,
+ 0x58040406, 0x8c000500, 0x05020004, 0x59a80249,
+ 0x84000552, 0x48035249, 0x600a8000, 0x5c027800,
+ 0x41780800, 0x05cdfbfd, 0x59240200, 0x4803c857,
0x4927c857, 0xb0000566, 0x48024a00, 0x485e4805,
0x812000f0, 0x805c0540, 0x48026813, 0x49238830,
- 0x84000570, 0x48038832, 0x59a8121b, 0x59cc0408,
+ 0x84000570, 0x48038832, 0x59a81249, 0x59cc0408,
0x8c00051a, 0x05020005, 0x84081514, 0x4a0370e5,
0x00000800, 0x0501f004, 0x84081554, 0x4a0370e5,
- 0x00000c00, 0x480b521b, 0x05fdf850, 0x59a8021b,
- 0x8400054a, 0x4803521b, 0x49238830, 0x845c0570,
- 0x48038832, 0x60100800, 0x05d9f97c, 0x59a80a1b,
- 0x84040d50, 0x59cc0013, 0x8c00053e, 0x05000003,
- 0x8c000536, 0x05000004, 0x59cc0017, 0x8c000536,
- 0x05020002, 0x84040d10, 0x4807521b, 0x4807541b,
- 0x42001800, 0x0010cf46, 0x59240400, 0x8c00050c,
- 0x05000004, 0x64866429, 0x05fdfae0, 0x0501f007,
- 0x405c0800, 0x41781000, 0x60040000, 0x60028000,
- 0x05ddf8ab, 0x0005fc5a, 0x59a8021b, 0x4803c857,
- 0x8c000506, 0x05020006, 0x41781800, 0x0509fb28,
- 0x05000002, 0x60401800, 0x05c5fead, 0x805c0110,
- 0x48035018, 0x48038881, 0x59a80016, 0x80000040,
- 0x4803c857, 0x48035016, 0x05020015, 0x59a8021b,
- 0x8400050a, 0x4803521b, 0x4803541b, 0x4a038802,
- 0x0000ffff, 0x42001800, 0x0010aee0, 0x05b9fca0,
- 0x42001800, 0x0010aeed, 0x05b9fc9d, 0x4a035017,
- 0x0000ffff, 0x05e9fc57, 0x4a01a8e4, 0x00000080,
- 0x4a038802, 0x0000ffff, 0x850e1d02, 0x5c028000,
- 0x5c00b800, 0x1c01f000, 0x4933c857, 0x59368c03,
- 0x4c180000, 0x59300203, 0x90003491, 0x05ba1964,
- 0x0c01f803, 0x5c003000, 0x1c01f000, 0x001090a0,
- 0x00109502, 0x0010967f, 0x001090a0, 0x001090a0,
- 0x001090a0, 0x001090a0, 0x001090a0, 0x001090c0,
- 0x001090a0, 0x001090a0, 0x001090a0, 0x001090a0,
- 0x001090a0, 0x00109c1e, 0x001090a0, 0x001090a0,
- 0x05b9f94f, 0x4933c857, 0x61fe89ff, 0x813669c0,
+ 0x00000c00, 0x480b5249, 0x05f9fe67, 0x59cc0408,
+ 0x8c000518, 0x05000009, 0x59a80249, 0x8400054a,
+ 0x48035249, 0x49238830, 0x845c0570, 0x48038832,
+ 0x60100800, 0x05cdfaf0, 0x59a80a49, 0x84040d50,
+ 0x59cc0013, 0x8c00053e, 0x05000003, 0x8c000536,
+ 0x05000004, 0x59cc0017, 0x8c000536, 0x05020002,
+ 0x84040d10, 0x48075249, 0x48075449, 0x42001800,
+ 0x001102fe, 0x59240400, 0x8c00050c, 0x05000004,
+ 0x64866429, 0x05fdf8f4, 0x0501f009, 0x405c0800,
+ 0x41781000, 0x60001802, 0x60040000, 0x60028000,
+ 0x05d1fc38, 0x0501f830, 0x0005ffdc, 0x59a80249,
+ 0x4803c857, 0x8c000506, 0x05020006, 0x41781800,
+ 0x0509ff06, 0x05000002, 0x60401800, 0x05b5fb93,
+ 0x805c0110, 0x48035046, 0x48038881, 0x59a80044,
+ 0x80000040, 0x4803c857, 0x05001003, 0x48035044,
+ 0x0502001a, 0x59a80249, 0x8c000506, 0x05000004,
+ 0x8400050a, 0x48035249, 0x48035449, 0x42001800,
+ 0x0010dd46, 0x05a5feeb, 0x42001800, 0x0010dd53,
+ 0x05a5fee8, 0x4a035045, 0x0000ffff, 0x05e5fe5b,
+ 0x4a01a8e4, 0x00000080, 0x0509ff09, 0x05000004,
+ 0x4a038802, 0x0000ffbf, 0x0501f003, 0x4a038802,
+ 0x0000ffff, 0x850e1d02, 0x5c028000, 0x5c00b800,
+ 0x1c01f000, 0x4d440000, 0x4d340000, 0x61f2880f,
+ 0x05d1f82d, 0x05020003, 0x4a026c00, 0x00000707,
+ 0x5c026800, 0x5c028800, 0x1c01f000, 0x05f9feef,
+ 0x59a80098, 0x40002800, 0x59a81899, 0x800c0480,
+ 0x05000006, 0x59a8089a, 0x05001023, 0x80040480,
+ 0x0500001a, 0x05001019, 0x59aa6097, 0x41302000,
+ 0x59300a03, 0x90040d80, 0x0502000b, 0x64226203,
+ 0x800c1800, 0x480f5099, 0x91301430, 0xa0080495,
+ 0x0502100c, 0x480b5097, 0x05f9fee3, 0x81300540,
+ 0x1c01f000, 0x91326430, 0xa1300c95, 0x05001002,
+ 0x41526000, 0x81300584, 0x05000004, 0x05fdf7ed,
+ 0x49535097, 0x05fdf7f5, 0x42000000, 0x0010e443,
+ 0x0509fd64, 0x480fc857, 0x05f9fed3, 0x80026580,
+ 0x05fdf7f0, 0x8c14053e, 0x05fe07dd, 0x80000080,
+ 0x80000000, 0x05fdf7da, 0x4933c857, 0x4d340000,
+ 0x4d200000, 0x05b5fb92, 0x61f6880f, 0x42003000,
+ 0x00fffffd, 0x05cdfa8b, 0x05a60b50, 0x4936600a,
+ 0x497a6c12, 0x59300429, 0x900005a1, 0x05020003,
+ 0x599c0208, 0x48026c12, 0x5c024000, 0x5c026800,
+ 0x640e601e, 0x64066203, 0x648a6403, 0x05e1f5da,
+ 0x5930002b, 0x80000540, 0x05000006, 0x82000580,
+ 0xffffffff, 0x05000003, 0x82000580, 0xffffffff,
+ 0x1c01f000, 0x4927c857, 0x59240200, 0xb0000542,
+ 0x48024a00, 0x1c01f000, 0x4933c857, 0x59368c03,
+ 0x4c180000, 0x59300203, 0x90003491, 0x05a61b2f,
+ 0x0c01f803, 0x5c003000, 0x1c01f000, 0x0010bac0,
+ 0x0010c01b, 0x0010c1e5, 0x0010bac0, 0x0010bac0,
+ 0x0010bac0, 0x0010bac0, 0x0010bac0, 0x0010bae0,
+ 0x0010bac0, 0x0010bac0, 0x0010bac0, 0x0010bac0,
+ 0x0010bac0, 0x0010c8ad, 0x0010bac0, 0x0010bac0,
+ 0x05a5fb1a, 0x4933c857, 0x61fe89ff, 0x813669c0,
0x05000002, 0x59368c03, 0x4c180000, 0x59300203,
- 0x90003491, 0x05ba1946, 0x0c01f803, 0x5c003000,
- 0x1c01f000, 0x001090be, 0x00109928, 0x001090be,
- 0x001090be, 0x001090be, 0x001090be, 0x001090be,
- 0x001090be, 0x0010986d, 0x00109d67, 0x00109d9c,
- 0x00109d67, 0x00109d9c, 0x001090be, 0x00109c2f,
- 0x001090be, 0x001090be, 0x05b9f931, 0x05b9f930,
- 0xb1383497, 0x05ba192e, 0x41380000, 0x493bc857,
+ 0x90003491, 0x05a61b11, 0x0c01f803, 0x5c003000,
+ 0x1c01f000, 0x0010bade, 0x0010c49f, 0x0010bade,
+ 0x0010bade, 0x0010bade, 0x0010bade, 0x0010bade,
+ 0x0010bade, 0x0010c3dd, 0x0010c9fc, 0x0010ca31,
+ 0x0010c9fc, 0x0010ca31, 0x0010bade, 0x0010c8be,
+ 0x0010bade, 0x0010bade, 0x05a5fafc, 0x05a5fafb,
+ 0xb13834a0, 0x05a61af9, 0x41380000, 0x493bc857,
0x4d1c0000, 0x4d400000, 0x0c01f804, 0x5c028000,
- 0x5c023800, 0x1c01f000, 0x0010912a, 0x001092c0,
- 0x0010912a, 0x0010912a, 0x0010912a, 0x001092c6,
- 0x0010912a, 0x0010912a, 0x0010912a, 0x0010912a,
- 0x0010912a, 0x0010912a, 0x0010912a, 0x0010912a,
- 0x0010912a, 0x0010912a, 0x0010912a, 0x0010912a,
- 0x0010912a, 0x0010912a, 0x0010912a, 0x0010912a,
- 0x0010912a, 0x0010914b, 0x00109189, 0x0010919b,
- 0x001091fc, 0x00109240, 0x00109275, 0x00109298,
- 0x0010912a, 0x0010912a, 0x001092cb, 0x0010912a,
- 0x0010912a, 0x001092d4, 0x001092d9, 0x0010912a,
- 0x0010912a, 0x0010912a, 0x0010912a, 0x0010912a,
- 0x00109362, 0x0010912a, 0x0010912a, 0x00109229,
- 0x0010912a, 0x0010912a, 0x00109338, 0x0010912a,
- 0x0010912a, 0x0010912a, 0x0010936d, 0x0010912a,
- 0x0010912a, 0x0010912a, 0x001093aa, 0x0010912a,
- 0x0010912a, 0x0010912a, 0x0010912a, 0x0010912a,
- 0x0010912a, 0x001093ff, 0x0010912a, 0x0010912a,
- 0x0010912a, 0x0010912a, 0x0010912a, 0x0010912b,
- 0x0010912a, 0x0010912a, 0x0010912a, 0x0010912a,
- 0x00109135, 0x0010912a, 0x0010912a, 0x0010912a,
- 0x00109428, 0x0010942d, 0x00109445, 0x0010912a,
- 0x0010912a, 0x0010912a, 0x0010912a, 0x0010912a,
- 0x00109141, 0x0010912a, 0x0010912a, 0x0010912a,
- 0x0010912a, 0x0010912a, 0x0010912a, 0x0010912a,
- 0x0010912a, 0x0010912a, 0x05b9f8c5, 0x4933c857,
- 0x0505fcca, 0x05020322, 0x05c5fc2f, 0x05020320,
- 0x59cc0407, 0x4802601e, 0x65166403, 0x64066203,
- 0x05e5f6b0, 0x4933c857, 0x0505fcc0, 0x05020318,
- 0x05c5fc25, 0x05020316, 0x0501fb48, 0x05020169,
- 0x59cc0007, 0x4802601e, 0x652a6403, 0x64066203,
- 0x05e5f6a4, 0x4933c857, 0x0505fcb4, 0x0502030c,
- 0x05c5fc19, 0x0502030a, 0x0501fb3c, 0x0502015d,
- 0x655a6403, 0x64066203, 0x05e5f69a, 0x4933c857,
- 0x05c5fc11, 0x05020009, 0x05d9fb6d, 0x05020007,
- 0x5932481d, 0x59240200, 0x90000503, 0x90000583,
- 0x05000006, 0x0501f2fa, 0x64266403, 0x6426641c,
- 0x6402621c, 0x0501f16b, 0x05d9fc44, 0x05000024,
- 0x59340200, 0x8c00051a, 0x05000004, 0x5934000a,
- 0x84000560, 0x4802680a, 0x0505f8f9, 0x05020023,
- 0x60a68000, 0x4d3c0000, 0x417a7800, 0x0201f800,
- 0x0010ee7a, 0x5c027800, 0x42000000, 0x0010b2d8,
- 0x0509f8d9, 0x41780800, 0x05d9f93c, 0x64226403,
- 0x600c3000, 0x59240400, 0x8c00050a, 0x05020151,
+ 0x5c023800, 0x1c01f000, 0x0010bb4a, 0x0010bdc5,
+ 0x0010bb4a, 0x0010bb4a, 0x0010bb4a, 0x0010bdcb,
+ 0x0010bb4a, 0x0010bb4a, 0x0010bb4a, 0x0010bb4a,
+ 0x0010bb4a, 0x0010bb4a, 0x0010bb4a, 0x0010bb4a,
+ 0x0010bb4a, 0x0010bb4a, 0x0010bb4a, 0x0010bb4a,
+ 0x0010bb4a, 0x0010bb4a, 0x0010bb4a, 0x0010bb4a,
+ 0x0010bb4a, 0x0010bc52, 0x0010bc91, 0x0010bca3,
+ 0x0010bd04, 0x0010bd48, 0x0010bd7c, 0x0010bd9e,
+ 0x0010bb4a, 0x0010bb4a, 0x0010bdd0, 0x0010bb4a,
+ 0x0010bb4a, 0x0010bdd9, 0x0010bdde, 0x0010bb4a,
+ 0x0010bb4a, 0x0010bb4a, 0x0010bb4a, 0x0010bb4a,
+ 0x0010be6d, 0x0010bb4a, 0x0010bb4a, 0x0010bd31,
+ 0x0010bb4a, 0x0010bb4a, 0x0010be43, 0x0010bb4a,
+ 0x0010bb4a, 0x0010bb4a, 0x0010be78, 0x0010bb4a,
+ 0x0010bb4a, 0x0010bb4a, 0x0010bec0, 0x0010bb4a,
+ 0x0010bb4a, 0x0010bb4a, 0x0010bb4a, 0x0010bb4a,
+ 0x0010bb4a, 0x0010bf15, 0x0010bb4a, 0x0010bb4a,
+ 0x0010bb4a, 0x0010bb4a, 0x0010bb4a, 0x0010bc32,
+ 0x0010bb4a, 0x0010bb4a, 0x0010bb4a, 0x0010bb4a,
+ 0x0010bc3c, 0x0010bb4a, 0x0010bb4a, 0x0010bb4a,
+ 0x0010bf3e, 0x0010bf43, 0x0010bf5b, 0x0010bb4a,
+ 0x0010bb4a, 0x0010bb4a, 0x0010bb4a, 0x0010bb4a,
+ 0x0010bc48, 0x0010bb4a, 0x0010bb4a, 0x0010bb4b,
+ 0x0010bb4a, 0x0010bb4a, 0x0010bb4a, 0x0010bbc5,
+ 0x0010bb4a, 0x0010bb4a, 0x05a5fa90, 0x4933c857,
+ 0x59cc0801, 0x82040580, 0x00fffffe, 0x05020416,
+ 0x0505ff3b, 0x05020414, 0x05b5f8b2, 0x05020412,
+ 0x59a804cc, 0x8c000504, 0x05000254, 0x4c5c0000,
+ 0x59a808b6, 0x82040580, 0x00000228, 0x050200b5,
+ 0x59cc0800, 0x82040d00, 0x00ffffff, 0x82040580,
+ 0x00fffff0, 0x050200b1, 0x59cc0801, 0x82040d00,
+ 0x00ffffff, 0x82040580, 0x00fffffe, 0x050200ad,
+ 0x59cc0c07, 0x80040910, 0x90040581, 0x050200ab,
+ 0x59cc0a0a, 0x82040580, 0x00000228, 0x050200af,
+ 0x4c600000, 0x4c640000, 0x91ccbc0b, 0x585c0c00,
+ 0x82040580, 0x00000101, 0x0502003f, 0x585c0a00,
+ 0x90040584, 0x0502003e, 0x91ccc40d, 0x58600c00,
+ 0x82040580, 0x00000102, 0x0502003b, 0x58600a00,
+ 0x90040584, 0x0502003a, 0x91cccc0f, 0x58640c00,
+ 0x82040580, 0x00000103, 0x05000004, 0x82040580,
+ 0x00000203, 0x05020036, 0x58640a00, 0x82040580,
+ 0x00000200, 0x05020034, 0x585c0801, 0x90040484,
+ 0x05021033, 0x59cc0a07, 0x4807c857, 0x4806621b,
+ 0x58600201, 0x4803c857, 0x800001c0, 0x05000026,
+ 0x82000c80, 0x00000fff, 0x05021023, 0x480354cd,
+ 0x480352cc, 0x60643000, 0x61fc19ff, 0x60182000,
+ 0x4d200000, 0x417a4000, 0x05c5fca6, 0x5c024000,
+ 0x585cc801, 0x5860ba01, 0x91ccc410, 0x497a641b,
+ 0x0509fb09, 0x59cc0c04, 0x48066202, 0x656a6403,
+ 0x64066203, 0x05e1fcc4, 0x59a804cc, 0x84000542,
+ 0x480354cc, 0x5c00c800, 0x5c00c000, 0x5c00b800,
+ 0x1c01f000, 0x4807c857, 0x05fdf7fb, 0x4807c857,
+ 0x05fdf7f9, 0x4807c857, 0x05fdf7f7, 0x4807c857,
+ 0x05fdf7f5, 0x4803c857, 0x05fdf7f3, 0x4807c857,
+ 0x05fdf7f1, 0x4807c857, 0x05fdf7ef, 0x4807c857,
+ 0x05fdf7ed, 0x4933c857, 0x59cc0801, 0x82040580,
+ 0x00fffffe, 0x0502039c, 0x0505fec1, 0x0502039a,
+ 0x05b5f838, 0x05020398, 0x0501fbcd, 0x050201db,
+ 0x4c5c0000, 0x59a808b6, 0x90040594, 0x0502003d,
+ 0x59cc0800, 0x82040d00, 0x00ffffff, 0x82040580,
+ 0x00fffff0, 0x05020039, 0x59cc0801, 0x82040d00,
+ 0x00ffffff, 0x82040580, 0x00fffffe, 0x05020035,
+ 0x59cc0c07, 0x80040910, 0x90040581, 0x05020033,
+ 0x59cc0a0a, 0x90040594, 0x05020038, 0x59cc0c07,
+ 0x82040d00, 0x000000ff, 0x90040582, 0x0502002d,
+ 0x59cc0a07, 0x4807c857, 0x4d300000, 0x05d9fead,
+ 0x4130b800, 0x5c026000, 0x0500002e, 0x485fc857,
+ 0x585c0c07, 0x90040581, 0x0502002d, 0x585c0a03,
+ 0x90040582, 0x0502002d, 0x585c0c03, 0xb0040598,
+ 0x0502002d, 0x5930000a, 0x585c080a, 0x80040580,
+ 0x0502002c, 0x585c041b, 0x8c000508, 0x0500002c,
+ 0x59a804cc, 0x84000542, 0x480354cc, 0x59cc0c04,
+ 0x4804ba02, 0x6578bc03, 0x6404ba03, 0x0005ffdc,
+ 0x405e6000, 0x05e1fc64, 0x5c00b800, 0x1c01f000,
+ 0x4807c857, 0x05fdf7fd, 0x4807c857, 0x05fdf7fb,
+ 0x4807c857, 0x05fdf7f9, 0x4807c857, 0x0501f002,
+ 0x4807c857, 0x641e641c, 0x657e6403, 0x6402621c,
+ 0x5c00b800, 0x0501f1ac, 0x4807c857, 0x05fdf7fa,
+ 0x4807c857, 0x640e641c, 0x05fdf7f8, 0x4807c857,
+ 0x640e641c, 0x05fdf7f5, 0x4807c857, 0x640e641c,
+ 0x05fdf7f2, 0x4807c857, 0x640e641c, 0x05fdf7ef,
+ 0x4807c857, 0x640e641c, 0x05fdf7ec, 0x4807c857,
+ 0x640e641c, 0x05fdf7e9, 0x4933c857, 0x0505fe58,
+ 0x05020331, 0x05b1ffcf, 0x0502032f, 0x59cc0407,
+ 0x4802601e, 0x65166403, 0x64066203, 0x05e1f436,
+ 0x4933c857, 0x0505fe4e, 0x05020327, 0x05b1ffc5,
+ 0x05020325, 0x0501fb5a, 0x05020168, 0x59cc0007,
+ 0x4802601e, 0x652a6403, 0x64066203, 0x05e1f42a,
+ 0x4933c857, 0x0505fe42, 0x0502031b, 0x05b1ffb9,
+ 0x05020319, 0x0501fb4e, 0x0502015c, 0x655a6403,
+ 0x64066203, 0x05e1f420, 0x4933c857, 0x05b1ffb1,
+ 0x05020009, 0x05cdfc75, 0x05020007, 0x5932481d,
+ 0x59240200, 0x90000503, 0x90000583, 0x05000006,
+ 0x0501f309, 0x64266403, 0x6426641c, 0x6402621c,
+ 0x0501f169, 0x05cdfde6, 0x05000025, 0x59340200,
+ 0x8c00051a, 0x05000004, 0x5934000a, 0x84000560,
+ 0x4802680a, 0x0505f982, 0x05020024, 0x0509fceb,
+ 0x05020006, 0x60a68000, 0x4d3c0000, 0x417a7800,
+ 0x05b1febc, 0x5c027800, 0x42000000, 0x0010e456,
+ 0x0509fb68, 0x41780800, 0x05cdf960, 0x64226403,
+ 0x600c3000, 0x59240400, 0x8c00050a, 0x0502014e,
0x59cc400b, 0x59cc380c, 0x59cc180d, 0x59cc080e,
0x9c2041c0, 0x9c1c39c0, 0x9c0c19c0, 0x9c0409c0,
- 0x641e6203, 0x41782800, 0x0501f13f, 0x0505f98a,
- 0x05fe07e2, 0x64266403, 0x643a641c, 0x4a02621c,
- 0x00001900, 0x0501f13f, 0x64266403, 0x640e641c,
- 0x0501f13c, 0x4933c857, 0x05c5fbd3, 0x050202c4,
- 0x05d9fb2f, 0x050202c2, 0x493a6403, 0x0505f86b,
+ 0x641e6203, 0x41782800, 0x0501f13c, 0x0505faef,
+ 0x05fe07e1, 0x64266403, 0x643a641c, 0x4a02621c,
+ 0x00001900, 0x0501f13c, 0x64266403, 0x640e641c,
+ 0x0501f139, 0x4933c857, 0x05b1ff72, 0x050202d2,
+ 0x05cdfc36, 0x050202d0, 0x493a6403, 0x0505f8e7,
0x05020007, 0x641a6403, 0x59240400, 0x8c00050a,
- 0x05020130, 0x641e6203, 0x0505f72d, 0x641e6403,
- 0x6426641c, 0x6402621c, 0x0501f12a, 0x4933c857,
- 0x05d9fb1f, 0x050202b2, 0x5934000a, 0x82000500,
- 0x00010000, 0x82000580, 0x00010000, 0x05060c53,
- 0x05c40bb9, 0x050202aa, 0x59cc0001, 0x82000500,
+ 0x0502012d, 0x641e6203, 0x0509f10a, 0x641e6403,
+ 0x6426641c, 0x6402621c, 0x0501f127, 0x4933c857,
+ 0x05cdfc26, 0x050202c0, 0x5934000a, 0x82000500,
+ 0x00010000, 0x82000580, 0x00010000, 0x05060de0,
+ 0x05b00f58, 0x050202b8, 0x59cc0001, 0x82000500,
0x00ffff00, 0x82000580, 0x00fffc00, 0x05020007,
0x59a80006, 0x8c00050e, 0x05000004, 0x59240400,
- 0x8c00050a, 0x05020036, 0x05d9fbec, 0x05020003,
- 0x60067800, 0x05d5fffe, 0x05d9fbdb, 0x05000004,
+ 0x8c00050a, 0x05020036, 0x05cdfd8d, 0x05020003,
+ 0x60067800, 0x05cdf826, 0x05cdfd7c, 0x05000004,
0x82000580, 0x00000703, 0x05020032, 0x59cc0206,
0x90003503, 0x05020034, 0x90003494, 0x05001032,
- 0x59a83077, 0x80183480, 0x0500102f, 0x5934300a,
+ 0x59a830b6, 0x80183480, 0x0500102f, 0x5934300a,
0x84183516, 0x90000594, 0x05020002, 0x84183556,
0x481a680a, 0x59cc0406, 0x90000503, 0x05020026,
- 0x0505f8da, 0x0502002b, 0x05d9fba9, 0x05020006,
- 0x4c600000, 0x4178c000, 0x417a7800, 0x05c5fb27,
+ 0x0505f962, 0x0502002b, 0x05cdfd4f, 0x05020006,
+ 0x4c600000, 0x4178c000, 0x417a7800, 0x05b1fec9,
0x5c00c000, 0x916c0583, 0x05020006, 0x60183000,
- 0x0505febf, 0x42000000, 0x0010b2d7, 0x0509f86a,
- 0x05d9f943, 0x642a6403, 0x60803000, 0x59cc1a0a,
+ 0x0509f89c, 0x42000000, 0x0010e455, 0x0509faf9,
+ 0x05cdf967, 0x642a6403, 0x60803000, 0x59cc1a0a,
0x41780800, 0x41784000, 0x41783800, 0x59240400,
- 0x8c00050a, 0x050200df, 0x05fdf796, 0x642e6403,
- 0x642e641c, 0x4a02621c, 0x00002c00, 0x0501f0d9,
+ 0x8c00050a, 0x050200dc, 0x05fdf796, 0x642e6403,
+ 0x642e641c, 0x4a02621c, 0x00002c00, 0x0501f0d6,
0x642e6403, 0x6426641c, 0x4a02621c, 0x00001e00,
- 0x0501f0d4, 0x42000000, 0x0010b232, 0x0509f852,
- 0x642e6403, 0x641e641c, 0x6402621c, 0x0501f0cd,
- 0x642e6403, 0x640e641c, 0x6402621c, 0x0501f0c9,
- 0x4933c857, 0x05d9fabe, 0x05020251, 0x0505fbf7,
- 0x0502024f, 0x05c5fb5c, 0x0502024d, 0x59cc0206,
+ 0x0501f0d1, 0x42000000, 0x0010e3ab, 0x0509fae1,
+ 0x642e6403, 0x641e641c, 0x6402621c, 0x0501f0ca,
+ 0x642e6403, 0x640e641c, 0x6402621c, 0x0501f0c6,
+ 0x4933c857, 0x05cdfbc5, 0x0502025f, 0x0505fd84,
+ 0x0502025d, 0x05b1fefb, 0x0502025b, 0x59cc0206,
0x90003503, 0x0502001b, 0x90003494, 0x05001019,
- 0x59a83077, 0x80180480, 0x05001016, 0x59cc0406,
+ 0x59a830b6, 0x80180480, 0x05001016, 0x59cc0406,
0x90000503, 0x05020013, 0x59340400, 0x82000580,
0x00000707, 0x05000013, 0x417a7800, 0x4c600000,
- 0x4178c000, 0x05c5fae5, 0x5c00c000, 0x60283000,
- 0x0505fe7f, 0x42000000, 0x0010b2d4, 0x0509f82a,
+ 0x4178c000, 0x05b1fe87, 0x5c00c000, 0x60283000,
+ 0x0509f85c, 0x42000000, 0x0010e452, 0x0509fab9,
0x64326403, 0x41782800, 0x60843000, 0x05fdf7c4,
- 0x64366403, 0x641e641c, 0x6402621c, 0x0501f0a1,
+ 0x64366403, 0x641e641c, 0x6402621c, 0x0501f09e,
0x64366403, 0x6426641c, 0x4a02621c, 0x00001e00,
- 0x0501f09c, 0x4933c857, 0x05d9fa91, 0x05020224,
- 0x0505fbca, 0x05020222, 0x05c5fb2f, 0x05020220,
- 0x0501fa52, 0x0502000a, 0x493a6403, 0x0501fa58,
+ 0x0501f099, 0x4933c857, 0x05cdfb98, 0x05020232,
+ 0x0505fd57, 0x05020230, 0x05b1fece, 0x0502022e,
+ 0x0501fa63, 0x0502000a, 0x493a6403, 0x0501fa69,
0x05020003, 0x64ba6403, 0x05fdf75c, 0x64366403,
- 0x641e641c, 0x6402621c, 0x0501f08a, 0x64366403,
- 0x6426641c, 0x4a02621c, 0x00001e00, 0x0501f085,
- 0x4933c857, 0x05d9fa7a, 0x05fe0714, 0x59240200,
- 0x90000503, 0x90000583, 0x05020209, 0x05d9fb4a,
- 0x05020028, 0x0505f864, 0x0502000b, 0x643a6403,
- 0x59240400, 0x8c00050a, 0x05020076, 0x61483000,
+ 0x641e641c, 0x6402621c, 0x0501f087, 0x64366403,
+ 0x6426641c, 0x4a02621c, 0x00001e00, 0x0501f082,
+ 0x4933c857, 0x05cdfb81, 0x05fe0713, 0x59240200,
+ 0x90000503, 0x90000583, 0x05020217, 0x05cdfceb,
+ 0x05020027, 0x0505f8ec, 0x0502000b, 0x643a6403,
+ 0x59240400, 0x8c00050a, 0x05020073, 0x61483000,
0x59cc4008, 0x59cc3809, 0x59cc180a, 0x59cc080b,
- 0x05fdf724, 0x4933c857, 0x600c3000, 0x0505fe47,
- 0x4d3c0000, 0x417a7800, 0x0201f800, 0x0010ee7a,
- 0x5c027800, 0x42000000, 0x0010b2d6, 0x0505ffe6,
- 0x59340200, 0x84000558, 0x48026a00, 0x602c0800,
- 0x05d5ff5a, 0x59240400, 0x8c00050a, 0x05020059,
- 0x601c3000, 0x0501f04e, 0x4933c857, 0x643e6403,
- 0x640e641c, 0x4a02621c, 0x00001e00, 0x0501f055,
- 0x59340400, 0x82000580, 0x00000703, 0x05fc07f7,
- 0x0501f030, 0x4933c857, 0x05d9fa45, 0x050201d8,
- 0x5932481d, 0x59240200, 0x90000503, 0x90000583,
- 0x050201d3, 0x05d9fb0b, 0x05020022, 0x0505f841,
- 0x05000fdb, 0x05020004, 0x64426403, 0x61403000,
- 0x05fdf6ed, 0x4d3c0000, 0x417a7800, 0x0201f800,
- 0x0010ee7a, 0x5c027800, 0x600c3000, 0x0505fe13,
- 0x42000000, 0x0010b2d6, 0x0505ffb7, 0x59340200,
- 0x84000558, 0x48026a00, 0x05fdf7d3, 0x64466403,
- 0x640e641c, 0x4a02621c, 0x00001e00, 0x0501f02d,
- 0x4933c857, 0x05c5fac4, 0x05040b5c, 0x050201b4,
- 0x0501f9e6, 0x05020007, 0x644a6403, 0x0501f025,
- 0x59340400, 0x82000580, 0x00000703, 0x05fc07f0,
- 0x83340580, 0x0010ce8f, 0x05000009, 0x4d3c0000,
- 0x417a7800, 0x60a68000, 0x0201f800, 0x0010ee7a,
- 0x5c027800, 0x605c3000, 0x0505fdf0, 0x42000000,
- 0x0010b2d6, 0x0505ff94, 0x05c5fcce, 0x59240400,
- 0x8c00050a, 0x0502000b, 0x60183000, 0x60a68000,
- 0x4933c857, 0x64066403, 0x641e6203, 0x41782800,
- 0x0501f002, 0x611a8000, 0x0505f86e, 0x0505f604,
- 0x4933c857, 0x64066403, 0x602c0800, 0x05d5fefb,
- 0x64066203, 0x05e5f51f, 0x4933c857, 0x60240800,
- 0x05d5fef6, 0x64166403, 0x05fdf7fa, 0x0505fb2b,
- 0x05020183, 0x05c5fa90, 0x05020181, 0x0501f9b3,
- 0x05fe07d4, 0x64826403, 0x64066203, 0x05e5f511,
- 0x05c5fa89, 0x0502017a, 0x648e6403, 0x64066203,
- 0x05e5f50c, 0x0505fb1d, 0x05c40a83, 0x05020174,
- 0x0501f9a6, 0x05fe07c7, 0x59cc0807, 0x82040500,
- 0x00ffff00, 0x0502000a, 0x59340212, 0x82000500,
- 0x0000ff00, 0x05000006, 0x5932481d, 0x59240005,
- 0x82000500, 0x000000ff, 0x0501f003, 0x5932481d,
- 0x59240005, 0x82040d00, 0x00ffffff, 0x80040580,
- 0x05020015, 0x59cc1408, 0x05f9fea1, 0x0500002c,
- 0x591c0202, 0x82001580, 0x0000ffff, 0x05000004,
- 0x59cc1208, 0x80080580, 0x05020025, 0x591c000a,
- 0x81340580, 0x05020022, 0x591c0416, 0x8c00051a,
- 0x05020015, 0x591c0407, 0x90000587, 0x0502001c,
- 0x0501f029, 0x59cc1208, 0x82080580, 0x0000ffff,
- 0x05000012, 0x05f9fe8a, 0x05000015, 0x59cc1408,
- 0x591c0202, 0x80080580, 0x05020025, 0x591c000a,
- 0x81340580, 0x05020022, 0x591c0416, 0x8c00051a,
+ 0x05fdf724, 0x4933c857, 0x600c3000, 0x0509f824,
+ 0x4d3c0000, 0x417a7800, 0x05b1fdca, 0x5c027800,
+ 0x42000000, 0x0010e454, 0x0509fa76, 0x59340200,
+ 0x84000558, 0x48026a00, 0x602c0800, 0x05c9ff82,
+ 0x59240400, 0x8c00050a, 0x05020057, 0x601c3000,
+ 0x0501f04c, 0x4933c857, 0x643e6403, 0x640e641c,
+ 0x4a02621c, 0x00001e00, 0x0501f053, 0x59340400,
+ 0x82000580, 0x00000703, 0x05fc07f7, 0x0501f02f,
+ 0x4933c857, 0x05cdfb4d, 0x050201e7, 0x5932481d,
+ 0x59240200, 0x90000503, 0x90000583, 0x050201e2,
+ 0x05cdfcad, 0x05020021, 0x0505f8ca, 0x05040864,
+ 0x05020004, 0x64426403, 0x61403000, 0x05fdf6ee,
+ 0x4d3c0000, 0x417a7800, 0x05b1fd9e, 0x5c027800,
+ 0x600c3000, 0x0505fff2, 0x42000000, 0x0010e454,
+ 0x0509fa48, 0x59340200, 0x84000558, 0x48026a00,
+ 0x05fdf7d4, 0x64466403, 0x640e641c, 0x4a02621c,
+ 0x00001e00, 0x0501f02c, 0x4933c857, 0x05b1fe65,
+ 0x05040ceb, 0x050201c4, 0x0501f9f9, 0x05020007,
+ 0x644a6403, 0x0501f024, 0x59340400, 0x82000580,
+ 0x00000703, 0x05fc07f0, 0x83340580, 0x00110210,
+ 0x05000008, 0x4d3c0000, 0x417a7800, 0x60a68000,
+ 0x05b1fd7c, 0x5c027800, 0x605c3000, 0x0505ffd0,
+ 0x42000000, 0x0010e454, 0x0509fa26, 0x05b5f860,
+ 0x59240400, 0x8c00050a, 0x0502000b, 0x60183000,
+ 0x60a68000, 0x4933c857, 0x64066403, 0x641e6203,
+ 0x41782800, 0x0501f002, 0x611a8000, 0x0505f9dc,
+ 0x0505f7e4, 0x4933c857, 0x64066403, 0x602c0800,
+ 0x05c9ff25, 0x64066203, 0x05e1f2a7, 0x4933c857,
+ 0x60240800, 0x05c9ff20, 0x64166403, 0x05fdf7fa,
+ 0x0505fcbb, 0x05020194, 0x05b1fe32, 0x05020192,
+ 0x0501f9c7, 0x05fe07d5, 0x64826403, 0x64066203,
+ 0x05e1f299, 0x05b1fe2b, 0x0502018b, 0x648e6403,
+ 0x64066203, 0x05e1f294, 0x0505fcad, 0x05b00e25,
+ 0x05020185, 0x0501f9ba, 0x05fe07c8, 0x59cc0807,
+ 0x82040500, 0x00ffff00, 0x0502000a, 0x59340212,
+ 0x82000500, 0x0000ff00, 0x05000006, 0x5932481d,
+ 0x59240005, 0x82000500, 0x000000ff, 0x0501f003,
+ 0x5932481d, 0x59240005, 0x82040d00, 0x00ffffff,
+ 0x80040580, 0x05020015, 0x59cc1408, 0x05f9fb62,
+ 0x0500002f, 0x591c0202, 0x82001580, 0x0000ffff,
+ 0x05000004, 0x59cc1208, 0x80080580, 0x05020028,
+ 0x591c000a, 0x81340580, 0x05020025, 0x591c0416,
+ 0x8c00051a, 0x05020018, 0x591c0407, 0x90000587,
+ 0x0502001f, 0x0501f02f, 0x59cc1208, 0x82080580,
+ 0x0000ffff, 0x05000015, 0x05f9fb4b, 0x05000018,
+ 0x59cc1408, 0x591c0202, 0x80080580, 0x0502002b,
+ 0x831c0580, 0xffffffff, 0x05000026, 0x591c000a,
+ 0x81340580, 0x05020025, 0x591c0416, 0x8c00051a,
0x05000013, 0x82000500, 0xffff1fff, 0x48023c16,
- 0x491e602a, 0x0501f018, 0x59cc1408, 0x41780000,
- 0x0501fdbe, 0x05fe07f2, 0x0501f013, 0x649a6403,
+ 0x491e602a, 0x0501f01b, 0x59cc1408, 0x41780000,
+ 0x0501fe2a, 0x05fe07ef, 0x0501f016, 0x649a6403,
0x4a02621c, 0x00001700, 0x59cc1208, 0x82081580,
- 0x0000ffff, 0x05fe079f, 0x0501f00b, 0x591c0407,
- 0x90000587, 0x05fe07f6, 0x591c0403, 0x900005a4,
- 0x05020005, 0x4d300000, 0x411e6000, 0x0005fc5a,
- 0x5c026000, 0x64966403, 0x05fdf792, 0x59cc1408,
- 0x41780000, 0x0501fda5, 0x05fe07e9, 0x05fdf7fa,
- 0x4933c857, 0x4d3c0000, 0x60067800, 0x05d5fe78,
- 0x5c027800, 0x4c580000, 0x6008b000, 0x91a81c02,
- 0x91cc140b, 0x05f1fee0, 0x5c00b000, 0x05000003,
- 0x64c66403, 0x05fdf77f, 0x0005fc5a, 0x6008b000,
- 0x91a81c00, 0x91cc140d, 0x05f1fed7, 0x0502000c,
- 0x05e1fde7, 0x0500000a, 0x59300407, 0x90000581,
- 0x05020007, 0x59300403, 0x90000582, 0x05020004,
- 0x5930000a, 0x81340580, 0x00040c5a, 0x05d9ffdb,
- 0x05020009, 0x05d9ffef, 0x05020005, 0x64075014,
- 0x6006d800, 0x05d9ff53, 0x0501f003, 0x60040000,
- 0x05d9ffa6, 0x1c01f000, 0x05c5f9fb, 0x050200ec,
- 0x0501f91e, 0x05fe073f, 0x493a6403, 0x0501f978,
- 0x05020003, 0x64ae6403, 0x05fdf75a, 0x64b26403,
- 0x05fdf758, 0x4933c857, 0x05e5f8b9, 0x050200e0,
- 0x05c5f9ed, 0x050200de, 0x05d9fa05, 0x05fe0731,
- 0x59cc0408, 0x4802641b, 0x59cc0208, 0x4802621b,
- 0x59cc0807, 0x59340002, 0x82000500, 0x00ffffff,
- 0x80040580, 0x05000012, 0x5932481d, 0x59240005,
- 0x80040580, 0x0502001e, 0x59cc1408, 0x05f9fe10,
- 0x05000020, 0x831c0580, 0xffffffff, 0x05000005,
- 0x0505f97c, 0x0500001b, 0x0505fcf7, 0x05000019,
- 0x491e602a, 0x64da6403, 0x0501f0bd, 0x59cc1208,
- 0x82080580, 0x0000ffff, 0x05000008, 0x05f9fe00,
- 0x05000010, 0x591c0202, 0x59cc0c08, 0x80040580,
- 0x0502000c, 0x05fdf7ec, 0x59cc1408, 0x60040000,
- 0x0501fd3e, 0x05000007, 0x05fdf7e7, 0x4803c856,
- 0x6426641c, 0x4a02621c, 0x00001500, 0x0501f005,
- 0x4803c856, 0x640e641c, 0x4a02621c, 0x00001700,
- 0x64de6403, 0x0501f0a2, 0x4933c857, 0x05e5f87c,
- 0x050200a3, 0x05c5f9b0, 0x050200a1, 0x05d9f9c8,
- 0x05fe06f4, 0x05d9f8f3, 0x05000045, 0x59cc0407,
- 0x4802641b, 0x59cc1207, 0x480a621b, 0x82080580,
- 0x0000ffff, 0x05000004, 0x05f9fdd9, 0x05000036,
- 0x0501f008, 0x59cc1407, 0x60040000, 0x0501fd1b,
- 0x05000031, 0x831c0580, 0xffffffff, 0x0500002e,
- 0x59cc0c07, 0x591c0202, 0x80040580, 0x0502002a,
- 0x0505fcb9, 0x05000028, 0x591c0416, 0x8c000516,
- 0x0502002f, 0x4d300000, 0x411e6000, 0x05f5fd76,
- 0x5c026000, 0x641e3a03, 0x59cc0c09, 0x82040d00,
- 0x0000ff00, 0x840409c0, 0x90040581, 0x05000009,
- 0x90040585, 0x0500000b, 0x90040587, 0x05020011,
- 0x42000000, 0x0010b2c3, 0x0505fe67, 0x0501f008,
- 0x42000000, 0x0010b2c2, 0x0505fe63, 0x0501f007,
- 0x42000000, 0x0010b2c1, 0x0505fe5f, 0x591c0009,
- 0x80000540, 0x05000003, 0x59cc2808, 0x0505f12b,
- 0x4803c856, 0x6426641c, 0x4a02621c, 0x00002a00,
- 0x0501f005, 0x4803c856, 0x640e641c, 0x4a02621c,
- 0x00000300, 0x64ee6403, 0x0501f055, 0x4803c856,
- 0x642e641c, 0x6402621c, 0x05fdf7fb, 0x4803c856,
- 0x641e641c, 0x6402621c, 0x05fdf7f7, 0x59cc0001,
- 0x82000580, 0x00fffffe, 0x0502004d, 0x4c080000,
- 0x05d9f8b7, 0x05000021, 0x05d9f88e, 0x0505fa47,
- 0x0502001c, 0x5932481d, 0x59240200, 0x82000540,
- 0x000000e0, 0x48024a00, 0x59a8021b, 0x90000543,
- 0x4803521b, 0x59a80018, 0x800000d0, 0x59a8080f,
- 0x82040d00, 0x000000ff, 0x80041540, 0x480b500f,
- 0x600c0800, 0x05e5fd55, 0x497b501d, 0x8d0c0520,
- 0x05000004, 0x4a032804, 0x000007d0, 0x0501f001,
- 0x0005fc5a, 0x05c5f9fa, 0x5c001000, 0x1c01f000,
- 0x0505fa44, 0x05fdf7fd, 0x5c001000, 0x0005f45a,
- 0x0501f829, 0x05000026, 0x653a6403, 0x64066203,
- 0x05e5f3b8, 0x05d9f95b, 0x05fe0676, 0x653e6403,
- 0x497a601e, 0x59cc0a06, 0x82040d00, 0x000000ff,
- 0x800409c0, 0x05fc068f, 0x90040581, 0x05020005,
- 0x59cc0808, 0x59a80005, 0x80040580, 0x05fc0689,
- 0x90040582, 0x05020006, 0x91cc140b, 0x6008b000,
- 0x91341c06, 0x05f1fde0, 0x05fc0682, 0x6406601e,
- 0x05fdf680, 0x05d9f943, 0x05fe065e, 0x65426403,
- 0x59cc0207, 0x4802601e, 0x05fdf67a, 0x64066203,
- 0x42000800, 0x80000040, 0x0005f32e, 0x4803c857,
- 0x0005f45a, 0x4d2c0000, 0x4c500000, 0x4c580000,
- 0x4c540000, 0x59a80077, 0x82000c80, 0x00000841,
- 0x05021021, 0x05b9f910, 0x0500001f, 0x492e6009,
- 0x59a80077, 0x48025802, 0x90000403, 0x80000104,
- 0x91cca406, 0x90000c8a, 0x05001010, 0x642a5811,
- 0x6028b000, 0x912c0406, 0x4000a800, 0x0505fea9,
- 0x412c7000, 0x800409c0, 0x05020003, 0x49787001,
- 0x0501f00b, 0x05b9f8fc, 0x0500000b, 0x492c7001,
- 0x40040000, 0x05fdf7f0, 0x48025811, 0x4000b000,
- 0x912c0406, 0x4000a800, 0x0505fe9a, 0x90000541,
- 0x0501f005, 0x497b5077, 0x59325809, 0x05b9f91a,
- 0x80000580, 0x5c00a800, 0x5c00b000, 0x5c00a000,
- 0x5c025800, 0x1c01f000, 0x4d340000, 0x5932680a,
- 0x59343400, 0x4933c857, 0x4937c857, 0x481bc857,
- 0x05d9f900, 0x5c026800, 0x1c01f000, 0x4933c857,
- 0x4c600000, 0x4d3c0000, 0x4d440000, 0x4d340000,
- 0x0501f858, 0x05020046, 0x59cc0207, 0x82000d00,
- 0x0000ff00, 0x900411c0, 0x59cc000a, 0x82000500,
- 0x00ffffff, 0x80081540, 0x480a601e, 0x8c040518,
- 0x05000011, 0x60203000, 0x0505fbf3, 0x42000000,
- 0x0010b2d5, 0x0505fda4, 0x59240400, 0x8c00050a,
- 0x05020005, 0x60082800, 0x60903000, 0x611a8000,
- 0x0501fe84, 0x6004c000, 0x417a7800, 0x05c5f84f,
- 0x0501f02d, 0x8c04051a, 0x05000029, 0x59cc000a,
- 0x59cc3800, 0x821c3d00, 0x00ffffff, 0x05e1fb53,
- 0x05d8091c, 0x05020022, 0x5930001d, 0x4c000000,
- 0x05d9f910, 0x4926601d, 0x5930000a, 0x4c000000,
- 0x59240c00, 0x8c04050a, 0x0502000b, 0x59340c03,
- 0x59341802, 0x820c1d00, 0x00ffffff, 0x58002403,
- 0x60102800, 0x60903000, 0x611a8000, 0x41301000,
- 0x0501fe72, 0x4936600a, 0x60243000, 0x0505fbcc,
- 0x42000000, 0x0010b2d5, 0x0505fd77, 0x417a7800,
- 0x4178c000, 0x05c5f829, 0x5c000000, 0x4802600a,
- 0x5c000000, 0x4802601d, 0x0501f003, 0x90000541,
- 0x0501f002, 0x80000580, 0x5c026800, 0x5c028800,
- 0x5c027800, 0x5c00c000, 0x1c01f000, 0x4933c857,
- 0x59cc0206, 0x90000490, 0x05021004, 0x6402621c,
- 0x90000541, 0x0501f002, 0x80000580, 0x1c01f000,
- 0x4933c857, 0x6402621c, 0x59cc0407, 0x82000500,
- 0x0000ff00, 0x82000580, 0x00000800, 0x0502000d,
- 0x59cc0206, 0x59a80877, 0x80040480, 0x0500100a,
- 0x59cc0006, 0x82000500, 0x00ff0000, 0x82000d80,
- 0x00140000, 0x05000003, 0x82000d80, 0x00100000,
- 0x1c01f000, 0x42000000, 0x0010b2ca, 0x0505fd46,
- 0x90000541, 0x05fdf7fb, 0x59300403, 0xb0003497,
- 0x05b61ceb, 0x91383593, 0x05020006, 0x4803c857,
- 0x4c000000, 0x0505fc6c, 0x5c000000, 0x0c01f019,
- 0x4933c857, 0x493bc857, 0x913835a7, 0x0500000d,
- 0x91383594, 0x0500000b, 0xb13805a1, 0x05000003,
- 0xb13805a0, 0x05b60cda, 0x05e5ffe1, 0x05ee0219,
- 0x59300203, 0x9000058e, 0x05f80164, 0x05b5fcd4,
- 0x493bc857, 0x4937c857, 0x0505fc55, 0x05d5ff75,
- 0x601c0800, 0x05d5fc9d, 0x05e5fb72, 0x05edf1a4,
- 0x00109584, 0x00109592, 0x00109584, 0x00109584,
- 0x00109584, 0x00109592, 0x001095a3, 0x0010966b,
- 0x001095ec, 0x0010966b, 0x00109605, 0x0010966b,
- 0x0010960a, 0x0010966b, 0x0010960d, 0x0010966b,
- 0x0010960d, 0x0010966b, 0x0010966b, 0x00109584,
- 0x00109584, 0x00109584, 0x00109584, 0x00109584,
- 0x00109584, 0x00109584, 0x00109584, 0x00109584,
- 0x00109584, 0x00109584, 0x00109592, 0x00109584,
- 0x0010966b, 0x00109584, 0x00109584, 0x0010966b,
- 0x00109584, 0x00109651, 0x0010966b, 0x00109584,
- 0x00109584, 0x00109584, 0x00109584, 0x0010966b,
- 0x0010966b, 0x00109584, 0x0010966b, 0x0010966b,
- 0x00109584, 0x0010959e, 0x00109584, 0x00109584,
- 0x00109584, 0x00109584, 0x0010960f, 0x0010966b,
- 0x00109584, 0x00109584, 0x00109637, 0x0010966b,
- 0x00109584, 0x00109584, 0x00109584, 0x00109584,
- 0x00109584, 0x00109584, 0x00109584, 0x00109584,
- 0x00109584, 0x00109585, 0x00109584, 0x00109584,
- 0x00109584, 0x00109584, 0x00109585, 0x00109584,
- 0x00109584, 0x00109584, 0x00109585, 0x00109585,
- 0x00109585, 0x00109584, 0x00109584, 0x00109584,
- 0x00109584, 0x00109584, 0x00109585, 0x00109584,
- 0x00109584, 0x00109584, 0x00109584, 0x00109584,
- 0x00109584, 0x00109584, 0x00109584, 0x00109584,
- 0x05b5fc6b, 0x05f9fb4c, 0x05000007, 0x59a80030,
- 0x48026205, 0x643a6203, 0x59a8002e, 0x48026006,
- 0x1c01f000, 0x4d2c0000, 0x59325809, 0x05b9f806,
- 0x5c025800, 0x0005f45a, 0x59a8002e, 0x48026006,
- 0x05f9fb3d, 0x05000007, 0x4a02601c, 0x0010959c,
- 0x59a80030, 0x48026205, 0x643a6203, 0x1c01f000,
+ 0x0000ffff, 0x05fe079c, 0x0501f00e, 0xa11c0494,
+ 0x05000002, 0x0500100b, 0x591c0407, 0x90000587,
+ 0x05fe07f3, 0x591c0403, 0x900005a4, 0x05020005,
+ 0x4d300000, 0x411e6000, 0x0005ffdc, 0x5c026000,
+ 0x64966403, 0x05fdf78c, 0x59cc1408, 0x41780000,
+ 0x0501fe0e, 0x05fe07e6, 0x05fdf7fa, 0x4933c857,
+ 0x4d3c0000, 0x60067800, 0x05c9fe9d, 0x5c027800,
+ 0x4c580000, 0x6008b000, 0x91a81c02, 0x91cc140b,
+ 0x05f1f9fb, 0x5c00b000, 0x05000003, 0x64c66403,
+ 0x05fdf779, 0x0005ffdc, 0x6008b000, 0x91a81c00,
+ 0x91cc140d, 0x05f1f9f2, 0x0502000c, 0x05d9fc44,
+ 0x0500000a, 0x59300407, 0x90000581, 0x05020007,
+ 0x59300403, 0x90000582, 0x05020004, 0x5930000a,
+ 0x81340580, 0x00040fdc, 0x05d1fa4c, 0x05020009,
+ 0x05d1fa56, 0x05020005, 0x64075042, 0x6006d800,
+ 0x05d1f9c9, 0x0501f003, 0x60040000, 0x05d1fa1c,
+ 0x1c01f000, 0x05b1fd97, 0x050200f7, 0x0501f92c,
+ 0x05fe073a, 0x493a6403, 0x0501f986, 0x05020003,
+ 0x64ae6403, 0x05fdf754, 0x64b26403, 0x05fdf752,
+ 0x4933c857, 0x05d9ff39, 0x050200eb, 0x05b1fd89,
+ 0x050200e9, 0x05cdfba8, 0x05fe072c, 0x59cc0408,
+ 0x4802641b, 0x59cc0208, 0x4802621b, 0x59cc0807,
+ 0x59340002, 0x82000500, 0x00ffffff, 0x80040580,
+ 0x0500001d, 0x5932481d, 0x59240005, 0x80040580,
+ 0x05020029, 0x59cc1408, 0x05f9facb, 0x0500002b,
+ 0x831c0580, 0xffffffff, 0x05000005, 0x0505fb01,
+ 0x05000026, 0x0505fed1, 0x05000024, 0x491e602a,
+ 0x64da6403, 0x59340200, 0x8c00050e, 0x05000009,
+ 0x831c0580, 0xffffffff, 0x050000c3, 0x591c0203,
+ 0x90001584, 0x05020003, 0x64066006, 0x1c01f000,
+ 0x0501f0bd, 0x59cc1208, 0x82080580, 0x0000ffff,
+ 0x05000008, 0x05f9fab0, 0x05000010, 0x591c0202,
+ 0x59cc0c08, 0x80040580, 0x0502000c, 0x05fdf7e1,
+ 0x59cc1408, 0x60040000, 0x0501fd9c, 0x05000007,
+ 0x05fdf7dc, 0x4803c856, 0x6426641c, 0x4a02621c,
+ 0x00001500, 0x0501f005, 0x4803c856, 0x640e641c,
+ 0x4a02621c, 0x00001700, 0x64de6403, 0x0501f0a2,
+ 0x4933c857, 0x05d9fef1, 0x050200a3, 0x05b1fd41,
+ 0x050200a1, 0x05cdfb60, 0x05fe06e4, 0x05cdf9f1,
+ 0x05000045, 0x59cc0407, 0x4802641b, 0x59cc1207,
+ 0x480a621b, 0x82080580, 0x0000ffff, 0x05000004,
+ 0x05f9fa89, 0x05000036, 0x0501f008, 0x59cc1407,
+ 0x60040000, 0x0501fd79, 0x05000031, 0x831c0580,
+ 0xffffffff, 0x0500002e, 0x59cc0c07, 0x591c0202,
+ 0x80040580, 0x0502002a, 0x0505fe88, 0x05000028,
+ 0x591c0416, 0x8c000516, 0x0502002f, 0x4d300000,
+ 0x411e6000, 0x05f5f927, 0x5c026000, 0x641e3a03,
+ 0x59cc0c09, 0x82040d00, 0x0000ff00, 0x840409c0,
+ 0x90040581, 0x05000009, 0x90040585, 0x0500000b,
+ 0x90040587, 0x05020011, 0x42000000, 0x0010e43c,
+ 0x0509f8e8, 0x0501f008, 0x42000000, 0x0010e43b,
+ 0x0509f8e4, 0x0501f007, 0x42000000, 0x0010e43a,
+ 0x0509f8e0, 0x591c0009, 0x80000540, 0x05000003,
+ 0x59cc2808, 0x0505f2a5, 0x4803c856, 0x6426641c,
+ 0x4a02621c, 0x00002a00, 0x0501f005, 0x4803c856,
+ 0x640e641c, 0x4a02621c, 0x00000300, 0x64ee6403,
+ 0x0501f055, 0x4803c856, 0x642e641c, 0x6402621c,
+ 0x05fdf7fb, 0x4803c856, 0x641e641c, 0x6402621c,
+ 0x05fdf7f7, 0x59cc0001, 0x82000580, 0x00fffffe,
+ 0x0502004d, 0x4c080000, 0x05cdf9b0, 0x05000021,
+ 0x05cdf991, 0x0505fbf6, 0x0502001c, 0x5932481d,
+ 0x59240200, 0x82000540, 0x000000e0, 0x48024a00,
+ 0x59a80249, 0x90000543, 0x48035249, 0x59a80046,
+ 0x800000d0, 0x59a8083d, 0x82040d00, 0x000000ff,
+ 0x80041540, 0x480b503d, 0x600c0800, 0x05e1fe12,
+ 0x497b504b, 0x8d0c0520, 0x05000004, 0x4a032804,
+ 0x000007d0, 0x0501f001, 0x0005ffdc, 0x05b1fd8e,
+ 0x5c001000, 0x1c01f000, 0x0505fbf3, 0x05fdf7fd,
+ 0x5c001000, 0x0005f7dc, 0x0501f82c, 0x05000026,
+ 0x653a6403, 0x64066203, 0x05e1f12f, 0x05cdfaee,
+ 0x05fe0666, 0x653e6403, 0x497a601e, 0x59cc0a06,
+ 0x82040d00, 0x000000ff, 0x800409c0, 0x05fc067e,
+ 0x90040581, 0x05020005, 0x59cc0808, 0x59a80005,
+ 0x80040580, 0x05fc0678, 0x90040582, 0x05020006,
+ 0x91cc140b, 0x6008b000, 0x91341c06, 0x05f1f8f0,
+ 0x05fc0671, 0x6406601e, 0x05fdf66f, 0x05cdfad6,
+ 0x05fe064e, 0x65426403, 0x59cc0207, 0x4802601e,
+ 0x05fdf669, 0x64066203, 0x42000800, 0x80000040,
+ 0x0005f6ab, 0x4803c857, 0x42000000, 0x0010e448,
+ 0x0509f874, 0x0005f7dc, 0x4d2c0000, 0x4c500000,
+ 0x4c580000, 0x4c540000, 0x59a800b6, 0x82000c80,
+ 0x00000841, 0x05021021, 0x05a5f9ff, 0x0500001f,
+ 0x492e6009, 0x59a800b6, 0x48025805, 0x90000403,
+ 0x80000104, 0x91cca406, 0x90000c87, 0x05001010,
+ 0x641e5811, 0x601cb000, 0x912c0409, 0x4000a800,
+ 0x0509f927, 0x412c7000, 0x800409c0, 0x05020003,
+ 0x49787001, 0x0501f00b, 0x05a5f9eb, 0x0500000b,
+ 0x492c7001, 0x40040000, 0x05fdf7f0, 0x48025811,
+ 0x4000b000, 0x912c0409, 0x4000a800, 0x0509f918,
+ 0x90000541, 0x0501f005, 0x497b50b6, 0x59325809,
+ 0x05a5fa07, 0x80000580, 0x5c00a800, 0x5c00b000,
+ 0x5c00a000, 0x5c025800, 0x1c01f000, 0x4d340000,
+ 0x5932680a, 0x59343400, 0x4933c857, 0x4937c857,
+ 0x481bc857, 0x05cdfa90, 0x5c026800, 0x1c01f000,
+ 0x4933c857, 0x4c600000, 0x4d3c0000, 0x4d440000,
+ 0x4d340000, 0x0501f858, 0x05020046, 0x59cc0207,
+ 0x82000d00, 0x0000ff00, 0x900411c0, 0x59cc000a,
+ 0x82000500, 0x00ffffff, 0x80081540, 0x480a601e,
+ 0x8c040518, 0x05000011, 0x60203000, 0x0505fdbf,
+ 0x42000000, 0x0010e453, 0x0509f822, 0x59240400,
+ 0x8c00050a, 0x05020005, 0x60082800, 0x60903000,
+ 0x611a8000, 0x0501ffde, 0x6004c000, 0x417a7800,
+ 0x05b1fbe0, 0x0501f02d, 0x8c04051a, 0x05000029,
+ 0x59cc000a, 0x59cc3800, 0x821c3d00, 0x00ffffff,
+ 0x05d9f902, 0x05cc0aac, 0x05020022, 0x5930001d,
+ 0x4c000000, 0x05cdfaa0, 0x4926601d, 0x5930000a,
+ 0x4c000000, 0x59240c00, 0x8c04050a, 0x0502000b,
+ 0x59340c03, 0x59341802, 0x820c1d00, 0x00ffffff,
+ 0x58002403, 0x60102800, 0x60903000, 0x611a8000,
+ 0x41301000, 0x0501ffca, 0x4936600a, 0x60243000,
+ 0x0505fd98, 0x42000000, 0x0010e453, 0x0505fff5,
+ 0x417a7800, 0x4178c000, 0x05b1fbba, 0x5c000000,
+ 0x4802600a, 0x5c000000, 0x4802601d, 0x0501f003,
+ 0x90000541, 0x0501f002, 0x80000580, 0x5c026800,
+ 0x5c028800, 0x5c027800, 0x5c00c000, 0x1c01f000,
+ 0x4933c857, 0x59cc0206, 0x90000490, 0x05021004,
+ 0x6402621c, 0x90000541, 0x0501f002, 0x80000580,
+ 0x1c01f000, 0x4933c857, 0x6402621c, 0x59cc0407,
+ 0x82000500, 0x0000ff00, 0x82000580, 0x00000800,
+ 0x0502000d, 0x59cc0206, 0x59a808b6, 0x80040480,
+ 0x0500100a, 0x59cc0006, 0x82000500, 0x00ff0000,
+ 0x82000d80, 0x00140000, 0x05000003, 0x82000d80,
+ 0x00100000, 0x1c01f000, 0x42000000, 0x0010e448,
+ 0x0505ffc4, 0x90000541, 0x05fdf7fb, 0x59300403,
+ 0xb00034a0, 0x05a21dbd, 0x91383593, 0x05020006,
+ 0x4803c857, 0x4c000000, 0x0505fe36, 0x5c000000,
+ 0x0c01f029, 0x4933c857, 0x493bc857, 0x913835a7,
+ 0x0500000d, 0x91383594, 0x0500000b, 0xb13805a1,
+ 0x05000003, 0xb13805a0, 0x05a20dac, 0x05e5f88a,
+ 0x05ea0404, 0x59300203, 0x9000058e, 0x05f40618,
+ 0x05a1fda6, 0x493bc857, 0x4937c857, 0x0505fe1f,
+ 0x05cdf875, 0x601c0800, 0x05c9fcb3, 0x05e1fc2e,
+ 0x4d2c0000, 0x0505fe6d, 0x0502000d, 0x59325809,
+ 0x812e59c0, 0x05020003, 0x5c025800, 0x05e1f02e,
+ 0x05f5fc85, 0x05a00d95, 0x05f9fb11, 0x05a20d93,
+ 0x64c65a0a, 0x64125810, 0x0001fb82, 0x5c025800,
+ 0x05e9f384, 0x0010c0ad, 0x0010c0ee, 0x0010c0ad,
+ 0x0010c0ad, 0x0010c0ad, 0x0010c0ee, 0x0010c0ff,
+ 0x0010c1d1, 0x0010c152, 0x0010c1d1, 0x0010c16b,
+ 0x0010c1d1, 0x0010c170, 0x0010c1d1, 0x0010c173,
+ 0x0010c1d1, 0x0010c173, 0x0010c1d1, 0x0010c1d1,
+ 0x0010c0ad, 0x0010c0ad, 0x0010c0ad, 0x0010c0ad,
+ 0x0010c0ad, 0x0010c0ad, 0x0010c0ad, 0x0010c0ad,
+ 0x0010c0ad, 0x0010c0ad, 0x0010c0ad, 0x0010c0ee,
+ 0x0010c0ad, 0x0010c1d1, 0x0010c0ad, 0x0010c0ad,
+ 0x0010c1d1, 0x0010c0ad, 0x0010c1b7, 0x0010c1d1,
+ 0x0010c0ad, 0x0010c0ad, 0x0010c0ad, 0x0010c0ad,
+ 0x0010c1d1, 0x0010c1d1, 0x0010c0ad, 0x0010c1d1,
+ 0x0010c1d1, 0x0010c0ad, 0x0010c0fa, 0x0010c0ad,
+ 0x0010c0ad, 0x0010c0ad, 0x0010c0ad, 0x0010c175,
+ 0x0010c1d1, 0x0010c0ad, 0x0010c0ad, 0x0010c19d,
+ 0x0010c1d1, 0x0010c0ad, 0x0010c0ad, 0x0010c0ad,
+ 0x0010c0ad, 0x0010c0ad, 0x0010c0ad, 0x0010c0ad,
+ 0x0010c0ad, 0x0010c0ad, 0x0010c0e1, 0x0010c0ad,
+ 0x0010c0ad, 0x0010c0ad, 0x0010c0ad, 0x0010c0e1,
+ 0x0010c0ad, 0x0010c0ad, 0x0010c0ad, 0x0010c0e1,
+ 0x0010c0e1, 0x0010c0e1, 0x0010c0ad, 0x0010c0ad,
+ 0x0010c0ad, 0x0010c0ad, 0x0010c0ad, 0x0010c0e1,
+ 0x0010c0ad, 0x0010c0ad, 0x0010c0ad, 0x0010c0bc,
+ 0x0010c0d7, 0x0010c0ae, 0x0010c0ad, 0x0010c0ad,
+ 0x0010c1d1, 0x05a1fd2d, 0x4933c857, 0x05f5ffef,
+ 0x05000007, 0x4a02601c, 0x0010c0b7, 0x59a8005e,
+ 0x48026205, 0x643a6203, 0x1c01f000, 0x640a6203,
+ 0x59a8005c, 0x800000c4, 0x48026006, 0x1c01f000,
+ 0x4933c857, 0x05f5ffe1, 0x05000007, 0x4a02601c,
+ 0x0010c0c5, 0x59a8005e, 0x48026205, 0x643a6203,
+ 0x1c01f000, 0x916c0583, 0x0502000a, 0x5930041b,
+ 0x4803c857, 0x9000050f, 0x0500000a, 0x9000050c,
+ 0x05000004, 0x4803c857, 0x05f9ffd8, 0x0501f005,
+ 0x4803c857, 0x65726403, 0x64066203, 0x05ddf79e,
+ 0x4933c857, 0x0005ffdc, 0x1c01f000, 0x4933c857,
+ 0x05f5fbf1, 0x050000f8, 0x4d2c0000, 0x59325809,
+ 0x64025a0a, 0x0001fb82, 0x5c025800, 0x497a6009,
+ 0x0501f0f1, 0x05f5ffbd, 0x05000007, 0x59a8005e,
+ 0x48026205, 0x643a6203, 0x59a8005c, 0x48026006,
+ 0x1c01f000, 0x4d2c0000, 0x59325809, 0x05a5f8b0,
+ 0x5c025800, 0x0005f7dc, 0x59a8005c, 0x48026006,
+ 0x05f5ffae, 0x05000007, 0x4a02601c, 0x0010c0f8,
+ 0x59a8005e, 0x48026205, 0x643a6203, 0x1c01f000,
0x640a6203, 0x1c01f000, 0x4d3c0000, 0x417a7800,
- 0x05d5fc13, 0x5c027800, 0x0501f0c9, 0x05d5ffee,
- 0x050000c7, 0x59a8021b, 0x8c000508, 0x0500000e,
+ 0x05c9fbe7, 0x5c027800, 0x0501f0d3, 0x05cdf93b,
+ 0x050000d1, 0x59a80249, 0x8c000508, 0x0500000e,
0x5932680a, 0x4c580000, 0x6008b000, 0x91a81c02,
- 0x91341406, 0x05f1fc74, 0x80000540, 0x5c00b000,
- 0x050200bb, 0x59340200, 0x8400051a, 0x48026a00,
- 0x0501f02d, 0x599c0017, 0x8c00050a, 0x05020007,
- 0x4d3c0000, 0x417a7800, 0x05d5fbf9, 0x5c027800,
- 0x601c0800, 0x05d5fc01, 0x59340212, 0x82000500,
- 0x0000ff00, 0x05020014, 0x83440d80, 0x000007fe,
- 0x050200a7, 0x05c5f9bb, 0x59a8021b, 0x8c000514,
- 0x050000a3, 0x83240580, 0x0010b391, 0x05020005,
- 0x4d300000, 0x05c5f829, 0x5c026000, 0x0501f09c,
- 0x59a8221b, 0x8c100514, 0x05000099, 0x05c5f991,
- 0x0501f097, 0x599c0017, 0x8c00050a, 0x05020094,
- 0x599c0019, 0x8c00050e, 0x05020091, 0x416c0000,
- 0x90000582, 0x05020004, 0x59a80016, 0x80000000,
- 0x48035016, 0x600c0800, 0x05d5fbdc, 0x64066407,
- 0x64066203, 0x640a6403, 0x05e5f9fe, 0x4ce80000,
- 0x6005d000, 0x05e1ff1a, 0x5c01d000, 0x1c01f000,
- 0x59340200, 0x8400051a, 0x48026a00, 0x05d5ff99,
- 0x0500007b, 0x60100800, 0x05d5fbcc, 0x0505fac7,
- 0x05020077, 0x05f9fadc, 0x05000009, 0x59a80030,
- 0x48026205, 0x643a6203, 0x59a8002e, 0x48026006,
- 0x4a02601c, 0x001095ff, 0x1c01f000, 0x60140800,
- 0x05d5fbbe, 0x64066407, 0x64066203, 0x640e6403,
- 0x05e5f1e0, 0x05d5ff8c, 0x05020065, 0x60180800,
- 0x0501f86c, 0x0501f062, 0x60100800, 0x05d5fbb3,
- 0x05fdf799, 0x05d5fe87, 0x0501f05d, 0x4d300000,
- 0x05f9fac1, 0x0500000c, 0x5930082a, 0x40066000,
- 0x59300416, 0x8c00051e, 0x05020003, 0x5c026000,
- 0x0501f055, 0x5c026000, 0x4a02601c, 0x0010961f,
- 0x0501f051, 0x5c026000, 0x0005f45a, 0x4c340000,
- 0x41306800, 0x05edf8dc, 0x05000012, 0x64066203,
- 0x647a6403, 0x58340c1b, 0x4806641b, 0x58340a1b,
- 0x4806621b, 0x5834002a, 0x4802602a, 0x5834080a,
- 0x4806600a, 0x5834081d, 0x4806601d, 0x05f9fa93,
- 0x64126407, 0x42000800, 0x80000040, 0x0005fb2e,
- 0x40366000, 0x5c006800, 0x0005f45a, 0x5930082a,
- 0x4807c857, 0x800409c0, 0x05000031, 0x5804001e,
- 0x81300580, 0x0502002e, 0x4978081e, 0x58041416,
- 0x8c080516, 0x0500002a, 0x8c080514, 0x05000028,
- 0x84081516, 0x48080c16, 0x58065809, 0x812e59c0,
- 0x05000023, 0x492fc857, 0x4d300000, 0x40066000,
- 0x641e6203, 0x417a7800, 0x0005fadc, 0x5c026000,
- 0x0501f01b, 0x05f9fa80, 0x0004045a, 0x5930002a,
- 0x80000540, 0x05000018, 0x4c340000, 0x40006800,
- 0x58340407, 0x5c006800, 0x90000583, 0x0006045a,
- 0x4a02601c, 0x0010965f, 0x0501f00f, 0x4d300000,
- 0x4d1c0000, 0x5932382a, 0x05edf89b, 0x05000004,
- 0x4a026416, 0x00000100, 0x05f9f918, 0x5c023800,
- 0x5c026000, 0x0005f45a, 0x05d5fb54, 0x05f9fa66,
- 0x0004045a, 0x497a601c, 0x59a80030, 0x48026205,
- 0x643a6203, 0x59a8002e, 0x48026006, 0x1c01f000,
- 0x4933c857, 0x4807c857, 0x05d5fb48, 0x4d3c0000,
- 0x417a7800, 0x05d5fb3a, 0x5c027800, 0x5934000a,
- 0x84000520, 0x4802680a, 0x05d5f616, 0x59340400,
- 0x4803c857, 0x80000110, 0x9000348c, 0x05b61b6c,
- 0x91383595, 0x05020002, 0x0c01f004, 0x91383596,
- 0x05b60b67, 0x0c01f00d, 0x00107634, 0x00107634,
- 0x00107634, 0x00107634, 0x00107634, 0x00107634,
- 0x001096c4, 0x001096a2, 0x00107634, 0x00107634,
- 0x00107634, 0x00107634, 0x00107634, 0x00107634,
- 0x00107634, 0x00107634, 0x00107634, 0x00107634,
- 0x001096c4, 0x001096d5, 0x00107634, 0x00107634,
- 0x00107634, 0x00107634, 0x4933c857, 0x5932481d,
- 0x59240400, 0x8c000508, 0x05000014, 0x813669c0,
- 0x05000012, 0x59340212, 0x82000500, 0x0000ff00,
- 0x0500000e, 0x599c0019, 0x8c00050e, 0x0502000b,
- 0x4d3c0000, 0x417a7800, 0x05d5fb01, 0x5c027800,
- 0x600c0800, 0x05d5fb09, 0x64066407, 0x64066203,
- 0x640a6403, 0x05e5f12b, 0x59cc0001, 0x59340802,
- 0x80040580, 0x82000500, 0x00ffffff, 0x0006045a,
- 0x59345002, 0x05d5f8d1, 0x482a6802, 0x0005f45a,
- 0x4933c857, 0x59303403, 0x9018359e, 0x0502000d,
- 0x91383595, 0x0006045a, 0x4c340000, 0x5930682a,
- 0x803469c0, 0x05000005, 0x58343416, 0x82183500,
- 0xffff1fff, 0x48186c16, 0x5c006800, 0x0005f45a,
- 0x1c01f000, 0x4933c857, 0x05f1fa45, 0x0006045a,
- 0x64066203, 0x64066403, 0x05e5f10a, 0x493bc857,
- 0xb1380591, 0x05020007, 0x05e5fe19, 0x05ee0051,
- 0x59300203, 0x90000582, 0x05000062, 0x05b5fb0c,
- 0x913805a7, 0x05000015, 0xb1380588, 0x0500000d,
- 0x91380594, 0x05000011, 0xb13805a1, 0x05000003,
- 0xb13805a0, 0x05b60b02, 0x05e5fe09, 0x05ee0041,
- 0x59300203, 0x9000058e, 0x0500054c, 0x05b5fafc,
- 0x05e5fe03, 0x05ee003b, 0x59300203, 0x90000584,
- 0x0004054c, 0x05b5faf6, 0x4933c857, 0x59300403,
- 0xb0000c84, 0x05b61af2, 0xb0000480, 0x05b41af0,
- 0x40027000, 0x4803c857, 0x0c01f001, 0x00109707,
- 0x00109708, 0x00109708, 0x0010971e, 0x05b5fae8,
- 0x05e5f98c, 0x59325809, 0x812e59c0, 0x05000012,
- 0x832c0500, 0x00ff0000, 0x0500000f, 0x640a6203,
- 0x5932680a, 0x59340200, 0x8c00050e, 0x0502000a,
- 0x60128000, 0x0501fc03, 0x497a6009, 0x59300006,
- 0x80000540, 0x05020003, 0x59a8002f, 0x48026006,
- 0x641e6203, 0x1c01f000, 0x05e5f976, 0x05f5fdd4,
- 0x05e807a7, 0x59325809, 0x05b5fe6a, 0x05e9f7a4,
- 0x05b5facb, 0x05f9f9ac, 0x05000005, 0x59a80030,
- 0x48026205, 0x643a6203, 0x0501f009, 0x59325809,
- 0x592c040b, 0x8c000502, 0x05000004, 0x641e6203,
- 0x610e7000, 0x0005f478, 0x64126203, 0x1c01f000,
- 0x0501fec7, 0x0004054a, 0x1c01f000, 0x05f9f99a,
- 0x05000007, 0x4a02601c, 0x0010973f, 0x59a80030,
- 0x48026205, 0x643a6203, 0x1c01f000, 0x64066203,
- 0x65066403, 0x42027800, 0x80002042, 0x0005f32e,
- 0xb1380498, 0x05001008, 0xb13805a1, 0x05000004,
- 0xb13805a0, 0x05000002, 0x05b5faa5, 0x4933c857,
- 0x1c01f000, 0xb1380591, 0x05000004, 0xb1380581,
- 0x05b60a9f, 0x1c01f000, 0x0005faec, 0x0501fedf,
- 0x0005f45a, 0xb1380498, 0x05f21575, 0xb1380492,
- 0x05b61a97, 0xb1380489, 0x05b41a95, 0x0c01f001,
- 0x00109766, 0x00109794, 0x00109765, 0x00109765,
- 0x00109765, 0x00109765, 0x00109794, 0x00109765,
- 0x001097b2, 0x05b5fa8a, 0x05f9f96b, 0x0500000b,
- 0x59300416, 0x8c000504, 0x05020008, 0x4a02601c,
- 0x00109772, 0x59a80030, 0x48026205, 0x64426203,
- 0x65266403, 0x1c01f000, 0x59325809, 0x592c040b,
- 0x8c00051e, 0x05000010, 0x82000d00, 0x000000c0,
- 0x82040d80, 0x00000080, 0x05000011, 0x59300804,
- 0x8c040518, 0x0502000e, 0x59300416, 0x8c000516,
- 0x05000003, 0x641e6203, 0x0501f011, 0x61067000,
- 0x0005f570, 0x641e6203, 0x497a6006, 0x59300416,
- 0x8c000516, 0x0502000a, 0x0005f2ec, 0x59325809,
- 0x592c0c0b, 0x8c04051a, 0x05020003, 0x0005faec,
- 0x0005f45a, 0x0501fe6a, 0x05fc07fd, 0x1c01f000,
- 0x05e5f8e3, 0x59325809, 0x5932680a, 0x59340200,
- 0x8c00050e, 0x0500000d, 0x592c040b, 0x82000500,
- 0x000000c0, 0x82000580, 0x00000080, 0x05000005,
- 0x592c0010, 0x59301817, 0x800c1c80, 0x480e6017,
- 0x640a6203, 0x0501f00c, 0x60128000, 0x0501fb71,
- 0x05f9fef3, 0x59300006, 0x80000540, 0x05020004,
- 0x59a8002f, 0x800000c2, 0x48026006, 0x497a6009,
- 0x641e6203, 0x1c01f000, 0x4933c857, 0x05e5fd44,
- 0x05b60a3b, 0x59300203, 0x90000582, 0x05fc078d,
- 0x05b5fa37, 0x641e6203, 0x497a6006, 0x0005f2ec,
- 0x641e6203, 0x497a6006, 0x0005f2e7, 0x59300416,
- 0x8c00051c, 0x0006055f, 0x59325809, 0x592c2010,
- 0x40080000, 0x80102480, 0x59300017, 0x80102400,
- 0x48126017, 0x0005f55f, 0x8c04050e, 0x05020007,
- 0x641a6203, 0x0501f818, 0x5930002b, 0x80000540,
- 0x05ba0af5, 0x0005f2e7, 0x640a6203, 0x1c01f000,
- 0x60040800, 0x05b9faf0, 0x90040581, 0x00040564,
- 0x05fdf7e4, 0x59300416, 0x8c00051c, 0x05000004,
- 0x05b9f8ce, 0x00040559, 0x1c01f000, 0x59300013,
- 0x80000540, 0x05020003, 0x05b9f8c8, 0x00040559,
+ 0x91341406, 0x05edff3e, 0x80000540, 0x5c00b000,
+ 0x050200c5, 0x59340200, 0x8400051a, 0x48026a00,
+ 0x0501f037, 0x599c0017, 0x8c00050a, 0x05020007,
+ 0x4d3c0000, 0x417a7800, 0x05c9fbcd, 0x5c027800,
+ 0x601c0800, 0x05c9fbd4, 0x59340212, 0x82000500,
+ 0x0000ff00, 0x0502001e, 0x83440d80, 0x000007fe,
+ 0x050200b1, 0x05b1fcf6, 0x05c5f9f6, 0x05000009,
+ 0x59240200, 0x8c00051e, 0x05000010, 0x59300809,
+ 0x4d300000, 0x05b1fe68, 0x5c026000, 0x0501f0a6,
+ 0x59a80249, 0x8c000514, 0x050000a3, 0x83240580,
+ 0x0010e512, 0x05020005, 0x4d300000, 0x05b1fb6d,
+ 0x5c026000, 0x0501f09c, 0x59a82249, 0x8c100514,
+ 0x05000099, 0x05b1fcd5, 0x0501f097, 0x599c0017,
+ 0x8c00050a, 0x05020094, 0x599c0019, 0x8c00050e,
+ 0x05020091, 0x416c0000, 0x90000582, 0x05020004,
+ 0x59a80044, 0x80000000, 0x48035044, 0x600c0800,
+ 0x05c9fba5, 0x64066407, 0x64066203, 0x640a6403,
+ 0x05ddff25, 0x4ce80000, 0x6005d000, 0x05d9fd7e,
+ 0x5c01d000, 0x1c01f000, 0x59340200, 0x8400051a,
+ 0x48026a00, 0x05cdf8dc, 0x0500007b, 0x60100800,
+ 0x05c9fb95, 0x0505fc46, 0x05020077, 0x05f5ff43,
+ 0x05000009, 0x59a8005e, 0x48026205, 0x643a6203,
+ 0x59a8005c, 0x48026006, 0x4a02601c, 0x0010c165,
+ 0x1c01f000, 0x60140800, 0x05c9fb87, 0x64066407,
+ 0x64066203, 0x640e6403, 0x05ddf707, 0x05cdf8cf,
+ 0x05020065, 0x60180800, 0x0501f86c, 0x0501f062,
+ 0x60100800, 0x05c9fb7c, 0x05fdf78f, 0x05c9ff3a,
+ 0x0501f05d, 0x4d300000, 0x05f5ff28, 0x0500000c,
+ 0x5930082a, 0x40066000, 0x59300416, 0x8c00051e,
+ 0x05020003, 0x5c026000, 0x0501f055, 0x5c026000,
+ 0x4a02601c, 0x0010c185, 0x0501f051, 0x5c026000,
+ 0x0005f7dc, 0x4c340000, 0x41306800, 0x05e9fa7c,
+ 0x05000012, 0x64066203, 0x647a6403, 0x58340c1b,
+ 0x4806641b, 0x58340a1b, 0x4806621b, 0x5834002a,
+ 0x4802602a, 0x5834080a, 0x4806600a, 0x5834081d,
+ 0x4806601d, 0x05f5fefa, 0x64126407, 0x42000800,
+ 0x80000040, 0x0005feab, 0x40366000, 0x5c006800,
+ 0x0005f7dc, 0x5930082a, 0x4807c857, 0x800409c0,
+ 0x05000031, 0x5804001e, 0x81300580, 0x0502002e,
+ 0x4978081e, 0x58041416, 0x8c080516, 0x0500002a,
+ 0x8c080514, 0x05000028, 0x84081516, 0x48080c16,
+ 0x58065809, 0x812e59c0, 0x05000023, 0x492fc857,
+ 0x4d300000, 0x40066000, 0x641e6203, 0x417a7800,
+ 0x0005fe2d, 0x5c026000, 0x0501f01b, 0x05f5fee7,
+ 0x000407dc, 0x5930002a, 0x80000540, 0x05000018,
+ 0x4c340000, 0x40006800, 0x58340407, 0x5c006800,
+ 0x90000583, 0x000607dc, 0x4a02601c, 0x0010c1c5,
+ 0x0501f00f, 0x4d300000, 0x4d1c0000, 0x5932382a,
+ 0x05e9fa3b, 0x05000004, 0x4a026416, 0x00000100,
+ 0x05f5fd84, 0x5c023800, 0x5c026000, 0x0005f7dc,
+ 0x05c9fb1d, 0x05f5fecd, 0x000407dc, 0x497a601c,
+ 0x59a8005e, 0x48026205, 0x643a6203, 0x59a8005c,
+ 0x48026006, 0x1c01f000, 0x4933c857, 0x4807c857,
+ 0x05c9fb11, 0x4d3c0000, 0x417a7800, 0x05c9fb04,
+ 0x5c027800, 0x5934000a, 0x84000520, 0x4802680a,
+ 0x05c9f6c9, 0x59340400, 0x4803c857, 0x80000110,
+ 0x9000348c, 0x05a21bf1, 0x91383595, 0x05020002,
+ 0x0c01f004, 0x91383596, 0x05a20bec, 0x0c01f00d,
+ 0x00109b47, 0x00109b47, 0x00109b47, 0x00109b47,
+ 0x0010ce6d, 0x00109b47, 0x0010c22a, 0x0010c208,
+ 0x00109b47, 0x00109b47, 0x00109b47, 0x00109b47,
+ 0x00109b47, 0x00109b47, 0x00109b47, 0x00109b47,
+ 0x0010ce6d, 0x00109b47, 0x0010c22a, 0x0010c23b,
+ 0x00109b47, 0x00109b47, 0x00109b47, 0x00109b47,
+ 0x4933c857, 0x5932481d, 0x59240400, 0x8c000508,
+ 0x05000014, 0x813669c0, 0x05000012, 0x59340212,
+ 0x82000500, 0x0000ff00, 0x0500000e, 0x599c0019,
+ 0x8c00050e, 0x0502000b, 0x4d3c0000, 0x417a7800,
+ 0x05c9facb, 0x5c027800, 0x600c0800, 0x05c9fad2,
+ 0x64066407, 0x64066203, 0x640a6403, 0x05ddf652,
+ 0x59cc0001, 0x59340802, 0x80040580, 0x82000500,
+ 0x00ffffff, 0x000607dc, 0x59345002, 0x05c9f861,
+ 0x482a6802, 0x0005f7dc, 0x4933c857, 0x59303403,
+ 0x9018359e, 0x0502000d, 0x91383595, 0x000607dc,
+ 0x4c340000, 0x5930682a, 0x803469c0, 0x05000005,
+ 0x58343416, 0x82183500, 0xffff1fff, 0x48186c16,
+ 0x5c006800, 0x0005f7dc, 0x1c01f000, 0x4933c857,
+ 0x05edfbfe, 0x000607dc, 0x64066203, 0x64066403,
+ 0x05ddf631, 0x493bc857, 0xb1380591, 0x05020007,
+ 0x05e1fe75, 0x05ea01ef, 0x59300203, 0x90000582,
+ 0x05000062, 0x05a1fb91, 0x913805a7, 0x05000015,
+ 0xb1380588, 0x0500000d, 0x91380594, 0x05000011,
+ 0xb13805a1, 0x05000003, 0xb13805a0, 0x05a20b87,
+ 0x05e1fe65, 0x05ea01df, 0x59300203, 0x9000058e,
+ 0x05000675, 0x05a1fb81, 0x05e1fe5f, 0x05ea01d9,
+ 0x59300203, 0x90000584, 0x0008014a, 0x05a1fb7b,
+ 0x4933c857, 0x59300403, 0xb0000c84, 0x05a21b77,
+ 0xb0000480, 0x05a01b75, 0x40027000, 0x4803c857,
+ 0x0c01f001, 0x0010c26d, 0x0010c26e, 0x0010c26e,
+ 0x0010c284, 0x05a1fb6d, 0x05e1f9fb, 0x59325809,
+ 0x812e59c0, 0x05000012, 0x832c0500, 0x00ff0000,
+ 0x0500000f, 0x640a6203, 0x5932680a, 0x59340200,
+ 0x8c00050e, 0x0502000a, 0x60128000, 0x0501fd0b,
+ 0x497a6009, 0x59300006, 0x80000540, 0x05020003,
+ 0x59a8005d, 0x48026006, 0x641e6203, 0x1c01f000,
+ 0x05e1f9e5, 0x05f5fa44, 0x05e8014a, 0x59325809,
+ 0x05a1ff0a, 0x05e9f147, 0x05a1fb50, 0x05f5fe13,
+ 0x05000005, 0x59a8005e, 0x48026205, 0x643a6203,
+ 0x0501f009, 0x59325809, 0x592c040e, 0x8c000502,
+ 0x05000004, 0x641e6203, 0x610e7000, 0x0009f000,
+ 0x64126203, 0x1c01f000, 0x0501fff6, 0x00080148,
+ 0x1c01f000, 0x05f5fe01, 0x05000007, 0x4a02601c,
+ 0x0010c2a5, 0x59a8005e, 0x48026205, 0x643a6203,
+ 0x1c01f000, 0x64066203, 0x65066403, 0x42027800,
+ 0x80002042, 0x0005f6ab, 0xb1380498, 0x05001008,
+ 0xb13805a1, 0x05000004, 0xb13805a0, 0x05000002,
+ 0x05a1fb2a, 0x4933c857, 0x1c01f000, 0xb1380591,
+ 0x05000004, 0xb1380581, 0x05a20b24, 0x1c01f000,
+ 0x0005fe4e, 0x0505f80e, 0x0005f7dc, 0xb1380498,
+ 0x05f210a1, 0xb1380492, 0x05a21b1c, 0xb1380489,
+ 0x05a01b1a, 0x0c01f001, 0x0010c2cc, 0x0010c2fa,
+ 0x0010c2cb, 0x0010c2cb, 0x0010c2cb, 0x0010c2cb,
+ 0x0010c2fa, 0x0010c2cb, 0x0010c318, 0x05a1fb0f,
+ 0x05f5fdd2, 0x0500000b, 0x59300416, 0x8c000504,
+ 0x05020008, 0x4a02601c, 0x0010c2d8, 0x59a8005e,
+ 0x48026205, 0x64426203, 0x65266403, 0x1c01f000,
+ 0x59325809, 0x592c040e, 0x8c00051e, 0x05000010,
+ 0x82000d00, 0x000000c0, 0x82040d80, 0x00000080,
+ 0x05000011, 0x59300804, 0x8c040518, 0x0502000e,
+ 0x59300416, 0x8c000516, 0x05000003, 0x641e6203,
+ 0x0501f011, 0x61067000, 0x0009f178, 0x641e6203,
+ 0x497a6006, 0x59300416, 0x8c000516, 0x0502000a,
+ 0x0005f64e, 0x59325809, 0x592c0c0e, 0x8c04051a,
+ 0x05020003, 0x0005fe4e, 0x0005f7dc, 0x0501ff99,
+ 0x05fc07fd, 0x1c01f000, 0x05e1f952, 0x59325809,
+ 0x5932680a, 0x59340200, 0x8c00050e, 0x0500000d,
+ 0x592c040e, 0x82000500, 0x000000c0, 0x82000580,
+ 0x00000080, 0x05000005, 0x592c0013, 0x59301817,
+ 0x800c1c80, 0x480e6017, 0x640a6203, 0x0501f00c,
+ 0x60128000, 0x0501fc79, 0x05f9fba3, 0x59300006,
+ 0x80000540, 0x05020004, 0x59a8005d, 0x800000c2,
+ 0x48026006, 0x497a6009, 0x641e6203, 0x1c01f000,
+ 0x4933c857, 0x05e1fda0, 0x05a20ac0, 0x59300203,
+ 0x90000582, 0x05fc078d, 0x05a1fabc, 0x641e6203,
+ 0x497a6006, 0x0005f64e, 0x641e6203, 0x497a6006,
+ 0x0005f645, 0x59300416, 0x8c00051c, 0x000a0167,
+ 0x59325809, 0x592c2013, 0x40080000, 0x80102480,
+ 0x59300017, 0x80102400, 0x48126017, 0x0009f167,
+ 0x8c04050e, 0x05020007, 0x641a6203, 0x0501f822,
+ 0x5930002b, 0x80000540, 0x05a60c01, 0x0005f645,
+ 0x640a6203, 0x1c01f000, 0x60040800, 0x05a5fbfc,
+ 0x90040581, 0x0008016c, 0x05fdf7e4, 0x83300580,
+ 0x00111ad0, 0x05000004, 0x59300416, 0x8c00051c,
+ 0x05000006, 0x59300008, 0x8c000522, 0x05a609ce,
+ 0x00080157, 0x1c01f000, 0x59300013, 0x80000540,
+ 0x00080157, 0x59325809, 0x592c040b, 0x8c000510,
+ 0x05000004, 0x497a6013, 0x05a5f9c3, 0x00080157,
0x1c01f000, 0x492fc857, 0x480bc857, 0x8c08053e,
0x05000005, 0x80081080, 0x80081000, 0x60240800,
- 0x0501f002, 0x60540800, 0x480a580c, 0x1c01f000,
+ 0x0501f002, 0x60540800, 0x480a580f, 0x1c01f000,
0x1c01f000, 0x91380593, 0x05000003, 0x91380594,
- 0x05b609fb, 0x59300416, 0x8c000516, 0x05b409f8,
- 0x1c01f000, 0x05b5f9f6, 0x59300009, 0x80000540,
- 0x05b609f3, 0x1c01f000, 0x59300416, 0x8c000516,
- 0x05b409ef, 0x1c01f000, 0x64126203, 0x493a6403,
- 0x42000800, 0x80002001, 0x0005f32e, 0x640e6203,
- 0x493a6403, 0x05f9f8c8, 0x05000007, 0x59300416,
- 0x8c00050a, 0x05020004, 0x4a02601c, 0x00109811,
- 0x1c01f000, 0x0001f989, 0x59325809, 0x592c040b,
+ 0x05a20a76, 0x59300416, 0x8c000516, 0x05a00a73,
+ 0x1c01f000, 0x05a1fa71, 0x59300009, 0x80000540,
+ 0x05a20a6e, 0x1c01f000, 0x59300416, 0x8c000516,
+ 0x05a00a6a, 0x1c01f000, 0x64126203, 0x493a6403,
+ 0x42000800, 0x80002001, 0x0005f6ab, 0x640e6203,
+ 0x493a6403, 0x05f5fd25, 0x05000007, 0x59300416,
+ 0x8c00050a, 0x05020004, 0x4a02601c, 0x0010c381,
+ 0x1c01f000, 0x0001f996, 0x59325809, 0x592c040e,
0x8c00051e, 0x05000011, 0x82000500, 0x000000c0,
0x82000580, 0x00000080, 0x0500000f, 0x59300416,
0x8c000512, 0x05020009, 0x8c000510, 0x05020007,
- 0x592c040d, 0x80000540, 0x05020004, 0x82080d40,
- 0x80003065, 0x0005f320, 0x82080d40, 0x80002065,
- 0x0005f320, 0x82080d40, 0x80002042, 0x0005f320,
- 0x4933c857, 0x493bc857, 0xb1380484, 0x05b619c0,
- 0xb1380481, 0x05b419be, 0x0c01f001, 0x00109836,
- 0x00109844, 0x00109856, 0x59325809, 0x592c040b,
+ 0x592c0410, 0x80000540, 0x05020004, 0x82080d40,
+ 0x80003065, 0x0005f69d, 0x82080d40, 0x80002065,
+ 0x0005f69d, 0x82080d40, 0x80002042, 0x0005f69d,
+ 0x4933c857, 0x493bc857, 0xb1380484, 0x05a21a3b,
+ 0xb1380481, 0x05a01a39, 0x0c01f001, 0x0010c3a6,
+ 0x0010c3b4, 0x0010c3c6, 0x59325809, 0x592c040e,
0x8c00051e, 0x05000019, 0x82001d00, 0x000000c0,
0x820c1d80, 0x000000c0, 0x05000014, 0x64066203,
- 0x493a6403, 0x42000800, 0x80002042, 0x0005f32e,
- 0x59325809, 0x592c040b, 0x8c00051e, 0x0500000b,
+ 0x493a6403, 0x42000800, 0x80002042, 0x0005f6ab,
+ 0x59325809, 0x592c040e, 0x8c00051e, 0x0500000b,
0x82001d00, 0x000000c0, 0x820c1d80, 0x000000c0,
0x05000006, 0x64066203, 0x493a6403, 0x42000800,
- 0x80002001, 0x0005f32e, 0x497a6009, 0x497a6006,
- 0x60128000, 0x0501f2c3, 0x59325809, 0x592c040b,
+ 0x80002001, 0x0005f6ab, 0x497a6009, 0x497a6006,
+ 0x60128000, 0x0501f3c1, 0x59325809, 0x592c040e,
0x8c00051e, 0x05fc07f9, 0x82001d00, 0x000000c0,
0x820c1d80, 0x000000c0, 0x05fc07f4, 0x640e6203,
- 0x493a6403, 0x05f9f870, 0x05000007, 0x59300416,
- 0x8c00050a, 0x05020004, 0x4a02601c, 0x00109869,
- 0x1c01f000, 0x0001f989, 0x82080d40, 0x80002065,
- 0x0005f320, 0x4933c857, 0x493bc857, 0x83380580,
+ 0x493a6403, 0x05f5fccd, 0x05000007, 0x59300416,
+ 0x8c00050a, 0x05020004, 0x4a02601c, 0x0010c3d9,
+ 0x1c01f000, 0x0001f996, 0x82080d40, 0x80002065,
+ 0x0005f69d, 0x4933c857, 0x493bc857, 0x83380580,
0x00000085, 0x05000005, 0x83380580, 0x00000088,
- 0x05000007, 0x05b5f97a, 0x64266203, 0x493a6403,
- 0x42000800, 0x80000040, 0x0005f32e, 0x83300580,
- 0x001104b4, 0x05b60972, 0x4d1c0000, 0x813669c0,
- 0x05000003, 0x0501fd75, 0x05020056, 0x59cc1404,
- 0x41780000, 0x0501f855, 0x05000025, 0x59cc0204,
- 0x82001580, 0x0000ffff, 0x05000004, 0x591c1402,
- 0x80080580, 0x0502001e, 0x05f9f843, 0x05000010,
- 0x59cc0005, 0x8c000500, 0x0500000d, 0x4d300000,
- 0x411e6000, 0x05f5f8b0, 0x5c026000, 0x05000029,
- 0x591c0416, 0x8400055a, 0x48023c16, 0x59300416,
- 0x8400055a, 0x48026416, 0x0501f028, 0x591c0407,
- 0x9000051f, 0x90002586, 0x05000005, 0x90002584,
- 0x05000029, 0x90002591, 0x05020005, 0x497a3a05,
- 0x61502000, 0x05e9ff81, 0x0501f02e, 0x59240400,
- 0x8c00050a, 0x05020004, 0x42023800, 0xffffffff,
- 0x05fdf7f8, 0x813669c0, 0x0502000e, 0x59cc0001,
- 0x59cc3800, 0x821c3d00, 0x00ffffff, 0x4c1c0000,
- 0x05ddff4e, 0x5c003800, 0x0502001e, 0x05c1fed7,
- 0x05d5f92f, 0x0502001b, 0x4926601d, 0x4936600a,
+ 0x05000007, 0x05a1f9f5, 0x64266203, 0x493a6403,
+ 0x42000800, 0x80000040, 0x0005f6ab, 0x83300580,
+ 0x00111a70, 0x05a209ed, 0x4d1c0000, 0x813669c0,
+ 0x05000003, 0x0501fe9a, 0x0502005a, 0x59cc1404,
+ 0x41780000, 0x0501f859, 0x05000028, 0x831c0580,
+ 0xffffffff, 0x05000025, 0x59cc0204, 0x82001580,
+ 0x0000ffff, 0x05000004, 0x591c1402, 0x80080580,
+ 0x0502001e, 0x05f5fc9d, 0x05000010, 0x59cc0005,
+ 0x8c000500, 0x0500000d, 0x4d300000, 0x411e6000,
+ 0x05f1fc04, 0x5c026000, 0x0500002a, 0x591c0416,
+ 0x8400055a, 0x48023c16, 0x59300416, 0x8400055a,
+ 0x48026416, 0x0501f029, 0x591c0407, 0x9000051f,
+ 0x90002586, 0x05000005, 0x90002584, 0x0500002a,
+ 0x90002591, 0x05020005, 0x497a3a05, 0x61502000,
+ 0x05e9f911, 0x0501f02f, 0x59240400, 0x8c00050a,
+ 0x05020004, 0x42023800, 0xffffffff, 0x05fdf7f8,
+ 0x813669c0, 0x0502000f, 0x59cc0001, 0x59cc3800,
+ 0x821c3d00, 0x00ffffff, 0x4c1c0000, 0x05d5fca3,
+ 0x5c003800, 0x0502001f, 0x05b1f9fa, 0x0502001d,
+ 0x05c9f8e4, 0x0502001b, 0x4926601d, 0x4936600a,
0x4a026403, 0x00000087, 0x59cc1204, 0x82081580,
0x0000ffff, 0x05020003, 0x4a026403, 0x00000086,
- 0x4d2c0000, 0x0505f815, 0x05d5ff92, 0x5c025800,
- 0x0501f00c, 0x591c0403, 0x900005b8, 0x05fc07d9,
- 0x591c0203, 0x90000587, 0x05fe07d9, 0x4d300000,
- 0x411e6000, 0x05e9fdf2, 0x5c026000, 0x05fdf7d4,
+ 0x4d2c0000, 0x0505f986, 0x05cdf8d1, 0x5c025800,
+ 0x0501f00c, 0x591c0403, 0x900005b8, 0x05fc07d8,
+ 0x591c0203, 0x90000587, 0x05fe07d8, 0x4d300000,
+ 0x411e6000, 0x05e5ff87, 0x5c026000, 0x05fdf7d3,
0x5c023800, 0x1c01f000, 0x4933c857, 0x480bc857,
- 0x4c5c0000, 0x4000b800, 0x42002800, 0x00110514,
+ 0x4c5c0000, 0x4000b800, 0x42002800, 0x00111b00,
0x41300000, 0x80140580, 0x0500001c, 0x58140203,
0x90000580, 0x05000019, 0x58140202, 0x80080580,
0x05020016, 0x58140203, 0x9000058f, 0x05000013,
0x58141c07, 0x900c0585, 0x05000010, 0x8c5c0500,
0x05000003, 0x900c0587, 0x0500000c, 0x5930200a,
0x5814000a, 0x800001c0, 0x0500000d, 0x82001d80,
- 0x0010ce8f, 0x0500000a, 0x801021c0, 0x05000003,
+ 0x00110210, 0x0500000a, 0x801021c0, 0x05000003,
0x80100580, 0x05000011, 0x90142c30, 0x41540000,
- 0x80140480, 0x0502101d, 0x05fdf7de, 0x5814002a,
+ 0x80140480, 0x05021020, 0x05fdf7de, 0x5814002a,
0x801021c0, 0x05000005, 0x58102002, 0x82102500,
0x00ffffff, 0x05fdf7f3, 0x8c5c0500, 0x05fe07f3,
0x5930202a, 0x05fdf7ef, 0x40163800, 0x8c5c0500,
- 0x05000007, 0x4c080000, 0x4c140000, 0x0501ff6e,
- 0x5c002800, 0x5c001000, 0x05fc07e8, 0x591c000a,
- 0x800001c0, 0x05020003, 0x5930000a, 0x4802380a,
- 0x81300540, 0x0501f009, 0x8c5c0500, 0x05000007,
- 0x40080800, 0x42023800, 0xffffffff, 0x05d5ff42,
- 0x05fc07f3, 0x80000580, 0x5c00b800, 0x1c01f000,
- 0x4933c857, 0x83300580, 0x00110484, 0x0502002d,
- 0x64026203, 0x91380593, 0x05020022, 0x59300403,
- 0x82000580, 0x00000092, 0x05b608bd, 0x59a80067,
- 0x59325809, 0x812e59c0, 0x05000005, 0x812c0580,
- 0x05b608b7, 0x592c0000, 0x497a5800, 0x800001c0,
- 0x05000004, 0x48035067, 0x05e9fd04, 0x0501f003,
- 0x497b5067, 0x497b5068, 0x812e59c0, 0x05000014,
- 0x592c0205, 0xb0000595, 0x05b40446, 0x91380593,
- 0x05020003, 0x64025a07, 0x0001f35b, 0x64c65a07,
- 0x64125812, 0x4a025813, 0x000000ff, 0x0001f35b,
- 0x913805a7, 0x05000003, 0x91380594, 0x05b6089c,
- 0x493bc857, 0x05e1ff3f, 0x05fdf7d9, 0x1c01f000,
- 0x4933c857, 0x91380593, 0x0502000c, 0x59300403,
- 0x4803c857, 0x82000c80, 0x00000085, 0x05b41890,
- 0x82000c80, 0x00000093, 0x05b6188d, 0x82000480,
- 0x00000085, 0x0c01f01c, 0x913805a7, 0x0500000f,
- 0x91380594, 0x0500000d, 0x493bc857, 0xb13805a1,
- 0x05000003, 0xb13805a0, 0x05020007, 0x05e5fb88,
- 0x05ea05c0, 0x59300203, 0x9000058e, 0x050002bc,
- 0x05b5f87b, 0x05e9f5bb, 0x493bc857, 0x05e1ff1d,
- 0x59325809, 0x812e59c0, 0x05e8054d, 0x64c65a07,
- 0x64125812, 0x4a025813, 0x000000ff, 0x0001fb5b,
- 0x05e9f547, 0x0010998f, 0x00109993, 0x00109993,
- 0x0010998f, 0x0010998f, 0x0010998f, 0x0010998f,
- 0x0010998f, 0x0010998f, 0x0010998f, 0x0010998f,
- 0x0010998f, 0x0010998f, 0x00109990, 0x05b5f860,
- 0x59325809, 0x64025a07, 0x0001fb5b, 0x0005f45a,
- 0x4933c857, 0x42000000, 0x0010b2e6, 0x0505f8ae,
- 0x0501fc9a, 0x497a6205, 0x602e8000, 0x0501f805,
- 0x641a6407, 0x641e6203, 0x497a6006, 0x1c01f000,
- 0x4933c857, 0x4943c857, 0x59300407, 0x90000587,
- 0x05020002, 0x1c01f000, 0x05e1ff99, 0x4df00000,
- 0x05f5fb4b, 0x0500000a, 0x59300809, 0x58040000,
- 0x80001540, 0x05000006, 0x49780800, 0x4d2c0000,
- 0x400a5800, 0x0501f967, 0x5c025800, 0x05f5f8b1,
- 0x90000c91, 0x05b6183a, 0x0c01f001, 0x001099db,
- 0x001099de, 0x001099c8, 0x001099ea, 0x001099f8,
- 0x001099c8, 0x001099c8, 0x001099c8, 0x001099c8,
- 0x001099c8, 0x001099c8, 0x001099c8, 0x001099c8,
- 0x001099c8, 0x001099c8, 0x001099c8, 0x001099c8,
- 0x05f9fcd3, 0x4d400000, 0x5930002b, 0x80000540,
- 0x05000004, 0x41400800, 0x05b9f8f7, 0x40068000,
- 0x4d2c0000, 0x59325809, 0x05f5fb21, 0x05020945,
- 0x4c5c0000, 0x5930b80a, 0x05e9fcf1, 0x485e600a,
+ 0x05000007, 0x4c080000, 0x4c140000, 0x0505f8df,
+ 0x5c002800, 0x5c001000, 0x05fc07e8, 0x831c0580,
+ 0xffffffff, 0x05000006, 0x591c000a, 0x800001c0,
+ 0x05020003, 0x5930000a, 0x4802380a, 0x81300540,
+ 0x0501f009, 0x8c5c0500, 0x05000007, 0x40080800,
+ 0x42023800, 0xffffffff, 0x05cdf87e, 0x05fc07f0,
+ 0x80000580, 0x5c00b800, 0x1c01f000, 0x4933c857,
+ 0x83300580, 0x00111a40, 0x05020037, 0x64026203,
+ 0x91380593, 0x0502002c, 0x59300403, 0x82000580,
+ 0x00000092, 0x05a20931, 0x59a8009d, 0x59325809,
+ 0x812e59c0, 0x05000005, 0x812c0580, 0x05a2092b,
+ 0x592c0000, 0x497a5800, 0x800001c0, 0x05000004,
+ 0x4803509d, 0x05e5fe13, 0x0501f003, 0x497b509d,
+ 0x497b509e, 0x812e59c0, 0x0500001e, 0x592c0208,
+ 0xb0000595, 0x05a004d5, 0x91380593, 0x0502000d,
+ 0x592c0817, 0x82040580, 0xffffffff, 0x05000007,
+ 0xa0040494, 0x05021005, 0x05000004, 0x64180c07,
+ 0x64000c07, 0x49780806, 0x64025a0a, 0x0001f382,
+ 0x64c65a0a, 0x64125815, 0x4a025816, 0x000000ff,
+ 0x0001f382, 0x913805a7, 0x05000003, 0x91380594,
+ 0x05a20906, 0x493bc857, 0x05ddff93, 0x05fdf7cf,
+ 0x1c01f000, 0x4933c857, 0x91380593, 0x0502000c,
+ 0x59300403, 0x4803c857, 0x82000c80, 0x00000085,
+ 0x05a018fa, 0x82000c80, 0x00000093, 0x05a218f7,
+ 0x82000480, 0x00000085, 0x0c01f01c, 0x913805a7,
+ 0x0500000f, 0x91380594, 0x0500000d, 0x493bc857,
+ 0xb13805a1, 0x05000003, 0xb13805a0, 0x05020007,
+ 0x05e1fbc9, 0x05e60743, 0x59300203, 0x9000058e,
+ 0x050003ca, 0x05a1f8e5, 0x05e5f73e, 0x493bc857,
+ 0x05ddff71, 0x59325809, 0x812e59c0, 0x05e406d5,
+ 0x64c65a0a, 0x64125815, 0x4a025816, 0x000000ff,
+ 0x0001fb82, 0x05e5f6cf, 0x0010c510, 0x0010c514,
+ 0x0010c514, 0x0010c510, 0x0010c510, 0x0010c510,
+ 0x0010c510, 0x0010c510, 0x0010c510, 0x0010c510,
+ 0x0010c510, 0x0010c510, 0x0010c510, 0x0010c511,
+ 0x05a1f8ca, 0x59325809, 0x64025a0a, 0x0001fb82,
+ 0x0005f7dc, 0x4933c857, 0x42000000, 0x0010e464,
+ 0x0505fac4, 0x0501fdae, 0x497a6205, 0x602e8000,
+ 0x0501f805, 0x641a6407, 0x641e6203, 0x497a6006,
+ 0x1c01f000, 0x4933c857, 0x4943c857, 0x59300407,
+ 0x90000587, 0x05020002, 0x1c01f000, 0x05ddffec,
+ 0x4df00000, 0x05f1ffa0, 0x0500000c, 0x9140058c,
+ 0x0500000a, 0x59300809, 0x58040000, 0x80001540,
+ 0x05000006, 0x49780800, 0x4d2c0000, 0x400a5800,
+ 0x0501fa52, 0x5c025800, 0x05f1fc05, 0x90000c91,
+ 0x05a218a2, 0x0c01f001, 0x0010c563, 0x0010c566,
+ 0x0010c54b, 0x0010c570, 0x0010c57c, 0x0010c54b,
+ 0x0010c54b, 0x0010c54b, 0x0010c54b, 0x0010c54b,
+ 0x0010c54b, 0x0010c54b, 0x0010c54b, 0x0010c54b,
+ 0x0010c54b, 0x0010c54b, 0x0010c54b, 0x05f9f966,
+ 0x4d400000, 0x5930002b, 0x80000540, 0x05000004,
+ 0x41400800, 0x05a5f9e6, 0x40068000, 0x4d2c0000,
+ 0x59325809, 0x05f1ff74, 0x05000006, 0x592c040b,
+ 0x8c000510, 0x05000002, 0x05ddf9f3, 0x0501fa2b,
+ 0x4c5c0000, 0x5930b80a, 0x05e5fe72, 0x485e600a,
0x5c00b800, 0x5c025800, 0x5c028000, 0x5c03e000,
- 0x05e0074f, 0x1c01f000, 0x598c000b, 0x81300580,
- 0x05020003, 0x05e5fa6d, 0x05020012, 0x0201f800,
- 0x0010f0f2, 0x80c40040, 0x05fc07e2, 0x05e1fe72,
- 0x0500000c, 0x05b5f806, 0x05f5f86c, 0x05020003,
- 0x05e5fa2d, 0x05020007, 0x0201f800, 0x0010ef65,
- 0x80c40040, 0x05fc07d7, 0x05e1fe67, 0x05b20ffc,
- 0x59300203, 0x90000c91, 0x05b21ff9, 0x0c01f7c0,
- 0x05b9f9df, 0x05fdf7cf, 0x4933c857, 0x4d240000,
- 0x4d440000, 0x4d340000, 0x59cc3800, 0x821c3d00,
- 0x00ffffff, 0x59cc0007, 0x4c000000, 0x59cc0001,
- 0x82000500, 0x00ffffff, 0x82000d80, 0x00fffffe,
- 0x5c000000, 0x05020005, 0x801c0d80, 0x0502004c,
- 0x42000000, 0x00fffffe, 0x05ddfdf8, 0x05d40bc1,
- 0x05020047, 0x5930001d, 0x4c000000, 0x05d5fbb5,
- 0x4926601d, 0x5930000a, 0x4c000000, 0x59242c00,
- 0x8c14050a, 0x05020011, 0x81342d80, 0x05000002,
- 0x60102800, 0x58002403, 0x59340c03, 0x59341802,
- 0x820c1d00, 0x00ffffff, 0x60143000, 0x59cc4008,
- 0x59cc3809, 0x9c2041c0, 0x9c1c39c0, 0x611a8000,
- 0x41301000, 0x0501f911, 0x4936600a, 0x83440d80,
- 0x000007fe, 0x0502000f, 0x60683000, 0x0501fe6f,
- 0x42000000, 0x0010b2d3, 0x0505f813, 0x4d3c0000,
- 0x4d400000, 0x60a68000, 0x05c1fd4a, 0x602a7800,
- 0x05c1fd94, 0x5c028000, 0x5c027800, 0x0501f00e,
- 0x602c3000, 0x0501fe61, 0x42000000, 0x0010b2d3,
- 0x0505f805, 0x4d3c0000, 0x4d400000, 0x60a68000,
- 0x417a7800, 0x0201f800, 0x0010ee7a, 0x5c028000,
- 0x5c027800, 0x5c000000, 0x4802600a, 0x5c000000,
- 0x4802601d, 0x59cc0007, 0x83440d80, 0x000007fe,
- 0x05020005, 0x42000000, 0x00fffffe, 0x4a026c00,
- 0x00000707, 0x48026802, 0x80000580, 0x5c026800,
- 0x5c028800, 0x5c024800, 0x1c01f000, 0x4933c857,
- 0x4c040000, 0x59a80077, 0xb00005b4, 0x05020040,
+ 0x05dc07a0, 0x1c01f000, 0x598c000b, 0x81300580,
+ 0x05020003, 0x05e1faa7, 0x0502000e, 0x05ddfc4b,
+ 0x05fc07df, 0x05ddfebf, 0x0500000a, 0x05a1f86b,
+ 0x05f1fbc0, 0x05020003, 0x05e1fa6e, 0x05020005,
+ 0x05ddfb62, 0x05fc07d6, 0x05ddfeb6, 0x05a20863,
+ 0x59300203, 0x90000c91, 0x05a21860, 0x0c01f7bf,
+ 0x05a5facd, 0x05fdf7ce, 0x4933c857, 0x4d240000,
+ 0x4c5c0000, 0x4d440000, 0x4d340000, 0x4c580000,
+ 0x59cc3800, 0x821c3d00, 0x00ffffff, 0x59cc0007,
+ 0x4c000000, 0x59cc0001, 0x82000500, 0x00ffffff,
+ 0x82000d80, 0x00fffffe, 0x5c000000, 0x05020005,
+ 0x801c0d80, 0x05020054, 0x42000000, 0x00fffffe,
+ 0x05d5fb3a, 0x05c80ce4, 0x0502004f, 0x4178b800,
+ 0x91cc1408, 0x6008b000, 0x91341c06, 0x05edfaac,
+ 0x05000002, 0x6004b800, 0x5930001d, 0x4c000000,
+ 0x05c9fcd1, 0x4926601d, 0x5930000a, 0x4c000000,
+ 0x59242c00, 0x8c14050a, 0x05020011, 0x81342d80,
+ 0x05000002, 0x60102800, 0x58002403, 0x59340c03,
+ 0x59341802, 0x820c1d00, 0x00ffffff, 0x60143000,
+ 0x59cc4008, 0x59cc3809, 0x9c2041c0, 0x9c1c39c0,
+ 0x611a8000, 0x41301000, 0x0501f9f5, 0x8c5c0500,
+ 0x0502001f, 0x4936600a, 0x83440d80, 0x000007fe,
+ 0x0502000f, 0x60683000, 0x0501ffc5, 0x42000000,
+ 0x0010e451, 0x0505fa1b, 0x4d3c0000, 0x4d400000,
+ 0x60a68000, 0x05b1f852, 0x602a7800, 0x05b1f89e,
+ 0x5c028000, 0x5c027800, 0x0501f00d, 0x602c3000,
+ 0x0501ffb7, 0x42000000, 0x0010e451, 0x0505fa0d,
+ 0x4d3c0000, 0x4d400000, 0x60a68000, 0x417a7800,
+ 0x05adfd58, 0x5c028000, 0x5c027800, 0x5c000000,
+ 0x4802600a, 0x5c000000, 0x4802601d, 0x59cc0007,
+ 0x83440d80, 0x000007fe, 0x05020005, 0x42000000,
+ 0x00fffffe, 0x4a026c00, 0x00000707, 0x48026802,
+ 0x80000580, 0x5c00b000, 0x5c026800, 0x5c028800,
+ 0x5c00b800, 0x5c024800, 0x1c01f000, 0x4933c857,
+ 0x4c040000, 0x59a800b6, 0xb00005b4, 0x05020040,
0x59cc0a08, 0x82040480, 0x00000100, 0x05001033,
0x59cc0c08, 0x82040500, 0x00008000, 0x05000035,
- 0x59a80013, 0x80000540, 0x05020009, 0x5930100a,
+ 0x59a80041, 0x80000540, 0x05020009, 0x5930100a,
0x58080212, 0x82000500, 0x0000ff00, 0x05000004,
0x82040500, 0x00000800, 0x0500002a, 0x59cc0c09,
- 0x80040840, 0x05001024, 0x59a80a1b, 0x8c040506,
+ 0x80040840, 0x05001024, 0x59a80a49, 0x8c040506,
0x05000004, 0x59cc0c0f, 0x8c04051e, 0x05020012,
0x59cc0a17, 0x800409c0, 0x05020012, 0x59cc0a18,
0x82040480, 0x00000100, 0x05001014, 0x59cc0c18,
@@ -22730,573 +12724,715 @@ static const uint32_t isp_2500_multi_risc_code[] = {
0x1c01f000, 0x4933c857, 0x4c580000, 0x59cc000c,
0x59340802, 0x82040d00, 0x00ffffff, 0x80040580,
0x0502000a, 0x91cc1408, 0x6008b000, 0x91341c06,
- 0x05edff69, 0x05020005, 0x91cc140a, 0x6008b000,
- 0x91341c08, 0x05edff64, 0x5c00b000, 0x1c01f000,
+ 0x05edf9ff, 0x05020005, 0x91cc140a, 0x6008b000,
+ 0x91341c08, 0x05edf9fa, 0x5c00b000, 0x1c01f000,
0x4933c857, 0x4c580000, 0x91cc140b, 0x6008b000,
- 0x91341c06, 0x05edff5c, 0x05020008, 0x91cc140d,
- 0x6008b000, 0x91341c08, 0x05edff57, 0x05000014,
+ 0x91341c06, 0x05edf9f2, 0x05020008, 0x91cc140d,
+ 0x6008b000, 0x91341c08, 0x05edf9ed, 0x05000014,
0x4933c856, 0x4933c856, 0x4933c857, 0x59340009,
0x4803c857, 0x5934000e, 0x4803c857, 0x59340008,
0x4803c857, 0x5934000d, 0x4803c857, 0x59340007,
0x4803c857, 0x5934000c, 0x4803c857, 0x59340006,
0x4803c857, 0x5934000b, 0x4803c857, 0x5c00b000,
- 0x1c01f000, 0x4933c857, 0x813261c0, 0x05000025,
- 0x83300d80, 0x001104b4, 0x05000022, 0x8d3c0506,
- 0x05020020, 0x59300c07, 0x90040581, 0x05000008,
- 0x90040582, 0x0502001b, 0x59300229, 0x90000581,
- 0x05020018, 0x59300c18, 0x0501f002, 0x59300c03,
- 0x900405b9, 0x05000003, 0x900405b5, 0x05020011,
- 0x4d300000, 0x4d1c0000, 0x5932602a, 0x4933c857,
- 0x05f5fea0, 0x05b00ef2, 0x591c001e, 0x497a381e,
- 0x591c0c16, 0x84040d02, 0x48063c16, 0x5c023800,
- 0x5c026000, 0x81300580, 0x05b20ee9, 0x497a602a,
- 0x1c01f000, 0x5c000000, 0x4c000000, 0x4803c857,
- 0x4d3c0000, 0x60067800, 0x05d1fea5, 0x5c027800,
- 0x4c580000, 0x6008b000, 0x91a81c02, 0x91cc140b,
- 0x05edff0d, 0x5c00b000, 0x80000540, 0x1c01f000,
- 0x492fc857, 0x4943c857, 0x59a8000c, 0x812c0480,
- 0x0500100f, 0x59a8000a, 0x812c0480, 0x0502100c,
- 0x592c0000, 0x80005d40, 0x05000007, 0x497a5800,
- 0x49425a07, 0x4c2c0000, 0x0001fb5b, 0x5c025800,
- 0x05fdf7f8, 0x49425a07, 0x0001f35b, 0x1c01f000,
- 0x61fc21ff, 0x5930100a, 0x800811c0, 0x05000002,
- 0x58082403, 0x41301000, 0x0501f008, 0x40682800,
- 0x406c3000, 0x41781000, 0x41442000, 0x0501f003,
- 0x41781000, 0x61fc21ff, 0x5c000000, 0x4c000000,
- 0x4803c857, 0x480bc857, 0x4813c857, 0x492fc857,
- 0x4943c857, 0x4d2c0000, 0x4c040000, 0x4c080000,
- 0x4c0c0000, 0x4c100000, 0x4c140000, 0x4c180000,
- 0x4c1c0000, 0x4c200000, 0x05b5fa32, 0x05b00ea4,
- 0x5c004000, 0x5c003800, 0x5c003000, 0x5c002800,
- 0x5c002000, 0x5c001800, 0x5c001000, 0x5c000800,
- 0x4a025805, 0x0000010d, 0x800811c0, 0x05000019,
- 0x914005a9, 0x05020013, 0x90180582, 0x05000009,
- 0x90180583, 0x05000007, 0x90180588, 0x05000005,
- 0x90180586, 0x05000006, 0x90180589, 0x05020009,
- 0x4a02580a, 0xffffffff, 0x0501f007, 0x5808280a,
- 0x58140002, 0x82000500, 0x00ffffff, 0x48025813,
- 0x480a580a, 0x58080202, 0x48025c14, 0x0501f005,
- 0x4a02580a, 0xffffffff, 0x4a025c14, 0x0000ffff,
- 0xb1400586, 0x05000002, 0x41782800, 0x480e580d,
- 0x4806580e, 0x4822580f, 0x481e5810, 0x48165a08,
- 0x481a5c09, 0x49425a09, 0x48125a07, 0x82100580,
- 0x0000ffff, 0x05000011, 0x4d440000, 0x4d340000,
+ 0x1c01f000, 0x4933c857, 0x4947c857, 0x4943c857,
+ 0x4c600000, 0x05ddfe9e, 0x4df00000, 0x4d2c0000,
+ 0x4d300000, 0x4d340000, 0x4c580000, 0x0501f8d3,
+ 0x4130c000, 0x42026000, 0x00111b00, 0x59a8003b,
+ 0x8060c1c0, 0x05000005, 0x82601580, 0x00111a70,
+ 0x05000002, 0x80000040, 0x81640480, 0x05021092,
+ 0x40600000, 0x81300580, 0x0500008a, 0x0501fa1a,
+ 0x05020088, 0x812649c0, 0x05000004, 0x5930001d,
+ 0x81240580, 0x05020083, 0x5932680a, 0x05e5fb73,
+ 0x05000080, 0x59300407, 0x90000c92, 0x059e1f43,
+ 0x0c01f001, 0x0010c714, 0x0010c6ac, 0x0010c6ba,
+ 0x0010c6c4, 0x0010c6ac, 0x0010c6ba, 0x0010c6ec,
+ 0x0010c6f9, 0x0010c6ab, 0x0010c6ab, 0x0010c6ff,
+ 0x0010c6ab, 0x0010c6ab, 0x0010c6ab, 0x0010c6ab,
+ 0x0010c710, 0x0010c70a, 0x0010c708, 0x059dff2f,
+ 0x59300403, 0xb0000583, 0x05f40ca4, 0x0501ffa7,
+ 0x05f1ff0b, 0x05000005, 0x05f1ff18, 0x0502005d,
+ 0x05e9fc0f, 0x0501f05b, 0x05adfcbd, 0x05f1ff13,
+ 0x05e80c0b, 0x0501f057, 0x59325809, 0x05f1fe0e,
+ 0x05000054, 0x49425a0a, 0x497a5c0d, 0x0001fb82,
+ 0x59300229, 0x90000583, 0x05f00ee6, 0x0501f04d,
+ 0x05f9fa99, 0x59300008, 0x8c000500, 0x05000003,
+ 0x05a5f981, 0x0501f007, 0x59300203, 0x90000584,
+ 0x05a4097d, 0x59300203, 0x90000584, 0x05a4097a,
+ 0x59325809, 0x05f1fdf8, 0x0500003e, 0x592c0208,
+ 0x82000500, 0x000000ff, 0x90000594, 0x05f20ed1,
+ 0x05f5ffd9, 0x0005f9f3, 0x05d1fd2e, 0x4a025a08,
+ 0x00000103, 0x592c040c, 0x8c000512, 0x05000006,
+ 0x4d2c0000, 0x592c000d, 0x40025800, 0x05a1fab8,
+ 0x5c025800, 0x49425a0a, 0x497a580d, 0x0501fc4a,
+ 0x05f5fc75, 0x05f1ff3b, 0x0001fb82, 0x0501f025,
+ 0x59300203, 0x90000584, 0x05a4095b, 0x59325809,
+ 0x05f1fdd9, 0x0500001f, 0x49425a0a, 0x0501fc3e,
+ 0x05f5ffbd, 0x0005f9f3, 0x05f5fc67, 0x0001fb82,
+ 0x0501f018, 0x59300203, 0x90000591, 0x05020019,
+ 0x59300429, 0x48026203, 0x0501f016, 0x59300203,
+ 0x90000584, 0x05a40948, 0x59325809, 0x05f1fdc6,
+ 0x0500000c, 0x49425a0a, 0x0001fb82, 0x0501f009,
+ 0x59325819, 0x05a1fa92, 0x05a5ffff, 0x59325809,
+ 0x05f1fdbd, 0x05000003, 0x49425a0a, 0x0001fb82,
+ 0x05e5fcc0, 0x8d3c051c, 0x05000002, 0x497a600a,
+ 0x91326430, 0x41580000, 0x81300480, 0x05fc1771,
+ 0x0501f002, 0x41526000, 0x8d3c0518, 0x0500002b,
+ 0x59a80898, 0x59a80099, 0x80040480, 0x05000027,
+ 0x81300800, 0x41540000, 0x80040480, 0x05021023,
+ 0x5930000a, 0x800001c0, 0x05fe0765, 0x0001fb00,
+ 0x05fe07ec, 0x59340802, 0x82040d00, 0x00ffffff,
+ 0x5930002a, 0x80040580, 0x05fe07e6, 0x59340813,
+ 0x59301029, 0x80040582, 0x82000500, 0x00ffffff,
+ 0x0500000c, 0x0505f9bf, 0x42000800, 0x0010e512,
+ 0x58040005, 0x80080580, 0x82000500, 0x00ffffff,
+ 0x05fc07d8, 0x90040c0d, 0x8058b040, 0x05fe07f9,
+ 0x59300203, 0x90000588, 0x05020002, 0x0501fe69,
+ 0x4936600a, 0x05fdf74e, 0x5c00b000, 0x5c026800,
+ 0x5c026000, 0x5c025800, 0x5c03e000, 0x05dc0db9,
+ 0x5c00c000, 0x1c01f000, 0x4933c857, 0x813261c0,
+ 0x05000025, 0x83300d80, 0x00111a70, 0x05000022,
+ 0x8d3c0506, 0x05020020, 0x59300c07, 0x90040581,
+ 0x05000008, 0x90040582, 0x0502001b, 0x59300229,
+ 0x90000581, 0x05020018, 0x59300c18, 0x0501f002,
+ 0x59300c03, 0x900405b9, 0x05000003, 0x900405b5,
+ 0x05020011, 0x4d300000, 0x4d1c0000, 0x5932602a,
+ 0x4933c857, 0x05f5f9f9, 0x059c0e70, 0x591c001e,
+ 0x497a381e, 0x591c0c16, 0x84040d02, 0x48063c16,
+ 0x5c023800, 0x5c026000, 0x81300580, 0x059e0e67,
+ 0x497a602a, 0x1c01f000, 0x5c000000, 0x4c000000,
+ 0x4803c857, 0x4d3c0000, 0x60067800, 0x05c5fd68,
+ 0x5c027800, 0x4c580000, 0x6008b000, 0x5930181d,
+ 0x900c1c01, 0x91cc140b, 0x05edf8c5, 0x5c00b000,
+ 0x80000540, 0x1c01f000, 0x492fc857, 0x4943c857,
+ 0x59a8000c, 0x812c0480, 0x05001014, 0x59a8000a,
+ 0x812c0480, 0x05021011, 0x4d400000, 0x592c0000,
+ 0x80005d40, 0x0500000a, 0x497a5800, 0x49425a0a,
+ 0x4c2c0000, 0x0001fb82, 0x5c025800, 0x9140058c,
+ 0x05fe07f7, 0x60128000, 0x05fdf7f5, 0x49425a0a,
+ 0x5c028000, 0x0001f382, 0x1c01f000, 0x61fc21ff,
+ 0x5930100a, 0x800811c0, 0x05000002, 0x58082403,
+ 0x41301000, 0x0501f006, 0x41781000, 0x41442000,
+ 0x0501f003, 0x41781000, 0x61fc21ff, 0x5c000000,
+ 0x4c000000, 0x4803c857, 0x480bc857, 0x4813c857,
+ 0x492fc857, 0x4943c857, 0x4d2c0000, 0x4c040000,
+ 0x4c080000, 0x4c0c0000, 0x4c100000, 0x4c140000,
+ 0x4c180000, 0x4c1c0000, 0x4c200000, 0x05a1f9c7,
+ 0x059c0e1e, 0x5c004000, 0x5c003800, 0x5c003000,
+ 0x5c002800, 0x5c002000, 0x5c001800, 0x5c001000,
+ 0x5c000800, 0x05011000, 0x912c0408, 0x4803c840,
+ 0x6443c842, 0x40000000, 0x05fd17ff, 0x4a025808,
+ 0x0000010d, 0x800811c0, 0x05000019, 0x914005a9,
+ 0x05020013, 0x90180582, 0x05000009, 0x90180583,
+ 0x05000007, 0x90180588, 0x05000005, 0x90180586,
+ 0x05000006, 0x90180589, 0x05020009, 0x4a02580d,
+ 0xffffffff, 0x0501f007, 0x5808280a, 0x58140002,
+ 0x82000500, 0x00ffffff, 0x48025816, 0x480a580d,
+ 0x58080202, 0x48025c17, 0x0501f005, 0x4a02580d,
+ 0xffffffff, 0x4a025c17, 0x0000ffff, 0xb1400586,
+ 0x05000002, 0x41782800, 0x480e5810, 0x48065811,
+ 0x48225812, 0x481e5813, 0x481a5c0c, 0xb1400586,
+ 0x05020007, 0x901805a0, 0x05020005, 0x59a80249,
+ 0x8c000508, 0x05000002, 0x84142d46, 0x49425a0c,
+ 0x48125a0a, 0x82100580, 0x0000ffff, 0x05000026,
+ 0x4d440000, 0x4d340000, 0x4c140000, 0x4c180000,
0x40128800, 0x83440480, 0x000007f0, 0x05001003,
- 0x05d5fa48, 0x0501f002, 0x0001fae7, 0x05b20e64,
- 0x59340002, 0x82000500, 0x00ffffff, 0x48025813,
- 0x5c026800, 0x5c028800, 0x497a5800, 0x497a5c05,
- 0x812000d0, 0x48025c11, 0x0501fc5e, 0x5c025800,
+ 0x05c9fa71, 0x0501f002, 0x0001fb00, 0x059e0dcf,
+ 0x59340002, 0x82000500, 0x00ffffff, 0x48025816,
+ 0x5c003000, 0x5c002800, 0xb1400586, 0x05020010,
+ 0x901805a0, 0x0502000e, 0x84142d48, 0x59344006,
+ 0x59343807, 0x59341808, 0x59340809, 0x9c2041c0,
+ 0x9c1c39c0, 0x9c0c19c0, 0x9c0409c0, 0x480e580e,
+ 0x4806580f, 0x48225812, 0x481e5813, 0x5c026800,
+ 0x5c028800, 0x48165a0b, 0x497a5800, 0x497a5c08,
+ 0x812000d0, 0x48025c14, 0x0501fcaf, 0x5c025800,
0x1c01f000, 0x5c000000, 0x4c000000, 0x4803c857,
0x480bc857, 0x480fc857, 0x4813c857, 0x4817c857,
0x4d2c0000, 0x4c080000, 0x4c0c0000, 0x4c100000,
- 0x4c140000, 0x05b5f9d7, 0x05b00e49, 0x5c002800,
+ 0x4c140000, 0x05a1f949, 0x059c0da0, 0x5c002800,
0x5c002000, 0x5c001800, 0x5c001000, 0x05011000,
- 0x912c0405, 0x4803c840, 0x6443c842, 0x40000000,
- 0x05fd17ff, 0x4a025805, 0x0000010d, 0x65265a09,
- 0x480a5a0b, 0x480e5c0b, 0x48125a0c, 0x48165c0c,
+ 0x912c0408, 0x4803c840, 0x6443c842, 0x40000000,
+ 0x05fd17ff, 0x4a025808, 0x0000010d, 0x65265a0c,
+ 0x480a5a0e, 0x480e5c0e, 0x48125a0f, 0x48165c0f,
0x82080580, 0x00008014, 0x05020054, 0x820c0580,
0x0000ffff, 0x05020051, 0x90100586, 0x0502004f,
- 0x4d240000, 0x42024800, 0x0010b391, 0x59240005,
- 0x5c024800, 0x05d5ff6d, 0x05000009, 0x82000d00,
- 0x00ffff00, 0x05020006, 0x82000c00, 0x001020b6,
- 0x50040800, 0x80040910, 0x48065a0d, 0x82000d00,
- 0x0000ffff, 0x48065c0d, 0x80000120, 0x48025a0e,
- 0x59a8021b, 0x82001500, 0x00003500, 0x480a5a0f,
+ 0x4d240000, 0x42024800, 0x0010e512, 0x59240005,
+ 0x5c024800, 0x05cdf855, 0x05000009, 0x82000d00,
+ 0x00ffff00, 0x05020006, 0x82000c00, 0x00102853,
+ 0x50040800, 0x80040910, 0x48065a10, 0x82000d00,
+ 0x0000ffff, 0x48065c10, 0x80000120, 0x48025a11,
+ 0x59a80249, 0x82001500, 0x00003500, 0x480a5a12,
0x8c000502, 0x05000016, 0x8c000506, 0x05000006,
- 0x90000d0a, 0x90040d8a, 0x05020003, 0x64065c0e,
+ 0x90000d0a, 0x90040d8a, 0x05020003, 0x64065c11,
0x0501f018, 0x8c00050a, 0x05000006, 0x90000d22,
- 0x90040da2, 0x05020003, 0x640e5c0e, 0x0501f011,
+ 0x90040da2, 0x05020003, 0x640e5c11, 0x0501f011,
0x8c000508, 0x05000006, 0x90000d12, 0x90040d92,
- 0x05020003, 0x640a5c0e, 0x0501f00a, 0x05d5ff43,
- 0x05020003, 0x64125c0e, 0x0501f006, 0x8c000506,
- 0x05000003, 0x64165c0e, 0x0501f002, 0x64025c0e,
- 0x59a8002e, 0x48025c0f, 0x59a8002f, 0x48025a10,
+ 0x05020003, 0x640a5c11, 0x0501f00a, 0x05cdf82b,
+ 0x05020003, 0x64125c11, 0x0501f006, 0x8c000506,
+ 0x05000003, 0x64165c11, 0x0501f002, 0x64025c11,
+ 0x59a8005c, 0x48025c12, 0x59a8005d, 0x48025a13,
0x59c40801, 0x82040d00, 0x00018000, 0x90040580,
- 0x05020003, 0x64025c10, 0x0501f00c, 0x82040580,
- 0x00008000, 0x05020003, 0x64065c10, 0x0501f007,
- 0x82040580, 0x00010000, 0x05020003, 0x640e5c10,
- 0x0501f002, 0x64125c10, 0x0501fbe6, 0x5c025800,
- 0x1c01f000, 0x0501f805, 0x60058800, 0x05000002,
- 0x60018800, 0x1c01f000, 0x5930080a, 0x800409c0,
- 0x05000004, 0x58040403, 0x81440580, 0x1c01f000,
- 0x90000541, 0x05fdf7fe, 0x4933c857, 0xb13805a1,
- 0x05000003, 0xb13805a0, 0x0502000c, 0x5932680a,
- 0x59340200, 0x8c00050e, 0x05020002, 0x497a6205,
- 0x5930001c, 0x80000540, 0x0004045a, 0x497a601c,
- 0x0801f800, 0x1c01f000, 0x1c01f000, 0x4933c857,
- 0xb13805a1, 0x05000003, 0xb13805a0, 0x05ea02fd,
- 0x59303403, 0x82180580, 0x00000086, 0x05e80290,
- 0x82180580, 0x00000087, 0x05e8028d, 0x497a6205,
- 0x642a6203, 0x1c01f000, 0x4933c857, 0xb13805a1,
- 0x05000003, 0xb13805a0, 0x05020008, 0x59300c03,
- 0x4807c857, 0xb004048a, 0x05b21da9, 0xb0040481,
- 0x05b01da7, 0x0c01f002, 0x1c01f000, 0x00109c58,
- 0x00109c55, 0x00109c65, 0x00109c54, 0x00109c54,
- 0x00109c54, 0x00109c54, 0x00109c54, 0x00109c65,
- 0x05b1fd9b, 0x497a6205, 0x64126203, 0x1c01f000,
- 0x497a6205, 0x59325809, 0x832c0500, 0x00ff0000,
- 0x05000004, 0x592c0c0b, 0x8c04051a, 0x05020003,
- 0x0005faec, 0x0005f45a, 0x0501f999, 0x05fc07fd,
- 0x1c01f000, 0x497a6205, 0x59cc0002, 0x90000530,
- 0x90000590, 0x05f4039e, 0x5930001c, 0x80000540,
+ 0x05020003, 0x64025c13, 0x0501f00c, 0x82040580,
+ 0x00008000, 0x05020003, 0x64065c13, 0x0501f007,
+ 0x82040580, 0x00010000, 0x05020003, 0x640e5c13,
+ 0x0501f002, 0x64125c13, 0x0501fc37, 0x5c025800,
+ 0x1c01f000, 0x5930080a, 0x800409c0, 0x05000004,
+ 0x58040403, 0x81440580, 0x1c01f000, 0x90000541,
+ 0x05fdf7fe, 0x4933c857, 0xb13805a1, 0x05000003,
+ 0xb13805a0, 0x0502000c, 0x5932680a, 0x59340200,
+ 0x8c00050e, 0x05020002, 0x497a6205, 0x5930001c,
+ 0x80000540, 0x000407dc, 0x497a601c, 0x0801f800,
+ 0x1c01f000, 0x1c01f000, 0x4933c857, 0xb13805a1,
+ 0x05000003, 0xb13805a0, 0x05e60372, 0x59303403,
+ 0x82180580, 0x00000086, 0x05e4030a, 0x82180580,
+ 0x00000087, 0x05e40307, 0x497a6205, 0x642a6203,
+ 0x1c01f000, 0x4933c857, 0xb13805a1, 0x05000003,
+ 0xb13805a0, 0x05020008, 0x59300c03, 0x4807c857,
+ 0xb004048a, 0x059e1d05, 0xb0040481, 0x059c1d03,
+ 0x0c01f002, 0x1c01f000, 0x0010c8e7, 0x0010c8e4,
+ 0x0010c8f4, 0x0010c8e3, 0x0010c8e3, 0x0010c8e3,
+ 0x0010c8e3, 0x0010c8e3, 0x0010c8f4, 0x059dfcf7,
+ 0x497a6205, 0x64126203, 0x1c01f000, 0x497a6205,
+ 0x59325809, 0x832c0500, 0x00ff0000, 0x05000004,
+ 0x592c0c0e, 0x8c04051a, 0x05020003, 0x0005fe4e,
+ 0x0005f7dc, 0x0501f99f, 0x05fc07fd, 0x1c01f000,
+ 0x497a6205, 0x59cc0002, 0x90000530, 0x90000590,
+ 0x05f006dc, 0x5930001c, 0x80000540, 0x05000004,
+ 0x497a601c, 0x0801f800, 0x1c01f000, 0x1c01f000,
+ 0x4933c857, 0x493bc857, 0xb13805a1, 0x05000006,
+ 0xb13805a0, 0x05e6032f, 0x59cc0002, 0x8c000526,
+ 0x0500000c, 0x59300403, 0x4803c857, 0xb0000589,
+ 0x059e0cce, 0x497a6205, 0x5930001c, 0x80000540,
0x05000004, 0x497a601c, 0x0801f800, 0x1c01f000,
- 0x1c01f000, 0x4933c857, 0x493bc857, 0xb13805a1,
- 0x05000006, 0xb13805a0, 0x05ea02ba, 0x59cc0002,
- 0x8c000526, 0x0500000c, 0x59300403, 0x4803c857,
- 0xb0000589, 0x05b20d72, 0x497a6205, 0x5930001c,
- 0x80000540, 0x05000004, 0x497a601c, 0x0801f800,
- 0x1c01f000, 0x1c01f000, 0x4933c857, 0x59300403,
- 0x82000d80, 0x00000085, 0x05020007, 0x4a026403,
- 0x0000008b, 0x642e6203, 0x42000800, 0x80000040,
- 0x0005f32e, 0x82000d80, 0x0000008b, 0x05020026,
- 0x4d3c0000, 0x417a7800, 0x0201f800, 0x0010ee7a,
- 0x5c027800, 0x42000000, 0x0010b2d6, 0x0501fdaa,
- 0x59325809, 0x812e59c0, 0x05000006, 0x832c0500,
- 0x00ff0000, 0x05000003, 0x60128000, 0x05fdfe75,
- 0x60443000, 0x0501fbf9, 0x05c1fada, 0x59240400,
- 0x8c00050a, 0x0502000a, 0x41782800, 0x60103000,
- 0x60a68000, 0x05fdfe7f, 0x6406642c, 0x64126407,
- 0x64066403, 0x641e6203, 0x1c01f000, 0x602c0800,
- 0x05d1fd0a, 0x64066407, 0x64066403, 0x64066203,
- 0x05e1f32c, 0x1c01f000, 0x4933c857, 0x40000000,
- 0x40000000, 0x1c01f000, 0x4933c857, 0x59300a03,
- 0x9004058e, 0x05000003, 0x90040590, 0x05020019,
- 0x0501f96e, 0x05f1fc80, 0x59300203, 0x90000d89,
- 0x0500000b, 0x48026429, 0x4a026403, 0x00000085,
- 0x59300416, 0x8400055a, 0x8400055e, 0x48026416,
- 0x64266203, 0x64166407, 0x641a6229, 0x5932680a,
- 0x59340200, 0x8c00050e, 0x05020003, 0x59a8002f,
- 0x48026006, 0x42000800, 0x80000040, 0x0005fb2e,
- 0x1c01f000, 0x4933c857, 0x4c040000, 0x59300403,
- 0x90000d9e, 0x05020012, 0x800000d0, 0x59300a18,
- 0x82040d00, 0x000000ff, 0x80040540, 0x4803c857,
- 0x48026418, 0x4a026403, 0x00000085, 0x64266203,
- 0x64166407, 0x64126229, 0x59a8002f, 0x48026006,
- 0x42000800, 0x80000040, 0x0005fb2e, 0x5c000800,
- 0x1c01f000, 0x4933c857, 0x40000000, 0x40000000,
- 0x1c01f000, 0x59300416, 0x4933c857, 0x4803c857,
- 0x8c000518, 0x05000006, 0x8c000512, 0x05f60246,
- 0x0501f932, 0x0005faec, 0x0005fc5a, 0x1c01f000,
+ 0x1c01f000, 0x4933c857, 0x59300403, 0x82000d80,
+ 0x00000085, 0x05020007, 0x4a026403, 0x0000008b,
+ 0x642e6203, 0x42000800, 0x80000040, 0x0005f6ab,
+ 0x82000d80, 0x0000008b, 0x05020025, 0x4d3c0000,
+ 0x417a7800, 0x05adfa07, 0x5c027800, 0x42000000,
+ 0x0010e454, 0x0501feb3, 0x59325809, 0x812e59c0,
+ 0x05000006, 0x832c0500, 0x00ff0000, 0x05000003,
+ 0x60128000, 0x05fdfe55, 0x60443000, 0x0501fc50,
+ 0x05adfce3, 0x59240400, 0x8c00050a, 0x0502000a,
+ 0x41782800, 0x60103000, 0x60a68000, 0x05fdfe64,
+ 0x6406642c, 0x64126407, 0x64066403, 0x641e6203,
+ 0x1c01f000, 0x602c0800, 0x05c5fbab, 0x64066407,
+ 0x64066403, 0x64066203, 0x05d9f72b, 0x1c01f000,
+ 0x4933c857, 0x40000000, 0x40000000, 0x1c01f000,
+ 0x4933c857, 0x59300a03, 0x9004058e, 0x05000003,
+ 0x90040590, 0x05020019, 0x0501f975, 0x05edfeb9,
+ 0x59300203, 0x90000d89, 0x0500000b, 0x48026429,
+ 0x4a026403, 0x00000085, 0x59300416, 0x8400055a,
+ 0x8400055e, 0x48026416, 0x64266203, 0x64166407,
+ 0x641a6229, 0x5932680a, 0x59340200, 0x8c00050e,
+ 0x05020003, 0x59a8005d, 0x48026006, 0x42000800,
+ 0x80000040, 0x0005feab, 0x1c01f000, 0x4933c857,
+ 0x4c040000, 0x59300403, 0x90000d9e, 0x05020012,
+ 0x800000d0, 0x59300a18, 0x82040d00, 0x000000ff,
+ 0x80040540, 0x4803c857, 0x48026418, 0x4a026403,
+ 0x00000085, 0x64266203, 0x64166407, 0x64126229,
+ 0x59a8005d, 0x48026006, 0x42000800, 0x80000040,
+ 0x0005feab, 0x5c000800, 0x1c01f000, 0x4933c857,
+ 0x40000000, 0x40000000, 0x1c01f000, 0x59300416,
+ 0x8c00050c, 0x0502000a, 0x4933c857, 0x4803c857,
+ 0x8c000518, 0x05000006, 0x8c000512, 0x05f20586,
+ 0x0501f937, 0x0005fe4e, 0x0005ffdc, 0x1c01f000,
0x591c0407, 0x4803c857, 0x90000c89, 0x0502100b,
- 0x0c01f001, 0x00109d12, 0x00109d12, 0x00109d12,
- 0x00109d14, 0x00109d12, 0x00109d14, 0x00109d14,
- 0x00109d12, 0x00109d14, 0x80000580, 0x1c01f000,
+ 0x0c01f001, 0x0010c9a2, 0x0010c9a2, 0x0010c9a2,
+ 0x0010c9a4, 0x0010c9a2, 0x0010c9a4, 0x0010c9a4,
+ 0x0010c9a2, 0x0010c9a4, 0x80000580, 0x1c01f000,
0x90000541, 0x1c01f000, 0x591c0407, 0x9000051f,
0x90000586, 0x0500000a, 0x4803c857, 0x64ee6403,
0x6426641c, 0x4a02621c, 0x00002a00, 0x64066203,
- 0x42000800, 0x80000040, 0x0005f32e, 0x4803c856,
+ 0x42000800, 0x80000040, 0x0005f6ab, 0x4803c856,
0x4c040000, 0x4c140000, 0x4d300000, 0x411e6000,
- 0x0501f90a, 0x497a6205, 0x59300416, 0x4803c857,
+ 0x0501f90f, 0x497a6205, 0x59300416, 0x4803c857,
0x82000500, 0xffffadff, 0x48026416, 0x497a6405,
- 0x5c026000, 0x05b5f84b, 0x05b00cbd, 0x5c002800,
- 0x5c000800, 0x4a025805, 0x0000010d, 0x497a5800,
- 0x497a5c05, 0x65165a09, 0x491e580a, 0x59300402,
- 0x48025c08, 0x5930041b, 0x48025c0c, 0x591c0416,
- 0x84000556, 0x48023c16, 0x591c180a, 0x580c0403,
- 0x48025a07, 0x580c0002, 0x82000500, 0x00ffffff,
- 0x48025813, 0x59cc0404, 0x48025c14, 0x497a5a08,
- 0x4816580b, 0x48065a0c, 0x580c0013, 0x82000500,
- 0xff000000, 0x80000120, 0x48025c11, 0x0501faa1,
- 0x493a6403, 0x4d400000, 0x61168000, 0x591c0202,
- 0x4c000000, 0x4d300000, 0x411e6000, 0x05fdfc45,
- 0x5c026000, 0x5c000000, 0x48023a02, 0x5c028000,
- 0x491e602a, 0x4932381e, 0x641a3c07, 0x641e3a03,
- 0x497a3806, 0x497a3a05, 0x1c01f000, 0x4933c857,
- 0x91380593, 0x0502000a, 0x59300403, 0x4803c857,
- 0x82000d80, 0x00000085, 0x05000026, 0x82000d80,
- 0x0000008b, 0x05000023, 0x05b1fc7d, 0x913805a7,
- 0x0502000a, 0x05e1fb1f, 0x4d2c0000, 0x4d400000,
- 0x59325809, 0x60128000, 0x05fdfd9e, 0x5c028000,
- 0x5c025800, 0x1c01f000, 0x91380594, 0x05fc07f6,
- 0xb13805a1, 0x05000009, 0xb13805a0, 0x05000007,
- 0x83380580, 0x00000089, 0x05000004, 0x83380580,
- 0x0000008a, 0x05ea01a7, 0x05e1ff6d, 0x05ea01a5,
- 0x59300a03, 0x9004058e, 0x05fc06a1, 0x9004058a,
- 0x0500000c, 0x9004058c, 0x0500000a, 0x05b1fc5c,
- 0x05f5fb3d, 0x05000005, 0x643a6203, 0x59a80030,
- 0x48026205, 0x1c01f000, 0x642a6203, 0x1c01f000,
- 0x83380480, 0x00000093, 0x0502100b, 0x83380480,
- 0x00000085, 0x05001008, 0x83380580, 0x00000089,
- 0x05000008, 0x83380580, 0x0000008a, 0x05000031,
- 0x05b1fc47, 0x493bc857, 0x4933c857, 0x05e9f185,
- 0x4933c857, 0x4c340000, 0x05f5fb23, 0x0500000b,
- 0x59300416, 0x8c00051a, 0x05000008, 0x641a6407,
- 0x59300429, 0x90000d8e, 0x05020002, 0x60080000,
- 0x48026203, 0x0501f01d, 0x59300c16, 0x4c040000,
- 0x41306800, 0x05e9f940, 0x5c000800, 0x05000015,
- 0x48066416, 0x64066203, 0x647a6403, 0x59cc0c07,
- 0x4806641b, 0x59cc0a07, 0x4806621b, 0x5834080a,
- 0x4806600a, 0x5834081d, 0x4806601d, 0x05f5fb06,
- 0x05000004, 0x59300416, 0x84000550, 0x48026416,
- 0x64126407, 0x42000800, 0x80000040, 0x0005fb2e,
- 0x40366000, 0x0005fc5a, 0x5c006800, 0x1c01f000,
- 0x4933c857, 0x59300416, 0x8c00051a, 0x0502001a,
- 0x59300418, 0x82000d00, 0x0000ff00, 0x900409c0,
- 0x9004059e, 0x05020014, 0x4c340000, 0x41306800,
- 0x05e9f919, 0x0500000e, 0x493a6403, 0x64066203,
- 0x64126407, 0x5834041b, 0x4802641b, 0x5834021b,
- 0x4802621b, 0x5834080a, 0x4806600a, 0x5834081d,
- 0x4806601d, 0x05f5fad1, 0x05e1f9f2, 0x40366000,
- 0x5c006800, 0x0005f45a, 0x5930080a, 0x58040200,
- 0x8c00051a, 0x05b20cb4, 0x1c01f000, 0x05d1feaf,
- 0x05000019, 0x640a6203, 0x59300416, 0x84000558,
- 0x48026416, 0x8c000512, 0x05000004, 0x59a80030,
- 0x48026205, 0x0501f006, 0x59a80830, 0x59a8002e,
- 0x80040400, 0x9000041e, 0x48026205, 0x5930000a,
- 0x90000c11, 0x50040000, 0x80000540, 0x05000003,
- 0x90000c00, 0x05fdf7fc, 0x45300800, 0x497a6000,
- 0x90000541, 0x1c01f000, 0x82100500, 0xfffffeef,
- 0x05020017, 0x4d2c0000, 0x4937c857, 0x59340811,
- 0x91341411, 0x800409c0, 0x0500000c, 0x40040000,
- 0x81300580, 0x05000004, 0x90041400, 0x58040800,
- 0x05fdf7f9, 0x59300800, 0x497a6000, 0x44041000,
- 0x0005faec, 0x0501f002, 0x4933c857, 0x5c025800,
- 0x492e6009, 0x0005faec, 0x0005f45a, 0x492fc857,
- 0x641a5a07, 0x0001f35b, 0x4c340000, 0x5930000a,
- 0x800001c0, 0x0500000f, 0x90006c11, 0x50340000,
+ 0x5c026000, 0x059dffc1, 0x059c0c18, 0x5c002800,
+ 0x5c000800, 0x05011000, 0x912c0408, 0x4803c840,
+ 0x6443c842, 0x40000000, 0x05fd17ff, 0x4a025808,
+ 0x0000010d, 0x497a5800, 0x65165a0c, 0x491e580d,
+ 0x59300402, 0x48025c0b, 0x5930041b, 0x48025c0f,
+ 0x591c0416, 0x84000556, 0x48023c16, 0x591c180a,
+ 0x580c0403, 0x48025a0a, 0x580c0002, 0x82000500,
+ 0x00ffffff, 0x48025816, 0x59cc0404, 0x48025c17,
+ 0x497a5a0b, 0x4816580e, 0x48065a0f, 0x580c0013,
+ 0x82000500, 0xff000000, 0x80000120, 0x48025c14,
+ 0x0501faf1, 0x493a6403, 0x4d400000, 0x61168000,
+ 0x591c0202, 0x4c000000, 0x4d300000, 0x411e6000,
+ 0x05fdfb31, 0x5c026000, 0x5c000000, 0x48023a02,
+ 0x5c028000, 0x491e602a, 0x4932381e, 0x641a3c07,
+ 0x641e3a03, 0x497a3806, 0x497a3a05, 0x1c01f000,
+ 0x4933c857, 0x91380593, 0x0502000a, 0x59300403,
+ 0x4803c857, 0x82000d80, 0x00000085, 0x05000026,
+ 0x82000d80, 0x0000008b, 0x05000023, 0x059dfbd3,
+ 0x913805a7, 0x0502000a, 0x05ddfa5f, 0x4d2c0000,
+ 0x4d400000, 0x59325809, 0x60128000, 0x05fdfd77,
+ 0x5c028000, 0x5c025800, 0x1c01f000, 0x91380594,
+ 0x05fc07f6, 0xb13805a1, 0x05000009, 0xb13805a0,
+ 0x05000007, 0x83380580, 0x00000089, 0x05000004,
+ 0x83380580, 0x0000008a, 0x05e60216, 0x05ddfe9a,
+ 0x05e60214, 0x59300a03, 0x9004058e, 0x05fc069b,
+ 0x9004058a, 0x0500000c, 0x9004058c, 0x0500000a,
+ 0x059dfbb2, 0x05f1fe75, 0x05000005, 0x643a6203,
+ 0x59a8005e, 0x48026205, 0x1c01f000, 0x642a6203,
+ 0x1c01f000, 0x83380480, 0x00000093, 0x0502100b,
+ 0x83380480, 0x00000085, 0x05001008, 0x83380580,
+ 0x00000089, 0x05000008, 0x83380580, 0x0000008a,
+ 0x05000031, 0x059dfb9d, 0x493bc857, 0x4933c857,
+ 0x05e5f1f4, 0x4933c857, 0x4c340000, 0x05f1fe5b,
+ 0x0500000b, 0x59300416, 0x8c00051a, 0x05000008,
+ 0x641a6407, 0x59300429, 0x90000d8e, 0x05020002,
+ 0x60080000, 0x48026203, 0x0501f01d, 0x59300c16,
+ 0x4c040000, 0x41306800, 0x05e5f9b1, 0x5c000800,
+ 0x05000015, 0x48066416, 0x64066203, 0x647a6403,
+ 0x59cc0c07, 0x4806641b, 0x59cc0a07, 0x4806621b,
+ 0x5834080a, 0x4806600a, 0x5834081d, 0x4806601d,
+ 0x05f1fe3e, 0x05000004, 0x59300416, 0x84000550,
+ 0x48026416, 0x64126407, 0x42000800, 0x80000040,
+ 0x0005feab, 0x40366000, 0x0005ffdc, 0x5c006800,
+ 0x1c01f000, 0x4933c857, 0x59300416, 0x8c00051a,
+ 0x0502001a, 0x59300418, 0x82000d00, 0x0000ff00,
+ 0x900409c0, 0x9004059e, 0x05020014, 0x4c340000,
+ 0x41306800, 0x05e5f98a, 0x0500000e, 0x493a6403,
+ 0x64066203, 0x64126407, 0x5834041b, 0x4802641b,
+ 0x5834021b, 0x4802621b, 0x5834080a, 0x4806600a,
+ 0x5834081d, 0x4806601d, 0x05f1fe09, 0x05d9fdea,
+ 0x40366000, 0x5c006800, 0x0005f7dc, 0x5930080a,
+ 0x58040200, 0x8c00051a, 0x059e0c13, 0x1c01f000,
+ 0x05c5fe2e, 0x05000019, 0x640a6203, 0x59300416,
+ 0x84000558, 0x48026416, 0x8c000512, 0x05000004,
+ 0x59a8005e, 0x48026205, 0x0501f006, 0x59a8085e,
+ 0x59a8005c, 0x80040400, 0x9000041e, 0x48026205,
+ 0x5930000a, 0x90000c11, 0x50040000, 0x80000540,
+ 0x05000003, 0x90000c00, 0x05fdf7fc, 0x45300800,
+ 0x497a6000, 0x90000541, 0x1c01f000, 0x82100500,
+ 0xfffffeef, 0x05020017, 0x4d2c0000, 0x4937c857,
+ 0x59340811, 0x91341411, 0x800409c0, 0x0500000c,
+ 0x40040000, 0x81300580, 0x05000004, 0x90041400,
+ 0x58040800, 0x05fdf7f9, 0x59300800, 0x497a6000,
+ 0x44041000, 0x0005fe4e, 0x0501f002, 0x4933c857,
+ 0x5c025800, 0x492e6009, 0x0005fe4e, 0x0005f7dc,
+ 0x492fc857, 0x641a5a0a, 0x0001f382, 0x4c340000,
+ 0x5930000a, 0x800001c0, 0x0500000f, 0x90006c11,
+ 0x50340000, 0x80000540, 0x05000009, 0x81300580,
+ 0x05000004, 0x50340000, 0x90006c00, 0x05fdf7f9,
+ 0x59300000, 0x44006800, 0x497a6000, 0x5c006800,
+ 0x1c01f000, 0x59300c07, 0x90040585, 0x05fc07fc,
+ 0x90040591, 0x05fc07fa, 0x90040586, 0x05fc07f8,
+ 0x90040581, 0x05fc07f6, 0x059dfaf8, 0x4c340000,
+ 0x0501f81a, 0x0502000f, 0x90006c11, 0x50340000,
0x80000540, 0x05000009, 0x81300580, 0x05000004,
0x50340000, 0x90006c00, 0x05fdf7f9, 0x59300000,
0x44006800, 0x497a6000, 0x5c006800, 0x1c01f000,
0x59300c07, 0x90040585, 0x05fc07fc, 0x90040591,
0x05fc07fa, 0x90040586, 0x05fc07f8, 0x90040581,
- 0x05fc07f6, 0x05b1fba2, 0x4933c857, 0x4c080000,
- 0x4c0c0000, 0x4c580000, 0x59a81018, 0x59cc1807,
- 0x820c1d00, 0x00ffffff, 0x800c0110, 0x80083580,
- 0x0502000c, 0x91cc1408, 0x6008b000, 0x5930000a,
- 0x90001c06, 0x05edfbc4, 0x05020006, 0x91cc140a,
- 0x6008b000, 0x5930000a, 0x90001c08, 0x05edfbbe,
- 0x5c00b000, 0x5c001800, 0x5c001000, 0x1c01f000,
- 0x4933c856, 0x493a6403, 0x05d1f88d, 0x05bdf7b0,
- 0x4933c857, 0x492fc857, 0x5930080a, 0x58040200,
- 0x8c00051e, 0x05000004, 0x592c0209, 0x84000558,
- 0x48025a09, 0x1c01f000, 0x59e0180f, 0x599c0413,
- 0x800c1000, 0x80080580, 0x05020002, 0x41781000,
- 0x59e00010, 0x59e00810, 0x80040d80, 0x05fe07fd,
- 0x80080580, 0x05000009, 0x4c080000, 0x599c0814,
+ 0x05fc07f6, 0x059dfadd, 0x4c5c0000, 0x4c600000,
+ 0x5930000a, 0x800001c0, 0x0500000c, 0x5800bc03,
+ 0x825cbc00, 0x0010d400, 0x505cb800, 0x805cb9c0,
+ 0x05000006, 0x805cc580, 0x05020004, 0x5c00c000,
+ 0x5c00b800, 0x1c01f000, 0x4933c857, 0x4803c857,
+ 0x485fc857, 0x905cbd41, 0x05fdf7f9, 0x4933c857,
+ 0x4c080000, 0x4c0c0000, 0x4c580000, 0x59a81046,
+ 0x59cc1807, 0x820c1d00, 0x00ffffff, 0x800c0110,
+ 0x80083580, 0x0502000c, 0x91cc1408, 0x6008b000,
+ 0x5930000a, 0x90001c06, 0x05e9fd25, 0x05020006,
+ 0x91cc140a, 0x6008b000, 0x5930000a, 0x90001c08,
+ 0x05e9fd1f, 0x5c00b000, 0x5c001800, 0x5c001000,
+ 0x1c01f000, 0x4933c856, 0x493a6403, 0x05c1feaa,
+ 0x05adf195, 0x4933c857, 0x492fc857, 0x5930080a,
+ 0x58040200, 0x8c00051e, 0x05000004, 0x592c020c,
+ 0x84000558, 0x48025a0c, 0x1c01f000, 0x59e0180f,
+ 0x599c0413, 0x800c1000, 0x80080580, 0x05020002,
+ 0x41781000, 0x59e00010, 0x59e00810, 0x80040d80,
+ 0x05fe07fd, 0x80080580, 0x05000018, 0x4c080000,
+ 0x80102040, 0x0500000e, 0x599c0413, 0x80081000,
+ 0x80080580, 0x05020002, 0x41781000, 0x59e00010,
+ 0x59e00810, 0x80040d80, 0x05fe07fd, 0x80080580,
+ 0x05fe07f4, 0x5c001000, 0x0501f008, 0x599c0814,
0x599c1015, 0x800c00cc, 0x80040c00, 0x90081440,
0x5c001800, 0x90000541, 0x4803c857, 0x1c01f000,
0x59300203, 0x4933c857, 0x4937c857, 0x493bc857,
- 0x4803c857, 0x90003491, 0x05b21b5d, 0x0c01f001,
- 0x00109ea5, 0x00109f90, 0x00109ea5, 0x00109ea5,
- 0x00109ea5, 0x00109ea5, 0x00109ea5, 0x00109f0f,
- 0x00109ea6, 0x00109ea5, 0x00109ea5, 0x00109ea5,
- 0x00109ea5, 0x00109ea5, 0x00109fe6, 0x00109ea5,
- 0x00109ea5, 0x05b1fb4a, 0xb138058c, 0x05b20b48,
- 0x05d1fe13, 0x05020021, 0x59a80a1b, 0x5932481d,
+ 0x4803c857, 0x90003491, 0x059e1a74, 0x0c01f001,
+ 0x0010cb79, 0x0010cc6e, 0x0010cb79, 0x0010cb79,
+ 0x0010cb79, 0x0010cb79, 0x0010cb79, 0x0010cbe2,
+ 0x0010cb7a, 0x0010cb79, 0x0010cb79, 0x0010cb79,
+ 0x0010cb79, 0x0010cb79, 0x0010cccb, 0x0010cb79,
+ 0x0010cb79, 0x059dfa61, 0xb138058c, 0x059e0a5f,
+ 0x05c5fd4e, 0x05020020, 0x59a80a49, 0x5932481d,
0x59240200, 0x82000500, 0x000000e0, 0x82000580,
- 0x00000080, 0x05000019, 0x8c040512, 0x05000029,
+ 0x00000080, 0x05000018, 0x8c040512, 0x05000028,
0x59cc0806, 0x82040d00, 0xff000000, 0x82040580,
- 0x03000000, 0x0500001d, 0x82040580, 0x50000000,
- 0x05000004, 0x82040580, 0x52000000, 0x0006045a,
- 0x83340580, 0x0010ce8f, 0x05000006, 0x4d3c0000,
- 0x417a7800, 0x0201f800, 0x0010ee7a, 0x5c027800,
- 0x64066403, 0x0501f010, 0x59cc0806, 0x82040d00,
- 0xff000000, 0x82040580, 0x03000000, 0x05000007,
- 0x82040580, 0x50000000, 0x05000004, 0x82040580,
- 0x52000000, 0x0006045a, 0x64266403, 0x6426641c,
- 0x6402621c, 0x64126407, 0x64066203, 0x05e1f109,
- 0x59240400, 0x8c00050a, 0x05020020, 0x0501fcb1,
- 0x0502001e, 0x59cc0806, 0x4807c857, 0x82040d00,
- 0xff000000, 0x82040580, 0x03000000, 0x05000013,
- 0x82040580, 0x20000000, 0x05000010, 0x82040580,
- 0x21000000, 0x0500000d, 0x82040580, 0x24000000,
- 0x0500000a, 0x82040580, 0x50000000, 0x05000007,
- 0x82040580, 0x52000000, 0x05000004, 0x82040580,
- 0x05000000, 0x05020007, 0x9c0431c0, 0x611a8000,
- 0x60042800, 0x05fdfc2f, 0x0501f901, 0x05b00af0,
- 0x61442000, 0x05e9f929, 0x59cc0000, 0x82000500,
- 0x00ffffff, 0x82000580, 0x00ffffff, 0x05000004,
- 0x641e6203, 0x493a6403, 0x1c01f000, 0x59325819,
- 0x812e59c0, 0x05b20e88, 0x0005f45a, 0x4d2c0000,
- 0x4c580000, 0x4c500000, 0x4c540000, 0x41385000,
- 0xb1380594, 0x05b20ada, 0x59325809, 0x592c0c0c,
+ 0x03000000, 0x0500001c, 0x82040580, 0x50000000,
+ 0x05000004, 0x82040580, 0x52000000, 0x000607dc,
+ 0x83340580, 0x00110210, 0x05000005, 0x4d3c0000,
+ 0x417a7800, 0x05a9ff93, 0x5c027800, 0x64066403,
+ 0x0501f010, 0x59cc0806, 0x82040d00, 0xff000000,
+ 0x82040580, 0x03000000, 0x05000007, 0x82040580,
+ 0x50000000, 0x05000004, 0x82040580, 0x52000000,
+ 0x000607dc, 0x64266403, 0x6426641c, 0x6402621c,
+ 0x64126407, 0x64066203, 0x05d9f4c3, 0x59240400,
+ 0x8c00050a, 0x05020020, 0x0501fd7e, 0x0502001e,
+ 0x59cc0806, 0x4807c857, 0x82040d00, 0xff000000,
+ 0x82040580, 0x03000000, 0x05000013, 0x82040580,
+ 0x20000000, 0x05000010, 0x82040580, 0x21000000,
+ 0x0500000d, 0x82040580, 0x24000000, 0x0500000a,
+ 0x82040580, 0x50000000, 0x05000007, 0x82040580,
+ 0x52000000, 0x05000004, 0x82040580, 0x05000000,
+ 0x05020007, 0x9c0431c0, 0x611a8000, 0x60042800,
+ 0x05fdfbcf, 0x0501f913, 0x059c0a08, 0x61442000,
+ 0x05e5f959, 0x59cc0000, 0x82000500, 0x00ffffff,
+ 0x82000580, 0x00ffffff, 0x05000004, 0x641e6203,
+ 0x493a6403, 0x1c01f000, 0x59325819, 0x812e59c0,
+ 0x059e0dbb, 0x0005f7dc, 0x4d2c0000, 0x4c580000,
+ 0x4c500000, 0x4c540000, 0x4dcc0000, 0x41385000,
+ 0xb13805a0, 0x0500007f, 0xb13805a1, 0x0500007d,
+ 0xb1380594, 0x059e09ed, 0x59325809, 0x592c0c0f,
0x82040d00, 0x0000e000, 0x82040580, 0x00002000,
- 0x05020061, 0x59300819, 0x800409c0, 0x05000010,
- 0x58041405, 0x41cca800, 0x9004a406, 0x90080490,
- 0x05021004, 0x4008b000, 0x0501fbea, 0x0501f008,
- 0x40001000, 0x603cb000, 0x0501fbe6, 0x58040801,
- 0x800409c0, 0x05fe07f5, 0x05b1fac1, 0x83340580,
- 0x0010ce8f, 0x0500004c, 0x59344c00, 0x592c0c0a,
- 0x4807c857, 0x4827c857, 0x82040d00, 0x000000ff,
- 0x90040583, 0x0500001d, 0x90040585, 0x05000021,
- 0x900405a0, 0x0500002c, 0xb0040592, 0x05000036,
- 0xb0040590, 0x05000036, 0x900405a1, 0x05000003,
- 0x900405a4, 0x05020038, 0x82240500, 0x0000ff00,
- 0x82000580, 0x00000700, 0x05000005, 0x60240800,
- 0x05d1fa72, 0x60305000, 0x0501f02f, 0x64c65a07,
- 0x6426580e, 0x59340400, 0x4802580f, 0x0001fb5b,
- 0x05e5ff73, 0x0501f036, 0x41780800, 0x05d1fb53,
- 0x600c0800, 0x05d1fa65, 0x60205000, 0x0501f022,
- 0x59cc3800, 0x821c3d00, 0x00ffffff, 0x4c1c0000,
- 0x05c1f832, 0x5c003800, 0x0502001b, 0x59cc0007,
- 0x05ddfc99, 0x05020018, 0x4a026c00, 0x00000707,
- 0x0501f015, 0x82240500, 0x0000ff00, 0x82000580,
- 0x00000700, 0x05fc07e2, 0x82240500, 0x000000ff,
- 0x90000589, 0x05fc07de, 0x05d1fbad, 0x60285000,
- 0x0501f009, 0x60385000, 0x0501f002, 0x60405000,
- 0x82240500, 0x0000ff00, 0x82000580, 0x00000700,
- 0x05fc07d3, 0x482a6403, 0x64066203, 0x592c000e,
- 0x48026013, 0x497a6015, 0x59a8002f, 0x48026006,
- 0x417a7800, 0x05e1f85f, 0x59325819, 0x812e59c0,
- 0x05000003, 0x05b1fe0c, 0x497a6019, 0x5c00a800,
- 0x5c00a000, 0x5c00b000, 0x5c025800, 0x1c01f000,
- 0x4d2c0000, 0x59325809, 0x91380593, 0x05020031,
- 0x492fc857, 0x59300c03, 0xb0040594, 0x05000023,
- 0x90040590, 0x0500001e, 0x9004058e, 0x0500001c,
- 0x59341400, 0x82081d00, 0x0000ff00, 0x82081500,
- 0x000000ff, 0x90040588, 0x0500000d, 0x9004058c,
- 0x0500000d, 0x9004058a, 0x05b20a49, 0x820c0580,
- 0x00000700, 0x05000011, 0x90080589, 0x0500000f,
- 0x60180800, 0x05d1fa11, 0x0501f00c, 0x600c0000,
- 0x0501f002, 0x60240000, 0x80080580, 0x05020007,
- 0x60100800, 0x05d1fa09, 0x0501f004, 0x59340200,
- 0x8400051a, 0x48026a00, 0x05f5f917, 0x05000005,
- 0x59a80030, 0x48026006, 0x643a6203, 0x0501f025,
- 0x64025a07, 0x0001fb5b, 0x0005fc5a, 0x0501f021,
- 0xb13805a1, 0x05000003, 0xb13805a0, 0x05020008,
- 0x5c025800, 0x05e1fd2e, 0x05e60766, 0x59300203,
- 0x9000058e, 0x05000019, 0x05b1fa21, 0x913805a7,
- 0x05000009, 0x91380594, 0x05b20a1d, 0x492fc857,
- 0x05e1f8c0, 0x60c68000, 0x60100800, 0x61fc1001,
- 0x0501f006, 0x492fc857, 0x05e1f8ba, 0x60c68000,
- 0x60100800, 0x60401000, 0x49425a07, 0x4806580e,
- 0x480a580f, 0x0001fb5b, 0x05d1ffd6, 0x05e5fee4,
- 0x5c025800, 0x1c01f000, 0x4933c857, 0xb13805a1,
- 0x05000003, 0xb13805a0, 0x05020009, 0x4d2c0000,
- 0x59325809, 0x812e59c0, 0x05000003, 0x64025a07,
- 0x0001fb5b, 0x0005fc5a, 0x5c025800, 0x1c01f000,
- 0x492fc857, 0x42007000, 0x00020d9f, 0x58380806,
- 0x492c7006, 0x800409c0, 0x05020003, 0x492c7007,
- 0x0001f02b, 0x492c0800, 0x1c01f000, 0x4d2c0000,
- 0x4c580000, 0x4c500000, 0x4c540000, 0x4933c857,
- 0x4937c857, 0x59cc0806, 0x4807c857, 0x82040d00,
- 0xff000000, 0x82040580, 0x03000000, 0x0500000d,
- 0x82040580, 0x05000000, 0x0500000a, 0x82040580,
- 0x21000000, 0x05000027, 0x82040580, 0x24000000,
- 0x05000024, 0x82040580, 0x20000000, 0x05020025,
- 0x05b1fd64, 0x05000023, 0x492fc857, 0x492e6019,
- 0x59a8b077, 0x9058b41b, 0x8258b500, 0xfffffffc,
- 0x8058b104, 0x485a5c05, 0x412c7800, 0x41cca000,
- 0x90580490, 0x05021004, 0x912cac06, 0x0501fae9,
- 0x0501f010, 0x40580800, 0x603cb000, 0x912cac06,
- 0x0501fae4, 0x9004b48f, 0x05b1fd4e, 0x05000004,
- 0x492c7801, 0x412c7800, 0x05fdf7f2, 0x59325819,
- 0x05b1fd61, 0x497a6019, 0x80000580, 0x0501f005,
- 0x59340200, 0x84000554, 0x48026a00, 0x90000541,
- 0x5c00a800, 0x5c00a000, 0x5c00b000, 0x5c025800,
- 0x1c01f000, 0x4933c857, 0x492fc857, 0x4d2c0000,
- 0x59300a03, 0x90040587, 0x0500002e, 0x9004058e,
- 0x05000028, 0x90040581, 0x05b209a5, 0x05e1f8f4,
- 0x4df00000, 0x598c000b, 0x81300580, 0x05020014,
- 0x59300004, 0x8c000520, 0x05000004, 0x84000520,
- 0x48026004, 0x0501f014, 0x42001000, 0x0010b20e,
- 0x50081000, 0x58080002, 0x82000580, 0x00000100,
- 0x05000005, 0x5808000b, 0x81300580, 0x05b20990,
- 0x0501f009, 0x05e1fbed, 0x05020019, 0x59300004,
- 0x8c000520, 0x05000004, 0x84000520, 0x48026004,
- 0x0501f004, 0x0201f800, 0x0010f0f2, 0x80c40040,
- 0x5c03e000, 0x05e008be, 0x05f1fc85, 0x05b00980,
- 0x59325809, 0x64165a07, 0x0001fb5b, 0x05d1ff45,
- 0x59325819, 0x812e59c0, 0x05b20d1f, 0x05e5fe50,
- 0x80000580, 0x5c025800, 0x1c01f000, 0x5c03e000,
- 0x05e008af, 0x59300c07, 0x90040591, 0x05fc07c5,
- 0x05fdf7f9, 0x4c040000, 0x59340200, 0x4803c857,
- 0x8c00051c, 0x05000009, 0x59cc0805, 0x591c001b,
- 0x4803c857, 0x80040580, 0x05000004, 0x80000580,
- 0x4803c856, 0x0501f002, 0x90000541, 0x5c000800,
- 0x1c01f000, 0x4c000000, 0x4c0c0000, 0x4c100000,
- 0x61fc19ff, 0x60102000, 0x0501f010, 0x4c000000,
- 0x4c0c0000, 0x4c100000, 0x5930200a, 0x58101c03,
- 0x60102000, 0x0501f009, 0x4c000000, 0x4c0c0000,
- 0x4c100000, 0x5930200a, 0x801021c0, 0x05b0094c,
- 0x58101c03, 0x601c2000, 0x480fc857, 0x4813c857,
- 0x481bc857, 0x05bdfed7, 0x05c9fd95, 0x5c002000,
- 0x5c001800, 0x5c000000, 0x1c01f000, 0x8d0c0520,
- 0x05000009, 0x4d400000, 0x4d200000, 0x61fe4001,
- 0x850e1d44, 0x60aa8000, 0x05fdfa82, 0x5c024000,
- 0x5c028000, 0x1c01f000, 0x59a8021b, 0x8c000508,
- 0x05000005, 0x599c0017, 0x8c00050a, 0x05020002,
- 0x1c01f000, 0x90000541, 0x1c01f000, 0x5930042c,
- 0x84000540, 0x4802642c, 0x1c01f000, 0x4c640000,
- 0x05f5f8af, 0x59300203, 0x90000588, 0x05020010,
- 0x60c8c800, 0x42000000, 0x20000000, 0x41300800,
- 0x05b1fffe, 0x0500000a, 0x59300203, 0x90000588,
- 0x05020007, 0x60780000, 0x80000040, 0x05fe07ff,
- 0x8064c840, 0x05fe07f4, 0x05b1f915, 0x05f5f8a7,
- 0x5c00c800, 0x1c01f000, 0x05b1fc9e, 0x05b00910,
- 0x59340403, 0x49265802, 0x49365803, 0x65565a05,
- 0x48025c07, 0x4a025c08, 0x00001000, 0x05f1ffea,
- 0x05000003, 0x4a025c08, 0x00003000, 0x59340802,
- 0x82040d00, 0x00ffffff, 0x59300403, 0x82000580,
- 0x00000086, 0x42000000, 0x85000000, 0x05020003,
- 0x42000000, 0x84000000, 0x80040540, 0x4802580a,
- 0x59240005, 0x4802580b, 0x42000000, 0x00990000,
- 0x59300c07, 0x90040d85, 0x05000002, 0x8400052e,
- 0x59300c16, 0x8c04051a, 0x05000002, 0x84000528,
- 0x4802580c, 0x497a580d, 0x59cc0004, 0x4802580e,
- 0x497a580f, 0x42000800, 0x00030300, 0x59300403,
- 0x82000580, 0x00000086, 0x05020006, 0x59cc0004,
- 0x48025811, 0x4a025812, 0x0000ffff, 0x41780800,
- 0x48065810, 0x1c01f000, 0x492fc857, 0x59a82867,
- 0x801429c0, 0x05000057, 0x4c5c0000, 0x4c600000,
- 0x4c640000, 0x4d2c0000, 0x4d300000, 0x42026000,
- 0x00110484, 0x592c0c07, 0x592c100a, 0x82081500,
- 0x00ffffff, 0x592c180b, 0x592c200e, 0x40165800,
- 0x4014c000, 0x4014c800, 0x592c0205, 0x82000580,
- 0x00000155, 0x05020037, 0x592c0407, 0x80040580,
- 0x05020034, 0x592c000a, 0x82000500, 0x00ffffff,
- 0x80080580, 0x0502002f, 0x592c000b, 0x82000500,
- 0x00ffffff, 0x800c0580, 0x0502002a, 0x592c000e,
- 0x80100580, 0x05020027, 0x4c040000, 0x4c080000,
- 0x4c0c0000, 0x4c100000, 0x40640000, 0x812c0580,
- 0x05020016, 0x59300203, 0x90000580, 0x0500000f,
- 0x59300009, 0x800001c0, 0x0500000c, 0x05ddfff4,
- 0x4df00000, 0x05ddfef1, 0x0201f800, 0x0010f0c0,
- 0x80c40040, 0x05020002, 0x64026203, 0x5c03e000,
- 0x05dc0fd7, 0x497a6009, 0x592cc800, 0x4064c000,
- 0x4064b800, 0x0501f003, 0x592cb800, 0x485cc000,
- 0x64165a07, 0x0001fb5b, 0x405e5800, 0x5c002000,
- 0x5c001800, 0x5c001000, 0x5c000800, 0x0501f003,
- 0x412cc000, 0x592e5800, 0x812e59c0, 0x05fe07c3,
- 0x48675067, 0x48635068, 0x05e5fcd8, 0x5c026000,
- 0x5c025800, 0x5c00c800, 0x5c00c000, 0x5c00b800,
- 0x1c01f000, 0x602c0800, 0x0501f004, 0x60100800,
- 0x0501f002, 0x60040800, 0x4d2c0000, 0x59325809,
- 0x812e59c0, 0x0500000f, 0x592c0205, 0x82000500,
- 0x000000ff, 0x9000058e, 0x0502000a, 0x592c0000,
- 0x48026009, 0x497a5800, 0x48065a09, 0x05d9fb29,
- 0x05000003, 0x05fdfe6f, 0x0501f002, 0x0001fb5b,
- 0x5c025800, 0x1c01f000, 0x4817c857, 0x4c000000,
- 0x4c040000, 0x8c14052a, 0x05000004, 0x5988011e,
- 0x80000000, 0x4803111e, 0x8c14052e, 0x05000004,
- 0x5988011f, 0x80000000, 0x4803111f, 0x8c14052c,
+ 0x05020066, 0x59300819, 0x800409c0, 0x05000015,
+ 0x58041408, 0x42039800, 0x00111772, 0x9008049c,
+ 0x05001002, 0x606c1000, 0x41cca800, 0x9004a409,
+ 0x90080490, 0x05021004, 0x4008b000, 0x0501fca4,
+ 0x0501f008, 0x80001000, 0x603cb000, 0x0501fca0,
+ 0x58040801, 0x800409c0, 0x05fe07f5, 0x059df9cf,
+ 0x83340580, 0x00110210, 0x0500004c, 0x59344c00,
+ 0x592c0c0d, 0x4807c857, 0x4827c857, 0x82040d00,
+ 0x000000ff, 0x90040583, 0x0500001d, 0x90040585,
+ 0x05000021, 0x900405a0, 0x0500002c, 0xb0040592,
+ 0x05000036, 0xb0040590, 0x05000036, 0x900405a1,
+ 0x05000003, 0x900405a4, 0x05020038, 0x82240500,
+ 0x0000ff00, 0x82000580, 0x00000700, 0x05000005,
+ 0x60240800, 0x05c5f8c4, 0x60305000, 0x0501f02f,
+ 0x64c65a0a, 0x64265811, 0x59340400, 0x48025812,
+ 0x0001fb82, 0x05e1ff9f, 0x0501f036, 0x41780800,
+ 0x05c5f9a2, 0x600c0800, 0x05c5f8b7, 0x60205000,
+ 0x0501f022, 0x59cc3800, 0x821c3d00, 0x00ffffff,
+ 0x4c1c0000, 0x05adf9eb, 0x5c003800, 0x0502001b,
+ 0x59cc0007, 0x05d5f947, 0x05020018, 0x4a026c00,
+ 0x00000707, 0x0501f015, 0x82240500, 0x0000ff00,
+ 0x82000580, 0x00000700, 0x05fc07e2, 0x82240500,
+ 0x000000ff, 0x90000589, 0x05fc07de, 0x05c5f9fc,
+ 0x60285000, 0x0501f009, 0x60385000, 0x0501f002,
+ 0x60405000, 0x82240500, 0x0000ff00, 0x82000580,
+ 0x00000700, 0x05fc07d3, 0x482a6403, 0x64066203,
+ 0x592c0011, 0x48026013, 0x497a6015, 0x59a8005d,
+ 0x48026006, 0x417a7800, 0x05d9fc0f, 0x59325819,
+ 0x812e59c0, 0x05000003, 0x059dfd35, 0x497a6019,
+ 0x5c039800, 0x5c00a800, 0x5c00a000, 0x5c00b000,
+ 0x5c025800, 0x1c01f000, 0x4d2c0000, 0x59325809,
+ 0x91380593, 0x05020038, 0x492fc857, 0x59300c03,
+ 0xb0040594, 0x0500002a, 0x90040590, 0x05000025,
+ 0x9004058e, 0x05000023, 0x59341400, 0x82081d00,
+ 0x0000ff00, 0x82081500, 0x000000ff, 0x90040588,
+ 0x0500000d, 0x9004058c, 0x05000014, 0x9004058a,
+ 0x059e0956, 0x820c0580, 0x00000700, 0x05000018,
+ 0x90080589, 0x05000016, 0x60180800, 0x05c5f862,
+ 0x0501f013, 0x592c0c0f, 0x8c040514, 0x05000005,
+ 0x90080583, 0x0502000e, 0x05c5fa00, 0x05fdf7f7,
+ 0x600c0000, 0x0501f002, 0x60240000, 0x80080580,
+ 0x05020007, 0x60100800, 0x05c5f853, 0x0501f004,
+ 0x59340200, 0x8400051a, 0x48026a00, 0x05f1fbff,
+ 0x05000005, 0x59a8005e, 0x48026006, 0x643a6203,
+ 0x0501f025, 0x64025a0a, 0x0001fb82, 0x0005ffdc,
+ 0x0501f021, 0xb13805a1, 0x05000003, 0xb13805a0,
+ 0x05020008, 0x5c025800, 0x05ddfc0b, 0x05e20785,
+ 0x59300203, 0x9000058e, 0x05000019, 0x059df927,
+ 0x913805a7, 0x05000009, 0x91380594, 0x059e0923,
+ 0x492fc857, 0x05d9ffb0, 0x60c68000, 0x60100800,
+ 0x61fc1001, 0x0501f006, 0x492fc857, 0x05d9ffaa,
+ 0x60c68000, 0x60100800, 0x60401000, 0x49425a0a,
+ 0x48065811, 0x480a5812, 0x0001fb82, 0x05c5ffa9,
+ 0x05e1ff08, 0x5c025800, 0x1c01f000, 0x4933c857,
+ 0xb13805a1, 0x05000003, 0xb13805a0, 0x05020009,
+ 0x4d2c0000, 0x59325809, 0x812e59c0, 0x05000003,
+ 0x64025a0a, 0x0001fb82, 0x0005ffdc, 0x5c025800,
+ 0x1c01f000, 0x492fc857, 0x42007000, 0x000211a7,
+ 0x58380806, 0x492c7006, 0x800409c0, 0x05020003,
+ 0x492c7007, 0x0001f030, 0x492c0800, 0x1c01f000,
+ 0x4d2c0000, 0x4c580000, 0x4c500000, 0x4c540000,
+ 0x4933c857, 0x4937c857, 0x59cc0806, 0x4807c857,
+ 0x82040d00, 0xff000000, 0x82040580, 0x03000000,
+ 0x0500000d, 0x82040580, 0x05000000, 0x0500000a,
+ 0x82040580, 0x21000000, 0x05000027, 0x82040580,
+ 0x24000000, 0x05000024, 0x82040580, 0x20000000,
+ 0x05020025, 0x059dfc85, 0x05000023, 0x492fc857,
+ 0x492e6019, 0x59a8b0b6, 0x9058b41b, 0x8258b500,
+ 0xfffffffc, 0x8058b104, 0x485a5c08, 0x412c7800,
+ 0x41cca000, 0x90580490, 0x05021004, 0x912cac09,
+ 0x0501fb9b, 0x0501f010, 0x40580800, 0x603cb000,
+ 0x912cac09, 0x0501fb96, 0x9004b48f, 0x059dfc6f,
+ 0x05000004, 0x492c7801, 0x412c7800, 0x05fdf7f2,
+ 0x59325819, 0x059dfc82, 0x497a6019, 0x80000580,
+ 0x0501f005, 0x59340200, 0x84000554, 0x48026a00,
+ 0x90000541, 0x5c00a800, 0x5c00a000, 0x5c00b000,
+ 0x5c025800, 0x1c01f000, 0x4933c857, 0x492fc857,
+ 0x4d2c0000, 0x59300a03, 0x90040587, 0x05020006,
+ 0x59325819, 0x812e59c0, 0x059e0c6d, 0x0005ffdc,
+ 0x0501f02d, 0x9004058e, 0x05000023, 0x90040581,
+ 0x059e08a6, 0x05d9ffde, 0x4df00000, 0x598c000b,
+ 0x81300580, 0x05020010, 0x59300004, 0x8c000520,
+ 0x05000004, 0x84000520, 0x48026004, 0x0501f011,
+ 0x42001000, 0x0010e387, 0x50081000, 0x58080002,
+ 0x82000580, 0x00000100, 0x05020009, 0x05ddfac9,
+ 0x05020018, 0x59300004, 0x8c000520, 0x05000005,
+ 0x84000520, 0x48026004, 0x0501f003, 0x05a5f9ba,
+ 0x05d9fc66, 0x5c03e000, 0x05d80fb2, 0x05edff76,
+ 0x059c0886, 0x59325809, 0x64165a0a, 0x0001fb82,
+ 0x05c5ff18, 0x59325819, 0x812e59c0, 0x059e0c40,
+ 0x05e1fe74, 0x80000580, 0x5c025800, 0x1c01f000,
+ 0x5c03e000, 0x05d80fa3, 0x59300c07, 0x90040591,
+ 0x05fc07c5, 0x05fdf7f9, 0x4c040000, 0x59340200,
+ 0x4803c857, 0x8c00051c, 0x05000009, 0x59cc0805,
+ 0x591c001b, 0x4803c857, 0x80040580, 0x05000004,
+ 0x80000580, 0x4803c856, 0x0501f002, 0x90000541,
+ 0x5c000800, 0x1c01f000, 0x4c000000, 0x4c0c0000,
+ 0x4c100000, 0x61fc19ff, 0x60102000, 0x0501f010,
+ 0x4c000000, 0x4c0c0000, 0x4c100000, 0x5930200a,
+ 0x58101c03, 0x60102000, 0x0501f009, 0x4c000000,
+ 0x4c0c0000, 0x4c100000, 0x5930200a, 0x801021c0,
+ 0x059c0852, 0x58101c03, 0x601c2000, 0x480fc857,
+ 0x4813c857, 0x481bc857, 0x05adf889, 0x05bdfab9,
+ 0x5c002000, 0x5c001800, 0x5c000000, 0x1c01f000,
+ 0x8d0c0520, 0x05000009, 0x4d400000, 0x4d200000,
+ 0x61fe4001, 0x850e1d44, 0x60aa8000, 0x05fdfa0e,
+ 0x5c024000, 0x5c028000, 0x1c01f000, 0x59a80249,
+ 0x8c000508, 0x05000005, 0x599c0017, 0x8c00050a,
+ 0x05020002, 0x1c01f000, 0x90000541, 0x1c01f000,
+ 0x5930042c, 0x84000540, 0x4802642c, 0x1c01f000,
+ 0x4c640000, 0x05f1fb95, 0x59300203, 0x90000588,
+ 0x05020010, 0x60c8c800, 0x42000000, 0x20000000,
+ 0x41300800, 0x059dff7d, 0x0500000a, 0x59300203,
+ 0x90000588, 0x05020007, 0x60780000, 0x80000040,
+ 0x05fe07ff, 0x8064c840, 0x05fe07f4, 0x059df81b,
+ 0x05f1fb8d, 0x5c00c800, 0x1c01f000, 0x059dfbbf,
+ 0x059c0816, 0x59340403, 0x49265805, 0x49365806,
+ 0x65565a08, 0x48025c0a, 0x4a025c0b, 0x00001000,
+ 0x05f1fad2, 0x05000003, 0x4a025c0b, 0x00003000,
+ 0x59340802, 0x82040d00, 0x00ffffff, 0x59300403,
+ 0x82000580, 0x00000086, 0x42000000, 0x85000000,
+ 0x05020003, 0x42000000, 0x84000000, 0x80040540,
+ 0x4802580d, 0x59240005, 0x4802580e, 0x42000000,
+ 0x00990000, 0x59300c07, 0x90040d85, 0x05000002,
+ 0x8400052e, 0x59300c16, 0x8c04051a, 0x05000002,
+ 0x84000528, 0x4802580f, 0x497a5810, 0x59cc0004,
+ 0x48025811, 0x497a5812, 0x42000800, 0x00030300,
+ 0x59300403, 0x82000580, 0x00000086, 0x05020006,
+ 0x59cc0004, 0x48025814, 0x4a025815, 0x0000ffff,
+ 0x41780800, 0x48065813, 0x1c01f000, 0x492fc857,
+ 0x59a8289d, 0x801429c0, 0x05000055, 0x4c5c0000,
+ 0x4c600000, 0x4c640000, 0x4d2c0000, 0x4d300000,
+ 0x42026000, 0x00111a40, 0x592c0c0a, 0x592c100d,
+ 0x82081500, 0x00ffffff, 0x592c180e, 0x592c2011,
+ 0x40165800, 0x4014c000, 0x4014c800, 0x592c0208,
+ 0x82000580, 0x00000155, 0x05020035, 0x592c040a,
+ 0x80040580, 0x05020032, 0x592c000d, 0x82000500,
+ 0x00ffffff, 0x80080580, 0x0502002d, 0x592c000e,
+ 0x82000500, 0x00ffffff, 0x800c0580, 0x05020028,
+ 0x592c0011, 0x80100580, 0x05020025, 0x4c040000,
+ 0x4c080000, 0x4c0c0000, 0x4c100000, 0x40640000,
+ 0x812c0580, 0x05020014, 0x59300203, 0x90000580,
+ 0x0500000d, 0x59300009, 0x800001c0, 0x0500000a,
+ 0x05d9fee3, 0x4df00000, 0x05d9fde4, 0x05d9fbad,
+ 0x05020002, 0x64026203, 0x5c03e000, 0x05d80ecd,
+ 0x497a6009, 0x592cc800, 0x4064c000, 0x4064b800,
+ 0x0501f003, 0x592cb800, 0x485cc000, 0x64165a0a,
+ 0x0001fb82, 0x405e5800, 0x5c002000, 0x5c001800,
+ 0x5c001000, 0x5c000800, 0x0501f003, 0x412cc000,
+ 0x592e5800, 0x812e59c0, 0x05fe07c5, 0x4867509d,
+ 0x4863509e, 0x05e1fc7b, 0x5c026000, 0x5c025800,
+ 0x5c00c800, 0x5c00c000, 0x5c00b800, 0x1c01f000,
+ 0x602c0800, 0x0501f004, 0x60100800, 0x0501f002,
+ 0x60040800, 0x4d2c0000, 0x59325809, 0x812e59c0,
+ 0x0500000f, 0x592c0208, 0x82000500, 0x000000ff,
+ 0x9000058e, 0x0502000a, 0x592c0000, 0x48026009,
+ 0x497a5800, 0x48065a0c, 0x05cdfd9c, 0x05000003,
+ 0x05fdfe71, 0x0501f002, 0x0001fb82, 0x5c025800,
+ 0x1c01f000, 0x4d2c0000, 0x4803c856, 0x0501f83b,
+ 0x05020038, 0x91380595, 0x05020027, 0x59a800b6,
+ 0x90000594, 0x05020022, 0x59cc0c07, 0x82040580,
+ 0x00000102, 0x05020029, 0x59cc0a07, 0x5930021b,
+ 0x80040580, 0x05020027, 0x59cc0a0a, 0x90040594,
+ 0x05020026, 0x916c0583, 0x05020002, 0x05adf86c,
+ 0x05edfe45, 0x0500000d, 0x59325809, 0x59a80ccd,
+ 0x48065a0b, 0x59a808cf, 0x4806580f, 0x64025a0a,
+ 0x59a804cc, 0x90000503, 0x90000583, 0x05000002,
+ 0x64ca5a0a, 0x0001fb82, 0x59a804cc, 0x8400050c,
+ 0x480354cc, 0x4803c857, 0x0005ffdc, 0x5c025800,
+ 0x1c01f000, 0x4803c856, 0x05edfe2f, 0x05fc07f7,
+ 0x59325809, 0x64c65a0a, 0x64625810, 0x59cc0007,
+ 0x48025811, 0x05fdf7f0, 0x4807c857, 0x05fdf7f4,
+ 0x4807c857, 0x05fdf7f2, 0x4807c857, 0x05fdf7f0,
+ 0x4803c857, 0x05fdf7ee, 0x59300403, 0xb0000d9a,
+ 0x05000004, 0xb0000d9b, 0x05000002, 0xb0000d9c,
+ 0x1c01f000, 0x4933c857, 0x4867c857, 0x485fc857,
+ 0x4863c857, 0x4c500000, 0x4c540000, 0x4c580000,
+ 0x4d3c0000, 0x59327c1b, 0x5924100b, 0x82081500,
+ 0x00001fff, 0x405c0000, 0x80080580, 0x0500002b,
+ 0x480bc857, 0x4d400000, 0x4d3c0000, 0x4c080000,
+ 0x60aa8000, 0x600a7800, 0x41780800, 0x05adf87b,
+ 0x5c001000, 0x5c027800, 0x5c028000, 0x59a802cc,
+ 0x40000800, 0x82000540, 0x0f000000, 0x4802480b,
+ 0x853e7d40, 0x4c580000, 0x0501fa22, 0x42001800,
+ 0x0010e51f, 0x8058b040, 0x05000013, 0x580c200b,
+ 0x82100500, 0x00001fff, 0x80080580, 0x0502000c,
+ 0x580c0200, 0x82000500, 0x00008001, 0x82000580,
+ 0x00008001, 0x05000006, 0x82102500, 0xffffe000,
+ 0x80100541, 0x4800180b, 0x4803c857, 0x900c1c0d,
+ 0x05fdf7ed, 0x5c00b000, 0x6000b001, 0x4060a000,
+ 0x4200a800, 0x00110672, 0x50500000, 0x50540800,
+ 0x80040580, 0x05000002, 0x853e7d42, 0x5450a800,
+ 0x8050a000, 0x8054a800, 0x8058b040, 0x05fe07f7,
+ 0x59a800cf, 0x80640580, 0x0500001f, 0x59a814cc,
+ 0x480bc857, 0x90081503, 0x90081583, 0x05020009,
+ 0x90640582, 0x05000018, 0x90640583, 0x05020011,
+ 0x59a800ce, 0x90000582, 0x05000013, 0x0501f00d,
+ 0x90640581, 0x05000010, 0x90640582, 0x05020005,
+ 0x59a800ce, 0x90000582, 0x0502000b, 0x0501f008,
+ 0x59a800ce, 0x90000581, 0x05000007, 0x0501f004,
+ 0x4803c856, 0x853e7d46, 0x0501f003, 0x4803c856,
+ 0x853e7d44, 0x4867c857, 0x493fc857, 0x486750cf,
+ 0x493e641b, 0x5c027800, 0x5c00b000, 0x5c00a800,
+ 0x5c00a000, 0x1c01f000, 0x4817c857, 0x4c000000,
+ 0x4c040000, 0x8c14052a, 0x05000004, 0x59880123,
+ 0x80000000, 0x48031123, 0x8c14052e, 0x05000004,
+ 0x59880124, 0x80000000, 0x48031124, 0x8c14052c,
0x05000013, 0x40140000, 0x82000500, 0x00070000,
0x82000d80, 0x00030000, 0x0500000d, 0x82000d80,
0x00040000, 0x0500000a, 0x82000d80, 0x00050000,
0x05000007, 0x59880005, 0x80000000, 0x48031005,
- 0x59880120, 0x80000000, 0x48031120, 0x5c000800,
+ 0x59880125, 0x80000000, 0x48031125, 0x5c000800,
0x5c000000, 0x1c01f000, 0x4817c857, 0x4c000000,
- 0x4c040000, 0x8c14052a, 0x05000004, 0x59880121,
- 0x80000000, 0x48031121, 0x8c14052e, 0x05000004,
- 0x59880122, 0x80000000, 0x48031122, 0x8c14052c,
+ 0x4c040000, 0x8c14052a, 0x05000004, 0x59880126,
+ 0x80000000, 0x48031126, 0x8c14052e, 0x05000004,
+ 0x59880127, 0x80000000, 0x48031127, 0x8c14052c,
0x05000013, 0x40140000, 0x82000500, 0x00070000,
0x82000d80, 0x00030000, 0x0500000d, 0x82000d80,
0x00040000, 0x0500000a, 0x82000d80, 0x00050000,
0x05000007, 0x59880005, 0x80000000, 0x48031005,
- 0x59880123, 0x80000000, 0x48031123, 0x5c000800,
+ 0x59880128, 0x80000000, 0x48031128, 0x5c000800,
0x5c000000, 0x1c01f000, 0x4807c857, 0x4c000000,
- 0x8c04052c, 0x05000004, 0x5988010c, 0x80000000,
- 0x4803110c, 0x8c04052a, 0x05000004, 0x5988010d,
- 0x80000000, 0x4803110d, 0x8c040528, 0x05000004,
- 0x5988010e, 0x80000000, 0x4803110e, 0x8c040526,
- 0x05000004, 0x5988010f, 0x80000000, 0x4803110f,
- 0x8c040524, 0x05000004, 0x59880110, 0x80000000,
- 0x48031110, 0x8c040522, 0x05000004, 0x59880111,
- 0x80000000, 0x48031111, 0x8c040520, 0x05000004,
- 0x59880112, 0x80000000, 0x48031112, 0x5c000000,
- 0x1c01f000, 0x4807c857, 0x4c000000, 0x59880113,
- 0x80000000, 0x48031113, 0x5c000000, 0x1c01f000,
+ 0x8c04052c, 0x05000004, 0x59880111, 0x80000000,
+ 0x48031111, 0x8c04052a, 0x05000004, 0x59880112,
+ 0x80000000, 0x48031112, 0x8c040528, 0x05000004,
+ 0x59880113, 0x80000000, 0x48031113, 0x8c040526,
+ 0x05000004, 0x59880114, 0x80000000, 0x48031114,
+ 0x8c040524, 0x05000004, 0x59880115, 0x80000000,
+ 0x48031115, 0x8c040522, 0x05000004, 0x59880116,
+ 0x80000000, 0x48031116, 0x8c040520, 0x05000004,
+ 0x59880117, 0x80000000, 0x48031117, 0x5c000000,
+ 0x1c01f000, 0x4807c857, 0x4c000000, 0x59880118,
+ 0x80000000, 0x48031118, 0x5c000000, 0x1c01f000,
0x4807c857, 0x4c000000, 0x8c04051c, 0x05000004,
- 0x59880114, 0x80000000, 0x48031114, 0x8c04051a,
- 0x05000004, 0x59880115, 0x80000000, 0x48031115,
+ 0x59880119, 0x80000000, 0x48031119, 0x8c04051a,
+ 0x05000004, 0x5988011a, 0x80000000, 0x4803111a,
0x5c000000, 0x1c01f000, 0x4807c857, 0x4c000000,
- 0x8c040518, 0x05000004, 0x59880116, 0x80000000,
- 0x48031116, 0x8c040516, 0x05000004, 0x59880117,
- 0x80000000, 0x48031117, 0x8c040514, 0x05000004,
- 0x59880118, 0x80000000, 0x48031118, 0x5c000000,
+ 0x8c040518, 0x05000004, 0x5988011b, 0x80000000,
+ 0x4803111b, 0x8c040516, 0x05000004, 0x5988011c,
+ 0x80000000, 0x4803111c, 0x8c040514, 0x05000004,
+ 0x5988011d, 0x80000000, 0x4803111d, 0x5c000000,
0x1c01f000, 0x4807c857, 0x4c000000, 0x8c040510,
- 0x05000004, 0x59880119, 0x80000000, 0x48031119,
- 0x8c04050c, 0x05000004, 0x5988011a, 0x80000000,
- 0x4803111a, 0x5c000000, 0x1c01f000, 0x4807c857,
- 0x4c000000, 0x8c040508, 0x05000004, 0x5988011b,
- 0x80000000, 0x4803111b, 0x8c040504, 0x05000004,
- 0x5988011c, 0x80000000, 0x4803111c, 0x5c000000,
- 0x1c01f000, 0x4807c856, 0x4c000000, 0x598800e5,
- 0x80000000, 0x480310e5, 0x5c000000, 0x1c01f000,
- 0x40680000, 0x5c036000, 0x4db00000, 0x49b3c857,
- 0x4c040000, 0x50000800, 0x80040800, 0x05001002,
- 0x44040000, 0x5c000800, 0x1c01f000, 0x480fc857,
- 0x4c000000, 0x900c0580, 0x05020004, 0x42000000,
- 0x0010b298, 0x0501f012, 0x820c0580, 0x00001001,
- 0x05020004, 0x42000000, 0x0010b299, 0x0501f00c,
- 0x820c0580, 0x00001002, 0x05020004, 0x42000000,
- 0x0010b29a, 0x0501f006, 0x820c0c80, 0x0000201c,
- 0x05ae1f8b, 0x900c051f, 0x0c01f804, 0x05fdffde,
- 0x5c000000, 0x1c01f000, 0x0010a286, 0x0010a289,
- 0x0010a28c, 0x0010a28f, 0x0010a292, 0x0010a295,
- 0x0010a298, 0x0010a29b, 0x0010a29e, 0x0010a2a1,
- 0x0010a2a4, 0x0010a2a7, 0x0010a2aa, 0x0010a2ad,
- 0x0010a2b0, 0x0010a2b3, 0x0010a2b6, 0x0010a2b9,
- 0x0010a2bc, 0x0010a2bf, 0x0010a2c2, 0x0010a2c5,
- 0x0010a2c8, 0x0010a2cb, 0x0010a2ce, 0x0010a2d1,
- 0x0010a2d4, 0x0010a2d7, 0x42000000, 0x0010b29b,
- 0x1c01f000, 0x42000000, 0x0010b29c, 0x1c01f000,
- 0x42000000, 0x0010b29d, 0x1c01f000, 0x42000000,
- 0x0010b29e, 0x1c01f000, 0x42000000, 0x0010b29f,
- 0x1c01f000, 0x42000000, 0x0010b2a0, 0x1c01f000,
- 0x42000000, 0x0010b2a1, 0x1c01f000, 0x42000000,
- 0x0010b2a2, 0x1c01f000, 0x42000000, 0x0010b2a3,
- 0x1c01f000, 0x42000000, 0x0010b2a4, 0x1c01f000,
- 0x42000000, 0x0010b2a5, 0x1c01f000, 0x42000000,
- 0x0010b2a6, 0x1c01f000, 0x42000000, 0x0010b2a7,
- 0x1c01f000, 0x42000000, 0x0010b2a8, 0x1c01f000,
- 0x42000000, 0x0010b2a9, 0x1c01f000, 0x42000000,
- 0x0010b2aa, 0x1c01f000, 0x42000000, 0x0010b2ab,
- 0x1c01f000, 0x42000000, 0x0010b2ac, 0x1c01f000,
- 0x42000000, 0x0010b2ad, 0x1c01f000, 0x42000000,
- 0x0010b2ae, 0x1c01f000, 0x42000000, 0x0010b2af,
- 0x1c01f000, 0x42000000, 0x0010b2b0, 0x1c01f000,
- 0x42000000, 0x0010b2b1, 0x1c01f000, 0x42000000,
- 0x0010b2b2, 0x1c01f000, 0x42000000, 0x0010b2b3,
- 0x1c01f000, 0x42000000, 0x0010b2b4, 0x1c01f000,
- 0x42000000, 0x0010b2b5, 0x1c01f000, 0x42000000,
- 0x0010b2b6, 0x1c01f000, 0x480fc857, 0x4c000000,
- 0x900c0581, 0x05020004, 0x42000000, 0x0010b21b,
- 0x0501f00f, 0x900c0582, 0x05020004, 0x42000000,
- 0x0010b21c, 0x0501f00a, 0x900c0583, 0x05020004,
- 0x42000000, 0x0010b21d, 0x0501f005, 0x900c0584,
- 0x05020004, 0x42000000, 0x0010b21e, 0x05fdff56,
- 0x5c000000, 0x1c01f000, 0x4c000000, 0x59a8021b,
- 0x4803c857, 0x59240a00, 0x8c04050a, 0x05000010,
- 0x8c000506, 0x05000004, 0x42000000, 0x0010b226,
- 0x0501f011, 0x8c00050a, 0x05000004, 0x42000000,
- 0x0010b225, 0x0501f00c, 0x8c000508, 0x05000004,
- 0x42000000, 0x0010b228, 0x0501f007, 0x05d5f82b,
- 0x05000006, 0x8c000506, 0x05020004, 0x42000000,
- 0x0010b227, 0x05fdff38, 0x5c000000, 0x1c01f000,
- 0x8058b1c0, 0x05ac0ede, 0x5450a800, 0x8050a000,
- 0x8054a800, 0x8058b040, 0x05fe07fc, 0x1c01f000,
- 0x8058b1c0, 0x05ac0ed6, 0x4450a800, 0x8054a800,
- 0x8058b040, 0x05fe07fd, 0x1c01f000, 0x4813c857,
- 0x4817c857, 0x40140000, 0x80100480, 0x05ae1ecc,
- 0x497bc841, 0x41787000, 0x42006800, 0x00140000,
- 0x59a8008a, 0x8c000500, 0x05000003, 0x42006800,
- 0x0013a000, 0x4837c857, 0x8010048d, 0x05021005,
- 0x8014048d, 0x05001003, 0x40147000, 0x80342840,
- 0x61fc7801, 0x40100000, 0x80140480, 0x82006d00,
- 0xffffff00, 0x05020002, 0x40007800, 0x4813c840,
- 0x483fc842, 0x05011000, 0x40100000, 0x803c2400,
- 0x40100000, 0x80140580, 0x05fe07f3, 0x45782800,
- 0x803871c0, 0x05000005, 0x40382800, 0x41787000,
- 0x80102000, 0x05fdf7eb, 0x1c01f000, 0x8058b1c0,
- 0x05ac0ea3, 0x50500000, 0x9c0001c0, 0x4400a800,
- 0x8050a000, 0x8054a800, 0x8058b040, 0x05fe07fa,
- 0x1c01f000, 0x4c000000, 0x59a80007, 0x8c00051c,
- 0x5c000000, 0x1c01f000, 0x0501f805, 0x60058800,
- 0x05020002, 0x60018800, 0x1c01f000, 0x59a80007,
- 0x8c000518, 0x1c01f000, 0x4200b000, 0x0010b390,
- 0x5058b000, 0x1c01f000, 0x42006800, 0x0010b391,
- 0x58340406, 0x8c000502, 0x05fc07f8, 0x6004b000,
- 0x1c01f000, 0x61906800, 0x80346840, 0x05000006,
- 0x64070000, 0x40000000, 0x59807000, 0x8c380500,
- 0x05fc07fa, 0x1c01f000, 0x640f0000, 0x40000000,
- 0x59800000, 0x8c000500, 0x05fc07fc, 0x1c01f000,
- 0x0501f805, 0x60058800, 0x05020002, 0x60018800,
- 0x1c01f000, 0x42006800, 0x0010b391, 0x58340406,
- 0x8c000504, 0x1c01f000, 0x0501f805, 0x60058800,
- 0x05020002, 0x60018800, 0x1c01f000, 0x42006800,
- 0x0010b391, 0x58340406, 0x8c000508, 0x1c01f000,
- 0x59a80006, 0x8c000516, 0x1c01f000, 0x00000001,
+ 0x05000004, 0x5988011e, 0x80000000, 0x4803111e,
+ 0x8c04050c, 0x05000004, 0x5988011f, 0x80000000,
+ 0x4803111f, 0x5c000000, 0x1c01f000, 0x4807c857,
+ 0x4c000000, 0x8c040508, 0x05000004, 0x59880120,
+ 0x80000000, 0x48031120, 0x8c040504, 0x05000004,
+ 0x59880121, 0x80000000, 0x48031121, 0x5c000000,
+ 0x1c01f000, 0x4807c856, 0x4c000000, 0x598800ea,
+ 0x80000000, 0x480310ea, 0x5c000000, 0x1c01f000,
+ 0x5c036000, 0x4db00000, 0x49b3c857, 0x4c040000,
+ 0x50000800, 0x80040800, 0x05001002, 0x44040000,
+ 0x5c000800, 0x1c01f000, 0x480fc857, 0x4c000000,
+ 0x900c0580, 0x05020004, 0x42000000, 0x0010e411,
+ 0x0501f012, 0x820c0580, 0x00001001, 0x05020004,
+ 0x42000000, 0x0010e412, 0x0501f00c, 0x820c0580,
+ 0x00001002, 0x05020004, 0x42000000, 0x0010e413,
+ 0x0501f006, 0x820c0c80, 0x0000201c, 0x059a1ddf,
+ 0x900c051f, 0x0c01f804, 0x05fdffde, 0x5c000000,
+ 0x1c01f000, 0x0010d01d, 0x0010d020, 0x0010d023,
+ 0x0010d026, 0x0010d029, 0x0010d02c, 0x0010d02f,
+ 0x0010d032, 0x0010d035, 0x0010d038, 0x0010d03b,
+ 0x0010d03e, 0x0010d041, 0x0010d044, 0x0010d047,
+ 0x0010d04a, 0x0010d04d, 0x0010d050, 0x0010d053,
+ 0x0010d056, 0x0010d059, 0x0010d05c, 0x0010d05f,
+ 0x0010d062, 0x0010d065, 0x0010d068, 0x0010d06b,
+ 0x0010d06e, 0x42000000, 0x0010e414, 0x1c01f000,
+ 0x42000000, 0x0010e415, 0x1c01f000, 0x42000000,
+ 0x0010e416, 0x1c01f000, 0x42000000, 0x0010e417,
+ 0x1c01f000, 0x42000000, 0x0010e418, 0x1c01f000,
+ 0x42000000, 0x0010e419, 0x1c01f000, 0x42000000,
+ 0x0010e41a, 0x1c01f000, 0x42000000, 0x0010e41b,
+ 0x1c01f000, 0x42000000, 0x0010e41c, 0x1c01f000,
+ 0x42000000, 0x0010e41d, 0x1c01f000, 0x42000000,
+ 0x0010e41e, 0x1c01f000, 0x42000000, 0x0010e41f,
+ 0x1c01f000, 0x42000000, 0x0010e420, 0x1c01f000,
+ 0x42000000, 0x0010e421, 0x1c01f000, 0x42000000,
+ 0x0010e422, 0x1c01f000, 0x42000000, 0x0010e423,
+ 0x1c01f000, 0x42000000, 0x0010e424, 0x1c01f000,
+ 0x42000000, 0x0010e425, 0x1c01f000, 0x42000000,
+ 0x0010e426, 0x1c01f000, 0x42000000, 0x0010e427,
+ 0x1c01f000, 0x42000000, 0x0010e428, 0x1c01f000,
+ 0x42000000, 0x0010e429, 0x1c01f000, 0x42000000,
+ 0x0010e42a, 0x1c01f000, 0x42000000, 0x0010e42b,
+ 0x1c01f000, 0x42000000, 0x0010e42c, 0x1c01f000,
+ 0x42000000, 0x0010e42d, 0x1c01f000, 0x42000000,
+ 0x0010e42e, 0x1c01f000, 0x42000000, 0x0010e42f,
+ 0x1c01f000, 0x480fc857, 0x4c000000, 0x900c0581,
+ 0x05020004, 0x42000000, 0x0010e394, 0x0501f00f,
+ 0x900c0582, 0x05020004, 0x42000000, 0x0010e395,
+ 0x0501f00a, 0x900c0583, 0x05020004, 0x42000000,
+ 0x0010e396, 0x0501f005, 0x900c0584, 0x05020004,
+ 0x42000000, 0x0010e397, 0x05fdff56, 0x5c000000,
+ 0x1c01f000, 0x4c000000, 0x59a80249, 0x4803c857,
+ 0x59240a00, 0x8c04050a, 0x05000010, 0x8c000506,
+ 0x05000004, 0x42000000, 0x0010e39f, 0x0501f011,
+ 0x8c00050a, 0x05000004, 0x42000000, 0x0010e39e,
+ 0x0501f00c, 0x8c000508, 0x05000004, 0x42000000,
+ 0x0010e3a1, 0x0501f007, 0x05c9f810, 0x05000006,
+ 0x8c000506, 0x05020004, 0x42000000, 0x0010e3a0,
+ 0x05fdff38, 0x5c000000, 0x1c01f000, 0x8058b1c0,
+ 0x05980d32, 0x5450a800, 0x8050a000, 0x8054a800,
+ 0x8058b040, 0x05fe07fc, 0x1c01f000, 0x8058b1c0,
+ 0x05980d2a, 0x4450a800, 0x8054a800, 0x8058b040,
+ 0x05fe07fd, 0x1c01f000, 0x4813c857, 0x4817c857,
+ 0x40140000, 0x80100480, 0x059a1d20, 0x497bc841,
+ 0x41787000, 0x42006800, 0x00140000, 0x59a800ca,
+ 0x8c000500, 0x05000003, 0x42006800, 0x0013a000,
+ 0x4837c857, 0x8010048d, 0x05021005, 0x8014048d,
+ 0x05001003, 0x40147000, 0x80342840, 0x61fc7801,
+ 0x40100000, 0x80140480, 0x82006d00, 0xffffff00,
+ 0x05020002, 0x40007800, 0x4813c840, 0x483fc842,
+ 0x05011000, 0x40100000, 0x803c2400, 0x40100000,
+ 0x80140580, 0x05fe07f3, 0x45782800, 0x803871c0,
+ 0x05000005, 0x40382800, 0x41787000, 0x80102000,
+ 0x05fdf7eb, 0x1c01f000, 0x8058b1c0, 0x05980cf7,
+ 0x50500000, 0x9c0001c0, 0x4400a800, 0x8050a000,
+ 0x8054a800, 0x8058b040, 0x05fe07fa, 0x1c01f000,
+ 0x4c000000, 0x59a80007, 0x8c00051c, 0x5c000000,
+ 0x1c01f000, 0x59a80007, 0x8c000518, 0x1c01f000,
+ 0x4200b000, 0x0010e511, 0x5058b000, 0x1c01f000,
+ 0x42006800, 0x0010e512, 0x58340406, 0x8c000502,
+ 0x05fc07f8, 0x6004b000, 0x1c01f000, 0x61906800,
+ 0x80346840, 0x05000006, 0x64070000, 0x40000000,
+ 0x59807000, 0x8c380500, 0x05fc07fa, 0x1c01f000,
+ 0x4c040000, 0x05fdfff6, 0x05020003, 0x80040840,
+ 0x05fe07fd, 0x5c000800, 0x1c01f000, 0x640f0000,
+ 0x40000000, 0x59800000, 0x8c000500, 0x05fc07fc,
+ 0x1c01f000, 0x42006800, 0x0010e512, 0x58340406,
+ 0x8c000504, 0x1c01f000, 0x42006800, 0x0010e511,
+ 0x50346800, 0x42007000, 0x0010e512, 0x58380200,
+ 0x8c000500, 0x05020004, 0x9038740d, 0x80346840,
+ 0x05fe07fb, 0x1c01f000, 0x42006800, 0x0010e512,
+ 0x58340406, 0x8c000508, 0x1c01f000, 0x42006800,
+ 0x0010e512, 0x58340406, 0x8c00050a, 0x1c01f000,
+ 0x59a80006, 0x8c000516, 0x1c01f000, 0x599c0017,
+ 0x8c00051e, 0x1c01f000, 0x42006800, 0x0010e511,
+ 0x50346800, 0x59cc7000, 0x42007800, 0x0010e512,
+ 0x583c0005, 0x80380580, 0x82000500, 0x00ffffff,
+ 0x05000006, 0x80346840, 0x05000003, 0x903c7c0d,
+ 0x05fdf7f8, 0x90000541, 0x1c01f000, 0x59a86a49,
+ 0x8c34050a, 0x0500000a, 0x8c340514, 0x05000008,
+ 0x42006800, 0x0010e511, 0x50346800, 0xb0340481,
+ 0x05001004, 0x599c0017, 0x8c00050a, 0x1c01f000,
+ 0x80000580, 0x05fdf7fe, 0x59a80006, 0x8c000518,
+ 0x05000002, 0x8d0c0520, 0x1c01f000, 0x00000001,
0x00000002, 0x00000004, 0x00000008, 0x00000010,
0x00000020, 0x00000040, 0x00000080, 0x00000100,
0x00000200, 0x00000400, 0x00000800, 0x00001000,
@@ -23304,71 +13440,71 @@ static const uint32_t isp_2500_multi_risc_code[] = {
0x00020000, 0x00040000, 0x00080000, 0x00100000,
0x00200000, 0x00400000, 0x00800000, 0x01000000,
0x02000000, 0x04000000, 0x08000000, 0x10000000,
- 0x20000000, 0x40000000, 0x80000000, 0x0010b391,
- 0x0010b39c, 0x0010b3a7, 0x0010b3b2, 0x0010b3bd,
- 0x0010b3c8, 0x0010b3d3, 0x0010b3de, 0x0010b3e9,
- 0x0010b3f4, 0x0010b3ff, 0x0010b40a, 0x0010b415,
- 0x0010b420, 0x0010b42b, 0x0010b436, 0x0010b441,
- 0x0010b44c, 0x0010b457, 0x0010b462, 0x0010b46d,
- 0x0010b478, 0x0010b483, 0x0010b48e, 0x0010b499,
- 0x0010b4a4, 0x0010b4af, 0x0010b4ba, 0x0010b4c5,
- 0x0010b4d0, 0x0010b4db, 0x0010b4e6, 0x0010b4f1,
- 0x0010b4fc, 0x0010b507, 0x0010b512, 0x0010b51d,
- 0x0010b528, 0x0010b533, 0x0010b53e, 0x0010b549,
- 0x0010b554, 0x0010b55f, 0x0010b56a, 0x0010b575,
- 0x0010b580, 0x0010b58b, 0x0010b596, 0x0010b5a1,
- 0x0010b5ac, 0x0010b5b7, 0x0010b5c2, 0x0010b5cd,
- 0x0010b5d8, 0x0010b5e3, 0x0010b5ee, 0x0010b5f9,
- 0x0010b604, 0x0010b60f, 0x0010b61a, 0x0010b625,
- 0x0010b630, 0x0010b63b, 0x0010b646, 0x0010b651,
- 0x0010b65c, 0x0010b667, 0x0010b672, 0x0010b67d,
- 0x0010b688, 0x0010b693, 0x0010b69e, 0x0010b6a9,
- 0x0010b6b4, 0x0010b6bf, 0x0010b6ca, 0x0010b6d5,
- 0x0010b6e0, 0x0010b6eb, 0x0010b6f6, 0x0010b701,
- 0x0010b70c, 0x0010b717, 0x0010b722, 0x0010b72d,
- 0x0010b738, 0x0010b743, 0x0010b74e, 0x0010b759,
- 0x0010b764, 0x0010b76f, 0x0010b77a, 0x0010b785,
- 0x0010b790, 0x0010b79b, 0x0010b7a6, 0x0010b7b1,
- 0x0010b7bc, 0x0010b7c7, 0x0010b7d2, 0x0010b7dd,
- 0x0010b7e8, 0x0010b7f3, 0x0010b7fe, 0x0010b809,
- 0x0010b814, 0x0010b81f, 0x0010b82a, 0x0010b835,
- 0x0010b840, 0x0010b84b, 0x0010b856, 0x0010b861,
- 0x0010b86c, 0x0010b877, 0x0010b882, 0x0010b88d,
- 0x0010b898, 0x0010b8a3, 0x0010b8ae, 0x0010b8b9,
- 0x0010b8c4, 0x0010b8cf, 0x0010b8da, 0x0010b8e5,
- 0x0010b8f0, 0x0010b8fb, 0x0010b906, 0x0010b911,
- 0x0010b91c, 0x0010b927, 0x0010b932, 0x0010b93d,
- 0x0010b948, 0x0010b953, 0x0010b95e, 0x0010b969,
- 0x0010b974, 0x0010b97f, 0x0010b98a, 0x0010b995,
- 0x0010b9a0, 0x0010b9ab, 0x0010b9b6, 0x0010b9c1,
- 0x0010b9cc, 0x0010b9d7, 0x0010b9e2, 0x0010b9ed,
- 0x0010b9f8, 0x0010ba03, 0x0010ba0e, 0x0010ba19,
- 0x0010ba24, 0x0010ba2f, 0x0010ba3a, 0x0010ba45,
- 0x0010ba50, 0x0010ba5b, 0x0010ba66, 0x0010ba71,
- 0x0010ba7c, 0x0010ba87, 0x0010ba92, 0x0010ba9d,
- 0x0010baa8, 0x0010bab3, 0x0010babe, 0x0010bac9,
- 0x0010bad4, 0x0010badf, 0x0010baea, 0x0010baf5,
- 0x0010bb00, 0x0010bb0b, 0x0010bb16, 0x0010bb21,
- 0x0010bb2c, 0x0010bb37, 0x0010bb42, 0x0010bb4d,
- 0x0010bb58, 0x0010bb63, 0x0010bb6e, 0x0010bb79,
- 0x0010bb84, 0x0010bb8f, 0x0010bb9a, 0x0010bba5,
- 0x0010bbb0, 0x0010bbbb, 0x0010bbc6, 0x0010bbd1,
- 0x0010bbdc, 0x0010bbe7, 0x0010bbf2, 0x0010bbfd,
- 0x0010bc08, 0x0010bc13, 0x0010bc1e, 0x0010bc29,
- 0x0010bc34, 0x0010bc3f, 0x0010bc4a, 0x0010bc55,
- 0x0010bc60, 0x0010bc6b, 0x0010bc76, 0x0010bc81,
- 0x0010bc8c, 0x0010bc97, 0x0010bca2, 0x0010bcad,
- 0x0010bcb8, 0x0010bcc3, 0x0010bcce, 0x0010bcd9,
- 0x0010bce4, 0x0010bcef, 0x0010bcfa, 0x0010bd05,
- 0x0010bd10, 0x0010bd1b, 0x0010bd26, 0x0010bd31,
- 0x0010bd3c, 0x0010bd47, 0x0010bd52, 0x0010bd5d,
- 0x0010bd68, 0x0010bd73, 0x0010bd7e, 0x0010bd89,
- 0x0010bd94, 0x0010bd9f, 0x0010bdaa, 0x0010bdb5,
- 0x0010bdc0, 0x0010bdcb, 0x0010bdd6, 0x0010bde1,
- 0x0010bdec, 0x0010bdf7, 0x0010be02, 0x0010be0d,
- 0x0010be18, 0x0010be23, 0x0010be2e, 0x0010be39,
- 0x0010be44, 0x0010be4f, 0x0010be5a, 0x0010be65,
- 0x0010be70, 0x0010be7b, 0x0010be86, 0x40000000,
+ 0x20000000, 0x40000000, 0x80000000, 0x0010e512,
+ 0x0010e51f, 0x0010e52c, 0x0010e539, 0x0010e546,
+ 0x0010e553, 0x0010e560, 0x0010e56d, 0x0010e57a,
+ 0x0010e587, 0x0010e594, 0x0010e5a1, 0x0010e5ae,
+ 0x0010e5bb, 0x0010e5c8, 0x0010e5d5, 0x0010e5e2,
+ 0x0010e5ef, 0x0010e5fc, 0x0010e609, 0x0010e616,
+ 0x0010e623, 0x0010e630, 0x0010e63d, 0x0010e64a,
+ 0x0010e657, 0x0010e664, 0x0010e671, 0x0010e67e,
+ 0x0010e68b, 0x0010e698, 0x0010e6a5, 0x0010e6b2,
+ 0x0010e6bf, 0x0010e6cc, 0x0010e6d9, 0x0010e6e6,
+ 0x0010e6f3, 0x0010e700, 0x0010e70d, 0x0010e71a,
+ 0x0010e727, 0x0010e734, 0x0010e741, 0x0010e74e,
+ 0x0010e75b, 0x0010e768, 0x0010e775, 0x0010e782,
+ 0x0010e78f, 0x0010e79c, 0x0010e7a9, 0x0010e7b6,
+ 0x0010e7c3, 0x0010e7d0, 0x0010e7dd, 0x0010e7ea,
+ 0x0010e7f7, 0x0010e804, 0x0010e811, 0x0010e81e,
+ 0x0010e82b, 0x0010e838, 0x0010e845, 0x0010e852,
+ 0x0010e85f, 0x0010e86c, 0x0010e879, 0x0010e886,
+ 0x0010e893, 0x0010e8a0, 0x0010e8ad, 0x0010e8ba,
+ 0x0010e8c7, 0x0010e8d4, 0x0010e8e1, 0x0010e8ee,
+ 0x0010e8fb, 0x0010e908, 0x0010e915, 0x0010e922,
+ 0x0010e92f, 0x0010e93c, 0x0010e949, 0x0010e956,
+ 0x0010e963, 0x0010e970, 0x0010e97d, 0x0010e98a,
+ 0x0010e997, 0x0010e9a4, 0x0010e9b1, 0x0010e9be,
+ 0x0010e9cb, 0x0010e9d8, 0x0010e9e5, 0x0010e9f2,
+ 0x0010e9ff, 0x0010ea0c, 0x0010ea19, 0x0010ea26,
+ 0x0010ea33, 0x0010ea40, 0x0010ea4d, 0x0010ea5a,
+ 0x0010ea67, 0x0010ea74, 0x0010ea81, 0x0010ea8e,
+ 0x0010ea9b, 0x0010eaa8, 0x0010eab5, 0x0010eac2,
+ 0x0010eacf, 0x0010eadc, 0x0010eae9, 0x0010eaf6,
+ 0x0010eb03, 0x0010eb10, 0x0010eb1d, 0x0010eb2a,
+ 0x0010eb37, 0x0010eb44, 0x0010eb51, 0x0010eb5e,
+ 0x0010eb6b, 0x0010eb78, 0x0010eb85, 0x0010eb92,
+ 0x0010eb9f, 0x0010ebac, 0x0010ebb9, 0x0010ebc6,
+ 0x0010ebd3, 0x0010ebe0, 0x0010ebed, 0x0010ebfa,
+ 0x0010ec07, 0x0010ec14, 0x0010ec21, 0x0010ec2e,
+ 0x0010ec3b, 0x0010ec48, 0x0010ec55, 0x0010ec62,
+ 0x0010ec6f, 0x0010ec7c, 0x0010ec89, 0x0010ec96,
+ 0x0010eca3, 0x0010ecb0, 0x0010ecbd, 0x0010ecca,
+ 0x0010ecd7, 0x0010ece4, 0x0010ecf1, 0x0010ecfe,
+ 0x0010ed0b, 0x0010ed18, 0x0010ed25, 0x0010ed32,
+ 0x0010ed3f, 0x0010ed4c, 0x0010ed59, 0x0010ed66,
+ 0x0010ed73, 0x0010ed80, 0x0010ed8d, 0x0010ed9a,
+ 0x0010eda7, 0x0010edb4, 0x0010edc1, 0x0010edce,
+ 0x0010eddb, 0x0010ede8, 0x0010edf5, 0x0010ee02,
+ 0x0010ee0f, 0x0010ee1c, 0x0010ee29, 0x0010ee36,
+ 0x0010ee43, 0x0010ee50, 0x0010ee5d, 0x0010ee6a,
+ 0x0010ee77, 0x0010ee84, 0x0010ee91, 0x0010ee9e,
+ 0x0010eeab, 0x0010eeb8, 0x0010eec5, 0x0010eed2,
+ 0x0010eedf, 0x0010eeec, 0x0010eef9, 0x0010ef06,
+ 0x0010ef13, 0x0010ef20, 0x0010ef2d, 0x0010ef3a,
+ 0x0010ef47, 0x0010ef54, 0x0010ef61, 0x0010ef6e,
+ 0x0010ef7b, 0x0010ef88, 0x0010ef95, 0x0010efa2,
+ 0x0010efaf, 0x0010efbc, 0x0010efc9, 0x0010efd6,
+ 0x0010efe3, 0x0010eff0, 0x0010effd, 0x0010f00a,
+ 0x0010f017, 0x0010f024, 0x0010f031, 0x0010f03e,
+ 0x0010f04b, 0x0010f058, 0x0010f065, 0x0010f072,
+ 0x0010f07f, 0x0010f08c, 0x0010f099, 0x0010f0a6,
+ 0x0010f0b3, 0x0010f0c0, 0x0010f0cd, 0x0010f0da,
+ 0x0010f0e7, 0x0010f0f4, 0x0010f101, 0x0010f10e,
+ 0x0010f11b, 0x0010f128, 0x0010f135, 0x0010f142,
+ 0x0010f14f, 0x0010f15c, 0x0010f169, 0x0010f176,
+ 0x0010f183, 0x0010f190, 0x0010f19d, 0x0010f1aa,
+ 0x0010f1b7, 0x0010f1c4, 0x0010f1d1, 0x0010f1de,
+ 0x0010f1eb, 0x0010f1f8, 0x0010f205, 0x40000000,
0x600070e0, 0x60007820, 0x4a007016, 0x00010001,
0x58380016, 0x8c000500, 0x05fc07fc, 0x600c4000,
0x60003002, 0x64807808, 0x583c2808, 0x8c14053e,
@@ -23401,275 +13537,313 @@ static const uint32_t isp_2500_multi_risc_code[] = {
0x40200011, 0x6016d800, 0x05027011, 0x59e00020,
0x90000582, 0x0502000e, 0x05006000, 0x4203e000,
0x40000000, 0x59e00017, 0x60000800, 0x8c00050a,
- 0x05b60d3f, 0x8d0c0530, 0x05b60d2b, 0x05b60d2d,
- 0x6403c017, 0x4203e000, 0x30000001, 0x05adfe89,
- 0x05fdf7ff, 0x59a8088d, 0x8c100502, 0x05000003,
+ 0x05a20bd4, 0x8d0c0530, 0x05a20bc7, 0x05a20bc9,
+ 0x6403c017, 0x4203e000, 0x30000001, 0x0599fcb5,
+ 0x05fdf7ff, 0x59a808d1, 0x8c100502, 0x05000003,
0x84040d42, 0x0501f007, 0x8c100504, 0x05000003,
0x84040d44, 0x0501f003, 0x8c100500, 0x84040d40,
- 0x4807508d, 0x1c01f000, 0x59a8008d, 0x8c000502,
- 0x05000009, 0x4a03508e, 0x0000008b, 0x4a03508f,
- 0x0000008b, 0x4a035090, 0x0000008b, 0x64135091,
- 0x0501f00c, 0x8c000504, 0x05000006, 0x65bf508e,
- 0x65bf508f, 0x65df5090, 0x64035091, 0x0501f005,
- 0x64cf508e, 0x64cf508f, 0x64975090, 0x64035091,
- 0x1c01f000, 0x7334598d,
- 0x00000000, 0x00000000, 0x00111000, 0x00004538,
- 0x00000000, 0x00000000, 0x00020000, 0x00000d9e,
- 0x916c0583, 0x01020181, 0x42000000, 0x0010aeb1,
- 0x50000000, 0x800001c0, 0x05020a32, 0x0501f9ee,
- 0x0501fd66, 0x0501fb68, 0x59a8006c, 0x80000540,
- 0x01020e90, 0x0505f9f3, 0x05fdf7f2, 0x915c04a0,
- 0x0100159f, 0x416a5800, 0x592ed000, 0x497a5800,
- 0x497a5801, 0x815eb840, 0x812e59c0, 0x1c01f000,
- 0x42007000, 0x00020d9f, 0x58380004, 0x49781000,
- 0x64001002, 0x48087004, 0x80000d40, 0x05020006,
- 0x48087005, 0x58380000, 0x80000540, 0x0500000a,
- 0x1c01f000, 0x48080800, 0x05fdf7fb, 0x42007000,
- 0x00020d9f, 0x58380000, 0x80000540, 0x05000002,
- 0x1c01f000, 0x58380807, 0x800409c0, 0x01020606,
- 0x58380005, 0x80006d40, 0x05020002, 0x1c01f000,
- 0x58340000, 0x48347001, 0x80000540, 0x05020002,
- 0x48007004, 0x48007005, 0x4a03b805, 0x30000002,
- 0x58340006, 0x59dc0806, 0x4803b800, 0x58340007,
- 0x4803b801, 0x58340805, 0x58341003, 0x58340001,
- 0x48047002, 0x48087003, 0x480bb803, 0x8c000500,
- 0x05020004, 0x64087000, 0x6407c824, 0x0501f004,
- 0x64047000, 0x6503c824, 0x0101f626, 0x58380802,
- 0x600011fe, 0x82040480, 0x0000ff00, 0x05021003,
- 0x40041000, 0x80000580, 0x48007002, 0x480bb802,
- 0x4a03b805, 0x10000002, 0x1c01f000, 0x59dc0806,
- 0x4a03b805, 0x20000000, 0x8c04053e, 0x05000009,
- 0x8c040508, 0x010209ef, 0x42007000, 0x00020d9f,
- 0x58380000, 0x90001484, 0x0c001003, 0x0101f9ef,
- 0x1c01f000, 0x00020031, 0x00020071, 0x00020078,
- 0x0010105e, 0x82040d00, 0x43200f80, 0x01020633,
- 0x58380002, 0x80000540, 0x05000008, 0x0101f626,
- 0x82040d00, 0x43200f80, 0x01020633, 0x58380002,
- 0x80000540, 0x05fe07d6, 0x58386001, 0x58300008,
- 0x4a006002, 0x00000100, 0x64007000, 0x80001540,
- 0x05fc07ad, 0x59dc0000, 0x48006006, 0x59dc0001,
- 0x48006007, 0x4030d000, 0x0809f800, 0x05fdf7a0,
- 0x59e00017, 0x8c00050c, 0x05020007, 0x59a8186a,
- 0x800400c4, 0x800c1c00, 0x580c0003, 0x8c000500,
- 0x05000008, 0x59a8006c, 0x4c000000, 0x0101fe81,
- 0x5c000000, 0x80000540, 0x0102064b, 0x1c01f000,
- 0x4d2c0000, 0x4c040000, 0x4c0c0000, 0x05fdff74,
- 0x5c001800, 0x5c000800, 0x05000010, 0x64025801,
- 0x64125805, 0x64065804, 0x900c0402, 0x48025803,
- 0x580c0000, 0x48025806, 0x580c0001, 0x48025807,
- 0x4a025808, 0x000200b4, 0x48065809, 0x412c1000,
- 0x5c025800, 0x05fdf76b, 0x5c025800, 0x0101f681,
- 0x58300802, 0x82040580, 0x00000100, 0x01020640,
- 0x4d2c0000, 0x40325800, 0x0101fd8d, 0x5c025800,
- 0x0101f64b, 0x59b800ea, 0x82000d00, 0xf2000038,
- 0x010207c0, 0x8c000510, 0x010007bf, 0x59ba60e0,
- 0x81300182, 0x0502104c, 0x05002030, 0x8532653e,
- 0x59300407, 0x90000583, 0x0502002a, 0x59300203,
- 0x90000584, 0x05020027, 0x59325809, 0x59300004,
- 0x4a025a05, 0x00000103, 0x497a580a, 0x8c00053e,
- 0x0502001a, 0x59300008, 0x82000500, 0x04000800,
- 0x82000580, 0x04000800, 0x05000017, 0x0501fa80,
- 0x59325827, 0x812e59c0, 0x01020d8d, 0x5932680a,
- 0x0505fb7a, 0x5934000f, 0x8d0c0512, 0x05020005,
- 0x5934140b, 0x80081040, 0x05001002, 0x480a6c0b,
- 0x80000540, 0x05020a0b, 0x59b800ea, 0x8c000510,
- 0x05fe07d7, 0x1c01f000, 0x0131fcf7, 0x05fc07e6,
- 0x0101f7b8, 0x59300221, 0x48025c10, 0x05fdf7e8,
- 0x61567000, 0x0501f024, 0x83326500, 0x3fffffff,
- 0x59300407, 0x90000583, 0x05020015, 0x59325809,
- 0x5932680a, 0x4a025a05, 0x00000103, 0x497a580a,
- 0x0501fa5b, 0x59325827, 0x812e59c0, 0x01020d8c,
- 0x0505fb56, 0x5934000f, 0x8d0c0512, 0x05020005,
- 0x5934140b, 0x80081040, 0x05001002, 0x480a6c0b,
- 0x80000540, 0x050209e7, 0x05fdf7dc, 0x61527000,
- 0x0501f009, 0x83300500, 0x60000000, 0x05000011,
- 0x81326580, 0x8000013a, 0x82000400, 0x001007c4,
- 0x50027000, 0x59300c07, 0x90040582, 0x010007b8,
- 0x59300004, 0x8c00053e, 0x05020003, 0x0505fb59,
- 0x05fdf7ca, 0x0131fcf7, 0x05fc07fd, 0x0101f7b8,
- 0x83300500, 0x1f000000, 0x010007ba, 0x81326580,
- 0x80000130, 0x90000c94, 0x010219ef, 0x1201f000,
- 0x001007c8, 0x82000500, 0xf0000000, 0x82040d00,
- 0x0fffffff, 0x80040d40, 0x4807c857, 0x59b800ea,
- 0x8c000516, 0x010600af, 0x480770e1, 0x1c01f000,
- 0x59325809, 0x412c7000, 0x58380a05, 0x82040d00,
- 0x000000ff, 0xb00405a8, 0x01040314, 0xb00405aa,
- 0x01040314, 0xb00405ba, 0x0104032d, 0xb00405b2,
- 0x0104032d, 0x58380a05, 0x9004050f, 0x82000c00,
- 0x00100e26, 0x50044000, 0x0c01f001, 0x00100b13,
- 0x00100b13, 0x0002015b, 0x00100b13, 0x00100b13,
- 0x00100b13, 0x00100b13, 0x00100b13, 0x00020169,
- 0x00100b33, 0x00100b13, 0x00100b13, 0x00100b13,
- 0x00100b13, 0x00100b13, 0x00100b13, 0x5838040b,
- 0x8c000500, 0x010009ef, 0x50200000, 0x80387c00,
- 0x583c1002, 0x583c2800, 0x583c2001, 0x58380a08,
- 0x58383010, 0x59303808, 0x5838000e, 0x48026014,
- 0x0501f00e, 0x5838020b, 0x8c000502, 0x01040313,
- 0x50200000, 0x80387c00, 0x583c2800, 0x583c2001,
- 0x583c1002, 0x592c0a08, 0x592c3010, 0x59303808,
- 0x497a6014, 0x497a6015, 0x48166010, 0x48126011,
- 0x480a6012, 0x481a6013, 0x80040840, 0x4806600f,
- 0x0106035a, 0x841c3d40, 0x481e6008, 0x1c01f000,
- 0x4d2c0000, 0x59325809, 0x592c0a05, 0x4807c857,
- 0x82040d00, 0x000000ff, 0x9004050f, 0x1201f000,
- 0x00100c76, 0x41787800, 0x59325809, 0x592c0c0b,
- 0x8c040502, 0x010404a6, 0x592c000e, 0x592c1010,
- 0x592c0a05, 0x480a6013, 0x48026014, 0x48026015,
- 0x82040d00, 0x000000ff, 0xb00405b2, 0x010404ac,
- 0xb00405ba, 0x010404ac, 0x412c3000, 0x9004050f,
- 0x82000400, 0x00100e26, 0x50003800, 0x8c3c050e,
- 0x05000002, 0x801c3800, 0x501c0000, 0x592c1a08,
- 0x4802600c, 0x481a600d, 0x481e600e, 0x480e600f,
- 0x843c7d4a, 0x403c1000, 0x1c01f000, 0x59e00004,
- 0x8c00050e, 0x05fe06b2, 0x1c01f000, 0x42001000,
- 0x0010d22d, 0x58080009, 0x80000540, 0x010a0248,
- 0x4a001003, 0x0010d236, 0x4c080000, 0x0501f812,
- 0x5c001000, 0x48141009, 0x480c1006, 0x48101007,
- 0x64001001, 0x64101005, 0x64041004, 0x05fdf65d,
- 0x58300802, 0x82040580, 0x00000100, 0x010a0257,
- 0x82300580, 0x0010d22d, 0x010a0252, 0x49786009,
- 0x1c01f000, 0x61901800, 0x800c1840, 0x05000006,
- 0x64070000, 0x40000000, 0x59800000, 0x8c000500,
- 0x05fc07fa, 0x010802a9, 0x600028f4, 0x58142024,
- 0x58141823, 0x58142825, 0x64030000, 0x1c01f000,
- 0x4c000000, 0x4df00000, 0x4203e000, 0xb0100000,
- 0x41f00000, 0x81fe1500, 0x8d080512, 0x010a0c7e,
- 0x8d08051c, 0x0506095d, 0x8d080518, 0x05060990,
- 0x8d08051a, 0x05fe0ed8, 0x83080500, 0x00000d00,
- 0x05020804, 0x5c03e000, 0x5c000000, 0x1801f000,
- 0x8d080516, 0x010a0ac4, 0x8d080514, 0x05fe0fbc,
- 0x8d080508, 0x01060ee2, 0x8d080500, 0x050608e3,
- 0x8d08050c, 0x010a0b83, 0x8d08050a, 0x010a0019,
- 0x1c01f000, 0x42000000, 0x0010aeb7, 0x50000000,
- 0x8c000504, 0x05000014, 0x42000000, 0x0010aeb7,
- 0x50000000, 0x8c000502, 0x05020002, 0x1c01f000,
- 0x4df00000, 0x4203e000, 0x50000000, 0x42034000,
- 0x0010ae99, 0x59a0001e, 0x59a1d806, 0x84000502,
- 0x4803401e, 0x58ec0008, 0x0801f800, 0x5c03e000,
- 0x1c01f000, 0x05027002, 0x05026002, 0x1c01f000,
- 0x4df00000, 0x4203e000, 0x50000000, 0x59e00020,
- 0xb0000d85, 0x05000003, 0xb0000d84, 0x05020007,
- 0x4803c857, 0x42000800, 0x00020d9f, 0x58040800,
- 0x90040d80, 0x05020019, 0x0101fd7c, 0x05000017,
- 0x412dd800, 0x48efc857, 0x0119fea8, 0x42034000,
- 0x0010ae99, 0x49a1d80a, 0x48ef4006, 0x59a0001e,
- 0x84000544, 0x4803401e, 0x59e00020, 0x4803c857,
- 0x59e00021, 0x4803c857, 0x59e00022, 0x4803c857,
- 0x59e00023, 0x4803c857, 0x59e00024, 0x4803c857,
- 0x0111f9ba, 0x0111f9d2, 0x5c03e000, 0x1c01f000,
- 0x4c5c0000, 0x4da00000, 0x4df00000, 0x4203e000,
- 0x50000000, 0x05006062, 0x42034000, 0x0010ae99,
- 0x59a01018, 0x59a01819, 0x800c19c0, 0x05020009,
- 0x59a0381c, 0x801c39c0, 0x010009ef, 0x49a3c857,
- 0x481fc857, 0x59a0041d, 0x801c3c00, 0x0501f00a,
- 0x59a0041a, 0x90000402, 0x4803441a, 0x90000c94,
- 0x05001003, 0x497b441a, 0x41780000, 0x59a03817,
- 0x801c3c00, 0x401cb800, 0x80081040, 0x480b4018,
- 0x581c0200, 0x4803c021, 0x581c0401, 0x4803c022,
- 0x581c0201, 0x4803c023, 0x581c0400, 0x4803c020,
- 0x900001c0, 0x90000552, 0x4803c011, 0x8d0c0530,
- 0x0500000f, 0x4c080000, 0x4c0c0000, 0x4c1c0000,
- 0x59e00017, 0x8c00050a, 0x05000004, 0x60000800,
- 0x05fdfe1c, 0x0501f003, 0x8c000500, 0x05fe0f3c,
- 0x5c003800, 0x5c001800, 0x5c001000, 0x6403c017,
- 0x4203e000, 0x30000001, 0x800c19c0, 0x05000007,
- 0x800c1840, 0x480f4019, 0x0502001b, 0x497b441a,
- 0x497b421a, 0x0501f018, 0x800811c0, 0x0502000a,
- 0x4d2c0000, 0x59a2581c, 0x0101fd8c, 0x5c025800,
- 0x497b401c, 0x497b401b, 0x497b441d, 0x497b421d,
- 0x0501f00d, 0x59a0041d, 0x90000402, 0x90000c93,
- 0x4803441d, 0x05001008, 0x4d2c0000, 0x59a2581c,
- 0x592c3814, 0x481f401c, 0x497b441d, 0x0101fd8c,
- 0x5c025800, 0x8d0c052a, 0x05000009, 0x60083800,
- 0x42000800, 0x25000000, 0x585c1800, 0x585c3001,
- 0x900c19c0, 0x901831c0, 0x0101fab2, 0x5c03e000,
- 0x5c034000, 0x5c00b800, 0x1c01f000, 0x910c0503,
- 0x011e07e7, 0x59340400, 0x82000580, 0x00000606,
- 0x011e07c1, 0x5934000d, 0x80027d40, 0x011e07f0,
- 0x5934000f, 0x59341203, 0x80080540, 0x05020021,
- 0x8d0c0512, 0x05000010, 0x0505f987, 0x05000017,
- 0x59a8008e, 0x80000040, 0x05fe07ff, 0x492e6009,
- 0x4936600a, 0x58d400ea, 0x8c000516, 0x05fe07fe,
- 0x83300400, 0x20000000, 0x4801a8e1, 0x80000580,
- 0x1c01f000, 0x5934000b, 0x80001920, 0x82000500,
- 0x0000ffff, 0x800c0480, 0x0502100a, 0x800c1800,
- 0x480e6c0b, 0x05fdf7e9, 0x8d0c0512, 0x05020005,
- 0x59341c0b, 0x800c1840, 0x480e6c0b, 0x59341203,
- 0x0501f803, 0x80000580, 0x1c01f000, 0x800811c0,
- 0x05020002, 0x64066a03, 0x59340010, 0x492e6810,
- 0x80000d40, 0x05020008, 0x492e680f, 0x592c0407,
- 0x800000c2, 0x800018c4, 0x800c0400, 0x48025804,
- 0x1c01f000, 0x492c0800, 0x05fdf7f9, 0x83440c80,
- 0x00000800, 0x05021009, 0x83440400, 0x0010a600,
- 0x50000000, 0x80000540, 0x05000004, 0x40026800,
- 0x80000580, 0x1c01f000, 0x90000541, 0x1c01f000,
- 0x59340203, 0x80000540, 0x0502002f, 0x4d300000,
- 0x4d2c0000, 0x5934000f, 0x80025d40, 0x05000028,
- 0x0505f941, 0x05000025, 0x592c0000, 0x4802680f,
- 0x80000540, 0x05020002, 0x48026810, 0x592c2a05,
- 0x4936600a, 0x82142d00, 0x000000ff, 0x90140592,
- 0x0500001e, 0xb01405b2, 0x0500001c, 0xb01405ba,
- 0x0500001a, 0x492e6009, 0x8d0c0512, 0x05000010,
+ 0x480750d1, 0x1c01f000, 0x59a800d1, 0x8c000502,
+ 0x05000009, 0x4a0350d2, 0x0000008b, 0x4a0350d3,
+ 0x0000008b, 0x4a0350d4, 0x0000008b, 0x641350d5,
+ 0x0501f00c, 0x8c000504, 0x05000006, 0x65bf50d2,
+ 0x65bf50d3, 0x65df50d4, 0x640350d5, 0x0501f005,
+ 0x64cf50d2, 0x64cf50d3, 0x649750d4, 0x640350d5,
+ 0x1c01f000, 0x9d56cdac, 0x00000000, 0x00000000,
+ 0x00112000, 0x0000317e, 0x00000000, 0x00000000,
+ 0x00020000, 0x000011a6, 0x916c0583, 0x01020177,
+ 0x42000000, 0x0010dd03, 0x50000000, 0x800001c0,
+ 0x05020a3e, 0x0501f9fb, 0x0501ffd5, 0x0501fb93,
+ 0x8d0c0516, 0x05000f50, 0x8d0c0516, 0x05000e06,
+ 0x59a800a2, 0x80000540, 0x01060ac5, 0x0505fc83,
+ 0x05fdf7ee, 0x835c0480, 0x00000104, 0x010411a5,
+ 0x416a5800, 0x592ed000, 0x497a5800, 0x497a5801,
+ 0x815eb840, 0x812e59c0, 0x1c01f000, 0x42007000,
+ 0x000211a7, 0x58380004, 0x49781000, 0x64001002,
+ 0x48087004, 0x80000d40, 0x05020006, 0x48087005,
+ 0x58380000, 0x80000540, 0x0500000a, 0x1c01f000,
+ 0x48080800, 0x05fdf7fb, 0x42007000, 0x000211a7,
+ 0x58380000, 0x80000540, 0x05000002, 0x1c01f000,
+ 0x58380807, 0x800409c0, 0x01060234, 0x58380005,
+ 0x80006d40, 0x05020002, 0x1c01f000, 0x58340000,
+ 0x48347001, 0x80000540, 0x05020002, 0x48007004,
+ 0x48007005, 0x4a03b805, 0x30000002, 0x58340007,
+ 0x59dc0806, 0x4803b800, 0x58340008, 0x4803b801,
+ 0x58340806, 0x4807b81f, 0x58340805, 0x58341003,
+ 0x58340001, 0x48047002, 0x48087003, 0x480bb803,
+ 0x8c000500, 0x05020004, 0x64087000, 0x6407c824,
+ 0x0501f004, 0x64047000, 0x6503c824, 0x0105f25b,
+ 0x58380802, 0x600011fe, 0x82040480, 0x0000ff00,
+ 0x05021003, 0x40041000, 0x80000580, 0x48007002,
+ 0x480bb802, 0x4a03b805, 0x10000002, 0x1c01f000,
+ 0x59dc0806, 0x4a03b805, 0x20000000, 0x8c04053e,
+ 0x05000009, 0x8c040508, 0x01020dda, 0x42007000,
+ 0x000211a7, 0x58380000, 0x90001484, 0x0c001003,
+ 0x0101fdda, 0x1c01f000, 0x00020036, 0x00020078,
+ 0x0002007f, 0x001014e8, 0x82040d00, 0x43200f80,
+ 0x01060268, 0x58380002, 0x80000540, 0x05000008,
+ 0x0105f25b, 0x82040d00, 0x43200f80, 0x01060268,
+ 0x58380002, 0x80000540, 0x05fe07d6, 0x58386001,
+ 0x58300009, 0x4a006002, 0x00000100, 0x64007000,
+ 0x80001540, 0x05fc07ab, 0x59dc0000, 0x48006007,
+ 0x59dc0001, 0x48006008, 0x0809f800, 0x05fdf79f,
+ 0x84040d1e, 0x59e00017, 0x8c00050c, 0x05020007,
+ 0x59a818a0, 0x800400c4, 0x800c1c00, 0x580c0003,
+ 0x8c000500, 0x05000008, 0x59a800a2, 0x4c000000,
+ 0x0105fab6, 0x5c000000, 0x80000540, 0x01060280,
+ 0x1c01f000, 0x4d2c0000, 0x4c040000, 0x4c0c0000,
+ 0x05fdff71, 0x5c001800, 0x5c000800, 0x05000014,
+ 0x82040400, 0x0010df60, 0x50000000, 0x48025806,
+ 0x64025801, 0x64125805, 0x64065804, 0x900c0402,
+ 0x48025803, 0x580c0000, 0x48025807, 0x580c0001,
+ 0x48025808, 0x4a025809, 0x000200bf, 0x4806580a,
+ 0x412c1000, 0x5c025800, 0x05fdf765, 0x5c025800,
+ 0x0105f2b6, 0x58300802, 0x82040580, 0x00000100,
+ 0x01060275, 0x4d2c0000, 0x40325800, 0x0105f993,
+ 0x5c025800, 0x0105f280, 0x59b800ea, 0x82000d00,
+ 0xf2000038, 0x010603f7, 0x8c000510, 0x010403f6,
+ 0x59ba60e0, 0x81300182, 0x0502104c, 0x05002030,
+ 0x8532653e, 0x59300407, 0x90000583, 0x0502002a,
+ 0x59300203, 0x90000584, 0x05020027, 0x59325809,
+ 0x59300004, 0x4a025a08, 0x00000103, 0x497a580d,
+ 0x8c00053e, 0x0502001a, 0x59300008, 0x82000500,
+ 0x04000800, 0x82000580, 0x04000800, 0x05000017,
+ 0x0501fa9c, 0x59325827, 0x812e59c0, 0x01060993,
+ 0x5932680a, 0x0505fef1, 0x5934000f, 0x8d0c0512,
+ 0x05020005, 0x5934140b, 0x80081040, 0x05001002,
+ 0x480a6c0b, 0x80000540, 0x05020a19, 0x59b800ea,
+ 0x8c000510, 0x05fe07d7, 0x1c01f000, 0x0145f8b9,
+ 0x05fc07e6, 0x0105f3ef, 0x59300221, 0x48025c13,
+ 0x05fdf7e8, 0x61567000, 0x0501f024, 0x83326500,
+ 0x3fffffff, 0x59300407, 0x90000583, 0x05020015,
+ 0x59325809, 0x5932680a, 0x4a025a08, 0x00000103,
+ 0x497a580d, 0x0501fa77, 0x59325827, 0x812e59c0,
+ 0x01060992, 0x0505fecd, 0x5934000f, 0x8d0c0512,
+ 0x05020005, 0x5934140b, 0x80081040, 0x05001002,
+ 0x480a6c0b, 0x80000540, 0x050209f5, 0x05fdf7dc,
+ 0x61527000, 0x0501f009, 0x83300500, 0x60000000,
+ 0x05000013, 0x81326580, 0x8000013a, 0x82000400,
+ 0x00100bfb, 0x50027000, 0x59300c07, 0x90040580,
+ 0x010403ef, 0x90040582, 0x010403ef, 0x59300004,
+ 0x8c00053e, 0x05020003, 0x0505fed4, 0x05fdf7c8,
+ 0x0145f8b9, 0x05fc07fd, 0x0105f3ef, 0x83300500,
+ 0x1f000000, 0x010403f1, 0x81326580, 0x80000130,
+ 0x90000c97, 0x01021dda, 0x1201f000, 0x00100bff,
+ 0x82000500, 0xf0000000, 0x82040d00, 0x0fffffff,
+ 0x80040d40, 0x4807c857, 0x59b800ea, 0x8c000516,
+ 0x0106051a, 0x480770e1, 0x1c01f000, 0x59325809,
+ 0x412c7000, 0x58380a08, 0x82040d00, 0x000000ff,
+ 0xb00405a8, 0x01040786, 0xb00405aa, 0x01040786,
+ 0xb00405ba, 0x0104079f, 0xb00405b2, 0x0104079f,
+ 0x58380a08, 0x9004050f, 0x82000c00, 0x001012ac,
+ 0x50044000, 0x0c01f001, 0x00100f85, 0x00100f85,
+ 0x00020168, 0x00100f85, 0x00100f85, 0x00100f85,
+ 0x00100f85, 0x00100f85, 0x00020176, 0x00100fa5,
+ 0x00100f85, 0x00100f85, 0x00100f85, 0x00100f85,
+ 0x00100f85, 0x00100f85, 0x5838040e, 0x8c000500,
+ 0x01000dda, 0x50200000, 0x80387c00, 0x583c1002,
+ 0x583c2800, 0x583c2001, 0x58380a0b, 0x58383013,
+ 0x59303808, 0x58380011, 0x48026014, 0x0501f00e,
+ 0x5838020e, 0x8c000502, 0x01040785, 0x50200000,
+ 0x80387c00, 0x583c2800, 0x583c2001, 0x583c1002,
+ 0x592c0a0b, 0x592c3013, 0x59303808, 0x497a6014,
+ 0x497a6015, 0x48166010, 0x48126011, 0x480a6012,
+ 0x481a6013, 0x80040840, 0x4806600f, 0x010607cc,
+ 0x841c3d40, 0x481e6008, 0x1c01f000, 0x4d2c0000,
+ 0x59325809, 0x592c0a08, 0x4807c857, 0x82040d00,
+ 0x000000ff, 0x9004050f, 0x1201f000, 0x001010f0,
+ 0x41787800, 0x59325809, 0x592c0c0e, 0x8c040502,
+ 0x01080120, 0x592c0011, 0x592c1013, 0x592c0a08,
+ 0x480a6013, 0x48026014, 0x48026015, 0x82040d00,
+ 0x000000ff, 0xb00405b2, 0x01080126, 0xb00405ba,
+ 0x01080126, 0x412c3000, 0x9004050f, 0x82000400,
+ 0x001012ac, 0x50003800, 0x8c3c050e, 0x05000002,
+ 0x801c3800, 0x501c0000, 0x592c1a0b, 0x4802600c,
+ 0x481a600d, 0x481e600e, 0x480e600f, 0x843c7d4a,
+ 0x403c1000, 0x1c01f000, 0x59e00004, 0x8c00050e,
+ 0x05fe06ac, 0x1c01f000, 0x42001000, 0x001105e7,
+ 0x5808000a, 0x80000540, 0x010a06ac, 0x4a001003,
+ 0x001105f1, 0x4c080000, 0x0501f812, 0x5c001000,
+ 0x4814100a, 0x480c1007, 0x48101008, 0x64001001,
+ 0x64101005, 0x64041004, 0x05fdf655, 0x58300802,
+ 0x82040580, 0x00000100, 0x010a06bb, 0x82300580,
+ 0x001105e7, 0x010a06b6, 0x4978600a, 0x1c01f000,
+ 0x61901800, 0x800c1840, 0x05000006, 0x64070000,
+ 0x40000000, 0x59800000, 0x8c000500, 0x05fc07fa,
+ 0x01080706, 0x600028f4, 0x58142024, 0x58141823,
+ 0x58142825, 0x64030000, 0x1c01f000, 0x4c000000,
+ 0x4df00000, 0x4203e000, 0xb0100000, 0x41f00000,
+ 0x81fe1500, 0x8d080512, 0x010e092d, 0x8d08051c,
+ 0x05060ccd, 0x8d080518, 0x05060d00, 0x8d08051a,
+ 0x05fe0ed6, 0x83080500, 0x00000d00, 0x05020804,
+ 0x5c03e000, 0x5c000000, 0x1801f000, 0x8d080516,
+ 0x010a0f6d, 0x8d080514, 0x05fe0fbc, 0x8d080508,
+ 0x010a0b68, 0x8d080500, 0x05060c27, 0x8d08050c,
+ 0x010e0830, 0x8d08050a, 0x010a049f, 0x1c01f000,
+ 0x42000000, 0x0010dd09, 0x50000000, 0x8c000504,
+ 0x05000013, 0x8c000508, 0x05020004, 0x8c000502,
+ 0x05020002, 0x1c01f000, 0x4df00000, 0x4203e000,
+ 0x50000000, 0x42034000, 0x0010dceb, 0x59a0001e,
+ 0x59a1d806, 0x84000502, 0x4803401e, 0x58ec0009,
+ 0x0801f800, 0x5c03e000, 0x1c01f000, 0x05027002,
+ 0x05026002, 0x1c01f000, 0x4df00000, 0x4203e000,
+ 0x50000000, 0x59e00020, 0xb0000d85, 0x05000003,
+ 0xb0000d84, 0x05020007, 0x4803c857, 0x42000800,
+ 0x000211a7, 0x58040800, 0x90040d80, 0x05020019,
+ 0x0105f982, 0x05000017, 0x412dd800, 0x48efc857,
+ 0x0125f8b5, 0x42034000, 0x0010dceb, 0x49a1d80b,
+ 0x48ef4006, 0x59a0001e, 0x84000544, 0x4803401e,
+ 0x59e00020, 0x4803c857, 0x59e00021, 0x4803c857,
+ 0x59e00022, 0x4803c857, 0x59e00023, 0x4803c857,
+ 0x59e00024, 0x4803c857, 0x0115f957, 0x0115f96f,
+ 0x5c03e000, 0x1c01f000, 0x4c5c0000, 0x4da00000,
+ 0x4df00000, 0x4203e000, 0x50000000, 0x05006062,
+ 0x42034000, 0x0010dceb, 0x59a01018, 0x59a01819,
+ 0x800c19c0, 0x05020009, 0x59a0381c, 0x801c39c0,
+ 0x01000dda, 0x49a3c857, 0x481fc857, 0x59a0041d,
+ 0x801c3c00, 0x0501f00a, 0x59a0041a, 0x90000402,
+ 0x4803441a, 0x90000c97, 0x05001003, 0x497b441a,
+ 0x41780000, 0x59a03817, 0x801c3c00, 0x401cb800,
+ 0x80081040, 0x480b4018, 0x581c0200, 0x4803c021,
+ 0x581c0401, 0x4803c022, 0x581c0201, 0x4803c023,
+ 0x581c0400, 0x4803c020, 0x900001c0, 0x90000552,
+ 0x4803c011, 0x8d0c0530, 0x0500000f, 0x4c080000,
+ 0x4c0c0000, 0x4c1c0000, 0x59e00017, 0x8c00050a,
+ 0x05000004, 0x60000800, 0x05fdfe16, 0x0501f003,
+ 0x8c000500, 0x05fe0f3d, 0x5c003800, 0x5c001800,
+ 0x5c001000, 0x6403c017, 0x4203e000, 0x30000001,
+ 0x800c19c0, 0x05000007, 0x800c1840, 0x480f4019,
+ 0x0502001b, 0x497b441a, 0x497b421a, 0x0501f018,
+ 0x800811c0, 0x0502000a, 0x4d2c0000, 0x59a2581c,
+ 0x0105f992, 0x5c025800, 0x497b401c, 0x497b401b,
+ 0x497b441d, 0x497b421d, 0x0501f00d, 0x59a0041d,
+ 0x90000402, 0x90000c96, 0x4803441d, 0x05001008,
+ 0x4d2c0000, 0x59a2581c, 0x592c3817, 0x481f401c,
+ 0x497b441d, 0x0105f992, 0x5c025800, 0x8d0c052a,
+ 0x05000009, 0x60083800, 0x42000800, 0x25000000,
+ 0x585c1800, 0x585c3001, 0x900c19c0, 0x901831c0,
+ 0x0101fea6, 0x5c03e000, 0x5c034000, 0x5c00b800,
+ 0x1c01f000, 0x8d0c0520, 0x05000003, 0x59a80005,
+ 0x8c000516, 0x1c01f000, 0x910c0503, 0x012a02dd,
+ 0x59340400, 0x82000580, 0x00000606, 0x012a02b7,
+ 0x5934000d, 0x80027d40, 0x012a02e6, 0x592c1003,
+ 0x5808020a, 0x8c000500, 0x05000005, 0x592c1813,
+ 0x5808000d, 0x800c0400, 0x4800100d, 0x5934000f,
+ 0x59341203, 0x80080540, 0x05020021, 0x8d0c0512,
+ 0x05000010, 0x0505fcf0, 0x05000017, 0x59a800d2,
+ 0x80000040, 0x05fe07ff, 0x492e6009, 0x4936600a,
0x58d400ea, 0x8c000516, 0x05fe07fe, 0x83300400,
- 0x20000000, 0x4801a8e1, 0x8d0c0512, 0x05fe07e2,
- 0x5934000b, 0x80001120, 0x82000500, 0x0000ffff,
- 0x80080480, 0x05fc17dc, 0x0501f005, 0x80081000,
- 0x480a6c0b, 0x05fdf7ef, 0x64066a03, 0x5c025800,
- 0x5c026000, 0x1c01f000, 0x497a5800, 0x4932580a,
- 0x641a6407, 0x641e6203, 0x0501f802, 0x05fdf7eb,
- 0x592e4408, 0x83224500, 0x000000ff, 0x83200400,
- 0x0010a3b3, 0x50024800, 0x4926601d, 0x592c020d,
- 0x48026202, 0x59240206, 0x8c000510, 0x012203cf,
- 0x8d0c050e, 0x012203cd, 0x59240200, 0x8c000516,
- 0x012203cb, 0x59340200, 0x8c000518, 0x012203c9,
- 0x64025a07, 0x8c000508, 0x012203c7, 0x492e6009,
- 0x4d3c0000, 0x417a7800, 0x0501ff96, 0x5c027800,
- 0x1c01f000, 0x58040001, 0x49680800, 0x49780801,
- 0x815eb800, 0x4006d000, 0x80000d40, 0x05fe07fa,
- 0x497a5801, 0x59c80000, 0x82000540, 0x00001200,
- 0x48039000, 0x1c01f000, 0x59980013, 0x48032823,
- 0x59d8010b, 0x48033014, 0x1c01f000, 0x592c0405,
- 0x8c00051e, 0x012600d6, 0x497a5800, 0x8d0c0526,
- 0x0502000d, 0x0502d007, 0x592c0001, 0x492fb107,
- 0x80000d40, 0x05fe0fe4, 0x0500e0de, 0x1c01f000,
- 0x0500e8dc, 0x05fcd7f9, 0x42000000, 0x0010b22f,
- 0x0151fa48, 0x0501f939, 0x0500d944, 0x0500e0d5,
- 0x59d80105, 0x82000d00, 0x01218780, 0x05020152,
- 0x1c01f000, 0x59980011, 0x0c01f001, 0x0002037b,
- 0x0002037c, 0x00020387, 0x000203c7, 0x1c01f000,
- 0x4df00000, 0x4203e000, 0x50000000, 0x0502694e,
- 0x05006003, 0x8d0c0520, 0x050209cb, 0x8d0c0526,
- 0x0502092e, 0x5c03e000, 0x1c01f000, 0x4df00000,
+ 0x20000000, 0x4801a8e1, 0x80000580, 0x1c01f000,
+ 0x5934000b, 0x80001920, 0x82000500, 0x0000ffff,
+ 0x800c0480, 0x0502100a, 0x800c1800, 0x480e6c0b,
+ 0x05fdf7e9, 0x8d0c0512, 0x05020005, 0x59341c0b,
+ 0x800c1840, 0x480e6c0b, 0x59341203, 0x0501f803,
+ 0x80000580, 0x1c01f000, 0x800811c0, 0x05020002,
+ 0x64066a03, 0x59340010, 0x492e6810, 0x80000d40,
+ 0x05020008, 0x492e680f, 0x592c040a, 0x800000c2,
+ 0x800018c4, 0x800c0400, 0x48025807, 0x1c01f000,
+ 0x492c0800, 0x05fdf7f9, 0x83440c80, 0x00000800,
+ 0x05021009, 0x83440400, 0x0010d400, 0x50000000,
+ 0x80000540, 0x05000004, 0x40026800, 0x80000580,
+ 0x1c01f000, 0x90000541, 0x1c01f000, 0x59340203,
+ 0x80000540, 0x05020036, 0x4d300000, 0x4d2c0000,
+ 0x5934000f, 0x80025d40, 0x0500002f, 0x0505fcaa,
+ 0x05000021, 0x592c0000, 0x4802680f, 0x80000540,
+ 0x05020002, 0x48026810, 0x592c2a08, 0x4936600a,
+ 0x4c080000, 0x012dfdc8, 0x5c001000, 0x05000025,
+ 0x492e6009, 0x8d0c0512, 0x05000010, 0x58d400ea,
+ 0x8c000516, 0x05fe07fe, 0x83300400, 0x20000000,
+ 0x4801a8e1, 0x8d0c0512, 0x05fe07e6, 0x5934000b,
+ 0x80001120, 0x82000500, 0x0000ffff, 0x80080480,
+ 0x05fc17e0, 0x0501f010, 0x80081000, 0x480a6c0b,
+ 0x05fdf7ef, 0x4c080000, 0x012dfdc8, 0x05020008,
+ 0x42000000, 0x0010e444, 0x0165ffdc, 0x015dfa53,
+ 0x05000003, 0x5c001000, 0x05fdf7d7, 0x5c001000,
+ 0x64066a03, 0x5c025800, 0x5c026000, 0x1c01f000,
+ 0x497a5800, 0x4932580d, 0x4a026007, 0x00068000,
+ 0x641e6203, 0x0501f802, 0x05fdf7df, 0x592e440b,
+ 0x83224500, 0x000000ff, 0x83200400, 0x0010d17b,
+ 0x50024800, 0x4926601d, 0x592c0210, 0x48026202,
+ 0x59240206, 0x8c000510, 0x012a070a, 0x8d0c050e,
+ 0x012a0708, 0x59240200, 0x8c000516, 0x012a0706,
+ 0x59340200, 0x8c000518, 0x012a0704, 0x64025a0a,
+ 0x8c000508, 0x012a0702, 0x492e6009, 0x4d3c0000,
+ 0x417a7800, 0x0505fac6, 0x5c027800, 0x1c01f000,
+ 0x58040001, 0x49680800, 0x49780801, 0x815eb800,
+ 0x4006d000, 0x80000d40, 0x05fe07fa, 0x497a5801,
+ 0x59c80000, 0x82000540, 0x00001200, 0x48039000,
+ 0x1c01f000, 0x59980005, 0x48032823, 0x59d8010b,
+ 0x48033006, 0x1c01f000, 0x59980005, 0x59747408,
+ 0x58387100, 0x483aec02, 0x4802e803, 0x1c01f000,
+ 0x592c0408, 0x8c00051e, 0x012e0618, 0x497a5800,
+ 0x8d0c0516, 0x05020003, 0x0501fa49, 0x0501f011,
+ 0x8d0c0526, 0x0502000d, 0x0502d007, 0x592c0001,
+ 0x492fb107, 0x80000d40, 0x05fe0fda, 0x0500e1c4,
+ 0x1c01f000, 0x0500e9c2, 0x05fcd7f9, 0x42000000,
+ 0x0010e3a8, 0x0165ffdf, 0x0501fa39, 0x0500da49,
+ 0x0500e1bb, 0x59d80105, 0x82000d00, 0x01238780,
+ 0x05020257, 0x1c01f000, 0x59980003, 0x0c01f001,
+ 0x000203a8, 0x000203a9, 0x00020421, 0x00020461,
+ 0x000203b7, 0x000204de, 0x1c01f000, 0x4df00000,
+ 0x4203e000, 0x50000000, 0x05026a8e, 0x05006003,
+ 0x8d0c0520, 0x05020b35, 0x830c0580, 0x00080800,
+ 0x82000500, 0x00080800, 0x05000a2e, 0x5c03e000,
+ 0x1c01f000, 0x4df00000, 0x4203e000, 0x50000000,
+ 0x59d8110a, 0x59d8010a, 0x80080580, 0x05fe07fd,
+ 0x59742c08, 0x59740003, 0x480aec09, 0x48082800,
+ 0x80000540, 0x05002011, 0x05000007, 0x59980004,
+ 0x90000585, 0x0500000d, 0x59a8009b, 0x81640580,
+ 0x0502000a, 0x58140100, 0x80080d80, 0x0500001f,
+ 0x59740c02, 0x80040d80, 0x0500000e, 0x59980805,
+ 0x4802ec02, 0x4806e803, 0x0500ead1, 0x8d0c0524,
+ 0x05020003, 0x5c03e000, 0x1c01f000, 0x59d8010b,
+ 0x59d8110a, 0x80080580, 0x05000010, 0x05fc67fa,
+ 0x05006013, 0x59740a09, 0x59e00017, 0x8c00050a,
+ 0x05020012, 0x8c04051e, 0x05020005, 0x59741202,
+ 0x800810e0, 0x90081554, 0x480bc011, 0x4807c017,
+ 0x4203e000, 0x30000001, 0x4a02e803, 0xffff0000,
+ 0x850e1d24, 0x0500eab6, 0x05fdf7e7, 0x850e1d64,
+ 0x0500eab3, 0x05fdf7e4, 0x4c040000, 0x05fdfc9d,
+ 0x5c000800, 0x8c04051e, 0x05fc07ed, 0x5c03e000,
+ 0x1c01f000, 0x592c0c08, 0x58040000, 0x58040900,
+ 0x80040580, 0x05000019, 0x592c0402, 0x80040580,
+ 0x05000005, 0x59980005, 0x48025803, 0x48065c02,
+ 0x1c01f000, 0x05006013, 0x592c0a09, 0x4a025803,
+ 0xffff0000, 0x59e00017, 0x8c00050a, 0x0502000e,
+ 0x8c04051e, 0x05020005, 0x592c0202, 0x800000e0,
+ 0x90000554, 0x4803c011, 0x4807c017, 0x4203e000,
+ 0x30000001, 0x1c01f000, 0x4a025803, 0xffff0000,
+ 0x1c01f000, 0x4c040000, 0x05fdfc76, 0x5c000800,
+ 0x8c04051e, 0x05fc07f1, 0x1c01f000, 0x4df00000,
0x4203e000, 0x50000000, 0x59940023, 0x80000540,
- 0x05002012, 0x05000007, 0x59980012, 0x90000585,
- 0x0500000e, 0x59a80065, 0x81640580, 0x0502000b,
+ 0x05002012, 0x05000007, 0x59980004, 0x90000585,
+ 0x0500000e, 0x59a8009b, 0x81640580, 0x0502000b,
0x59d8010b, 0x59d8110a, 0x80080d80, 0x05000023,
- 0x59980814, 0x80040d80, 0x05000013, 0x59980813,
- 0x48072823, 0x48033014, 0x0500e979, 0x8d0c0524,
- 0x05020005, 0x8d0c0526, 0x05020910, 0x5c03e000,
+ 0x59980806, 0x80040d80, 0x05000013, 0x59980805,
+ 0x48072823, 0x48033006, 0x0500ea55, 0x8d0c0524,
+ 0x05020005, 0x8d0c0526, 0x050209a6, 0x5c03e000,
0x1c01f000, 0x59d8110a, 0x59d8010a, 0x80080580,
0x05fe07fd, 0x59d8010b, 0x80080580, 0x0500000f,
0x05fc67f5, 0x05006012, 0x800810e0, 0x90081553,
0x480bc011, 0x60040800, 0x59e00017, 0x8c00050a,
0x0502000e, 0x8d0c0530, 0x0502000e, 0x6407c017,
0x4203e000, 0x30000001, 0x4a032823, 0xffff0000,
- 0x850e1d24, 0x0500e95a, 0x05fdf7e3, 0x850e1d64,
- 0x0500e957, 0x05fdf7e0, 0x05fdfcca, 0x05fdf7f4,
- 0x8c000500, 0x05fe0dea, 0x05fdf7f1, 0x4df00000,
+ 0x850e1d24, 0x0500ea36, 0x05fdf7e3, 0x850e1d64,
+ 0x0500ea33, 0x05fdf7e0, 0x05fdfc36, 0x05fdf7f4,
+ 0x8c000500, 0x05fe0d5d, 0x05fdf7f1, 0x4df00000,
0x4203e000, 0x50000000, 0x59b800e4, 0x8c000518,
0x0502001b, 0x830c0500, 0x00140000, 0x0502001b,
0x59940023, 0x80000540, 0x0500200c, 0x05000017,
- 0x59980012, 0x90000585, 0x05000008, 0x59a80065,
- 0x81640580, 0x05020005, 0x59a80063, 0x59a80862,
- 0x80040580, 0x0500000c, 0x0500e939, 0x05006004,
- 0x8d0c0524, 0x0502000a, 0x0501f94d, 0x8d0c0526,
- 0x050208ce, 0x5c03e000, 0x1c01f000, 0x4a0370e4,
+ 0x59980004, 0x90000585, 0x05000008, 0x59a8009b,
+ 0x81640580, 0x05020005, 0x59a80099, 0x59a80898,
+ 0x80040580, 0x0500000c, 0x0500ea15, 0x05006004,
+ 0x8d0c0524, 0x0502000a, 0x0501fa4a, 0x8d0c0526,
+ 0x05020964, 0x5c03e000, 0x1c01f000, 0x4a0370e4,
0x00002000, 0x850e1d68, 0x0500604c, 0x59d8090a,
0x59d8010a, 0x80041580, 0x05fe07fd, 0x59d8190b,
- 0x800c1580, 0x59981014, 0x480f3014, 0x05000037,
- 0x0501f844, 0x59980015, 0x483b3015, 0x0500000d,
+ 0x800c1580, 0x59981006, 0x480f3006, 0x05000037,
+ 0x0501f844, 0x59980007, 0x483b3007, 0x0500000d,
0x8d0c0528, 0x05020021, 0x80380580, 0x05020004,
- 0x40080000, 0x800c0580, 0x0500001c, 0x59980013,
+ 0x40080000, 0x800c0580, 0x0500001c, 0x59980005,
0x48032823, 0x830e1d00, 0xffebffff, 0x05fdf7e0,
0x8d0c0528, 0x05020004, 0x40080000, 0x800c0580,
0x05fe07f7, 0x800408e0, 0x90040d53, 0x60041000,
@@ -23678,3445 +13852,2129 @@ static const uint32_t isp_2500_multi_risc_code[] = {
0x30000001, 0x4a032823, 0xffff0000, 0x830e1d00,
0xffebffff, 0x05fdf7ca, 0x800408e0, 0x90040d5d,
0x60001000, 0x05fdf7ef, 0x4c080000, 0x40080800,
- 0x05fdfc6c, 0x5c001000, 0x05fdf7f0, 0x8c000500,
- 0x05fc07ee, 0x4c080000, 0x40080800, 0x05fdfd88,
- 0x5c001000, 0x05fdf7e9, 0x0501f80e, 0x59980015,
- 0x483b3015, 0x05fc07e8, 0x80380580, 0x05000003,
+ 0x05fdfbd8, 0x5c001000, 0x05fdf7f0, 0x8c000500,
+ 0x05fc07ee, 0x4c080000, 0x40080800, 0x05fdfcfb,
+ 0x5c001000, 0x05fdf7e9, 0x0501f80e, 0x59980007,
+ 0x483b3007, 0x05fc07e8, 0x80380580, 0x05000003,
0x8d0c0528, 0x05fc07ce, 0x912801c0, 0x90000d5c,
0x60001000, 0x05fdf7d7, 0x850e1d64, 0x05fdf7a7,
0x59e0000f, 0x59e0680f, 0x80346d80, 0x05fe07fd,
0x40025000, 0x59e00010, 0x59e07010, 0x80387580,
0x05fe07fd, 0x40007000, 0x81280580, 0x1c01f000,
- 0x59d81108, 0x915c04a0, 0x0500100f, 0x0502b00d,
- 0x480bb007, 0x05fce7fb, 0x59d80105, 0x82000500,
- 0x01218780, 0x05020078, 0x8d0c0522, 0x05000012,
- 0x59940023, 0x80000540, 0x05fc2704, 0x1c01f000,
- 0x0500f00a, 0x49681000, 0x400ad000, 0x815eb800,
- 0x59c80000, 0x82000540, 0x00001200, 0x48039000,
- 0x05fee7ee, 0x05fdf7e7, 0x480ba807, 0x05fee7eb,
- 0x05fdf7e4, 0x05006018, 0x850e1d24, 0x59d8010a,
- 0x59d8090a, 0x80040580, 0x05fe07fd, 0x59d8010b,
+ 0x4df00000, 0x4203e000, 0x50000000, 0x59b800e4,
+ 0x8c000518, 0x05020067, 0x59d8110a, 0x59d8010a,
+ 0x80080580, 0x05fe07fd, 0x59742c08, 0x59740003,
+ 0x480aec09, 0x48082800, 0x80000540, 0x05002015,
+ 0x0500000b, 0x59980004, 0x90000585, 0x05000011,
+ 0x59a8009b, 0x81640580, 0x0502000e, 0x59a80099,
+ 0x59a80898, 0x80040580, 0x0500002a, 0x58140100,
+ 0x80080d80, 0x05000013, 0x59740c02, 0x80040d80,
+ 0x05000024, 0x59980805, 0x4802ec02, 0x4806e803,
+ 0x0500e9a3, 0x8d0c0524, 0x05020019, 0x05006007,
+ 0x8d0c0528, 0x0502000b, 0x59940023, 0x80000540,
+ 0x05000008, 0x0501f9bb, 0x5c03e000, 0x1c01f000,
+ 0x4a02e803, 0xffff0000, 0x850e1d24, 0x0500e994,
+ 0x05fdffc0, 0x59980007, 0x483b3007, 0x05000031,
+ 0x80380580, 0x05000024, 0x8d0c0528, 0x05020022,
+ 0x59980005, 0x48032823, 0x05fdf7f0, 0x59d8010b,
+ 0x59d8110a, 0x80080580, 0x05fc07ee, 0x05fc67eb,
+ 0x05006016, 0x59740a09, 0x59e00017, 0x8c00050a,
+ 0x05020028, 0x8c04051e, 0x05020005, 0x59741202,
+ 0x800810e0, 0x90081554, 0x480bc011, 0x4807c017,
+ 0x4203e000, 0x30000001, 0x4a02e803, 0xffff0000,
+ 0x4a032823, 0xffff0000, 0x830e1d00, 0xffebffff,
+ 0x0500e96f, 0x05fdf7d5, 0x850e1d64, 0x0500e96c,
+ 0x05fdf7d2, 0x05fc67d1, 0x912801c0, 0x90000d5c,
+ 0x4807c011, 0x59e00017, 0x8c00050a, 0x60000800,
+ 0x05fe0b50, 0x6403c017, 0x4203e000, 0x30000001,
+ 0x4a032823, 0xffff0000, 0x850e1d28, 0x05fdf7c3,
+ 0x4a0370e4, 0x00002000, 0x850e1d68, 0x05fdf797,
+ 0x4c040000, 0x05fdfb43, 0x5c000800, 0x8c04051e,
+ 0x05fc07d7, 0x5c03e000, 0x1c01f000, 0x59d81108,
+ 0x835c0480, 0x00000104, 0x0500101c, 0x0502b01a,
+ 0x480bb007, 0x05fce7fa, 0x59d80105, 0x82000500,
+ 0x01238780, 0x05020096, 0x8d0c0522, 0x0500001f,
+ 0x8d0c0516, 0x0502000c, 0x59d8090a, 0x59d8010a,
+ 0x80040580, 0x05fe07fd, 0x59741003, 0x59740408,
+ 0x48040000, 0x4806ec09, 0x800811c0, 0x05fc260f,
+ 0x1c01f000, 0x59940023, 0x80000540, 0x05fc2606,
+ 0x1c01f000, 0x0500f00a, 0x49681000, 0x400ad000,
+ 0x815eb800, 0x59c80000, 0x82000540, 0x00001200,
+ 0x48039000, 0x05fee7e1, 0x05fdf7d9, 0x480ba807,
+ 0x05fee7de, 0x05fdf7d6, 0x05006024, 0x850e1d24,
+ 0x59d8010a, 0x59d8090a, 0x80040580, 0x05fe07fd,
+ 0x8d0c0516, 0x05000016, 0x59d8010b, 0x59d8110b,
+ 0x80081580, 0x05fe07fd, 0x80040580, 0x0500000f,
+ 0x800408e0, 0x8d0c0520, 0x05020016, 0x90040d53,
+ 0x4807c011, 0x59740a09, 0x59e00017, 0x8c00050a,
+ 0x05020031, 0x8d0c0530, 0x05020033, 0x4807c017,
+ 0x4203e000, 0x30000001, 0x1c01f000, 0x59740408,
+ 0x4806ec09, 0x48040000, 0x59740a02, 0x800408e0,
+ 0x90040d54, 0x05fdf7ef, 0x850e1d64, 0x1c01f000,
+ 0x59e0000f, 0x59b818e4, 0x59e0100f, 0x80081580,
+ 0x05fe07fc, 0x8c0c050c, 0x05fe07fa, 0x81281580,
+ 0x05000012, 0x40025000, 0x820c0500, 0x04000000,
+ 0x850e1d34, 0x810e1d40, 0x90040d5d, 0x4807c011,
+ 0x59e00017, 0x60000800, 0x8c00050a, 0x0502000e,
+ 0x8d0c0530, 0x05020010, 0x6403c017, 0x4203e000,
+ 0x30000001, 0x1c01f000, 0x40001000, 0x400c0000,
+ 0x810c0580, 0x8c000534, 0x40080000, 0x05fe07ea,
+ 0x05fdf7cb, 0x4c040000, 0x05fdfaca, 0x5c000800,
+ 0x05fdf7cf, 0x8c000500, 0x05fc07cd, 0x4c040000,
+ 0x05fdfbee, 0x5c000800, 0x05fdf7c9, 0x592c2802,
+ 0x801429c0, 0x0500000d, 0x58140804, 0x592c0001,
+ 0x492c2804, 0x800409c0, 0x05000005, 0x492c0800,
+ 0x80000d40, 0x05fe058f, 0x1c01f000, 0x492c2805,
+ 0x850e1d66, 0x05fdf7fb, 0x492fc857, 0x0105f19b,
+ 0x0502d00c, 0x59740805, 0x58040000, 0x4807b107,
+ 0x80000d40, 0x05020005, 0x4802e804, 0x850e1d26,
+ 0x4802e805, 0x1c01f000, 0x05fcd7f8, 0x05fdf7fd,
+ 0x59d80105, 0x82000500, 0x01238780, 0x05020004,
+ 0x42000000, 0x0010e3a8, 0x0165f7df, 0x4803c857,
+ 0x485fc857, 0x8c00050e, 0x01020dd3, 0x4203e000,
+ 0x50000000, 0x6010b900, 0x0101f5de, 0x4a03b104,
+ 0x10000000, 0x592c4408, 0x592c1409, 0x800800cc,
+ 0x592c2006, 0x80100400, 0x4803b100, 0x497bb102,
+ 0x59d80101, 0x4813b100, 0x592c0007, 0x4803b101,
+ 0x592c0208, 0x82000540, 0x00400000, 0x4803b103,
+ 0x58200900, 0x480bb10a, 0x4807b10b, 0x592c0001,
+ 0x4803b11f, 0x4a03b104, 0x10000001, 0x412ee800,
+ 0x1c01f000, 0x4df00000, 0x4203e000, 0x50000000,
+ 0x59741408, 0x58080900, 0x4807b10b, 0x8d0c0524,
+ 0x0502001a, 0x59d80106, 0x80000540, 0x05020017,
+ 0x59d80105, 0x82000500, 0x00006000, 0x05020013,
+ 0x599af808, 0x817ef9c0, 0x05000010, 0x41765800,
+ 0x592e5800, 0x592c1005, 0x800811c0, 0x05000006,
+ 0x412c0000, 0x81740580, 0x05fe0fcd, 0x05fdffb1,
+ 0x0501f006, 0x592c0003, 0x80000540, 0x05fc0dc6,
+ 0x817ef840, 0x05fe07f3, 0x5c03e000, 0x1c01f000,
+ 0x05fce71b, 0x59d80105, 0x82000500, 0x01238780,
+ 0x05fe07b7, 0x8d0c0524, 0x05020002, 0x1c01f000,
+ 0x59d8010a, 0x59d8090a, 0x80040580, 0x05fe07fd,
+ 0x850e1d24, 0x8d0c0516, 0x05000013, 0x59d8010b,
0x80040580, 0x0500000f, 0x800408e0, 0x8d0c0520,
- 0x0502000f, 0x90040d53, 0x4807c011, 0x60040800,
- 0x59e00017, 0x8c00050a, 0x0502002a, 0x8d0c0530,
- 0x0502002c, 0x4807c017, 0x4203e000, 0x30000001,
- 0x1c01f000, 0x850e1d64, 0x1c01f000, 0x59e0000f,
- 0x59b818e4, 0x59e0100f, 0x80081580, 0x05fe07fc,
- 0x8c0c050c, 0x05fe07fa, 0x81281580, 0x05000012,
- 0x40025000, 0x820c0500, 0x04000000, 0x850e1d34,
- 0x810e1d40, 0x90040d5d, 0x4807c011, 0x59e00017,
- 0x60000800, 0x8c00050a, 0x0502000e, 0x8d0c0530,
- 0x05020010, 0x6403c017, 0x4203e000, 0x30000001,
- 0x1c01f000, 0x40001000, 0x400c0000, 0x810c0580,
- 0x8c000534, 0x40080000, 0x05fe07ea, 0x05fdf7d2,
- 0x4c040000, 0x05fdfbef, 0x5c000800, 0x05fdf7d6,
- 0x8c000500, 0x05fc07d4, 0x4c040000, 0x05fdfd0c,
- 0x5c000800, 0x05fdf7d0, 0x59980816, 0x592c0001,
- 0x492f3016, 0x800409c0, 0x05000005, 0x492c0800,
- 0x80000d40, 0x05fe069c, 0x1c01f000, 0x492f3017,
- 0x850e1d66, 0x05fdf7fb, 0x0502d00c, 0x59980817,
- 0x58040000, 0x4807b107, 0x80000d40, 0x05020005,
- 0x48033016, 0x850e1d26, 0x48033017, 0x1c01f000,
- 0x05fcd7f8, 0x05fdf7fd, 0x59d80105, 0x82000500,
- 0x01218780, 0x05020004, 0x42000000, 0x0010b22f,
- 0x0151f248, 0x4803c857, 0x485fc857, 0x8c00050e,
- 0x010209e5, 0x4203e000, 0x50000000, 0x6010b900,
- 0x0101f1f3, 0x05fce777, 0x59d80105, 0x82000500,
- 0x01218780, 0x05fe07f4, 0x8d0c0524, 0x05020002,
- 0x1c01f000, 0x59d8010a, 0x59d8090a, 0x80040580,
- 0x05fe07fd, 0x850e1d24, 0x59d8010b, 0x80040580,
- 0x0500000f, 0x800408e0, 0x8d0c0520, 0x0502000d,
- 0x90040d53, 0x4807c011, 0x60040800, 0x59e00017,
- 0x8c00050a, 0x05020021, 0x8d0c0530, 0x05020023,
- 0x4807c017, 0x4203e000, 0x30000001, 0x1c01f000,
+ 0x05020014, 0x90040d53, 0x4807c011, 0x59740a09,
+ 0x59e00017, 0x8c00050a, 0x05020028, 0x8d0c0530,
+ 0x0502002a, 0x4807c017, 0x4203e000, 0x30000001,
+ 0x1c01f000, 0x59740408, 0x4806ec09, 0x48040000,
+ 0x59740a02, 0x800408e0, 0x90040d54, 0x05fdf7ef,
0x59e0000f, 0x59b818e4, 0x59e0100f, 0x80081580,
0x05fe07fc, 0x8c0c050c, 0x05fe07fa, 0x81281580,
0x0500001c, 0x40025000, 0x820c0500, 0x04000000,
0x850e1d34, 0x810e1d40, 0x90040d5d, 0x4807c011,
0x59e00017, 0x60000800, 0x8c00050a, 0x05020007,
0x8d0c0530, 0x05020009, 0x6403c017, 0x4203e000,
- 0x30000001, 0x1c01f000, 0x4c040000, 0x05fdfb85,
- 0x5c000800, 0x05fdf7df, 0x8c000500, 0x05fc07dd,
- 0x4c040000, 0x05fdfca2, 0x5c000800, 0x05fdf7d9,
+ 0x30000001, 0x1c01f000, 0x4c040000, 0x05fdfa15,
+ 0x5c000800, 0x05fdf7d8, 0x8c000500, 0x05fc07d6,
+ 0x4c040000, 0x05fdfb39, 0x5c000800, 0x05fdf7d2,
0x40001000, 0x400c0000, 0x810c0580, 0x8c000534,
- 0x40080000, 0x05fe07e0, 0x05fdf7ca, 0x59da5908,
+ 0x40080000, 0x05fe07e0, 0x05fdf7c3, 0x59da5908,
0x496a5800, 0x412ed000, 0x815eb800, 0x05fce7fc,
0x59c80000, 0x82000540, 0x00001200, 0x48039000,
- 0x59d8090b, 0x59980014, 0x48073014, 0x80040480,
+ 0x59d8090b, 0x59980006, 0x48073006, 0x80040480,
0x05020004, 0x59940023, 0x80000540, 0x05022003,
- 0x59980813, 0x48072823, 0x59d80105, 0x82000500,
- 0x01218780, 0x05fe0798, 0x1c01f000, 0x59981015,
- 0x59e00010, 0x59e00810, 0x80041d80, 0x05fe07fd,
- 0x80080580, 0x0500000d, 0x48073015, 0x59e0000f,
+ 0x59980805, 0x48072823, 0x59d80105, 0x82000500,
+ 0x01238780, 0x05fe0752, 0x1c01f000, 0x59da5908,
+ 0x496a5800, 0x412ed000, 0x815eb800, 0x05fce7fc,
+ 0x59c80000, 0x82000540, 0x00001200, 0x48039000,
+ 0x59740c08, 0x58040900, 0x4807b10b, 0x59740402,
+ 0x4806ec02, 0x80040480, 0x05020004, 0x59740003,
+ 0x80000540, 0x05022003, 0x59980805, 0x4806e803,
+ 0x59d8090a, 0x59d8010a, 0x80040580, 0x05fe07fd,
+ 0x59740408, 0x48040000, 0x4806ec09, 0x59d80105,
+ 0x82000500, 0x01238780, 0x05fe0731, 0x1c01f000,
+ 0x59981007, 0x59e00010, 0x59e00810, 0x80041d80,
+ 0x05fe07fd, 0x80080580, 0x0500000d, 0x48073007,
+ 0x59e0000f, 0x59e0100f, 0x80081d80, 0x05fe07fd,
+ 0x81280580, 0x0500000d, 0x400a5000, 0x40080000,
+ 0x80040580, 0x05fe04a0, 0x1c01f000, 0x59e0000f,
0x59e0100f, 0x80081d80, 0x05fe07fd, 0x81280580,
- 0x0500000d, 0x400a5000, 0x40080000, 0x80040580,
- 0x05fe0616, 0x1c01f000, 0x59e0000f, 0x59e0100f,
- 0x80081d80, 0x05fe07fd, 0x81280580, 0x05fc07fa,
- 0x400a5000, 0x59940023, 0x80000540, 0x05fc27f3,
- 0x1c01f000, 0x59e0000f, 0x59b818e4, 0x59e0100f,
- 0x80080d80, 0x05fe07fc, 0x8c0c050c, 0x05fe07fa,
- 0x81280580, 0x05020006, 0x400c0000, 0x810c0580,
- 0x8c000534, 0x05020002, 0x1c01f000, 0x820c0500,
- 0x04000000, 0x850e1d34, 0x810e1d40, 0x400a5000,
- 0x900811c0, 0x9008155c, 0x480bc011, 0x59e00017,
- 0x60000800, 0x8c00050a, 0x05020007, 0x8d0c0530,
- 0x05020007, 0x6403c017, 0x4203e000, 0x30000001,
- 0x1c01f000, 0x05fdfb1f, 0x05fdf7fb, 0x8c000500,
- 0x05fe0c3f, 0x05fdf7f8, 0x41700000, 0x0c01f001,
- 0x00104f1e, 0x0002057d, 0x00104f1e, 0x00020639,
- 0x00104f1d, 0x00104f1d, 0x00104f1d, 0x00104f1d,
- 0x0010547e, 0x0501002e, 0x59980004, 0x80000540,
- 0x05020032, 0x0502c018, 0x6042f800, 0x4df00000,
- 0x4203e000, 0x50000000, 0x49db3003, 0x59da5808,
- 0x592c2a05, 0x497a5800, 0x497a5801, 0x82140500,
- 0x000000ff, 0xb0000cbb, 0x0502102d, 0x0c01f82f,
+ 0x05fc07fa, 0x400a5000, 0x59940023, 0x80000540,
+ 0x05fc27f3, 0x1c01f000, 0x59e0000f, 0x59b818e4,
+ 0x59e0100f, 0x80080d80, 0x05fe07fc, 0x8c0c050c,
+ 0x05fe07fa, 0x81280580, 0x05020006, 0x400c0000,
+ 0x810c0580, 0x8c000534, 0x05020002, 0x1c01f000,
+ 0x820c0500, 0x04000000, 0x850e1d34, 0x810e1d40,
+ 0x400a5000, 0x900811c0, 0x9008155c, 0x480bc011,
+ 0x59e00017, 0x60000800, 0x8c00050a, 0x05020007,
+ 0x8d0c0530, 0x05020007, 0x6403c017, 0x4203e000,
+ 0x30000001, 0x1c01f000, 0x05fdf98e, 0x05fdf7fb,
+ 0x8c000500, 0x05fe0ab5, 0x05fdf7f8, 0x4d2c0000,
+ 0x599af802, 0x817ef9c0, 0x05000008, 0x40f25800,
+ 0x592c020a, 0x8c000500, 0x05020806, 0x592e5801,
+ 0x817ef840, 0x05fe07fb, 0x5c025800, 0x1c01f000,
+ 0x59c40001, 0x82000500, 0x00018000, 0x82000d80,
+ 0x00018000, 0x05020004, 0x42000800, 0x64000000,
+ 0x0501f00f, 0x82000d80, 0x00010000, 0x05020004,
+ 0x42000800, 0x32000000, 0x0501f009, 0x82000d80,
+ 0x00008000, 0x05020004, 0x42000800, 0x19000000,
+ 0x0501f003, 0x42000800, 0x0c800000, 0x592c1411,
+ 0x013dff72, 0x40041000, 0x40000800, 0x61a00007,
+ 0x013dff8e, 0x480a580f, 0x1c01f000, 0x592c020a,
+ 0x84000502, 0x592c080d, 0x48025a0a, 0x4806580e,
+ 0x800409c0, 0x05000020, 0x592c000f, 0x80041480,
+ 0x0500100f, 0x0500001b, 0x82080480, 0x000003e8,
+ 0x05001018, 0x480a580d, 0x592c0210, 0x80000040,
+ 0x05000015, 0x80000040, 0x05000003, 0x48025a10,
+ 0x1c01f000, 0x64065a10, 0x1c01f000, 0x80081080,
+ 0x80081000, 0x82080480, 0x000003e8, 0x05001009,
+ 0x497a580d, 0x592c0210, 0x90000402, 0x82001500,
+ 0x00000f00, 0x05020005, 0x48025a10, 0x1c01f000,
+ 0x497a580d, 0x1c01f000, 0x4a025a10, 0x000000ff,
+ 0x1c01f000, 0x4df00000, 0x4203e000, 0x50000000,
+ 0x599af802, 0x817ef9c0, 0x0500003e, 0x4178c000,
+ 0x59d8080b, 0x59d8000b, 0x80040580, 0x05fe07fd,
+ 0x58f00200, 0x48040100, 0x4805e20c, 0x59d8000a,
+ 0x80040580, 0x05020033, 0x59d80005, 0x82000500,
+ 0x00006000, 0x0502002f, 0x0500c02e, 0x91700582,
+ 0x0500002c, 0x91700588, 0x0500002a, 0x40f25800,
+ 0x592e5801, 0x592cba0a, 0x592c000d, 0x80000540,
+ 0x05000005, 0x8c5c0502, 0x05020003, 0x4200c000,
+ 0xffffffff, 0x592c4200, 0x592c020c, 0x58201000,
+ 0x40002000, 0x80080580, 0x05000014, 0x412c0000,
+ 0x80f00580, 0x05020009, 0x8c5c0502, 0x05000003,
+ 0x80600000, 0x05000013, 0x0501f81d, 0x480bb00a,
+ 0x5c03e000, 0x1c01f000, 0x8c5c0502, 0x05020014,
+ 0x4a03b004, 0x10000000, 0x4971e410, 0x0501f831,
+ 0x5c03e000, 0x1c01f000, 0x817ef840, 0x05fe07dd,
+ 0x80600000, 0x05000003, 0x80625d58, 0x05020003,
+ 0x5c03e000, 0x1c01f000, 0x592c4200, 0x592c220c,
+ 0x58201000, 0x592cba0a, 0x05fdf7ee, 0x8060c1c0,
+ 0x05fe07f2, 0x412cc000, 0x05fdf7f0, 0x916c0583,
+ 0x05020017, 0x8c5c0500, 0x05000007, 0x8c5c0502,
+ 0x05020005, 0x592c000d, 0x592c080f, 0x80040480,
+ 0x05001010, 0x40100000, 0x80080c80, 0x05021003,
+ 0x592c040a, 0x80040c00, 0x592c0210, 0x80041c80,
+ 0x05021002, 0x1c01f000, 0x80101400, 0x592c040a,
+ 0x80080480, 0x05001002, 0x40001000, 0x1c01f000,
+ 0x845cbd42, 0x485e5a0a, 0x40101000, 0x1c01f000,
+ 0x801000cc, 0x592c2808, 0x80140400, 0x4803b000,
+ 0x497bb002, 0x59d80001, 0x4817b000, 0x592c0009,
+ 0x4803b001, 0x4813b00b, 0x592ee410, 0x592c040a,
+ 0x82000540, 0x00400000, 0x4803b003, 0x05fdffd4,
+ 0x480bb00a, 0x592c000b, 0x4803b01f, 0x4a03b004,
+ 0x10000001, 0x412de000, 0x1c01f000, 0x41700000,
+ 0x0c01f001, 0x001064bd, 0x000207ec, 0x001064bd,
+ 0x000208b8, 0x001064bc, 0x001064bc, 0x001064bc,
+ 0x001064bc, 0x00106bd4, 0x05010035, 0x59980000,
+ 0x80000540, 0x013604e2, 0x0502c01f, 0x6062f800,
+ 0x4df00000, 0x4203e000, 0x50000000, 0x49db3001,
+ 0x59da5808, 0x592c2a08, 0x58f00812, 0x800409c0,
+ 0x05000031, 0x58f0000b, 0x48025804, 0x48065802,
+ 0x48f25803, 0x497a5800, 0x497a5801, 0x82140500,
+ 0x000000ff, 0xb0000cbb, 0x05021024, 0x0c01f838,
0x5c03e000, 0x817ef840, 0x05000007, 0x916c0583,
0x05020005, 0x91700581, 0x0502000e, 0x05010015,
- 0x05fcc7eb, 0x0500fb67, 0x0500b353, 0x59d40005,
- 0x82000500, 0x43218780, 0x012a020f, 0x59d80005,
- 0x82000500, 0x43218780, 0x012a0215, 0x1c01f000,
- 0x91700583, 0x05000894, 0x91700581, 0x05fe07f2,
- 0x05010004, 0x05fcc7da, 0x05fdf7ef, 0x6042f800,
- 0x4df00000, 0x4203e000, 0x50000000, 0x49d73003,
- 0x59d65808, 0x05fdf7d7, 0x4df00000, 0x4203e000,
- 0x50000000, 0x40025800, 0x592c2a05, 0x497b3003,
- 0x497b3004, 0x6042f800, 0x05fdf7d1, 0x0125ff6f,
- 0x5c03e000, 0x05fdf7dc, 0x00104f6f, 0x00104f6f,
- 0x00104f6f, 0x00104f6f, 0x00104ff7, 0x00104f6f,
- 0x00104f6f, 0x00104f6f, 0x00104f6f, 0x00104f6f,
- 0x00104f7b, 0x00104f6f, 0x00104f6f, 0x00104f6f,
- 0x00105014, 0x00104f6f, 0x00104f6f, 0x00104f6f,
- 0x000207b6, 0x00104f6f, 0x0002085f, 0x00104f6f,
- 0x00104f6f, 0x00104f6f, 0x00020655, 0x00104f6f,
- 0x00104f6f, 0x00104f6f, 0x00104f6f, 0x00104f6f,
- 0x00104f6f, 0x00104f6f, 0x00104f6f, 0x00104f6f,
- 0x00104f6f, 0x00104f6f, 0x00104f6f, 0x00104f6f,
- 0x00104f6f, 0x00104f6f, 0x00104f6f, 0x00104fbd,
- 0x00104f6f, 0x00104f6f, 0x00104f6f, 0x00104f6f,
- 0x00104f6f, 0x00104f6f, 0x00105221, 0x00105370,
- 0x00104f6f, 0x001051b1, 0x00104f6f, 0x00104f6f,
- 0x00104f6f, 0x00104f6f, 0x00104f6f, 0x001051f6,
- 0x00104f6f, 0x00104f6f, 0x00104f6f, 0x00104f6f,
- 0x00104f6f, 0x00104f6f, 0x00104f6f, 0x00104f6f,
- 0x00104f6f, 0x00104f6f, 0x00104f6f, 0x00104f6f,
- 0x00104f6f, 0x00104f6f, 0x0010544c, 0x00104f6f,
- 0x00104f6f, 0x00104f6f, 0x00104f6f, 0x00104f6f,
- 0x00104f6f, 0x00104f6f, 0x00104f6f, 0x00104f6f,
- 0x000208bc, 0x0010541a, 0x00104f6f, 0x00105442,
- 0x00104f6f, 0x00104f6f, 0x00104f6f, 0x00104f6f,
- 0x00104f6f, 0x00104f6f, 0x00104f6f, 0x00104f6f,
- 0x00104f6f, 0x00104f6f, 0x00104f6f, 0x00104f6f,
- 0x00104f6f, 0x00104f6f, 0x00104f6f, 0x00104f6f,
- 0x00104f6f, 0x00104f6f, 0x00020660, 0x00104f6f,
- 0x00020668, 0x00104f6f, 0x00104f6f, 0x00104f6f,
- 0x00104f6f, 0x00104f6f, 0x00104f6f, 0x00104f6f,
- 0x0002080f, 0x00104f6f, 0x00104f6f, 0x00104f6f,
- 0x00104f6f, 0x00104f6f, 0x00104f6f, 0x00104f6f,
- 0x00020668, 0x4df00000, 0x4203e000, 0x50000000,
- 0x59981003, 0x800811c0, 0x01240722, 0x58080005,
- 0x82000d00, 0x43218780, 0x012a0215, 0x8c000508,
- 0x01240720, 0x580a5808, 0x592c0205, 0x497a5800,
- 0x497a5801, 0x82000500, 0x000000ff, 0xb0000c8b,
- 0x0126171f, 0x1201f800, 0x00104f24, 0x5c03e000,
- 0x91700583, 0x05fc07e8, 0x0500faae, 0x0500b29a,
- 0x1c01f000, 0x80140110, 0x80000040, 0x0500013a,
- 0x01241775, 0x4a033006, 0x00020791, 0x48033000,
- 0x492f3001, 0x492f3002, 0x600ee000, 0x1c01f000,
- 0x497a5802, 0x80140110, 0x80000040, 0x01240775,
- 0x01241775, 0x4a033006, 0x000206f8, 0x05fdf7f4,
- 0x497a5802, 0x80140110, 0x80000040, 0x01260775,
- 0x592c0208, 0x82000480, 0x00001001, 0x01261781,
- 0x592c0014, 0xb0000580, 0x01260781, 0x4d2c0000,
- 0x0101fd69, 0x05000010, 0x412c6800, 0x5c025800,
- 0x600ae000, 0x42001000, 0x0010cf3b, 0x592c2012,
- 0x592c2813, 0x90340402, 0x48001003, 0x48101006,
- 0x48141007, 0x48341009, 0x492c100a, 0x05fdf999,
- 0x1c01f000, 0x5c025800, 0x492f3000, 0x6022e000,
- 0x4a033005, 0x0002068b, 0x1c01f000, 0x6006e000,
- 0x412c6800, 0x599a5800, 0x05fdf7ea, 0x4d2c0000,
- 0x5832580a, 0x592c5a05, 0x4978600a, 0x812e59c0,
- 0x012407b5, 0x58300002, 0x82000580, 0x00000100,
- 0x0126079b, 0x42000000, 0x0010cf3a, 0x50007000,
- 0x58306809, 0x58340002, 0x592c0806, 0x80040580,
- 0x0126079f, 0x58340803, 0x58341004, 0x58341805,
- 0x48065812, 0x480a5813, 0x480e5814, 0x822c0d80,
- 0x0000016a, 0x0502000e, 0x592c0a0b, 0x58342c06,
- 0x5834180c, 0x5834200d, 0x5834100e, 0x8c040504,
- 0x0502000e, 0x8c140510, 0x05020011, 0x480c6809,
- 0x4810680a, 0x4808680b, 0x0501f035, 0x592c0c0b,
- 0x90040d04, 0x592c0408, 0x80000110, 0x90000508,
- 0x80040d40, 0x05fdf7ee, 0x82080500, 0xffff0003,
- 0x0126079f, 0x8c140510, 0x05000016, 0x5834380f,
- 0x58344010, 0x58343011, 0x8c040506, 0x05000004,
- 0x82180500, 0xffff0003, 0x0126079f, 0x8c040504,
- 0x05020009, 0x8c040506, 0x0500001d, 0x481c7006,
- 0x48207007, 0x40181000, 0x603c3000, 0x607c3800,
- 0x0501f00f, 0x481c7010, 0x48207011, 0x48187012,
- 0x60243000, 0x60203800, 0x8c140510, 0x05000006,
- 0x60303000, 0x60683800, 0x8c040506, 0x05020002,
- 0x60603800, 0x480c7006, 0x48107007, 0x481c700f,
- 0x492c700a, 0x4818700d, 0x4834700b, 0x48365801,
- 0x65286805, 0x5c025800, 0x0129f46c, 0x48365801,
- 0x65286805, 0x6006e000, 0x40341000, 0x822c0580,
- 0x0000016a, 0x05020004, 0x0501f80e, 0x5c025800,
- 0x1c01f000, 0x0501f92e, 0x5c025800, 0x1c01f000,
- 0x592c0001, 0x80001540, 0x01240775, 0x58080a05,
- 0x82040d00, 0x000000ff, 0xb004058a, 0x0126077b,
- 0x58080406, 0x8c000510, 0x0500008f, 0x4d2c0000,
- 0x4c080000, 0x05fdf90e, 0x5c001000, 0x05000008,
- 0x412c6800, 0x5c025800, 0x48365802, 0x592c5a0b,
- 0x0501f80e, 0x05000084, 0x0125f781, 0x5c025800,
- 0x492f3000, 0x6022e000, 0x4a033005, 0x00020715,
- 0x1c01f000, 0x6006e000, 0x412c6800, 0x599a5800,
- 0x592c1001, 0x05fdf7f1, 0x592c2208, 0x58084809,
- 0x5808040a, 0x80004540, 0x0500004c, 0x80102480,
- 0x0500004a, 0x05001049, 0x90200483, 0x05001007,
- 0x0500000b, 0x0500100c, 0x40004000, 0x58081001,
- 0x90200485, 0x05fdf7fb, 0x40200000, 0x0c01f001,
- 0x0002076a, 0x00020744, 0x00020748, 0x58081001,
- 0x0501f008, 0x40200000, 0x0c01f001, 0x00020738,
- 0x0002073c, 0x00020740, 0x00020744, 0x00020748,
- 0x60180800, 0x42001800, 0x00100e1d, 0x0501f010,
- 0x60240800, 0x42001800, 0x00100e1e, 0x0501f00c,
- 0x60300800, 0x42001800, 0x00100e1f, 0x0501f008,
- 0x603c0800, 0x42001800, 0x00100e20, 0x0501f004,
- 0x60480800, 0x42001800, 0x00100e21, 0x40080000,
- 0x80043c00, 0x581c2800, 0x581c3001, 0x581c3802,
- 0x8c2c0502, 0x0500000e, 0x80102040, 0x0500000c,
- 0x90040592, 0x05000004, 0x90040c03, 0x800c1800,
- 0x0501f007, 0x58081001, 0x800811c0, 0x010009ef,
- 0x60180800, 0x42001800, 0x00100e1d, 0x48046806,
- 0x48086807, 0x480c6808, 0x48106809, 0x4814680a,
- 0x4818680b, 0x481c680c, 0x4824680d, 0x6404680e,
- 0x80000580, 0x1c01f000, 0x90000541, 0x1c01f000,
- 0x592c0205, 0x82000500, 0x000000ff, 0xb00005a8,
- 0x05000007, 0x90000582, 0x05000005, 0x90000598,
- 0x05000003, 0x90000588, 0x05020018, 0x592c0001,
- 0x80001540, 0x05000015, 0x58080205, 0x82000500,
- 0x000000ff, 0xb000058a, 0x05020010, 0x58080406,
- 0x8c000510, 0x0500000d, 0x592c0002, 0x4d2c0000,
- 0x80025d40, 0x59a8000c, 0x812c0480, 0x05001008,
- 0x59a8000a, 0x812c0480, 0x05021005, 0x0101fd8c,
- 0x5c025800, 0x497a5802, 0x1c01f000, 0x5c025800,
- 0x05fdf7fe, 0x592e8a07, 0x83440c80, 0x000007f0,
- 0x01261781, 0x8d0c050e, 0x012607c5, 0x592e4411,
- 0x81224110, 0x83440400, 0x0010a600, 0x50000000,
- 0x80026d40, 0x012407d8, 0x59340013, 0x80000130,
- 0x81200580, 0x012607d8, 0x5934000a, 0x8c00052e,
- 0x012607de, 0x05fdfb02, 0x012607da, 0x1c01f000,
- 0x59980802, 0x59980000, 0x48065800, 0x492c0801,
- 0x492f3002, 0x80000040, 0x48033000, 0x05000002,
- 0x1c01f000, 0x599a5801, 0x59980006, 0x6006e000,
- 0x0801f800, 0x1c01f000, 0x80140110, 0x01240775,
- 0x80000040, 0x05020009, 0x592c240b, 0x8c100504,
- 0x0500000a, 0x592c0208, 0x82000c80, 0x00001001,
- 0x01261781, 0x0129f45c, 0x4a033006, 0x000207c5,
- 0x05fdf697, 0x592c240b, 0x592e8a07, 0x417a7800,
- 0x592e4408, 0x83224500, 0x000000ff, 0x83200580,
- 0x000000ff, 0x01280152, 0x83200400, 0x0010a3b3,
- 0x50024800, 0x83440c80, 0x000007f0, 0x012a114b,
- 0x83440c00, 0x0010a600, 0x50040000, 0x80026d40,
- 0x0128014d, 0x59340013, 0x80000130, 0x81200580,
- 0x012a014d, 0x59340002, 0x592c0809, 0x80040580,
- 0x82000500, 0x00ffffff, 0x01260781, 0x59243a00,
- 0x901c0503, 0x90000583, 0x012a0148, 0x592e600a,
- 0x497a5809, 0x83300480, 0x00110514, 0x0128116b,
- 0xa1300495, 0x012a1113, 0x592c0a0d, 0x59300202,
- 0x80040580, 0x012a016b, 0x4936600a, 0x4926601d,
- 0x8c10051c, 0x012a0107, 0x59240206, 0x8c000510,
- 0x012a0183, 0x8d0c050e, 0x012a00f3, 0x8c1c0516,
- 0x012a017a, 0x59340200, 0x8c000518, 0x012a0168,
- 0x59300c07, 0x90040586, 0x012a0186, 0x8c100508,
- 0x012a00e9, 0x59300809, 0x497a5804, 0x64025a07,
- 0x800409c0, 0x012a00ee, 0x59300416, 0x8c000516,
- 0x012a016e, 0x492e6009, 0x0501f2ce, 0x497a5802,
- 0x80140110, 0x01240775, 0x80000040, 0x01240775,
- 0x592c0a08, 0x82040c80, 0x00001001, 0x01261781,
- 0x4a033006, 0x0002081b, 0x05fdf641, 0x592c0001,
- 0x80001540, 0x01240775, 0x58080a05, 0x82040d00,
- 0x000000ff, 0xb004058a, 0x0126077b, 0x58080406,
- 0x8c000510, 0x0502001f, 0x6006e000, 0x592c240b,
- 0x8c100504, 0x05fc079d, 0x592c0205, 0x82000580,
- 0x0000017a, 0x05fc0799, 0x40087800, 0x592c0208,
- 0x82000480, 0x00001001, 0x01261781, 0x583c1809,
- 0x583c200a, 0x583c100b, 0x82080500, 0xffff0003,
- 0x01260781, 0x600ae000, 0x42000000, 0x0010cf3a,
- 0x50007000, 0x6420700f, 0x480c7006, 0x48107007,
- 0x492c700a, 0x6424700d, 0x483c700b, 0x0129f46c,
- 0x592c240b, 0x8c100504, 0x01260781, 0x4d2c0000,
- 0x4c080000, 0x05f9ffca, 0x5c001000, 0x0500000e,
- 0x412c6800, 0x5c025800, 0x592c5c0b, 0x802c5942,
- 0x48365802, 0x05fdfec9, 0x05fc0773, 0x0125f781,
- 0x6006e000, 0x412c6800, 0x599a5800, 0x592c1001,
- 0x05fdf7f6, 0x5c025800, 0x492f3000, 0x6022e000,
- 0x4a033005, 0x00020854, 0x1c01f000, 0x492fc857,
- 0x592e4411, 0x81224110, 0x0129fc09, 0x05020050,
- 0x592c0205, 0x80000112, 0x01260775, 0x592e8a07,
- 0x0121fdd0, 0x0502004a, 0x0121fd77, 0x0502004a,
- 0x592e780b, 0x493fc857, 0x8d3c053e, 0x05020005,
- 0x8d0c050e, 0x05020042, 0x0121fc8f, 0x01240781,
- 0x913c1d1f, 0x01240781, 0x592c0208, 0x82000c80,
- 0x00001000, 0x01261781, 0x800000c2, 0x800008c4,
- 0x8005d400, 0x592e9009, 0x592e980a, 0x5934080d,
- 0x800409c0, 0x05000004, 0x58041802, 0x800c19c0,
- 0x0502002b, 0x913c1d1f, 0x81780040, 0x80000000,
- 0x800c1902, 0x05fe17fe, 0x01260781, 0x0c01f001,
- 0x00020891, 0x00020893, 0x0002089c, 0x0002089e,
- 0x000208a0, 0x0141fd02, 0x0501f019, 0x0121fc69,
- 0x0500001d, 0x80e9d1c0, 0x012e0d03, 0x60168000,
- 0x417a9000, 0x417a9800, 0x0141fd0e, 0x0501f010,
- 0x61367000, 0x0501f004, 0x613a7000, 0x0501f002,
- 0x614a7000, 0x5934080d, 0x800409c0, 0x05000006,
- 0x4d3c0000, 0x40067800, 0x0121fc4d, 0x5c027800,
- 0x05000007, 0x0121fb5e, 0x01420d3d, 0x05000006,
- 0x8d3c053e, 0x0502000a, 0x1c01f000, 0x64c25a07,
- 0x0501f009, 0x64b25a07, 0x0501f007, 0x64a25a07,
- 0x0501f005, 0x64a65a07, 0x0501f003, 0x497a580a,
- 0x64025a07, 0x4a025a05, 0x00000103, 0x05fdf2a0,
- 0x492fc857, 0x80140110, 0x80000040, 0x05000002,
- 0x0125f775, 0x592c0208, 0x82000500, 0x000003ff,
- 0x48025a08, 0x8c000506, 0x05000003, 0xb0000530,
- 0x05020003, 0x8d0c050e, 0x05020014, 0x4a025a07,
- 0x0000dead, 0x592c0409, 0x82000500, 0x0000f0ff,
- 0x48025c09, 0x0121f823, 0x05020002, 0x1c01f000,
- 0x49425a07, 0x8058b1c0, 0x05000007, 0x0145fb46,
- 0x0501f80a, 0x44042800, 0x90580582, 0x05020002,
- 0x48082801, 0x05fdf27e, 0x60c68000, 0x60040800,
- 0x6004b000, 0x05fdf7f3, 0x592c0409, 0x80000118,
- 0x912c2c0a, 0x80142c00, 0x1c01f000, 0x492fc857,
- 0x641a5a09, 0x05fdf272, 0x492fc857, 0x64065a09,
- 0x05fdf26f, 0x4df00000, 0x4203e000, 0x50000000,
- 0x0502b00a, 0x915c04a0, 0x0500100c, 0x815eb840,
- 0x416a5800, 0x592ed000, 0x492fb007, 0x497a5800,
- 0x497a5801, 0x05fcb7f8, 0x59d80005, 0x82000500,
- 0x43218780, 0x012a0215, 0x5c03e000, 0x1c01f000,
- 0x4df00000, 0x4203e000, 0x50000000, 0x0502f00a,
- 0x915c04a0, 0x0500100c, 0x815eb840, 0x416a5800,
- 0x592ed000, 0x492fa807, 0x497a5800, 0x497a5801,
- 0x05fcf7f8, 0x59d40005, 0x82000500, 0x43218780,
- 0x012a020f, 0x5c03e000, 0x1c01f000, 0x40307000,
- 0x5838000a, 0x80025d40, 0x0500001c, 0x58380002,
- 0x82000580, 0x00000100, 0x0500001d, 0x4c380000,
- 0x592c0205, 0x82000500, 0x000000ff, 0x90000592,
- 0x0500000f, 0xb00005a0, 0x0500000d, 0x90000588,
- 0x0500000b, 0x592c0209, 0x8400054e, 0x48025a09,
- 0x497a5c09, 0x497a5c0a, 0x640a5a07, 0x4a025a05,
- 0x00000103, 0x05fdfa2e, 0x0501f003, 0x64425a07,
- 0x05fdfa2b, 0x5c007000, 0x6006e000, 0x4a007002,
- 0x00000100, 0x4978700f, 0x1c01f000, 0x58380004,
- 0x90000483, 0x0500007c, 0x5838100f, 0x8c080500,
- 0x05020014, 0x8c080506, 0x05020032, 0x600cb000,
- 0x912cac12, 0x58380009, 0x5838100c, 0x8008a400,
- 0x4c380000, 0x0151fb10, 0x5c007000, 0x5838000c,
- 0x90000403, 0x4800700c, 0x6404700f, 0x58380004,
- 0x90000483, 0x48007004, 0x90000583, 0x05000066,
- 0x5838000d, 0x80001d40, 0x05020021, 0x4c380000,
- 0x0101fd69, 0x5c007000, 0x0500000e, 0x4a025a05,
- 0x0000010a, 0x60181800, 0x480c700d, 0x5838000b,
- 0x80000540, 0x05020002, 0x5838000a, 0x40000800,
- 0x492c0801, 0x492c700b, 0x603c0800, 0x0501f014,
- 0x6022e000, 0x4a033005, 0x00020968, 0x1c01f000,
- 0x600ae000, 0x42000000, 0x0010cf3a, 0x50007000,
- 0x5838180f, 0x8c0c0506, 0x05020067, 0x05fdf7e8,
- 0x84081540, 0x4808700f, 0x5838180d, 0x583a580b,
- 0x400c0000, 0x60540800, 0x80040c80, 0x58381004,
- 0x5838000e, 0x41783000, 0x80000540, 0x05020004,
- 0x84183540, 0x90081483, 0x05000037, 0x40080000,
- 0x80040480, 0x05001002, 0x40080800, 0x4004b000,
- 0x412c0000, 0x800c0400, 0x4000a800, 0x58380009,
- 0x5838100c, 0x8008a400, 0x4c080000, 0x4c040000,
- 0x4c0c0000, 0x4c380000, 0x0151fb10, 0x5c007000,
- 0x5c001800, 0x5c000800, 0x40040000, 0x58381004,
- 0x80080480, 0x48007004, 0x90000583, 0x05000002,
- 0x84183500, 0x5c000000, 0x80041400, 0xb00804a0,
- 0x05020003, 0x84183542, 0x41781000, 0x400c0000,
- 0x80041c00, 0x900c0495, 0x05020003, 0x84183544,
- 0x40001800, 0x40080800, 0x4804700c, 0x480c700d,
- 0x40180000, 0x0c01f001, 0x000209b2, 0x000209b5,
- 0x000209b3, 0x000209b2, 0x00020953, 0x000209b5,
- 0x000209b3, 0x000209b2, 0x0101f9ef, 0x5838100e,
- 0x0129f46c, 0x5838080c, 0x90040402, 0x58381009,
- 0x80080400, 0x50001000, 0x800811c0, 0x05020041,
- 0x5838180f, 0x8c0c0506, 0x0502000b, 0x6006e000,
- 0x583a580a, 0x4978700a, 0x4978700f, 0x592c0205,
- 0x82000500, 0x000000ff, 0x90000592, 0x05fc05fe,
- 0x05fdf5c9, 0x8c0c0502, 0x05020028, 0x8c0c0508,
- 0x05000016, 0x5838080b, 0x5838000d, 0x80002d40,
- 0x0502000b, 0x4c380000, 0x0101fd69, 0x5c007000,
- 0x05fc0790, 0x412c0800, 0x583a580b, 0x48065801,
- 0x4a000a05, 0x0000010a, 0x60182800, 0x58381810,
- 0x58382011, 0x58381012, 0x80040c05, 0x480c0800,
- 0x48100801, 0x48080802, 0x6006e000, 0x583a580a,
- 0x4978700a, 0x4978700f, 0x592c0205, 0x82000d00,
- 0x000000ff, 0xb00405b2, 0x05fc05db, 0x592c1001,
- 0xb00405ba, 0x05fe0513, 0x58080406, 0x8c000510,
- 0x05fc05d5, 0x05fdf656, 0x8c0c0504, 0x05fe07ef,
- 0x840c1d44, 0x480c700f, 0x58381810, 0x58382011,
- 0x58381012, 0x480c7006, 0x48107007, 0x0129f46c,
- 0x58380009, 0x80040c00, 0x90381c06, 0x54041800,
- 0x80040800, 0x800c1800, 0x54041800, 0x0129f46c,
- 0x4df00000, 0x4203e000, 0x50000000, 0x5994002e,
- 0x80000540, 0x050000c6, 0x4c000000, 0x5c000000,
- 0x59947824, 0x4803282f, 0x803c0480, 0x05001004,
- 0x05000003, 0x48032824, 0x0501f01f, 0x41787800,
- 0x803c7800, 0x82000400, 0x000003e8, 0x05fc27fd,
- 0x48032824, 0x59a80079, 0x803c1400, 0x480b5079,
- 0x803c0040, 0x05000002, 0x483fc857, 0x59e40852,
- 0x59a8007a, 0x80040580, 0x05000004, 0x480bc857,
- 0x59e40052, 0x4803507a, 0x59940030, 0x803c0400,
- 0x48032830, 0x012dfdbc, 0x59940000, 0x90000580,
- 0x05020005, 0x59940030, 0x48032831, 0x497b2830,
- 0x64072800, 0x4c0c0000, 0x58d400e5, 0x8c000514,
- 0x05000013, 0x59940807, 0x59941006, 0x5994002f,
- 0x80081c80, 0x05001004, 0x05000003, 0x480f2806,
- 0x0501f00b, 0x80040840, 0x48072807, 0x05020004,
- 0x59940008, 0x0801f800, 0x0501f005, 0x400c0000,
- 0x900c1c0a, 0x05fc27f8, 0x480f2806, 0x5c001800,
- 0x4d180000, 0x59c80040, 0x8c000534, 0x05020025,
- 0x417a3000, 0x91947c09, 0x60042000, 0x58d400e5,
- 0x80100500, 0x05020007, 0x801020c4, 0x903c7c05,
- 0x811a3000, 0x91180585, 0x05fe07f9, 0x0501f019,
- 0x583c0801, 0x583c1000, 0x5994002f, 0x80080480,
- 0x05001005, 0x05000004, 0x48007800, 0x80000040,
- 0x05fe17f2, 0x80040840, 0x48047801, 0x05000006,
- 0x9000040a, 0x48007800, 0x05fc27fb, 0xb004053f,
- 0x05fdf7ea, 0x583c0004, 0x4c3c0000, 0x4c100000,
- 0x0801f800, 0x5c002000, 0x5c007800, 0x05fdf7e3,
- 0x5c023000, 0x59940023, 0x80001540, 0x05000007,
- 0x05002006, 0x5994002f, 0x80080480, 0x05021002,
- 0x80000580, 0x48032823, 0x59940026, 0x80000d40,
- 0x05000012, 0x59941025, 0x5994002f, 0x80080480,
- 0x05001005, 0x05000004, 0x48032825, 0x80000040,
- 0x0502100a, 0x80040840, 0x48072826, 0x05020004,
- 0x59940027, 0x0801f800, 0x0501f004, 0x9000040a,
- 0x48032825, 0x05fc27f8, 0x59940004, 0x80000d40,
- 0x05000012, 0x59941003, 0x5994002f, 0x80080480,
- 0x05001005, 0x05000004, 0x48032803, 0x80000040,
- 0x0502100a, 0x80040840, 0x48072804, 0x05020004,
- 0x59940005, 0x0801f800, 0x0501f004, 0x9000040a,
- 0x48032803, 0x05fc27f8, 0x59940029, 0x80000d40,
- 0x05000012, 0x59941028, 0x5994002f, 0x80080480,
- 0x05001005, 0x05000004, 0x48032828, 0x80000040,
- 0x0502100a, 0x80040840, 0x48072829, 0x05020004,
- 0x5994002a, 0x0801f800, 0x0501f004, 0x90000401,
- 0x48032828, 0x05fc27f8, 0x5994002c, 0x80000d40,
- 0x05000012, 0x5994102b, 0x5994002f, 0x80080480,
- 0x05001005, 0x05000004, 0x4803282b, 0x80000040,
- 0x0502100a, 0x80040840, 0x4807282c, 0x05020004,
- 0x5994002d, 0x0801f800, 0x0501f004, 0x9000040a,
- 0x4803282b, 0x05fc27f8, 0x5994082e, 0x5994002f,
- 0x80040480, 0x010019ef, 0x4803282e, 0x59940000,
- 0x0c01f001, 0x00020ad4, 0x00105d0a, 0x00105d74,
- 0x5c03e000, 0x1c01f000, 0x5994002e, 0x80000000,
- 0x4803282e, 0x4203e000, 0x70000000, 0x1c01f000,
- 0x813e79c0, 0x05020009, 0x59a80090, 0x80000040,
- 0x05fe07ff, 0x58d400ea, 0x8c000516, 0x05fe07fe,
- 0x91300400, 0x4801a8e1, 0x1c01f000, 0x5c000000,
- 0x4c000000, 0x4803c857, 0x4807c857, 0x0501f002,
- 0x60040800, 0x59325809, 0x832c0500, 0x00ff0000,
- 0x05000016, 0x592c1000, 0x59301808, 0x59302027,
- 0x801021c0, 0x05020022, 0x592c040b, 0x480a6009,
- 0x8c000510, 0x0502000e, 0x48065a07, 0x820c0500,
- 0x04000800, 0x82000580, 0x04000800, 0x05000015,
- 0x05fdf85b, 0x417a7800, 0x59300009, 0x641e6203,
- 0x80025d40, 0x05fe07d7, 0x1c01f000, 0x456a5800,
- 0x412ed000, 0x815eb800, 0x592c0001, 0x80000d40,
- 0x05020006, 0x59c80000, 0x82000540, 0x00001200,
- 0x48039000, 0x05fdf7f0, 0x05fdf837, 0x05fdf7ee,
- 0x59300021, 0x48025c10, 0x05fdf7ea, 0x497a6027,
- 0x45682000, 0x4012d000, 0x815eb800, 0x59c80000,
- 0x82000540, 0x00001200, 0x48039000, 0x05fdf7d7,
- 0x59300416, 0x8c000510, 0x05000002, 0x84040d52,
- 0x48066004, 0x497a6000, 0x497a6001, 0x58d400ea,
- 0x8c000516, 0x05fe07fe, 0x83300400, 0xa0000000,
- 0x4801a8e1, 0x1c01f000, 0x59300416, 0x8c000510,
- 0x05000002, 0x84040d52, 0x59300004, 0x82000500,
- 0x00000100, 0x80040d40, 0x48066004, 0x58d400ea,
- 0x8c000516, 0x05fe07fe, 0x83300400, 0x40000000,
- 0x4801a8e1, 0x1c01f000, 0x58d400ea, 0x82001500,
- 0x32000018, 0x0132018f, 0x8c000510, 0x0500002f,
- 0x58d410e0, 0x82080500, 0xfffff000, 0x0502000d,
- 0x900a350f, 0x80081108, 0x480bc857, 0x90080487,
- 0x010219ef, 0x90080481, 0x010019ef, 0x1201f000,
- 0x00106193, 0x84000510, 0x48026004, 0x0501f019,
- 0x840a653e, 0x59300804, 0x8c040520, 0x05fc07fa,
- 0x82040d00, 0xfffefeff, 0x48066004, 0x8c08053e,
- 0x05020009, 0x8c040514, 0x05000004, 0x05fdff8d,
- 0x0501f8fa, 0x0501f00b, 0x604e7000, 0x0501f915,
- 0x0501f008, 0x8c040514, 0x05000004, 0x05fdff85,
- 0x0501f8f2, 0x0501f003, 0x61267000, 0x0501f90d,
- 0x58d400ea, 0x82001500, 0x32000018, 0x0132018f,
- 0x8c000510, 0x05fe07d3, 0x1c01f000, 0x59bc00ea,
- 0x82001500, 0xb2000018, 0x013201b9, 0x8c000510,
- 0x05000007, 0x59bc10e0, 0x80080108, 0x900a350f,
- 0x4803c857, 0x1201f000, 0x001061bd, 0x1c01f000,
- 0x4d300000, 0x59bc00ea, 0x8c000510, 0x05fc07fe,
- 0x59be60e0, 0x813261c0, 0x010009ef, 0x59300804,
- 0x8c04051c, 0x05020065, 0x59300027, 0x80006d40,
- 0x05000062, 0x83180400, 0x00020bf0, 0x50001000,
- 0x5808020e, 0x8c000500, 0x0502005a, 0x5834080e,
- 0x8c040500, 0x0502002b, 0x5808000d, 0x50000000,
- 0x48001003, 0x5808080b, 0x80040c80, 0x5834000e,
- 0x8c000504, 0x05000007, 0x5834200a, 0x5834280b,
- 0x48101006, 0x48141007, 0x84000504, 0x4800680e,
- 0x58341809, 0x5834300c, 0x5834500d, 0x40180000,
- 0x80284480, 0x05021002, 0x40280000, 0x80000104,
- 0x80044480, 0x05001002, 0x40000800, 0xb0040480,
- 0x05001002, 0x61000800, 0x48041004, 0x800408c4,
- 0x48041005, 0x40040000, 0x80285480, 0x4828680d,
- 0x80184c80, 0x05000013, 0x4824680c, 0x802851c0,
- 0x05000012, 0x05f9fc5f, 0x5c026000, 0x1c01f000,
- 0x84040d00, 0x4804680e, 0x5808080a, 0x5834200a,
- 0x5834280b, 0x48041003, 0x48101006, 0x48141007,
- 0x4930100f, 0x48341010, 0x60000801, 0x05fdf7d9,
- 0x800c1840, 0x05020005, 0x5834000e, 0x84000542,
- 0x4800680e, 0x05fdf7ec, 0x58347007, 0x58342008,
+ 0x05fcc7e4, 0x0500fb2c, 0x0500b317, 0x59d40005,
+ 0x82000500, 0x43238780, 0x01360079, 0x59d80005,
+ 0x82000500, 0x43238780, 0x0136007f, 0x1c01f000,
+ 0x91700583, 0x0500089d, 0x91700581, 0x05fe07f2,
+ 0x05010004, 0x05fcc7d3, 0x05fdf7ef, 0x6062f800,
+ 0x4df00000, 0x4203e000, 0x50000000, 0x49d73001,
+ 0x59d65808, 0x05fdf7d0, 0x0131fd24, 0x5c03e000,
+ 0x05fdf7e5, 0x592c0408, 0x82001500, 0x000000ff,
+ 0x80000110, 0x82000c00, 0x0010de60, 0x50040800,
+ 0x480a5c08, 0x800409c0, 0x05fe07c7, 0x80000540,
+ 0x01000dda, 0x42000800, 0x0010de60, 0x50040800,
+ 0x48065802, 0x0131fd39, 0x05fdf7ca, 0x00106524,
+ 0x00106524, 0x00106524, 0x00106524, 0x001065b0,
+ 0x00106524, 0x00106524, 0x00106524, 0x00106524,
+ 0x00106524, 0x00106532, 0x00106524, 0x00106524,
+ 0x00106524, 0x001065cd, 0x00106524, 0x00106524,
+ 0x00106524, 0x00020a44, 0x00106524, 0x0010677c,
+ 0x00106524, 0x00106524, 0x00106524, 0x000208d9,
+ 0x00106524, 0x00106524, 0x00106524, 0x00106524,
+ 0x00106524, 0x00106524, 0x00106524, 0x00106524,
+ 0x00106524, 0x00106524, 0x00106524, 0x00106524,
+ 0x00106524, 0x00106524, 0x00106524, 0x00106524,
+ 0x00106576, 0x00106524, 0x00106524, 0x00106524,
+ 0x00106524, 0x00106524, 0x00106524, 0x0010688b,
+ 0x00106a51, 0x00106524, 0x0010680e, 0x00106524,
+ 0x00106524, 0x00106524, 0x00106524, 0x00106524,
+ 0x00106858, 0x00106524, 0x00106524, 0x00106524,
+ 0x00106524, 0x00106524, 0x00106524, 0x00106524,
+ 0x00106524, 0x00106524, 0x00106524, 0x00106524,
+ 0x00106524, 0x00106524, 0x00106524, 0x00106ba1,
+ 0x00106524, 0x00106524, 0x00106524, 0x00106524,
+ 0x00106524, 0x00106524, 0x00106524, 0x00106524,
+ 0x00106524, 0x001067db, 0x00106b6a, 0x00106524,
+ 0x00106b97, 0x00106524, 0x00106524, 0x00106524,
+ 0x00106524, 0x00106524, 0x00106524, 0x00106524,
+ 0x00106524, 0x00106524, 0x00106524, 0x00106524,
+ 0x00106524, 0x00106524, 0x00106524, 0x00106524,
+ 0x00106524, 0x00106524, 0x00106524, 0x000208e4,
+ 0x00106524, 0x000208ec, 0x00106524, 0x00106524,
+ 0x00106524, 0x00106524, 0x00106524, 0x00106524,
+ 0x00106524, 0x00020ad5, 0x00106524, 0x00106524,
+ 0x00020c45, 0x00106524, 0x00106524, 0x00106524,
+ 0x00106c2c, 0x000208ec, 0x835c0480, 0x00000104,
+ 0x013014d5, 0x4df00000, 0x4203e000, 0x50000000,
+ 0x59981001, 0x58080005, 0x82000d00, 0x43238780,
+ 0x0136007f, 0x8c000508, 0x013004bf, 0x580a5808,
+ 0x592c0208, 0x58f00812, 0x800409c0, 0x013004c1,
+ 0x48065802, 0x497a5800, 0x497a5801, 0x82000500,
+ 0x000000ff, 0xb0000c8b, 0x013214be, 0x1201f800,
+ 0x001064d9, 0x5c03e000, 0x91700583, 0x05fc07e3,
+ 0x0500fa65, 0x0500b250, 0x1c01f000, 0x80140110,
+ 0x80000040, 0x0500013d, 0x0130152b, 0x4a01e007,
+ 0x00020a18, 0x4801e400, 0x492de002, 0x492de003,
+ 0x600ee000, 0x1c01f000, 0x497a5805, 0x80140110,
+ 0x80000040, 0x0130052b, 0x0130152b, 0x4a01e007,
+ 0x0002097f, 0x05fdf7f4, 0x497a5805, 0x80140110,
+ 0x80000040, 0x0132052b, 0x592c020b, 0x82000480,
+ 0x00001001, 0x01321539, 0x592c0017, 0xb0000580,
+ 0x01320539, 0x4d2c0000, 0x05f9ff1f, 0x05000011,
+ 0x412c6800, 0x5c025800, 0x600ae000, 0x42001000,
+ 0x001102f2, 0x592c0804, 0x592c2015, 0x592c2816,
+ 0x90340405, 0x48001003, 0x48041006, 0x48101007,
+ 0x48141008, 0x4834100a, 0x492c100b, 0x05f9f718,
+ 0x5c025800, 0x492de005, 0x6022e000, 0x4a01e004,
+ 0x00020910, 0x1c01f000, 0x6006e000, 0x412c6800,
+ 0x58f25805, 0x05fdf7e9, 0x4d2c0000, 0x5832580b,
+ 0x592c5a08, 0x4978600b, 0x812e59c0, 0x0130056e,
+ 0x58300002, 0x82000580, 0x00000100, 0x01320554,
+ 0x42000000, 0x001102f1, 0x50007000, 0x5830680a,
+ 0x58340005, 0x592c0809, 0x80040580, 0x01320558,
+ 0x58340806, 0x58341007, 0x58341808, 0x48065815,
+ 0x480a5816, 0x480e5817, 0x822c0d80, 0x0000016a,
+ 0x0502000e, 0x592c0a0e, 0x58342c09, 0x5834180f,
+ 0x58342010, 0x58341011, 0x8c040504, 0x0502000e,
+ 0x8c140510, 0x05020011, 0x480c680c, 0x4810680d,
+ 0x4808680e, 0x0501f037, 0x592c0c0e, 0x90040d04,
+ 0x592c040b, 0x80000110, 0x90000508, 0x80040d40,
+ 0x05fdf7ee, 0x82080500, 0xffff0003, 0x01320558,
+ 0x8c140510, 0x05000016, 0x58343812, 0x58344013,
+ 0x58343014, 0x8c040506, 0x05000004, 0x82180500,
+ 0xffff0003, 0x01320558, 0x8c040504, 0x05020009,
+ 0x8c040506, 0x0500001f, 0x481c7007, 0x48207008,
+ 0x40181000, 0x60483000, 0x607c3800, 0x0501f00f,
+ 0x481c7011, 0x48207012, 0x48187013, 0x60303000,
+ 0x60203800, 0x8c140510, 0x05000006, 0x603c3000,
+ 0x60683800, 0x8c040506, 0x05020002, 0x60603800,
+ 0x480c7007, 0x48107008, 0x481c7010, 0x592c0804,
+ 0x48047006, 0x492c700b, 0x4818700e, 0x4834700c,
+ 0x48365801, 0x65286808, 0x5c025800, 0x0135f3c3,
+ 0x48365801, 0x65286808, 0x6006e000, 0x40341000,
+ 0x822c0580, 0x0000016a, 0x05020004, 0x0501f80e,
+ 0x5c025800, 0x1c01f000, 0x0501f96d, 0x5c025800,
+ 0x1c01f000, 0x592c0001, 0x80001540, 0x0130052b,
+ 0x58080a08, 0x82040d00, 0x000000ff, 0xb004058a,
+ 0x01320532, 0x58080409, 0x8c000510, 0x0500008f,
+ 0x4d2c0000, 0x4c080000, 0x05f9fe8b, 0x5c001000,
+ 0x05000008, 0x412c6800, 0x5c025800, 0x48365805,
+ 0x592c5a0e, 0x0501f80e, 0x05000084, 0x0131f539,
+ 0x5c025800, 0x492de005, 0x6022e000, 0x4a01e004,
+ 0x0002099c, 0x1c01f000, 0x6006e000, 0x412c6800,
+ 0x58f25805, 0x592c1001, 0x05fdf7f1, 0x592c220b,
+ 0x5808480c, 0x5808040d, 0x80004540, 0x0500004c,
+ 0x80102480, 0x0500004a, 0x05001049, 0x90200483,
+ 0x05001007, 0x0500000b, 0x0500100c, 0x40004000,
+ 0x58081001, 0x90200485, 0x05fdf7fb, 0x40200000,
+ 0x0c01f001, 0x000209f1, 0x000209cb, 0x000209cf,
+ 0x58081001, 0x0501f008, 0x40200000, 0x0c01f001,
+ 0x000209bf, 0x000209c3, 0x000209c7, 0x000209cb,
+ 0x000209cf, 0x60240800, 0x42001800, 0x001012a3,
+ 0x0501f010, 0x60300800, 0x42001800, 0x001012a4,
+ 0x0501f00c, 0x603c0800, 0x42001800, 0x001012a5,
+ 0x0501f008, 0x60480800, 0x42001800, 0x001012a6,
+ 0x0501f004, 0x60540800, 0x42001800, 0x001012a7,
+ 0x40080000, 0x80043c00, 0x581c2800, 0x581c3001,
+ 0x581c3802, 0x8c2c0502, 0x0500000e, 0x80102040,
+ 0x0500000c, 0x90040595, 0x05000004, 0x90040c03,
+ 0x800c1800, 0x0501f007, 0x58081001, 0x800811c0,
+ 0x01000dda, 0x60240800, 0x42001800, 0x001012a3,
+ 0x48046809, 0x4808680a, 0x480c680b, 0x4810680c,
+ 0x4814680d, 0x4818680e, 0x481c680f, 0x48246810,
+ 0x64046811, 0x80000580, 0x1c01f000, 0x90000541,
+ 0x1c01f000, 0x592c0208, 0x82000500, 0x000000ff,
+ 0xb00005a8, 0x05000007, 0x90000582, 0x05000005,
+ 0x90000598, 0x05000003, 0x90000588, 0x05020018,
+ 0x592c0001, 0x80001540, 0x05000015, 0x58080208,
+ 0x82000500, 0x000000ff, 0xb000058a, 0x05020010,
+ 0x58080409, 0x8c000510, 0x0500000d, 0x592c0005,
+ 0x4d2c0000, 0x80025d40, 0x59a8000c, 0x812c0480,
+ 0x05001008, 0x59a8000a, 0x812c0480, 0x05021005,
+ 0x0105f992, 0x5c025800, 0x497a5805, 0x1c01f000,
+ 0x5c025800, 0x05fdf7fe, 0x592e8a0a, 0x83440c80,
+ 0x000007f0, 0x01321539, 0x8d0c050e, 0x0132057e,
+ 0x592e4414, 0x81224110, 0x83440400, 0x0010d400,
+ 0x50000000, 0x80026d40, 0x01300591, 0x59340013,
+ 0x80000130, 0x81200580, 0x01320591, 0x599c0018,
+ 0x8c00052a, 0x05000005, 0x592c0003, 0x5800040c,
+ 0x81200580, 0x01320591, 0x5934000a, 0x8c00052e,
+ 0x01320597, 0x05fdf885, 0x01320593, 0x1c01f000,
+ 0x58f00803, 0x58f00400, 0x48065800, 0x492c0801,
+ 0x492de003, 0x80000040, 0x4801e400, 0x05000002,
+ 0x1c01f000, 0x58f25802, 0x58f00007, 0x6006e000,
+ 0x0801f800, 0x1c01f000, 0x80140110, 0x0130052b,
+ 0x80000040, 0x05020009, 0x592c240e, 0x8c100504,
+ 0x0500000a, 0x592c020b, 0x82000c80, 0x00001001,
+ 0x01321539, 0x0135f3b1, 0x4a01e007, 0x00020a53,
+ 0x05fdf68d, 0x592c240e, 0x592c040b, 0x8c000510,
+ 0x0500000d, 0x0169f933, 0x0502000b, 0x59a800df,
+ 0x492f50df, 0x492fc857, 0x4803c857, 0x80000d40,
+ 0x05000003, 0x492c0800, 0x1c01f000, 0x492f50de,
+ 0x1c01f000, 0x592e8a0a, 0x417a7800, 0x592e440b,
+ 0x83224500, 0x000000ff, 0x83200580, 0x000000ff,
+ 0x01300716, 0x83200400, 0x0010d17b, 0x50024800,
+ 0x83440c80, 0x000007f0, 0x0132170d, 0x83440c00,
+ 0x0010d400, 0x50040000, 0x80026d40, 0x01300711,
+ 0x59340013, 0x80000130, 0x81200580, 0x01320711,
+ 0x59340002, 0x592c080c, 0x80040580, 0x82000500,
+ 0x00ffffff, 0x01320539, 0x59243a00, 0x901c0503,
+ 0x90000583, 0x05000004, 0x59340200, 0x8c00050e,
+ 0x0130070a, 0x592c040b, 0x8c000510, 0x0500001b,
+ 0x592c080d, 0x59a802dd, 0x80041480, 0x0130172f,
+ 0x59a804dd, 0x80000000, 0x80041480, 0x0132172f,
+ 0x0139fa9c, 0x01300539, 0x59300407, 0x800001c0,
+ 0x01320539, 0x497a580c, 0x4936600a, 0x59340002,
+ 0x82000500, 0x00ffffff, 0x4802600b, 0x641a6407,
+ 0x4926601d, 0x492e6017, 0x592c040e, 0x8c00051e,
+ 0x01320539, 0x1c01f000, 0x592e600d, 0x497a580c,
+ 0x83300480, 0x00111b00, 0x0130172f, 0xa1300495,
+ 0x013216d4, 0x592c0a10, 0x59300202, 0x80040580,
+ 0x0132072f, 0x4936600a, 0x4926601d, 0x8c10051c,
+ 0x013206c8, 0x59240206, 0x8c000510, 0x01320747,
+ 0x8d0c050e, 0x013206b4, 0x8c1c0516, 0x0132073e,
+ 0x59340200, 0x8c000518, 0x0132072c, 0x59300c07,
+ 0x90040586, 0x0132074a, 0xa1300494, 0x05021008,
+ 0x05000007, 0x592c040e, 0x8c00051e, 0x05000004,
+ 0x59300203, 0x90000587, 0x01320744, 0x8c100508,
+ 0x013206aa, 0x59300809, 0x497a5807, 0x64025a0a,
+ 0x800409c0, 0x013206af, 0x59300416, 0x8c000516,
+ 0x01320732, 0x492e6009, 0x0501f359, 0x497a5805,
+ 0x80140110, 0x0130052b, 0x80000040, 0x0130052b,
+ 0x592c0a0b, 0x82040c80, 0x00001001, 0x01321539,
+ 0x4a01e007, 0x00020ae1, 0x05fdf5ff, 0x592c0001,
+ 0x80001540, 0x0130052b, 0x58080a08, 0x82040d00,
+ 0x000000ff, 0xb004058a, 0x01320532, 0x58080409,
+ 0x8c000510, 0x05020021, 0x6006e000, 0x592c240e,
+ 0x8c100504, 0x05fc0765, 0x592c0208, 0x82000580,
+ 0x0000017a, 0x05fc0761, 0x40087800, 0x592c020b,
+ 0x82000480, 0x00001001, 0x01321539, 0x583c180c,
+ 0x583c200d, 0x583c100e, 0x82080500, 0xffff0003,
+ 0x01320539, 0x600ae000, 0x42000000, 0x001102f1,
+ 0x50007000, 0x64207010, 0x592c0804, 0x48047006,
+ 0x480c7007, 0x48107008, 0x492c700b, 0x6430700e,
+ 0x483c700c, 0x0135f3c3, 0x592c240e, 0x8c100504,
+ 0x01320539, 0x4d2c0000, 0x4c080000, 0x05f9fd06,
+ 0x5c001000, 0x0500000e, 0x412c6800, 0x5c025800,
+ 0x592c5c0e, 0x802c5942, 0x48365805, 0x05fdfe88,
+ 0x05fc0739, 0x0131f539, 0x6006e000, 0x412c6800,
+ 0x58f25805, 0x592c1001, 0x05fdf7f6, 0x5c025800,
+ 0x492de005, 0x6022e000, 0x4a01e004, 0x00020b1c,
+ 0x1c01f000, 0x4df00000, 0x4203e000, 0x50000000,
+ 0x0502b00b, 0x835c0480, 0x00000104, 0x0500100c,
+ 0x815eb840, 0x416a5800, 0x592ed000, 0x492fb007,
+ 0x497a5800, 0x497a5801, 0x05fcb7f7, 0x59d80005,
+ 0x82000500, 0x43238780, 0x0136007f, 0x5c03e000,
+ 0x1c01f000, 0x4df00000, 0x4203e000, 0x50000000,
+ 0x0502f00b, 0x835c0480, 0x00000104, 0x0500100c,
+ 0x815eb840, 0x416a5800, 0x592ed000, 0x492fa807,
+ 0x497a5800, 0x497a5801, 0x05fcf7f7, 0x59d40005,
+ 0x82000500, 0x43238780, 0x01360079, 0x5c03e000,
+ 0x1c01f000, 0x40307000, 0x5838000b, 0x80025d40,
+ 0x0500001c, 0x58380002, 0x82000580, 0x00000100,
+ 0x0500001d, 0x4c380000, 0x592c0208, 0x82000500,
+ 0x000000ff, 0x90000592, 0x0500000f, 0xb00005a0,
+ 0x0500000d, 0x90000588, 0x0500000b, 0x592c020c,
+ 0x8400054e, 0x48025a0c, 0x497a5c0c, 0x497a5c0d,
+ 0x640a5a0a, 0x4a025a08, 0x00000103, 0x05fdf819,
+ 0x0501f003, 0x64425a0a, 0x05fdf816, 0x5c007000,
+ 0x6006e000, 0x4a007002, 0x00000100, 0x49787010,
+ 0x1c01f000, 0x58380004, 0x90000483, 0x05000081,
+ 0x58381010, 0x8c080500, 0x05020014, 0x8c080506,
+ 0x05020037, 0x600cb000, 0x912cac15, 0x5838000a,
+ 0x5838100d, 0x8008a400, 0x4c380000, 0x0169f8a7,
+ 0x5c007000, 0x5838000d, 0x90000403, 0x4800700d,
+ 0x64047010, 0x58380004, 0x90000483, 0x48007004,
+ 0x90000583, 0x0500006b, 0x5838000e, 0x80001d40,
+ 0x05020026, 0x4c380000, 0x05f9fc87, 0x5c007000,
+ 0x05000012, 0x4a025a08, 0x0000010a, 0x60241800,
+ 0x480c700e, 0x5838000c, 0x80000540, 0x05020002,
+ 0x5838000b, 0x40000800, 0x492c0801, 0x492c700c,
+ 0x603c0800, 0x0501f019, 0x6022e000, 0x4a01e004,
+ 0x00020ba8, 0x1c01f000, 0x6022e000, 0x4a01e004,
+ 0x00020bac, 0x1c01f000, 0x600ae000, 0x6e007000,
+ 0x001102f1, 0x0501f06b, 0x600ae000, 0x42000000,
+ 0x001102f1, 0x50007000, 0x05fdf7e3, 0x84081540,
+ 0x48087010, 0x5838180e, 0x583a580c, 0x400c0000,
+ 0x60600800, 0x80040c80, 0x58381004, 0x5838000f,
+ 0x41783000, 0x80000540, 0x05020004, 0x84183540,
+ 0x90081483, 0x05000037, 0x40080000, 0x80040480,
+ 0x05001002, 0x40080800, 0x4004b000, 0x412c0000,
+ 0x800c0400, 0x4000a800, 0x5838000a, 0x5838100d,
+ 0x8008a400, 0x4c080000, 0x4c040000, 0x4c0c0000,
+ 0x4c380000, 0x0169f8a7, 0x5c007000, 0x5c001800,
+ 0x5c000800, 0x40040000, 0x58381004, 0x80080480,
+ 0x48007004, 0x90000583, 0x05000002, 0x84183500,
+ 0x5c000000, 0x80041400, 0xb00804a0, 0x05020003,
+ 0x84183542, 0x41781000, 0x400c0000, 0x80041c00,
+ 0x900c0498, 0x05020003, 0x84183544, 0x40001800,
+ 0x40080800, 0x4804700d, 0x480c700e, 0x40180000,
+ 0x0c01f001, 0x00020bf3, 0x00020bf6, 0x00020bf4,
+ 0x00020bf3, 0x00020b8f, 0x00020bf6, 0x00020bf4,
+ 0x00020bf3, 0x0101fdda, 0x5838100f, 0x0135f3c3,
+ 0x5838080d, 0x90040402, 0x5838100a, 0x80080400,
+ 0x50001000, 0x800811c0, 0x05020041, 0x58381810,
+ 0x8c0c0506, 0x0502000b, 0x6006e000, 0x583a580b,
+ 0x4978700b, 0x49787010, 0x592c0208, 0x82000500,
+ 0x000000ff, 0x90000592, 0x05fc064b, 0x05fdf60f,
+ 0x8c0c0502, 0x05020028, 0x8c0c0508, 0x05000016,
+ 0x5838080c, 0x5838000e, 0x80002d40, 0x0502000b,
+ 0x4c380000, 0x0105f971, 0x5c007000, 0x05fc078b,
+ 0x412c0800, 0x583a580c, 0x48065801, 0x4a000a08,
+ 0x0000010a, 0x60242800, 0x58381811, 0x58382012,
+ 0x58381013, 0x80040c05, 0x480c0800, 0x48100801,
+ 0x48080802, 0x6006e000, 0x583a580b, 0x4978700b,
+ 0x49787010, 0x592c0208, 0x82000d00, 0x000000ff,
+ 0xb00405b2, 0x05fc0628, 0x592c1001, 0xb00405ba,
+ 0x05fe0559, 0x58080409, 0x8c000510, 0x05fc0622,
+ 0x05fdf6dd, 0x8c0c0504, 0x05fe07ef, 0x840c1d44,
+ 0x480c7010, 0x58381811, 0x58382012, 0x58381013,
+ 0x480c7007, 0x48107008, 0x0135f3c3, 0x5838000a,
+ 0x80040c00, 0x90381c07, 0x54041800, 0x80040800,
+ 0x800c1800, 0x54041800, 0x0135f3c3, 0x80140110,
+ 0x0130052b, 0x80000040, 0x0130052b, 0x4a01e007,
+ 0x00020c4c, 0x05fdf494, 0x4d2c0000, 0x0105f971,
+ 0x412c6800, 0x5c025800, 0x05000006, 0x48365805,
+ 0x90346c01, 0x0501f80c, 0x05fc05c4, 0x0131f539,
+ 0x492de006, 0x6022e000, 0x4a01e004, 0x00020c5b,
+ 0x1c01f000, 0x6006e000, 0x412c6800, 0x58f25806,
+ 0x05fdf7f3, 0x592c4812, 0x592c020b, 0x80004540,
+ 0x05000023, 0x592c040b, 0x80002540, 0x05000020,
+ 0x592c7001, 0x80204040, 0x05000008, 0x90200485,
+ 0x05001006, 0x58387001, 0x803871c0, 0x05000018,
+ 0x80004540, 0x05fe07fa, 0x82204400, 0x001012a3,
+ 0x50200000, 0x80380c00, 0x58042800, 0x58043001,
+ 0x58043802, 0x4838680d, 0x4800680c, 0x49786814,
+ 0x49786815, 0x48146810, 0x48186811, 0x481c6812,
+ 0x4820680e, 0x48246813, 0x80102040, 0x4810680f,
+ 0x05020005, 0x80000580, 0x1c01f000, 0x90000541,
+ 0x1c01f000, 0x80204000, 0x50201800, 0x800c19c0,
+ 0x0502000a, 0x58380001, 0x80007540, 0x05fc07f8,
+ 0x58380208, 0x9000050f, 0x82000400, 0x001012ac,
+ 0x50004000, 0x50201800, 0x4820680e, 0x480c680c,
+ 0x4838680d, 0x05fdf7ec, 0x4df00000, 0x4203e000,
+ 0x50000000, 0x5994002e, 0x80000540, 0x05000183,
+ 0x4c000000, 0x5c000000, 0x59947824, 0x4803282f,
+ 0x803c0480, 0x05001004, 0x05000003, 0x48032824,
+ 0x0501f05f, 0x417a0800, 0x81060800, 0x82000400,
+ 0x000003e8, 0x05fc27fd, 0x48032824, 0x59940032,
+ 0x80000d40, 0x05000006, 0x80040840, 0x48072832,
+ 0x05020003, 0x59940033, 0x0801f800, 0x59a8001c,
+ 0x8400057e, 0x4803501c, 0x59a80022, 0x8400057e,
+ 0x48035022, 0x59a8000f, 0x8400057e, 0x4803500f,
+ 0x59a80010, 0x8400057e, 0x48035010, 0x0125f91f,
+ 0x0502000a, 0x59a80878, 0x800409c0, 0x05000007,
+ 0xa0040c81, 0x48075078, 0x05000002, 0x05021003,
+ 0x497b5078, 0x013dfecc, 0x59a800a7, 0x8c000500,
+ 0x0500000e, 0x59a80878, 0x800409c0, 0x0500000b,
+ 0xa0040c81, 0x48075078, 0x05000002, 0x05021007,
+ 0x497b5078, 0x42000000, 0x0010dd09, 0x50000800,
+ 0x84040d48, 0x44040000, 0x59a800b8, 0x81041400,
+ 0x480b50b8, 0x59a808ba, 0x81040c01, 0x82040480,
+ 0x00028f5a, 0x05001002, 0x41780800, 0x480750ba,
+ 0x81040040, 0x05000002, 0x4907c857, 0x59e40852,
+ 0x59a800b9, 0x80040580, 0x05000004, 0x480bc857,
+ 0x59e40052, 0x480350b9, 0x59940030, 0x81040400,
+ 0x48032830, 0x0139ff8b, 0x5998b002, 0x8058b1c0,
+ 0x05000008, 0x40f25800, 0x592e5801, 0x592c020a,
+ 0x8c000500, 0x05fe0a3a, 0x8058b040, 0x05fe07fb,
+ 0x59940000, 0x90000580, 0x05020005, 0x59940030,
+ 0x48032831, 0x497b2830, 0x64072800, 0x4c0c0000,
+ 0x58d400e5, 0x8c000514, 0x05000013, 0x59940807,
+ 0x59941006, 0x5994002f, 0x80081c80, 0x05001004,
+ 0x05000003, 0x480f2806, 0x0501f00b, 0x80040840,
+ 0x48072807, 0x05020004, 0x59940008, 0x0801f800,
+ 0x0501f005, 0x400c0000, 0x900c1c0a, 0x05fc27f8,
+ 0x480f2806, 0x5c001800, 0x4d180000, 0x59c80040,
+ 0x8c000534, 0x05020025, 0x417a3000, 0x91947c09,
+ 0x60042000, 0x58d400e5, 0x80100500, 0x05020007,
+ 0x801020c4, 0x903c7c05, 0x811a3000, 0x91180585,
+ 0x05fe07f9, 0x0501f019, 0x583c0801, 0x583c1000,
+ 0x5994002f, 0x80080480, 0x05001005, 0x05000004,
+ 0x48007800, 0x80000040, 0x05fe17f2, 0x80040840,
+ 0x48047801, 0x05000006, 0x9000040a, 0x48007800,
+ 0x05fc27fb, 0xb004053f, 0x05fdf7ea, 0x583c0004,
+ 0x4c3c0000, 0x4c100000, 0x0801f800, 0x5c002000,
+ 0x5c007800, 0x05fdf7e3, 0x5c023000, 0x8d0c0516,
+ 0x05020017, 0x8d0c0522, 0x0500001e, 0x5998b008,
+ 0x8058b1c0, 0x05000012, 0x41765800, 0x592e5800,
+ 0x592c0003, 0x80001540, 0x05000006, 0x05002008,
+ 0x5994002f, 0x80080480, 0x05021004, 0x497a5803,
+ 0x05f9fea5, 0x0501f002, 0x48025803, 0x8058b040,
+ 0x05fe07f3, 0x8d0c0520, 0x0500000a, 0x59940023,
+ 0x80001540, 0x05000007, 0x05002006, 0x5994002f,
+ 0x80080480, 0x05021002, 0x80000580, 0x48032823,
+ 0x59940026, 0x80000d40, 0x05000012, 0x59941025,
+ 0x5994002f, 0x80080480, 0x05001005, 0x05000004,
+ 0x48032825, 0x80000040, 0x0502100a, 0x80040840,
+ 0x48072826, 0x05020004, 0x59940027, 0x0801f800,
+ 0x0501f004, 0x9000040a, 0x48032825, 0x05fc27f8,
+ 0x59940004, 0x80000d40, 0x05000012, 0x59941003,
+ 0x5994002f, 0x80080480, 0x05001005, 0x05000004,
+ 0x48032803, 0x80000040, 0x0502100a, 0x80040840,
+ 0x48072804, 0x05020004, 0x59940005, 0x0801f800,
+ 0x0501f004, 0x9000040a, 0x48032803, 0x05fc27f8,
+ 0x59940029, 0x80000d40, 0x05000012, 0x59941028,
+ 0x5994002f, 0x80080480, 0x05001005, 0x05000004,
+ 0x48032828, 0x80000040, 0x0502100a, 0x80040840,
+ 0x48072829, 0x05020004, 0x5994002a, 0x0801f800,
+ 0x0501f004, 0x90000401, 0x48032828, 0x05fc27f8,
+ 0x5994002c, 0x80000d40, 0x05000012, 0x5994102b,
+ 0x5994002f, 0x80080480, 0x05001005, 0x05000004,
+ 0x4803282b, 0x80000040, 0x0502100a, 0x80040840,
+ 0x4807282c, 0x05020004, 0x5994002d, 0x0801f800,
+ 0x0501f004, 0x9000040a, 0x4803282b, 0x05fc27f8,
+ 0x59a8081c, 0x8c04053e, 0x0500001b, 0x84040d3e,
+ 0x4807501c, 0x05000018, 0x5994002f, 0x4c000000,
+ 0x82000400, 0x000003e8, 0x4803282f, 0x80040480,
+ 0x05001004, 0x05000003, 0x4803501c, 0x0501f00c,
+ 0x4c000000, 0x013df83f, 0x013c08af, 0x5c000000,
+ 0x59a8081b, 0x80040400, 0x05fc27ff, 0x800001c0,
+ 0x05020002, 0x40040000, 0x4803501c, 0x5c000000,
+ 0x4803282f, 0x59a8080f, 0x8c04053e, 0x05000021,
+ 0x84040d3e, 0x4807500f, 0x0500001e, 0x5994002f,
+ 0x4c000000, 0x82000400, 0x000003e8, 0x4803282f,
+ 0x80040480, 0x05001009, 0x05000008, 0x4803500f,
+ 0x4c000000, 0x59a8100d, 0x5808040b, 0x8c000514,
+ 0x5c000000, 0x0500000d, 0x4c000000, 0x60480000,
+ 0x59a8100d, 0x013dfb92, 0x013c08af, 0x5c000000,
+ 0x90000400, 0x05fc27ff, 0x800001c0, 0x05020002,
+ 0x60000000, 0x4803500f, 0x5c000000, 0x4803282f,
+ 0x59a80810, 0x8c04053e, 0x05000023, 0x84040d3e,
+ 0x48075010, 0x05000020, 0x5994002f, 0x4c000000,
+ 0x82000400, 0x000003e8, 0x4803282f, 0x80040480,
+ 0x05001009, 0x05000008, 0x48035010, 0x4c000000,
+ 0x59a8100e, 0x5808040b, 0x8c000514, 0x5c000000,
+ 0x0500000f, 0x4c000000, 0x60500000, 0x59a8100e,
+ 0x013dfb92, 0x013c08af, 0x5c000000, 0x82000400,
+ 0x000927c0, 0x05fc27fe, 0x800001c0, 0x05020003,
+ 0x42000000, 0x000927c0, 0x48035010, 0x5c000000,
+ 0x4803282f, 0x5994082e, 0x5994002f, 0x80040480,
+ 0x01001dda, 0x4803282e, 0x59940000, 0x0c01f001,
+ 0x00020e25, 0x001076d4, 0x00107743, 0x5c03e000,
+ 0x1c01f000, 0x5994002e, 0x80000000, 0x4803282e,
+ 0x4203e000, 0x70000000, 0x1c01f000, 0x813e79c0,
+ 0x05020016, 0x59a800d4, 0x80000040, 0x05fe07ff,
+ 0x58d400ea, 0x8c000516, 0x05fe07fe, 0x91300400,
+ 0x4801a8e1, 0x592c1003, 0x5808020a, 0x8c000500,
+ 0x0500000a, 0x592c1c0e, 0x820c1d00, 0x000000c0,
+ 0xb00c1d80, 0x05000005, 0x592c1813, 0x5808000d,
+ 0x800c0400, 0x4800100d, 0x1c01f000, 0x5c000000,
+ 0x4c000000, 0x4803c857, 0x4807c857, 0x59302a03,
+ 0x98140486, 0x05000005, 0x601c2800, 0x0501f003,
+ 0x60040800, 0x601c2800, 0x59325809, 0x832c0580,
+ 0x00110228, 0x0500001f, 0x832c0500, 0x00ff0000,
+ 0x05000025, 0x592c1000, 0x59301808, 0x59302027,
+ 0x801021c0, 0x05020039, 0x592c040e, 0x480a6009,
+ 0x48166203, 0x8c000510, 0x0502001c, 0x48065a0a,
+ 0x820c0500, 0x04000800, 0x82000580, 0x04000800,
+ 0x0500002b, 0xa1300494, 0x05021009, 0x05000008,
+ 0x592c040e, 0x8c00051e, 0x05020005, 0x013dff4d,
+ 0x59300202, 0x48025a10, 0x4932580d, 0x05f9fd11,
+ 0x417a7800, 0x59300009, 0x82000d80, 0x00110228,
+ 0x05020003, 0x58040000, 0x48026009, 0x80025d40,
+ 0x05fe07b3, 0x1c01f000, 0x832c0580, 0x00110228,
+ 0x05fc07f4, 0x592c040b, 0x8c000510, 0x05fe07f1,
+ 0x98040481, 0x05fe07de, 0x456a5800, 0x412ed000,
+ 0x815eb800, 0x592c0001, 0x80000d40, 0x05020006,
+ 0x59c80000, 0x82000540, 0x00001200, 0x48039000,
+ 0x05fdf7e4, 0x05f9fcdb, 0x05fdf7e2, 0x59300021,
+ 0x48025c13, 0x05fdf7d4, 0x497a6027, 0x45682000,
+ 0x4012d000, 0x815eb800, 0x59c80000, 0x82000540,
+ 0x00001200, 0x48039000, 0x05fdf7c0, 0x59300416,
+ 0x8c000510, 0x05000002, 0x84040d52, 0x48066004,
+ 0x497a6000, 0x497a6001, 0x58d400ea, 0x8c000516,
+ 0x05fe07fe, 0x83300400, 0xa0000000, 0x4801a8e1,
+ 0x1c01f000, 0x59300416, 0x8c000510, 0x05000002,
+ 0x84040d52, 0x59300004, 0x82000500, 0x00000100,
+ 0x80040d40, 0x48066004, 0x58d400ea, 0x8c000516,
+ 0x05fe07fe, 0x83300400, 0x40000000, 0x4801a8e1,
+ 0x1c01f000, 0x58d400ea, 0x82001500, 0x32000018,
+ 0x01420562, 0x8c000510, 0x0500002f, 0x58d410e0,
+ 0x82080500, 0xfffff000, 0x0502000d, 0x900a350f,
+ 0x80081108, 0x480bc857, 0x90080487, 0x01021dda,
+ 0x90080481, 0x01001dda, 0x1201f000, 0x00108566,
+ 0x84040d10, 0x48066004, 0x0501f019, 0x840a653e,
+ 0x59300804, 0x8c040520, 0x05fc07fa, 0x82040d00,
+ 0xfffefeff, 0x48066004, 0x8c08053e, 0x05020009,
+ 0x8c040514, 0x05000004, 0x05fdff72, 0x0501f8ff,
+ 0x0501f00b, 0x604e7000, 0x0501f920, 0x0501f008,
+ 0x8c040514, 0x05000004, 0x05fdff6a, 0x0501f8f7,
+ 0x0501f003, 0x61267000, 0x0501f918, 0x58d400ea,
+ 0x82001500, 0x32000018, 0x01420562, 0x8c000510,
+ 0x05fe07d3, 0x1c01f000, 0x59bc00ea, 0x82001500,
+ 0xb2000018, 0x0142058c, 0x8c000510, 0x05000009,
+ 0x59bc10e0, 0x80080108, 0x900a350f, 0x9800048b,
+ 0x05000005, 0x4803c857, 0x1201f000, 0x00108590,
+ 0x1c01f000, 0x4d300000, 0x59bc00ea, 0x8c000510,
+ 0x05fc07fe, 0x59be60e0, 0x813261c0, 0x01000dda,
+ 0x59300804, 0x8c04051c, 0x05020068, 0x59300027,
+ 0x80006d40, 0x05000065, 0x83180400, 0x00020f72,
+ 0x50001000, 0x5808020f, 0x8c000500, 0x0502005d,
+ 0x58340811, 0x8c040500, 0x0502002b, 0x5808000e,
+ 0x50000000, 0x48001003, 0x5808080c, 0x80040c80,
+ 0x58340011, 0x8c000504, 0x05000007, 0x5834200d,
+ 0x5834280e, 0x48101007, 0x48141008, 0x84000504,
+ 0x48006811, 0x5834180c, 0x5834300f, 0x58345010,
+ 0x40180000, 0x80284480, 0x05021002, 0x40280000,
+ 0x80000104, 0x80044480, 0x05001002, 0x40000800,
+ 0xb0040480, 0x05001002, 0x61000800, 0x48041004,
+ 0x800408c4, 0x48041005, 0x40040000, 0x80285480,
+ 0x48286810, 0x80184c80, 0x05000016, 0x4824680f,
+ 0x802851c0, 0x05000015, 0x05f9f8e5, 0x5c026000,
+ 0x1c01f000, 0x84040d00, 0x48046811, 0x5808080b,
+ 0x5834200d, 0x5834280e, 0x59301809, 0x580c3004,
+ 0x48181006, 0x48041003, 0x48101007, 0x48141008,
+ 0x49301010, 0x48341011, 0x60000801, 0x05fdf7d6,
+ 0x800c1840, 0x05020005, 0x58340011, 0x84000542,
+ 0x48006811, 0x05fdf7e9, 0x5834700a, 0x5834200b,
0x80102000, 0x50100000, 0x80000540, 0x05000010,
0x80383400, 0x58183800, 0x58184001, 0x58184802,
- 0x48106808, 0x480c6809, 0x481c680a, 0x4820680b,
- 0x4824680c, 0x802851c0, 0x05fc07ec, 0x5834000e,
- 0x84000544, 0x4800680e, 0x05fdf7d7, 0x58387001,
- 0x48386807, 0x42002000, 0x00100e1d, 0x05fdf7ea,
- 0x84000542, 0x4800120e, 0x4933c857, 0x05fdf7cf,
- 0x0010b1b9, 0x0010b1ca, 0x0010b1db, 0x0010b1ec,
- 0x0010b1fd, 0x5830020e, 0x8c000500, 0x0502001b,
- 0x5830780f, 0x803c79c0, 0x05000030, 0x58300002,
+ 0x4810680b, 0x480c680c, 0x481c680d, 0x4820680e,
+ 0x4824680f, 0x802851c0, 0x05fc07ec, 0x58340011,
+ 0x84000544, 0x48006811, 0x05fdf7d4, 0x58387001,
+ 0x4838680a, 0x42002000, 0x001012a3, 0x05fdf7ea,
+ 0x84000542, 0x4800120f, 0x4933c857, 0x05fdf7cc,
+ 0x0010e32d, 0x0010e33f, 0x0010e351, 0x0010e363,
+ 0x0010e375, 0x5830020f, 0x8c000500, 0x0502001b,
+ 0x58307810, 0x803c79c0, 0x05000030, 0x58300002,
0x82000580, 0x00000100, 0x0502002e, 0x583c0c07,
0x90040586, 0x05000003, 0x90040583, 0x05020027,
- 0x58300804, 0x58300003, 0x80040c00, 0x5830000a,
+ 0x58300804, 0x58300003, 0x80040c00, 0x5830000b,
0x80047c80, 0x823c7d80, 0x00000080, 0x05020002,
- 0x40000800, 0x5830000d, 0x44040000, 0x5830000c,
- 0x480378e7, 0x1c01f000, 0x4803c856, 0x4978620e,
+ 0x40000800, 0x5830000e, 0x44040000, 0x5830000d,
+ 0x480378e7, 0x1c01f000, 0x4803c856, 0x4978620f,
0x8c000502, 0x05fc07fc, 0x4803c856, 0x4c300000,
- 0x0131f93f, 0x5c006000, 0x58300c0e, 0x800410ca,
+ 0x0141fd13, 0x5c006000, 0x58300c0f, 0x800410ca,
0x82081400, 0x00007600, 0x4a001014, 0x00090000,
0x800410c8, 0x82081400, 0x0000bf32, 0x58080005,
- 0x84000500, 0x48001005, 0x5830000a, 0x5830080d,
- 0x44000800, 0x0131f92b, 0x483fc857, 0x05fdf7e6,
+ 0x84000500, 0x48001005, 0x5830000b, 0x5830080e,
+ 0x44000800, 0x0141fd04, 0x483fc857, 0x05fdf7e6,
0x4d300000, 0x4d2c0000, 0x4d3c0000, 0x4c300000,
- 0x5832600f, 0x4933c857, 0x59325809, 0x592c0209,
- 0x8400054e, 0x48025a09, 0x417a7800, 0x0141f94e,
+ 0x58326010, 0x4933c857, 0x59325809, 0x592c020c,
+ 0x8400054e, 0x48025a0c, 0x417a7800, 0x0155f815,
0x5c006000, 0x5c027800, 0x5c025800, 0x5c026000,
- 0x05fdf7d5, 0x59a80266, 0x81640480, 0x05001015,
+ 0x05fdf7d5, 0x59a8029c, 0x81640480, 0x05001015,
0x41626000, 0x41580000, 0x59300a03, 0x90040d80,
0x05020007, 0x64226203, 0x8166c840, 0x9132c430,
0x81600480, 0x05021008, 0x1c01f000, 0x91326430,
- 0x81300c80, 0x05fc17f5, 0x42026000, 0x00110514,
- 0x05fdf7f2, 0x837ac540, 0x00110514, 0x1c01f000,
- 0x42000000, 0x0010b2c9, 0x0151fa45, 0x4967c857,
- 0x80026580, 0x1c01f000, 0x83300480, 0x00110514,
- 0x010019ef, 0x41580000, 0x81300480, 0x0502100a,
+ 0x81300c80, 0x05fc17f5, 0x42026000, 0x00111b00,
+ 0x05fdf7f2, 0x837ac540, 0x00111b00, 0x1c01f000,
+ 0x42000000, 0x0010e442, 0x0165ffdc, 0x4967c857,
+ 0x80026580, 0x1c01f000, 0x83300480, 0x00111b00,
+ 0x01001dda, 0x41580000, 0x81300480, 0x0502100a,
0x457a6000, 0x4a026202, 0x0000ffff, 0x05011000,
0x91300403, 0x4803c840, 0x64b7c842, 0x8166c800,
- 0x1c01f000, 0x41540000, 0x81300480, 0x010219ef,
- 0x59a80062, 0x49335061, 0x80000000, 0x48035062,
- 0x457a6000, 0x4a026202, 0x0000ffff, 0x05011000,
- 0x91300403, 0x4803c840, 0x64b7c842, 0x1c01f000,
- 0x4d340000, 0x4d240000, 0x5932481d, 0x5932680a,
- 0x59300407, 0x9000051f, 0x0c01f804, 0x5c024800,
- 0x5c026800, 0x1c01f000, 0x00106f26, 0x00106f35,
- 0x00106f4f, 0x00020ca2, 0x00109086, 0x001090a1,
- 0x00020d1c, 0x00106f26, 0x00106f35, 0x00105ee1,
- 0x00106f97, 0x00106f26, 0x00106f26, 0x00106f26,
- 0x00106f26, 0x00106f67, 0x00108b99, 0x00109e8c,
- 0x00106f26, 0x00106f26, 0x00106f26, 0x00106f26,
- 0x00106f26, 0x00106f26, 0x00106f26, 0x00106f26,
- 0x00106f26, 0x00106f26, 0x00106f26, 0x00106f26,
- 0x00106f26, 0x00106f26, 0x59300203, 0x90000c91,
- 0x010219ef, 0x0c01f001, 0x00106f66, 0x00107a50,
- 0x00020cb7, 0x00107c73, 0x00107d16, 0x00106f66,
- 0x00106f66, 0x00106f66, 0x00107a3c, 0x00106f66,
- 0x00106f66, 0x00106f66, 0x00106f66, 0x00107ee4,
- 0x001086b3, 0x00106f66, 0x001086e2, 0xb1380498,
- 0x05021006, 0xb1380480, 0x05001004, 0x4d2c0000,
- 0x0c01f803, 0x5c025800, 0x1c01f000, 0x00107ac9,
- 0x00107ac9, 0x00107ac9, 0x00107ac9, 0x00107ac9,
- 0x00107aca, 0x00107b83, 0x00107ac9, 0x00107ac9,
- 0x00107ac9, 0x00107ac9, 0x00107ac9, 0x00107ac9,
- 0x00107ac9, 0x00107ac9, 0x00107ac9, 0x00107ac9,
- 0x00107ac9, 0x00107ac9, 0x00107b87, 0x00020cd7,
- 0x00107ac9, 0x00107b86, 0x00107b88, 0x59325809,
- 0x59300813, 0x59301402, 0x59340200, 0x8c00050e,
- 0x05020023, 0x0501f82f, 0x05000005, 0x4a025a05,
- 0x00000103, 0x497a580a, 0x0501f009, 0x4a025a05,
- 0x00000103, 0x64025a07, 0x497a580a, 0x40040000,
- 0x0145fea4, 0x80000d40, 0x013e0ce6, 0x48065808,
- 0x480a5c07, 0x59300008, 0x82000500, 0x04000800,
- 0x82000580, 0x04000800, 0x05000017, 0x05f9fe68,
- 0x0145fe9b, 0x5934000f, 0x8d0c0512, 0x05020005,
- 0x5934140b, 0x80081040, 0x05001002, 0x480a6c0b,
- 0x80000540, 0x05fa0df7, 0x05fdf75c, 0x592c020b,
- 0x8c000502, 0x05fc07dc, 0x800409c0, 0x05fc07e0,
- 0x592c0209, 0x8c00050e, 0x05fe07dd, 0x4933c857,
- 0x0141f733, 0x59300221, 0x48025c10, 0x05fdf7e8,
- 0x592c020b, 0x8c000500, 0x0500000d, 0x59300017,
- 0x592c3810, 0x801c3c80, 0x05000009, 0x64565a07,
- 0x8c1c053e, 0x05000004, 0x641e5a07, 0x801c3880,
- 0x801c3800, 0x481fc857, 0x901c0d40, 0x1c01f000,
- 0x59300203, 0x90003491, 0x010219ef, 0x0c01f001,
- 0x001090bf, 0x00020d31, 0x00109744, 0x00109755,
- 0x00020d4c, 0x001090bf, 0x0010982c, 0x00020d70,
- 0x001090bf, 0x001090bf, 0x001090bf, 0x001090bf,
- 0x001090bf, 0x001090bf, 0x00109c3e, 0x001090bf,
- 0x00109c71, 0x91380593, 0x014a06db, 0x59300403,
- 0xb0027484, 0x010219ef, 0xb0000480, 0x010019ef,
- 0x0c01f001, 0x00109724, 0x00020d3d, 0x00109725,
- 0x00109737, 0x0145f8d1, 0x05000005, 0x59a80030,
+ 0x1c01f000, 0x41540000, 0x81300480, 0x01021dda,
+ 0xa1300494, 0x05021005, 0x05000004, 0x64026203,
+ 0x497a6006, 0x1c01f000, 0x59a80098, 0x49335097,
+ 0x80000000, 0x48035098, 0x457a6000, 0x4a026202,
+ 0x0000ffff, 0x05011000, 0x91300403, 0x4803c840,
+ 0x64b7c842, 0x1c01f000, 0x4d340000, 0x4d240000,
+ 0x5932481d, 0x5932680a, 0x59300407, 0x9000051f,
+ 0x0c01f804, 0x5c024800, 0x5c026800, 0x1c01f000,
+ 0x0010942a, 0x00109439, 0x00109453, 0x0002102a,
+ 0x0010baa6, 0x0010bac1, 0x0002111a, 0x0010942a,
+ 0x00109439, 0x00107f71, 0x0010949b, 0x0010942a,
+ 0x0010942a, 0x0010942a, 0x0010942a, 0x0010946b,
+ 0x0010b373, 0x0010cb60, 0x0010942a, 0x0010942a,
+ 0x0010942a, 0x0010942a, 0x0010942a, 0x0010942a,
+ 0x0010942a, 0x0010942a, 0x0010942a, 0x0010942a,
+ 0x0010942a, 0x0010942a, 0x0010942a, 0x0010942a,
+ 0x59300203, 0x90000c91, 0x01021dda, 0x0c01f001,
+ 0x0010946a, 0x0010a076, 0x0002103f, 0x0010a2f9,
+ 0x0010a3aa, 0x0010946a, 0x0010946a, 0x0010946a,
+ 0x0010a062, 0x0010946a, 0x0010946a, 0x0010946a,
+ 0x0010946a, 0x0010a5a1, 0x0010ae80, 0x0010946a,
+ 0x0010aeaf, 0xb1380498, 0x05021006, 0xb1380480,
+ 0x05001004, 0x4d2c0000, 0x0c01f803, 0x5c025800,
+ 0x1c01f000, 0x0010a0f0, 0x0010a0f0, 0x0010a0f0,
+ 0x0010a0f0, 0x0010a0f0, 0x0010a0f1, 0x0010a1ed,
+ 0x0010a0f0, 0x0010a23e, 0x0010a0f0, 0x0010a0f0,
+ 0x0010a0f0, 0x0010a0f0, 0x0010a0f0, 0x0010a0f0,
+ 0x0010a0f0, 0x0010a0f0, 0x0010a0f0, 0x0010a0f0,
+ 0x0010a1f1, 0x0002105f, 0x0010a0f0, 0x0010a1f0,
+ 0x0010a1f2, 0x59325809, 0x59300008, 0x8c000536,
+ 0x0500000f, 0x497a580d, 0x41782800, 0x60303000,
+ 0x60443800, 0x4c5c0000, 0x592cb805, 0x0501f84c,
+ 0x4d2c0000, 0x405e5800, 0x0105f992, 0x5c025800,
+ 0x497a5805, 0x5c00b800, 0x0501f01c, 0x59300813,
+ 0x59301402, 0x59340200, 0x8c00050e, 0x05020023,
+ 0x0501f82f, 0x05000005, 0x4a025a08, 0x00000103,
+ 0x497a580d, 0x0501f009, 0x4a025a08, 0x00000103,
+ 0x64025a0a, 0x497a580d, 0x40040000, 0x0159feba,
+ 0x80000d40, 0x01520b78, 0x4806580b, 0x480a5c0a,
+ 0x59300008, 0x82000500, 0x04000800, 0x82000580,
+ 0x04000800, 0x05000017, 0x05f9faf6, 0x0159feb1,
+ 0x5934000f, 0x8d0c0512, 0x05020005, 0x5934140b,
+ 0x80081040, 0x05001002, 0x480a6c0b, 0x80000540,
+ 0x05fa0a77, 0x05fdf745, 0x592c020e, 0x8c000502,
+ 0x05fc07dc, 0x800409c0, 0x05fc07e0, 0x592c020c,
+ 0x8c00050e, 0x05fe07dd, 0x4933c857, 0x0155f703,
+ 0x59300221, 0x48025c13, 0x05fdf7e8, 0x592c020e,
+ 0x8c000500, 0x0500000d, 0x59300017, 0x592c3813,
+ 0x801c3c80, 0x05000009, 0x64565a0a, 0x8c1c053e,
+ 0x05000004, 0x641e5a0a, 0x801c3880, 0x801c3800,
+ 0x481fc857, 0x901c0d40, 0x1c01f000, 0x4c5c0000,
+ 0x4c600000, 0x4a025a08, 0x00000103, 0x592c040c,
+ 0x84000542, 0x48025c0c, 0x59300402, 0x48025c0a,
+ 0x905cbc01, 0x64025a0a, 0x59300017, 0x592c0813,
+ 0x80040c80, 0x05000008, 0x64565a0a, 0x8c04053e,
+ 0x05000004, 0x641e5a0a, 0x80040880, 0x80040800,
+ 0x4807c857, 0x4806580b, 0x912cc412, 0x8c14051e,
+ 0x05000009, 0x40180000, 0x81cc3400, 0x401c0000,
+ 0x812c3c00, 0x50180000, 0x44003800, 0x401cc000,
+ 0x901cc401, 0x585c0813, 0x800409c0, 0x0500003d,
+ 0x4807c857, 0x8c04053e, 0x05020025, 0x5930002b,
+ 0x80000540, 0x05000018, 0x015dfa98, 0x0500002e,
+ 0x4c040000, 0x4c080000, 0x4c0c0000, 0x4c100000,
+ 0x4c140000, 0x40002800, 0x58141003, 0x40040000,
+ 0x80081480, 0x48082803, 0x40140000, 0x0105ff10,
+ 0x5c002800, 0x5c002000, 0x5c001800, 0x5c001000,
+ 0x5c000800, 0x592c020a, 0x80000540, 0x0502000b,
+ 0x0501f005, 0x592c040c, 0x8c00051c, 0x05000002,
+ 0x592c0806, 0x4807c857, 0x592c020a, 0x82000540,
+ 0x00001500, 0x48025a0a, 0x0501f016, 0x5930002b,
+ 0x80000540, 0x0500000e, 0x015dfa98, 0x0500000a,
+ 0x592c020a, 0x82000540, 0x00000700, 0x48025a0a,
+ 0x5930002b, 0x4c040000, 0x0105ff10, 0x5c000800,
+ 0x0501f008, 0x64465a0a, 0x05fdf7fa, 0x4807c856,
+ 0x592c020a, 0x82000540, 0x00000700, 0x48025a0a,
+ 0x4404c000, 0x5c00c000, 0x5c00b800, 0x1c01f000,
+ 0x59300203, 0x90003491, 0x01021dda, 0x0c01f001,
+ 0x0010badf, 0x0002112f, 0x0010c2aa, 0x0010c2bb,
+ 0x0002114a, 0x0010badf, 0x0010c39c, 0x00021178,
+ 0x0010badf, 0x0010badf, 0x0010badf, 0x0010badf,
+ 0x0010badf, 0x0010badf, 0x0010c8cd, 0x0010badf,
+ 0x0010c900, 0x91380593, 0x01620241, 0x59300403,
+ 0xb0027484, 0x01021dda, 0xb0000480, 0x01001dda,
+ 0x0c01f001, 0x0010c28a, 0x0002113b, 0x0010c28b,
+ 0x0010c29d, 0x0159f89e, 0x05000005, 0x59a8005e,
0x48026205, 0x643a6203, 0x1c01f000, 0x59325809,
- 0x832c0500, 0x00ff0000, 0x05000004, 0x592c0c0b,
- 0x8c04051a, 0x014a0734, 0x05fdfda2, 0x05fdf70f,
+ 0x832c0500, 0x00ff0000, 0x05000004, 0x592c0c0e,
+ 0x8c04051a, 0x0162029a, 0x05fdfd06, 0x05fdf693,
0xb1380498, 0x05001007, 0xb13805a1, 0x05000003,
- 0xb13805a0, 0x010209ef, 0x4933c857, 0x1c01f000,
- 0xb1380588, 0x05000004, 0xb1380593, 0x014807d9,
- 0x0101f9ef, 0x5930002b, 0x59301013, 0x5930080a,
- 0x58040a00, 0x8c04050e, 0x014a07bf, 0x800811c0,
- 0x014a07ca, 0x5930002b, 0x80000540, 0x014a07d4,
- 0x59325809, 0x592c040b, 0x8c00051e, 0x014807b9,
- 0x64066203, 0x65066403, 0x42000800, 0x80002042,
- 0x8c00051a, 0x05020002, 0x84040d54, 0x05fdf5bf,
- 0xb1380498, 0x014a17f0, 0xb1380480, 0x014817f1,
- 0x0c01f001, 0x001097f9, 0x00020d89, 0x00109802,
- 0x00109807, 0x001097f9, 0x001097f9, 0x001097f9,
- 0x001097f9, 0x001097fa, 0x001097fe, 0x001097fe,
- 0x001097f9, 0x001097f9, 0x001097f9, 0x001097f9,
- 0x001097fe, 0x001097f9, 0x001097fe, 0x001097f9,
- 0x001097fa, 0x64066203, 0x493a6403, 0x42000800,
- 0x80002042, 0x05fdf5a1, 0x00000000, 0x00000000,
+ 0xb13805a0, 0x01020dda, 0x4933c857, 0x1c01f000,
+ 0xb1380588, 0x05000004, 0xb1380593, 0x0160033f,
+ 0x0101fdda, 0x83300580, 0x00111ad0, 0x05020008,
+ 0x497a6205, 0x59301202, 0x41780000, 0x0161fc4e,
+ 0x01600354, 0x411e6000, 0x0161f31f, 0x5930002b,
+ 0x59301013, 0x5930080a, 0x58040a00, 0x8c04050e,
+ 0x01620325, 0x800811c0, 0x01620330, 0x5930002b,
+ 0x80000540, 0x0162033a, 0x59325809, 0x592c040e,
+ 0x8c00051e, 0x0160031f, 0x64066203, 0x65066403,
+ 0x42000800, 0x80002042, 0x8c00051a, 0x05020002,
+ 0x84040d54, 0x05fdf534, 0xb1380498, 0x01621360,
+ 0xb1380480, 0x01601361, 0x0c01f001, 0x0010c369,
+ 0x00021191, 0x0010c372, 0x0010c377, 0x0010c369,
+ 0x0010c369, 0x0010c369, 0x0010c369, 0x0010c36a,
+ 0x0010c36e, 0x0010c36e, 0x0010c369, 0x0010c369,
+ 0x0010c369, 0x0010c369, 0x0010c36e, 0x0010c369,
+ 0x0010c36e, 0x0010c369, 0x0010c36a, 0x64066203,
+ 0x493a6403, 0x42000800, 0x80002042, 0x05fdf516,
0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000,
- 0x00000000, 0x72bb9678, 0x00000000, 0x00000000,
- 0x0010e500, 0x00001b0f, 0x42000000, 0x00110050,
- 0x42001000, 0x00110041, 0x48001000, 0x42013800,
- 0x00110450, 0x42000000, 0x00110040, 0x489c0000,
- 0x409d4000, 0x409d6800, 0x1c01f000, 0x4200d000,
- 0x0000000d, 0x42000000, 0x00000002, 0x4800d000,
- 0x0401f7fb, 0x4200d000, 0x0000000d, 0x42000000,
- 0x00000001, 0x4800d000, 0x0401f7fb, 0x1c01f000,
- 0x809d3840, 0x48813800, 0x4933c857, 0x5931040c,
- 0x82817480, 0x00000038, 0x0400000d, 0x0400100c,
- 0x82810480, 0x00000038, 0x4a025a06, 0x00000038,
- 0x0201f800, 0x0010358e, 0x40c65800, 0x80c589c0,
- 0x040207f4, 0x4178d000, 0x0401f004, 0x48825a06,
- 0x4200d000, 0x00000001, 0x40698800, 0x589d0000,
- 0x809d3800, 0x1c01f000, 0x42038000, 0x00007700,
- 0x4a038006, 0x30000000, 0x59c0d007, 0x8268e500,
- 0x00000020, 0x8c68d50a, 0x040207fc, 0x59c0d006,
- 0x59a0d20a, 0x59a0dc0a, 0x806c00e0, 0x8068d540,
- 0x486b8001, 0x59a0d20f, 0x59a0dc0f, 0x806c00e0,
- 0x8068d540, 0x486b8000, 0x59a0d20c, 0x486b8002,
- 0x59a0d20c, 0x486b8003, 0x59a0d20c, 0x486b8005,
- 0x48739009, 0x59e0d003, 0x8268d540, 0x00008060,
- 0x486bc003, 0x1c01f000, 0x59a17002, 0x48bbc857,
- 0x59a0d002, 0x8068d1c0, 0x04020033, 0x59a8d80f,
- 0x826ce500, 0x000000ff, 0x59a97080, 0x48bb8880,
- 0x59c4d0a3, 0x8268d540, 0x00002008, 0x8468d53a,
- 0x486b88a3, 0x59c4d008, 0x8268d540, 0x00000280,
- 0x8268d500, 0xffffffe1, 0x486b8808, 0x59c8d040,
- 0x8468d534, 0x486b9040, 0x59a0d207, 0x82697480,
- 0x00000044, 0x0400001d, 0x8070d0d0, 0x807000e0,
- 0x8068d540, 0x486b9120, 0x8270d540, 0x01000000,
- 0x486b9121, 0x4a039123, 0x08210008, 0x48739122,
- 0x497b9124, 0x59a8d481, 0x8068d000, 0x486b5481,
- 0x59a8d481, 0x8068d0e0, 0x8268d540, 0x0000aaaa,
- 0x486b9125, 0x497b9126, 0x497b9127, 0x59a0d207,
- 0x82697480, 0x00000044, 0x04000011, 0x4a039100,
- 0x0000e9a0, 0x0401f010, 0x806cd0d0, 0x8268d540,
- 0x00000011, 0x486b9120, 0x826cdd00, 0x00ffffff,
- 0x826cd540, 0x32000000, 0x486b9121, 0x4a039123,
- 0xe1290008, 0x486f9122, 0x0401f7e2, 0x4a039100,
- 0x0000e980, 0x1c01f000, 0x59c8d007, 0x8c68d500,
- 0x04000003, 0x4a03900d, 0x00000030, 0x1c01f000,
- 0x0201f800, 0x0010612b, 0x59b8d0ea, 0x8268d500,
- 0x00000007, 0x82697480, 0x00000003, 0x04000002,
- 0x0401f003, 0x4a0370e8, 0x00000001, 0x1c01f000,
- 0x4a038805, 0x00020000, 0x4200d000, 0x0000003c,
- 0x0201f800, 0x0010134d, 0x4a038891, 0x0000ffff,
- 0x59c97035, 0x48bb9035, 0x4a03900d, 0x00000040,
- 0x42038000, 0x00007700, 0x0201f800, 0x00100c03,
- 0x4a038006, 0x20000000, 0x42038000, 0x00007720,
- 0x0201f800, 0x00100c03, 0x4a038006, 0x20000000,
- 0x4a03a005, 0x20000000, 0x4a03a005, 0x30000000,
- 0x4a03b805, 0x30000001, 0x4a03b805, 0x20000000,
- 0x59d0d006, 0x8c68d50a, 0x040207fe, 0x59dcd006,
- 0x8c68d50a, 0x040207fb, 0x1c01f000, 0x4203a000,
- 0x00007600, 0x4200d000, 0x00000040, 0x0201f800,
- 0x0010134d, 0x4a03a00a, 0x00000001, 0x4a03a005,
- 0x20000000, 0x59d0d006, 0x4a03a005, 0x30000000,
- 0x59d0d006, 0x8c68d50a, 0x040207fe, 0x59d0d005,
- 0x59a0d211, 0x59a0dc11, 0x806c00e0, 0x8068d540,
- 0x486ba001, 0x59a0d20e, 0x59a0dc0e, 0x806c00e0,
- 0x8068d540, 0x486ba000, 0x59a0d20c, 0x486ba003,
- 0x59a0d20c, 0x486ba002, 0x59a0d20c, 0x486ba008,
- 0x1c01f000, 0x58ed7003, 0x48bbc857, 0x58ed7005,
- 0x48bbc857, 0x58ed7006, 0x48bbc857, 0x58ed7007,
- 0x48bbc857, 0x58ed7001, 0x48bbc857, 0x48efc857,
- 0x58ed7008, 0x48bbc857, 0x58ecd005, 0x8068d1c0,
- 0x04000005, 0x40ecd000, 0x0201f800, 0x00100603,
- 0x0401f006, 0x58ecd003, 0x58ecd806, 0x58ece001,
- 0x0201f800, 0x001001ec, 0x1c01f000, 0x829d3c80,
- 0x00000006, 0x48813800, 0x48853801, 0x48893802,
- 0x488d3803, 0x48913804, 0x48953805, 0x59a10407,
- 0x4883c857, 0x59a0da0e, 0x59a0d40e, 0x806800e0,
- 0x806d2d40, 0x59a0da11, 0x59a0d411, 0x806800e0,
- 0x806d2540, 0x59a10a0c, 0x830d1500, 0x00000080,
- 0x8d0e1d0e, 0x04020020, 0x59a8d21b, 0x8c68d50a,
- 0x04000018, 0x599cd201, 0x40840000, 0x80697480,
- 0x04001027, 0x82811d00, 0x00008000, 0x04020028,
- 0x59a8d00d, 0x41640000, 0x80697480, 0x04000015,
- 0x4967c857, 0x59a97064, 0x48bbc857, 0x59a97063,
- 0x48bbc857, 0x59a97062, 0x48bbc857, 0x4a034407,
- 0x00000018, 0x0201f800, 0x0010229e, 0x0401f133,
- 0x4a034407, 0x00000005, 0x0201f800, 0x0010229e,
- 0x0401f12e, 0x0201f800, 0x001022a6, 0x0401f12b,
- 0x59a8d063, 0x59a80062, 0x80697480, 0x040207e9,
- 0x0201f800, 0x00103893, 0x80c589c0, 0x0402004d,
- 0x0201f800, 0x001022aa, 0x0401f120, 0x4887c857,
- 0x0201f800, 0x001022a2, 0x0401f11c, 0x0201f800,
- 0x00106efa, 0x40c66000, 0x80c589c0, 0x0400003e,
- 0x0201f800, 0x0010358e, 0x40c65800, 0x80c589c0,
- 0x04000022, 0x4a02601d, 0x0010b391, 0x48898a05,
- 0x48898c05, 0x4882620c, 0x4886640c, 0x59a0d40f,
- 0x8068d0e0, 0x59a0da0f, 0x406c0000, 0x8068d540,
- 0x486a600d, 0x59a0d40a, 0x8068d0e0, 0x59a0da0a,
- 0x406c0000, 0x8068d540, 0x486a600e, 0x59a0d40e,
- 0x8068d0e0, 0x59a0da0e, 0x406c0000, 0x8068d540,
- 0x486a600f, 0x59a0d411, 0x8068d0e0, 0x59a0da11,
- 0x406c0000, 0x8068d540, 0x486a6010, 0x0401fe99,
- 0x80c589c0, 0x04020006, 0x0201f800, 0x00106ec5,
- 0x4a034407, 0x00000002, 0x0401f7bc, 0x48ee602d,
- 0x58ee580c, 0x4a01d801, 0x00000001, 0x592cd206,
- 0x4869d805, 0x832cd400, 0x00000007, 0x4869d803,
- 0x4895d806, 0x4891d807, 0x4a01d808, 0x0010e7a7,
- 0x4a034000, 0x00000001, 0x49334001, 0x0401ff5e,
- 0x0401f0da, 0x4a034407, 0x00000003, 0x0401f7a7,
- 0x0201f800, 0x0010613a, 0x598e600b, 0x0201f800,
- 0x00106449, 0x0201f800, 0x0010613a, 0x408e3000,
- 0x0201f800, 0x00106694, 0x59926005, 0x813261c0,
- 0x0400000d, 0x0201f800, 0x00106378, 0x0201f800,
- 0x0010610e, 0x0201f800, 0x00106114, 0x42027800,
- 0x00001000, 0x42028000, 0x0000002e, 0x0201f800,
- 0x0010f10e, 0x811a3000, 0x83197480, 0x00000004,
- 0x040007ec, 0x040017eb, 0x0201f800, 0x0010082d,
- 0x0201f800, 0x0010298e, 0x497b507e, 0x497b4408,
- 0x4201d000, 0x003d0900, 0x0201f800, 0x00105e71,
- 0x59c50880, 0x59c510a3, 0x497b4002, 0x0401fe6b,
- 0x0401ff0b, 0x4a03a005, 0x10000000, 0x59c4d005,
- 0x8268d540, 0x000000f0, 0x486b8805, 0x0401fe83,
- 0x0201f800, 0x00102995, 0x40c50000, 0x80c589c0,
- 0x04020020, 0x59c8d001, 0x8068d1c0, 0x0402001d,
- 0x59dcd006, 0x8268d500, 0x43200f80, 0x0400000a,
- 0x59dcd006, 0x82697480, 0x00000000, 0x83f17500,
- 0x0c000000, 0x04000004, 0x82b97580, 0x0c000000,
- 0x0402000e, 0x59d0d006, 0x8268d500, 0x43dc0700,
- 0x040007e8, 0x59d0d006, 0x82697480, 0x00000000,
- 0x83f17500, 0x0c000000, 0x040007e2, 0x82b97480,
- 0x0c000000, 0x040007df, 0x4a034408, 0x0000dddd,
- 0x808101c0, 0x0402004e, 0x59a0d408, 0x82697480,
- 0x0000dddd, 0x0400004a, 0x59c0d008, 0x8268d500,
- 0x0fffffff, 0x59c8d818, 0x826c0500, 0xf0000000,
- 0x8068d540, 0x486b8008, 0x0201f800, 0x00100c03,
- 0x59c0d806, 0x4a038006, 0x10000000, 0x59c0d809,
- 0x4883900d, 0x59c8d020, 0x8068f130, 0x59c8d020,
- 0x82690500, 0x00ffffff, 0x59c8d021, 0x8268fd00,
- 0x00ffffff, 0x4a03900d, 0x00000001, 0x59c8d020,
- 0x8068e930, 0x59c4e005, 0x826cd500, 0x00e00000,
- 0x04020004, 0x82797480, 0x00000032, 0x0400002b,
- 0x486fc857, 0x487bc857, 0x4877c857, 0x4883c857,
- 0x487fc857, 0x4873c857, 0x59a9700f, 0x48bbc857,
- 0x0201f800, 0x001029a7, 0x4a03507e, 0x00000001,
- 0x4200d000, 0x00000064, 0x0401f004, 0x8068d1c0,
- 0x04000028, 0x8068d040, 0x59c0d807, 0x8c6cdd04,
- 0x040007fb, 0x0401fe7b, 0x0201f800, 0x001038af,
- 0x0201f800, 0x001064d4, 0x0401fe6a, 0x4201d000,
- 0x000186a0, 0x0201f800, 0x00105e71, 0x488b88a3,
- 0x48878880, 0x59a8d07e, 0x8068d1c0, 0x04020711,
- 0x0201f800, 0x0010225c, 0x0401f030, 0x4a03507e,
- 0x00000001, 0x0401f7ec, 0x82757480, 0x000000e1,
- 0x040207d4, 0x407c0000, 0x80817480, 0x040207d1,
- 0x59a8d00f, 0x80697480, 0x040207ce, 0x8270d500,
- 0x000000f0, 0x040207cb, 0x0401fe48, 0x0401f7d5,
- 0x4a03507e, 0x00000001, 0x0201f800, 0x001018ce,
- 0x80c589c0, 0x04000008, 0x59c4d005, 0x8268d500,
- 0x000000f0, 0x04000007, 0x4a034408, 0x0000bbbb,
- 0x0401f7d1, 0x4a034408, 0x0000aaaa, 0x0401f7ce,
- 0x0201f800, 0x00102995, 0x80c57040, 0x04000008,
- 0x59c0d007, 0x8268d500, 0x000501c0, 0x040007c6,
- 0x4a034408, 0x0000dddd, 0x0401f7c3, 0x4a034408,
- 0x0000cccc, 0x0401f7c0, 0x589d2805, 0x589d2004,
- 0x589d1803, 0x589d1002, 0x589d0801, 0x589d0000,
- 0x829d3c00, 0x00000006, 0x1c01f000, 0x809d3840,
- 0x48813800, 0x592cd006, 0x82697480, 0x01000000,
- 0x04000016, 0x41310000, 0x59a26001, 0x48ee602d,
- 0x58ee580c, 0x4979d801, 0x592cd206, 0x4869d805,
- 0x832cd400, 0x00000007, 0x4869d803, 0x5931700d,
- 0x48b9d806, 0x5931700e, 0x48b9d807, 0x4a01d808,
- 0x0010e7a7, 0x4a034000, 0x00000001, 0x40826000,
- 0x0401fe61, 0x0401f009, 0x41310000, 0x59a26001,
- 0x4933c857, 0x0201f800, 0x00106ec7, 0x40826000,
- 0x0201f800, 0x001022aa, 0x589d0000, 0x809d3800,
- 0x1c01f000, 0x829d3c80, 0x00000005, 0x48813800,
- 0x48853801, 0x48893802, 0x488d3803, 0x48913804,
- 0x412d1000, 0x41310800, 0x59a26001, 0x4069d800,
- 0x586b400a, 0x5868d002, 0x82697480, 0x00000200,
- 0x0400003c, 0x58ee580c, 0x59a0d800, 0x806cd000,
- 0x486b4000, 0x592d0001, 0x0401f005, 0x40825800,
- 0x806cd840, 0x04000004, 0x58810001, 0x808101c0,
- 0x040207fb, 0x808101c0, 0x04000012, 0x58ed000c,
- 0x832cd400, 0x00000007, 0x4869d803, 0x592cd206,
- 0x4869d805, 0x5880d205, 0x8268d580, 0x00000103,
- 0x8068d080, 0x8068d000, 0x8068d13e, 0x4869d801,
- 0x0401fe29, 0x40866000, 0x40825800, 0x0401f03b,
- 0x58ee580c, 0x592cd205, 0x82697480, 0x00000103,
- 0x04000030, 0x41351800, 0x41452000, 0x592cd405,
- 0x8468d55e, 0x486a5c05, 0x42028800, 0x000007fd,
- 0x4200d000, 0x00fffffd, 0x0201f800, 0x001041e5,
- 0x40c66800, 0x80c589c0, 0x04000010, 0x0201f800,
- 0x00108911, 0x80c589c0, 0x04000018, 0x40866000,
- 0x4881d801, 0x4a01d808, 0x0010e781, 0x0401f00f,
- 0x0201f800, 0x00102296, 0x0201f800, 0x00106ec5,
- 0x40866000, 0x0401f019, 0x59a26001, 0x0201f800,
- 0x00106ec5, 0x40866000, 0x4a034407, 0x00000002,
- 0x0201f800, 0x0010229e, 0x408a5800, 0x408e6800,
- 0x40928800, 0x0401f00d, 0x0201f800, 0x00106ec5,
- 0x40866000, 0x4a034407, 0x00000004, 0x0401f7f5,
- 0x0201f800, 0x00106ec5, 0x40866000, 0x0201f800,
- 0x0010225c, 0x408a5800, 0x589d2004, 0x589d1803,
- 0x589d1002, 0x589d0801, 0x589d0000, 0x829d3c00,
- 0x00000005, 0x1c01f000, 0x829d3c80, 0x00000004,
- 0x48813800, 0x48853801, 0x48893802, 0x488d3803,
- 0x40690800, 0x497bc856, 0x59a0d20d, 0x8068d1c0,
- 0x0400001e, 0x5884d001, 0x4178d800, 0x82697480,
- 0x00000002, 0x04000051, 0x59a26001, 0x5930d00f,
- 0x4068d800, 0x8068d1c0, 0x0400004c, 0x8068d040,
- 0x486a600f, 0x5932580d, 0x5930d80c, 0x586d1800,
- 0x586d1001, 0x586cd002, 0x82690500, 0xfffffffc,
- 0x5930d00e, 0x8068d000, 0x486a600e, 0x82697480,
- 0x00000005, 0x04000034, 0x826cd400, 0x00000003,
- 0x486a600c, 0x0401f012, 0x59a0d40c, 0x8068d0e0,
- 0x59a0da0c, 0x826c0500, 0x0000fffc, 0x80690540,
- 0x4883a003, 0x59a0d40e, 0x8068d0e0, 0x59a0da0e,
- 0x406c0000, 0x80691d40, 0x59a0d411, 0x8068d0e0,
- 0x59a0da11, 0x406c0000, 0x80691540, 0x4201d000,
- 0x00003a98, 0x0201f800, 0x00105e71, 0x4883a002,
- 0x59a9707f, 0x48bba008, 0x488fa000, 0x488ba001,
- 0x59d0d005, 0x4a03a005, 0x10000000, 0x4178d000,
- 0x04025002, 0x8068d000, 0x8068d1c0, 0x04020007,
- 0x5884d001, 0x8068d000, 0x48690801, 0x4200d800,
- 0x00000001, 0x0401f011, 0x4200d000, 0x0010e818,
- 0x4084d800, 0x4178e000, 0x0201f800, 0x001001ec,
- 0x0401f7f4, 0x497a600e, 0x592e5801, 0x812e59c0,
- 0x040007df, 0x492e600d, 0x832cdc00, 0x00000006,
- 0x486e600c, 0x0401f7da, 0x406d8800, 0x589d1803,
- 0x589d1002, 0x589d0801, 0x589d0000, 0x829d3c00,
- 0x00000004, 0x1c01f000, 0x809d3840, 0x48813800,
- 0x40690000, 0x59d0d006, 0x8268d500, 0x43dc0700,
- 0x0400000a, 0x59d0d006, 0x82697480, 0x00000000,
- 0x83f17500, 0x0c000000, 0x04000004, 0x82b97580,
- 0x0c000000, 0x0402003d, 0x59a0d20d, 0x8068d1c0,
- 0x0400000f, 0x59d17006, 0x48bbc857, 0x59d0d006,
- 0x8c68d504, 0x0400000a, 0x59d0d006, 0x82697480,
- 0x00000000, 0x83f17500, 0x0c000000, 0x04000004,
- 0x82b97580, 0x0c000000, 0x04020010, 0x0401f033,
- 0x4200d000, 0x0010e880, 0x4080e000, 0x0201f800,
- 0x001001ec, 0x59d0d006, 0x82697480, 0x00000000,
- 0x83f17500, 0x0c000000, 0x040007f5, 0x82b97480,
- 0x0c000000, 0x040007f2, 0x4a03a005, 0x20000000,
- 0x59d0d006, 0x8268d500, 0x43dc0700, 0x04020017,
- 0x5880d801, 0x806d7040, 0x04000017, 0x826d7480,
- 0x00000002, 0x040207e7, 0x4a010001, 0x00000001,
- 0x59d17006, 0x48bbc857, 0x59d0d006, 0x82697480,
- 0x00000000, 0x83f17500, 0x0c000000, 0x04000004,
- 0x82b97580, 0x0c000000, 0x040207df, 0x4080d000,
- 0x0401ff4e, 0x0401f009, 0x4a034408, 0x0000dddd,
- 0x0401f006, 0x48690001, 0x4080d000, 0x0401ff47,
- 0x80c589c0, 0x040207f6, 0x589d0000, 0x809d3800,
- 0x1c01f000, 0x0201f800, 0x001018ce, 0x80c589c0,
- 0x04020002, 0x0401f009, 0x4a034407, 0x00000017,
- 0x0201f800, 0x0010229e, 0x4203e000, 0x50000000,
- 0x497bc856, 0x0401f000, 0x1c01f000, 0x4068d800,
- 0x59c17009, 0x48bbc857, 0x59c0e009, 0x8270d500,
- 0x00e00000, 0x04000019, 0x586cd000, 0x486b4210,
- 0x586cd000, 0x8068d120, 0x486b4410, 0x8c70e52e,
- 0x0402000e, 0x8c70e52c, 0x04000004, 0x586cd00b,
- 0x8068d000, 0x4868d80b, 0x8c70e52a, 0x04000004,
- 0x586cd00d, 0x8068d000, 0x4868d80d, 0x4200d000,
- 0x00000001, 0x0401f005, 0x586cd00c, 0x8068d000,
- 0x4868d80c, 0x0401f7f0, 0x40698800, 0x1c01f000,
- 0x4068e000, 0x58697003, 0x48bbc857, 0x59a0d40d,
- 0x8068d1c0, 0x04000034, 0x5870d002, 0x4178d800,
- 0x82697480, 0x00000002, 0x04000050, 0x59a26000,
- 0x5930d00f, 0x4068d800, 0x8068d1c0, 0x0400004b,
- 0x8068d040, 0x486a600f, 0x5932580d, 0x5930d80c,
- 0x586cf800, 0x586cf001, 0x586cd002, 0x8268ed00,
- 0xfffffffc, 0x5930d00e, 0x8068d000, 0x486a600e,
- 0x82697480, 0x00000005, 0x04000033, 0x826cd400,
- 0x00000003, 0x486a600c, 0x487f8000, 0x487b8001,
- 0x48778002, 0x59c0d008, 0x8268d500, 0x0fffffff,
- 0x59c8d818, 0x826c0500, 0xf0000000, 0x8068d540,
- 0x486b8008, 0x59c0d006, 0x58717003, 0x48bb8006,
- 0x5870d002, 0x8068d000, 0x4868e002, 0x5870d004,
- 0x8468d540, 0x4868e004, 0x4200d800, 0x00000001,
- 0x0401f022, 0x5870d003, 0x4200d800, 0x00000001,
- 0x82697480, 0x10000000, 0x0402001c, 0x59a0d40f,
- 0x8068d0e0, 0x59a0da0f, 0x406c0000, 0x8068fd40,
- 0x59a0d40a, 0x8068d0e0, 0x59a0da0a, 0x406c0000,
- 0x8068f540, 0x59a0d40c, 0x8068d0e0, 0x59a0da0c,
- 0x826c0500, 0x0000fffc, 0x8068ed40, 0x48778003,
- 0x0401f7d2, 0x497a600e, 0x592e5801, 0x812e59c0,
- 0x040007ce, 0x492e600d, 0x832cdc00, 0x00000006,
- 0x486e600c, 0x0401f7c9, 0x406d8800, 0x1c01f000,
- 0x809d3840, 0x48813800, 0x40690000, 0x59c0d007,
- 0x8268d500, 0x00f507c0, 0x0400000a, 0x59c0d007,
- 0x82697480, 0x00000000, 0x83f17500, 0x0c000000,
- 0x04000004, 0x82b97580, 0x0c000000, 0x0402003c,
- 0x59a0d40d, 0x8068d1c0, 0x0400000c, 0x59c17007,
- 0x48bbc857, 0x59c0d007, 0x82697480, 0x00000000,
- 0x83f17500, 0x0c000000, 0x04000004, 0x82b97580,
- 0x0c000000, 0x04020010, 0x0401f035, 0x4200d000,
- 0x0010e962, 0x4080e000, 0x0201f800, 0x001001ec,
- 0x59c0d007, 0x82697480, 0x00000000, 0x83f17500,
- 0x0c000000, 0x040007f5, 0x82b97480, 0x0c000000,
- 0x040007f2, 0x4a038006, 0x20000000, 0x59c0d007,
- 0x8268d500, 0x00f507c0, 0x04020019, 0x4a010003,
- 0x10000004, 0x5880d802, 0x806d7040, 0x04000017,
- 0x826d7480, 0x00000002, 0x040207e5, 0x4a010002,
- 0x00000001, 0x59c17007, 0x48bbc857, 0x59c0d007,
- 0x82697480, 0x00000000, 0x83f17500, 0x0c000000,
- 0x04000004, 0x82b97580, 0x0c000000, 0x040207dd,
- 0x4080d000, 0x0401ff5b, 0x0401f009, 0x4a034408,
- 0x0000dddd, 0x0401f006, 0x48690002, 0x4080d000,
- 0x0401ff54, 0x80c589c0, 0x040207f6, 0x589d0000,
- 0x809d3800, 0x1c01f000, 0x59a26000, 0x813261c0,
- 0x04000009, 0x59325809, 0x812e59c0, 0x04000005,
- 0x0201f800, 0x00106ec5, 0x0201f800, 0x00100595,
- 0x497b4000, 0x59a26001, 0x813261c0, 0x04000009,
- 0x59325809, 0x812e59c0, 0x04000005, 0x0201f800,
- 0x00106ec5, 0x0201f800, 0x00100595, 0x497b4001,
- 0x1c01f000, 0x809d3840, 0x48813800, 0x40690000,
- 0x0201f800, 0x001029a7, 0x0201f800, 0x0010e5b2,
- 0x5880d00b, 0x8068d1c0, 0x04020004, 0x5880d00c,
- 0x8068d1c0, 0x04000007, 0x59a0d00d, 0x8068d1c0,
- 0x0402000a, 0x4200d000, 0x00000001, 0x0401f009,
- 0x5880d00d, 0x8068d1c0, 0x04000006, 0x59a0d00d,
- 0x8068d1c0, 0x040007f8, 0x0401ffd0, 0x0401f7f6,
- 0x40698800, 0x589d0000, 0x809d3800, 0x1c01f000,
- 0x809d3840, 0x48813800, 0x4200d000, 0x000000ef,
- 0x0201f800, 0x00101635, 0x4a03500f, 0x000000ef,
- 0x59c4d0a3, 0x8468d55a, 0x8468d53a, 0x486b88a3,
- 0x0201f800, 0x001016a9, 0x80c589c0, 0x04000040,
- 0x4200d000, 0x00000001, 0x0201f800, 0x0010189f,
- 0x4200d000, 0x00000001, 0x0201f800, 0x00101875,
- 0x4201d000, 0x00000014, 0x0201f800, 0x00105e41,
- 0x59c4d008, 0x8268d540, 0x00000280, 0x8268d500,
- 0xffffffe1, 0x486b8808, 0x4a0388a7, 0x0000f7f7,
- 0x4a038805, 0x04000001, 0x4200d000, 0xbe20bfff,
- 0x4200d800, 0x80018000, 0x0201f800, 0x00103f5e,
- 0x4200d000, 0xfffeffff, 0x4178d800, 0x0201f800,
- 0x00103f5e, 0x42010000, 0x00001387, 0x0401f008,
- 0x80817040, 0x04000053, 0x80810040, 0x42000000,
- 0xffffffff, 0x80817480, 0x04000009, 0x4201d000,
- 0x00000014, 0x0201f800, 0x00105e41, 0x0201f800,
- 0x001018ce, 0x80c589c0, 0x040007f2, 0x59c4d005,
- 0x8268dd00, 0x04000000, 0x8c68d534, 0x0402001c,
- 0x59c4d0a4, 0x8268d500, 0x0000000f, 0x82697480,
- 0x00000008, 0x0402003c, 0x0401f015, 0x0201f800,
- 0x001016b4, 0x80c589c0, 0x04000006, 0x4178d000,
- 0x0201f800, 0x0010189f, 0x4178d000, 0x0401f7bf,
- 0x0201f800, 0x001016bf, 0x80c589c0, 0x04000026,
- 0x4200d000, 0x00000002, 0x0201f800, 0x0010189f,
- 0x4200d000, 0x00000002, 0x0401f7b4, 0x4200d000,
- 0x00020000, 0x0201f800, 0x00103f65, 0x4201d000,
- 0x00000064, 0x0201f800, 0x00105e41, 0x4200d000,
- 0xfeffffff, 0x4200d800, 0x02000000, 0x0201f800,
- 0x00103f5e, 0x4200d000, 0xfdffffff, 0x4178d800,
- 0x0201f800, 0x00103f5e, 0x4a038805, 0x04000001,
- 0x59c4d0a4, 0x8268d500, 0x0000000f, 0x4178d800,
- 0x8068d1c0, 0x0402000c, 0x4200d800, 0x00000001,
- 0x0401f009, 0x4200d000, 0x00000003, 0x0201f800,
- 0x0010189f, 0x4200d000, 0x00000003, 0x0401f78f,
- 0x40c4d800, 0x406d8800, 0x589d0000, 0x809d3800,
- 0x1c01f000, 0x829d3c80, 0x00000003, 0x48813800,
- 0x48853801, 0x48893802, 0x40690000, 0x492fc857,
- 0x5868a808, 0x58690805, 0x4a03b805, 0x20000000,
- 0x59dcd006, 0x4a03b805, 0x30000000, 0x58817006,
- 0x48bbb800, 0x58817007, 0x48bbb801, 0x5881700a,
- 0x48bbb802, 0x4857b803, 0x4a03b805, 0x30000002,
- 0x59dcd006, 0x4a03b805, 0x70000001, 0x59dcd006,
- 0x4a03b805, 0x10000000, 0x59dcd006, 0x82697480,
- 0x00000000, 0x83f17500, 0x0c000000, 0x040007fb,
- 0x82b97480, 0x0c000000, 0x040007f8, 0x4a03b805,
- 0x20000000, 0x59dcd006, 0x8268d500, 0x43200f80,
- 0x04000005, 0x4a034408, 0x0000dddd, 0x4178d000,
- 0x0401f01a, 0x59dd7000, 0x48b90006, 0x59dd7001,
- 0x48b90007, 0x4084d000, 0x808509c0, 0x04000013,
- 0x412d1000, 0x0201f800, 0x00100579, 0x40c65800,
- 0x80c589c0, 0x04000007, 0x4a025a05, 0x0000000a,
- 0x492d1001, 0x4200d000, 0x00000001, 0x0401f007,
- 0x4080d000, 0x4088d800, 0x4084e000, 0x0201f800,
- 0x001001ec, 0x0401f7f5, 0x40698800, 0x589d1002,
- 0x589d0801, 0x589d0000, 0x829d3c00, 0x00000003,
- 0x1c01f000, 0x829d3c80, 0x00000002, 0x48813800,
- 0x48853801, 0x40690000, 0x497bc856, 0x4203a000,
- 0x00007600, 0x4200d000, 0x00000040, 0x0201f800,
- 0x0010134d, 0x4a03a00a, 0x00000001, 0x4a03a005,
- 0x20000000, 0x59d0d006, 0x4a03a005, 0x30000000,
- 0x59d0d006, 0x82690d00, 0x00000020, 0x8c68d50a,
- 0x040207fc, 0x59a0d20d, 0x48690005, 0x8068d1c0,
- 0x04020002, 0x0401f070, 0x59a0d411, 0x8068d0e0,
- 0x59a0da11, 0x406c0000, 0x8068d540, 0x48690007,
- 0x59a0d40e, 0x8068d0e0, 0x59a0da0e, 0x406c0000,
- 0x8068d540, 0x48690006, 0x59a0d40c, 0x8068d0e0,
- 0x59a0da0c, 0x826c0500, 0x0000fffc, 0x8068d540,
- 0x48690009, 0x486ba003, 0x0201f800, 0x00106efa,
- 0x40c66000, 0x80c589c0, 0x0400004f, 0x49334001,
- 0x0201f800, 0x00100579, 0x40c65800, 0x80c589c0,
- 0x04000041, 0x4a025a05, 0x00000018, 0x4a025806,
- 0x00abcdef, 0x492e6009, 0x492e600d, 0x58817005,
- 0x48ba600f, 0x48865c11, 0x4a02601d, 0x0010b391,
- 0x4a02600e, 0x00000004, 0x832cd400, 0x00000012,
- 0x486a600c, 0x48690008, 0x4a01000a, 0x0000000c,
- 0x5880d005, 0x8068d040, 0x48690005, 0x4080d000,
- 0x0401ff5d, 0x59a0d408, 0x82697480, 0x0000dddd,
- 0x040007c5, 0x5880d005, 0x8068d1c0, 0x040007c2,
- 0x82697480, 0x00000004, 0x04000014, 0x04001013,
- 0x8268d480, 0x00000005, 0x48690005, 0x4a01000a,
- 0x0000003c, 0x832cd400, 0x00000006, 0x48690008,
- 0x4080d000, 0x0401ff48, 0x80c589c0, 0x040007b2,
- 0x5880d005, 0x82697480, 0x00000004, 0x83f17500,
- 0x03000000, 0x040007ef, 0x4979000a, 0x4178e000,
- 0x8270e400, 0x0000000c, 0x8068d840, 0x406cd000,
- 0x806cd9c0, 0x040207fb, 0x4871000a, 0x486d0005,
- 0x0401f7e9, 0x4200d000, 0x0010eacb, 0x4200d800,
- 0x00100579, 0x4080e000, 0x0201f800, 0x001001ec,
- 0x0401f7b9, 0x4200d000, 0x0010eacb, 0x4200d800,
- 0x00106efa, 0x4080e000, 0x0201f800, 0x001001ec,
- 0x0401f7ab, 0x589d0801, 0x589d0000, 0x829d3c00,
- 0x00000002, 0x1c01f000, 0x809d3840, 0x48813800,
- 0x40690000, 0x497bc856, 0x42038000, 0x00007700,
- 0x0201f800, 0x00100c03, 0x59c0d006, 0x59a0d40d,
- 0x48690005, 0x8068d1c0, 0x04020009, 0x497b9009,
- 0x59e0d003, 0x8268d540, 0x00008060, 0x486bc003,
- 0x4a038009, 0x00e00000, 0x0401f07d, 0x59a0d40a,
- 0x8068d0e0, 0x59a0da0a, 0x406c0000, 0x8068d540,
- 0x48690007, 0x59a0d40f, 0x8068d0e0, 0x59a0da0f,
- 0x406c0000, 0x8068d540, 0x48690006, 0x59a0d40c,
- 0x8068d0e0, 0x59a0da0c, 0x826c0500, 0x0000fffc,
- 0x8068d540, 0x48690009, 0x486bc857, 0x58817009,
- 0x48bb8003, 0x0201f800, 0x00106efa, 0x40c66000,
- 0x80c589c0, 0x0400005a, 0x49334000, 0x0201f800,
- 0x00100579, 0x40c65800, 0x80c589c0, 0x0400004c,
- 0x4a025a05, 0x00000018, 0x4a025806, 0x00abcdef,
- 0x492e6009, 0x492e600d, 0x58817005, 0x48ba600f,
- 0x4a02600e, 0x00000004, 0x497a5c11, 0x4a02601d,
- 0x0010b391, 0x832cd400, 0x00000012, 0x486a600c,
- 0x48690008, 0x4a01000a, 0x0000000c, 0x5880d005,
- 0x8068d040, 0x48690005, 0x4080d000, 0x0401fed2,
- 0x59a0d408, 0x82697480, 0x0000dddd, 0x040007c3,
- 0x5880d005, 0x8068d1c0, 0x040007b9, 0x82697480,
- 0x00000004, 0x04000014, 0x04001013, 0x8268d480,
- 0x00000005, 0x48690005, 0x4a01000a, 0x0000003c,
- 0x832cd400, 0x00000006, 0x48690008, 0x4080d000,
- 0x0401febd, 0x80c589c0, 0x04000018, 0x5880d005,
- 0x82697480, 0x00000004, 0x83f17500, 0x03000000,
- 0x040007ef, 0x4979000a, 0x4178e000, 0x8270e400,
- 0x0000000c, 0x8068d840, 0x406cd000, 0x806cd9c0,
- 0x040207fb, 0x4871000a, 0x486d0005, 0x832cd400,
- 0x00000006, 0x48690008, 0x4080d000, 0x0401fea6,
- 0x80c589c0, 0x040207ea, 0x59a0d408, 0x82697480,
- 0x0000dddd, 0x0402078e, 0x0401f011, 0x4200d000,
- 0x0010eb5c, 0x4200d800, 0x00100579, 0x4080e000,
- 0x0201f800, 0x001001ec, 0x0401f7ae, 0x4200d000,
- 0x0010eb5c, 0x4200d800, 0x00106efa, 0x4080e000,
- 0x0201f800, 0x001001ec, 0x0401f7a0, 0x589d0000,
- 0x809d3800, 0x1c01f000, 0x829d3c80, 0x00000002,
- 0x48813800, 0x48853801, 0x40690800, 0x406d0000,
- 0x0201f800, 0x00101911, 0x40800000, 0x4084d000,
- 0x80c4dd00, 0x0201f800, 0x00101918, 0x589d0801,
- 0x589d0000, 0x829d3c00, 0x00000002, 0x1c01f000,
- 0x829d3c80, 0x00000002, 0x48813800, 0x48853801,
- 0x40690800, 0x406d0000, 0x0201f800, 0x00101911,
- 0x40800000, 0x4084d000, 0x80c4dd40, 0x0201f800,
- 0x00101918, 0x589d0801, 0x589d0000, 0x829d3c00,
- 0x00000002, 0x1c01f000, 0x809d3840, 0x48a13800,
- 0x829d3c80, 0x0000000f, 0x409d4000, 0x829d3c80,
- 0x00000005, 0x48813800, 0x48853801, 0x48893802,
- 0x488d3803, 0x48913804, 0x490fc857, 0x59c90840,
- 0x59a9000f, 0x59c510a3, 0x59c51808, 0x59c52080,
- 0x8d0e1d0e, 0x040200a3, 0x59a0d407, 0x8268dd00,
- 0x00000007, 0x826d7480, 0x00000002, 0x040000aa,
- 0x806cd9c0, 0x04000006, 0x806d7040, 0x04000144,
- 0x0201f800, 0x001022a2, 0x0401f17f, 0x4200d000,
- 0x00000802, 0x4200d800, 0x00000002, 0x0401ffc9,
- 0x0401fdb4, 0x80c589c0, 0x04000144, 0x59a0d410,
- 0x8068d0e0, 0x59a0da10, 0x406c0000, 0x8068d540,
- 0x48694000, 0x497b4408, 0x4979400b, 0x4979400c,
- 0x4979400d, 0x49794002, 0x49794001, 0x0201f800,
- 0x0010298e, 0x0201f800, 0x00103893, 0x80c589c0,
- 0x040000fe, 0x0201f800, 0x0010613a, 0x598e600b,
- 0x0201f800, 0x00106449, 0x0201f800, 0x0010613a,
- 0x417a3000, 0x0201f800, 0x00106694, 0x59926005,
- 0x813261c0, 0x0400000d, 0x0201f800, 0x00106378,
- 0x0201f800, 0x0010610e, 0x0201f800, 0x00106114,
- 0x42027800, 0x00001000, 0x42028000, 0x0000002e,
- 0x0201f800, 0x0010f10e, 0x811a3000, 0x83197480,
- 0x00000004, 0x040007ec, 0x040017eb, 0x0201f800,
- 0x0010082d, 0x49794004, 0x497b4002, 0x40a0d000,
- 0x0401feea, 0x59a0d408, 0x82697480, 0x0000dddd,
- 0x04000138, 0x40a0d000, 0x0401fe53, 0x59a0d408,
- 0x82697480, 0x0000dddd, 0x04000132, 0x59a0d00d,
- 0x8068d1c0, 0x040200f2, 0x4979400e, 0x40a0d000,
- 0x0201f800, 0x0010e818, 0x0201f800, 0x0010e558,
- 0x58a0d004, 0x8068d1c0, 0x040000ca, 0x58a0e00e,
- 0x80717040, 0x04000062, 0x59c8d001, 0x8068d1c0,
- 0x040200d6, 0x59a0d002, 0x42000000, 0xfeedbeef,
- 0x80697480, 0x040000db, 0x4a014003, 0x10000000,
- 0x40a0d000, 0x0401fc6f, 0x4a034002, 0xfeedbeef,
- 0x40a0d000, 0x0201f800, 0x0010e880, 0x59a0d408,
- 0x82697480, 0x0000dddd, 0x04000028, 0x40a0d000,
- 0x0401fcc0, 0x59a0d408, 0x82697480, 0x0000dddd,
- 0x04000022, 0x0201f800, 0x0010e5a0, 0x59c4d005,
- 0x8c68d534, 0x0402003c, 0x0201f800, 0x00102995,
- 0x80c589c0, 0x040200e4, 0x59a0d00d, 0x8068d1c0,
- 0x04000016, 0x59a26000, 0x59a0d40d, 0x8068d1c0,
- 0x04000004, 0x5930d00f, 0x8068d1c0, 0x040207c7,
- 0x59a26001, 0x59a0d20d, 0x8068d1c0, 0x04000004,
- 0x5930d00f, 0x8068d1c0, 0x040207c0, 0x58a0d002,
- 0x8068d1c0, 0x040207bd, 0x58a0d001, 0x8068d1c0,
- 0x040207ba, 0x0401fcf1, 0x58a0e00e, 0x0401f024,
- 0x0201f800, 0x001016d5, 0x80c589c0, 0x0400075b,
- 0x4200d000, 0x00000003, 0x0201f800, 0x0010189f,
- 0x4200d000, 0x00000003, 0x0201f800, 0x00101875,
- 0x0401f752, 0x8d0e1d0e, 0x0402000c, 0x0201f800,
- 0x00104b2d, 0x80c589c0, 0x040200bf, 0x836d7480,
- 0x00000003, 0x04020005, 0x59c4d0a4, 0x8268d500,
- 0x0000000f, 0x0400075a, 0x0201f800, 0x001022a6,
- 0x0401f0cd, 0x4a01400d, 0x0000bbbb, 0x4a01400e,
- 0x00000001, 0x4200e000, 0x00000001, 0x58a0d000,
- 0x8068d040, 0x48694000, 0x4200d800, 0x00030d40,
- 0x80717040, 0x04020004, 0x0401f097, 0x806cd840,
- 0x04000004, 0x59c0d007, 0x8c68d504, 0x040007fc,
- 0x59c0d007, 0x8c68d504, 0x0402008a, 0x59c0d007,
- 0x8268d500, 0x000501c0, 0x04020003, 0x0201f800,
- 0x0010e8d7, 0x4a01400d, 0x0000dddd, 0x40a0d000,
- 0x0401fcc9, 0x80c589c0, 0x04020004, 0x58a0d000,
- 0x8068d1c0, 0x04020764, 0x0201f800, 0x001038af,
- 0x0201f800, 0x001064d4, 0x0201f800, 0x0010e5a6,
- 0x4201d000, 0x000186a0, 0x48938880, 0x488f8808,
- 0x488b88a3, 0x4883500f, 0x48879040, 0x42038000,
- 0x00007700, 0x4a038009, 0xf4f60000, 0x4a038891,
- 0x0000ffff, 0x4a03900d, 0x00000040, 0x0201f800,
- 0x00100725, 0x4a0370e8, 0x00000001, 0x59a0d407,
- 0x8268d500, 0x00000003, 0x82697480, 0x00000002,
- 0x04000010, 0x4200d000, 0x00000802, 0x4200d800,
- 0xfffffffc, 0x0401fec1, 0x4200d000, 0x0000240c,
- 0x4200d800, 0xffffff7f, 0x0401febc, 0x0201f800,
- 0x00104b43, 0x40c50000, 0x80c589c0, 0x04000067,
- 0x59a0d408, 0x82697480, 0x0000dddd, 0x0400000f,
- 0x58a0d80b, 0x806cd9c0, 0x04020007, 0x58a0d00c,
- 0x8068d1c0, 0x04020004, 0x58a0d00d, 0x8068d1c0,
- 0x0400006b, 0x486f4407, 0x58a0d00c, 0x486b4208,
- 0x58a0d00d, 0x486b4408, 0x0201f800, 0x001022ae,
- 0x0401f065, 0x59c8d001, 0x8068d1c0, 0x04020738,
- 0x40a0d000, 0x0201f800, 0x0010e880, 0x59a0d408,
- 0x82697480, 0x0000dddd, 0x04000731, 0x0201f800,
- 0x00102995, 0x80c589c0, 0x040007f3, 0x0201f800,
- 0x0010e8d7, 0x4a01400d, 0x0000aaaa, 0x4a01400e,
- 0x00000001, 0x0401f726, 0x40a0d000, 0x0201f800,
- 0x0010e8e5, 0x80c589c0, 0x04020781, 0x59a0d002,
- 0x42000000, 0xfeedbeef, 0x80697480, 0x04020727,
- 0x4a014003, 0x10000004, 0x0401f726, 0x40a0d000,
- 0x0201f800, 0x0010e818, 0x0401f70c, 0x4200d000,
- 0x00000802, 0x0401fe8b, 0x4200d000, 0x0000240c,
- 0x4200d800, 0x00000080, 0x0401fe86, 0x0401fc71,
- 0x80c589c0, 0x040206be, 0x4084d000, 0x4088d800,
- 0x408ce000, 0x0201f800, 0x001001ec, 0x0401f6b8,
- 0x40a0d000, 0x0401fc48, 0x80c589c0, 0x0400077c,
- 0x0401f782, 0x40a0d000, 0x0401fc43, 0x80c589c0,
- 0x0402077e, 0x58a0d000, 0x8068d1c0, 0x04020774,
- 0x0401f77a, 0x4a01400d, 0x0000cccc, 0x58a0d000,
- 0x486b4210, 0x58a0d000, 0x8068d120, 0x486b4410,
- 0x0401f74f, 0x4a034407, 0x00000016, 0x0201f800,
- 0x0010229e, 0x0401f014, 0x4a0388a7, 0x0000f7f7,
- 0x4200d000, 0xbeffffff, 0x4200d800, 0x80018000,
- 0x0201f800, 0x00103f5e, 0x4200d000, 0xfffeffff,
- 0x4080d800, 0x0201f800, 0x00103f5e, 0x0401f78d,
- 0x40a0d000, 0x0401fc20, 0x0401f75c, 0x0201f800,
- 0x0010225c, 0x589d2004, 0x589d1803, 0x589d1002,
- 0x589d0801, 0x589d0000, 0x829d3c00, 0x00000014,
- 0x589d4000, 0x809d3800, 0x1c01f000, 0x829d3c80,
- 0x00000002, 0x48813800, 0x48853801, 0x59a8d006,
- 0x82690d00, 0x00004000, 0x4178d800, 0x8c68d51c,
- 0x04020022, 0x4937c857, 0x42010000, 0x00000001,
- 0x0201f800, 0x00106efa, 0x40c66000, 0x80c589c0,
- 0x04020003, 0x4080d800, 0x0401f018, 0x4925881d,
- 0x4935880a, 0x0201f800, 0x001088c0, 0x48826407,
- 0x40867800, 0x0201f800, 0x001041b3, 0x59a8d016,
- 0x8068d000, 0x486b5016, 0x599cd019, 0x40867000,
- 0x8c68d50e, 0x04020003, 0x42027000, 0x00000004,
- 0x0201f800, 0x00106f24, 0x599cd208, 0x486a6c12,
- 0x41790000, 0x4080d800, 0x406d8800, 0x589d0801,
- 0x589d0000, 0x829d3c00, 0x00000002, 0x1c01f000,
- 0x4937c857, 0x5934d200, 0x8468d502, 0x486a6a00,
- 0x1c01f000, 0x829d3c80, 0x00000004, 0x48813800,
- 0x48853801, 0x48893802, 0x488d3803, 0x41350800,
- 0x41451000, 0x412d1800, 0x4943c857, 0x493fc857,
- 0x0201f800, 0x0010613a, 0x40c50000, 0x8d3e7d18,
- 0x04000003, 0x8d3e7d16, 0x04000069, 0x0201f800,
- 0x0010f3b3, 0x0201f800, 0x0010f3a3, 0x0201f800,
- 0x0010f458, 0x0201f800, 0x0010f5a5, 0x808101c0,
- 0x04000003, 0x0201f800, 0x0010612b, 0x417a8800,
- 0x0401f00a, 0x58c4d200, 0x8c68d50e, 0x0400000e,
- 0x81468800, 0x83457480, 0x000007ef, 0x83f17500,
- 0x03000000, 0x04000027, 0x0201f800, 0x001042a5,
- 0x40c66800, 0x80c589c0, 0x040007f6, 0x8d3e7d06,
- 0x040207f1, 0x497a6c0b, 0x8d3e7d18, 0x0400003f,
- 0x5935000f, 0x0401f007, 0x49410207, 0x40825800,
- 0x58810000, 0x492fc857, 0x0201f800, 0x0002035b,
- 0x808101c0, 0x040207f9, 0x497a680f, 0x497a6810,
- 0x4937c857, 0x4a026c00, 0x00000707, 0x497a6a03,
- 0x497a6811, 0x599cd401, 0x486a6a0b, 0x5934d402,
- 0x8268d500, 0x000000ff, 0x486a6c02, 0x81468800,
- 0x83457480, 0x000007ef, 0x040007dc, 0x040017db,
- 0x8d3e7d02, 0x0400002d, 0x497b5018, 0x42028800,
- 0x000007f0, 0x0401f007, 0x81468800, 0x83457480,
- 0x000007ff, 0x83f17500, 0x03000000, 0x04000023,
- 0x0201f800, 0x001042a5, 0x40c66800, 0x80c589c0,
- 0x040007f6, 0x48c7c857, 0x4a018c00, 0x00000707,
- 0x58c4d00c, 0x8068d1c0, 0x040207f0, 0x58c4d00f,
- 0x8068d1c0, 0x040207ed, 0x0201f800, 0x00103f92,
- 0x81468800, 0x83457480, 0x000007ff, 0x040007ed,
- 0x040017ec, 0x0401f00d, 0x4937c857, 0x8d0e1d20,
- 0x04000004, 0x4a026c00, 0x00000707, 0x0401f7ad,
- 0x0201f800, 0x00103f92, 0x0401f7aa, 0x0201f800,
- 0x0010efd3, 0x0401f796, 0x40866800, 0x408a8800,
- 0x408e5800, 0x589d1803, 0x589d1002, 0x589d0801,
- 0x589d0000, 0x829d3c00, 0x00000004, 0x1c01f000,
- 0x829d3c80, 0x00000006, 0x48813800, 0x48853801,
- 0x48893802, 0x488d3803, 0x48913804, 0x48953805,
- 0x41352800, 0x41412000, 0x41451800, 0x412d1000,
- 0x4933c857, 0x493fc857, 0x4927c857, 0x0201f800,
- 0x0010613a, 0x40c50800, 0x5932680a, 0x813669c0,
- 0x04000030, 0x5934d403, 0x406a8800, 0x42028000,
- 0x00000029, 0x8d3e7d18, 0x0402002d, 0x0201f800,
- 0x0010f260, 0x0201f800, 0x0010f344, 0x0201f800,
- 0x0010f3dd, 0x0201f800, 0x0010f7f5, 0x4937c857,
- 0x8d3e7d06, 0x04000004, 0x5934d200, 0x8c68d50e,
- 0x0402001c, 0x497a6c0b, 0x8d3e7d18, 0x04000021,
- 0x5935000f, 0x808101c0, 0x0400000b, 0x49410207,
- 0x40825800, 0x58810000, 0x492fc857, 0x0201f800,
- 0x0002035b, 0x808101c0, 0x040207f9, 0x4882680f,
- 0x48826810, 0x4937c857, 0x4a026c00, 0x00000707,
- 0x497a6a03, 0x497a6811, 0x599cd401, 0x486a6a0b,
- 0x5934d402, 0x8268d500, 0x000000ff, 0x486a6c02,
- 0x808509c0, 0x04000013, 0x0401f00c, 0x8d3e7d16,
- 0x040207d3, 0x0201f800, 0x00105ff7, 0x0401f7d0,
- 0x8d0e1d20, 0x04000008, 0x4a026c00, 0x00000707,
- 0x808509c0, 0x04000007, 0x0201f800, 0x0010612b,
- 0x0401f004, 0x0201f800, 0x00103f92, 0x0401f7ed,
- 0x408a5800, 0x408e8800, 0x40928000, 0x40966800,
- 0x589d2805, 0x589d2004, 0x589d1803, 0x589d1002,
- 0x589d0801, 0x589d0000, 0x829d3c00, 0x00000006,
- 0x1c01f000, 0x809d3840, 0x48813800, 0x4937c857,
- 0x42010000, 0x00000001, 0x0201f800, 0x00106efa,
- 0x40c66000, 0x80c589c0, 0x04000020, 0x4925881d,
- 0x4935880a, 0x5934d403, 0x82697480, 0x000007fe,
- 0x04000003, 0x417a7800, 0x0401ff8a, 0x0201f800,
- 0x001088c0, 0x48826407, 0x417a7800, 0x0201f800,
- 0x001041b3, 0x4200d000, 0x00000003, 0x0201f800,
- 0x001041bd, 0x836d7480, 0x00000003, 0x04000004,
- 0x59a8d016, 0x8068d000, 0x486b5016, 0x42027000,
- 0x00000002, 0x0201f800, 0x00106f24, 0x599cd208,
- 0x486a6c12, 0x41790000, 0x40818800, 0x589d0000,
- 0x809d3800, 0x1c01f000, 0x829d3c80, 0x00000003,
- 0x48813800, 0x48853801, 0x48893802, 0x40690800,
- 0x406d1000, 0x40d50000, 0x0201f800, 0x00106114,
- 0x5880d02f, 0x41300000, 0x80697480, 0x04000018,
- 0x5880d02e, 0x41300000, 0x80697480, 0x0400001f,
- 0x5930d800, 0x806cd9c0, 0x04020008, 0x59317001,
- 0x48b91001, 0x5930d001, 0x8068d1c0, 0x04020025,
- 0x488a680c, 0x0401f038, 0x5930d801, 0x806cd9c0,
- 0x04000022, 0x59317000, 0x48b8d800, 0x486d0800,
- 0x497a6001, 0x497a6000, 0x0401f02f, 0x5930d801,
- 0x806cd9c0, 0x04000010, 0x5930d000, 0x8068d1c0,
- 0x04020025, 0x486d002e, 0x59317001, 0x48b9002f,
- 0x497a6001, 0x0401f024, 0x5930d001, 0x8068d1c0,
- 0x04020013, 0x4885002e, 0x48690800, 0x486a680c,
- 0x0401f01d, 0x5930d000, 0x8068d1c0, 0x04020012,
- 0x486d002f, 0x486d002e, 0x497a680c, 0x0401f016,
- 0x486e6001, 0x0401f014, 0x59317000, 0x48b90800,
- 0x486e680c, 0x497a6000, 0x0401f00f, 0x59317001,
- 0x48b9002e, 0x59317001, 0x48b90800, 0x497a6001,
- 0x0401f009, 0x59317000, 0x48b9002f, 0x486e6000,
- 0x0401f7ee, 0x59317000, 0x48b8d800, 0x497a6000,
- 0x0401f7da, 0x589d1002, 0x589d0801, 0x589d0000,
- 0x829d3c00, 0x00000003, 0x1c01f000, 0x809d3840,
- 0x48a13800, 0x829d3c80, 0x00000005, 0x409d4000,
- 0x829d3c80, 0x00000005, 0x48813800, 0x48853801,
- 0x48893802, 0x488d3803, 0x48913804, 0x41790800,
- 0x40850000, 0x4933c857, 0x0201f800, 0x0010613a,
- 0x40c52000, 0x41351800, 0x41191000, 0x49914003,
- 0x49d14000, 0x49a54001, 0x49154002, 0x48d94004,
- 0x5932680a, 0x58d4e02f, 0x4070d800, 0x8070e1c0,
- 0x04020008, 0x0401f01e, 0x406ce000, 0x586cd800,
- 0x806cd9c0, 0x0400001a, 0x808509c0, 0x04020018,
- 0x41300000, 0x806d7480, 0x04000011, 0x586cd00a,
- 0x41340000, 0x80697480, 0x040207f4, 0x406d0000,
- 0x586cd801, 0x806cd9c0, 0x040007f2, 0x41300000,
- 0x0401f005, 0x406d0000, 0x586cd801, 0x806cd9c0,
- 0x040007ec, 0x806d7480, 0x040207fb, 0x42010800,
- 0x00000001, 0x806cd9c0, 0x040207e8, 0x80857040,
- 0x04000020, 0x417a3000, 0x0201f800, 0x00106694,
- 0x5990d005, 0x41300000, 0x80697480, 0x04000010,
- 0x811a3000, 0x83197480, 0x00000004, 0x040007f7,
- 0x040017f6, 0x408a3000, 0x408e6800, 0x58a32003,
- 0x58a3a000, 0x58a34801, 0x58a22802, 0x58a1b004,
- 0x80917040, 0x04020011, 0x0401f00e, 0x42010800,
- 0x00000001, 0x0201f800, 0x00106378, 0x0201f800,
- 0x0010610e, 0x0201f800, 0x00106114, 0x0401f7ee,
- 0x4070d000, 0x4080d800, 0x0401ff48, 0x0401f7ea,
- 0x0201f800, 0x0010612b, 0x40858800, 0x589d2004,
- 0x589d1803, 0x589d1002, 0x589d0801, 0x589d0000,
- 0x829d3c00, 0x0000000a, 0x589d4000, 0x809d3800,
- 0x1c01f000, 0x829d3c80, 0x00000002, 0x48813800,
- 0x48853801, 0x41310800, 0x598e6005, 0x813261c0,
- 0x0400000b, 0x59310000, 0x0201f800, 0x0010603e,
- 0x0201f800, 0x00106ec5, 0x0201f800, 0x00106124,
- 0x40826000, 0x813261c0, 0x040207f7, 0x497b1805,
- 0x497b1804, 0x40866000, 0x589d0801, 0x589d0000,
- 0x829d3c00, 0x00000002, 0x1c01f000, 0x829d3c80,
- 0x00000002, 0x48813800, 0x48853801, 0x40690000,
- 0x59310800, 0x497a6000, 0x0201f800, 0x00106114,
- 0x808101c0, 0x04000008, 0x48850000, 0x598cd002,
- 0x41300000, 0x80697480, 0x0402000b, 0x48831802,
- 0x0401f009, 0x598cd002, 0x41300000, 0x80697480,
- 0x04000003, 0x48871803, 0x0401f003, 0x48831802,
- 0x48831803, 0x0201f800, 0x00106124, 0x589d0801,
- 0x589d0000, 0x829d3c00, 0x00000002, 0x1c01f000,
- 0x829d3c80, 0x00000002, 0x48813800, 0x48853801,
- 0x40690000, 0x59310800, 0x497a6000, 0x0201f800,
- 0x00106114, 0x808101c0, 0x04000008, 0x48850000,
- 0x598cd006, 0x41300000, 0x80697480, 0x0402000b,
- 0x48831806, 0x0401f009, 0x598cd006, 0x41300000,
- 0x80697480, 0x04000003, 0x48871807, 0x0401f003,
- 0x48831806, 0x48831807, 0x0201f800, 0x00106124,
- 0x589d0801, 0x589d0000, 0x829d3c00, 0x00000002,
- 0x1c01f000, 0x829d3c80, 0x00000002, 0x48813800,
- 0x48853801, 0x40690000, 0x59310800, 0x497a6000,
- 0x0201f800, 0x00106114, 0x808101c0, 0x04000008,
- 0x48850000, 0x598cd008, 0x41300000, 0x80697480,
- 0x0402000b, 0x48831808, 0x0401f009, 0x598cd008,
- 0x41300000, 0x80697480, 0x04000003, 0x48871809,
- 0x0401f003, 0x48831808, 0x48831809, 0x0201f800,
- 0x00106124, 0x589d0801, 0x589d0000, 0x829d3c00,
- 0x00000002, 0x1c01f000, 0x829d3c80, 0x00000002,
- 0x48813800, 0x48853801, 0x598d0003, 0x40810800,
- 0x4933c857, 0x813261c0, 0x04020007, 0x0401f00a,
- 0x41300000, 0x80817480, 0x0400000e, 0x40810800,
- 0x58810000, 0x808101c0, 0x040207fa, 0x4178d000,
- 0x0401f02b, 0x4200d000, 0x000005ed, 0x4080d800,
- 0x4080e000, 0x0201f800, 0x001001ec, 0x0401f7f6,
- 0x598cd00b, 0x80697480, 0x0400001e, 0x0201f800,
- 0x00106114, 0x598cd003, 0x40800000, 0x80697480,
- 0x04000010, 0x598cd002, 0x80697480, 0x04000009,
- 0x58817000, 0x48b90800, 0x49790000, 0x0201f800,
- 0x00106124, 0x4200d000, 0x00000001, 0x0401f010,
- 0x48871802, 0x49790000, 0x49790800, 0x0401f7f8,
- 0x58817000, 0x48bb1803, 0x49790000, 0x598cd002,
- 0x80697480, 0x040207f2, 0x497b1802, 0x0401f7f0,
- 0x0201f800, 0x0010667c, 0x0401f7e1, 0x40698800,
- 0x589d0801, 0x589d0000, 0x829d3c00, 0x00000002,
- 0x1c01f000, 0x829d3c80, 0x00000002, 0x48813800,
- 0x48853801, 0x598d0009, 0x41790800, 0x4933c857,
- 0x813261c0, 0x04020007, 0x0401f00a, 0x41300000,
- 0x80817480, 0x0400000e, 0x40810800, 0x58810000,
- 0x808101c0, 0x040207fa, 0x4178d000, 0x0401f015,
- 0x4200d000, 0x000005aa, 0x4080d800, 0x4084e000,
- 0x0201f800, 0x001001ec, 0x0401f7f6, 0x4084d000,
- 0x0401ff81, 0x598cd00b, 0x41300000, 0x80697480,
- 0x04000005, 0x497a6008, 0x4200d000, 0x00000001,
- 0x0401f004, 0x0201f800, 0x0010667c, 0x0401f7fa,
- 0x40698800, 0x589d0801, 0x589d0000, 0x829d3c00,
- 0x00000002, 0x1c01f000, 0x829d3c80, 0x00000002,
- 0x48813800, 0x48853801, 0x598d0007, 0x41790800,
- 0x4933c857, 0x813261c0, 0x04020007, 0x0401f017,
- 0x41300000, 0x80817480, 0x04000007, 0x40810800,
- 0x58810000, 0x808101c0, 0x040207fa, 0x4178d000,
- 0x0401f01a, 0x4084d000, 0x0401ff3a, 0x598cd00b,
- 0x41300000, 0x80697480, 0x04000011, 0x5930d403,
- 0x82697480, 0x00000042, 0x0400000b, 0x4200d000,
- 0x00000001, 0x0401f00d, 0x4200d000, 0x00000561,
- 0x4080d800, 0x4084e000, 0x0201f800, 0x001001ec,
- 0x0401f7e9, 0x497a6008, 0x0401f7f5, 0x0201f800,
- 0x0010667c, 0x0401f7ee, 0x40698800, 0x589d0801,
- 0x589d0000, 0x829d3c00, 0x00000002, 0x1c01f000,
- 0x829d3c80, 0x00000002, 0x48813800, 0x48853801,
- 0x41790000, 0x0201f800, 0x0010613a, 0x40c50800,
- 0x0401ffc6, 0x80c57040, 0x04000007, 0x0401ff96,
- 0x80c57040, 0x04000004, 0x0401ff50, 0x80c57040,
- 0x04020002, 0x40c50000, 0x80857040, 0x04020003,
- 0x0201f800, 0x0010612b, 0x40818800, 0x589d0801,
- 0x589d0000, 0x829d3c00, 0x00000002, 0x1c01f000,
- 0x829d3c80, 0x00000002, 0x48813800, 0x48853801,
- 0x5c00d000, 0x4c680000, 0x486bc857, 0x41350000,
- 0x412d0800, 0x5932680a, 0x59325809, 0x4933c857,
- 0x4943c857, 0x493fc857, 0x5930d407, 0x486bc857,
- 0x5930dc07, 0x806c0040, 0x4000d000, 0x82697480,
- 0x00000010, 0x83f17500, 0x03000000, 0x04000013,
- 0x0c01f001, 0x0010f175, 0x0010f14b, 0x0010f159,
- 0x0010f175, 0x0010f17e, 0x0010f18b, 0x0010f138,
- 0x0010f138, 0x0010f138, 0x0010f195, 0x0010f138,
- 0x0010f138, 0x0010f138, 0x0010f138, 0x0010f138,
- 0x0010f13e, 0x0010f13e, 0x4200d000, 0x00000a7f,
- 0x4130e000, 0x0201f800, 0x001001ec, 0x0401f092,
- 0x0201f800, 0x001084ee, 0x80c589c0, 0x04020062,
- 0x59325819, 0x0201f800, 0x00100595, 0x0201f800,
- 0x00106ec7, 0x8d3e7d1c, 0x04000087, 0x497a600a,
- 0x0401f085, 0x0201f800, 0x001084ee, 0x80c589c0,
- 0x040007f7, 0x49425a07, 0x0201f800, 0x0002035b,
- 0x5930d229, 0x82697480, 0x00000003, 0x040207f0,
- 0x0201f800, 0x001085d7, 0x0401f7ed, 0x5930d008,
- 0x8c68d500, 0x0402004c, 0x0201f800, 0x001084ee,
- 0x80c589c0, 0x040007e6, 0x592cd205, 0x8268d500,
- 0x000000ff, 0x82697480, 0x00000014, 0x04000003,
- 0x0201f800, 0x001085d7, 0x0201f800, 0x00108e9b,
- 0x4a025a05, 0x00000103, 0x49425a07, 0x497a580a,
- 0x0201f800, 0x00108657, 0x0201f800, 0x00109e6c,
- 0x0201f800, 0x0002035b, 0x0401f7d1, 0x0201f800,
- 0x0010f4c8, 0x80c589c0, 0x04020035, 0x0201f800,
- 0x001088b6, 0x0201f800, 0x001075b8, 0x0401f7c8,
- 0x42000000, 0x00110484, 0x81317480, 0x0400002f,
- 0x0201f800, 0x001084ee, 0x80c589c0, 0x040007c0,
- 0x4200d000, 0x000009c8, 0x412cd800, 0x4130e000,
- 0x0401f7b1, 0x5930d008, 0x8c68d500, 0x0402001d,
- 0x0201f800, 0x001084ee, 0x80c589c0, 0x0402000d,
- 0x0201f800, 0x00108e9b, 0x0401f7b1, 0x0201f800,
- 0x001084ee, 0x80c589c0, 0x040007ad, 0x49425a07,
- 0x497a5c0a, 0x0201f800, 0x0002035b, 0x0401f7a8,
- 0x0201f800, 0x00109b18, 0x0201f800, 0x00108e9b,
- 0x0401f7a3, 0x49425a07, 0x0201f800, 0x0002035b,
- 0x0401f79c, 0x0201f800, 0x00100bd7, 0x0401f7b3,
- 0x0201f800, 0x00100bd7, 0x0401f7e2, 0x0201f800,
- 0x00101cd3, 0x0401f7ca, 0x0201f800, 0x001084ee,
- 0x80c589c0, 0x04000016, 0x59a8e067, 0x412c0000,
- 0x80717480, 0x04000005, 0x4200d000, 0x000009e1,
- 0x412cd800, 0x0401f780, 0x592d7000, 0x48bb5067,
- 0x592cd000, 0x8068d1c0, 0x04020002, 0x486b5068,
- 0x592cd205, 0x82697480, 0x00000055, 0x04000007,
- 0x49425a07, 0x0201f800, 0x0002035b, 0x497a6203,
- 0x497a6009, 0x0401f004, 0x0201f800, 0x0010058c,
- 0x0401f7fb, 0x40826800, 0x40865800, 0x589d0801,
- 0x589d0000, 0x829d3c00, 0x00000002, 0x1c01f000,
- 0x809d3840, 0x48813800, 0x5930dc07, 0x406c0000,
- 0x826d7480, 0x00000011, 0x83f17500, 0x03000000,
- 0x04000014, 0x0c01f001, 0x0010f23b, 0x0010f20b,
- 0x0010f21b, 0x0010f227, 0x0010f1fa, 0x0010f1fd,
- 0x0010f23f, 0x0010f23b, 0x0010f23b, 0x0010f23b,
- 0x0010f23b, 0x0010f1f2, 0x0010f1f2, 0x0010f23b,
- 0x0010f1f2, 0x0010f234, 0x0010f23b, 0x0010f24a,
- 0x4200d000, 0x00000b72, 0x4130e000, 0x0201f800,
- 0x001001ec, 0x4200d800, 0x00000001, 0x0401f063,
- 0x4178d800, 0x8d3e7d1a, 0x04020060, 0x833ce500,
- 0x00000001, 0x4178d800, 0x8d3e7d00, 0x0402005b,
- 0x8d3e7d18, 0x04000003, 0x8d3e7d16, 0x040007f2,
- 0x5930d42c, 0x4070d800, 0x8c68d500, 0x04020053,
- 0x0401f7ed, 0x8d3e7d1a, 0x04020019, 0x8d3e7d00,
- 0x04020017, 0x833d0500, 0x00001000, 0x8d3e7d18,
- 0x040207e5, 0x8d3e7d06, 0x040007e3, 0x0201f800,
- 0x001087f7, 0x4080d800, 0x80c589c0, 0x04020043,
- 0x0401f7dd, 0x8d3e7d00, 0x040007db, 0x5930d229,
- 0x82697480, 0x00000003, 0x04020005, 0x0201f800,
- 0x0010606c, 0x80c589c0, 0x040207d3, 0x4178d800,
- 0x0401f036, 0x8d3e7d00, 0x0402002f, 0x5930d00a,
- 0x833cdd00, 0x00001000, 0x8d3e7d18, 0x040207ca,
- 0x8d3e7d06, 0x040007c8, 0x5868d200, 0x8c68d50e,
- 0x0402002a, 0x0401f7c4, 0x8d3e7d18, 0x040007f0,
- 0x4200d800, 0x00000001, 0x8d3e7d16, 0x04000023,
- 0x0401f7eb, 0x4178d800, 0x8d3e7d00, 0x0402001f,
- 0x0401f7b9, 0x4178d800, 0x8d3e7d00, 0x0402001b,
- 0x833cd500, 0x00001000, 0x4200d800, 0x00000001,
- 0x8d3e7d18, 0x04020015, 0x4068d800, 0x0401f013,
- 0x833cd500, 0x00000001, 0x4178d800, 0x8d3e7d00,
- 0x0402000e, 0x8d3e7d18, 0x040007f8, 0x4200d800,
- 0x00000001, 0x8d3e7d16, 0x04000008, 0x4068d800,
- 0x0401f006, 0x0201f800, 0x0010606c, 0x40c4d800,
- 0x80c589c0, 0x040207ce, 0x406d8800, 0x589d0000,
- 0x809d3800, 0x1c01f000, 0x829d3c80, 0x00000006,
- 0x48813800, 0x48853801, 0x48893802, 0x488d3803,
- 0x48913804, 0x48953805, 0x4933c857, 0x0201f800,
- 0x0010613a, 0x40c52800, 0x41352000, 0x41311000,
- 0x412d1800, 0x41790800, 0x598e6003, 0x0401f003,
- 0x41310800, 0x59326000, 0x813261c0, 0x04000022,
- 0x5932680a, 0x813669c0, 0x040007fa, 0x5934d403,
- 0x41440000, 0x80697480, 0x040207f6, 0x5930d01d,
- 0x41240000, 0x80697480, 0x04000003, 0x812649c0,
- 0x040207f0, 0x0401ff53, 0x80c589c0, 0x040007ed,
- 0x42010000, 0x00000001, 0x0201f800, 0x001084ee,
- 0x80c589c0, 0x04020015, 0x808101c0, 0x040007e5,
- 0x0201f800, 0x0010603e, 0x59310000, 0x4084d000,
- 0x0401fd5b, 0x0401fe7b, 0x40826000, 0x813261c0,
- 0x040207e0, 0x408a6000, 0x408e5800, 0x40926800,
- 0x80957040, 0x04000002, 0x0401f00e, 0x0201f800,
- 0x0010612b, 0x0401f00b, 0x0201f800, 0x00108b79,
- 0x80c589c0, 0x040007e9, 0x5930d403, 0x82697480,
- 0x00000043, 0x040207e5, 0x41790000, 0x0401f7e3,
- 0x589d2805, 0x589d2004, 0x589d1803, 0x589d1002,
- 0x589d0801, 0x589d0000, 0x829d3c00, 0x00000006,
- 0x1c01f000, 0x829d3c80, 0x00000006, 0x48813800,
- 0x48853801, 0x48893802, 0x488d3803, 0x48913804,
- 0x48953805, 0x412d1800, 0x41312000, 0x41352800,
- 0x41790800, 0x0201f800, 0x0010613a, 0x40c51000,
- 0x83457480, 0x000007ef, 0x04000008, 0x04001007,
- 0x408e5800, 0x40926000, 0x40966800, 0x80897040,
- 0x04000020, 0x0401f031, 0x0201f800, 0x001042a5,
- 0x40c66800, 0x80c589c0, 0x04000025, 0x598e6009,
- 0x0401f003, 0x41310800, 0x59326000, 0x813261c0,
- 0x04000017, 0x5930d01d, 0x41240000, 0x80697480,
- 0x040207f9, 0x5930d00a, 0x41340000, 0x80697480,
- 0x040207f5, 0x0401fef7, 0x80c589c0, 0x040007f2,
- 0x0201f800, 0x0010603e, 0x59310000, 0x4084d000,
- 0x0401fd49, 0x0401fe27, 0x40826000, 0x0401f7ec,
- 0x0201f800, 0x0010612b, 0x0401f010, 0x8d3e7d06,
- 0x04000004, 0x5934d200, 0x8c68d50e, 0x040207d5,
- 0x0201f800, 0x001043f0, 0x0401f7d2, 0x4200d000,
- 0x00000714, 0x40c4d800, 0x4144e000, 0x0201f800,
- 0x001001ec, 0x0401f7d6, 0x589d2805, 0x589d2004,
- 0x589d1803, 0x589d1002, 0x589d0801, 0x589d0000,
- 0x829d3c00, 0x00000006, 0x1c01f000, 0x829d3c80,
- 0x00000006, 0x48813800, 0x48853801, 0x48893802,
- 0x488d3803, 0x48913804, 0x48953805, 0x41311800,
- 0x41352000, 0x412d2800, 0x41790800, 0x0201f800,
- 0x0010613a, 0x40c51000, 0x598e6007, 0x0401f003,
- 0x41310800, 0x59326000, 0x813261c0, 0x04000016,
- 0x5932680a, 0x5930d01d, 0x41240000, 0x80697480,
- 0x040207f8, 0x5934d403, 0x41440000, 0x80697480,
- 0x040207f4, 0x0401feb3, 0x80c589c0, 0x040007f1,
- 0x59310000, 0x0201f800, 0x0010603e, 0x4084d000,
- 0x0401fce4, 0x0401fde3, 0x40826000, 0x813261c0,
- 0x040207ec, 0x0201f800, 0x00106dd8, 0x0201f800,
- 0x00106e42, 0x408e6000, 0x40926800, 0x40965800,
- 0x80897040, 0x04000002, 0x0401f003, 0x0201f800,
- 0x0010612b, 0x589d2805, 0x589d2004, 0x589d1803,
- 0x589d1002, 0x589d0801, 0x589d0000, 0x829d3c00,
- 0x00000006, 0x1c01f000, 0x829d3c80, 0x00000002,
- 0x48813800, 0x48853801, 0x4947c857, 0x0201f800,
- 0x0010613a, 0x40c50800, 0x413d0000, 0x853e7d00,
- 0x0401ffb7, 0x0401ff64, 0x40827800, 0x80857040,
- 0x04000002, 0x0401f003, 0x0201f800, 0x0010612b,
- 0x589d0801, 0x589d0000, 0x829d3c00, 0x00000002,
- 0x1c01f000, 0x829d3c80, 0x00000003, 0x48813800,
- 0x48853801, 0x48893802, 0x41311000, 0x41790800,
- 0x598e6009, 0x813261c0, 0x04000011, 0x0401fe71,
- 0x80c589c0, 0x04020006, 0x41310800, 0x59326000,
- 0x813261c0, 0x040207fa, 0x0401f009, 0x0201f800,
- 0x0010603e, 0x59310000, 0x4084d000, 0x0401fcbe,
- 0x0401fd9c, 0x40826000, 0x0401f7ef, 0x0201f800,
- 0x001043d1, 0x408a6000, 0x589d1002, 0x589d0801,
- 0x589d0000, 0x829d3c00, 0x00000003, 0x1c01f000,
- 0x829d3c80, 0x00000003, 0x48813800, 0x48853801,
- 0x48893802, 0x41311000, 0x41790800, 0x598e6007,
- 0x813261c0, 0x04000011, 0x0401fe4e, 0x80c589c0,
- 0x04020006, 0x41310800, 0x59326000, 0x813261c0,
- 0x040207fa, 0x0401f009, 0x59310000, 0x0201f800,
- 0x0010603e, 0x4084d000, 0x0401fc7a, 0x0401fd79,
- 0x40826000, 0x0401f7ef, 0x0201f800, 0x00106e26,
- 0x0201f800, 0x00106e42, 0x408a6000, 0x589d1002,
- 0x589d0801, 0x589d0000, 0x829d3c00, 0x00000003,
- 0x1c01f000, 0x809d3840, 0x48813800, 0x4943c857,
- 0x0201f800, 0x0010613a, 0x40c50000, 0x0401ffd5,
- 0x0401ffb1, 0x80817040, 0x04000002, 0x0401f003,
- 0x0201f800, 0x0010612b, 0x589d0000, 0x809d3800,
- 0x1c01f000, 0x829d3c80, 0x00000004, 0x48813800,
- 0x48853801, 0x48893802, 0x488d3803, 0x0201f800,
- 0x0010613a, 0x40c51800, 0x41311000, 0x41790800,
- 0x598e6003, 0x813261c0, 0x04000008, 0x0401fe15,
- 0x80c589c0, 0x04020009, 0x41310800, 0x59326000,
- 0x813261c0, 0x040207fa, 0x408a6000, 0x808d7040,
- 0x0400000a, 0x0401f00b, 0x0201f800, 0x0010603e,
- 0x59310000, 0x4084d000, 0x0401fc1d, 0x0401fd3d,
- 0x40826000, 0x0401f7ec, 0x0201f800, 0x0010612b,
- 0x589d1803, 0x589d1002, 0x589d0801, 0x589d0000,
- 0x829d3c00, 0x00000004, 0x1c01f000, 0x809d3840,
- 0x48a13800, 0x829d3c80, 0x00000006, 0x409d4000,
- 0x829d3c80, 0x00000007, 0x48813800, 0x48853801,
- 0x48893802, 0x488d3803, 0x48913804, 0x48953805,
- 0x48993806, 0x4178d000, 0x48694005, 0x0201f800,
- 0x0010613a, 0x40c53000, 0x41311000, 0x41352000,
- 0x41192800, 0x412d1800, 0x49914003, 0x49d14000,
- 0x49a54001, 0x49154002, 0x48d94004, 0x58d6602f,
- 0x813261c0, 0x04000014, 0x41310800, 0x0401f007,
- 0x808101c0, 0x04000003, 0x41310800, 0x40826000,
- 0x808101c0, 0x0400000c, 0x59310000, 0x5932680a,
- 0x5930d01d, 0x41240000, 0x80697480, 0x040207f5,
- 0x5934d403, 0x41440000, 0x80697480, 0x040207f1,
- 0x0401f032, 0x417a3000, 0x0401f007, 0x811a3000,
- 0x83197480, 0x00000004, 0x83f17500, 0x03000000,
- 0x0400001a, 0x0201f800, 0x00106694, 0x59926005,
- 0x813261c0, 0x040007f6, 0x5932680a, 0x5930d01d,
- 0x41240000, 0x80697480, 0x040207f1, 0x5934d403,
- 0x41440000, 0x80697480, 0x040207ed, 0x0401fdb1,
- 0x80c589c0, 0x040007ea, 0x0201f800, 0x00106378,
- 0x0201f800, 0x0010610e, 0x0201f800, 0x00106114,
- 0x0401fce0, 0x0401f7e2, 0x408a6000, 0x40926800,
- 0x40963000, 0x408e5800, 0x58a32003, 0x58a3a000,
- 0x58a34801, 0x58a22802, 0x58a1b004, 0x80997040,
- 0x04000010, 0x0401f011, 0x49314005, 0x40826000,
- 0x808101c0, 0x040007d0, 0x59310001, 0x0401fd95,
- 0x80c589c0, 0x040007f9, 0x4084d000, 0x58a0d805,
- 0x0201f800, 0x0010ef0c, 0x0401fcc6, 0x0401f7f4,
- 0x0201f800, 0x0010612b, 0x589d3006, 0x589d2805,
- 0x589d2004, 0x589d1803, 0x589d1002, 0x589d0801,
- 0x589d0000, 0x829d3c00, 0x0000000d, 0x589d4000,
- 0x809d3800, 0x1c01f000, 0x809d3840, 0x48a13800,
- 0x829d3c80, 0x00000008, 0x409d4000, 0x829d3c80,
- 0x00000007, 0x48813800, 0x48853801, 0x48893802,
- 0x488d3803, 0x48913804, 0x48953805, 0x48993806,
- 0x41791800, 0x0201f800, 0x0010613a, 0x40c52800,
- 0x41313000, 0x49354006, 0x492d4005, 0x49194007,
- 0x49914003, 0x49d14000, 0x49a54001, 0x49154002,
- 0x48d94004, 0x58d6602f, 0x813261c0, 0x04000023,
- 0x41312000, 0x408d0800, 0x59311000, 0x5932680a,
- 0x0401f009, 0x41311800, 0x808509c0, 0x04000010,
- 0x808101c0, 0x04000002, 0x40826000, 0x808101c0,
- 0x0400000d, 0x59310001, 0x0401fd52, 0x80c589c0,
- 0x040007f5, 0x4090d000, 0x408cd800, 0x0201f800,
- 0x0010ef0c, 0x0401fc83, 0x0401f7f2, 0x41310800,
- 0x0401f7f0, 0x808911c0, 0x04000006, 0x408a6000,
- 0x808509c0, 0x04000003, 0x40852000, 0x40810800,
- 0x808911c0, 0x040207e1, 0x417a3000, 0x0201f800,
- 0x00106694, 0x59926005, 0x813261c0, 0x04000004,
- 0x0401fd38, 0x80c589c0, 0x04020012, 0x811a3000,
- 0x83197480, 0x00000004, 0x040007f5, 0x040017f4,
- 0x409a6000, 0x58a26806, 0x58a25805, 0x58a23007,
- 0x58a32003, 0x58a3a000, 0x58a34801, 0x58a22802,
- 0x58a1b004, 0x80957040, 0x0400000a, 0x0401f00b,
- 0x0201f800, 0x00106378, 0x0201f800, 0x0010610e,
- 0x0201f800, 0x00106114, 0x0401fc56, 0x0401f7e8,
- 0x0201f800, 0x0010612b, 0x589d3006, 0x589d2805,
- 0x589d2004, 0x589d1803, 0x589d1002, 0x589d0801,
- 0x589d0000, 0x829d3c00, 0x0000000f, 0x589d4000,
- 0x809d3800, 0x1c01f000, 0x4178e000, 0x497bc856,
- 0x5930dc03, 0x826cd480, 0x00000002, 0x82697480,
- 0x00000002, 0x04000007, 0x04001006, 0x599cd019,
- 0x8c68d50e, 0x04000005, 0x806cd9c0, 0x04020003,
- 0x4200e000, 0x00000001, 0x40718800, 0x1c01f000,
- 0x829d3c80, 0x00000004, 0x48813800, 0x48853801,
- 0x48893802, 0x488d3803, 0x412d0800, 0x41351000,
- 0x41391800, 0x0201f800, 0x0010f1d6, 0x80c589c0,
- 0x040000b5, 0x5932680a, 0x5930dc07, 0x406c0000,
- 0x826d7480, 0x00000011, 0x83f17500, 0x03000000,
- 0x04000026, 0x0c01f001, 0x0010f59b, 0x0010f541,
- 0x0010f551, 0x0010f51a, 0x0010f541, 0x0010f551,
- 0x0010f561, 0x0010f574, 0x0010f514, 0x0010f514,
- 0x0010f505, 0x0010f514, 0x0010f514, 0x0010f514,
- 0x0010f514, 0x0010f50e, 0x0010f505, 0x0010f502,
- 0x59325819, 0x0201f800, 0x00100595, 0x5930d203,
- 0x82697480, 0x00000004, 0x04000077, 0x59325809,
- 0x0201f800, 0x001084ee, 0x80c589c0, 0x0402006e,
- 0x0201f800, 0x00106ec7, 0x8d3e7d1c, 0x0400008a,
- 0x497a600a, 0x0401f088, 0x4200d000, 0x0000030f,
- 0x4130e000, 0x0201f800, 0x001001ec, 0x0401f082,
- 0x813669c0, 0x04000067, 0x0201f800, 0x00108fa8,
- 0x5930d203, 0x82697480, 0x00000004, 0x04000074,
- 0x59325809, 0x0201f800, 0x001084ee, 0x80c589c0,
- 0x040007e8, 0x592cd205, 0x8268d500, 0x000000ff,
- 0x82697480, 0x00000014, 0x04000003, 0x0201f800,
- 0x001085d7, 0x0201f800, 0x00108e9b, 0x0201f800,
- 0x0002076c, 0x4a025a05, 0x00000103, 0x5930d402,
- 0x486a5c07, 0x592cd409, 0x8c68d512, 0x04020053,
- 0x49425a07, 0x497a580a, 0x0201f800, 0x00108b83,
- 0x0201f800, 0x0002035b, 0x0401f7ce, 0x5930d403,
- 0x82697480, 0x00000043, 0x04000057, 0x0201f800,
- 0x0010a173, 0x0401ff81, 0x80c589c0, 0x04020040,
- 0x0201f800, 0x001085f9, 0x80c589c0, 0x040007c1,
- 0x0201f800, 0x001075b8, 0x0401f7be, 0x59325809,
- 0x0201f800, 0x001084ee, 0x80c589c0, 0x040007b9,
- 0x49425a07, 0x497a5c0a, 0x0201f800, 0x0002035b,
- 0x5930d229, 0x82697480, 0x00000003, 0x040207b1,
- 0x0201f800, 0x001085d7, 0x0401f7ae, 0x5930d203,
- 0x82697480, 0x00000004, 0x04000034, 0x59325809,
- 0x0201f800, 0x001084ee, 0x80c589c0, 0x040007a5,
- 0x49425a07, 0x813669c0, 0x04020026, 0x0201f800,
- 0x00108e9b, 0x0201f800, 0x0002076c, 0x0201f800,
- 0x00108b83, 0x0401f7cb, 0x5930d203, 0x82697480,
- 0x00000011, 0x04020024, 0x5930d429, 0x486a6203,
- 0x0401f021, 0x49425a07, 0x0201f800, 0x0002035b,
- 0x0401f790, 0x0201f800, 0x00100bd7, 0x0401f788,
- 0x4200d000, 0x00000182, 0x4134d800, 0x4130e000,
- 0x0201f800, 0x001001ec, 0x0401f794, 0x0201f800,
- 0x00101cd3, 0x0401f7bf, 0x412d0000, 0x592e580a,
- 0x0201f800, 0x00100595, 0x40825800, 0x0401f7a9,
- 0x0201f800, 0x00109e6c, 0x0401f7d9, 0x0201f800,
- 0x00100bd7, 0x0401f78b, 0x0201f800, 0x00100bd7,
- 0x0401f7cb, 0x40865800, 0x408a6800, 0x408e7000,
- 0x589d1803, 0x589d1002, 0x589d0801, 0x589d0000,
- 0x829d3c00, 0x00000004, 0x1c01f000, 0x829d3c80,
- 0x00000002, 0x48813800, 0x48853801, 0x41310800,
- 0x4933c857, 0x4943c857, 0x493fc857, 0x42010000,
- 0x00110514, 0x59a8d00d, 0x41640000, 0x80697480,
- 0x04000010, 0x41580000, 0x80817480, 0x0402100d,
- 0x40826000, 0x8d3e7d12, 0x04000004, 0x40800000,
- 0x80857480, 0x04000002, 0x0401ff1e, 0x82810400,
- 0x00000030, 0x41580000, 0x80817480, 0x040017f5,
- 0x41510000, 0x41540000, 0x80817480, 0x04021019,
- 0x8d3e7d18, 0x04000017, 0x59a8d062, 0x59a80063,
- 0x80697480, 0x04000013, 0x40826000, 0x5880d00a,
- 0x8068d1c0, 0x04020005, 0x5880d203, 0x82697480,
- 0x00000008, 0x04000008, 0x0401ff06, 0x82810400,
- 0x00000030, 0x41540000, 0x80817480, 0x040017ed,
- 0x0401f004, 0x0201f800, 0x0010a0c7, 0x0401f7f7,
- 0x40866000, 0x589d0801, 0x589d0000, 0x829d3c00,
- 0x00000002, 0x1c01f000, 0x809d3840, 0x48813800,
- 0x497a6229, 0x812e59c0, 0x04000043, 0x592cd205,
- 0x486bc857, 0x592cd205, 0x8268d500, 0x000000ff,
- 0x82697480, 0x00000014, 0x04000005, 0x4a026229,
- 0x00000003, 0x0201f800, 0x00108e9b, 0x592cd409,
- 0x8c68d510, 0x04000023, 0x592cd209, 0x0201f800,
- 0x001048e9, 0x4a025c09, 0x00000100, 0x0201f800,
- 0x00108b83, 0x0201f800, 0x0010a35a, 0x80c589c0,
- 0x04000021, 0x4a026403, 0x00000085, 0x4a026203,
- 0x00000009, 0x4a026407, 0x00000002, 0x59310004,
- 0x82810500, 0x00000100, 0x0201f800, 0x00108e81,
- 0x82810540, 0x80004040, 0x48826004, 0x0201f800,
- 0x00108e8d, 0x0201f800, 0x0010612b, 0x4200d000,
- 0x80004040, 0x0201f800, 0x00105fd2, 0x0401f01d,
- 0x592cd209, 0x0201f800, 0x001048e9, 0x0201f800,
- 0x00108b83, 0x0201f800, 0x0010a35a, 0x80c589c0,
- 0x040207e1, 0x0201f800, 0x0002035b, 0x5930d229,
- 0x82697480, 0x00000003, 0x0400000a, 0x497a6009,
- 0x0401f7d9, 0x4200d000, 0x00000527, 0x4130d800,
- 0x412ce000, 0x0201f800, 0x001001ec, 0x0401f005,
- 0x0201f800, 0x001085d7, 0x497a6009, 0x0401f7ce,
- 0x589d0000, 0x809d3800, 0x1c01f000, 0x0201f800,
- 0x0010612b, 0x812e59c0, 0x0400001d, 0x0201f800,
- 0x00108e9b, 0x592cd409, 0x8c68d510, 0x04020012,
- 0x592cd209, 0x0201f800, 0x001048e9, 0x0201f800,
- 0x00108b83, 0x0201f800, 0x0002035b, 0x5930d203,
- 0x82697480, 0x0000000d, 0x0400000d, 0x0201f800,
- 0x0010612b, 0x5930d00a, 0x0201f800, 0x00104510,
- 0x0401f007, 0x592cd209, 0x0201f800, 0x001048e9,
- 0x4a025c09, 0x00000100, 0x0401f7ed, 0x0201f800,
- 0x00106ec7, 0x1c01f000, 0x829d3c80, 0x00000002,
- 0x48813800, 0x48853801, 0x41790000, 0x0201f800,
- 0x00108261, 0x40c50800, 0x48c7c857, 0x40840000,
- 0x82857480, 0x00000010, 0x83f17500, 0x03000000,
- 0x0400002e, 0x0c01f001, 0x0010f690, 0x0010f6a8,
- 0x0010f6a6, 0x0010f67d, 0x0010f6bd, 0x0010f698,
- 0x0010f690, 0x0010f690, 0x0010f690, 0x0010f698,
- 0x0010f698, 0x0010f698, 0x0010f698, 0x0010f6a6,
- 0x0010f6a8, 0x0010f698, 0x0010f67d, 0x0201f800,
- 0x00108251, 0x80c589c0, 0x04000005, 0x0201f800,
- 0x00106414, 0x80c589c0, 0x04000035, 0x0201f800,
- 0x0010ef65, 0x80c589c0, 0x04000017, 0x5930d403,
- 0x486bc857, 0x5930d403, 0x82697480, 0x00000040,
- 0x04020018, 0x0401ffaa, 0x42010000, 0x00000001,
- 0x0401f073, 0x40840000, 0x82857480, 0x00000010,
- 0x040007d5, 0x040017d4, 0x4200d000, 0x000004b7,
- 0x4130d800, 0x4084e000, 0x0201f800, 0x001001ec,
- 0x0401f067, 0x497bc856, 0x0201f800, 0x00106054,
- 0x80c589c0, 0x04020016, 0x59317004, 0x48bbc857,
- 0x0401ff3e, 0x0401f7e9, 0x598d700b, 0x48bbc857,
- 0x40b8d000, 0x41300000, 0x80697480, 0x04000042,
- 0x0201f800, 0x0010f0f2, 0x80c589c0, 0x040207de,
- 0x497bc856, 0x0201f800, 0x00106054, 0x4200d000,
- 0x000003f5, 0x80c589c0, 0x040007e2, 0x5930d203,
- 0x486bc857, 0x59310a03, 0x0401f049, 0x812e59c0,
- 0x0400003b, 0x0201f800, 0x00108988, 0x80c589c0,
- 0x04000029, 0x0201f800, 0x0010612b, 0x592cd209,
- 0x8468d50c, 0x486a5a09, 0x592cdc07, 0x806cd0c6,
- 0x406c0000, 0x8068d400, 0x8068d400, 0x486a6006,
- 0x4200d000, 0x10000000, 0x4130d800, 0x0201f800,
- 0x001008c7, 0x80c589c0, 0x0400000c, 0x592cd209,
- 0x8c68d51c, 0x0400001d, 0x59c8d001, 0x8068d1c0,
- 0x04020026, 0x4200d000, 0x40000000, 0x4130d800,
- 0x0201f800, 0x001008c7, 0x5930d203, 0x82697480,
- 0x00000004, 0x040207ad, 0x41390000, 0x42027000,
- 0x00000048, 0x0201f800, 0x00106f24, 0x40827000,
- 0x0401f7a6, 0x0201f800, 0x00100bd7, 0x0401fef7,
- 0x0401f7a2, 0x0201f800, 0x00106449, 0x80c589c0,
- 0x040007c7, 0x0401f7bb, 0x8468d55c, 0x486a5a09,
- 0x4a026006, 0x00000002, 0x0401f798, 0x4200d000,
- 0x000004a7, 0x4130d800, 0x412ce000, 0x0201f800,
- 0x001001ec, 0x0401f006, 0x41310000, 0x0201f800,
- 0x0010131b, 0x40826000, 0x0401f7dc, 0x808101c0,
- 0x0400078d, 0x589d0801, 0x589d0000, 0x829d3c00,
- 0x00000002, 0x1c01f000, 0x829d3c80, 0x00000002,
- 0x48813800, 0x48853801, 0x412d0800, 0x41410000,
- 0x4200d000, 0x0010b2e5, 0x0201f800, 0x0010a244,
- 0x417a5800, 0x0201f800, 0x001084ee, 0x80c589c0,
- 0x04000009, 0x0201f800, 0x00108fa8, 0x59325809,
- 0x592cd209, 0x8468d54c, 0x486a5a09, 0x42028000,
- 0x00000006, 0x0201f800, 0x0010613a, 0x0401ff37,
- 0x0201f800, 0x0010612b, 0x40828000, 0x40865800,
- 0x589d0801, 0x589d0000, 0x829d3c00, 0x00000002,
- 0x1c01f000, 0x829d3c80, 0x00000002, 0x48813800,
- 0x48853801, 0x412d0800, 0x0201f800, 0x0010f1d6,
- 0x80c589c0, 0x040000aa, 0x5930dc07, 0x406c0000,
- 0x826d7480, 0x00000011, 0x83f17500, 0x03000000,
- 0x04000028, 0x0c01f001, 0x0010f7e1, 0x0010f752,
- 0x0010f7a6, 0x0010f77f, 0x0010f752, 0x0010f7a6,
- 0x0010f7bd, 0x0010f7b6, 0x0010f766, 0x0010f766,
- 0x0010f76c, 0x0010f766, 0x0010f766, 0x0010f766,
- 0x0010f766, 0x0010f760, 0x0010f772, 0x0010f77b,
- 0x5930d403, 0x82697480, 0x00000043, 0x0400008c,
- 0x0201f800, 0x0010f4c8, 0x80c589c0, 0x04020079,
- 0x0201f800, 0x001085f9, 0x80c589c0, 0x04000003,
- 0x0201f800, 0x001075b8, 0x0201f800, 0x00106ec7,
- 0x8d3e7d1c, 0x0400007e, 0x497a600a, 0x0401f07c,
- 0x4200d000, 0x00000328, 0x4130e000, 0x0201f800,
- 0x001001ec, 0x0401f076, 0x5930d203, 0x82697480,
- 0x00000004, 0x04020003, 0x0201f800, 0x00100bd7,
- 0x59325809, 0x0201f800, 0x001084ee, 0x80c589c0,
- 0x040007ea, 0x49425a07, 0x0201f800, 0x0002035b,
- 0x0401f7e6, 0x59325819, 0x0201f800, 0x00100595,
- 0x0401f7f4, 0x0201f800, 0x00108fa8, 0x5930d203,
- 0x82697480, 0x00000004, 0x04000057, 0x59325809,
- 0x0201f800, 0x001084ee, 0x80c589c0, 0x040007d7,
- 0x592cd205, 0x8268d500, 0x000000ff, 0x82697480,
- 0x00000014, 0x04000003, 0x0201f800, 0x001085d7,
- 0x0201f800, 0x00108e9b, 0x0201f800, 0x0002076c,
- 0x4a025a05, 0x00000103, 0x592cd409, 0x8c68d512,
- 0x0402003b, 0x49425a07, 0x497a580a, 0x0201f800,
- 0x00109e6c, 0x0201f800, 0x00108b83, 0x0201f800,
- 0x00108657, 0x0201f800, 0x0002035b, 0x0401f7bb,
- 0x59325809, 0x0201f800, 0x001084ee, 0x80c589c0,
- 0x040007b6, 0x49425a07, 0x497a5c0a, 0x0201f800,
- 0x0002035b, 0x5930d229, 0x82697480, 0x00000003,
- 0x040207ae, 0x0201f800, 0x001085d7, 0x0401f7ab,
- 0x5930d203, 0x82697480, 0x00000011, 0x04020028,
- 0x5930d429, 0x486a6203, 0x0401f025, 0x5930d203,
- 0x82697480, 0x00000004, 0x0400001e, 0x59325809,
- 0x0201f800, 0x001084ee, 0x80c589c0, 0x0400079b,
- 0x49425a07, 0x0201f800, 0x00109e6c, 0x0201f800,
- 0x00108e9b, 0x0201f800, 0x0002076c, 0x0201f800,
- 0x00108b83, 0x0201f800, 0x0002035b, 0x0401f78f,
- 0x0201f800, 0x00101cd3, 0x0401f786, 0x412d0000,
- 0x592e580a, 0x0201f800, 0x00100595, 0x40825800,
- 0x0401f7c1, 0x0201f800, 0x00100bd7, 0x0401f7a8,
- 0x0201f800, 0x00100bd7, 0x0401f7e1, 0x40865800,
- 0x589d0801, 0x589d0000, 0x829d3c00, 0x00000002,
- 0x1c01f000, 0x0201f800, 0x00109c11, 0x80c589c0,
- 0x04000007, 0x812649c0, 0x04000006, 0x5930d01d,
- 0x41240000, 0x80697480, 0x04000002, 0x0401f003,
- 0x5932680a, 0x0401ff3c, 0x1c01f000, 0x829d3c80,
- 0x00000005, 0x48813800, 0x48853801, 0x48893802,
- 0x488d3803, 0x48913804, 0x41311000, 0x41352000,
- 0x4933c857, 0x4947c857, 0x4943c857, 0x0201f800,
- 0x0010613a, 0x40c51800, 0x0201f800, 0x00109ae1,
- 0x41310800, 0x813261c0, 0x0400004e, 0x42000000,
- 0x001104b4, 0x81317480, 0x0400004a, 0x59a8d00d,
- 0x8068d040, 0x42010000, 0x00110514, 0x40680000,
- 0x81657480, 0x0400000f, 0x41580000, 0x80817480,
- 0x0402100c, 0x40826000, 0x40800000, 0x80857480,
- 0x04000003, 0x4084d000, 0x0401ffcb, 0x82810400,
- 0x00000030, 0x41580000, 0x80817480, 0x040017f6,
- 0x41510000, 0x41540000, 0x80817480, 0x04021012,
- 0x8d3e7d18, 0x04000010, 0x59a8d062, 0x59a80063,
- 0x80697480, 0x0400000c, 0x40826000, 0x5880d00a,
- 0x8068d1c0, 0x0400000d, 0x4084d000, 0x0401ffb6,
- 0x82810400, 0x00000030, 0x41540000, 0x80817480,
- 0x040017f0, 0x408a6000, 0x40926800, 0x808d7040,
- 0x0400001e, 0x0401f023, 0x0201f800, 0x001042a5,
- 0x40c66800, 0x80c589c0, 0x040007f2, 0x58c4d002,
- 0x5930d82a, 0x82680500, 0x00ffffff, 0x806d7480,
- 0x040207ec, 0x58c4d013, 0x5930d829, 0x82680500,
- 0x00ffffff, 0x806d7480, 0x040207e6, 0x5930d203,
- 0x82697480, 0x00000008, 0x0400000b, 0x4936600a,
- 0x0401fedd, 0x82810400, 0x00000030, 0x0401f7df,
- 0x59a8d00d, 0x0401f7b8, 0x0201f800, 0x0010612b,
- 0x0401f004, 0x0201f800, 0x0010a0c7, 0x0401f7f4,
- 0x589d2004, 0x589d1803, 0x589d1002, 0x589d0801,
- 0x589d0000, 0x829d3c00, 0x00000005, 0x1c01f000,
- 0x809d3840, 0x48a13800, 0x829d3c80, 0x00000002,
- 0x409d4000, 0x829d3c80, 0x00000007, 0x48813800,
- 0x48853801, 0x48893802, 0x488d3803, 0x48913804,
- 0x48953805, 0x48993806, 0x42010000, 0x00000001,
- 0x41793000, 0x49214000, 0x49254001, 0x497bc856,
- 0x41310800, 0x41351000, 0x41451800, 0x413d2000,
- 0x40592800, 0x4200d000, 0x0010f866, 0x0201f800,
- 0x00105cf0, 0x59a8d21b, 0x8c68d508, 0x0400001d,
- 0x8c68d516, 0x0402001b, 0x59aa6882, 0x813669c0,
- 0x040000a6, 0x5934d400, 0x82697480, 0x00000404,
- 0x040200a2, 0x0201f800, 0x00106efa, 0x40c66000,
- 0x80c589c0, 0x04000097, 0x48818c07, 0x4935880a,
- 0x409a7800, 0x0201f800, 0x001041b3, 0x4200d000,
- 0x00000005, 0x0201f800, 0x001041bd, 0x42027000,
- 0x00000003, 0x0201f800, 0x00106f24, 0x0401f08f,
- 0x8268dd00, 0x00000008, 0x8c68d506, 0x04000074,
- 0x806cd9c0, 0x04000002, 0x41790000, 0x0201f800,
- 0x0010a362, 0x4200d000, 0x0010a3b3, 0x586a4800,
- 0x42028800, 0x000007fe, 0x8058b1c0, 0x0400001f,
- 0x41440000, 0x0401f005, 0x83264c00, 0x0000000b,
- 0x8058b040, 0x04000019, 0x5924d009, 0x8068d400,
- 0x8268d480, 0x000007f0, 0x586a6800, 0x813669c0,
- 0x040007f6, 0x5924d200, 0x8268d500, 0x00000003,
- 0x82697480, 0x00000003, 0x040207f0, 0x5934da00,
- 0x8c6cdd1a, 0x040007ed, 0x826cd500, 0xffffdfff,
- 0x486a6a00, 0x80993000, 0x83264c00, 0x0000000b,
- 0x8058b040, 0x040207e9, 0x809931c0, 0x0400004a,
- 0x8d0e1d20, 0x0402004b, 0x0201f800, 0x00101e1b,
- 0x80817040, 0x04020059, 0x4200b000, 0x000007f0,
- 0x417a8800, 0x0401f01e, 0x826cd540, 0x00001000,
- 0x486a6a00, 0x5934d200, 0x8468d51a, 0x486a6a00,
- 0x4937c857, 0x4a026c00, 0x00000707, 0x0201f800,
- 0x0010613a, 0x40c50000, 0x417a6000, 0x0201f800,
- 0x00105ff7, 0x0201f800, 0x0010f260, 0x0201f800,
- 0x0010f344, 0x417a7800, 0x0201f800, 0x0010f3dd,
- 0x0201f800, 0x0010f7f5, 0x80817040, 0x04000032,
- 0x81468800, 0x8058b040, 0x04000038, 0x0201f800,
- 0x001042a5, 0x80c589c0, 0x040007fa, 0x5934da00,
- 0x8c6cdd1a, 0x040007f7, 0x5934d403, 0x406a8800,
- 0x417a7800, 0x42028000, 0x00000029, 0x5934d013,
- 0x8068d130, 0x406a4000, 0x40680000, 0x4200d000,
- 0x0010a3b3, 0x8068d400, 0x586a4800, 0x5924d000,
- 0x8068d120, 0x8268e500, 0x00000020, 0x8c68d50a,
- 0x040207ca, 0x4070d000, 0x4070d800, 0x0201f800,
- 0x00109b33, 0x5934da00, 0x0401f7c4, 0x8c68d50a,
- 0x0402078c, 0x80817040, 0x04020014, 0x0401f7bb,
- 0x4200d000, 0x000007d0, 0x4200d800, 0x0010f866,
- 0x0201f800, 0x00105e1a, 0x0201f800, 0x00101e1b,
- 0x0401f7b0, 0x0201f800, 0x0010612b, 0x0401f7cd,
- 0x4200d000, 0x000000a0, 0x40c4d800, 0x4134e000,
- 0x0201f800, 0x001001ec, 0x58a24801, 0x58a24000,
- 0x40866000, 0x408a6800, 0x408e8800, 0x40927800,
- 0x4094b000, 0x589d3006, 0x589d2805, 0x589d2004,
- 0x589d1803, 0x589d1002, 0x589d0801, 0x589d0000,
- 0x829d3c00, 0x00000009, 0x589d4000, 0x809d3800,
- 0x1c01f000, 0x497bc856, 0x0201f800, 0x00104b2d,
- 0x80c589c0, 0x04020054, 0x59a8d015, 0x8c68d504,
- 0x04020004, 0x59a8d21b, 0x8c68d506, 0x0402002b,
- 0x8d0e1d20, 0x04020004, 0x59a8d006, 0x8c68d51c,
- 0x0400001c, 0x4200b000, 0x000007f0, 0x417a8800,
- 0x0401f004, 0x81468800, 0x8058b040, 0x04000015,
- 0x0201f800, 0x001042a5, 0x80c589c0, 0x040007fa,
- 0x0201f800, 0x00104583, 0x80c589c0, 0x040007f6,
- 0x59a8d00f, 0x59340002, 0x8068d580, 0x8268d500,
- 0x00ffff00, 0x040207f0, 0x5934d200, 0x8468d55a,
- 0x486a6a00, 0x81468800, 0x8058b040, 0x040207ed,
- 0x0201f800, 0x001044c9, 0x80c589c0, 0x04000022,
- 0x59a8d02d, 0x4200d800, 0x0010f866, 0x0201f800,
- 0x00105e1a, 0x0401f04b, 0x0201f800, 0x0010a362,
- 0x4200d000, 0x0010a3b3, 0x586a4800, 0x42028800,
- 0x000007fe, 0x8058b1c0, 0x040007ce, 0x5924d009,
- 0x41440000, 0x8068d400, 0x8268d480, 0x000007f0,
- 0x586a6800, 0x813669c0, 0x04000007, 0x5924d200,
- 0x8268d500, 0x00000003, 0x82697480, 0x00000003,
- 0x0400002c, 0x8058b040, 0x83264c00, 0x0000000b,
- 0x0401f7ed, 0x8d0e1d20, 0x04020004, 0x59a8d006,
- 0x8c68d51c, 0x040007e0, 0x4200d000, 0x000007d0,
- 0x0401f7d9, 0x0201f800, 0x0010a362, 0x4200d000,
- 0x0010a3b3, 0x586a4800, 0x42028800, 0x000007fe,
- 0x8058b1c0, 0x040007ab, 0x41440000, 0x5924d009,
- 0x8068d400, 0x8268d480, 0x000007f0, 0x586a6800,
- 0x813669c0, 0x0400000a, 0x5924d200, 0x8268d500,
- 0x00000003, 0x82697480, 0x00000003, 0x04020004,
- 0x5934d200, 0x8468d51a, 0x486a6a00, 0x83264c00,
- 0x0000000b, 0x8058b040, 0x040207ed, 0x0401f795,
- 0x0201f800, 0x00104583, 0x80c589c0, 0x040007d2,
- 0x5934d200, 0x8468d55a, 0x486a6a00, 0x0401f7ce,
- 0x1c01f000, 0x829d3c80, 0x00000004, 0x48813800,
- 0x48853801, 0x48893802, 0x488d3803, 0x40691000,
- 0x406d1800, 0x40710800, 0x41790000, 0x4880e000,
- 0x83457480, 0x000007ff, 0x83f17500, 0x03000000,
- 0x0400004e, 0x4880e002, 0x4944e001, 0x4144f000,
- 0x4200d800, 0x0010a600, 0x4200b000, 0x000007f0,
- 0x83457480, 0x000007ef, 0x04000040, 0x0400103f,
- 0x4200b000, 0x00000010, 0x8344f480, 0x000007f0,
- 0x5924d809, 0x8058b1c0, 0x04000017, 0x40780000,
- 0x806cd400, 0x5868e000, 0x8070e1c0, 0x04020044,
- 0x5884e801, 0x41440000, 0x80757480, 0x0400005b,
- 0x8074d000, 0x8078f000, 0x83457480, 0x000007ef,
- 0x0400004f, 0x0400104e, 0x82697480, 0x00000800,
- 0x04000032, 0x48690801, 0x8058b040, 0x8058b1c0,
- 0x040207eb, 0x5884d802, 0x806cd9c0, 0x04000088,
- 0x412d0000, 0x4088d000, 0x0201f800, 0x001041e5,
- 0x4947c857, 0x4937c857, 0x40825800, 0x813669c0,
- 0x0400008f, 0x497a6a12, 0x59a8d21b, 0x8c68d50a,
- 0x0402000a, 0x8288dd00, 0x00ffff00, 0x04000073,
- 0x59a8d00f, 0x8268d500, 0x00ffff00, 0x406c0000,
- 0x80697480, 0x0400006d, 0x488a6802, 0x5924d005,
- 0x812000f0, 0x8068d540, 0x486a6813, 0x4200d000,
- 0x00000001, 0x0401f0a3, 0x82697480, 0x00fffffb,
- 0x040007c5, 0x040017c4, 0x4947c857, 0x488bc857,
- 0x58857001, 0x48bbc857, 0x4a010800, 0x00000019,
- 0x4080d000, 0x0401f097, 0x4a010801, 0x000007f0,
- 0x4178f000, 0x8058b040, 0x0401f7cd, 0x4070f800,
- 0x5870d002, 0x8268e500, 0x00ffffff, 0x48710803,
- 0x40880000, 0x80717480, 0x04000035, 0x5884e801,
- 0x41440000, 0x80757480, 0x040207b6, 0x587d7002,
- 0x48b90803, 0x4947c857, 0x58857003, 0x48bbc857,
- 0x4a010800, 0x0000001b, 0x0401f058, 0x82697480,
- 0x000007f0, 0x040207b4, 0x49790801, 0x4200d800,
- 0x0010a600, 0x0401f7e3, 0x49450802, 0x83457480,
- 0x000007ef, 0x0400001a, 0x04001019, 0x59a8d21b,
- 0x8c68d50a, 0x0400003c, 0x83457480, 0x000007fe,
- 0x0400004c, 0x5924d200, 0x8268d500, 0x00000220,
- 0x0400005d, 0x808101c0, 0x0402000d, 0x82757480,
- 0x000007fc, 0x04000049, 0x82757480, 0x000007fd,
- 0x0400003c, 0x82757480, 0x000007ff, 0x040207bf,
- 0x82897480, 0x00ffffff, 0x040207bc, 0x5884d002,
- 0x8468d55e, 0x48690802, 0x0401f786, 0x587ce813,
- 0x8074d130, 0x41200000, 0x80697480, 0x040207c8,
- 0x5924d005, 0x82740500, 0x00ffffff, 0x80697480,
- 0x04000004, 0x812000f0, 0x8068d540, 0x4868f813,
- 0x5884d001, 0x41440000, 0x80697480, 0x0400002f,
- 0x4947c857, 0x4873c857, 0x488fc857, 0x4a010800,
- 0x0000001a, 0x0401f019, 0x8288d500, 0x000000ff,
- 0x8068d0d0, 0x486a6a12, 0x0401f790, 0x4200d000,
- 0x0000044d, 0x4084e000, 0x0201f800, 0x001001ec,
- 0x0401f774, 0x5924d200, 0x8268e500, 0x00000020,
- 0x8c68d50a, 0x040207c8, 0x4947c857, 0x4a010800,
- 0x0000001f, 0x4070d000, 0x0401f02a, 0x4947c857,
- 0x4a010800, 0x0000000a, 0x4178d000, 0x0401f025,
- 0x82897480, 0x00fffffd, 0x040007c9, 0x0401f783,
- 0x82897480, 0x00fffffe, 0x04020017, 0x42010000,
- 0x00000001, 0x0401f7b4, 0x82897480, 0x00fffffc,
- 0x040007bf, 0x0401f779, 0x407e6800, 0x8c8d1d08,
- 0x0400076f, 0x0201f800, 0x001044ae, 0x80c589c0,
- 0x0400076b, 0x4947c857, 0x4a010800, 0x0000001d,
- 0x0401f7e6, 0x4947c857, 0x4a010800, 0x0000001f,
- 0x0401f008, 0x4947c857, 0x488bc857, 0x58857001,
- 0x48bbc857, 0x4a010800, 0x00000019, 0x4070d000,
- 0x40698800, 0x589d1803, 0x589d1002, 0x589d0801,
- 0x589d0000, 0x829d3c00, 0x00000004, 0x1c01f000,
- 0x809d3840, 0x48813800, 0x4200d000, 0x00009c0e,
- 0x4200d800, 0xfffffff7, 0x0201f800, 0x0010ebf0,
- 0x4200d000, 0x00009c0e, 0x4200d800, 0x00000010,
- 0x0201f800, 0x0010ec02, 0x59c4d0a3, 0x8468d518,
- 0x486b88a3, 0x0201f800, 0x00103704, 0x80c589c0,
- 0x04000007, 0x599cd019, 0x8268d500, 0x0000e000,
- 0x82697480, 0x00004000, 0x0400008c, 0x4200d000,
- 0x00000080, 0x0201f800, 0x001015d0, 0x0201f800,
- 0x00105e4f, 0x59c4d0a3, 0x8468d506, 0x486b88a3,
- 0x0201f800, 0x00104b38, 0x80c589c0, 0x04020005,
- 0x0201f800, 0x00104b4e, 0x80c589c0, 0x0400006c,
- 0x59c4d0a3, 0x8268d500, 0xbe7fffff, 0x486b88a3,
- 0x4200d000, 0x000000f8, 0x0201f800, 0x00103edf,
- 0x59c4d0a3, 0x8268d540, 0x00018000, 0x8468d51c,
- 0x486b88a3, 0x59c4d0a3, 0x8468d520, 0x486b88a3,
- 0x4a038808, 0x00000200, 0x59c4d006, 0x8268d500,
- 0xfbffff0e, 0x486b8806, 0x497b282c, 0x497b282d,
- 0x4200d000, 0x000001f4, 0x4200d800, 0x0010fcf1,
- 0x0201f800, 0x00105cdb, 0x4a038805, 0x00000001,
- 0x0201f800, 0x001016a9, 0x80c589c0, 0x04020023,
- 0x0201f800, 0x001016b4, 0x80c589c0, 0x04000035,
- 0x4178d000, 0x0201f800, 0x0010189f, 0x4178d000,
- 0x0201f800, 0x00101875, 0x0201f800, 0x001018ff,
- 0x4a03503c, 0x00000001, 0x0201f800, 0x00104b38,
- 0x80c589c0, 0x04000018, 0x59c4d0a4, 0x8268d500,
- 0x0000000f, 0x82697480, 0x00000008, 0x04000003,
- 0x4a038805, 0x04000000, 0x59c4d0a3, 0x8268d540,
- 0x0001c000, 0x486b88a3, 0x59c4d0a3, 0x8468d520,
- 0x486b88a3, 0x0401f077, 0x4200d000, 0x00000001,
- 0x0201f800, 0x0010189f, 0x4200d000, 0x00000001,
- 0x0401f7e0, 0x0201f800, 0x00104b4e, 0x80c589c0,
- 0x040207e6, 0x0201f800, 0x00104b43, 0x4200d000,
- 0x000001a9, 0x80c589c0, 0x04020052, 0x599cd818,
- 0x40c4e000, 0x0201f800, 0x001001ec, 0x0401f061,
- 0x0201f800, 0x001016bf, 0x80c589c0, 0x04020030,
- 0x0201f800, 0x001016ca, 0x80c589c0, 0x04000039,
- 0x4200d000, 0x00000003, 0x0201f800, 0x0010189f,
- 0x4200d000, 0x00000003, 0x0401f7c2, 0x0201f800,
- 0x00104b43, 0x4200d000, 0x00000156, 0x80c589c0,
- 0x040007e7, 0x59c4d0a3, 0x8468d570, 0x8468d532,
- 0x486b88a3, 0x0201f800, 0x00104e7f, 0x4a038808,
- 0x00000208, 0x0401f799, 0x59a8d86f, 0x826d0500,
- 0x00000007, 0x04020019, 0x59a8d03b, 0x82697480,
- 0x00000002, 0x04000018, 0x0201f800, 0x0010186c,
- 0x4883503a, 0x0201f800, 0x00101c55, 0x4a035048,
- 0x00000003, 0x4a03503b, 0x00000002, 0x4a035047,
- 0x00000001, 0x59a8d86f, 0x0401f00b, 0x4200d000,
- 0x00000002, 0x0201f800, 0x0010189f, 0x4200d000,
- 0x00000002, 0x0401f797, 0x82817480, 0x00000004,
- 0x04000019, 0x806cd000, 0x486b506f, 0x0401f754,
- 0x0201f800, 0x001016d5, 0x80c589c0, 0x0400000e,
- 0x59a8d047, 0x8068d1c0, 0x0400078c, 0x0201f800,
- 0x001016df, 0x4a03503c, 0x00000001, 0x0401f015,
- 0x4a035014, 0x00000001, 0x0201f800, 0x00104ab0,
- 0x0401f010, 0x4200d000, 0x0000018a, 0x59a8d83b,
- 0x0401f7a8, 0x497b2804, 0x497b2805, 0x0201f800,
- 0x00101c64, 0x4a035047, 0x00000001, 0x4a035048,
- 0xaabbccdd, 0x4883503b, 0x59a8d86f, 0x0401f7de,
- 0x589d0000, 0x809d3800, 0x1c01f000, 0x5994d02c,
- 0x8068d1c0, 0x04020006, 0x5994d02d, 0x4200d800,
- 0x00000001, 0x8068d1c0, 0x04000002, 0x4178d800,
- 0x406d8800, 0x1c01f000, 0x0201f800, 0x0010186c,
- 0x4a03503c, 0x00000002, 0x497b5047, 0x59c4d0a3,
- 0x8468d520, 0x486b88a3, 0x0201f800, 0x00103704,
- 0x80c589c0, 0x04000002, 0x0401f00d, 0x0201f800,
- 0x00104b43, 0x80c589c0, 0x040207fc, 0x48c7282c,
- 0x48c7282d, 0x4200d000, 0x0000002d, 0x4200d800,
- 0x0010fcf1, 0x0201f800, 0x00105cdb, 0x1c01f000,
- 0x0401ffdb, 0x80c589c0, 0x04000004, 0x4a03503c,
- 0x00000003, 0x0401f01f, 0x0201f800, 0x001016d5,
- 0x80c589c0, 0x04000004, 0x59a8d047, 0x8068d1c0,
- 0x04020008, 0x0201f800, 0x001018ce, 0x80c589c0,
- 0x04020002, 0x0401f013, 0x0401ffd4, 0x0401f011,
- 0x0201f800, 0x001016df, 0x59a8d046, 0x8c68d51e,
- 0x040007f9, 0x0201f800, 0x00104b43, 0x80c589c0,
- 0x04020003, 0x0401ffc9, 0x0401f006, 0x4a035014,
- 0x00000001, 0x0201f800, 0x00104ab0, 0x0401f7fa,
- 0x1c01f000, 0x4202d800, 0x00000001, 0x497b503c,
- 0x4a038805, 0x00000001, 0x497b282c, 0x497b282d,
- 0x497b8885, 0x1c01f000, 0x59c4d005, 0x8268d500,
- 0x000000c0, 0x04020003, 0x486b8885, 0x0401f006,
- 0x59c4d006, 0x8268d540, 0x000000f1, 0x486b8806,
- 0x0401ffed, 0x1c01f000, 0x0201f800, 0x00104b4e,
- 0x80c589c0, 0x04000005, 0x59a8d013, 0x82697480,
- 0x0000aaaa, 0x0400000c, 0x497b5013, 0x59c4d006,
- 0x8268d540, 0x04000001, 0x486b8806, 0x8d0e1d06,
- 0x04020008, 0x59c4d0a3, 0x8468d546, 0x486b88a3,
- 0x0401f004, 0x4a03500f, 0x00ffffff, 0x0401f7f3,
- 0x0401ffd5, 0x1c01f000, 0x809d3840, 0x48813800,
- 0x0401ff87, 0x80c589c0, 0x04000005, 0x4a03503c,
- 0x00000003, 0x497b8885, 0x0401f08b, 0x4a038805,
- 0x000000f0, 0x0201f800, 0x001018ce, 0x80c589c0,
- 0x04000042, 0x0201f800, 0x00101af6, 0x80c589c0,
- 0x04000048, 0x59a8d04f, 0x8c68d50c, 0x0400005e,
- 0x0201f800, 0x00101af6, 0x80c589c0, 0x0402000b,
- 0x4a03c014, 0x00200020, 0x59c4d001, 0x8268d500,
- 0x00018000, 0x82697480, 0x00018000, 0x0400005f,
- 0x4a03c013, 0x00200000, 0x0201f800, 0x00104b43,
- 0x80c589c0, 0x0402004a, 0x59c4d0a4, 0x8268d500,
- 0x0000000f, 0x82697480, 0x00000008, 0x0400002b,
- 0x59c4d005, 0x82690500, 0x04000000, 0x8c68d534,
- 0x04020026, 0x5994d02c, 0x82697480, 0x00000002,
- 0x83f17500, 0x03000000, 0x040007cf, 0x0201f800,
- 0x00104b4e, 0x80c589c0, 0x040007cb, 0x4a038805,
- 0x000000f0, 0x0201f800, 0x00104b82, 0x4a035013,
- 0x0000aaaa, 0x48835014, 0x59c4d0a3, 0x8468d546,
- 0x486b88a3, 0x4202d800, 0x00000001, 0x4883503c,
- 0x4a038805, 0x00000001, 0x4883282c, 0x4883282d,
- 0x0401ff8e, 0x0401f7b8, 0x0201f800, 0x001016d5,
- 0x80c589c0, 0x040007b4, 0x59a8d047, 0x8068d1c0,
- 0x040007b1, 0x0401f7ae, 0x0401ff90, 0x0401f7ae,
- 0x0201f800, 0x00101acc, 0x80c589c0, 0x040007b6,
- 0x0201f800, 0x00101ada, 0x80c589c0, 0x04000022,
- 0x0201f800, 0x001016ca, 0x80c589c0, 0x0400002a,
- 0x59a8d048, 0x42000000, 0xaabbccdd, 0x80697480,
- 0x04000004, 0x82697480, 0x00000004, 0x040207a6,
- 0x4a03503c, 0x00000003, 0x0401f023, 0x0401ff6b,
- 0x0401f021, 0x4200d000, 0x00009c0e, 0x4200d800,
- 0xffffffef, 0x0201f800, 0x0010ebf0, 0x4200d000,
- 0x00009c0e, 0x4200d800, 0x00000008, 0x0201f800,
- 0x0010ec02, 0x0401f797, 0x4a03c013, 0x00200020,
- 0x0401f7a2, 0x0201f800, 0x001016a9, 0x80c589c0,
- 0x0400000b, 0x59a8d048, 0x42000000, 0xaabbccdd,
- 0x80697480, 0x040007e3, 0x8068d1c0, 0x04020786,
- 0x0401f7e0, 0x59a8d048, 0x0401f7db, 0x59a8d048,
- 0x0401f7fa, 0x589d0000, 0x809d3800, 0x1c01f000,
- 0x497bc856, 0x4200d000, 0x00000080, 0x0201f800,
- 0x001015d0, 0x497b503c, 0x0201f800, 0x001016d5,
- 0x80c589c0, 0x0400000e, 0x59a8d03a, 0x8068d1c0,
- 0x04020008, 0x8068d1c0, 0x04020009, 0x4a03503a,
- 0x0000000a, 0x4a035047, 0x00000001, 0x0401f004,
- 0x8068d040, 0x486b503a, 0x0401f7f7, 0x497b8885,
- 0x0201f800, 0x001003c3, 0x1c01f000, 0x4200e000,
- 0x00000003, 0x59a8003c, 0x80717480, 0x04001006,
- 0x0c01f001, 0x0010fceb, 0x0010fced, 0x0010fcef,
- 0x0010fce9, 0x4200d000, 0x000000cb, 0x4000d800,
- 0x0201f800, 0x001001ec, 0x0401f008, 0x0401ffd5,
- 0x0401f006, 0x0401fddb, 0x0401f004, 0x0401fee9,
- 0x0401f002, 0x0401ff39, 0x1c01f000, 0x497b282d,
- 0x1c01f000, 0x0201f800, 0x00103704, 0x80c589c0,
- 0x04000007, 0x599cd019, 0x8268d500, 0x0000e000,
- 0x82697480, 0x00004000, 0x04000003, 0x4178d000,
- 0x0401f024, 0x59c4d001, 0x8268d500, 0x00018000,
- 0x82697480, 0x00010000, 0x040207f9, 0x59a8d070,
- 0x82697480, 0x00000002, 0x83f17500, 0x03000000,
- 0x040007f3, 0x0201f800, 0x00101c64, 0x4a035047,
- 0x00000001, 0x4a035048, 0xaabbccdd, 0x4a03503b,
- 0x00000004, 0x497b503c, 0x4202d800, 0x00000004,
- 0x59a8d070, 0x8068d000, 0x486b5070, 0x59a8d06f,
- 0x8268d500, 0xfffffff8, 0x8468d544, 0x486b506f,
- 0x0201f800, 0x0010040a, 0x4200d000, 0x00000001,
- 0x40698800, 0x1c01f000, 0x809d3840, 0x48813800,
- 0x59a8d017, 0x82697480, 0x0000ffff, 0x04000004,
- 0x0201f800, 0x00101e1b, 0x0401f0eb, 0x0201f800,
- 0x0010a37c, 0x80c57040, 0x04000099, 0x59a8da1b,
- 0x826cd500, 0x00000028, 0x04020046, 0x8c6cdd08,
- 0x0400006c, 0x599cd019, 0x8c68d510, 0x04020003,
- 0x8c6cdd16, 0x04000083, 0x0201f800, 0x001044c9,
- 0x80c589c0, 0x0402003a, 0x599cd019, 0x8c68d510,
- 0x04000064, 0x59a8d21b, 0x8c68d508, 0x04000061,
- 0x4a038802, 0x0000ffff, 0x4200d000, 0x0010aee0,
- 0x0201f800, 0x00100516, 0x4200d000, 0x0010aeed,
- 0x0201f800, 0x00100516, 0x850e1d02, 0x4a01a8e4,
- 0x00000080, 0x4202d800, 0x00000003, 0x4a035017,
- 0x0000ffff, 0x0201f800, 0x001003f1, 0x4178d000,
- 0x0201f800, 0x001015d0, 0x497b5070, 0x59a8d21b,
- 0x8c68d506, 0x04000094, 0x599cd018, 0x8268dd00,
- 0x00000800, 0x8c68d516, 0x0402008c, 0x599cd019,
- 0x8c68d510, 0x04000004, 0x59a8d21b, 0x8c68d508,
- 0x04020090, 0x417a4000, 0x4200d000, 0x0000ffff,
- 0x4200d800, 0x00000006, 0x4120e000, 0x0201f800,
- 0x0010363c, 0x0201f800, 0x00104b4e, 0x80c589c0,
- 0x04000049, 0x0201f800, 0x001064d4, 0x0401f09e,
- 0x8c6cdd00, 0x040007ba, 0x4a038802, 0x0000ffbf,
- 0x59a8da1b, 0x8c6cdd02, 0x040007b5, 0x599ce018,
- 0x82710500, 0x00000800, 0x8c70e516, 0x04020051,
- 0x59a8d01c, 0x82697480, 0x0000ffff, 0x0400004d,
- 0x8c6cdd0a, 0x0402007a, 0x42024800, 0x0010b391,
- 0x417a4000, 0x5924d200, 0x8268d500, 0x000000e0,
- 0x82697480, 0x000000e0, 0x040207e5, 0x0201f800,
- 0x00101c81, 0x59a8d21b, 0x8268dd00, 0x00000004,
- 0x8c68d504, 0x040207de, 0x406e5800, 0x4200d000,
- 0x00000003, 0x0201f800, 0x00101ca6, 0x0401f076,
- 0x59a8d016, 0x8068d1c0, 0x04000798, 0x0401f072,
- 0x599cd018, 0x8c68d516, 0x04000043, 0x599cd017,
- 0x8c68d50a, 0x04020004, 0x59a8d006, 0x8c68d51c,
- 0x04000798, 0x4200b000, 0x000007f0, 0x417a8800,
- 0x0401f004, 0x81468800, 0x8058b040, 0x04000791,
- 0x0201f800, 0x001042a5, 0x80c589c0, 0x040007fa,
- 0x5934d200, 0x8c68d51a, 0x040007f7, 0x0401f05a,
- 0x0401f059, 0x0201f800, 0x00104b2d, 0x80c589c0,
- 0x0400003e, 0x59c4d006, 0x8468d534, 0x486b8806,
- 0x0201f800, 0x001064d4, 0x0401f7b1, 0x0201f800,
- 0x001044c9, 0x40c50000, 0x80c589c0, 0x040207ac,
- 0x4202d800, 0x00000003, 0x0201f800, 0x001003f1,
- 0x4080d000, 0x0201f800, 0x001015d0, 0x0401f042,
- 0x8c70e516, 0x04020005, 0x59a8d01c, 0x82697480,
- 0x0000ffff, 0x04000034, 0x59a8d01d, 0x8068d1c0,
- 0x0402079b, 0x0201f800, 0x0010a386, 0x80c57040,
- 0x04000003, 0x59a8da1b, 0x0401f751, 0x0201f800,
- 0x001020a5, 0x80c57040, 0x04000791, 0x59a8da1b,
- 0x0401f74b, 0x0201f800, 0x001047e7, 0x80c589c0,
- 0x040007bb, 0x0401f028, 0x0201f800, 0x00103697,
- 0x0401f781, 0x0201f800, 0x00104b2d, 0x80c589c0,
- 0x0402076a, 0x59a8d21b, 0x486b541b, 0x0401f767,
- 0x406e4000, 0x4200d000, 0x000007fe, 0x4200d800,
- 0x00000004, 0x0401f771, 0x59c4d006, 0x8268d500,
- 0xffffff0f, 0x486b8806, 0x0401f7c2, 0x0201f800,
- 0x0010a386, 0x4200d000, 0x00000010, 0x80c57040,
- 0x04000002, 0x4080d000, 0x0201f800, 0x00101f37,
- 0x0401f77e, 0x8c6cdd04, 0x040207cc, 0x826cd500,
- 0x00004000, 0x8c6cdd1c, 0x040207c8, 0x406a5800,
- 0x0401f787, 0x589d0000, 0x809d3800, 0x1c01f000,
- 0x809d3840, 0x48813800, 0x59c4d00d, 0x8c68d51e,
- 0x04020004, 0x59c4d005, 0x8c68d500, 0x0400000c,
- 0x0201f800, 0x00100403, 0x0201f800, 0x00104b2d,
- 0x80c589c0, 0x0400000f, 0x0201f800, 0x00104ab0,
- 0x816d7040, 0x040000a5, 0x0401f11c, 0x4a035047,
- 0x00000001, 0x4202d800, 0x00000004, 0x4200d000,
- 0x0010b340, 0x0201f800, 0x0010a244, 0x0401f113,
- 0x0201f800, 0x00104b4e, 0x80c589c0, 0x0402008d,
- 0x0201f800, 0x001038c2, 0x59c4d0a4, 0x8268d500,
- 0x0000000f, 0x82697480, 0x00000006, 0x83f17500,
- 0x03000000, 0x040007e9, 0x0201f800, 0x00105e4f,
- 0x59c4d0a3, 0x8468d528, 0x486b88a3, 0x59a8d07d,
- 0x8068d1c0, 0x040000bc, 0x59a8d015, 0x8468d546,
- 0x486b5015, 0x0201f800, 0x00104b38, 0x80c589c0,
- 0x040200bc, 0x59c4d006, 0x8268d540, 0x440000f1,
- 0x486b8806, 0x497b9005, 0x0401fe9b, 0x80c589c0,
- 0x040207d2, 0x40c4d000, 0x0201f800, 0x00104906,
- 0x4a038802, 0x0000ffff, 0x4a0378e4, 0x00003000,
- 0x4200d000, 0x0010aefb, 0x5868d400, 0x8c68d508,
- 0x04020003, 0x4a01a8e4, 0x0000c000, 0x4200d000,
- 0x0010b219, 0x0201f800, 0x0010a244, 0x59a8d00f,
- 0x4200d800, 0x00000003, 0x0201f800, 0x0010616c,
- 0x4200d000, 0x00008010, 0x59a8d809, 0x0201f800,
- 0x001035cb, 0x59c4d001, 0x8268d500, 0x00018000,
- 0x82697480, 0x00018000, 0x040000a6, 0x59c4d0a3,
- 0x8468d518, 0x486b88a3, 0x59c8d015, 0x8468d548,
- 0x486b9015, 0x0201f800, 0x0010186c, 0x59a8d008,
- 0x8468d500, 0x486b5008, 0x850e1d0a, 0x0201f800,
- 0x0010f943, 0x0201f800, 0x00104b2d, 0x80c589c0,
- 0x04020003, 0x8d0e1d06, 0x0402009f, 0x0201f800,
- 0x001044c9, 0x80c589c0, 0x04000091, 0x59c4d002,
- 0x8468d50c, 0x486b8802, 0x497b501d, 0x497b501c,
- 0x497b5074, 0x0201f800, 0x00104b2d, 0x80c589c0,
- 0x04000078, 0x497b521b, 0x0201f800, 0x00101672,
- 0x59a8d01f, 0x82680500, 0xffff0000, 0x80c4d540,
- 0x486b501f, 0x599cd017, 0x8c68d50a, 0x04000004,
- 0x59a8d21b, 0x8468d544, 0x486b521b, 0x4200d000,
- 0x00000005, 0x0201f800, 0x00106674, 0x497b501d,
- 0x497b5016, 0x4a035017, 0x0000ffff, 0x4a01a8e4,
- 0x000000c0, 0x4202d800, 0x00000002, 0x0201f800,
- 0x00104b2d, 0x80c589c0, 0x04020007, 0x59a8d21b,
- 0x8268d500, 0x0000000c, 0x82697480, 0x00000004,
- 0x0400076a, 0x0201f800, 0x00101e1b, 0x0401f083,
- 0x5994d02d, 0x42000000, 0x00103ecb, 0x80697480,
- 0x04000040, 0x59c4d006, 0x8268d540, 0x000000c0,
- 0x486b8806, 0x0401f76b, 0x59a8d011, 0x82697480,
- 0x00000009, 0x04020759, 0x497b500f, 0x0201f800,
- 0x0010a362, 0x42024800, 0x0010b391, 0x497a4805,
- 0x0401f00a, 0x5924d200, 0x8c68d500, 0x04000004,
- 0x8268d500, 0xffffd815, 0x486a4a00, 0x83264c00,
- 0x0000000b, 0x8058b040, 0x8058b1c0, 0x040207f6,
- 0x4a038893, 0x00000001, 0x4a038805, 0x000000f0,
- 0x0201f800, 0x00104b43, 0x80c589c0, 0x04000031,
- 0x59c4d006, 0x8268d540, 0x000000f1, 0x486b8806,
- 0x59c4d006, 0x8268d500, 0xbbffffff, 0x486b8806,
- 0x0201f800, 0x00105e4f, 0x0201f800, 0x00106185,
- 0x0401fdf9, 0x40c50000, 0x80c589c0, 0x0402072f,
- 0x4200d000, 0x0010b222, 0x0201f800, 0x0010a244,
- 0x48835073, 0x4200d000, 0x00008030, 0x4080d800,
- 0x0401f76f, 0x0201f800, 0x00103e1f, 0x0401f03f,
- 0x5994d02c, 0x8068d1c0, 0x0402072e, 0x0401f7be,
- 0x59c4d006, 0x8268d540, 0x44000001, 0x486b8806,
- 0x59c4d006, 0x8268d500, 0xffffff0f, 0x0401f741,
- 0x59a8d01f, 0x8268d500, 0xffff0000, 0x486b501f,
- 0x0201f800, 0x00101672, 0x48c78880, 0x0401f78a,
- 0x59c4d006, 0x8268d540, 0x440000f1, 0x0401f7d4,
- 0x59c4d0a3, 0x8468d558, 0x0401f75b, 0x0201f800,
- 0x00104b2d, 0x80c589c0, 0x0400000d, 0x59a8d018,
- 0x8068d1c0, 0x0402076d, 0x0201f800, 0x001088a7,
- 0x0401f76a, 0x4a035073, 0x00000001, 0x850e1d0e,
- 0x0201f800, 0x001039e4, 0x0401f014, 0x0201f800,
- 0x001088a7, 0x59a8d21b, 0x8c68d506, 0x0402075f,
- 0x59a8d018, 0x8068d1c0, 0x04020007, 0x59a8d41b,
- 0x8c68d508, 0x04000759, 0x82697480, 0x0000ffff,
- 0x04000756, 0x4a03541b, 0x0000ffff, 0x0201f800,
- 0x00103f24, 0x0401f751, 0x589d0000, 0x809d3800,
- 0x1c01f000, 0x809d3840, 0x48a13800, 0x829d3c80,
- 0x00000005, 0x409d4000, 0x829d3c80, 0x00000007,
- 0x48813800, 0x48853801, 0x48893802, 0x488d3803,
- 0x48913804, 0x48953805, 0x48993806, 0x4200e000,
- 0x00000001, 0x48714000, 0x4178e000, 0x48714003,
- 0x48714004, 0x48594001, 0x49214002, 0x82691d00,
- 0x00ffffff, 0x826d3500, 0x00ffffff, 0x828cd500,
- 0x00ff0000, 0x82697480, 0x00ff0000, 0x0400005e,
- 0x41792800, 0x4200b000, 0x000007f0, 0x41ad0800,
- 0x40951000, 0x828d2500, 0x00ffff00, 0x0401f00f,
- 0x809121c0, 0x04000032, 0x59a8d00f, 0x8268d500,
- 0x00ffff00, 0x40900000, 0x80697480, 0x0400002c,
- 0x4178e000, 0x48714004, 0x80850800, 0x80891000,
- 0x8058b040, 0x04000021, 0x58850000, 0x808101c0,
- 0x04000036, 0x5880d212, 0x8268d500, 0x0000ff00,
- 0x040207ec, 0x5880d002, 0x8268d500, 0x00ffffff,
- 0x408c0000, 0x80697480, 0x040207f0, 0x4098d000,
- 0x0201f800, 0x00101f91, 0x5880d813, 0x806cd130,
- 0x41200000, 0x80697480, 0x040207e8, 0x4200e000,
- 0x00000001, 0x48714004, 0x5924d005, 0x826c0500,
- 0x00ffffff, 0x80697480, 0x04000004, 0x812000f0,
- 0x8068d540, 0x48690013, 0x58a0d004, 0x8068d1c0,
- 0x04000020, 0x408a8800, 0x0401f048, 0x5880d002,
- 0x8268d500, 0x000000ff, 0x828c0500, 0x000000ff,
- 0x80697480, 0x040207d1, 0x4098d000, 0x0201f800,
- 0x00101f91, 0x5880d813, 0x806cd130, 0x41200000,
- 0x80697480, 0x040207c9, 0x4200d000, 0x00000001,
- 0x48694004, 0x0401f7e1, 0x809529c0, 0x040207c3,
- 0x58a0e003, 0x8070e1c0, 0x040207c0, 0x40892800,
- 0x4200d000, 0x00000001, 0x48694003, 0x0401f7bb,
- 0x58a0e003, 0x8070e1c0, 0x04000018, 0x40968800,
- 0x0401f026, 0x828d7480, 0x00fffffb, 0x040007a1,
- 0x040017a0, 0x828d7480, 0x00ffffff, 0x0400079d,
- 0x828d7480, 0x00fffffd, 0x0400001a, 0x828d7480,
- 0x00fffffd, 0x83f17500, 0x03000000, 0x0400000c,
- 0x828d7480, 0x00fffffc, 0x0400000f, 0x4178d000,
- 0x48694000, 0x0401f011, 0x488fc857, 0x489bc857,
- 0x58a0d003, 0x48694000, 0x0401f00c, 0x828d7480,
- 0x00fffffe, 0x040207f6, 0x42028800, 0x000007fe,
- 0x0401f006, 0x42028800, 0x000007fc, 0x0401f003,
- 0x42028800, 0x000007fd, 0x58a24002, 0x58a0b001,
- 0x58a18800, 0x589d3006, 0x589d2805, 0x589d2004,
- 0x589d1803, 0x589d1002, 0x589d0801, 0x589d0000,
- 0x829d3c00, 0x0000000c, 0x589d4000, 0x809d3800,
- 0x1c01f000, 0x486bc857, 0x0401ff4f, 0x1c01f000,
- 0x00000000, 0x00000001, 0x00000002, 0x00000003,
- 0x00000004, 0x00000005, 0x00000006, 0x00000007,
- 0x00000008, 0x00000009, 0x0000000a, 0x0000000b,
- 0x0000000c, 0x0000000d, 0x0000000e, 0x0000000f,
- 0x9829698a, 0x02800004, 0x00000000, 0x0000c000,
- 0x0000093b, 0x073fca5a, 0x0705a5a5, 0x01928009,
+ 0x00000000, 0x00000000, 0x00000000, 0x00960114,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000005,
+ 0xfffffffb, 0x02800004, 0x00000000, 0x0000c000,
+ 0x00000aa2, 0x073fca5a, 0x0705a5a5, 0x01928009,
0x070ff0e1, 0x03800006, 0x053f2aaa, 0x070aaaaa,
0x073f3aaa, 0x070aaaaa, 0x05958014, 0x05308000,
- 0x05008000, 0x0600902f, 0x06a006b3, 0x0202f051,
- 0x042e4020, 0x008f02b0, 0x033e5000, 0x03020000,
- 0x078d0024, 0x069305c2, 0x029205c4, 0x050fb056,
- 0x040010e6, 0x002fb008, 0x060ff0e6, 0x00580401,
- 0x054880ff, 0x07810022, 0x018c0412, 0x018a0411,
- 0x058b040f, 0x079f0028, 0x0098085b, 0x079f0028,
- 0x05990859, 0x058e8014, 0x0678aae5, 0x06000051,
- 0x068181ce, 0x079a0014, 0x022a5001, 0x030430d4,
- 0x06780043, 0x030e0000, 0x030450ff, 0x06780043,
- 0x03019000, 0x02a1820b, 0x078187f0, 0x027c0045,
- 0x03020000, 0x058180fc, 0x05908039, 0x019107ee,
- 0x010410a6, 0x072d6000, 0x05601041, 0x050f80ff,
- 0x032fa071, 0x070ff0d1, 0x055c0403, 0x034a88ff,
- 0x06818808, 0x038000f0, 0x07480000, 0x058107fa,
- 0x05481000, 0x05818050, 0x06780043, 0x070000f0,
- 0x0681005b, 0x037c00ff, 0x06000010, 0x078187f6,
- 0x0280005b, 0x06780043, 0x070000f0, 0x037c00ff,
- 0x07000030, 0x0681005b, 0x06780043, 0x070000f0,
- 0x037c00ff, 0x06000020, 0x0681005b, 0x018007f6,
+ 0x05008000, 0x0600902f, 0x04a007df, 0x0202f051,
+ 0x042e4020, 0x07840018, 0x028f0361, 0x033e5000,
+ 0x03020000, 0x068d0025, 0x079306e2, 0x039206e4,
+ 0x050fb056, 0x040010e6, 0x002fb008, 0x060ff0e6,
+ 0x00580401, 0x054880ff, 0x06810023, 0x008c04f2,
+ 0x008a04f1, 0x048b04ef, 0x069f0029, 0x039809b1,
+ 0x069f0029, 0x079909af, 0x058e8014, 0x07840018,
+ 0x0678aae5, 0x04004051, 0x06818275, 0x079a0014,
+ 0x030430d4, 0x04052051, 0x0448b043, 0x06810034,
+ 0x00252080, 0x022a5001, 0x06780043, 0x030e0000,
+ 0x030450ff, 0x06780043, 0x03019000, 0x03a182b7,
+ 0x0481892c, 0x027c0045, 0x03020000, 0x0781812d,
+ 0x0590803f, 0x0291092a, 0x010410a6, 0x06600052,
+ 0x030d60ff, 0x05601041, 0x050f80ff, 0x032fa071,
+ 0x060ff032, 0x055c0441, 0x0681004f, 0x070ff0d1,
+ 0x055c0403, 0x034a88ff, 0x05818944, 0x01800114,
+ 0x07480000, 0x07810936, 0x0149b000, 0x0781005f,
+ 0x06600a01, 0x050f80ff, 0x053fa809, 0x0600001c,
+ 0x07f00000, 0x030ef039, 0x02860934, 0x07600339,
+ 0x07601839, 0x050f80ff, 0x063fa051, 0x06000002,
+ 0x05481000, 0x04818068, 0x06780043, 0x070000f0,
+ 0x06810073, 0x037c00ff, 0x06000010, 0x04818932,
+ 0x02800073, 0x06780043, 0x070000f0, 0x037c00ff,
+ 0x07000030, 0x06810073, 0x06780043, 0x070000f0,
+ 0x037c00ff, 0x06000020, 0x06810073, 0x02800932,
0x0379ff00, 0x070fffff, 0x06780043, 0x07f00000,
- 0x075a0000, 0x020ef001, 0x008607f8, 0x05484000,
- 0x03a1822e, 0x03680c00, 0x07818822, 0x062d6002,
- 0x002fb001, 0x070ff069, 0x00868070, 0x060ff079,
- 0x055c0441, 0x07810014, 0x012fb000, 0x060560fb,
- 0x02800076, 0x060ff079, 0x03868209, 0x070ff069,
- 0x055c0441, 0x07810014, 0x060560fb, 0x070ff0d1,
- 0x062d6001, 0x055c040c, 0x058180d7, 0x070ff0d1,
- 0x045c040d, 0x054b08ff, 0x058180e1, 0x0007b001,
- 0x03079041, 0x0307a000, 0x07489000, 0x07818103,
- 0x068d0083, 0x0207c004, 0x0107d005, 0x0107e006,
- 0x0207f007, 0x02080008, 0x01081009, 0x0108200a,
- 0x0208300b, 0x0186809a, 0x0448d07a, 0x0581809a,
- 0x0448b07a, 0x04810801, 0x0049707a, 0x0581809a,
- 0x04604679, 0x050f80ff, 0x053fa809, 0x06000001,
- 0x01680703, 0x076c0303, 0x06818801, 0x072d5003,
- 0x0049107a, 0x068100a4, 0x070ff00a, 0x0054040b,
- 0x058280a3, 0x078d00a0, 0x0008200b, 0x032ff000,
- 0x010770ff, 0x0108400c, 0x0208500d, 0x0678007a,
- 0x06000008, 0x078100b7, 0x078d00a9, 0x04603e79,
- 0x050f80ff, 0x073fa041, 0x0600004a, 0x0049707a,
- 0x02a188b9, 0x068d00b0, 0x0678007a, 0x07f00000,
- 0x010880ff, 0x02386008, 0x03010000, 0x038000bd,
- 0x078d00b7, 0x0678007a, 0x07f00000, 0x010880ff,
- 0x03386000, 0x03010000, 0x072e6300, 0x020ef07f,
- 0x03860014, 0x070ff07d, 0x0450047c, 0x050f80ff,
- 0x002fa819, 0x068d00c4, 0x02080001, 0x00081002,
- 0x0678007a, 0x05000200, 0x078100cc, 0x0049107a,
- 0x03a18227, 0x01082003, 0x068d00cd, 0x0448b07a,
- 0x068100d3, 0x0338600c, 0x03010000, 0x028000d5,
- 0x02386004, 0x03010000, 0x072e6c00, 0x03800014,
- 0x062d6001, 0x07f00000, 0x07f00000, 0x0400e0d0,
- 0x0648300e, 0x0681007a, 0x072e500c, 0x00208001,
- 0x07a006b8, 0x03800014, 0x06780043, 0x070000f0,
- 0x05810803, 0x050020ff, 0x027c0002, 0x06000010,
- 0x068100ec, 0x027c0002, 0x07000030, 0x068100ec,
- 0x01800803, 0x0500d0d1, 0x0279ff0d, 0x070000ff,
- 0x0380007e, 0x020ef002, 0x018607e8, 0x04602602,
- 0x050f80ff, 0x053fa809, 0x06000008, 0x060ff0d0,
- 0x055c0411, 0x0179feff, 0x0700ffff, 0x078187e8,
- 0x02800045, 0x027c0045, 0x03040000, 0x0581010c,
- 0x027c0045, 0x03080000, 0x058107ee, 0x03800039,
- 0x06600a79, 0x050f80ff, 0x053fa80a, 0x06000010,
- 0x02800083, 0x05601041, 0x050f80ff, 0x032fa071,
- 0x02800045, 0x0204a051, 0x06780043, 0x070000f0,
- 0x037c00ff, 0x06000010, 0x068181bf, 0x072d6000,
- 0x029487ea, 0x050fb056, 0x044880e6, 0x05818014,
- 0x060ff0d0, 0x0179feff, 0x0700ffff, 0x057dfeff,
- 0x0700ffff, 0x058107e8, 0x053f2000, 0x07030000,
- 0x019d8014, 0x070ff093, 0x045a0201, 0x070ff093,
- 0x045c0401, 0x06818120, 0x02046092, 0x04002046,
- 0x060ff002, 0x045c0401, 0x0703a0ff, 0x04600202,
- 0x00540401, 0x0782812e, 0x04500425, 0x070060ff,
- 0x0730ffff, 0x0700000f, 0x0742000f, 0x04810201,
- 0x04a007d0, 0x0648a002, 0x06818131, 0x00047089,
- 0x070ff047, 0x045c0443, 0x077800ff, 0x07f00000,
- 0x078181ff, 0x07780047, 0x0500e000, 0x078187d7,
- 0x070ff006, 0x00860164, 0x0179fe47, 0x0700000f,
- 0x010480ff, 0x056c7048, 0x0681814a, 0x007a0d4a,
- 0x04003801, 0x0220f001, 0x00800157, 0x07608e48,
- 0x034a60ff, 0x0700f0ff, 0x074b88ff, 0x037000ff,
- 0x07000600, 0x05500448, 0x074d00ff, 0x045a044a,
- 0x0304a0ff, 0x070ff00f, 0x01540406, 0x04820164,
- 0x0595016c, 0x05a0024e, 0x0386816f, 0x06780043,
- 0x070000f0, 0x037c00ff, 0x07000030, 0x0581016a,
- 0x0134bfff, 0x070fffff, 0x0104102e, 0x050fd041,
- 0x01800178, 0x0595016a, 0x05a0024e, 0x0186016a,
- 0x0202f00e, 0x052e4030, 0x040fd02f, 0x04a002ad,
- 0x03800014, 0x0400e02f, 0x042e4020, 0x0202f051,
- 0x0004100e, 0x0004b00e, 0x004980e5, 0x07818178,
+ 0x075a0000, 0x020ef001, 0x02860934, 0x05484000,
+ 0x02a182da, 0x03680c00, 0x0581897b, 0x04600452,
+ 0x030d60ff, 0x002fb001, 0x070ff069, 0x00868089,
+ 0x060ff079, 0x055c0441, 0x07810014, 0x012fb000,
+ 0x060560fb, 0x0280008f, 0x060ff079, 0x028682b5,
+ 0x070ff069, 0x055c0441, 0x07810014, 0x060560fb,
+ 0x070ff0d1, 0x0700f0ff, 0x04600252, 0x030d60ff,
+ 0x070ff00f, 0x055c040c, 0x058180fa, 0x070ff0d1,
+ 0x045c040d, 0x054b08ff, 0x07818105, 0x04600801,
+ 0x050f80ff, 0x053fa809, 0x0600004f, 0x03070039,
+ 0x0007b001, 0x03079041, 0x0307a000, 0x07489000,
+ 0x06818134, 0x068d00a4, 0x0207c004, 0x0107d005,
+ 0x0107e006, 0x0207f007, 0x02080008, 0x01081009,
+ 0x0108200a, 0x0208300b, 0x018680bb, 0x0448d07a,
+ 0x058180bb, 0x0448b07a, 0x0681093d, 0x0049707a,
+ 0x058180bb, 0x04604679, 0x050f80ff, 0x053fa809,
+ 0x06000001, 0x01680703, 0x076c0303, 0x0481893d,
+ 0x072d5003, 0x033e5000, 0x05002000, 0x0049107a,
+ 0x068100c7, 0x070ff00a, 0x0054040b, 0x058280c6,
+ 0x078d00c3, 0x0008200b, 0x032ff000, 0x010770ff,
+ 0x0108400c, 0x0208500d, 0x0678007a, 0x06000008,
+ 0x068100da, 0x078d00cc, 0x04603e79, 0x050f80ff,
+ 0x073fa041, 0x0600004a, 0x0049707a, 0x01a18a0f,
+ 0x068d00d3, 0x0678007a, 0x07f00000, 0x010880ff,
+ 0x02386008, 0x03010000, 0x028000e0, 0x068d00da,
+ 0x0678007a, 0x07f00000, 0x010880ff, 0x03386000,
+ 0x03010000, 0x072e6300, 0x020ef07f, 0x03860014,
+ 0x070ff07d, 0x0450047c, 0x050f80ff, 0x002fa819,
+ 0x078d00e7, 0x02080001, 0x00081002, 0x0678007a,
+ 0x05000200, 0x068100ef, 0x0049107a, 0x02a182d3,
+ 0x01082003, 0x078d00f0, 0x0448b07a, 0x078100f6,
+ 0x0338600c, 0x03010000, 0x028000f8, 0x02386004,
+ 0x03010000, 0x072e6c00, 0x03800014, 0x04600252,
+ 0x030d60ff, 0x07f00000, 0x07f00000, 0x0400e0d0,
+ 0x0648300e, 0x07810096, 0x072e500c, 0x00208001,
+ 0x05a007e4, 0x03800014, 0x06780043, 0x070000f0,
+ 0x0781093f, 0x050020ff, 0x027c0002, 0x06000010,
+ 0x04810110, 0x027c0002, 0x07000030, 0x04810110,
+ 0x0380093f, 0x0500d0d1, 0x0279ff0d, 0x070000ff,
+ 0x0380009a, 0x060ff032, 0x055c0441, 0x0681004f,
+ 0x020ef002, 0x03860924, 0x04602602, 0x050f80ff,
+ 0x053fa811, 0x06000008, 0x060ff0d0, 0x055c0411,
+ 0x0179feff, 0x0700ffff, 0x05818924, 0x0448b043,
+ 0x0481012c, 0x072d6000, 0x0179fd12, 0x0600001f,
+ 0x060ff0d0, 0x0379fcff, 0x0600001f, 0x055c0412,
+ 0x05818924, 0x0280004f, 0x027c0045, 0x03040000,
+ 0x0481013d, 0x027c0045, 0x03080000, 0x0681092a,
+ 0x0380003f, 0x06600a79, 0x050f80ff, 0x053fa80a,
+ 0x06000010, 0x028000a4, 0x05601041, 0x050f80ff,
+ 0x032fa071, 0x0280004f, 0x0204a051, 0x06780043,
+ 0x070000f0, 0x037c00ff, 0x06000010, 0x07818266,
+ 0x06600052, 0x030d60ff, 0x00948926, 0x050fb056,
+ 0x044880e6, 0x05818014, 0x060ff0d0, 0x0179feff,
+ 0x0700ffff, 0x057dfeff, 0x0700ffff, 0x07810924,
+ 0x053f2000, 0x07030000, 0x019d8014, 0x070ff093,
+ 0x045a0201, 0x070ff093, 0x045c0401, 0x06818152,
+ 0x02046092, 0x04002046, 0x060ff002, 0x045c0401,
+ 0x0703a0ff, 0x04600202, 0x00540401, 0x07828160,
+ 0x04500425, 0x070060ff, 0x0730ffff, 0x0700000f,
+ 0x0742000f, 0x048102ad, 0x07a0090c, 0x0648a002,
+ 0x07818163, 0x00047089, 0x070ff047, 0x045c0443,
+ 0x077800ff, 0x07f00000, 0x068182ab, 0x07780047,
+ 0x0500e000, 0x04818913, 0x070ff006, 0x008601f1,
+ 0x0179fe47, 0x0700000f, 0x010480ff, 0x056c7048,
+ 0x0681817c, 0x007a0d4a, 0x04003801, 0x0220f001,
+ 0x00800189, 0x07608e48, 0x034a60ff, 0x0700f0ff,
+ 0x074b88ff, 0x037000ff, 0x07000600, 0x05500448,
+ 0x074d00ff, 0x045a044a, 0x0304a0ff, 0x070ff00f,
+ 0x01540406, 0x048201f1, 0x04031051, 0x0349c0e4,
+ 0x048101e0, 0x062d6001, 0x07f00000, 0x060ff0d0,
+ 0x034900ff, 0x068181e0, 0x072e500c, 0x062d6002,
+ 0x07f00000, 0x0204f0d0, 0x0079fe4f, 0x070000ff,
+ 0x050580ff, 0x01540436, 0x078281d8, 0x060ff058,
+ 0x0054043b, 0x058201d8, 0x072d6000, 0x044b044f,
+ 0x050580ff, 0x0004d0d0, 0x0379ff4d, 0x0700ffff,
+ 0x0104e0d1, 0x0379ff4e, 0x0700ffff, 0x079081a6,
+ 0x0291092a, 0x0500e0a6, 0x0279ff0e, 0x0700ffff,
+ 0x04600e0e, 0x050f80ff, 0x032fa009, 0x07f00000,
+ 0x074b0000, 0x056c0e00, 0x048101dc, 0x0660060e,
+ 0x050f80ff, 0x032fa009, 0x0379ff00, 0x070000ff,
+ 0x076c0000, 0x068181da, 0x06602e0e, 0x050f80ff,
+ 0x032fa009, 0x030ef000, 0x028681bf, 0x066a0331,
+ 0x00201008, 0x0460040e, 0x050f80ff, 0x032fa009,
+ 0x07780000, 0x07ffff00, 0x045a0458, 0x070000ff,
+ 0x04002051, 0x06003051, 0x01204000, 0x07305000,
+ 0x07000060, 0x03206009, 0x05007022, 0x0460040e,
+ 0x050f80ff, 0x032fa042, 0x07f00000, 0x0405804f,
+ 0x0460520e, 0x050f80ff, 0x053fa812, 0x06000026,
+ 0x018001fc, 0x066a0531, 0x008001df, 0x046a0731,
+ 0x008001df, 0x066a0931, 0x008001df, 0x046a0b31,
+ 0x0405804f, 0x059501f9, 0x05a002fa, 0x038681fc,
0x06780043, 0x070000f0, 0x037c00ff, 0x07000030,
- 0x0481081f, 0x024a6c46, 0x04500423, 0x050070ff,
- 0x03620024, 0x050080ff, 0x04004046, 0x0700500f,
- 0x03206000, 0x05601048, 0x0700a0ff, 0x0700900a,
- 0x070ff005, 0x04500446, 0x00540425, 0x048201ab,
- 0x07601822, 0x050f80ff, 0x063fa032, 0x06000002,
- 0x03203000, 0x01204000, 0x03205000, 0x0120b000,
- 0x0320c000, 0x07601841, 0x050f80ff, 0x043fa852,
- 0x06000001, 0x070ff056, 0x056c02ff, 0x050fb0ff,
- 0x070560ff, 0x03079041, 0x05601041, 0x050f80ff,
- 0x073fa011, 0x0600003d, 0x06780043, 0x07f00000,
- 0x065a007a, 0x010880ff, 0x033e5000, 0x05002000,
- 0x05a00247, 0x048d01a4, 0x0208a04a, 0x0108b04b,
- 0x02386001, 0x03010000, 0x072e6300, 0x038000be,
- 0x0500d00a, 0x05500405, 0x014a68ff, 0x070090ff,
- 0x0154040a, 0x0700c0ff, 0x0600a023, 0x0500b024,
- 0x02206001, 0x07601822, 0x050f80ff, 0x063fa04a,
- 0x06000002, 0x07f00000, 0x07601222, 0x050f80ff,
- 0x043fa819, 0x06000001, 0x0600a00d, 0x0180018e,
- 0x06780043, 0x070000f0, 0x050010ff, 0x027c0001,
- 0x07000030, 0x058101c9, 0x027c0001, 0x06000020,
- 0x058107de, 0x018007f6, 0x0548e0e4, 0x058107de,
- 0x0334a000, 0x03080000, 0x01800112, 0x074860ff,
- 0x068181ea, 0x054880ff, 0x07810014, 0x070ff056,
- 0x050fb0ff, 0x044880e5, 0x048101d9, 0x044880e6,
- 0x05818014, 0x008001df, 0x056c02ff, 0x050fb0ff,
- 0x070560ff, 0x072e5300, 0x044880e6, 0x05818014,
- 0x072d5003, 0x06780043, 0x07f00000, 0x010880ff,
- 0x048d01e3, 0x03386005, 0x03010000, 0x033e6000,
+ 0x048101f7, 0x0134bfff, 0x070fffff, 0x0104102e,
+ 0x050fd041, 0x07602e41, 0x050f80ff, 0x06000051,
+ 0x032fa00a, 0x0080021f, 0x049501f7, 0x05a002fa,
+ 0x008601f7, 0x0202f00e, 0x052e4030, 0x040fd02f,
+ 0x06a0035e, 0x03800014, 0x0400e02f, 0x042e4020,
+ 0x0202f051, 0x0004100e, 0x0079fe31, 0x070000ff,
+ 0x04810215, 0x06602e0e, 0x050f80ff, 0x06780031,
+ 0x06000004, 0x04810208, 0x04300ead, 0x010deadd,
+ 0x00800213, 0x07000033, 0x032fa00a, 0x0079fe58,
+ 0x070000ff, 0x070000ff, 0x04602c0e, 0x050f80ff,
+ 0x017a0100, 0x03400000, 0x032fa00a, 0x00800215,
+ 0x032fa00a, 0x07f00000, 0x044b8c31, 0x045a040e,
+ 0x0104b0ff, 0x004980e5, 0x0681821f, 0x06780043,
+ 0x070000f0, 0x037c00ff, 0x07000030, 0x07810978,
+ 0x024a6c46, 0x04500423, 0x050070ff, 0x03620024,
+ 0x050080ff, 0x04004046, 0x0700500f, 0x03206000,
+ 0x05601048, 0x0700a0ff, 0x0700900a, 0x070ff005,
+ 0x04500446, 0x00540425, 0x04820252, 0x07601e22,
+ 0x050f80ff, 0x063fa032, 0x06000002, 0x03203000,
+ 0x01204000, 0x03205000, 0x0120b000, 0x0320c000,
+ 0x07601841, 0x050f80ff, 0x043fa852, 0x06000001,
+ 0x070ff056, 0x056c02ff, 0x050fb0ff, 0x070560ff,
+ 0x03079041, 0x05601041, 0x050f80ff, 0x073fa011,
+ 0x0600003d, 0x06780043, 0x07f00000, 0x065a007a,
+ 0x010880ff, 0x033e5000, 0x05002000, 0x05a002f3,
+ 0x058d024b, 0x0208a04a, 0x0108b04b, 0x02386001,
+ 0x03010000, 0x072e6300, 0x038000e1, 0x0500d00a,
+ 0x05500405, 0x014a68ff, 0x070090ff, 0x0154040a,
+ 0x0700c0ff, 0x0600a023, 0x0500b024, 0x02206001,
+ 0x07601e22, 0x050f80ff, 0x063fa04a, 0x06000002,
+ 0x07f00000, 0x07601822, 0x050f80ff, 0x043fa819,
+ 0x06000001, 0x0600a00d, 0x01800235, 0x06780043,
+ 0x070000f0, 0x050010ff, 0x027c0001, 0x07000030,
+ 0x04810270, 0x027c0001, 0x06000020, 0x0681091a,
+ 0x02800932, 0x0548e0e4, 0x0681091a, 0x0334a000,
+ 0x03080000, 0x00800143, 0x074860ff, 0x07818296,
+ 0x054880ff, 0x07810014, 0x070ff056, 0x050fb0ff,
+ 0x044880e5, 0x05810281, 0x067800e6, 0x07000041,
+ 0x05818014, 0x01800288, 0x056c02ff, 0x050fb0ff,
+ 0x070560ff, 0x072e5300, 0x067800e6, 0x07000041,
+ 0x05818014, 0x072d5003, 0x033e5000, 0x05002000,
+ 0x06780043, 0x07f00000, 0x010880ff, 0x050fd0ff,
+ 0x048d028f, 0x03386005, 0x03010000, 0x033e6000,
0x0700000c, 0x052e5200, 0x03800014, 0x079a0014,
- 0x05301fff, 0x0700000f, 0x06420001, 0x04810201,
- 0x04a007d0, 0x0648a002, 0x078181ed, 0x062e5080,
+ 0x05301fff, 0x0700000f, 0x06420001, 0x048102ad,
+ 0x07a0090c, 0x0648a002, 0x07818299, 0x062e5080,
0x04001089, 0x040fd002, 0x040fd001, 0x02499001,
- 0x04810220, 0x070ff0d4, 0x050fd0ff, 0x045c0401,
- 0x077800ff, 0x07f00000, 0x06818220, 0x03800014,
- 0x012091ff, 0x038006bb, 0x00209201, 0x038006bb,
- 0x01209203, 0x038006bb, 0x03209000, 0x038006bb,
- 0x00209207, 0x038006bb, 0x01209209, 0x038006bb,
- 0x06780043, 0x07009000, 0x06818216, 0x00498043,
- 0x04810216, 0x0648a0e5, 0x05810217, 0x027c0045,
- 0x03040000, 0x04810219, 0x075c00ff, 0x07c00000,
- 0x056a02ff, 0x00800216, 0x00800215, 0x06780075,
- 0x06000c07, 0x04810720, 0x0020921a, 0x070fc0ff,
- 0x07a006a6, 0x070fc0ff, 0x05308000, 0x0700a000,
- 0x07a006b8, 0x033e5000, 0x0700000c, 0x03800014,
- 0x070ff003, 0x01540477, 0x0682822c, 0x07003077,
- 0x060ff051, 0x010770ff, 0x07c00000, 0x04602001,
+ 0x058102cc, 0x070ff0d4, 0x050fd0ff, 0x045c0401,
+ 0x077800ff, 0x07f00000, 0x078182cc, 0x03800014,
+ 0x002092ab, 0x018007e7, 0x002092ad, 0x018007e7,
+ 0x012092af, 0x018007e7, 0x03209000, 0x018007e7,
+ 0x002092b3, 0x018007e7, 0x002092b5, 0x018007e7,
+ 0x06780043, 0x07009000, 0x068182c2, 0x00498043,
+ 0x048102c2, 0x0648a0e5, 0x058102c3, 0x027c0045,
+ 0x03040000, 0x058102c5, 0x075c00ff, 0x07c00000,
+ 0x056a02ff, 0x008002c2, 0x008002c1, 0x06780075,
+ 0x06000c07, 0x04810852, 0x012092c6, 0x070fc0ff,
+ 0x05a007d2, 0x070fc0ff, 0x05308000, 0x0700a000,
+ 0x05a007e4, 0x033e5000, 0x0700000c, 0x03800014,
+ 0x070ff003, 0x01540477, 0x078282d8, 0x07003077,
+ 0x060ff051, 0x010770ff, 0x07c00000, 0x04602601,
0x050f80ff, 0x063fa029, 0x06000008, 0x02015010,
0x02016051, 0x00017051, 0x00011051, 0x07601e41,
0x050f80ff, 0x053fa83a, 0x06000008, 0x07f00000,
0x05601041, 0x050f80ff, 0x01464000, 0x032fa00a,
0x05007011, 0x05008012, 0x06009013, 0x0700a014,
0x0400b015, 0x0600c016, 0x0500d017, 0x07c00000,
- 0x072d5003, 0x06601879, 0x050f80ff, 0x048d024a,
+ 0x072d5003, 0x06601879, 0x050f80ff, 0x058d02f6,
0x063fa051, 0x0600003e, 0x07c00000, 0x06005051,
0x0400e02c, 0x0660060e, 0x050f80ff, 0x032fa009,
- 0x0379ff00, 0x070000ff, 0x076c0000, 0x04810270,
+ 0x0379ff00, 0x070000ff, 0x076c0000, 0x0681031c,
0x0660600e, 0x0500e0ff, 0x034000ff, 0x01540427,
- 0x0582029a, 0x03400005, 0x070ff005, 0x055c0428,
- 0x0581029c, 0x056c0805, 0x07818250, 0x040f8029,
+ 0x07820347, 0x03400005, 0x070ff005, 0x055c0428,
+ 0x06810349, 0x056c0805, 0x078182fc, 0x040f8029,
0x053fa809, 0x07000024, 0x07f00000, 0x06600649,
0x050f80ff, 0x032fa009, 0x0379ff00, 0x070000ff,
- 0x076c0000, 0x07818250, 0x05a002a0, 0x0400e049,
- 0x01800271, 0x05a002a0, 0x072d6000, 0x0460040e,
- 0x050f80ff, 0x0004d0d0, 0x0379ff4d, 0x0700ffff,
- 0x0104e0d1, 0x0379ff4e, 0x0700ffff, 0x062d6002,
- 0x032fa009, 0x0204f0d0, 0x064b004f, 0x07780000,
- 0x07ffff00, 0x045a044f, 0x070000ff, 0x00201008,
- 0x04002051, 0x06003051, 0x01204000, 0x07305000,
- 0x07000060, 0x03206009, 0x05007022, 0x0460040e,
- 0x050f80ff, 0x032fa042, 0x07f00000, 0x0460520e,
- 0x050f80ff, 0x053fa812, 0x06000026, 0x050010d1,
- 0x0660360e, 0x050f80ff, 0x012fa80a, 0x060ff00e,
- 0x055c042e, 0x0481029e, 0x07c00000, 0x0400e026,
- 0x0180025c, 0x0500e02e, 0x01800271, 0x0400e051,
- 0x01800299, 0x0340002d, 0x050f802b, 0x053fa80a,
- 0x06000016, 0x07f00000, 0x0660600e, 0x0302c0ff,
- 0x034000ff, 0x01540427, 0x048202ab, 0x07c00000,
- 0x0202c026, 0x018002aa, 0x053f2000, 0x03020000,
- 0x07c00000, 0x022a5002, 0x077800e4, 0x07000005,
- 0x058183ff, 0x010440d7, 0x0678aae5, 0x06000051,
- 0x03a1881b, 0x079082b8, 0x02910337, 0x030400a6,
- 0x04600e40, 0x050f80ff, 0x022fa029, 0x07f00000,
- 0x074b0000, 0x076c0600, 0x05818339, 0x060ff002,
- 0x01580403, 0x07810360, 0x070ff044, 0x045c0404,
- 0x034a88ff, 0x0481833b, 0x0349f044, 0x04818362,
- 0x02495001, 0x0481833d, 0x030100d8, 0x062da001,
- 0x0149e044, 0x058102d8, 0x038f82d1, 0x0700f0d7,
- 0x062da001, 0x0778000f, 0x07a00000, 0x00a18352,
- 0x068182e9, 0x06480001, 0x06810308, 0x0448e001,
- 0x058102ee, 0x00491001, 0x0581834d, 0x06005010,
- 0x05780105, 0x07ffff00, 0x06006051, 0x04600e02,
- 0x050f80ff, 0x053fa812, 0x06000002, 0x0245f040,
- 0x058402e7, 0x020e0040, 0x053f2000, 0x05008000,
- 0x07930017, 0x03920017, 0x03800014, 0x060ff079,
- 0x045c0440, 0x068182f2, 0x0644f07a, 0x002fb008,
- 0x060ff079, 0x045c0440, 0x068182f7, 0x0644f07a,
- 0x002fb008, 0x0644f001, 0x06489001, 0x058102ff,
+ 0x076c0000, 0x078182fc, 0x07a0034d, 0x0400e049,
+ 0x0380031d, 0x07a0034d, 0x06600052, 0x030d60ff,
+ 0x0460040e, 0x050f80ff, 0x0004d0d0, 0x0379ff4d,
+ 0x0700ffff, 0x0104e0d1, 0x0379ff4e, 0x0700ffff,
+ 0x062d6002, 0x032fa009, 0x0204f0d0, 0x064b004f,
+ 0x07780000, 0x07ffff00, 0x045a044f, 0x070000ff,
+ 0x00201008, 0x04002051, 0x06003051, 0x01204000,
+ 0x07305000, 0x06000068, 0x03206009, 0x05007022,
+ 0x0460040e, 0x050f80ff, 0x032fa042, 0x07f00000,
+ 0x0460520e, 0x050f80ff, 0x053fa812, 0x06000026,
+ 0x050010d1, 0x0660360e, 0x050f80ff, 0x012fa80a,
+ 0x060ff00e, 0x055c042e, 0x0781034b, 0x07c00000,
+ 0x0400e026, 0x02800308, 0x0500e02e, 0x0380031d,
+ 0x0400e051, 0x02800346, 0x050f802b, 0x053fa809,
+ 0x06000016, 0x07f00000, 0x0340002d, 0x050f802b,
+ 0x053fa80a, 0x06000016, 0x07f00000, 0x0660600e,
+ 0x0302c0ff, 0x034000ff, 0x01540427, 0x0782035c,
+ 0x07c00000, 0x0202c026, 0x0280035b, 0x053f2000,
+ 0x03020000, 0x07c00000, 0x022a5002, 0x077800e4,
+ 0x07000005, 0x068184df, 0x010440d7, 0x0678aae5,
+ 0x06000051, 0x01a18974, 0x05908369, 0x029103f2,
+ 0x030400a6, 0x04600e40, 0x050f80ff, 0x022fa029,
+ 0x07f00000, 0x074b0000, 0x076c0600, 0x048183f4,
+ 0x060ff002, 0x01580403, 0x04810420, 0x070ff044,
+ 0x045c0404, 0x034a88ff, 0x058183f6, 0x0349f044,
+ 0x07818422, 0x0049b001, 0x07810381, 0x0448e001,
+ 0x06810383, 0x028003f8, 0x02495001, 0x048183f8,
+ 0x030100d8, 0x062da001, 0x0149e044, 0x07810393,
+ 0x018f8387, 0x0700f0d7, 0x062da001, 0x0149e00f,
+ 0x0681038f, 0x008f838c, 0x05a004bb, 0x048183a4,
+ 0x0778000f, 0x07a00000, 0x03a18412, 0x048183a4,
+ 0x06480001, 0x078103c3, 0x0448e001, 0x078103a9,
+ 0x00491001, 0x0681840d, 0x06005010, 0x05780105,
+ 0x07ffff00, 0x06006051, 0x06601402, 0x050f80ff,
+ 0x053fa812, 0x06000002, 0x0245f040, 0x068403a2,
+ 0x020e0040, 0x053f2000, 0x05008000, 0x07930018,
+ 0x03920018, 0x03800014, 0x060ff079, 0x045c0440,
+ 0x048183ad, 0x0644f07a, 0x002fb008, 0x060ff079,
+ 0x045c0440, 0x058183b2, 0x0644f07a, 0x002fb008,
+ 0x0644f001, 0x06489001, 0x068103ba, 0x04600440,
+ 0x050f80ff, 0x073fa00a, 0x06000008, 0x07a00974,
+ 0x04601040, 0x050f80ff, 0x012fa80a, 0x03200003,
+ 0x06600c40, 0x050f80ff, 0x032fa00a, 0x028003a4,
+ 0x020ef002, 0x028603e5, 0x04600840, 0x050f80ff,
+ 0x053fa809, 0x06000002, 0x05780105, 0x00800440,
+ 0x017c0105, 0x05000400, 0x048183e5, 0x04602602,
+ 0x050f80ff, 0x053fa809, 0x06000002, 0x07f00000,
+ 0x06602e40, 0x050f80ff, 0x070ff005, 0x053fa809,
+ 0x06000002, 0x055c0405, 0x048183e5, 0x06005010,
+ 0x05780105, 0x07ffff00, 0x06006051, 0x06601402,
+ 0x050f80ff, 0x053fa812, 0x06000002, 0x007a0140,
+ 0x07c00000, 0x028003a2, 0x0644f001, 0x04601040,
+ 0x050f80ff, 0x012fa80a, 0x05308000, 0x03040000,
0x04600440, 0x050f80ff, 0x073fa00a, 0x06000008,
- 0x05a0081b, 0x054b0800, 0x04002001, 0x05001000,
- 0x03200003, 0x06600c40, 0x050f80ff, 0x022fa01a,
- 0x008002e9, 0x020ef002, 0x0286032a, 0x04600840,
- 0x050f80ff, 0x053fa809, 0x06000002, 0x05780105,
- 0x00800440, 0x017c0105, 0x05000400, 0x0481832a,
- 0x04602002, 0x050f80ff, 0x053fa809, 0x06000002,
- 0x07f00000, 0x06602e40, 0x050f80ff, 0x070ff005,
- 0x053fa809, 0x06000002, 0x055c0405, 0x0481832a,
- 0x06005010, 0x05780105, 0x07ffff00, 0x06006051,
- 0x04600e02, 0x050f80ff, 0x053fa812, 0x06000002,
- 0x007a0140, 0x07c00000, 0x018002e7, 0x0644f001,
- 0x04601040, 0x050f80ff, 0x012fa80a, 0x05308000,
- 0x03040000, 0x04600440, 0x050f80ff, 0x073fa00a,
- 0x06000008, 0x06009040, 0x06a006b3, 0x008002e9,
- 0x02209002, 0x028003ea, 0x03209000, 0x028003ea,
- 0x02209004, 0x028003ea, 0x05a00409, 0x062da001,
- 0x0149e044, 0x07810348, 0x018f8341, 0x0700f0d7,
- 0x062da001, 0x0778000f, 0x07a00000, 0x00a18352,
- 0x068182e9, 0x05308000, 0x05002000, 0x06009040,
- 0x06a006b3, 0x008002e9, 0x05308000, 0x05004000,
- 0x06009040, 0x06a006b3, 0x008002e9, 0x0700600f,
+ 0x06009040, 0x04a007df, 0x028003a4, 0x02209002,
+ 0x018004c5, 0x03209000, 0x018004c5, 0x02209004,
+ 0x018004c5, 0x04a004e9, 0x062da001, 0x0149e044,
+ 0x04810408, 0x018f83fc, 0x0700f0d7, 0x062da001,
+ 0x0149e00f, 0x04810404, 0x028f8401, 0x05a004bb,
+ 0x048183a4, 0x0778000f, 0x07a00000, 0x03a18412,
+ 0x048183a4, 0x05308000, 0x05002000, 0x06009040,
+ 0x04a007df, 0x028003a4, 0x05308000, 0x05004000,
+ 0x06009040, 0x04a007df, 0x028003a4, 0x0700600f,
0x0379ff06, 0x0700ffff, 0x05602603, 0x050f80ff,
0x053fa809, 0x06000008, 0x0179fe11, 0x0700ffff,
- 0x055c0406, 0x0481835e, 0x07c00000, 0x056a02ff,
- 0x0280035d, 0x02209008, 0x028003ea, 0x053f2000,
- 0x05008000, 0x02495001, 0x058183c9, 0x012f200c,
- 0x019d8366, 0x04600840, 0x050f80ff, 0x053fa809,
- 0x07000003, 0x0721f000, 0x0249f007, 0x06810370,
- 0x0245f01f, 0x06000002, 0x05601600, 0x050f80ff,
- 0x012fa809, 0x06480001, 0x078103c9, 0x04481001,
- 0x058183c9, 0x06602840, 0x050f80ff, 0x012fa809,
- 0x020ef001, 0x018683c9, 0x079c03c9, 0x070050d8,
+ 0x055c0406, 0x0781841e, 0x07c00000, 0x056a02ff,
+ 0x0180041d, 0x02209008, 0x018004c5, 0x053f2000,
+ 0x05008000, 0x02495001, 0x07818495, 0x012f200c,
+ 0x029d8426, 0x04600840, 0x050f80ff, 0x053fa809,
+ 0x07000003, 0x0448e007, 0x06818492, 0x0721f000,
+ 0x0249f007, 0x04810432, 0x0245f01f, 0x06000002,
+ 0x0049b001, 0x0781843c, 0x05601c00, 0x050f80ff,
+ 0x012fa809, 0x06480001, 0x05810495, 0x04481001,
+ 0x07818495, 0x06602840, 0x050f80ff, 0x012fa809,
+ 0x020ef001, 0x03868495, 0x059c0495, 0x070050d8,
0x062da001, 0x06306002, 0x05000430, 0x04600440,
- 0x050f80ff, 0x053fa812, 0x06000002, 0x008f8386,
- 0x050040d8, 0x062da001, 0x0149e044, 0x06810392,
- 0x018f838b, 0x0700f0d7, 0x062da001, 0x0778000f,
- 0x07a00000, 0x00a18352, 0x058183c3, 0x05602000,
- 0x050f80ff, 0x073fa009, 0x06000001, 0x060ff004,
- 0x00540402, 0x068203c7, 0x06005051, 0x06006051,
- 0x04602640, 0x050f80ff, 0x063fa01a, 0x06000002,
- 0x07f00000, 0x06600a40, 0x050f80ff, 0x073fa00a,
- 0x07000003, 0x04487007, 0x078103b1, 0x060ff002,
- 0x00540404, 0x058283b1, 0x002f2008, 0x05308000,
- 0x07005000, 0x06009040, 0x06a006b3, 0x04008004,
- 0x07a006b8, 0x03800017, 0x06780007, 0x02800040,
- 0x058183c0, 0x0079c107, 0x07ffffff, 0x007a0b07,
- 0x03800000, 0x04780104, 0x07ffff00, 0x068103bc,
- 0x02455007, 0x04600840, 0x050f80ff, 0x053fa80a,
- 0x07000003, 0x060ff040, 0x045a041f, 0x030e30ff,
- 0x002f2008, 0x07930017, 0x03920017, 0x03800014,
- 0x04004002, 0x03800399, 0x002f2008, 0x05a00409,
- 0x062da001, 0x07f00000, 0x008f83cd, 0x030100d8,
- 0x062da001, 0x0149e044, 0x068103d9, 0x018f83d2,
- 0x0700f0d7, 0x062da001, 0x0778000f, 0x07a00000,
- 0x00a18352, 0x05818017, 0x05308000, 0x07005000,
- 0x06009040, 0x06a006b3, 0x04008010, 0x07a006b8,
- 0x03800017, 0x05602603, 0x050f80ff, 0x053fa809,
- 0x06000008, 0x07780044, 0x073f0000, 0x055c0411,
- 0x077800ff, 0x07ff0000, 0x07c00000, 0x050fd009,
- 0x040fd040, 0x053f2000, 0x05008000, 0x05308000,
- 0x03013000, 0x06a006b3, 0x010440d7, 0x0349f044,
- 0x068103f7, 0x062da001, 0x028f03f7, 0x03e00000,
- 0x062da001, 0x0149e044, 0x07810017, 0x038f03fc,
- 0x03e00000, 0x0700f0d7, 0x062da001, 0x03800017,
- 0x059083ff, 0x0249c0e5, 0x07810017, 0x062da001,
+ 0x050f80ff, 0x053fa812, 0x06000002, 0x028f844a,
+ 0x050040d8, 0x062da001, 0x0149e044, 0x0481045b,
+ 0x028f844f, 0x0700f0d7, 0x062da001, 0x0149e00f,
+ 0x04810457, 0x028f8454, 0x05a004bb, 0x0681848c,
+ 0x0778000f, 0x07a00000, 0x03a18412, 0x0681848c,
+ 0x05602600, 0x050f80ff, 0x073fa009, 0x06000001,
+ 0x060ff004, 0x00540402, 0x05820490, 0x06005051,
+ 0x06006051, 0x04602640, 0x050f80ff, 0x063fa01a,
+ 0x06000002, 0x07f00000, 0x06600a40, 0x050f80ff,
+ 0x073fa00a, 0x07000003, 0x04487007, 0x0481047a,
+ 0x060ff002, 0x00540404, 0x0682847a, 0x002f2008,
+ 0x05308000, 0x07005000, 0x06009040, 0x04a007df,
+ 0x04008004, 0x05a007e4, 0x03800018, 0x06780007,
+ 0x02800040, 0x06818489, 0x0079c107, 0x07ffffff,
+ 0x007a0b07, 0x03800000, 0x04780104, 0x07ffff00,
+ 0x04810485, 0x02455007, 0x04600840, 0x050f80ff,
+ 0x053fa80a, 0x07000003, 0x060ff040, 0x045a041f,
+ 0x030e30ff, 0x002f2008, 0x07930018, 0x03920018,
+ 0x03800014, 0x04004002, 0x00800462, 0x002f2008,
+ 0x03209000, 0x018004c5, 0x002f2008, 0x04a004e9,
+ 0x062da001, 0x07f00000, 0x038f8499, 0x030100d8,
+ 0x062da001, 0x0149e044, 0x058104aa, 0x028f849e,
+ 0x0700f0d7, 0x062da001, 0x0149e00f, 0x058104a6,
+ 0x038f84a3, 0x05a004bb, 0x05818018, 0x0778000f,
+ 0x07a00000, 0x03a18412, 0x05818018, 0x05308000,
+ 0x07005000, 0x06009040, 0x04a007df, 0x04008010,
+ 0x05a007e4, 0x03800018, 0x05602603, 0x050f80ff,
+ 0x053fa809, 0x06000008, 0x07780044, 0x073f0000,
+ 0x055c0411, 0x077800ff, 0x07ff0000, 0x07c00000,
+ 0x07602803, 0x050f80ff, 0x053fa809, 0x06000008,
+ 0x070ff0d8, 0x062da001, 0x055c0411, 0x0379fcff,
+ 0x0600001f, 0x07c00000, 0x050fd009, 0x040fd040,
+ 0x053f2000, 0x05008000, 0x05308000, 0x03013000,
+ 0x04a007df, 0x010440d7, 0x0349f044, 0x058104d2,
+ 0x062da001, 0x018f04d2, 0x03e00000, 0x062da001,
+ 0x0149e044, 0x07810018, 0x018f04d7, 0x03e00000,
+ 0x0700f0d7, 0x062da001, 0x0149e00f, 0x07810018,
+ 0x018f04dd, 0x03e00000, 0x062da001, 0x03800018,
+ 0x069084df, 0x0249c0e5, 0x07810018, 0x062da001,
0x07f00000, 0x07f00000, 0x033e5000, 0x070c0000,
- 0x008f0402, 0x02800015, 0x050020d8, 0x04600440,
+ 0x018f04e2, 0x02800016, 0x050020d8, 0x04600440,
0x050f80ff, 0x073fa00a, 0x06000001, 0x07c00000,
- 0x002fb001, 0x01800412, 0x012fb000, 0x03075087,
- 0x048d0413, 0x03386000, 0x03020000, 0x04482075,
- 0x048104b6, 0x0648a0e6, 0x05810463, 0x0642007f,
- 0x04810461, 0x0340007e, 0x060ff038, 0x0154047e,
- 0x00d00451, 0x0560027d, 0x050f80ff, 0x032fa009,
- 0x030ef000, 0x0186071b, 0x0107d000, 0x07600a00,
+ 0x002fb001, 0x008004f2, 0x012fb000, 0x03075087,
+ 0x058d04f3, 0x03386000, 0x03020000, 0x04482075,
+ 0x0781059c, 0x0648a0e6, 0x06810543, 0x0642007f,
+ 0x07810541, 0x0340007e, 0x060ff038, 0x0154047e,
+ 0x02d00531, 0x0560027d, 0x050f80ff, 0x032fa009,
+ 0x030ef000, 0x0186084d, 0x0107d000, 0x05601000,
0x050f80ff, 0x032fa009, 0x03681e00, 0x076c14ff,
- 0x0681842f, 0x0007e038, 0x0727c006, 0x01800435,
+ 0x0581850f, 0x0007e038, 0x0727c009, 0x02800515,
0x03681e00, 0x04500420, 0x050f80ff, 0x073fa009,
- 0x0700003f, 0x0180041d, 0x070ff07d, 0x0450047c,
- 0x050f80ff, 0x002fa819, 0x058d0439, 0x02080001,
- 0x00081002, 0x0678007a, 0x05000200, 0x05810441,
- 0x0049107a, 0x03a18227, 0x01082003, 0x058d0442,
- 0x0448b07a, 0x0681844a, 0x0249007a, 0x0581044d,
- 0x07780003, 0x03800000, 0x0581044d, 0x0338600c,
- 0x03010000, 0x0080044f, 0x02386004, 0x03010000,
- 0x072e6c00, 0x008004b6, 0x00800457, 0x01800459,
- 0x0080045b, 0x0080045d, 0x0180045f, 0x00800420,
- 0x0727c006, 0x01800435, 0x0727c009, 0x01800435,
- 0x0727c00c, 0x01800435, 0x0727c00f, 0x01800435,
- 0x0727c012, 0x01800435, 0x052e6800, 0x008004b6,
- 0x044880e6, 0x05810750, 0x070ff088, 0x0179feff,
- 0x070fffff, 0x00a186f4, 0x048186e9, 0x0249607a,
- 0x06818719, 0x060ff083, 0x02868719, 0x013e6200,
- 0x07000003, 0x0448b07a, 0x04810486, 0x0049707a,
- 0x06818486, 0x04604679, 0x050f80ff, 0x032fa009,
- 0x03680600, 0x076c00ff, 0x06818486, 0x06604879,
- 0x050f80ff, 0x032fa009, 0x07f00000, 0x074b0000,
- 0x070ff000, 0x048d0480, 0x05001099, 0x064b0001,
- 0x045c0401, 0x04810486, 0x0245a07a, 0x048d0486,
- 0x018c0412, 0x0279127a, 0x01040222, 0x016d02ff,
- 0x078184e8, 0x00798075, 0x0700f50f, 0x078184e8,
- 0x06483075, 0x058104e8, 0x04602679, 0x050f80ff,
- 0x053fa812, 0x07000041, 0x058d0495, 0x004940e6,
- 0x0581049a, 0x072e6300, 0x03800014, 0x0049707a,
- 0x0481049e, 0x0049807a, 0x07810014, 0x02386001,
- 0x07030000, 0x0648f07a, 0x058104b4, 0x04600479,
- 0x050f80ff, 0x053fa809, 0x06000002, 0x05780105,
- 0x07ffff00, 0x06006051, 0x05600e7b, 0x050f80ff,
- 0x053fa812, 0x06000002, 0x0245f079, 0x048404ae,
- 0x020e0079, 0x033e6a00, 0x0700aa0a, 0x02079051,
- 0x03800014, 0x0444e07a, 0x03800555, 0x048d04b6,
- 0x018c0412, 0x018004cf, 0x060ff0e6, 0x077800ff,
- 0x07000050, 0x078184cf, 0x02799075, 0x0500fd0f,
- 0x037c00ff, 0x04000808, 0x078184cf, 0x0049107a,
- 0x078184cf, 0x06601879, 0x050f80ff, 0x063fa052,
- 0x0600003e, 0x048d04c8, 0x02386001, 0x07030000,
- 0x033e6a00, 0x0700aa0a, 0x02079051, 0x03800014,
- 0x0648c0e6, 0x078184ed, 0x0448e0e6, 0x048104e5,
- 0x002094d3, 0x02490075, 0x06818220, 0x004920e6,
- 0x048104e0, 0x05a00799, 0x05001088, 0x00700101,
- 0x03100000, 0x00088001, 0x033e6000, 0x07000088,
- 0x0080078a, 0x02386001, 0x07030000, 0x033e6000,
- 0x06000008, 0x03800599, 0x02799075, 0x0700f50f,
- 0x07810014, 0x06601879, 0x050080ff, 0x06309052,
- 0x0600003e, 0x008004f1, 0x04602679, 0x050080ff,
- 0x05309812, 0x07000041, 0x0648007a, 0x07810503,
- 0x04488075, 0x05818503, 0x0678007a, 0x04000108,
- 0x058104ff, 0x04603e79, 0x050f80ff, 0x058d04fa,
- 0x073fa042, 0x0600004a, 0x048d04fd, 0x02086051,
- 0x040f8008, 0x070fa009, 0x0049107a, 0x00a1859b,
- 0x00798075, 0x0600f507, 0x06818737, 0x0448b075,
- 0x0781050a, 0x02493075, 0x05810733, 0x004940e6,
- 0x07810522, 0x02386001, 0x030e0000, 0x05001087,
- 0x00494001, 0x07810514, 0x04780b01, 0x05004000,
- 0x0681051f, 0x0249f076, 0x0681051a, 0x07a0091d,
- 0x0647f076, 0x004940e6, 0x06810520, 0x03386000,
- 0x030e0000, 0x033e6000, 0x0700c000, 0x03800014,
- 0x04a008d6, 0x03386000, 0x030e0000, 0x0648c0e6,
- 0x05818535, 0x078d0524, 0x02386001, 0x07030000,
- 0x0049107a, 0x0781052b, 0x020ef083, 0x03860535,
- 0x06483075, 0x06810597, 0x0678007a, 0x07000035,
- 0x01a186a6, 0x05308000, 0x07060000, 0x06009079,
- 0x06a006b3, 0x02800597, 0x06483075, 0x068106d0,
- 0x068d0537, 0x02386001, 0x07030000, 0x0444e07a,
- 0x0648307a, 0x0481856b, 0x0448707a, 0x06810592,
- 0x0448107a, 0x04818592, 0x0648f07a, 0x07810555,
- 0x07a006a6, 0x04008079, 0x07a006c5, 0x01868566,
- 0x0049107a, 0x05818566, 0x04600408, 0x050f80ff,
+ 0x0700003f, 0x008004fd, 0x070ff07d, 0x0450047c,
+ 0x050f80ff, 0x002fa819, 0x068d0519, 0x02080001,
+ 0x00081002, 0x0678007a, 0x05000200, 0x07810521,
+ 0x0049107a, 0x02a182d3, 0x01082003, 0x078d0522,
+ 0x0448b07a, 0x0481852a, 0x0249007a, 0x0781052d,
+ 0x07780003, 0x03800000, 0x0781052d, 0x0338600c,
+ 0x03010000, 0x0280052f, 0x02386004, 0x03010000,
+ 0x072e6c00, 0x0380059c, 0x02800537, 0x03800539,
+ 0x0280053b, 0x0280053d, 0x0380053f, 0x03800500,
+ 0x0727c009, 0x02800515, 0x0727c00c, 0x02800515,
+ 0x0727c00f, 0x02800515, 0x0727c012, 0x02800515,
+ 0x0627c015, 0x02800515, 0x052e6800, 0x0380059c,
+ 0x044880e6, 0x04810886, 0x070ff088, 0x0179feff,
+ 0x070fffff, 0x03a18821, 0x06818816, 0x0249607a,
+ 0x0781884b, 0x060ff083, 0x02868846, 0x013e6200,
+ 0x07000003, 0x0448b07a, 0x06810567, 0x0049707a,
+ 0x06810558, 0x004940e6, 0x06810567, 0x072e6300,
+ 0x02800567, 0x04604679, 0x050f80ff, 0x032fa009,
+ 0x03680600, 0x076c00ff, 0x04818567, 0x068d055e,
+ 0x05001099, 0x060ff001, 0x064b0001, 0x045c0401,
+ 0x0179feff, 0x070000ff, 0x06810567, 0x0245a07a,
+ 0x068d0567, 0x008c04f2, 0x0648307a, 0x048185f2,
+ 0x0279127a, 0x01040222, 0x016d02ff, 0x058185d1,
+ 0x00798075, 0x0700f50f, 0x058185d1, 0x06483075,
+ 0x078105d1, 0x04602679, 0x0049b07a, 0x07810578,
+ 0x04602670, 0x050f80ff, 0x053fa812, 0x07000041,
+ 0x078d057b, 0x004940e6, 0x06810580, 0x072e6300,
+ 0x03800014, 0x0049707a, 0x07810584, 0x0049807a,
+ 0x07810014, 0x02386001, 0x07030000, 0x0648f07a,
+ 0x0781059a, 0x04600479, 0x050f80ff, 0x053fa809,
+ 0x06000002, 0x05780105, 0x07ffff00, 0x06006051,
+ 0x0760147b, 0x050f80ff, 0x053fa812, 0x06000002,
+ 0x0245f079, 0x06840594, 0x020e0079, 0x033e6a00,
+ 0x0700aa0a, 0x02079051, 0x03800014, 0x0444e07a,
+ 0x02800649, 0x078d059c, 0x008c04f2, 0x038005b8,
+ 0x060ff0e6, 0x077800ff, 0x07000050, 0x058185b8,
+ 0x02799075, 0x0500fd0f, 0x037c00ff, 0x04000808,
+ 0x058185b8, 0x0049107a, 0x058185b8, 0x06601879,
+ 0x0049b07a, 0x068105ae, 0x06601870, 0x050f80ff,
+ 0x063fa052, 0x0600003e, 0x078d05b1, 0x02386001,
+ 0x07030000, 0x033e6a00, 0x0700aa0a, 0x02079051,
+ 0x03800014, 0x0648c0e6, 0x048185d9, 0x0448e0e6,
+ 0x068105ce, 0x022095bc, 0x02490075, 0x078182cc,
+ 0x004920e6, 0x078105c9, 0x04a008d5, 0x05001088,
+ 0x00700101, 0x03100000, 0x00088001, 0x033e6000,
+ 0x07000088, 0x018008c5, 0x02386001, 0x07030000,
+ 0x033e6000, 0x06000008, 0x028006b9, 0x02799075,
+ 0x0700f50f, 0x07810014, 0x06601879, 0x0049b07a,
+ 0x068105d5, 0x06601870, 0x050080ff, 0x06309052,
+ 0x0600003e, 0x028005e0, 0x04602679, 0x0049b07a,
+ 0x078105dd, 0x04602670, 0x050080ff, 0x05309812,
+ 0x07000041, 0x0648007a, 0x068105f2, 0x04488075,
+ 0x048185f2, 0x0678007a, 0x04000108, 0x078105ee,
+ 0x04603e79, 0x050f80ff, 0x068d05e9, 0x073fa042,
+ 0x0600004a, 0x068d05ec, 0x02086051, 0x040f8008,
+ 0x070fa009, 0x0049107a, 0x01a186bb, 0x00798075,
+ 0x0600f507, 0x07818869, 0x0448b075, 0x078105f9,
+ 0x02493075, 0x05810865, 0x004940e6, 0x07810611,
+ 0x02386001, 0x030e0000, 0x05001087, 0x00494001,
+ 0x07810603, 0x04780b01, 0x01204000, 0x0681060e,
+ 0x0249f076, 0x07810609, 0x06a00a7f, 0x0647f076,
+ 0x004940e6, 0x0781060f, 0x03386000, 0x030e0000,
+ 0x033e6000, 0x0700c000, 0x03800014, 0x06a00a2c,
+ 0x03386000, 0x030e0000, 0x0648c0e6, 0x05818624,
+ 0x068d0613, 0x02386001, 0x07030000, 0x0049107a,
+ 0x0681061a, 0x020ef083, 0x03860624, 0x06483075,
+ 0x078106b7, 0x0279007a, 0x01080200, 0x01a107d2,
+ 0x05308000, 0x07060000, 0x06009079, 0x04a007df,
+ 0x038006b7, 0x06483075, 0x058107fc, 0x068d0626,
+ 0x02386001, 0x07030000, 0x0444e07a, 0x0648307a,
+ 0x0581865f, 0x0448707a, 0x07810690, 0x0448107a,
+ 0x05818690, 0x0648f07a, 0x06810649, 0x05a007d2,
+ 0x04008079, 0x0049b07a, 0x07810639, 0x04602670,
+ 0x04a007f2, 0x0380063a, 0x04a007f1, 0x0186865a,
+ 0x0049107a, 0x0581865a, 0x04600408, 0x050f80ff,
0x053fa809, 0x06000002, 0x05780105, 0x07ffff00,
- 0x05600e7b, 0x050f80ff, 0x053fa812, 0x06000002,
- 0x07a006af, 0x02800597, 0x0760127b, 0x050f80ff,
- 0x032fa009, 0x0349c000, 0x04818564, 0x04601079,
+ 0x0760147b, 0x050f80ff, 0x053fa812, 0x06000002,
+ 0x05a007db, 0x038006b7, 0x0760187b, 0x050f80ff,
+ 0x032fa009, 0x0349c000, 0x04818658, 0x04601079,
0x050f80ff, 0x073fa00a, 0x0600003d, 0x07f00000,
0x06600a79, 0x050f80ff, 0x053fa80a, 0x06000010,
- 0x02800597, 0x0046e07a, 0x02800592, 0x06009008,
- 0x05308000, 0x05004000, 0x06a006b3, 0x02800597,
- 0x0760187b, 0x050f80ff, 0x032fa011, 0x070ff000,
+ 0x038006b7, 0x0046e07a, 0x03800690, 0x06009008,
+ 0x05308000, 0x05004000, 0x04a007df, 0x038006b7,
+ 0x07601e7b, 0x050f80ff, 0x032fa011, 0x070ff000,
0x04500401, 0x030460ff, 0x060ff025, 0x00540446,
- 0x0682057f, 0x030460ff, 0x052e40c0, 0x04092046,
- 0x0349a0e4, 0x0481857c, 0x003e4080, 0x0700c000,
- 0x02800580, 0x003e4080, 0x05008000, 0x02800580,
- 0x04092046, 0x070ff03a, 0x01868584, 0x013e4000,
- 0x07000003, 0x04a002ad, 0x06600679, 0x050f80ff,
+ 0x06820673, 0x030460ff, 0x052e40c0, 0x04092046,
+ 0x0349a0e4, 0x04818670, 0x003e4080, 0x0700c000,
+ 0x03800674, 0x003e4080, 0x05008000, 0x03800674,
+ 0x04092046, 0x070ff03a, 0x01868678, 0x013e4000,
+ 0x07000003, 0x06a0035e, 0x06600679, 0x050f80ff,
0x00201007, 0x012fa80a, 0x0046047a, 0x034630ff,
0x050020ff, 0x06003051, 0x04601079, 0x050f80ff,
- 0x073fa012, 0x06000001, 0x02800597, 0x07a006a6,
- 0x05308000, 0x03020000, 0x06009079, 0x06a006b3,
+ 0x073fa012, 0x06000001, 0x07f00000, 0x06602e79,
+ 0x050f80ff, 0x032fa009, 0x030ef000, 0x0286068f,
+ 0x06009079, 0x05308000, 0x03016000, 0x04a007df,
+ 0x038006b7, 0x0049407a, 0x078106b2, 0x079c06b1,
+ 0x04008079, 0x04a007f1, 0x018686b1, 0x06600679,
+ 0x050f80ff, 0x063fa029, 0x06000001, 0x0349f003,
+ 0x058186b1, 0x07780006, 0x07ffff00, 0x037c00ff,
+ 0x07000600, 0x058186b1, 0x0079fe02, 0x070000ff,
+ 0x056c08ff, 0x058186b1, 0x0246007a, 0x0400707a,
+ 0x06600679, 0x050f80ff, 0x04302001, 0x04000410,
+ 0x05303442, 0x02080002, 0x063fa032, 0x06000001,
+ 0x020e3079, 0x038006b7, 0x0447407a, 0x05a007d2,
+ 0x05308000, 0x03020000, 0x06009079, 0x04a007df,
0x033e6a00, 0x0700aa0a, 0x02079051, 0x03800014,
0x06605679, 0x050f80ff, 0x032fa009, 0x070ff000,
- 0x038605b4, 0x057dfeff, 0x07ffffff, 0x078105b4,
+ 0x038606d4, 0x057dfeff, 0x07ffffff, 0x078106d4,
0x050f8000, 0x012fa811, 0x0079fe02, 0x070000ff,
- 0x077d66ff, 0x060000dc, 0x058185b4, 0x060ff001,
- 0x008685b5, 0x064b0002, 0x06420002, 0x060ff002,
+ 0x077d66ff, 0x060000dc, 0x058186d4, 0x060ff001,
+ 0x008686d5, 0x064b0002, 0x06420002, 0x060ff002,
0x05500400, 0x050f80ff, 0x05004084, 0x073fa00a,
0x06000002, 0x07c00000, 0x04600201, 0x050f80ff,
0x073fa009, 0x06000001, 0x0079fe02, 0x070000ff,
- 0x077d72ff, 0x070000dd, 0x058185b4, 0x064b0002,
- 0x06420002, 0x06000001, 0x028005ae, 0x0605004c,
- 0x038005c6, 0x069305c2, 0x07a006ac, 0x054bc450,
- 0x078105c9, 0x03d005ca, 0x038005c9, 0x028005da,
- 0x028005dc, 0x02800668, 0x0380067b, 0x028005e9,
- 0x028005dc, 0x02800632, 0x028005da, 0x02800683,
- 0x0280067f, 0x028005da, 0x02800686, 0x0280069b,
- 0x02800654, 0x028005da, 0x028005da, 0x022095da,
- 0x038006bb, 0x073c3fff, 0x0700000f, 0x0379ff50,
- 0x070fffff, 0x060ff079, 0x055c0450, 0x07810678,
- 0x002fb008, 0x060ff079, 0x055c0450, 0x07810677,
- 0x06a0069e, 0x02800670, 0x0179fe50, 0x070fffff,
- 0x070050ff, 0x060ff079, 0x055c0405, 0x078105f3,
- 0x002fb008, 0x060ff079, 0x055c0405, 0x05818674,
+ 0x077d72ff, 0x070000dd, 0x058186d4, 0x064b0002,
+ 0x06420002, 0x06000001, 0x028006ce, 0x0605004c,
+ 0x028006e6, 0x079306e2, 0x05a007d8, 0x054bc450,
+ 0x068106e9, 0x02d006ea, 0x028006e9, 0x038006fa,
+ 0x038006fc, 0x0080078c, 0x0180079f, 0x01800709,
+ 0x038006fc, 0x01800756, 0x038006fa, 0x008007a7,
+ 0x018007a3, 0x038006fa, 0x018007aa, 0x008007c7,
+ 0x01800778, 0x038006fa, 0x038006fa, 0x032096fa,
+ 0x018007e7, 0x073c3fff, 0x0700000f, 0x0379ff50,
+ 0x070fffff, 0x060ff079, 0x055c0450, 0x0581079c,
+ 0x002fb008, 0x060ff079, 0x055c0450, 0x0481079b,
+ 0x05a007ca, 0x00800794, 0x0179fe50, 0x070fffff,
+ 0x070050ff, 0x060ff079, 0x055c0405, 0x04810713,
+ 0x002fb008, 0x060ff079, 0x055c0405, 0x06818798,
0x073c3fff, 0x0700000f, 0x070ff087, 0x017980ff,
- 0x0600f507, 0x04818602, 0x02203040, 0x05002087,
- 0x0049d002, 0x04818602, 0x002fb008, 0x07006087,
- 0x002fb008, 0x0149d006, 0x0681062c, 0x06930607,
+ 0x0600f507, 0x07818722, 0x02203040, 0x05002087,
+ 0x0049d002, 0x07818722, 0x002fb008, 0x07006087,
+ 0x002fb008, 0x0149d006, 0x05810750, 0x05930727,
0x01257000, 0x052e4003, 0x072e5030, 0x0304c050,
- 0x02400057, 0x06740057, 0x06000004, 0x0682001a,
- 0x004940e6, 0x00a18910, 0x0049107a, 0x00a1859b,
+ 0x02400057, 0x06740057, 0x06000004, 0x0782001b,
+ 0x004940e6, 0x01a18a72, 0x0049107a, 0x01a186bb,
0x04002083, 0x07003084, 0x04004085, 0x04602679,
- 0x050f80ff, 0x063fa01a, 0x06000001, 0x07a006a6,
- 0x04a007a2, 0x033e6a00, 0x0700aa0a, 0x062e5020,
- 0x04a007d0, 0x02798102, 0x070000ff, 0x007c8002,
- 0x07000055, 0x06810629, 0x072e50c0, 0x0648a002,
- 0x06810629, 0x078d0624, 0x03386006, 0x03010000,
+ 0x0049b07a, 0x05810736, 0x04602670, 0x050f80ff,
+ 0x063fa01a, 0x06000001, 0x05a007d2, 0x05a008de,
+ 0x033e6a00, 0x0700aa0a, 0x062e5020, 0x07a0090c,
+ 0x02798102, 0x070000ff, 0x007c8002, 0x07000055,
+ 0x0581074d, 0x072e50c0, 0x0648a002, 0x0581074d,
+ 0x040fd002, 0x058d0748, 0x03386006, 0x03010000,
0x033e6000, 0x0700000c, 0x003e4002, 0x07000a00,
- 0x03800599, 0x07420003, 0x058185fa, 0x00798002,
- 0x0600f507, 0x04818602, 0x0280060b, 0x07930639,
+ 0x028006b9, 0x07420003, 0x0681871a, 0x00798002,
+ 0x0600f507, 0x07818722, 0x0180072b, 0x0493075d,
0x01257000, 0x073c3fff, 0x0700000f, 0x052e4003,
0x072e5030, 0x0304c050, 0x067800e6, 0x07000041,
- 0x0681063e, 0x04a007ab, 0x04818649, 0x002fb008,
- 0x067800e6, 0x07000041, 0x07810644, 0x04a007ab,
- 0x04818649, 0x062e5020, 0x003e4002, 0x07000a00,
+ 0x04810762, 0x05a008e7, 0x0681876d, 0x002fb008,
+ 0x067800e6, 0x07000041, 0x04810768, 0x05a008e7,
+ 0x0681876d, 0x062e5020, 0x003e4002, 0x07000a00,
0x03e00000, 0x03800014, 0x06740057, 0x07000018,
- 0x0682001a, 0x04a007a2, 0x033e6a00, 0x0700aa0a,
- 0x002fb008, 0x04a007a2, 0x033e6a00, 0x0700aa0a,
- 0x03800644, 0x0379ff50, 0x070fffff, 0x060ff079,
- 0x055c0450, 0x0581865a, 0x0245507a, 0x002fb008,
- 0x060ff079, 0x055c0450, 0x0581865f, 0x0245507a,
+ 0x0782001b, 0x05a008de, 0x033e6a00, 0x0700aa0a,
+ 0x002fb008, 0x05a008de, 0x033e6a00, 0x0700aa0a,
+ 0x00800768, 0x0379ff50, 0x070fffff, 0x060ff079,
+ 0x055c0450, 0x0781877e, 0x0245507a, 0x002fb008,
+ 0x060ff079, 0x055c0450, 0x06818783, 0x0245507a,
0x002fb008, 0x05601050, 0x050f80ff, 0x012fa809,
0x02455001, 0x05601050, 0x050f80ff, 0x012fa80a,
- 0x03800671, 0x05958678, 0x0179fe50, 0x070fffff,
- 0x045c042f, 0x05818678, 0x0202f051, 0x042e4020,
- 0x03800671, 0x002fb008, 0x003e4002, 0x07000a00,
- 0x0280001a, 0x05938677, 0x062e5020, 0x042e4002,
- 0x002fb008, 0x013e4000, 0x05000e00, 0x0280001a,
- 0x0179fe50, 0x070fffff, 0x010210ff, 0x0280001a,
- 0x0179fe50, 0x070fffff, 0x050340ff, 0x03800671,
- 0x023e5008, 0x05000800, 0x0280001a, 0x0179fe50,
+ 0x01800795, 0x0795879c, 0x0179fe50, 0x070fffff,
+ 0x045c042f, 0x0781879c, 0x0202f051, 0x042e4020,
+ 0x01800795, 0x002fb008, 0x003e4002, 0x07000a00,
+ 0x0380001b, 0x0693879b, 0x062e5020, 0x042e4002,
+ 0x002fb008, 0x013e4000, 0x05000e00, 0x0380001b,
+ 0x0179fe50, 0x070fffff, 0x010210ff, 0x0380001b,
+ 0x0179fe50, 0x070fffff, 0x050340ff, 0x01800795,
+ 0x023e5008, 0x05000800, 0x0380001b, 0x0179fe50,
0x070fffff, 0x0102e0ff, 0x05602c2e, 0x050f80ff,
0x05222000, 0x07223000, 0x05224000, 0x07225000,
0x07226000, 0x05227000, 0x05228000, 0x07229000,
0x0722a000, 0x0522b000, 0x063fa051, 0x07000011,
- 0x0202c026, 0x0522d000, 0x052e400c, 0x0280001a,
- 0x030430d4, 0x062e5008, 0x018001d2, 0x05601050,
- 0x050f80ff, 0x032fa009, 0x03460000, 0x038006a9,
- 0x0246007a, 0x0045207a, 0x028006a7, 0x0246007a,
+ 0x0202c026, 0x0522d000, 0x052e400c, 0x0560402e,
+ 0x050f80ff, 0x032fa021, 0x04032002, 0x07033003,
+ 0x07420000, 0x07036000, 0x0403b001, 0x0380001b,
+ 0x030430d4, 0x062e5008, 0x00800279, 0x05601050,
+ 0x050f80ff, 0x032fa009, 0x03460000, 0x008007d5,
+ 0x0246007a, 0x0045207a, 0x008007d3, 0x0246007a,
0x0600007a, 0x04601079, 0x050f80ff, 0x032fa00a,
- 0x07c00000, 0x019286ac, 0x070500e1, 0x07c00000,
- 0x0245f008, 0x068406b0, 0x020e0008, 0x07c00000,
- 0x070ff009, 0x065a0008, 0x068406b5, 0x020e0008,
- 0x07c00000, 0x078406b8, 0x020e0008, 0x07c00000,
- 0x05308000, 0x0500d000, 0x06a006b3, 0x07a006c0,
+ 0x07c00000, 0x039287d8, 0x070500e1, 0x07c00000,
+ 0x0245f008, 0x048407dc, 0x020e0008, 0x07c00000,
+ 0x070ff009, 0x065a0008, 0x058407e1, 0x020e0008,
+ 0x07c00000, 0x058407e4, 0x020e0008, 0x07c00000,
+ 0x05308000, 0x0500d000, 0x04a007df, 0x04a007ec,
0x03800014, 0x052e4300, 0x072e500c, 0x073c3fff,
0x0700000f, 0x07c00000, 0x04602608, 0x050f80ff,
- 0x032fa011, 0x076a0000, 0x048186ce, 0x066a0001,
- 0x068106ce, 0x06006051, 0x07c00000, 0x02206001,
- 0x07c00000, 0x0678007a, 0x06000020, 0x058186d8,
- 0x0049107a, 0x078106d8, 0x073c3fff, 0x0700000f,
- 0x02800537, 0x040fd079, 0x0648307a, 0x078106dd,
- 0x05a00812, 0x038006e2, 0x07a006a3, 0x05308000,
- 0x05001000, 0x06009079, 0x06a006b3, 0x078d06e2,
- 0x033e6a00, 0x0600aa0e, 0x02079051, 0x03386006,
- 0x03010000, 0x03800014, 0x052e6200, 0x0648307a,
- 0x078106ee, 0x05a00812, 0x0080078a, 0x07a006a3,
- 0x05308000, 0x05001000, 0x06009079, 0x06a006b3,
- 0x0080078a, 0x050010ff, 0x0448b07a, 0x04810702,
- 0x0049107a, 0x04810702, 0x078d06f9, 0x04604679,
- 0x050f80ff, 0x032fa009, 0x03680600, 0x056c02ff,
- 0x06818702, 0x046c1001, 0x04810704, 0x056a02ff,
- 0x07c00000, 0x04a00707, 0x075c00ff, 0x07c00000,
- 0x048d0707, 0x060ff07c, 0x070ff07d, 0x070ff07e,
- 0x060ff07f, 0x060ff080, 0x070ff081, 0x070ff082,
- 0x060ff083, 0x070ff084, 0x060ff085, 0x0338600c,
- 0x03010000, 0x038a8714, 0x048d0715, 0x03386000,
- 0x03020000, 0x07c00000, 0x052e6200, 0x018004e8,
- 0x0648307a, 0x06818207, 0x07a006a6, 0x0120971b,
- 0x038006bb, 0x04002089, 0x04780102, 0x07f00000,
- 0x05001088, 0x04740101, 0x03100000, 0x04780101,
- 0x07f00000, 0x060ff002, 0x045c0401, 0x07818735,
- 0x00088001, 0x033e6000, 0x070000c0, 0x0220901a,
- 0x05308000, 0x01012000, 0x06a006b3, 0x00800786,
- 0x01209733, 0x038006bb, 0x01209735, 0x0180021e,
- 0x040fd075, 0x040fd07a, 0x040fd079, 0x0648307a,
- 0x04810740, 0x06780075, 0x06000007, 0x0781874b,
- 0x05a00812, 0x06486075, 0x07818205, 0x02490075,
- 0x0681821a, 0x04487075, 0x07818753, 0x0448b07a,
- 0x0481074a, 0x00492075, 0x07818766, 0x0080075e,
- 0x05308000, 0x03010000, 0x06009079, 0x06a006b3,
- 0x03800014, 0x0448e0e6, 0x068184b6, 0x01800203,
- 0x0648307a, 0x06818786, 0x004940e6, 0x00a18910,
- 0x05308000, 0x0500e000, 0x06009079, 0x06a006b3,
- 0x04008089, 0x07a006b8, 0x00800786, 0x07a006a3,
- 0x05308000, 0x0700f000, 0x06009079, 0x07000088,
- 0x05a0076f, 0x06a006b3, 0x03800014, 0x004940e6,
- 0x00a18910, 0x05308000, 0x01011000, 0x06009079,
- 0x07000088, 0x05a0076f, 0x06a006b3, 0x03800014,
- 0x03386000, 0x07030000, 0x07f00000, 0x058d0772,
- 0x033e6a00, 0x0600aa0e, 0x02079051, 0x0448b075,
- 0x0581077d, 0x02493075, 0x0581077d, 0x05301005,
- 0x03010000, 0x0080077f, 0x05301006, 0x03010000,
- 0x05002087, 0x06485002, 0x0681877f, 0x0744c000,
- 0x01088000, 0x02086001, 0x07c00000, 0x05001088,
- 0x05a00799, 0x0644c001, 0x00088001, 0x033e6a00,
- 0x0600aa0e, 0x004920e6, 0x0681878f, 0x02079051,
- 0x048d078f, 0x060ff089, 0x034990ff, 0x05810796,
+ 0x032fa011, 0x076a0000, 0x078187fa, 0x066a0001,
+ 0x058107fa, 0x06006051, 0x07c00000, 0x02206001,
+ 0x07c00000, 0x0678007a, 0x06000020, 0x06818804,
+ 0x0049107a, 0x04810804, 0x073c3fff, 0x0700000f,
+ 0x02800626, 0x040fd079, 0x0648307a, 0x05810809,
+ 0x06a0096b, 0x0080080e, 0x05a007cf, 0x05308000,
+ 0x05001000, 0x06009079, 0x04a007df, 0x048d080e,
+ 0x040fd079, 0x033e6a00, 0x0600aa0e, 0x02079051,
+ 0x03386006, 0x03010000, 0x03800014, 0x052e6200,
+ 0x0648307a, 0x0581081b, 0x06a0096b, 0x018008c5,
+ 0x05a007cf, 0x05308000, 0x05001000, 0x06009079,
+ 0x04a007df, 0x018008c5, 0x050010ff, 0x0448b07a,
+ 0x0481082f, 0x0049107a, 0x0481082f, 0x048d0826,
+ 0x04604679, 0x050f80ff, 0x032fa009, 0x03680600,
+ 0x056c02ff, 0x0681882f, 0x046c1001, 0x04810831,
+ 0x056a02ff, 0x07c00000, 0x04a00834, 0x075c00ff,
+ 0x07c00000, 0x048d0834, 0x060ff07c, 0x070ff07d,
+ 0x070ff07e, 0x060ff07f, 0x060ff080, 0x070ff081,
+ 0x070ff082, 0x060ff083, 0x070ff084, 0x060ff085,
+ 0x0338600c, 0x03010000, 0x038a8841, 0x058d0842,
+ 0x03386000, 0x03020000, 0x07c00000, 0x06483075,
+ 0x0781884b, 0x0448d07a, 0x078187fc, 0x040fd079,
+ 0x052e6200, 0x038005d1, 0x0648307a, 0x068182b3,
+ 0x05a007d2, 0x0120984d, 0x018007e7, 0x04002089,
+ 0x04780102, 0x07f00000, 0x05001088, 0x04740101,
+ 0x03100000, 0x04780101, 0x07f00000, 0x060ff002,
+ 0x045c0401, 0x06818867, 0x00088001, 0x033e6000,
+ 0x070000c0, 0x0220901a, 0x05308000, 0x01012000,
+ 0x04a007df, 0x018008c0, 0x01209865, 0x018007e7,
+ 0x00209867, 0x018002ca, 0x040fd075, 0x040fd07a,
+ 0x040fd079, 0x0648307a, 0x05810874, 0x06780075,
+ 0x06000007, 0x07818881, 0x00494075, 0x07818874,
+ 0x06a0096b, 0x06486075, 0x078182b1, 0x00494075,
+ 0x06818894, 0x02490075, 0x078182c6, 0x04487075,
+ 0x06818889, 0x0448b07a, 0x04810880, 0x00492075,
+ 0x0781889f, 0x00800897, 0x05308000, 0x03010000,
+ 0x06009079, 0x04a007df, 0x03800014, 0x0448e0e6,
+ 0x0581859c, 0x018002af, 0x0648307a, 0x078188c0,
+ 0x004940e6, 0x01a18a72, 0x05308000, 0x0500e000,
+ 0x06009079, 0x04a007df, 0x04008089, 0x05a007e4,
+ 0x018008c0, 0x00208007, 0x05a007e4, 0x03800014,
+ 0x05a007cf, 0x05308000, 0x0700f000, 0x06009079,
+ 0x07000088, 0x04a008a8, 0x04a007df, 0x03800014,
+ 0x004940e6, 0x01a18a72, 0x05308000, 0x01011000,
+ 0x06009079, 0x07000088, 0x04a008a8, 0x04a007df,
+ 0x03800014, 0x03386000, 0x07030000, 0x07f00000,
+ 0x048d08ab, 0x033e6a00, 0x0600aa0e, 0x02079051,
+ 0x040fd075, 0x0448b075, 0x058108b7, 0x02493075,
+ 0x058108b7, 0x05301005, 0x03010000, 0x008008b9,
+ 0x05301006, 0x03010000, 0x05002087, 0x06485002,
+ 0x068188b9, 0x0744c000, 0x01088000, 0x02086001,
+ 0x07c00000, 0x05001088, 0x040fd001, 0x04a008d5,
+ 0x0644c001, 0x00088001, 0x070fc0ff, 0x033e6a00,
+ 0x0600aa0e, 0x004920e6, 0x068188cb, 0x02079051,
+ 0x048d08cb, 0x060ff089, 0x034990ff, 0x058108d2,
0x03386005, 0x03010000, 0x03800014, 0x03386006,
- 0x03010000, 0x03800014, 0x058d0799, 0x03386000,
- 0x07030000, 0x07f00000, 0x048d079d, 0x070ff087,
- 0x074850ff, 0x0681879e, 0x07c00000, 0x048d07a2,
- 0x02386001, 0x07030000, 0x07f00000, 0x058d07a6,
- 0x070ff087, 0x074850ff, 0x068187a7, 0x07c00000,
- 0x05002087, 0x0049d002, 0x068187ba, 0x002fb008,
- 0x067800e6, 0x07000041, 0x002fb008, 0x068187ba,
- 0x04a007d0, 0x0448e002, 0x058107bd, 0x0648a002,
- 0x068187c7, 0x06486002, 0x048107c1, 0x02400057,
- 0x056a02ff, 0x07c00000, 0x04a007d0, 0x06788102,
- 0x06000004, 0x068187ba, 0x04002089, 0x070ff0d4,
- 0x045c0402, 0x077800ff, 0x07f00000, 0x068187ba,
- 0x00202010, 0x008c07ba, 0x07f00000, 0x06420002,
- 0x068187c8, 0x04a007a2, 0x033e6a00, 0x0700aa0a,
+ 0x03010000, 0x03800014, 0x048d08d5, 0x03386000,
+ 0x07030000, 0x07f00000, 0x048d08d9, 0x070ff087,
+ 0x074850ff, 0x068188da, 0x07c00000, 0x058d08de,
+ 0x02386001, 0x07030000, 0x07f00000, 0x058d08e2,
+ 0x070ff087, 0x074850ff, 0x068188e3, 0x07c00000,
+ 0x05002087, 0x0049d002, 0x078188f6, 0x002fb008,
+ 0x067800e6, 0x07000041, 0x002fb008, 0x078188f6,
+ 0x07a0090c, 0x0448e002, 0x058108f9, 0x0648a002,
+ 0x05818903, 0x06486002, 0x048108fd, 0x02400057,
+ 0x056a02ff, 0x07c00000, 0x07a0090c, 0x06788102,
+ 0x06000004, 0x078188f6, 0x04002089, 0x070ff0d4,
+ 0x045c0402, 0x077800ff, 0x07f00000, 0x078188f6,
+ 0x00202010, 0x018c08f6, 0x07f00000, 0x06420002,
+ 0x04818904, 0x05a008de, 0x033e6a00, 0x0700aa0a,
0x07c00000, 0x07f00000, 0x060ff0a2, 0x045a0202,
- 0x060ff0a2, 0x045c0402, 0x078187d1, 0x07c00000,
- 0x04a002ad, 0x03495047, 0x048107dc, 0x0320901d,
- 0x0080080e, 0x0220901f, 0x0080080e, 0x014980e4,
+ 0x060ff0a2, 0x045c0402, 0x0481890d, 0x07c00000,
+ 0x06a0035e, 0x03495047, 0x07810918, 0x0320901d,
+ 0x0280094a, 0x0220901f, 0x0280094a, 0x014980e4,
0x05818014, 0x013e4000, 0x07003000, 0x05600e35,
- 0x050f80ff, 0x04a0083d, 0x01208003, 0x07a006b8,
- 0x018007f6, 0x03209009, 0x0080080e, 0x03209011,
- 0x0080080e, 0x02209007, 0x0080080e, 0x03209003,
- 0x0080080e, 0x00497043, 0x068187ec, 0x00494043,
- 0x058107e8, 0x02209001, 0x0080080e, 0x0220900d,
- 0x0080080e, 0x0320900f, 0x0080080e, 0x03493000,
- 0x058107ff, 0x027c0045, 0x070a0000, 0x0581080a,
- 0x0220900b, 0x0080080e, 0x0320900c, 0x00800804,
- 0x02209013, 0x05308000, 0x01012000, 0x06a006b3,
- 0x008001df, 0x03209005, 0x0080080e, 0x072e500c,
- 0x00208002, 0x07a006b8, 0x03800014, 0x05308000,
- 0x01012000, 0x06a006b3, 0x018001d2, 0x04a002ad,
- 0x070ff02e, 0x045c0479, 0x0481081a, 0x05308000,
- 0x05008000, 0x06009079, 0x06a006b3, 0x07c00000,
- 0x053f2000, 0x0700c000, 0x039d881b, 0x07c00000,
- 0x033e5000, 0x0700f000, 0x01800824, 0x033e5000,
- 0x05008000, 0x024960e5, 0x0581082e, 0x0249a0e5,
- 0x0481082a, 0x0302f041, 0x052e4030, 0x033e5000,
- 0x0700a000, 0x072e500c, 0x03800014, 0x050f8035,
- 0x04a0083d, 0x00017008, 0x01018009, 0x033e5000,
- 0x07000c00, 0x05308000, 0x07006000, 0x07009041,
- 0x06a006b3, 0x05008017, 0x07009018, 0x0249a0e5,
- 0x07818178, 0x03800066, 0x072d6000, 0x07f00000,
- 0x07f00000, 0x000110d0, 0x010120d1, 0x062d6001,
- 0x07f00000, 0x07f00000, 0x020130d0, 0x010140d1,
- 0x062d6002, 0x010170d4, 0x07f00000, 0x020150d0,
- 0x030160d1, 0x053fa83a, 0x06000008, 0x07c00000,
- 0x07600c41, 0x050f80ff, 0x01202003, 0x073fa00a,
- 0x06000001, 0x07f00000, 0x05601041, 0x050f80ff,
- 0x032fa071, 0x00800108, 0x002fb001, 0x0180085c,
- 0x012fb000, 0x02386001, 0x030e0000, 0x03076087,
- 0x059f085f, 0x03386000, 0x03020000, 0x00498076,
- 0x078188b1, 0x00497076, 0x0681886b, 0x04482076,
- 0x0781887d, 0x02496076, 0x078188a0, 0x008008ae,
- 0x075a00ff, 0x059f086c, 0x03386000, 0x03010000,
- 0x033e6000, 0x07003000, 0x00492076, 0x048108ae,
- 0x00491076, 0x068188ae, 0x02490076, 0x068188ae,
- 0x0249a0e6, 0x0581087b, 0x07a0091d, 0x018008a5,
- 0x0245f076, 0x008008ae, 0x004980e6, 0x058108b7,
- 0x070ff074, 0x0086088f, 0x070ff072, 0x05500471,
- 0x050f80ff, 0x002fa819, 0x049f0885, 0x02080001,
- 0x00081002, 0x01082003, 0x05a008e7, 0x018608b7,
- 0x04a008d6, 0x0249a0e6, 0x078188a5, 0x008008ae,
- 0x04a008d6, 0x033e6000, 0x07002200, 0x030ef003,
- 0x02868897, 0x033e6000, 0x07002e00, 0x0045807a,
- 0x0249a0e6, 0x0481089b, 0x06a006a7, 0x018008a9,
- 0x0648c0e6, 0x048108ae, 0x03386000, 0x030e0000,
- 0x0180049a, 0x04a008d6, 0x030ef003, 0x038688a5,
- 0x070ff074, 0x00860894, 0x033e6000, 0x07002200,
- 0x0249a0e6, 0x048108ae, 0x03386000, 0x030e0000,
- 0x033e6000, 0x05008000, 0x03800522, 0x03386000,
- 0x030e0000, 0x03800028, 0x040fd079, 0x033e6000,
- 0x0500a200, 0x03386000, 0x030e0000, 0x0080075e,
- 0x012098b7, 0x038006bb, 0x02386001, 0x030e0000,
- 0x06604e79, 0x050f80ff, 0x032fa009, 0x03070000,
- 0x06600c70, 0x050f80ff, 0x053fa821, 0x06000038,
- 0x07f00000, 0x06601470, 0x050f80ff, 0x032fa021,
- 0x060ff002, 0x018608d4, 0x059f08c9, 0x03080000,
- 0x00081001, 0x00082002, 0x03083003, 0x070ff087,
- 0x033e6000, 0x07000300, 0x03386000, 0x030e0000,
- 0x07c00000, 0x0045807a, 0x018008d1, 0x06604e79,
- 0x050f80ff, 0x032fa009, 0x03070000, 0x06600c70,
- 0x050f80ff, 0x053fa822, 0x06000038, 0x059f08de,
- 0x06000080, 0x05001081, 0x05002082, 0x06003083,
- 0x06601470, 0x050f80ff, 0x032fa022, 0x07c00000,
- 0x07420074, 0x058108fc, 0x02400073, 0x060ff038,
- 0x00540473, 0x00d008fe, 0x05600272, 0x050f80ff,
- 0x032fa009, 0x030ef000, 0x0286090e, 0x01072000,
- 0x07600a00, 0x050f80ff, 0x032fa009, 0x03681e00,
- 0x076c14ff, 0x0481890e, 0x02073038, 0x05271006,
- 0x07c00000, 0x022ff001, 0x008008fb, 0x02800904,
- 0x03800906, 0x02800908, 0x0380090a, 0x0380090c,
- 0x018008ed, 0x05271006, 0x008008fb, 0x05271009,
- 0x008008fb, 0x0527100c, 0x008008fb, 0x0527100f,
- 0x008008fb, 0x05271012, 0x008008fb, 0x032ff000,
- 0x008008fb, 0x02386001, 0x030e0000, 0x05001087,
- 0x069f0913, 0x00494001, 0x06810919, 0x03386000,
- 0x030e0000, 0x07c00000, 0x03386000, 0x03010000,
- 0x033e6000, 0x07003000, 0x00208080, 0x05001087,
- 0x00494001, 0x04818925, 0x00497001, 0x04818938,
- 0x06420008, 0x0581891e, 0x00208070, 0x05001087,
- 0x00494001, 0x0581892b, 0x0760031e, 0x0380091e,
- 0x01208060, 0x05001087, 0x00494001, 0x04818931,
- 0x0760031d, 0x0380091e, 0x04a008d6, 0x033e6000,
- 0x07002200, 0x069f0934, 0x03386000, 0x030e0000,
- 0x07c00000, 0x04a008d6, 0x02800934, 0x9fdf5eba,
- 0x02800004, 0x00000000, 0x00008000, 0x000005a0,
- 0x033d0aaa, 0x070aaaaa, 0x013d1aaa, 0x070aaaaa,
- 0x050f801e, 0x012fa8d1, 0x050f801e, 0x043fa889,
- 0x0700000f, 0x03200005, 0x07420000, 0x050fb000,
- 0x050f801e, 0x073fa011, 0x06000038, 0x050f801e,
- 0x053fa859, 0x0700003a, 0x050fe000, 0x0481800e,
- 0x07840024, 0x0595801d, 0x030e0011, 0x072e4200,
- 0x03800018, 0x02920040, 0x068b0023, 0x028a0064,
- 0x0778aae7, 0x06000001, 0x02a18419, 0x079a0053,
- 0x05908018, 0x010170e1, 0x01640817, 0x0482803d,
- 0x070ff017, 0x02d0002a, 0x02800032, 0x02800034,
- 0x02800037, 0x0380003a, 0x0280003d, 0x0280003d,
- 0x0280003d, 0x0280003d, 0x03e00000, 0x03800018,
- 0x04908034, 0x030160e1, 0x0380003f, 0x04908037,
- 0x030150e1, 0x0380003f, 0x0590803a, 0x010140e1,
- 0x0380003f, 0x060fc013, 0x06a00598, 0x03800018,
- 0x014940e4, 0x00a18043, 0x03800024, 0x02681e0d,
- 0x050fb0ff, 0x04600875, 0x050f80ff, 0x053fa809,
- 0x06000001, 0x05488003, 0x04818052, 0x0400800d,
- 0x0120d000, 0x013e4000, 0x05000200, 0x06009075,
- 0x04002076, 0x07a00584, 0x07c00000, 0x000170e3,
- 0x050fe017, 0x05878059, 0x0547f417, 0x0301f0ff,
- 0x00800229, 0x054bc417, 0x050fb0ff, 0x03640aff,
- 0x04828061, 0x0179fe17, 0x070fffff, 0x030750ff,
- 0x0280037c, 0x050fd017, 0x06a00598, 0x0380001d,
- 0x00018098, 0x07480018, 0x04818079, 0x05481018,
- 0x04818076, 0x05482018, 0x04818073, 0x07483018,
- 0x04818070, 0x002fb004, 0x030190cc, 0x0380007b,
- 0x012fb003, 0x020190cb, 0x0380007b, 0x002fb002,
- 0x030190ca, 0x0380007b, 0x002fb001, 0x030190c9,
- 0x0380007b, 0x012fb000, 0x020190c8, 0x00017086,
- 0x01491017, 0x07810084, 0x04a00194, 0x07781817,
- 0x05000200, 0x037c00ff, 0x05000200, 0x05810122,
- 0x078b0084, 0x03385000, 0x03020000, 0x07780017,
- 0x0043dc07, 0x068181d6, 0x056c0478, 0x0481013b,
- 0x056c0278, 0x07810090, 0x05278000, 0x01800122,
- 0x05278000, 0x07483017, 0x04810125, 0x05482017,
- 0x0481012c, 0x0448b076, 0x06818110, 0x06601875,
- 0x050f80ff, 0x073fa022, 0x0600003e, 0x06000080,
- 0x05001081, 0x05002082, 0x06003083, 0x05004084,
- 0x04602075, 0x050f80ff, 0x022fa02a, 0x04487076,
- 0x0581010f, 0x04604675, 0x050f80ff, 0x032fa009,
- 0x03680600, 0x050010ff, 0x056c02ff, 0x058180e7,
- 0x07000090, 0x074b0000, 0x050fe000, 0x038600e7,
- 0x0560027b, 0x050f80ff, 0x032fa009, 0x07f00000,
- 0x05600e00, 0x050f80ff, 0x032fa009, 0x07f00000,
- 0x074b0000, 0x070ff08d, 0x0179feff, 0x070000ff,
- 0x055c0400, 0x078100e7, 0x070ff017, 0x037a00ff,
- 0x05000400, 0x010170ff, 0x04604075, 0x050f80ff,
- 0x034a8400, 0x034a8800, 0x05780100, 0x070000ff,
- 0x055a0400, 0x074b0a00, 0x077bff00, 0x070000ff,
- 0x032fa00a, 0x07f00000, 0x04603e75, 0x050f80ff,
- 0x07300fff, 0x070fffff, 0x032fa00a, 0x07f00000,
- 0x04604a75, 0x050f80ff, 0x0700008d, 0x017a0100,
- 0x07ffff00, 0x032fa00a, 0x07f00000, 0x04604c75,
- 0x050f80ff, 0x07300fff, 0x070fffff, 0x032fa00a,
- 0x07f00000, 0x06604275, 0x050f80ff, 0x06000013,
- 0x032fa00a, 0x0245a076, 0x018001de, 0x066c0001,
- 0x07818109, 0x05482017, 0x05810109, 0x070ff09a,
- 0x017910ff, 0x03088888, 0x057d10ff, 0x03088888,
- 0x05810109, 0x070ff09a, 0x045a0201, 0x070ff09a,
- 0x045c0401, 0x048180f1, 0x050020ff, 0x060000fb,
- 0x06483001, 0x048180fd, 0x00680e01, 0x055c0400,
- 0x04810102, 0x004a4001, 0x02400002, 0x046c0e02,
- 0x048180f8, 0x01800109, 0x040fd002, 0x052e400c,
- 0x040080fb, 0x046a6108, 0x06009075, 0x04002076,
- 0x07a00584, 0x04603e75, 0x050f80ff, 0x053fa842,
- 0x06000045, 0x048b010d, 0x02085013, 0x05278000,
- 0x02075013, 0x060ff0fb, 0x00d00113, 0x01800118,
- 0x0080011a, 0x0080011c, 0x0180011e, 0x00800120,
- 0x062d0020, 0x01800122, 0x062d0080, 0x01800122,
- 0x052d0200, 0x01800122, 0x052d0800, 0x01800122,
- 0x033d0000, 0x06000002, 0x03920024, 0x0584801d,
- 0x02800023, 0x040fe07f, 0x00860134, 0x04a00154,
- 0x01920122, 0x040fe07f, 0x06a68154, 0x01800122,
- 0x0760127b, 0x050f80ff, 0x032fa009, 0x0744f000,
- 0x0760127b, 0x050f80ff, 0x032fa00a, 0x02800097,
- 0x052e400c, 0x040080fb, 0x046aa108, 0x06009075,
- 0x04002076, 0x07a00584, 0x01800122, 0x04278001,
- 0x05482017, 0x05810148, 0x048b013e, 0x060ff086,
- 0x0349f0ff, 0x0581807b, 0x07483017, 0x04810145,
- 0x050fd0ff, 0x040fe07f, 0x06a68154, 0x01800122,
- 0x05004084, 0x04a0020b, 0x01920122, 0x070ff07d,
- 0x0450047c, 0x056004ff, 0x050f80ff, 0x032fa009,
- 0x070ff000, 0x00540479, 0x030790ff, 0x0080012c,
- 0x04487076, 0x0581015c, 0x04605875, 0x050f80ff,
- 0x032fa009, 0x060ff079, 0x01540400, 0x0080015e,
- 0x060ff079, 0x0054047a, 0x0582018d, 0x0581018d,
- 0x070ff07d, 0x0450047c, 0x050f80ff, 0x002fa819,
- 0x048b0164, 0x02080001, 0x00081002, 0x01082003,
- 0x048b0168, 0x04487076, 0x0481016e, 0x02385001,
- 0x03010000, 0x00800170, 0x03385000, 0x03010000,
- 0x03400078, 0x070ff003, 0x04500479, 0x030790ff,
- 0x0340007e, 0x0642007f, 0x0581018d, 0x070ff07e,
- 0x050f80ff, 0x032fa009, 0x050fe000, 0x0286818c,
- 0x070ff07d, 0x056002ff, 0x050f80ff, 0x032fa009,
- 0x0107d000, 0x0186018e, 0x07600a7d, 0x050f80ff,
- 0x032fa009, 0x03681e00, 0x0550041b, 0x050f80ff,
- 0x032fa009, 0x0107e000, 0x070ff07e, 0x01800178,
- 0x0307c000, 0x07c00000, 0x052e400c, 0x040080fb,
- 0x046aa108, 0x06009075, 0x04002076, 0x03800584,
- 0x060ff075, 0x018601d4, 0x060ff073, 0x00540419,
- 0x048201ab, 0x058101b7, 0x050010ff, 0x00202010,
- 0x00642001, 0x0782819f, 0x04002001, 0x040f8073,
- 0x024a3c02, 0x017a02ff, 0x06000c98, 0x070fa0ff,
- 0x060ff002, 0x06500073, 0x03610072, 0x045c0473,
- 0x068181ba, 0x03073072, 0x008001ba, 0x036100ff,
- 0x050010ff, 0x03610072, 0x00540473, 0x057dfeff,
- 0x07ffffff, 0x01400203, 0x00202010, 0x01642003,
- 0x0782819f, 0x05002003, 0x0180019f, 0x04002013,
- 0x04001013, 0x01294000, 0x07480077, 0x068181d5,
- 0x06604e75, 0x050f80ff, 0x053fa809, 0x06000001,
- 0x07f00000, 0x05601c03, 0x050f80ff, 0x053fa809,
- 0x06000001, 0x05481003, 0x078181d1, 0x060ff002,
- 0x04500401, 0x016480ff, 0x068281d5, 0x07440077,
- 0x040080fb, 0x006b6108, 0x06009075, 0x06a0057f,
- 0x008001d5, 0x060ff002, 0x045c0401, 0x068181d5,
- 0x01294000, 0x07c00000, 0x040fd075, 0x050fd017,
- 0x060ff086, 0x077800ff, 0x07000060, 0x037c00ff,
- 0x07000060, 0x078181d8, 0x04487076, 0x058101f5,
- 0x07780017, 0x05000400, 0x058101f5, 0x06601875,
- 0x050f80ff, 0x073fa022, 0x0600003e, 0x0249a076,
- 0x078181ee, 0x048b01e9, 0x04603e75, 0x050f80ff,
- 0x053fa842, 0x06000045, 0x052e400c, 0x040080fb,
- 0x026b4108, 0x06009075, 0x04002076, 0x07a00584,
- 0x03800024, 0x06601875, 0x050f80ff, 0x073fa022,
- 0x0600003e, 0x052e400c, 0x04600875, 0x050f80ff,
- 0x053fa809, 0x06000001, 0x05488003, 0x05810205,
- 0x0400d0fb, 0x066a810d, 0x013e4000, 0x07000300,
- 0x03800024, 0x040080fb, 0x066a8108, 0x06009075,
- 0x04002076, 0x07a00584, 0x03800024, 0x0240007f,
- 0x0742007e, 0x050f807e, 0x032fa009, 0x050fe000,
- 0x02868225, 0x070ff07d, 0x055c047b, 0x0481021a,
- 0x0760007d, 0x050f80ff, 0x032fa009, 0x050fe000,
- 0x0286821a, 0x070ff07b, 0x0107d0ff, 0x07600a7d,
- 0x050f80ff, 0x032fa009, 0x03681e00, 0x0450041c,
- 0x0107e0ff, 0x050f80ff, 0x032fa009, 0x050fe000,
- 0x01860227, 0x0307c000, 0x07c00000, 0x040fd075,
- 0x02800598, 0x0460081f, 0x050f80ff, 0x032fa039,
- 0x01021000, 0x03020005, 0x01018006, 0x01683e21,
- 0x00d00231, 0x00800251, 0x0080027c, 0x01800299,
- 0x03800311, 0x01800255, 0x00800251, 0x00800251,
- 0x00800251, 0x00800251, 0x00800251, 0x00800251,
- 0x00800251, 0x00800251, 0x00800251, 0x0380032d,
- 0x00800251, 0x00800251, 0x00800251, 0x00800251,
- 0x00800251, 0x00800251, 0x00800251, 0x00800251,
- 0x00800251, 0x00800251, 0x00800251, 0x00800251,
- 0x00800251, 0x00800251, 0x00800251, 0x00800251,
- 0x00800251, 0x050fd0ff, 0x06a00598, 0x03800018,
- 0x0380001d, 0x01494021, 0x0481833e, 0x0400701f,
- 0x06a00370, 0x007a0101, 0x07060000, 0x07303000,
- 0x07008290, 0x03496021, 0x06818261, 0x06006013,
- 0x00800268, 0x02400010, 0x04810261, 0x06006010,
- 0x0660361f, 0x050f80ff, 0x073fa00a, 0x07000003,
- 0x072d0003, 0x029b8268, 0x010b1000, 0x000b2001,
+ 0x050f80ff, 0x07a00990, 0x01208003, 0x05a007e4,
+ 0x02800932, 0x03209009, 0x0280094a, 0x03209011,
+ 0x0280094a, 0x02209007, 0x0280094a, 0x03209003,
+ 0x0280094a, 0x00497043, 0x05818928, 0x00494043,
+ 0x07810924, 0x02209001, 0x0280094a, 0x0220900d,
+ 0x0280094a, 0x0320900f, 0x0280094a, 0x03493000,
+ 0x0681093b, 0x027c0045, 0x070a0000, 0x06810946,
+ 0x0220900b, 0x0280094a, 0x0320900c, 0x02800940,
+ 0x02209013, 0x05308000, 0x01012000, 0x04a007df,
+ 0x01800288, 0x03209005, 0x0280094a, 0x072e500c,
+ 0x00208002, 0x05a007e4, 0x03800014, 0x0349c0e4,
+ 0x06810967, 0x072d6000, 0x07f00000, 0x060000d0,
+ 0x0379ff00, 0x0700ffff, 0x04605232, 0x050f80ff,
+ 0x032fa00a, 0x070000d1, 0x0379ff00, 0x0700ffff,
+ 0x04605432, 0x050f80ff, 0x032fa00a, 0x062d6002,
+ 0x07f00000, 0x0204f0d0, 0x0079fe4f, 0x070000ff,
+ 0x074b0a00, 0x044b044f, 0x075a0000, 0x04600432,
+ 0x050f80ff, 0x032fa00a, 0x00041032, 0x03800044,
+ 0x05308000, 0x01012000, 0x04a007df, 0x00800279,
+ 0x06a0035e, 0x070ff02e, 0x045c0479, 0x06810973,
+ 0x05308000, 0x05008000, 0x06009079, 0x04a007df,
+ 0x07c00000, 0x053f2000, 0x0700c000, 0x019d8974,
+ 0x07c00000, 0x033e5000, 0x0700f000, 0x0280097f,
+ 0x004980e5, 0x0581807e, 0x033e5000, 0x05008000,
+ 0x050f8035, 0x07a00990, 0x00017008, 0x01018009,
+ 0x033e5000, 0x07000c00, 0x05308000, 0x07006000,
+ 0x07009041, 0x04a007df, 0x033e5000, 0x07003000,
+ 0x05008017, 0x07009018, 0x0249a0e5, 0x0681821f,
+ 0x0380007e, 0x06600052, 0x030d60ff, 0x07f00000,
+ 0x07f00000, 0x000110d0, 0x010120d1, 0x04600252,
+ 0x030d60ff, 0x07f00000, 0x07f00000, 0x020130d0,
+ 0x010140d1, 0x04600452, 0x030d60ff, 0x010170d4,
+ 0x07f00000, 0x020150d0, 0x030160d1, 0x053fa83a,
+ 0x06000008, 0x07c00000, 0x07600c41, 0x050f80ff,
+ 0x01202003, 0x073fa00a, 0x06000001, 0x07f00000,
+ 0x05601041, 0x050f80ff, 0x032fa071, 0x01800139,
+ 0x002fb001, 0x038009b2, 0x012fb000, 0x02386001,
+ 0x030e0000, 0x03076087, 0x069f09b5, 0x03386000,
+ 0x03020000, 0x00498076, 0x04818a07, 0x00497076,
+ 0x048189c1, 0x04482076, 0x048189d3, 0x02496076,
+ 0x058189f6, 0x02800a04, 0x075a00ff, 0x069f09c2,
+ 0x03386000, 0x03010000, 0x033e6000, 0x07003000,
+ 0x00492076, 0x06810a04, 0x00491076, 0x04818a04,
+ 0x02490076, 0x04818a04, 0x0249a0e6, 0x078109d1,
+ 0x06a00a7f, 0x028009fb, 0x0245f076, 0x02800a04,
+ 0x004980e6, 0x06810a0d, 0x070ff074, 0x028609e5,
+ 0x070ff072, 0x05500471, 0x050f80ff, 0x002fa819,
+ 0x079f09db, 0x02080001, 0x00081002, 0x01082003,
+ 0x06a00a49, 0x02860a0d, 0x06a00a2c, 0x0249a0e6,
+ 0x048189fb, 0x02800a04, 0x06a00a2c, 0x033e6000,
+ 0x07002200, 0x030ef003, 0x018689ed, 0x033e6000,
+ 0x07002e00, 0x0045807a, 0x0249a0e6, 0x068109f1,
+ 0x04a007d3, 0x038009ff, 0x0648c0e6, 0x06810a04,
+ 0x03386000, 0x030e0000, 0x02800580, 0x06a00a2c,
+ 0x030ef003, 0x008689fb, 0x070ff074, 0x028609ea,
+ 0x033e6000, 0x07002200, 0x0249a0e6, 0x06810a04,
+ 0x03386000, 0x030e0000, 0x033e6000, 0x05008000,
+ 0x03800611, 0x03386000, 0x030e0000, 0x02800029,
+ 0x040fd079, 0x033e6000, 0x0500a200, 0x03386000,
+ 0x030e0000, 0x00800897, 0x02209a0d, 0x018007e7,
+ 0x02386001, 0x030e0000, 0x06604e79, 0x050f80ff,
+ 0x032fa009, 0x03070000, 0x06601270, 0x050f80ff,
+ 0x053fa821, 0x06000038, 0x07f00000, 0x04601a70,
+ 0x050f80ff, 0x032fa021, 0x060ff002, 0x02860a2a,
+ 0x069f0a1f, 0x03080000, 0x00081001, 0x00082002,
+ 0x03083003, 0x070ff087, 0x033e6000, 0x07000300,
+ 0x03386000, 0x030e0000, 0x07c00000, 0x0045807a,
+ 0x03800a27, 0x06604e79, 0x050f80ff, 0x032fa009,
+ 0x03070000, 0x06601270, 0x050f80ff, 0x053fa822,
+ 0x06000038, 0x069f0a34, 0x070ff087, 0x0149d0ff,
+ 0x04818a40, 0x06000080, 0x05001081, 0x05002082,
+ 0x06003083, 0x04601a70, 0x050f80ff, 0x032fa022,
+ 0x07c00000, 0x0131ef00, 0x0700000f, 0x070ff087,
+ 0x0149d0ff, 0x06810a34, 0x0742001e, 0x05818a42,
+ 0x050fd0ff, 0x02800a40, 0x07420074, 0x06810a5e,
+ 0x02400073, 0x060ff038, 0x00540473, 0x03d00a60,
+ 0x05600272, 0x050f80ff, 0x032fa009, 0x030ef000,
+ 0x02860a70, 0x01072000, 0x05601000, 0x050f80ff,
+ 0x032fa009, 0x03681e00, 0x076c14ff, 0x04818a70,
+ 0x02073038, 0x05271009, 0x07c00000, 0x022ff001,
+ 0x02800a5d, 0x03800a66, 0x02800a68, 0x03800a6a,
+ 0x03800a6c, 0x02800a6e, 0x02800a4f, 0x05271009,
+ 0x02800a5d, 0x0527100c, 0x02800a5d, 0x0527100f,
+ 0x02800a5d, 0x05271012, 0x02800a5d, 0x04271015,
+ 0x02800a5d, 0x032ff000, 0x02800a5d, 0x02386001,
+ 0x030e0000, 0x05001087, 0x069f0a75, 0x00494001,
+ 0x07810a7b, 0x03386000, 0x030e0000, 0x07c00000,
+ 0x03386000, 0x03010000, 0x033e6000, 0x07003000,
+ 0x00208080, 0x0301a087, 0x0049401a, 0x04818a89,
+ 0x0049701a, 0x05818a9f, 0x06420008, 0x04818a80,
+ 0x0760031e, 0x00208080, 0x0049d01a, 0x07810a90,
+ 0x06420008, 0x04818a80, 0x0760031d, 0x00208080,
+ 0x02800a80, 0x00208070, 0x0301a087, 0x0049401a,
+ 0x06810a80, 0x01208060, 0x0301a087, 0x0049401a,
+ 0x06810a80, 0x06a00a2c, 0x033e6000, 0x07002200,
+ 0x069f0a9b, 0x03386000, 0x030e0000, 0x07c00000,
+ 0x06a00a2c, 0x02800a9b, 0xe2cab9fe, 0x02800004,
+ 0x00000000, 0x00008000, 0x00000703, 0x033d0aaa,
+ 0x070aaaaa, 0x013d1aaa, 0x070aaaaa, 0x050f801e,
+ 0x012fa8d1, 0x050f801e, 0x043fa889, 0x0700000f,
+ 0x03200005, 0x07420000, 0x050fb000, 0x050f801e,
+ 0x073fa011, 0x06000038, 0x050f801e, 0x053fa859,
+ 0x0700003a, 0x050fe000, 0x0481800e, 0x07840024,
+ 0x0595801d, 0x030e0011, 0x072e4200, 0x03800018,
+ 0x02920040, 0x068b0023, 0x028a0064, 0x0778aae7,
+ 0x06000001, 0x01a18536, 0x079a0053, 0x05908018,
+ 0x010170e1, 0x03640a17, 0x0482803d, 0x070ff017,
+ 0x02d0002a, 0x02800032, 0x02800034, 0x02800037,
+ 0x0380003a, 0x0280003d, 0x0280003d, 0x0280003d,
+ 0x0280003d, 0x03e00000, 0x03800018, 0x04908034,
+ 0x030160e1, 0x0380003f, 0x04908037, 0x030150e1,
+ 0x0380003f, 0x0590803a, 0x010140e1, 0x0380003f,
+ 0x060fc013, 0x06a006f4, 0x03800018, 0x014940e4,
+ 0x00a18043, 0x03800024, 0x02681e0d, 0x050fb0ff,
+ 0x04600875, 0x050f80ff, 0x053fa809, 0x06000001,
+ 0x05488003, 0x04818052, 0x0400800d, 0x0120d000,
+ 0x013e4000, 0x05000200, 0x06009075, 0x04002076,
+ 0x06a006e0, 0x07c00000, 0x000170e3, 0x050fe017,
+ 0x05878059, 0x0547f417, 0x0301f0ff, 0x01800235,
+ 0x054bc417, 0x050fb0ff, 0x03640aff, 0x04828061,
+ 0x0179fe17, 0x070fffff, 0x030750ff, 0x01800472,
+ 0x050fd017, 0x06a006f4, 0x0380001d, 0x00018098,
+ 0x07480018, 0x04818079, 0x05481018, 0x04818076,
+ 0x05482018, 0x04818073, 0x07483018, 0x04818070,
+ 0x002fb004, 0x030190cc, 0x0380007b, 0x012fb003,
+ 0x020190cb, 0x0380007b, 0x002fb002, 0x030190ca,
+ 0x0380007b, 0x002fb001, 0x030190c9, 0x0380007b,
+ 0x012fb000, 0x020190c8, 0x00017086, 0x01491017,
+ 0x07810084, 0x05a001a0, 0x07781817, 0x05000200,
+ 0x037c00ff, 0x05000200, 0x0581012e, 0x078b0084,
+ 0x03385000, 0x03020000, 0x07780017, 0x0043dc07,
+ 0x078181e2, 0x056c0478, 0x05810147, 0x056c0278,
+ 0x07810090, 0x05278000, 0x0180012e, 0x05278000,
+ 0x07483017, 0x04810131, 0x05482017, 0x04810138,
+ 0x0448b076, 0x0681811c, 0x06601875, 0x050f80ff,
+ 0x073fa022, 0x0600003e, 0x06000080, 0x05001081,
+ 0x05002082, 0x06003083, 0x00683e76, 0x076c0aff,
+ 0x048180a7, 0x05004084, 0x04602075, 0x050f80ff,
+ 0x022fa02a, 0x038000aa, 0x04602075, 0x050f80ff,
+ 0x032fa022, 0x04487076, 0x0581011b, 0x04604675,
+ 0x050f80ff, 0x032fa009, 0x03680600, 0x050010ff,
+ 0x056c02ff, 0x058180f3, 0x07000090, 0x074b0000,
+ 0x050fe000, 0x038600ee, 0x0560027b, 0x050f80ff,
+ 0x032fa009, 0x07f00000, 0x07601400, 0x050f80ff,
+ 0x032fa009, 0x07f00000, 0x074b0000, 0x070ff08d,
+ 0x0179feff, 0x070000ff, 0x055c0400, 0x078100f3,
+ 0x070ff017, 0x037a00ff, 0x05000400, 0x010170ff,
+ 0x04604075, 0x050f80ff, 0x034a8400, 0x034a8800,
+ 0x05780100, 0x070000ff, 0x055a0400, 0x074b0a00,
+ 0x077bff00, 0x070000ff, 0x032fa00a, 0x07f00000,
+ 0x04603e75, 0x050f80ff, 0x07300fff, 0x070fffff,
+ 0x032fa00a, 0x07f00000, 0x04604a75, 0x050f80ff,
+ 0x0700008d, 0x017a0100, 0x07ffff00, 0x032fa00a,
+ 0x07f00000, 0x04604c75, 0x050f80ff, 0x07300fff,
+ 0x070fffff, 0x032fa00a, 0x07f00000, 0x06604275,
+ 0x050f80ff, 0x06000013, 0x032fa00a, 0x0245a076,
+ 0x008001ea, 0x04603875, 0x050f80ff, 0x05002071,
+ 0x073fa00a, 0x06000001, 0x066c0001, 0x06818115,
+ 0x05482017, 0x04810115, 0x070ff09a, 0x017910ff,
+ 0x03088888, 0x057d10ff, 0x03088888, 0x04810115,
+ 0x070ff09a, 0x045a0201, 0x070ff09a, 0x045c0401,
+ 0x048180fd, 0x050020ff, 0x060000fb, 0x06483001,
+ 0x07818109, 0x00680e01, 0x055c0400, 0x0481010e,
+ 0x004a4001, 0x02400002, 0x046c0e02, 0x06818104,
+ 0x00800115, 0x040fd002, 0x052e400c, 0x040080fb,
+ 0x046a6108, 0x06009075, 0x04002076, 0x06a006e0,
+ 0x04603e75, 0x050f80ff, 0x053fa842, 0x06000045,
+ 0x048b0119, 0x02085013, 0x05278000, 0x02075013,
+ 0x060ff0fb, 0x00d0011f, 0x01800124, 0x00800126,
+ 0x01800128, 0x0080012a, 0x0080012c, 0x062d0020,
+ 0x0180012e, 0x062d0080, 0x0180012e, 0x052d0200,
+ 0x0180012e, 0x052d0800, 0x0180012e, 0x033d0000,
+ 0x06000002, 0x03920024, 0x0584801d, 0x02800023,
+ 0x040fe07f, 0x00860140, 0x05a00160, 0x0192012e,
+ 0x040fe07f, 0x07a68160, 0x0180012e, 0x0760187b,
+ 0x050f80ff, 0x032fa009, 0x0744f000, 0x0760187b,
+ 0x050f80ff, 0x032fa00a, 0x02800097, 0x052e400c,
+ 0x040080fb, 0x046aa108, 0x06009075, 0x04002076,
+ 0x06a006e0, 0x0180012e, 0x04278001, 0x05482017,
+ 0x04810154, 0x048b014a, 0x060ff086, 0x0349f0ff,
+ 0x0581807b, 0x07483017, 0x04810151, 0x050fd0ff,
+ 0x040fe07f, 0x07a68160, 0x0180012e, 0x05004084,
+ 0x05a00217, 0x0192012e, 0x070ff07d, 0x0450047c,
+ 0x056004ff, 0x050f80ff, 0x032fa009, 0x070ff000,
+ 0x00540479, 0x030790ff, 0x00800138, 0x04487076,
+ 0x04810168, 0x04605875, 0x050f80ff, 0x032fa009,
+ 0x060ff079, 0x01540400, 0x0180016a, 0x060ff079,
+ 0x0054047a, 0x05820199, 0x05810199, 0x070ff07d,
+ 0x0450047c, 0x050f80ff, 0x002fa819, 0x048b0170,
+ 0x02080001, 0x00081002, 0x01082003, 0x058b0174,
+ 0x04487076, 0x0481017a, 0x02385001, 0x03010000,
+ 0x0080017c, 0x03385000, 0x03010000, 0x03400078,
+ 0x070ff003, 0x04500479, 0x030790ff, 0x0340007e,
+ 0x0642007f, 0x05810199, 0x070ff07e, 0x050f80ff,
+ 0x032fa009, 0x050fe000, 0x02868198, 0x070ff07d,
+ 0x056002ff, 0x050f80ff, 0x032fa009, 0x0107d000,
+ 0x0186019a, 0x0560107d, 0x050f80ff, 0x032fa009,
+ 0x03681e00, 0x0550041b, 0x050f80ff, 0x032fa009,
+ 0x0107e000, 0x070ff07e, 0x01800184, 0x0307c000,
+ 0x07c00000, 0x052e400c, 0x040080fb, 0x046aa108,
+ 0x06009075, 0x04002076, 0x028006e0, 0x060ff075,
+ 0x008601e0, 0x060ff073, 0x00540419, 0x058201b7,
+ 0x058101c3, 0x050010ff, 0x00202010, 0x00642001,
+ 0x068281ab, 0x04002001, 0x040f8073, 0x024a3c02,
+ 0x017a02ff, 0x06000c98, 0x070fa0ff, 0x060ff002,
+ 0x06500073, 0x03610072, 0x045c0473, 0x078181c6,
+ 0x03073072, 0x018001c6, 0x036100ff, 0x050010ff,
+ 0x03610072, 0x00540473, 0x057dfeff, 0x07ffffff,
+ 0x01400203, 0x00202010, 0x01642003, 0x068281ab,
+ 0x05002003, 0x008001ab, 0x04002013, 0x04001013,
+ 0x01294000, 0x07480077, 0x078181e1, 0x06604e75,
+ 0x050f80ff, 0x053fa809, 0x06000001, 0x07f00000,
+ 0x07602203, 0x050f80ff, 0x053fa809, 0x06000001,
+ 0x05481003, 0x078181dd, 0x060ff002, 0x04500401,
+ 0x016480ff, 0x078281e1, 0x07440077, 0x040080fb,
+ 0x006b6108, 0x06009075, 0x07a006db, 0x018001e1,
+ 0x060ff002, 0x045c0401, 0x078181e1, 0x01294000,
+ 0x07c00000, 0x040fd075, 0x050fd017, 0x060ff086,
+ 0x077800ff, 0x07000060, 0x037c00ff, 0x07000060,
+ 0x078181e4, 0x04487076, 0x04810201, 0x07780017,
+ 0x0243d807, 0x06818201, 0x06601875, 0x050f80ff,
+ 0x073fa022, 0x0600003e, 0x0249a076, 0x078181fa,
+ 0x058b01f5, 0x04603e75, 0x050f80ff, 0x053fa842,
+ 0x06000045, 0x052e400c, 0x040080fb, 0x026b4108,
+ 0x06009075, 0x04002076, 0x06a006e0, 0x03800024,
+ 0x06601875, 0x050f80ff, 0x073fa022, 0x0600003e,
+ 0x052e400c, 0x04600875, 0x050f80ff, 0x053fa809,
+ 0x06000001, 0x05488003, 0x05810211, 0x0400d0fb,
+ 0x066a810d, 0x013e4000, 0x07000300, 0x03800024,
+ 0x040080fb, 0x066a8108, 0x06009075, 0x04002076,
+ 0x06a006e0, 0x03800024, 0x0240007f, 0x0742007e,
+ 0x050f807e, 0x032fa009, 0x050fe000, 0x02868231,
+ 0x070ff07d, 0x055c047b, 0x04810226, 0x0760007d,
+ 0x050f80ff, 0x032fa009, 0x050fe000, 0x02868226,
+ 0x070ff07b, 0x0107d0ff, 0x0560107d, 0x050f80ff,
+ 0x032fa009, 0x03681e00, 0x0450041c, 0x0107e0ff,
+ 0x050f80ff, 0x032fa009, 0x050fe000, 0x01860233,
+ 0x0307c000, 0x07c00000, 0x040fd075, 0x028006f4,
+ 0x0460081f, 0x050f80ff, 0x032fa039, 0x01021000,
+ 0x03020005, 0x01018006, 0x01683e21, 0x00d0023d,
+ 0x0080025d, 0x018002f5, 0x0280032f, 0x038003d8,
+ 0x00800261, 0x0080025d, 0x0080025d, 0x0080025d,
+ 0x0080025d, 0x0080025d, 0x0080025d, 0x0080025d,
+ 0x0080025d, 0x0080025d, 0x00800413, 0x0080025d,
+ 0x0080025d, 0x0080025d, 0x0080025d, 0x0080025d,
+ 0x0080025d, 0x0080025d, 0x0080025d, 0x0080025d,
+ 0x0080025d, 0x0080025d, 0x0080025d, 0x0080025d,
+ 0x0080025d, 0x0080025d, 0x0080025d, 0x0080025d,
+ 0x050fd0ff, 0x06a006f4, 0x03800018, 0x0380001d,
+ 0x01494021, 0x06818434, 0x0400701f, 0x05a00466,
+ 0x007a0101, 0x07060000, 0x04601c20, 0x050f80ff,
+ 0x053fa809, 0x07000003, 0x04484007, 0x048102b9,
+ 0x06485007, 0x048102b9, 0x04601020, 0x050f80ff,
+ 0x073fa009, 0x07000003, 0x0769ff06, 0x076c3006,
+ 0x04810289, 0x056cd006, 0x04810289, 0x04601c20,
+ 0x050f80ff, 0x053fa809, 0x07000003, 0x06780007,
+ 0x070000ff, 0x075a0005, 0x04601020, 0x050f80ff,
+ 0x053fa809, 0x07000003, 0x0469fe07, 0x05780105,
+ 0x07ffff00, 0x075a0005, 0x030b6005, 0x018002a3,
+ 0x04601c20, 0x050f80ff, 0x053fa809, 0x07000003,
+ 0x00464007, 0x02465007, 0x07f00000, 0x04601c20,
+ 0x050f80ff, 0x053fa80a, 0x07000003, 0x07f00000,
+ 0x04601c20, 0x050f80ff, 0x053fa809, 0x07000003,
+ 0x07f00000, 0x07f00000, 0x04601620, 0x050f80ff,
+ 0x053fa809, 0x07000003, 0x05780105, 0x07ffff00,
+ 0x044b0407, 0x075a0005, 0x0460041f, 0x050f80ff,
+ 0x053fa80a, 0x06000002, 0x07f00000, 0x0460041f,
+ 0x050f80ff, 0x053fa809, 0x07000003, 0x07303000,
+ 0x06008280, 0x0460081f, 0x050f80ff, 0x053fa809,
+ 0x07000003, 0x007a0107, 0x03400000, 0x0460081f,
+ 0x050f80ff, 0x053fa80a, 0x07000003, 0x018002bb,
+ 0x07303000, 0x07008290, 0x03496021, 0x068182bf,
+ 0x06006013, 0x018002c6, 0x02400010, 0x048102bf,
+ 0x06006010, 0x0660361f, 0x050f80ff, 0x073fa00a,
+ 0x07000003, 0x072d0003, 0x039b82c6, 0x069382cb,
+ 0x073aa000, 0x06000004, 0x010b1000, 0x000b2001,
0x020b3002, 0x010b4003, 0x020b5004, 0x030b6005,
- 0x010b7006, 0x063aa020, 0x07000012, 0x070ff0f6,
- 0x03687eff, 0x06818273, 0x06601220, 0x050f10ff,
- 0x063f3008, 0x06000008, 0x062d0002, 0x00800254,
- 0x04007013, 0x06a00370, 0x007a0101, 0x07050000,
+ 0x010b7006, 0x069382e6, 0x07602818, 0x050f80ff,
+ 0x012fa809, 0x04002001, 0x0279ff01, 0x070000ff,
+ 0x007a0101, 0x07500000, 0x000b8001, 0x04780102,
+ 0x07ffff00, 0x020b9002, 0x009702e3, 0x063aa020,
+ 0x0700001e, 0x008002ec, 0x063aa020, 0x06000016,
+ 0x008002ec, 0x029782ea, 0x063aa020, 0x07000012,
+ 0x008002ec, 0x063aa020, 0x0600001a, 0x070ff0f6,
+ 0x03687eff, 0x068182ec, 0x06601820, 0x050f10ff,
+ 0x063f3008, 0x06000008, 0x062d0002, 0x01800260,
+ 0x04007013, 0x05a00466, 0x007a0101, 0x07050000,
0x07303000, 0x07008890, 0x074d0005, 0x06006013,
- 0x072d0003, 0x039b8284, 0x010b1000, 0x000b2001,
- 0x020b3002, 0x010b4003, 0x020b5004, 0x030b6005,
- 0x010b7006, 0x04601c20, 0x050f80ff, 0x022fa019,
- 0x04001002, 0x04002013, 0x050f801e, 0x022fa01a,
- 0x073aa00c, 0x07000012, 0x07300003, 0x06000008,
- 0x02800326, 0x04007013, 0x06a00370, 0x007a0101,
- 0x03070000, 0x04602c1f, 0x050f80ff, 0x073fa009,
- 0x06000004, 0x02499008, 0x058102a6, 0x07303000,
- 0x07008890, 0x008002a8, 0x07303000, 0x04008980,
- 0x05007003, 0x074d0005, 0x06006013, 0x072d0003,
- 0x029b82ab, 0x010b1000, 0x000b2001, 0x020b3002,
+ 0x072d0003, 0x029b82fd, 0x04938302, 0x073aa000,
+ 0x06000004, 0x010b1000, 0x000b2001, 0x020b3002,
0x010b4003, 0x020b5004, 0x030b6005, 0x010b7006,
- 0x04601620, 0x050f80ff, 0x032fa021, 0x07f00000,
- 0x064b0002, 0x02499008, 0x048102bc, 0x0644c002,
- 0x054b0400, 0x050040ff, 0x06698104, 0x078182d1,
- 0x06000013, 0x04001013, 0x04780102, 0x06000010,
- 0x06003013, 0x04004013, 0x06005013, 0x06006013,
- 0x04007013, 0x00644015, 0x048202cd, 0x04448002,
- 0x02205008, 0x050f801e, 0x032fa042, 0x04008015,
- 0x03800309, 0x046c8004, 0x068182df, 0x01208018,
- 0x06780002, 0x07000003, 0x078182e2, 0x06003001,
- 0x06000013, 0x04001013, 0x04004013, 0x06005013,
- 0x050f801e, 0x022fa032, 0x03800309, 0x040fd01f,
- 0x06a00598, 0x03800018, 0x0379ff03, 0x070000ff,
- 0x04488002, 0x048102e9, 0x070ff003, 0x04500408,
+ 0x04938316, 0x07602818, 0x050f80ff, 0x012fa809,
+ 0x04002001, 0x0279ff01, 0x070000ff, 0x007a0101,
+ 0x07500000, 0x000b8001, 0x04780102, 0x07ffff00,
+ 0x020b9002, 0x06602220, 0x050f80ff, 0x022fa019,
+ 0x04001002, 0x04002013, 0x0660281f, 0x050f80ff,
+ 0x032fa00a, 0x05938328, 0x0500b01e, 0x0660050b,
+ 0x040f800b, 0x022fa01a, 0x073aa00c, 0x06000016,
+ 0x07300003, 0x06000008, 0x01800409, 0x050f801e,
+ 0x022fa01a, 0x073aa00c, 0x07000012, 0x07300003,
+ 0x06000008, 0x01800409, 0x04007013, 0x05a00466,
+ 0x007a0101, 0x03070000, 0x04602c1f, 0x050f80ff,
+ 0x073fa009, 0x06000004, 0x02499008, 0x0781033c,
+ 0x07303000, 0x07008890, 0x0280033e, 0x07303000,
+ 0x04008980, 0x05007003, 0x04601620, 0x050f80ff,
+ 0x073fa009, 0x07000003, 0x03499006, 0x0781034e,
+ 0x0379ff05, 0x070000ff, 0x06602220, 0x050f80ff,
+ 0x073fa009, 0x07000003, 0x07780006, 0x07ffff00,
+ 0x075a0005, 0x074d0005, 0x06006013, 0x072d0003,
+ 0x019b8350, 0x05938355, 0x073aa000, 0x06000004,
+ 0x010b1000, 0x000b2001, 0x020b3002, 0x010b4003,
+ 0x020b5004, 0x030b6005, 0x010b7006, 0x0493836b,
+ 0x07602818, 0x050f80ff, 0x012fa809, 0x04002001,
+ 0x0279ff01, 0x070000ff, 0x007a0101, 0x07500000,
+ 0x000b8001, 0x04780102, 0x07ffff00, 0x020b9002,
+ 0x0500b01e, 0x0660050b, 0x04601c20, 0x050f80ff,
+ 0x032fa021, 0x07f00000, 0x064b0002, 0x02499008,
+ 0x06810373, 0x0644c002, 0x054b0400, 0x050040ff,
+ 0x06698104, 0x0581838b, 0x06000013, 0x04001013,
+ 0x04780102, 0x06000010, 0x06003013, 0x04004013,
+ 0x06005013, 0x06006013, 0x04007013, 0x00644015,
+ 0x07820384, 0x04448002, 0x02205008, 0x05938387,
+ 0x040f800b, 0x03800388, 0x050f801e, 0x032fa042,
+ 0x04008015, 0x038003cc, 0x046c8004, 0x0581839c,
+ 0x01208018, 0x06780002, 0x07000003, 0x0581839f,
+ 0x06003001, 0x06000013, 0x04001013, 0x04004013,
+ 0x06005013, 0x05938399, 0x040f800b, 0x0380039a,
+ 0x050f801e, 0x022fa032, 0x038003cc, 0x040fd01f,
+ 0x06a006f4, 0x03800018, 0x0379ff03, 0x070000ff,
+ 0x04488002, 0x078103a6, 0x070ff003, 0x04500408,
0x050080ff, 0x0379ff00, 0x070000ff, 0x06489002,
- 0x058102f0, 0x070ff000, 0x04500408, 0x050080ff,
+ 0x068103ad, 0x070ff000, 0x04500408, 0x050080ff,
0x07005003, 0x05004000, 0x06003001, 0x06000013,
- 0x04001013, 0x050f801e, 0x022fa032, 0x07f00000,
- 0x06601e20, 0x050f80ff, 0x022fa031, 0x07f00000,
- 0x07600c1e, 0x050f80ff, 0x022fa032, 0x02680608,
- 0x07810309, 0x016408ff, 0x057dfeff, 0x07ffffff,
- 0x034000ff, 0x045a0407, 0x010b40ff, 0x06600908,
- 0x0669f908, 0x027a0008, 0x04000120, 0x070aa0ff,
- 0x024a2408, 0x037a00ff, 0x06000080, 0x070000ff,
- 0x02800326, 0x04007013, 0x06a00370, 0x007a0101,
- 0x07030000, 0x07303000, 0x07008190, 0x06006013,
- 0x02800319, 0x072d0003, 0x009b8319, 0x010b1000,
- 0x000b2001, 0x020b3002, 0x010b4003, 0x020b5004,
- 0x030b6005, 0x010b7006, 0x073aa000, 0x07000003,
- 0x062d0002, 0x00800254, 0x070ff0f6, 0x03687eff,
- 0x04818326, 0x050f101e, 0x070f3000, 0x062d0002,
- 0x00800254, 0x073aa000, 0x06000002, 0x072d0003,
- 0x009b832f, 0x070ff0f6, 0x036830ff, 0x04818331,
- 0x070ff0f6, 0x036830ff, 0x04818334, 0x0660301f,
- 0x070f00ff, 0x07300c00, 0x07000005, 0x070f3000,
- 0x062d0002, 0x00800254, 0x05474021, 0x04602020,
- 0x050f80ff, 0x053fa809, 0x07000003, 0x06780007,
- 0x07ffff00, 0x07810347, 0x03455021, 0x06602420,
- 0x050f80ff, 0x063fa019, 0x06000002, 0x06003013,
- 0x01497021, 0x0581835f, 0x04601020, 0x050f80ff,
- 0x053fa809, 0x06000001, 0x0379ff03, 0x070000ff,
- 0x07420003, 0x04600220, 0x050f80ff, 0x012fa809,
- 0x040fe001, 0x02860364, 0x03200006, 0x0760141b,
- 0x050f80ff, 0x073fa009, 0x06000001, 0x04008013,
- 0x0660181f, 0x050f80ff, 0x022fa04a, 0x00800257,
- 0x012080c0, 0x0600901f, 0x05002021, 0x07a00584,
- 0x00800254, 0x06489076, 0x0681036d, 0x02200020,
- 0x0280036e, 0x03200000, 0x06006075, 0x02800376,
- 0x07489021, 0x07810374, 0x03200030, 0x02800375,
- 0x03200011, 0x0600601f, 0x04a0048f, 0x05600406,
- 0x050f80ff, 0x053fa809, 0x06000002, 0x07c00000,
- 0x04600875, 0x050f80ff, 0x032fa039, 0x03076000,
- 0x0107b005, 0x01018006, 0x0448b076, 0x05818388,
- 0x06602475, 0x050f80ff, 0x053fa811, 0x0700003c,
- 0x00077013, 0x050fe078, 0x008683a4, 0x06a003a8,
- 0x029203a7, 0x060ff0fb, 0x02d0038f, 0x02800394,
- 0x02800397, 0x0380039a, 0x0280039d, 0x038003a0,
- 0x072d0030, 0x009b8394, 0x01800412, 0x072d00c0,
- 0x009b8397, 0x01800412, 0x072d0300, 0x019b839a,
- 0x01800412, 0x072d0c00, 0x009b839d, 0x01800412,
- 0x033d0000, 0x07000003, 0x019b83a0, 0x01800412,
- 0x040fd075, 0x050fd078, 0x06a00598, 0x0380001d,
- 0x068b03a8, 0x03385000, 0x07030000, 0x05600818,
- 0x050f80ff, 0x032fa009, 0x07f00000, 0x054b0400,
- 0x0308a0ff, 0x0179fe00, 0x070000ff, 0x010880ff,
- 0x0448b076, 0x078103c3, 0x0560167b, 0x050f80ff,
- 0x002fa819, 0x02080002, 0x01081003, 0x064b0001,
- 0x00082001, 0x02083001, 0x02079001, 0x0207a001,
- 0x00084013, 0x0207f013, 0x00800402, 0x06485076,
- 0x078103e4, 0x02465076, 0x06601875, 0x050f80ff,
- 0x073fa021, 0x0600003e, 0x070ff07d, 0x0450047c,
- 0x050f80ff, 0x002fa819, 0x068b03ce, 0x02080001,
- 0x00081002, 0x01082003, 0x03079003, 0x04487076,
- 0x068103dc, 0x00498076, 0x03a1840a, 0x04605875,
- 0x050f80ff, 0x032fa009, 0x03083000, 0x038003dd,
- 0x0208307a, 0x0340007e, 0x0642007f, 0x068103f2,
- 0x070ff07e, 0x05a00178, 0x009283f2, 0x01800409,
- 0x078b03e4, 0x06601875, 0x050f80ff, 0x073fa041,
- 0x0600003e, 0x07f00000, 0x04487076, 0x078103f0,
- 0x04605875, 0x050f80ff, 0x032fa009, 0x03083000,
- 0x00498076, 0x03a1840a, 0x06602875, 0x050f80ff,
- 0x073fa009, 0x06000007, 0x0008400e, 0x04487076,
- 0x04810402, 0x078b03f9, 0x04603e75, 0x050f80ff,
- 0x053fa841, 0x06000045, 0x068b03fe, 0x02385001,
- 0x03010000, 0x01800405, 0x048b0402, 0x03385000,
- 0x03010000, 0x04278001, 0x040fe07f, 0x01860409,
- 0x00800154, 0x07c00000, 0x04094013, 0x03073072,
+ 0x04001013, 0x049383b5, 0x040f800b, 0x028003b6,
+ 0x050f801e, 0x022fa032, 0x07f00000, 0x06602420,
+ 0x050f80ff, 0x022fa031, 0x07f00000, 0x049383bf,
+ 0x06600c0b, 0x038003c0, 0x07600c1e, 0x050f80ff,
+ 0x022fa032, 0x02680608, 0x078103cc, 0x016408ff,
+ 0x057dfeff, 0x07ffffff, 0x034000ff, 0x045a0407,
+ 0x010b40ff, 0x06600908, 0x0669f908, 0x049383d0,
+ 0x027a0008, 0x05000160, 0x038003d2, 0x027a0008,
+ 0x04000120, 0x070aa0ff, 0x024a2408, 0x037a00ff,
+ 0x06000080, 0x070000ff, 0x01800409, 0x04007013,
+ 0x05a00466, 0x007a0101, 0x07030000, 0x07303000,
+ 0x07008190, 0x06006013, 0x028003e0, 0x072d0003,
+ 0x009b83e0, 0x049383e5, 0x073aa000, 0x06000004,
+ 0x010b1000, 0x000b2001, 0x020b3002, 0x010b4003,
+ 0x020b5004, 0x030b6005, 0x010b7006, 0x06938401,
+ 0x07602818, 0x050f80ff, 0x012fa809, 0x04002001,
+ 0x0279ff01, 0x070000ff, 0x007a0101, 0x07500000,
+ 0x000b8001, 0x04780102, 0x07ffff00, 0x020b9002,
+ 0x073ff000, 0x06000007, 0x029703fe, 0x037a00ff,
+ 0x06000080, 0x070aa0ff, 0x062d0002, 0x01800260,
+ 0x073ff000, 0x07000003, 0x01970406, 0x037a00ff,
+ 0x06000080, 0x070aa0ff, 0x062d0002, 0x01800260,
+ 0x070ff0f6, 0x03687eff, 0x07818409, 0x0793840f,
+ 0x040f100b, 0x00800410, 0x050f101e, 0x070f3000,
+ 0x062d0002, 0x01800260, 0x073aa000, 0x06000002,
+ 0x072d0003, 0x029b8415, 0x070ff0f6, 0x036830ff,
+ 0x07818417, 0x070ff0f6, 0x036830ff, 0x0681841a,
+ 0x0660301f, 0x070f00ff, 0x0693842f, 0x07602818,
+ 0x050f80ff, 0x012fa809, 0x04002001, 0x0279ff01,
+ 0x070000ff, 0x007a0101, 0x07500000, 0x060af001,
+ 0x04780102, 0x07ffff00, 0x020b0002, 0x07300c00,
+ 0x07000005, 0x00800431, 0x07300c00, 0x07000005,
+ 0x070f3000, 0x062d0002, 0x01800260, 0x05474021,
+ 0x04602620, 0x050f80ff, 0x053fa809, 0x07000003,
+ 0x06780007, 0x07ffff00, 0x0481043d, 0x03455021,
+ 0x04602a20, 0x050f80ff, 0x063fa019, 0x06000002,
+ 0x06003013, 0x01497021, 0x07818455, 0x04601620,
+ 0x050f80ff, 0x053fa809, 0x06000001, 0x0379ff03,
+ 0x070000ff, 0x07420003, 0x04600220, 0x050f80ff,
+ 0x012fa809, 0x040fe001, 0x0186045a, 0x03200009,
+ 0x0760141b, 0x050f80ff, 0x073fa009, 0x06000001,
+ 0x04008013, 0x0660181f, 0x050f80ff, 0x022fa04a,
+ 0x01800263, 0x012080c0, 0x0600901f, 0x05002021,
+ 0x06a006e0, 0x01800260, 0x06489076, 0x05810463,
+ 0x02200020, 0x00800464, 0x03200000, 0x06006075,
+ 0x0180046c, 0x07489021, 0x0581046a, 0x03200030,
+ 0x0080046b, 0x03200011, 0x0600601f, 0x07a005ac,
+ 0x05600406, 0x050f80ff, 0x053fa809, 0x06000002,
+ 0x07c00000, 0x04600875, 0x050f80ff, 0x032fa039,
+ 0x03076000, 0x0107b005, 0x01018006, 0x0448b076,
+ 0x0781847e, 0x06602475, 0x050f80ff, 0x053fa811,
+ 0x0700003c, 0x00077013, 0x050fe078, 0x0386849a,
+ 0x04a0049e, 0x0092049d, 0x060ff0fb, 0x00d00485,
+ 0x0080048a, 0x0180048d, 0x01800490, 0x01800493,
+ 0x01800496, 0x072d0030, 0x029b848a, 0x0280052f,
+ 0x072d00c0, 0x039b848d, 0x0280052f, 0x072d0300,
+ 0x039b8490, 0x0280052f, 0x072d0c00, 0x039b8493,
+ 0x0280052f, 0x033d0000, 0x07000003, 0x039b8496,
+ 0x0280052f, 0x040fd075, 0x050fd078, 0x06a006f4,
+ 0x0380001d, 0x048b049e, 0x03385000, 0x07030000,
+ 0x05600818, 0x050f80ff, 0x032fa009, 0x07f00000,
+ 0x054b0400, 0x0308a0ff, 0x029884ad, 0x04693e76,
+ 0x076c0aff, 0x068184ad, 0x07288200, 0x008004b0,
+ 0x0179fe00, 0x070000ff, 0x010880ff, 0x0560087b,
+ 0x050f80ff, 0x012fa809, 0x0609f001, 0x0448b076,
+ 0x048104df, 0x05601c7b, 0x050f80ff, 0x002fa819,
+ 0x02790076, 0x03010000, 0x068184d5, 0x02025001,
+ 0x06483001, 0x048104d5, 0x04600475, 0x050f80ff,
+ 0x053fa809, 0x06000002, 0x07f00000, 0x054b0405,
+ 0x05780105, 0x07ffff00, 0x075a0005, 0x050fd005,
+ 0x040fd07a, 0x06602475, 0x050f80ff, 0x053fa811,
+ 0x0700003c, 0x06306002, 0x05000430, 0x04600475,
+ 0x050f80ff, 0x053fa812, 0x06000002, 0x008004df,
+ 0x02080002, 0x01081003, 0x064b0001, 0x00082001,
+ 0x02083001, 0x02079001, 0x0207a001, 0x00084013,
+ 0x0207f013, 0x0280051f, 0x06485076, 0x07810500,
+ 0x02465076, 0x06601875, 0x050f80ff, 0x073fa021,
+ 0x0600003e, 0x070ff07d, 0x0450047c, 0x050f80ff,
+ 0x002fa819, 0x048b04ea, 0x02080001, 0x00081002,
+ 0x01082003, 0x03079003, 0x04487076, 0x048104f8,
+ 0x00498076, 0x01a18527, 0x04605875, 0x050f80ff,
+ 0x032fa009, 0x03083000, 0x018004f9, 0x0208307a,
+ 0x0340007e, 0x0642007f, 0x0681050e, 0x070ff07e,
+ 0x05a00184, 0x0092850e, 0x02800526, 0x078b0500,
+ 0x06601875, 0x050f80ff, 0x073fa041, 0x0600003e,
+ 0x07f00000, 0x04487076, 0x0781050c, 0x04605875,
+ 0x050f80ff, 0x032fa009, 0x03083000, 0x00498076,
+ 0x01a18527, 0x06602875, 0x050f80ff, 0x073fa009,
+ 0x06000007, 0x0008400e, 0x04487076, 0x0681051f,
+ 0x0007100e, 0x068b0516, 0x04603e75, 0x050f80ff,
+ 0x053fa841, 0x06000045, 0x078b051b, 0x02385001,
+ 0x03010000, 0x03800522, 0x068b051f, 0x03385000,
+ 0x03010000, 0x04278001, 0x040fe07f, 0x02860526,
+ 0x01800160, 0x07c00000, 0x04094013, 0x03073072,
0x07440077, 0x040080fb, 0x006b6108, 0x06009075,
- 0x06a0057f, 0x07c00000, 0x00683e76, 0x05810417,
- 0x0448d076, 0x048104c2, 0x03800500, 0x06a00573,
- 0x028003a7, 0x06000013, 0x00201001, 0x00202002,
- 0x0778aae7, 0x06000001, 0x04810468, 0x050fb000,
- 0x070ff000, 0x01d00422, 0x0180043c, 0x00800437,
- 0x00800432, 0x0180042d, 0x01800427, 0x077800e7,
- 0x06000001, 0x05810465, 0x072e7200, 0x030190cc,
- 0x00800440, 0x016880e7, 0x05810465, 0x042e7080,
- 0x020190cb, 0x00800440, 0x016820e7, 0x05810465,
- 0x042e7020, 0x030190ca, 0x00800440, 0x016808e7,
- 0x05810465, 0x042e7008, 0x030190c9, 0x00800440,
- 0x016802e7, 0x05810465, 0x042e7002, 0x020190c8,
- 0x07480077, 0x05810465, 0x03460077, 0x060ff075,
- 0x01860465, 0x06003094, 0x0748a003, 0x07818465,
+ 0x07a006db, 0x07c00000, 0x00683e76, 0x06810534,
+ 0x0448d076, 0x068105df, 0x03800635, 0x07a006cf,
+ 0x0080049d, 0x06000013, 0x00201001, 0x00202002,
+ 0x0778aae7, 0x06000001, 0x06810585, 0x050fb000,
+ 0x070ff000, 0x03d0053f, 0x03800559, 0x02800554,
+ 0x0280054f, 0x0280054a, 0x03800544, 0x077800e7,
+ 0x06000001, 0x07810582, 0x072e7200, 0x030190cc,
+ 0x0280055d, 0x016880e7, 0x07810582, 0x042e7080,
+ 0x020190cb, 0x0280055d, 0x016820e7, 0x07810582,
+ 0x042e7020, 0x030190ca, 0x0280055d, 0x016808e7,
+ 0x07810582, 0x042e7008, 0x030190c9, 0x0280055d,
+ 0x016802e7, 0x07810582, 0x042e7002, 0x020190c8,
+ 0x07480077, 0x07810582, 0x03460077, 0x060ff075,
+ 0x03860582, 0x06003094, 0x0748a003, 0x05818582,
0x01683e03, 0x02203010, 0x01540403, 0x014a1a03,
- 0x060ff073, 0x00540419, 0x05820472, 0x05810478,
- 0x050010ff, 0x01540403, 0x04820454, 0x06003001,
+ 0x060ff073, 0x00540419, 0x0682058f, 0x07810595,
+ 0x050010ff, 0x01540403, 0x07820571, 0x06003001,
0x034a3c03, 0x017a02ff, 0x06000c98, 0x040f8073,
0x070fa0ff, 0x070ff003, 0x06500073, 0x03610072,
- 0x045c0473, 0x0781845f, 0x03073072, 0x05394000,
+ 0x045c0473, 0x0481857c, 0x03073072, 0x05394000,
0x07000090, 0x07f00000, 0x06003094, 0x07489003,
- 0x07818469, 0x03400000, 0x076c0a00, 0x0681841c,
- 0x07c00000, 0x060ff073, 0x00540419, 0x0581047e,
- 0x0482047c, 0x01683e03, 0x02203010, 0x01540403,
- 0x014a1a03, 0x01800450, 0x03610072, 0x00540473,
- 0x057dfeff, 0x07ffffff, 0x034000ff, 0x01800450,
- 0x040fd075, 0x040fd073, 0x040fd019, 0x01800465,
- 0x040fd075, 0x02800598, 0x06604e75, 0x050f80ff,
- 0x053fa809, 0x06000001, 0x07f00000, 0x05601c03,
+ 0x04818586, 0x03400000, 0x076c0a00, 0x05818539,
+ 0x07c00000, 0x060ff073, 0x00540419, 0x0681059b,
+ 0x07820599, 0x01683e03, 0x02203010, 0x01540403,
+ 0x014a1a03, 0x0280056d, 0x03610072, 0x00540473,
+ 0x057dfeff, 0x07ffffff, 0x034000ff, 0x0280056d,
+ 0x040fd075, 0x040fd073, 0x040fd019, 0x03800582,
+ 0x040fd075, 0x028006f4, 0x06604e75, 0x050f80ff,
+ 0x053fa809, 0x06000001, 0x07f00000, 0x07602203,
0x050f80ff, 0x053fa809, 0x06000001, 0x05481003,
- 0x07818465, 0x07440077, 0x040080fb, 0x006b6108,
- 0x06009075, 0x06a0057f, 0x01800465, 0x0297849d,
+ 0x05818582, 0x07440077, 0x040080fb, 0x006b6108,
+ 0x06009075, 0x07a006db, 0x03800582, 0x009785ba,
0x07602418, 0x050f80ff, 0x012fa809, 0x06780001,
0x070000ff, 0x075a0000, 0x05602618, 0x050f80ff,
0x012fa809, 0x060ff001, 0x0569feff, 0x054b08ff,
0x075a0000, 0x05600418, 0x050f80ff, 0x012fa809,
- 0x040fe007, 0x028684a4, 0x01204000, 0x008004b9,
+ 0x040fe007, 0x008685c1, 0x01204000, 0x028005d6,
0x05600e06, 0x050f80ff, 0x073fa009, 0x06000002,
0x07f00000, 0x064d0004, 0x00700104, 0x03010000,
- 0x06780004, 0x07ff0000, 0x076c00ff, 0x078184b2,
+ 0x06780004, 0x07ff0000, 0x076c00ff, 0x058185cf,
0x00700104, 0x03010000, 0x064d0004, 0x05600e06,
0x050f80ff, 0x073fa00a, 0x06000002, 0x07f00000,
0x044b0804, 0x0279ff01, 0x0700ffff, 0x05602618,
0x050f80ff, 0x073fa009, 0x06000001, 0x0279ff02,
0x0700ffff, 0x07c00000, 0x04007075, 0x0448b076,
- 0x048104dc, 0x06489076, 0x058104c9, 0x03200030,
- 0x018004ca, 0x03200011, 0x06006075, 0x06a00376,
- 0x007a0101, 0x07060000, 0x07303000, 0x07008290,
- 0x02496076, 0x078184d4, 0x06006013, 0x008004ef,
- 0x02400010, 0x058104d4, 0x06006010, 0x06603675,
- 0x050f80ff, 0x073fa00a, 0x07000003, 0x008004ef,
- 0x0600007a, 0x02493076, 0x068184e5, 0x06602e75,
- 0x050f80ff, 0x032fa009, 0x060ff07a, 0x05500400,
- 0x070000ff, 0x06473076, 0x06602e75, 0x050f80ff,
- 0x032fa00a, 0x07a00369, 0x007a0101, 0x03010000,
- 0x06303008, 0x05008000, 0x0600600e, 0x072d0003,
- 0x029b84ef, 0x050a4000, 0x060a5001, 0x060a6002,
+ 0x068105fe, 0x02790076, 0x03010000, 0x058185e7,
+ 0x06483025, 0x048185fe, 0x06489076, 0x078105eb,
+ 0x03200030, 0x028005ec, 0x03200011, 0x06006075,
+ 0x05a0046c, 0x007a0101, 0x07060000, 0x07303000,
+ 0x07008290, 0x02496076, 0x058185f6, 0x06006013,
+ 0x03800611, 0x02400010, 0x078105f6, 0x06006010,
+ 0x06603675, 0x050f80ff, 0x073fa00a, 0x07000003,
+ 0x03800611, 0x0600007a, 0x02493076, 0x04818607,
+ 0x06602e75, 0x050f80ff, 0x032fa009, 0x060ff07a,
+ 0x05500400, 0x070000ff, 0x06473076, 0x06602e75,
+ 0x050f80ff, 0x032fa00a, 0x05a0045f, 0x007a0101,
+ 0x03010000, 0x06303008, 0x05008000, 0x0600600e,
+ 0x072d0003, 0x019b8611, 0x04938616, 0x073a0000,
+ 0x06000001, 0x050a4000, 0x060a5001, 0x060a6002,
0x050a7003, 0x040a8004, 0x070a9005, 0x050ae006,
- 0x053079a0, 0x0600000e, 0x06489076, 0x048104fd,
- 0x06446007, 0x060a0007, 0x062d0002, 0x028003a7,
- 0x00683e76, 0x076c0aff, 0x0681052f, 0x04007013,
- 0x06489076, 0x06810508, 0x03200030, 0x03800509,
- 0x03200011, 0x06006075, 0x06a00376, 0x007a0101,
+ 0x0593862d, 0x07602818, 0x050f80ff, 0x012fa809,
+ 0x04002001, 0x0279ff01, 0x070000ff, 0x007a0101,
+ 0x07500000, 0x060af001, 0x04780102, 0x07ffff00,
+ 0x020b0002, 0x053079a0, 0x0700000f, 0x0280062f,
+ 0x053079a0, 0x0600000e, 0x06489076, 0x06810632,
+ 0x06446007, 0x060a0007, 0x062d0002, 0x0080049d,
+ 0x00683e76, 0x076c0aff, 0x07810677, 0x04007013,
+ 0x06489076, 0x0681063d, 0x03200030, 0x0280063e,
+ 0x03200011, 0x06006075, 0x05a0046c, 0x007a0101,
0x03070000, 0x04602c75, 0x050f80ff, 0x053fa809,
- 0x06000001, 0x03499003, 0x07810518, 0x07303000,
- 0x07008890, 0x053079a0, 0x0700000c, 0x0280051c,
+ 0x06000001, 0x03499003, 0x0781064d, 0x07303000,
+ 0x07008890, 0x053079a0, 0x0700000c, 0x02800651,
0x07303000, 0x04008980, 0x04307920, 0x0700000c,
- 0x074d0005, 0x06006013, 0x072d0003, 0x019b851e,
- 0x050a4000, 0x060a5001, 0x060a6002, 0x050a7003,
- 0x040a8004, 0x070a9005, 0x050ae006, 0x007a0107,
- 0x06000020, 0x06489076, 0x0681052c, 0x06446007,
- 0x060a0007, 0x062d0002, 0x028003a7, 0x06602e75,
- 0x050f80ff, 0x032fa009, 0x060ff07a, 0x05500400,
- 0x070000ff, 0x06473076, 0x06602e75, 0x050f80ff,
- 0x032fa00a, 0x04007075, 0x07a00369, 0x007a0101,
- 0x03010000, 0x06303008, 0x07008800, 0x074d0005,
- 0x06600a75, 0x050f80ff, 0x073fa009, 0x07000003,
- 0x07f00000, 0x054b0406, 0x045a0404, 0x050040ff,
- 0x0600600e, 0x072d0003, 0x009b8549, 0x050a4000,
+ 0x074d0005, 0x06006013, 0x072d0003, 0x019b8653,
+ 0x04938658, 0x073a0000, 0x06000001, 0x050a4000,
0x060a5001, 0x060a6002, 0x050a7003, 0x040a8004,
- 0x070a9005, 0x050ae006, 0x04307920, 0x0600000e,
- 0x06307d20, 0x0600000e, 0x0648c076, 0x0581855a,
- 0x04307920, 0x0600000e, 0x06489076, 0x0681055d,
- 0x06446007, 0x060a0007, 0x062d0002, 0x028003a7,
- 0x072d0003, 0x019b8560, 0x070ff0f6, 0x03687eff,
- 0x04818562, 0x050f2074, 0x06489076, 0x07810569,
- 0x06446007, 0x060a0007, 0x040070fb, 0x046a7007,
- 0x050f40ff, 0x062d0002, 0x028003a7, 0x01208060,
- 0x0600901f, 0x05002021, 0x03800584, 0x040080fb,
- 0x066ae108, 0x06009075, 0x04002076, 0x03800584,
- 0x03201100, 0x0584857d, 0x06420001, 0x04818579,
- 0x0280059b, 0x020e0008, 0x07c00000, 0x03201100,
- 0x04848591, 0x06420001, 0x04818580, 0x0280059b,
- 0x050fd009, 0x040fd008, 0x03201100, 0x0584858b,
- 0x06420001, 0x05818587, 0x0280059b, 0x007a0102,
- 0x04000101, 0x05600809, 0x050f80ff, 0x073fa00a,
- 0x06000001, 0x020e0008, 0x07840595, 0x030e0009,
- 0x07c00000, 0x01011009, 0x052e4300, 0x07c00000,
- 0x052e400f, 0x01208090, 0x03800578, 0x070fc0ff,
- 0x040f8013, 0x032fa009, 0x0280059e, 0x07d53768,
- 0x02800004, 0x00000000, 0x0000a000, 0x000005a3,
- 0x033d0aaa, 0x070aaaaa, 0x013d1aaa, 0x070aaaaa,
- 0x028c03d6, 0x058e044d, 0x058d0459, 0x018f04c0,
- 0x02910013, 0x040f7029, 0x02860013, 0x066c001f,
- 0x058104db, 0x066c0a1f, 0x06810508, 0x040f702f,
- 0x0386001d, 0x06000010, 0x050fb000, 0x066c0079,
- 0x06810549, 0x0398001d, 0x03400000, 0x076c0a00,
- 0x04818016, 0x07960021, 0x05998021, 0x06a0009e,
- 0x02800008, 0x050f7012, 0x05a683b1, 0x04908008,
- 0x030150e1, 0x06780015, 0x07fffff0, 0x06810064,
- 0x0079fe15, 0x031fffff, 0x030160ff, 0x064bd415,
- 0x03d0002d, 0x01800174, 0x028000c2, 0x03800035,
- 0x02800040, 0x0380004b, 0x03800056, 0x02800076,
- 0x02800076, 0x040f7025, 0x01868039, 0x02026016,
- 0x0280003d, 0x06600025, 0x050f80ff, 0x073fa00a,
- 0x0600000b, 0x02025016, 0x02400029, 0x03800078,
- 0x050f7021, 0x01868044, 0x00022016, 0x03800048,
- 0x07600021, 0x050f80ff, 0x073fa00a, 0x0600000b,
- 0x00021016, 0x02400029, 0x03800078, 0x040f7023,
- 0x0086804f, 0x00024016, 0x03800053, 0x06600023,
- 0x050f80ff, 0x073fa00a, 0x0600000b, 0x02023016,
- 0x02400029, 0x03800078, 0x04600816, 0x050f80ff,
- 0x012fa839, 0x06780004, 0x07ffff00, 0x037c00ff,
- 0x05000700, 0x06810062, 0x0448e001, 0x04818062,
- 0x07a000a9, 0x03800078, 0x040fd016, 0x03800078,
- 0x0279f015, 0x07ffffff, 0x04818076, 0x060ff015,
- 0x03d00069, 0x03800071, 0x02800073, 0x02800076,
- 0x02800076, 0x02800076, 0x02800076, 0x02800076,
- 0x02800076, 0x03e00000, 0x02800008, 0x04908073,
- 0x010140e1, 0x03800078, 0x060fc010, 0x06a0059b,
- 0x02800008, 0x072e4800, 0x03016011, 0x0186807e,
- 0x060fc010, 0x07c00000, 0x00011010, 0x0647f016,
- 0x072d000c, 0x009b8080, 0x04600816, 0x050f80ff,
- 0x012fa839, 0x0249f001, 0x04818097, 0x06780004,
- 0x07ffff00, 0x037c00ff, 0x07000300, 0x0481809b,
- 0x0448e001, 0x0481809b, 0x0079c101, 0x07ffffff,
- 0x007a0b01, 0x03800000, 0x04600816, 0x050f80ff,
- 0x012fa80a, 0x062d0008, 0x038000a9, 0x062d0008,
- 0x00011016, 0x052e4c00, 0x07c00000, 0x062d0008,
- 0x040fd016, 0x07c00000, 0x030160eb, 0x0249f016,
- 0x0481807f, 0x04600816, 0x050f80ff, 0x012fa839,
+ 0x070a9005, 0x050ae006, 0x0593866f, 0x07602818,
+ 0x050f80ff, 0x012fa809, 0x04002001, 0x0279ff01,
+ 0x070000ff, 0x007a0101, 0x07500000, 0x060af001,
+ 0x04780102, 0x07ffff00, 0x020b0002, 0x007a0107,
+ 0x07000030, 0x03800671, 0x007a0107, 0x06000020,
+ 0x06489076, 0x07810674, 0x06446007, 0x060a0007,
+ 0x062d0002, 0x0080049d, 0x06602e75, 0x050f80ff,
+ 0x032fa009, 0x060ff07a, 0x05500400, 0x070000ff,
+ 0x06473076, 0x06602e75, 0x050f80ff, 0x032fa00a,
+ 0x04007075, 0x05a0045f, 0x007a0101, 0x03010000,
+ 0x06303008, 0x07008800, 0x074d0005, 0x06600a75,
+ 0x050f80ff, 0x073fa009, 0x07000003, 0x07f00000,
+ 0x054b0406, 0x045a0404, 0x050040ff, 0x0600600e,
+ 0x072d0003, 0x009b8691, 0x05938696, 0x073aa000,
+ 0x06000004, 0x050a4000, 0x060a5001, 0x060a6002,
+ 0x050a7003, 0x040a8004, 0x070a9005, 0x050ae006,
+ 0x049386ad, 0x07602818, 0x050f80ff, 0x012fa809,
+ 0x04002001, 0x0279ff01, 0x070000ff, 0x007a0101,
+ 0x07500000, 0x060af001, 0x04780102, 0x07ffff00,
+ 0x020b0002, 0x04307920, 0x0700000f, 0x038006af,
+ 0x04307920, 0x0600000e, 0x06307d20, 0x0600000e,
+ 0x0648c076, 0x048186b5, 0x04307920, 0x0600000e,
+ 0x06489076, 0x078106b8, 0x06446007, 0x060a0007,
+ 0x062d0002, 0x0080049d, 0x072d0003, 0x019b86bb,
+ 0x070ff0f6, 0x03687eff, 0x058186bd, 0x050f2074,
+ 0x06489076, 0x068106c4, 0x06446007, 0x060a0007,
+ 0x040070fb, 0x049386c8, 0x066a9007, 0x050f40ff,
+ 0x062d0002, 0x0080049d, 0x01208060, 0x0600901f,
+ 0x05002021, 0x028006e0, 0x040080fb, 0x066ae108,
+ 0x06009075, 0x04002076, 0x028006e0, 0x03201100,
+ 0x048486d9, 0x06420001, 0x048186d5, 0x028006f7,
+ 0x020e0008, 0x07c00000, 0x03201100, 0x058486ed,
+ 0x06420001, 0x048186dc, 0x028006f7, 0x050fd009,
+ 0x040fd008, 0x03201100, 0x058486e7, 0x06420001,
+ 0x048186e3, 0x028006f7, 0x007a0102, 0x04000101,
+ 0x05600809, 0x050f80ff, 0x073fa00a, 0x06000001,
+ 0x020e0008, 0x068406f1, 0x030e0009, 0x07c00000,
+ 0x01011009, 0x052e4300, 0x07c00000, 0x052e400f,
+ 0x01208090, 0x038006d4, 0x070fc0ff, 0x040f8013,
+ 0x032fa009, 0x038006fa, 0x05008006, 0x05007005,
+ 0x06006004, 0x07005003, 0x04004002, 0x06003001,
+ 0x07c00000, 0xf06a0be7, 0x02800004, 0x00000000,
+ 0x0000a000, 0x00000621, 0x033d0aaa, 0x070aaaaa,
+ 0x013d1aaa, 0x070aaaaa, 0x008c041c, 0x048e04cb,
+ 0x058d04d7, 0x028f053e, 0x02910013, 0x040f7029,
+ 0x02860013, 0x066c001f, 0x07810559, 0x066c0a1f,
+ 0x06810586, 0x040f702f, 0x0386001d, 0x06000010,
+ 0x050fb000, 0x066c0079, 0x068105c7, 0x0398001d,
+ 0x03400000, 0x076c0a00, 0x04818016, 0x07960021,
+ 0x05998021, 0x06a0009e, 0x02800008, 0x050f7012,
+ 0x04a683f7, 0x04908008, 0x030150e1, 0x06780015,
+ 0x07fffff0, 0x06810064, 0x0079fe15, 0x031fffff,
+ 0x030160ff, 0x064bd415, 0x03d0002d, 0x0180019f,
+ 0x038000d4, 0x03800035, 0x02800040, 0x0380004b,
+ 0x03800056, 0x02800076, 0x02800076, 0x040f7025,
+ 0x01868039, 0x02026016, 0x0280003d, 0x06600025,
+ 0x050f80ff, 0x073fa00a, 0x0600000b, 0x02025016,
+ 0x02400029, 0x03800078, 0x050f7021, 0x01868044,
+ 0x00022016, 0x03800048, 0x07600021, 0x050f80ff,
+ 0x073fa00a, 0x0600000b, 0x00021016, 0x02400029,
+ 0x03800078, 0x040f7023, 0x0086804f, 0x00024016,
+ 0x03800053, 0x06600023, 0x050f80ff, 0x073fa00a,
+ 0x0600000b, 0x02023016, 0x02400029, 0x03800078,
+ 0x04600816, 0x050f80ff, 0x012fa839, 0x06780004,
+ 0x07ffff00, 0x037c00ff, 0x05000700, 0x06810062,
+ 0x0448e001, 0x04818062, 0x07a000bb, 0x03800078,
+ 0x040fd016, 0x03800078, 0x0279f015, 0x07ffffff,
+ 0x04818076, 0x060ff015, 0x03d00069, 0x03800071,
+ 0x02800073, 0x02800076, 0x02800076, 0x02800076,
+ 0x02800076, 0x02800076, 0x02800076, 0x03e00000,
+ 0x02800008, 0x04908073, 0x010140e1, 0x03800078,
+ 0x060fc010, 0x06a00619, 0x02800008, 0x072e4800,
+ 0x03016011, 0x0186807e, 0x060fc010, 0x07c00000,
+ 0x00011010, 0x0647f016, 0x072d000c, 0x009b8080,
+ 0x04600816, 0x050f80ff, 0x012fa839, 0x0249f001,
+ 0x04818097, 0x06780004, 0x07ffff00, 0x037c00ff,
+ 0x07000300, 0x0481809b, 0x0448e001, 0x0481809b,
+ 0x0079c101, 0x07ffffff, 0x007a0b01, 0x03800000,
+ 0x04600816, 0x050f80ff, 0x012fa80a, 0x062d0008,
+ 0x038000bb, 0x062d0008, 0x00011016, 0x052e4c00,
+ 0x07c00000, 0x062d0008, 0x040fd016, 0x07c00000,
+ 0x030160eb, 0x0249f016, 0x0481807f, 0x04600816,
+ 0x050f80ff, 0x012fa839, 0x01494005, 0x068100b6,
+ 0x06783f01, 0x03800060, 0x027c0501, 0x02800020,
+ 0x0581809c, 0x040f7025, 0x018680af, 0x02026016,
+ 0x028000b3, 0x06600025, 0x050f80ff, 0x073fa00a,
+ 0x0600000b, 0x02025016, 0x02400029, 0x07c00000,
0x06783f01, 0x03800060, 0x007c0b01, 0x03800000,
0x0581809c, 0x06601807, 0x070030ff, 0x050f80ff,
0x012fa809, 0x050f8003, 0x073fa00a, 0x0600000b,
- 0x040f7001, 0x038600b7, 0x04600201, 0x050f80ff,
+ 0x040f7001, 0x038600c9, 0x04600201, 0x050f80ff,
0x073fa00a, 0x0600000b, 0x07c00000, 0x050f702e,
- 0x008680bc, 0x0002e016, 0x0202f016, 0x028000c1,
+ 0x008680ce, 0x0002e016, 0x0202f016, 0x028000d3,
0x0760002e, 0x050f80ff, 0x073fa00a, 0x0600000b,
0x0002e016, 0x07c00000, 0x0430e004, 0x03080000,
0x06601216, 0x050f80ff, 0x073fa011, 0x07000005,
0x07f00000, 0x0660000b, 0x050f80ff, 0x022fa019,
0x0700c000, 0x0279ff02, 0x0700ffff, 0x00017002,
- 0x0760220a, 0x050f80ff, 0x012fa809, 0x0079fe01,
- 0x0700ffff, 0x055c0417, 0x06818162, 0x0400d010,
- 0x0548e00c, 0x078100db, 0x0245600e, 0x0548400c,
- 0x068100e3, 0x07300000, 0x05001000, 0x04602c16,
- 0x050f80ff, 0x032fa00a, 0x0644900e, 0x07600a0a,
+ 0x0760280a, 0x050f80ff, 0x012fa809, 0x0079fe01,
+ 0x0700ffff, 0x055c0417, 0x0781818d, 0x0400d010,
+ 0x0548e00c, 0x078100ed, 0x0245600e, 0x0548400c,
+ 0x078100f5, 0x07300000, 0x05001000, 0x04602c16,
+ 0x050f80ff, 0x032fa00a, 0x0644900e, 0x0560100a,
0x050f80ff, 0x032fa039, 0x02015002, 0x064b0015,
0x0379ff03, 0x070000ff, 0x01018003, 0x05420418,
- 0x058180ee, 0x0045700e, 0x0179fe06, 0x070000ff,
- 0x0700f0ff, 0x06006010, 0x04007010, 0x0760220a,
+ 0x07818100, 0x0045700e, 0x0179fe06, 0x070000ff,
+ 0x0700f0ff, 0x06006010, 0x04007010, 0x0760280a,
0x050f80ff, 0x073fa009, 0x06000004, 0x07f00000,
0x064b8408, 0x040080ce, 0x04500408, 0x050f80ff,
0x073fa009, 0x06000004, 0x07f00000, 0x04603216,
0x050f80ff, 0x063fa02a, 0x06000002, 0x0769ff00,
- 0x076c9000, 0x04810108, 0x076cd400, 0x07818109,
- 0x0444b00e, 0x0368060f, 0x00d0010b, 0x00800115,
- 0x00800110, 0x01800117, 0x0180010f, 0x00800162,
- 0x007a010e, 0x07001800, 0x076c3000, 0x02a182a2,
- 0x07818147, 0x0220f002, 0x0180011e, 0x0120d081,
- 0x007a010e, 0x05001000, 0x076c3000, 0x02a182a2,
- 0x07818147, 0x0220f004, 0x0548400c, 0x04810125,
- 0x0220f00e, 0x0444100d, 0x0748600c, 0x04810125,
- 0x0444200d, 0x0548700c, 0x05810128, 0x0644900d,
- 0x024a1815, 0x004a2c15, 0x04500415, 0x070030ff,
- 0x0700000f, 0x017a0100, 0x05004000, 0x0400100e,
- 0x05304000, 0x07000030, 0x04002010, 0x0600500d,
- 0x0700600a, 0x0400700b, 0x05008017, 0x06600616,
- 0x050f80ff, 0x022fa04a, 0x0448b00e, 0x05818056,
- 0x050f7027, 0x02868140, 0x00028016, 0x01800144,
- 0x07600027, 0x050f80ff, 0x073fa00a, 0x0600000b,
- 0x00027016, 0x02400029, 0x03800078, 0x040fd016,
- 0x050fd00a, 0x07600a0a, 0x050f80ff, 0x032fa009,
- 0x05780100, 0x07ffff00, 0x017a0700, 0x06000001,
- 0x050f80ff, 0x032fa00a, 0x07f00000, 0x05600e0a,
- 0x050f80ff, 0x022fa019, 0x05780100, 0x07ffff00,
- 0x076a0500, 0x00202001, 0x0560200a, 0x050f80ff,
- 0x012fa809, 0x06003010, 0x05600e0a, 0x050f80ff,
- 0x032fa022, 0x0180016c, 0x050fd00a, 0x07600a0a,
- 0x050f80ff, 0x032fa009, 0x0379ff00, 0x0380ffff,
- 0x0145b000, 0x07600a0a, 0x050f80ff, 0x032fa00a,
- 0x07303000, 0x07000030, 0x04600e16, 0x050f80ff,
- 0x053fa80a, 0x06000001, 0x07a003a0, 0x03800078,
- 0x06600616, 0x050f80ff, 0x012fa841, 0x0079fe01,
- 0x070000ff, 0x070090ff, 0x0400d010, 0x0600a007,
- 0x0400b008, 0x07600a0a, 0x050f80ff, 0x032fa009,
- 0x0769ff00, 0x0660000b, 0x050f80ff, 0x073fa009,
- 0x07000006, 0x07f00000, 0x04602c16, 0x050f80ff,
- 0x053fa809, 0x0600000b, 0x07479017, 0x056c0e09,
- 0x0481018f, 0x076c0c09, 0x00a1859b, 0x0560160a,
+ 0x076c9000, 0x0481011a, 0x076cd400, 0x0781811b,
+ 0x0444b00e, 0x0368060f, 0x01d0011d, 0x0080013e,
+ 0x01800139, 0x00800140, 0x01800121, 0x056cea00,
+ 0x0781818d, 0x0748300f, 0x05810135, 0x0560260a,
+ 0x050f80ff, 0x073fa009, 0x06000002, 0x06005010,
+ 0x06006010, 0x04602616, 0x050f80ff, 0x063fa01a,
+ 0x06000002, 0x07f00000, 0x0760180a, 0x050f80ff,
+ 0x053fa812, 0x06000002, 0x07f00000, 0x027a030d,
+ 0x03080000, 0x0444b00e, 0x01800139, 0x007a010e,
+ 0x07001800, 0x076c3000, 0x03a182e4, 0x07818172,
+ 0x0220f002, 0x01800147, 0x0120d081, 0x007a010e,
+ 0x05001000, 0x076c3000, 0x03a182e4, 0x07818172,
+ 0x0220f004, 0x0548400c, 0x0581014e, 0x0220f00e,
+ 0x0444100d, 0x0748600c, 0x0581014e, 0x0444200d,
+ 0x056cea00, 0x05810153, 0x0548700c, 0x05810153,
+ 0x0644900d, 0x024a1815, 0x004a2c15, 0x04500415,
+ 0x070030ff, 0x0700000f, 0x017a0100, 0x05004000,
+ 0x0400100e, 0x05304000, 0x07000030, 0x04002010,
+ 0x0600500d, 0x0700600a, 0x0400700b, 0x05008017,
+ 0x06600616, 0x050f80ff, 0x022fa04a, 0x0448b00e,
+ 0x05818056, 0x050f7027, 0x0286816b, 0x00028016,
+ 0x0180016f, 0x07600027, 0x050f80ff, 0x073fa00a,
+ 0x0600000b, 0x00027016, 0x02400029, 0x03800078,
+ 0x040fd016, 0x050fd00a, 0x0560100a, 0x050f80ff,
+ 0x032fa009, 0x05780100, 0x07ffff00, 0x017a0700,
+ 0x06000001, 0x050f80ff, 0x032fa00a, 0x07f00000,
+ 0x0760140a, 0x050f80ff, 0x022fa019, 0x05780100,
+ 0x07ffff00, 0x076a0500, 0x00202001, 0x0560260a,
+ 0x050f80ff, 0x012fa809, 0x06003010, 0x0760140a,
+ 0x050f80ff, 0x032fa022, 0x00800197, 0x050fd00a,
+ 0x0560100a, 0x050f80ff, 0x032fa009, 0x0379ff00,
+ 0x0380ffff, 0x0145b000, 0x0560100a, 0x050f80ff,
+ 0x032fa00a, 0x07303000, 0x07000030, 0x04600e16,
+ 0x050f80ff, 0x053fa80a, 0x06000001, 0x06a003e6,
+ 0x03800078, 0x06600616, 0x050f80ff, 0x012fa841,
+ 0x0079fe01, 0x070000ff, 0x070090ff, 0x0400d010,
+ 0x0600a007, 0x0400b008, 0x0560100a, 0x050f80ff,
+ 0x032fa009, 0x0769ff00, 0x0660000b, 0x050f80ff,
+ 0x073fa009, 0x07000006, 0x07f00000, 0x04602c16,
+ 0x050f80ff, 0x053fa809, 0x0600000b, 0x07479017,
+ 0x056c0e09, 0x058101bd, 0x076c0c09, 0x058101bd,
+ 0x050fd009, 0x06a00619, 0x03800078, 0x05601c0a,
0x050f80ff, 0x053fa809, 0x06000007, 0x07f00000,
- 0x074b000f, 0x0368060f, 0x00d00197, 0x0080019b,
- 0x00800213, 0x008001d0, 0x0080023b, 0x0748f00f,
- 0x05810239, 0x0530e042, 0x02080002, 0x0578400f,
- 0x06000020, 0x017c40ff, 0x06000020, 0x068181a7,
- 0x0748500c, 0x048101a7, 0x03459017, 0x04602c16,
- 0x050f80ff, 0x053fa80a, 0x0600000b, 0x0569800f,
- 0x068181b3, 0x0548d00f, 0x068181b0, 0x0644a00e,
- 0x056c0e09, 0x058101be, 0x0080023d, 0x050010ff,
- 0x046c8001, 0x078181c5, 0x056c0e09, 0x058101be,
- 0x05601a0a, 0x050f80ff, 0x012fa809, 0x04780101,
- 0x07ffff00, 0x0481023d, 0x01498017, 0x048101c1,
- 0x0644900e, 0x06300001, 0x04000410, 0x05a00253,
- 0x03800035, 0x026d0001, 0x048101c8, 0x0080023b,
- 0x0530e042, 0x02080002, 0x04a00270, 0x06818237,
- 0x07300003, 0x05000430, 0x05a00253, 0x03800056,
- 0x0630e445, 0x02080002, 0x056c0e09, 0x0681823d,
- 0x0748f00f, 0x058101dd, 0x0569800f, 0x0681823b,
- 0x0548d00f, 0x068181df, 0x007a010e, 0x06000010,
- 0x008001e5, 0x0246a00e, 0x008001e5, 0x0246a00e,
- 0x0748500f, 0x048101e5, 0x0748500c, 0x048101e5,
- 0x03459017, 0x0349a017, 0x068181ec, 0x04602c16,
- 0x050f80ff, 0x053fa80a, 0x0600000b, 0x018001f6,
- 0x0747a017, 0x05001017, 0x05601c0a, 0x050f80ff,
- 0x073fa009, 0x06000001, 0x07f00000, 0x04602c16,
- 0x050f80ff, 0x012fa812, 0x01498017, 0x048101fb,
- 0x0644900e, 0x0279ff0e, 0x07ffffeb, 0x0448700e,
- 0x0481020d, 0x06601216, 0x050f80ff, 0x012fa809,
- 0x07f00000, 0x04600201, 0x050f80ff, 0x012fa809,
- 0x07f00000, 0x04600e01, 0x050f80ff, 0x012fa809,
- 0x060ff001, 0x075a00ff, 0x0481020d, 0x0279ff0e,
- 0x07ffffeb, 0x04a00270, 0x06818237, 0x07300003,
- 0x05000430, 0x05a00253, 0x03800056, 0x056c0e09,
- 0x0681823d, 0x0430e001, 0x02080002, 0x0644000d,
- 0x0748f00f, 0x05810224, 0x0569800f, 0x0681823b,
- 0x0578400f, 0x06000020, 0x017c40ff, 0x06000020,
- 0x07818224, 0x0748500c, 0x05810224, 0x03459017,
+ 0x074b000f, 0x0748300f, 0x058101ca, 0x07446000,
0x04602c16, 0x050f80ff, 0x053fa80a, 0x0600000b,
- 0x04a00270, 0x06818237, 0x01498017, 0x05810233,
- 0x0644900e, 0x0630000e, 0x04000420, 0x0748600c,
- 0x05810235, 0x0444200d, 0x01800235, 0x06300004,
- 0x04000420, 0x05a00253, 0x03800035, 0x02200010,
- 0x0080023e, 0x02200001, 0x0080023e, 0x03200006,
- 0x0080023e, 0x02200004, 0x040fd016, 0x050fd00a,
- 0x050fd000, 0x05600e0a, 0x050f80ff, 0x032fa00a,
+ 0x0368060f, 0x01d001cc, 0x008001d0, 0x0180024b,
+ 0x00800208, 0x0180027d, 0x0748f00f, 0x0581027b,
+ 0x0530e042, 0x02080002, 0x0578400f, 0x06000020,
+ 0x017c40ff, 0x06000020, 0x068181dc, 0x0748500c,
+ 0x048101dc, 0x03459017, 0x04602c16, 0x050f80ff,
+ 0x053fa80a, 0x0600000b, 0x0569800f, 0x078181e8,
+ 0x0548d00f, 0x068181e5, 0x0644a00e, 0x056c0e09,
+ 0x058101f3, 0x0080027f, 0x050010ff, 0x046c8001,
+ 0x078181fa, 0x056c0e09, 0x058101f3, 0x0560200a,
+ 0x050f80ff, 0x012fa809, 0x04780101, 0x07ffff00,
+ 0x0481027f, 0x01498017, 0x058101f6, 0x0644900e,
+ 0x06300001, 0x04000410, 0x05a00295, 0x03800035,
+ 0x026d0001, 0x048101fd, 0x0180027d, 0x0530e042,
+ 0x02080002, 0x01498017, 0x04810202, 0x0644900e,
+ 0x05a002b2, 0x06818279, 0x07300003, 0x05000430,
+ 0x05a00295, 0x03800056, 0x0630e445, 0x02080002,
+ 0x056c0e09, 0x0681827f, 0x0748f00f, 0x04810215,
+ 0x0569800f, 0x0781827d, 0x0548d00f, 0x07818217,
+ 0x007a010e, 0x06000010, 0x0180021d, 0x0246a00e,
+ 0x0180021d, 0x0246a00e, 0x0748500f, 0x0581021d,
+ 0x0748500c, 0x0581021d, 0x03459017, 0x0349a017,
+ 0x07818224, 0x04602c16, 0x050f80ff, 0x053fa80a,
+ 0x0600000b, 0x0180022e, 0x0747a017, 0x05001017,
+ 0x0760220a, 0x050f80ff, 0x073fa009, 0x06000001,
+ 0x07f00000, 0x04602c16, 0x050f80ff, 0x012fa812,
+ 0x01498017, 0x05810233, 0x0644900e, 0x0279ff0e,
+ 0x07ffffeb, 0x0448700e, 0x04810245, 0x06601216,
+ 0x050f80ff, 0x012fa809, 0x07f00000, 0x04600201,
+ 0x050f80ff, 0x012fa809, 0x07f00000, 0x06601401,
+ 0x050f80ff, 0x012fa809, 0x060ff001, 0x075a00ff,
+ 0x04810245, 0x0279ff0e, 0x07ffffeb, 0x05a002b2,
+ 0x06818279, 0x07300003, 0x05000430, 0x05a00295,
+ 0x03800056, 0x056c0e09, 0x0681827f, 0x0430e001,
+ 0x02080002, 0x0644000d, 0x0447400d, 0x0748f00f,
+ 0x05810265, 0x0569800f, 0x0781827d, 0x0578400f,
+ 0x06000020, 0x017c40ff, 0x06000020, 0x0681825e,
+ 0x0748500c, 0x0481025e, 0x03459017, 0x01800265,
+ 0x0049100d, 0x07818265, 0x0548700c, 0x07818265,
+ 0x07486000, 0x07818265, 0x0045400d, 0x04602c16,
+ 0x050f80ff, 0x053fa80a, 0x0600000b, 0x05a002b2,
+ 0x06818279, 0x01498017, 0x04810275, 0x0644900e,
+ 0x0444100d, 0x0630000e, 0x04000420, 0x0748600c,
+ 0x05810277, 0x0444200d, 0x01800277, 0x06300004,
+ 0x04000420, 0x05a00295, 0x03800035, 0x02200010,
+ 0x00800280, 0x02200001, 0x00800280, 0x03200006,
+ 0x00800280, 0x02200004, 0x040fd016, 0x050fd00a,
+ 0x050fd000, 0x0760140a, 0x050f80ff, 0x032fa00a,
0x07f00000, 0x04600e16, 0x050f80ff, 0x053fa809,
0x06000001, 0x05780103, 0x070000ff, 0x017a0103,
0x07000600, 0x04600e16, 0x050f80ff, 0x053fa80a,
- 0x06000001, 0x07a003a0, 0x03800078, 0x05600e0a,
+ 0x06000001, 0x06a003e6, 0x03800078, 0x0760140a,
0x050f80ff, 0x053fa809, 0x06000001, 0x07f00000,
0x074b0003, 0x034a1803, 0x014a2c03, 0x05500403,
0x070030ff, 0x0400100e, 0x04002010, 0x04600e16,
@@ -27124,74 +15982,75 @@ static const uint32_t isp_2500_multi_risc_code[] = {
0x0700600a, 0x0400700b, 0x0460040b, 0x050f80ff,
0x073fa009, 0x06000004, 0x0279ff08, 0x0700ffff,
0x06600616, 0x050f80ff, 0x022fa04a, 0x07c00000,
- 0x03681e00, 0x070090ff, 0x076c2400, 0x0581028b,
- 0x056cf400, 0x05810278, 0x076ce400, 0x0681829d,
- 0x0748000f, 0x0581027b, 0x0444b00d, 0x0548100f,
- 0x0581027e, 0x0444700e, 0x07a0031e, 0x078182a0,
- 0x05601c0a, 0x050f80ff, 0x0448b00d, 0x05810287,
- 0x073fa009, 0x06000004, 0x00800291, 0x043fa819,
- 0x06000002, 0x05008005, 0x00800291, 0x05601c0a,
+ 0x03681e00, 0x070090ff, 0x076c2400, 0x048102cd,
+ 0x056cf400, 0x048102ba, 0x076ce400, 0x068182df,
+ 0x0748000f, 0x058102bd, 0x0444b00d, 0x0548100f,
+ 0x058102c0, 0x0444700e, 0x06a00364, 0x078182e2,
+ 0x0760220a, 0x050f80ff, 0x0448b00d, 0x058102c9,
+ 0x073fa009, 0x06000004, 0x008002d3, 0x043fa819,
+ 0x06000002, 0x05008005, 0x008002d3, 0x0760220a,
0x050f80ff, 0x043fa819, 0x06000002, 0x05008005,
- 0x0500100a, 0x06780007, 0x07ffff00, 0x05810295,
- 0x0245500e, 0x0560100a, 0x050f80ff, 0x053fa809,
+ 0x0500100a, 0x06780007, 0x07ffff00, 0x058102d7,
+ 0x0245500e, 0x0560160a, 0x050f80ff, 0x053fa809,
0x06000001, 0x0379ff03, 0x070000ff, 0x01018003,
- 0x018002d2, 0x040fd016, 0x050fd00a, 0x0280059b,
+ 0x03800318, 0x040fd016, 0x050fd00a, 0x02800619,
0x056a02ff, 0x07c00000, 0x0447400e, 0x03681e00,
- 0x070090ff, 0x076c3000, 0x058102cc, 0x076c9000,
- 0x058102cc, 0x056cd000, 0x048102b0, 0x076cd400,
- 0x048102b0, 0x040fd016, 0x050fd00a, 0x0280059b,
- 0x0748000f, 0x048102b3, 0x0444700e, 0x0548100f,
- 0x048102b6, 0x0444b00d, 0x07a0031e, 0x068182cb,
- 0x0448700d, 0x078182d1, 0x0644500e, 0x070ff009,
+ 0x070090ff, 0x076c3000, 0x07810312, 0x076c9000,
+ 0x07810312, 0x056cea00, 0x068182ef, 0x02209008,
+ 0x03800312, 0x056cd000, 0x058102f6, 0x076cd400,
+ 0x058102f6, 0x040fd016, 0x050fd00a, 0x02800619,
+ 0x0748000f, 0x058102f9, 0x0444700e, 0x0548100f,
+ 0x058102fc, 0x0444b00d, 0x06a00364, 0x05818311,
+ 0x0448700d, 0x05818317, 0x0644500e, 0x070ff009,
0x0550041b, 0x050f80ff, 0x073fa009, 0x06000001,
- 0x03200009, 0x02400002, 0x04488004, 0x058102c6,
- 0x02400002, 0x0320000c, 0x07003018, 0x06601816,
+ 0x0320000c, 0x02400002, 0x04488004, 0x0781030c,
+ 0x02400002, 0x0320000f, 0x07003018, 0x06601816,
0x050f80ff, 0x032fa022, 0x075c00ff, 0x07c00000,
- 0x0500100a, 0x0560200a, 0x050f80ff, 0x053fa809,
- 0x07000003, 0x04008010, 0x04a002da, 0x068182d9,
+ 0x0500100a, 0x0560260a, 0x050f80ff, 0x053fa809,
+ 0x07000003, 0x04008010, 0x06a00320, 0x0481831f,
0x07003018, 0x06601816, 0x050f80ff, 0x022fa04a,
0x075c00ff, 0x07c00000, 0x070ff009, 0x0550041b,
0x050f80ff, 0x073fa009, 0x06000001, 0x0448b00d,
- 0x068182e3, 0x0448700e, 0x058102e7, 0x02400002,
- 0x0049700d, 0x058102e7, 0x02400002, 0x05a002f6,
- 0x068182f4, 0x060ff001, 0x05500400, 0x050f80ff,
+ 0x04818329, 0x0448700e, 0x0781032d, 0x02400002,
+ 0x0049700d, 0x0781032d, 0x02400002, 0x07a0033c,
+ 0x0581833a, 0x060ff001, 0x05500400, 0x050f80ff,
0x063fa019, 0x06000002, 0x07f00000, 0x07420018,
- 0x058102f5, 0x02400002, 0x05a002f6, 0x058102f5,
+ 0x0681033b, 0x02400002, 0x07a0033c, 0x0681033b,
0x056a02ff, 0x07c00000, 0x070ff01d, 0x00540402,
- 0x01d002f9, 0x018002ff, 0x02800301, 0x03800303,
- 0x03800305, 0x02800307, 0x03800309, 0x03200006,
- 0x0280031c, 0x03200009, 0x0280031c, 0x0320000c,
- 0x0280031c, 0x0320000f, 0x0280031c, 0x03200012,
- 0x0280031c, 0x04600201, 0x050f80ff, 0x012fa809,
- 0x040f7001, 0x03860318, 0x06600a01, 0x050f80ff,
+ 0x03d0033f, 0x02800345, 0x03800347, 0x02800349,
+ 0x0380034b, 0x0380034d, 0x0280034f, 0x03200009,
+ 0x02800362, 0x0320000c, 0x02800362, 0x0320000f,
+ 0x02800362, 0x03200012, 0x02800362, 0x02200015,
+ 0x02800362, 0x04600201, 0x050f80ff, 0x012fa809,
+ 0x040f7001, 0x0286035e, 0x04601001, 0x050f80ff,
0x073fa009, 0x06000001, 0x02681e02, 0x0550041b,
- 0x050f80ff, 0x073fa009, 0x06000001, 0x018002f6,
- 0x040fd016, 0x040fd002, 0x056a02ff, 0x0380031d,
+ 0x050f80ff, 0x073fa009, 0x06000001, 0x0380033c,
+ 0x040fd016, 0x040fd002, 0x056a02ff, 0x03800363,
0x075c00ff, 0x07c00000, 0x0560020a, 0x050f80ff,
- 0x053fa809, 0x06000007, 0x050f700f, 0x0286039e,
- 0x07600a0f, 0x050f80ff, 0x053fa809, 0x06000004,
- 0x0769ff09, 0x056c9409, 0x0481839e, 0x0760240a,
+ 0x053fa809, 0x06000007, 0x050f700f, 0x038603e4,
+ 0x0560100f, 0x050f80ff, 0x053fa809, 0x06000004,
+ 0x0769ff09, 0x056c9409, 0x058183e4, 0x05602a0a,
0x050f80ff, 0x063fa019, 0x07000003, 0x07000006,
- 0x0079fe07, 0x070000ff, 0x050010ff, 0x07600c0f,
+ 0x0079fe07, 0x070000ff, 0x050010ff, 0x0760120f,
0x050f80ff, 0x063fa019, 0x06000002, 0x0379ff05,
0x070000ff, 0x074b0c05, 0x055a0405, 0x070050ff,
0x0079fe04, 0x070000ff, 0x050020ff, 0x064b0c04,
0x045a0402, 0x050020ff, 0x064b0004, 0x04487004,
- 0x0681034c, 0x0379ff05, 0x070000ff, 0x04488004,
- 0x04818352, 0x04007010, 0x04008010, 0x04444004,
- 0x04488004, 0x06810367, 0x02680604, 0x076c06ff,
- 0x04818352, 0x00464004, 0x0045700d, 0x0045800e,
- 0x0760140f, 0x050f80ff, 0x073fa009, 0x0700000c,
- 0x07f00000, 0x074b0018, 0x0560040a, 0x050f80ff,
+ 0x06810392, 0x0379ff05, 0x070000ff, 0x04488004,
+ 0x04818398, 0x04007010, 0x04008010, 0x04444004,
+ 0x04488004, 0x068103ad, 0x02680604, 0x076c06ff,
+ 0x04818398, 0x00464004, 0x0045700d, 0x0045800e,
+ 0x05601a0f, 0x050f80ff, 0x073fa009, 0x0700000c,
+ 0x07f00000, 0x074b0018, 0x07600a0a, 0x050f80ff,
0x053fa809, 0x06000001, 0x050f80ff, 0x073fa00a,
0x06000008, 0x07f00000, 0x06604e16, 0x050f80ff,
0x053fa80a, 0x06000001, 0x07f00000, 0x04605816,
0x050f80ff, 0x073fa00a, 0x07000003, 0x06486004,
- 0x0481837f, 0x04780107, 0x07ffff00, 0x004a8c07,
+ 0x058183c5, 0x04780107, 0x07ffff00, 0x004a8c07,
0x04780107, 0x07ff0000, 0x004a8007, 0x045a0407,
0x045a0404, 0x050040ff, 0x06780008, 0x07ff00ff,
0x0279ff08, 0x0700ff00, 0x014c80ff, 0x044d8008,
- 0x045a0408, 0x070030ff, 0x03800396, 0x04780107,
+ 0x045a0408, 0x070030ff, 0x028003dc, 0x04780107,
0x07ffff00, 0x0079fe08, 0x070000ff, 0x045a0407,
0x050070ff, 0x06780007, 0x07ff00ff, 0x0279ff07,
0x0700ff00, 0x054d80ff, 0x004c8007, 0x045a0407,
@@ -27200,135 +16059,149 @@ static const uint32_t isp_2500_multi_risc_code[] = {
0x045a0404, 0x050040ff, 0x04603e16, 0x050f80ff,
0x022fa032, 0x0500100f, 0x05007006, 0x01681f09,
0x075c00ff, 0x07c00000, 0x056a02ff, 0x07c00000,
- 0x050f7012, 0x028603a7, 0x06600013, 0x050f80ff,
+ 0x050f7012, 0x038603ed, 0x06600013, 0x050f80ff,
0x073fa00a, 0x0600000b, 0x07c00000, 0x070ff0e2,
0x077800ff, 0x033e0000, 0x077400ff, 0x031a0000,
- 0x078203cc, 0x078103cc, 0x00012016, 0x02013016,
+ 0x05820412, 0x05810412, 0x00012016, 0x02013016,
0x07c00000, 0x070ff0e2, 0x077800ff, 0x033e0000,
- 0x077400ff, 0x031a0000, 0x068203b9, 0x068103b9,
+ 0x077400ff, 0x031a0000, 0x078203ff, 0x078103ff,
0x07c00000, 0x03016012, 0x06600016, 0x050f80ff,
0x032fa009, 0x07f00000, 0x06600016, 0x050f80ff,
- 0x073fa00a, 0x06000008, 0x050f7000, 0x038603c6,
- 0x01012000, 0x028003c8, 0x00012010, 0x02013010,
+ 0x073fa00a, 0x06000008, 0x050f7000, 0x0186040c,
+ 0x01012000, 0x0080040e, 0x00012010, 0x02013010,
0x04600816, 0x050f80ff, 0x073fa009, 0x06000007,
0x0647f00e, 0x007a010e, 0x04000101, 0x04600816,
0x050f80ff, 0x073fa00a, 0x06000007, 0x072e0030,
0x020e0016, 0x07c00000, 0x0391000a, 0x0784001d,
- 0x022c0004, 0x046c041f, 0x078103eb, 0x046c021f,
- 0x05810403, 0x066c0c1f, 0x04810415, 0x046c081f,
- 0x05810427, 0x066c061f, 0x05810441, 0x0721f000,
+ 0x022c0004, 0x046c041f, 0x04810431, 0x046c021f,
+ 0x05810481, 0x066c0c1f, 0x05810493, 0x046c081f,
+ 0x058104a5, 0x066c061f, 0x048104bf, 0x0721f000,
0x0202c010, 0x0202a010, 0x02020010, 0x052e5800,
- 0x02b60079, 0x058d0459, 0x0380000c, 0x040f702a,
- 0x038603e4, 0x06000010, 0x04001010, 0x0760122b,
- 0x050f80ff, 0x032fa012, 0x07f00000, 0x06420029,
+ 0x02b60079, 0x058d04d7, 0x0380000c, 0x040f702a,
+ 0x0086042a, 0x06000010, 0x04001010, 0x0760182b,
+ 0x050f80ff, 0x032fa012, 0x07f00000, 0x0460082a,
+ 0x050f80ff, 0x053fa809, 0x06000001, 0x07780003,
+ 0x03400000, 0x05810471, 0x0560102b, 0x050f80ff,
+ 0x032fa009, 0x0769ff00, 0x076c3000, 0x05810448,
+ 0x056cd000, 0x07818471, 0x05601c2b, 0x050f80ff,
+ 0x032fa009, 0x05444000, 0x07445000, 0x032fa00a,
+ 0x06300002, 0x05000430, 0x0660062a, 0x050f80ff,
+ 0x032fa00a, 0x07f00000, 0x0560262b, 0x050f80ff,
+ 0x032fa009, 0x04001010, 0x04002010, 0x0460262a,
+ 0x050f80ff, 0x022fa01a, 0x07f00000, 0x06600a2a,
+ 0x050f80ff, 0x012fa80a, 0x07f00000, 0x0460082a,
+ 0x050f80ff, 0x012fa80a, 0x0079c101, 0x07ffffff,
+ 0x007a0b01, 0x03800000, 0x05780100, 0x07ffff00,
+ 0x0581046c, 0x02455001, 0x0460082a, 0x050f80ff,
+ 0x012fa80a, 0x0201602a, 0x07a000bb, 0x06420029,
0x0660002a, 0x050f80ff, 0x053fa809, 0x06000001,
- 0x050f7003, 0x01860400, 0x01028003, 0x0660002a,
- 0x050f80ff, 0x073fa00a, 0x06000008, 0x01800442,
- 0x00028010, 0x00027010, 0x01800442, 0x040f702a,
- 0x028603e3, 0x06420029, 0x0660002a, 0x050f80ff,
- 0x053fa809, 0x06000001, 0x050f7003, 0x01860412,
+ 0x050f7003, 0x0186047e, 0x01028003, 0x0660002a,
+ 0x050f80ff, 0x073fa00a, 0x06000008, 0x018004c0,
+ 0x00028010, 0x00027010, 0x018004c0, 0x040f702a,
+ 0x00860429, 0x06420029, 0x0660002a, 0x050f80ff,
+ 0x053fa809, 0x06000001, 0x050f7003, 0x01860490,
0x03026003, 0x0660002a, 0x050f80ff, 0x073fa00a,
- 0x06000008, 0x01800442, 0x02026010, 0x02025010,
- 0x01800442, 0x040f702a, 0x028603e3, 0x06420029,
+ 0x06000008, 0x018004c0, 0x02026010, 0x02025010,
+ 0x018004c0, 0x040f702a, 0x00860429, 0x06420029,
0x0660002a, 0x050f80ff, 0x053fa809, 0x06000001,
- 0x050f7003, 0x01860424, 0x01024003, 0x0660002a,
- 0x050f80ff, 0x073fa00a, 0x06000008, 0x00800438,
- 0x00024010, 0x02023010, 0x00800438, 0x040f702a,
- 0x028603e3, 0x06420029, 0x0660002a, 0x050f80ff,
- 0x053fa809, 0x06000001, 0x050f7003, 0x01860436,
+ 0x050f7003, 0x008604a2, 0x01024003, 0x0660002a,
+ 0x050f80ff, 0x073fa00a, 0x06000008, 0x008004b6,
+ 0x00024010, 0x02023010, 0x008004b6, 0x040f702a,
+ 0x00860429, 0x06420029, 0x0660002a, 0x050f80ff,
+ 0x053fa809, 0x06000001, 0x050f7003, 0x018604b4,
0x01022003, 0x0660002a, 0x050f80ff, 0x073fa00a,
- 0x06000008, 0x00800438, 0x00022010, 0x00021010,
- 0x0647f020, 0x007a0120, 0x04000101, 0x05a004cc,
- 0x0400802a, 0x06a00580, 0x009483e3, 0x0721f005,
- 0x038003e4, 0x028003e9, 0x0647f020, 0x06486020,
- 0x07818447, 0x05a004cc, 0x028003e3, 0x007a0120,
- 0x04000101, 0x05a004cc, 0x0400802a, 0x06a00580,
- 0x028003e3, 0x0391000a, 0x070ff0e2, 0x077800ff,
- 0x033e0000, 0x077400ff, 0x031a0000, 0x048283e9,
- 0x040fd02a, 0x052e4003, 0x00208010, 0x06a00580,
- 0x028003e9, 0x0784001d, 0x030150c0, 0x0448e015,
- 0x07818487, 0x0648f015, 0x0681847f, 0x02490015,
- 0x07818477, 0x00491015, 0x0781846f, 0x00492015,
- 0x058104be, 0x033d0000, 0x07000003, 0x039b84be,
+ 0x06000008, 0x008004b6, 0x00022010, 0x00021010,
+ 0x0647f020, 0x007a0120, 0x04000101, 0x06a0054a,
+ 0x0400802a, 0x06a005fe, 0x02948429, 0x0721f005,
+ 0x0080042a, 0x0080042f, 0x0647f020, 0x06486020,
+ 0x078184c5, 0x06a0054a, 0x00800429, 0x007a0120,
+ 0x04000101, 0x06a0054a, 0x0400802a, 0x06a005fe,
+ 0x00800429, 0x0391000a, 0x070ff0e2, 0x077800ff,
+ 0x033e0000, 0x077400ff, 0x031a0000, 0x0682842f,
+ 0x040fd02a, 0x052e4003, 0x00208010, 0x06a005fe,
+ 0x0080042f, 0x0784001d, 0x030150c0, 0x0448e015,
+ 0x05818505, 0x0648f015, 0x068184fd, 0x02490015,
+ 0x078184f5, 0x00491015, 0x078184ed, 0x00492015,
+ 0x0781053c, 0x033d0000, 0x07000003, 0x019b853c,
0x033d0000, 0x06000002, 0x073c0000, 0x06000040,
- 0x052e5200, 0x02200004, 0x0180048e, 0x072d0c00,
- 0x039b8463, 0x052d0800, 0x073c0000, 0x06000020,
- 0x062e5080, 0x03200003, 0x0180048e, 0x072d0300,
- 0x029b8461, 0x052d0200, 0x073c0000, 0x06000010,
- 0x062e5020, 0x02200002, 0x0180048e, 0x072d00c0,
- 0x039b845f, 0x062d0080, 0x073c0000, 0x06000008,
- 0x062e5008, 0x02200001, 0x0180048e, 0x072d0030,
- 0x029b845d, 0x062d0020, 0x073c0000, 0x06000004,
+ 0x052e5200, 0x02200004, 0x0380050c, 0x072d0c00,
+ 0x039b84e1, 0x052d0800, 0x073c0000, 0x06000020,
+ 0x062e5080, 0x03200003, 0x0380050c, 0x072d0300,
+ 0x029b84df, 0x052d0200, 0x073c0000, 0x06000010,
+ 0x062e5020, 0x02200002, 0x0380050c, 0x072d00c0,
+ 0x039b84dd, 0x062d0080, 0x073c0000, 0x06000008,
+ 0x062e5008, 0x02200001, 0x0380050c, 0x072d0030,
+ 0x039b84db, 0x062d0020, 0x073c0000, 0x06000004,
0x062e5002, 0x06000010, 0x0784001d, 0x0392000c,
- 0x050fb000, 0x040f707c, 0x008604ba, 0x046c0279,
- 0x0781849f, 0x0448b07a, 0x058104a6, 0x06000010,
- 0x04001010, 0x0760127b, 0x050f80ff, 0x032fa012,
- 0x0046b07a, 0x02b60079, 0x018004a9, 0x066c0079,
- 0x048104a4, 0x040fd07c, 0x06a0059b, 0x02800008,
- 0x040fd07c, 0x018004a9, 0x0045207a, 0x0279ff7a,
+ 0x050fb000, 0x040f707c, 0x02860538, 0x046c0279,
+ 0x0581851d, 0x0448b07a, 0x07810524, 0x06000010,
+ 0x04001010, 0x0760187b, 0x050f80ff, 0x032fa012,
+ 0x0046b07a, 0x02b60079, 0x03800527, 0x066c0079,
+ 0x07810522, 0x040fd07c, 0x06a00619, 0x02800008,
+ 0x040fd07c, 0x03800527, 0x0045207a, 0x0279ff7a,
0x07ffd7ff, 0x0007d010, 0x0647f07a, 0x0648607a,
- 0x078184b4, 0x0448707a, 0x058104b2, 0x040f70fb,
- 0x038684b2, 0x0644f07a, 0x05a004d2, 0x008004ba,
- 0x007a017a, 0x04000101, 0x05a004d2, 0x0400807c,
- 0x0245f008, 0x06a00580, 0x07279000, 0x0007e010,
- 0x0207c010, 0x0207a010, 0x028c03d6, 0x0380000c,
+ 0x04818532, 0x0448707a, 0x07810530, 0x040f70fb,
+ 0x01868530, 0x0644f07a, 0x07a00550, 0x02800538,
+ 0x007a017a, 0x04000101, 0x07a00550, 0x0400807c,
+ 0x0245f008, 0x06a005fe, 0x07279000, 0x0007e010,
+ 0x0207c010, 0x0207a010, 0x008c041c, 0x0380000c,
0x0392000c, 0x070ff0e2, 0x077800ff, 0x033e0000,
- 0x077400ff, 0x031a0000, 0x078284be, 0x070fc0ff,
- 0x052e400c, 0x00208020, 0x06a00580, 0x018004be,
+ 0x077400ff, 0x031a0000, 0x0582853c, 0x070fc0ff,
+ 0x052e400c, 0x00208020, 0x06a005fe, 0x0380053c,
0x06000020, 0x05001014, 0x0460082a, 0x050f80ff,
0x032fa012, 0x07c00000, 0x0600007a, 0x040010a2,
0x044b0801, 0x070ff014, 0x065a0001, 0x0460087c,
0x050f80ff, 0x032fa012, 0x07c00000, 0x050f7024,
- 0x008604e6, 0x070ff0e2, 0x077800ff, 0x033e0000,
+ 0x02860564, 0x070ff0e2, 0x077800ff, 0x033e0000,
0x077400ff, 0x031a0000, 0x04828013, 0x0721f006,
- 0x0302a024, 0x0280052f, 0x050f7022, 0x018604f5,
+ 0x0302a024, 0x028005ad, 0x050f7022, 0x02860573,
0x070ff0e2, 0x077800ff, 0x033e0000, 0x077400ff,
- 0x031a0000, 0x04828013, 0x0302a022, 0x06a0053b,
- 0x04488020, 0x0781051e, 0x040fd02a, 0x0202a010,
- 0x02020010, 0x040f7026, 0x03860503, 0x0202a026,
- 0x06a0053b, 0x04488020, 0x078184ff, 0x0621f001,
- 0x00683e20, 0x05818530, 0x0280051f, 0x040fd02a,
+ 0x031a0000, 0x04828013, 0x0302a022, 0x06a005b9,
+ 0x04488020, 0x0781059c, 0x040fd02a, 0x0202a010,
+ 0x02020010, 0x040f7026, 0x03860581, 0x0202a026,
+ 0x06a005b9, 0x04488020, 0x0581857d, 0x0621f001,
+ 0x00683e20, 0x048185ae, 0x0280059d, 0x040fd02a,
0x0202a010, 0x0002b010, 0x02020010, 0x050f7028,
- 0x02860538, 0x0621f002, 0x0302a028, 0x0280052f,
+ 0x028605b6, 0x0621f002, 0x0302a028, 0x028005ad,
0x070ff0e2, 0x077800ff, 0x033e0000, 0x077400ff,
- 0x031a0000, 0x04828013, 0x050f7024, 0x02860513,
- 0x0721f006, 0x0302a024, 0x0280052f, 0x050f7022,
- 0x02860538, 0x0302a022, 0x06a0053b, 0x04488020,
- 0x0781051e, 0x040fd02a, 0x0202a010, 0x0002b010,
- 0x02020010, 0x02800538, 0x0621f004, 0x070ff0e2,
+ 0x031a0000, 0x04828013, 0x050f7024, 0x02860591,
+ 0x0721f006, 0x0302a024, 0x028005ad, 0x050f7022,
+ 0x028605b6, 0x0302a022, 0x06a005b9, 0x04488020,
+ 0x0781059c, 0x040fd02a, 0x0202a010, 0x0002b010,
+ 0x02020010, 0x028005b6, 0x0621f004, 0x070ff0e2,
0x077800ff, 0x033e0000, 0x077400ff, 0x031a0000,
- 0x0482852a, 0x01208060, 0x0600902a, 0x04002020,
- 0x07a00587, 0x02800538, 0x0202a010, 0x02020010,
- 0x0002b010, 0x0721f000, 0x02800538, 0x06a0053b,
- 0x0400102a, 0x0245f001, 0x07a00541, 0x050f801e,
+ 0x048285a8, 0x01208060, 0x0600902a, 0x04002020,
+ 0x07a00605, 0x028005b6, 0x0202a010, 0x02020010,
+ 0x0002b010, 0x0721f000, 0x028005b6, 0x06a005b9,
+ 0x0400102a, 0x0245f001, 0x06a005bf, 0x050f801e,
0x0320000a, 0x022017d0, 0x032fa012, 0x072e5c00,
- 0x028c03d6, 0x058d0459, 0x02800013, 0x0460082a,
+ 0x008c041c, 0x058d04d7, 0x02800013, 0x0460082a,
0x050f80ff, 0x022fa031, 0x03020000, 0x0102b005,
- 0x07c00000, 0x01200100, 0x069a0545, 0x060f0001,
- 0x07c00000, 0x07420000, 0x05818542, 0x060fc010,
- 0x0280059b, 0x0392001d, 0x0207c02f, 0x0460087c,
+ 0x07c00000, 0x01200100, 0x079a05c3, 0x060f0001,
+ 0x07c00000, 0x07420000, 0x058185c0, 0x060fc010,
+ 0x02800619, 0x0392001d, 0x0207c02f, 0x0460087c,
0x050f80ff, 0x032fa039, 0x0307a000, 0x0107b005,
0x0307f006, 0x0660007c, 0x050020ff, 0x050f80ff,
- 0x032fa011, 0x0302f000, 0x00868561, 0x0202f001,
- 0x0186855f, 0x0002e010, 0x0660187f, 0x050f80ff,
- 0x073fa00a, 0x06000008, 0x02800567, 0x0002e001,
- 0x02800567, 0x040f7001, 0x0386055a, 0x0760002e,
+ 0x032fa011, 0x0302f000, 0x008685df, 0x0202f001,
+ 0x018685dd, 0x0002e010, 0x0660187f, 0x050f80ff,
+ 0x073fa00a, 0x06000008, 0x028005e5, 0x0002e001,
+ 0x028005e5, 0x040f7001, 0x038605d8, 0x0760002e,
0x050f80ff, 0x012fa80a, 0x0002e001, 0x06000010,
0x04001010, 0x040f8002, 0x032fa012, 0x06279001,
0x0400107c, 0x060ff0fb, 0x054bc8ff, 0x065a0001,
- 0x07a00541, 0x0320000a, 0x022011f4, 0x00202004,
- 0x06003010, 0x0249507a, 0x07810578, 0x0020200e,
- 0x050f8078, 0x032fa022, 0x030e5077, 0x028c03d6,
- 0x058d0459, 0x040f702f, 0x00868013, 0x0380001d,
- 0x03201100, 0x04848585, 0x06420001, 0x05818581,
- 0x0280059e, 0x020e0008, 0x07c00000, 0x050fd009,
- 0x040fd008, 0x03201100, 0x0584858e, 0x06420001,
- 0x0481858a, 0x0280059e, 0x007a0102, 0x04000101,
+ 0x06a005bf, 0x0320000a, 0x022011f4, 0x00202004,
+ 0x06003010, 0x0249507a, 0x078105f6, 0x0020200e,
+ 0x050f8078, 0x032fa022, 0x030e5077, 0x008c041c,
+ 0x058d04d7, 0x040f702f, 0x00868013, 0x0380001d,
+ 0x03201100, 0x05848603, 0x06420001, 0x058185ff,
+ 0x0280061c, 0x020e0008, 0x07c00000, 0x050fd009,
+ 0x040fd008, 0x03201100, 0x0584860c, 0x06420001,
+ 0x04818608, 0x0280061c, 0x007a0102, 0x04000101,
0x05600809, 0x050f80ff, 0x073fa00a, 0x06000001,
- 0x020e0008, 0x05848599, 0x06420001, 0x05818595,
- 0x0280059e, 0x030e0009, 0x07c00000, 0x052e400f,
- 0x00208040, 0x02800580, 0x070fc0ff, 0x040f8010,
- 0x032fa009, 0x028005a1, 0xd672ebf2, 0x00000000,
+ 0x020e0008, 0x05848617, 0x06420001, 0x04818613,
+ 0x0280061c, 0x030e0009, 0x07c00000, 0x052e400f,
+ 0x00208040, 0x028005fe, 0x070fc0ff, 0x040f8010,
+ 0x032fa009, 0x0280061f, 0x45c0c10d, 0x00000000,
0x00000000, 0x0000400e, 0x00000808, 0x00000803,
0x00011f0f, 0x02080b02, 0xe6e5610b, 0x7f04e630,
0x7f028001, 0x30e2e500, 0x017e04e4, 0x007e0280,
@@ -27842,6 +16715,6 @@ static const uint32_t isp_2500_multi_risc_code[] = {
0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x00000000,
0x00000000, 0x00000000, 0x00000000, 0x000f1f01,
- 0xc3002003, 0xb9f6ad13, 0xffffb7ea, 0xffeeaac8
+ 0xc3002003, 0xb9f6ad13, 0xffffb7ea, 0xffeeae82
};
#endif
diff --git a/sys/dev/ispfw/ispfw.c b/sys/dev/ispfw/ispfw.c
index b351aee..f0e2599 100644
--- a/sys/dev/ispfw/ispfw.c
+++ b/sys/dev/ispfw/ispfw.c
@@ -51,9 +51,7 @@ __FBSDID("$FreeBSD$");
#define ISP_2300 1
#define ISP_2322 1
#define ISP_2400 1
-#define ISP_2400_MULTI 1
#define ISP_2500 1
-#define ISP_2500_MULTI 1
#endif
#ifndef MODULE_NAME
@@ -88,10 +86,10 @@ __FBSDID("$FreeBSD$");
#if defined(ISP_2322)
#include <dev/ispfw/asm_2322.h>
#endif
-#if defined(ISP_2400) || defined(ISP_2400_MULTI)
+#if defined(ISP_2400)
#include <dev/ispfw/asm_2400.h>
#endif
-#if defined(ISP_2500) || defined(ISP_2500_MULTI)
+#if defined(ISP_2500)
#include <dev/ispfw/asm_2500.h>
#endif
@@ -131,55 +129,33 @@ static int isp_2322_loaded;
#if defined(ISP_2400)
static int isp_2400_loaded;
#endif
-#if defined(ISP_2400_MULTI)
-static int isp_2400_multi_loaded;
-#endif
#if defined(ISP_2500)
static int isp_2500_loaded;
#endif
-#if defined(ISP_2500_MULTI)
-static int isp_2500_multi_loaded;
-#endif
#define ISPFW_VERSION 1
-#if !defined(KLD_MODULE)
-#define ISPFW_KLD 0
-#else
-#define ISPFW_KLD 1
-#endif
-
#define RMACRO(token) do { \
if (token##_loaded) \
break; \
if (firmware_register(#token, token##_risc_code, \
token##_risc_code[3] * sizeof(token##_risc_code[3]), \
- ISPFW_VERSION, NULL) == NULL) { \
- printf("%s: unable to register firmware <%s>\n", \
- MODULE_NAME, #token); \
+ ISPFW_VERSION, NULL) == NULL) \
break; \
- } \
token##_loaded++; \
- if (bootverbose || ISPFW_KLD) \
- printf("%s: registered firmware <%s>\n", MODULE_NAME, \
- #token); \
} while (0)
#define UMACRO(token) do { \
if (!token##_loaded) \
break; \
if (firmware_unregister(#token) != 0) { \
- printf("%s: unable to unregister firmware <%s>\n", \
- MODULE_NAME, #token); \
+ error = EBUSY; \
break; \
} \
token##_loaded--; \
- if (bootverbose || ISPFW_KLD) \
- printf("%s: unregistered firmware <%s>\n", MODULE_NAME, \
- #token); \
} while (0)
-static void
+static int
do_load_fw(void)
{
@@ -219,20 +195,16 @@ do_load_fw(void)
#if defined(ISP_2400)
RMACRO(isp_2400);
#endif
-#if defined(ISP_2400_MULTI)
- RMACRO(isp_2400_multi);
-#endif
#if defined(ISP_2500)
RMACRO(isp_2500);
#endif
-#if defined(ISP_2500_MULTI)
- RMACRO(isp_2500_multi);
-#endif
+ return (0);
}
-static void
+static int
do_unload_fw(void)
{
+ int error = 0;
#if defined(ISP_1000)
UMACRO(isp_1000);
@@ -270,15 +242,10 @@ do_unload_fw(void)
#if defined(ISP_2400)
UMACRO(isp_2400);
#endif
-#if defined(ISP_2400_MULTI)
- UMACRO(isp_2400_multi);
-#endif
#if defined(ISP_2500)
UMACRO(isp_2500);
#endif
-#if defined(ISP_2500_MULTI)
- UMACRO(isp_2500_multi);
-#endif
+ return (error);
}
static int
@@ -287,17 +254,11 @@ module_handler(module_t mod, int what, void *arg)
switch (what) {
case MOD_LOAD:
- do_load_fw();
- break;
+ return (do_load_fw());
case MOD_UNLOAD:
- do_unload_fw();
- break;
- case MOD_SHUTDOWN:
- break;
- default:
- return (EOPNOTSUPP);
+ return (do_unload_fw());
}
- return (0);
+ return (EOPNOTSUPP);
}
static moduledata_t ispfw_mod = {
MODULE_NAME, module_handler, NULL
@@ -328,12 +289,8 @@ DECLARE_MODULE(isp_2300, ispfw_mod, SI_SUB_DRIVERS, SI_ORDER_THIRD);
DECLARE_MODULE(isp_2322, ispfw_mod, SI_SUB_DRIVERS, SI_ORDER_THIRD);
#elif defined(ISP_2400)
DECLARE_MODULE(isp_2400, ispfw_mod, SI_SUB_DRIVERS, SI_ORDER_THIRD);
-#elif defined(ISP_2400_MULTI)
-DECLARE_MODULE(isp_2400_multi, ispfw_mod, SI_SUB_DRIVERS, SI_ORDER_THIRD);
#elif defined(ISP_2500)
DECLARE_MODULE(isp_2500, ispfw_mod, SI_SUB_DRIVERS, SI_ORDER_THIRD);
-#elif defined(ISP_2500_MULTI)
-DECLARE_MODULE(isp_2500_multi, ispfw_mod, SI_SUB_DRIVERS, SI_ORDER_THIRD);
#else
#error "firmware not specified"
#endif
diff --git a/sys/dev/iwm/if_iwm.c b/sys/dev/iwm/if_iwm.c
index df17f93..ce3b603 100644
--- a/sys/dev/iwm/if_iwm.c
+++ b/sys/dev/iwm/if_iwm.c
@@ -717,7 +717,7 @@ iwm_dma_contig_alloc(bus_dma_tag_t tag, struct iwm_dma_info *dma,
error = bus_dma_tag_create(tag, alignment,
0, BUS_SPACE_MAXADDR_32BIT, BUS_SPACE_MAXADDR, NULL, NULL, size,
- 1, size, BUS_DMA_NOWAIT, NULL, NULL, &dma->tag);
+ 1, size, 0, NULL, NULL, &dma->tag);
if (error != 0)
goto fail;
@@ -851,8 +851,7 @@ iwm_alloc_rx_ring(struct iwm_softc *sc, struct iwm_rx_ring *ring)
/* Create RX buffer DMA tag. */
error = bus_dma_tag_create(sc->sc_dmat, 1, 0,
BUS_SPACE_MAXADDR_32BIT, BUS_SPACE_MAXADDR, NULL, NULL,
- IWM_RBUF_SIZE, 1, IWM_RBUF_SIZE, BUS_DMA_NOWAIT, NULL, NULL,
- &ring->data_dmat);
+ IWM_RBUF_SIZE, 1, IWM_RBUF_SIZE, 0, NULL, NULL, &ring->data_dmat);
if (error != 0) {
device_printf(sc->sc_dev,
"%s: could not create RX buf DMA tag, error %d\n",
@@ -957,8 +956,7 @@ iwm_alloc_tx_ring(struct iwm_softc *sc, struct iwm_tx_ring *ring, int qid)
error = bus_dma_tag_create(sc->sc_dmat, 1, 0,
BUS_SPACE_MAXADDR_32BIT, BUS_SPACE_MAXADDR, NULL, NULL, MCLBYTES,
- IWM_MAX_SCATTER - 1, MCLBYTES, BUS_DMA_NOWAIT, NULL, NULL,
- &ring->data_dmat);
+ IWM_MAX_SCATTER - 1, MCLBYTES, 0, NULL, NULL, &ring->data_dmat);
if (error != 0) {
device_printf(sc->sc_dev, "could not create TX buf DMA tag\n");
goto fail;
@@ -2083,7 +2081,7 @@ iwm_run_init_mvm_ucode(struct iwm_softc *sc, int justnvm)
device_printf(sc->sc_dev, "failed to read nvm\n");
return error;
}
- IEEE80211_ADDR_COPY(sc->sc_ic.ic_macaddr, &sc->sc_nvm.hw_addr);
+ IEEE80211_ADDR_COPY(sc->sc_ic.ic_macaddr, sc->sc_nvm.hw_addr);
sc->sc_scan_cmd_len = sizeof(struct iwm_scan_cmd)
+ sc->sc_capa_max_probe_len
diff --git a/sys/dev/iwn/if_iwn.c b/sys/dev/iwn/if_iwn.c
index 0cdeafb..907755b 100644
--- a/sys/dev/iwn/if_iwn.c
+++ b/sys/dev/iwn/if_iwn.c
@@ -1732,7 +1732,7 @@ iwn_dma_contig_alloc(struct iwn_softc *sc, struct iwn_dma_info *dma,
error = bus_dma_tag_create(bus_get_dma_tag(sc->sc_dev), alignment,
0, BUS_SPACE_MAXADDR_32BIT, BUS_SPACE_MAXADDR, NULL, NULL, size,
- 1, size, BUS_DMA_NOWAIT, NULL, NULL, &dma->tag);
+ 1, size, 0, NULL, NULL, &dma->tag);
if (error != 0)
goto fail;
@@ -1861,8 +1861,7 @@ iwn_alloc_rx_ring(struct iwn_softc *sc, struct iwn_rx_ring *ring)
/* Create RX buffer DMA tag. */
error = bus_dma_tag_create(bus_get_dma_tag(sc->sc_dev), 1, 0,
BUS_SPACE_MAXADDR_32BIT, BUS_SPACE_MAXADDR, NULL, NULL,
- IWN_RBUF_SIZE, 1, IWN_RBUF_SIZE, BUS_DMA_NOWAIT, NULL, NULL,
- &ring->data_dmat);
+ IWN_RBUF_SIZE, 1, IWN_RBUF_SIZE, 0, NULL, NULL, &ring->data_dmat);
if (error != 0) {
device_printf(sc->sc_dev,
"%s: could not create RX buf DMA tag, error %d\n",
@@ -2008,8 +2007,7 @@ iwn_alloc_tx_ring(struct iwn_softc *sc, struct iwn_tx_ring *ring, int qid)
error = bus_dma_tag_create(bus_get_dma_tag(sc->sc_dev), 1, 0,
BUS_SPACE_MAXADDR_32BIT, BUS_SPACE_MAXADDR, NULL, NULL, MCLBYTES,
- IWN_MAX_SCATTER - 1, MCLBYTES, BUS_DMA_NOWAIT, NULL, NULL,
- &ring->data_dmat);
+ IWN_MAX_SCATTER - 1, MCLBYTES, 0, NULL, NULL, &ring->data_dmat);
if (error != 0) {
device_printf(sc->sc_dev,
"%s: could not create TX buf DMA tag, error %d\n",
@@ -6280,8 +6278,8 @@ iwn_set_pslevel(struct iwn_softc *sc, int dtim, int level, int async)
if (level == 5)
cmd.flags |= htole16(IWN_PS_FAST_PD);
/* Retrieve PCIe Active State Power Management (ASPM). */
- reg = pci_read_config(sc->sc_dev, sc->sc_cap_off + 0x10, 1);
- if (!(reg & 0x1)) /* L0s Entry disabled. */
+ reg = pci_read_config(sc->sc_dev, sc->sc_cap_off + PCIER_LINK_CTL, 4);
+ if (!(reg & PCIEM_LINK_CTL_ASPMC_L0S)) /* L0s Entry disabled. */
cmd.flags |= htole16(IWN_PS_PCI_PMGT);
cmd.rxtimeout = htole32(pmgt->rxtimeout * 1024);
cmd.txtimeout = htole32(pmgt->txtimeout * 1024);
@@ -8280,9 +8278,9 @@ iwn_apm_init(struct iwn_softc *sc)
IWN_SETBITS(sc, IWN_HW_IF_CONFIG, IWN_HW_IF_CONFIG_HAP_WAKE_L1A);
/* Retrieve PCIe Active State Power Management (ASPM). */
- reg = pci_read_config(sc->sc_dev, sc->sc_cap_off + 0x10, 1);
+ reg = pci_read_config(sc->sc_dev, sc->sc_cap_off + PCIER_LINK_CTL, 4);
/* Workaround for HW instability in PCIe L0->L0s->L1 transition. */
- if (reg & 0x02) /* L1 Entry enabled. */
+ if (reg & PCIEM_LINK_CTL_ASPMC_L1) /* L1 Entry enabled. */
IWN_SETBITS(sc, IWN_GIO, IWN_GIO_L0S_ENA);
else
IWN_CLRBITS(sc, IWN_GIO, IWN_GIO_L0S_ENA);
diff --git a/sys/dev/mge/if_mge.c b/sys/dev/mge/if_mge.c
index c35dd04..61579a9 100644
--- a/sys/dev/mge/if_mge.c
+++ b/sys/dev/mge/if_mge.c
@@ -1,5 +1,7 @@
/*-
* Copyright (C) 2008 MARVELL INTERNATIONAL LTD.
+ * Copyright (C) 2009-2015 Semihalf
+ * Copyright (C) 2015 Stormshield
* All rights reserved.
*
* Developed by Semihalf.
@@ -50,7 +52,6 @@ __FBSDID("$FreeBSD$");
#include <net/ethernet.h>
#include <net/bpf.h>
#include <net/if.h>
-#include <net/if_var.h>
#include <net/if_arp.h>
#include <net/if_dl.h>
#include <net/if_media.h>
@@ -73,12 +74,16 @@ __FBSDID("$FreeBSD$");
#include <dev/fdt/fdt_common.h>
#include <dev/ofw/ofw_bus.h>
#include <dev/ofw/ofw_bus_subr.h>
+#include <dev/etherswitch/mdio.h>
#include <dev/mge/if_mgevar.h>
#include <arm/mv/mvreg.h>
#include <arm/mv/mvvar.h>
#include "miibus_if.h"
+#include "mdio_if.h"
+
+#define MGE_DELAY(x) pause("SMI access sleep", (x) / tick_sbt)
static int mge_probe(device_t dev);
static int mge_attach(device_t dev);
@@ -90,6 +95,9 @@ static int mge_resume(device_t dev);
static int mge_miibus_readreg(device_t dev, int phy, int reg);
static int mge_miibus_writereg(device_t dev, int phy, int reg, int value);
+static int mge_mdio_readreg(device_t dev, int phy, int reg);
+static int mge_mdio_writereg(device_t dev, int phy, int reg, int value);
+
static int mge_ifmedia_upd(struct ifnet *ifp);
static void mge_ifmedia_sts(struct ifnet *ifp, struct ifmediareq *ifmr);
@@ -125,13 +133,15 @@ static void mge_set_ucast_address(struct mge_softc *sc, uint8_t last_byte,
static void mge_set_prom_mode(struct mge_softc *sc, uint8_t queue);
static int mge_allocate_dma(struct mge_softc *sc);
static int mge_alloc_desc_dma(struct mge_softc *sc,
- struct mge_desc_wrapper* desc_tab, uint32_t size, bus_dma_tag_t *buffer_tag);
+ struct mge_desc_wrapper* desc_tab, uint32_t size,
+ bus_dma_tag_t *buffer_tag);
static int mge_new_rxbuf(bus_dma_tag_t tag, bus_dmamap_t map,
struct mbuf **mbufp, bus_addr_t *paddr);
-static void mge_get_dma_addr(void *arg, bus_dma_segment_t *segs, int nseg, int error);
+static void mge_get_dma_addr(void *arg, bus_dma_segment_t *segs, int nseg,
+ int error);
static void mge_free_dma(struct mge_softc *sc);
-static void mge_free_desc(struct mge_softc *sc, struct mge_desc_wrapper* tab, uint32_t size,
- bus_dma_tag_t buffer_tag, uint8_t free_mbufs);
+static void mge_free_desc(struct mge_softc *sc, struct mge_desc_wrapper* tab,
+ uint32_t size, bus_dma_tag_t buffer_tag, uint8_t free_mbufs);
static void mge_offload_process_frame(struct ifnet *ifp, struct mbuf *frame,
uint32_t status, uint16_t bufsize);
static void mge_offload_setup_descriptor(struct mge_softc *sc,
@@ -154,21 +164,23 @@ static device_method_t mge_methods[] = {
/* MII interface */
DEVMETHOD(miibus_readreg, mge_miibus_readreg),
DEVMETHOD(miibus_writereg, mge_miibus_writereg),
+ /* MDIO interface */
+ DEVMETHOD(mdio_readreg, mge_mdio_readreg),
+ DEVMETHOD(mdio_writereg, mge_mdio_writereg),
{ 0, 0 }
};
-static driver_t mge_driver = {
- "mge",
- mge_methods,
- sizeof(struct mge_softc),
-};
+DEFINE_CLASS_0(mge, mge_driver, mge_methods, sizeof(struct mge_softc));
static devclass_t mge_devclass;
+static int switch_attached = 0;
DRIVER_MODULE(mge, simplebus, mge_driver, mge_devclass, 0, 0);
DRIVER_MODULE(miibus, mge, miibus_driver, miibus_devclass, 0, 0);
+DRIVER_MODULE(mdio, mge, mdio_driver, mdio_devclass, 0, 0);
MODULE_DEPEND(mge, ether, 1, 1, 1);
MODULE_DEPEND(mge, miibus, 1, 1, 1);
+MODULE_DEPEND(mge, mdio, 1, 1, 1);
static struct resource_spec res_spec[] = {
{ SYS_RES_MEMORY, 0, RF_ACTIVE },
@@ -190,6 +202,133 @@ static struct {
{ mge_intr_err, "GbE error interrupt" },
};
+/* SMI access interlock */
+static struct sx sx_smi;
+
+static uint32_t
+mv_read_ge_smi(device_t dev, int phy, int reg)
+{
+ uint32_t timeout;
+ uint32_t ret;
+ struct mge_softc *sc;
+
+ sc = device_get_softc(dev);
+ KASSERT(sc != NULL, ("NULL softc ptr!"));
+ timeout = MGE_SMI_WRITE_RETRIES;
+
+ MGE_SMI_LOCK();
+ while (--timeout &&
+ (MGE_READ(sc, MGE_REG_SMI) & MGE_SMI_BUSY))
+ MGE_DELAY(MGE_SMI_WRITE_DELAY);
+
+ if (timeout == 0) {
+ device_printf(dev, "SMI write timeout.\n");
+ ret = ~0U;
+ goto out;
+ }
+
+ MGE_WRITE(sc, MGE_REG_SMI, MGE_SMI_MASK &
+ (MGE_SMI_READ | (reg << 21) | (phy << 16)));
+
+ /* Wait till finished. */
+ timeout = MGE_SMI_WRITE_RETRIES;
+ while (--timeout &&
+ !((MGE_READ(sc, MGE_REG_SMI) & MGE_SMI_READVALID)))
+ MGE_DELAY(MGE_SMI_WRITE_DELAY);
+
+ if (timeout == 0) {
+ device_printf(dev, "SMI write validation timeout.\n");
+ ret = ~0U;
+ goto out;
+ }
+
+ /* Wait for the data to update in the SMI register */
+ MGE_DELAY(MGE_SMI_DELAY);
+ ret = MGE_READ(sc, MGE_REG_SMI) & MGE_SMI_DATA_MASK;
+
+out:
+ MGE_SMI_UNLOCK();
+ return (ret);
+
+}
+
+static void
+mv_write_ge_smi(device_t dev, int phy, int reg, uint32_t value)
+{
+ uint32_t timeout;
+ struct mge_softc *sc;
+
+ sc = device_get_softc(dev);
+ KASSERT(sc != NULL, ("NULL softc ptr!"));
+
+ MGE_SMI_LOCK();
+ timeout = MGE_SMI_READ_RETRIES;
+ while (--timeout &&
+ (MGE_READ(sc, MGE_REG_SMI) & MGE_SMI_BUSY))
+ MGE_DELAY(MGE_SMI_READ_DELAY);
+
+ if (timeout == 0) {
+ device_printf(dev, "SMI read timeout.\n");
+ goto out;
+ }
+
+ MGE_WRITE(sc, MGE_REG_SMI, MGE_SMI_MASK &
+ (MGE_SMI_WRITE | (reg << 21) | (phy << 16) |
+ (value & MGE_SMI_DATA_MASK)));
+
+out:
+ MGE_SMI_UNLOCK();
+}
+
+static int
+mv_read_ext_phy(device_t dev, int phy, int reg)
+{
+ uint32_t retries;
+ struct mge_softc *sc;
+ uint32_t ret;
+
+ sc = device_get_softc(dev);
+
+ MGE_SMI_LOCK();
+ MGE_WRITE(sc->phy_sc, MGE_REG_SMI, MGE_SMI_MASK &
+ (MGE_SMI_READ | (reg << 21) | (phy << 16)));
+
+ retries = MGE_SMI_READ_RETRIES;
+ while (--retries &&
+ !(MGE_READ(sc->phy_sc, MGE_REG_SMI) & MGE_SMI_READVALID))
+ DELAY(MGE_SMI_READ_DELAY);
+
+ if (retries == 0)
+ device_printf(dev, "Timeout while reading from PHY\n");
+
+ ret = MGE_READ(sc->phy_sc, MGE_REG_SMI) & MGE_SMI_DATA_MASK;
+ MGE_SMI_UNLOCK();
+
+ return (ret);
+}
+
+static void
+mv_write_ext_phy(device_t dev, int phy, int reg, int value)
+{
+ uint32_t retries;
+ struct mge_softc *sc;
+
+ sc = device_get_softc(dev);
+
+ MGE_SMI_LOCK();
+ MGE_WRITE(sc->phy_sc, MGE_REG_SMI, MGE_SMI_MASK &
+ (MGE_SMI_WRITE | (reg << 21) | (phy << 16) |
+ (value & MGE_SMI_DATA_MASK)));
+
+ retries = MGE_SMI_WRITE_RETRIES;
+ while (--retries && MGE_READ(sc->phy_sc, MGE_REG_SMI) & MGE_SMI_BUSY)
+ DELAY(MGE_SMI_WRITE_DELAY);
+
+ if (retries == 0)
+ device_printf(dev, "Timeout while writing to PHY\n");
+ MGE_SMI_UNLOCK();
+}
+
static void
mge_get_mac_address(struct mge_softc *sc, uint8_t *addr)
{
@@ -555,6 +694,7 @@ mge_free_desc(struct mge_softc *sc, struct mge_desc_wrapper* tab,
static void
mge_free_dma(struct mge_softc *sc)
{
+
/* Free desciptors and mbufs */
mge_free_desc(sc, sc->mge_rx_desc, MGE_RX_DESC_NUM, sc->mge_rx_dtag, 1);
mge_free_desc(sc, sc->mge_tx_desc, MGE_TX_DESC_NUM, sc->mge_tx_dtag, 0);
@@ -605,10 +745,10 @@ mge_poll(struct ifnet *ifp, enum poll_cmd cmd, int count)
uint32_t int_cause, int_cause_ext;
int rx_npkts = 0;
- MGE_GLOBAL_LOCK(sc);
+ MGE_RECEIVE_LOCK(sc);
if (!(ifp->if_drv_flags & IFF_DRV_RUNNING)) {
- MGE_GLOBAL_UNLOCK(sc);
+ MGE_RECEIVE_UNLOCK(sc);
return (rx_npkts);
}
@@ -626,10 +766,13 @@ mge_poll(struct ifnet *ifp, enum poll_cmd cmd, int count)
}
}
- mge_intr_tx_locked(sc);
+
rx_npkts = mge_intr_rx_locked(sc, count);
- MGE_GLOBAL_UNLOCK(sc);
+ MGE_RECEIVE_UNLOCK(sc);
+ MGE_TRANSMIT_LOCK(sc);
+ mge_intr_tx_locked(sc);
+ MGE_TRANSMIT_UNLOCK(sc);
return (rx_npkts);
}
#endif /* DEVICE_POLLING */
@@ -646,17 +789,39 @@ mge_attach(device_t dev)
sc = device_get_softc(dev);
sc->dev = dev;
sc->node = ofw_bus_get_node(dev);
+ phy = 0;
+
+ if (fdt_get_phyaddr(sc->node, sc->dev, &phy, (void **)&sc->phy_sc) == 0) {
+ device_printf(dev, "PHY%i attached, phy_sc points to %s\n", phy,
+ device_get_nameunit(sc->phy_sc->dev));
+ sc->phy_attached = 1;
+ } else {
+ device_printf(dev, "PHY not attached.\n");
+ sc->phy_attached = 0;
+ sc->phy_sc = sc;
+ }
+
+ if (fdt_find_compatible(sc->node, "mrvl,sw", 1) != 0) {
+ device_printf(dev, "Switch attached.\n");
+ sc->switch_attached = 1;
+ /* additional variable available across instances */
+ switch_attached = 1;
+ } else {
+ sc->switch_attached = 0;
+ }
+
+ if (device_get_unit(dev) == 0) {
+ sx_init(&sx_smi, "mge_tick() SMI access threads interlock");
+ }
/* Set chip version-dependent parameters */
mge_ver_params(sc);
- /* Get phy address and used softc from fdt */
- if (fdt_get_phyaddr(sc->node, sc->dev, &phy, (void **)&sc->phy_sc) != 0)
- return (ENXIO);
-
/* Initialize mutexes */
- mtx_init(&sc->transmit_lock, device_get_nameunit(dev), "mge TX lock", MTX_DEF);
- mtx_init(&sc->receive_lock, device_get_nameunit(dev), "mge RX lock", MTX_DEF);
+ mtx_init(&sc->transmit_lock, device_get_nameunit(dev), "mge TX lock",
+ MTX_DEF);
+ mtx_init(&sc->receive_lock, device_get_nameunit(dev), "mge RX lock",
+ MTX_DEF);
/* Allocate IO and IRQ resources */
error = bus_alloc_resources(dev, res_spec, sc->res);
@@ -719,18 +884,32 @@ mge_attach(device_t dev)
callout_init(&sc->wd_callout, 0);
/* Attach PHY(s) */
- error = mii_attach(dev, &sc->miibus, ifp, mge_ifmedia_upd,
- mge_ifmedia_sts, BMSR_DEFCAPMASK, phy, MII_OFFSET_ANY, 0);
- if (error) {
- device_printf(dev, "attaching PHYs failed\n");
- mge_detach(dev);
- return (error);
- }
- sc->mii = device_get_softc(sc->miibus);
+ if (sc->phy_attached) {
+ error = mii_attach(dev, &sc->miibus, ifp, mge_ifmedia_upd,
+ mge_ifmedia_sts, BMSR_DEFCAPMASK, phy, MII_OFFSET_ANY, 0);
+ if (error) {
+ device_printf(dev, "MII failed to find PHY\n");
+ if_free(ifp);
+ sc->ifp = NULL;
+ mge_detach(dev);
+ return (error);
+ }
+ sc->mii = device_get_softc(sc->miibus);
- /* Tell the MAC where to find the PHY so autoneg works */
- miisc = LIST_FIRST(&sc->mii->mii_phys);
- MGE_WRITE(sc, MGE_REG_PHYDEV, miisc->mii_phy);
+ /* Tell the MAC where to find the PHY so autoneg works */
+ miisc = LIST_FIRST(&sc->mii->mii_phys);
+ MGE_WRITE(sc, MGE_REG_PHYDEV, miisc->mii_phy);
+ } else {
+ /* no PHY, so use hard-coded values */
+ ifmedia_init(&sc->mge_ifmedia, 0,
+ mge_ifmedia_upd,
+ mge_ifmedia_sts);
+ ifmedia_add(&sc->mge_ifmedia,
+ IFM_ETHER | IFM_1000_T | IFM_FDX,
+ 0, NULL);
+ ifmedia_set(&sc->mge_ifmedia,
+ IFM_ETHER | IFM_1000_T | IFM_FDX);
+ }
/* Attach interrupt handlers */
/* TODO: review flags, in part. mark RX as INTR_ENTROPY ? */
@@ -747,6 +926,13 @@ mge_attach(device_t dev)
}
}
+ if (sc->switch_attached) {
+ device_t child;
+ MGE_WRITE(sc, MGE_REG_PHYDEV, MGE_SWITCH_PHYDEV);
+ child = device_add_child(dev, "mdio", -1);
+ bus_generic_attach(dev);
+ }
+
return (0);
}
@@ -770,7 +956,8 @@ mge_detach(device_t dev)
if (!sc->ih_cookie[i])
continue;
- error = bus_teardown_intr(dev, sc->res[1 + i], sc->ih_cookie[i]);
+ error = bus_teardown_intr(dev, sc->res[1 + i],
+ sc->ih_cookie[i]);
if (error)
device_printf(dev, "could not release %s\n",
mge_intrs[(sc->mge_intr_cnt == 1 ? 0 : i + 1)].description);
@@ -792,16 +979,26 @@ mge_detach(device_t dev)
mtx_destroy(&sc->receive_lock);
mtx_destroy(&sc->transmit_lock);
+ if (device_get_unit(dev) == 0)
+ sx_destroy(&sx_smi);
+
return (0);
}
static void
mge_ifmedia_sts(struct ifnet *ifp, struct ifmediareq *ifmr)
{
- struct mge_softc *sc = ifp->if_softc;
+ struct mge_softc *sc;
struct mii_data *mii;
- MGE_TRANSMIT_LOCK(sc);
+ sc = ifp->if_softc;
+ MGE_GLOBAL_LOCK(sc);
+
+ if (!sc->phy_attached) {
+ ifmr->ifm_active = IFM_1000_T | IFM_FDX | IFM_ETHER;
+ ifmr->ifm_status = IFM_AVALID | IFM_ACTIVE;
+ goto out_unlock;
+ }
mii = sc->mii;
mii_pollstat(mii);
@@ -809,7 +1006,8 @@ mge_ifmedia_sts(struct ifnet *ifp, struct ifmediareq *ifmr)
ifmr->ifm_active = mii->mii_media_active;
ifmr->ifm_status = mii->mii_media_status;
- MGE_TRANSMIT_UNLOCK(sc);
+out_unlock:
+ MGE_GLOBAL_UNLOCK(sc);
}
static uint32_t
@@ -826,13 +1024,13 @@ mge_set_port_serial_control(uint32_t media)
break;
case IFM_1000_T:
port_config |= (PORT_SERIAL_GMII_SPEED_1000 |
- PORT_SERIAL_AUTONEG | PORT_SERIAL_AUTONEG_FC |
- PORT_SERIAL_SPEED_AUTONEG);
+ PORT_SERIAL_AUTONEG | PORT_SERIAL_AUTONEG_FC
+ | PORT_SERIAL_SPEED_AUTONEG);
break;
case IFM_100_TX:
port_config |= (PORT_SERIAL_MII_SPEED_100 |
- PORT_SERIAL_AUTONEG | PORT_SERIAL_AUTONEG_FC |
- PORT_SERIAL_SPEED_AUTONEG);
+ PORT_SERIAL_AUTONEG | PORT_SERIAL_AUTONEG_FC
+ | PORT_SERIAL_SPEED_AUTONEG);
break;
case IFM_10_T:
port_config |= (PORT_SERIAL_AUTONEG |
@@ -851,13 +1049,21 @@ mge_ifmedia_upd(struct ifnet *ifp)
{
struct mge_softc *sc = ifp->if_softc;
- if (ifp->if_flags & IFF_UP) {
+ /*
+ * Do not do anything for switch here, as updating media between
+ * MGE MAC and switch MAC is hardcoded in PCB. Changing it here would
+ * break the link.
+ */
+ if (sc->phy_attached) {
MGE_GLOBAL_LOCK(sc);
+ if (ifp->if_flags & IFF_UP) {
+ sc->mge_media_status = sc->mii->mii_media.ifm_media;
+ mii_mediachg(sc->mii);
- sc->mge_media_status = sc->mii->mii_media.ifm_media;
- mii_mediachg(sc->mii);
- mge_init_locked(sc);
+ /* MGE MAC needs to be reinitialized. */
+ mge_init_locked(sc);
+ }
MGE_GLOBAL_UNLOCK(sc);
}
@@ -867,8 +1073,9 @@ mge_ifmedia_upd(struct ifnet *ifp)
static void
mge_init(void *arg)
{
- struct mge_softc *sc = arg;
+ struct mge_softc *sc;
+ sc = arg;
MGE_GLOBAL_LOCK(sc);
mge_init_locked(arg);
@@ -883,6 +1090,7 @@ mge_init_locked(void *arg)
struct mge_desc_wrapper *dw;
volatile uint32_t reg_val;
int i, count;
+ uint32_t media_status;
MGE_GLOBAL_LOCK_ASSERT(sc);
@@ -925,8 +1133,17 @@ mge_init_locked(void *arg)
PORT_CONFIG_ARO_RXQ(0));
MGE_WRITE(sc, MGE_PORT_EXT_CONFIG , 0x0);
+ /* Configure promisc mode */
+ mge_set_prom_mode(sc, MGE_RX_DEFAULT_QUEUE);
+
+ media_status = sc->mge_media_status;
+ if (sc->switch_attached) {
+ media_status &= ~IFM_TMASK;
+ media_status |= IFM_1000_T;
+ }
+
/* Setup port configuration */
- reg_val = mge_set_port_serial_control(sc->mge_media_status);
+ reg_val = mge_set_port_serial_control(media_status);
MGE_WRITE(sc, MGE_PORT_SERIAL_CTRL, reg_val);
/* Setup SDMA configuration */
@@ -997,15 +1214,17 @@ mge_init_locked(void *arg)
sc->wd_timer = 0;
/* Schedule watchdog timeout */
- callout_reset(&sc->wd_callout, hz, mge_tick, sc);
+ if (sc->phy_attached)
+ callout_reset(&sc->wd_callout, hz, mge_tick, sc);
}
static void
mge_intr_rxtx(void *arg)
{
- struct mge_softc *sc = arg;
+ struct mge_softc *sc;
uint32_t int_cause, int_cause_ext;
+ sc = arg;
MGE_GLOBAL_LOCK(sc);
#ifdef DEVICE_POLLING
@@ -1038,9 +1257,10 @@ mge_intr_rxtx(void *arg)
static void
mge_intr_err(void *arg)
{
- struct mge_softc *sc = arg;
+ struct mge_softc *sc;
struct ifnet *ifp;
+ sc = arg;
ifp = sc->ifp;
if_printf(ifp, "%s\n", __FUNCTION__);
}
@@ -1048,18 +1268,20 @@ mge_intr_err(void *arg)
static void
mge_intr_misc(void *arg)
{
- struct mge_softc *sc = arg;
+ struct mge_softc *sc;
struct ifnet *ifp;
+ sc = arg;
ifp = sc->ifp;
if_printf(ifp, "%s\n", __FUNCTION__);
}
static void
mge_intr_rx(void *arg) {
- struct mge_softc *sc = arg;
+ struct mge_softc *sc;
uint32_t int_cause, int_cause_ext;
+ sc = arg;
MGE_RECEIVE_LOCK(sc);
#ifdef DEVICE_POLLING
@@ -1201,7 +1423,6 @@ mge_intr_tx(void *arg)
MGE_TRANSMIT_UNLOCK(sc);
}
-
static void
mge_intr_tx_locked(struct mge_softc *sc)
{
@@ -1257,7 +1478,6 @@ mge_intr_tx_locked(struct mge_softc *sc)
mge_start_locked(ifp);
}
}
-
static int
mge_ioctl(struct ifnet *ifp, u_long command, caddr_t data)
{
@@ -1331,6 +1551,18 @@ mge_ioctl(struct ifnet *ifp, u_long command, caddr_t data)
break;
case SIOCGIFMEDIA: /* fall through */
case SIOCSIFMEDIA:
+ /*
+ * Setting up media type via ioctls is *not* supported for MAC
+ * which is connected to switch. Use etherswitchcfg.
+ */
+ if (!sc->phy_attached && (command == SIOCSIFMEDIA))
+ return (0);
+ else if (!sc->phy_attached) {
+ error = ifmedia_ioctl(ifp, ifr, &sc->mge_ifmedia,
+ command);
+ break;
+ }
+
if (IFM_SUBTYPE(ifr->ifr_media) == IFM_1000_T
&& !(ifr->ifr_media & IFM_FDX)) {
device_printf(sc->dev,
@@ -1349,41 +1581,23 @@ static int
mge_miibus_readreg(device_t dev, int phy, int reg)
{
struct mge_softc *sc;
- uint32_t retries;
-
sc = device_get_softc(dev);
- MGE_WRITE(sc->phy_sc, MGE_REG_SMI, 0x1fffffff &
- (MGE_SMI_READ | (reg << 21) | (phy << 16)));
-
- retries = MGE_SMI_READ_RETRIES;
- while (--retries &&
- !(MGE_READ(sc->phy_sc, MGE_REG_SMI) & MGE_SMI_READVALID))
- DELAY(MGE_SMI_READ_DELAY);
+ KASSERT(!switch_attached, ("miibus used with switch attached"));
- if (retries == 0)
- device_printf(dev, "Timeout while reading from PHY\n");
-
- return (MGE_READ(sc->phy_sc, MGE_REG_SMI) & 0xffff);
+ return (mv_read_ext_phy(dev, phy, reg));
}
static int
mge_miibus_writereg(device_t dev, int phy, int reg, int value)
{
struct mge_softc *sc;
- uint32_t retries;
-
sc = device_get_softc(dev);
- MGE_WRITE(sc->phy_sc, MGE_REG_SMI, 0x1fffffff &
- (MGE_SMI_WRITE | (reg << 21) | (phy << 16) | (value & 0xffff)));
+ KASSERT(!switch_attached, ("miibus used with switch attached"));
- retries = MGE_SMI_WRITE_RETRIES;
- while (--retries && MGE_READ(sc->phy_sc, MGE_REG_SMI) & MGE_SMI_BUSY)
- DELAY(MGE_SMI_WRITE_DELAY);
+ mv_write_ext_phy(dev, phy, reg, value);
- if (retries == 0)
- device_printf(dev, "Timeout while writing to PHY\n");
return (0);
}
@@ -1489,6 +1703,10 @@ mge_tick(void *msc)
{
struct mge_softc *sc = msc;
+ KASSERT(sc->phy_attached == 1, ("mge_tick while PHY not attached"));
+
+ MGE_GLOBAL_LOCK(sc);
+
/* Check for TX timeout */
mge_watchdog(sc);
@@ -1498,8 +1716,12 @@ mge_tick(void *msc)
if(sc->mge_media_status != sc->mii->mii_media.ifm_media)
mge_ifmedia_upd(sc->ifp);
+ MGE_GLOBAL_UNLOCK(sc);
+
/* Schedule another timeout one second from now */
callout_reset(&sc->wd_callout, hz, mge_tick, sc);
+
+ return;
}
static void
@@ -1509,10 +1731,7 @@ mge_watchdog(struct mge_softc *sc)
ifp = sc->ifp;
- MGE_GLOBAL_LOCK(sc);
-
if (sc->wd_timer == 0 || --sc->wd_timer) {
- MGE_GLOBAL_UNLOCK(sc);
return;
}
@@ -1521,8 +1740,6 @@ mge_watchdog(struct mge_softc *sc)
mge_stop(sc);
mge_init_locked(sc);
-
- MGE_GLOBAL_UNLOCK(sc);
}
static void
@@ -1571,7 +1788,7 @@ mge_start_locked(struct ifnet *ifp)
/* The driver support only one DMA fragment. */
if (m0->m_next != NULL) {
mtmp = m_defrag(m0, M_NOWAIT);
- if (mtmp)
+ if (mtmp != NULL)
m0 = mtmp;
}
@@ -1663,8 +1880,9 @@ mge_stop(struct mge_softc *sc)
DELAY(100);
}
- if(!count)
- if_printf(ifp, "%s: timeout while waiting for end of transmission\n",
+ if (count == 0)
+ if_printf(ifp,
+ "%s: timeout while waiting for end of transmission\n",
__FUNCTION__);
reg_val = MGE_READ(sc, MGE_PORT_SERIAL_CTRL);
@@ -1711,7 +1929,7 @@ mge_offload_setup_descriptor(struct mge_softc *sc, struct mge_desc_wrapper *dw)
struct ip *ip;
int ehlen, etype;
- if (csum_flags) {
+ if (csum_flags != 0) {
if (eh->evl_encap_proto == htons(ETHERTYPE_VLAN)) {
etype = ntohs(eh->evl_proto);
ehlen = ETHER_HDR_LEN + ETHER_VLAN_ENCAP_LEN;
@@ -1927,3 +2145,23 @@ mge_add_sysctls(struct mge_softc *sc)
CTLTYPE_UINT | CTLFLAG_RW, sc, MGE_IC_TX, mge_sysctl_ic,
"I", "IC TX time threshold");
}
+
+static int
+mge_mdio_writereg(device_t dev, int phy, int reg, int value)
+{
+
+ mv_write_ge_smi(dev, phy, reg, value);
+
+ return (0);
+}
+
+
+static int
+mge_mdio_readreg(device_t dev, int phy, int reg)
+{
+ int ret;
+
+ ret = mv_read_ge_smi(dev, phy, reg);
+
+ return (ret);
+}
diff --git a/sys/dev/mge/if_mgevar.h b/sys/dev/mge/if_mgevar.h
index 0ab28bf..31b9ac3 100644
--- a/sys/dev/mge/if_mgevar.h
+++ b/sys/dev/mge/if_mgevar.h
@@ -34,6 +34,8 @@
#ifndef __IF_MGE_H__
#define __IF_MGE_H__
+#include <arm/mv/mvvar.h>
+
#define MGE_INTR_COUNT 5 /* ETH controller occupies 5 IRQ lines */
#define MGE_TX_DESC_NUM 256
#define MGE_RX_DESC_NUM 256
@@ -71,6 +73,7 @@ struct mge_softc {
device_t miibus;
struct mii_data *mii;
+ struct ifmedia mge_ifmedia;
struct resource *res[1 + MGE_INTR_COUNT]; /* resources */
void *ih_cookie[MGE_INTR_COUNT]; /* interrupt handlers cookies */
struct mtx transmit_lock; /* transmitter lock */
@@ -106,6 +109,8 @@ struct mge_softc {
int mge_intr_cnt;
uint8_t mge_hw_csum;
+ int phy_attached;
+ int switch_attached;
struct mge_softc *phy_sc;
};
@@ -132,10 +137,8 @@ struct mge_softc {
#define MGE_RECEIVE_LOCK_ASSERT(sc) mtx_assert(&(sc)->receive_lock, MA_OWNED)
#define MGE_GLOBAL_LOCK(sc) do { \
- if ((mtx_owned(&(sc)->transmit_lock) ? 1 : 0) != \
- (mtx_owned(&(sc)->receive_lock) ? 1 : 0)) { \
- panic("mge deadlock possibility detection!"); \
- } \
+ mtx_assert(&(sc)->transmit_lock, MA_NOTOWNED); \
+ mtx_assert(&(sc)->receive_lock, MA_NOTOWNED); \
mtx_lock(&(sc)->transmit_lock); \
mtx_lock(&(sc)->receive_lock); \
} while (0)
@@ -150,6 +153,14 @@ struct mge_softc {
MGE_RECEIVE_LOCK_ASSERT(sc); \
} while (0)
+#define MGE_SMI_LOCK() do { \
+ sx_assert(&sx_smi, SA_UNLOCKED); \
+ sx_xlock(&sx_smi); \
+} while (0)
+
+#define MGE_SMI_UNLOCK() sx_unlock(&sx_smi)
+#define MGE_SMI_LOCK_ASSERT() sx_assert(&sx_smi, SA_XLOCKED)
+
/* SMI-related macros */
#define MGE_REG_PHYDEV 0x000
#define MGE_REG_SMI 0x004
@@ -158,6 +169,17 @@ struct mge_softc {
#define MGE_SMI_READVALID (1 << 27)
#define MGE_SMI_BUSY (1 << 28)
+#define MGE_SMI_MASK 0x1fffffff
+#define MGE_SMI_DATA_MASK 0xffff
+#define MGE_SMI_DELAY 1000
+
+#define MGE_SWITCH_PHYDEV 6
+
+/* Internal Switch SMI Command */
+
+#define SW_SMI_READ_CMD(phy, reg) ((1 << 15) | (1 << 12) | (1 << 11) | (phy << 5) | reg)
+#define SW_SMI_WRITE_CMD(phy, reg) ((1 << 15) | (1 << 12) | (1 << 10) | (phy << 5) | reg)
+
/* TODO verify the timings and retries count w/specs */
#define MGE_SMI_READ_RETRIES 1000
#define MGE_SMI_READ_DELAY 100
diff --git a/sys/dev/ntb/if_ntb/if_ntb.c b/sys/dev/ntb/if_ntb/if_ntb.c
index 6a1fd92..c9ca3b0 100644
--- a/sys/dev/ntb/if_ntb/if_ntb.c
+++ b/sys/dev/ntb/if_ntb/if_ntb.c
@@ -90,7 +90,7 @@ enum ntb_link_event {
NTB_LINK_UP,
};
-static unsigned int transport_mtu = 0x4000 + ETHER_HDR_LEN + ETHER_CRC_LEN;
+static unsigned int transport_mtu = 0x10000 + ETHER_HDR_LEN + ETHER_CRC_LEN;
static uint64_t max_mw_size;
SYSCTL_UQUAD(_hw_ntb, OID_AUTO, max_mw_size, CTLFLAG_RDTUN, &max_mw_size, 0,
@@ -105,6 +105,8 @@ SYSCTL_UINT(_hw_ntb, OID_AUTO, max_num_clients, CTLFLAG_RDTUN,
STAILQ_HEAD(ntb_queue_list, ntb_queue_entry);
+typedef unsigned ntb_q_idx_t;
+
struct ntb_queue_entry {
/* ntb_queue list reference */
STAILQ_ENTRY(ntb_queue_entry) entry;
@@ -117,11 +119,11 @@ struct ntb_queue_entry {
struct ntb_transport_qp *qp;
struct ntb_payload_header *x_hdr;
- unsigned index;
+ ntb_q_idx_t index;
};
struct ntb_rx_info {
- unsigned int entry;
+ ntb_q_idx_t entry;
};
struct ntb_transport_qp {
@@ -143,21 +145,22 @@ struct ntb_transport_qp {
struct mtx ntb_tx_free_q_lock;
void *tx_mw;
bus_addr_t tx_mw_phys;
- uint64_t tx_index;
- uint64_t tx_max_entry;
+ ntb_q_idx_t tx_index;
+ ntb_q_idx_t tx_max_entry;
uint64_t tx_max_frame;
void (*rx_handler)(struct ntb_transport_qp *qp, void *qp_data,
void *data, int len);
+ struct ntb_queue_list rx_post_q;
struct ntb_queue_list rx_pend_q;
struct ntb_queue_list rx_free_q;
- struct mtx ntb_rx_pend_q_lock;
- struct mtx ntb_rx_free_q_lock;
+ /* ntb_rx_q_lock: synchronize access to rx_XXXX_q */
+ struct mtx ntb_rx_q_lock;
struct task rx_completion_task;
struct task rxc_db_work;
void *rx_buff;
- uint64_t rx_index;
- uint64_t rx_max_entry;
+ ntb_q_idx_t rx_index;
+ ntb_q_idx_t rx_max_entry;
uint64_t rx_max_frame;
void (*event_handler)(void *data, enum ntb_link_event status);
@@ -177,6 +180,7 @@ struct ntb_transport_qp {
uint64_t tx_bytes;
uint64_t tx_pkts;
uint64_t tx_ring_full;
+ uint64_t tx_err_no_buf;
};
struct ntb_queue_handlers {
@@ -285,21 +289,23 @@ static void ntb_memcpy_tx(struct ntb_transport_qp *qp,
struct ntb_queue_entry *entry, void *offset);
static void ntb_qp_full(void *arg);
static void ntb_transport_rxc_db(void *arg, int pending);
-static void ntb_rx_pendq_full(void *arg);
static int ntb_process_rxc(struct ntb_transport_qp *qp);
-static void ntb_rx_copy_task(struct ntb_transport_qp *qp,
+static void ntb_memcpy_rx(struct ntb_transport_qp *qp,
struct ntb_queue_entry *entry, void *offset);
+static inline void ntb_rx_copy_callback(struct ntb_transport_qp *qp,
+ void *data);
static void ntb_complete_rxc(void *arg, int pending);
-static void ntb_transport_doorbell_callback(void *data, int vector);
+static void ntb_transport_doorbell_callback(void *data, uint32_t vector);
static void ntb_transport_event_callback(void *data);
static void ntb_transport_link_work(void *arg);
-static int ntb_set_mw(struct ntb_transport_ctx *, int num_mw, unsigned size);
+static int ntb_set_mw(struct ntb_transport_ctx *, int num_mw, size_t size);
static void ntb_free_mw(struct ntb_transport_ctx *nt, int num_mw);
static int ntb_transport_setup_qp_mw(struct ntb_transport_ctx *nt,
unsigned int qp_num);
static void ntb_qp_link_work(void *arg);
static void ntb_transport_link_cleanup(struct ntb_transport_ctx *nt);
static void ntb_qp_link_down(struct ntb_transport_qp *qp);
+static void ntb_qp_link_down_reset(struct ntb_transport_qp *qp);
static void ntb_qp_link_cleanup(struct ntb_transport_qp *qp);
static void ntb_transport_link_down(struct ntb_transport_qp *qp);
static void ntb_send_link_down(struct ntb_transport_qp *qp);
@@ -307,6 +313,8 @@ static void ntb_list_add(struct mtx *lock, struct ntb_queue_entry *entry,
struct ntb_queue_list *list);
static struct ntb_queue_entry *ntb_list_rm(struct mtx *lock,
struct ntb_queue_list *list);
+static struct ntb_queue_entry *ntb_list_mv(struct mtx *lock,
+ struct ntb_queue_list *from, struct ntb_queue_list *to);
static void create_random_local_eui48(u_char *eaddr);
static unsigned int ntb_transport_max_size(struct ntb_transport_qp *qp);
@@ -642,9 +650,9 @@ ntb_transport_init_queue(struct ntb_transport_ctx *nt, unsigned int qp_num)
qp->qp_num = qp_num;
qp->transport = nt;
qp->ntb = nt->ntb;
- qp->link_is_up = false;
qp->client_ready = false;
qp->event_handler = NULL;
+ ntb_qp_link_down_reset(qp);
if (nt->qp_count % mw_count && mw_num + 1 < nt->qp_count / mw_count)
num_qps_mw = nt->qp_count / mw_count + 1;
@@ -668,20 +676,20 @@ ntb_transport_init_queue(struct ntb_transport_ctx *nt, unsigned int qp_num)
qp->rx_info = (void *)((char *)qp->tx_mw + tx_size);
/* Due to house-keeping, there must be at least 2 buffs */
- qp->tx_max_frame = min(transport_mtu + sizeof(struct ntb_payload_header),
- tx_size / 2);
+ qp->tx_max_frame = qmin(tx_size / 2,
+ transport_mtu + sizeof(struct ntb_payload_header));
qp->tx_max_entry = tx_size / qp->tx_max_frame;
callout_init(&qp->link_work, 0);
callout_init(&qp->queue_full, 1);
callout_init(&qp->rx_full, 1);
- mtx_init(&qp->ntb_rx_pend_q_lock, "ntb rx pend q", NULL, MTX_SPIN);
- mtx_init(&qp->ntb_rx_free_q_lock, "ntb rx free q", NULL, MTX_SPIN);
+ mtx_init(&qp->ntb_rx_q_lock, "ntb rx q", NULL, MTX_SPIN);
mtx_init(&qp->ntb_tx_free_q_lock, "ntb tx free q", NULL, MTX_SPIN);
TASK_INIT(&qp->rx_completion_task, 0, ntb_complete_rxc, qp);
TASK_INIT(&qp->rxc_db_work, 0, ntb_transport_rxc_db, qp);
+ STAILQ_INIT(&qp->rx_post_q);
STAILQ_INIT(&qp->rx_pend_q);
STAILQ_INIT(&qp->rx_free_q);
STAILQ_INIT(&qp->tx_free_q);
@@ -706,10 +714,13 @@ ntb_transport_free_queue(struct ntb_transport_qp *qp)
qp->tx_handler = NULL;
qp->event_handler = NULL;
- while ((entry = ntb_list_rm(&qp->ntb_rx_free_q_lock, &qp->rx_free_q)))
+ while ((entry = ntb_list_rm(&qp->ntb_rx_q_lock, &qp->rx_free_q)))
+ free(entry, M_NTB_IF);
+
+ while ((entry = ntb_list_rm(&qp->ntb_rx_q_lock, &qp->rx_pend_q)))
free(entry, M_NTB_IF);
- while ((entry = ntb_list_rm(&qp->ntb_rx_pend_q_lock, &qp->rx_pend_q)))
+ while ((entry = ntb_list_rm(&qp->ntb_rx_q_lock, &qp->rx_post_q)))
free(entry, M_NTB_IF);
while ((entry = ntb_list_rm(&qp->ntb_tx_free_q_lock, &qp->tx_free_q)))
@@ -764,7 +775,7 @@ ntb_transport_create_queue(void *data, struct ntb_softc *ntb,
entry->cb_data = nt->ifp;
entry->buf = NULL;
entry->len = transport_mtu;
- ntb_list_add(&qp->ntb_rx_pend_q_lock, entry, &qp->rx_pend_q);
+ ntb_list_add(&qp->ntb_rx_q_lock, entry, &qp->rx_pend_q);
}
for (i = 0; i < NTB_QP_DEF_NUM_ENTRIES; i++) {
@@ -792,7 +803,7 @@ ntb_transport_link_up(struct ntb_transport_qp *qp)
qp->client_ready = true;
if (bootverbose)
- device_printf(ntb_get_device(qp->ntb), "qp client ready\n");
+ if_printf(qp->transport->ifp, "qp client ready\n");
if (qp->transport->link_is_up)
callout_reset(&qp->link_work, 0, ntb_qp_link_work, qp);
@@ -830,7 +841,8 @@ ntb_transport_tx_enqueue(struct ntb_transport_qp *qp, void *cb, void *data,
entry = ntb_list_rm(&qp->ntb_tx_free_q_lock, &qp->tx_free_q);
if (entry == NULL) {
CTR0(KTR_NTB, "TX: could not get entry from tx_free_q");
- return (ENOMEM);
+ qp->tx_err_no_buf++;
+ return (EBUSY);
}
CTR1(KTR_NTB, "TX: got entry %p from tx_free_q", entry);
@@ -946,18 +958,10 @@ ntb_qp_full(void *arg)
/* Transport Rx */
static void
-ntb_rx_pendq_full(void *arg)
-{
-
- CTR0(KTR_NTB, "RX: ntb_rx_pendq_full callout");
- ntb_transport_rxc_db(arg, 0);
-}
-
-static void
ntb_transport_rxc_db(void *arg, int pending __unused)
{
struct ntb_transport_qp *qp = arg;
- uint64_t i;
+ ntb_q_idx_t i;
int rc;
/*
@@ -1025,7 +1029,7 @@ ntb_process_rxc(struct ntb_transport_qp *qp)
return (EIO);
}
- entry = ntb_list_rm(&qp->ntb_rx_pend_q_lock, &qp->rx_pend_q);
+ entry = ntb_list_mv(&qp->ntb_rx_q_lock, &qp->rx_pend_q, &qp->rx_post_q);
if (entry == NULL) {
qp->rx_err_no_buf++;
CTR0(KTR_NTB, "RX: No entries in rx_pend_q");
@@ -1045,7 +1049,6 @@ ntb_process_rxc(struct ntb_transport_qp *qp)
entry->len = -EIO;
entry->flags |= IF_NTB_DESC_DONE_FLAG;
- ntb_list_add(&qp->ntb_rx_free_q_lock, entry, &qp->rx_free_q);
taskqueue_enqueue(taskqueue_swi, &qp->rx_completion_task);
} else {
qp->rx_bytes += hdr->len;
@@ -1055,7 +1058,7 @@ ntb_process_rxc(struct ntb_transport_qp *qp)
entry->len = hdr->len;
- ntb_rx_copy_task(qp, entry, offset);
+ ntb_memcpy_rx(qp, entry, offset);
}
qp->rx_index++;
@@ -1064,7 +1067,7 @@ ntb_process_rxc(struct ntb_transport_qp *qp)
}
static void
-ntb_rx_copy_task(struct ntb_transport_qp *qp, struct ntb_queue_entry *entry,
+ntb_memcpy_rx(struct ntb_transport_qp *qp, struct ntb_queue_entry *entry,
void *offset)
{
struct ifnet *ifp = entry->cb_data;
@@ -1079,15 +1082,18 @@ ntb_rx_copy_task(struct ntb_transport_qp *qp, struct ntb_queue_entry *entry,
/* Ensure that the data is globally visible before clearing the flag */
wmb();
- entry->x_hdr->flags = 0;
- /* TODO: replace with bus_space_write */
- qp->rx_info->entry = qp->rx_index;
- CTR2(KTR_NTB,
- "RX: copied entry %p to mbuf %p. Adding entry to rx_free_q", entry,
- m);
- ntb_list_add(&qp->ntb_rx_free_q_lock, entry, &qp->rx_free_q);
+ CTR2(KTR_NTB, "RX: copied entry %p to mbuf %p.", entry, m);
+ ntb_rx_copy_callback(qp, entry);
+}
+
+static inline void
+ntb_rx_copy_callback(struct ntb_transport_qp *qp, void *data)
+{
+ struct ntb_queue_entry *entry;
+ entry = data;
+ entry->flags |= IF_NTB_DESC_DONE_FLAG;
taskqueue_enqueue(taskqueue_swi, &qp->rx_completion_task);
}
@@ -1095,34 +1101,43 @@ static void
ntb_complete_rxc(void *arg, int pending)
{
struct ntb_transport_qp *qp = arg;
- struct mbuf *m;
struct ntb_queue_entry *entry;
+ struct mbuf *m;
+ unsigned len;
CTR0(KTR_NTB, "RX: rx_completion_task");
- while ((entry = ntb_list_rm(&qp->ntb_rx_free_q_lock, &qp->rx_free_q))) {
+ mtx_lock_spin(&qp->ntb_rx_q_lock);
+
+ while (!STAILQ_EMPTY(&qp->rx_post_q)) {
+ entry = STAILQ_FIRST(&qp->rx_post_q);
+ if ((entry->flags & IF_NTB_DESC_DONE_FLAG) == 0)
+ break;
+
+ entry->x_hdr->flags = 0;
+ /* XXX bus_space_write */
+ qp->rx_info->entry = entry->index;
+
+ len = entry->len;
m = entry->buf;
+
+ STAILQ_REMOVE_HEAD(&qp->rx_post_q, entry);
+ STAILQ_INSERT_TAIL(&qp->rx_free_q, entry, entry);
+
+ mtx_unlock_spin(&qp->ntb_rx_q_lock);
+
CTR2(KTR_NTB, "RX: completing entry %p, mbuf %p", entry, m);
- if (qp->rx_handler && qp->client_ready)
- qp->rx_handler(qp, qp->cb_data, m, entry->len);
+ if (qp->rx_handler != NULL && qp->client_ready)
+ qp->rx_handler(qp, qp->cb_data, m, len);
- entry->buf = NULL;
- entry->len = qp->transport->bufsize;
-
- CTR1(KTR_NTB,"RX: entry %p removed from rx_free_q "
- "and added to rx_pend_q", entry);
- ntb_list_add(&qp->ntb_rx_pend_q_lock, entry, &qp->rx_pend_q);
- if (qp->rx_err_no_buf > qp->last_rx_no_buf) {
- qp->last_rx_no_buf = qp->rx_err_no_buf;
- CTR0(KTR_NTB, "RX: could spawn rx task");
- callout_reset(&qp->rx_full, hz / 1000, ntb_rx_pendq_full,
- qp);
- }
+ mtx_lock_spin(&qp->ntb_rx_q_lock);
}
+
+ mtx_unlock_spin(&qp->ntb_rx_q_lock);
}
static void
-ntb_transport_doorbell_callback(void *data, int vector)
+ntb_transport_doorbell_callback(void *data, uint32_t vector)
{
struct ntb_transport_ctx *nt = data;
struct ntb_transport_qp *qp;
@@ -1135,14 +1150,7 @@ ntb_transport_doorbell_callback(void *data, int vector)
vec_mask = ntb_db_vector_mask(nt->ntb, vector);
while (vec_mask != 0) {
- qp_num = ffsl(vec_mask);
- /* i386 doesn't have ffsll(), fake it */
- if (qp_num == 0) {
- qp_num = ffsl(vec_mask >> 32);
- KASSERT(qp_num != 0, ("ffs"));
- qp_num += 32;
- }
- qp_num--;
+ qp_num = ffsll(vec_mask) - 1;
if (test_bit(qp_num, &db_bits)) {
qp = &nt->qp_vec[qp_num];
@@ -1161,11 +1169,11 @@ ntb_transport_event_callback(void *data)
if (ntb_link_is_up(nt->ntb, NULL, NULL)) {
if (bootverbose)
- device_printf(ntb_get_device(nt->ntb), "HW link up\n");
+ if_printf(nt->ifp, "HW link up\n");
callout_reset(&nt->link_work, 0, ntb_transport_link_work, nt);
} else {
if (bootverbose)
- device_printf(ntb_get_device(nt->ntb), "HW link down\n");
+ if_printf(nt->ifp, "HW link down\n");
ntb_transport_link_cleanup(nt);
}
}
@@ -1228,7 +1236,7 @@ ntb_transport_link_work(void *arg)
nt->link_is_up = true;
if (bootverbose)
- device_printf(ntb_get_device(ntb), "transport link up\n");
+ if_printf(nt->ifp, "transport link up\n");
for (i = 0; i < nt->qp_count; i++) {
qp = &nt->qp_vec[i];
@@ -1251,12 +1259,15 @@ out:
}
static int
-ntb_set_mw(struct ntb_transport_ctx *nt, int num_mw, unsigned size)
+ntb_set_mw(struct ntb_transport_ctx *nt, int num_mw, size_t size)
{
struct ntb_transport_mw *mw = &nt->mw_vec[num_mw];
- unsigned xlat_size, buff_size;
+ size_t xlat_size, buff_size;
int rc;
+ if (size == 0)
+ return (EINVAL);
+
xlat_size = roundup(size, mw->xlat_align_size);
buff_size = roundup(size, mw->xlat_align);
@@ -1289,8 +1300,8 @@ ntb_set_mw(struct ntb_transport_ctx *nt, int num_mw, unsigned size)
* with the Linux driver.
*/
if (mw->dma_addr % mw->xlat_align != 0) {
- device_printf(ntb_get_device(nt->ntb),
- "DMA memory 0x%jx not aligned to BAR size 0x%x\n",
+ if_printf(nt->ifp,
+ "DMA memory 0x%jx not aligned to BAR size 0x%zx\n",
(uintmax_t)mw->dma_addr, size);
ntb_free_mw(nt, num_mw);
return (ENOMEM);
@@ -1299,8 +1310,7 @@ ntb_set_mw(struct ntb_transport_ctx *nt, int num_mw, unsigned size)
/* Notify HW the memory location of the receive buffer */
rc = ntb_mw_set_trans(nt->ntb, num_mw, mw->dma_addr, mw->xlat_size);
if (rc) {
- device_printf(ntb_get_device(nt->ntb),
- "Unable to set mw%d translation", num_mw);
+ if_printf(nt->ifp, "Unable to set mw%d translation", num_mw);
ntb_free_mw(nt, num_mw);
return (rc);
}
@@ -1329,7 +1339,7 @@ ntb_transport_setup_qp_mw(struct ntb_transport_ctx *nt, unsigned int qp_num)
struct ntb_transport_qp *qp = &nt->qp_vec[qp_num];
struct ntb_transport_mw *mw;
void *offset;
- uint64_t i;
+ ntb_q_idx_t i;
size_t rx_size;
unsigned num_qps_mw, mw_num, mw_count;
@@ -1352,8 +1362,8 @@ ntb_transport_setup_qp_mw(struct ntb_transport_ctx *nt, unsigned int qp_num)
qp->remote_rx_info = (void*)((char *)qp->rx_buff + rx_size);
/* Due to house-keeping, there must be at least 2 buffs */
- qp->rx_max_frame = min(transport_mtu + sizeof(struct ntb_payload_header),
- rx_size / 2);
+ qp->rx_max_frame = qmin(rx_size / 2,
+ transport_mtu + sizeof(struct ntb_payload_header));
qp->rx_max_entry = rx_size / qp->rx_max_frame;
qp->rx_index = 0;
@@ -1380,19 +1390,19 @@ ntb_qp_link_work(void *arg)
struct ntb_transport_qp *qp = arg;
struct ntb_softc *ntb = qp->ntb;
struct ntb_transport_ctx *nt = qp->transport;
- int val;
+ uint32_t val, dummy;
ntb_spad_read(ntb, IF_NTB_QP_LINKS, &val);
ntb_peer_spad_write(ntb, IF_NTB_QP_LINKS, val | (1ull << qp->qp_num));
/* query remote spad for qp ready bits */
- ntb_peer_spad_read(ntb, IF_NTB_QP_LINKS, &val);
+ ntb_peer_spad_read(ntb, IF_NTB_QP_LINKS, &dummy);
/* See if the remote side is up */
if ((val & (1ull << qp->qp_num)) != 0) {
if (bootverbose)
- device_printf(ntb_get_device(ntb), "qp link up\n");
+ if_printf(nt->ifp, "qp link up\n");
qp->link_is_up = true;
if (qp->event_handler != NULL)
@@ -1444,16 +1454,29 @@ ntb_qp_link_down(struct ntb_transport_qp *qp)
}
static void
+ntb_qp_link_down_reset(struct ntb_transport_qp *qp)
+{
+
+ qp->link_is_up = false;
+
+ qp->tx_index = qp->rx_index = 0;
+ qp->tx_bytes = qp->rx_bytes = 0;
+ qp->tx_pkts = qp->rx_pkts = 0;
+
+ qp->rx_ring_empty = 0;
+ qp->tx_ring_full = 0;
+
+ qp->rx_err_no_buf = qp->tx_err_no_buf = 0;
+ qp->rx_err_oflow = qp->rx_err_ver = 0;
+}
+
+static void
ntb_qp_link_cleanup(struct ntb_transport_qp *qp)
{
struct ntb_transport_ctx *nt = qp->transport;
- if (!qp->link_is_up) {
- callout_drain(&qp->link_work);
- return;
- }
-
- qp->link_is_up = false;
+ callout_drain(&qp->link_work);
+ ntb_qp_link_down_reset(qp);
if (qp->event_handler != NULL)
qp->event_handler(qp->cb_data, NTB_LINK_DOWN);
@@ -1502,8 +1525,6 @@ ntb_send_link_down(struct ntb_transport_qp *qp)
if (!qp->link_is_up)
return;
- qp->link_is_up = false;
-
for (i = 0; i < NTB_LINK_DOWN_TIMEOUT; i++) {
entry = ntb_list_rm(&qp->ntb_tx_free_q_lock, &qp->tx_free_q);
if (entry != NULL)
@@ -1524,6 +1545,8 @@ ntb_send_link_down(struct ntb_transport_qp *qp)
if (rc != 0)
printf("ntb: Failed to send link down\n");
mtx_unlock(&qp->transport->tx_lock);
+
+ ntb_qp_link_down_reset(qp);
}
@@ -1557,6 +1580,26 @@ out:
return (entry);
}
+static struct ntb_queue_entry *
+ntb_list_mv(struct mtx *lock, struct ntb_queue_list *from,
+ struct ntb_queue_list *to)
+{
+ struct ntb_queue_entry *entry;
+
+ mtx_lock_spin(lock);
+ if (STAILQ_EMPTY(from)) {
+ entry = NULL;
+ goto out;
+ }
+ entry = STAILQ_FIRST(from);
+ STAILQ_REMOVE_HEAD(from, entry);
+ STAILQ_INSERT_TAIL(to, entry, entry);
+
+out:
+ mtx_unlock_spin(lock);
+ return (entry);
+}
+
/* Helper functions */
/* TODO: This too should really be part of the kernel */
#define EUI48_MULTICAST 1 << 0
diff --git a/sys/dev/ntb/ntb_hw/ntb_hw.c b/sys/dev/ntb/ntb_hw/ntb_hw.c
index 9a3e189..e918d26 100644
--- a/sys/dev/ntb/ntb_hw/ntb_hw.c
+++ b/sys/dev/ntb/ntb_hw/ntb_hw.c
@@ -32,10 +32,12 @@ __FBSDID("$FreeBSD$");
#include <sys/kernel.h>
#include <sys/systm.h>
#include <sys/bus.h>
+#include <sys/endian.h>
#include <sys/malloc.h>
#include <sys/module.h>
#include <sys/queue.h>
#include <sys/rman.h>
+#include <sys/sbuf.h>
#include <sys/sysctl.h>
#include <vm/vm.h>
#include <vm/pmap.h>
@@ -60,16 +62,28 @@ __FBSDID("$FreeBSD$");
* be picked up and redistributed in Linux with a dual GPL/BSD license.
*/
-#define MAX_MSIX_INTERRUPTS MAX(XEON_DB_COUNT, SOC_DB_COUNT)
+#define MAX_MSIX_INTERRUPTS MAX(XEON_DB_COUNT, ATOM_DB_COUNT)
#define NTB_HB_TIMEOUT 1 /* second */
-#define SOC_LINK_RECOVERY_TIME 500 /* ms */
+#define ATOM_LINK_RECOVERY_TIME 500 /* ms */
#define DEVICE2SOFTC(dev) ((struct ntb_softc *) device_get_softc(dev))
enum ntb_device_type {
NTB_XEON,
- NTB_SOC
+ NTB_ATOM
+};
+
+/* ntb_conn_type are hardware numbers, cannot change. */
+enum ntb_conn_type {
+ NTB_CONN_TRANSPARENT = 0,
+ NTB_CONN_B2B = 1,
+ NTB_CONN_RP = 2,
+};
+
+enum ntb_b2b_direction {
+ NTB_DEV_USD = 0,
+ NTB_DEV_DSD = 1,
};
enum ntb_bar {
@@ -156,7 +170,7 @@ struct ntb_b2b_addr {
struct ntb_softc {
device_t device;
enum ntb_device_type type;
- uint64_t features;
+ uint32_t features;
struct ntb_pci_bar_info bar_info[NTB_MAX_BARS];
struct ntb_int_info int_info[MAX_MSIX_INTERRUPTS];
@@ -173,19 +187,9 @@ struct ntb_softc {
#define CTX_ASSERT(sc,f) mtx_assert(&(sc)->ctx_lock, (f))
struct mtx ctx_lock;
- struct {
- uint32_t ldb;
- uint32_t ldb_mask;
- uint32_t bar4_xlat;
- uint32_t bar5_xlat;
- uint32_t spad_local;
- uint32_t spci_cmd;
- } reg_ofs;
- uint32_t ppd;
- uint8_t conn_type;
- uint8_t dev_type;
- uint8_t link_width;
- uint8_t link_speed;
+ uint32_t ppd;
+ enum ntb_conn_type conn_type;
+ enum ntb_b2b_direction dev_type;
/* Offset of peer bar0 in B2B BAR */
uint64_t b2b_off;
@@ -263,7 +267,8 @@ static inline bool bar_is_64bit(struct ntb_softc *, enum ntb_bar);
static inline void bar_get_xlat_params(struct ntb_softc *, enum ntb_bar,
uint32_t *base, uint32_t *xlat, uint32_t *lmt);
static int ntb_map_pci_bars(struct ntb_softc *ntb);
-static void print_map_success(struct ntb_softc *, struct ntb_pci_bar_info *);
+static void print_map_success(struct ntb_softc *, struct ntb_pci_bar_info *,
+ const char *);
static int map_mmr_bar(struct ntb_softc *ntb, struct ntb_pci_bar_info *bar);
static int map_memory_window_bar(struct ntb_softc *ntb,
struct ntb_pci_bar_info *bar);
@@ -284,11 +289,11 @@ static void ntb_free_msix_vec(struct ntb_softc *ntb);
static struct ntb_hw_info *ntb_get_device_info(uint32_t device_id);
static void ntb_detect_max_mw(struct ntb_softc *ntb);
static int ntb_detect_xeon(struct ntb_softc *ntb);
-static int ntb_detect_soc(struct ntb_softc *ntb);
+static int ntb_detect_atom(struct ntb_softc *ntb);
static int ntb_xeon_init_dev(struct ntb_softc *ntb);
-static int ntb_soc_init_dev(struct ntb_softc *ntb);
+static int ntb_atom_init_dev(struct ntb_softc *ntb);
static void ntb_teardown_xeon(struct ntb_softc *ntb);
-static void configure_soc_secondary_side_bars(struct ntb_softc *ntb);
+static void configure_atom_secondary_side_bars(struct ntb_softc *ntb);
static void xeon_reset_sbar_size(struct ntb_softc *, enum ntb_bar idx,
enum ntb_bar regbar);
static void xeon_set_sbar_base_and_limit(struct ntb_softc *,
@@ -298,19 +303,24 @@ static void xeon_set_pbar_xlat(struct ntb_softc *, uint64_t base_addr,
static int xeon_setup_b2b_mw(struct ntb_softc *,
const struct ntb_b2b_addr *addr, const struct ntb_b2b_addr *peer_addr);
static inline bool link_is_up(struct ntb_softc *ntb);
-static inline bool soc_link_is_err(struct ntb_softc *ntb);
+static inline bool atom_link_is_err(struct ntb_softc *ntb);
static inline enum ntb_speed ntb_link_sta_speed(struct ntb_softc *);
static inline enum ntb_width ntb_link_sta_width(struct ntb_softc *);
-static void soc_link_hb(void *arg);
+static void atom_link_hb(void *arg);
static void ntb_db_event(struct ntb_softc *ntb, uint32_t vec);
-static void recover_soc_link(void *arg);
+static void recover_atom_link(void *arg);
static bool ntb_poll_link(struct ntb_softc *ntb);
static void save_bar_parameters(struct ntb_pci_bar_info *bar);
+static void ntb_sysctl_init(struct ntb_softc *);
+static int sysctl_handle_features(SYSCTL_HANDLER_ARGS);
+static int sysctl_handle_link_status(SYSCTL_HANDLER_ARGS);
+static int sysctl_handle_register(SYSCTL_HANDLER_ARGS);
static struct ntb_hw_info pci_ids[] = {
- { 0x0C4E8086, "Atom Processor S1200 NTB Primary B2B", NTB_SOC, 0 },
-
/* XXX: PS/SS IDs left out until they are supported. */
+ { 0x0C4E8086, "BWD Atom Processor S1200 Non-Transparent Bridge B2B",
+ NTB_ATOM, 0 },
+
{ 0x37258086, "JSF Xeon C35xx/C55xx Non-Transparent Bridge B2B",
NTB_XEON, NTB_SDOORBELL_LOCKUP | NTB_B2BDOORBELL_BIT14 },
{ 0x3C0D8086, "SNB Xeon E5/Core i7 Non-Transparent Bridge B2B",
@@ -325,34 +335,40 @@ static struct ntb_hw_info pci_ids[] = {
NTB_SDOORBELL_LOCKUP | NTB_B2BDOORBELL_BIT14 |
NTB_SB01BASE_LOCKUP },
- { 0x00000000, NULL, NTB_SOC, 0 }
+ { 0x00000000, NULL, NTB_ATOM, 0 }
};
-static const struct ntb_reg soc_reg = {
- .ntb_ctl = SOC_NTBCNTL_OFFSET,
- .lnk_sta = SOC_LINK_STATUS_OFFSET,
+static const struct ntb_reg atom_reg = {
+ .ntb_ctl = ATOM_NTBCNTL_OFFSET,
+ .lnk_sta = ATOM_LINK_STATUS_OFFSET,
.db_size = sizeof(uint64_t),
.mw_bar = { NTB_B2B_BAR_1, NTB_B2B_BAR_2 },
};
-static const struct ntb_alt_reg soc_b2b_reg = {
- .db_bell = SOC_B2B_DOORBELL_OFFSET,
- .spad = SOC_B2B_SPAD_OFFSET,
+static const struct ntb_alt_reg atom_pri_reg = {
+ .db_bell = ATOM_PDOORBELL_OFFSET,
+ .db_mask = ATOM_PDBMSK_OFFSET,
+ .spad = ATOM_SPAD_OFFSET,
+};
+
+static const struct ntb_alt_reg atom_b2b_reg = {
+ .db_bell = ATOM_B2B_DOORBELL_OFFSET,
+ .spad = ATOM_B2B_SPAD_OFFSET,
};
-static const struct ntb_xlat_reg soc_sec_xlat = {
+static const struct ntb_xlat_reg atom_sec_xlat = {
#if 0
/* "FIXME" says the Linux driver. */
- .bar0_base = SOC_SBAR0BASE_OFFSET,
- .bar2_base = SOC_SBAR2BASE_OFFSET,
- .bar4_base = SOC_SBAR4BASE_OFFSET,
+ .bar0_base = ATOM_SBAR0BASE_OFFSET,
+ .bar2_base = ATOM_SBAR2BASE_OFFSET,
+ .bar4_base = ATOM_SBAR4BASE_OFFSET,
- .bar2_limit = SOC_SBAR2LMT_OFFSET,
- .bar4_limit = SOC_SBAR4LMT_OFFSET,
+ .bar2_limit = ATOM_SBAR2LMT_OFFSET,
+ .bar4_limit = ATOM_SBAR4LMT_OFFSET,
#endif
- .bar2_xlat = SOC_SBAR2XLAT_OFFSET,
- .bar4_xlat = SOC_SBAR4XLAT_OFFSET,
+ .bar2_xlat = ATOM_SBAR2XLAT_OFFSET,
+ .bar4_xlat = ATOM_SBAR4XLAT_OFFSET,
};
static const struct ntb_reg xeon_reg = {
@@ -362,6 +378,12 @@ static const struct ntb_reg xeon_reg = {
.mw_bar = { NTB_B2B_BAR_1, NTB_B2B_BAR_2, NTB_B2B_BAR_3 },
};
+static const struct ntb_alt_reg xeon_pri_reg = {
+ .db_bell = XEON_PDOORBELL_OFFSET,
+ .db_mask = XEON_PDBMSK_OFFSET,
+ .spad = XEON_SPAD_OFFSET,
+};
+
static const struct ntb_alt_reg xeon_b2b_reg = {
.db_bell = XEON_B2B_DOORBELL_OFFSET,
.spad = XEON_B2B_SPAD_OFFSET,
@@ -382,7 +404,7 @@ static const struct ntb_xlat_reg xeon_sec_xlat = {
.bar5_xlat = XEON_SBAR5XLAT_OFFSET,
};
-static const struct ntb_b2b_addr xeon_b2b_usd_addr = {
+static struct ntb_b2b_addr xeon_b2b_usd_addr = {
.bar0_addr = XEON_B2B_BAR0_USD_ADDR,
.bar2_addr64 = XEON_B2B_BAR2_USD_ADDR64,
.bar4_addr64 = XEON_B2B_BAR4_USD_ADDR64,
@@ -390,7 +412,7 @@ static const struct ntb_b2b_addr xeon_b2b_usd_addr = {
.bar5_addr32 = XEON_B2B_BAR5_USD_ADDR32,
};
-static const struct ntb_b2b_addr xeon_b2b_dsd_addr = {
+static struct ntb_b2b_addr xeon_b2b_dsd_addr = {
.bar0_addr = XEON_B2B_BAR0_DSD_ADDR,
.bar2_addr64 = XEON_B2B_BAR2_DSD_ADDR64,
.bar4_addr64 = XEON_B2B_BAR4_DSD_ADDR64,
@@ -398,6 +420,37 @@ static const struct ntb_b2b_addr xeon_b2b_dsd_addr = {
.bar5_addr32 = XEON_B2B_BAR5_DSD_ADDR32,
};
+SYSCTL_NODE(_hw_ntb, OID_AUTO, xeon_b2b, CTLFLAG_RW, 0,
+ "B2B MW segment overrides -- MUST be the same on both sides");
+
+SYSCTL_UQUAD(_hw_ntb_xeon_b2b, OID_AUTO, usd_bar2_addr64, CTLFLAG_RDTUN,
+ &xeon_b2b_usd_addr.bar2_addr64, 0, "If using B2B topology on Xeon "
+ "hardware, use this 64-bit address on the bus between the NTB devices for "
+ "the window at BAR2, on the upstream side of the link. MUST be the same "
+ "address on both sides.");
+SYSCTL_UQUAD(_hw_ntb_xeon_b2b, OID_AUTO, usd_bar4_addr64, CTLFLAG_RDTUN,
+ &xeon_b2b_usd_addr.bar4_addr64, 0, "See usd_bar2_addr64, but BAR4.");
+SYSCTL_UQUAD(_hw_ntb_xeon_b2b, OID_AUTO, usd_bar4_addr32, CTLFLAG_RDTUN,
+ &xeon_b2b_usd_addr.bar4_addr32, 0, "See usd_bar2_addr64, but BAR4 "
+ "(split-BAR mode).");
+SYSCTL_UQUAD(_hw_ntb_xeon_b2b, OID_AUTO, usd_bar5_addr32, CTLFLAG_RDTUN,
+ &xeon_b2b_usd_addr.bar5_addr32, 0, "See usd_bar2_addr64, but BAR5 "
+ "(split-BAR mode).");
+
+SYSCTL_UQUAD(_hw_ntb_xeon_b2b, OID_AUTO, dsd_bar2_addr64, CTLFLAG_RDTUN,
+ &xeon_b2b_dsd_addr.bar2_addr64, 0, "If using B2B topology on Xeon "
+ "hardware, use this 64-bit address on the bus between the NTB devices for "
+ "the window at BAR2, on the downstream side of the link. MUST be the same"
+ " address on both sides.");
+SYSCTL_UQUAD(_hw_ntb_xeon_b2b, OID_AUTO, dsd_bar4_addr64, CTLFLAG_RDTUN,
+ &xeon_b2b_dsd_addr.bar4_addr64, 0, "See dsd_bar2_addr64, but BAR4.");
+SYSCTL_UQUAD(_hw_ntb_xeon_b2b, OID_AUTO, dsd_bar4_addr32, CTLFLAG_RDTUN,
+ &xeon_b2b_dsd_addr.bar4_addr32, 0, "See dsd_bar2_addr64, but BAR4 "
+ "(split-BAR mode).");
+SYSCTL_UQUAD(_hw_ntb_xeon_b2b, OID_AUTO, dsd_bar5_addr32, CTLFLAG_RDTUN,
+ &xeon_b2b_dsd_addr.bar5_addr32, 0, "See dsd_bar2_addr64, but BAR5 "
+ "(split-BAR mode).");
+
/*
* OS <-> Driver interface structures
*/
@@ -454,14 +507,14 @@ ntb_attach(device_t device)
ntb->features = p->features;
ntb->b2b_mw_idx = B2B_MW_DISABLED;
- /* Heartbeat timer for NTB_SOC since there is no link interrupt */
+ /* Heartbeat timer for NTB_ATOM since there is no link interrupt */
callout_init(&ntb->heartbeat_timer, 1);
callout_init(&ntb->lr_timer, 1);
mtx_init(&ntb->db_mask_lock, "ntb hw bits", NULL, MTX_SPIN);
mtx_init(&ntb->ctx_lock, "ntb ctx", NULL, MTX_SPIN);
- if (ntb->type == NTB_SOC)
- error = ntb_detect_soc(ntb);
+ if (ntb->type == NTB_ATOM)
+ error = ntb_detect_atom(ntb);
else
error = ntb_detect_xeon(ntb);
if (error)
@@ -472,8 +525,8 @@ ntb_attach(device_t device)
error = ntb_map_pci_bars(ntb);
if (error)
goto out;
- if (ntb->type == NTB_SOC)
- error = ntb_soc_init_dev(ntb);
+ if (ntb->type == NTB_ATOM)
+ error = ntb_atom_init_dev(ntb);
else
error = ntb_xeon_init_dev(ntb);
if (error)
@@ -481,6 +534,7 @@ ntb_attach(device_t device)
error = ntb_init_isr(ntb);
if (error)
goto out;
+ ntb_sysctl_init(ntb);
pci_enable_busmaster(ntb->device);
@@ -497,7 +551,8 @@ ntb_detach(device_t device)
ntb = DEVICE2SOFTC(device);
- ntb_db_set_mask(ntb, ntb->db_valid_mask);
+ if (ntb->self_reg != NULL)
+ ntb_db_set_mask(ntb, ntb->db_valid_mask);
callout_drain(&ntb->heartbeat_timer);
callout_drain(&ntb->lr_timer);
if (ntb->type == NTB_XEON)
@@ -625,11 +680,16 @@ out:
}
static void
-print_map_success(struct ntb_softc *ntb, struct ntb_pci_bar_info *bar)
+print_map_success(struct ntb_softc *ntb, struct ntb_pci_bar_info *bar,
+ const char *kind)
{
- device_printf(ntb->device, "Bar size = %lx, v %p, p %p\n",
- bar->size, bar->vbase, (void *)(bar->pbase));
+ device_printf(ntb->device,
+ "Mapped BAR%d v:[%p-%p] p:[%p-%p] (0x%jx bytes) (%s)\n",
+ PCI_RID2BAR(bar->pci_resource_id), bar->vbase,
+ (char *)bar->vbase + bar->size - 1,
+ (void *)bar->pbase, (void *)(bar->pbase + bar->size - 1),
+ (uintmax_t)bar->size, kind);
}
static int
@@ -642,7 +702,7 @@ map_mmr_bar(struct ntb_softc *ntb, struct ntb_pci_bar_info *bar)
return (ENXIO);
save_bar_parameters(bar);
- print_map_success(ntb, bar);
+ print_map_success(ntb, bar, "mmr");
return (0);
}
@@ -698,12 +758,23 @@ map_memory_window_bar(struct ntb_softc *ntb, struct ntb_pci_bar_info *bar)
/* Mark bar region as write combining to improve performance. */
rc = pmap_change_attr((vm_offset_t)bar->vbase, bar->size,
VM_MEMATTR_WRITE_COMBINING);
- if (rc != 0) {
+ print_map_success(ntb, bar, "mw");
+ if (rc == 0)
device_printf(ntb->device,
- "unable to mark bar as WRITE_COMBINING\n");
- return (rc);
- }
- print_map_success(ntb, bar);
+ "Marked BAR%d v:[%p-%p] p:[%p-%p] as "
+ "WRITE_COMBINING.\n",
+ PCI_RID2BAR(bar->pci_resource_id), bar->vbase,
+ (char *)bar->vbase + bar->size - 1,
+ (void *)bar->pbase, (void *)(bar->pbase + bar->size - 1));
+ else
+ device_printf(ntb->device,
+ "Unable to mark BAR%d v:[%p-%p] p:[%p-%p] as "
+ "WRITE_COMBINING: %d\n",
+ PCI_RID2BAR(bar->pci_resource_id), bar->vbase,
+ (char *)bar->vbase + bar->size - 1,
+ (void *)bar->pbase, (void *)(bar->pbase + bar->size - 1),
+ rc);
+ /* Proceed anyway */
return (0);
}
@@ -897,14 +968,14 @@ ntb_teardown_interrupts(struct ntb_softc *ntb)
}
/*
- * Doorbell register and mask are 64-bit on SoC, 16-bit on Xeon. Abstract it
+ * Doorbell register and mask are 64-bit on Atom, 16-bit on Xeon. Abstract it
* out to make code clearer.
*/
static inline uint64_t
db_ioread(struct ntb_softc *ntb, uint64_t regoff)
{
- if (ntb->type == NTB_SOC)
+ if (ntb->type == NTB_ATOM)
return (ntb_reg_read(8, regoff));
KASSERT(ntb->type == NTB_XEON, ("bad ntb type"));
@@ -921,10 +992,10 @@ db_iowrite(struct ntb_softc *ntb, uint64_t regoff, uint64_t val)
(uintmax_t)(val & ~ntb->db_valid_mask),
(uintmax_t)ntb->db_valid_mask));
- if (regoff == ntb->reg_ofs.ldb_mask)
+ if (regoff == ntb->self_reg->db_mask)
DB_MASK_ASSERT(ntb, MA_OWNED);
- if (ntb->type == NTB_SOC) {
+ if (ntb->type == NTB_ATOM) {
ntb_reg_write(8, regoff, val);
return;
}
@@ -939,7 +1010,7 @@ ntb_db_set_mask(struct ntb_softc *ntb, uint64_t bits)
DB_MASK_LOCK(ntb);
ntb->db_mask |= bits;
- db_iowrite(ntb, ntb->reg_ofs.ldb_mask, ntb->db_mask);
+ db_iowrite(ntb, ntb->self_reg->db_mask, ntb->db_mask);
DB_MASK_UNLOCK(ntb);
}
@@ -954,7 +1025,7 @@ ntb_db_clear_mask(struct ntb_softc *ntb, uint64_t bits)
DB_MASK_LOCK(ntb);
ntb->db_mask &= ~bits;
- db_iowrite(ntb, ntb->reg_ofs.ldb_mask, ntb->db_mask);
+ db_iowrite(ntb, ntb->self_reg->db_mask, ntb->db_mask);
DB_MASK_UNLOCK(ntb);
}
@@ -962,7 +1033,7 @@ uint64_t
ntb_db_read(struct ntb_softc *ntb)
{
- return (db_ioread(ntb, ntb->reg_ofs.ldb));
+ return (db_ioread(ntb, ntb->self_reg->db_bell));
}
void
@@ -974,7 +1045,7 @@ ntb_db_clear(struct ntb_softc *ntb, uint64_t bits)
(uintmax_t)(bits & ~ntb->db_valid_mask),
(uintmax_t)ntb->db_valid_mask));
- db_iowrite(ntb, ntb->reg_ofs.ldb, bits);
+ db_iowrite(ntb, ntb->self_reg->db_bell, bits);
}
static inline uint64_t
@@ -1062,15 +1133,16 @@ static void
ntb_teardown_xeon(struct ntb_softc *ntb)
{
- ntb_link_disable(ntb);
+ if (ntb->reg != NULL)
+ ntb_link_disable(ntb);
}
static void
ntb_detect_max_mw(struct ntb_softc *ntb)
{
- if (ntb->type == NTB_SOC) {
- ntb->mw_count = SOC_MW_COUNT;
+ if (ntb->type == NTB_ATOM) {
+ ntb->mw_count = ATOM_MW_COUNT;
return;
}
@@ -1116,19 +1188,19 @@ ntb_detect_xeon(struct ntb_softc *ntb)
}
static int
-ntb_detect_soc(struct ntb_softc *ntb)
+ntb_detect_atom(struct ntb_softc *ntb)
{
uint32_t ppd, conn_type;
ppd = pci_read_config(ntb->device, NTB_PPD_OFFSET, 4);
ntb->ppd = ppd;
- if ((ppd & SOC_PPD_DEV_TYPE) != 0)
+ if ((ppd & ATOM_PPD_DEV_TYPE) != 0)
ntb->dev_type = NTB_DEV_DSD;
else
ntb->dev_type = NTB_DEV_USD;
- conn_type = (ppd & SOC_PPD_CONN_TYPE) >> 8;
+ conn_type = (ppd & ATOM_PPD_CONN_TYPE) >> 8;
switch (conn_type) {
case NTB_CONN_B2B:
ntb->conn_type = conn_type;
@@ -1145,14 +1217,6 @@ ntb_xeon_init_dev(struct ntb_softc *ntb)
{
int rc;
- ntb->reg_ofs.ldb = XEON_PDOORBELL_OFFSET;
- ntb->reg_ofs.ldb_mask = XEON_PDBMSK_OFFSET;
- ntb->reg_ofs.spad_local = XEON_SPAD_OFFSET;
- ntb->reg_ofs.bar4_xlat = XEON_SBAR4XLAT_OFFSET;
- if (HAS_FEATURE(NTB_SPLIT_BAR))
- ntb->reg_ofs.bar5_xlat = XEON_SBAR5XLAT_OFFSET;
- ntb->reg_ofs.spci_cmd = XEON_PCICMD_OFFSET;
-
ntb->spad_count = XEON_SPAD_COUNT;
ntb->db_count = XEON_DB_COUNT;
ntb->db_link_mask = XEON_DB_LINK_BIT;
@@ -1166,6 +1230,7 @@ ntb_xeon_init_dev(struct ntb_softc *ntb)
}
ntb->reg = &xeon_reg;
+ ntb->self_reg = &xeon_pri_reg;
ntb->peer_reg = &xeon_b2b_reg;
ntb->xlat_reg = &xeon_sec_xlat;
@@ -1202,7 +1267,7 @@ ntb_xeon_init_dev(struct ntb_softc *ntb)
return (rc);
/* Enable Bus Master and Memory Space on the secondary side */
- ntb_reg_write(2, ntb->reg_ofs.spci_cmd,
+ ntb_reg_write(2, XEON_PCICMD_OFFSET,
PCIM_CMD_MEMEN | PCIM_CMD_BUSMASTEREN);
/* Enable link training */
@@ -1212,67 +1277,62 @@ ntb_xeon_init_dev(struct ntb_softc *ntb)
}
static int
-ntb_soc_init_dev(struct ntb_softc *ntb)
+ntb_atom_init_dev(struct ntb_softc *ntb)
{
KASSERT(ntb->conn_type == NTB_CONN_B2B,
("Unsupported NTB configuration (%d)\n", ntb->conn_type));
- ntb->reg_ofs.ldb = SOC_PDOORBELL_OFFSET;
- ntb->reg_ofs.ldb_mask = SOC_PDBMSK_OFFSET;
- ntb->reg_ofs.bar4_xlat = SOC_SBAR4XLAT_OFFSET;
- ntb->reg_ofs.spad_local = SOC_SPAD_OFFSET;
- ntb->reg_ofs.spci_cmd = SOC_PCICMD_OFFSET;
-
- ntb->spad_count = SOC_SPAD_COUNT;
- ntb->db_count = SOC_DB_COUNT;
- ntb->db_vec_count = SOC_DB_MSIX_VECTOR_COUNT;
- ntb->db_vec_shift = SOC_DB_MSIX_VECTOR_SHIFT;
+ ntb->spad_count = ATOM_SPAD_COUNT;
+ ntb->db_count = ATOM_DB_COUNT;
+ ntb->db_vec_count = ATOM_DB_MSIX_VECTOR_COUNT;
+ ntb->db_vec_shift = ATOM_DB_MSIX_VECTOR_SHIFT;
ntb->db_valid_mask = (1ull << ntb->db_count) - 1;
- ntb->reg = &soc_reg;
- ntb->peer_reg = &soc_b2b_reg;
- ntb->xlat_reg = &soc_sec_xlat;
+ ntb->reg = &atom_reg;
+ ntb->self_reg = &atom_pri_reg;
+ ntb->peer_reg = &atom_b2b_reg;
+ ntb->xlat_reg = &atom_sec_xlat;
/*
- * FIXME - MSI-X bug on early SOC HW, remove once internal issue is
+ * FIXME - MSI-X bug on early Atom HW, remove once internal issue is
* resolved. Mask transaction layer internal parity errors.
*/
pci_write_config(ntb->device, 0xFC, 0x4, 4);
- configure_soc_secondary_side_bars(ntb);
+ configure_atom_secondary_side_bars(ntb);
/* Enable Bus Master and Memory Space on the secondary side */
- ntb_reg_write(2, ntb->reg_ofs.spci_cmd,
+ ntb_reg_write(2, ATOM_PCICMD_OFFSET,
PCIM_CMD_MEMEN | PCIM_CMD_BUSMASTEREN);
/* Initiate PCI-E link training */
ntb_link_enable(ntb, NTB_SPEED_AUTO, NTB_WIDTH_AUTO);
- callout_reset(&ntb->heartbeat_timer, 0, soc_link_hb, ntb);
+ callout_reset(&ntb->heartbeat_timer, 0, atom_link_hb, ntb);
return (0);
}
-/* XXX: Linux driver doesn't seem to do any of this for SoC. */
+/* XXX: Linux driver doesn't seem to do any of this for Atom. */
static void
-configure_soc_secondary_side_bars(struct ntb_softc *ntb)
+configure_atom_secondary_side_bars(struct ntb_softc *ntb)
{
if (ntb->dev_type == NTB_DEV_USD) {
- ntb_reg_write(8, SOC_PBAR2XLAT_OFFSET,
+ ntb_reg_write(8, ATOM_PBAR2XLAT_OFFSET,
XEON_B2B_BAR2_DSD_ADDR64);
- ntb_reg_write(8, SOC_PBAR4XLAT_OFFSET,
+ ntb_reg_write(8, ATOM_PBAR4XLAT_OFFSET,
XEON_B2B_BAR4_DSD_ADDR64);
- ntb_reg_write(8, SOC_MBAR23_OFFSET, XEON_B2B_BAR2_USD_ADDR64);
- ntb_reg_write(8, SOC_MBAR45_OFFSET, XEON_B2B_BAR4_USD_ADDR64);
+ ntb_reg_write(8, ATOM_MBAR23_OFFSET, XEON_B2B_BAR2_USD_ADDR64);
+ ntb_reg_write(8, ATOM_MBAR45_OFFSET, XEON_B2B_BAR4_USD_ADDR64);
} else {
- ntb_reg_write(8, SOC_PBAR2XLAT_OFFSET,
+ ntb_reg_write(8, ATOM_PBAR2XLAT_OFFSET,
XEON_B2B_BAR2_USD_ADDR64);
- ntb_reg_write(8, SOC_PBAR4XLAT_OFFSET,
+ ntb_reg_write(8, ATOM_PBAR4XLAT_OFFSET,
XEON_B2B_BAR4_USD_ADDR64);
- ntb_reg_write(8, SOC_MBAR23_OFFSET, XEON_B2B_BAR2_DSD_ADDR64);
- ntb_reg_write(8, SOC_MBAR45_OFFSET, XEON_B2B_BAR4_DSD_ADDR64);
+ ntb_reg_write(8, ATOM_MBAR23_OFFSET, XEON_B2B_BAR2_DSD_ADDR64);
+ ntb_reg_write(8, ATOM_MBAR45_OFFSET, XEON_B2B_BAR4_DSD_ADDR64);
}
}
@@ -1479,31 +1539,34 @@ static inline bool
link_is_up(struct ntb_softc *ntb)
{
- if (ntb->type == NTB_XEON)
+ if (ntb->type == NTB_XEON) {
+ if (ntb->conn_type == NTB_CONN_TRANSPARENT)
+ return (true);
return ((ntb->lnk_sta & NTB_LINK_STATUS_ACTIVE) != 0);
+ }
- KASSERT(ntb->type == NTB_SOC, ("ntb type"));
- return ((ntb->ntb_ctl & SOC_CNTL_LINK_DOWN) == 0);
+ KASSERT(ntb->type == NTB_ATOM, ("ntb type"));
+ return ((ntb->ntb_ctl & ATOM_CNTL_LINK_DOWN) == 0);
}
static inline bool
-soc_link_is_err(struct ntb_softc *ntb)
+atom_link_is_err(struct ntb_softc *ntb)
{
uint32_t status;
- KASSERT(ntb->type == NTB_SOC, ("ntb type"));
+ KASSERT(ntb->type == NTB_ATOM, ("ntb type"));
- status = ntb_reg_read(4, SOC_LTSSMSTATEJMP_OFFSET);
- if ((status & SOC_LTSSMSTATEJMP_FORCEDETECT) != 0)
+ status = ntb_reg_read(4, ATOM_LTSSMSTATEJMP_OFFSET);
+ if ((status & ATOM_LTSSMSTATEJMP_FORCEDETECT) != 0)
return (true);
- status = ntb_reg_read(4, SOC_IBSTERRRCRVSTS0_OFFSET);
- return ((status & SOC_IBIST_ERR_OFLOW) != 0);
+ status = ntb_reg_read(4, ATOM_IBSTERRRCRVSTS0_OFFSET);
+ return ((status & ATOM_IBIST_ERR_OFLOW) != 0);
}
-/* SOC does not have link status interrupt, poll on that platform */
+/* Atom does not have link status interrupt, poll on that platform */
static void
-soc_link_hb(void *arg)
+atom_link_hb(void *arg)
{
struct ntb_softc *ntb = arg;
sbintime_t timo, poll_ts;
@@ -1523,53 +1586,53 @@ soc_link_hb(void *arg)
if (ntb_poll_link(ntb))
ntb_link_event(ntb);
- if (!link_is_up(ntb) && soc_link_is_err(ntb)) {
+ if (!link_is_up(ntb) && atom_link_is_err(ntb)) {
/* Link is down with error, proceed with recovery */
- callout_reset(&ntb->lr_timer, 0, recover_soc_link, ntb);
+ callout_reset(&ntb->lr_timer, 0, recover_atom_link, ntb);
return;
}
out:
- callout_reset(&ntb->heartbeat_timer, timo, soc_link_hb, ntb);
+ callout_reset(&ntb->heartbeat_timer, timo, atom_link_hb, ntb);
}
static void
-soc_perform_link_restart(struct ntb_softc *ntb)
+atom_perform_link_restart(struct ntb_softc *ntb)
{
uint32_t status;
/* Driver resets the NTB ModPhy lanes - magic! */
- ntb_reg_write(1, SOC_MODPHY_PCSREG6, 0xe0);
- ntb_reg_write(1, SOC_MODPHY_PCSREG4, 0x40);
- ntb_reg_write(1, SOC_MODPHY_PCSREG4, 0x60);
- ntb_reg_write(1, SOC_MODPHY_PCSREG6, 0x60);
+ ntb_reg_write(1, ATOM_MODPHY_PCSREG6, 0xe0);
+ ntb_reg_write(1, ATOM_MODPHY_PCSREG4, 0x40);
+ ntb_reg_write(1, ATOM_MODPHY_PCSREG4, 0x60);
+ ntb_reg_write(1, ATOM_MODPHY_PCSREG6, 0x60);
/* Driver waits 100ms to allow the NTB ModPhy to settle */
pause("ModPhy", hz / 10);
/* Clear AER Errors, write to clear */
- status = ntb_reg_read(4, SOC_ERRCORSTS_OFFSET);
+ status = ntb_reg_read(4, ATOM_ERRCORSTS_OFFSET);
status &= PCIM_AER_COR_REPLAY_ROLLOVER;
- ntb_reg_write(4, SOC_ERRCORSTS_OFFSET, status);
+ ntb_reg_write(4, ATOM_ERRCORSTS_OFFSET, status);
/* Clear unexpected electrical idle event in LTSSM, write to clear */
- status = ntb_reg_read(4, SOC_LTSSMERRSTS0_OFFSET);
- status |= SOC_LTSSMERRSTS0_UNEXPECTEDEI;
- ntb_reg_write(4, SOC_LTSSMERRSTS0_OFFSET, status);
+ status = ntb_reg_read(4, ATOM_LTSSMERRSTS0_OFFSET);
+ status |= ATOM_LTSSMERRSTS0_UNEXPECTEDEI;
+ ntb_reg_write(4, ATOM_LTSSMERRSTS0_OFFSET, status);
/* Clear DeSkew Buffer error, write to clear */
- status = ntb_reg_read(4, SOC_DESKEWSTS_OFFSET);
- status |= SOC_DESKEWSTS_DBERR;
- ntb_reg_write(4, SOC_DESKEWSTS_OFFSET, status);
+ status = ntb_reg_read(4, ATOM_DESKEWSTS_OFFSET);
+ status |= ATOM_DESKEWSTS_DBERR;
+ ntb_reg_write(4, ATOM_DESKEWSTS_OFFSET, status);
- status = ntb_reg_read(4, SOC_IBSTERRRCRVSTS0_OFFSET);
- status &= SOC_IBIST_ERR_OFLOW;
- ntb_reg_write(4, SOC_IBSTERRRCRVSTS0_OFFSET, status);
+ status = ntb_reg_read(4, ATOM_IBSTERRRCRVSTS0_OFFSET);
+ status &= ATOM_IBIST_ERR_OFLOW;
+ ntb_reg_write(4, ATOM_IBSTERRRCRVSTS0_OFFSET, status);
/* Releases the NTB state machine to allow the link to retrain */
- status = ntb_reg_read(4, SOC_LTSSMSTATEJMP_OFFSET);
- status &= ~SOC_LTSSMSTATEJMP_FORCEDETECT;
- ntb_reg_write(4, SOC_LTSSMSTATEJMP_OFFSET, status);
+ status = ntb_reg_read(4, ATOM_LTSSMSTATEJMP_OFFSET);
+ status &= ~ATOM_LTSSMSTATEJMP_FORCEDETECT;
+ ntb_reg_write(4, ATOM_LTSSMSTATEJMP_OFFSET, status);
}
/*
@@ -1698,9 +1761,9 @@ ntb_link_enable(struct ntb_softc *ntb, enum ntb_speed s __unused,
{
uint32_t cntl;
- if (ntb->type == NTB_SOC) {
+ if (ntb->type == NTB_ATOM) {
pci_write_config(ntb->device, NTB_PPD_OFFSET,
- ntb->ppd | SOC_PPD_INIT_LINK, 4);
+ ntb->ppd | ATOM_PPD_INIT_LINK, 4);
return (0);
}
@@ -1752,13 +1815,13 @@ ntb_link_disable(struct ntb_softc *ntb)
}
static void
-recover_soc_link(void *arg)
+recover_atom_link(void *arg)
{
struct ntb_softc *ntb = arg;
- uint8_t speed, width;
+ unsigned speed, width, oldspeed, oldwidth;
uint32_t status32;
- soc_perform_link_restart(ntb);
+ atom_perform_link_restart(ntb);
/*
* There is a potential race between the 2 NTB devices recovering at
@@ -1766,34 +1829,32 @@ recover_soc_link(void *arg)
* and the driver will be stuck in this loop forever. Add a random
* interval to the recovery time to prevent this race.
*/
- status32 = arc4random() % SOC_LINK_RECOVERY_TIME;
- pause("Link", (SOC_LINK_RECOVERY_TIME + status32) * hz / 1000);
-
- status32 = ntb_reg_read(4, SOC_LTSSMSTATEJMP_OFFSET);
- if ((status32 & SOC_LTSSMSTATEJMP_FORCEDETECT) != 0)
- goto retry;
+ status32 = arc4random() % ATOM_LINK_RECOVERY_TIME;
+ pause("Link", (ATOM_LINK_RECOVERY_TIME + status32) * hz / 1000);
- status32 = ntb_reg_read(4, SOC_IBSTERRRCRVSTS0_OFFSET);
- if ((status32 & SOC_IBIST_ERR_OFLOW) != 0)
+ if (atom_link_is_err(ntb))
goto retry;
status32 = ntb_reg_read(4, ntb->reg->ntb_ctl);
- if ((status32 & SOC_CNTL_LINK_DOWN) != 0)
+ if ((status32 & ATOM_CNTL_LINK_DOWN) != 0)
goto out;
status32 = ntb_reg_read(4, ntb->reg->lnk_sta);
- width = (status32 & NTB_LINK_WIDTH_MASK) >> 4;
- speed = (status32 & NTB_LINK_SPEED_MASK);
- if (ntb->link_width != width || ntb->link_speed != speed)
+ width = NTB_LNK_STA_WIDTH(status32);
+ speed = status32 & NTB_LINK_SPEED_MASK;
+
+ oldwidth = NTB_LNK_STA_WIDTH(ntb->lnk_sta);
+ oldspeed = ntb->lnk_sta & NTB_LINK_SPEED_MASK;
+ if (oldwidth != width || oldspeed != speed)
goto retry;
out:
- callout_reset(&ntb->heartbeat_timer, NTB_HB_TIMEOUT * hz, soc_link_hb,
+ callout_reset(&ntb->heartbeat_timer, NTB_HB_TIMEOUT * hz, atom_link_hb,
ntb);
return;
retry:
- callout_reset(&ntb->lr_timer, NTB_HB_TIMEOUT * hz, recover_soc_link,
+ callout_reset(&ntb->lr_timer, NTB_HB_TIMEOUT * hz, recover_atom_link,
ntb);
}
@@ -1806,7 +1867,7 @@ ntb_poll_link(struct ntb_softc *ntb)
uint32_t ntb_cntl;
uint16_t reg_val;
- if (ntb->type == NTB_SOC) {
+ if (ntb->type == NTB_ATOM) {
ntb_cntl = ntb_reg_read(4, ntb->reg->ntb_ctl);
if (ntb_cntl == ntb->ntb_ctl)
return (false);
@@ -1814,7 +1875,7 @@ ntb_poll_link(struct ntb_softc *ntb)
ntb->ntb_ctl = ntb_cntl;
ntb->lnk_sta = ntb_reg_read(4, ntb->reg->lnk_sta);
} else {
- db_iowrite(ntb, ntb->reg_ofs.ldb, ntb->db_link_mask);
+ db_iowrite(ntb, ntb->self_reg->db_bell, ntb->db_link_mask);
reg_val = pci_read_config(ntb->device, ntb->reg->lnk_sta, 2);
if (reg_val == ntb->lnk_sta)
@@ -1843,6 +1904,355 @@ ntb_link_sta_width(struct ntb_softc *ntb)
return (NTB_LNK_STA_WIDTH(ntb->lnk_sta));
}
+SYSCTL_NODE(_hw_ntb, OID_AUTO, debug_info, CTLFLAG_RW, 0,
+ "Driver state, statistics, and HW registers");
+
+#define NTB_REGSZ_MASK (3ul << 30)
+#define NTB_REG_64 (1ul << 30)
+#define NTB_REG_32 (2ul << 30)
+#define NTB_REG_16 (3ul << 30)
+#define NTB_REG_8 (0ul << 30)
+
+#define NTB_DB_READ (1ul << 29)
+#define NTB_PCI_REG (1ul << 28)
+#define NTB_REGFLAGS_MASK (NTB_REGSZ_MASK | NTB_DB_READ | NTB_PCI_REG)
+
+static void
+ntb_sysctl_init(struct ntb_softc *ntb)
+{
+ struct sysctl_oid_list *tree_par, *regpar, *statpar, *errpar;
+ struct sysctl_ctx_list *ctx;
+ struct sysctl_oid *tree, *tmptree;
+
+ ctx = device_get_sysctl_ctx(ntb->device);
+
+ tree = SYSCTL_ADD_NODE(ctx,
+ SYSCTL_CHILDREN(device_get_sysctl_tree(ntb->device)), OID_AUTO,
+ "debug_info", CTLFLAG_RD, NULL,
+ "Driver state, statistics, and HW registers");
+ tree_par = SYSCTL_CHILDREN(tree);
+
+ SYSCTL_ADD_UINT(ctx, tree_par, OID_AUTO, "conn_type", CTLFLAG_RD,
+ &ntb->conn_type, 0, "0 - Transparent; 1 - B2B; 2 - Root Port");
+ SYSCTL_ADD_UINT(ctx, tree_par, OID_AUTO, "dev_type", CTLFLAG_RD,
+ &ntb->dev_type, 0, "0 - USD; 1 - DSD");
+
+ if (ntb->b2b_mw_idx != B2B_MW_DISABLED) {
+ SYSCTL_ADD_U8(ctx, tree_par, OID_AUTO, "b2b_idx", CTLFLAG_RD,
+ &ntb->b2b_mw_idx, 0,
+ "Index of the MW used for B2B remote register access");
+ SYSCTL_ADD_UQUAD(ctx, tree_par, OID_AUTO, "b2b_off",
+ CTLFLAG_RD, &ntb->b2b_off,
+ "If non-zero, offset of B2B register region in shared MW");
+ }
+
+ SYSCTL_ADD_PROC(ctx, tree_par, OID_AUTO, "features",
+ CTLFLAG_RD | CTLTYPE_STRING, ntb, 0, sysctl_handle_features, "A",
+ "Features/errata of this NTB device");
+
+ SYSCTL_ADD_UINT(ctx, tree_par, OID_AUTO, "ntb_ctl", CTLFLAG_RD,
+ &ntb->ntb_ctl, 0, "NTB CTL register (cached)");
+ SYSCTL_ADD_UINT(ctx, tree_par, OID_AUTO, "lnk_sta", CTLFLAG_RD,
+ &ntb->lnk_sta, 0, "LNK STA register (cached)");
+
+ SYSCTL_ADD_PROC(ctx, tree_par, OID_AUTO, "link_status",
+ CTLFLAG_RD | CTLTYPE_STRING, ntb, 0, sysctl_handle_link_status,
+ "A", "Link status");
+
+ SYSCTL_ADD_U8(ctx, tree_par, OID_AUTO, "mw_count", CTLFLAG_RD,
+ &ntb->mw_count, 0, "MW count (excl. non-shared B2B register BAR)");
+ SYSCTL_ADD_U8(ctx, tree_par, OID_AUTO, "spad_count", CTLFLAG_RD,
+ &ntb->spad_count, 0, "Scratchpad count");
+ SYSCTL_ADD_U8(ctx, tree_par, OID_AUTO, "db_count", CTLFLAG_RD,
+ &ntb->db_count, 0, "Doorbell count");
+ SYSCTL_ADD_U8(ctx, tree_par, OID_AUTO, "db_vec_count", CTLFLAG_RD,
+ &ntb->db_vec_count, 0, "Doorbell vector count");
+ SYSCTL_ADD_U8(ctx, tree_par, OID_AUTO, "db_vec_shift", CTLFLAG_RD,
+ &ntb->db_vec_shift, 0, "Doorbell vector shift");
+
+ SYSCTL_ADD_UQUAD(ctx, tree_par, OID_AUTO, "db_valid_mask", CTLFLAG_RD,
+ &ntb->db_valid_mask, "Doorbell valid mask");
+ SYSCTL_ADD_UQUAD(ctx, tree_par, OID_AUTO, "db_link_mask", CTLFLAG_RD,
+ &ntb->db_link_mask, "Doorbell link mask");
+ SYSCTL_ADD_UQUAD(ctx, tree_par, OID_AUTO, "db_mask", CTLFLAG_RD,
+ &ntb->db_mask, "Doorbell mask (cached)");
+
+ tmptree = SYSCTL_ADD_NODE(ctx, tree_par, OID_AUTO, "registers",
+ CTLFLAG_RD, NULL, "Raw HW registers (big-endian)");
+ regpar = SYSCTL_CHILDREN(tmptree);
+
+ SYSCTL_ADD_PROC(ctx, regpar, OID_AUTO, "db_mask",
+ CTLFLAG_RD | CTLTYPE_OPAQUE, ntb,
+ NTB_REG_64 | NTB_DB_READ | ntb->self_reg->db_mask,
+ sysctl_handle_register, "QU", "Doorbell mask register");
+ SYSCTL_ADD_PROC(ctx, regpar, OID_AUTO, "db_bell",
+ CTLFLAG_RD | CTLTYPE_OPAQUE, ntb,
+ NTB_REG_64 | NTB_DB_READ | ntb->self_reg->db_bell,
+ sysctl_handle_register, "QU", "Doorbell register");
+
+ SYSCTL_ADD_PROC(ctx, regpar, OID_AUTO, "incoming_xlat23",
+ CTLFLAG_RD | CTLTYPE_OPAQUE, ntb,
+ NTB_REG_64 | ntb->xlat_reg->bar2_xlat,
+ sysctl_handle_register, "QU", "Incoming XLAT23 register");
+ if (HAS_FEATURE(NTB_SPLIT_BAR)) {
+ SYSCTL_ADD_PROC(ctx, regpar, OID_AUTO, "incoming_xlat4",
+ CTLFLAG_RD | CTLTYPE_OPAQUE, ntb,
+ NTB_REG_32 | ntb->xlat_reg->bar4_xlat,
+ sysctl_handle_register, "IU", "Incoming XLAT4 register");
+ SYSCTL_ADD_PROC(ctx, regpar, OID_AUTO, "incoming_xlat5",
+ CTLFLAG_RD | CTLTYPE_OPAQUE, ntb,
+ NTB_REG_32 | ntb->xlat_reg->bar5_xlat,
+ sysctl_handle_register, "IU", "Incoming XLAT5 register");
+ } else {
+ SYSCTL_ADD_PROC(ctx, regpar, OID_AUTO, "incoming_xlat45",
+ CTLFLAG_RD | CTLTYPE_OPAQUE, ntb,
+ NTB_REG_64 | ntb->xlat_reg->bar4_xlat,
+ sysctl_handle_register, "QU", "Incoming XLAT45 register");
+ }
+
+ SYSCTL_ADD_PROC(ctx, regpar, OID_AUTO, "incoming_lmt23",
+ CTLFLAG_RD | CTLTYPE_OPAQUE, ntb,
+ NTB_REG_64 | ntb->xlat_reg->bar2_limit,
+ sysctl_handle_register, "QU", "Incoming LMT23 register");
+ if (HAS_FEATURE(NTB_SPLIT_BAR)) {
+ SYSCTL_ADD_PROC(ctx, regpar, OID_AUTO, "incoming_lmt4",
+ CTLFLAG_RD | CTLTYPE_OPAQUE, ntb,
+ NTB_REG_32 | ntb->xlat_reg->bar4_limit,
+ sysctl_handle_register, "IU", "Incoming LMT4 register");
+ SYSCTL_ADD_PROC(ctx, regpar, OID_AUTO, "incoming_lmt5",
+ CTLFLAG_RD | CTLTYPE_OPAQUE, ntb,
+ NTB_REG_32 | ntb->xlat_reg->bar5_limit,
+ sysctl_handle_register, "IU", "Incoming LMT5 register");
+ } else {
+ SYSCTL_ADD_PROC(ctx, regpar, OID_AUTO, "incoming_lmt45",
+ CTLFLAG_RD | CTLTYPE_OPAQUE, ntb,
+ NTB_REG_64 | ntb->xlat_reg->bar4_limit,
+ sysctl_handle_register, "QU", "Incoming LMT45 register");
+ }
+
+ if (ntb->type == NTB_ATOM)
+ return;
+
+ tmptree = SYSCTL_ADD_NODE(ctx, regpar, OID_AUTO, "xeon_stats",
+ CTLFLAG_RD, NULL, "Xeon HW statistics");
+ statpar = SYSCTL_CHILDREN(tmptree);
+ SYSCTL_ADD_PROC(ctx, statpar, OID_AUTO, "upstream_mem_miss",
+ CTLFLAG_RD | CTLTYPE_OPAQUE, ntb,
+ NTB_REG_16 | XEON_USMEMMISS_OFFSET,
+ sysctl_handle_register, "SU", "Upstream Memory Miss");
+
+ tmptree = SYSCTL_ADD_NODE(ctx, regpar, OID_AUTO, "xeon_hw_err",
+ CTLFLAG_RD, NULL, "Xeon HW errors");
+ errpar = SYSCTL_CHILDREN(tmptree);
+
+ SYSCTL_ADD_PROC(ctx, errpar, OID_AUTO, "devsts",
+ CTLFLAG_RD | CTLTYPE_OPAQUE, ntb,
+ NTB_REG_16 | NTB_PCI_REG | XEON_DEVSTS_OFFSET,
+ sysctl_handle_register, "SU", "DEVSTS");
+ SYSCTL_ADD_PROC(ctx, errpar, OID_AUTO, "lnksts",
+ CTLFLAG_RD | CTLTYPE_OPAQUE, ntb,
+ NTB_REG_16 | NTB_PCI_REG | XEON_LINK_STATUS_OFFSET,
+ sysctl_handle_register, "SU", "LNKSTS");
+ SYSCTL_ADD_PROC(ctx, errpar, OID_AUTO, "uncerrsts",
+ CTLFLAG_RD | CTLTYPE_OPAQUE, ntb,
+ NTB_REG_32 | NTB_PCI_REG | XEON_UNCERRSTS_OFFSET,
+ sysctl_handle_register, "IU", "UNCERRSTS");
+ SYSCTL_ADD_PROC(ctx, errpar, OID_AUTO, "corerrsts",
+ CTLFLAG_RD | CTLTYPE_OPAQUE, ntb,
+ NTB_REG_32 | NTB_PCI_REG | XEON_CORERRSTS_OFFSET,
+ sysctl_handle_register, "IU", "CORERRSTS");
+
+ if (ntb->conn_type != NTB_CONN_B2B)
+ return;
+
+ SYSCTL_ADD_PROC(ctx, regpar, OID_AUTO, "outgoing_xlat23",
+ CTLFLAG_RD | CTLTYPE_OPAQUE, ntb,
+ NTB_REG_64 | ntb->bar_info[NTB_B2B_BAR_1].pbarxlat_off,
+ sysctl_handle_register, "QU", "Outgoing XLAT23 register");
+ if (HAS_FEATURE(NTB_SPLIT_BAR)) {
+ SYSCTL_ADD_PROC(ctx, regpar, OID_AUTO, "outgoing_xlat4",
+ CTLFLAG_RD | CTLTYPE_OPAQUE, ntb,
+ NTB_REG_32 | ntb->bar_info[NTB_B2B_BAR_2].pbarxlat_off,
+ sysctl_handle_register, "IU", "Outgoing XLAT4 register");
+ SYSCTL_ADD_PROC(ctx, regpar, OID_AUTO, "outgoing_xlat5",
+ CTLFLAG_RD | CTLTYPE_OPAQUE, ntb,
+ NTB_REG_32 | ntb->bar_info[NTB_B2B_BAR_3].pbarxlat_off,
+ sysctl_handle_register, "IU", "Outgoing XLAT5 register");
+ } else {
+ SYSCTL_ADD_PROC(ctx, regpar, OID_AUTO, "outgoing_xlat45",
+ CTLFLAG_RD | CTLTYPE_OPAQUE, ntb,
+ NTB_REG_64 | ntb->bar_info[NTB_B2B_BAR_2].pbarxlat_off,
+ sysctl_handle_register, "QU", "Outgoing XLAT45 register");
+ }
+
+ SYSCTL_ADD_PROC(ctx, regpar, OID_AUTO, "outgoing_lmt23",
+ CTLFLAG_RD | CTLTYPE_OPAQUE, ntb,
+ NTB_REG_64 | XEON_PBAR2LMT_OFFSET,
+ sysctl_handle_register, "QU", "Outgoing LMT23 register");
+ if (HAS_FEATURE(NTB_SPLIT_BAR)) {
+ SYSCTL_ADD_PROC(ctx, regpar, OID_AUTO, "outgoing_lmt4",
+ CTLFLAG_RD | CTLTYPE_OPAQUE, ntb,
+ NTB_REG_32 | XEON_PBAR4LMT_OFFSET,
+ sysctl_handle_register, "IU", "Outgoing LMT4 register");
+ SYSCTL_ADD_PROC(ctx, regpar, OID_AUTO, "outgoing_lmt5",
+ CTLFLAG_RD | CTLTYPE_OPAQUE, ntb,
+ NTB_REG_32 | XEON_PBAR5LMT_OFFSET,
+ sysctl_handle_register, "IU", "Outgoing LMT5 register");
+ } else {
+ SYSCTL_ADD_PROC(ctx, regpar, OID_AUTO, "outgoing_lmt45",
+ CTLFLAG_RD | CTLTYPE_OPAQUE, ntb,
+ NTB_REG_64 | XEON_PBAR4LMT_OFFSET,
+ sysctl_handle_register, "QU", "Outgoing LMT45 register");
+ }
+
+ SYSCTL_ADD_PROC(ctx, regpar, OID_AUTO, "sbar01_base",
+ CTLFLAG_RD | CTLTYPE_OPAQUE, ntb,
+ NTB_REG_64 | ntb->xlat_reg->bar0_base,
+ sysctl_handle_register, "QU", "Secondary BAR01 base register");
+ SYSCTL_ADD_PROC(ctx, regpar, OID_AUTO, "sbar23_base",
+ CTLFLAG_RD | CTLTYPE_OPAQUE, ntb,
+ NTB_REG_64 | ntb->xlat_reg->bar2_base,
+ sysctl_handle_register, "QU", "Secondary BAR23 base register");
+ if (HAS_FEATURE(NTB_SPLIT_BAR)) {
+ SYSCTL_ADD_PROC(ctx, regpar, OID_AUTO, "sbar4_base",
+ CTLFLAG_RD | CTLTYPE_OPAQUE, ntb,
+ NTB_REG_32 | ntb->xlat_reg->bar4_base,
+ sysctl_handle_register, "IU",
+ "Secondary BAR4 base register");
+ SYSCTL_ADD_PROC(ctx, regpar, OID_AUTO, "sbar5_base",
+ CTLFLAG_RD | CTLTYPE_OPAQUE, ntb,
+ NTB_REG_32 | ntb->xlat_reg->bar5_base,
+ sysctl_handle_register, "IU",
+ "Secondary BAR5 base register");
+ } else {
+ SYSCTL_ADD_PROC(ctx, regpar, OID_AUTO, "sbar45_base",
+ CTLFLAG_RD | CTLTYPE_OPAQUE, ntb,
+ NTB_REG_64 | ntb->xlat_reg->bar4_base,
+ sysctl_handle_register, "QU",
+ "Secondary BAR45 base register");
+ }
+}
+
+static int
+sysctl_handle_features(SYSCTL_HANDLER_ARGS)
+{
+ struct ntb_softc *ntb;
+ struct sbuf sb;
+ int error;
+
+ error = 0;
+ ntb = arg1;
+
+ sbuf_new_for_sysctl(&sb, NULL, 256, req);
+
+ sbuf_printf(&sb, "%b", ntb->features, NTB_FEATURES_STR);
+ error = sbuf_finish(&sb);
+ sbuf_delete(&sb);
+
+ if (error || !req->newptr)
+ return (error);
+ return (EINVAL);
+}
+
+static int
+sysctl_handle_link_status(SYSCTL_HANDLER_ARGS)
+{
+ struct ntb_softc *ntb;
+ struct sbuf sb;
+ enum ntb_speed speed;
+ enum ntb_width width;
+ int error;
+
+ error = 0;
+ ntb = arg1;
+
+ sbuf_new_for_sysctl(&sb, NULL, 32, req);
+
+ if (ntb_link_is_up(ntb, &speed, &width))
+ sbuf_printf(&sb, "up / PCIe Gen %u / Width x%u",
+ (unsigned)speed, (unsigned)width);
+ else
+ sbuf_printf(&sb, "down");
+
+ error = sbuf_finish(&sb);
+ sbuf_delete(&sb);
+
+ if (error || !req->newptr)
+ return (error);
+ return (EINVAL);
+}
+
+static int
+sysctl_handle_register(SYSCTL_HANDLER_ARGS)
+{
+ struct ntb_softc *ntb;
+ const void *outp;
+ uintptr_t sz;
+ uint64_t umv;
+ char be[sizeof(umv)];
+ size_t outsz;
+ uint32_t reg;
+ bool db, pci;
+ int error;
+
+ ntb = arg1;
+ reg = arg2 & ~NTB_REGFLAGS_MASK;
+ sz = arg2 & NTB_REGSZ_MASK;
+ db = (arg2 & NTB_DB_READ) != 0;
+ pci = (arg2 & NTB_PCI_REG) != 0;
+
+ KASSERT(!(db && pci), ("bogus"));
+
+ if (db) {
+ KASSERT(sz == NTB_REG_64, ("bogus"));
+ umv = db_ioread(ntb, reg);
+ outsz = sizeof(uint64_t);
+ } else {
+ switch (sz) {
+ case NTB_REG_64:
+ if (pci)
+ umv = pci_read_config(ntb->device, reg, 8);
+ else
+ umv = ntb_reg_read(8, reg);
+ outsz = sizeof(uint64_t);
+ break;
+ case NTB_REG_32:
+ if (pci)
+ umv = pci_read_config(ntb->device, reg, 4);
+ else
+ umv = ntb_reg_read(4, reg);
+ outsz = sizeof(uint32_t);
+ break;
+ case NTB_REG_16:
+ if (pci)
+ umv = pci_read_config(ntb->device, reg, 2);
+ else
+ umv = ntb_reg_read(2, reg);
+ outsz = sizeof(uint16_t);
+ break;
+ case NTB_REG_8:
+ if (pci)
+ umv = pci_read_config(ntb->device, reg, 1);
+ else
+ umv = ntb_reg_read(1, reg);
+ outsz = sizeof(uint8_t);
+ break;
+ default:
+ panic("bogus");
+ break;
+ }
+ }
+
+ /* Encode bigendian so that sysctl -x is legible. */
+ be64enc(be, umv);
+ outp = ((char *)be) + sizeof(umv) - outsz;
+
+ error = SYSCTL_OUT(req, outp, outsz);
+ if (error || !req->newptr)
+ return (error);
+ return (EINVAL);
+}
+
/*
* Public API to the rest of the OS
*/
@@ -1888,7 +2298,7 @@ ntb_spad_write(struct ntb_softc *ntb, unsigned int idx, uint32_t val)
if (idx >= ntb->spad_count)
return (EINVAL);
- ntb_reg_write(4, ntb->reg_ofs.spad_local + idx * 4, val);
+ ntb_reg_write(4, ntb->self_reg->spad + idx * 4, val);
return (0);
}
@@ -1911,7 +2321,7 @@ ntb_spad_read(struct ntb_softc *ntb, unsigned int idx, uint32_t *val)
if (idx >= ntb->spad_count)
return (EINVAL);
- *val = ntb_reg_read(4, ntb->reg_ofs.spad_local + idx * 4);
+ *val = ntb_reg_read(4, ntb->self_reg->spad + idx * 4);
return (0);
}
@@ -2117,6 +2527,23 @@ ntb_mw_set_trans(struct ntb_softc *ntb, unsigned idx, bus_addr_t addr,
return (0);
}
+/*
+ * ntb_mw_clear_trans() - clear the translation of a memory window
+ * @ntb: NTB device context
+ * @idx: Memory window number
+ *
+ * Clear the translation of a memory window. The peer may no longer access
+ * local memory through the window.
+ *
+ * Return: Zero on success, otherwise an error number.
+ */
+int
+ntb_mw_clear_trans(struct ntb_softc *ntb, unsigned mw_idx)
+{
+
+ return (ntb_mw_set_trans(ntb, mw_idx, 0, 0));
+}
+
/**
* ntb_peer_db_set() - Set the doorbell on the secondary/external side
* @ntb: pointer to ntb_softc instance
@@ -2175,6 +2602,39 @@ ntb_get_peer_db_addr(struct ntb_softc *ntb, vm_size_t *sz_out)
return ((uint64_t)bar->pci_bus_handle + regoff);
}
+/*
+ * ntb_db_valid_mask() - get a mask of doorbell bits supported by the ntb
+ * @ntb: NTB device context
+ *
+ * Hardware may support different number or arrangement of doorbell bits.
+ *
+ * Return: A mask of doorbell bits supported by the ntb.
+ */
+uint64_t
+ntb_db_valid_mask(struct ntb_softc *ntb)
+{
+
+ return (ntb->db_valid_mask);
+}
+
+/*
+ * ntb_db_vector_mask() - get a mask of doorbell bits serviced by a vector
+ * @ntb: NTB device context
+ * @vector: Doorbell vector number
+ *
+ * Each interrupt vector may have a different number or arrangement of bits.
+ *
+ * Return: A mask of doorbell bits serviced by a vector.
+ */
+uint64_t
+ntb_db_vector_mask(struct ntb_softc *ntb, uint32_t vector)
+{
+
+ if (vector > ntb->db_vec_count)
+ return (0);
+ return (ntb->db_valid_mask & ntb_vec_mask(ntb, vector));
+}
+
/**
* ntb_link_is_up() - get the current ntb link state
* @ntb: NTB device context
@@ -2215,7 +2675,7 @@ ntb_get_device(struct ntb_softc *ntb)
/* Export HW-specific errata information. */
bool
-ntb_has_feature(struct ntb_softc *ntb, uint64_t feature)
+ntb_has_feature(struct ntb_softc *ntb, uint32_t feature)
{
return (HAS_FEATURE(feature));
diff --git a/sys/dev/ntb/ntb_hw/ntb_hw.h b/sys/dev/ntb/ntb_hw/ntb_hw.h
index c28596d..4b0b7eb 100644
--- a/sys/dev/ntb/ntb_hw/ntb_hw.h
+++ b/sys/dev/ntb/ntb_hw/ntb_hw.h
@@ -56,7 +56,7 @@ enum ntb_width {
SYSCTL_DECL(_hw_ntb);
-typedef void (*ntb_db_callback)(void *data, int vector);
+typedef void (*ntb_db_callback)(void *data, uint32_t vector);
typedef void (*ntb_event_callback)(void *data);
struct ntb_ctx_ops {
@@ -90,22 +90,27 @@ int ntb_peer_spad_read(struct ntb_softc *ntb, unsigned int idx,
uint32_t *val);
uint64_t ntb_db_valid_mask(struct ntb_softc *);
+uint64_t ntb_db_vector_mask(struct ntb_softc *, uint32_t vector);
bus_addr_t ntb_get_peer_db_addr(struct ntb_softc *, vm_size_t *sz_out);
void ntb_db_clear(struct ntb_softc *, uint64_t bits);
void ntb_db_clear_mask(struct ntb_softc *, uint64_t bits);
uint64_t ntb_db_read(struct ntb_softc *);
void ntb_db_set_mask(struct ntb_softc *, uint64_t bits);
-uint64_t ntb_db_vector_mask(struct ntb_softc *, int vector);
void ntb_peer_db_set(struct ntb_softc *, uint64_t bits);
-/* Hardware owns the low 32 bits of features. */
+/* Hardware owns the low 16 bits of features. */
#define NTB_BAR_SIZE_4K (1 << 0)
#define NTB_SDOORBELL_LOCKUP (1 << 1)
#define NTB_SB01BASE_LOCKUP (1 << 2)
#define NTB_B2BDOORBELL_BIT14 (1 << 3)
-/* Software/configuration owns the top 32 bits. */
-#define NTB_SPLIT_BAR (1ull << 32)
-bool ntb_has_feature(struct ntb_softc *, uint64_t);
+/* Software/configuration owns the top 16 bits. */
+#define NTB_SPLIT_BAR (1ull << 16)
+
+#define NTB_FEATURES_STR \
+ "\20\21SPLIT_BAR4\04B2B_DOORBELL_BIT14\03SB01BASE_LOCKUP" \
+ "\02SDOORBELL_LOCKUP\01BAR_SIZE_4K"
+
+bool ntb_has_feature(struct ntb_softc *, uint32_t);
#endif /* _NTB_HW_H_ */
diff --git a/sys/dev/ntb/ntb_hw/ntb_regs.h b/sys/dev/ntb/ntb_hw/ntb_regs.h
index 22d2422..b19f80c 100644
--- a/sys/dev/ntb/ntb_hw/ntb_regs.h
+++ b/sys/dev/ntb/ntb_hw/ntb_regs.h
@@ -47,6 +47,7 @@
#define XEON_PCICMD_OFFSET 0x0504
#define XEON_DEVCTRL_OFFSET 0x0598
+#define XEON_DEVSTS_OFFSET 0x059a
#define XEON_LINK_STATUS_OFFSET 0x01a2
#define XEON_SLINK_STATUS_OFFSET 0x05a2
@@ -72,57 +73,59 @@
#define XEON_PDBMSK_OFFSET 0x0062
#define XEON_SDOORBELL_OFFSET 0x0064
#define XEON_SDBMSK_OFFSET 0x0066
-#define XEON_USMEMMISS 0x0070
+#define XEON_USMEMMISS_OFFSET 0x0070
#define XEON_SPAD_OFFSET 0x0080
#define XEON_SPADSEMA4_OFFSET 0x00c0
#define XEON_WCCNTRL_OFFSET 0x00e0
+#define XEON_UNCERRSTS_OFFSET 0x014c
+#define XEON_CORERRSTS_OFFSET 0x0158
#define XEON_B2B_SPAD_OFFSET 0x0100
#define XEON_B2B_DOORBELL_OFFSET 0x0140
#define XEON_B2B_XLAT_OFFSETL 0x0144
#define XEON_B2B_XLAT_OFFSETU 0x0148
-#define SOC_MW_COUNT 2
-#define SOC_DB_COUNT 34
-#define SOC_DB_MSIX_VECTOR_COUNT 34
-#define SOC_DB_MSIX_VECTOR_SHIFT 1
-#define SOC_SPAD_COUNT 16
-
-#define SOC_PCICMD_OFFSET 0xb004
-#define SOC_MBAR23_OFFSET 0xb018
-#define SOC_MBAR45_OFFSET 0xb020
-#define SOC_DEVCTRL_OFFSET 0xb048
-#define SOC_LINK_STATUS_OFFSET 0xb052
-#define SOC_ERRCORSTS_OFFSET 0xb110
-
-#define SOC_SBAR2XLAT_OFFSET 0x0008
-#define SOC_SBAR4XLAT_OFFSET 0x0010
-#define SOC_PDOORBELL_OFFSET 0x0020
-#define SOC_PDBMSK_OFFSET 0x0028
-#define SOC_NTBCNTL_OFFSET 0x0060
-#define SOC_EBDF_OFFSET 0x0064
-#define SOC_SPAD_OFFSET 0x0080
-#define SOC_SPADSEMA_OFFSET 0x00c0
-#define SOC_STKYSPAD_OFFSET 0x00c4
-#define SOC_PBAR2XLAT_OFFSET 0x8008
-#define SOC_PBAR4XLAT_OFFSET 0x8010
-#define SOC_B2B_DOORBELL_OFFSET 0x8020
-#define SOC_B2B_SPAD_OFFSET 0x8080
-#define SOC_B2B_SPADSEMA_OFFSET 0x80c0
-#define SOC_B2B_STKYSPAD_OFFSET 0x80c4
-
-#define SOC_MODPHY_PCSREG4 0x1c004
-#define SOC_MODPHY_PCSREG6 0x1c006
-
-#define SOC_IP_BASE 0xc000
-#define SOC_DESKEWSTS_OFFSET (SOC_IP_BASE + 0x3024)
-#define SOC_LTSSMERRSTS0_OFFSET (SOC_IP_BASE + 0x3180)
-#define SOC_LTSSMSTATEJMP_OFFSET (SOC_IP_BASE + 0x3040)
-#define SOC_IBSTERRRCRVSTS0_OFFSET (SOC_IP_BASE + 0x3324)
-
-#define SOC_DESKEWSTS_DBERR (1 << 15)
-#define SOC_LTSSMERRSTS0_UNEXPECTEDEI (1 << 20)
-#define SOC_LTSSMSTATEJMP_FORCEDETECT (1 << 2)
-#define SOC_IBIST_ERR_OFLOW 0x7fff7fff
+#define ATOM_MW_COUNT 2
+#define ATOM_DB_COUNT 34
+#define ATOM_DB_MSIX_VECTOR_COUNT 34
+#define ATOM_DB_MSIX_VECTOR_SHIFT 1
+#define ATOM_SPAD_COUNT 16
+
+#define ATOM_PCICMD_OFFSET 0xb004
+#define ATOM_MBAR23_OFFSET 0xb018
+#define ATOM_MBAR45_OFFSET 0xb020
+#define ATOM_DEVCTRL_OFFSET 0xb048
+#define ATOM_LINK_STATUS_OFFSET 0xb052
+#define ATOM_ERRCORSTS_OFFSET 0xb110
+
+#define ATOM_SBAR2XLAT_OFFSET 0x0008
+#define ATOM_SBAR4XLAT_OFFSET 0x0010
+#define ATOM_PDOORBELL_OFFSET 0x0020
+#define ATOM_PDBMSK_OFFSET 0x0028
+#define ATOM_NTBCNTL_OFFSET 0x0060
+#define ATOM_EBDF_OFFSET 0x0064
+#define ATOM_SPAD_OFFSET 0x0080
+#define ATOM_SPADSEMA_OFFSET 0x00c0
+#define ATOM_STKYSPAD_OFFSET 0x00c4
+#define ATOM_PBAR2XLAT_OFFSET 0x8008
+#define ATOM_PBAR4XLAT_OFFSET 0x8010
+#define ATOM_B2B_DOORBELL_OFFSET 0x8020
+#define ATOM_B2B_SPAD_OFFSET 0x8080
+#define ATOM_B2B_SPADSEMA_OFFSET 0x80c0
+#define ATOM_B2B_STKYSPAD_OFFSET 0x80c4
+
+#define ATOM_MODPHY_PCSREG4 0x1c004
+#define ATOM_MODPHY_PCSREG6 0x1c006
+
+#define ATOM_IP_BASE 0xc000
+#define ATOM_DESKEWSTS_OFFSET (ATOM_IP_BASE + 0x3024)
+#define ATOM_LTSSMERRSTS0_OFFSET (ATOM_IP_BASE + 0x3180)
+#define ATOM_LTSSMSTATEJMP_OFFSET (ATOM_IP_BASE + 0x3040)
+#define ATOM_IBSTERRRCRVSTS0_OFFSET (ATOM_IP_BASE + 0x3324)
+
+#define ATOM_DESKEWSTS_DBERR (1 << 15)
+#define ATOM_LTSSMERRSTS0_UNEXPECTEDEI (1 << 20)
+#define ATOM_LTSSMSTATEJMP_FORCEDETECT (1 << 2)
+#define ATOM_IBIST_ERR_OFLOW 0x7fff7fff
#define NTB_CNTL_CFG_LOCK (1 << 0)
#define NTB_CNTL_LINK_DISABLE (1 << 1)
@@ -132,7 +135,7 @@
#define NTB_CNTL_P2S_BAR4_SNOOP (1 << 8)
#define NTB_CNTL_S2P_BAR5_SNOOP (1 << 12)
#define NTB_CNTL_P2S_BAR5_SNOOP (1 << 14)
-#define SOC_CNTL_LINK_DOWN (1 << 16)
+#define ATOM_CNTL_LINK_DOWN (1 << 16)
#define XEON_PBAR23SZ_OFFSET 0x00d0
#define XEON_PBAR45SZ_OFFSET 0x00d1
@@ -145,16 +148,9 @@
#define XEON_PPD_CONN_TYPE 0x0003
#define XEON_PPD_DEV_TYPE 0x0010
#define XEON_PPD_SPLIT_BAR 0x0040
-#define SOC_PPD_INIT_LINK 0x0008
-#define SOC_PPD_CONN_TYPE 0x0300
-#define SOC_PPD_DEV_TYPE 0x1000
-
-#define NTB_CONN_TRANSPARENT 0
-#define NTB_CONN_B2B 1
-#define NTB_CONN_RP 2
-
-#define NTB_DEV_DSD 1
-#define NTB_DEV_USD 0
+#define ATOM_PPD_INIT_LINK 0x0008
+#define ATOM_PPD_CONN_TYPE 0x0300
+#define ATOM_PPD_DEV_TYPE 0x1000
/* All addresses are in low 32-bit space so 32-bit BARs can function */
#define XEON_B2B_BAR0_USD_ADDR 0x1000000000000000ull
diff --git a/sys/dev/nvd/nvd.c b/sys/dev/nvd/nvd.c
index 016d728..5d75876 100644
--- a/sys/dev/nvd/nvd.c
+++ b/sys/dev/nvd/nvd.c
@@ -279,6 +279,7 @@ nvd_new_disk(struct nvme_namespace *ns, void *ctrlr_arg)
disk->d_sectorsize = nvme_ns_get_sector_size(ns);
disk->d_mediasize = (off_t)nvme_ns_get_size(ns);
disk->d_delmaxsize = (off_t)nvme_ns_get_size(ns);
+ disk->d_stripesize = nvme_ns_get_stripesize(ns);
if (TAILQ_EMPTY(&disk_head))
disk->d_unit = 0;
diff --git a/sys/dev/nvme/nvme.h b/sys/dev/nvme/nvme.h
index 111a932..7e41e77 100644
--- a/sys/dev/nvme/nvme.h
+++ b/sys/dev/nvme/nvme.h
@@ -870,6 +870,7 @@ const char * nvme_ns_get_serial_number(struct nvme_namespace *ns);
const char * nvme_ns_get_model_number(struct nvme_namespace *ns);
const struct nvme_namespace_data *
nvme_ns_get_data(struct nvme_namespace *ns);
+uint32_t nvme_ns_get_stripesize(struct nvme_namespace *ns);
int nvme_ns_bio_process(struct nvme_namespace *ns, struct bio *bp,
nvme_cb_fn_t cb_fn);
diff --git a/sys/dev/nvme/nvme_ns.c b/sys/dev/nvme/nvme_ns.c
index 84a1980..754d074 100644
--- a/sys/dev/nvme/nvme_ns.c
+++ b/sys/dev/nvme/nvme_ns.c
@@ -210,6 +210,13 @@ nvme_ns_get_data(struct nvme_namespace *ns)
return (&ns->data);
}
+uint32_t
+nvme_ns_get_stripesize(struct nvme_namespace *ns)
+{
+
+ return (ns->stripesize);
+}
+
static void
nvme_ns_bio_done(void *arg, const struct nvme_completion *status)
{
@@ -239,7 +246,7 @@ static void
nvme_bio_child_inbed(struct bio *parent, int bio_error)
{
struct nvme_completion parent_cpl;
- int inbed;
+ int children, inbed;
if (bio_error != 0) {
parent->bio_flags |= BIO_ERROR;
@@ -248,10 +255,13 @@ nvme_bio_child_inbed(struct bio *parent, int bio_error)
/*
* atomic_fetchadd will return value before adding 1, so we still
- * must add 1 to get the updated inbed number.
+ * must add 1 to get the updated inbed number. Save bio_children
+ * before incrementing to guard against race conditions when
+ * two children bios complete on different queues.
*/
+ children = atomic_load_acq_int(&parent->bio_children);
inbed = atomic_fetchadd_int(&parent->bio_inbed, 1) + 1;
- if (inbed == parent->bio_children) {
+ if (inbed == children) {
bzero(&parent_cpl, sizeof(parent_cpl));
if (parent->bio_flags & BIO_ERROR)
parent_cpl.status.sc = NVME_SC_DATA_TRANSFER_ERROR;
diff --git a/sys/dev/ofw/ofw_iicbus.c b/sys/dev/ofw/ofw_iicbus.c
index e6816c1..e7613fc 100644
--- a/sys/dev/ofw/ofw_iicbus.c
+++ b/sys/dev/ofw/ofw_iicbus.c
@@ -147,7 +147,11 @@ ofw_iicbus_attach(device_t dev)
M_NOWAIT | M_ZERO);
if (dinfo == NULL)
continue;
- dinfo->opd_dinfo.addr = paddr;
+ /*
+ * OFW uses 7-bit I2C address format (see ePAPR),
+ * but system expect 8-bit.
+ */
+ dinfo->opd_dinfo.addr = paddr << 1;
if (ofw_bus_gen_setup_devinfo(&dinfo->opd_obdinfo, child) !=
0) {
free(dinfo, M_DEVBUF);
diff --git a/sys/dev/otus/if_otus.c b/sys/dev/otus/if_otus.c
index 8756419..a61e344 100644
--- a/sys/dev/otus/if_otus.c
+++ b/sys/dev/otus/if_otus.c
@@ -173,7 +173,8 @@ void otus_cmd_rxeof(struct otus_softc *, uint8_t *, int);
void otus_sub_rxeof(struct otus_softc *, uint8_t *, int,
struct mbufq *);
static int otus_tx(struct otus_softc *, struct ieee80211_node *,
- struct mbuf *, struct otus_data *);
+ struct mbuf *, struct otus_data *,
+ const struct ieee80211_bpf_params *);
int otus_ioctl(struct ifnet *, u_long, caddr_t);
int otus_set_multi(struct otus_softc *);
static void otus_updateedca(struct otus_softc *sc);
@@ -509,7 +510,7 @@ _otus_start(struct otus_softc *sc)
ni = (struct ieee80211_node *)m->m_pkthdr.rcvif;
m->m_pkthdr.rcvif = NULL;
- if (otus_tx(sc, ni, m, bf) != 0) {
+ if (otus_tx(sc, ni, m, bf, NULL) != 0) {
OTUS_DPRINTF(sc, OTUS_DEBUG_XMIT,
"%s: failed to transmit\n", __func__);
if_inc_counter(ni->ni_vap->iv_ifp,
@@ -554,10 +555,7 @@ otus_raw_xmit(struct ieee80211_node *ni, struct mbuf *m,
goto error;
}
- /*
- * XXX TODO: support TX bpf params
- */
- if (otus_tx(sc, ni, m, bf) != 0) {
+ if (otus_tx(sc, ni, m, bf, params) != 0) {
error = EIO;
goto error;
}
@@ -1276,6 +1274,7 @@ otus_newstate(struct ieee80211vap *vap, enum ieee80211_state nstate, int arg)
taskqueue_enqueue_timeout(taskqueue_thread,
&sc->calib_to, hz);
}
+ ieee80211_free_node(ni);
break;
default:
break;
@@ -1646,8 +1645,8 @@ otus_sub_rxeof(struct otus_softc *sc, uint8_t *buf, int len, struct mbufq *rxq)
}
tail = (struct ar_rx_tail *)(plcp + len - sizeof (*tail));
- /* Discard error frames. */
- if (__predict_false(tail->error != 0)) {
+ /* Discard error frames; don't discard BAD_RA (eg monitor mode); let net80211 do that */
+ if (__predict_false((tail->error & ~AR_RX_ERROR_BAD_RA) != 0)) {
OTUS_DPRINTF(sc, OTUS_DEBUG_RXDONE, "error frame 0x%02x\n", tail->error);
if (tail->error & AR_RX_ERROR_FCS) {
OTUS_DPRINTF(sc, OTUS_DEBUG_RXDONE, "bad FCS\n");
@@ -1672,10 +1671,14 @@ otus_sub_rxeof(struct otus_softc *sc, uint8_t *buf, int len, struct mbufq *rxq)
wh = (struct ieee80211_frame *)(plcp + AR_PLCP_HDR_LEN);
+ /*
+ * TODO: I see > 2KiB buffers in this path; is it A-MSDU or something?
+ */
m = m_get2(mlen, M_NOWAIT, MT_DATA, M_PKTHDR);
if (m == NULL) {
- device_printf(sc->sc_dev, "%s: failed m_get2()\n", __func__);
+ device_printf(sc->sc_dev, "%s: failed m_get2() (mlen=%d)\n", __func__, mlen);
counter_u64_add(ic->ic_ierrors, 1);
+ return;
}
/* Finalize mbuf. */
@@ -2178,10 +2181,20 @@ otus_tx_update_ratectl(struct otus_softc *sc, struct ieee80211_node *ni)
/*
* XXX TODO: support tx bpf parameters for configuration!
+ *
+ * Relevant pieces:
+ *
+ * ac = params->ibp_pri & 3;
+ * rate = params->ibp_rate0;
+ * params->ibp_flags & IEEE80211_BPF_NOACK
+ * params->ibp_flags & IEEE80211_BPF_RTS
+ * params->ibp_flags & IEEE80211_BPF_CTS
+ * tx->rts_ntries = params->ibp_try1;
+ * tx->data_ntries = params->ibp_try0;
*/
static int
otus_tx(struct otus_softc *sc, struct ieee80211_node *ni, struct mbuf *m,
- struct otus_data *data)
+ struct otus_data *data, const struct ieee80211_bpf_params *params)
{
struct ieee80211com *ic = &sc->sc_ic;
struct ieee80211vap *vap = ni->ni_vap;
@@ -2230,7 +2243,9 @@ otus_tx(struct otus_softc *sc, struct ieee80211_node *ni, struct mbuf *m,
}
/* Pickup a rate index. */
- if (IEEE80211_IS_MULTICAST(wh->i_addr1) ||
+ if (params != NULL) {
+ rate = otus_rate_to_hw_rate(sc, params->ibp_rate0);
+ } else if (IEEE80211_IS_MULTICAST(wh->i_addr1) ||
(wh->i_fc[0] & IEEE80211_FC0_TYPE_MASK) != IEEE80211_FC0_TYPE_DATA) {
/* Get lowest rate */
rate = otus_rate_to_hw_rate(sc, 0);
@@ -2245,6 +2260,9 @@ otus_tx(struct otus_softc *sc, struct ieee80211_node *ni, struct mbuf *m,
phyctl = 0;
macctl = AR_TX_MAC_BACKOFF | AR_TX_MAC_HW_DUR | AR_TX_MAC_QID(qid);
+ /*
+ * XXX TODO: params for NOACK, ACK, RTS, CTS, etc
+ */
if (IEEE80211_IS_MULTICAST(wh->i_addr1) ||
(hasqos && ((qos & IEEE80211_QOS_ACKPOLICY) ==
IEEE80211_QOS_ACKPOLICY_NOACK)))
@@ -2293,7 +2311,7 @@ otus_tx(struct otus_softc *sc, struct ieee80211_node *ni, struct mbuf *m,
OTUS_DPRINTF(sc, OTUS_DEBUG_XMIT,
"%s: tx: m=%p; data=%p; len=%d mac=0x%04x phy=0x%08x rate=0x%02x, ni_txrate=%d\n",
- __func__, m, data, head->len, head->macctl, head->phyctl,
+ __func__, m, data, le16toh(head->len), macctl, phyctl,
(int) rate, (int) ni->ni_txrate);
/* Submit transfer */
@@ -2447,29 +2465,29 @@ otus_init_mac(struct otus_softc *sc)
otus_write(sc, AR_MAC_REG_RX_PE_DELAY, 0x70);
otus_write(sc, AR_MAC_REG_EIFS_AND_SIFS, 0xa144000);
otus_write(sc, AR_MAC_REG_SLOT_TIME, 9 << 10);
- otus_write(sc, 0x1c3b2c, 0x19000000);
+ otus_write(sc, AR_MAC_REG_TID_CFACK_CFEND_RATE, 0x19000000);
/* NAV protects ACK only (in TXOP). */
- otus_write(sc, 0x1c3b38, 0x201);
+ otus_write(sc, AR_MAC_REG_TXOP_DURATION, 0x201);
/* Set beacon Tx power to 0x7. */
otus_write(sc, AR_MAC_REG_BCN_HT1, 0x8000170);
otus_write(sc, AR_MAC_REG_BACKOFF_PROTECT, 0x105);
- otus_write(sc, 0x1c3b9c, 0x10000a);
+ otus_write(sc, AR_MAC_REG_AMPDU_FACTOR, 0x10000a);
/* Filter any control frames, BAR is bit 24. */
- otus_write(sc, 0x1c368c, 0x0500ffff);
- otus_write(sc, 0x1c3c40, 0x1);
+// otus_write(sc, AR_MAC_REG_FRAMETYPE_FILTER, 0x0500ffff);
+// otus_write(sc, AR_MAC_REG_RX_CONTROL, 0x1);
otus_write(sc, AR_MAC_REG_BASIC_RATE, 0x150f);
otus_write(sc, AR_MAC_REG_MANDATORY_RATE, 0x150f);
otus_write(sc, AR_MAC_REG_RTS_CTS_RATE, 0x10b01bb);
- otus_write(sc, 0x1c3694, 0x4003c1e);
+ otus_write(sc, AR_MAC_REG_ACK_TPC, 0x4003c1e);
/* Enable LED0 and LED1. */
- otus_write(sc, 0x1d0100, 0x3);
- otus_write(sc, 0x1d0104, 0x3);
+ otus_write(sc, AR_GPIO_REG_PORT_TYPE, 0x3);
+ otus_write(sc, AR_GPIO_REG_PORT_DATA, 0x3);
/* Switch MAC to OTUS interface. */
otus_write(sc, 0x1c3600, 0x3);
- otus_write(sc, 0x1c3c50, 0xffff);
- otus_write(sc, 0x1c3680, 0xf00008);
+ otus_write(sc, AR_MAC_REG_AMPDU_RX_THRESH, 0xffff);
+ otus_write(sc, AR_MAC_REG_MISC_680, 0xf00008);
/* Disable Rx timeout (workaround). */
- otus_write(sc, 0x1c362c, 0);
+ otus_write(sc, AR_MAC_REG_RX_TIMEOUT, 0);
/* Set USB Rx stream mode maximum frame number to 2. */
otus_write(sc, 0x1e1110, 0x4);
@@ -2477,14 +2495,14 @@ otus_init_mac(struct otus_softc *sc)
otus_write(sc, 0x1e1114, 0x80);
/* Set clock frequency to 88/80MHz. */
- otus_write(sc, 0x1d4008, 0x73);
+ otus_write(sc, AR_PWR_REG_CLOCK_SEL, 0x73);
/* Set WLAN DMA interrupt mode: generate intr per packet. */
- otus_write(sc, 0x1c3d7c, 0x110011);
- otus_write(sc, 0x1c3bb0, 0x4);
+ otus_write(sc, AR_MAC_REG_TXRX_MPI, 0x110011);
+ otus_write(sc, AR_MAC_REG_FCS_SELECT, 0x4);
otus_write(sc, AR_MAC_REG_TXOP_NOT_ENOUGH_INDICATION, 0x141e0f48);
/* Disable HW decryption for now. */
- otus_write(sc, 0x1c3678, 0x78);
+ otus_write(sc, AR_MAC_REG_ENCRYPTION, 0x78);
if ((error = otus_write_barrier(sc)) != 0)
return error;
@@ -2636,9 +2654,9 @@ otus_program_phy(struct otus_softc *sc, struct ieee80211_channel *c)
otus_write(sc, AR_PHY_POWER_TX_RATE9, 0x3f3f3f3f);
if (IEEE80211_IS_CHAN_2GHZ(c))
- otus_write(sc, 0x1d4014, 0x5163);
+ otus_write(sc, AR_PWR_REG_PLL_ADDAC, 0x5163);
else
- otus_write(sc, 0x1d4014, 0x5143);
+ otus_write(sc, AR_PWR_REG_PLL_ADDAC, 0x5143);
return otus_write_barrier(sc);
}
@@ -2750,10 +2768,10 @@ otus_set_chan(struct otus_softc *sc, struct ieee80211_channel *c, int assoc)
OTUS_DPRINTF(sc, OTUS_DEBUG_RESET, "band switch\n");
/* Cold/Warm reset BB/ADDA. */
- otus_write(sc, 0x1d4004, sc->bb_reset ? 0x800 : 0x400);
+ otus_write(sc, AR_PWR_REG_RESET, sc->bb_reset ? 0x800 : 0x400);
if ((error = otus_write_barrier(sc)) != 0)
goto finish;
- otus_write(sc, 0x1d4004, 0);
+ otus_write(sc, AR_PWR_REG_RESET, 0);
if ((error = otus_write_barrier(sc)) != 0)
goto finish;
sc->bb_reset = 0;
@@ -3049,13 +3067,64 @@ otus_led_newstate_type3(struct otus_softc *sc)
state &= ~AR_LED0_ON;
}
if (state != sc->led_state) {
- otus_write(sc, 0x1d0104, state);
+ otus_write(sc, AR_GPIO_REG_PORT_DATA, state);
if (otus_write_barrier(sc) == 0)
sc->led_state = state;
}
#endif
}
+/*
+ * TODO:
+ *
+ * + If in monitor mode, set BSSID to all zeros, else the node BSSID.
+ * + Handle STA + monitor (eg tcpdump/promisc/radiotap) as well as
+ * pure monitor mode.
+ */
+static int
+otus_set_operating_mode(struct otus_softc *sc)
+{
+ struct ieee80211com *ic = &sc->sc_ic;
+ uint32_t rx_ctrl;
+ uint32_t frm_filt;
+ uint32_t cam_mode;
+ uint32_t rx_sniffer;
+
+ OTUS_LOCK_ASSERT(sc);
+
+ /* XXX TODO: too many magic constants */
+ rx_ctrl = 0x1;
+ /* Filter any control frames, BAR is bit 24. */
+ frm_filt = 0x0500ffff;
+ cam_mode = 0x0f000002; /* XXX STA */
+ rx_sniffer = 0x20000000;
+
+ switch (ic->ic_opmode) {
+ case IEEE80211_M_STA:
+ cam_mode = 0x0f000002; /* XXX STA */
+ rx_ctrl = 0x1;
+ frm_filt = 0x0500ffff;
+ rx_sniffer = 0x20000000;
+ break;
+ case IEEE80211_M_MONITOR:
+ cam_mode = 0x0f000002; /* XXX STA */
+ rx_ctrl = 0x1;
+ frm_filt = 0xffffffff;
+ rx_sniffer = 0x20000001;
+ break;
+ default:
+ break;
+ }
+
+ otus_write(sc, AR_MAC_REG_SNIFFER, rx_sniffer);
+ otus_write(sc, AR_MAC_REG_CAM_MODE, cam_mode);
+ otus_write(sc, AR_MAC_REG_FRAMETYPE_FILTER, frm_filt);
+ otus_write(sc, AR_MAC_REG_RX_CONTROL, cam_mode);
+
+ (void) otus_write_barrier(sc);
+ return (0);
+}
+
int
otus_init(struct otus_softc *sc)
{
@@ -3078,47 +3147,7 @@ otus_init(struct otus_softc *sc)
}
(void) otus_set_macaddr(sc, ic->ic_macaddr);
-
-#if 0
- switch (ic->ic_opmode) {
-#ifdef notyet
-#ifndef IEEE80211_STA_ONLY
- case IEEE80211_M_HOSTAP:
- otus_write(sc, 0x1c3700, 0x0f0000a1);
- otus_write(sc, 0x1c3c40, 0x1);
- break;
- case IEEE80211_M_IBSS:
- otus_write(sc, 0x1c3700, 0x0f000000);
- otus_write(sc, 0x1c3c40, 0x1);
- break;
-#endif
-#endif
- case IEEE80211_M_STA:
- otus_write(sc, 0x1c3700, 0x0f000002);
- otus_write(sc, 0x1c3c40, 0x1);
- break;
- default:
- break;
- }
-#endif
-
- switch (ic->ic_opmode) {
- case IEEE80211_M_STA:
- otus_write(sc, 0x1c3700, 0x0f000002);
- otus_write(sc, 0x1c3c40, 0x1);
- break;
- case IEEE80211_M_MONITOR:
- otus_write(sc, 0x1c368c, 0xffffffff);
- break;
- default:
- break;
- }
-
- /* XXX ic_opmode? */
- otus_write(sc, AR_MAC_REG_SNIFFER,
- (ic->ic_opmode == IEEE80211_M_MONITOR) ? 0x2000001 : 0x2000000);
-
- (void)otus_write_barrier(sc);
+ (void) otus_set_operating_mode(sc);
sc->bb_reset = 1; /* Force cold reset. */
@@ -3130,7 +3159,7 @@ otus_init(struct otus_softc *sc)
}
/* Start Rx. */
- otus_write(sc, 0x1c3d30, 0x100);
+ otus_write(sc, AR_MAC_REG_DMA_TRIGGER, 0x100);
(void)otus_write_barrier(sc);
sc->sc_running = 1;
@@ -3161,7 +3190,7 @@ otus_stop(struct otus_softc *sc)
OTUS_LOCK(sc);
sc->sc_running = 0;
/* Stop Rx. */
- otus_write(sc, 0x1c3d30, 0);
+ otus_write(sc, AR_MAC_REG_DMA_TRIGGER, 0);
(void)otus_write_barrier(sc);
/* Drain any pending TX frames */
diff --git a/sys/dev/otus/if_otusreg.h b/sys/dev/otus/if_otusreg.h
index 4352778..491e529 100644
--- a/sys/dev/otus/if_otusreg.h
+++ b/sys/dev/otus/if_otusreg.h
@@ -43,12 +43,14 @@
* AR9170 MAC registers.
*/
#define AR_MAC_REG_BASE 0x1c3000
+#define AR_MAC_REG_DMA_TRIGGER (AR_MAC_REG_BASE + 0xd30)
#define AR_MAC_REG_MAC_ADDR_L (AR_MAC_REG_BASE + 0x610)
#define AR_MAC_REG_MAC_ADDR_H (AR_MAC_REG_BASE + 0x614)
#define AR_MAC_REG_BSSID_L (AR_MAC_REG_BASE + 0x618)
#define AR_MAC_REG_BSSID_H (AR_MAC_REG_BASE + 0x61c)
#define AR_MAC_REG_GROUP_HASH_TBL_L (AR_MAC_REG_BASE + 0x624)
#define AR_MAC_REG_GROUP_HASH_TBL_H (AR_MAC_REG_BASE + 0x628)
+#define AR_MAC_REG_RX_TIMEOUT (AR_MAC_REG_BASE + 0x62c)
#define AR_MAC_REG_BASIC_RATE (AR_MAC_REG_BASE + 0x630)
#define AR_MAC_REG_MANDATORY_RATE (AR_MAC_REG_BASE + 0x634)
#define AR_MAC_REG_RTS_CTS_RATE (AR_MAC_REG_BASE + 0x638)
@@ -57,11 +59,16 @@
#define AR_MAC_REG_RX_PE_DELAY (AR_MAC_REG_BASE + 0x64c)
#define AR_MAC_REG_DYNAMIC_SIFS_ACK (AR_MAC_REG_BASE + 0x658)
#define AR_MAC_REG_SNIFFER (AR_MAC_REG_BASE + 0x674)
+#define AR_MAC_REG_ENCRYPTION (AR_MAC_REG_BASE + 0x678)
+#define AR_MAC_REG_MISC_680 (AR_MAC_REG_BASE + 0x680)
+#define AR_MAC_REG_FRAMETYPE_FILTER (AR_MAC_REG_BASE + 0x68c)
#define AR_MAC_REG_ACK_EXTENSION (AR_MAC_REG_BASE + 0x690)
+#define AR_MAC_REG_ACK_TPC (AR_MAC_REG_BASE + 0x694)
#define AR_MAC_REG_EIFS_AND_SIFS (AR_MAC_REG_BASE + 0x698)
#define AR_MAC_REG_BUSY (AR_MAC_REG_BASE + 0x6e8)
#define AR_MAC_REG_BUSY_EXT (AR_MAC_REG_BASE + 0x6ec)
#define AR_MAC_REG_SLOT_TIME (AR_MAC_REG_BASE + 0x6f0)
+#define AR_MAC_REG_CAM_MODE (AR_MAC_REG_BASE + 0x700)
#define AR_MAC_REG_AC0_CW (AR_MAC_REG_BASE + 0xb00)
#define AR_MAC_REG_AC1_CW (AR_MAC_REG_BASE + 0xb04)
#define AR_MAC_REG_AC2_CW (AR_MAC_REG_BASE + 0xb08)
@@ -70,12 +77,19 @@
#define AR_MAC_REG_AC1_AC0_AIFS (AR_MAC_REG_BASE + 0xb14)
#define AR_MAC_REG_AC3_AC2_AIFS (AR_MAC_REG_BASE + 0xb18)
#define AR_MAC_REG_RETRY_MAX (AR_MAC_REG_BASE + 0xb28)
+#define AR_MAC_REG_TID_CFACK_CFEND_RATE (AR_MAC_REG_BASE + 0xb2c)
#define AR_MAC_REG_TXOP_NOT_ENOUGH_INDICATION \
(AR_MAC_REG_BASE + 0xb30)
+#define AR_MAC_REG_TXOP_DURATION (AR_MAC_REG_BASE + 0xb38)
#define AR_MAC_REG_AC1_AC0_TXOP (AR_MAC_REG_BASE + 0xb44)
#define AR_MAC_REG_AC3_AC2_TXOP (AR_MAC_REG_BASE + 0xb48)
+#define AR_MAC_REG_AMPDU_FACTOR (AR_MAC_REG_BASE + 0xb9c)
+#define AR_MAC_REG_FCS_SELECT (AR_MAC_REG_BASE + 0xbb0)
+#define AR_MAC_REG_RX_CONTROL (AR_MAC_REG_BASE + 0xc40)
+#define AR_MAC_REG_AMPDU_RX_THRESH (AR_MAC_REG_BASE + 0xc50)
#define AR_MAC_REG_OFDM_PHY_ERRORS (AR_MAC_REG_BASE + 0xcb4)
#define AR_MAC_REG_CCK_PHY_ERRORS (AR_MAC_REG_BASE + 0xcb8)
+#define AR_MAC_REG_TXRX_MPI (AR_MAC_REG_BASE + 0xd7c)
#define AR_MAC_REG_BCN_HT1 (AR_MAC_REG_BASE + 0xda0)
/* Possible values for register AR_USB_MODE_CTRL. */
@@ -134,6 +148,32 @@
#define AR_BANK4_AMODE_REFSEL(x) ((x) << 2)
#define AR_BANK4_ADDR(x) ((x) << 5)
+/*
+ * Random number generator.
+ */
+#define AR_RAND_REG_BASE 0x1d0000
+
+/*
+ * GPIO.
+ */
+#define AR_GPIO_REG_BASE 0x1d0100
+
+#define AR_GPIO_REG_PORT_TYPE (AR_GPIO_REG_BASE + 0x000)
+#define AR_GPIO_REG_PORT_DATA (AR_GPIO_REG_BASE + 0x004)
+#define AR_GPIO_PORT_LED_0 1
+#define AR_GPIO_PORT_LED_1 2
+/* WPS Button GPIO for TP-Link TL-WN821N */
+#define AR_GPIO_PORT_WPS_BUTTON_PRESSED 4
+
+/*
+ * Power Management.
+ */
+#define AR_PWR_REG_BASE 0x1d4000
+
+#define AR_PWR_REG_RESET (AR_PWR_REG_BASE + 0x004)
+#define AR_PWR_REG_CLOCK_SEL (AR_PWR_REG_BASE + 0x008)
+#define AR_PWR_REG_PLL_ADDAC (AR_PWR_REG_BASE + 0x014)
+
/* Tx descriptor. */
struct ar_tx_head {
uint16_t len;
diff --git a/sys/dev/qlxgbe/ql_hw.c b/sys/dev/qlxgbe/ql_hw.c
index d039aed..3ae3f38 100644
--- a/sys/dev/qlxgbe/ql_hw.c
+++ b/sys/dev/qlxgbe/ql_hw.c
@@ -387,6 +387,7 @@ ql_hw_add_sysctls(qla_host_t *ha)
"Minidump Utility can start minidump process");
#ifdef QL_DBG
+ ha->err_inject = 0;
SYSCTL_ADD_UINT(device_get_sysctl_ctx(dev),
SYSCTL_CHILDREN(device_get_sysctl_tree(dev)),
OID_AUTO, "err_inject",
@@ -3057,7 +3058,7 @@ ql_hw_check_health(qla_host_t *ha)
val = READ_REG32(ha, Q8_FIRMWARE_HEARTBEAT);
if ((val != ha->hw.hbeat_value) &&
- (!(QL_ERR_INJECT(ha, INJCT_TEMPERATURE_FAILURE)))) {
+ (!(QL_ERR_INJECT(ha, INJCT_HEARTBEAT_FAILURE)))) {
ha->hw.hbeat_value = val;
return 0;
}
diff --git a/sys/dev/qlxgbe/ql_os.c b/sys/dev/qlxgbe/ql_os.c
index d46af57..8269b41 100644
--- a/sys/dev/qlxgbe/ql_os.c
+++ b/sys/dev/qlxgbe/ql_os.c
@@ -289,8 +289,6 @@ qla_pci_attach(device_t dev)
int i;
uint32_t num_rcvq = 0;
- QL_DPRINT2(ha, (dev, "%s: enter\n", __func__));
-
if ((ha = device_get_softc(dev)) == NULL) {
device_printf(dev, "cannot get softc\n");
return (ENOMEM);
diff --git a/sys/dev/qlxgbe/ql_ver.h b/sys/dev/qlxgbe/ql_ver.h
index 061e368..0d86db9 100644
--- a/sys/dev/qlxgbe/ql_ver.h
+++ b/sys/dev/qlxgbe/ql_ver.h
@@ -36,6 +36,6 @@
#define QLA_VERSION_MAJOR 3
#define QLA_VERSION_MINOR 10
-#define QLA_VERSION_BUILD 24
+#define QLA_VERSION_BUILD 25
#endif /* #ifndef _QL_VER_H_ */
diff --git a/sys/dev/ral/rt2860.c b/sys/dev/ral/rt2860.c
index d233315..a572dbf 100644
--- a/sys/dev/ral/rt2860.c
+++ b/sys/dev/ral/rt2860.c
@@ -513,7 +513,7 @@ rt2860_alloc_tx_ring(struct rt2860_softc *sc, struct rt2860_tx_ring *ring)
BUS_SPACE_MAXADDR_32BIT, BUS_SPACE_MAXADDR, NULL, NULL,
size, 1, size, 0, NULL, NULL, &ring->desc_dmat);
if (error != 0) {
- device_printf(sc->sc_dev, "could not create desc DMA map\n");
+ device_printf(sc->sc_dev, "could not create desc DMA tag\n");
goto fail;
}
@@ -1699,7 +1699,7 @@ rt2860_raw_xmit(struct ieee80211_node *ni, struct mbuf *m,
RAL_LOCK(sc);
/* prevent management frames from being sent if we're not ready */
- if (!(sc->sc_flags & RT2860_RUNNNING)) {
+ if (!(sc->sc_flags & RT2860_RUNNING)) {
RAL_UNLOCK(sc);
m_freem(m);
return ENETDOWN;
@@ -1940,7 +1940,7 @@ rt2860_transmit(struct ieee80211com *ic, struct mbuf *m)
int error;
RAL_LOCK(sc);
- if ((sc->sc_flags & RT2860_RUNNNING) == 0) {
+ if ((sc->sc_flags & RT2860_RUNNING) == 0) {
RAL_UNLOCK(sc);
return (ENXIO);
}
@@ -1963,7 +1963,7 @@ rt2860_start(struct rt2860_softc *sc)
RAL_LOCK_ASSERT(sc);
- if ((sc->sc_flags & RT2860_RUNNNING) == 0)
+ if ((sc->sc_flags & RT2860_RUNNING) == 0)
return;
while (!SLIST_EMPTY(&sc->data_pool) && sc->qfullmsk == 0 &&
@@ -1986,7 +1986,7 @@ rt2860_watchdog(void *arg)
RAL_LOCK_ASSERT(sc);
- KASSERT(sc->sc_flags & RT2860_RUNNNING, ("not running"));
+ KASSERT(sc->sc_flags & RT2860_RUNNING, ("not running"));
if (sc->sc_invalid) /* card ejected */
return;
@@ -2009,12 +2009,12 @@ rt2860_parent(struct ieee80211com *ic)
RAL_LOCK(sc);
if (ic->ic_nrunning> 0) {
- if (!(sc->sc_flags & RT2860_RUNNNING)) {
+ if (!(sc->sc_flags & RT2860_RUNNING)) {
rt2860_init_locked(sc);
startall = 1;
} else
rt2860_update_promisc(ic);
- } else if (sc->sc_flags & RT2860_RUNNNING)
+ } else if (sc->sc_flags & RT2860_RUNNING)
rt2860_stop_locked(sc);
RAL_UNLOCK(sc);
if (startall)
@@ -3791,7 +3791,7 @@ rt2860_init(void *arg)
rt2860_init_locked(sc);
RAL_UNLOCK(sc);
- if (sc->sc_flags & RT2860_RUNNNING)
+ if (sc->sc_flags & RT2860_RUNNING)
ieee80211_start_all(ic);
}
@@ -4051,7 +4051,7 @@ rt2860_init_locked(struct rt2860_softc *sc)
if (sc->sc_flags & RT2860_ADVANCED_PS)
rt2860_mcu_cmd(sc, RT2860_MCU_CMD_PSLEVEL, sc->pslevel, 0);
- sc->sc_flags |= RT2860_RUNNNING;
+ sc->sc_flags |= RT2860_RUNNING;
callout_reset(&sc->watchdog_ch, hz, rt2860_watchdog, sc);
}
@@ -4072,12 +4072,12 @@ rt2860_stop_locked(struct rt2860_softc *sc)
uint32_t tmp;
int qid;
- if (sc->sc_flags & RT2860_RUNNNING)
+ if (sc->sc_flags & RT2860_RUNNING)
rt2860_set_leds(sc, 0); /* turn all LEDs off */
callout_stop(&sc->watchdog_ch);
sc->sc_tx_timer = 0;
- sc->sc_flags &= ~RT2860_RUNNNING;
+ sc->sc_flags &= ~RT2860_RUNNING;
/* disable interrupts */
RAL_WRITE(sc, RT2860_INT_MASK, 0);
diff --git a/sys/dev/ral/rt2860var.h b/sys/dev/ral/rt2860var.h
index f7fd218..6d3765a 100644
--- a/sys/dev/ral/rt2860var.h
+++ b/sys/dev/ral/rt2860var.h
@@ -139,7 +139,7 @@ struct rt2860_softc {
#define RT2860_ENABLED (1 << 0)
#define RT2860_ADVANCED_PS (1 << 1)
#define RT2860_PCIE (1 << 2)
-#define RT2860_RUNNNING (1 << 3)
+#define RT2860_RUNNING (1 << 3)
struct ieee80211_node *wcid2ni[RT2860_WCID_MAX];
diff --git a/sys/dev/sound/midi/midi.c b/sys/dev/sound/midi/midi.c
index f95218b..e741dd0d 100644
--- a/sys/dev/sound/midi/midi.c
+++ b/sys/dev/sound/midi/midi.c
@@ -319,6 +319,8 @@ midi_init(kobj_class_t cls, int unit, int channel, void *cookie)
goto err0;
m->synth = malloc(sizeof(*m->synth), M_MIDI, M_NOWAIT | M_ZERO);
+ if (m->synth == NULL)
+ goto err1;
kobj_init((kobj_t)m->synth, &midisynth_class);
m->synth->m = m;
kobj_init((kobj_t)m, cls);
@@ -327,7 +329,7 @@ midi_init(kobj_class_t cls, int unit, int channel, void *cookie)
MIDI_DEBUG(1, printf("midiinit queues %d/%d.\n", inqsize, outqsize));
if (!inqsize && !outqsize)
- goto err1;
+ goto err2;
mtx_init(&m->lock, "raw midi", NULL, 0);
mtx_init(&m->qlock, "q raw midi", NULL, 0);
@@ -352,7 +354,7 @@ midi_init(kobj_class_t cls, int unit, int channel, void *cookie)
if ((inqsize && !MIDIQ_BUF(m->inq)) ||
(outqsize && !MIDIQ_BUF(m->outq)))
- goto err2;
+ goto err3;
m->busy = 0;
@@ -362,7 +364,7 @@ midi_init(kobj_class_t cls, int unit, int channel, void *cookie)
m->cookie = cookie;
if (MPU_INIT(m, cookie))
- goto err2;
+ goto err3;
mtx_unlock(&m->lock);
mtx_unlock(&m->qlock);
@@ -378,13 +380,14 @@ midi_init(kobj_class_t cls, int unit, int channel, void *cookie)
return m;
-err2: mtx_destroy(&m->qlock);
+err3: mtx_destroy(&m->qlock);
mtx_destroy(&m->lock);
if (MIDIQ_BUF(m->inq))
free(MIDIQ_BUF(m->inq), M_MIDI);
if (MIDIQ_BUF(m->outq))
free(MIDIQ_BUF(m->outq), M_MIDI);
+err2: free(m->synth, M_MIDI);
err1: free(m, M_MIDI);
err0: mtx_unlock(&midistat_lock);
MIDI_DEBUG(1, printf("midi_init ended in error\n"));
@@ -1388,6 +1391,7 @@ midi_destroy(struct snd_midi *m, int midiuninit)
free(MIDIQ_BUF(m->outq), M_MIDI);
mtx_destroy(&m->qlock);
mtx_destroy(&m->lock);
+ free(m->synth, M_MIDI);
free(m, M_MIDI);
return 0;
}
diff --git a/sys/dev/usb/controller/dwc_otg.c b/sys/dev/usb/controller/dwc_otg.c
index e018ab5..6243d8e 100644
--- a/sys/dev/usb/controller/dwc_otg.c
+++ b/sys/dev/usb/controller/dwc_otg.c
@@ -2558,6 +2558,7 @@ dwc_otg_interrupt_poll_locked(struct dwc_otg_softc *sc)
struct usb_xfer *xfer;
uint32_t count;
uint32_t temp;
+ uint32_t haint;
uint8_t got_rx_status;
uint8_t x;
@@ -2575,14 +2576,18 @@ repeat:
DPRINTF("Yield\n");
return;
}
+
/* get all host channel interrupts */
- for (x = 0; x != sc->sc_host_ch_max; x++) {
+ haint = DWC_OTG_READ_4(sc, DOTG_HAINT);
+ while (1) {
+ x = ffs(haint) - 1;
+ if (x >= sc->sc_host_ch_max)
+ break;
temp = DWC_OTG_READ_4(sc, DOTG_HCINT(x));
- if (temp != 0) {
- DWC_OTG_WRITE_4(sc, DOTG_HCINT(x), temp);
- temp &= ~HCINT_SOFTWARE_ONLY;
- sc->sc_chan_state[x].hcint |= temp;
- }
+ DWC_OTG_WRITE_4(sc, DOTG_HCINT(x), temp);
+ temp &= ~HCINT_SOFTWARE_ONLY;
+ sc->sc_chan_state[x].hcint |= temp;
+ haint &= ~(1U << x);
}
if (sc->sc_last_rx_status == 0) {
diff --git a/sys/dev/usb/usb_device.c b/sys/dev/usb/usb_device.c
index 13e2c14..8940171 100644
--- a/sys/dev/usb/usb_device.c
+++ b/sys/dev/usb/usb_device.c
@@ -506,8 +506,8 @@ usb_unconfigure(struct usb_device *udev, uint8_t flag)
#if USB_HAVE_COMPAT_LINUX
/* free Linux compat device, if any */
- if (udev->linux_endpoint_start) {
- usb_linux_free_device(udev);
+ if (udev->linux_endpoint_start != NULL) {
+ usb_linux_free_device_p(udev);
udev->linux_endpoint_start = NULL;
}
#endif
diff --git a/sys/dev/usb/usb_dynamic.c b/sys/dev/usb/usb_dynamic.c
index d08e7f8..24c13f9 100644
--- a/sys/dev/usb/usb_dynamic.c
+++ b/sys/dev/usb/usb_dynamic.c
@@ -59,6 +59,9 @@
/* function prototypes */
static usb_handle_req_t usb_temp_get_desc_w;
static usb_temp_setup_by_index_t usb_temp_setup_by_index_w;
+#if USB_HAVE_COMPAT_LINUX
+static usb_linux_free_device_t usb_linux_free_device_w;
+#endif
static usb_temp_unsetup_t usb_temp_unsetup_w;
static usb_test_quirk_t usb_test_quirk_w;
static usb_quirk_ioctl_t usb_quirk_ioctl_w;
@@ -66,6 +69,9 @@ static usb_quirk_ioctl_t usb_quirk_ioctl_w;
/* global variables */
usb_handle_req_t *usb_temp_get_desc_p = &usb_temp_get_desc_w;
usb_temp_setup_by_index_t *usb_temp_setup_by_index_p = &usb_temp_setup_by_index_w;
+#if USB_HAVE_COMPAT_LINUX
+usb_linux_free_device_t *usb_linux_free_device_p = &usb_linux_free_device_w;
+#endif
usb_temp_unsetup_t *usb_temp_unsetup_p = &usb_temp_unsetup_w;
usb_test_quirk_t *usb_test_quirk_p = &usb_test_quirk_w;
usb_quirk_ioctl_t *usb_quirk_ioctl_p = &usb_quirk_ioctl_w;
@@ -103,6 +109,14 @@ usb_temp_unsetup_w(struct usb_device *udev)
udev->usb_template_ptr = NULL;
}
+#if USB_HAVE_COMPAT_LINUX
+static void
+usb_linux_free_device_w(struct usb_device *udev)
+{
+ /* NOP */
+}
+#endif
+
void
usb_quirk_unload(void *arg)
{
@@ -147,3 +161,19 @@ usb_bus_unload(void *arg)
pause("WAIT", hz);
}
+
+#if USB_HAVE_COMPAT_LINUX
+void
+usb_linux_unload(void *arg)
+{
+ /* reset function pointers */
+
+ usb_linux_free_device_p = &usb_linux_free_device_w;
+
+ /* wait for CPU to exit the loaded functions, if any */
+
+ /* XXX this is a tradeoff */
+
+ pause("WAIT", hz);
+}
+#endif
diff --git a/sys/dev/usb/usb_dynamic.h b/sys/dev/usb/usb_dynamic.h
index 5684942..e52c46f 100644
--- a/sys/dev/usb/usb_dynamic.h
+++ b/sys/dev/usb/usb_dynamic.h
@@ -42,11 +42,13 @@ typedef uint8_t (usb_test_quirk_t)(const struct usbd_lookup_info *info,
typedef int (usb_quirk_ioctl_t)(unsigned long cmd, caddr_t data,
int fflag, struct thread *td);
typedef void (usb_temp_unsetup_t)(struct usb_device *udev);
+typedef void (usb_linux_free_device_t)(struct usb_device *udev);
/* global function pointers */
extern usb_handle_req_t *usb_temp_get_desc_p;
extern usb_temp_setup_by_index_t *usb_temp_setup_by_index_p;
+extern usb_linux_free_device_t *usb_linux_free_device_p;
extern usb_temp_unsetup_t *usb_temp_unsetup_p;
extern usb_test_quirk_t *usb_test_quirk_p;
extern usb_quirk_ioctl_t *usb_quirk_ioctl_p;
@@ -54,6 +56,7 @@ extern devclass_t usb_devclass_ptr;
/* function prototypes */
+void usb_linux_unload(void *);
void usb_temp_unload(void *);
void usb_quirk_unload(void *);
void usb_bus_unload(void *);
diff --git a/sys/dev/usb/wlan/if_run.c b/sys/dev/usb/wlan/if_run.c
index 3a8c020..d5b5288 100644
--- a/sys/dev/usb/wlan/if_run.c
+++ b/sys/dev/usb/wlan/if_run.c
@@ -2847,13 +2847,6 @@ run_rx_frame(struct run_softc *sc, struct mbuf *m, uint32_t dmalen)
m->m_pkthdr.len = m->m_len = len;
- if (ni != NULL) {
- (void)ieee80211_input(ni, m, rssi, nf);
- ieee80211_free_node(ni);
- } else {
- (void)ieee80211_input_all(ic, m, rssi, nf);
- }
-
if (__predict_false(ieee80211_radiotap_active(ic))) {
struct run_rx_radiotap_header *tap = &sc->sc_rxtap;
uint16_t phy;
@@ -2892,6 +2885,13 @@ run_rx_frame(struct run_softc *sc, struct mbuf *m, uint32_t dmalen)
break;
}
}
+
+ if (ni != NULL) {
+ (void)ieee80211_input(ni, m, rssi, nf);
+ ieee80211_free_node(ni);
+ } else {
+ (void)ieee80211_input_all(ic, m, rssi, nf);
+ }
}
static void
@@ -3030,20 +3030,11 @@ static void
run_tx_free(struct run_endpoint_queue *pq,
struct run_tx_data *data, int txerr)
{
- if (data->m != NULL) {
- if (data->m->m_flags & M_TXCB)
- ieee80211_process_callback(data->ni, data->m,
- txerr ? ETIMEDOUT : 0);
- m_freem(data->m);
- data->m = NULL;
-
- if (data->ni == NULL) {
- DPRINTF("no node\n");
- } else {
- ieee80211_free_node(data->ni);
- data->ni = NULL;
- }
- }
+
+ ieee80211_tx_complete(data->ni, data->m, txerr);
+
+ data->m = NULL;
+ data->ni = NULL;
STAILQ_INSERT_TAIL(&pq->tx_fh, data, next);
pq->tx_nfree++;
diff --git a/sys/dev/usb/wlan/if_urtwn.c b/sys/dev/usb/wlan/if_urtwn.c
index 5aca1a4..0cd1cf3 100644
--- a/sys/dev/usb/wlan/if_urtwn.c
+++ b/sys/dev/usb/wlan/if_urtwn.c
@@ -86,7 +86,6 @@ SYSCTL_INT(_hw_usb_urtwn, OID_AUTO, debug, CTLFLAG_RWTUN, &urtwn_debug, 0,
"Debug level");
#endif
-#define URTWN_RSSI(r) (r) - 110
#define IEEE80211_HAS_ADDR4(wh) IEEE80211_IS_DSTODS(wh)
/* various supported device vendors/products */
@@ -184,7 +183,8 @@ static struct mbuf * urtwn_rx_frame(struct urtwn_softc *, uint8_t *, int,
int *);
static struct mbuf * urtwn_rxeof(struct usb_xfer *, struct urtwn_data *,
int *, int8_t *);
-static void urtwn_txeof(struct usb_xfer *, struct urtwn_data *);
+static void urtwn_txeof(struct urtwn_softc *, struct urtwn_data *,
+ int);
static int urtwn_alloc_list(struct urtwn_softc *,
struct urtwn_data[], int, int);
static int urtwn_alloc_rx_list(struct urtwn_softc *);
@@ -223,6 +223,7 @@ static void urtwn_r88e_read_rom(struct urtwn_softc *);
static int urtwn_ra_init(struct urtwn_softc *);
static void urtwn_tsf_sync_enable(struct urtwn_softc *);
static void urtwn_set_led(struct urtwn_softc *, int, int);
+static void urtwn_set_mode(struct urtwn_softc *, uint8_t);
static int urtwn_newstate(struct ieee80211vap *,
enum ieee80211_state, int);
static void urtwn_watchdog(void *);
@@ -263,6 +264,8 @@ static void urtwn_r88e_get_txpower(struct urtwn_softc *, int,
static void urtwn_set_txpower(struct urtwn_softc *,
struct ieee80211_channel *,
struct ieee80211_channel *);
+static void urtwn_set_rx_bssid_all(struct urtwn_softc *, int);
+static void urtwn_set_gain(struct urtwn_softc *, uint8_t);
static void urtwn_scan_start(struct ieee80211com *);
static void urtwn_scan_end(struct ieee80211com *);
static void urtwn_set_channel(struct ieee80211com *);
@@ -625,7 +628,8 @@ urtwn_rx_frame(struct urtwn_softc *sc, uint8_t *buf, int pktlen, int *rssi_p)
counter_u64_add(ic->ic_ierrors, 1);
return (NULL);
}
- if (pktlen < sizeof(*wh) || pktlen > MCLBYTES) {
+ if (pktlen < sizeof(struct ieee80211_frame_ack) ||
+ pktlen > MCLBYTES) {
counter_u64_add(ic->ic_ierrors, 1);
return (NULL);
}
@@ -641,11 +645,6 @@ urtwn_rx_frame(struct urtwn_softc *sc, uint8_t *buf, int pktlen, int *rssi_p)
rssi = urtwn_get_rssi(sc, rate, &stat[1]);
/* Update our average RSSI. */
urtwn_update_avgrssi(sc, rate, rssi);
- /*
- * Convert the RSSI to a range that will be accepted
- * by net80211.
- */
- rssi = URTWN_RSSI(rssi);
}
m = m_getcl(M_NOWAIT, MT_DATA, M_PKTHDR);
@@ -665,27 +664,13 @@ urtwn_rx_frame(struct urtwn_softc *sc, uint8_t *buf, int pktlen, int *rssi_p)
tap->wr_flags = 0;
/* Map HW rate index to 802.11 rate. */
if (!(rxdw3 & R92C_RXDW3_HT)) {
- switch (rate) {
- /* CCK. */
- case 0: tap->wr_rate = 2; break;
- case 1: tap->wr_rate = 4; break;
- case 2: tap->wr_rate = 11; break;
- case 3: tap->wr_rate = 22; break;
- /* OFDM. */
- case 4: tap->wr_rate = 12; break;
- case 5: tap->wr_rate = 18; break;
- case 6: tap->wr_rate = 24; break;
- case 7: tap->wr_rate = 36; break;
- case 8: tap->wr_rate = 48; break;
- case 9: tap->wr_rate = 72; break;
- case 10: tap->wr_rate = 96; break;
- case 11: tap->wr_rate = 108; break;
- }
+ tap->wr_rate = ridx2rate[rate];
} else if (rate >= 12) { /* MCS0~15. */
/* Bit 7 set means HT MCS instead of rate. */
tap->wr_rate = 0x80 | (rate - 12);
}
tap->wr_dbm_antsignal = rssi;
+ tap->wr_dbm_antnoise = URTWN_NOISE_FLOOR;
tap->wr_chan_freq = htole16(ic->ic_curchan->ic_freq);
tap->wr_chan_flags = htole16(ic->ic_curchan->ic_flags);
}
@@ -762,7 +747,7 @@ urtwn_bulk_rx_callback(struct usb_xfer *xfer, usb_error_t error)
{
struct urtwn_softc *sc = usbd_xfer_softc(xfer);
struct ieee80211com *ic = &sc->sc_ic;
- struct ieee80211_frame *wh;
+ struct ieee80211_frame_min *wh;
struct ieee80211_node *ni;
struct mbuf *m = NULL, *next;
struct urtwn_data *data;
@@ -802,15 +787,19 @@ tr_setup:
while (m != NULL) {
next = m->m_next;
m->m_next = NULL;
- wh = mtod(m, struct ieee80211_frame *);
- ni = ieee80211_find_rxnode(ic,
- (struct ieee80211_frame_min *)wh);
+ wh = mtod(m, struct ieee80211_frame_min *);
+ if (m->m_len >= sizeof(*wh))
+ ni = ieee80211_find_rxnode(ic, wh);
+ else
+ ni = NULL;
nf = URTWN_NOISE_FLOOR;
if (ni != NULL) {
- (void)ieee80211_input(ni, m, rssi, nf);
+ (void)ieee80211_input(ni, m, rssi - nf, nf);
ieee80211_free_node(ni);
- } else
- (void)ieee80211_input_all(ic, m, rssi, nf);
+ } else {
+ (void)ieee80211_input_all(ic, m, rssi - nf,
+ nf);
+ }
m = next;
}
URTWN_LOCK(sc);
@@ -832,16 +821,19 @@ tr_setup:
}
static void
-urtwn_txeof(struct usb_xfer *xfer, struct urtwn_data *data)
+urtwn_txeof(struct urtwn_softc *sc, struct urtwn_data *data, int status)
{
- struct urtwn_softc *sc = usbd_xfer_softc(xfer);
URTWN_ASSERT_LOCKED(sc);
- /* XXX status? */
- ieee80211_tx_complete(data->ni, data->m, 0);
+
+ ieee80211_tx_complete(data->ni, data->m, status);
+
data->ni = NULL;
data->m = NULL;
+
sc->sc_txtimer = 0;
+
+ STAILQ_INSERT_TAIL(&sc->sc_tx_inactive, data, next);
}
static int
@@ -954,8 +946,7 @@ urtwn_bulk_tx_callback(struct usb_xfer *xfer, usb_error_t error)
if (data == NULL)
goto tr_setup;
STAILQ_REMOVE_HEAD(&sc->sc_tx_active, next);
- urtwn_txeof(xfer, data);
- STAILQ_INSERT_TAIL(&sc->sc_tx_inactive, data, next);
+ urtwn_txeof(sc, data, 0);
/* FALLTHROUGH */
case USB_ST_SETUP:
tr_setup:
@@ -973,12 +964,8 @@ tr_setup:
data = STAILQ_FIRST(&sc->sc_tx_active);
if (data == NULL)
goto tr_setup;
- if (data->ni != NULL) {
- if_inc_counter(data->ni->ni_vap->iv_ifp,
- IFCOUNTER_OERRORS, 1);
- ieee80211_free_node(data->ni);
- data->ni = NULL;
- }
+ STAILQ_REMOVE_HEAD(&sc->sc_tx_active, next);
+ urtwn_txeof(sc, data, 1);
if (error != USB_ERR_CANCELLED) {
usbd_xfer_set_stall(xfer);
goto tr_setup;
@@ -1411,8 +1398,6 @@ urtwn_r88e_read_rom(struct urtwn_softc *sc)
static int
urtwn_ra_init(struct urtwn_softc *sc)
{
- static const uint8_t map[] =
- { 2, 4, 11, 22, 12, 18, 24, 36, 48, 72, 96, 108 };
struct ieee80211com *ic = &sc->sc_ic;
struct ieee80211vap *vap = TAILQ_FIRST(&ic->ic_vaps);
struct ieee80211_node *ni;
@@ -1430,10 +1415,11 @@ urtwn_ra_init(struct urtwn_softc *sc)
maxrate = maxbasicrate = 0;
for (i = 0; i < rs->rs_nrates; i++) {
/* Convert 802.11 rate to HW rate index. */
- for (j = 0; j < nitems(map); j++)
- if ((rs->rs_rates[i] & IEEE80211_RATE_VAL) == map[j])
+ for (j = 0; j < nitems(ridx2rate); j++)
+ if ((rs->rs_rates[i] & IEEE80211_RATE_VAL) ==
+ ridx2rate[j])
break;
- if (j == nitems(map)) /* Unknown rate, skip. */
+ if (j == nitems(ridx2rate)) /* Unknown rate, skip. */
continue;
rates |= 1 << j;
if (j > maxrate)
@@ -1542,6 +1528,16 @@ urtwn_set_led(struct urtwn_softc *sc, int led, int on)
}
}
+static void
+urtwn_set_mode(struct urtwn_softc *sc, uint8_t mode)
+{
+ uint8_t reg;
+
+ reg = urtwn_read_1(sc, R92C_MSR);
+ reg = (reg & ~R92C_MSR_MASK) | mode;
+ urtwn_write_1(sc, R92C_MSR, reg);
+}
+
static int
urtwn_newstate(struct ieee80211vap *vap, enum ieee80211_state nstate, int arg)
{
@@ -1550,7 +1546,6 @@ urtwn_newstate(struct ieee80211vap *vap, enum ieee80211_state nstate, int arg)
struct urtwn_softc *sc = ic->ic_softc;
struct ieee80211_node *ni;
enum ieee80211_state ostate;
- uint32_t reg;
ostate = vap->iv_state;
DPRINTF("%s -> %s\n", ieee80211_state_name[ostate],
@@ -1565,9 +1560,7 @@ urtwn_newstate(struct ieee80211vap *vap, enum ieee80211_state nstate, int arg)
urtwn_set_led(sc, URTWN_LED_LINK, 0);
/* Set media status to 'No Link'. */
- reg = urtwn_read_4(sc, R92C_CR);
- reg = RW(reg, R92C_CR_NETTYPE, R92C_CR_NETTYPE_NOLINK);
- urtwn_write_4(sc, R92C_CR, reg);
+ urtwn_set_mode(sc, R92C_MSR_NOLINK);
/* Stop Rx of data frames. */
urtwn_write_2(sc, R92C_RXFLTMAP2, 0);
@@ -1593,38 +1586,11 @@ urtwn_newstate(struct ieee80211vap *vap, enum ieee80211_state nstate, int arg)
urtwn_set_led(sc, URTWN_LED_LINK, 0);
break;
case IEEE80211_S_SCAN:
- if (ostate != IEEE80211_S_SCAN) {
- /* Allow Rx from any BSSID. */
- urtwn_write_4(sc, R92C_RCR,
- urtwn_read_4(sc, R92C_RCR) &
- ~(R92C_RCR_CBSSID_DATA | R92C_RCR_CBSSID_BCN));
-
- /* Set gain for scanning. */
- reg = urtwn_bb_read(sc, R92C_OFDM0_AGCCORE1(0));
- reg = RW(reg, R92C_OFDM0_AGCCORE1_GAIN, 0x20);
- urtwn_bb_write(sc, R92C_OFDM0_AGCCORE1(0), reg);
-
- if (!(sc->chip & URTWN_CHIP_88E)) {
- reg = urtwn_bb_read(sc, R92C_OFDM0_AGCCORE1(1));
- reg = RW(reg, R92C_OFDM0_AGCCORE1_GAIN, 0x20);
- urtwn_bb_write(sc, R92C_OFDM0_AGCCORE1(1), reg);
- }
- }
/* Pause AC Tx queues. */
urtwn_write_1(sc, R92C_TXPAUSE,
urtwn_read_1(sc, R92C_TXPAUSE) | 0x0f);
break;
case IEEE80211_S_AUTH:
- /* Set initial gain under link. */
- reg = urtwn_bb_read(sc, R92C_OFDM0_AGCCORE1(0));
- reg = RW(reg, R92C_OFDM0_AGCCORE1_GAIN, 0x32);
- urtwn_bb_write(sc, R92C_OFDM0_AGCCORE1(0), reg);
-
- if (!(sc->chip & URTWN_CHIP_88E)) {
- reg = urtwn_bb_read(sc, R92C_OFDM0_AGCCORE1(1));
- reg = RW(reg, R92C_OFDM0_AGCCORE1_GAIN, 0x32);
- urtwn_bb_write(sc, R92C_OFDM0_AGCCORE1(1), reg);
- }
urtwn_set_chan(sc, ic->ic_curchan, NULL);
break;
case IEEE80211_S_RUN:
@@ -1652,9 +1618,7 @@ urtwn_newstate(struct ieee80211vap *vap, enum ieee80211_state nstate, int arg)
ni = ieee80211_ref_node(vap->iv_bss);
/* Set media status to 'Associated'. */
- reg = urtwn_read_4(sc, R92C_CR);
- reg = RW(reg, R92C_CR_NETTYPE, R92C_CR_NETTYPE_INFRA);
- urtwn_write_4(sc, R92C_CR, reg);
+ urtwn_set_mode(sc, R92C_MSR_INFRA);
/* Set BSSID. */
urtwn_write_4(sc, R92C_BSSID + 0, LE_READ_4(&ni->ni_bssid[0]));
@@ -1740,7 +1704,7 @@ urtwn_update_avgrssi(struct urtwn_softc *sc, int rate, int8_t rssi)
else
pwdb = 100 + rssi;
if (!(sc->chip & URTWN_CHIP_88E)) {
- if (rate <= 3) {
+ if (rate <= URTWN_RIDX_CCK11) {
/* CCK gain is smaller than OFDM/MCS gain. */
pwdb += 6;
if (pwdb > 100)
@@ -1773,7 +1737,7 @@ urtwn_get_rssi(struct urtwn_softc *sc, int rate, void *physt)
uint8_t rpt;
int8_t rssi;
- if (rate <= 3) {
+ if (rate <= URTWN_RIDX_CCK11) {
cck = (struct r92c_rx_cck *)physt;
if (sc->sc_flags & URTWN_FLAG_CCK_HIPWR) {
rpt = (cck->agc_rpt >> 5) & 0x3;
@@ -1799,7 +1763,7 @@ urtwn_r88e_get_rssi(struct urtwn_softc *sc, int rate, void *physt)
int8_t rssi;
rssi = 0;
- if (rate <= 3) {
+ if (rate <= URTWN_RIDX_CCK11) {
cck = (struct r88e_rx_cck *)physt;
cck_agc_rpt = cck->agc_rpt;
lna_idx = (cck_agc_rpt & 0xe0) >> 5;
@@ -1932,10 +1896,12 @@ urtwn_tx_start(struct urtwn_softc *sc, struct ieee80211_node *ni,
}
}
/* Send RTS at OFDM24. */
- txd->txdw4 |= htole32(SM(R92C_TXDW4_RTSRATE, 8));
+ txd->txdw4 |= htole32(SM(R92C_TXDW4_RTSRATE,
+ URTWN_RIDX_OFDM24));
txd->txdw5 |= htole32(0x0001ff00);
/* Send data at OFDM54. */
- txd->txdw5 |= htole32(SM(R92C_TXDW5_DATARATE, 11));
+ txd->txdw5 |= htole32(SM(R92C_TXDW5_DATARATE,
+ URTWN_RIDX_OFDM54));
} else {
txd->txdw1 |= htole32(
SM(R92C_TXDW1_MACID, 0) |
@@ -1944,7 +1910,8 @@ urtwn_tx_start(struct urtwn_softc *sc, struct ieee80211_node *ni,
/* Force CCK1. */
txd->txdw4 |= htole32(R92C_TXDW4_DRVRATE);
- txd->txdw5 |= htole32(SM(R92C_TXDW5_DATARATE, 0));
+ txd->txdw5 |= htole32(SM(R92C_TXDW5_DATARATE,
+ URTWN_RIDX_CCK1));
}
/* Set sequence number (already little endian). */
txd->txdseq |= *(uint16_t *)wh->i_seq;
@@ -2930,10 +2897,10 @@ urtwn_get_txpower(struct urtwn_softc *sc, int chain,
memset(power, 0, URTWN_RIDX_COUNT * sizeof(power[0]));
if (sc->regulatory == 0) {
- for (ridx = 0; ridx <= 3; ridx++)
+ for (ridx = URTWN_RIDX_CCK1; ridx <= URTWN_RIDX_CCK11; ridx++)
power[ridx] = base->pwr[0][ridx];
}
- for (ridx = 4; ridx < URTWN_RIDX_COUNT; ridx++) {
+ for (ridx = URTWN_RIDX_OFDM6; ridx < URTWN_RIDX_COUNT; ridx++) {
if (sc->regulatory == 3) {
power[ridx] = base->pwr[0][ridx];
/* Apply vendor limits. */
@@ -2953,7 +2920,7 @@ urtwn_get_txpower(struct urtwn_softc *sc, int chain,
/* Compute per-CCK rate Tx power. */
cckpow = rom->cck_tx_pwr[chain][group];
- for (ridx = 0; ridx <= 3; ridx++) {
+ for (ridx = URTWN_RIDX_CCK1; ridx <= URTWN_RIDX_CCK11; ridx++) {
power[ridx] += cckpow;
if (power[ridx] > R92C_MAX_TX_PWR)
power[ridx] = R92C_MAX_TX_PWR;
@@ -2971,7 +2938,7 @@ urtwn_get_txpower(struct urtwn_softc *sc, int chain,
diff = rom->ofdm_tx_pwr_diff[group];
diff = (diff >> (chain * 4)) & 0xf;
ofdmpow = htpow + diff; /* HT->OFDM correction. */
- for (ridx = 4; ridx <= 11; ridx++) {
+ for (ridx = URTWN_RIDX_OFDM6; ridx <= URTWN_RIDX_OFDM54; ridx++) {
power[ridx] += ofdmpow;
if (power[ridx] > R92C_MAX_TX_PWR)
power[ridx] = R92C_MAX_TX_PWR;
@@ -2992,7 +2959,7 @@ urtwn_get_txpower(struct urtwn_softc *sc, int chain,
if (urtwn_debug >= 4) {
/* Dump per-rate Tx power values. */
printf("Tx power for chain %d:\n", chain);
- for (ridx = 0; ridx < URTWN_RIDX_COUNT; ridx++)
+ for (ridx = URTWN_RIDX_CCK1; ridx < URTWN_RIDX_COUNT; ridx++)
printf("Rate %d = %u\n", ridx, power[ridx]);
}
#endif
@@ -3028,10 +2995,10 @@ urtwn_r88e_get_txpower(struct urtwn_softc *sc, int chain,
memset(power, 0, URTWN_RIDX_COUNT * sizeof(power[0]));
if (sc->regulatory == 0) {
- for (ridx = 0; ridx <= 3; ridx++)
+ for (ridx = URTWN_RIDX_CCK1; ridx <= URTWN_RIDX_CCK11; ridx++)
power[ridx] = base->pwr[0][ridx];
}
- for (ridx = 4; ridx < URTWN_RIDX_COUNT; ridx++) {
+ for (ridx = URTWN_RIDX_OFDM6; ridx < URTWN_RIDX_COUNT; ridx++) {
if (sc->regulatory == 3)
power[ridx] = base->pwr[0][ridx];
else if (sc->regulatory == 1) {
@@ -3043,7 +3010,7 @@ urtwn_r88e_get_txpower(struct urtwn_softc *sc, int chain,
/* Compute per-CCK rate Tx power. */
cckpow = sc->cck_tx_pwr[group];
- for (ridx = 0; ridx <= 3; ridx++) {
+ for (ridx = URTWN_RIDX_CCK1; ridx <= URTWN_RIDX_CCK11; ridx++) {
power[ridx] += cckpow;
if (power[ridx] > R92C_MAX_TX_PWR)
power[ridx] = R92C_MAX_TX_PWR;
@@ -3053,7 +3020,7 @@ urtwn_r88e_get_txpower(struct urtwn_softc *sc, int chain,
/* Compute per-OFDM rate Tx power. */
ofdmpow = htpow + sc->ofdm_tx_pwr_diff;
- for (ridx = 4; ridx <= 11; ridx++) {
+ for (ridx = URTWN_RIDX_OFDM6; ridx <= URTWN_RIDX_OFDM54; ridx++) {
power[ridx] += ofdmpow;
if (power[ridx] > R92C_MAX_TX_PWR)
power[ridx] = R92C_MAX_TX_PWR;
@@ -3086,15 +3053,58 @@ urtwn_set_txpower(struct urtwn_softc *sc, struct ieee80211_channel *c,
}
static void
+urtwn_set_rx_bssid_all(struct urtwn_softc *sc, int enable)
+{
+ uint32_t reg;
+
+ reg = urtwn_read_4(sc, R92C_RCR);
+ if (enable)
+ reg &= ~R92C_RCR_CBSSID_BCN;
+ else
+ reg |= R92C_RCR_CBSSID_BCN;
+ urtwn_write_4(sc, R92C_RCR, reg);
+}
+
+static void
+urtwn_set_gain(struct urtwn_softc *sc, uint8_t gain)
+{
+ uint32_t reg;
+
+ reg = urtwn_bb_read(sc, R92C_OFDM0_AGCCORE1(0));
+ reg = RW(reg, R92C_OFDM0_AGCCORE1_GAIN, gain);
+ urtwn_bb_write(sc, R92C_OFDM0_AGCCORE1(0), reg);
+
+ if (!(sc->chip & URTWN_CHIP_88E)) {
+ reg = urtwn_bb_read(sc, R92C_OFDM0_AGCCORE1(1));
+ reg = RW(reg, R92C_OFDM0_AGCCORE1_GAIN, gain);
+ urtwn_bb_write(sc, R92C_OFDM0_AGCCORE1(1), reg);
+ }
+}
+
+static void
urtwn_scan_start(struct ieee80211com *ic)
{
- /* XXX do nothing? */
+ struct urtwn_softc *sc = ic->ic_softc;
+
+ URTWN_LOCK(sc);
+ /* Receive beacons / probe responses from any BSSID. */
+ urtwn_set_rx_bssid_all(sc, 1);
+ /* Set gain for scanning. */
+ urtwn_set_gain(sc, 0x20);
+ URTWN_UNLOCK(sc);
}
static void
urtwn_scan_end(struct ieee80211com *ic)
{
- /* XXX do nothing? */
+ struct urtwn_softc *sc = ic->ic_softc;
+
+ URTWN_LOCK(sc);
+ /* Restore limitations. */
+ urtwn_set_rx_bssid_all(sc, 0);
+ /* Set gain under link. */
+ urtwn_set_gain(sc, 0x32);
+ URTWN_UNLOCK(sc);
}
static void
@@ -3311,9 +3321,7 @@ urtwn_init(struct urtwn_softc *sc)
urtwn_write_region_1(sc, R92C_MACID, macaddr, IEEE80211_ADDR_LEN);
/* Set initial network type. */
- reg = urtwn_read_4(sc, R92C_CR);
- reg = RW(reg, R92C_CR_NETTYPE, R92C_CR_NETTYPE_INFRA);
- urtwn_write_4(sc, R92C_CR, reg);
+ urtwn_set_mode(sc, R92C_MSR_INFRA);
urtwn_rxfilter_init(sc);
diff --git a/sys/dev/usb/wlan/if_urtwnreg.h b/sys/dev/usb/wlan/if_urtwnreg.h
index 628b50e..af39e09 100644
--- a/sys/dev/usb/wlan/if_urtwnreg.h
+++ b/sys/dev/usb/wlan/if_urtwnreg.h
@@ -96,6 +96,7 @@
#define R92C_SYS_CFG 0x0f0
/* MAC General Configuration. */
#define R92C_CR 0x100
+#define R92C_MSR 0x102
#define R92C_PBP 0x104
#define R92C_TRXDMA_CTRL 0x10c
#define R92C_TRXFF_BNDY 0x114
@@ -377,22 +378,23 @@
#define R92C_SYS_CFG_TYPE_92C 0x08000000
/* Bits for R92C_CR. */
-#define R92C_CR_HCI_TXDMA_EN 0x00000001
-#define R92C_CR_HCI_RXDMA_EN 0x00000002
-#define R92C_CR_TXDMA_EN 0x00000004
-#define R92C_CR_RXDMA_EN 0x00000008
-#define R92C_CR_PROTOCOL_EN 0x00000010
-#define R92C_CR_SCHEDULE_EN 0x00000020
-#define R92C_CR_MACTXEN 0x00000040
-#define R92C_CR_MACRXEN 0x00000080
-#define R92C_CR_ENSEC 0x00000200
-#define R92C_CR_CALTMR_EN 0x00000400
-#define R92C_CR_NETTYPE_S 16
-#define R92C_CR_NETTYPE_M 0x00030000
-#define R92C_CR_NETTYPE_NOLINK 0
-#define R92C_CR_NETTYPE_ADHOC 1
-#define R92C_CR_NETTYPE_INFRA 2
-#define R92C_CR_NETTYPE_AP 3
+#define R92C_CR_HCI_TXDMA_EN 0x0001
+#define R92C_CR_HCI_RXDMA_EN 0x0002
+#define R92C_CR_TXDMA_EN 0x0004
+#define R92C_CR_RXDMA_EN 0x0008
+#define R92C_CR_PROTOCOL_EN 0x0010
+#define R92C_CR_SCHEDULE_EN 0x0020
+#define R92C_CR_MACTXEN 0x0040
+#define R92C_CR_MACRXEN 0x0080
+#define R92C_CR_ENSEC 0x0200
+#define R92C_CR_CALTMR_EN 0x0400
+
+/* Bits for R92C_MSR. */
+#define R92C_MSR_NOLINK 0x00
+#define R92C_MSR_ADHOC 0x01
+#define R92C_MSR_INFRA 0x02
+#define R92C_MSR_AP 0x03
+#define R92C_MSR_MASK (R92C_MSR_AP)
/* Bits for R92C_PBP. */
#define R92C_PBP_PSRX_M 0x0f
@@ -975,22 +977,22 @@ struct r92c_rx_cck {
struct r88e_rx_cck {
uint8_t path_agc[2];
+ uint8_t chan;
+ uint8_t reserved1;
uint8_t sig_qual;
uint8_t agc_rpt;
uint8_t rpt_b;
- uint8_t reserved1;
+ uint8_t reserved2;
uint8_t noise_power;
uint8_t path_cfotail[2];
uint8_t pcts_mask[2];
uint8_t stream_rxevm[2];
uint8_t path_rxsnr[2];
uint8_t noise_power_db_lsb;
- uint8_t reserved2[3];
+ uint8_t reserved3[3];
uint8_t stream_csi[2];
uint8_t stream_target_csi[2];
uint8_t sig_evm;
- uint8_t reserved3;
- uint8_t reserved4;
} __packed;
/* Tx MAC descriptor. */
@@ -1060,6 +1062,19 @@ struct r92c_tx_desc {
} __packed __attribute__((aligned(4)));
+static const uint8_t ridx2rate[] =
+ { 2, 4, 11, 22, 12, 18, 24, 36, 48, 72, 96, 108 };
+
+/* HW rate indices. */
+#define URTWN_RIDX_CCK1 0
+#define URTWN_RIDX_CCK11 3
+#define URTWN_RIDX_OFDM6 4
+#define URTWN_RIDX_OFDM24 8
+#define URTWN_RIDX_OFDM54 11
+
+#define URTWN_RIDX_COUNT 28
+
+
/*
* MAC initialization values.
*/
diff --git a/sys/dev/usb/wlan/if_urtwnvar.h b/sys/dev/usb/wlan/if_urtwnvar.h
index 5186b38..f2426ff 100644
--- a/sys/dev/usb/wlan/if_urtwnvar.h
+++ b/sys/dev/usb/wlan/if_urtwnvar.h
@@ -26,8 +26,6 @@
#define URTWN_RX_DESC_SIZE (sizeof(struct r92c_rx_stat))
#define URTWN_TX_DESC_SIZE (sizeof(struct r92c_tx_desc))
-#define URTWN_RIDX_COUNT 28
-
#define URTWN_TX_TIMEOUT 5000 /* ms */
#define URTWN_LED_LINK 0
@@ -39,14 +37,16 @@ struct urtwn_rx_radiotap_header {
uint8_t wr_rate;
uint16_t wr_chan_freq;
uint16_t wr_chan_flags;
- uint8_t wr_dbm_antsignal;
+ int8_t wr_dbm_antsignal;
+ int8_t wr_dbm_antnoise;
} __packed __aligned(8);
#define URTWN_RX_RADIOTAP_PRESENT \
(1 << IEEE80211_RADIOTAP_FLAGS | \
1 << IEEE80211_RADIOTAP_RATE | \
1 << IEEE80211_RADIOTAP_CHANNEL | \
- 1 << IEEE80211_RADIOTAP_DBM_ANTSIGNAL)
+ 1 << IEEE80211_RADIOTAP_DBM_ANTSIGNAL | \
+ 1 << IEEE80211_RADIOTAP_DBM_ANTNOISE)
struct urtwn_tx_radiotap_header {
struct ieee80211_radiotap_header wt_ihdr;
diff --git a/sys/dev/wpi/if_wpi.c b/sys/dev/wpi/if_wpi.c
index 7932bce..ddf4a7d 100644
--- a/sys/dev/wpi/if_wpi.c
+++ b/sys/dev/wpi/if_wpi.c
@@ -918,7 +918,7 @@ wpi_dma_contig_alloc(struct wpi_softc *sc, struct wpi_dma_info *dma,
error = bus_dma_tag_create(bus_get_dma_tag(sc->sc_dev), alignment,
0, BUS_SPACE_MAXADDR_32BIT, BUS_SPACE_MAXADDR, NULL, NULL, size,
- 1, size, BUS_DMA_NOWAIT, NULL, NULL, &dma->tag);
+ 1, size, 0, NULL, NULL, &dma->tag);
if (error != 0)
goto fail;
@@ -1019,8 +1019,7 @@ wpi_alloc_rx_ring(struct wpi_softc *sc)
/* Create RX buffer DMA tag. */
error = bus_dma_tag_create(bus_get_dma_tag(sc->sc_dev), 1, 0,
BUS_SPACE_MAXADDR_32BIT, BUS_SPACE_MAXADDR, NULL, NULL,
- MJUMPAGESIZE, 1, MJUMPAGESIZE, BUS_DMA_NOWAIT, NULL, NULL,
- &ring->data_dmat);
+ MJUMPAGESIZE, 1, MJUMPAGESIZE, 0, NULL, NULL, &ring->data_dmat);
if (error != 0) {
device_printf(sc->sc_dev,
"%s: could not create RX buf DMA tag, error %d\n",
@@ -1203,8 +1202,7 @@ wpi_alloc_tx_ring(struct wpi_softc *sc, struct wpi_tx_ring *ring, uint8_t qid)
error = bus_dma_tag_create(bus_get_dma_tag(sc->sc_dev), 1, 0,
BUS_SPACE_MAXADDR_32BIT, BUS_SPACE_MAXADDR, NULL, NULL, MCLBYTES,
- WPI_MAX_SCATTER - 1, MCLBYTES, BUS_DMA_NOWAIT, NULL, NULL,
- &ring->data_dmat);
+ WPI_MAX_SCATTER - 1, MCLBYTES, 0, NULL, NULL, &ring->data_dmat);
if (error != 0) {
device_printf(sc->sc_dev,
"%s: could not create TX buf DMA tag, error %d\n",
diff --git a/sys/dev/wtap/if_wtap.c b/sys/dev/wtap/if_wtap.c
index 847ffcb..2c58ad9 100644
--- a/sys/dev/wtap/if_wtap.c
+++ b/sys/dev/wtap/if_wtap.c
@@ -527,15 +527,9 @@ wtap_rx_proc(void *arg, int npending)
/*
* Sending station is known, dispatch directly.
*/
-#if 0
- ieee80211_radiotap_rx(ni->ni_vap, m);
-#endif
type = ieee80211_input(ni, m, 1<<7, 10);
ieee80211_free_node(ni);
} else {
-#if 0
- ieee80211_radiotap_rx_all(ic, m);
-#endif
type = ieee80211_input_all(ic, m, 1<<7, 10);
}
diff --git a/sys/dev/xen/balloon/balloon.c b/sys/dev/xen/balloon/balloon.c
index 773644f..e54e39c 100644
--- a/sys/dev/xen/balloon/balloon.c
+++ b/sys/dev/xen/balloon/balloon.c
@@ -57,7 +57,7 @@ static MALLOC_DEFINE(M_BALLOON, "Balloon", "Xen Balloon Driver");
struct mtx balloon_mutex;
/* We increase/decrease in batches which fit in a page */
-static unsigned long frame_list[PAGE_SIZE / sizeof(unsigned long)];
+static xen_pfn_t frame_list[PAGE_SIZE / sizeof(xen_pfn_t)];
struct balloon_stats {
/* We aim for 'current allocation' == 'target allocation'. */
@@ -149,7 +149,7 @@ minimum_target(void)
static int
increase_reservation(unsigned long nr_pages)
{
- unsigned long pfn, i;
+ unsigned long i;
vm_page_t page;
long rc;
struct xen_memory_reservation reservation = {
@@ -195,7 +195,6 @@ increase_reservation(unsigned long nr_pages)
TAILQ_REMOVE(&ballooned_pages, page, plinks.q);
bs.balloon_low--;
- pfn = (VM_PAGE_TO_PHYS(page) >> PAGE_SHIFT);
KASSERT(xen_feature(XENFEAT_auto_translated_physmap),
("auto translated physmap but mapping is valid"));
@@ -211,7 +210,7 @@ increase_reservation(unsigned long nr_pages)
static int
decrease_reservation(unsigned long nr_pages)
{
- unsigned long pfn, i;
+ unsigned long i;
vm_page_t page;
int need_sleep = 0;
int ret;
@@ -246,8 +245,7 @@ decrease_reservation(unsigned long nr_pages)
pmap_zero_page(page);
}
- pfn = (VM_PAGE_TO_PHYS(page) >> PAGE_SHIFT);
- frame_list[i] = pfn;
+ frame_list[i] = (VM_PAGE_TO_PHYS(page) >> PAGE_SHIFT);
TAILQ_INSERT_HEAD(&ballooned_pages, page, plinks.q);
bs.balloon_low++;
diff --git a/sys/dev/xen/blkback/blkback.c b/sys/dev/xen/blkback/blkback.c
index 7913c43..a97314b 100644
--- a/sys/dev/xen/blkback/blkback.c
+++ b/sys/dev/xen/blkback/blkback.c
@@ -1741,7 +1741,7 @@ xbb_dispatch_io(struct xbb_softc *xbb, struct xbb_xen_reqlist *reqlist)
if (__predict_false(map->status != 0)) {
DPRINTF("invalid buffer -- could not remap "
"it (%d)\n", map->status);
- DPRINTF("Mapping(%d): Host Addr 0x%lx, flags "
+ DPRINTF("Mapping(%d): Host Addr 0x%"PRIx64", flags "
"0x%x ref 0x%x, dom %d\n", seg_idx,
map->host_addr, map->flags, map->ref,
map->dom);
diff --git a/sys/dev/xen/control/control.c b/sys/dev/xen/control/control.c
index 219a395..f2851ee 100644
--- a/sys/dev/xen/control/control.c
+++ b/sys/dev/xen/control/control.c
@@ -365,7 +365,7 @@ xctrl_probe(device_t dev)
{
device_set_desc(dev, "Xen Control Device");
- return (0);
+ return (BUS_PROBE_NOWILDCARD);
}
/**
diff --git a/sys/dev/xen/grant_table/grant_table.c b/sys/dev/xen/grant_table/grant_table.c
index 728d64d..87e5676 100644
--- a/sys/dev/xen/grant_table/grant_table.c
+++ b/sys/dev/xen/grant_table/grant_table.c
@@ -13,8 +13,6 @@
#include <sys/cdefs.h>
__FBSDID("$FreeBSD$");
-#include "opt_pmap.h"
-
#include <sys/param.h>
#include <sys/systm.h>
#include <sys/bus.h>
@@ -27,6 +25,7 @@ __FBSDID("$FreeBSD$");
#include <sys/limits.h>
#include <sys/rman.h>
#include <machine/resource.h>
+#include <machine/cpu.h>
#include <xen/xen-os.h>
#include <xen/hypervisor.h>
@@ -40,8 +39,6 @@ __FBSDID("$FreeBSD$");
#include <vm/vm_extern.h>
#include <vm/pmap.h>
-#define cmpxchg(a, b, c) atomic_cmpset_int((volatile u_int *)(a),(b),(c))
-
/* External tools reserve first few grant table entries. */
#define NR_RESERVED_ENTRIES 8
#define GREFS_PER_GRANT_FRAME (PAGE_SIZE / sizeof(grant_entry_t))
@@ -291,13 +288,13 @@ gnttab_end_foreign_transfer_ref(grant_ref_t ref)
while (!((flags = shared[ref].flags) & GTF_transfer_committed)) {
if ( synch_cmpxchg(&shared[ref].flags, flags, 0) == flags )
return (0);
- cpu_relax();
+ cpu_spinwait();
}
/* If a transfer is in progress then wait until it is completed. */
while (!(flags & GTF_transfer_completed)) {
flags = shared[ref].flags;
- cpu_relax();
+ cpu_spinwait();
}
/* Read the frame number /after/ reading completion status. */
diff --git a/sys/dev/xen/netback/netback.c b/sys/dev/xen/netback/netback.c
index c58b324..d19c2c0 100644
--- a/sys/dev/xen/netback/netback.c
+++ b/sys/dev/xen/netback/netback.c
@@ -524,13 +524,15 @@ xnb_dump_gnttab_copy(const struct gnttab_copy *entry)
if (entry->flags & GNTCOPY_dest_gref)
printf("gnttab dest ref=\t%u\n", entry->dest.u.ref);
else
- printf("gnttab dest gmfn=\t%lu\n", entry->dest.u.gmfn);
+ printf("gnttab dest gmfn=\t%"PRI_xen_pfn"\n",
+ entry->dest.u.gmfn);
printf("gnttab dest offset=\t%hu\n", entry->dest.offset);
printf("gnttab dest domid=\t%hu\n", entry->dest.domid);
if (entry->flags & GNTCOPY_source_gref)
printf("gnttab source ref=\t%u\n", entry->source.u.ref);
else
- printf("gnttab source gmfn=\t%lu\n", entry->source.u.gmfn);
+ printf("gnttab source gmfn=\t%"PRI_xen_pfn"\n",
+ entry->source.u.gmfn);
printf("gnttab source offset=\t%hu\n", entry->source.offset);
printf("gnttab source domid=\t%hu\n", entry->source.domid);
printf("gnttab len=\t%hu\n", entry->len);
diff --git a/sys/dev/xen/netfront/netfront.c b/sys/dev/xen/netfront/netfront.c
index 835c6ae..dd1015d 100644
--- a/sys/dev/xen/netfront/netfront.c
+++ b/sys/dev/xen/netfront/netfront.c
@@ -59,10 +59,8 @@ __FBSDID("$FreeBSD$");
#include <netinet/in.h>
#include <netinet/ip.h>
#include <netinet/if_ether.h>
-#if __FreeBSD_version >= 700000
#include <netinet/tcp.h>
#include <netinet/tcp_lro.h>
-#endif
#include <vm/vm.h>
#include <vm/pmap.h>
@@ -94,7 +92,6 @@ __FBSDID("$FreeBSD$");
#define NET_TX_RING_SIZE __RING_SIZE((netif_tx_sring_t *)0, PAGE_SIZE)
#define NET_RX_RING_SIZE __RING_SIZE((netif_rx_sring_t *)0, PAGE_SIZE)
-#if __FreeBSD_version >= 700000
/*
* Should the driver do LRO on the RX end
* this can be toggled on the fly, but the
@@ -103,24 +100,6 @@ __FBSDID("$FreeBSD$");
*/
static int xn_enable_lro = 1;
TUNABLE_INT("hw.xn.enable_lro", &xn_enable_lro);
-#else
-
-#define IFCAP_TSO4 0
-#define CSUM_TSO 0
-
-#endif
-
-#ifdef CONFIG_XEN
-static int MODPARM_rx_copy = 0;
-module_param_named(rx_copy, MODPARM_rx_copy, bool, 0);
-MODULE_PARM_DESC(rx_copy, "Copy packets from network card (rather than flip)");
-static int MODPARM_rx_flip = 0;
-module_param_named(rx_flip, MODPARM_rx_flip, bool, 0);
-MODULE_PARM_DESC(rx_flip, "Flip packets from network card (rather than copy)");
-#else
-static const int MODPARM_rx_copy = 1;
-static const int MODPARM_rx_flip = 0;
-#endif
/**
* \brief The maximum allowed data fragments in a single transmit
@@ -186,7 +165,7 @@ static void xn_free_tx_ring(struct netfront_info *);
static int xennet_get_responses(struct netfront_info *np,
struct netfront_rx_info *rinfo, RING_IDX rp, RING_IDX *cons,
- struct mbuf **list, int *pages_flipped_p);
+ struct mbuf **list);
#define virt_to_mfn(x) (vtophys(x) >> PAGE_SHIFT)
@@ -203,7 +182,7 @@ struct xn_chain_data {
struct mbuf *xn_rx_chain[NET_RX_RING_SIZE+1];
};
-struct net_device_stats
+struct netfront_stats
{
u_long rx_packets; /* total packets received */
u_long tx_packets; /* total packets transmitted */
@@ -211,38 +190,13 @@ struct net_device_stats
u_long tx_bytes; /* total bytes transmitted */
u_long rx_errors; /* bad packets received */
u_long tx_errors; /* packet transmit problems */
- u_long rx_dropped; /* no space in linux buffers */
- u_long tx_dropped; /* no space available in linux */
- u_long multicast; /* multicast packets received */
- u_long collisions;
-
- /* detailed rx_errors: */
- u_long rx_length_errors;
- u_long rx_over_errors; /* receiver ring buff overflow */
- u_long rx_crc_errors; /* recved pkt with crc error */
- u_long rx_frame_errors; /* recv'd frame alignment error */
- u_long rx_fifo_errors; /* recv'r fifo overrun */
- u_long rx_missed_errors; /* receiver missed packet */
-
- /* detailed tx_errors */
- u_long tx_aborted_errors;
- u_long tx_carrier_errors;
- u_long tx_fifo_errors;
- u_long tx_heartbeat_errors;
- u_long tx_window_errors;
-
- /* for cslip etc */
- u_long rx_compressed;
- u_long tx_compressed;
};
struct netfront_info {
struct ifnet *xn_ifp;
-#if __FreeBSD_version >= 700000
struct lro_ctrl xn_lro;
-#endif
- struct net_device_stats stats;
+ struct netfront_stats stats;
u_int tx_full;
netif_tx_front_ring_t tx;
@@ -253,10 +207,9 @@ struct netfront_info {
struct mtx sc_lock;
xen_intr_handle_t xen_intr_handle;
- u_int copying_receiver;
u_int carrier;
u_int maxfrags;
-
+
/* Receive-ring batched refills. */
#define RX_MIN_TARGET 32
#define RX_MAX_TARGET NET_RX_RING_SIZE
@@ -265,9 +218,9 @@ struct netfront_info {
int rx_target;
grant_ref_t gref_tx_head;
- grant_ref_t grant_tx_ref[NET_TX_RING_SIZE + 1];
+ grant_ref_t grant_tx_ref[NET_TX_RING_SIZE + 1];
grant_ref_t gref_rx_head;
- grant_ref_t grant_rx_ref[NET_TX_RING_SIZE + 1];
+ grant_ref_t grant_rx_ref[NET_TX_RING_SIZE + 1];
device_t xbdev;
int tx_ring_ref;
@@ -279,7 +232,7 @@ struct netfront_info {
int xn_if_flags;
struct callout xn_stat_ch;
- u_long rx_pfn_array[NET_RX_RING_SIZE];
+ xen_pfn_t rx_pfn_array[NET_RX_RING_SIZE];
struct ifmedia sc_media;
bool xn_resume;
@@ -288,26 +241,18 @@ struct netfront_info {
#define rx_mbufs xn_cdata.xn_rx_chain
#define tx_mbufs xn_cdata.xn_tx_chain
-#define XN_LOCK_INIT(_sc, _name) \
- mtx_init(&(_sc)->tx_lock, #_name"_tx", "network transmit lock", MTX_DEF); \
- mtx_init(&(_sc)->rx_lock, #_name"_rx", "network receive lock", MTX_DEF); \
- mtx_init(&(_sc)->sc_lock, #_name"_sc", "netfront softc lock", MTX_DEF)
-
#define XN_RX_LOCK(_sc) mtx_lock(&(_sc)->rx_lock)
#define XN_RX_UNLOCK(_sc) mtx_unlock(&(_sc)->rx_lock)
#define XN_TX_LOCK(_sc) mtx_lock(&(_sc)->tx_lock)
#define XN_TX_UNLOCK(_sc) mtx_unlock(&(_sc)->tx_lock)
-#define XN_LOCK(_sc) mtx_lock(&(_sc)->sc_lock);
-#define XN_UNLOCK(_sc) mtx_unlock(&(_sc)->sc_lock);
+#define XN_LOCK(_sc) mtx_lock(&(_sc)->sc_lock);
+#define XN_UNLOCK(_sc) mtx_unlock(&(_sc)->sc_lock);
-#define XN_LOCK_ASSERT(_sc) mtx_assert(&(_sc)->sc_lock, MA_OWNED);
-#define XN_RX_LOCK_ASSERT(_sc) mtx_assert(&(_sc)->rx_lock, MA_OWNED);
-#define XN_TX_LOCK_ASSERT(_sc) mtx_assert(&(_sc)->tx_lock, MA_OWNED);
-#define XN_LOCK_DESTROY(_sc) mtx_destroy(&(_sc)->rx_lock); \
- mtx_destroy(&(_sc)->tx_lock); \
- mtx_destroy(&(_sc)->sc_lock);
+#define XN_LOCK_ASSERT(_sc) mtx_assert(&(_sc)->sc_lock, MA_OWNED);
+#define XN_RX_LOCK_ASSERT(_sc) mtx_assert(&(_sc)->rx_lock, MA_OWNED);
+#define XN_TX_LOCK_ASSERT(_sc) mtx_assert(&(_sc)->tx_lock, MA_OWNED);
struct netfront_rx_info {
struct netif_rx_response rx;
@@ -389,7 +334,7 @@ xennet_get_rx_ref(struct netfront_info *np, RING_IDX ri)
* a preallocated array of length ETH_ALEN (as declared in linux/if_ether.h).
* Return 0 on success, or errno on error.
*/
-static int
+static int
xen_net_read_mac(device_t dev, uint8_t mac[])
{
int error, i;
@@ -441,7 +386,7 @@ xen_net_read_mac(device_t dev, uint8_t mac[])
* inform the backend of the appropriate details for those. Switch to
* Connected state.
*/
-static int
+static int
netfront_probe(device_t dev)
{
@@ -458,7 +403,7 @@ netfront_probe(device_t dev)
static int
netfront_attach(device_t dev)
-{
+{
int err;
err = create_netdev(dev);
@@ -467,12 +412,10 @@ netfront_attach(device_t dev)
return (err);
}
-#if __FreeBSD_version >= 700000
SYSCTL_ADD_INT(device_get_sysctl_ctx(dev),
SYSCTL_CHILDREN(device_get_sysctl_tree(dev)),
OID_AUTO, "enable_lro", CTLFLAG_RW,
&xn_enable_lro, 0, "Large Receive Offload");
-#endif
return (0);
}
@@ -507,7 +450,7 @@ netfront_resume(device_t dev)
}
/* Common code used when first setting up, and when resuming. */
-static int
+static int
talk_to_backend(device_t dev, struct netfront_info *info)
{
const char *message;
@@ -525,7 +468,7 @@ talk_to_backend(device_t dev, struct netfront_info *info)
err = setup_device(dev, info);
if (err)
goto out;
-
+
again:
err = xs_transaction_start(&xst);
if (err) {
@@ -551,8 +494,7 @@ talk_to_backend(device_t dev, struct netfront_info *info)
message = "writing event-channel";
goto abort_transaction;
}
- err = xs_printf(xst, node, "request-rx-copy", "%u",
- info->copying_receiver);
+ err = xs_printf(xst, node, "request-rx-copy", "%u", 1);
if (err) {
message = "writing request-rx-copy";
goto abort_transaction;
@@ -567,13 +509,11 @@ talk_to_backend(device_t dev, struct netfront_info *info)
message = "writing feature-sg";
goto abort_transaction;
}
-#if __FreeBSD_version >= 700000
err = xs_printf(xst, node, "feature-gso-tcpv4", "%d", 1);
if (err) {
message = "writing feature-gso-tcpv4";
goto abort_transaction;
}
-#endif
err = xs_transaction_end(xst, 0);
if (err) {
@@ -582,9 +522,9 @@ talk_to_backend(device_t dev, struct netfront_info *info)
xenbus_dev_fatal(dev, err, "completing transaction");
goto destroy_ring;
}
-
+
return 0;
-
+
abort_transaction:
xs_transaction_end(xst, 1);
xenbus_dev_fatal(dev, err, "%s", message);
@@ -594,7 +534,7 @@ talk_to_backend(device_t dev, struct netfront_info *info)
return err;
}
-static int
+static int
setup_device(device_t dev, struct netfront_info *info)
{
netif_tx_sring_t *txs;
@@ -642,7 +582,7 @@ setup_device(device_t dev, struct netfront_info *info)
}
return (0);
-
+
fail:
netif_free(info);
return (error);
@@ -658,7 +598,7 @@ netfront_send_fake_arp(device_t dev, struct netfront_info *info)
{
struct ifnet *ifp;
struct ifaddr *ifa;
-
+
ifp = info->xn_ifp;
TAILQ_FOREACH(ifa, &ifp->if_addrhead, ifa_link) {
if (ifa->ifa_addr->sa_family == AF_INET) {
@@ -675,7 +615,7 @@ static void
netfront_backend_changed(device_t dev, XenbusState newstate)
{
struct netfront_info *sc = device_get_softc(dev);
-
+
DPRINTK("newstate=%d\n", newstate);
switch (newstate) {
@@ -709,14 +649,14 @@ xn_free_rx_ring(struct netfront_info *sc)
{
#if 0
int i;
-
+
for (i = 0; i < NET_RX_RING_SIZE; i++) {
if (sc->xn_cdata.rx_mbufs[i] != NULL) {
m_freem(sc->rx_mbufs[i]);
sc->rx_mbufs[i] = NULL;
}
}
-
+
sc->rx.rsp_cons = 0;
sc->xn_rx_if->req_prod = 0;
sc->xn_rx_if->event = sc->rx.rsp_cons ;
@@ -728,14 +668,14 @@ xn_free_tx_ring(struct netfront_info *sc)
{
#if 0
int i;
-
+
for (i = 0; i < NET_TX_RING_SIZE; i++) {
if (sc->tx_mbufs[i] != NULL) {
m_freem(sc->tx_mbufs[i]);
sc->xn_cdata.xn_tx_chain[i] = NULL;
}
}
-
+
return;
#endif
}
@@ -792,18 +732,16 @@ network_alloc_rx_buffers(struct netfront_info *sc)
struct mbuf *m_new;
int i, batch_target, notify;
RING_IDX req_prod;
- struct xen_memory_reservation reservation;
grant_ref_t ref;
- int nr_flips;
netif_rx_request_t *req;
vm_offset_t vaddr;
u_long pfn;
-
+
req_prod = sc->rx.req_prod_pvt;
if (__predict_false(sc->carrier == 0))
return;
-
+
/*
* Allocate mbufs greedily, even though we batch updates to the
* receive ring. This creates a less bursty demand on the memory
@@ -825,11 +763,11 @@ network_alloc_rx_buffers(struct netfront_info *sc)
break;
}
m_new->m_len = m_new->m_pkthdr.len = MJUMPAGESIZE;
-
+
/* queue the mbufs allocated */
(void )mbufq_enqueue(&sc->xn_rx_batch, m_new);
}
-
+
/*
* If we've allocated at least half of our target number of entries,
* submit them to the backend - we have enough to make the overhead
@@ -846,7 +784,7 @@ network_alloc_rx_buffers(struct netfront_info *sc)
* Double floating fill target if we risked having the backend
* run out of empty buffers for receive traffic. We define "running
* low" as having less than a fourth of our target buffers free
- * at the time we refilled the queue.
+ * at the time we refilled the queue.
*/
if ((req_prod - sc->rx.sring->rsp_prod) < (sc->rx_target / 4)) {
sc->rx_target *= 2;
@@ -855,7 +793,7 @@ network_alloc_rx_buffers(struct netfront_info *sc)
}
refill:
- for (nr_flips = i = 0; ; i++) {
+ for (i = 0; ; i++) {
if ((m_new = mbufq_dequeue(&sc->xn_rx_batch)) == NULL)
break;
@@ -876,43 +814,22 @@ refill:
pfn = vtophys(vaddr) >> PAGE_SHIFT;
req = RING_GET_REQUEST(&sc->rx, req_prod + i);
- if (sc->copying_receiver == 0) {
- gnttab_grant_foreign_transfer_ref(ref,
- otherend_id, pfn);
- sc->rx_pfn_array[nr_flips] = pfn;
- nr_flips++;
- } else {
- gnttab_grant_foreign_access_ref(ref,
- otherend_id,
- pfn, 0);
- }
+ gnttab_grant_foreign_access_ref(ref, otherend_id, pfn, 0);
req->id = id;
req->gref = ref;
-
+
sc->rx_pfn_array[i] =
vtophys(mtod(m_new,vm_offset_t)) >> PAGE_SHIFT;
- }
-
+ }
+
KASSERT(i, ("no mbufs processed")); /* should have returned earlier */
KASSERT(mbufq_len(&sc->xn_rx_batch) == 0, ("not all mbufs processed"));
/*
* We may have allocated buffers which have entries outstanding
* in the page * update queue -- make sure we flush those first!
*/
- if (nr_flips != 0) {
-#ifdef notyet
- /* Tell the ballon driver what is going on. */
- balloon_update_driver_allowance(i);
-#endif
- set_xen_guest_handle(reservation.extent_start, sc->rx_pfn_array);
- reservation.nr_extents = i;
- reservation.extent_order = 0;
- reservation.address_bits = 0;
- reservation.domid = DOMID_SELF;
- } else {
- wmb();
- }
-
+ wmb();
+
/* Above is a suitable barrier to ensure backend will see requests. */
sc->rx.req_prod_pvt = req_prod + i;
push:
@@ -925,7 +842,7 @@ static void
xn_rxeof(struct netfront_info *np)
{
struct ifnet *ifp;
-#if __FreeBSD_version >= 700000 && (defined(INET) || defined(INET6))
+#if (defined(INET) || defined(INET6))
struct lro_ctrl *lro = &np->xn_lro;
struct lro_entry *queued;
#endif
@@ -935,7 +852,7 @@ xn_rxeof(struct netfront_info *np)
RING_IDX i, rp;
struct mbuf *m;
struct mbufq rxq, errq;
- int err, pages_flipped = 0, work_to_do;
+ int err, work_to_do;
do {
XN_RX_LOCK_ASSERT(np);
@@ -947,7 +864,7 @@ xn_rxeof(struct netfront_info *np)
mbufq_init(&rxq, INT_MAX);
ifp = np->xn_ifp;
-
+
rp = np->rx.sring->rsp_prod;
rmb(); /* Ensure we see queued responses up to 'rp'. */
@@ -957,8 +874,7 @@ xn_rxeof(struct netfront_info *np)
memset(extras, 0, sizeof(rinfo.extras));
m = NULL;
- err = xennet_get_responses(np, &rinfo, rp, &i, &m,
- &pages_flipped);
+ err = xennet_get_responses(np, &rinfo, rp, &i, &m);
if (__predict_false(err)) {
if (m)
@@ -974,7 +890,7 @@ xn_rxeof(struct netfront_info *np)
* XXX this isn't necessarily the case - need to add
* check
*/
-
+
m->m_pkthdr.csum_flags |=
(CSUM_IP_CHECKED | CSUM_IP_VALID | CSUM_DATA_VALID
| CSUM_PSEUDO_HDR);
@@ -988,27 +904,20 @@ xn_rxeof(struct netfront_info *np)
np->rx.rsp_cons = i;
}
- if (pages_flipped) {
- /* Some pages are no longer absent... */
-#ifdef notyet
- balloon_update_driver_allowance(-pages_flipped);
-#endif
- }
-
mbufq_drain(&errq);
- /*
+ /*
* Process all the mbufs after the remapping is complete.
* Break the mbuf chain first though.
*/
while ((m = mbufq_dequeue(&rxq)) != NULL) {
if_inc_counter(ifp, IFCOUNTER_IPACKETS, 1);
-
+
/*
* Do we really need to drop the rx lock?
*/
XN_RX_UNLOCK(np);
-#if __FreeBSD_version >= 700000 && (defined(INET) || defined(INET6))
+#if (defined(INET) || defined(INET6))
/* Use LRO if possible */
if ((ifp->if_capenable & IFCAP_LRO) == 0 ||
lro->lro_cnt == 0 || tcp_lro_rx(lro, m, 0)) {
@@ -1023,10 +932,10 @@ xn_rxeof(struct netfront_info *np)
#endif
XN_RX_LOCK(np);
}
-
+
np->rx.rsp_cons = i;
-#if __FreeBSD_version >= 700000 && (defined(INET) || defined(INET6))
+#if (defined(INET) || defined(INET6))
/*
* Flush any outstanding LRO work
*/
@@ -1040,18 +949,18 @@ xn_rxeof(struct netfront_info *np)
#if 0
/* If we get a callback with very few responses, reduce fill target. */
/* NB. Note exponential increase, linear decrease. */
- if (((np->rx.req_prod_pvt - np->rx.sring->rsp_prod) >
+ if (((np->rx.req_prod_pvt - np->rx.sring->rsp_prod) >
((3*np->rx_target) / 4)) && (--np->rx_target < np->rx_min_target))
np->rx_target = np->rx_min_target;
#endif
-
+
network_alloc_rx_buffers(np);
RING_FINAL_CHECK_FOR_RESPONSES(&np->rx, work_to_do);
} while (work_to_do);
}
-static void
+static void
xn_txeof(struct netfront_info *np)
{
RING_IDX i, prod;
@@ -1059,18 +968,18 @@ xn_txeof(struct netfront_info *np)
struct ifnet *ifp;
netif_tx_response_t *txr;
struct mbuf *m;
-
+
XN_TX_LOCK_ASSERT(np);
-
+
if (!netfront_carrier_ok(np))
return;
-
+
ifp = np->xn_ifp;
-
+
do {
prod = np->tx.sring->rsp_prod;
rmb(); /* Ensure we see responses up to 'rp'. */
-
+
for (i = np->tx.rsp_cons; i != prod; i++) {
txr = RING_GET_RESPONSE(&np->tx, i);
if (txr->status == NETIF_RSP_NULL)
@@ -1081,13 +990,13 @@ xn_txeof(struct netfront_info *np)
__func__, txr->status);
}
id = txr->id;
- m = np->tx_mbufs[id];
+ m = np->tx_mbufs[id];
KASSERT(m != NULL, ("mbuf not found in xn_tx_chain"));
KASSERT((uintptr_t)m > NET_TX_RING_SIZE,
("mbuf already on the free list, but we're "
"trying to free it again!"));
M_ASSERTVALID(m);
-
+
/*
* Increment packet count if this is the last
* mbuf of the chain.
@@ -1104,7 +1013,7 @@ xn_txeof(struct netfront_info *np)
gnttab_release_grant_reference(
&np->gref_tx_head, np->grant_tx_ref[id]);
np->grant_tx_ref[id] = GRANT_REF_INVALID;
-
+
np->tx_mbufs[id] = NULL;
add_id_to_freelist(np->tx_mbufs, id);
np->xn_cdata.xn_tx_chain_cnt--;
@@ -1113,7 +1022,7 @@ xn_txeof(struct netfront_info *np)
ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
}
np->tx.rsp_cons = prod;
-
+
/*
* Set a new event, then check for race with update of
* tx_cons. Note that it is essential to schedule a
@@ -1128,7 +1037,7 @@ xn_txeof(struct netfront_info *np)
mb();
} while (prod != np->tx.sring->rsp_prod);
-
+
if (np->tx_full &&
((np->tx.sring->req_prod - prod) < NET_TX_RING_SIZE)) {
np->tx_full = 0;
@@ -1154,8 +1063,8 @@ xn_intr(void *xsc)
if (RING_HAS_UNCONSUMED_RESPONSES(&np->tx)) {
XN_TX_LOCK(np);
xn_txeof(np);
- XN_TX_UNLOCK(np);
- }
+ XN_TX_UNLOCK(np);
+ }
XN_RX_LOCK(np);
xn_rxeof(np);
@@ -1193,10 +1102,10 @@ xennet_get_extras(struct netfront_info *np,
grant_ref_t ref;
if (__predict_false(*cons + 1 == rp)) {
-#if 0
+#if 0
if (net_ratelimit())
WPRINTK("Missing extra info\n");
-#endif
+#endif
err = EINVAL;
break;
}
@@ -1206,11 +1115,11 @@ xennet_get_extras(struct netfront_info *np,
if (__predict_false(!extra->type ||
extra->type >= XEN_NETIF_EXTRA_TYPE_MAX)) {
-#if 0
+#if 0
if (net_ratelimit())
WPRINTK("Invalid extra type: %d\n",
extra->type);
-#endif
+#endif
err = EINVAL;
} else {
memcpy(&extras[extra->type - 1], extra, sizeof(*extra));
@@ -1227,10 +1136,8 @@ xennet_get_extras(struct netfront_info *np,
static int
xennet_get_responses(struct netfront_info *np,
struct netfront_rx_info *rinfo, RING_IDX rp, RING_IDX *cons,
- struct mbuf **list,
- int *pages_flipped_p)
+ struct mbuf **list)
{
- int pages_flipped = *pages_flipped_p;
struct netif_rx_response *rx = &rinfo->rx;
struct netif_extra_info *extras = rinfo->extras;
struct mbuf *m, *m0, *m_prev;
@@ -1252,20 +1159,18 @@ xennet_get_responses(struct netfront_info *np,
}
for (;;) {
- u_long mfn;
-
-#if 0
+#if 0
DPRINTK("rx->status=%hd rx->offset=%hu frags=%u\n",
rx->status, rx->offset, frags);
#endif
if (__predict_false(rx->status < 0 ||
rx->offset + rx->status > PAGE_SIZE)) {
-#if 0
+#if 0
if (net_ratelimit())
WPRINTK("rx->offset: %x, size: %u\n",
rx->offset, rx->status);
-#endif
+#endif
xennet_move_rx_slot(np, m, ref);
if (m0 == m)
m0 = NULL;
@@ -1273,7 +1178,7 @@ xennet_get_responses(struct netfront_info *np,
err = EINVAL;
goto next_skip_queue;
}
-
+
/*
* This definitely indicates a bug, either in this driver or in
* the backend driver. In future this should flag the bad
@@ -1281,32 +1186,17 @@ xennet_get_responses(struct netfront_info *np,
*/
if (ref == GRANT_REF_INVALID) {
-#if 0
+#if 0
if (net_ratelimit())
WPRINTK("Bad rx response id %d.\n", rx->id);
-#endif
+#endif
printf("%s: Bad rx response id %d.\n", __func__,rx->id);
err = EINVAL;
goto next;
}
- if (!np->copying_receiver) {
- /* Memory pressure, insufficient buffer
- * headroom, ...
- */
- if (!(mfn = gnttab_end_foreign_transfer_ref(ref))) {
- WPRINTK("Unfulfilled rx req (id=%d, st=%d).\n",
- rx->id, rx->status);
- xennet_move_rx_slot(np, m, ref);
- err = ENOMEM;
- goto next;
- }
-
- pages_flipped++;
- } else {
- ret = gnttab_end_foreign_access_ref(ref);
- KASSERT(ret, ("ret != 0"));
- }
+ ret = gnttab_end_foreign_access_ref(ref);
+ KASSERT(ret, ("Unable to end access to grant references"));
gnttab_release_grant_reference(&np->gref_rx_head, ref);
@@ -1317,7 +1207,7 @@ next:
m->m_len = rx->status;
m->m_data += rx->offset;
m0->m_pkthdr.len += rx->status;
-
+
next_skip_queue:
if (!(rx->flags & NETRXF_more_data))
break;
@@ -1332,23 +1222,23 @@ next_skip_queue:
}
/*
* Note that m can be NULL, if rx->status < 0 or if
- * rx->offset + rx->status > PAGE_SIZE above.
+ * rx->offset + rx->status > PAGE_SIZE above.
*/
m_prev = m;
-
+
rx = RING_GET_RESPONSE(&np->rx, *cons + frags);
m = xennet_get_rx_mbuf(np, *cons + frags);
/*
* m_prev == NULL can happen if rx->status < 0 or if
- * rx->offset + * rx->status > PAGE_SIZE above.
+ * rx->offset + * rx->status > PAGE_SIZE above.
*/
if (m_prev != NULL)
m_prev->m_next = m;
/*
* m0 can be NULL if rx->status < 0 or if * rx->offset +
- * rx->status > PAGE_SIZE above.
+ * rx->status > PAGE_SIZE above.
*/
if (m0 == NULL)
m0 = m;
@@ -1359,13 +1249,12 @@ next_skip_queue:
}
*list = m0;
*cons += frags;
- *pages_flipped_p = pages_flipped;
return (err);
}
static void
-xn_tick_locked(struct netfront_info *sc)
+xn_tick_locked(struct netfront_info *sc)
{
XN_RX_LOCK_ASSERT(sc);
callout_reset(&sc->xn_stat_ch, hz, xn_tick, sc);
@@ -1374,10 +1263,10 @@ xn_tick_locked(struct netfront_info *sc)
}
static void
-xn_tick(void *xsc)
+xn_tick(void *xsc)
{
struct netfront_info *sc;
-
+
sc = xsc;
XN_RX_LOCK(sc);
xn_tick_locked(sc);
@@ -1537,7 +1426,6 @@ xn_assemble_tx_request(struct netfront_info *sc, struct mbuf *m_head)
tx->flags |= (NETTXF_csum_blank
| NETTXF_data_validated);
}
-#if __FreeBSD_version >= 700000
if (m->m_pkthdr.csum_flags & CSUM_TSO) {
struct netif_extra_info *gso =
(struct netif_extra_info *)
@@ -1555,7 +1443,6 @@ xn_assemble_tx_request(struct netfront_info *sc, struct mbuf *m_head)
gso->type = XEN_NETIF_EXTRA_TYPE_GSO;
gso->flags = 0;
}
-#endif
} else {
tx->size = m->m_len;
}
@@ -1573,7 +1460,7 @@ xn_assemble_tx_request(struct netfront_info *sc, struct mbuf *m_head)
}
static void
-xn_start_locked(struct ifnet *ifp)
+xn_start_locked(struct ifnet *ifp)
{
struct netfront_info *sc;
struct mbuf *m_head;
@@ -1621,35 +1508,35 @@ xn_start(struct ifnet *ifp)
}
/* equivalent of network_open() in Linux */
-static void
-xn_ifinit_locked(struct netfront_info *sc)
+static void
+xn_ifinit_locked(struct netfront_info *sc)
{
struct ifnet *ifp;
-
+
XN_LOCK_ASSERT(sc);
-
+
ifp = sc->xn_ifp;
-
- if (ifp->if_drv_flags & IFF_DRV_RUNNING)
+
+ if (ifp->if_drv_flags & IFF_DRV_RUNNING)
return;
-
+
xn_stop(sc);
-
+
network_alloc_rx_buffers(sc);
sc->rx.sring->rsp_event = sc->rx.rsp_cons + 1;
-
+
ifp->if_drv_flags |= IFF_DRV_RUNNING;
ifp->if_drv_flags &= ~IFF_DRV_OACTIVE;
if_link_state_change(ifp, LINK_STATE_UP);
-
+
callout_reset(&sc->xn_stat_ch, hz, xn_tick, sc);
}
-static void
+static void
xn_ifinit(void *xsc)
{
struct netfront_info *sc = xsc;
-
+
XN_LOCK(sc);
xn_ifinit_locked(sc);
XN_UNLOCK(sc);
@@ -1671,12 +1558,12 @@ xn_ioctl(struct ifnet *ifp, u_long cmd, caddr_t data)
XN_LOCK(sc);
if (ifa->ifa_addr->sa_family == AF_INET) {
ifp->if_flags |= IFF_UP;
- if (!(ifp->if_drv_flags & IFF_DRV_RUNNING))
+ if (!(ifp->if_drv_flags & IFF_DRV_RUNNING))
xn_ifinit_locked(sc);
arp_ifinit(ifp, ifa);
- XN_UNLOCK(sc);
+ XN_UNLOCK(sc);
} else {
- XN_UNLOCK(sc);
+ XN_UNLOCK(sc);
#endif
error = ether_ioctl(ifp, cmd, data);
#ifdef INET
@@ -1688,7 +1575,7 @@ xn_ioctl(struct ifnet *ifp, u_long cmd, caddr_t data)
#ifdef notyet
if (ifr->ifr_mtu > XN_JUMBO_MTU)
error = EINVAL;
- else
+ else
#endif
{
ifp->if_mtu = ifr->ifr_mtu;
@@ -1747,7 +1634,6 @@ xn_ioctl(struct ifnet *ifp, u_long cmd, caddr_t data)
if (mask & IFCAP_RXCSUM) {
ifp->if_capenable ^= IFCAP_RXCSUM;
}
-#if __FreeBSD_version >= 700000
if (mask & IFCAP_TSO4) {
if (IFCAP_TSO4 & ifp->if_capenable) {
ifp->if_capenable &= ~IFCAP_TSO4;
@@ -1763,9 +1649,8 @@ xn_ioctl(struct ifnet *ifp, u_long cmd, caddr_t data)
}
if (mask & IFCAP_LRO) {
ifp->if_capenable ^= IFCAP_LRO;
-
+
}
-#endif
error = 0;
break;
case SIOCADDMULTI:
@@ -1778,7 +1663,7 @@ xn_ioctl(struct ifnet *ifp, u_long cmd, caddr_t data)
error = 0;
}
#endif
- /* FALLTHROUGH */
+ break;
case SIOCSIFMEDIA:
case SIOCGIFMEDIA:
error = ifmedia_ioctl(ifp, ifr, &sc->sc_media, cmd);
@@ -1786,24 +1671,24 @@ xn_ioctl(struct ifnet *ifp, u_long cmd, caddr_t data)
default:
error = ether_ioctl(ifp, cmd, data);
}
-
+
return (error);
}
static void
xn_stop(struct netfront_info *sc)
-{
+{
struct ifnet *ifp;
XN_LOCK_ASSERT(sc);
-
+
ifp = sc->xn_ifp;
callout_stop(&sc->xn_stat_ch);
xn_free_rx_ring(sc);
xn_free_tx_ring(sc);
-
+
ifp->if_drv_flags &= ~(IFF_DRV_RUNNING | IFF_DRV_OACTIVE);
if_link_state_change(ifp, LINK_STATE_DOWN);
}
@@ -1815,30 +1700,22 @@ network_connect(struct netfront_info *np)
int i, requeue_idx, error;
grant_ref_t ref;
netif_rx_request_t *req;
- u_int feature_rx_copy, feature_rx_flip;
+ u_int feature_rx_copy;
error = xs_scanf(XST_NIL, xenbus_get_otherend_path(np->xbdev),
"feature-rx-copy", NULL, "%u", &feature_rx_copy);
if (error)
feature_rx_copy = 0;
- error = xs_scanf(XST_NIL, xenbus_get_otherend_path(np->xbdev),
- "feature-rx-flip", NULL, "%u", &feature_rx_flip);
- if (error)
- feature_rx_flip = 1;
- /*
- * Copy packets on receive path if:
- * (a) This was requested by user, and the backend supports it; or
- * (b) Flipping was requested, but this is unsupported by the backend.
- */
- np->copying_receiver = ((MODPARM_rx_copy && feature_rx_copy) ||
- (MODPARM_rx_flip && !feature_rx_flip));
+ /* We only support rx copy. */
+ if (!feature_rx_copy)
+ return (EPROTONOSUPPORT);
/* Recovery procedure: */
error = talk_to_backend(np->xbdev, np);
- if (error)
+ if (error)
return (error);
-
+
/* Step 1: Reinitialise variables. */
xn_query_features(np);
xn_configure_features(np);
@@ -1858,15 +1735,10 @@ network_connect(struct netfront_info *np)
req = RING_GET_REQUEST(&np->rx, requeue_idx);
pfn = vtophys(mtod(m, vm_offset_t)) >> PAGE_SHIFT;
- if (!np->copying_receiver) {
- gnttab_grant_foreign_transfer_ref(ref,
- xenbus_get_otherend_id(np->xbdev),
- pfn);
- } else {
- gnttab_grant_foreign_access_ref(ref,
- xenbus_get_otherend_id(np->xbdev),
- pfn, 0);
- }
+ gnttab_grant_foreign_access_ref(ref,
+ xenbus_get_otherend_id(np->xbdev),
+ pfn, 0);
+
req->gref = ref;
req->id = requeue_idx;
@@ -1874,7 +1746,7 @@ network_connect(struct netfront_info *np)
}
np->rx.req_prod_pvt = requeue_idx;
-
+
/* Step 3: All public and private state should now be sane. Get
* ready to start sending and receiving packets and give the driver
* domain a kick because we've probably just requeued some
@@ -1940,14 +1812,14 @@ xn_configure_features(struct netfront_info *np)
else
cap_enabled = UINT_MAX;
-#if __FreeBSD_version >= 700000 && (defined(INET) || defined(INET6))
+#if (defined(INET) || defined(INET6))
if ((np->xn_ifp->if_capenable & IFCAP_LRO) == (cap_enabled & IFCAP_LRO))
tcp_lro_free(&np->xn_lro);
#endif
np->xn_ifp->if_capenable =
np->xn_ifp->if_capabilities & ~(IFCAP_LRO|IFCAP_TSO4) & cap_enabled;
np->xn_ifp->if_hwassist &= ~CSUM_TSO;
-#if __FreeBSD_version >= 700000 && (defined(INET) || defined(INET6))
+#if (defined(INET) || defined(INET6))
if (xn_enable_lro && (np->xn_ifp->if_capabilities & IFCAP_LRO) ==
(cap_enabled & IFCAP_LRO)) {
err = tcp_lro_init(&np->xn_lro);
@@ -1971,7 +1843,7 @@ xn_configure_features(struct netfront_info *np)
* Create a network device.
* @param dev Newbus device representing this virtual NIC.
*/
-int
+int
create_netdev(device_t dev)
{
int i;
@@ -1980,10 +1852,12 @@ create_netdev(device_t dev)
struct ifnet *ifp;
np = device_get_softc(dev);
-
+
np->xbdev = dev;
-
- XN_LOCK_INIT(np, xennetif);
+
+ mtx_init(&np->tx_lock, "xntx", "netfront transmit lock", MTX_DEF);
+ mtx_init(&np->rx_lock, "xnrx", "netfront receive lock", MTX_DEF);
+ mtx_init(&np->sc_lock, "xnsc", "netfront softc lock", MTX_DEF);
ifmedia_init(&np->sc_media, 0, xn_ifmedia_upd, xn_ifmedia_sts);
ifmedia_add(&np->sc_media, IFM_ETHER|IFM_MANUAL, 0, NULL);
@@ -1996,7 +1870,7 @@ create_netdev(device_t dev)
/* Initialise {tx,rx}_skbs to be a free chain containing every entry. */
for (i = 0; i <= NET_TX_RING_SIZE; i++) {
np->tx_mbufs[i] = (void *) ((u_long) i+1);
- np->grant_tx_ref[i] = GRANT_REF_INVALID;
+ np->grant_tx_ref[i] = GRANT_REF_INVALID;
}
np->tx_mbufs[NET_TX_RING_SIZE] = (void *)0;
@@ -2013,7 +1887,7 @@ create_netdev(device_t dev)
&np->gref_tx_head) != 0) {
IPRINTK("#### netfront can't alloc tx grant refs\n");
err = ENOMEM;
- goto exit;
+ goto error;
}
/* A grant for every rx ring slot */
if (gnttab_alloc_grant_references(RX_MAX_TARGET,
@@ -2021,42 +1895,43 @@ create_netdev(device_t dev)
WPRINTK("#### netfront can't alloc rx grant refs\n");
gnttab_free_grant_references(np->gref_tx_head);
err = ENOMEM;
- goto exit;
+ goto error;
}
-
+
err = xen_net_read_mac(dev, np->mac);
- if (err)
- goto out;
-
+ if (err) {
+ gnttab_free_grant_references(np->gref_rx_head);
+ gnttab_free_grant_references(np->gref_tx_head);
+ goto error;
+ }
+
/* Set up ifnet structure */
ifp = np->xn_ifp = if_alloc(IFT_ETHER);
ifp->if_softc = np;
if_initname(ifp, "xn", device_get_unit(dev));
ifp->if_flags = IFF_BROADCAST | IFF_SIMPLEX | IFF_MULTICAST;
ifp->if_ioctl = xn_ioctl;
- ifp->if_output = ether_output;
ifp->if_start = xn_start;
#ifdef notyet
ifp->if_watchdog = xn_watchdog;
#endif
ifp->if_init = xn_ifinit;
ifp->if_snd.ifq_maxlen = NET_TX_RING_SIZE - 1;
-
+
ifp->if_hwassist = XN_CSUM_FEATURES;
ifp->if_capabilities = IFCAP_HWCSUM;
ifp->if_hw_tsomax = 65536 - (ETHER_HDR_LEN + ETHER_VLAN_ENCAP_LEN);
ifp->if_hw_tsomaxsegcount = MAX_TX_REQ_FRAGS;
ifp->if_hw_tsomaxsegsize = PAGE_SIZE;
-
+
ether_ifattach(ifp, np->mac);
callout_init(&np->xn_stat_ch, 1);
netfront_carrier_off(np);
return (0);
-exit:
- gnttab_free_grant_references(np->gref_tx_head);
-out:
+error:
+ KASSERT(err != 0, ("Error path with no error code specified"));
return (err);
}
@@ -2151,27 +2026,27 @@ xn_ifmedia_sts(struct ifnet *ifp, struct ifmediareq *ifmr)
}
/* ** Driver registration ** */
-static device_method_t netfront_methods[] = {
- /* Device interface */
- DEVMETHOD(device_probe, netfront_probe),
- DEVMETHOD(device_attach, netfront_attach),
- DEVMETHOD(device_detach, netfront_detach),
- DEVMETHOD(device_shutdown, bus_generic_shutdown),
- DEVMETHOD(device_suspend, netfront_suspend),
- DEVMETHOD(device_resume, netfront_resume),
-
+static device_method_t netfront_methods[] = {
+ /* Device interface */
+ DEVMETHOD(device_probe, netfront_probe),
+ DEVMETHOD(device_attach, netfront_attach),
+ DEVMETHOD(device_detach, netfront_detach),
+ DEVMETHOD(device_shutdown, bus_generic_shutdown),
+ DEVMETHOD(device_suspend, netfront_suspend),
+ DEVMETHOD(device_resume, netfront_resume),
+
/* Xenbus interface */
DEVMETHOD(xenbus_otherend_changed, netfront_backend_changed),
DEVMETHOD_END
-};
-
-static driver_t netfront_driver = {
- "xn",
- netfront_methods,
- sizeof(struct netfront_info),
-};
-devclass_t netfront_devclass;
-
+};
+
+static driver_t netfront_driver = {
+ "xn",
+ netfront_methods,
+ sizeof(struct netfront_info),
+};
+devclass_t netfront_devclass;
+
DRIVER_MODULE(xe, xenbusb_front, netfront_driver, netfront_devclass, NULL,
- NULL);
+ NULL);
diff --git a/sys/dev/xen/xenpci/xenpci.c b/sys/dev/xen/xenpci/xenpci.c
index 3fdd78c..3a596b4 100644
--- a/sys/dev/xen/xenpci/xenpci.c
+++ b/sys/dev/xen/xenpci/xenpci.c
@@ -43,14 +43,13 @@ __FBSDID("$FreeBSD$");
#include <xen/features.h>
#include <xen/hypervisor.h>
#include <xen/hvm.h>
+#include <xen/xen_intr.h>
#include <dev/pci/pcireg.h>
#include <dev/pci/pcivar.h>
#include <dev/xen/xenpci/xenpcivar.h>
-extern void xen_intr_handle_upcall(struct trapframe *trap_frame);
-
/*
* This is used to find our platform device instance.
*/
diff --git a/sys/dev/xen/xenstore/xenstore.c b/sys/dev/xen/xenstore/xenstore.c
index cecea25..f3df97d 100644
--- a/sys/dev/xen/xenstore/xenstore.c
+++ b/sys/dev/xen/xenstore/xenstore.c
@@ -1124,7 +1124,7 @@ xs_probe(device_t dev)
* Unconditionally return success.
*/
device_set_desc(dev, "XenStore");
- return (0);
+ return (BUS_PROBE_NOWILDCARD);
}
static void
diff --git a/sys/i386/i386/exception.s b/sys/i386/i386/exception.s
index 70c6d9d..f91f516 100644
--- a/sys/i386/i386/exception.s
+++ b/sys/i386/i386/exception.s
@@ -158,11 +158,11 @@ IDTVEC(xmm)
alltraps:
pushal
pushl $0
- movl %ds,(%esp)
+ movw %ds,(%esp)
pushl $0
- movl %es,(%esp)
+ movw %es,(%esp)
pushl $0
- movl %fs,(%esp)
+ movw %fs,(%esp)
alltraps_with_regs_pushed:
SET_KERNEL_SREGS
cld
@@ -237,11 +237,11 @@ IDTVEC(lcall_syscall)
subl $4,%esp /* skip over tf_trapno */
pushal
pushl $0
- movl %ds,(%esp)
+ movw %ds,(%esp)
pushl $0
- movl %es,(%esp)
+ movw %es,(%esp)
pushl $0
- movl %fs,(%esp)
+ movw %fs,(%esp)
SET_KERNEL_SREGS
cld
FAKE_MCOUNT(TF_EIP(%esp))
@@ -266,11 +266,11 @@ IDTVEC(int0x80_syscall)
subl $4,%esp /* skip over tf_trapno */
pushal
pushl $0
- movl %ds,(%esp)
+ movw %ds,(%esp)
pushl $0
- movl %es,(%esp)
+ movw %es,(%esp)
pushl $0
- movl %fs,(%esp)
+ movw %fs,(%esp)
SET_KERNEL_SREGS
cld
FAKE_MCOUNT(TF_EIP(%esp))
@@ -426,15 +426,15 @@ doreti_iret_fault:
subl $8,%esp
pushal
pushl $0
- movl %ds,(%esp)
+ movw %ds,(%esp)
.globl doreti_popl_ds_fault
doreti_popl_ds_fault:
pushl $0
- movl %es,(%esp)
+ movw %es,(%esp)
.globl doreti_popl_es_fault
doreti_popl_es_fault:
pushl $0
- movl %fs,(%esp)
+ movw %fs,(%esp)
.globl doreti_popl_fs_fault
doreti_popl_fs_fault:
sti
diff --git a/sys/i386/i386/initcpu.c b/sys/i386/i386/initcpu.c
index 705d915..a4a49ea 100644
--- a/sys/i386/i386/initcpu.c
+++ b/sys/i386/i386/initcpu.c
@@ -826,14 +826,18 @@ initializecpucache(void)
* CPUID_SS feature even though the native CPU supports it.
*/
TUNABLE_INT_FETCH("hw.clflush_disable", &hw_clflush_disable);
- if (vm_guest != VM_GUEST_NO && hw_clflush_disable == -1)
+ if (vm_guest != VM_GUEST_NO && hw_clflush_disable == -1) {
cpu_feature &= ~CPUID_CLFSH;
+ cpu_stdext_feature &= ~CPUID_STDEXT_CLFLUSHOPT;
+ }
/*
- * Allow to disable CLFLUSH feature manually by
- * hw.clflush_disable tunable.
+ * The kernel's use of CLFLUSH{,OPT} can be disabled manually
+ * by setting the hw.clflush_disable tunable.
*/
- if (hw_clflush_disable == 1)
+ if (hw_clflush_disable == 1) {
cpu_feature &= ~CPUID_CLFSH;
+ cpu_stdext_feature &= ~CPUID_STDEXT_CLFLUSHOPT;
+ }
#if defined(PC98) && !defined(CPU_UPGRADE_HW_CACHE)
/*
diff --git a/sys/i386/i386/pmap.c b/sys/i386/i386/pmap.c
index 270845b..5b69d58 100644
--- a/sys/i386/i386/pmap.c
+++ b/sys/i386/i386/pmap.c
@@ -1234,9 +1234,8 @@ pmap_invalidate_cache_range(vm_offset_t sva, vm_offset_t eva, boolean_t force)
if ((cpu_feature & CPUID_SS) != 0 && !force)
; /* If "Self Snoop" is supported and allowed, do nothing. */
- else if ((cpu_feature & CPUID_CLFSH) != 0 &&
+ else if ((cpu_stdext_feature & CPUID_STDEXT_CLFLUSHOPT) != 0 &&
eva - sva < PMAP_CLFLUSH_THRESHOLD) {
-
#ifdef DEV_APIC
/*
* XXX: Some CPUs fault, hang, or trash the local APIC
@@ -1256,8 +1255,23 @@ pmap_invalidate_cache_range(vm_offset_t sva, vm_offset_t eva, boolean_t force)
*/
mfence();
for (; sva < eva; sva += cpu_clflush_line_size)
- clflush(sva);
+ clflushopt(sva);
mfence();
+ } else if ((cpu_feature & CPUID_CLFSH) != 0 &&
+ eva - sva < PMAP_CLFLUSH_THRESHOLD) {
+#ifdef DEV_APIC
+ if (pmap_kextract(sva) == lapic_paddr)
+ return;
+#endif
+ /*
+ * Writes are ordered by CLFLUSH on Intel CPUs.
+ */
+ if (cpu_vendor_id != CPU_VENDOR_INTEL)
+ mfence();
+ for (; sva < eva; sva += cpu_clflush_line_size)
+ clflush(sva);
+ if (cpu_vendor_id != CPU_VENDOR_INTEL)
+ mfence();
} else {
/*
@@ -5224,8 +5238,10 @@ pmap_flush_page(vm_page_t m)
{
struct sysmaps *sysmaps;
vm_offset_t sva, eva;
+ bool useclflushopt;
- if ((cpu_feature & CPUID_CLFSH) != 0) {
+ useclflushopt = (cpu_stdext_feature & CPUID_STDEXT_CLFLUSHOPT) != 0;
+ if (useclflushopt || (cpu_feature & CPUID_CLFSH) != 0) {
sysmaps = &sysmaps_pcpu[PCPU_GET(cpuid)];
mtx_lock(&sysmaps->lock);
if (*sysmaps->CMAP2)
@@ -5239,13 +5255,20 @@ pmap_flush_page(vm_page_t m)
/*
* Use mfence despite the ordering implied by
- * mtx_{un,}lock() because clflush is not guaranteed
- * to be ordered by any other instruction.
+ * mtx_{un,}lock() because clflush on non-Intel CPUs
+ * and clflushopt are not guaranteed to be ordered by
+ * any other instruction.
*/
- mfence();
- for (; sva < eva; sva += cpu_clflush_line_size)
- clflush(sva);
- mfence();
+ if (useclflushopt || cpu_vendor_id != CPU_VENDOR_INTEL)
+ mfence();
+ for (; sva < eva; sva += cpu_clflush_line_size) {
+ if (useclflushopt)
+ clflushopt(sva);
+ else
+ clflush(sva);
+ }
+ if (useclflushopt || cpu_vendor_id != CPU_VENDOR_INTEL)
+ mfence();
*sysmaps->CMAP2 = 0;
sched_unpin();
mtx_unlock(&sysmaps->lock);
diff --git a/sys/i386/include/asmacros.h b/sys/i386/include/asmacros.h
index 91c25f7..d14f079 100644
--- a/sys/i386/include/asmacros.h
+++ b/sys/i386/include/asmacros.h
@@ -147,11 +147,11 @@
pushl $0 ; /* dummy trap type */ \
pushal ; /* 8 ints */ \
pushl $0 ; /* save data and extra segments ... */ \
- mov %ds,(%esp) ; \
+ movw %ds,(%esp) ; \
pushl $0 ; \
- mov %es,(%esp) ; \
+ movw %es,(%esp) ; \
pushl $0 ; \
- mov %fs,(%esp)
+ movw %fs,(%esp)
#define POP_FRAME \
popl %fs ; \
diff --git a/sys/i386/include/cpufunc.h b/sys/i386/include/cpufunc.h
index 3bc25d4..f433194 100644
--- a/sys/i386/include/cpufunc.h
+++ b/sys/i386/include/cpufunc.h
@@ -86,6 +86,13 @@ clflush(u_long addr)
}
static __inline void
+clflushopt(u_long addr)
+{
+
+ __asm __volatile(".byte 0x66;clflush %0" : : "m" (*(char *)addr));
+}
+
+static __inline void
clts(void)
{
diff --git a/sys/i386/include/xen/xen-os.h b/sys/i386/include/xen/xen-os.h
index 9b9b63f..1490e59 100644
--- a/sys/i386/include/xen/xen-os.h
+++ b/sys/i386/include/xen/xen-os.h
@@ -1,188 +1,6 @@
-/*****************************************************************************
- * i386/xen/xen-os.h
- *
- * Random collection of macros and definition
- *
- * Copyright (c) 2003, 2004 Keir Fraser (on behalf of the Xen team)
- * All rights reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy
- * of this software and associated documentation files (the "Software"), to
- * deal in the Software without restriction, including without limitation the
- * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- * sell copies of the Software, and to permit persons to whom the Software is
- * furnished to do so, subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in
- * all copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
- * DEALINGS IN THE SOFTWARE.
- *
- * $FreeBSD$
+/*-
+ * This file is in the public domain.
*/
+/* $FreeBSD$ */
-#ifndef _MACHINE_XEN_XEN_OS_H_
-#define _MACHINE_XEN_XEN_OS_H_
-
-#ifdef PAE
-#define CONFIG_X86_PAE
-#endif
-
-/* Everything below this point is not included by assembler (.S) files. */
-#ifndef __ASSEMBLY__
-
-/* REP NOP (PAUSE) is a good thing to insert into busy-wait loops. */
-static inline void rep_nop(void)
-{
- __asm__ __volatile__ ( "rep;nop" : : : "memory" );
-}
-#define cpu_relax() rep_nop()
-
-/* This is a barrier for the compiler only, NOT the processor! */
-#define barrier() __asm__ __volatile__("": : :"memory")
-
-#define LOCK_PREFIX ""
-#define LOCK ""
-#define ADDR (*(volatile long *) addr)
-/*
- * Make sure gcc doesn't try to be clever and move things around
- * on us. We need to use _exactly_ the address the user gave us,
- * not some alias that contains the same information.
- */
-typedef struct { volatile int counter; } atomic_t;
-
-#define xen_xchg(ptr,v) \
- ((__typeof__(*(ptr)))__xchg((unsigned long)(v),(ptr),sizeof(*(ptr))))
-struct __xchg_dummy { unsigned long a[100]; };
-#define __xg(x) ((volatile struct __xchg_dummy *)(x))
-static __inline unsigned long __xchg(unsigned long x, volatile void * ptr,
- int size)
-{
- switch (size) {
- case 1:
- __asm__ __volatile__("xchgb %b0,%1"
- :"=q" (x)
- :"m" (*__xg(ptr)), "0" (x)
- :"memory");
- break;
- case 2:
- __asm__ __volatile__("xchgw %w0,%1"
- :"=r" (x)
- :"m" (*__xg(ptr)), "0" (x)
- :"memory");
- break;
- case 4:
- __asm__ __volatile__("xchgl %0,%1"
- :"=r" (x)
- :"m" (*__xg(ptr)), "0" (x)
- :"memory");
- break;
- }
- return x;
-}
-
-/**
- * test_and_clear_bit - Clear a bit and return its old value
- * @nr: Bit to set
- * @addr: Address to count from
- *
- * This operation is atomic and cannot be reordered.
- * It also implies a memory barrier.
- */
-static __inline int test_and_clear_bit(int nr, volatile void * addr)
-{
- int oldbit;
-
- __asm__ __volatile__( LOCK_PREFIX
- "btrl %2,%1\n\tsbbl %0,%0"
- :"=r" (oldbit),"=m" (ADDR)
- :"Ir" (nr) : "memory");
- return oldbit;
-}
-
-static __inline int constant_test_bit(int nr, const volatile void * addr)
-{
- return ((1UL << (nr & 31)) & (((const volatile unsigned int *) addr)[nr >> 5])) != 0;
-}
-
-static __inline int variable_test_bit(int nr, volatile void * addr)
-{
- int oldbit;
-
- __asm__ __volatile__(
- "btl %2,%1\n\tsbbl %0,%0"
- :"=r" (oldbit)
- :"m" (ADDR),"Ir" (nr));
- return oldbit;
-}
-
-#define test_bit(nr,addr) \
-(__builtin_constant_p(nr) ? \
- constant_test_bit((nr),(addr)) : \
- variable_test_bit((nr),(addr)))
-
-
-/**
- * set_bit - Atomically set a bit in memory
- * @nr: the bit to set
- * @addr: the address to start counting from
- *
- * This function is atomic and may not be reordered. See __set_bit()
- * if you do not require the atomic guarantees.
- * Note that @nr may be almost arbitrarily large; this function is not
- * restricted to acting on a single-word quantity.
- */
-static __inline__ void set_bit(int nr, volatile void * addr)
-{
- __asm__ __volatile__( LOCK_PREFIX
- "btsl %1,%0"
- :"=m" (ADDR)
- :"Ir" (nr));
-}
-
-/**
- * clear_bit - Clears a bit in memory
- * @nr: Bit to clear
- * @addr: Address to start counting from
- *
- * clear_bit() is atomic and may not be reordered. However, it does
- * not contain a memory barrier, so if it is used for locking purposes,
- * you should call smp_mb__before_clear_bit() and/or smp_mb__after_clear_bit()
- * in order to ensure changes are visible on other processors.
- */
-static __inline__ void clear_bit(int nr, volatile void * addr)
-{
- __asm__ __volatile__( LOCK_PREFIX
- "btrl %1,%0"
- :"=m" (ADDR)
- :"Ir" (nr));
-}
-
-/**
- * atomic_inc - increment atomic variable
- * @v: pointer of type atomic_t
- *
- * Atomically increments @v by 1. Note that the guaranteed
- * useful range of an atomic_t is only 24 bits.
- */
-static __inline__ void atomic_inc(atomic_t *v)
-{
- __asm__ __volatile__(
- LOCK "incl %0"
- :"=m" (v->counter)
- :"m" (v->counter));
-}
-
-
-#define rdtscll(val) \
- __asm__ __volatile__("rdtsc" : "=A" (val))
-
-#endif /* !__ASSEMBLY__ */
-
-#endif /* _MACHINE_XEN_XEN_OS_H_ */
+#include <x86/xen/xen-os.h>
diff --git a/sys/kern/Make.tags.inc b/sys/kern/Make.tags.inc
index 38e5394..f267d61 100644
--- a/sys/kern/Make.tags.inc
+++ b/sys/kern/Make.tags.inc
@@ -11,8 +11,9 @@ SYS?= ${.CURDIR}/..
# better solution would be for ctags to generate "struct vmmeter" tags.
COMM= ${SYS}/dev/advansys/*.[ch] \
+ ${SYS}/sys/vnode.h \
${SYS}/dev/aha/*.[ch] \
- ${SYS}/dev/aic7xxx/*.[ch] \
+ ${SYS}/dev/alc/*.[ch] \
${SYS}/dev/buslogic/*.[ch] \
${SYS}/dev/dpt/*.[ch] \
${SYS}/dev/en/*.[ch] \
@@ -22,15 +23,25 @@ COMM= ${SYS}/dev/advansys/*.[ch] \
${SYS}/dev/ppbus/*.[ch] \
${SYS}/dev/smbus/*.[ch] \
${SYS}/dev/vx/*.[ch] \
+ ${SYS}/fs/autofs/*.[ch] \
${SYS}/fs/cd9660/*.[ch] \
+ ${SYS}/fs/cuse/*.[ch] \
${SYS}/fs/deadfs/*.[ch] \
${SYS}/fs/devfs/*.[ch] \
+ ${SYS}/fs/ext2fs/*.[ch] \
${SYS}/fs/fdescfs/*.[ch] \
${SYS}/fs/fifofs/*.[ch] \
+ ${SYS}/fs/fuse/*.[ch] \
${SYS}/fs/msdosfs/*.[ch] \
+ ${SYS}/fs/nandfs/*.[ch] \
+ ${SYS}/fs/nfs/*.[ch] \
+ ${SYS}/fs/nfsclient/*.[ch] \
+ ${SYS}/fs/nfsserver/*.[ch] \
${SYS}/fs/nullfs/*.[ch] \
${SYS}/fs/procfs/*.[ch] \
+ ${SYS}/fs/pseudofs/*.[ch] \
${SYS}/fs/smbfs/*.[ch] \
+ ${SYS}/fs/tmpfs/*.[ch] \
${SYS}/fs/udf/*.[ch] \
${SYS}/fs/unionfs/*.[ch] \
${SYS}/geom/*.[ch] \
@@ -40,10 +51,7 @@ COMM= ${SYS}/dev/advansys/*.[ch] \
${SYS}/netinet6/*.[ch] \
${SYS}/netipsec/*.[ch] \
${SYS}/netnatm/*.[ch] \
- ${SYS}/nfs/*.[ch] \
- ${SYS}/nfsclient/*.[ch] \
- ${SYS}/nfsserver/*.[ch] \
- ${SYS}/pci/*.[ch] \
+ ${SYS}/ddb/*.[ch] \
${SYS}/ufs/ffs/*.[ch] \
${SYS}/ufs/ufs/*.[ch] \
${SYS}/vm/*.[ch] \
@@ -57,37 +65,43 @@ COMMDIR1= ${SYS}/conf \
${SYS}/netinet6 \
${SYS}/netipsec \
${SYS}/netnatm \
- ${SYS}/nfs \
- ${SYS}/pci \
+ ${SYS}/ddb \
${SYS}/vm \
${SYS}/sys
COMMDIR2= ${SYS}/dev/advansys \
${SYS}/dev/aha \
- ${SYS}/dev/aic7xxx \
+ ${SYS}/dev/alc \
${SYS}/dev/buslogic \
- ${SYS}/dev/ccd \
- ${SYS}/dev/dec \
${SYS}/dev/dpt \
${SYS}/dev/en \
- ${SYS}/dev/hea \
- ${SYS}/dev/hfa \
${SYS}/dev/iicbus \
${SYS}/dev/isp \
+ ${SYS}/dev/md \
${SYS}/dev/pdq \
${SYS}/dev/ppbus \
${SYS}/dev/smbus \
- ${SYS}/dev/vn \
${SYS}/dev/vx \
+ ${SYS}/fs/autofs \
+ ${SYS}/fs/cd9660 \
+ ${SYS}/fs/cuse \
${SYS}/fs/deadfs \
${SYS}/fs/devfs \
+ ${SYS}/fs/ext2fs \
${SYS}/fs/fdescfs \
${SYS}/fs/fifofs \
+ ${SYS}/fs/fuse \
${SYS}/fs/msdosfs \
+ ${SYS}/fs/nandfs \
+ ${SYS}/fs/nfs \
+ ${SYS}/fs/nfsclient \
+ ${SYS}/fs/nfsserver \
${SYS}/fs/nullfs \
${SYS}/fs/procfs \
- ${SYS}/fs/specfs \
+ ${SYS}/fs/pseudofs \
+ ${SYS}/fs/smbfs \
+ ${SYS}/fs/tmpfs \
+ ${SYS}/fs/udf \
${SYS}/fs/unionfs \
- ${SYS}/fs/cd9660 \
${SYS}/ufs/ffs \
${SYS}/ufs/ufs
diff --git a/sys/kern/bus_if.m b/sys/kern/bus_if.m
index cce997c..bafa448 100644
--- a/sys/kern/bus_if.m
+++ b/sys/kern/bus_if.m
@@ -209,7 +209,9 @@ METHOD void driver_added {
* For busses which use use drivers supporting DEVICE_IDENTIFY() to
* enumerate their devices, this method is used to create new
* device instances. The new device will be added after the last
- * existing child with the same order.
+ * existing child with the same order. Implementations of bus_add_child
+ * call device_add_child_ordered to add the child and often add
+ * a suitable ivar to the device specific to that bus.
*
* @param _dev the bus device which will be the parent of the
* new child device
diff --git a/sys/kern/init_sysent.c b/sys/kern/init_sysent.c
index a328906..09ec05d 100644
--- a/sys/kern/init_sysent.c
+++ b/sys/kern/init_sysent.c
@@ -3,7 +3,7 @@
*
* DO NOT EDIT-- this file is automatically generated.
* $FreeBSD$
- * created from FreeBSD: head/sys/kern/syscalls.master 281714 2015-04-18 21:50:13Z kib
+ * created from FreeBSD: head/sys/kern/syscalls.master 285388 2015-07-11 15:22:11Z adrian
*/
#include "opt_compat.h"
diff --git a/sys/kern/kern_fork.c b/sys/kern/kern_fork.c
index bb35b9b..1b556be 100644
--- a/sys/kern/kern_fork.c
+++ b/sys/kern/kern_fork.c
@@ -586,7 +586,7 @@ do_fork(struct thread *td, int flags, struct proc *p2, struct thread *td2,
* been preserved.
*/
p2->p_flag |= p1->p_flag & P_SUGID;
- td2->td_pflags |= td->td_pflags & TDP_ALTSTACK;
+ td2->td_pflags |= (td->td_pflags & TDP_ALTSTACK) | TDP_FORKING;
SESS_LOCK(p1->p_session);
if (p1->p_session->s_ttyvp != NULL && p1->p_flag & P_CONTROLT)
p2->p_flag |= P_CONTROLT;
@@ -1023,6 +1023,7 @@ fork_exit(void (*callout)(void *, struct trapframe *), void *arg,
if (p->p_sysent->sv_schedtail != NULL)
(p->p_sysent->sv_schedtail)(td);
+ td->td_pflags &= ~TDP_FORKING;
}
/*
diff --git a/sys/kern/kern_physio.c b/sys/kern/kern_physio.c
index 71cfded..5d75304 100644
--- a/sys/kern/kern_physio.c
+++ b/sys/kern/kern_physio.c
@@ -38,6 +38,7 @@ __FBSDID("$FreeBSD$");
int
physio(struct cdev *dev, struct uio *uio, int ioflag)
{
+ struct cdevsw *csw;
struct buf *pbuf;
struct bio *bp;
struct vm_page **pages;
@@ -46,6 +47,11 @@ physio(struct cdev *dev, struct uio *uio, int ioflag)
int error, i, npages, maxpages;
vm_prot_t prot;
+ csw = dev->si_devsw;
+ /* check if character device is being destroyed */
+ if (csw == NULL)
+ return (ENXIO);
+
/* XXX: sanity check */
if(dev->si_iosize_max < PAGE_SIZE) {
printf("WARNING: %s si_iosize_max=%d, using DFLTPHYS.\n",
@@ -165,7 +171,7 @@ physio(struct cdev *dev, struct uio *uio, int ioflag)
}
}
- dev->si_devsw->d_strategy(bp);
+ csw->d_strategy(bp);
if (uio->uio_rw == UIO_READ)
biowait(bp, "physrd");
else
diff --git a/sys/kern/kern_sysctl.c b/sys/kern/kern_sysctl.c
index 52075e4..0ee8a1a 100644
--- a/sys/kern/kern_sysctl.c
+++ b/sys/kern/kern_sysctl.c
@@ -1128,6 +1128,70 @@ static SYSCTL_NODE(_sysctl, 5, oiddescr, CTLFLAG_RD|CTLFLAG_MPSAFE|CTLFLAG_CAPRD
*/
/*
+ * Handle an int8_t, signed or unsigned.
+ * Two cases:
+ * a variable: point arg1 at it.
+ * a constant: pass it in arg2.
+ */
+
+int
+sysctl_handle_8(SYSCTL_HANDLER_ARGS)
+{
+ int8_t tmpout;
+ int error = 0;
+
+ /*
+ * Attempt to get a coherent snapshot by making a copy of the data.
+ */
+ if (arg1)
+ tmpout = *(int8_t *)arg1;
+ else
+ tmpout = arg2;
+ error = SYSCTL_OUT(req, &tmpout, sizeof(tmpout));
+
+ if (error || !req->newptr)
+ return (error);
+
+ if (!arg1)
+ error = EPERM;
+ else
+ error = SYSCTL_IN(req, arg1, sizeof(tmpout));
+ return (error);
+}
+
+/*
+ * Handle an int16_t, signed or unsigned.
+ * Two cases:
+ * a variable: point arg1 at it.
+ * a constant: pass it in arg2.
+ */
+
+int
+sysctl_handle_16(SYSCTL_HANDLER_ARGS)
+{
+ int16_t tmpout;
+ int error = 0;
+
+ /*
+ * Attempt to get a coherent snapshot by making a copy of the data.
+ */
+ if (arg1)
+ tmpout = *(int16_t *)arg1;
+ else
+ tmpout = arg2;
+ error = SYSCTL_OUT(req, &tmpout, sizeof(tmpout));
+
+ if (error || !req->newptr)
+ return (error);
+
+ if (!arg1)
+ error = EPERM;
+ else
+ error = SYSCTL_IN(req, arg1, sizeof(tmpout));
+ return (error);
+}
+
+/*
* Handle an int, signed or unsigned.
* Two cases:
* a variable: point arg1 at it.
diff --git a/sys/kern/kern_thread.c b/sys/kern/kern_thread.c
index 3c6232c..ac96ca5 100644
--- a/sys/kern/kern_thread.c
+++ b/sys/kern/kern_thread.c
@@ -281,7 +281,7 @@ threadinit(void)
thread_zone = uma_zcreate("THREAD", sched_sizeof_thread(),
thread_ctor, thread_dtor, thread_init, thread_fini,
- 16 - 1, 0);
+ 16 - 1, UMA_ZONE_NOFREE);
tidhashtbl = hashinit(maxproc / 2, M_TIDHASH, &tidhash);
rw_init(&tidhash_lock, "tidhash");
}
diff --git a/sys/kern/kern_umtx.c b/sys/kern/kern_umtx.c
index a40aa5a..681120f 100644
--- a/sys/kern/kern_umtx.c
+++ b/sys/kern/kern_umtx.c
@@ -813,7 +813,7 @@ umtx_key_get(const void *addr, int type, int share, struct umtx_key *key)
if (vm_map_lookup(&map, (vm_offset_t)addr, VM_PROT_WRITE,
&entry, &key->info.shared.object, &pindex, &prot,
&wired) != KERN_SUCCESS) {
- return EFAULT;
+ return (EFAULT);
}
if ((share == PROCESS_SHARE) ||
@@ -1163,7 +1163,7 @@ do_wake2_umutex(struct thread *td, struct umutex *m, uint32_t flags)
int error;
int count;
- switch(flags & (UMUTEX_PRIO_INHERIT | UMUTEX_PRIO_PROTECT)) {
+ switch (flags & (UMUTEX_PRIO_INHERIT | UMUTEX_PRIO_PROTECT)) {
case 0:
type = TYPE_NORMAL_UMUTEX;
break;
@@ -3402,14 +3402,16 @@ __umtx_op_sem_wait(struct thread *td, struct _umtx_op_args *uap)
static int
__umtx_op_sem_wake(struct thread *td, struct _umtx_op_args *uap)
{
- return do_sem_wake(td, uap->obj);
+
+ return (do_sem_wake(td, uap->obj));
}
#endif
static int
__umtx_op_wake2_umutex(struct thread *td, struct _umtx_op_args *uap)
{
- return do_wake2_umutex(td, uap->obj, uap->val);
+
+ return (do_wake2_umutex(td, uap->obj, uap->val));
}
static int
@@ -3434,48 +3436,50 @@ __umtx_op_sem2_wait(struct thread *td, struct _umtx_op_args *uap)
static int
__umtx_op_sem2_wake(struct thread *td, struct _umtx_op_args *uap)
{
- return do_sem2_wake(td, uap->obj);
+
+ return (do_sem2_wake(td, uap->obj));
}
typedef int (*_umtx_op_func)(struct thread *td, struct _umtx_op_args *uap);
-static _umtx_op_func op_table[] = {
- __umtx_op_unimpl, /* UMTX_OP_RESERVED0 */
- __umtx_op_unimpl, /* UMTX_OP_RESERVED1 */
- __umtx_op_wait, /* UMTX_OP_WAIT */
- __umtx_op_wake, /* UMTX_OP_WAKE */
- __umtx_op_trylock_umutex, /* UMTX_OP_MUTEX_TRYLOCK */
- __umtx_op_lock_umutex, /* UMTX_OP_MUTEX_LOCK */
- __umtx_op_unlock_umutex, /* UMTX_OP_MUTEX_UNLOCK */
- __umtx_op_set_ceiling, /* UMTX_OP_SET_CEILING */
- __umtx_op_cv_wait, /* UMTX_OP_CV_WAIT*/
- __umtx_op_cv_signal, /* UMTX_OP_CV_SIGNAL */
- __umtx_op_cv_broadcast, /* UMTX_OP_CV_BROADCAST */
- __umtx_op_wait_uint, /* UMTX_OP_WAIT_UINT */
- __umtx_op_rw_rdlock, /* UMTX_OP_RW_RDLOCK */
- __umtx_op_rw_wrlock, /* UMTX_OP_RW_WRLOCK */
- __umtx_op_rw_unlock, /* UMTX_OP_RW_UNLOCK */
- __umtx_op_wait_uint_private, /* UMTX_OP_WAIT_UINT_PRIVATE */
- __umtx_op_wake_private, /* UMTX_OP_WAKE_PRIVATE */
- __umtx_op_wait_umutex, /* UMTX_OP_MUTEX_WAIT */
- __umtx_op_wake_umutex, /* UMTX_OP_MUTEX_WAKE */
+static const _umtx_op_func op_table[] = {
+ [UMTX_OP_RESERVED0] = __umtx_op_unimpl,
+ [UMTX_OP_RESERVED1] = __umtx_op_unimpl,
+ [UMTX_OP_WAIT] = __umtx_op_wait,
+ [UMTX_OP_WAKE] = __umtx_op_wake,
+ [UMTX_OP_MUTEX_TRYLOCK] = __umtx_op_trylock_umutex,
+ [UMTX_OP_MUTEX_LOCK] = __umtx_op_lock_umutex,
+ [UMTX_OP_MUTEX_UNLOCK] = __umtx_op_unlock_umutex,
+ [UMTX_OP_SET_CEILING] = __umtx_op_set_ceiling,
+ [UMTX_OP_CV_WAIT] = __umtx_op_cv_wait,
+ [UMTX_OP_CV_SIGNAL] = __umtx_op_cv_signal,
+ [UMTX_OP_CV_BROADCAST] = __umtx_op_cv_broadcast,
+ [UMTX_OP_WAIT_UINT] = __umtx_op_wait_uint,
+ [UMTX_OP_RW_RDLOCK] = __umtx_op_rw_rdlock,
+ [UMTX_OP_RW_WRLOCK] = __umtx_op_rw_wrlock,
+ [UMTX_OP_RW_UNLOCK] = __umtx_op_rw_unlock,
+ [UMTX_OP_WAIT_UINT_PRIVATE] = __umtx_op_wait_uint_private,
+ [UMTX_OP_WAKE_PRIVATE] = __umtx_op_wake_private,
+ [UMTX_OP_MUTEX_WAIT] = __umtx_op_wait_umutex,
+ [UMTX_OP_MUTEX_WAKE] = __umtx_op_wake_umutex,
#if defined(COMPAT_FREEBSD9) || defined(COMPAT_FREEBSD10)
- __umtx_op_sem_wait, /* UMTX_OP_SEM_WAIT */
- __umtx_op_sem_wake, /* UMTX_OP_SEM_WAKE */
+ [UMTX_OP_SEM_WAIT] = __umtx_op_sem_wait,
+ [UMTX_OP_SEM_WAKE] = __umtx_op_sem_wake,
#else
- __umtx_op_unimpl, /* UMTX_OP_SEM_WAIT */
- __umtx_op_unimpl, /* UMTX_OP_SEM_WAKE */
+ [UMTX_OP_SEM_WAIT] = __umtx_op_unimpl,
+ [UMTX_OP_SEM_WAKE] = __umtx_op_unimpl,
#endif
- __umtx_op_nwake_private, /* UMTX_OP_NWAKE_PRIVATE */
- __umtx_op_wake2_umutex, /* UMTX_OP_MUTEX_WAKE2 */
- __umtx_op_sem2_wait, /* UMTX_OP_SEM2_WAIT */
- __umtx_op_sem2_wake, /* UMTX_OP_SEM2_WAKE */
+ [UMTX_OP_NWAKE_PRIVATE] = __umtx_op_nwake_private,
+ [UMTX_OP_MUTEX_WAKE2] = __umtx_op_wake2_umutex,
+ [UMTX_OP_SEM2_WAIT] = __umtx_op_sem2_wait,
+ [UMTX_OP_SEM2_WAKE] = __umtx_op_sem2_wake,
};
int
sys__umtx_op(struct thread *td, struct _umtx_op_args *uap)
{
- if ((unsigned)uap->op < UMTX_OP_MAX)
+
+ if ((unsigned)uap->op < nitems(op_table))
return (*op_table[uap->op])(td, uap);
return (EINVAL);
}
@@ -3733,45 +3737,47 @@ __umtx_op_nwake_private32(struct thread *td, struct _umtx_op_args *uap)
return (error);
}
-static _umtx_op_func op_table_compat32[] = {
- __umtx_op_unimpl, /* UMTX_OP_RESERVED0 */
- __umtx_op_unimpl, /* UMTX_OP_RESERVED1 */
- __umtx_op_wait_compat32, /* UMTX_OP_WAIT */
- __umtx_op_wake, /* UMTX_OP_WAKE */
- __umtx_op_trylock_umutex, /* UMTX_OP_MUTEX_LOCK */
- __umtx_op_lock_umutex_compat32, /* UMTX_OP_MUTEX_TRYLOCK */
- __umtx_op_unlock_umutex, /* UMTX_OP_MUTEX_UNLOCK */
- __umtx_op_set_ceiling, /* UMTX_OP_SET_CEILING */
- __umtx_op_cv_wait_compat32, /* UMTX_OP_CV_WAIT*/
- __umtx_op_cv_signal, /* UMTX_OP_CV_SIGNAL */
- __umtx_op_cv_broadcast, /* UMTX_OP_CV_BROADCAST */
- __umtx_op_wait_compat32, /* UMTX_OP_WAIT_UINT */
- __umtx_op_rw_rdlock_compat32, /* UMTX_OP_RW_RDLOCK */
- __umtx_op_rw_wrlock_compat32, /* UMTX_OP_RW_WRLOCK */
- __umtx_op_rw_unlock, /* UMTX_OP_RW_UNLOCK */
- __umtx_op_wait_uint_private_compat32, /* UMTX_OP_WAIT_UINT_PRIVATE */
- __umtx_op_wake_private, /* UMTX_OP_WAKE_PRIVATE */
- __umtx_op_wait_umutex_compat32, /* UMTX_OP_MUTEX_WAIT */
- __umtx_op_wake_umutex, /* UMTX_OP_MUTEX_WAKE */
+static const _umtx_op_func op_table_compat32[] = {
+ [UMTX_OP_RESERVED0] = __umtx_op_unimpl,
+ [UMTX_OP_RESERVED1] = __umtx_op_unimpl,
+ [UMTX_OP_WAIT] = __umtx_op_wait_compat32,
+ [UMTX_OP_WAKE] = __umtx_op_wake,
+ [UMTX_OP_MUTEX_LOCK] = __umtx_op_trylock_umutex,
+ [UMTX_OP_MUTEX_TRYLOCK] = __umtx_op_lock_umutex_compat32,
+ [UMTX_OP_MUTEX_UNLOCK] = __umtx_op_unlock_umutex,
+ [UMTX_OP_SET_CEILING] = __umtx_op_set_ceiling,
+ [UMTX_OP_CV_WAIT] = __umtx_op_cv_wait_compat32,
+ [UMTX_OP_CV_SIGNAL] = __umtx_op_cv_signal,
+ [UMTX_OP_CV_BROADCAST] = __umtx_op_cv_broadcast,
+ [UMTX_OP_WAIT_UINT] = __umtx_op_wait_compat32,
+ [UMTX_OP_RW_RDLOCK] = __umtx_op_rw_rdlock_compat32,
+ [UMTX_OP_RW_WRLOCK] = __umtx_op_rw_wrlock_compat32,
+ [UMTX_OP_RW_UNLOCK] = __umtx_op_rw_unlock,
+ [UMTX_OP_WAIT_UINT_PRIVATE] = __umtx_op_wait_uint_private_compat32,
+ [UMTX_OP_WAKE_PRIVATE] = __umtx_op_wake_private,
+ [UMTX_OP_MUTEX_WAIT] = __umtx_op_wait_umutex_compat32,
+ [UMTX_OP_MUTEX_WAKE] = __umtx_op_wake_umutex,
#if defined(COMPAT_FREEBSD9) || defined(COMPAT_FREEBSD10)
- __umtx_op_sem_wait_compat32, /* UMTX_OP_SEM_WAIT */
- __umtx_op_sem_wake, /* UMTX_OP_SEM_WAKE */
+ [UMTX_OP_SEM_WAIT] = __umtx_op_sem_wait_compat32,
+ [UMTX_OP_SEM_WAKE] = __umtx_op_sem_wake,
#else
- __umtx_op_unimpl, /* UMTX_OP_SEM_WAIT */
- __umtx_op_unimpl, /* UMTX_OP_SEM_WAKE */
+ [UMTX_OP_SEM_WAIT] = __umtx_op_unimpl,
+ [UMTX_OP_SEM_WAKE] = __umtx_op_unimpl,
#endif
- __umtx_op_nwake_private32, /* UMTX_OP_NWAKE_PRIVATE */
- __umtx_op_wake2_umutex, /* UMTX_OP_MUTEX_WAKE2 */
- __umtx_op_sem2_wait_compat32, /* UMTX_OP_SEM2_WAIT */
- __umtx_op_sem2_wake, /* UMTX_OP_SEM2_WAKE */
+ [UMTX_OP_NWAKE_PRIVATE] = __umtx_op_nwake_private32,
+ [UMTX_OP_MUTEX_WAKE2] = __umtx_op_wake2_umutex,
+ [UMTX_OP_SEM2_WAIT] = __umtx_op_sem2_wait_compat32,
+ [UMTX_OP_SEM2_WAKE] = __umtx_op_sem2_wake,
};
int
freebsd32_umtx_op(struct thread *td, struct freebsd32_umtx_op_args *uap)
{
- if ((unsigned)uap->op < UMTX_OP_MAX)
+
+ if ((unsigned)uap->op < nitems(op_table_compat32)) {
return (*op_table_compat32[uap->op])(td,
- (struct _umtx_op_args *)uap);
+ (struct _umtx_op_args *)uap);
+ }
return (EINVAL);
}
#endif
diff --git a/sys/kern/makesyscalls.sh b/sys/kern/makesyscalls.sh
index ef15174..75289e5 100644
--- a/sys/kern/makesyscalls.sh
+++ b/sys/kern/makesyscalls.sh
@@ -411,6 +411,10 @@ s/\$//g
printf("\t\tuarg[%d] = (intptr_t) p->%s; /* %s */\n", \
i - 1, \
argname[i], arg) > systrace
+ else if (arg == "union l_semun")
+ printf("\t\tuarg[%d] = p->%s.buf; /* %s */\n", \
+ i - 1, \
+ argname[i], arg) > systrace
else if (substr(arg, 1, 1) == "u" || arg == "size_t")
printf("\t\tuarg[%d] = p->%s; /* %s */\n", \
i - 1, \
diff --git a/sys/kern/subr_busdma_bufalloc.c b/sys/kern/subr_busdma_bufalloc.c
index b0b1ba8..c8980e1 100644
--- a/sys/kern/subr_busdma_bufalloc.c
+++ b/sys/kern/subr_busdma_bufalloc.c
@@ -94,8 +94,8 @@ busdma_bufalloc_create(const char *name, bus_size_t minimum_alignment,
for (i = 0, bz = ba->buf_zones, cursize = ba->min_size;
i < nitems(ba->buf_zones) && cursize <= MAX_ZONE_BUFSIZE;
++i, ++bz, cursize <<= 1) {
- snprintf(bz->name, sizeof(bz->name), "dma %.10s %lu",
- name, cursize);
+ snprintf(bz->name, sizeof(bz->name), "dma %.10s %ju",
+ name, (uintmax_t)cursize);
bz->size = cursize;
bz->umazone = uma_zcreate(bz->name, bz->size,
NULL, NULL, NULL, NULL, bz->size - 1, zcreate_flags);
diff --git a/sys/kern/subr_syscall.c b/sys/kern/subr_syscall.c
index 71f3d59..c076326 100644
--- a/sys/kern/subr_syscall.c
+++ b/sys/kern/subr_syscall.c
@@ -176,6 +176,9 @@ syscallret(struct thread *td, int error, struct syscall_args *sa)
struct proc *p, *p2;
int traced;
+ KASSERT((td->td_pflags & TDP_FORKING) == 0,
+ ("fork() did not clear TDP_FORKING upon completion"));
+
p = td->td_proc;
/*
diff --git a/sys/kern/sys_process.c b/sys/kern/sys_process.c
index e80ff3c..47fbbc1 100644
--- a/sys/kern/sys_process.c
+++ b/sys/kern/sys_process.c
@@ -96,7 +96,7 @@ struct ptrace_lwpinfo32 {
sigset_t pl_siglist; /* LWP pending signal */
struct siginfo32 pl_siginfo; /* siginfo for signal */
char pl_tdname[MAXCOMLEN + 1]; /* LWP name. */
- int pl_child_pid; /* New child pid */
+ pid_t pl_child_pid; /* New child pid */
u_int pl_syscall_code;
u_int pl_syscall_narg;
};
@@ -443,7 +443,7 @@ ptrace_vm_entry(struct thread *td, struct proc *p, struct ptrace_vm_entry *pve)
}
#ifdef COMPAT_FREEBSD32
-static int
+static int
ptrace_vm_entry32(struct thread *td, struct proc *p,
struct ptrace_vm_entry32 *pve32)
{
@@ -744,12 +744,23 @@ kern_ptrace(struct thread *td, int req, pid_t pid, void *addr, int data)
*/
switch (req) {
case PT_TRACE_ME:
- /* Always legal. */
+ /*
+ * Always legal, when there is a parent process which
+ * could trace us. Otherwise, reject.
+ */
+ if ((p->p_flag & P_TRACED) != 0) {
+ error = EBUSY;
+ goto fail;
+ }
+ if (p->p_pptr == initproc) {
+ error = EPERM;
+ goto fail;
+ }
break;
case PT_ATTACH:
/* Self */
- if (p->p_pid == td->td_proc->p_pid) {
+ if (p == td->td_proc) {
error = EINVAL;
goto fail;
}
diff --git a/sys/kern/syscalls.c b/sys/kern/syscalls.c
index 3c563c9..1edb193 100644
--- a/sys/kern/syscalls.c
+++ b/sys/kern/syscalls.c
@@ -3,7 +3,7 @@
*
* DO NOT EDIT-- this file is automatically generated.
* $FreeBSD$
- * created from FreeBSD: head/sys/kern/syscalls.master 281714 2015-04-18 21:50:13Z kib
+ * created from FreeBSD: head/sys/kern/syscalls.master 285388 2015-07-11 15:22:11Z adrian
*/
const char *syscallnames[] = {
diff --git a/sys/kern/vfs_aio.c b/sys/kern/vfs_aio.c
index e9fdc99..122dff7 100644
--- a/sys/kern/vfs_aio.c
+++ b/sys/kern/vfs_aio.c
@@ -2494,8 +2494,11 @@ kern_aio_waitcomplete(struct thread *td, struct aiocb **aiocbp,
ops->store_aiocb(aiocbp, NULL);
- timo = 0;
- if (ts) {
+ if (ts == NULL) {
+ timo = 0;
+ } else if (ts->tv_sec == 0 && ts->tv_nsec == 0) {
+ timo = -1;
+ } else {
if ((ts->tv_nsec < 0) || (ts->tv_nsec >= 1000000000))
return (EINVAL);
@@ -2513,6 +2516,10 @@ kern_aio_waitcomplete(struct thread *td, struct aiocb **aiocbp,
cb = NULL;
AIO_LOCK(ki);
while ((cb = TAILQ_FIRST(&ki->kaio_done)) == NULL) {
+ if (timo == -1) {
+ error = EWOULDBLOCK;
+ break;
+ }
ki->kaio_flags |= KAIO_WAKEUP;
error = msleep(&p->p_aioinfo, AIO_MTX(ki), PRIBIO | PCATCH,
"aiowc", timo);
diff --git a/sys/kern/vfs_bio.c b/sys/kern/vfs_bio.c
index 4cc9a4e..1e51db3 100644
--- a/sys/kern/vfs_bio.c
+++ b/sys/kern/vfs_bio.c
@@ -2266,19 +2266,17 @@ brelse(struct buf *bp)
bdirty(bp);
}
if (bp->b_iocmd == BIO_WRITE && (bp->b_ioflags & BIO_ERROR) &&
- bp->b_error == EIO && !(bp->b_flags & B_INVAL)) {
+ !(bp->b_flags & B_INVAL)) {
/*
* Failed write, redirty. Must clear BIO_ERROR to prevent
- * pages from being scrapped. If the error is anything
- * other than an I/O error (EIO), assume that retrying
- * is futile.
+ * pages from being scrapped.
*/
bp->b_ioflags &= ~BIO_ERROR;
bdirty(bp);
} else if ((bp->b_flags & (B_NOCACHE | B_INVAL)) ||
(bp->b_ioflags & BIO_ERROR) || (bp->b_bufsize <= 0)) {
/*
- * Either a failed I/O or we were asked to free or not
+ * Either a failed read I/O or we were asked to free or not
* cache the buffer.
*/
bp->b_flags |= B_INVAL;
@@ -2885,6 +2883,7 @@ getnewbuf(struct vnode *vp, int slpflag, int slptimeo, int maxsize, int gbflags)
struct buf *bp;
bool metadata, reserved;
+ bp = NULL;
KASSERT((gbflags & (GB_UNMAPPED | GB_KVAALLOC)) != GB_KVAALLOC,
("GB_KVAALLOC only makes sense with GB_UNMAPPED"));
if (!unmapped_buf_allowed)
diff --git a/sys/kern/vfs_mountroot.c b/sys/kern/vfs_mountroot.c
index aecddbd..cf24253 100644
--- a/sys/kern/vfs_mountroot.c
+++ b/sys/kern/vfs_mountroot.c
@@ -88,6 +88,8 @@ __FBSDID("$FreeBSD$");
static int parse_mount(char **);
static struct mntarg *parse_mountroot_options(struct mntarg *, const char *);
+static int sysctl_vfs_root_mount_hold(SYSCTL_HANDLER_ARGS);
+static int vfs_mountroot_wait_if_neccessary(const char *fs, const char *dev);
/*
* The vnode of the system's root (/ in the filesystem, without chroot
@@ -129,6 +131,35 @@ static int root_mount_complete;
static int root_mount_timeout = 3;
TUNABLE_INT("vfs.mountroot.timeout", &root_mount_timeout);
+SYSCTL_PROC(_vfs, OID_AUTO, root_mount_hold,
+ CTLTYPE_STRING | CTLFLAG_RD | CTLFLAG_MPSAFE,
+ NULL, 0, sysctl_vfs_root_mount_hold, "A",
+ "List of root mount hold tokens");
+
+static int
+sysctl_vfs_root_mount_hold(SYSCTL_HANDLER_ARGS)
+{
+ struct sbuf sb;
+ struct root_hold_token *h;
+ int error;
+
+ sbuf_new(&sb, NULL, 256, SBUF_AUTOEXTEND | SBUF_INCLUDENUL);
+
+ mtx_lock(&root_holds_mtx);
+ LIST_FOREACH(h, &root_holds, list) {
+ if (h != LIST_FIRST(&root_holds))
+ sbuf_putc(&sb, ' ');
+ sbuf_printf(&sb, "%s", h->who);
+ }
+ mtx_unlock(&root_holds_mtx);
+
+ error = sbuf_finish(&sb);
+ if (error == 0)
+ error = SYSCTL_OUT(req, sbuf_data(&sb), sbuf_len(&sb));
+ sbuf_delete(&sb);
+ return (error);
+}
+
struct root_hold_token *
root_mount_hold(const char *identifier)
{
@@ -673,7 +704,7 @@ parse_mount(char **conf)
char *errmsg;
struct mntarg *ma;
char *dev, *fs, *opts, *tok;
- int delay, error, timeout;
+ int error;
error = parse_token(conf, &tok);
if (error)
@@ -710,20 +741,9 @@ parse_mount(char **conf)
goto out;
}
- if (strcmp(fs, "zfs") != 0 && strstr(fs, "nfs") == NULL &&
- dev[0] != '\0' && !parse_mount_dev_present(dev)) {
- printf("mountroot: waiting for device %s ...\n", dev);
- delay = hz / 10;
- timeout = root_mount_timeout * hz;
- do {
- pause("rmdev", delay);
- timeout -= delay;
- } while (timeout > 0 && !parse_mount_dev_present(dev));
- if (timeout <= 0) {
- error = ENODEV;
- goto out;
- }
- }
+ error = vfs_mountroot_wait_if_neccessary(fs, dev);
+ if (error != 0)
+ goto out;
ma = NULL;
ma = mount_arg(ma, "fstype", fs, -1);
@@ -931,6 +951,51 @@ vfs_mountroot_wait(void)
}
}
+static int
+vfs_mountroot_wait_if_neccessary(const char *fs, const char *dev)
+{
+ int delay, timeout;
+
+ /*
+ * In case of ZFS and NFS we don't have a way to wait for
+ * specific device.
+ */
+ if (strcmp(fs, "zfs") == 0 || strstr(fs, "nfs") != NULL ||
+ dev[0] == '\0') {
+ vfs_mountroot_wait();
+ return (0);
+ }
+
+ /*
+ * Otherwise, no point in waiting if the device is already there.
+ * Note that we must wait for GEOM to finish reconfiguring itself,
+ * eg for geom_part(4) to finish tasting.
+ */
+ DROP_GIANT();
+ g_waitidle();
+ PICKUP_GIANT();
+ if (parse_mount_dev_present(dev))
+ return (0);
+
+ /*
+ * No luck. Let's wait. This code looks weird, but it's that way
+ * to behave exactly as it used to work before.
+ */
+ vfs_mountroot_wait();
+ printf("mountroot: waiting for device %s...\n", dev);
+ delay = hz / 10;
+ timeout = root_mount_timeout * hz;
+ do {
+ pause("rmdev", delay);
+ timeout -= delay;
+ } while (timeout > 0 && !parse_mount_dev_present(dev));
+
+ if (timeout <= 0)
+ return (ENODEV);
+
+ return (0);
+}
+
void
vfs_mountroot(void)
{
@@ -942,8 +1007,6 @@ vfs_mountroot(void)
td = curthread;
- vfs_mountroot_wait();
-
sb = sbuf_new_auto();
vfs_mountroot_conf0(sb);
sbuf_finish(sb);
diff --git a/sys/libkern/ffs.c b/sys/libkern/ffs.c
index 057ee3d..6bd9c7c 100644
--- a/sys/libkern/ffs.c
+++ b/sys/libkern/ffs.c
@@ -10,7 +10,7 @@
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
- * 4. Neither the name of the University nor the names of its contributors
+ * 3. Neither the name of the University nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
diff --git a/sys/libkern/ffsl.c b/sys/libkern/ffsl.c
index 0aa005c..a0278b1 100644
--- a/sys/libkern/ffsl.c
+++ b/sys/libkern/ffsl.c
@@ -10,7 +10,7 @@
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
- * 4. Neither the name of the University nor the names of its contributors
+ * 3. Neither the name of the University nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
diff --git a/sys/arm/samsung/s3c2xx0/board_ln2410sbc.c b/sys/libkern/ffsll.c
index d0f474e..17d6e47 100644
--- a/sys/arm/samsung/s3c2xx0/board_ln2410sbc.c
+++ b/sys/libkern/ffsll.c
@@ -1,6 +1,6 @@
-/*
- * Copyright (C) 2009 Andrew Turner
- * All rights reserved.
+/*-
+ * Copyright (c) 1990, 1993
+ * The Regents of the University of California. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -10,11 +10,14 @@
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the University nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
*
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
@@ -22,24 +25,24 @@
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
- *
*/
#include <sys/cdefs.h>
__FBSDID("$FreeBSD$");
-#include <sys/param.h>
-#include <sys/systm.h>
-
-#include <arm/samsung/s3c2xx0/s3c2410reg.h>
-#include <arm/samsung/s3c2xx0/s3c2xx0board.h>
-extern vm_offset_t s3c2410_uart_vaddr;
+#include <sys/libkern.h>
-long
-board_init(void)
+/*
+ * Find First Set bit
+ */
+int
+ffsll(long long mask)
{
- s3c2410_uart_vaddr = S3C24X0_UART_BASE(0);
+ int bit;
- return (64 * 1024 * 1024);
+ if (mask == 0)
+ return (0);
+ for (bit = 1; !(mask & 1); bit++)
+ mask = (unsigned long long)mask >> 1;
+ return (bit);
}
-
diff --git a/sys/libkern/fls.c b/sys/libkern/fls.c
index 202d952..46b7481 100644
--- a/sys/libkern/fls.c
+++ b/sys/libkern/fls.c
@@ -10,7 +10,7 @@
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
- * 4. Neither the name of the University nor the names of its contributors
+ * 3. Neither the name of the University nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
diff --git a/sys/libkern/flsl.c b/sys/libkern/flsl.c
index 73533c4..04c3f4f 100644
--- a/sys/libkern/flsl.c
+++ b/sys/libkern/flsl.c
@@ -10,7 +10,7 @@
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
- * 4. Neither the name of the University nor the names of its contributors
+ * 3. Neither the name of the University nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
diff --git a/sys/libkern/flsll.c b/sys/libkern/flsll.c
index 0629480..ed5ec92 100644
--- a/sys/libkern/flsll.c
+++ b/sys/libkern/flsll.c
@@ -10,7 +10,7 @@
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
- * 4. Neither the name of the University nor the names of its contributors
+ * 3. Neither the name of the University nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
*
diff --git a/sys/mips/atheros/if_arge.c b/sys/mips/atheros/if_arge.c
index 446cd64..36362bc 100644
--- a/sys/mips/atheros/if_arge.c
+++ b/sys/mips/atheros/if_arge.c
@@ -277,6 +277,28 @@ arge_probe(device_t dev)
return (BUS_PROBE_NOWILDCARD);
}
+#ifdef ARGE_DEBUG
+static void
+arge_attach_intr_sysctl(device_t dev, struct sysctl_oid_list *parent)
+{
+ struct arge_softc *sc = device_get_softc(dev);
+ struct sysctl_ctx_list *ctx = device_get_sysctl_ctx(dev);
+ struct sysctl_oid *tree = device_get_sysctl_tree(dev);
+ struct sysctl_oid_list *child = SYSCTL_CHILDREN(tree);
+ char sn[8];
+ int i;
+
+ tree = SYSCTL_ADD_NODE(ctx, parent, OID_AUTO, "intr",
+ CTLFLAG_RD, NULL, "Interrupt statistics");
+ child = SYSCTL_CHILDREN(tree);
+ for (i = 0; i < 32; i++) {
+ snprintf(sn, sizeof(sn), "%d", i);
+ SYSCTL_ADD_UINT(ctx, child, OID_AUTO, sn, CTLFLAG_RD,
+ &sc->intr_stats.count[i], 0, "");
+ }
+}
+#endif
+
static void
arge_attach_sysctl(device_t dev)
{
@@ -288,6 +310,7 @@ arge_attach_sysctl(device_t dev)
SYSCTL_ADD_INT(ctx, SYSCTL_CHILDREN(tree), OID_AUTO,
"debug", CTLFLAG_RW, &sc->arge_debug, 0,
"arge interface debugging flags");
+ arge_attach_intr_sysctl(dev, SYSCTL_CHILDREN(tree));
#endif
SYSCTL_ADD_UINT(ctx, SYSCTL_CHILDREN(tree), OID_AUTO,
@@ -653,6 +676,11 @@ arge_attach(device_t dev)
* Hardware workarounds.
*/
switch (ar71xx_soc) {
+ case AR71XX_SOC_AR9330:
+ case AR71XX_SOC_AR9331:
+ case AR71XX_SOC_AR9341:
+ case AR71XX_SOC_AR9342:
+ case AR71XX_SOC_AR9344:
case AR71XX_SOC_QCA9556:
case AR71XX_SOC_QCA9558:
/* Arbitrary alignment */
@@ -1039,31 +1067,47 @@ arge_hinted_child(device_t bus, const char *dname, int dunit)
}
static int
+arge_mdio_busy(struct arge_softc *sc)
+{
+ int i,result;
+
+ for (i = 0; i < ARGE_MII_TIMEOUT; i++) {
+ DELAY(5);
+ ARGE_MDIO_BARRIER_READ(sc);
+ result = ARGE_MDIO_READ(sc, AR71XX_MAC_MII_INDICATOR);
+ if (! result)
+ return (0);
+ DELAY(5);
+ }
+ return (-1);
+}
+
+static int
arge_miibus_readreg(device_t dev, int phy, int reg)
{
struct arge_softc * sc = device_get_softc(dev);
- int i, result;
+ int result;
uint32_t addr = (phy << MAC_MII_PHY_ADDR_SHIFT)
| (reg & MAC_MII_REG_MASK);
mtx_lock(&miibus_mtx);
+ ARGE_MDIO_BARRIER_RW(sc);
ARGE_MDIO_WRITE(sc, AR71XX_MAC_MII_CMD, MAC_MII_CMD_WRITE);
+ ARGE_MDIO_BARRIER_WRITE(sc);
ARGE_MDIO_WRITE(sc, AR71XX_MAC_MII_ADDR, addr);
+ ARGE_MDIO_BARRIER_WRITE(sc);
ARGE_MDIO_WRITE(sc, AR71XX_MAC_MII_CMD, MAC_MII_CMD_READ);
- i = ARGE_MII_TIMEOUT;
- while ((ARGE_MDIO_READ(sc, AR71XX_MAC_MII_INDICATOR) &
- MAC_MII_INDICATOR_BUSY) && (i--))
- DELAY(5);
-
- if (i < 0) {
+ if (arge_mdio_busy(sc) != 0) {
mtx_unlock(&miibus_mtx);
ARGEDEBUG(sc, ARGE_DBG_MII, "%s timedout\n", __func__);
/* XXX: return ERRNO istead? */
return (-1);
}
+ ARGE_MDIO_BARRIER_READ(sc);
result = ARGE_MDIO_READ(sc, AR71XX_MAC_MII_STATUS) & MAC_MII_STATUS_MASK;
+ ARGE_MDIO_BARRIER_RW(sc);
ARGE_MDIO_WRITE(sc, AR71XX_MAC_MII_CMD, MAC_MII_CMD_WRITE);
mtx_unlock(&miibus_mtx);
@@ -1078,7 +1122,6 @@ static int
arge_miibus_writereg(device_t dev, int phy, int reg, int data)
{
struct arge_softc * sc = device_get_softc(dev);
- int i;
uint32_t addr =
(phy << MAC_MII_PHY_ADDR_SHIFT) | (reg & MAC_MII_REG_MASK);
@@ -1086,22 +1129,20 @@ arge_miibus_writereg(device_t dev, int phy, int reg, int data)
phy, reg, data);
mtx_lock(&miibus_mtx);
+ ARGE_MDIO_BARRIER_RW(sc);
ARGE_MDIO_WRITE(sc, AR71XX_MAC_MII_ADDR, addr);
+ ARGE_MDIO_BARRIER_WRITE(sc);
ARGE_MDIO_WRITE(sc, AR71XX_MAC_MII_CONTROL, data);
+ ARGE_MDIO_BARRIER_WRITE(sc);
- i = ARGE_MII_TIMEOUT;
- while ((ARGE_MDIO_READ(sc, AR71XX_MAC_MII_INDICATOR) &
- MAC_MII_INDICATOR_BUSY) && (i--))
- DELAY(5);
-
- mtx_unlock(&miibus_mtx);
-
- if (i < 0) {
+ if (arge_mdio_busy(sc) != 0) {
+ mtx_unlock(&miibus_mtx);
ARGEDEBUG(sc, ARGE_DBG_MII, "%s timedout\n", __func__);
/* XXX: return ERRNO istead? */
return (-1);
}
+ mtx_unlock(&miibus_mtx);
return (0);
}
@@ -1473,7 +1514,7 @@ arge_encap(struct arge_softc *sc, struct mbuf **m_head)
}
/* Check number of available descriptors. */
- if (sc->arge_cdata.arge_tx_cnt + nsegs >= (ARGE_TX_RING_COUNT - 1)) {
+ if (sc->arge_cdata.arge_tx_cnt + nsegs >= (ARGE_TX_RING_COUNT - 2)) {
bus_dmamap_unload(sc->arge_cdata.arge_tx_tag, txd->tx_dmamap);
sc->stats.tx_pkts_nosegs++;
return (ENOBUFS);
@@ -1486,12 +1527,27 @@ arge_encap(struct arge_softc *sc, struct mbuf **m_head)
/*
* Make a list of descriptors for this packet. DMA controller will
* walk through it while arge_link is not zero.
+ *
+ * Since we're in a endless circular buffer, ensure that
+ * the first descriptor in a multi-descriptor ring is always
+ * set to EMPTY, then un-do it when we're done populating.
*/
prev_prod = prod;
desc = prev_desc = NULL;
for (i = 0; i < nsegs; i++) {
+ uint32_t tmp;
+
desc = &sc->arge_rdata.arge_tx_ring[prod];
- desc->packet_ctrl = ARGE_DMASIZE(txsegs[i].ds_len);
+
+ /*
+ * Set DESC_EMPTY so the hardware (hopefully) stops at this
+ * point. We don't want it to start transmitting descriptors
+ * before we've finished fleshing this out.
+ */
+ tmp = ARGE_DMASIZE(txsegs[i].ds_len);
+ if (i == 0)
+ tmp |= ARGE_DESC_EMPTY;
+ desc->packet_ctrl = tmp;
/* XXX Note: only relevant for older MACs; but check length! */
if ((sc->arge_hw_flags & ARGE_HW_FLG_TX_DESC_ALIGN_4BYTE) &&
@@ -1512,11 +1568,20 @@ arge_encap(struct arge_softc *sc, struct mbuf **m_head)
/* Update producer index. */
sc->arge_cdata.arge_tx_prod = prod;
+ /*
+ * The descriptors are updated, so enable the first one.
+ */
+ desc = &sc->arge_rdata.arge_tx_ring[prev_prod];
+ desc->packet_ctrl &= ~ ARGE_DESC_EMPTY;
+
/* Sync descriptors. */
bus_dmamap_sync(sc->arge_cdata.arge_tx_ring_tag,
sc->arge_cdata.arge_tx_ring_map,
BUS_DMASYNC_PREREAD | BUS_DMASYNC_PREWRITE);
+ /* Flush writes */
+ ARGE_BARRIER_WRITE(sc);
+
/* Start transmitting */
ARGEDEBUG(sc, ARGE_DBG_TX, "%s: setting DMA_TX_CONTROL_EN\n",
__func__);
@@ -2165,6 +2230,7 @@ arge_newbuf(struct arge_softc *sc, int idx)
bus_dmamap_t map;
int nsegs;
+ /* XXX TODO: should just allocate an explicit 2KiB buffer */
m = m_getcl(M_NOWAIT, MT_DATA, M_PKTHDR);
if (m == NULL)
return (ENOBUFS);
@@ -2174,7 +2240,15 @@ arge_newbuf(struct arge_softc *sc, int idx)
* Add extra space to "adjust" (copy) the packet back to be aligned
* for purposes of IPv4/IPv6 header contents.
*/
- m_adj(m, sizeof(uint64_t));
+ if (sc->arge_hw_flags & ARGE_HW_FLG_RX_DESC_ALIGN_4BYTE)
+ m_adj(m, sizeof(uint64_t));
+ /*
+ * If it's a 1-byte aligned buffer, then just offset it two bytes
+ * and that will give us a hopefully correctly DWORD aligned
+ * L3 payload - and we won't have to undo it afterwards.
+ */
+ else if (sc->arge_hw_flags & ARGE_HW_FLG_RX_DESC_ALIGN_1BYTE)
+ m_adj(m, sizeof(uint16_t));
if (bus_dmamap_load_mbuf_sg(sc->arge_cdata.arge_rx_tag,
sc->arge_cdata.arge_rx_sparemap, m, segs, &nsegs, 0) != 0) {
@@ -2205,6 +2279,13 @@ arge_newbuf(struct arge_softc *sc, int idx)
return (0);
}
+/*
+ * Move the data backwards 16 bits to (hopefully!) ensure the
+ * IPv4/IPv6 payload is aligned.
+ *
+ * This is required for earlier hardware where the RX path
+ * requires DWORD aligned buffers.
+ */
static __inline void
arge_fixup_rx(struct mbuf *m)
{
@@ -2344,7 +2425,13 @@ arge_rx_locked(struct arge_softc *sc)
BUS_DMASYNC_POSTREAD);
m = rxd->rx_m;
- arge_fixup_rx(m);
+ /*
+ * If the MAC requires 4 byte alignment then the RX setup
+ * routine will have pre-offset things; so un-offset it here.
+ */
+ if (sc->arge_hw_flags & ARGE_HW_FLG_RX_DESC_ALIGN_4BYTE)
+ arge_fixup_rx(m);
+
m->m_pkthdr.rcvif = ifp;
/* Skip 4 bytes of CRC */
m->m_pkthdr.len = m->m_len = packet_len - ETHER_CRC_LEN;
@@ -2413,6 +2500,9 @@ arge_intr(void *arg)
struct arge_softc *sc = arg;
uint32_t status;
struct ifnet *ifp = sc->arge_ifp;
+#ifdef ARGE_DEBUG
+ int i;
+#endif
status = ARGE_READ(sc, AR71XX_DMA_INTR_STATUS);
status |= sc->arge_intr_status;
@@ -2429,6 +2519,14 @@ arge_intr(void *arg)
return;
}
+#ifdef ARGE_DEBUG
+ for (i = 0; i < 32; i++) {
+ if (status & (1U << i)) {
+ sc->intr_stats.count[i]++;
+ }
+ }
+#endif
+
if (status & DMA_INTR_RX_BUS_ERROR) {
ARGE_WRITE(sc, AR71XX_DMA_RX_STATUS, DMA_RX_STATUS_BUS_ERROR);
device_printf(sc->arge_dev, "RX bus error");
diff --git a/sys/mips/atheros/if_argevar.h b/sys/mips/atheros/if_argevar.h
index ae94588..b58acb0 100644
--- a/sys/mips/atheros/if_argevar.h
+++ b/sys/mips/atheros/if_argevar.h
@@ -68,6 +68,7 @@
#define ARGE_WRITE(sc, reg, val) do { \
bus_write_4(sc->arge_res, (reg), (val)); \
ARGE_BARRIER_WRITE((sc)); \
+ ARGE_READ((sc), (reg)); \
} while (0)
#define ARGE_READ(sc, reg) bus_read_4(sc->arge_res, (reg))
@@ -87,15 +88,12 @@
* FIFO(s) before we continue issuing MDIO bus updates.
*/
#define ARGE_MDIO_WRITE(_sc, _reg, _val) \
- do { \
- ARGE_WRITE((_sc), (_reg), (_val)); \
- ARGE_READ((_sc), (_reg)); \
- } while (0)
+ ARGE_WRITE((_sc), (_reg), (_val))
#define ARGE_MDIO_READ(_sc, _reg) \
ARGE_READ((_sc), (_reg))
#define ARGE_MDIO_BARRIER_READ(_sc) ARGE_BARRIER_READ(_sc)
#define ARGE_MDIO_BARRIER_WRITE(_sc) ARGE_BARRIER_WRITE(_sc)
-#define ARGE_MDIO_BARRIER_RW(_sc) ARGE_BARRIER_READ_RW(_sc)
+#define ARGE_MDIO_BARRIER_RW(_sc) ARGE_BARRIER_RW(_sc)
#define ARGE_DESC_EMPTY (1U << 31)
#define ARGE_DESC_MORE (1 << 24)
@@ -214,6 +212,9 @@ struct arge_softc {
uint32_t intr_stray2;
uint32_t intr_ok;
} stats;
+ struct {
+ uint32_t count[32];
+ } intr_stats;
};
#endif /* __IF_ARGEVAR_H__ */
diff --git a/sys/mips/conf/TL-WR740Nv4 b/sys/mips/conf/TL-WR740Nv4
new file mode 100644
index 0000000..807e7c7
--- /dev/null
+++ b/sys/mips/conf/TL-WR740Nv4
@@ -0,0 +1,53 @@
+#
+# TP-Link WR740N v4
+#
+# * AR9330 SoC
+# * 32MB RAM
+# * 4MB flash
+# * Integrated 1x1 2GHz wifi and 10/100 bridge
+#
+# $FreeBSD$
+#
+
+# Include the default AR933x parameters
+include "AR933X_BASE"
+
+ident TL-WR740Nv4
+
+# Override hints with board values
+hints "TL-WR740Nv4.hints"
+
+# Board memory - 32MB
+options AR71XX_REALMEM=(32*1024*1024)
+
+# i2c GPIO bus
+#device gpioiic
+#device iicbb
+#device iicbus
+#device iic
+
+# Options required for miiproxy and mdiobus
+options ARGE_MDIO # Export an MDIO bus separate from arge
+device miiproxy # MDIO bus <-> MII PHY rendezvous
+
+device etherswitch
+device arswitch
+
+# read MSDOS formatted disks - USB
+#options MSDOSFS
+
+# Enable the uboot environment stuff rather then the
+# redboot stuff.
+options AR71XX_ENV_UBOOT
+
+# uzip - to boot natively from flash
+device geom_uncompress
+options GEOM_UNCOMPRESS
+
+# Used for the static uboot partition map
+device geom_map
+
+# Boot off of the rootfs, as defined in the geom_map setup.
+# options ROOTDEVNAME=\"ufs:map/rootfs.uncompress\"
+# Note: we don't fit in 4MB flash, so the rootfs must be on USB for now
+options ROOTDEVNAME=\"ufs:da0\"
diff --git a/sys/mips/conf/TL-WR740Nv4.hints b/sys/mips/conf/TL-WR740Nv4.hints
new file mode 100644
index 0000000..b284a3e
--- /dev/null
+++ b/sys/mips/conf/TL-WR740Nv4.hints
@@ -0,0 +1,87 @@
+#
+# This file adds to the values in AR933X_BASE.hints
+#
+# $FreeBSD$
+
+# mdiobus on arge1
+hint.argemdio.0.at="nexus0"
+hint.argemdio.0.maddr=0x1a000000
+hint.argemdio.0.msize=0x1000
+hint.argemdio.0.order=0
+
+# Embedded Atheros Switch
+hint.arswitch.0.at="mdio0"
+
+# XXX this should really say it's an AR933x switch, as there
+# are some vlan specific differences here!
+hint.arswitch.0.is_7240=1
+hint.arswitch.0.numphys=4
+hint.arswitch.0.phy4cpu=1 # phy 4 is a "CPU" separate PHY
+hint.arswitch.0.is_rgmii=0
+hint.arswitch.0.is_gmii=1 # arge1 <-> switch PHY is GMII
+
+# arge0 - MII, autoneg, phy(4)
+hint.arge.0.phymask=0x10 # PHY4
+hint.arge.0.mdio=mdioproxy1 # .. off of the switch mdiobus
+hint.arge.0.eeprommac=0x1fff0000
+
+# arge1 - GMII, 1000/full
+hint.arge.1.phymask=0x0 # No directly mapped PHYs
+hint.arge.1.media=1000
+hint.arge.1.fduplex=1
+hint.arge.1.eeprommac=0x1fff0006
+
+# Where the ART is - last 64k in the flash
+# 0x9fff1000 ?
+hint.ath.0.eepromaddr=0x1fff0000
+hint.ath.0.eepromsize=16384
+
+# The TL-WR740N v4 is a default AP121 - it comes with 4MB flash.
+#
+# The boot parameters:
+# bootargs=console=ttyS0,115200 root=31:02 rootfstype=squashfs init=/sbin/init
+# mtdparts=ar7240-nor0:256k(u-boot),64k(u-boot-env),2752k(rootfs),
+# 896k(uImage),64k(NVRAM),64k(ART)
+# bootcmd=bootm 0x9f020000
+#
+# .. so uboot is 128K, there's no ubootenv, and the runtime image starts
+# at 0x9f020000.
+
+hint.map.0.at="flash/spi0"
+hint.map.0.start=0x00000000
+hint.map.0.end=0x000020000
+hint.map.0.name="uboot"
+hint.map.0.readonly=1
+
+hint.map.1.at="flash/spi0"
+hint.map.1.start=0x00020000
+hint.map.1.end=0x003e0000
+hint.map.1.name="kernel"
+hint.map.1.readonly=0
+
+hint.map.2.at="flash/spi0"
+hint.map.2.start=0x003e0000
+hint.map.2.end=0x003f0000
+hint.map.2.name="cfg"
+hint.map.2.readonly=0
+
+# This is radio calibration section. It is (or should be!) unique
+# for each board, to take into account thermal and electrical differences
+# as well as the regulatory compliance data.
+#
+hint.map.3.at="flash/spi0"
+hint.map.3.start=0x003f0000
+hint.map.3.end=0x0x400000
+hint.map.3.name="art"
+hint.map.3.readonly=1
+
+# GPIO specific configuration block
+
+# Don't flip on anything that isn't already enabled.
+# This includes leaving the SPI CS1/CS2 pins as GPIO pins as they're
+# not used here.
+hint.gpio.0.function_set=0x00000000
+hint.gpio.0.function_clear=0x00000000
+
+# These are the GPIO LEDs and buttons which can be software controlled.
+# hint.gpio.0.pinmask=0x00fc1803
diff --git a/sys/mips/conf/TP-MR3020 b/sys/mips/conf/TP-MR3020
index b388e9b..7c0c5ab 100644
--- a/sys/mips/conf/TP-MR3020
+++ b/sys/mips/conf/TP-MR3020
@@ -27,6 +27,9 @@ hints "TP-MR3020.hints"
# Board memory - 32MB
options AR71XX_REALMEM=(32*1024*1024)
+# Disable support for paging
+options NO_SWAPPING
+
# i2c GPIO bus
device gpioiic
device iicbb
diff --git a/sys/mips/include/cpuregs.h b/sys/mips/include/cpuregs.h
index d351580..54a9234 100644
--- a/sys/mips/include/cpuregs.h
+++ b/sys/mips/include/cpuregs.h
@@ -151,7 +151,7 @@
#if defined(CPU_MIPS74KC)
#define MIPS_CCA_UNCACHED 0x02
-#define MIPS_CCA_CACHED 0x00
+#define MIPS_CCA_CACHED 0x03
#endif
#ifndef MIPS_CCA_UNCACHED
diff --git a/sys/mips/include/pmap.h b/sys/mips/include/pmap.h
index 15b07d3..8392d8a 100644
--- a/sys/mips/include/pmap.h
+++ b/sys/mips/include/pmap.h
@@ -74,6 +74,7 @@ struct md_page {
};
#define PV_TABLE_REF 0x02 /* referenced */
+#define PV_MEMATTR_UNCACHEABLE 0x04
#define ASID_BITS 8
#define ASIDGEN_BITS (32 - ASID_BITS)
@@ -165,7 +166,6 @@ extern vm_paddr_t dump_avail[PHYS_AVAIL_ENTRIES + 2];
#define pmap_page_get_memattr(m) VM_MEMATTR_DEFAULT
#define pmap_page_is_mapped(m) (!TAILQ_EMPTY(&(m)->md.pv_list))
#define pmap_page_is_write_mapped(m) (((m)->aflags & PGA_WRITEABLE) != 0)
-#define pmap_page_set_memattr(m, ma) (void)0
void pmap_bootstrap(void);
void *pmap_mapdev(vm_paddr_t, vm_size_t);
@@ -179,6 +179,7 @@ void pmap_kenter_temporary_free(vm_paddr_t pa);
void pmap_flush_pvcache(vm_page_t m);
int pmap_emulate_modified(pmap_t pmap, vm_offset_t va);
void pmap_grow_direct_page_cache(void);
+void pmap_page_set_memattr(vm_page_t, vm_memattr_t);
#endif /* _KERNEL */
diff --git a/sys/mips/mips/busdma_machdep.c b/sys/mips/mips/busdma_machdep.c
index 90ec399..d9eb9d4 100644
--- a/sys/mips/mips/busdma_machdep.c
+++ b/sys/mips/mips/busdma_machdep.c
@@ -37,6 +37,7 @@ __FBSDID("$FreeBSD$");
#include <sys/systm.h>
#include <sys/malloc.h>
#include <sys/bus.h>
+#include <sys/busdma_bufalloc.h>
#include <sys/interrupt.h>
#include <sys/lock.h>
#include <sys/proc.h>
@@ -47,7 +48,10 @@ __FBSDID("$FreeBSD$");
#include <sys/sysctl.h>
#include <sys/uio.h>
+#include <vm/uma.h>
#include <vm/vm.h>
+#include <vm/vm_extern.h>
+#include <vm/vm_kern.h>
#include <vm/vm_page.h>
#include <vm/vm_map.h>
@@ -129,9 +133,8 @@ static SYSCTL_NODE(_hw, OID_AUTO, busdma, CTLFLAG_RD, 0, "Busdma parameters");
SYSCTL_INT(_hw_busdma, OID_AUTO, total_bpages, CTLFLAG_RD, &total_bpages, 0,
"Total bounce pages");
-#define DMAMAP_UNCACHEABLE 0x8
-#define DMAMAP_ALLOCATED 0x10
-#define DMAMAP_MALLOCUSED 0x20
+#define DMAMAP_UNCACHEABLE 0x08
+#define DMAMAP_CACHE_ALIGNED 0x10
struct bus_dmamap {
struct bp_list bpages;
@@ -153,16 +156,6 @@ struct bus_dmamap {
static STAILQ_HEAD(, bus_dmamap) bounce_map_waitinglist;
static STAILQ_HEAD(, bus_dmamap) bounce_map_callbacklist;
-static TAILQ_HEAD(,bus_dmamap) dmamap_freelist =
- TAILQ_HEAD_INITIALIZER(dmamap_freelist);
-
-#define BUSDMA_STATIC_MAPS 128
-static struct bus_dmamap map_pool[BUSDMA_STATIC_MAPS];
-
-static struct mtx busdma_mtx;
-
-MTX_SYSINIT(busdma_mtx, &busdma_mtx, "busdma lock", MTX_DEF);
-
static void init_bounce_pages(void *dummy);
static int alloc_bounce_zone(bus_dma_tag_t dmat);
static int alloc_bounce_pages(bus_dma_tag_t dmat, u_int numpages);
@@ -176,6 +169,80 @@ static void free_bounce_page(bus_dma_tag_t dmat, struct bounce_page *bpage);
/* Default tag, as most drivers provide no parent tag. */
bus_dma_tag_t mips_root_dma_tag;
+static uma_zone_t dmamap_zone; /* Cache of struct bus_dmamap items */
+
+static busdma_bufalloc_t coherent_allocator; /* Cache of coherent buffers */
+static busdma_bufalloc_t standard_allocator; /* Cache of standard buffers */
+
+MALLOC_DEFINE(M_BUSDMA, "busdma", "busdma metadata");
+MALLOC_DEFINE(M_BOUNCE, "bounce", "busdma bounce pages");
+
+/*
+ * This is the ctor function passed to uma_zcreate() for the pool of dma maps.
+ * It'll need platform-specific changes if this code is copied.
+ */
+static int
+dmamap_ctor(void *mem, int size, void *arg, int flags)
+{
+ bus_dmamap_t map;
+ bus_dma_tag_t dmat;
+
+ map = (bus_dmamap_t)mem;
+ dmat = (bus_dma_tag_t)arg;
+
+ dmat->map_count++;
+
+ map->dmat = dmat;
+ map->flags = 0;
+ map->slist = NULL;
+ map->allocbuffer = NULL;
+ map->sync_count = 0;
+ STAILQ_INIT(&map->bpages);
+
+ return (0);
+}
+
+/*
+ * This is the dtor function passed to uma_zcreate() for the pool of dma maps.
+ * It may need platform-specific changes if this code is copied .
+ */
+static void
+dmamap_dtor(void *mem, int size, void *arg)
+{
+ bus_dmamap_t map;
+
+ map = (bus_dmamap_t)mem;
+
+ map->dmat->map_count--;
+}
+
+static void
+busdma_init(void *dummy)
+{
+
+ /* Create a cache of maps for bus_dmamap_create(). */
+ dmamap_zone = uma_zcreate("dma maps", sizeof(struct bus_dmamap),
+ dmamap_ctor, dmamap_dtor, NULL, NULL, UMA_ALIGN_PTR, 0);
+
+ /* Create a cache of buffers in standard (cacheable) memory. */
+ standard_allocator = busdma_bufalloc_create("buffer",
+ mips_pdcache_linesize, /* minimum_alignment */
+ NULL, /* uma_alloc func */
+ NULL, /* uma_free func */
+ 0); /* uma_zcreate_flags */
+
+ /*
+ * Create a cache of buffers in uncacheable memory, to implement the
+ * BUS_DMA_COHERENT flag.
+ */
+ coherent_allocator = busdma_bufalloc_create("coherent",
+ mips_pdcache_linesize, /* minimum_alignment */
+ busdma_bufalloc_alloc_uncacheable,
+ busdma_bufalloc_free_uncacheable,
+ 0); /* uma_zcreate_flags */
+}
+SYSINIT(busdma, SI_SUB_KMEM, SI_ORDER_FOURTH, busdma_init, NULL);
+
/*
* Return true if a match is made.
*
@@ -203,17 +270,6 @@ run_filter(bus_dma_tag_t dmat, bus_addr_t paddr)
return (retval);
}
-static void
-mips_dmamap_freelist_init(void *dummy)
-{
- int i;
-
- for (i = 0; i < BUSDMA_STATIC_MAPS; i++)
- TAILQ_INSERT_HEAD(&dmamap_freelist, &map_pool[i], freelist);
-}
-
-SYSINIT(busdma, SI_SUB_VM, SI_ORDER_ANY, mips_dmamap_freelist_init, NULL);
-
/*
* Check to see if the specified page is in an allowed DMA range.
*/
@@ -277,39 +333,23 @@ _busdma_alloc_dmamap(bus_dma_tag_t dmat)
struct sync_list *slist;
bus_dmamap_t map;
- slist = malloc(sizeof(*slist) * dmat->nsegments, M_DEVBUF, M_NOWAIT);
+ slist = malloc(sizeof(*slist) * dmat->nsegments, M_BUSDMA, M_NOWAIT);
if (slist == NULL)
return (NULL);
- mtx_lock(&busdma_mtx);
- map = TAILQ_FIRST(&dmamap_freelist);
- if (map)
- TAILQ_REMOVE(&dmamap_freelist, map, freelist);
- mtx_unlock(&busdma_mtx);
- if (!map) {
- map = malloc(sizeof(*map), M_DEVBUF, M_NOWAIT | M_ZERO);
- if (map)
- map->flags = DMAMAP_ALLOCATED;
- } else
- map->flags = 0;
- if (map != NULL) {
- STAILQ_INIT(&map->bpages);
+ map = uma_zalloc_arg(dmamap_zone, dmat, M_NOWAIT);
+ if (map != NULL)
map->slist = slist;
- } else
- free(slist, M_DEVBUF);
+ else
+ free(slist, M_BUSDMA);
return (map);
}
static __inline void
_busdma_free_dmamap(bus_dmamap_t map)
{
- free(map->slist, M_DEVBUF);
- if (map->flags & DMAMAP_ALLOCATED)
- free(map, M_DEVBUF);
- else {
- mtx_lock(&busdma_mtx);
- TAILQ_INSERT_HEAD(&dmamap_freelist, map, freelist);
- mtx_unlock(&busdma_mtx);
- }
+
+ free(map->slist, M_BUSDMA);
+ uma_zfree(dmamap_zone, map);
}
/*
@@ -332,7 +372,7 @@ bus_dma_tag_create(bus_dma_tag_t parent, bus_size_t alignment,
if (!parent)
parent = mips_root_dma_tag;
- newtag = (bus_dma_tag_t)malloc(sizeof(*newtag), M_DEVBUF, M_NOWAIT);
+ newtag = (bus_dma_tag_t)malloc(sizeof(*newtag), M_BUSDMA, M_NOWAIT);
if (newtag == NULL) {
CTR4(KTR_BUSDMA, "%s returned tag %p tag flags 0x%x error %d",
__func__, newtag, 0, error);
@@ -400,7 +440,7 @@ bus_dma_tag_create(bus_dma_tag_t parent, bus_size_t alignment,
/* Must bounce */
if ((error = alloc_bounce_zone(newtag)) != 0) {
- free(newtag, M_DEVBUF);
+ free(newtag, M_BUSDMA);
return (error);
}
bz = newtag->bounce_zone;
@@ -419,7 +459,7 @@ bus_dma_tag_create(bus_dma_tag_t parent, bus_size_t alignment,
} else
newtag->bounce_zone = NULL;
if (error != 0)
- free(newtag, M_DEVBUF);
+ free(newtag, M_BUSDMA);
else
*dmat = newtag;
CTR4(KTR_BUSDMA, "%s returned tag %p tag flags 0x%x error %d",
@@ -446,8 +486,8 @@ bus_dma_tag_destroy(bus_dma_tag_t dmat)
atomic_subtract_int(&dmat->ref_count, 1);
if (dmat->ref_count == 0) {
if (dmat->segments != NULL)
- free(dmat->segments, M_DEVBUF);
- free(dmat, M_DEVBUF);
+ free(dmat->segments, M_BUSDMA);
+ free(dmat, M_BUSDMA);
/*
* Last reference count, so
* release our reference
@@ -476,7 +516,7 @@ bus_dmamap_create(bus_dma_tag_t dmat, int flags, bus_dmamap_t *mapp)
if (dmat->segments == NULL) {
dmat->segments = (bus_dma_segment_t *)malloc(
- sizeof(bus_dma_segment_t) * dmat->nsegments, M_DEVBUF,
+ sizeof(bus_dma_segment_t) * dmat->nsegments, M_BUSDMA,
M_NOWAIT);
if (dmat->segments == NULL) {
CTR3(KTR_BUSDMA, "%s: tag %p error %d",
@@ -491,10 +531,6 @@ bus_dmamap_create(bus_dma_tag_t dmat, int flags, bus_dmamap_t *mapp)
return (ENOMEM);
}
*mapp = newmap;
- newmap->dmat = dmat;
- newmap->allocbuffer = NULL;
- newmap->sync_count = 0;
- dmat->map_count++;
/*
* Bouncing might be required if the driver asks for an active
@@ -565,7 +601,6 @@ bus_dmamap_destroy(bus_dma_tag_t dmat, bus_dmamap_t map)
}
if (dmat->bounce_zone)
dmat->bounce_zone->map_count--;
- dmat->map_count--;
_busdma_free_dmamap(map);
CTR2(KTR_BUSDMA, "%s: tag %p error 0", __func__, dmat);
return (0);
@@ -577,10 +612,14 @@ bus_dmamap_destroy(bus_dma_tag_t dmat, bus_dmamap_t map)
* A dmamap to for use with dmamap_load is also allocated.
*/
int
-bus_dmamem_alloc(bus_dma_tag_t dmat, void** vaddr, int flags,
+bus_dmamem_alloc(bus_dma_tag_t dmat, void** vaddrp, int flags,
bus_dmamap_t *mapp)
{
bus_dmamap_t newmap = NULL;
+ busdma_bufalloc_t ba;
+ struct busdma_bufzone *bufzone;
+ vm_memattr_t memattr;
+ void *vaddr;
int mflags;
@@ -590,7 +629,7 @@ bus_dmamem_alloc(bus_dma_tag_t dmat, void** vaddr, int flags,
mflags = M_WAITOK;
if (dmat->segments == NULL) {
dmat->segments = (bus_dma_segment_t *)malloc(
- sizeof(bus_dma_segment_t) * dmat->nsegments, M_DEVBUF,
+ sizeof(bus_dma_segment_t) * dmat->nsegments, M_BUSDMA,
mflags);
if (dmat->segments == NULL) {
CTR4(KTR_BUSDMA, "%s: tag %p tag flags 0x%x error %d",
@@ -598,8 +637,6 @@ bus_dmamem_alloc(bus_dma_tag_t dmat, void** vaddr, int flags,
return (ENOMEM);
}
}
- if (flags & BUS_DMA_ZERO)
- mflags |= M_ZERO;
newmap = _busdma_alloc_dmamap(dmat);
if (newmap == NULL) {
@@ -607,10 +644,6 @@ bus_dmamem_alloc(bus_dma_tag_t dmat, void** vaddr, int flags,
__func__, dmat, dmat->flags, ENOMEM);
return (ENOMEM);
}
- dmat->map_count++;
- *mapp = newmap;
- newmap->dmat = dmat;
- newmap->sync_count = 0;
/*
* If all the memory is coherent with DMA then we don't need to
@@ -619,54 +652,62 @@ bus_dmamem_alloc(bus_dma_tag_t dmat, void** vaddr, int flags,
if (dmat->flags & BUS_DMA_COHERENT)
flags &= ~BUS_DMA_COHERENT;
+ if (flags & BUS_DMA_COHERENT) {
+ memattr = VM_MEMATTR_UNCACHEABLE;
+ ba = coherent_allocator;
+ newmap->flags |= DMAMAP_UNCACHEABLE;
+ } else {
+ memattr = VM_MEMATTR_DEFAULT;
+ ba = standard_allocator;
+ }
+ /* All buffers we allocate are cache-aligned. */
+ newmap->flags |= DMAMAP_CACHE_ALIGNED;
+
+ if (flags & BUS_DMA_ZERO)
+ mflags |= M_ZERO;
+
/*
- * Allocate uncacheable memory if all else fails.
+ * Try to find a bufzone in the allocator that holds a cache of buffers
+ * of the right size for this request. If the buffer is too big to be
+ * held in the allocator cache, this returns NULL.
*/
- if (flags & BUS_DMA_COHERENT)
- newmap->flags |= DMAMAP_UNCACHEABLE;
-
- if (dmat->maxsize <= PAGE_SIZE &&
- (dmat->alignment < dmat->maxsize) &&
- !_bus_dma_can_bounce(dmat->lowaddr, dmat->highaddr) &&
- !(newmap->flags & DMAMAP_UNCACHEABLE)) {
- *vaddr = malloc(dmat->maxsize, M_DEVBUF, mflags);
- newmap->flags |= DMAMAP_MALLOCUSED;
+ bufzone = busdma_bufalloc_findzone(ba, dmat->maxsize);
+
+ /*
+ * Allocate the buffer from the uma(9) allocator if...
+ * - It's small enough to be in the allocator (bufzone not NULL).
+ * - The alignment constraint isn't larger than the allocation size
+ * (the allocator aligns buffers to their size boundaries).
+ * - There's no need to handle lowaddr/highaddr exclusion zones.
+ * else allocate non-contiguous pages if...
+ * - The page count that could get allocated doesn't exceed nsegments.
+ * - The alignment constraint isn't larger than a page boundary.
+ * - There are no boundary-crossing constraints.
+ * else allocate a block of contiguous pages because one or more of the
+ * constraints is something that only the contig allocator can fulfill.
+ */
+ if (bufzone != NULL && dmat->alignment <= bufzone->size &&
+ !_bus_dma_can_bounce(dmat->lowaddr, dmat->highaddr)) {
+ vaddr = uma_zalloc(bufzone->umazone, mflags);
+ } else if (dmat->nsegments >= btoc(dmat->maxsize) &&
+ dmat->alignment <= PAGE_SIZE && dmat->boundary == 0) {
+ vaddr = (void *)kmem_alloc_attr(kernel_arena, dmat->maxsize,
+ mflags, 0, dmat->lowaddr, memattr);
} else {
- /*
- * XXX Use Contigmalloc until it is merged into this facility
- * and handles multi-seg allocations. Nobody is doing
- * multi-seg allocations yet though.
- */
- *vaddr = contigmalloc(dmat->maxsize, M_DEVBUF, mflags,
- 0ul, dmat->lowaddr, dmat->alignment? dmat->alignment : 1ul,
- dmat->boundary);
+ vaddr = (void *)kmem_alloc_contig(kernel_arena, dmat->maxsize,
+ mflags, 0, dmat->lowaddr, dmat->alignment, dmat->boundary,
+ memattr);
}
- if (*vaddr == NULL) {
- if (newmap != NULL) {
- _busdma_free_dmamap(newmap);
- dmat->map_count--;
- }
- *mapp = NULL;
- return (ENOMEM);
+ if (vaddr == NULL) {
+ _busdma_free_dmamap(newmap);
+ newmap = NULL;
+ } else {
+ newmap->sync_count = 0;
}
+ *vaddrp = vaddr;
+ *mapp = newmap;
- if (newmap->flags & DMAMAP_UNCACHEABLE) {
- void *tmpaddr = (void *)*vaddr;
-
- if (tmpaddr) {
- tmpaddr = (void *)pmap_mapdev(vtophys(tmpaddr),
- dmat->maxsize);
- newmap->origbuffer = *vaddr;
- newmap->allocbuffer = tmpaddr;
- mips_dcache_wbinv_range((vm_offset_t)*vaddr,
- dmat->maxsize);
- *vaddr = tmpaddr;
- } else
- newmap->origbuffer = newmap->allocbuffer = NULL;
- } else
- newmap->origbuffer = newmap->allocbuffer = NULL;
-
- return (0);
+ return (vaddr == NULL ? ENOMEM : 0);
}
/*
@@ -676,21 +717,24 @@ bus_dmamem_alloc(bus_dma_tag_t dmat, void** vaddr, int flags,
void
bus_dmamem_free(bus_dma_tag_t dmat, void *vaddr, bus_dmamap_t map)
{
- if (map->allocbuffer) {
- KASSERT(map->allocbuffer == vaddr,
- ("Trying to freeing the wrong DMA buffer"));
- vaddr = map->origbuffer;
- }
+ struct busdma_bufzone *bufzone;
+ busdma_bufalloc_t ba;
if (map->flags & DMAMAP_UNCACHEABLE)
- pmap_unmapdev((vm_offset_t)map->allocbuffer, dmat->maxsize);
- if (map->flags & DMAMAP_MALLOCUSED)
- free(vaddr, M_DEVBUF);
+ ba = coherent_allocator;
else
- contigfree(vaddr, dmat->maxsize, M_DEVBUF);
+ ba = standard_allocator;
- dmat->map_count--;
- _busdma_free_dmamap(map);
+ free(map->slist, M_BUSDMA);
+ uma_zfree(dmamap_zone, map);
+
+ bufzone = busdma_bufalloc_findzone(ba, dmat->maxsize);
+
+ if (bufzone != NULL && dmat->alignment <= bufzone->size &&
+ !_bus_dma_can_bounce(dmat->lowaddr, dmat->highaddr))
+ uma_zfree(bufzone->umazone, vaddr);
+ else
+ kmem_free(kernel_arena, (vm_offset_t)vaddr, dmat->maxsize);
CTR3(KTR_BUSDMA, "%s: tag %p flags 0x%x", __func__, dmat, dmat->flags);
}
@@ -907,6 +951,8 @@ _bus_dmamap_load_buffer(bus_dma_tag_t dmat, bus_dmamap_t map, void *buf,
if (segs == NULL)
segs = dmat->segments;
+ if ((flags & BUS_DMA_LOAD_MBUF) != 0)
+ map->flags |= DMAMAP_CACHE_ALIGNED;
if ((dmat->flags & BUS_DMA_COULD_BOUNCE) != 0) {
_bus_dmamap_count_pages(dmat, map, pmap, buf, buflen, flags);
@@ -1013,7 +1059,7 @@ _bus_dmamap_unload(bus_dma_tag_t dmat, bus_dmamap_t map)
}
static void
-bus_dmamap_sync_buf(vm_offset_t buf, int len, bus_dmasync_op_t op)
+bus_dmamap_sync_buf(vm_offset_t buf, int len, bus_dmasync_op_t op, int aligned)
{
char tmp_cl[mips_pdcache_linesize], tmp_clend[mips_pdcache_linesize];
vm_offset_t buf_cl, buf_clend;
@@ -1025,13 +1071,29 @@ bus_dmamap_sync_buf(vm_offset_t buf, int len, bus_dmasync_op_t op)
* and could modify areas of memory that share the same cache line
* at the beginning and the ending of the buffer. In order to
* prevent a data loss we save these chunks in temporary buffer
- * before invalidation and restore them afer it
+ * before invalidation and restore them afer it.
+ *
+ * If the aligned flag is set the buffer is either an mbuf or came from
+ * our allocator caches. In both cases they are always sized and
+ * aligned to cacheline boundaries, so we can skip preserving nearby
+ * data if a transfer appears to overlap cachelines. An mbuf in
+ * particular will usually appear to be overlapped because of offsetting
+ * within the buffer to align the L3 headers, but we know that the bytes
+ * preceeding that offset are part of the same mbuf memory and are not
+ * unrelated adjacent data (and a rule of mbuf handling is that the cpu
+ * is not allowed to touch the mbuf while dma is in progress, including
+ * header fields).
*/
- buf_cl = buf & ~cache_linesize_mask;
- size_cl = buf & cache_linesize_mask;
- buf_clend = buf + len;
- size_clend = (mips_pdcache_linesize -
- (buf_clend & cache_linesize_mask)) & cache_linesize_mask;
+ if (aligned) {
+ size_cl = 0;
+ size_clend = 0;
+ } else {
+ buf_cl = buf & ~cache_linesize_mask;
+ size_cl = buf & cache_linesize_mask;
+ buf_clend = buf + len;
+ size_clend = (mips_pdcache_linesize -
+ (buf_clend & cache_linesize_mask)) & cache_linesize_mask;
+ }
switch (op) {
case BUS_DMASYNC_POSTREAD | BUS_DMASYNC_POSTWRITE:
@@ -1066,7 +1128,7 @@ bus_dmamap_sync_buf(vm_offset_t buf, int len, bus_dmasync_op_t op)
break;
case BUS_DMASYNC_PREREAD|BUS_DMASYNC_PREWRITE:
- mips_dcache_wbinv_range(buf_cl, len);
+ mips_dcache_wbinv_range(buf, len);
break;
case BUS_DMASYNC_PREREAD:
@@ -1151,23 +1213,28 @@ void
_bus_dmamap_sync(bus_dma_tag_t dmat, bus_dmamap_t map, bus_dmasync_op_t op)
{
struct sync_list *sl, *end;
+ int aligned;
if (op == BUS_DMASYNC_POSTWRITE)
return;
if (STAILQ_FIRST(&map->bpages))
_bus_dmamap_sync_bp(dmat, map, op);
- if (dmat->flags & BUS_DMA_COHERENT)
+ if ((dmat->flags & BUS_DMA_COHERENT) ||
+ (map->flags & DMAMAP_UNCACHEABLE)) {
+ if (op & BUS_DMASYNC_PREWRITE)
+ mips_sync();
return;
+ }
- if (map->flags & DMAMAP_UNCACHEABLE)
- return;
+ aligned = (map->flags & DMAMAP_CACHE_ALIGNED) ? 1 : 0;
CTR3(KTR_BUSDMA, "%s: op %x flags %x", __func__, op, map->flags);
if (map->sync_count) {
end = &map->slist[map->sync_count];
for (sl = &map->slist[0]; sl != end; sl++)
- bus_dmamap_sync_buf(sl->vaddr, sl->datacount, op);
+ bus_dmamap_sync_buf(sl->vaddr, sl->datacount, op,
+ aligned);
}
}
@@ -1209,7 +1276,7 @@ alloc_bounce_zone(bus_dma_tag_t dmat)
}
}
- if ((bz = (struct bounce_zone *)malloc(sizeof(*bz), M_DEVBUF,
+ if ((bz = (struct bounce_zone *)malloc(sizeof(*bz), M_BUSDMA,
M_NOWAIT | M_ZERO)) == NULL)
return (ENOMEM);
@@ -1280,18 +1347,18 @@ alloc_bounce_pages(bus_dma_tag_t dmat, u_int numpages)
while (numpages > 0) {
struct bounce_page *bpage;
- bpage = (struct bounce_page *)malloc(sizeof(*bpage), M_DEVBUF,
+ bpage = (struct bounce_page *)malloc(sizeof(*bpage), M_BUSDMA,
M_NOWAIT | M_ZERO);
if (bpage == NULL)
break;
- bpage->vaddr = (vm_offset_t)contigmalloc(PAGE_SIZE, M_DEVBUF,
+ bpage->vaddr = (vm_offset_t)contigmalloc(PAGE_SIZE, M_BOUNCE,
M_NOWAIT, 0ul,
bz->lowaddr,
PAGE_SIZE,
0);
if (bpage->vaddr == 0) {
- free(bpage, M_DEVBUF);
+ free(bpage, M_BUSDMA);
break;
}
bpage->busaddr = pmap_kextract(bpage->vaddr);
diff --git a/sys/mips/mips/pmap.c b/sys/mips/mips/pmap.c
index 292ce80..7bf3ee0 100644
--- a/sys/mips/mips/pmap.c
+++ b/sys/mips/mips/pmap.c
@@ -314,6 +314,15 @@ pmap_lmem_unmap(void)
}
#endif /* !__mips_n64 */
+static __inline int
+is_cacheable_page(vm_paddr_t pa, vm_page_t m)
+{
+
+ return ((m->md.pv_flags & PV_MEMATTR_UNCACHEABLE) == 0 &&
+ is_cacheable_mem(pa));
+
+}
+
/*
* Page table entry lookup routines.
*/
@@ -2009,7 +2018,7 @@ pmap_enter(pmap_t pmap, vm_offset_t va, vm_page_t m, vm_prot_t prot,
newpte |= PTE_W;
if (is_kernel_pmap(pmap))
newpte |= PTE_G;
- if (is_cacheable_mem(pa))
+ if (is_cacheable_page(pa, m))
newpte |= PTE_C_CACHE;
else
newpte |= PTE_C_UNCACHED;
@@ -2280,7 +2289,7 @@ pmap_enter_quick_locked(pmap_t pmap, vm_offset_t va, vm_page_t m,
if ((m->oflags & VPO_UNMANAGED) == 0)
*pte |= PTE_MANAGED;
- if (is_cacheable_mem(pa))
+ if (is_cacheable_page(pa, m))
*pte |= PTE_C_CACHE;
else
*pte |= PTE_C_UNCACHED;
@@ -2650,9 +2659,12 @@ pmap_quick_enter_page(vm_page_t m)
pa = VM_PAGE_TO_PHYS(m);
- if (MIPS_DIRECT_MAPPABLE(pa))
- return (MIPS_PHYS_TO_DIRECT(pa));
-
+ if (MIPS_DIRECT_MAPPABLE(pa)) {
+ if (m->md.pv_flags & PV_MEMATTR_UNCACHEABLE)
+ return (MIPS_PHYS_TO_DIRECT_UNCACHED(pa));
+ else
+ return (MIPS_PHYS_TO_DIRECT(pa));
+ }
critical_enter();
sysm = &sysmap_lmem[PCPU_GET(cpuid)];
@@ -2660,7 +2672,7 @@ pmap_quick_enter_page(vm_page_t m)
pte = pmap_pte(kernel_pmap, sysm->base);
*pte = TLBLO_PA_TO_PFN(pa) | PTE_D | PTE_V | PTE_G |
- (is_cacheable_mem(pa) ? PTE_C_CACHE : PTE_C_UNCACHED);
+ (is_cacheable_page(pa, m) ? PTE_C_CACHE : PTE_C_UNCACHED);
sysm->valid1 = 1;
return (sysm->base);
@@ -3520,3 +3532,27 @@ pmap_flush_pvcache(vm_page_t m)
}
}
}
+
+void
+pmap_page_set_memattr(vm_page_t m, vm_memattr_t ma)
+{
+
+ /*
+ * It appears that this function can only be called before any mappings
+ * for the page are established. If this ever changes, this code will
+ * need to walk the pv_list and make each of the existing mappings
+ * uncacheable, being careful to sync caches and PTEs (and maybe
+ * invalidate TLB?) for any current mapping it modifies.
+ */
+ if (TAILQ_FIRST(&m->md.pv_list) != NULL)
+ panic("Can't change memattr on page with existing mappings");
+
+ /*
+ * The only memattr we support is UNCACHEABLE, translate the (semi-)MI
+ * representation of that into our internal flag in the page MD struct.
+ */
+ if (ma == VM_MEMATTR_UNCACHEABLE)
+ m->md.pv_flags |= PV_MEMATTR_UNCACHEABLE;
+ else
+ m->md.pv_flags &= ~PV_MEMATTR_UNCACHEABLE;
+}
diff --git a/sys/modules/Makefile b/sys/modules/Makefile
index ad54a59..dca94fe 100644
--- a/sys/modules/Makefile
+++ b/sys/modules/Makefile
@@ -98,7 +98,6 @@ SUBDIR= \
${_dpt} \
${_drm} \
${_drm2} \
- ${_dtrace} \
dummynet \
${_ed} \
${_elink} \
@@ -203,7 +202,7 @@ SUBDIR= \
${_linux} \
${_linux_common} \
${_linux64} \
- ${_linuxapi} \
+ linuxkpi \
lmc \
lpt \
mac_biba \
@@ -268,7 +267,6 @@ SUBDIR= \
${_nvme} \
${_nvram} \
${_nxge} \
- ${_opensolaris} \
oce \
otus \
otusfw \
@@ -394,13 +392,20 @@ SUBDIR= \
${_x86bios} \
${_xe} \
xl \
- ${_zfs} \
zlib
.if ${MK_AUTOFS} != "no" || defined(ALL_MODULES)
_autofs= autofs
.endif
+.if ${MK_CDDL} != "no" || defined(ALL_MODULES)
+.if ${MACHINE_CPUARCH} != "arm" && ${MACHINE_CPUARCH} != "mips" && \
+ ${MACHINE_CPUARCH} != "sparc64"
+SUBDIR+= dtrace
+.endif
+SUBDIR+= opensolaris
+.endif
+
.if ${MK_CRYPT} != "no" || defined(ALL_MODULES)
.if exists(${.CURDIR}/../opencrypto)
_crypto= crypto
@@ -479,6 +484,10 @@ _txp= txp
_cxgbe= cxgbe
.endif
+.if ${MK_ZFS} != "no" || defined(ALL_MODULES)
+SUBDIR+= zfs
+.endif
+
.if ${MACHINE_CPUARCH} != "aarch64" && ${MACHINE_CPUARCH} != "arm" && \
${MACHINE_CPUARCH} != "mips" && ${MACHINE_CPUARCH} != "powerpc"
_syscons= syscons
@@ -509,9 +518,6 @@ _cs= cs
_dpms= dpms
_drm= drm
_drm2= drm2
-.if ${MK_CDDL} != "no" || defined(ALL_MODULES)
-_dtrace= dtrace
-.endif
_ed= ed
_em= em
_ep= ep
@@ -533,13 +539,7 @@ _ixv= ixv
_linprocfs= linprocfs
_linsysfs= linsysfs
_linux= linux
-.if ${MK_OFED} != "no"
-_linuxapi= linuxapi
-.endif
_ndis= ndis
-.if ${MK_CDDL} != "no" || defined(ALL_MODULES)
-_opensolaris= opensolaris
-.endif
_pccard= pccard
.if ${MK_OFED} != "no" || defined(ALL_MODULES)
_rdma= rdma
@@ -555,9 +555,6 @@ _vxge= vxge
_wbwd= wbwd
_wi= wi
_xe= xe
-.if ${MK_ZFS} != "no" || defined(ALL_MODULES)
-_zfs= zfs
-.endif
.if ${MACHINE} != "pc98"
_aac= aac
_aacraid= aacraid
@@ -633,7 +630,6 @@ _x86bios= x86bios
.endif
.if ${MACHINE_CPUARCH} == "amd64"
-_cloudabi64= cloudabi64
_ioat= ioat
_ixl= ixl
_ixlv= ixlv
@@ -717,23 +713,14 @@ _cbb= cbb
_cfi= cfi
_cpufreq= cpufreq
_drm= drm
-.if ${MK_CDDL} != "no" || defined(ALL_MODULES)
-_dtrace= dtrace
-.endif
_exca= exca
_nvram= powermac_nvram
-.if ${MK_CDDL} != "no" || defined(ALL_MODULES)
-_opensolaris= opensolaris
-.endif
_pccard= pccard
_wi= wi
.endif
.if ${MACHINE_ARCH} == "powerpc64"
_drm2= drm2
-.if ${MK_ZFS} != "no" || defined(ALL_MODULES)
-_zfs= zfs
-.endif
.endif
.if ${MACHINE_CPUARCH} == "sparc64"
@@ -741,12 +728,10 @@ _auxio= auxio
_em= em
_epic= epic
_igb= igb
-.if ${MK_CDDL} != "no" || defined(ALL_MODULES)
-_opensolaris= opensolaris
-.endif
-.if ${MK_ZFS} != "no" || defined(ALL_MODULES)
-_zfs= zfs
.endif
+
+.if ${MACHINE_CPUARCH} == "aarch64" || ${MACHINE_CPUARCH} == "amd64"
+_cloudabi64= cloudabi64
.endif
.endif
diff --git a/sys/modules/cloudabi64/Makefile b/sys/modules/cloudabi64/Makefile
index a340e50..3aee96d 100644
--- a/sys/modules/cloudabi64/Makefile
+++ b/sys/modules/cloudabi64/Makefile
@@ -4,8 +4,8 @@
.PATH: ${.CURDIR}/../../${MACHINE}/cloudabi64
KMOD= cloudabi64
-SRCS= cloudabi64_fd.c cloudabi64_poll.c cloudabi64_sock.c \
- cloudabi64_syscalls.c cloudabi64_sysent.c cloudabi64_sysvec.c \
- cloudabi64_thread.c
+SRCS= cloudabi64_fd.c cloudabi64_module.c cloudabi64_poll.c \
+ cloudabi64_sock.c cloudabi64_syscalls.c cloudabi64_sysent.c \
+ cloudabi64_sysvec.c cloudabi64_thread.c
.include <bsd.kmod.mk>
diff --git a/sys/modules/cxgb/iw_cxgb/Makefile b/sys/modules/cxgb/iw_cxgb/Makefile
index 8df1ffc..57a7c60 100644
--- a/sys/modules/cxgb/iw_cxgb/Makefile
+++ b/sys/modules/cxgb/iw_cxgb/Makefile
@@ -10,5 +10,6 @@ SRCS+= iw_cxgb_ev.c iw_cxgb_mem.c iw_cxgb_dbg.c iw_cxgb_cq.c
SRCS+= bus_if.h device_if.h opt_sched.h pci_if.h pcib_if.h opt_ktr.h
SRCS+= opt_inet.h opt_ofed.h vnode_if.h
CFLAGS+= -I${CXGB} -I${.CURDIR}/../../../ofed/include -DLINUX_TYPES_DEFINED
+CFLAGS+= -I${.CURDIR}/../../../compat/linuxkpi/common/include
.include <bsd.kmod.mk>
diff --git a/sys/modules/cxgbe/iw_cxgbe/Makefile b/sys/modules/cxgbe/iw_cxgbe/Makefile
index e1f362a..d4c041f 100644
--- a/sys/modules/cxgbe/iw_cxgbe/Makefile
+++ b/sys/modules/cxgbe/iw_cxgbe/Makefile
@@ -24,5 +24,6 @@ SRCS+= resource.c
SRCS+= vnode_if.h
CFLAGS+= -I${CXGBE} -I${.CURDIR}/../../../ofed/include -DLINUX_TYPES_DEFINED
+CFLAGS+= -I${.CURDIR}/../../../compat/linuxkpi/common/include
.include <bsd.kmod.mk>
diff --git a/sys/modules/dtrace/Makefile b/sys/modules/dtrace/Makefile
index 7be4c32..e5264db 100644
--- a/sys/modules/dtrace/Makefile
+++ b/sys/modules/dtrace/Makefile
@@ -13,7 +13,10 @@ SUBDIR= dtmalloc \
systrace
.if ${MACHINE_CPUARCH} == "amd64" || ${MACHINE_CPUARCH} == "i386"
-SUBDIR+= fasttrap fbt systrace_linux32
+SUBDIR+= fasttrap fbt systrace_linux
+.endif
+.if ${MACHINE_CPUARCH} == "amd64"
+SUBDIR+= systrace_linux32
.endif
.if ${MACHINE_CPUARCH} == "powerpc"
SUBDIR+= fbt fasttrap
diff --git a/sys/modules/dtrace/systrace_linux/Makefile b/sys/modules/dtrace/systrace_linux/Makefile
new file mode 100644
index 0000000..1cf5e31
--- /dev/null
+++ b/sys/modules/dtrace/systrace_linux/Makefile
@@ -0,0 +1,18 @@
+# $FreeBSD$
+
+SYSDIR?= ${.CURDIR}/../../..
+
+.PATH: ${SYSDIR}/cddl/dev/systrace
+
+KMOD= systrace_linux
+
+SRCS= systrace.c
+SRCS+= vnode_if.h
+
+CFLAGS+= -I${SYSDIR}/cddl/compat/opensolaris \
+ -I${SYSDIR}/cddl/contrib/opensolaris/uts/common \
+ -I${SYSDIR} -DLINUX_SYSTRACE
+
+.include <bsd.kmod.mk>
+
+CFLAGS+= -include ${SYSDIR}/cddl/compat/opensolaris/sys/debug_compat.h
diff --git a/sys/modules/dtrace/systrace_linux32/Makefile b/sys/modules/dtrace/systrace_linux32/Makefile
index b3eedee..db798c3 100644
--- a/sys/modules/dtrace/systrace_linux32/Makefile
+++ b/sys/modules/dtrace/systrace_linux32/Makefile
@@ -4,18 +4,14 @@ SYSDIR?= ${.CURDIR}/../../..
.PATH: ${SYSDIR}/cddl/dev/systrace
-.if ${MACHINE} == "amd64"
KMOD= systrace_linux32
-.else
-KMOD= systrace_linux
-.endif
SRCS= systrace.c
SRCS+= vnode_if.h
CFLAGS+= -I${SYSDIR}/cddl/compat/opensolaris \
-I${SYSDIR}/cddl/contrib/opensolaris/uts/common \
- -I${SYSDIR} -DLINUX_SYSTRACE
+ -I${SYSDIR} -DLINUX32_SYSTRACE
.include <bsd.kmod.mk>
diff --git a/sys/modules/hwpmc/Makefile b/sys/modules/hwpmc/Makefile
index cfae7b6..5e6ea30 100644
--- a/sys/modules/hwpmc/Makefile
+++ b/sys/modules/hwpmc/Makefile
@@ -8,6 +8,10 @@ KMOD= hwpmc
SRCS= hwpmc_mod.c hwpmc_logging.c hwpmc_soft.c vnode_if.h
+.if ${MACHINE_CPUARCH} == "aarch64"
+SRCS+= hwpmc_arm64.c hwpmc_arm64_md.c
+.endif
+
.if ${MACHINE_CPUARCH} == "amd64"
SRCS+= hwpmc_amd.c hwpmc_core.c hwpmc_intel.c hwpmc_piv.c hwpmc_tsc.c
SRCS+= hwpmc_x86.c hwpmc_uncore.c
diff --git a/sys/modules/i2c/iicbb/Makefile b/sys/modules/i2c/iicbb/Makefile
index bd4e506..d192e68 100644
--- a/sys/modules/i2c/iicbb/Makefile
+++ b/sys/modules/i2c/iicbb/Makefile
@@ -1,7 +1,8 @@
# $FreeBSD$
.PATH: ${.CURDIR}/../../../dev/iicbus
-.if ${MACHINE_CPUARCH} == "arm" || ${MACHINE_CPUARCH} == "powerpc"
+.if ${MACHINE_CPUARCH} == "aarch64" || ${MACHINE_CPUARCH} == "arm" || \
+ ${MACHINE_CPUARCH} == "powerpc"
ofw_bus_if= ofw_bus_if.h
.endif
KMOD = iicbb
diff --git a/sys/modules/ibcore/Makefile b/sys/modules/ibcore/Makefile
index 60ec8dd..490a11a 100644
--- a/sys/modules/ibcore/Makefile
+++ b/sys/modules/ibcore/Makefile
@@ -1,6 +1,5 @@
# $FreeBSD$
.PATH: ${.CURDIR}/../../ofed/drivers/infiniband/core
-.PATH: ${.CURDIR}/../../ofed/include/linux
KMOD= ibcore
SRCS= addr.c iwcm.c sa_query.c ucma.c uverbs_cmd.c \
@@ -12,8 +11,8 @@ SRCS= addr.c iwcm.c sa_query.c ucma.c uverbs_cmd.c \
opt_inet.h opt_inet6.h
CFLAGS+= -I${.CURDIR}/../../ofed/drivers/infiniband/core
-CFLAGS+= -I${.CURDIR}/../mlx4ib
-CFLAGS+= -I${.CURDIR}/../../ofed/include/
+CFLAGS+= -I${.CURDIR}/../../ofed/include
+CFLAGS+= -I${.CURDIR}/../../compat/linuxkpi/common/include
CFLAGS+= -DINET6 -DINET
.include <bsd.kmod.mk>
diff --git a/sys/modules/ipoib/Makefile b/sys/modules/ipoib/Makefile
index ba8c6d3..908187c 100644
--- a/sys/modules/ipoib/Makefile
+++ b/sys/modules/ipoib/Makefile
@@ -1,6 +1,5 @@
# $FreeBSD$
.PATH: ${.CURDIR}/../../ofed/drivers/infiniband/ulp/ipoib
-.PATH: ${.CURDIR}/../../ofed/include/linux
KMOD= ipoib
SRCS= device_if.h bus_if.h vnode_if.h pci_if.h \
@@ -9,8 +8,8 @@ SRCS= device_if.h bus_if.h vnode_if.h pci_if.h \
ipoib_multicast.c ipoib_verbs.c
CFLAGS+= -I${.CURDIR}/../../ofed/drivers/infiniband/ulp/ipoib
-CFLAGS+= -I${.CURDIR}/../ibcore
-CFLAGS+= -I${.CURDIR}/../../ofed/include/
+CFLAGS+= -I${.CURDIR}/../../ofed/include
+CFLAGS+= -I${.CURDIR}/../../compat/linuxkpi/common/include
CFLAGS+= -DINET6 -DINET
.include <bsd.kmod.mk>
diff --git a/sys/modules/ispfw/Makefile b/sys/modules/ispfw/Makefile
index 4dca25c..6219da8 100644
--- a/sys/modules/ispfw/Makefile
+++ b/sys/modules/ispfw/Makefile
@@ -39,9 +39,7 @@ SUBDIR += isp_2200
SUBDIR += isp_2300
SUBDIR += isp_2322
SUBDIR += isp_2400
-SUBDIR += isp_2400_multi
SUBDIR += isp_2500
-SUBDIR += isp_2500_multi
.if ${MACHINE} == "sparc64"
SUBDIR += isp_1000
.endif
diff --git a/sys/modules/ispfw/isp_2400_multi/Makefile b/sys/modules/ispfw/isp_2400_multi/Makefile
deleted file mode 100644
index 4258c00..0000000
--- a/sys/modules/ispfw/isp_2400_multi/Makefile
+++ /dev/null
@@ -1,35 +0,0 @@
-# $FreeBSD$
-#-
-# Copyright (c) 2009 by Matthew Jacob
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions
-# are met:
-# 1. Redistributions of source code must retain the above copyright
-# notice immediately at the beginning of the file, without modification,
-# this list of conditions, and the following disclaimer.
-# 2. The name of the author may not be used to endorse or promote products
-# derived from this software without specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
-# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR
-# ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
-# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-# SUCH DAMAGE.
-#
-
-.PATH: ${.CURDIR}/../../../dev/ispfw
-
-KMOD= isp_2400_multi
-SRCS= ispfw.c
-
-CFLAGS += -DISP_2400_MULTI -DMODULE_NAME=\"${KMOD}\"
-
-.include <bsd.kmod.mk>
diff --git a/sys/modules/ispfw/isp_2500_multi/Makefile b/sys/modules/ispfw/isp_2500_multi/Makefile
deleted file mode 100644
index 050565b..0000000
--- a/sys/modules/ispfw/isp_2500_multi/Makefile
+++ /dev/null
@@ -1,35 +0,0 @@
-# $FreeBSD$
-#-
-# Copyright (c) 2009 by Matthew Jacob
-# All rights reserved.
-#
-# Redistribution and use in source and binary forms, with or without
-# modification, are permitted provided that the following conditions
-# are met:
-# 1. Redistributions of source code must retain the above copyright
-# notice immediately at the beginning of the file, without modification,
-# this list of conditions, and the following disclaimer.
-# 2. The name of the author may not be used to endorse or promote products
-# derived from this software without specific prior written permission.
-#
-# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
-# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE FOR
-# ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
-# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-# SUCH DAMAGE.
-#
-
-.PATH: ${.CURDIR}/../../../dev/ispfw
-
-KMOD= isp_2500_multi
-SRCS= ispfw.c
-
-CFLAGS += -DISP_2500_MULTI -DMODULE_NAME=\"${KMOD}\"
-
-.include <bsd.kmod.mk>
diff --git a/sys/modules/linuxapi/Makefile b/sys/modules/linuxapi/Makefile
deleted file mode 100644
index b10d125..0000000
--- a/sys/modules/linuxapi/Makefile
+++ /dev/null
@@ -1,18 +0,0 @@
-# $FreeBSD$
-.PATH: ${.CURDIR}/../../ofed/include/linux
-
-KMOD= linuxapi
-SRCS= linux_kmod.c \
- linux_compat.c \
- linux_pci.c \
- linux_radix.c \
- linux_idr.c
-
-SRCS+= bus_if.h \
- device_if.h \
- pci_if.h \
- vnode_if.h
-
-CFLAGS+= -I${.CURDIR}/../../ofed/include/
-
-.include <bsd.kmod.mk>
diff --git a/sys/modules/linuxkpi/Makefile b/sys/modules/linuxkpi/Makefile
new file mode 100644
index 0000000..bcfb03a
--- /dev/null
+++ b/sys/modules/linuxkpi/Makefile
@@ -0,0 +1,21 @@
+# $FreeBSD$
+.PATH: ${.CURDIR}/../../compat/linuxkpi/common/src
+
+KMOD= linuxkpi
+SRCS= linux_kmod.c \
+ linux_compat.c \
+ linux_pci.c \
+ linux_radix.c \
+ linux_idr.c \
+ linux_usb.c
+
+SRCS+= bus_if.h \
+ device_if.h \
+ pci_if.h \
+ vnode_if.h \
+ usb_if.h \
+ opt_usb.h
+
+CFLAGS+= -I${.CURDIR}/../../compat/linuxkpi/common/include
+
+.include <bsd.kmod.mk>
diff --git a/sys/modules/mlx4/Makefile b/sys/modules/mlx4/Makefile
index cd2b177..0aed17d 100644
--- a/sys/modules/mlx4/Makefile
+++ b/sys/modules/mlx4/Makefile
@@ -1,6 +1,5 @@
# $FreeBSD$
.PATH: ${.CURDIR}/../../ofed/drivers/net/mlx4
-.PATH: ${.CURDIR}/../../ofed/include/linux
KMOD= mlx4
SRCS= device_if.h bus_if.h vnode_if.h pci_if.h \
@@ -11,7 +10,8 @@ SRCS= device_if.h bus_if.h vnode_if.h pci_if.h \
srq.c resource_tracker.c sys_tune.c
CFLAGS+= -I${.CURDIR}/../../ofed/drivers/net/mlx4
-CFLAGS+= -I${.CURDIR}/../../ofed/include/
+CFLAGS+= -I${.CURDIR}/../../ofed/include
+CFLAGS+= -I${.CURDIR}/../../compat/linuxkpi/common/include
.include <bsd.kmod.mk>
diff --git a/sys/modules/mlx4ib/Makefile b/sys/modules/mlx4ib/Makefile
index 7bfcb4a..4885bf7 100644
--- a/sys/modules/mlx4ib/Makefile
+++ b/sys/modules/mlx4ib/Makefile
@@ -1,6 +1,5 @@
# $FreeBSD$
.PATH: ${.CURDIR}/../../ofed/drivers/infiniband/hw/mlx4
-.PATH: ${.CURDIR}/../../ofed/include/linux
KMOD= mlx4ib
SRCS= device_if.h bus_if.h vnode_if.h pci_if.h \
@@ -10,7 +9,8 @@ SRCS= device_if.h bus_if.h vnode_if.h pci_if.h \
doorbell.c mad.c main.c mr.c qp.c srq.c wc.c cm.c
CFLAGS+= -I${.CURDIR}/../../ofed/drivers/infiniband/hw/mlx4
-CFLAGS+= -I${.CURDIR}/../../ofed/include/
+CFLAGS+= -I${.CURDIR}/../../ofed/include
+CFLAGS+= -I${.CURDIR}/../../compat/linuxkpi/common/include
CFLAGS+= -DCONFIG_INFINIBAND_USER_MEM
CFLAGS+= -DINET6 -DINET
diff --git a/sys/modules/mlxen/Makefile b/sys/modules/mlxen/Makefile
index 02cca40..11925d4 100644
--- a/sys/modules/mlxen/Makefile
+++ b/sys/modules/mlxen/Makefile
@@ -7,7 +7,8 @@ SRCS += en_cq.c en_main.c en_netdev.c en_port.c en_resources.c
SRCS += en_rx.c en_tx.c
SRCS += opt_inet.h opt_inet6.h
CFLAGS+= -I${.CURDIR}/../../ofed/drivers/net/mlx4
-CFLAGS+= -I${.CURDIR}/../../ofed/include/
+CFLAGS+= -I${.CURDIR}/../../ofed/include
+CFLAGS+= -I${.CURDIR}/../../compat/linuxkpi/common/include
.include <bsd.kmod.mk>
diff --git a/sys/modules/mthca/Makefile b/sys/modules/mthca/Makefile
index 31fcebd..95157e2 100644
--- a/sys/modules/mthca/Makefile
+++ b/sys/modules/mthca/Makefile
@@ -1,5 +1,4 @@
# $FreeBSD$
-
.PATH: ${.CURDIR}/../../ofed/drivers/infiniband/hw/mthca
KMOD = mthca
@@ -11,6 +10,7 @@ SRCS+= mthca_reset.c mthca_srq.c mthca_uar.c
SRCS+= opt_inet.h opt_inet6.h
CFLAGS+= -I${.CURDIR}/../../ofed/include
+CFLAGS+= -I${.CURDIR}/../../compat/linuxkpi/common/include
.include <bsd.kmod.mk>
diff --git a/sys/modules/rdma/krping/Makefile b/sys/modules/rdma/krping/Makefile
index 1bbc0e4..ecc24a5 100644
--- a/sys/modules/rdma/krping/Makefile
+++ b/sys/modules/rdma/krping/Makefile
@@ -1,12 +1,11 @@
# $FreeBSD$
-
-RDMA= ${.CURDIR}/../../../contrib/rdma/krping
-.PATH: ${RDMA}
+.PATH: ${.CURDIR}/../../../contrib/rdma/krping
KMOD= krping
SRCS= krping.c krping_dev.c getopt.c
SRCS+= bus_if.h device_if.h pci_if.h pcib_if.h vnode_if.h
SRCS+= opt_sched.h opt_inet.h opt_inet6.h
CFLAGS+= -I${.CURDIR}/../../../ofed/include
+CFLAGS+= -I${.CURDIR}/../../../compat/linuxkpi/common/include
.include <bsd.kmod.mk>
diff --git a/sys/modules/uart/Makefile b/sys/modules/uart/Makefile
index 6a93320..6e4843b 100644
--- a/sys/modules/uart/Makefile
+++ b/sys/modules/uart/Makefile
@@ -10,8 +10,8 @@ uart_bus_ebus= uart_bus_ebus.c
uart_dev_lpc= uart_dev_lpc.c
.endif
-.if ${MACHINE_CPUARCH} == "arm" || ${MACHINE_CPUARCH} == "sparc64" || \
- ${MACHINE_CPUARCH} == "powerpc"
+.if ${MACHINE_CPUARCH} == "aarch64" || ${MACHINE_CPUARCH} == "arm" || \
+ ${MACHINE_CPUARCH} == "sparc64" || ${MACHINE_CPUARCH} == "powerpc"
ofw_bus_if= ofw_bus_if.h
.endif
diff --git a/sys/modules/usb/usb/Makefile b/sys/modules/usb/usb/Makefile
index 5bae119..704895e 100644
--- a/sys/modules/usb/usb/Makefile
+++ b/sys/modules/usb/usb/Makefile
@@ -33,7 +33,7 @@ KMOD= usb
SRCS= bus_if.h device_if.h usb_if.h usb_if.c vnode_if.h \
opt_usb.h opt_bus.h opt_ddb.h \
usb_pf.h usbdevs.h usbdevs_data.h \
- usb_busdma.c usb_controller.c usb_compat_linux.c usb_core.c usb_debug.c \
+ usb_busdma.c usb_controller.c usb_core.c usb_debug.c \
usb_dev.c usb_device.c usb_dynamic.c usb_error.c usb_generic.c \
usb_handle_request.c usb_hid.c usb_hub.c usb_lookup.c usb_mbuf.c \
usb_msctest.c usb_parse.c usb_pf.c usb_process.c usb_request.c \
diff --git a/sys/net/if.c b/sys/net/if.c
index a68d54a..118e63b 100644
--- a/sys/net/if.c
+++ b/sys/net/if.c
@@ -3314,8 +3314,10 @@ if_delmulti_locked(struct ifnet *ifp, struct ifmultiaddr *ifma, int detaching)
*
* At this time we only support certain types of interfaces,
* and we don't allow the length of the address to change.
+ *
+ * Set noinline to be dtrace-friendly
*/
-int
+__noinline int
if_setlladdr(struct ifnet *ifp, const u_char *lladdr, int len)
{
struct sockaddr_dl *sdl;
diff --git a/sys/net/if_gre.c b/sys/net/if_gre.c
index ffd94d8..24ed971 100644
--- a/sys/net/if_gre.c
+++ b/sys/net/if_gre.c
@@ -691,6 +691,14 @@ gre_input(struct mbuf **mp, int *offp, int proto)
KASSERT(sc != NULL, ("encap_getarg returned NULL"));
ifp = GRE2IFP(sc);
+ hlen = *offp + sizeof(struct grehdr) + 4 * sizeof(uint32_t);
+ if (m->m_pkthdr.len < hlen)
+ goto drop;
+ if (m->m_len < hlen) {
+ m = m_pullup(m, hlen);
+ if (m == NULL)
+ goto drop;
+ }
gh = (struct grehdr *)mtodo(m, *offp);
flags = ntohs(gh->gre_flags);
if (flags & ~GRE_FLAGS_MASK)
diff --git a/sys/net/if_lagg.c b/sys/net/if_lagg.c
index 095f870..7eceaa4 100644
--- a/sys/net/if_lagg.c
+++ b/sys/net/if_lagg.c
@@ -100,7 +100,7 @@ static const char laggname[] = "lagg";
static void lagg_lladdr(struct lagg_softc *, uint8_t *);
static void lagg_capabilities(struct lagg_softc *);
-static void lagg_port_lladdr(struct lagg_port *, uint8_t *);
+static void lagg_port_lladdr(struct lagg_port *, uint8_t *, lagg_llqtype);
static void lagg_port_setlladdr(void *, int);
static int lagg_port_create(struct lagg_softc *, struct ifnet *);
static int lagg_port_destroy(struct lagg_port *, int);
@@ -543,6 +543,7 @@ lagg_clone_destroy(struct ifnet *ifp)
lagg_port_destroy(lp, 1);
/* Unhook the aggregation protocol */
lagg_proto_detach(sc);
+ LAGG_UNLOCK_ASSERT(sc);
ifmedia_removeall(&sc->sc_media);
ether_ifdetach(ifp);
@@ -557,7 +558,12 @@ lagg_clone_destroy(struct ifnet *ifp)
free(sc, M_DEVBUF);
}
-static void
+/*
+ * Set link-layer address on the lagg interface itself.
+ *
+ * Set noinline to be dtrace-friendly
+ */
+static __noinline void
lagg_lladdr(struct lagg_softc *sc, uint8_t *lladdr)
{
struct ifnet *ifp = sc->sc_ifp;
@@ -577,11 +583,16 @@ lagg_lladdr(struct lagg_softc *sc, uint8_t *lladdr)
bcopy(lladdr, IF_LLADDR(ifp), ETHER_ADDR_LEN);
lagg_proto_lladdr(sc);
+ /*
+ * Send notification request for lagg interface
+ * itself. Note that new lladdr is already set.
+ */
bzero(&lp, sizeof(lp));
lp.lp_ifp = sc->sc_ifp;
lp.lp_softc = sc;
- lagg_port_lladdr(&lp, lladdr);
+ /* Do not request lladdr change */
+ lagg_port_lladdr(&lp, lladdr, LAGG_LLQTYPE_VIRT);
}
static void
@@ -622,51 +633,58 @@ lagg_capabilities(struct lagg_softc *sc)
}
}
-static void
-lagg_port_lladdr(struct lagg_port *lp, uint8_t *lladdr)
+/*
+ * Enqueue interface lladdr notification.
+ * If request is already queued, it is updated.
+ * If setting lladdr is also desired, @do_change has to be set to 1.
+ *
+ * Set noinline to be dtrace-friendly
+ */
+static __noinline void
+lagg_port_lladdr(struct lagg_port *lp, uint8_t *lladdr, lagg_llqtype llq_type)
{
struct lagg_softc *sc = lp->lp_softc;
struct ifnet *ifp = lp->lp_ifp;
struct lagg_llq *llq;
- int pending = 0;
- int primary;
LAGG_WLOCK_ASSERT(sc);
- primary = (sc->sc_primary->lp_ifp == ifp) ? 1 : 0;
- if (primary == 0 && (lp->lp_detaching ||
- memcmp(lladdr, IF_LLADDR(ifp), ETHER_ADDR_LEN) == 0))
+ /*
+ * Do not enqueue requests where lladdr is the same for
+ * "physical" interfaces (e.g. ports in lagg)
+ */
+ if (llq_type == LAGG_LLQTYPE_PHYS &&
+ memcmp(IF_LLADDR(ifp), lladdr, ETHER_ADDR_LEN) == 0)
return;
/* Check to make sure its not already queued to be changed */
SLIST_FOREACH(llq, &sc->sc_llq_head, llq_entries) {
- if (llq->llq_ifp == ifp && llq->llq_primary == primary) {
- pending = 1;
- break;
+ if (llq->llq_ifp == ifp) {
+ /* Update lladdr, it may have changed */
+ bcopy(lladdr, llq->llq_lladdr, ETHER_ADDR_LEN);
+ return;
}
}
- if (!pending) {
- llq = malloc(sizeof(struct lagg_llq), M_DEVBUF, M_NOWAIT);
- if (llq == NULL) /* XXX what to do */
- return;
- }
+ llq = malloc(sizeof(struct lagg_llq), M_DEVBUF, M_NOWAIT | M_ZERO);
+ if (llq == NULL) /* XXX what to do */
+ return;
- /* Update the lladdr even if pending, it may have changed */
llq->llq_ifp = ifp;
- llq->llq_primary = primary;
+ llq->llq_type = llq_type;
bcopy(lladdr, llq->llq_lladdr, ETHER_ADDR_LEN);
-
- if (!pending)
- SLIST_INSERT_HEAD(&sc->sc_llq_head, llq, llq_entries);
+ /* XXX: We should insert to tail */
+ SLIST_INSERT_HEAD(&sc->sc_llq_head, llq, llq_entries);
taskqueue_enqueue(taskqueue_swi, &sc->sc_lladdr_task);
}
/*
* Set the interface MAC address from a taskqueue to avoid a LOR.
+ *
+ * Set noinline to be dtrace-friendly
*/
-static void
+static __noinline void
lagg_port_setlladdr(void *arg, int pending)
{
struct lagg_softc *sc = (struct lagg_softc *)arg;
@@ -688,17 +706,20 @@ lagg_port_setlladdr(void *arg, int pending)
ifp = llq->llq_ifp;
CURVNET_SET(ifp->if_vnet);
- if (llq->llq_primary == 0) {
- /*
- * Set the link layer address on the laggport interface.
- * if_setlladdr() triggers gratuitous ARPs for INET.
- */
+ error = 0;
+
+ /*
+ * Set the link layer address on the laggport interface.
+ * Note that if_setlladdr() or iflladdr_event handler
+ * may result in arp transmission / lltable updates.
+ */
+ if (llq->llq_type == LAGG_LLQTYPE_PHYS)
error = if_setlladdr(ifp, llq->llq_lladdr,
ETHER_ADDR_LEN);
- if (error)
- printf("%s: setlladdr failed on %s\n", __func__,
- ifp->if_xname);
- } else
+ if (error)
+ printf("%s: setlladdr failed on %s\n", __func__,
+ ifp->if_xname);
+ else
EVENTHANDLER_INVOKE(iflladdr_event, ifp);
CURVNET_RESTORE();
head = SLIST_NEXT(llq, llq_entries);
@@ -730,7 +751,7 @@ lagg_port_create(struct lagg_softc *sc, struct ifnet *ifp)
}
/* XXX Disallow non-ethernet interfaces (this should be any of 802) */
- if (ifp->if_type != IFT_ETHER)
+ if (ifp->if_type != IFT_ETHER && ifp->if_type != IFT_L2VLAN)
return (EPROTONOSUPPORT);
/* Allow the first Ethernet member to define the MTU */
@@ -784,10 +805,15 @@ lagg_port_create(struct lagg_softc *sc, struct ifnet *ifp)
if (SLIST_EMPTY(&sc->sc_ports)) {
sc->sc_primary = lp;
+ /* First port in lagg. Update/notify lagg lladdress */
lagg_lladdr(sc, IF_LLADDR(ifp));
} else {
- /* Update link layer address for this port */
- lagg_port_lladdr(lp, IF_LLADDR(sc->sc_ifp));
+
+ /*
+ * Update link layer address for this port and
+ * send notifications to other subsystems.
+ */
+ lagg_port_lladdr(lp, IF_LLADDR(sc->sc_ifp), LAGG_LLQTYPE_PHYS);
}
/*
@@ -873,7 +899,7 @@ lagg_port_destroy(struct lagg_port *lp, int rundelport)
if (!lp->lp_detaching) {
lagg_ether_cmdmulti(lp, 0);
lagg_setflags(lp, 0);
- lagg_port_lladdr(lp, lp->lp_lladdr);
+ lagg_port_lladdr(lp, lp->lp_lladdr, LAGG_LLQTYPE_PHYS);
}
/* Restore interface */
@@ -905,19 +931,16 @@ lagg_port_destroy(struct lagg_port *lp, int rundelport)
}
lagg_lladdr(sc, lladdr);
+ /* Mark lp0 as new primary */
+ sc->sc_primary = lp0;
+
/*
- * Update link layer address for each port. No port is
- * marked as primary at this moment.
+ * Enqueue lladdr update/notification for each port
+ * (new primary needs update as well, to switch from
+ * old lladdr to its 'real' one).
*/
SLIST_FOREACH(lp_ptr, &sc->sc_ports, lp_entries)
- lagg_port_lladdr(lp_ptr, lladdr);
- /*
- * Mark lp0 as the new primary. This invokes an
- * iflladdr_event.
- */
- sc->sc_primary = lp0;
- if (lp0 != NULL)
- lagg_port_lladdr(lp0, lladdr);
+ lagg_port_lladdr(lp_ptr, lladdr, LAGG_LLQTYPE_PHYS);
}
/* Remove any pending lladdr changes from the queue */
@@ -1149,8 +1172,8 @@ static void
lagg_init(void *xsc)
{
struct lagg_softc *sc = (struct lagg_softc *)xsc;
- struct lagg_port *lp;
struct ifnet *ifp = sc->sc_ifp;
+ struct lagg_port *lp;
if (ifp->if_drv_flags & IFF_DRV_RUNNING)
return;
@@ -1158,9 +1181,14 @@ lagg_init(void *xsc)
LAGG_WLOCK(sc);
ifp->if_drv_flags |= IFF_DRV_RUNNING;
- /* Update the port lladdrs */
+
+ /*
+ * Update the port lladdrs if needed.
+ * This might be if_setlladdr() notification
+ * that lladdr has been changed.
+ */
SLIST_FOREACH(lp, &sc->sc_ports, lp_entries)
- lagg_port_lladdr(lp, IF_LLADDR(ifp));
+ lagg_port_lladdr(lp, IF_LLADDR(ifp), LAGG_LLQTYPE_PHYS);
lagg_proto_init(sc);
@@ -1244,6 +1272,7 @@ lagg_ioctl(struct ifnet *ifp, u_long cmd, caddr_t data)
LAGG_WLOCK(sc);
lagg_proto_detach(sc);
+ LAGG_UNLOCK_ASSERT(sc);
lagg_proto_attach(sc, ra->ra_proto);
break;
case SIOCGLAGGOPTS:
diff --git a/sys/net/if_lagg.h b/sys/net/if_lagg.h
index 956c238..195ac3a 100644
--- a/sys/net/if_lagg.h
+++ b/sys/net/if_lagg.h
@@ -201,11 +201,16 @@ struct lagg_mc {
SLIST_ENTRY(lagg_mc) mc_entries;
};
+typedef enum {
+ LAGG_LLQTYPE_PHYS = 0, /* Task related to physical (underlying) port */
+ LAGG_LLQTYPE_VIRT, /* Task related to lagg interface itself */
+} lagg_llqtype;
+
/* List of interfaces to have the MAC address modified */
struct lagg_llq {
struct ifnet *llq_ifp;
uint8_t llq_lladdr[ETHER_ADDR_LEN];
- uint8_t llq_primary;
+ lagg_llqtype llq_type;
SLIST_ENTRY(lagg_llq) llq_entries;
};
@@ -273,6 +278,7 @@ struct lagg_port {
#define LAGG_WUNLOCK(_sc) rm_wunlock(&(_sc)->sc_mtx)
#define LAGG_RLOCK_ASSERT(_sc) rm_assert(&(_sc)->sc_mtx, RA_RLOCKED)
#define LAGG_WLOCK_ASSERT(_sc) rm_assert(&(_sc)->sc_mtx, RA_WLOCKED)
+#define LAGG_UNLOCK_ASSERT(_sc) rm_assert(&(_sc)->sc_mtx, RA_UNLOCKED)
extern struct mbuf *(*lagg_input_p)(struct ifnet *, struct mbuf *);
extern void (*lagg_linkstate_p)(struct ifnet *, int );
diff --git a/sys/net/if_tap.c b/sys/net/if_tap.c
index b23ab34..83de955 100644
--- a/sys/net/if_tap.c
+++ b/sys/net/if_tap.c
@@ -171,7 +171,7 @@ SYSCTL_INT(_net_link_tap, OID_AUTO, user_open, CTLFLAG_RW, &tapuopen, 0,
SYSCTL_INT(_net_link_tap, OID_AUTO, up_on_open, CTLFLAG_RW, &tapuponopen, 0,
"Bring interface up when /dev/tap is opened");
SYSCTL_INT(_net_link_tap, OID_AUTO, devfs_cloning, CTLFLAG_RWTUN, &tapdclone, 0,
- "Enably legacy devfs interface creation");
+ "Enable legacy devfs interface creation");
SYSCTL_INT(_net_link_tap, OID_AUTO, debug, CTLFLAG_RW, &tapdebug, 0, "");
DEV_MODULE(if_tap, tapmodevent, NULL);
diff --git a/sys/net/pfvar.h b/sys/net/pfvar.h
index 747da41..2a7182e 100644
--- a/sys/net/pfvar.h
+++ b/sys/net/pfvar.h
@@ -198,10 +198,11 @@ extern struct rwlock pf_rules_lock;
(a)->addr32[0] == (b)->addr32[0])) \
#define PF_ANEQ(a, b, c) \
- ((a)->addr32[0] != (b)->addr32[0] || \
+ ((c == AF_INET && (a)->addr32[0] != (b)->addr32[0]) || \
+ (c == AF_INET6 && ((a)->addr32[0] != (b)->addr32[0] || \
(a)->addr32[1] != (b)->addr32[1] || \
(a)->addr32[2] != (b)->addr32[2] || \
- (a)->addr32[3] != (b)->addr32[3]) \
+ (a)->addr32[3] != (b)->addr32[3]))) \
#define PF_AZERO(a, c) \
((c == AF_INET && !(a)->addr32[0]) || \
diff --git a/sys/net/route.c b/sys/net/route.c
index 2bcd4ed..c9c7bba 100644
--- a/sys/net/route.c
+++ b/sys/net/route.c
@@ -845,7 +845,7 @@ rt_foreach_fib_walk(int af, rt_setwarg_t *setwa_f, rt_walktree_f_t *wa_f,
if (rnh == NULL)
continue;
if (setwa_f != NULL)
- setwa_f(rnh, fibnum, i, arg);
+ setwa_f(rnh, fibnum, AF_UNSPEC, arg);
RADIX_NODE_HEAD_LOCK(rnh);
rnh->rnh_walktree(rnh, (walktree_f_t *)wa_f, arg);
diff --git a/sys/net80211/ieee80211.c b/sys/net80211/ieee80211.c
index 39e03ea..ca27cb1 100644
--- a/sys/net80211/ieee80211.c
+++ b/sys/net80211/ieee80211.c
@@ -356,6 +356,8 @@ ieee80211_ifdetach(struct ieee80211com *ic)
LIST_REMOVE(ic, ic_next);
mtx_unlock(&ic_list_mtx);
+ taskqueue_drain(taskqueue_thread, &ic->ic_restart_task);
+
/*
* The VAP is responsible for setting and clearing
* the VIMAGE context.
diff --git a/sys/net80211/ieee80211_proto.c b/sys/net80211/ieee80211_proto.c
index 52e92ba..408bf93 100644
--- a/sys/net80211/ieee80211_proto.c
+++ b/sys/net80211/ieee80211_proto.c
@@ -108,6 +108,7 @@ static void update_promisc(void *, int);
static void update_channel(void *, int);
static void update_chw(void *, int);
static void update_wme(void *, int);
+static void restart_vaps(void *, int);
static void ieee80211_newstate_cb(void *, int);
static int
@@ -146,6 +147,7 @@ ieee80211_proto_attach(struct ieee80211com *ic)
TASK_INIT(&ic->ic_bmiss_task, 0, beacon_miss, ic);
TASK_INIT(&ic->ic_chw_task, 0, update_chw, ic);
TASK_INIT(&ic->ic_wme_task, 0, update_wme, ic);
+ TASK_INIT(&ic->ic_restart_task, 0, restart_vaps, ic);
ic->ic_wme.wme_hipri_switch_hysteresis =
AGGRESSIVE_MODE_SWITCH_HYSTERESIS;
@@ -1212,6 +1214,15 @@ update_wme(void *arg, int npending)
ic->ic_wme.wme_update(ic);
}
+static void
+restart_vaps(void *arg, int npending)
+{
+ struct ieee80211com *ic = arg;
+
+ ieee80211_suspend_all(ic);
+ ieee80211_resume_all(ic);
+}
+
/*
* Block until the parent is in a known state. This is
* used after any operations that dispatch a task (e.g.
@@ -1486,6 +1497,19 @@ ieee80211_resume_all(struct ieee80211com *ic)
IEEE80211_UNLOCK(ic);
}
+/*
+ * Restart all vap's running on a device.
+ */
+void
+ieee80211_restart_all(struct ieee80211com *ic)
+{
+ /*
+ * NB: do not use ieee80211_runtask here, we will
+ * block & drain net80211 taskqueue.
+ */
+ taskqueue_enqueue(taskqueue_thread, &ic->ic_restart_task);
+}
+
void
ieee80211_beacon_miss(struct ieee80211com *ic)
{
diff --git a/sys/net80211/ieee80211_proto.h b/sys/net80211/ieee80211_proto.h
index 38bd3d6..88633e7 100644
--- a/sys/net80211/ieee80211_proto.h
+++ b/sys/net80211/ieee80211_proto.h
@@ -307,6 +307,7 @@ void ieee80211_stop(struct ieee80211vap *);
void ieee80211_stop_all(struct ieee80211com *);
void ieee80211_suspend_all(struct ieee80211com *);
void ieee80211_resume_all(struct ieee80211com *);
+void ieee80211_restart_all(struct ieee80211com *);
void ieee80211_dturbo_switch(struct ieee80211vap *, int newflags);
void ieee80211_swbmiss(void *arg);
void ieee80211_beacon_miss(struct ieee80211com *);
diff --git a/sys/net80211/ieee80211_var.h b/sys/net80211/ieee80211_var.h
index 5c5b1c9..cd27ead 100644
--- a/sys/net80211/ieee80211_var.h
+++ b/sys/net80211/ieee80211_var.h
@@ -134,6 +134,7 @@ struct ieee80211com {
struct task ic_bmiss_task; /* deferred beacon miss hndlr */
struct task ic_chw_task; /* deferred HT CHW update */
struct task ic_wme_task; /* deferred WME update */
+ struct task ic_restart_task; /* deferred device restart */
counter_u64_t ic_ierrors; /* input errors */
counter_u64_t ic_oerrors; /* output errors */
diff --git a/sys/netgraph/bluetooth/hci/ng_hci_evnt.c b/sys/netgraph/bluetooth/hci/ng_hci_evnt.c
index a31c5fb..d56da1b 100644
--- a/sys/netgraph/bluetooth/hci/ng_hci_evnt.c
+++ b/sys/netgraph/bluetooth/hci/ng_hci_evnt.c
@@ -929,7 +929,7 @@ encryption_change(ng_hci_unit_p unit, struct mbuf *event)
"%s: %s - invalid connection handle=%d\n",
__func__, NG_NODE_NAME(unit->node), h);
error = ENOENT;
- } else if (con->link_type != NG_HCI_LINK_ACL) {
+ } else if (con->link_type == NG_HCI_LINK_SCO) {
NG_HCI_ALERT(
"%s: %s - invalid link type=%d\n",
__func__, NG_NODE_NAME(unit->node),
@@ -940,6 +940,7 @@ encryption_change(ng_hci_unit_p unit, struct mbuf *event)
con->encryption_mode = NG_HCI_ENCRYPTION_MODE_P2P;
else
con->encryption_mode = NG_HCI_ENCRYPTION_MODE_NONE;
+ ng_hci_lp_enc_change(con, ep->encryption_enable);
} else
NG_HCI_ERR(
"%s: %s - failed to change encryption mode, status=%d\n",
diff --git a/sys/netgraph/bluetooth/hci/ng_hci_ulpi.c b/sys/netgraph/bluetooth/hci/ng_hci_ulpi.c
index 9934ea8..0d35245 100644
--- a/sys/netgraph/bluetooth/hci/ng_hci_ulpi.c
+++ b/sys/netgraph/bluetooth/hci/ng_hci_ulpi.c
@@ -814,6 +814,37 @@ ng_hci_lp_con_cfm(ng_hci_unit_con_p con, int status)
return (0);
} /* ng_hci_lp_con_cfm */
+int
+ng_hci_lp_enc_change(ng_hci_unit_con_p con, int status)
+{
+ ng_hci_unit_p unit = con->unit;
+ struct ng_mesg *msg = NULL;
+ ng_hci_lp_enc_change_ep *ep = NULL;
+ int error;
+
+
+ if (con->link_type != NG_HCI_LINK_SCO) {
+ if (unit->acl != NULL && NG_HOOK_IS_VALID(unit->acl)) {
+ NG_MKMESSAGE(msg, NGM_HCI_COOKIE, NGM_HCI_LP_ENC_CHG,
+ sizeof(*ep), M_NOWAIT);
+ if (msg != NULL) {
+ ep = (ng_hci_lp_enc_change_ep *) msg->data;
+ ep->status = status;
+ ep->link_type = con->link_type;
+ ep->con_handle = con->con_handle;
+
+ NG_SEND_MSG_HOOK(error, unit->node, msg,
+ unit->acl, 0);
+ }
+ } else
+ NG_HCI_INFO(
+"%s: %s - ACL hook not valid, hook=%p\n",
+ __func__, NG_NODE_NAME(unit->node), unit->acl);
+
+ }
+ return (0);
+} /* ng_hci_lp_con_cfm */
+
/*
* Send LP_ConnectInd event to the upper layer protocol
*/
diff --git a/sys/netgraph/bluetooth/hci/ng_hci_ulpi.h b/sys/netgraph/bluetooth/hci/ng_hci_ulpi.h
index ced697e..4bf9f43 100644
--- a/sys/netgraph/bluetooth/hci/ng_hci_ulpi.h
+++ b/sys/netgraph/bluetooth/hci/ng_hci_ulpi.h
@@ -47,6 +47,7 @@ int ng_hci_lp_discon_ind (ng_hci_unit_con_p, int);
int ng_hci_lp_qos_req (ng_hci_unit_p, item_p, hook_p);
int ng_hci_lp_qos_cfm (ng_hci_unit_con_p, int);
int ng_hci_lp_qos_ind (ng_hci_unit_con_p);
+int ng_hci_lp_enc_change (ng_hci_unit_con_p, int);
void ng_hci_process_con_timeout (node_p, hook_p, void *, int);
diff --git a/sys/netgraph/bluetooth/include/ng_btsocket.h b/sys/netgraph/bluetooth/include/ng_btsocket.h
index 483858e..4815e43 100644
--- a/sys/netgraph/bluetooth/include/ng_btsocket.h
+++ b/sys/netgraph/bluetooth/include/ng_btsocket.h
@@ -255,7 +255,7 @@ struct sockaddr_l2cap {
#define SO_L2CAP_IFLOW 3 /* get incoming flow spec. */
#define SO_L2CAP_OFLOW 4 /* get/set outgoing flow spec. */
#define SO_L2CAP_FLUSH 5 /* get/set flush timeout */
-
+#define SO_L2CAP_ENCRYPTED 6 /* get/set whether wait for encryptin on connect */
/*
* Raw L2CAP sockets ioctl's
*/
diff --git a/sys/netgraph/bluetooth/include/ng_btsocket_l2cap.h b/sys/netgraph/bluetooth/include/ng_btsocket_l2cap.h
index 7d8a200..80c7193 100644
--- a/sys/netgraph/bluetooth/include/ng_btsocket_l2cap.h
+++ b/sys/netgraph/bluetooth/include/ng_btsocket_l2cap.h
@@ -136,7 +136,7 @@ struct ng_btsocket_l2cap_pcb {
u_int16_t psm; /* PSM */
u_int16_t cid; /* Local channel ID */
-
+ uint8_t idtype;
u_int16_t flags; /* socket flags */
#define NG_BTSOCKET_L2CAP_CLIENT (1 << 0) /* socket is client */
#define NG_BTSOCKET_L2CAP_TIMO (1 << 1) /* timeout pending */
@@ -147,6 +147,7 @@ struct ng_btsocket_l2cap_pcb {
#define NG_BTSOCKET_L2CAP_CONFIGURING 2 /* wait for config */
#define NG_BTSOCKET_L2CAP_OPEN 3 /* socket open */
#define NG_BTSOCKET_L2CAP_DISCONNECTING 4 /* wait for disconnect */
+#define NG_BTSOCKET_L2CAP_W4_ENC_CHANGE 5
u_int8_t cfg_state; /* config state */
#define NG_BTSOCKET_L2CAP_CFG_IN (1 << 0) /* incoming path done */
@@ -156,7 +157,7 @@ struct ng_btsocket_l2cap_pcb {
#define NG_BTSOCKET_L2CAP_CFG_IN_SENT (1 << 2) /* L2CAP ConfigReq sent */
#define NG_BTSOCKET_L2CAP_CFG_OUT_SENT (1 << 3) /* ---/--- */
-
+ uint8_t encryption;
u_int16_t imtu; /* Incoming MTU */
ng_l2cap_flow_t iflow; /* Input flow spec */
@@ -172,7 +173,8 @@ struct ng_btsocket_l2cap_pcb {
ng_btsocket_l2cap_rtentry_p rt; /* routing info */
struct mtx pcb_mtx; /* pcb mutex */
-
+ uint16_t need_encrypt; /*encryption needed*/
+
LIST_ENTRY(ng_btsocket_l2cap_pcb) next; /* link to next PCB */
};
typedef struct ng_btsocket_l2cap_pcb ng_btsocket_l2cap_pcb_t;
diff --git a/sys/netgraph/bluetooth/include/ng_hci.h b/sys/netgraph/bluetooth/include/ng_hci.h
index 1688c4c..40d6a79 100644
--- a/sys/netgraph/bluetooth/include/ng_hci.h
+++ b/sys/netgraph/bluetooth/include/ng_hci.h
@@ -469,7 +469,13 @@ typedef struct {
typedef struct {
u_int16_t con_handle; /* connection handle */
} ng_hci_lp_qos_ind_ep;
-
+/*Encryption Change event*/
+#define NGM_HCI_LP_ENC_CHG 10 /* HCI->Upper*/
+typedef struct {
+ uint16_t con_handle;
+ uint8_t status;
+ uint8_t link_type;
+}ng_hci_lp_enc_change_ep;
/**************************************************************************
**************************************************************************
** HCI node command/event parameters
diff --git a/sys/netgraph/bluetooth/include/ng_l2cap.h b/sys/netgraph/bluetooth/include/ng_l2cap.h
index 48b3b55..8a72e3d 100644
--- a/sys/netgraph/bluetooth/include/ng_l2cap.h
+++ b/sys/netgraph/bluetooth/include/ng_l2cap.h
@@ -256,6 +256,7 @@ typedef union {
u_int16_t mtu; /* NG_L2CAP_OPT_MTU */
u_int16_t flush_timo; /* NG_L2CAP_OPT_FLUSH_TIMO */
ng_l2cap_flow_t flow; /* NG_L2CAP_OPT_QOS */
+ uint16_t encryption;
} ng_l2cap_cfg_opt_val_t;
typedef ng_l2cap_cfg_opt_val_t * ng_l2cap_cfg_opt_val_p;
@@ -357,6 +358,7 @@ typedef struct {
#define NG_L2CAP_L2CA_IDTYPE_BREDR 0
#define NG_L2CAP_L2CA_IDTYPE_ATT 1
#define NG_L2CAP_L2CA_IDTYPE_LE 2
+#define NG_L2CAP_L2CA_IDTYPE_SMP 3
/* L2CA_Connect */
#define NGM_L2CAP_L2CA_CON 0x80
/* Upper -> L2CAP */
@@ -373,6 +375,7 @@ typedef struct {
uint16_t idtype; /*ID type*/
u_int16_t result; /* 0x00 - success */
u_int16_t status; /* if result != 0x00 */
+ uint8_t encryption;
} ng_l2cap_l2ca_con_op;
/* L2CA_ConnectInd */
@@ -598,6 +601,12 @@ typedef struct {
* u_int16_t result; /* 0x00 - success */
* } ng_l2cap_l2ca_enable_clt_op;
#endif
+#define NGM_L2CAP_L2CA_ENC_CHANGE 0x92
+typedef struct {
+ uint16_t lcid;
+ uint16_t result;
+ uint8_t idtype;
+} ng_l2cap_l2ca_enc_chg_op;
/**************************************************************************
**************************************************************************
diff --git a/sys/netgraph/bluetooth/l2cap/ng_l2cap_evnt.c b/sys/netgraph/bluetooth/l2cap/ng_l2cap_evnt.c
index 287ab66..7429f78 100644
--- a/sys/netgraph/bluetooth/l2cap/ng_l2cap_evnt.c
+++ b/sys/netgraph/bluetooth/l2cap/ng_l2cap_evnt.c
@@ -475,6 +475,8 @@ ng_l2cap_process_con_req(ng_l2cap_con_p con, u_int8_t ident)
con->rx_pkt = NULL;
if(dcid == NG_L2CAP_ATT_CID)
idtype = NG_L2CAP_L2CA_IDTYPE_ATT;
+ else if(dcid == NG_L2CAP_SMP_CID)
+ idtype = NG_L2CAP_L2CA_IDTYPE_SMP;
else if( con->linktype != NG_HCI_LINK_ACL)
idtype = NG_L2CAP_L2CA_IDTYPE_LE;
else
@@ -602,7 +604,9 @@ ng_l2cap_process_con_rsp(ng_l2cap_con_p con, u_int8_t ident)
*/
cmd->ch->dcid = dcid;
- cmd->ch->state = (cmd->ch->scid == NG_L2CAP_ATT_CID)?
+ cmd->ch->state = ((cmd->ch->scid == NG_L2CAP_ATT_CID)||
+ (cmd->ch->scid == NG_L2CAP_SMP_CID))
+ ?
NG_L2CAP_OPEN : NG_L2CAP_CONFIG;
} else
/* There was an error, so close the channel */
diff --git a/sys/netgraph/bluetooth/l2cap/ng_l2cap_llpi.c b/sys/netgraph/bluetooth/l2cap/ng_l2cap_llpi.c
index e9e7412..926a674 100644
--- a/sys/netgraph/bluetooth/l2cap/ng_l2cap_llpi.c
+++ b/sys/netgraph/bluetooth/l2cap/ng_l2cap_llpi.c
@@ -481,6 +481,58 @@ out:
return (error);
} /* ng_l2cap_qos_ind */
+int
+ng_l2cap_lp_enc_change(ng_l2cap_p l2cap, struct ng_mesg *msg)
+{
+ ng_hci_lp_enc_change_ep *ep = NULL;
+ ng_l2cap_con_p con = NULL;
+ int error = 0;
+ ng_l2cap_chan_p ch = NULL;
+ /* Check message */
+ if (msg->header.arglen != sizeof(*ep)) {
+ NG_L2CAP_ALERT(
+"%s: %s - invalid LP_ENCChange message size\n",
+ __func__, NG_NODE_NAME(l2cap->node));
+ error = EMSGSIZE;
+ goto out;
+ }
+
+ ep = (ng_hci_lp_enc_change_ep *) (msg->data);
+
+ /* Check if we have this connection */
+ con = ng_l2cap_con_by_handle(l2cap, ep->con_handle);
+ if (con == NULL) {
+ NG_L2CAP_ERR(
+"%s: %s - unexpected LP_Enc Change Event. " \
+"Connection does not exist, con_handle=%d\n",
+ __func__, NG_NODE_NAME(l2cap->node), ep->con_handle);
+ error = ENOENT;
+ goto out;
+ }
+
+ /* Verify connection state */
+ if (con->state != NG_L2CAP_CON_OPEN) {
+ NG_L2CAP_ERR(
+"%s: %s - unexpected ENC_CHANGE event. " \
+"Invalid connection state, state=%d, con_handle=%d\n",
+ __func__, NG_NODE_NAME(l2cap->node), con->state,
+ con->con_handle);
+ error = EINVAL;
+ goto out;
+ }
+
+ con->encryption = ep->status;
+
+ LIST_FOREACH(ch, &l2cap->chan_list, next){
+ if((ch->con->con_handle == ep->con_handle) &&
+ (ch->con->linktype == ep->link_type))
+ ng_l2cap_l2ca_encryption_change(ch, ep->status);
+ }
+
+out:
+ return (error);
+} /* ng_l2cap_enc_change */
+
/*
* Prepare L2CAP packet. Prepend packet with L2CAP packet header and then
* segment it according to HCI MTU.
diff --git a/sys/netgraph/bluetooth/l2cap/ng_l2cap_llpi.h b/sys/netgraph/bluetooth/l2cap/ng_l2cap_llpi.h
index 67ea6c0..6bdb1d9 100644
--- a/sys/netgraph/bluetooth/l2cap/ng_l2cap_llpi.h
+++ b/sys/netgraph/bluetooth/l2cap/ng_l2cap_llpi.h
@@ -41,6 +41,7 @@ int ng_l2cap_lp_discon_ind (ng_l2cap_p, struct ng_mesg *);
int ng_l2cap_lp_qos_req (ng_l2cap_p, u_int16_t, ng_l2cap_flow_p);
int ng_l2cap_lp_qos_cfm (ng_l2cap_p, struct ng_mesg *);
int ng_l2cap_lp_qos_ind (ng_l2cap_p, struct ng_mesg *);
+int ng_l2cap_lp_enc_change (ng_l2cap_p, struct ng_mesg *);
int ng_l2cap_lp_send (ng_l2cap_con_p, u_int16_t,struct mbuf *);
int ng_l2cap_lp_receive (ng_l2cap_p, struct mbuf *);
void ng_l2cap_lp_deliver (ng_l2cap_con_p);
diff --git a/sys/netgraph/bluetooth/l2cap/ng_l2cap_main.c b/sys/netgraph/bluetooth/l2cap/ng_l2cap_main.c
index 5ed61aa..070d8e9 100644
--- a/sys/netgraph/bluetooth/l2cap/ng_l2cap_main.c
+++ b/sys/netgraph/bluetooth/l2cap/ng_l2cap_main.c
@@ -350,7 +350,9 @@ ng_l2cap_lower_rcvmsg(node_p node, item_p item, hook_p lasthook)
case NGM_HCI_LP_QOS_IND:
error = ng_l2cap_lp_qos_ind(l2cap, msg);
break;
-
+ case NGM_HCI_LP_ENC_CHG:
+ error = ng_l2cap_lp_enc_change(l2cap, msg);
+ break;
default:
error = EINVAL;
break;
diff --git a/sys/netgraph/bluetooth/l2cap/ng_l2cap_misc.c b/sys/netgraph/bluetooth/l2cap/ng_l2cap_misc.c
index 886a918..889f6ab 100644
--- a/sys/netgraph/bluetooth/l2cap/ng_l2cap_misc.c
+++ b/sys/netgraph/bluetooth/l2cap/ng_l2cap_misc.c
@@ -114,7 +114,7 @@ ng_l2cap_new_con(ng_l2cap_p l2cap, bdaddr_p bdaddr, int type)
con->l2cap = l2cap;
con->state = NG_L2CAP_CON_CLOSED;
-
+ con->encryption = 0;
/*
* XXX
*
@@ -340,6 +340,8 @@ ng_l2cap_new_chan(ng_l2cap_p l2cap, ng_l2cap_con_p con, u_int16_t psm, int idtyp
return (NULL);
if(idtype == NG_L2CAP_L2CA_IDTYPE_ATT){
ch->scid = ch->dcid = NG_L2CAP_ATT_CID;
+ }else if(idtype == NG_L2CAP_L2CA_IDTYPE_SMP){
+ ch->scid = ch->dcid = NG_L2CAP_SMP_CID;
}else{
ch->scid = ng_l2cap_get_cid(l2cap,
(con->linktype!= NG_HCI_LINK_ACL));
@@ -379,7 +381,8 @@ ng_l2cap_chan_by_scid(ng_l2cap_p l2cap, u_int16_t scid, int idtype)
{
ng_l2cap_chan_p ch = NULL;
- if(idtype == NG_L2CAP_L2CA_IDTYPE_ATT){
+ if((idtype == NG_L2CAP_L2CA_IDTYPE_ATT)||
+ (idtype == NG_L2CAP_L2CA_IDTYPE_SMP)){
return NULL;
}
@@ -390,7 +393,6 @@ ng_l2cap_chan_by_scid(ng_l2cap_p l2cap, u_int16_t scid, int idtype)
if((idtype != NG_L2CAP_L2CA_IDTYPE_LE)&&
(ch->con->linktype != NG_HCI_LINK_ACL ))
continue;
-
if (ch->scid == scid)
break;
}
diff --git a/sys/netgraph/bluetooth/l2cap/ng_l2cap_ulpi.c b/sys/netgraph/bluetooth/l2cap/ng_l2cap_ulpi.c
index 67ca43b..4b88bc8 100644
--- a/sys/netgraph/bluetooth/l2cap/ng_l2cap_ulpi.c
+++ b/sys/netgraph/bluetooth/l2cap/ng_l2cap_ulpi.c
@@ -130,6 +130,10 @@ ng_l2cap_l2ca_con_req(ng_l2cap_p l2cap, struct ng_mesg *msg)
_ng_l2cap_con_rsp(cmd->aux, cmd->ident, NG_L2CAP_ATT_CID,
NG_L2CAP_ATT_CID, 0, 0);
cmd->aux->m_flags |= M_PROTO2;
+ }else if(ip->idtype == NG_L2CAP_L2CA_IDTYPE_SMP){
+ _ng_l2cap_con_rsp(cmd->aux, cmd->ident, NG_L2CAP_SMP_CID,
+ NG_L2CAP_SMP_CID, 0, 0);
+ cmd->aux->m_flags |= M_PROTO2;
}else{
_ng_l2cap_con_req(cmd->aux, cmd->ident, ch->psm, ch->scid);
}
@@ -191,13 +195,16 @@ ng_l2cap_l2ca_con_rsp(ng_l2cap_chan_p ch, u_int32_t token, u_int16_t result,
if(ch->scid == NG_L2CAP_ATT_CID){
op->idtype = NG_L2CAP_L2CA_IDTYPE_ATT;
op->lcid = ch->con->con_handle;
+ }else if(ch->scid == NG_L2CAP_SMP_CID){
+ op->idtype = NG_L2CAP_L2CA_IDTYPE_SMP;
+ op->lcid = ch->con->con_handle;
}else{
op->idtype = (ch->con->linktype == NG_HCI_LINK_ACL)?
NG_L2CAP_L2CA_IDTYPE_BREDR :
NG_L2CAP_L2CA_IDTYPE_LE;
op->lcid = ch->scid;
}
-
+ op->encryption = ch->con->encryption;
op->result = result;
op->status = status;
@@ -234,7 +241,8 @@ ng_l2cap_l2ca_con_rsp_req(ng_l2cap_p l2cap, struct ng_mesg *msg)
ip = (ng_l2cap_l2ca_con_rsp_ip *)(msg->data);
/* Check if we have this channel */
- if(ip->lcid != NG_L2CAP_ATT_CID){
+ if((ip->lcid != NG_L2CAP_ATT_CID)&&
+ (ip->lcid != NG_L2CAP_SMP_CID)){
ch = ng_l2cap_chan_by_scid(l2cap, ip->lcid
,(ip->linktype == NG_HCI_LINK_ACL)?
NG_L2CAP_L2CA_IDTYPE_BREDR:
@@ -281,7 +289,8 @@ ng_l2cap_l2ca_con_rsp_req(ng_l2cap_p l2cap, struct ng_mesg *msg)
/* Check result */
switch (ip->result) {
case NG_L2CAP_SUCCESS:
- ch->state = (ch->scid == NG_L2CAP_ATT_CID)?
+ ch->state = ((ch->scid == NG_L2CAP_ATT_CID)||
+ (ch->scid == NG_L2CAP_SMP_CID))?
NG_L2CAP_OPEN : NG_L2CAP_CONFIG;
ch->cfg_state = 0;
break;
@@ -324,6 +333,53 @@ out:
return (error);
} /* ng_l2cap_l2ca_con_rsp_req */
+int ng_l2cap_l2ca_encryption_change(ng_l2cap_chan_p ch, uint16_t result)
+{
+ ng_l2cap_p l2cap = ch->con->l2cap;
+ struct ng_mesg *msg = NULL;
+ ng_l2cap_l2ca_enc_chg_op *op = NULL;
+ int error = 0;
+
+ /* Check if upstream hook is connected and valid */
+ if (l2cap->l2c == NULL || NG_HOOK_NOT_VALID(l2cap->l2c)) {
+ NG_L2CAP_ERR(
+"%s: %s - unable to send L2CA_ConnectRsp response message. " \
+"Hook is not connected or valid, psm=%d\n",
+ __func__, NG_NODE_NAME(l2cap->node), ch->psm);
+
+ return (ENOTCONN);
+ }
+
+ /* Create and send L2CA_ConnectRsp response message */
+ NG_MKMESSAGE(msg, NGM_L2CAP_COOKIE, NGM_L2CAP_L2CA_ENC_CHANGE,
+ sizeof(*op), M_NOWAIT);
+ if (msg == NULL)
+ error = ENOMEM;
+ else {
+ msg->header.token = 0;
+ msg->header.flags |= NGF_RESP;
+
+ op = (ng_l2cap_l2ca_enc_chg_op *)(msg->data);
+ op->result = result;
+ if(ch->scid ==NG_L2CAP_ATT_CID||
+ ch->scid ==NG_L2CAP_SMP_CID){
+ op->lcid = ch->con->con_handle;
+ op->idtype = (ch->scid==NG_L2CAP_ATT_CID)?
+ NG_L2CAP_L2CA_IDTYPE_ATT:
+ NG_L2CAP_L2CA_IDTYPE_SMP;
+ }else{
+ op->idtype =(ch->con->linktype ==NG_HCI_LINK_ACL)?
+ NG_L2CAP_L2CA_IDTYPE_BREDR:
+ NG_L2CAP_L2CA_IDTYPE_LE;
+ }
+
+
+ NG_SEND_MSG_HOOK(error, l2cap->node, msg, l2cap->l2c, 0);
+ }
+
+ return (error);
+
+}
/*
* Send L2CAP_ConnectRsp response to the upper layer
*/
@@ -399,6 +455,7 @@ ng_l2cap_l2ca_con_ind(ng_l2cap_chan_p ch)
ip->psm = ch->psm;
ip->ident = ch->ident;
ip->linktype = ch->con->linktype;
+
NG_SEND_MSG_HOOK(error, l2cap->node, msg, l2cap->l2c, 0);
}
@@ -501,7 +558,8 @@ ng_l2cap_l2ca_cfg_req(ng_l2cap_p l2cap, struct ng_mesg *msg)
/* Adjust channel state for re-configuration */
if (ch->state == NG_L2CAP_OPEN) {
- ch->state = (ch->scid == NG_L2CAP_ATT_CID)?
+ ch->state = ((ch->scid == NG_L2CAP_ATT_CID)||
+ (ch->scid == NG_L2CAP_SMP_CID))?
NG_L2CAP_OPEN : NG_L2CAP_CONFIG;
ch->cfg_state = 0;
}
@@ -812,7 +870,10 @@ ng_l2cap_l2ca_write_req(ng_l2cap_p l2cap, struct mbuf *m)
if (l2ca_hdr->idtype == NG_L2CAP_L2CA_IDTYPE_ATT){
ch = ng_l2cap_chan_by_conhandle(l2cap, NG_L2CAP_ATT_CID,
l2ca_hdr->lcid);
- } else{
+ } else if (l2ca_hdr->idtype == NG_L2CAP_L2CA_IDTYPE_SMP){
+ ch = ng_l2cap_chan_by_conhandle(l2cap, NG_L2CAP_SMP_CID,
+ l2ca_hdr->lcid);
+ }else{
if (l2ca_hdr->lcid < NG_L2CAP_FIRST_CID) {
NG_L2CAP_ERR(
"%s: %s - invalid L2CA Data packet. Inavlid channel ID, cid=%d\n",
@@ -901,6 +962,9 @@ ng_l2cap_l2ca_write_rsp(ng_l2cap_chan_p ch, u_int32_t token, u_int16_t result,
if(ch->scid == NG_L2CAP_ATT_CID){
op->idtype = NG_L2CAP_L2CA_IDTYPE_ATT;
op->lcid = ch->con->con_handle;
+ }else if(ch->scid == NG_L2CAP_SMP_CID){
+ op->idtype = NG_L2CAP_L2CA_IDTYPE_SMP;
+ op->lcid = ch->con->con_handle;
}else{
op->idtype = (ch->con->linktype == NG_HCI_LINK_ACL)?
NG_L2CAP_L2CA_IDTYPE_BREDR :
@@ -928,7 +992,8 @@ ng_l2cap_l2ca_receive(ng_l2cap_con_p con)
int error = 0;
int idtype;
uint16_t *idp;
-
+ int silent = 0;
+
NG_L2CAP_M_PULLUP(con->rx_pkt, sizeof(*hdr));
if (con->rx_pkt == NULL)
return (ENOBUFS);
@@ -945,6 +1010,17 @@ ng_l2cap_l2ca_receive(ng_l2cap_con_p con)
* Here,ATT channel is distinguished by
* connection handle
*/
+ hdr->dcid = con->con_handle;
+ silent = 1;
+ }else if(hdr->dcid == NG_L2CAP_SMP_CID){
+ idtype = NG_L2CAP_L2CA_IDTYPE_SMP;
+ ch = ng_l2cap_chan_by_conhandle(l2cap, NG_L2CAP_SMP_CID,
+ con->con_handle);
+ /*
+ * Here,SMP channel is distinguished by
+ * connection handle
+ */
+ silent = 1;
hdr->dcid = con->con_handle;
}else{
idtype = (con->linktype==NG_HCI_LINK_ACL)?
@@ -953,7 +1029,8 @@ ng_l2cap_l2ca_receive(ng_l2cap_con_p con)
ch = ng_l2cap_chan_by_scid(l2cap, hdr->dcid, idtype);
}
if (ch == NULL) {
- NG_L2CAP_ERR(
+ if(!silent)
+ NG_L2CAP_ERR(
"%s: %s - unexpected L2CAP data packet. Channel does not exist, cid=%d, idtype=%d\n",
__func__, NG_NODE_NAME(l2cap->node), hdr->dcid, idtype);
error = ENOENT;
@@ -1170,6 +1247,21 @@ ng_l2cap_l2ca_discon_req(ng_l2cap_p l2cap, struct ng_mesg *msg)
error = EINVAL;
}
goto out;
+ }else if(ip->idtype == NG_L2CAP_L2CA_IDTYPE_SMP){
+ /* Don't send Disconnect request on L2CAP Layer*/
+ ch = ng_l2cap_chan_by_conhandle(l2cap, NG_L2CAP_SMP_CID,
+ ip->lcid);
+
+ if(ch != NULL){
+ ng_l2cap_free_chan(ch);
+ }else{
+ NG_L2CAP_ERR(
+"%s: %s - unexpected L2CA_Disconnect request message. " \
+"Channel does not exist, conhandle=%d\n",
+ __func__, NG_NODE_NAME(l2cap->node), ip->lcid);
+ error = EINVAL;
+ }
+ goto out;
}else{
/* Check if we have this channel */
ch = ng_l2cap_chan_by_scid(l2cap, ip->lcid, ip->idtype);
diff --git a/sys/netgraph/bluetooth/l2cap/ng_l2cap_ulpi.h b/sys/netgraph/bluetooth/l2cap/ng_l2cap_ulpi.h
index 8a7679a..2e65439 100644
--- a/sys/netgraph/bluetooth/l2cap/ng_l2cap_ulpi.h
+++ b/sys/netgraph/bluetooth/l2cap/ng_l2cap_ulpi.h
@@ -74,6 +74,6 @@ int ng_l2cap_l2ca_get_info_rsp (ng_l2cap_con_p, u_int32_t, u_int16_t,
struct mbuf *);
int ng_l2cap_l2ca_enable_clt (ng_l2cap_p, struct ng_mesg *);
-
+int ng_l2cap_l2ca_encryption_change(ng_l2cap_chan_p , uint16_t );
#endif /* ndef _NETGRAPH_L2CAP_ULPI_H_ */
diff --git a/sys/netgraph/bluetooth/l2cap/ng_l2cap_var.h b/sys/netgraph/bluetooth/l2cap/ng_l2cap_var.h
index 55db4ba..1157e23 100644
--- a/sys/netgraph/bluetooth/l2cap/ng_l2cap_var.h
+++ b/sys/netgraph/bluetooth/l2cap/ng_l2cap_var.h
@@ -119,7 +119,8 @@ typedef struct ng_l2cap_con {
u_int8_t ident; /* last allocated ident */
uint8_t linktype;
-
+ uint8_t encryption;
+
TAILQ_HEAD(, ng_l2cap_cmd) cmd_list; /* pending L2CAP cmds */
struct mbuf *tx_pkt; /* xmitted L2CAP packet */
diff --git a/sys/netgraph/bluetooth/socket/ng_btsocket_l2cap.c b/sys/netgraph/bluetooth/socket/ng_btsocket_l2cap.c
index 7b666b1..051786f 100644
--- a/sys/netgraph/bluetooth/socket/ng_btsocket_l2cap.c
+++ b/sys/netgraph/bluetooth/socket/ng_btsocket_l2cap.c
@@ -213,7 +213,7 @@ static ng_btsocket_l2cap_pcb_p ng_btsocket_l2cap_pcb_by_cid (bdaddr_p, int,i
static int ng_btsocket_l2cap_result2errno(int);
static int ng_btsock_l2cap_addrtype_to_linktype(int addrtype);
-static int ng_btsock_l2cap_pcb_to_idtype(struct ng_btsocket_l2cap_pcb *);
+
#define ng_btsocket_l2cap_wakeup_input_task() \
taskqueue_enqueue(taskqueue_swi_giant, &ng_btsocket_l2cap_queue_task)
@@ -221,16 +221,6 @@ static int ng_btsock_l2cap_pcb_to_idtype(struct ng_btsocket_l2cap_pcb *);
taskqueue_enqueue(taskqueue_swi_giant, &ng_btsocket_l2cap_rt_task)
-int ng_btsock_l2cap_pcb_to_idtype(struct ng_btsocket_l2cap_pcb *pcb)
-{
- if(pcb->dsttype == BDADDR_BREDR){
- return NG_L2CAP_L2CA_IDTYPE_BREDR;
- }else if(pcb->psm == 0){
- return NG_L2CAP_L2CA_IDTYPE_ATT;
- }else{
- return NG_L2CAP_L2CA_IDTYPE_LE;
- }
-}
int ng_btsock_l2cap_addrtype_to_linktype(int addrtype)
{
@@ -473,11 +463,15 @@ ng_btsocket_l2cap_process_l2ca_con_req_rsp(struct ng_mesg *msg,
}
if (op->result == NG_L2CAP_SUCCESS){
- if(ng_btsock_l2cap_pcb_to_idtype(pcb) ==
- NG_L2CAP_L2CA_IDTYPE_ATT){
- pcb->state = NG_BTSOCKET_L2CAP_OPEN;
- soisconnected(pcb->so);
- pcb->cid = op->lcid;
+ if((pcb->idtype == NG_L2CAP_L2CA_IDTYPE_ATT)||
+ (pcb->idtype == NG_L2CAP_L2CA_IDTYPE_SMP)){
+ pcb->encryption = op->encryption; pcb->cid = op->lcid;
+ if(pcb->need_encrypt && !(pcb->encryption)){
+ pcb->state = NG_BTSOCKET_L2CAP_W4_ENC_CHANGE;
+ }else{
+ pcb->state = NG_BTSOCKET_L2CAP_OPEN;
+ soisconnected(pcb->so);
+ }
}else{
/*
* Channel is now open, so update local channel ID and
@@ -486,7 +480,7 @@ ng_btsocket_l2cap_process_l2ca_con_req_rsp(struct ng_mesg *msg,
*/
pcb->cid = op->lcid;
-
+ pcb->encryption = op->encryption;
error = ng_btsocket_l2cap_send_l2ca_cfg_req(pcb);
if (error != 0) {
/* Send disconnect request with "zero" token */
@@ -513,7 +507,6 @@ ng_btsocket_l2cap_process_l2ca_con_req_rsp(struct ng_mesg *msg,
pcb->state = NG_BTSOCKET_L2CAP_CLOSED;
soisdisconnected(pcb->so);
}
-
mtx_unlock(&pcb->pcb_mtx);
mtx_unlock(&ng_btsocket_l2cap_sockets_mtx);
@@ -702,7 +695,40 @@ respond:
return (error);
} /* ng_btsocket_l2cap_process_l2ca_con_ind */
+/*Encryption Change*/
+static int ng_btsocket_l2cap_process_l2ca_enc_change(struct ng_mesg *msg, ng_btsocket_l2cap_rtentry_p rt)
+{
+ ng_l2cap_l2ca_enc_chg_op *op = NULL;
+ ng_btsocket_l2cap_pcb_t *pcb = NULL;
+
+
+ if (msg->header.arglen != sizeof(*op))
+ return (EMSGSIZE);
+
+ op = (ng_l2cap_l2ca_enc_chg_op *)(msg->data);
+
+ pcb = ng_btsocket_l2cap_pcb_by_cid(&rt->src, op->lcid,
+ op->idtype);
+ mtx_lock(&pcb->pcb_mtx);
+ pcb->encryption = op->result;
+
+ if(pcb->need_encrypt){
+ if(pcb->state != NG_BTSOCKET_L2CAP_W4_ENC_CHANGE){
+ NG_BTSOCKET_L2CAP_WARN("%s: Invalid pcb status %d",
+ __func__, pcb->state);
+ }else if(pcb->encryption){
+ pcb->state = NG_BTSOCKET_L2CAP_OPEN;
+ soisconnected(pcb->so);
+ }else{
+ pcb->so->so_error = EPERM;
+ pcb->state = NG_BTSOCKET_L2CAP_CLOSED;
+ soisdisconnected(pcb->so);
+ }
+ }
+ mtx_unlock(&pcb->pcb_mtx);
+ return 0;
+}
/*
* Process L2CA_Config response
*/
@@ -1215,7 +1241,7 @@ ng_btsocket_l2cap_send_l2ca_con_req(ng_btsocket_l2cap_pcb_p pcb)
bcopy(&pcb->dst, &ip->bdaddr, sizeof(ip->bdaddr));
ip->psm = pcb->psm;
ip->linktype = ng_btsock_l2cap_addrtype_to_linktype(pcb->dsttype);
- ip->idtype = ng_btsock_l2cap_pcb_to_idtype(pcb);
+ ip->idtype = pcb->idtype;
NG_SEND_MSG_HOOK(error, ng_btsocket_l2cap_node, msg,pcb->rt->hook, 0);
return (error);
@@ -1354,7 +1380,7 @@ ng_btsocket_l2cap_send_l2ca_discon_req(u_int32_t token,
ip = (ng_l2cap_l2ca_discon_ip *)(msg->data);
ip->lcid = pcb->cid;
- ip->idtype = ng_btsock_l2cap_pcb_to_idtype(pcb);
+ ip->idtype = pcb->idtype;
NG_SEND_MSG_HOOK(error, ng_btsocket_l2cap_node, msg,pcb->rt->hook, 0);
@@ -1441,7 +1467,9 @@ ng_btsocket_l2cap_data_input(struct mbuf *m, hook_p hook)
hdr->dcid, hdr->length);
if ((hdr->dcid >= NG_L2CAP_FIRST_CID) ||
- (idtype == NG_L2CAP_L2CA_IDTYPE_ATT)){
+ (idtype == NG_L2CAP_L2CA_IDTYPE_ATT)||
+ (idtype == NG_L2CAP_L2CA_IDTYPE_SMP)
+ ){
mtx_lock(&ng_btsocket_l2cap_sockets_mtx);
@@ -1707,7 +1735,10 @@ ng_btsocket_l2cap_l2ca_msg_input(struct ng_mesg *msg, hook_p hook)
case NGM_L2CAP_L2CA_WRITE: /* L2CA_Write response */
ng_btsocket_l2cap_process_l2ca_write_rsp(msg, rt);
break;
+ case NGM_L2CAP_L2CA_ENC_CHANGE:
+ ng_btsocket_l2cap_process_l2ca_enc_change(msg, rt);
+ break;
/* XXX FIXME add other L2CA messages */
default:
@@ -1764,6 +1795,7 @@ ng_btsocket_l2cap_input(void *context, int pending)
case NGM_L2CAP_L2CA_DISCON:
case NGM_L2CAP_L2CA_DISCON_IND:
case NGM_L2CAP_L2CA_WRITE:
+ case NGM_L2CAP_L2CA_ENC_CHANGE:
/* XXX FIXME add other L2CA messages */
ng_btsocket_l2cap_l2ca_msg_input(msg, hook);
break;
@@ -2135,7 +2167,7 @@ ng_btsocket_l2cap_connect(struct socket *so, struct sockaddr *nam,
struct sockaddr_l2cap ba;
ng_btsocket_l2cap_rtentry_t *rt = NULL;
int have_src, error = 0;
-
+ int idtype = NG_L2CAP_L2CA_IDTYPE_BREDR;
/* Check socket */
if (pcb == NULL)
return (EINVAL);
@@ -2164,9 +2196,16 @@ ng_btsocket_l2cap_connect(struct socket *so, struct sockaddr *nam,
if((sa->l2cap_bdaddr_type == BDADDR_BREDR)&&
(sa->l2cap_psm == 0))
return EDESTADDRREQ;
- if((sa->l2cap_bdaddr_type != BDADDR_BREDR)&&
- (sa->l2cap_cid != NG_L2CAP_ATT_CID)){
- return EINVAL;
+ if(sa->l2cap_bdaddr_type != BDADDR_BREDR){
+ if(sa->l2cap_cid == NG_L2CAP_ATT_CID){
+ idtype = NG_L2CAP_L2CA_IDTYPE_ATT;
+ }else if (sa->l2cap_cid == NG_L2CAP_SMP_CID){
+ idtype =NG_L2CAP_L2CA_IDTYPE_SMP;
+ }else{
+ //if cid == 0 idtype = NG_L2CAP_L2CA_IDTYPE_LE;
+ // Not supported yet
+ return EINVAL;
+ }
}
if (pcb->psm != 0 && pcb->psm != le16toh(sa->l2cap_psm))
return (EINVAL);
@@ -2185,8 +2224,8 @@ ng_btsocket_l2cap_connect(struct socket *so, struct sockaddr *nam,
bcopy(&sa->l2cap_bdaddr, &pcb->dst, sizeof(pcb->dst));
pcb->psm = le16toh(sa->l2cap_psm);
pcb->dsttype = sa->l2cap_bdaddr_type;
- pcb->cid = sa->l2cap_cid;
-
+ pcb->cid = 0;
+ pcb->idtype = idtype;
pcb->rt = NULL;
have_src = bcmp(&pcb->src, NG_HCI_BDADDR_ANY, sizeof(pcb->src));
@@ -2211,7 +2250,7 @@ ng_btsocket_l2cap_connect(struct socket *so, struct sockaddr *nam,
bcopy(&rt->src, &pcb->src, sizeof(pcb->src));
pcb->srctype =
(sa->l2cap_bdaddr_type == BDADDR_BREDR)?
- BDADDR_BREDR : BDADDR_LE_RANDOM;
+ BDADDR_BREDR : BDADDR_LE_PUBLIC;
}
} else
error = EHOSTUNREACH;
@@ -2297,6 +2336,11 @@ ng_btsocket_l2cap_ctloutput(struct socket *so, struct sockopt *sopt)
error = sooptcopyout(sopt, &pcb->flush_timo,
sizeof(pcb->flush_timo));
break;
+ case SO_L2CAP_ENCRYPTED: /* get encrypt required */
+ error = sooptcopyout(sopt, &pcb->need_encrypt,
+ sizeof(pcb->need_encrypt));
+ break;
+
default:
error = ENOPROTOOPT;
@@ -2337,7 +2381,17 @@ ng_btsocket_l2cap_ctloutput(struct socket *so, struct sockopt *sopt)
if (error == 0)
pcb->flush_timo = v.flush_timo;
break;
-
+ case SO_L2CAP_ENCRYPTED: /*set connect encryption opt*/
+ if((pcb->state != NG_BTSOCKET_L2CAP_OPEN) &&
+ (pcb->state != NG_BTSOCKET_L2CAP_W4_ENC_CHANGE)){
+ error = sooptcopyin(sopt, &v, sizeof(v),
+ sizeof(v.encryption));
+ if(error == 0)
+ pcb->need_encrypt = (v.encryption)?1:0;
+ }else{
+ error = EINVAL;
+ }
+ break;
default:
error = ENOPROTOOPT;
break;
@@ -2489,7 +2543,17 @@ ng_btsocket_l2cap_peeraddr(struct socket *so, struct sockaddr **nam)
sa.l2cap_psm = htole16(pcb->psm);
sa.l2cap_len = sizeof(sa);
sa.l2cap_family = AF_BLUETOOTH;
- sa.l2cap_cid = 0;
+ switch(pcb->idtype){
+ case NG_L2CAP_L2CA_IDTYPE_ATT:
+ sa.l2cap_cid = NG_L2CAP_ATT_CID;
+ break;
+ case NG_L2CAP_L2CA_IDTYPE_SMP:
+ sa.l2cap_cid = NG_L2CAP_SMP_CID;
+ break;
+ default:
+ sa.l2cap_cid = 0;
+ break;
+ }
sa.l2cap_bdaddr_type = pcb->dsttype;
*nam = sodupsockaddr((struct sockaddr *) &sa, M_NOWAIT);
@@ -2608,7 +2672,7 @@ ng_btsocket_l2cap_send2(ng_btsocket_l2cap_pcb_p pcb)
hdr->token = pcb->token;
hdr->length = m->m_pkthdr.len - sizeof(*hdr);
hdr->lcid = pcb->cid;
- hdr->idtype = ng_btsock_l2cap_pcb_to_idtype(pcb);
+ hdr->idtype = pcb->idtype;
NG_BTSOCKET_L2CAP_INFO(
"%s: Sending packet: len=%d, length=%d, lcid=%d, token=%d, state=%d\n",
__func__, m->m_pkthdr.len, hdr->length, hdr->lcid,
@@ -2721,7 +2785,7 @@ ng_btsocket_l2cap_pcb_by_cid(bdaddr_p src, int cid, int idtype)
LIST_FOREACH(p, &ng_btsocket_l2cap_sockets, next){
if (p->cid == cid &&
bcmp(src, &p->src, sizeof(p->src)) == 0&&
- ng_btsock_l2cap_pcb_to_idtype(p) == idtype)
+ p->idtype == idtype)
break;
}
diff --git a/sys/netinet/ip_ipsec.c b/sys/netinet/ip_ipsec.c
index 546f802..ac1e3d5 100644
--- a/sys/netinet/ip_ipsec.c
+++ b/sys/netinet/ip_ipsec.c
@@ -158,6 +158,10 @@ int
ip_ipsec_output(struct mbuf **m, struct inpcb *inp, int *error)
{
struct secpolicy *sp;
+
+ if (!key_havesp(IPSEC_DIR_OUTBOUND))
+ return 0;
+
/*
* Check the security policy (SP) for the packet and, if
* required, do IPsec-related processing. There are two
diff --git a/sys/netinet/sctp_input.c b/sys/netinet/sctp_input.c
index 8ed1551..441f219 100644
--- a/sys/netinet/sctp_input.c
+++ b/sys/netinet/sctp_input.c
@@ -2435,8 +2435,8 @@ sctp_handle_cookie_echo(struct mbuf *m, int iphlen, int offset,
cookie_offset = offset + sizeof(struct sctp_chunkhdr);
cookie_len = ntohs(cp->ch.chunk_length);
- if ((cookie->peerport != sh->src_port) &&
- (cookie->myport != sh->dest_port) &&
+ if ((cookie->peerport != sh->src_port) ||
+ (cookie->myport != sh->dest_port) ||
(cookie->my_vtag != sh->v_tag)) {
/*
* invalid ports or bad tag. Note that we always leave the
diff --git a/sys/netinet/tcp_input.c b/sys/netinet/tcp_input.c
index 64971f3..10c3cdc 100644
--- a/sys/netinet/tcp_input.c
+++ b/sys/netinet/tcp_input.c
@@ -148,6 +148,11 @@ SYSCTL_INT(_net_inet_tcp, OID_AUTO, drop_synfin, CTLFLAG_VNET | CTLFLAG_RW,
&VNET_NAME(drop_synfin), 0,
"Drop TCP packets with SYN+FIN set");
+VNET_DEFINE(int, tcp_do_rfc6675_pipe) = 0;
+SYSCTL_INT(_net_inet_tcp, OID_AUTO, do_pipe, CTLFLAG_VNET | CTLFLAG_RW,
+ &VNET_NAME(tcp_do_rfc6675_pipe), 0,
+ "Use calculated pipe/in-flight bytes per RFC 6675");
+
VNET_DEFINE(int, tcp_do_rfc3042) = 1;
#define V_tcp_do_rfc3042 VNET(tcp_do_rfc3042)
SYSCTL_INT(_net_inet_tcp, OID_AUTO, rfc3042, CTLFLAG_VNET | CTLFLAG_RW,
@@ -159,13 +164,10 @@ SYSCTL_INT(_net_inet_tcp, OID_AUTO, rfc3390, CTLFLAG_VNET | CTLFLAG_RW,
&VNET_NAME(tcp_do_rfc3390), 0,
"Enable RFC 3390 (Increasing TCP's Initial Congestion Window)");
-SYSCTL_NODE(_net_inet_tcp, OID_AUTO, experimental, CTLFLAG_RW, 0,
- "Experimental TCP extensions");
-
-VNET_DEFINE(int, tcp_do_initcwnd10) = 1;
-SYSCTL_INT(_net_inet_tcp_experimental, OID_AUTO, initcwnd10, CTLFLAG_VNET | CTLFLAG_RW,
- &VNET_NAME(tcp_do_initcwnd10), 0,
- "Enable RFC 6928 (Increasing initial CWND to 10)");
+VNET_DEFINE(int, tcp_initcwnd_segments) = 10;
+SYSCTL_INT(_net_inet_tcp, OID_AUTO, initcwnd_segments,
+ CTLFLAG_VNET | CTLFLAG_RW, &VNET_NAME(tcp_initcwnd_segments), 0,
+ "Slow-start flight size (initial congestion window) in number of segments");
VNET_DEFINE(int, tcp_do_rfc3465) = 1;
SYSCTL_INT(_net_inet_tcp, OID_AUTO, rfc3465, CTLFLAG_VNET | CTLFLAG_RW,
@@ -364,6 +366,7 @@ cc_conn_init(struct tcpcb *tp)
* RFC5681 Section 3.1 specifies the default conservative values.
* RFC3390 specifies slightly more aggressive values.
* RFC6928 increases it to ten segments.
+ * Support for user specified value for initial flight size.
*
* If a SYN or SYN/ACK was lost and retransmitted, we have to
* reduce the initial CWND to one segment as congestion is likely
@@ -371,9 +374,9 @@ cc_conn_init(struct tcpcb *tp)
*/
if (tp->snd_cwnd == 1)
tp->snd_cwnd = tp->t_maxseg; /* SYN(-ACK) lost */
- else if (V_tcp_do_initcwnd10)
- tp->snd_cwnd = min(10 * tp->t_maxseg,
- max(2 * tp->t_maxseg, 14600));
+ else if (V_tcp_initcwnd_segments)
+ tp->snd_cwnd = min(V_tcp_initcwnd_segments * tp->t_maxseg,
+ max(2 * tp->t_maxseg, V_tcp_initcwnd_segments * 1460));
else if (V_tcp_do_rfc3390)
tp->snd_cwnd = min(4 * tp->t_maxseg,
max(2 * tp->t_maxseg, 4380));
@@ -2422,6 +2425,12 @@ tcp_do_segment(struct mbuf *m, struct tcphdr *th, struct socket *so,
((to.to_flags & TOF_SACK) ||
!TAILQ_EMPTY(&tp->snd_holes)))
tcp_sack_doack(tp, &to, th->th_ack);
+ else
+ /*
+ * Reset the value so that previous (valid) value
+ * from the last ack with SACK doesn't get used.
+ */
+ tp->sackhint.sacked_bytes = 0;
/* Run HHOOK_TCP_ESTABLISHED_IN helper hooks. */
hhook_run_tcp_est_in(tp, th, &to);
@@ -2485,8 +2494,12 @@ tcp_do_segment(struct mbuf *m, struct tcphdr *th, struct socket *so,
* we have less than 1/2 the original window's
* worth of data in flight.
*/
- awnd = (tp->snd_nxt - tp->snd_fack) +
- tp->sackhint.sack_bytes_rexmit;
+ if (V_tcp_do_rfc6675_pipe)
+ awnd = tcp_compute_pipe(tp);
+ else
+ awnd = (tp->snd_nxt - tp->snd_fack) +
+ tp->sackhint.sack_bytes_rexmit;
+
if (awnd < tp->snd_ssthresh) {
tp->snd_cwnd += tp->t_maxseg;
if (tp->snd_cwnd > tp->snd_ssthresh)
@@ -3731,3 +3744,11 @@ tcp_newreno_partial_ack(struct tcpcb *tp, struct tcphdr *th)
tp->snd_cwnd = 0;
tp->snd_cwnd += tp->t_maxseg;
}
+
+int
+tcp_compute_pipe(struct tcpcb *tp)
+{
+ return (tp->snd_max - tp->snd_una +
+ tp->sackhint.sack_bytes_rexmit -
+ tp->sackhint.sacked_bytes);
+}
diff --git a/sys/netinet/tcp_sack.c b/sys/netinet/tcp_sack.c
index 223403c..f9c71c8 100644
--- a/sys/netinet/tcp_sack.c
+++ b/sys/netinet/tcp_sack.c
@@ -369,6 +369,7 @@ tcp_sack_doack(struct tcpcb *tp, struct tcpopt *to, tcp_seq th_ack)
* received new blocks from the other side.
*/
if (to->to_flags & TOF_SACK) {
+ tp->sackhint.sacked_bytes = 0; /* reset */
for (i = 0; i < to->to_nsacks; i++) {
bcopy((to->to_sacks + i * TCPOLEN_SACK),
&sack, sizeof(sack));
@@ -379,8 +380,11 @@ tcp_sack_doack(struct tcpcb *tp, struct tcpopt *to, tcp_seq th_ack)
SEQ_GT(sack.start, th_ack) &&
SEQ_LT(sack.start, tp->snd_max) &&
SEQ_GT(sack.end, tp->snd_una) &&
- SEQ_LEQ(sack.end, tp->snd_max))
+ SEQ_LEQ(sack.end, tp->snd_max)) {
sack_blocks[num_sack_blks++] = sack;
+ tp->sackhint.sacked_bytes +=
+ (sack.end-sack.start);
+ }
}
}
/*
diff --git a/sys/netinet/tcp_subr.c b/sys/netinet/tcp_subr.c
index e3f5b13..29af766 100644
--- a/sys/netinet/tcp_subr.c
+++ b/sys/netinet/tcp_subr.c
@@ -1972,7 +1972,8 @@ ipsec_hdrsiz_tcp(struct tcpcb *tp)
#endif
struct tcphdr *th;
- if ((tp == NULL) || ((inp = tp->t_inpcb) == NULL))
+ if ((tp == NULL) || ((inp = tp->t_inpcb) == NULL) ||
+ (!key_havesp(IPSEC_DIR_OUTBOUND)))
return (0);
m = m_gethdr(M_NOWAIT, MT_DATA);
if (!m)
diff --git a/sys/netinet/tcp_var.h b/sys/netinet/tcp_var.h
index 07a28fe..a013bda 100644
--- a/sys/netinet/tcp_var.h
+++ b/sys/netinet/tcp_var.h
@@ -74,7 +74,11 @@ struct sackhint {
tcp_seq last_sack_ack; /* Most recent/largest sacked ack */
int ispare; /* explicit pad for 64bit alignment */
- uint64_t _pad[2]; /* 1 sacked_bytes, 1 TBD */
+ int sacked_bytes; /*
+ * Total sacked bytes reported by the
+ * receiver via sack option
+ */
+ uint64_t _pad[1]; /* TBD */
};
struct tcptemp {
@@ -621,7 +625,7 @@ VNET_DECLARE(int, tcp_mssdflt); /* XXX */
VNET_DECLARE(int, tcp_minmss);
VNET_DECLARE(int, tcp_delack_enabled);
VNET_DECLARE(int, tcp_do_rfc3390);
-VNET_DECLARE(int, tcp_do_initcwnd10);
+VNET_DECLARE(int, tcp_initcwnd_segments);
VNET_DECLARE(int, tcp_sendspace);
VNET_DECLARE(int, tcp_recvspace);
VNET_DECLARE(int, path_mtu_discovery);
@@ -633,7 +637,7 @@ VNET_DECLARE(int, tcp_abc_l_var);
#define V_tcp_minmss VNET(tcp_minmss)
#define V_tcp_delack_enabled VNET(tcp_delack_enabled)
#define V_tcp_do_rfc3390 VNET(tcp_do_rfc3390)
-#define V_tcp_do_initcwnd10 VNET(tcp_do_initcwnd10)
+#define V_tcp_initcwnd_segments VNET(tcp_initcwnd_segments)
#define V_tcp_sendspace VNET(tcp_sendspace)
#define V_tcp_recvspace VNET(tcp_recvspace)
#define V_path_mtu_discovery VNET(path_mtu_discovery)
@@ -653,6 +657,9 @@ VNET_DECLARE(int, tcp_ecn_maxretries);
VNET_DECLARE(struct hhook_head *, tcp_hhh[HHOOK_TCP_LAST + 1]);
#define V_tcp_hhh VNET(tcp_hhh)
+VNET_DECLARE(int, tcp_do_rfc6675_pipe);
+#define V_tcp_do_rfc6675_pipe VNET(tcp_do_rfc6675_pipe)
+
int tcp_addoptions(struct tcpopt *, u_char *);
int tcp_ccalgounload(struct cc_algo *unload_algo);
struct tcpcb *
@@ -743,6 +750,7 @@ void tcp_sack_partialack(struct tcpcb *, struct tcphdr *);
void tcp_free_sackholes(struct tcpcb *tp);
int tcp_newreno(struct tcpcb *, struct tcphdr *);
u_long tcp_seq_subtract(u_long, u_long );
+int tcp_compute_pipe(struct tcpcb *);
void cc_cong_signal(struct tcpcb *tp, struct tcphdr *th, uint32_t type);
diff --git a/sys/netinet6/frag6.c b/sys/netinet6/frag6.c
index 1e9e692..dba0cf3 100644
--- a/sys/netinet6/frag6.c
+++ b/sys/netinet6/frag6.c
@@ -523,8 +523,8 @@ insert:
frag6_deq(af6);
while (t->m_next)
t = t->m_next;
- t->m_next = IP6_REASS_MBUF(af6);
- m_adj(t->m_next, af6->ip6af_offset);
+ m_adj(IP6_REASS_MBUF(af6), af6->ip6af_offset);
+ m_cat(t, IP6_REASS_MBUF(af6));
free(af6, M_FTABLE);
af6 = af6dwn;
}
diff --git a/sys/netipsec/ipsec.c b/sys/netipsec/ipsec.c
index 2ac87ab..9172347 100644
--- a/sys/netipsec/ipsec.c
+++ b/sys/netipsec/ipsec.c
@@ -1276,6 +1276,9 @@ ipsec46_in_reject(struct mbuf *m, struct inpcb *inp)
int error;
int result;
+ if (!key_havesp(IPSEC_DIR_INBOUND))
+ return 0;
+
IPSEC_ASSERT(m != NULL, ("null mbuf"));
/* Get SP for this packet. */
@@ -1403,6 +1406,9 @@ ipsec_hdrsiz(struct mbuf *m, u_int dir, struct inpcb *inp)
int error;
size_t size;
+ if (!key_havesp(dir))
+ return 0;
+
IPSEC_ASSERT(m != NULL, ("null mbuf"));
/* Get SP for this packet. */
diff --git a/sys/netpfil/pf/pf.c b/sys/netpfil/pf/pf.c
index 8121314..1dfc37d 100644
--- a/sys/netpfil/pf/pf.c
+++ b/sys/netpfil/pf/pf.c
@@ -5262,9 +5262,6 @@ pf_routable(struct pf_addr *addr, sa_family_t af, struct pfi_kif *kif,
in_rtalloc_ign((struct route *)&ro, 0, rtableid);
break;
#endif
- default:
- rtalloc_ign((struct route *)&ro, 0); /* No/default FIB. */
- break;
}
if (ro.ro_rt != NULL) {
@@ -5577,6 +5574,13 @@ pf_route6(struct mbuf **m, struct pf_rule *r, int dir, struct ifnet *oifp,
if (ifp->if_flags & IFF_LOOPBACK)
m0->m_flags |= M_SKIP_FIREWALL;
+ if (m0->m_pkthdr.csum_flags & CSUM_DELAY_DATA_IPV6 &
+ ~ifp->if_hwassist) {
+ uint32_t plen = m0->m_pkthdr.len - sizeof(*ip6);
+ in6_delayed_cksum(m0, plen, sizeof(struct ip6_hdr));
+ m0->m_pkthdr.csum_flags &= ~CSUM_DELAY_DATA_IPV6;
+ }
+
/*
* If the packet is too large for the outgoing interface,
* send back an icmp6 error.
diff --git a/sys/ofed/drivers/infiniband/core/cma.c b/sys/ofed/drivers/infiniband/core/cma.c
index 7ee525a..40c4d82 100644
--- a/sys/ofed/drivers/infiniband/core/cma.c
+++ b/sys/ofed/drivers/infiniband/core/cma.c
@@ -2400,10 +2400,9 @@ static int cma_check_port(struct rdma_bind_list *bind_list,
{
struct rdma_id_private *cur_id;
struct sockaddr *addr, *cur_addr;
- struct hlist_node *node;
addr = (struct sockaddr *) &id_priv->id.route.addr.src_addr;
- hlist_for_each_entry(cur_id, node, &bind_list->owners, node) {
+ hlist_for_each_entry(cur_id, &bind_list->owners, node) {
if (id_priv == cur_id)
continue;
diff --git a/sys/ofed/drivers/infiniband/core/device.c b/sys/ofed/drivers/infiniband/core/device.c
index a7a06d78..db3b831 100644
--- a/sys/ofed/drivers/infiniband/core/device.c
+++ b/sys/ofed/drivers/infiniband/core/device.c
@@ -789,5 +789,5 @@ static moduledata_t ibcore_mod = {
};
MODULE_VERSION(ibcore, 1);
-MODULE_DEPEND(ibcore, linuxapi, 1, 1, 1);
+MODULE_DEPEND(ibcore, linuxkpi, 1, 1, 1);
DECLARE_MODULE(ibcore, ibcore_mod, SI_SUB_SMP, SI_ORDER_ANY);
diff --git a/sys/ofed/drivers/infiniband/core/fmr_pool.c b/sys/ofed/drivers/infiniband/core/fmr_pool.c
index 4ba4c77..c73196a 100644
--- a/sys/ofed/drivers/infiniband/core/fmr_pool.c
+++ b/sys/ofed/drivers/infiniband/core/fmr_pool.c
@@ -118,14 +118,13 @@ static inline struct ib_pool_fmr *ib_fmr_cache_lookup(struct ib_fmr_pool *pool,
{
struct hlist_head *bucket;
struct ib_pool_fmr *fmr;
- struct hlist_node *pos;
if (!pool->cache_bucket)
return NULL;
bucket = pool->cache_bucket + ib_fmr_hash(*page_list);
- hlist_for_each_entry(fmr, pos, bucket, cache_node)
+ hlist_for_each_entry(fmr, bucket, cache_node)
if (io_virtual_address == fmr->io_virtual_address &&
page_list_len == fmr->page_list_len &&
!memcmp(page_list, fmr->page_list,
diff --git a/sys/ofed/drivers/infiniband/core/uverbs_main.c b/sys/ofed/drivers/infiniband/core/uverbs_main.c
index 12bc0d3..5a6b605 100644
--- a/sys/ofed/drivers/infiniband/core/uverbs_main.c
+++ b/sys/ofed/drivers/infiniband/core/uverbs_main.c
@@ -1168,7 +1168,7 @@ static ssize_t show_dev_ref_cnt(struct device *device,
if (!dev)
return -ENODEV;
- return sprintf(buf, "%d\n", dev->ref.count);
+ return sprintf(buf, "%d\n", atomic_read(&dev->ref.refcount));
}
static DEVICE_ATTR(ref_cnt, S_IRUGO, show_dev_ref_cnt, NULL);
diff --git a/sys/ofed/drivers/infiniband/hw/mlx4/main.c b/sys/ofed/drivers/infiniband/hw/mlx4/main.c
index bdcffbe..2fdd281 100644
--- a/sys/ofed/drivers/infiniband/hw/mlx4/main.c
+++ b/sys/ofed/drivers/infiniband/hw/mlx4/main.c
@@ -2884,4 +2884,4 @@ static moduledata_t mlx4ib_mod = {
DECLARE_MODULE(mlx4ib, mlx4ib_mod, SI_SUB_SMP, SI_ORDER_ANY);
MODULE_DEPEND(mlx4ib, mlx4, 1, 1, 1);
MODULE_DEPEND(mlx4ib, ibcore, 1, 1, 1);
-MODULE_DEPEND(mlx4ib, linuxapi, 1, 1, 1);
+MODULE_DEPEND(mlx4ib, linuxkpi, 1, 1, 1);
diff --git a/sys/ofed/drivers/infiniband/hw/mthca/mthca_main.c b/sys/ofed/drivers/infiniband/hw/mthca/mthca_main.c
index 8596bdd..697af31 100644
--- a/sys/ofed/drivers/infiniband/hw/mthca/mthca_main.c
+++ b/sys/ofed/drivers/infiniband/hw/mthca/mthca_main.c
@@ -48,7 +48,7 @@ MODULE_AUTHOR("Roland Dreier");
MODULE_DESCRIPTION("Mellanox InfiniBand HCA low-level driver");
MODULE_LICENSE("Dual BSD/GPL");
MODULE_VERSION(mthca, 1);
-MODULE_DEPEND(mthca, linuxapi, 1, 1, 1);
+MODULE_DEPEND(mthca, linuxkpi, 1, 1, 1);
MODULE_DEPEND(mthca, ibcore, 1, 1, 1);
#ifdef CONFIG_INFINIBAND_MTHCA_DEBUG
diff --git a/sys/ofed/drivers/infiniband/ulp/ipoib/ipoib_main.c b/sys/ofed/drivers/infiniband/ulp/ipoib/ipoib_main.c
index 53ac66d..1077b40 100644
--- a/sys/ofed/drivers/infiniband/ulp/ipoib/ipoib_main.c
+++ b/sys/ofed/drivers/infiniband/ulp/ipoib/ipoib_main.c
@@ -1541,4 +1541,4 @@ static moduledata_t ipoib_mod = {
DECLARE_MODULE(ipoib, ipoib_mod, SI_SUB_SMP, SI_ORDER_ANY);
MODULE_DEPEND(ipoib, ibcore, 1, 1, 1);
-MODULE_DEPEND(ipoib, linuxapi, 1, 1, 1);
+MODULE_DEPEND(ipoib, linuxkpi, 1, 1, 1);
diff --git a/sys/ofed/drivers/net/mlx4/en_main.c b/sys/ofed/drivers/net/mlx4/en_main.c
index 4a2d571..3aa4745 100644
--- a/sys/ofed/drivers/net/mlx4/en_main.c
+++ b/sys/ofed/drivers/net/mlx4/en_main.c
@@ -349,4 +349,4 @@ static moduledata_t mlxen_mod = {
};
DECLARE_MODULE(mlxen, mlxen_mod, SI_SUB_OFED_PREINIT, SI_ORDER_ANY);
MODULE_DEPEND(mlxen, mlx4, 1, 1, 1);
-MODULE_DEPEND(mlxen, linuxapi, 1, 1, 1);
+MODULE_DEPEND(mlxen, linuxkpi, 1, 1, 1);
diff --git a/sys/ofed/drivers/net/mlx4/en_netdev.c b/sys/ofed/drivers/net/mlx4/en_netdev.c
index d8b2f4f..6f49ed0 100644
--- a/sys/ofed/drivers/net/mlx4/en_netdev.c
+++ b/sys/ofed/drivers/net/mlx4/en_netdev.c
@@ -264,11 +264,10 @@ static inline struct mlx4_en_filter *
mlx4_en_filter_find(struct mlx4_en_priv *priv, __be32 src_ip, __be32 dst_ip,
u8 ip_proto, __be16 src_port, __be16 dst_port)
{
- struct hlist_node *elem;
struct mlx4_en_filter *filter;
struct mlx4_en_filter *ret = NULL;
- hlist_for_each_entry(filter, elem,
+ hlist_for_each_entry(filter,
filter_hash_bucket(priv, src_ip, dst_ip,
src_port, dst_port),
filter_chain) {
diff --git a/sys/ofed/drivers/net/mlx4/main.c b/sys/ofed/drivers/net/mlx4/main.c
index bd4aa6a..cce2324 100644
--- a/sys/ofed/drivers/net/mlx4/main.c
+++ b/sys/ofed/drivers/net/mlx4/main.c
@@ -3809,5 +3809,5 @@ static moduledata_t mlx4_mod = {
};
MODULE_VERSION(mlx4, 1);
DECLARE_MODULE(mlx4, mlx4_mod, SI_SUB_OFED_PREINIT, SI_ORDER_ANY);
-MODULE_DEPEND(mlx4, linuxapi, 1, 1, 1);
+MODULE_DEPEND(mlx4, linuxkpi, 1, 1, 1);
diff --git a/sys/ofed/include/linux/etherdevice.h b/sys/ofed/include/linux/etherdevice.h
deleted file mode 100644
index d863651..0000000
--- a/sys/ofed/include/linux/etherdevice.h
+++ /dev/null
@@ -1,97 +0,0 @@
-/*-
- * Copyright (c) 2007 Cisco Systems, Inc. All rights reserved.
- * Copyright (c) 2014 Mellanox Technologies, Ltd. All rights reserved.
- *
- * This software is available to you under a choice of one of two
- * licenses. You may choose to be licensed under the terms of the GNU
- * General Public License (GPL) Version 2, available from the file
- * COPYING in the main directory of this source tree, or the
- * OpenIB.org BSD license below:
- *
- * Redistribution and use in source and binary forms, with or
- * without modification, are permitted provided that the following
- * conditions are met:
- *
- * - Redistributions of source code must retain the above
- * copyright notice, this list of conditions and the following
- * disclaimer.
- *
- * - Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following
- * disclaimer in the documentation and/or other materials
- * provided with the distribution.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
- * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
- * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
- * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
- * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- * SOFTWARE.
- */
-
-
-#ifndef _LINUX_ETHERDEVICE
-#define _LINUX_ETHERDEVICE
-
-#include <linux/types.h>
-
-/**
- * is_zero_ether_addr - Determine if give Ethernet address is all zeros.
- * @addr: Pointer to a six-byte array containing the Ethernet address
- *
- * Return true if the address is all zeroes.
- */
-static inline bool is_zero_ether_addr(const u8 *addr)
-{
- return !(addr[0] | addr[1] | addr[2] | addr[3] | addr[4] | addr[5]);
-}
-
-
-
-/**
- * is_multicast_ether_addr - Determine if the Ethernet address is a multicast.
- * @addr: Pointer to a six-byte array containing the Ethernet address
- *
- * Return true if the address is a multicast address.
- * By definition the broadcast address is also a multicast address.
- */
-static inline bool is_multicast_ether_addr(const u8 *addr)
-{
- return (0x01 & addr[0]);
-}
-
-/**
- * is_broadcast_ether_addr - Determine if the Ethernet address is broadcast
- * @addr: Pointer to a six-byte array containing the Ethernet address
- *
- * Return true if the address is the broadcast address.
- */
-static inline bool is_broadcast_ether_addr(const u8 *addr)
-{
- return (addr[0] & addr[1] & addr[2] & addr[3] & addr[4] & addr[5]) == 0xff;
-}
-
-/**
- * is_valid_ether_addr - Determine if the given Ethernet address is valid
- * @addr: Pointer to a six-byte array containing the Ethernet address
- *
- * Check that the Ethernet address (MAC) is not 00:00:00:00:00:00, is not
- * a multicast address, and is not FF:FF:FF:FF:FF:FF.
- *
- * Return true if the address is valid.
- **/
-static inline bool is_valid_ether_addr(const u8 *addr)
-{
- /* FF:FF:FF:FF:FF:FF is a multicast address so we don't need to
- ** explicitly check for it here. */
- return !is_multicast_ether_addr(addr) && !is_zero_ether_addr(addr);
-}
-
-static inline void ether_addr_copy(u8 *dst, const u8 *src)
-{
- memcpy(dst, src, 6);
-}
-
-#endif /* _LINUX_ETHERDEVICE */
diff --git a/sys/ofed/include/linux/ktime.h b/sys/ofed/include/linux/ktime.h
deleted file mode 100644
index 7524afc..0000000
--- a/sys/ofed/include/linux/ktime.h
+++ /dev/null
@@ -1,300 +0,0 @@
-/*-
- * Copyright (c) 2014 Mellanox Technologies, Ltd.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice unmodified, this list of conditions, and the following
- * disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
- * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
- * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
- * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
- * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
- * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
- * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
- * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-#ifndef _LINUX_KTIME_H
-#define _LINUX_KTIME_H
-
-#include <sys/time.h>
-#include <linux/types.h>
-#include <linux/jiffies.h>
-
-
-/* Get the monotonic time in timespec format: */
-#define ktime_get_ts getnanouptime
-
-#define NSEC_PER_USEC 1000L
-#define NSEC_PER_SEC 1000000000L
-
-/*
- * ktime_t:
- *
- * On 64-bit CPUs a single 64-bit variable is used to store the hrtimers
- * internal representation of time values in scalar nanoseconds. The
- * design plays out best on 64-bit CPUs, where most conversions are
- * NOPs and most arithmetic ktime_t operations are plain arithmetic
- * operations.
- *
- * On 32-bit CPUs an optimized representation of the timespec structure
- * is used to avoid expensive conversions from and to timespecs. The
- * endian-aware order of the tv struct members is chosen to allow
- * mathematical operations on the tv64 member of the union too, which
- * for certain operations produces better code.
- *
- * For architectures with efficient support for 64/32-bit conversions the
- * plain scalar nanosecond based representation can be selected by the
- * config switch CONFIG_KTIME_SCALAR.
- */
-union ktime {
- s64 tv64;
-#if BITS_PER_LONG != 64 && !defined(CONFIG_KTIME_SCALAR)
- struct {
-# ifdef __BIG_ENDIAN
- s32 sec, nsec;
-# else
- s32 nsec, sec;
-# endif
- } tv;
-#endif
-};
-
-typedef union ktime ktime_t; /* Kill this */
-
-#define KTIME_MAX ((s64)~((u64)1 << 63))
-#define KTIME_SEC_MAX (KTIME_MAX / NSEC_PER_SEC)
-
-/*
- * ktime_t definitions when using the 64-bit scalar representation:
- */
-
-#if (BITS_PER_LONG == 64) || defined(CONFIG_KTIME_SCALAR)
-
-/**
- * ktime_set - Set a ktime_t variable from a seconds/nanoseconds value
- * @secs: seconds to set
- * @nsecs: nanoseconds to set
- *
- * Return the ktime_t representation of the value
- */
-static inline ktime_t ktime_set(const long secs, const unsigned long nsecs)
-{
-#if (BITS_PER_LONG == 64)
- if (unlikely(secs >= KTIME_SEC_MAX))
- return (ktime_t){ .tv64 = KTIME_MAX };
-#endif
- return (ktime_t) { .tv64 = (s64)secs * NSEC_PER_SEC + (s64)nsecs };
-}
-
-/* Subtract two ktime_t variables. rem = lhs -rhs: */
-#define ktime_sub(lhs, rhs) \
- ({ (ktime_t){ .tv64 = (lhs).tv64 - (rhs).tv64 }; })
-
-/* Add two ktime_t variables. res = lhs + rhs: */
-#define ktime_add(lhs, rhs) \
- ({ (ktime_t){ .tv64 = (lhs).tv64 + (rhs).tv64 }; })
-
-/*
- * Add a ktime_t variable and a scalar nanosecond value.
- * res = kt + nsval:
- */
-#define ktime_add_ns(kt, nsval) \
- ({ (ktime_t){ .tv64 = (kt).tv64 + (nsval) }; })
-
-/*
- * Subtract a scalar nanosecod from a ktime_t variable
- * res = kt - nsval:
- */
-#define ktime_sub_ns(kt, nsval) \
- ({ (ktime_t){ .tv64 = (kt).tv64 - (nsval) }; })
-
-/* convert a timespec to ktime_t format: */
-static inline ktime_t timespec_to_ktime(struct timespec ts)
-{
- return ktime_set(ts.tv_sec, ts.tv_nsec);
-}
-
-/* convert a timeval to ktime_t format: */
-static inline ktime_t timeval_to_ktime(struct timeval tv)
-{
- return ktime_set(tv.tv_sec, tv.tv_usec * NSEC_PER_USEC);
-}
-
-/* Map the ktime_t to timespec conversion to ns_to_timespec function */
-#define ktime_to_timespec(kt) ns_to_timespec((kt).tv64)
-
-/* Map the ktime_t to timeval conversion to ns_to_timeval function */
-#define ktime_to_timeval(kt) ns_to_timeval((kt).tv64)
-
-/* Convert ktime_t to nanoseconds - NOP in the scalar storage format: */
-#define ktime_to_ns(kt) ((kt).tv64)
-
-#else /* !((BITS_PER_LONG == 64) || defined(CONFIG_KTIME_SCALAR)) */
-
-/*
- * Helper macros/inlines to get the ktime_t math right in the timespec
- * representation. The macros are sometimes ugly - their actual use is
- * pretty okay-ish, given the circumstances. We do all this for
- * performance reasons. The pure scalar nsec_t based code was nice and
- * simple, but created too many 64-bit / 32-bit conversions and divisions.
- *
- * Be especially aware that negative values are represented in a way
- * that the tv.sec field is negative and the tv.nsec field is greater
- * or equal to zero but less than nanoseconds per second. This is the
- * same representation which is used by timespecs.
- *
- * tv.sec < 0 and 0 >= tv.nsec < NSEC_PER_SEC
- */
-
-/* Set a ktime_t variable to a value in sec/nsec representation: */
-static inline ktime_t ktime_set(const long secs, const unsigned long nsecs)
-{
- return (ktime_t) { .tv = { .sec = secs, .nsec = nsecs } };
-}
-
-/**
- * ktime_sub - subtract two ktime_t variables
- * @lhs: minuend
- * @rhs: subtrahend
- *
- * Returns the remainder of the subtraction
- */
-static inline ktime_t ktime_sub(const ktime_t lhs, const ktime_t rhs)
-{
- ktime_t res;
-
- res.tv64 = lhs.tv64 - rhs.tv64;
- if (res.tv.nsec < 0)
- res.tv.nsec += NSEC_PER_SEC;
-
- return res;
-}
-
-/**
- * ktime_add - add two ktime_t variables
- * @add1: addend1
- * @add2: addend2
- *
- * Returns the sum of @add1 and @add2.
- */
-static inline ktime_t ktime_add(const ktime_t add1, const ktime_t add2)
-{
- ktime_t res;
-
- res.tv64 = add1.tv64 + add2.tv64;
- /*
- * performance trick: the (u32) -NSEC gives 0x00000000Fxxxxxxx
- * so we subtract NSEC_PER_SEC and add 1 to the upper 32 bit.
- *
- * it's equivalent to:
- * tv.nsec -= NSEC_PER_SEC
- * tv.sec ++;
- */
- if (res.tv.nsec >= NSEC_PER_SEC)
- res.tv64 += (u32)-NSEC_PER_SEC;
-
- return res;
-}
-
-/**
- * ktime_add_ns - Add a scalar nanoseconds value to a ktime_t variable
- * @kt: addend
- * @nsec: the scalar nsec value to add
- *
- * Returns the sum of @kt and @nsec in ktime_t format
- */
-extern ktime_t ktime_add_ns(const ktime_t kt, u64 nsec);
-
-/**
- * ktime_sub_ns - Subtract a scalar nanoseconds value from a ktime_t variable
- * @kt: minuend
- * @nsec: the scalar nsec value to subtract
- *
- * Returns the subtraction of @nsec from @kt in ktime_t format
- */
-extern ktime_t ktime_sub_ns(const ktime_t kt, u64 nsec);
-
-/**
- * timespec_to_ktime - convert a timespec to ktime_t format
- * @ts: the timespec variable to convert
- *
- * Returns a ktime_t variable with the converted timespec value
- */
-static inline ktime_t timespec_to_ktime(const struct timespec ts)
-{
- return (ktime_t) { .tv = { .sec = (s32)ts.tv_sec,
- .nsec = (s32)ts.tv_nsec } };
-}
-
-/**
- * timeval_to_ktime - convert a timeval to ktime_t format
- * @tv: the timeval variable to convert
- *
- * Returns a ktime_t variable with the converted timeval value
- */
-static inline ktime_t timeval_to_ktime(const struct timeval tv)
-{
- return (ktime_t) { .tv = { .sec = (s32)tv.tv_sec,
- .nsec = (s32)(tv.tv_usec *
- NSEC_PER_USEC) } };
-}
-
-/**
- * ktime_to_timespec - convert a ktime_t variable to timespec format
- * @kt: the ktime_t variable to convert
- *
- * Returns the timespec representation of the ktime value
- */
-static inline struct timespec ktime_to_timespec(const ktime_t kt)
-{
- return (struct timespec) { .tv_sec = (time_t) kt.tv.sec,
- .tv_nsec = (long) kt.tv.nsec };
-}
-
-/**
- * ktime_to_timeval - convert a ktime_t variable to timeval format
- * @kt: the ktime_t variable to convert
- *
- * Returns the timeval representation of the ktime value
- */
-static inline struct timeval ktime_to_timeval(const ktime_t kt)
-{
- return (struct timeval) {
- .tv_sec = (time_t) kt.tv.sec,
- .tv_usec = (suseconds_t) (kt.tv.nsec / NSEC_PER_USEC) };
-}
-
-/**
- * ktime_to_ns - convert a ktime_t variable to scalar nanoseconds
- * @kt: the ktime_t variable to convert
- *
- * Returns the scalar nanoseconds representation of @kt
- */
-static inline s64 ktime_to_ns(const ktime_t kt)
-{
- return (s64) kt.tv.sec * NSEC_PER_SEC + kt.tv.nsec;
-}
-
-#endif /* !((BITS_PER_LONG == 64) || defined(CONFIG_KTIME_SCALAR)) */
-
-static inline s64 ktime_get_ns(void)
-{
- struct timespec ts;
- ktime_t kt;
- ktime_get_ts(&ts);
- kt = timespec_to_ktime(ts);
- return (ktime_to_ns(kt));
-}
-
-#endif /* _LINUX_KTIME_H */
diff --git a/sys/powerpc/powerpc/machdep.c b/sys/powerpc/powerpc/machdep.c
index 2bc9496..781a3f6 100644
--- a/sys/powerpc/powerpc/machdep.c
+++ b/sys/powerpc/powerpc/machdep.c
@@ -176,12 +176,12 @@ cpu_startup(void *dummy)
#ifdef PERFMON
perfmon_init();
#endif
- printf("real memory = %ld (%ld MB)\n", ptoa(physmem),
+ printf("real memory = %lu (%lu MB)\n", ptoa(physmem),
ptoa(physmem) / 1048576);
realmem = physmem;
if (bootverbose)
- printf("available KVA = %zd (%zd MB)\n",
+ printf("available KVA = %zu (%zu MB)\n",
virtual_end - virtual_avail,
(virtual_end - virtual_avail) / 1048576);
@@ -199,7 +199,7 @@ cpu_startup(void *dummy)
#ifdef __powerpc64__
printf("0x%016lx - 0x%016lx, %ld bytes (%ld pages)\n",
#else
- printf("0x%08x - 0x%08x, %d bytes (%ld pages)\n",
+ printf("0x%08x - 0x%08x, %u bytes (%lu pages)\n",
#endif
phys_avail[indx], phys_avail[indx + 1] - 1, size1,
size1 / PAGE_SIZE);
@@ -208,7 +208,7 @@ cpu_startup(void *dummy)
vm_ksubmap_init(&kmi);
- printf("avail memory = %ld (%ld MB)\n", ptoa(vm_cnt.v_free_count),
+ printf("avail memory = %lu (%lu MB)\n", ptoa(vm_cnt.v_free_count),
ptoa(vm_cnt.v_free_count) / 1048576);
/*
diff --git a/sys/sys/_bitset.h b/sys/sys/_bitset.h
index 05d5bca..26a8848 100644
--- a/sys/sys/_bitset.h
+++ b/sys/sys/_bitset.h
@@ -50,7 +50,7 @@
#define BITSET_DEFINE(t, _s) \
struct t { \
long __bits[__bitset_words((_s))]; \
-};
+}
#define BITSET_T_INITIALIZER(x) \
{ .__bits = { x } }
diff --git a/sys/sys/imgact_elf.h b/sys/sys/imgact_elf.h
index d1d4f21..9b47042 100644
--- a/sys/sys/imgact_elf.h
+++ b/sys/sys/imgact_elf.h
@@ -37,6 +37,7 @@
#define AUXARGS_ENTRY(pos, id, val) {suword(pos++, id); suword(pos++, val);}
+struct image_params;
struct thread;
/*
diff --git a/sys/sys/ktr_class.h b/sys/sys/ktr_class.h
index 6635cdc..4bfc895 100644
--- a/sys/sys/ktr_class.h
+++ b/sys/sys/ktr_class.h
@@ -55,7 +55,7 @@
#define KTR_PROC 0x00001000 /* Process scheduling */
#define KTR_SYSC 0x00002000 /* System call */
#define KTR_INIT 0x00004000 /* System initialization */
-#define KTR_SPARE3 0x00008000 /* cxgb, drm2, ntb */
+#define KTR_SPARE3 0x00008000 /* cxgb, drm2, ioat, ntb */
#define KTR_SPARE4 0x00010000 /* geom_sched */
#define KTR_EVH 0x00020000 /* Eventhandler */
#define KTR_VFS 0x00040000 /* VFS events */
diff --git a/sys/sys/libkern.h b/sys/sys/libkern.h
index 7b0e0e4..7484cdc 100644
--- a/sys/sys/libkern.h
+++ b/sys/sys/libkern.h
@@ -89,6 +89,9 @@ int ffs(int);
#ifndef HAVE_INLINE_FFSL
int ffsl(long);
#endif
+#ifndef HAVE_INLINE_FFSLL
+int ffsll(long long);
+#endif
#ifndef HAVE_INLINE_FLS
int fls(int);
#endif
diff --git a/sys/sys/param.h b/sys/sys/param.h
index 25870c3..059c234 100644
--- a/sys/sys/param.h
+++ b/sys/sys/param.h
@@ -58,7 +58,7 @@
* in the range 5 to 9.
*/
#undef __FreeBSD_version
-#define __FreeBSD_version 1100081 /* Master, propagated to newvers */
+#define __FreeBSD_version 1100085 /* Master, propagated to newvers */
/*
* __FreeBSD_kernel__ indicates that this system uses the kernel of FreeBSD,
diff --git a/sys/sys/proc.h b/sys/sys/proc.h
index 5e8acc6..eff28b4 100644
--- a/sys/sys/proc.h
+++ b/sys/sys/proc.h
@@ -446,7 +446,7 @@ do { \
#define TDP_RESETSPUR 0x04000000 /* Reset spurious page fault history. */
#define TDP_NERRNO 0x08000000 /* Last errno is already in td_errno */
#define TDP_UIOHELD 0x10000000 /* Current uio has pages held in td_ma */
-#define TDP_UNUSED29 0x20000000 /* --available-- */
+#define TDP_FORKING 0x20000000 /* Thread is being created through fork() */
#define TDP_EXECVMSPC 0x40000000 /* Execve destroyed old vmspace */
/*
diff --git a/sys/sys/ptrace.h b/sys/sys/ptrace.h
index de4e7a7..7135767 100644
--- a/sys/sys/ptrace.h
+++ b/sys/sys/ptrace.h
@@ -112,7 +112,7 @@ struct ptrace_lwpinfo {
sigset_t pl_siglist; /* LWP pending signal */
struct __siginfo pl_siginfo; /* siginfo for signal */
char pl_tdname[MAXCOMLEN + 1]; /* LWP name */
- int pl_child_pid; /* New child pid */
+ pid_t pl_child_pid; /* New child pid */
u_int pl_syscall_code;
u_int pl_syscall_narg;
};
diff --git a/sys/sys/syscall.h b/sys/sys/syscall.h
index 2fb8c60..bc72345 100644
--- a/sys/sys/syscall.h
+++ b/sys/sys/syscall.h
@@ -3,7 +3,7 @@
*
* DO NOT EDIT-- this file is automatically generated.
* $FreeBSD$
- * created from FreeBSD: head/sys/kern/syscalls.master 281714 2015-04-18 21:50:13Z kib
+ * created from FreeBSD: head/sys/kern/syscalls.master 285388 2015-07-11 15:22:11Z adrian
*/
#define SYS_syscall 0
diff --git a/sys/sys/syscall.mk b/sys/sys/syscall.mk
index e7d3a10..fe2cb35 100644
--- a/sys/sys/syscall.mk
+++ b/sys/sys/syscall.mk
@@ -1,7 +1,7 @@
# FreeBSD system call names.
# DO NOT EDIT-- this file is automatically generated.
# $FreeBSD$
-# created from FreeBSD: head/sys/kern/syscalls.master 281714 2015-04-18 21:50:13Z kib
+# created from FreeBSD: head/sys/kern/syscalls.master 285388 2015-07-11 15:22:11Z adrian
MIASM = \
syscall.o \
exit.o \
diff --git a/sys/sys/sysctl.h b/sys/sys/sysctl.h
index 4c66431..4e6c556 100644
--- a/sys/sys/sysctl.h
+++ b/sys/sys/sysctl.h
@@ -73,6 +73,8 @@ struct ctlname {
#define CTLTYPE_LONG 7 /* name describes a long */
#define CTLTYPE_ULONG 8 /* name describes an unsigned long */
#define CTLTYPE_U64 9 /* name describes an unsigned 64-bit number */
+#define CTLTYPE_U8 0xa /* name describes an unsigned 8-bit number */
+#define CTLTYPE_U16 0xb /* name describes an unsigned 16-bit number */
#define CTLFLAG_RD 0x80000000 /* Allow reads of variable */
#define CTLFLAG_WR 0x40000000 /* Allow writes to the variable */
@@ -188,6 +190,8 @@ struct sysctl_oid {
#define SYSCTL_OUT(r, p, l) (r->oldfunc)(r, p, l)
#define SYSCTL_OUT_STR(r, p) (r->oldfunc)(r, p, strlen(p) + 1)
+int sysctl_handle_8(SYSCTL_HANDLER_ARGS);
+int sysctl_handle_16(SYSCTL_HANDLER_ARGS);
int sysctl_handle_int(SYSCTL_HANDLER_ARGS);
int sysctl_msec_to_ticks(SYSCTL_HANDLER_ARGS);
int sysctl_handle_long(SYSCTL_HANDLER_ARGS);
@@ -319,6 +323,46 @@ TAILQ_HEAD(sysctl_ctx_list, sysctl_ctx_entry);
__arg, len, sysctl_handle_string, "A", __DESCR(descr)); \
})
+/* Oid for an unsigned 8-bit int. If ptr is NULL, val is returned. */
+#define SYSCTL_NULL_U8_PTR ((unsigned *)NULL)
+#define SYSCTL_U8(parent, nbr, name, access, ptr, val, descr) \
+ SYSCTL_OID(parent, nbr, name, \
+ CTLTYPE_U8 | CTLFLAG_MPSAFE | (access), \
+ ptr, val, sysctl_handle_8, "CU", descr); \
+ CTASSERT((((access) & CTLTYPE) == 0 || \
+ ((access) & SYSCTL_CT_ASSERT_MASK) == CTLTYPE_U8) && \
+ sizeof(uint8_t) == sizeof(*(ptr)))
+
+#define SYSCTL_ADD_U8(ctx, parent, nbr, name, access, ptr, val, descr) \
+({ \
+ uint8_t *__ptr = (ptr); \
+ CTASSERT(((access) & CTLTYPE) == 0 || \
+ ((access) & SYSCTL_CT_ASSERT_MASK) == CTLTYPE_U8); \
+ sysctl_add_oid(ctx, parent, nbr, name, \
+ CTLTYPE_U8 | CTLFLAG_MPSAFE | (access), \
+ __ptr, val, sysctl_handle_8, "CU", __DESCR(descr)); \
+})
+
+/* Oid for an unsigned 16-bit int. If ptr is NULL, val is returned. */
+#define SYSCTL_NULL_U16_PTR ((unsigned *)NULL)
+#define SYSCTL_U16(parent, nbr, name, access, ptr, val, descr) \
+ SYSCTL_OID(parent, nbr, name, \
+ CTLTYPE_U16 | CTLFLAG_MPSAFE | (access), \
+ ptr, val, sysctl_handle_16, "SU", descr); \
+ CTASSERT((((access) & CTLTYPE) == 0 || \
+ ((access) & SYSCTL_CT_ASSERT_MASK) == CTLTYPE_U16) && \
+ sizeof(uint16_t) == sizeof(*(ptr)))
+
+#define SYSCTL_ADD_U16(ctx, parent, nbr, name, access, ptr, val, descr) \
+({ \
+ uint16_t *__ptr = (ptr); \
+ CTASSERT(((access) & CTLTYPE) == 0 || \
+ ((access) & SYSCTL_CT_ASSERT_MASK) == CTLTYPE_U16); \
+ sysctl_add_oid(ctx, parent, nbr, name, \
+ CTLTYPE_U16 | CTLFLAG_MPSAFE | (access), \
+ __ptr, val, sysctl_handle_16, "SU", __DESCR(descr)); \
+})
+
/* Oid for an int. If ptr is SYSCTL_NULL_INT_PTR, val is returned. */
#define SYSCTL_NULL_INT_PTR ((int *)NULL)
#define SYSCTL_INT(parent, nbr, name, access, ptr, val, descr) \
diff --git a/sys/sys/sysproto.h b/sys/sys/sysproto.h
index aaf7cba..143f81d 100644
--- a/sys/sys/sysproto.h
+++ b/sys/sys/sysproto.h
@@ -3,7 +3,7 @@
*
* DO NOT EDIT-- this file is automatically generated.
* $FreeBSD$
- * created from FreeBSD: head/sys/kern/syscalls.master 281714 2015-04-18 21:50:13Z kib
+ * created from FreeBSD: head/sys/kern/syscalls.master 285388 2015-07-11 15:22:11Z adrian
*/
#ifndef _SYS_SYSPROTO_H_
diff --git a/sys/sys/umtx.h b/sys/sys/umtx.h
index 1459507..5187ad7 100644
--- a/sys/sys/umtx.h
+++ b/sys/sys/umtx.h
@@ -83,7 +83,6 @@
#define UMTX_OP_MUTEX_WAKE2 22
#define UMTX_OP_SEM2_WAIT 23
#define UMTX_OP_SEM2_WAKE 24
-#define UMTX_OP_MAX 25
/* Flags for UMTX_OP_CV_WAIT */
#define CVWAIT_CHECK_UNPARKING 0x01
diff --git a/sys/ufs/ffs/ffs_balloc.c b/sys/ufs/ffs/ffs_balloc.c
index 9c33a7f..8551085 100644
--- a/sys/ufs/ffs/ffs_balloc.c
+++ b/sys/ufs/ffs/ffs_balloc.c
@@ -429,7 +429,9 @@ retry:
brelse(bp);
if (flags & BA_CLRBUF) {
int seqcount = (flags & BA_SEQMASK) >> BA_SEQSHIFT;
- if (seqcount && (vp->v_mount->mnt_flag & MNT_NOCLUSTERR) == 0) {
+ if (seqcount != 0 &&
+ (vp->v_mount->mnt_flag & MNT_NOCLUSTERR) == 0 &&
+ !(vm_page_count_severe() || buf_dirty_count_severe())) {
error = cluster_read(vp, ip->i_size, lbn,
(int)fs->fs_bsize, NOCRED,
MAXBSIZE, seqcount, gbflags, &nbp);
@@ -998,7 +1000,9 @@ retry:
*/
if (flags & BA_CLRBUF) {
int seqcount = (flags & BA_SEQMASK) >> BA_SEQSHIFT;
- if (seqcount && (vp->v_mount->mnt_flag & MNT_NOCLUSTERR) == 0) {
+ if (seqcount != 0 &&
+ (vp->v_mount->mnt_flag & MNT_NOCLUSTERR) == 0 &&
+ !(vm_page_count_severe() || buf_dirty_count_severe())) {
error = cluster_read(vp, ip->i_size, lbn,
(int)fs->fs_bsize, NOCRED,
MAXBSIZE, seqcount, gbflags, &nbp);
diff --git a/sys/vm/vm_page.h b/sys/vm/vm_page.h
index dedd6ac..a23f746 100644
--- a/sys/vm/vm_page.h
+++ b/sys/vm/vm_page.h
@@ -375,6 +375,11 @@ extern long first_page; /* first physical page number */
#define VM_PAGE_TO_PHYS(entry) ((entry)->phys_addr)
+/*
+ * PHYS_TO_VM_PAGE() returns the vm_page_t object that represents a memory
+ * page to which the given physical address belongs. The correct vm_page_t
+ * object is returned for addresses that are not page-aligned.
+ */
vm_page_t PHYS_TO_VM_PAGE(vm_paddr_t pa);
/*
diff --git a/sys/vm/vnode_pager.c b/sys/vm/vnode_pager.c
index 7a0dcfc..7cddbd8 100644
--- a/sys/vm/vnode_pager.c
+++ b/sys/vm/vnode_pager.c
@@ -767,26 +767,21 @@ vnode_pager_generic_getpages(struct vnode *vp, vm_page_t *m, int bytecount,
int reqpage, vop_getpages_iodone_t iodone, void *arg)
{
vm_object_t object;
- off_t foff;
- int i, j, size, bsize, first, *freecnt;
- daddr_t firstaddr, reqblock;
struct bufobj *bo;
- int runpg;
- int runend;
struct buf *bp;
- int count;
- int error;
-
- object = vp->v_object;
- count = bytecount / PAGE_SIZE;
+ daddr_t firstaddr, reqblock;
+ off_t foff;
+ int pbefore, pafter, i, size, bsize, first, last, *freecnt;
+ int count, error, before, after, secmask;
KASSERT(vp->v_type != VCHR && vp->v_type != VBLK,
("vnode_pager_generic_getpages does not support devices"));
if (vp->v_iflag & VI_DOOMED)
- return VM_PAGER_BAD;
+ return (VM_PAGER_BAD);
+ object = vp->v_object;
+ count = bytecount / PAGE_SIZE;
bsize = vp->v_mount->mnt_stat.f_iosize;
- foff = IDX_TO_OFF(m[reqpage]->pindex);
/*
* Synchronous and asynchronous paging operations use different
@@ -805,7 +800,8 @@ vnode_pager_generic_getpages(struct vnode *vp, vm_page_t *m, int bytecount,
* If the file system doesn't support VOP_BMAP, use old way of
* getting pages via VOP_READ.
*/
- error = VOP_BMAP(vp, foff / bsize, &bo, &reqblock, NULL, NULL);
+ error = VOP_BMAP(vp, IDX_TO_OFF(m[reqpage]->pindex) / bsize, &bo,
+ &reqblock, &after, &before);
if (error == EOPNOTSUPP) {
relpbuf(bp, freecnt);
VM_OBJECT_WLOCK(object);
@@ -836,7 +832,7 @@ vnode_pager_generic_getpages(struct vnode *vp, vm_page_t *m, int bytecount,
vm_pager_free_nonreq(object, m, reqpage, count, FALSE);
PCPU_INC(cnt.v_vnodein);
PCPU_INC(cnt.v_vnodepgsin);
- return vnode_pager_input_smlfs(object, m[reqpage]);
+ return (vnode_pager_input_smlfs(object, m[reqpage]));
}
/*
@@ -870,75 +866,39 @@ vnode_pager_generic_getpages(struct vnode *vp, vm_page_t *m, int bytecount,
VM_OBJECT_WUNLOCK(object);
}
- /*
- * here on direct device I/O
- */
- firstaddr = -1;
-
- /*
- * calculate the run that includes the required page
- */
- for (first = 0, i = 0; i < count; i = runend) {
- if (vnode_pager_addr(vp, IDX_TO_OFF(m[i]->pindex), &firstaddr,
- &runpg) != 0) {
- relpbuf(bp, freecnt);
- /* The requested page may be out of range. */
- vm_pager_free_nonreq(object, m + i, reqpage - i,
- count - i, FALSE);
- return (VM_PAGER_ERROR);
- }
- if (firstaddr == -1) {
- VM_OBJECT_WLOCK(object);
- if (i == reqpage && foff < object->un_pager.vnp.vnp_size) {
- panic("vnode_pager_getpages: unexpected missing page: firstaddr: %jd, foff: 0x%jx%08jx, vnp_size: 0x%jx%08jx",
- (intmax_t)firstaddr, (uintmax_t)(foff >> 32),
- (uintmax_t)foff,
- (uintmax_t)
- (object->un_pager.vnp.vnp_size >> 32),
- (uintmax_t)object->un_pager.vnp.vnp_size);
- }
+ pbefore = (daddr_t)before * bsize / PAGE_SIZE;
+ pafter = (daddr_t)after * bsize / PAGE_SIZE;
+ first = reqpage < pbefore ? 0 : reqpage - pbefore;
+ last = reqpage + pafter >= count ? count - 1 : reqpage + pafter;
+ if (first > 0 || last + 1 < count) {
+ VM_OBJECT_WLOCK(object);
+ for (i = 0; i < first; i++) {
vm_page_lock(m[i]);
vm_page_free(m[i]);
vm_page_unlock(m[i]);
- VM_OBJECT_WUNLOCK(object);
- runend = i + 1;
- first = runend;
- continue;
}
- runend = i + runpg;
- if (runend <= reqpage) {
- VM_OBJECT_WLOCK(object);
- for (j = i; j < runend; j++) {
- vm_page_lock(m[j]);
- vm_page_free(m[j]);
- vm_page_unlock(m[j]);
- }
- VM_OBJECT_WUNLOCK(object);
- } else {
- if (runpg < (count - first)) {
- VM_OBJECT_WLOCK(object);
- for (i = first + runpg; i < count; i++) {
- vm_page_lock(m[i]);
- vm_page_free(m[i]);
- vm_page_unlock(m[i]);
- }
- VM_OBJECT_WUNLOCK(object);
- count = first + runpg;
- }
- break;
+ for (i = last + 1; i < count; i++) {
+ vm_page_lock(m[i]);
+ vm_page_free(m[i]);
+ vm_page_unlock(m[i]);
}
- first = runend;
+ VM_OBJECT_WUNLOCK(object);
}
/*
- * the first and last page have been calculated now, move input pages
- * to be zero based...
+ * here on direct device I/O
+ */
+ firstaddr = reqblock;
+ firstaddr += (IDX_TO_OFF(m[reqpage]->pindex) % bsize) / DEV_BSIZE;
+ firstaddr -= IDX_TO_OFF(reqpage - first) / DEV_BSIZE;
+
+ /*
+ * The first and last page have been calculated now, move
+ * input pages to be zero based, and adjust the count.
*/
- if (first != 0) {
- m += first;
- count -= first;
- reqpage -= first;
- }
+ m += first;
+ reqpage -= first;
+ count = last - first + 1;
/*
* calculate the file virtual address for the transfer
@@ -957,13 +917,11 @@ vnode_pager_generic_getpages(struct vnode *vp, vm_page_t *m, int bytecount,
/*
* round up physical size for real devices.
*/
- if (1) {
- int secmask = bo->bo_bsize - 1;
- KASSERT(secmask < PAGE_SIZE && secmask > 0,
- ("vnode_pager_generic_getpages: sector size %d too large",
- secmask + 1));
- size = (size + secmask) & ~secmask;
- }
+ secmask = bo->bo_bsize - 1;
+ KASSERT(secmask < PAGE_SIZE && secmask > 0,
+ ("vnode_pager_generic_getpages: sector size %d too large",
+ secmask + 1));
+ size = (size + secmask) & ~secmask;
/*
* and map the pages to be read into the kva, if the filesystem
diff --git a/sys/x86/include/apicvar.h b/sys/x86/include/apicvar.h
index 58fcced..4326cac 100644
--- a/sys/x86/include/apicvar.h
+++ b/sys/x86/include/apicvar.h
@@ -455,7 +455,6 @@ void lapic_handle_cmc(void);
void lapic_handle_error(void);
void lapic_handle_intr(int vector, struct trapframe *frame);
void lapic_handle_timer(struct trapframe *frame);
-void xen_intr_handle_upcall(struct trapframe *frame);
void hv_vector_handler(struct trapframe *frame);
extern int x2apic_mode;
diff --git a/sys/x86/include/xen/xen-os.h b/sys/x86/include/xen/xen-os.h
new file mode 100644
index 0000000..1153105
--- /dev/null
+++ b/sys/x86/include/xen/xen-os.h
@@ -0,0 +1,38 @@
+/*****************************************************************************
+ * x86/xen/xen-os.h
+ *
+ * Random collection of macros and definition
+ *
+ * Copyright (c) 2003, 2004 Keir Fraser (on behalf of the Xen team)
+ * All rights reserved.
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to
+ * deal in the Software without restriction, including without limitation the
+ * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+ * sell copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ *
+ * $FreeBSD$
+ */
+
+#ifndef _MACHINE_X86_XEN_XEN_OS_H_
+#define _MACHINE_X86_XEN_XEN_OS_H_
+
+/* Everything below this point is not included by assembler (.S) files. */
+#ifndef __ASSEMBLY__
+
+#endif /* !__ASSEMBLY__ */
+
+#endif /* _MACHINE_X86_XEN_XEN_OS_H_ */
diff --git a/sys/x86/x86/busdma_bounce.c b/sys/x86/x86/busdma_bounce.c
index cac6c71..ebd6238 100644
--- a/sys/x86/x86/busdma_bounce.c
+++ b/sys/x86/x86/busdma_bounce.c
@@ -1006,7 +1006,6 @@ add_bounce_page(bus_dma_tag_t dmat, bus_dmamap_t map, vm_offset_t vaddr,
bpage->busaddr |= addr & PAGE_MASK;
}
bpage->datavaddr = vaddr;
- /* PHYS_TO_VM_PAGE() will truncate unaligned addresses. */
bpage->datapage = PHYS_TO_VM_PAGE(addr);
bpage->dataoffs = addr & PAGE_MASK;
bpage->datacount = size;
diff --git a/sys/x86/x86/identcpu.c b/sys/x86/x86/identcpu.c
index 4fe3e3c..2f6cfbc 100644
--- a/sys/x86/x86/identcpu.c
+++ b/sys/x86/x86/identcpu.c
@@ -1883,6 +1883,18 @@ print_INTEL_TLB(u_int data)
case 0x68:
printf("1st-level data cache: 32 KB, 4 way set associative, sectored cache, 64 byte line size\n");
break;
+ case 0x6a:
+ printf("uTLB: 4KByte pages, 8-way set associative, 64 entries\n");
+ break;
+ case 0x6b:
+ printf("DTLB: 4KByte pages, 8-way set associative, 256 entries\n");
+ break;
+ case 0x6c:
+ printf("DTLB: 2M/4M pages, 8-way set associative, 126 entries\n");
+ break;
+ case 0x6d:
+ printf("DTLB: 1 GByte pages, fully associative, 16 entries\n");
+ break;
case 0x70:
printf("Trace cache: 12K-uops, 8-way set associative\n");
break;
diff --git a/sys/x86/xen/xen_intr.c b/sys/x86/xen/xen_intr.c
index a728ddb..5fd50d8 100644
--- a/sys/x86/xen/xen_intr.c
+++ b/sys/x86/xen/xen_intr.c
@@ -71,6 +71,9 @@ __FBSDID("$FreeBSD$");
static MALLOC_DEFINE(M_XENINTR, "xen_intr", "Xen Interrupt Services");
+#define ENABLED_SETSIZE (sizeof(u_long) * 8)
+BITSET_DEFINE(enabledbits, ENABLED_SETSIZE);
+
/**
* Per-cpu event channel processing state.
*/
@@ -95,14 +98,14 @@ struct xen_intr_pcpu_data {
* A bitmap of ports that can be serviced from this CPU.
* A set bit means interrupt handling is enabled.
*/
- u_long evtchn_enabled[sizeof(u_long) * 8];
+ struct enabledbits evtchn_enabled;
};
/*
* Start the scan at port 0 by initializing the last scanned
* location as the highest numbered event channel port.
*/
-DPCPU_DEFINE(struct xen_intr_pcpu_data, xen_intr_pcpu) = {
+static DPCPU_DEFINE(struct xen_intr_pcpu_data, xen_intr_pcpu) = {
.last_processed_l1i = LONG_BIT - 1,
.last_processed_l2i = LONG_BIT - 1
};
@@ -212,7 +215,7 @@ evtchn_cpu_mask_port(u_int cpu, evtchn_port_t port)
struct xen_intr_pcpu_data *pcpu;
pcpu = DPCPU_ID_PTR(cpu, xen_intr_pcpu);
- clear_bit(port, pcpu->evtchn_enabled);
+ BIT_CLR_ATOMIC(ENABLED_SETSIZE, port, &pcpu->evtchn_enabled);
}
/**
@@ -234,7 +237,7 @@ evtchn_cpu_unmask_port(u_int cpu, evtchn_port_t port)
struct xen_intr_pcpu_data *pcpu;
pcpu = DPCPU_ID_PTR(cpu, xen_intr_pcpu);
- set_bit(port, pcpu->evtchn_enabled);
+ BIT_SET_ATOMIC(ENABLED_SETSIZE, port, &pcpu->evtchn_enabled);
}
/**
@@ -498,7 +501,7 @@ xen_intr_active_ports(struct xen_intr_pcpu_data *pcpu, shared_info_t *sh,
{
return (sh->evtchn_pending[idx]
& ~sh->evtchn_mask[idx]
- & pcpu->evtchn_enabled[idx]);
+ & pcpu->evtchn_enabled.__bits[idx]);
}
/**
@@ -634,8 +637,10 @@ xen_intr_init(void *dummy __unused)
*/
CPU_FOREACH(i) {
pcpu = DPCPU_ID_PTR(i, xen_intr_pcpu);
- memset(pcpu->evtchn_enabled, i == 0 ? ~0 : 0,
- sizeof(pcpu->evtchn_enabled));
+ if (i == 0)
+ BIT_FILL(ENABLED_SETSIZE, &pcpu->evtchn_enabled);
+ else
+ BIT_ZERO(ENABLED_SETSIZE, &pcpu->evtchn_enabled);
xen_intr_intrcnt_add(i);
}
@@ -748,8 +753,11 @@ xen_intr_resume(struct pic *unused, bool suspend_cancelled)
struct xen_intr_pcpu_data *pcpu;
pcpu = DPCPU_ID_PTR(i, xen_intr_pcpu);
- memset(pcpu->evtchn_enabled,
- i == 0 ? ~0 : 0, sizeof(pcpu->evtchn_enabled));
+
+ if (i == 0)
+ BIT_FILL(ENABLED_SETSIZE, &pcpu->evtchn_enabled);
+ else
+ BIT_ZERO(ENABLED_SETSIZE, &pcpu->evtchn_enabled);
}
/* Mask all event channels. */
@@ -1033,7 +1041,7 @@ xen_intr_pirq_eoi_source(struct intsrc *base_isrc)
isrc = (struct xenisrc *)base_isrc;
- if (test_bit(isrc->xi_pirq, xen_intr_pirq_eoi_map)) {
+ if (xen_test_bit(isrc->xi_pirq, xen_intr_pirq_eoi_map)) {
struct physdev_eoi eoi = { .irq = isrc->xi_pirq };
error = HYPERVISOR_physdev_op(PHYSDEVOP_eoi, &eoi);
@@ -1070,7 +1078,7 @@ xen_intr_pirq_enable_intr(struct intsrc *base_isrc)
* Since the dynamic PIRQ EOI map is not available
* mark the PIRQ as needing EOI unconditionally.
*/
- set_bit(isrc->xi_pirq, xen_intr_pirq_eoi_map);
+ xen_set_bit(isrc->xi_pirq, xen_intr_pirq_eoi_map);
}
}
@@ -1591,20 +1599,21 @@ xen_intr_dump_port(struct xenisrc *isrc)
db_printf("\tPirq: %d ActiveHi: %d EdgeTrigger: %d "
"NeedsEOI: %d\n",
isrc->xi_pirq, isrc->xi_activehi, isrc->xi_edgetrigger,
- !!test_bit(isrc->xi_pirq, xen_intr_pirq_eoi_map));
+ !!xen_test_bit(isrc->xi_pirq, xen_intr_pirq_eoi_map));
}
if (isrc->xi_type == EVTCHN_TYPE_VIRQ)
db_printf("\tVirq: %d\n", isrc->xi_virq);
db_printf("\tMasked: %d Pending: %d\n",
- !!test_bit(isrc->xi_port, &s->evtchn_mask[0]),
- !!test_bit(isrc->xi_port, &s->evtchn_pending[0]));
+ !!xen_test_bit(isrc->xi_port, &s->evtchn_mask[0]),
+ !!xen_test_bit(isrc->xi_port, &s->evtchn_pending[0]));
db_printf("\tPer-CPU Masks: ");
CPU_FOREACH(i) {
pcpu = DPCPU_ID_PTR(i, xen_intr_pcpu);
db_printf("cpu#%d: %d ", i,
- !!test_bit(isrc->xi_port, pcpu->evtchn_enabled));
+ BIT_ISSET(ENABLED_SETSIZE, isrc->xi_port,
+ &pcpu->evtchn_enabled));
}
db_printf("\n");
}
diff --git a/sys/xen/blkif.h b/sys/xen/blkif.h
index 8a19d5d..721bb93 100644
--- a/sys/xen/blkif.h
+++ b/sys/xen/blkif.h
@@ -120,7 +120,7 @@ static void inline blkif_get_x86_32_req(blkif_request_t *dst, blkif_x86_32_reque
dst->handle = src->handle;
dst->id = src->id;
dst->sector_number = src->sector_number;
- barrier();
+ __compiler_membar();
if (n > dst->nr_segments)
n = dst->nr_segments;
for (i = 0; i < n; i++)
@@ -135,7 +135,7 @@ static void inline blkif_get_x86_64_req(blkif_request_t *dst, blkif_x86_64_reque
dst->handle = src->handle;
dst->id = src->id;
dst->sector_number = src->sector_number;
- barrier();
+ __compiler_membar();
if (n > dst->nr_segments)
n = dst->nr_segments;
for (i = 0; i < n; i++)
diff --git a/sys/xen/hypervisor.h b/sys/xen/hypervisor.h
index 42cdb3b..65d5a3e 100644
--- a/sys/xen/hypervisor.h
+++ b/sys/xen/hypervisor.h
@@ -11,22 +11,6 @@
#ifndef __XEN_HYPERVISOR_H__
#define __XEN_HYPERVISOR_H__
-#ifdef XENHVM
-
-#define is_running_on_xen() (HYPERVISOR_shared_info != NULL)
-
-#else
-
-#define is_running_on_xen() 1
-
-#endif
-
-#ifdef PAE
-#ifndef CONFIG_X86_PAE
-#define CONFIG_X86_PAE
-#endif
-#endif
-
#include <sys/cdefs.h>
#include <sys/systm.h>
#include <xen/interface/xen.h>
@@ -38,22 +22,6 @@
#include <xen/interface/memory.h>
#include <machine/xen/hypercall.h>
-#if defined(__amd64__)
-#define MULTI_UVMFLAGS_INDEX 2
-#define MULTI_UVMDOMID_INDEX 3
-#else
-#define MULTI_UVMFLAGS_INDEX 3
-#define MULTI_UVMDOMID_INDEX 4
-#endif
-
-#ifdef CONFIG_XEN_PRIVILEGED_GUEST
-#define is_initial_xendomain() (xen_start_info->flags & SIF_INITDOMAIN)
-#else
-#define is_initial_xendomain() 0
-#endif
-
-extern start_info_t *xen_start_info;
-
extern uint64_t get_system_time(int ticks);
static inline int
@@ -62,8 +30,6 @@ HYPERVISOR_console_write(const char *str, int count)
return HYPERVISOR_console_io(CONSOLEIO_write, count, str);
}
-static inline void HYPERVISOR_crash(void) __dead2;
-
static inline int
HYPERVISOR_yield(void)
{
@@ -132,23 +98,4 @@ HYPERVISOR_poll(
return (rc);
}
-static inline void
-MULTI_update_va_mapping(
- multicall_entry_t *mcl, unsigned long va,
- uint64_t new_val, unsigned long flags)
-{
- mcl->op = __HYPERVISOR_update_va_mapping;
- mcl->args[0] = va;
-#if defined(__amd64__)
- mcl->args[1] = new_val;
-#elif defined(PAE)
- mcl->args[1] = (uint32_t)(new_val & 0xffffffff) ;
- mcl->args[2] = (uint32_t)(new_val >> 32);
-#else
- mcl->args[1] = new_val;
- mcl->args[2] = 0;
-#endif
- mcl->args[MULTI_UVMFLAGS_INDEX] = flags;
-}
-
#endif /* __XEN_HYPERVISOR_H__ */
diff --git a/sys/xen/xen-os.h b/sys/xen/xen-os.h
index ab594d4..eec8244 100644
--- a/sys/xen/xen-os.h
+++ b/sys/xen/xen-os.h
@@ -47,9 +47,6 @@
/* Everything below this point is not included by assembler (.S) files. */
#ifndef __ASSEMBLY__
-/* Force a proper event-channel callback from Xen. */
-void force_evtchn_callback(void);
-
extern shared_info_t *HYPERVISOR_shared_info;
extern start_info_t *HYPERVISOR_start_info;
@@ -93,6 +90,31 @@ xen_initial_domain(void)
}
/*
+ * Based on ofed/include/linux/bitops.h
+ *
+ * Those helpers are prefixed by xen_ because xen-os.h is widely included
+ * and we don't want the other drivers using them.
+ *
+ */
+#define NBPL (NBBY * sizeof(long))
+
+static inline bool
+xen_test_bit(int bit, volatile long *addr)
+{
+ unsigned long mask = 1UL << (bit % NBPL);
+
+ return !!(atomic_load_acq_long(&addr[bit / NBPL]) & mask);
+}
+
+static inline void
+xen_set_bit(int bit, volatile long *addr)
+{
+ atomic_set_long(&addr[bit / NBPL], 1UL << (bit % NBPL));
+}
+
+#undef NPBL
+
+/*
* Functions to allocate/free unused memory in order
* to map memory from other domains.
*/
diff --git a/sys/xen/xen_intr.h b/sys/xen/xen_intr.h
index b86f94a..5b2f608 100644
--- a/sys/xen/xen_intr.h
+++ b/sys/xen/xen_intr.h
@@ -41,6 +41,8 @@ typedef void * xen_intr_handle_t;
/** If non-zero, the hypervisor has been configured to use a direct vector */
extern int xen_vector_callback_enabled;
+void xen_intr_handle_upcall(struct trapframe *trap_frame);
+
/**
* Associate an already allocated local event channel port an interrupt
* handler.
diff --git a/targets/pseudo/userland/Makefile.depend b/targets/pseudo/userland/Makefile.depend
index 0738c81..cbd2ca5 100644
--- a/targets/pseudo/userland/Makefile.depend
+++ b/targets/pseudo/userland/Makefile.depend
@@ -564,6 +564,7 @@ DIRDEPS+= \
usr.sbin/mlxcontrol \
usr.sbin/mountd \
usr.sbin/moused \
+ usr.sbin/mpsutil \
usr.sbin/mptutil \
usr.sbin/mtest \
usr.sbin/mtree \
diff --git a/targets/pseudo/userland/lib/Makefile.depend b/targets/pseudo/userland/lib/Makefile.depend
index 9cfbffa..74e6a6e 100644
--- a/targets/pseudo/userland/lib/Makefile.depend
+++ b/targets/pseudo/userland/lib/Makefile.depend
@@ -42,7 +42,6 @@ DIRDEPS = \
lib/libexpat \
lib/libfetch \
lib/libgeom \
- lib/libgpib \
lib/libgssapi \
lib/libiconv_modules/BIG5 \
lib/libiconv_modules/DECHanyu \
diff --git a/tests/sys/kern/Makefile b/tests/sys/kern/Makefile
index c345e5d..daa9797 100644
--- a/tests/sys/kern/Makefile
+++ b/tests/sys/kern/Makefile
@@ -2,6 +2,7 @@
TESTSDIR= ${TESTSBASE}/sys/kern
+ATF_TESTS_C+= kern_copyin
ATF_TESTS_C+= kern_descrip_test
ATF_TESTS_C+= ptrace_test
ATF_TESTS_C+= unix_seqpacket_test
diff --git a/tests/sys/kern/kern_copyin.c b/tests/sys/kern/kern_copyin.c
new file mode 100644
index 0000000..445a632
--- /dev/null
+++ b/tests/sys/kern/kern_copyin.c
@@ -0,0 +1,86 @@
+/*-
+ * Copyright (c) 2015 The FreeBSD Foundation
+ * All rights reserved.
+ *
+ * This software was developed by Konstantin Belousov <kib@FreeBSD.org>
+ * under sponsorship from the FreeBSD Foundation.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#include <sys/param.h>
+#include <errno.h>
+#include <limits.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <atf-c.h>
+#include <vm/vm.h>
+#include <vm/pmap.h>
+#include <machine/vmparam.h>
+
+static int scratch_file;
+
+static int
+copyin_checker(uintptr_t uaddr, size_t len)
+{
+ ssize_t ret;
+
+ ret = write(scratch_file, (const void *)uaddr, len);
+ return (ret == -1 ? errno : 0);
+}
+
+#define FMAX ULONG_MAX
+
+ATF_TC_WITHOUT_HEAD(kern_copyin);
+ATF_TC_BODY(kern_copyin, tc)
+{
+ char template[] = "copyin.XXXXXX";
+
+ scratch_file = mkstemp(template);
+ ATF_REQUIRE(scratch_file != -1);
+ unlink(template);
+
+ ATF_CHECK(copyin_checker(0, 0) == 0);
+ ATF_CHECK(copyin_checker(VM_MAXUSER_ADDRESS - 10, 9) == 0);
+ ATF_CHECK(copyin_checker(VM_MAXUSER_ADDRESS - 10, 10) == 0);
+ ATF_CHECK(copyin_checker(VM_MAXUSER_ADDRESS - 10, 11) == EFAULT);
+ ATF_CHECK(copyin_checker(VM_MAXUSER_ADDRESS - 1, 1) == 0);
+ ATF_CHECK(copyin_checker(VM_MAXUSER_ADDRESS, 0) == 0);
+ ATF_CHECK(copyin_checker(VM_MAXUSER_ADDRESS, 1) == EFAULT);
+ ATF_CHECK(copyin_checker(VM_MAXUSER_ADDRESS, 2) == EFAULT);
+ ATF_CHECK(copyin_checker(VM_MAXUSER_ADDRESS + 1, 0) == 0);
+ ATF_CHECK(copyin_checker(VM_MAXUSER_ADDRESS + 1, 2) == EFAULT);
+ ATF_CHECK(copyin_checker(FMAX - 10, 9) == EFAULT);
+ ATF_CHECK(copyin_checker(FMAX - 10, 10) == EFAULT);
+ ATF_CHECK(copyin_checker(FMAX - 10, 11) == EFAULT);
+}
+
+ATF_TP_ADD_TCS(tp)
+{
+
+ ATF_TP_ADD_TC(tp, kern_copyin);
+ return (atf_no_error());
+}
diff --git a/tools/bsdbox/Makefile.base b/tools/bsdbox/Makefile.base
index 4eb7056..be90098 100644
--- a/tools/bsdbox/Makefile.base
+++ b/tools/bsdbox/Makefile.base
@@ -6,7 +6,7 @@
#
CRUNCH_PROGS_sbin+= dmesg sysctl init reboot
CRUNCH_PROGS_bin+= ls cat dd df cp hostname kill mkdir sleep ps
-CRUNCH_PROGS_bin+= ln rm hostname kenv mv expr
+CRUNCH_PROGS_bin+= ln rm kenv mv expr
CRUNCH_PROGS_usr.bin+= true false hexdump tail nc w head uname tset
CRUNCH_PROGS_usr.sbin+= gpioctl
CRUNCH_ALIAS_w= uptime
diff --git a/tools/build/mk/OptionalObsoleteFiles.inc b/tools/build/mk/OptionalObsoleteFiles.inc
index bbecadd..7f55347 100644
--- a/tools/build/mk/OptionalObsoleteFiles.inc
+++ b/tools/build/mk/OptionalObsoleteFiles.inc
@@ -173,6 +173,10 @@ OLD_DIRS+=etc/autofs
.endif
.if ${MK_BHYVE} == no
+OLD_FILES+=usr/lib/libvmmapi.a
+OLD_FILES+=usr/lib/libvmmapi.so
+OLD_LIBS+=usr/lib/libvmmapi.so.5
+OLD_FILES+=usr/include/vmmapi.h
OLD_FILES+=usr/sbin/bhyve
OLD_FILES+=usr/sbin/bhyvectl
OLD_FILES+=usr/sbin/bhyveload
@@ -3964,9 +3968,34 @@ OLD_FILES+=usr/share/man/man5/keymap.5.gz
OLD_FILES+=usr/share/man/man8/moused.8.gz
.endif
-#.if ${MK_LIB32} == no
-# to be filled in
-#.endif
+.if ${MK_LIB32} == no
+OLD_FILES+=etc/mtree/BSD.lib32.dist
+OLD_FILES+=libexec/ld-elf32.so.1
+. if exists(${DESTDIR}/usr/lib32)
+LIB32_DIRS!=find ${DESTDIR}/usr/lib32 -type d \
+ | sed -e 's,^${DESTDIR}/,,'; echo
+LIB32_FILES!=find ${DESTDIR}/usr/lib32 \! -type d \
+ \! -name "lib*.so*" | sed -e 's,^${DESTDIR}/,,'; echo
+LIB32_LIBS!=find ${DESTDIR}/usr/lib32 \! -type d \
+ -name "lib*.so*" | sed -e 's,^${DESTDIR}/,,'; echo
+OLD_DIRS+=${LIB32_DIRS}
+OLD_FILES+=${LIB32_FILES}
+OLD_LIBS+=${LIB32_LIBS}
+. endif
+. if ${MK_DEBUG_FILES} == no
+. if exists(${DESTDIR}/usr/lib/debug/usr/lib32)
+DEBUG_LIB32_DIRS!=find ${DESTDIR}/usr/lib/debug/usr/lib32 -type d \
+ | sed -e 's,^${DESTDIR}/,,'; echo
+DEBUG_LIB32_FILES!=find ${DESTDIR}/usr/lib/debug/usr/lib32 \! -type d \
+ \! -name "lib*.so*" | sed -e 's,^${DESTDIR}/,,'; echo
+DEBUG_LIB32_LIBS!=find ${DESTDIR}/usr/lib/debug/usr/lib32 \! -type d \
+ -name "lib*.so*" | sed -e 's,^${DESTDIR}/,,'; echo
+OLD_DIRS+=${DEBUG_LIB32_DIRS}
+OLD_FILES+=${DEBUG_LIB32_FILES}
+OLD_LIBS+=${DEBUG_LIB32_LIBS}
+. endif
+. endif
+.endif
.if ${MK_LIBCPLUSPLUS} == no
OLD_LIBS+=lib/libcxxrt.so.1
diff --git a/tools/build/options/WITHOUT_DEBUG_FILES b/tools/build/options/WITHOUT_DEBUG_FILES
new file mode 100644
index 0000000..2938f30
--- /dev/null
+++ b/tools/build/options/WITHOUT_DEBUG_FILES
@@ -0,0 +1,3 @@
+.\" $FreeBSD$
+Set to avoid building or installing standalone debug files for each
+executable binary and shared library.
diff --git a/tools/regression/net80211/ccmp/test_ccmp.c b/tools/regression/net80211/ccmp/test_ccmp.c
index 058e728..ffe4b7c 100644
--- a/tools/regression/net80211/ccmp/test_ccmp.c
+++ b/tools/regression/net80211/ccmp/test_ccmp.c
@@ -53,6 +53,7 @@
#include <sys/socket.h>
#include <net/if.h>
+#include <net/if_var.h>
#include <net/if_media.h>
#include <net80211/ieee80211_var.h>
@@ -591,32 +592,32 @@ printtest(const struct ciphertest *t)
}
static int
-runtest(struct ieee80211com *ic, struct ciphertest *t)
+runtest(struct ieee80211vap *vap, struct ciphertest *t)
{
- struct ieee80211_key key;
+ struct ieee80211_key *key = &vap->iv_nw_keys[t->keyix];
struct mbuf *m = NULL;
const struct ieee80211_cipher *cip;
- u_int8_t mac[IEEE80211_ADDR_LEN];
+ int hdrlen;
printf("%s: ", t->name);
/*
* Setup key.
*/
- memset(&key, 0, sizeof(key));
- key.wk_flags = IEEE80211_KEY_XMIT | IEEE80211_KEY_RECV;
- key.wk_cipher = &ieee80211_cipher_none;
- if (!ieee80211_crypto_newkey(ic, t->cipher,
- IEEE80211_KEY_XMIT | IEEE80211_KEY_RECV, &key)) {
+ memset(key, 0, sizeof(*key));
+ key->wk_flags = IEEE80211_KEY_XMIT | IEEE80211_KEY_RECV;
+ key->wk_cipher = &ieee80211_cipher_none;
+ if (!ieee80211_crypto_newkey(vap, t->cipher,
+ IEEE80211_KEY_XMIT | IEEE80211_KEY_RECV, key)) {
printf("FAIL: ieee80211_crypto_newkey failed\n");
goto bad;
}
- memcpy(key.wk_key, t->key, t->key_len);
- key.wk_keylen = t->key_len;
- key.wk_keyrsc = 0;
- key.wk_keytsc = t->pn-1; /* PN-1 since we do encap */
- if (!ieee80211_crypto_setkey(ic, &key, mac)) {
+ memcpy(key->wk_key, t->key, t->key_len);
+ key->wk_keylen = t->key_len;
+ memset(key->wk_keyrsc, 0, sizeof(key->wk_keyrsc));
+ key->wk_keytsc = t->pn-1; /* PN-1 since we do encap */
+ if (!ieee80211_crypto_setkey(vap, key)) {
printf("FAIL: ieee80211_crypto_setkey failed\n");
goto bad;
}
@@ -624,17 +625,18 @@ runtest(struct ieee80211com *ic, struct ciphertest *t)
/*
* Craft frame from plaintext data.
*/
- cip = key.wk_cipher;
+ cip = key->wk_cipher;
m = m_getcl(M_NOWAIT, MT_HEADER, M_PKTHDR);
m->m_data += cip->ic_header;
memcpy(mtod(m, void *), t->plaintext, t->plaintext_len);
m->m_len = t->plaintext_len;
m->m_pkthdr.len = m->m_len;
+ hdrlen = ieee80211_anyhdrsize(mtod(m, void *));
/*
* Encrypt frame w/ MIC.
*/
- if (!cip->ic_encap(&key, m, t->keyix<<6)) {
+ if (!cip->ic_encap(key, m)) {
printtest(t);
printf("FAIL: ccmp encap failed\n");
goto bad;
@@ -660,7 +662,7 @@ runtest(struct ieee80211com *ic, struct ciphertest *t)
/*
* Decrypt frame; strip MIC.
*/
- if (!cip->ic_decap(&key, m)) {
+ if (!cip->ic_decap(key, m, hdrlen)) {
printf("FAIL: ccmp decap failed\n");
printtest(t);
cmpfail(mtod(m, const void *), m->m_len,
@@ -680,17 +682,17 @@ runtest(struct ieee80211com *ic, struct ciphertest *t)
printf("FAIL: decap botch; data does not compare\n");
printtest(t);
cmpfail(mtod(m, const void *), m->m_pkthdr.len,
- t->plaintext, t_plaintext_len);
+ t->plaintext, t->plaintext_len);
goto bad;
}
m_freem(m);
- ieee80211_crypto_delkey(ic, &key);
+ ieee80211_crypto_delkey(vap, key);
printf("PASS\n");
return 1;
bad:
if (m != NULL)
m_freem(m);
- ieee80211_crypto_delkey(ic, &key);
+ ieee80211_crypto_delkey(vap, key);
return 0;
}
@@ -704,26 +706,38 @@ static int debug = 0;
static int
init_crypto_ccmp_test(void)
{
-#define N(a) (sizeof(a)/sizeof(a[0]))
struct ieee80211com ic;
+ struct ieee80211vap vap;
+ struct ifnet ifp;
int i, pass, total;
memset(&ic, 0, sizeof(ic));
- if (debug)
- ic.ic_debug = IEEE80211_MSG_CRYPTO;
+ memset(&vap, 0, sizeof(vap));
+ memset(&ifp, 0, sizeof(ifp));
+
ieee80211_crypto_attach(&ic);
+ /* some minimal initialization */
+ strncpy(ifp.if_xname, "test_ccmp", sizeof(ifp.if_xname));
+ vap.iv_ic = &ic;
+ vap.iv_ifp = &ifp;
+ if (debug)
+ vap.iv_debug = IEEE80211_MSG_CRYPTO;
+ ieee80211_crypto_vattach(&vap);
+
pass = 0;
total = 0;
- for (i = 0; i < N(ccmptests); i++)
+ for (i = 0; i < nitems(ccmptests); i++)
if (tests & (1<<i)) {
total++;
- pass += runtest(&ic, &ccmptests[i]);
+ pass += runtest(&vap, &ccmptests[i]);
}
printf("%u of %u 802.11i AES-CCMP test vectors passed\n", pass, total);
+
+ ieee80211_crypto_vdetach(&vap);
ieee80211_crypto_detach(&ic);
+
return (pass == total ? 0 : -1);
-#undef N
}
static int
diff --git a/tools/regression/net80211/tkip/test_tkip.c b/tools/regression/net80211/tkip/test_tkip.c
index 5a63978..70d2e38 100644
--- a/tools/regression/net80211/tkip/test_tkip.c
+++ b/tools/regression/net80211/tkip/test_tkip.c
@@ -43,6 +43,7 @@
#include <sys/socket.h>
#include <net/if.h>
+#include <net/if_var.h>
#include <net/if_media.h>
#include <net80211/ieee80211_var.h>
@@ -141,7 +142,6 @@ struct tkip_ctx {
struct ieee80211com *tc_ic; /* for diagnostics */
uint16_t tx_ttak[5];
- int tx_phase1_done;
uint8_t tx_rc4key[16];
uint16_t rx_ttak[5];
@@ -179,34 +179,34 @@ cmpfail(const void *gen, size_t genlen, const void *ref, size_t reflen)
}
static int
-runtest(struct ieee80211com *ic, struct ciphertest *t)
+runtest(struct ieee80211vap *vap, struct ciphertest *t)
{
struct tkip_ctx *ctx;
- struct ieee80211_key key;
+ struct ieee80211_key *key = &vap->iv_nw_keys[t->keyix];
struct mbuf *m = NULL;
const struct ieee80211_cipher *cip;
- u_int8_t mac[IEEE80211_ADDR_LEN];
u_int len;
+ int hdrlen;
printf("%s: ", t->name);
/*
* Setup key.
*/
- memset(&key, 0, sizeof(key));
- key.wk_flags = IEEE80211_KEY_XMIT | IEEE80211_KEY_RECV;
- key.wk_cipher = &ieee80211_cipher_none;
- if (!ieee80211_crypto_newkey(ic, IEEE80211_CIPHER_TKIP,
- IEEE80211_KEY_XMIT | IEEE80211_KEY_RECV, &key)) {
+ memset(key, 0, sizeof(*key));
+ key->wk_flags = IEEE80211_KEY_XMIT | IEEE80211_KEY_RECV;
+ key->wk_cipher = &ieee80211_cipher_none;
+ if (!ieee80211_crypto_newkey(vap, t->cipher,
+ IEEE80211_KEY_XMIT | IEEE80211_KEY_RECV, key)) {
printf("FAIL: ieee80211_crypto_newkey failed\n");
goto bad;
}
- memcpy(key.wk_key, t->key, t->key_len);
- key.wk_keylen = 128/NBBY;
- key.wk_keyrsc = 0;
- key.wk_keytsc = t->pn;
- if (!ieee80211_crypto_setkey(ic, &key, mac)) {
+ memcpy(key->wk_key, t->key, t->key_len);
+ key->wk_keylen = 128/NBBY;
+ memset(key->wk_keyrsc, 0, sizeof(key->wk_keyrsc));
+ key->wk_keytsc = t->pn;
+ if (!ieee80211_crypto_setkey(vap, key)) {
printf("FAIL: ieee80211_crypto_setkey failed\n");
goto bad;
}
@@ -214,18 +214,19 @@ runtest(struct ieee80211com *ic, struct ciphertest *t)
/*
* Craft frame from plaintext data.
*/
- cip = key.wk_cipher;
+ cip = key->wk_cipher;
m = m_getcl(M_NOWAIT, MT_HEADER, M_PKTHDR);
m->m_data += cip->ic_header;
len = t->plaintext_len - IEEE80211_WEP_MICLEN;
memcpy(mtod(m, void *), t->plaintext, len);
m->m_len = len;
m->m_pkthdr.len = m->m_len;
+ hdrlen = ieee80211_anyhdrsize(mtod(m, void *));
/*
* Add MIC.
*/
- if (!ieee80211_crypto_enmic(ic, &key, m)) {
+ if (!ieee80211_crypto_enmic(vap, key, m, 1)) {
printf("FAIL: tkip enmic failed\n");
goto bad;
}
@@ -247,14 +248,14 @@ runtest(struct ieee80211com *ic, struct ciphertest *t)
/*
* Encrypt frame w/ MIC.
*/
- if (!cip->ic_encap(&key, m, t->keyix<<6)) {
+ if (!cip->ic_encap(key, m)) {
printf("FAIL: tkip encap failed\n");
goto bad;
}
/*
* Verify: phase1, phase2, frame length, frame contents.
*/
- ctx = key.wk_private;
+ ctx = key->wk_private;
if (memcmp(ctx->tx_ttak, t->phase1, t->phase1_len)) {
printf("FAIL: encrypt phase1 botch\n");
cmpfail(ctx->tx_ttak, sizeof(ctx->tx_ttak),
@@ -281,7 +282,7 @@ runtest(struct ieee80211com *ic, struct ciphertest *t)
/*
* Decrypt frame.
*/
- if (!cip->ic_decap(&key, m)) {
+ if (!cip->ic_decap(key, m, hdrlen)) {
printf("tkip decap failed\n");
/*
* Check reason for failure: phase1, phase2, frame data (ICV).
@@ -319,17 +320,19 @@ runtest(struct ieee80211com *ic, struct ciphertest *t)
/*
* De-MIC decrypted frame.
*/
- if (!ieee80211_crypto_demic(ic, &key, m)) {
+ if (!ieee80211_crypto_demic(vap, key, m, 1)) {
printf("FAIL: tkip demic failed\n");
goto bad;
}
/* XXX check frame length and contents... */
+ m_freem(m);
+ ieee80211_crypto_delkey(vap, key);
printf("PASS\n");
return 1;
bad:
if (m != NULL)
m_freem(m);
- ieee80211_crypto_delkey(ic, &key);
+ ieee80211_crypto_delkey(vap, key);
return 0;
}
@@ -343,26 +346,38 @@ static int tests = -1;
static int
init_crypto_tkip_test(void)
{
-#define N(a) (sizeof(a)/sizeof(a[0]))
struct ieee80211com ic;
+ struct ieee80211vap vap;
+ struct ifnet ifp;
int i, pass, total;
memset(&ic, 0, sizeof(ic));
- if (debug)
- ic.ic_debug = IEEE80211_MSG_CRYPTO;
+ memset(&vap, 0, sizeof(vap));
+ memset(&ifp, 0, sizeof(ifp));
+
ieee80211_crypto_attach(&ic);
+ /* some minimal initialization */
+ strncpy(ifp.if_xname, "test_ccmp", sizeof(ifp.if_xname));
+ vap.iv_ic = &ic;
+ vap.iv_ifp = &ifp;
+ if (debug)
+ vap.iv_debug = IEEE80211_MSG_CRYPTO;
+ ieee80211_crypto_vattach(&vap);
+
pass = 0;
total = 0;
- for (i = 0; i < N(tkiptests); i++)
+ for (i = 0; i < nitems(tkiptests); i++)
if (tests & (1<<i)) {
total++;
- pass += runtest(&ic, &tkiptests[i]);
+ pass += runtest(&vap, &tkiptests[i]);
}
printf("%u of %u 802.11i TKIP test vectors passed\n", pass, total);
+
+ ieee80211_crypto_vdetach(&vap);
ieee80211_crypto_detach(&ic);
+
return (pass == total ? 0 : -1);
-#undef N
}
static int
diff --git a/tools/regression/net80211/wep/test_wep.c b/tools/regression/net80211/wep/test_wep.c
index ba6cd46..c156863 100644
--- a/tools/regression/net80211/wep/test_wep.c
+++ b/tools/regression/net80211/wep/test_wep.c
@@ -53,6 +53,7 @@
#include <sys/socket.h>
#include <net/if.h>
+#include <net/if_var.h>
#include <net/if_media.h>
#include <net80211/ieee80211_var.h>
@@ -178,54 +179,55 @@ cmpfail(const void *gen, size_t genlen, const void *ref, size_t reflen)
}
struct wep_ctx_hw { /* for use with h/w support */
- struct ieee80211com *wc_ic; /* for diagnostics */
- u_int32_t wc_iv; /* initial vector for crypto */
+ struct ieee80211vap *wc_vap; /* for diagnostics+statistics */
+ struct ieee80211com *wc_ic;
+ uint32_t wc_iv; /* initial vector for crypto */
};
static int
-runtest(struct ieee80211com *ic, struct ciphertest *t)
+runtest(struct ieee80211vap *vap, struct ciphertest *t)
{
- struct ieee80211_key key;
+ struct ieee80211_key *key = &vap->iv_nw_keys[t->keyix];
struct mbuf *m = NULL;
const struct ieee80211_cipher *cip;
- u_int8_t mac[IEEE80211_ADDR_LEN];
struct wep_ctx_hw *ctx;
+ int hdrlen;
printf("%s: ", t->name);
/*
* Setup key.
*/
- memset(&key, 0, sizeof(key));
- key.wk_flags = IEEE80211_KEY_XMIT | IEEE80211_KEY_RECV;
- key.wk_cipher = &ieee80211_cipher_none;
- if (!ieee80211_crypto_newkey(ic, t->cipher,
- IEEE80211_KEY_XMIT | IEEE80211_KEY_RECV, &key)) {
+ memset(key, 0, sizeof(*key));
+ key->wk_flags = IEEE80211_KEY_XMIT | IEEE80211_KEY_RECV;
+ key->wk_cipher = &ieee80211_cipher_none;
+ if (!ieee80211_crypto_newkey(vap, t->cipher,
+ IEEE80211_KEY_XMIT | IEEE80211_KEY_RECV, key)) {
printf("FAIL: ieee80211_crypto_newkey failed\n");
goto bad;
}
- memcpy(key.wk_key, t->key, t->key_len);
- key.wk_keylen = t->key_len;
- if (!ieee80211_crypto_setkey(ic, &key, mac)) {
+ memcpy(key->wk_key, t->key, t->key_len);
+ key->wk_keylen = t->key_len;
+ if (!ieee80211_crypto_setkey(vap, key)) {
printf("FAIL: ieee80211_crypto_setkey failed\n");
goto bad;
}
- cip = key.wk_cipher;
/*
* Craft frame from plaintext data.
*/
- cip = key.wk_cipher;
+ cip = key->wk_cipher;
m = m_getcl(M_NOWAIT, MT_HEADER, M_PKTHDR);
memcpy(mtod(m, void *), t->encrypted, t->encrypted_len);
m->m_len = t->encrypted_len;
m->m_pkthdr.len = m->m_len;
+ hdrlen = ieee80211_anyhdrsize(mtod(m, void *));
/*
* Decrypt frame.
*/
- if (!cip->ic_decap(&key, m)) {
+ if (!cip->ic_decap(key, m, hdrlen)) {
printf("FAIL: wep decap failed\n");
cmpfail(mtod(m, const void *), m->m_pkthdr.len,
t->plaintext, t->plaintext_len);
@@ -249,9 +251,11 @@ runtest(struct ieee80211com *ic, struct ciphertest *t)
/*
* Encrypt frame.
*/
- ctx = (struct wep_ctx_hw *) key.wk_private;
+ ctx = (struct wep_ctx_hw *) key->wk_private;
+ ctx->wc_vap = vap;
+ ctx->wc_ic = vap->iv_ic;
memcpy(&ctx->wc_iv, t->iv, sizeof(t->iv)); /* for encap/encrypt */
- if (!cip->ic_encap(&key, m, t->keyix<<6)) {
+ if (!cip->ic_encap(key, m)) {
printf("FAIL: wep encap failed\n");
goto bad;
}
@@ -271,13 +275,13 @@ runtest(struct ieee80211com *ic, struct ciphertest *t)
goto bad;
}
m_freem(m);
- ieee80211_crypto_delkey(ic, &key);
+ ieee80211_crypto_delkey(vap, key);
printf("PASS\n");
return 1;
bad:
if (m != NULL)
m_freem(m);
- ieee80211_crypto_delkey(ic, &key);
+ ieee80211_crypto_delkey(vap, key);
return 0;
}
@@ -291,25 +295,38 @@ static int debug = 0;
static int
init_crypto_wep_test(void)
{
-#define N(a) (sizeof(a)/sizeof(a[0]))
struct ieee80211com ic;
+ struct ieee80211vap vap;
+ struct ifnet ifp;
int i, pass, total;
memset(&ic, 0, sizeof(ic));
- if (debug)
- ic.ic_debug = IEEE80211_MSG_CRYPTO;
+ memset(&vap, 0, sizeof(vap));
+ memset(&ifp, 0, sizeof(ifp));
+
ieee80211_crypto_attach(&ic);
+
+ /* some minimal initialization */
+ strncpy(ifp.if_xname, "test_ccmp", sizeof(ifp.if_xname));
+ vap.iv_ic = &ic;
+ vap.iv_ifp = &ifp;
+ if (debug)
+ vap.iv_debug = IEEE80211_MSG_CRYPTO;
+ ieee80211_crypto_vattach(&vap);
+
pass = 0;
total = 0;
- for (i = 0; i < N(weptests); i++)
+ for (i = 0; i < nitems(weptests); i++)
if (tests & (1<<i)) {
total++;
- pass += runtest(&ic, &weptests[i]);
+ pass += runtest(&vap, &weptests[i]);
}
printf("%u of %u 802.11i WEP test vectors passed\n", pass, total);
+
+ ieee80211_crypto_vdetach(&vap);
ieee80211_crypto_detach(&ic);
+
return (pass == total ? 0 : -1);
-#undef N
}
static int
diff --git a/tools/regression/security/open_to_operation/Makefile b/tools/regression/security/open_to_operation/Makefile
index 462626f..fbc0dc7 100644
--- a/tools/regression/security/open_to_operation/Makefile
+++ b/tools/regression/security/open_to_operation/Makefile
@@ -2,6 +2,6 @@
PROG= open_to_operation
MAN=
-#WARNS= 3
+WARNS?= 3
.include <bsd.prog.mk>
diff --git a/tools/regression/security/open_to_operation/open_to_operation.c b/tools/regression/security/open_to_operation/open_to_operation.c
index 38af3c6..0c65019 100644
--- a/tools/regression/security/open_to_operation/open_to_operation.c
+++ b/tools/regression/security/open_to_operation/open_to_operation.c
@@ -169,9 +169,9 @@ try_directory_open(const char *testname, const char *directory,
ok_mode(testname, NULL, mode);
close(dfd);
} else {
- if (expected_errno && expected_errno == expected_errno)
+ if (expected_errno && expected_errno == errno)
ok_mode(testname, NULL, mode);
- else if (expected_errno)
+ else if (expected_errno != 0)
notok_mode(testname, "wrong errno", mode);
else
notok_mode(testname, "failed", mode);
@@ -753,7 +753,8 @@ pwritev_wrapper(int d, const void *buf, size_t nbytes)
static ssize_t
aio_write_wrapper(int d, const void *buf, size_t nbytes)
{
- struct aiocb aiocb, *aiocb_array[1];
+ struct aiocb aiocb;
+ struct aiocb const *aiocb_array[] = { &aiocb };
bzero(&aiocb, sizeof(aiocb));
aiocb.aio_fildes = d;
@@ -839,7 +840,8 @@ preadv_wrapper(int d, void *buf, size_t nbytes)
static ssize_t
aio_read_wrapper(int d, void *buf, size_t nbytes)
{
- struct aiocb aiocb, *aiocb_array[1];
+ struct aiocb aiocb;
+ struct aiocb const *aiocb_array[] = { &aiocb };
bzero(&aiocb, sizeof(aiocb));
aiocb.aio_fildes = d;
@@ -847,7 +849,6 @@ aio_read_wrapper(int d, void *buf, size_t nbytes)
aiocb.aio_nbytes = nbytes;
if (aio_read(&aiocb) < 0)
return (-1);
- aiocb_array[0] = &aiocb;
if (aio_suspend(aiocb_array, 1, NULL) < 0)
return (-1);
return (aio_return(&aiocb));
@@ -1009,12 +1010,8 @@ check_mmap_exec(const char *testname, const char *path, int isdir,
if (isdir)
notok_mode(testname, "mmap dir succeeded",
mode);
- else if ((mode & O_ACCMODE) == O_RDONLY ||
- (mode & O_ACCMODE) == O_RDWR)
- ok_mode(testname, "mmap file succeeded",
- mode);
else
- notok_mode(testname, "mmap file succeeded",
+ ok_mode(testname, "mmap file succeeded",
mode);
(void)munmap(addr, getpagesize());
}
@@ -1069,7 +1066,7 @@ check_mmap_write_private(const char *testname, const char *path, int isdir,
}
int
-main(int argc, char *argv[])
+main(void)
{
char dir_path[PATH_MAX], file_path[PATH_MAX];
int dummy, fd;
@@ -1084,25 +1081,25 @@ main(int argc, char *argv[])
strlcpy(dir_path, "/tmp/open-dir.XXXXXXXXXXX", sizeof(dir_path));
if (mkdtemp(dir_path) == NULL)
- err(-1, "mkdtemp");
+ err(1, "mkdtemp");
if (chmod(dir_path, PERM_DIR) < 0) {
warn("chmod %s", dir_path);
(void)rmdir(dir_path);
- exit(-1);
+ exit(1);
}
strlcpy(file_path, "/tmp/open-file.XXXXXXXXXXX", sizeof(file_path));
fd = mkstemp(file_path);
if (fd < 0) {
warn("mkstemp");
(void)rmdir(dir_path);
- exit(-1);
+ exit(1);
}
close(fd);
if (chmod(file_path, PERM_FILE) < 0) {
warn("chmod %s", file_path);
(void)unlink(file_path);
(void)rmdir(dir_path);
- exit(-1);
+ exit(1);
}
check_directory_open_modes(dir_path, file_modes, file_modes_count);
diff --git a/tools/test/README b/tools/test/README
index 22e8e74..1e4aef8 100644
--- a/tools/test/README
+++ b/tools/test/README
@@ -1,14 +1,24 @@
$FreeBSD$
-This directory is for test programs.
+This directory is for standalone test programs. For the FreeBSD
+Test Suite, which uses Kyua, please see /usr/src/tests/
-A test program is one that will exercise a particular bit of the system
-and try to break it and/or measuring performance on it.
+A test program is one that exercises a particular bit of the system
+and either tries to break it or measures its performance.
Please make a subdir per program, and add a brief description to this file.
+auxinfo Return information on page sizes, CPUs, and OS release date.
devrandom Programs to test /dev/*random.
+hwpmc Automatically trigger every event in hwpmc(4).
+iconv Character set conversion tests.
malloc A program to test and benchmark malloc().
+net A set of generic test programs for networking.
netfibs Programs to test multi-FIB network stacks.
posixshm A program to test POSIX shared memory.
+ppsapi Test 1 Pulse Per Second (1PPS) input for time control.
+pthread_vfork Check that vfork and pthreads work together.
+ptrace Verify that ptrace works with syscalls, vfork etc.
+sort Tests for the sort command, including a full regression.
testfloat Programs to test floating-point implementations
+upsdl Test of mmap functionality.
diff --git a/tools/test/net/Makefile b/tools/test/net/Makefile
new file mode 100644
index 0000000..e4c5259
--- /dev/null
+++ b/tools/test/net/Makefile
@@ -0,0 +1,9 @@
+# $FreeBSD$
+
+PROGS= listen connect
+MAN=
+WARNS?= 6
+
+test: ${PROGS}
+
+.include <bsd.prog.mk>
diff --git a/tools/test/net/connect.c b/tools/test/net/connect.c
new file mode 100644
index 0000000..a1245f1
--- /dev/null
+++ b/tools/test/net/connect.c
@@ -0,0 +1,86 @@
+/*-
+ * Copyright (c) 2015 George V. Neville-Neil
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * $FreeBSD$
+ */
+
+#include <err.h>
+#include <errno.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <strings.h>
+#include <sysexits.h>
+#include <unistd.h>
+
+#include <sys/socket.h>
+#include <sys/types.h>
+#include <netinet/in.h>
+
+#define PORT 6969 /* Default port */
+#define RECV_LIMIT 64 /* When do we move listen to 0? */
+
+void usage(void);
+
+void usage()
+{
+ err(EX_USAGE, "connect [-p port]\n");
+}
+
+int main(int argc, char **argv)
+{
+
+ int ch, cli_sock, count = 0;
+ int port = PORT;
+ struct sockaddr_in remoteaddr;
+
+ while ((ch = getopt(argc, argv, "p:")) != -1) {
+ switch (ch) {
+ case 'p':
+ port = atoi(optarg);
+ break;
+ case 'h':
+ default:
+ usage();
+ }
+ }
+
+ bzero(&remoteaddr, sizeof(remoteaddr));
+ remoteaddr.sin_len = sizeof(remoteaddr);
+ remoteaddr.sin_family = AF_INET;
+ remoteaddr.sin_port = htons(port);
+ remoteaddr.sin_addr.s_addr = INADDR_ANY;
+
+ cli_sock = socket(AF_INET, SOCK_STREAM, 0);
+
+ while ((cli_sock = connect(cli_sock, (struct sockaddr *)&remoteaddr,
+ sizeof(remoteaddr))) >= 0) {
+ count++;
+ close(cli_sock);
+ cli_sock = socket(AF_INET, SOCK_STREAM, 0);
+ }
+
+ printf("Exiting at %d with errno %d\n", count, errno);
+
+}
diff --git a/tools/test/net/listen.c b/tools/test/net/listen.c
new file mode 100644
index 0000000..2c09bb6
--- /dev/null
+++ b/tools/test/net/listen.c
@@ -0,0 +1,106 @@
+/*-
+ * Copyright (c) 2015 George V. Neville-Neil
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * $FreeBSD$
+ */
+
+#include <err.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <strings.h>
+#include <sysexits.h>
+#include <unistd.h>
+
+#include <sys/socket.h>
+#include <sys/types.h>
+#include <netinet/in.h>
+
+#define PORT 6969 /* Default port */
+#define LISTEN 5 /* Default backlog */
+#define RECV_LIMIT 64 /* When do we move listen to 0? */
+
+void usage(void);
+
+void usage()
+{
+ err(EX_USAGE, "listen [-p port] [-l limit]\n");
+}
+
+int main(int argc, char **argv)
+{
+
+ int ch, srv_sock, cli_sock, recvd = 0;
+ int port = PORT;
+ int limit = LISTEN;
+ struct sockaddr_in localaddr;
+
+ while ((ch = getopt(argc, argv, "p:l:")) != -1) {
+ switch (ch) {
+ case 'p':
+ port = atoi(optarg);
+ break;
+ case 'l':
+ limit = atoi(optarg);
+ break;
+ case 'h':
+ default:
+ usage();
+ }
+ }
+
+ bzero(&localaddr, sizeof(localaddr));
+ localaddr.sin_len = sizeof(localaddr);
+ localaddr.sin_family = AF_INET;
+ localaddr.sin_port = htons(port);
+ localaddr.sin_addr.s_addr = INADDR_ANY;
+
+ srv_sock = socket(AF_INET, SOCK_STREAM, 0);
+
+ if (bind(srv_sock, (struct sockaddr *)&localaddr,
+ sizeof(struct sockaddr_in)) < 0)
+ err(EX_OSERR, "Could not bind to INADDR_ANY:%d", port);
+
+ if (listen(srv_sock, limit) < 0)
+ err(EX_OSERR, "Failed to listen with depth of %d\n", limit);
+
+ while (((cli_sock = accept(srv_sock, NULL, NULL)) >= 0)
+ && (recvd < RECV_LIMIT)) {
+ close(cli_sock);
+ recvd++;
+ }
+
+ listen(srv_sock, 0);
+
+ while (((cli_sock = accept(srv_sock, NULL, NULL)) >= 0)
+ && (recvd <= (RECV_LIMIT + limit + 1))) {
+ close(cli_sock);
+ recvd++;
+ }
+
+ if (accept(srv_sock, NULL, NULL) >= 0)
+ printf ("Late connection at %d\n", recvd);
+ else
+ printf("recvd %d\n", recvd);
+}
diff --git a/tools/tools/ioat/Makefile b/tools/tools/ioat/Makefile
index a3f4968..7ea3e6e 100644
--- a/tools/tools/ioat/Makefile
+++ b/tools/tools/ioat/Makefile
@@ -4,5 +4,6 @@ PROG= ioatcontrol
MAN= ioatcontrol.8
CFLAGS+= -I${.CURDIR:H:H:H}/sys/dev/ioat
WARNS?= 6
+LIBADD= util
.include <bsd.prog.mk>
diff --git a/tools/tools/ioat/ioatcontrol.8 b/tools/tools/ioat/ioatcontrol.8
index 762ce14..2306d38 100644
--- a/tools/tools/ioat/ioatcontrol.8
+++ b/tools/tools/ioat/ioatcontrol.8
@@ -24,7 +24,7 @@
.\"
.\" $FreeBSD$
.\"
-.Dd August 24, 2015
+.Dd October 28, 2015
.Dt IOATCONTROL 8
.Os
.Sh NAME
@@ -33,18 +33,101 @@
.Xr ioat 4
.Sh SYNOPSIS
.Nm
+.Op Fl f
+.Op Fl V
.Ar channel_number
-.Ar num_loops
+.Ar num_txns
+.Ar [ bufsize
+.Ar [ chain-len
+.Ar [ duration ] ] ]
+.Nm
+.Fl r
+.Op Fl v
+.Op Fl V
+.Op Fl w
+.Ar channel_number
+.Ar address
+.Ar [ bufsize ]
.Sh DESCRIPTION
.Nm
allows one to issue some number of test operations to the
.Xr ioat 4
driver on a specific hardware channel.
+The arguments are as follows:
+.Bl -tag -width Ds
+.It Fl f
+Test block fill (by default,
+.Nm
+tests copy)
+.It Fl V
+Verify copies/fills for accuracy
+.El
+.Pp
+Alternatively one can use
+.Nm
+.Fl r
+to issue DMA to or from a specific
+.Ar address .
+The arguments in "raw" mode are:
+.Bl -tag -width Ds
+.It Fl v
+.Ar address
+is a kernel virtual address (by default,
+.Ar address
+is assumed to be a physical address)
+.It Fl V
+Dump the resulting hex to syslog
+.It Fl w
+Write to the specified
+.Ar address
+(by default,
+.Nm
+.Fl r
+reads)
+.El
+.Pp
+.Nm
+operates in one of two modes; if the
+.Ar duration
+argument is passed,
+.Nm
+tries to estimate the copy rate in bytes per second by running
+.Ar num_txns
+repeatedly in loop.
+If
+.Ar duration
+is not passed,
+.Nm
+only runs through
+.Ar num_txns
+once and prints the total bytes copied, as well as error information.
.Pp
-Each loop will allocate two chunks of memory, write data patterns to them,
-submit a DMA request to copy one buffer to the other, and compare the contents
-in the callback.
-If the contents are not as expected, an error is reported.
+The
+.Ar bufsize
+argument determines the size of buffers to use for each
+.Fn ioat_copy
+invocation.
+The default is 256 KB.
+In raw mode, the default is 4 KB.
+.Pp
+The
+.Ar chain-len
+argument determines the number of copies to chain together in a single DMA
+transaction.
+The default is 1, and the maximum is currently 4.
+.Pp
+The
+.Ar duration
+argument specifies an approximate time limit for the test, in milliseconds.
+.Pp
+The test will allocate two chunks of memory for each component of each
+transaction's chain.
+It will initialize them with specific data patterns.
+During the test, it submits DMA requests to copy between pairs of buffers.
+If the
+.Fl V
+flag was specified, it will compare the contents in the callback for a copy
+error.
.Sh FILES
.Pa /dev/ioat_test
.Pp
@@ -52,9 +135,14 @@ The interface between
.Nm
and
.Xr ioat 4 .
-.Nm
+.Xr ioat 4
exposes it with
.Cd hw.ioat.enable_ioat_test=1 .
+.Sh DIAGNOSTICS
+The wait channel
+.Va test_submit
+indicates that the test code has enqueued all requested transactions and is
+waiting on the IOAT hardware to complete one before issuing another operation.
.Sh SEE ALSO
.Xr ioat 4
.Sh HISTORY
@@ -69,7 +157,8 @@ driver and
.Nm
tool were developed by
.An \&Jim Harris Aq Mt jimharris@FreeBSD.org ,
+.An \&Carl Delsey Aq Mt carl.r.delsey@intel.com ,
and
-.An \&Carl Delsey Aq Mt carl.r.delsey@intel.com .
+.An \&Conrad Meyer Aq Mt cem@FreeBSD.org .
This manual page was written by
.An \&Conrad Meyer Aq Mt cem@FreeBSD.org .
diff --git a/tools/tools/ioat/ioatcontrol.c b/tools/tools/ioat/ioatcontrol.c
index 7cfb816..90255e7 100644
--- a/tools/tools/ioat/ioatcontrol.c
+++ b/tools/tools/ioat/ioatcontrol.c
@@ -28,34 +28,154 @@
__FBSDID("$FreeBSD$");
#include <sys/ioctl.h>
+#include <sys/queue.h>
#include <fcntl.h>
+#include <stdbool.h>
#include <stdio.h>
#include <stdint.h>
#include <stdlib.h>
#include <sysexits.h>
#include <unistd.h>
+#include <libutil.h>
+
#include "ioat_test.h"
+static int prettyprint(struct ioat_test *);
+
+static void
+usage(void)
+{
+
+ printf("Usage: %s [-fV] <channel #> <txns> [<bufsize> "
+ "[<chain-len> [duration]]]\n", getprogname());
+ printf(" %s -r [-vV] <channel #> <addr> [<bufsize>]\n",
+ getprogname());
+ exit(EX_USAGE);
+}
+
+static void
+main_raw(struct ioat_test *t, int argc, char **argv)
+{
+ int fd;
+
+ /* Raw DMA defaults */
+ t->testkind = IOAT_TEST_RAW_DMA;
+ t->transactions = 1;
+ t->chain_depth = 1;
+ t->buffer_size = 4 * 1024;
+
+ t->raw_target = strtoull(argv[1], NULL, 0);
+ if (t->raw_target == 0) {
+ printf("Target shoudln't be NULL\n");
+ exit(EX_USAGE);
+ }
+
+ if (argc >= 3) {
+ t->buffer_size = atoi(argv[2]);
+ if (t->buffer_size == 0) {
+ printf("Buffer size must be greater than zero\n");
+ exit(EX_USAGE);
+ }
+ }
+
+ fd = open("/dev/ioat_test", O_RDWR);
+ if (fd < 0) {
+ printf("Cannot open /dev/ioat_test\n");
+ exit(EX_UNAVAILABLE);
+ }
+
+ (void)ioctl(fd, IOAT_DMATEST, t);
+ close(fd);
+
+ exit(prettyprint(t));
+}
+
int
main(int argc, char **argv)
{
struct ioat_test t;
- int fd;
+ int fd, ch;
+ bool fflag, rflag;
- if (argc < 3) {
- printf("Usage: %s <channel #> <num_loops>\n", argv[0]);
- return (EX_USAGE);
+ while ((ch = getopt(argc, argv, "rfvVw")) != -1) {
+ switch (ch) {
+ case 'f':
+ fflag = true;
+ break;
+ case 'r':
+ rflag = true;
+ break;
+ case 'v':
+ t.raw_is_virtual = true;
+ break;
+ case 'V':
+ t.verify = true;
+ break;
+ case 'w':
+ t.raw_write = true;
+ break;
+ default:
+ usage();
+ }
+ }
+ argc -= optind;
+ argv += optind;
+
+ if (argc < 2)
+ usage();
+
+ if (rflag && fflag) {
+ printf("Invalid: -r and -f\n");
+ usage();
}
- t.channel_index = atoi(argv[1]);
+ /* Defaults for optional args */
+ t.buffer_size = 256 * 1024;
+ t.chain_depth = 2;
+ t.duration = 0;
+ t.testkind = IOAT_TEST_DMA;
+
+ if (fflag)
+ t.testkind = IOAT_TEST_FILL;
+
+ t.channel_index = atoi(argv[0]);
if (t.channel_index > 8) {
printf("Channel number must be between 0 and 7.\n");
return (EX_USAGE);
}
- t.num_loops = atoi(argv[2]);
+ if (rflag) {
+ main_raw(&t, argc, argv);
+ return (EX_OK);
+ }
+
+ t.transactions = atoi(argv[1]);
+
+ if (argc >= 3) {
+ t.buffer_size = atoi(argv[2]);
+ if (t.buffer_size == 0) {
+ printf("Buffer size must be greater than zero\n");
+ return (EX_USAGE);
+ }
+ }
+
+ if (argc >= 4) {
+ t.chain_depth = atoi(argv[3]);
+ if (t.chain_depth < 1) {
+ printf("Chain length must be greater than zero\n");
+ return (EX_USAGE);
+ }
+ }
+
+ if (argc >= 5) {
+ t.duration = atoi(argv[4]);
+ if (t.duration < 1) {
+ printf("Duration must be greater than zero\n");
+ return (EX_USAGE);
+ }
+ }
fd = open("/dev/ioat_test", O_RDWR);
if (fd < 0) {
@@ -66,5 +186,44 @@ main(int argc, char **argv)
(void)ioctl(fd, IOAT_DMATEST, &t);
close(fd);
- return (t.status);
+ return (prettyprint(&t));
+}
+
+static int
+prettyprint(struct ioat_test *t)
+{
+ char bps[10], bytesh[10];
+ uintmax_t bytes;
+
+ if (t->status[IOAT_TEST_NO_DMA_ENGINE] != 0 ||
+ t->status[IOAT_TEST_NO_MEMORY] != 0 ||
+ t->status[IOAT_TEST_MISCOMPARE] != 0) {
+ printf("Errors:\n");
+ if (t->status[IOAT_TEST_NO_DMA_ENGINE] != 0)
+ printf("\tNo DMA engine present: %u\n",
+ (unsigned)t->status[IOAT_TEST_NO_DMA_ENGINE]);
+ if (t->status[IOAT_TEST_NO_MEMORY] != 0)
+ printf("\tOut of memory: %u\n",
+ (unsigned)t->status[IOAT_TEST_NO_MEMORY]);
+ if (t->status[IOAT_TEST_MISCOMPARE] != 0)
+ printf("\tMiscompares: %u\n",
+ (unsigned)t->status[IOAT_TEST_MISCOMPARE]);
+ }
+
+ printf("Processed %u txns\n", (unsigned)t->status[IOAT_TEST_OK] /
+ t->chain_depth);
+ bytes = (uintmax_t)t->buffer_size * t->status[IOAT_TEST_OK];
+
+ humanize_number(bytesh, sizeof(bytesh), (int64_t)bytes, "B",
+ HN_AUTOSCALE, HN_DECIMAL);
+ if (t->duration) {
+ humanize_number(bps, sizeof(bps),
+ (int64_t)1000 * bytes / t->duration, "B/s", HN_AUTOSCALE,
+ HN_DECIMAL);
+ printf("%ju (%s) copied in %u ms (%s)\n", bytes, bytesh,
+ (unsigned)t->duration, bps);
+ } else
+ printf("%ju (%s) copied\n", bytes, bytesh);
+
+ return (EX_OK);
}
diff --git a/usr.bin/Makefile b/usr.bin/Makefile
index d120bc3..750c2ab 100644
--- a/usr.bin/Makefile
+++ b/usr.bin/Makefile
@@ -208,7 +208,11 @@ SUBDIR.${MK_GAMES}+= number
SUBDIR.${MK_GAMES}+= pom
SUBDIR.${MK_GAMES}+= primes
SUBDIR.${MK_GAMES}+= random
-SUBDIR.${MK_GPL_DTC}+= dtc
+.if ${MK_GPL_DTC} != "yes"
+.if ${COMPILER_FEATURES:Mc++11}
+SUBDIR+= dtc
+.endif
+.endif
SUBDIR.${MK_GROFF}+= vgrind
SUBDIR.${MK_HESIOD}+= hesinfo
SUBDIR.${MK_ICONV}+= iconv
diff --git a/usr.bin/ar/write.c b/usr.bin/ar/write.c
index 10b912e..f78fbda 100644
--- a/usr.bin/ar/write.c
+++ b/usr.bin/ar/write.c
@@ -664,6 +664,9 @@ write_objs(struct bsdar *bsdar)
if ((bsdar->s_cnt != 0 && !(bsdar->options & AR_SS)) ||
bsdar->options & AR_S) {
entry = archive_entry_new();
+ if (entry == NULL)
+ bsdar_errc(bsdar, EX_SOFTWARE, 0,
+ "archive_entry_new failed");
archive_entry_copy_pathname(entry, "/");
if ((bsdar->options & AR_D) == 0)
archive_entry_set_mtime(entry, time(NULL), 0);
@@ -681,6 +684,9 @@ write_objs(struct bsdar *bsdar)
/* write the archive string table, if any. */
if (bsdar->as != NULL) {
entry = archive_entry_new();
+ if (entry == NULL)
+ bsdar_errc(bsdar, EX_SOFTWARE, 0,
+ "archive_entry_new failed");
archive_entry_copy_pathname(entry, "//");
archive_entry_set_size(entry, bsdar->as_sz);
AC(archive_write_header(a, entry));
@@ -691,6 +697,9 @@ write_objs(struct bsdar *bsdar)
/* write normal members. */
TAILQ_FOREACH(obj, &bsdar->v_obj, objs) {
entry = archive_entry_new();
+ if (entry == NULL)
+ bsdar_errc(bsdar, EX_SOFTWARE, 0,
+ "archive_entry_new failed");
archive_entry_copy_pathname(entry, obj->name);
archive_entry_set_uid(entry, obj->uid);
archive_entry_set_gid(entry, obj->gid);
diff --git a/usr.bin/bmake/Makefile b/usr.bin/bmake/Makefile
index 4f83731..e12072d 100644
--- a/usr.bin/bmake/Makefile
+++ b/usr.bin/bmake/Makefile
@@ -14,10 +14,10 @@ CFLAGS+= -I${.CURDIR}
CLEANDIRS+= FreeBSD
CLEANFILES+= bootstrap
-# $Id: Makefile,v 1.39 2015/06/07 15:54:37 sjg Exp $
+# $Id: Makefile,v 1.44 2015/10/20 21:41:40 sjg Exp $
# Base version on src date
-MAKE_VERSION= 20150606
+MAKE_VERSION= 20151020
PROG?= ${.CURDIR:T}
@@ -34,6 +34,7 @@ SRCS= \
make.c \
make_malloc.c \
meta.c \
+ metachar.c \
parse.c \
str.c \
strlist.c \
diff --git a/usr.bin/calendar/parsedata.c b/usr.bin/calendar/parsedata.c
index 4586973..1a19164 100644
--- a/usr.bin/calendar/parsedata.c
+++ b/usr.bin/calendar/parsedata.c
@@ -274,7 +274,7 @@ determinestyle(char *date, int *flags,
/* If both the month and date are specified as numbers */
if (isonlydigits(p1, 1) && isonlydigits(p2, 0)) {
- /* Now who wants to be this ambigious? :-( */
+ /* Now who wants to be this ambiguous? :-( */
int m, d;
if (strchr(p2, '*') != NULL)
diff --git a/usr.bin/dpv/dpv.1 b/usr.bin/dpv/dpv.1
index d277446..5a64af9 100644
--- a/usr.bin/dpv/dpv.1
+++ b/usr.bin/dpv/dpv.1
@@ -1,4 +1,4 @@
-.\" Copyright (c) 2013-2014 Devin Teske
+.\" Copyright (c) 2013-2015 Devin Teske
.\" All rights reserved.
.\"
.\" Redistribution and use in source and binary forms, with or without
@@ -24,7 +24,7 @@
.\"
.\" $FreeBSD$
.\"
-.Dd Sep 7, 2014
+.Dd Oct 22, 2015
.Dt DPV 1
.Os
.Sh NAME
@@ -366,7 +366,7 @@ dpv -o /dev/md42 < /dev/zero
A
.Nm
utility first appeared in
-.Fx 11.0 .
+.Fx 10.2 .
.Sh AUTHORS
.An Devin Teske Aq dteske@FreeBSD.org
.Sh BUGS
diff --git a/usr.bin/dtc/HACKING b/usr.bin/dtc/HACKING
index 4fb46da..9acaeef 100644
--- a/usr.bin/dtc/HACKING
+++ b/usr.bin/dtc/HACKING
@@ -21,19 +21,17 @@ welcome.
C++11
-----
-This project currently aims to compile with g++ 4.2.1 and so doesn't make any
-use of C++11 features. It would be a good idea to relax this restriction once
-clang is the default compiler for ARM, MIPS and PowerPC.
-
-This code makes use of a lot of iterator loops, which would be cleaner using
-the new syntax in C++11. It also explicitly deletes a lot of objects held in
-collections in destructors that have these collections as their members. This
-could be simplified by using `shared_ptr`.
-
-The code does make use of `static_assert()`, but uses a macro in utility.hh to
-remove these if they are not supported. The FreeBSD standard headers also
-define a compatibility macro the implements static asserts in terms of an array
-with 1 element on success and -1 elements on failure.
+This project uses C++11, as the goal for FreeBSD 11 is to require C/C++11 as a
+minimum, either from clang or an external toolchain. In particular, it uses
+`std::unique_ptr` extensively for memory management within the tree. Unique
+pointers are also used in several other places to track ownership.
+
+Most iterator loops use the new loop syntax and the `auto` type for type
+deduction. Range-based `for` loops generally improve the readability of the
+code, though `auto` should only be used in places where the type can be deduced
+as easily by the reader as by the compiler.
+
+The code also makes use of `static_assert()` to track compile-time invariants.
Adding New Checks
-----------------
diff --git a/usr.bin/dtc/Makefile b/usr.bin/dtc/Makefile
index 78973fc..a6c722a 100644
--- a/usr.bin/dtc/Makefile
+++ b/usr.bin/dtc/Makefile
@@ -6,6 +6,8 @@ MAN= dtc.1
WARNS?= 3
+CXXFLAGS+= -std=c++11
+
NO_SHARED?=NO
.include <bsd.prog.mk>
diff --git a/usr.bin/dtc/checking.cc b/usr.bin/dtc/checking.cc
index 9c7f43c..70731ce 100644
--- a/usr.bin/dtc/checking.cc
+++ b/usr.bin/dtc/checking.cc
@@ -51,7 +51,7 @@ namespace
struct address_cells_checker : public checker
{
address_cells_checker(const char *name) : checker(name) {}
- virtual bool check_node(device_tree *tree, node *n)
+ virtual bool check_node(device_tree *tree, const node_ptr &n)
{
// If this has no children, it trivially meets the
// conditions.
@@ -61,8 +61,7 @@ namespace
}
bool found_address = false;
bool found_size = false;
- for (node::property_iterator i=n->property_begin(),
- e=n->property_end() ; i!=e ; ++i)
+ for (auto i=n->property_begin(), e=n->property_end() ; i!=e ; ++i)
{
if (!found_address)
{
@@ -91,7 +90,7 @@ namespace
} // anonymous namespace
bool
-checker::visit_node(device_tree *tree, node *n)
+checker::visit_node(device_tree *tree, const node_ptr &n)
{
path.push_back(std::make_pair(n->name, n->unit_address));
// Check this node
@@ -100,8 +99,7 @@ checker::visit_node(device_tree *tree, node *n)
return false;
}
// Now check its properties
- for (node::property_iterator i=n->property_begin(), e=n->property_end()
- ; i!=e ; ++i)
+ for (auto i=n->property_begin(), e=n->property_end() ; i!=e ; ++i)
{
if (!check_property(tree, n, *i))
{
@@ -125,22 +123,21 @@ void
checker::report_error(const char *errmsg)
{
fprintf(stderr, "Error: %s, while checking node: ", errmsg);
- for (device_tree::node_path::iterator p=path.begin()+1, pe=path.end() ;
- p!=pe ; ++p)
+ for (auto &p : path)
{
putc('/', stderr);
- p->first.dump();
- if (!(p->second.empty()))
+ p.first.dump();
+ if (!(p.second.empty()))
{
putc('@', stderr);
- p->second.dump();
+ p.second.dump();
}
}
fprintf(stderr, " [-W%s]\n", checker_name);
}
bool
-property_checker::check_property(device_tree *tree, node *n, property *p)
+property_checker::check_property(device_tree *tree, const node_ptr &n, property_ptr p)
{
if (p->get_key() == key)
{
@@ -154,7 +151,7 @@ property_checker::check_property(device_tree *tree, node *n, property *p)
}
bool
-property_size_checker::check(device_tree *tree, node *n, property *p)
+property_size_checker::check(device_tree *tree, const node_ptr &n, property_ptr p)
{
uint32_t psize = 0;
for (property::value_iterator i=p->begin(),e=p->end() ; i!=e ; ++i)
@@ -216,10 +213,9 @@ bool
check_manager::run_checks(device_tree *tree, bool keep_going)
{
bool success = true;
- for (std::map<string, checker*>::iterator i=checkers.begin(),
- e=checkers.end() ; i!=e ; ++i)
+ for (auto &i : checkers)
{
- success &= i->second->check_tree(tree);
+ success &= i.second->check_tree(tree);
if (!(success || keep_going))
{
break;
@@ -231,7 +227,7 @@ check_manager::run_checks(device_tree *tree, bool keep_going)
bool
check_manager::disable_checker(string name)
{
- std::map<string, checker*>::iterator checker = checkers.find(name);
+ auto checker = checkers.find(name);
if (checker != checkers.end())
{
disabled_checkers.insert(std::make_pair(name,
@@ -245,8 +241,7 @@ check_manager::disable_checker(string name)
bool
check_manager::enable_checker(string name)
{
- std::map<string, checker*>::iterator checker =
- disabled_checkers.find(name);
+ auto checker = disabled_checkers.find(name);
if (checker != disabled_checkers.end())
{
checkers.insert(std::make_pair(name, checker->second));
diff --git a/usr.bin/dtc/checking.hh b/usr.bin/dtc/checking.hh
index 0de1d60..34d28c3 100644
--- a/usr.bin/dtc/checking.hh
+++ b/usr.bin/dtc/checking.hh
@@ -65,7 +65,7 @@ class checker
* Visits each node, calling the checker functions on properties and
* nodes.
*/
- bool visit_node(device_tree *tree, node *n);
+ bool visit_node(device_tree *tree, const node_ptr &n);
protected:
/**
* Prints the error message, along with the path to the node that
@@ -86,7 +86,7 @@ class checker
* Method for checking that a node is valid. The root class version
* does nothing, subclasses should override this.
*/
- virtual bool check_node(device_tree *tree, node *n)
+ virtual bool check_node(device_tree *tree, const node_ptr &n)
{
return true;
}
@@ -94,7 +94,7 @@ class checker
* Method for checking that a property is valid. The root class
* version does nothing, subclasses should override this.
*/
- virtual bool check_property(device_tree *tree, node *n, property *p)
+ virtual bool check_property(device_tree *tree, const node_ptr &n, property_ptr p)
{
return true;
}
@@ -124,7 +124,7 @@ class property_checker : public checker
* Implementation of the generic property-checking method that checks
* for a property with the name specified in the constructor
*/
- virtual bool check_property(device_tree *tree, node *n, property *p);
+ virtual bool check_property(device_tree *tree, const node_ptr &n, property_ptr p);
/**
* Constructor. Takes the name of the checker and the name of the
* property to check.
@@ -134,7 +134,7 @@ class property_checker : public checker
/**
* The check method, which subclasses should implement.
*/
- virtual bool check(device_tree *tree, node *n, property *p) = 0;
+ virtual bool check(device_tree *tree, const node_ptr &n, property_ptr p) = 0;
};
/**
@@ -149,7 +149,7 @@ struct property_type_checker : public property_checker
*/
property_type_checker(const char* name, string property_name) :
property_checker(name, property_name) {}
- virtual bool check(device_tree *tree, node *n, property *p) = 0;
+ virtual bool check(device_tree *tree, const node_ptr &n, property_ptr p) = 0;
};
/**
@@ -160,7 +160,7 @@ struct property_type_checker <property_value::EMPTY> : public property_checker
{
property_type_checker(const char* name, string property_name) :
property_checker(name, property_name) {}
- virtual bool check(device_tree *tree, node *n, property *p)
+ virtual bool check(device_tree *tree, const node_ptr &n, property_ptr p)
{
return p->begin() == p->end();
}
@@ -175,7 +175,7 @@ struct property_type_checker <property_value::STRING> : public property_checker
{
property_type_checker(const char* name, string property_name) :
property_checker(name, property_name) {}
- virtual bool check(device_tree *tree, node *n, property *p)
+ virtual bool check(device_tree *tree, const node_ptr &n, property_ptr p)
{
return (p->begin() + 1 == p->end()) && p->begin()->is_string();
}
@@ -190,7 +190,7 @@ struct property_type_checker <property_value::STRING_LIST> :
{
property_type_checker(const char* name, string property_name) :
property_checker(name, property_name) {}
- virtual bool check(device_tree *tree, node *n, property *p)
+ virtual bool check(device_tree *tree, const node_ptr &n, property_ptr p)
{
for (property::value_iterator i=p->begin(),e=p->end() ; i!=e ;
++i)
@@ -213,7 +213,7 @@ struct property_type_checker <property_value::PHANDLE> : public property_checker
{
property_type_checker(const char* name, string property_name) :
property_checker(name, property_name) {}
- virtual bool check(device_tree *tree, node *n, property *p)
+ virtual bool check(device_tree *tree, const node_ptr &n, property_ptr p)
{
return (p->begin() + 1 == p->end()) &&
(tree->referenced_node(*p->begin()) != 0);
@@ -239,7 +239,7 @@ struct property_size_checker : public property_checker
/**
* Check, validates that the property has the correct size.
*/
- virtual bool check(device_tree *tree, node *n, property *p);
+ virtual bool check(device_tree *tree, const node_ptr &n, property_ptr p);
};
@@ -254,12 +254,12 @@ class check_manager
* disabling checkers from the command line. When this manager runs,
* it will only run the checkers from this map.
*/
- std::map<string, checker*> checkers;
+ std::unordered_map<string, checker*> checkers;
/**
* The disabled checkers. Moving checkers to this list disables them,
* but allows them to be easily moved back.
*/
- std::map<string, checker*> disabled_checkers;
+ std::unordered_map<string, checker*> disabled_checkers;
/**
* Helper function for adding a property value checker.
*/
diff --git a/usr.bin/dtc/dtb.cc b/usr.bin/dtc/dtb.cc
index 986ef6f..bbcf76d 100644
--- a/usr.bin/dtc/dtb.cc
+++ b/usr.bin/dtc/dtb.cc
@@ -44,9 +44,9 @@ namespace dtb
void output_writer::write_data(byte_buffer b)
{
- for (byte_buffer::iterator i=b.begin(), e=b.end(); i!=e ; i++)
+ for (auto i : b)
{
- write_data(*i);
+ write_data(i);
}
}
@@ -277,7 +277,7 @@ header::read_dtb(input_buffer &input)
uint32_t
string_table::add_string(string str)
{
- std::map<string, uint32_t>::iterator old = string_offsets.find(str);
+ auto old = string_offsets.find(str);
if (old == string_offsets.end())
{
uint32_t start = size;
@@ -298,10 +298,9 @@ string_table::write(dtb::output_writer &writer)
{
writer.write_comment(string("Strings table."));
writer.write_label(string("dt_strings_start"));
- for (std::vector<string>::iterator i=strings.begin(), e=strings.end() ;
- i!=e ; ++i)
+ for (auto &i : strings)
{
- writer.write_string(*i);
+ writer.write_string(i);
}
writer.write_label(string("dt_strings_end"));
}
diff --git a/usr.bin/dtc/dtb.hh b/usr.bin/dtc/dtb.hh
index 2c5f39e..a246e96 100644
--- a/usr.bin/dtc/dtb.hh
+++ b/usr.bin/dtc/dtb.hh
@@ -224,7 +224,7 @@ class asm_writer : public output_writer
uint32_t bytes_written;
/**
- * Writes a C string directly to the ouput as-is. This is mainly used
+ * Writes a C string directly to the output as-is. This is mainly used
* for writing directives.
*/
void write_string(const char *c);
diff --git a/usr.bin/dtc/dtc.cc b/usr.bin/dtc/dtc.cc
index b7d5292..269c90e 100644
--- a/usr.bin/dtc/dtc.cc
+++ b/usr.bin/dtc/dtc.cc
@@ -67,7 +67,7 @@ static void usage(const char* argv0)
"[-O output_format]\n"
"\t\t[-o output_file] [-R entries] [-S bytes] [-p bytes]"
"[-V blob_version]\n"
- "\t\t-W [no-]checker_name] input_file\n", basename(argv0));
+ "\t\t-W [no-]checker_name] input_file\n", basename((char*)argv0));
}
/**
diff --git a/usr.bin/dtc/fdt.cc b/usr.bin/dtc/fdt.cc
index 082ebd9..3908e0e 100644
--- a/usr.bin/dtc/fdt.cc
+++ b/usr.bin/dtc/fdt.cc
@@ -33,8 +33,10 @@
#define __STDC_LIMIT_MACROS 1
#include "fdt.hh"
+#include "dtb.hh"
#include <algorithm>
+
#include <ctype.h>
#include <fcntl.h>
#include <inttypes.h>
@@ -44,7 +46,7 @@
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
-#include "dtb.hh"
+#include <errno.h>
namespace dtc
{
@@ -126,13 +128,25 @@ property_value::resolve_type()
bool is_all_printable = true;
int nuls = 0;
int bytes = 0;
- for (byte_buffer::iterator i=byte_data.begin(), e=byte_data.end()-1; i<e ; i++)
+ bool lastWasNull = false;
+ for (auto i : byte_data)
{
bytes++;
- is_all_printable &= (*i == '\0') || isprint(*i);
- if (*i == '\0')
+ is_all_printable &= (i == '\0') || isprint(i);
+ if (i == '\0')
{
+ // If there are two nulls in a row, then we're probably binary.
+ if (lastWasNull)
+ {
+ type = BINARY;
+ return;
+ }
nuls++;
+ lastWasNull = true;
+ }
+ else
+ {
+ lastWasNull = false;
}
if (!is_all_printable)
{
@@ -142,7 +156,7 @@ property_value::resolve_type()
if ((is_all_printable && (bytes > nuls)) || bytes == 0)
{
type = STRING;
- if (nuls > 0)
+ if (nuls > 1)
{
type = STRING_LIST;
}
@@ -162,15 +176,25 @@ property_value::write_as_string(FILE *file)
}
else
{
- for (byte_buffer::iterator i=byte_data.begin(), e=byte_data.end()-1; i!=e ; ++i)
+ bool hasNull = (byte_data.back() == '\0');
+ // Remove trailing null bytes from the string before printing as dts.
+ if (hasNull)
+ {
+ byte_data.pop_back();
+ }
+ for (auto i : byte_data)
{
// FIXME Escape tabs, newlines, and so on.
- if (*i == '\0')
+ if (i == '\0')
{
fputs("\", \"", file);
continue;
}
- putc(*i, file);
+ putc(i, file);
+ }
+ if (hasNull)
+ {
+ byte_data.push_back('\0');
}
}
putc('"', file);
@@ -181,7 +205,7 @@ property_value::write_as_cells(FILE *file)
{
putc('<', file);
assert((byte_data.size() % 4) == 0);
- for (byte_buffer::iterator i=byte_data.begin(), e=byte_data.end(); i!=e ; ++i)
+ for (auto i=byte_data.begin(), e=byte_data.end(); i!=e ; ++i)
{
uint32_t v = 0;
v = (v << 8) | *i;
@@ -204,7 +228,7 @@ void
property_value::write_as_bytes(FILE *file)
{
putc('[', file);
- for (byte_buffer::iterator i=byte_data.begin(), e=byte_data.end(); i!=e ; i++)
+ for (auto i=byte_data.begin(), e=byte_data.end(); i!=e ; i++)
{
fprintf(file, "%02hhx", *i);
if (i+1 != e)
@@ -238,8 +262,26 @@ property::parse_string(input_buffer &input)
}
void
-property::parse_cells(input_buffer &input)
+property::parse_cells(input_buffer &input, int cell_size)
{
+ unsigned long long cell_max;
+ switch (cell_size)
+ {
+ case 8:
+ cell_max = UINT8_MAX;
+ break;
+ case 16:
+ cell_max = UINT16_MAX;
+ break;
+ case 32:
+ cell_max = UINT32_MAX;
+ break;
+ case 64:
+ cell_max = UINT64_MAX;
+ break;
+ default:
+ assert(0 && "Invalid cell size!");
+ }
assert(input[0] == '<');
++input;
property_value v;
@@ -251,6 +293,12 @@ property::parse_cells(input_buffer &input)
// referenced node
if (input.consume('&'))
{
+ if (cell_size != 32)
+ {
+ input.parse_error("reference only permitted in 32-bit arrays");
+ valid = false;
+ return;
+ }
input.next_token();
// FIXME: We should support full paths here, but we
// don't.
@@ -278,20 +326,37 @@ property::parse_cells(input_buffer &input)
{
//FIXME: We should support labels in the middle
//of these, but we don't.
- long long val;
+ unsigned long long val;
if (!input.consume_integer(val))
{
input.parse_error("Expected numbers in array of cells");
valid = false;
return;
}
- if ((val < 0) || (val > UINT32_MAX))
+ if (val > cell_max)
{
+ fprintf(stderr, "%lld > %lld\n", val, cell_max);
input.parse_error("Value out of range");
valid = false;
return;
}
- push_big_endian(v.byte_data, (uint32_t)val);
+ switch (cell_size)
+ {
+ case 8:
+ v.byte_data.push_back(val);
+ break;
+ case 16:
+ push_big_endian(v.byte_data, (uint16_t)val);
+ break;
+ case 32:
+ push_big_endian(v.byte_data, (uint32_t)val);
+ break;
+ case 64:
+ push_big_endian(v.byte_data, (uint64_t)val);
+ break;
+ default:
+ assert(0 && "Invalid cell size!");
+ }
input.next_token();
}
}
@@ -432,11 +497,35 @@ property::property(input_buffer &input,
input.parse_error("Invalid property value.");
valid = false;
return;
+ case '/':
+ {
+ unsigned long long bits = 0;
+ valid = input.consume("/bits/");
+ input.next_token();
+ valid &= input.consume_integer(bits);
+ if ((bits != 8) &&
+ (bits != 16) &&
+ (bits != 32) &&
+ (bits != 64)) {
+ input.parse_error("Invalid size for elements");
+ valid = false;
+ }
+ if (!valid) return;
+ input.next_token();
+ if (input[0] != '<')
+ {
+ input.parse_error("/bits/ directive is only valid on arrays");
+ valid = false;
+ return;
+ }
+ parse_cells(input, bits);
+ break;
+ }
case '"':
parse_string(input);
break;
case '<':
- parse_cells(input);
+ parse_cells(input, 32);
break;
case '[':
parse_bytes(input);
@@ -458,27 +547,25 @@ property::property(input_buffer &input,
}
}
-property*
+property_ptr
property::parse_dtb(input_buffer &structs, input_buffer &strings)
{
- property *p = new property(structs, strings);
+ property_ptr p(new property(structs, strings));
if (!p->valid)
{
- delete p;
- p = 0;
+ p = nullptr;
}
return p;
}
-property*
+property_ptr
property::parse(input_buffer &input, string key, string label,
bool semicolonTerminated, define_map *defines)
{
- property *p = new property(input, key, label, semicolonTerminated, defines);
+ property_ptr p(new property(input, key, label, semicolonTerminated, defines));
if (!p->valid)
{
- delete p;
- p = 0;
+ p = nullptr;
}
return p;
}
@@ -498,6 +585,35 @@ property::write(dtb::output_writer &writer, dtb::string_table &strings)
writer.write_data(value_buffer);
}
+bool
+property_value::try_to_merge(property_value &other)
+{
+ resolve_type();
+ switch (type)
+ {
+ case UNKNOWN:
+ __builtin_unreachable();
+ assert(0);
+ return false;
+ case EMPTY:
+ *this = other;
+ case STRING:
+ case STRING_LIST:
+ case CROSS_REFERENCE:
+ return false;
+ case PHANDLE:
+ case BINARY:
+ if (other.type == PHANDLE || other.type == BINARY)
+ {
+ type = BINARY;
+ byte_data.insert(byte_data.end(), other.byte_data.begin(),
+ other.byte_data.end());
+ return true;
+ }
+ }
+ return false;
+}
+
void
property::write_dts(FILE *file, int indent)
{
@@ -516,8 +632,23 @@ property::write_dts(FILE *file, int indent)
}
if (!values.empty())
{
+ std::vector<property_value> *vals = &values;
+ std::vector<property_value> v;
+ // If we've got multiple values then try to merge them all together.
+ if (values.size() > 1)
+ {
+ vals = &v;
+ v.push_back(values.front());
+ for (auto i=(++begin()), e=end() ; i!=e ; ++i)
+ {
+ if (!v.back().try_to_merge(*i))
+ {
+ v.push_back(*i);
+ }
+ }
+ }
fputs(" = ", file);
- for (value_iterator i=begin(), e=end() ; i!=e ; ++i)
+ for (auto i=vals->begin(), e=vals->end() ; i!=e ; ++i)
{
i->write_dts(file);
if (i+1 != e)
@@ -590,13 +721,13 @@ node::node(input_buffer &structs, input_buffer &strings) : valid(true)
// Child node, parse it.
case dtb::FDT_BEGIN_NODE:
{
- node *child = node::parse_dtb(structs, strings);
+ node_ptr child = node::parse_dtb(structs, strings);
if (child == 0)
{
valid = false;
return;
}
- children.push_back(child);
+ children.push_back(std::move(child));
break;
}
// End of this node, no errors.
@@ -605,7 +736,7 @@ node::node(input_buffer &structs, input_buffer &strings) : valid(true)
// Property, parse it.
case dtb::FDT_PROP:
{
- property *prop = property::parse_dtb(structs, strings);
+ property_ptr prop = property::parse_dtb(structs, strings);
if (prop == 0)
{
valid = false;
@@ -667,7 +798,7 @@ node::node(input_buffer &input, string n, string l, string a, define_map *define
// If we're parsing a property, then we must actually do that.
if (input.consume('='))
{
- property *p= property::parse(input, child_name,
+ property_ptr p = property::parse(input, child_name,
child_label, true, defines);
if (p == 0)
{
@@ -680,11 +811,11 @@ node::node(input_buffer &input, string n, string l, string a, define_map *define
}
else if (!is_property && input[0] == ('{'))
{
- node *child = node::parse(input, child_name,
+ node_ptr child = node::parse(input, child_name,
child_label, child_address, defines);
if (child)
{
- children.push_back(child);
+ children.push_back(std::move(child));
}
else
{
@@ -693,7 +824,7 @@ node::node(input_buffer &input, string n, string l, string a, define_map *define
}
else if (input.consume(';'))
{
- properties.push_back(new property(child_name, child_label));
+ properties.push_back(property_ptr(new property(child_name, child_label)));
}
else
{
@@ -706,13 +837,13 @@ node::node(input_buffer &input, string n, string l, string a, define_map *define
}
bool
-node::cmp_properties(property *p1, property *p2)
+node::cmp_properties(property_ptr &p1, property_ptr &p2)
{
return p1->get_key() < p2->get_key();
}
bool
-node::cmp_children(node *c1, node *c2)
+node::cmp_children(node_ptr &c1, node_ptr &c2)
{
if (c1->name == c2->name)
{
@@ -732,63 +863,47 @@ node::sort()
}
}
-node*
+node_ptr
node::parse(input_buffer &input,
string name,
string label,
string address,
define_map *defines)
{
- node *n = new node(input, name, label, address, defines);
+ node_ptr n(new node(input, name, label, address, defines));
if (!n->valid)
{
- delete n;
n = 0;
}
return n;
}
-node*
+node_ptr
node::parse_dtb(input_buffer &structs, input_buffer &strings)
{
- node *n = new node(structs, strings);
+ node_ptr n(new node(structs, strings));
if (!n->valid)
{
- delete n;
n = 0;
}
return n;
}
-node::~node()
-{
- while (!children.empty())
- {
- delete children.back();
- children.pop_back();
- }
- while (!properties.empty())
- {
- delete properties.back();
- properties.pop_back();
- }
-}
-
-property*
+property_ptr
node::get_property(string key)
{
- for (property_iterator i=property_begin(), e=property_end() ; i!=e ; ++i)
+ for (auto &i : properties)
{
- if ((*i)->get_key() == key)
+ if (i->get_key() == key)
{
- return *i;
+ return i;
}
}
return 0;
}
void
-node::merge_node(node *other)
+node::merge_node(node_ptr other)
{
if (!other->label.empty())
{
@@ -799,40 +914,39 @@ node::merge_node(node *other)
// large numbers of properties, but for typical usage the
// entire vector will fit (easily) into cache, so iterating
// over it repeatedly isn't that expensive.
- while (!other->properties.empty())
+ for (auto &p : other->properties)
{
- property *p = other->properties.front();
- for (property_iterator i=property_begin(), e=property_end() ; i!=e ; ++i)
+ bool found = false;
+ for (auto i=property_begin(), e=property_end() ; i!=e ; ++i)
{
if ((*i)->get_key() == p->get_key())
{
- delete *i;
- properties.erase(i);
+ *i = p;
+ found = true;
break;
}
}
- add_property(p);
- other->properties.erase(other->properties.begin());
+ if (!found)
+ {
+ add_property(p);
+ }
}
- while (!other->children.empty())
+ for (auto &c : other->children)
{
- node *c = other->children.front();
bool found = false;
- for (child_iterator i=child_begin(), e=child_end() ; i!=e ; ++i)
+ for (auto &i : children)
{
- if ((*i)->name == c->name && (*i)->unit_address == c->unit_address)
+ if (i->name == c->name && i->unit_address == c->unit_address)
{
- (*i)->merge_node(c);
- delete c;
+ i->merge_node(std::move(c));
found = true;
break;
}
}
if (!found)
{
- children.push_back(c);
+ children.push_back(std::move(c));
}
- other->children.erase(other->children.begin());
}
}
@@ -850,7 +964,7 @@ node::write(dtb::output_writer &writer, dtb::string_table &strings)
writer.write_comment(name);
writer.write_data(name_buffer);
writer.write_data((uint8_t)0);
- for (property_iterator i=property_begin(), e=property_end() ; i!=e ; ++i)
+ for (auto i=property_begin(), e=property_end() ; i!=e ; ++i)
{
(*i)->write(writer, strings);
}
@@ -868,11 +982,13 @@ node::write_dts(FILE *file, int indent)
{
putc('\t', file);
}
+#ifdef PRINT_LABELS
if (label != string())
{
label.print(file);
fputs(": ", file);
}
+#endif
if (name != string())
{
name.print(file);
@@ -883,7 +999,7 @@ node::write_dts(FILE *file, int indent)
unit_address.print(file);
}
fputs(" {\n\n", file);
- for (property_iterator i=property_begin(), e=property_end() ; i!=e ; ++i)
+ for (auto i=property_begin(), e=property_end() ; i!=e ; ++i)
{
(*i)->write_dts(file, indent+1);
}
@@ -899,7 +1015,7 @@ node::write_dts(FILE *file, int indent)
}
void
-device_tree::collect_names_recursive(node* n, node_path &path)
+device_tree::collect_names_recursive(node_ptr &n, node_path &path)
{
string name = n->label;
path.push_back(std::make_pair(n->name, n->unit_address));
@@ -907,13 +1023,13 @@ device_tree::collect_names_recursive(node* n, node_path &path)
{
if (node_names.find(name) == node_names.end())
{
- node_names.insert(std::make_pair(name, n));
+ node_names.insert(std::make_pair(name, n.get()));
node_paths.insert(std::make_pair(name, path));
}
else
{
node_names[name] = (node*)-1;
- std::map<string, node_path>::iterator i = node_paths.find(name);
+ auto i = node_paths.find(name);
if (i != node_paths.end())
{
node_paths.erase(name);
@@ -930,7 +1046,7 @@ device_tree::collect_names_recursive(node* n, node_path &path)
path.pop_back();
// Now we collect the phandles and properties that reference
// other nodes.
- for (node::property_iterator i=n->property_begin(), e=n->property_end() ; i!=e ; ++i)
+ for (auto i=n->property_begin(), e=n->property_end() ; i!=e ; ++i)
{
for (property::value_iterator p=(*i)->begin(),pe=(*i)->end() ; p!=pe ; ++p)
{
@@ -956,7 +1072,7 @@ device_tree::collect_names_recursive(node* n, node_path &path)
else
{
uint32_t phandle = (*i)->begin()->get_as_uint32();
- used_phandles.insert(std::make_pair(phandle, n));
+ used_phandles.insert(std::make_pair(phandle, n.get()));
}
}
}
@@ -966,18 +1082,21 @@ void
device_tree::collect_names()
{
node_path p;
+ node_names.clear();
+ node_paths.clear();
+ cross_references.clear();
+ phandles.clear();
collect_names_recursive(root, p);
}
void
device_tree::resolve_cross_references()
{
- for (std::vector<property_value*>::iterator i=cross_references.begin(), e=cross_references.end() ; i!=e ; ++i)
+ for (auto *pv : cross_references)
{
- property_value* pv = *i;
node_path path = node_paths[pv->string_data];
// Skip the first name in the path. It's always "", and implicitly /
- for (node_path::iterator p=path.begin()+1, pe=path.end() ; p!=pe ; ++p)
+ for (auto p=path.begin()+1, pe=path.end() ; p!=pe ; ++p)
{
pv->byte_data.push_back('/');
p->first.push_to_buffer(pv->byte_data);
@@ -987,23 +1106,22 @@ device_tree::resolve_cross_references()
p->second.push_to_buffer(pv->byte_data);
}
}
- pv->byte_data.push_back(0);
}
uint32_t phandle = 1;
- for (std::vector<property_value*>::iterator i=phandles.begin(), e=phandles.end() ; i!=e ; ++i)
+ for (auto &i : phandles)
{
- string target_name = (*i)->string_data;
+ string target_name = i->string_data;
node *target = node_names[target_name];
if (target == 0)
{
- fprintf(stderr, "Failed to find node with label:");
+ fprintf(stderr, "Failed to find node with label: ");
target_name.dump();
fprintf(stderr, "\n");
valid = 0;
return;
}
// If there is an existing phandle, use it
- property *p = target->get_property("phandle");
+ property_ptr p = target->get_property("phandle");
if (p == 0)
{
p = target->get_property("linux,phandle");
@@ -1029,33 +1147,140 @@ device_tree::resolve_cross_references()
push_big_endian(v.byte_data, phandle++);
if (phandle_node_name == BOTH || phandle_node_name == LINUX)
{
- p = new property(string("linux,phandle"));
+ p.reset(new property(string("linux,phandle")));
p->add_value(v);
target->add_property(p);
}
if (phandle_node_name == BOTH || phandle_node_name == EPAPR)
{
- p = new property(string("phandle"));
+ p.reset(new property(string("phandle")));
p->add_value(v);
target->add_property(p);
}
}
- p->begin()->push_to_buffer((*i)->byte_data);
- assert((*i)->byte_data.size() == 4);
+ p->begin()->push_to_buffer(i->byte_data);
+ assert(i->byte_data.size() == 4);
}
}
void
-device_tree::parse_roots(input_buffer &input, std::vector<node*> &roots)
+device_tree::parse_file(input_buffer &input,
+ const std::string &dir,
+ std::vector<node_ptr> &roots,
+ FILE *depfile,
+ bool &read_header)
{
input.next_token();
- while (valid && input.consume('/'))
+ // Read the header
+ if (input.consume("/dts-v1/;"))
+ {
+ read_header = true;
+ }
+ input.next_token();
+ while(input.consume("/include/"))
{
+ bool reallyInclude = true;
+ if (input.consume("if "))
+ {
+ input.next_token();
+ string name = string::parse_property_name(input);
+ // XXX: Error handling
+ if (defines.find(name) == defines.end())
+ {
+ reallyInclude = false;
+ }
+ input.consume('/');
+ }
input.next_token();
- node *n = node::parse(input, string("", 1), string(), string(), &defines);
+ if (!input.consume('"'))
+ {
+ input.parse_error("Expected quoted filename");
+ valid = false;
+ return;
+ }
+ int length = 0;
+ while (input[length] != '"') length++;
+
+ std::string file((const char*)input, length);
+ std::string include_file = dir + '/' + file;
+ assert(input.consume(file.c_str()));
+ input.consume('"');
+ input.next_token();
+ if (!reallyInclude)
+ {
+ continue;
+ }
+
+ input_buffer *include_buffer = buffer_for_file(include_file.c_str());
+
+ if (include_buffer == 0)
+ {
+ for (auto i : include_paths)
+ {
+ include_file = i + '/' + file;
+ include_buffer = buffer_for_file(include_file.c_str());
+ if (include_buffer != 0)
+ {
+ break;
+ }
+ }
+ }
+ if (depfile != 0)
+ {
+ putc(' ', depfile);
+ fputs(include_file.c_str(), depfile);
+ }
+ if (include_buffer == 0)
+ {
+ valid = false;
+ return;
+ }
+ parse_file(*include_buffer, dir, roots, depfile, read_header);
+ }
+ input.next_token();
+ if (!read_header)
+ {
+ input.parse_error("Expected /dts-v1/; version string");
+ }
+ // Read any memory reservations
+ while(input.consume("/memreserve/"))
+ {
+ unsigned long long start, len;
+ input.next_token();
+ // Read the start and length.
+ if (!(input.consume_integer(start) &&
+ (input.next_token(),
+ input.consume_integer(len))))
+ {
+ input.parse_error("Expected size on /memreserve/ node.");
+ }
+ input.next_token();
+ input.consume(';');
+ reservations.push_back(reservation(start, len));
+ }
+ input.next_token();
+ while (valid && !input.finished())
+ {
+ node_ptr n;
+ if (input.consume('/'))
+ {
+ input.next_token();
+ n = node::parse(input, string(), string(), string(), &defines);
+ }
+ else if (input.consume('&'))
+ {
+ input.next_token();
+ string name = string::parse_node_name(input);
+ input.next_token();
+ n = node::parse(input, name, string(), string(), &defines);
+ }
+ else
+ {
+ input.parse_error("Failed to find root node /.");
+ }
if (n)
{
- roots.push_back(n);
+ roots.push_back(std::move(n));
}
else
{
@@ -1071,13 +1296,17 @@ device_tree::buffer_for_file(const char *path)
if (string(path) == string("-"))
{
input_buffer *b = new stream_input_buffer();
- buffers.push_back(b);
+ if (b)
+ {
+ std::unique_ptr<input_buffer> ptr(b);
+ buffers.push_back(std::move(ptr));
+ }
return b;
}
int source = open(path, O_RDONLY);
if (source == -1)
{
- fprintf(stderr, "Unable to open file %s\n", path);
+ fprintf(stderr, "Unable to open file '%s'. %s\n", path, strerror(errno));
return 0;
}
struct stat st;
@@ -1091,7 +1320,11 @@ device_tree::buffer_for_file(const char *path)
// Keep the buffer that owns the memory around for the lifetime
// of this FDT. Ones simply referring to it may have shorter
// lifetimes.
- buffers.push_back(b);
+ if (b)
+ {
+ std::unique_ptr<input_buffer> ptr(b);
+ buffers.push_back(std::move(ptr));
+ }
close(source);
return b;
}
@@ -1109,13 +1342,12 @@ device_tree::write(int fd)
// Build the reservation table
reservation_writer.write_comment(string("Memory reservations"));
reservation_writer.write_label(string("dt_reserve_map"));
- for (std::vector<reservation>::iterator i=reservations.begin(),
- e=reservations.end() ; i!=e ; ++i)
+ for (auto &i : reservations)
{
reservation_writer.write_comment(string("Reservation start"));
- reservation_writer.write_data(i->first);
+ reservation_writer.write_data(i.first);
reservation_writer.write_comment(string("Reservation length"));
- reservation_writer.write_data(i->first);
+ reservation_writer.write_data(i.first);
}
// Write n spare reserve map entries, plus the trailing 0.
for (uint32_t i=0 ; i<=spare_reserve_map_entries ; i++)
@@ -1202,10 +1434,9 @@ device_tree::write_dts(int fd)
{
const char msg[] = "/memreserve/";
fwrite(msg, sizeof(msg), 1, file);
- for (std::vector<reservation>::iterator i=reservations.begin(),
- e=reservations.end() ; i!=e ; ++i)
+ for (auto &i : reservations)
{
- fprintf(file, " %" PRIx64 " %" PRIx64, i->first, i->second);
+ fprintf(file, " %" PRIx64 " %" PRIx64, i.first, i.second);
}
fputs(";\n\n", file);
}
@@ -1276,125 +1507,16 @@ void
device_tree::parse_dts(const char *fn, FILE *depfile)
{
input_buffer *in = buffer_for_file(fn);
+ std::string dir(dirname((char*)fn));
if (in == 0)
{
valid = false;
return;
}
- std::vector<node*> roots;
+ std::vector<node_ptr> roots;
input_buffer &input = *in;
- input.next_token();
bool read_header = false;
- // Read the header
- if (input.consume("/dts-v1/;"))
- {
- read_header = true;
- }
- input.next_token();
- while(input.consume("/include/"))
- {
- bool reallyInclude = true;
- if (input.consume("if "))
- {
- input.next_token();
- string name = string::parse_property_name(input);
- // XXX: Error handling
- if (defines.find(name) == defines.end())
- {
- reallyInclude = false;
- }
- input.consume('/');
- }
- input.next_token();
- if (!input.consume('"'))
- {
- input.parse_error("Expected quoted filename");
- valid = false;
- return;
- }
- int length = 0;
- while (input[length] != '"') length++;
-
- const char *file = (const char*)input;
- const char *dir = dirname(fn);
- int dir_length = strlen(dir);
- char *include_file = (char*)malloc(strlen(dir) + length + 2);
- memcpy(include_file, dir, dir_length);
- include_file[dir_length] = '/';
- memcpy(include_file+dir_length+1, file, length);
- include_file[dir_length+length+1] = 0;
-
- input.consume(include_file+dir_length+1);
- input.consume('"');
- if (!reallyInclude)
- {
- continue;
- }
-
- input_buffer *include_buffer = buffer_for_file(include_file);
-
- if (include_buffer == 0)
- {
- for (std::vector<const char*>::iterator i=include_paths.begin(), e=include_paths.end() ; e!=i ; ++i)
- {
- free(include_file);
- dir = *i;
- dir_length = strlen(dir);
- include_file = (char*)malloc(strlen(dir) +
- length + 2);
- memcpy(include_file, dir, dir_length);
- include_file[dir_length] = '/';
- memcpy(include_file+dir_length+1, file, length);
- include_file[dir_length+length+1] = 0;
- include_buffer = buffer_for_file(include_file);
- if (include_buffer != 0)
- {
- break;
- }
- }
- }
- if (depfile != 0)
- {
- putc(' ', depfile);
- fputs(include_file, depfile);
- }
- if (include_buffer == 0)
- {
- valid = false;
- return;
- }
- input_buffer &include = *include_buffer;
- free((void*)include_file);
-
- if (!read_header)
- {
- include.next_token();
- read_header = include.consume("/dts-v1/;");
- }
- parse_roots(include, roots);
- }
- input.next_token();
- if (!read_header)
- {
- input.parse_error("Expected /dts-v1/; version string");
- }
- // Read any memory reservations
- while(input.consume("/memreserve/"))
- {
- long long start, len;
- input.next_token();
- // Read the start and length.
- if (!(input.consume_integer(start) &&
- (input.next_token(),
- input.consume_integer(len))))
- {
- input.parse_error("Expected size on /memreserve/ node.");
- }
- input.next_token();
- input.consume(';');
- reservations.push_back(reservation(start, len));
- }
- parse_roots(input, roots);
+ parse_file(input, dir, roots, depfile, read_header);
switch (roots.size())
{
case 0:
@@ -1402,42 +1524,42 @@ device_tree::parse_dts(const char *fn, FILE *depfile)
input.parse_error("Failed to find root node /.");
return;
case 1:
- root = roots[0];
+ root = std::move(roots[0]);
break;
default:
{
- root = roots[0];
- for (std::vector<node*>::iterator i=roots.begin()+1,
- e=roots.end() ; i!=e ; ++i)
+ root = std::move(roots[0]);
+ for (auto i=++(roots.begin()), e=roots.end() ; i!=e ; ++i)
{
- root->merge_node(*i);
- delete *i;
+ auto &node = *i;
+ string name = node->name;
+ if (name == string())
+ {
+ root->merge_node(std::move(node));
+ }
+ else
+ {
+ auto existing = node_names.find(name);
+ if (existing == node_names.end())
+ {
+ collect_names();
+ existing = node_names.find(name);
+ }
+ if (existing == node_names.end())
+ {
+ fprintf(stderr, "Unable to merge node: ");
+ name.dump();
+ fprintf(stderr, "\n");
+ }
+ existing->second->merge_node(std::move(node));
+ }
}
- roots.resize(1);
}
}
collect_names();
resolve_cross_references();
}
-device_tree::~device_tree()
-{
- if (root != 0)
- {
- delete root;
- }
- while (!buffers.empty())
- {
- delete buffers.back();
- buffers.pop_back();
- }
- for (define_map::iterator i=defines.begin(), e=defines.end() ;
- i!=e ; ++i)
- {
- delete i->second;
- }
-}
-
bool device_tree::parse_define(const char *def)
{
char *val = strchr(def, '=');
@@ -1454,10 +1576,10 @@ bool device_tree::parse_define(const char *def)
string name(def, val-def);
val++;
input_buffer in = input_buffer(val, strlen(val));
- property *p = property::parse(in, name, string(), false);
+ property_ptr p = property::parse(in, name, string(), false);
if (p)
defines[name] = p;
- return p;
+ return (bool)p;
}
} // namespace fdt
diff --git a/usr.bin/dtc/fdt.hh b/usr.bin/dtc/fdt.hh
index 3ac1084..7340a73 100644
--- a/usr.bin/dtc/fdt.hh
+++ b/usr.bin/dtc/fdt.hh
@@ -32,7 +32,10 @@
#ifndef _FDT_HH_
#define _FDT_HH_
-#include <map>
+#include <unordered_map>
+#include <unordered_set>
+#include <memory>
+#include <string>
#include "util.hh"
#include "string.hh"
@@ -49,7 +52,19 @@ class string_table;
namespace fdt
{
class property;
-typedef std::map<string, property*> define_map;
+class node;
+/**
+ * Type for (owned) pointers to properties.
+ */
+typedef std::shared_ptr<property> property_ptr;
+/**
+ * Owning pointer to a node.
+ */
+typedef std::unique_ptr<node> node_ptr;
+/**
+ * Map from macros to property pointers.
+ */
+typedef std::unordered_map<string, property_ptr> define_map;
/**
* Properties may contain a number of different value, each with a different
* label. This class encapsulates a single value.
@@ -186,6 +201,11 @@ struct property_value
* - Otherwise, it is printed as a byte buffer.
*/
void write_dts(FILE *file);
+ /**
+ * Tries to merge adjacent property values, returns true if it succeeds and
+ * false otherwise.
+ */
+ bool try_to_merge(property_value &other);
private:
/**
* Returns whether the value is of the specified type. If the type of
@@ -250,7 +270,7 @@ class property
/**
* Parses one or more 32-bit values enclosed in angle brackets.
*/
- void parse_cells(input_buffer &input);
+ void parse_cells(input_buffer &input, int cell_size);
/**
* Parses an array of bytes, contained within square brackets.
*/
@@ -299,18 +319,18 @@ class property
* property from the input, and returns it on success. On any parse
* error, this will return 0.
*/
- static property* parse_dtb(input_buffer &structs,
+ static property_ptr parse_dtb(input_buffer &structs,
input_buffer &strings);
/**
* Factory method for constructing a new property. Attempts to parse a
* property from the input, and returns it on success. On any parse
* error, this will return 0.
*/
- static property* parse(input_buffer &input,
- string key,
- string label=string(),
- bool semicolonTerminated=true,
- define_map *defines=0);
+ static property_ptr parse(input_buffer &input,
+ string key,
+ string label=string(),
+ bool semicolonTerminated=true,
+ define_map *defines=0);
/**
* Iterator type used for accessing the values of a property.
*/
@@ -378,15 +398,19 @@ class node
* name followed by an at symbol.
*/
string unit_address;
+ /**
+ * The type for the property vector.
+ */
+ typedef std::vector<property_ptr> property_vector;
private:
/**
* The properties contained within this node.
*/
- std::vector<property*> properties;
+ property_vector properties;
/**
* The children of this node.
*/
- std::vector<node*> children;
+ std::vector<node_ptr> children;
/**
* A flag indicating whether this node is valid. This is set to false
* if an error occurs during parsing.
@@ -415,7 +439,7 @@ class node
* Comparison function for properties, used when sorting the properties
* vector. Orders the properties based on their names.
*/
- static inline bool cmp_properties(property *p1, property *p2);
+ static inline bool cmp_properties(property_ptr &p1, property_ptr &p2);
/*
{
return p1->get_key() < p2->get_key();
@@ -426,16 +450,7 @@ class node
* vector. Orders the nodes based on their names or, if the names are
* the same, by the unit addresses.
*/
- static inline bool cmp_children(node *c1, node *c2);
- /*
- {
- if (c1->name == c2->name)
- {
- return c1->unit_address < c2->unit_address;
- }
- return c1->name < c2->name;
- }
- */
+ static inline bool cmp_children(node_ptr &c1, node_ptr &c2);
public:
/**
* Sorts the node's properties and children into alphabetical order and
@@ -445,7 +460,7 @@ class node
/**
* Iterator type for child nodes.
*/
- typedef std::vector<node*>::iterator child_iterator;
+ typedef std::vector<node_ptr>::iterator child_iterator;
/**
* Returns an iterator for the first child of this node.
*/
@@ -461,20 +476,16 @@ class node
return children.end();
}
/**
- * Iterator type for properties of a node.
- */
- typedef std::vector<property*>::iterator property_iterator;
- /**
* Returns an iterator after the last property of this node.
*/
- inline property_iterator property_begin()
+ inline property_vector::iterator property_begin()
{
return properties.begin();
}
/**
* Returns an iterator for the first property of this node.
*/
- inline property_iterator property_end()
+ inline property_vector::iterator property_end()
{
return properties.end();
}
@@ -485,11 +496,11 @@ class node
* cursor on the open brace of the property, after the name and so on
* have been parsed.
*/
- static node* parse(input_buffer &input,
- string name,
- string label=string(),
- string address=string(),
- define_map *defines=0);
+ static node_ptr parse(input_buffer &input,
+ string name,
+ string label=string(),
+ string address=string(),
+ define_map *defines=0);
/**
* Factory method for constructing a new node. Attempts to parse a
* node in DTB format from the input, and returns it on success. On
@@ -497,21 +508,16 @@ class node
* cursor on the open brace of the property, after the name and so on
* have been parsed.
*/
- static node* parse_dtb(input_buffer &structs, input_buffer &strings);
- /**
- * Destroys the node, recursively deleting all of its properties and
- * children.
- */
- ~node();
+ static node_ptr parse_dtb(input_buffer &structs, input_buffer &strings);
/**
* Returns a property corresponding to the specified key, or 0 if this
* node does not contain a property of that name.
*/
- property *get_property(string key);
+ property_ptr get_property(string key);
/**
* Adds a new property to this node.
*/
- inline void add_property(property *p)
+ inline void add_property(property_ptr &p)
{
properties.push_back(p);
}
@@ -519,7 +525,7 @@ class node
* Merges a node into this one. Any properties present in both are
* overridden, any properties present in only one are preserved.
*/
- void merge_node(node *other);
+ void merge_node(node_ptr other);
/**
* Write this node to the specified output. Although nodes do not
* refer to a string table directly, their properties do. The string
@@ -584,18 +590,18 @@ class device_tree
/**
* Root node. All other nodes are children of this node.
*/
- node *root;
+ node_ptr root;
/**
* Mapping from names to nodes. Only unambiguous names are recorded,
* duplicate names are stored as (node*)-1.
*/
- std::map<string, node*> node_names;
+ std::unordered_map<string, node*> node_names;
/**
* A map from labels to node paths. When resolving cross references,
* we look up referenced nodes in this and replace the cross reference
* with the full path to its target.
*/
- std::map<string, node_path> node_paths;
+ std::unordered_map<string, node_path> node_paths;
/**
* A collection of property values that are references to other nodes.
* These should be expanded to the full path of their targets.
@@ -608,11 +614,15 @@ class device_tree
*/
std::vector<property_value*> phandles;
/**
+ * The names of nodes that target phandles.
+ */
+ std::unordered_set<string> phandle_targets;
+ /**
* A collection of input buffers that we are using. These input
* buffers are the ones that own their memory, and so we must preserve
* them for the lifetime of the device tree.
*/
- std::vector<input_buffer*> buffers;
+ std::vector<std::unique_ptr<input_buffer>> buffers;
/**
* A map of used phandle values to nodes. All phandles must be unique,
* so we keep a set of ones that the user explicitly provides in the
@@ -622,13 +632,13 @@ class device_tree
* find phandles that were provided by the user explicitly when we are
* doing checking.
*/
- std::map<uint32_t, node*> used_phandles;
+ std::unordered_map<uint32_t, node*> used_phandles;
/**
* Paths to search for include files. This contains a set of
* nul-terminated strings, which are not owned by this class and so
* must be freed separately.
*/
- std::vector<const char*> include_paths;
+ std::vector<std::string> include_paths;
/**
* Dictionary of predefined macros provided on the command line.
*/
@@ -655,7 +665,13 @@ class device_tree
* used in resolving cross references. Also collects phandle
* properties that have been explicitly added.
*/
- void collect_names_recursive(node* n, node_path &path);
+ void collect_names_recursive(node_ptr &n, node_path &path);
+ /**
+ * Assign phandle properties to all nodes that have been referenced and
+ * require one. This method will recursively visit the tree starting at
+ * the node that it is passed.
+ */
+ void assign_phandles(node_ptr &n, uint32_t &next);
/**
* Calls the recursive version of this method on every root node.
*/
@@ -667,9 +683,16 @@ class device_tree
*/
void resolve_cross_references();
/**
- * Parses root nodes from the top level of a dts file.
+ * Parses a dts file in the given buffer and adds the roots to the parsed
+ * set. The `read_header` argument indicates whether the header has
+ * already been read. Some dts files place the header in an include,
+ * rather than in the top-level file.
*/
- void parse_roots(input_buffer &input, std::vector<node*> &roots);
+ void parse_file(input_buffer &input,
+ const std::string &dir,
+ std::vector<node_ptr> &roots,
+ FILE *depfile,
+ bool &read_header);
/**
* Allocates a new mmap()'d input buffer for use in parsing. This
* object then keeps a reference to it, ensuring that it is not
@@ -706,7 +729,7 @@ class device_tree
/**
* Default constructor. Creates a valid, but empty FDT.
*/
- device_tree() : phandle_node_name(EPAPR), valid(true), root(0),
+ device_tree() : phandle_node_name(EPAPR), valid(true),
boot_cpu(0), spare_reserve_map_entries(0),
minimum_blob_size(0), blob_padding(0) {}
/**
@@ -720,10 +743,6 @@ class device_tree
*/
void parse_dts(const char *fn, FILE *depfile);
/**
- * Destroy the tree and any input buffers that it holds.
- */
- ~device_tree();
- /**
* Returns whether this tree is valid.
*/
inline bool is_valid()
@@ -741,7 +760,7 @@ class device_tree
* Returns a pointer to the root node of this tree. No ownership
* transfer.
*/
- inline node *get_root() const
+ inline const node_ptr &get_root() const
{
return root;
}
@@ -767,7 +786,8 @@ class device_tree
*/
void add_include_path(const char *path)
{
- include_paths.push_back(path);
+ std::string p(path);
+ include_paths.push_back(std::move(p));
}
/**
* Sets the number of empty reserve map entries to add.
diff --git a/usr.bin/dtc/input_buffer.cc b/usr.bin/dtc/input_buffer.cc
index c83044d..fe8c402 100644
--- a/usr.bin/dtc/input_buffer.cc
+++ b/usr.bin/dtc/input_buffer.cc
@@ -113,7 +113,7 @@ input_buffer::consume(const char *str)
}
bool
-input_buffer::consume_integer(long long &outInt)
+input_buffer::consume_integer(unsigned long long &outInt)
{
// The first character must be a digit. Hex and octal strings
// are prefixed by 0 and 0x, respectively.
@@ -122,7 +122,7 @@ input_buffer::consume_integer(long long &outInt)
return false;
}
char *end=0;
- outInt = strtoll(&buffer[cursor], &end, 0);
+ outInt = strtoull(&buffer[cursor], &end, 0);
if (end == &buffer[cursor])
{
return false;
@@ -168,9 +168,8 @@ input_buffer::next_token()
// Eat the /
++(*this);
}
- // Parse // comments and # comments
- if (((*this)[0] == '/' && (*this)[1] == '/') ||
- (*this)[0] == '#')
+ // Parse // comments
+ if (((*this)[0] == '/' && (*this)[1] == '/'))
{
// eat the start of the comment
++(*this);
@@ -238,11 +237,12 @@ mmap_input_buffer::mmap_input_buffer(int fd) : input_buffer(0, 0)
perror("Failed to stat file");
}
size = sb.st_size;
- buffer = (const char*)mmap(0, size, PROT_READ,
- MAP_PREFAULT_READ, fd, 0);
- if (buffer == 0)
+ buffer = (const char*)mmap(0, size, PROT_READ, MAP_PRIVATE |
+ MAP_PREFAULT_READ, fd, 0);
+ if (buffer == MAP_FAILED)
{
perror("Failed to mmap file");
+ exit(EXIT_FAILURE);
}
}
diff --git a/usr.bin/dtc/input_buffer.hh b/usr.bin/dtc/input_buffer.hh
index 9a38312..5b1f5d6 100644
--- a/usr.bin/dtc/input_buffer.hh
+++ b/usr.bin/dtc/input_buffer.hh
@@ -81,6 +81,10 @@ class input_buffer
void skip_spaces();
public:
/**
+ * Return whether all input has been consumed.
+ */
+ bool finished() { return cursor >= size; }
+ /**
* Virtual destructor. Does nothing, but exists so that subclasses
* that own the memory can run cleanup code for deallocating it.
*/
@@ -181,7 +185,7 @@ class input_buffer
*
* The parsed value is returned via the argument.
*/
- bool consume_integer(long long &outInt);
+ bool consume_integer(unsigned long long &outInt);
/**
* Template function that consumes a binary value in big-endian format
* from the input stream. Returns true and advances the cursor if
diff --git a/usr.bin/dtc/string.hh b/usr.bin/dtc/string.hh
index 45bc4fd..f6acc1b 100644
--- a/usr.bin/dtc/string.hh
+++ b/usr.bin/dtc/string.hh
@@ -33,6 +33,8 @@
#ifndef _STRING_HH_
#define _STRING_HH_
#include "input_buffer.hh"
+#include <string>
+#include <functional>
namespace dtc
{
@@ -48,6 +50,7 @@ namespace dtc
*/
class string
{
+ friend std::hash<string>;
/** Start address. Contained within the mmap()'d input file and not
* owned by this object. */
const char *start;
@@ -143,5 +146,19 @@ class string
};
} // namespace dtc
+namespace std
+{
+ template<>
+ struct hash<dtc::string>
+ {
+ std::size_t operator()(dtc::string const& s) const
+ {
+ std::string str(s.start, s.length);
+ std::hash<std::string> h;
+ return h(str);
+ }
+ };
+}
+
#endif // !_STRING_HH_
diff --git a/usr.bin/getconf/sysconf.gperf b/usr.bin/getconf/sysconf.gperf
index ae88464..6a0a349 100644
--- a/usr.bin/getconf/sysconf.gperf
+++ b/usr.bin/getconf/sysconf.gperf
@@ -121,7 +121,7 @@ _POSIX_VERSION, _SC_VERSION
_POSIX_V6_ILP32_OFF32, _SC_V6_ILP32_OFF32
_POSIX_V6_ILP32_OFFBIG, _SC_V6_ILP32_OFFBIG
_POSIX_V6_LP64_OFF64, _SC_V6_LP64_OFF64
-_POSIX_V6_LP64_OFFBIG, _SC_V6_LP64_OFFBIG
+_POSIX_V6_LPBIG_OFFBIG, _SC_V6_LPBIG_OFFBIG
_XOPEN_CRYPT, _SC_XOPEN_CRYPT
_XOPEN_ENH_I18N, _SC_XOPEN_ENH_I18N
_XOPEN_LEGACY, _SC_XOPEN_LEGACY
diff --git a/usr.bin/gzip/gzip.1 b/usr.bin/gzip/gzip.1
index 43d0e72..0b5a38f 100644
--- a/usr.bin/gzip/gzip.1
+++ b/usr.bin/gzip/gzip.1
@@ -1,4 +1,4 @@
-.\" $NetBSD: gzip.1,v 1.25 2015/04/06 21:41:17 wiz Exp $
+.\" $NetBSD: gzip.1,v 1.26 2015/10/27 07:36:18 mrg Exp $
.\"
.\" Copyright (c) 1997, 2003, 2004 Matthew R. Green
.\" All rights reserved.
@@ -25,7 +25,7 @@
.\" SUCH DAMAGE.
.\"
.\" $FreeBSD$
-.Dd April 6, 2015
+.Dd October 26, 2015
.Dt GZIP 1
.Os
.Sh NAME
@@ -136,7 +136,7 @@ option, allowing non-compressed data to pass through unchanged.
.It Fl h , -help
This option prints a usage summary and exits.
.It Fl k , -keep
-Keep (don't delete) input files during compression
+Keep (do not delete) input files during compression
or decompression.
.It Fl L , -license
This option prints
@@ -183,6 +183,12 @@ is set, it is parsed as a white-space separated list of options
handled before any options on the command line.
Options on the command line will override anything in
.Ev GZIP .
+.Sh EXIT STATUS
+The
+.Nm
+utility exits 0 on success,
+1 on errors,
+and 2 if a warning occurs.
.Sh SEE ALSO
.Xr bzip2 1 ,
.Xr compress 1 ,
@@ -220,7 +226,7 @@ with unpack support written by
.An Xin LI Aq Mt delphij@FreeBSD.org .
.Sh BUGS
According to RFC 1952, the recorded file size is stored in a 32-bit
-integer, therefore, it can not represent files larger than 4GB.
+integer, therefore, it cannot represent files larger than 4GB.
This limitation also applies to
.Fl l
option of
diff --git a/usr.bin/gzip/gzip.c b/usr.bin/gzip/gzip.c
index 8469c05..8f22abc 100644
--- a/usr.bin/gzip/gzip.c
+++ b/usr.bin/gzip/gzip.c
@@ -1,4 +1,4 @@
-/* $NetBSD: gzip.c,v 1.108 2015/04/15 02:29:12 christos Exp $ */
+/* $NetBSD: gzip.c,v 1.109 2015/10/27 07:36:18 mrg Exp $ */
/*-
* Copyright (c) 1997, 1998, 2003, 2004, 2006 Matthew R. Green
@@ -810,6 +810,7 @@ gz_uncompress(int in, int out, char *pre, size_t prelen, off_t *gsizep,
if (in_tot > 0) {
maybe_warnx("%s: trailing garbage "
"ignored", filename);
+ exit_value = 2;
goto stop;
}
maybe_warnx("input not gziped (MAGIC0)");
diff --git a/usr.bin/indent/indent.1 b/usr.bin/indent/indent.1
index 160355c..60ae0bc 100644
--- a/usr.bin/indent/indent.1
+++ b/usr.bin/indent/indent.1
@@ -518,7 +518,7 @@ The
utility understands a substantial amount about the syntax of C, but it
has a `forgiving' parser.
It attempts to cope with the usual sorts of
-incomplete and misformed syntax.
+incomplete and malformed syntax.
In particular, the use of macros like:
.Pp
.Dl #define forever for(;;)
diff --git a/usr.bin/locale/locale.c b/usr.bin/locale/locale.c
index ee9bf84..e0fe7be 100644
--- a/usr.bin/locale/locale.c
+++ b/usr.bin/locale/locale.c
@@ -466,10 +466,10 @@ showlocale(void)
&& strcmp(lang, vval)) {
/*
* Appropriate environment variable set, its value
- * is valid and not overriden by LC_ALL
+ * is valid and not overridden by LC_ALL
*
* XXX: possible side effect: if both LANG and
- * overriden environment variable are set into same
+ * overridden environment variable are set into same
* value, then it'll be assumed as 'implied'
*/
printf("%s=%s\n", lcinfo[i].name, vval);
diff --git a/usr.bin/look/look.1 b/usr.bin/look/look.1
index e6f70bb..bfeb3a6 100644
--- a/usr.bin/look/look.1
+++ b/usr.bin/look/look.1
@@ -108,7 +108,7 @@ The
.Fl a
and
.Fl -alternative
-flags are ignored for compability.
+flags are ignored for compatibility.
.Sh SEE ALSO
.Xr grep 1 ,
.Xr sort 1
diff --git a/usr.bin/mkdep/mkdep.1 b/usr.bin/mkdep/mkdep.1
index a4be961..9b65a9c 100644
--- a/usr.bin/mkdep/mkdep.1
+++ b/usr.bin/mkdep/mkdep.1
@@ -28,7 +28,7 @@
.\" @(#)mkdep.1 8.1 (Berkeley) 6/6/93
.\" $FreeBSD$
.\"
-.Dd June 6, 1993
+.Dd October 23, 2015
.Dt MKDEP 1
.Os
.Sh NAME
@@ -60,11 +60,13 @@ CFLAGS is the list of flags for the C compiler.
.Pp
The user has the ability to change the preprocessor and preprocessor options
used.
-For instance, to use gcc as the preprocessor and to ignore system
+For instance, to use
+.Sy cc
+as the preprocessor and to ignore system
headers, one would use
.Bd -literal -offset indent
depend:
- env MKDEP_CPP="gcc -E" MKDEP_CPP_OPTS=-MM mkdep \\
+ env MKDEP_CPP="cc -E" MKDEP_CPP_OPTS=-MM mkdep \\
${CFLAGS} ${SRCS}
.Ed
.Pp
@@ -101,6 +103,8 @@ module.
Specifies the C compiler to use.
The specified compiler is expected to have
options consistent with the GNU C compiler.
+The default is
+.Sy cc .
.It Ev MKDEP_CPP
Specifies the preprocessor to use.
The default is "${CC} -E".
diff --git a/usr.bin/mkimg/mkimg.1 b/usr.bin/mkimg/mkimg.1
index 1fecdd2..246a397 100644
--- a/usr.bin/mkimg/mkimg.1
+++ b/usr.bin/mkimg/mkimg.1
@@ -289,7 +289,7 @@ utility as follows:
.Dl % mkimg -s mbr -b /boot/mbr -p freebsd:-'mkimg -s bsd -b /boot/boot \
-p freebsd-ufs:=root-file-system.ufs -p freebsd-swap::1G' -o mbr-bsd.img
.Pp
-To accomodate the need to have partitions named or numbered in a certain
+To accommodate the need to have partitions named or numbered in a certain
way, the
.Nm
utility allows for the specification of empty partitions.
diff --git a/usr.bin/mt/mt.c b/usr.bin/mt/mt.c
index 8cec707..985a04e 100644
--- a/usr.bin/mt/mt.c
+++ b/usr.bin/mt/mt.c
@@ -1342,7 +1342,7 @@ mt_param(int argc, char **argv, int mtfd, char *xml_str,
break;
case 'p':
if (param_name != NULL) {
- warnx("Only one paramter name may be "
+ warnx("Only one parameter name may be "
"specified");
retval = 1;
goto bailout;
@@ -1354,7 +1354,7 @@ mt_param(int argc, char **argv, int mtfd, char *xml_str,
break;
case 's':
if (param_value != NULL) {
- warnx("Only one paramter value may be "
+ warnx("Only one parameter value may be "
"specified");
retval = 1;
goto bailout;
diff --git a/usr.bin/patch/pch.c b/usr.bin/patch/pch.c
index cae7bf4..0db459e 100644
--- a/usr.bin/patch/pch.c
+++ b/usr.bin/patch/pch.c
@@ -499,7 +499,7 @@ another_hunk(void)
LINENUM fillcnt; /* #lines of missing ptrn or repl */
LINENUM fillsrc; /* index of first line to copy */
LINENUM filldst; /* index of first missing line */
- bool ptrn_spaces_eaten; /* ptrn was slightly misformed */
+ bool ptrn_spaces_eaten; /* ptrn was slightly malformed */
bool repl_could_be_missing; /* no + or ! lines in this hunk */
bool repl_missing; /* we are now backtracking */
off_t repl_backtrack_position; /* file pos of first repl line */
diff --git a/usr.bin/pr/egetopt.c b/usr.bin/pr/egetopt.c
index 4b41b4a..22a093a 100644
--- a/usr.bin/pr/egetopt.c
+++ b/usr.bin/pr/egetopt.c
@@ -76,7 +76,7 @@ egetopt(int nargc, char * const *nargv, const char *ostr)
{
static char *place = emsg; /* option letter processing */
char *oli; /* option letter list index */
- static int delim; /* which option delimeter */
+ static int delim; /* which option delimiter */
char *p;
static char savec = '\0';
diff --git a/usr.bin/sed/compile.c b/usr.bin/sed/compile.c
index c7fbe21..68cbbc5 100644
--- a/usr.bin/sed/compile.c
+++ b/usr.bin/sed/compile.c
@@ -364,7 +364,7 @@ nonsel: /* Now parse the command */
}
/*
- * Get a delimited string. P points to the delimeter of the string; d points
+ * Get a delimited string. P points to the delimiter of the string; d points
* to a buffer area. Newline and delimiter escapes are processed; other
* escapes are ignored.
*
diff --git a/usr.bin/sockstat/sockstat.c b/usr.bin/sockstat/sockstat.c
index ca13f8d..98d86b5 100644
--- a/usr.bin/sockstat/sockstat.c
+++ b/usr.bin/sockstat/sockstat.c
@@ -373,7 +373,7 @@ gather_sctp(void)
htons(xinpcb->local_port));
break;
default:
- errx(1, "adress family %d not supported",
+ errx(1, "address family %d not supported",
xladdr->address.sa.sa_family);
}
laddr->next = NULL;
@@ -466,7 +466,7 @@ gather_sctp(void)
htons(xstcb->local_port));
break;
default:
- errx(1, "adress family %d not supported",
+ errx(1, "address family %d not supported",
xladdr->address.sa.sa_family);
}
laddr->next = NULL;
@@ -508,7 +508,7 @@ gather_sctp(void)
htons(xstcb->remote_port));
break;
default:
- errx(1, "adress family %d not supported",
+ errx(1, "address family %d not supported",
xraddr->address.sa.sa_family);
}
faddr->next = NULL;
diff --git a/usr.bin/sort/sort.1.in b/usr.bin/sort/sort.1.in
index 7559306..e3266c1 100644
--- a/usr.bin/sort/sort.1.in
+++ b/usr.bin/sort/sort.1.in
@@ -33,14 +33,14 @@
.\"
.\" @(#)sort.1 8.1 (Berkeley) 6/6/93
.\"
-.Dd March 19 2015
+.Dd March 19, 2015
.Dt SORT 1
.Os
.Sh NAME
.Nm sort
.Nd sort or merge records (lines) of text and binary files
.Sh SYNOPSIS
-.Nm sort
+.Nm
.Bk -words
.Op Fl bcCdfghiRMmnrsuVz
.Sm off
@@ -52,9 +52,9 @@
.Op Fl t Ar char
.Op Fl o Ar output
.Op Ar file ...
-.Nm sort
+.Nm
.Fl Fl help
-.Nm sort
+.Nm
.Fl Fl version
.Sh DESCRIPTION
The
@@ -74,7 +74,7 @@ uses entire lines for comparison.
.Pp
The command line options are as follows:
.Bl -tag -width Ds
-.It Fl c, Fl Fl check, Fl C, Fl Fl check=silent|quiet
+.It Fl c , Fl Fl check , Fl C , Fl Fl check=silent|quiet
Check that the single input file is sorted.
If the file is not sorted,
.Nm
@@ -88,7 +88,7 @@ is specified,
.Nm
produces no output.
This is a "silent" version of
-.Fl c.
+.Fl c .
.It Fl m , Fl Fl merge
Merge only.
The input files are assumed to be pre-sorted.
@@ -97,7 +97,7 @@ If they are not sorted the output order is undefined.
Print the output to the
.Ar output
file instead of the standard output.
-.It Fl S Ar size, Fl Fl buffer-size Ns = Ns Ar size
+.It Fl S Ar size , Fl Fl buffer-size Ns = Ns Ar size
Use
.Ar size
for the maximum size of the memory buffer.
@@ -149,14 +149,14 @@ When attached to a specific key (see
the ordering options override all global ordering options for
the key they are attached to.
.Bl -tag -width indent
-.It Fl b, Fl Fl ignore-leading-blanks
+.It Fl b , Fl Fl ignore-leading-blanks
Ignore leading blank characters when comparing lines.
.It Fl d , Fl Fl dictionary-order
Consider only blank spaces and alphanumeric characters in comparisons.
.It Fl f , Fl Fl ignore-case
Convert all lowercase characters to their uppercase equivalent
before comparison, that is, perform case-independent sorting.
-.It Fl g, Fl Fl general-numeric-sort, Fl Fl sort=general-numeric
+.It Fl g , Fl Fl general-numeric-sort , Fl Fl sort=general-numeric
Sort by general numerical value.
As opposed to
.Fl n ,
@@ -165,7 +165,7 @@ It has a more
permissive format than that allowed by
.Fl n
but it has a significant performance drawback.
-.It Fl h, Fl Fl human-numeric-sort, Fl Fl sort=human-numeric
+.It Fl h , Fl Fl human-numeric-sort , Fl Fl sort=human-numeric
Sort by numerical value, but take into account the SI suffix,
if present.
Sort first by numeric sign (negative, zero, or
@@ -181,15 +181,15 @@ or
options (human-readable).
.It Fl i , Fl Fl ignore-nonprinting
Ignore all non-printable characters.
-.It Fl M, Fl Fl month-sort, Fl Fl sort=month
+.It Fl M , Fl Fl month-sort , Fl Fl sort=month
Sort by month abbreviations.
Unknown strings are considered smaller than the month names.
-.It Fl n , Fl Fl numeric-sort, Fl Fl sort=numeric
+.It Fl n , Fl Fl numeric-sort , Fl Fl sort=numeric
Sort fields numerically by arithmetic value.
Fields are supposed to have optional blanks in the beginning, an
optional minus sign, zero or more digits (including decimal point and
possible thousand separators).
-.It Fl R, Fl Fl random-sort, Fl Fl sort=random
+.It Fl R , Fl Fl random-sort , Fl Fl sort=random
Sort by a random order.
This is a random permutation of the inputs except that
the equal keys sort together.
@@ -204,7 +204,7 @@ Even if multiple sort fields are specified,
the same random hash function is used for all of them.
.It Fl r , Fl Fl reverse
Sort in reverse order.
-.It Fl V, Fl Fl version-sort
+.It Fl V , Fl Fl version-sort
Sort version numbers.
The input lines are treated as file names in form
PREFIX VERSION SUFFIX, where SUFFIX matches the regular expression
@@ -234,8 +234,7 @@ The treatment of field separators can be altered using these options:
.It Fl b , Fl Fl ignore-leading-blanks
Ignore leading blank space when determining the start
and end of a restricted sort key (see
-.Fl k
-).
+.Fl k ) .
If
.Fl b
is specified before the first
@@ -623,7 +622,7 @@ The performance depends highly on locale settings,
efficient choice of sort keys and key complexity.
The fastest sort is with locale C, on whole lines,
with option
-.Fl s.
+.Fl s .
In general, locale C is the fastest, then single-byte
locales follow and multi-byte locales as the slowest but
the correct collation order is always respected.
diff --git a/usr.bin/sort/sort.c b/usr.bin/sort/sort.c
index 43ae43c..17f316b 100644
--- a/usr.bin/sort/sort.c
+++ b/usr.bin/sort/sort.c
@@ -1168,6 +1168,11 @@ main(int argc, char **argv)
argc -= optind;
argv += optind;
+ if (argv_from_file0) {
+ argc = argc_from_file0;
+ argv = argv_from_file0;
+ }
+
#ifndef WITHOUT_NLS
catalog = catopen("sort", NL_CAT_LOCALE);
#endif
@@ -1205,11 +1210,6 @@ main(int argc, char **argv)
ks->sm.func = get_sort_func(&(ks->sm));
}
- if (argv_from_file0) {
- argc = argc_from_file0;
- argv = argv_from_file0;
- }
-
if (debug_sort) {
printf("Memory to be used for sorting: %llu\n",available_free_memory);
#if defined(SORT_THREADS)
diff --git a/usr.bin/systat/Makefile b/usr.bin/systat/Makefile
index 18fd1b1..f0de9fb 100644
--- a/usr.bin/systat/Makefile
+++ b/usr.bin/systat/Makefile
@@ -6,7 +6,7 @@
PROG= systat
SRCS= cmds.c cmdtab.c devs.c fetch.c iostat.c keyboard.c main.c \
netcmds.c netstat.c pigs.c swap.c icmp.c \
- mode.c ip.c tcp.c zarc.c \
+ mode.c ip.c sctp.c tcp.c zarc.c \
vmstat.c convtbl.c ifcmds.c ifstat.c
.if ${MK_INET6_SUPPORT} != "no"
diff --git a/usr.bin/systat/cmdtab.c b/usr.bin/systat/cmdtab.c
index 273dd32..cb021e0 100644
--- a/usr.bin/systat/cmdtab.c
+++ b/usr.bin/systat/cmdtab.c
@@ -69,6 +69,9 @@ struct cmdtab cmdtab[] = {
initip6, openip6, closeip6, cmdmode,
resetip6, CF_LOADAV },
#endif
+ { "sctp", showsctp, fetchsctp, labelsctp,
+ initsctp, opensctp, closesctp, cmdmode,
+ resetsctp, CF_LOADAV },
{ "tcp", showtcp, fetchtcp, labeltcp,
inittcp, opentcp, closetcp, cmdmode,
resettcp, CF_LOADAV },
diff --git a/usr.bin/systat/extern.h b/usr.bin/systat/extern.h
index 2ac5a51..272eead 100644
--- a/usr.bin/systat/extern.h
+++ b/usr.bin/systat/extern.h
@@ -174,3 +174,4 @@ char *sysctl_dynread(const char *, size_t *);
void show ## name(void)
SYSTAT_CMD( zarc );
+SYSTAT_CMD ( sctp );
diff --git a/usr.bin/systat/sctp.c b/usr.bin/systat/sctp.c
new file mode 100644
index 0000000..ea0edd8
--- /dev/null
+++ b/usr.bin/systat/sctp.c
@@ -0,0 +1,362 @@
+/*-
+ * Copyright (c) 2015
+ * The Regents of the University of California. All rights reserved.
+ * Michael Tuexen. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 4. Neither the name of the University nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#include <sys/param.h>
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <sys/sysctl.h>
+
+#include <netinet/sctp.h>
+
+#include <stdlib.h>
+#include <string.h>
+
+#include "systat.h"
+#include "extern.h"
+#include "mode.h"
+
+static struct sctpstat curstat, initstat, oldstat;
+
+/*-
+--0 1 2 3 4 5 6 7
+--0123456789012345678901234567890123456789012345678901234567890123456789012345
+00 SCTP Associations SCTP Packets
+01999999999999 associations initiated 999999999999 packets sent
+02999999999999 associations accepted 999999999999 packets received
+03999999999999 associations established 999999999999 - out of the blue
+04999999999999 associations restarted 999999999999 - bad vtag
+05999999999999 associations terminated 999999999999 - bad crc32c
+06999999999999 associations aborted
+07
+08 SCTP Timers SCTP Chunks
+09999999999999 init timeouts 999999999999 control chunks sent
+10999999999999 cookie timeouts 999999999999 data chunks sent
+11999999999999 data timeouts 999999999999 - ordered
+12999999999999 delayed sack timeouts 999999999999 - unordered
+13999999999999 shutdown timeouts 999999999999 control chunks received
+14999999999999 shutdown-ack timeouts 999999999999 data chunks received
+15999999999999 shutdown guard timeouts 999999999999 - ordered
+16999999999999 heartbeat timeouts 999999999999 - unordered
+17999999999999 path MTU timeouts
+18999999999999 autoclose timeouts SCTP user messages
+19999999999999 asconf timeouts 999999999999 fragmented
+20999999999999 stream reset timeouts 999999999999 reassembled
+--0123456789012345678901234567890123456789012345678901234567890123456789012345
+--0 1 2 3 4 5 6 7
+*/
+
+WINDOW *
+opensctp(void)
+{
+ return (subwin(stdscr, LINES-3-1, 0, MAINWIN_ROW, 0));
+}
+
+void
+closesctp(WINDOW *w)
+{
+ if (w != NULL) {
+ wclear(w);
+ wrefresh(w);
+ delwin(w);
+ }
+}
+
+void
+labelsctp(void)
+{
+ wmove(wnd, 0, 0); wclrtoeol(wnd);
+#define L(row, str) mvwprintw(wnd, row, 13, str)
+#define R(row, str) mvwprintw(wnd, row, 51, str);
+ L(0, "SCTP Associations"); R(0, "SCTP Packets");
+ L(1, "associations initiated"); R(1, "packets sent");
+ L(2, "associations accepted"); R(2, "packets received");
+ L(3, "associations established"); R(3, "- out of the blue");
+ L(4, "associations restarted"); R(4, "- bad vtag");
+ L(5, "associations terminated"); R(5, "- bad crc32c");
+ L(6, "associations aborted");
+
+ L(8, "SCTP Timers"); R(8, "SCTP Chunks");
+ L(9, "init timeouts"); R(9, "control chunks sent");
+ L(10, "cookie timeouts"); R(10, "data chunks sent");
+ L(11, "data timeouts"); R(11, "- ordered");
+ L(12, "delayed sack timeouts"); R(12, "- unordered");
+ L(13, "shutdown timeouts"); R(13, "control chunks received");
+ L(14, "shutdown-ack timeouts"); R(14, "data chunks received");
+ L(15, "shutdown guard timeouts"); R(15, "- ordered");
+ L(16, "heartbeat timeouts"); R(16, "- unordered");
+ L(17, "path MTU timeouts");
+ L(18, "autoclose timeouts"); R(18, "SCTP User Messages");
+ L(19, "asconf timeouts"); R(19, "fragmented");
+ L(20, "stream reset timeouts"); R(20, "reassembled");
+#undef L
+#undef R
+}
+
+static void
+domode(struct sctpstat *ret)
+{
+ const struct sctpstat *sub;
+ int divisor = 1;
+
+ switch(currentmode) {
+ case display_RATE:
+ sub = &oldstat;
+ divisor = (delay > 1000000) ? delay / 1000000 : 1;
+ break;
+ case display_DELTA:
+ sub = &oldstat;
+ break;
+ case display_SINCE:
+ sub = &initstat;
+ break;
+ default:
+ *ret = curstat;
+ return;
+ }
+#define DO(stat) ret->stat = (curstat.stat - sub->stat) / divisor
+ DO(sctps_currestab);
+ DO(sctps_activeestab);
+ DO(sctps_restartestab);
+ DO(sctps_collisionestab);
+ DO(sctps_passiveestab);
+ DO(sctps_aborted);
+ DO(sctps_shutdown);
+ DO(sctps_outoftheblue);
+ DO(sctps_checksumerrors);
+ DO(sctps_outcontrolchunks);
+ DO(sctps_outorderchunks);
+ DO(sctps_outunorderchunks);
+ DO(sctps_incontrolchunks);
+ DO(sctps_inorderchunks);
+ DO(sctps_inunorderchunks);
+ DO(sctps_fragusrmsgs);
+ DO(sctps_reasmusrmsgs);
+ DO(sctps_outpackets);
+ DO(sctps_inpackets);
+
+ DO(sctps_recvpackets);
+ DO(sctps_recvdatagrams);
+ DO(sctps_recvpktwithdata);
+ DO(sctps_recvsacks);
+ DO(sctps_recvdata);
+ DO(sctps_recvdupdata);
+ DO(sctps_recvheartbeat);
+ DO(sctps_recvheartbeatack);
+ DO(sctps_recvecne);
+ DO(sctps_recvauth);
+ DO(sctps_recvauthmissing);
+ DO(sctps_recvivalhmacid);
+ DO(sctps_recvivalkeyid);
+ DO(sctps_recvauthfailed);
+ DO(sctps_recvexpress);
+ DO(sctps_recvexpressm);
+ DO(sctps_recvnocrc);
+ DO(sctps_recvswcrc);
+ DO(sctps_recvhwcrc);
+
+ DO(sctps_sendpackets);
+ DO(sctps_sendsacks);
+ DO(sctps_senddata);
+ DO(sctps_sendretransdata);
+ DO(sctps_sendfastretrans);
+ DO(sctps_sendmultfastretrans);
+ DO(sctps_sendheartbeat);
+ DO(sctps_sendecne);
+ DO(sctps_sendauth);
+ DO(sctps_senderrors);
+ DO(sctps_sendnocrc);
+ DO(sctps_sendswcrc);
+ DO(sctps_sendhwcrc);
+
+ DO(sctps_pdrpfmbox);
+ DO(sctps_pdrpfehos);
+ DO(sctps_pdrpmbda);
+ DO(sctps_pdrpmbct);
+ DO(sctps_pdrpbwrpt);
+ DO(sctps_pdrpcrupt);
+ DO(sctps_pdrpnedat);
+ DO(sctps_pdrppdbrk);
+ DO(sctps_pdrptsnnf);
+ DO(sctps_pdrpdnfnd);
+ DO(sctps_pdrpdiwnp);
+ DO(sctps_pdrpdizrw);
+ DO(sctps_pdrpbadd);
+ DO(sctps_pdrpmark);
+
+ DO(sctps_timoiterator);
+ DO(sctps_timodata);
+ DO(sctps_timowindowprobe);
+ DO(sctps_timoinit);
+ DO(sctps_timosack);
+ DO(sctps_timoshutdown);
+ DO(sctps_timoheartbeat);
+ DO(sctps_timocookie);
+ DO(sctps_timosecret);
+ DO(sctps_timopathmtu);
+ DO(sctps_timoshutdownack);
+ DO(sctps_timoshutdownguard);
+ DO(sctps_timostrmrst);
+ DO(sctps_timoearlyfr);
+ DO(sctps_timoasconf);
+ DO(sctps_timodelprim);
+ DO(sctps_timoautoclose);
+ DO(sctps_timoassockill);
+ DO(sctps_timoinpkill);
+
+ DO(sctps_hdrops);
+ DO(sctps_badsum);
+ DO(sctps_noport);
+ DO(sctps_badvtag);
+ DO(sctps_badsid);
+ DO(sctps_nomem);
+ DO(sctps_fastretransinrtt);
+ DO(sctps_markedretrans);
+ DO(sctps_naglesent);
+ DO(sctps_naglequeued);
+ DO(sctps_maxburstqueued);
+ DO(sctps_ifnomemqueued);
+ DO(sctps_windowprobed);
+ DO(sctps_lowlevelerr);
+ DO(sctps_lowlevelerrusr);
+ DO(sctps_datadropchklmt);
+ DO(sctps_datadroprwnd);
+ DO(sctps_ecnereducedcwnd);
+ DO(sctps_vtagexpress);
+ DO(sctps_vtagbogus);
+ DO(sctps_primary_randry);
+ DO(sctps_cmt_randry);
+ DO(sctps_slowpath_sack);
+ DO(sctps_wu_sacks_sent);
+ DO(sctps_sends_with_flags);
+ DO(sctps_sends_with_unord);
+ DO(sctps_sends_with_eof);
+ DO(sctps_sends_with_abort);
+ DO(sctps_protocol_drain_calls);
+ DO(sctps_protocol_drains_done);
+ DO(sctps_read_peeks);
+ DO(sctps_cached_chk);
+ DO(sctps_cached_strmoq);
+ DO(sctps_left_abandon);
+ DO(sctps_send_burst_avoid);
+ DO(sctps_send_cwnd_avoid);
+ DO(sctps_fwdtsn_map_over);
+ DO(sctps_queue_upd_ecne);
+#undef DO
+}
+
+void
+showsctp(void)
+{
+ struct sctpstat stats;
+
+ memset(&stats, 0, sizeof stats);
+ domode(&stats);
+
+#define DO(stat, row, col) \
+ mvwprintw(wnd, row, col, "%12lu", stats.stat)
+#define L(row, stat) DO(stat, row, 0)
+#define R(row, stat) DO(stat, row, 38)
+ L(1, sctps_activeestab); R(1, sctps_outpackets);
+ L(2, sctps_passiveestab); R(2, sctps_inpackets);
+ L(3, sctps_currestab); R(3, sctps_outoftheblue);
+ L(4, sctps_restartestab); R(4, sctps_badvtag);
+ L(5, sctps_shutdown); R(5, sctps_checksumerrors);
+ L(6, sctps_aborted);
+
+
+ L(9, sctps_timoinit); R(9, sctps_outcontrolchunks);
+ L(10, sctps_timocookie); R(10, sctps_senddata);
+ L(11, sctps_timodata); R(11, sctps_outorderchunks);
+ L(12, sctps_timosack); R(12, sctps_outunorderchunks);
+ L(13, sctps_timoshutdown); R(13, sctps_incontrolchunks);
+ L(14, sctps_timoshutdownack); R(14, sctps_recvdata);
+ L(15, sctps_timoshutdownguard); R(15, sctps_inorderchunks);
+ L(16, sctps_timoheartbeat); R(16, sctps_inunorderchunks);
+ L(17, sctps_timopathmtu);
+ L(18, sctps_timoautoclose);
+ L(19, sctps_timoasconf); R(19, sctps_fragusrmsgs);
+ L(20, sctps_timostrmrst); R(20, sctps_reasmusrmsgs);
+#undef DO
+#undef L
+#undef R
+}
+
+int
+initsctp(void)
+{
+ size_t len;
+ const char *name = "net.inet.sctp.stats";
+
+ len = 0;
+ if (sysctlbyname(name, NULL, &len, NULL, 0) < 0) {
+ error("sysctl getting sctpstat size failed");
+ return 0;
+ }
+ if (len > sizeof curstat) {
+ error("sctpstat structure has grown--recompile systat!");
+ return 0;
+ }
+ if (sysctlbyname(name, &initstat, &len, NULL, 0) < 0) {
+ error("sysctl getting sctpstat failed");
+ return 0;
+ }
+ oldstat = initstat;
+ return 1;
+}
+
+void
+resetsctp(void)
+{
+ size_t len;
+ const char *name = "net.inet.sctp.stats";
+
+ len = sizeof initstat;
+ if (sysctlbyname(name, &initstat, &len, NULL, 0) < 0) {
+ error("sysctl getting sctpstat failed");
+ }
+ oldstat = initstat;
+}
+
+void
+fetchsctp(void)
+{
+ size_t len;
+ const char *name = "net.inet.sctp.stats";
+
+ oldstat = curstat;
+ len = sizeof curstat;
+ if (sysctlbyname(name, &curstat, &len, NULL, 0) < 0) {
+ error("sysctl getting sctpstat failed");
+ }
+ return;
+}
diff --git a/usr.bin/systat/systat.1 b/usr.bin/systat/systat.1
index af996bb..f66de64 100644
--- a/usr.bin/systat/systat.1
+++ b/usr.bin/systat/systat.1
@@ -28,7 +28,7 @@
.\" @(#)systat.1 8.2 (Berkeley) 12/30/93
.\" $FreeBSD$
.\"
-.Dd July 15, 2013
+.Dd October 24, 2015
.Dt SYSTAT 1
.Os
.Sh NAME
@@ -96,6 +96,7 @@ to be one of:
.Ic ip6 ,
.Ic netstat ,
.Ic pigs ,
+.Ic sctp ,
.Ic swap ,
.Ic tcp ,
.Ic vmstat ,
@@ -242,6 +243,12 @@ except that it displays
statistics.
It does not display
.Tn UDP statistics.
+.It Ic sctp
+Like
+.Ic icmp ,
+but with
+.Tn SCTP
+statistics.
.It Ic tcp
Like
.Ic icmp ,
diff --git a/usr.bin/timeout/timeout.c b/usr.bin/timeout/timeout.c
index a682dde..804efd8 100644
--- a/usr.bin/timeout/timeout.c
+++ b/usr.bin/timeout/timeout.c
@@ -105,7 +105,7 @@ parse_signal(const char *str)
int sig, i;
const char *errstr;
- sig = strtonum(str, 0, sys_nsig, &errstr);
+ sig = strtonum(str, 1, sys_nsig - 1, &errstr);
if (errstr == NULL)
return (sig);
diff --git a/usr.bin/truss/Makefile b/usr.bin/truss/Makefile
index c25f928..e784365 100644
--- a/usr.bin/truss/Makefile
+++ b/usr.bin/truss/Makefile
@@ -2,7 +2,7 @@
NO_WERROR=
PROG= truss
-SRCS= main.c setup.c syscalls.c ioctl.c
+SRCS= cloudabi.c ioctl.c main.c setup.c syscalls.c
.PATH: ${.CURDIR:H}/kdump
SRCS+= utrace.c
@@ -24,6 +24,9 @@ ABI_SYSPATH.amd64-linux32= sys/amd64/linux32
ABIS+= freebsd
# Each ABI is expected to have an ABI.c, MACHINE_ARCH-ABI.c or
# MACHINE_CPUARCH-ABI.c file that will be used to map the syscall arguments.
+.if ${MACHINE_ARCH} == "aarch64"
+ABIS+= cloudabi64
+.endif
.if ${MACHINE_CPUARCH} == "i386"
ABIS+= i386-linux
.endif
diff --git a/usr.bin/truss/aarch64-cloudabi64.c b/usr.bin/truss/aarch64-cloudabi64.c
new file mode 100644
index 0000000..ad6afc2
--- /dev/null
+++ b/usr.bin/truss/aarch64-cloudabi64.c
@@ -0,0 +1,90 @@
+/*-
+ * Copyright (c) 2015 Nuxi, https://nuxi.nl/
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#include <sys/param.h>
+#include <sys/ptrace.h>
+
+#include <machine/armreg.h>
+
+#include <errno.h>
+#include <stdio.h>
+
+#include "cloudabi.h"
+#include "cloudabi64_syscalls.h"
+#include "truss.h"
+
+static int
+aarch64_cloudabi64_fetch_args(struct trussinfo *trussinfo, unsigned int narg)
+{
+ struct current_syscall *cs;
+ struct reg regs;
+ lwpid_t tid;
+ unsigned int i;
+
+ tid = trussinfo->curthread->tid;
+ if (ptrace(PT_GETREGS, tid, (caddr_t)&regs, 0) == -1) {
+ fprintf(trussinfo->outfile, "-- CANNOT READ REGISTERS --\n");
+ return (-1);
+ }
+
+ cs = &trussinfo->curthread->cs;
+ for (i = 0; i < narg && i < 8; i++)
+ cs->args[i] = regs.x[i];
+ return (0);
+}
+
+static int
+aarch64_cloudabi64_fetch_retval(struct trussinfo *trussinfo, long *retval,
+ int *errorp)
+{
+ struct reg regs;
+ lwpid_t tid;
+
+ tid = trussinfo->curthread->tid;
+ if (ptrace(PT_GETREGS, tid, (caddr_t)&regs, 0) == -1) {
+ fprintf(trussinfo->outfile, "-- CANNOT READ REGISTERS --\n");
+ return (-1);
+ }
+
+ retval[0] = regs.x[0];
+ retval[1] = regs.x[1];
+ *errorp = (regs.spsr & PSR_C) != 0;
+ if (*errorp)
+ retval[0] = cloudabi_convert_errno(retval[0]);
+ return (0);
+}
+
+static struct procabi aarch64_cloudabi64 = {
+ "CloudABI ELF64",
+ syscallnames,
+ nitems(syscallnames),
+ aarch64_cloudabi64_fetch_args,
+ aarch64_cloudabi64_fetch_retval
+};
+
+PROCABI(aarch64_cloudabi64);
diff --git a/usr.bin/truss/amd64-cloudabi64.c b/usr.bin/truss/amd64-cloudabi64.c
index 2b93532..5982b66 100644
--- a/usr.bin/truss/amd64-cloudabi64.c
+++ b/usr.bin/truss/amd64-cloudabi64.c
@@ -34,8 +34,7 @@ __FBSDID("$FreeBSD$");
#include <errno.h>
#include <stdio.h>
-#include <compat/cloudabi/cloudabi_syscalldefs.h>
-
+#include "cloudabi.h"
#include "cloudabi64_syscalls.h"
#include "truss.h"
@@ -68,85 +67,6 @@ amd64_cloudabi64_fetch_args(struct trussinfo *trussinfo, unsigned int narg)
return (0);
}
-static const int cloudabi_errno_table[] = {
- [CLOUDABI_E2BIG] = E2BIG,
- [CLOUDABI_EACCES] = EACCES,
- [CLOUDABI_EADDRINUSE] = EADDRINUSE,
- [CLOUDABI_EADDRNOTAVAIL] = EADDRNOTAVAIL,
- [CLOUDABI_EAFNOSUPPORT] = EAFNOSUPPORT,
- [CLOUDABI_EAGAIN] = EAGAIN,
- [CLOUDABI_EALREADY] = EALREADY,
- [CLOUDABI_EBADF] = EBADF,
- [CLOUDABI_EBADMSG] = EBADMSG,
- [CLOUDABI_EBUSY] = EBUSY,
- [CLOUDABI_ECANCELED] = ECANCELED,
- [CLOUDABI_ECHILD] = ECHILD,
- [CLOUDABI_ECONNABORTED] = ECONNABORTED,
- [CLOUDABI_ECONNREFUSED] = ECONNREFUSED,
- [CLOUDABI_ECONNRESET] = ECONNRESET,
- [CLOUDABI_EDEADLK] = EDEADLK,
- [CLOUDABI_EDESTADDRREQ] = EDESTADDRREQ,
- [CLOUDABI_EDOM] = EDOM,
- [CLOUDABI_EDQUOT] = EDQUOT,
- [CLOUDABI_EEXIST] = EEXIST,
- [CLOUDABI_EFAULT] = EFAULT,
- [CLOUDABI_EFBIG] = EFBIG,
- [CLOUDABI_EHOSTUNREACH] = EHOSTUNREACH,
- [CLOUDABI_EIDRM] = EIDRM,
- [CLOUDABI_EILSEQ] = EILSEQ,
- [CLOUDABI_EINPROGRESS] = EINPROGRESS,
- [CLOUDABI_EINTR] = EINTR,
- [CLOUDABI_EINVAL] = EINVAL,
- [CLOUDABI_EIO] = EIO,
- [CLOUDABI_EISCONN] = EISCONN,
- [CLOUDABI_EISDIR] = EISDIR,
- [CLOUDABI_ELOOP] = ELOOP,
- [CLOUDABI_EMFILE] = EMFILE,
- [CLOUDABI_EMLINK] = EMLINK,
- [CLOUDABI_EMSGSIZE] = EMSGSIZE,
- [CLOUDABI_EMULTIHOP] = EMULTIHOP,
- [CLOUDABI_ENAMETOOLONG] = ENAMETOOLONG,
- [CLOUDABI_ENETDOWN] = ENETDOWN,
- [CLOUDABI_ENETRESET] = ENETRESET,
- [CLOUDABI_ENETUNREACH] = ENETUNREACH,
- [CLOUDABI_ENFILE] = ENFILE,
- [CLOUDABI_ENOBUFS] = ENOBUFS,
- [CLOUDABI_ENODEV] = ENODEV,
- [CLOUDABI_ENOENT] = ENOENT,
- [CLOUDABI_ENOEXEC] = ENOEXEC,
- [CLOUDABI_ENOLCK] = ENOLCK,
- [CLOUDABI_ENOLINK] = ENOLINK,
- [CLOUDABI_ENOMEM] = ENOMEM,
- [CLOUDABI_ENOMSG] = ENOMSG,
- [CLOUDABI_ENOPROTOOPT] = ENOPROTOOPT,
- [CLOUDABI_ENOSPC] = ENOSPC,
- [CLOUDABI_ENOSYS] = ENOSYS,
- [CLOUDABI_ENOTCONN] = ENOTCONN,
- [CLOUDABI_ENOTDIR] = ENOTDIR,
- [CLOUDABI_ENOTEMPTY] = ENOTEMPTY,
- [CLOUDABI_ENOTRECOVERABLE] = ENOTRECOVERABLE,
- [CLOUDABI_ENOTSOCK] = ENOTSOCK,
- [CLOUDABI_ENOTSUP] = ENOTSUP,
- [CLOUDABI_ENOTTY] = ENOTTY,
- [CLOUDABI_ENXIO] = ENXIO,
- [CLOUDABI_EOVERFLOW] = EOVERFLOW,
- [CLOUDABI_EOWNERDEAD] = EOWNERDEAD,
- [CLOUDABI_EPERM] = EPERM,
- [CLOUDABI_EPIPE] = EPIPE,
- [CLOUDABI_EPROTO] = EPROTO,
- [CLOUDABI_EPROTONOSUPPORT] = EPROTONOSUPPORT,
- [CLOUDABI_EPROTOTYPE] = EPROTOTYPE,
- [CLOUDABI_ERANGE] = ERANGE,
- [CLOUDABI_EROFS] = EROFS,
- [CLOUDABI_ESPIPE] = ESPIPE,
- [CLOUDABI_ESRCH] = ESRCH,
- [CLOUDABI_ESTALE] = ESTALE,
- [CLOUDABI_ETIMEDOUT] = ETIMEDOUT,
- [CLOUDABI_ETXTBSY] = ETXTBSY,
- [CLOUDABI_EXDEV] = EXDEV,
- [CLOUDABI_ENOTCAPABLE] = ENOTCAPABLE,
-};
-
static int
amd64_cloudabi64_fetch_retval(struct trussinfo *trussinfo, long *retval,
int *errorp)
@@ -163,9 +83,8 @@ amd64_cloudabi64_fetch_retval(struct trussinfo *trussinfo, long *retval,
retval[0] = regs.r_rax;
retval[1] = regs.r_rdx;
*errorp = (regs.r_rflags & PSL_C) != 0;
- if (*errorp && *retval >= 0 && *retval < nitems(cloudabi_errno_table) &&
- cloudabi_errno_table[*retval] != 0)
- *retval = cloudabi_errno_table[*retval];
+ if (*errorp)
+ retval[0] = cloudabi_convert_errno(retval[0]);
return (0);
}
diff --git a/usr.bin/truss/cloudabi.c b/usr.bin/truss/cloudabi.c
new file mode 100644
index 0000000..d426500
--- /dev/null
+++ b/usr.bin/truss/cloudabi.c
@@ -0,0 +1,122 @@
+/*-
+ * Copyright (c) 2015 Nuxi, https://nuxi.nl/
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <sys/cdefs.h>
+__FBSDID("$FreeBSD$");
+
+#include <sys/param.h>
+
+#include <errno.h>
+
+#include <compat/cloudabi/cloudabi_syscalldefs.h>
+
+#include "cloudabi.h"
+
+long
+cloudabi_convert_errno(long error)
+{
+ static const int table[] = {
+ [CLOUDABI_E2BIG] = E2BIG,
+ [CLOUDABI_EACCES] = EACCES,
+ [CLOUDABI_EADDRINUSE] = EADDRINUSE,
+ [CLOUDABI_EADDRNOTAVAIL] = EADDRNOTAVAIL,
+ [CLOUDABI_EAFNOSUPPORT] = EAFNOSUPPORT,
+ [CLOUDABI_EAGAIN] = EAGAIN,
+ [CLOUDABI_EALREADY] = EALREADY,
+ [CLOUDABI_EBADF] = EBADF,
+ [CLOUDABI_EBADMSG] = EBADMSG,
+ [CLOUDABI_EBUSY] = EBUSY,
+ [CLOUDABI_ECANCELED] = ECANCELED,
+ [CLOUDABI_ECHILD] = ECHILD,
+ [CLOUDABI_ECONNABORTED] = ECONNABORTED,
+ [CLOUDABI_ECONNREFUSED] = ECONNREFUSED,
+ [CLOUDABI_ECONNRESET] = ECONNRESET,
+ [CLOUDABI_EDEADLK] = EDEADLK,
+ [CLOUDABI_EDESTADDRREQ] = EDESTADDRREQ,
+ [CLOUDABI_EDOM] = EDOM,
+ [CLOUDABI_EDQUOT] = EDQUOT,
+ [CLOUDABI_EEXIST] = EEXIST,
+ [CLOUDABI_EFAULT] = EFAULT,
+ [CLOUDABI_EFBIG] = EFBIG,
+ [CLOUDABI_EHOSTUNREACH] = EHOSTUNREACH,
+ [CLOUDABI_EIDRM] = EIDRM,
+ [CLOUDABI_EILSEQ] = EILSEQ,
+ [CLOUDABI_EINPROGRESS] = EINPROGRESS,
+ [CLOUDABI_EINTR] = EINTR,
+ [CLOUDABI_EINVAL] = EINVAL,
+ [CLOUDABI_EIO] = EIO,
+ [CLOUDABI_EISCONN] = EISCONN,
+ [CLOUDABI_EISDIR] = EISDIR,
+ [CLOUDABI_ELOOP] = ELOOP,
+ [CLOUDABI_EMFILE] = EMFILE,
+ [CLOUDABI_EMLINK] = EMLINK,
+ [CLOUDABI_EMSGSIZE] = EMSGSIZE,
+ [CLOUDABI_EMULTIHOP] = EMULTIHOP,
+ [CLOUDABI_ENAMETOOLONG] = ENAMETOOLONG,
+ [CLOUDABI_ENETDOWN] = ENETDOWN,
+ [CLOUDABI_ENETRESET] = ENETRESET,
+ [CLOUDABI_ENETUNREACH] = ENETUNREACH,
+ [CLOUDABI_ENFILE] = ENFILE,
+ [CLOUDABI_ENOBUFS] = ENOBUFS,
+ [CLOUDABI_ENODEV] = ENODEV,
+ [CLOUDABI_ENOENT] = ENOENT,
+ [CLOUDABI_ENOEXEC] = ENOEXEC,
+ [CLOUDABI_ENOLCK] = ENOLCK,
+ [CLOUDABI_ENOLINK] = ENOLINK,
+ [CLOUDABI_ENOMEM] = ENOMEM,
+ [CLOUDABI_ENOMSG] = ENOMSG,
+ [CLOUDABI_ENOPROTOOPT] = ENOPROTOOPT,
+ [CLOUDABI_ENOSPC] = ENOSPC,
+ [CLOUDABI_ENOSYS] = ENOSYS,
+ [CLOUDABI_ENOTCONN] = ENOTCONN,
+ [CLOUDABI_ENOTDIR] = ENOTDIR,
+ [CLOUDABI_ENOTEMPTY] = ENOTEMPTY,
+ [CLOUDABI_ENOTRECOVERABLE] = ENOTRECOVERABLE,
+ [CLOUDABI_ENOTSOCK] = ENOTSOCK,
+ [CLOUDABI_ENOTSUP] = ENOTSUP,
+ [CLOUDABI_ENOTTY] = ENOTTY,
+ [CLOUDABI_ENXIO] = ENXIO,
+ [CLOUDABI_EOVERFLOW] = EOVERFLOW,
+ [CLOUDABI_EOWNERDEAD] = EOWNERDEAD,
+ [CLOUDABI_EPERM] = EPERM,
+ [CLOUDABI_EPIPE] = EPIPE,
+ [CLOUDABI_EPROTO] = EPROTO,
+ [CLOUDABI_EPROTONOSUPPORT] = EPROTONOSUPPORT,
+ [CLOUDABI_EPROTOTYPE] = EPROTOTYPE,
+ [CLOUDABI_ERANGE] = ERANGE,
+ [CLOUDABI_EROFS] = EROFS,
+ [CLOUDABI_ESPIPE] = ESPIPE,
+ [CLOUDABI_ESRCH] = ESRCH,
+ [CLOUDABI_ESTALE] = ESTALE,
+ [CLOUDABI_ETIMEDOUT] = ETIMEDOUT,
+ [CLOUDABI_ETXTBSY] = ETXTBSY,
+ [CLOUDABI_EXDEV] = EXDEV,
+ [CLOUDABI_ENOTCAPABLE] = ENOTCAPABLE,
+ };
+
+ if (error < 0 || error >= nitems(table) || table[error] == 0)
+ return (error);
+ return (table[error]);
+}
diff --git a/lib/libgpib/gpib.h b/usr.bin/truss/cloudabi.h
index d3144b5..abc8c0c 100644
--- a/lib/libgpib/gpib.h
+++ b/usr.bin/truss/cloudabi.h
@@ -1,6 +1,5 @@
/*-
- * Copyright (c) 2005 Poul-Henning Kamp
- * All rights reserved.
+ * Copyright (c) 2015 Nuxi, https://nuxi.nl/
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
@@ -23,11 +22,7 @@
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*
- * This file merely redirects to the file in <dev/ieee488/ugpib.h>
- *
* $FreeBSD$
*/
-#include <dev/ieee488/ugpib.h>
-
-#define ibcntl ibcnt
+long cloudabi_convert_errno(long);
diff --git a/usr.bin/vgrind/regexp.c b/usr.bin/vgrind/regexp.c
index 8390cf1..994cd2b 100644
--- a/usr.bin/vgrind/regexp.c
+++ b/usr.bin/vgrind/regexp.c
@@ -318,7 +318,7 @@ expconv()
/*
- * The following routine recognises an irregular expresion
+ * The following routine recognises an irregular expression
* with the following special characters:
*
* \? - means last match was optional
diff --git a/usr.bin/vi/catalog/Makefile b/usr.bin/vi/catalog/Makefile
index b85eaa8..e2ca579 100644
--- a/usr.bin/vi/catalog/Makefile
+++ b/usr.bin/vi/catalog/Makefile
@@ -115,7 +115,7 @@ SVLINKS= sv_SE
PLLINKS= pl_PL
FILES= ${CATALOGS}
-FILESDIR= /usr/share/vi/catalog
+FILESDIR= ${SHAREDIR}/vi/catalog
SYMLINKS=
.for l in ${NLLINKS}
SYMLINKS+= dutch ${FILESDIR}/$l.ISO8859-1
diff --git a/usr.sbin/Makefile b/usr.sbin/Makefile
index 03f69c1..acc8043 100644
--- a/usr.sbin/Makefile
+++ b/usr.sbin/Makefile
@@ -45,6 +45,7 @@ SUBDIR= adduser \
mixer \
mlxcontrol \
mountd \
+ mpsutil \
mptutil \
mtest \
${_mtree} \
diff --git a/usr.sbin/bhyve/bhyverun.c b/usr.sbin/bhyve/bhyverun.c
index bc49c57..4fd9c35 100644
--- a/usr.sbin/bhyve/bhyverun.c
+++ b/usr.sbin/bhyve/bhyverun.c
@@ -261,7 +261,8 @@ fbsdrun_addcpu(struct vmctx *ctx, int fromcpu, int newcpu, uint64_t rip)
* with vm_suspend().
*/
error = vm_activate_cpu(ctx, newcpu);
- assert(error == 0);
+ if (error != 0)
+ err(EX_OSERR, "could not activate CPU %d", newcpu);
CPU_SET_ATOMIC(newcpu, &cpumask);
diff --git a/usr.sbin/bhyve/pci_emul.c b/usr.sbin/bhyve/pci_emul.c
index 03ff0c0..af427ef 100644
--- a/usr.sbin/bhyve/pci_emul.c
+++ b/usr.sbin/bhyve/pci_emul.c
@@ -295,7 +295,7 @@ pci_emul_msix_tread(struct pci_devinst *pi, uint64_t offset, int size)
/*
* The PCI standard only allows 4 and 8 byte accesses to the MSI-X
- * table but we also allow 1 byte access to accomodate reads from
+ * table but we also allow 1 byte access to accommodate reads from
* ddb.
*/
if (size != 1 && size != 4 && size != 8)
diff --git a/usr.sbin/bluetooth/sdpcontrol/search.c b/usr.sbin/bluetooth/sdpcontrol/search.c
index acc8c16..6a2808c 100644
--- a/usr.sbin/bluetooth/sdpcontrol/search.c
+++ b/usr.sbin/bluetooth/sdpcontrol/search.c
@@ -103,6 +103,12 @@ print_service_class_id_list(uint8_t const *start, uint8_t const *end)
/* NOT REACHED */
}
+ if (len > (end - start)) {
+ fprintf(stderr, "Invalid Service Class ID List. " \
+ "Too long len=%d\n", len);
+ return;
+ }
+
while (start < end) {
SDP_GET8(type, start);
switch (type) {
@@ -259,28 +265,31 @@ print_protocol_descriptor(uint8_t const *start, uint8_t const *end)
case SDP_DATA_STR8:
case SDP_DATA_URL8:
SDP_GET8(len, start);
- fprintf(stdout, "%*.*s\n", len, len, (char *) start);
- start += len;
+ for (; start < end && len > 0; start ++, len --)
+ fprintf(stdout, "%c", *start);
+ fprintf(stdout, "\n");
break;
case SDP_DATA_STR16:
case SDP_DATA_URL16:
SDP_GET16(len, start);
- fprintf(stdout, "%*.*s\n", len, len, (char *) start);
- start += len;
+ for (; start < end && len > 0; start ++, len --)
+ fprintf(stdout, "%c", *start);
+ fprintf(stdout, "\n");
break;
case SDP_DATA_STR32:
case SDP_DATA_URL32:
SDP_GET32(len, start);
- fprintf(stdout, "%*.*s\n", len, len, (char *) start);
- start += len;
+ for (; start < end && len > 0; start ++, len --)
+ fprintf(stdout, "%c", *start);
+ fprintf(stdout, "\n");
break;
case SDP_DATA_SEQ8:
case SDP_DATA_ALT8:
SDP_GET8(len, start);
- for (; len > 0; start ++, len --)
+ for (; start < end && len > 0; start ++, len --)
fprintf(stdout, "%#2.2x ", *start);
fprintf(stdout, "\n");
break;
@@ -288,7 +297,7 @@ print_protocol_descriptor(uint8_t const *start, uint8_t const *end)
case SDP_DATA_SEQ16:
case SDP_DATA_ALT16:
SDP_GET16(len, start);
- for (; len > 0; start ++, len --)
+ for (; start < end && len > 0; start ++, len --)
fprintf(stdout, "%#2.2x ", *start);
fprintf(stdout, "\n");
break;
@@ -296,7 +305,7 @@ print_protocol_descriptor(uint8_t const *start, uint8_t const *end)
case SDP_DATA_SEQ32:
case SDP_DATA_ALT32:
SDP_GET32(len, start);
- for (; len > 0; start ++, len --)
+ for (; start < end && len > 0; start ++, len --)
fprintf(stdout, "%#2.2x ", *start);
fprintf(stdout, "\n");
break;
@@ -342,6 +351,12 @@ print_protocol_descriptor_list(uint8_t const *start, uint8_t const *end)
/* NOT REACHED */
}
+ if (len > (end - start)) {
+ fprintf(stderr, "Invalid Protocol Descriptor List. " \
+ "Too long, len=%d\n", len);
+ return;
+ }
+
while (start < end) {
SDP_GET8(type, start);
switch (type) {
@@ -364,6 +379,12 @@ print_protocol_descriptor_list(uint8_t const *start, uint8_t const *end)
/* NOT REACHED */
}
+ if (len > (end - start)) {
+ fprintf(stderr, "Invalid Protocol Descriptor List. " \
+ "Too long, len=%d\n", len);
+ return;
+ }
+
print_protocol_descriptor(start, start + len);
start += len;
}
@@ -416,6 +437,12 @@ print_bluetooth_profile_descriptor_list(uint8_t const *start, uint8_t const *end
/* NOT REACHED */
}
+ if (len > (end - start)) {
+ fprintf(stderr, "Invalid Bluetooth Profile Descriptor List. " \
+ "Too long, len=%d\n", len);
+ return;
+ }
+
while (start < end) {
SDP_GET8(type, start);
switch (type) {
@@ -439,6 +466,13 @@ print_bluetooth_profile_descriptor_list(uint8_t const *start, uint8_t const *end
/* NOT REACHED */
}
+ if (len > (end - start)) {
+ fprintf(stderr, "Invalid Bluetooth Profile " \
+ "Descriptor List. " \
+ "Too long, len=%d\n", len);
+ return;
+ }
+
/* Get UUID */
SDP_GET8(type, start);
switch (type) {
diff --git a/usr.sbin/bsdconfig/bsdconfig b/usr.sbin/bsdconfig/bsdconfig
index 62699f2..993865c 100755
--- a/usr.sbin/bsdconfig/bsdconfig
+++ b/usr.sbin/bsdconfig/bsdconfig
@@ -131,7 +131,7 @@ usage()
# determine if we can use more than one column to display commands.
#
local x=$longest_cmd ncols=1
- x=$(( $x + 8 )) # Accomodate leading tab character
+ x=$(( $x + 8 )) # Accommodate leading tab character
x=$(( $x + 3 + $longest_cmd )) # Preload end of next column
while [ $x -lt $max_width ]; do
ncols=$(( $ncols + 1 ))
diff --git a/usr.sbin/config/config.h b/usr.sbin/config/config.h
index 93b2086..703d053 100644
--- a/usr.sbin/config/config.h
+++ b/usr.sbin/config/config.h
@@ -50,7 +50,7 @@ struct file_list {
int f_type; /* type */
u_char f_flags; /* see below */
char *f_compilewith; /* special make rule if present */
- char *f_depends; /* additional dependancies */
+ char *f_depends; /* additional dependencies */
char *f_clean; /* File list to add to clean rule */
char *f_warn; /* warning message */
const char *f_objprefix; /* prefix string for object name */
diff --git a/usr.sbin/ctld/ctld.c b/usr.sbin/ctld/ctld.c
index 4813ae0..2551b37 100644
--- a/usr.sbin/ctld/ctld.c
+++ b/usr.sbin/ctld/ctld.c
@@ -2028,7 +2028,7 @@ conf_apply(struct conf *oldconf, struct conf *newconf)
}
/*
- * Go through the new portals, opening the sockets as neccessary.
+ * Go through the new portals, opening the sockets as necessary.
*/
TAILQ_FOREACH(newpg, &newconf->conf_portal_groups, pg_next) {
if (newpg->pg_foreign)
diff --git a/usr.sbin/fwcontrol/fwmpegts.c b/usr.sbin/fwcontrol/fwmpegts.c
index 4f84789..ae9a52b 100644
--- a/usr.sbin/fwcontrol/fwmpegts.c
+++ b/usr.sbin/fwcontrol/fwmpegts.c
@@ -119,7 +119,7 @@ bandwidth (R):
2) 1.5 < R < 3 Mbps: db0/db1 or db2/db3 or db4/db5 or db6/db7 is payload,
3) 3 < R < 6 Mbps: db0/db1/db2/db3 or db4/db5/db6/db7 is payload,
4) R > 6 Mbps: all db0..db7 contain the payload.
-Curently, only case (4) is supported in fwmpegts.c
+Currently, only case (4) is supported in fwmpegts.c
Each packet may contain N MPEG TS data blocks with timestamp header,
which are (4+188)B long. Experimentally, the N ranges from 0 through 3.
diff --git a/usr.sbin/jail/command.c b/usr.sbin/jail/command.c
index f6f9db3..f162c3c 100644
--- a/usr.sbin/jail/command.c
+++ b/usr.sbin/jail/command.c
@@ -761,7 +761,7 @@ add_proc(struct cfjail *j, pid_t pid)
if (j->timeout.tv_sec == 0)
requeue(j, &sleeping);
else {
- /* File the jail in the sleep queue acording to its timeout. */
+ /* File the jail in the sleep queue according to its timeout. */
TAILQ_REMOVE(j->queue, j, tq);
TAILQ_FOREACH(tj, &sleeping, tq) {
if (!tj->timeout.tv_sec ||
diff --git a/usr.sbin/jail/jailp.h b/usr.sbin/jail/jailp.h
index d2c929e..4498f4b 100644
--- a/usr.sbin/jail/jailp.h
+++ b/usr.sbin/jail/jailp.h
@@ -41,7 +41,7 @@
#define DF_SEEN 0x01 /* Dependency has been followed */
#define DF_LIGHT 0x02 /* Implied dependency on jail existence only */
-#define DF_NOFAIL 0x04 /* Don't propigate failed jails */
+#define DF_NOFAIL 0x04 /* Don't propagate failed jails */
#define PF_VAR 0x01 /* This is a variable, not a true parameter */
#define PF_APPEND 0x02 /* Append to existing parameter list */
diff --git a/usr.sbin/jail/jailparse.y b/usr.sbin/jail/jailparse.y
index 2df337f..d085eb8 100644
--- a/usr.sbin/jail/jailparse.y
+++ b/usr.sbin/jail/jailparse.y
@@ -103,7 +103,7 @@ param_l :
/*
* Parameters have a name and an optional list of value strings,
- * which may have "+=" or "=" preceeding them.
+ * which may have "+=" or "=" preceding them.
*/
param : name
{
diff --git a/usr.sbin/jls/jls.c b/usr.sbin/jls/jls.c
index b1e28fb..fbd1694 100644
--- a/usr.sbin/jls/jls.c
+++ b/usr.sbin/jls/jls.c
@@ -220,7 +220,7 @@ main(int argc, char **argv)
putchar('\n');
}
- /* Fetch the jail(s) and print the paramters. */
+ /* Fetch the jail(s) and print the parameters. */
if (jid != 0 || jname != NULL) {
if (print_jail(pflags, jflags) < 0)
errx(1, "%s", jail_errmsg);
diff --git a/usr.sbin/makefs/Makefile b/usr.sbin/makefs/Makefile
index 882fe45..7a0ebf0 100644
--- a/usr.sbin/makefs/Makefile
+++ b/usr.sbin/makefs/Makefile
@@ -1,5 +1,7 @@
# $FreeBSD$
+.include <src.opts.mk>
+
PROG= makefs
CFLAGS+=-I${.CURDIR}
@@ -32,4 +34,8 @@ SRCS+= ffs_tables.c
CFLAGS+= -I${.CURDIR}/../../lib/libnetbsd
LIBADD= netbsd util sbuf
+.if ${MK_TESTS} != "no"
+SUBDIR+= tests
+.endif
+
.include <bsd.prog.mk>
diff --git a/usr.sbin/makefs/cd9660.c b/usr.sbin/makefs/cd9660.c
index f0e2f38..b5be469 100644
--- a/usr.sbin/makefs/cd9660.c
+++ b/usr.sbin/makefs/cd9660.c
@@ -163,7 +163,7 @@ static cd9660node *cd9660_create_special_directory(u_char, cd9660node *);
/*
- * Allocate and initalize a cd9660node
+ * Allocate and initialize a cd9660node
* @returns struct cd9660node * Pointer to new node, or NULL on error
*/
static cd9660node *
@@ -428,8 +428,7 @@ cd9660_parse_opts(const char *option, fsinfo_t *fsopts)
rv = set_option(cd9660_options, var, val);
}
- if (var)
- free(var);
+ free(var);
return (rv);
}
diff --git a/usr.sbin/makefs/cd9660/cd9660_write.c b/usr.sbin/makefs/cd9660/cd9660_write.c
index f27a76f..e17752a 100644
--- a/usr.sbin/makefs/cd9660/cd9660_write.c
+++ b/usr.sbin/makefs/cd9660/cd9660_write.c
@@ -165,7 +165,7 @@ cd9660_write_path_table(FILE *fd, off_t sector, int mode)
diskStructure.pathTableLength);
unsigned char *buffer;
unsigned char *buffer_head;
- int len;
+ int len, ret;
path_table_entry temp_entry;
cd9660node *ptcur;
@@ -213,8 +213,10 @@ cd9660_write_path_table(FILE *fd, off_t sector, int mode)
ptcur = ptcur->ptnext;
}
- return cd9660_write_filedata(fd, sector, buffer_head,
+ ret = cd9660_write_filedata(fd, sector, buffer_head,
path_table_sectors);
+ free(buffer_head);
+ return ret;
}
diff --git a/usr.sbin/makefs/cd9660/iso9660_rrip.c b/usr.sbin/makefs/cd9660/iso9660_rrip.c
index 5382857..749747b 100644
--- a/usr.sbin/makefs/cd9660/iso9660_rrip.c
+++ b/usr.sbin/makefs/cd9660/iso9660_rrip.c
@@ -1,4 +1,4 @@
-/* $NetBSD: iso9660_rrip.c,v 1.11 2012/04/29 13:32:21 joerg Exp $ */
+/* $NetBSD: iso9660_rrip.c,v 1.14 2014/05/30 13:14:47 martin Exp $ */
/*
* Copyright (c) 2005 Daniel Watt, Walter Deignan, Ryan Gabrys, Alan
@@ -656,13 +656,14 @@ cd9660node_rrip_pn(struct ISO_SUSP_ATTRIBUTES *pn_field, fsnode *fnode)
pn_field->attr.rr_entry.PN.h.length[0] = 20;
pn_field->attr.rr_entry.PN.h.version[0] = 1;
- if (sizeof (fnode->inode->st.st_dev) > 32)
- cd9660_bothendian_dword((uint64_t)fnode->inode->st.st_dev >> 32,
+ if (sizeof (fnode->inode->st.st_rdev) > 4)
+ cd9660_bothendian_dword(
+ (uint64_t)fnode->inode->st.st_rdev >> 32,
pn_field->attr.rr_entry.PN.high);
else
cd9660_bothendian_dword(0, pn_field->attr.rr_entry.PN.high);
- cd9660_bothendian_dword(fnode->inode->st.st_dev & 0xffffffff,
+ cd9660_bothendian_dword(fnode->inode->st.st_rdev & 0xffffffff,
pn_field->attr.rr_entry.PN.low);
return 1;
}
diff --git a/usr.sbin/makefs/makefs.8 b/usr.sbin/makefs/makefs.8
index 025066d..edecd4a 100644
--- a/usr.sbin/makefs/makefs.8
+++ b/usr.sbin/makefs/makefs.8
@@ -35,7 +35,7 @@
.\"
.\" $FreeBSD$
.\"
-.Dd August 16, 2013
+.Dd October 29, 2015
.Dt MAKEFS 8
.Os
.Sh NAME
@@ -53,7 +53,7 @@
.Op Fl m Ar maximum-size
.Op Fl N Ar userdb-dir
.Op Fl o Ar fs-options
-.Op Fl r Ar roundup
+.Op Fl R Ar roundup-size
.Op Fl S Ar sector-size
.Op Fl s Ar image-size
.Op Fl t Ar fs-type
@@ -196,9 +196,14 @@ Deprecated.
See the
.Fl Z
flag.
-.It Fl r Ar roundup
-Round the image up to specified block size that should be multiple
-of block size.
+.It Fl R Ar roundup-size
+Round the image up to
+.Ar roundup-size .
+.Ar roundup-size
+should be a multiple of the file system block size.
+This option only applies to the
+.Sy ffs
+file system type.
.It Fl S Ar sector-size
Set the file system sector size to
.Ar sector-size .
diff --git a/usr.sbin/makefs/makefs.c b/usr.sbin/makefs/makefs.c
index 5e419cc..bca9722 100644
--- a/usr.sbin/makefs/makefs.c
+++ b/usr.sbin/makefs/makefs.c
@@ -209,10 +209,10 @@ main(int argc, char *argv[])
fsoptions.sparse = 1;
break;
- case 'r':
+ case 'R':
/* Round image size up to specified block size */
fsoptions.roundup =
- strsuftoll("roundup", optarg, 0, LLONG_MAX);
+ strsuftoll("roundup-size", optarg, 0, LLONG_MAX);
break;
case 's':
@@ -365,7 +365,7 @@ usage(void)
prog = getprogname();
fprintf(stderr,
"usage: %s [-t fs-type] [-o fs-options] [-d debug-mask] [-B endian]\n"
-"\t[-S sector-size] [-M minimum-size] [-m maximum-size] [-r roundup ]\n"
+"\t[-S sector-size] [-M minimum-size] [-m maximum-size] [-R roundup-size]\n"
"\t[-s image-size] [-b free-blocks] [-f free-files] [-F mtree-specfile]\n"
"\t[-xZ] [-N userdb-dir] image-file directory | manifest [extra-directory ...]\n",
prog);
diff --git a/usr.sbin/makefs/tests/Makefile b/usr.sbin/makefs/tests/Makefile
new file mode 100644
index 0000000..4373277
--- /dev/null
+++ b/usr.sbin/makefs/tests/Makefile
@@ -0,0 +1,15 @@
+# $FreeBSD$
+
+ATF_TESTS_SH+= makefs_cd9660_tests
+ATF_TESTS_SH+= makefs_ffs_tests
+
+BINDIR= ${TESTSDIR}
+
+SCRIPTS+= makefs_tests_common.sh
+SCRIPTSNAME_makefs_tests_common.sh= makefs_tests_common.sh
+
+.for t in ${ATF_TESTS_SH}
+TEST_METADATA.$t+= required_user="root"
+.endfor
+
+.include <bsd.test.mk>
diff --git a/usr.sbin/makefs/tests/makefs_cd9660_tests.sh b/usr.sbin/makefs/tests/makefs_cd9660_tests.sh
new file mode 100755
index 0000000..e476cf1
--- /dev/null
+++ b/usr.sbin/makefs/tests/makefs_cd9660_tests.sh
@@ -0,0 +1,315 @@
+#
+# Copyright 2015 EMC Corp.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+# $FreeBSD$
+#
+
+# A note on specs:
+# - A copy of the ISO-9660 spec can be found here:
+# http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-119.pdf
+# - Any references to `rockridge` are referring to the `Rock Ridge` extensions
+# of the ISO-9660 spec. A copy of the draft `IEEE-P1282` spec can be found
+# here:
+# http://www.ymi.com/ymi/sites/default/files/pdf/Rockridge.pdf
+
+MAKEFS="makefs -t cd9660"
+MOUNT="mount_cd9660"
+
+. "$(dirname "$0")/makefs_tests_common.sh"
+
+common_cleanup()
+{
+ if ! test_md_device=$(cat $TEST_MD_DEVICE_FILE); then
+ echo "$TEST_MD_DEVICE_FILE could not be opened; has an md(4) device been attached?"
+ return
+ fi
+
+ umount -f /dev/$test_md_device || :
+ mdconfig -d -u $test_md_device || :
+}
+
+check_base_iso9660_image_contents()
+{
+ # Symlinks are treated like files when rockridge support isn't
+ # specified
+ check_image_contents "$@" -X c
+
+ atf_check -e empty -o empty -s exit:0 test -L $TEST_INPUTS_DIR/c
+ atf_check -e empty -o empty -s exit:0 test -f $TEST_MOUNT_DIR/c
+}
+
+atf_test_case D_flag cleanup
+D_flag_body()
+{
+ atf_skip "makefs crashes with SIGBUS with dupe mtree entries; see FreeBSD bug # 192839"
+
+ create_test_inputs
+
+ atf_check -e empty -o save:$TEST_SPEC_FILE -s exit:0 \
+ mtree -cp $TEST_INPUTS_DIR
+ atf_check -e empty -o not-empty -s exit:0 \
+ $MAKEFS -F $TEST_SPEC_FILE -M 1m $TEST_IMAGE $TEST_INPUTS_DIR
+
+ atf_check -e empty -o empty -s exit:0 \
+ cp $TEST_SPEC_FILE spec2.mtree
+ atf_check -e empty -o save:dupe_$TEST_SPEC_FILE -s exit:0 \
+ cat $TEST_SPEC_FILE spec2.mtree
+
+ atf_check -e empty -o not-empty -s not-exit:0 \
+ $MAKEFS -F dupe_$TEST_SPEC_FILE -M 1m $TEST_IMAGE $TEST_INPUTS_DIR
+ atf_check -e empty -o not-empty -s exit:0 \
+ $MAKEFS -D -F dupe_$TEST_SPEC_FILE -M 1m $TEST_IMAGE $TEST_INPUTS_DIR
+}
+D_flag_cleanup()
+{
+ common_cleanup
+}
+
+atf_test_case F_flag cleanup
+F_flag_body()
+{
+ create_test_inputs
+
+ atf_check -e empty -o save:$TEST_SPEC_FILE -s exit:0 \
+ mtree -cp $TEST_INPUTS_DIR
+
+ atf_check -e empty -o empty -s exit:0 \
+ $MAKEFS -F $TEST_SPEC_FILE -M 1m $TEST_IMAGE $TEST_INPUTS_DIR
+
+ mount_image
+ check_base_iso9660_image_contents
+}
+F_flag_cleanup()
+{
+ common_cleanup
+}
+
+atf_test_case from_mtree_spec_file cleanup
+from_mtree_spec_file_body()
+{
+ create_test_inputs
+
+ atf_check -e empty -o save:$TEST_SPEC_FILE -s exit:0 \
+ mtree -c -k type,link,size -p $TEST_INPUTS_DIR
+ cd $TEST_INPUTS_DIR
+ atf_check -e empty -o empty -s exit:0 \
+ $MAKEFS $TEST_IMAGE $TEST_SPEC_FILE
+ cd -
+
+ mount_image
+ check_base_iso9660_image_contents
+}
+from_mtree_spec_file_cleanup()
+{
+ common_cleanup
+}
+
+atf_test_case from_multiple_dirs cleanup
+from_multiple_dirs_body()
+{
+ test_inputs_dir2=$TMPDIR/inputs2
+
+ create_test_inputs
+
+ atf_check -e empty -o empty -s exit:0 mkdir -p $test_inputs_dir2
+ atf_check -e empty -o empty -s exit:0 \
+ touch $test_inputs_dir2/multiple_dirs_test_file
+
+ atf_check -e empty -o empty -s exit:0 \
+ $MAKEFS $TEST_IMAGE $TEST_INPUTS_DIR $test_inputs_dir2
+
+ mount_image
+ check_base_iso9660_image_contents -d $test_inputs_dir2
+}
+from_multiple_dirs_cleanup()
+{
+ common_cleanup
+}
+
+atf_test_case from_single_dir cleanup
+from_single_dir_body()
+{
+ create_test_inputs
+
+ atf_check -e empty -o empty -s exit:0 \
+ $MAKEFS $TEST_IMAGE $TEST_INPUTS_DIR
+
+ mount_image
+ check_base_iso9660_image_contents
+}
+from_single_dir_cleanup()
+{
+ common_cleanup
+}
+
+atf_test_case o_flag_allow_deep_trees cleanup
+o_flag_allow_deep_trees_body()
+{
+ create_test_inputs
+
+ # Make sure the "more than 8 levels deep" requirement is met.
+ atf_check -e empty -o empty -s exit:0 \
+ mkdir -p $TEST_INPUTS_DIR/a/b/c/d/e/f/g/h/i/j
+
+ atf_check -e empty -o empty -s exit:0 \
+ $MAKEFS -o allow-deep-trees $TEST_IMAGE $TEST_INPUTS_DIR
+
+ mount_image
+ check_base_iso9660_image_contents
+}
+o_flag_allow_deep_trees_cleanup()
+{
+ common_cleanup
+}
+
+atf_test_case o_flag_allow_max_name cleanup
+o_flag_allow_max_name_body()
+{
+ atf_expect_fail "-o allow-max-name doesn't appear to be implemented on FreeBSD's copy of makefs [yet]"
+
+ create_test_inputs
+
+ long_path=$TEST_INPUTS_DIR/$(jot -s '' -b 0 37)
+
+ # Make sure the "37 char name" limit requirement is met.
+ atf_check -e empty -o empty -s exit:0 touch $long_path
+
+ atf_check -e empty -o empty -s exit:0 \
+ $MAKEFS -o allow-max-name $TEST_IMAGE $TEST_INPUTS_DIR
+
+ mount_image
+ check_base_iso9660_image_contents
+}
+o_flag_allow_max_name_cleanup()
+{
+ common_cleanup
+}
+
+atf_test_case o_flag_preparer
+o_flag_preparer_body()
+{
+ create_test_dirs
+
+ preparer='My Very First ISO'
+ preparer_uppercase="$(echo $preparer | tr '[[:lower:]]' '[[:upper:]]')"
+
+ atf_check -e empty -o empty -s exit:0 touch $TEST_INPUTS_DIR/dummy_file
+ atf_check -e empty -o empty -s exit:0 \
+ $MAKEFS -o preparer="$preparer" $TEST_IMAGE $TEST_INPUTS_DIR
+ atf_check -e empty -o match:"$preparer_uppercase" -s exit:0 \
+ strings $TEST_IMAGE
+}
+
+atf_test_case o_flag_publisher
+o_flag_publisher_body()
+{
+ create_test_dirs
+
+ publisher='My Super Awesome Publishing Company LTD'
+ publisher_uppercase="$(echo $publisher | tr '[[:lower:]]' '[[:upper:]]')"
+
+ atf_check -e empty -o empty -s exit:0 touch $TEST_INPUTS_DIR/dummy_file
+ atf_check -e empty -o empty -s exit:0 \
+ $MAKEFS -o publisher="$publisher" $TEST_IMAGE $TEST_INPUTS_DIR
+ atf_check -e empty -o match:"$publisher_uppercase" -s exit:0 \
+ strings $TEST_IMAGE
+}
+
+atf_test_case o_flag_rockridge cleanup
+o_flag_rockridge_body()
+{
+ create_test_dirs
+
+ # Make sure the "more than 8 levels deep" requirement is met.
+ atf_check -e empty -o empty -s exit:0 \
+ mkdir -p $TEST_INPUTS_DIR/a/b/c/d/e/f/g/h/i/j
+
+ # Make sure the "pathname larger than 255 chars" requirement is met.
+ #
+ # $long_path's needs to be nested in a directory, as creating it
+ # outright as a 256 char filename via touch will fail with ENAMETOOLONG
+ long_path=$TEST_INPUTS_DIR/$(jot -s '/' -b "$(jot -s '' -b 0 64)" 4)
+ atf_check -e empty -o empty -s exit:0 mkdir -p "$(dirname $long_path)"
+ atf_check -e empty -o empty -s exit:0 touch "$long_path"
+
+ atf_check -e empty -o empty -s exit:0 \
+ $MAKEFS -o rockridge $TEST_IMAGE $TEST_INPUTS_DIR
+
+ mount_image
+ check_image_contents -X .rr_moved
+
+ # .rr_moved is a special directory created when you have deep directory
+ # trees with rock ridge extensions on
+ atf_check -e empty -o empty -s exit:0 \
+ test -d $TEST_MOUNT_DIR/.rr_moved
+}
+o_flag_rockridge_cleanup()
+{
+ common_cleanup
+}
+
+atf_test_case o_flag_rockridge_dev_nodes cleanup
+o_flag_rockridge_dev_nodes_head()
+{
+ atf_set "descr" "Functional tests to ensure that dev nodes are handled properly with rockridge extensions (NetBSD kern/48852; FreeBSD bug 203648)"
+}
+o_flag_rockridge_dev_nodes_body()
+{
+ create_test_dirs
+
+ (tar -cvf - -C /dev null && touch .tar_ok) | \
+ atf_check -e not-empty -o empty -s exit:0 tar -xvf - -C "$TEST_INPUTS_DIR"
+
+ atf_check -e empty -o empty -s exit:0 test -c $TEST_INPUTS_DIR/null
+ atf_check -e empty -o empty -s exit:0 test -f .tar_ok
+
+ atf_check -e empty -o empty -s exit:0 \
+ $MAKEFS -o rockridge $TEST_IMAGE $TEST_INPUTS_DIR
+
+ mount_image
+ check_image_contents
+}
+o_flag_rockridge_dev_nodes_cleanup()
+{
+ common_cleanup
+}
+
+atf_init_test_cases()
+{
+ atf_add_test_case D_flag
+ atf_add_test_case F_flag
+
+ atf_add_test_case from_mtree_spec_file
+ atf_add_test_case from_multiple_dirs
+ atf_add_test_case from_single_dir
+
+ atf_add_test_case o_flag_allow_deep_trees
+ atf_add_test_case o_flag_allow_max_name
+ atf_add_test_case o_flag_preparer
+ atf_add_test_case o_flag_publisher
+ atf_add_test_case o_flag_rockridge
+ atf_add_test_case o_flag_rockridge_dev_nodes
+}
diff --git a/usr.sbin/makefs/tests/makefs_ffs_tests.sh b/usr.sbin/makefs/tests/makefs_ffs_tests.sh
new file mode 100755
index 0000000..4bc3f5c
--- /dev/null
+++ b/usr.sbin/makefs/tests/makefs_ffs_tests.sh
@@ -0,0 +1,172 @@
+#
+# Copyright 2015 EMC Corp.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+# $FreeBSD$
+#
+
+MAKEFS="makefs -t ffs"
+MOUNT="mount"
+
+. "$(dirname "$0")/makefs_tests_common.sh"
+
+TEST_TUNEFS_OUTPUT=$TMPDIR/tunefs.output
+
+common_cleanup()
+{
+ if ! test_md_device=$(cat $TEST_MD_DEVICE_FILE); then
+ echo "$TEST_MD_DEVICE_FILE could not be opened; has an md(4) device been attached?"
+ return
+ fi
+
+ umount -f /dev/$test_md_device || :
+ mdconfig -d -u $test_md_device || :
+}
+
+check_ffs_image_contents()
+{
+ atf_check -e save:$TEST_TUNEFS_OUTPUT -o empty -s exit:0 \
+ tunefs -p /dev/$(cat $TEST_MD_DEVICE_FILE)
+
+ check_image_contents "$@"
+}
+
+atf_test_case D_flag cleanup
+D_flag_body()
+{
+ atf_skip "makefs crashes with SIGBUS with dupe mtree entries; see FreeBSD bug # 192839"
+
+ create_test_inputs
+
+ atf_check -e empty -o save:$TEST_SPEC_FILE -s exit:0 \
+ mtree -cp $TEST_INPUTS_DIR
+ atf_check -e empty -o not-empty -s exit:0 \
+ $MAKEFS -F $TEST_SPEC_FILE -M 1m $TEST_IMAGE $TEST_INPUTS_DIR
+
+ atf_check -e empty -o empty -s exit:0 \
+ cp $TEST_SPEC_FILE spec2.mtree
+ atf_check -e empty -o save:dupe_$TEST_SPEC_FILE -s exit:0 \
+ cat $TEST_SPEC_FILE spec2.mtree
+
+ atf_check -e empty -o not-empty -s not-exit:0 \
+ $MAKEFS -F dupe_$TEST_SPEC_FILE -M 1m $TEST_IMAGE $TEST_INPUTS_DIR
+ atf_check -e empty -o not-empty -s exit:0 \
+ $MAKEFS -D -F dupe_$TEST_SPEC_FILE -M 1m $TEST_IMAGE $TEST_INPUTS_DIR
+}
+D_flag_cleanup()
+{
+ common_cleanup
+}
+
+atf_test_case F_flag cleanup
+F_flag_body()
+{
+ create_test_inputs
+
+ atf_check -e empty -o save:$TEST_SPEC_FILE -s exit:0 \
+ mtree -cp $TEST_INPUTS_DIR
+
+ atf_check -e empty -o not-empty -s exit:0 \
+ $MAKEFS -F $TEST_SPEC_FILE -M 1m $TEST_IMAGE $TEST_INPUTS_DIR
+
+ mount_image
+ check_ffs_image_contents
+}
+F_flag_cleanup()
+{
+ common_cleanup
+}
+
+atf_test_case from_mtree_spec_file cleanup
+from_mtree_spec_file_body()
+{
+ create_test_inputs
+
+ atf_check -e empty -o save:$TEST_SPEC_FILE -s exit:0 \
+ mtree -c -k type,link,size -p $TEST_INPUTS_DIR
+
+ cd $TEST_INPUTS_DIR
+ atf_check -e empty -o not-empty -s exit:0 \
+ $MAKEFS $TEST_IMAGE $TEST_SPEC_FILE
+ cd -
+
+ mount_image
+ check_ffs_image_contents
+}
+from_mtree_spec_file_cleanup()
+{
+ common_cleanup
+}
+
+atf_test_case from_multiple_dirs cleanup
+from_multiple_dirs_body()
+{
+ test_inputs_dir2=$TMPDIR/inputs2
+
+ create_test_inputs
+
+ atf_check -e empty -o empty -s exit:0 mkdir -p $test_inputs_dir2
+ atf_check -e empty -o empty -s exit:0 \
+ touch $test_inputs_dir2/multiple_dirs_test_file
+
+ atf_check -e empty -o not-empty -s exit:0 \
+ $MAKEFS $TEST_IMAGE $TEST_INPUTS_DIR $test_inputs_dir2
+
+ mount_image
+ check_image_contents -d $test_inputs_dir2
+}
+from_multiple_dirs_cleanup()
+{
+ common_cleanup
+}
+
+atf_test_case from_single_dir cleanup
+from_single_dir_body()
+{
+ create_test_inputs
+
+ atf_check -e empty -o not-empty -s exit:0 \
+ $MAKEFS -M 1m $TEST_IMAGE $TEST_INPUTS_DIR
+
+ mount_image
+ check_ffs_image_contents
+}
+from_single_dir_cleanup()
+{
+ common_cleanup
+}
+
+atf_init_test_cases()
+{
+
+ atf_add_test_case D_flag
+ atf_add_test_case F_flag
+
+ atf_add_test_case from_mtree_spec_file
+ atf_add_test_case from_multiple_dirs
+ atf_add_test_case from_single_dir
+
+
+}
diff --git a/usr.sbin/makefs/tests/makefs_tests_common.sh b/usr.sbin/makefs/tests/makefs_tests_common.sh
new file mode 100755
index 0000000..d0099fd
--- /dev/null
+++ b/usr.sbin/makefs/tests/makefs_tests_common.sh
@@ -0,0 +1,145 @@
+#
+# Copyright 2015 EMC Corp.
+# All rights reserved.
+#
+# Redistribution and use in source and binary forms, with or without
+# modification, are permitted provided that the following conditions are
+# met:
+#
+# * Redistributions of source code must retain the above copyright
+# notice, this list of conditions and the following disclaimer.
+# * Redistributions in binary form must reproduce the above copyright
+# notice, this list of conditions and the following disclaimer in the
+# documentation and/or other materials provided with the distribution.
+#
+# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+#
+# $FreeBSD$
+#
+
+KB=1024
+: ${TMPDIR=/tmp}
+TEST_IMAGE="$TMPDIR/test.img"
+TEST_INPUTS_DIR="$TMPDIR/inputs"
+TEST_MD_DEVICE_FILE="$TMPDIR/md.output"
+TEST_MOUNT_DIR="$TMPDIR/mnt"
+TEST_SPEC_FILE="$TMPDIR/mtree.spec"
+
+check_image_contents()
+{
+ local directories=$TEST_INPUTS_DIR
+ local excludes mtree_excludes_arg mtree_file
+ local mtree_keywords="type,link,size"
+
+ while getopts "d:f:m:X:" flag; do
+ case "$flag" in
+ d)
+ directories="$directories $OPTARG"
+ ;;
+ f)
+ mtree_file=$OPTARG
+ ;;
+ m)
+ mtree_keywords=$OPTARG
+ ;;
+ X)
+ excludes="$excludes $OPTARG"
+ ;;
+ *)
+ echo "usage: check_image_contents [-d directory ...] [-f mtree-file] [-m mtree-keywords] [-X exclude]"
+ atf_fail "unhandled option: $flag"
+ ;;
+ esac
+ done
+
+ if [ -n "$excludes" ]; then
+ echo "$excludes" | tr ' ' '\n' > excludes.txt
+ mtree_excludes_arg="-X excludes.txt"
+ fi
+
+ if [ -z "$mtree_file" ]; then
+ mtree_file=input_spec.mtree
+ for directory in $directories; do
+ mtree -c -k $mtree_keywords -p $directory $mtree_excludes_arg
+ done > $mtree_file
+ fi
+
+ echo "<---- Input spec BEGIN ---->"
+ cat $mtree_file
+ echo "<---- Input spec END ---->"
+ atf_check -e empty -o empty -s exit:0 \
+ mtree -UW -f $mtree_file \
+ -p $TEST_MOUNT_DIR \
+ $mtree_excludes_arg
+}
+
+create_test_dirs()
+{
+ atf_check -e empty -s exit:0 mkdir -m 0777 -p $TEST_MOUNT_DIR
+ atf_check -e empty -s exit:0 mkdir -m 0777 -p $TEST_INPUTS_DIR
+}
+
+create_test_inputs()
+{
+ create_test_dirs
+
+ cd $TEST_INPUTS_DIR
+
+ atf_check -e empty -s exit:0 mkdir -m 0755 -p a/b/1
+ atf_check -e empty -s exit:0 ln -s a/b c
+ atf_check -e empty -s exit:0 touch d
+ atf_check -e empty -s exit:0 ln d e
+ atf_check -e empty -s exit:0 touch .f
+ atf_check -e empty -s exit:0 mkdir .g
+ # XXX: fifos on the filesystem don't match fifos created by makefs for
+ # some odd reason.
+ #atf_check -e empty -s exit:0 mkfifo h
+ atf_check -e ignore -s exit:0 dd if=/dev/zero of=i count=1000 bs=1
+ atf_check -e empty -s exit:0 touch klmn
+ atf_check -e empty -s exit:0 touch opqr
+ atf_check -e empty -s exit:0 touch stuv
+ atf_check -e empty -s exit:0 install -m 0755 /dev/null wxyz
+ atf_check -e empty -s exit:0 touch 0b00000001
+ atf_check -e empty -s exit:0 touch 0b00000010
+ atf_check -e empty -s exit:0 touch 0b00000011
+ atf_check -e empty -s exit:0 touch 0b00000100
+ atf_check -e empty -s exit:0 touch 0b00000101
+ atf_check -e empty -s exit:0 touch 0b00000110
+ atf_check -e empty -s exit:0 touch 0b00000111
+ atf_check -e empty -s exit:0 touch 0b00001000
+ atf_check -e empty -s exit:0 touch 0b00001001
+ atf_check -e empty -s exit:0 touch 0b00001010
+ atf_check -e empty -s exit:0 touch 0b00001011
+ atf_check -e empty -s exit:0 touch 0b00001100
+ atf_check -e empty -s exit:0 touch 0b00001101
+ atf_check -e empty -s exit:0 touch 0b00001110
+
+ for filesize in 1 512 $(( 2 * $KB )) $(( 10 * $KB )) $(( 512 * $KB )); \
+ do
+ atf_check -e ignore -o empty -s exit:0 \
+ dd if=/dev/zero of=${filesize}.file bs=1 \
+ count=1 oseek=${filesize} conv=sparse
+ files="${files} ${filesize}.file"
+ done
+
+ cd -
+}
+
+mount_image()
+{
+ atf_check -e empty -o save:$TEST_MD_DEVICE_FILE -s exit:0 \
+ mdconfig -a -f $TEST_IMAGE
+ atf_check -e empty -o empty -s exit:0 \
+ $MOUNT /dev/$(cat $TEST_MD_DEVICE_FILE) $TEST_MOUNT_DIR
+}
+
diff --git a/usr.sbin/mfiutil/mfiutil.8 b/usr.sbin/mfiutil/mfiutil.8
index e999c77..e3adc0b 100644
--- a/usr.sbin/mfiutil/mfiutil.8
+++ b/usr.sbin/mfiutil/mfiutil.8
@@ -607,25 +607,25 @@ Scan for foreign configurations and display the number found. The
argument for the commands below takes the form of a number from 0 to the total
configurations found.
.It Cm foreign clear Op config
-Clear the specifed foreign
+Clear the specified foreign
.Ar config
or all if no
.Ar config
argument is provided.
.It Cm foreign diag Op config
-Display a diagnostic display of the specifed foreign
+Display a diagnostic display of the specified foreign
.Ar config
or all if no
.Ar config
argument is provided.
.It Cm foreign preview Op config
-Preview the specifed foreign
+Preview the specified foreign
.Ar config
after import or all if no
.Ar config
argument is provided.
.It Cm foreign import Op config
-Import the specifed foreign
+Import the specified foreign
.Ar config
or all if no
.Ar config
diff --git a/usr.sbin/mpsutil/Makefile b/usr.sbin/mpsutil/Makefile
new file mode 100644
index 0000000..b559b7f
--- /dev/null
+++ b/usr.sbin/mpsutil/Makefile
@@ -0,0 +1,22 @@
+# $FreeBSD$
+
+PROG= mpsutil
+SRCS= mpsutil.c mps_cmd.c mps_show.c
+MAN= mpsutil.8
+
+WARNS?= 3
+
+#LIBADD= cam util
+LINKS= ${BINDIR}/mpsutil ${BINDIR}/mprutil
+MLINKS= mpsutil.8 mprutil.8
+
+CFLAGS+= -I${.CURDIR}/../../sys -I. -DUSE_MPT_IOCTLS
+# Avoid dirdep dependency on libutil
+CFLAGS+= -I${SRCTOP}/lib/libutil
+
+# Here be dragons
+.ifdef DEBUG
+CFLAGS+= -DDEBUG
+.endif
+
+.include <bsd.prog.mk>
diff --git a/lib/libgpib/Makefile.depend b/usr.sbin/mpsutil/Makefile.depend
index 3699b06..3646e2e 100644
--- a/lib/libgpib/Makefile.depend
+++ b/usr.sbin/mpsutil/Makefile.depend
@@ -5,10 +5,10 @@ DIRDEPS = \
gnu/lib/csu \
gnu/lib/libgcc \
include \
+ include/xlocale \
lib/${CSU_DIR} \
lib/libc \
lib/libcompiler_rt \
- usr.bin/xinstall.host \
.include <dirdeps.mk>
diff --git a/usr.sbin/mpsutil/mpr_ioctl.h b/usr.sbin/mpsutil/mpr_ioctl.h
new file mode 100644
index 0000000..82627b9
--- /dev/null
+++ b/usr.sbin/mpsutil/mpr_ioctl.h
@@ -0,0 +1,388 @@
+/*-
+ * Copyright (c) 2008 Yahoo!, Inc.
+ * All rights reserved.
+ * Written by: John Baldwin <jhb@FreeBSD.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the author nor the names of any co-contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * LSI MPT-Fusion Host Adapter FreeBSD userland interface
+ *
+ * $FreeBSD$
+ */
+/*-
+ * Copyright (c) 2011-2014 LSI Corp.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * LSI MPT-Fusion Host Adapter FreeBSD
+ *
+ * $FreeBSD$
+ */
+
+#ifndef _MPR_IOCTL_H_
+#define _MPR_IOCTL_H_
+
+#include <dev/mpr/mpi/mpi2_type.h>
+#include <dev/mpr/mpi/mpi2.h>
+#include <dev/mpr/mpi/mpi2_cnfg.h>
+#include <dev/mpr/mpi/mpi2_sas.h>
+
+/*
+ * For the read header requests, the header should include the page
+ * type or extended page type, page number, and page version. The
+ * buffer and length are unused. The completed header is returned in
+ * the 'header' member.
+ *
+ * For the read page and write page requests, 'buf' should point to a
+ * buffer of 'len' bytes which holds the entire page (including the
+ * header).
+ *
+ * All requests specify the page address in 'page_address'.
+ */
+struct mpr_cfg_page_req {
+ MPI2_CONFIG_PAGE_HEADER header;
+ uint32_t page_address;
+ void *buf;
+ int len;
+ uint16_t ioc_status;
+};
+
+struct mpr_ext_cfg_page_req {
+ MPI2_CONFIG_EXTENDED_PAGE_HEADER header;
+ uint32_t page_address;
+ void *buf;
+ int len;
+ uint16_t ioc_status;
+};
+
+struct mpr_raid_action {
+ uint8_t action;
+ uint8_t volume_bus;
+ uint8_t volume_id;
+ uint8_t phys_disk_num;
+ uint32_t action_data_word;
+ void *buf;
+ int len;
+ uint32_t volume_status;
+ uint32_t action_data[4];
+ uint16_t action_status;
+ uint16_t ioc_status;
+ uint8_t write;
+};
+
+struct mpr_usr_command {
+ void *req;
+ uint32_t req_len;
+ void *rpl;
+ uint32_t rpl_len;
+ void *buf;
+ int len;
+ uint32_t flags;
+};
+
+typedef struct mpr_pci_bits
+{
+ union {
+ struct {
+ uint32_t DeviceNumber :5;
+ uint32_t FunctionNumber :3;
+ uint32_t BusNumber :24;
+ } bits;
+ uint32_t AsDWORD;
+ } u;
+ uint32_t PciSegmentId;
+} mpr_pci_bits_t;
+
+/*
+ * The following is the MPRIOCTL_GET_ADAPTER_DATA data structure. This data
+ * structure is setup so that we hopefully are properly aligned for both
+ * 32-bit and 64-bit mode applications.
+ *
+ * Adapter Type - Value = 6 = SCSI Protocol through SAS-3 adapter
+ *
+ * MPI Port Number - The PCI Function number for this device
+ *
+ * PCI Device HW Id - The PCI device number for this device
+ *
+ */
+#define MPRIOCTL_ADAPTER_TYPE_SAS3 6
+typedef struct mpr_adapter_data
+{
+ uint32_t StructureLength;
+ uint32_t AdapterType;
+ uint32_t MpiPortNumber;
+ uint32_t PCIDeviceHwId;
+ uint32_t PCIDeviceHwRev;
+ uint32_t SubSystemId;
+ uint32_t SubsystemVendorId;
+ uint32_t Reserved1;
+ uint32_t MpiFirmwareVersion;
+ uint32_t BiosVersion;
+ uint8_t DriverVersion[32];
+ uint8_t Reserved2;
+ uint8_t ScsiId;
+ uint16_t Reserved3;
+ mpr_pci_bits_t PciInformation;
+} mpr_adapter_data_t;
+
+
+typedef struct mpr_update_flash
+{
+ uint64_t PtrBuffer;
+ uint32_t ImageChecksum;
+ uint32_t ImageOffset;
+ uint32_t ImageSize;
+ uint32_t ImageType;
+} mpr_update_flash_t;
+
+
+#define MPR_PASS_THRU_DIRECTION_NONE 0
+#define MPR_PASS_THRU_DIRECTION_READ 1
+#define MPR_PASS_THRU_DIRECTION_WRITE 2
+#define MPR_PASS_THRU_DIRECTION_BOTH 3
+
+typedef struct mpr_pass_thru
+{
+ uint64_t PtrRequest;
+ uint64_t PtrReply;
+ uint64_t PtrData;
+ uint32_t RequestSize;
+ uint32_t ReplySize;
+ uint32_t DataSize;
+ uint32_t DataDirection;
+ uint64_t PtrDataOut;
+ uint32_t DataOutSize;
+ uint32_t Timeout;
+} mpr_pass_thru_t;
+
+
+/*
+ * Event queue defines
+ */
+#define MPR_EVENT_QUEUE_SIZE (50) /* Max Events stored in driver */
+#define MPR_MAX_EVENT_DATA_LENGTH (48) /* Size of each event in Dwords */
+
+typedef struct mpr_event_query
+{
+ uint16_t Entries;
+ uint16_t Reserved;
+ uint32_t Types[4];
+} mpr_event_query_t;
+
+typedef struct mpr_event_enable
+{
+ uint32_t Types[4];
+} mpr_event_enable_t;
+
+/*
+ * Event record entry for ioctl.
+ */
+typedef struct mpr_event_entry
+{
+ uint32_t Type;
+ uint32_t Number;
+ uint32_t Data[MPR_MAX_EVENT_DATA_LENGTH];
+} mpr_event_entry_t;
+
+typedef struct mpr_event_report
+{
+ uint32_t Size;
+ uint64_t PtrEvents;
+} mpr_event_report_t;
+
+
+typedef struct mpr_pci_info
+{
+ uint32_t BusNumber;
+ uint8_t DeviceNumber;
+ uint8_t FunctionNumber;
+ uint16_t InterruptVector;
+ uint8_t PciHeader[256];
+} mpr_pci_info_t;
+
+
+typedef struct mpr_diag_action
+{
+ uint32_t Action;
+ uint32_t Length;
+ uint64_t PtrDiagAction;
+ uint32_t ReturnCode;
+} mpr_diag_action_t;
+
+#define MPR_FW_DIAGNOSTIC_UID_NOT_FOUND (0xFF)
+
+#define MPR_FW_DIAG_NEW (0x806E6577)
+
+#define MPR_FW_DIAG_TYPE_REGISTER (0x00000001)
+#define MPR_FW_DIAG_TYPE_UNREGISTER (0x00000002)
+#define MPR_FW_DIAG_TYPE_QUERY (0x00000003)
+#define MPR_FW_DIAG_TYPE_READ_BUFFER (0x00000004)
+#define MPR_FW_DIAG_TYPE_RELEASE (0x00000005)
+
+#define MPR_FW_DIAG_INVALID_UID (0x00000000)
+
+#define MPR_DIAG_SUCCESS 0
+#define MPR_DIAG_FAILURE 1
+
+#define MPR_FW_DIAG_ERROR_SUCCESS (0x00000000)
+#define MPR_FW_DIAG_ERROR_FAILURE (0x00000001)
+#define MPR_FW_DIAG_ERROR_INVALID_PARAMETER (0x00000002)
+#define MPR_FW_DIAG_ERROR_POST_FAILED (0x00000010)
+#define MPR_FW_DIAG_ERROR_INVALID_UID (0x00000011)
+#define MPR_FW_DIAG_ERROR_RELEASE_FAILED (0x00000012)
+#define MPR_FW_DIAG_ERROR_NO_BUFFER (0x00000013)
+#define MPR_FW_DIAG_ERROR_ALREADY_RELEASED (0x00000014)
+
+
+typedef struct mpr_fw_diag_register
+{
+ uint8_t ExtendedType;
+ uint8_t BufferType;
+ uint16_t ApplicationFlags;
+ uint32_t DiagnosticFlags;
+ uint32_t ProductSpecific[23];
+ uint32_t RequestedBufferSize;
+ uint32_t UniqueId;
+} mpr_fw_diag_register_t;
+
+typedef struct mpr_fw_diag_unregister
+{
+ uint32_t UniqueId;
+} mpr_fw_diag_unregister_t;
+
+#define MPR_FW_DIAG_FLAG_APP_OWNED (0x0001)
+#define MPR_FW_DIAG_FLAG_BUFFER_VALID (0x0002)
+#define MPR_FW_DIAG_FLAG_FW_BUFFER_ACCESS (0x0004)
+
+typedef struct mpr_fw_diag_query
+{
+ uint8_t ExtendedType;
+ uint8_t BufferType;
+ uint16_t ApplicationFlags;
+ uint32_t DiagnosticFlags;
+ uint32_t ProductSpecific[23];
+ uint32_t TotalBufferSize;
+ uint32_t DriverAddedBufferSize;
+ uint32_t UniqueId;
+} mpr_fw_diag_query_t;
+
+typedef struct mpr_fw_diag_release
+{
+ uint32_t UniqueId;
+} mpr_fw_diag_release_t;
+
+#define MPR_FW_DIAG_FLAG_REREGISTER (0x0001)
+#define MPR_FW_DIAG_FLAG_FORCE_RELEASE (0x0002)
+
+typedef struct mpr_diag_read_buffer
+{
+ uint8_t Status;
+ uint8_t Reserved;
+ uint16_t Flags;
+ uint32_t StartingOffset;
+ uint32_t BytesToRead;
+ uint32_t UniqueId;
+ uint64_t PtrDataBuffer;
+} mpr_diag_read_buffer_t;
+
+/*
+ * Register Access
+ */
+#define REG_IO_READ 1
+#define REG_IO_WRITE 2
+#define REG_MEM_READ 3
+#define REG_MEM_WRITE 4
+
+typedef struct mpr_reg_access
+{
+ uint32_t Command;
+ uint32_t RegOffset;
+ uint32_t RegData;
+} mpr_reg_access_t;
+
+typedef struct mpr_btdh_mapping
+{
+ uint16_t TargetID;
+ uint16_t Bus;
+ uint16_t DevHandle;
+ uint16_t Reserved;
+} mpr_btdh_mapping_t;
+
+#define MPRIO_MPR_COMMAND_FLAG_VERBOSE 0x01
+#define MPRIO_MPR_COMMAND_FLAG_DEBUG 0x02
+#define MPRIO_READ_CFG_HEADER _IOWR('M', 200, struct mpr_cfg_page_req)
+#define MPRIO_READ_CFG_PAGE _IOWR('M', 201, struct mpr_cfg_page_req)
+#define MPRIO_READ_EXT_CFG_HEADER _IOWR('M', 202, struct mpr_ext_cfg_page_req)
+#define MPRIO_READ_EXT_CFG_PAGE _IOWR('M', 203, struct mpr_ext_cfg_page_req)
+#define MPRIO_WRITE_CFG_PAGE _IOWR('M', 204, struct mpr_cfg_page_req)
+#define MPRIO_RAID_ACTION _IOWR('M', 205, struct mpr_raid_action)
+#define MPRIO_MPR_COMMAND _IOWR('M', 210, struct mpr_usr_command)
+
+#ifndef MPTIOCTL
+#define MPTIOCTL ('I')
+#define MPTIOCTL_GET_ADAPTER_DATA _IOWR(MPTIOCTL, 1,\
+ struct mpr_adapter_data)
+#define MPTIOCTL_UPDATE_FLASH _IOWR(MPTIOCTL, 2,\
+ struct mpr_update_flash)
+#define MPTIOCTL_RESET_ADAPTER _IO(MPTIOCTL, 3)
+#define MPTIOCTL_PASS_THRU _IOWR(MPTIOCTL, 4,\
+ struct mpr_pass_thru)
+#define MPTIOCTL_EVENT_QUERY _IOWR(MPTIOCTL, 5,\
+ struct mpr_event_query)
+#define MPTIOCTL_EVENT_ENABLE _IOWR(MPTIOCTL, 6,\
+ struct mpr_event_enable)
+#define MPTIOCTL_EVENT_REPORT _IOWR(MPTIOCTL, 7,\
+ struct mpr_event_report)
+#define MPTIOCTL_GET_PCI_INFO _IOWR(MPTIOCTL, 8,\
+ struct mpr_pci_info)
+#define MPTIOCTL_DIAG_ACTION _IOWR(MPTIOCTL, 9,\
+ struct mpr_diag_action)
+#define MPTIOCTL_REG_ACCESS _IOWR(MPTIOCTL, 10,\
+ struct mpr_reg_access)
+#define MPTIOCTL_BTDH_MAPPING _IOWR(MPTIOCTL, 11,\
+ struct mpr_btdh_mapping)
+#endif
+
+#endif /* !_MPR_IOCTL_H_ */
diff --git a/usr.sbin/mpsutil/mps_cmd.c b/usr.sbin/mpsutil/mps_cmd.c
new file mode 100644
index 0000000..2701773
--- /dev/null
+++ b/usr.sbin/mpsutil/mps_cmd.c
@@ -0,0 +1,673 @@
+/*-
+ * Copyright (c) 2015 Netflix, Inc.
+ * All rights reserved.
+ * Written by: Scott Long <scottl@freebsd.org>
+ *
+ * Copyright (c) 2008 Yahoo!, Inc.
+ * All rights reserved.
+ * Written by: John Baldwin <jhb@FreeBSD.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the author nor the names of any co-contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <sys/cdefs.h>
+__RCSID("$FreeBSD$");
+
+#include <sys/param.h>
+#include <sys/errno.h>
+#include <sys/ioctl.h>
+#if 0
+#include <sys/mps_ioctl.h>
+#else
+#include "mps_ioctl.h"
+#include "mpr_ioctl.h"
+#endif
+#include <sys/sysctl.h>
+#include <sys/uio.h>
+
+#include <err.h>
+#include <fcntl.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+
+#include "mpsutil.h"
+
+#ifndef USE_MPT_IOCTLS
+#define USE_MPT_IOCTLS
+#endif
+
+static const char *mps_ioc_status_codes[] = {
+ "Success", /* 0x0000 */
+ "Invalid function",
+ "Busy",
+ "Invalid scatter-gather list",
+ "Internal error",
+ "Reserved",
+ "Insufficient resources",
+ "Invalid field",
+ "Invalid state", /* 0x0008 */
+ "Operation state not supported",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL, /* 0x0010 */
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL, /* 0x0018 */
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "Invalid configuration action", /* 0x0020 */
+ "Invalid configuration type",
+ "Invalid configuration page",
+ "Invalid configuration data",
+ "No configuration defaults",
+ "Unable to commit configuration change",
+ NULL,
+ NULL,
+ NULL, /* 0x0028 */
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL, /* 0x0030 */
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL, /* 0x0038 */
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "Recovered SCSI error", /* 0x0040 */
+ "Invalid SCSI bus",
+ "Invalid SCSI target ID",
+ "SCSI device not there",
+ "SCSI data overrun",
+ "SCSI data underrun",
+ "SCSI I/O error",
+ "SCSI protocol error",
+ "SCSI task terminated", /* 0x0048 */
+ "SCSI residual mismatch",
+ "SCSI task management failed",
+ "SCSI I/O controller terminated",
+ "SCSI external controller terminated",
+ "EEDP guard error",
+ "EEDP reference tag error",
+ "EEDP application tag error",
+ NULL, /* 0x0050 */
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL, /* 0x0058 */
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "SCSI target priority I/O", /* 0x0060 */
+ "Invalid SCSI target port",
+ "Invalid SCSI target I/O index",
+ "SCSI target aborted",
+ "No connection retryable",
+ "No connection",
+ "FC aborted",
+ "Invalid FC receive ID",
+ "FC did invalid", /* 0x0068 */
+ "FC node logged out",
+ "Transfer count mismatch",
+ "STS data not set",
+ "FC exchange canceled",
+ "Data offset error",
+ "Too much write data",
+ "IU too short",
+ "ACK NAK timeout", /* 0x0070 */
+ "NAK received",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL, /* 0x0078 */
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "LAN device not found", /* 0x0080 */
+ "LAN device failure",
+ "LAN transmit error",
+ "LAN transmit aborted",
+ "LAN receive error",
+ "LAN receive aborted",
+ "LAN partial packet",
+ "LAN canceled",
+ NULL, /* 0x0088 */
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "SAS SMP request failed", /* 0x0090 */
+ "SAS SMP data overrun",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "Inband aborted", /* 0x0098 */
+ "No inband connection",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "Diagnostic released", /* 0x00A0 */
+};
+
+struct mprs_pass_thru {
+ uint64_t PtrRequest;
+ uint64_t PtrReply;
+ uint64_t PtrData;
+ uint32_t RequestSize;
+ uint32_t ReplySize;
+ uint32_t DataSize;
+ uint32_t DataDirection;
+ uint64_t PtrDataOut;
+ uint32_t DataOutSize;
+ uint32_t Timeout;
+};
+
+struct mprs_btdh_mapping {
+ uint16_t TargetID;
+ uint16_t Bus;
+ uint16_t DevHandle;
+ uint16_t Reserved;
+};
+
+const char *
+mps_ioc_status(U16 IOCStatus)
+{
+ static char buffer[16];
+
+ IOCStatus &= MPI2_IOCSTATUS_MASK;
+ if (IOCStatus < sizeof(mps_ioc_status_codes) / sizeof(char *) &&
+ mps_ioc_status_codes[IOCStatus] != NULL)
+ return (mps_ioc_status_codes[IOCStatus]);
+ snprintf(buffer, sizeof(buffer), "Status: 0x%04x", IOCStatus);
+ return (buffer);
+}
+
+#ifdef USE_MPT_IOCTLS
+int
+mps_map_btdh(int fd, uint16_t *devhandle, uint16_t *bus, uint16_t *target)
+{
+ int error;
+ struct mprs_btdh_mapping map;
+
+ map.Bus = *bus;
+ map.TargetID = *target;
+ map.DevHandle = *devhandle;
+
+ if ((error = ioctl(fd, MPTIOCTL_BTDH_MAPPING, &map)) != 0) {
+ error = errno;
+ warn("Failed to map bus/target/device");
+ return (error);
+ }
+
+ *bus = map.Bus;
+ *target = map.TargetID;
+ *devhandle = map.DevHandle;
+
+ return (0);
+}
+
+int
+mps_read_config_page_header(int fd, U8 PageType, U8 PageNumber, U32 PageAddress,
+ MPI2_CONFIG_PAGE_HEADER *header, U16 *IOCStatus)
+{
+ MPI2_CONFIG_REQUEST req;
+ MPI2_CONFIG_REPLY reply;
+
+ bzero(&req, sizeof(req));
+ req.Function = MPI2_FUNCTION_CONFIG;
+ req.Action = MPI2_CONFIG_ACTION_PAGE_HEADER;
+ req.Header.PageType = PageType;
+ req.Header.PageNumber = PageNumber;
+ req.PageAddress = PageAddress;
+
+ if (mps_pass_command(fd, &req, sizeof(req), &reply, sizeof(reply),
+ NULL, 0, NULL, 0, 30))
+ return (errno);
+
+ if (!IOC_STATUS_SUCCESS(reply.IOCStatus)) {
+ if (IOCStatus != NULL)
+ *IOCStatus = reply.IOCStatus;
+ return (EIO);
+ }
+ if (header == NULL)
+ return (EINVAL);
+ *header = reply.Header;
+ return (0);
+}
+
+int
+mps_read_ext_config_page_header(int fd, U8 ExtPageType, U8 PageNumber, U32 PageAddress, MPI2_CONFIG_PAGE_HEADER *header, U16 *ExtPageLength, U16 *IOCStatus)
+{
+ MPI2_CONFIG_REQUEST req;
+ MPI2_CONFIG_REPLY reply;
+
+ bzero(&req, sizeof(req));
+ req.Function = MPI2_FUNCTION_CONFIG;
+ req.Action = MPI2_CONFIG_ACTION_PAGE_HEADER;
+ req.Header.PageType = MPI2_CONFIG_PAGETYPE_EXTENDED;
+ req.ExtPageType = ExtPageType;
+ req.Header.PageNumber = PageNumber;
+ req.PageAddress = PageAddress;
+
+ if (mps_pass_command(fd, &req, sizeof(req), &reply, sizeof(reply),
+ NULL, 0, NULL, 0, 30))
+ return (errno);
+
+ if (!IOC_STATUS_SUCCESS(reply.IOCStatus)) {
+ if (IOCStatus != NULL)
+ *IOCStatus = reply.IOCStatus;
+ return (EIO);
+ }
+ if ((header == NULL) || (ExtPageLength == NULL))
+ return (EINVAL);
+ *header = reply.Header;
+ *ExtPageLength = reply.ExtPageLength;
+ return (0);
+}
+
+void *
+mps_read_config_page(int fd, U8 PageType, U8 PageNumber, U32 PageAddress,
+ U16 *IOCStatus)
+{
+ MPI2_CONFIG_REQUEST req;
+ MPI2_CONFIG_PAGE_HEADER header;
+ MPI2_CONFIG_REPLY reply;
+ void *buf;
+ int error, len;
+
+ bzero(&header, sizeof(header));
+ error = mps_read_config_page_header(fd, PageType, PageNumber,
+ PageAddress, &header, IOCStatus);
+ if (error) {
+ errno = error;
+ return (NULL);
+ }
+
+ bzero(&req, sizeof(req));
+ req.Function = MPI2_FUNCTION_CONFIG;
+ req.Action = MPI2_CONFIG_ACTION_PAGE_READ_CURRENT;
+ req.PageAddress = PageAddress;
+ req.Header = header;
+ req.Header.PageLength = reply.Header.PageLength;
+ if (reply.Header.PageLength == 0)
+ req.Header.PageLength = 4;
+
+ len = req.Header.PageLength * 4;
+ buf = malloc(len);
+ if (mps_pass_command(fd, &req, sizeof(req), &reply, sizeof(reply),
+ buf, len, NULL, 0, 30)) {
+ error = errno;
+ free(buf);
+ errno = error;
+ return (NULL);
+ }
+ if (!IOC_STATUS_SUCCESS(reply.IOCStatus)) {
+ if (IOCStatus != NULL)
+ *IOCStatus = reply.IOCStatus;
+ else
+ warnx("Reading config page failed: 0x%x %s",
+ reply.IOCStatus, mps_ioc_status(reply.IOCStatus));
+ free(buf);
+ errno = EIO;
+ return (NULL);
+ }
+ return (buf);
+}
+
+void *
+mps_read_extended_config_page(int fd, U8 ExtPageType, U8 PageVersion,
+ U8 PageNumber, U32 PageAddress, U16 *IOCStatus)
+{
+ MPI2_CONFIG_REQUEST req;
+ MPI2_CONFIG_PAGE_HEADER header;
+ MPI2_CONFIG_REPLY reply;
+ U16 pagelen;
+ void *buf;
+ int error, len;
+
+ if (IOCStatus != NULL)
+ *IOCStatus = MPI2_IOCSTATUS_SUCCESS;
+ bzero(&header, sizeof(header));
+ error = mps_read_ext_config_page_header(fd, ExtPageType, PageNumber,
+ PageAddress, &header, &pagelen, IOCStatus);
+ if (error) {
+ errno = error;
+ return (NULL);
+ }
+
+ bzero(&req, sizeof(req));
+ req.Function = MPI2_FUNCTION_CONFIG;
+ req.Action = MPI2_CONFIG_ACTION_PAGE_READ_CURRENT;
+ req.PageAddress = PageAddress;
+ req.Header = header;
+ if (pagelen == 0)
+ pagelen = 4;
+ req.ExtPageLength = pagelen;
+ req.ExtPageType = ExtPageType;
+
+ len = pagelen * 4;
+ buf = malloc(len);
+ if (mps_pass_command(fd, &req, sizeof(req), &reply, sizeof(reply),
+ buf, len, NULL, 0, 30)) {
+ error = errno;
+ free(buf);
+ errno = error;
+ return (NULL);
+ }
+ if (!IOC_STATUS_SUCCESS(reply.IOCStatus)) {
+ if (IOCStatus != NULL)
+ *IOCStatus = reply.IOCStatus;
+ else
+ warnx("Reading extended config page failed: %s",
+ mps_ioc_status(reply.IOCStatus));
+ free(buf);
+ errno = EIO;
+ return (NULL);
+ }
+ return (buf);
+}
+
+#else
+
+int
+mps_read_config_page_header(int fd, U8 PageType, U8 PageNumber, U32 PageAddress,
+ MPI2_CONFIG_PAGE_HEADER *header, U16 *IOCStatus)
+{
+ struct mps_cfg_page_req req;
+
+ if (IOCStatus != NULL)
+ *IOCStatus = MPI2_IOCSTATUS_SUCCESS;
+ if (header == NULL)
+ return (EINVAL);
+ bzero(&req, sizeof(req));
+ req.header.PageType = PageType;
+ req.header.PageNumber = PageNumber;
+ req.page_address = PageAddress;
+ if (ioctl(fd, MPSIO_READ_CFG_HEADER, &req) < 0)
+ return (errno);
+ if (!IOC_STATUS_SUCCESS(req.ioc_status)) {
+ if (IOCStatus != NULL)
+ *IOCStatus = req.ioc_status;
+ return (EIO);
+ }
+ bcopy(&req.header, header, sizeof(*header));
+ return (0);
+}
+
+void *
+mps_read_config_page(int fd, U8 PageType, U8 PageNumber, U32 PageAddress,
+ U16 *IOCStatus)
+{
+ struct mps_cfg_page_req req;
+ void *buf;
+ int error;
+
+ error = mps_read_config_page_header(fd, PageType, PageNumber,
+ PageAddress, &req.header, IOCStatus);
+ if (error) {
+ errno = error;
+ return (NULL);
+ }
+
+ if (req.header.PageLength == 0)
+ req.header.PageLength = 4;
+ req.len = req.header.PageLength * 4;
+ buf = malloc(req.len);
+ req.buf = buf;
+ bcopy(&req.header, buf, sizeof(req.header));
+ if (ioctl(fd, MPSIO_READ_CFG_PAGE, &req) < 0) {
+ error = errno;
+ free(buf);
+ errno = error;
+ return (NULL);
+ }
+ if (!IOC_STATUS_SUCCESS(req.ioc_status)) {
+ if (IOCStatus != NULL)
+ *IOCStatus = req.ioc_status;
+ else
+ warnx("Reading config page failed: 0x%x %s",
+ req.ioc_status, mps_ioc_status(req.ioc_status));
+ free(buf);
+ errno = EIO;
+ return (NULL);
+ }
+ return (buf);
+}
+
+void *
+mps_read_extended_config_page(int fd, U8 ExtPageType, U8 PageVersion,
+ U8 PageNumber, U32 PageAddress, U16 *IOCStatus)
+{
+ struct mps_ext_cfg_page_req req;
+ void *buf;
+ int error;
+
+ if (IOCStatus != NULL)
+ *IOCStatus = MPI2_IOCSTATUS_SUCCESS;
+ bzero(&req, sizeof(req));
+ req.header.PageVersion = PageVersion;
+ req.header.PageNumber = PageNumber;
+ req.header.ExtPageType = ExtPageType;
+ req.page_address = PageAddress;
+ if (ioctl(fd, MPSIO_READ_EXT_CFG_HEADER, &req) < 0)
+ return (NULL);
+ if (!IOC_STATUS_SUCCESS(req.ioc_status)) {
+ if (IOCStatus != NULL)
+ *IOCStatus = req.ioc_status;
+ else
+ warnx("Reading extended config page header failed: %s",
+ mps_ioc_status(req.ioc_status));
+ errno = EIO;
+ return (NULL);
+ }
+ req.len = req.header.ExtPageLength * 4;
+ buf = malloc(req.len);
+ req.buf = buf;
+ bcopy(&req.header, buf, sizeof(req.header));
+ if (ioctl(fd, MPSIO_READ_EXT_CFG_PAGE, &req) < 0) {
+ error = errno;
+ free(buf);
+ errno = error;
+ return (NULL);
+ }
+ if (!IOC_STATUS_SUCCESS(req.ioc_status)) {
+ if (IOCStatus != NULL)
+ *IOCStatus = req.ioc_status;
+ else
+ warnx("Reading extended config page failed: %s",
+ mps_ioc_status(req.ioc_status));
+ free(buf);
+ errno = EIO;
+ return (NULL);
+ }
+ return (buf);
+}
+#endif
+
+int
+mps_open(int unit)
+{
+ char path[MAXPATHLEN];
+
+ snprintf(path, sizeof(path), "/dev/mp%s%d", is_mps ? "s": "r", unit);
+ return (open(path, O_RDWR));
+}
+
+int
+mps_user_command(int fd, void *req, uint32_t req_len, void *reply,
+ uint32_t reply_len, void *buffer, int len, uint32_t flags)
+{
+ struct mps_usr_command cmd;
+
+ bzero(&cmd, sizeof(struct mps_usr_command));
+ cmd.req = req;
+ cmd.req_len = req_len;
+ cmd.rpl = reply;
+ cmd.rpl_len = reply_len;
+ cmd.buf = buffer;
+ cmd.len = len;
+ cmd.flags = flags;
+
+ if (ioctl(fd, is_mps ? MPSIO_MPS_COMMAND : MPRIO_MPR_COMMAND, &cmd) < 0)
+ return (errno);
+ return (0);
+}
+
+int
+mps_pass_command(int fd, void *req, uint32_t req_len, void *reply,
+ uint32_t reply_len, void *data_in, uint32_t datain_len, void *data_out,
+ uint32_t dataout_len, uint32_t timeout)
+{
+ struct mprs_pass_thru pass;
+
+ pass.PtrRequest = (uint64_t)(uintptr_t)req;
+ pass.PtrReply = (uint64_t)(uintptr_t)reply;
+ pass.PtrData = (uint64_t)(uintptr_t)data_in;
+ pass.PtrDataOut = (uint64_t)(uintptr_t)data_out;
+ pass.RequestSize = req_len;
+ pass.ReplySize = reply_len;
+ pass.DataSize = datain_len;
+ pass.DataOutSize = dataout_len;
+ if (datain_len && dataout_len) {
+ if (is_mps) {
+ pass.DataDirection = MPS_PASS_THRU_DIRECTION_BOTH;
+ } else {
+ pass.DataDirection = MPR_PASS_THRU_DIRECTION_BOTH;
+ }
+ } else if (datain_len) {
+ if (is_mps) {
+ pass.DataDirection = MPS_PASS_THRU_DIRECTION_READ;
+ } else {
+ pass.DataDirection = MPR_PASS_THRU_DIRECTION_READ;
+ }
+ } else if (dataout_len) {
+ if (is_mps) {
+ pass.DataDirection = MPS_PASS_THRU_DIRECTION_WRITE;
+ } else {
+ pass.DataDirection = MPR_PASS_THRU_DIRECTION_WRITE;
+ }
+ } else {
+ if (is_mps) {
+ pass.DataDirection = MPS_PASS_THRU_DIRECTION_NONE;
+ } else {
+ pass.DataDirection = MPR_PASS_THRU_DIRECTION_NONE;
+ }
+ }
+ pass.Timeout = timeout;
+
+ if (ioctl(fd, MPTIOCTL_PASS_THRU, &pass) < 0)
+ return (errno);
+ return (0);
+}
+
+MPI2_IOC_FACTS_REPLY *
+mps_get_iocfacts(int fd)
+{
+ MPI2_IOC_FACTS_REPLY *facts;
+ MPI2_IOC_FACTS_REQUEST req;
+ int error;
+
+ facts = malloc(sizeof(MPI2_IOC_FACTS_REPLY));
+ if (facts == NULL) {
+ errno = ENOMEM;
+ return (NULL);
+ }
+
+ bzero(&req, sizeof(MPI2_IOC_FACTS_REQUEST));
+ req.Function = MPI2_FUNCTION_IOC_FACTS;
+
+#if 1
+ error = mps_pass_command(fd, &req, sizeof(MPI2_IOC_FACTS_REQUEST),
+ facts, sizeof(MPI2_IOC_FACTS_REPLY), NULL, 0, NULL, 0, 10);
+#else
+ error = mps_user_command(fd, &req, sizeof(MPI2_IOC_FACTS_REQUEST),
+ facts, sizeof(MPI2_IOC_FACTS_REPLY), NULL, 0, 0);
+#endif
+ if (error) {
+ free(facts);
+ return (NULL);
+ }
+
+ if (!IOC_STATUS_SUCCESS(facts->IOCStatus)) {
+ free(facts);
+ errno = EINVAL;
+ return (NULL);
+ }
+ return (facts);
+}
+
diff --git a/usr.sbin/mpsutil/mps_ioctl.h b/usr.sbin/mpsutil/mps_ioctl.h
new file mode 100644
index 0000000..a52f80e
--- /dev/null
+++ b/usr.sbin/mpsutil/mps_ioctl.h
@@ -0,0 +1,387 @@
+/*-
+ * Copyright (c) 2008 Yahoo!, Inc.
+ * All rights reserved.
+ * Written by: John Baldwin <jhb@FreeBSD.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the author nor the names of any co-contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * LSI MPT-Fusion Host Adapter FreeBSD userland interface
+ *
+ * $FreeBSD$
+ */
+/*-
+ * Copyright (c) 2011, 2012 LSI Corp.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * LSI MPT-Fusion Host Adapter FreeBSD
+ *
+ * $FreeBSD$
+ */
+
+#ifndef _MPS_IOCTL_H_
+#define _MPS_IOCTL_H_
+
+#include <dev/mps/mpi/mpi2_type.h>
+#include <dev/mps/mpi/mpi2.h>
+#include <dev/mps/mpi/mpi2_cnfg.h>
+#include <dev/mps/mpi/mpi2_sas.h>
+
+/*
+ * For the read header requests, the header should include the page
+ * type or extended page type, page number, and page version. The
+ * buffer and length are unused. The completed header is returned in
+ * the 'header' member.
+ *
+ * For the read page and write page requests, 'buf' should point to a
+ * buffer of 'len' bytes which holds the entire page (including the
+ * header).
+ *
+ * All requests specify the page address in 'page_address'.
+ */
+struct mps_cfg_page_req {
+ MPI2_CONFIG_PAGE_HEADER header;
+ uint32_t page_address;
+ void *buf;
+ int len;
+ uint16_t ioc_status;
+};
+
+struct mps_ext_cfg_page_req {
+ MPI2_CONFIG_EXTENDED_PAGE_HEADER header;
+ uint32_t page_address;
+ void *buf;
+ int len;
+ uint16_t ioc_status;
+};
+
+struct mps_raid_action {
+ uint8_t action;
+ uint8_t volume_bus;
+ uint8_t volume_id;
+ uint8_t phys_disk_num;
+ uint32_t action_data_word;
+ void *buf;
+ int len;
+ uint32_t volume_status;
+ uint32_t action_data[4];
+ uint16_t action_status;
+ uint16_t ioc_status;
+ uint8_t write;
+};
+
+struct mps_usr_command {
+ void *req;
+ uint32_t req_len;
+ void *rpl;
+ uint32_t rpl_len;
+ void *buf;
+ int len;
+ uint32_t flags;
+};
+
+typedef struct mps_pci_bits
+{
+ union {
+ struct {
+ uint32_t DeviceNumber :5;
+ uint32_t FunctionNumber :3;
+ uint32_t BusNumber :24;
+ } bits;
+ uint32_t AsDWORD;
+ } u;
+ uint32_t PciSegmentId;
+} mps_pci_bits_t;
+
+/*
+ * The following is the MPSIOCTL_GET_ADAPTER_DATA data structure. This data
+ * structure is setup so that we hopefully are properly aligned for both
+ * 32-bit and 64-bit mode applications.
+ *
+ * Adapter Type - Value = 4 = SCSI Protocol through SAS-2 adapter
+ *
+ * MPI Port Number - The PCI Function number for this device
+ *
+ * PCI Device HW Id - The PCI device number for this device
+ *
+ */
+#define MPSIOCTL_ADAPTER_TYPE_SAS2 4
+#define MPSIOCTL_ADAPTER_TYPE_SAS2_SSS6200 5
+typedef struct mps_adapter_data
+{
+ uint32_t StructureLength;
+ uint32_t AdapterType;
+ uint32_t MpiPortNumber;
+ uint32_t PCIDeviceHwId;
+ uint32_t PCIDeviceHwRev;
+ uint32_t SubSystemId;
+ uint32_t SubsystemVendorId;
+ uint32_t Reserved1;
+ uint32_t MpiFirmwareVersion;
+ uint32_t BiosVersion;
+ uint8_t DriverVersion[32];
+ uint8_t Reserved2;
+ uint8_t ScsiId;
+ uint16_t Reserved3;
+ mps_pci_bits_t PciInformation;
+} mps_adapter_data_t;
+
+
+typedef struct mps_update_flash
+{
+ uint64_t PtrBuffer;
+ uint32_t ImageChecksum;
+ uint32_t ImageOffset;
+ uint32_t ImageSize;
+ uint32_t ImageType;
+} mps_update_flash_t;
+
+
+#define MPS_PASS_THRU_DIRECTION_NONE 0
+#define MPS_PASS_THRU_DIRECTION_READ 1
+#define MPS_PASS_THRU_DIRECTION_WRITE 2
+#define MPS_PASS_THRU_DIRECTION_BOTH 3
+
+typedef struct mps_pass_thru
+{
+ uint64_t PtrRequest;
+ uint64_t PtrReply;
+ uint64_t PtrData;
+ uint32_t RequestSize;
+ uint32_t ReplySize;
+ uint32_t DataSize;
+ uint32_t DataDirection;
+ uint64_t PtrDataOut;
+ uint32_t DataOutSize;
+ uint32_t Timeout;
+} mps_pass_thru_t;
+
+
+/*
+ * Event queue defines
+ */
+#define MPS_EVENT_QUEUE_SIZE (50) /* Max Events stored in driver */
+#define MPS_MAX_EVENT_DATA_LENGTH (48) /* Size of each event in Dwords */
+
+typedef struct mps_event_query
+{
+ uint16_t Entries;
+ uint16_t Reserved;
+ uint32_t Types[4];
+} mps_event_query_t;
+
+typedef struct mps_event_enable
+{
+ uint32_t Types[4];
+} mps_event_enable_t;
+
+/*
+ * Event record entry for ioctl.
+ */
+typedef struct mps_event_entry
+{
+ uint32_t Type;
+ uint32_t Number;
+ uint32_t Data[MPS_MAX_EVENT_DATA_LENGTH];
+} mps_event_entry_t;
+
+typedef struct mps_event_report
+{
+ uint32_t Size;
+ uint64_t PtrEvents;
+} mps_event_report_t;
+
+
+typedef struct mps_pci_info
+{
+ uint32_t BusNumber;
+ uint8_t DeviceNumber;
+ uint8_t FunctionNumber;
+ uint16_t InterruptVector;
+ uint8_t PciHeader[256];
+} mps_pci_info_t;
+
+
+typedef struct mps_diag_action
+{
+ uint32_t Action;
+ uint32_t Length;
+ uint64_t PtrDiagAction;
+ uint32_t ReturnCode;
+} mps_diag_action_t;
+
+#define MPS_FW_DIAGNOSTIC_UID_NOT_FOUND (0xFF)
+
+#define MPS_FW_DIAG_NEW (0x806E6577)
+
+#define MPS_FW_DIAG_TYPE_REGISTER (0x00000001)
+#define MPS_FW_DIAG_TYPE_UNREGISTER (0x00000002)
+#define MPS_FW_DIAG_TYPE_QUERY (0x00000003)
+#define MPS_FW_DIAG_TYPE_READ_BUFFER (0x00000004)
+#define MPS_FW_DIAG_TYPE_RELEASE (0x00000005)
+
+#define MPS_FW_DIAG_INVALID_UID (0x00000000)
+
+#define MPS_DIAG_SUCCESS 0
+#define MPS_DIAG_FAILURE 1
+
+#define MPS_FW_DIAG_ERROR_SUCCESS (0x00000000)
+#define MPS_FW_DIAG_ERROR_FAILURE (0x00000001)
+#define MPS_FW_DIAG_ERROR_INVALID_PARAMETER (0x00000002)
+#define MPS_FW_DIAG_ERROR_POST_FAILED (0x00000010)
+#define MPS_FW_DIAG_ERROR_INVALID_UID (0x00000011)
+#define MPS_FW_DIAG_ERROR_RELEASE_FAILED (0x00000012)
+#define MPS_FW_DIAG_ERROR_NO_BUFFER (0x00000013)
+#define MPS_FW_DIAG_ERROR_ALREADY_RELEASED (0x00000014)
+
+
+typedef struct mps_fw_diag_register
+{
+ uint8_t ExtendedType;
+ uint8_t BufferType;
+ uint16_t ApplicationFlags;
+ uint32_t DiagnosticFlags;
+ uint32_t ProductSpecific[23];
+ uint32_t RequestedBufferSize;
+ uint32_t UniqueId;
+} mps_fw_diag_register_t;
+
+typedef struct mps_fw_diag_unregister
+{
+ uint32_t UniqueId;
+} mps_fw_diag_unregister_t;
+
+#define MPS_FW_DIAG_FLAG_APP_OWNED (0x0001)
+#define MPS_FW_DIAG_FLAG_BUFFER_VALID (0x0002)
+#define MPS_FW_DIAG_FLAG_FW_BUFFER_ACCESS (0x0004)
+
+typedef struct mps_fw_diag_query
+{
+ uint8_t ExtendedType;
+ uint8_t BufferType;
+ uint16_t ApplicationFlags;
+ uint32_t DiagnosticFlags;
+ uint32_t ProductSpecific[23];
+ uint32_t TotalBufferSize;
+ uint32_t DriverAddedBufferSize;
+ uint32_t UniqueId;
+} mps_fw_diag_query_t;
+
+typedef struct mps_fw_diag_release
+{
+ uint32_t UniqueId;
+} mps_fw_diag_release_t;
+
+#define MPS_FW_DIAG_FLAG_REREGISTER (0x0001)
+#define MPS_FW_DIAG_FLAG_FORCE_RELEASE (0x0002)
+
+typedef struct mps_diag_read_buffer
+{
+ uint8_t Status;
+ uint8_t Reserved;
+ uint16_t Flags;
+ uint32_t StartingOffset;
+ uint32_t BytesToRead;
+ uint32_t UniqueId;
+ uint64_t PtrDataBuffer;
+} mps_diag_read_buffer_t;
+
+/*
+ * Register Access
+ */
+#define REG_IO_READ 1
+#define REG_IO_WRITE 2
+#define REG_MEM_READ 3
+#define REG_MEM_WRITE 4
+
+typedef struct mps_reg_access
+{
+ uint32_t Command;
+ uint32_t RegOffset;
+ uint32_t RegData;
+} mps_reg_access_t;
+
+typedef struct mps_btdh_mapping
+{
+ uint16_t TargetID;
+ uint16_t Bus;
+ uint16_t DevHandle;
+ uint16_t Reserved;
+} mps_btdh_mapping_t;
+
+#define MPSIO_MPS_COMMAND_FLAG_VERBOSE 0x01
+#define MPSIO_MPS_COMMAND_FLAG_DEBUG 0x02
+#define MPSIO_READ_CFG_HEADER _IOWR('M', 200, struct mps_cfg_page_req)
+#define MPSIO_READ_CFG_PAGE _IOWR('M', 201, struct mps_cfg_page_req)
+#define MPSIO_READ_EXT_CFG_HEADER _IOWR('M', 202, struct mps_ext_cfg_page_req)
+#define MPSIO_READ_EXT_CFG_PAGE _IOWR('M', 203, struct mps_ext_cfg_page_req)
+#define MPSIO_WRITE_CFG_PAGE _IOWR('M', 204, struct mps_cfg_page_req)
+#define MPSIO_RAID_ACTION _IOWR('M', 205, struct mps_raid_action)
+#define MPSIO_MPS_COMMAND _IOWR('M', 210, struct mps_usr_command)
+
+#define MPTIOCTL ('I')
+#define MPTIOCTL_GET_ADAPTER_DATA _IOWR(MPTIOCTL, 1,\
+ struct mps_adapter_data)
+#define MPTIOCTL_UPDATE_FLASH _IOWR(MPTIOCTL, 2,\
+ struct mps_update_flash)
+#define MPTIOCTL_RESET_ADAPTER _IO(MPTIOCTL, 3)
+#define MPTIOCTL_PASS_THRU _IOWR(MPTIOCTL, 4,\
+ struct mps_pass_thru)
+#define MPTIOCTL_EVENT_QUERY _IOWR(MPTIOCTL, 5,\
+ struct mps_event_query)
+#define MPTIOCTL_EVENT_ENABLE _IOWR(MPTIOCTL, 6,\
+ struct mps_event_enable)
+#define MPTIOCTL_EVENT_REPORT _IOWR(MPTIOCTL, 7,\
+ struct mps_event_report)
+#define MPTIOCTL_GET_PCI_INFO _IOWR(MPTIOCTL, 8,\
+ struct mps_pci_info)
+#define MPTIOCTL_DIAG_ACTION _IOWR(MPTIOCTL, 9,\
+ struct mps_diag_action)
+#define MPTIOCTL_REG_ACCESS _IOWR(MPTIOCTL, 10,\
+ struct mps_reg_access)
+#define MPTIOCTL_BTDH_MAPPING _IOWR(MPTIOCTL, 11,\
+ struct mps_btdh_mapping)
+
+#endif /* !_MPS_IOCTL_H_ */
diff --git a/usr.sbin/mpsutil/mps_show.c b/usr.sbin/mpsutil/mps_show.c
new file mode 100644
index 0000000..d6a7840
--- /dev/null
+++ b/usr.sbin/mpsutil/mps_show.c
@@ -0,0 +1,772 @@
+/*-
+ * Copyright (c) 2015 Netflix, Inc.
+ * All rights reserved.
+ * Written by: Scott Long <scottl@freebsd.org>
+ *
+ * Copyright (c) 2008 Yahoo!, Inc.
+ * All rights reserved.
+ * Written by: John Baldwin <jhb@FreeBSD.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the author nor the names of any co-contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <sys/cdefs.h>
+__RCSID("$FreeBSD$");
+
+#include <sys/param.h>
+#include <sys/errno.h>
+#include <err.h>
+#include <libutil.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include "mpsutil.h"
+
+static char * get_device_speed(uint8_t rate);
+static char * get_device_type(uint32_t di);
+static int show_all(int ac, char **av);
+static int show_devices(int ac, char **av);
+static int show_enclosures(int ac, char **av);
+static int show_expanders(int ac, char **av);
+
+MPS_TABLE(top, show);
+
+#define STANDALONE_STATE "ONLINE"
+
+static int
+show_adapter(int ac, char **av)
+{
+ MPI2_CONFIG_PAGE_SASIOUNIT_0 *sas0;
+ MPI2_CONFIG_PAGE_SASIOUNIT_1 *sas1;
+ MPI2_SAS_IO_UNIT0_PHY_DATA *phy0;
+ MPI2_SAS_IO_UNIT1_PHY_DATA *phy1;
+ MPI2_CONFIG_PAGE_MAN_0 *man0;
+ MPI2_CONFIG_PAGE_BIOS_3 *bios3;
+ MPI2_IOC_FACTS_REPLY *facts;
+ U16 IOCStatus;
+ char *speed, *minspeed, *maxspeed, *isdisabled, *type;
+ char devhandle[5], ctrlhandle[5];
+ int error, fd, v, i;
+
+ if (ac != 1) {
+ warnx("show adapter: extra arguments");
+ return (EINVAL);
+ }
+
+ fd = mps_open(mps_unit);
+ if (fd < 0) {
+ error = errno;
+ warn("mps_open");
+ return (error);
+ }
+
+ man0 = mps_read_man_page(fd, 0, NULL);
+ if (man0 == NULL) {
+ error = errno;
+ warn("Failed to get controller info");
+ return (error);
+ }
+ if (man0->Header.PageLength < sizeof(*man0) / 4) {
+ warnx("Invalid controller info");
+ return (EINVAL);
+ }
+ printf("mp%s%d Adapter:\n", is_mps ? "s": "r", mps_unit);
+ printf(" Board Name: %.16s\n", man0->BoardName);
+ printf(" Board Assembly: %.16s\n", man0->BoardAssembly);
+ printf(" Chip Name: %.16s\n", man0->ChipName);
+ printf(" Chip Revision: %.16s\n", man0->ChipRevision);
+ free(man0);
+
+ bios3 = mps_read_config_page(fd, MPI2_CONFIG_PAGETYPE_BIOS, 3, 0, NULL);
+ if (bios3 == NULL) {
+ error = errno;
+ warn("Failed to get BIOS page 3 info");
+ return (error);
+ }
+ v = bios3->BiosVersion;
+ printf(" BIOS Revision: %d.%02d.%02d.%02d\n",
+ ((v & 0xff000000) >> 24), ((v &0xff0000) >> 16),
+ ((v & 0xff00) >> 8), (v & 0xff));
+ free(bios3);
+
+ if ((facts = mps_get_iocfacts(fd)) == NULL) {
+ printf("could not get controller IOCFacts\n");
+ close(fd);
+ return (errno);
+ }
+ v = facts->FWVersion.Word;
+ printf("Firmware Revision: %d.%02d.%02d.%02d\n",
+ ((v & 0xff000000) >> 24), ((v &0xff0000) >> 16),
+ ((v & 0xff00) >> 8), (v & 0xff));
+ printf(" Integrated RAID: %s\n",
+ (facts->IOCCapabilities & MPI2_IOCFACTS_CAPABILITY_INTEGRATED_RAID)
+ ? "yes" : "no");
+ free(facts);
+
+ fd = mps_open(mps_unit);
+ if (fd < 0) {
+ error = errno;
+ warn("mps_open");
+ return (error);
+ }
+
+ sas0 = mps_read_extended_config_page(fd,
+ MPI2_CONFIG_EXTPAGETYPE_SAS_IO_UNIT,
+ MPI2_SASIOUNITPAGE0_PAGEVERSION, 0, 0, &IOCStatus);
+ if (sas0 == NULL) {
+ error = errno;
+ warn("Error retrieving SAS IO Unit page %d", IOCStatus);
+ return (error);
+ }
+
+ sas1 = mps_read_extended_config_page(fd,
+ MPI2_CONFIG_EXTPAGETYPE_SAS_IO_UNIT,
+ MPI2_SASIOUNITPAGE1_PAGEVERSION, 1, 0, &IOCStatus);
+ if (sas0 == NULL) {
+ error = errno;
+ warn("Error retrieving SAS IO Unit page %d", IOCStatus);
+ return (error);
+ }
+ printf("\n");
+
+ printf("%-8s%-12s%-11s%-10s%-8s%-7s%-7s%s\n", "PhyNum", "CtlrHandle",
+ "DevHandle", "Disabled", "Speed", "Min", "Max", "Device");
+ for (i = 0; i < sas0->NumPhys; i++) {
+ phy0 = &sas0->PhyData[i];
+ phy1 = &sas1->PhyData[i];
+ if (phy0->PortFlags &
+ MPI2_SASIOUNIT0_PORTFLAGS_DISCOVERY_IN_PROGRESS) {
+ printf("Discovery still in progress\n");
+ continue;
+ }
+ if (phy0->PhyFlags & MPI2_SASIOUNIT0_PHYFLAGS_PHY_DISABLED)
+ isdisabled = "Y";
+ else
+ isdisabled = "N";
+
+ minspeed = get_device_speed(phy1->MaxMinLinkRate);
+ maxspeed = get_device_speed(phy1->MaxMinLinkRate >> 4);
+ type = get_device_type(phy0->ControllerPhyDeviceInfo);
+
+ if (phy0->AttachedDevHandle != 0) {
+ snprintf(devhandle, 5, "%04x", phy0->AttachedDevHandle);
+ snprintf(ctrlhandle, 5, "%04x",
+ phy0->ControllerDevHandle);
+ speed = get_device_speed(phy0->NegotiatedLinkRate);
+ } else {
+ snprintf(devhandle, 5, " ");
+ snprintf(ctrlhandle, 5, " ");
+ speed = " ";
+ }
+ printf("%-8d%-12s%-11s%-10s%-8s%-7s%-7s%s\n",
+ i, ctrlhandle, devhandle, isdisabled, speed, minspeed,
+ maxspeed, type);
+ }
+ free(sas0);
+ free(sas1);
+ printf("\n");
+ close(fd);
+ return (0);
+}
+
+MPS_COMMAND(show, adapter, show_adapter, "", "display controller information")
+
+static int
+show_iocfacts(int ac, char **av)
+{
+ MPI2_IOC_FACTS_REPLY *facts;
+ int error, fd;
+
+ fd = mps_open(mps_unit);
+ if (fd < 0) {
+ error = errno;
+ warn("mps_open");
+ return (error);
+ }
+
+ if ((facts = mps_get_iocfacts(fd)) == NULL) {
+ printf("could not get controller IOCFacts\n");
+ close(fd);
+ return (errno);
+ }
+
+ printf(" MaxChainDepth: %d\n", facts->MaxChainDepth);
+ printf(" WhoInit: 0x%x\n", facts->WhoInit);
+ printf(" NumberOfPorts: %d\n", facts->NumberOfPorts);
+ printf(" MaxMSIxVectors: %d\n", facts->MaxMSIxVectors);
+ printf(" RequestCredit: %d\n", facts->RequestCredit);
+ printf(" ProductID: 0x%x\n", facts->ProductID);
+ printf(" IOCCapabilities: 0x%x\n", facts->IOCCapabilities);
+ printf(" FWVersion: 0x%08x\n", facts->FWVersion.Word);
+ printf(" IOCRequestFrameSize: %d\n", facts->IOCRequestFrameSize);
+ printf(" MaxInitiators: %d\n", facts->MaxInitiators);
+ printf(" MaxTargets: %d\n", facts->MaxTargets);
+ printf(" MaxSasExpanders: %d\n", facts->MaxSasExpanders);
+ printf(" MaxEnclosures: %d\n", facts->MaxEnclosures);
+ printf(" ProtocolFlags: 0x%x\n", facts->ProtocolFlags);
+ printf(" HighPriorityCredit: %d\n", facts->HighPriorityCredit);
+ printf("MaxRepDescPostQDepth: %d\n",
+ facts->MaxReplyDescriptorPostQueueDepth);
+ printf(" ReplyFrameSize: %d\n", facts->ReplyFrameSize);
+ printf(" MaxVolumes: %d\n", facts->MaxVolumes);
+ printf(" MaxDevHandle: %d\n", facts->MaxDevHandle);
+ printf("MaxPersistentEntries: %d\n", facts->MaxPersistentEntries);
+ printf(" MinDevHandle: %d\n", facts->MinDevHandle);
+
+ free(facts);
+ return (0);
+}
+
+MPS_COMMAND(show, iocfacts, show_iocfacts, "", "Show IOC Facts Message");
+
+static int
+show_adapters(int ac, char **av)
+{
+ MPI2_CONFIG_PAGE_MAN_0 *man0;
+ MPI2_IOC_FACTS_REPLY *facts;
+ int unit, fd, error;
+
+ printf("Device Name\t Chip Name Board Name Firmware\n");
+ for (unit = 0; unit < MPS_MAX_UNIT; unit++) {
+ fd = mps_open(unit);
+ if (fd < 0)
+ continue;
+ facts = mps_get_iocfacts(fd);
+ if (facts == NULL) {
+ error = errno;
+ warn("Faled to get controller iocfacts");
+ close(fd);
+ return (error);
+ }
+ man0 = mps_read_man_page(fd, 0, NULL);
+ if (man0 == NULL) {
+ error = errno;
+ warn("Failed to get controller info");
+ close(fd);
+ return (error);
+ }
+ if (man0->Header.PageLength < sizeof(*man0) / 4) {
+ warnx("Invalid controller info");
+ close(fd);
+ free(man0);
+ return (EINVAL);
+ }
+ printf("/dev/mp%s%d\t%16s %16s %08x\n",
+ is_mps ? "s": "r", unit,
+ man0->ChipName, man0->BoardName, facts->FWVersion.Word);
+ free(man0);
+ free(facts);
+ close(fd);
+ }
+ return (0);
+}
+MPS_COMMAND(show, adapters, show_adapters, "", "Show a summary of all adapters");
+
+static char *
+get_device_type(uint32_t di)
+{
+
+ if (di & 0x4000)
+ return ("SEP Target ");
+ if (di & 0x2000)
+ return ("ATAPI Target ");
+ if (di & 0x400)
+ return ("SAS Target ");
+ if (di & 0x200)
+ return ("STP Target ");
+ if (di & 0x100)
+ return ("SMP Target ");
+ if (di & 0x80)
+ return ("SATA Target ");
+ if (di & 0x70)
+ return ("SAS Initiator ");
+ if (di & 0x8)
+ return ("SATA Initiator");
+ if ((di & 0x7) == 0)
+ return ("No Device ");
+ return ("Unknown Device");
+}
+
+static char *
+get_enc_type(uint32_t flags, int *issep)
+{
+ char *type;
+
+ *issep = 0;
+ switch (flags & 0xf) {
+ case 0x01:
+ type = "Direct Attached SES-2";
+ *issep = 1;
+ break;
+ case 0x02:
+ type = "Direct Attached SGPIO";
+ break;
+ case 0x03:
+ type = "Expander SGPIO";
+ break;
+ case 0x04:
+ type = "External SES-2";
+ *issep = 1;
+ break;
+ case 0x05:
+ type = "Direct Attached GPIO";
+ break;
+ case 0x0:
+ default:
+ return ("Unknown");
+ }
+
+ return (type);
+}
+
+static char *
+mps_device_speed[] = {
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "1.5",
+ "3.0",
+ "6.0",
+ "12 "
+};
+
+static char *
+get_device_speed(uint8_t rate)
+{
+ char *speed;
+
+ rate &= 0xf;
+ if (rate >= sizeof(mps_device_speed))
+ return ("Unk");
+
+ if ((speed = mps_device_speed[rate]) == NULL)
+ return ("???");
+ return (speed);
+}
+
+static char *
+mps_page_name[] = {
+ "IO Unit",
+ "IOC",
+ "BIOS",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "RAID Volume",
+ "Manufacturing",
+ "RAID Physical Disk",
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ NULL,
+ "SAS IO Unit",
+ "SAS Expander",
+ "SAS Device",
+ "SAS PHY",
+ "Log",
+ "Enclosure",
+ "RAID Configuration",
+ "Driver Persistent Mapping",
+ "SAS Port",
+ "Ethernet Port",
+ "Extended Manufacturing"
+};
+
+static char *
+get_page_name(u_int page)
+{
+ char *name;
+
+ if (page >= sizeof(mps_page_name))
+ return ("Unknown");
+ if ((name = mps_page_name[page]) == NULL)
+ return ("Unknown");
+ return (name);
+}
+
+static int
+show_all(int ac, char **av)
+{
+ int error;
+
+ printf("Adapter:\n");
+ error = show_adapter(ac, av);
+ printf("Devices:\n");
+ error = show_devices(ac, av);
+ printf("Enclosures:\n");
+ error = show_enclosures(ac, av);
+ printf("Expanders:\n");
+ error = show_expanders(ac, av);
+ return (error);
+}
+MPS_COMMAND(show, all, show_all, "", "Show all devices");
+
+static int
+show_devices(int ac, char **av)
+{
+ MPI2_CONFIG_PAGE_SASIOUNIT_0 *sas0;
+ MPI2_SAS_IO_UNIT0_PHY_DATA *phydata;
+ MPI2_CONFIG_PAGE_SAS_DEV_0 *device;
+ MPI2_CONFIG_PAGE_EXPANDER_1 *exp1;
+ uint16_t IOCStatus, handle, bus, target;
+ char *type, *speed, enchandle[5], slot[3], bt[8];
+ char buf[256];
+ int fd, error, nphys;
+
+ fd = mps_open(mps_unit);
+ if (fd < 0) {
+ error = errno;
+ warn("mps_open");
+ return (error);
+ }
+
+ sas0 = mps_read_extended_config_page(fd,
+ MPI2_CONFIG_EXTPAGETYPE_SAS_IO_UNIT,
+ MPI2_SASIOUNITPAGE0_PAGEVERSION, 0, 0, &IOCStatus);
+ if (sas0 == NULL) {
+ error = errno;
+ warn("Error retrieving SAS IO Unit page %d", IOCStatus);
+ return (error);
+ }
+ nphys = sas0->NumPhys;
+
+ printf("B____%-5s%-17s%-8s%-10s%-14s%-6s%-5s%-6s%s\n",
+ "T", "SAS Address", "Handle", "Parent", "Device", "Speed",
+ "Enc", "Slot", "Wdt");
+ handle = 0xffff;
+ while (1) {
+ device = mps_read_extended_config_page(fd,
+ MPI2_CONFIG_EXTPAGETYPE_SAS_DEVICE,
+ MPI2_SASDEVICE0_PAGEVERSION, 0,
+ MPI2_SAS_DEVICE_PGAD_FORM_GET_NEXT_HANDLE | handle,
+ &IOCStatus);
+ if (device == NULL) {
+ if (IOCStatus == MPI2_IOCSTATUS_CONFIG_INVALID_PAGE)
+ break;
+ error = errno;
+ warn("Error retrieving device page");
+ return (error);
+ }
+ handle = device->DevHandle;
+
+ if (device->ParentDevHandle == 0x0) {
+ free(device);
+ continue;
+ }
+
+ bus = 0xffff;
+ target = 0xffff;
+ error = mps_map_btdh(fd, &handle, &bus, &target);
+ if (error) {
+ free(device);
+ continue;
+ }
+ if ((bus == 0xffff) || (target == 0xffff))
+ snprintf(bt, sizeof(bt), " ");
+ else
+ snprintf(bt, sizeof(bt), "%02d %02d", bus, target);
+
+ type = get_device_type(device->DeviceInfo);
+
+ if (device->PhyNum < nphys) {
+ phydata = &sas0->PhyData[device->PhyNum];
+ speed = get_device_speed(phydata->NegotiatedLinkRate);
+ } else if (device->ParentDevHandle > 0) {
+ exp1 = mps_read_extended_config_page(fd,
+ MPI2_CONFIG_EXTPAGETYPE_SAS_EXPANDER,
+ MPI2_SASEXPANDER1_PAGEVERSION, 1,
+ MPI2_SAS_EXPAND_PGAD_FORM_HNDL_PHY_NUM |
+ (device->PhyNum <<
+ MPI2_SAS_EXPAND_PGAD_PHYNUM_SHIFT) |
+ device->ParentDevHandle, &IOCStatus);
+ if (exp1 == NULL) {
+ if (IOCStatus != MPI2_IOCSTATUS_CONFIG_INVALID_PAGE) {
+ error = errno;
+ warn("Error retrieving expander page 1: 0x%x",
+ IOCStatus);
+ return (error);
+ }
+ speed = " ";
+ } else {
+ speed = get_device_speed(exp1->NegotiatedLinkRate);
+ free(exp1);
+ }
+ } else
+ speed = " ";
+
+ if (device->EnclosureHandle != 0) {
+ snprintf(enchandle, 5, "%04x", device->EnclosureHandle);
+ snprintf(slot, 3, "%02d", device->Slot);
+ } else {
+ snprintf(enchandle, 5, " ");
+ snprintf(slot, 3, " ");
+ }
+ printf("%-10s", bt);
+ snprintf(buf, sizeof(buf), "%08x%08x", device->SASAddress.High,
+ device->SASAddress.Low);
+ printf("%-17s", buf);
+ snprintf(buf, sizeof(buf), "%04x", device->DevHandle);
+ printf("%-8s", buf);
+ snprintf(buf, sizeof(buf), "%04x", device->ParentDevHandle);
+ printf("%-10s", buf);
+ printf("%-14s%-6s%-5s%-6s%d\n", type, speed,
+ enchandle, slot, device->MaxPortConnections);
+ free(device);
+ }
+ printf("\n");
+ free(sas0);
+ close(fd);
+ return (0);
+}
+MPS_COMMAND(show, devices, show_devices, "", "Show attached devices");
+
+static int
+show_enclosures(int ac, char **av)
+{
+ MPI2_CONFIG_PAGE_SAS_ENCLOSURE_0 *enc;
+ char *type, sepstr[5];
+ uint16_t IOCStatus, handle;
+ int fd, error, issep;
+
+ fd = mps_open(mps_unit);
+ if (fd < 0) {
+ error = errno;
+ warn("mps_open");
+ return (error);
+ }
+
+ printf("Slots Logical ID SEPHandle EncHandle Type\n");
+ handle = 0xffff;
+ while (1) {
+ enc = mps_read_extended_config_page(fd,
+ MPI2_CONFIG_EXTPAGETYPE_ENCLOSURE,
+ MPI2_SASENCLOSURE0_PAGEVERSION, 0,
+ MPI2_SAS_ENCLOS_PGAD_FORM_GET_NEXT_HANDLE | handle,
+ &IOCStatus);
+ if (enc == NULL) {
+ if (IOCStatus == MPI2_IOCSTATUS_CONFIG_INVALID_PAGE)
+ break;
+ error = errno;
+ warn("Error retrieving enclosure page");
+ return (error);
+ }
+ type = get_enc_type(enc->Flags, &issep);
+ if (issep == 0)
+ snprintf(sepstr, 5, " ");
+ else
+ snprintf(sepstr, 5, "%04x", enc->SEPDevHandle);
+ printf(" %.2d %08x%08x %s %04x %s\n",
+ enc->NumSlots, enc->EnclosureLogicalID.High,
+ enc->EnclosureLogicalID.Low, sepstr, enc->EnclosureHandle,
+ type);
+ handle = enc->EnclosureHandle;
+ free(enc);
+ }
+ printf("\n");
+ close(fd);
+ return (0);
+}
+MPS_COMMAND(show, enclosures, show_enclosures, "", "Show attached enclosures");
+
+static int
+show_expanders(int ac, char **av)
+{
+ MPI2_CONFIG_PAGE_EXPANDER_0 *exp0;
+ MPI2_CONFIG_PAGE_EXPANDER_1 *exp1;
+ uint16_t IOCStatus, handle;
+ char enchandle[5], parent[5], rphy[3], rhandle[5];
+ char *speed, *min, *max, *type;
+ int fd, error, nphys, i;
+
+ fd = mps_open(mps_unit);
+ if (fd < 0) {
+ error = errno;
+ warn("mps_open");
+ return (error);
+ }
+
+ printf("NumPhys SAS Address DevHandle Parent EncHandle SAS Level\n");
+ handle = 0xffff;
+ while (1) {
+ exp0 = mps_read_extended_config_page(fd,
+ MPI2_CONFIG_EXTPAGETYPE_SAS_EXPANDER,
+ MPI2_SASEXPANDER0_PAGEVERSION, 0,
+ MPI2_SAS_EXPAND_PGAD_FORM_GET_NEXT_HNDL | handle,
+ &IOCStatus);
+ if (exp0 == NULL) {
+ if (IOCStatus == MPI2_IOCSTATUS_CONFIG_INVALID_PAGE)
+ break;
+ error = errno;
+ warn("Error retrieving expander page 0");
+ return (error);
+ }
+
+ nphys = exp0->NumPhys;
+ handle = exp0->DevHandle;
+
+ if (exp0->EnclosureHandle == 0x00)
+ snprintf(enchandle, 5, " ");
+ else
+ snprintf(enchandle, 5, "%04d", exp0->EnclosureHandle);
+ if (exp0->ParentDevHandle == 0x0)
+ snprintf(parent, 5, " ");
+ else
+ snprintf(parent, 5, "%04x", exp0->ParentDevHandle);
+ printf(" %02d %08x%08x %04x %s %s %d\n",
+ exp0->NumPhys, exp0->SASAddress.High, exp0->SASAddress.Low,
+ exp0->DevHandle, parent, enchandle, exp0->SASLevel);
+
+ printf("\n");
+ printf(" Phy RemotePhy DevHandle Speed Min Max Device\n");
+ for (i = 0; i < nphys; i++) {
+ exp1 = mps_read_extended_config_page(fd,
+ MPI2_CONFIG_EXTPAGETYPE_SAS_EXPANDER,
+ MPI2_SASEXPANDER1_PAGEVERSION, 1,
+ MPI2_SAS_EXPAND_PGAD_FORM_HNDL_PHY_NUM |
+ (i << MPI2_SAS_EXPAND_PGAD_PHYNUM_SHIFT) |
+ exp0->DevHandle, &IOCStatus);
+ if (exp1 == NULL) {
+ if (IOCStatus !=
+ MPI2_IOCSTATUS_CONFIG_INVALID_PAGE)
+ warn("Error retrieving expander pg 1");
+ continue;
+ }
+ type = get_device_type(exp1->AttachedDeviceInfo);
+ if ((exp1->AttachedDeviceInfo &0x7) == 0) {
+ speed = " ";
+ snprintf(rphy, 3, " ");
+ snprintf(rhandle, 5, " ");
+ } else {
+ speed = get_device_speed(
+ exp1->NegotiatedLinkRate);
+ snprintf(rphy, 3, "%02d",
+ exp1->AttachedPhyIdentifier);
+ snprintf(rhandle, 5, "%04x",
+ exp1->AttachedDevHandle);
+ }
+ min = get_device_speed(exp1->HwLinkRate);
+ max = get_device_speed(exp1->HwLinkRate >> 4);
+ printf(" %02d %s %s %s %s %s %s\n", exp1->Phy, rphy, rhandle, speed, min, max, type);
+
+ free(exp1);
+ }
+ free(exp0);
+ }
+
+ printf("\n");
+ close(fd);
+ return (0);
+}
+
+MPS_COMMAND(show, expanders, show_expanders, "", "Show attached expanders");
+
+static int
+show_cfgpage(int ac, char **av)
+{
+ MPI2_CONFIG_PAGE_HEADER *hdr;
+ MPI2_CONFIG_EXTENDED_PAGE_HEADER *ehdr;
+ void *data;
+ uint32_t addr;
+ uint16_t IOCStatus;
+ uint8_t page, num;
+ int fd, error, len, attrs;
+ char *pgname, *pgattr;
+
+ fd = mps_open(mps_unit);
+ if (fd < 0) {
+ error = errno;
+ warn("mps_open");
+ return (error);
+ }
+
+ addr = 0;
+ num = 0;
+ page = 0;
+
+ switch (ac) {
+ case 4:
+ addr = (uint32_t)strtoul(av[3], NULL, 0);
+ case 3:
+ num = (uint8_t)strtoul(av[2], NULL, 0);
+ case 2:
+ page = (uint8_t)strtoul(av[1], NULL, 0);
+ break;
+ default:
+ errno = EINVAL;
+ warn("cfgpage: not enough arguments");
+ return (EINVAL);
+ }
+
+ if (page >= 0x10)
+ data = mps_read_extended_config_page(fd, page, 0, num, addr,
+ &IOCStatus);
+ else
+ data = mps_read_config_page(fd, page, num, addr, &IOCStatus);
+
+ if (data == NULL) {
+ error = errno;
+ warn("Error retrieving cfg page: %s\n",
+ mps_ioc_status(IOCStatus));
+ return (error);
+ }
+
+ if (page >= 0x10) {
+ ehdr = data;
+ len = ehdr->ExtPageLength * 4;
+ page = ehdr->ExtPageType;
+ attrs = ehdr->PageType >> 4;
+ } else {
+ hdr = data;
+ len = hdr->PageLength * 4;
+ page = hdr->PageType & 0xf;
+ attrs = hdr->PageType >> 4;
+ }
+
+ pgname = get_page_name(page);
+ if (attrs == 0)
+ pgattr = "Read-only";
+ else if (attrs == 1)
+ pgattr = "Read-Write";
+ else if (attrs == 2)
+ pgattr = "Read-Write Persistent";
+ else
+ pgattr = "Unknown Page Attribute";
+
+ printf("Page 0x%x: %s %d, %s\n", page, pgname, num, pgattr);
+ hexdump(data, len, NULL, HD_REVERSED | 4);
+ free(data);
+ return (0);
+}
+
+MPS_COMMAND(show, cfgpage, show_cfgpage, "page [num] [addr]", "Display config page");
diff --git a/usr.sbin/mpsutil/mpsutil.8 b/usr.sbin/mpsutil/mpsutil.8
new file mode 100644
index 0000000..7b6dae4
--- /dev/null
+++ b/usr.sbin/mpsutil/mpsutil.8
@@ -0,0 +1,129 @@
+.\"
+.\" Copyright (c) Baptiste Daroussin <bapt@FreeBSD.org>
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\" notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\" notice, this list of conditions and the following disclaimer in the
+.\" documentation and/or other materials provided with the distribution.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.\"
+.\" $FreeBSD$
+.\"
+.Dd October 28, 2015
+.Dt MPSUTIL 8
+.Os
+.Sh NAME
+.Nm mpsutil ,
+.Nm mprutil
+.Nd Utility for managing LSI Fusion-MPT 2/3 controllers
+.Sh SYNOPSIS
+.Nm
+.Cm version
+.Nm
+.Op Fl u Ar unit
+.Cm show adapter
+.Nm
+.Op Fl u Ar unit
+.Cm show adapters
+.Nm
+.Op Fl u Ar unit
+.Cm show all
+.Nm
+.Op Fl u Ar unit
+.Cm show cfgpages page
+.Op Ar num
+.Op Ar addr
+.Nm
+.Op Fl u Ar unit
+.Cm show devices
+.Nm
+.Op Fl u Ar unit
+.Cm show enclosures
+.Nm
+.Op Fl u Ar unit
+.Cm show expanders
+.Nm
+.Op Fl u Ar unit
+.Cm show iocfacts
+.Sh DESCRIPTION
+The
+.Nm
+utility can be used to display or modify various parameters on LSI
+Fusion-MPS 2 controllers.
+.Pp
+The
+.Nm mprutil
+utility can be used to display or modify various parameters on LSI
+Fusion-MPS 3 controllers.
+.Pp
+The
+.Nm mprutil
+utility behave identically to
+.Nm .
+(same program)
+.Pp
+Each invocation of
+.Nm
+consists of zero or more global options followed by a command.
+Commands may support additional optional or required arguments after the
+command.
+.Pp
+Currently one global option is supported:
+.Bl -tag -width indent
+.It Fl u Ar unit
+.Ar unit
+specifies the unit of the controller to work with.
+If no unit is specified,
+then unit 0 is used.
+.El
+.Pp
+The
+.Nm
+utility currently only supports informational commands.
+.Pp
+The informational commands include:
+.Bl -tag -width indent
+.It Cm version
+Displays the version of
+.Nm .
+.It Cm show adapter
+Displays information about the controller such as the model number or firmware
+version.
+.It Cm show adapters
+Displays a summary of all adapters.
+.It Cm show all
+Displays all devices, expanders and enclosures.
+.It Cm show devices
+Displays all devices.
+.It Cm show expanders
+Displays all expanders.
+.It Cm show enclosures
+Displays all enclosures.
+.It Cm show iocfacts
+Displays IOC Facts messages.
+.It Cm show cfgpage page Oo Ar num Oc Op Ar addr
+Show IOC Facts Message
+.El
+.Sh SEE ALSO
+.Xr mpr 4
+.Xr mps 4
+.Sh HISTORY
+The
+.Nm
+utility first appeared in
+.Fx 11.0 .
diff --git a/usr.sbin/mpsutil/mpsutil.c b/usr.sbin/mpsutil/mpsutil.c
new file mode 100644
index 0000000..666a46e
--- /dev/null
+++ b/usr.sbin/mpsutil/mpsutil.c
@@ -0,0 +1,207 @@
+/*-
+ * Copyright (c) 2015 Netflix, Inc.
+ * All rights reserved.
+ * Written by: Scott Long <scottl@freebsd.org>
+ *
+ * Copyright (c) 2008 Yahoo!, Inc.
+ * All rights reserved.
+ * Written by: John Baldwin <jhb@FreeBSD.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the author nor the names of any co-contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
+
+#include <sys/cdefs.h>
+__RCSID("$FreeBSD$");
+
+#include <sys/param.h>
+#include <sys/errno.h>
+#include <err.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include "mpsutil.h"
+
+SET_DECLARE(MPS_DATASET(top), struct mpsutil_command);
+SET_DECLARE(MPS_DATASET(usage), struct mpsutil_usage);
+
+int mps_unit;
+int is_mps;
+
+static void
+usage(void)
+{
+ struct mpsutil_usage **cmd;
+ const char *args, *desc;
+
+ fprintf(stderr, "usage: %s [-u unit] <command> ...\n\n", getprogname());
+ fprintf(stderr, "Commands include:\n");
+ SET_FOREACH(cmd, MPS_DATASET(usage)) {
+ if (*cmd == NULL)
+ fprintf(stderr, "\n");
+ else
+ (*cmd)->handler(&args, &desc);
+ if (strncmp((*cmd)->set, "top", 3) == 0)
+ fprintf(stderr, "%s %-30s\t%s\n",
+ (*cmd)->name, args, desc);
+ else
+ fprintf(stderr, "%s %s %-30s\t%s\n",
+ (*cmd)->set, (*cmd)->name, args, desc);
+ }
+ exit(1);
+}
+
+static int
+version(int ac, char **av)
+{
+
+ printf("%s: version %s", MPSUTIL_VERSION, getprogname());
+#ifdef DEBUG
+ printf(" (DEBUG)");
+#endif
+ printf("\n");
+ return (0);
+}
+
+MPS_COMMAND(top, version, version, "", "version")
+
+int
+main(int ac, char **av)
+{
+ struct mpsutil_command **cmd;
+ int ch;
+
+ is_mps = !strcmp(getprogname(), "mpsutil");
+
+ while ((ch = getopt(ac, av, "u:h?")) != -1) {
+ switch (ch) {
+ case 'u':
+ mps_unit = atoi(optarg);
+ break;
+ case 'h':
+ case '?':
+ usage();
+ return (1);
+ }
+ }
+
+ av += optind;
+ ac -= optind;
+
+ /* getopt() eats av[0], so we can't use mpt_table_handler() directly. */
+ if (ac == 0) {
+ usage();
+ return (1);
+ }
+
+ SET_FOREACH(cmd, MPS_DATASET(top)) {
+ if (strcmp((*cmd)->name, av[0]) == 0) {
+ if ((*cmd)->handler(ac, av))
+ return (1);
+ else
+ return (0);
+ }
+ }
+ warnx("Unknown command %s.", av[0]);
+ return (1);
+}
+
+int
+mps_table_handler(struct mpsutil_command **start, struct mpsutil_command **end,
+ int ac, char **av)
+{
+ struct mpsutil_command **cmd;
+
+ if (ac < 2) {
+ warnx("The %s command requires a sub-command.", av[0]);
+ return (EINVAL);
+ }
+ for (cmd = start; cmd < end; cmd++) {
+ if (strcmp((*cmd)->name, av[1]) == 0)
+ return ((*cmd)->handler(ac - 1, av + 1));
+ }
+
+ warnx("%s is not a valid sub-command of %s.", av[1], av[0]);
+ return (ENOENT);
+}
+
+void
+hexdump(const void *ptr, int length, const char *hdr, int flags)
+{
+ int i, j, k;
+ int cols;
+ const unsigned char *cp;
+ char delim;
+
+ if ((flags & HD_DELIM_MASK) != 0)
+ delim = (flags & HD_DELIM_MASK) >> 8;
+ else
+ delim = ' ';
+
+ if ((flags & HD_COLUMN_MASK) != 0)
+ cols = flags & HD_COLUMN_MASK;
+ else
+ cols = 16;
+
+ cp = ptr;
+ for (i = 0; i < length; i+= cols) {
+ if (hdr != NULL)
+ printf("%s", hdr);
+
+ if ((flags & HD_OMIT_COUNT) == 0)
+ printf("%04x ", i);
+
+ if ((flags & HD_OMIT_HEX) == 0) {
+ for (j = 0; j < cols; j++) {
+ if (flags & HD_REVERSED)
+ k = i + (cols - 1 - j);
+ else
+ k = i + j;
+ if (k < length)
+ printf("%c%02x", delim, cp[k]);
+ else
+ printf(" ");
+ }
+ }
+
+ if ((flags & HD_OMIT_CHARS) == 0) {
+ printf(" |");
+ for (j = 0; j < cols; j++) {
+ if (flags & HD_REVERSED)
+ k = i + (cols - 1 - j);
+ else
+ k = i + j;
+ if (k >= length)
+ printf(" ");
+ else if (cp[k] >= ' ' && cp[k] <= '~')
+ printf("%c", cp[k]);
+ else
+ printf(".");
+ }
+ printf("|");
+ }
+ printf("\n");
+ }
+}
diff --git a/usr.sbin/mpsutil/mpsutil.h b/usr.sbin/mpsutil/mpsutil.h
new file mode 100644
index 0000000..dd6fc0b
--- /dev/null
+++ b/usr.sbin/mpsutil/mpsutil.h
@@ -0,0 +1,144 @@
+/*-
+ * Copyright (c) 2008 Yahoo!, Inc.
+ * All rights reserved.
+ * Written by: John Baldwin <jhb@FreeBSD.org>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the author nor the names of any co-contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * $FreeBSD$
+ */
+
+#ifndef __MPSUTIL_H__
+#define __MPSUTIL_H__
+
+#include <sys/cdefs.h>
+#include <sys/linker_set.h>
+
+#include <dev/mps/mpi/mpi2_type.h>
+#include <dev/mps/mpi/mpi2.h>
+#include <dev/mps/mpi/mpi2_cnfg.h>
+#include <dev/mps/mpi/mpi2_raid.h>
+#include <dev/mps/mpi/mpi2_ioc.h>
+
+#define MPSUTIL_VERSION "1.0.0"
+
+#define IOC_STATUS_SUCCESS(status) \
+ (((status) & MPI2_IOCSTATUS_MASK) == MPI2_IOCSTATUS_SUCCESS)
+
+struct mpsutil_command {
+ const char *name;
+ int (*handler)(int ac, char **av);
+};
+struct mpsutil_usage {
+ const char *set;
+ const char *name;
+ void (*handler)(const char **, const char**);
+};
+
+#define MPS_DATASET(name) mpsutil_ ## name ## _table
+
+#define MPS_COMMAND(set, name, function, args, desc) \
+ static struct mpsutil_command function ## _mpsutil_command = \
+ { #name, function }; \
+ DATA_SET(MPS_DATASET(set), function ## _mpsutil_command); \
+ static void \
+ function ## _usage(const char **a3, const char **a4) \
+ { \
+ *a3 = args; \
+ *a4 = desc; \
+ return; \
+ }; \
+ static struct mpsutil_usage function ## _mpsutil_usage = \
+ { #set, #name, function ## _usage }; \
+ DATA_SET(MPS_DATASET(usage), function ## _mpsutil_usage);
+
+#define _MPS_COMMAND(set, name, function) \
+ static struct mpsutil_command function ## _mpsutil_command = \
+ { #name, function }; \
+ DATA_SET(MPS_DATASET(set), function ## _mpsutil_command);
+
+#define MPS_TABLE(set, name) \
+ SET_DECLARE(MPS_DATASET(name), struct mpsutil_command); \
+ \
+ static int \
+ mpsutil_ ## name ## _table_handler(int ac, char **av) \
+ { \
+ return (mps_table_handler(SET_BEGIN(MPS_DATASET(name)), \
+ SET_LIMIT(MPS_DATASET(name)), ac, av)); \
+ } \
+ _MPS_COMMAND(set, name, mpsutil_ ## name ## _table_handler)
+
+extern int mps_unit;
+extern int is_mps;
+#define MPS_MAX_UNIT 10
+
+void hexdump(const void *ptr, int length, const char *hdr, int flags);
+#define HD_COLUMN_MASK 0xff
+#define HD_DELIM_MASK 0xff00
+#define HD_OMIT_COUNT (1 << 16)
+#define HD_OMIT_HEX (1 << 17)
+#define HD_OMIT_CHARS (1 << 18)
+#define HD_REVERSED (1 << 19)
+
+int mps_open(int unit);
+int mps_table_handler(struct mpsutil_command **start,
+ struct mpsutil_command **end, int ac, char **av);
+int mps_user_command(int fd, void *req, uint32_t req_len, void *reply,
+ uint32_t reply_len, void *buffer, int len, uint32_t flags);
+int mps_pass_command(int fd, void *req, uint32_t req_len, void *reply,
+ uint32_t reply_len, void *data_in, uint32_t datain_len, void *data_out,
+ uint32_t dataout_len, uint32_t timeout);
+int mps_read_config_page_header(int fd, U8 PageType, U8 PageNumber,
+ U32 PageAddress, MPI2_CONFIG_PAGE_HEADER *header, U16 *IOCStatus);
+int mps_read_ext_config_page_header(int fd, U8 ExtPageType, U8 PageNumber,
+ U32 PageAddress, MPI2_CONFIG_PAGE_HEADER *header,
+ U16 *ExtPageLen, U16 *IOCStatus);
+void *mps_read_config_page(int fd, U8 PageType, U8 PageNumber,
+ U32 PageAddress, U16 *IOCStatus);
+void *mps_read_extended_config_page(int fd, U8 ExtPageType, U8 PageVersion,
+ U8 PageNumber, U32 PageAddress, U16 *IOCStatus);
+int mps_map_btdh(int fd, uint16_t *devhandle, uint16_t *bus,
+ uint16_t *target);
+const char *mps_ioc_status(U16 IOCStatus);
+
+static __inline void *
+mps_read_man_page(int fd, U8 PageNumber, U16 *IOCStatus)
+{
+
+ return (mps_read_config_page(fd, MPI2_CONFIG_PAGETYPE_MANUFACTURING,
+ PageNumber, 0, IOCStatus));
+}
+
+static __inline void *
+mps_read_ioc_page(int fd, U8 PageNumber, U16 *IOCStatus)
+{
+
+ return (mps_read_config_page(fd, MPI2_CONFIG_PAGETYPE_IOC, PageNumber,
+ 0, IOCStatus));
+}
+
+MPI2_IOC_FACTS_REPLY * mps_get_iocfacts(int fd);
+
+#endif /* !__MPSUTIL_H__ */
diff --git a/usr.sbin/mptable/mptable.c b/usr.sbin/mptable/mptable.c
index 2c29934..c6fca67 100644
--- a/usr.sbin/mptable/mptable.c
+++ b/usr.sbin/mptable/mptable.c
@@ -217,7 +217,8 @@ main( int argc, char *argv[] )
apic_probe( &paddr, &where );
if ( where <= 0 ) {
fprintf( stderr, "\n MP FPS NOT found,\n" );
- fprintf( stderr, " suggest trying -grope option!!!\n\n" );
+ if (!grope)
+ fprintf( stderr, " suggest trying -grope option!!!\n\n" );
return 1;
}
diff --git a/usr.sbin/nandsim/nandsim.8 b/usr.sbin/nandsim/nandsim.8
index d89767b..0951cc7 100644
--- a/usr.sbin/nandsim/nandsim.8
+++ b/usr.sbin/nandsim/nandsim.8
@@ -177,7 +177,7 @@ list all blocks marked as bad on a given chip.
.El
.It Ic log
Prints activity log of the specified controller to stdout; if
-controller number is not specifed, logs for all available
+controller number is not specified, logs for all available
controllers are printed.
.It Ic stats
Print statistics of the selected controller, chip and page.
diff --git a/usr.sbin/nandsim/nandsim.c b/usr.sbin/nandsim/nandsim.c
index 082085f..bd3d080 100644
--- a/usr.sbin/nandsim/nandsim.c
+++ b/usr.sbin/nandsim/nandsim.c
@@ -421,7 +421,7 @@ cmdmod(int gargc __unused, char **gargv)
if (gargc >= 4) {
if (strcmp(gargv[2], "--loglevel") == 0 || strcmp(gargv[2],
"-l") == 0) {
- /* Set loglevel (ctrl:chip pair independant) */
+ /* Set loglevel (ctrl:chip pair independent) */
mods.field = SIM_MOD_LOG_LEVEL;
if (convert_arguint(gargv[3], &mods.new_value) != 0)
diff --git a/usr.sbin/nandsim/nandsim_cfgparse.c b/usr.sbin/nandsim/nandsim_cfgparse.c
index a965034..a9b5eb1 100644
--- a/usr.sbin/nandsim/nandsim_cfgparse.c
+++ b/usr.sbin/nandsim/nandsim_cfgparse.c
@@ -349,7 +349,7 @@ create_ctrls(struct rcfile *f, struct sim_ctrl **ctrls, int *cnt)
/*
* ECC layout have to end up with 0xffff, so
* we're filling buffer with 0xff. If ecc_layout is
- * defined in config file, values will be overriden.
+ * defined in config file, values will be overridden.
*/
memset((void *)&ctrl_conf.ecc_layout, 0xff,
sizeof(ctrl_conf.ecc_layout));
@@ -411,7 +411,7 @@ create_chips(struct rcfile *f, struct sim_chip **chips, int *cnt)
/*
* Bad block map have to end up with 0xffff, so
* we're filling array with 0xff. If bad block map is
- * defined in config file, values will be overriden.
+ * defined in config file, values will be overridden.
*/
memset((void *)&chip_conf.bad_block_map, 0xff,
sizeof(chip_conf.bad_block_map));
diff --git a/usr.sbin/ndiscvt/Makefile b/usr.sbin/ndiscvt/Makefile
index 3322a53..f0facf4 100644
--- a/usr.sbin/ndiscvt/Makefile
+++ b/usr.sbin/ndiscvt/Makefile
@@ -22,8 +22,7 @@ CFLAGS+=-I. -I${.CURDIR} -I${.CURDIR}/../../sys
CLEANFILES= y.output
FILES= windrv_stub.c
-FILESNAME= windrv_stub.c
-FILESDIR= /usr/share/misc
+FILESDIR= ${SHAREDIR}/misc
SCRIPTS= ndisgen.sh
diff --git a/usr.sbin/ndp/ndp.c b/usr.sbin/ndp/ndp.c
index a14520c..85cb67c 100644
--- a/usr.sbin/ndp/ndp.c
+++ b/usr.sbin/ndp/ndp.c
@@ -675,7 +675,7 @@ again:;
printf("%-*.*s %-*.*s %*.*s", addrwidth, addrwidth, host_buf,
llwidth, llwidth, ether_str(sdl), ifwidth, ifwidth, ifname);
- /* Print neighbor discovery specific informations */
+ /* Print neighbor discovery specific information */
nbi = getnbrinfo(&sin->sin6_addr, sdl->sdl_index, 1);
if (nbi) {
if (nbi->expire > now.tv_sec) {
diff --git a/usr.sbin/newsyslog/newsyslog.c b/usr.sbin/newsyslog/newsyslog.c
index b63234b..9490cda 100644
--- a/usr.sbin/newsyslog/newsyslog.c
+++ b/usr.sbin/newsyslog/newsyslog.c
@@ -280,6 +280,7 @@ static int age_old_log(const char *file);
static void savelog(char *from, char *to);
static void createdir(const struct conf_entry *ent, char *dirpart);
static void createlog(const struct conf_entry *ent);
+static int parse_signal(const char *str);
/*
* All the following take a parameter of 'int', but expect values in the
@@ -1270,20 +1271,6 @@ no_trimat:
working->flags |= CE_BINARY;
break;
case 'c':
- /*
- * XXX - Ick! Ugly! Remove ASAP!
- * We want `c' and `C' for "create". But we
- * will temporarily treat `c' as `g', because
- * FreeBSD releases <= 4.8 have a typo of
- * checking ('G' || 'c') for CE_GLOB.
- */
- if (*q == 'c') {
- warnx("Assuming 'g' for 'c' in flags for line:\n%s",
- errline);
- warnx("The 'c' flag will eventually mean 'CREATE'");
- working->flags |= CE_GLOB;
- break;
- }
working->flags |= CE_CREATE;
break;
case 'd':
@@ -1338,12 +1325,13 @@ no_trimat:
if (q && *q) {
if (*q == '/')
working->pid_cmd_file = strdup(q);
- else if (isdigit(*q))
+ else if (isalnum(*q))
goto got_sig;
- else
+ else {
errx(1,
- "illegal pid file or signal number in config file:\n%s",
+ "illegal pid file or signal in config file:\n%s",
errline);
+ }
}
if (eol)
q = NULL;
@@ -1354,17 +1342,13 @@ no_trimat:
working->sig = SIGHUP;
if (q && *q) {
- if (isdigit(*q)) {
- got_sig:
- working->sig = atoi(q);
- } else {
- err_sig:
+got_sig:
+ working->sig = parse_signal(q);
+ if (working->sig < 1 || working->sig >= sys_nsig) {
errx(1,
- "illegal signal number in config file:\n%s",
+ "illegal signal in config file:\n%s",
errline);
}
- if (working->sig < 1 || working->sig >= NSIG)
- goto err_sig;
}
/*
@@ -1915,7 +1899,7 @@ do_sigwork(struct sigwork_entry *swork)
/*
* Compute the pause between consecutive signals. Use a longer
* sleep time if we will be sending two signals to the same
- * deamon or process-group.
+ * daemon or process-group.
*/
secs = 0;
nextsig = SLIST_NEXT(swork, sw_nextp);
@@ -2662,3 +2646,28 @@ change_attrs(const char *fname, const struct conf_entry *ent)
warn("can't chflags %s NODUMP", fname);
}
}
+
+/*
+ * Parse a signal number or signal name. Returns the signal number parsed or -1
+ * on failure.
+ */
+static int
+parse_signal(const char *str)
+{
+ int sig, i;
+ const char *errstr;
+
+ sig = strtonum(str, 1, sys_nsig - 1, &errstr);
+
+ if (errstr == NULL)
+ return (sig);
+ if (strncasecmp(str, "SIG", 3) == 0)
+ str += 3;
+
+ for (i = 1; i < sys_nsig; i++) {
+ if (strcasecmp(str, sys_signame[i]) == 0)
+ return (i);
+ }
+
+ return (-1);
+}
diff --git a/usr.sbin/newsyslog/newsyslog.conf.5 b/usr.sbin/newsyslog/newsyslog.conf.5
index a053f2f..0d28aab 100644
--- a/usr.sbin/newsyslog/newsyslog.conf.5
+++ b/usr.sbin/newsyslog/newsyslog.conf.5
@@ -21,7 +21,7 @@
.\" the suitability of this software for any purpose. It is
.\" provided "as is" without express or implied warranty.
.\"
-.Dd March 21, 2012
+.Dd October 24, 2015
.Dt NEWSYSLOG.CONF 5
.Os
.Sh NAME
@@ -337,7 +337,7 @@ process ID or to find a group process ID if the
.Cm U
flag was specified.
If this field is present, a
-.Ar signal_number
+.Ar signal
is sent to the process ID contained in this file.
If this field is not present and the
.Cm N
@@ -358,14 +358,23 @@ flag, the file is treated as a path to a binary to be executed
by the
.Xr newsyslog 8
after rotation instead of sending the signal out.
-.It Ar signal_number
-This optional field specifies the signal number that will be sent
-to the daemon process (or to all processes in a process group, if the
+.It Ar signal
+This optional field specifies the signal that will be sent to the daemon
+process (or to all processes in a process group, if the
.Cm U
flag was specified).
If this field is not present, then a
.Dv SIGHUP
signal will be sent.
+Signal names
+must start with
+.Dq SIG
+and be the signal name, e.g.,
+.Dv SIGUSR1 .
+Alternatively,
+.Ar signal
+can be the signal number, e.g., 30 for
+.Dv SIGUSR1 .
.El
.Sh EXAMPLES
The following is an example of the
diff --git a/usr.sbin/ntp/config.h b/usr.sbin/ntp/config.h
index 4d0a5e1..5a51e0a 100644
--- a/usr.sbin/ntp/config.h
+++ b/usr.sbin/ntp/config.h
@@ -1418,7 +1418,7 @@
#define PACKAGE_NAME "ntp"
/* Define to the full name and version of this package. */
-#define PACKAGE_STRING "ntp 4.2.8p3"
+#define PACKAGE_STRING "ntp 4.2.8p4"
/* Define to the one symbol short name of this package. */
#define PACKAGE_TARNAME "ntp"
@@ -1427,7 +1427,7 @@
#define PACKAGE_URL "http://www.ntp.org./"
/* Define to the version of this package. */
-#define PACKAGE_VERSION "4.2.8p3"
+#define PACKAGE_VERSION "4.2.8p4"
/* data dir */
#define PERLLIBDIR "/usr/local/share/ntp/lib"
@@ -1608,7 +1608,7 @@ typedef unsigned int uintptr_t;
/* #undef USE_UDP_SIGPOLL */
/* Version number of package */
-#define VERSION "4.2.8p3"
+#define VERSION "4.2.8p4"
/* vsnprintf expands "%m" to strerror(errno) */
/* #undef VSNPRINTF_PERCENT_M */
@@ -1785,5 +1785,5 @@ typedef union mpinfou {
/*
* FreeBSD specific: Explicitly specify date/time for reproducible build.
*/
-#define MKREPRO_DATE "Jul 04 2015"
-#define MKREPRO_TIME "15:42:16"
+#define MKREPRO_DATE "Oct 22 2015"
+#define MKREPRO_TIME "17:58:31"
diff --git a/usr.sbin/ntp/doc/ntp-keygen.8 b/usr.sbin/ntp/doc/ntp-keygen.8
index 89c4e09..197adbf 100644
--- a/usr.sbin/ntp/doc/ntp-keygen.8
+++ b/usr.sbin/ntp/doc/ntp-keygen.8
@@ -1,11 +1,11 @@
-.Dd February 4 2015
+.Dd October 21 2015
.Dt NTP_KEYGEN 8 User Commands
.Os
.\" EDIT THIS FILE WITH CAUTION (ntp-keygen-opts.mdoc)
.\"
.\" $FreeBSD$
.\"
-.\" It has been AutoGen-ed February 4, 2015 at 02:44:02 AM by AutoGen 5.18.5pre4
+.\" It has been AutoGen-ed October 21, 2015 at 12:40:10 PM by AutoGen 5.18.5
.\" From the definitions ntp-keygen-opts.def
.\" and the template file agmdoc-cmd.tpl
.Sh NAME
diff --git a/usr.sbin/ntp/doc/ntp.conf.5 b/usr.sbin/ntp/doc/ntp.conf.5
index 4ed9440..c7af12d 100644
--- a/usr.sbin/ntp/doc/ntp.conf.5
+++ b/usr.sbin/ntp/doc/ntp.conf.5
@@ -1,11 +1,11 @@
-.Dd February 4 2015
+.Dd October 21 2015
.Dt NTP_CONF 5 File Formats
.Os
.\" EDIT THIS FILE WITH CAUTION (ntp.mdoc)
.\"
.\" $FreeBSD$
.\"
-.\" It has been AutoGen-ed February 4, 2015 at 02:42:07 AM by AutoGen 5.18.5pre4
+.\" It has been AutoGen-ed October 21, 2015 at 12:38:24 PM by AutoGen 5.18.5
.\" From the definitions ntp.conf.def
.\" and the template file agmdoc-cmd.tpl
.Sh NAME
@@ -1905,7 +1905,7 @@ re\-associate accordingly.
Some administrators prefer to avoid running
.Xr ntpd 8
continuously and run either
-.Xr ntpdate 8
+.Xr sntp 8
or
.Xr ntpd 8
.Fl q
@@ -1997,7 +1997,7 @@ peers remaining.
This value defaults to 1, but can be changed
to any number from 1 to 15.
.It Cm minclock Ar minclock
-The clustering algorithm repeatedly casts out outlyer
+The clustering algorithm repeatedly casts out outlier
associations until no more than
.Cm minclock
associations remain.
@@ -2388,6 +2388,9 @@ This implies that
must have write permission for the directory the
drift file is located in, and that file system links, symbolic or
otherwise, should be avoided.
+.It Ic dscp Ar value
+This option specifies the Differentiated Services Control Point (DSCP) value,
+a 6\-bit code. The default value is 46, signifying Expedited Forwarding.
.It Xo Ic enable
.Oo
.Cm auth | Cm bclient |
@@ -2487,6 +2490,19 @@ This option is useful for sites that run
.Xr ntpd 8
on multiple hosts, with (mostly) common options (e.g., a
restriction list).
+.It Ic leapsmearinterval Ar seconds
+This EXPERIMENTAL option is only available if
+.Xr ntpd 8
+was built with the
+.Cm \-\-enable\-leap\-smear
+option to the
+.Cm configure
+script.
+It specifies the interval over which a leap second correction will be applied.
+Recommended values for this option are between
+7200 (2 hours) and 86400 (24 hours).
+.Sy DO NOT USE THIS OPTION ON PUBLIC\-ACCESS SERVERS!
+See http://bugs.ntp.org/2855 for more information.
.It Ic logconfig Ar configkeyword
This command controls the amount and type of output written to
the system
@@ -2620,7 +2636,9 @@ holds the names of the reference clock variables.
.Cm freq Ar freq |
.Cm huffpuff Ar huffpuff |
.Cm panic Ar panic |
-.Cm step Ar srep |
+.Cm step Ar step |
+.Cm stepback Ar stepback |
+.Cm stepfwd Ar stepfwd |
.Cm stepout Ar stepout
.Oc
.Xc
@@ -2680,6 +2698,19 @@ adjustments will never occur.
Note: The kernel time discipline is
disabled if the step threshold is set to zero or greater than the
default.
+.It Cm stepback Ar stepback
+The argument is the step threshold for the backward direction,
+which by default is 0.128 s.
+It can
+be set to any positive number in seconds.
+If both the forward and backward step thresholds are set to zero, step
+adjustments will never occur.
+Note: The kernel time discipline is
+disabled if
+each direction of step threshold are either
+set to zero or greater than .5 second.
+.It Cm stepfwd Ar stepfwd
+As for stepback, but for the forward direction.
.It Cm stepout Ar stepout
The argument is the stepout timeout, which by default is 900 s.
It can
@@ -2696,19 +2727,22 @@ pulses will not be suppressed.
.Xc
.Bl -tag -width indent
.It Cm memlock Ar Nmegabytes
-Specify the number of megabytes of memory that can be allocated.
-Probably only available under Linux, this option is useful
+Specify the number of megabytes of memory that should be
+allocated and locked.
+Probably only available under Linux, this option may be useful
when dropping root (the
.Fl i
option).
-The default is 32 megabytes. Setting this to zero will prevent any attemp to lock memory.
+The default is 32 megabytes on non\-Linux machines, and \-1 under Linux.
+-1 means "do not lock the process into memory".
+0 means "lock whatever memory the process wants into memory".
.It Cm stacksize Ar N4kPages
Specifies the maximum size of the process stack on systems with the
-.It Cm filenum Ar Nfiledescriptors
-Specifies the maximum number of file descriptors ntpd may have open at once. Defaults to the system default.
.Fn mlockall
function.
Defaults to 50 4k pages (200 4k pages in OpenBSD).
+.It Cm filenum Ar Nfiledescriptors
+Specifies the maximum number of file descriptors ntpd may have open at once. Defaults to the system default.
.El
.It Xo Ic trap Ar host_address
.Op Cm port Ar port_number
diff --git a/usr.sbin/ntp/doc/ntp.keys.5 b/usr.sbin/ntp/doc/ntp.keys.5
index 4ec3bb3..b1bcb3c 100644
--- a/usr.sbin/ntp/doc/ntp.keys.5
+++ b/usr.sbin/ntp/doc/ntp.keys.5
@@ -1,13 +1,11 @@
-.Dd February 4 2015
+.Dd October 21 2015
.Dt NTP_KEYS 5 File Formats
.Os SunOS 5.10
.\" EDIT THIS FILE WITH CAUTION (ntp.mdoc)
.\"
.\" $FreeBSD$
.\"
-.\" $FreeBSD$
-.\"
-.\" It has been AutoGen-ed February 4, 2015 at 02:42:10 AM by AutoGen 5.18.5pre4
+.\" It has been AutoGen-ed October 21, 2015 at 12:38:28 PM by AutoGen 5.18.5
.\" From the definitions ntp.keys.def
.\" and the template file agmdoc-file.tpl
.Sh NAME
diff --git a/usr.sbin/ntp/doc/ntpd.8 b/usr.sbin/ntp/doc/ntpd.8
index 665aa0b..243f96d 100644
--- a/usr.sbin/ntp/doc/ntpd.8
+++ b/usr.sbin/ntp/doc/ntpd.8
@@ -1,11 +1,11 @@
-.Dd February 4 2015
+.Dd October 21 2015
.Dt NTPD 8 User Commands
.Os
.\" EDIT THIS FILE WITH CAUTION (ntpd-opts.mdoc)
.\"
.\" $FreeBSD$
.\"
-.\" It has been AutoGen-ed February 4, 2015 at 02:42:12 AM by AutoGen 5.18.5pre4
+.\" It has been AutoGen-ed October 21, 2015 at 12:38:30 PM by AutoGen 5.18.5
.\" From the definitions ntpd-opts.def
.\" and the template file agmdoc-cmd.tpl
.Sh NAME
@@ -146,7 +146,7 @@ The name and path of the frequency file,
by default.
This is the same operation as the
\fBdriftfile\fP \fIdriftfile\fP
-configuration specification in the
+configuration specification in the
\fI/etc/ntp.conf\fP
file.
.It Fl g , Fl \-panicgate
@@ -165,6 +165,19 @@ options.
See the
\fBtinker\fP
configuration file directive for other options.
+.It Fl G , Fl \-force\-step\-once
+Step any initial offset correction..
+.sp
+Normally,
+\fBntpd\fP
+steps the time if the time offset exceeds the step threshold,
+which is 128 ms by default, and otherwise slews the time.
+This option forces the initial offset correction to be stepped,
+so the highest time accuracy can be achieved quickly.
+However, this may also cause the time to be stepped back
+so this option must not be used if
+applications requiring monotonic time are running.
+See the \fBtinker\fP configuration file directive for other options.
.It Fl i Ar string , Fl \-jaildir Ns = Ns Ar string
Jail directory.
.sp
@@ -188,7 +201,7 @@ Open the network address given, or all the addresses associated with the
given interface name. This option may appear multiple times. This option
also implies not opening other addresses, except wildcard and localhost.
This option is deprecated. Please consider using the configuration file
-\fBinterface\fP command, which is more versatile.
+\fBinterface\fP command, which is more versatile.
.It Fl k Ar string , Fl \-keyfile Ns = Ns Ar string
path to symmetric keys.
.sp
@@ -521,6 +534,8 @@ when you have permission to do so from the owner of the target host.
Finally,
in the past many startup scripts would run
.Xr ntpdate 8
+or
+.Xr sntp 8
to get the system clock close to correct before starting
.Xr ntpd 8 ,
but this was never more than a mediocre hack and is no longer needed.
@@ -530,7 +545,9 @@ and you still need to set the system time before starting
.Nm ,
please open a bug report and document what is going on,
and then look at using
-.Xr sntp 8 .
+.Xr sntp 8
+if you really need to set the clock before starting
+.Nm .
.Pp
There is a way to start
.Xr ntpd 8
diff --git a/usr.sbin/ntp/doc/ntpdc.8 b/usr.sbin/ntp/doc/ntpdc.8
index 3373614..74129c4 100644
--- a/usr.sbin/ntp/doc/ntpdc.8
+++ b/usr.sbin/ntp/doc/ntpdc.8
@@ -1,11 +1,11 @@
-.Dd February 4 2015
+.Dd October 21 2015
.Dt NTPDC 8 User Commands
.Os
.\" EDIT THIS FILE WITH CAUTION (ntpdc-opts.mdoc)
.\"
.\" $FreeBSD$
.\"
-.\" It has been AutoGen-ed February 4, 2015 at 02:42:44 AM by AutoGen 5.18.5pre4
+.\" It has been AutoGen-ed October 21, 2015 at 12:38:57 PM by AutoGen 5.18.5
.\" From the definitions ntpdc-opts.def
.\" and the template file agmdoc-cmd.tpl
.Sh NAME
diff --git a/usr.sbin/ntp/doc/ntpq.8 b/usr.sbin/ntp/doc/ntpq.8
index 1eba486..bcd1fba 100644
--- a/usr.sbin/ntp/doc/ntpq.8
+++ b/usr.sbin/ntp/doc/ntpq.8
@@ -1,11 +1,11 @@
-.Dd February 4 2015
+.Dd October 21 2015
.Dt NTPQ 8 User Commands
.Os
.\" EDIT THIS FILE WITH CAUTION (ntpq-opts.mdoc)
.\"
.\" $FreeBSD$
.\"
-.\" It has been AutoGen-ed February 4, 2015 at 02:43:19 AM by AutoGen 5.18.5pre4
+.\" It has been AutoGen-ed October 21, 2015 at 12:39:29 PM by AutoGen 5.18.5
.\" From the definitions ntpq-opts.def
.\" and the template file agmdoc-cmd.tpl
.Sh NAME
@@ -226,7 +226,9 @@ switch.
This command allows the specification of a key number to be
used to authenticate configuration requests.
This must correspond
-to a key number the server has been configured to use for this
+to the
+.Cm controlkey
+key number the server has been configured to use for this
purpose.
.It Ic keytype Xo Oo
.Cm md5 |
@@ -506,6 +508,14 @@ offset of server relative to this host
.It Ic jitter
jitter
.El
+.It Ic apeers
+Display a list of peers in the form:
+.Dl [tally]remote refid assid st t when pool reach delay offset jitter
+where the output is just like the
+.Ic peers
+command except that the
+.Ic refid
+is displayed in hex format and the association number is also displayed.
.It Ic pstats Ar assocID
Show the statistics for the peer with the given
.Ar assocID .
diff --git a/usr.sbin/ntp/doc/sntp.8 b/usr.sbin/ntp/doc/sntp.8
index 4d09cb0..9bcc78d 100644
--- a/usr.sbin/ntp/doc/sntp.8
+++ b/usr.sbin/ntp/doc/sntp.8
@@ -1,11 +1,11 @@
-.Dd February 4 2015
+.Dd October 21 2015
.Dt SNTP 8 User Commands
.Os
.\" EDIT THIS FILE WITH CAUTION (sntp-opts.mdoc)
.\"
.\" $FreeBSD$
.\"
-.\" It has been AutoGen-ed February 4, 2015 at 02:34:20 AM by AutoGen 5.18.5pre4
+.\" It has been AutoGen-ed October 21, 2015 at 12:30:59 PM by AutoGen 5.18.5
.\" From the definitions sntp-opts.def
.\" and the template file agmdoc-cmd.tpl
.Sh NAME
@@ -59,7 +59,8 @@ Otherwise, only the
is displayed.
Finally, the
.Em stratum
-of the host is reported.
+of the host is reported
+and the leap indicator is decoded and displayed.
.Sh "OPTIONS"
.Bl -tag
.It Fl 4 , Fl \-ipv4
diff --git a/usr.sbin/ntp/scripts/mkver b/usr.sbin/ntp/scripts/mkver
index 0fc94be..2bc36b5 100755
--- a/usr.sbin/ntp/scripts/mkver
+++ b/usr.sbin/ntp/scripts/mkver
@@ -6,7 +6,7 @@ PROG=${1-UNKNOWN}
ConfStr="$PROG"
-ConfStr="$ConfStr 4.2.8p3"
+ConfStr="$ConfStr 4.2.8p4"
case "$CSET" in
'') ;;
diff --git a/usr.sbin/pmcstudy/eval_expr.c b/usr.sbin/pmcstudy/eval_expr.c
index c225391..d8999a9 100644
--- a/usr.sbin/pmcstudy/eval_expr.c
+++ b/usr.sbin/pmcstudy/eval_expr.c
@@ -444,7 +444,7 @@ parse_expression(char *str)
* val OP val <or>
* val OP ( <recursively>
* d) A final optional step (not implemented yet) would be
- * to insert the mathimatical precedence paran's. For
+ * to insert the mathematical precedence paran's. For
* the start we will just do the left to right evaluation and
* then later we can add this guy to add paran's to make it
* mathimatically correct... i.e instead of 1 + 2 * 3 we
diff --git a/usr.sbin/ppp/ip.c b/usr.sbin/ppp/ip.c
index 5cd2272..5c25a09 100644
--- a/usr.sbin/ppp/ip.c
+++ b/usr.sbin/ppp/ip.c
@@ -473,7 +473,7 @@ FilterCheck(const unsigned char *packet,
ncpaddr_ntoa(&srcaddr), sport, dstip, dport);
}
return 1;
- } /* Explict match. Deny this packet */
+ } /* Explicit match. Deny this packet */
}
} else {
n++;
diff --git a/usr.sbin/ppp/ppp.8 b/usr.sbin/ppp/ppp.8
index 59eeaed..3fc6b81 100644
--- a/usr.sbin/ppp/ppp.8
+++ b/usr.sbin/ppp/ppp.8
@@ -5404,7 +5404,7 @@ and
.Dq default
can be used for
.Ar dest
-to sepcify the default route, and
+to specify the default route, and
.Dq 0.0.0.0
is understood to be the same as
.Dq default
@@ -5454,7 +5454,7 @@ and
.Dq default
can be used for
.Ar dest
-to sepcify the default route, and
+to specify the default route, and
.Dq ::
is understood to be the same as
.Dq default
diff --git a/usr.sbin/pw/pw_group.c b/usr.sbin/pw/pw_group.c
index 711ef68..67beab9 100644
--- a/usr.sbin/pw/pw_group.c
+++ b/usr.sbin/pw/pw_group.c
@@ -259,7 +259,7 @@ pw_group_next(int argc, char **argv, char *arg1 __unused)
struct userconf *cnf;
const char *cfg = NULL;
int ch;
- bool quiet;
+ bool quiet = false;
while ((ch = getopt(argc, argv, "Cq")) != -1) {
switch (ch) {
diff --git a/usr.sbin/pw/pw_user.c b/usr.sbin/pw/pw_user.c
index 1af8f81..5c168ab 100644
--- a/usr.sbin/pw/pw_user.c
+++ b/usr.sbin/pw/pw_user.c
@@ -107,8 +107,10 @@ mkdir_home_parents(int dfd, const char *dir)
errx(EX_UNAVAILABLE, "out of memory");
tmp = strrchr(dirs, '/');
- if (tmp == NULL)
+ if (tmp == NULL) {
+ free(dirs);
return;
+ }
tmp[0] = '\0';
/*
@@ -280,9 +282,10 @@ pw_userlock(char *arg1, int mode)
if (arg1 == NULL)
errx(EX_DATAERR, "username or id required");
- if (arg1[strspn(arg1, "0123456789")] == '\0')
+ if (arg1[strspn(arg1, "0123456789")] == '\0') {
id = pw_checkid(arg1, UID_MAX);
- else
+ name = NULL;
+ } else
name = arg1;
pwd = (name != NULL) ? GETPWNAM(pw_checkname(name, 0)) : GETPWUID(id);
diff --git a/usr.sbin/rtadvd/config.c b/usr.sbin/rtadvd/config.c
index 4f14e0fb..d63af5a 100644
--- a/usr.sbin/rtadvd/config.c
+++ b/usr.sbin/rtadvd/config.c
@@ -808,7 +808,7 @@ getconfig_free_rti:
makeentry(entbuf, sizeof(entbuf), i, "rdnss");
addr = (char *)agetstr(entbuf, &bp);
if (addr == NULL)
- break;
+ continue;
ELM_MALLOC(rdn, exit(1));
TAILQ_INIT(&rdn->rd_list);
@@ -859,7 +859,7 @@ getconfig_free_rdn:
makeentry(entbuf, sizeof(entbuf), i, "dnssl");
addr = (char *)agetstr(entbuf, &bp);
if (addr == NULL)
- break;
+ continue;
ELM_MALLOC(dns, exit(1));
@@ -1528,6 +1528,7 @@ make_packet(struct rainfo *rai)
/* Padding to next 8 octets boundary */
len = buf - (char *)ndopt_dnssl;
len += (len % 8) ? 8 - len % 8 : 0;
+ buf = (char *)ndopt_dnssl + len;
/* Length field must be in 8 octets */
ndopt_dnssl->nd_opt_dnssl_len = len / 8;
diff --git a/usr.sbin/rtadvd/if.c b/usr.sbin/rtadvd/if.c
index 0eef734..b9af28d 100644
--- a/usr.sbin/rtadvd/if.c
+++ b/usr.sbin/rtadvd/if.c
@@ -358,8 +358,7 @@ update_persist_ifinfo(struct ifilist_head_t *ifi_head, const char *ifname)
ELM_MALLOC(ifi, exit(1));
ifi->ifi_ifindex = 0;
- strncpy(ifi->ifi_ifname, ifname, sizeof(ifi->ifi_ifname)-1);
- ifi->ifi_ifname[sizeof(ifi->ifi_ifname)-1] = '\0';
+ strlcpy(ifi->ifi_ifname, ifname, sizeof(ifi->ifi_ifname));
ifi->ifi_rainfo = NULL;
ifi->ifi_state = IFI_STATE_UNCONFIGURED;
TAILQ_INSERT_TAIL(ifi_head, ifi, ifi_next);
diff --git a/usr.sbin/rtsold/rtsold.c b/usr.sbin/rtsold/rtsold.c
index 85ee133..b251482 100644
--- a/usr.sbin/rtsold/rtsold.c
+++ b/usr.sbin/rtsold/rtsold.c
@@ -779,15 +779,15 @@ static void
usage(void)
{
#ifndef SMALL
- fprintf(stderr, "usage: rtsold [-adDfFm1] [-O script-name] "
- "[-P pidfile] [-R script-name] interfaces...\n");
fprintf(stderr, "usage: rtsold [-dDfFm1] [-O script-name] "
- "[-P pidfile] [-R script-name] -a\n");
+ "[-p pidfile] [-R script-name] interface ...\n");
+ fprintf(stderr, "usage: rtsold [-dDfFm1] [-O script-name] "
+ "[-p pidfile] [-R script-name] -a\n");
#else
fprintf(stderr, "usage: rtsol [-dDF] [-O script-name] "
- "[-P pidfile] [-R script-name] interfaces...\n");
+ "[-p pidfile] [-R script-name] interface ...\n");
fprintf(stderr, "usage: rtsol [-dDF] [-O script-name] "
- "[-P pidfile] [-R script-name] -a\n");
+ "[-p pidfile] [-R script-name] -a\n");
#endif
}
diff --git a/usr.sbin/rtsold/rtsold.h b/usr.sbin/rtsold/rtsold.h
index 56b4185..f19fb3c 100644
--- a/usr.sbin/rtsold/rtsold.h
+++ b/usr.sbin/rtsold/rtsold.h
@@ -67,7 +67,7 @@ struct ifinfo {
int active; /* interface status */
int probeinterval; /* interval of probe timer (if necessary) */
int probetimer; /* rest of probe timer */
- int mediareqok; /* wheter the IF supports SIOCGIFMEDIA */
+ int mediareqok; /* whether the IF supports SIOCGIFMEDIA */
int otherconfig; /* need a separate protocol for the "other"
* configuration */
int state;
diff --git a/usr.sbin/tzsetup/tzsetup.c b/usr.sbin/tzsetup/tzsetup.c
index 7d2a936..fc80364 100644
--- a/usr.sbin/tzsetup/tzsetup.c
+++ b/usr.sbin/tzsetup/tzsetup.c
@@ -40,7 +40,6 @@ __FBSDID("$FreeBSD$");
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
-#include <sysexits.h>
#include <time.h>
#include <unistd.h>
@@ -945,18 +944,23 @@ main(int argc, char **argv)
if (argc - optind > 1)
usage();
- if (chrootenv != NULL) {
- rv = chroot(chrootenv);
- if (rv != 0)
- err(EX_OSERR, "chroot to %s", chrootenv);
+ if (chrootenv == NULL) {
+ strcpy(path_zonetab, _PATH_ZONETAB);
+ strcpy(path_iso3166, _PATH_ISO3166);
+ strcpy(path_zoneinfo, _PATH_ZONEINFO);
+ strcpy(path_localtime, _PATH_LOCALTIME);
+ strcpy(path_db, _PATH_DB);
+ strcpy(path_wall_cmos_clock, _PATH_WALL_CMOS_CLOCK);
+ } else {
+ sprintf(path_zonetab, "%s/%s", chrootenv, _PATH_ZONETAB);
+ sprintf(path_iso3166, "%s/%s", chrootenv, _PATH_ISO3166);
+ sprintf(path_zoneinfo, "%s/%s", chrootenv, _PATH_ZONEINFO);
+ sprintf(path_localtime, "%s/%s", chrootenv, _PATH_LOCALTIME);
+ sprintf(path_db, "%s/%s", chrootenv, _PATH_DB);
+ sprintf(path_wall_cmos_clock, "%s/%s", chrootenv,
+ _PATH_WALL_CMOS_CLOCK);
}
- strcpy(path_zonetab, _PATH_ZONETAB);
- strcpy(path_iso3166, _PATH_ISO3166);
- strcpy(path_zoneinfo, _PATH_ZONEINFO);
- strcpy(path_localtime, _PATH_LOCALTIME);
- strcpy(path_db, _PATH_DB);
- strcpy(path_wall_cmos_clock, _PATH_WALL_CMOS_CLOCK);
/* Override the user-supplied umask. */
(void)umask(S_IWGRP | S_IWOTH);
diff --git a/usr.sbin/uefisign/magic.h b/usr.sbin/uefisign/magic.h
index 4c3ad4e..85f2c55 100644
--- a/usr.sbin/uefisign/magic.h
+++ b/usr.sbin/uefisign/magic.h
@@ -50,7 +50,7 @@ static const char *magic_fmt =
"a = FORMAT:HEX,BITSTRING:00\n"
/*
* Well, there should be some other struct here, "SPCLink", but it doesn't
- * appear to be neccessary for UEFI, and I have no idea how to synthesize it,
+ * appear to be necessary for UEFI, and I have no idea how to synthesize it,
* as it uses the CHOICE type.
*/
"\n"
diff --git a/usr.sbin/uefisign/pe.c b/usr.sbin/uefisign/pe.c
index f4695b4..768ba5a 100644
--- a/usr.sbin/uefisign/pe.c
+++ b/usr.sbin/uefisign/pe.c
@@ -304,7 +304,7 @@ parse_directory(struct executable *x, off_t off,
* Note that most software does not care about the checksum at all; perhaps
* we could just set it to 0 instead.
*
- * XXX: Endianess?
+ * XXX: Endianness?
*/
static uint32_t
compute_checksum(const struct executable *x)
diff --git a/usr.sbin/ypbind/ypbind.c b/usr.sbin/ypbind/ypbind.c
index 7d18d22..af49133 100644
--- a/usr.sbin/ypbind/ypbind.c
+++ b/usr.sbin/ypbind/ypbind.c
@@ -396,7 +396,7 @@ main(int argc, char *argv[])
if (flock(yplockfd, LOCK_EX|LOCK_NB) == -1 && errno == EWOULDBLOCK)
errx(1, "another ypbind is already running. Aborting");
- /* XXX domainname will be overriden if we use restricted mode */
+ /* XXX domainname will be overridden if we use restricted mode */
yp_get_default_domain(&domain_name);
if (domain_name[0] == '\0')
errx(1, "domainname not set. Aborting");
diff --git a/usr.sbin/ypserv/ypinit.sh b/usr.sbin/ypserv/ypinit.sh
index a55e4cb..5008bcf 100644
--- a/usr.sbin/ypserv/ypinit.sh
+++ b/usr.sbin/ypserv/ypinit.sh
@@ -235,7 +235,7 @@ then
for MAP in ${YPMAPLIST}
do
- echo "Transfering ${MAP}..."
+ echo "Transferring ${MAP}..."
if ! ${YPXFR} -p ${YP_DIR} -h ${MASTER} -c -d ${DOMAIN} ${MAP}; then
echo "Can't transfer map ${MAP}." 1>&2
ERROR_EXISTS="YES"
diff --git a/usr.sbin/zic/zdump/Makefile b/usr.sbin/zic/zdump/Makefile
index d654dee..2ff7db9 100644
--- a/usr.sbin/zic/zdump/Makefile
+++ b/usr.sbin/zic/zdump/Makefile
@@ -7,7 +7,7 @@ MAN= zdump.8
SRCS= zdump.c ialloc.c scheck.c
CFLAGS+= -DTM_GMTOFF=tm_gmtoff -DTM_ZONE=tm_zone -DSTD_INSPIRED -DPCTS
-CFLAGS+= -DHAVE_LONG_DOUBLE -DTZDIR=\"/usr/share/zoneinfo\" -Demkdir=mkdir
+CFLAGS+= -DHAVE_LONG_DOUBLE -DTZDIR=\"${SHAREDIR}/zoneinfo\" -Demkdir=mkdir
CFLAGS+= -I${.CURDIR}/.. -I${.CURDIR}/../../../contrib/tzcode/stdtime
WARNS?= 2
diff --git a/usr.sbin/zic/zic/Makefile b/usr.sbin/zic/zic/Makefile
index f473da5..c38e3b8 100644
--- a/usr.sbin/zic/zic/Makefile
+++ b/usr.sbin/zic/zic/Makefile
@@ -7,7 +7,7 @@ MAN= zic.8
SRCS= zic.c ialloc.c scheck.c
CFLAGS+= -DTM_GMTOFF=tm_gmtoff -DTM_ZONE=tm_zone -DSTD_INSPIRED -DPCTS
-CFLAGS+= -DHAVE_LONG_DOUBLE -DTZDIR=\"/usr/share/zoneinfo\" -Demkdir=mkdir
+CFLAGS+= -DHAVE_LONG_DOUBLE -DTZDIR=\"${SHAREDIR}/zoneinfo\" -Demkdir=mkdir
CFLAGS+= -DHAVE_STRERROR -DHAVE_UNISTD_H
CFLAGS+= -I${.CURDIR}/.. -I${.CURDIR}/../../../contrib/tzcode/stdtime
OpenPOWER on IntegriCloud